From 1c9e232d87fe08526acb86e6437248c3e7fb5361 Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Tue, 15 Mar 2022 17:15:55 +0100 Subject: [PATCH 01/23] init com --- .gitignore | 14 + README.md | 1 + pyproject.toml | 6 + requirements.txt | 2 + setup.cfg | 34 + src/citationnet/__init__.py | 38 + .../static/lib/3d-force-graph.common.js | 588 + .../static/lib/3d-force-graph.d.ts | 82 + src/citationnet/static/lib/3d-force-graph.js | 59881 ++++++++++++++++ .../static/lib/3d-force-graph.js.map | 1 + .../static/lib/3d-force-graph.min.js | 5 + .../static/lib/3d-force-graph.module.js | 579 + src/citationnet/static/lib/d3-force.js | 693 + .../static/lib/force-citationNet.js | 321 + .../static/lib/select2-bootstrap4.min.css | 1 + src/citationnet/static/lib/sidebar.css | 116 + src/citationnet/static/lib/sidebar.js | 19 + src/citationnet/templates/visDynamic.html | 84 + 18 files changed, 62465 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 pyproject.toml create mode 100644 requirements.txt create mode 100644 setup.cfg create mode 100644 src/citationnet/__init__.py create mode 100644 src/citationnet/static/lib/3d-force-graph.common.js create mode 100644 src/citationnet/static/lib/3d-force-graph.d.ts create mode 100644 src/citationnet/static/lib/3d-force-graph.js create mode 100644 src/citationnet/static/lib/3d-force-graph.js.map create mode 100644 src/citationnet/static/lib/3d-force-graph.min.js create mode 100644 src/citationnet/static/lib/3d-force-graph.module.js create mode 100644 src/citationnet/static/lib/d3-force.js create mode 100644 src/citationnet/static/lib/force-citationNet.js create mode 100644 src/citationnet/static/lib/select2-bootstrap4.min.css create mode 100644 src/citationnet/static/lib/sidebar.css create mode 100644 src/citationnet/static/lib/sidebar.js create mode 100644 src/citationnet/templates/visDynamic.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..39d91db --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +env/ + +*.pyc +__pycache__/ + +instance/ + +.pytest_cache/ +.coverage +htmlcov/ + +dist/ +build/ +*.egg-info/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..ba8eee4 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# CitationNet Visualization diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..374b58c --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,6 @@ +[build-system] +requires = [ + "setuptools>=42", + "wheel" +] +build-backend = "setuptools.build_meta" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..dd9f47b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +flask +pandas diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..74ab7e0 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,34 @@ +[metadata] +name = citationnet +version = 0.0.1 +author = Malte Vogl +author_email = mvogl@mpiwg-berlin.mpg.de +description = Visualize citation and reference networks in 3D. +long_description = file: README.md +long_description_content_type = text/markdown +url = https://gitlab.gwdg.de/modelsen/citationnet +project_urls = + Project Home = https://modelsen.mpiwg-berlin.mpg.de + Bug Tracker = https://gitlab.gwdg.de/modelsen/citationnet/-/issues +classifiers = + Programming Language :: Python :: 3 + License :: OSI Approved :: MIT License + Operating System :: OS Independent + +[options] +package_dir = + = src +packages = find: +python_requires = >=3.8 +install_requires = + flask + semanticlayertools + +[options.extras_require] +dev = + twine + tox + sphinx + +[options.packages.find] +where = src diff --git a/src/citationnet/__init__.py b/src/citationnet/__init__.py new file mode 100644 index 0000000..3381cd0 --- /dev/null +++ b/src/citationnet/__init__.py @@ -0,0 +1,38 @@ +import os + +from flask import Flask, render_template + + +def create_app(test_config=None): + # create and configure the app + app = Flask(__name__, instance_relative_config=True) + app.config.from_mapping( + SECRET_KEY='dev', + DATABASE=os.path.join(app.instance_path, 'citationnet.sqlite'), + ) + + if test_config is None: + # load the instance config, if it exists, when not testing + app.config.from_pyfile('config.py', silent=True) + else: + # load the test config if passed in + app.config.from_mapping(test_config) + + # ensure the instance folder exists + try: + os.makedirs(app.instance_path) + except OSError: + pass + + # a simple page that says hello + @app.route('/hello') + def hello(): + return 'Hello, World!' + + @app.route('/citationnet/') + @app.route('/citationnet/') + def citnet(name=None): + return render_template('visDynamic.html', name=name) + + + return app diff --git a/src/citationnet/static/lib/3d-force-graph.common.js b/src/citationnet/static/lib/3d-force-graph.common.js new file mode 100644 index 0000000..38fbd8e --- /dev/null +++ b/src/citationnet/static/lib/3d-force-graph.common.js @@ -0,0 +1,588 @@ +'use strict'; + +var three$1 = require('three'); +var DragControls_js = require('three/examples/jsm/controls/DragControls.js'); +var ThreeForceGraph = require('three-forcegraph'); +var ThreeRenderObjects = require('three-render-objects'); +var accessorFn = require('accessor-fn'); +var Kapsule = require('kapsule'); + +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +var ThreeForceGraph__default = /*#__PURE__*/_interopDefaultLegacy(ThreeForceGraph); +var ThreeRenderObjects__default = /*#__PURE__*/_interopDefaultLegacy(ThreeRenderObjects); +var accessorFn__default = /*#__PURE__*/_interopDefaultLegacy(accessorFn); +var Kapsule__default = /*#__PURE__*/_interopDefaultLegacy(Kapsule); + +function styleInject(css, ref) { + if (ref === void 0) ref = {}; + var insertAt = ref.insertAt; + + if (!css || typeof document === 'undefined') { + return; + } + + var head = document.head || document.getElementsByTagName('head')[0]; + var style = document.createElement('style'); + style.type = 'text/css'; + + if (insertAt === 'top') { + if (head.firstChild) { + head.insertBefore(style, head.firstChild); + } else { + head.appendChild(style); + } + } else { + head.appendChild(style); + } + + if (style.styleSheet) { + style.styleSheet.cssText = css; + } else { + style.appendChild(document.createTextNode(css)); + } +} + +var css_248z = ".graph-info-msg {\n top: 50%;\n width: 100%;\n text-align: center;\n color: lavender;\n opacity: 0.7;\n font-size: 22px;\n position: absolute;\n font-family: Sans-serif;\n}\n\n.scene-container .clickable {\n cursor: pointer;\n}\n\n.scene-container .grabbable {\n cursor: move;\n cursor: grab;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n}\n\n.scene-container .grabbable:active {\n cursor: grabbing;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n}"; +styleInject(css_248z); + +function ownKeys(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + + if (enumerableOnly) { + symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + }); + } + + keys.push.apply(keys, symbols); + } + + return keys; +} + +function _objectSpread2(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + + if (i % 2) { + ownKeys(Object(source), true).forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } else if (Object.getOwnPropertyDescriptors) { + Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); + } else { + ownKeys(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + } + + return target; +} + +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + +function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); +} + +function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); +} + +function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; +} + +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +function linkKapsule (kapsulePropName, kapsuleType) { + var dummyK = new kapsuleType(); // To extract defaults + + return { + linkProp: function linkProp(prop) { + // link property config + return { + "default": dummyK[prop](), + onChange: function onChange(v, state) { + state[kapsulePropName][prop](v); + }, + triggerUpdate: false + }; + }, + linkMethod: function linkMethod(method) { + // link method pass-through + return function (state) { + var kapsuleInstance = state[kapsulePropName]; + + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var returnVal = kapsuleInstance[method].apply(kapsuleInstance, args); + return returnVal === kapsuleInstance ? this // chain based on the parent object, not the inner kapsule + : returnVal; + }; + } + }; +} + +var three = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists +: { + AmbientLight: three$1.AmbientLight, + DirectionalLight: three$1.DirectionalLight, + Vector3: three$1.Vector3 +}; + +var CAMERA_DISTANCE2NODES_FACTOR = 170; // +// Expose config from forceGraph + +var bindFG = linkKapsule('forceGraph', ThreeForceGraph__default['default']); +var linkedFGProps = Object.assign.apply(Object, _toConsumableArray(['jsonUrl', 'graphData', 'numDimensions', 'dagMode', 'dagLevelDistance', 'dagNodeFilter', 'onDagError', 'nodeRelSize', 'nodeId', 'nodeVal', 'nodeResolution', 'nodeColor', 'nodeAutoColorBy', 'nodeOpacity', 'nodeVisibility', 'nodeThreeObject', 'nodeThreeObjectExtend', 'linkSource', 'linkTarget', 'linkVisibility', 'linkColor', 'linkAutoColorBy', 'linkOpacity', 'linkWidth', 'linkResolution', 'linkCurvature', 'linkCurveRotation', 'linkMaterial', 'linkThreeObject', 'linkThreeObjectExtend', 'linkPositionUpdate', 'linkDirectionalArrowLength', 'linkDirectionalArrowColor', 'linkDirectionalArrowRelPos', 'linkDirectionalArrowResolution', 'linkDirectionalParticles', 'linkDirectionalParticleSpeed', 'linkDirectionalParticleWidth', 'linkDirectionalParticleColor', 'linkDirectionalParticleResolution', 'forceEngine', 'd3AlphaDecay', 'd3VelocityDecay', 'd3AlphaMin', 'ngraphPhysics', 'warmupTicks', 'cooldownTicks', 'cooldownTime', 'onEngineTick', 'onEngineStop'].map(function (p) { + return _defineProperty({}, p, bindFG.linkProp(p)); +}))); +var linkedFGMethods = Object.assign.apply(Object, _toConsumableArray(['refresh', 'getGraphBbox', 'd3Force', 'd3ReheatSimulation', 'emitParticle'].map(function (p) { + return _defineProperty({}, p, bindFG.linkMethod(p)); +}))); // Expose config from renderObjs + +var bindRenderObjs = linkKapsule('renderObjs', ThreeRenderObjects__default['default']); +var linkedRenderObjsProps = Object.assign.apply(Object, _toConsumableArray(['width', 'height', 'backgroundColor', 'showNavInfo', 'enablePointerInteraction'].map(function (p) { + return _defineProperty({}, p, bindRenderObjs.linkProp(p)); +}))); +var linkedRenderObjsMethods = Object.assign.apply(Object, _toConsumableArray(['cameraPosition', 'postProcessingComposer'].map(function (p) { + return _defineProperty({}, p, bindRenderObjs.linkMethod(p)); +})).concat([{ + graph2ScreenCoords: bindRenderObjs.linkMethod('getScreenCoords'), + screen2GraphCoords: bindRenderObjs.linkMethod('getSceneCoords') +}])); // + +var _3dForceGraph = Kapsule__default['default']({ + props: _objectSpread2(_objectSpread2({ + nodeLabel: { + "default": 'name', + triggerUpdate: false + }, + linkLabel: { + "default": 'name', + triggerUpdate: false + }, + linkHoverPrecision: { + "default": 1, + onChange: function onChange(p, state) { + return state.renderObjs.lineHoverPrecision(p); + }, + triggerUpdate: false + }, + enableNavigationControls: { + "default": true, + onChange: function onChange(enable, state) { + var controls = state.renderObjs.controls(); + + if (controls) { + controls.enabled = enable; + } + }, + triggerUpdate: false + }, + enableNodeDrag: { + "default": true, + triggerUpdate: false + }, + onNodeDrag: { + "default": function _default() {}, + triggerUpdate: false + }, + onNodeDragEnd: { + "default": function _default() {}, + triggerUpdate: false + }, + onNodeClick: { + triggerUpdate: false + }, + onNodeRightClick: { + triggerUpdate: false + }, + onNodeHover: { + triggerUpdate: false + }, + onLinkClick: { + triggerUpdate: false + }, + onLinkRightClick: { + triggerUpdate: false + }, + onLinkHover: { + triggerUpdate: false + }, + onBackgroundClick: { + triggerUpdate: false + }, + onBackgroundRightClick: { + triggerUpdate: false + } + }, linkedFGProps), linkedRenderObjsProps), + methods: _objectSpread2(_objectSpread2({ + zoomToFit: function zoomToFit(state, transitionDuration, padding) { + var _state$forceGraph; + + for (var _len = arguments.length, bboxArgs = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { + bboxArgs[_key - 3] = arguments[_key]; + } + + state.renderObjs.fitToBbox((_state$forceGraph = state.forceGraph).getGraphBbox.apply(_state$forceGraph, bboxArgs), transitionDuration, padding); + return this; + }, + pauseAnimation: function pauseAnimation(state) { + if (state.animationFrameRequestId !== null) { + cancelAnimationFrame(state.animationFrameRequestId); + state.animationFrameRequestId = null; + } + + return this; + }, + resumeAnimation: function resumeAnimation(state) { + if (state.animationFrameRequestId === null) { + this._animationCycle(); + } + + return this; + }, + _animationCycle: function _animationCycle(state) { + if (state.enablePointerInteraction) { + // reset canvas cursor (override dragControls cursor) + this.renderer().domElement.style.cursor = null; + } // Frame cycle + + + state.forceGraph.tickFrame(); + state.renderObjs.tick(); + state.animationFrameRequestId = requestAnimationFrame(this._animationCycle); + }, + scene: function scene(state) { + return state.renderObjs.scene(); + }, + // Expose scene + camera: function camera(state) { + return state.renderObjs.camera(); + }, + // Expose camera + renderer: function renderer(state) { + return state.renderObjs.renderer(); + }, + // Expose renderer + controls: function controls(state) { + return state.renderObjs.controls(); + }, + // Expose controls + tbControls: function tbControls(state) { + return state.renderObjs.tbControls(); + }, + // To be deprecated + _destructor: function _destructor() { + this.pauseAnimation(); + this.graphData({ + nodes: [], + links: [] + }); + } + }, linkedFGMethods), linkedRenderObjsMethods), + stateInit: function stateInit(_ref5) { + var controlType = _ref5.controlType, + rendererConfig = _ref5.rendererConfig, + extraRenderers = _ref5.extraRenderers; + return { + forceGraph: new ThreeForceGraph__default['default'](), + renderObjs: ThreeRenderObjects__default['default']({ + controlType: controlType, + rendererConfig: rendererConfig, + extraRenderers: extraRenderers + }) + }; + }, + init: function init(domNode, state) { + // Wipe DOM + domNode.innerHTML = ''; // Add relative container + + domNode.appendChild(state.container = document.createElement('div')); + state.container.style.position = 'relative'; // Add renderObjs + + var roDomNode = document.createElement('div'); + state.container.appendChild(roDomNode); + state.renderObjs(roDomNode); + var camera = state.renderObjs.camera(); + var renderer = state.renderObjs.renderer(); + var controls = state.renderObjs.controls(); + controls.enabled = !!state.enableNavigationControls; + state.lastSetCameraZ = camera.position.z; // Add info space + + var infoElem; + state.container.appendChild(infoElem = document.createElement('div')); + infoElem.className = 'graph-info-msg'; + infoElem.textContent = ''; // config forcegraph + + state.forceGraph.onLoading(function () { + infoElem.textContent = 'Loading...'; + }).onFinishLoading(function () { + infoElem.textContent = ''; + }).onUpdate(function () { + // sync graph data structures + state.graphData = state.forceGraph.graphData(); // re-aim camera, if still in default position (not user modified) + + if (camera.position.x === 0 && camera.position.y === 0 && camera.position.z === state.lastSetCameraZ && state.graphData.nodes.length) { + camera.lookAt(state.forceGraph.position); + state.lastSetCameraZ = camera.position.z = Math.cbrt(state.graphData.nodes.length) * CAMERA_DISTANCE2NODES_FACTOR; + } + }).onFinishUpdate(function () { + // Setup node drag interaction + if (state._dragControls) { + var curNodeDrag = state.graphData.nodes.find(function (node) { + return node.__initialFixedPos && !node.__disposeControlsAfterDrag; + }); // detect if there's a node being dragged using the existing drag controls + + if (curNodeDrag) { + curNodeDrag.__disposeControlsAfterDrag = true; // postpone previous controls disposal until drag ends + } else { + state._dragControls.dispose(); // cancel previous drag controls + + } + + state._dragControls = undefined; + } + + if (state.enableNodeDrag && state.enablePointerInteraction && state.forceEngine === 'd3') { + // Can't access node positions programatically in ngraph + var dragControls = state._dragControls = new DragControls_js.DragControls(state.graphData.nodes.map(function (node) { + return node.__threeObj; + }).filter(function (obj) { + return obj; + }), camera, renderer.domElement); + dragControls.addEventListener('dragstart', function (event) { + controls.enabled = false; // Disable controls while dragging + // track drag object movement + + event.object.__initialPos = event.object.position.clone(); + event.object.__prevPos = event.object.position.clone(); + + var node = getGraphObj(event.object).__data; + + !node.__initialFixedPos && (node.__initialFixedPos = { + fx: node.fx, + fy: node.fy, + fz: node.fz + }); + !node.__initialPos && (node.__initialPos = { + x: node.x, + y: node.y, + z: node.z + }); // lock node + + ['x', 'y', 'z'].forEach(function (c) { + return node["f".concat(c)] = node[c]; + }); // drag cursor + + renderer.domElement.classList.add('grabbable'); + }); + dragControls.addEventListener('drag', function (event) { + var nodeObj = getGraphObj(event.object); + + if (!event.object.hasOwnProperty('__graphObjType')) { + // If dragging a child of the node, update the node object instead + var initPos = event.object.__initialPos; + var prevPos = event.object.__prevPos; + var _newPos = event.object.position; + nodeObj.position.add(_newPos.clone().sub(prevPos)); // translate node object by the motion delta + + prevPos.copy(_newPos); + + _newPos.copy(initPos); // reset child back to its initial position + + } + + var node = nodeObj.__data; + var newPos = nodeObj.position; + var translate = { + x: newPos.x - node.x, + y: newPos.y - node.y, + z: newPos.z - node.z + }; // Move fx/fy/fz (and x/y/z) of nodes based on object new position + + ['x', 'y', 'z'].forEach(function (c) { + return node["f".concat(c)] = node[c] = newPos[c]; + }); + state.forceGraph.d3AlphaTarget(0.3) // keep engine running at low intensity throughout drag + .resetCountdown(); // prevent freeze while dragging + + node.__dragged = true; + state.onNodeDrag(node, translate); + }); + dragControls.addEventListener('dragend', function (event) { + delete event.object.__initialPos; // remove tracking attributes + + delete event.object.__prevPos; + + var node = getGraphObj(event.object).__data; // dispose previous controls if needed + + + if (node.__disposeControlsAfterDrag) { + dragControls.dispose(); + delete node.__disposeControlsAfterDrag; + } + + var initFixedPos = node.__initialFixedPos; + var initPos = node.__initialPos; + var translate = { + x: initPos.x - node.x, + y: initPos.y - node.y, + z: initPos.z - node.z + }; + + if (initFixedPos) { + ['x', 'y', 'z'].forEach(function (c) { + var fc = "f".concat(c); + + if (initFixedPos[fc] === undefined) { + delete node[fc]; + } + }); + delete node.__initialFixedPos; + delete node.__initialPos; + + if (node.__dragged) { + delete node.__dragged; + state.onNodeDragEnd(node, translate); + } + } + + state.forceGraph.d3AlphaTarget(0) // release engine low intensity + .resetCountdown(); // let the engine readjust after releasing fixed nodes + + if (state.enableNavigationControls) { + controls.enabled = true; // Re-enable controls + + controls.domElement && controls.domElement.ownerDocument && controls.domElement.ownerDocument.dispatchEvent( // simulate mouseup to ensure the controls don't take over after dragend + new PointerEvent('pointerup', { + pointerType: 'mouse' + })); + } // clear cursor + + + renderer.domElement.classList.remove('grabbable'); + }); + } + }); // config renderObjs + + state.renderObjs.objects([// Populate scene + new three.AmbientLight(0xbbbbbb), new three.DirectionalLight(0xffffff, 0.6), state.forceGraph]).hoverOrderComparator(function (a, b) { + // Prioritize graph objects + var aObj = getGraphObj(a); + if (!aObj) return 1; + var bObj = getGraphObj(b); + if (!bObj) return -1; // Prioritize nodes over links + + var isNode = function isNode(o) { + return o.__graphObjType === 'node'; + }; + + return isNode(bObj) - isNode(aObj); + }).tooltipContent(function (obj) { + var graphObj = getGraphObj(obj); + return graphObj ? accessorFn__default['default'](state["".concat(graphObj.__graphObjType, "Label")])(graphObj.__data) || '' : ''; + }).hoverDuringDrag(false).onHover(function (obj) { + // Update tooltip and trigger onHover events + var hoverObj = getGraphObj(obj); + + if (hoverObj !== state.hoverObj) { + var prevObjType = state.hoverObj ? state.hoverObj.__graphObjType : null; + var prevObjData = state.hoverObj ? state.hoverObj.__data : null; + var objType = hoverObj ? hoverObj.__graphObjType : null; + var objData = hoverObj ? hoverObj.__data : null; + + if (prevObjType && prevObjType !== objType) { + // Hover out + var fn = state["on".concat(prevObjType === 'node' ? 'Node' : 'Link', "Hover")]; + fn && fn(null, prevObjData); + } + + if (objType) { + // Hover in + var _fn = state["on".concat(objType === 'node' ? 'Node' : 'Link', "Hover")]; + _fn && _fn(objData, prevObjType === objType ? prevObjData : null); + } // set pointer if hovered object is clickable + + + renderer.domElement.classList[hoverObj && state["on".concat(objType === 'node' ? 'Node' : 'Link', "Click")] || !hoverObj && state.onBackgroundClick ? 'add' : 'remove']('clickable'); + state.hoverObj = hoverObj; + } + }).clickAfterDrag(false).onClick(function (obj, ev) { + var graphObj = getGraphObj(obj); + + if (graphObj) { + var fn = state["on".concat(graphObj.__graphObjType === 'node' ? 'Node' : 'Link', "Click")]; + fn && fn(graphObj.__data, ev); + } else { + state.onBackgroundClick && state.onBackgroundClick(ev); + } + }).onRightClick(function (obj, ev) { + // Handle right-click events + var graphObj = getGraphObj(obj); + + if (graphObj) { + var fn = state["on".concat(graphObj.__graphObjType === 'node' ? 'Node' : 'Link', "RightClick")]; + fn && fn(graphObj.__data, ev); + } else { + state.onBackgroundRightClick && state.onBackgroundRightClick(ev); + } + }); // + // Kick-off renderer + + this._animationCycle(); + } +}); // + +function getGraphObj(object) { + var obj = object; // recurse up object chain until finding the graph object + + while (obj && !obj.hasOwnProperty('__graphObjType')) { + obj = obj.parent; + } + + return obj; +} + +module.exports = _3dForceGraph; diff --git a/src/citationnet/static/lib/3d-force-graph.d.ts b/src/citationnet/static/lib/3d-force-graph.d.ts new file mode 100644 index 0000000..c7dc750 --- /dev/null +++ b/src/citationnet/static/lib/3d-force-graph.d.ts @@ -0,0 +1,82 @@ +import { WebGLRendererParameters, Renderer, Scene, Camera, WebGLRenderer } from 'three'; +import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js'; +import { ThreeForceGraphGeneric } from 'three-forcegraph'; + +interface ConfigOptions { + controlType?: 'trackball' | 'orbit' | 'fly' + rendererConfig?: WebGLRendererParameters, + extraRenderers?: Renderer[] +} + +type Accessor = Out | string | ((obj: In) => Out); +type ObjAccessor = Accessor; + +type Coords = { x: number; y: number; z: number; }; + +// don't surface these internal props from inner ThreeForceGraph +type ExcludedInnerProps = 'onLoading' | 'onFinishLoading' | 'onUpdate' | 'onFinishUpdate' | 'tickFrame' | 'd3AlphaTarget'; + +interface ForceGraph3DGenericInstance + extends Omit, ExcludedInnerProps> { + (element: HTMLElement): ChainableInstance; + _destructor(): void; + + // Container layout + width(): number; + width(width: number): ChainableInstance; + height(): number; + height(height: number): ChainableInstance; + backgroundColor(): string; + backgroundColor(color: string): ChainableInstance; + showNavInfo(): boolean; + showNavInfo(enabled: boolean): ChainableInstance; + + // Labels + nodeLabel(): ObjAccessor; + nodeLabel(textAccessor: ObjAccessor): ChainableInstance; + linkLabel(): ObjAccessor; + linkLabel(textAccessor: ObjAccessor): ChainableInstance; + + // Interaction + onNodeClick(callback: (node: object, event: MouseEvent) => void): ChainableInstance; + onNodeRightClick(callback: (node: object, event: MouseEvent) => void): ChainableInstance; + onNodeHover(callback: (node: object | null, previousNode: object | null) => void): ChainableInstance; + onNodeDrag(callback: (node: object, translate: Coords) => void): ChainableInstance; + onNodeDragEnd(callback: (node: object, translate: Coords) => void): ChainableInstance; + onLinkClick(callback: (link: object, event: MouseEvent) => void): ChainableInstance; + onLinkRightClick(callback: (link: object, event: MouseEvent) => void): ChainableInstance; + onLinkHover(callback: (link: object | null, previousLink: object | null) => void): ChainableInstance; + onBackgroundClick(callback: (event: MouseEvent) => void): ChainableInstance; + onBackgroundRightClick(callback: (event: MouseEvent) => void): ChainableInstance; + linkHoverPrecision(): number; + linkHoverPrecision(precision: number): ChainableInstance; + enablePointerInteraction(): boolean; + enablePointerInteraction(enable: boolean): ChainableInstance; + enableNodeDrag(): boolean; + enableNodeDrag(enable: boolean): ChainableInstance; + enableNavigationControls(): boolean; + enableNavigationControls(enable: boolean): ChainableInstance; + + // Render control + pauseAnimation(): ChainableInstance; + resumeAnimation(): ChainableInstance; + cameraPosition(): Coords; + cameraPosition(position: Partial, lookAt?: Coords, transitionMs?: number): ChainableInstance; + zoomToFit(durationMs?: number, padding?: number, nodeFilter?: (node: object) => boolean): ChainableInstance; + postProcessingComposer(): EffectComposer; + scene(): Scene; + camera(): Camera; + renderer(): WebGLRenderer; + controls(): object; + + // Utility + graph2ScreenCoords(x: number, y: number, z: number): Coords; + screen2GraphCoords(screenX: number, screenY: number, distance: number): Coords; +} + +type ForceGraph3DInstance = ForceGraph3DGenericInstance; + +declare function ForceGraph3D(configOptions?: ConfigOptions): ForceGraph3DInstance; + +export default ForceGraph3D; +export { ConfigOptions, ForceGraph3DGenericInstance, ForceGraph3DInstance }; diff --git a/src/citationnet/static/lib/3d-force-graph.js b/src/citationnet/static/lib/3d-force-graph.js new file mode 100644 index 0000000..9b6226f --- /dev/null +++ b/src/citationnet/static/lib/3d-force-graph.js @@ -0,0 +1,59881 @@ +// Version 1.70.5-0 3d-force-graph - https://github.com/vasturiano/3d-force-graph +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ForceGraph3D = factory()); +}(this, (function () { 'use strict'; + + function styleInject$1(css, ref) { + if ( ref === void 0 ) ref = {}; + var insertAt = ref.insertAt; + + if (!css || typeof document === 'undefined') { return; } + + var head = document.head || document.getElementsByTagName('head')[0]; + var style = document.createElement('style'); + style.type = 'text/css'; + + if (insertAt === 'top') { + if (head.firstChild) { + head.insertBefore(style, head.firstChild); + } else { + head.appendChild(style); + } + } else { + head.appendChild(style); + } + + if (style.styleSheet) { + style.styleSheet.cssText = css; + } else { + style.appendChild(document.createTextNode(css)); + } + } + + var css_248z$1 = ".graph-info-msg {\n top: 50%;\n width: 100%;\n text-align: center;\n color: lavender;\n opacity: 0.7;\n font-size: 22px;\n position: absolute;\n font-family: Sans-serif;\n}\n\n.scene-container .clickable {\n cursor: pointer;\n}\n\n.scene-container .grabbable {\n cursor: move;\n cursor: grab;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n}\n\n.scene-container .grabbable:active {\n cursor: grabbing;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n}"; + styleInject$1(css_248z$1); + + function ownKeys$2(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + + if (enumerableOnly) { + symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + }); + } + + keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread2$2(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + + if (i % 2) { + ownKeys$2(Object(source), true).forEach(function (key) { + _defineProperty$3(target, key, source[key]); + }); + } else if (Object.getOwnPropertyDescriptors) { + Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); + } else { + ownKeys$2(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + } + + return target; + } + + function _defineProperty$3(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + } + + function _toConsumableArray$4(arr) { + return _arrayWithoutHoles$4(arr) || _iterableToArray$4(arr) || _unsupportedIterableToArray$2(arr) || _nonIterableSpread$4(); + } + + function _arrayWithoutHoles$4(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray$2(arr); + } + + function _iterableToArray$4(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); + } + + function _unsupportedIterableToArray$2(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray$2(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$2(o, minLen); + } + + function _arrayLikeToArray$2(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; + } + + function _nonIterableSpread$4() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + // threejs.org/license + const REVISION = '123'; + const MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 }; + const TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 }; + const CullFaceNone = 0; + const CullFaceBack = 1; + const CullFaceFront = 2; + const PCFShadowMap = 1; + const PCFSoftShadowMap = 2; + const VSMShadowMap = 3; + const FrontSide = 0; + const BackSide = 1; + const DoubleSide = 2; + const FlatShading = 1; + const NoBlending = 0; + const NormalBlending = 1; + const AdditiveBlending = 2; + const SubtractiveBlending = 3; + const MultiplyBlending = 4; + const CustomBlending = 5; + const AddEquation = 100; + const SubtractEquation = 101; + const ReverseSubtractEquation = 102; + const MinEquation = 103; + const MaxEquation = 104; + const ZeroFactor = 200; + const OneFactor = 201; + const SrcColorFactor = 202; + const OneMinusSrcColorFactor = 203; + const SrcAlphaFactor = 204; + const OneMinusSrcAlphaFactor = 205; + const DstAlphaFactor = 206; + const OneMinusDstAlphaFactor = 207; + const DstColorFactor = 208; + const OneMinusDstColorFactor = 209; + const SrcAlphaSaturateFactor = 210; + const NeverDepth = 0; + const AlwaysDepth = 1; + const LessDepth = 2; + const LessEqualDepth = 3; + const EqualDepth = 4; + const GreaterEqualDepth = 5; + const GreaterDepth = 6; + const NotEqualDepth = 7; + const MultiplyOperation = 0; + const MixOperation = 1; + const AddOperation = 2; + const NoToneMapping = 0; + const LinearToneMapping = 1; + const ReinhardToneMapping = 2; + const CineonToneMapping = 3; + const ACESFilmicToneMapping = 4; + const CustomToneMapping = 5; + + const UVMapping = 300; + const CubeReflectionMapping = 301; + const CubeRefractionMapping = 302; + const EquirectangularReflectionMapping = 303; + const EquirectangularRefractionMapping = 304; + const CubeUVReflectionMapping = 306; + const CubeUVRefractionMapping = 307; + const RepeatWrapping = 1000; + const ClampToEdgeWrapping = 1001; + const MirroredRepeatWrapping = 1002; + const NearestFilter = 1003; + const NearestMipmapNearestFilter = 1004; + const NearestMipmapLinearFilter = 1005; + const LinearFilter = 1006; + const LinearMipmapNearestFilter = 1007; + const LinearMipmapLinearFilter = 1008; + const UnsignedByteType = 1009; + const ByteType = 1010; + const ShortType = 1011; + const UnsignedShortType = 1012; + const IntType = 1013; + const UnsignedIntType = 1014; + const FloatType = 1015; + const HalfFloatType = 1016; + const UnsignedShort4444Type = 1017; + const UnsignedShort5551Type = 1018; + const UnsignedShort565Type = 1019; + const UnsignedInt248Type = 1020; + const AlphaFormat = 1021; + const RGBFormat = 1022; + const RGBAFormat = 1023; + const LuminanceFormat = 1024; + const LuminanceAlphaFormat = 1025; + const DepthFormat = 1026; + const DepthStencilFormat = 1027; + const RedFormat = 1028; + const RedIntegerFormat = 1029; + const RGFormat = 1030; + const RGIntegerFormat = 1031; + const RGBIntegerFormat = 1032; + const RGBAIntegerFormat = 1033; + + const RGB_S3TC_DXT1_Format = 33776; + const RGBA_S3TC_DXT1_Format = 33777; + const RGBA_S3TC_DXT3_Format = 33778; + const RGBA_S3TC_DXT5_Format = 33779; + const RGB_PVRTC_4BPPV1_Format = 35840; + const RGB_PVRTC_2BPPV1_Format = 35841; + const RGBA_PVRTC_4BPPV1_Format = 35842; + const RGBA_PVRTC_2BPPV1_Format = 35843; + const RGB_ETC1_Format = 36196; + const RGB_ETC2_Format = 37492; + const RGBA_ETC2_EAC_Format = 37496; + const RGBA_ASTC_4x4_Format = 37808; + const RGBA_ASTC_5x4_Format = 37809; + const RGBA_ASTC_5x5_Format = 37810; + const RGBA_ASTC_6x5_Format = 37811; + const RGBA_ASTC_6x6_Format = 37812; + const RGBA_ASTC_8x5_Format = 37813; + const RGBA_ASTC_8x6_Format = 37814; + const RGBA_ASTC_8x8_Format = 37815; + const RGBA_ASTC_10x5_Format = 37816; + const RGBA_ASTC_10x6_Format = 37817; + const RGBA_ASTC_10x8_Format = 37818; + const RGBA_ASTC_10x10_Format = 37819; + const RGBA_ASTC_12x10_Format = 37820; + const RGBA_ASTC_12x12_Format = 37821; + const RGBA_BPTC_Format = 36492; + const SRGB8_ALPHA8_ASTC_4x4_Format = 37840; + const SRGB8_ALPHA8_ASTC_5x4_Format = 37841; + const SRGB8_ALPHA8_ASTC_5x5_Format = 37842; + const SRGB8_ALPHA8_ASTC_6x5_Format = 37843; + const SRGB8_ALPHA8_ASTC_6x6_Format = 37844; + const SRGB8_ALPHA8_ASTC_8x5_Format = 37845; + const SRGB8_ALPHA8_ASTC_8x6_Format = 37846; + const SRGB8_ALPHA8_ASTC_8x8_Format = 37847; + const SRGB8_ALPHA8_ASTC_10x5_Format = 37848; + const SRGB8_ALPHA8_ASTC_10x6_Format = 37849; + const SRGB8_ALPHA8_ASTC_10x8_Format = 37850; + const SRGB8_ALPHA8_ASTC_10x10_Format = 37851; + const SRGB8_ALPHA8_ASTC_12x10_Format = 37852; + const SRGB8_ALPHA8_ASTC_12x12_Format = 37853; + const LoopOnce = 2200; + const LoopRepeat = 2201; + const LoopPingPong = 2202; + const InterpolateDiscrete = 2300; + const InterpolateLinear = 2301; + const InterpolateSmooth = 2302; + const ZeroCurvatureEnding = 2400; + const ZeroSlopeEnding = 2401; + const WrapAroundEnding = 2402; + const NormalAnimationBlendMode = 2500; + const AdditiveAnimationBlendMode = 2501; + const TrianglesDrawMode = 0; + const LinearEncoding = 3000; + const sRGBEncoding = 3001; + const GammaEncoding = 3007; + const RGBEEncoding = 3002; + const LogLuvEncoding = 3003; + const RGBM7Encoding = 3004; + const RGBM16Encoding = 3005; + const RGBDEncoding = 3006; + const BasicDepthPacking = 3200; + const RGBADepthPacking = 3201; + const TangentSpaceNormalMap = 0; + const ObjectSpaceNormalMap = 1; + const KeepStencilOp = 7680; + const AlwaysStencilFunc = 519; + + const StaticDrawUsage = 35044; + const DynamicDrawUsage = 35048; + const GLSL3 = "300 es"; + + /** + * https://github.com/mrdoob/eventdispatcher.js/ + */ + + function EventDispatcher() {} + + Object.assign( EventDispatcher.prototype, { + + addEventListener: function ( type, listener ) { + + if ( this._listeners === undefined ) this._listeners = {}; + + const listeners = this._listeners; + + if ( listeners[ type ] === undefined ) { + + listeners[ type ] = []; + + } + + if ( listeners[ type ].indexOf( listener ) === - 1 ) { + + listeners[ type ].push( listener ); + + } + + }, + + hasEventListener: function ( type, listener ) { + + if ( this._listeners === undefined ) return false; + + const listeners = this._listeners; + + return listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1; + + }, + + removeEventListener: function ( type, listener ) { + + if ( this._listeners === undefined ) return; + + const listeners = this._listeners; + const listenerArray = listeners[ type ]; + + if ( listenerArray !== undefined ) { + + const index = listenerArray.indexOf( listener ); + + if ( index !== - 1 ) { + + listenerArray.splice( index, 1 ); + + } + + } + + }, + + dispatchEvent: function ( event ) { + + if ( this._listeners === undefined ) return; + + const listeners = this._listeners; + const listenerArray = listeners[ event.type ]; + + if ( listenerArray !== undefined ) { + + event.target = this; + + // Make a copy, in case listeners are removed while iterating. + const array = listenerArray.slice( 0 ); + + for ( let i = 0, l = array.length; i < l; i ++ ) { + + array[ i ].call( this, event ); + + } + + } + + } + + } ); + + const _lut = []; + + for ( let i = 0; i < 256; i ++ ) { + + _lut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 ); + + } + + let _seed = 1234567; + + const MathUtils = { + + DEG2RAD: Math.PI / 180, + RAD2DEG: 180 / Math.PI, + + generateUUID: function () { + + // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136 + + const d0 = Math.random() * 0xffffffff | 0; + const d1 = Math.random() * 0xffffffff | 0; + const d2 = Math.random() * 0xffffffff | 0; + const d3 = Math.random() * 0xffffffff | 0; + const uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 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 ]; + + // .toUpperCase() here flattens concatenated strings to save heap memory space. + return uuid.toUpperCase(); + + }, + + clamp: function ( value, min, max ) { + + return Math.max( min, Math.min( max, value ) ); + + }, + + // compute euclidian modulo of m % n + // https://en.wikipedia.org/wiki/Modulo_operation + + euclideanModulo: function ( n, m ) { + + return ( ( n % m ) + m ) % m; + + }, + + // Linear mapping from range to range + + mapLinear: function ( x, a1, a2, b1, b2 ) { + + return b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 ); + + }, + + // https://en.wikipedia.org/wiki/Linear_interpolation + + lerp: function ( x, y, t ) { + + return ( 1 - t ) * x + t * y; + + }, + + // http://en.wikipedia.org/wiki/Smoothstep + + smoothstep: function ( x, min, max ) { + + if ( x <= min ) return 0; + if ( x >= max ) return 1; + + x = ( x - min ) / ( max - min ); + + return x * x * ( 3 - 2 * x ); + + }, + + smootherstep: function ( 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 + + randInt: function ( low, high ) { + + return low + Math.floor( Math.random() * ( high - low + 1 ) ); + + }, + + // Random float from interval + + randFloat: function ( low, high ) { + + return low + Math.random() * ( high - low ); + + }, + + // Random float from <-range/2, range/2> interval + + randFloatSpread: function ( range ) { + + return range * ( 0.5 - Math.random() ); + + }, + + // Deterministic pseudo-random float in the interval [ 0, 1 ] + + seededRandom: function ( s ) { + + if ( s !== undefined ) _seed = s % 2147483647; + + // Park-Miller algorithm + + _seed = _seed * 16807 % 2147483647; + + return ( _seed - 1 ) / 2147483646; + + }, + + degToRad: function ( degrees ) { + + return degrees * MathUtils.DEG2RAD; + + }, + + radToDeg: function ( radians ) { + + return radians * MathUtils.RAD2DEG; + + }, + + isPowerOfTwo: function ( value ) { + + return ( value & ( value - 1 ) ) === 0 && value !== 0; + + }, + + ceilPowerOfTwo: function ( value ) { + + return Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) ); + + }, + + floorPowerOfTwo: function ( value ) { + + return Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) ); + + }, + + setQuaternionFromProperEuler: function ( 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 ); + + } + + } + + }; + + class Vector2 { + + constructor( x = 0, y = 0 ) { + + Object.defineProperty( this, 'isVector2', { value: 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, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + 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, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + 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 = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( 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; + + } + + 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, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' ); + + } + + 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; + + } + + } + + class Matrix3 { + + constructor() { + + Object.defineProperty( this, 'isMatrix3', { value: true } ); + + this.elements = [ + + 1, 0, 0, + 0, 1, 0, + 0, 0, 1 + + ]; + + if ( arguments.length > 0 ) { + + console.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' ); + + } + + } + + 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; + + } + + clone() { + + return new this.constructor().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 ]; + + 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 ).copy( this ).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 + ); + + } + + scale( sx, sy ) { + + const te = this.elements; + + te[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx; + te[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy; + + return this; + + } + + rotate( theta ) { + + const c = Math.cos( theta ); + const s = Math.sin( theta ); + + const te = this.elements; + + const a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ]; + const a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ]; + + te[ 0 ] = c * a11 + s * a21; + te[ 3 ] = c * a12 + s * a22; + te[ 6 ] = c * a13 + s * a23; + + te[ 1 ] = - s * a11 + c * a21; + te[ 4 ] = - s * a12 + c * a22; + te[ 7 ] = - s * a13 + c * a23; + + return this; + + } + + translate( tx, ty ) { + + const te = this.elements; + + te[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ]; + te[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ]; + + 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; + + } + + } + + let _canvas; + + const ImageUtils = { + + getDataURL: function ( 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 = document.createElementNS( 'http://www.w3.org/1999/xhtml', '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 ) { + + return canvas.toDataURL( 'image/jpeg', 0.6 ); + + } else { + + return canvas.toDataURL( 'image/png' ); + + } + + } + + }; + + let textureId = 0; + + function Texture( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1, encoding = LinearEncoding ) { + + Object.defineProperty( this, 'id', { value: textureId ++ } ); + + this.uuid = MathUtils.generateUUID(); + + this.name = ''; + + this.image = image; + this.mipmaps = []; + + this.mapping = mapping; + + 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) + + // Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap. + // + // Also changing the encoding after already used by a Material will not automatically make the Material + // update. You need to explicitly call Material.needsUpdate to trigger it to recompile. + this.encoding = encoding; + + this.version = 0; + this.onUpdate = null; + + } + + Texture.DEFAULT_IMAGE = undefined; + Texture.DEFAULT_MAPPING = UVMapping; + + Texture.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: Texture, + + isTexture: true, + + updateMatrix: function () { + + this.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y ); + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.name = source.name; + + this.image = source.image; + this.mipmaps = source.mipmaps.slice( 0 ); + + this.mapping = source.mapping; + + 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.encoding = source.encoding; + + return this; + + }, + + toJSON: function ( 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.5, + type: 'Texture', + generator: 'Texture.toJSON' + }, + + uuid: this.uuid, + name: this.name, + + mapping: this.mapping, + + 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, + type: this.type, + encoding: this.encoding, + + minFilter: this.minFilter, + magFilter: this.magFilter, + anisotropy: this.anisotropy, + + flipY: this.flipY, + + premultiplyAlpha: this.premultiplyAlpha, + unpackAlignment: this.unpackAlignment + + }; + + if ( this.image !== undefined ) { + + // TODO: Move to THREE.Image + + const image = this.image; + + if ( image.uuid === undefined ) { + + image.uuid = MathUtils.generateUUID(); // UGH + + } + + if ( ! isRootObject && meta.images[ image.uuid ] === undefined ) { + + let url; + + if ( Array.isArray( image ) ) { + + // process array of images e.g. CubeTexture + + url = []; + + for ( let i = 0, l = image.length; i < l; i ++ ) { + + // check cube texture with data textures + + if ( image[ i ].isDataTexture ) { + + url.push( serializeImage( image[ i ].image ) ); + + } else { + + url.push( serializeImage( image[ i ] ) ); + + } + + } + + } else { + + // process single image + + url = serializeImage( image ); + + } + + meta.images[ image.uuid ] = { + uuid: image.uuid, + url: url + }; + + } + + output.image = image.uuid; + + } + + if ( ! isRootObject ) { + + meta.textures[ this.uuid ] = output; + + } + + return output; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + }, + + transformUv: function ( 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; + + } + + } ); + + Object.defineProperty( Texture.prototype, "needsUpdate", { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + + } ); + + 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.prototype.slice.call( image.data ), + width: image.width, + height: image.height, + type: image.data.constructor.name + }; + + } else { + + console.warn( 'THREE.Texture: Unable to serialize Texture.' ); + return {}; + + } + + } + + } + + class Vector4 { + + constructor( x = 0, y = 0, z = 0, w = 1 ) { + + Object.defineProperty( this, 'isVector4', { value: 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, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + 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, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + 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; + + } + + 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 = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); + this.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( 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, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' ); + + } + + 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; + + } + + } + + /* + In options, we can specify: + * Texture parameters for an auto-generated target texture + * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers + */ + function WebGLRenderTarget( width, height, options ) { + + this.width = width; + this.height = height; + + this.scissor = new Vector4( 0, 0, width, height ); + this.scissorTest = false; + + this.viewport = new Vector4( 0, 0, width, height ); + + options = options || {}; + + this.texture = new Texture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding ); + + this.texture.image = {}; + this.texture.image.width = width; + this.texture.image.height = height; + + this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false; + this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter; + + this.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true; + this.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false; + this.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null; + + } + + WebGLRenderTarget.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: WebGLRenderTarget, + + isWebGLRenderTarget: true, + + setSize: function ( width, height ) { + + if ( this.width !== width || this.height !== height ) { + + this.width = width; + this.height = height; + + this.texture.image.width = width; + this.texture.image.height = height; + + this.dispose(); + + } + + this.viewport.set( 0, 0, width, height ); + this.scissor.set( 0, 0, width, height ); + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.width = source.width; + this.height = source.height; + + this.viewport.copy( source.viewport ); + + this.texture = source.texture.clone(); + + this.depthBuffer = source.depthBuffer; + this.stencilBuffer = source.stencilBuffer; + this.depthTexture = source.depthTexture; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + + } ); + + function WebGLMultisampleRenderTarget( width, height, options ) { + + WebGLRenderTarget.call( this, width, height, options ); + + this.samples = 4; + + } + + WebGLMultisampleRenderTarget.prototype = Object.assign( Object.create( WebGLRenderTarget.prototype ), { + + constructor: WebGLMultisampleRenderTarget, + + isWebGLMultisampleRenderTarget: true, + + copy: function ( source ) { + + WebGLRenderTarget.prototype.copy.call( this, source ); + + this.samples = source.samples; + + return this; + + } + + } ); + + class Quaternion { + + constructor( x = 0, y = 0, z = 0, w = 1 ) { + + Object.defineProperty( this, 'isQuaternion', { value: true } ); + + this._x = x; + this._y = y; + this._z = z; + this._w = w; + + } + + static slerp( qa, qb, qm, t ) { + + return qm.copy( qa ).slerp( qb, t ); + + } + + 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 ( 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 ) { + + if ( ! ( euler && euler.isEuler ) ) { + + throw new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' ); + + } + + 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 !== false ) 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 + + const EPS = 0.000001; + + let r = vFrom.dot( vTo ) + 1; + + if ( r < EPS ) { + + 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( MathUtils.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, p ) { + + if ( p !== undefined ) { + + console.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' ); + return this.multiplyQuaternions( q, p ); + + } + + 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(); + this._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; + + } + + 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 ); + + return this; + + } + + _onChange( callback ) { + + this._onChangeCallback = callback; + + return this; + + } + + _onChangeCallback() {} + + } + + class Vector3 { + + constructor( x = 0, y = 0, z = 0 ) { + + Object.defineProperty( this, 'isVector3', { value: 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, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + 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, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + 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, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' ); + return this.multiplyVectors( v, w ); + + } + + 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 ) { + + if ( ! ( euler && euler.isEuler ) ) { + + console.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' ); + + } + + return this.applyQuaternion( _quaternion.setFromEuler( euler ) ); + + } + + applyAxisAngle( axis, angle ) { + + return this.applyQuaternion( _quaternion.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 ) { + + const x = this.x, y = this.y, z = this.z; + const qx = q.x, qy = q.y, qz = q.z, qw = q.w; + + // calculate quat * vector + + const ix = qw * x + qy * z - qz * y; + const iy = qw * y + qz * x - qx * z; + const iz = qw * z + qx * y - qy * x; + const iw = - qx * x - qy * y - qz * z; + + // calculate result * inverse quat + + this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy; + this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz; + this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx; + + 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 = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( 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, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' ); + return this.crossVectors( v, w ); + + } + + 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.copy( this ).projectOnVector( planeNormal ); + + return this.sub( _vector ); + + } + + reflect( normal ) { + + // reflect incident vector off plane orthogonal to normal + // normal is assumed to have unit length + + return this.sub( _vector.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( MathUtils.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 ); + + } + + 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, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' ); + + } + + 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; + + } + + } + + const _vector = /*@__PURE__*/ new Vector3(); + const _quaternion = /*@__PURE__*/ new Quaternion(); + + class Box3 { + + constructor( min, max ) { + + Object.defineProperty( this, 'isBox3', { value: true } ); + + this.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity ); + this.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity ); + + } + + set( min, max ) { + + this.min.copy( min ); + this.max.copy( max ); + + return this; + + } + + setFromArray( array ) { + + let minX = + Infinity; + let minY = + Infinity; + let minZ = + Infinity; + + let maxX = - Infinity; + let maxY = - Infinity; + let maxZ = - Infinity; + + for ( let i = 0, l = array.length; i < l; i += 3 ) { + + const x = array[ i ]; + const y = array[ i + 1 ]; + const z = array[ i + 2 ]; + + if ( x < minX ) minX = x; + if ( y < minY ) minY = y; + if ( z < minZ ) minZ = z; + + if ( x > maxX ) maxX = x; + if ( y > maxY ) maxY = y; + if ( z > maxZ ) maxZ = z; + + } + + this.min.set( minX, minY, minZ ); + this.max.set( maxX, maxY, maxZ ); + + return this; + + } + + setFromBufferAttribute( attribute ) { + + let minX = + Infinity; + let minY = + Infinity; + let minZ = + Infinity; + + let maxX = - Infinity; + let maxY = - Infinity; + let maxZ = - Infinity; + + for ( let i = 0, l = attribute.count; i < l; i ++ ) { + + const x = attribute.getX( i ); + const y = attribute.getY( i ); + const z = attribute.getZ( i ); + + if ( x < minX ) minX = x; + if ( y < minY ) minY = y; + if ( z < minZ ) minZ = z; + + if ( x > maxX ) maxX = x; + if ( y > maxY ) maxY = y; + if ( z > maxZ ) maxZ = z; + + } + + this.min.set( minX, minY, minZ ); + this.max.set( maxX, maxY, maxZ ); + + 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$1.copy( size ).multiplyScalar( 0.5 ); + + this.min.copy( center ).sub( halfSize ); + this.max.copy( center ).add( halfSize ); + + return this; + + } + + setFromObject( object ) { + + this.makeEmpty(); + + return this.expandByObject( object ); + + } + + 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 ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Box3: .getCenter() target is now required' ); + target = new Vector3(); + + } + + return this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); + + } + + getSize( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Box3: .getSize() target is now required' ); + target = new Vector3(); + + } + + 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 ) { + + // 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 ) { + + if ( geometry.boundingBox === null ) { + + geometry.computeBoundingBox(); + + } + + _box.copy( geometry.boundingBox ); + _box.applyMatrix4( object.matrixWorld ); + + this.union( _box ); + + } + + const children = object.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + this.expandByObject( children[ i ] ); + + } + + 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. + + if ( target === undefined ) { + + console.warn( 'THREE.Box3: .getParameter() target is now required' ); + target = new Vector3(); + + } + + 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$1 ); + + // If that point is inside the sphere, the AABB and sphere intersect. + return _vector$1.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.subVectors( triangle.a, _center ); + _v1.subVectors( triangle.b, _center ); + _v2.subVectors( triangle.c, _center ); + + // compute edge vectors for triangle + _f0.subVectors( _v1, _v0 ); + _f1.subVectors( _v2, _v1 ); + _f2.subVectors( _v0, _v2 ); + + // 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, _v1, _v2, _extents ) ) { + + return false; + + } + + // test 3 face normals from the aabb + axes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ]; + if ( ! satForAxes( axes, _v0, _v1, _v2, _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, _v1, _v2, _extents ); + + } + + clampPoint( point, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Box3: .clampPoint() target is now required' ); + target = new Vector3(); + + } + + return target.copy( point ).clamp( this.min, this.max ); + + } + + distanceToPoint( point ) { + + const clampedPoint = _vector$1.copy( point ).clamp( this.min, this.max ); + + return clampedPoint.sub( point ).length(); + + } + + getBoundingSphere( target ) { + + if ( target === undefined ) { + + console.error( 'THREE.Box3: .getBoundingSphere() target is now required' ); + //target = new Sphere(); // removed to avoid cyclic dependency + + } + + this.getCenter( target.center ); + + target.radius = this.getSize( _vector$1 ).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 ); + + } + + } + + 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 seperating 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 seperating 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 seperating and we can exit + return false; + + } + + } + + return true; + + } + + 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$1 = /*@__PURE__*/ new Vector3(); + + const _box = /*@__PURE__*/ new Box3(); + + // triangle centered vertices + + const _v0 = /*@__PURE__*/ new Vector3(); + const _v1 = /*@__PURE__*/ new Vector3(); + const _v2 = /*@__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(); + + const _box$1 = /*@__PURE__*/ new Box3(); + + class Sphere { + + constructor( center, radius ) { + + this.center = ( center !== undefined ) ? center : new Vector3(); + this.radius = ( radius !== undefined ) ? radius : - 1; + + } + + 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$1.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; + + } + + clone() { + + return new this.constructor().copy( 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 ); + + if ( target === undefined ) { + + console.warn( 'THREE.Sphere: .clampPoint() target is now required' ); + target = new Vector3(); + + } + + 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 ( target === undefined ) { + + console.warn( 'THREE.Sphere: .getBoundingBox() target is now required' ); + target = new Box3(); + + } + + 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; + + } + + equals( sphere ) { + + return sphere.center.equals( this.center ) && ( sphere.radius === this.radius ); + + } + + } + + const _vector$2 = /*@__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 = /*@__PURE__*/ new Vector3(); + + class Ray { + + constructor( origin, direction ) { + + this.origin = ( origin !== undefined ) ? origin : new Vector3(); + this.direction = ( direction !== undefined ) ? direction : new Vector3( 0, 0, - 1 ); + + } + + set( origin, direction ) { + + this.origin.copy( origin ); + this.direction.copy( direction ); + + return this; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + copy( ray ) { + + this.origin.copy( ray.origin ); + this.direction.copy( ray.direction ); + + return this; + + } + + at( t, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Ray: .at() target is now required' ); + target = new Vector3(); + + } + + return target.copy( this.direction ).multiplyScalar( t ).add( this.origin ); + + } + + lookAt( v ) { + + this.direction.copy( v ).sub( this.origin ).normalize(); + + return this; + + } + + recast( t ) { + + this.origin.copy( this.at( t, _vector$2 ) ); + + return this; + + } + + closestPointToPoint( point, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Ray: .closestPointToPoint() target is now required' ); + target = new Vector3(); + + } + + target.subVectors( point, this.origin ); + + const directionDistance = target.dot( this.direction ); + + if ( directionDistance < 0 ) { + + return target.copy( this.origin ); + + } + + return target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin ); + + } + + distanceToPoint( point ) { + + return Math.sqrt( this.distanceSqToPoint( point ) ); + + } + + distanceSqToPoint( point ) { + + const directionDistance = _vector$2.subVectors( point, this.origin ).dot( this.direction ); + + // point behind the ray + + if ( directionDistance < 0 ) { + + return this.origin.distanceToSquared( point ); + + } + + _vector$2.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin ); + + return _vector$2.distanceToSquared( point ); + + } + + distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) { + + // from http://www.geometrictools.com/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.direction ).multiplyScalar( s0 ).add( this.origin ); + + } + + if ( optionalPointOnSegment ) { + + optionalPointOnSegment.copy( _segDir ).multiplyScalar( s1 ).add( _segCenter ); + + } + + return sqrDist; + + } + + intersectSphere( sphere, target ) { + + _vector$2.subVectors( sphere.center, this.origin ); + const tca = _vector$2.dot( this.direction ); + const d2 = _vector$2.dot( _vector$2 ) - 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 both t0 and t1 are behind the ray - if so, return null + if ( t0 < 0 && 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; + + // These lines also handle the case where tmin or tmax is NaN + // (result of 0 * Infinity). x !== x returns true if x is NaN + + if ( tymin > tmin || tmin !== tmin ) tmin = tymin; + + if ( tymax < tmax || tmax !== 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$2 ) !== null; + + } + + intersectTriangle( a, b, c, backfaceCulling, target ) { + + // Compute the offset origin, edges, and normal. + + // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h + + _edge1.subVectors( b, a ); + _edge2.subVectors( c, a ); + _normal.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 ); + 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 ); + + // 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 ); + + } + + } + + class Matrix4 { + + constructor() { + + Object.defineProperty( this, 'isMatrix4', { value: true } ); + + this.elements = [ + + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + + ]; + + if ( arguments.length > 0 ) { + + console.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' ); + + } + + } + + 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; + + } + + 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$1.setFromMatrixColumn( m, 0 ).length(); + const scaleY = 1 / _v1$1.setFromMatrixColumn( m, 1 ).length(); + const scaleZ = 1 / _v1$1.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 ) { + + if ( ! ( euler && euler.isEuler ) ) { + + console.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' ); + + } + + 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, n ) { + + if ( n !== undefined ) { + + console.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' ); + return this.multiplyMatrices( m, n ); + + } + + 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 ) { + + 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( x, y, z ) { + + this.set( + + 1, y, z, 0, + x, 1, z, 0, + x, y, 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$1.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length(); + const sy = _v1$1.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length(); + const sz = _v1$1.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.copy( this ); + + const invSX = 1 / sx; + const invSY = 1 / sy; + const invSZ = 1 / sz; + + _m1.elements[ 0 ] *= invSX; + _m1.elements[ 1 ] *= invSX; + _m1.elements[ 2 ] *= invSX; + + _m1.elements[ 4 ] *= invSY; + _m1.elements[ 5 ] *= invSY; + _m1.elements[ 6 ] *= invSY; + + _m1.elements[ 8 ] *= invSZ; + _m1.elements[ 9 ] *= invSZ; + _m1.elements[ 10 ] *= invSZ; + + quaternion.setFromRotationMatrix( _m1 ); + + scale.x = sx; + scale.y = sy; + scale.z = sz; + + return this; + + } + + makePerspective( left, right, top, bottom, near, far ) { + + if ( far === undefined ) { + + console.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' ); + + } + + 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 ); + const c = - ( far + near ) / ( far - near ); + const d = - 2 * far * near / ( far - near ); + + 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 ) { + + 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; + const z = ( far + near ) * p; + + 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 ] = - 2 * p; 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$1 = /*@__PURE__*/ new Vector3(); + const _m1 = /*@__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(); + + class Euler { + + constructor( x = 0, y = 0, z = 0, order = Euler.DefaultOrder ) { + + Object.defineProperty( this, 'isEuler', { value: 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._x = x; + this._y = y; + this._z = z; + this._order = order || this._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, update ) { + + const clamp = MathUtils.clamp; + + // 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 ]; + + order = order || this._order; + + 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 !== false ) this._onChangeCallback(); + + return this; + + } + + setFromQuaternion( q, order, update ) { + + _matrix.makeRotationFromQuaternion( q ); + + return this.setFromRotationMatrix( _matrix, order, update ); + + } + + setFromVector3( v, order ) { + + return this.set( v.x, v.y, v.z, order || this._order ); + + } + + reorder( newOrder ) { + + // WARNING: this discards revolution information -bhouston + + _quaternion$1.setFromEuler( this ); + + return this.setFromQuaternion( _quaternion$1, 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; + + } + + toVector3( optionalResult ) { + + if ( optionalResult ) { + + return optionalResult.set( this._x, this._y, this._z ); + + } else { + + return new Vector3( this._x, this._y, this._z ); + + } + + } + + _onChange( callback ) { + + this._onChangeCallback = callback; + + return this; + + } + + _onChangeCallback() {} + + } + + Euler.DefaultOrder = 'XYZ'; + Euler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ]; + + const _matrix = /*@__PURE__*/ new Matrix4(); + const _quaternion$1 = /*@__PURE__*/ new Quaternion(); + + class Layers { + + constructor() { + + this.mask = 1 | 0; + + } + + set( channel ) { + + this.mask = 1 << channel | 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; + + } + + } + + let _object3DId = 0; + + const _v1$2 = new Vector3(); + const _q1 = new Quaternion(); + const _m1$1 = new Matrix4(); + const _target = new Vector3(); + + const _position = new Vector3(); + const _scale = new Vector3(); + const _quaternion$2 = new Quaternion(); + + const _xAxis = new Vector3( 1, 0, 0 ); + const _yAxis = new Vector3( 0, 1, 0 ); + const _zAxis = new Vector3( 0, 0, 1 ); + + const _addedEvent = { type: 'added' }; + const _removedEvent = { type: 'removed' }; + + function Object3D() { + + Object.defineProperty( this, 'id', { value: _object3DId ++ } ); + + this.uuid = MathUtils.generateUUID(); + + this.name = ''; + this.type = 'Object3D'; + + this.parent = null; + this.children = []; + + this.up = Object3D.DefaultUp.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.DefaultMatrixAutoUpdate; + 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 = {}; + + } + + Object3D.DefaultUp = new Vector3( 0, 1, 0 ); + Object3D.DefaultMatrixAutoUpdate = true; + + Object3D.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: Object3D, + + isObject3D: true, + + onBeforeRender: function () {}, + onAfterRender: function () {}, + + applyMatrix4: function ( matrix ) { + + if ( this.matrixAutoUpdate ) this.updateMatrix(); + + this.matrix.premultiply( matrix ); + + this.matrix.decompose( this.position, this.quaternion, this.scale ); + + }, + + applyQuaternion: function ( q ) { + + this.quaternion.premultiply( q ); + + return this; + + }, + + setRotationFromAxisAngle: function ( axis, angle ) { + + // assumes axis is normalized + + this.quaternion.setFromAxisAngle( axis, angle ); + + }, + + setRotationFromEuler: function ( euler ) { + + this.quaternion.setFromEuler( euler, true ); + + }, + + setRotationFromMatrix: function ( m ) { + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + this.quaternion.setFromRotationMatrix( m ); + + }, + + setRotationFromQuaternion: function ( q ) { + + // assumes q is normalized + + this.quaternion.copy( q ); + + }, + + rotateOnAxis: function ( 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: function ( 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: function ( angle ) { + + return this.rotateOnAxis( _xAxis, angle ); + + }, + + rotateY: function ( angle ) { + + return this.rotateOnAxis( _yAxis, angle ); + + }, + + rotateZ: function ( angle ) { + + return this.rotateOnAxis( _zAxis, angle ); + + }, + + translateOnAxis: function ( axis, distance ) { + + // translate object by distance along axis in object space + // axis is assumed to be normalized + + _v1$2.copy( axis ).applyQuaternion( this.quaternion ); + + this.position.add( _v1$2.multiplyScalar( distance ) ); + + return this; + + }, + + translateX: function ( distance ) { + + return this.translateOnAxis( _xAxis, distance ); + + }, + + translateY: function ( distance ) { + + return this.translateOnAxis( _yAxis, distance ); + + }, + + translateZ: function ( distance ) { + + return this.translateOnAxis( _zAxis, distance ); + + }, + + localToWorld: function ( vector ) { + + return vector.applyMatrix4( this.matrixWorld ); + + }, + + worldToLocal: function ( vector ) { + + return vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() ); + + }, + + lookAt: function ( 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.setFromMatrixPosition( this.matrixWorld ); + + if ( this.isCamera || this.isLight ) { + + _m1$1.lookAt( _position, _target, this.up ); + + } else { + + _m1$1.lookAt( _target, _position, this.up ); + + } + + this.quaternion.setFromRotationMatrix( _m1$1 ); + + if ( parent ) { + + _m1$1.extractRotation( parent.matrixWorld ); + _q1.setFromRotationMatrix( _m1$1 ); + this.quaternion.premultiply( _q1.invert() ); + + } + + }, + + add: function ( 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 ) ) { + + if ( object.parent !== null ) { + + object.parent.remove( object ); + + } + + object.parent = this; + this.children.push( object ); + + object.dispatchEvent( _addedEvent ); + + } else { + + console.error( "THREE.Object3D.add: object not an instance of THREE.Object3D.", object ); + + } + + return this; + + }, + + remove: function ( 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 ); + + } + + return this; + + }, + + clear: function () { + + for ( let i = 0; i < this.children.length; i ++ ) { + + const object = this.children[ i ]; + + object.parent = null; + + object.dispatchEvent( _removedEvent ); + + } + + this.children.length = 0; + + return this; + + + }, + + attach: function ( object ) { + + // adds object as a child of this, while maintaining the object's world transform + + this.updateWorldMatrix( true, false ); + + _m1$1.copy( this.matrixWorld ).invert(); + + if ( object.parent !== null ) { + + object.parent.updateWorldMatrix( true, false ); + + _m1$1.multiply( object.parent.matrixWorld ); + + } + + object.applyMatrix4( _m1$1 ); + + object.updateWorldMatrix( false, false ); + + this.add( object ); + + return this; + + }, + + getObjectById: function ( id ) { + + return this.getObjectByProperty( 'id', id ); + + }, + + getObjectByName: function ( name ) { + + return this.getObjectByProperty( 'name', name ); + + }, + + getObjectByProperty: function ( 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; + + }, + + getWorldPosition: function ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Object3D: .getWorldPosition() target is now required' ); + target = new Vector3(); + + } + + this.updateWorldMatrix( true, false ); + + return target.setFromMatrixPosition( this.matrixWorld ); + + }, + + getWorldQuaternion: function ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Object3D: .getWorldQuaternion() target is now required' ); + target = new Quaternion(); + + } + + this.updateWorldMatrix( true, false ); + + this.matrixWorld.decompose( _position, target, _scale ); + + return target; + + }, + + getWorldScale: function ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Object3D: .getWorldScale() target is now required' ); + target = new Vector3(); + + } + + this.updateWorldMatrix( true, false ); + + this.matrixWorld.decompose( _position, _quaternion$2, target ); + + return target; + + }, + + getWorldDirection: function ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Object3D: .getWorldDirection() target is now required' ); + target = new Vector3(); + + } + + this.updateWorldMatrix( true, false ); + + const e = this.matrixWorld.elements; + + return target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize(); + + }, + + raycast: function () {}, + + traverse: function ( callback ) { + + callback( this ); + + const children = this.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].traverse( callback ); + + } + + }, + + traverseVisible: function ( 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: function ( callback ) { + + const parent = this.parent; + + if ( parent !== null ) { + + callback( parent ); + + parent.traverseAncestors( callback ); + + } + + }, + + updateMatrix: function () { + + this.matrix.compose( this.position, this.quaternion, this.scale ); + + this.matrixWorldNeedsUpdate = true; + + }, + + updateMatrixWorld: function ( 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 ++ ) { + + children[ i ].updateMatrixWorld( force ); + + } + + }, + + updateWorldMatrix: function ( updateParents, updateChildren ) { + + const parent = this.parent; + + if ( updateParents === true && parent !== null ) { + + 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 ++ ) { + + children[ i ].updateWorldMatrix( false, true ); + + } + + } + + }, + + toJSON: function ( 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: {} + }; + + output.metadata = { + version: 4.5, + 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 ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData; + + object.layers = this.layers.mask; + object.matrix = this.matrix.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(); + + } + + // + + function serialize( library, element ) { + + if ( library[ element.uuid ] === undefined ) { + + library[ element.uuid ] = element.toJSON( meta ); + + } + + return element.uuid; + + } + + 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 ); + + 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; + + } + + 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: function ( recursive ) { + + return new this.constructor().copy( this, recursive ); + + }, + + copy: function ( 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.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.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; + + } + + } ); + + const _vector1 = /*@__PURE__*/ new Vector3(); + const _vector2 = /*@__PURE__*/ new Vector3(); + const _normalMatrix = /*@__PURE__*/ new Matrix3(); + + class Plane { + + constructor( normal, constant ) { + + Object.defineProperty( this, 'isPlane', { value: true } ); + + // normal is assumed to be normalized + + this.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 ); + this.constant = ( constant !== undefined ) ? constant : 0; + + } + + 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; + + } + + clone() { + + return new this.constructor().copy( 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 ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Plane: .projectPoint() target is now required' ); + target = new Vector3(); + + } + + return target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point ); + + } + + intersectLine( line, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Plane: .intersectLine() target is now required' ); + target = new Vector3(); + + } + + 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 undefined; + + } + + const t = - ( line.start.dot( this.normal ) + this.constant ) / denominator; + + if ( t < 0 || t > 1 ) { + + return undefined; + + } + + return target.copy( direction ).multiplyScalar( t ).add( line.start ); + + } + + 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 ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Plane: .coplanarPoint() target is now required' ); + target = new Vector3(); + + } + + 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 ); + + } + + } + + const _v0$1 = /*@__PURE__*/ new Vector3(); + const _v1$3 = /*@__PURE__*/ new Vector3(); + const _v2$1 = /*@__PURE__*/ new Vector3(); + const _v3 = /*@__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, b, c ) { + + this.a = ( a !== undefined ) ? a : new Vector3(); + this.b = ( b !== undefined ) ? b : new Vector3(); + this.c = ( c !== undefined ) ? c : new Vector3(); + + } + + static getNormal( a, b, c, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Triangle: .getNormal() target is now required' ); + target = new Vector3(); + + } + + 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$1.subVectors( point, a ); + + const dot00 = _v0$1.dot( _v0$1 ); + const dot01 = _v0$1.dot( _v1$3 ); + const dot02 = _v0$1.dot( _v2$1 ); + const dot11 = _v1$3.dot( _v1$3 ); + const dot12 = _v1$3.dot( _v2$1 ); + + const denom = ( dot00 * dot11 - dot01 * dot01 ); + + if ( target === undefined ) { + + console.warn( 'THREE.Triangle: .getBarycoord() target is now required' ); + target = new Vector3(); + + } + + // collinear or singular triangle + if ( denom === 0 ) { + + // arbitrary location outside of triangle? + // not sure if this is the best idea, maybe should be returning undefined + return target.set( - 2, - 1, - 1 ); + + } + + 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 ) { + + this.getBarycoord( point, a, b, c, _v3 ); + + return ( _v3.x >= 0 ) && ( _v3.y >= 0 ) && ( ( _v3.x + _v3.y ) <= 1 ); + + } + + static getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) { + + this.getBarycoord( point, p1, p2, p3, _v3 ); + + target.set( 0, 0 ); + target.addScaledVector( uv1, _v3.x ); + target.addScaledVector( uv2, _v3.y ); + target.addScaledVector( uv3, _v3.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; + + } + + 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 ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Triangle: .getMidpoint() target is now required' ); + target = new Vector3(); + + } + + 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 ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Triangle: .getPlane() target is now required' ); + target = new Plane(); + + } + + return target.setFromCoplanarPoints( this.a, this.b, this.c ); + + } + + getBarycoord( point, target ) { + + return Triangle.getBarycoord( point, this.a, this.b, this.c, target ); + + } + + getUV( point, uv1, uv2, uv3, target ) { + + return Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, 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 ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' ); + target = new Vector3(); + + } + + 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; + + } + + 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; + + } + + class Color { + + constructor( r, g, b ) { + + Object.defineProperty( this, 'isColor', { value: true } ); + + if ( g === undefined && b === undefined ) { + + // r is THREE.Color, hex or string + return this.set( r ); + + } + + return this.setRGB( r, g, b ); + + } + + set( value ) { + + if ( value && value.isColor ) { + + this.copy( value ); + + } else if ( typeof value === 'number' ) { + + this.setHex( value ); + + } else if ( typeof value === 'string' ) { + + this.setStyle( value ); + + } + + return this; + + } + + setScalar( scalar ) { + + this.r = scalar; + this.g = scalar; + this.b = scalar; + + return this; + + } + + setHex( hex ) { + + hex = Math.floor( hex ); + + this.r = ( hex >> 16 & 255 ) / 255; + this.g = ( hex >> 8 & 255 ) / 255; + this.b = ( hex & 255 ) / 255; + + return this; + + } + + setRGB( r, g, b ) { + + this.r = r; + this.g = g; + this.b = b; + + return this; + + } + + setHSL( h, s, l ) { + + // h,s,l ranges are in 0.0 - 1.0 + h = MathUtils.euclideanModulo( h, 1 ); + s = MathUtils.clamp( s, 0, 1 ); + l = MathUtils.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 ); + + } + + return this; + + } + + setStyle( style ) { + + 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 = /^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec( style ) ) { + + // rgb / hsl + + let color; + const name = m[ 1 ]; + const components = m[ 2 ]; + + switch ( name ) { + + case 'rgb': + case 'rgba': + + if ( color = /^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { + + // rgb(255,0,0) rgba(255,0,0,0.5) + this.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255; + this.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255; + this.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255; + + handleAlpha( color[ 5 ] ); + + return this; + + } + + if ( color = /^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { + + // rgb(100%,0%,0%) rgba(100%,0%,0%,0.5) + this.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100; + this.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100; + this.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100; + + handleAlpha( color[ 5 ] ); + + return this; + + } + + break; + + case 'hsl': + case 'hsla': + + if ( color = /^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { + + // hsl(120,50%,50%) hsla(120,50%,50%,0.5) + const h = parseFloat( color[ 1 ] ) / 360; + const s = parseInt( color[ 2 ], 10 ) / 100; + const l = parseInt( color[ 3 ], 10 ) / 100; + + handleAlpha( color[ 5 ] ); + + return this.setHSL( h, s, l ); + + } + + break; + + } + + } else if ( m = /^\#([A-Fa-f0-9]+)$/.exec( style ) ) { + + // hex color + + const hex = m[ 1 ]; + const size = hex.length; + + if ( size === 3 ) { + + // #ff0 + this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255; + this.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255; + this.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255; + + return this; + + } else if ( size === 6 ) { + + // #ff0000 + this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255; + this.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255; + this.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255; + + return this; + + } + + } + + if ( style && style.length > 0 ) { + + return this.setColorName( style ); + + } + + return this; + + } + + setColorName( style ) { + + // color keywords + const hex = _colorKeywords[ style ]; + + if ( hex !== undefined ) { + + // red + this.setHex( hex ); + + } 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; + + } + + copyGammaToLinear( color, gammaFactor = 2.0 ) { + + this.r = Math.pow( color.r, gammaFactor ); + this.g = Math.pow( color.g, gammaFactor ); + this.b = Math.pow( color.b, gammaFactor ); + + return this; + + } + + copyLinearToGamma( color, gammaFactor = 2.0 ) { + + const safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0; + + this.r = Math.pow( color.r, safeInverse ); + this.g = Math.pow( color.g, safeInverse ); + this.b = Math.pow( color.b, safeInverse ); + + return this; + + } + + convertGammaToLinear( gammaFactor ) { + + this.copyGammaToLinear( this, gammaFactor ); + + return this; + + } + + convertLinearToGamma( gammaFactor ) { + + this.copyLinearToGamma( this, gammaFactor ); + + 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() { + + return ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0; + + } + + getHexString() { + + return ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 ); + + } + + getHSL( target ) { + + // h,s,l ranges are in 0.0 - 1.0 + + if ( target === undefined ) { + + console.warn( 'THREE.Color: .getHSL() target is now required' ); + target = { h: 0, s: 0, l: 0 }; + + } + + const r = this.r, g = this.g, b = this.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; + + } + + getStyle() { + + return 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')'; + + } + + offsetHSL( h, s, l ) { + + this.getHSL( _hslA ); + + _hslA.h += h; _hslA.s += s; _hslA.l += l; + + this.setHSL( _hslA.h, _hslA.s, _hslA.l ); + + return this; + + } + + 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; + + } + + lerpHSL( color, alpha ) { + + this.getHSL( _hslA ); + color.getHSL( _hslB ); + + const h = MathUtils.lerp( _hslA.h, _hslB.h, alpha ); + const s = MathUtils.lerp( _hslA.s, _hslB.s, alpha ); + const l = MathUtils.lerp( _hslA.l, _hslB.l, alpha ); + + this.setHSL( h, s, l ); + + 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 ); + + if ( attribute.normalized === true ) { + + // assuming Uint8Array + + this.r /= 255; + this.g /= 255; + this.b /= 255; + + } + + return this; + + } + + toJSON() { + + return this.getHex(); + + } + + } + + Color.NAMES = _colorKeywords; + Color.prototype.r = 1; + Color.prototype.g = 1; + Color.prototype.b = 1; + + class Face3 { + + constructor( a, b, c, normal, color, materialIndex = 0 ) { + + this.a = a; + this.b = b; + this.c = c; + + this.normal = ( normal && normal.isVector3 ) ? normal : new Vector3(); + this.vertexNormals = Array.isArray( normal ) ? normal : []; + + this.color = ( color && color.isColor ) ? color : new Color(); + this.vertexColors = Array.isArray( color ) ? color : []; + + this.materialIndex = materialIndex; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + copy( source ) { + + this.a = source.a; + this.b = source.b; + this.c = source.c; + + this.normal.copy( source.normal ); + this.color.copy( source.color ); + + this.materialIndex = source.materialIndex; + + for ( let i = 0, il = source.vertexNormals.length; i < il; i ++ ) { + + this.vertexNormals[ i ] = source.vertexNormals[ i ].clone(); + + } + + for ( let i = 0, il = source.vertexColors.length; i < il; i ++ ) { + + this.vertexColors[ i ] = source.vertexColors[ i ].clone(); + + } + + return this; + + } + + } + + let materialId = 0; + + function Material() { + + Object.defineProperty( this, 'id', { value: materialId ++ } ); + + this.uuid = MathUtils.generateUUID(); + + this.name = ''; + this.type = 'Material'; + + this.fog = true; + + this.blending = NormalBlending; + this.side = FrontSide; + this.flatShading = false; + this.vertexColors = false; + + this.opacity = 1; + this.transparent = false; + + this.blendSrc = SrcAlphaFactor; + this.blendDst = OneMinusSrcAlphaFactor; + this.blendEquation = AddEquation; + this.blendSrcAlpha = null; + this.blendDstAlpha = null; + this.blendEquationAlpha = null; + + 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.alphaTest = 0; + this.premultipliedAlpha = false; + + this.visible = true; + + this.toneMapped = true; + + this.userData = {}; + + this.version = 0; + + } + + Material.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: Material, + + isMaterial: true, + + onBeforeCompile: function ( /* shaderobject, renderer */ ) {}, + + customProgramCacheKey: function () { + + return this.onBeforeCompile.toString(); + + }, + + setValues: function ( values ) { + + if ( values === undefined ) return; + + for ( const key in values ) { + + const newValue = values[ key ]; + + if ( newValue === undefined ) { + + console.warn( "THREE.Material: '" + key + "' parameter is undefined." ); + continue; + + } + + // for backward compatability if shading is set in the constructor + if ( key === 'shading' ) { + + console.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + this.flatShading = ( newValue === FlatShading ) ? true : false; + continue; + + } + + const currentValue = this[ key ]; + + if ( currentValue === undefined ) { + + console.warn( "THREE." + this.type + ": '" + key + "' is not a property of this material." ); + continue; + + } + + if ( currentValue && currentValue.isColor ) { + + currentValue.set( newValue ); + + } else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) { + + currentValue.copy( newValue ); + + } else { + + this[ key ] = newValue; + + } + + } + + }, + + toJSON: function ( meta ) { + + const isRoot = ( meta === undefined || typeof meta === 'string' ); + + if ( isRoot ) { + + meta = { + textures: {}, + images: {} + }; + + } + + const data = { + metadata: { + version: 4.5, + 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 && this.sheen.isColor ) data.sheen = this.sheen.getHex(); + if ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex(); + if ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity; + + if ( this.specular && this.specular.isColor ) data.specular = this.specular.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.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; + + 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.envMap && this.envMap.isTexture ) { + + data.envMap = this.envMap.toJSON( meta ).uuid; + data.reflectivity = this.reflectivity; // Scale behind envMap + data.refractionRatio = this.refractionRatio; + + if ( this.combine !== undefined ) data.combine = this.combine; + if ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity; + + } + + if ( this.gradientMap && this.gradientMap.isTexture ) { + + data.gradientMap = this.gradientMap.toJSON( meta ).uuid; + + } + + if ( this.size !== undefined ) data.size = this.size; + if ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation; + + if ( this.blending !== NormalBlending ) data.blending = this.blending; + if ( this.flatShading === true ) data.flatShading = this.flatShading; + if ( this.side !== FrontSide ) data.side = this.side; + if ( this.vertexColors ) data.vertexColors = true; + + if ( this.opacity < 1 ) data.opacity = this.opacity; + if ( this.transparent === true ) data.transparent = this.transparent; + + data.depthFunc = this.depthFunc; + data.depthTest = this.depthTest; + data.depthWrite = this.depthWrite; + + data.stencilWrite = this.stencilWrite; + data.stencilWriteMask = this.stencilWriteMask; + data.stencilFunc = this.stencilFunc; + data.stencilRef = this.stencilRef; + data.stencilFuncMask = this.stencilFuncMask; + data.stencilFail = this.stencilFail; + data.stencilZFail = this.stencilZFail; + data.stencilZPass = this.stencilZPass; + + // rotation (SpriteMaterial) + if ( this.rotation && 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 && 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.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha; + + if ( this.wireframe === true ) data.wireframe = this.wireframe; + 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.morphTargets === true ) data.morphTargets = true; + if ( this.morphNormals === true ) data.morphNormals = true; + if ( this.skinning === true ) data.skinning = true; + + if ( this.visible === false ) data.visible = false; + + if ( this.toneMapped === false ) data.toneMapped = false; + + if ( JSON.stringify( this.userData ) !== '{}' ) 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 ( isRoot ) { + + 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: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.name = source.name; + + this.fog = source.fog; + + this.blending = source.blending; + this.side = source.side; + this.flatShading = source.flatShading; + 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.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.premultipliedAlpha = source.premultipliedAlpha; + + this.visible = source.visible; + + this.toneMapped = source.toneMapped; + + this.userData = JSON.parse( JSON.stringify( source.userData ) ); + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + + } ); + + Object.defineProperty( Material.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + + } ); + + /** + * parameters = { + * color: , + * opacity: , + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.Multiply, + * reflectivity: , + * refractionRatio: , + * + * depthTest: , + * depthWrite: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: + * } + */ + + function MeshBasicMaterial( parameters ) { + + Material.call( this ); + + 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.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + + this.setValues( parameters ); + + } + + MeshBasicMaterial.prototype = Object.create( Material.prototype ); + MeshBasicMaterial.prototype.constructor = MeshBasicMaterial; + + MeshBasicMaterial.prototype.isMeshBasicMaterial = true; + + MeshBasicMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, 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.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.skinning = source.skinning; + this.morphTargets = source.morphTargets; + + return this; + + }; + + const _vector$3 = new Vector3(); + const _vector2$1 = new Vector2(); + + function BufferAttribute( array, itemSize, normalized ) { + + if ( Array.isArray( array ) ) { + + throw new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' ); + + } + + this.name = ''; + + this.array = array; + this.itemSize = itemSize; + this.count = array !== undefined ? array.length / itemSize : 0; + this.normalized = normalized === true; + + this.usage = StaticDrawUsage; + this.updateRange = { offset: 0, count: - 1 }; + + this.version = 0; + + } + + Object.defineProperty( BufferAttribute.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + + } ); + + Object.assign( BufferAttribute.prototype, { + + isBufferAttribute: true, + + onUploadCallback: function () {}, + + setUsage: function ( value ) { + + this.usage = value; + + return this; + + }, + + copy: function ( 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; + + return this; + + }, + + copyAt: function ( 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: function ( array ) { + + this.array.set( array ); + + return this; + + }, + + copyColorsArray: function ( colors ) { + + const array = this.array; + let offset = 0; + + for ( let i = 0, l = colors.length; i < l; i ++ ) { + + let color = colors[ i ]; + + if ( color === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i ); + color = new Color(); + + } + + array[ offset ++ ] = color.r; + array[ offset ++ ] = color.g; + array[ offset ++ ] = color.b; + + } + + return this; + + }, + + copyVector2sArray: function ( vectors ) { + + const array = this.array; + let offset = 0; + + for ( let i = 0, l = vectors.length; i < l; i ++ ) { + + let vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i ); + vector = new Vector2(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + + } + + return this; + + }, + + copyVector3sArray: function ( vectors ) { + + const array = this.array; + let offset = 0; + + for ( let i = 0, l = vectors.length; i < l; i ++ ) { + + let vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i ); + vector = new Vector3(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + array[ offset ++ ] = vector.z; + + } + + return this; + + }, + + copyVector4sArray: function ( vectors ) { + + const array = this.array; + let offset = 0; + + for ( let i = 0, l = vectors.length; i < l; i ++ ) { + + let vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i ); + vector = new Vector4(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + array[ offset ++ ] = vector.z; + array[ offset ++ ] = vector.w; + + } + + return this; + + }, + + applyMatrix3: function ( 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$3.fromBufferAttribute( this, i ); + _vector$3.applyMatrix3( m ); + + this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); + + } + + } + + return this; + + }, + + applyMatrix4: function ( m ) { + + for ( let i = 0, l = this.count; i < l; i ++ ) { + + _vector$3.x = this.getX( i ); + _vector$3.y = this.getY( i ); + _vector$3.z = this.getZ( i ); + + _vector$3.applyMatrix4( m ); + + this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); + + } + + return this; + + }, + + applyNormalMatrix: function ( m ) { + + for ( let i = 0, l = this.count; i < l; i ++ ) { + + _vector$3.x = this.getX( i ); + _vector$3.y = this.getY( i ); + _vector$3.z = this.getZ( i ); + + _vector$3.applyNormalMatrix( m ); + + this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); + + } + + return this; + + }, + + transformDirection: function ( m ) { + + for ( let i = 0, l = this.count; i < l; i ++ ) { + + _vector$3.x = this.getX( i ); + _vector$3.y = this.getY( i ); + _vector$3.z = this.getZ( i ); + + _vector$3.transformDirection( m ); + + this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); + + } + + return this; + + }, + + set: function ( value, offset = 0 ) { + + this.array.set( value, offset ); + + return this; + + }, + + getX: function ( index ) { + + return this.array[ index * this.itemSize ]; + + }, + + setX: function ( index, x ) { + + this.array[ index * this.itemSize ] = x; + + return this; + + }, + + getY: function ( index ) { + + return this.array[ index * this.itemSize + 1 ]; + + }, + + setY: function ( index, y ) { + + this.array[ index * this.itemSize + 1 ] = y; + + return this; + + }, + + getZ: function ( index ) { + + return this.array[ index * this.itemSize + 2 ]; + + }, + + setZ: function ( index, z ) { + + this.array[ index * this.itemSize + 2 ] = z; + + return this; + + }, + + getW: function ( index ) { + + return this.array[ index * this.itemSize + 3 ]; + + }, + + setW: function ( index, w ) { + + this.array[ index * this.itemSize + 3 ] = w; + + return this; + + }, + + setXY: function ( index, x, y ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + + return this; + + }, + + setXYZ: function ( index, x, y, z ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + this.array[ index + 2 ] = z; + + return this; + + }, + + setXYZW: function ( index, x, y, z, w ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + this.array[ index + 2 ] = z; + this.array[ index + 3 ] = w; + + return this; + + }, + + onUpload: function ( callback ) { + + this.onUploadCallback = callback; + + return this; + + }, + + clone: function () { + + return new this.constructor( this.array, this.itemSize ).copy( this ); + + }, + + toJSON: function () { + + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: Array.prototype.slice.call( this.array ), + normalized: this.normalized + }; + + } + + } ); + + // + + function Int8BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Int8Array( array ), itemSize, normalized ); + + } + + Int8BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Int8BufferAttribute.prototype.constructor = Int8BufferAttribute; + + + function Uint8BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Uint8Array( array ), itemSize, normalized ); + + } + + Uint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Uint8BufferAttribute.prototype.constructor = Uint8BufferAttribute; + + + function Uint8ClampedBufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize, normalized ); + + } + + Uint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Uint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute; + + + function Int16BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Int16Array( array ), itemSize, normalized ); + + } + + Int16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Int16BufferAttribute.prototype.constructor = Int16BufferAttribute; + + + function Uint16BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized ); + + } + + Uint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Uint16BufferAttribute.prototype.constructor = Uint16BufferAttribute; + + + function Int32BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Int32Array( array ), itemSize, normalized ); + + } + + Int32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Int32BufferAttribute.prototype.constructor = Int32BufferAttribute; + + + function Uint32BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Uint32Array( array ), itemSize, normalized ); + + } + + Uint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Uint32BufferAttribute.prototype.constructor = Uint32BufferAttribute; + + function Float16BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized ); + + } + + Float16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Float16BufferAttribute.prototype.constructor = Float16BufferAttribute; + Float16BufferAttribute.prototype.isFloat16BufferAttribute = true; + + function Float32BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Float32Array( array ), itemSize, normalized ); + + } + + Float32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Float32BufferAttribute.prototype.constructor = Float32BufferAttribute; + + + function Float64BufferAttribute( array, itemSize, normalized ) { + + BufferAttribute.call( this, new Float64Array( array ), itemSize, normalized ); + + } + + Float64BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); + Float64BufferAttribute.prototype.constructor = Float64BufferAttribute; + + class DirectGeometry { + + constructor() { + + this.vertices = []; + this.normals = []; + this.colors = []; + this.uvs = []; + this.uvs2 = []; + + this.groups = []; + + this.morphTargets = {}; + + this.skinWeights = []; + this.skinIndices = []; + + // this.lineDistances = []; + + this.boundingBox = null; + this.boundingSphere = null; + + // update flags + + this.verticesNeedUpdate = false; + this.normalsNeedUpdate = false; + this.colorsNeedUpdate = false; + this.uvsNeedUpdate = false; + this.groupsNeedUpdate = false; + + } + + computeGroups( geometry ) { + + const groups = []; + + let group, i; + let materialIndex = undefined; + + const faces = geometry.faces; + + for ( i = 0; i < faces.length; i ++ ) { + + const face = faces[ i ]; + + // materials + + if ( face.materialIndex !== materialIndex ) { + + materialIndex = face.materialIndex; + + if ( group !== undefined ) { + + group.count = ( i * 3 ) - group.start; + groups.push( group ); + + } + + group = { + start: i * 3, + materialIndex: materialIndex + }; + + } + + } + + if ( group !== undefined ) { + + group.count = ( i * 3 ) - group.start; + groups.push( group ); + + } + + this.groups = groups; + + } + + fromGeometry( geometry ) { + + const faces = geometry.faces; + const vertices = geometry.vertices; + const faceVertexUvs = geometry.faceVertexUvs; + + const hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0; + const hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0; + + // morphs + + const morphTargets = geometry.morphTargets; + const morphTargetsLength = morphTargets.length; + + let morphTargetsPosition; + + if ( morphTargetsLength > 0 ) { + + morphTargetsPosition = []; + + for ( let i = 0; i < morphTargetsLength; i ++ ) { + + morphTargetsPosition[ i ] = { + name: morphTargets[ i ].name, + data: [] + }; + + } + + this.morphTargets.position = morphTargetsPosition; + + } + + const morphNormals = geometry.morphNormals; + const morphNormalsLength = morphNormals.length; + + let morphTargetsNormal; + + if ( morphNormalsLength > 0 ) { + + morphTargetsNormal = []; + + for ( let i = 0; i < morphNormalsLength; i ++ ) { + + morphTargetsNormal[ i ] = { + name: morphNormals[ i ].name, + data: [] + }; + + } + + this.morphTargets.normal = morphTargetsNormal; + + } + + // skins + + const skinIndices = geometry.skinIndices; + const skinWeights = geometry.skinWeights; + + const hasSkinIndices = skinIndices.length === vertices.length; + const hasSkinWeights = skinWeights.length === vertices.length; + + // + + if ( vertices.length > 0 && faces.length === 0 ) { + + console.error( 'THREE.DirectGeometry: Faceless geometries are not supported.' ); + + } + + for ( let i = 0; i < faces.length; i ++ ) { + + const face = faces[ i ]; + + this.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] ); + + const vertexNormals = face.vertexNormals; + + if ( vertexNormals.length === 3 ) { + + this.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] ); + + } else { + + const normal = face.normal; + + this.normals.push( normal, normal, normal ); + + } + + const vertexColors = face.vertexColors; + + if ( vertexColors.length === 3 ) { + + this.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] ); + + } else { + + const color = face.color; + + this.colors.push( color, color, color ); + + } + + if ( hasFaceVertexUv === true ) { + + const vertexUvs = faceVertexUvs[ 0 ][ i ]; + + if ( vertexUvs !== undefined ) { + + this.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] ); + + } else { + + console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i ); + + this.uvs.push( new Vector2(), new Vector2(), new Vector2() ); + + } + + } + + if ( hasFaceVertexUv2 === true ) { + + const vertexUvs = faceVertexUvs[ 1 ][ i ]; + + if ( vertexUvs !== undefined ) { + + this.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] ); + + } else { + + console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i ); + + this.uvs2.push( new Vector2(), new Vector2(), new Vector2() ); + + } + + } + + // morphs + + for ( let j = 0; j < morphTargetsLength; j ++ ) { + + const morphTarget = morphTargets[ j ].vertices; + + morphTargetsPosition[ j ].data.push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] ); + + } + + for ( let j = 0; j < morphNormalsLength; j ++ ) { + + const morphNormal = morphNormals[ j ].vertexNormals[ i ]; + + morphTargetsNormal[ j ].data.push( morphNormal.a, morphNormal.b, morphNormal.c ); + + } + + // skins + + if ( hasSkinIndices ) { + + this.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] ); + + } + + if ( hasSkinWeights ) { + + this.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] ); + + } + + } + + this.computeGroups( geometry ); + + this.verticesNeedUpdate = geometry.verticesNeedUpdate; + this.normalsNeedUpdate = geometry.normalsNeedUpdate; + this.colorsNeedUpdate = geometry.colorsNeedUpdate; + this.uvsNeedUpdate = geometry.uvsNeedUpdate; + this.groupsNeedUpdate = geometry.groupsNeedUpdate; + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + return this; + + } + + } + + function arrayMax( array ) { + + if ( array.length === 0 ) return - Infinity; + + let max = array[ 0 ]; + + for ( let i = 1, l = array.length; i < l; ++ i ) { + + if ( array[ i ] > max ) max = array[ i ]; + + } + + return max; + + } + + const TYPED_ARRAYS = { + Int8Array: Int8Array, + Uint8Array: Uint8Array, + // Workaround for IE11 pre KB2929437. See #11440 + Uint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array, + Int16Array: Int16Array, + Uint16Array: Uint16Array, + Int32Array: Int32Array, + Uint32Array: Uint32Array, + Float32Array: Float32Array, + Float64Array: Float64Array + }; + + function getTypedArray( type, buffer ) { + + return new TYPED_ARRAYS[ type ]( buffer ); + + } + + let _bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id + + const _m1$2 = new Matrix4(); + const _obj = new Object3D(); + const _offset = new Vector3(); + const _box$2 = new Box3(); + const _boxMorphTargets = new Box3(); + const _vector$4 = new Vector3(); + + function BufferGeometry() { + + Object.defineProperty( this, 'id', { value: _bufferGeometryId += 2 } ); + + this.uuid = MathUtils.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 = {}; + + } + + BufferGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: BufferGeometry, + + isBufferGeometry: true, + + getIndex: function () { + + return this.index; + + }, + + setIndex: function ( index ) { + + if ( Array.isArray( index ) ) { + + this.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 ); + + } else { + + this.index = index; + + } + + return this; + + }, + + getAttribute: function ( name ) { + + return this.attributes[ name ]; + + }, + + setAttribute: function ( name, attribute ) { + + this.attributes[ name ] = attribute; + + return this; + + }, + + deleteAttribute: function ( name ) { + + delete this.attributes[ name ]; + + return this; + + }, + + hasAttribute: function ( name ) { + + return this.attributes[ name ] !== undefined; + + }, + + addGroup: function ( start, count, materialIndex = 0 ) { + + this.groups.push( { + + start: start, + count: count, + materialIndex: materialIndex + + } ); + + }, + + clearGroups: function () { + + this.groups = []; + + }, + + setDrawRange: function ( start, count ) { + + this.drawRange.start = start; + this.drawRange.count = count; + + }, + + applyMatrix4: function ( 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; + + }, + + rotateX: function ( angle ) { + + // rotate geometry around world x-axis + + _m1$2.makeRotationX( angle ); + + this.applyMatrix4( _m1$2 ); + + return this; + + }, + + rotateY: function ( angle ) { + + // rotate geometry around world y-axis + + _m1$2.makeRotationY( angle ); + + this.applyMatrix4( _m1$2 ); + + return this; + + }, + + rotateZ: function ( angle ) { + + // rotate geometry around world z-axis + + _m1$2.makeRotationZ( angle ); + + this.applyMatrix4( _m1$2 ); + + return this; + + }, + + translate: function ( x, y, z ) { + + // translate geometry + + _m1$2.makeTranslation( x, y, z ); + + this.applyMatrix4( _m1$2 ); + + return this; + + }, + + scale: function ( x, y, z ) { + + // scale geometry + + _m1$2.makeScale( x, y, z ); + + this.applyMatrix4( _m1$2 ); + + return this; + + }, + + lookAt: function ( vector ) { + + _obj.lookAt( vector ); + + _obj.updateMatrix(); + + this.applyMatrix4( _obj.matrix ); + + return this; + + }, + + center: function () { + + this.computeBoundingBox(); + + this.boundingBox.getCenter( _offset ).negate(); + + this.translate( _offset.x, _offset.y, _offset.z ); + + return this; + + }, + + setFromObject: function ( object ) { + + // console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this ); + + const geometry = object.geometry; + + if ( object.isPoints || object.isLine ) { + + const positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 ); + const colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 ); + + this.setAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) ); + this.setAttribute( 'color', colors.copyColorsArray( geometry.colors ) ); + + if ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) { + + const lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 ); + + this.setAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) ); + + } + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + } else if ( object.isMesh ) { + + if ( geometry && geometry.isGeometry ) { + + this.fromGeometry( geometry ); + + } + + } + + return this; + + }, + + setFromPoints: function ( 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; + + }, + + updateFromObject: function ( object ) { + + let geometry = object.geometry; + + if ( object.isMesh ) { + + let direct = geometry.__directGeometry; + + if ( geometry.elementsNeedUpdate === true ) { + + direct = undefined; + geometry.elementsNeedUpdate = false; + + } + + if ( direct === undefined ) { + + return this.fromGeometry( geometry ); + + } + + direct.verticesNeedUpdate = geometry.verticesNeedUpdate; + direct.normalsNeedUpdate = geometry.normalsNeedUpdate; + direct.colorsNeedUpdate = geometry.colorsNeedUpdate; + direct.uvsNeedUpdate = geometry.uvsNeedUpdate; + direct.groupsNeedUpdate = geometry.groupsNeedUpdate; + + geometry.verticesNeedUpdate = false; + geometry.normalsNeedUpdate = false; + geometry.colorsNeedUpdate = false; + geometry.uvsNeedUpdate = false; + geometry.groupsNeedUpdate = false; + + geometry = direct; + + } + + if ( geometry.verticesNeedUpdate === true ) { + + const attribute = this.attributes.position; + + if ( attribute !== undefined ) { + + attribute.copyVector3sArray( geometry.vertices ); + attribute.needsUpdate = true; + + } + + geometry.verticesNeedUpdate = false; + + } + + if ( geometry.normalsNeedUpdate === true ) { + + const attribute = this.attributes.normal; + + if ( attribute !== undefined ) { + + attribute.copyVector3sArray( geometry.normals ); + attribute.needsUpdate = true; + + } + + geometry.normalsNeedUpdate = false; + + } + + if ( geometry.colorsNeedUpdate === true ) { + + const attribute = this.attributes.color; + + if ( attribute !== undefined ) { + + attribute.copyColorsArray( geometry.colors ); + attribute.needsUpdate = true; + + } + + geometry.colorsNeedUpdate = false; + + } + + if ( geometry.uvsNeedUpdate ) { + + const attribute = this.attributes.uv; + + if ( attribute !== undefined ) { + + attribute.copyVector2sArray( geometry.uvs ); + attribute.needsUpdate = true; + + } + + geometry.uvsNeedUpdate = false; + + } + + if ( geometry.lineDistancesNeedUpdate ) { + + const attribute = this.attributes.lineDistance; + + if ( attribute !== undefined ) { + + attribute.copyArray( geometry.lineDistances ); + attribute.needsUpdate = true; + + } + + geometry.lineDistancesNeedUpdate = false; + + } + + if ( geometry.groupsNeedUpdate ) { + + geometry.computeGroups( object.geometry ); + this.groups = geometry.groups; + + geometry.groupsNeedUpdate = false; + + } + + return this; + + }, + + fromGeometry: function ( geometry ) { + + geometry.__directGeometry = new DirectGeometry().fromGeometry( geometry ); + + return this.fromDirectGeometry( geometry.__directGeometry ); + + }, + + fromDirectGeometry: function ( geometry ) { + + const positions = new Float32Array( geometry.vertices.length * 3 ); + this.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) ); + + if ( geometry.normals.length > 0 ) { + + const normals = new Float32Array( geometry.normals.length * 3 ); + this.setAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) ); + + } + + if ( geometry.colors.length > 0 ) { + + const colors = new Float32Array( geometry.colors.length * 3 ); + this.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) ); + + } + + if ( geometry.uvs.length > 0 ) { + + const uvs = new Float32Array( geometry.uvs.length * 2 ); + this.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) ); + + } + + if ( geometry.uvs2.length > 0 ) { + + const uvs2 = new Float32Array( geometry.uvs2.length * 2 ); + this.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) ); + + } + + // groups + + this.groups = geometry.groups; + + // morphs + + for ( const name in geometry.morphTargets ) { + + const array = []; + const morphTargets = geometry.morphTargets[ name ]; + + for ( let i = 0, l = morphTargets.length; i < l; i ++ ) { + + const morphTarget = morphTargets[ i ]; + + const attribute = new Float32BufferAttribute( morphTarget.data.length * 3, 3 ); + attribute.name = morphTarget.name; + + array.push( attribute.copyVector3sArray( morphTarget.data ) ); + + } + + this.morphAttributes[ name ] = array; + + } + + // skinning + + if ( geometry.skinIndices.length > 0 ) { + + const skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 ); + this.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) ); + + } + + if ( geometry.skinWeights.length > 0 ) { + + const skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 ); + this.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) ); + + } + + // + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + return this; + + }, + + computeBoundingBox: function () { + + 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. Alternatively set "mesh.frustumCulled" to "false".', 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$4.addVectors( this.boundingBox.min, _box$2.min ); + this.boundingBox.expandByPoint( _vector$4 ); + + _vector$4.addVectors( this.boundingBox.max, _box$2.max ); + this.boundingBox.expandByPoint( _vector$4 ); + + } 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: function () { + + 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. Alternatively set "mesh.frustumCulled" to "false".', 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$4.addVectors( _box$2.min, _boxMorphTargets.min ); + _box$2.expandByPoint( _vector$4 ); + + _vector$4.addVectors( _box$2.max, _boxMorphTargets.max ); + _box$2.expandByPoint( _vector$4 ); + + } 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$4.fromBufferAttribute( position, i ); + + maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) ); + + } + + // 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$4.fromBufferAttribute( morphAttribute, j ); + + if ( morphTargetsRelative ) { + + _offset.fromBufferAttribute( position, j ); + _vector$4.add( _offset ); + + } + + maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) ); + + } + + } + + } + + 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 ); + + } + + } + + }, + + computeFaceNormals: function () { + + // backwards compatibility + + }, + + computeVertexNormals: function () { + + 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; + + } + + }, + + merge: function ( geometry, offset ) { + + if ( ! ( geometry && geometry.isBufferGeometry ) ) { + + console.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry ); + return; + + } + + if ( offset === undefined ) { + + offset = 0; + + console.warn( + 'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. ' + + 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.' + ); + + } + + const attributes = this.attributes; + + for ( const key in attributes ) { + + if ( geometry.attributes[ key ] === undefined ) continue; + + const attribute1 = attributes[ key ]; + const attributeArray1 = attribute1.array; + + const attribute2 = geometry.attributes[ key ]; + const attributeArray2 = attribute2.array; + + const attributeOffset = attribute2.itemSize * offset; + const length = Math.min( attributeArray2.length, attributeArray1.length - attributeOffset ); + + for ( let i = 0, j = attributeOffset; i < length; i ++, j ++ ) { + + attributeArray1[ j ] = attributeArray2[ i ]; + + } + + } + + return this; + + }, + + normalizeNormals: function () { + + const normals = this.attributes.normal; + + for ( let i = 0, il = normals.count; i < il; i ++ ) { + + _vector$4.fromBufferAttribute( normals, i ); + + _vector$4.normalize(); + + normals.setXYZ( i, _vector$4.x, _vector$4.y, _vector$4.z ); + + } + + }, + + toNonIndexed: function () { + + 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 ++ ) { + + 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(): Geometry 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: function () { + + const data = { + metadata: { + version: 4.5, + 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; + + } + + 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 ]; + + const attributeData = attribute.toJSON( data.data ); + + if ( attribute.name !== '' ) attributeData.name = attribute.name; + + data.data.attributes[ key ] = attributeData; + + } + + 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 ]; + + const attributeData = attribute.toJSON( data.data ); + + if ( attribute.name !== '' ) attributeData.name = attribute.name; + + array.push( attributeData ); + + } + + 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: function () { + + /* + // Handle primitives + + const parameters = this.parameters; + + if ( parameters !== undefined ) { + + const values = []; + + for ( const key in parameters ) { + + values.push( parameters[ key ] ); + + } + + const geometry = Object.create( this.constructor.prototype ); + this.constructor.apply( geometry, values ); + return geometry; + + } + + return new this.constructor().copy( this ); + */ + + return new BufferGeometry().copy( this ); + + }, + + copy: function ( 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: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + + } ); + + const _inverseMatrix = new Matrix4(); + const _ray = new Ray(); + const _sphere = new Sphere(); + + const _vA = new Vector3(); + const _vB = new Vector3(); + const _vC = new Vector3(); + + const _tempA = new Vector3(); + const _tempB = new Vector3(); + const _tempC = new Vector3(); + + const _morphA = new Vector3(); + const _morphB = new Vector3(); + const _morphC = new Vector3(); + + const _uvA = new Vector2(); + const _uvB = new Vector2(); + const _uvC = new Vector2(); + + const _intersectionPoint = new Vector3(); + const _intersectionPointWorld = new Vector3(); + + function Mesh( geometry, material ) { + + Object3D.call( this ); + + this.type = 'Mesh'; + + this.geometry = geometry !== undefined ? geometry : new BufferGeometry(); + this.material = material !== undefined ? material : new MeshBasicMaterial(); + + this.updateMorphTargets(); + + } + + Mesh.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Mesh, + + isMesh: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + if ( source.morphTargetInfluences !== undefined ) { + + this.morphTargetInfluences = source.morphTargetInfluences.slice(); + + } + + if ( source.morphTargetDictionary !== undefined ) { + + this.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary ); + + } + + this.material = source.material; + this.geometry = source.geometry; + + return this; + + }, + + updateMorphTargets: function () { + + const geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + 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; + + } + + } + + } + + } else { + + const morphTargets = geometry.morphTargets; + + if ( morphTargets !== undefined && morphTargets.length > 0 ) { + + console.error( 'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + } + + }, + + raycast: function ( raycaster, intersects ) { + + const geometry = this.geometry; + const material = this.material; + const matrixWorld = this.matrixWorld; + + if ( material === undefined ) return; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + _sphere.copy( geometry.boundingSphere ); + _sphere.applyMatrix4( matrixWorld ); + + if ( raycaster.ray.intersectsSphere( _sphere ) === false ) return; + + // + + _inverseMatrix.copy( matrixWorld ).invert(); + _ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix ); + + // Check boundingBox before continuing + + if ( geometry.boundingBox !== null ) { + + if ( _ray.intersectsBox( geometry.boundingBox ) === false ) return; + + } + + let intersection; + + if ( geometry.isBufferGeometry ) { + + const index = geometry.index; + const position = geometry.attributes.position; + const morphPosition = geometry.morphAttributes.position; + const morphTargetsRelative = geometry.morphTargetsRelative; + const uv = geometry.attributes.uv; + const uv2 = geometry.attributes.uv2; + 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( ( 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 = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, 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 = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, 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( ( 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 = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, 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 = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ); + + if ( intersection ) { + + intersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics + intersects.push( intersection ); + + } + + } + + } + + } + + } else if ( geometry.isGeometry ) { + + const isMultiMaterial = Array.isArray( material ); + + const vertices = geometry.vertices; + const faces = geometry.faces; + let uvs; + + const faceVertexUvs = geometry.faceVertexUvs[ 0 ]; + if ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs; + + for ( let f = 0, fl = faces.length; f < fl; f ++ ) { + + const face = faces[ f ]; + const faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material; + + if ( faceMaterial === undefined ) continue; + + const fvA = vertices[ face.a ]; + const fvB = vertices[ face.b ]; + const fvC = vertices[ face.c ]; + + intersection = checkIntersection( this, faceMaterial, raycaster, _ray, fvA, fvB, fvC, _intersectionPoint ); + + if ( intersection ) { + + if ( uvs && uvs[ f ] ) { + + const uvs_f = uvs[ f ]; + _uvA.copy( uvs_f[ 0 ] ); + _uvB.copy( uvs_f[ 1 ] ); + _uvC.copy( uvs_f[ 2 ] ); + + intersection.uv = Triangle.getUV( _intersectionPoint, fvA, fvB, fvC, _uvA, _uvB, _uvC, new Vector2() ); + + } + + intersection.face = face; + intersection.faceIndex = f; + intersects.push( intersection ); + + } + + } + + } + + } + + } ); + + function checkIntersection( 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 !== DoubleSide, 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 checkBufferGeometryIntersection( object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ) { + + _vA.fromBufferAttribute( position, a ); + _vB.fromBufferAttribute( position, b ); + _vC.fromBufferAttribute( position, c ); + + const morphInfluences = object.morphTargetInfluences; + + if ( material.morphTargets && morphPosition && morphInfluences ) { + + _morphA.set( 0, 0, 0 ); + _morphB.set( 0, 0, 0 ); + _morphC.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, a ); + _tempB.fromBufferAttribute( morphAttribute, b ); + _tempC.fromBufferAttribute( morphAttribute, c ); + + if ( morphTargetsRelative ) { + + _morphA.addScaledVector( _tempA, influence ); + _morphB.addScaledVector( _tempB, influence ); + _morphC.addScaledVector( _tempC, influence ); + + } else { + + _morphA.addScaledVector( _tempA.sub( _vA ), influence ); + _morphB.addScaledVector( _tempB.sub( _vB ), influence ); + _morphC.addScaledVector( _tempC.sub( _vC ), influence ); + + } + + } + + _vA.add( _morphA ); + _vB.add( _morphB ); + _vC.add( _morphC ); + + } + + if ( object.isSkinnedMesh ) { + + object.boneTransform( a, _vA ); + object.boneTransform( b, _vB ); + object.boneTransform( c, _vC ); + + } + + const intersection = checkIntersection( object, material, raycaster, ray, _vA, _vB, _vC, _intersectionPoint ); + + if ( intersection ) { + + if ( uv ) { + + _uvA.fromBufferAttribute( uv, a ); + _uvB.fromBufferAttribute( uv, b ); + _uvC.fromBufferAttribute( uv, c ); + + intersection.uv = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ); + + } + + if ( uv2 ) { + + _uvA.fromBufferAttribute( uv2, a ); + _uvB.fromBufferAttribute( uv2, b ); + _uvC.fromBufferAttribute( uv2, c ); + + intersection.uv2 = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ); + + } + + const face = new Face3( a, b, c ); + Triangle.getNormal( _vA, _vB, _vC, face.normal ); + + intersection.face = face; + + } + + return intersection; + + } + + class BoxBufferGeometry extends BufferGeometry { + + constructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) { + + super(); + + this.type = 'BoxBufferGeometry'; + + 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; + + } + + } + + } + + /** + * 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 ) ) { + + 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; + + } + + // 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}"; + + /** + * parameters = { + * defines: { "label" : "value" }, + * uniforms: { "parameter1": { value: 1.0 }, "parameter2": { value2: 2 } }, + * + * fragmentShader: , + * vertexShader: , + * + * wireframe: , + * wireframeLinewidth: , + * + * lights: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function ShaderMaterial( parameters ) { + + Material.call( this ); + + this.type = 'ShaderMaterial'; + + this.defines = {}; + this.uniforms = {}; + + 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.skinning = false; // set to use skinning attribute streams + this.morphTargets = false; // set to use morph targets + this.morphNormals = false; // set to use morph normals + + this.extensions = { + derivatives: false, // set to use derivatives + fragDepth: false, // set to use fragment depth values + drawBuffers: false, // set to use draw buffers + shaderTextureLOD: false // set to use shader texture LOD + }; + + // 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 ], + 'uv2': [ 0, 0 ] + }; + + this.index0AttributeName = undefined; + this.uniformsNeedUpdate = false; + + this.glslVersion = null; + + if ( parameters !== undefined ) { + + if ( parameters.attributes !== undefined ) { + + console.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' ); + + } + + this.setValues( parameters ); + + } + + } + + ShaderMaterial.prototype = Object.create( Material.prototype ); + ShaderMaterial.prototype.constructor = ShaderMaterial; + + ShaderMaterial.prototype.isShaderMaterial = true; + + ShaderMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.fragmentShader = source.fragmentShader; + this.vertexShader = source.vertexShader; + + this.uniforms = cloneUniforms( source.uniforms ); + + this.defines = Object.assign( {}, source.defines ); + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + this.lights = source.lights; + this.clipping = source.clipping; + + this.skinning = source.skinning; + + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + this.extensions = Object.assign( {}, source.extensions ); + + this.glslVersion = source.glslVersion; + + return this; + + }; + + ShaderMaterial.prototype.toJSON = function ( meta ) { + + const data = Material.prototype.toJSON.call( this, 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; + + 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; + + }; + + function Camera() { + + Object3D.call( this ); + + this.type = 'Camera'; + + this.matrixWorldInverse = new Matrix4(); + + this.projectionMatrix = new Matrix4(); + this.projectionMatrixInverse = new Matrix4(); + + } + + Camera.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Camera, + + isCamera: true, + + copy: function ( source, recursive ) { + + Object3D.prototype.copy.call( this, source, recursive ); + + this.matrixWorldInverse.copy( source.matrixWorldInverse ); + + this.projectionMatrix.copy( source.projectionMatrix ); + this.projectionMatrixInverse.copy( source.projectionMatrixInverse ); + + return this; + + }, + + getWorldDirection: function ( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Camera: .getWorldDirection() target is now required' ); + target = new Vector3(); + + } + + this.updateWorldMatrix( true, false ); + + const e = this.matrixWorld.elements; + + return target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize(); + + }, + + updateMatrixWorld: function ( force ) { + + Object3D.prototype.updateMatrixWorld.call( this, force ); + + this.matrixWorldInverse.copy( this.matrixWorld ).invert(); + + }, + + updateWorldMatrix: function ( updateParents, updateChildren ) { + + Object3D.prototype.updateWorldMatrix.call( this, updateParents, updateChildren ); + + this.matrixWorldInverse.copy( this.matrixWorld ).invert(); + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + } + + } ); + + function PerspectiveCamera( fov = 50, aspect = 1, near = 0.1, far = 2000 ) { + + Camera.call( this ); + + 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(); + + } + + PerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), { + + constructor: PerspectiveCamera, + + isPerspectiveCamera: true, + + copy: function ( source, recursive ) { + + Camera.prototype.copy.call( this, 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: function ( focalLength ) { + + // see http://www.bobatkins.com/photography/technical/field_of_view.html + const vExtentSlope = 0.5 * this.getFilmHeight() / focalLength; + + this.fov = MathUtils.RAD2DEG * 2 * Math.atan( vExtentSlope ); + this.updateProjectionMatrix(); + + }, + + /** + * Calculates the focal length from the current .fov and .filmGauge. + */ + getFocalLength: function () { + + const vExtentSlope = Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov ); + + return 0.5 * this.getFilmHeight() / vExtentSlope; + + }, + + getEffectiveFOV: function () { + + return MathUtils.RAD2DEG * 2 * Math.atan( + Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov ) / this.zoom ); + + }, + + getFilmWidth: function () { + + // film not completely covered in portrait format (aspect < 1) + return this.filmGauge * Math.min( this.aspect, 1 ); + + }, + + getFilmHeight: function () { + + // film not completely covered in landscape format (aspect > 1) + return this.filmGauge / Math.max( this.aspect, 1 ); + + }, + + /** + * 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: function ( 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: function () { + + if ( this.view !== null ) { + + this.view.enabled = false; + + } + + this.updateProjectionMatrix(); + + }, + + updateProjectionMatrix: function () { + + const near = this.near; + let top = near * Math.tan( MathUtils.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.projectionMatrixInverse.copy( this.projectionMatrix ).invert(); + + }, + + toJSON: function ( meta ) { + + const data = Object3D.prototype.toJSON.call( this, 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, aspect = 1; + + function CubeCamera( near, far, renderTarget ) { + + Object3D.call( this ); + + this.type = 'CubeCamera'; + + if ( renderTarget.isWebGLCubeRenderTarget !== true ) { + + console.error( 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.' ); + return; + + } + + this.renderTarget = renderTarget; + + const cameraPX = new PerspectiveCamera( fov, aspect, near, far ); + cameraPX.layers = this.layers; + cameraPX.up.set( 0, - 1, 0 ); + cameraPX.lookAt( new Vector3( 1, 0, 0 ) ); + this.add( cameraPX ); + + const cameraNX = new PerspectiveCamera( fov, aspect, near, far ); + cameraNX.layers = this.layers; + cameraNX.up.set( 0, - 1, 0 ); + cameraNX.lookAt( new Vector3( - 1, 0, 0 ) ); + this.add( cameraNX ); + + const cameraPY = new PerspectiveCamera( fov, aspect, near, far ); + cameraPY.layers = this.layers; + cameraPY.up.set( 0, 0, 1 ); + cameraPY.lookAt( new Vector3( 0, 1, 0 ) ); + this.add( cameraPY ); + + const cameraNY = new PerspectiveCamera( fov, aspect, near, far ); + cameraNY.layers = this.layers; + cameraNY.up.set( 0, 0, - 1 ); + cameraNY.lookAt( new Vector3( 0, - 1, 0 ) ); + this.add( cameraNY ); + + const cameraPZ = new PerspectiveCamera( fov, aspect, near, far ); + cameraPZ.layers = this.layers; + cameraPZ.up.set( 0, - 1, 0 ); + cameraPZ.lookAt( new Vector3( 0, 0, 1 ) ); + this.add( cameraPZ ); + + const cameraNZ = new PerspectiveCamera( fov, aspect, near, far ); + cameraNZ.layers = this.layers; + cameraNZ.up.set( 0, - 1, 0 ); + cameraNZ.lookAt( new Vector3( 0, 0, - 1 ) ); + this.add( cameraNZ ); + + this.update = function ( renderer, scene ) { + + if ( this.parent === null ) this.updateMatrixWorld(); + + const currentXrEnabled = renderer.xr.enabled; + const currentRenderTarget = renderer.getRenderTarget(); + + renderer.xr.enabled = false; + + const generateMipmaps = renderTarget.texture.generateMipmaps; + + renderTarget.texture.generateMipmaps = false; + + renderer.setRenderTarget( renderTarget, 0 ); + renderer.render( scene, cameraPX ); + + renderer.setRenderTarget( renderTarget, 1 ); + renderer.render( scene, cameraNX ); + + renderer.setRenderTarget( renderTarget, 2 ); + renderer.render( scene, cameraPY ); + + renderer.setRenderTarget( renderTarget, 3 ); + renderer.render( scene, cameraNY ); + + renderer.setRenderTarget( renderTarget, 4 ); + renderer.render( scene, cameraPZ ); + + renderTarget.texture.generateMipmaps = generateMipmaps; + + renderer.setRenderTarget( renderTarget, 5 ); + renderer.render( scene, cameraNZ ); + + renderer.setRenderTarget( currentRenderTarget ); + + renderer.xr.enabled = currentXrEnabled; + + }; + + } + + CubeCamera.prototype = Object.create( Object3D.prototype ); + CubeCamera.prototype.constructor = CubeCamera; + + function CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) { + + images = images !== undefined ? images : []; + mapping = mapping !== undefined ? mapping : CubeReflectionMapping; + format = format !== undefined ? format : RGBFormat; + + Texture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.flipY = false; + + // Why CubeTexture._needsFlipEnvMap is necessary: + // + // 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 _needsFlipEnvMap controls this conversion. The flip is not required (and thus _needsFlipEnvMap is set to false) + // when using WebGLCubeRenderTarget.texture as a cube texture. + + this._needsFlipEnvMap = true; + + } + + CubeTexture.prototype = Object.create( Texture.prototype ); + CubeTexture.prototype.constructor = CubeTexture; + + CubeTexture.prototype.isCubeTexture = true; + + Object.defineProperty( CubeTexture.prototype, 'images', { + + get: function () { + + return this.image; + + }, + + set: function ( value ) { + + this.image = value; + + } + + } ); + + function WebGLCubeRenderTarget( size, options, dummy ) { + + if ( Number.isInteger( options ) ) { + + console.warn( 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )' ); + + options = dummy; + + } + + WebGLRenderTarget.call( this, size, size, options ); + + options = options || {}; + + this.texture = new CubeTexture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding ); + + this.texture._needsFlipEnvMap = false; + + } + + WebGLCubeRenderTarget.prototype = Object.create( WebGLRenderTarget.prototype ); + WebGLCubeRenderTarget.prototype.constructor = WebGLCubeRenderTarget; + + WebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true; + + WebGLCubeRenderTarget.prototype.fromEquirectangularTexture = function ( renderer, texture ) { + + this.texture.type = texture.type; + this.texture.format = RGBAFormat; // see #18859 + this.texture.encoding = texture.encoding; + + 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 BoxBufferGeometry( 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; + + }; + + WebGLCubeRenderTarget.prototype.clear = function ( 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 ); + + }; + + function DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { + + Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.image = { data: data || null, width: width || 1, height: height || 1 }; + + this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; + this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; + + this.generateMipmaps = false; + this.flipY = false; + this.unpackAlignment = 1; + + this.needsUpdate = true; + + } + + DataTexture.prototype = Object.create( Texture.prototype ); + DataTexture.prototype.constructor = DataTexture; + + DataTexture.prototype.isDataTexture = true; + + const _sphere$1 = /*@__PURE__*/ new Sphere(); + const _vector$5 = /*@__PURE__*/ new Vector3(); + + class Frustum { + + constructor( p0, p1, p2, p3, p4, p5 ) { + + this.planes = [ + + ( p0 !== undefined ) ? p0 : new Plane(), + ( p1 !== undefined ) ? p1 : new Plane(), + ( p2 !== undefined ) ? p2 : new Plane(), + ( p3 !== undefined ) ? p3 : new Plane(), + ( p4 !== undefined ) ? p4 : new Plane(), + ( p5 !== undefined ) ? p5 : new Plane() + + ]; + + } + + 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; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + copy( frustum ) { + + const planes = this.planes; + + for ( let i = 0; i < 6; i ++ ) { + + planes[ i ].copy( frustum.planes[ i ] ); + + } + + return this; + + } + + setFromProjectionMatrix( m ) { + + 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(); + planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize(); + + return this; + + } + + intersectsObject( object ) { + + const geometry = object.geometry; + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + _sphere$1.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld ); + + return this.intersectsSphere( _sphere$1 ); + + } + + intersectsSprite( sprite ) { + + _sphere$1.center.set( 0, 0, 0 ); + _sphere$1.radius = 0.7071067811865476; + _sphere$1.applyMatrix4( sprite.matrixWorld ); + + return this.intersectsSphere( _sphere$1 ); + + } + + 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$5.x = plane.normal.x > 0 ? box.max.x : box.min.x; + _vector$5.y = plane.normal.y > 0 ? box.max.y : box.min.y; + _vector$5.z = plane.normal.z > 0 ? box.max.z : box.min.z; + + if ( plane.distanceToPoint( _vector$5 ) < 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; + + } + + } + + 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, capabilities ) { + + const isWebGL2 = capabilities.isWebGL2; + + const buffers = new WeakMap(); + + function createBuffer( attribute, bufferType ) { + + const array = attribute.array; + const usage = attribute.usage; + + const buffer = gl.createBuffer(); + + gl.bindBuffer( bufferType, buffer ); + gl.bufferData( bufferType, array, usage ); + + attribute.onUploadCallback(); + + let type = 5126; + + if ( array instanceof Float32Array ) { + + type = 5126; + + } else if ( array instanceof Float64Array ) { + + console.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' ); + + } else if ( array instanceof Uint16Array ) { + + if ( attribute.isFloat16BufferAttribute ) { + + if ( isWebGL2 ) { + + type = 5131; + + } else { + + console.warn( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' ); + + } + + } else { + + type = 5123; + + } + + } else if ( array instanceof Int16Array ) { + + type = 5122; + + } else if ( array instanceof Uint32Array ) { + + type = 5125; + + } else if ( array instanceof Int32Array ) { + + type = 5124; + + } else if ( array instanceof Int8Array ) { + + type = 5120; + + } else if ( array instanceof Uint8Array ) { + + type = 5121; + + } + + return { + buffer: buffer, + type: type, + bytesPerElement: array.BYTES_PER_ELEMENT, + version: attribute.version + }; + + } + + function updateBuffer( buffer, attribute, bufferType ) { + + const array = attribute.array; + const updateRange = attribute.updateRange; + + gl.bindBuffer( bufferType, buffer ); + + if ( updateRange.count === - 1 ) { + + // Not using update ranges + + gl.bufferSubData( bufferType, 0, array ); + + } else { + + if ( isWebGL2 ) { + + gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, + array, updateRange.offset, updateRange.count ); + + } else { + + gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, + array.subarray( updateRange.offset, updateRange.offset + updateRange.count ) ); + + } + + updateRange.count = - 1; // reset range + + } + + } + + // + + 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 ) { + + updateBuffer( data.buffer, attribute, bufferType ); + + data.version = attribute.version; + + } + + } + + return { + + get: get, + remove: remove, + update: update + + }; + + } + + class PlaneBufferGeometry extends BufferGeometry { + + constructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) { + + super(); + this.type = 'PlaneBufferGeometry'; + + 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 ) ); + + } + + } + + var alphamap_fragment = "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif"; + + var alphamap_pars_fragment = "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif"; + + var alphatest_fragment = "#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif"; + + var aomap_fragment = "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif"; + + var aomap_pars_fragment = "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif"; + + var begin_vertex = "vec3 transformed = vec3( position );"; + + var beginnormal_vertex = "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif"; + + var bsdfs = "vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\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\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_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}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * 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}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat 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_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\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( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\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 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\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#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif"; + + 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 = "#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif"; + + var color_pars_fragment = "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif"; + + var color_pars_vertex = "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif"; + + var color_vertex = "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\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; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\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 max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\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};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\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}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\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 linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.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}"; + + var cube_uv_reflection_fragment = "#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.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\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\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\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + 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 ), m0, cubeUV_maxMipLevel );\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_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif"; + + 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, vUv ).x * displacementScale + displacementBias );\n#endif"; + + var emissivemap_fragment = "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif"; + + var emissivemap_pars_fragment = "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif"; + + var encodings_fragment = "gl_FragColor = linearToOutputTexel( gl_FragColor );"; + + var encodings_pars_fragment = "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( 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 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\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, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\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 int maxMipLevel;\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 )\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 )\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\tfogDepth = - mvPosition.z;\n#endif"; + + var fog_pars_vertex = "#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif"; + + var fog_fragment = "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\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 fogDepth;\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 texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}"; + + var lightmap_fragment = "#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif"; + + var lightmap_pars_fragment = "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif"; + + var lights_lambert_vertex = "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif"; + + var lights_pars_begin = "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\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 GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\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 getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.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 getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.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 getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.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 GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif"; + + var envmap_physical_pars_fragment = "#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif"; + + var lights_toon_fragment = "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;"; + + var lights_toon_pars_fragment = "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)"; + + 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;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\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 GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)"; + + var lights_physical_fragment = "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).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_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif"; + + var lights_physical_pars_fragment = "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\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.specularRoughness;\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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * 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 = "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\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\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( 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, geometry, 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\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\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, 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\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( 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, geometry, 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, geometry, 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\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\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 ], geometry );\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, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif"; + + var lights_fragment_end = "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif"; + + var logdepthbuf_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif"; + + var logdepthbuf_pars_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif"; + + var logdepthbuf_pars_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif"; + + var logdepthbuf_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif"; + + var map_fragment = "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\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\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif"; + + var map_particle_pars_fragment = "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\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, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif"; + + var metalnessmap_pars_fragment = "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif"; + + var morphnormal_vertex = "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif"; + + var morphtarget_pars_vertex = "#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif"; + + var morphtarget_vertex = "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif"; + + var normal_fragment_begin = "#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;"; + + var normal_fragment_maps = "#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).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 * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif"; + + var normalmap_pars_fragment = "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif"; + + var clearcoat_normal_fragment_begin = "#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif"; + + var clearcoat_normal_fragment_maps = "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif"; + + var clearcoat_pars_fragment = "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif"; + + 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}\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 linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( 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 invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - 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_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, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif"; + + var roughnessmap_pars_fragment = "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif"; + + var shadowmap_pars_fragment = "#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\tvarying vec4 vSpotShadowCoord[ 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\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif"; + + var shadowmap_pars_vertex = "#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\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ 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 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 = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\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, vSpotShadowCoord[ 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\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\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, vUv );\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 toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }"; + + var transmissionmap_fragment = "#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif"; + + var transmissionmap_pars_fragment = "#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif"; + + var uv_pars_fragment = "#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif"; + + var uv_pars_vertex = "#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif"; + + var uv_vertex = "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif"; + + var uv2_pars_fragment = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif"; + + var uv2_pars_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif"; + + var uv2_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif"; + + var worldpos_vertex = "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif"; + + var background_frag = "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}"; + + var background_vert = "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}"; + + var cube_frag = "#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}"; + + var cube_vert = "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}"; + + var depth_frag = "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\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\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}"; + + var depth_vert = "#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#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}"; + + var distanceRGBA_frag = "#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 \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\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}"; + + var distanceRGBA_vert = "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\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}"; + + var equirect_frag = "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}"; + + var equirect_vert = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}"; + + var linedashed_frag = "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 \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var linedashed_vert = "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\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}"; + + var meshbasic_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshbasic_vert = "#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#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\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 \n}"; + + var meshlambert_frag = "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshlambert_vert = "#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#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#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\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshmatcap_frag = "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshmatcap_vert = "#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\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#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\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\tvViewPosition = - mvPosition.xyz;\n}"; + + var meshtoon_frag = "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \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\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshtoon_vert = "#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#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#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}"; + + var meshphong_frag = "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \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\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshphong_vert = "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#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#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshphysical_frag = "#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#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\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\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 \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\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var meshphysical_vert = "#define STANDARD\nvarying vec3 vViewPosition;\n#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\n#include \n#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#include \n\t#include \n\t#include \n#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\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}"; + + var normal_frag = "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#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\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\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}"; + + var normal_vert = "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#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\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#include \n#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\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}"; + + var points_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var points_vert = "uniform float size;\nuniform float scale;\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\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}"; + + var shadow_frag = "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}"; + + var shadow_vert = "#include \n#include \n#include \nvoid main() {\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}"; + + var sprite_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}"; + + var sprite_vert = "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"; + + const ShaderChunk = { + alphamap_fragment: alphamap_fragment, + alphamap_pars_fragment: alphamap_pars_fragment, + alphatest_fragment: alphatest_fragment, + aomap_fragment: aomap_fragment, + aomap_pars_fragment: aomap_pars_fragment, + begin_vertex: begin_vertex, + beginnormal_vertex: beginnormal_vertex, + bsdfs: bsdfs, + bumpmap_pars_fragment: bumpmap_pars_fragment, + clipping_planes_fragment: clipping_planes_fragment, + clipping_planes_pars_fragment: clipping_planes_pars_fragment, + clipping_planes_pars_vertex: clipping_planes_pars_vertex, + clipping_planes_vertex: clipping_planes_vertex, + color_fragment: color_fragment, + color_pars_fragment: color_pars_fragment, + color_pars_vertex: color_pars_vertex, + color_vertex: color_vertex, + common: common, + cube_uv_reflection_fragment: cube_uv_reflection_fragment, + defaultnormal_vertex: defaultnormal_vertex, + displacementmap_pars_vertex: displacementmap_pars_vertex, + displacementmap_vertex: displacementmap_vertex, + emissivemap_fragment: emissivemap_fragment, + emissivemap_pars_fragment: emissivemap_pars_fragment, + encodings_fragment: encodings_fragment, + encodings_pars_fragment: encodings_pars_fragment, + envmap_fragment: envmap_fragment, + envmap_common_pars_fragment: envmap_common_pars_fragment, + envmap_pars_fragment: envmap_pars_fragment, + envmap_pars_vertex: envmap_pars_vertex, + envmap_physical_pars_fragment: envmap_physical_pars_fragment, + envmap_vertex: envmap_vertex, + fog_vertex: fog_vertex, + fog_pars_vertex: fog_pars_vertex, + fog_fragment: fog_fragment, + fog_pars_fragment: fog_pars_fragment, + gradientmap_pars_fragment: gradientmap_pars_fragment, + lightmap_fragment: lightmap_fragment, + lightmap_pars_fragment: lightmap_pars_fragment, + lights_lambert_vertex: lights_lambert_vertex, + lights_pars_begin: lights_pars_begin, + lights_toon_fragment: lights_toon_fragment, + lights_toon_pars_fragment: lights_toon_pars_fragment, + lights_phong_fragment: lights_phong_fragment, + lights_phong_pars_fragment: lights_phong_pars_fragment, + lights_physical_fragment: lights_physical_fragment, + lights_physical_pars_fragment: lights_physical_pars_fragment, + lights_fragment_begin: lights_fragment_begin, + lights_fragment_maps: lights_fragment_maps, + lights_fragment_end: lights_fragment_end, + logdepthbuf_fragment: logdepthbuf_fragment, + logdepthbuf_pars_fragment: logdepthbuf_pars_fragment, + logdepthbuf_pars_vertex: logdepthbuf_pars_vertex, + logdepthbuf_vertex: logdepthbuf_vertex, + map_fragment: map_fragment, + map_pars_fragment: map_pars_fragment, + map_particle_fragment: map_particle_fragment, + map_particle_pars_fragment: map_particle_pars_fragment, + metalnessmap_fragment: metalnessmap_fragment, + metalnessmap_pars_fragment: metalnessmap_pars_fragment, + morphnormal_vertex: morphnormal_vertex, + morphtarget_pars_vertex: morphtarget_pars_vertex, + morphtarget_vertex: morphtarget_vertex, + normal_fragment_begin: normal_fragment_begin, + normal_fragment_maps: normal_fragment_maps, + normalmap_pars_fragment: normalmap_pars_fragment, + clearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin, + clearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps, + clearcoat_pars_fragment: clearcoat_pars_fragment, + packing: packing, + premultiplied_alpha_fragment: premultiplied_alpha_fragment, + project_vertex: project_vertex, + dithering_fragment: dithering_fragment, + dithering_pars_fragment: dithering_pars_fragment, + roughnessmap_fragment: roughnessmap_fragment, + roughnessmap_pars_fragment: roughnessmap_pars_fragment, + shadowmap_pars_fragment: shadowmap_pars_fragment, + shadowmap_pars_vertex: shadowmap_pars_vertex, + shadowmap_vertex: shadowmap_vertex, + shadowmask_pars_fragment: shadowmask_pars_fragment, + skinbase_vertex: skinbase_vertex, + skinning_pars_vertex: skinning_pars_vertex, + skinning_vertex: skinning_vertex, + skinnormal_vertex: skinnormal_vertex, + specularmap_fragment: specularmap_fragment, + specularmap_pars_fragment: specularmap_pars_fragment, + tonemapping_fragment: tonemapping_fragment, + tonemapping_pars_fragment: tonemapping_pars_fragment, + transmissionmap_fragment: transmissionmap_fragment, + transmissionmap_pars_fragment: transmissionmap_pars_fragment, + uv_pars_fragment: uv_pars_fragment, + uv_pars_vertex: uv_pars_vertex, + uv_vertex: uv_vertex, + uv2_pars_fragment: uv2_pars_fragment, + uv2_pars_vertex: uv2_pars_vertex, + uv2_vertex: uv2_vertex, + worldpos_vertex: worldpos_vertex, + + background_frag: background_frag, + background_vert: background_vert, + cube_frag: cube_frag, + cube_vert: cube_vert, + depth_frag: depth_frag, + depth_vert: depth_vert, + distanceRGBA_frag: distanceRGBA_frag, + distanceRGBA_vert: distanceRGBA_vert, + equirect_frag: equirect_frag, + equirect_vert: equirect_vert, + linedashed_frag: linedashed_frag, + linedashed_vert: linedashed_vert, + meshbasic_frag: meshbasic_frag, + meshbasic_vert: meshbasic_vert, + meshlambert_frag: meshlambert_frag, + meshlambert_vert: meshlambert_vert, + meshmatcap_frag: meshmatcap_frag, + meshmatcap_vert: meshmatcap_vert, + meshtoon_frag: meshtoon_frag, + meshtoon_vert: meshtoon_vert, + meshphong_frag: meshphong_frag, + meshphong_vert: meshphong_vert, + meshphysical_frag: meshphysical_frag, + meshphysical_vert: meshphysical_vert, + normal_frag: normal_frag, + normal_vert: normal_vert, + points_frag: points_frag, + points_vert: points_vert, + shadow_frag: shadow_frag, + shadow_vert: shadow_vert, + sprite_frag: sprite_frag, + sprite_vert: sprite_vert + }; + + /** + * Uniforms library for shared webgl shaders + */ + + const UniformsLib = { + + common: { + + diffuse: { value: new Color( 0xeeeeee ) }, + opacity: { value: 1.0 }, + + map: { value: null }, + uvTransform: { value: new Matrix3() }, + uv2Transform: { value: new Matrix3() }, + + alphaMap: { value: null }, + + }, + + specularmap: { + + specularMap: { value: null }, + + }, + + envmap: { + + envMap: { value: null }, + flipEnvMap: { value: - 1 }, + reflectivity: { value: 1.0 }, + refractionRatio: { value: 0.98 }, + maxMipLevel: { value: 0 } + + }, + + aomap: { + + aoMap: { value: null }, + aoMapIntensity: { value: 1 } + + }, + + lightmap: { + + lightMap: { value: null }, + lightMapIntensity: { value: 1 } + + }, + + emissivemap: { + + emissiveMap: { value: null } + + }, + + bumpmap: { + + bumpMap: { value: null }, + bumpScale: { value: 1 } + + }, + + normalmap: { + + normalMap: { value: null }, + normalScale: { value: new Vector2( 1, 1 ) } + + }, + + displacementmap: { + + displacementMap: { value: null }, + displacementScale: { value: 1 }, + displacementBias: { value: 0 } + + }, + + roughnessmap: { + + roughnessMap: { value: null } + + }, + + metalnessmap: { + + metalnessMap: { value: null } + + }, + + gradientmap: { + + gradientMap: { value: null } + + }, + + fog: { + + fogDensity: { value: 0.00025 }, + fogNear: { value: 1 }, + fogFar: { value: 2000 }, + fogColor: { value: new Color( 0xffffff ) } + + }, + + lights: { + + ambientLightColor: { value: [] }, + + lightProbe: { value: [] }, + + directionalLights: { value: [], properties: { + direction: {}, + color: {} + } }, + + directionalLightShadows: { value: [], properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } }, + + directionalShadowMap: { value: [] }, + directionalShadowMatrix: { value: [] }, + + spotLights: { value: [], properties: { + color: {}, + position: {}, + direction: {}, + distance: {}, + coneCos: {}, + penumbraCos: {}, + decay: {} + } }, + + spotLightShadows: { value: [], properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } }, + + spotShadowMap: { value: [] }, + spotShadowMatrix: { value: [] }, + + pointLights: { value: [], properties: { + color: {}, + position: {}, + decay: {}, + distance: {} + } }, + + pointLightShadows: { value: [], properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + shadowCameraNear: {}, + shadowCameraFar: {} + } }, + + pointShadowMap: { value: [] }, + pointShadowMatrix: { value: [] }, + + hemisphereLights: { value: [], properties: { + direction: {}, + skyColor: {}, + groundColor: {} + } }, + + // TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src + rectAreaLights: { value: [], properties: { + color: {}, + position: {}, + width: {}, + height: {} + } }, + + ltc_1: { value: null }, + ltc_2: { value: null } + + }, + + points: { + + diffuse: { value: new Color( 0xeeeeee ) }, + opacity: { value: 1.0 }, + size: { value: 1.0 }, + scale: { value: 1.0 }, + map: { value: null }, + alphaMap: { value: null }, + uvTransform: { value: new Matrix3() } + + }, + + sprite: { + + diffuse: { value: new Color( 0xeeeeee ) }, + opacity: { value: 1.0 }, + center: { value: new Vector2( 0.5, 0.5 ) }, + rotation: { value: 0.0 }, + map: { value: null }, + alphaMap: { value: null }, + uvTransform: { value: new Matrix3() } + + } + + }; + + const ShaderLib = { + + basic: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.fog + ] ), + + vertexShader: ShaderChunk.meshbasic_vert, + fragmentShader: ShaderChunk.meshbasic_frag + + }, + + lambert: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) } + } + ] ), + + vertexShader: ShaderChunk.meshlambert_vert, + fragmentShader: ShaderChunk.meshlambert_frag + + }, + + phong: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) }, + specular: { value: new Color( 0x111111 ) }, + shininess: { value: 30 } + } + ] ), + + vertexShader: ShaderChunk.meshphong_vert, + fragmentShader: ShaderChunk.meshphong_frag + + }, + + standard: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.roughnessmap, + UniformsLib.metalnessmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) }, + roughness: { value: 1.0 }, + metalness: { value: 0.0 }, + envMapIntensity: { value: 1 } // temporary + } + ] ), + + vertexShader: ShaderChunk.meshphysical_vert, + fragmentShader: ShaderChunk.meshphysical_frag + + }, + + toon: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.gradientmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) } + } + ] ), + + vertexShader: ShaderChunk.meshtoon_vert, + fragmentShader: ShaderChunk.meshtoon_frag + + }, + + matcap: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.fog, + { + matcap: { value: null } + } + ] ), + + vertexShader: ShaderChunk.meshmatcap_vert, + fragmentShader: ShaderChunk.meshmatcap_frag + + }, + + points: { + + uniforms: mergeUniforms( [ + UniformsLib.points, + UniformsLib.fog + ] ), + + vertexShader: ShaderChunk.points_vert, + fragmentShader: ShaderChunk.points_frag + + }, + + dashed: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.fog, + { + scale: { value: 1 }, + dashSize: { value: 1 }, + totalSize: { value: 2 } + } + ] ), + + vertexShader: ShaderChunk.linedashed_vert, + fragmentShader: ShaderChunk.linedashed_frag + + }, + + depth: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.displacementmap + ] ), + + vertexShader: ShaderChunk.depth_vert, + fragmentShader: ShaderChunk.depth_frag + + }, + + normal: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + { + opacity: { value: 1.0 } + } + ] ), + + vertexShader: ShaderChunk.normal_vert, + fragmentShader: ShaderChunk.normal_frag + + }, + + sprite: { + + uniforms: mergeUniforms( [ + UniformsLib.sprite, + UniformsLib.fog + ] ), + + vertexShader: ShaderChunk.sprite_vert, + fragmentShader: ShaderChunk.sprite_frag + + }, + + background: { + + uniforms: { + uvTransform: { value: new Matrix3() }, + t2D: { value: null }, + }, + + vertexShader: ShaderChunk.background_vert, + fragmentShader: ShaderChunk.background_frag + + }, + /* ------------------------------------------------------------------------- + // Cube map shader + ------------------------------------------------------------------------- */ + + cube: { + + uniforms: mergeUniforms( [ + UniformsLib.envmap, + { + opacity: { value: 1.0 } + } + ] ), + + vertexShader: ShaderChunk.cube_vert, + fragmentShader: ShaderChunk.cube_frag + + }, + + equirect: { + + uniforms: { + tEquirect: { value: null }, + }, + + vertexShader: ShaderChunk.equirect_vert, + fragmentShader: ShaderChunk.equirect_frag + + }, + + distanceRGBA: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.displacementmap, + { + referencePosition: { value: new Vector3() }, + nearDistance: { value: 1 }, + farDistance: { value: 1000 } + } + ] ), + + vertexShader: ShaderChunk.distanceRGBA_vert, + fragmentShader: ShaderChunk.distanceRGBA_frag + + }, + + shadow: { + + uniforms: mergeUniforms( [ + UniformsLib.lights, + UniformsLib.fog, + { + color: { value: new Color( 0x00000 ) }, + opacity: { value: 1.0 } + }, + ] ), + + vertexShader: ShaderChunk.shadow_vert, + fragmentShader: ShaderChunk.shadow_frag + + } + + }; + + ShaderLib.physical = { + + uniforms: mergeUniforms( [ + ShaderLib.standard.uniforms, + { + clearcoat: { value: 0 }, + clearcoatMap: { value: null }, + clearcoatRoughness: { value: 0 }, + clearcoatRoughnessMap: { value: null }, + clearcoatNormalScale: { value: new Vector2( 1, 1 ) }, + clearcoatNormalMap: { value: null }, + sheen: { value: new Color( 0x000000 ) }, + transmission: { value: 0 }, + transmissionMap: { value: null }, + } + ] ), + + vertexShader: ShaderChunk.meshphysical_vert, + fragmentShader: ShaderChunk.meshphysical_frag + + }; + + function WebGLBackground( renderer, cubemaps, state, objects, premultipliedAlpha ) { + + const clearColor = new Color( 0x000000 ); + let clearAlpha = 0; + + let planeMesh; + let boxMesh; + + let currentBackground = null; + let currentBackgroundVersion = 0; + let currentTonemapping = null; + + function render( renderList, scene, camera, forceClear ) { + + let background = scene.isScene === true ? scene.background : null; + + if ( background && background.isTexture ) { + + background = cubemaps.get( background ); + + } + + // Ignore background in AR + // TODO: Reconsider this. + + const xr = renderer.xr; + const session = xr.getSession && xr.getSession(); + + if ( session && session.environmentBlendMode === 'additive' ) { + + background = null; + + } + + if ( background === null ) { + + setClear( clearColor, clearAlpha ); + + } else if ( background && background.isColor ) { + + setClear( background, 1 ); + forceClear = true; + + } + + if ( renderer.autoClear || forceClear ) { + + renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil ); + + } + + if ( background && ( background.isCubeTexture || background.isWebGLCubeRenderTarget || background.mapping === CubeUVReflectionMapping ) ) { + + if ( boxMesh === undefined ) { + + boxMesh = new Mesh( + new BoxBufferGeometry( 1, 1, 1 ), + new ShaderMaterial( { + name: 'BackgroundCubeMaterial', + uniforms: cloneUniforms( ShaderLib.cube.uniforms ), + vertexShader: ShaderLib.cube.vertexShader, + fragmentShader: ShaderLib.cube.fragmentShader, + side: BackSide, + depthTest: false, + depthWrite: false, + fog: false + } ) + ); + + boxMesh.geometry.deleteAttribute( 'normal' ); + boxMesh.geometry.deleteAttribute( 'uv' ); + + boxMesh.onBeforeRender = function ( renderer, scene, camera ) { + + this.matrixWorld.copyPosition( camera.matrixWorld ); + + }; + + // enable code injection for non-built-in material + Object.defineProperty( boxMesh.material, 'envMap', { + + get: function () { + + return this.uniforms.envMap.value; + + } + + } ); + + objects.update( boxMesh ); + + } + + if ( background.isWebGLCubeRenderTarget ) { + + // TODO Deprecate + + background = background.texture; + + } + + boxMesh.material.uniforms.envMap.value = background; + boxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background._needsFlipEnvMap ) ? - 1 : 1; + + if ( currentBackground !== background || + currentBackgroundVersion !== background.version || + currentTonemapping !== renderer.toneMapping ) { + + boxMesh.material.needsUpdate = true; + + currentBackground = background; + currentBackgroundVersion = background.version; + currentTonemapping = renderer.toneMapping; + + } + + // push to the pre-sorted opaque render list + renderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null ); + + } else if ( background && background.isTexture ) { + + if ( planeMesh === undefined ) { + + planeMesh = new Mesh( + new PlaneBufferGeometry( 2, 2 ), + new ShaderMaterial( { + name: 'BackgroundMaterial', + uniforms: cloneUniforms( ShaderLib.background.uniforms ), + vertexShader: ShaderLib.background.vertexShader, + fragmentShader: ShaderLib.background.fragmentShader, + side: FrontSide, + depthTest: false, + depthWrite: false, + fog: false + } ) + ); + + planeMesh.geometry.deleteAttribute( 'normal' ); + + // enable code injection for non-built-in material + Object.defineProperty( planeMesh.material, 'map', { + + get: function () { + + return this.uniforms.t2D.value; + + } + + } ); + + objects.update( planeMesh ); + + } + + planeMesh.material.uniforms.t2D.value = background; + + if ( background.matrixAutoUpdate === true ) { + + background.updateMatrix(); + + } + + planeMesh.material.uniforms.uvTransform.value.copy( background.matrix ); + + if ( currentBackground !== background || + currentBackgroundVersion !== background.version || + currentTonemapping !== renderer.toneMapping ) { + + planeMesh.material.needsUpdate = true; + + currentBackground = background; + currentBackgroundVersion = background.version; + currentTonemapping = renderer.toneMapping; + + } + + + // push to the pre-sorted opaque render list + renderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null ); + + } + + } + + function setClear( color, alpha ) { + + state.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha ); + + } + + return { + + getClearColor: function () { + + return clearColor; + + }, + setClearColor: function ( color, alpha = 1 ) { + + clearColor.set( color ); + clearAlpha = alpha; + setClear( clearColor, clearAlpha ); + + }, + getClearAlpha: function () { + + return clearAlpha; + + }, + setClearAlpha: function ( alpha ) { + + clearAlpha = alpha; + setClear( clearColor, clearAlpha ); + + }, + render: render + + }; + + } + + function WebGLBindingStates( gl, extensions, attributes, capabilities ) { + + const maxVertexAttributes = gl.getParameter( 34921 ); + + const extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' ); + const vaoAvailable = capabilities.isWebGL2 || extension !== null; + + const bindingStates = {}; + + const defaultState = createBindingState( null ); + let currentState = defaultState; + + function setup( object, material, program, geometry, index ) { + + let updateBuffers = false; + + if ( vaoAvailable ) { + + const state = getBindingState( geometry, program, material ); + + if ( currentState !== state ) { + + currentState = state; + bindVertexArrayObject( currentState.object ); + + } + + updateBuffers = needsUpdate( geometry, index ); + + if ( updateBuffers ) saveCache( geometry, index ); + + } else { + + const wireframe = ( material.wireframe === true ); + + if ( currentState.geometry !== geometry.id || + currentState.program !== program.id || + currentState.wireframe !== wireframe ) { + + currentState.geometry = geometry.id; + currentState.program = program.id; + currentState.wireframe = wireframe; + + updateBuffers = true; + + } + + } + + if ( object.isInstancedMesh === true ) { + + updateBuffers = true; + + } + + if ( index !== null ) { + + attributes.update( index, 34963 ); + + } + + if ( updateBuffers ) { + + setupVertexAttributes( object, material, program, geometry ); + + if ( index !== null ) { + + gl.bindBuffer( 34963, attributes.get( index ).buffer ); + + } + + } + + } + + function createVertexArrayObject() { + + if ( capabilities.isWebGL2 ) return gl.createVertexArray(); + + return extension.createVertexArrayOES(); + + } + + function bindVertexArrayObject( vao ) { + + if ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao ); + + return extension.bindVertexArrayOES( vao ); + + } + + function deleteVertexArrayObject( vao ) { + + if ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao ); + + return extension.deleteVertexArrayOES( vao ); + + } + + function getBindingState( geometry, program, material ) { + + const wireframe = ( material.wireframe === true ); + + let programMap = bindingStates[ geometry.id ]; + + if ( programMap === undefined ) { + + programMap = {}; + bindingStates[ geometry.id ] = programMap; + + } + + let stateMap = programMap[ program.id ]; + + if ( stateMap === undefined ) { + + stateMap = {}; + programMap[ program.id ] = stateMap; + + } + + let state = stateMap[ wireframe ]; + + if ( state === undefined ) { + + state = createBindingState( createVertexArrayObject() ); + stateMap[ wireframe ] = state; + + } + + return state; + + } + + function createBindingState( vao ) { + + const newAttributes = []; + const enabledAttributes = []; + const attributeDivisors = []; + + for ( let i = 0; i < maxVertexAttributes; i ++ ) { + + newAttributes[ i ] = 0; + enabledAttributes[ i ] = 0; + attributeDivisors[ i ] = 0; + + } + + return { + + // for backward compatibility on non-VAO support browser + geometry: null, + program: null, + wireframe: false, + + newAttributes: newAttributes, + enabledAttributes: enabledAttributes, + attributeDivisors: attributeDivisors, + object: vao, + attributes: {}, + index: null + + }; + + } + + function needsUpdate( geometry, index ) { + + const cachedAttributes = currentState.attributes; + const geometryAttributes = geometry.attributes; + + let attributesNum = 0; + + for ( const key in geometryAttributes ) { + + const cachedAttribute = cachedAttributes[ key ]; + const geometryAttribute = geometryAttributes[ key ]; + + if ( cachedAttribute === undefined ) return true; + + if ( cachedAttribute.attribute !== geometryAttribute ) return true; + + if ( cachedAttribute.data !== geometryAttribute.data ) return true; + + attributesNum ++; + + } + + if ( currentState.attributesNum !== attributesNum ) return true; + + if ( currentState.index !== index ) return true; + + return false; + + } + + function saveCache( geometry, index ) { + + const cache = {}; + const attributes = geometry.attributes; + let attributesNum = 0; + + for ( const key in attributes ) { + + const attribute = attributes[ key ]; + + const data = {}; + data.attribute = attribute; + + if ( attribute.data ) { + + data.data = attribute.data; + + } + + cache[ key ] = data; + + attributesNum ++; + + } + + currentState.attributes = cache; + currentState.attributesNum = attributesNum; + + currentState.index = index; + + } + + function initAttributes() { + + const newAttributes = currentState.newAttributes; + + for ( let i = 0, il = newAttributes.length; i < il; i ++ ) { + + newAttributes[ i ] = 0; + + } + + } + + function enableAttribute( attribute ) { + + enableAttributeAndDivisor( attribute, 0 ); + + } + + function enableAttributeAndDivisor( attribute, meshPerAttribute ) { + + const newAttributes = currentState.newAttributes; + const enabledAttributes = currentState.enabledAttributes; + const attributeDivisors = currentState.attributeDivisors; + + newAttributes[ attribute ] = 1; + + if ( enabledAttributes[ attribute ] === 0 ) { + + gl.enableVertexAttribArray( attribute ); + enabledAttributes[ attribute ] = 1; + + } + + if ( attributeDivisors[ attribute ] !== meshPerAttribute ) { + + const extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' ); + + extension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute ); + attributeDivisors[ attribute ] = meshPerAttribute; + + } + + } + + function disableUnusedAttributes() { + + const newAttributes = currentState.newAttributes; + const enabledAttributes = currentState.enabledAttributes; + + for ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) { + + if ( enabledAttributes[ i ] !== newAttributes[ i ] ) { + + gl.disableVertexAttribArray( i ); + enabledAttributes[ i ] = 0; + + } + + } + + } + + function vertexAttribPointer( index, size, type, normalized, stride, offset ) { + + if ( capabilities.isWebGL2 === true && ( type === 5124 || type === 5125 ) ) { + + gl.vertexAttribIPointer( index, size, type, stride, offset ); + + } else { + + gl.vertexAttribPointer( index, size, type, normalized, stride, offset ); + + } + + } + + function setupVertexAttributes( object, material, program, geometry ) { + + if ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) { + + if ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return; + + } + + initAttributes(); + + const geometryAttributes = geometry.attributes; + + const programAttributes = program.getAttributes(); + + const materialDefaultAttributeValues = material.defaultAttributeValues; + + for ( const name in programAttributes ) { + + const programAttribute = programAttributes[ name ]; + + if ( programAttribute >= 0 ) { + + const geometryAttribute = geometryAttributes[ name ]; + + if ( geometryAttribute !== undefined ) { + + const normalized = geometryAttribute.normalized; + const size = geometryAttribute.itemSize; + + const attribute = attributes.get( geometryAttribute ); + + // TODO Attribute may not be available on context restore + + if ( attribute === undefined ) continue; + + const buffer = attribute.buffer; + const type = attribute.type; + const bytesPerElement = attribute.bytesPerElement; + + if ( geometryAttribute.isInterleavedBufferAttribute ) { + + const data = geometryAttribute.data; + const stride = data.stride; + const offset = geometryAttribute.offset; + + if ( data && data.isInstancedInterleavedBuffer ) { + + enableAttributeAndDivisor( programAttribute, data.meshPerAttribute ); + + if ( geometry._maxInstanceCount === undefined ) { + + geometry._maxInstanceCount = data.meshPerAttribute * data.count; + + } + + } else { + + enableAttribute( programAttribute ); + + } + + gl.bindBuffer( 34962, buffer ); + vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement ); + + } else { + + if ( geometryAttribute.isInstancedBufferAttribute ) { + + enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute ); + + if ( geometry._maxInstanceCount === undefined ) { + + geometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count; + + } + + } else { + + enableAttribute( programAttribute ); + + } + + gl.bindBuffer( 34962, buffer ); + vertexAttribPointer( programAttribute, size, type, normalized, 0, 0 ); + + } + + } else if ( name === 'instanceMatrix' ) { + + const attribute = attributes.get( object.instanceMatrix ); + + // TODO Attribute may not be available on context restore + + if ( attribute === undefined ) continue; + + const buffer = attribute.buffer; + const type = attribute.type; + + enableAttributeAndDivisor( programAttribute + 0, 1 ); + enableAttributeAndDivisor( programAttribute + 1, 1 ); + enableAttributeAndDivisor( programAttribute + 2, 1 ); + enableAttributeAndDivisor( programAttribute + 3, 1 ); + + gl.bindBuffer( 34962, buffer ); + + gl.vertexAttribPointer( programAttribute + 0, 4, type, false, 64, 0 ); + gl.vertexAttribPointer( programAttribute + 1, 4, type, false, 64, 16 ); + gl.vertexAttribPointer( programAttribute + 2, 4, type, false, 64, 32 ); + gl.vertexAttribPointer( programAttribute + 3, 4, type, false, 64, 48 ); + + } else if ( name === 'instanceColor' ) { + + const attribute = attributes.get( object.instanceColor ); + + // TODO Attribute may not be available on context restore + + if ( attribute === undefined ) continue; + + const buffer = attribute.buffer; + const type = attribute.type; + + enableAttributeAndDivisor( programAttribute, 1 ); + + gl.bindBuffer( 34962, buffer ); + + gl.vertexAttribPointer( programAttribute, 3, type, false, 12, 0 ); + + } else if ( materialDefaultAttributeValues !== undefined ) { + + const value = materialDefaultAttributeValues[ name ]; + + if ( value !== undefined ) { + + switch ( value.length ) { + + case 2: + gl.vertexAttrib2fv( programAttribute, value ); + break; + + case 3: + gl.vertexAttrib3fv( programAttribute, value ); + break; + + case 4: + gl.vertexAttrib4fv( programAttribute, value ); + break; + + default: + gl.vertexAttrib1fv( programAttribute, value ); + + } + + } + + } + + } + + } + + disableUnusedAttributes(); + + } + + function dispose() { + + reset(); + + for ( const geometryId in bindingStates ) { + + const programMap = bindingStates[ geometryId ]; + + for ( const programId in programMap ) { + + const stateMap = programMap[ programId ]; + + for ( const wireframe in stateMap ) { + + deleteVertexArrayObject( stateMap[ wireframe ].object ); + + delete stateMap[ wireframe ]; + + } + + delete programMap[ programId ]; + + } + + delete bindingStates[ geometryId ]; + + } + + } + + function releaseStatesOfGeometry( geometry ) { + + if ( bindingStates[ geometry.id ] === undefined ) return; + + const programMap = bindingStates[ geometry.id ]; + + for ( const programId in programMap ) { + + const stateMap = programMap[ programId ]; + + for ( const wireframe in stateMap ) { + + deleteVertexArrayObject( stateMap[ wireframe ].object ); + + delete stateMap[ wireframe ]; + + } + + delete programMap[ programId ]; + + } + + delete bindingStates[ geometry.id ]; + + } + + function releaseStatesOfProgram( program ) { + + for ( const geometryId in bindingStates ) { + + const programMap = bindingStates[ geometryId ]; + + if ( programMap[ program.id ] === undefined ) continue; + + const stateMap = programMap[ program.id ]; + + for ( const wireframe in stateMap ) { + + deleteVertexArrayObject( stateMap[ wireframe ].object ); + + delete stateMap[ wireframe ]; + + } + + delete programMap[ program.id ]; + + } + + } + + function reset() { + + resetDefaultState(); + + if ( currentState === defaultState ) return; + + currentState = defaultState; + bindVertexArrayObject( currentState.object ); + + } + + // for backward-compatilibity + + function resetDefaultState() { + + defaultState.geometry = null; + defaultState.program = null; + defaultState.wireframe = false; + + } + + return { + + setup: setup, + reset: reset, + resetDefaultState: resetDefaultState, + dispose: dispose, + releaseStatesOfGeometry: releaseStatesOfGeometry, + releaseStatesOfProgram: releaseStatesOfProgram, + + initAttributes: initAttributes, + enableAttribute: enableAttribute, + disableUnusedAttributes: disableUnusedAttributes + + }; + + } + + function WebGLBufferRenderer( gl, extensions, info, capabilities ) { + + const isWebGL2 = capabilities.isWebGL2; + + let mode; + + function setMode( value ) { + + mode = value; + + } + + function render( start, count ) { + + gl.drawArrays( mode, start, count ); + + info.update( count, mode, 1 ); + + } + + function renderInstances( start, count, primcount ) { + + if ( primcount === 0 ) return; + + let extension, methodName; + + if ( isWebGL2 ) { + + extension = gl; + methodName = 'drawArraysInstanced'; + + } else { + + extension = extensions.get( 'ANGLE_instanced_arrays' ); + methodName = 'drawArraysInstancedANGLE'; + + if ( extension === null ) { + + console.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); + return; + + } + + } + + extension[ methodName ]( mode, start, count, primcount ); + + info.update( count, mode, primcount ); + + } + + // + + this.setMode = setMode; + this.render = render; + this.renderInstances = renderInstances; + + } + + function WebGLCapabilities( gl, extensions, parameters ) { + + let maxAnisotropy; + + function getMaxAnisotropy() { + + if ( maxAnisotropy !== undefined ) return maxAnisotropy; + + const extension = extensions.get( 'EXT_texture_filter_anisotropic' ); + + if ( extension !== null ) { + + maxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT ); + + } else { + + maxAnisotropy = 0; + + } + + return maxAnisotropy; + + } + + function getMaxPrecision( precision ) { + + if ( precision === 'highp' ) { + + if ( gl.getShaderPrecisionFormat( 35633, 36338 ).precision > 0 && + gl.getShaderPrecisionFormat( 35632, 36338 ).precision > 0 ) { + + return 'highp'; + + } + + precision = 'mediump'; + + } + + if ( precision === 'mediump' ) { + + if ( gl.getShaderPrecisionFormat( 35633, 36337 ).precision > 0 && + gl.getShaderPrecisionFormat( 35632, 36337 ).precision > 0 ) { + + return 'mediump'; + + } + + } + + return 'lowp'; + + } + + /* eslint-disable no-undef */ + const isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ) || + ( typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext ); + /* eslint-enable no-undef */ + + let precision = parameters.precision !== undefined ? parameters.precision : 'highp'; + const maxPrecision = getMaxPrecision( precision ); + + if ( maxPrecision !== precision ) { + + console.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' ); + precision = maxPrecision; + + } + + const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true; + + const maxTextures = gl.getParameter( 34930 ); + const maxVertexTextures = gl.getParameter( 35660 ); + const maxTextureSize = gl.getParameter( 3379 ); + const maxCubemapSize = gl.getParameter( 34076 ); + + const maxAttributes = gl.getParameter( 34921 ); + const maxVertexUniforms = gl.getParameter( 36347 ); + const maxVaryings = gl.getParameter( 36348 ); + const maxFragmentUniforms = gl.getParameter( 36349 ); + + const vertexTextures = maxVertexTextures > 0; + const floatFragmentTextures = isWebGL2 || !! extensions.get( 'OES_texture_float' ); + const floatVertexTextures = vertexTextures && floatFragmentTextures; + + const maxSamples = isWebGL2 ? gl.getParameter( 36183 ) : 0; + + return { + + isWebGL2: isWebGL2, + + getMaxAnisotropy: getMaxAnisotropy, + getMaxPrecision: getMaxPrecision, + + precision: precision, + logarithmicDepthBuffer: logarithmicDepthBuffer, + + maxTextures: maxTextures, + maxVertexTextures: maxVertexTextures, + maxTextureSize: maxTextureSize, + maxCubemapSize: maxCubemapSize, + + maxAttributes: maxAttributes, + maxVertexUniforms: maxVertexUniforms, + maxVaryings: maxVaryings, + maxFragmentUniforms: maxFragmentUniforms, + + vertexTextures: vertexTextures, + floatFragmentTextures: floatFragmentTextures, + floatVertexTextures: floatVertexTextures, + + maxSamples: maxSamples + + }; + + } + + function WebGLClipping( properties ) { + + const scope = this; + + let globalState = null, + numGlobalPlanes = 0, + localClippingEnabled = false, + renderingShadows = false; + + const plane = new Plane(), + viewNormalMatrix = new Matrix3(), + + uniform = { value: null, needsUpdate: false }; + + this.uniform = uniform; + this.numPlanes = 0; + this.numIntersection = 0; + + this.init = function ( planes, enableLocalClipping, camera ) { + + const enabled = + planes.length !== 0 || + enableLocalClipping || + // enable state of previous frame - the clipping code has to + // run another frame in order to reset the state: + numGlobalPlanes !== 0 || + localClippingEnabled; + + localClippingEnabled = enableLocalClipping; + + globalState = projectPlanes( planes, camera, 0 ); + numGlobalPlanes = planes.length; + + return enabled; + + }; + + this.beginShadows = function () { + + renderingShadows = true; + projectPlanes( null ); + + }; + + this.endShadows = function () { + + renderingShadows = false; + resetGlobalState(); + + }; + + this.setState = function ( material, camera, useCache ) { + + const planes = material.clippingPlanes, + clipIntersection = material.clipIntersection, + clipShadows = material.clipShadows; + + const materialProperties = properties.get( material ); + + if ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) { + + // there's no local clipping + + if ( renderingShadows ) { + + // there's no global clipping + + projectPlanes( null ); + + } else { + + resetGlobalState(); + + } + + } else { + + const nGlobal = renderingShadows ? 0 : numGlobalPlanes, + lGlobal = nGlobal * 4; + + let dstArray = materialProperties.clippingState || null; + + uniform.value = dstArray; // ensure unique state + + dstArray = projectPlanes( planes, camera, lGlobal, useCache ); + + for ( let i = 0; i !== lGlobal; ++ i ) { + + dstArray[ i ] = globalState[ i ]; + + } + + materialProperties.clippingState = dstArray; + this.numIntersection = clipIntersection ? this.numPlanes : 0; + this.numPlanes += nGlobal; + + } + + + }; + + function resetGlobalState() { + + if ( uniform.value !== globalState ) { + + uniform.value = globalState; + uniform.needsUpdate = numGlobalPlanes > 0; + + } + + scope.numPlanes = numGlobalPlanes; + scope.numIntersection = 0; + + } + + function projectPlanes( planes, camera, dstOffset, skipTransform ) { + + const nPlanes = planes !== null ? planes.length : 0; + let dstArray = null; + + if ( nPlanes !== 0 ) { + + dstArray = uniform.value; + + if ( skipTransform !== true || dstArray === null ) { + + const flatSize = dstOffset + nPlanes * 4, + viewMatrix = camera.matrixWorldInverse; + + viewNormalMatrix.getNormalMatrix( viewMatrix ); + + if ( dstArray === null || dstArray.length < flatSize ) { + + dstArray = new Float32Array( flatSize ); + + } + + for ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) { + + plane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix ); + + plane.normal.toArray( dstArray, i4 ); + dstArray[ i4 + 3 ] = plane.constant; + + } + + } + + uniform.value = dstArray; + uniform.needsUpdate = true; + + } + + scope.numPlanes = nPlanes; + scope.numIntersection = 0; + + return dstArray; + + } + + } + + function WebGLCubeMaps( renderer ) { + + let cubemaps = new WeakMap(); + + function mapTextureMapping( texture, mapping ) { + + if ( mapping === EquirectangularReflectionMapping ) { + + texture.mapping = CubeReflectionMapping; + + } else if ( mapping === EquirectangularRefractionMapping ) { + + texture.mapping = CubeRefractionMapping; + + } + + return texture; + + } + + function get( texture ) { + + if ( texture && texture.isTexture ) { + + const mapping = texture.mapping; + + if ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) { + + if ( cubemaps.has( texture ) ) { + + const cubemap = cubemaps.get( texture ).texture; + return mapTextureMapping( cubemap, texture.mapping ); + + } else { + + const image = texture.image; + + if ( image && image.height > 0 ) { + + const currentRenderList = renderer.getRenderList(); + const currentRenderTarget = renderer.getRenderTarget(); + const currentRenderState = renderer.getRenderState(); + + const renderTarget = new WebGLCubeRenderTarget( image.height / 2 ); + renderTarget.fromEquirectangularTexture( renderer, texture ); + cubemaps.set( texture, renderTarget ); + + renderer.setRenderTarget( currentRenderTarget ); + renderer.setRenderList( currentRenderList ); + renderer.setRenderState( currentRenderState ); + + texture.addEventListener( 'dispose', onTextureDispose ); + + return mapTextureMapping( renderTarget.texture, texture.mapping ); + + } else { + + // image not yet ready. try the conversion next frame + + return null; + + } + + } + + } + + } + + return texture; + + } + + function onTextureDispose( event ) { + + const texture = event.target; + + texture.removeEventListener( 'dispose', onTextureDispose ); + + const cubemap = cubemaps.get( texture ); + + if ( cubemap !== undefined ) { + + cubemaps.delete( texture ); + cubemap.dispose(); + + } + + } + + function dispose() { + + cubemaps = new WeakMap(); + + } + + return { + get: get, + dispose: dispose + }; + + } + + function WebGLExtensions( gl ) { + + const extensions = {}; + + return { + + has: function ( name ) { + + if ( extensions[ name ] !== undefined ) { + + return extensions[ name ] !== null; + + } + + let extension; + + switch ( name ) { + + case 'WEBGL_depth_texture': + extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' ); + break; + + case 'EXT_texture_filter_anisotropic': + extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' ); + break; + + case 'WEBGL_compressed_texture_s3tc': + extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' ); + break; + + case 'WEBGL_compressed_texture_pvrtc': + extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' ); + break; + + default: + extension = gl.getExtension( name ); + + } + + extensions[ name ] = extension; + + return extension !== null; + + }, + + get: function ( name ) { + + if ( ! this.has( name ) ) { + + console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' ); + + } + + return extensions[ name ]; + + } + + }; + + } + + function WebGLGeometries( gl, attributes, info, bindingStates ) { + + const geometries = new WeakMap(); + const wireframeAttributes = new WeakMap(); + + function onGeometryDispose( event ) { + + const geometry = event.target; + const buffergeometry = geometries.get( geometry ); + + if ( buffergeometry.index !== null ) { + + attributes.remove( buffergeometry.index ); + + } + + for ( const name in buffergeometry.attributes ) { + + attributes.remove( buffergeometry.attributes[ name ] ); + + } + + geometry.removeEventListener( 'dispose', onGeometryDispose ); + + geometries.delete( geometry ); + + const attribute = wireframeAttributes.get( buffergeometry ); + + if ( attribute ) { + + attributes.remove( attribute ); + wireframeAttributes.delete( buffergeometry ); + + } + + bindingStates.releaseStatesOfGeometry( buffergeometry ); + + if ( geometry.isInstancedBufferGeometry === true ) { + + delete geometry._maxInstanceCount; + + } + + // + + info.memory.geometries --; + + } + + function get( object, geometry ) { + + let buffergeometry = geometries.get( geometry ); + + if ( buffergeometry ) return buffergeometry; + + geometry.addEventListener( 'dispose', onGeometryDispose ); + + if ( geometry.isBufferGeometry ) { + + buffergeometry = geometry; + + } else if ( geometry.isGeometry ) { + + if ( geometry._bufferGeometry === undefined ) { + + geometry._bufferGeometry = new BufferGeometry().setFromObject( object ); + + } + + buffergeometry = geometry._bufferGeometry; + + } + + geometries.set( geometry, buffergeometry ); + + info.memory.geometries ++; + + return buffergeometry; + + } + + function update( geometry ) { + + const geometryAttributes = geometry.attributes; + + // Updating index buffer in VAO now. See WebGLBindingStates. + + for ( const name in geometryAttributes ) { + + attributes.update( geometryAttributes[ name ], 34962 ); + + } + + // morph targets + + const morphAttributes = geometry.morphAttributes; + + for ( const name in morphAttributes ) { + + const array = morphAttributes[ name ]; + + for ( let i = 0, l = array.length; i < l; i ++ ) { + + attributes.update( array[ i ], 34962 ); + + } + + } + + } + + function updateWireframeAttribute( geometry ) { + + const indices = []; + + const geometryIndex = geometry.index; + const geometryPosition = geometry.attributes.position; + let version = 0; + + if ( geometryIndex !== null ) { + + const array = geometryIndex.array; + version = geometryIndex.version; + + for ( let i = 0, l = array.length; i < l; i += 3 ) { + + const a = array[ i + 0 ]; + const b = array[ i + 1 ]; + const c = array[ i + 2 ]; + + indices.push( a, b, b, c, c, a ); + + } + + } else { + + const array = geometryPosition.array; + version = geometryPosition.version; + + for ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) { + + const a = i + 0; + const b = i + 1; + const c = i + 2; + + indices.push( a, b, b, c, c, a ); + + } + + } + + const attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 ); + attribute.version = version; + + // Updating index buffer in VAO now. See WebGLBindingStates + + // + + const previousAttribute = wireframeAttributes.get( geometry ); + + if ( previousAttribute ) attributes.remove( previousAttribute ); + + // + + wireframeAttributes.set( geometry, attribute ); + + } + + function getWireframeAttribute( geometry ) { + + const currentAttribute = wireframeAttributes.get( geometry ); + + if ( currentAttribute ) { + + const geometryIndex = geometry.index; + + if ( geometryIndex !== null ) { + + // if the attribute is obsolete, create a new one + + if ( currentAttribute.version < geometryIndex.version ) { + + updateWireframeAttribute( geometry ); + + } + + } + + } else { + + updateWireframeAttribute( geometry ); + + } + + return wireframeAttributes.get( geometry ); + + } + + return { + + get: get, + update: update, + + getWireframeAttribute: getWireframeAttribute + + }; + + } + + function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) { + + const isWebGL2 = capabilities.isWebGL2; + + let mode; + + function setMode( value ) { + + mode = value; + + } + + let type, bytesPerElement; + + function setIndex( value ) { + + type = value.type; + bytesPerElement = value.bytesPerElement; + + } + + function render( start, count ) { + + gl.drawElements( mode, count, type, start * bytesPerElement ); + + info.update( count, mode, 1 ); + + } + + function renderInstances( start, count, primcount ) { + + if ( primcount === 0 ) return; + + let extension, methodName; + + if ( isWebGL2 ) { + + extension = gl; + methodName = 'drawElementsInstanced'; + + } else { + + extension = extensions.get( 'ANGLE_instanced_arrays' ); + methodName = 'drawElementsInstancedANGLE'; + + if ( extension === null ) { + + console.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); + return; + + } + + } + + extension[ methodName ]( mode, count, type, start * bytesPerElement, primcount ); + + info.update( count, mode, primcount ); + + } + + // + + this.setMode = setMode; + this.setIndex = setIndex; + this.render = render; + this.renderInstances = renderInstances; + + } + + function WebGLInfo( gl ) { + + const memory = { + geometries: 0, + textures: 0 + }; + + const render = { + frame: 0, + calls: 0, + triangles: 0, + points: 0, + lines: 0 + }; + + function update( count, mode, instanceCount ) { + + render.calls ++; + + switch ( mode ) { + + case 4: + render.triangles += instanceCount * ( count / 3 ); + break; + + case 1: + render.lines += instanceCount * ( count / 2 ); + break; + + case 3: + render.lines += instanceCount * ( count - 1 ); + break; + + case 2: + render.lines += instanceCount * count; + break; + + case 0: + render.points += instanceCount * count; + break; + + default: + console.error( 'THREE.WebGLInfo: Unknown draw mode:', mode ); + break; + + } + + } + + function reset() { + + render.frame ++; + render.calls = 0; + render.triangles = 0; + render.points = 0; + render.lines = 0; + + } + + return { + memory: memory, + render: render, + programs: null, + autoReset: true, + reset: reset, + update: update + }; + + } + + function numericalSort( a, b ) { + + return a[ 0 ] - b[ 0 ]; + + } + + function absNumericalSort( a, b ) { + + return Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] ); + + } + + function WebGLMorphtargets( gl ) { + + const influencesList = {}; + const morphInfluences = new Float32Array( 8 ); + + const workInfluences = []; + + for ( let i = 0; i < 8; i ++ ) { + + workInfluences[ i ] = [ i, 0 ]; + + } + + function update( object, geometry, material, program ) { + + const objectInfluences = object.morphTargetInfluences; + + // When object doesn't have morph target influences defined, we treat it as a 0-length array + // This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences + + const length = objectInfluences === undefined ? 0 : objectInfluences.length; + + let influences = influencesList[ geometry.id ]; + + if ( influences === undefined ) { + + // initialise list + + influences = []; + + for ( let i = 0; i < length; i ++ ) { + + influences[ i ] = [ i, 0 ]; + + } + + influencesList[ geometry.id ] = influences; + + } + + // Collect influences + + for ( let i = 0; i < length; i ++ ) { + + const influence = influences[ i ]; + + influence[ 0 ] = i; + influence[ 1 ] = objectInfluences[ i ]; + + } + + influences.sort( absNumericalSort ); + + for ( let i = 0; i < 8; i ++ ) { + + if ( i < length && influences[ i ][ 1 ] ) { + + workInfluences[ i ][ 0 ] = influences[ i ][ 0 ]; + workInfluences[ i ][ 1 ] = influences[ i ][ 1 ]; + + } else { + + workInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER; + workInfluences[ i ][ 1 ] = 0; + + } + + } + + workInfluences.sort( numericalSort ); + + const morphTargets = material.morphTargets && geometry.morphAttributes.position; + const morphNormals = material.morphNormals && geometry.morphAttributes.normal; + + let morphInfluencesSum = 0; + + for ( let i = 0; i < 8; i ++ ) { + + const influence = workInfluences[ i ]; + const index = influence[ 0 ]; + const value = influence[ 1 ]; + + if ( index !== Number.MAX_SAFE_INTEGER && value ) { + + if ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) { + + geometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] ); + + } + + if ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) { + + geometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] ); + + } + + morphInfluences[ i ] = value; + morphInfluencesSum += value; + + } else { + + if ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) { + + geometry.deleteAttribute( 'morphTarget' + i ); + + } + + if ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) { + + geometry.deleteAttribute( 'morphNormal' + i ); + + } + + morphInfluences[ i ] = 0; + + } + + } + + // GLSL shader uses formula baseinfluence * base + sum(target * influence) + // This allows us to switch between absolute morphs and relative morphs without changing shader code + // When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence) + const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum; + + program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence ); + program.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences ); + + } + + return { + + update: update + + }; + + } + + function WebGLObjects( gl, geometries, attributes, info ) { + + let updateMap = new WeakMap(); + + function update( object ) { + + const frame = info.render.frame; + + const geometry = object.geometry; + const buffergeometry = geometries.get( object, geometry ); + + // Update once per frame + + if ( updateMap.get( buffergeometry ) !== frame ) { + + if ( geometry.isGeometry ) { + + buffergeometry.updateFromObject( object ); + + } + + geometries.update( buffergeometry ); + + updateMap.set( buffergeometry, frame ); + + } + + if ( object.isInstancedMesh ) { + + attributes.update( object.instanceMatrix, 34962 ); + + if ( object.instanceColor !== null ) { + + attributes.update( object.instanceColor, 34962 ); + + } + + } + + return buffergeometry; + + } + + function dispose() { + + updateMap = new WeakMap(); + + } + + return { + + update: update, + dispose: dispose + + }; + + } + + function DataTexture2DArray( data = null, width = 1, height = 1, depth = 1 ) { + + Texture.call( this, null ); + + this.image = { data, width, height, depth }; + + this.magFilter = NearestFilter; + this.minFilter = NearestFilter; + + this.wrapR = ClampToEdgeWrapping; + + this.generateMipmaps = false; + this.flipY = false; + + this.needsUpdate = true; + + } + + DataTexture2DArray.prototype = Object.create( Texture.prototype ); + DataTexture2DArray.prototype.constructor = DataTexture2DArray; + DataTexture2DArray.prototype.isDataTexture2DArray = true; + + function DataTexture3D( 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 + + Texture.call( this, null ); + + this.image = { data, width, height, depth }; + + this.magFilter = NearestFilter; + this.minFilter = NearestFilter; + + this.wrapR = ClampToEdgeWrapping; + + this.generateMipmaps = false; + this.flipY = false; + + this.needsUpdate = true; + + + } + + DataTexture3D.prototype = Object.create( Texture.prototype ); + DataTexture3D.prototype.constructor = DataTexture3D; + DataTexture3D.prototype.isDataTexture3D = true; + + /** + * Uniforms of a program. + * Those form a tree structure with a special top-level container for the root, + * which you get by calling 'new WebGLUniforms( gl, program )'. + * + * + * Properties of inner nodes including the top-level container: + * + * .seq - array of nested uniforms + * .map - nested uniforms by name + * + * + * Methods of all nodes except the top-level container: + * + * .setValue( gl, value, [textures] ) + * + * uploads a uniform value(s) + * the 'textures' parameter is needed for sampler uniforms + * + * + * Static methods of the top-level container (textures factorizations): + * + * .upload( gl, seq, values, textures ) + * + * sets uniforms in 'seq' to 'values[id].value' + * + * .seqWithValue( seq, values ) : filteredSeq + * + * filters 'seq' entries with corresponding entry in values + * + * + * Methods of the top-level container (textures factorizations): + * + * .setValue( gl, name, value, textures ) + * + * sets uniform with name 'name' to 'value' + * + * .setOptional( gl, obj, prop ) + * + * like .set for an optional property of the object + * + */ + + const emptyTexture = new Texture(); + const emptyTexture2dArray = new DataTexture2DArray(); + const emptyTexture3d = new DataTexture3D(); + const emptyCubeTexture = new CubeTexture(); + + // --- Utilities --- + + // Array Caches (provide typed arrays for temporary by size) + + const arrayCacheF32 = []; + const arrayCacheI32 = []; + + // Float32Array caches used for uploading Matrix uniforms + + const mat4array = new Float32Array( 16 ); + const mat3array = new Float32Array( 9 ); + const mat2array = new Float32Array( 4 ); + + // Flattening for arrays of vectors and matrices + + function flatten( array, nBlocks, blockSize ) { + + const firstElem = array[ 0 ]; + + if ( firstElem <= 0 || firstElem > 0 ) return array; + // unoptimized: ! isNaN( firstElem ) + // see http://jacksondunstan.com/articles/983 + + const n = nBlocks * blockSize; + let r = arrayCacheF32[ n ]; + + if ( r === undefined ) { + + r = new Float32Array( n ); + arrayCacheF32[ n ] = r; + + } + + if ( nBlocks !== 0 ) { + + firstElem.toArray( r, 0 ); + + for ( let i = 1, offset = 0; i !== nBlocks; ++ i ) { + + offset += blockSize; + array[ i ].toArray( r, offset ); + + } + + } + + return r; + + } + + function arraysEqual( a, b ) { + + if ( a.length !== b.length ) return false; + + for ( let i = 0, l = a.length; i < l; i ++ ) { + + if ( a[ i ] !== b[ i ] ) return false; + + } + + return true; + + } + + function copyArray( a, b ) { + + for ( let i = 0, l = b.length; i < l; i ++ ) { + + a[ i ] = b[ i ]; + + } + + } + + // Texture unit allocation + + function allocTexUnits( textures, n ) { + + let r = arrayCacheI32[ n ]; + + if ( r === undefined ) { + + r = new Int32Array( n ); + arrayCacheI32[ n ] = r; + + } + + for ( let i = 0; i !== n; ++ i ) { + + r[ i ] = textures.allocateTextureUnit(); + + } + + return r; + + } + + // --- Setters --- + + // Note: Defining these methods externally, because they come in a bunch + // and this way their names minify. + + // Single scalar + + function setValueV1f( gl, v ) { + + const cache = this.cache; + + if ( cache[ 0 ] === v ) return; + + gl.uniform1f( this.addr, v ); + + cache[ 0 ] = v; + + } + + // Single float vector (from flat array or THREE.VectorN) + + function setValueV2f( gl, v ) { + + const cache = this.cache; + + if ( v.x !== undefined ) { + + if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) { + + gl.uniform2f( this.addr, v.x, v.y ); + + cache[ 0 ] = v.x; + cache[ 1 ] = v.y; + + } + + } else { + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform2fv( this.addr, v ); + + copyArray( cache, v ); + + } + + } + + function setValueV3f( gl, v ) { + + const cache = this.cache; + + if ( v.x !== undefined ) { + + if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) { + + gl.uniform3f( this.addr, v.x, v.y, v.z ); + + cache[ 0 ] = v.x; + cache[ 1 ] = v.y; + cache[ 2 ] = v.z; + + } + + } else if ( v.r !== undefined ) { + + if ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) { + + gl.uniform3f( this.addr, v.r, v.g, v.b ); + + cache[ 0 ] = v.r; + cache[ 1 ] = v.g; + cache[ 2 ] = v.b; + + } + + } else { + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform3fv( this.addr, v ); + + copyArray( cache, v ); + + } + + } + + function setValueV4f( gl, v ) { + + const cache = this.cache; + + if ( v.x !== undefined ) { + + if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) { + + gl.uniform4f( this.addr, v.x, v.y, v.z, v.w ); + + cache[ 0 ] = v.x; + cache[ 1 ] = v.y; + cache[ 2 ] = v.z; + cache[ 3 ] = v.w; + + } + + } else { + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform4fv( this.addr, v ); + + copyArray( cache, v ); + + } + + } + + // Single matrix (from flat array or MatrixN) + + function setValueM2( gl, v ) { + + const cache = this.cache; + const elements = v.elements; + + if ( elements === undefined ) { + + if ( arraysEqual( cache, v ) ) return; + + gl.uniformMatrix2fv( this.addr, false, v ); + + copyArray( cache, v ); + + } else { + + if ( arraysEqual( cache, elements ) ) return; + + mat2array.set( elements ); + + gl.uniformMatrix2fv( this.addr, false, mat2array ); + + copyArray( cache, elements ); + + } + + } + + function setValueM3( gl, v ) { + + const cache = this.cache; + const elements = v.elements; + + if ( elements === undefined ) { + + if ( arraysEqual( cache, v ) ) return; + + gl.uniformMatrix3fv( this.addr, false, v ); + + copyArray( cache, v ); + + } else { + + if ( arraysEqual( cache, elements ) ) return; + + mat3array.set( elements ); + + gl.uniformMatrix3fv( this.addr, false, mat3array ); + + copyArray( cache, elements ); + + } + + } + + function setValueM4( gl, v ) { + + const cache = this.cache; + const elements = v.elements; + + if ( elements === undefined ) { + + if ( arraysEqual( cache, v ) ) return; + + gl.uniformMatrix4fv( this.addr, false, v ); + + copyArray( cache, v ); + + } else { + + if ( arraysEqual( cache, elements ) ) return; + + mat4array.set( elements ); + + gl.uniformMatrix4fv( this.addr, false, mat4array ); + + copyArray( cache, elements ); + + } + + } + + // Single texture (2D / Cube) + + function setValueT1( gl, v, textures ) { + + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + + if ( cache[ 0 ] !== unit ) { + + gl.uniform1i( this.addr, unit ); + cache[ 0 ] = unit; + + } + + textures.safeSetTexture2D( v || emptyTexture, unit ); + + } + + function setValueT2DArray1( gl, v, textures ) { + + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + + if ( cache[ 0 ] !== unit ) { + + gl.uniform1i( this.addr, unit ); + cache[ 0 ] = unit; + + } + + textures.setTexture2DArray( v || emptyTexture2dArray, unit ); + + } + + function setValueT3D1( gl, v, textures ) { + + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + + if ( cache[ 0 ] !== unit ) { + + gl.uniform1i( this.addr, unit ); + cache[ 0 ] = unit; + + } + + textures.setTexture3D( v || emptyTexture3d, unit ); + + } + + function setValueT6( gl, v, textures ) { + + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + + if ( cache[ 0 ] !== unit ) { + + gl.uniform1i( this.addr, unit ); + cache[ 0 ] = unit; + + } + + textures.safeSetTextureCube( v || emptyCubeTexture, unit ); + + } + + // Integer / Boolean vectors or arrays thereof (always flat arrays) + + function setValueV1i( gl, v ) { + + const cache = this.cache; + + if ( cache[ 0 ] === v ) return; + + gl.uniform1i( this.addr, v ); + + cache[ 0 ] = v; + + } + + function setValueV2i( gl, v ) { + + const cache = this.cache; + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform2iv( this.addr, v ); + + copyArray( cache, v ); + + } + + function setValueV3i( gl, v ) { + + const cache = this.cache; + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform3iv( this.addr, v ); + + copyArray( cache, v ); + + } + + function setValueV4i( gl, v ) { + + const cache = this.cache; + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform4iv( this.addr, v ); + + copyArray( cache, v ); + + } + + // uint + + function setValueV1ui( gl, v ) { + + const cache = this.cache; + + if ( cache[ 0 ] === v ) return; + + gl.uniform1ui( this.addr, v ); + + cache[ 0 ] = v; + + } + + // Helper to pick the right setter for the singular case + + function getSingularSetter( type ) { + + switch ( type ) { + + case 0x1406: return setValueV1f; // FLOAT + case 0x8b50: return setValueV2f; // _VEC2 + case 0x8b51: return setValueV3f; // _VEC3 + case 0x8b52: return setValueV4f; // _VEC4 + + case 0x8b5a: return setValueM2; // _MAT2 + case 0x8b5b: return setValueM3; // _MAT3 + case 0x8b5c: return setValueM4; // _MAT4 + + case 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL + case 0x8b53: case 0x8b57: return setValueV2i; // _VEC2 + case 0x8b54: case 0x8b58: return setValueV3i; // _VEC3 + case 0x8b55: case 0x8b59: return setValueV4i; // _VEC4 + + case 0x1405: return setValueV1ui; // UINT + + case 0x8b5e: // SAMPLER_2D + case 0x8d66: // SAMPLER_EXTERNAL_OES + case 0x8dca: // INT_SAMPLER_2D + case 0x8dd2: // UNSIGNED_INT_SAMPLER_2D + case 0x8b62: // SAMPLER_2D_SHADOW + return setValueT1; + + case 0x8b5f: // SAMPLER_3D + case 0x8dcb: // INT_SAMPLER_3D + case 0x8dd3: // UNSIGNED_INT_SAMPLER_3D + return setValueT3D1; + + case 0x8b60: // SAMPLER_CUBE + case 0x8dcc: // INT_SAMPLER_CUBE + case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE + case 0x8dc5: // SAMPLER_CUBE_SHADOW + return setValueT6; + + case 0x8dc1: // SAMPLER_2D_ARRAY + case 0x8dcf: // INT_SAMPLER_2D_ARRAY + case 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY + case 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW + return setValueT2DArray1; + + } + + } + + // Array of scalars + function setValueV1fArray( gl, v ) { + + gl.uniform1fv( this.addr, v ); + + } + + // Integer / Boolean vectors or arrays thereof (always flat arrays) + function setValueV1iArray( gl, v ) { + + gl.uniform1iv( this.addr, v ); + + } + + function setValueV2iArray( gl, v ) { + + gl.uniform2iv( this.addr, v ); + + } + + function setValueV3iArray( gl, v ) { + + gl.uniform3iv( this.addr, v ); + + } + + function setValueV4iArray( gl, v ) { + + gl.uniform4iv( this.addr, v ); + + } + + + // Array of vectors (flat or from THREE classes) + + function setValueV2fArray( gl, v ) { + + const data = flatten( v, this.size, 2 ); + + gl.uniform2fv( this.addr, data ); + + } + + function setValueV3fArray( gl, v ) { + + const data = flatten( v, this.size, 3 ); + + gl.uniform3fv( this.addr, data ); + + } + + function setValueV4fArray( gl, v ) { + + const data = flatten( v, this.size, 4 ); + + gl.uniform4fv( this.addr, data ); + + } + + // Array of matrices (flat or from THREE clases) + + function setValueM2Array( gl, v ) { + + const data = flatten( v, this.size, 4 ); + + gl.uniformMatrix2fv( this.addr, false, data ); + + } + + function setValueM3Array( gl, v ) { + + const data = flatten( v, this.size, 9 ); + + gl.uniformMatrix3fv( this.addr, false, data ); + + } + + function setValueM4Array( gl, v ) { + + const data = flatten( v, this.size, 16 ); + + gl.uniformMatrix4fv( this.addr, false, data ); + + } + + // Array of textures (2D / Cube) + + function setValueT1Array( gl, v, textures ) { + + const n = v.length; + + const units = allocTexUnits( textures, n ); + + gl.uniform1iv( this.addr, units ); + + for ( let i = 0; i !== n; ++ i ) { + + textures.safeSetTexture2D( v[ i ] || emptyTexture, units[ i ] ); + + } + + } + + function setValueT6Array( gl, v, textures ) { + + const n = v.length; + + const units = allocTexUnits( textures, n ); + + gl.uniform1iv( this.addr, units ); + + for ( let i = 0; i !== n; ++ i ) { + + textures.safeSetTextureCube( v[ i ] || emptyCubeTexture, units[ i ] ); + + } + + } + + // Helper to pick the right setter for a pure (bottom-level) array + + function getPureArraySetter( type ) { + + switch ( type ) { + + case 0x1406: return setValueV1fArray; // FLOAT + case 0x8b50: return setValueV2fArray; // _VEC2 + case 0x8b51: return setValueV3fArray; // _VEC3 + case 0x8b52: return setValueV4fArray; // _VEC4 + + case 0x8b5a: return setValueM2Array; // _MAT2 + case 0x8b5b: return setValueM3Array; // _MAT3 + case 0x8b5c: return setValueM4Array; // _MAT4 + + case 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL + case 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2 + case 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3 + case 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4 + + case 0x8b5e: // SAMPLER_2D + case 0x8d66: // SAMPLER_EXTERNAL_OES + case 0x8dca: // INT_SAMPLER_2D + case 0x8dd2: // UNSIGNED_INT_SAMPLER_2D + case 0x8b62: // SAMPLER_2D_SHADOW + return setValueT1Array; + + case 0x8b60: // SAMPLER_CUBE + case 0x8dcc: // INT_SAMPLER_CUBE + case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE + case 0x8dc5: // SAMPLER_CUBE_SHADOW + return setValueT6Array; + + } + + } + + // --- Uniform Classes --- + + function SingleUniform( id, activeInfo, addr ) { + + this.id = id; + this.addr = addr; + this.cache = []; + this.setValue = getSingularSetter( activeInfo.type ); + + // this.path = activeInfo.name; // DEBUG + + } + + function PureArrayUniform( id, activeInfo, addr ) { + + this.id = id; + this.addr = addr; + this.cache = []; + this.size = activeInfo.size; + this.setValue = getPureArraySetter( activeInfo.type ); + + // this.path = activeInfo.name; // DEBUG + + } + + PureArrayUniform.prototype.updateCache = function ( data ) { + + const cache = this.cache; + + if ( data instanceof Float32Array && cache.length !== data.length ) { + + this.cache = new Float32Array( data.length ); + + } + + copyArray( cache, data ); + + }; + + function StructuredUniform( id ) { + + this.id = id; + + this.seq = []; + this.map = {}; + + } + + StructuredUniform.prototype.setValue = function ( gl, value, textures ) { + + const seq = this.seq; + + for ( let i = 0, n = seq.length; i !== n; ++ i ) { + + const u = seq[ i ]; + u.setValue( gl, value[ u.id ], textures ); + + } + + }; + + // --- Top-level --- + + // Parser - builds up the property tree from the path strings + + const RePathPart = /([\w\d_]+)(\])?(\[|\.)?/g; + + // extracts + // - the identifier (member name or array index) + // - followed by an optional right bracket (found when array index) + // - followed by an optional left bracket or dot (type of subscript) + // + // Note: These portions can be read in a non-overlapping fashion and + // allow straightforward parsing of the hierarchy that WebGL encodes + // in the uniform names. + + function addUniform( container, uniformObject ) { + + container.seq.push( uniformObject ); + container.map[ uniformObject.id ] = uniformObject; + + } + + function parseUniform( activeInfo, addr, container ) { + + const path = activeInfo.name, + pathLength = path.length; + + // reset RegExp object, because of the early exit of a previous run + RePathPart.lastIndex = 0; + + while ( true ) { + + const match = RePathPart.exec( path ), + matchEnd = RePathPart.lastIndex; + + let id = match[ 1 ]; + const idIsIndex = match[ 2 ] === ']', + subscript = match[ 3 ]; + + if ( idIsIndex ) id = id | 0; // convert to integer + + if ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) { + + // bare name or "pure" bottom-level array "[0]" suffix + + addUniform( container, subscript === undefined ? + new SingleUniform( id, activeInfo, addr ) : + new PureArrayUniform( id, activeInfo, addr ) ); + + break; + + } else { + + // step into inner node / create it in case it doesn't exist + + const map = container.map; + let next = map[ id ]; + + if ( next === undefined ) { + + next = new StructuredUniform( id ); + addUniform( container, next ); + + } + + container = next; + + } + + } + + } + + // Root Container + + function WebGLUniforms( gl, program ) { + + this.seq = []; + this.map = {}; + + const n = gl.getProgramParameter( program, 35718 ); + + for ( let i = 0; i < n; ++ i ) { + + const info = gl.getActiveUniform( program, i ), + addr = gl.getUniformLocation( program, info.name ); + + parseUniform( info, addr, this ); + + } + + } + + WebGLUniforms.prototype.setValue = function ( gl, name, value, textures ) { + + const u = this.map[ name ]; + + if ( u !== undefined ) u.setValue( gl, value, textures ); + + }; + + WebGLUniforms.prototype.setOptional = function ( gl, object, name ) { + + const v = object[ name ]; + + if ( v !== undefined ) this.setValue( gl, name, v ); + + }; + + + // Static interface + + WebGLUniforms.upload = function ( gl, seq, values, textures ) { + + for ( let i = 0, n = seq.length; i !== n; ++ i ) { + + const u = seq[ i ], + v = values[ u.id ]; + + if ( v.needsUpdate !== false ) { + + // note: always updating when .needsUpdate is undefined + u.setValue( gl, v.value, textures ); + + } + + } + + }; + + WebGLUniforms.seqWithValue = function ( seq, values ) { + + const r = []; + + for ( let i = 0, n = seq.length; i !== n; ++ i ) { + + const u = seq[ i ]; + if ( u.id in values ) r.push( u ); + + } + + return r; + + }; + + function WebGLShader( gl, type, string ) { + + const shader = gl.createShader( type ); + + gl.shaderSource( shader, string ); + gl.compileShader( shader ); + + return shader; + + } + + let programIdCount = 0; + + function addLineNumbers( string ) { + + const lines = string.split( '\n' ); + + for ( let i = 0; i < lines.length; i ++ ) { + + lines[ i ] = ( i + 1 ) + ': ' + lines[ i ]; + + } + + return lines.join( '\n' ); + + } + + function getEncodingComponents( encoding ) { + + switch ( encoding ) { + + case LinearEncoding: + return [ 'Linear', '( value )' ]; + case sRGBEncoding: + return [ 'sRGB', '( value )' ]; + case RGBEEncoding: + return [ 'RGBE', '( value )' ]; + case RGBM7Encoding: + return [ 'RGBM', '( value, 7.0 )' ]; + case RGBM16Encoding: + return [ 'RGBM', '( value, 16.0 )' ]; + case RGBDEncoding: + return [ 'RGBD', '( value, 256.0 )' ]; + case GammaEncoding: + return [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ]; + case LogLuvEncoding: + return [ 'LogLuv', '( value )' ]; + default: + console.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding ); + return [ 'Linear', '( value )' ]; + + } + + } + + function getShaderErrors( gl, shader, type ) { + + const status = gl.getShaderParameter( shader, 35713 ); + const log = gl.getShaderInfoLog( shader ).trim(); + + if ( status && log === '' ) return ''; + + // --enable-privileged-webgl-extension + // console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) ); + + const source = gl.getShaderSource( shader ); + + return 'THREE.WebGLShader: gl.getShaderInfoLog() ' + type + '\n' + log + addLineNumbers( source ); + + } + + function getTexelDecodingFunction( functionName, encoding ) { + + const components = getEncodingComponents( encoding ); + return 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }'; + + } + + function getTexelEncodingFunction( functionName, encoding ) { + + const components = getEncodingComponents( encoding ); + return 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }'; + + } + + function getToneMappingFunction( functionName, toneMapping ) { + + let toneMappingName; + + switch ( toneMapping ) { + + case LinearToneMapping: + toneMappingName = 'Linear'; + break; + + case ReinhardToneMapping: + toneMappingName = 'Reinhard'; + break; + + case CineonToneMapping: + toneMappingName = 'OptimizedCineon'; + break; + + case ACESFilmicToneMapping: + toneMappingName = 'ACESFilmic'; + break; + + case CustomToneMapping: + toneMappingName = 'Custom'; + break; + + default: + console.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping ); + toneMappingName = 'Linear'; + + } + + return 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }'; + + } + + function generateExtensions( parameters ) { + + const chunks = [ + ( parameters.extensionDerivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '', + ( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '', + ( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '', + ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : '' + ]; + + return chunks.filter( filterEmptyLine ).join( '\n' ); + + } + + function generateDefines( defines ) { + + const chunks = []; + + for ( const name in defines ) { + + const value = defines[ name ]; + + if ( value === false ) continue; + + chunks.push( '#define ' + name + ' ' + value ); + + } + + return chunks.join( '\n' ); + + } + + function fetchAttributeLocations( gl, program ) { + + const attributes = {}; + + const n = gl.getProgramParameter( program, 35721 ); + + for ( let i = 0; i < n; i ++ ) { + + const info = gl.getActiveAttrib( program, i ); + const name = info.name; + + // console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i ); + + attributes[ name ] = gl.getAttribLocation( program, name ); + + } + + return attributes; + + } + + function filterEmptyLine( string ) { + + return string !== ''; + + } + + function replaceLightNums( string, parameters ) { + + return string + .replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights ) + .replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights ) + .replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights ) + .replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights ) + .replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights ) + .replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows ) + .replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows ) + .replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows ); + + } + + function replaceClippingPlaneNums( string, parameters ) { + + return string + .replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes ) + .replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) ); + + } + + // Resolve Includes + + const includePattern = /^[ \t]*#include +<([\w\d./]+)>/gm; + + function resolveIncludes( string ) { + + return string.replace( includePattern, includeReplacer ); + + } + + function includeReplacer( match, include ) { + + const string = ShaderChunk[ include ]; + + if ( string === undefined ) { + + throw new Error( 'Can not resolve #include <' + include + '>' ); + + } + + return resolveIncludes( string ); + + } + + // Unroll Loops + + const deprecatedUnrollLoopPattern = /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g; + const unrollLoopPattern = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g; + + function unrollLoops( string ) { + + return string + .replace( unrollLoopPattern, loopReplacer ) + .replace( deprecatedUnrollLoopPattern, deprecatedLoopReplacer ); + + } + + function deprecatedLoopReplacer( match, start, end, snippet ) { + + console.warn( 'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.' ); + return loopReplacer( match, start, end, snippet ); + + } + + function loopReplacer( match, start, end, snippet ) { + + let string = ''; + + for ( let i = parseInt( start ); i < parseInt( end ); i ++ ) { + + string += snippet + .replace( /\[\s*i\s*\]/g, '[ ' + i + ' ]' ) + .replace( /UNROLLED_LOOP_INDEX/g, i ); + + } + + return string; + + } + + // + + function generatePrecision( parameters ) { + + let precisionstring = "precision " + parameters.precision + " float;\nprecision " + parameters.precision + " int;"; + + if ( parameters.precision === "highp" ) { + + precisionstring += "\n#define HIGH_PRECISION"; + + } else if ( parameters.precision === "mediump" ) { + + precisionstring += "\n#define MEDIUM_PRECISION"; + + } else if ( parameters.precision === "lowp" ) { + + precisionstring += "\n#define LOW_PRECISION"; + + } + + return precisionstring; + + } + + function generateShadowMapTypeDefine( parameters ) { + + let shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC'; + + if ( parameters.shadowMapType === PCFShadowMap ) { + + shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF'; + + } else if ( parameters.shadowMapType === PCFSoftShadowMap ) { + + shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT'; + + } else if ( parameters.shadowMapType === VSMShadowMap ) { + + shadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM'; + + } + + return shadowMapTypeDefine; + + } + + function generateEnvMapTypeDefine( parameters ) { + + let envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; + + if ( parameters.envMap ) { + + switch ( parameters.envMapMode ) { + + case CubeReflectionMapping: + case CubeRefractionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; + break; + + case CubeUVReflectionMapping: + case CubeUVRefractionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV'; + break; + + } + + } + + return envMapTypeDefine; + + } + + function generateEnvMapModeDefine( parameters ) { + + let envMapModeDefine = 'ENVMAP_MODE_REFLECTION'; + + if ( parameters.envMap ) { + + switch ( parameters.envMapMode ) { + + case CubeRefractionMapping: + case CubeUVRefractionMapping: + + envMapModeDefine = 'ENVMAP_MODE_REFRACTION'; + break; + + } + + } + + return envMapModeDefine; + + } + + function generateEnvMapBlendingDefine( parameters ) { + + let envMapBlendingDefine = 'ENVMAP_BLENDING_NONE'; + + if ( parameters.envMap ) { + + switch ( parameters.combine ) { + + case MultiplyOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY'; + break; + + case MixOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_MIX'; + break; + + case AddOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_ADD'; + break; + + } + + } + + return envMapBlendingDefine; + + } + + function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) { + + const gl = renderer.getContext(); + + const defines = parameters.defines; + + let vertexShader = parameters.vertexShader; + let fragmentShader = parameters.fragmentShader; + + const shadowMapTypeDefine = generateShadowMapTypeDefine( parameters ); + const envMapTypeDefine = generateEnvMapTypeDefine( parameters ); + const envMapModeDefine = generateEnvMapModeDefine( parameters ); + const envMapBlendingDefine = generateEnvMapBlendingDefine( parameters ); + + + const gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0; + + const customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters ); + + const customDefines = generateDefines( defines ); + + const program = gl.createProgram(); + + let prefixVertex, prefixFragment; + let versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + "\n" : ''; + + if ( parameters.isRawShaderMaterial ) { + + prefixVertex = [ + + customDefines + + ].filter( filterEmptyLine ).join( '\n' ); + + if ( prefixVertex.length > 0 ) { + + prefixVertex += '\n'; + + } + + prefixFragment = [ + + customExtensions, + customDefines + + ].filter( filterEmptyLine ).join( '\n' ); + + if ( prefixFragment.length > 0 ) { + + prefixFragment += '\n'; + + } + + } else { + + prefixVertex = [ + + generatePrecision( parameters ), + + '#define SHADER_NAME ' + parameters.shaderName, + + customDefines, + + parameters.instancing ? '#define USE_INSTANCING' : '', + parameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '', + + parameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '', + + '#define GAMMA_FACTOR ' + gammaFactorDefine, + + '#define MAX_BONES ' + parameters.maxBones, + ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', + ( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '', + + parameters.map ? '#define USE_MAP' : '', + parameters.envMap ? '#define USE_ENVMAP' : '', + parameters.envMap ? '#define ' + envMapModeDefine : '', + parameters.lightMap ? '#define USE_LIGHTMAP' : '', + parameters.aoMap ? '#define USE_AOMAP' : '', + parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', + parameters.bumpMap ? '#define USE_BUMPMAP' : '', + parameters.normalMap ? '#define USE_NORMALMAP' : '', + ( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '', + ( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '', + + parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', + parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', + parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', + parameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '', + parameters.specularMap ? '#define USE_SPECULARMAP' : '', + parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', + parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', + parameters.alphaMap ? '#define USE_ALPHAMAP' : '', + parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', + + parameters.vertexTangents ? '#define USE_TANGENT' : '', + parameters.vertexColors ? '#define USE_COLOR' : '', + parameters.vertexUvs ? '#define USE_UV' : '', + parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', + + parameters.flatShading ? '#define FLAT_SHADED' : '', + + parameters.skinning ? '#define USE_SKINNING' : '', + parameters.useVertexTexture ? '#define BONE_TEXTURE' : '', + + parameters.morphTargets ? '#define USE_MORPHTARGETS' : '', + parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '', + parameters.doubleSided ? '#define DOUBLE_SIDED' : '', + parameters.flipSided ? '#define FLIP_SIDED' : '', + + parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', + parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', + + parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '', + + parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', + ( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '', + + 'uniform mat4 modelMatrix;', + 'uniform mat4 modelViewMatrix;', + 'uniform mat4 projectionMatrix;', + 'uniform mat4 viewMatrix;', + 'uniform mat3 normalMatrix;', + 'uniform vec3 cameraPosition;', + 'uniform bool isOrthographic;', + + '#ifdef USE_INSTANCING', + + ' attribute mat4 instanceMatrix;', + + '#endif', + + '#ifdef USE_INSTANCING_COLOR', + + ' attribute vec3 instanceColor;', + + '#endif', + + 'attribute vec3 position;', + 'attribute vec3 normal;', + 'attribute vec2 uv;', + + '#ifdef USE_TANGENT', + + ' attribute vec4 tangent;', + + '#endif', + + '#ifdef USE_COLOR', + + ' attribute vec3 color;', + + '#endif', + + '#ifdef USE_MORPHTARGETS', + + ' attribute vec3 morphTarget0;', + ' attribute vec3 morphTarget1;', + ' attribute vec3 morphTarget2;', + ' attribute vec3 morphTarget3;', + + ' #ifdef USE_MORPHNORMALS', + + ' attribute vec3 morphNormal0;', + ' attribute vec3 morphNormal1;', + ' attribute vec3 morphNormal2;', + ' attribute vec3 morphNormal3;', + + ' #else', + + ' attribute vec3 morphTarget4;', + ' attribute vec3 morphTarget5;', + ' attribute vec3 morphTarget6;', + ' attribute vec3 morphTarget7;', + + ' #endif', + + '#endif', + + '#ifdef USE_SKINNING', + + ' attribute vec4 skinIndex;', + ' attribute vec4 skinWeight;', + + '#endif', + + '\n' + + ].filter( filterEmptyLine ).join( '\n' ); + + prefixFragment = [ + + customExtensions, + + generatePrecision( parameters ), + + '#define SHADER_NAME ' + parameters.shaderName, + + customDefines, + + parameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest + ( parameters.alphaTest % 1 ? '' : '.0' ) : '', // add '.0' if integer + + '#define GAMMA_FACTOR ' + gammaFactorDefine, + + ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', + ( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '', + + parameters.map ? '#define USE_MAP' : '', + parameters.matcap ? '#define USE_MATCAP' : '', + parameters.envMap ? '#define USE_ENVMAP' : '', + parameters.envMap ? '#define ' + envMapTypeDefine : '', + parameters.envMap ? '#define ' + envMapModeDefine : '', + parameters.envMap ? '#define ' + envMapBlendingDefine : '', + parameters.lightMap ? '#define USE_LIGHTMAP' : '', + parameters.aoMap ? '#define USE_AOMAP' : '', + parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', + parameters.bumpMap ? '#define USE_BUMPMAP' : '', + parameters.normalMap ? '#define USE_NORMALMAP' : '', + ( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '', + ( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '', + parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', + parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', + parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', + parameters.specularMap ? '#define USE_SPECULARMAP' : '', + parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', + parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', + parameters.alphaMap ? '#define USE_ALPHAMAP' : '', + + parameters.sheen ? '#define USE_SHEEN' : '', + parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', + + parameters.vertexTangents ? '#define USE_TANGENT' : '', + parameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '', + parameters.vertexUvs ? '#define USE_UV' : '', + parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', + + parameters.gradientMap ? '#define USE_GRADIENTMAP' : '', + + parameters.flatShading ? '#define FLAT_SHADED' : '', + + parameters.doubleSided ? '#define DOUBLE_SIDED' : '', + parameters.flipSided ? '#define FLIP_SIDED' : '', + + parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', + parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', + + parameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '', + + parameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '', + + parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', + ( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '', + + ( ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ) ? '#define TEXTURE_LOD_EXT' : '', + + 'uniform mat4 viewMatrix;', + 'uniform vec3 cameraPosition;', + 'uniform bool isOrthographic;', + + ( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '', + ( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below + ( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '', + + parameters.dithering ? '#define DITHERING' : '', + + ShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below + parameters.map ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '', + parameters.matcap ? getTexelDecodingFunction( 'matcapTexelToLinear', parameters.matcapEncoding ) : '', + parameters.envMap ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '', + parameters.emissiveMap ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '', + parameters.lightMap ? getTexelDecodingFunction( 'lightMapTexelToLinear', parameters.lightMapEncoding ) : '', + getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ), + + parameters.depthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '', + + '\n' + + ].filter( filterEmptyLine ).join( '\n' ); + + } + + vertexShader = resolveIncludes( vertexShader ); + vertexShader = replaceLightNums( vertexShader, parameters ); + vertexShader = replaceClippingPlaneNums( vertexShader, parameters ); + + fragmentShader = resolveIncludes( fragmentShader ); + fragmentShader = replaceLightNums( fragmentShader, parameters ); + fragmentShader = replaceClippingPlaneNums( fragmentShader, parameters ); + + vertexShader = unrollLoops( vertexShader ); + fragmentShader = unrollLoops( fragmentShader ); + + if ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) { + + // GLSL 3.0 conversion for built-in materials and ShaderMaterial + + versionString = '#version 300 es\n'; + + prefixVertex = [ + '#define attribute in', + '#define varying out', + '#define texture2D texture' + ].join( '\n' ) + '\n' + prefixVertex; + + prefixFragment = [ + '#define varying in', + ( parameters.glslVersion === GLSL3 ) ? '' : 'out highp vec4 pc_fragColor;', + ( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor', + '#define gl_FragDepthEXT gl_FragDepth', + '#define texture2D texture', + '#define textureCube texture', + '#define texture2DProj textureProj', + '#define texture2DLodEXT textureLod', + '#define texture2DProjLodEXT textureProjLod', + '#define textureCubeLodEXT textureLod', + '#define texture2DGradEXT textureGrad', + '#define texture2DProjGradEXT textureProjGrad', + '#define textureCubeGradEXT textureGrad' + ].join( '\n' ) + '\n' + prefixFragment; + + } + + const vertexGlsl = versionString + prefixVertex + vertexShader; + const fragmentGlsl = versionString + prefixFragment + fragmentShader; + + // console.log( '*VERTEX*', vertexGlsl ); + // console.log( '*FRAGMENT*', fragmentGlsl ); + + const glVertexShader = WebGLShader( gl, 35633, vertexGlsl ); + const glFragmentShader = WebGLShader( gl, 35632, fragmentGlsl ); + + gl.attachShader( program, glVertexShader ); + gl.attachShader( program, glFragmentShader ); + + // Force a particular attribute to index 0. + + if ( parameters.index0AttributeName !== undefined ) { + + gl.bindAttribLocation( program, 0, parameters.index0AttributeName ); + + } else if ( parameters.morphTargets === true ) { + + // programs with morphTargets displace position out of attribute 0 + gl.bindAttribLocation( program, 0, 'position' ); + + } + + gl.linkProgram( program ); + + // check for link errors + if ( renderer.debug.checkShaderErrors ) { + + const programLog = gl.getProgramInfoLog( program ).trim(); + const vertexLog = gl.getShaderInfoLog( glVertexShader ).trim(); + const fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim(); + + let runnable = true; + let haveDiagnostics = true; + + if ( gl.getProgramParameter( program, 35714 ) === false ) { + + runnable = false; + + const vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' ); + const fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' ); + + console.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), '35715', gl.getProgramParameter( program, 35715 ), 'gl.getProgramInfoLog', programLog, vertexErrors, fragmentErrors ); + + } else if ( programLog !== '' ) { + + console.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog ); + + } else if ( vertexLog === '' || fragmentLog === '' ) { + + haveDiagnostics = false; + + } + + if ( haveDiagnostics ) { + + this.diagnostics = { + + runnable: runnable, + + programLog: programLog, + + vertexShader: { + + log: vertexLog, + prefix: prefixVertex + + }, + + fragmentShader: { + + log: fragmentLog, + prefix: prefixFragment + + } + + }; + + } + + } + + // Clean up + + // Crashes in iOS9 and iOS10. #18402 + // gl.detachShader( program, glVertexShader ); + // gl.detachShader( program, glFragmentShader ); + + gl.deleteShader( glVertexShader ); + gl.deleteShader( glFragmentShader ); + + // set up caching for uniform locations + + let cachedUniforms; + + this.getUniforms = function () { + + if ( cachedUniforms === undefined ) { + + cachedUniforms = new WebGLUniforms( gl, program ); + + } + + return cachedUniforms; + + }; + + // set up caching for attribute locations + + let cachedAttributes; + + this.getAttributes = function () { + + if ( cachedAttributes === undefined ) { + + cachedAttributes = fetchAttributeLocations( gl, program ); + + } + + return cachedAttributes; + + }; + + // free resource + + this.destroy = function () { + + bindingStates.releaseStatesOfProgram( this ); + + gl.deleteProgram( program ); + this.program = undefined; + + }; + + // + + this.name = parameters.shaderName; + this.id = programIdCount ++; + this.cacheKey = cacheKey; + this.usedTimes = 1; + this.program = program; + this.vertexShader = glVertexShader; + this.fragmentShader = glFragmentShader; + + return this; + + } + + function WebGLPrograms( renderer, cubemaps, extensions, capabilities, bindingStates, clipping ) { + + const programs = []; + + const isWebGL2 = capabilities.isWebGL2; + const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer; + const floatVertexTextures = capabilities.floatVertexTextures; + const maxVertexUniforms = capabilities.maxVertexUniforms; + const vertexTextures = capabilities.vertexTextures; + + let precision = capabilities.precision; + + const shaderIDs = { + MeshDepthMaterial: 'depth', + MeshDistanceMaterial: 'distanceRGBA', + MeshNormalMaterial: 'normal', + MeshBasicMaterial: 'basic', + MeshLambertMaterial: 'lambert', + MeshPhongMaterial: 'phong', + MeshToonMaterial: 'toon', + MeshStandardMaterial: 'physical', + MeshPhysicalMaterial: 'physical', + MeshMatcapMaterial: 'matcap', + LineBasicMaterial: 'basic', + LineDashedMaterial: 'dashed', + PointsMaterial: 'points', + ShadowMaterial: 'shadow', + SpriteMaterial: 'sprite' + }; + + const parameterNames = [ + "precision", "isWebGL2", "supportsVertexTextures", "outputEncoding", "instancing", "instancingColor", + "map", "mapEncoding", "matcap", "matcapEncoding", "envMap", "envMapMode", "envMapEncoding", "envMapCubeUV", + "lightMap", "lightMapEncoding", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "objectSpaceNormalMap", "tangentSpaceNormalMap", "clearcoatMap", "clearcoatRoughnessMap", "clearcoatNormalMap", "displacementMap", "specularMap", + "roughnessMap", "metalnessMap", "gradientMap", + "alphaMap", "combine", "vertexColors", "vertexTangents", "vertexUvs", "uvsVertexOnly", "fog", "useFog", "fogExp2", + "flatShading", "sizeAttenuation", "logarithmicDepthBuffer", "skinning", + "maxBones", "useVertexTexture", "morphTargets", "morphNormals", + "maxMorphTargets", "maxMorphNormals", "premultipliedAlpha", + "numDirLights", "numPointLights", "numSpotLights", "numHemiLights", "numRectAreaLights", + "numDirLightShadows", "numPointLightShadows", "numSpotLightShadows", + "shadowMapEnabled", "shadowMapType", "toneMapping", 'physicallyCorrectLights', + "alphaTest", "doubleSided", "flipSided", "numClippingPlanes", "numClipIntersection", "depthPacking", "dithering", + "sheen", "transmissionMap" + ]; + + function getMaxBones( object ) { + + const skeleton = object.skeleton; + const bones = skeleton.bones; + + if ( floatVertexTextures ) { + + return 1024; + + } else { + + // default for when object is not specified + // ( for example when prebuilding shader to be used with multiple objects ) + // + // - leave some extra space for other uniforms + // - limit here is ANGLE's 254 max uniform vectors + // (up to 54 should be safe) + + const nVertexUniforms = maxVertexUniforms; + const nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 ); + + const maxBones = Math.min( nVertexMatrices, bones.length ); + + if ( maxBones < bones.length ) { + + console.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' ); + return 0; + + } + + return maxBones; + + } + + } + + function getTextureEncodingFromMap( map ) { + + let encoding; + + if ( ! map ) { + + encoding = LinearEncoding; + + } else if ( map.isTexture ) { + + encoding = map.encoding; + + } else if ( map.isWebGLRenderTarget ) { + + console.warn( "THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead." ); + encoding = map.texture.encoding; + + } + + return encoding; + + } + + function getParameters( material, lights, shadows, scene, object ) { + + const fog = scene.fog; + const environment = material.isMeshStandardMaterial ? scene.environment : null; + + const envMap = cubemaps.get( material.envMap || environment ); + + const shaderID = shaderIDs[ material.type ]; + + // heuristics to create shader parameters according to lights in the scene + // (not to blow over maxLights budget) + + const maxBones = object.isSkinnedMesh ? getMaxBones( object ) : 0; + + if ( material.precision !== null ) { + + precision = capabilities.getMaxPrecision( material.precision ); + + if ( precision !== material.precision ) { + + console.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' ); + + } + + } + + let vertexShader, fragmentShader; + + if ( shaderID ) { + + const shader = ShaderLib[ shaderID ]; + + vertexShader = shader.vertexShader; + fragmentShader = shader.fragmentShader; + + } else { + + vertexShader = material.vertexShader; + fragmentShader = material.fragmentShader; + + } + + const currentRenderTarget = renderer.getRenderTarget(); + + const parameters = { + + isWebGL2: isWebGL2, + + shaderID: shaderID, + shaderName: material.type, + + vertexShader: vertexShader, + fragmentShader: fragmentShader, + defines: material.defines, + + isRawShaderMaterial: material.isRawShaderMaterial === true, + glslVersion: material.glslVersion, + + precision: precision, + + instancing: object.isInstancedMesh === true, + instancingColor: object.isInstancedMesh === true && object.instanceColor !== null, + + supportsVertexTextures: vertexTextures, + outputEncoding: ( currentRenderTarget !== null ) ? getTextureEncodingFromMap( currentRenderTarget.texture ) : renderer.outputEncoding, + map: !! material.map, + mapEncoding: getTextureEncodingFromMap( material.map ), + matcap: !! material.matcap, + matcapEncoding: getTextureEncodingFromMap( material.matcap ), + envMap: !! envMap, + envMapMode: envMap && envMap.mapping, + envMapEncoding: getTextureEncodingFromMap( envMap ), + envMapCubeUV: ( !! envMap ) && ( ( envMap.mapping === CubeUVReflectionMapping ) || ( envMap.mapping === CubeUVRefractionMapping ) ), + lightMap: !! material.lightMap, + lightMapEncoding: getTextureEncodingFromMap( material.lightMap ), + aoMap: !! material.aoMap, + emissiveMap: !! material.emissiveMap, + emissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap ), + bumpMap: !! material.bumpMap, + normalMap: !! material.normalMap, + objectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap, + tangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap, + clearcoatMap: !! material.clearcoatMap, + clearcoatRoughnessMap: !! material.clearcoatRoughnessMap, + clearcoatNormalMap: !! material.clearcoatNormalMap, + displacementMap: !! material.displacementMap, + roughnessMap: !! material.roughnessMap, + metalnessMap: !! material.metalnessMap, + specularMap: !! material.specularMap, + alphaMap: !! material.alphaMap, + + gradientMap: !! material.gradientMap, + + sheen: !! material.sheen, + + transmissionMap: !! material.transmissionMap, + + combine: material.combine, + + vertexTangents: ( material.normalMap && material.vertexTangents ), + vertexColors: material.vertexColors, + vertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmissionMap, + uvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.transmissionMap ) && !! material.displacementMap, + + fog: !! fog, + useFog: material.fog, + fogExp2: ( fog && fog.isFogExp2 ), + + flatShading: material.flatShading, + + sizeAttenuation: material.sizeAttenuation, + logarithmicDepthBuffer: logarithmicDepthBuffer, + + skinning: material.skinning && maxBones > 0, + maxBones: maxBones, + useVertexTexture: floatVertexTextures, + + morphTargets: material.morphTargets, + morphNormals: material.morphNormals, + maxMorphTargets: renderer.maxMorphTargets, + maxMorphNormals: renderer.maxMorphNormals, + + numDirLights: lights.directional.length, + numPointLights: lights.point.length, + numSpotLights: lights.spot.length, + numRectAreaLights: lights.rectArea.length, + numHemiLights: lights.hemi.length, + + numDirLightShadows: lights.directionalShadowMap.length, + numPointLightShadows: lights.pointShadowMap.length, + numSpotLightShadows: lights.spotShadowMap.length, + + numClippingPlanes: clipping.numPlanes, + numClipIntersection: clipping.numIntersection, + + dithering: material.dithering, + + shadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0, + shadowMapType: renderer.shadowMap.type, + + toneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping, + physicallyCorrectLights: renderer.physicallyCorrectLights, + + premultipliedAlpha: material.premultipliedAlpha, + + alphaTest: material.alphaTest, + doubleSided: material.side === DoubleSide, + flipSided: material.side === BackSide, + + depthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false, + + index0AttributeName: material.index0AttributeName, + + extensionDerivatives: material.extensions && material.extensions.derivatives, + extensionFragDepth: material.extensions && material.extensions.fragDepth, + extensionDrawBuffers: material.extensions && material.extensions.drawBuffers, + extensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD, + + rendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ), + rendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ), + rendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ), + + customProgramCacheKey: material.customProgramCacheKey() + + }; + + return parameters; + + } + + function getProgramCacheKey( parameters ) { + + const array = []; + + if ( parameters.shaderID ) { + + array.push( parameters.shaderID ); + + } else { + + array.push( parameters.fragmentShader ); + array.push( parameters.vertexShader ); + + } + + if ( parameters.defines !== undefined ) { + + for ( const name in parameters.defines ) { + + array.push( name ); + array.push( parameters.defines[ name ] ); + + } + + } + + if ( parameters.isRawShaderMaterial === false ) { + + for ( let i = 0; i < parameterNames.length; i ++ ) { + + array.push( parameters[ parameterNames[ i ] ] ); + + } + + array.push( renderer.outputEncoding ); + array.push( renderer.gammaFactor ); + + } + + array.push( parameters.customProgramCacheKey ); + + return array.join(); + + } + + function getUniforms( material ) { + + const shaderID = shaderIDs[ material.type ]; + let uniforms; + + if ( shaderID ) { + + const shader = ShaderLib[ shaderID ]; + uniforms = UniformsUtils.clone( shader.uniforms ); + + } else { + + uniforms = material.uniforms; + + } + + return uniforms; + + } + + function acquireProgram( parameters, cacheKey ) { + + let program; + + // Check if code has been already compiled + for ( let p = 0, pl = programs.length; p < pl; p ++ ) { + + const preexistingProgram = programs[ p ]; + + if ( preexistingProgram.cacheKey === cacheKey ) { + + program = preexistingProgram; + ++ program.usedTimes; + + break; + + } + + } + + if ( program === undefined ) { + + program = new WebGLProgram( renderer, cacheKey, parameters, bindingStates ); + programs.push( program ); + + } + + return program; + + } + + function releaseProgram( program ) { + + if ( -- program.usedTimes === 0 ) { + + // Remove from unordered set + const i = programs.indexOf( program ); + programs[ i ] = programs[ programs.length - 1 ]; + programs.pop(); + + // Free WebGL resources + program.destroy(); + + } + + } + + return { + getParameters: getParameters, + getProgramCacheKey: getProgramCacheKey, + getUniforms: getUniforms, + acquireProgram: acquireProgram, + releaseProgram: releaseProgram, + // Exposed for resource monitoring & error feedback via renderer.info: + programs: programs + }; + + } + + function WebGLProperties() { + + let properties = new WeakMap(); + + function get( object ) { + + let map = properties.get( object ); + + if ( map === undefined ) { + + map = {}; + properties.set( object, map ); + + } + + return map; + + } + + function remove( object ) { + + properties.delete( object ); + + } + + function update( object, key, value ) { + + properties.get( object )[ key ] = value; + + } + + function dispose() { + + properties = new WeakMap(); + + } + + return { + get: get, + remove: remove, + update: update, + dispose: dispose + }; + + } + + function painterSortStable( a, b ) { + + if ( a.groupOrder !== b.groupOrder ) { + + return a.groupOrder - b.groupOrder; + + } else if ( a.renderOrder !== b.renderOrder ) { + + return a.renderOrder - b.renderOrder; + + } else if ( a.program !== b.program ) { + + return a.program.id - b.program.id; + + } else if ( a.material.id !== b.material.id ) { + + return a.material.id - b.material.id; + + } else if ( a.z !== b.z ) { + + return a.z - b.z; + + } else { + + return a.id - b.id; + + } + + } + + function reversePainterSortStable( a, b ) { + + if ( a.groupOrder !== b.groupOrder ) { + + return a.groupOrder - b.groupOrder; + + } else if ( a.renderOrder !== b.renderOrder ) { + + return a.renderOrder - b.renderOrder; + + } else if ( a.z !== b.z ) { + + return b.z - a.z; + + } else { + + return a.id - b.id; + + } + + } + + + function WebGLRenderList( properties ) { + + const renderItems = []; + let renderItemsIndex = 0; + + const opaque = []; + const transparent = []; + + const defaultProgram = { id: - 1 }; + + function init() { + + renderItemsIndex = 0; + + opaque.length = 0; + transparent.length = 0; + + } + + function getNextRenderItem( object, geometry, material, groupOrder, z, group ) { + + let renderItem = renderItems[ renderItemsIndex ]; + const materialProperties = properties.get( material ); + + if ( renderItem === undefined ) { + + renderItem = { + id: object.id, + object: object, + geometry: geometry, + material: material, + program: materialProperties.program || defaultProgram, + groupOrder: groupOrder, + renderOrder: object.renderOrder, + z: z, + group: group + }; + + renderItems[ renderItemsIndex ] = renderItem; + + } else { + + renderItem.id = object.id; + renderItem.object = object; + renderItem.geometry = geometry; + renderItem.material = material; + renderItem.program = materialProperties.program || defaultProgram; + renderItem.groupOrder = groupOrder; + renderItem.renderOrder = object.renderOrder; + renderItem.z = z; + renderItem.group = group; + + } + + renderItemsIndex ++; + + return renderItem; + + } + + function push( object, geometry, material, groupOrder, z, group ) { + + const renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group ); + + ( material.transparent === true ? transparent : opaque ).push( renderItem ); + + } + + function unshift( object, geometry, material, groupOrder, z, group ) { + + const renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group ); + + ( material.transparent === true ? transparent : opaque ).unshift( renderItem ); + + } + + function sort( customOpaqueSort, customTransparentSort ) { + + if ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable ); + if ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable ); + + } + + function finish() { + + // Clear references from inactive renderItems in the list + + for ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) { + + const renderItem = renderItems[ i ]; + + if ( renderItem.id === null ) break; + + renderItem.id = null; + renderItem.object = null; + renderItem.geometry = null; + renderItem.material = null; + renderItem.program = null; + renderItem.group = null; + + } + + } + + return { + + opaque: opaque, + transparent: transparent, + + init: init, + push: push, + unshift: unshift, + finish: finish, + + sort: sort + }; + + } + + function WebGLRenderLists( properties ) { + + let lists = new WeakMap(); + + function get( scene, camera ) { + + const cameras = lists.get( scene ); + let list; + + if ( cameras === undefined ) { + + list = new WebGLRenderList( properties ); + lists.set( scene, new WeakMap() ); + lists.get( scene ).set( camera, list ); + + } else { + + list = cameras.get( camera ); + if ( list === undefined ) { + + list = new WebGLRenderList( properties ); + cameras.set( camera, list ); + + } + + } + + return list; + + } + + function dispose() { + + lists = new WeakMap(); + + } + + return { + get: get, + dispose: dispose + }; + + } + + function UniformsCache() { + + const lights = {}; + + return { + + get: function ( light ) { + + if ( lights[ light.id ] !== undefined ) { + + return lights[ light.id ]; + + } + + let uniforms; + + switch ( light.type ) { + + case 'DirectionalLight': + uniforms = { + direction: new Vector3(), + color: new Color() + }; + break; + + case 'SpotLight': + uniforms = { + position: new Vector3(), + direction: new Vector3(), + color: new Color(), + distance: 0, + coneCos: 0, + penumbraCos: 0, + decay: 0 + }; + break; + + case 'PointLight': + uniforms = { + position: new Vector3(), + color: new Color(), + distance: 0, + decay: 0 + }; + break; + + case 'HemisphereLight': + uniforms = { + direction: new Vector3(), + skyColor: new Color(), + groundColor: new Color() + }; + break; + + case 'RectAreaLight': + uniforms = { + color: new Color(), + position: new Vector3(), + halfWidth: new Vector3(), + halfHeight: new Vector3() + }; + break; + + } + + lights[ light.id ] = uniforms; + + return uniforms; + + } + + }; + + } + + function ShadowUniformsCache() { + + const lights = {}; + + return { + + get: function ( light ) { + + if ( lights[ light.id ] !== undefined ) { + + return lights[ light.id ]; + + } + + let uniforms; + + switch ( light.type ) { + + case 'DirectionalLight': + uniforms = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2() + }; + break; + + case 'SpotLight': + uniforms = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2() + }; + break; + + case 'PointLight': + uniforms = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2(), + shadowCameraNear: 1, + shadowCameraFar: 1000 + }; + break; + + // TODO (abelnation): set RectAreaLight shadow uniforms + + } + + lights[ light.id ] = uniforms; + + return uniforms; + + } + + }; + + } + + + + let nextVersion = 0; + + function shadowCastingLightsFirst( lightA, lightB ) { + + return ( lightB.castShadow ? 1 : 0 ) - ( lightA.castShadow ? 1 : 0 ); + + } + + function WebGLLights( extensions, capabilities ) { + + const cache = new UniformsCache(); + + const shadowCache = ShadowUniformsCache(); + + const state = { + + version: 0, + + hash: { + directionalLength: - 1, + pointLength: - 1, + spotLength: - 1, + rectAreaLength: - 1, + hemiLength: - 1, + + numDirectionalShadows: - 1, + numPointShadows: - 1, + numSpotShadows: - 1 + }, + + ambient: [ 0, 0, 0 ], + probe: [], + directional: [], + directionalShadow: [], + directionalShadowMap: [], + directionalShadowMatrix: [], + spot: [], + spotShadow: [], + spotShadowMap: [], + spotShadowMatrix: [], + rectArea: [], + rectAreaLTC1: null, + rectAreaLTC2: null, + point: [], + pointShadow: [], + pointShadowMap: [], + pointShadowMatrix: [], + hemi: [] + + }; + + for ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() ); + + const vector3 = new Vector3(); + const matrix4 = new Matrix4(); + const matrix42 = new Matrix4(); + + function setup( lights, shadows, camera ) { + + let r = 0, g = 0, b = 0; + + for ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 ); + + let directionalLength = 0; + let pointLength = 0; + let spotLength = 0; + let rectAreaLength = 0; + let hemiLength = 0; + + let numDirectionalShadows = 0; + let numPointShadows = 0; + let numSpotShadows = 0; + + const viewMatrix = camera.matrixWorldInverse; + + lights.sort( shadowCastingLightsFirst ); + + for ( let i = 0, l = lights.length; i < l; i ++ ) { + + const light = lights[ i ]; + + const color = light.color; + const intensity = light.intensity; + const distance = light.distance; + + const shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null; + + if ( light.isAmbientLight ) { + + r += color.r * intensity; + g += color.g * intensity; + b += color.b * intensity; + + } else if ( light.isLightProbe ) { + + for ( let j = 0; j < 9; j ++ ) { + + state.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity ); + + } + + } else if ( light.isDirectionalLight ) { + + const uniforms = cache.get( light ); + + uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + vector3.setFromMatrixPosition( light.target.matrixWorld ); + uniforms.direction.sub( vector3 ); + uniforms.direction.transformDirection( viewMatrix ); + + if ( light.castShadow ) { + + const shadow = light.shadow; + + const shadowUniforms = shadowCache.get( light ); + + shadowUniforms.shadowBias = shadow.bias; + shadowUniforms.shadowNormalBias = shadow.normalBias; + shadowUniforms.shadowRadius = shadow.radius; + shadowUniforms.shadowMapSize = shadow.mapSize; + + state.directionalShadow[ directionalLength ] = shadowUniforms; + state.directionalShadowMap[ directionalLength ] = shadowMap; + state.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix; + + numDirectionalShadows ++; + + } + + state.directional[ directionalLength ] = uniforms; + + directionalLength ++; + + } else if ( light.isSpotLight ) { + + const uniforms = cache.get( light ); + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + uniforms.position.applyMatrix4( viewMatrix ); + + uniforms.color.copy( color ).multiplyScalar( intensity ); + uniforms.distance = distance; + + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + vector3.setFromMatrixPosition( light.target.matrixWorld ); + uniforms.direction.sub( vector3 ); + uniforms.direction.transformDirection( viewMatrix ); + + uniforms.coneCos = Math.cos( light.angle ); + uniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) ); + uniforms.decay = light.decay; + + if ( light.castShadow ) { + + const shadow = light.shadow; + + const shadowUniforms = shadowCache.get( light ); + + shadowUniforms.shadowBias = shadow.bias; + shadowUniforms.shadowNormalBias = shadow.normalBias; + shadowUniforms.shadowRadius = shadow.radius; + shadowUniforms.shadowMapSize = shadow.mapSize; + + state.spotShadow[ spotLength ] = shadowUniforms; + state.spotShadowMap[ spotLength ] = shadowMap; + state.spotShadowMatrix[ spotLength ] = light.shadow.matrix; + + numSpotShadows ++; + + } + + state.spot[ spotLength ] = uniforms; + + spotLength ++; + + } else if ( light.isRectAreaLight ) { + + const uniforms = cache.get( light ); + + // (a) intensity is the total visible light emitted + //uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) ); + + // (b) intensity is the brightness of the light + uniforms.color.copy( color ).multiplyScalar( intensity ); + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + uniforms.position.applyMatrix4( viewMatrix ); + + // extract local rotation of light to derive width/height half vectors + matrix42.identity(); + matrix4.copy( light.matrixWorld ); + matrix4.premultiply( viewMatrix ); + matrix42.extractRotation( matrix4 ); + + uniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 ); + uniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 ); + + uniforms.halfWidth.applyMatrix4( matrix42 ); + uniforms.halfHeight.applyMatrix4( matrix42 ); + + // TODO (abelnation): RectAreaLight distance? + // uniforms.distance = distance; + + state.rectArea[ rectAreaLength ] = uniforms; + + rectAreaLength ++; + + } else if ( light.isPointLight ) { + + const uniforms = cache.get( light ); + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + uniforms.position.applyMatrix4( viewMatrix ); + + uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); + uniforms.distance = light.distance; + uniforms.decay = light.decay; + + if ( light.castShadow ) { + + const shadow = light.shadow; + + const shadowUniforms = shadowCache.get( light ); + + shadowUniforms.shadowBias = shadow.bias; + shadowUniforms.shadowNormalBias = shadow.normalBias; + shadowUniforms.shadowRadius = shadow.radius; + shadowUniforms.shadowMapSize = shadow.mapSize; + shadowUniforms.shadowCameraNear = shadow.camera.near; + shadowUniforms.shadowCameraFar = shadow.camera.far; + + state.pointShadow[ pointLength ] = shadowUniforms; + state.pointShadowMap[ pointLength ] = shadowMap; + state.pointShadowMatrix[ pointLength ] = light.shadow.matrix; + + numPointShadows ++; + + } + + state.point[ pointLength ] = uniforms; + + pointLength ++; + + } else if ( light.isHemisphereLight ) { + + const uniforms = cache.get( light ); + + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + uniforms.direction.transformDirection( viewMatrix ); + uniforms.direction.normalize(); + + uniforms.skyColor.copy( light.color ).multiplyScalar( intensity ); + uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity ); + + state.hemi[ hemiLength ] = uniforms; + + hemiLength ++; + + } + + } + + if ( rectAreaLength > 0 ) { + + if ( capabilities.isWebGL2 ) { + + // WebGL 2 + + state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1; + state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2; + + } else { + + // WebGL 1 + + if ( extensions.has( 'OES_texture_float_linear' ) === true ) { + + state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1; + state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2; + + } else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) { + + state.rectAreaLTC1 = UniformsLib.LTC_HALF_1; + state.rectAreaLTC2 = UniformsLib.LTC_HALF_2; + + } else { + + console.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' ); + + } + + } + + } + + state.ambient[ 0 ] = r; + state.ambient[ 1 ] = g; + state.ambient[ 2 ] = b; + + const hash = state.hash; + + if ( hash.directionalLength !== directionalLength || + hash.pointLength !== pointLength || + hash.spotLength !== spotLength || + hash.rectAreaLength !== rectAreaLength || + hash.hemiLength !== hemiLength || + hash.numDirectionalShadows !== numDirectionalShadows || + hash.numPointShadows !== numPointShadows || + hash.numSpotShadows !== numSpotShadows ) { + + state.directional.length = directionalLength; + state.spot.length = spotLength; + state.rectArea.length = rectAreaLength; + state.point.length = pointLength; + state.hemi.length = hemiLength; + + state.directionalShadow.length = numDirectionalShadows; + state.directionalShadowMap.length = numDirectionalShadows; + state.pointShadow.length = numPointShadows; + state.pointShadowMap.length = numPointShadows; + state.spotShadow.length = numSpotShadows; + state.spotShadowMap.length = numSpotShadows; + state.directionalShadowMatrix.length = numDirectionalShadows; + state.pointShadowMatrix.length = numPointShadows; + state.spotShadowMatrix.length = numSpotShadows; + + hash.directionalLength = directionalLength; + hash.pointLength = pointLength; + hash.spotLength = spotLength; + hash.rectAreaLength = rectAreaLength; + hash.hemiLength = hemiLength; + + hash.numDirectionalShadows = numDirectionalShadows; + hash.numPointShadows = numPointShadows; + hash.numSpotShadows = numSpotShadows; + + state.version = nextVersion ++; + + } + + } + + return { + setup: setup, + state: state + }; + + } + + function WebGLRenderState( extensions, capabilities ) { + + const lights = new WebGLLights( extensions, capabilities ); + + const lightsArray = []; + const shadowsArray = []; + + function init() { + + lightsArray.length = 0; + shadowsArray.length = 0; + + } + + function pushLight( light ) { + + lightsArray.push( light ); + + } + + function pushShadow( shadowLight ) { + + shadowsArray.push( shadowLight ); + + } + + function setupLights( camera ) { + + lights.setup( lightsArray, shadowsArray, camera ); + + } + + const state = { + lightsArray: lightsArray, + shadowsArray: shadowsArray, + + lights: lights + }; + + return { + init: init, + state: state, + setupLights: setupLights, + + pushLight: pushLight, + pushShadow: pushShadow + }; + + } + + function WebGLRenderStates( extensions, capabilities ) { + + let renderStates = new WeakMap(); + + function get( scene, camera ) { + + let renderState; + + if ( renderStates.has( scene ) === false ) { + + renderState = new WebGLRenderState( extensions, capabilities ); + renderStates.set( scene, new WeakMap() ); + renderStates.get( scene ).set( camera, renderState ); + + } else { + + if ( renderStates.get( scene ).has( camera ) === false ) { + + renderState = new WebGLRenderState( extensions, capabilities ); + renderStates.get( scene ).set( camera, renderState ); + + } else { + + renderState = renderStates.get( scene ).get( camera ); + + } + + } + + return renderState; + + } + + function dispose() { + + renderStates = new WeakMap(); + + } + + return { + get: get, + dispose: dispose + }; + + } + + /** + * parameters = { + * + * opacity: , + * + * map: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * wireframe: , + * wireframeLinewidth: + * } + */ + + function MeshDepthMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshDepthMaterial'; + + this.depthPacking = BasicDepthPacking; + + this.skinning = false; + this.morphTargets = false; + + this.map = null; + + this.alphaMap = null; + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; + + this.setValues( parameters ); + + } + + MeshDepthMaterial.prototype = Object.create( Material.prototype ); + MeshDepthMaterial.prototype.constructor = MeshDepthMaterial; + + MeshDepthMaterial.prototype.isMeshDepthMaterial = true; + + MeshDepthMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.depthPacking = source.depthPacking; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + return this; + + }; + + /** + * parameters = { + * + * referencePosition: , + * nearDistance: , + * farDistance: , + * + * skinning: , + * morphTargets: , + * + * map: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: + * + * } + */ + + function MeshDistanceMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshDistanceMaterial'; + + this.referencePosition = new Vector3(); + this.nearDistance = 1; + this.farDistance = 1000; + + this.skinning = false; + this.morphTargets = false; + + this.map = null; + + this.alphaMap = null; + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.fog = false; + + this.setValues( parameters ); + + } + + MeshDistanceMaterial.prototype = Object.create( Material.prototype ); + MeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial; + + MeshDistanceMaterial.prototype.isMeshDistanceMaterial = true; + + MeshDistanceMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.referencePosition.copy( source.referencePosition ); + this.nearDistance = source.nearDistance; + this.farDistance = source.farDistance; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + return this; + + }; + + var vsm_frag = "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"; + + var vsm_vert = "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}"; + + function WebGLShadowMap( _renderer, _objects, maxTextureSize ) { + + let _frustum = new Frustum(); + + const _shadowMapSize = new Vector2(), + _viewportSize = new Vector2(), + + _viewport = new Vector4(), + + _depthMaterials = [], + _distanceMaterials = [], + + _materialCache = {}; + + const shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide }; + + const shadowMaterialVertical = new ShaderMaterial( { + + defines: { + SAMPLE_RATE: 2.0 / 8.0, + HALF_SAMPLE_RATE: 1.0 / 8.0 + }, + + uniforms: { + shadow_pass: { value: null }, + resolution: { value: new Vector2() }, + radius: { value: 4.0 } + }, + + vertexShader: vsm_vert, + + fragmentShader: vsm_frag + + } ); + + const shadowMaterialHorizonal = shadowMaterialVertical.clone(); + shadowMaterialHorizonal.defines.HORIZONAL_PASS = 1; + + const fullScreenTri = new BufferGeometry(); + fullScreenTri.setAttribute( + "position", + new BufferAttribute( + new Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ), + 3 + ) + ); + + const fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical ); + + const scope = this; + + this.enabled = false; + + this.autoUpdate = true; + this.needsUpdate = false; + + this.type = PCFShadowMap; + + this.render = function ( lights, scene, camera ) { + + if ( scope.enabled === false ) return; + if ( scope.autoUpdate === false && scope.needsUpdate === false ) return; + + if ( lights.length === 0 ) return; + + const currentRenderTarget = _renderer.getRenderTarget(); + const activeCubeFace = _renderer.getActiveCubeFace(); + const activeMipmapLevel = _renderer.getActiveMipmapLevel(); + + const _state = _renderer.state; + + // Set GL state for depth map. + _state.setBlending( NoBlending ); + _state.buffers.color.setClear( 1, 1, 1, 1 ); + _state.buffers.depth.setTest( true ); + _state.setScissorTest( false ); + + // render depth map + + for ( let i = 0, il = lights.length; i < il; i ++ ) { + + const light = lights[ i ]; + const shadow = light.shadow; + + if ( shadow === undefined ) { + + console.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' ); + continue; + + } + + if ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue; + + _shadowMapSize.copy( shadow.mapSize ); + + const shadowFrameExtents = shadow.getFrameExtents(); + + _shadowMapSize.multiply( shadowFrameExtents ); + + _viewportSize.copy( shadow.mapSize ); + + if ( _shadowMapSize.x > maxTextureSize || _shadowMapSize.y > maxTextureSize ) { + + if ( _shadowMapSize.x > maxTextureSize ) { + + _viewportSize.x = Math.floor( maxTextureSize / shadowFrameExtents.x ); + _shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x; + shadow.mapSize.x = _viewportSize.x; + + } + + if ( _shadowMapSize.y > maxTextureSize ) { + + _viewportSize.y = Math.floor( maxTextureSize / shadowFrameExtents.y ); + _shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y; + shadow.mapSize.y = _viewportSize.y; + + } + + } + + if ( shadow.map === null && ! shadow.isPointLightShadow && this.type === VSMShadowMap ) { + + const pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat }; + + shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); + shadow.map.texture.name = light.name + ".shadowMap"; + + shadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); + + shadow.camera.updateProjectionMatrix(); + + } + + if ( shadow.map === null ) { + + const pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat }; + + shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); + shadow.map.texture.name = light.name + ".shadowMap"; + + shadow.camera.updateProjectionMatrix(); + + } + + _renderer.setRenderTarget( shadow.map ); + _renderer.clear(); + + const viewportCount = shadow.getViewportCount(); + + for ( let vp = 0; vp < viewportCount; vp ++ ) { + + const viewport = shadow.getViewport( vp ); + + _viewport.set( + _viewportSize.x * viewport.x, + _viewportSize.y * viewport.y, + _viewportSize.x * viewport.z, + _viewportSize.y * viewport.w + ); + + _state.viewport( _viewport ); + + shadow.updateMatrices( light, vp ); + + _frustum = shadow.getFrustum(); + + renderObject( scene, camera, shadow.camera, light, this.type ); + + } + + // do blur pass for VSM + + if ( ! shadow.isPointLightShadow && this.type === VSMShadowMap ) { + + VSMPass( shadow, camera ); + + } + + shadow.needsUpdate = false; + + } + + scope.needsUpdate = false; + + _renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel ); + + }; + + function VSMPass( shadow, camera ) { + + const geometry = _objects.update( fullScreenMesh ); + + // vertical pass + + shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture; + shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize; + shadowMaterialVertical.uniforms.radius.value = shadow.radius; + _renderer.setRenderTarget( shadow.mapPass ); + _renderer.clear(); + _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null ); + + // horizonal pass + + shadowMaterialHorizonal.uniforms.shadow_pass.value = shadow.mapPass.texture; + shadowMaterialHorizonal.uniforms.resolution.value = shadow.mapSize; + shadowMaterialHorizonal.uniforms.radius.value = shadow.radius; + _renderer.setRenderTarget( shadow.map ); + _renderer.clear(); + _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizonal, fullScreenMesh, null ); + + } + + function getDepthMaterialVariant( useMorphing, useSkinning, useInstancing ) { + + const index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2; + + let material = _depthMaterials[ index ]; + + if ( material === undefined ) { + + material = new MeshDepthMaterial( { + + depthPacking: RGBADepthPacking, + + morphTargets: useMorphing, + skinning: useSkinning + + } ); + + _depthMaterials[ index ] = material; + + } + + return material; + + } + + function getDistanceMaterialVariant( useMorphing, useSkinning, useInstancing ) { + + const index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2; + + let material = _distanceMaterials[ index ]; + + if ( material === undefined ) { + + material = new MeshDistanceMaterial( { + + morphTargets: useMorphing, + skinning: useSkinning + + } ); + + _distanceMaterials[ index ] = material; + + } + + return material; + + } + + function getDepthMaterial( object, geometry, material, light, shadowCameraNear, shadowCameraFar, type ) { + + let result = null; + + let getMaterialVariant = getDepthMaterialVariant; + let customMaterial = object.customDepthMaterial; + + if ( light.isPointLight === true ) { + + getMaterialVariant = getDistanceMaterialVariant; + customMaterial = object.customDistanceMaterial; + + } + + if ( customMaterial === undefined ) { + + let useMorphing = false; + + if ( material.morphTargets === true ) { + + useMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0; + + } + + let useSkinning = false; + + if ( object.isSkinnedMesh === true ) { + + if ( material.skinning === true ) { + + useSkinning = true; + + } else { + + console.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object ); + + } + + } + + const useInstancing = object.isInstancedMesh === true; + + result = getMaterialVariant( useMorphing, useSkinning, useInstancing ); + + } else { + + result = customMaterial; + + } + + if ( _renderer.localClippingEnabled && + material.clipShadows === true && + material.clippingPlanes.length !== 0 ) { + + // in this case we need a unique material instance reflecting the + // appropriate state + + const keyA = result.uuid, keyB = material.uuid; + + let materialsForVariant = _materialCache[ keyA ]; + + if ( materialsForVariant === undefined ) { + + materialsForVariant = {}; + _materialCache[ keyA ] = materialsForVariant; + + } + + let cachedMaterial = materialsForVariant[ keyB ]; + + if ( cachedMaterial === undefined ) { + + cachedMaterial = result.clone(); + materialsForVariant[ keyB ] = cachedMaterial; + + } + + result = cachedMaterial; + + } + + result.visible = material.visible; + result.wireframe = material.wireframe; + + if ( type === VSMShadowMap ) { + + result.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side; + + } else { + + result.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ]; + + } + + result.clipShadows = material.clipShadows; + result.clippingPlanes = material.clippingPlanes; + result.clipIntersection = material.clipIntersection; + + result.wireframeLinewidth = material.wireframeLinewidth; + result.linewidth = material.linewidth; + + if ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) { + + result.referencePosition.setFromMatrixPosition( light.matrixWorld ); + result.nearDistance = shadowCameraNear; + result.farDistance = shadowCameraFar; + + } + + return result; + + } + + function renderObject( object, camera, shadowCamera, light, type ) { + + if ( object.visible === false ) return; + + const visible = object.layers.test( camera.layers ); + + if ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) { + + if ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) { + + object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld ); + + const geometry = _objects.update( object ); + const material = object.material; + + if ( Array.isArray( material ) ) { + + const groups = geometry.groups; + + for ( let k = 0, kl = groups.length; k < kl; k ++ ) { + + const group = groups[ k ]; + const groupMaterial = material[ group.materialIndex ]; + + if ( groupMaterial && groupMaterial.visible ) { + + const depthMaterial = getDepthMaterial( object, geometry, groupMaterial, light, shadowCamera.near, shadowCamera.far, type ); + + _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group ); + + } + + } + + } else if ( material.visible ) { + + const depthMaterial = getDepthMaterial( object, geometry, material, light, shadowCamera.near, shadowCamera.far, type ); + + _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null ); + + } + + } + + } + + const children = object.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + renderObject( children[ i ], camera, shadowCamera, light, type ); + + } + + } + + } + + function WebGLState( gl, extensions, capabilities ) { + + const isWebGL2 = capabilities.isWebGL2; + + function ColorBuffer() { + + let locked = false; + + const color = new Vector4(); + let currentColorMask = null; + const currentColorClear = new Vector4( 0, 0, 0, 0 ); + + return { + + setMask: function ( colorMask ) { + + if ( currentColorMask !== colorMask && ! locked ) { + + gl.colorMask( colorMask, colorMask, colorMask, colorMask ); + currentColorMask = colorMask; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( r, g, b, a, premultipliedAlpha ) { + + if ( premultipliedAlpha === true ) { + + r *= a; g *= a; b *= a; + + } + + color.set( r, g, b, a ); + + if ( currentColorClear.equals( color ) === false ) { + + gl.clearColor( r, g, b, a ); + currentColorClear.copy( color ); + + } + + }, + + reset: function () { + + locked = false; + + currentColorMask = null; + currentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state + + } + + }; + + } + + function DepthBuffer() { + + let locked = false; + + let currentDepthMask = null; + let currentDepthFunc = null; + let currentDepthClear = null; + + return { + + setTest: function ( depthTest ) { + + if ( depthTest ) { + + enable( 2929 ); + + } else { + + disable( 2929 ); + + } + + }, + + setMask: function ( depthMask ) { + + if ( currentDepthMask !== depthMask && ! locked ) { + + gl.depthMask( depthMask ); + currentDepthMask = depthMask; + + } + + }, + + setFunc: function ( depthFunc ) { + + if ( currentDepthFunc !== depthFunc ) { + + if ( depthFunc ) { + + switch ( depthFunc ) { + + case NeverDepth: + + gl.depthFunc( 512 ); + break; + + case AlwaysDepth: + + gl.depthFunc( 519 ); + break; + + case LessDepth: + + gl.depthFunc( 513 ); + break; + + case LessEqualDepth: + + gl.depthFunc( 515 ); + break; + + case EqualDepth: + + gl.depthFunc( 514 ); + break; + + case GreaterEqualDepth: + + gl.depthFunc( 518 ); + break; + + case GreaterDepth: + + gl.depthFunc( 516 ); + break; + + case NotEqualDepth: + + gl.depthFunc( 517 ); + break; + + default: + + gl.depthFunc( 515 ); + + } + + } else { + + gl.depthFunc( 515 ); + + } + + currentDepthFunc = depthFunc; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( depth ) { + + if ( currentDepthClear !== depth ) { + + gl.clearDepth( depth ); + currentDepthClear = depth; + + } + + }, + + reset: function () { + + locked = false; + + currentDepthMask = null; + currentDepthFunc = null; + currentDepthClear = null; + + } + + }; + + } + + function StencilBuffer() { + + let locked = false; + + let currentStencilMask = null; + let currentStencilFunc = null; + let currentStencilRef = null; + let currentStencilFuncMask = null; + let currentStencilFail = null; + let currentStencilZFail = null; + let currentStencilZPass = null; + let currentStencilClear = null; + + return { + + setTest: function ( stencilTest ) { + + if ( ! locked ) { + + if ( stencilTest ) { + + enable( 2960 ); + + } else { + + disable( 2960 ); + + } + + } + + }, + + setMask: function ( stencilMask ) { + + if ( currentStencilMask !== stencilMask && ! locked ) { + + gl.stencilMask( stencilMask ); + currentStencilMask = stencilMask; + + } + + }, + + setFunc: function ( stencilFunc, stencilRef, stencilMask ) { + + if ( currentStencilFunc !== stencilFunc || + currentStencilRef !== stencilRef || + currentStencilFuncMask !== stencilMask ) { + + gl.stencilFunc( stencilFunc, stencilRef, stencilMask ); + + currentStencilFunc = stencilFunc; + currentStencilRef = stencilRef; + currentStencilFuncMask = stencilMask; + + } + + }, + + setOp: function ( stencilFail, stencilZFail, stencilZPass ) { + + if ( currentStencilFail !== stencilFail || + currentStencilZFail !== stencilZFail || + currentStencilZPass !== stencilZPass ) { + + gl.stencilOp( stencilFail, stencilZFail, stencilZPass ); + + currentStencilFail = stencilFail; + currentStencilZFail = stencilZFail; + currentStencilZPass = stencilZPass; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( stencil ) { + + if ( currentStencilClear !== stencil ) { + + gl.clearStencil( stencil ); + currentStencilClear = stencil; + + } + + }, + + reset: function () { + + locked = false; + + currentStencilMask = null; + currentStencilFunc = null; + currentStencilRef = null; + currentStencilFuncMask = null; + currentStencilFail = null; + currentStencilZFail = null; + currentStencilZPass = null; + currentStencilClear = null; + + } + + }; + + } + + // + + const colorBuffer = new ColorBuffer(); + const depthBuffer = new DepthBuffer(); + const stencilBuffer = new StencilBuffer(); + + let enabledCapabilities = {}; + + let currentProgram = null; + + let currentBlendingEnabled = null; + let currentBlending = null; + let currentBlendEquation = null; + let currentBlendSrc = null; + let currentBlendDst = null; + let currentBlendEquationAlpha = null; + let currentBlendSrcAlpha = null; + let currentBlendDstAlpha = null; + let currentPremultipledAlpha = false; + + let currentFlipSided = null; + let currentCullFace = null; + + let currentLineWidth = null; + + let currentPolygonOffsetFactor = null; + let currentPolygonOffsetUnits = null; + + const maxTextures = gl.getParameter( 35661 ); + + let lineWidthAvailable = false; + let version = 0; + const glVersion = gl.getParameter( 7938 ); + + if ( glVersion.indexOf( 'WebGL' ) !== - 1 ) { + + version = parseFloat( /^WebGL\ ([0-9])/.exec( glVersion )[ 1 ] ); + lineWidthAvailable = ( version >= 1.0 ); + + } else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) { + + version = parseFloat( /^OpenGL\ ES\ ([0-9])/.exec( glVersion )[ 1 ] ); + lineWidthAvailable = ( version >= 2.0 ); + + } + + let currentTextureSlot = null; + let currentBoundTextures = {}; + + const currentScissor = new Vector4(); + const currentViewport = new Vector4(); + + function createTexture( type, target, count ) { + + const data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4. + const texture = gl.createTexture(); + + gl.bindTexture( type, texture ); + gl.texParameteri( type, 10241, 9728 ); + gl.texParameteri( type, 10240, 9728 ); + + for ( let i = 0; i < count; i ++ ) { + + gl.texImage2D( target + i, 0, 6408, 1, 1, 0, 6408, 5121, data ); + + } + + return texture; + + } + + const emptyTextures = {}; + emptyTextures[ 3553 ] = createTexture( 3553, 3553, 1 ); + emptyTextures[ 34067 ] = createTexture( 34067, 34069, 6 ); + + // init + + colorBuffer.setClear( 0, 0, 0, 1 ); + depthBuffer.setClear( 1 ); + stencilBuffer.setClear( 0 ); + + enable( 2929 ); + depthBuffer.setFunc( LessEqualDepth ); + + setFlipSided( false ); + setCullFace( CullFaceBack ); + enable( 2884 ); + + setBlending( NoBlending ); + + // + + function enable( id ) { + + if ( enabledCapabilities[ id ] !== true ) { + + gl.enable( id ); + enabledCapabilities[ id ] = true; + + } + + } + + function disable( id ) { + + if ( enabledCapabilities[ id ] !== false ) { + + gl.disable( id ); + enabledCapabilities[ id ] = false; + + } + + } + + function useProgram( program ) { + + if ( currentProgram !== program ) { + + gl.useProgram( program ); + + currentProgram = program; + + return true; + + } + + return false; + + } + + const equationToGL = { + [ AddEquation ]: 32774, + [ SubtractEquation ]: 32778, + [ ReverseSubtractEquation ]: 32779 + }; + + if ( isWebGL2 ) { + + equationToGL[ MinEquation ] = 32775; + equationToGL[ MaxEquation ] = 32776; + + } else { + + const extension = extensions.get( 'EXT_blend_minmax' ); + + if ( extension !== null ) { + + equationToGL[ MinEquation ] = extension.MIN_EXT; + equationToGL[ MaxEquation ] = extension.MAX_EXT; + + } + + } + + const factorToGL = { + [ ZeroFactor ]: 0, + [ OneFactor ]: 1, + [ SrcColorFactor ]: 768, + [ SrcAlphaFactor ]: 770, + [ SrcAlphaSaturateFactor ]: 776, + [ DstColorFactor ]: 774, + [ DstAlphaFactor ]: 772, + [ OneMinusSrcColorFactor ]: 769, + [ OneMinusSrcAlphaFactor ]: 771, + [ OneMinusDstColorFactor ]: 775, + [ OneMinusDstAlphaFactor ]: 773 + }; + + function setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) { + + if ( blending === NoBlending ) { + + if ( currentBlendingEnabled ) { + + disable( 3042 ); + currentBlendingEnabled = false; + + } + + return; + + } + + if ( ! currentBlendingEnabled ) { + + enable( 3042 ); + currentBlendingEnabled = true; + + } + + if ( blending !== CustomBlending ) { + + if ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) { + + if ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) { + + gl.blendEquation( 32774 ); + + currentBlendEquation = AddEquation; + currentBlendEquationAlpha = AddEquation; + + } + + if ( premultipliedAlpha ) { + + switch ( blending ) { + + case NormalBlending: + gl.blendFuncSeparate( 1, 771, 1, 771 ); + break; + + case AdditiveBlending: + gl.blendFunc( 1, 1 ); + break; + + case SubtractiveBlending: + gl.blendFuncSeparate( 0, 0, 769, 771 ); + break; + + case MultiplyBlending: + gl.blendFuncSeparate( 0, 768, 0, 770 ); + break; + + default: + console.error( 'THREE.WebGLState: Invalid blending: ', blending ); + break; + + } + + } else { + + switch ( blending ) { + + case NormalBlending: + gl.blendFuncSeparate( 770, 771, 1, 771 ); + break; + + case AdditiveBlending: + gl.blendFunc( 770, 1 ); + break; + + case SubtractiveBlending: + gl.blendFunc( 0, 769 ); + break; + + case MultiplyBlending: + gl.blendFunc( 0, 768 ); + break; + + default: + console.error( 'THREE.WebGLState: Invalid blending: ', blending ); + break; + + } + + } + + currentBlendSrc = null; + currentBlendDst = null; + currentBlendSrcAlpha = null; + currentBlendDstAlpha = null; + + currentBlending = blending; + currentPremultipledAlpha = premultipliedAlpha; + + } + + return; + + } + + // custom blending + + blendEquationAlpha = blendEquationAlpha || blendEquation; + blendSrcAlpha = blendSrcAlpha || blendSrc; + blendDstAlpha = blendDstAlpha || blendDst; + + if ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) { + + gl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] ); + + currentBlendEquation = blendEquation; + currentBlendEquationAlpha = blendEquationAlpha; + + } + + if ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) { + + gl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] ); + + currentBlendSrc = blendSrc; + currentBlendDst = blendDst; + currentBlendSrcAlpha = blendSrcAlpha; + currentBlendDstAlpha = blendDstAlpha; + + } + + currentBlending = blending; + currentPremultipledAlpha = null; + + } + + function setMaterial( material, frontFaceCW ) { + + material.side === DoubleSide + ? disable( 2884 ) + : enable( 2884 ); + + let flipSided = ( material.side === BackSide ); + if ( frontFaceCW ) flipSided = ! flipSided; + + setFlipSided( flipSided ); + + ( material.blending === NormalBlending && material.transparent === false ) + ? setBlending( NoBlending ) + : setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha ); + + depthBuffer.setFunc( material.depthFunc ); + depthBuffer.setTest( material.depthTest ); + depthBuffer.setMask( material.depthWrite ); + colorBuffer.setMask( material.colorWrite ); + + const stencilWrite = material.stencilWrite; + stencilBuffer.setTest( stencilWrite ); + if ( stencilWrite ) { + + stencilBuffer.setMask( material.stencilWriteMask ); + stencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask ); + stencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass ); + + } + + setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); + + } + + // + + function setFlipSided( flipSided ) { + + if ( currentFlipSided !== flipSided ) { + + if ( flipSided ) { + + gl.frontFace( 2304 ); + + } else { + + gl.frontFace( 2305 ); + + } + + currentFlipSided = flipSided; + + } + + } + + function setCullFace( cullFace ) { + + if ( cullFace !== CullFaceNone ) { + + enable( 2884 ); + + if ( cullFace !== currentCullFace ) { + + if ( cullFace === CullFaceBack ) { + + gl.cullFace( 1029 ); + + } else if ( cullFace === CullFaceFront ) { + + gl.cullFace( 1028 ); + + } else { + + gl.cullFace( 1032 ); + + } + + } + + } else { + + disable( 2884 ); + + } + + currentCullFace = cullFace; + + } + + function setLineWidth( width ) { + + if ( width !== currentLineWidth ) { + + if ( lineWidthAvailable ) gl.lineWidth( width ); + + currentLineWidth = width; + + } + + } + + function setPolygonOffset( polygonOffset, factor, units ) { + + if ( polygonOffset ) { + + enable( 32823 ); + + if ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) { + + gl.polygonOffset( factor, units ); + + currentPolygonOffsetFactor = factor; + currentPolygonOffsetUnits = units; + + } + + } else { + + disable( 32823 ); + + } + + } + + function setScissorTest( scissorTest ) { + + if ( scissorTest ) { + + enable( 3089 ); + + } else { + + disable( 3089 ); + + } + + } + + // texture + + function activeTexture( webglSlot ) { + + if ( webglSlot === undefined ) webglSlot = 33984 + maxTextures - 1; + + if ( currentTextureSlot !== webglSlot ) { + + gl.activeTexture( webglSlot ); + currentTextureSlot = webglSlot; + + } + + } + + function bindTexture( webglType, webglTexture ) { + + if ( currentTextureSlot === null ) { + + activeTexture(); + + } + + let boundTexture = currentBoundTextures[ currentTextureSlot ]; + + if ( boundTexture === undefined ) { + + boundTexture = { type: undefined, texture: undefined }; + currentBoundTextures[ currentTextureSlot ] = boundTexture; + + } + + if ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) { + + gl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] ); + + boundTexture.type = webglType; + boundTexture.texture = webglTexture; + + } + + } + + function unbindTexture() { + + const boundTexture = currentBoundTextures[ currentTextureSlot ]; + + if ( boundTexture !== undefined && boundTexture.type !== undefined ) { + + gl.bindTexture( boundTexture.type, null ); + + boundTexture.type = undefined; + boundTexture.texture = undefined; + + } + + } + + function compressedTexImage2D() { + + try { + + gl.compressedTexImage2D.apply( gl, arguments ); + + } catch ( error ) { + + console.error( 'THREE.WebGLState:', error ); + + } + + } + + function texImage2D() { + + try { + + gl.texImage2D.apply( gl, arguments ); + + } catch ( error ) { + + console.error( 'THREE.WebGLState:', error ); + + } + + } + + function texImage3D() { + + try { + + gl.texImage3D.apply( gl, arguments ); + + } catch ( error ) { + + console.error( 'THREE.WebGLState:', error ); + + } + + } + + // + + function scissor( scissor ) { + + if ( currentScissor.equals( scissor ) === false ) { + + gl.scissor( scissor.x, scissor.y, scissor.z, scissor.w ); + currentScissor.copy( scissor ); + + } + + } + + function viewport( viewport ) { + + if ( currentViewport.equals( viewport ) === false ) { + + gl.viewport( viewport.x, viewport.y, viewport.z, viewport.w ); + currentViewport.copy( viewport ); + + } + + } + + // + + function reset() { + + enabledCapabilities = {}; + + currentTextureSlot = null; + currentBoundTextures = {}; + + currentProgram = null; + + currentBlendingEnabled = null; + currentBlending = null; + currentBlendEquation = null; + currentBlendSrc = null; + currentBlendDst = null; + currentBlendEquationAlpha = null; + currentBlendSrcAlpha = null; + currentBlendDstAlpha = null; + currentPremultipledAlpha = false; + + currentFlipSided = null; + currentCullFace = null; + + currentLineWidth = null; + + currentPolygonOffsetFactor = null; + currentPolygonOffsetUnits = null; + + colorBuffer.reset(); + depthBuffer.reset(); + stencilBuffer.reset(); + + } + + return { + + buffers: { + color: colorBuffer, + depth: depthBuffer, + stencil: stencilBuffer + }, + + enable: enable, + disable: disable, + + useProgram: useProgram, + + setBlending: setBlending, + setMaterial: setMaterial, + + setFlipSided: setFlipSided, + setCullFace: setCullFace, + + setLineWidth: setLineWidth, + setPolygonOffset: setPolygonOffset, + + setScissorTest: setScissorTest, + + activeTexture: activeTexture, + bindTexture: bindTexture, + unbindTexture: unbindTexture, + compressedTexImage2D: compressedTexImage2D, + texImage2D: texImage2D, + texImage3D: texImage3D, + + scissor: scissor, + viewport: viewport, + + reset: reset + + }; + + } + + function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) { + + const isWebGL2 = capabilities.isWebGL2; + const maxTextures = capabilities.maxTextures; + const maxCubemapSize = capabilities.maxCubemapSize; + const maxTextureSize = capabilities.maxTextureSize; + const maxSamples = capabilities.maxSamples; + + const _videoTextures = new WeakMap(); + let _canvas; + + // cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas, + // also OffscreenCanvas.getContext("webgl"), but not OffscreenCanvas.getContext("2d")! + // Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d). + + let useOffscreenCanvas = false; + + try { + + useOffscreenCanvas = typeof OffscreenCanvas !== 'undefined' + && ( new OffscreenCanvas( 1, 1 ).getContext( "2d" ) ) !== null; + + } catch ( err ) { + + // Ignore any errors + + } + + function createCanvas( width, height ) { + + // Use OffscreenCanvas when available. Specially needed in web workers + + return useOffscreenCanvas ? + new OffscreenCanvas( width, height ) : + document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + + } + + function resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) { + + let scale = 1; + + // handle case if texture exceeds max size + + if ( image.width > maxSize || image.height > maxSize ) { + + scale = maxSize / Math.max( image.width, image.height ); + + } + + // only perform resize if necessary + + if ( scale < 1 || needsPowerOfTwo === true ) { + + // only perform resize for certain image types + + if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) || + ( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) || + ( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) { + + const floor = needsPowerOfTwo ? MathUtils.floorPowerOfTwo : Math.floor; + + const width = floor( scale * image.width ); + const height = floor( scale * image.height ); + + if ( _canvas === undefined ) _canvas = createCanvas( width, height ); + + // cube textures can't reuse the same canvas + + const canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas; + + canvas.width = width; + canvas.height = height; + + const context = canvas.getContext( '2d' ); + context.drawImage( image, 0, 0, width, height ); + + console.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' ); + + return canvas; + + } else { + + if ( 'data' in image ) { + + console.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' ); + + } + + return image; + + } + + } + + return image; + + } + + function isPowerOfTwo( image ) { + + return MathUtils.isPowerOfTwo( image.width ) && MathUtils.isPowerOfTwo( image.height ); + + } + + function textureNeedsPowerOfTwo( texture ) { + + if ( isWebGL2 ) return false; + + return ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) || + ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ); + + } + + function textureNeedsGenerateMipmaps( texture, supportsMips ) { + + return texture.generateMipmaps && supportsMips && + texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter; + + } + + function generateMipmap( target, texture, width, height ) { + + _gl.generateMipmap( target ); + + const textureProperties = properties.get( texture ); + + // Note: Math.log( x ) * Math.LOG2E used instead of Math.log2( x ) which is not supported by IE11 + textureProperties.__maxMipLevel = Math.log( Math.max( width, height ) ) * Math.LOG2E; + + } + + function getInternalFormat( internalFormatName, glFormat, glType ) { + + if ( isWebGL2 === false ) return glFormat; + + if ( internalFormatName !== null ) { + + if ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ]; + + console.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \'' + internalFormatName + '\'' ); + + } + + let internalFormat = glFormat; + + if ( glFormat === 6403 ) { + + if ( glType === 5126 ) internalFormat = 33326; + if ( glType === 5131 ) internalFormat = 33325; + if ( glType === 5121 ) internalFormat = 33321; + + } + + if ( glFormat === 6407 ) { + + if ( glType === 5126 ) internalFormat = 34837; + if ( glType === 5131 ) internalFormat = 34843; + if ( glType === 5121 ) internalFormat = 32849; + + } + + if ( glFormat === 6408 ) { + + if ( glType === 5126 ) internalFormat = 34836; + if ( glType === 5131 ) internalFormat = 34842; + if ( glType === 5121 ) internalFormat = 32856; + + } + + if ( internalFormat === 33325 || internalFormat === 33326 || + internalFormat === 34842 || internalFormat === 34836 ) { + + extensions.get( 'EXT_color_buffer_float' ); + + } + + return internalFormat; + + } + + // Fallback filters for non-power-of-2 textures + + function filterFallback( f ) { + + if ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) { + + return 9728; + + } + + return 9729; + + } + + // + + function onTextureDispose( event ) { + + const texture = event.target; + + texture.removeEventListener( 'dispose', onTextureDispose ); + + deallocateTexture( texture ); + + if ( texture.isVideoTexture ) { + + _videoTextures.delete( texture ); + + } + + info.memory.textures --; + + } + + function onRenderTargetDispose( event ) { + + const renderTarget = event.target; + + renderTarget.removeEventListener( 'dispose', onRenderTargetDispose ); + + deallocateRenderTarget( renderTarget ); + + info.memory.textures --; + + } + + // + + function deallocateTexture( texture ) { + + const textureProperties = properties.get( texture ); + + if ( textureProperties.__webglInit === undefined ) return; + + _gl.deleteTexture( textureProperties.__webglTexture ); + + properties.remove( texture ); + + } + + function deallocateRenderTarget( renderTarget ) { + + const renderTargetProperties = properties.get( renderTarget ); + const textureProperties = properties.get( renderTarget.texture ); + + if ( ! renderTarget ) return; + + if ( textureProperties.__webglTexture !== undefined ) { + + _gl.deleteTexture( textureProperties.__webglTexture ); + + } + + if ( renderTarget.depthTexture ) { + + renderTarget.depthTexture.dispose(); + + } + + if ( renderTarget.isWebGLCubeRenderTarget ) { + + for ( let i = 0; i < 6; i ++ ) { + + _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] ); + if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] ); + + } + + } else { + + _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer ); + if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer ); + if ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer ); + if ( renderTargetProperties.__webglColorRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer ); + if ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer ); + + } + + properties.remove( renderTarget.texture ); + properties.remove( renderTarget ); + + } + + // + + let textureUnits = 0; + + function resetTextureUnits() { + + textureUnits = 0; + + } + + function allocateTextureUnit() { + + const textureUnit = textureUnits; + + if ( textureUnit >= maxTextures ) { + + console.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures ); + + } + + textureUnits += 1; + + return textureUnit; + + } + + // + + function setTexture2D( texture, slot ) { + + const textureProperties = properties.get( texture ); + + if ( texture.isVideoTexture ) updateVideoTexture( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + const image = texture.image; + + if ( image === undefined ) { + + console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined' ); + + } else if ( image.complete === false ) { + + console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' ); + + } else { + + uploadTexture( textureProperties, texture, slot ); + return; + + } + + } + + state.activeTexture( 33984 + slot ); + state.bindTexture( 3553, textureProperties.__webglTexture ); + + } + + function setTexture2DArray( texture, slot ) { + + const textureProperties = properties.get( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + uploadTexture( textureProperties, texture, slot ); + return; + + } + + state.activeTexture( 33984 + slot ); + state.bindTexture( 35866, textureProperties.__webglTexture ); + + } + + function setTexture3D( texture, slot ) { + + const textureProperties = properties.get( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + uploadTexture( textureProperties, texture, slot ); + return; + + } + + state.activeTexture( 33984 + slot ); + state.bindTexture( 32879, textureProperties.__webglTexture ); + + } + + function setTextureCube( texture, slot ) { + + const textureProperties = properties.get( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + uploadCubeTexture( textureProperties, texture, slot ); + return; + + } + + state.activeTexture( 33984 + slot ); + state.bindTexture( 34067, textureProperties.__webglTexture ); + + } + + const wrappingToGL = { + [ RepeatWrapping ]: 10497, + [ ClampToEdgeWrapping ]: 33071, + [ MirroredRepeatWrapping ]: 33648 + }; + + const filterToGL = { + [ NearestFilter ]: 9728, + [ NearestMipmapNearestFilter ]: 9984, + [ NearestMipmapLinearFilter ]: 9986, + + [ LinearFilter ]: 9729, + [ LinearMipmapNearestFilter ]: 9985, + [ LinearMipmapLinearFilter ]: 9987 + }; + + function setTextureParameters( textureType, texture, supportsMips ) { + + if ( supportsMips ) { + + _gl.texParameteri( textureType, 10242, wrappingToGL[ texture.wrapS ] ); + _gl.texParameteri( textureType, 10243, wrappingToGL[ texture.wrapT ] ); + + if ( textureType === 32879 || textureType === 35866 ) { + + _gl.texParameteri( textureType, 32882, wrappingToGL[ texture.wrapR ] ); + + } + + _gl.texParameteri( textureType, 10240, filterToGL[ texture.magFilter ] ); + _gl.texParameteri( textureType, 10241, filterToGL[ texture.minFilter ] ); + + } else { + + _gl.texParameteri( textureType, 10242, 33071 ); + _gl.texParameteri( textureType, 10243, 33071 ); + + if ( textureType === 32879 || textureType === 35866 ) { + + _gl.texParameteri( textureType, 32882, 33071 ); + + } + + if ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) { + + console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' ); + + } + + _gl.texParameteri( textureType, 10240, filterFallback( texture.magFilter ) ); + _gl.texParameteri( textureType, 10241, filterFallback( texture.minFilter ) ); + + if ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) { + + console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' ); + + } + + } + + const extension = extensions.get( 'EXT_texture_filter_anisotropic' ); + + if ( extension ) { + + if ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return; + if ( texture.type === HalfFloatType && ( isWebGL2 || extensions.get( 'OES_texture_half_float_linear' ) ) === null ) return; + + if ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) { + + _gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) ); + properties.get( texture ).__currentAnisotropy = texture.anisotropy; + + } + + } + + } + + function initTexture( textureProperties, texture ) { + + if ( textureProperties.__webglInit === undefined ) { + + textureProperties.__webglInit = true; + + texture.addEventListener( 'dispose', onTextureDispose ); + + textureProperties.__webglTexture = _gl.createTexture(); + + info.memory.textures ++; + + } + + } + + function uploadTexture( textureProperties, texture, slot ) { + + let textureType = 3553; + + if ( texture.isDataTexture2DArray ) textureType = 35866; + if ( texture.isDataTexture3D ) textureType = 32879; + + initTexture( textureProperties, texture ); + + state.activeTexture( 33984 + slot ); + state.bindTexture( textureType, textureProperties.__webglTexture ); + + _gl.pixelStorei( 37440, texture.flipY ); + _gl.pixelStorei( 37441, texture.premultiplyAlpha ); + _gl.pixelStorei( 3317, texture.unpackAlignment ); + + const needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( texture.image ) === false; + const image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize ); + + const supportsMips = isPowerOfTwo( image ) || isWebGL2, + glFormat = utils.convert( texture.format ); + + let glType = utils.convert( texture.type ), + glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType ); + + setTextureParameters( textureType, texture, supportsMips ); + + let mipmap; + const mipmaps = texture.mipmaps; + + if ( texture.isDepthTexture ) { + + // populate depth texture with dummy data + + glInternalFormat = 6402; + + if ( isWebGL2 ) { + + if ( texture.type === FloatType ) { + + glInternalFormat = 36012; + + } else if ( texture.type === UnsignedIntType ) { + + glInternalFormat = 33190; + + } else if ( texture.type === UnsignedInt248Type ) { + + glInternalFormat = 35056; + + } else { + + glInternalFormat = 33189; // WebGL2 requires sized internalformat for glTexImage2D + + } + + } else { + + if ( texture.type === FloatType ) { + + console.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' ); + + } + + } + + // validation checks for WebGL 1 + + if ( texture.format === DepthFormat && glInternalFormat === 6402 ) { + + // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are + // DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + if ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) { + + console.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' ); + + texture.type = UnsignedShortType; + glType = utils.convert( texture.type ); + + } + + } + + if ( texture.format === DepthStencilFormat && glInternalFormat === 6402 ) { + + // Depth stencil textures need the DEPTH_STENCIL internal format + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + glInternalFormat = 34041; + + // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are + // DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL. + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + if ( texture.type !== UnsignedInt248Type ) { + + console.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' ); + + texture.type = UnsignedInt248Type; + glType = utils.convert( texture.type ); + + } + + } + + // + + state.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null ); + + } else if ( texture.isDataTexture ) { + + // use manually created mipmaps if available + // if there are no manual mipmaps + // set 0 level mipmap and then use GL to generate other mipmap levels + + if ( mipmaps.length > 0 && supportsMips ) { + + for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + state.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + texture.generateMipmaps = false; + textureProperties.__maxMipLevel = mipmaps.length - 1; + + } else { + + state.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data ); + textureProperties.__maxMipLevel = 0; + + } + + } else if ( texture.isCompressedTexture ) { + + for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + + if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) { + + if ( glFormat !== null ) { + + state.compressedTexImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data ); + + } else { + + console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' ); + + } + + } else { + + state.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + } + + textureProperties.__maxMipLevel = mipmaps.length - 1; + + } else if ( texture.isDataTexture2DArray ) { + + state.texImage3D( 35866, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data ); + textureProperties.__maxMipLevel = 0; + + } else if ( texture.isDataTexture3D ) { + + state.texImage3D( 32879, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data ); + textureProperties.__maxMipLevel = 0; + + } else { + + // regular Texture (image, video, canvas) + + // use manually created mipmaps if available + // if there are no manual mipmaps + // set 0 level mipmap and then use GL to generate other mipmap levels + + if ( mipmaps.length > 0 && supportsMips ) { + + for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + state.texImage2D( 3553, i, glInternalFormat, glFormat, glType, mipmap ); + + } + + texture.generateMipmaps = false; + textureProperties.__maxMipLevel = mipmaps.length - 1; + + } else { + + state.texImage2D( 3553, 0, glInternalFormat, glFormat, glType, image ); + textureProperties.__maxMipLevel = 0; + + } + + } + + if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { + + generateMipmap( textureType, texture, image.width, image.height ); + + } + + textureProperties.__version = texture.version; + + if ( texture.onUpdate ) texture.onUpdate( texture ); + + } + + function uploadCubeTexture( textureProperties, texture, slot ) { + + if ( texture.image.length !== 6 ) return; + + initTexture( textureProperties, texture ); + + state.activeTexture( 33984 + slot ); + state.bindTexture( 34067, textureProperties.__webglTexture ); + + _gl.pixelStorei( 37440, texture.flipY ); + + const isCompressed = ( texture && ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture ) ); + const isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture ); + + const cubeImage = []; + + for ( let i = 0; i < 6; i ++ ) { + + if ( ! isCompressed && ! isDataTexture ) { + + cubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize ); + + } else { + + cubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ]; + + } + + } + + const image = cubeImage[ 0 ], + supportsMips = isPowerOfTwo( image ) || isWebGL2, + glFormat = utils.convert( texture.format ), + glType = utils.convert( texture.type ), + glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType ); + + setTextureParameters( 34067, texture, supportsMips ); + + let mipmaps; + + if ( isCompressed ) { + + for ( let i = 0; i < 6; i ++ ) { + + mipmaps = cubeImage[ i ].mipmaps; + + for ( let j = 0; j < mipmaps.length; j ++ ) { + + const mipmap = mipmaps[ j ]; + + if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) { + + if ( glFormat !== null ) { + + state.compressedTexImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data ); + + } else { + + console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' ); + + } + + } else { + + state.texImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + } + + } + + textureProperties.__maxMipLevel = mipmaps.length - 1; + + } else { + + mipmaps = texture.mipmaps; + + for ( let i = 0; i < 6; i ++ ) { + + if ( isDataTexture ) { + + state.texImage2D( 34069 + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data ); + + for ( let j = 0; j < mipmaps.length; j ++ ) { + + const mipmap = mipmaps[ j ]; + const mipmapImage = mipmap.image[ i ].image; + + state.texImage2D( 34069 + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data ); + + } + + } else { + + state.texImage2D( 34069 + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] ); + + for ( let j = 0; j < mipmaps.length; j ++ ) { + + const mipmap = mipmaps[ j ]; + + state.texImage2D( 34069 + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] ); + + } + + } + + } + + textureProperties.__maxMipLevel = mipmaps.length; + + } + + if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { + + // We assume images for cube map have the same size. + generateMipmap( 34067, texture, image.width, image.height ); + + } + + textureProperties.__version = texture.version; + + if ( texture.onUpdate ) texture.onUpdate( texture ); + + } + + // Render targets + + // Setup storage for target texture and bind it to correct framebuffer + function setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) { + + const glFormat = utils.convert( renderTarget.texture.format ); + const glType = utils.convert( renderTarget.texture.type ); + const glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType ); + state.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null ); + _gl.bindFramebuffer( 36160, framebuffer ); + _gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 ); + _gl.bindFramebuffer( 36160, null ); + + } + + // Setup storage for internal depth/stencil buffers and bind to correct framebuffer + function setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) { + + _gl.bindRenderbuffer( 36161, renderbuffer ); + + if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) { + + let glInternalFormat = 33189; + + if ( isMultisample ) { + + const depthTexture = renderTarget.depthTexture; + + if ( depthTexture && depthTexture.isDepthTexture ) { + + if ( depthTexture.type === FloatType ) { + + glInternalFormat = 36012; + + } else if ( depthTexture.type === UnsignedIntType ) { + + glInternalFormat = 33190; + + } + + } + + const samples = getRenderTargetSamples( renderTarget ); + + _gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height ); + + } else { + + _gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height ); + + } + + _gl.framebufferRenderbuffer( 36160, 36096, 36161, renderbuffer ); + + } else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) { + + if ( isMultisample ) { + + const samples = getRenderTargetSamples( renderTarget ); + + _gl.renderbufferStorageMultisample( 36161, samples, 35056, renderTarget.width, renderTarget.height ); + + } else { + + _gl.renderbufferStorage( 36161, 34041, renderTarget.width, renderTarget.height ); + + } + + + _gl.framebufferRenderbuffer( 36160, 33306, 36161, renderbuffer ); + + } else { + + const glFormat = utils.convert( renderTarget.texture.format ); + const glType = utils.convert( renderTarget.texture.type ); + const glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType ); + + if ( isMultisample ) { + + const samples = getRenderTargetSamples( renderTarget ); + + _gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height ); + + } else { + + _gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height ); + + } + + } + + _gl.bindRenderbuffer( 36161, null ); + + } + + // Setup resources for a Depth Texture for a FBO (needs an extension) + function setupDepthTexture( framebuffer, renderTarget ) { + + const isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget ); + if ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' ); + + _gl.bindFramebuffer( 36160, framebuffer ); + + if ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) { + + throw new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' ); + + } + + // upload an empty depth texture with framebuffer size + if ( ! properties.get( renderTarget.depthTexture ).__webglTexture || + renderTarget.depthTexture.image.width !== renderTarget.width || + renderTarget.depthTexture.image.height !== renderTarget.height ) { + + renderTarget.depthTexture.image.width = renderTarget.width; + renderTarget.depthTexture.image.height = renderTarget.height; + renderTarget.depthTexture.needsUpdate = true; + + } + + setTexture2D( renderTarget.depthTexture, 0 ); + + const webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture; + + if ( renderTarget.depthTexture.format === DepthFormat ) { + + _gl.framebufferTexture2D( 36160, 36096, 3553, webglDepthTexture, 0 ); + + } else if ( renderTarget.depthTexture.format === DepthStencilFormat ) { + + _gl.framebufferTexture2D( 36160, 33306, 3553, webglDepthTexture, 0 ); + + } else { + + throw new Error( 'Unknown depthTexture format' ); + + } + + } + + // Setup GL resources for a non-texture depth buffer + function setupDepthRenderbuffer( renderTarget ) { + + const renderTargetProperties = properties.get( renderTarget ); + + const isCube = ( renderTarget.isWebGLCubeRenderTarget === true ); + + if ( renderTarget.depthTexture ) { + + if ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' ); + + setupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget ); + + } else { + + if ( isCube ) { + + renderTargetProperties.__webglDepthbuffer = []; + + for ( let i = 0; i < 6; i ++ ) { + + _gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer[ i ] ); + renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer(); + setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false ); + + } + + } else { + + _gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer ); + renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer(); + setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false ); + + } + + } + + _gl.bindFramebuffer( 36160, null ); + + } + + // Set up GL resources for the render target + function setupRenderTarget( renderTarget ) { + + const renderTargetProperties = properties.get( renderTarget ); + const textureProperties = properties.get( renderTarget.texture ); + + renderTarget.addEventListener( 'dispose', onRenderTargetDispose ); + + textureProperties.__webglTexture = _gl.createTexture(); + + info.memory.textures ++; + + const isCube = ( renderTarget.isWebGLCubeRenderTarget === true ); + const isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true ); + const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2; + + // Handles WebGL2 RGBFormat fallback - #18858 + + if ( isWebGL2 && renderTarget.texture.format === RGBFormat && ( renderTarget.texture.type === FloatType || renderTarget.texture.type === HalfFloatType ) ) { + + renderTarget.texture.format = RGBAFormat; + + console.warn( 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.' ); + + } + + // Setup framebuffer + + if ( isCube ) { + + renderTargetProperties.__webglFramebuffer = []; + + for ( let i = 0; i < 6; i ++ ) { + + renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer(); + + } + + } else { + + renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer(); + + if ( isMultisample ) { + + if ( isWebGL2 ) { + + renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer(); + renderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer(); + + _gl.bindRenderbuffer( 36161, renderTargetProperties.__webglColorRenderbuffer ); + + const glFormat = utils.convert( renderTarget.texture.format ); + const glType = utils.convert( renderTarget.texture.type ); + const glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType ); + const samples = getRenderTargetSamples( renderTarget ); + _gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height ); + + _gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer ); + _gl.framebufferRenderbuffer( 36160, 36064, 36161, renderTargetProperties.__webglColorRenderbuffer ); + _gl.bindRenderbuffer( 36161, null ); + + if ( renderTarget.depthBuffer ) { + + renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer(); + setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true ); + + } + + _gl.bindFramebuffer( 36160, null ); + + + } else { + + console.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' ); + + } + + } + + } + + // Setup color buffer + + if ( isCube ) { + + state.bindTexture( 34067, textureProperties.__webglTexture ); + setTextureParameters( 34067, renderTarget.texture, supportsMips ); + + for ( let i = 0; i < 6; i ++ ) { + + setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, 36064, 34069 + i ); + + } + + if ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) { + + generateMipmap( 34067, renderTarget.texture, renderTarget.width, renderTarget.height ); + + } + + state.bindTexture( 34067, null ); + + } else { + + state.bindTexture( 3553, textureProperties.__webglTexture ); + setTextureParameters( 3553, renderTarget.texture, supportsMips ); + setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, 36064, 3553 ); + + if ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) { + + generateMipmap( 3553, renderTarget.texture, renderTarget.width, renderTarget.height ); + + } + + state.bindTexture( 3553, null ); + + } + + // Setup depth and stencil buffers + + if ( renderTarget.depthBuffer ) { + + setupDepthRenderbuffer( renderTarget ); + + } + + } + + function updateRenderTargetMipmap( renderTarget ) { + + const texture = renderTarget.texture; + const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2; + + if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { + + const target = renderTarget.isWebGLCubeRenderTarget ? 34067 : 3553; + const webglTexture = properties.get( texture ).__webglTexture; + + state.bindTexture( target, webglTexture ); + generateMipmap( target, texture, renderTarget.width, renderTarget.height ); + state.bindTexture( target, null ); + + } + + } + + function updateMultisampleRenderTarget( renderTarget ) { + + if ( renderTarget.isWebGLMultisampleRenderTarget ) { + + if ( isWebGL2 ) { + + const renderTargetProperties = properties.get( renderTarget ); + + _gl.bindFramebuffer( 36008, renderTargetProperties.__webglMultisampledFramebuffer ); + _gl.bindFramebuffer( 36009, renderTargetProperties.__webglFramebuffer ); + + const width = renderTarget.width; + const height = renderTarget.height; + let mask = 16384; + + if ( renderTarget.depthBuffer ) mask |= 256; + if ( renderTarget.stencilBuffer ) mask |= 1024; + + _gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, 9728 ); + + _gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer ); // see #18905 + + } else { + + console.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' ); + + } + + } + + } + + function getRenderTargetSamples( renderTarget ) { + + return ( isWebGL2 && renderTarget.isWebGLMultisampleRenderTarget ) ? + Math.min( maxSamples, renderTarget.samples ) : 0; + + } + + function updateVideoTexture( texture ) { + + const frame = info.render.frame; + + // Check the last frame we updated the VideoTexture + + if ( _videoTextures.get( texture ) !== frame ) { + + _videoTextures.set( texture, frame ); + texture.update(); + + } + + } + + // backwards compatibility + + let warnedTexture2D = false; + let warnedTextureCube = false; + + function safeSetTexture2D( texture, slot ) { + + if ( texture && texture.isWebGLRenderTarget ) { + + if ( warnedTexture2D === false ) { + + console.warn( "THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead." ); + warnedTexture2D = true; + + } + + texture = texture.texture; + + } + + setTexture2D( texture, slot ); + + } + + function safeSetTextureCube( texture, slot ) { + + if ( texture && texture.isWebGLCubeRenderTarget ) { + + if ( warnedTextureCube === false ) { + + console.warn( "THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead." ); + warnedTextureCube = true; + + } + + texture = texture.texture; + + } + + + setTextureCube( texture, slot ); + + } + + // + + this.allocateTextureUnit = allocateTextureUnit; + this.resetTextureUnits = resetTextureUnits; + + this.setTexture2D = setTexture2D; + this.setTexture2DArray = setTexture2DArray; + this.setTexture3D = setTexture3D; + this.setTextureCube = setTextureCube; + this.setupRenderTarget = setupRenderTarget; + this.updateRenderTargetMipmap = updateRenderTargetMipmap; + this.updateMultisampleRenderTarget = updateMultisampleRenderTarget; + + this.safeSetTexture2D = safeSetTexture2D; + this.safeSetTextureCube = safeSetTextureCube; + + } + + function WebGLUtils( gl, extensions, capabilities ) { + + const isWebGL2 = capabilities.isWebGL2; + + function convert( p ) { + + let extension; + + if ( p === UnsignedByteType ) return 5121; + if ( p === UnsignedShort4444Type ) return 32819; + if ( p === UnsignedShort5551Type ) return 32820; + if ( p === UnsignedShort565Type ) return 33635; + + if ( p === ByteType ) return 5120; + if ( p === ShortType ) return 5122; + if ( p === UnsignedShortType ) return 5123; + if ( p === IntType ) return 5124; + if ( p === UnsignedIntType ) return 5125; + if ( p === FloatType ) return 5126; + + if ( p === HalfFloatType ) { + + if ( isWebGL2 ) return 5131; + + extension = extensions.get( 'OES_texture_half_float' ); + + if ( extension !== null ) { + + return extension.HALF_FLOAT_OES; + + } else { + + return null; + + } + + } + + if ( p === AlphaFormat ) return 6406; + if ( p === RGBFormat ) return 6407; + if ( p === RGBAFormat ) return 6408; + if ( p === LuminanceFormat ) return 6409; + if ( p === LuminanceAlphaFormat ) return 6410; + if ( p === DepthFormat ) return 6402; + if ( p === DepthStencilFormat ) return 34041; + if ( p === RedFormat ) return 6403; + + // WebGL2 formats. + + if ( p === RedIntegerFormat ) return 36244; + if ( p === RGFormat ) return 33319; + if ( p === RGIntegerFormat ) return 33320; + if ( p === RGBIntegerFormat ) return 36248; + if ( p === RGBAIntegerFormat ) return 36249; + + if ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || + p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_s3tc' ); + + if ( extension !== null ) { + + if ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; + if ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; + if ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; + if ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; + + } else { + + return null; + + } + + } + + if ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || + p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_pvrtc' ); + + if ( extension !== null ) { + + if ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; + if ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; + if ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; + if ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; + + } else { + + return null; + + } + + } + + if ( p === RGB_ETC1_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_etc1' ); + + if ( extension !== null ) { + + return extension.COMPRESSED_RGB_ETC1_WEBGL; + + } else { + + return null; + + } + + } + + if ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_etc' ); + + if ( extension !== null ) { + + if ( p === RGB_ETC2_Format ) return extension.COMPRESSED_RGB8_ETC2; + if ( p === RGBA_ETC2_EAC_Format ) return extension.COMPRESSED_RGBA8_ETC2_EAC; + + } + + } + + if ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format || + p === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format || + p === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format || + p === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format || + p === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format || + p === SRGB8_ALPHA8_ASTC_4x4_Format || p === SRGB8_ALPHA8_ASTC_5x4_Format || p === SRGB8_ALPHA8_ASTC_5x5_Format || + p === SRGB8_ALPHA8_ASTC_6x5_Format || p === SRGB8_ALPHA8_ASTC_6x6_Format || p === SRGB8_ALPHA8_ASTC_8x5_Format || + p === SRGB8_ALPHA8_ASTC_8x6_Format || p === SRGB8_ALPHA8_ASTC_8x8_Format || p === SRGB8_ALPHA8_ASTC_10x5_Format || + p === SRGB8_ALPHA8_ASTC_10x6_Format || p === SRGB8_ALPHA8_ASTC_10x8_Format || p === SRGB8_ALPHA8_ASTC_10x10_Format || + p === SRGB8_ALPHA8_ASTC_12x10_Format || p === SRGB8_ALPHA8_ASTC_12x12_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_astc' ); + + if ( extension !== null ) { + + // TODO Complete? + + return p; + + } else { + + return null; + + } + + } + + if ( p === RGBA_BPTC_Format ) { + + extension = extensions.get( 'EXT_texture_compression_bptc' ); + + if ( extension !== null ) { + + // TODO Complete? + + return p; + + } else { + + return null; + + } + + } + + if ( p === UnsignedInt248Type ) { + + if ( isWebGL2 ) return 34042; + + extension = extensions.get( 'WEBGL_depth_texture' ); + + if ( extension !== null ) { + + return extension.UNSIGNED_INT_24_8_WEBGL; + + } else { + + return null; + + } + + } + + } + + return { convert: convert }; + + } + + function ArrayCamera( array = [] ) { + + PerspectiveCamera.call( this ); + + this.cameras = array; + + } + + ArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), { + + constructor: ArrayCamera, + + isArrayCamera: true + + } ); + + function Group$1() { + + Object3D.call( this ); + + this.type = 'Group'; + + } + + Group$1.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Group$1, + + isGroup: true + + } ); + + function WebXRController() { + + this._targetRay = null; + this._grip = null; + this._hand = null; + + } + + Object.assign( WebXRController.prototype, { + + constructor: WebXRController, + + getHandSpace: function () { + + if ( this._hand === null ) { + + this._hand = new Group$1(); + this._hand.matrixAutoUpdate = false; + this._hand.visible = false; + + this._hand.joints = []; + this._hand.inputState = { pinching: false }; + + if ( window.XRHand ) { + + for ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) { + + // The transform of this joint will be updated with the joint pose on each frame + const joint = new Group$1(); + joint.matrixAutoUpdate = false; + joint.visible = false; + this._hand.joints.push( joint ); + // ?? + this._hand.add( joint ); + + } + + } + + } + + return this._hand; + + }, + + getTargetRaySpace: function () { + + if ( this._targetRay === null ) { + + this._targetRay = new Group$1(); + this._targetRay.matrixAutoUpdate = false; + this._targetRay.visible = false; + + } + + return this._targetRay; + + }, + + getGripSpace: function () { + + if ( this._grip === null ) { + + this._grip = new Group$1(); + this._grip.matrixAutoUpdate = false; + this._grip.visible = false; + + } + + return this._grip; + + }, + + dispatchEvent: function ( event ) { + + if ( this._targetRay !== null ) { + + this._targetRay.dispatchEvent( event ); + + } + + if ( this._grip !== null ) { + + this._grip.dispatchEvent( event ); + + } + + if ( this._hand !== null ) { + + this._hand.dispatchEvent( event ); + + } + + return this; + + }, + + disconnect: function ( inputSource ) { + + this.dispatchEvent( { type: 'disconnected', data: inputSource } ); + + if ( this._targetRay !== null ) { + + this._targetRay.visible = false; + + } + + if ( this._grip !== null ) { + + this._grip.visible = false; + + } + + if ( this._hand !== null ) { + + this._hand.visible = false; + + } + + return this; + + }, + + update: function ( inputSource, frame, referenceSpace ) { + + let inputPose = null; + let gripPose = null; + let handPose = null; + + const targetRay = this._targetRay; + const grip = this._grip; + const hand = this._hand; + + if ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) { + + if ( hand && inputSource.hand ) { + + handPose = true; + + for ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) { + + if ( inputSource.hand[ i ] ) { + + // Update the joints groups with the XRJoint poses + const jointPose = frame.getJointPose( inputSource.hand[ i ], referenceSpace ); + const joint = hand.joints[ i ]; + + if ( jointPose !== null ) { + + joint.matrix.fromArray( jointPose.transform.matrix ); + joint.matrix.decompose( joint.position, joint.rotation, joint.scale ); + joint.jointRadius = jointPose.radius; + + } + + joint.visible = jointPose !== null; + + // Custom events + + // Check pinch + const indexTip = hand.joints[ window.XRHand.INDEX_PHALANX_TIP ]; + const thumbTip = hand.joints[ window.XRHand.THUMB_PHALANX_TIP ]; + const distance = indexTip.position.distanceTo( thumbTip.position ); + + const distanceToPinch = 0.02; + const threshold = 0.005; + + if ( hand.inputState.pinching && distance > distanceToPinch + threshold ) { + + hand.inputState.pinching = false; + this.dispatchEvent( { + type: "pinchend", + handedness: inputSource.handedness, + target: this + } ); + + } else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) { + + hand.inputState.pinching = true; + this.dispatchEvent( { + type: "pinchstart", + handedness: inputSource.handedness, + target: this + } ); + + } + + } + + } + + } else { + + if ( targetRay !== null ) { + + inputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace ); + + if ( inputPose !== null ) { + + targetRay.matrix.fromArray( inputPose.transform.matrix ); + targetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale ); + + } + + } + + if ( grip !== null && inputSource.gripSpace ) { + + gripPose = frame.getPose( inputSource.gripSpace, referenceSpace ); + + if ( gripPose !== null ) { + + grip.matrix.fromArray( gripPose.transform.matrix ); + grip.matrix.decompose( grip.position, grip.rotation, grip.scale ); + + } + + } + + } + + } + + if ( targetRay !== null ) { + + targetRay.visible = ( inputPose !== null ); + + } + + if ( grip !== null ) { + + grip.visible = ( gripPose !== null ); + + } + + if ( hand !== null ) { + + hand.visible = ( handPose !== null ); + + } + + return this; + + } + + } ); + + function WebXRManager( renderer, gl ) { + + const scope = this; + + let session = null; + + let framebufferScaleFactor = 1.0; + + let referenceSpace = null; + let referenceSpaceType = 'local-floor'; + + let pose = null; + + const controllers = []; + const inputSourcesMap = new Map(); + + // + + const cameraL = new PerspectiveCamera(); + cameraL.layers.enable( 1 ); + cameraL.viewport = new Vector4(); + + const cameraR = new PerspectiveCamera(); + cameraR.layers.enable( 2 ); + cameraR.viewport = new Vector4(); + + const cameras = [ cameraL, cameraR ]; + + const cameraVR = new ArrayCamera(); + cameraVR.layers.enable( 1 ); + cameraVR.layers.enable( 2 ); + + let _currentDepthNear = null; + let _currentDepthFar = null; + + // + + this.enabled = false; + + this.isPresenting = false; + + this.getController = function ( index ) { + + let controller = controllers[ index ]; + + if ( controller === undefined ) { + + controller = new WebXRController(); + controllers[ index ] = controller; + + } + + return controller.getTargetRaySpace(); + + }; + + this.getControllerGrip = function ( index ) { + + let controller = controllers[ index ]; + + if ( controller === undefined ) { + + controller = new WebXRController(); + controllers[ index ] = controller; + + } + + return controller.getGripSpace(); + + }; + + this.getHand = function ( index ) { + + let controller = controllers[ index ]; + + if ( controller === undefined ) { + + controller = new WebXRController(); + controllers[ index ] = controller; + + } + + return controller.getHandSpace(); + + }; + + // + + function onSessionEvent( event ) { + + const controller = inputSourcesMap.get( event.inputSource ); + + if ( controller ) { + + controller.dispatchEvent( { type: event.type, data: event.inputSource } ); + + } + + } + + function onSessionEnd() { + + inputSourcesMap.forEach( function ( controller, inputSource ) { + + controller.disconnect( inputSource ); + + } ); + + inputSourcesMap.clear(); + + // + + renderer.setFramebuffer( null ); + renderer.setRenderTarget( renderer.getRenderTarget() ); // Hack #15830 + animation.stop(); + + scope.isPresenting = false; + + scope.dispatchEvent( { type: 'sessionend' } ); + + } + + function onRequestReferenceSpace( value ) { + + referenceSpace = value; + + animation.setContext( session ); + animation.start(); + + scope.isPresenting = true; + + scope.dispatchEvent( { type: 'sessionstart' } ); + + } + + this.setFramebufferScaleFactor = function ( value ) { + + framebufferScaleFactor = value; + + if ( scope.isPresenting === true ) { + + console.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' ); + + } + + }; + + this.setReferenceSpaceType = function ( value ) { + + referenceSpaceType = value; + + if ( scope.isPresenting === true ) { + + console.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' ); + + } + + }; + + this.getReferenceSpace = function () { + + return referenceSpace; + + }; + + this.getSession = function () { + + return session; + + }; + + this.setSession = function ( value ) { + + session = value; + + if ( session !== null ) { + + session.addEventListener( 'select', onSessionEvent ); + session.addEventListener( 'selectstart', onSessionEvent ); + session.addEventListener( 'selectend', onSessionEvent ); + session.addEventListener( 'squeeze', onSessionEvent ); + session.addEventListener( 'squeezestart', onSessionEvent ); + session.addEventListener( 'squeezeend', onSessionEvent ); + session.addEventListener( 'end', onSessionEnd ); + + const attributes = gl.getContextAttributes(); + + if ( attributes.xrCompatible !== true ) { + + gl.makeXRCompatible(); + + } + + const layerInit = { + antialias: attributes.antialias, + alpha: attributes.alpha, + depth: attributes.depth, + stencil: attributes.stencil, + framebufferScaleFactor: framebufferScaleFactor + }; + + // eslint-disable-next-line no-undef + const baseLayer = new XRWebGLLayer( session, gl, layerInit ); + + session.updateRenderState( { baseLayer: baseLayer } ); + + session.requestReferenceSpace( referenceSpaceType ).then( onRequestReferenceSpace ); + + // + + session.addEventListener( 'inputsourceschange', updateInputSources ); + + } + + }; + + function updateInputSources( event ) { + + const inputSources = session.inputSources; + + // Assign inputSources to available controllers + + for ( let i = 0; i < controllers.length; i ++ ) { + + inputSourcesMap.set( inputSources[ i ], controllers[ i ] ); + + } + + // Notify disconnected + + for ( let i = 0; i < event.removed.length; i ++ ) { + + const inputSource = event.removed[ i ]; + const controller = inputSourcesMap.get( inputSource ); + + if ( controller ) { + + controller.dispatchEvent( { type: 'disconnected', data: inputSource } ); + inputSourcesMap.delete( inputSource ); + + } + + } + + // Notify connected + + for ( let i = 0; i < event.added.length; i ++ ) { + + const inputSource = event.added[ i ]; + const controller = inputSourcesMap.get( inputSource ); + + if ( controller ) { + + controller.dispatchEvent( { type: 'connected', data: inputSource } ); + + } + + } + + } + + // + + const cameraLPos = new Vector3(); + const cameraRPos = new Vector3(); + + /** + * Assumes 2 cameras that are parallel and share an X-axis, and that + * the cameras' projection and world matrices have already been set. + * And that near and far planes are identical for both cameras. + * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765 + */ + function setProjectionFromUnion( camera, cameraL, cameraR ) { + + cameraLPos.setFromMatrixPosition( cameraL.matrixWorld ); + cameraRPos.setFromMatrixPosition( cameraR.matrixWorld ); + + const ipd = cameraLPos.distanceTo( cameraRPos ); + + const projL = cameraL.projectionMatrix.elements; + const projR = cameraR.projectionMatrix.elements; + + // VR systems will have identical far and near planes, and + // most likely identical top and bottom frustum extents. + // Use the left camera for these values. + const near = projL[ 14 ] / ( projL[ 10 ] - 1 ); + const far = projL[ 14 ] / ( projL[ 10 ] + 1 ); + const topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ]; + const bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ]; + + const leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ]; + const rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ]; + const left = near * leftFov; + const right = near * rightFov; + + // Calculate the new camera's position offset from the + // left camera. xOffset should be roughly half `ipd`. + const zOffset = ipd / ( - leftFov + rightFov ); + const xOffset = zOffset * - leftFov; + + // TODO: Better way to apply this offset? + cameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale ); + camera.translateX( xOffset ); + camera.translateZ( zOffset ); + camera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale ); + camera.matrixWorldInverse.copy( camera.matrixWorld ).invert(); + + // Find the union of the frustum values of the cameras and scale + // the values so that the near plane's position does not change in world space, + // although must now be relative to the new union camera. + const near2 = near + zOffset; + const far2 = far + zOffset; + const left2 = left - xOffset; + const right2 = right + ( ipd - xOffset ); + const top2 = topFov * far / far2 * near2; + const bottom2 = bottomFov * far / far2 * near2; + + camera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 ); + + } + + function updateCamera( camera, parent ) { + + if ( parent === null ) { + + camera.matrixWorld.copy( camera.matrix ); + + } else { + + camera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix ); + + } + + camera.matrixWorldInverse.copy( camera.matrixWorld ).invert(); + + } + + this.getCamera = function ( camera ) { + + cameraVR.near = cameraR.near = cameraL.near = camera.near; + cameraVR.far = cameraR.far = cameraL.far = camera.far; + + if ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) { + + // Note that the new renderState won't apply until the next frame. See #18320 + + session.updateRenderState( { + depthNear: cameraVR.near, + depthFar: cameraVR.far + } ); + + _currentDepthNear = cameraVR.near; + _currentDepthFar = cameraVR.far; + + } + + const parent = camera.parent; + const cameras = cameraVR.cameras; + + updateCamera( cameraVR, parent ); + + for ( let i = 0; i < cameras.length; i ++ ) { + + updateCamera( cameras[ i ], parent ); + + } + + // update camera and its children + + camera.matrixWorld.copy( cameraVR.matrixWorld ); + + const children = camera.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].updateMatrixWorld( true ); + + } + + // update projection matrix for proper view frustum culling + + if ( cameras.length === 2 ) { + + setProjectionFromUnion( cameraVR, cameraL, cameraR ); + + } else { + + // assume single camera setup (AR) + + cameraVR.projectionMatrix.copy( cameraL.projectionMatrix ); + + } + + return cameraVR; + + }; + + // Animation Loop + + let onAnimationFrameCallback = null; + + function onAnimationFrame( time, frame ) { + + pose = frame.getViewerPose( referenceSpace ); + + if ( pose !== null ) { + + const views = pose.views; + const baseLayer = session.renderState.baseLayer; + + renderer.setFramebuffer( baseLayer.framebuffer ); + + let cameraVRNeedsUpdate = false; + + // check if it's necessary to rebuild cameraVR's camera list + + if ( views.length !== cameraVR.cameras.length ) { + + cameraVR.cameras.length = 0; + cameraVRNeedsUpdate = true; + + } + + for ( let i = 0; i < views.length; i ++ ) { + + const view = views[ i ]; + const viewport = baseLayer.getViewport( view ); + + const camera = cameras[ i ]; + camera.matrix.fromArray( view.transform.matrix ); + camera.projectionMatrix.fromArray( view.projectionMatrix ); + camera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height ); + + if ( i === 0 ) { + + cameraVR.matrix.copy( camera.matrix ); + + } + + if ( cameraVRNeedsUpdate === true ) { + + cameraVR.cameras.push( camera ); + + } + + } + + } + + // + + const inputSources = session.inputSources; + + for ( let i = 0; i < controllers.length; i ++ ) { + + const controller = controllers[ i ]; + const inputSource = inputSources[ i ]; + + controller.update( inputSource, frame, referenceSpace ); + + } + + if ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame ); + + } + + const animation = new WebGLAnimation(); + animation.setAnimationLoop( onAnimationFrame ); + + this.setAnimationLoop = function ( callback ) { + + onAnimationFrameCallback = callback; + + }; + + this.dispose = function () {}; + + } + + Object.assign( WebXRManager.prototype, EventDispatcher.prototype ); + + function WebGLMaterials( properties ) { + + function refreshFogUniforms( uniforms, fog ) { + + uniforms.fogColor.value.copy( fog.color ); + + if ( fog.isFog ) { + + uniforms.fogNear.value = fog.near; + uniforms.fogFar.value = fog.far; + + } else if ( fog.isFogExp2 ) { + + uniforms.fogDensity.value = fog.density; + + } + + } + + function refreshMaterialUniforms( uniforms, material, pixelRatio, height ) { + + if ( material.isMeshBasicMaterial ) { + + refreshUniformsCommon( uniforms, material ); + + } else if ( material.isMeshLambertMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsLambert( uniforms, material ); + + } else if ( material.isMeshToonMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsToon( uniforms, material ); + + } else if ( material.isMeshPhongMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsPhong( uniforms, material ); + + } else if ( material.isMeshStandardMaterial ) { + + refreshUniformsCommon( uniforms, material ); + + if ( material.isMeshPhysicalMaterial ) { + + refreshUniformsPhysical( uniforms, material ); + + } else { + + refreshUniformsStandard( uniforms, material ); + + } + + } else if ( material.isMeshMatcapMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsMatcap( uniforms, material ); + + } else if ( material.isMeshDepthMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsDepth( uniforms, material ); + + } else if ( material.isMeshDistanceMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsDistance( uniforms, material ); + + } else if ( material.isMeshNormalMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsNormal( uniforms, material ); + + } else if ( material.isLineBasicMaterial ) { + + refreshUniformsLine( uniforms, material ); + + if ( material.isLineDashedMaterial ) { + + refreshUniformsDash( uniforms, material ); + + } + + } else if ( material.isPointsMaterial ) { + + refreshUniformsPoints( uniforms, material, pixelRatio, height ); + + } else if ( material.isSpriteMaterial ) { + + refreshUniformsSprites( uniforms, material ); + + } else if ( material.isShadowMaterial ) { + + uniforms.color.value.copy( material.color ); + uniforms.opacity.value = material.opacity; + + } else if ( material.isShaderMaterial ) { + + material.uniformsNeedUpdate = false; // #15581 + + } + + } + + function refreshUniformsCommon( uniforms, material ) { + + uniforms.opacity.value = material.opacity; + + if ( material.color ) { + + uniforms.diffuse.value.copy( material.color ); + + } + + if ( material.emissive ) { + + uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity ); + + } + + if ( material.map ) { + + uniforms.map.value = material.map; + + } + + if ( material.alphaMap ) { + + uniforms.alphaMap.value = material.alphaMap; + + } + + if ( material.specularMap ) { + + uniforms.specularMap.value = material.specularMap; + + } + + const envMap = properties.get( material ).envMap; + + if ( envMap ) { + + uniforms.envMap.value = envMap; + + uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap._needsFlipEnvMap ) ? - 1 : 1; + + uniforms.reflectivity.value = material.reflectivity; + uniforms.refractionRatio.value = material.refractionRatio; + + const maxMipLevel = properties.get( envMap ).__maxMipLevel; + + if ( maxMipLevel !== undefined ) { + + uniforms.maxMipLevel.value = maxMipLevel; + + } + + } + + if ( material.lightMap ) { + + uniforms.lightMap.value = material.lightMap; + uniforms.lightMapIntensity.value = material.lightMapIntensity; + + } + + if ( material.aoMap ) { + + uniforms.aoMap.value = material.aoMap; + uniforms.aoMapIntensity.value = material.aoMapIntensity; + + } + + // uv repeat and offset setting priorities + // 1. color map + // 2. specular map + // 3. displacementMap map + // 4. normal map + // 5. bump map + // 6. roughnessMap map + // 7. metalnessMap map + // 8. alphaMap map + // 9. emissiveMap map + // 10. clearcoat map + // 11. clearcoat normal map + // 12. clearcoat roughnessMap map + + let uvScaleMap; + + if ( material.map ) { + + uvScaleMap = material.map; + + } else if ( material.specularMap ) { + + uvScaleMap = material.specularMap; + + } else if ( material.displacementMap ) { + + uvScaleMap = material.displacementMap; + + } else if ( material.normalMap ) { + + uvScaleMap = material.normalMap; + + } else if ( material.bumpMap ) { + + uvScaleMap = material.bumpMap; + + } else if ( material.roughnessMap ) { + + uvScaleMap = material.roughnessMap; + + } else if ( material.metalnessMap ) { + + uvScaleMap = material.metalnessMap; + + } else if ( material.alphaMap ) { + + uvScaleMap = material.alphaMap; + + } else if ( material.emissiveMap ) { + + uvScaleMap = material.emissiveMap; + + } else if ( material.clearcoatMap ) { + + uvScaleMap = material.clearcoatMap; + + } else if ( material.clearcoatNormalMap ) { + + uvScaleMap = material.clearcoatNormalMap; + + } else if ( material.clearcoatRoughnessMap ) { + + uvScaleMap = material.clearcoatRoughnessMap; + + } + + if ( uvScaleMap !== undefined ) { + + // backwards compatibility + if ( uvScaleMap.isWebGLRenderTarget ) { + + uvScaleMap = uvScaleMap.texture; + + } + + if ( uvScaleMap.matrixAutoUpdate === true ) { + + uvScaleMap.updateMatrix(); + + } + + uniforms.uvTransform.value.copy( uvScaleMap.matrix ); + + } + + // uv repeat and offset setting priorities for uv2 + // 1. ao map + // 2. light map + + let uv2ScaleMap; + + if ( material.aoMap ) { + + uv2ScaleMap = material.aoMap; + + } else if ( material.lightMap ) { + + uv2ScaleMap = material.lightMap; + + } + + if ( uv2ScaleMap !== undefined ) { + + // backwards compatibility + if ( uv2ScaleMap.isWebGLRenderTarget ) { + + uv2ScaleMap = uv2ScaleMap.texture; + + } + + if ( uv2ScaleMap.matrixAutoUpdate === true ) { + + uv2ScaleMap.updateMatrix(); + + } + + uniforms.uv2Transform.value.copy( uv2ScaleMap.matrix ); + + } + + } + + function refreshUniformsLine( uniforms, material ) { + + uniforms.diffuse.value.copy( material.color ); + uniforms.opacity.value = material.opacity; + + } + + function refreshUniformsDash( uniforms, material ) { + + uniforms.dashSize.value = material.dashSize; + uniforms.totalSize.value = material.dashSize + material.gapSize; + uniforms.scale.value = material.scale; + + } + + function refreshUniformsPoints( uniforms, material, pixelRatio, height ) { + + uniforms.diffuse.value.copy( material.color ); + uniforms.opacity.value = material.opacity; + uniforms.size.value = material.size * pixelRatio; + uniforms.scale.value = height * 0.5; + + if ( material.map ) { + + uniforms.map.value = material.map; + + } + + if ( material.alphaMap ) { + + uniforms.alphaMap.value = material.alphaMap; + + } + + // uv repeat and offset setting priorities + // 1. color map + // 2. alpha map + + let uvScaleMap; + + if ( material.map ) { + + uvScaleMap = material.map; + + } else if ( material.alphaMap ) { + + uvScaleMap = material.alphaMap; + + } + + if ( uvScaleMap !== undefined ) { + + if ( uvScaleMap.matrixAutoUpdate === true ) { + + uvScaleMap.updateMatrix(); + + } + + uniforms.uvTransform.value.copy( uvScaleMap.matrix ); + + } + + } + + function refreshUniformsSprites( uniforms, material ) { + + uniforms.diffuse.value.copy( material.color ); + uniforms.opacity.value = material.opacity; + uniforms.rotation.value = material.rotation; + + if ( material.map ) { + + uniforms.map.value = material.map; + + } + + if ( material.alphaMap ) { + + uniforms.alphaMap.value = material.alphaMap; + + } + + // uv repeat and offset setting priorities + // 1. color map + // 2. alpha map + + let uvScaleMap; + + if ( material.map ) { + + uvScaleMap = material.map; + + } else if ( material.alphaMap ) { + + uvScaleMap = material.alphaMap; + + } + + if ( uvScaleMap !== undefined ) { + + if ( uvScaleMap.matrixAutoUpdate === true ) { + + uvScaleMap.updateMatrix(); + + } + + uniforms.uvTransform.value.copy( uvScaleMap.matrix ); + + } + + } + + function refreshUniformsLambert( uniforms, material ) { + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + } + + function refreshUniformsPhong( uniforms, material ) { + + uniforms.specular.value.copy( material.specular ); + uniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 ) + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) uniforms.normalScale.value.negate(); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsToon( uniforms, material ) { + + if ( material.gradientMap ) { + + uniforms.gradientMap.value = material.gradientMap; + + } + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) uniforms.normalScale.value.negate(); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsStandard( uniforms, material ) { + + uniforms.roughness.value = material.roughness; + uniforms.metalness.value = material.metalness; + + if ( material.roughnessMap ) { + + uniforms.roughnessMap.value = material.roughnessMap; + + } + + if ( material.metalnessMap ) { + + uniforms.metalnessMap.value = material.metalnessMap; + + } + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) uniforms.normalScale.value.negate(); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + const envMap = properties.get( material ).envMap; + + if ( envMap ) { + + //uniforms.envMap.value = material.envMap; // part of uniforms common + uniforms.envMapIntensity.value = material.envMapIntensity; + + } + + } + + function refreshUniformsPhysical( uniforms, material ) { + + refreshUniformsStandard( uniforms, material ); + + uniforms.reflectivity.value = material.reflectivity; // also part of uniforms common + + uniforms.clearcoat.value = material.clearcoat; + uniforms.clearcoatRoughness.value = material.clearcoatRoughness; + if ( material.sheen ) uniforms.sheen.value.copy( material.sheen ); + + if ( material.clearcoatMap ) { + + uniforms.clearcoatMap.value = material.clearcoatMap; + + } + + if ( material.clearcoatRoughnessMap ) { + + uniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap; + + } + + if ( material.clearcoatNormalMap ) { + + uniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale ); + uniforms.clearcoatNormalMap.value = material.clearcoatNormalMap; + + if ( material.side === BackSide ) { + + uniforms.clearcoatNormalScale.value.negate(); + + } + + } + + uniforms.transmission.value = material.transmission; + + if ( material.transmissionMap ) { + + uniforms.transmissionMap.value = material.transmissionMap; + + } + + } + + function refreshUniformsMatcap( uniforms, material ) { + + if ( material.matcap ) { + + uniforms.matcap.value = material.matcap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) uniforms.normalScale.value.negate(); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsDepth( uniforms, material ) { + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsDistance( uniforms, material ) { + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + uniforms.referencePosition.value.copy( material.referencePosition ); + uniforms.nearDistance.value = material.nearDistance; + uniforms.farDistance.value = material.farDistance; + + } + + function refreshUniformsNormal( uniforms, material ) { + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) uniforms.normalScale.value.negate(); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + return { + refreshFogUniforms: refreshFogUniforms, + refreshMaterialUniforms: refreshMaterialUniforms + }; + + } + + function createCanvasElement() { + + const canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + canvas.style.display = 'block'; + return canvas; + + } + + function WebGLRenderer( parameters ) { + + parameters = parameters || {}; + + const _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(), + _context = parameters.context !== undefined ? parameters.context : null, + + _alpha = parameters.alpha !== undefined ? parameters.alpha : false, + _depth = parameters.depth !== undefined ? parameters.depth : true, + _stencil = parameters.stencil !== undefined ? parameters.stencil : true, + _antialias = parameters.antialias !== undefined ? parameters.antialias : false, + _premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true, + _preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false, + _powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default', + _failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false; + + let currentRenderList = null; + let currentRenderState = null; + + // public properties + + this.domElement = _canvas; + + // Debug configuration container + this.debug = { + + /** + * Enables error checking and reporting when shader programs are being compiled + * @type {boolean} + */ + checkShaderErrors: true + }; + + // clearing + + this.autoClear = true; + this.autoClearColor = true; + this.autoClearDepth = true; + this.autoClearStencil = true; + + // scene graph + + this.sortObjects = true; + + // user-defined clipping + + this.clippingPlanes = []; + this.localClippingEnabled = false; + + // physically based shading + + this.gammaFactor = 2.0; // for backwards compatibility + this.outputEncoding = LinearEncoding; + + // physical lights + + this.physicallyCorrectLights = false; + + // tone mapping + + this.toneMapping = NoToneMapping; + this.toneMappingExposure = 1.0; + + // morphs + + this.maxMorphTargets = 8; + this.maxMorphNormals = 4; + + // internal properties + + const _this = this; + + let _isContextLost = false; + + // internal state cache + + let _framebuffer = null; + + let _currentActiveCubeFace = 0; + let _currentActiveMipmapLevel = 0; + let _currentRenderTarget = null; + let _currentFramebuffer = null; + let _currentMaterialId = - 1; + + let _currentCamera = null; + let _currentArrayCamera = null; + + const _currentViewport = new Vector4(); + const _currentScissor = new Vector4(); + let _currentScissorTest = null; + + // + + let _width = _canvas.width; + let _height = _canvas.height; + + let _pixelRatio = 1; + let _opaqueSort = null; + let _transparentSort = null; + + const _viewport = new Vector4( 0, 0, _width, _height ); + const _scissor = new Vector4( 0, 0, _width, _height ); + let _scissorTest = false; + + // frustum + + const _frustum = new Frustum(); + + // clipping + + let _clippingEnabled = false; + let _localClippingEnabled = false; + + // camera matrices cache + + const _projScreenMatrix = new Matrix4(); + + const _vector3 = new Vector3(); + + const _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true }; + + function getTargetPixelRatio() { + + return _currentRenderTarget === null ? _pixelRatio : 1; + + } + + // initialize + + let _gl = _context; + + function getContext( contextNames, contextAttributes ) { + + for ( let i = 0; i < contextNames.length; i ++ ) { + + const contextName = contextNames[ i ]; + const context = _canvas.getContext( contextName, contextAttributes ); + if ( context !== null ) return context; + + } + + return null; + + } + + try { + + const contextAttributes = { + alpha: _alpha, + depth: _depth, + stencil: _stencil, + antialias: _antialias, + premultipliedAlpha: _premultipliedAlpha, + preserveDrawingBuffer: _preserveDrawingBuffer, + powerPreference: _powerPreference, + failIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat + }; + + // event listeners must be registered before WebGL context is created, see #12753 + + _canvas.addEventListener( 'webglcontextlost', onContextLost, false ); + _canvas.addEventListener( 'webglcontextrestored', onContextRestore, false ); + + if ( _gl === null ) { + + const contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ]; + + if ( _this.isWebGL1Renderer === true ) { + + contextNames.shift(); + + } + + _gl = getContext( contextNames, contextAttributes ); + + if ( _gl === null ) { + + if ( getContext( contextNames ) ) { + + throw new Error( 'Error creating WebGL context with your selected attributes.' ); + + } else { + + throw new Error( 'Error creating WebGL context.' ); + + } + + } + + } + + // Some experimental-webgl implementations do not have getShaderPrecisionFormat + + if ( _gl.getShaderPrecisionFormat === undefined ) { + + _gl.getShaderPrecisionFormat = function () { + + return { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 }; + + }; + + } + + } catch ( error ) { + + console.error( 'THREE.WebGLRenderer: ' + error.message ); + throw error; + + } + + let extensions, capabilities, state, info; + let properties, textures, cubemaps, attributes, geometries, objects; + let programCache, materials, renderLists, renderStates, clipping; + + let background, morphtargets, bufferRenderer, indexedBufferRenderer; + + let utils, bindingStates; + + function initGLContext() { + + extensions = new WebGLExtensions( _gl ); + + capabilities = new WebGLCapabilities( _gl, extensions, parameters ); + + if ( capabilities.isWebGL2 === false ) { + + extensions.get( 'WEBGL_depth_texture' ); + extensions.get( 'OES_texture_float' ); + extensions.get( 'OES_texture_half_float' ); + extensions.get( 'OES_texture_half_float_linear' ); + extensions.get( 'OES_standard_derivatives' ); + extensions.get( 'OES_element_index_uint' ); + extensions.get( 'OES_vertex_array_object' ); + extensions.get( 'ANGLE_instanced_arrays' ); + + } + + extensions.get( 'OES_texture_float_linear' ); + + utils = new WebGLUtils( _gl, extensions, capabilities ); + + state = new WebGLState( _gl, extensions, capabilities ); + state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() ); + state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() ); + + info = new WebGLInfo( _gl ); + properties = new WebGLProperties(); + textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ); + cubemaps = new WebGLCubeMaps( _this ); + attributes = new WebGLAttributes( _gl, capabilities ); + bindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities ); + geometries = new WebGLGeometries( _gl, attributes, info, bindingStates ); + objects = new WebGLObjects( _gl, geometries, attributes, info ); + morphtargets = new WebGLMorphtargets( _gl ); + clipping = new WebGLClipping( properties ); + programCache = new WebGLPrograms( _this, cubemaps, extensions, capabilities, bindingStates, clipping ); + materials = new WebGLMaterials( properties ); + renderLists = new WebGLRenderLists( properties ); + renderStates = new WebGLRenderStates( extensions, capabilities ); + background = new WebGLBackground( _this, cubemaps, state, objects, _premultipliedAlpha ); + + bufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities ); + indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities ); + + info.programs = programCache.programs; + + _this.capabilities = capabilities; + _this.extensions = extensions; + _this.properties = properties; + _this.renderLists = renderLists; + _this.state = state; + _this.info = info; + + } + + initGLContext(); + + // xr + + const xr = new WebXRManager( _this, _gl ); + + this.xr = xr; + + // shadow map + + const shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize ); + + this.shadowMap = shadowMap; + + // API + + this.getContext = function () { + + return _gl; + + }; + + this.getContextAttributes = function () { + + return _gl.getContextAttributes(); + + }; + + this.forceContextLoss = function () { + + const extension = extensions.get( 'WEBGL_lose_context' ); + if ( extension ) extension.loseContext(); + + }; + + this.forceContextRestore = function () { + + const extension = extensions.get( 'WEBGL_lose_context' ); + if ( extension ) extension.restoreContext(); + + }; + + this.getPixelRatio = function () { + + return _pixelRatio; + + }; + + this.setPixelRatio = function ( value ) { + + if ( value === undefined ) return; + + _pixelRatio = value; + + this.setSize( _width, _height, false ); + + }; + + this.getSize = function ( target ) { + + if ( target === undefined ) { + + console.warn( 'WebGLRenderer: .getsize() now requires a Vector2 as an argument' ); + + target = new Vector2(); + + } + + return target.set( _width, _height ); + + }; + + this.setSize = function ( width, height, updateStyle ) { + + if ( xr.isPresenting ) { + + console.warn( 'THREE.WebGLRenderer: Can\'t change size while VR device is presenting.' ); + return; + + } + + _width = width; + _height = height; + + _canvas.width = Math.floor( width * _pixelRatio ); + _canvas.height = Math.floor( height * _pixelRatio ); + + if ( updateStyle !== false ) { + + _canvas.style.width = width + 'px'; + _canvas.style.height = height + 'px'; + + } + + this.setViewport( 0, 0, width, height ); + + }; + + this.getDrawingBufferSize = function ( target ) { + + if ( target === undefined ) { + + console.warn( 'WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument' ); + + target = new Vector2(); + + } + + return target.set( _width * _pixelRatio, _height * _pixelRatio ).floor(); + + }; + + this.setDrawingBufferSize = function ( width, height, pixelRatio ) { + + _width = width; + _height = height; + + _pixelRatio = pixelRatio; + + _canvas.width = Math.floor( width * pixelRatio ); + _canvas.height = Math.floor( height * pixelRatio ); + + this.setViewport( 0, 0, width, height ); + + }; + + this.getCurrentViewport = function ( target ) { + + if ( target === undefined ) { + + console.warn( 'WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument' ); + + target = new Vector4(); + + } + + return target.copy( _currentViewport ); + + }; + + this.getViewport = function ( target ) { + + return target.copy( _viewport ); + + }; + + this.setViewport = function ( x, y, width, height ) { + + if ( x.isVector4 ) { + + _viewport.set( x.x, x.y, x.z, x.w ); + + } else { + + _viewport.set( x, y, width, height ); + + } + + state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() ); + + }; + + this.getScissor = function ( target ) { + + return target.copy( _scissor ); + + }; + + this.setScissor = function ( x, y, width, height ) { + + if ( x.isVector4 ) { + + _scissor.set( x.x, x.y, x.z, x.w ); + + } else { + + _scissor.set( x, y, width, height ); + + } + + state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() ); + + }; + + this.getScissorTest = function () { + + return _scissorTest; + + }; + + this.setScissorTest = function ( boolean ) { + + state.setScissorTest( _scissorTest = boolean ); + + }; + + this.setOpaqueSort = function ( method ) { + + _opaqueSort = method; + + }; + + this.setTransparentSort = function ( method ) { + + _transparentSort = method; + + }; + + // Clearing + + this.getClearColor = function () { + + return background.getClearColor(); + + }; + + this.setClearColor = function () { + + background.setClearColor.apply( background, arguments ); + + }; + + this.getClearAlpha = function () { + + return background.getClearAlpha(); + + }; + + this.setClearAlpha = function () { + + background.setClearAlpha.apply( background, arguments ); + + }; + + this.clear = function ( color, depth, stencil ) { + + let bits = 0; + + if ( color === undefined || color ) bits |= 16384; + if ( depth === undefined || depth ) bits |= 256; + if ( stencil === undefined || stencil ) bits |= 1024; + + _gl.clear( bits ); + + }; + + this.clearColor = function () { + + this.clear( true, false, false ); + + }; + + this.clearDepth = function () { + + this.clear( false, true, false ); + + }; + + this.clearStencil = function () { + + this.clear( false, false, true ); + + }; + + // + + this.dispose = function () { + + _canvas.removeEventListener( 'webglcontextlost', onContextLost, false ); + _canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false ); + + renderLists.dispose(); + renderStates.dispose(); + properties.dispose(); + cubemaps.dispose(); + objects.dispose(); + bindingStates.dispose(); + + xr.dispose(); + + animation.stop(); + + }; + + // Events + + function onContextLost( event ) { + + event.preventDefault(); + + console.log( 'THREE.WebGLRenderer: Context Lost.' ); + + _isContextLost = true; + + } + + function onContextRestore( /* event */ ) { + + console.log( 'THREE.WebGLRenderer: Context Restored.' ); + + _isContextLost = false; + + initGLContext(); + + } + + function onMaterialDispose( event ) { + + const material = event.target; + + material.removeEventListener( 'dispose', onMaterialDispose ); + + deallocateMaterial( material ); + + } + + // Buffer deallocation + + function deallocateMaterial( material ) { + + releaseMaterialProgramReference( material ); + + properties.remove( material ); + + } + + + function releaseMaterialProgramReference( material ) { + + const programInfo = properties.get( material ).program; + + if ( programInfo !== undefined ) { + + programCache.releaseProgram( programInfo ); + + } + + } + + // Buffer rendering + + function renderObjectImmediate( object, program ) { + + object.render( function ( object ) { + + _this.renderBufferImmediate( object, program ); + + } ); + + } + + this.renderBufferImmediate = function ( object, program ) { + + bindingStates.initAttributes(); + + const buffers = properties.get( object ); + + if ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer(); + if ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer(); + if ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer(); + if ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer(); + + const programAttributes = program.getAttributes(); + + if ( object.hasPositions ) { + + _gl.bindBuffer( 34962, buffers.position ); + _gl.bufferData( 34962, object.positionArray, 35048 ); + + bindingStates.enableAttribute( programAttributes.position ); + _gl.vertexAttribPointer( programAttributes.position, 3, 5126, false, 0, 0 ); + + } + + if ( object.hasNormals ) { + + _gl.bindBuffer( 34962, buffers.normal ); + _gl.bufferData( 34962, object.normalArray, 35048 ); + + bindingStates.enableAttribute( programAttributes.normal ); + _gl.vertexAttribPointer( programAttributes.normal, 3, 5126, false, 0, 0 ); + + } + + if ( object.hasUvs ) { + + _gl.bindBuffer( 34962, buffers.uv ); + _gl.bufferData( 34962, object.uvArray, 35048 ); + + bindingStates.enableAttribute( programAttributes.uv ); + _gl.vertexAttribPointer( programAttributes.uv, 2, 5126, false, 0, 0 ); + + } + + if ( object.hasColors ) { + + _gl.bindBuffer( 34962, buffers.color ); + _gl.bufferData( 34962, object.colorArray, 35048 ); + + bindingStates.enableAttribute( programAttributes.color ); + _gl.vertexAttribPointer( programAttributes.color, 3, 5126, false, 0, 0 ); + + } + + bindingStates.disableUnusedAttributes(); + + _gl.drawArrays( 4, 0, object.count ); + + object.count = 0; + + }; + + this.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) { + + if ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null) + + const frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 ); + + const program = setProgram( camera, scene, material, object ); + + state.setMaterial( material, frontFaceCW ); + + // + + let index = geometry.index; + const position = geometry.attributes.position; + + // + + if ( index === null ) { + + if ( position === undefined || position.count === 0 ) return; + + } else if ( index.count === 0 ) { + + return; + + } + + // + + let rangeFactor = 1; + + if ( material.wireframe === true ) { + + index = geometries.getWireframeAttribute( geometry ); + rangeFactor = 2; + + } + + if ( material.morphTargets || material.morphNormals ) { + + morphtargets.update( object, geometry, material, program ); + + } + + bindingStates.setup( object, material, program, geometry, index ); + + let attribute; + let renderer = bufferRenderer; + + if ( index !== null ) { + + attribute = attributes.get( index ); + + renderer = indexedBufferRenderer; + renderer.setIndex( attribute ); + + } + + // + + const dataCount = ( index !== null ) ? index.count : position.count; + + const rangeStart = geometry.drawRange.start * rangeFactor; + const rangeCount = geometry.drawRange.count * rangeFactor; + + const groupStart = group !== null ? group.start * rangeFactor : 0; + const groupCount = group !== null ? group.count * rangeFactor : Infinity; + + const drawStart = Math.max( rangeStart, groupStart ); + const drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1; + + const drawCount = Math.max( 0, drawEnd - drawStart + 1 ); + + if ( drawCount === 0 ) return; + + // + + if ( object.isMesh ) { + + if ( material.wireframe === true ) { + + state.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() ); + renderer.setMode( 1 ); + + } else { + + renderer.setMode( 4 ); + + } + + } else if ( object.isLine ) { + + let lineWidth = material.linewidth; + + if ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material + + state.setLineWidth( lineWidth * getTargetPixelRatio() ); + + if ( object.isLineSegments ) { + + renderer.setMode( 1 ); + + } else if ( object.isLineLoop ) { + + renderer.setMode( 2 ); + + } else { + + renderer.setMode( 3 ); + + } + + } else if ( object.isPoints ) { + + renderer.setMode( 0 ); + + } else if ( object.isSprite ) { + + renderer.setMode( 4 ); + + } + + if ( object.isInstancedMesh ) { + + renderer.renderInstances( drawStart, drawCount, object.count ); + + } else if ( geometry.isInstancedBufferGeometry ) { + + const instanceCount = Math.min( geometry.instanceCount, geometry._maxInstanceCount ); + + renderer.renderInstances( drawStart, drawCount, instanceCount ); + + } else { + + renderer.render( drawStart, drawCount ); + + } + + }; + + // Compile + + this.compile = function ( scene, camera ) { + + currentRenderState = renderStates.get( scene, camera ); + currentRenderState.init(); + + scene.traverseVisible( function ( object ) { + + if ( object.isLight && object.layers.test( camera.layers ) ) { + + currentRenderState.pushLight( object ); + + if ( object.castShadow ) { + + currentRenderState.pushShadow( object ); + + } + + } + + } ); + + currentRenderState.setupLights( camera ); + + const compiled = new WeakMap(); + + scene.traverse( function ( object ) { + + const material = object.material; + + if ( material ) { + + if ( Array.isArray( material ) ) { + + for ( let i = 0; i < material.length; i ++ ) { + + const material2 = material[ i ]; + + if ( compiled.has( material2 ) === false ) { + + initMaterial( material2, scene, object ); + compiled.set( material2 ); + + } + + } + + } else if ( compiled.has( material ) === false ) { + + initMaterial( material, scene, object ); + compiled.set( material ); + + } + + } + + } ); + + }; + + // Animation Loop + + let onAnimationFrameCallback = null; + + function onAnimationFrame( time ) { + + if ( xr.isPresenting ) return; + if ( onAnimationFrameCallback ) onAnimationFrameCallback( time ); + + } + + const animation = new WebGLAnimation(); + animation.setAnimationLoop( onAnimationFrame ); + + if ( typeof window !== 'undefined' ) animation.setContext( window ); + + this.setAnimationLoop = function ( callback ) { + + onAnimationFrameCallback = callback; + xr.setAnimationLoop( callback ); + + ( callback === null ) ? animation.stop() : animation.start(); + + }; + + // Rendering + + this.render = function ( scene, camera ) { + + let renderTarget, forceClear; + + if ( arguments[ 2 ] !== undefined ) { + + console.warn( 'THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.' ); + renderTarget = arguments[ 2 ]; + + } + + if ( arguments[ 3 ] !== undefined ) { + + console.warn( 'THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead.' ); + forceClear = arguments[ 3 ]; + + } + + if ( camera !== undefined && camera.isCamera !== true ) { + + console.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' ); + return; + + } + + if ( _isContextLost === true ) return; + + // reset caching for this frame + + bindingStates.resetDefaultState(); + _currentMaterialId = - 1; + _currentCamera = null; + + // update scene graph + + if ( scene.autoUpdate === true ) scene.updateMatrixWorld(); + + // update camera matrices and frustum + + if ( camera.parent === null ) camera.updateMatrixWorld(); + + if ( xr.enabled === true && xr.isPresenting === true ) { + + camera = xr.getCamera( camera ); + + } + + // + if ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, renderTarget || _currentRenderTarget ); + + currentRenderState = renderStates.get( scene, camera ); + currentRenderState.init(); + + _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); + _frustum.setFromProjectionMatrix( _projScreenMatrix ); + + _localClippingEnabled = this.localClippingEnabled; + _clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled, camera ); + + currentRenderList = renderLists.get( scene, camera ); + currentRenderList.init(); + + projectObject( scene, camera, 0, _this.sortObjects ); + + currentRenderList.finish(); + + if ( _this.sortObjects === true ) { + + currentRenderList.sort( _opaqueSort, _transparentSort ); + + } + + // + + if ( _clippingEnabled === true ) clipping.beginShadows(); + + const shadowsArray = currentRenderState.state.shadowsArray; + + shadowMap.render( shadowsArray, scene, camera ); + + currentRenderState.setupLights( camera ); + + if ( _clippingEnabled === true ) clipping.endShadows(); + + // + + if ( this.info.autoReset === true ) this.info.reset(); + + if ( renderTarget !== undefined ) { + + this.setRenderTarget( renderTarget ); + + } + + // + + background.render( currentRenderList, scene, camera, forceClear ); + + // render scene + + const opaqueObjects = currentRenderList.opaque; + const transparentObjects = currentRenderList.transparent; + + if ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera ); + if ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera ); + + // + + if ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera ); + + // + + if ( _currentRenderTarget !== null ) { + + // Generate mipmap if we're using any kind of mipmap filtering + + textures.updateRenderTargetMipmap( _currentRenderTarget ); + + // resolve multisample renderbuffers to a single-sample texture if necessary + + textures.updateMultisampleRenderTarget( _currentRenderTarget ); + + } + + // Ensure depth buffer writing is enabled so it can be cleared on next render + + state.buffers.depth.setTest( true ); + state.buffers.depth.setMask( true ); + state.buffers.color.setMask( true ); + + state.setPolygonOffset( false ); + + // _gl.finish(); + + currentRenderList = null; + currentRenderState = null; + + }; + + function projectObject( object, camera, groupOrder, sortObjects ) { + + if ( object.visible === false ) return; + + const visible = object.layers.test( camera.layers ); + + if ( visible ) { + + if ( object.isGroup ) { + + groupOrder = object.renderOrder; + + } else if ( object.isLOD ) { + + if ( object.autoUpdate === true ) object.update( camera ); + + } else if ( object.isLight ) { + + currentRenderState.pushLight( object ); + + if ( object.castShadow ) { + + currentRenderState.pushShadow( object ); + + } + + } else if ( object.isSprite ) { + + if ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) { + + if ( sortObjects ) { + + _vector3.setFromMatrixPosition( object.matrixWorld ) + .applyMatrix4( _projScreenMatrix ); + + } + + const geometry = objects.update( object ); + const material = object.material; + + if ( material.visible ) { + + currentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null ); + + } + + } + + } else if ( object.isImmediateRenderObject ) { + + if ( sortObjects ) { + + _vector3.setFromMatrixPosition( object.matrixWorld ) + .applyMatrix4( _projScreenMatrix ); + + } + + currentRenderList.push( object, null, object.material, groupOrder, _vector3.z, null ); + + } else if ( object.isMesh || object.isLine || object.isPoints ) { + + if ( object.isSkinnedMesh ) { + + // update skeleton only once in a frame + + if ( object.skeleton.frame !== info.render.frame ) { + + object.skeleton.update(); + object.skeleton.frame = info.render.frame; + + } + + } + + if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) { + + if ( sortObjects ) { + + _vector3.setFromMatrixPosition( object.matrixWorld ) + .applyMatrix4( _projScreenMatrix ); + + } + + const geometry = objects.update( object ); + const material = object.material; + + if ( Array.isArray( material ) ) { + + const groups = geometry.groups; + + for ( let i = 0, l = groups.length; i < l; i ++ ) { + + const group = groups[ i ]; + const groupMaterial = material[ group.materialIndex ]; + + if ( groupMaterial && groupMaterial.visible ) { + + currentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group ); + + } + + } + + } else if ( material.visible ) { + + currentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null ); + + } + + } + + } + + } + + const children = object.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + projectObject( children[ i ], camera, groupOrder, sortObjects ); + + } + + } + + function renderObjects( renderList, scene, camera ) { + + const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null; + + for ( let i = 0, l = renderList.length; i < l; i ++ ) { + + const renderItem = renderList[ i ]; + + const object = renderItem.object; + const geometry = renderItem.geometry; + const material = overrideMaterial === null ? renderItem.material : overrideMaterial; + const group = renderItem.group; + + if ( camera.isArrayCamera ) { + + _currentArrayCamera = camera; + + const cameras = camera.cameras; + + for ( let j = 0, jl = cameras.length; j < jl; j ++ ) { + + const camera2 = cameras[ j ]; + + if ( object.layers.test( camera2.layers ) ) { + + state.viewport( _currentViewport.copy( camera2.viewport ) ); + + currentRenderState.setupLights( camera2 ); + + renderObject( object, scene, camera2, geometry, material, group ); + + } + + } + + } else { + + _currentArrayCamera = null; + + renderObject( object, scene, camera, geometry, material, group ); + + } + + } + + } + + function renderObject( object, scene, camera, geometry, material, group ) { + + object.onBeforeRender( _this, scene, camera, geometry, material, group ); + currentRenderState = renderStates.get( scene, _currentArrayCamera || camera ); + + object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld ); + object.normalMatrix.getNormalMatrix( object.modelViewMatrix ); + + if ( object.isImmediateRenderObject ) { + + const program = setProgram( camera, scene, material, object ); + + state.setMaterial( material ); + + bindingStates.reset(); + + renderObjectImmediate( object, program ); + + } else { + + _this.renderBufferDirect( camera, scene, geometry, material, object, group ); + + } + + object.onAfterRender( _this, scene, camera, geometry, material, group ); + currentRenderState = renderStates.get( scene, _currentArrayCamera || camera ); + + } + + function initMaterial( material, scene, object ) { + + if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ... + + const materialProperties = properties.get( material ); + + const lights = currentRenderState.state.lights; + const shadowsArray = currentRenderState.state.shadowsArray; + + const lightsStateVersion = lights.state.version; + + const parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object ); + const programCacheKey = programCache.getProgramCacheKey( parameters ); + + let program = materialProperties.program; + let programChange = true; + + if ( program === undefined ) { + + // new material + material.addEventListener( 'dispose', onMaterialDispose ); + + } else if ( program.cacheKey !== programCacheKey ) { + + // changed glsl or parameters + releaseMaterialProgramReference( material ); + + } else if ( materialProperties.lightsStateVersion !== lightsStateVersion ) { + + programChange = false; + + } else if ( parameters.shaderID !== undefined ) { + + // same glsl and uniform list, envMap still needs the update here to avoid a frame-late effect + + const environment = material.isMeshStandardMaterial ? scene.environment : null; + materialProperties.envMap = cubemaps.get( material.envMap || environment ); + + return; + + } else { + + // only rebuild uniform list + programChange = false; + + } + + if ( programChange ) { + + parameters.uniforms = programCache.getUniforms( material ); + + material.onBeforeCompile( parameters, _this ); + + program = programCache.acquireProgram( parameters, programCacheKey ); + + materialProperties.program = program; + materialProperties.uniforms = parameters.uniforms; + materialProperties.outputEncoding = parameters.outputEncoding; + + } + + const uniforms = materialProperties.uniforms; + + if ( ! material.isShaderMaterial && + ! material.isRawShaderMaterial || + material.clipping === true ) { + + materialProperties.numClippingPlanes = clipping.numPlanes; + materialProperties.numIntersection = clipping.numIntersection; + uniforms.clippingPlanes = clipping.uniform; + + } + + materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null; + materialProperties.fog = scene.fog; + materialProperties.envMap = cubemaps.get( material.envMap || materialProperties.environment ); + + // store the light setup it was created for + + materialProperties.needsLights = materialNeedsLights( material ); + materialProperties.lightsStateVersion = lightsStateVersion; + + if ( materialProperties.needsLights ) { + + // wire up the material to this renderer's lighting state + + uniforms.ambientLightColor.value = lights.state.ambient; + uniforms.lightProbe.value = lights.state.probe; + uniforms.directionalLights.value = lights.state.directional; + uniforms.directionalLightShadows.value = lights.state.directionalShadow; + uniforms.spotLights.value = lights.state.spot; + uniforms.spotLightShadows.value = lights.state.spotShadow; + uniforms.rectAreaLights.value = lights.state.rectArea; + uniforms.ltc_1.value = lights.state.rectAreaLTC1; + uniforms.ltc_2.value = lights.state.rectAreaLTC2; + uniforms.pointLights.value = lights.state.point; + uniforms.pointLightShadows.value = lights.state.pointShadow; + uniforms.hemisphereLights.value = lights.state.hemi; + + uniforms.directionalShadowMap.value = lights.state.directionalShadowMap; + uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix; + uniforms.spotShadowMap.value = lights.state.spotShadowMap; + uniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix; + uniforms.pointShadowMap.value = lights.state.pointShadowMap; + uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix; + // TODO (abelnation): add area lights shadow info to uniforms + + } + + const progUniforms = materialProperties.program.getUniforms(); + const uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms ); + + materialProperties.uniformsList = uniformsList; + + } + + function setProgram( camera, scene, material, object ) { + + if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ... + + textures.resetTextureUnits(); + + const fog = scene.fog; + const environment = material.isMeshStandardMaterial ? scene.environment : null; + const encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : _currentRenderTarget.texture.encoding; + const envMap = cubemaps.get( material.envMap || environment ); + + const materialProperties = properties.get( material ); + const lights = currentRenderState.state.lights; + + if ( _clippingEnabled === true ) { + + if ( _localClippingEnabled === true || camera !== _currentCamera ) { + + const useCache = + camera === _currentCamera && + material.id === _currentMaterialId; + + // we might want to call this function with some ClippingGroup + // object instead of the material, once it becomes feasible + // (#8465, #8379) + clipping.setState( material, camera, useCache ); + + } + + } + + if ( material.version === materialProperties.__version ) { + + if ( material.fog && materialProperties.fog !== fog ) { + + initMaterial( material, scene, object ); + + } else if ( materialProperties.environment !== environment ) { + + initMaterial( material, scene, object ); + + } else if ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) { + + initMaterial( material, scene, object ); + + } else if ( materialProperties.numClippingPlanes !== undefined && + ( materialProperties.numClippingPlanes !== clipping.numPlanes || + materialProperties.numIntersection !== clipping.numIntersection ) ) { + + initMaterial( material, scene, object ); + + } else if ( materialProperties.outputEncoding !== encoding ) { + + initMaterial( material, scene, object ); + + } else if ( materialProperties.envMap !== envMap ) { + + initMaterial( material, scene, object ); + + } + + } else { + + initMaterial( material, scene, object ); + materialProperties.__version = material.version; + + } + + let refreshProgram = false; + let refreshMaterial = false; + let refreshLights = false; + + const program = materialProperties.program, + p_uniforms = program.getUniforms(), + m_uniforms = materialProperties.uniforms; + + if ( state.useProgram( program.program ) ) { + + refreshProgram = true; + refreshMaterial = true; + refreshLights = true; + + } + + if ( material.id !== _currentMaterialId ) { + + _currentMaterialId = material.id; + + refreshMaterial = true; + + } + + if ( refreshProgram || _currentCamera !== camera ) { + + p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix ); + + if ( capabilities.logarithmicDepthBuffer ) { + + p_uniforms.setValue( _gl, 'logDepthBufFC', + 2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) ); + + } + + if ( _currentCamera !== camera ) { + + _currentCamera = camera; + + // lighting uniforms depend on the camera so enforce an update + // now, in case this material supports lights - or later, when + // the next material that does gets activated: + + refreshMaterial = true; // set to true on material change + refreshLights = true; // remains set until update done + + } + + // load material specific uniforms + // (shader material also gets them for the sake of genericity) + + if ( material.isShaderMaterial || + material.isMeshPhongMaterial || + material.isMeshToonMaterial || + material.isMeshStandardMaterial || + material.envMap ) { + + const uCamPos = p_uniforms.map.cameraPosition; + + if ( uCamPos !== undefined ) { + + uCamPos.setValue( _gl, + _vector3.setFromMatrixPosition( camera.matrixWorld ) ); + + } + + } + + if ( material.isMeshPhongMaterial || + material.isMeshToonMaterial || + material.isMeshLambertMaterial || + material.isMeshBasicMaterial || + material.isMeshStandardMaterial || + material.isShaderMaterial ) { + + p_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true ); + + } + + if ( material.isMeshPhongMaterial || + material.isMeshToonMaterial || + material.isMeshLambertMaterial || + material.isMeshBasicMaterial || + material.isMeshStandardMaterial || + material.isShaderMaterial || + material.isShadowMaterial || + material.skinning ) { + + p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse ); + + } + + } + + // skinning uniforms must be set even if material didn't change + // auto-setting of texture unit for bone texture must go before other textures + // otherwise textures used for skinning can take over texture units reserved for other material textures + + if ( material.skinning ) { + + p_uniforms.setOptional( _gl, object, 'bindMatrix' ); + p_uniforms.setOptional( _gl, object, 'bindMatrixInverse' ); + + const skeleton = object.skeleton; + + if ( skeleton ) { + + const bones = skeleton.bones; + + if ( capabilities.floatVertexTextures ) { + + if ( skeleton.boneTexture === null ) { + + // layout (1 matrix = 4 pixels) + // RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4) + // with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8) + // 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16) + // 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32) + // 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64) + + + let size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix + size = MathUtils.ceilPowerOfTwo( size ); + size = Math.max( size, 4 ); + + const boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel + boneMatrices.set( skeleton.boneMatrices ); // copy current values + + const boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType ); + + skeleton.boneMatrices = boneMatrices; + skeleton.boneTexture = boneTexture; + skeleton.boneTextureSize = size; + + } + + p_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures ); + p_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize ); + + } else { + + p_uniforms.setOptional( _gl, skeleton, 'boneMatrices' ); + + } + + } + + } + + if ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) { + + materialProperties.receiveShadow = object.receiveShadow; + p_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow ); + + } + + if ( refreshMaterial ) { + + p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure ); + + if ( materialProperties.needsLights ) { + + // the current material requires lighting info + + // note: all lighting uniforms are always set correctly + // they simply reference the renderer's state for their + // values + // + // use the current material's .needsUpdate flags to set + // the GL state when required + + markUniformsLightsNeedsUpdate( m_uniforms, refreshLights ); + + } + + // refresh uniforms common to several materials + + if ( fog && material.fog ) { + + materials.refreshFogUniforms( m_uniforms, fog ); + + } + + materials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height ); + + WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures ); + + } + + if ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) { + + WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures ); + material.uniformsNeedUpdate = false; + + } + + if ( material.isSpriteMaterial ) { + + p_uniforms.setValue( _gl, 'center', object.center ); + + } + + // common matrices + + p_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix ); + p_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix ); + p_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld ); + + return program; + + } + + // If uniforms are marked as clean, they don't need to be loaded to the GPU. + + function markUniformsLightsNeedsUpdate( uniforms, value ) { + + uniforms.ambientLightColor.needsUpdate = value; + uniforms.lightProbe.needsUpdate = value; + + uniforms.directionalLights.needsUpdate = value; + uniforms.directionalLightShadows.needsUpdate = value; + uniforms.pointLights.needsUpdate = value; + uniforms.pointLightShadows.needsUpdate = value; + uniforms.spotLights.needsUpdate = value; + uniforms.spotLightShadows.needsUpdate = value; + uniforms.rectAreaLights.needsUpdate = value; + uniforms.hemisphereLights.needsUpdate = value; + + } + + function materialNeedsLights( material ) { + + return material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial || + material.isMeshStandardMaterial || material.isShadowMaterial || + ( material.isShaderMaterial && material.lights === true ); + + } + + // + this.setFramebuffer = function ( value ) { + + if ( _framebuffer !== value && _currentRenderTarget === null ) _gl.bindFramebuffer( 36160, value ); + + _framebuffer = value; + + }; + + this.getActiveCubeFace = function () { + + return _currentActiveCubeFace; + + }; + + this.getActiveMipmapLevel = function () { + + return _currentActiveMipmapLevel; + + }; + + this.getRenderList = function () { + + return currentRenderList; + + }; + + this.setRenderList = function ( renderList ) { + + currentRenderList = renderList; + + }; + + this.getRenderState = function () { + + return currentRenderState; + + }; + + this.setRenderState = function ( renderState ) { + + currentRenderState = renderState; + + }; + + this.getRenderTarget = function () { + + return _currentRenderTarget; + + }; + + this.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) { + + _currentRenderTarget = renderTarget; + _currentActiveCubeFace = activeCubeFace; + _currentActiveMipmapLevel = activeMipmapLevel; + + if ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) { + + textures.setupRenderTarget( renderTarget ); + + } + + let framebuffer = _framebuffer; + let isCube = false; + + if ( renderTarget ) { + + const __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer; + + if ( renderTarget.isWebGLCubeRenderTarget ) { + + framebuffer = __webglFramebuffer[ activeCubeFace ]; + isCube = true; + + } else if ( renderTarget.isWebGLMultisampleRenderTarget ) { + + framebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer; + + } else { + + framebuffer = __webglFramebuffer; + + } + + _currentViewport.copy( renderTarget.viewport ); + _currentScissor.copy( renderTarget.scissor ); + _currentScissorTest = renderTarget.scissorTest; + + } else { + + _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor(); + _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor(); + _currentScissorTest = _scissorTest; + + } + + if ( _currentFramebuffer !== framebuffer ) { + + _gl.bindFramebuffer( 36160, framebuffer ); + _currentFramebuffer = framebuffer; + + } + + state.viewport( _currentViewport ); + state.scissor( _currentScissor ); + state.setScissorTest( _currentScissorTest ); + + if ( isCube ) { + + const textureProperties = properties.get( renderTarget.texture ); + _gl.framebufferTexture2D( 36160, 36064, 34069 + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel ); + + } + + }; + + this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) { + + if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' ); + return; + + } + + let framebuffer = properties.get( renderTarget ).__webglFramebuffer; + + if ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) { + + framebuffer = framebuffer[ activeCubeFaceIndex ]; + + } + + if ( framebuffer ) { + + let restore = false; + + if ( framebuffer !== _currentFramebuffer ) { + + _gl.bindFramebuffer( 36160, framebuffer ); + + restore = true; + + } + + try { + + const texture = renderTarget.texture; + const textureFormat = texture.format; + const textureType = texture.type; + + if ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( 35739 ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' ); + return; + + } + + if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( 35738 ) && // IE11, Edge and Chrome Mac < 52 (#9513) + ! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox + ! ( textureType === HalfFloatType && ( capabilities.isWebGL2 ? extensions.get( 'EXT_color_buffer_float' ) : extensions.get( 'EXT_color_buffer_half_float' ) ) ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' ); + return; + + } + + if ( _gl.checkFramebufferStatus( 36160 ) === 36053 ) { + + // the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604) + + if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) { + + _gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer ); + + } + + } else { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' ); + + } + + } finally { + + if ( restore ) { + + _gl.bindFramebuffer( 36160, _currentFramebuffer ); + + } + + } + + } + + }; + + this.copyFramebufferToTexture = function ( position, texture, level = 0 ) { + + const levelScale = Math.pow( 2, - level ); + const width = Math.floor( texture.image.width * levelScale ); + const height = Math.floor( texture.image.height * levelScale ); + const glFormat = utils.convert( texture.format ); + + textures.setTexture2D( texture, 0 ); + + _gl.copyTexImage2D( 3553, level, glFormat, position.x, position.y, width, height, 0 ); + + state.unbindTexture(); + + }; + + this.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) { + + const width = srcTexture.image.width; + const height = srcTexture.image.height; + const glFormat = utils.convert( dstTexture.format ); + const glType = utils.convert( dstTexture.type ); + + textures.setTexture2D( dstTexture, 0 ); + + // As another texture upload may have changed pixelStorei + // parameters, make sure they are correct for the dstTexture + _gl.pixelStorei( 37440, dstTexture.flipY ); + _gl.pixelStorei( 37441, dstTexture.premultiplyAlpha ); + _gl.pixelStorei( 3317, dstTexture.unpackAlignment ); + + if ( srcTexture.isDataTexture ) { + + _gl.texSubImage2D( 3553, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data ); + + } else { + + if ( srcTexture.isCompressedTexture ) { + + _gl.compressedTexSubImage2D( 3553, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data ); + + } else { + + _gl.texSubImage2D( 3553, level, position.x, position.y, glFormat, glType, srcTexture.image ); + + } + + } + + // Generate mipmaps only when copying level 0 + if ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( 3553 ); + + state.unbindTexture(); + + }; + + this.initTexture = function ( texture ) { + + textures.setTexture2D( texture, 0 ); + + state.unbindTexture(); + + }; + + if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { + + __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef + + } + + } + + function WebGL1Renderer( parameters ) { + + WebGLRenderer.call( this, parameters ); + + } + + WebGL1Renderer.prototype = Object.assign( Object.create( WebGLRenderer.prototype ), { + + constructor: WebGL1Renderer, + + isWebGL1Renderer: true + + } ); + + class Scene extends Object3D { + + constructor() { + + super(); + + Object.defineProperty( this, 'isScene', { value: true } ); + + this.type = 'Scene'; + + this.background = null; + this.environment = null; + this.fog = null; + + this.overrideMaterial = null; + + this.autoUpdate = true; // checked by the renderer + + if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { + + __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef + + } + + } + + copy( source, recursive ) { + + super.copy( source, recursive ); + + if ( source.background !== null ) this.background = source.background.clone(); + if ( source.environment !== null ) this.environment = source.environment.clone(); + if ( source.fog !== null ) this.fog = source.fog.clone(); + + if ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone(); + + this.autoUpdate = source.autoUpdate; + this.matrixAutoUpdate = source.matrixAutoUpdate; + + return this; + + } + + toJSON( meta ) { + + const data = super.toJSON( meta ); + + if ( this.background !== null ) data.object.background = this.background.toJSON( meta ); + if ( this.environment !== null ) data.object.environment = this.environment.toJSON( meta ); + if ( this.fog !== null ) data.object.fog = this.fog.toJSON(); + + return data; + + } + + } + + function InterleavedBuffer( array, stride ) { + + this.array = array; + this.stride = stride; + this.count = array !== undefined ? array.length / stride : 0; + + this.usage = StaticDrawUsage; + this.updateRange = { offset: 0, count: - 1 }; + + this.version = 0; + + this.uuid = MathUtils.generateUUID(); + + } + + Object.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + + } ); + + Object.assign( InterleavedBuffer.prototype, { + + isInterleavedBuffer: true, + + onUploadCallback: function () {}, + + setUsage: function ( value ) { + + this.usage = value; + + return this; + + }, + + copy: function ( source ) { + + this.array = new source.array.constructor( source.array ); + this.count = source.count; + this.stride = source.stride; + this.usage = source.usage; + + return this; + + }, + + copyAt: function ( index1, attribute, index2 ) { + + index1 *= this.stride; + index2 *= attribute.stride; + + for ( let i = 0, l = this.stride; i < l; i ++ ) { + + this.array[ index1 + i ] = attribute.array[ index2 + i ]; + + } + + return this; + + }, + + set: function ( value, offset = 0 ) { + + this.array.set( value, offset ); + + return this; + + }, + + clone: function ( data ) { + + if ( data.arrayBuffers === undefined ) { + + data.arrayBuffers = {}; + + } + + if ( this.array.buffer._uuid === undefined ) { + + this.array.buffer._uuid = MathUtils.generateUUID(); + + } + + if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) { + + data.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer; + + } + + const array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] ); + + const ib = new InterleavedBuffer( array, this.stride ); + ib.setUsage( this.usage ); + + return ib; + + }, + + onUpload: function ( callback ) { + + this.onUploadCallback = callback; + + return this; + + }, + + toJSON: function ( data ) { + + if ( data.arrayBuffers === undefined ) { + + data.arrayBuffers = {}; + + } + + // generate UUID for array buffer if necessary + + if ( this.array.buffer._uuid === undefined ) { + + this.array.buffer._uuid = MathUtils.generateUUID(); + + } + + if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) { + + data.arrayBuffers[ this.array.buffer._uuid ] = Array.prototype.slice.call( new Uint32Array( this.array.buffer ) ); + + } + + // + + return { + uuid: this.uuid, + buffer: this.array.buffer._uuid, + type: this.array.constructor.name, + stride: this.stride + }; + + } + + } ); + + const _vector$6 = new Vector3(); + + function InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) { + + this.name = ''; + + this.data = interleavedBuffer; + this.itemSize = itemSize; + this.offset = offset; + + this.normalized = normalized === true; + + } + + Object.defineProperties( InterleavedBufferAttribute.prototype, { + + count: { + + get: function () { + + return this.data.count; + + } + + }, + + array: { + + get: function () { + + return this.data.array; + + } + + }, + + needsUpdate: { + + set: function ( value ) { + + this.data.needsUpdate = value; + + } + + } + + } ); + + Object.assign( InterleavedBufferAttribute.prototype, { + + isInterleavedBufferAttribute: true, + + applyMatrix4: function ( m ) { + + for ( let i = 0, l = this.data.count; i < l; i ++ ) { + + _vector$6.x = this.getX( i ); + _vector$6.y = this.getY( i ); + _vector$6.z = this.getZ( i ); + + _vector$6.applyMatrix4( m ); + + this.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z ); + + } + + return this; + + }, + + setX: function ( index, x ) { + + this.data.array[ index * this.data.stride + this.offset ] = x; + + return this; + + }, + + setY: function ( index, y ) { + + this.data.array[ index * this.data.stride + this.offset + 1 ] = y; + + return this; + + }, + + setZ: function ( index, z ) { + + this.data.array[ index * this.data.stride + this.offset + 2 ] = z; + + return this; + + }, + + setW: function ( index, w ) { + + this.data.array[ index * this.data.stride + this.offset + 3 ] = w; + + return this; + + }, + + getX: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset ]; + + }, + + getY: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 1 ]; + + }, + + getZ: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 2 ]; + + }, + + getW: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 3 ]; + + }, + + setXY: function ( index, x, y ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + + return this; + + }, + + setXYZ: function ( index, x, y, z ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + this.data.array[ index + 2 ] = z; + + return this; + + }, + + setXYZW: function ( index, x, y, z, w ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + this.data.array[ index + 2 ] = z; + this.data.array[ index + 3 ] = w; + + return this; + + }, + + clone: function ( data ) { + + if ( data === undefined ) { + + console.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.' ); + + const array = []; + + for ( let i = 0; i < this.count; i ++ ) { + + const index = i * this.data.stride + this.offset; + + for ( let j = 0; j < this.itemSize; j ++ ) { + + array.push( this.data.array[ index + j ] ); + + } + + } + + return new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized ); + + } else { + + if ( data.interleavedBuffers === undefined ) { + + data.interleavedBuffers = {}; + + } + + if ( data.interleavedBuffers[ this.data.uuid ] === undefined ) { + + data.interleavedBuffers[ this.data.uuid ] = this.data.clone( data ); + + } + + return new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized ); + + } + + }, + + toJSON: function ( data ) { + + if ( data === undefined ) { + + console.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.' ); + + const array = []; + + for ( let i = 0; i < this.count; i ++ ) { + + const index = i * this.data.stride + this.offset; + + for ( let j = 0; j < this.itemSize; j ++ ) { + + array.push( this.data.array[ index + j ] ); + + } + + } + + // deinterleave data and save it as an ordinary buffer attribute for now + + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: array, + normalized: this.normalized + }; + + } else { + + // save as true interlaved attribtue + + if ( data.interleavedBuffers === undefined ) { + + data.interleavedBuffers = {}; + + } + + if ( data.interleavedBuffers[ this.data.uuid ] === undefined ) { + + data.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data ); + + } + + return { + isInterleavedBufferAttribute: true, + itemSize: this.itemSize, + data: this.data.uuid, + offset: this.offset, + normalized: this.normalized + }; + + } + + } + + } ); + + /** + * parameters = { + * color: , + * map: new THREE.Texture( ), + * alphaMap: new THREE.Texture( ), + * rotation: , + * sizeAttenuation: + * } + */ + + function SpriteMaterial( parameters ) { + + Material.call( this ); + + this.type = 'SpriteMaterial'; + + this.color = new Color( 0xffffff ); + + this.map = null; + + this.alphaMap = null; + + this.rotation = 0; + + this.sizeAttenuation = true; + + this.transparent = true; + + this.setValues( parameters ); + + } + + SpriteMaterial.prototype = Object.create( Material.prototype ); + SpriteMaterial.prototype.constructor = SpriteMaterial; + SpriteMaterial.prototype.isSpriteMaterial = true; + + SpriteMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.rotation = source.rotation; + + this.sizeAttenuation = source.sizeAttenuation; + + return this; + + }; + + let _geometry; + + const _intersectPoint = new Vector3(); + const _worldScale = new Vector3(); + const _mvPosition = new Vector3(); + + const _alignedPosition = new Vector2(); + const _rotatedPosition = new Vector2(); + const _viewWorldMatrix = new Matrix4(); + + const _vA$1 = new Vector3(); + const _vB$1 = new Vector3(); + const _vC$1 = new Vector3(); + + const _uvA$1 = new Vector2(); + const _uvB$1 = new Vector2(); + const _uvC$1 = new Vector2(); + + function Sprite( material ) { + + Object3D.call( this ); + + this.type = 'Sprite'; + + if ( _geometry === undefined ) { + + _geometry = new BufferGeometry(); + + const float32Array = new Float32Array( [ + - 0.5, - 0.5, 0, 0, 0, + 0.5, - 0.5, 0, 1, 0, + 0.5, 0.5, 0, 1, 1, + - 0.5, 0.5, 0, 0, 1 + ] ); + + const interleavedBuffer = new InterleavedBuffer( float32Array, 5 ); + + _geometry.setIndex( [ 0, 1, 2, 0, 2, 3 ] ); + _geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) ); + _geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) ); + + } + + this.geometry = _geometry; + this.material = ( material !== undefined ) ? material : new SpriteMaterial(); + + this.center = new Vector2( 0.5, 0.5 ); + + } + + Sprite.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Sprite, + + isSprite: true, + + raycast: function ( raycaster, intersects ) { + + if ( raycaster.camera === null ) { + + console.error( 'THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.' ); + + } + + _worldScale.setFromMatrixScale( this.matrixWorld ); + + _viewWorldMatrix.copy( raycaster.camera.matrixWorld ); + this.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld ); + + _mvPosition.setFromMatrixPosition( this.modelViewMatrix ); + + if ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) { + + _worldScale.multiplyScalar( - _mvPosition.z ); + + } + + const rotation = this.material.rotation; + let sin, cos; + + if ( rotation !== 0 ) { + + cos = Math.cos( rotation ); + sin = Math.sin( rotation ); + + } + + const center = this.center; + + transformVertex( _vA$1.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); + transformVertex( _vB$1.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); + transformVertex( _vC$1.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); + + _uvA$1.set( 0, 0 ); + _uvB$1.set( 1, 0 ); + _uvC$1.set( 1, 1 ); + + // check first triangle + let intersect = raycaster.ray.intersectTriangle( _vA$1, _vB$1, _vC$1, false, _intersectPoint ); + + if ( intersect === null ) { + + // check second triangle + transformVertex( _vB$1.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); + _uvB$1.set( 0, 1 ); + + intersect = raycaster.ray.intersectTriangle( _vA$1, _vC$1, _vB$1, false, _intersectPoint ); + if ( intersect === null ) { + + return; + + } + + } + + const distance = raycaster.ray.origin.distanceTo( _intersectPoint ); + + if ( distance < raycaster.near || distance > raycaster.far ) return; + + intersects.push( { + + distance: distance, + point: _intersectPoint.clone(), + uv: Triangle.getUV( _intersectPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() ), + face: null, + object: this + + } ); + + }, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + if ( source.center !== undefined ) this.center.copy( source.center ); + + this.material = source.material; + + return this; + + } + + } ); + + function transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) { + + // compute position in camera space + _alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale ); + + // to check if rotation is not zero + if ( sin !== undefined ) { + + _rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y ); + _rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y ); + + } else { + + _rotatedPosition.copy( _alignedPosition ); + + } + + + vertexPosition.copy( mvPosition ); + vertexPosition.x += _rotatedPosition.x; + vertexPosition.y += _rotatedPosition.y; + + // transform to world space + vertexPosition.applyMatrix4( _viewWorldMatrix ); + + } + + const _v1$4 = new Vector3(); + const _v2$2 = new Vector3(); + + function LOD() { + + Object3D.call( this ); + + this._currentLevel = 0; + + this.type = 'LOD'; + + Object.defineProperties( this, { + levels: { + enumerable: true, + value: [] + } + } ); + + this.autoUpdate = true; + + } + + LOD.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: LOD, + + isLOD: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source, false ); + + const levels = source.levels; + + for ( let i = 0, l = levels.length; i < l; i ++ ) { + + const level = levels[ i ]; + + this.addLevel( level.object.clone(), level.distance ); + + } + + this.autoUpdate = source.autoUpdate; + + return this; + + }, + + addLevel: function ( object, distance = 0 ) { + + distance = Math.abs( distance ); + + const levels = this.levels; + + let l; + + for ( l = 0; l < levels.length; l ++ ) { + + if ( distance < levels[ l ].distance ) { + + break; + + } + + } + + levels.splice( l, 0, { distance: distance, object: object } ); + + this.add( object ); + + return this; + + }, + + getCurrentLevel: function () { + + return this._currentLevel; + + }, + + getObjectForDistance: function ( distance ) { + + const levels = this.levels; + + if ( levels.length > 0 ) { + + let i, l; + + for ( i = 1, l = levels.length; i < l; i ++ ) { + + if ( distance < levels[ i ].distance ) { + + break; + + } + + } + + return levels[ i - 1 ].object; + + } + + return null; + + }, + + raycast: function ( raycaster, intersects ) { + + const levels = this.levels; + + if ( levels.length > 0 ) { + + _v1$4.setFromMatrixPosition( this.matrixWorld ); + + const distance = raycaster.ray.origin.distanceTo( _v1$4 ); + + this.getObjectForDistance( distance ).raycast( raycaster, intersects ); + + } + + }, + + update: function ( camera ) { + + const levels = this.levels; + + if ( levels.length > 1 ) { + + _v1$4.setFromMatrixPosition( camera.matrixWorld ); + _v2$2.setFromMatrixPosition( this.matrixWorld ); + + const distance = _v1$4.distanceTo( _v2$2 ) / camera.zoom; + + levels[ 0 ].object.visible = true; + + let i, l; + + for ( i = 1, l = levels.length; i < l; i ++ ) { + + if ( distance >= levels[ i ].distance ) { + + levels[ i - 1 ].object.visible = false; + levels[ i ].object.visible = true; + + } else { + + break; + + } + + } + + this._currentLevel = i - 1; + + for ( ; i < l; i ++ ) { + + levels[ i ].object.visible = false; + + } + + } + + }, + + toJSON: function ( meta ) { + + const data = Object3D.prototype.toJSON.call( this, meta ); + + if ( this.autoUpdate === false ) data.object.autoUpdate = false; + + data.object.levels = []; + + const levels = this.levels; + + for ( let i = 0, l = levels.length; i < l; i ++ ) { + + const level = levels[ i ]; + + data.object.levels.push( { + object: level.object.uuid, + distance: level.distance + } ); + + } + + return data; + + } + + } ); + + function SkinnedMesh( geometry, material ) { + + if ( geometry && geometry.isGeometry ) { + + console.error( 'THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + Mesh.call( this, geometry, material ); + + this.type = 'SkinnedMesh'; + + this.bindMode = 'attached'; + this.bindMatrix = new Matrix4(); + this.bindMatrixInverse = new Matrix4(); + + } + + SkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), { + + constructor: SkinnedMesh, + + isSkinnedMesh: true, + + copy: function ( source ) { + + Mesh.prototype.copy.call( this, source ); + + this.bindMode = source.bindMode; + this.bindMatrix.copy( source.bindMatrix ); + this.bindMatrixInverse.copy( source.bindMatrixInverse ); + + this.skeleton = source.skeleton; + + return this; + + }, + + bind: function ( skeleton, bindMatrix ) { + + this.skeleton = skeleton; + + if ( bindMatrix === undefined ) { + + this.updateMatrixWorld( true ); + + this.skeleton.calculateInverses(); + + bindMatrix = this.matrixWorld; + + } + + this.bindMatrix.copy( bindMatrix ); + this.bindMatrixInverse.copy( bindMatrix ).invert(); + + }, + + pose: function () { + + this.skeleton.pose(); + + }, + + normalizeSkinWeights: function () { + + const vector = new Vector4(); + + const skinWeight = this.geometry.attributes.skinWeight; + + for ( let i = 0, l = skinWeight.count; i < l; i ++ ) { + + vector.x = skinWeight.getX( i ); + vector.y = skinWeight.getY( i ); + vector.z = skinWeight.getZ( i ); + vector.w = skinWeight.getW( i ); + + const scale = 1.0 / vector.manhattanLength(); + + if ( scale !== Infinity ) { + + vector.multiplyScalar( scale ); + + } else { + + vector.set( 1, 0, 0, 0 ); // do something reasonable + + } + + skinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w ); + + } + + }, + + updateMatrixWorld: function ( force ) { + + Mesh.prototype.updateMatrixWorld.call( this, force ); + + if ( this.bindMode === 'attached' ) { + + this.bindMatrixInverse.copy( this.matrixWorld ).invert(); + + } else if ( this.bindMode === 'detached' ) { + + this.bindMatrixInverse.copy( this.bindMatrix ).invert(); + + } else { + + console.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode ); + + } + + }, + + boneTransform: ( function () { + + const basePosition = new Vector3(); + + const skinIndex = new Vector4(); + const skinWeight = new Vector4(); + + const vector = new Vector3(); + const matrix = new Matrix4(); + + return function ( index, target ) { + + const skeleton = this.skeleton; + const geometry = this.geometry; + + skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index ); + skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index ); + + basePosition.fromBufferAttribute( geometry.attributes.position, index ).applyMatrix4( this.bindMatrix ); + + target.set( 0, 0, 0 ); + + for ( let i = 0; i < 4; i ++ ) { + + const weight = skinWeight.getComponent( i ); + + if ( weight !== 0 ) { + + const boneIndex = skinIndex.getComponent( i ); + + matrix.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] ); + + target.addScaledVector( vector.copy( basePosition ).applyMatrix4( matrix ), weight ); + + } + + } + + return target.applyMatrix4( this.bindMatrixInverse ); + + }; + + }() ) + + } ); + + function Bone() { + + Object3D.call( this ); + + this.type = 'Bone'; + + } + + Bone.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Bone, + + isBone: true + + } ); + + const _offsetMatrix = new Matrix4(); + const _identityMatrix = new Matrix4(); + + function Skeleton( bones = [], boneInverses = [] ) { + + this.uuid = MathUtils.generateUUID(); + + this.bones = bones.slice( 0 ); + this.boneInverses = boneInverses; + this.boneMatrices = null; + + this.boneTexture = null; + this.boneTextureSize = 0; + + this.frame = - 1; + + this.init(); + + } + + Object.assign( Skeleton.prototype, { + + init: function () { + + const bones = this.bones; + const boneInverses = this.boneInverses; + + this.boneMatrices = new Float32Array( bones.length * 16 ); + + // calculate inverse bone matrices if necessary + + if ( boneInverses.length === 0 ) { + + this.calculateInverses(); + + } else { + + // handle special case + + if ( bones.length !== boneInverses.length ) { + + console.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' ); + + this.boneInverses = []; + + for ( let i = 0, il = this.bones.length; i < il; i ++ ) { + + this.boneInverses.push( new Matrix4() ); + + } + + } + + } + + }, + + calculateInverses: function () { + + this.boneInverses.length = 0; + + for ( let i = 0, il = this.bones.length; i < il; i ++ ) { + + const inverse = new Matrix4(); + + if ( this.bones[ i ] ) { + + inverse.copy( this.bones[ i ].matrixWorld ).invert(); + + } + + this.boneInverses.push( inverse ); + + } + + }, + + pose: function () { + + // recover the bind-time world matrices + + for ( let i = 0, il = this.bones.length; i < il; i ++ ) { + + const bone = this.bones[ i ]; + + if ( bone ) { + + bone.matrixWorld.copy( this.boneInverses[ i ] ).invert(); + + } + + } + + // compute the local matrices, positions, rotations and scales + + for ( let i = 0, il = this.bones.length; i < il; i ++ ) { + + const bone = this.bones[ i ]; + + if ( bone ) { + + if ( bone.parent && bone.parent.isBone ) { + + bone.matrix.copy( bone.parent.matrixWorld ).invert(); + bone.matrix.multiply( bone.matrixWorld ); + + } else { + + bone.matrix.copy( bone.matrixWorld ); + + } + + bone.matrix.decompose( bone.position, bone.quaternion, bone.scale ); + + } + + } + + }, + + update: function () { + + const bones = this.bones; + const boneInverses = this.boneInverses; + const boneMatrices = this.boneMatrices; + const boneTexture = this.boneTexture; + + // flatten bone matrices to array + + for ( let i = 0, il = bones.length; i < il; i ++ ) { + + // compute the offset between the current and the original transform + + const matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix; + + _offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] ); + _offsetMatrix.toArray( boneMatrices, i * 16 ); + + } + + if ( boneTexture !== null ) { + + boneTexture.needsUpdate = true; + + } + + }, + + clone: function () { + + return new Skeleton( this.bones, this.boneInverses ); + + }, + + getBoneByName: function ( name ) { + + for ( let i = 0, il = this.bones.length; i < il; i ++ ) { + + const bone = this.bones[ i ]; + + if ( bone.name === name ) { + + return bone; + + } + + } + + return undefined; + + }, + + dispose: function ( ) { + + if ( this.boneTexture !== null ) { + + this.boneTexture.dispose(); + + this.boneTexture = null; + + } + + }, + + fromJSON: function ( json, bones ) { + + this.uuid = json.uuid; + + for ( let i = 0, l = json.bones.length; i < l; i ++ ) { + + const uuid = json.bones[ i ]; + let bone = bones[ uuid ]; + + if ( bone === undefined ) { + + console.warn( 'THREE.Skeleton: No bone found with UUID:', uuid ); + bone = new Bone(); + + } + + this.bones.push( bone ); + this.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) ); + + } + + this.init(); + + return this; + + }, + + toJSON: function () { + + const data = { + metadata: { + version: 4.5, + type: 'Skeleton', + generator: 'Skeleton.toJSON' + }, + bones: [], + boneInverses: [] + }; + + data.uuid = this.uuid; + + const bones = this.bones; + const boneInverses = this.boneInverses; + + for ( let i = 0, l = bones.length; i < l; i ++ ) { + + const bone = bones[ i ]; + data.bones.push( bone.uuid ); + + const boneInverse = boneInverses[ i ]; + data.boneInverses.push( boneInverse.toArray() ); + + } + + return data; + + } + + } ); + + const _instanceLocalMatrix = new Matrix4(); + const _instanceWorldMatrix = new Matrix4(); + + const _instanceIntersects = []; + + const _mesh = new Mesh(); + + function InstancedMesh( geometry, material, count ) { + + Mesh.call( this, geometry, material ); + + this.instanceMatrix = new BufferAttribute( new Float32Array( count * 16 ), 16 ); + this.instanceColor = null; + + this.count = count; + + this.frustumCulled = false; + + } + + InstancedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), { + + constructor: InstancedMesh, + + isInstancedMesh: true, + + copy: function ( source ) { + + Mesh.prototype.copy.call( this, source ); + + this.instanceMatrix.copy( source.instanceMatrix ); + this.count = source.count; + + return this; + + }, + + getColorAt: function ( index, color ) { + + color.fromArray( this.instanceColor.array, index * 3 ); + + }, + + getMatrixAt: function ( index, matrix ) { + + matrix.fromArray( this.instanceMatrix.array, index * 16 ); + + }, + + raycast: function ( raycaster, intersects ) { + + const matrixWorld = this.matrixWorld; + const raycastTimes = this.count; + + _mesh.geometry = this.geometry; + _mesh.material = this.material; + + if ( _mesh.material === undefined ) return; + + for ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) { + + // calculate the world matrix for each instance + + this.getMatrixAt( instanceId, _instanceLocalMatrix ); + + _instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix ); + + // the mesh represents this single instance + + _mesh.matrixWorld = _instanceWorldMatrix; + + _mesh.raycast( raycaster, _instanceIntersects ); + + // process the result of raycast + + for ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) { + + const intersect = _instanceIntersects[ i ]; + intersect.instanceId = instanceId; + intersect.object = this; + intersects.push( intersect ); + + } + + _instanceIntersects.length = 0; + + } + + }, + + setColorAt: function ( index, color ) { + + if ( this.instanceColor === null ) { + + this.instanceColor = new BufferAttribute( new Float32Array( this.count * 3 ), 3 ); + + } + + color.toArray( this.instanceColor.array, index * 3 ); + + }, + + setMatrixAt: function ( index, matrix ) { + + matrix.toArray( this.instanceMatrix.array, index * 16 ); + + }, + + updateMorphTargets: function () { + + } + + } ); + + /** + * parameters = { + * color: , + * opacity: , + * + * linewidth: , + * linecap: "round", + * linejoin: "round" + * } + */ + + function LineBasicMaterial( parameters ) { + + Material.call( this ); + + this.type = 'LineBasicMaterial'; + + this.color = new Color( 0xffffff ); + + this.linewidth = 1; + this.linecap = 'round'; + this.linejoin = 'round'; + + this.morphTargets = false; + + this.setValues( parameters ); + + } + + LineBasicMaterial.prototype = Object.create( Material.prototype ); + LineBasicMaterial.prototype.constructor = LineBasicMaterial; + + LineBasicMaterial.prototype.isLineBasicMaterial = true; + + LineBasicMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.linewidth = source.linewidth; + this.linecap = source.linecap; + this.linejoin = source.linejoin; + + this.morphTargets = source.morphTargets; + + return this; + + }; + + const _start = new Vector3(); + const _end = new Vector3(); + const _inverseMatrix$1 = new Matrix4(); + const _ray$1 = new Ray(); + const _sphere$2 = new Sphere(); + + function Line( geometry, material, mode ) { + + if ( mode === 1 ) { + + console.error( 'THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead.' ); + + } + + Object3D.call( this ); + + this.type = 'Line'; + + this.geometry = geometry !== undefined ? geometry : new BufferGeometry(); + this.material = material !== undefined ? material : new LineBasicMaterial(); + + this.updateMorphTargets(); + + } + + Line.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Line, + + isLine: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + this.material = source.material; + this.geometry = source.geometry; + + return this; + + }, + + computeLineDistances: function () { + + const geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + // we assume non-indexed geometry + + if ( geometry.index === null ) { + + const positionAttribute = geometry.attributes.position; + const lineDistances = [ 0 ]; + + for ( let i = 1, l = positionAttribute.count; i < l; i ++ ) { + + _start.fromBufferAttribute( positionAttribute, i - 1 ); + _end.fromBufferAttribute( positionAttribute, i ); + + lineDistances[ i ] = lineDistances[ i - 1 ]; + lineDistances[ i ] += _start.distanceTo( _end ); + + } + + geometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) ); + + } else { + + console.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' ); + + } + + } else if ( geometry.isGeometry ) { + + const vertices = geometry.vertices; + const lineDistances = geometry.lineDistances; + + lineDistances[ 0 ] = 0; + + for ( let i = 1, l = vertices.length; i < l; i ++ ) { + + lineDistances[ i ] = lineDistances[ i - 1 ]; + lineDistances[ i ] += vertices[ i - 1 ].distanceTo( vertices[ i ] ); + + } + + } + + return this; + + }, + + raycast: function ( raycaster, intersects ) { + + const geometry = this.geometry; + const matrixWorld = this.matrixWorld; + const threshold = raycaster.params.Line.threshold; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + _sphere$2.copy( geometry.boundingSphere ); + _sphere$2.applyMatrix4( matrixWorld ); + _sphere$2.radius += threshold; + + if ( raycaster.ray.intersectsSphere( _sphere$2 ) === false ) return; + + // + + _inverseMatrix$1.copy( matrixWorld ).invert(); + _ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 ); + + const localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ); + const localThresholdSq = localThreshold * localThreshold; + + const vStart = new Vector3(); + const vEnd = new Vector3(); + const interSegment = new Vector3(); + const interRay = new Vector3(); + const step = this.isLineSegments ? 2 : 1; + + if ( geometry.isBufferGeometry ) { + + const index = geometry.index; + const attributes = geometry.attributes; + const positionAttribute = attributes.position; + + if ( index !== null ) { + + const indices = index.array; + + for ( let i = 0, l = indices.length - 1; i < l; i += step ) { + + const a = indices[ i ]; + const b = indices[ i + 1 ]; + + vStart.fromBufferAttribute( positionAttribute, a ); + vEnd.fromBufferAttribute( positionAttribute, b ); + + const distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); + + if ( distSq > localThresholdSq ) continue; + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + const distance = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance < raycaster.near || distance > raycaster.far ) continue; + + intersects.push( { + + distance: distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } else { + + for ( let i = 0, l = positionAttribute.count - 1; i < l; i += step ) { + + vStart.fromBufferAttribute( positionAttribute, i ); + vEnd.fromBufferAttribute( positionAttribute, i + 1 ); + + const distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); + + if ( distSq > localThresholdSq ) continue; + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + const distance = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance < raycaster.near || distance > raycaster.far ) continue; + + intersects.push( { + + distance: distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } + + } else if ( geometry.isGeometry ) { + + const vertices = geometry.vertices; + const nbVertices = vertices.length; + + for ( let i = 0; i < nbVertices - 1; i += step ) { + + const distSq = _ray$1.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment ); + + if ( distSq > localThresholdSq ) continue; + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + const distance = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance < raycaster.near || distance > raycaster.far ) continue; + + intersects.push( { + + distance: distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } + + }, + + updateMorphTargets: function () { + + const geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + 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; + + } + + } + + } + + } else { + + const morphTargets = geometry.morphTargets; + + if ( morphTargets !== undefined && morphTargets.length > 0 ) { + + console.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + } + + } + + } ); + + const _start$1 = new Vector3(); + const _end$1 = new Vector3(); + + function LineSegments( geometry, material ) { + + Line.call( this, geometry, material ); + + this.type = 'LineSegments'; + + } + + LineSegments.prototype = Object.assign( Object.create( Line.prototype ), { + + constructor: LineSegments, + + isLineSegments: true, + + computeLineDistances: function () { + + const geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + // we assume non-indexed geometry + + if ( geometry.index === null ) { + + const positionAttribute = geometry.attributes.position; + const lineDistances = []; + + for ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) { + + _start$1.fromBufferAttribute( positionAttribute, i ); + _end$1.fromBufferAttribute( positionAttribute, i + 1 ); + + lineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ]; + lineDistances[ i + 1 ] = lineDistances[ i ] + _start$1.distanceTo( _end$1 ); + + } + + geometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) ); + + } else { + + console.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' ); + + } + + } else if ( geometry.isGeometry ) { + + const vertices = geometry.vertices; + const lineDistances = geometry.lineDistances; + + for ( let i = 0, l = vertices.length; i < l; i += 2 ) { + + _start$1.copy( vertices[ i ] ); + _end$1.copy( vertices[ i + 1 ] ); + + lineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ]; + lineDistances[ i + 1 ] = lineDistances[ i ] + _start$1.distanceTo( _end$1 ); + + } + + } + + return this; + + } + + } ); + + function LineLoop( geometry, material ) { + + Line.call( this, geometry, material ); + + this.type = 'LineLoop'; + + } + + LineLoop.prototype = Object.assign( Object.create( Line.prototype ), { + + constructor: LineLoop, + + isLineLoop: true, + + } ); + + /** + * parameters = { + * color: , + * opacity: , + * map: new THREE.Texture( ), + * alphaMap: new THREE.Texture( ), + * + * size: , + * sizeAttenuation: + * + * morphTargets: + * } + */ + + function PointsMaterial( parameters ) { + + Material.call( this ); + + this.type = 'PointsMaterial'; + + this.color = new Color( 0xffffff ); + + this.map = null; + + this.alphaMap = null; + + this.size = 1; + this.sizeAttenuation = true; + + this.morphTargets = false; + + this.setValues( parameters ); + + } + + PointsMaterial.prototype = Object.create( Material.prototype ); + PointsMaterial.prototype.constructor = PointsMaterial; + + PointsMaterial.prototype.isPointsMaterial = true; + + PointsMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.size = source.size; + this.sizeAttenuation = source.sizeAttenuation; + + this.morphTargets = source.morphTargets; + + return this; + + }; + + const _inverseMatrix$2 = new Matrix4(); + const _ray$2 = new Ray(); + const _sphere$3 = new Sphere(); + const _position$1 = new Vector3(); + + function Points( geometry, material ) { + + Object3D.call( this ); + + this.type = 'Points'; + + this.geometry = geometry !== undefined ? geometry : new BufferGeometry(); + this.material = material !== undefined ? material : new PointsMaterial(); + + this.updateMorphTargets(); + + } + + Points.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Points, + + isPoints: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + this.material = source.material; + this.geometry = source.geometry; + + return this; + + }, + + raycast: function ( raycaster, intersects ) { + + const geometry = this.geometry; + const matrixWorld = this.matrixWorld; + const threshold = raycaster.params.Points.threshold; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + _sphere$3.copy( geometry.boundingSphere ); + _sphere$3.applyMatrix4( matrixWorld ); + _sphere$3.radius += threshold; + + if ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return; + + // + + _inverseMatrix$2.copy( matrixWorld ).invert(); + _ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 ); + + const localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ); + const localThresholdSq = localThreshold * localThreshold; + + if ( geometry.isBufferGeometry ) { + + const index = geometry.index; + const attributes = geometry.attributes; + const positionAttribute = attributes.position; + + if ( index !== null ) { + + const indices = index.array; + + for ( let i = 0, il = indices.length; i < il; i ++ ) { + + const a = indices[ i ]; + + _position$1.fromBufferAttribute( positionAttribute, a ); + + testPoint( _position$1, a, localThresholdSq, matrixWorld, raycaster, intersects, this ); + + } + + } else { + + for ( let i = 0, l = positionAttribute.count; i < l; i ++ ) { + + _position$1.fromBufferAttribute( positionAttribute, i ); + + testPoint( _position$1, i, localThresholdSq, matrixWorld, raycaster, intersects, this ); + + } + + } + + } else { + + const vertices = geometry.vertices; + + for ( let i = 0, l = vertices.length; i < l; i ++ ) { + + testPoint( vertices[ i ], i, localThresholdSq, matrixWorld, raycaster, intersects, this ); + + } + + } + + }, + + updateMorphTargets: function () { + + const geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + 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; + + } + + } + + } + + } else { + + const morphTargets = geometry.morphTargets; + + if ( morphTargets !== undefined && morphTargets.length > 0 ) { + + console.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + } + + } + + } ); + + function testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) { + + const rayPointDistanceSq = _ray$2.distanceSqToPoint( point ); + + if ( rayPointDistanceSq < localThresholdSq ) { + + const intersectPoint = new Vector3(); + + _ray$2.closestPointToPoint( point, intersectPoint ); + intersectPoint.applyMatrix4( matrixWorld ); + + const distance = raycaster.ray.origin.distanceTo( intersectPoint ); + + if ( distance < raycaster.near || distance > raycaster.far ) return; + + intersects.push( { + + distance: distance, + distanceToRay: Math.sqrt( rayPointDistanceSq ), + point: intersectPoint, + index: index, + face: null, + object: object + + } ); + + } + + } + + function VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { + + Texture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.format = format !== undefined ? format : RGBFormat; + + this.minFilter = minFilter !== undefined ? minFilter : LinearFilter; + this.magFilter = magFilter !== undefined ? magFilter : LinearFilter; + + this.generateMipmaps = false; + + const scope = this; + + function updateVideo() { + + scope.needsUpdate = true; + video.requestVideoFrameCallback( updateVideo ); + + } + + if ( 'requestVideoFrameCallback' in video ) { + + video.requestVideoFrameCallback( updateVideo ); + + } + + } + + VideoTexture.prototype = Object.assign( Object.create( Texture.prototype ), { + + constructor: VideoTexture, + + clone: function () { + + return new this.constructor( this.image ).copy( this ); + + }, + + isVideoTexture: true, + + update: function () { + + const video = this.image; + const hasVideoFrameCallback = 'requestVideoFrameCallback' in video; + + if ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) { + + this.needsUpdate = true; + + } + + } + + } ); + + function CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { + + Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.image = { width: width, height: height }; + this.mipmaps = mipmaps; + + // no flipping for cube textures + // (also flipping doesn't work for compressed textures ) + + this.flipY = false; + + // can't generate mipmaps for compressed textures + // mips must be embedded in DDS files + + this.generateMipmaps = false; + + } + + CompressedTexture.prototype = Object.create( Texture.prototype ); + CompressedTexture.prototype.constructor = CompressedTexture; + + CompressedTexture.prototype.isCompressedTexture = true; + + function CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { + + Texture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.needsUpdate = true; + + } + + CanvasTexture.prototype = Object.create( Texture.prototype ); + CanvasTexture.prototype.constructor = CanvasTexture; + CanvasTexture.prototype.isCanvasTexture = true; + + function DepthTexture( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) { + + format = format !== undefined ? format : DepthFormat; + + if ( format !== DepthFormat && format !== DepthStencilFormat ) { + + throw new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' ); + + } + + if ( type === undefined && format === DepthFormat ) type = UnsignedShortType; + if ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type; + + Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.image = { width: width, height: height }; + + this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; + this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; + + this.flipY = false; + this.generateMipmaps = false; + + } + + DepthTexture.prototype = Object.create( Texture.prototype ); + DepthTexture.prototype.constructor = DepthTexture; + DepthTexture.prototype.isDepthTexture = true; + + let _geometryId = 0; // Geometry uses even numbers as Id + const _m1$3 = new Matrix4(); + const _obj$1 = new Object3D(); + const _offset$1 = new Vector3(); + + function Geometry() { + + Object.defineProperty( this, 'id', { value: _geometryId += 2 } ); + + this.uuid = MathUtils.generateUUID(); + + this.name = ''; + this.type = 'Geometry'; + + this.vertices = []; + this.colors = []; + this.faces = []; + this.faceVertexUvs = [[]]; + + this.morphTargets = []; + this.morphNormals = []; + + this.skinWeights = []; + this.skinIndices = []; + + this.lineDistances = []; + + this.boundingBox = null; + this.boundingSphere = null; + + // update flags + + this.elementsNeedUpdate = false; + this.verticesNeedUpdate = false; + this.uvsNeedUpdate = false; + this.normalsNeedUpdate = false; + this.colorsNeedUpdate = false; + this.lineDistancesNeedUpdate = false; + this.groupsNeedUpdate = false; + + } + + Geometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: Geometry, + + isGeometry: true, + + applyMatrix4: function ( matrix ) { + + const normalMatrix = new Matrix3().getNormalMatrix( matrix ); + + for ( let i = 0, il = this.vertices.length; i < il; i ++ ) { + + const vertex = this.vertices[ i ]; + vertex.applyMatrix4( matrix ); + + } + + for ( let i = 0, il = this.faces.length; i < il; i ++ ) { + + const face = this.faces[ i ]; + face.normal.applyMatrix3( normalMatrix ).normalize(); + + for ( let j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) { + + face.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize(); + + } + + } + + if ( this.boundingBox !== null ) { + + this.computeBoundingBox(); + + } + + if ( this.boundingSphere !== null ) { + + this.computeBoundingSphere(); + + } + + this.verticesNeedUpdate = true; + this.normalsNeedUpdate = true; + + return this; + + }, + + rotateX: function ( angle ) { + + // rotate geometry around world x-axis + + _m1$3.makeRotationX( angle ); + + this.applyMatrix4( _m1$3 ); + + return this; + + }, + + rotateY: function ( angle ) { + + // rotate geometry around world y-axis + + _m1$3.makeRotationY( angle ); + + this.applyMatrix4( _m1$3 ); + + return this; + + }, + + rotateZ: function ( angle ) { + + // rotate geometry around world z-axis + + _m1$3.makeRotationZ( angle ); + + this.applyMatrix4( _m1$3 ); + + return this; + + }, + + translate: function ( x, y, z ) { + + // translate geometry + + _m1$3.makeTranslation( x, y, z ); + + this.applyMatrix4( _m1$3 ); + + return this; + + }, + + scale: function ( x, y, z ) { + + // scale geometry + + _m1$3.makeScale( x, y, z ); + + this.applyMatrix4( _m1$3 ); + + return this; + + }, + + lookAt: function ( vector ) { + + _obj$1.lookAt( vector ); + + _obj$1.updateMatrix(); + + this.applyMatrix4( _obj$1.matrix ); + + return this; + + }, + + fromBufferGeometry: function ( geometry ) { + + const scope = this; + + const index = geometry.index !== null ? geometry.index : undefined; + const attributes = geometry.attributes; + + if ( attributes.position === undefined ) { + + console.error( 'THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.' ); + return this; + + } + + const position = attributes.position; + const normal = attributes.normal; + const color = attributes.color; + const uv = attributes.uv; + const uv2 = attributes.uv2; + + if ( uv2 !== undefined ) this.faceVertexUvs[ 1 ] = []; + + for ( let i = 0; i < position.count; i ++ ) { + + scope.vertices.push( new Vector3().fromBufferAttribute( position, i ) ); + + if ( color !== undefined ) { + + scope.colors.push( new Color().fromBufferAttribute( color, i ) ); + + } + + } + + function addFace( a, b, c, materialIndex ) { + + const vertexColors = ( color === undefined ) ? [] : [ + scope.colors[ a ].clone(), + scope.colors[ b ].clone(), + scope.colors[ c ].clone() + ]; + + const vertexNormals = ( normal === undefined ) ? [] : [ + new Vector3().fromBufferAttribute( normal, a ), + new Vector3().fromBufferAttribute( normal, b ), + new Vector3().fromBufferAttribute( normal, c ) + ]; + + const face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex ); + + scope.faces.push( face ); + + if ( uv !== undefined ) { + + scope.faceVertexUvs[ 0 ].push( [ + new Vector2().fromBufferAttribute( uv, a ), + new Vector2().fromBufferAttribute( uv, b ), + new Vector2().fromBufferAttribute( uv, c ) + ] ); + + } + + if ( uv2 !== undefined ) { + + scope.faceVertexUvs[ 1 ].push( [ + new Vector2().fromBufferAttribute( uv2, a ), + new Vector2().fromBufferAttribute( uv2, b ), + new Vector2().fromBufferAttribute( uv2, c ) + ] ); + + } + + } + + const groups = geometry.groups; + + if ( groups.length > 0 ) { + + for ( let i = 0; i < groups.length; i ++ ) { + + const group = groups[ i ]; + + const start = group.start; + const count = group.count; + + for ( let j = start, jl = start + count; j < jl; j += 3 ) { + + if ( index !== undefined ) { + + addFace( index.getX( j ), index.getX( j + 1 ), index.getX( j + 2 ), group.materialIndex ); + + } else { + + addFace( j, j + 1, j + 2, group.materialIndex ); + + } + + } + + } + + } else { + + if ( index !== undefined ) { + + for ( let i = 0; i < index.count; i += 3 ) { + + addFace( index.getX( i ), index.getX( i + 1 ), index.getX( i + 2 ) ); + + } + + } else { + + for ( let i = 0; i < position.count; i += 3 ) { + + addFace( i, i + 1, i + 2 ); + + } + + } + + } + + this.computeFaceNormals(); + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + return this; + + }, + + center: function () { + + this.computeBoundingBox(); + + this.boundingBox.getCenter( _offset$1 ).negate(); + + this.translate( _offset$1.x, _offset$1.y, _offset$1.z ); + + return this; + + }, + + normalize: function () { + + this.computeBoundingSphere(); + + const center = this.boundingSphere.center; + const radius = this.boundingSphere.radius; + + const s = radius === 0 ? 1 : 1.0 / radius; + + const matrix = new Matrix4(); + matrix.set( + s, 0, 0, - s * center.x, + 0, s, 0, - s * center.y, + 0, 0, s, - s * center.z, + 0, 0, 0, 1 + ); + + this.applyMatrix4( matrix ); + + return this; + + }, + + computeFaceNormals: function () { + + const cb = new Vector3(), ab = new Vector3(); + + for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { + + const face = this.faces[ f ]; + + const vA = this.vertices[ face.a ]; + const vB = this.vertices[ face.b ]; + const vC = this.vertices[ face.c ]; + + cb.subVectors( vC, vB ); + ab.subVectors( vA, vB ); + cb.cross( ab ); + + cb.normalize(); + + face.normal.copy( cb ); + + } + + }, + + computeVertexNormals: function ( areaWeighted = true ) { + + const vertices = new Array( this.vertices.length ); + + for ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) { + + vertices[ v ] = new Vector3(); + + } + + if ( areaWeighted ) { + + // vertex normals weighted by triangle areas + // http://www.iquilezles.org/www/articles/normals/normals.htm + + const cb = new Vector3(), ab = new Vector3(); + + for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { + + const face = this.faces[ f ]; + + const vA = this.vertices[ face.a ]; + const vB = this.vertices[ face.b ]; + const vC = this.vertices[ face.c ]; + + cb.subVectors( vC, vB ); + ab.subVectors( vA, vB ); + cb.cross( ab ); + + vertices[ face.a ].add( cb ); + vertices[ face.b ].add( cb ); + vertices[ face.c ].add( cb ); + + } + + } else { + + this.computeFaceNormals(); + + for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { + + const face = this.faces[ f ]; + + vertices[ face.a ].add( face.normal ); + vertices[ face.b ].add( face.normal ); + vertices[ face.c ].add( face.normal ); + + } + + } + + for ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) { + + vertices[ v ].normalize(); + + } + + for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { + + const face = this.faces[ f ]; + + const vertexNormals = face.vertexNormals; + + if ( vertexNormals.length === 3 ) { + + vertexNormals[ 0 ].copy( vertices[ face.a ] ); + vertexNormals[ 1 ].copy( vertices[ face.b ] ); + vertexNormals[ 2 ].copy( vertices[ face.c ] ); + + } else { + + vertexNormals[ 0 ] = vertices[ face.a ].clone(); + vertexNormals[ 1 ] = vertices[ face.b ].clone(); + vertexNormals[ 2 ] = vertices[ face.c ].clone(); + + } + + } + + if ( this.faces.length > 0 ) { + + this.normalsNeedUpdate = true; + + } + + }, + + computeFlatVertexNormals: function () { + + this.computeFaceNormals(); + + for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { + + const face = this.faces[ f ]; + + const vertexNormals = face.vertexNormals; + + if ( vertexNormals.length === 3 ) { + + vertexNormals[ 0 ].copy( face.normal ); + vertexNormals[ 1 ].copy( face.normal ); + vertexNormals[ 2 ].copy( face.normal ); + + } else { + + vertexNormals[ 0 ] = face.normal.clone(); + vertexNormals[ 1 ] = face.normal.clone(); + vertexNormals[ 2 ] = face.normal.clone(); + + } + + } + + if ( this.faces.length > 0 ) { + + this.normalsNeedUpdate = true; + + } + + }, + + computeMorphNormals: function () { + + // save original normals + // - create temp variables on first access + // otherwise just copy (for faster repeated calls) + + for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { + + const face = this.faces[ f ]; + + if ( ! face.__originalFaceNormal ) { + + face.__originalFaceNormal = face.normal.clone(); + + } else { + + face.__originalFaceNormal.copy( face.normal ); + + } + + if ( ! face.__originalVertexNormals ) face.__originalVertexNormals = []; + + for ( let i = 0, il = face.vertexNormals.length; i < il; i ++ ) { + + if ( ! face.__originalVertexNormals[ i ] ) { + + face.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone(); + + } else { + + face.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] ); + + } + + } + + } + + // use temp geometry to compute face and vertex normals for each morph + + const tmpGeo = new Geometry(); + tmpGeo.faces = this.faces; + + for ( let i = 0, il = this.morphTargets.length; i < il; i ++ ) { + + // create on first access + + if ( ! this.morphNormals[ i ] ) { + + this.morphNormals[ i ] = {}; + this.morphNormals[ i ].faceNormals = []; + this.morphNormals[ i ].vertexNormals = []; + + const dstNormalsFace = this.morphNormals[ i ].faceNormals; + const dstNormalsVertex = this.morphNormals[ i ].vertexNormals; + + for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { + + const faceNormal = new Vector3(); + const vertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() }; + + dstNormalsFace.push( faceNormal ); + dstNormalsVertex.push( vertexNormals ); + + } + + } + + const morphNormals = this.morphNormals[ i ]; + + // set vertices to morph target + + tmpGeo.vertices = this.morphTargets[ i ].vertices; + + // compute morph normals + + tmpGeo.computeFaceNormals(); + tmpGeo.computeVertexNormals(); + + // store morph normals + + for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { + + const face = this.faces[ f ]; + + const faceNormal = morphNormals.faceNormals[ f ]; + const vertexNormals = morphNormals.vertexNormals[ f ]; + + faceNormal.copy( face.normal ); + + vertexNormals.a.copy( face.vertexNormals[ 0 ] ); + vertexNormals.b.copy( face.vertexNormals[ 1 ] ); + vertexNormals.c.copy( face.vertexNormals[ 2 ] ); + + } + + } + + // restore original normals + + for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { + + const face = this.faces[ f ]; + + face.normal = face.__originalFaceNormal; + face.vertexNormals = face.__originalVertexNormals; + + } + + }, + + computeBoundingBox: function () { + + if ( this.boundingBox === null ) { + + this.boundingBox = new Box3(); + + } + + this.boundingBox.setFromPoints( this.vertices ); + + }, + + computeBoundingSphere: function () { + + if ( this.boundingSphere === null ) { + + this.boundingSphere = new Sphere(); + + } + + this.boundingSphere.setFromPoints( this.vertices ); + + }, + + merge: function ( geometry, matrix, materialIndexOffset = 0 ) { + + if ( ! ( geometry && geometry.isGeometry ) ) { + + console.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry ); + return; + + } + + let normalMatrix; + const vertexOffset = this.vertices.length, + vertices1 = this.vertices, + vertices2 = geometry.vertices, + faces1 = this.faces, + faces2 = geometry.faces, + colors1 = this.colors, + colors2 = geometry.colors; + + if ( matrix !== undefined ) { + + normalMatrix = new Matrix3().getNormalMatrix( matrix ); + + } + + // vertices + + for ( let i = 0, il = vertices2.length; i < il; i ++ ) { + + const vertex = vertices2[ i ]; + + const vertexCopy = vertex.clone(); + + if ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix ); + + vertices1.push( vertexCopy ); + + } + + // colors + + for ( let i = 0, il = colors2.length; i < il; i ++ ) { + + colors1.push( colors2[ i ].clone() ); + + } + + // faces + + for ( let i = 0, il = faces2.length; i < il; i ++ ) { + + const face = faces2[ i ]; + let normal, color; + const faceVertexNormals = face.vertexNormals, + faceVertexColors = face.vertexColors; + + const faceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset ); + faceCopy.normal.copy( face.normal ); + + if ( normalMatrix !== undefined ) { + + faceCopy.normal.applyMatrix3( normalMatrix ).normalize(); + + } + + for ( let j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) { + + normal = faceVertexNormals[ j ].clone(); + + if ( normalMatrix !== undefined ) { + + normal.applyMatrix3( normalMatrix ).normalize(); + + } + + faceCopy.vertexNormals.push( normal ); + + } + + faceCopy.color.copy( face.color ); + + for ( let j = 0, jl = faceVertexColors.length; j < jl; j ++ ) { + + color = faceVertexColors[ j ]; + faceCopy.vertexColors.push( color.clone() ); + + } + + faceCopy.materialIndex = face.materialIndex + materialIndexOffset; + + faces1.push( faceCopy ); + + } + + // uvs + + for ( let i = 0, il = geometry.faceVertexUvs.length; i < il; i ++ ) { + + const faceVertexUvs2 = geometry.faceVertexUvs[ i ]; + + if ( this.faceVertexUvs[ i ] === undefined ) this.faceVertexUvs[ i ] = []; + + for ( let j = 0, jl = faceVertexUvs2.length; j < jl; j ++ ) { + + const uvs2 = faceVertexUvs2[ j ], uvsCopy = []; + + for ( let k = 0, kl = uvs2.length; k < kl; k ++ ) { + + uvsCopy.push( uvs2[ k ].clone() ); + + } + + this.faceVertexUvs[ i ].push( uvsCopy ); + + } + + } + + }, + + mergeMesh: function ( mesh ) { + + if ( ! ( mesh && mesh.isMesh ) ) { + + console.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh ); + return; + + } + + if ( mesh.matrixAutoUpdate ) mesh.updateMatrix(); + + this.merge( mesh.geometry, mesh.matrix ); + + }, + + /* + * Checks for duplicate vertices with hashmap. + * Duplicated vertices are removed + * and faces' vertices are updated. + */ + + mergeVertices: function ( precisionPoints = 4 ) { + + const verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique) + const unique = [], changes = []; + + const precision = Math.pow( 10, precisionPoints ); + + for ( let i = 0, il = this.vertices.length; i < il; i ++ ) { + + const v = this.vertices[ i ]; + const key = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision ); + + if ( verticesMap[ key ] === undefined ) { + + verticesMap[ key ] = i; + unique.push( this.vertices[ i ] ); + changes[ i ] = unique.length - 1; + + } else { + + //console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]); + changes[ i ] = changes[ verticesMap[ key ] ]; + + } + + } + + + // if faces are completely degenerate after merging vertices, we + // have to remove them from the geometry. + const faceIndicesToRemove = []; + + for ( let i = 0, il = this.faces.length; i < il; i ++ ) { + + const face = this.faces[ i ]; + + face.a = changes[ face.a ]; + face.b = changes[ face.b ]; + face.c = changes[ face.c ]; + + const indices = [ face.a, face.b, face.c ]; + + // if any duplicate vertices are found in a Face3 + // we have to remove the face as nothing can be saved + for ( let n = 0; n < 3; n ++ ) { + + if ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) { + + faceIndicesToRemove.push( i ); + break; + + } + + } + + } + + for ( let i = faceIndicesToRemove.length - 1; i >= 0; i -- ) { + + const idx = faceIndicesToRemove[ i ]; + + this.faces.splice( idx, 1 ); + + for ( let j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) { + + this.faceVertexUvs[ j ].splice( idx, 1 ); + + } + + } + + // Use unique set of vertices + + const diff = this.vertices.length - unique.length; + this.vertices = unique; + return diff; + + }, + + setFromPoints: function ( points ) { + + this.vertices = []; + + for ( let i = 0, l = points.length; i < l; i ++ ) { + + const point = points[ i ]; + this.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) ); + + } + + return this; + + }, + + sortFacesByMaterialIndex: function () { + + const faces = this.faces; + const length = faces.length; + + // tag faces + + for ( let i = 0; i < length; i ++ ) { + + faces[ i ]._id = i; + + } + + // sort faces + + function materialIndexSort( a, b ) { + + return a.materialIndex - b.materialIndex; + + } + + faces.sort( materialIndexSort ); + + // sort uvs + + const uvs1 = this.faceVertexUvs[ 0 ]; + const uvs2 = this.faceVertexUvs[ 1 ]; + + let newUvs1, newUvs2; + + if ( uvs1 && uvs1.length === length ) newUvs1 = []; + if ( uvs2 && uvs2.length === length ) newUvs2 = []; + + for ( let i = 0; i < length; i ++ ) { + + const id = faces[ i ]._id; + + if ( newUvs1 ) newUvs1.push( uvs1[ id ] ); + if ( newUvs2 ) newUvs2.push( uvs2[ id ] ); + + } + + if ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1; + if ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2; + + }, + + toJSON: function () { + + const data = { + metadata: { + version: 4.5, + type: 'Geometry', + generator: 'Geometry.toJSON' + } + }; + + // standard Geometry serialization + + data.uuid = this.uuid; + data.type = this.type; + if ( this.name !== '' ) data.name = this.name; + + if ( this.parameters !== undefined ) { + + const parameters = this.parameters; + + for ( const key in parameters ) { + + if ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ]; + + } + + return data; + + } + + const vertices = []; + + for ( let i = 0; i < this.vertices.length; i ++ ) { + + const vertex = this.vertices[ i ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + const faces = []; + const normals = []; + const normalsHash = {}; + const colors = []; + const colorsHash = {}; + const uvs = []; + const uvsHash = {}; + + for ( let i = 0; i < this.faces.length; i ++ ) { + + const face = this.faces[ i ]; + + const hasMaterial = true; + const hasFaceUv = false; // deprecated + const hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined; + const hasFaceNormal = face.normal.length() > 0; + const hasFaceVertexNormal = face.vertexNormals.length > 0; + const hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1; + const hasFaceVertexColor = face.vertexColors.length > 0; + + let faceType = 0; + + faceType = setBit( faceType, 0, 0 ); // isQuad + faceType = setBit( faceType, 1, hasMaterial ); + faceType = setBit( faceType, 2, hasFaceUv ); + faceType = setBit( faceType, 3, hasFaceVertexUv ); + faceType = setBit( faceType, 4, hasFaceNormal ); + faceType = setBit( faceType, 5, hasFaceVertexNormal ); + faceType = setBit( faceType, 6, hasFaceColor ); + faceType = setBit( faceType, 7, hasFaceVertexColor ); + + faces.push( faceType ); + faces.push( face.a, face.b, face.c ); + faces.push( face.materialIndex ); + + if ( hasFaceVertexUv ) { + + const faceVertexUvs = this.faceVertexUvs[ 0 ][ i ]; + + faces.push( + getUvIndex( faceVertexUvs[ 0 ] ), + getUvIndex( faceVertexUvs[ 1 ] ), + getUvIndex( faceVertexUvs[ 2 ] ) + ); + + } + + if ( hasFaceNormal ) { + + faces.push( getNormalIndex( face.normal ) ); + + } + + if ( hasFaceVertexNormal ) { + + const vertexNormals = face.vertexNormals; + + faces.push( + getNormalIndex( vertexNormals[ 0 ] ), + getNormalIndex( vertexNormals[ 1 ] ), + getNormalIndex( vertexNormals[ 2 ] ) + ); + + } + + if ( hasFaceColor ) { + + faces.push( getColorIndex( face.color ) ); + + } + + if ( hasFaceVertexColor ) { + + const vertexColors = face.vertexColors; + + faces.push( + getColorIndex( vertexColors[ 0 ] ), + getColorIndex( vertexColors[ 1 ] ), + getColorIndex( vertexColors[ 2 ] ) + ); + + } + + } + + function setBit( value, position, enabled ) { + + return enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) ); + + } + + function getNormalIndex( normal ) { + + const hash = normal.x.toString() + normal.y.toString() + normal.z.toString(); + + if ( normalsHash[ hash ] !== undefined ) { + + return normalsHash[ hash ]; + + } + + normalsHash[ hash ] = normals.length / 3; + normals.push( normal.x, normal.y, normal.z ); + + return normalsHash[ hash ]; + + } + + function getColorIndex( color ) { + + const hash = color.r.toString() + color.g.toString() + color.b.toString(); + + if ( colorsHash[ hash ] !== undefined ) { + + return colorsHash[ hash ]; + + } + + colorsHash[ hash ] = colors.length; + colors.push( color.getHex() ); + + return colorsHash[ hash ]; + + } + + function getUvIndex( uv ) { + + const hash = uv.x.toString() + uv.y.toString(); + + if ( uvsHash[ hash ] !== undefined ) { + + return uvsHash[ hash ]; + + } + + uvsHash[ hash ] = uvs.length / 2; + uvs.push( uv.x, uv.y ); + + return uvsHash[ hash ]; + + } + + data.data = {}; + + data.data.vertices = vertices; + data.data.normals = normals; + if ( colors.length > 0 ) data.data.colors = colors; + if ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility + data.data.faces = faces; + + return data; + + }, + + clone: function () { + + /* + // Handle primitives + + const parameters = this.parameters; + + if ( parameters !== undefined ) { + + const values = []; + + for ( const key in parameters ) { + + values.push( parameters[ key ] ); + + } + + const geometry = Object.create( this.constructor.prototype ); + this.constructor.apply( geometry, values ); + return geometry; + + } + + return new this.constructor().copy( this ); + */ + + return new Geometry().copy( this ); + + }, + + copy: function ( source ) { + + // reset + + this.vertices = []; + this.colors = []; + this.faces = []; + this.faceVertexUvs = [[]]; + this.morphTargets = []; + this.morphNormals = []; + this.skinWeights = []; + this.skinIndices = []; + this.lineDistances = []; + this.boundingBox = null; + this.boundingSphere = null; + + // name + + this.name = source.name; + + // vertices + + const vertices = source.vertices; + + for ( let i = 0, il = vertices.length; i < il; i ++ ) { + + this.vertices.push( vertices[ i ].clone() ); + + } + + // colors + + const colors = source.colors; + + for ( let i = 0, il = colors.length; i < il; i ++ ) { + + this.colors.push( colors[ i ].clone() ); + + } + + // faces + + const faces = source.faces; + + for ( let i = 0, il = faces.length; i < il; i ++ ) { + + this.faces.push( faces[ i ].clone() ); + + } + + // face vertex uvs + + for ( let i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) { + + const faceVertexUvs = source.faceVertexUvs[ i ]; + + if ( this.faceVertexUvs[ i ] === undefined ) { + + this.faceVertexUvs[ i ] = []; + + } + + for ( let j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) { + + const uvs = faceVertexUvs[ j ], uvsCopy = []; + + for ( let k = 0, kl = uvs.length; k < kl; k ++ ) { + + const uv = uvs[ k ]; + + uvsCopy.push( uv.clone() ); + + } + + this.faceVertexUvs[ i ].push( uvsCopy ); + + } + + } + + // morph targets + + const morphTargets = source.morphTargets; + + for ( let i = 0, il = morphTargets.length; i < il; i ++ ) { + + const morphTarget = {}; + morphTarget.name = morphTargets[ i ].name; + + // vertices + + if ( morphTargets[ i ].vertices !== undefined ) { + + morphTarget.vertices = []; + + for ( let j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) { + + morphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() ); + + } + + } + + // normals + + if ( morphTargets[ i ].normals !== undefined ) { + + morphTarget.normals = []; + + for ( let j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) { + + morphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() ); + + } + + } + + this.morphTargets.push( morphTarget ); + + } + + // morph normals + + const morphNormals = source.morphNormals; + + for ( let i = 0, il = morphNormals.length; i < il; i ++ ) { + + const morphNormal = {}; + + // vertex normals + + if ( morphNormals[ i ].vertexNormals !== undefined ) { + + morphNormal.vertexNormals = []; + + for ( let j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) { + + const srcVertexNormal = morphNormals[ i ].vertexNormals[ j ]; + const destVertexNormal = {}; + + destVertexNormal.a = srcVertexNormal.a.clone(); + destVertexNormal.b = srcVertexNormal.b.clone(); + destVertexNormal.c = srcVertexNormal.c.clone(); + + morphNormal.vertexNormals.push( destVertexNormal ); + + } + + } + + // face normals + + if ( morphNormals[ i ].faceNormals !== undefined ) { + + morphNormal.faceNormals = []; + + for ( let j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) { + + morphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() ); + + } + + } + + this.morphNormals.push( morphNormal ); + + } + + // skin weights + + const skinWeights = source.skinWeights; + + for ( let i = 0, il = skinWeights.length; i < il; i ++ ) { + + this.skinWeights.push( skinWeights[ i ].clone() ); + + } + + // skin indices + + const skinIndices = source.skinIndices; + + for ( let i = 0, il = skinIndices.length; i < il; i ++ ) { + + this.skinIndices.push( skinIndices[ i ].clone() ); + + } + + // line distances + + const lineDistances = source.lineDistances; + + for ( let i = 0, il = lineDistances.length; i < il; i ++ ) { + + this.lineDistances.push( lineDistances[ i ] ); + + } + + // 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(); + + } + + // update flags + + this.elementsNeedUpdate = source.elementsNeedUpdate; + this.verticesNeedUpdate = source.verticesNeedUpdate; + this.uvsNeedUpdate = source.uvsNeedUpdate; + this.normalsNeedUpdate = source.normalsNeedUpdate; + this.colorsNeedUpdate = source.colorsNeedUpdate; + this.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate; + this.groupsNeedUpdate = source.groupsNeedUpdate; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + + } ); + + class CylinderBufferGeometry extends BufferGeometry { + + constructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) { + + super(); + this.type = 'CylinderBufferGeometry'; + + this.parameters = { + radiusTop: radiusTop, + radiusBottom: radiusBottom, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + const scope = this; + + radialSegments = Math.floor( radialSegments ); + heightSegments = Math.floor( heightSegments ); + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + // helper variables + + let index = 0; + const indexArray = []; + const halfHeight = height / 2; + let groupStart = 0; + + // generate geometry + + generateTorso(); + + if ( openEnded === false ) { + + if ( radiusTop > 0 ) generateCap( true ); + if ( radiusBottom > 0 ) generateCap( false ); + + } + + // 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 generateTorso() { + + const normal = new Vector3(); + const vertex = new Vector3(); + + let groupCount = 0; + + // this will be used to calculate the normal + const slope = ( radiusBottom - radiusTop ) / height; + + // generate vertices, normals and uvs + + for ( let y = 0; y <= heightSegments; y ++ ) { + + const indexRow = []; + + const v = y / heightSegments; + + // calculate the radius of the current row + + const radius = v * ( radiusBottom - radiusTop ) + radiusTop; + + for ( let x = 0; x <= radialSegments; x ++ ) { + + const u = x / radialSegments; + + const theta = u * thetaLength + thetaStart; + + const sinTheta = Math.sin( theta ); + const cosTheta = Math.cos( theta ); + + // vertex + + vertex.x = radius * sinTheta; + vertex.y = - v * height + halfHeight; + vertex.z = radius * cosTheta; + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normal.set( sinTheta, slope, cosTheta ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u, 1 - v ); + + // save index of vertex in respective row + + indexRow.push( index ++ ); + + } + + // now save vertices of the row in our index array + + indexArray.push( indexRow ); + + } + + // generate indices + + for ( let x = 0; x < radialSegments; x ++ ) { + + for ( let y = 0; y < heightSegments; y ++ ) { + + // we use the index array to access the correct indices + + const a = indexArray[ y ][ x ]; + const b = indexArray[ y + 1 ][ x ]; + const c = indexArray[ y + 1 ][ x + 1 ]; + const d = indexArray[ y ][ x + 1 ]; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + // update group counter + + groupCount += 6; + + } + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, 0 ); + + // calculate new start value for groups + + groupStart += groupCount; + + } + + function generateCap( top ) { + + // save the index of the first center vertex + const centerIndexStart = index; + + const uv = new Vector2(); + const vertex = new Vector3(); + + let groupCount = 0; + + const radius = ( top === true ) ? radiusTop : radiusBottom; + const sign = ( top === true ) ? 1 : - 1; + + // first we generate the center vertex data of the cap. + // because the geometry needs one set of uvs per face, + // we must generate a center vertex per face/segment + + for ( let x = 1; x <= radialSegments; x ++ ) { + + // vertex + + vertices.push( 0, halfHeight * sign, 0 ); + + // normal + + normals.push( 0, sign, 0 ); + + // uv + + uvs.push( 0.5, 0.5 ); + + // increase index + + index ++; + + } + + // save the index of the last center vertex + const centerIndexEnd = index; + + // now we generate the surrounding vertices, normals and uvs + + for ( let x = 0; x <= radialSegments; x ++ ) { + + const u = x / radialSegments; + const theta = u * thetaLength + thetaStart; + + const cosTheta = Math.cos( theta ); + const sinTheta = Math.sin( theta ); + + // vertex + + vertex.x = radius * sinTheta; + vertex.y = halfHeight * sign; + vertex.z = radius * cosTheta; + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, sign, 0 ); + + // uv + + uv.x = ( cosTheta * 0.5 ) + 0.5; + uv.y = ( sinTheta * 0.5 * sign ) + 0.5; + uvs.push( uv.x, uv.y ); + + // increase index + + index ++; + + } + + // generate indices + + for ( let x = 0; x < radialSegments; x ++ ) { + + const c = centerIndexStart + x; + const i = centerIndexEnd + x; + + if ( top === true ) { + + // face top + + indices.push( i, i + 1, c ); + + } else { + + // face bottom + + indices.push( i + 1, i, c ); + + } + + groupCount += 3; + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, top === true ? 1 : 2 ); + + // calculate new start value for groups + + groupStart += groupCount; + + } + + } + + } + + class ConeBufferGeometry extends CylinderBufferGeometry { + + constructor( radius = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) { + + super( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); + + this.type = 'ConeBufferGeometry'; + + this.parameters = { + radius: radius, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + } + + } + + new Vector3(); + new Vector3(); + new Vector3(); + new Triangle(); + + /** + * Port from https://github.com/mapbox/earcut (v2.2.2) + */ + + const Earcut = { + + triangulate: function ( data, holeIndices, dim ) { + + dim = dim || 2; + + const hasHoles = holeIndices && holeIndices.length; + const outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length; + let outerNode = linkedList( data, 0, outerLen, dim, true ); + const triangles = []; + + if ( ! outerNode || outerNode.next === outerNode.prev ) return triangles; + + let minX, minY, maxX, maxY, x, y, invSize; + + if ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim ); + + // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox + if ( data.length > 80 * dim ) { + + minX = maxX = data[ 0 ]; + minY = maxY = data[ 1 ]; + + for ( let i = dim; i < outerLen; i += dim ) { + + x = data[ i ]; + y = data[ i + 1 ]; + if ( x < minX ) minX = x; + if ( y < minY ) minY = y; + if ( x > maxX ) maxX = x; + if ( y > maxY ) maxY = y; + + } + + // minX, minY and invSize are later used to transform coords into integers for z-order calculation + invSize = Math.max( maxX - minX, maxY - minY ); + invSize = invSize !== 0 ? 1 / invSize : 0; + + } + + earcutLinked( outerNode, triangles, dim, minX, minY, invSize ); + + return triangles; + + } + + }; + + // create a circular doubly linked list from polygon points in the specified winding order + function linkedList( data, start, end, dim, clockwise ) { + + let i, last; + + if ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) { + + for ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last ); + + } else { + + for ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last ); + + } + + if ( last && equals( last, last.next ) ) { + + removeNode( last ); + last = last.next; + + } + + return last; + + } + + // eliminate colinear or duplicate points + function filterPoints( start, end ) { + + if ( ! start ) return start; + if ( ! end ) end = start; + + let p = start, + again; + do { + + again = false; + + if ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) { + + removeNode( p ); + p = end = p.prev; + if ( p === p.next ) break; + again = true; + + } else { + + p = p.next; + + } + + } while ( again || p !== end ); + + return end; + + } + + // main ear slicing loop which triangulates a polygon (given as a linked list) + function earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) { + + if ( ! ear ) return; + + // interlink polygon nodes in z-order + if ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize ); + + let stop = ear, + prev, next; + + // iterate through ears, slicing them one by one + while ( ear.prev !== ear.next ) { + + prev = ear.prev; + next = ear.next; + + if ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) { + + // cut off the triangle + triangles.push( prev.i / dim ); + triangles.push( ear.i / dim ); + triangles.push( next.i / dim ); + + removeNode( ear ); + + // skipping the next vertex leads to less sliver triangles + ear = next.next; + stop = next.next; + + continue; + + } + + ear = next; + + // if we looped through the whole remaining polygon and can't find any more ears + if ( ear === stop ) { + + // try filtering points and slicing again + if ( ! pass ) { + + earcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 ); + + // if this didn't work, try curing all small self-intersections locally + + } else if ( pass === 1 ) { + + ear = cureLocalIntersections( filterPoints( ear ), triangles, dim ); + earcutLinked( ear, triangles, dim, minX, minY, invSize, 2 ); + + // as a last resort, try splitting the remaining polygon into two + + } else if ( pass === 2 ) { + + splitEarcut( ear, triangles, dim, minX, minY, invSize ); + + } + + break; + + } + + } + + } + + // check whether a polygon node forms a valid ear with adjacent nodes + function isEar( ear ) { + + const a = ear.prev, + b = ear, + c = ear.next; + + if ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear + + // now make sure we don't have other points inside the potential ear + let p = ear.next.next; + + while ( p !== ear.prev ) { + + if ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && + area( p.prev, p, p.next ) >= 0 ) return false; + p = p.next; + + } + + return true; + + } + + function isEarHashed( ear, minX, minY, invSize ) { + + const a = ear.prev, + b = ear, + c = ear.next; + + if ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear + + // triangle bbox; min & max are calculated like this for speed + const minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ), + minTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ), + maxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ), + maxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y ); + + // z-order range for the current triangle bbox; + const minZ = zOrder( minTX, minTY, minX, minY, invSize ), + maxZ = zOrder( maxTX, maxTY, minX, minY, invSize ); + + let p = ear.prevZ, + n = ear.nextZ; + + // look for points inside the triangle in both directions + while ( p && p.z >= minZ && n && n.z <= maxZ ) { + + if ( p !== ear.prev && p !== ear.next && + pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && + area( p.prev, p, p.next ) >= 0 ) return false; + p = p.prevZ; + + if ( n !== ear.prev && n !== ear.next && + pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) && + area( n.prev, n, n.next ) >= 0 ) return false; + n = n.nextZ; + + } + + // look for remaining points in decreasing z-order + while ( p && p.z >= minZ ) { + + if ( p !== ear.prev && p !== ear.next && + pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && + area( p.prev, p, p.next ) >= 0 ) return false; + p = p.prevZ; + + } + + // look for remaining points in increasing z-order + while ( n && n.z <= maxZ ) { + + if ( n !== ear.prev && n !== ear.next && + pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) && + area( n.prev, n, n.next ) >= 0 ) return false; + n = n.nextZ; + + } + + return true; + + } + + // go through all polygon nodes and cure small local self-intersections + function cureLocalIntersections( start, triangles, dim ) { + + let p = start; + do { + + const a = p.prev, + b = p.next.next; + + if ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) { + + triangles.push( a.i / dim ); + triangles.push( p.i / dim ); + triangles.push( b.i / dim ); + + // remove two nodes involved + removeNode( p ); + removeNode( p.next ); + + p = start = b; + + } + + p = p.next; + + } while ( p !== start ); + + return filterPoints( p ); + + } + + // try splitting polygon into two and triangulate them independently + function splitEarcut( start, triangles, dim, minX, minY, invSize ) { + + // look for a valid diagonal that divides the polygon into two + let a = start; + do { + + let b = a.next.next; + while ( b !== a.prev ) { + + if ( a.i !== b.i && isValidDiagonal( a, b ) ) { + + // split the polygon in two by the diagonal + let c = splitPolygon( a, b ); + + // filter colinear points around the cuts + a = filterPoints( a, a.next ); + c = filterPoints( c, c.next ); + + // run earcut on each half + earcutLinked( a, triangles, dim, minX, minY, invSize ); + earcutLinked( c, triangles, dim, minX, minY, invSize ); + return; + + } + + b = b.next; + + } + + a = a.next; + + } while ( a !== start ); + + } + + // link every hole into the outer loop, producing a single-ring polygon without holes + function eliminateHoles( data, holeIndices, outerNode, dim ) { + + const queue = []; + let i, len, start, end, list; + + for ( i = 0, len = holeIndices.length; i < len; i ++ ) { + + start = holeIndices[ i ] * dim; + end = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length; + list = linkedList( data, start, end, dim, false ); + if ( list === list.next ) list.steiner = true; + queue.push( getLeftmost( list ) ); + + } + + queue.sort( compareX ); + + // process holes from left to right + for ( i = 0; i < queue.length; i ++ ) { + + eliminateHole( queue[ i ], outerNode ); + outerNode = filterPoints( outerNode, outerNode.next ); + + } + + return outerNode; + + } + + function compareX( a, b ) { + + return a.x - b.x; + + } + + // find a bridge between vertices that connects hole with an outer ring and and link it + function eliminateHole( hole, outerNode ) { + + outerNode = findHoleBridge( hole, outerNode ); + if ( outerNode ) { + + const b = splitPolygon( outerNode, hole ); + + // filter collinear points around the cuts + filterPoints( outerNode, outerNode.next ); + filterPoints( b, b.next ); + + } + + } + + // David Eberly's algorithm for finding a bridge between hole and outer polygon + function findHoleBridge( hole, outerNode ) { + + let p = outerNode; + const hx = hole.x; + const hy = hole.y; + let qx = - Infinity, m; + + // find a segment intersected by a ray from the hole's leftmost point to the left; + // segment's endpoint with lesser x will be potential connection point + do { + + if ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) { + + const x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y ); + if ( x <= hx && x > qx ) { + + qx = x; + if ( x === hx ) { + + if ( hy === p.y ) return p; + if ( hy === p.next.y ) return p.next; + + } + + m = p.x < p.next.x ? p : p.next; + + } + + } + + p = p.next; + + } while ( p !== outerNode ); + + if ( ! m ) return null; + + if ( hx === qx ) return m; // hole touches outer segment; pick leftmost endpoint + + // look for points inside the triangle of hole point, segment intersection and endpoint; + // if there are no points found, we have a valid connection; + // otherwise choose the point of the minimum angle with the ray as connection point + + const stop = m, + mx = m.x, + my = m.y; + let tanMin = Infinity, tan; + + p = m; + + do { + + if ( hx >= p.x && p.x >= mx && hx !== p.x && + pointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) { + + tan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential + + if ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) { + + m = p; + tanMin = tan; + + } + + } + + p = p.next; + + } while ( p !== stop ); + + return m; + + } + + // whether sector in vertex m contains sector in vertex p in the same coordinates + function sectorContainsSector( m, p ) { + + return area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0; + + } + + // interlink polygon nodes in z-order + function indexCurve( start, minX, minY, invSize ) { + + let p = start; + do { + + if ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize ); + p.prevZ = p.prev; + p.nextZ = p.next; + p = p.next; + + } while ( p !== start ); + + p.prevZ.nextZ = null; + p.prevZ = null; + + sortLinked( p ); + + } + + // Simon Tatham's linked list merge sort algorithm + // http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html + function sortLinked( list ) { + + let i, p, q, e, tail, numMerges, pSize, qSize, + inSize = 1; + + do { + + p = list; + list = null; + tail = null; + numMerges = 0; + + while ( p ) { + + numMerges ++; + q = p; + pSize = 0; + for ( i = 0; i < inSize; i ++ ) { + + pSize ++; + q = q.nextZ; + if ( ! q ) break; + + } + + qSize = inSize; + + while ( pSize > 0 || ( qSize > 0 && q ) ) { + + if ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) { + + e = p; + p = p.nextZ; + pSize --; + + } else { + + e = q; + q = q.nextZ; + qSize --; + + } + + if ( tail ) tail.nextZ = e; + else list = e; + + e.prevZ = tail; + tail = e; + + } + + p = q; + + } + + tail.nextZ = null; + inSize *= 2; + + } while ( numMerges > 1 ); + + return list; + + } + + // z-order of a point given coords and inverse of the longer side of data bbox + function zOrder( x, y, minX, minY, invSize ) { + + // coords are transformed into non-negative 15-bit integer range + x = 32767 * ( x - minX ) * invSize; + y = 32767 * ( y - minY ) * invSize; + + x = ( x | ( x << 8 ) ) & 0x00FF00FF; + x = ( x | ( x << 4 ) ) & 0x0F0F0F0F; + x = ( x | ( x << 2 ) ) & 0x33333333; + x = ( x | ( x << 1 ) ) & 0x55555555; + + y = ( y | ( y << 8 ) ) & 0x00FF00FF; + y = ( y | ( y << 4 ) ) & 0x0F0F0F0F; + y = ( y | ( y << 2 ) ) & 0x33333333; + y = ( y | ( y << 1 ) ) & 0x55555555; + + return x | ( y << 1 ); + + } + + // find the leftmost node of a polygon ring + function getLeftmost( start ) { + + let p = start, + leftmost = start; + do { + + if ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p; + p = p.next; + + } while ( p !== start ); + + return leftmost; + + } + + // check if a point lies within a convex triangle + function pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) { + + return ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 && + ( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 && + ( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0; + + } + + // check if a diagonal between two polygon nodes is valid (lies in polygon interior) + function isValidDiagonal( a, b ) { + + return a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges + ( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible + ( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors + equals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case + + } + + // signed area of a triangle + function area( p, q, r ) { + + return ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y ); + + } + + // check if two points are equal + function equals( p1, p2 ) { + + return p1.x === p2.x && p1.y === p2.y; + + } + + // check if two segments intersect + function intersects( p1, q1, p2, q2 ) { + + const o1 = sign( area( p1, q1, p2 ) ); + const o2 = sign( area( p1, q1, q2 ) ); + const o3 = sign( area( p2, q2, p1 ) ); + const o4 = sign( area( p2, q2, q1 ) ); + + if ( o1 !== o2 && o3 !== o4 ) return true; // general case + + if ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1 + if ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1 + if ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2 + if ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2 + + return false; + + } + + // for collinear points p, q, r, check if point q lies on segment pr + function onSegment( p, q, r ) { + + return q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y ); + + } + + function sign( num ) { + + return num > 0 ? 1 : num < 0 ? - 1 : 0; + + } + + // check if a polygon diagonal intersects any polygon segments + function intersectsPolygon( a, b ) { + + let p = a; + do { + + if ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && + intersects( p, p.next, a, b ) ) return true; + p = p.next; + + } while ( p !== a ); + + return false; + + } + + // check if a polygon diagonal is locally inside the polygon + function locallyInside( a, b ) { + + return area( a.prev, a, a.next ) < 0 ? + area( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 : + area( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0; + + } + + // check if the middle point of a polygon diagonal is inside the polygon + function middleInside( a, b ) { + + let p = a, + inside = false; + const px = ( a.x + b.x ) / 2, + py = ( a.y + b.y ) / 2; + do { + + if ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y && + ( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) ) + inside = ! inside; + p = p.next; + + } while ( p !== a ); + + return inside; + + } + + // link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two; + // if one belongs to the outer ring and another to a hole, it merges it into a single ring + function splitPolygon( a, b ) { + + const a2 = new Node$1( a.i, a.x, a.y ), + b2 = new Node$1( b.i, b.x, b.y ), + an = a.next, + bp = b.prev; + + a.next = b; + b.prev = a; + + a2.next = an; + an.prev = a2; + + b2.next = a2; + a2.prev = b2; + + bp.next = b2; + b2.prev = bp; + + return b2; + + } + + // create a node and optionally link it with previous one (in a circular doubly linked list) + function insertNode( i, x, y, last ) { + + const p = new Node$1( i, x, y ); + + if ( ! last ) { + + p.prev = p; + p.next = p; + + } else { + + p.next = last.next; + p.prev = last; + last.next.prev = p; + last.next = p; + + } + + return p; + + } + + function removeNode( p ) { + + p.next.prev = p.prev; + p.prev.next = p.next; + + if ( p.prevZ ) p.prevZ.nextZ = p.nextZ; + if ( p.nextZ ) p.nextZ.prevZ = p.prevZ; + + } + + function Node$1( i, x, y ) { + + // vertex index in coordinates array + this.i = i; + + // vertex coordinates + this.x = x; + this.y = y; + + // previous and next vertex nodes in a polygon ring + this.prev = null; + this.next = null; + + // z-order curve value + this.z = null; + + // previous and next nodes in z-order + this.prevZ = null; + this.nextZ = null; + + // indicates whether this is a steiner point + this.steiner = false; + + } + + function signedArea( data, start, end, dim ) { + + let sum = 0; + for ( let i = start, j = end - dim; i < end; i += dim ) { + + sum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] ); + j = i; + + } + + return sum; + + } + + const ShapeUtils = { + + // calculate area of the contour polygon + + area: function ( contour ) { + + const n = contour.length; + let a = 0.0; + + for ( let p = n - 1, q = 0; q < n; p = q ++ ) { + + a += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y; + + } + + return a * 0.5; + + }, + + isClockWise: function ( pts ) { + + return ShapeUtils.area( pts ) < 0; + + }, + + triangulateShape: function ( contour, holes ) { + + const vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ] + const holeIndices = []; // array of hole indices + const faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ] + + removeDupEndPts( contour ); + addContour( vertices, contour ); + + // + + let holeIndex = contour.length; + + holes.forEach( removeDupEndPts ); + + for ( let i = 0; i < holes.length; i ++ ) { + + holeIndices.push( holeIndex ); + holeIndex += holes[ i ].length; + addContour( vertices, holes[ i ] ); + + } + + // + + const triangles = Earcut.triangulate( vertices, holeIndices ); + + // + + for ( let i = 0; i < triangles.length; i += 3 ) { + + faces.push( triangles.slice( i, i + 3 ) ); + + } + + return faces; + + } + + }; + + function removeDupEndPts( points ) { + + const l = points.length; + + if ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) { + + points.pop(); + + } + + } + + function addContour( vertices, contour ) { + + for ( let i = 0; i < contour.length; i ++ ) { + + vertices.push( contour[ i ].x ); + vertices.push( contour[ i ].y ); + + } + + } + + /** + * Creates extruded geometry from a path shape. + * + * parameters = { + * + * curveSegments: , // number of points on the curves + * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too + * depth: , // Depth to extrude the shape + * + * bevelEnabled: , // turn on bevel + * bevelThickness: , // how deep into the original shape bevel goes + * bevelSize: , // how far from shape outline (including bevelOffset) is bevel + * bevelOffset: , // how far from shape outline does bevel start + * bevelSegments: , // number of bevel layers + * + * extrudePath: // curve to extrude shape along + * + * UVGenerator: // object that provides UV generator functions + * + * } + */ + + class ExtrudeBufferGeometry extends BufferGeometry { + + constructor( shapes, options ) { + + super(); + + this.type = 'ExtrudeBufferGeometry'; + + this.parameters = { + shapes: shapes, + options: options + }; + + shapes = Array.isArray( shapes ) ? shapes : [ shapes ]; + + const scope = this; + + const verticesArray = []; + const uvArray = []; + + for ( let i = 0, l = shapes.length; i < l; i ++ ) { + + const shape = shapes[ i ]; + addShape( shape ); + + } + + // build geometry + + this.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) ); + + this.computeVertexNormals(); + + // functions + + function addShape( shape ) { + + const placeholder = []; + + // options + + const curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12; + const steps = options.steps !== undefined ? options.steps : 1; + let depth = options.depth !== undefined ? options.depth : 100; + + let bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; + let bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6; + let bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2; + let bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0; + let bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3; + + const extrudePath = options.extrudePath; + + const uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator; + + // deprecated options + + if ( options.amount !== undefined ) { + + console.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' ); + depth = options.amount; + + } + + // + + let extrudePts, extrudeByPath = false; + let splineTube, binormal, normal, position2; + + if ( extrudePath ) { + + extrudePts = extrudePath.getSpacedPoints( steps ); + + extrudeByPath = true; + bevelEnabled = false; // bevels not supported for path extrusion + + // SETUP TNB variables + + // TODO1 - have a .isClosed in spline? + + splineTube = extrudePath.computeFrenetFrames( steps, false ); + + // console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length); + + binormal = new Vector3(); + normal = new Vector3(); + position2 = new Vector3(); + + } + + // Safeguards if bevels are not enabled + + if ( ! bevelEnabled ) { + + bevelSegments = 0; + bevelThickness = 0; + bevelSize = 0; + bevelOffset = 0; + + } + + // Variables initialization + + const shapePoints = shape.extractPoints( curveSegments ); + + let vertices = shapePoints.shape; + const holes = shapePoints.holes; + + const reverse = ! ShapeUtils.isClockWise( vertices ); + + if ( reverse ) { + + vertices = vertices.reverse(); + + // Maybe we should also check if holes are in the opposite direction, just to be safe ... + + for ( let h = 0, hl = holes.length; h < hl; h ++ ) { + + const ahole = holes[ h ]; + + if ( ShapeUtils.isClockWise( ahole ) ) { + + holes[ h ] = ahole.reverse(); + + } + + } + + } + + + const faces = ShapeUtils.triangulateShape( vertices, holes ); + + /* Vertices */ + + const contour = vertices; // vertices has all points but contour has only points of circumference + + for ( let h = 0, hl = holes.length; h < hl; h ++ ) { + + const ahole = holes[ h ]; + + vertices = vertices.concat( ahole ); + + } + + + function scalePt2( pt, vec, size ) { + + if ( ! vec ) console.error( "THREE.ExtrudeGeometry: vec does not exist" ); + + return vec.clone().multiplyScalar( size ).add( pt ); + + } + + const vlen = vertices.length, flen = faces.length; + + + // Find directions for point movement + + + function getBevelVec( inPt, inPrev, inNext ) { + + // computes for inPt the corresponding point inPt' on a new contour + // shifted by 1 unit (length of normalized vector) to the left + // if we walk along contour clockwise, this new contour is outside the old one + // + // inPt' is the intersection of the two lines parallel to the two + // adjacent edges of inPt at a distance of 1 unit on the left side. + + let v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt + + // good reading for geometry algorithms (here: line-line intersection) + // http://geomalgorithms.com/a05-_intersect-1.html + + const v_prev_x = inPt.x - inPrev.x, + v_prev_y = inPt.y - inPrev.y; + const v_next_x = inNext.x - inPt.x, + v_next_y = inNext.y - inPt.y; + + const v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y ); + + // check for collinear edges + const collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x ); + + if ( Math.abs( collinear0 ) > Number.EPSILON ) { + + // not collinear + + // length of vectors for normalizing + + const v_prev_len = Math.sqrt( v_prev_lensq ); + const v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y ); + + // shift adjacent points by unit vectors to the left + + const ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len ); + const ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len ); + + const ptNextShift_x = ( inNext.x - v_next_y / v_next_len ); + const ptNextShift_y = ( inNext.y + v_next_x / v_next_len ); + + // scaling factor for v_prev to intersection point + + const sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y - + ( ptNextShift_y - ptPrevShift_y ) * v_next_x ) / + ( v_prev_x * v_next_y - v_prev_y * v_next_x ); + + // vector from inPt to intersection point + + v_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x ); + v_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y ); + + // Don't normalize!, otherwise sharp corners become ugly + // but prevent crazy spikes + const v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y ); + if ( v_trans_lensq <= 2 ) { + + return new Vector2( v_trans_x, v_trans_y ); + + } else { + + shrink_by = Math.sqrt( v_trans_lensq / 2 ); + + } + + } else { + + // handle special case of collinear edges + + let direction_eq = false; // assumes: opposite + + if ( v_prev_x > Number.EPSILON ) { + + if ( v_next_x > Number.EPSILON ) { + + direction_eq = true; + + } + + } else { + + if ( v_prev_x < - Number.EPSILON ) { + + if ( v_next_x < - Number.EPSILON ) { + + direction_eq = true; + + } + + } else { + + if ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) { + + direction_eq = true; + + } + + } + + } + + if ( direction_eq ) { + + // console.log("Warning: lines are a straight sequence"); + v_trans_x = - v_prev_y; + v_trans_y = v_prev_x; + shrink_by = Math.sqrt( v_prev_lensq ); + + } else { + + // console.log("Warning: lines are a straight spike"); + v_trans_x = v_prev_x; + v_trans_y = v_prev_y; + shrink_by = Math.sqrt( v_prev_lensq / 2 ); + + } + + } + + return new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by ); + + } + + + const contourMovements = []; + + for ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { + + if ( j === il ) j = 0; + if ( k === il ) k = 0; + + // (j)---(i)---(k) + // console.log('i,j,k', i, j , k) + + contourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] ); + + } + + const holesMovements = []; + let oneHoleMovements, verticesMovements = contourMovements.concat(); + + for ( let h = 0, hl = holes.length; h < hl; h ++ ) { + + const ahole = holes[ h ]; + + oneHoleMovements = []; + + for ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { + + if ( j === il ) j = 0; + if ( k === il ) k = 0; + + // (j)---(i)---(k) + oneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] ); + + } + + holesMovements.push( oneHoleMovements ); + verticesMovements = verticesMovements.concat( oneHoleMovements ); + + } + + + // Loop bevelSegments, 1 for the front, 1 for the back + + for ( let b = 0; b < bevelSegments; b ++ ) { + + //for ( b = bevelSegments; b > 0; b -- ) { + + const t = b / bevelSegments; + const z = bevelThickness * Math.cos( t * Math.PI / 2 ); + const bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset; + + // contract shape + + for ( let i = 0, il = contour.length; i < il; i ++ ) { + + const vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); + + v( vert.x, vert.y, - z ); + + } + + // expand holes + + for ( let h = 0, hl = holes.length; h < hl; h ++ ) { + + const ahole = holes[ h ]; + oneHoleMovements = holesMovements[ h ]; + + for ( let i = 0, il = ahole.length; i < il; i ++ ) { + + const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); + + v( vert.x, vert.y, - z ); + + } + + } + + } + + const bs = bevelSize + bevelOffset; + + // Back facing vertices + + for ( let i = 0; i < vlen; i ++ ) { + + const vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; + + if ( ! extrudeByPath ) { + + v( vert.x, vert.y, 0 ); + + } else { + + // v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x ); + + normal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x ); + binormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y ); + + position2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal ); + + v( position2.x, position2.y, position2.z ); + + } + + } + + // Add stepped vertices... + // Including front facing vertices + + for ( let s = 1; s <= steps; s ++ ) { + + for ( let i = 0; i < vlen; i ++ ) { + + const vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; + + if ( ! extrudeByPath ) { + + v( vert.x, vert.y, depth / steps * s ); + + } else { + + // v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x ); + + normal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x ); + binormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y ); + + position2.copy( extrudePts[ s ] ).add( normal ).add( binormal ); + + v( position2.x, position2.y, position2.z ); + + } + + } + + } + + + // Add bevel segments planes + + //for ( b = 1; b <= bevelSegments; b ++ ) { + for ( let b = bevelSegments - 1; b >= 0; b -- ) { + + const t = b / bevelSegments; + const z = bevelThickness * Math.cos( t * Math.PI / 2 ); + const bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset; + + // contract shape + + for ( let i = 0, il = contour.length; i < il; i ++ ) { + + const vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); + v( vert.x, vert.y, depth + z ); + + } + + // expand holes + + for ( let h = 0, hl = holes.length; h < hl; h ++ ) { + + const ahole = holes[ h ]; + oneHoleMovements = holesMovements[ h ]; + + for ( let i = 0, il = ahole.length; i < il; i ++ ) { + + const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); + + if ( ! extrudeByPath ) { + + v( vert.x, vert.y, depth + z ); + + } else { + + v( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z ); + + } + + } + + } + + } + + /* Faces */ + + // Top and bottom faces + + buildLidFaces(); + + // Sides faces + + buildSideFaces(); + + + ///// Internal functions + + function buildLidFaces() { + + const start = verticesArray.length / 3; + + if ( bevelEnabled ) { + + let layer = 0; // steps + 1 + let offset = vlen * layer; + + // Bottom faces + + for ( let i = 0; i < flen; i ++ ) { + + const face = faces[ i ]; + f3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset ); + + } + + layer = steps + bevelSegments * 2; + offset = vlen * layer; + + // Top faces + + for ( let i = 0; i < flen; i ++ ) { + + const face = faces[ i ]; + f3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset ); + + } + + } else { + + // Bottom faces + + for ( let i = 0; i < flen; i ++ ) { + + const face = faces[ i ]; + f3( face[ 2 ], face[ 1 ], face[ 0 ] ); + + } + + // Top faces + + for ( let i = 0; i < flen; i ++ ) { + + const face = faces[ i ]; + f3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps ); + + } + + } + + scope.addGroup( start, verticesArray.length / 3 - start, 0 ); + + } + + // Create faces for the z-sides of the shape + + function buildSideFaces() { + + const start = verticesArray.length / 3; + let layeroffset = 0; + sidewalls( contour, layeroffset ); + layeroffset += contour.length; + + for ( let h = 0, hl = holes.length; h < hl; h ++ ) { + + const ahole = holes[ h ]; + sidewalls( ahole, layeroffset ); + + //, true + layeroffset += ahole.length; + + } + + + scope.addGroup( start, verticesArray.length / 3 - start, 1 ); + + + } + + function sidewalls( contour, layeroffset ) { + + let i = contour.length; + + while ( -- i >= 0 ) { + + const j = i; + let k = i - 1; + if ( k < 0 ) k = contour.length - 1; + + //console.log('b', i,j, i-1, k,vertices.length); + + for ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) { + + const slen1 = vlen * s; + const slen2 = vlen * ( s + 1 ); + + const a = layeroffset + j + slen1, + b = layeroffset + k + slen1, + c = layeroffset + k + slen2, + d = layeroffset + j + slen2; + + f4( a, b, c, d ); + + } + + } + + } + + function v( x, y, z ) { + + placeholder.push( x ); + placeholder.push( y ); + placeholder.push( z ); + + } + + + function f3( a, b, c ) { + + addVertex( a ); + addVertex( b ); + addVertex( c ); + + const nextIndex = verticesArray.length / 3; + const uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); + + addUV( uvs[ 0 ] ); + addUV( uvs[ 1 ] ); + addUV( uvs[ 2 ] ); + + } + + function f4( a, b, c, d ) { + + addVertex( a ); + addVertex( b ); + addVertex( d ); + + addVertex( b ); + addVertex( c ); + addVertex( d ); + + + const nextIndex = verticesArray.length / 3; + const uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); + + addUV( uvs[ 0 ] ); + addUV( uvs[ 1 ] ); + addUV( uvs[ 3 ] ); + + addUV( uvs[ 1 ] ); + addUV( uvs[ 2 ] ); + addUV( uvs[ 3 ] ); + + } + + function addVertex( index ) { + + verticesArray.push( placeholder[ index * 3 + 0 ] ); + verticesArray.push( placeholder[ index * 3 + 1 ] ); + verticesArray.push( placeholder[ index * 3 + 2 ] ); + + } + + + function addUV( vector2 ) { + + uvArray.push( vector2.x ); + uvArray.push( vector2.y ); + + } + + } + + } + + toJSON() { + + const data = BufferGeometry.prototype.toJSON.call( this ); + + const shapes = this.parameters.shapes; + const options = this.parameters.options; + + return toJSON( shapes, options, data ); + + } + + } + + const WorldUVGenerator = { + + generateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) { + + const a_x = vertices[ indexA * 3 ]; + const a_y = vertices[ indexA * 3 + 1 ]; + const b_x = vertices[ indexB * 3 ]; + const b_y = vertices[ indexB * 3 + 1 ]; + const c_x = vertices[ indexC * 3 ]; + const c_y = vertices[ indexC * 3 + 1 ]; + + return [ + new Vector2( a_x, a_y ), + new Vector2( b_x, b_y ), + new Vector2( c_x, c_y ) + ]; + + }, + + generateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) { + + const a_x = vertices[ indexA * 3 ]; + const a_y = vertices[ indexA * 3 + 1 ]; + const a_z = vertices[ indexA * 3 + 2 ]; + const b_x = vertices[ indexB * 3 ]; + const b_y = vertices[ indexB * 3 + 1 ]; + const b_z = vertices[ indexB * 3 + 2 ]; + const c_x = vertices[ indexC * 3 ]; + const c_y = vertices[ indexC * 3 + 1 ]; + const c_z = vertices[ indexC * 3 + 2 ]; + const d_x = vertices[ indexD * 3 ]; + const d_y = vertices[ indexD * 3 + 1 ]; + const d_z = vertices[ indexD * 3 + 2 ]; + + if ( Math.abs( a_y - b_y ) < 0.01 ) { + + return [ + new Vector2( a_x, 1 - a_z ), + new Vector2( b_x, 1 - b_z ), + new Vector2( c_x, 1 - c_z ), + new Vector2( d_x, 1 - d_z ) + ]; + + } else { + + return [ + new Vector2( a_y, 1 - a_z ), + new Vector2( b_y, 1 - b_z ), + new Vector2( c_y, 1 - c_z ), + new Vector2( d_y, 1 - d_z ) + ]; + + } + + } + + }; + + function toJSON( shapes, options, data ) { + + data.shapes = []; + + if ( Array.isArray( shapes ) ) { + + for ( let i = 0, l = shapes.length; i < l; i ++ ) { + + const shape = shapes[ i ]; + + data.shapes.push( shape.uuid ); + + } + + } else { + + data.shapes.push( shapes.uuid ); + + } + + if ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON(); + + return data; + + } + + /** + * Creates extruded geometry from a path shape. + * + * parameters = { + * + * curveSegments: , // number of points on the curves + * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too + * depth: , // Depth to extrude the shape + * + * bevelEnabled: , // turn on bevel + * bevelThickness: , // how deep into the original shape bevel goes + * bevelSize: , // how far from shape outline (including bevelOffset) is bevel + * bevelOffset: , // how far from shape outline does bevel start + * bevelSegments: , // number of bevel layers + * + * extrudePath: // curve to extrude shape along + * + * UVGenerator: // object that provides UV generator functions + * + * } + */ + + class ExtrudeGeometry extends Geometry { + + constructor( shapes, options ) { + + super(); + + this.type = 'ExtrudeGeometry'; + + this.parameters = { + shapes: shapes, + options: options + }; + + this.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) ); + this.mergeVertices(); + + } + + toJSON() { + + const data = super.toJSON(); + + const shapes = this.parameters.shapes; + const options = this.parameters.options; + + return toJSON$1( shapes, options, data ); + + } + + } + + function toJSON$1( shapes, options, data ) { + + data.shapes = []; + + if ( Array.isArray( shapes ) ) { + + for ( let i = 0, l = shapes.length; i < l; i ++ ) { + + const shape = shapes[ i ]; + + data.shapes.push( shape.uuid ); + + } + + } else { + + data.shapes.push( shapes.uuid ); + + } + + if ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON(); + + return data; + + } + + /** + * Parametric Surfaces Geometry + * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html + */ + + function ParametricBufferGeometry( func, slices, stacks ) { + + BufferGeometry.call( this ); + + this.type = 'ParametricBufferGeometry'; + + this.parameters = { + func: func, + slices: slices, + stacks: stacks + }; + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + const EPS = 0.00001; + + const normal = new Vector3(); + + const p0 = new Vector3(), p1 = new Vector3(); + const pu = new Vector3(), pv = new Vector3(); + + if ( func.length < 3 ) { + + console.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' ); + + } + + // generate vertices, normals and uvs + + const sliceCount = slices + 1; + + for ( let i = 0; i <= stacks; i ++ ) { + + const v = i / stacks; + + for ( let j = 0; j <= slices; j ++ ) { + + const u = j / slices; + + // vertex + + func( u, v, p0 ); + vertices.push( p0.x, p0.y, p0.z ); + + // normal + + // approximate tangent vectors via finite differences + + if ( u - EPS >= 0 ) { + + func( u - EPS, v, p1 ); + pu.subVectors( p0, p1 ); + + } else { + + func( u + EPS, v, p1 ); + pu.subVectors( p1, p0 ); + + } + + if ( v - EPS >= 0 ) { + + func( u, v - EPS, p1 ); + pv.subVectors( p0, p1 ); + + } else { + + func( u, v + EPS, p1 ); + pv.subVectors( p1, p0 ); + + } + + // cross product of tangent vectors returns surface normal + + normal.crossVectors( pu, pv ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u, v ); + + } + + } + + // generate indices + + for ( let i = 0; i < stacks; i ++ ) { + + for ( let j = 0; j < slices; j ++ ) { + + const a = i * sliceCount + j; + const b = i * sliceCount + j + 1; + const c = ( i + 1 ) * sliceCount + j + 1; + const d = ( i + 1 ) * sliceCount + j; + + // faces one and two + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // 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 ) ); + + } + + ParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); + ParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry; + + /** + * Parametric Surfaces Geometry + * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html + */ + + function ParametricGeometry( func, slices, stacks ) { + + Geometry.call( this ); + + this.type = 'ParametricGeometry'; + + this.parameters = { + func: func, + slices: slices, + stacks: stacks + }; + + this.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) ); + this.mergeVertices(); + + } + + ParametricGeometry.prototype = Object.create( Geometry.prototype ); + ParametricGeometry.prototype.constructor = ParametricGeometry; + + class ShapeBufferGeometry extends BufferGeometry { + + constructor( shapes, curveSegments = 12 ) { + + super(); + this.type = 'ShapeBufferGeometry'; + + this.parameters = { + shapes: shapes, + curveSegments: curveSegments + }; + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + // helper variables + + let groupStart = 0; + let groupCount = 0; + + // allow single and array values for "shapes" parameter + + if ( Array.isArray( shapes ) === false ) { + + addShape( shapes ); + + } else { + + for ( let i = 0; i < shapes.length; i ++ ) { + + addShape( shapes[ i ] ); + + this.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support + + groupStart += groupCount; + groupCount = 0; + + } + + } + + // 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 ) ); + + + // helper functions + + function addShape( shape ) { + + const indexOffset = vertices.length / 3; + const points = shape.extractPoints( curveSegments ); + + let shapeVertices = points.shape; + const shapeHoles = points.holes; + + // check direction of vertices + + if ( ShapeUtils.isClockWise( shapeVertices ) === false ) { + + shapeVertices = shapeVertices.reverse(); + + } + + for ( let i = 0, l = shapeHoles.length; i < l; i ++ ) { + + const shapeHole = shapeHoles[ i ]; + + if ( ShapeUtils.isClockWise( shapeHole ) === true ) { + + shapeHoles[ i ] = shapeHole.reverse(); + + } + + } + + const faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles ); + + // join vertices of inner and outer paths to a single array + + for ( let i = 0, l = shapeHoles.length; i < l; i ++ ) { + + const shapeHole = shapeHoles[ i ]; + shapeVertices = shapeVertices.concat( shapeHole ); + + } + + // vertices, normals, uvs + + for ( let i = 0, l = shapeVertices.length; i < l; i ++ ) { + + const vertex = shapeVertices[ i ]; + + vertices.push( vertex.x, vertex.y, 0 ); + normals.push( 0, 0, 1 ); + uvs.push( vertex.x, vertex.y ); // world uvs + + } + + // incides + + for ( let i = 0, l = faces.length; i < l; i ++ ) { + + const face = faces[ i ]; + + const a = face[ 0 ] + indexOffset; + const b = face[ 1 ] + indexOffset; + const c = face[ 2 ] + indexOffset; + + indices.push( a, b, c ); + groupCount += 3; + + } + + } + + } + + toJSON() { + + const data = BufferGeometry.prototype.toJSON.call( this ); + + const shapes = this.parameters.shapes; + + return toJSON$2( shapes, data ); + + } + + } + + function toJSON$2( shapes, data ) { + + data.shapes = []; + + if ( Array.isArray( shapes ) ) { + + for ( let i = 0, l = shapes.length; i < l; i ++ ) { + + const shape = shapes[ i ]; + + data.shapes.push( shape.uuid ); + + } + + } else { + + data.shapes.push( shapes.uuid ); + + } + + return data; + + } + + class ShapeGeometry extends Geometry { + + constructor( shapes, curveSegments ) { + + super(); + this.type = 'ShapeGeometry'; + + if ( typeof curveSegments === 'object' ) { + + console.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' ); + + curveSegments = curveSegments.curveSegments; + + } + + this.parameters = { + shapes: shapes, + curveSegments: curveSegments + }; + + this.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) ); + this.mergeVertices(); + + } + + toJSON() { + + const data = Geometry.prototype.toJSON.call( this ); + + const shapes = this.parameters.shapes; + + return toJSON$3( shapes, data ); + + } + + } + + function toJSON$3( shapes, data ) { + + data.shapes = []; + + if ( Array.isArray( shapes ) ) { + + for ( let i = 0, l = shapes.length; i < l; i ++ ) { + + const shape = shapes[ i ]; + + data.shapes.push( shape.uuid ); + + } + + } else { + + data.shapes.push( shapes.uuid ); + + } + + return data; + + } + + class SphereBufferGeometry extends BufferGeometry { + + constructor( radius = 1, widthSegments = 8, heightSegments = 6, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) { + + super(); + this.type = 'SphereBufferGeometry'; + + this.parameters = { + radius: radius, + widthSegments: widthSegments, + heightSegments: heightSegments, + phiStart: phiStart, + phiLength: phiLength, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + widthSegments = Math.max( 3, Math.floor( widthSegments ) ); + heightSegments = Math.max( 2, Math.floor( heightSegments ) ); + + const thetaEnd = Math.min( thetaStart + thetaLength, Math.PI ); + + let index = 0; + const grid = []; + + const vertex = new Vector3(); + const normal = new Vector3(); + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + // generate vertices, normals and uvs + + for ( let iy = 0; iy <= heightSegments; iy ++ ) { + + const verticesRow = []; + + const v = iy / heightSegments; + + // special case for the poles + + let uOffset = 0; + + if ( iy == 0 && thetaStart == 0 ) { + + uOffset = 0.5 / widthSegments; + + } else if ( iy == heightSegments && thetaEnd == Math.PI ) { + + uOffset = - 0.5 / widthSegments; + + } + + for ( let ix = 0; ix <= widthSegments; ix ++ ) { + + const u = ix / widthSegments; + + // vertex + + vertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); + vertex.y = radius * Math.cos( thetaStart + v * thetaLength ); + vertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normal.copy( vertex ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u + uOffset, 1 - v ); + + verticesRow.push( index ++ ); + + } + + grid.push( verticesRow ); + + } + + // indices + + for ( let iy = 0; iy < heightSegments; iy ++ ) { + + for ( let ix = 0; ix < widthSegments; ix ++ ) { + + const a = grid[ iy ][ ix + 1 ]; + const b = grid[ iy ][ ix ]; + const c = grid[ iy + 1 ][ ix ]; + const d = grid[ iy + 1 ][ ix + 1 ]; + + if ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d ); + if ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d ); + + } + + } + + // 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 ) ); + + } + + } + + class SphereGeometry extends Geometry { + + constructor( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) { + + super(); + this.type = 'SphereGeometry'; + + this.parameters = { + radius: radius, + widthSegments: widthSegments, + heightSegments: heightSegments, + phiStart: phiStart, + phiLength: phiLength, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) ); + this.mergeVertices(); + + } + + } + + class TubeBufferGeometry extends BufferGeometry { + + constructor( path, tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) { + + super(); + this.type = 'TubeBufferGeometry'; + + this.parameters = { + path: path, + tubularSegments: tubularSegments, + radius: radius, + radialSegments: radialSegments, + closed: closed + }; + + const frames = path.computeFrenetFrames( tubularSegments, closed ); + + // expose internals + + this.tangents = frames.tangents; + this.normals = frames.normals; + this.binormals = frames.binormals; + + // helper variables + + const vertex = new Vector3(); + const normal = new Vector3(); + const uv = new Vector2(); + let P = new Vector3(); + + // buffer + + const vertices = []; + const normals = []; + const uvs = []; + const indices = []; + + // create buffer data + + generateBufferData(); + + // 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 ) ); + + // functions + + function generateBufferData() { + + for ( let i = 0; i < tubularSegments; i ++ ) { + + generateSegment( i ); + + } + + // if the geometry is not closed, generate the last row of vertices and normals + // at the regular position on the given path + // + // if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ) + + generateSegment( ( closed === false ) ? tubularSegments : 0 ); + + // uvs are generated in a separate function. + // this makes it easy compute correct values for closed geometries + + generateUVs(); + + // finally create faces + + generateIndices(); + + } + + function generateSegment( i ) { + + // we use getPointAt to sample evenly distributed points from the given path + + P = path.getPointAt( i / tubularSegments, P ); + + // retrieve corresponding normal and binormal + + const N = frames.normals[ i ]; + const B = frames.binormals[ i ]; + + // generate normals and vertices for the current segment + + for ( let j = 0; j <= radialSegments; j ++ ) { + + const v = j / radialSegments * Math.PI * 2; + + const sin = Math.sin( v ); + const cos = - Math.cos( v ); + + // normal + + normal.x = ( cos * N.x + sin * B.x ); + normal.y = ( cos * N.y + sin * B.y ); + normal.z = ( cos * N.z + sin * B.z ); + normal.normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // vertex + + vertex.x = P.x + radius * normal.x; + vertex.y = P.y + radius * normal.y; + vertex.z = P.z + radius * normal.z; + + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } + + function generateIndices() { + + for ( let j = 1; j <= tubularSegments; j ++ ) { + + for ( let i = 1; i <= radialSegments; i ++ ) { + + const a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); + const b = ( radialSegments + 1 ) * j + ( i - 1 ); + const c = ( radialSegments + 1 ) * j + i; + const d = ( radialSegments + 1 ) * ( j - 1 ) + i; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + } + + function generateUVs() { + + for ( let i = 0; i <= tubularSegments; i ++ ) { + + for ( let j = 0; j <= radialSegments; j ++ ) { + + uv.x = i / tubularSegments; + uv.y = j / radialSegments; + + uvs.push( uv.x, uv.y ); + + } + + } + + } + + } + toJSON() { + + const data = BufferGeometry.prototype.toJSON.call( this ); + + data.path = this.parameters.path.toJSON(); + + return data; + + } + + } + + /** + * parameters = { + * color: + * } + */ + + function ShadowMaterial( parameters ) { + + Material.call( this ); + + this.type = 'ShadowMaterial'; + + this.color = new Color( 0x000000 ); + this.transparent = true; + + this.setValues( parameters ); + + } + + ShadowMaterial.prototype = Object.create( Material.prototype ); + ShadowMaterial.prototype.constructor = ShadowMaterial; + + ShadowMaterial.prototype.isShadowMaterial = true; + + ShadowMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + return this; + + }; + + function RawShaderMaterial( parameters ) { + + ShaderMaterial.call( this, parameters ); + + this.type = 'RawShaderMaterial'; + + } + + RawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype ); + RawShaderMaterial.prototype.constructor = RawShaderMaterial; + + RawShaderMaterial.prototype.isRawShaderMaterial = true; + + /** + * parameters = { + * color: , + * roughness: , + * metalness: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * roughnessMap: new THREE.Texture( ), + * + * metalnessMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * envMapIntensity: + * + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function MeshStandardMaterial( parameters ) { + + Material.call( this ); + + this.defines = { 'STANDARD': '' }; + + this.type = 'MeshStandardMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + this.roughness = 1.0; + this.metalness = 0.0; + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.roughnessMap = null; + + this.metalnessMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.envMapIntensity = 1.0; + + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.vertexTangents = false; + + this.setValues( parameters ); + + } + + MeshStandardMaterial.prototype = Object.create( Material.prototype ); + MeshStandardMaterial.prototype.constructor = MeshStandardMaterial; + + MeshStandardMaterial.prototype.isMeshStandardMaterial = true; + + MeshStandardMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.defines = { 'STANDARD': '' }; + + this.color.copy( source.color ); + this.roughness = source.roughness; + this.metalness = source.metalness; + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.roughnessMap = source.roughnessMap; + + this.metalnessMap = source.metalnessMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.envMapIntensity = source.envMapIntensity; + + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + this.vertexTangents = source.vertexTangents; + + return this; + + }; + + /** + * parameters = { + * clearcoat: , + * clearcoatMap: new THREE.Texture( ), + * clearcoatRoughness: , + * clearcoatRoughnessMap: new THREE.Texture( ), + * clearcoatNormalScale: , + * clearcoatNormalMap: new THREE.Texture( ), + * + * reflectivity: , + * ior: , + * + * sheen: , + * + * transmission: , + * transmissionMap: new THREE.Texture( ) + * } + */ + + function MeshPhysicalMaterial( parameters ) { + + MeshStandardMaterial.call( this ); + + this.defines = { + + 'STANDARD': '', + 'PHYSICAL': '' + + }; + + this.type = 'MeshPhysicalMaterial'; + + this.clearcoat = 0.0; + this.clearcoatMap = null; + this.clearcoatRoughness = 0.0; + this.clearcoatRoughnessMap = null; + this.clearcoatNormalScale = new Vector2( 1, 1 ); + this.clearcoatNormalMap = null; + + this.reflectivity = 0.5; // maps to F0 = 0.04 + + Object.defineProperty( this, 'ior', { + get: function () { + + return ( 1 + 0.4 * this.reflectivity ) / ( 1 - 0.4 * this.reflectivity ); + + }, + set: function ( ior ) { + + this.reflectivity = MathUtils.clamp( 2.5 * ( ior - 1 ) / ( ior + 1 ), 0, 1 ); + + } + } ); + + this.sheen = null; // null will disable sheen bsdf + + this.transmission = 0.0; + this.transmissionMap = null; + + this.setValues( parameters ); + + } + + MeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype ); + MeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial; + + MeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true; + + MeshPhysicalMaterial.prototype.copy = function ( source ) { + + MeshStandardMaterial.prototype.copy.call( this, source ); + + this.defines = { + + 'STANDARD': '', + 'PHYSICAL': '' + + }; + + this.clearcoat = source.clearcoat; + this.clearcoatMap = source.clearcoatMap; + this.clearcoatRoughness = source.clearcoatRoughness; + this.clearcoatRoughnessMap = source.clearcoatRoughnessMap; + this.clearcoatNormalMap = source.clearcoatNormalMap; + this.clearcoatNormalScale.copy( source.clearcoatNormalScale ); + + this.reflectivity = source.reflectivity; + + if ( source.sheen ) { + + this.sheen = ( this.sheen || new Color() ).copy( source.sheen ); + + } else { + + this.sheen = null; + + } + + this.transmission = source.transmission; + this.transmissionMap = source.transmissionMap; + + return this; + + }; + + /** + * parameters = { + * color: , + * specular: , + * shininess: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.MultiplyOperation, + * reflectivity: , + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function MeshPhongMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshPhongMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + this.specular = new Color( 0x111111 ); + this.shininess = 30; + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + + } + + MeshPhongMaterial.prototype = Object.create( Material.prototype ); + MeshPhongMaterial.prototype.constructor = MeshPhongMaterial; + + MeshPhongMaterial.prototype.isMeshPhongMaterial = true; + + MeshPhongMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + this.specular.copy( source.specular ); + this.shininess = source.shininess; + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + 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.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + + }; + + /** + * parameters = { + * color: , + * + * map: new THREE.Texture( ), + * gradientMap: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * alphaMap: new THREE.Texture( ), + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function MeshToonMaterial( parameters ) { + + Material.call( this ); + + this.defines = { 'TOON': '' }; + + this.type = 'MeshToonMaterial'; + + this.color = new Color( 0xffffff ); + + this.map = null; + this.gradientMap = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.alphaMap = null; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + + } + + MeshToonMaterial.prototype = Object.create( Material.prototype ); + MeshToonMaterial.prototype.constructor = MeshToonMaterial; + + MeshToonMaterial.prototype.isMeshToonMaterial = true; + + MeshToonMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + this.gradientMap = source.gradientMap; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.alphaMap = source.alphaMap; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + + }; + + /** + * parameters = { + * opacity: , + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * wireframe: , + * wireframeLinewidth: + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function MeshNormalMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshNormalMaterial'; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + + } + + MeshNormalMaterial.prototype = Object.create( Material.prototype ); + MeshNormalMaterial.prototype.constructor = MeshNormalMaterial; + + MeshNormalMaterial.prototype.isMeshNormalMaterial = true; + + MeshNormalMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + + }; + + /** + * parameters = { + * color: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.Multiply, + * reflectivity: , + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function MeshLambertMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshLambertMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + + } + + MeshLambertMaterial.prototype = Object.create( Material.prototype ); + MeshLambertMaterial.prototype.constructor = MeshLambertMaterial; + + MeshLambertMaterial.prototype.isMeshLambertMaterial = true; + + MeshLambertMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, 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.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + 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.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + + }; + + /** + * parameters = { + * color: , + * opacity: , + * + * matcap: new THREE.Texture( ), + * + * map: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * alphaMap: new THREE.Texture( ), + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + + function MeshMatcapMaterial( parameters ) { + + Material.call( this ); + + this.defines = { 'MATCAP': '' }; + + this.type = 'MeshMatcapMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + + this.matcap = null; + + this.map = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.alphaMap = null; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + + } + + MeshMatcapMaterial.prototype = Object.create( Material.prototype ); + MeshMatcapMaterial.prototype.constructor = MeshMatcapMaterial; + + MeshMatcapMaterial.prototype.isMeshMatcapMaterial = true; + + MeshMatcapMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.defines = { 'MATCAP': '' }; + + this.color.copy( source.color ); + + this.matcap = source.matcap; + + this.map = source.map; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.alphaMap = source.alphaMap; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + + }; + + /** + * parameters = { + * color: , + * opacity: , + * + * linewidth: , + * + * scale: , + * dashSize: , + * gapSize: + * } + */ + + function LineDashedMaterial( parameters ) { + + LineBasicMaterial.call( this ); + + this.type = 'LineDashedMaterial'; + + this.scale = 1; + this.dashSize = 3; + this.gapSize = 1; + + this.setValues( parameters ); + + } + + LineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype ); + LineDashedMaterial.prototype.constructor = LineDashedMaterial; + + LineDashedMaterial.prototype.isLineDashedMaterial = true; + + LineDashedMaterial.prototype.copy = function ( source ) { + + LineBasicMaterial.prototype.copy.call( this, source ); + + this.scale = source.scale; + this.dashSize = source.dashSize; + this.gapSize = source.gapSize; + + return this; + + }; + + var Materials = /*#__PURE__*/Object.freeze({ + __proto__: null, + ShadowMaterial: ShadowMaterial, + SpriteMaterial: SpriteMaterial, + RawShaderMaterial: RawShaderMaterial, + ShaderMaterial: ShaderMaterial, + PointsMaterial: PointsMaterial, + MeshPhysicalMaterial: MeshPhysicalMaterial, + MeshStandardMaterial: MeshStandardMaterial, + MeshPhongMaterial: MeshPhongMaterial, + MeshToonMaterial: MeshToonMaterial, + MeshNormalMaterial: MeshNormalMaterial, + MeshLambertMaterial: MeshLambertMaterial, + MeshDepthMaterial: MeshDepthMaterial, + MeshDistanceMaterial: MeshDistanceMaterial, + MeshBasicMaterial: MeshBasicMaterial, + MeshMatcapMaterial: MeshMatcapMaterial, + LineDashedMaterial: LineDashedMaterial, + LineBasicMaterial: LineBasicMaterial, + Material: Material + }); + + const AnimationUtils = { + + // same as Array.prototype.slice, but also works on typed arrays + arraySlice: function ( array, from, to ) { + + if ( AnimationUtils.isTypedArray( array ) ) { + + // in ios9 array.subarray(from, undefined) will return empty array + // but array.subarray(from) or array.subarray(from, len) is correct + return new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) ); + + } + + return array.slice( from, to ); + + }, + + // converts an array to a specific type + convertArray: function ( array, type, forceClone ) { + + if ( ! array || // let 'undefined' and 'null' pass + ! forceClone && array.constructor === type ) return array; + + if ( typeof type.BYTES_PER_ELEMENT === 'number' ) { + + return new type( array ); // create typed array + + } + + return Array.prototype.slice.call( array ); // create Array + + }, + + isTypedArray: function ( object ) { + + return ArrayBuffer.isView( object ) && + ! ( object instanceof DataView ); + + }, + + // returns an array by which times and values can be sorted + getKeyframeOrder: function ( times ) { + + function compareTime( i, j ) { + + return times[ i ] - times[ j ]; + + } + + const n = times.length; + const result = new Array( n ); + for ( let i = 0; i !== n; ++ i ) result[ i ] = i; + + result.sort( compareTime ); + + return result; + + }, + + // uses the array previously returned by 'getKeyframeOrder' to sort data + sortedArray: function ( values, stride, order ) { + + const nValues = values.length; + const result = new values.constructor( nValues ); + + for ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) { + + const srcOffset = order[ i ] * stride; + + for ( let j = 0; j !== stride; ++ j ) { + + result[ dstOffset ++ ] = values[ srcOffset + j ]; + + } + + } + + return result; + + }, + + // function for parsing AOS keyframe formats + flattenJSON: function ( jsonKeys, times, values, valuePropertyName ) { + + let i = 1, key = jsonKeys[ 0 ]; + + while ( key !== undefined && key[ valuePropertyName ] === undefined ) { + + key = jsonKeys[ i ++ ]; + + } + + if ( key === undefined ) return; // no data + + let value = key[ valuePropertyName ]; + if ( value === undefined ) return; // no data + + if ( Array.isArray( value ) ) { + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + values.push.apply( values, value ); // push all elements + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } else if ( value.toArray !== undefined ) { + + // ...assume THREE.Math-ish + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + value.toArray( values, values.length ); + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } else { + + // otherwise push as-is + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + values.push( value ); + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } + + }, + + subclip: function ( sourceClip, name, startFrame, endFrame, fps = 30 ) { + + const clip = sourceClip.clone(); + + clip.name = name; + + const tracks = []; + + for ( let i = 0; i < clip.tracks.length; ++ i ) { + + const track = clip.tracks[ i ]; + const valueSize = track.getValueSize(); + + const times = []; + const values = []; + + for ( let j = 0; j < track.times.length; ++ j ) { + + const frame = track.times[ j ] * fps; + + if ( frame < startFrame || frame >= endFrame ) continue; + + times.push( track.times[ j ] ); + + for ( let k = 0; k < valueSize; ++ k ) { + + values.push( track.values[ j * valueSize + k ] ); + + } + + } + + if ( times.length === 0 ) continue; + + track.times = AnimationUtils.convertArray( times, track.times.constructor ); + track.values = AnimationUtils.convertArray( values, track.values.constructor ); + + tracks.push( track ); + + } + + clip.tracks = tracks; + + // find minimum .times value across all tracks in the trimmed clip + + let minStartTime = Infinity; + + for ( let i = 0; i < clip.tracks.length; ++ i ) { + + if ( minStartTime > clip.tracks[ i ].times[ 0 ] ) { + + minStartTime = clip.tracks[ i ].times[ 0 ]; + + } + + } + + // shift all tracks such that clip begins at t=0 + + for ( let i = 0; i < clip.tracks.length; ++ i ) { + + clip.tracks[ i ].shift( - 1 * minStartTime ); + + } + + clip.resetDuration(); + + return clip; + + }, + + makeClipAdditive: function ( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) { + + if ( fps <= 0 ) fps = 30; + + const numTracks = referenceClip.tracks.length; + const referenceTime = referenceFrame / fps; + + // Make each track's values relative to the values at the reference frame + for ( let i = 0; i < numTracks; ++ i ) { + + const referenceTrack = referenceClip.tracks[ i ]; + const referenceTrackType = referenceTrack.ValueTypeName; + + // Skip this track if it's non-numeric + if ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue; + + // Find the track in the target clip whose name and type matches the reference track + const targetTrack = targetClip.tracks.find( function ( track ) { + + return track.name === referenceTrack.name + && track.ValueTypeName === referenceTrackType; + + } ); + + if ( targetTrack === undefined ) continue; + + let referenceOffset = 0; + const referenceValueSize = referenceTrack.getValueSize(); + + if ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) { + + referenceOffset = referenceValueSize / 3; + + } + + let targetOffset = 0; + const targetValueSize = targetTrack.getValueSize(); + + if ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) { + + targetOffset = targetValueSize / 3; + + } + + const lastIndex = referenceTrack.times.length - 1; + let referenceValue; + + // Find the value to subtract out of the track + if ( referenceTime <= referenceTrack.times[ 0 ] ) { + + // Reference frame is earlier than the first keyframe, so just use the first keyframe + const startIndex = referenceOffset; + const endIndex = referenceValueSize - referenceOffset; + referenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex ); + + } else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) { + + // Reference frame is after the last keyframe, so just use the last keyframe + const startIndex = lastIndex * referenceValueSize + referenceOffset; + const endIndex = startIndex + referenceValueSize - referenceOffset; + referenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex ); + + } else { + + // Interpolate to the reference value + const interpolant = referenceTrack.createInterpolant(); + const startIndex = referenceOffset; + const endIndex = referenceValueSize - referenceOffset; + interpolant.evaluate( referenceTime ); + referenceValue = AnimationUtils.arraySlice( interpolant.resultBuffer, startIndex, endIndex ); + + } + + // Conjugate the quaternion + if ( referenceTrackType === 'quaternion' ) { + + const referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate(); + referenceQuat.toArray( referenceValue ); + + } + + // Subtract the reference value from all of the track values + + const numTimes = targetTrack.times.length; + for ( let j = 0; j < numTimes; ++ j ) { + + const valueStart = j * targetValueSize + targetOffset; + + if ( referenceTrackType === 'quaternion' ) { + + // Multiply the conjugate for quaternion track types + Quaternion.multiplyQuaternionsFlat( + targetTrack.values, + valueStart, + referenceValue, + 0, + targetTrack.values, + valueStart + ); + + } else { + + const valueEnd = targetValueSize - targetOffset * 2; + + // Subtract each value for all other numeric track types + for ( let k = 0; k < valueEnd; ++ k ) { + + targetTrack.values[ valueStart + k ] -= referenceValue[ k ]; + + } + + } + + } + + } + + targetClip.blendMode = AdditiveAnimationBlendMode; + + return targetClip; + + } + + }; + + /** + * Abstract base class of interpolants over parametric samples. + * + * The parameter domain is one dimensional, typically the time or a path + * along a curve defined by the data. + * + * The sample values can have any dimensionality and derived classes may + * apply special interpretations to the data. + * + * This class provides the interval seek in a Template Method, deferring + * the actual interpolation to derived classes. + * + * Time complexity is O(1) for linear access crossing at most two points + * and O(log N) for random access, where N is the number of positions. + * + * References: + * + * http://www.oodesign.com/template-method-pattern.html + * + */ + + function Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + this.parameterPositions = parameterPositions; + this._cachedIndex = 0; + + this.resultBuffer = resultBuffer !== undefined ? + resultBuffer : new sampleValues.constructor( sampleSize ); + this.sampleValues = sampleValues; + this.valueSize = sampleSize; + + } + + Object.assign( Interpolant.prototype, { + + evaluate: function ( t ) { + + const pp = this.parameterPositions; + let i1 = this._cachedIndex, + t1 = pp[ i1 ], + t0 = pp[ i1 - 1 ]; + + validate_interval: { + + seek: { + + let right; + + linear_scan: { + + //- See http://jsperf.com/comparison-to-undefined/3 + //- slower code: + //- + //- if ( t >= t1 || t1 === undefined ) { + forward_scan: if ( ! ( t < t1 ) ) { + + for ( let giveUpAt = i1 + 2; ; ) { + + if ( t1 === undefined ) { + + if ( t < t0 ) break forward_scan; + + // after end + + i1 = pp.length; + this._cachedIndex = i1; + return this.afterEnd_( i1 - 1, t, t0 ); + + } + + if ( i1 === giveUpAt ) break; // this loop + + t0 = t1; + t1 = pp[ ++ i1 ]; + + if ( t < t1 ) { + + // we have arrived at the sought interval + break seek; + + } + + } + + // prepare binary search on the right side of the index + right = pp.length; + break linear_scan; + + } + + //- slower code: + //- if ( t < t0 || t0 === undefined ) { + if ( ! ( t >= t0 ) ) { + + // looping? + + const t1global = pp[ 1 ]; + + if ( t < t1global ) { + + i1 = 2; // + 1, using the scan for the details + t0 = t1global; + + } + + // linear reverse scan + + for ( let giveUpAt = i1 - 2; ; ) { + + if ( t0 === undefined ) { + + // before start + + this._cachedIndex = 0; + return this.beforeStart_( 0, t, t1 ); + + } + + if ( i1 === giveUpAt ) break; // this loop + + t1 = t0; + t0 = pp[ -- i1 - 1 ]; + + if ( t >= t0 ) { + + // we have arrived at the sought interval + break seek; + + } + + } + + // prepare binary search on the left side of the index + right = i1; + i1 = 0; + break linear_scan; + + } + + // the interval is valid + + break validate_interval; + + } // linear scan + + // binary search + + while ( i1 < right ) { + + const mid = ( i1 + right ) >>> 1; + + if ( t < pp[ mid ] ) { + + right = mid; + + } else { + + i1 = mid + 1; + + } + + } + + t1 = pp[ i1 ]; + t0 = pp[ i1 - 1 ]; + + // check boundary cases, again + + if ( t0 === undefined ) { + + this._cachedIndex = 0; + return this.beforeStart_( 0, t, t1 ); + + } + + if ( t1 === undefined ) { + + i1 = pp.length; + this._cachedIndex = i1; + return this.afterEnd_( i1 - 1, t0, t ); + + } + + } // seek + + this._cachedIndex = i1; + + this.intervalChanged_( i1, t0, t1 ); + + } // validate_interval + + return this.interpolate_( i1, t0, t, t1 ); + + }, + + settings: null, // optional, subclass-specific settings structure + // Note: The indirection allows central control of many interpolants. + + // --- Protected interface + + DefaultSettings_: {}, + + getSettings_: function () { + + return this.settings || this.DefaultSettings_; + + }, + + copySampleValue_: function ( index ) { + + // copies a sample value to the result buffer + + const result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + offset = index * stride; + + for ( let i = 0; i !== stride; ++ i ) { + + result[ i ] = values[ offset + i ]; + + } + + return result; + + }, + + // Template methods for derived classes: + + interpolate_: function ( /* i1, t0, t, t1 */ ) { + + throw new Error( 'call to abstract method' ); + // implementations shall return this.resultBuffer + + }, + + intervalChanged_: function ( /* i1, t0, t1 */ ) { + + // empty + + } + + } ); + + // DECLARE ALIAS AFTER assign prototype + Object.assign( Interpolant.prototype, { + + //( 0, t, t0 ), returns this.resultBuffer + beforeStart_: Interpolant.prototype.copySampleValue_, + + //( N-1, tN-1, t ), returns this.resultBuffer + afterEnd_: Interpolant.prototype.copySampleValue_, + + } ); + + /** + * Fast and simple cubic spline interpolant. + * + * It was derived from a Hermitian construction setting the first derivative + * at each sample position to the linear slope between neighboring positions + * over their parameter interval. + */ + + function CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + + this._weightPrev = - 0; + this._offsetPrev = - 0; + this._weightNext = - 0; + this._offsetNext = - 0; + + } + + CubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: CubicInterpolant, + + DefaultSettings_: { + + endingStart: ZeroCurvatureEnding, + endingEnd: ZeroCurvatureEnding + + }, + + intervalChanged_: function ( i1, t0, t1 ) { + + const pp = this.parameterPositions; + let iPrev = i1 - 2, + iNext = i1 + 1, + + tPrev = pp[ iPrev ], + tNext = pp[ iNext ]; + + if ( tPrev === undefined ) { + + switch ( this.getSettings_().endingStart ) { + + case ZeroSlopeEnding: + + // f'(t0) = 0 + iPrev = i1; + tPrev = 2 * t0 - t1; + + break; + + case WrapAroundEnding: + + // use the other end of the curve + iPrev = pp.length - 2; + tPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ]; + + break; + + default: // ZeroCurvatureEnding + + // f''(t0) = 0 a.k.a. Natural Spline + iPrev = i1; + tPrev = t1; + + } + + } + + if ( tNext === undefined ) { + + switch ( this.getSettings_().endingEnd ) { + + case ZeroSlopeEnding: + + // f'(tN) = 0 + iNext = i1; + tNext = 2 * t1 - t0; + + break; + + case WrapAroundEnding: + + // use the other end of the curve + iNext = 1; + tNext = t1 + pp[ 1 ] - pp[ 0 ]; + + break; + + default: // ZeroCurvatureEnding + + // f''(tN) = 0, a.k.a. Natural Spline + iNext = i1 - 1; + tNext = t0; + + } + + } + + const halfDt = ( t1 - t0 ) * 0.5, + stride = this.valueSize; + + this._weightPrev = halfDt / ( t0 - tPrev ); + this._weightNext = halfDt / ( tNext - t1 ); + this._offsetPrev = iPrev * stride; + this._offsetNext = iNext * stride; + + }, + + interpolate_: function ( i1, t0, t, t1 ) { + + const result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + o1 = i1 * stride, o0 = o1 - stride, + oP = this._offsetPrev, oN = this._offsetNext, + wP = this._weightPrev, wN = this._weightNext, + + p = ( t - t0 ) / ( t1 - t0 ), + pp = p * p, + ppp = pp * p; + + // evaluate polynomials + + const sP = - wP * ppp + 2 * wP * pp - wP * p; + const s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1; + const s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p; + const sN = wN * ppp - wN * pp; + + // combine data linearly + + for ( let i = 0; i !== stride; ++ i ) { + + result[ i ] = + sP * values[ oP + i ] + + s0 * values[ o0 + i ] + + s1 * values[ o1 + i ] + + sN * values[ oN + i ]; + + } + + return result; + + } + + } ); + + function LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + + } + + LinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: LinearInterpolant, + + interpolate_: function ( i1, t0, t, t1 ) { + + const result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + offset1 = i1 * stride, + offset0 = offset1 - stride, + + weight1 = ( t - t0 ) / ( t1 - t0 ), + weight0 = 1 - weight1; + + for ( let i = 0; i !== stride; ++ i ) { + + result[ i ] = + values[ offset0 + i ] * weight0 + + values[ offset1 + i ] * weight1; + + } + + return result; + + } + + } ); + + /** + * + * Interpolant that evaluates to the sample value at the position preceeding + * the parameter. + */ + + function DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + + } + + DiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: DiscreteInterpolant, + + interpolate_: function ( i1 /*, t0, t, t1 */ ) { + + return this.copySampleValue_( i1 - 1 ); + + } + + } ); + + function KeyframeTrack( name, times, values, interpolation ) { + + if ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' ); + if ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name ); + + this.name = name; + + this.times = AnimationUtils.convertArray( times, this.TimeBufferType ); + this.values = AnimationUtils.convertArray( values, this.ValueBufferType ); + + this.setInterpolation( interpolation || this.DefaultInterpolation ); + + } + + // Static methods + + Object.assign( KeyframeTrack, { + + // Serialization (in static context, because of constructor invocation + // and automatic invocation of .toJSON): + + toJSON: function ( track ) { + + const trackType = track.constructor; + + let json; + + // derived classes can define a static toJSON method + if ( trackType.toJSON !== undefined ) { + + json = trackType.toJSON( track ); + + } else { + + // by default, we assume the data can be serialized as-is + json = { + + 'name': track.name, + 'times': AnimationUtils.convertArray( track.times, Array ), + 'values': AnimationUtils.convertArray( track.values, Array ) + + }; + + const interpolation = track.getInterpolation(); + + if ( interpolation !== track.DefaultInterpolation ) { + + json.interpolation = interpolation; + + } + + } + + json.type = track.ValueTypeName; // mandatory + + return json; + + } + + } ); + + Object.assign( KeyframeTrack.prototype, { + + constructor: KeyframeTrack, + + TimeBufferType: Float32Array, + + ValueBufferType: Float32Array, + + DefaultInterpolation: InterpolateLinear, + + InterpolantFactoryMethodDiscrete: function ( result ) { + + return new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result ); + + }, + + InterpolantFactoryMethodLinear: function ( result ) { + + return new LinearInterpolant( this.times, this.values, this.getValueSize(), result ); + + }, + + InterpolantFactoryMethodSmooth: function ( result ) { + + return new CubicInterpolant( this.times, this.values, this.getValueSize(), result ); + + }, + + setInterpolation: function ( interpolation ) { + + let factoryMethod; + + switch ( interpolation ) { + + case InterpolateDiscrete: + + factoryMethod = this.InterpolantFactoryMethodDiscrete; + + break; + + case InterpolateLinear: + + factoryMethod = this.InterpolantFactoryMethodLinear; + + break; + + case InterpolateSmooth: + + factoryMethod = this.InterpolantFactoryMethodSmooth; + + break; + + } + + if ( factoryMethod === undefined ) { + + const message = "unsupported interpolation for " + + this.ValueTypeName + " keyframe track named " + this.name; + + if ( this.createInterpolant === undefined ) { + + // fall back to default, unless the default itself is messed up + if ( interpolation !== this.DefaultInterpolation ) { + + this.setInterpolation( this.DefaultInterpolation ); + + } else { + + throw new Error( message ); // fatal, in this case + + } + + } + + console.warn( 'THREE.KeyframeTrack:', message ); + return this; + + } + + this.createInterpolant = factoryMethod; + + return this; + + }, + + getInterpolation: function () { + + switch ( this.createInterpolant ) { + + case this.InterpolantFactoryMethodDiscrete: + + return InterpolateDiscrete; + + case this.InterpolantFactoryMethodLinear: + + return InterpolateLinear; + + case this.InterpolantFactoryMethodSmooth: + + return InterpolateSmooth; + + } + + }, + + getValueSize: function () { + + return this.values.length / this.times.length; + + }, + + // move all keyframes either forwards or backwards in time + shift: function ( timeOffset ) { + + if ( timeOffset !== 0.0 ) { + + const times = this.times; + + for ( let i = 0, n = times.length; i !== n; ++ i ) { + + times[ i ] += timeOffset; + + } + + } + + return this; + + }, + + // scale all keyframe times by a factor (useful for frame <-> seconds conversions) + scale: function ( timeScale ) { + + if ( timeScale !== 1.0 ) { + + const times = this.times; + + for ( let i = 0, n = times.length; i !== n; ++ i ) { + + times[ i ] *= timeScale; + + } + + } + + return this; + + }, + + // removes keyframes before and after animation without changing any values within the range [startTime, endTime]. + // IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values + trim: function ( startTime, endTime ) { + + const times = this.times, + nKeys = times.length; + + let from = 0, + to = nKeys - 1; + + while ( from !== nKeys && times[ from ] < startTime ) { + + ++ from; + + } + + while ( to !== - 1 && times[ to ] > endTime ) { + + -- to; + + } + + ++ to; // inclusive -> exclusive bound + + if ( from !== 0 || to !== nKeys ) { + + // empty tracks are forbidden, so keep at least one keyframe + if ( from >= to ) { + + to = Math.max( to, 1 ); + from = to - 1; + + } + + const stride = this.getValueSize(); + this.times = AnimationUtils.arraySlice( times, from, to ); + this.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride ); + + } + + return this; + + }, + + // ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable + validate: function () { + + let valid = true; + + const valueSize = this.getValueSize(); + if ( valueSize - Math.floor( valueSize ) !== 0 ) { + + console.error( 'THREE.KeyframeTrack: Invalid value size in track.', this ); + valid = false; + + } + + const times = this.times, + values = this.values, + + nKeys = times.length; + + if ( nKeys === 0 ) { + + console.error( 'THREE.KeyframeTrack: Track is empty.', this ); + valid = false; + + } + + let prevTime = null; + + for ( let i = 0; i !== nKeys; i ++ ) { + + const currTime = times[ i ]; + + if ( typeof currTime === 'number' && isNaN( currTime ) ) { + + console.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime ); + valid = false; + break; + + } + + if ( prevTime !== null && prevTime > currTime ) { + + console.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime ); + valid = false; + break; + + } + + prevTime = currTime; + + } + + if ( values !== undefined ) { + + if ( AnimationUtils.isTypedArray( values ) ) { + + for ( let i = 0, n = values.length; i !== n; ++ i ) { + + const value = values[ i ]; + + if ( isNaN( value ) ) { + + console.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value ); + valid = false; + break; + + } + + } + + } + + } + + return valid; + + }, + + // removes equivalent sequential keys as common in morph target sequences + // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0) + optimize: function () { + + // times or values may be shared with other tracks, so overwriting is unsafe + const times = AnimationUtils.arraySlice( this.times ), + values = AnimationUtils.arraySlice( this.values ), + stride = this.getValueSize(), + + smoothInterpolation = this.getInterpolation() === InterpolateSmooth, + + lastIndex = times.length - 1; + + let writeIndex = 1; + + for ( let i = 1; i < lastIndex; ++ i ) { + + let keep = false; + + const time = times[ i ]; + const timeNext = times[ i + 1 ]; + + // remove adjacent keyframes scheduled at the same time + + if ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) { + + if ( ! smoothInterpolation ) { + + // remove unnecessary keyframes same as their neighbors + + const offset = i * stride, + offsetP = offset - stride, + offsetN = offset + stride; + + for ( let j = 0; j !== stride; ++ j ) { + + const value = values[ offset + j ]; + + if ( value !== values[ offsetP + j ] || + value !== values[ offsetN + j ] ) { + + keep = true; + break; + + } + + } + + } else { + + keep = true; + + } + + } + + // in-place compaction + + if ( keep ) { + + if ( i !== writeIndex ) { + + times[ writeIndex ] = times[ i ]; + + const readOffset = i * stride, + writeOffset = writeIndex * stride; + + for ( let j = 0; j !== stride; ++ j ) { + + values[ writeOffset + j ] = values[ readOffset + j ]; + + } + + } + + ++ writeIndex; + + } + + } + + // flush last keyframe (compaction looks ahead) + + if ( lastIndex > 0 ) { + + times[ writeIndex ] = times[ lastIndex ]; + + for ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) { + + values[ writeOffset + j ] = values[ readOffset + j ]; + + } + + ++ writeIndex; + + } + + if ( writeIndex !== times.length ) { + + this.times = AnimationUtils.arraySlice( times, 0, writeIndex ); + this.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride ); + + } else { + + this.times = times; + this.values = values; + + } + + return this; + + }, + + clone: function () { + + const times = AnimationUtils.arraySlice( this.times, 0 ); + const values = AnimationUtils.arraySlice( this.values, 0 ); + + const TypedKeyframeTrack = this.constructor; + const track = new TypedKeyframeTrack( this.name, times, values ); + + // Interpolant argument to constructor is not saved, so copy the factory method directly. + track.createInterpolant = this.createInterpolant; + + return track; + + } + + } ); + + /** + * A Track of Boolean keyframe values. + */ + + function BooleanKeyframeTrack( name, times, values ) { + + KeyframeTrack.call( this, name, times, values ); + + } + + BooleanKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: BooleanKeyframeTrack, + + ValueTypeName: 'bool', + ValueBufferType: Array, + + DefaultInterpolation: InterpolateDiscrete, + + InterpolantFactoryMethodLinear: undefined, + InterpolantFactoryMethodSmooth: undefined + + // Note: Actually this track could have a optimized / compressed + // representation of a single value and a custom interpolant that + // computes "firstValue ^ isOdd( index )". + + } ); + + /** + * A Track of keyframe values that represent color. + */ + + function ColorKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + + } + + ColorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: ColorKeyframeTrack, + + ValueTypeName: 'color' + + // ValueBufferType is inherited + + // DefaultInterpolation is inherited + + // Note: Very basic implementation and nothing special yet. + // However, this is the place for color space parameterization. + + } ); + + /** + * A Track of numeric keyframe values. + */ + + function NumberKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + + } + + NumberKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: NumberKeyframeTrack, + + ValueTypeName: 'number' + + // ValueBufferType is inherited + + // DefaultInterpolation is inherited + + } ); + + /** + * Spherical linear unit quaternion interpolant. + */ + + function QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + + } + + QuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: QuaternionLinearInterpolant, + + interpolate_: function ( i1, t0, t, t1 ) { + + const result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + alpha = ( t - t0 ) / ( t1 - t0 ); + + let offset = i1 * stride; + + for ( let end = offset + stride; offset !== end; offset += 4 ) { + + Quaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha ); + + } + + return result; + + } + + } ); + + /** + * A Track of quaternion keyframe values. + */ + + function QuaternionKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + + } + + QuaternionKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: QuaternionKeyframeTrack, + + ValueTypeName: 'quaternion', + + // ValueBufferType is inherited + + DefaultInterpolation: InterpolateLinear, + + InterpolantFactoryMethodLinear: function ( result ) { + + return new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result ); + + }, + + InterpolantFactoryMethodSmooth: undefined // not yet implemented + + } ); + + /** + * A Track that interpolates Strings + */ + + function StringKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + + } + + StringKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: StringKeyframeTrack, + + ValueTypeName: 'string', + ValueBufferType: Array, + + DefaultInterpolation: InterpolateDiscrete, + + InterpolantFactoryMethodLinear: undefined, + + InterpolantFactoryMethodSmooth: undefined + + } ); + + /** + * A Track of vectored keyframe values. + */ + + function VectorKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrack.call( this, name, times, values, interpolation ); + + } + + VectorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { + + constructor: VectorKeyframeTrack, + + ValueTypeName: 'vector' + + // ValueBufferType is inherited + + // DefaultInterpolation is inherited + + } ); + + function AnimationClip( name, duration, tracks, blendMode ) { + + this.name = name; + this.tracks = tracks; + this.duration = ( duration !== undefined ) ? duration : - 1; + this.blendMode = ( blendMode !== undefined ) ? blendMode : NormalAnimationBlendMode; + + this.uuid = MathUtils.generateUUID(); + + // this means it should figure out its duration by scanning the tracks + if ( this.duration < 0 ) { + + this.resetDuration(); + + } + + } + + function getTrackTypeForValueTypeName( typeName ) { + + switch ( typeName.toLowerCase() ) { + + case 'scalar': + case 'double': + case 'float': + case 'number': + case 'integer': + + return NumberKeyframeTrack; + + case 'vector': + case 'vector2': + case 'vector3': + case 'vector4': + + return VectorKeyframeTrack; + + case 'color': + + return ColorKeyframeTrack; + + case 'quaternion': + + return QuaternionKeyframeTrack; + + case 'bool': + case 'boolean': + + return BooleanKeyframeTrack; + + case 'string': + + return StringKeyframeTrack; + + } + + throw new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName ); + + } + + function parseKeyframeTrack( json ) { + + if ( json.type === undefined ) { + + throw new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' ); + + } + + const trackType = getTrackTypeForValueTypeName( json.type ); + + if ( json.times === undefined ) { + + const times = [], values = []; + + AnimationUtils.flattenJSON( json.keys, times, values, 'value' ); + + json.times = times; + json.values = values; + + } + + // derived classes can define a static parse method + if ( trackType.parse !== undefined ) { + + return trackType.parse( json ); + + } else { + + // by default, we assume a constructor compatible with the base + return new trackType( json.name, json.times, json.values, json.interpolation ); + + } + + } + + Object.assign( AnimationClip, { + + parse: function ( json ) { + + const tracks = [], + jsonTracks = json.tracks, + frameTime = 1.0 / ( json.fps || 1.0 ); + + for ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) { + + tracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) ); + + } + + const clip = new AnimationClip( json.name, json.duration, tracks, json.blendMode ); + clip.uuid = json.uuid; + + return clip; + + }, + + toJSON: function ( clip ) { + + const tracks = [], + clipTracks = clip.tracks; + + const json = { + + 'name': clip.name, + 'duration': clip.duration, + 'tracks': tracks, + 'uuid': clip.uuid, + 'blendMode': clip.blendMode + + }; + + for ( let i = 0, n = clipTracks.length; i !== n; ++ i ) { + + tracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) ); + + } + + return json; + + }, + + CreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) { + + const numMorphTargets = morphTargetSequence.length; + const tracks = []; + + for ( let i = 0; i < numMorphTargets; i ++ ) { + + let times = []; + let values = []; + + times.push( + ( i + numMorphTargets - 1 ) % numMorphTargets, + i, + ( i + 1 ) % numMorphTargets ); + + values.push( 0, 1, 0 ); + + const order = AnimationUtils.getKeyframeOrder( times ); + times = AnimationUtils.sortedArray( times, 1, order ); + values = AnimationUtils.sortedArray( values, 1, order ); + + // if there is a key at the first frame, duplicate it as the + // last frame as well for perfect loop. + if ( ! noLoop && times[ 0 ] === 0 ) { + + times.push( numMorphTargets ); + values.push( values[ 0 ] ); + + } + + tracks.push( + new NumberKeyframeTrack( + '.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']', + times, values + ).scale( 1.0 / fps ) ); + + } + + return new AnimationClip( name, - 1, tracks ); + + }, + + findByName: function ( objectOrClipArray, name ) { + + let clipArray = objectOrClipArray; + + if ( ! Array.isArray( objectOrClipArray ) ) { + + const o = objectOrClipArray; + clipArray = o.geometry && o.geometry.animations || o.animations; + + } + + for ( let i = 0; i < clipArray.length; i ++ ) { + + if ( clipArray[ i ].name === name ) { + + return clipArray[ i ]; + + } + + } + + return null; + + }, + + CreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) { + + const animationToMorphTargets = {}; + + // tested with https://regex101.com/ on trick sequences + // such flamingo_flyA_003, flamingo_run1_003, crdeath0059 + const pattern = /^([\w-]*?)([\d]+)$/; + + // sort morph target names into animation groups based + // patterns like Walk_001, Walk_002, Run_001, Run_002 + for ( let i = 0, il = morphTargets.length; i < il; i ++ ) { + + const morphTarget = morphTargets[ i ]; + const parts = morphTarget.name.match( pattern ); + + if ( parts && parts.length > 1 ) { + + const name = parts[ 1 ]; + + let animationMorphTargets = animationToMorphTargets[ name ]; + + if ( ! animationMorphTargets ) { + + animationToMorphTargets[ name ] = animationMorphTargets = []; + + } + + animationMorphTargets.push( morphTarget ); + + } + + } + + const clips = []; + + for ( const name in animationToMorphTargets ) { + + clips.push( AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) ); + + } + + return clips; + + }, + + // parse the animation.hierarchy format + parseAnimation: function ( animation, bones ) { + + if ( ! animation ) { + + console.error( 'THREE.AnimationClip: No animation in JSONLoader data.' ); + return null; + + } + + const addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) { + + // only return track if there are actually keys. + if ( animationKeys.length !== 0 ) { + + const times = []; + const values = []; + + AnimationUtils.flattenJSON( animationKeys, times, values, propertyName ); + + // empty keys are filtered out, so check again + if ( times.length !== 0 ) { + + destTracks.push( new trackType( trackName, times, values ) ); + + } + + } + + }; + + const tracks = []; + + const clipName = animation.name || 'default'; + const fps = animation.fps || 30; + const blendMode = animation.blendMode; + + // automatic length determination in AnimationClip. + let duration = animation.length || - 1; + + const hierarchyTracks = animation.hierarchy || []; + + for ( let h = 0; h < hierarchyTracks.length; h ++ ) { + + const animationKeys = hierarchyTracks[ h ].keys; + + // skip empty tracks + if ( ! animationKeys || animationKeys.length === 0 ) continue; + + // process morph targets + if ( animationKeys[ 0 ].morphTargets ) { + + // figure out all morph targets used in this track + const morphTargetNames = {}; + + let k; + + for ( k = 0; k < animationKeys.length; k ++ ) { + + if ( animationKeys[ k ].morphTargets ) { + + for ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) { + + morphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1; + + } + + } + + } + + // create a track for each morph target with all zero + // morphTargetInfluences except for the keys in which + // the morphTarget is named. + for ( const morphTargetName in morphTargetNames ) { + + const times = []; + const values = []; + + for ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) { + + const animationKey = animationKeys[ k ]; + + times.push( animationKey.time ); + values.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 ); + + } + + tracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) ); + + } + + duration = morphTargetNames.length * ( fps || 1.0 ); + + } else { + + // ...assume skeletal animation + + const boneName = '.bones[' + bones[ h ].name + ']'; + + addNonemptyTrack( + VectorKeyframeTrack, boneName + '.position', + animationKeys, 'pos', tracks ); + + addNonemptyTrack( + QuaternionKeyframeTrack, boneName + '.quaternion', + animationKeys, 'rot', tracks ); + + addNonemptyTrack( + VectorKeyframeTrack, boneName + '.scale', + animationKeys, 'scl', tracks ); + + } + + } + + if ( tracks.length === 0 ) { + + return null; + + } + + const clip = new AnimationClip( clipName, duration, tracks, blendMode ); + + return clip; + + } + + } ); + + Object.assign( AnimationClip.prototype, { + + resetDuration: function () { + + const tracks = this.tracks; + let duration = 0; + + for ( let i = 0, n = tracks.length; i !== n; ++ i ) { + + const track = this.tracks[ i ]; + + duration = Math.max( duration, track.times[ track.times.length - 1 ] ); + + } + + this.duration = duration; + + return this; + + }, + + trim: function () { + + for ( let i = 0; i < this.tracks.length; i ++ ) { + + this.tracks[ i ].trim( 0, this.duration ); + + } + + return this; + + }, + + validate: function () { + + let valid = true; + + for ( let i = 0; i < this.tracks.length; i ++ ) { + + valid = valid && this.tracks[ i ].validate(); + + } + + return valid; + + }, + + optimize: function () { + + for ( let i = 0; i < this.tracks.length; i ++ ) { + + this.tracks[ i ].optimize(); + + } + + return this; + + }, + + clone: function () { + + const tracks = []; + + for ( let i = 0; i < this.tracks.length; i ++ ) { + + tracks.push( this.tracks[ i ].clone() ); + + } + + return new AnimationClip( this.name, this.duration, tracks, this.blendMode ); + + }, + + toJSON: function () { + + return AnimationClip.toJSON( this ); + + } + + } ); + + const Cache = { + + enabled: false, + + files: {}, + + add: function ( key, file ) { + + if ( this.enabled === false ) return; + + // console.log( 'THREE.Cache', 'Adding key:', key ); + + this.files[ key ] = file; + + }, + + get: function ( key ) { + + if ( this.enabled === false ) return; + + // console.log( 'THREE.Cache', 'Checking key:', key ); + + return this.files[ key ]; + + }, + + remove: function ( key ) { + + delete this.files[ key ]; + + }, + + clear: function () { + + this.files = {}; + + } + + }; + + function LoadingManager( onLoad, onProgress, onError ) { + + const scope = this; + + let isLoading = false; + let itemsLoaded = 0; + let itemsTotal = 0; + let urlModifier = undefined; + const handlers = []; + + // Refer to #5689 for the reason why we don't set .onStart + // in the constructor + + this.onStart = undefined; + this.onLoad = onLoad; + this.onProgress = onProgress; + this.onError = onError; + + this.itemStart = function ( url ) { + + itemsTotal ++; + + if ( isLoading === false ) { + + if ( scope.onStart !== undefined ) { + + scope.onStart( url, itemsLoaded, itemsTotal ); + + } + + } + + isLoading = true; + + }; + + this.itemEnd = function ( url ) { + + itemsLoaded ++; + + if ( scope.onProgress !== undefined ) { + + scope.onProgress( url, itemsLoaded, itemsTotal ); + + } + + if ( itemsLoaded === itemsTotal ) { + + isLoading = false; + + if ( scope.onLoad !== undefined ) { + + scope.onLoad(); + + } + + } + + }; + + this.itemError = function ( url ) { + + if ( scope.onError !== undefined ) { + + scope.onError( url ); + + } + + }; + + this.resolveURL = function ( url ) { + + if ( urlModifier ) { + + return urlModifier( url ); + + } + + return url; + + }; + + this.setURLModifier = function ( transform ) { + + urlModifier = transform; + + return this; + + }; + + this.addHandler = function ( regex, loader ) { + + handlers.push( regex, loader ); + + return this; + + }; + + this.removeHandler = function ( regex ) { + + const index = handlers.indexOf( regex ); + + if ( index !== - 1 ) { + + handlers.splice( index, 2 ); + + } + + return this; + + }; + + this.getHandler = function ( file ) { + + for ( let i = 0, l = handlers.length; i < l; i += 2 ) { + + const regex = handlers[ i ]; + const loader = handlers[ i + 1 ]; + + if ( regex.global ) regex.lastIndex = 0; // see #17920 + + if ( regex.test( file ) ) { + + return loader; + + } + + } + + return null; + + }; + + } + + const DefaultLoadingManager = new LoadingManager(); + + function Loader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + + this.crossOrigin = 'anonymous'; + this.withCredentials = false; + this.path = ''; + this.resourcePath = ''; + this.requestHeader = {}; + + } + + Object.assign( Loader.prototype, { + + load: function ( /* url, onLoad, onProgress, onError */ ) {}, + + loadAsync: function ( url, onProgress ) { + + const scope = this; + + return new Promise( function ( resolve, reject ) { + + scope.load( url, resolve, onProgress, reject ); + + } ); + + }, + + parse: function ( /* data */ ) {}, + + setCrossOrigin: function ( crossOrigin ) { + + this.crossOrigin = crossOrigin; + return this; + + }, + + setWithCredentials: function ( value ) { + + this.withCredentials = value; + return this; + + }, + + setPath: function ( path ) { + + this.path = path; + return this; + + }, + + setResourcePath: function ( resourcePath ) { + + this.resourcePath = resourcePath; + return this; + + }, + + setRequestHeader: function ( requestHeader ) { + + this.requestHeader = requestHeader; + return this; + + } + + } ); + + const loading = {}; + + function FileLoader( manager ) { + + Loader.call( this, manager ); + + } + + FileLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: FileLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + if ( url === undefined ) url = ''; + + if ( this.path !== undefined ) url = this.path + url; + + url = this.manager.resolveURL( url ); + + const scope = this; + + const cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) onLoad( cached ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + // Check if request is duplicate + + if ( loading[ url ] !== undefined ) { + + loading[ url ].push( { + + onLoad: onLoad, + onProgress: onProgress, + onError: onError + + } ); + + return; + + } + + // Check for data: URI + const dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/; + const dataUriRegexResult = url.match( dataUriRegex ); + let request; + + // Safari can not handle Data URIs through XMLHttpRequest so process manually + if ( dataUriRegexResult ) { + + const mimeType = dataUriRegexResult[ 1 ]; + const isBase64 = !! dataUriRegexResult[ 2 ]; + + let data = dataUriRegexResult[ 3 ]; + data = decodeURIComponent( data ); + + if ( isBase64 ) data = atob( data ); + + try { + + let response; + const responseType = ( this.responseType || '' ).toLowerCase(); + + switch ( responseType ) { + + case 'arraybuffer': + case 'blob': + + const view = new Uint8Array( data.length ); + + for ( let i = 0; i < data.length; i ++ ) { + + view[ i ] = data.charCodeAt( i ); + + } + + if ( responseType === 'blob' ) { + + response = new Blob( [ view.buffer ], { type: mimeType } ); + + } else { + + response = view.buffer; + + } + + break; + + case 'document': + + const parser = new DOMParser(); + response = parser.parseFromString( data, mimeType ); + + break; + + case 'json': + + response = JSON.parse( data ); + + break; + + default: // 'text' or other + + response = data; + + break; + + } + + // Wait for next browser tick like standard XMLHttpRequest event dispatching does + setTimeout( function () { + + if ( onLoad ) onLoad( response ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + } catch ( error ) { + + // Wait for next browser tick like standard XMLHttpRequest event dispatching does + setTimeout( function () { + + if ( onError ) onError( error ); + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + }, 0 ); + + } + + } else { + + // Initialise array for duplicate requests + + loading[ url ] = []; + + loading[ url ].push( { + + onLoad: onLoad, + onProgress: onProgress, + onError: onError + + } ); + + request = new XMLHttpRequest(); + + request.open( 'GET', url, true ); + + request.addEventListener( 'load', function ( event ) { + + const response = this.response; + + const callbacks = loading[ url ]; + + delete loading[ url ]; + + if ( this.status === 200 || this.status === 0 ) { + + // Some browsers return HTTP Status 0 when using non-http protocol + // e.g. 'file://' or 'data://'. Handle as success. + + if ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' ); + + // Add to cache only on HTTP success, so that we do not cache + // error response bodies as proper responses to requests. + Cache.add( url, response ); + + for ( let i = 0, il = callbacks.length; i < il; i ++ ) { + + const callback = callbacks[ i ]; + if ( callback.onLoad ) callback.onLoad( response ); + + } + + scope.manager.itemEnd( url ); + + } else { + + for ( let i = 0, il = callbacks.length; i < il; i ++ ) { + + const callback = callbacks[ i ]; + if ( callback.onError ) callback.onError( event ); + + } + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + } + + }, false ); + + request.addEventListener( 'progress', function ( event ) { + + const callbacks = loading[ url ]; + + for ( let i = 0, il = callbacks.length; i < il; i ++ ) { + + const callback = callbacks[ i ]; + if ( callback.onProgress ) callback.onProgress( event ); + + } + + }, false ); + + request.addEventListener( 'error', function ( event ) { + + const callbacks = loading[ url ]; + + delete loading[ url ]; + + for ( let i = 0, il = callbacks.length; i < il; i ++ ) { + + const callback = callbacks[ i ]; + if ( callback.onError ) callback.onError( event ); + + } + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + }, false ); + + request.addEventListener( 'abort', function ( event ) { + + const callbacks = loading[ url ]; + + delete loading[ url ]; + + for ( let i = 0, il = callbacks.length; i < il; i ++ ) { + + const callback = callbacks[ i ]; + if ( callback.onError ) callback.onError( event ); + + } + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + }, false ); + + if ( this.responseType !== undefined ) request.responseType = this.responseType; + if ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials; + + if ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' ); + + for ( const header in this.requestHeader ) { + + request.setRequestHeader( header, this.requestHeader[ header ] ); + + } + + request.send( null ); + + } + + scope.manager.itemStart( url ); + + return request; + + }, + + setResponseType: function ( value ) { + + this.responseType = value; + return this; + + }, + + setMimeType: function ( value ) { + + this.mimeType = value; + return this; + + } + + } ); + + function AnimationLoader( manager ) { + + Loader.call( this, manager ); + + } + + AnimationLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: AnimationLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + const scope = this; + + const loader = new FileLoader( scope.manager ); + loader.setPath( scope.path ); + loader.setRequestHeader( scope.requestHeader ); + loader.setWithCredentials( scope.withCredentials ); + loader.load( url, function ( text ) { + + try { + + onLoad( scope.parse( JSON.parse( text ) ) ); + + } catch ( e ) { + + if ( onError ) { + + onError( e ); + + } else { + + console.error( e ); + + } + + scope.manager.itemError( url ); + + } + + }, onProgress, onError ); + + }, + + parse: function ( json ) { + + const animations = []; + + for ( let i = 0; i < json.length; i ++ ) { + + const clip = AnimationClip.parse( json[ i ] ); + + animations.push( clip ); + + } + + return animations; + + } + + } ); + + /** + * Abstract Base class to block based textures loader (dds, pvr, ...) + * + * Sub classes have to implement the parse() method which will be used in load(). + */ + + function CompressedTextureLoader( manager ) { + + Loader.call( this, manager ); + + } + + CompressedTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: CompressedTextureLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + const scope = this; + + const images = []; + + const texture = new CompressedTexture(); + texture.image = images; + + const loader = new FileLoader( this.manager ); + loader.setPath( this.path ); + loader.setResponseType( 'arraybuffer' ); + loader.setRequestHeader( this.requestHeader ); + loader.setWithCredentials( scope.withCredentials ); + + let loaded = 0; + + function loadTexture( i ) { + + loader.load( url[ i ], function ( buffer ) { + + const texDatas = scope.parse( buffer, true ); + + images[ i ] = { + width: texDatas.width, + height: texDatas.height, + format: texDatas.format, + mipmaps: texDatas.mipmaps + }; + + loaded += 1; + + if ( loaded === 6 ) { + + if ( texDatas.mipmapCount === 1 ) + texture.minFilter = LinearFilter; + + texture.format = texDatas.format; + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture ); + + } + + }, onProgress, onError ); + + } + + if ( Array.isArray( url ) ) { + + for ( let i = 0, il = url.length; i < il; ++ i ) { + + loadTexture( i ); + + } + + } else { + + // compressed cubemap texture stored in a single DDS file + + loader.load( url, function ( buffer ) { + + const texDatas = scope.parse( buffer, true ); + + if ( texDatas.isCubemap ) { + + const faces = texDatas.mipmaps.length / texDatas.mipmapCount; + + for ( let f = 0; f < faces; f ++ ) { + + images[ f ] = { mipmaps: [] }; + + for ( let i = 0; i < texDatas.mipmapCount; i ++ ) { + + images[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] ); + images[ f ].format = texDatas.format; + images[ f ].width = texDatas.width; + images[ f ].height = texDatas.height; + + } + + } + + } else { + + texture.image.width = texDatas.width; + texture.image.height = texDatas.height; + texture.mipmaps = texDatas.mipmaps; + + } + + if ( texDatas.mipmapCount === 1 ) { + + texture.minFilter = LinearFilter; + + } + + texture.format = texDatas.format; + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture ); + + }, onProgress, onError ); + + } + + return texture; + + } + + } ); + + function ImageLoader( manager ) { + + Loader.call( this, manager ); + + } + + ImageLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: ImageLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + if ( this.path !== undefined ) url = this.path + url; + + url = this.manager.resolveURL( url ); + + const scope = this; + + const cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) onLoad( cached ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + const image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' ); + + function onImageLoad() { + + image.removeEventListener( 'load', onImageLoad, false ); + image.removeEventListener( 'error', onImageError, false ); + + Cache.add( url, this ); + + if ( onLoad ) onLoad( this ); + + scope.manager.itemEnd( url ); + + } + + function onImageError( event ) { + + image.removeEventListener( 'load', onImageLoad, false ); + image.removeEventListener( 'error', onImageError, false ); + + if ( onError ) onError( event ); + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + } + + image.addEventListener( 'load', onImageLoad, false ); + image.addEventListener( 'error', onImageError, false ); + + if ( url.substr( 0, 5 ) !== 'data:' ) { + + if ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin; + + } + + scope.manager.itemStart( url ); + + image.src = url; + + return image; + + } + + } ); + + function CubeTextureLoader( manager ) { + + Loader.call( this, manager ); + + } + + CubeTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: CubeTextureLoader, + + load: function ( urls, onLoad, onProgress, onError ) { + + const texture = new CubeTexture(); + + const loader = new ImageLoader( this.manager ); + loader.setCrossOrigin( this.crossOrigin ); + loader.setPath( this.path ); + + let loaded = 0; + + function loadTexture( i ) { + + loader.load( urls[ i ], function ( image ) { + + texture.images[ i ] = image; + + loaded ++; + + if ( loaded === 6 ) { + + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture ); + + } + + }, undefined, onError ); + + } + + for ( let i = 0; i < urls.length; ++ i ) { + + loadTexture( i ); + + } + + return texture; + + } + + } ); + + /** + * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...) + * + * Sub classes have to implement the parse() method which will be used in load(). + */ + + function DataTextureLoader( manager ) { + + Loader.call( this, manager ); + + } + + DataTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: DataTextureLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + const scope = this; + + const texture = new DataTexture(); + + const loader = new FileLoader( this.manager ); + loader.setResponseType( 'arraybuffer' ); + loader.setRequestHeader( this.requestHeader ); + loader.setPath( this.path ); + loader.setWithCredentials( scope.withCredentials ); + loader.load( url, function ( buffer ) { + + const texData = scope.parse( buffer ); + + if ( ! texData ) return; + + if ( texData.image !== undefined ) { + + texture.image = texData.image; + + } else if ( texData.data !== undefined ) { + + texture.image.width = texData.width; + texture.image.height = texData.height; + texture.image.data = texData.data; + + } + + texture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping; + texture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping; + + texture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter; + texture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter; + + texture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1; + + if ( texData.format !== undefined ) { + + texture.format = texData.format; + + } + + if ( texData.type !== undefined ) { + + texture.type = texData.type; + + } + + if ( texData.mipmaps !== undefined ) { + + texture.mipmaps = texData.mipmaps; + texture.minFilter = LinearMipmapLinearFilter; // presumably... + + } + + if ( texData.mipmapCount === 1 ) { + + texture.minFilter = LinearFilter; + + } + + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture, texData ); + + }, onProgress, onError ); + + + return texture; + + } + + } ); + + function TextureLoader( manager ) { + + Loader.call( this, manager ); + + } + + TextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: TextureLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + const texture = new Texture(); + + const loader = new ImageLoader( this.manager ); + loader.setCrossOrigin( this.crossOrigin ); + loader.setPath( this.path ); + + loader.load( url, function ( image ) { + + texture.image = image; + + // JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB. + const isJPEG = url.search( /\.jpe?g($|\?)/i ) > 0 || url.search( /^data\:image\/jpeg/ ) === 0; + + texture.format = isJPEG ? RGBFormat : RGBAFormat; + texture.needsUpdate = true; + + if ( onLoad !== undefined ) { + + onLoad( texture ); + + } + + }, onProgress, onError ); + + return texture; + + } + + } ); + + /** + * Extensible curve object. + * + * Some common of curve methods: + * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget ) + * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget ) + * .getPoints(), .getSpacedPoints() + * .getLength() + * .updateArcLengths() + * + * This following curves inherit from THREE.Curve: + * + * -- 2D curves -- + * THREE.ArcCurve + * THREE.CubicBezierCurve + * THREE.EllipseCurve + * THREE.LineCurve + * THREE.QuadraticBezierCurve + * THREE.SplineCurve + * + * -- 3D curves -- + * THREE.CatmullRomCurve3 + * THREE.CubicBezierCurve3 + * THREE.LineCurve3 + * THREE.QuadraticBezierCurve3 + * + * A series of curves can be represented as a THREE.CurvePath. + * + **/ + + function Curve() { + + this.type = 'Curve'; + + this.arcLengthDivisions = 200; + + } + + Object.assign( Curve.prototype, { + + // Virtual base class method to overwrite and implement in subclasses + // - t [0 .. 1] + + getPoint: function ( /* t, optionalTarget */ ) { + + console.warn( 'THREE.Curve: .getPoint() not implemented.' ); + return null; + + }, + + // Get point at relative position in curve according to arc length + // - u [0 .. 1] + + getPointAt: function ( u, optionalTarget ) { + + const t = this.getUtoTmapping( u ); + return this.getPoint( t, optionalTarget ); + + }, + + // Get sequence of points using getPoint( t ) + + getPoints: function ( divisions = 5 ) { + + const points = []; + + for ( let d = 0; d <= divisions; d ++ ) { + + points.push( this.getPoint( d / divisions ) ); + + } + + return points; + + }, + + // Get sequence of points using getPointAt( u ) + + getSpacedPoints: function ( divisions = 5 ) { + + const points = []; + + for ( let d = 0; d <= divisions; d ++ ) { + + points.push( this.getPointAt( d / divisions ) ); + + } + + return points; + + }, + + // Get total curve arc length + + getLength: function () { + + const lengths = this.getLengths(); + return lengths[ lengths.length - 1 ]; + + }, + + // Get list of cumulative segment lengths + + getLengths: function ( divisions ) { + + if ( divisions === undefined ) divisions = this.arcLengthDivisions; + + if ( this.cacheArcLengths && + ( this.cacheArcLengths.length === divisions + 1 ) && + ! this.needsUpdate ) { + + return this.cacheArcLengths; + + } + + this.needsUpdate = false; + + const cache = []; + let current, last = this.getPoint( 0 ); + let sum = 0; + + cache.push( 0 ); + + for ( let p = 1; p <= divisions; p ++ ) { + + current = this.getPoint( p / divisions ); + sum += current.distanceTo( last ); + cache.push( sum ); + last = current; + + } + + this.cacheArcLengths = cache; + + return cache; // { sums: cache, sum: sum }; Sum is in the last element. + + }, + + updateArcLengths: function () { + + this.needsUpdate = true; + this.getLengths(); + + }, + + // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant + + getUtoTmapping: function ( u, distance ) { + + const arcLengths = this.getLengths(); + + let i = 0; + const il = arcLengths.length; + + let targetArcLength; // The targeted u distance value to get + + if ( distance ) { + + targetArcLength = distance; + + } else { + + targetArcLength = u * arcLengths[ il - 1 ]; + + } + + // binary search for the index with largest value smaller than target u distance + + let low = 0, high = il - 1, comparison; + + while ( low <= high ) { + + i = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats + + comparison = arcLengths[ i ] - targetArcLength; + + if ( comparison < 0 ) { + + low = i + 1; + + } else if ( comparison > 0 ) { + + high = i - 1; + + } else { + + high = i; + break; + + // DONE + + } + + } + + i = high; + + if ( arcLengths[ i ] === targetArcLength ) { + + return i / ( il - 1 ); + + } + + // we could get finer grain at lengths, or use simple interpolation between two points + + const lengthBefore = arcLengths[ i ]; + const lengthAfter = arcLengths[ i + 1 ]; + + const segmentLength = lengthAfter - lengthBefore; + + // determine where we are between the 'before' and 'after' points + + const segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength; + + // add that fractional amount to t + + const t = ( i + segmentFraction ) / ( il - 1 ); + + return t; + + }, + + // Returns a unit vector tangent at t + // In case any sub curve does not implement its tangent derivation, + // 2 points a small delta apart will be used to find its gradient + // which seems to give a reasonable approximation + + getTangent: function ( t, optionalTarget ) { + + const delta = 0.0001; + let t1 = t - delta; + let t2 = t + delta; + + // Capping in case of danger + + if ( t1 < 0 ) t1 = 0; + if ( t2 > 1 ) t2 = 1; + + const pt1 = this.getPoint( t1 ); + const pt2 = this.getPoint( t2 ); + + const tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() ); + + tangent.copy( pt2 ).sub( pt1 ).normalize(); + + return tangent; + + }, + + getTangentAt: function ( u, optionalTarget ) { + + const t = this.getUtoTmapping( u ); + return this.getTangent( t, optionalTarget ); + + }, + + computeFrenetFrames: function ( segments, closed ) { + + // see http://www.cs.indiana.edu/pub/techreports/TR425.pdf + + const normal = new Vector3(); + + const tangents = []; + const normals = []; + const binormals = []; + + const vec = new Vector3(); + const mat = new Matrix4(); + + // compute the tangent vectors for each segment on the curve + + for ( let i = 0; i <= segments; i ++ ) { + + const u = i / segments; + + tangents[ i ] = this.getTangentAt( u, new Vector3() ); + tangents[ i ].normalize(); + + } + + // select an initial normal vector perpendicular to the first tangent vector, + // and in the direction of the minimum tangent xyz component + + normals[ 0 ] = new Vector3(); + binormals[ 0 ] = new Vector3(); + let min = Number.MAX_VALUE; + const tx = Math.abs( tangents[ 0 ].x ); + const ty = Math.abs( tangents[ 0 ].y ); + const tz = Math.abs( tangents[ 0 ].z ); + + if ( tx <= min ) { + + min = tx; + normal.set( 1, 0, 0 ); + + } + + if ( ty <= min ) { + + min = ty; + normal.set( 0, 1, 0 ); + + } + + if ( tz <= min ) { + + normal.set( 0, 0, 1 ); + + } + + vec.crossVectors( tangents[ 0 ], normal ).normalize(); + + normals[ 0 ].crossVectors( tangents[ 0 ], vec ); + binormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] ); + + + // compute the slowly-varying normal and binormal vectors for each segment on the curve + + for ( let i = 1; i <= segments; i ++ ) { + + normals[ i ] = normals[ i - 1 ].clone(); + + binormals[ i ] = binormals[ i - 1 ].clone(); + + vec.crossVectors( tangents[ i - 1 ], tangents[ i ] ); + + if ( vec.length() > Number.EPSILON ) { + + vec.normalize(); + + const theta = Math.acos( MathUtils.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors + + normals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) ); + + } + + binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); + + } + + // if the curve is closed, postprocess the vectors so the first and last normal vectors are the same + + if ( closed === true ) { + + let theta = Math.acos( MathUtils.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) ); + theta /= segments; + + if ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) { + + theta = - theta; + + } + + for ( let i = 1; i <= segments; i ++ ) { + + // twist a little... + normals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) ); + binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); + + } + + } + + return { + tangents: tangents, + normals: normals, + binormals: binormals + }; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.arcLengthDivisions = source.arcLengthDivisions; + + return this; + + }, + + toJSON: function () { + + const data = { + metadata: { + version: 4.5, + type: 'Curve', + generator: 'Curve.toJSON' + } + }; + + data.arcLengthDivisions = this.arcLengthDivisions; + data.type = this.type; + + return data; + + }, + + fromJSON: function ( json ) { + + this.arcLengthDivisions = json.arcLengthDivisions; + + return this; + + } + + } ); + + function EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + Curve.call( this ); + + this.type = 'EllipseCurve'; + + this.aX = aX || 0; + this.aY = aY || 0; + + this.xRadius = xRadius || 1; + this.yRadius = yRadius || 1; + + this.aStartAngle = aStartAngle || 0; + this.aEndAngle = aEndAngle || 2 * Math.PI; + + this.aClockwise = aClockwise || false; + + this.aRotation = aRotation || 0; + + } + + EllipseCurve.prototype = Object.create( Curve.prototype ); + EllipseCurve.prototype.constructor = EllipseCurve; + + EllipseCurve.prototype.isEllipseCurve = true; + + EllipseCurve.prototype.getPoint = function ( t, optionalTarget ) { + + const point = optionalTarget || new Vector2(); + + const twoPi = Math.PI * 2; + let deltaAngle = this.aEndAngle - this.aStartAngle; + const samePoints = Math.abs( deltaAngle ) < Number.EPSILON; + + // ensures that deltaAngle is 0 .. 2 PI + while ( deltaAngle < 0 ) deltaAngle += twoPi; + while ( deltaAngle > twoPi ) deltaAngle -= twoPi; + + if ( deltaAngle < Number.EPSILON ) { + + if ( samePoints ) { + + deltaAngle = 0; + + } else { + + deltaAngle = twoPi; + + } + + } + + if ( this.aClockwise === true && ! samePoints ) { + + if ( deltaAngle === twoPi ) { + + deltaAngle = - twoPi; + + } else { + + deltaAngle = deltaAngle - twoPi; + + } + + } + + const angle = this.aStartAngle + t * deltaAngle; + let x = this.aX + this.xRadius * Math.cos( angle ); + let y = this.aY + this.yRadius * Math.sin( angle ); + + if ( this.aRotation !== 0 ) { + + const cos = Math.cos( this.aRotation ); + const sin = Math.sin( this.aRotation ); + + const tx = x - this.aX; + const ty = y - this.aY; + + // Rotate the point about the center of the ellipse. + x = tx * cos - ty * sin + this.aX; + y = tx * sin + ty * cos + this.aY; + + } + + return point.set( x, y ); + + }; + + EllipseCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.aX = source.aX; + this.aY = source.aY; + + this.xRadius = source.xRadius; + this.yRadius = source.yRadius; + + this.aStartAngle = source.aStartAngle; + this.aEndAngle = source.aEndAngle; + + this.aClockwise = source.aClockwise; + + this.aRotation = source.aRotation; + + return this; + + }; + + + EllipseCurve.prototype.toJSON = function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.aX = this.aX; + data.aY = this.aY; + + data.xRadius = this.xRadius; + data.yRadius = this.yRadius; + + data.aStartAngle = this.aStartAngle; + data.aEndAngle = this.aEndAngle; + + data.aClockwise = this.aClockwise; + + data.aRotation = this.aRotation; + + return data; + + }; + + EllipseCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.aX = json.aX; + this.aY = json.aY; + + this.xRadius = json.xRadius; + this.yRadius = json.yRadius; + + this.aStartAngle = json.aStartAngle; + this.aEndAngle = json.aEndAngle; + + this.aClockwise = json.aClockwise; + + this.aRotation = json.aRotation; + + return this; + + }; + + function ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + EllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); + + this.type = 'ArcCurve'; + + } + + ArcCurve.prototype = Object.create( EllipseCurve.prototype ); + ArcCurve.prototype.constructor = ArcCurve; + + ArcCurve.prototype.isArcCurve = true; + + /** + * Centripetal CatmullRom Curve - which is useful for avoiding + * cusps and self-intersections in non-uniform catmull rom curves. + * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf + * + * curve.type accepts centripetal(default), chordal and catmullrom + * curve.tension is used for catmullrom which defaults to 0.5 + */ + + + /* + Based on an optimized c++ solution in + - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/ + - http://ideone.com/NoEbVM + + This CubicPoly class could be used for reusing some variables and calculations, + but for three.js curve use, it could be possible inlined and flatten into a single function call + which can be placed in CurveUtils. + */ + + function CubicPoly() { + + let c0 = 0, c1 = 0, c2 = 0, c3 = 0; + + /* + * Compute coefficients for a cubic polynomial + * p(s) = c0 + c1*s + c2*s^2 + c3*s^3 + * such that + * p(0) = x0, p(1) = x1 + * and + * p'(0) = t0, p'(1) = t1. + */ + function init( x0, x1, t0, t1 ) { + + c0 = x0; + c1 = t0; + c2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1; + c3 = 2 * x0 - 2 * x1 + t0 + t1; + + } + + return { + + initCatmullRom: function ( x0, x1, x2, x3, tension ) { + + init( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) ); + + }, + + initNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) { + + // compute tangents when parameterized in [t1,t2] + let t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1; + let t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2; + + // rescale tangents for parametrization in [0,1] + t1 *= dt1; + t2 *= dt1; + + init( x1, x2, t1, t2 ); + + }, + + calc: function ( t ) { + + const t2 = t * t; + const t3 = t2 * t; + return c0 + c1 * t + c2 * t2 + c3 * t3; + + } + + }; + + } + + // + + const tmp = new Vector3(); + const px = new CubicPoly(), py = new CubicPoly(), pz = new CubicPoly(); + + function CatmullRomCurve3( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) { + + Curve.call( this ); + + this.type = 'CatmullRomCurve3'; + + this.points = points; + this.closed = closed; + this.curveType = curveType; + this.tension = tension; + + } + + CatmullRomCurve3.prototype = Object.create( Curve.prototype ); + CatmullRomCurve3.prototype.constructor = CatmullRomCurve3; + + CatmullRomCurve3.prototype.isCatmullRomCurve3 = true; + + CatmullRomCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) { + + const point = optionalTarget; + + const points = this.points; + const l = points.length; + + const p = ( l - ( this.closed ? 0 : 1 ) ) * t; + let intPoint = Math.floor( p ); + let weight = p - intPoint; + + if ( this.closed ) { + + intPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l; + + } else if ( weight === 0 && intPoint === l - 1 ) { + + intPoint = l - 2; + weight = 1; + + } + + let p0, p3; // 4 points (p1 & p2 defined below) + + if ( this.closed || intPoint > 0 ) { + + p0 = points[ ( intPoint - 1 ) % l ]; + + } else { + + // extrapolate first point + tmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] ); + p0 = tmp; + + } + + const p1 = points[ intPoint % l ]; + const p2 = points[ ( intPoint + 1 ) % l ]; + + if ( this.closed || intPoint + 2 < l ) { + + p3 = points[ ( intPoint + 2 ) % l ]; + + } else { + + // extrapolate last point + tmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] ); + p3 = tmp; + + } + + if ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) { + + // init Centripetal / Chordal Catmull-Rom + const pow = this.curveType === 'chordal' ? 0.5 : 0.25; + let dt0 = Math.pow( p0.distanceToSquared( p1 ), pow ); + let dt1 = Math.pow( p1.distanceToSquared( p2 ), pow ); + let dt2 = Math.pow( p2.distanceToSquared( p3 ), pow ); + + // safety check for repeated points + if ( dt1 < 1e-4 ) dt1 = 1.0; + if ( dt0 < 1e-4 ) dt0 = dt1; + if ( dt2 < 1e-4 ) dt2 = dt1; + + px.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 ); + py.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 ); + pz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 ); + + } else if ( this.curveType === 'catmullrom' ) { + + px.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension ); + py.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension ); + pz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension ); + + } + + point.set( + px.calc( weight ), + py.calc( weight ), + pz.calc( weight ) + ); + + return point; + + }; + + CatmullRomCurve3.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.points = []; + + for ( let i = 0, l = source.points.length; i < l; i ++ ) { + + const point = source.points[ i ]; + + this.points.push( point.clone() ); + + } + + this.closed = source.closed; + this.curveType = source.curveType; + this.tension = source.tension; + + return this; + + }; + + CatmullRomCurve3.prototype.toJSON = function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.points = []; + + for ( let i = 0, l = this.points.length; i < l; i ++ ) { + + const point = this.points[ i ]; + data.points.push( point.toArray() ); + + } + + data.closed = this.closed; + data.curveType = this.curveType; + data.tension = this.tension; + + return data; + + }; + + CatmullRomCurve3.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.points = []; + + for ( let i = 0, l = json.points.length; i < l; i ++ ) { + + const point = json.points[ i ]; + this.points.push( new Vector3().fromArray( point ) ); + + } + + this.closed = json.closed; + this.curveType = json.curveType; + this.tension = json.tension; + + return this; + + }; + + /** + * Bezier Curves formulas obtained from + * http://en.wikipedia.org/wiki/Bézier_curve + */ + + function CatmullRom( t, p0, p1, p2, p3 ) { + + const v0 = ( p2 - p0 ) * 0.5; + const v1 = ( p3 - p1 ) * 0.5; + const t2 = t * t; + const t3 = t * t2; + return ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1; + + } + + // + + function QuadraticBezierP0( t, p ) { + + const k = 1 - t; + return k * k * p; + + } + + function QuadraticBezierP1( t, p ) { + + return 2 * ( 1 - t ) * t * p; + + } + + function QuadraticBezierP2( t, p ) { + + return t * t * p; + + } + + function QuadraticBezier( t, p0, p1, p2 ) { + + return QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) + + QuadraticBezierP2( t, p2 ); + + } + + // + + function CubicBezierP0( t, p ) { + + const k = 1 - t; + return k * k * k * p; + + } + + function CubicBezierP1( t, p ) { + + const k = 1 - t; + return 3 * k * k * t * p; + + } + + function CubicBezierP2( t, p ) { + + return 3 * ( 1 - t ) * t * t * p; + + } + + function CubicBezierP3( t, p ) { + + return t * t * t * p; + + } + + function CubicBezier( t, p0, p1, p2, p3 ) { + + return CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) + + CubicBezierP3( t, p3 ); + + } + + function CubicBezierCurve( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) { + + Curve.call( this ); + + this.type = 'CubicBezierCurve'; + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + this.v3 = v3; + + } + + CubicBezierCurve.prototype = Object.create( Curve.prototype ); + CubicBezierCurve.prototype.constructor = CubicBezierCurve; + + CubicBezierCurve.prototype.isCubicBezierCurve = true; + + CubicBezierCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) { + + const point = optionalTarget; + + const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; + + point.set( + CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), + CubicBezier( t, v0.y, v1.y, v2.y, v3.y ) + ); + + return point; + + }; + + CubicBezierCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + this.v3.copy( source.v3 ); + + return this; + + }; + + CubicBezierCurve.prototype.toJSON = function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + data.v3 = this.v3.toArray(); + + return data; + + }; + + CubicBezierCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + this.v3.fromArray( json.v3 ); + + return this; + + }; + + function CubicBezierCurve3( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) { + + Curve.call( this ); + + this.type = 'CubicBezierCurve3'; + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + this.v3 = v3; + + } + + CubicBezierCurve3.prototype = Object.create( Curve.prototype ); + CubicBezierCurve3.prototype.constructor = CubicBezierCurve3; + + CubicBezierCurve3.prototype.isCubicBezierCurve3 = true; + + CubicBezierCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) { + + const point = optionalTarget; + + const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; + + point.set( + CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), + CubicBezier( t, v0.y, v1.y, v2.y, v3.y ), + CubicBezier( t, v0.z, v1.z, v2.z, v3.z ) + ); + + return point; + + }; + + CubicBezierCurve3.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + this.v3.copy( source.v3 ); + + return this; + + }; + + CubicBezierCurve3.prototype.toJSON = function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + data.v3 = this.v3.toArray(); + + return data; + + }; + + CubicBezierCurve3.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + this.v3.fromArray( json.v3 ); + + return this; + + }; + + function LineCurve( v1 = new Vector2(), v2 = new Vector2() ) { + + Curve.call( this ); + + this.type = 'LineCurve'; + + this.v1 = v1; + this.v2 = v2; + + } + + LineCurve.prototype = Object.create( Curve.prototype ); + LineCurve.prototype.constructor = LineCurve; + + LineCurve.prototype.isLineCurve = true; + + LineCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) { + + const point = optionalTarget; + + if ( t === 1 ) { + + point.copy( this.v2 ); + + } else { + + point.copy( this.v2 ).sub( this.v1 ); + point.multiplyScalar( t ).add( this.v1 ); + + } + + return point; + + }; + + // Line curve is linear, so we can overwrite default getPointAt + + LineCurve.prototype.getPointAt = function ( u, optionalTarget ) { + + return this.getPoint( u, optionalTarget ); + + }; + + LineCurve.prototype.getTangent = function ( t, optionalTarget ) { + + const tangent = optionalTarget || new Vector2(); + + tangent.copy( this.v2 ).sub( this.v1 ).normalize(); + + return tangent; + + }; + + LineCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + + }; + + LineCurve.prototype.toJSON = function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + + }; + + LineCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + + }; + + function LineCurve3( v1 = new Vector3(), v2 = new Vector3() ) { + + Curve.call( this ); + + this.type = 'LineCurve3'; + + this.v1 = v1; + this.v2 = v2; + + } + + LineCurve3.prototype = Object.create( Curve.prototype ); + LineCurve3.prototype.constructor = LineCurve3; + + LineCurve3.prototype.isLineCurve3 = true; + + LineCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) { + + const point = optionalTarget; + + if ( t === 1 ) { + + point.copy( this.v2 ); + + } else { + + point.copy( this.v2 ).sub( this.v1 ); + point.multiplyScalar( t ).add( this.v1 ); + + } + + return point; + + }; + + // Line curve is linear, so we can overwrite default getPointAt + + LineCurve3.prototype.getPointAt = function ( u, optionalTarget ) { + + return this.getPoint( u, optionalTarget ); + + }; + + LineCurve3.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + + }; + + LineCurve3.prototype.toJSON = function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + + }; + + LineCurve3.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + + }; + + function QuadraticBezierCurve( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) { + + Curve.call( this ); + + this.type = 'QuadraticBezierCurve'; + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + + } + + QuadraticBezierCurve.prototype = Object.create( Curve.prototype ); + QuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve; + + QuadraticBezierCurve.prototype.isQuadraticBezierCurve = true; + + QuadraticBezierCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) { + + const point = optionalTarget; + + const v0 = this.v0, v1 = this.v1, v2 = this.v2; + + point.set( + QuadraticBezier( t, v0.x, v1.x, v2.x ), + QuadraticBezier( t, v0.y, v1.y, v2.y ) + ); + + return point; + + }; + + QuadraticBezierCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + + }; + + QuadraticBezierCurve.prototype.toJSON = function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + + }; + + QuadraticBezierCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + + }; + + function QuadraticBezierCurve3( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) { + + Curve.call( this ); + + this.type = 'QuadraticBezierCurve3'; + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + + } + + QuadraticBezierCurve3.prototype = Object.create( Curve.prototype ); + QuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3; + + QuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true; + + QuadraticBezierCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) { + + const point = optionalTarget; + + const v0 = this.v0, v1 = this.v1, v2 = this.v2; + + point.set( + QuadraticBezier( t, v0.x, v1.x, v2.x ), + QuadraticBezier( t, v0.y, v1.y, v2.y ), + QuadraticBezier( t, v0.z, v1.z, v2.z ) + ); + + return point; + + }; + + QuadraticBezierCurve3.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + + }; + + QuadraticBezierCurve3.prototype.toJSON = function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + + }; + + QuadraticBezierCurve3.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + + }; + + function SplineCurve( points = [] ) { + + Curve.call( this ); + + this.type = 'SplineCurve'; + + this.points = points; + + } + + SplineCurve.prototype = Object.create( Curve.prototype ); + SplineCurve.prototype.constructor = SplineCurve; + + SplineCurve.prototype.isSplineCurve = true; + + SplineCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) { + + const point = optionalTarget; + + const points = this.points; + const p = ( points.length - 1 ) * t; + + const intPoint = Math.floor( p ); + const weight = p - intPoint; + + const p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ]; + const p1 = points[ intPoint ]; + const p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ]; + const p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ]; + + point.set( + CatmullRom( weight, p0.x, p1.x, p2.x, p3.x ), + CatmullRom( weight, p0.y, p1.y, p2.y, p3.y ) + ); + + return point; + + }; + + SplineCurve.prototype.copy = function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.points = []; + + for ( let i = 0, l = source.points.length; i < l; i ++ ) { + + const point = source.points[ i ]; + + this.points.push( point.clone() ); + + } + + return this; + + }; + + SplineCurve.prototype.toJSON = function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.points = []; + + for ( let i = 0, l = this.points.length; i < l; i ++ ) { + + const point = this.points[ i ]; + data.points.push( point.toArray() ); + + } + + return data; + + }; + + SplineCurve.prototype.fromJSON = function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.points = []; + + for ( let i = 0, l = json.points.length; i < l; i ++ ) { + + const point = json.points[ i ]; + this.points.push( new Vector2().fromArray( point ) ); + + } + + return this; + + }; + + var Curves = /*#__PURE__*/Object.freeze({ + __proto__: null, + ArcCurve: ArcCurve, + CatmullRomCurve3: CatmullRomCurve3, + CubicBezierCurve: CubicBezierCurve, + CubicBezierCurve3: CubicBezierCurve3, + EllipseCurve: EllipseCurve, + LineCurve: LineCurve, + LineCurve3: LineCurve3, + QuadraticBezierCurve: QuadraticBezierCurve, + QuadraticBezierCurve3: QuadraticBezierCurve3, + SplineCurve: SplineCurve + }); + + /************************************************************** + * Curved Path - a curve path is simply a array of connected + * curves, but retains the api of a curve + **************************************************************/ + + function CurvePath() { + + Curve.call( this ); + + this.type = 'CurvePath'; + + this.curves = []; + this.autoClose = false; // Automatically closes the path + + } + + CurvePath.prototype = Object.assign( Object.create( Curve.prototype ), { + + constructor: CurvePath, + + add: function ( curve ) { + + this.curves.push( curve ); + + }, + + closePath: function () { + + // Add a line curve if start and end of lines are not connected + const startPoint = this.curves[ 0 ].getPoint( 0 ); + const endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 ); + + if ( ! startPoint.equals( endPoint ) ) { + + this.curves.push( new LineCurve( endPoint, startPoint ) ); + + } + + }, + + // To get accurate point with reference to + // entire path distance at time t, + // following has to be done: + + // 1. Length of each sub path have to be known + // 2. Locate and identify type of curve + // 3. Get t for the curve + // 4. Return curve.getPointAt(t') + + getPoint: function ( t ) { + + const d = t * this.getLength(); + const curveLengths = this.getCurveLengths(); + let i = 0; + + // To think about boundaries points. + + while ( i < curveLengths.length ) { + + if ( curveLengths[ i ] >= d ) { + + const diff = curveLengths[ i ] - d; + const curve = this.curves[ i ]; + + const segmentLength = curve.getLength(); + const u = segmentLength === 0 ? 0 : 1 - diff / segmentLength; + + return curve.getPointAt( u ); + + } + + i ++; + + } + + return null; + + // loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) { + + points.push( points[ 0 ] ); + + } + + return points; + + }, + + copy: function ( source ) { + + Curve.prototype.copy.call( this, source ); + + this.curves = []; + + for ( let i = 0, l = source.curves.length; i < l; i ++ ) { + + const curve = source.curves[ i ]; + + this.curves.push( curve.clone() ); + + } + + this.autoClose = source.autoClose; + + return this; + + }, + + toJSON: function () { + + const data = Curve.prototype.toJSON.call( this ); + + data.autoClose = this.autoClose; + data.curves = []; + + for ( let i = 0, l = this.curves.length; i < l; i ++ ) { + + const curve = this.curves[ i ]; + data.curves.push( curve.toJSON() ); + + } + + return data; + + }, + + fromJSON: function ( json ) { + + Curve.prototype.fromJSON.call( this, json ); + + this.autoClose = json.autoClose; + this.curves = []; + + for ( let i = 0, l = json.curves.length; i < l; i ++ ) { + + const curve = json.curves[ i ]; + this.curves.push( new Curves[ curve.type ]().fromJSON( curve ) ); + + } + + return this; + + } + + } ); + + function Path( points ) { + + CurvePath.call( this ); + + this.type = 'Path'; + + this.currentPoint = new Vector2(); + + if ( points ) { + + this.setFromPoints( points ); + + } + + } + + Path.prototype = Object.assign( Object.create( CurvePath.prototype ), { + + constructor: Path, + + setFromPoints: function ( points ) { + + this.moveTo( points[ 0 ].x, points[ 0 ].y ); + + for ( let i = 1, l = points.length; i < l; i ++ ) { + + this.lineTo( points[ i ].x, points[ i ].y ); + + } + + return this; + + }, + + moveTo: function ( x, y ) { + + this.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying? + + return this; + + }, + + lineTo: function ( x, y ) { + + const curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) ); + this.curves.push( curve ); + + this.currentPoint.set( x, y ); + + return this; + + }, + + quadraticCurveTo: function ( aCPx, aCPy, aX, aY ) { + + const curve = new QuadraticBezierCurve( + this.currentPoint.clone(), + new Vector2( aCPx, aCPy ), + new Vector2( aX, aY ) + ); + + this.curves.push( curve ); + + this.currentPoint.set( aX, aY ); + + return this; + + }, + + bezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { + + const curve = new CubicBezierCurve( + this.currentPoint.clone(), + new Vector2( aCP1x, aCP1y ), + new Vector2( aCP2x, aCP2y ), + new Vector2( aX, aY ) + ); + + this.curves.push( curve ); + + this.currentPoint.set( aX, aY ); + + return this; + + }, + + splineThru: function ( pts /*Array of Vector*/ ) { + + const npts = [ this.currentPoint.clone() ].concat( pts ); + + const curve = new SplineCurve( npts ); + this.curves.push( curve ); + + this.currentPoint.copy( pts[ pts.length - 1 ] ); + + return this; + + }, + + arc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + const x0 = this.currentPoint.x; + const y0 = this.currentPoint.y; + + this.absarc( aX + x0, aY + y0, aRadius, + aStartAngle, aEndAngle, aClockwise ); + + return this; + + }, + + absarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + this.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); + + return this; + + }, + + ellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + const x0 = this.currentPoint.x; + const y0 = this.currentPoint.y; + + this.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); + + return this; + + }, + + absellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + const curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); + + if ( this.curves.length > 0 ) { + + // if a previous curve is present, attempt to join + const firstPoint = curve.getPoint( 0 ); + + if ( ! firstPoint.equals( this.currentPoint ) ) { + + this.lineTo( firstPoint.x, firstPoint.y ); + + } + + } + + this.curves.push( curve ); + + const lastPoint = curve.getPoint( 1 ); + this.currentPoint.copy( lastPoint ); + + return this; + + }, + + copy: function ( source ) { + + CurvePath.prototype.copy.call( this, source ); + + this.currentPoint.copy( source.currentPoint ); + + return this; + + }, + + toJSON: function () { + + const data = CurvePath.prototype.toJSON.call( this ); + + data.currentPoint = this.currentPoint.toArray(); + + return data; + + }, + + fromJSON: function ( json ) { + + CurvePath.prototype.fromJSON.call( this, json ); + + this.currentPoint.fromArray( json.currentPoint ); + + return this; + + } + + } ); + + function Shape( points ) { + + Path.call( this, points ); + + this.uuid = MathUtils.generateUUID(); + + this.type = 'Shape'; + + this.holes = []; + + } + + Shape.prototype = Object.assign( Object.create( Path.prototype ), { + + constructor: Shape, + + getPointsHoles: function ( divisions ) { + + const holesPts = []; + + for ( let i = 0, l = this.holes.length; i < l; i ++ ) { + + holesPts[ i ] = this.holes[ i ].getPoints( divisions ); + + } + + return holesPts; + + }, + + // get points of shape and holes (keypoints based on segments parameter) + + extractPoints: function ( divisions ) { + + return { + + shape: this.getPoints( divisions ), + holes: this.getPointsHoles( divisions ) + + }; + + }, + + copy: function ( source ) { + + Path.prototype.copy.call( this, source ); + + this.holes = []; + + for ( let i = 0, l = source.holes.length; i < l; i ++ ) { + + const hole = source.holes[ i ]; + + this.holes.push( hole.clone() ); + + } + + return this; + + }, + + toJSON: function () { + + const data = Path.prototype.toJSON.call( this ); + + data.uuid = this.uuid; + data.holes = []; + + for ( let i = 0, l = this.holes.length; i < l; i ++ ) { + + const hole = this.holes[ i ]; + data.holes.push( hole.toJSON() ); + + } + + return data; + + }, + + fromJSON: function ( json ) { + + Path.prototype.fromJSON.call( this, json ); + + this.uuid = json.uuid; + this.holes = []; + + for ( let i = 0, l = json.holes.length; i < l; i ++ ) { + + const hole = json.holes[ i ]; + this.holes.push( new Path().fromJSON( hole ) ); + + } + + return this; + + } + + } ); + + function Light( color, intensity = 1 ) { + + Object3D.call( this ); + + this.type = 'Light'; + + this.color = new Color( color ); + this.intensity = intensity; + + } + + Light.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Light, + + isLight: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + this.intensity = source.intensity; + + return this; + + }, + + toJSON: function ( meta ) { + + const data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.color = this.color.getHex(); + data.object.intensity = this.intensity; + + if ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex(); + + if ( this.distance !== undefined ) data.object.distance = this.distance; + if ( this.angle !== undefined ) data.object.angle = this.angle; + if ( this.decay !== undefined ) data.object.decay = this.decay; + if ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra; + + if ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON(); + + return data; + + } + + } ); + + function HemisphereLight( skyColor, groundColor, intensity ) { + + Light.call( this, skyColor, intensity ); + + this.type = 'HemisphereLight'; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.groundColor = new Color( groundColor ); + + } + + HemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: HemisphereLight, + + isHemisphereLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.groundColor.copy( source.groundColor ); + + return this; + + } + + } ); + + function LightShadow( camera ) { + + this.camera = camera; + + this.bias = 0; + this.normalBias = 0; + this.radius = 1; + + this.mapSize = new Vector2( 512, 512 ); + + this.map = null; + this.mapPass = null; + this.matrix = new Matrix4(); + + this.autoUpdate = true; + this.needsUpdate = false; + + this._frustum = new Frustum(); + this._frameExtents = new Vector2( 1, 1 ); + + this._viewportCount = 1; + + this._viewports = [ + + new Vector4( 0, 0, 1, 1 ) + + ]; + + } + + Object.assign( LightShadow.prototype, { + + _projScreenMatrix: new Matrix4(), + + _lightPositionWorld: new Vector3(), + + _lookTarget: new Vector3(), + + getViewportCount: function () { + + return this._viewportCount; + + }, + + getFrustum: function () { + + return this._frustum; + + }, + + updateMatrices: function ( light ) { + + const shadowCamera = this.camera, + shadowMatrix = this.matrix, + projScreenMatrix = this._projScreenMatrix, + lookTarget = this._lookTarget, + lightPositionWorld = this._lightPositionWorld; + + lightPositionWorld.setFromMatrixPosition( light.matrixWorld ); + shadowCamera.position.copy( lightPositionWorld ); + + lookTarget.setFromMatrixPosition( light.target.matrixWorld ); + shadowCamera.lookAt( lookTarget ); + shadowCamera.updateMatrixWorld(); + + projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse ); + this._frustum.setFromProjectionMatrix( projScreenMatrix ); + + shadowMatrix.set( + 0.5, 0.0, 0.0, 0.5, + 0.0, 0.5, 0.0, 0.5, + 0.0, 0.0, 0.5, 0.5, + 0.0, 0.0, 0.0, 1.0 + ); + + shadowMatrix.multiply( shadowCamera.projectionMatrix ); + shadowMatrix.multiply( shadowCamera.matrixWorldInverse ); + + }, + + getViewport: function ( viewportIndex ) { + + return this._viewports[ viewportIndex ]; + + }, + + getFrameExtents: function () { + + return this._frameExtents; + + }, + + copy: function ( source ) { + + this.camera = source.camera.clone(); + + this.bias = source.bias; + this.radius = source.radius; + + this.mapSize.copy( source.mapSize ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + toJSON: function () { + + const object = {}; + + if ( this.bias !== 0 ) object.bias = this.bias; + if ( this.normalBias !== 0 ) object.normalBias = this.normalBias; + if ( this.radius !== 1 ) object.radius = this.radius; + if ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray(); + + object.camera = this.camera.toJSON( false ).object; + delete object.camera.matrix; + + return object; + + } + + } ); + + function SpotLightShadow() { + + LightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) ); + + this.focus = 1; + + } + + SpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { + + constructor: SpotLightShadow, + + isSpotLightShadow: true, + + updateMatrices: function ( light ) { + + const camera = this.camera; + + const fov = MathUtils.RAD2DEG * 2 * light.angle * this.focus; + const aspect = this.mapSize.width / this.mapSize.height; + const far = light.distance || camera.far; + + if ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) { + + camera.fov = fov; + camera.aspect = aspect; + camera.far = far; + camera.updateProjectionMatrix(); + + } + + LightShadow.prototype.updateMatrices.call( this, light ); + + } + + } ); + + function SpotLight( color, intensity, distance, angle, penumbra, decay ) { + + Light.call( this, color, intensity ); + + this.type = 'SpotLight'; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.target = new Object3D(); + + Object.defineProperty( this, 'power', { + get: function () { + + // intensity = power per solid angle. + // ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf + return this.intensity * Math.PI; + + }, + set: function ( power ) { + + // intensity = power per solid angle. + // ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf + this.intensity = power / Math.PI; + + } + } ); + + this.distance = ( distance !== undefined ) ? distance : 0; + this.angle = ( angle !== undefined ) ? angle : Math.PI / 3; + this.penumbra = ( penumbra !== undefined ) ? penumbra : 0; + this.decay = ( decay !== undefined ) ? decay : 1; // for physically correct lights, should be 2. + + this.shadow = new SpotLightShadow(); + + } + + SpotLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: SpotLight, + + isSpotLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.distance = source.distance; + this.angle = source.angle; + this.penumbra = source.penumbra; + this.decay = source.decay; + + this.target = source.target.clone(); + + this.shadow = source.shadow.clone(); + + return this; + + } + + } ); + + function PointLightShadow() { + + LightShadow.call( this, new PerspectiveCamera( 90, 1, 0.5, 500 ) ); + + this._frameExtents = new Vector2( 4, 2 ); + + this._viewportCount = 6; + + this._viewports = [ + // These viewports map a cube-map onto a 2D texture with the + // following orientation: + // + // xzXZ + // y Y + // + // X - Positive x direction + // x - Negative x direction + // Y - Positive y direction + // y - Negative y direction + // Z - Positive z direction + // z - Negative z direction + + // positive X + new Vector4( 2, 1, 1, 1 ), + // negative X + new Vector4( 0, 1, 1, 1 ), + // positive Z + new Vector4( 3, 1, 1, 1 ), + // negative Z + new Vector4( 1, 1, 1, 1 ), + // positive Y + new Vector4( 3, 0, 1, 1 ), + // negative Y + new Vector4( 1, 0, 1, 1 ) + ]; + + this._cubeDirections = [ + new Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ), + new Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 ) + ]; + + this._cubeUps = [ + new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), + new Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ), new Vector3( 0, 0, - 1 ) + ]; + + } + + PointLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { + + constructor: PointLightShadow, + + isPointLightShadow: true, + + updateMatrices: function ( light, viewportIndex = 0 ) { + + const camera = this.camera, + shadowMatrix = this.matrix, + lightPositionWorld = this._lightPositionWorld, + lookTarget = this._lookTarget, + projScreenMatrix = this._projScreenMatrix; + + lightPositionWorld.setFromMatrixPosition( light.matrixWorld ); + camera.position.copy( lightPositionWorld ); + + lookTarget.copy( camera.position ); + lookTarget.add( this._cubeDirections[ viewportIndex ] ); + camera.up.copy( this._cubeUps[ viewportIndex ] ); + camera.lookAt( lookTarget ); + camera.updateMatrixWorld(); + + shadowMatrix.makeTranslation( - lightPositionWorld.x, - lightPositionWorld.y, - lightPositionWorld.z ); + + projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); + this._frustum.setFromProjectionMatrix( projScreenMatrix ); + + } + + } ); + + function PointLight( color, intensity, distance, decay ) { + + Light.call( this, color, intensity ); + + this.type = 'PointLight'; + + Object.defineProperty( this, 'power', { + get: function () { + + // intensity = power per solid angle. + // ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf + return this.intensity * 4 * Math.PI; + + }, + set: function ( power ) { + + // intensity = power per solid angle. + // ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf + this.intensity = power / ( 4 * Math.PI ); + + } + } ); + + this.distance = ( distance !== undefined ) ? distance : 0; + this.decay = ( decay !== undefined ) ? decay : 1; // for physically correct lights, should be 2. + + this.shadow = new PointLightShadow(); + + } + + PointLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: PointLight, + + isPointLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.distance = source.distance; + this.decay = source.decay; + + this.shadow = source.shadow.clone(); + + return this; + + } + + } ); + + function OrthographicCamera( left, right, top, bottom, near, far ) { + + Camera.call( this ); + + this.type = 'OrthographicCamera'; + + this.zoom = 1; + this.view = null; + + this.left = ( left !== undefined ) ? left : - 1; + this.right = ( right !== undefined ) ? right : 1; + this.top = ( top !== undefined ) ? top : 1; + this.bottom = ( bottom !== undefined ) ? bottom : - 1; + + this.near = ( near !== undefined ) ? near : 0.1; + this.far = ( far !== undefined ) ? far : 2000; + + this.updateProjectionMatrix(); + + } + + OrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), { + + constructor: OrthographicCamera, + + isOrthographicCamera: true, + + copy: function ( source, recursive ) { + + Camera.prototype.copy.call( this, source, recursive ); + + this.left = source.left; + this.right = source.right; + this.top = source.top; + this.bottom = source.bottom; + this.near = source.near; + this.far = source.far; + + this.zoom = source.zoom; + this.view = source.view === null ? null : Object.assign( {}, source.view ); + + return this; + + }, + + setViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) { + + 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: function () { + + if ( this.view !== null ) { + + this.view.enabled = false; + + } + + this.updateProjectionMatrix(); + + }, + + updateProjectionMatrix: function () { + + const dx = ( this.right - this.left ) / ( 2 * this.zoom ); + const dy = ( this.top - this.bottom ) / ( 2 * this.zoom ); + const cx = ( this.right + this.left ) / 2; + const cy = ( this.top + this.bottom ) / 2; + + let left = cx - dx; + let right = cx + dx; + let top = cy + dy; + let bottom = cy - dy; + + if ( this.view !== null && this.view.enabled ) { + + const scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom; + const scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom; + + left += scaleW * this.view.offsetX; + right = left + scaleW * this.view.width; + top -= scaleH * this.view.offsetY; + bottom = top - scaleH * this.view.height; + + } + + this.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far ); + + this.projectionMatrixInverse.copy( this.projectionMatrix ).invert(); + + }, + + toJSON: function ( meta ) { + + const data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.zoom = this.zoom; + data.object.left = this.left; + data.object.right = this.right; + data.object.top = this.top; + data.object.bottom = this.bottom; + data.object.near = this.near; + data.object.far = this.far; + + if ( this.view !== null ) data.object.view = Object.assign( {}, this.view ); + + return data; + + } + + } ); + + function DirectionalLightShadow() { + + LightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) ); + + } + + DirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { + + constructor: DirectionalLightShadow, + + isDirectionalLightShadow: true, + + updateMatrices: function ( light ) { + + LightShadow.prototype.updateMatrices.call( this, light ); + + } + + } ); + + function DirectionalLight( color, intensity ) { + + Light.call( this, color, intensity ); + + this.type = 'DirectionalLight'; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.target = new Object3D(); + + this.shadow = new DirectionalLightShadow(); + + } + + DirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: DirectionalLight, + + isDirectionalLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.target = source.target.clone(); + + this.shadow = source.shadow.clone(); + + return this; + + } + + } ); + + function AmbientLight( color, intensity ) { + + Light.call( this, color, intensity ); + + this.type = 'AmbientLight'; + + } + + AmbientLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: AmbientLight, + + isAmbientLight: true + + } ); + + function RectAreaLight( color, intensity, width, height ) { + + Light.call( this, color, intensity ); + + this.type = 'RectAreaLight'; + + this.width = ( width !== undefined ) ? width : 10; + this.height = ( height !== undefined ) ? height : 10; + + } + + RectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: RectAreaLight, + + isRectAreaLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.width = source.width; + this.height = source.height; + + return this; + + }, + + toJSON: function ( meta ) { + + const data = Light.prototype.toJSON.call( this, meta ); + + data.object.width = this.width; + data.object.height = this.height; + + return data; + + } + + } ); + + /** + * Primary reference: + * https://graphics.stanford.edu/papers/envmap/envmap.pdf + * + * Secondary reference: + * https://www.ppsloan.org/publications/StupidSH36.pdf + */ + + // 3-band SH defined by 9 coefficients + + class SphericalHarmonics3 { + + constructor() { + + Object.defineProperty( this, 'isSphericalHarmonics3', { value: true } ); + + this.coefficients = []; + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients.push( new Vector3() ); + + } + + } + + set( coefficients ) { + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].copy( coefficients[ i ] ); + + } + + return this; + + } + + zero() { + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].set( 0, 0, 0 ); + + } + + return this; + + } + + // get the radiance in the direction of the normal + // target is a Vector3 + getAt( normal, target ) { + + // normal is assumed to be unit length + + const x = normal.x, y = normal.y, z = normal.z; + + const coeff = this.coefficients; + + // band 0 + target.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 ); + + // band 1 + target.addScaledVector( coeff[ 1 ], 0.488603 * y ); + target.addScaledVector( coeff[ 2 ], 0.488603 * z ); + target.addScaledVector( coeff[ 3 ], 0.488603 * x ); + + // band 2 + target.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) ); + target.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) ); + target.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) ); + target.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) ); + target.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) ); + + return target; + + } + + // get the irradiance (radiance convolved with cosine lobe) in the direction of the normal + // target is a Vector3 + // https://graphics.stanford.edu/papers/envmap/envmap.pdf + getIrradianceAt( normal, target ) { + + // normal is assumed to be unit length + + const x = normal.x, y = normal.y, z = normal.z; + + const coeff = this.coefficients; + + // band 0 + target.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095 + + // band 1 + target.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603 + target.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z ); + target.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x ); + + // band 2 + target.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548 + target.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z ); + target.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3 + target.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z ); + target.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274 + + return target; + + } + + add( sh ) { + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].add( sh.coefficients[ i ] ); + + } + + return this; + + } + + addScaledSH( sh, s ) { + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s ); + + } + + return this; + + } + + scale( s ) { + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].multiplyScalar( s ); + + } + + return this; + + } + + lerp( sh, alpha ) { + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].lerp( sh.coefficients[ i ], alpha ); + + } + + return this; + + } + + equals( sh ) { + + for ( let i = 0; i < 9; i ++ ) { + + if ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) { + + return false; + + } + + } + + return true; + + } + + copy( sh ) { + + return this.set( sh.coefficients ); + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + fromArray( array, offset = 0 ) { + + const coefficients = this.coefficients; + + for ( let i = 0; i < 9; i ++ ) { + + coefficients[ i ].fromArray( array, offset + ( i * 3 ) ); + + } + + return this; + + } + + toArray( array = [], offset = 0 ) { + + const coefficients = this.coefficients; + + for ( let i = 0; i < 9; i ++ ) { + + coefficients[ i ].toArray( array, offset + ( i * 3 ) ); + + } + + return array; + + } + + // evaluate the basis functions + // shBasis is an Array[ 9 ] + static getBasisAt( normal, shBasis ) { + + // normal is assumed to be unit length + + const x = normal.x, y = normal.y, z = normal.z; + + // band 0 + shBasis[ 0 ] = 0.282095; + + // band 1 + shBasis[ 1 ] = 0.488603 * y; + shBasis[ 2 ] = 0.488603 * z; + shBasis[ 3 ] = 0.488603 * x; + + // band 2 + shBasis[ 4 ] = 1.092548 * x * y; + shBasis[ 5 ] = 1.092548 * y * z; + shBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 ); + shBasis[ 7 ] = 1.092548 * x * z; + shBasis[ 8 ] = 0.546274 * ( x * x - y * y ); + + } + + } + + function LightProbe( sh, intensity ) { + + Light.call( this, undefined, intensity ); + + this.type = 'LightProbe'; + + this.sh = ( sh !== undefined ) ? sh : new SphericalHarmonics3(); + + } + + LightProbe.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: LightProbe, + + isLightProbe: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.sh.copy( source.sh ); + + return this; + + }, + + fromJSON: function ( json ) { + + this.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON(); + this.sh.fromArray( json.sh ); + + return this; + + }, + + toJSON: function ( meta ) { + + const data = Light.prototype.toJSON.call( this, meta ); + + data.object.sh = this.sh.toArray(); + + return data; + + } + + } ); + + function MaterialLoader( manager ) { + + Loader.call( this, manager ); + + this.textures = {}; + + } + + MaterialLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: MaterialLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + const scope = this; + + const loader = new FileLoader( scope.manager ); + loader.setPath( scope.path ); + loader.setRequestHeader( scope.requestHeader ); + loader.setWithCredentials( scope.withCredentials ); + loader.load( url, function ( text ) { + + try { + + onLoad( scope.parse( JSON.parse( text ) ) ); + + } catch ( e ) { + + if ( onError ) { + + onError( e ); + + } else { + + console.error( e ); + + } + + scope.manager.itemError( url ); + + } + + }, onProgress, onError ); + + }, + + parse: function ( json ) { + + const textures = this.textures; + + function getTexture( name ) { + + if ( textures[ name ] === undefined ) { + + console.warn( 'THREE.MaterialLoader: Undefined texture', name ); + + } + + return textures[ name ]; + + } + + const material = new Materials[ json.type ](); + + if ( json.uuid !== undefined ) material.uuid = json.uuid; + if ( json.name !== undefined ) material.name = json.name; + if ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color ); + if ( json.roughness !== undefined ) material.roughness = json.roughness; + if ( json.metalness !== undefined ) material.metalness = json.metalness; + if ( json.sheen !== undefined ) material.sheen = new Color().setHex( json.sheen ); + if ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive ); + if ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular ); + if ( json.shininess !== undefined ) material.shininess = json.shininess; + if ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat; + if ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness; + if ( json.fog !== undefined ) material.fog = json.fog; + if ( json.flatShading !== undefined ) material.flatShading = json.flatShading; + if ( json.blending !== undefined ) material.blending = json.blending; + if ( json.combine !== undefined ) material.combine = json.combine; + if ( json.side !== undefined ) material.side = json.side; + if ( json.opacity !== undefined ) material.opacity = json.opacity; + if ( json.transparent !== undefined ) material.transparent = json.transparent; + if ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest; + if ( json.depthTest !== undefined ) material.depthTest = json.depthTest; + if ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite; + if ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite; + + if ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite; + if ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask; + if ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc; + if ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef; + if ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask; + if ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail; + if ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail; + if ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass; + + if ( json.wireframe !== undefined ) material.wireframe = json.wireframe; + if ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth; + if ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap; + if ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin; + + if ( json.rotation !== undefined ) material.rotation = json.rotation; + + if ( json.linewidth !== 1 ) material.linewidth = json.linewidth; + if ( json.dashSize !== undefined ) material.dashSize = json.dashSize; + if ( json.gapSize !== undefined ) material.gapSize = json.gapSize; + if ( json.scale !== undefined ) material.scale = json.scale; + + if ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset; + if ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor; + if ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits; + + if ( json.skinning !== undefined ) material.skinning = json.skinning; + if ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets; + if ( json.morphNormals !== undefined ) material.morphNormals = json.morphNormals; + if ( json.dithering !== undefined ) material.dithering = json.dithering; + + if ( json.vertexTangents !== undefined ) material.vertexTangents = json.vertexTangents; + + if ( json.visible !== undefined ) material.visible = json.visible; + + if ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped; + + if ( json.userData !== undefined ) material.userData = json.userData; + + if ( json.vertexColors !== undefined ) { + + if ( typeof json.vertexColors === 'number' ) { + + material.vertexColors = ( json.vertexColors > 0 ) ? true : false; + + } else { + + material.vertexColors = json.vertexColors; + + } + + } + + // Shader Material + + if ( json.uniforms !== undefined ) { + + for ( const name in json.uniforms ) { + + const uniform = json.uniforms[ name ]; + + material.uniforms[ name ] = {}; + + switch ( uniform.type ) { + + case 't': + material.uniforms[ name ].value = getTexture( uniform.value ); + break; + + case 'c': + material.uniforms[ name ].value = new Color().setHex( uniform.value ); + break; + + case 'v2': + material.uniforms[ name ].value = new Vector2().fromArray( uniform.value ); + break; + + case 'v3': + material.uniforms[ name ].value = new Vector3().fromArray( uniform.value ); + break; + + case 'v4': + material.uniforms[ name ].value = new Vector4().fromArray( uniform.value ); + break; + + case 'm3': + material.uniforms[ name ].value = new Matrix3().fromArray( uniform.value ); + break; + + case 'm4': + material.uniforms[ name ].value = new Matrix4().fromArray( uniform.value ); + break; + + default: + material.uniforms[ name ].value = uniform.value; + + } + + } + + } + + if ( json.defines !== undefined ) material.defines = json.defines; + if ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader; + if ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader; + + if ( json.extensions !== undefined ) { + + for ( const key in json.extensions ) { + + material.extensions[ key ] = json.extensions[ key ]; + + } + + } + + // Deprecated + + if ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading + + // for PointsMaterial + + if ( json.size !== undefined ) material.size = json.size; + if ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation; + + // maps + + if ( json.map !== undefined ) material.map = getTexture( json.map ); + if ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap ); + + if ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap ); + + if ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap ); + if ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale; + + if ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap ); + if ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType; + if ( json.normalScale !== undefined ) { + + let normalScale = json.normalScale; + + if ( Array.isArray( normalScale ) === false ) { + + // Blender exporter used to export a scalar. See #7459 + + normalScale = [ normalScale, normalScale ]; + + } + + material.normalScale = new Vector2().fromArray( normalScale ); + + } + + if ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap ); + if ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale; + if ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias; + + if ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap ); + if ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap ); + + if ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap ); + if ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity; + + if ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap ); + + if ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap ); + if ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity; + + if ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity; + if ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio; + + if ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap ); + if ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity; + + if ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap ); + if ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity; + + if ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap ); + + if ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap ); + if ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap ); + if ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap ); + if ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale ); + + if ( json.transmission !== undefined ) material.transmission = json.transmission; + if ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap ); + + return material; + + }, + + setTextures: function ( value ) { + + this.textures = value; + return this; + + } + + } ); + + const LoaderUtils = { + + decodeText: function ( array ) { + + if ( typeof TextDecoder !== 'undefined' ) { + + return new TextDecoder().decode( array ); + + } + + // Avoid the String.fromCharCode.apply(null, array) shortcut, which + // throws a "maximum call stack size exceeded" error for large arrays. + + let s = ''; + + for ( let i = 0, il = array.length; i < il; i ++ ) { + + // Implicitly assumes little-endian. + s += String.fromCharCode( array[ i ] ); + + } + + try { + + // merges multi-byte utf-8 characters. + + return decodeURIComponent( escape( s ) ); + + } catch ( e ) { // see #16358 + + return s; + + } + + }, + + extractUrlBase: function ( url ) { + + const index = url.lastIndexOf( '/' ); + + if ( index === - 1 ) return './'; + + return url.substr( 0, index + 1 ); + + } + + }; + + function InstancedBufferGeometry() { + + BufferGeometry.call( this ); + + this.type = 'InstancedBufferGeometry'; + this.instanceCount = Infinity; + + } + + InstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), { + + constructor: InstancedBufferGeometry, + + isInstancedBufferGeometry: true, + + copy: function ( source ) { + + BufferGeometry.prototype.copy.call( this, source ); + + this.instanceCount = source.instanceCount; + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + toJSON: function () { + + const data = BufferGeometry.prototype.toJSON.call( this ); + + data.instanceCount = this.instanceCount; + + data.isInstancedBufferGeometry = true; + + return data; + + } + + } ); + + function InstancedBufferAttribute( array, itemSize, normalized, meshPerAttribute ) { + + if ( typeof ( normalized ) === 'number' ) { + + meshPerAttribute = normalized; + + normalized = false; + + console.error( 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.' ); + + } + + BufferAttribute.call( this, array, itemSize, normalized ); + + this.meshPerAttribute = meshPerAttribute || 1; + + } + + InstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), { + + constructor: InstancedBufferAttribute, + + isInstancedBufferAttribute: true, + + copy: function ( source ) { + + BufferAttribute.prototype.copy.call( this, source ); + + this.meshPerAttribute = source.meshPerAttribute; + + return this; + + }, + + toJSON: function () { + + const data = BufferAttribute.prototype.toJSON.call( this ); + + data.meshPerAttribute = this.meshPerAttribute; + + data.isInstancedBufferAttribute = true; + + return data; + + } + + } ); + + function BufferGeometryLoader( manager ) { + + Loader.call( this, manager ); + + } + + BufferGeometryLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: BufferGeometryLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + const scope = this; + + const loader = new FileLoader( scope.manager ); + loader.setPath( scope.path ); + loader.setRequestHeader( scope.requestHeader ); + loader.setWithCredentials( scope.withCredentials ); + loader.load( url, function ( text ) { + + try { + + onLoad( scope.parse( JSON.parse( text ) ) ); + + } catch ( e ) { + + if ( onError ) { + + onError( e ); + + } else { + + console.error( e ); + + } + + scope.manager.itemError( url ); + + } + + }, onProgress, onError ); + + }, + + parse: function ( json ) { + + const interleavedBufferMap = {}; + const arrayBufferMap = {}; + + function getInterleavedBuffer( json, uuid ) { + + if ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ]; + + const interleavedBuffers = json.interleavedBuffers; + const interleavedBuffer = interleavedBuffers[ uuid ]; + + const buffer = getArrayBuffer( json, interleavedBuffer.buffer ); + + const array = getTypedArray( interleavedBuffer.type, buffer ); + const ib = new InterleavedBuffer( array, interleavedBuffer.stride ); + ib.uuid = interleavedBuffer.uuid; + + interleavedBufferMap[ uuid ] = ib; + + return ib; + + } + + function getArrayBuffer( json, uuid ) { + + if ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ]; + + const arrayBuffers = json.arrayBuffers; + const arrayBuffer = arrayBuffers[ uuid ]; + + const ab = new Uint32Array( arrayBuffer ).buffer; + + arrayBufferMap[ uuid ] = ab; + + return ab; + + } + + const geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry(); + + const index = json.data.index; + + if ( index !== undefined ) { + + const typedArray = getTypedArray( index.type, index.array ); + geometry.setIndex( new BufferAttribute( typedArray, 1 ) ); + + } + + const attributes = json.data.attributes; + + for ( const key in attributes ) { + + const attribute = attributes[ key ]; + let bufferAttribute; + + if ( attribute.isInterleavedBufferAttribute ) { + + const interleavedBuffer = getInterleavedBuffer( json.data, attribute.data ); + bufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized ); + + } else { + + const typedArray = getTypedArray( attribute.type, attribute.array ); + const bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute; + bufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized ); + + } + + if ( attribute.name !== undefined ) bufferAttribute.name = attribute.name; + geometry.setAttribute( key, bufferAttribute ); + + } + + const morphAttributes = json.data.morphAttributes; + + if ( morphAttributes ) { + + for ( const key in morphAttributes ) { + + const attributeArray = morphAttributes[ key ]; + + const array = []; + + for ( let i = 0, il = attributeArray.length; i < il; i ++ ) { + + const attribute = attributeArray[ i ]; + let bufferAttribute; + + if ( attribute.isInterleavedBufferAttribute ) { + + const interleavedBuffer = getInterleavedBuffer( json.data, attribute.data ); + bufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized ); + + } else { + + const typedArray = getTypedArray( attribute.type, attribute.array ); + bufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ); + + } + + if ( attribute.name !== undefined ) bufferAttribute.name = attribute.name; + array.push( bufferAttribute ); + + } + + geometry.morphAttributes[ key ] = array; + + } + + } + + const morphTargetsRelative = json.data.morphTargetsRelative; + + if ( morphTargetsRelative ) { + + geometry.morphTargetsRelative = true; + + } + + const groups = json.data.groups || json.data.drawcalls || json.data.offsets; + + if ( groups !== undefined ) { + + for ( let i = 0, n = groups.length; i !== n; ++ i ) { + + const group = groups[ i ]; + + geometry.addGroup( group.start, group.count, group.materialIndex ); + + } + + } + + const boundingSphere = json.data.boundingSphere; + + if ( boundingSphere !== undefined ) { + + const center = new Vector3(); + + if ( boundingSphere.center !== undefined ) { + + center.fromArray( boundingSphere.center ); + + } + + geometry.boundingSphere = new Sphere( center, boundingSphere.radius ); + + } + + if ( json.name ) geometry.name = json.name; + if ( json.userData ) geometry.userData = json.userData; + + return geometry; + + } + + } ); + + function ImageBitmapLoader( manager ) { + + if ( typeof createImageBitmap === 'undefined' ) { + + console.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' ); + + } + + if ( typeof fetch === 'undefined' ) { + + console.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' ); + + } + + Loader.call( this, manager ); + + this.options = { premultiplyAlpha: 'none' }; + + } + + ImageBitmapLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: ImageBitmapLoader, + + isImageBitmapLoader: true, + + setOptions: function setOptions( options ) { + + this.options = options; + + return this; + + }, + + load: function ( url, onLoad, onProgress, onError ) { + + if ( url === undefined ) url = ''; + + if ( this.path !== undefined ) url = this.path + url; + + url = this.manager.resolveURL( url ); + + const scope = this; + + const cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) onLoad( cached ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + const fetchOptions = {}; + fetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include'; + + fetch( url, fetchOptions ).then( function ( res ) { + + return res.blob(); + + } ).then( function ( blob ) { + + return createImageBitmap( blob, scope.options ); + + } ).then( function ( imageBitmap ) { + + Cache.add( url, imageBitmap ); + + if ( onLoad ) onLoad( imageBitmap ); + + scope.manager.itemEnd( url ); + + } ).catch( function ( e ) { + + if ( onError ) onError( e ); + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + } ); + + scope.manager.itemStart( url ); + + } + + } ); + + function ShapePath() { + + this.type = 'ShapePath'; + + this.color = new Color(); + + this.subPaths = []; + this.currentPath = null; + + } + + Object.assign( ShapePath.prototype, { + + moveTo: function ( x, y ) { + + this.currentPath = new Path(); + this.subPaths.push( this.currentPath ); + this.currentPath.moveTo( x, y ); + + return this; + + }, + + lineTo: function ( x, y ) { + + this.currentPath.lineTo( x, y ); + + return this; + + }, + + quadraticCurveTo: function ( aCPx, aCPy, aX, aY ) { + + this.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY ); + + return this; + + }, + + bezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { + + this.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ); + + return this; + + }, + + splineThru: function ( pts ) { + + this.currentPath.splineThru( pts ); + + return this; + + }, + + toShapes: function ( isCCW, noHoles ) { + + function toShapesNoHoles( inSubpaths ) { + + const shapes = []; + + for ( let i = 0, l = inSubpaths.length; i < l; i ++ ) { + + const tmpPath = inSubpaths[ i ]; + + const tmpShape = new Shape(); + tmpShape.curves = tmpPath.curves; + + shapes.push( tmpShape ); + + } + + return shapes; + + } + + function isPointInsidePolygon( inPt, inPolygon ) { + + const polyLen = inPolygon.length; + + // inPt on polygon contour => immediate success or + // toggling of inside/outside at every single! intersection point of an edge + // with the horizontal line through inPt, left of inPt + // not counting lowerY endpoints of edges and whole edges on that line + let inside = false; + for ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) { + + let edgeLowPt = inPolygon[ p ]; + let edgeHighPt = inPolygon[ q ]; + + let edgeDx = edgeHighPt.x - edgeLowPt.x; + let edgeDy = edgeHighPt.y - edgeLowPt.y; + + if ( Math.abs( edgeDy ) > Number.EPSILON ) { + + // not parallel + if ( edgeDy < 0 ) { + + edgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx; + edgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy; + + } + + if ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) continue; + + if ( inPt.y === edgeLowPt.y ) { + + if ( inPt.x === edgeLowPt.x ) return true; // inPt is on contour ? + // continue; // no intersection or edgeLowPt => doesn't count !!! + + } else { + + const perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y ); + if ( perpEdge === 0 ) return true; // inPt is on contour ? + if ( perpEdge < 0 ) continue; + inside = ! inside; // true intersection left of inPt + + } + + } else { + + // parallel or collinear + if ( inPt.y !== edgeLowPt.y ) continue; // parallel + // edge lies on the same horizontal line as inPt + if ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) || + ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) ) return true; // inPt: Point on contour ! + // continue; + + } + + } + + return inside; + + } + + const isClockWise = ShapeUtils.isClockWise; + + const subPaths = this.subPaths; + if ( subPaths.length === 0 ) return []; + + if ( noHoles === true ) return toShapesNoHoles( subPaths ); + + + let solid, tmpPath, tmpShape; + const shapes = []; + + if ( subPaths.length === 1 ) { + + tmpPath = subPaths[ 0 ]; + tmpShape = new Shape(); + tmpShape.curves = tmpPath.curves; + shapes.push( tmpShape ); + return shapes; + + } + + let holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() ); + holesFirst = isCCW ? ! holesFirst : holesFirst; + + // console.log("Holes first", holesFirst); + + const betterShapeHoles = []; + const newShapes = []; + let newShapeHoles = []; + let mainIdx = 0; + let tmpPoints; + + newShapes[ mainIdx ] = undefined; + newShapeHoles[ mainIdx ] = []; + + for ( let i = 0, l = subPaths.length; i < l; i ++ ) { + + tmpPath = subPaths[ i ]; + tmpPoints = tmpPath.getPoints(); + solid = isClockWise( tmpPoints ); + solid = isCCW ? ! solid : solid; + + if ( solid ) { + + if ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) ) mainIdx ++; + + newShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints }; + newShapes[ mainIdx ].s.curves = tmpPath.curves; + + if ( holesFirst ) mainIdx ++; + newShapeHoles[ mainIdx ] = []; + + //console.log('cw', i); + + } else { + + newShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } ); + + //console.log('ccw', i); + + } + + } + + // only Holes? -> probably all Shapes with wrong orientation + if ( ! newShapes[ 0 ] ) return toShapesNoHoles( subPaths ); + + + if ( newShapes.length > 1 ) { + + let ambiguous = false; + const toChange = []; + + for ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { + + betterShapeHoles[ sIdx ] = []; + + } + + for ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { + + const sho = newShapeHoles[ sIdx ]; + + for ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) { + + const ho = sho[ hIdx ]; + let hole_unassigned = true; + + for ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) { + + if ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) { + + if ( sIdx !== s2Idx ) toChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } ); + if ( hole_unassigned ) { + + hole_unassigned = false; + betterShapeHoles[ s2Idx ].push( ho ); + + } else { + + ambiguous = true; + + } + + } + + } + + if ( hole_unassigned ) { + + betterShapeHoles[ sIdx ].push( ho ); + + } + + } + + } + // console.log("ambiguous: ", ambiguous); + + if ( toChange.length > 0 ) { + + // console.log("to change: ", toChange); + if ( ! ambiguous ) newShapeHoles = betterShapeHoles; + + } + + } + + let tmpHoles; + + for ( let i = 0, il = newShapes.length; i < il; i ++ ) { + + tmpShape = newShapes[ i ].s; + shapes.push( tmpShape ); + tmpHoles = newShapeHoles[ i ]; + + for ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) { + + tmpShape.holes.push( tmpHoles[ j ].h ); + + } + + } + + //console.log("shape", shapes); + + return shapes; + + } + + } ); + + function Font( data ) { + + this.type = 'Font'; + + this.data = data; + + } + + Object.assign( Font.prototype, { + + isFont: true, + + generateShapes: function ( text, size = 100 ) { + + const shapes = []; + const paths = createPaths( text, size, this.data ); + + for ( let p = 0, pl = paths.length; p < pl; p ++ ) { + + Array.prototype.push.apply( shapes, paths[ p ].toShapes() ); + + } + + return shapes; + + } + + } ); + + function createPaths( text, size, data ) { + + const chars = Array.from ? Array.from( text ) : String( text ).split( '' ); // workaround for IE11, see #13988 + const scale = size / data.resolution; + const line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale; + + const paths = []; + + let offsetX = 0, offsetY = 0; + + for ( let i = 0; i < chars.length; i ++ ) { + + const char = chars[ i ]; + + if ( char === '\n' ) { + + offsetX = 0; + offsetY -= line_height; + + } else { + + const ret = createPath( char, scale, offsetX, offsetY, data ); + offsetX += ret.offsetX; + paths.push( ret.path ); + + } + + } + + return paths; + + } + + function createPath( char, scale, offsetX, offsetY, data ) { + + const glyph = data.glyphs[ char ] || data.glyphs[ '?' ]; + + if ( ! glyph ) { + + console.error( 'THREE.Font: character "' + char + '" does not exists in font family ' + data.familyName + '.' ); + + return; + + } + + const path = new ShapePath(); + + let x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2; + + if ( glyph.o ) { + + const outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) ); + + for ( let i = 0, l = outline.length; i < l; ) { + + const action = outline[ i ++ ]; + + switch ( action ) { + + case 'm': // moveTo + + x = outline[ i ++ ] * scale + offsetX; + y = outline[ i ++ ] * scale + offsetY; + + path.moveTo( x, y ); + + break; + + case 'l': // lineTo + + x = outline[ i ++ ] * scale + offsetX; + y = outline[ i ++ ] * scale + offsetY; + + path.lineTo( x, y ); + + break; + + case 'q': // quadraticCurveTo + + cpx = outline[ i ++ ] * scale + offsetX; + cpy = outline[ i ++ ] * scale + offsetY; + cpx1 = outline[ i ++ ] * scale + offsetX; + cpy1 = outline[ i ++ ] * scale + offsetY; + + path.quadraticCurveTo( cpx1, cpy1, cpx, cpy ); + + break; + + case 'b': // bezierCurveTo + + cpx = outline[ i ++ ] * scale + offsetX; + cpy = outline[ i ++ ] * scale + offsetY; + cpx1 = outline[ i ++ ] * scale + offsetX; + cpy1 = outline[ i ++ ] * scale + offsetY; + cpx2 = outline[ i ++ ] * scale + offsetX; + cpy2 = outline[ i ++ ] * scale + offsetY; + + path.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy ); + + break; + + } + + } + + } + + return { offsetX: glyph.ha * scale, path: path }; + + } + + function FontLoader( manager ) { + + Loader.call( this, manager ); + + } + + FontLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: FontLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + const scope = this; + + const loader = new FileLoader( this.manager ); + loader.setPath( this.path ); + loader.setRequestHeader( this.requestHeader ); + loader.setWithCredentials( scope.withCredentials ); + loader.load( url, function ( text ) { + + let json; + + try { + + json = JSON.parse( text ); + + } catch ( e ) { + + console.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' ); + json = JSON.parse( text.substring( 65, text.length - 2 ) ); + + } + + const font = scope.parse( json ); + + if ( onLoad ) onLoad( font ); + + }, onProgress, onError ); + + }, + + parse: function ( json ) { + + return new Font( json ); + + } + + } ); + + let _context; + + const AudioContext = { + + getContext: function () { + + if ( _context === undefined ) { + + _context = new ( window.AudioContext || window.webkitAudioContext )(); + + } + + return _context; + + }, + + setContext: function ( value ) { + + _context = value; + + } + + }; + + function AudioLoader( manager ) { + + Loader.call( this, manager ); + + } + + AudioLoader.prototype = Object.assign( Object.create( Loader.prototype ), { + + constructor: AudioLoader, + + load: function ( url, onLoad, onProgress, onError ) { + + const scope = this; + + const loader = new FileLoader( scope.manager ); + loader.setResponseType( 'arraybuffer' ); + loader.setPath( scope.path ); + loader.setRequestHeader( scope.requestHeader ); + loader.setWithCredentials( scope.withCredentials ); + loader.load( url, function ( buffer ) { + + try { + + // Create a copy of the buffer. The `decodeAudioData` method + // detaches the buffer when complete, preventing reuse. + const bufferCopy = buffer.slice( 0 ); + + const context = AudioContext.getContext(); + context.decodeAudioData( bufferCopy, function ( audioBuffer ) { + + onLoad( audioBuffer ); + + } ); + + } catch ( e ) { + + if ( onError ) { + + onError( e ); + + } else { + + console.error( e ); + + } + + scope.manager.itemError( url ); + + } + + }, onProgress, onError ); + + } + + } ); + + function HemisphereLightProbe( skyColor, groundColor, intensity ) { + + LightProbe.call( this, undefined, intensity ); + + const color1 = new Color().set( skyColor ); + const color2 = new Color().set( groundColor ); + + const sky = new Vector3( color1.r, color1.g, color1.b ); + const ground = new Vector3( color2.r, color2.g, color2.b ); + + // without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI ); + const c0 = Math.sqrt( Math.PI ); + const c1 = c0 * Math.sqrt( 0.75 ); + + this.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 ); + this.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 ); + + } + + HemisphereLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), { + + constructor: HemisphereLightProbe, + + isHemisphereLightProbe: true, + + copy: function ( source ) { // modifying colors not currently supported + + LightProbe.prototype.copy.call( this, source ); + + return this; + + }, + + toJSON: function ( meta ) { + + const data = LightProbe.prototype.toJSON.call( this, meta ); + + // data.sh = this.sh.toArray(); // todo + + return data; + + } + + } ); + + function AmbientLightProbe( color, intensity ) { + + LightProbe.call( this, undefined, intensity ); + + const color1 = new Color().set( color ); + + // without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI ); + this.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) ); + + } + + AmbientLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), { + + constructor: AmbientLightProbe, + + isAmbientLightProbe: true, + + copy: function ( source ) { // modifying color not currently supported + + LightProbe.prototype.copy.call( this, source ); + + return this; + + }, + + toJSON: function ( meta ) { + + const data = LightProbe.prototype.toJSON.call( this, meta ); + + // data.sh = this.sh.toArray(); // todo + + return data; + + } + + } ); + + const _eyeRight = new Matrix4(); + const _eyeLeft = new Matrix4(); + + function StereoCamera() { + + this.type = 'StereoCamera'; + + this.aspect = 1; + + this.eyeSep = 0.064; + + this.cameraL = new PerspectiveCamera(); + this.cameraL.layers.enable( 1 ); + this.cameraL.matrixAutoUpdate = false; + + this.cameraR = new PerspectiveCamera(); + this.cameraR.layers.enable( 2 ); + this.cameraR.matrixAutoUpdate = false; + + this._cache = { + focus: null, + fov: null, + aspect: null, + near: null, + far: null, + zoom: null, + eyeSep: null + }; + + } + + Object.assign( StereoCamera.prototype, { + + update: function ( camera ) { + + const cache = this._cache; + + const needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov || + cache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near || + cache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep; + + if ( needsUpdate ) { + + cache.focus = camera.focus; + cache.fov = camera.fov; + cache.aspect = camera.aspect * this.aspect; + cache.near = camera.near; + cache.far = camera.far; + cache.zoom = camera.zoom; + cache.eyeSep = this.eyeSep; + + // Off-axis stereoscopic effect based on + // http://paulbourke.net/stereographics/stereorender/ + + const projectionMatrix = camera.projectionMatrix.clone(); + const eyeSepHalf = cache.eyeSep / 2; + const eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus; + const ymax = ( cache.near * Math.tan( MathUtils.DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom; + let xmin, xmax; + + // translate xOffset + + _eyeLeft.elements[ 12 ] = - eyeSepHalf; + _eyeRight.elements[ 12 ] = eyeSepHalf; + + // for left eye + + xmin = - ymax * cache.aspect + eyeSepOnProjection; + xmax = ymax * cache.aspect + eyeSepOnProjection; + + projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin ); + projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); + + this.cameraL.projectionMatrix.copy( projectionMatrix ); + + // for right eye + + xmin = - ymax * cache.aspect - eyeSepOnProjection; + xmax = ymax * cache.aspect - eyeSepOnProjection; + + projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin ); + projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); + + this.cameraR.projectionMatrix.copy( projectionMatrix ); + + } + + this.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft ); + this.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight ); + + } + + } ); + + class Clock { + + constructor( autoStart ) { + + this.autoStart = ( autoStart !== undefined ) ? autoStart : true; + + this.startTime = 0; + this.oldTime = 0; + this.elapsedTime = 0; + + this.running = false; + + } + + start() { + + this.startTime = now$3(); + + this.oldTime = this.startTime; + this.elapsedTime = 0; + this.running = true; + + } + + stop() { + + this.getElapsedTime(); + this.running = false; + this.autoStart = false; + + } + + getElapsedTime() { + + this.getDelta(); + return this.elapsedTime; + + } + + getDelta() { + + let diff = 0; + + if ( this.autoStart && ! this.running ) { + + this.start(); + return 0; + + } + + if ( this.running ) { + + const newTime = now$3(); + + diff = ( newTime - this.oldTime ) / 1000; + this.oldTime = newTime; + + this.elapsedTime += diff; + + } + + return diff; + + } + + } + + function now$3() { + + return ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732 + + } + + class Audio extends Object3D { + + constructor( listener ) { + + super(); + + this.type = 'Audio'; + + this.listener = listener; + this.context = listener.context; + + this.gain = this.context.createGain(); + this.gain.connect( listener.getInput() ); + + this.autoplay = false; + + this.buffer = null; + this.detune = 0; + this.loop = false; + this.loopStart = 0; + this.loopEnd = 0; + this.offset = 0; + this.duration = undefined; + this.playbackRate = 1; + this.isPlaying = false; + this.hasPlaybackControl = true; + this.source = null; + this.sourceType = 'empty'; + + this._startedAt = 0; + this._progress = 0; + this._connected = false; + + this.filters = []; + + } + + getOutput() { + + return this.gain; + + } + + setNodeSource( audioNode ) { + + this.hasPlaybackControl = false; + this.sourceType = 'audioNode'; + this.source = audioNode; + this.connect(); + + return this; + + } + + setMediaElementSource( mediaElement ) { + + this.hasPlaybackControl = false; + this.sourceType = 'mediaNode'; + this.source = this.context.createMediaElementSource( mediaElement ); + this.connect(); + + return this; + + } + + setMediaStreamSource( mediaStream ) { + + this.hasPlaybackControl = false; + this.sourceType = 'mediaStreamNode'; + this.source = this.context.createMediaStreamSource( mediaStream ); + this.connect(); + + return this; + + } + + setBuffer( audioBuffer ) { + + this.buffer = audioBuffer; + this.sourceType = 'buffer'; + + if ( this.autoplay ) this.play(); + + return this; + + } + + play( delay = 0 ) { + + if ( this.isPlaying === true ) { + + console.warn( 'THREE.Audio: Audio is already playing.' ); + return; + + } + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this._startedAt = this.context.currentTime + delay; + + const source = this.context.createBufferSource(); + source.buffer = this.buffer; + source.loop = this.loop; + source.loopStart = this.loopStart; + source.loopEnd = this.loopEnd; + source.onended = this.onEnded.bind( this ); + source.start( this._startedAt, this._progress + this.offset, this.duration ); + + this.isPlaying = true; + + this.source = source; + + this.setDetune( this.detune ); + this.setPlaybackRate( this.playbackRate ); + + return this.connect(); + + } + + pause() { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + if ( this.isPlaying === true ) { + + // update current progress + + this._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate; + + if ( this.loop === true ) { + + // ensure _progress does not exceed duration with looped audios + + this._progress = this._progress % ( this.duration || this.buffer.duration ); + + } + + this.source.stop(); + this.source.onended = null; + + this.isPlaying = false; + + } + + return this; + + } + + stop() { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this._progress = 0; + + this.source.stop(); + this.source.onended = null; + this.isPlaying = false; + + return this; + + } + + connect() { + + if ( this.filters.length > 0 ) { + + this.source.connect( this.filters[ 0 ] ); + + for ( let i = 1, l = this.filters.length; i < l; i ++ ) { + + this.filters[ i - 1 ].connect( this.filters[ i ] ); + + } + + this.filters[ this.filters.length - 1 ].connect( this.getOutput() ); + + } else { + + this.source.connect( this.getOutput() ); + + } + + this._connected = true; + + return this; + + } + + disconnect() { + + if ( this.filters.length > 0 ) { + + this.source.disconnect( this.filters[ 0 ] ); + + for ( let i = 1, l = this.filters.length; i < l; i ++ ) { + + this.filters[ i - 1 ].disconnect( this.filters[ i ] ); + + } + + this.filters[ this.filters.length - 1 ].disconnect( this.getOutput() ); + + } else { + + this.source.disconnect( this.getOutput() ); + + } + + this._connected = false; + + return this; + + } + + getFilters() { + + return this.filters; + + } + + setFilters( value ) { + + if ( ! value ) value = []; + + if ( this._connected === true ) { + + this.disconnect(); + this.filters = value.slice(); + this.connect(); + + } else { + + this.filters = value.slice(); + + } + + return this; + + } + + setDetune( value ) { + + this.detune = value; + + if ( this.source.detune === undefined ) return; // only set detune when available + + if ( this.isPlaying === true ) { + + this.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 ); + + } + + return this; + + } + + getDetune() { + + return this.detune; + + } + + getFilter() { + + return this.getFilters()[ 0 ]; + + } + + setFilter( filter ) { + + return this.setFilters( filter ? [ filter ] : [] ); + + } + + setPlaybackRate( value ) { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.playbackRate = value; + + if ( this.isPlaying === true ) { + + this.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 ); + + } + + return this; + + } + + getPlaybackRate() { + + return this.playbackRate; + + } + + onEnded() { + + this.isPlaying = false; + + } + + getLoop() { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return false; + + } + + return this.loop; + + } + + setLoop( value ) { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.loop = value; + + if ( this.isPlaying === true ) { + + this.source.loop = this.loop; + + } + + return this; + + } + + setLoopStart( value ) { + + this.loopStart = value; + + return this; + + } + + setLoopEnd( value ) { + + this.loopEnd = value; + + return this; + + } + + getVolume() { + + return this.gain.gain.value; + + } + + setVolume( value ) { + + this.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 ); + + return this; + + } + + } + + function PropertyMixer( binding, typeName, valueSize ) { + + this.binding = binding; + this.valueSize = valueSize; + + let mixFunction, + mixFunctionAdditive, + setIdentity; + + // buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ] + // + // interpolators can use .buffer as their .result + // the data then goes to 'incoming' + // + // 'accu0' and 'accu1' are used frame-interleaved for + // the cumulative result and are compared to detect + // changes + // + // 'orig' stores the original state of the property + // + // 'add' is used for additive cumulative results + // + // 'work' is optional and is only present for quaternion types. It is used + // to store intermediate quaternion multiplication results + + switch ( typeName ) { + + case 'quaternion': + mixFunction = this._slerp; + mixFunctionAdditive = this._slerpAdditive; + setIdentity = this._setAdditiveIdentityQuaternion; + + this.buffer = new Float64Array( valueSize * 6 ); + this._workIndex = 5; + break; + + case 'string': + case 'bool': + mixFunction = this._select; + + // Use the regular mix function and for additive on these types, + // additive is not relevant for non-numeric types + mixFunctionAdditive = this._select; + + setIdentity = this._setAdditiveIdentityOther; + + this.buffer = new Array( valueSize * 5 ); + break; + + default: + mixFunction = this._lerp; + mixFunctionAdditive = this._lerpAdditive; + setIdentity = this._setAdditiveIdentityNumeric; + + this.buffer = new Float64Array( valueSize * 5 ); + + } + + this._mixBufferRegion = mixFunction; + this._mixBufferRegionAdditive = mixFunctionAdditive; + this._setIdentity = setIdentity; + this._origIndex = 3; + this._addIndex = 4; + + this.cumulativeWeight = 0; + this.cumulativeWeightAdditive = 0; + + this.useCount = 0; + this.referenceCount = 0; + + } + + Object.assign( PropertyMixer.prototype, { + + // accumulate data in the 'incoming' region into 'accu' + accumulate: function ( accuIndex, weight ) { + + // note: happily accumulating nothing when weight = 0, the caller knows + // the weight and shouldn't have made the call in the first place + + const buffer = this.buffer, + stride = this.valueSize, + offset = accuIndex * stride + stride; + + let currentWeight = this.cumulativeWeight; + + if ( currentWeight === 0 ) { + + // accuN := incoming * weight + + for ( let i = 0; i !== stride; ++ i ) { + + buffer[ offset + i ] = buffer[ i ]; + + } + + currentWeight = weight; + + } else { + + // accuN := accuN + incoming * weight + + currentWeight += weight; + const mix = weight / currentWeight; + this._mixBufferRegion( buffer, offset, 0, mix, stride ); + + } + + this.cumulativeWeight = currentWeight; + + }, + + // accumulate data in the 'incoming' region into 'add' + accumulateAdditive: function ( weight ) { + + const buffer = this.buffer, + stride = this.valueSize, + offset = stride * this._addIndex; + + if ( this.cumulativeWeightAdditive === 0 ) { + + // add = identity + + this._setIdentity(); + + } + + // add := add + incoming * weight + + this._mixBufferRegionAdditive( buffer, offset, 0, weight, stride ); + this.cumulativeWeightAdditive += weight; + + }, + + // apply the state of 'accu' to the binding when accus differ + apply: function ( accuIndex ) { + + const stride = this.valueSize, + buffer = this.buffer, + offset = accuIndex * stride + stride, + + weight = this.cumulativeWeight, + weightAdditive = this.cumulativeWeightAdditive, + + binding = this.binding; + + this.cumulativeWeight = 0; + this.cumulativeWeightAdditive = 0; + + if ( weight < 1 ) { + + // accuN := accuN + original * ( 1 - cumulativeWeight ) + + const originalValueOffset = stride * this._origIndex; + + this._mixBufferRegion( + buffer, offset, originalValueOffset, 1 - weight, stride ); + + } + + if ( weightAdditive > 0 ) { + + // accuN := accuN + additive accuN + + this._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride ); + + } + + for ( let i = stride, e = stride + stride; i !== e; ++ i ) { + + if ( buffer[ i ] !== buffer[ i + stride ] ) { + + // value has changed -> update scene graph + + binding.setValue( buffer, offset ); + break; + + } + + } + + }, + + // remember the state of the bound property and copy it to both accus + saveOriginalState: function () { + + const binding = this.binding; + + const buffer = this.buffer, + stride = this.valueSize, + + originalValueOffset = stride * this._origIndex; + + binding.getValue( buffer, originalValueOffset ); + + // accu[0..1] := orig -- initially detect changes against the original + for ( let i = stride, e = originalValueOffset; i !== e; ++ i ) { + + buffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ]; + + } + + // Add to identity for additive + this._setIdentity(); + + this.cumulativeWeight = 0; + this.cumulativeWeightAdditive = 0; + + }, + + // apply the state previously taken via 'saveOriginalState' to the binding + restoreOriginalState: function () { + + const originalValueOffset = this.valueSize * 3; + this.binding.setValue( this.buffer, originalValueOffset ); + + }, + + _setAdditiveIdentityNumeric: function () { + + const startIndex = this._addIndex * this.valueSize; + const endIndex = startIndex + this.valueSize; + + for ( let i = startIndex; i < endIndex; i ++ ) { + + this.buffer[ i ] = 0; + + } + + }, + + _setAdditiveIdentityQuaternion: function () { + + this._setAdditiveIdentityNumeric(); + this.buffer[ this._addIndex * this.valueSize + 3 ] = 1; + + }, + + _setAdditiveIdentityOther: function () { + + const startIndex = this._origIndex * this.valueSize; + const targetIndex = this._addIndex * this.valueSize; + + for ( let i = 0; i < this.valueSize; i ++ ) { + + this.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ]; + + } + + }, + + + // mix functions + + _select: function ( buffer, dstOffset, srcOffset, t, stride ) { + + if ( t >= 0.5 ) { + + for ( let i = 0; i !== stride; ++ i ) { + + buffer[ dstOffset + i ] = buffer[ srcOffset + i ]; + + } + + } + + }, + + _slerp: function ( buffer, dstOffset, srcOffset, t ) { + + Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t ); + + }, + + _slerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) { + + const workOffset = this._workIndex * stride; + + // Store result in intermediate buffer offset + Quaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset ); + + // Slerp to the intermediate result + Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t ); + + }, + + _lerp: function ( buffer, dstOffset, srcOffset, t, stride ) { + + const s = 1 - t; + + for ( let i = 0; i !== stride; ++ i ) { + + const j = dstOffset + i; + + buffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t; + + } + + }, + + _lerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) { + + for ( let i = 0; i !== stride; ++ i ) { + + const j = dstOffset + i; + + buffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t; + + } + + } + + } ); + + // Characters [].:/ are reserved for track binding syntax. + const _RESERVED_CHARS_RE = '\\[\\]\\.:\\/'; + const _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' ); + + // Attempts to allow node names from any language. ES5's `\w` regexp matches + // only latin characters, and the unicode \p{L} is not yet supported. So + // instead, we exclude reserved characters and match everything else. + const _wordChar = '[^' + _RESERVED_CHARS_RE + ']'; + const _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\.', '' ) + ']'; + + // Parent directories, delimited by '/' or ':'. Currently unused, but must + // be matched to parse the rest of the track name. + const _directoryRe = /((?:WC+[\/:])*)/.source.replace( 'WC', _wordChar ); + + // Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'. + const _nodeRe = /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot ); + + // Object on target node, and accessor. May not contain reserved + // characters. Accessor may contain any character except closing bracket. + const _objectRe = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace( 'WC', _wordChar ); + + // Property and accessor. May not contain reserved characters. Accessor may + // contain any non-bracket characters. + const _propertyRe = /\.(WC+)(?:\[(.+)\])?/.source.replace( 'WC', _wordChar ); + + const _trackRe = new RegExp( '' + + '^' + + _directoryRe + + _nodeRe + + _objectRe + + _propertyRe + + '$' + ); + + const _supportedObjectNames = [ 'material', 'materials', 'bones' ]; + + function Composite( targetGroup, path, optionalParsedPath ) { + + const parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path ); + + this._targetGroup = targetGroup; + this._bindings = targetGroup.subscribe_( path, parsedPath ); + + } + + Object.assign( Composite.prototype, { + + getValue: function ( array, offset ) { + + this.bind(); // bind all binding + + const firstValidIndex = this._targetGroup.nCachedObjects_, + binding = this._bindings[ firstValidIndex ]; + + // and only call .getValue on the first + if ( binding !== undefined ) binding.getValue( array, offset ); + + }, + + setValue: function ( array, offset ) { + + const bindings = this._bindings; + + for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].setValue( array, offset ); + + } + + }, + + bind: function () { + + const bindings = this._bindings; + + for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].bind(); + + } + + }, + + unbind: function () { + + const bindings = this._bindings; + + for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].unbind(); + + } + + } + + } ); + + + function PropertyBinding( rootNode, path, parsedPath ) { + + this.path = path; + this.parsedPath = parsedPath || PropertyBinding.parseTrackName( path ); + + this.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode; + + this.rootNode = rootNode; + + } + + Object.assign( PropertyBinding, { + + Composite: Composite, + + create: function ( root, path, parsedPath ) { + + if ( ! ( root && root.isAnimationObjectGroup ) ) { + + return new PropertyBinding( root, path, parsedPath ); + + } else { + + return new PropertyBinding.Composite( root, path, parsedPath ); + + } + + }, + + /** + * Replaces spaces with underscores and removes unsupported characters from + * node names, to ensure compatibility with parseTrackName(). + * + * @param {string} name Node name to be sanitized. + * @return {string} + */ + sanitizeNodeName: function ( name ) { + + return name.replace( /\s/g, '_' ).replace( _reservedRe, '' ); + + }, + + parseTrackName: function ( trackName ) { + + const matches = _trackRe.exec( trackName ); + + if ( ! matches ) { + + throw new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName ); + + } + + const results = { + // directoryName: matches[ 1 ], // (tschw) currently unused + nodeName: matches[ 2 ], + objectName: matches[ 3 ], + objectIndex: matches[ 4 ], + propertyName: matches[ 5 ], // required + propertyIndex: matches[ 6 ] + }; + + const lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' ); + + if ( lastDot !== undefined && lastDot !== - 1 ) { + + const objectName = results.nodeName.substring( lastDot + 1 ); + + // Object names must be checked against an allowlist. Otherwise, there + // is no way to parse 'foo.bar.baz': 'baz' must be a property, but + // 'bar' could be the objectName, or part of a nodeName (which can + // include '.' characters). + if ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) { + + results.nodeName = results.nodeName.substring( 0, lastDot ); + results.objectName = objectName; + + } + + } + + if ( results.propertyName === null || results.propertyName.length === 0 ) { + + throw new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName ); + + } + + return results; + + }, + + findNode: function ( root, nodeName ) { + + if ( ! nodeName || nodeName === "" || nodeName === "." || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) { + + return root; + + } + + // search into skeleton bones. + if ( root.skeleton ) { + + const bone = root.skeleton.getBoneByName( nodeName ); + + if ( bone !== undefined ) { + + return bone; + + } + + } + + // search into node subtree. + if ( root.children ) { + + const searchNodeSubtree = function ( children ) { + + for ( let i = 0; i < children.length; i ++ ) { + + const childNode = children[ i ]; + + if ( childNode.name === nodeName || childNode.uuid === nodeName ) { + + return childNode; + + } + + const result = searchNodeSubtree( childNode.children ); + + if ( result ) return result; + + } + + return null; + + }; + + const subTreeNode = searchNodeSubtree( root.children ); + + if ( subTreeNode ) { + + return subTreeNode; + + } + + } + + return null; + + } + + } ); + + Object.assign( PropertyBinding.prototype, { // prototype, continued + + // these are used to "bind" a nonexistent property + _getValue_unavailable: function () {}, + _setValue_unavailable: function () {}, + + BindingType: { + Direct: 0, + EntireArray: 1, + ArrayElement: 2, + HasFromToArray: 3 + }, + + Versioning: { + None: 0, + NeedsUpdate: 1, + MatrixWorldNeedsUpdate: 2 + }, + + GetterByBindingType: [ + + function getValue_direct( buffer, offset ) { + + buffer[ offset ] = this.node[ this.propertyName ]; + + }, + + function getValue_array( buffer, offset ) { + + const source = this.resolvedProperty; + + for ( let i = 0, n = source.length; i !== n; ++ i ) { + + buffer[ offset ++ ] = source[ i ]; + + } + + }, + + function getValue_arrayElement( buffer, offset ) { + + buffer[ offset ] = this.resolvedProperty[ this.propertyIndex ]; + + }, + + function getValue_toArray( buffer, offset ) { + + this.resolvedProperty.toArray( buffer, offset ); + + } + + ], + + SetterByBindingTypeAndVersioning: [ + + [ + // Direct + + function setValue_direct( buffer, offset ) { + + this.targetObject[ this.propertyName ] = buffer[ offset ]; + + }, + + function setValue_direct_setNeedsUpdate( buffer, offset ) { + + this.targetObject[ this.propertyName ] = buffer[ offset ]; + this.targetObject.needsUpdate = true; + + }, + + function setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.targetObject[ this.propertyName ] = buffer[ offset ]; + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ], [ + + // EntireArray + + function setValue_array( buffer, offset ) { + + const dest = this.resolvedProperty; + + for ( let i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + }, + + function setValue_array_setNeedsUpdate( buffer, offset ) { + + const dest = this.resolvedProperty; + + for ( let i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + this.targetObject.needsUpdate = true; + + }, + + function setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) { + + const dest = this.resolvedProperty; + + for ( let i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ], [ + + // ArrayElement + + function setValue_arrayElement( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + + }, + + function setValue_arrayElement_setNeedsUpdate( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + this.targetObject.needsUpdate = true; + + }, + + function setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ], [ + + // HasToFromArray + + function setValue_fromArray( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + + }, + + function setValue_fromArray_setNeedsUpdate( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + this.targetObject.needsUpdate = true; + + }, + + function setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ] + + ], + + getValue: function getValue_unbound( targetArray, offset ) { + + this.bind(); + this.getValue( targetArray, offset ); + + // Note: This class uses a State pattern on a per-method basis: + // 'bind' sets 'this.getValue' / 'setValue' and shadows the + // prototype version of these methods with one that represents + // the bound state. When the property is not found, the methods + // become no-ops. + + }, + + setValue: function getValue_unbound( sourceArray, offset ) { + + this.bind(); + this.setValue( sourceArray, offset ); + + }, + + // create getter / setter pair for a property in the scene graph + bind: function () { + + let targetObject = this.node; + const parsedPath = this.parsedPath; + + const objectName = parsedPath.objectName; + const propertyName = parsedPath.propertyName; + let propertyIndex = parsedPath.propertyIndex; + + if ( ! targetObject ) { + + targetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode; + + this.node = targetObject; + + } + + // set fail state so we can just 'return' on error + this.getValue = this._getValue_unavailable; + this.setValue = this._setValue_unavailable; + + // ensure there is a value node + if ( ! targetObject ) { + + console.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\'t found.' ); + return; + + } + + if ( objectName ) { + + let objectIndex = parsedPath.objectIndex; + + // special cases were we need to reach deeper into the hierarchy to get the face materials.... + switch ( objectName ) { + + case 'materials': + + if ( ! targetObject.material ) { + + console.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this ); + return; + + } + + if ( ! targetObject.material.materials ) { + + console.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this ); + return; + + } + + targetObject = targetObject.material.materials; + + break; + + case 'bones': + + if ( ! targetObject.skeleton ) { + + console.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this ); + return; + + } + + // potential future optimization: skip this if propertyIndex is already an integer + // and convert the integer string to a true integer. + + targetObject = targetObject.skeleton.bones; + + // support resolving morphTarget names into indices. + for ( let i = 0; i < targetObject.length; i ++ ) { + + if ( targetObject[ i ].name === objectIndex ) { + + objectIndex = i; + break; + + } + + } + + break; + + default: + + if ( targetObject[ objectName ] === undefined ) { + + console.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this ); + return; + + } + + targetObject = targetObject[ objectName ]; + + } + + + if ( objectIndex !== undefined ) { + + if ( targetObject[ objectIndex ] === undefined ) { + + console.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject ); + return; + + } + + targetObject = targetObject[ objectIndex ]; + + } + + } + + // resolve property + const nodeProperty = targetObject[ propertyName ]; + + if ( nodeProperty === undefined ) { + + const nodeName = parsedPath.nodeName; + + console.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName + + '.' + propertyName + ' but it wasn\'t found.', targetObject ); + return; + + } + + // determine versioning scheme + let versioning = this.Versioning.None; + + this.targetObject = targetObject; + + if ( targetObject.needsUpdate !== undefined ) { // material + + versioning = this.Versioning.NeedsUpdate; + + } else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform + + versioning = this.Versioning.MatrixWorldNeedsUpdate; + + } + + // determine how the property gets bound + let bindingType = this.BindingType.Direct; + + if ( propertyIndex !== undefined ) { + + // access a sub element of the property array (only primitives are supported right now) + + if ( propertyName === "morphTargetInfluences" ) { + + // potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer. + + // support resolving morphTarget names into indices. + if ( ! targetObject.geometry ) { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this ); + return; + + } + + if ( targetObject.geometry.isBufferGeometry ) { + + if ( ! targetObject.geometry.morphAttributes ) { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this ); + return; + + } + + if ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) { + + propertyIndex = targetObject.morphTargetDictionary[ propertyIndex ]; + + } + + + } else { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', this ); + return; + + } + + } + + bindingType = this.BindingType.ArrayElement; + + this.resolvedProperty = nodeProperty; + this.propertyIndex = propertyIndex; + + } else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) { + + // must use copy for Object3D.Euler/Quaternion + + bindingType = this.BindingType.HasFromToArray; + + this.resolvedProperty = nodeProperty; + + } else if ( Array.isArray( nodeProperty ) ) { + + bindingType = this.BindingType.EntireArray; + + this.resolvedProperty = nodeProperty; + + } else { + + this.propertyName = propertyName; + + } + + // select getter / setter + this.getValue = this.GetterByBindingType[ bindingType ]; + this.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ]; + + }, + + unbind: function () { + + this.node = null; + + // back to the prototype version of getValue / setValue + // note: avoiding to mutate the shape of 'this' via 'delete' + this.getValue = this._getValue_unbound; + this.setValue = this._setValue_unbound; + + } + + } ); + + // DECLARE ALIAS AFTER assign prototype + Object.assign( PropertyBinding.prototype, { + + // initial state of these methods that calls 'bind' + _getValue_unbound: PropertyBinding.prototype.getValue, + _setValue_unbound: PropertyBinding.prototype.setValue, + + } ); + + /** + * + * A group of objects that receives a shared animation state. + * + * Usage: + * + * - Add objects you would otherwise pass as 'root' to the + * constructor or the .clipAction method of AnimationMixer. + * + * - Instead pass this object as 'root'. + * + * - You can also add and remove objects later when the mixer + * is running. + * + * Note: + * + * Objects of this class appear as one object to the mixer, + * so cache control of the individual objects must be done + * on the group. + * + * Limitation: + * + * - The animated properties must be compatible among the + * all objects in the group. + * + * - A single property can either be controlled through a + * target group or directly, but not both. + */ + + function AnimationObjectGroup() { + + this.uuid = MathUtils.generateUUID(); + + // cached objects followed by the active ones + this._objects = Array.prototype.slice.call( arguments ); + + this.nCachedObjects_ = 0; // threshold + // note: read by PropertyBinding.Composite + + const indices = {}; + this._indicesByUUID = indices; // for bookkeeping + + for ( let i = 0, n = arguments.length; i !== n; ++ i ) { + + indices[ arguments[ i ].uuid ] = i; + + } + + this._paths = []; // inside: string + this._parsedPaths = []; // inside: { we don't care, here } + this._bindings = []; // inside: Array< PropertyBinding > + this._bindingsIndicesByPath = {}; // inside: indices in these arrays + + const scope = this; + + this.stats = { + + objects: { + get total() { + + return scope._objects.length; + + }, + get inUse() { + + return this.total - scope.nCachedObjects_; + + } + }, + get bindingsPerObject() { + + return scope._bindings.length; + + } + + }; + + } + + Object.assign( AnimationObjectGroup.prototype, { + + isAnimationObjectGroup: true, + + add: function () { + + const objects = this._objects, + indicesByUUID = this._indicesByUUID, + paths = this._paths, + parsedPaths = this._parsedPaths, + bindings = this._bindings, + nBindings = bindings.length; + + let knownObject = undefined, + nObjects = objects.length, + nCachedObjects = this.nCachedObjects_; + + for ( let i = 0, n = arguments.length; i !== n; ++ i ) { + + const object = arguments[ i ], + uuid = object.uuid; + let index = indicesByUUID[ uuid ]; + + if ( index === undefined ) { + + // unknown object -> add it to the ACTIVE region + + index = nObjects ++; + indicesByUUID[ uuid ] = index; + objects.push( object ); + + // accounting is done, now do the same for all bindings + + for ( let j = 0, m = nBindings; j !== m; ++ j ) { + + bindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) ); + + } + + } else if ( index < nCachedObjects ) { + + knownObject = objects[ index ]; + + // move existing object to the ACTIVE region + + const firstActiveIndex = -- nCachedObjects, + lastCachedObject = objects[ firstActiveIndex ]; + + indicesByUUID[ lastCachedObject.uuid ] = index; + objects[ index ] = lastCachedObject; + + indicesByUUID[ uuid ] = firstActiveIndex; + objects[ firstActiveIndex ] = object; + + // accounting is done, now do the same for all bindings + + for ( let j = 0, m = nBindings; j !== m; ++ j ) { + + const bindingsForPath = bindings[ j ], + lastCached = bindingsForPath[ firstActiveIndex ]; + + let binding = bindingsForPath[ index ]; + + bindingsForPath[ index ] = lastCached; + + if ( binding === undefined ) { + + // since we do not bother to create new bindings + // for objects that are cached, the binding may + // or may not exist + + binding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ); + + } + + bindingsForPath[ firstActiveIndex ] = binding; + + } + + } else if ( objects[ index ] !== knownObject ) { + + console.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' + + 'detected. Clean the caches or recreate your infrastructure when reloading scenes.' ); + + } // else the object is already where we want it to be + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + }, + + remove: function () { + + const objects = this._objects, + indicesByUUID = this._indicesByUUID, + bindings = this._bindings, + nBindings = bindings.length; + + let nCachedObjects = this.nCachedObjects_; + + for ( let i = 0, n = arguments.length; i !== n; ++ i ) { + + const object = arguments[ i ], + uuid = object.uuid, + index = indicesByUUID[ uuid ]; + + if ( index !== undefined && index >= nCachedObjects ) { + + // move existing object into the CACHED region + + const lastCachedIndex = nCachedObjects ++, + firstActiveObject = objects[ lastCachedIndex ]; + + indicesByUUID[ firstActiveObject.uuid ] = index; + objects[ index ] = firstActiveObject; + + indicesByUUID[ uuid ] = lastCachedIndex; + objects[ lastCachedIndex ] = object; + + // accounting is done, now do the same for all bindings + + for ( let j = 0, m = nBindings; j !== m; ++ j ) { + + const bindingsForPath = bindings[ j ], + firstActive = bindingsForPath[ lastCachedIndex ], + binding = bindingsForPath[ index ]; + + bindingsForPath[ index ] = firstActive; + bindingsForPath[ lastCachedIndex ] = binding; + + } + + } + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + }, + + // remove & forget + uncache: function () { + + const objects = this._objects, + indicesByUUID = this._indicesByUUID, + bindings = this._bindings, + nBindings = bindings.length; + + let nCachedObjects = this.nCachedObjects_, + nObjects = objects.length; + + for ( let i = 0, n = arguments.length; i !== n; ++ i ) { + + const object = arguments[ i ], + uuid = object.uuid, + index = indicesByUUID[ uuid ]; + + if ( index !== undefined ) { + + delete indicesByUUID[ uuid ]; + + if ( index < nCachedObjects ) { + + // object is cached, shrink the CACHED region + + const firstActiveIndex = -- nCachedObjects, + lastCachedObject = objects[ firstActiveIndex ], + lastIndex = -- nObjects, + lastObject = objects[ lastIndex ]; + + // last cached object takes this object's place + indicesByUUID[ lastCachedObject.uuid ] = index; + objects[ index ] = lastCachedObject; + + // last object goes to the activated slot and pop + indicesByUUID[ lastObject.uuid ] = firstActiveIndex; + objects[ firstActiveIndex ] = lastObject; + objects.pop(); + + // accounting is done, now do the same for all bindings + + for ( let j = 0, m = nBindings; j !== m; ++ j ) { + + const bindingsForPath = bindings[ j ], + lastCached = bindingsForPath[ firstActiveIndex ], + last = bindingsForPath[ lastIndex ]; + + bindingsForPath[ index ] = lastCached; + bindingsForPath[ firstActiveIndex ] = last; + bindingsForPath.pop(); + + } + + } else { + + // object is active, just swap with the last and pop + + const lastIndex = -- nObjects, + lastObject = objects[ lastIndex ]; + + if ( lastIndex > 0 ) { + + indicesByUUID[ lastObject.uuid ] = index; + + } + + objects[ index ] = lastObject; + objects.pop(); + + // accounting is done, now do the same for all bindings + + for ( let j = 0, m = nBindings; j !== m; ++ j ) { + + const bindingsForPath = bindings[ j ]; + + bindingsForPath[ index ] = bindingsForPath[ lastIndex ]; + bindingsForPath.pop(); + + } + + } // cached or active + + } // if object is known + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + }, + + // Internal interface used by befriended PropertyBinding.Composite: + + subscribe_: function ( path, parsedPath ) { + + // returns an array of bindings for the given path that is changed + // according to the contained objects in the group + + const indicesByPath = this._bindingsIndicesByPath; + let index = indicesByPath[ path ]; + const bindings = this._bindings; + + if ( index !== undefined ) return bindings[ index ]; + + const paths = this._paths, + parsedPaths = this._parsedPaths, + objects = this._objects, + nObjects = objects.length, + nCachedObjects = this.nCachedObjects_, + bindingsForPath = new Array( nObjects ); + + index = bindings.length; + + indicesByPath[ path ] = index; + + paths.push( path ); + parsedPaths.push( parsedPath ); + bindings.push( bindingsForPath ); + + for ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) { + + const object = objects[ i ]; + bindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath ); + + } + + return bindingsForPath; + + }, + + unsubscribe_: function ( path ) { + + // tells the group to forget about a property path and no longer + // update the array previously obtained with 'subscribe_' + + const indicesByPath = this._bindingsIndicesByPath, + index = indicesByPath[ path ]; + + if ( index !== undefined ) { + + const paths = this._paths, + parsedPaths = this._parsedPaths, + bindings = this._bindings, + lastBindingsIndex = bindings.length - 1, + lastBindings = bindings[ lastBindingsIndex ], + lastBindingsPath = path[ lastBindingsIndex ]; + + indicesByPath[ lastBindingsPath ] = index; + + bindings[ index ] = lastBindings; + bindings.pop(); + + parsedPaths[ index ] = parsedPaths[ lastBindingsIndex ]; + parsedPaths.pop(); + + paths[ index ] = paths[ lastBindingsIndex ]; + paths.pop(); + + } + + } + + } ); + + class AnimationAction { + + constructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) { + + this._mixer = mixer; + this._clip = clip; + this._localRoot = localRoot; + this.blendMode = blendMode; + + const tracks = clip.tracks, + nTracks = tracks.length, + interpolants = new Array( nTracks ); + + const interpolantSettings = { + endingStart: ZeroCurvatureEnding, + endingEnd: ZeroCurvatureEnding + }; + + for ( let i = 0; i !== nTracks; ++ i ) { + + const interpolant = tracks[ i ].createInterpolant( null ); + interpolants[ i ] = interpolant; + interpolant.settings = interpolantSettings; + + } + + this._interpolantSettings = interpolantSettings; + + this._interpolants = interpolants; // bound by the mixer + + // inside: PropertyMixer (managed by the mixer) + this._propertyBindings = new Array( nTracks ); + + this._cacheIndex = null; // for the memory manager + this._byClipCacheIndex = null; // for the memory manager + + this._timeScaleInterpolant = null; + this._weightInterpolant = null; + + this.loop = LoopRepeat; + this._loopCount = - 1; + + // global mixer time when the action is to be started + // it's set back to 'null' upon start of the action + this._startTime = null; + + // scaled local time of the action + // gets clamped or wrapped to 0..clip.duration according to loop + this.time = 0; + + this.timeScale = 1; + this._effectiveTimeScale = 1; + + this.weight = 1; + this._effectiveWeight = 1; + + this.repetitions = Infinity; // no. of repetitions when looping + + this.paused = false; // true -> zero effective time scale + this.enabled = true; // false -> zero effective weight + + this.clampWhenFinished = false;// keep feeding the last frame? + + this.zeroSlopeAtStart = true;// for smooth interpolation w/o separate + this.zeroSlopeAtEnd = true;// clips for start, loop and end + + } + + // State & Scheduling + + play() { + + this._mixer._activateAction( this ); + + return this; + + } + + stop() { + + this._mixer._deactivateAction( this ); + + return this.reset(); + + } + + reset() { + + this.paused = false; + this.enabled = true; + + this.time = 0; // restart clip + this._loopCount = - 1;// forget previous loops + this._startTime = null;// forget scheduling + + return this.stopFading().stopWarping(); + + } + + isRunning() { + + return this.enabled && ! this.paused && this.timeScale !== 0 && + this._startTime === null && this._mixer._isActiveAction( this ); + + } + + // return true when play has been called + isScheduled() { + + return this._mixer._isActiveAction( this ); + + } + + startAt( time ) { + + this._startTime = time; + + return this; + + } + + setLoop( mode, repetitions ) { + + this.loop = mode; + this.repetitions = repetitions; + + return this; + + } + + // Weight + + // set the weight stopping any scheduled fading + // although .enabled = false yields an effective weight of zero, this + // method does *not* change .enabled, because it would be confusing + setEffectiveWeight( weight ) { + + this.weight = weight; + + // note: same logic as when updated at runtime + this._effectiveWeight = this.enabled ? weight : 0; + + return this.stopFading(); + + } + + // return the weight considering fading and .enabled + getEffectiveWeight() { + + return this._effectiveWeight; + + } + + fadeIn( duration ) { + + return this._scheduleFading( duration, 0, 1 ); + + } + + fadeOut( duration ) { + + return this._scheduleFading( duration, 1, 0 ); + + } + + crossFadeFrom( fadeOutAction, duration, warp ) { + + fadeOutAction.fadeOut( duration ); + this.fadeIn( duration ); + + if ( warp ) { + + const fadeInDuration = this._clip.duration, + fadeOutDuration = fadeOutAction._clip.duration, + + startEndRatio = fadeOutDuration / fadeInDuration, + endStartRatio = fadeInDuration / fadeOutDuration; + + fadeOutAction.warp( 1.0, startEndRatio, duration ); + this.warp( endStartRatio, 1.0, duration ); + + } + + return this; + + } + + crossFadeTo( fadeInAction, duration, warp ) { + + return fadeInAction.crossFadeFrom( this, duration, warp ); + + } + + stopFading() { + + const weightInterpolant = this._weightInterpolant; + + if ( weightInterpolant !== null ) { + + this._weightInterpolant = null; + this._mixer._takeBackControlInterpolant( weightInterpolant ); + + } + + return this; + + } + + // Time Scale Control + + // set the time scale stopping any scheduled warping + // although .paused = true yields an effective time scale of zero, this + // method does *not* change .paused, because it would be confusing + setEffectiveTimeScale( timeScale ) { + + this.timeScale = timeScale; + this._effectiveTimeScale = this.paused ? 0 : timeScale; + + return this.stopWarping(); + + } + + // return the time scale considering warping and .paused + getEffectiveTimeScale() { + + return this._effectiveTimeScale; + + } + + setDuration( duration ) { + + this.timeScale = this._clip.duration / duration; + + return this.stopWarping(); + + } + + syncWith( action ) { + + this.time = action.time; + this.timeScale = action.timeScale; + + return this.stopWarping(); + + } + + halt( duration ) { + + return this.warp( this._effectiveTimeScale, 0, duration ); + + } + + warp( startTimeScale, endTimeScale, duration ) { + + const mixer = this._mixer, + now = mixer.time, + timeScale = this.timeScale; + + let interpolant = this._timeScaleInterpolant; + + if ( interpolant === null ) { + + interpolant = mixer._lendControlInterpolant(); + this._timeScaleInterpolant = interpolant; + + } + + const times = interpolant.parameterPositions, + values = interpolant.sampleValues; + + times[ 0 ] = now; + times[ 1 ] = now + duration; + + values[ 0 ] = startTimeScale / timeScale; + values[ 1 ] = endTimeScale / timeScale; + + return this; + + } + + stopWarping() { + + const timeScaleInterpolant = this._timeScaleInterpolant; + + if ( timeScaleInterpolant !== null ) { + + this._timeScaleInterpolant = null; + this._mixer._takeBackControlInterpolant( timeScaleInterpolant ); + + } + + return this; + + } + + // Object Accessors + + getMixer() { + + return this._mixer; + + } + + getClip() { + + return this._clip; + + } + + getRoot() { + + return this._localRoot || this._mixer._root; + + } + + // Interna + + _update( time, deltaTime, timeDirection, accuIndex ) { + + // called by the mixer + + if ( ! this.enabled ) { + + // call ._updateWeight() to update ._effectiveWeight + + this._updateWeight( time ); + return; + + } + + const startTime = this._startTime; + + if ( startTime !== null ) { + + // check for scheduled start of action + + const timeRunning = ( time - startTime ) * timeDirection; + if ( timeRunning < 0 || timeDirection === 0 ) { + + return; // yet to come / don't decide when delta = 0 + + } + + // start + + this._startTime = null; // unschedule + deltaTime = timeDirection * timeRunning; + + } + + // apply time scale and advance time + + deltaTime *= this._updateTimeScale( time ); + const clipTime = this._updateTime( deltaTime ); + + // note: _updateTime may disable the action resulting in + // an effective weight of 0 + + const weight = this._updateWeight( time ); + + if ( weight > 0 ) { + + const interpolants = this._interpolants; + const propertyMixers = this._propertyBindings; + + switch ( this.blendMode ) { + + case AdditiveAnimationBlendMode: + + for ( let j = 0, m = interpolants.length; j !== m; ++ j ) { + + interpolants[ j ].evaluate( clipTime ); + propertyMixers[ j ].accumulateAdditive( weight ); + + } + + break; + + case NormalAnimationBlendMode: + default: + + for ( let j = 0, m = interpolants.length; j !== m; ++ j ) { + + interpolants[ j ].evaluate( clipTime ); + propertyMixers[ j ].accumulate( accuIndex, weight ); + + } + + } + + } + + } + + _updateWeight( time ) { + + let weight = 0; + + if ( this.enabled ) { + + weight = this.weight; + const interpolant = this._weightInterpolant; + + if ( interpolant !== null ) { + + const interpolantValue = interpolant.evaluate( time )[ 0 ]; + + weight *= interpolantValue; + + if ( time > interpolant.parameterPositions[ 1 ] ) { + + this.stopFading(); + + if ( interpolantValue === 0 ) { + + // faded out, disable + this.enabled = false; + + } + + } + + } + + } + + this._effectiveWeight = weight; + return weight; + + } + + _updateTimeScale( time ) { + + let timeScale = 0; + + if ( ! this.paused ) { + + timeScale = this.timeScale; + + const interpolant = this._timeScaleInterpolant; + + if ( interpolant !== null ) { + + const interpolantValue = interpolant.evaluate( time )[ 0 ]; + + timeScale *= interpolantValue; + + if ( time > interpolant.parameterPositions[ 1 ] ) { + + this.stopWarping(); + + if ( timeScale === 0 ) { + + // motion has halted, pause + this.paused = true; + + } else { + + // warp done - apply final time scale + this.timeScale = timeScale; + + } + + } + + } + + } + + this._effectiveTimeScale = timeScale; + return timeScale; + + } + + _updateTime( deltaTime ) { + + const duration = this._clip.duration; + const loop = this.loop; + + let time = this.time + deltaTime; + let loopCount = this._loopCount; + + const pingPong = ( loop === LoopPingPong ); + + if ( deltaTime === 0 ) { + + if ( loopCount === - 1 ) return time; + + return ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time; + + } + + if ( loop === LoopOnce ) { + + if ( loopCount === - 1 ) { + + // just started + + this._loopCount = 0; + this._setEndings( true, true, false ); + + } + + handle_stop: { + + if ( time >= duration ) { + + time = duration; + + } else if ( time < 0 ) { + + time = 0; + + } else { + + this.time = time; + + break handle_stop; + + } + + if ( this.clampWhenFinished ) this.paused = true; + else this.enabled = false; + + this.time = time; + + this._mixer.dispatchEvent( { + type: 'finished', action: this, + direction: deltaTime < 0 ? - 1 : 1 + } ); + + } + + } else { // repetitive Repeat or PingPong + + if ( loopCount === - 1 ) { + + // just started + + if ( deltaTime >= 0 ) { + + loopCount = 0; + + this._setEndings( true, this.repetitions === 0, pingPong ); + + } else { + + // when looping in reverse direction, the initial + // transition through zero counts as a repetition, + // so leave loopCount at -1 + + this._setEndings( this.repetitions === 0, true, pingPong ); + + } + + } + + if ( time >= duration || time < 0 ) { + + // wrap around + + const loopDelta = Math.floor( time / duration ); // signed + time -= duration * loopDelta; + + loopCount += Math.abs( loopDelta ); + + const pending = this.repetitions - loopCount; + + if ( pending <= 0 ) { + + // have to stop (switch state, clamp time, fire event) + + if ( this.clampWhenFinished ) this.paused = true; + else this.enabled = false; + + time = deltaTime > 0 ? duration : 0; + + this.time = time; + + this._mixer.dispatchEvent( { + type: 'finished', action: this, + direction: deltaTime > 0 ? 1 : - 1 + } ); + + } else { + + // keep running + + if ( pending === 1 ) { + + // entering the last round + + const atStart = deltaTime < 0; + this._setEndings( atStart, ! atStart, pingPong ); + + } else { + + this._setEndings( false, false, pingPong ); + + } + + this._loopCount = loopCount; + + this.time = time; + + this._mixer.dispatchEvent( { + type: 'loop', action: this, loopDelta: loopDelta + } ); + + } + + } else { + + this.time = time; + + } + + if ( pingPong && ( loopCount & 1 ) === 1 ) { + + // invert time for the "pong round" + + return duration - time; + + } + + } + + return time; + + } + + _setEndings( atStart, atEnd, pingPong ) { + + const settings = this._interpolantSettings; + + if ( pingPong ) { + + settings.endingStart = ZeroSlopeEnding; + settings.endingEnd = ZeroSlopeEnding; + + } else { + + // assuming for LoopOnce atStart == atEnd == true + + if ( atStart ) { + + settings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding; + + } else { + + settings.endingStart = WrapAroundEnding; + + } + + if ( atEnd ) { + + settings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding; + + } else { + + settings.endingEnd = WrapAroundEnding; + + } + + } + + } + + _scheduleFading( duration, weightNow, weightThen ) { + + const mixer = this._mixer, now = mixer.time; + let interpolant = this._weightInterpolant; + + if ( interpolant === null ) { + + interpolant = mixer._lendControlInterpolant(); + this._weightInterpolant = interpolant; + + } + + const times = interpolant.parameterPositions, + values = interpolant.sampleValues; + + times[ 0 ] = now; + values[ 0 ] = weightNow; + times[ 1 ] = now + duration; + values[ 1 ] = weightThen; + + return this; + + } + + } + + function AnimationMixer( root ) { + + this._root = root; + this._initMemoryManager(); + this._accuIndex = 0; + + this.time = 0; + + this.timeScale = 1.0; + + } + + AnimationMixer.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { + + constructor: AnimationMixer, + + _bindAction: function ( action, prototypeAction ) { + + const root = action._localRoot || this._root, + tracks = action._clip.tracks, + nTracks = tracks.length, + bindings = action._propertyBindings, + interpolants = action._interpolants, + rootUuid = root.uuid, + bindingsByRoot = this._bindingsByRootAndName; + + let bindingsByName = bindingsByRoot[ rootUuid ]; + + if ( bindingsByName === undefined ) { + + bindingsByName = {}; + bindingsByRoot[ rootUuid ] = bindingsByName; + + } + + for ( let i = 0; i !== nTracks; ++ i ) { + + const track = tracks[ i ], + trackName = track.name; + + let binding = bindingsByName[ trackName ]; + + if ( binding !== undefined ) { + + bindings[ i ] = binding; + + } else { + + binding = bindings[ i ]; + + if ( binding !== undefined ) { + + // existing binding, make sure the cache knows + + if ( binding._cacheIndex === null ) { + + ++ binding.referenceCount; + this._addInactiveBinding( binding, rootUuid, trackName ); + + } + + continue; + + } + + const path = prototypeAction && prototypeAction. + _propertyBindings[ i ].binding.parsedPath; + + binding = new PropertyMixer( + PropertyBinding.create( root, trackName, path ), + track.ValueTypeName, track.getValueSize() ); + + ++ binding.referenceCount; + this._addInactiveBinding( binding, rootUuid, trackName ); + + bindings[ i ] = binding; + + } + + interpolants[ i ].resultBuffer = binding.buffer; + + } + + }, + + _activateAction: function ( action ) { + + if ( ! this._isActiveAction( action ) ) { + + if ( action._cacheIndex === null ) { + + // this action has been forgotten by the cache, but the user + // appears to be still using it -> rebind + + const rootUuid = ( action._localRoot || this._root ).uuid, + clipUuid = action._clip.uuid, + actionsForClip = this._actionsByClip[ clipUuid ]; + + this._bindAction( action, + actionsForClip && actionsForClip.knownActions[ 0 ] ); + + this._addInactiveAction( action, clipUuid, rootUuid ); + + } + + const bindings = action._propertyBindings; + + // increment reference counts / sort out state + for ( let i = 0, n = bindings.length; i !== n; ++ i ) { + + const binding = bindings[ i ]; + + if ( binding.useCount ++ === 0 ) { + + this._lendBinding( binding ); + binding.saveOriginalState(); + + } + + } + + this._lendAction( action ); + + } + + }, + + _deactivateAction: function ( action ) { + + if ( this._isActiveAction( action ) ) { + + const bindings = action._propertyBindings; + + // decrement reference counts / sort out state + for ( let i = 0, n = bindings.length; i !== n; ++ i ) { + + const binding = bindings[ i ]; + + if ( -- binding.useCount === 0 ) { + + binding.restoreOriginalState(); + this._takeBackBinding( binding ); + + } + + } + + this._takeBackAction( action ); + + } + + }, + + // Memory manager + + _initMemoryManager: function () { + + this._actions = []; // 'nActiveActions' followed by inactive ones + this._nActiveActions = 0; + + this._actionsByClip = {}; + // inside: + // { + // knownActions: Array< AnimationAction > - used as prototypes + // actionByRoot: AnimationAction - lookup + // } + + + this._bindings = []; // 'nActiveBindings' followed by inactive ones + this._nActiveBindings = 0; + + this._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer > + + + this._controlInterpolants = []; // same game as above + this._nActiveControlInterpolants = 0; + + const scope = this; + + this.stats = { + + actions: { + get total() { + + return scope._actions.length; + + }, + get inUse() { + + return scope._nActiveActions; + + } + }, + bindings: { + get total() { + + return scope._bindings.length; + + }, + get inUse() { + + return scope._nActiveBindings; + + } + }, + controlInterpolants: { + get total() { + + return scope._controlInterpolants.length; + + }, + get inUse() { + + return scope._nActiveControlInterpolants; + + } + } + + }; + + }, + + // Memory management for AnimationAction objects + + _isActiveAction: function ( action ) { + + const index = action._cacheIndex; + return index !== null && index < this._nActiveActions; + + }, + + _addInactiveAction: function ( action, clipUuid, rootUuid ) { + + const actions = this._actions, + actionsByClip = this._actionsByClip; + + let actionsForClip = actionsByClip[ clipUuid ]; + + if ( actionsForClip === undefined ) { + + actionsForClip = { + + knownActions: [ action ], + actionByRoot: {} + + }; + + action._byClipCacheIndex = 0; + + actionsByClip[ clipUuid ] = actionsForClip; + + } else { + + const knownActions = actionsForClip.knownActions; + + action._byClipCacheIndex = knownActions.length; + knownActions.push( action ); + + } + + action._cacheIndex = actions.length; + actions.push( action ); + + actionsForClip.actionByRoot[ rootUuid ] = action; + + }, + + _removeInactiveAction: function ( action ) { + + const actions = this._actions, + lastInactiveAction = actions[ actions.length - 1 ], + cacheIndex = action._cacheIndex; + + lastInactiveAction._cacheIndex = cacheIndex; + actions[ cacheIndex ] = lastInactiveAction; + actions.pop(); + + action._cacheIndex = null; + + + const clipUuid = action._clip.uuid, + actionsByClip = this._actionsByClip, + actionsForClip = actionsByClip[ clipUuid ], + knownActionsForClip = actionsForClip.knownActions, + + lastKnownAction = + knownActionsForClip[ knownActionsForClip.length - 1 ], + + byClipCacheIndex = action._byClipCacheIndex; + + lastKnownAction._byClipCacheIndex = byClipCacheIndex; + knownActionsForClip[ byClipCacheIndex ] = lastKnownAction; + knownActionsForClip.pop(); + + action._byClipCacheIndex = null; + + + const actionByRoot = actionsForClip.actionByRoot, + rootUuid = ( action._localRoot || this._root ).uuid; + + delete actionByRoot[ rootUuid ]; + + if ( knownActionsForClip.length === 0 ) { + + delete actionsByClip[ clipUuid ]; + + } + + this._removeInactiveBindingsForAction( action ); + + }, + + _removeInactiveBindingsForAction: function ( action ) { + + const bindings = action._propertyBindings; + + for ( let i = 0, n = bindings.length; i !== n; ++ i ) { + + const binding = bindings[ i ]; + + if ( -- binding.referenceCount === 0 ) { + + this._removeInactiveBinding( binding ); + + } + + } + + }, + + _lendAction: function ( action ) { + + // [ active actions | inactive actions ] + // [ active actions >| inactive actions ] + // s a + // <-swap-> + // a s + + const actions = this._actions, + prevIndex = action._cacheIndex, + + lastActiveIndex = this._nActiveActions ++, + + firstInactiveAction = actions[ lastActiveIndex ]; + + action._cacheIndex = lastActiveIndex; + actions[ lastActiveIndex ] = action; + + firstInactiveAction._cacheIndex = prevIndex; + actions[ prevIndex ] = firstInactiveAction; + + }, + + _takeBackAction: function ( action ) { + + // [ active actions | inactive actions ] + // [ active actions |< inactive actions ] + // a s + // <-swap-> + // s a + + const actions = this._actions, + prevIndex = action._cacheIndex, + + firstInactiveIndex = -- this._nActiveActions, + + lastActiveAction = actions[ firstInactiveIndex ]; + + action._cacheIndex = firstInactiveIndex; + actions[ firstInactiveIndex ] = action; + + lastActiveAction._cacheIndex = prevIndex; + actions[ prevIndex ] = lastActiveAction; + + }, + + // Memory management for PropertyMixer objects + + _addInactiveBinding: function ( binding, rootUuid, trackName ) { + + const bindingsByRoot = this._bindingsByRootAndName, + bindings = this._bindings; + + let bindingByName = bindingsByRoot[ rootUuid ]; + + if ( bindingByName === undefined ) { + + bindingByName = {}; + bindingsByRoot[ rootUuid ] = bindingByName; + + } + + bindingByName[ trackName ] = binding; + + binding._cacheIndex = bindings.length; + bindings.push( binding ); + + }, + + _removeInactiveBinding: function ( binding ) { + + const bindings = this._bindings, + propBinding = binding.binding, + rootUuid = propBinding.rootNode.uuid, + trackName = propBinding.path, + bindingsByRoot = this._bindingsByRootAndName, + bindingByName = bindingsByRoot[ rootUuid ], + + lastInactiveBinding = bindings[ bindings.length - 1 ], + cacheIndex = binding._cacheIndex; + + lastInactiveBinding._cacheIndex = cacheIndex; + bindings[ cacheIndex ] = lastInactiveBinding; + bindings.pop(); + + delete bindingByName[ trackName ]; + + if ( Object.keys( bindingByName ).length === 0 ) { + + delete bindingsByRoot[ rootUuid ]; + + } + + }, + + _lendBinding: function ( binding ) { + + const bindings = this._bindings, + prevIndex = binding._cacheIndex, + + lastActiveIndex = this._nActiveBindings ++, + + firstInactiveBinding = bindings[ lastActiveIndex ]; + + binding._cacheIndex = lastActiveIndex; + bindings[ lastActiveIndex ] = binding; + + firstInactiveBinding._cacheIndex = prevIndex; + bindings[ prevIndex ] = firstInactiveBinding; + + }, + + _takeBackBinding: function ( binding ) { + + const bindings = this._bindings, + prevIndex = binding._cacheIndex, + + firstInactiveIndex = -- this._nActiveBindings, + + lastActiveBinding = bindings[ firstInactiveIndex ]; + + binding._cacheIndex = firstInactiveIndex; + bindings[ firstInactiveIndex ] = binding; + + lastActiveBinding._cacheIndex = prevIndex; + bindings[ prevIndex ] = lastActiveBinding; + + }, + + + // Memory management of Interpolants for weight and time scale + + _lendControlInterpolant: function () { + + const interpolants = this._controlInterpolants, + lastActiveIndex = this._nActiveControlInterpolants ++; + + let interpolant = interpolants[ lastActiveIndex ]; + + if ( interpolant === undefined ) { + + interpolant = new LinearInterpolant( + new Float32Array( 2 ), new Float32Array( 2 ), + 1, this._controlInterpolantsResultBuffer ); + + interpolant.__cacheIndex = lastActiveIndex; + interpolants[ lastActiveIndex ] = interpolant; + + } + + return interpolant; + + }, + + _takeBackControlInterpolant: function ( interpolant ) { + + const interpolants = this._controlInterpolants, + prevIndex = interpolant.__cacheIndex, + + firstInactiveIndex = -- this._nActiveControlInterpolants, + + lastActiveInterpolant = interpolants[ firstInactiveIndex ]; + + interpolant.__cacheIndex = firstInactiveIndex; + interpolants[ firstInactiveIndex ] = interpolant; + + lastActiveInterpolant.__cacheIndex = prevIndex; + interpolants[ prevIndex ] = lastActiveInterpolant; + + }, + + _controlInterpolantsResultBuffer: new Float32Array( 1 ), + + // return an action for a clip optionally using a custom root target + // object (this method allocates a lot of dynamic memory in case a + // previously unknown clip/root combination is specified) + clipAction: function ( clip, optionalRoot, blendMode ) { + + const root = optionalRoot || this._root, + rootUuid = root.uuid; + + let clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip; + + const clipUuid = clipObject !== null ? clipObject.uuid : clip; + + const actionsForClip = this._actionsByClip[ clipUuid ]; + let prototypeAction = null; + + if ( blendMode === undefined ) { + + if ( clipObject !== null ) { + + blendMode = clipObject.blendMode; + + } else { + + blendMode = NormalAnimationBlendMode; + + } + + } + + if ( actionsForClip !== undefined ) { + + const existingAction = actionsForClip.actionByRoot[ rootUuid ]; + + if ( existingAction !== undefined && existingAction.blendMode === blendMode ) { + + return existingAction; + + } + + // we know the clip, so we don't have to parse all + // the bindings again but can just copy + prototypeAction = actionsForClip.knownActions[ 0 ]; + + // also, take the clip from the prototype action + if ( clipObject === null ) + clipObject = prototypeAction._clip; + + } + + // clip must be known when specified via string + if ( clipObject === null ) return null; + + // allocate all resources required to run it + const newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode ); + + this._bindAction( newAction, prototypeAction ); + + // and make the action known to the memory manager + this._addInactiveAction( newAction, clipUuid, rootUuid ); + + return newAction; + + }, + + // get an existing action + existingAction: function ( clip, optionalRoot ) { + + const root = optionalRoot || this._root, + rootUuid = root.uuid, + + clipObject = typeof clip === 'string' ? + AnimationClip.findByName( root, clip ) : clip, + + clipUuid = clipObject ? clipObject.uuid : clip, + + actionsForClip = this._actionsByClip[ clipUuid ]; + + if ( actionsForClip !== undefined ) { + + return actionsForClip.actionByRoot[ rootUuid ] || null; + + } + + return null; + + }, + + // deactivates all previously scheduled actions + stopAllAction: function () { + + const actions = this._actions, + nActions = this._nActiveActions; + + for ( let i = nActions - 1; i >= 0; -- i ) { + + actions[ i ].stop(); + + } + + return this; + + }, + + // advance the time and update apply the animation + update: function ( deltaTime ) { + + deltaTime *= this.timeScale; + + const actions = this._actions, + nActions = this._nActiveActions, + + time = this.time += deltaTime, + timeDirection = Math.sign( deltaTime ), + + accuIndex = this._accuIndex ^= 1; + + // run active actions + + for ( let i = 0; i !== nActions; ++ i ) { + + const action = actions[ i ]; + + action._update( time, deltaTime, timeDirection, accuIndex ); + + } + + // update scene graph + + const bindings = this._bindings, + nBindings = this._nActiveBindings; + + for ( let i = 0; i !== nBindings; ++ i ) { + + bindings[ i ].apply( accuIndex ); + + } + + return this; + + }, + + // Allows you to seek to a specific time in an animation. + setTime: function ( timeInSeconds ) { + + this.time = 0; // Zero out time attribute for AnimationMixer object; + for ( let i = 0; i < this._actions.length; i ++ ) { + + this._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects. + + } + + return this.update( timeInSeconds ); // Update used to set exact time. Returns "this" AnimationMixer object. + + }, + + // return this mixer's root target object + getRoot: function () { + + return this._root; + + }, + + // free all resources specific to a particular clip + uncacheClip: function ( clip ) { + + const actions = this._actions, + clipUuid = clip.uuid, + actionsByClip = this._actionsByClip, + actionsForClip = actionsByClip[ clipUuid ]; + + if ( actionsForClip !== undefined ) { + + // note: just calling _removeInactiveAction would mess up the + // iteration state and also require updating the state we can + // just throw away + + const actionsToRemove = actionsForClip.knownActions; + + for ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) { + + const action = actionsToRemove[ i ]; + + this._deactivateAction( action ); + + const cacheIndex = action._cacheIndex, + lastInactiveAction = actions[ actions.length - 1 ]; + + action._cacheIndex = null; + action._byClipCacheIndex = null; + + lastInactiveAction._cacheIndex = cacheIndex; + actions[ cacheIndex ] = lastInactiveAction; + actions.pop(); + + this._removeInactiveBindingsForAction( action ); + + } + + delete actionsByClip[ clipUuid ]; + + } + + }, + + // free all resources specific to a particular root target object + uncacheRoot: function ( root ) { + + const rootUuid = root.uuid, + actionsByClip = this._actionsByClip; + + for ( const clipUuid in actionsByClip ) { + + const actionByRoot = actionsByClip[ clipUuid ].actionByRoot, + action = actionByRoot[ rootUuid ]; + + if ( action !== undefined ) { + + this._deactivateAction( action ); + this._removeInactiveAction( action ); + + } + + } + + const bindingsByRoot = this._bindingsByRootAndName, + bindingByName = bindingsByRoot[ rootUuid ]; + + if ( bindingByName !== undefined ) { + + for ( const trackName in bindingByName ) { + + const binding = bindingByName[ trackName ]; + binding.restoreOriginalState(); + this._removeInactiveBinding( binding ); + + } + + } + + }, + + // remove a targeted clip from the cache + uncacheAction: function ( clip, optionalRoot ) { + + const action = this.existingAction( clip, optionalRoot ); + + if ( action !== null ) { + + this._deactivateAction( action ); + this._removeInactiveAction( action ); + + } + + } + + } ); + + class Uniform { + + constructor( value ) { + + if ( typeof value === 'string' ) { + + console.warn( 'THREE.Uniform: Type parameter is no longer needed.' ); + value = arguments[ 1 ]; + + } + + this.value = value; + + } + + clone() { + + return new Uniform( this.value.clone === undefined ? this.value : this.value.clone() ); + + } + + } + + function InstancedInterleavedBuffer( array, stride, meshPerAttribute ) { + + InterleavedBuffer.call( this, array, stride ); + + this.meshPerAttribute = meshPerAttribute || 1; + + } + + InstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), { + + constructor: InstancedInterleavedBuffer, + + isInstancedInterleavedBuffer: true, + + copy: function ( source ) { + + InterleavedBuffer.prototype.copy.call( this, source ); + + this.meshPerAttribute = source.meshPerAttribute; + + return this; + + }, + + clone: function ( data ) { + + const ib = InterleavedBuffer.prototype.clone.call( this, data ); + + ib.meshPerAttribute = this.meshPerAttribute; + + return ib; + + }, + + toJSON: function ( data ) { + + const json = InterleavedBuffer.prototype.toJSON.call( this, data ); + + json.isInstancedInterleavedBuffer = true; + json.meshPerAttribute = this.meshPerAttribute; + + return json; + + } + + } ); + + function GLBufferAttribute( buffer, type, itemSize, elementSize, count ) { + + this.buffer = buffer; + this.type = type; + this.itemSize = itemSize; + this.elementSize = elementSize; + this.count = count; + + this.version = 0; + + } + + Object.defineProperty( GLBufferAttribute.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + + } ); + + Object.assign( GLBufferAttribute.prototype, { + + isGLBufferAttribute: true, + + setBuffer: function ( buffer ) { + + this.buffer = buffer; + + return this; + + }, + + setType: function ( type, elementSize ) { + + this.type = type; + this.elementSize = elementSize; + + return this; + + }, + + setItemSize: function ( itemSize ) { + + this.itemSize = itemSize; + + return this; + + }, + + setCount: function ( count ) { + + this.count = count; + + return this; + + }, + + } ); + + function Raycaster( origin, direction, near, far ) { + + this.ray = new Ray( origin, direction ); + // direction is assumed to be normalized (for accurate distance calculations) + + this.near = near || 0; + this.far = far || Infinity; + this.camera = null; + this.layers = new Layers(); + + this.params = { + Mesh: {}, + Line: { threshold: 1 }, + LOD: {}, + Points: { threshold: 1 }, + Sprite: {} + }; + + Object.defineProperties( this.params, { + PointCloud: { + get: function () { + + console.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' ); + return this.Points; + + } + } + } ); + + } + + function ascSort( a, b ) { + + return a.distance - b.distance; + + } + + function intersectObject( object, raycaster, intersects, recursive ) { + + if ( object.layers.test( raycaster.layers ) ) { + + object.raycast( raycaster, intersects ); + + } + + if ( recursive === true ) { + + const children = object.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + intersectObject( children[ i ], raycaster, intersects, true ); + + } + + } + + } + + Object.assign( Raycaster.prototype, { + + set: function ( origin, direction ) { + + // direction is assumed to be normalized (for accurate distance calculations) + + this.ray.set( origin, direction ); + + }, + + setFromCamera: function ( coords, camera ) { + + if ( ( camera && camera.isPerspectiveCamera ) ) { + + this.ray.origin.setFromMatrixPosition( camera.matrixWorld ); + this.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize(); + this.camera = camera; + + } else if ( ( camera && camera.isOrthographicCamera ) ) { + + this.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera + this.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ); + this.camera = camera; + + } else { + + console.error( 'THREE.Raycaster: Unsupported camera type.' ); + + } + + }, + + intersectObject: function ( object, recursive, optionalTarget ) { + + const intersects = optionalTarget || []; + + intersectObject( object, this, intersects, recursive ); + + intersects.sort( ascSort ); + + return intersects; + + }, + + intersectObjects: function ( objects, recursive, optionalTarget ) { + + const intersects = optionalTarget || []; + + if ( Array.isArray( objects ) === false ) { + + console.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' ); + return intersects; + + } + + for ( let i = 0, l = objects.length; i < l; i ++ ) { + + intersectObject( objects[ i ], this, intersects, recursive ); + + } + + intersects.sort( ascSort ); + + return intersects; + + } + + } ); + + /** + * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system + * + * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up. + * The azimuthal angle (theta) is measured from the positive z-axis. + */ + + class Spherical { + + constructor( radius = 1, phi = 0, theta = 0 ) { + + this.radius = radius; + this.phi = phi; // polar angle + this.theta = theta; // azimuthal angle + + return this; + + } + + set( radius, phi, theta ) { + + this.radius = radius; + this.phi = phi; + this.theta = theta; + + return this; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + copy( other ) { + + this.radius = other.radius; + this.phi = other.phi; + this.theta = other.theta; + + return this; + + } + + // restrict phi to be betwee EPS and PI-EPS + makeSafe() { + + const EPS = 0.000001; + this.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) ); + + return this; + + } + + setFromVector3( v ) { + + return this.setFromCartesianCoords( v.x, v.y, v.z ); + + } + + setFromCartesianCoords( x, y, z ) { + + this.radius = Math.sqrt( x * x + y * y + z * z ); + + if ( this.radius === 0 ) { + + this.theta = 0; + this.phi = 0; + + } else { + + this.theta = Math.atan2( x, z ); + this.phi = Math.acos( MathUtils.clamp( y / this.radius, - 1, 1 ) ); + + } + + return this; + + } + + } + + const _vector$7 = /*@__PURE__*/ new Vector2(); + + class Box2 { + + constructor( min, max ) { + + Object.defineProperty( this, 'isBox2', { value: true } ); + + this.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity ); + this.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity ); + + } + + set( min, max ) { + + this.min.copy( min ); + this.max.copy( max ); + + 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$7.copy( size ).multiplyScalar( 0.5 ); + this.min.copy( center ).sub( halfSize ); + this.max.copy( center ).add( halfSize ); + + return this; + + } + + 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 = + Infinity; + this.max.x = this.max.y = - 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 ); + + } + + getCenter( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Box2: .getCenter() target is now required' ); + target = new Vector2(); + + } + + return this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); + + } + + getSize( target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Box2: .getSize() target is now required' ); + target = new Vector2(); + + } + + return this.isEmpty() ? target.set( 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; + + } + + containsPoint( point ) { + + return point.x < this.min.x || point.x > this.max.x || + point.y < this.min.y || point.y > this.max.y ? 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; + + } + + getParameter( point, target ) { + + // This can potentially have a divide by zero if the box + // has a size dimension of 0. + + if ( target === undefined ) { + + console.warn( 'THREE.Box2: .getParameter() target is now required' ); + target = new Vector2(); + + } + + 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 ) + ); + + } + + intersectsBox( box ) { + + // using 4 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 ? false : true; + + } + + clampPoint( point, target ) { + + if ( target === undefined ) { + + console.warn( 'THREE.Box2: .clampPoint() target is now required' ); + target = new Vector2(); + + } + + return target.copy( point ).clamp( this.min, this.max ); + + } + + distanceToPoint( point ) { + + const clampedPoint = _vector$7.copy( point ).clamp( this.min, this.max ); + return clampedPoint.sub( point ).length(); + + } + + intersect( box ) { + + this.min.max( box.min ); + this.max.min( box.max ); + + return this; + + } + + union( box ) { + + this.min.min( box.min ); + this.max.max( box.max ); + + 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 ); + + } + + } + + function ImmediateRenderObject( material ) { + + Object3D.call( this ); + + this.material = material; + this.render = function ( /* renderCallback */ ) {}; + + this.hasPositions = false; + this.hasNormals = false; + this.hasColors = false; + this.hasUvs = false; + + this.positionArray = null; + this.normalArray = null; + this.colorArray = null; + this.uvArray = null; + + this.count = 0; + + } + + ImmediateRenderObject.prototype = Object.create( Object3D.prototype ); + ImmediateRenderObject.prototype.constructor = ImmediateRenderObject; + + ImmediateRenderObject.prototype.isImmediateRenderObject = true; + + const _vector$9 = /*@__PURE__*/ new Vector3(); + const _boneMatrix = /*@__PURE__*/ new Matrix4(); + const _matrixWorldInv = /*@__PURE__*/ new Matrix4(); + + + class SkeletonHelper extends LineSegments { + + constructor( object ) { + + const bones = getBoneList( object ); + + const geometry = new BufferGeometry(); + + const vertices = []; + const colors = []; + + const color1 = new Color( 0, 0, 1 ); + const color2 = new Color( 0, 1, 0 ); + + for ( let i = 0; i < bones.length; i ++ ) { + + const bone = bones[ i ]; + + if ( bone.parent && bone.parent.isBone ) { + + vertices.push( 0, 0, 0 ); + vertices.push( 0, 0, 0 ); + colors.push( color1.r, color1.g, color1.b ); + colors.push( color2.r, color2.g, color2.b ); + + } + + } + + geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + const material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } ); + + super( geometry, material ); + + this.type = 'SkeletonHelper'; + this.isSkeletonHelper = true; + + this.root = object; + this.bones = bones; + + this.matrix = object.matrixWorld; + this.matrixAutoUpdate = false; + + } + + updateMatrixWorld( force ) { + + const bones = this.bones; + + const geometry = this.geometry; + const position = geometry.getAttribute( 'position' ); + + _matrixWorldInv.copy( this.root.matrixWorld ).invert(); + + for ( let i = 0, j = 0; i < bones.length; i ++ ) { + + const bone = bones[ i ]; + + if ( bone.parent && bone.parent.isBone ) { + + _boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld ); + _vector$9.setFromMatrixPosition( _boneMatrix ); + position.setXYZ( j, _vector$9.x, _vector$9.y, _vector$9.z ); + + _boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld ); + _vector$9.setFromMatrixPosition( _boneMatrix ); + position.setXYZ( j + 1, _vector$9.x, _vector$9.y, _vector$9.z ); + + j += 2; + + } + + } + + geometry.getAttribute( 'position' ).needsUpdate = true; + + super.updateMatrixWorld( force ); + + } + + } + + + function getBoneList( object ) { + + const boneList = []; + + if ( object && object.isBone ) { + + boneList.push( object ); + + } + + for ( let i = 0; i < object.children.length; i ++ ) { + + boneList.push.apply( boneList, getBoneList( object.children[ i ] ) ); + + } + + return boneList; + + } + + class GridHelper extends LineSegments { + + constructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) { + + color1 = new Color( color1 ); + color2 = new Color( color2 ); + + const center = divisions / 2; + const step = size / divisions; + const halfSize = size / 2; + + const vertices = [], colors = []; + + for ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) { + + vertices.push( - halfSize, 0, k, halfSize, 0, k ); + vertices.push( k, 0, - halfSize, k, 0, halfSize ); + + const color = i === center ? color1 : color2; + + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + + } + + const geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + const material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } ); + + super( geometry, material ); + + this.type = 'GridHelper'; + + } + + } + + const _floatView = new Float32Array( 1 ); + new Int32Array( _floatView.buffer ); + + // + + Curve.create = function ( construct, getPoint ) { + + console.log( 'THREE.Curve.create() has been deprecated' ); + + construct.prototype = Object.create( Curve.prototype ); + construct.prototype.constructor = construct; + construct.prototype.getPoint = getPoint; + + return construct; + + }; + + // + + Object.assign( CurvePath.prototype, { + + createPointsGeometry: function ( divisions ) { + + console.warn( 'THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' ); + + // generate geometry from path points (for Line or Points objects) + + const pts = this.getPoints( divisions ); + return this.createGeometry( pts ); + + }, + + createSpacedPointsGeometry: function ( divisions ) { + + console.warn( 'THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' ); + + // generate geometry from equidistant sampling along the path + + const pts = this.getSpacedPoints( divisions ); + return this.createGeometry( pts ); + + }, + + createGeometry: function ( points ) { + + console.warn( 'THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' ); + + const geometry = new Geometry(); + + for ( let i = 0, l = points.length; i < l; i ++ ) { + + const point = points[ i ]; + geometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) ); + + } + + return geometry; + + } + + } ); + + // + + Object.assign( Path.prototype, { + + fromPoints: function ( points ) { + + console.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' ); + return this.setFromPoints( points ); + + } + + } ); + + // + + function Spline( points ) { + + console.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' ); + + CatmullRomCurve3.call( this, points ); + this.type = 'catmullrom'; + + } + + Spline.prototype = Object.create( CatmullRomCurve3.prototype ); + + Object.assign( Spline.prototype, { + + initFromArray: function ( /* a */ ) { + + console.error( 'THREE.Spline: .initFromArray() has been removed.' ); + + }, + getControlPointsArray: function ( /* optionalTarget */ ) { + + console.error( 'THREE.Spline: .getControlPointsArray() has been removed.' ); + + }, + reparametrizeByArcLength: function ( /* samplingCoef */ ) { + + console.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' ); + + } + + } ); + + GridHelper.prototype.setColors = function () { + + console.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' ); + + }; + + SkeletonHelper.prototype.update = function () { + + console.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' ); + + }; + + // + + Object.assign( Loader.prototype, { + + extractUrlBase: function ( url ) { + + console.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' ); + return LoaderUtils.extractUrlBase( url ); + + } + + } ); + + Loader.Handlers = { + + add: function ( /* regex, loader */ ) { + + console.error( 'THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.' ); + + }, + + get: function ( /* file */ ) { + + console.error( 'THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.' ); + + } + + }; + + // + + Object.assign( Box2.prototype, { + + center: function ( optionalTarget ) { + + console.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + + }, + empty: function () { + + console.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' ); + return this.isEmpty(); + + }, + isIntersectionBox: function ( box ) { + + console.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + + }, + size: function ( optionalTarget ) { + + console.warn( 'THREE.Box2: .size() has been renamed to .getSize().' ); + return this.getSize( optionalTarget ); + + } + } ); + + Object.assign( Box3.prototype, { + + center: function ( optionalTarget ) { + + console.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + + }, + empty: function () { + + console.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' ); + return this.isEmpty(); + + }, + isIntersectionBox: function ( box ) { + + console.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + + }, + isIntersectionSphere: function ( sphere ) { + + console.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); + return this.intersectsSphere( sphere ); + + }, + size: function ( optionalTarget ) { + + console.warn( 'THREE.Box3: .size() has been renamed to .getSize().' ); + return this.getSize( optionalTarget ); + + } + } ); + + Object.assign( Sphere.prototype, { + + empty: function () { + + console.warn( 'THREE.Sphere: .empty() has been renamed to .isEmpty().' ); + return this.isEmpty(); + + }, + + } ); + + Frustum.prototype.setFromMatrix = function ( m ) { + + console.warn( 'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().' ); + return this.setFromProjectionMatrix( m ); + + }; + + Object.assign( MathUtils, { + + random16: function () { + + console.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' ); + return Math.random(); + + }, + + nearestPowerOfTwo: function ( value ) { + + console.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' ); + return MathUtils.floorPowerOfTwo( value ); + + }, + + nextPowerOfTwo: function ( value ) { + + console.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' ); + return MathUtils.ceilPowerOfTwo( value ); + + } + + } ); + + Object.assign( Matrix3.prototype, { + + flattenToArrayOffset: function ( array, offset ) { + + console.warn( "THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead." ); + return this.toArray( array, offset ); + + }, + multiplyVector3: function ( vector ) { + + console.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' ); + return vector.applyMatrix3( this ); + + }, + multiplyVector3Array: function ( /* a */ ) { + + console.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' ); + + }, + applyToBufferAttribute: function ( attribute ) { + + console.warn( 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.' ); + return attribute.applyMatrix3( this ); + + }, + applyToVector3Array: function ( /* array, offset, length */ ) { + + console.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' ); + + }, + getInverse: function ( matrix ) { + + console.warn( 'THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' ); + return this.copy( matrix ).invert(); + + } + + } ); + + Object.assign( Matrix4.prototype, { + + extractPosition: function ( m ) { + + console.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' ); + return this.copyPosition( m ); + + }, + flattenToArrayOffset: function ( array, offset ) { + + console.warn( "THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead." ); + return this.toArray( array, offset ); + + }, + getPosition: function () { + + console.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' ); + return new Vector3().setFromMatrixColumn( this, 3 ); + + }, + setRotationFromQuaternion: function ( q ) { + + console.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' ); + return this.makeRotationFromQuaternion( q ); + + }, + multiplyToArray: function () { + + console.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' ); + + }, + multiplyVector3: function ( vector ) { + + console.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + + }, + multiplyVector4: function ( vector ) { + + console.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + + }, + multiplyVector3Array: function ( /* a */ ) { + + console.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' ); + + }, + rotateAxis: function ( v ) { + + console.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' ); + v.transformDirection( this ); + + }, + crossVector: function ( vector ) { + + console.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + + }, + translate: function () { + + console.error( 'THREE.Matrix4: .translate() has been removed.' ); + + }, + rotateX: function () { + + console.error( 'THREE.Matrix4: .rotateX() has been removed.' ); + + }, + rotateY: function () { + + console.error( 'THREE.Matrix4: .rotateY() has been removed.' ); + + }, + rotateZ: function () { + + console.error( 'THREE.Matrix4: .rotateZ() has been removed.' ); + + }, + rotateByAxis: function () { + + console.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' ); + + }, + applyToBufferAttribute: function ( attribute ) { + + console.warn( 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.' ); + return attribute.applyMatrix4( this ); + + }, + applyToVector3Array: function ( /* array, offset, length */ ) { + + console.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' ); + + }, + makeFrustum: function ( left, right, bottom, top, near, far ) { + + console.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' ); + return this.makePerspective( left, right, top, bottom, near, far ); + + }, + getInverse: function ( matrix ) { + + console.warn( 'THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' ); + return this.copy( matrix ).invert(); + + } + + } ); + + Plane.prototype.isIntersectionLine = function ( line ) { + + console.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' ); + return this.intersectsLine( line ); + + }; + + Object.assign( Quaternion.prototype, { + + multiplyVector3: function ( vector ) { + + console.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' ); + return vector.applyQuaternion( this ); + + }, + inverse: function ( ) { + + console.warn( 'THREE.Quaternion: .inverse() has been renamed to invert().' ); + return this.invert(); + + } + + } ); + + Object.assign( Ray.prototype, { + + isIntersectionBox: function ( box ) { + + console.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + + }, + isIntersectionPlane: function ( plane ) { + + console.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' ); + return this.intersectsPlane( plane ); + + }, + isIntersectionSphere: function ( sphere ) { + + console.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); + return this.intersectsSphere( sphere ); + + } + + } ); + + Object.assign( Triangle.prototype, { + + area: function () { + + console.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' ); + return this.getArea(); + + }, + barycoordFromPoint: function ( point, target ) { + + console.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' ); + return this.getBarycoord( point, target ); + + }, + midpoint: function ( target ) { + + console.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' ); + return this.getMidpoint( target ); + + }, + normal: function ( target ) { + + console.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' ); + return this.getNormal( target ); + + }, + plane: function ( target ) { + + console.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' ); + return this.getPlane( target ); + + } + + } ); + + Object.assign( Triangle, { + + barycoordFromPoint: function ( point, a, b, c, target ) { + + console.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' ); + return Triangle.getBarycoord( point, a, b, c, target ); + + }, + normal: function ( a, b, c, target ) { + + console.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' ); + return Triangle.getNormal( a, b, c, target ); + + } + + } ); + + Object.assign( Shape.prototype, { + + extractAllPoints: function ( divisions ) { + + console.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' ); + return this.extractPoints( divisions ); + + }, + extrude: function ( options ) { + + console.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' ); + return new ExtrudeGeometry( this, options ); + + }, + makeGeometry: function ( options ) { + + console.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' ); + return new ShapeGeometry( this, options ); + + } + + } ); + + Object.assign( Vector2.prototype, { + + fromAttribute: function ( attribute, index, offset ) { + + console.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + + }, + distanceToManhattan: function ( v ) { + + console.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' ); + return this.manhattanDistanceTo( v ); + + }, + lengthManhattan: function () { + + console.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' ); + return this.manhattanLength(); + + } + + } ); + + Object.assign( Vector3.prototype, { + + setEulerFromRotationMatrix: function () { + + console.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' ); + + }, + setEulerFromQuaternion: function () { + + console.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' ); + + }, + getPositionFromMatrix: function ( m ) { + + console.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' ); + return this.setFromMatrixPosition( m ); + + }, + getScaleFromMatrix: function ( m ) { + + console.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' ); + return this.setFromMatrixScale( m ); + + }, + getColumnFromMatrix: function ( index, matrix ) { + + console.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' ); + return this.setFromMatrixColumn( matrix, index ); + + }, + applyProjection: function ( m ) { + + console.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' ); + return this.applyMatrix4( m ); + + }, + fromAttribute: function ( attribute, index, offset ) { + + console.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + + }, + distanceToManhattan: function ( v ) { + + console.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' ); + return this.manhattanDistanceTo( v ); + + }, + lengthManhattan: function () { + + console.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' ); + return this.manhattanLength(); + + } + + } ); + + Object.assign( Vector4.prototype, { + + fromAttribute: function ( attribute, index, offset ) { + + console.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + + }, + lengthManhattan: function () { + + console.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' ); + return this.manhattanLength(); + + } + + } ); + + // + + Object.assign( Geometry.prototype, { + + computeTangents: function () { + + console.error( 'THREE.Geometry: .computeTangents() has been removed.' ); + + }, + computeLineDistances: function () { + + console.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' ); + + }, + applyMatrix: function ( matrix ) { + + console.warn( 'THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().' ); + return this.applyMatrix4( matrix ); + + } + + } ); + + Object.assign( Object3D.prototype, { + + getChildByName: function ( name ) { + + console.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' ); + return this.getObjectByName( name ); + + }, + renderDepth: function () { + + console.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' ); + + }, + translate: function ( distance, axis ) { + + console.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' ); + return this.translateOnAxis( axis, distance ); + + }, + getWorldRotation: function () { + + console.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' ); + + }, + applyMatrix: function ( matrix ) { + + console.warn( 'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().' ); + return this.applyMatrix4( matrix ); + + } + + } ); + + Object.defineProperties( Object3D.prototype, { + + eulerOrder: { + get: function () { + + console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); + return this.rotation.order; + + }, + set: function ( value ) { + + console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); + this.rotation.order = value; + + } + }, + useQuaternion: { + get: function () { + + console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); + + }, + set: function () { + + console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); + + } + } + + } ); + + Object.assign( Mesh.prototype, { + + setDrawMode: function () { + + console.error( 'THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' ); + + }, + + } ); + + Object.defineProperties( Mesh.prototype, { + + drawMode: { + get: function () { + + console.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.' ); + return TrianglesDrawMode; + + }, + set: function () { + + console.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' ); + + } + } + + } ); + + Object.defineProperties( LOD.prototype, { + + objects: { + get: function () { + + console.warn( 'THREE.LOD: .objects has been renamed to .levels.' ); + return this.levels; + + } + } + + } ); + + Object.defineProperty( Skeleton.prototype, 'useVertexTexture', { + + get: function () { + + console.warn( 'THREE.Skeleton: useVertexTexture has been removed.' ); + + }, + set: function () { + + console.warn( 'THREE.Skeleton: useVertexTexture has been removed.' ); + + } + + } ); + + SkinnedMesh.prototype.initBones = function () { + + console.error( 'THREE.SkinnedMesh: initBones() has been removed.' ); + + }; + + Object.defineProperty( Curve.prototype, '__arcLengthDivisions', { + + get: function () { + + console.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' ); + return this.arcLengthDivisions; + + }, + set: function ( value ) { + + console.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' ); + this.arcLengthDivisions = value; + + } + + } ); + + // + + PerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) { + + console.warn( "THREE.PerspectiveCamera.setLens is deprecated. " + + "Use .setFocalLength and .filmGauge for a photographic setup." ); + + if ( filmGauge !== undefined ) this.filmGauge = filmGauge; + this.setFocalLength( focalLength ); + + }; + + // + + Object.defineProperties( Light.prototype, { + onlyShadow: { + set: function () { + + console.warn( 'THREE.Light: .onlyShadow has been removed.' ); + + } + }, + shadowCameraFov: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' ); + this.shadow.camera.fov = value; + + } + }, + shadowCameraLeft: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' ); + this.shadow.camera.left = value; + + } + }, + shadowCameraRight: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' ); + this.shadow.camera.right = value; + + } + }, + shadowCameraTop: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' ); + this.shadow.camera.top = value; + + } + }, + shadowCameraBottom: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' ); + this.shadow.camera.bottom = value; + + } + }, + shadowCameraNear: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' ); + this.shadow.camera.near = value; + + } + }, + shadowCameraFar: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' ); + this.shadow.camera.far = value; + + } + }, + shadowCameraVisible: { + set: function () { + + console.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' ); + + } + }, + shadowBias: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' ); + this.shadow.bias = value; + + } + }, + shadowDarkness: { + set: function () { + + console.warn( 'THREE.Light: .shadowDarkness has been removed.' ); + + } + }, + shadowMapWidth: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' ); + this.shadow.mapSize.width = value; + + } + }, + shadowMapHeight: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' ); + this.shadow.mapSize.height = value; + + } + } + } ); + + // + + Object.defineProperties( BufferAttribute.prototype, { + + length: { + get: function () { + + console.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' ); + return this.array.length; + + } + }, + dynamic: { + get: function () { + + console.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' ); + return this.usage === DynamicDrawUsage; + + }, + set: function ( /* value */ ) { + + console.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' ); + this.setUsage( DynamicDrawUsage ); + + } + } + + } ); + + Object.assign( BufferAttribute.prototype, { + setDynamic: function ( value ) { + + console.warn( 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.' ); + this.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage ); + return this; + + }, + copyIndicesArray: function ( /* indices */ ) { + + console.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' ); + + }, + setArray: function ( /* array */ ) { + + console.error( 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' ); + + } + } ); + + Object.assign( BufferGeometry.prototype, { + + addIndex: function ( index ) { + + console.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' ); + this.setIndex( index ); + + }, + addAttribute: function ( name, attribute ) { + + console.warn( 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().' ); + + if ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) { + + console.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' ); + + return this.setAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) ); + + } + + if ( name === 'index' ) { + + console.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' ); + this.setIndex( attribute ); + + return this; + + } + + return this.setAttribute( name, attribute ); + + }, + addDrawCall: function ( start, count, indexOffset ) { + + if ( indexOffset !== undefined ) { + + console.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' ); + + } + + console.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' ); + this.addGroup( start, count ); + + }, + clearDrawCalls: function () { + + console.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' ); + this.clearGroups(); + + }, + computeTangents: function () { + + console.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' ); + + }, + computeOffsets: function () { + + console.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' ); + + }, + removeAttribute: function ( name ) { + + console.warn( 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().' ); + + return this.deleteAttribute( name ); + + }, + applyMatrix: function ( matrix ) { + + console.warn( 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().' ); + return this.applyMatrix4( matrix ); + + } + + } ); + + Object.defineProperties( BufferGeometry.prototype, { + + drawcalls: { + get: function () { + + console.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' ); + return this.groups; + + } + }, + offsets: { + get: function () { + + console.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' ); + return this.groups; + + } + } + + } ); + + Object.defineProperties( InstancedBufferGeometry.prototype, { + + maxInstancedCount: { + get: function () { + + console.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' ); + return this.instanceCount; + + }, + set: function ( value ) { + + console.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' ); + this.instanceCount = value; + + } + } + + } ); + + Object.defineProperties( Raycaster.prototype, { + + linePrecision: { + get: function () { + + console.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' ); + return this.params.Line.threshold; + + }, + set: function ( value ) { + + console.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' ); + this.params.Line.threshold = value; + + } + } + + } ); + + Object.defineProperties( InterleavedBuffer.prototype, { + + dynamic: { + get: function () { + + console.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' ); + return this.usage === DynamicDrawUsage; + + }, + set: function ( value ) { + + console.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' ); + this.setUsage( value ); + + } + } + + } ); + + Object.assign( InterleavedBuffer.prototype, { + setDynamic: function ( value ) { + + console.warn( 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.' ); + this.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage ); + return this; + + }, + setArray: function ( /* array */ ) { + + console.error( 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' ); + + } + } ); + + // + + Object.assign( ExtrudeBufferGeometry.prototype, { + + getArrays: function () { + + console.error( 'THREE.ExtrudeBufferGeometry: .getArrays() has been removed.' ); + + }, + + addShapeList: function () { + + console.error( 'THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.' ); + + }, + + addShape: function () { + + console.error( 'THREE.ExtrudeBufferGeometry: .addShape() has been removed.' ); + + } + + } ); + + // + + Object.assign( Scene.prototype, { + + dispose: function () { + + console.error( 'THREE.Scene: .dispose() has been removed.' ); + + } + + } ); + + // + + Object.defineProperties( Uniform.prototype, { + + dynamic: { + set: function () { + + console.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' ); + + } + }, + onUpdate: { + value: function () { + + console.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' ); + return this; + + } + } + + } ); + + // + + Object.defineProperties( Material.prototype, { + + wrapAround: { + get: function () { + + console.warn( 'THREE.Material: .wrapAround has been removed.' ); + + }, + set: function () { + + console.warn( 'THREE.Material: .wrapAround has been removed.' ); + + } + }, + + overdraw: { + get: function () { + + console.warn( 'THREE.Material: .overdraw has been removed.' ); + + }, + set: function () { + + console.warn( 'THREE.Material: .overdraw has been removed.' ); + + } + }, + + wrapRGB: { + get: function () { + + console.warn( 'THREE.Material: .wrapRGB has been removed.' ); + return new Color(); + + } + }, + + shading: { + get: function () { + + console.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + + }, + set: function ( value ) { + + console.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + this.flatShading = ( value === FlatShading ); + + } + }, + + stencilMask: { + get: function () { + + console.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' ); + return this.stencilFuncMask; + + }, + set: function ( value ) { + + console.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' ); + this.stencilFuncMask = value; + + } + } + + } ); + + Object.defineProperties( MeshPhongMaterial.prototype, { + + metal: { + get: function () { + + console.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' ); + return false; + + }, + set: function () { + + console.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' ); + + } + } + + } ); + + Object.defineProperties( MeshPhysicalMaterial.prototype, { + + transparency: { + get: function () { + + console.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' ); + return this.transmission; + + }, + set: function ( value ) { + + console.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' ); + this.transmission = value; + + } + } + + } ); + + Object.defineProperties( ShaderMaterial.prototype, { + + derivatives: { + get: function () { + + console.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); + return this.extensions.derivatives; + + }, + set: function ( value ) { + + console.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); + this.extensions.derivatives = value; + + } + } + + } ); + + // + + Object.assign( WebGLRenderer.prototype, { + + clearTarget: function ( renderTarget, color, depth, stencil ) { + + console.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' ); + this.setRenderTarget( renderTarget ); + this.clear( color, depth, stencil ); + + }, + animate: function ( callback ) { + + console.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' ); + this.setAnimationLoop( callback ); + + }, + getCurrentRenderTarget: function () { + + console.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' ); + return this.getRenderTarget(); + + }, + getMaxAnisotropy: function () { + + console.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' ); + return this.capabilities.getMaxAnisotropy(); + + }, + getPrecision: function () { + + console.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' ); + return this.capabilities.precision; + + }, + resetGLState: function () { + + console.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' ); + return this.state.reset(); + + }, + supportsFloatTextures: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \'OES_texture_float\' ).' ); + return this.extensions.get( 'OES_texture_float' ); + + }, + supportsHalfFloatTextures: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \'OES_texture_half_float\' ).' ); + return this.extensions.get( 'OES_texture_half_float' ); + + }, + supportsStandardDerivatives: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \'OES_standard_derivatives\' ).' ); + return this.extensions.get( 'OES_standard_derivatives' ); + + }, + supportsCompressedTextureS3TC: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \'WEBGL_compressed_texture_s3tc\' ).' ); + return this.extensions.get( 'WEBGL_compressed_texture_s3tc' ); + + }, + supportsCompressedTexturePVRTC: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \'WEBGL_compressed_texture_pvrtc\' ).' ); + return this.extensions.get( 'WEBGL_compressed_texture_pvrtc' ); + + }, + supportsBlendMinMax: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \'EXT_blend_minmax\' ).' ); + return this.extensions.get( 'EXT_blend_minmax' ); + + }, + supportsVertexTextures: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' ); + return this.capabilities.vertexTextures; + + }, + supportsInstancedArrays: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \'ANGLE_instanced_arrays\' ).' ); + return this.extensions.get( 'ANGLE_instanced_arrays' ); + + }, + enableScissorTest: function ( boolean ) { + + console.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' ); + this.setScissorTest( boolean ); + + }, + initMaterial: function () { + + console.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' ); + + }, + addPrePlugin: function () { + + console.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' ); + + }, + addPostPlugin: function () { + + console.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' ); + + }, + updateShadowMap: function () { + + console.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' ); + + }, + setFaceCulling: function () { + + console.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' ); + + }, + allocTextureUnit: function () { + + console.warn( 'THREE.WebGLRenderer: .allocTextureUnit() has been removed.' ); + + }, + setTexture: function () { + + console.warn( 'THREE.WebGLRenderer: .setTexture() has been removed.' ); + + }, + setTexture2D: function () { + + console.warn( 'THREE.WebGLRenderer: .setTexture2D() has been removed.' ); + + }, + setTextureCube: function () { + + console.warn( 'THREE.WebGLRenderer: .setTextureCube() has been removed.' ); + + }, + getActiveMipMapLevel: function () { + + console.warn( 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().' ); + return this.getActiveMipmapLevel(); + + } + + } ); + + Object.defineProperties( WebGLRenderer.prototype, { + + shadowMapEnabled: { + get: function () { + + return this.shadowMap.enabled; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' ); + this.shadowMap.enabled = value; + + } + }, + shadowMapType: { + get: function () { + + return this.shadowMap.type; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' ); + this.shadowMap.type = value; + + } + }, + shadowMapCullFace: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' ); + return undefined; + + }, + set: function ( /* value */ ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' ); + + } + }, + context: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' ); + return this.getContext(); + + } + }, + vr: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .vr has been renamed to .xr' ); + return this.xr; + + } + }, + gammaInput: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' ); + return false; + + }, + set: function () { + + console.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' ); + + } + }, + gammaOutput: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' ); + return false; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' ); + this.outputEncoding = ( value === true ) ? sRGBEncoding : LinearEncoding; + + } + }, + toneMappingWhitePoint: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' ); + return 1.0; + + }, + set: function () { + + console.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' ); + + } + }, + + } ); + + Object.defineProperties( WebGLShadowMap.prototype, { + + cullFace: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' ); + return undefined; + + }, + set: function ( /* cullFace */ ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' ); + + } + }, + renderReverseSided: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' ); + return undefined; + + }, + set: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' ); + + } + }, + renderSingleSided: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' ); + return undefined; + + }, + set: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' ); + + } + } + + } ); + + // + + Object.defineProperties( WebGLRenderTarget.prototype, { + + wrapS: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); + return this.texture.wrapS; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); + this.texture.wrapS = value; + + } + }, + wrapT: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); + return this.texture.wrapT; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); + this.texture.wrapT = value; + + } + }, + magFilter: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); + return this.texture.magFilter; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); + this.texture.magFilter = value; + + } + }, + minFilter: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); + return this.texture.minFilter; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); + this.texture.minFilter = value; + + } + }, + anisotropy: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); + return this.texture.anisotropy; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); + this.texture.anisotropy = value; + + } + }, + offset: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); + return this.texture.offset; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); + this.texture.offset = value; + + } + }, + repeat: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); + return this.texture.repeat; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); + this.texture.repeat = value; + + } + }, + format: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); + return this.texture.format; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); + this.texture.format = value; + + } + }, + type: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); + return this.texture.type; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); + this.texture.type = value; + + } + }, + generateMipmaps: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); + return this.texture.generateMipmaps; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); + this.texture.generateMipmaps = value; + + } + } + + } ); + + // + + Object.defineProperties( Audio.prototype, { + + load: { + value: function ( file ) { + + console.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' ); + const scope = this; + const audioLoader = new AudioLoader(); + audioLoader.load( file, function ( buffer ) { + + scope.setBuffer( buffer ); + + } ); + return this; + + } + }, + startTime: { + set: function () { + + console.warn( 'THREE.Audio: .startTime is now .play( delay ).' ); + + } + } + + } ); + + // + + CubeCamera.prototype.updateCubeMap = function ( renderer, scene ) { + + console.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' ); + return this.update( renderer, scene ); + + }; + + CubeCamera.prototype.clear = function ( renderer, color, depth, stencil ) { + + console.warn( 'THREE.CubeCamera: .clear() is now .renderTarget.clear().' ); + return this.renderTarget.clear( renderer, color, depth, stencil ); + + }; + + ImageUtils.crossOrigin = undefined; + + ImageUtils.loadTexture = function ( url, mapping, onLoad, onError ) { + + console.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' ); + + const loader = new TextureLoader(); + loader.setCrossOrigin( this.crossOrigin ); + + const texture = loader.load( url, onLoad, undefined, onError ); + + if ( mapping ) texture.mapping = mapping; + + return texture; + + }; + + ImageUtils.loadTextureCube = function ( urls, mapping, onLoad, onError ) { + + console.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' ); + + const loader = new CubeTextureLoader(); + loader.setCrossOrigin( this.crossOrigin ); + + const texture = loader.load( urls, onLoad, undefined, onError ); + + if ( mapping ) texture.mapping = mapping; + + return texture; + + }; + + ImageUtils.loadCompressedTexture = function () { + + console.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' ); + + }; + + ImageUtils.loadCompressedTextureCube = function () { + + console.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' ); + + }; + + if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { + + /* eslint-disable no-undef */ + __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: { + revision: REVISION, + } } ) ); + /* eslint-enable no-undef */ + + } + + var DragControls = function ( _objects, _camera, _domElement ) { + + var _plane = new Plane(); + var _raycaster = new Raycaster(); + + var _mouse = new Vector2(); + var _offset = new Vector3(); + var _intersection = new Vector3(); + var _worldPosition = new Vector3(); + var _inverseMatrix = new Matrix4(); + var _intersections = []; + + var _selected = null, _hovered = null; + + // + + var scope = this; + + function activate() { + + _domElement.addEventListener( 'pointermove', onPointerMove, false ); + _domElement.addEventListener( 'pointerdown', onPointerDown, false ); + _domElement.addEventListener( 'pointerup', onPointerCancel, false ); + _domElement.addEventListener( 'pointerleave', onPointerCancel, false ); + _domElement.addEventListener( 'touchmove', onTouchMove, false ); + _domElement.addEventListener( 'touchstart', onTouchStart, false ); + _domElement.addEventListener( 'touchend', onTouchEnd, false ); + + } + + function deactivate() { + + _domElement.removeEventListener( 'pointermove', onPointerMove, false ); + _domElement.removeEventListener( 'pointerdown', onPointerDown, false ); + _domElement.removeEventListener( 'pointerup', onPointerCancel, false ); + _domElement.removeEventListener( 'pointerleave', onPointerCancel, false ); + _domElement.removeEventListener( 'touchmove', onTouchMove, false ); + _domElement.removeEventListener( 'touchstart', onTouchStart, false ); + _domElement.removeEventListener( 'touchend', onTouchEnd, false ); + + _domElement.style.cursor = ''; + + } + + function dispose() { + + deactivate(); + + } + + function getObjects() { + + return _objects; + + } + + function onPointerMove( event ) { + + event.preventDefault(); + + switch ( event.pointerType ) { + + case 'mouse': + case 'pen': + onMouseMove( event ); + break; + + // TODO touch + + } + + } + + function onMouseMove( event ) { + + var rect = _domElement.getBoundingClientRect(); + + _mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1; + _mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1; + + _raycaster.setFromCamera( _mouse, _camera ); + + if ( _selected && scope.enabled ) { + + if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) { + + _selected.position.copy( _intersection.sub( _offset ).applyMatrix4( _inverseMatrix ) ); + + } + + scope.dispatchEvent( { type: 'drag', object: _selected } ); + + return; + + } + + _intersections.length = 0; + + _raycaster.setFromCamera( _mouse, _camera ); + _raycaster.intersectObjects( _objects, true, _intersections ); + + if ( _intersections.length > 0 ) { + + var object = _intersections[ 0 ].object; + + _plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( object.matrixWorld ) ); + + if ( _hovered !== object ) { + + scope.dispatchEvent( { type: 'hoveron', object: object } ); + + _domElement.style.cursor = 'pointer'; + _hovered = object; + + } + + } else { + + if ( _hovered !== null ) { + + scope.dispatchEvent( { type: 'hoveroff', object: _hovered } ); + + _domElement.style.cursor = 'auto'; + _hovered = null; + + } + + } + + } + + function onPointerDown( event ) { + + event.preventDefault(); + + switch ( event.pointerType ) { + + case 'mouse': + case 'pen': + onMouseDown( event ); + break; + + // TODO touch + + } + + } + + function onMouseDown( event ) { + + event.preventDefault(); + + _intersections.length = 0; + + _raycaster.setFromCamera( _mouse, _camera ); + _raycaster.intersectObjects( _objects, true, _intersections ); + + if ( _intersections.length > 0 ) { + + _selected = ( scope.transformGroup === true ) ? _objects[ 0 ] : _intersections[ 0 ].object; + + if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) { + + _inverseMatrix.copy( _selected.parent.matrixWorld ).invert(); + _offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) ); + + } + + _domElement.style.cursor = 'move'; + + scope.dispatchEvent( { type: 'dragstart', object: _selected } ); + + } + + + } + + function onPointerCancel( event ) { + + event.preventDefault(); + + switch ( event.pointerType ) { + + case 'mouse': + case 'pen': + onMouseCancel( event ); + break; + + // TODO touch + + } + + } + + function onMouseCancel( event ) { + + event.preventDefault(); + + if ( _selected ) { + + scope.dispatchEvent( { type: 'dragend', object: _selected } ); + + _selected = null; + + } + + _domElement.style.cursor = _hovered ? 'pointer' : 'auto'; + + } + + function onTouchMove( event ) { + + event.preventDefault(); + event = event.changedTouches[ 0 ]; + + var rect = _domElement.getBoundingClientRect(); + + _mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1; + _mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1; + + _raycaster.setFromCamera( _mouse, _camera ); + + if ( _selected && scope.enabled ) { + + if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) { + + _selected.position.copy( _intersection.sub( _offset ).applyMatrix4( _inverseMatrix ) ); + + } + + scope.dispatchEvent( { type: 'drag', object: _selected } ); + + return; + + } + + } + + function onTouchStart( event ) { + + event.preventDefault(); + event = event.changedTouches[ 0 ]; + + var rect = _domElement.getBoundingClientRect(); + + _mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1; + _mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1; + + _intersections.length = 0; + + _raycaster.setFromCamera( _mouse, _camera ); + _raycaster.intersectObjects( _objects, true, _intersections ); + + if ( _intersections.length > 0 ) { + + _selected = ( scope.transformGroup === true ) ? _objects[ 0 ] : _intersections[ 0 ].object; + + _plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) ); + + if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) { + + _inverseMatrix.copy( _selected.parent.matrixWorld ).invert(); + _offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) ); + + } + + _domElement.style.cursor = 'move'; + + scope.dispatchEvent( { type: 'dragstart', object: _selected } ); + + } + + + } + + function onTouchEnd( event ) { + + event.preventDefault(); + + if ( _selected ) { + + scope.dispatchEvent( { type: 'dragend', object: _selected } ); + + _selected = null; + + } + + _domElement.style.cursor = 'auto'; + + } + + activate(); + + // API + + this.enabled = true; + this.transformGroup = false; + + this.activate = activate; + this.deactivate = deactivate; + this.dispose = dispose; + this.getObjects = getObjects; + + }; + + DragControls.prototype = Object.create( EventDispatcher.prototype ); + DragControls.prototype.constructor = DragControls; + + function forceCenter(x, y, z) { + var nodes, strength = 1; + + if (x == null) x = 0; + if (y == null) y = 0; + if (z == null) z = 0; + + function force() { + var i, + n = nodes.length, + node, + sx = 0, + sy = 0, + sz = 0; + + for (i = 0; i < n; ++i) { + node = nodes[i], sx += node.x || 0, sy += node.y || 0, sz += node.z || 0; + } + + for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, sz = (sz / n - z) * strength, i = 0; i < n; ++i) { + node = nodes[i]; + if (sx) { node.x -= sx; } + if (sy) { node.y -= sy; } + if (sz) { node.z -= sz; } + } + } + + force.initialize = function(_) { + nodes = _; + }; + + force.x = function(_) { + return arguments.length ? (x = +_, force) : x; + }; + + force.y = function(_) { + return arguments.length ? (y = +_, force) : y; + }; + + force.z = function(_) { + return arguments.length ? (z = +_, force) : z; + }; + + force.strength = function(_) { + return arguments.length ? (strength = +_, force) : strength; + }; + + return force; + } + + function tree_add$2(d) { + var x = +this._x.call(null, d); + return add$3(this.cover(x), x, d); + } + + function add$3(tree, x, d) { + if (isNaN(x)) return tree; // ignore invalid points + + var parent, + node = tree._root, + leaf = {data: d}, + x0 = tree._x0, + x1 = tree._x1, + xm, + xp, + right, + i, + j; + + // If the tree is empty, initialize the root as a leaf. + if (!node) return tree._root = leaf, tree; + + // Find the existing leaf for the new point, or add it. + while (node.length) { + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (parent = node, !(node = node[i = +right])) return parent[i] = leaf, tree; + } + + // Is the new point is exactly coincident with the existing point? + xp = +tree._x.call(null, node.data); + if (x === xp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; + + // Otherwise, split the leaf node until the old and new point are separated. + do { + parent = parent ? parent[i] = new Array(2) : tree._root = new Array(2); + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + } while ((i = +right) === (j = +(xp >= xm))); + return parent[j] = node, parent[i] = leaf, tree; + } + + function addAll$2(data) { + var i, n = data.length, + x, + xz = new Array(n), + x0 = Infinity, + x1 = -Infinity; + + // Compute the points and their extent. + for (i = 0; i < n; ++i) { + if (isNaN(x = +this._x.call(null, data[i]))) continue; + xz[i] = x; + if (x < x0) x0 = x; + if (x > x1) x1 = x; + } + + // If there were no (valid) points, inherit the existing extent. + if (x1 < x0) x0 = this._x0, x1 = this._x1; + + // Expand the tree to cover the new points. + this.cover(x0).cover(x1); + + // Add the new points. + for (i = 0; i < n; ++i) { + add$3(this, xz[i], data[i]); + } + + return this; + } + + function tree_cover$2(x) { + if (isNaN(x = +x)) return this; // ignore invalid points + + var x0 = this._x0, + x1 = this._x1; + + // If the binarytree has no extent, initialize them. + // Integer extent are necessary so that if we later double the extent, + // the existing half boundaries don’t change due to floating point error! + if (isNaN(x0)) { + x1 = (x0 = Math.floor(x)) + 1; + } + + // Otherwise, double repeatedly to cover. + else if (x0 > x || x > x1) { + var z = x1 - x0, + node = this._root, + parent, + i; + + switch (i = +(x < (x0 + x1) / 2)) { + case 0: { + do parent = new Array(2), parent[i] = node, node = parent; + while (z *= 2, x1 = x0 + z, x > x1); + break; + } + case 1: { + do parent = new Array(2), parent[i] = node, node = parent; + while (z *= 2, x0 = x1 - z, x0 > x); + break; + } + } + + if (this._root && this._root.length) this._root = node; + } + + // If the binarytree covers the point already, just return. + else return this; + + this._x0 = x0; + this._x1 = x1; + return this; + } + + function tree_data$2() { + var data = []; + this.visit(function(node) { + if (!node.length) do data.push(node.data); while (node = node.next) + }); + return data; + } + + function tree_extent$2(_) { + return arguments.length + ? this.cover(+_[0][0]).cover(+_[1][0]) + : isNaN(this._x0) ? undefined : [[this._x0], [this._x1]]; + } + + function Half(node, x0, x1) { + this.node = node; + this.x0 = x0; + this.x1 = x1; + } + + function tree_find$2(x, radius) { + var data, + x0 = this._x0, + x1, + x2, + x3 = this._x1, + halves = [], + node = this._root, + q, + i; + + if (node) halves.push(new Half(node, x0, x3)); + if (radius == null) radius = Infinity; + else { + x0 = x - radius; + x3 = x + radius; + } + + while (q = halves.pop()) { + + // Stop searching if this half can’t contain a closer node. + if (!(node = q.node) + || (x1 = q.x0) > x3 + || (x2 = q.x1) < x0) continue; + + // Bisect the current half. + if (node.length) { + var xm = (x1 + x2) / 2; + + halves.push( + new Half(node[1], xm, x2), + new Half(node[0], x1, xm) + ); + + // Visit the closest half first. + if (i = +(x >= xm)) { + q = halves[halves.length - 1]; + halves[halves.length - 1] = halves[halves.length - 1 - i]; + halves[halves.length - 1 - i] = q; + } + } + + // Visit this point. (Visiting coincident points isn’t necessary!) + else { + var d = Math.abs(x - +this._x.call(null, node.data)); + if (d < radius) { + radius = d; + x0 = x - d; + x3 = x + d; + data = node.data; + } + } + } + + return data; + } + + function tree_remove$2(d) { + if (isNaN(x = +this._x.call(null, d))) return this; // ignore invalid points + + var parent, + node = this._root, + retainer, + previous, + next, + x0 = this._x0, + x1 = this._x1, + x, + xm, + right, + i, + j; + + // If the tree is empty, initialize the root as a leaf. + if (!node) return this; + + // Find the leaf node for the point. + // While descending, also retain the deepest parent with a non-removed sibling. + if (node.length) while (true) { + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (!(parent = node, node = node[i = +right])) return this; + if (!node.length) break; + if (parent[(i + 1) & 1]) retainer = parent, j = i; + } + + // Find the point to remove. + while (node.data !== d) if (!(previous = node, node = node.next)) return this; + if (next = node.next) delete node.next; + + // If there are multiple coincident points, remove just the point. + if (previous) return (next ? previous.next = next : delete previous.next), this; + + // If this is the root point, remove it. + if (!parent) return this._root = next, this; + + // Remove this leaf. + next ? parent[i] = next : delete parent[i]; + + // If the parent now contains exactly one leaf, collapse superfluous parents. + if ((node = parent[0] || parent[1]) + && node === (parent[1] || parent[0]) + && !node.length) { + if (retainer) retainer[j] = node; + else this._root = node; + } + + return this; + } + + function removeAll$3(data) { + for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]); + return this; + } + + function tree_root$2() { + return this._root; + } + + function tree_size$2() { + var size = 0; + this.visit(function(node) { + if (!node.length) do ++size; while (node = node.next) + }); + return size; + } + + function tree_visit$2(callback) { + var halves = [], q, node = this._root, child, x0, x1; + if (node) halves.push(new Half(node, this._x0, this._x1)); + while (q = halves.pop()) { + if (!callback(node = q.node, x0 = q.x0, x1 = q.x1) && node.length) { + var xm = (x0 + x1) / 2; + if (child = node[1]) halves.push(new Half(child, xm, x1)); + if (child = node[0]) halves.push(new Half(child, x0, xm)); + } + } + return this; + } + + function tree_visitAfter$2(callback) { + var halves = [], next = [], q; + if (this._root) halves.push(new Half(this._root, this._x0, this._x1)); + while (q = halves.pop()) { + var node = q.node; + if (node.length) { + var child, x0 = q.x0, x1 = q.x1, xm = (x0 + x1) / 2; + if (child = node[0]) halves.push(new Half(child, x0, xm)); + if (child = node[1]) halves.push(new Half(child, xm, x1)); + } + next.push(q); + } + while (q = next.pop()) { + callback(q.node, q.x0, q.x1); + } + return this; + } + + function defaultX$2(d) { + return d[0]; + } + + function tree_x$2(_) { + return arguments.length ? (this._x = _, this) : this._x; + } + + function binarytree(nodes, x) { + var tree = new Binarytree(x == null ? defaultX$2 : x, NaN, NaN); + return nodes == null ? tree : tree.addAll(nodes); + } + + function Binarytree(x, x0, x1) { + this._x = x; + this._x0 = x0; + this._x1 = x1; + this._root = undefined; + } + + function leaf_copy$2(leaf) { + var copy = {data: leaf.data}, next = copy; + while (leaf = leaf.next) next = next.next = {data: leaf.data}; + return copy; + } + + var treeProto$2 = binarytree.prototype = Binarytree.prototype; + + treeProto$2.copy = function() { + var copy = new Binarytree(this._x, this._x0, this._x1), + node = this._root, + nodes, + child; + + if (!node) return copy; + + if (!node.length) return copy._root = leaf_copy$2(node), copy; + + nodes = [{source: node, target: copy._root = new Array(2)}]; + while (node = nodes.pop()) { + for (var i = 0; i < 2; ++i) { + if (child = node.source[i]) { + if (child.length) nodes.push({source: child, target: node.target[i] = new Array(2)}); + else node.target[i] = leaf_copy$2(child); + } + } + } + + return copy; + }; + + treeProto$2.add = tree_add$2; + treeProto$2.addAll = addAll$2; + treeProto$2.cover = tree_cover$2; + treeProto$2.data = tree_data$2; + treeProto$2.extent = tree_extent$2; + treeProto$2.find = tree_find$2; + treeProto$2.remove = tree_remove$2; + treeProto$2.removeAll = removeAll$3; + treeProto$2.root = tree_root$2; + treeProto$2.size = tree_size$2; + treeProto$2.visit = tree_visit$2; + treeProto$2.visitAfter = tree_visitAfter$2; + treeProto$2.x = tree_x$2; + + function tree_add$1(d) { + const x = +this._x.call(null, d), + y = +this._y.call(null, d); + return add$2(this.cover(x, y), x, y, d); + } + + function add$2(tree, x, y, d) { + if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points + + var parent, + node = tree._root, + leaf = {data: d}, + x0 = tree._x0, + y0 = tree._y0, + x1 = tree._x1, + y1 = tree._y1, + xm, + ym, + xp, + yp, + right, + bottom, + i, + j; + + // If the tree is empty, initialize the root as a leaf. + if (!node) return tree._root = leaf, tree; + + // Find the existing leaf for the new point, or add it. + while (node.length) { + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree; + } + + // Is the new point is exactly coincident with the existing point? + xp = +tree._x.call(null, node.data); + yp = +tree._y.call(null, node.data); + if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; + + // Otherwise, split the leaf node until the old and new point are separated. + do { + parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4); + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm))); + return parent[j] = node, parent[i] = leaf, tree; + } + + function addAll$1(data) { + var d, i, n = data.length, + x, + y, + xz = new Array(n), + yz = new Array(n), + x0 = Infinity, + y0 = Infinity, + x1 = -Infinity, + y1 = -Infinity; + + // Compute the points and their extent. + for (i = 0; i < n; ++i) { + if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue; + xz[i] = x; + yz[i] = y; + if (x < x0) x0 = x; + if (x > x1) x1 = x; + if (y < y0) y0 = y; + if (y > y1) y1 = y; + } + + // If there were no (valid) points, abort. + if (x0 > x1 || y0 > y1) return this; + + // Expand the tree to cover the new points. + this.cover(x0, y0).cover(x1, y1); + + // Add the new points. + for (i = 0; i < n; ++i) { + add$2(this, xz[i], yz[i], data[i]); + } + + return this; + } + + function tree_cover$1(x, y) { + if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points + + var x0 = this._x0, + y0 = this._y0, + x1 = this._x1, + y1 = this._y1; + + // If the quadtree has no extent, initialize them. + // Integer extent are necessary so that if we later double the extent, + // the existing quadrant boundaries don’t change due to floating point error! + if (isNaN(x0)) { + x1 = (x0 = Math.floor(x)) + 1; + y1 = (y0 = Math.floor(y)) + 1; + } + + // Otherwise, double repeatedly to cover. + else { + var z = x1 - x0 || 1, + node = this._root, + parent, + i; + + while (x0 > x || x >= x1 || y0 > y || y >= y1) { + i = (y < y0) << 1 | (x < x0); + parent = new Array(4), parent[i] = node, node = parent, z *= 2; + switch (i) { + case 0: x1 = x0 + z, y1 = y0 + z; break; + case 1: x0 = x1 - z, y1 = y0 + z; break; + case 2: x1 = x0 + z, y0 = y1 - z; break; + case 3: x0 = x1 - z, y0 = y1 - z; break; + } + } + + if (this._root && this._root.length) this._root = node; + } + + this._x0 = x0; + this._y0 = y0; + this._x1 = x1; + this._y1 = y1; + return this; + } + + function tree_data$1() { + var data = []; + this.visit(function(node) { + if (!node.length) do data.push(node.data); while (node = node.next) + }); + return data; + } + + function tree_extent$1(_) { + return arguments.length + ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1]) + : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]]; + } + + function Quad(node, x0, y0, x1, y1) { + this.node = node; + this.x0 = x0; + this.y0 = y0; + this.x1 = x1; + this.y1 = y1; + } + + function tree_find$1(x, y, radius) { + var data, + x0 = this._x0, + y0 = this._y0, + x1, + y1, + x2, + y2, + x3 = this._x1, + y3 = this._y1, + quads = [], + node = this._root, + q, + i; + + if (node) quads.push(new Quad(node, x0, y0, x3, y3)); + if (radius == null) radius = Infinity; + else { + x0 = x - radius, y0 = y - radius; + x3 = x + radius, y3 = y + radius; + radius *= radius; + } + + while (q = quads.pop()) { + + // Stop searching if this quadrant can’t contain a closer node. + if (!(node = q.node) + || (x1 = q.x0) > x3 + || (y1 = q.y0) > y3 + || (x2 = q.x1) < x0 + || (y2 = q.y1) < y0) continue; + + // Bisect the current quadrant. + if (node.length) { + var xm = (x1 + x2) / 2, + ym = (y1 + y2) / 2; + + quads.push( + new Quad(node[3], xm, ym, x2, y2), + new Quad(node[2], x1, ym, xm, y2), + new Quad(node[1], xm, y1, x2, ym), + new Quad(node[0], x1, y1, xm, ym) + ); + + // Visit the closest quadrant first. + if (i = (y >= ym) << 1 | (x >= xm)) { + q = quads[quads.length - 1]; + quads[quads.length - 1] = quads[quads.length - 1 - i]; + quads[quads.length - 1 - i] = q; + } + } + + // Visit this point. (Visiting coincident points isn’t necessary!) + else { + var dx = x - +this._x.call(null, node.data), + dy = y - +this._y.call(null, node.data), + d2 = dx * dx + dy * dy; + if (d2 < radius) { + var d = Math.sqrt(radius = d2); + x0 = x - d, y0 = y - d; + x3 = x + d, y3 = y + d; + data = node.data; + } + } + } + + return data; + } + + function tree_remove$1(d) { + if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points + + var parent, + node = this._root, + retainer, + previous, + next, + x0 = this._x0, + y0 = this._y0, + x1 = this._x1, + y1 = this._y1, + x, + y, + xm, + ym, + right, + bottom, + i, + j; + + // If the tree is empty, initialize the root as a leaf. + if (!node) return this; + + // Find the leaf node for the point. + // While descending, also retain the deepest parent with a non-removed sibling. + if (node.length) while (true) { + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + if (!(parent = node, node = node[i = bottom << 1 | right])) return this; + if (!node.length) break; + if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i; + } + + // Find the point to remove. + while (node.data !== d) if (!(previous = node, node = node.next)) return this; + if (next = node.next) delete node.next; + + // If there are multiple coincident points, remove just the point. + if (previous) return (next ? previous.next = next : delete previous.next), this; + + // If this is the root point, remove it. + if (!parent) return this._root = next, this; + + // Remove this leaf. + next ? parent[i] = next : delete parent[i]; + + // If the parent now contains exactly one leaf, collapse superfluous parents. + if ((node = parent[0] || parent[1] || parent[2] || parent[3]) + && node === (parent[3] || parent[2] || parent[1] || parent[0]) + && !node.length) { + if (retainer) retainer[j] = node; + else this._root = node; + } + + return this; + } + + function removeAll$2(data) { + for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]); + return this; + } + + function tree_root$1() { + return this._root; + } + + function tree_size$1() { + var size = 0; + this.visit(function(node) { + if (!node.length) do ++size; while (node = node.next) + }); + return size; + } + + function tree_visit$1(callback) { + var quads = [], q, node = this._root, child, x0, y0, x1, y1; + if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1)); + while (q = quads.pop()) { + if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) { + var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; + if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1)); + if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1)); + if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym)); + if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym)); + } + } + return this; + } + + function tree_visitAfter$1(callback) { + var quads = [], next = [], q; + if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1)); + while (q = quads.pop()) { + var node = q.node; + if (node.length) { + var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; + if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym)); + if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym)); + if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1)); + if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1)); + } + next.push(q); + } + while (q = next.pop()) { + callback(q.node, q.x0, q.y0, q.x1, q.y1); + } + return this; + } + + function defaultX$1(d) { + return d[0]; + } + + function tree_x$1(_) { + return arguments.length ? (this._x = _, this) : this._x; + } + + function defaultY$1(d) { + return d[1]; + } + + function tree_y$1(_) { + return arguments.length ? (this._y = _, this) : this._y; + } + + function quadtree(nodes, x, y) { + var tree = new Quadtree(x == null ? defaultX$1 : x, y == null ? defaultY$1 : y, NaN, NaN, NaN, NaN); + return nodes == null ? tree : tree.addAll(nodes); + } + + function Quadtree(x, y, x0, y0, x1, y1) { + this._x = x; + this._y = y; + this._x0 = x0; + this._y0 = y0; + this._x1 = x1; + this._y1 = y1; + this._root = undefined; + } + + function leaf_copy$1(leaf) { + var copy = {data: leaf.data}, next = copy; + while (leaf = leaf.next) next = next.next = {data: leaf.data}; + return copy; + } + + var treeProto$1 = quadtree.prototype = Quadtree.prototype; + + treeProto$1.copy = function() { + var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1), + node = this._root, + nodes, + child; + + if (!node) return copy; + + if (!node.length) return copy._root = leaf_copy$1(node), copy; + + nodes = [{source: node, target: copy._root = new Array(4)}]; + while (node = nodes.pop()) { + for (var i = 0; i < 4; ++i) { + if (child = node.source[i]) { + if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)}); + else node.target[i] = leaf_copy$1(child); + } + } + } + + return copy; + }; + + treeProto$1.add = tree_add$1; + treeProto$1.addAll = addAll$1; + treeProto$1.cover = tree_cover$1; + treeProto$1.data = tree_data$1; + treeProto$1.extent = tree_extent$1; + treeProto$1.find = tree_find$1; + treeProto$1.remove = tree_remove$1; + treeProto$1.removeAll = removeAll$2; + treeProto$1.root = tree_root$1; + treeProto$1.size = tree_size$1; + treeProto$1.visit = tree_visit$1; + treeProto$1.visitAfter = tree_visitAfter$1; + treeProto$1.x = tree_x$1; + treeProto$1.y = tree_y$1; + + function tree_add(d) { + var x = +this._x.call(null, d), + y = +this._y.call(null, d), + z = +this._z.call(null, d); + return add$1(this.cover(x, y, z), x, y, z, d); + } + + function add$1(tree, x, y, z, d) { + if (isNaN(x) || isNaN(y) || isNaN(z)) return tree; // ignore invalid points + + var parent, + node = tree._root, + leaf = {data: d}, + x0 = tree._x0, + y0 = tree._y0, + z0 = tree._z0, + x1 = tree._x1, + y1 = tree._y1, + z1 = tree._z1, + xm, + ym, + zm, + xp, + yp, + zp, + right, + bottom, + deep, + i, + j; + + // If the tree is empty, initialize the root as a leaf. + if (!node) return tree._root = leaf, tree; + + // Find the existing leaf for the new point, or add it. + while (node.length) { + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm; else z1 = zm; + if (parent = node, !(node = node[i = deep << 2 | bottom << 1 | right])) return parent[i] = leaf, tree; + } + + // Is the new point is exactly coincident with the existing point? + xp = +tree._x.call(null, node.data); + yp = +tree._y.call(null, node.data); + zp = +tree._z.call(null, node.data); + if (x === xp && y === yp && z === zp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; + + // Otherwise, split the leaf node until the old and new point are separated. + do { + parent = parent ? parent[i] = new Array(8) : tree._root = new Array(8); + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm; else z1 = zm; + } while ((i = deep << 2 | bottom << 1 | right) === (j = (zp >= zm) << 2 | (yp >= ym) << 1 | (xp >= xm))); + return parent[j] = node, parent[i] = leaf, tree; + } + + function addAll(data) { + var d, i, n = data.length, + x, + y, + z, + xz = new Array(n), + yz = new Array(n), + zz = new Array(n), + x0 = Infinity, + y0 = Infinity, + z0 = Infinity, + x1 = -Infinity, + y1 = -Infinity, + z1 = -Infinity; + + // Compute the points and their extent. + for (i = 0; i < n; ++i) { + if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d)) || isNaN(z = +this._z.call(null, d))) continue; + xz[i] = x; + yz[i] = y; + zz[i] = z; + if (x < x0) x0 = x; + if (x > x1) x1 = x; + if (y < y0) y0 = y; + if (y > y1) y1 = y; + if (z < z0) z0 = z; + if (z > z1) z1 = z; + } + + // If there were no (valid) points, inherit the existing extent. + if (x1 < x0) x0 = this._x0, x1 = this._x1; + if (y1 < y0) y0 = this._y0, y1 = this._y1; + if (z1 < z0) z0 = this._z0, z1 = this._z1; + + // Expand the tree to cover the new points. + this.cover(x0, y0, z0).cover(x1, y1, z1); + + // Add the new points. + for (i = 0; i < n; ++i) { + add$1(this, xz[i], yz[i], zz[i], data[i]); + } + + return this; + } + + function tree_cover(x, y, z) { + if (isNaN(x = +x) || isNaN(y = +y) || isNaN(z = +z)) return this; // ignore invalid points + + var x0 = this._x0, + y0 = this._y0, + z0 = this._z0, + x1 = this._x1, + y1 = this._y1, + z1 = this._z1; + + // If the octree has no extent, initialize them. + // Integer extent are necessary so that if we later double the extent, + // the existing octant boundaries don’t change due to floating point error! + if (isNaN(x0)) { + x1 = (x0 = Math.floor(x)) + 1; + y1 = (y0 = Math.floor(y)) + 1; + z1 = (z0 = Math.floor(z)) + 1; + } + + // Otherwise, double repeatedly to cover. + else if (x0 > x || x > x1 || y0 > y || y > y1 || z0 > z || z > z1) { + var t = x1 - x0, + node = this._root, + parent, + i; + + switch (i = (z < (z0 + z1) / 2) << 2 | (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) { + case 0: { + do parent = new Array(8), parent[i] = node, node = parent; + while (t *= 2, x1 = x0 + t, y1 = y0 + t, z1 = z0 + t, x > x1 || y > y1 || z > z1); + break; + } + case 1: { + do parent = new Array(8), parent[i] = node, node = parent; + while (t *= 2, x0 = x1 - t, y1 = y0 + t, z1 = z0 + t, x0 > x || y > y1 || z > z1); + break; + } + case 2: { + do parent = new Array(8), parent[i] = node, node = parent; + while (t *= 2, x1 = x0 + t, y0 = y1 - t, z1 = z0 + t, x > x1 || y0 > y || z > z1); + break; + } + case 3: { + do parent = new Array(8), parent[i] = node, node = parent; + while (t *= 2, x0 = x1 - t, y0 = y1 - t, z1 = z0 + t, x0 > x || y0 > y || z > z1); + break; + } + case 4: { + do parent = new Array(8), parent[i] = node, node = parent; + while (t *= 2, x1 = x0 + t, y1 = y0 + t, z0 = z1 - t, x > x1 || y > y1 || z0 > z); + break; + } + case 5: { + do parent = new Array(8), parent[i] = node, node = parent; + while (t *= 2, x0 = x1 - t, y1 = y0 + t, z0 = z1 - t, x0 > x || y > y1 || z0 > z); + break; + } + case 6: { + do parent = new Array(8), parent[i] = node, node = parent; + while (t *= 2, x1 = x0 + t, y0 = y1 - t, z0 = z1 - t, x > x1 || y0 > y || z0 > z); + break; + } + case 7: { + do parent = new Array(8), parent[i] = node, node = parent; + while (t *= 2, x0 = x1 - t, y0 = y1 - t, z0 = z1 - t, x0 > x || y0 > y || z0 > z); + break; + } + } + + if (this._root && this._root.length) this._root = node; + } + + // If the octree covers the point already, just return. + else return this; + + this._x0 = x0; + this._y0 = y0; + this._z0 = z0; + this._x1 = x1; + this._y1 = y1; + this._z1 = z1; + return this; + } + + function tree_data() { + var data = []; + this.visit(function(node) { + if (!node.length) do data.push(node.data); while (node = node.next) + }); + return data; + } + + function tree_extent(_) { + return arguments.length + ? this.cover(+_[0][0], +_[0][1], +_[0][2]).cover(+_[1][0], +_[1][1], +_[1][2]) + : isNaN(this._x0) ? undefined : [[this._x0, this._y0, this._z0], [this._x1, this._y1, this._z1]]; + } + + function Octant(node, x0, y0, z0, x1, y1, z1) { + this.node = node; + this.x0 = x0; + this.y0 = y0; + this.z0 = z0; + this.x1 = x1; + this.y1 = y1; + this.z1 = z1; + } + + function tree_find(x, y, z, radius) { + var data, + x0 = this._x0, + y0 = this._y0, + z0 = this._z0, + x1, + y1, + z1, + x2, + y2, + z2, + x3 = this._x1, + y3 = this._y1, + z3 = this._z1, + octs = [], + node = this._root, + q, + i; + + if (node) octs.push(new Octant(node, x0, y0, z0, x3, y3, z3)); + if (radius == null) radius = Infinity; + else { + x0 = x - radius, y0 = y - radius, z0 = z - radius; + x3 = x + radius, y3 = y + radius, z3 = z + radius; + radius *= radius; + } + + while (q = octs.pop()) { + + // Stop searching if this octant can’t contain a closer node. + if (!(node = q.node) + || (x1 = q.x0) > x3 + || (y1 = q.y0) > y3 + || (z1 = q.z0) > z3 + || (x2 = q.x1) < x0 + || (y2 = q.y1) < y0 + || (z2 = q.z1) < z0) continue; + + // Bisect the current octant. + if (node.length) { + var xm = (x1 + x2) / 2, + ym = (y1 + y2) / 2, + zm = (z1 + z2) / 2; + + octs.push( + new Octant(node[7], xm, ym, zm, x2, y2, z2), + new Octant(node[6], x1, ym, zm, xm, y2, z2), + new Octant(node[5], xm, y1, zm, x2, ym, z2), + new Octant(node[4], x1, y1, zm, xm, ym, z2), + new Octant(node[3], xm, ym, z1, x2, y2, zm), + new Octant(node[2], x1, ym, z1, xm, y2, zm), + new Octant(node[1], xm, y1, z1, x2, ym, zm), + new Octant(node[0], x1, y1, z1, xm, ym, zm) + ); + + // Visit the closest octant first. + if (i = (z >= zm) << 2 | (y >= ym) << 1 | (x >= xm)) { + q = octs[octs.length - 1]; + octs[octs.length - 1] = octs[octs.length - 1 - i]; + octs[octs.length - 1 - i] = q; + } + } + + // Visit this point. (Visiting coincident points isn’t necessary!) + else { + var dx = x - +this._x.call(null, node.data), + dy = y - +this._y.call(null, node.data), + dz = z - +this._z.call(null, node.data), + d2 = dx * dx + dy * dy + dz * dz; + if (d2 < radius) { + var d = Math.sqrt(radius = d2); + x0 = x - d, y0 = y - d, z0 = z - d; + x3 = x + d, y3 = y + d, z3 = z + d; + data = node.data; + } + } + } + + return data; + } + + function tree_remove(d) { + if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d)) || isNaN(z = +this._z.call(null, d))) return this; // ignore invalid points + + var parent, + node = this._root, + retainer, + previous, + next, + x0 = this._x0, + y0 = this._y0, + z0 = this._z0, + x1 = this._x1, + y1 = this._y1, + z1 = this._z1, + x, + y, + z, + xm, + ym, + zm, + right, + bottom, + deep, + i, + j; + + // If the tree is empty, initialize the root as a leaf. + if (!node) return this; + + // Find the leaf node for the point. + // While descending, also retain the deepest parent with a non-removed sibling. + if (node.length) while (true) { + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm; else z1 = zm; + if (!(parent = node, node = node[i = deep << 2 | bottom << 1 | right])) return this; + if (!node.length) break; + if (parent[(i + 1) & 7] || parent[(i + 2) & 7] || parent[(i + 3) & 7] || parent[(i + 4) & 7] || parent[(i + 5) & 7] || parent[(i + 6) & 7] || parent[(i + 7) & 7]) retainer = parent, j = i; + } + + // Find the point to remove. + while (node.data !== d) if (!(previous = node, node = node.next)) return this; + if (next = node.next) delete node.next; + + // If there are multiple coincident points, remove just the point. + if (previous) return (next ? previous.next = next : delete previous.next), this; + + // If this is the root point, remove it. + if (!parent) return this._root = next, this; + + // Remove this leaf. + next ? parent[i] = next : delete parent[i]; + + // If the parent now contains exactly one leaf, collapse superfluous parents. + if ((node = parent[0] || parent[1] || parent[2] || parent[3] || parent[4] || parent[5] || parent[6] || parent[7]) + && node === (parent[7] || parent[6] || parent[5] || parent[4] || parent[3] || parent[2] || parent[1] || parent[0]) + && !node.length) { + if (retainer) retainer[j] = node; + else this._root = node; + } + + return this; + } + + function removeAll$1(data) { + for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]); + return this; + } + + function tree_root() { + return this._root; + } + + function tree_size() { + var size = 0; + this.visit(function(node) { + if (!node.length) do ++size; while (node = node.next) + }); + return size; + } + + function tree_visit(callback) { + var octs = [], q, node = this._root, child, x0, y0, z0, x1, y1, z1; + if (node) octs.push(new Octant(node, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1)); + while (q = octs.pop()) { + if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, z0 = q.z0, x1 = q.x1, y1 = q.y1, z1 = q.z1) && node.length) { + var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2, zm = (z0 + z1) / 2; + if (child = node[7]) octs.push(new Octant(child, xm, ym, zm, x1, y1, z1)); + if (child = node[6]) octs.push(new Octant(child, x0, ym, zm, xm, y1, z1)); + if (child = node[5]) octs.push(new Octant(child, xm, y0, zm, x1, ym, z1)); + if (child = node[4]) octs.push(new Octant(child, x0, y0, zm, xm, ym, z1)); + if (child = node[3]) octs.push(new Octant(child, xm, ym, z0, x1, y1, zm)); + if (child = node[2]) octs.push(new Octant(child, x0, ym, z0, xm, y1, zm)); + if (child = node[1]) octs.push(new Octant(child, xm, y0, z0, x1, ym, zm)); + if (child = node[0]) octs.push(new Octant(child, x0, y0, z0, xm, ym, zm)); + } + } + return this; + } + + function tree_visitAfter(callback) { + var octs = [], next = [], q; + if (this._root) octs.push(new Octant(this._root, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1)); + while (q = octs.pop()) { + var node = q.node; + if (node.length) { + var child, x0 = q.x0, y0 = q.y0, z0 = q.z0, x1 = q.x1, y1 = q.y1, z1 = q.z1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2, zm = (z0 + z1) / 2; + if (child = node[0]) octs.push(new Octant(child, x0, y0, z0, xm, ym, zm)); + if (child = node[1]) octs.push(new Octant(child, xm, y0, z0, x1, ym, zm)); + if (child = node[2]) octs.push(new Octant(child, x0, ym, z0, xm, y1, zm)); + if (child = node[3]) octs.push(new Octant(child, xm, ym, z0, x1, y1, zm)); + if (child = node[4]) octs.push(new Octant(child, x0, y0, zm, xm, ym, z1)); + if (child = node[5]) octs.push(new Octant(child, xm, y0, zm, x1, ym, z1)); + if (child = node[6]) octs.push(new Octant(child, x0, ym, zm, xm, y1, z1)); + if (child = node[7]) octs.push(new Octant(child, xm, ym, zm, x1, y1, z1)); + } + next.push(q); + } + while (q = next.pop()) { + callback(q.node, q.x0, q.y0, q.z0, q.x1, q.y1, q.z1); + } + return this; + } + + function defaultX(d) { + return d[0]; + } + + function tree_x(_) { + return arguments.length ? (this._x = _, this) : this._x; + } + + function defaultY(d) { + return d[1]; + } + + function tree_y(_) { + return arguments.length ? (this._y = _, this) : this._y; + } + + function defaultZ(d) { + return d[2]; + } + + function tree_z(_) { + return arguments.length ? (this._z = _, this) : this._z; + } + + function octree(nodes, x, y, z) { + var tree = new Octree(x == null ? defaultX : x, y == null ? defaultY : y, z == null ? defaultZ : z, NaN, NaN, NaN, NaN, NaN, NaN); + return nodes == null ? tree : tree.addAll(nodes); + } + + function Octree(x, y, z, x0, y0, z0, x1, y1, z1) { + this._x = x; + this._y = y; + this._z = z; + this._x0 = x0; + this._y0 = y0; + this._z0 = z0; + this._x1 = x1; + this._y1 = y1; + this._z1 = z1; + this._root = undefined; + } + + function leaf_copy(leaf) { + var copy = {data: leaf.data}, next = copy; + while (leaf = leaf.next) next = next.next = {data: leaf.data}; + return copy; + } + + var treeProto = octree.prototype = Octree.prototype; + + treeProto.copy = function() { + var copy = new Octree(this._x, this._y, this._z, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1), + node = this._root, + nodes, + child; + + if (!node) return copy; + + if (!node.length) return copy._root = leaf_copy(node), copy; + + nodes = [{source: node, target: copy._root = new Array(8)}]; + while (node = nodes.pop()) { + for (var i = 0; i < 8; ++i) { + if (child = node.source[i]) { + if (child.length) nodes.push({source: child, target: node.target[i] = new Array(8)}); + else node.target[i] = leaf_copy(child); + } + } + } + + return copy; + }; + + treeProto.add = tree_add; + treeProto.addAll = addAll; + treeProto.cover = tree_cover; + treeProto.data = tree_data; + treeProto.extent = tree_extent; + treeProto.find = tree_find; + treeProto.remove = tree_remove; + treeProto.removeAll = removeAll$1; + treeProto.root = tree_root; + treeProto.size = tree_size; + treeProto.visit = tree_visit; + treeProto.visitAfter = tree_visitAfter; + treeProto.x = tree_x; + treeProto.y = tree_y; + treeProto.z = tree_z; + + function constant(x) { + return function() { + return x; + }; + } + + function jiggle(random) { + return (random() - 0.5) * 1e-6; + } + + function index$3(d) { + return d.index; + } + + function find(nodeById, nodeId) { + var node = nodeById.get(nodeId); + if (!node) throw new Error("node not found: " + nodeId); + return node; + } + + function forceLink(links) { + var id = index$3, + strength = defaultStrength, + strengths, + distance = constant(30), + distances, + nodes, + nDim, + count, + bias, + random, + iterations = 1; + + if (links == null) links = []; + + function defaultStrength(link) { + return 1 / Math.min(count[link.source.index], count[link.target.index]); + } + + function force(alpha) { + for (var k = 0, n = links.length; k < iterations; ++k) { + for (var i = 0, link, source, target, x = 0, y = 0, z = 0, l, b; i < n; ++i) { + link = links[i], source = link.source, target = link.target; + x = target.x + target.vx - source.x - source.vx || jiggle(random); + if (nDim > 1) { y = target.y + target.vy - source.y - source.vy || jiggle(random); } + if (nDim > 2) { z = target.z + target.vz - source.z - source.vz || jiggle(random); } + l = Math.sqrt(x * x + y * y + z * z); + l = (l - distances[i]) / l * alpha * strengths[i]; + x *= l, y *= l, z *= l; + + target.vx -= x * (b = bias[i]); + if (nDim > 1) { target.vy -= y * b; } + if (nDim > 2) { target.vz -= z * b; } + + source.vx += x * (b = 1 - b); + if (nDim > 1) { source.vy += y * b; } + if (nDim > 2) { source.vz += z * b; } + } + } + } + + function initialize() { + if (!nodes) return; + + var i, + n = nodes.length, + m = links.length, + nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])), + link; + + for (i = 0, count = new Array(n); i < m; ++i) { + link = links[i], link.index = i; + if (typeof link.source !== "object") link.source = find(nodeById, link.source); + if (typeof link.target !== "object") link.target = find(nodeById, link.target); + count[link.source.index] = (count[link.source.index] || 0) + 1; + count[link.target.index] = (count[link.target.index] || 0) + 1; + } + + for (i = 0, bias = new Array(m); i < m; ++i) { + link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]); + } + + strengths = new Array(m), initializeStrength(); + distances = new Array(m), initializeDistance(); + } + + function initializeStrength() { + if (!nodes) return; + + for (var i = 0, n = links.length; i < n; ++i) { + strengths[i] = +strength(links[i], i, links); + } + } + + function initializeDistance() { + if (!nodes) return; + + for (var i = 0, n = links.length; i < n; ++i) { + distances[i] = +distance(links[i], i, links); + } + } + + force.initialize = function(_nodes, _numDimensions, _random) { + nodes = _nodes; + nDim = _numDimensions; + random = _random; + initialize(); + }; + + force.links = function(_) { + return arguments.length ? (links = _, initialize(), force) : links; + }; + + force.id = function(_) { + return arguments.length ? (id = _, force) : id; + }; + + force.iterations = function(_) { + return arguments.length ? (iterations = +_, force) : iterations; + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initializeStrength(), force) : strength; + }; + + force.distance = function(_) { + return arguments.length ? (distance = typeof _ === "function" ? _ : constant(+_), initializeDistance(), force) : distance; + }; + + return force; + } + + var noop$1 = {value: () => {}}; + + function dispatch() { + for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { + if (!(t = arguments[i] + "") || (t in _) || /[\s.]/.test(t)) throw new Error("illegal type: " + t); + _[t] = []; + } + return new Dispatch(_); + } + + function Dispatch(_) { + this._ = _; + } + + function parseTypenames(typenames, types) { + return typenames.trim().split(/^|\s+/).map(function(t) { + var name = "", i = t.indexOf("."); + if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); + if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); + return {type: t, name: name}; + }); + } + + Dispatch.prototype = dispatch.prototype = { + constructor: Dispatch, + on: function(typename, callback) { + var _ = this._, + T = parseTypenames(typename + "", _), + t, + i = -1, + n = T.length; + + // If no callback was specified, return the callback of the given type and name. + if (arguments.length < 2) { + while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t; + return; + } + + // If a type was specified, set the callback for the given type and name. + // Otherwise, if a null callback was specified, remove callbacks of the given name. + if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); + while (++i < n) { + if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback); + else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null); + } + + return this; + }, + copy: function() { + var copy = {}, _ = this._; + for (var t in _) copy[t] = _[t].slice(); + return new Dispatch(copy); + }, + call: function(type, that) { + if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; + if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); + for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); + }, + apply: function(type, that, args) { + if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); + for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); + } + }; + + function get(type, name) { + for (var i = 0, n = type.length, c; i < n; ++i) { + if ((c = type[i]).name === name) { + return c.value; + } + } + } + + function set(type, name, callback) { + for (var i = 0, n = type.length; i < n; ++i) { + if (type[i].name === name) { + type[i] = noop$1, type = type.slice(0, i).concat(type.slice(i + 1)); + break; + } + } + if (callback != null) type.push({name: name, value: callback}); + return type; + } + + var frame = 0, // is an animation frame pending? + timeout = 0, // is a timeout pending? + interval = 0, // are any timers active? + pokeDelay = 1000, // how frequently we check for clock skew + taskHead, + taskTail, + clockLast = 0, + clockNow = 0, + clockSkew = 0, + clock = typeof performance === "object" && performance.now ? performance : Date, + setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); }; + + function now$2() { + return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew); + } + + function clearNow() { + clockNow = 0; + } + + function Timer() { + this._call = + this._time = + this._next = null; + } + + Timer.prototype = timer.prototype = { + constructor: Timer, + restart: function(callback, delay, time) { + if (typeof callback !== "function") throw new TypeError("callback is not a function"); + time = (time == null ? now$2() : +time) + (delay == null ? 0 : +delay); + if (!this._next && taskTail !== this) { + if (taskTail) taskTail._next = this; + else taskHead = this; + taskTail = this; + } + this._call = callback; + this._time = time; + sleep(); + }, + stop: function() { + if (this._call) { + this._call = null; + this._time = Infinity; + sleep(); + } + } + }; + + function timer(callback, delay, time) { + var t = new Timer; + t.restart(callback, delay, time); + return t; + } + + function timerFlush() { + now$2(); // Get the current time, if not already set. + ++frame; // Pretend we’ve set an alarm, if we haven’t already. + var t = taskHead, e; + while (t) { + if ((e = clockNow - t._time) >= 0) t._call.call(null, e); + t = t._next; + } + --frame; + } + + function wake() { + clockNow = (clockLast = clock.now()) + clockSkew; + frame = timeout = 0; + try { + timerFlush(); + } finally { + frame = 0; + nap(); + clockNow = 0; + } + } + + function poke() { + var now = clock.now(), delay = now - clockLast; + if (delay > pokeDelay) clockSkew -= delay, clockLast = now; + } + + function nap() { + var t0, t1 = taskHead, t2, time = Infinity; + while (t1) { + if (t1._call) { + if (time > t1._time) time = t1._time; + t0 = t1, t1 = t1._next; + } else { + t2 = t1._next, t1._next = null; + t1 = t0 ? t0._next = t2 : taskHead = t2; + } + } + taskTail = t0; + sleep(time); + } + + function sleep(time) { + if (frame) return; // Soonest alarm already set, or will be. + if (timeout) timeout = clearTimeout(timeout); + var delay = time - clockNow; // Strictly less than if we recomputed clockNow. + if (delay > 24) { + if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew); + if (interval) interval = clearInterval(interval); + } else { + if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay); + frame = 1, setFrame(wake); + } + } + + // https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use + const a = 1664525; + const c = 1013904223; + const m = 4294967296; // 2^32 + + function lcg() { + let s = 1; + return () => (s = (a * s + c) % m) / m; + } + + var MAX_DIMENSIONS = 3; + + function x(d) { + return d.x; + } + + function y(d) { + return d.y; + } + + function z(d) { + return d.z; + } + + var initialRadius = 10, + initialAngleRoll = Math.PI * (3 - Math.sqrt(5)), // Golden ratio angle + initialAngleYaw = Math.PI * 20 / (9 + Math.sqrt(221)); // Markov irrational number + + function forceSimulation(nodes, numDimensions) { + numDimensions = numDimensions || 2; + + var nDim = Math.min(MAX_DIMENSIONS, Math.max(1, Math.round(numDimensions))), + simulation, + alpha = 1, + alphaMin = 0.001, + alphaDecay = 1 - Math.pow(alphaMin, 1 / 300), + alphaTarget = 0, + velocityDecay = 0.6, + forces = new Map(), + stepper = timer(step), + event = dispatch("tick", "end"), + random = lcg(); + + if (nodes == null) nodes = []; + + function step() { + tick(); + event.call("tick", simulation); + if (alpha < alphaMin) { + stepper.stop(); + event.call("end", simulation); + } + } + + function tick(iterations) { + var i, n = nodes.length, node; + + if (iterations === undefined) iterations = 1; + + for (var k = 0; k < iterations; ++k) { + alpha += (alphaTarget - alpha) * alphaDecay; + + forces.forEach(function (force) { + force(alpha); + }); + + for (i = 0; i < n; ++i) { + node = nodes[i]; + if (node.fx == null) node.x += node.vx *= velocityDecay; + else node.x = node.fx, node.vx = 0; + if (nDim > 1) { + if (node.fy == null) node.y += node.vy *= velocityDecay; + else node.y = node.fy, node.vy = 0; + } + if (nDim > 2) { + if (node.fz == null) node.z += node.vz *= velocityDecay; + else node.z = node.fz, node.vz = 0; + } + } + } + + return simulation; + } + + function initializeNodes() { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.index = i; + if (node.fx != null) node.x = node.fx; + if (node.fy != null) node.y = node.fy; + if (node.fz != null) node.z = node.fz; + if (isNaN(node.x) || (nDim > 1 && isNaN(node.y)) || (nDim > 2 && isNaN(node.z))) { + var radius = initialRadius * (nDim > 2 ? Math.cbrt(0.5 + i) : (nDim > 1 ? Math.sqrt(0.5 + i) : i)), + rollAngle = i * initialAngleRoll, + yawAngle = i * initialAngleYaw; + + if (nDim === 1) { + node.x = radius; + } else if (nDim === 2) { + node.x = radius * Math.cos(rollAngle); + node.y = radius * Math.sin(rollAngle); + } else { // 3 dimensions: use spherical distribution along 2 irrational number angles + node.x = radius * Math.sin(rollAngle) * Math.cos(yawAngle); + node.y = radius * Math.cos(rollAngle); + node.z = radius * Math.sin(rollAngle) * Math.sin(yawAngle); + } + } + if (isNaN(node.vx) || (nDim > 1 && isNaN(node.vy)) || (nDim > 2 && isNaN(node.vz))) { + node.vx = 0; + if (nDim > 1) { node.vy = 0; } + if (nDim > 2) { node.vz = 0; } + } + } + } + + function initializeForce(force) { + if (force.initialize) force.initialize(nodes, nDim, random); + return force; + } + + initializeNodes(); + + return simulation = { + tick: tick, + + restart: function() { + return stepper.restart(step), simulation; + }, + + stop: function() { + return stepper.stop(), simulation; + }, + + numDimensions: function(_) { + return arguments.length + ? (nDim = Math.min(MAX_DIMENSIONS, Math.max(1, Math.round(_))), forces.forEach(initializeForce), simulation) + : nDim; + }, + + nodes: function(_) { + return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes; + }, + + alpha: function(_) { + return arguments.length ? (alpha = +_, simulation) : alpha; + }, + + alphaMin: function(_) { + return arguments.length ? (alphaMin = +_, simulation) : alphaMin; + }, + + alphaDecay: function(_) { + return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay; + }, + + alphaTarget: function(_) { + return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget; + }, + + velocityDecay: function(_) { + return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay; + }, + + randomSource: function(_) { + return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random; + }, + + force: function(name, _) { + return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name); + }, + + find: function() { + var args = Array.prototype.slice.call(arguments); + var x = args.shift() || 0, + y = (nDim > 1 ? args.shift() : null) || 0, + z = (nDim > 2 ? args.shift() : null) || 0, + radius = args.shift() || Infinity; + + var i = 0, + n = nodes.length, + dx, + dy, + dz, + d2, + node, + closest; + + radius *= radius; + + for (i = 0; i < n; ++i) { + node = nodes[i]; + dx = x - node.x; + dy = y - (node.y || 0); + dz = z - (node.z ||0); + d2 = dx * dx + dy * dy + dz * dz; + if (d2 < radius) closest = node, radius = d2; + } + + return closest; + }, + + on: function(name, _) { + return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name); + } + }; + } + + function forceManyBody() { + var nodes, + nDim, + node, + random, + alpha, + strength = constant(-30), + strengths, + distanceMin2 = 1, + distanceMax2 = Infinity, + theta2 = 0.81; + + function force(_) { + var i, + n = nodes.length, + tree = + (nDim === 1 ? binarytree(nodes, x) + :(nDim === 2 ? quadtree(nodes, x, y) + :(nDim === 3 ? octree(nodes, x, y, z) + :null + ))).visitAfter(accumulate); + + for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply); + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length, node; + strengths = new Array(n); + for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes); + } + + function accumulate(treeNode) { + var strength = 0, q, c, weight = 0, x, y, z, i; + var numChildren = treeNode.length; + + // For internal nodes, accumulate forces from children. + if (numChildren) { + for (x = y = z = i = 0; i < numChildren; ++i) { + if ((q = treeNode[i]) && (c = Math.abs(q.value))) { + strength += q.value, weight += c, x += c * (q.x || 0), y += c * (q.y || 0), z += c * (q.z || 0); + } + } + strength *= Math.sqrt(4 / numChildren); // scale accumulated strength according to number of dimensions + + treeNode.x = x / weight; + if (nDim > 1) { treeNode.y = y / weight; } + if (nDim > 2) { treeNode.z = z / weight; } + } + + // For leaf nodes, accumulate forces from coincident nodes. + else { + q = treeNode; + q.x = q.data.x; + if (nDim > 1) { q.y = q.data.y; } + if (nDim > 2) { q.z = q.data.z; } + do strength += strengths[q.data.index]; + while (q = q.next); + } + + treeNode.value = strength; + } + + function apply(treeNode, x1, arg1, arg2, arg3) { + if (!treeNode.value) return true; + var x2 = [arg1, arg2, arg3][nDim-1]; + + var x = treeNode.x - node.x, + y = (nDim > 1 ? treeNode.y - node.y : 0), + z = (nDim > 2 ? treeNode.z - node.z : 0), + w = x2 - x1, + l = x * x + y * y + z * z; + + // Apply the Barnes-Hut approximation if possible. + // Limit forces for very close nodes; randomize direction if coincident. + if (w * w / theta2 < l) { + if (l < distanceMax2) { + if (x === 0) x = jiggle(random), l += x * x; + if (nDim > 1 && y === 0) y = jiggle(random), l += y * y; + if (nDim > 2 && z === 0) z = jiggle(random), l += z * z; + if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); + node.vx += x * treeNode.value * alpha / l; + if (nDim > 1) { node.vy += y * treeNode.value * alpha / l; } + if (nDim > 2) { node.vz += z * treeNode.value * alpha / l; } + } + return true; + } + + // Otherwise, process points directly. + else if (treeNode.length || l >= distanceMax2) return; + + // Limit forces for very close nodes; randomize direction if coincident. + if (treeNode.data !== node || treeNode.next) { + if (x === 0) x = jiggle(random), l += x * x; + if (nDim > 1 && y === 0) y = jiggle(random), l += y * y; + if (nDim > 2 && z === 0) z = jiggle(random), l += z * z; + if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); + } + + do if (treeNode.data !== node) { + w = strengths[treeNode.data.index] * alpha / l; + node.vx += x * w; + if (nDim > 1) { node.vy += y * w; } + if (nDim > 2) { node.vz += z * w; } + } while (treeNode = treeNode.next); + } + + force.initialize = function(_nodes, _numDimensions, _random) { + nodes = _nodes; + nDim = _numDimensions; + random = _random; + initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initialize(), force) : strength; + }; + + force.distanceMin = function(_) { + return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2); + }; + + force.distanceMax = function(_) { + return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2); + }; + + force.theta = function(_) { + return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2); + }; + + return force; + } + + function forceRadial(radius, x, y, z) { + var nodes, + nDim, + strength = constant(0.1), + strengths, + radiuses; + + if (typeof radius !== "function") radius = constant(+radius); + if (x == null) x = 0; + if (y == null) y = 0; + if (z == null) z = 0; + + function force(alpha) { + for (var i = 0, n = nodes.length; i < n; ++i) { + var node = nodes[i], + dx = node.x - x || 1e-6, + dy = (node.y || 0) - y || 1e-6, + dz = (node.z || 0) - z || 1e-6, + r = Math.sqrt(dx * dx + dy * dy + dz * dz), + k = (radiuses[i] - r) * strengths[i] * alpha / r; + node.vx += dx * k; + if (nDim>1) { node.vy += dy * k; } + if (nDim>2) { node.vz += dz * k; } + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + strengths = new Array(n); + radiuses = new Array(n); + for (i = 0; i < n; ++i) { + radiuses[i] = +radius(nodes[i], i, nodes); + strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes); + } + } + + force.initialize = function(initNodes, numDimensions) { + nodes = initNodes; + nDim = numDimensions; + initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initialize(), force) : strength; + }; + + force.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : constant(+_), initialize(), force) : radius; + }; + + force.x = function(_) { + return arguments.length ? (x = +_, force) : x; + }; + + force.y = function(_) { + return arguments.length ? (y = +_, force) : y; + }; + + force.z = function(_) { + return arguments.length ? (z = +_, force) : z; + }; + + return force; + } + + var ngraph_events = function eventify(subject) { + validateSubject(subject); + + var eventsStorage = createEventsStorage(subject); + subject.on = eventsStorage.on; + subject.off = eventsStorage.off; + subject.fire = eventsStorage.fire; + return subject; + }; + + function createEventsStorage(subject) { + // Store all event listeners to this hash. Key is event name, value is array + // of callback records. + // + // A callback record consists of callback function and its optional context: + // { 'eventName' => [{callback: function, ctx: object}] } + var registeredEvents = Object.create(null); + + return { + on: function (eventName, callback, ctx) { + if (typeof callback !== 'function') { + throw new Error('callback is expected to be a function'); + } + var handlers = registeredEvents[eventName]; + if (!handlers) { + handlers = registeredEvents[eventName] = []; + } + handlers.push({callback: callback, ctx: ctx}); + + return subject; + }, + + off: function (eventName, callback) { + var wantToRemoveAll = (typeof eventName === 'undefined'); + if (wantToRemoveAll) { + // Killing old events storage should be enough in this case: + registeredEvents = Object.create(null); + return subject; + } + + if (registeredEvents[eventName]) { + var deleteAllCallbacksForEvent = (typeof callback !== 'function'); + if (deleteAllCallbacksForEvent) { + delete registeredEvents[eventName]; + } else { + var callbacks = registeredEvents[eventName]; + for (var i = 0; i < callbacks.length; ++i) { + if (callbacks[i].callback === callback) { + callbacks.splice(i, 1); + } + } + } + } + + return subject; + }, + + fire: function (eventName) { + var callbacks = registeredEvents[eventName]; + if (!callbacks) { + return subject; + } + + var fireArguments; + if (arguments.length > 1) { + fireArguments = Array.prototype.splice.call(arguments, 1); + } + for(var i = 0; i < callbacks.length; ++i) { + var callbackInfo = callbacks[i]; + callbackInfo.callback.apply(callbackInfo.ctx, fireArguments); + } + + return subject; + } + }; + } + + function validateSubject(subject) { + if (!subject) { + throw new Error('Eventify cannot use falsy object as events subject'); + } + var reservedWords = ['on', 'fire', 'off']; + for (var i = 0; i < reservedWords.length; ++i) { + if (subject.hasOwnProperty(reservedWords[i])) { + throw new Error("Subject cannot be eventified, since it already has property '" + reservedWords[i] + "'"); + } + } + } + + /** + * @fileOverview Contains definition of the core graph object. + */ + + // TODO: need to change storage layer: + // 1. Be able to get all nodes O(1) + // 2. Be able to get number of links O(1) + + /** + * @example + * var graph = require('ngraph.graph')(); + * graph.addNode(1); // graph has one node. + * graph.addLink(2, 3); // now graph contains three nodes and one link. + * + */ + var ngraph_graph = createGraph; + + var eventify$1 = ngraph_events; + + /** + * Creates a new graph + */ + function createGraph(options) { + // Graph structure is maintained as dictionary of nodes + // and array of links. Each node has 'links' property which + // hold all links related to that node. And general links + // array is used to speed up all links enumeration. This is inefficient + // in terms of memory, but simplifies coding. + options = options || {}; + if ('uniqueLinkId' in options) { + console.warn( + 'ngraph.graph: Starting from version 0.14 `uniqueLinkId` is deprecated.\n' + + 'Use `multigraph` option instead\n', + '\n', + 'Note: there is also change in default behavior: From now on each graph\n'+ + 'is considered to be not a multigraph by default (each edge is unique).' + ); + + options.multigraph = options.uniqueLinkId; + } + + // Dear reader, the non-multigraphs do not guarantee that there is only + // one link for a given pair of node. When this option is set to false + // we can save some memory and CPU (18% faster for non-multigraph); + if (options.multigraph === undefined) options.multigraph = false; + + if (typeof Map !== 'function') { + // TODO: Should we polyfill it ourselves? We don't use much operations there.. + throw new Error('ngraph.graph requires `Map` to be defined. Please polyfill it before using ngraph'); + } + + var nodes = new Map(); + var links = [], + // Hash of multi-edges. Used to track ids of edges between same nodes + multiEdges = {}, + suspendEvents = 0, + + createLink = options.multigraph ? createUniqueLink : createSingleLink, + + // Our graph API provides means to listen to graph changes. Users can subscribe + // to be notified about changes in the graph by using `on` method. However + // in some cases they don't use it. To avoid unnecessary memory consumption + // we will not record graph changes until we have at least one subscriber. + // Code below supports this optimization. + // + // Accumulates all changes made during graph updates. + // Each change element contains: + // changeType - one of the strings: 'add', 'remove' or 'update'; + // node - if change is related to node this property is set to changed graph's node; + // link - if change is related to link this property is set to changed graph's link; + changes = [], + recordLinkChange = noop, + recordNodeChange = noop, + enterModification = noop, + exitModification = noop; + + // this is our public API: + var graphPart = { + /** + * Adds node to the graph. If node with given id already exists in the graph + * its data is extended with whatever comes in 'data' argument. + * + * @param nodeId the node's identifier. A string or number is preferred. + * @param [data] additional data for the node being added. If node already + * exists its data object is augmented with the new one. + * + * @return {node} The newly added node or node with given id if it already exists. + */ + addNode: addNode, + + /** + * Adds a link to the graph. The function always create a new + * link between two nodes. If one of the nodes does not exists + * a new node is created. + * + * @param fromId link start node id; + * @param toId link end node id; + * @param [data] additional data to be set on the new link; + * + * @return {link} The newly created link + */ + addLink: addLink, + + /** + * Removes link from the graph. If link does not exist does nothing. + * + * @param link - object returned by addLink() or getLinks() methods. + * + * @returns true if link was removed; false otherwise. + */ + removeLink: removeLink, + + /** + * Removes node with given id from the graph. If node does not exist in the graph + * does nothing. + * + * @param nodeId node's identifier passed to addNode() function. + * + * @returns true if node was removed; false otherwise. + */ + removeNode: removeNode, + + /** + * Gets node with given identifier. If node does not exist undefined value is returned. + * + * @param nodeId requested node identifier; + * + * @return {node} in with requested identifier or undefined if no such node exists. + */ + getNode: getNode, + + /** + * Gets number of nodes in this graph. + * + * @return number of nodes in the graph. + */ + getNodeCount: getNodeCount, + + /** + * Gets total number of links in the graph. + */ + getLinkCount: getLinkCount, + + /** + * Synonym for `getLinkCount()` + */ + getLinksCount: getLinkCount, + + /** + * Synonym for `getNodeCount()` + */ + getNodesCount: getNodeCount, + + /** + * Gets all links (inbound and outbound) from the node with given id. + * If node with given id is not found null is returned. + * + * @param nodeId requested node identifier. + * + * @return Array of links from and to requested node if such node exists; + * otherwise null is returned. + */ + getLinks: getLinks, + + /** + * Invokes callback on each node of the graph. + * + * @param {Function(node)} callback Function to be invoked. The function + * is passed one argument: visited node. + */ + forEachNode: forEachNode, + + /** + * Invokes callback on every linked (adjacent) node to the given one. + * + * @param nodeId Identifier of the requested node. + * @param {Function(node, link)} callback Function to be called on all linked nodes. + * The function is passed two parameters: adjacent node and link object itself. + * @param oriented if true graph treated as oriented. + */ + forEachLinkedNode: forEachLinkedNode, + + /** + * Enumerates all links in the graph + * + * @param {Function(link)} callback Function to be called on all links in the graph. + * The function is passed one parameter: graph's link object. + * + * Link object contains at least the following fields: + * fromId - node id where link starts; + * toId - node id where link ends, + * data - additional data passed to graph.addLink() method. + */ + forEachLink: forEachLink, + + /** + * Suspend all notifications about graph changes until + * endUpdate is called. + */ + beginUpdate: enterModification, + + /** + * Resumes all notifications about graph changes and fires + * graph 'changed' event in case there are any pending changes. + */ + endUpdate: exitModification, + + /** + * Removes all nodes and links from the graph. + */ + clear: clear, + + /** + * Detects whether there is a link between two nodes. + * Operation complexity is O(n) where n - number of links of a node. + * NOTE: this function is synonim for getLink() + * + * @returns link if there is one. null otherwise. + */ + hasLink: getLink, + + /** + * Detects whether there is a node with given id + * + * Operation complexity is O(1) + * NOTE: this function is synonim for getNode() + * + * @returns node if there is one; Falsy value otherwise. + */ + hasNode: getNode, + + /** + * Gets an edge between two nodes. + * Operation complexity is O(n) where n - number of links of a node. + * + * @param {string} fromId link start identifier + * @param {string} toId link end identifier + * + * @returns link if there is one. null otherwise. + */ + getLink: getLink + }; + + // this will add `on()` and `fire()` methods. + eventify$1(graphPart); + + monitorSubscribers(); + + return graphPart; + + function monitorSubscribers() { + var realOn = graphPart.on; + + // replace real `on` with our temporary on, which will trigger change + // modification monitoring: + graphPart.on = on; + + function on() { + // now it's time to start tracking stuff: + graphPart.beginUpdate = enterModification = enterModificationReal; + graphPart.endUpdate = exitModification = exitModificationReal; + recordLinkChange = recordLinkChangeReal; + recordNodeChange = recordNodeChangeReal; + + // this will replace current `on` method with real pub/sub from `eventify`. + graphPart.on = realOn; + // delegate to real `on` handler: + return realOn.apply(graphPart, arguments); + } + } + + function recordLinkChangeReal(link, changeType) { + changes.push({ + link: link, + changeType: changeType + }); + } + + function recordNodeChangeReal(node, changeType) { + changes.push({ + node: node, + changeType: changeType + }); + } + + function addNode(nodeId, data) { + if (nodeId === undefined) { + throw new Error('Invalid node identifier'); + } + + enterModification(); + + var node = getNode(nodeId); + if (!node) { + node = new Node(nodeId, data); + recordNodeChange(node, 'add'); + } else { + node.data = data; + recordNodeChange(node, 'update'); + } + + nodes.set(nodeId, node); + + exitModification(); + return node; + } + + function getNode(nodeId) { + return nodes.get(nodeId); + } + + function removeNode(nodeId) { + var node = getNode(nodeId); + if (!node) { + return false; + } + + enterModification(); + + var prevLinks = node.links; + if (prevLinks) { + node.links = null; + for(var i = 0; i < prevLinks.length; ++i) { + removeLink(prevLinks[i]); + } + } + + nodes.delete(nodeId); + + recordNodeChange(node, 'remove'); + + exitModification(); + + return true; + } + + + function addLink(fromId, toId, data) { + enterModification(); + + var fromNode = getNode(fromId) || addNode(fromId); + var toNode = getNode(toId) || addNode(toId); + + var link = createLink(fromId, toId, data); + + links.push(link); + + // TODO: this is not cool. On large graphs potentially would consume more memory. + addLinkToNode(fromNode, link); + if (fromId !== toId) { + // make sure we are not duplicating links for self-loops + addLinkToNode(toNode, link); + } + + recordLinkChange(link, 'add'); + + exitModification(); + + return link; + } + + function createSingleLink(fromId, toId, data) { + var linkId = makeLinkId(fromId, toId); + return new Link(fromId, toId, data, linkId); + } + + function createUniqueLink(fromId, toId, data) { + // TODO: Get rid of this method. + var linkId = makeLinkId(fromId, toId); + var isMultiEdge = multiEdges.hasOwnProperty(linkId); + if (isMultiEdge || getLink(fromId, toId)) { + if (!isMultiEdge) { + multiEdges[linkId] = 0; + } + var suffix = '@' + (++multiEdges[linkId]); + linkId = makeLinkId(fromId + suffix, toId + suffix); + } + + return new Link(fromId, toId, data, linkId); + } + + function getNodeCount() { + return nodes.size; + } + + function getLinkCount() { + return links.length; + } + + function getLinks(nodeId) { + var node = getNode(nodeId); + return node ? node.links : null; + } + + function removeLink(link) { + if (!link) { + return false; + } + var idx = indexOfElementInArray(link, links); + if (idx < 0) { + return false; + } + + enterModification(); + + links.splice(idx, 1); + + var fromNode = getNode(link.fromId); + var toNode = getNode(link.toId); + + if (fromNode) { + idx = indexOfElementInArray(link, fromNode.links); + if (idx >= 0) { + fromNode.links.splice(idx, 1); + } + } + + if (toNode) { + idx = indexOfElementInArray(link, toNode.links); + if (idx >= 0) { + toNode.links.splice(idx, 1); + } + } + + recordLinkChange(link, 'remove'); + + exitModification(); + + return true; + } + + function getLink(fromNodeId, toNodeId) { + // TODO: Use sorted links to speed this up + var node = getNode(fromNodeId), + i; + if (!node || !node.links) { + return null; + } + + for (i = 0; i < node.links.length; ++i) { + var link = node.links[i]; + if (link.fromId === fromNodeId && link.toId === toNodeId) { + return link; + } + } + + return null; // no link. + } + + function clear() { + enterModification(); + forEachNode(function(node) { + removeNode(node.id); + }); + exitModification(); + } + + function forEachLink(callback) { + var i, length; + if (typeof callback === 'function') { + for (i = 0, length = links.length; i < length; ++i) { + callback(links[i]); + } + } + } + + function forEachLinkedNode(nodeId, callback, oriented) { + var node = getNode(nodeId); + + if (node && node.links && typeof callback === 'function') { + if (oriented) { + return forEachOrientedLink(node.links, nodeId, callback); + } else { + return forEachNonOrientedLink(node.links, nodeId, callback); + } + } + } + + function forEachNonOrientedLink(links, nodeId, callback) { + var quitFast; + for (var i = 0; i < links.length; ++i) { + var link = links[i]; + var linkedNodeId = link.fromId === nodeId ? link.toId : link.fromId; + + quitFast = callback(nodes.get(linkedNodeId), link); + if (quitFast) { + return true; // Client does not need more iterations. Break now. + } + } + } + + function forEachOrientedLink(links, nodeId, callback) { + var quitFast; + for (var i = 0; i < links.length; ++i) { + var link = links[i]; + if (link.fromId === nodeId) { + quitFast = callback(nodes.get(link.toId), link); + if (quitFast) { + return true; // Client does not need more iterations. Break now. + } + } + } + } + + // we will not fire anything until users of this library explicitly call `on()` + // method. + function noop() {} + + // Enter, Exit modification allows bulk graph updates without firing events. + function enterModificationReal() { + suspendEvents += 1; + } + + function exitModificationReal() { + suspendEvents -= 1; + if (suspendEvents === 0 && changes.length > 0) { + graphPart.fire('changed', changes); + changes.length = 0; + } + } + + function forEachNode(callback) { + if (typeof callback !== 'function') { + throw new Error('Function is expected to iterate over graph nodes. You passed ' + callback); + } + + var valuesIterator = nodes.values(); + var nextValue = valuesIterator.next(); + while (!nextValue.done) { + if (callback(nextValue.value)) { + return true; // client doesn't want to proceed. Return. + } + nextValue = valuesIterator.next(); + } + } + } + + // need this for old browsers. Should this be a separate module? + function indexOfElementInArray(element, array) { + if (!array) return -1; + + if (array.indexOf) { + return array.indexOf(element); + } + + var len = array.length, + i; + + for (i = 0; i < len; i += 1) { + if (array[i] === element) { + return i; + } + } + + return -1; + } + + /** + * Internal structure to represent node; + */ + function Node(id, data) { + this.id = id; + this.links = null; + this.data = data; + } + + function addLinkToNode(node, link) { + if (node.links) { + node.links.push(link); + } else { + node.links = [link]; + } + } + + /** + * Internal structure to represent links; + */ + function Link(fromId, toId, data, id) { + this.fromId = fromId; + this.toId = toId; + this.data = data; + this.id = id; + } + + function makeLinkId(fromId, toId) { + return fromId.toString() + '👉 ' + toId.toString(); + } + + var ngraph_forcelayout = {exports: {}}; + + var generateCreateBody = {exports: {}}; + + var getVariableName$2 = function getVariableName(index) { + if (index === 0) return 'x'; + if (index === 1) return 'y'; + if (index === 2) return 'z'; + return 'c' + (index + 1); + }; + + const getVariableName$1 = getVariableName$2; + + var createPatternBuilder$6 = function createPatternBuilder(dimension) { + + return pattern; + + function pattern(template, config) { + let indent = (config && config.indent) || 0; + let join = (config && config.join !== undefined) ? config.join : '\n'; + let indentString = Array(indent + 1).join(' '); + let buffer = []; + for (let i = 0; i < dimension; ++i) { + let variableName = getVariableName$1(i); + let prefix = (i === 0) ? '' : indentString; + buffer.push(prefix + template.replace(/{var}/g, variableName)); + } + return buffer.join(join); + } + }; + + const createPatternBuilder$5 = createPatternBuilder$6; + + generateCreateBody.exports = generateCreateBodyFunction$1; + generateCreateBody.exports.generateCreateBodyFunctionBody = generateCreateBodyFunctionBody; + + // InlineTransform: getVectorCode + generateCreateBody.exports.getVectorCode = getVectorCode; + // InlineTransform: getBodyCode + generateCreateBody.exports.getBodyCode = getBodyCode; + // InlineTransformExport: module.exports = function() { return Body; } + + function generateCreateBodyFunction$1(dimension, debugSetters) { + let code = generateCreateBodyFunctionBody(dimension, debugSetters); + let {Body} = (new Function(code))(); + return Body; + } + + function generateCreateBodyFunctionBody(dimension, debugSetters) { + let code = ` +${getVectorCode(dimension, debugSetters)} +${getBodyCode(dimension)} +return {Body: Body, Vector: Vector}; +`; + return code; + } + + function getBodyCode(dimension) { + let pattern = createPatternBuilder$5(dimension); + let variableList = pattern('{var}', {join: ', '}); + return ` +function Body(${variableList}) { + this.isPinned = false; + this.pos = new Vector(${variableList}); + this.force = new Vector(); + this.velocity = new Vector(); + this.mass = 1; + + this.springCount = 0; + this.springLength = 0; +} + +Body.prototype.reset = function() { + this.force.reset(); + this.springCount = 0; + this.springLength = 0; +} + +Body.prototype.setPosition = function (${variableList}) { + ${pattern('this.pos.{var} = {var} || 0;', {indent: 2})} +};`; + } + + function getVectorCode(dimension, debugSetters) { + let pattern = createPatternBuilder$5(dimension); + let setters = ''; + if (debugSetters) { + setters = `${pattern("\n\ + var v{var};\n\ +Object.defineProperty(this, '{var}', {\n\ + set: function(v) { \n\ + if (!Number.isFinite(v)) throw new Error('Cannot set non-numbers to {var}');\n\ + v{var} = v; \n\ + },\n\ + get: function() { return v{var}; }\n\ +});")}`; + } + + let variableList = pattern('{var}', {join: ', '}); + return `function Vector(${variableList}) { + ${setters} + if (typeof arguments[0] === 'object') { + // could be another vector + let v = arguments[0]; + ${pattern('if (!Number.isFinite(v.{var})) throw new Error("Expected value is not a finite number at Vector constructor ({var})");', {indent: 4})} + ${pattern('this.{var} = v.{var};', {indent: 4})} + } else { + ${pattern('this.{var} = typeof {var} === "number" ? {var} : 0;', {indent: 4})} + } + } + + Vector.prototype.reset = function () { + ${pattern('this.{var} = ', {join: ''})}0; + };`; + } + + var generateQuadTree = {exports: {}}; + + const createPatternBuilder$4 = createPatternBuilder$6; + const getVariableName = getVariableName$2; + + generateQuadTree.exports = generateQuadTreeFunction$1; + generateQuadTree.exports.generateQuadTreeFunctionBody = generateQuadTreeFunctionBody; + + // These exports are for InlineTransform tool. + // InlineTransform: getInsertStackCode + generateQuadTree.exports.getInsertStackCode = getInsertStackCode; + // InlineTransform: getQuadNodeCode + generateQuadTree.exports.getQuadNodeCode = getQuadNodeCode; + // InlineTransform: isSamePosition + generateQuadTree.exports.isSamePosition = isSamePosition; + // InlineTransform: getChildBodyCode + generateQuadTree.exports.getChildBodyCode = getChildBodyCode; + // InlineTransform: setChildBodyCode + generateQuadTree.exports.setChildBodyCode = setChildBodyCode; + + function generateQuadTreeFunction$1(dimension) { + let code = generateQuadTreeFunctionBody(dimension); + return (new Function(code))(); + } + + function generateQuadTreeFunctionBody(dimension) { + let pattern = createPatternBuilder$4(dimension); + let quadCount = Math.pow(2, dimension); + + let code = ` +${getInsertStackCode()} +${getQuadNodeCode(dimension)} +${isSamePosition(dimension)} +${getChildBodyCode(dimension)} +${setChildBodyCode(dimension)} + +function createQuadTree(options, random) { + options = options || {}; + options.gravity = typeof options.gravity === 'number' ? options.gravity : -1; + options.theta = typeof options.theta === 'number' ? options.theta : 0.8; + + var gravity = options.gravity; + var updateQueue = []; + var insertStack = new InsertStack(); + var theta = options.theta; + + var nodesCache = []; + var currentInCache = 0; + var root = newNode(); + + return { + insertBodies: insertBodies, + + /** + * Gets root node if it is present + */ + getRoot: function() { + return root; + }, + + updateBodyForce: update, + + options: function(newOptions) { + if (newOptions) { + if (typeof newOptions.gravity === 'number') { + gravity = newOptions.gravity; + } + if (typeof newOptions.theta === 'number') { + theta = newOptions.theta; + } + + return this; + } + + return { + gravity: gravity, + theta: theta + }; + } + }; + + function newNode() { + // To avoid pressure on GC we reuse nodes. + var node = nodesCache[currentInCache]; + if (node) { +${assignQuads(' node.')} + node.body = null; + node.mass = ${pattern('node.mass_{var} = ', {join: ''})}0; + ${pattern('node.min_{var} = node.max_{var} = ', {join: ''})}0; + } else { + node = new QuadNode(); + nodesCache[currentInCache] = node; + } + + ++currentInCache; + return node; + } + + function update(sourceBody) { + var queue = updateQueue; + var v; + ${pattern('var d{var};', {indent: 4})} + var r; + ${pattern('var f{var} = 0;', {indent: 4})} + var queueLength = 1; + var shiftIdx = 0; + var pushIdx = 1; + + queue[0] = root; + + while (queueLength) { + var node = queue[shiftIdx]; + var body = node.body; + + queueLength -= 1; + shiftIdx += 1; + var differentBody = (body !== sourceBody); + if (body && differentBody) { + // If the current node is a leaf node (and it is not source body), + // calculate the force exerted by the current node on body, and add this + // amount to body's net force. + ${pattern('d{var} = body.pos.{var} - sourceBody.pos.{var};', {indent: 8})} + r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})}); + + if (r === 0) { + // Poor man's protection against zero distance. + ${pattern('d{var} = (random.nextDouble() - 0.5) / 50;', {indent: 10})} + r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})}); + } + + // This is standard gravitation force calculation but we divide + // by r^3 to save two operations when normalizing force vector. + v = gravity * body.mass * sourceBody.mass / (r * r * r); + ${pattern('f{var} += v * d{var};', {indent: 8})} + } else if (differentBody) { + // Otherwise, calculate the ratio s / r, where s is the width of the region + // represented by the internal node, and r is the distance between the body + // and the node's center-of-mass + ${pattern('d{var} = node.mass_{var} / node.mass - sourceBody.pos.{var};', {indent: 8})} + r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})}); + + if (r === 0) { + // Sorry about code duplication. I don't want to create many functions + // right away. Just want to see performance first. + ${pattern('d{var} = (random.nextDouble() - 0.5) / 50;', {indent: 10})} + r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})}); + } + // If s / r < θ, treat this internal node as a single body, and calculate the + // force it exerts on sourceBody, and add this amount to sourceBody's net force. + if ((node.max_${getVariableName(0)} - node.min_${getVariableName(0)}) / r < theta) { + // in the if statement above we consider node's width only + // because the region was made into square during tree creation. + // Thus there is no difference between using width or height. + v = gravity * node.mass * sourceBody.mass / (r * r * r); + ${pattern('f{var} += v * d{var};', {indent: 10})} + } else { + // Otherwise, run the procedure recursively on each of the current node's children. + + // I intentionally unfolded this loop, to save several CPU cycles. +${runRecursiveOnChildren()} + } + } + } + + ${pattern('sourceBody.force.{var} += f{var};', {indent: 4})} + } + + function insertBodies(bodies) { + ${pattern('var {var}min = Number.MAX_VALUE;', {indent: 4})} + ${pattern('var {var}max = Number.MIN_VALUE;', {indent: 4})} + var i = bodies.length; + + // To reduce quad tree depth we are looking for exact bounding box of all particles. + while (i--) { + var pos = bodies[i].pos; + ${pattern('if (pos.{var} < {var}min) {var}min = pos.{var};', {indent: 6})} + ${pattern('if (pos.{var} > {var}max) {var}max = pos.{var};', {indent: 6})} + } + + // Makes the bounds square. + var maxSideLength = -Infinity; + ${pattern('if ({var}max - {var}min > maxSideLength) maxSideLength = {var}max - {var}min ;', {indent: 4})} + + currentInCache = 0; + root = newNode(); + ${pattern('root.min_{var} = {var}min;', {indent: 4})} + ${pattern('root.max_{var} = {var}min + maxSideLength;', {indent: 4})} + + i = bodies.length - 1; + if (i >= 0) { + root.body = bodies[i]; + } + while (i--) { + insert(bodies[i], root); + } + } + + function insert(newBody) { + insertStack.reset(); + insertStack.push(root, newBody); + + while (!insertStack.isEmpty()) { + var stackItem = insertStack.pop(); + var node = stackItem.node; + var body = stackItem.body; + + if (!node.body) { + // This is internal node. Update the total mass of the node and center-of-mass. + ${pattern('var {var} = body.pos.{var};', {indent: 8})} + node.mass += body.mass; + ${pattern('node.mass_{var} += body.mass * {var};', {indent: 8})} + + // Recursively insert the body in the appropriate quadrant. + // But first find the appropriate quadrant. + var quadIdx = 0; // Assume we are in the 0's quad. + ${pattern('var min_{var} = node.min_{var};', {indent: 8})} + ${pattern('var max_{var} = (min_{var} + node.max_{var}) / 2;', {indent: 8})} + +${assignInsertionQuadIndex(8)} + + var child = getChild(node, quadIdx); + + if (!child) { + // The node is internal but this quadrant is not taken. Add + // subnode to it. + child = newNode(); + ${pattern('child.min_{var} = min_{var};', {indent: 10})} + ${pattern('child.max_{var} = max_{var};', {indent: 10})} + child.body = body; + + setChild(node, quadIdx, child); + } else { + // continue searching in this quadrant. + insertStack.push(child, body); + } + } else { + // We are trying to add to the leaf node. + // We have to convert current leaf into internal node + // and continue adding two nodes. + var oldBody = node.body; + node.body = null; // internal nodes do not cary bodies + + if (isSamePosition(oldBody.pos, body.pos)) { + // Prevent infinite subdivision by bumping one node + // anywhere in this quadrant + var retriesCount = 3; + do { + var offset = random.nextDouble(); + ${pattern('var d{var} = (node.max_{var} - node.min_{var}) * offset;', {indent: 12})} + + ${pattern('oldBody.pos.{var} = node.min_{var} + d{var};', {indent: 12})} + retriesCount -= 1; + // Make sure we don't bump it out of the box. If we do, next iteration should fix it + } while (retriesCount > 0 && isSamePosition(oldBody.pos, body.pos)); + + if (retriesCount === 0 && isSamePosition(oldBody.pos, body.pos)) { + // This is very bad, we ran out of precision. + // if we do not return from the method we'll get into + // infinite loop here. So we sacrifice correctness of layout, and keep the app running + // Next layout iteration should get larger bounding box in the first step and fix this + return; + } + } + // Next iteration should subdivide node further. + insertStack.push(node, oldBody); + insertStack.push(node, body); + } + } + } +} +return createQuadTree; + +`; + return code; + + + function assignInsertionQuadIndex(indentCount) { + let insertionCode = []; + let indent = Array(indentCount + 1).join(' '); + for (let i = 0; i < dimension; ++i) { + insertionCode.push(indent + `if (${getVariableName(i)} > max_${getVariableName(i)}) {`); + insertionCode.push(indent + ` quadIdx = quadIdx + ${Math.pow(2, i)};`); + insertionCode.push(indent + ` min_${getVariableName(i)} = max_${getVariableName(i)};`); + insertionCode.push(indent + ` max_${getVariableName(i)} = node.max_${getVariableName(i)};`); + insertionCode.push(indent + `}`); + } + return insertionCode.join('\n'); + // if (x > max_x) { // somewhere in the eastern part. + // quadIdx = quadIdx + 1; + // left = right; + // right = node.right; + // } + } + + function runRecursiveOnChildren() { + let indent = Array(11).join(' '); + let recursiveCode = []; + for (let i = 0; i < quadCount; ++i) { + recursiveCode.push(indent + `if (node.quad${i}) {`); + recursiveCode.push(indent + ` queue[pushIdx] = node.quad${i};`); + recursiveCode.push(indent + ` queueLength += 1;`); + recursiveCode.push(indent + ` pushIdx += 1;`); + recursiveCode.push(indent + `}`); + } + return recursiveCode.join('\n'); + // if (node.quad0) { + // queue[pushIdx] = node.quad0; + // queueLength += 1; + // pushIdx += 1; + // } + } + + function assignQuads(indent) { + // this.quad0 = null; + // this.quad1 = null; + // this.quad2 = null; + // this.quad3 = null; + let quads = []; + for (let i = 0; i < quadCount; ++i) { + quads.push(`${indent}quad${i} = null;`); + } + return quads.join('\n'); + } + } + + function isSamePosition(dimension) { + let pattern = createPatternBuilder$4(dimension); + return ` + function isSamePosition(point1, point2) { + ${pattern('var d{var} = Math.abs(point1.{var} - point2.{var});', {indent: 2})} + + return ${pattern('d{var} < 1e-8', {join: ' && '})}; + } +`; + } + + function setChildBodyCode(dimension) { + var quadCount = Math.pow(2, dimension); + return ` +function setChild(node, idx, child) { + ${setChildBody()} +}`; + function setChildBody() { + let childBody = []; + for (let i = 0; i < quadCount; ++i) { + let prefix = (i === 0) ? ' ' : ' else '; + childBody.push(`${prefix}if (idx === ${i}) node.quad${i} = child;`); + } + + return childBody.join('\n'); + // if (idx === 0) node.quad0 = child; + // else if (idx === 1) node.quad1 = child; + // else if (idx === 2) node.quad2 = child; + // else if (idx === 3) node.quad3 = child; + } + } + + function getChildBodyCode(dimension) { + return `function getChild(node, idx) { +${getChildBody()} + return null; +}`; + + function getChildBody() { + let childBody = []; + let quadCount = Math.pow(2, dimension); + for (let i = 0; i < quadCount; ++i) { + childBody.push(` if (idx === ${i}) return node.quad${i};`); + } + + return childBody.join('\n'); + // if (idx === 0) return node.quad0; + // if (idx === 1) return node.quad1; + // if (idx === 2) return node.quad2; + // if (idx === 3) return node.quad3; + } + } + + function getQuadNodeCode(dimension) { + let pattern = createPatternBuilder$4(dimension); + let quadCount = Math.pow(2, dimension); + var quadNodeCode = ` +function QuadNode() { + // body stored inside this node. In quad tree only leaf nodes (by construction) + // contain bodies: + this.body = null; + + // Child nodes are stored in quads. Each quad is presented by number: + // 0 | 1 + // ----- + // 2 | 3 +${assignQuads(' this.')} + + // Total mass of current node + this.mass = 0; + + // Center of mass coordinates + ${pattern('this.mass_{var} = 0;', {indent: 2})} + + // bounding box coordinates + ${pattern('this.min_{var} = 0;', {indent: 2})} + ${pattern('this.max_{var} = 0;', {indent: 2})} +} +`; + return quadNodeCode; + + function assignQuads(indent) { + // this.quad0 = null; + // this.quad1 = null; + // this.quad2 = null; + // this.quad3 = null; + let quads = []; + for (let i = 0; i < quadCount; ++i) { + quads.push(`${indent}quad${i} = null;`); + } + return quads.join('\n'); + } + } + + function getInsertStackCode() { + return ` +/** + * Our implementation of QuadTree is non-recursive to avoid GC hit + * This data structure represent stack of elements + * which we are trying to insert into quad tree. + */ +function InsertStack () { + this.stack = []; + this.popIdx = 0; +} + +InsertStack.prototype = { + isEmpty: function() { + return this.popIdx === 0; + }, + push: function (node, body) { + var item = this.stack[this.popIdx]; + if (!item) { + // we are trying to avoid memory pressure: create new element + // only when absolutely necessary + this.stack[this.popIdx] = new InsertStackElement(node, body); + } else { + item.node = node; + item.body = body; + } + ++this.popIdx; + }, + pop: function () { + if (this.popIdx > 0) { + return this.stack[--this.popIdx]; + } + }, + reset: function () { + this.popIdx = 0; + } +}; + +function InsertStackElement(node, body) { + this.node = node; // QuadTree node + this.body = body; // physical body which needs to be inserted to node +} +`; + } + + var generateBounds = {exports: {}}; + + generateBounds.exports = generateBoundsFunction$1; + generateBounds.exports.generateFunctionBody = generateBoundsFunctionBody; + + const createPatternBuilder$3 = createPatternBuilder$6; + + function generateBoundsFunction$1(dimension) { + let code = generateBoundsFunctionBody(dimension); + return new Function('bodies', 'settings', 'random', code); + } + + function generateBoundsFunctionBody(dimension) { + let pattern = createPatternBuilder$3(dimension); + + let code = ` + var boundingBox = { + ${pattern('min_{var}: 0, max_{var}: 0,', {indent: 4})} + }; + + return { + box: boundingBox, + + update: updateBoundingBox, + + reset: resetBoundingBox, + + getBestNewPosition: function (neighbors) { + var ${pattern('base_{var} = 0', {join: ', '})}; + + if (neighbors.length) { + for (var i = 0; i < neighbors.length; ++i) { + let neighborPos = neighbors[i].pos; + ${pattern('base_{var} += neighborPos.{var};', {indent: 10})} + } + + ${pattern('base_{var} /= neighbors.length;', {indent: 8})} + } else { + ${pattern('base_{var} = (boundingBox.min_{var} + boundingBox.max_{var}) / 2;', {indent: 8})} + } + + var springLength = settings.springLength; + return { + ${pattern('{var}: base_{var} + (random.nextDouble() - 0.5) * springLength,', {indent: 8})} + }; + } + }; + + function updateBoundingBox() { + var i = bodies.length; + if (i === 0) return; // No bodies - no borders. + + ${pattern('var max_{var} = -Infinity;', {indent: 4})} + ${pattern('var min_{var} = Infinity;', {indent: 4})} + + while(i--) { + // this is O(n), it could be done faster with quadtree, if we check the root node bounds + var bodyPos = bodies[i].pos; + ${pattern('if (bodyPos.{var} < min_{var}) min_{var} = bodyPos.{var};', {indent: 6})} + ${pattern('if (bodyPos.{var} > max_{var}) max_{var} = bodyPos.{var};', {indent: 6})} + } + + ${pattern('boundingBox.min_{var} = min_{var};', {indent: 4})} + ${pattern('boundingBox.max_{var} = max_{var};', {indent: 4})} + } + + function resetBoundingBox() { + ${pattern('boundingBox.min_{var} = boundingBox.max_{var} = 0;', {indent: 4})} + } +`; + return code; + } + + var generateCreateDragForce = {exports: {}}; + + const createPatternBuilder$2 = createPatternBuilder$6; + + generateCreateDragForce.exports = generateCreateDragForceFunction$1; + generateCreateDragForce.exports.generateCreateDragForceFunctionBody = generateCreateDragForceFunctionBody; + + function generateCreateDragForceFunction$1(dimension) { + let code = generateCreateDragForceFunctionBody(dimension); + return new Function('options', code); + } + + function generateCreateDragForceFunctionBody(dimension) { + let pattern = createPatternBuilder$2(dimension); + let code = ` + if (!Number.isFinite(options.dragCoefficient)) throw new Error('dragCoefficient is not a finite number'); + + return { + update: function(body) { + ${pattern('body.force.{var} -= options.dragCoefficient * body.velocity.{var};', {indent: 6})} + } + }; +`; + return code; + } + + var generateCreateSpringForce = {exports: {}}; + + const createPatternBuilder$1 = createPatternBuilder$6; + + generateCreateSpringForce.exports = generateCreateSpringForceFunction$1; + generateCreateSpringForce.exports.generateCreateSpringForceFunctionBody = generateCreateSpringForceFunctionBody; + + function generateCreateSpringForceFunction$1(dimension) { + let code = generateCreateSpringForceFunctionBody(dimension); + return new Function('options', 'random', code); + } + + function generateCreateSpringForceFunctionBody(dimension) { + let pattern = createPatternBuilder$1(dimension); + let code = ` + if (!Number.isFinite(options.springCoefficient)) throw new Error('Spring coefficient is not a number'); + if (!Number.isFinite(options.springLength)) throw new Error('Spring length is not a number'); + + return { + /** + * Updates forces acting on a spring + */ + update: function (spring) { + var body1 = spring.from; + var body2 = spring.to; + var length = spring.length < 0 ? options.springLength : spring.length; + ${pattern('var d{var} = body2.pos.{var} - body1.pos.{var};', {indent: 6})} + var r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})}); + + if (r === 0) { + ${pattern('d{var} = (random.nextDouble() - 0.5) / 50;', {indent: 8})} + r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})}); + } + + var d = r - length; + var coefficient = ((spring.coefficient > 0) ? spring.coefficient : options.springCoefficient) * d / r; + + ${pattern('body1.force.{var} += coefficient * d{var}', {indent: 6})}; + body1.springCount += 1; + body1.springLength += r; + + ${pattern('body2.force.{var} -= coefficient * d{var}', {indent: 6})}; + body2.springCount += 1; + body2.springLength += r; + } + }; +`; + return code; + } + + var generateIntegrator = {exports: {}}; + + const createPatternBuilder = createPatternBuilder$6; + + generateIntegrator.exports = generateIntegratorFunction$1; + generateIntegrator.exports.generateIntegratorFunctionBody = generateIntegratorFunctionBody; + + function generateIntegratorFunction$1(dimension) { + let code = generateIntegratorFunctionBody(dimension); + return new Function('bodies', 'timeStep', 'adaptiveTimeStepWeight', code); + } + + function generateIntegratorFunctionBody(dimension) { + let pattern = createPatternBuilder(dimension); + let code = ` + var length = bodies.length; + if (length === 0) return 0; + + ${pattern('var d{var} = 0, t{var} = 0;', {indent: 2})} + + for (var i = 0; i < length; ++i) { + var body = bodies[i]; + if (body.isPinned) continue; + + if (adaptiveTimeStepWeight && body.springCount) { + timeStep = (adaptiveTimeStepWeight * body.springLength/body.springCount); + } + + var coeff = timeStep / body.mass; + + ${pattern('body.velocity.{var} += coeff * body.force.{var};', {indent: 4})} + ${pattern('var v{var} = body.velocity.{var};', {indent: 4})} + var v = Math.sqrt(${pattern('v{var} * v{var}', {join: ' + '})}); + + if (v > 1) { + // We normalize it so that we move within timeStep range. + // for the case when v <= 1 - we let velocity to fade out. + ${pattern('body.velocity.{var} = v{var} / v;', {indent: 6})} + } + + ${pattern('d{var} = timeStep * body.velocity.{var};', {indent: 4})} + + ${pattern('body.pos.{var} += d{var};', {indent: 4})} + + ${pattern('t{var} += Math.abs(d{var});', {indent: 4})} + } + + return (${pattern('t{var} * t{var}', {join: ' + '})})/length; +`; + return code; + } + + var spring = Spring; + + /** + * Represents a physical spring. Spring connects two bodies, has rest length + * stiffness coefficient and optional weight + */ + function Spring(fromBody, toBody, length, springCoefficient) { + this.from = fromBody; + this.to = toBody; + this.length = length; + this.coefficient = springCoefficient; + } + + var ngraph_merge = merge; + + /** + * Augments `target` with properties in `options`. Does not override + * target's properties if they are defined and matches expected type in + * options + * + * @returns {Object} merged object + */ + function merge(target, options) { + var key; + if (!target) { target = {}; } + if (options) { + for (key in options) { + if (options.hasOwnProperty(key)) { + var targetHasIt = target.hasOwnProperty(key), + optionsValueType = typeof options[key], + shouldReplace = !targetHasIt || (typeof target[key] !== optionsValueType); + + if (shouldReplace) { + target[key] = options[key]; + } else if (optionsValueType === 'object') { + // go deep, don't care about loops here, we are simple API!: + target[key] = merge(target[key], options[key]); + } + } + } + } + + return target; + } + + var ngraph_random = {exports: {}}; + + ngraph_random.exports = random; + + // TODO: Deprecate? + ngraph_random.exports.random = random, + ngraph_random.exports.randomIterator = randomIterator; + + /** + * Creates seeded PRNG with two methods: + * next() and nextDouble() + */ + function random(inputSeed) { + var seed = typeof inputSeed === 'number' ? inputSeed : (+new Date()); + return new Generator(seed) + } + + function Generator(seed) { + this.seed = seed; + } + + /** + * Generates random integer number in the range from 0 (inclusive) to maxValue (exclusive) + * + * @param maxValue Number REQUIRED. Omitting this number will result in NaN values from PRNG. + */ + Generator.prototype.next = next; + + /** + * Generates random double number in the range from 0 (inclusive) to 1 (exclusive) + * This function is the same as Math.random() (except that it could be seeded) + */ + Generator.prototype.nextDouble = nextDouble; + + /** + * Returns a random real number from uniform distribution in [0, 1) + */ + Generator.prototype.uniform = nextDouble; + + /** + * Returns a random real number from a Gaussian distribution + * with 0 as a mean, and 1 as standard deviation u ~ N(0,1) + */ + Generator.prototype.gaussian = gaussian; + + function gaussian() { + // use the polar form of the Box-Muller transform + // based on https://introcs.cs.princeton.edu/java/23recursion/StdRandom.java + var r, x, y; + do { + x = this.nextDouble() * 2 - 1; + y = this.nextDouble() * 2 - 1; + r = x * x + y * y; + } while (r >= 1 || r === 0); + + return x * Math.sqrt(-2 * Math.log(r)/r); + } + + /** + * See https://twitter.com/anvaka/status/1296182534150135808 + */ + Generator.prototype.levy = levy; + + function levy() { + var beta = 3 / 2; + var sigma = Math.pow( + gamma( 1 + beta ) * Math.sin(Math.PI * beta / 2) / + (gamma((1 + beta) / 2) * beta * Math.pow(2, (beta - 1) / 2)), + 1/beta + ); + return this.gaussian() * sigma / Math.pow(Math.abs(this.gaussian()), 1/beta); + } + + // gamma function approximation + function gamma(z) { + return Math.sqrt(2 * Math.PI / z) * Math.pow((1 / Math.E) * (z + 1 / (12 * z - 1 / (10 * z))), z); + } + + function nextDouble() { + var seed = this.seed; + // Robert Jenkins' 32 bit integer hash function. + seed = ((seed + 0x7ed55d16) + (seed << 12)) & 0xffffffff; + seed = ((seed ^ 0xc761c23c) ^ (seed >>> 19)) & 0xffffffff; + seed = ((seed + 0x165667b1) + (seed << 5)) & 0xffffffff; + seed = ((seed + 0xd3a2646c) ^ (seed << 9)) & 0xffffffff; + seed = ((seed + 0xfd7046c5) + (seed << 3)) & 0xffffffff; + seed = ((seed ^ 0xb55a4f09) ^ (seed >>> 16)) & 0xffffffff; + this.seed = seed; + return (seed & 0xfffffff) / 0x10000000; + } + + function next(maxValue) { + return Math.floor(this.nextDouble() * maxValue); + } + + /* + * Creates iterator over array, which returns items of array in random order + * Time complexity is guaranteed to be O(n); + */ + function randomIterator(array, customRandom) { + var localRandom = customRandom || random(); + if (typeof localRandom.next !== 'function') { + throw new Error('customRandom does not match expected API: next() function is missing'); + } + + return { + forEach: forEach, + + /** + * Shuffles array randomly, in place. + */ + shuffle: shuffle + }; + + function shuffle() { + var i, j, t; + for (i = array.length - 1; i > 0; --i) { + j = localRandom.next(i + 1); // i inclusive + t = array[j]; + array[j] = array[i]; + array[i] = t; + } + + return array; + } + + function forEach(callback) { + var i, j, t; + for (i = array.length - 1; i > 0; --i) { + j = localRandom.next(i + 1); // i inclusive + t = array[j]; + array[j] = array[i]; + array[i] = t; + + callback(t); + } + + if (array.length) { + callback(array[0]); + } + } + } + + /** + * Manages a simulation of physical forces acting on bodies and springs. + */ + + var createPhysicsSimulator_1 = createPhysicsSimulator; + + var generateCreateBodyFunction = generateCreateBody.exports; + var generateQuadTreeFunction = generateQuadTree.exports; + var generateBoundsFunction = generateBounds.exports; + var generateCreateDragForceFunction = generateCreateDragForce.exports; + var generateCreateSpringForceFunction = generateCreateSpringForce.exports; + var generateIntegratorFunction = generateIntegrator.exports; + + var dimensionalCache = {}; + + function createPhysicsSimulator(settings) { + var Spring = spring; + var merge = ngraph_merge; + var eventify = ngraph_events; + if (settings) { + // Check for names from older versions of the layout + if (settings.springCoeff !== undefined) throw new Error('springCoeff was renamed to springCoefficient'); + if (settings.dragCoeff !== undefined) throw new Error('dragCoeff was renamed to dragCoefficient'); + } + + settings = merge(settings, { + /** + * Ideal length for links (springs in physical model). + */ + springLength: 10, + + /** + * Hook's law coefficient. 1 - solid spring. + */ + springCoefficient: 0.8, + + /** + * Coulomb's law coefficient. It's used to repel nodes thus should be negative + * if you make it positive nodes start attract each other :). + */ + gravity: -12, + + /** + * Theta coefficient from Barnes Hut simulation. Ranged between (0, 1). + * The closer it's to 1 the more nodes algorithm will have to go through. + * Setting it to one makes Barnes Hut simulation no different from + * brute-force forces calculation (each node is considered). + */ + theta: 0.8, + + /** + * Drag force coefficient. Used to slow down system, thus should be less than 1. + * The closer it is to 0 the less tight system will be. + */ + dragCoefficient: 0.9, // TODO: Need to rename this to something better. E.g. `dragCoefficient` + + /** + * Default time step (dt) for forces integration + */ + timeStep : 0.5, + + /** + * Adaptive time step uses average spring length to compute actual time step: + * See: https://twitter.com/anvaka/status/1293067160755957760 + */ + adaptiveTimeStepWeight: 0, + + /** + * This parameter defines number of dimensions of the space where simulation + * is performed. + */ + dimensions: 2, + + /** + * In debug mode more checks are performed, this will help you catch errors + * quickly, however for production build it is recommended to turn off this flag + * to speed up computation. + */ + debug: false + }); + + var factory = dimensionalCache[settings.dimensions]; + if (!factory) { + var dimensions = settings.dimensions; + factory = { + Body: generateCreateBodyFunction(dimensions, settings.debug), + createQuadTree: generateQuadTreeFunction(dimensions), + createBounds: generateBoundsFunction(dimensions), + createDragForce: generateCreateDragForceFunction(dimensions), + createSpringForce: generateCreateSpringForceFunction(dimensions), + integrate: generateIntegratorFunction(dimensions), + }; + dimensionalCache[dimensions] = factory; + } + + var Body = factory.Body; + var createQuadTree = factory.createQuadTree; + var createBounds = factory.createBounds; + var createDragForce = factory.createDragForce; + var createSpringForce = factory.createSpringForce; + var integrate = factory.integrate; + var createBody = pos => new Body(pos); + + var random = ngraph_random.exports.random(42); + var bodies = []; // Bodies in this simulation. + var springs = []; // Springs in this simulation. + + var quadTree = createQuadTree(settings, random); + var bounds = createBounds(bodies, settings, random); + var springForce = createSpringForce(settings, random); + var dragForce = createDragForce(settings); + + var totalMovement = 0; // how much movement we made on last step + var forces = []; + var forceMap = new Map(); + var iterationNumber = 0; + + addForce('nbody', nbodyForce); + addForce('spring', updateSpringForce); + + var publicApi = { + /** + * Array of bodies, registered with current simulator + * + * Note: To add new body, use addBody() method. This property is only + * exposed for testing/performance purposes. + */ + bodies: bodies, + + quadTree: quadTree, + + /** + * Array of springs, registered with current simulator + * + * Note: To add new spring, use addSpring() method. This property is only + * exposed for testing/performance purposes. + */ + springs: springs, + + /** + * Returns settings with which current simulator was initialized + */ + settings: settings, + + /** + * Adds a new force to simulation + */ + addForce: addForce, + + /** + * Removes a force from the simulation. + */ + removeForce: removeForce, + + /** + * Returns a map of all registered forces. + */ + getForces: getForces, + + /** + * Performs one step of force simulation. + * + * @returns {boolean} true if system is considered stable; False otherwise. + */ + step: function () { + for (var i = 0; i < forces.length; ++i) { + forces[i](iterationNumber); + } + var movement = integrate(bodies, settings.timeStep, settings.adaptiveTimeStepWeight); + iterationNumber += 1; + return movement; + }, + + /** + * Adds body to the system + * + * @param {ngraph.physics.primitives.Body} body physical body + * + * @returns {ngraph.physics.primitives.Body} added body + */ + addBody: function (body) { + if (!body) { + throw new Error('Body is required'); + } + bodies.push(body); + + return body; + }, + + /** + * Adds body to the system at given position + * + * @param {Object} pos position of a body + * + * @returns {ngraph.physics.primitives.Body} added body + */ + addBodyAt: function (pos) { + if (!pos) { + throw new Error('Body position is required'); + } + var body = createBody(pos); + bodies.push(body); + + return body; + }, + + /** + * Removes body from the system + * + * @param {ngraph.physics.primitives.Body} body to remove + * + * @returns {Boolean} true if body found and removed. falsy otherwise; + */ + removeBody: function (body) { + if (!body) { return; } + + var idx = bodies.indexOf(body); + if (idx < 0) { return; } + + bodies.splice(idx, 1); + if (bodies.length === 0) { + bounds.reset(); + } + return true; + }, + + /** + * Adds a spring to this simulation. + * + * @returns {Object} - a handle for a spring. If you want to later remove + * spring pass it to removeSpring() method. + */ + addSpring: function (body1, body2, springLength, springCoefficient) { + if (!body1 || !body2) { + throw new Error('Cannot add null spring to force simulator'); + } + + if (typeof springLength !== 'number') { + springLength = -1; // assume global configuration + } + + var spring = new Spring(body1, body2, springLength, springCoefficient >= 0 ? springCoefficient : -1); + springs.push(spring); + + // TODO: could mark simulator as dirty. + return spring; + }, + + /** + * Returns amount of movement performed on last step() call + */ + getTotalMovement: function () { + return totalMovement; + }, + + /** + * Removes spring from the system + * + * @param {Object} spring to remove. Spring is an object returned by addSpring + * + * @returns {Boolean} true if spring found and removed. falsy otherwise; + */ + removeSpring: function (spring) { + if (!spring) { return; } + var idx = springs.indexOf(spring); + if (idx > -1) { + springs.splice(idx, 1); + return true; + } + }, + + getBestNewBodyPosition: function (neighbors) { + return bounds.getBestNewPosition(neighbors); + }, + + /** + * Returns bounding box which covers all bodies + */ + getBBox: getBoundingBox, + getBoundingBox: getBoundingBox, + + invalidateBBox: function () { + console.warn('invalidateBBox() is deprecated, bounds always recomputed on `getBBox()` call'); + }, + + // TODO: Move the force specific stuff to force + gravity: function (value) { + if (value !== undefined) { + settings.gravity = value; + quadTree.options({gravity: value}); + return this; + } else { + return settings.gravity; + } + }, + + theta: function (value) { + if (value !== undefined) { + settings.theta = value; + quadTree.options({theta: value}); + return this; + } else { + return settings.theta; + } + }, + + /** + * Returns pseudo-random number generator instance. + */ + random: random + }; + + // allow settings modification via public API: + expose(settings, publicApi); + + eventify(publicApi); + + return publicApi; + + function getBoundingBox() { + bounds.update(); + return bounds.box; + } + + function addForce(forceName, forceFunction) { + if (forceMap.has(forceName)) throw new Error('Force ' + forceName + ' is already added'); + + forceMap.set(forceName, forceFunction); + forces.push(forceFunction); + } + + function removeForce(forceName) { + var forceIndex = forces.indexOf(forceMap.get(forceName)); + if (forceIndex < 0) return; + forces.splice(forceIndex, 1); + forceMap.delete(forceName); + } + + function getForces() { + // TODO: Should I trust them or clone the forces? + return forceMap; + } + + function nbodyForce(/* iterationUmber */) { + if (bodies.length === 0) return; + + quadTree.insertBodies(bodies); + var i = bodies.length; + while (i--) { + var body = bodies[i]; + if (!body.isPinned) { + body.reset(); + quadTree.updateBodyForce(body); + dragForce.update(body); + } + } + } + + function updateSpringForce() { + var i = springs.length; + while (i--) { + springForce.update(springs[i]); + } + } + + } + + function expose(settings, target) { + for (var key in settings) { + augment(settings, target, key); + } + } + + function augment(source, target, key) { + if (!source.hasOwnProperty(key)) return; + if (typeof target[key] === 'function') { + // this accessor is already defined. Ignore it + return; + } + var sourceIsNumber = Number.isFinite(source[key]); + + if (sourceIsNumber) { + target[key] = function (value) { + if (value !== undefined) { + if (!Number.isFinite(value)) throw new Error('Value of ' + key + ' should be a valid number.'); + source[key] = value; + return target; + } + return source[key]; + }; + } else { + target[key] = function (value) { + if (value !== undefined) { + source[key] = value; + return target; + } + return source[key]; + }; + } + } + + ngraph_forcelayout.exports = createLayout; + ngraph_forcelayout.exports.simulator = createPhysicsSimulator_1; + + var eventify = ngraph_events; + + /** + * Creates force based layout for a given graph. + * + * @param {ngraph.graph} graph which needs to be laid out + * @param {object} physicsSettings if you need custom settings + * for physics simulator you can pass your own settings here. If it's not passed + * a default one will be created. + */ + function createLayout(graph, physicsSettings) { + if (!graph) { + throw new Error('Graph structure cannot be undefined'); + } + + var createSimulator = (physicsSettings && physicsSettings.createSimulator) || createPhysicsSimulator_1; + var physicsSimulator = createSimulator(physicsSettings); + if (Array.isArray(physicsSettings)) throw new Error('Physics settings is expected to be an object'); + + var nodeMass = defaultNodeMass; + if (physicsSettings && typeof physicsSettings.nodeMass === 'function') { + nodeMass = physicsSettings.nodeMass; + } + + var nodeBodies = new Map(); + var springs = {}; + var bodiesCount = 0; + + var springTransform = physicsSimulator.settings.springTransform || noop; + + // Initialize physics with what we have in the graph: + initPhysics(); + listenToEvents(); + + var wasStable = false; + + var api = { + /** + * Performs one step of iterative layout algorithm + * + * @returns {boolean} true if the system should be considered stable; False otherwise. + * The system is stable if no further call to `step()` can improve the layout. + */ + step: function() { + if (bodiesCount === 0) { + updateStableStatus(true); + return true; + } + + var lastMove = physicsSimulator.step(); + + // Save the movement in case if someone wants to query it in the step + // callback. + api.lastMove = lastMove; + + // Allow listeners to perform low-level actions after nodes are updated. + api.fire('step'); + + var ratio = lastMove/bodiesCount; + var isStableNow = ratio <= 0.01; // TODO: The number is somewhat arbitrary... + updateStableStatus(isStableNow); + + + return isStableNow; + }, + + /** + * For a given `nodeId` returns position + */ + getNodePosition: function (nodeId) { + return getInitializedBody(nodeId).pos; + }, + + /** + * Sets position of a node to a given coordinates + * @param {string} nodeId node identifier + * @param {number} x position of a node + * @param {number} y position of a node + * @param {number=} z position of node (only if applicable to body) + */ + setNodePosition: function (nodeId) { + var body = getInitializedBody(nodeId); + body.setPosition.apply(body, Array.prototype.slice.call(arguments, 1)); + }, + + /** + * @returns {Object} Link position by link id + * @returns {Object.from} {x, y} coordinates of link start + * @returns {Object.to} {x, y} coordinates of link end + */ + getLinkPosition: function (linkId) { + var spring = springs[linkId]; + if (spring) { + return { + from: spring.from.pos, + to: spring.to.pos + }; + } + }, + + /** + * @returns {Object} area required to fit in the graph. Object contains + * `x1`, `y1` - top left coordinates + * `x2`, `y2` - bottom right coordinates + */ + getGraphRect: function () { + return physicsSimulator.getBBox(); + }, + + /** + * Iterates over each body in the layout simulator and performs a callback(body, nodeId) + */ + forEachBody: forEachBody, + + /* + * Requests layout algorithm to pin/unpin node to its current position + * Pinned nodes should not be affected by layout algorithm and always + * remain at their position + */ + pinNode: function (node, isPinned) { + var body = getInitializedBody(node.id); + body.isPinned = !!isPinned; + }, + + /** + * Checks whether given graph's node is currently pinned + */ + isNodePinned: function (node) { + return getInitializedBody(node.id).isPinned; + }, + + /** + * Request to release all resources + */ + dispose: function() { + graph.off('changed', onGraphChanged); + api.fire('disposed'); + }, + + /** + * Gets physical body for a given node id. If node is not found undefined + * value is returned. + */ + getBody: getBody, + + /** + * Gets spring for a given edge. + * + * @param {string} linkId link identifer. If two arguments are passed then + * this argument is treated as formNodeId + * @param {string=} toId when defined this parameter denotes head of the link + * and first argument is treated as tail of the link (fromId) + */ + getSpring: getSpring, + + /** + * Returns length of cumulative force vector. The closer this to zero - the more stable the system is + */ + getForceVectorLength: getForceVectorLength, + + /** + * [Read only] Gets current physics simulator + */ + simulator: physicsSimulator, + + /** + * Gets the graph that was used for layout + */ + graph: graph, + + /** + * Gets amount of movement performed during last step operation + */ + lastMove: 0 + }; + + eventify(api); + + return api; + + function updateStableStatus(isStableNow) { + if (wasStable !== isStableNow) { + wasStable = isStableNow; + onStableChanged(isStableNow); + } + } + + function forEachBody(cb) { + nodeBodies.forEach(cb); + } + + function getForceVectorLength() { + var fx = 0, fy = 0; + forEachBody(function(body) { + fx += Math.abs(body.force.x); + fy += Math.abs(body.force.y); + }); + return Math.sqrt(fx * fx + fy * fy); + } + + function getSpring(fromId, toId) { + var linkId; + if (toId === undefined) { + if (typeof fromId !== 'object') { + // assume fromId as a linkId: + linkId = fromId; + } else { + // assume fromId to be a link object: + linkId = fromId.id; + } + } else { + // toId is defined, should grab link: + var link = graph.hasLink(fromId, toId); + if (!link) return; + linkId = link.id; + } + + return springs[linkId]; + } + + function getBody(nodeId) { + return nodeBodies.get(nodeId); + } + + function listenToEvents() { + graph.on('changed', onGraphChanged); + } + + function onStableChanged(isStable) { + api.fire('stable', isStable); + } + + function onGraphChanged(changes) { + for (var i = 0; i < changes.length; ++i) { + var change = changes[i]; + if (change.changeType === 'add') { + if (change.node) { + initBody(change.node.id); + } + if (change.link) { + initLink(change.link); + } + } else if (change.changeType === 'remove') { + if (change.node) { + releaseNode(change.node); + } + if (change.link) { + releaseLink(change.link); + } + } + } + bodiesCount = graph.getNodesCount(); + } + + function initPhysics() { + bodiesCount = 0; + + graph.forEachNode(function (node) { + initBody(node.id); + bodiesCount += 1; + }); + + graph.forEachLink(initLink); + } + + function initBody(nodeId) { + var body = nodeBodies.get(nodeId); + if (!body) { + var node = graph.getNode(nodeId); + if (!node) { + throw new Error('initBody() was called with unknown node id'); + } + + var pos = node.position; + if (!pos) { + var neighbors = getNeighborBodies(node); + pos = physicsSimulator.getBestNewBodyPosition(neighbors); + } + + body = physicsSimulator.addBodyAt(pos); + body.id = nodeId; + + nodeBodies.set(nodeId, body); + updateBodyMass(nodeId); + + if (isNodeOriginallyPinned(node)) { + body.isPinned = true; + } + } + } + + function releaseNode(node) { + var nodeId = node.id; + var body = nodeBodies.get(nodeId); + if (body) { + nodeBodies.delete(nodeId); + physicsSimulator.removeBody(body); + } + } + + function initLink(link) { + updateBodyMass(link.fromId); + updateBodyMass(link.toId); + + var fromBody = nodeBodies.get(link.fromId), + toBody = nodeBodies.get(link.toId), + spring = physicsSimulator.addSpring(fromBody, toBody, link.length); + + springTransform(link, spring); + + springs[link.id] = spring; + } + + function releaseLink(link) { + var spring = springs[link.id]; + if (spring) { + var from = graph.getNode(link.fromId), + to = graph.getNode(link.toId); + + if (from) updateBodyMass(from.id); + if (to) updateBodyMass(to.id); + + delete springs[link.id]; + + physicsSimulator.removeSpring(spring); + } + } + + function getNeighborBodies(node) { + // TODO: Could probably be done better on memory + var neighbors = []; + if (!node.links) { + return neighbors; + } + var maxNeighbors = Math.min(node.links.length, 2); + for (var i = 0; i < maxNeighbors; ++i) { + var link = node.links[i]; + var otherBody = link.fromId !== node.id ? nodeBodies.get(link.fromId) : nodeBodies.get(link.toId); + if (otherBody && otherBody.pos) { + neighbors.push(otherBody); + } + } + + return neighbors; + } + + function updateBodyMass(nodeId) { + var body = nodeBodies.get(nodeId); + body.mass = nodeMass(nodeId); + if (Number.isNaN(body.mass)) { + throw new Error('Node mass should be a number'); + } + } + + /** + * Checks whether graph node has in its settings pinned attribute, + * which means layout algorithm cannot move it. Node can be marked + * as pinned, if it has "isPinned" attribute, or when node.data has it. + * + * @param {Object} node a graph node to check + * @return {Boolean} true if node should be treated as pinned; false otherwise. + */ + function isNodeOriginallyPinned(node) { + return (node && (node.isPinned || (node.data && node.data.isPinned))); + } + + function getInitializedBody(nodeId) { + var body = nodeBodies.get(nodeId); + if (!body) { + initBody(nodeId); + body = nodeBodies.get(nodeId); + } + return body; + } + + /** + * Calculates mass of a body, which corresponds to node with given id. + * + * @param {String|Number} nodeId identifier of a node, for which body mass needs to be calculated + * @returns {Number} recommended mass of the body; + */ + function defaultNodeMass(nodeId) { + var links = graph.getLinks(nodeId); + if (!links) return 1; + return 1 + links.length / 3.0; + } + } + + function noop() { } + + var forcelayout = ngraph_forcelayout.exports; + + /** + * Returns a function, that, as long as it continues to be invoked, will not + * be triggered. The function will be called after it stops being called for + * N milliseconds. If `immediate` is passed, trigger the function on the + * leading edge, instead of the trailing. The function also has a property 'clear' + * that is a function which will clear the timer to prevent previously scheduled executions. + * + * @source underscore.js + * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/ + * @param {Function} function to wrap + * @param {Number} timeout in ms (`100`) + * @param {Boolean} whether to execute at the beginning (`false`) + * @api public + */ + + function debounce(func, wait, immediate){ + var timeout, args, context, timestamp, result; + if (null == wait) wait = 100; + + function later() { + var last = Date.now() - timestamp; + + if (last < wait && last >= 0) { + timeout = setTimeout(later, wait - last); + } else { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + context = args = null; + } + } + } + var debounced = function(){ + context = this; + args = arguments; + timestamp = Date.now(); + var callNow = immediate && !timeout; + if (!timeout) timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + context = args = null; + } + + return result; + }; + + debounced.clear = function() { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + }; + + debounced.flush = function() { + if (timeout) { + result = func.apply(context, args); + context = args = null; + + clearTimeout(timeout); + timeout = null; + } + }; + + return debounced; + } + // Adds compatibility for ES modules + debounce.debounce = debounce; + + var debounce_1 = debounce; + + function _classCallCheck$1(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + function _slicedToArray$4(arr, i) { + return _arrayWithHoles$4(arr) || _iterableToArrayLimit$4(arr, i) || _nonIterableRest$4(); + } + + function _arrayWithHoles$4(arr) { + if (Array.isArray(arr)) return arr; + } + + function _iterableToArrayLimit$4(arr, i) { + if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { + return; + } + + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + function _nonIterableRest$4() { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); + } + + var Prop = function Prop(name, _ref) { + var _ref$default = _ref["default"], + defaultVal = _ref$default === void 0 ? null : _ref$default, + _ref$triggerUpdate = _ref.triggerUpdate, + triggerUpdate = _ref$triggerUpdate === void 0 ? true : _ref$triggerUpdate, + _ref$onChange = _ref.onChange, + onChange = _ref$onChange === void 0 ? function (newVal, state) {} : _ref$onChange; + + _classCallCheck$1(this, Prop); + + this.name = name; + this.defaultVal = defaultVal; + this.triggerUpdate = triggerUpdate; + this.onChange = onChange; + }; + + function index$2 (_ref2) { + var _ref2$stateInit = _ref2.stateInit, + stateInit = _ref2$stateInit === void 0 ? function () { + return {}; + } : _ref2$stateInit, + _ref2$props = _ref2.props, + rawProps = _ref2$props === void 0 ? {} : _ref2$props, + _ref2$methods = _ref2.methods, + methods = _ref2$methods === void 0 ? {} : _ref2$methods, + _ref2$aliases = _ref2.aliases, + aliases = _ref2$aliases === void 0 ? {} : _ref2$aliases, + _ref2$init = _ref2.init, + initFn = _ref2$init === void 0 ? function () {} : _ref2$init, + _ref2$update = _ref2.update, + updateFn = _ref2$update === void 0 ? function () {} : _ref2$update; + // Parse props into Prop instances + var props = Object.keys(rawProps).map(function (propName) { + return new Prop(propName, rawProps[propName]); + }); + return function () { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + // Holds component state + var state = Object.assign({}, stateInit instanceof Function ? stateInit(options) : stateInit, // Support plain objects for backwards compatibility + { + initialised: false + }); // keeps track of which props triggered an update + + var changedProps = {}; // Component constructor + + function comp(nodeElement) { + initStatic(nodeElement, options); + digest(); + return comp; + } + + var initStatic = function initStatic(nodeElement, options) { + initFn.call(comp, nodeElement, state, options); + state.initialised = true; + }; + + var digest = debounce_1(function () { + if (!state.initialised) { + return; + } + + updateFn.call(comp, state, changedProps); + changedProps = {}; + }, 1); // Getter/setter methods + + props.forEach(function (prop) { + comp[prop.name] = getSetProp(prop); + + function getSetProp(_ref3) { + var prop = _ref3.name, + _ref3$triggerUpdate = _ref3.triggerUpdate, + redigest = _ref3$triggerUpdate === void 0 ? false : _ref3$triggerUpdate, + _ref3$onChange = _ref3.onChange, + onChange = _ref3$onChange === void 0 ? function (newVal, state) {} : _ref3$onChange, + _ref3$defaultVal = _ref3.defaultVal, + defaultVal = _ref3$defaultVal === void 0 ? null : _ref3$defaultVal; + return function (_) { + var curVal = state[prop]; + + if (!arguments.length) { + return curVal; + } // Getter mode + + + var val = _ === undefined ? defaultVal : _; // pick default if value passed is undefined + + state[prop] = val; + onChange.call(comp, val, state, curVal); // track changed props + + !changedProps.hasOwnProperty(prop) && (changedProps[prop] = curVal); + + if (redigest) { + digest(); + } + + return comp; + }; + } + }); // Other methods + + Object.keys(methods).forEach(function (methodName) { + comp[methodName] = function () { + var _methods$methodName; + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return (_methods$methodName = methods[methodName]).call.apply(_methods$methodName, [comp, state].concat(args)); + }; + }); // Link aliases + + Object.entries(aliases).forEach(function (_ref4) { + var _ref5 = _slicedToArray$4(_ref4, 2), + alias = _ref5[0], + target = _ref5[1]; + + return comp[alias] = comp[target]; + }); // Reset all component props to their default value + + comp.resetProps = function () { + props.forEach(function (prop) { + comp[prop.name](prop.defaultVal); + }); + return comp; + }; // + + + comp.resetProps(); // Apply all prop defaults + + state._rerender = digest; // Expose digest method + + return comp; + }; + } + + var index$1 = (function (p) { + return p instanceof Function ? p // fn + : typeof p === 'string' ? function (obj) { + return obj[p]; + } // property name + : function (obj) { + return p; + }; + }); // constant + + function max(values, valueof) { + let max; + if (valueof === undefined) { + for (const value of values) { + if (value != null + && (max < value || (max === undefined && value >= value))) { + max = value; + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null + && (max < value || (max === undefined && value >= value))) { + max = value; + } + } + } + return max; + } + + function min(values, valueof) { + let min; + if (valueof === undefined) { + for (const value of values) { + if (value != null + && (min > value || (min === undefined && value >= value))) { + min = value; + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null + && (min > value || (min === undefined && value >= value))) { + min = value; + } + } + } + return min; + } + + function _objectWithoutPropertiesLoose$2(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + + return target; + } + + function _objectWithoutProperties$2(source, excluded) { + if (source == null) return {}; + + var target = _objectWithoutPropertiesLoose$2(source, excluded); + + var key, i; + + if (Object.getOwnPropertySymbols) { + var sourceSymbolKeys = Object.getOwnPropertySymbols(source); + + for (i = 0; i < sourceSymbolKeys.length; i++) { + key = sourceSymbolKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; + target[key] = source[key]; + } + } + + return target; + } + + function _slicedToArray$3(arr, i) { + return _arrayWithHoles$3(arr) || _iterableToArrayLimit$3(arr, i) || _nonIterableRest$3(); + } + + function _toConsumableArray$3(arr) { + return _arrayWithoutHoles$3(arr) || _iterableToArray$3(arr) || _nonIterableSpread$3(); + } + + function _arrayWithoutHoles$3(arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; + + return arr2; + } + } + + function _arrayWithHoles$3(arr) { + if (Array.isArray(arr)) return arr; + } + + function _iterableToArray$3(iter) { + if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); + } + + function _iterableToArrayLimit$3(arr, i) { + if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { + return; + } + + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + function _nonIterableSpread$3() { + throw new TypeError("Invalid attempt to spread non-iterable instance"); + } + + function _nonIterableRest$3() { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); + } + + function _toPrimitive(input, hint) { + if (typeof input !== "object" || input === null) return input; + var prim = input[Symbol.toPrimitive]; + + if (prim !== undefined) { + var res = prim.call(input, hint || "default"); + if (typeof res !== "object") return res; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + + return (hint === "string" ? String : Number)(input); + } + + function _toPropertyKey(arg) { + var key = _toPrimitive(arg, "string"); + + return typeof key === "symbol" ? key : String(key); + } + + var index = (function () { + var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var keyAccessors = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + var multiItem = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + var flattenKeys = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + var keys = (keyAccessors instanceof Array ? keyAccessors.length ? keyAccessors : [undefined] : [keyAccessors]).map(function (key) { + return { + keyAccessor: key, + isProp: !(key instanceof Function) + }; + }); + var indexedResult = list.reduce(function (res, item) { + var iterObj = res; + var itemVal = item; + keys.forEach(function (_ref, idx) { + var keyAccessor = _ref.keyAccessor, + isProp = _ref.isProp; + var key; + + if (isProp) { + var _itemVal = itemVal, + propVal = _itemVal[keyAccessor], + rest = _objectWithoutProperties$2(_itemVal, [keyAccessor].map(_toPropertyKey)); + + key = propVal; + itemVal = rest; + } else { + key = keyAccessor(itemVal, idx); + } + + if (idx + 1 < keys.length) { + if (!iterObj.hasOwnProperty(key)) { + iterObj[key] = {}; + } + + iterObj = iterObj[key]; + } else { + // Leaf key + if (multiItem) { + if (!iterObj.hasOwnProperty(key)) { + iterObj[key] = []; + } + + iterObj[key].push(itemVal); + } else { + iterObj[key] = itemVal; + } + } + }); + return res; + }, {}); + + if (multiItem instanceof Function) { + // Reduce leaf multiple values + (function reduce(node) { + var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; + + if (level === keys.length) { + Object.keys(node).forEach(function (k) { + return node[k] = multiItem(node[k]); + }); + } else { + Object.values(node).forEach(function (child) { + return reduce(child, level + 1); + }); + } + })(indexedResult); // IIFE + + } + + var result = indexedResult; + + if (flattenKeys) { + // flatten into array + result = []; + + (function flatten(node) { + var accKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + + if (accKeys.length === keys.length) { + result.push({ + keys: accKeys, + vals: node + }); + } else { + Object.entries(node).forEach(function (_ref2) { + var _ref3 = _slicedToArray$3(_ref2, 2), + key = _ref3[0], + val = _ref3[1]; + + return flatten(val, [].concat(_toConsumableArray$3(accKeys), [key])); + }); + } + })(indexedResult); //IIFE + + + if (keyAccessors instanceof Array && keyAccessors.length === 0 && result.length === 1) { + // clear keys if there's no key accessors (single result) + result[0].keys = []; + } + } + + return result; + }); + + function _defineProperty$2(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + } + + function ownKeys$1(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + if (enumerableOnly) symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + }); + keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread2$1(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + + if (i % 2) { + ownKeys$1(Object(source), true).forEach(function (key) { + _defineProperty$2(target, key, source[key]); + }); + } else if (Object.getOwnPropertyDescriptors) { + Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); + } else { + ownKeys$1(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + } + + return target; + } + + function _objectWithoutPropertiesLoose$1(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + + return target; + } + + function _objectWithoutProperties$1(source, excluded) { + if (source == null) return {}; + + var target = _objectWithoutPropertiesLoose$1(source, excluded); + + var key, i; + + if (Object.getOwnPropertySymbols) { + var sourceSymbolKeys = Object.getOwnPropertySymbols(source); + + for (i = 0; i < sourceSymbolKeys.length; i++) { + key = sourceSymbolKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; + target[key] = source[key]; + } + } + + return target; + } + + function _slicedToArray$2(arr, i) { + return _arrayWithHoles$2(arr) || _iterableToArrayLimit$2(arr, i) || _nonIterableRest$2(); + } + + function _toConsumableArray$2(arr) { + return _arrayWithoutHoles$2(arr) || _iterableToArray$2(arr) || _nonIterableSpread$2(); + } + + function _arrayWithoutHoles$2(arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; + + return arr2; + } + } + + function _arrayWithHoles$2(arr) { + if (Array.isArray(arr)) return arr; + } + + function _iterableToArray$2(iter) { + if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); + } + + function _iterableToArrayLimit$2(arr, i) { + if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { + return; + } + + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + function _nonIterableSpread$2() { + throw new TypeError("Invalid attempt to spread non-iterable instance"); + } + + function _nonIterableRest$2() { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); + } + + function diffArrays(prev, next, idAccessor) { + var result = { + enter: [], + update: [], + exit: [] + }; + + if (!idAccessor) { + // use object references for comparison + var prevSet = new Set(prev); + var nextSet = new Set(next); + new Set([].concat(_toConsumableArray$2(prevSet), _toConsumableArray$2(nextSet))).forEach(function (item) { + var type = !prevSet.has(item) ? 'enter' : !nextSet.has(item) ? 'exit' : 'update'; + result[type].push(type === 'update' ? [item, item] : item); + }); + } else { + // compare by id (duplicate keys are ignored) + var prevById = index(prev, idAccessor, false); + var nextById = index(next, idAccessor, false); + var byId = Object.assign({}, prevById, nextById); + Object.entries(byId).forEach(function (_ref) { + var _ref2 = _slicedToArray$2(_ref, 2), + id = _ref2[0], + item = _ref2[1]; + + var type = !prevById.hasOwnProperty(id) ? 'enter' : !nextById.hasOwnProperty(id) ? 'exit' : 'update'; + result[type].push(type === 'update' ? [prevById[id], nextById[id]] : item); + }); + } + + return result; + } + + function dataBindDiff(data, existingObjs, _ref3) { + var _ref3$objBindAttr = _ref3.objBindAttr, + objBindAttr = _ref3$objBindAttr === void 0 ? '__obj' : _ref3$objBindAttr, + _ref3$dataBindAttr = _ref3.dataBindAttr, + dataBindAttr = _ref3$dataBindAttr === void 0 ? '__data' : _ref3$dataBindAttr, + idAccessor = _ref3.idAccessor, + _ref3$purge = _ref3.purge, + purge = _ref3$purge === void 0 ? false : _ref3$purge; + + var isObjValid = function isObjValid(obj) { + return obj.hasOwnProperty(dataBindAttr); + }; + + var removeObjs = existingObjs.filter(function (obj) { + return !isObjValid(obj); + }); + var prevD = existingObjs.filter(isObjValid).map(function (obj) { + return obj[dataBindAttr]; + }); + var nextD = data; + var diff = purge ? { + enter: nextD, + exit: prevD, + update: [] + } // don't diff data in purge mode + : diffArrays(prevD, nextD, idAccessor); + diff.update = diff.update.map(function (_ref4) { + var _ref5 = _slicedToArray$2(_ref4, 2), + prevD = _ref5[0], + nextD = _ref5[1]; + + if (prevD !== nextD) { + // transfer obj to new data point (if different) + nextD[objBindAttr] = prevD[objBindAttr]; + nextD[objBindAttr][dataBindAttr] = nextD; + } + + return nextD; + }); + diff.exit = diff.exit.concat(removeObjs.map(function (obj) { + return _defineProperty$2({}, objBindAttr, obj); + })); + return diff; + } + + function viewDigest(data, existingObjs, // list + appendObj, // item => {...} function + removeObj, // item => {...} function + _ref7) { + var _ref7$createObj = _ref7.createObj, + createObj = _ref7$createObj === void 0 ? function (d) { + return {}; + } : _ref7$createObj, + _ref7$updateObj = _ref7.updateObj, + updateObj = _ref7$updateObj === void 0 ? function (obj, d) {} : _ref7$updateObj, + _ref7$exitObj = _ref7.exitObj, + exitObj = _ref7$exitObj === void 0 ? function (obj) {} : _ref7$exitObj, + _ref7$objBindAttr = _ref7.objBindAttr, + objBindAttr = _ref7$objBindAttr === void 0 ? '__obj' : _ref7$objBindAttr, + _ref7$dataBindAttr = _ref7.dataBindAttr, + dataBindAttr = _ref7$dataBindAttr === void 0 ? '__data' : _ref7$dataBindAttr, + dataDiffOptions = _objectWithoutProperties$1(_ref7, ["createObj", "updateObj", "exitObj", "objBindAttr", "dataBindAttr"]); + + var _dataBindDiff = dataBindDiff(data, existingObjs, _objectSpread2$1({ + objBindAttr: objBindAttr, + dataBindAttr: dataBindAttr + }, dataDiffOptions)), + enter = _dataBindDiff.enter, + update = _dataBindDiff.update, + exit = _dataBindDiff.exit; // Remove exiting points + + + exit.forEach(function (d) { + var obj = d[objBindAttr]; + delete d[objBindAttr]; // unbind obj + + exitObj(obj); + removeObj(obj); + }); + var newObjs = createObjs(enter); + var pointsData = [].concat(_toConsumableArray$2(enter), _toConsumableArray$2(update)); + updateObjs(pointsData); // Add new points + + newObjs.forEach(appendObj); // + + function createObjs(data) { + var newObjs = []; + data.forEach(function (d) { + var obj = createObj(d); + + if (obj) { + obj[dataBindAttr] = d; + d[objBindAttr] = obj; + newObjs.push(obj); + } + }); + return newObjs; + } + + function updateObjs(data) { + data.forEach(function (d) { + var obj = d[objBindAttr]; + + if (obj) { + obj[dataBindAttr] = d; + updateObj(obj, d); + } + }); + } + } + + function initRange(domain, range) { + switch (arguments.length) { + case 0: break; + case 1: this.range(domain); break; + default: this.range(range).domain(domain); break; + } + return this; + } + + const implicit = Symbol("implicit"); + + function ordinal() { + var index = new Map(), + domain = [], + range = [], + unknown = implicit; + + function scale(d) { + var key = d + "", i = index.get(key); + if (!i) { + if (unknown !== implicit) return unknown; + index.set(key, i = domain.push(d)); + } + return range[(i - 1) % range.length]; + } + + scale.domain = function(_) { + if (!arguments.length) return domain.slice(); + domain = [], index = new Map(); + for (const value of _) { + const key = value + ""; + if (index.has(key)) continue; + index.set(key, domain.push(value)); + } + return scale; + }; + + scale.range = function(_) { + return arguments.length ? (range = Array.from(_), scale) : range.slice(); + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.copy = function() { + return ordinal(domain, range).unknown(unknown); + }; + + initRange.apply(scale, arguments); + + return scale; + } + + function colors(specifier) { + var n = specifier.length / 6 | 0, colors = new Array(n), i = 0; + while (i < n) colors[i] = "#" + specifier.slice(i * 6, ++i * 6); + return colors; + } + + var schemePaired = colors("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"); + + var tinycolor = {exports: {}}; + + (function (module) { + // TinyColor v1.4.2 + // https://github.com/bgrins/TinyColor + // Brian Grinstead, MIT License + + (function(Math) { + + var trimLeft = /^\s+/, + trimRight = /\s+$/, + tinyCounter = 0, + mathRound = Math.round, + mathMin = Math.min, + mathMax = Math.max, + mathRandom = Math.random; + + function tinycolor (color, opts) { + + color = (color) ? color : ''; + opts = opts || { }; + + // If input is already a tinycolor, return itself + if (color instanceof tinycolor) { + return color; + } + // If we are called as a function, call using new instead + if (!(this instanceof tinycolor)) { + return new tinycolor(color, opts); + } + + var rgb = inputToRGB(color); + this._originalInput = color, + this._r = rgb.r, + this._g = rgb.g, + this._b = rgb.b, + this._a = rgb.a, + this._roundA = mathRound(100*this._a) / 100, + this._format = opts.format || rgb.format; + this._gradientType = opts.gradientType; + + // Don't let the range of [0,255] come back in [0,1]. + // Potentially lose a little bit of precision here, but will fix issues where + // .5 gets interpreted as half of the total, instead of half of 1 + // If it was supposed to be 128, this was already taken care of by `inputToRgb` + if (this._r < 1) { this._r = mathRound(this._r); } + if (this._g < 1) { this._g = mathRound(this._g); } + if (this._b < 1) { this._b = mathRound(this._b); } + + this._ok = rgb.ok; + this._tc_id = tinyCounter++; + } + + tinycolor.prototype = { + isDark: function() { + return this.getBrightness() < 128; + }, + isLight: function() { + return !this.isDark(); + }, + isValid: function() { + return this._ok; + }, + getOriginalInput: function() { + return this._originalInput; + }, + getFormat: function() { + return this._format; + }, + getAlpha: function() { + return this._a; + }, + getBrightness: function() { + //http://www.w3.org/TR/AERT#color-contrast + var rgb = this.toRgb(); + return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000; + }, + getLuminance: function() { + //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef + var rgb = this.toRgb(); + var RsRGB, GsRGB, BsRGB, R, G, B; + RsRGB = rgb.r/255; + GsRGB = rgb.g/255; + BsRGB = rgb.b/255; + + if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);} + if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);} + if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);} + return (0.2126 * R) + (0.7152 * G) + (0.0722 * B); + }, + setAlpha: function(value) { + this._a = boundAlpha(value); + this._roundA = mathRound(100*this._a) / 100; + return this; + }, + toHsv: function() { + var hsv = rgbToHsv(this._r, this._g, this._b); + return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a }; + }, + toHsvString: function() { + var hsv = rgbToHsv(this._r, this._g, this._b); + var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100); + return (this._a == 1) ? + "hsv(" + h + ", " + s + "%, " + v + "%)" : + "hsva(" + h + ", " + s + "%, " + v + "%, "+ this._roundA + ")"; + }, + toHsl: function() { + var hsl = rgbToHsl(this._r, this._g, this._b); + return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a }; + }, + toHslString: function() { + var hsl = rgbToHsl(this._r, this._g, this._b); + var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100); + return (this._a == 1) ? + "hsl(" + h + ", " + s + "%, " + l + "%)" : + "hsla(" + h + ", " + s + "%, " + l + "%, "+ this._roundA + ")"; + }, + toHex: function(allow3Char) { + return rgbToHex(this._r, this._g, this._b, allow3Char); + }, + toHexString: function(allow3Char) { + return '#' + this.toHex(allow3Char); + }, + toHex8: function(allow4Char) { + return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char); + }, + toHex8String: function(allow4Char) { + return '#' + this.toHex8(allow4Char); + }, + toRgb: function() { + return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a }; + }, + toRgbString: function() { + return (this._a == 1) ? + "rgb(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" : + "rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")"; + }, + toPercentageRgb: function() { + return { r: mathRound(bound01(this._r, 255) * 100) + "%", g: mathRound(bound01(this._g, 255) * 100) + "%", b: mathRound(bound01(this._b, 255) * 100) + "%", a: this._a }; + }, + toPercentageRgbString: function() { + return (this._a == 1) ? + "rgb(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" : + "rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")"; + }, + toName: function() { + if (this._a === 0) { + return "transparent"; + } + + if (this._a < 1) { + return false; + } + + return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false; + }, + toFilter: function(secondColor) { + var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a); + var secondHex8String = hex8String; + var gradientType = this._gradientType ? "GradientType = 1, " : ""; + + if (secondColor) { + var s = tinycolor(secondColor); + secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a); + } + + return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")"; + }, + toString: function(format) { + var formatSet = !!format; + format = format || this._format; + + var formattedString = false; + var hasAlpha = this._a < 1 && this._a >= 0; + var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "hex4" || format === "hex8" || format === "name"); + + if (needsAlphaFormat) { + // Special case for "transparent", all other non-alpha formats + // will return rgba when there is transparency. + if (format === "name" && this._a === 0) { + return this.toName(); + } + return this.toRgbString(); + } + if (format === "rgb") { + formattedString = this.toRgbString(); + } + if (format === "prgb") { + formattedString = this.toPercentageRgbString(); + } + if (format === "hex" || format === "hex6") { + formattedString = this.toHexString(); + } + if (format === "hex3") { + formattedString = this.toHexString(true); + } + if (format === "hex4") { + formattedString = this.toHex8String(true); + } + if (format === "hex8") { + formattedString = this.toHex8String(); + } + if (format === "name") { + formattedString = this.toName(); + } + if (format === "hsl") { + formattedString = this.toHslString(); + } + if (format === "hsv") { + formattedString = this.toHsvString(); + } + + return formattedString || this.toHexString(); + }, + clone: function() { + return tinycolor(this.toString()); + }, + + _applyModification: function(fn, args) { + var color = fn.apply(null, [this].concat([].slice.call(args))); + this._r = color._r; + this._g = color._g; + this._b = color._b; + this.setAlpha(color._a); + return this; + }, + lighten: function() { + return this._applyModification(lighten, arguments); + }, + brighten: function() { + return this._applyModification(brighten, arguments); + }, + darken: function() { + return this._applyModification(darken, arguments); + }, + desaturate: function() { + return this._applyModification(desaturate, arguments); + }, + saturate: function() { + return this._applyModification(saturate, arguments); + }, + greyscale: function() { + return this._applyModification(greyscale, arguments); + }, + spin: function() { + return this._applyModification(spin, arguments); + }, + + _applyCombination: function(fn, args) { + return fn.apply(null, [this].concat([].slice.call(args))); + }, + analogous: function() { + return this._applyCombination(analogous, arguments); + }, + complement: function() { + return this._applyCombination(complement, arguments); + }, + monochromatic: function() { + return this._applyCombination(monochromatic, arguments); + }, + splitcomplement: function() { + return this._applyCombination(splitcomplement, arguments); + }, + triad: function() { + return this._applyCombination(triad, arguments); + }, + tetrad: function() { + return this._applyCombination(tetrad, arguments); + } + }; + + // If input is an object, force 1 into "1.0" to handle ratios properly + // String input requires "1.0" as input, so 1 will be treated as 1 + tinycolor.fromRatio = function(color, opts) { + if (typeof color == "object") { + var newColor = {}; + for (var i in color) { + if (color.hasOwnProperty(i)) { + if (i === "a") { + newColor[i] = color[i]; + } + else { + newColor[i] = convertToPercentage(color[i]); + } + } + } + color = newColor; + } + + return tinycolor(color, opts); + }; + + // Given a string or object, convert that input to RGB + // Possible string inputs: + // + // "red" + // "#f00" or "f00" + // "#ff0000" or "ff0000" + // "#ff000000" or "ff000000" + // "rgb 255 0 0" or "rgb (255, 0, 0)" + // "rgb 1.0 0 0" or "rgb (1, 0, 0)" + // "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1" + // "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1" + // "hsl(0, 100%, 50%)" or "hsl 0 100% 50%" + // "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1" + // "hsv(0, 100%, 100%)" or "hsv 0 100% 100%" + // + function inputToRGB(color) { + + var rgb = { r: 0, g: 0, b: 0 }; + var a = 1; + var s = null; + var v = null; + var l = null; + var ok = false; + var format = false; + + if (typeof color == "string") { + color = stringInputToObject(color); + } + + if (typeof color == "object") { + if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) { + rgb = rgbToRgb(color.r, color.g, color.b); + ok = true; + format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; + } + else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) { + s = convertToPercentage(color.s); + v = convertToPercentage(color.v); + rgb = hsvToRgb(color.h, s, v); + ok = true; + format = "hsv"; + } + else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) { + s = convertToPercentage(color.s); + l = convertToPercentage(color.l); + rgb = hslToRgb(color.h, s, l); + ok = true; + format = "hsl"; + } + + if (color.hasOwnProperty("a")) { + a = color.a; + } + } + + a = boundAlpha(a); + + return { + ok: ok, + format: color.format || format, + r: mathMin(255, mathMax(rgb.r, 0)), + g: mathMin(255, mathMax(rgb.g, 0)), + b: mathMin(255, mathMax(rgb.b, 0)), + a: a + }; + } + + + // Conversion Functions + // -------------------- + + // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from: + // + + // `rgbToRgb` + // Handle bounds / percentage checking to conform to CSS color spec + // + // *Assumes:* r, g, b in [0, 255] or [0, 1] + // *Returns:* { r, g, b } in [0, 255] + function rgbToRgb(r, g, b){ + return { + r: bound01(r, 255) * 255, + g: bound01(g, 255) * 255, + b: bound01(b, 255) * 255 + }; + } + + // `rgbToHsl` + // Converts an RGB color value to HSL. + // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1] + // *Returns:* { h, s, l } in [0,1] + function rgbToHsl(r, g, b) { + + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + + var max = mathMax(r, g, b), min = mathMin(r, g, b); + var h, s, l = (max + min) / 2; + + if(max == min) { + h = s = 0; // achromatic + } + else { + var d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + + h /= 6; + } + + return { h: h, s: s, l: l }; + } + + // `hslToRgb` + // Converts an HSL color value to RGB. + // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100] + // *Returns:* { r, g, b } in the set [0, 255] + function hslToRgb(h, s, l) { + var r, g, b; + + h = bound01(h, 360); + s = bound01(s, 100); + l = bound01(l, 100); + + 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) * (2/3 - t) * 6; + return p; + } + + if(s === 0) { + r = g = b = l; // achromatic + } + else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = hue2rgb(p, q, h + 1/3); + g = hue2rgb(p, q, h); + b = hue2rgb(p, q, h - 1/3); + } + + return { r: r * 255, g: g * 255, b: b * 255 }; + } + + // `rgbToHsv` + // Converts an RGB color value to HSV + // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1] + // *Returns:* { h, s, v } in [0,1] + function rgbToHsv(r, g, b) { + + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + + var max = mathMax(r, g, b), min = mathMin(r, g, b); + var h, s, v = max; + + var d = max - min; + s = max === 0 ? 0 : d / max; + + if(max == min) { + h = 0; // achromatic + } + else { + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + h /= 6; + } + return { h: h, s: s, v: v }; + } + + // `hsvToRgb` + // Converts an HSV color value to RGB. + // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100] + // *Returns:* { r, g, b } in the set [0, 255] + function hsvToRgb(h, s, v) { + + h = bound01(h, 360) * 6; + s = bound01(s, 100); + v = bound01(v, 100); + + var i = Math.floor(h), + f = h - i, + p = v * (1 - s), + q = v * (1 - f * s), + t = v * (1 - (1 - f) * s), + mod = i % 6, + r = [v, q, p, p, t, v][mod], + g = [t, v, v, q, p, p][mod], + b = [p, p, t, v, v, q][mod]; + + return { r: r * 255, g: g * 255, b: b * 255 }; + } + + // `rgbToHex` + // Converts an RGB color to hex + // Assumes r, g, and b are contained in the set [0, 255] + // Returns a 3 or 6 character hex + function rgbToHex(r, g, b, allow3Char) { + + var hex = [ + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)) + ]; + + // Return a 3 character hex if possible + if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) { + return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); + } + + return hex.join(""); + } + + // `rgbaToHex` + // Converts an RGBA color plus alpha transparency to hex + // Assumes r, g, b are contained in the set [0, 255] and + // a in [0, 1]. Returns a 4 or 8 character rgba hex + function rgbaToHex(r, g, b, a, allow4Char) { + + var hex = [ + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)), + pad2(convertDecimalToHex(a)) + ]; + + // Return a 4 character hex if possible + if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) { + return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0); + } + + return hex.join(""); + } + + // `rgbaToArgbHex` + // Converts an RGBA color to an ARGB Hex8 string + // Rarely used, but required for "toFilter()" + function rgbaToArgbHex(r, g, b, a) { + + var hex = [ + pad2(convertDecimalToHex(a)), + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)) + ]; + + return hex.join(""); + } + + // `equals` + // Can be called with any tinycolor input + tinycolor.equals = function (color1, color2) { + if (!color1 || !color2) { return false; } + return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString(); + }; + + tinycolor.random = function() { + return tinycolor.fromRatio({ + r: mathRandom(), + g: mathRandom(), + b: mathRandom() + }); + }; + + + // Modification Functions + // ---------------------- + // Thanks to less.js for some of the basics here + // + + function desaturate(color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.s -= amount / 100; + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); + } + + function saturate(color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.s += amount / 100; + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); + } + + function greyscale(color) { + return tinycolor(color).desaturate(100); + } + + function lighten (color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.l += amount / 100; + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); + } + + function brighten(color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var rgb = tinycolor(color).toRgb(); + rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100)))); + rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100)))); + rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100)))); + return tinycolor(rgb); + } + + function darken (color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.l -= amount / 100; + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); + } + + // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue. + // Values outside of this range will be wrapped into this range. + function spin(color, amount) { + var hsl = tinycolor(color).toHsl(); + var hue = (hsl.h + amount) % 360; + hsl.h = hue < 0 ? 360 + hue : hue; + return tinycolor(hsl); + } + + // Combination Functions + // --------------------- + // Thanks to jQuery xColor for some of the ideas behind these + // + + function complement(color) { + var hsl = tinycolor(color).toHsl(); + hsl.h = (hsl.h + 180) % 360; + return tinycolor(hsl); + } + + function triad(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l }) + ]; + } + + function tetrad(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l }) + ]; + } + + function splitcomplement(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}), + tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l}) + ]; + } + + function analogous(color, results, slices) { + results = results || 6; + slices = slices || 30; + + var hsl = tinycolor(color).toHsl(); + var part = 360 / slices; + var ret = [tinycolor(color)]; + + for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) { + hsl.h = (hsl.h + part) % 360; + ret.push(tinycolor(hsl)); + } + return ret; + } + + function monochromatic(color, results) { + results = results || 6; + var hsv = tinycolor(color).toHsv(); + var h = hsv.h, s = hsv.s, v = hsv.v; + var ret = []; + var modification = 1 / results; + + while (results--) { + ret.push(tinycolor({ h: h, s: s, v: v})); + v = (v + modification) % 1; + } + + return ret; + } + + // Utility Functions + // --------------------- + + tinycolor.mix = function(color1, color2, amount) { + amount = (amount === 0) ? 0 : (amount || 50); + + var rgb1 = tinycolor(color1).toRgb(); + var rgb2 = tinycolor(color2).toRgb(); + + var p = amount / 100; + + var rgba = { + r: ((rgb2.r - rgb1.r) * p) + rgb1.r, + g: ((rgb2.g - rgb1.g) * p) + rgb1.g, + b: ((rgb2.b - rgb1.b) * p) + rgb1.b, + a: ((rgb2.a - rgb1.a) * p) + rgb1.a + }; + + return tinycolor(rgba); + }; + + + // Readability Functions + // --------------------- + // false + // tinycolor.isReadable("#000", "#111",{level:"AA",size:"large"}) => false + tinycolor.isReadable = function(color1, color2, wcag2) { + var readability = tinycolor.readability(color1, color2); + var wcag2Parms, out; + + out = false; + + wcag2Parms = validateWCAG2Parms(wcag2); + switch (wcag2Parms.level + wcag2Parms.size) { + case "AAsmall": + case "AAAlarge": + out = readability >= 4.5; + break; + case "AAlarge": + out = readability >= 3; + break; + case "AAAsmall": + out = readability >= 7; + break; + } + return out; + + }; + + // `mostReadable` + // Given a base color and a list of possible foreground or background + // colors for that base, returns the most readable color. + // Optionally returns Black or White if the most readable color is unreadable. + // *Example* + // tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:false}).toHexString(); // "#112255" + // tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:true}).toHexString(); // "#ffffff" + // tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"large"}).toHexString(); // "#faf3f3" + // tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"small"}).toHexString(); // "#ffffff" + tinycolor.mostReadable = function(baseColor, colorList, args) { + var bestColor = null; + var bestScore = 0; + var readability; + var includeFallbackColors, level, size ; + args = args || {}; + includeFallbackColors = args.includeFallbackColors ; + level = args.level; + size = args.size; + + for (var i= 0; i < colorList.length ; i++) { + readability = tinycolor.readability(baseColor, colorList[i]); + if (readability > bestScore) { + bestScore = readability; + bestColor = tinycolor(colorList[i]); + } + } + + if (tinycolor.isReadable(baseColor, bestColor, {"level":level,"size":size}) || !includeFallbackColors) { + return bestColor; + } + else { + args.includeFallbackColors=false; + return tinycolor.mostReadable(baseColor,["#fff", "#000"],args); + } + }; + + + // Big List of Colors + // ------------------ + // + var names = tinycolor.names = { + aliceblue: "f0f8ff", + antiquewhite: "faebd7", + aqua: "0ff", + aquamarine: "7fffd4", + azure: "f0ffff", + beige: "f5f5dc", + bisque: "ffe4c4", + black: "000", + blanchedalmond: "ffebcd", + blue: "00f", + blueviolet: "8a2be2", + brown: "a52a2a", + burlywood: "deb887", + burntsienna: "ea7e5d", + cadetblue: "5f9ea0", + chartreuse: "7fff00", + chocolate: "d2691e", + coral: "ff7f50", + cornflowerblue: "6495ed", + cornsilk: "fff8dc", + crimson: "dc143c", + cyan: "0ff", + darkblue: "00008b", + darkcyan: "008b8b", + darkgoldenrod: "b8860b", + darkgray: "a9a9a9", + darkgreen: "006400", + darkgrey: "a9a9a9", + darkkhaki: "bdb76b", + darkmagenta: "8b008b", + darkolivegreen: "556b2f", + darkorange: "ff8c00", + darkorchid: "9932cc", + darkred: "8b0000", + darksalmon: "e9967a", + darkseagreen: "8fbc8f", + darkslateblue: "483d8b", + darkslategray: "2f4f4f", + darkslategrey: "2f4f4f", + darkturquoise: "00ced1", + darkviolet: "9400d3", + deeppink: "ff1493", + deepskyblue: "00bfff", + dimgray: "696969", + dimgrey: "696969", + dodgerblue: "1e90ff", + firebrick: "b22222", + floralwhite: "fffaf0", + forestgreen: "228b22", + fuchsia: "f0f", + gainsboro: "dcdcdc", + ghostwhite: "f8f8ff", + gold: "ffd700", + goldenrod: "daa520", + gray: "808080", + green: "008000", + greenyellow: "adff2f", + grey: "808080", + honeydew: "f0fff0", + hotpink: "ff69b4", + indianred: "cd5c5c", + indigo: "4b0082", + ivory: "fffff0", + khaki: "f0e68c", + lavender: "e6e6fa", + lavenderblush: "fff0f5", + lawngreen: "7cfc00", + lemonchiffon: "fffacd", + lightblue: "add8e6", + lightcoral: "f08080", + lightcyan: "e0ffff", + lightgoldenrodyellow: "fafad2", + lightgray: "d3d3d3", + lightgreen: "90ee90", + lightgrey: "d3d3d3", + lightpink: "ffb6c1", + lightsalmon: "ffa07a", + lightseagreen: "20b2aa", + lightskyblue: "87cefa", + lightslategray: "789", + lightslategrey: "789", + lightsteelblue: "b0c4de", + lightyellow: "ffffe0", + lime: "0f0", + limegreen: "32cd32", + linen: "faf0e6", + magenta: "f0f", + maroon: "800000", + mediumaquamarine: "66cdaa", + mediumblue: "0000cd", + mediumorchid: "ba55d3", + mediumpurple: "9370db", + mediumseagreen: "3cb371", + mediumslateblue: "7b68ee", + mediumspringgreen: "00fa9a", + mediumturquoise: "48d1cc", + mediumvioletred: "c71585", + midnightblue: "191970", + mintcream: "f5fffa", + mistyrose: "ffe4e1", + moccasin: "ffe4b5", + navajowhite: "ffdead", + navy: "000080", + oldlace: "fdf5e6", + olive: "808000", + olivedrab: "6b8e23", + orange: "ffa500", + orangered: "ff4500", + orchid: "da70d6", + palegoldenrod: "eee8aa", + palegreen: "98fb98", + paleturquoise: "afeeee", + palevioletred: "db7093", + papayawhip: "ffefd5", + peachpuff: "ffdab9", + peru: "cd853f", + pink: "ffc0cb", + plum: "dda0dd", + powderblue: "b0e0e6", + purple: "800080", + rebeccapurple: "663399", + red: "f00", + rosybrown: "bc8f8f", + royalblue: "4169e1", + saddlebrown: "8b4513", + salmon: "fa8072", + sandybrown: "f4a460", + seagreen: "2e8b57", + seashell: "fff5ee", + sienna: "a0522d", + silver: "c0c0c0", + skyblue: "87ceeb", + slateblue: "6a5acd", + slategray: "708090", + slategrey: "708090", + snow: "fffafa", + springgreen: "00ff7f", + steelblue: "4682b4", + tan: "d2b48c", + teal: "008080", + thistle: "d8bfd8", + tomato: "ff6347", + turquoise: "40e0d0", + violet: "ee82ee", + wheat: "f5deb3", + white: "fff", + whitesmoke: "f5f5f5", + yellow: "ff0", + yellowgreen: "9acd32" + }; + + // Make it easy to access colors via `hexNames[hex]` + var hexNames = tinycolor.hexNames = flip(names); + + + // Utilities + // --------- + + // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }` + function flip(o) { + var flipped = { }; + for (var i in o) { + if (o.hasOwnProperty(i)) { + flipped[o[i]] = i; + } + } + return flipped; + } + + // Return a valid alpha value [0,1] with all invalid values being set to 1 + function boundAlpha(a) { + a = parseFloat(a); + + if (isNaN(a) || a < 0 || a > 1) { + a = 1; + } + + return a; + } + + // Take input from [0, n] and return it as [0, 1] + function bound01(n, max) { + if (isOnePointZero(n)) { n = "100%"; } + + var processPercent = isPercentage(n); + n = mathMin(max, mathMax(0, parseFloat(n))); + + // Automatically convert percentage into number + if (processPercent) { + n = parseInt(n * max, 10) / 100; + } + + // Handle floating point rounding errors + if ((Math.abs(n - max) < 0.000001)) { + return 1; + } + + // Convert into [0, 1] range if it isn't already + return (n % max) / parseFloat(max); + } + + // Force a number between 0 and 1 + function clamp01(val) { + return mathMin(1, mathMax(0, val)); + } + + // Parse a base-16 hex value into a base-10 integer + function parseIntFromHex(val) { + return parseInt(val, 16); + } + + // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1 + // + function isOnePointZero(n) { + return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1; + } + + // Check to see if string passed in is a percentage + function isPercentage(n) { + return typeof n === "string" && n.indexOf('%') != -1; + } + + // Force a hex value to have 2 characters + function pad2(c) { + return c.length == 1 ? '0' + c : '' + c; + } + + // Replace a decimal with it's percentage value + function convertToPercentage(n) { + if (n <= 1) { + n = (n * 100) + "%"; + } + + return n; + } + + // Converts a decimal to a hex value + function convertDecimalToHex(d) { + return Math.round(parseFloat(d) * 255).toString(16); + } + // Converts a hex value to a decimal + function convertHexToDecimal(h) { + return (parseIntFromHex(h) / 255); + } + + var matchers = (function() { + + // + var CSS_INTEGER = "[-\\+]?\\d+%?"; + + // + var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; + + // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome. + var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")"; + + // Actual matching. + // Parentheses and commas are optional, but not required. + // Whitespace can take the place of commas or opening paren + var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + + return { + CSS_UNIT: new RegExp(CSS_UNIT), + rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), + rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), + hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), + hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), + hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), + hsva: new RegExp("hsva" + PERMISSIVE_MATCH4), + hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, + hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ + }; + })(); + + // `isValidCSSUnit` + // Take in a single string / number and check to see if it looks like a CSS unit + // (see `matchers` above for definition). + function isValidCSSUnit(color) { + return !!matchers.CSS_UNIT.exec(color); + } + + // `stringInputToObject` + // Permissive string parsing. Take in a number of formats, and output an object + // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}` + function stringInputToObject(color) { + + color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase(); + var named = false; + if (names[color]) { + color = names[color]; + named = true; + } + else if (color == 'transparent') { + return { r: 0, g: 0, b: 0, a: 0, format: "name" }; + } + + // Try to match string input using regular expressions. + // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360] + // Just return an object and let the conversion functions handle that. + // This way the result will be the same whether the tinycolor is initialized with string or object. + var match; + if ((match = matchers.rgb.exec(color))) { + return { r: match[1], g: match[2], b: match[3] }; + } + if ((match = matchers.rgba.exec(color))) { + return { r: match[1], g: match[2], b: match[3], a: match[4] }; + } + if ((match = matchers.hsl.exec(color))) { + return { h: match[1], s: match[2], l: match[3] }; + } + if ((match = matchers.hsla.exec(color))) { + return { h: match[1], s: match[2], l: match[3], a: match[4] }; + } + if ((match = matchers.hsv.exec(color))) { + return { h: match[1], s: match[2], v: match[3] }; + } + if ((match = matchers.hsva.exec(color))) { + return { h: match[1], s: match[2], v: match[3], a: match[4] }; + } + if ((match = matchers.hex8.exec(color))) { + return { + r: parseIntFromHex(match[1]), + g: parseIntFromHex(match[2]), + b: parseIntFromHex(match[3]), + a: convertHexToDecimal(match[4]), + format: named ? "name" : "hex8" + }; + } + if ((match = matchers.hex6.exec(color))) { + return { + r: parseIntFromHex(match[1]), + g: parseIntFromHex(match[2]), + b: parseIntFromHex(match[3]), + format: named ? "name" : "hex" + }; + } + if ((match = matchers.hex4.exec(color))) { + return { + r: parseIntFromHex(match[1] + '' + match[1]), + g: parseIntFromHex(match[2] + '' + match[2]), + b: parseIntFromHex(match[3] + '' + match[3]), + a: convertHexToDecimal(match[4] + '' + match[4]), + format: named ? "name" : "hex8" + }; + } + if ((match = matchers.hex3.exec(color))) { + return { + r: parseIntFromHex(match[1] + '' + match[1]), + g: parseIntFromHex(match[2] + '' + match[2]), + b: parseIntFromHex(match[3] + '' + match[3]), + format: named ? "name" : "hex" + }; + } + + return false; + } + + function validateWCAG2Parms(parms) { + // return valid WCAG2 parms for isReadable. + // If input parms are invalid, return {"level":"AA", "size":"small"} + var level, size; + parms = parms || {"level":"AA", "size":"small"}; + level = (parms.level || "AA").toUpperCase(); + size = (parms.size || "small").toLowerCase(); + if (level !== "AA" && level !== "AAA") { + level = "AA"; + } + if (size !== "small" && size !== "large") { + size = "small"; + } + return {"level":level, "size":size}; + } + + // Node: Export function + if (module.exports) { + module.exports = tinycolor; + } + // AMD/requirejs: Define the module + else { + window.tinycolor = tinycolor; + } + + })(Math); + }(tinycolor)); + + var tinyColor = tinycolor.exports; + + function ownKeys(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + + if (enumerableOnly) { + symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + }); + } + + keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread2(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + + if (i % 2) { + ownKeys(Object(source), true).forEach(function (key) { + _defineProperty$1(target, key, source[key]); + }); + } else if (Object.getOwnPropertyDescriptors) { + Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); + } else { + ownKeys(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + } + + return target; + } + + function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function (obj) { + return typeof obj; + }; + } else { + _typeof = function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); + } + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + function _defineProperty$1(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + } + + function _inherits(subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function"); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + writable: true, + configurable: true + } + }); + if (superClass) _setPrototypeOf$1(subClass, superClass); + } + + function _getPrototypeOf$1(o) { + _getPrototypeOf$1 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf$1(o); + } + + function _setPrototypeOf$1(o, p) { + _setPrototypeOf$1 = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf$1(o, p); + } + + function _isNativeReflectConstruct$1() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + + try { + Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); + return true; + } catch (e) { + return false; + } + } + + function _construct$1(Parent, args, Class) { + if (_isNativeReflectConstruct$1()) { + _construct$1 = Reflect.construct; + } else { + _construct$1 = function _construct(Parent, args, Class) { + var a = [null]; + a.push.apply(a, args); + var Constructor = Function.bind.apply(Parent, a); + var instance = new Constructor(); + if (Class) _setPrototypeOf$1(instance, Class.prototype); + return instance; + }; + } + + return _construct$1.apply(null, arguments); + } + + function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + + return target; + } + + function _objectWithoutProperties(source, excluded) { + if (source == null) return {}; + + var target = _objectWithoutPropertiesLoose(source, excluded); + + var key, i; + + if (Object.getOwnPropertySymbols) { + var sourceSymbolKeys = Object.getOwnPropertySymbols(source); + + for (i = 0; i < sourceSymbolKeys.length; i++) { + key = sourceSymbolKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; + target[key] = source[key]; + } + } + + return target; + } + + function _assertThisInitialized$1(self) { + if (self === void 0) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return self; + } + + function _possibleConstructorReturn(self, call) { + if (call && (typeof call === "object" || typeof call === "function")) { + return call; + } + + return _assertThisInitialized$1(self); + } + + function _createSuper(Derived) { + var hasNativeReflectConstruct = _isNativeReflectConstruct$1(); + + return function _createSuperInternal() { + var Super = _getPrototypeOf$1(Derived), + result; + + if (hasNativeReflectConstruct) { + var NewTarget = _getPrototypeOf$1(this).constructor; + + result = Reflect.construct(Super, arguments, NewTarget); + } else { + result = Super.apply(this, arguments); + } + + return _possibleConstructorReturn(this, result); + }; + } + + function _slicedToArray$1(arr, i) { + return _arrayWithHoles$1(arr) || _iterableToArrayLimit$1(arr, i) || _unsupportedIterableToArray$1(arr, i) || _nonIterableRest$1(); + } + + function _toConsumableArray$1(arr) { + return _arrayWithoutHoles$1(arr) || _iterableToArray$1(arr) || _unsupportedIterableToArray$1(arr) || _nonIterableSpread$1(); + } + + function _arrayWithoutHoles$1(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray$1(arr); + } + + function _arrayWithHoles$1(arr) { + if (Array.isArray(arr)) return arr; + } + + function _iterableToArray$1(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); + } + + function _iterableToArrayLimit$1(arr, i) { + var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; + + if (_i == null) return; + var _arr = []; + var _n = true; + var _d = false; + + var _s, _e; + + try { + for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + function _unsupportedIterableToArray$1(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray$1(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$1(o, minLen); + } + + function _arrayLikeToArray$1(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; + } + + function _nonIterableSpread$1() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + function _nonIterableRest$1() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + var materialDispose = function materialDispose(material) { + if (material instanceof Array) { + material.forEach(materialDispose); + } else { + if (material.map) { + material.map.dispose(); + } + + material.dispose(); + } + }; + + var deallocate = function deallocate(obj) { + if (obj.geometry) { + obj.geometry.dispose(); + } + + if (obj.material) { + materialDispose(obj.material); + } + + if (obj.texture) { + obj.texture.dispose(); + } + + if (obj.children) { + obj.children.forEach(deallocate); + } + }; + + var emptyObject = function emptyObject(obj) { + while (obj.children.length) { + var childObj = obj.children[0]; + obj.remove(childObj); + deallocate(childObj); + } + }; + + var _excluded = ["objFilter"]; + + function threeDigest(data, scene) { + var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + var _ref$objFilter = _ref.objFilter, + objFilter = _ref$objFilter === void 0 ? function () { + return true; + } : _ref$objFilter, + options = _objectWithoutProperties(_ref, _excluded); + + return viewDigest(data, scene.children.filter(objFilter), function (obj) { + return scene.add(obj); + }, function (obj) { + scene.remove(obj); + emptyObject(obj); + }, _objectSpread2({ + objBindAttr: '__threeObj' + }, options)); + } + + var colorStr2Hex = function colorStr2Hex(str) { + return isNaN(str) ? parseInt(tinyColor(str).toHex(), 16) : str; + }; + + var colorAlpha = function colorAlpha(str) { + return isNaN(str) ? tinyColor(str).getAlpha() : 1; + }; + + var autoColorScale = ordinal(schemePaired); // Autoset attribute colorField by colorByAccessor property + // If an object has already a color, don't set it + // Objects can be nodes or links + + function autoColorObjects(objects, colorByAccessor, colorField) { + if (!colorByAccessor || typeof colorField !== 'string') return; + objects.filter(function (obj) { + return !obj[colorField]; + }).forEach(function (obj) { + obj[colorField] = autoColorScale(colorByAccessor(obj)); + }); + } + + function getDagDepths (_ref, idAccessor) { + var nodes = _ref.nodes, + links = _ref.links; + + var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + _ref2$nodeFilter = _ref2.nodeFilter, + nodeFilter = _ref2$nodeFilter === void 0 ? function () { + return true; + } : _ref2$nodeFilter, + _ref2$onLoopError = _ref2.onLoopError, + onLoopError = _ref2$onLoopError === void 0 ? function (loopIds) { + throw "Invalid DAG structure! Found cycle in node path: ".concat(loopIds.join(' -> '), "."); + } : _ref2$onLoopError; + + // linked graph + var graph = {}; + nodes.forEach(function (node) { + return graph[idAccessor(node)] = { + data: node, + out: [], + depth: -1, + skip: !nodeFilter(node) + }; + }); + links.forEach(function (_ref3) { + var source = _ref3.source, + target = _ref3.target; + var sourceId = getNodeId(source); + var targetId = getNodeId(target); + if (!graph.hasOwnProperty(sourceId)) throw "Missing source node with id: ".concat(sourceId); + if (!graph.hasOwnProperty(targetId)) throw "Missing target node with id: ".concat(targetId); + var sourceNode = graph[sourceId]; + var targetNode = graph[targetId]; + sourceNode.out.push(targetNode); + + function getNodeId(node) { + return _typeof(node) === 'object' ? idAccessor(node) : node; + } + }); + var foundLoops = []; + traverse(Object.values(graph)); + var nodeDepths = Object.assign.apply(Object, [{}].concat(_toConsumableArray$1(Object.entries(graph).filter(function (_ref4) { + var _ref5 = _slicedToArray$1(_ref4, 2), + node = _ref5[1]; + + return !node.skip; + }).map(function (_ref6) { + var _ref7 = _slicedToArray$1(_ref6, 2), + id = _ref7[0], + node = _ref7[1]; + + return _defineProperty$1({}, id, node.depth); + })))); + return nodeDepths; + + function traverse(nodes) { + var nodeStack = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + var currentDepth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + + for (var i = 0, l = nodes.length; i < l; i++) { + var node = nodes[i]; + + if (nodeStack.indexOf(node) !== -1) { + var _ret = function () { + var loop = [].concat(_toConsumableArray$1(nodeStack.slice(nodeStack.indexOf(node))), [node]).map(function (d) { + return idAccessor(d.data); + }); + + if (!foundLoops.some(function (foundLoop) { + return foundLoop.length === loop.length && foundLoop.every(function (id, idx) { + return id === loop[idx]; + }); + })) { + foundLoops.push(loop); + onLoopError(loop); + } + + return "continue"; + }(); + + if (_ret === "continue") continue; + } + + if (currentDepth > node.depth) { + // Don't unnecessarily revisit chunks of the graph + node.depth = currentDepth; + traverse(node.out, [].concat(_toConsumableArray$1(nodeStack), [node]), currentDepth + (node.skip ? 0 : 1)); + } + } + } + } + + var three$1$1 = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists + : { + Group: Group$1, + Mesh: Mesh, + MeshLambertMaterial: MeshLambertMaterial, + Color: Color, + BufferGeometry: BufferGeometry, + BufferAttribute: BufferAttribute, + Matrix4: Matrix4, + Vector3: Vector3, + SphereBufferGeometry: SphereBufferGeometry, + CylinderBufferGeometry: CylinderBufferGeometry, + TubeBufferGeometry: TubeBufferGeometry, + ConeBufferGeometry: ConeBufferGeometry, + Line: Line, + LineBasicMaterial: LineBasicMaterial, + QuadraticBezierCurve3: QuadraticBezierCurve3, + CubicBezierCurve3: CubicBezierCurve3, + Box3: Box3 + }; + var ngraph = { + graph: ngraph_graph, + forcelayout: forcelayout + }; + + var DAG_LEVEL_NODE_RATIO = 2; // support multiple method names for backwards threejs compatibility + + var setAttributeFn = new three$1$1.BufferGeometry().setAttribute ? 'setAttribute' : 'addAttribute'; + var applyMatrix4Fn = new three$1$1.BufferGeometry().applyMatrix4 ? 'applyMatrix4' : 'applyMatrix'; + var ForceGraph = index$2({ + props: { + jsonUrl: { + onChange: function onChange(jsonUrl, state) { + var _this = this; + + if (jsonUrl && !state.fetchingJson) { + // Load data asynchronously + state.fetchingJson = true; + state.onLoading(); + fetch(jsonUrl).then(function (r) { + return r.json(); + }).then(function (json) { + state.fetchingJson = false; + state.onFinishLoading(json); + + _this.graphData(json); + }); + } + }, + triggerUpdate: false + }, + graphData: { + "default": { + nodes: [], + links: [] + }, + onChange: function onChange(graphData, state) { + state.engineRunning = false; // Pause simulation immediately + } + }, + numDimensions: { + "default": 3, + onChange: function onChange(numDim, state) { + var chargeForce = state.d3ForceLayout.force('charge'); // Increase repulsion on 3D mode for improved spatial separation + + if (chargeForce) { + chargeForce.strength(numDim > 2 ? -60 : -30); + } + + if (numDim < 3) { + eraseDimension(state.graphData.nodes, 'z'); + } + + if (numDim < 2) { + eraseDimension(state.graphData.nodes, 'y'); + } + + function eraseDimension(nodes, dim) { + nodes.forEach(function (d) { + delete d[dim]; // position + + delete d["v".concat(dim)]; // velocity + }); + } + } + }, + dagMode: { + onChange: function onChange(dagMode, state) { + // td, bu, lr, rl, zin, zout, radialin, radialout + !dagMode && state.forceEngine === 'd3' && (state.graphData.nodes || []).forEach(function (n) { + return n.fx = n.fy = n.fz = undefined; + }); // unfix nodes when disabling dag mode + } + }, + dagLevelDistance: {}, + dagNodeFilter: { + "default": function _default(node) { + return true; + } + }, + onDagError: { + triggerUpdate: false + }, + nodeRelSize: { + "default": 4 + }, + // volume per val unit + nodeId: { + "default": 'id' + }, + nodeVal: { + "default": 'val' + }, + nodeResolution: { + "default": 8 + }, + // how many slice segments in the sphere's circumference + nodeColor: { + "default": 'color' + }, + nodeAutoColorBy: {}, + nodeOpacity: { + "default": 0.75 + }, + nodeVisibility: { + "default": true + }, + nodeThreeObject: {}, + nodeThreeObjectExtend: { + "default": false + }, + linkSource: { + "default": 'source' + }, + linkTarget: { + "default": 'target' + }, + linkVisibility: { + "default": true + }, + linkColor: { + "default": 'color' + }, + linkAutoColorBy: {}, + linkOpacity: { + "default": 0.2 + }, + linkWidth: {}, + // Rounded to nearest decimal. For falsy values use dimensionless line with 1px regardless of distance. + linkResolution: { + "default": 6 + }, + // how many radial segments in each line tube's geometry + linkCurvature: { + "default": 0, + triggerUpdate: false + }, + // line curvature radius (0: straight, 1: semi-circle) + linkCurveRotation: { + "default": 0, + triggerUpdate: false + }, + // line curve rotation along the line axis (0: interection with XY plane, PI: upside down) + linkMaterial: {}, + linkThreeObject: {}, + linkThreeObjectExtend: { + "default": false + }, + linkPositionUpdate: { + triggerUpdate: false + }, + // custom function to call for updating the link's position. Signature: (threeObj, { start: { x, y, z}, end: { x, y, z }}, link). If the function returns a truthy value, the regular link position update will not run. + linkDirectionalArrowLength: { + "default": 0 + }, + linkDirectionalArrowColor: {}, + linkDirectionalArrowRelPos: { + "default": 0.5, + triggerUpdate: false + }, + // value between 0<>1 indicating the relative pos along the (exposed) line + linkDirectionalArrowResolution: { + "default": 8 + }, + // how many slice segments in the arrow's conic circumference + linkDirectionalParticles: { + "default": 0 + }, + // animate photons travelling in the link direction + linkDirectionalParticleSpeed: { + "default": 0.01, + triggerUpdate: false + }, + // in link length ratio per frame + linkDirectionalParticleWidth: { + "default": 0.5 + }, + linkDirectionalParticleColor: {}, + linkDirectionalParticleResolution: { + "default": 4 + }, + // how many slice segments in the particle sphere's circumference + forceEngine: { + "default": 'd3' + }, + // d3 or ngraph + d3AlphaMin: { + "default": 0 + }, + d3AlphaDecay: { + "default": 0.0228, + triggerUpdate: false, + onChange: function onChange(alphaDecay, state) { + state.d3ForceLayout.alphaDecay(alphaDecay); + } + }, + d3AlphaTarget: { + "default": 0, + triggerUpdate: false, + onChange: function onChange(alphaTarget, state) { + state.d3ForceLayout.alphaTarget(alphaTarget); + } + }, + d3VelocityDecay: { + "default": 0.4, + triggerUpdate: false, + onChange: function onChange(velocityDecay, state) { + state.d3ForceLayout.velocityDecay(velocityDecay); + } + }, + ngraphPhysics: { + "default": { + // defaults from https://github.com/anvaka/ngraph.physics.simulator/blob/master/index.js + timeStep: 20, + gravity: -1.2, + theta: 0.8, + springLength: 30, + springCoefficient: 0.0008, + dragCoefficient: 0.02 + } + }, + warmupTicks: { + "default": 0, + triggerUpdate: false + }, + // how many times to tick the force engine at init before starting to render + cooldownTicks: { + "default": Infinity, + triggerUpdate: false + }, + cooldownTime: { + "default": 15000, + triggerUpdate: false + }, + // ms + onLoading: { + "default": function _default() {}, + triggerUpdate: false + }, + onFinishLoading: { + "default": function _default() {}, + triggerUpdate: false + }, + onUpdate: { + "default": function _default() {}, + triggerUpdate: false + }, + onFinishUpdate: { + "default": function _default() {}, + triggerUpdate: false + }, + onEngineTick: { + "default": function _default() {}, + triggerUpdate: false + }, + onEngineStop: { + "default": function _default() {}, + triggerUpdate: false + } + }, + methods: { + refresh: function refresh(state) { + state._flushObjects = true; + + state._rerender(); + + return this; + }, + // Expose d3 forces for external manipulation + d3Force: function d3Force(state, forceName, forceFn) { + if (forceFn === undefined) { + return state.d3ForceLayout.force(forceName); // Force getter + } + + state.d3ForceLayout.force(forceName, forceFn); // Force setter + + return this; + }, + d3ReheatSimulation: function d3ReheatSimulation(state) { + state.d3ForceLayout.alpha(1); + this.resetCountdown(); + return this; + }, + // reset cooldown state + resetCountdown: function resetCountdown(state) { + state.cntTicks = 0; + state.startTickTime = new Date(); + state.engineRunning = true; + return this; + }, + tickFrame: function tickFrame(state) { + var isD3Sim = state.forceEngine !== 'ngraph'; + + if (state.engineRunning) { + layoutTick(); + } + + updateArrows(); + updatePhotons(); + return this; // + + function layoutTick() { + if (++state.cntTicks > state.cooldownTicks || new Date() - state.startTickTime > state.cooldownTime || isD3Sim && state.d3AlphaMin > 0 && state.d3ForceLayout.alpha() < state.d3AlphaMin) { + state.engineRunning = false; // Stop ticking graph + + state.onEngineStop(); + } else { + state.layout[isD3Sim ? 'tick' : 'step'](); // Tick it + + state.onEngineTick(); + } // Update nodes position + + + state.graphData.nodes.forEach(function (node) { + var obj = node.__threeObj; + if (!obj) return; + var pos = isD3Sim ? node : state.layout.getNodePosition(node[state.nodeId]); + obj.position.x = pos.x; + obj.position.y = pos.y || 0; + obj.position.z = pos.z || 0; + }); // Update links position + + var linkWidthAccessor = index$1(state.linkWidth); + var linkCurvatureAccessor = index$1(state.linkCurvature); + var linkCurveRotationAccessor = index$1(state.linkCurveRotation); + var linkThreeObjectExtendAccessor = index$1(state.linkThreeObjectExtend); + state.graphData.links.forEach(function (link) { + var lineObj = link.__lineObj; + if (!lineObj) return; + var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id); + var start = pos[isD3Sim ? 'source' : 'from']; + var end = pos[isD3Sim ? 'target' : 'to']; + if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link + + calcLinkCurve(link); // calculate link curve for all links, including custom replaced, so it can be used in directional functionality + + var extendedObj = linkThreeObjectExtendAccessor(link); + + if (state.linkPositionUpdate && state.linkPositionUpdate(extendedObj ? lineObj.children[1] : lineObj, // pass child custom object if extending the default + { + start: { + x: start.x, + y: start.y, + z: start.z + }, + end: { + x: end.x, + y: end.y, + z: end.z + } + }, link) && !extendedObj) { + // exit if successfully custom updated position of non-extended obj + return; + } + + var curveResolution = 30; // # line segments + + var curve = link.__curve; // select default line obj if it's an extended group + + var line = lineObj.children.length ? lineObj.children[0] : lineObj; + + if (line.type === 'Line') { + // Update line geometry + if (!curve) { + // straight line + var linePos = line.geometry.getAttribute('position'); + + if (!linePos || !linePos.array || linePos.array.length !== 6) { + line.geometry[setAttributeFn]('position', linePos = new three$1$1.BufferAttribute(new Float32Array(2 * 3), 3)); + } + + linePos.array[0] = start.x; + linePos.array[1] = start.y || 0; + linePos.array[2] = start.z || 0; + linePos.array[3] = end.x; + linePos.array[4] = end.y || 0; + linePos.array[5] = end.z || 0; + linePos.needsUpdate = true; + } else { + // bezier curve line + line.geometry.setFromPoints(curve.getPoints(curveResolution)); + } + + line.geometry.computeBoundingSphere(); + } else if (line.type === 'Mesh') { + // Update cylinder geometry + if (!curve) { + // straight tube + if (!line.geometry.type.match(/^Cylinder(Buffer)?Geometry$/)) { + var linkWidth = Math.ceil(linkWidthAccessor(link) * 10) / 10; + var r = linkWidth / 2; + var geometry = new three$1$1.CylinderBufferGeometry(r, r, 1, state.linkResolution, 1, false); + geometry[applyMatrix4Fn](new three$1$1.Matrix4().makeTranslation(0, 1 / 2, 0)); + geometry[applyMatrix4Fn](new three$1$1.Matrix4().makeRotationX(Math.PI / 2)); + line.geometry.dispose(); + line.geometry = geometry; + } + + var vStart = new three$1$1.Vector3(start.x, start.y || 0, start.z || 0); + var vEnd = new three$1$1.Vector3(end.x, end.y || 0, end.z || 0); + var distance = vStart.distanceTo(vEnd); + line.position.x = vStart.x; + line.position.y = vStart.y; + line.position.z = vStart.z; + line.scale.z = distance; + line.parent.localToWorld(vEnd); // lookAt requires world coords + + line.lookAt(vEnd); + } else { + // curved tube + if (!line.geometry.type.match(/^Tube(Buffer)?Geometry$/)) { + // reset object positioning + line.position.set(0, 0, 0); + line.rotation.set(0, 0, 0); + line.scale.set(1, 1, 1); + } + + var _linkWidth = Math.ceil(linkWidthAccessor(link) * 10) / 10; + + var _r = _linkWidth / 2; + + var _geometry = new three$1$1.TubeBufferGeometry(curve, curveResolution, _r, state.linkResolution, false); + + line.geometry.dispose(); + line.geometry = _geometry; + } + } + }); // + + function calcLinkCurve(link) { + var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id); + var start = pos[isD3Sim ? 'source' : 'from']; + var end = pos[isD3Sim ? 'target' : 'to']; + if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link + + var curvature = linkCurvatureAccessor(link); + + if (!curvature) { + link.__curve = null; // Straight line + } else { + // bezier curve line (only for line types) + var vStart = new three$1$1.Vector3(start.x, start.y || 0, start.z || 0); + var vEnd = new three$1$1.Vector3(end.x, end.y || 0, end.z || 0); + var l = vStart.distanceTo(vEnd); // line length + + var curve; + var curveRotation = linkCurveRotationAccessor(link); + + if (l > 0) { + var dx = end.x - start.x; + var dy = end.y - start.y || 0; + var vLine = new three$1$1.Vector3().subVectors(vEnd, vStart); + var cp = vLine.clone().multiplyScalar(curvature).cross(dx !== 0 || dy !== 0 ? new three$1$1.Vector3(0, 0, 1) : new three$1$1.Vector3(0, 1, 0)) // avoid cross-product of parallel vectors (prefer Z, fallback to Y) + .applyAxisAngle(vLine.normalize(), curveRotation) // rotate along line axis according to linkCurveRotation + .add(new three$1$1.Vector3().addVectors(vStart, vEnd).divideScalar(2)); + curve = new three$1$1.QuadraticBezierCurve3(vStart, cp, vEnd); + } else { + // Same point, draw a loop + var d = curvature * 70; + var endAngle = -curveRotation; // Rotate clockwise (from Z angle perspective) + + var startAngle = endAngle + Math.PI / 2; + curve = new three$1$1.CubicBezierCurve3(vStart, new three$1$1.Vector3(d * Math.cos(startAngle), d * Math.sin(startAngle), 0).add(vStart), new three$1$1.Vector3(d * Math.cos(endAngle), d * Math.sin(endAngle), 0).add(vStart), vEnd); + } + + link.__curve = curve; + } + } + } + + function updateArrows() { + // update link arrow position + var arrowRelPosAccessor = index$1(state.linkDirectionalArrowRelPos); + var arrowLengthAccessor = index$1(state.linkDirectionalArrowLength); + var nodeValAccessor = index$1(state.nodeVal); + state.graphData.links.forEach(function (link) { + var arrowObj = link.__arrowObj; + if (!arrowObj) return; + var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id); + var start = pos[isD3Sim ? 'source' : 'from']; + var end = pos[isD3Sim ? 'target' : 'to']; + if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link + + var startR = Math.sqrt(Math.max(0, nodeValAccessor(start) || 1)) * state.nodeRelSize; + var endR = Math.sqrt(Math.max(0, nodeValAccessor(end) || 1)) * state.nodeRelSize; + var arrowLength = arrowLengthAccessor(link); + var arrowRelPos = arrowRelPosAccessor(link); + var getPosAlongLine = link.__curve ? function (t) { + return link.__curve.getPoint(t); + } // interpolate along bezier curve + : function (t) { + // straight line: interpolate linearly + var iplt = function iplt(dim, start, end, t) { + return start[dim] + (end[dim] - start[dim]) * t || 0; + }; + + return { + x: iplt('x', start, end, t), + y: iplt('y', start, end, t), + z: iplt('z', start, end, t) + }; + }; + var lineLen = link.__curve ? link.__curve.getLength() : Math.sqrt(['x', 'y', 'z'].map(function (dim) { + return Math.pow((end[dim] || 0) - (start[dim] || 0), 2); + }).reduce(function (acc, v) { + return acc + v; + }, 0)); + var posAlongLine = startR + arrowLength + (lineLen - startR - endR - arrowLength) * arrowRelPos; + var arrowHead = getPosAlongLine(posAlongLine / lineLen); + var arrowTail = getPosAlongLine((posAlongLine - arrowLength) / lineLen); + ['x', 'y', 'z'].forEach(function (dim) { + return arrowObj.position[dim] = arrowTail[dim]; + }); + + var headVec = _construct$1(three$1$1.Vector3, _toConsumableArray$1(['x', 'y', 'z'].map(function (c) { + return arrowHead[c]; + }))); + + arrowObj.parent.localToWorld(headVec); // lookAt requires world coords + + arrowObj.lookAt(headVec); + }); + } + + function updatePhotons() { + // update link particle positions + var particleSpeedAccessor = index$1(state.linkDirectionalParticleSpeed); + state.graphData.links.forEach(function (link) { + var cyclePhotons = link.__photonsObj && link.__photonsObj.children; + var singleHopPhotons = link.__singleHopPhotonsObj && link.__singleHopPhotonsObj.children; + if ((!singleHopPhotons || !singleHopPhotons.length) && (!cyclePhotons || !cyclePhotons.length)) return; + var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id); + var start = pos[isD3Sim ? 'source' : 'from']; + var end = pos[isD3Sim ? 'target' : 'to']; + if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link + + var particleSpeed = particleSpeedAccessor(link); + var getPhotonPos = link.__curve ? function (t) { + return link.__curve.getPoint(t); + } // interpolate along bezier curve + : function (t) { + // straight line: interpolate linearly + var iplt = function iplt(dim, start, end, t) { + return start[dim] + (end[dim] - start[dim]) * t || 0; + }; + + return { + x: iplt('x', start, end, t), + y: iplt('y', start, end, t), + z: iplt('z', start, end, t) + }; + }; + var photons = [].concat(_toConsumableArray$1(cyclePhotons || []), _toConsumableArray$1(singleHopPhotons || [])); + photons.forEach(function (photon, idx) { + var singleHop = photon.parent.__linkThreeObjType === 'singleHopPhotons'; + + if (!photon.hasOwnProperty('__progressRatio')) { + photon.__progressRatio = singleHop ? 0 : idx / cyclePhotons.length; + } + + photon.__progressRatio += particleSpeed; + + if (photon.__progressRatio >= 1) { + if (!singleHop) { + photon.__progressRatio = photon.__progressRatio % 1; + } else { + // remove particle + photon.parent.remove(photon); + emptyObject(photon); + return; + } + } + + var photonPosRatio = photon.__progressRatio; + var pos = getPhotonPos(photonPosRatio); + ['x', 'y', 'z'].forEach(function (dim) { + return photon.position[dim] = pos[dim]; + }); + }); + }); + } + }, + emitParticle: function emitParticle(state, link) { + if (link) { + if (!link.__singleHopPhotonsObj) { + var obj = new three$1$1.Group(); + obj.__linkThreeObjType = 'singleHopPhotons'; + link.__singleHopPhotonsObj = obj; + state.graphScene.add(obj); + } + + var particleWidthAccessor = index$1(state.linkDirectionalParticleWidth); + var photonR = Math.ceil(particleWidthAccessor(link) * 10) / 10 / 2; + var numSegments = state.linkDirectionalParticleResolution; + var particleGeometry = new three$1$1.SphereBufferGeometry(photonR, numSegments, numSegments); + var linkColorAccessor = index$1(state.linkColor); + var particleColorAccessor = index$1(state.linkDirectionalParticleColor); + var photonColor = particleColorAccessor(link) || linkColorAccessor(link) || '#f0f0f0'; + var materialColor = new three$1$1.Color(colorStr2Hex(photonColor)); + var opacity = state.linkOpacity * 3; + var particleMaterial = new three$1$1.MeshLambertMaterial({ + color: materialColor, + transparent: true, + opacity: opacity + }); // add a single hop particle + + link.__singleHopPhotonsObj.add(new three$1$1.Mesh(particleGeometry, particleMaterial)); + } + + return this; + }, + getGraphBbox: function getGraphBbox(state) { + var nodeFilter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () { + return true; + }; + if (!state.initialised) return null; // recursively collect all nested geometries bboxes + + var bboxes = function getBboxes(obj) { + var bboxes = []; + + if (obj.geometry) { + obj.geometry.computeBoundingBox(); + var box = new three$1$1.Box3(); + box.copy(obj.geometry.boundingBox).applyMatrix4(obj.matrixWorld); + bboxes.push(box); + } + + return bboxes.concat.apply(bboxes, _toConsumableArray$1((obj.children || []).filter(function (obj) { + return !obj.hasOwnProperty('__graphObjType') || obj.__graphObjType === 'node' && nodeFilter(obj.__data); + } // exclude filtered out nodes + ).map(getBboxes))); + }(state.graphScene); + + if (!bboxes.length) return null; // extract global x,y,z min/max + + return Object.assign.apply(Object, _toConsumableArray$1(['x', 'y', 'z'].map(function (c) { + return _defineProperty$1({}, c, [min(bboxes, function (bb) { + return bb.min[c]; + }), max(bboxes, function (bb) { + return bb.max[c]; + })]); + }))); + } + }, + stateInit: function stateInit() { + return { + d3ForceLayout: forceSimulation().force('link', forceLink()).force('charge', forceManyBody()).force('center', forceCenter()).force('dagRadial', null).stop(), + engineRunning: false + }; + }, + init: function init(threeObj, state) { + // Main three object to manipulate + state.graphScene = threeObj; + }, + update: function update(state, changedProps) { + var hasAnyPropChanged = function hasAnyPropChanged(propList) { + return propList.some(function (p) { + return changedProps.hasOwnProperty(p); + }); + }; + + state.engineRunning = false; // pause simulation + + state.onUpdate(); + + if (state.nodeAutoColorBy !== null && hasAnyPropChanged(['nodeAutoColorBy', 'graphData', 'nodeColor'])) { + // Auto add color to uncolored nodes + autoColorObjects(state.graphData.nodes, index$1(state.nodeAutoColorBy), state.nodeColor); + } + + if (state.linkAutoColorBy !== null && hasAnyPropChanged(['linkAutoColorBy', 'graphData', 'linkColor'])) { + // Auto add color to uncolored links + autoColorObjects(state.graphData.links, index$1(state.linkAutoColorBy), state.linkColor); + } // Digest nodes WebGL objects + + + if (state._flushObjects || hasAnyPropChanged(['graphData', 'nodeThreeObject', 'nodeThreeObjectExtend', 'nodeVal', 'nodeColor', 'nodeVisibility', 'nodeRelSize', 'nodeResolution', 'nodeOpacity'])) { + var customObjectAccessor = index$1(state.nodeThreeObject); + var customObjectExtendAccessor = index$1(state.nodeThreeObjectExtend); + var valAccessor = index$1(state.nodeVal); + var colorAccessor = index$1(state.nodeColor); + var visibilityAccessor = index$1(state.nodeVisibility); + var sphereGeometries = {}; // indexed by node value + + var sphereMaterials = {}; // indexed by color + + threeDigest(state.graphData.nodes.filter(visibilityAccessor), state.graphScene, { + purge: state._flushObjects || hasAnyPropChanged([// recreate objects if any of these props have changed + 'nodeThreeObject', 'nodeThreeObjectExtend']), + objFilter: function objFilter(obj) { + return obj.__graphObjType === 'node'; + }, + createObj: function createObj(node) { + var customObj = customObjectAccessor(node); + var extendObj = customObjectExtendAccessor(node); + + if (customObj && state.nodeThreeObject === customObj) { + // clone object if it's a shared object among all nodes + customObj = customObj.clone(); + } + + var obj; + + if (customObj && !extendObj) { + obj = customObj; + } else { + // Add default object (sphere mesh) + obj = new three$1$1.Mesh(); + obj.__graphDefaultObj = true; + + if (customObj && extendObj) { + obj.add(customObj); // extend default with custom + } + } + + obj.__graphObjType = 'node'; // Add object type + + return obj; + }, + updateObj: function updateObj(obj, node) { + if (obj.__graphDefaultObj) { + // bypass internal updates for custom node objects + var val = valAccessor(node) || 1; + var radius = Math.cbrt(val) * state.nodeRelSize; + var numSegments = state.nodeResolution; + + if (!obj.geometry.type.match(/^Sphere(Buffer)?Geometry$/) || obj.geometry.parameters.radius !== radius || obj.geometry.parameters.widthSegments !== numSegments) { + if (!sphereGeometries.hasOwnProperty(val)) { + sphereGeometries[val] = new three$1$1.SphereBufferGeometry(radius, numSegments, numSegments); + } + + obj.geometry.dispose(); + obj.geometry = sphereGeometries[val]; + } + + var color = colorAccessor(node); + var materialColor = new three$1$1.Color(colorStr2Hex(color || '#ffffaa')); + var opacity = state.nodeOpacity * colorAlpha(color); + + if (obj.material.type !== 'MeshLambertMaterial' || !obj.material.color.equals(materialColor) || obj.material.opacity !== opacity) { + if (!sphereMaterials.hasOwnProperty(color)) { + sphereMaterials[color] = new three$1$1.MeshLambertMaterial({ + color: materialColor, + transparent: true, + opacity: opacity + }); + } + + obj.material.dispose(); + obj.material = sphereMaterials[color]; + } + } + } + }); + } // Digest links WebGL objects + + + if (state._flushObjects || hasAnyPropChanged(['graphData', 'linkThreeObject', 'linkThreeObjectExtend', 'linkMaterial', 'linkColor', 'linkWidth', 'linkVisibility', 'linkResolution', 'linkOpacity', 'linkDirectionalArrowLength', 'linkDirectionalArrowColor', 'linkDirectionalArrowResolution', 'linkDirectionalParticles', 'linkDirectionalParticleWidth', 'linkDirectionalParticleColor', 'linkDirectionalParticleResolution'])) { + var _customObjectAccessor = index$1(state.linkThreeObject); + + var _customObjectExtendAccessor = index$1(state.linkThreeObjectExtend); + + var customMaterialAccessor = index$1(state.linkMaterial); + + var _visibilityAccessor = index$1(state.linkVisibility); + + var _colorAccessor = index$1(state.linkColor); + + var widthAccessor = index$1(state.linkWidth); + var cylinderGeometries = {}; // indexed by link width + + var lambertLineMaterials = {}; // for cylinder objects, indexed by link color + + var basicLineMaterials = {}; // for line objects, indexed by link color + + var visibleLinks = state.graphData.links.filter(_visibilityAccessor); // lines digest cycle + + threeDigest(visibleLinks, state.graphScene, { + objBindAttr: '__lineObj', + purge: state._flushObjects || hasAnyPropChanged([// recreate objects if any of these props have changed + 'linkThreeObject', 'linkThreeObjectExtend', 'linkWidth']), + objFilter: function objFilter(obj) { + return obj.__graphObjType === 'link'; + }, + createObj: function createObj(link) { + var customObj = _customObjectAccessor(link); + + var extendObj = _customObjectExtendAccessor(link); + + if (customObj && state.linkThreeObject === customObj) { + // clone object if it's a shared object among all links + customObj = customObj.clone(); + } + + var defaultObj; + + if (!customObj || extendObj) { + // construct default line obj + var useCylinder = !!widthAccessor(link); + + if (useCylinder) { + defaultObj = new three$1$1.Mesh(); + } else { + // Use plain line (constant width) + var lineGeometry = new three$1$1.BufferGeometry(); + lineGeometry[setAttributeFn]('position', new three$1$1.BufferAttribute(new Float32Array(2 * 3), 3)); + defaultObj = new three$1$1.Line(lineGeometry); + } + } + + var obj; + + if (!customObj) { + obj = defaultObj; + obj.__graphDefaultObj = true; + } else { + if (!extendObj) { + // use custom object + obj = customObj; + } else { + // extend default with custom in a group + obj = new three$1$1.Group(); + obj.__graphDefaultObj = true; + obj.add(defaultObj); + obj.add(customObj); + } + } + + obj.renderOrder = 10; // Prevent visual glitches of dark lines on top of nodes by rendering them last + + obj.__graphObjType = 'link'; // Add object type + + return obj; + }, + updateObj: function updateObj(updObj, link) { + if (updObj.__graphDefaultObj) { + // bypass internal updates for custom link objects + // select default object if it's an extended group + var obj = updObj.children.length ? updObj.children[0] : updObj; + var linkWidth = Math.ceil(widthAccessor(link) * 10) / 10; + var useCylinder = !!linkWidth; + + if (useCylinder) { + var r = linkWidth / 2; + var numSegments = state.linkResolution; + + if (!obj.geometry.type.match(/^Cylinder(Buffer)?Geometry$/) || obj.geometry.parameters.radiusTop !== r || obj.geometry.parameters.radialSegments !== numSegments) { + if (!cylinderGeometries.hasOwnProperty(linkWidth)) { + var geometry = new three$1$1.CylinderBufferGeometry(r, r, 1, numSegments, 1, false); + geometry[applyMatrix4Fn](new three$1$1.Matrix4().makeTranslation(0, 1 / 2, 0)); + geometry[applyMatrix4Fn](new three$1$1.Matrix4().makeRotationX(Math.PI / 2)); + cylinderGeometries[linkWidth] = geometry; + } + + obj.geometry.dispose(); + obj.geometry = cylinderGeometries[linkWidth]; + } + } + + var customMaterial = customMaterialAccessor(link); + + if (customMaterial) { + obj.material = customMaterial; + } else { + var color = _colorAccessor(link); + + var materialColor = new three$1$1.Color(colorStr2Hex(color || '#f0f0f0')); + var opacity = state.linkOpacity * colorAlpha(color); + var materialType = useCylinder ? 'MeshLambertMaterial' : 'LineBasicMaterial'; + + if (obj.material.type !== materialType || !obj.material.color.equals(materialColor) || obj.material.opacity !== opacity) { + var lineMaterials = useCylinder ? lambertLineMaterials : basicLineMaterials; + + if (!lineMaterials.hasOwnProperty(color)) { + lineMaterials[color] = new three$1$1[materialType]({ + color: materialColor, + transparent: opacity < 1, + opacity: opacity, + depthWrite: opacity >= 1 // Prevent transparency issues + + }); + } + + obj.material.dispose(); + obj.material = lineMaterials[color]; + } + } + } + } + }); // Arrows digest cycle + + if (state.linkDirectionalArrowLength || changedProps.hasOwnProperty('linkDirectionalArrowLength')) { + var arrowLengthAccessor = index$1(state.linkDirectionalArrowLength); + var arrowColorAccessor = index$1(state.linkDirectionalArrowColor); + threeDigest(visibleLinks.filter(arrowLengthAccessor), state.graphScene, { + objBindAttr: '__arrowObj', + objFilter: function objFilter(obj) { + return obj.__linkThreeObjType === 'arrow'; + }, + createObj: function createObj() { + var obj = new three$1$1.Mesh(undefined, new three$1$1.MeshLambertMaterial({ + transparent: true + })); + obj.__linkThreeObjType = 'arrow'; // Add object type + + return obj; + }, + updateObj: function updateObj(obj, link) { + var arrowLength = arrowLengthAccessor(link); + var numSegments = state.linkDirectionalArrowResolution; + + if (!obj.geometry.type.match(/^Cone(Buffer)?Geometry$/) || obj.geometry.parameters.height !== arrowLength || obj.geometry.parameters.radialSegments !== numSegments) { + var coneGeometry = new three$1$1.ConeBufferGeometry(arrowLength * 0.25, arrowLength, numSegments); // Correct orientation + + coneGeometry.translate(0, arrowLength / 2, 0); + coneGeometry.rotateX(Math.PI / 2); + obj.geometry.dispose(); + obj.geometry = coneGeometry; + } + + obj.material.color = new three$1$1.Color(arrowColorAccessor(link) || _colorAccessor(link) || '#f0f0f0'); + obj.material.opacity = state.linkOpacity * 3; + } + }); + } // Photon particles digest cycle + + + if (state.linkDirectionalParticles || changedProps.hasOwnProperty('linkDirectionalParticles')) { + var particlesAccessor = index$1(state.linkDirectionalParticles); + var particleWidthAccessor = index$1(state.linkDirectionalParticleWidth); + var particleColorAccessor = index$1(state.linkDirectionalParticleColor); + var particleMaterials = {}; // indexed by link color + + var particleGeometries = {}; // indexed by particle width + + threeDigest(visibleLinks.filter(particlesAccessor), state.graphScene, { + objBindAttr: '__photonsObj', + objFilter: function objFilter(obj) { + return obj.__linkThreeObjType === 'photons'; + }, + createObj: function createObj() { + var obj = new three$1$1.Group(); + obj.__linkThreeObjType = 'photons'; // Add object type + + return obj; + }, + updateObj: function updateObj(obj, link) { + var numPhotons = Math.round(Math.abs(particlesAccessor(link))); + var curPhoton = !!obj.children.length && obj.children[0]; + var photonR = Math.ceil(particleWidthAccessor(link) * 10) / 10 / 2; + var numSegments = state.linkDirectionalParticleResolution; + var particleGeometry; + + if (curPhoton && curPhoton.geometry.parameters.radius === photonR && curPhoton.geometry.parameters.widthSegments === numSegments) { + particleGeometry = curPhoton.geometry; + } else { + if (!particleGeometries.hasOwnProperty(photonR)) { + particleGeometries[photonR] = new three$1$1.SphereBufferGeometry(photonR, numSegments, numSegments); + } + + particleGeometry = particleGeometries[photonR]; + curPhoton && curPhoton.geometry.dispose(); + } + + var photonColor = particleColorAccessor(link) || _colorAccessor(link) || '#f0f0f0'; + var materialColor = new three$1$1.Color(colorStr2Hex(photonColor)); + var opacity = state.linkOpacity * 3; + var particleMaterial; + + if (curPhoton && curPhoton.material.color.equals(materialColor) && curPhoton.material.opacity === opacity) { + particleMaterial = curPhoton.material; + } else { + if (!particleMaterials.hasOwnProperty(photonColor)) { + particleMaterials[photonColor] = new three$1$1.MeshLambertMaterial({ + color: materialColor, + transparent: true, + opacity: opacity + }); + } + + particleMaterial = particleMaterials[photonColor]; + curPhoton && curPhoton.material.dispose(); + } // digest cycle for each photon + + + threeDigest(_toConsumableArray$1(new Array(numPhotons)).map(function (_, idx) { + return { + idx: idx + }; + }), obj, { + idAccessor: function idAccessor(d) { + return d.idx; + }, + createObj: function createObj() { + return new three$1$1.Mesh(particleGeometry, particleMaterial); + }, + updateObj: function updateObj(obj) { + obj.geometry = particleGeometry; + obj.material = particleMaterial; + } + }); + } + }); + } + } + + state._flushObjects = false; // reset objects refresh flag + // simulation engine + + if (hasAnyPropChanged(['graphData', 'nodeId', 'linkSource', 'linkTarget', 'numDimensions', 'forceEngine', 'dagMode', 'dagNodeFilter', 'dagLevelDistance'])) { + state.engineRunning = false; // Pause simulation + // parse links + + state.graphData.links.forEach(function (link) { + link.source = link[state.linkSource]; + link.target = link[state.linkTarget]; + }); // Feed data to force-directed layout + + var isD3Sim = state.forceEngine !== 'ngraph'; + var layout; + + if (isD3Sim) { + // D3-force + (layout = state.d3ForceLayout).stop().alpha(1) // re-heat the simulation + .numDimensions(state.numDimensions).nodes(state.graphData.nodes); // add links (if link force is still active) + + var linkForce = state.d3ForceLayout.force('link'); + + if (linkForce) { + linkForce.id(function (d) { + return d[state.nodeId]; + }).links(state.graphData.links); + } // setup dag force constraints + + + var nodeDepths = state.dagMode && getDagDepths(state.graphData, function (node) { + return node[state.nodeId]; + }, { + nodeFilter: state.dagNodeFilter, + onLoopError: state.onDagError || undefined + }); + var maxDepth = Math.max.apply(Math, _toConsumableArray$1(Object.values(nodeDepths || []))); + var dagLevelDistance = state.dagLevelDistance || state.graphData.nodes.length / (maxDepth || 1) * DAG_LEVEL_NODE_RATIO * (['radialin', 'radialout'].indexOf(state.dagMode) !== -1 ? 0.7 : 1); // Fix nodes to x,y,z for dag mode + + if (state.dagMode) { + var getFFn = function getFFn(fix, invert) { + return function (node) { + return !fix ? undefined : (nodeDepths[node[state.nodeId]] - maxDepth / 2) * dagLevelDistance * (invert ? -1 : 1); + }; + }; + + var fxFn = getFFn(['lr', 'rl'].indexOf(state.dagMode) !== -1, state.dagMode === 'rl'); + var fyFn = getFFn(['td', 'bu'].indexOf(state.dagMode) !== -1, state.dagMode === 'td'); + var fzFn = getFFn(['zin', 'zout'].indexOf(state.dagMode) !== -1, state.dagMode === 'zout'); + state.graphData.nodes.filter(state.dagNodeFilter).forEach(function (node) { + node.fx = fxFn(node); + node.fy = fyFn(node); + node.fz = fzFn(node); + }); + } // Use radial force for radial dags + + + state.d3ForceLayout.force('dagRadial', ['radialin', 'radialout'].indexOf(state.dagMode) !== -1 ? forceRadial(function (node) { + var nodeDepth = nodeDepths[node[state.nodeId]] || -1; + return (state.dagMode === 'radialin' ? maxDepth - nodeDepth : nodeDepth) * dagLevelDistance; + }).strength(function (node) { + return state.dagNodeFilter(node) ? 1 : 0; + }) : null); + } else { + // ngraph + var _graph = ngraph.graph(); + + state.graphData.nodes.forEach(function (node) { + _graph.addNode(node[state.nodeId]); + }); + state.graphData.links.forEach(function (link) { + _graph.addLink(link.source, link.target); + }); + layout = ngraph.forcelayout(_graph, _objectSpread2({ + dimensions: state.numDimensions + }, state.ngraphPhysics)); + layout.graph = _graph; // Attach graph reference to layout + } + + for (var i = 0; i < state.warmupTicks && !(isD3Sim && state.d3AlphaMin > 0 && state.d3ForceLayout.alpha() < state.d3AlphaMin); i++) { + layout[isD3Sim ? "tick" : "step"](); + } // Initial ticks before starting to render + + + state.layout = layout; + this.resetCountdown(); + } + + state.engineRunning = true; // resume simulation + + state.onFinishUpdate(); + } + }); + + function fromKapsule (kapsule) { + var baseClass = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Object; + var initKapsuleWithSelf = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + var FromKapsule = /*#__PURE__*/function (_baseClass) { + _inherits(FromKapsule, _baseClass); + + var _super = _createSuper(FromKapsule); + + function FromKapsule() { + var _this; + + _classCallCheck(this, FromKapsule); + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + _this = _super.call.apply(_super, [this].concat(args)); + _this.__kapsuleInstance = kapsule().apply(void 0, [].concat(_toConsumableArray$1(initKapsuleWithSelf ? [_assertThisInitialized$1(_this)] : []), args)); + return _this; + } + + return FromKapsule; + }(baseClass); // attach kapsule props/methods to class prototype + + + Object.keys(kapsule()).forEach(function (m) { + return FromKapsule.prototype[m] = function () { + var _this$__kapsuleInstan; + + var returnVal = (_this$__kapsuleInstan = this.__kapsuleInstance)[m].apply(_this$__kapsuleInstan, arguments); + + return returnVal === this.__kapsuleInstance ? this // chain based on this class, not the kapsule obj + : returnVal; + }; + }); + return FromKapsule; + } + + var three$2 = window.THREE ? window.THREE : { + Group: Group$1 + }; // Prefer consumption from global THREE, if exists + var threeForcegraph = fromKapsule(ForceGraph, three$2.Group, true); + + var TrackballControls = function ( object, domElement ) { + + if ( domElement === undefined ) console.warn( 'THREE.TrackballControls: The second parameter "domElement" is now mandatory.' ); + if ( domElement === document ) console.error( 'THREE.TrackballControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.' ); + + var scope = this; + var STATE = { NONE: - 1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4 }; + + this.object = object; + this.domElement = domElement; + + // API + + this.enabled = true; + + this.screen = { left: 0, top: 0, width: 0, height: 0 }; + + this.rotateSpeed = 1.0; + this.zoomSpeed = 1.2; + this.panSpeed = 0.3; + + this.noRotate = false; + this.noZoom = false; + this.noPan = false; + + this.staticMoving = false; + this.dynamicDampingFactor = 0.2; + + this.minDistance = 0; + this.maxDistance = Infinity; + + this.keys = [ 65 /*A*/, 83 /*S*/, 68 /*D*/ ]; + + this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.ZOOM, RIGHT: MOUSE.PAN }; + + // internals + + this.target = new Vector3(); + + var EPS = 0.000001; + + var lastPosition = new Vector3(); + var lastZoom = 1; + + var _state = STATE.NONE, + _keyState = STATE.NONE, + + _eye = new Vector3(), + + _movePrev = new Vector2(), + _moveCurr = new Vector2(), + + _lastAxis = new Vector3(), + _lastAngle = 0, + + _zoomStart = new Vector2(), + _zoomEnd = new Vector2(), + + _touchZoomDistanceStart = 0, + _touchZoomDistanceEnd = 0, + + _panStart = new Vector2(), + _panEnd = new Vector2(); + + // for reset + + this.target0 = this.target.clone(); + this.position0 = this.object.position.clone(); + this.up0 = this.object.up.clone(); + this.zoom0 = this.object.zoom; + + // events + + var changeEvent = { type: 'change' }; + var startEvent = { type: 'start' }; + var endEvent = { type: 'end' }; + + + // methods + + this.handleResize = function () { + + var box = scope.domElement.getBoundingClientRect(); + // adjustments come from similar code in the jquery offset() function + var d = scope.domElement.ownerDocument.documentElement; + scope.screen.left = box.left + window.pageXOffset - d.clientLeft; + scope.screen.top = box.top + window.pageYOffset - d.clientTop; + scope.screen.width = box.width; + scope.screen.height = box.height; + + }; + + var getMouseOnScreen = ( function () { + + var vector = new Vector2(); + + return function getMouseOnScreen( pageX, pageY ) { + + vector.set( + ( pageX - scope.screen.left ) / scope.screen.width, + ( pageY - scope.screen.top ) / scope.screen.height + ); + + return vector; + + }; + + }() ); + + var getMouseOnCircle = ( function () { + + var vector = new Vector2(); + + return function getMouseOnCircle( pageX, pageY ) { + + vector.set( + ( ( pageX - scope.screen.width * 0.5 - scope.screen.left ) / ( scope.screen.width * 0.5 ) ), + ( ( scope.screen.height + 2 * ( scope.screen.top - pageY ) ) / scope.screen.width ) // screen.width intentional + ); + + return vector; + + }; + + }() ); + + this.rotateCamera = ( function () { + + var axis = new Vector3(), + quaternion = new Quaternion(), + eyeDirection = new Vector3(), + objectUpDirection = new Vector3(), + objectSidewaysDirection = new Vector3(), + moveDirection = new Vector3(), + angle; + + return function rotateCamera() { + + moveDirection.set( _moveCurr.x - _movePrev.x, _moveCurr.y - _movePrev.y, 0 ); + angle = moveDirection.length(); + + if ( angle ) { + + _eye.copy( scope.object.position ).sub( scope.target ); + + eyeDirection.copy( _eye ).normalize(); + objectUpDirection.copy( scope.object.up ).normalize(); + objectSidewaysDirection.crossVectors( objectUpDirection, eyeDirection ).normalize(); + + objectUpDirection.setLength( _moveCurr.y - _movePrev.y ); + objectSidewaysDirection.setLength( _moveCurr.x - _movePrev.x ); + + moveDirection.copy( objectUpDirection.add( objectSidewaysDirection ) ); + + axis.crossVectors( moveDirection, _eye ).normalize(); + + angle *= scope.rotateSpeed; + quaternion.setFromAxisAngle( axis, angle ); + + _eye.applyQuaternion( quaternion ); + scope.object.up.applyQuaternion( quaternion ); + + _lastAxis.copy( axis ); + _lastAngle = angle; + + } else if ( ! scope.staticMoving && _lastAngle ) { + + _lastAngle *= Math.sqrt( 1.0 - scope.dynamicDampingFactor ); + _eye.copy( scope.object.position ).sub( scope.target ); + quaternion.setFromAxisAngle( _lastAxis, _lastAngle ); + _eye.applyQuaternion( quaternion ); + scope.object.up.applyQuaternion( quaternion ); + + } + + _movePrev.copy( _moveCurr ); + + }; + + }() ); + + + this.zoomCamera = function () { + + var factor; + + if ( _state === STATE.TOUCH_ZOOM_PAN ) { + + factor = _touchZoomDistanceStart / _touchZoomDistanceEnd; + _touchZoomDistanceStart = _touchZoomDistanceEnd; + + if ( scope.object.isPerspectiveCamera ) { + + _eye.multiplyScalar( factor ); + + } else if ( scope.object.isOrthographicCamera ) { + + scope.object.zoom *= factor; + scope.object.updateProjectionMatrix(); + + } else { + + console.warn( 'THREE.TrackballControls: Unsupported camera type' ); + + } + + } else { + + factor = 1.0 + ( _zoomEnd.y - _zoomStart.y ) * scope.zoomSpeed; + + if ( factor !== 1.0 && factor > 0.0 ) { + + if ( scope.object.isPerspectiveCamera ) { + + _eye.multiplyScalar( factor ); + + } else if ( scope.object.isOrthographicCamera ) { + + scope.object.zoom /= factor; + scope.object.updateProjectionMatrix(); + + } else { + + console.warn( 'THREE.TrackballControls: Unsupported camera type' ); + + } + + } + + if ( scope.staticMoving ) { + + _zoomStart.copy( _zoomEnd ); + + } else { + + _zoomStart.y += ( _zoomEnd.y - _zoomStart.y ) * this.dynamicDampingFactor; + + } + + } + + }; + + this.panCamera = ( function () { + + var mouseChange = new Vector2(), + objectUp = new Vector3(), + pan = new Vector3(); + + return function panCamera() { + + mouseChange.copy( _panEnd ).sub( _panStart ); + + if ( mouseChange.lengthSq() ) { + + if ( scope.object.isOrthographicCamera ) { + + var scale_x = ( scope.object.right - scope.object.left ) / scope.object.zoom / scope.domElement.clientWidth; + var scale_y = ( scope.object.top - scope.object.bottom ) / scope.object.zoom / scope.domElement.clientWidth; + + mouseChange.x *= scale_x; + mouseChange.y *= scale_y; + + } + + mouseChange.multiplyScalar( _eye.length() * scope.panSpeed ); + + pan.copy( _eye ).cross( scope.object.up ).setLength( mouseChange.x ); + pan.add( objectUp.copy( scope.object.up ).setLength( mouseChange.y ) ); + + scope.object.position.add( pan ); + scope.target.add( pan ); + + if ( scope.staticMoving ) { + + _panStart.copy( _panEnd ); + + } else { + + _panStart.add( mouseChange.subVectors( _panEnd, _panStart ).multiplyScalar( scope.dynamicDampingFactor ) ); + + } + + } + + }; + + }() ); + + this.checkDistances = function () { + + if ( ! scope.noZoom || ! scope.noPan ) { + + if ( _eye.lengthSq() > scope.maxDistance * scope.maxDistance ) { + + scope.object.position.addVectors( scope.target, _eye.setLength( scope.maxDistance ) ); + _zoomStart.copy( _zoomEnd ); + + } + + if ( _eye.lengthSq() < scope.minDistance * scope.minDistance ) { + + scope.object.position.addVectors( scope.target, _eye.setLength( scope.minDistance ) ); + _zoomStart.copy( _zoomEnd ); + + } + + } + + }; + + this.update = function () { + + _eye.subVectors( scope.object.position, scope.target ); + + if ( ! scope.noRotate ) { + + scope.rotateCamera(); + + } + + if ( ! scope.noZoom ) { + + scope.zoomCamera(); + + } + + if ( ! scope.noPan ) { + + scope.panCamera(); + + } + + scope.object.position.addVectors( scope.target, _eye ); + + if ( scope.object.isPerspectiveCamera ) { + + scope.checkDistances(); + + scope.object.lookAt( scope.target ); + + if ( lastPosition.distanceToSquared( scope.object.position ) > EPS ) { + + scope.dispatchEvent( changeEvent ); + + lastPosition.copy( scope.object.position ); + + } + + } else if ( scope.object.isOrthographicCamera ) { + + scope.object.lookAt( scope.target ); + + if ( lastPosition.distanceToSquared( scope.object.position ) > EPS || lastZoom !== scope.object.zoom ) { + + scope.dispatchEvent( changeEvent ); + + lastPosition.copy( scope.object.position ); + lastZoom = scope.object.zoom; + + } + + } else { + + console.warn( 'THREE.TrackballControls: Unsupported camera type' ); + + } + + }; + + this.reset = function () { + + _state = STATE.NONE; + _keyState = STATE.NONE; + + scope.target.copy( scope.target0 ); + scope.object.position.copy( scope.position0 ); + scope.object.up.copy( scope.up0 ); + scope.object.zoom = scope.zoom0; + + scope.object.updateProjectionMatrix(); + + _eye.subVectors( scope.object.position, scope.target ); + + scope.object.lookAt( scope.target ); + + scope.dispatchEvent( changeEvent ); + + lastPosition.copy( scope.object.position ); + lastZoom = scope.object.zoom; + + }; + + // listeners + + function onPointerDown( event ) { + + if ( scope.enabled === false ) return; + + switch ( event.pointerType ) { + + case 'mouse': + case 'pen': + onMouseDown( event ); + break; + + // TODO touch + + } + + } + + function onPointerMove( event ) { + + if ( scope.enabled === false ) return; + + switch ( event.pointerType ) { + + case 'mouse': + case 'pen': + onMouseMove( event ); + break; + + // TODO touch + + } + + } + + function onPointerUp( event ) { + + if ( scope.enabled === false ) return; + + switch ( event.pointerType ) { + + case 'mouse': + case 'pen': + onMouseUp( event ); + break; + + // TODO touch + + } + + } + + function keydown( event ) { + + if ( scope.enabled === false ) return; + + window.removeEventListener( 'keydown', keydown ); + + if ( _keyState !== STATE.NONE ) { + + return; + + } else if ( event.keyCode === scope.keys[ STATE.ROTATE ] && ! scope.noRotate ) { + + _keyState = STATE.ROTATE; + + } else if ( event.keyCode === scope.keys[ STATE.ZOOM ] && ! scope.noZoom ) { + + _keyState = STATE.ZOOM; + + } else if ( event.keyCode === scope.keys[ STATE.PAN ] && ! scope.noPan ) { + + _keyState = STATE.PAN; + + } + + } + + function keyup() { + + if ( scope.enabled === false ) return; + + _keyState = STATE.NONE; + + window.addEventListener( 'keydown', keydown, false ); + + } + + function onMouseDown( event ) { + + event.preventDefault(); + event.stopPropagation(); + + if ( _state === STATE.NONE ) { + + switch ( event.button ) { + + case scope.mouseButtons.LEFT: + _state = STATE.ROTATE; + break; + + case scope.mouseButtons.MIDDLE: + _state = STATE.ZOOM; + break; + + case scope.mouseButtons.RIGHT: + _state = STATE.PAN; + break; + + default: + _state = STATE.NONE; + + } + + } + + var state = ( _keyState !== STATE.NONE ) ? _keyState : _state; + + if ( state === STATE.ROTATE && ! scope.noRotate ) { + + _moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) ); + _movePrev.copy( _moveCurr ); + + } else if ( state === STATE.ZOOM && ! scope.noZoom ) { + + _zoomStart.copy( getMouseOnScreen( event.pageX, event.pageY ) ); + _zoomEnd.copy( _zoomStart ); + + } else if ( state === STATE.PAN && ! scope.noPan ) { + + _panStart.copy( getMouseOnScreen( event.pageX, event.pageY ) ); + _panEnd.copy( _panStart ); + + } + + scope.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove, false ); + scope.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp, false ); + + scope.dispatchEvent( startEvent ); + + } + + function onMouseMove( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); + event.stopPropagation(); + + var state = ( _keyState !== STATE.NONE ) ? _keyState : _state; + + if ( state === STATE.ROTATE && ! scope.noRotate ) { + + _movePrev.copy( _moveCurr ); + _moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) ); + + } else if ( state === STATE.ZOOM && ! scope.noZoom ) { + + _zoomEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) ); + + } else if ( state === STATE.PAN && ! scope.noPan ) { + + _panEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) ); + + } + + } + + function onMouseUp( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); + event.stopPropagation(); + + _state = STATE.NONE; + + scope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove ); + scope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp ); + + scope.dispatchEvent( endEvent ); + + } + + function mousewheel( event ) { + + if ( scope.enabled === false ) return; + + if ( scope.noZoom === true ) return; + + event.preventDefault(); + event.stopPropagation(); + + switch ( event.deltaMode ) { + + case 2: + // Zoom in pages + _zoomStart.y -= event.deltaY * 0.025; + break; + + case 1: + // Zoom in lines + _zoomStart.y -= event.deltaY * 0.01; + break; + + default: + // undefined, 0, assume pixels + _zoomStart.y -= event.deltaY * 0.00025; + break; + + } + + scope.dispatchEvent( startEvent ); + scope.dispatchEvent( endEvent ); + + } + + function touchstart( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); + + switch ( event.touches.length ) { + + case 1: + _state = STATE.TOUCH_ROTATE; + _moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) ); + _movePrev.copy( _moveCurr ); + break; + + default: // 2 or more + _state = STATE.TOUCH_ZOOM_PAN; + var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; + var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; + _touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy ); + + var x = ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ) / 2; + var y = ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ) / 2; + _panStart.copy( getMouseOnScreen( x, y ) ); + _panEnd.copy( _panStart ); + break; + + } + + scope.dispatchEvent( startEvent ); + + } + + function touchmove( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); + event.stopPropagation(); + + switch ( event.touches.length ) { + + case 1: + _movePrev.copy( _moveCurr ); + _moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) ); + break; + + default: // 2 or more + var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; + var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; + _touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy ); + + var x = ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ) / 2; + var y = ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ) / 2; + _panEnd.copy( getMouseOnScreen( x, y ) ); + break; + + } + + } + + function touchend( event ) { + + if ( scope.enabled === false ) return; + + switch ( event.touches.length ) { + + case 0: + _state = STATE.NONE; + break; + + case 1: + _state = STATE.TOUCH_ROTATE; + _moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) ); + _movePrev.copy( _moveCurr ); + break; + + } + + scope.dispatchEvent( endEvent ); + + } + + function contextmenu( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); + + } + + this.dispose = function () { + + scope.domElement.removeEventListener( 'contextmenu', contextmenu, false ); + + scope.domElement.removeEventListener( 'pointerdown', onPointerDown, false ); + scope.domElement.removeEventListener( 'wheel', mousewheel, false ); + + scope.domElement.removeEventListener( 'touchstart', touchstart, false ); + scope.domElement.removeEventListener( 'touchend', touchend, false ); + scope.domElement.removeEventListener( 'touchmove', touchmove, false ); + + scope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove, false ); + scope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp, false ); + + window.removeEventListener( 'keydown', keydown, false ); + window.removeEventListener( 'keyup', keyup, false ); + + }; + + this.domElement.addEventListener( 'contextmenu', contextmenu, false ); + + this.domElement.addEventListener( 'pointerdown', onPointerDown, false ); + this.domElement.addEventListener( 'wheel', mousewheel, false ); + + this.domElement.addEventListener( 'touchstart', touchstart, false ); + this.domElement.addEventListener( 'touchend', touchend, false ); + this.domElement.addEventListener( 'touchmove', touchmove, false ); + + this.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove, false ); + this.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp, false ); + + window.addEventListener( 'keydown', keydown, false ); + window.addEventListener( 'keyup', keyup, false ); + + this.handleResize(); + + // force an update at start + this.update(); + + }; + + TrackballControls.prototype = Object.create( EventDispatcher.prototype ); + TrackballControls.prototype.constructor = TrackballControls; + + // This set of controls performs orbiting, dollying (zooming), and panning. + // Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default). + // + // Orbit - left mouse / touch: one-finger move + // Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish + // Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move + + var OrbitControls = function ( object, domElement ) { + + if ( domElement === undefined ) console.warn( 'THREE.OrbitControls: The second parameter "domElement" is now mandatory.' ); + if ( domElement === document ) console.error( 'THREE.OrbitControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.' ); + + this.object = object; + this.domElement = domElement; + + // Set to false to disable this control + this.enabled = true; + + // "target" sets the location of focus, where the object orbits around + this.target = new Vector3(); + + // How far you can dolly in and out ( PerspectiveCamera only ) + this.minDistance = 0; + this.maxDistance = Infinity; + + // How far you can zoom in and out ( OrthographicCamera only ) + this.minZoom = 0; + this.maxZoom = Infinity; + + // How far you can orbit vertically, upper and lower limits. + // Range is 0 to Math.PI radians. + this.minPolarAngle = 0; // radians + this.maxPolarAngle = Math.PI; // radians + + // How far you can orbit horizontally, upper and lower limits. + // If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI ) + this.minAzimuthAngle = - Infinity; // radians + this.maxAzimuthAngle = Infinity; // radians + + // Set to true to enable damping (inertia) + // If damping is enabled, you must call controls.update() in your animation loop + this.enableDamping = false; + this.dampingFactor = 0.05; + + // This option actually enables dollying in and out; left as "zoom" for backwards compatibility. + // Set to false to disable zooming + this.enableZoom = true; + this.zoomSpeed = 1.0; + + // Set to false to disable rotating + this.enableRotate = true; + this.rotateSpeed = 1.0; + + // Set to false to disable panning + this.enablePan = true; + this.panSpeed = 1.0; + this.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up + this.keyPanSpeed = 7.0; // pixels moved per arrow key push + + // Set to true to automatically rotate around the target + // If auto-rotate is enabled, you must call controls.update() in your animation loop + this.autoRotate = false; + this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60 + + // Set to false to disable use of the keys + this.enableKeys = true; + + // The four arrow keys + this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 }; + + // Mouse buttons + this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN }; + + // Touch fingers + this.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN }; + + // for reset + this.target0 = this.target.clone(); + this.position0 = this.object.position.clone(); + this.zoom0 = this.object.zoom; + + // + // public methods + // + + this.getPolarAngle = function () { + + return spherical.phi; + + }; + + this.getAzimuthalAngle = function () { + + return spherical.theta; + + }; + + this.saveState = function () { + + scope.target0.copy( scope.target ); + scope.position0.copy( scope.object.position ); + scope.zoom0 = scope.object.zoom; + + }; + + this.reset = function () { + + scope.target.copy( scope.target0 ); + scope.object.position.copy( scope.position0 ); + scope.object.zoom = scope.zoom0; + + scope.object.updateProjectionMatrix(); + scope.dispatchEvent( changeEvent ); + + scope.update(); + + state = STATE.NONE; + + }; + + // this method is exposed, but perhaps it would be better if we can make it private... + this.update = function () { + + var offset = new Vector3(); + + // so camera.up is the orbit axis + var quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) ); + var quatInverse = quat.clone().invert(); + + var lastPosition = new Vector3(); + var lastQuaternion = new Quaternion(); + + var twoPI = 2 * Math.PI; + + return function update() { + + var position = scope.object.position; + + offset.copy( position ).sub( scope.target ); + + // rotate offset to "y-axis-is-up" space + offset.applyQuaternion( quat ); + + // angle from z-axis around y-axis + spherical.setFromVector3( offset ); + + if ( scope.autoRotate && state === STATE.NONE ) { + + rotateLeft( getAutoRotationAngle() ); + + } + + if ( scope.enableDamping ) { + + spherical.theta += sphericalDelta.theta * scope.dampingFactor; + spherical.phi += sphericalDelta.phi * scope.dampingFactor; + + } else { + + spherical.theta += sphericalDelta.theta; + spherical.phi += sphericalDelta.phi; + + } + + // restrict theta to be between desired limits + + var min = scope.minAzimuthAngle; + var max = scope.maxAzimuthAngle; + + if ( isFinite( min ) && isFinite( max ) ) { + + if ( min < - Math.PI ) min += twoPI; else if ( min > Math.PI ) min -= twoPI; + + if ( max < - Math.PI ) max += twoPI; else if ( max > Math.PI ) max -= twoPI; + + if ( min <= max ) { + + spherical.theta = Math.max( min, Math.min( max, spherical.theta ) ); + + } else { + + spherical.theta = ( spherical.theta > ( min + max ) / 2 ) ? + Math.max( min, spherical.theta ) : + Math.min( max, spherical.theta ); + + } + + } + + // restrict phi to be between desired limits + spherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) ); + + spherical.makeSafe(); + + + spherical.radius *= scale; + + // restrict radius to be between desired limits + spherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) ); + + // move target to panned location + + if ( scope.enableDamping === true ) { + + scope.target.addScaledVector( panOffset, scope.dampingFactor ); + + } else { + + scope.target.add( panOffset ); + + } + + offset.setFromSpherical( spherical ); + + // rotate offset back to "camera-up-vector-is-up" space + offset.applyQuaternion( quatInverse ); + + position.copy( scope.target ).add( offset ); + + scope.object.lookAt( scope.target ); + + if ( scope.enableDamping === true ) { + + sphericalDelta.theta *= ( 1 - scope.dampingFactor ); + sphericalDelta.phi *= ( 1 - scope.dampingFactor ); + + panOffset.multiplyScalar( 1 - scope.dampingFactor ); + + } else { + + sphericalDelta.set( 0, 0, 0 ); + + panOffset.set( 0, 0, 0 ); + + } + + scale = 1; + + // update condition is: + // min(camera displacement, camera rotation in radians)^2 > EPS + // using small-angle approximation cos(x/2) = 1 - x^2 / 8 + + if ( zoomChanged || + lastPosition.distanceToSquared( scope.object.position ) > EPS || + 8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) { + + scope.dispatchEvent( changeEvent ); + + lastPosition.copy( scope.object.position ); + lastQuaternion.copy( scope.object.quaternion ); + zoomChanged = false; + + return true; + + } + + return false; + + }; + + }(); + + this.dispose = function () { + + scope.domElement.removeEventListener( 'contextmenu', onContextMenu, false ); + + scope.domElement.removeEventListener( 'pointerdown', onPointerDown, false ); + scope.domElement.removeEventListener( 'wheel', onMouseWheel, false ); + + scope.domElement.removeEventListener( 'touchstart', onTouchStart, false ); + scope.domElement.removeEventListener( 'touchend', onTouchEnd, false ); + scope.domElement.removeEventListener( 'touchmove', onTouchMove, false ); + + scope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove, false ); + scope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp, false ); + + scope.domElement.removeEventListener( 'keydown', onKeyDown, false ); + + //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here? + + }; + + // + // internals + // + + var scope = this; + + var changeEvent = { type: 'change' }; + var startEvent = { type: 'start' }; + var endEvent = { type: 'end' }; + + var STATE = { + NONE: - 1, + ROTATE: 0, + DOLLY: 1, + PAN: 2, + TOUCH_ROTATE: 3, + TOUCH_PAN: 4, + TOUCH_DOLLY_PAN: 5, + TOUCH_DOLLY_ROTATE: 6 + }; + + var state = STATE.NONE; + + var EPS = 0.000001; + + // current position in spherical coordinates + var spherical = new Spherical(); + var sphericalDelta = new Spherical(); + + var scale = 1; + var panOffset = new Vector3(); + var zoomChanged = false; + + var rotateStart = new Vector2(); + var rotateEnd = new Vector2(); + var rotateDelta = new Vector2(); + + var panStart = new Vector2(); + var panEnd = new Vector2(); + var panDelta = new Vector2(); + + var dollyStart = new Vector2(); + var dollyEnd = new Vector2(); + var dollyDelta = new Vector2(); + + function getAutoRotationAngle() { + + return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed; + + } + + function getZoomScale() { + + return Math.pow( 0.95, scope.zoomSpeed ); + + } + + function rotateLeft( angle ) { + + sphericalDelta.theta -= angle; + + } + + function rotateUp( angle ) { + + sphericalDelta.phi -= angle; + + } + + var panLeft = function () { + + var v = new Vector3(); + + return function panLeft( distance, objectMatrix ) { + + v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix + v.multiplyScalar( - distance ); + + panOffset.add( v ); + + }; + + }(); + + var panUp = function () { + + var v = new Vector3(); + + return function panUp( distance, objectMatrix ) { + + if ( scope.screenSpacePanning === true ) { + + v.setFromMatrixColumn( objectMatrix, 1 ); + + } else { + + v.setFromMatrixColumn( objectMatrix, 0 ); + v.crossVectors( scope.object.up, v ); + + } + + v.multiplyScalar( distance ); + + panOffset.add( v ); + + }; + + }(); + + // deltaX and deltaY are in pixels; right and down are positive + var pan = function () { + + var offset = new Vector3(); + + return function pan( deltaX, deltaY ) { + + var element = scope.domElement; + + if ( scope.object.isPerspectiveCamera ) { + + // perspective + var position = scope.object.position; + offset.copy( position ).sub( scope.target ); + var targetDistance = offset.length(); + + // half of the fov is center to top of screen + targetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 ); + + // we use only clientHeight here so aspect ratio does not distort speed + panLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix ); + panUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix ); + + } else if ( scope.object.isOrthographicCamera ) { + + // orthographic + panLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix ); + panUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix ); + + } else { + + // camera neither orthographic nor perspective + console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' ); + scope.enablePan = false; + + } + + }; + + }(); + + function dollyOut( dollyScale ) { + + if ( scope.object.isPerspectiveCamera ) { + + scale /= dollyScale; + + } else if ( scope.object.isOrthographicCamera ) { + + scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) ); + scope.object.updateProjectionMatrix(); + zoomChanged = true; + + } else { + + console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' ); + scope.enableZoom = false; + + } + + } + + function dollyIn( dollyScale ) { + + if ( scope.object.isPerspectiveCamera ) { + + scale *= dollyScale; + + } else if ( scope.object.isOrthographicCamera ) { + + scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) ); + scope.object.updateProjectionMatrix(); + zoomChanged = true; + + } else { + + console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' ); + scope.enableZoom = false; + + } + + } + + // + // event callbacks - update the object state + // + + function handleMouseDownRotate( event ) { + + rotateStart.set( event.clientX, event.clientY ); + + } + + function handleMouseDownDolly( event ) { + + dollyStart.set( event.clientX, event.clientY ); + + } + + function handleMouseDownPan( event ) { + + panStart.set( event.clientX, event.clientY ); + + } + + function handleMouseMoveRotate( event ) { + + rotateEnd.set( event.clientX, event.clientY ); + + rotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed ); + + var element = scope.domElement; + + rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height + + rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight ); + + rotateStart.copy( rotateEnd ); + + scope.update(); + + } + + function handleMouseMoveDolly( event ) { + + dollyEnd.set( event.clientX, event.clientY ); + + dollyDelta.subVectors( dollyEnd, dollyStart ); + + if ( dollyDelta.y > 0 ) { + + dollyOut( getZoomScale() ); + + } else if ( dollyDelta.y < 0 ) { + + dollyIn( getZoomScale() ); + + } + + dollyStart.copy( dollyEnd ); + + scope.update(); + + } + + function handleMouseMovePan( event ) { + + panEnd.set( event.clientX, event.clientY ); + + panDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed ); + + pan( panDelta.x, panDelta.y ); + + panStart.copy( panEnd ); + + scope.update(); + + } + + function handleMouseWheel( event ) { + + if ( event.deltaY < 0 ) { + + dollyIn( getZoomScale() ); + + } else if ( event.deltaY > 0 ) { + + dollyOut( getZoomScale() ); + + } + + scope.update(); + + } + + function handleKeyDown( event ) { + + var needsUpdate = false; + + switch ( event.keyCode ) { + + case scope.keys.UP: + pan( 0, scope.keyPanSpeed ); + needsUpdate = true; + break; + + case scope.keys.BOTTOM: + pan( 0, - scope.keyPanSpeed ); + needsUpdate = true; + break; + + case scope.keys.LEFT: + pan( scope.keyPanSpeed, 0 ); + needsUpdate = true; + break; + + case scope.keys.RIGHT: + pan( - scope.keyPanSpeed, 0 ); + needsUpdate = true; + break; + + } + + if ( needsUpdate ) { + + // prevent the browser from scrolling on cursor keys + event.preventDefault(); + + scope.update(); + + } + + + } + + function handleTouchStartRotate( event ) { + + if ( event.touches.length == 1 ) { + + rotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + + } else { + + var x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ); + var y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ); + + rotateStart.set( x, y ); + + } + + } + + function handleTouchStartPan( event ) { + + if ( event.touches.length == 1 ) { + + panStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + + } else { + + var x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ); + var y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ); + + panStart.set( x, y ); + + } + + } + + function handleTouchStartDolly( event ) { + + var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; + var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; + + var distance = Math.sqrt( dx * dx + dy * dy ); + + dollyStart.set( 0, distance ); + + } + + function handleTouchStartDollyPan( event ) { + + if ( scope.enableZoom ) handleTouchStartDolly( event ); + + if ( scope.enablePan ) handleTouchStartPan( event ); + + } + + function handleTouchStartDollyRotate( event ) { + + if ( scope.enableZoom ) handleTouchStartDolly( event ); + + if ( scope.enableRotate ) handleTouchStartRotate( event ); + + } + + function handleTouchMoveRotate( event ) { + + if ( event.touches.length == 1 ) { + + rotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + + } else { + + var x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ); + var y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ); + + rotateEnd.set( x, y ); + + } + + rotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed ); + + var element = scope.domElement; + + rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height + + rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight ); + + rotateStart.copy( rotateEnd ); + + } + + function handleTouchMovePan( event ) { + + if ( event.touches.length == 1 ) { + + panEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + + } else { + + var x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ); + var y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ); + + panEnd.set( x, y ); + + } + + panDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed ); + + pan( panDelta.x, panDelta.y ); + + panStart.copy( panEnd ); + + } + + function handleTouchMoveDolly( event ) { + + var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; + var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; + + var distance = Math.sqrt( dx * dx + dy * dy ); + + dollyEnd.set( 0, distance ); + + dollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) ); + + dollyOut( dollyDelta.y ); + + dollyStart.copy( dollyEnd ); + + } + + function handleTouchMoveDollyPan( event ) { + + if ( scope.enableZoom ) handleTouchMoveDolly( event ); + + if ( scope.enablePan ) handleTouchMovePan( event ); + + } + + function handleTouchMoveDollyRotate( event ) { + + if ( scope.enableZoom ) handleTouchMoveDolly( event ); + + if ( scope.enableRotate ) handleTouchMoveRotate( event ); + + } + + // + // event handlers - FSM: listen for events and reset state + // + + function onPointerDown( event ) { + + if ( scope.enabled === false ) return; + + switch ( event.pointerType ) { + + case 'mouse': + case 'pen': + onMouseDown( event ); + break; + + // TODO touch + + } + + } + + function onPointerMove( event ) { + + if ( scope.enabled === false ) return; + + switch ( event.pointerType ) { + + case 'mouse': + case 'pen': + onMouseMove( event ); + break; + + // TODO touch + + } + + } + + function onPointerUp( event ) { + + switch ( event.pointerType ) { + + case 'mouse': + case 'pen': + onMouseUp(); + break; + + // TODO touch + + } + + } + + function onMouseDown( event ) { + + // Prevent the browser from scrolling. + event.preventDefault(); + + // Manually set the focus since calling preventDefault above + // prevents the browser from setting it automatically. + + scope.domElement.focus ? scope.domElement.focus() : window.focus(); + + var mouseAction; + + switch ( event.button ) { + + case 0: + + mouseAction = scope.mouseButtons.LEFT; + break; + + case 1: + + mouseAction = scope.mouseButtons.MIDDLE; + break; + + case 2: + + mouseAction = scope.mouseButtons.RIGHT; + break; + + default: + + mouseAction = - 1; + + } + + switch ( mouseAction ) { + + case MOUSE.DOLLY: + + if ( scope.enableZoom === false ) return; + + handleMouseDownDolly( event ); + + state = STATE.DOLLY; + + break; + + case MOUSE.ROTATE: + + if ( event.ctrlKey || event.metaKey || event.shiftKey ) { + + if ( scope.enablePan === false ) return; + + handleMouseDownPan( event ); + + state = STATE.PAN; + + } else { + + if ( scope.enableRotate === false ) return; + + handleMouseDownRotate( event ); + + state = STATE.ROTATE; + + } + + break; + + case MOUSE.PAN: + + if ( event.ctrlKey || event.metaKey || event.shiftKey ) { + + if ( scope.enableRotate === false ) return; + + handleMouseDownRotate( event ); + + state = STATE.ROTATE; + + } else { + + if ( scope.enablePan === false ) return; + + handleMouseDownPan( event ); + + state = STATE.PAN; + + } + + break; + + default: + + state = STATE.NONE; + + } + + if ( state !== STATE.NONE ) { + + scope.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove, false ); + scope.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp, false ); + + scope.dispatchEvent( startEvent ); + + } + + } + + function onMouseMove( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); + + switch ( state ) { + + case STATE.ROTATE: + + if ( scope.enableRotate === false ) return; + + handleMouseMoveRotate( event ); + + break; + + case STATE.DOLLY: + + if ( scope.enableZoom === false ) return; + + handleMouseMoveDolly( event ); + + break; + + case STATE.PAN: + + if ( scope.enablePan === false ) return; + + handleMouseMovePan( event ); + + break; + + } + + } + + function onMouseUp( event ) { + + scope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove, false ); + scope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp, false ); + + if ( scope.enabled === false ) return; + + scope.dispatchEvent( endEvent ); + + state = STATE.NONE; + + } + + function onMouseWheel( event ) { + + if ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return; + + event.preventDefault(); + event.stopPropagation(); + + scope.dispatchEvent( startEvent ); + + handleMouseWheel( event ); + + scope.dispatchEvent( endEvent ); + + } + + function onKeyDown( event ) { + + if ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return; + + handleKeyDown( event ); + + } + + function onTouchStart( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); // prevent scrolling + + switch ( event.touches.length ) { + + case 1: + + switch ( scope.touches.ONE ) { + + case TOUCH.ROTATE: + + if ( scope.enableRotate === false ) return; + + handleTouchStartRotate( event ); + + state = STATE.TOUCH_ROTATE; + + break; + + case TOUCH.PAN: + + if ( scope.enablePan === false ) return; + + handleTouchStartPan( event ); + + state = STATE.TOUCH_PAN; + + break; + + default: + + state = STATE.NONE; + + } + + break; + + case 2: + + switch ( scope.touches.TWO ) { + + case TOUCH.DOLLY_PAN: + + if ( scope.enableZoom === false && scope.enablePan === false ) return; + + handleTouchStartDollyPan( event ); + + state = STATE.TOUCH_DOLLY_PAN; + + break; + + case TOUCH.DOLLY_ROTATE: + + if ( scope.enableZoom === false && scope.enableRotate === false ) return; + + handleTouchStartDollyRotate( event ); + + state = STATE.TOUCH_DOLLY_ROTATE; + + break; + + default: + + state = STATE.NONE; + + } + + break; + + default: + + state = STATE.NONE; + + } + + if ( state !== STATE.NONE ) { + + scope.dispatchEvent( startEvent ); + + } + + } + + function onTouchMove( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); // prevent scrolling + event.stopPropagation(); + + switch ( state ) { + + case STATE.TOUCH_ROTATE: + + if ( scope.enableRotate === false ) return; + + handleTouchMoveRotate( event ); + + scope.update(); + + break; + + case STATE.TOUCH_PAN: + + if ( scope.enablePan === false ) return; + + handleTouchMovePan( event ); + + scope.update(); + + break; + + case STATE.TOUCH_DOLLY_PAN: + + if ( scope.enableZoom === false && scope.enablePan === false ) return; + + handleTouchMoveDollyPan( event ); + + scope.update(); + + break; + + case STATE.TOUCH_DOLLY_ROTATE: + + if ( scope.enableZoom === false && scope.enableRotate === false ) return; + + handleTouchMoveDollyRotate( event ); + + scope.update(); + + break; + + default: + + state = STATE.NONE; + + } + + } + + function onTouchEnd( event ) { + + if ( scope.enabled === false ) return; + + scope.dispatchEvent( endEvent ); + + state = STATE.NONE; + + } + + function onContextMenu( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); + + } + + // + + scope.domElement.addEventListener( 'contextmenu', onContextMenu, false ); + + scope.domElement.addEventListener( 'pointerdown', onPointerDown, false ); + scope.domElement.addEventListener( 'wheel', onMouseWheel, false ); + + scope.domElement.addEventListener( 'touchstart', onTouchStart, false ); + scope.domElement.addEventListener( 'touchend', onTouchEnd, false ); + scope.domElement.addEventListener( 'touchmove', onTouchMove, false ); + + scope.domElement.addEventListener( 'keydown', onKeyDown, false ); + + // force an update at start + + this.update(); + + }; + + OrbitControls.prototype = Object.create( EventDispatcher.prototype ); + OrbitControls.prototype.constructor = OrbitControls; + + + // This set of controls performs orbiting, dollying (zooming), and panning. + // Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default). + // This is very similar to OrbitControls, another set of touch behavior + // + // Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate + // Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish + // Pan - left mouse, or arrow keys / touch: one-finger move + + var MapControls = function ( object, domElement ) { + + OrbitControls.call( this, object, domElement ); + + this.screenSpacePanning = false; // pan orthogonal to world-space direction camera.up + + this.mouseButtons.LEFT = MOUSE.PAN; + this.mouseButtons.RIGHT = MOUSE.ROTATE; + + this.touches.ONE = TOUCH.PAN; + this.touches.TWO = TOUCH.DOLLY_ROTATE; + + }; + + MapControls.prototype = Object.create( EventDispatcher.prototype ); + MapControls.prototype.constructor = MapControls; + + var FlyControls = function ( object, domElement ) { + + if ( domElement === undefined ) { + + console.warn( 'THREE.FlyControls: The second parameter "domElement" is now mandatory.' ); + domElement = document; + + } + + this.object = object; + this.domElement = domElement; + + if ( domElement ) this.domElement.setAttribute( 'tabindex', - 1 ); + + // API + + this.movementSpeed = 1.0; + this.rollSpeed = 0.005; + + this.dragToLook = false; + this.autoForward = false; + + // disable default target object behavior + + // internals + + var scope = this; + var changeEvent = { type: "change" }; + var EPS = 0.000001; + + this.tmpQuaternion = new Quaternion(); + + this.mouseStatus = 0; + + this.moveState = { up: 0, down: 0, left: 0, right: 0, forward: 0, back: 0, pitchUp: 0, pitchDown: 0, yawLeft: 0, yawRight: 0, rollLeft: 0, rollRight: 0 }; + this.moveVector = new Vector3( 0, 0, 0 ); + this.rotationVector = new Vector3( 0, 0, 0 ); + + this.keydown = function ( event ) { + + if ( event.altKey ) { + + return; + + } + + //event.preventDefault(); + + switch ( event.keyCode ) { + + case 16: /* shift */ this.movementSpeedMultiplier = .1; break; + + case 87: /*W*/ this.moveState.forward = 1; break; + case 83: /*S*/ this.moveState.back = 1; break; + + case 65: /*A*/ this.moveState.left = 1; break; + case 68: /*D*/ this.moveState.right = 1; break; + + case 82: /*R*/ this.moveState.up = 1; break; + case 70: /*F*/ this.moveState.down = 1; break; + + case 38: /*up*/ this.moveState.pitchUp = 1; break; + case 40: /*down*/ this.moveState.pitchDown = 1; break; + + case 37: /*left*/ this.moveState.yawLeft = 1; break; + case 39: /*right*/ this.moveState.yawRight = 1; break; + + case 81: /*Q*/ this.moveState.rollLeft = 1; break; + case 69: /*E*/ this.moveState.rollRight = 1; break; + + } + + this.updateMovementVector(); + this.updateRotationVector(); + + }; + + this.keyup = function ( event ) { + + switch ( event.keyCode ) { + + case 16: /* shift */ this.movementSpeedMultiplier = 1; break; + + case 87: /*W*/ this.moveState.forward = 0; break; + case 83: /*S*/ this.moveState.back = 0; break; + + case 65: /*A*/ this.moveState.left = 0; break; + case 68: /*D*/ this.moveState.right = 0; break; + + case 82: /*R*/ this.moveState.up = 0; break; + case 70: /*F*/ this.moveState.down = 0; break; + + case 38: /*up*/ this.moveState.pitchUp = 0; break; + case 40: /*down*/ this.moveState.pitchDown = 0; break; + + case 37: /*left*/ this.moveState.yawLeft = 0; break; + case 39: /*right*/ this.moveState.yawRight = 0; break; + + case 81: /*Q*/ this.moveState.rollLeft = 0; break; + case 69: /*E*/ this.moveState.rollRight = 0; break; + + } + + this.updateMovementVector(); + this.updateRotationVector(); + + }; + + this.mousedown = function ( event ) { + + if ( this.domElement !== document ) { + + this.domElement.focus(); + + } + + event.preventDefault(); + event.stopPropagation(); + + if ( this.dragToLook ) { + + this.mouseStatus ++; + + } else { + + switch ( event.button ) { + + case 0: this.moveState.forward = 1; break; + case 2: this.moveState.back = 1; break; + + } + + this.updateMovementVector(); + + } + + }; + + this.mousemove = function ( event ) { + + if ( ! this.dragToLook || this.mouseStatus > 0 ) { + + var container = this.getContainerDimensions(); + var halfWidth = container.size[ 0 ] / 2; + var halfHeight = container.size[ 1 ] / 2; + + this.moveState.yawLeft = - ( ( event.pageX - container.offset[ 0 ] ) - halfWidth ) / halfWidth; + this.moveState.pitchDown = ( ( event.pageY - container.offset[ 1 ] ) - halfHeight ) / halfHeight; + + this.updateRotationVector(); + + } + + }; + + this.mouseup = function ( event ) { + + event.preventDefault(); + event.stopPropagation(); + + if ( this.dragToLook ) { + + this.mouseStatus --; + + this.moveState.yawLeft = this.moveState.pitchDown = 0; + + } else { + + switch ( event.button ) { + + case 0: this.moveState.forward = 0; break; + case 2: this.moveState.back = 0; break; + + } + + this.updateMovementVector(); + + } + + this.updateRotationVector(); + + }; + + this.update = function () { + + var lastQuaternion = new Quaternion(); + var lastPosition = new Vector3(); + + return function ( delta ) { + + var moveMult = delta * scope.movementSpeed; + var rotMult = delta * scope.rollSpeed; + + scope.object.translateX( scope.moveVector.x * moveMult ); + scope.object.translateY( scope.moveVector.y * moveMult ); + scope.object.translateZ( scope.moveVector.z * moveMult ); + + scope.tmpQuaternion.set( scope.rotationVector.x * rotMult, scope.rotationVector.y * rotMult, scope.rotationVector.z * rotMult, 1 ).normalize(); + scope.object.quaternion.multiply( scope.tmpQuaternion ); + + if ( + lastPosition.distanceToSquared( scope.object.position ) > EPS || + 8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS + ) { + + scope.dispatchEvent( changeEvent ); + lastQuaternion.copy( scope.object.quaternion ); + lastPosition.copy( scope.object.position ); + + } + + }; + + }(); + + this.updateMovementVector = function () { + + var forward = ( this.moveState.forward || ( this.autoForward && ! this.moveState.back ) ) ? 1 : 0; + + this.moveVector.x = ( - this.moveState.left + this.moveState.right ); + this.moveVector.y = ( - this.moveState.down + this.moveState.up ); + this.moveVector.z = ( - forward + this.moveState.back ); + + //console.log( 'move:', [ this.moveVector.x, this.moveVector.y, this.moveVector.z ] ); + + }; + + this.updateRotationVector = function () { + + this.rotationVector.x = ( - this.moveState.pitchDown + this.moveState.pitchUp ); + this.rotationVector.y = ( - this.moveState.yawRight + this.moveState.yawLeft ); + this.rotationVector.z = ( - this.moveState.rollRight + this.moveState.rollLeft ); + + //console.log( 'rotate:', [ this.rotationVector.x, this.rotationVector.y, this.rotationVector.z ] ); + + }; + + this.getContainerDimensions = function () { + + if ( this.domElement != document ) { + + return { + size: [ this.domElement.offsetWidth, this.domElement.offsetHeight ], + offset: [ this.domElement.offsetLeft, this.domElement.offsetTop ] + }; + + } else { + + return { + size: [ window.innerWidth, window.innerHeight ], + offset: [ 0, 0 ] + }; + + } + + }; + + function bind( scope, fn ) { + + return function () { + + fn.apply( scope, arguments ); + + }; + + } + + function contextmenu( event ) { + + event.preventDefault(); + + } + + this.dispose = function () { + + this.domElement.removeEventListener( 'contextmenu', contextmenu, false ); + this.domElement.removeEventListener( 'mousedown', _mousedown, false ); + this.domElement.removeEventListener( 'mousemove', _mousemove, false ); + this.domElement.removeEventListener( 'mouseup', _mouseup, false ); + + window.removeEventListener( 'keydown', _keydown, false ); + window.removeEventListener( 'keyup', _keyup, false ); + + }; + + var _mousemove = bind( this, this.mousemove ); + var _mousedown = bind( this, this.mousedown ); + var _mouseup = bind( this, this.mouseup ); + var _keydown = bind( this, this.keydown ); + var _keyup = bind( this, this.keyup ); + + this.domElement.addEventListener( 'contextmenu', contextmenu, false ); + + this.domElement.addEventListener( 'mousemove', _mousemove, false ); + this.domElement.addEventListener( 'mousedown', _mousedown, false ); + this.domElement.addEventListener( 'mouseup', _mouseup, false ); + + window.addEventListener( 'keydown', _keydown, false ); + window.addEventListener( 'keyup', _keyup, false ); + + this.updateMovementVector(); + this.updateRotationVector(); + + }; + + FlyControls.prototype = Object.create( EventDispatcher.prototype ); + FlyControls.prototype.constructor = FlyControls; + + /** + * Full-screen textured quad shader + */ + + var CopyShader = { + + uniforms: { + + "tDiffuse": { value: null }, + "opacity": { value: 1.0 } + + }, + + vertexShader: [ + + "varying vec2 vUv;", + + "void main() {", + + " vUv = uv;", + " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", + + "}" + + ].join( "\n" ), + + fragmentShader: [ + + "uniform float opacity;", + + "uniform sampler2D tDiffuse;", + + "varying vec2 vUv;", + + "void main() {", + + " vec4 texel = texture2D( tDiffuse, vUv );", + " gl_FragColor = opacity * texel;", + + "}" + + ].join( "\n" ) + + }; + + function Pass$1() { + + // if set to true, the pass is processed by the composer + this.enabled = true; + + // if set to true, the pass indicates to swap read and write buffer after rendering + this.needsSwap = true; + + // if set to true, the pass clears its buffer before rendering + this.clear = false; + + // if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer. + this.renderToScreen = false; + + } + + Object.assign( Pass$1.prototype, { + + setSize: function ( /* width, height */ ) {}, + + render: function ( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) { + + console.error( 'THREE.Pass: .render() must be implemented in derived pass.' ); + + } + + } ); + + // Helper for passes that need to fill the viewport with a single quad. + + // Important: It's actually a hack to put FullScreenQuad into the Pass namespace. This is only + // done to make examples/js code work. Normally, FullScreenQuad should be exported + // from this module like Pass. + + Pass$1.FullScreenQuad = ( function () { + + var camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 ); + var geometry = new PlaneBufferGeometry( 2, 2 ); + + var FullScreenQuad = function ( material ) { + + this._mesh = new Mesh( geometry, material ); + + }; + + Object.defineProperty( FullScreenQuad.prototype, 'material', { + + get: function () { + + return this._mesh.material; + + }, + + set: function ( value ) { + + this._mesh.material = value; + + } + + } ); + + Object.assign( FullScreenQuad.prototype, { + + dispose: function () { + + this._mesh.geometry.dispose(); + + }, + + render: function ( renderer ) { + + renderer.render( this._mesh, camera ); + + } + + } ); + + return FullScreenQuad; + + } )(); + + var ShaderPass = function ( shader, textureID ) { + + Pass$1.call( this ); + + this.textureID = ( textureID !== undefined ) ? textureID : "tDiffuse"; + + if ( shader instanceof ShaderMaterial ) { + + this.uniforms = shader.uniforms; + + this.material = shader; + + } else if ( shader ) { + + this.uniforms = UniformsUtils.clone( shader.uniforms ); + + this.material = new ShaderMaterial( { + + defines: Object.assign( {}, shader.defines ), + uniforms: this.uniforms, + vertexShader: shader.vertexShader, + fragmentShader: shader.fragmentShader + + } ); + + } + + this.fsQuad = new Pass$1.FullScreenQuad( this.material ); + + }; + + ShaderPass.prototype = Object.assign( Object.create( Pass$1.prototype ), { + + constructor: ShaderPass, + + render: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) { + + if ( this.uniforms[ this.textureID ] ) { + + this.uniforms[ this.textureID ].value = readBuffer.texture; + + } + + this.fsQuad.material = this.material; + + if ( this.renderToScreen ) { + + renderer.setRenderTarget( null ); + this.fsQuad.render( renderer ); + + } else { + + renderer.setRenderTarget( writeBuffer ); + // TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600 + if ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil ); + this.fsQuad.render( renderer ); + + } + + } + + } ); + + var MaskPass = function ( scene, camera ) { + + Pass$1.call( this ); + + this.scene = scene; + this.camera = camera; + + this.clear = true; + this.needsSwap = false; + + this.inverse = false; + + }; + + MaskPass.prototype = Object.assign( Object.create( Pass$1.prototype ), { + + constructor: MaskPass, + + render: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) { + + var context = renderer.getContext(); + var state = renderer.state; + + // don't update color or depth + + state.buffers.color.setMask( false ); + state.buffers.depth.setMask( false ); + + // lock buffers + + state.buffers.color.setLocked( true ); + state.buffers.depth.setLocked( true ); + + // set up stencil + + var writeValue, clearValue; + + if ( this.inverse ) { + + writeValue = 0; + clearValue = 1; + + } else { + + writeValue = 1; + clearValue = 0; + + } + + state.buffers.stencil.setTest( true ); + state.buffers.stencil.setOp( context.REPLACE, context.REPLACE, context.REPLACE ); + state.buffers.stencil.setFunc( context.ALWAYS, writeValue, 0xffffffff ); + state.buffers.stencil.setClear( clearValue ); + state.buffers.stencil.setLocked( true ); + + // draw into the stencil buffer + + renderer.setRenderTarget( readBuffer ); + if ( this.clear ) renderer.clear(); + renderer.render( this.scene, this.camera ); + + renderer.setRenderTarget( writeBuffer ); + if ( this.clear ) renderer.clear(); + renderer.render( this.scene, this.camera ); + + // unlock color and depth buffer for subsequent rendering + + state.buffers.color.setLocked( false ); + state.buffers.depth.setLocked( false ); + + // only render where stencil is set to 1 + + state.buffers.stencil.setLocked( false ); + state.buffers.stencil.setFunc( context.EQUAL, 1, 0xffffffff ); // draw if == 1 + state.buffers.stencil.setOp( context.KEEP, context.KEEP, context.KEEP ); + state.buffers.stencil.setLocked( true ); + + } + + } ); + + + var ClearMaskPass = function () { + + Pass$1.call( this ); + + this.needsSwap = false; + + }; + + ClearMaskPass.prototype = Object.create( Pass$1.prototype ); + + Object.assign( ClearMaskPass.prototype, { + + render: function ( renderer /*, writeBuffer, readBuffer, deltaTime, maskActive */ ) { + + renderer.state.buffers.stencil.setLocked( false ); + renderer.state.buffers.stencil.setTest( false ); + + } + + } ); + + var EffectComposer = function ( renderer, renderTarget ) { + + this.renderer = renderer; + + if ( renderTarget === undefined ) { + + var parameters = { + minFilter: LinearFilter, + magFilter: LinearFilter, + format: RGBAFormat + }; + + var size = renderer.getSize( new Vector2() ); + this._pixelRatio = renderer.getPixelRatio(); + this._width = size.width; + this._height = size.height; + + renderTarget = new WebGLRenderTarget( this._width * this._pixelRatio, this._height * this._pixelRatio, parameters ); + renderTarget.texture.name = 'EffectComposer.rt1'; + + } else { + + this._pixelRatio = 1; + this._width = renderTarget.width; + this._height = renderTarget.height; + + } + + this.renderTarget1 = renderTarget; + this.renderTarget2 = renderTarget.clone(); + this.renderTarget2.texture.name = 'EffectComposer.rt2'; + + this.writeBuffer = this.renderTarget1; + this.readBuffer = this.renderTarget2; + + this.renderToScreen = true; + + this.passes = []; + + // dependencies + + if ( CopyShader === undefined ) { + + console.error( 'THREE.EffectComposer relies on CopyShader' ); + + } + + if ( ShaderPass === undefined ) { + + console.error( 'THREE.EffectComposer relies on ShaderPass' ); + + } + + this.copyPass = new ShaderPass( CopyShader ); + + this.clock = new Clock(); + + }; + + Object.assign( EffectComposer.prototype, { + + swapBuffers: function () { + + var tmp = this.readBuffer; + this.readBuffer = this.writeBuffer; + this.writeBuffer = tmp; + + }, + + addPass: function ( pass ) { + + this.passes.push( pass ); + pass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio ); + + }, + + insertPass: function ( pass, index ) { + + this.passes.splice( index, 0, pass ); + pass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio ); + + }, + + removePass: function ( pass ) { + + const index = this.passes.indexOf( pass ); + + if ( index !== - 1 ) { + + this.passes.splice( index, 1 ); + + } + + }, + + isLastEnabledPass: function ( passIndex ) { + + for ( var i = passIndex + 1; i < this.passes.length; i ++ ) { + + if ( this.passes[ i ].enabled ) { + + return false; + + } + + } + + return true; + + }, + + render: function ( deltaTime ) { + + // deltaTime value is in seconds + + if ( deltaTime === undefined ) { + + deltaTime = this.clock.getDelta(); + + } + + var currentRenderTarget = this.renderer.getRenderTarget(); + + var maskActive = false; + + var pass, i, il = this.passes.length; + + for ( i = 0; i < il; i ++ ) { + + pass = this.passes[ i ]; + + if ( pass.enabled === false ) continue; + + pass.renderToScreen = ( this.renderToScreen && this.isLastEnabledPass( i ) ); + pass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive ); + + if ( pass.needsSwap ) { + + if ( maskActive ) { + + var context = this.renderer.getContext(); + var stencil = this.renderer.state.buffers.stencil; + + //context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff ); + stencil.setFunc( context.NOTEQUAL, 1, 0xffffffff ); + + this.copyPass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime ); + + //context.stencilFunc( context.EQUAL, 1, 0xffffffff ); + stencil.setFunc( context.EQUAL, 1, 0xffffffff ); + + } + + this.swapBuffers(); + + } + + if ( MaskPass !== undefined ) { + + if ( pass instanceof MaskPass ) { + + maskActive = true; + + } else if ( pass instanceof ClearMaskPass ) { + + maskActive = false; + + } + + } + + } + + this.renderer.setRenderTarget( currentRenderTarget ); + + }, + + reset: function ( renderTarget ) { + + if ( renderTarget === undefined ) { + + var size = this.renderer.getSize( new Vector2() ); + this._pixelRatio = this.renderer.getPixelRatio(); + this._width = size.width; + this._height = size.height; + + renderTarget = this.renderTarget1.clone(); + renderTarget.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio ); + + } + + this.renderTarget1.dispose(); + this.renderTarget2.dispose(); + this.renderTarget1 = renderTarget; + this.renderTarget2 = renderTarget.clone(); + + this.writeBuffer = this.renderTarget1; + this.readBuffer = this.renderTarget2; + + }, + + setSize: function ( width, height ) { + + this._width = width; + this._height = height; + + var effectiveWidth = this._width * this._pixelRatio; + var effectiveHeight = this._height * this._pixelRatio; + + this.renderTarget1.setSize( effectiveWidth, effectiveHeight ); + this.renderTarget2.setSize( effectiveWidth, effectiveHeight ); + + for ( var i = 0; i < this.passes.length; i ++ ) { + + this.passes[ i ].setSize( effectiveWidth, effectiveHeight ); + + } + + }, + + setPixelRatio: function ( pixelRatio ) { + + this._pixelRatio = pixelRatio; + + this.setSize( this._width, this._height ); + + } + + } ); + + + var Pass = function () { + + // if set to true, the pass is processed by the composer + this.enabled = true; + + // if set to true, the pass indicates to swap read and write buffer after rendering + this.needsSwap = true; + + // if set to true, the pass clears its buffer before rendering + this.clear = false; + + // if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer. + this.renderToScreen = false; + + }; + + Object.assign( Pass.prototype, { + + setSize: function ( /* width, height */ ) {}, + + render: function ( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) { + + console.error( 'THREE.Pass: .render() must be implemented in derived pass.' ); + + } + + } ); + + // Helper for passes that need to fill the viewport with a single quad. + Pass.FullScreenQuad = ( function () { + + var camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 ); + var geometry = new PlaneBufferGeometry( 2, 2 ); + + var FullScreenQuad = function ( material ) { + + this._mesh = new Mesh( geometry, material ); + + }; + + Object.defineProperty( FullScreenQuad.prototype, 'material', { + + get: function () { + + return this._mesh.material; + + }, + + set: function ( value ) { + + this._mesh.material = value; + + } + + } ); + + Object.assign( FullScreenQuad.prototype, { + + dispose: function () { + + this._mesh.geometry.dispose(); + + }, + + render: function ( renderer ) { + + renderer.render( this._mesh, camera ); + + } + + } ); + + return FullScreenQuad; + + } )(); + + var RenderPass = function ( scene, camera, overrideMaterial, clearColor, clearAlpha ) { + + Pass$1.call( this ); + + this.scene = scene; + this.camera = camera; + + this.overrideMaterial = overrideMaterial; + + this.clearColor = clearColor; + this.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0; + + this.clear = true; + this.clearDepth = false; + this.needsSwap = false; + + }; + + RenderPass.prototype = Object.assign( Object.create( Pass$1.prototype ), { + + constructor: RenderPass, + + render: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) { + + var oldAutoClear = renderer.autoClear; + renderer.autoClear = false; + + var oldClearColor, oldClearAlpha, oldOverrideMaterial; + + if ( this.overrideMaterial !== undefined ) { + + oldOverrideMaterial = this.scene.overrideMaterial; + + this.scene.overrideMaterial = this.overrideMaterial; + + } + + if ( this.clearColor ) { + + oldClearColor = renderer.getClearColor().getHex(); + oldClearAlpha = renderer.getClearAlpha(); + + renderer.setClearColor( this.clearColor, this.clearAlpha ); + + } + + if ( this.clearDepth ) { + + renderer.clearDepth(); + + } + + renderer.setRenderTarget( this.renderToScreen ? null : readBuffer ); + + // TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600 + if ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil ); + renderer.render( this.scene, this.camera ); + + if ( this.clearColor ) { + + renderer.setClearColor( oldClearColor, oldClearAlpha ); + + } + + if ( this.overrideMaterial !== undefined ) { + + this.scene.overrideMaterial = oldOverrideMaterial; + + } + + renderer.autoClear = oldAutoClear; + + } + + } ); + + function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); + } + + function _assertThisInitialized(self) { + if (self === void 0) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return self; + } + + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf(o, p); + } + + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); + } + + function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf(o); + } + + function _isNativeFunction(fn) { + return Function.toString.call(fn).indexOf("[native code]") !== -1; + } + + function _isNativeReflectConstruct() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + + try { + Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); + return true; + } catch (e) { + return false; + } + } + + function _construct(Parent, args, Class) { + if (_isNativeReflectConstruct()) { + _construct = Reflect.construct; + } else { + _construct = function _construct(Parent, args, Class) { + var a = [null]; + a.push.apply(a, args); + var Constructor = Function.bind.apply(Parent, a); + var instance = new Constructor(); + if (Class) _setPrototypeOf(instance, Class.prototype); + return instance; + }; + } + + return _construct.apply(null, arguments); + } + + function _wrapNativeSuper(Class) { + var _cache = typeof Map === "function" ? new Map() : undefined; + + _wrapNativeSuper = function _wrapNativeSuper(Class) { + if (Class === null || !_isNativeFunction(Class)) return Class; + + if (typeof Class !== "function") { + throw new TypeError("Super expression must either be null or a function"); + } + + if (typeof _cache !== "undefined") { + if (_cache.has(Class)) return _cache.get(Class); + + _cache.set(Class, Wrapper); + } + + function Wrapper() { + return _construct(Class, arguments, _getPrototypeOf(this).constructor); + } + + Wrapper.prototype = Object.create(Class.prototype, { + constructor: { + value: Wrapper, + enumerable: false, + writable: true, + configurable: true + } + }); + return _setPrototypeOf(Wrapper, Class); + }; + + return _wrapNativeSuper(Class); + } + + // based on https://github.com/styled-components/styled-components/blob/fcf6f3804c57a14dd7984dfab7bc06ee2edca044/src/utils/error.js + + /** + * Parse errors.md and turn it into a simple hash of code: message + * @private + */ + var ERRORS = { + "1": "Passed invalid arguments to hsl, please pass multiple numbers e.g. hsl(360, 0.75, 0.4) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75 }).\n\n", + "2": "Passed invalid arguments to hsla, please pass multiple numbers e.g. hsla(360, 0.75, 0.4, 0.7) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75, alpha: 0.7 }).\n\n", + "3": "Passed an incorrect argument to a color function, please pass a string representation of a color.\n\n", + "4": "Couldn't generate valid rgb string from %s, it returned %s.\n\n", + "5": "Couldn't parse the color string. Please provide the color as a string in hex, rgb, rgba, hsl or hsla notation.\n\n", + "6": "Passed invalid arguments to rgb, please pass multiple numbers e.g. rgb(255, 205, 100) or an object e.g. rgb({ red: 255, green: 205, blue: 100 }).\n\n", + "7": "Passed invalid arguments to rgba, please pass multiple numbers e.g. rgb(255, 205, 100, 0.75) or an object e.g. rgb({ red: 255, green: 205, blue: 100, alpha: 0.75 }).\n\n", + "8": "Passed invalid argument to toColorString, please pass a RgbColor, RgbaColor, HslColor or HslaColor object.\n\n", + "9": "Please provide a number of steps to the modularScale helper.\n\n", + "10": "Please pass a number or one of the predefined scales to the modularScale helper as the ratio.\n\n", + "11": "Invalid value passed as base to modularScale, expected number or em string but got \"%s\"\n\n", + "12": "Expected a string ending in \"px\" or a number passed as the first argument to %s(), got \"%s\" instead.\n\n", + "13": "Expected a string ending in \"px\" or a number passed as the second argument to %s(), got \"%s\" instead.\n\n", + "14": "Passed invalid pixel value (\"%s\") to %s(), please pass a value like \"12px\" or 12.\n\n", + "15": "Passed invalid base value (\"%s\") to %s(), please pass a value like \"12px\" or 12.\n\n", + "16": "You must provide a template to this method.\n\n", + "17": "You passed an unsupported selector state to this method.\n\n", + "18": "minScreen and maxScreen must be provided as stringified numbers with the same units.\n\n", + "19": "fromSize and toSize must be provided as stringified numbers with the same units.\n\n", + "20": "expects either an array of objects or a single object with the properties prop, fromSize, and toSize.\n\n", + "21": "expects the objects in the first argument array to have the properties `prop`, `fromSize`, and `toSize`.\n\n", + "22": "expects the first argument object to have the properties `prop`, `fromSize`, and `toSize`.\n\n", + "23": "fontFace expects a name of a font-family.\n\n", + "24": "fontFace expects either the path to the font file(s) or a name of a local copy.\n\n", + "25": "fontFace expects localFonts to be an array.\n\n", + "26": "fontFace expects fileFormats to be an array.\n\n", + "27": "radialGradient requries at least 2 color-stops to properly render.\n\n", + "28": "Please supply a filename to retinaImage() as the first argument.\n\n", + "29": "Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.\n\n", + "30": "Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\n\n", + "31": "The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation\n\n", + "32": "To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])\nTo pass a single animation please supply them in simple values, e.g. animation('rotate', '2s')\n\n", + "33": "The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation\n\n", + "34": "borderRadius expects a radius value as a string or number as the second argument.\n\n", + "35": "borderRadius expects one of \"top\", \"bottom\", \"left\" or \"right\" as the first argument.\n\n", + "36": "Property must be a string value.\n\n", + "37": "Syntax Error at %s.\n\n", + "38": "Formula contains a function that needs parentheses at %s.\n\n", + "39": "Formula is missing closing parenthesis at %s.\n\n", + "40": "Formula has too many closing parentheses at %s.\n\n", + "41": "All values in a formula must have the same unit or be unitless.\n\n", + "42": "Please provide a number of steps to the modularScale helper.\n\n", + "43": "Please pass a number or one of the predefined scales to the modularScale helper as the ratio.\n\n", + "44": "Invalid value passed as base to modularScale, expected number or em/rem string but got %s.\n\n", + "45": "Passed invalid argument to hslToColorString, please pass a HslColor or HslaColor object.\n\n", + "46": "Passed invalid argument to rgbToColorString, please pass a RgbColor or RgbaColor object.\n\n", + "47": "minScreen and maxScreen must be provided as stringified numbers with the same units.\n\n", + "48": "fromSize and toSize must be provided as stringified numbers with the same units.\n\n", + "49": "Expects either an array of objects or a single object with the properties prop, fromSize, and toSize.\n\n", + "50": "Expects the objects in the first argument array to have the properties prop, fromSize, and toSize.\n\n", + "51": "Expects the first argument object to have the properties prop, fromSize, and toSize.\n\n", + "52": "fontFace expects either the path to the font file(s) or a name of a local copy.\n\n", + "53": "fontFace expects localFonts to be an array.\n\n", + "54": "fontFace expects fileFormats to be an array.\n\n", + "55": "fontFace expects a name of a font-family.\n\n", + "56": "linearGradient requries at least 2 color-stops to properly render.\n\n", + "57": "radialGradient requries at least 2 color-stops to properly render.\n\n", + "58": "Please supply a filename to retinaImage() as the first argument.\n\n", + "59": "Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.\n\n", + "60": "Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\n\n", + "61": "Property must be a string value.\n\n", + "62": "borderRadius expects a radius value as a string or number as the second argument.\n\n", + "63": "borderRadius expects one of \"top\", \"bottom\", \"left\" or \"right\" as the first argument.\n\n", + "64": "The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation.\n\n", + "65": "To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])\\nTo pass a single animation please supply them in simple values, e.g. animation('rotate', '2s').\n\n", + "66": "The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation.\n\n", + "67": "You must provide a template to this method.\n\n", + "68": "You passed an unsupported selector state to this method.\n\n", + "69": "Expected a string ending in \"px\" or a number passed as the first argument to %s(), got %s instead.\n\n", + "70": "Expected a string ending in \"px\" or a number passed as the second argument to %s(), got %s instead.\n\n", + "71": "Passed invalid pixel value %s to %s(), please pass a value like \"12px\" or 12.\n\n", + "72": "Passed invalid base value %s to %s(), please pass a value like \"12px\" or 12.\n\n", + "73": "Please provide a valid CSS variable.\n\n", + "74": "CSS variable not found and no default was provided.\n\n", + "75": "important requires a valid style object, got a %s instead.\n\n", + "76": "fromSize and toSize must be provided as stringified numbers with the same units as minScreen and maxScreen.\n\n", + "77": "remToPx expects a value in \"rem\" but you provided it in \"%s\".\n\n", + "78": "base must be set in \"px\" or \"%\" but you set it in \"%s\".\n" + }; + /** + * super basic version of sprintf + * @private + */ + + function format() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var a = args[0]; + var b = []; + var c; + + for (c = 1; c < args.length; c += 1) { + b.push(args[c]); + } + + b.forEach(function (d) { + a = a.replace(/%[a-z]/, d); + }); + return a; + } + /** + * Create an error file out of errors.md for development and a simple web link to the full errors + * in production mode. + * @private + */ + + + var PolishedError = /*#__PURE__*/function (_Error) { + _inheritsLoose(PolishedError, _Error); + + function PolishedError(code) { + var _this; + + if (process.env.NODE_ENV === 'production') { + _this = _Error.call(this, "An error occurred. See https://github.com/styled-components/polished/blob/main/src/internalHelpers/errors.md#" + code + " for more information.") || this; + } else { + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + _this = _Error.call(this, format.apply(void 0, [ERRORS[code]].concat(args))) || this; + } + + return _assertThisInitialized(_this); + } + + return PolishedError; + }( /*#__PURE__*/_wrapNativeSuper(Error)); + + function colorToInt(color) { + return Math.round(color * 255); + } + + function convertToInt(red, green, blue) { + return colorToInt(red) + "," + colorToInt(green) + "," + colorToInt(blue); + } + + function hslToRgb(hue, saturation, lightness, convert) { + if (convert === void 0) { + convert = convertToInt; + } + + if (saturation === 0) { + // achromatic + return convert(lightness, lightness, lightness); + } // formulae from https://en.wikipedia.org/wiki/HSL_and_HSV + + + var huePrime = (hue % 360 + 360) % 360 / 60; + var chroma = (1 - Math.abs(2 * lightness - 1)) * saturation; + var secondComponent = chroma * (1 - Math.abs(huePrime % 2 - 1)); + var red = 0; + var green = 0; + var blue = 0; + + if (huePrime >= 0 && huePrime < 1) { + red = chroma; + green = secondComponent; + } else if (huePrime >= 1 && huePrime < 2) { + red = secondComponent; + green = chroma; + } else if (huePrime >= 2 && huePrime < 3) { + green = chroma; + blue = secondComponent; + } else if (huePrime >= 3 && huePrime < 4) { + green = secondComponent; + blue = chroma; + } else if (huePrime >= 4 && huePrime < 5) { + red = secondComponent; + blue = chroma; + } else if (huePrime >= 5 && huePrime < 6) { + red = chroma; + blue = secondComponent; + } + + var lightnessModification = lightness - chroma / 2; + var finalRed = red + lightnessModification; + var finalGreen = green + lightnessModification; + var finalBlue = blue + lightnessModification; + return convert(finalRed, finalGreen, finalBlue); + } + + var namedColorMap = { + aliceblue: 'f0f8ff', + antiquewhite: 'faebd7', + aqua: '00ffff', + aquamarine: '7fffd4', + azure: 'f0ffff', + beige: 'f5f5dc', + bisque: 'ffe4c4', + black: '000', + blanchedalmond: 'ffebcd', + blue: '0000ff', + blueviolet: '8a2be2', + brown: 'a52a2a', + burlywood: 'deb887', + cadetblue: '5f9ea0', + chartreuse: '7fff00', + chocolate: 'd2691e', + coral: 'ff7f50', + cornflowerblue: '6495ed', + cornsilk: 'fff8dc', + crimson: 'dc143c', + cyan: '00ffff', + darkblue: '00008b', + darkcyan: '008b8b', + darkgoldenrod: 'b8860b', + darkgray: 'a9a9a9', + darkgreen: '006400', + darkgrey: 'a9a9a9', + darkkhaki: 'bdb76b', + darkmagenta: '8b008b', + darkolivegreen: '556b2f', + darkorange: 'ff8c00', + darkorchid: '9932cc', + darkred: '8b0000', + darksalmon: 'e9967a', + darkseagreen: '8fbc8f', + darkslateblue: '483d8b', + darkslategray: '2f4f4f', + darkslategrey: '2f4f4f', + darkturquoise: '00ced1', + darkviolet: '9400d3', + deeppink: 'ff1493', + deepskyblue: '00bfff', + dimgray: '696969', + dimgrey: '696969', + dodgerblue: '1e90ff', + firebrick: 'b22222', + floralwhite: 'fffaf0', + forestgreen: '228b22', + fuchsia: 'ff00ff', + gainsboro: 'dcdcdc', + ghostwhite: 'f8f8ff', + gold: 'ffd700', + goldenrod: 'daa520', + gray: '808080', + green: '008000', + greenyellow: 'adff2f', + grey: '808080', + honeydew: 'f0fff0', + hotpink: 'ff69b4', + indianred: 'cd5c5c', + indigo: '4b0082', + ivory: 'fffff0', + khaki: 'f0e68c', + lavender: 'e6e6fa', + lavenderblush: 'fff0f5', + lawngreen: '7cfc00', + lemonchiffon: 'fffacd', + lightblue: 'add8e6', + lightcoral: 'f08080', + lightcyan: 'e0ffff', + lightgoldenrodyellow: 'fafad2', + lightgray: 'd3d3d3', + lightgreen: '90ee90', + lightgrey: 'd3d3d3', + lightpink: 'ffb6c1', + lightsalmon: 'ffa07a', + lightseagreen: '20b2aa', + lightskyblue: '87cefa', + lightslategray: '789', + lightslategrey: '789', + lightsteelblue: 'b0c4de', + lightyellow: 'ffffe0', + lime: '0f0', + limegreen: '32cd32', + linen: 'faf0e6', + magenta: 'f0f', + maroon: '800000', + mediumaquamarine: '66cdaa', + mediumblue: '0000cd', + mediumorchid: 'ba55d3', + mediumpurple: '9370db', + mediumseagreen: '3cb371', + mediumslateblue: '7b68ee', + mediumspringgreen: '00fa9a', + mediumturquoise: '48d1cc', + mediumvioletred: 'c71585', + midnightblue: '191970', + mintcream: 'f5fffa', + mistyrose: 'ffe4e1', + moccasin: 'ffe4b5', + navajowhite: 'ffdead', + navy: '000080', + oldlace: 'fdf5e6', + olive: '808000', + olivedrab: '6b8e23', + orange: 'ffa500', + orangered: 'ff4500', + orchid: 'da70d6', + palegoldenrod: 'eee8aa', + palegreen: '98fb98', + paleturquoise: 'afeeee', + palevioletred: 'db7093', + papayawhip: 'ffefd5', + peachpuff: 'ffdab9', + peru: 'cd853f', + pink: 'ffc0cb', + plum: 'dda0dd', + powderblue: 'b0e0e6', + purple: '800080', + rebeccapurple: '639', + red: 'f00', + rosybrown: 'bc8f8f', + royalblue: '4169e1', + saddlebrown: '8b4513', + salmon: 'fa8072', + sandybrown: 'f4a460', + seagreen: '2e8b57', + seashell: 'fff5ee', + sienna: 'a0522d', + silver: 'c0c0c0', + skyblue: '87ceeb', + slateblue: '6a5acd', + slategray: '708090', + slategrey: '708090', + snow: 'fffafa', + springgreen: '00ff7f', + steelblue: '4682b4', + tan: 'd2b48c', + teal: '008080', + thistle: 'd8bfd8', + tomato: 'ff6347', + turquoise: '40e0d0', + violet: 'ee82ee', + wheat: 'f5deb3', + white: 'fff', + whitesmoke: 'f5f5f5', + yellow: 'ff0', + yellowgreen: '9acd32' + }; + /** + * Checks if a string is a CSS named color and returns its equivalent hex value, otherwise returns the original color. + * @private + */ + + function nameToHex(color) { + if (typeof color !== 'string') return color; + var normalizedColorName = color.toLowerCase(); + return namedColorMap[normalizedColorName] ? "#" + namedColorMap[normalizedColorName] : color; + } + + var hexRegex = /^#[a-fA-F0-9]{6}$/; + var hexRgbaRegex = /^#[a-fA-F0-9]{8}$/; + var reducedHexRegex = /^#[a-fA-F0-9]{3}$/; + var reducedRgbaHexRegex = /^#[a-fA-F0-9]{4}$/; + var rgbRegex = /^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/i; + var rgbaRegex = /^rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*([-+]?[0-9]*[.]?[0-9]+)\s*\)$/i; + var hslRegex = /^hsl\(\s*(\d{0,3}[.]?[0-9]+)\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*\)$/i; + var hslaRegex = /^hsla\(\s*(\d{0,3}[.]?[0-9]+)\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*,\s*([-+]?[0-9]*[.]?[0-9]+)\s*\)$/i; + /** + * Returns an RgbColor or RgbaColor object. This utility function is only useful + * if want to extract a color component. With the color util `toColorString` you + * can convert a RgbColor or RgbaColor object back to a string. + * + * @example + * // Assigns `{ red: 255, green: 0, blue: 0 }` to color1 + * const color1 = parseToRgb('rgb(255, 0, 0)'); + * // Assigns `{ red: 92, green: 102, blue: 112, alpha: 0.75 }` to color2 + * const color2 = parseToRgb('hsla(210, 10%, 40%, 0.75)'); + */ + + function parseToRgb(color) { + if (typeof color !== 'string') { + throw new PolishedError(3); + } + + var normalizedColor = nameToHex(color); + + if (normalizedColor.match(hexRegex)) { + return { + red: parseInt("" + normalizedColor[1] + normalizedColor[2], 16), + green: parseInt("" + normalizedColor[3] + normalizedColor[4], 16), + blue: parseInt("" + normalizedColor[5] + normalizedColor[6], 16) + }; + } + + if (normalizedColor.match(hexRgbaRegex)) { + var alpha = parseFloat((parseInt("" + normalizedColor[7] + normalizedColor[8], 16) / 255).toFixed(2)); + return { + red: parseInt("" + normalizedColor[1] + normalizedColor[2], 16), + green: parseInt("" + normalizedColor[3] + normalizedColor[4], 16), + blue: parseInt("" + normalizedColor[5] + normalizedColor[6], 16), + alpha: alpha + }; + } + + if (normalizedColor.match(reducedHexRegex)) { + return { + red: parseInt("" + normalizedColor[1] + normalizedColor[1], 16), + green: parseInt("" + normalizedColor[2] + normalizedColor[2], 16), + blue: parseInt("" + normalizedColor[3] + normalizedColor[3], 16) + }; + } + + if (normalizedColor.match(reducedRgbaHexRegex)) { + var _alpha = parseFloat((parseInt("" + normalizedColor[4] + normalizedColor[4], 16) / 255).toFixed(2)); + + return { + red: parseInt("" + normalizedColor[1] + normalizedColor[1], 16), + green: parseInt("" + normalizedColor[2] + normalizedColor[2], 16), + blue: parseInt("" + normalizedColor[3] + normalizedColor[3], 16), + alpha: _alpha + }; + } + + var rgbMatched = rgbRegex.exec(normalizedColor); + + if (rgbMatched) { + return { + red: parseInt("" + rgbMatched[1], 10), + green: parseInt("" + rgbMatched[2], 10), + blue: parseInt("" + rgbMatched[3], 10) + }; + } + + var rgbaMatched = rgbaRegex.exec(normalizedColor.substring(0, 50)); + + if (rgbaMatched) { + return { + red: parseInt("" + rgbaMatched[1], 10), + green: parseInt("" + rgbaMatched[2], 10), + blue: parseInt("" + rgbaMatched[3], 10), + alpha: parseFloat("" + rgbaMatched[4]) + }; + } + + var hslMatched = hslRegex.exec(normalizedColor); + + if (hslMatched) { + var hue = parseInt("" + hslMatched[1], 10); + var saturation = parseInt("" + hslMatched[2], 10) / 100; + var lightness = parseInt("" + hslMatched[3], 10) / 100; + var rgbColorString = "rgb(" + hslToRgb(hue, saturation, lightness) + ")"; + var hslRgbMatched = rgbRegex.exec(rgbColorString); + + if (!hslRgbMatched) { + throw new PolishedError(4, normalizedColor, rgbColorString); + } + + return { + red: parseInt("" + hslRgbMatched[1], 10), + green: parseInt("" + hslRgbMatched[2], 10), + blue: parseInt("" + hslRgbMatched[3], 10) + }; + } + + var hslaMatched = hslaRegex.exec(normalizedColor.substring(0, 50)); + + if (hslaMatched) { + var _hue = parseInt("" + hslaMatched[1], 10); + + var _saturation = parseInt("" + hslaMatched[2], 10) / 100; + + var _lightness = parseInt("" + hslaMatched[3], 10) / 100; + + var _rgbColorString = "rgb(" + hslToRgb(_hue, _saturation, _lightness) + ")"; + + var _hslRgbMatched = rgbRegex.exec(_rgbColorString); + + if (!_hslRgbMatched) { + throw new PolishedError(4, normalizedColor, _rgbColorString); + } + + return { + red: parseInt("" + _hslRgbMatched[1], 10), + green: parseInt("" + _hslRgbMatched[2], 10), + blue: parseInt("" + _hslRgbMatched[3], 10), + alpha: parseFloat("" + hslaMatched[4]) + }; + } + + throw new PolishedError(5); + } + + /** + * Reduces hex values if possible e.g. #ff8866 to #f86 + * @private + */ + var reduceHexValue = function reduceHexValue(value) { + if (value.length === 7 && value[1] === value[2] && value[3] === value[4] && value[5] === value[6]) { + return "#" + value[1] + value[3] + value[5]; + } + + return value; + }; + + function numberToHex(value) { + var hex = value.toString(16); + return hex.length === 1 ? "0" + hex : hex; + } + + /** + * Returns a string value for the color. The returned result is the smallest possible hex notation. + * + * @example + * // Styles as object usage + * const styles = { + * background: rgb(255, 205, 100), + * background: rgb({ red: 255, green: 205, blue: 100 }), + * } + * + * // styled-components usage + * const div = styled.div` + * background: ${rgb(255, 205, 100)}; + * background: ${rgb({ red: 255, green: 205, blue: 100 })}; + * ` + * + * // CSS in JS Output + * + * element { + * background: "#ffcd64"; + * background: "#ffcd64"; + * } + */ + function rgb(value, green, blue) { + if (typeof value === 'number' && typeof green === 'number' && typeof blue === 'number') { + return reduceHexValue("#" + numberToHex(value) + numberToHex(green) + numberToHex(blue)); + } else if (typeof value === 'object' && green === undefined && blue === undefined) { + return reduceHexValue("#" + numberToHex(value.red) + numberToHex(value.green) + numberToHex(value.blue)); + } + + throw new PolishedError(6); + } + + /** + * Returns a string value for the color. The returned result is the smallest possible rgba or hex notation. + * + * Can also be used to fade a color by passing a hex value or named CSS color along with an alpha value. + * + * @example + * // Styles as object usage + * const styles = { + * background: rgba(255, 205, 100, 0.7), + * background: rgba({ red: 255, green: 205, blue: 100, alpha: 0.7 }), + * background: rgba(255, 205, 100, 1), + * background: rgba('#ffffff', 0.4), + * background: rgba('black', 0.7), + * } + * + * // styled-components usage + * const div = styled.div` + * background: ${rgba(255, 205, 100, 0.7)}; + * background: ${rgba({ red: 255, green: 205, blue: 100, alpha: 0.7 })}; + * background: ${rgba(255, 205, 100, 1)}; + * background: ${rgba('#ffffff', 0.4)}; + * background: ${rgba('black', 0.7)}; + * ` + * + * // CSS in JS Output + * + * element { + * background: "rgba(255,205,100,0.7)"; + * background: "rgba(255,205,100,0.7)"; + * background: "#ffcd64"; + * background: "rgba(255,255,255,0.4)"; + * background: "rgba(0,0,0,0.7)"; + * } + */ + function rgba(firstValue, secondValue, thirdValue, fourthValue) { + if (typeof firstValue === 'string' && typeof secondValue === 'number') { + var rgbValue = parseToRgb(firstValue); + return "rgba(" + rgbValue.red + "," + rgbValue.green + "," + rgbValue.blue + "," + secondValue + ")"; + } else if (typeof firstValue === 'number' && typeof secondValue === 'number' && typeof thirdValue === 'number' && typeof fourthValue === 'number') { + return fourthValue >= 1 ? rgb(firstValue, secondValue, thirdValue) : "rgba(" + firstValue + "," + secondValue + "," + thirdValue + "," + fourthValue + ")"; + } else if (typeof firstValue === 'object' && secondValue === undefined && thirdValue === undefined && fourthValue === undefined) { + return firstValue.alpha >= 1 ? rgb(firstValue.red, firstValue.green, firstValue.blue) : "rgba(" + firstValue.red + "," + firstValue.green + "," + firstValue.blue + "," + firstValue.alpha + ")"; + } + + throw new PolishedError(7); + } + + // Type definitions taken from https://github.com/gcanti/flow-static-land/blob/master/src/Fun.js + // eslint-disable-next-line no-unused-vars + // eslint-disable-next-line no-unused-vars + // eslint-disable-next-line no-redeclare + function curried(f, length, acc) { + return function fn() { + // eslint-disable-next-line prefer-rest-params + var combined = acc.concat(Array.prototype.slice.call(arguments)); + return combined.length >= length ? f.apply(this, combined) : curried(f, length, combined); + }; + } // eslint-disable-next-line no-redeclare + + + function curry(f) { + // eslint-disable-line no-redeclare + return curried(f, f.length, []); + } + + function guard(lowerBoundary, upperBoundary, value) { + return Math.max(lowerBoundary, Math.min(upperBoundary, value)); + } + + /** + * Increases the opacity of a color. Its range for the amount is between 0 to 1. + * + * + * @example + * // Styles as object usage + * const styles = { + * background: opacify(0.1, 'rgba(255, 255, 255, 0.9)'); + * background: opacify(0.2, 'hsla(0, 0%, 100%, 0.5)'), + * background: opacify('0.5', 'rgba(255, 0, 0, 0.2)'), + * } + * + * // styled-components usage + * const div = styled.div` + * background: ${opacify(0.1, 'rgba(255, 255, 255, 0.9)')}; + * background: ${opacify(0.2, 'hsla(0, 0%, 100%, 0.5)')}, + * background: ${opacify('0.5', 'rgba(255, 0, 0, 0.2)')}, + * ` + * + * // CSS in JS Output + * + * element { + * background: "#fff"; + * background: "rgba(255,255,255,0.7)"; + * background: "rgba(255,0,0,0.7)"; + * } + */ + + function opacify(amount, color) { + if (color === 'transparent') return color; + var parsedColor = parseToRgb(color); + var alpha = typeof parsedColor.alpha === 'number' ? parsedColor.alpha : 1; + + var colorWithAlpha = _extends({}, parsedColor, { + alpha: guard(0, 1, (alpha * 100 + parseFloat(amount) * 100) / 100) + }); + + return rgba(colorWithAlpha); + } // prettier-ignore + + + var curriedOpacify = /*#__PURE__*/curry + /* :: */ + (opacify); + + /** + * The Ease class provides a collection of easing functions for use with tween.js. + */ + var Easing = { + Linear: { + None: function (amount) { + return amount; + }, + }, + Quadratic: { + In: function (amount) { + return amount * amount; + }, + Out: function (amount) { + return amount * (2 - amount); + }, + InOut: function (amount) { + if ((amount *= 2) < 1) { + return 0.5 * amount * amount; + } + return -0.5 * (--amount * (amount - 2) - 1); + }, + }, + Cubic: { + In: function (amount) { + return amount * amount * amount; + }, + Out: function (amount) { + return --amount * amount * amount + 1; + }, + InOut: function (amount) { + if ((amount *= 2) < 1) { + return 0.5 * amount * amount * amount; + } + return 0.5 * ((amount -= 2) * amount * amount + 2); + }, + }, + Quartic: { + In: function (amount) { + return amount * amount * amount * amount; + }, + Out: function (amount) { + return 1 - --amount * amount * amount * amount; + }, + InOut: function (amount) { + if ((amount *= 2) < 1) { + return 0.5 * amount * amount * amount * amount; + } + return -0.5 * ((amount -= 2) * amount * amount * amount - 2); + }, + }, + Quintic: { + In: function (amount) { + return amount * amount * amount * amount * amount; + }, + Out: function (amount) { + return --amount * amount * amount * amount * amount + 1; + }, + InOut: function (amount) { + if ((amount *= 2) < 1) { + return 0.5 * amount * amount * amount * amount * amount; + } + return 0.5 * ((amount -= 2) * amount * amount * amount * amount + 2); + }, + }, + Sinusoidal: { + In: function (amount) { + return 1 - Math.cos((amount * Math.PI) / 2); + }, + Out: function (amount) { + return Math.sin((amount * Math.PI) / 2); + }, + InOut: function (amount) { + return 0.5 * (1 - Math.cos(Math.PI * amount)); + }, + }, + Exponential: { + In: function (amount) { + return amount === 0 ? 0 : Math.pow(1024, amount - 1); + }, + Out: function (amount) { + return amount === 1 ? 1 : 1 - Math.pow(2, -10 * amount); + }, + InOut: function (amount) { + if (amount === 0) { + return 0; + } + if (amount === 1) { + return 1; + } + if ((amount *= 2) < 1) { + return 0.5 * Math.pow(1024, amount - 1); + } + return 0.5 * (-Math.pow(2, -10 * (amount - 1)) + 2); + }, + }, + Circular: { + In: function (amount) { + return 1 - Math.sqrt(1 - amount * amount); + }, + Out: function (amount) { + return Math.sqrt(1 - --amount * amount); + }, + InOut: function (amount) { + if ((amount *= 2) < 1) { + return -0.5 * (Math.sqrt(1 - amount * amount) - 1); + } + return 0.5 * (Math.sqrt(1 - (amount -= 2) * amount) + 1); + }, + }, + Elastic: { + In: function (amount) { + if (amount === 0) { + return 0; + } + if (amount === 1) { + return 1; + } + return -Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI); + }, + Out: function (amount) { + if (amount === 0) { + return 0; + } + if (amount === 1) { + return 1; + } + return Math.pow(2, -10 * amount) * Math.sin((amount - 0.1) * 5 * Math.PI) + 1; + }, + InOut: function (amount) { + if (amount === 0) { + return 0; + } + if (amount === 1) { + return 1; + } + amount *= 2; + if (amount < 1) { + return -0.5 * Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI); + } + return 0.5 * Math.pow(2, -10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI) + 1; + }, + }, + Back: { + In: function (amount) { + var s = 1.70158; + return amount * amount * ((s + 1) * amount - s); + }, + Out: function (amount) { + var s = 1.70158; + return --amount * amount * ((s + 1) * amount + s) + 1; + }, + InOut: function (amount) { + var s = 1.70158 * 1.525; + if ((amount *= 2) < 1) { + return 0.5 * (amount * amount * ((s + 1) * amount - s)); + } + return 0.5 * ((amount -= 2) * amount * ((s + 1) * amount + s) + 2); + }, + }, + Bounce: { + In: function (amount) { + return 1 - Easing.Bounce.Out(1 - amount); + }, + Out: function (amount) { + if (amount < 1 / 2.75) { + return 7.5625 * amount * amount; + } + else if (amount < 2 / 2.75) { + return 7.5625 * (amount -= 1.5 / 2.75) * amount + 0.75; + } + else if (amount < 2.5 / 2.75) { + return 7.5625 * (amount -= 2.25 / 2.75) * amount + 0.9375; + } + else { + return 7.5625 * (amount -= 2.625 / 2.75) * amount + 0.984375; + } + }, + InOut: function (amount) { + if (amount < 0.5) { + return Easing.Bounce.In(amount * 2) * 0.5; + } + return Easing.Bounce.Out(amount * 2 - 1) * 0.5 + 0.5; + }, + }, + }; + + var now; + // Include a performance.now polyfill. + // In node.js, use process.hrtime. + // eslint-disable-next-line + // @ts-ignore + if (typeof self === 'undefined' && typeof process !== 'undefined' && process.hrtime) { + now = function () { + // eslint-disable-next-line + // @ts-ignore + var time = process.hrtime(); + // Convert [seconds, nanoseconds] to milliseconds. + return time[0] * 1000 + time[1] / 1000000; + }; + } + // In a browser, use self.performance.now if it is available. + else if (typeof self !== 'undefined' && self.performance !== undefined && self.performance.now !== undefined) { + // This must be bound, because directly assigning this function + // leads to an invocation exception in Chrome. + now = self.performance.now.bind(self.performance); + } + // Use Date.now if it is available. + else if (Date.now !== undefined) { + now = Date.now; + } + // Otherwise, use 'new Date().getTime()'. + else { + now = function () { + return new Date().getTime(); + }; + } + var now$1 = now; + + /** + * Controlling groups of tweens + * + * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components. + * In these cases, you may want to create your own smaller groups of tween + */ + var Group = /** @class */ (function () { + function Group() { + this._tweens = {}; + this._tweensAddedDuringUpdate = {}; + } + Group.prototype.getAll = function () { + var _this = this; + return Object.keys(this._tweens).map(function (tweenId) { + return _this._tweens[tweenId]; + }); + }; + Group.prototype.removeAll = function () { + this._tweens = {}; + }; + Group.prototype.add = function (tween) { + this._tweens[tween.getId()] = tween; + this._tweensAddedDuringUpdate[tween.getId()] = tween; + }; + Group.prototype.remove = function (tween) { + delete this._tweens[tween.getId()]; + delete this._tweensAddedDuringUpdate[tween.getId()]; + }; + Group.prototype.update = function (time, preserve) { + if (time === void 0) { time = now$1(); } + if (preserve === void 0) { preserve = false; } + var tweenIds = Object.keys(this._tweens); + if (tweenIds.length === 0) { + return false; + } + // Tweens are updated in "batches". If you add a new tween during an + // update, then the new tween will be updated in the next batch. + // If you remove a tween during an update, it may or may not be updated. + // However, if the removed tween was added during the current batch, + // then it will not be updated. + while (tweenIds.length > 0) { + this._tweensAddedDuringUpdate = {}; + for (var i = 0; i < tweenIds.length; i++) { + var tween = this._tweens[tweenIds[i]]; + var autoStart = !preserve; + if (tween && tween.update(time, autoStart) === false && !preserve) { + delete this._tweens[tweenIds[i]]; + } + } + tweenIds = Object.keys(this._tweensAddedDuringUpdate); + } + return true; + }; + return Group; + }()); + + /** + * + */ + var Interpolation = { + Linear: function (v, k) { + var m = v.length - 1; + var f = m * k; + var i = Math.floor(f); + var fn = Interpolation.Utils.Linear; + if (k < 0) { + return fn(v[0], v[1], f); + } + if (k > 1) { + return fn(v[m], v[m - 1], m - f); + } + return fn(v[i], v[i + 1 > m ? m : i + 1], f - i); + }, + Bezier: function (v, k) { + var b = 0; + var n = v.length - 1; + var pw = Math.pow; + var bn = Interpolation.Utils.Bernstein; + for (var i = 0; i <= n; i++) { + b += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i); + } + return b; + }, + CatmullRom: function (v, k) { + var m = v.length - 1; + var f = m * k; + var i = Math.floor(f); + var fn = Interpolation.Utils.CatmullRom; + if (v[0] === v[m]) { + if (k < 0) { + i = Math.floor((f = m * (1 + k))); + } + return fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i); + } + else { + if (k < 0) { + return v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]); + } + if (k > 1) { + return v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]); + } + return fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i); + } + }, + Utils: { + Linear: function (p0, p1, t) { + return (p1 - p0) * t + p0; + }, + Bernstein: function (n, i) { + var fc = Interpolation.Utils.Factorial; + return fc(n) / fc(i) / fc(n - i); + }, + Factorial: (function () { + var a = [1]; + return function (n) { + var s = 1; + if (a[n]) { + return a[n]; + } + for (var i = n; i > 1; i--) { + s *= i; + } + a[n] = s; + return s; + }; + })(), + CatmullRom: function (p0, p1, p2, p3, t) { + var v0 = (p2 - p0) * 0.5; + var v1 = (p3 - p1) * 0.5; + var t2 = t * t; + var t3 = t * t2; + return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1; + }, + }, + }; + + /** + * Utils + */ + var Sequence = /** @class */ (function () { + function Sequence() { + } + Sequence.nextId = function () { + return Sequence._nextId++; + }; + Sequence._nextId = 0; + return Sequence; + }()); + + var mainGroup = new Group(); + + /** + * Tween.js - Licensed under the MIT license + * https://github.com/tweenjs/tween.js + * ---------------------------------------------- + * + * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors. + * Thank you all, you're awesome! + */ + var Tween = /** @class */ (function () { + function Tween(_object, _group) { + if (_group === void 0) { _group = mainGroup; } + this._object = _object; + this._group = _group; + this._isPaused = false; + this._pauseStart = 0; + this._valuesStart = {}; + this._valuesEnd = {}; + this._valuesStartRepeat = {}; + this._duration = 1000; + this._initialRepeat = 0; + this._repeat = 0; + this._yoyo = false; + this._isPlaying = false; + this._reversed = false; + this._delayTime = 0; + this._startTime = 0; + this._easingFunction = Easing.Linear.None; + this._interpolationFunction = Interpolation.Linear; + this._chainedTweens = []; + this._onStartCallbackFired = false; + this._id = Sequence.nextId(); + this._isChainStopped = false; + this._goToEnd = false; + } + Tween.prototype.getId = function () { + return this._id; + }; + Tween.prototype.isPlaying = function () { + return this._isPlaying; + }; + Tween.prototype.isPaused = function () { + return this._isPaused; + }; + Tween.prototype.to = function (properties, duration) { + // TODO? restore this, then update the 07_dynamic_to example to set fox + // tween's to on each update. That way the behavior is opt-in (there's + // currently no opt-out). + // for (const prop in properties) this._valuesEnd[prop] = properties[prop] + this._valuesEnd = Object.create(properties); + if (duration !== undefined) { + this._duration = duration; + } + return this; + }; + Tween.prototype.duration = function (d) { + this._duration = d; + return this; + }; + Tween.prototype.start = function (time) { + if (this._isPlaying) { + return this; + } + // eslint-disable-next-line + this._group && this._group.add(this); + this._repeat = this._initialRepeat; + if (this._reversed) { + // If we were reversed (f.e. using the yoyo feature) then we need to + // flip the tween direction back to forward. + this._reversed = false; + for (var property in this._valuesStartRepeat) { + this._swapEndStartRepeatValues(property); + this._valuesStart[property] = this._valuesStartRepeat[property]; + } + } + this._isPlaying = true; + this._isPaused = false; + this._onStartCallbackFired = false; + this._isChainStopped = false; + this._startTime = time !== undefined ? (typeof time === 'string' ? now$1() + parseFloat(time) : time) : now$1(); + this._startTime += this._delayTime; + this._setupProperties(this._object, this._valuesStart, this._valuesEnd, this._valuesStartRepeat); + return this; + }; + Tween.prototype._setupProperties = function (_object, _valuesStart, _valuesEnd, _valuesStartRepeat) { + for (var property in _valuesEnd) { + var startValue = _object[property]; + var startValueIsArray = Array.isArray(startValue); + var propType = startValueIsArray ? 'array' : typeof startValue; + var isInterpolationList = !startValueIsArray && Array.isArray(_valuesEnd[property]); + // If `to()` specifies a property that doesn't exist in the source object, + // we should not set that property in the object + if (propType === 'undefined' || propType === 'function') { + continue; + } + // Check if an Array was provided as property value + if (isInterpolationList) { + var endValues = _valuesEnd[property]; + if (endValues.length === 0) { + continue; + } + // handle an array of relative values + endValues = endValues.map(this._handleRelativeValue.bind(this, startValue)); + // Create a local copy of the Array with the start value at the front + _valuesEnd[property] = [startValue].concat(endValues); + } + // handle the deepness of the values + if ((propType === 'object' || startValueIsArray) && startValue && !isInterpolationList) { + _valuesStart[property] = startValueIsArray ? [] : {}; + // eslint-disable-next-line + for (var prop in startValue) { + // eslint-disable-next-line + // @ts-ignore FIXME? + _valuesStart[property][prop] = startValue[prop]; + } + _valuesStartRepeat[property] = startValueIsArray ? [] : {}; // TODO? repeat nested values? And yoyo? And array values? + // eslint-disable-next-line + // @ts-ignore FIXME? + this._setupProperties(startValue, _valuesStart[property], _valuesEnd[property], _valuesStartRepeat[property]); + } + else { + // Save the starting value, but only once. + if (typeof _valuesStart[property] === 'undefined') { + _valuesStart[property] = startValue; + } + if (!startValueIsArray) { + // eslint-disable-next-line + // @ts-ignore FIXME? + _valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings + } + if (isInterpolationList) { + // eslint-disable-next-line + // @ts-ignore FIXME? + _valuesStartRepeat[property] = _valuesEnd[property].slice().reverse(); + } + else { + _valuesStartRepeat[property] = _valuesStart[property] || 0; + } + } + } + }; + Tween.prototype.stop = function () { + if (!this._isChainStopped) { + this._isChainStopped = true; + this.stopChainedTweens(); + } + if (!this._isPlaying) { + return this; + } + // eslint-disable-next-line + this._group && this._group.remove(this); + this._isPlaying = false; + this._isPaused = false; + if (this._onStopCallback) { + this._onStopCallback(this._object); + } + return this; + }; + Tween.prototype.end = function () { + this._goToEnd = true; + this.update(Infinity); + return this; + }; + Tween.prototype.pause = function (time) { + if (time === void 0) { time = now$1(); } + if (this._isPaused || !this._isPlaying) { + return this; + } + this._isPaused = true; + this._pauseStart = time; + // eslint-disable-next-line + this._group && this._group.remove(this); + return this; + }; + Tween.prototype.resume = function (time) { + if (time === void 0) { time = now$1(); } + if (!this._isPaused || !this._isPlaying) { + return this; + } + this._isPaused = false; + this._startTime += time - this._pauseStart; + this._pauseStart = 0; + // eslint-disable-next-line + this._group && this._group.add(this); + return this; + }; + Tween.prototype.stopChainedTweens = function () { + for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) { + this._chainedTweens[i].stop(); + } + return this; + }; + Tween.prototype.group = function (group) { + this._group = group; + return this; + }; + Tween.prototype.delay = function (amount) { + this._delayTime = amount; + return this; + }; + Tween.prototype.repeat = function (times) { + this._initialRepeat = times; + this._repeat = times; + return this; + }; + Tween.prototype.repeatDelay = function (amount) { + this._repeatDelayTime = amount; + return this; + }; + Tween.prototype.yoyo = function (yoyo) { + this._yoyo = yoyo; + return this; + }; + Tween.prototype.easing = function (easingFunction) { + this._easingFunction = easingFunction; + return this; + }; + Tween.prototype.interpolation = function (interpolationFunction) { + this._interpolationFunction = interpolationFunction; + return this; + }; + Tween.prototype.chain = function () { + var tweens = []; + for (var _i = 0; _i < arguments.length; _i++) { + tweens[_i] = arguments[_i]; + } + this._chainedTweens = tweens; + return this; + }; + Tween.prototype.onStart = function (callback) { + this._onStartCallback = callback; + return this; + }; + Tween.prototype.onUpdate = function (callback) { + this._onUpdateCallback = callback; + return this; + }; + Tween.prototype.onRepeat = function (callback) { + this._onRepeatCallback = callback; + return this; + }; + Tween.prototype.onComplete = function (callback) { + this._onCompleteCallback = callback; + return this; + }; + Tween.prototype.onStop = function (callback) { + this._onStopCallback = callback; + return this; + }; + /** + * @returns true if the tween is still playing after the update, false + * otherwise (calling update on a paused tween still returns true because + * it is still playing, just paused). + */ + Tween.prototype.update = function (time, autoStart) { + if (time === void 0) { time = now$1(); } + if (autoStart === void 0) { autoStart = true; } + if (this._isPaused) + return true; + var property; + var elapsed; + var endTime = this._startTime + this._duration; + if (!this._goToEnd && !this._isPlaying) { + if (time > endTime) + return false; + if (autoStart) + this.start(time); + } + this._goToEnd = false; + if (time < this._startTime) { + return true; + } + if (this._onStartCallbackFired === false) { + if (this._onStartCallback) { + this._onStartCallback(this._object); + } + this._onStartCallbackFired = true; + } + elapsed = (time - this._startTime) / this._duration; + elapsed = this._duration === 0 || elapsed > 1 ? 1 : elapsed; + var value = this._easingFunction(elapsed); + // properties transformations + this._updateProperties(this._object, this._valuesStart, this._valuesEnd, value); + if (this._onUpdateCallback) { + this._onUpdateCallback(this._object, elapsed); + } + if (elapsed === 1) { + if (this._repeat > 0) { + if (isFinite(this._repeat)) { + this._repeat--; + } + // Reassign starting values, restart by making startTime = now + for (property in this._valuesStartRepeat) { + if (!this._yoyo && typeof this._valuesEnd[property] === 'string') { + this._valuesStartRepeat[property] = + // eslint-disable-next-line + // @ts-ignore FIXME? + this._valuesStartRepeat[property] + parseFloat(this._valuesEnd[property]); + } + if (this._yoyo) { + this._swapEndStartRepeatValues(property); + } + this._valuesStart[property] = this._valuesStartRepeat[property]; + } + if (this._yoyo) { + this._reversed = !this._reversed; + } + if (this._repeatDelayTime !== undefined) { + this._startTime = time + this._repeatDelayTime; + } + else { + this._startTime = time + this._delayTime; + } + if (this._onRepeatCallback) { + this._onRepeatCallback(this._object); + } + return true; + } + else { + if (this._onCompleteCallback) { + this._onCompleteCallback(this._object); + } + for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) { + // Make the chained tweens start exactly at the time they should, + // even if the `update()` method was called way past the duration of the tween + this._chainedTweens[i].start(this._startTime + this._duration); + } + this._isPlaying = false; + return false; + } + } + return true; + }; + Tween.prototype._updateProperties = function (_object, _valuesStart, _valuesEnd, value) { + for (var property in _valuesEnd) { + // Don't update properties that do not exist in the source object + if (_valuesStart[property] === undefined) { + continue; + } + var start = _valuesStart[property] || 0; + var end = _valuesEnd[property]; + var startIsArray = Array.isArray(_object[property]); + var endIsArray = Array.isArray(end); + var isInterpolationList = !startIsArray && endIsArray; + if (isInterpolationList) { + _object[property] = this._interpolationFunction(end, value); + } + else if (typeof end === 'object' && end) { + // eslint-disable-next-line + // @ts-ignore FIXME? + this._updateProperties(_object[property], start, end, value); + } + else { + // Parses relative end values with start as base (e.g.: +10, -3) + end = this._handleRelativeValue(start, end); + // Protect against non numeric properties. + if (typeof end === 'number') { + // eslint-disable-next-line + // @ts-ignore FIXME? + _object[property] = start + (end - start) * value; + } + } + } + }; + Tween.prototype._handleRelativeValue = function (start, end) { + if (typeof end !== 'string') { + return end; + } + if (end.charAt(0) === '+' || end.charAt(0) === '-') { + return start + parseFloat(end); + } + else { + return parseFloat(end); + } + }; + Tween.prototype._swapEndStartRepeatValues = function (property) { + var tmp = this._valuesStartRepeat[property]; + var endValue = this._valuesEnd[property]; + if (typeof endValue === 'string') { + this._valuesStartRepeat[property] = this._valuesStartRepeat[property] + parseFloat(endValue); + } + else { + this._valuesStartRepeat[property] = this._valuesEnd[property]; + } + this._valuesEnd[property] = tmp; + }; + return Tween; + }()); + + var VERSION = '18.6.4'; + + /** + * Tween.js - Licensed under the MIT license + * https://github.com/tweenjs/tween.js + * ---------------------------------------------- + * + * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors. + * Thank you all, you're awesome! + */ + var nextId = Sequence.nextId; + /** + * Controlling groups of tweens + * + * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components. + * In these cases, you may want to create your own smaller groups of tweens. + */ + var TWEEN = mainGroup; + // This is the best way to export things in a way that's compatible with both ES + // Modules and CommonJS, without build hacks, and so as not to break the + // existing API. + // https://github.com/rollup/rollup/issues/1961#issuecomment-423037881 + var getAll = TWEEN.getAll.bind(TWEEN); + var removeAll = TWEEN.removeAll.bind(TWEEN); + var add = TWEEN.add.bind(TWEEN); + var remove = TWEEN.remove.bind(TWEEN); + var update = TWEEN.update.bind(TWEEN); + var exports$1 = { + Easing: Easing, + Group: Group, + Interpolation: Interpolation, + now: now$1, + Sequence: Sequence, + nextId: nextId, + Tween: Tween, + VERSION: VERSION, + getAll: getAll, + removeAll: removeAll, + add: add, + remove: remove, + update: update, + }; + + function styleInject(css, ref) { + if (ref === void 0) ref = {}; + var insertAt = ref.insertAt; + + if (!css || typeof document === 'undefined') { + return; + } + + var head = document.head || document.getElementsByTagName('head')[0]; + var style = document.createElement('style'); + style.type = 'text/css'; + + if (insertAt === 'top') { + if (head.firstChild) { + head.insertBefore(style, head.firstChild); + } else { + head.appendChild(style); + } + } else { + head.appendChild(style); + } + + if (style.styleSheet) { + style.styleSheet.cssText = css; + } else { + style.appendChild(document.createTextNode(css)); + } + } + + var css_248z = ".scene-nav-info {\n bottom: 5px;\n width: 100%;\n text-align: center;\n color: slategrey;\n opacity: 0.7;\n font-size: 10px;\n}\n\n.scene-tooltip {\n color: lavender;\n font-size: 15px;\n}\n\n.scene-nav-info, .scene-tooltip {\n position: absolute;\n font-family: sans-serif;\n pointer-events: none;\n}\n\n.scene-container canvas:focus {\n outline: none;\n}"; + styleInject(css_248z); + + function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + } + + function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); + } + + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); + } + + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); + } + + function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; + } + + function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); + } + + function _iterableToArrayLimit(arr, i) { + var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; + + if (_i == null) return; + var _arr = []; + var _n = true; + var _d = false; + + var _s, _e; + + try { + for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; + } + + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + var three$1 = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists + : { + WebGLRenderer: WebGLRenderer, + Scene: Scene, + // PerspectiveCamera, + OrthographicCamera: OrthographicCamera, + Raycaster: Raycaster, + TextureLoader: TextureLoader, + Vector2: Vector2, + Vector3: Vector3, + Box3: Box3, + Color: Color, + Mesh: Mesh, + SphereGeometry: SphereGeometry, + MeshBasicMaterial: MeshBasicMaterial, + BackSide: BackSide, + EventDispatcher: EventDispatcher, + MOUSE: MOUSE, + Quaternion: Quaternion, + Spherical: Spherical, + Clock: Clock + }; + var threeRenderObjects = index$2({ + props: { + width: { + "default": window.innerWidth, + onChange: function onChange(width, state, prevWidth) { + isNaN(width) && (state.width = prevWidth); + } + }, + height: { + "default": window.innerHeight, + onChange: function onChange(height, state, prevHeight) { + isNaN(height) && (state.height = prevHeight); + } + }, + backgroundColor: { + "default": '#000011' + }, + backgroundImageUrl: {}, + onBackgroundImageLoaded: {}, + showNavInfo: { + "default": true + }, + skyRadius: { + "default": 50000 + }, + objects: { + "default": [] + }, + enablePointerInteraction: { + "default": true, + onChange: function onChange(_, state) { + // Reset hover state + state.hoverObj = null; + if (state.toolTipElem) state.toolTipElem.innerHTML = ''; + }, + triggerUpdate: false + }, + lineHoverPrecision: { + "default": 1, + triggerUpdate: false + }, + hoverOrderComparator: { + "default": function _default() { + return -1; + }, + triggerUpdate: false + }, + // keep existing order by default + hoverFilter: { + "default": function _default() { + return true; + }, + triggerUpdate: false + }, + // exclude objects from interaction + tooltipContent: { + triggerUpdate: false + }, + hoverDuringDrag: { + "default": false, + triggerUpdate: false + }, + clickAfterDrag: { + "default": false, + triggerUpdate: false + }, + onHover: { + "default": function _default() {}, + triggerUpdate: false + }, + onClick: { + "default": function _default() {}, + triggerUpdate: false + }, + onRightClick: { + triggerUpdate: false + } + }, + methods: { + tick: function tick(state) { + if (state.initialised) { + state.controls.update && state.controls.update(state.clock.getDelta()); // timedelta is required for fly controls + + state.postProcessingComposer ? state.postProcessingComposer.render() // if using postprocessing, switch the output to it + : state.renderer.render(state.scene, state.camera); + state.extraRenderers.forEach(function (r) { + return r.render(state.scene, state.camera); + }); + + if (state.enablePointerInteraction) { + // Update tooltip and trigger onHover events + var topObject = null; + + if (state.hoverDuringDrag || !state.isPointerDragging) { + var intersects = this.intersectingObjects(state.pointerPos.x, state.pointerPos.y).filter(function (d) { + return state.hoverFilter(d.object); + }).sort(function (a, b) { + return state.hoverOrderComparator(a.object, b.object); + }); + var topIntersect = intersects.length ? intersects[0] : null; + topObject = topIntersect ? topIntersect.object : null; + state.intersectionPoint = topIntersect ? topIntersect.point : null; + } + + if (topObject !== state.hoverObj) { + state.onHover(topObject, state.hoverObj); + state.toolTipElem.innerHTML = topObject ? index$1(state.tooltipContent)(topObject) || '' : ''; + state.hoverObj = topObject; + } + } + + exports$1.update(); // update camera animation tweens + } + + return this; + }, + getPointerPos: function getPointerPos(state) { + var _state$pointerPos = state.pointerPos, + x = _state$pointerPos.x, + y = _state$pointerPos.y; + return { + x: x, + y: y + }; + }, + cameraPosition: function cameraPosition(state, position, lookAt, transitionDuration) { + var camera = state.camera; // Setter + + if (position && state.initialised) { + var finalPos = position; + var finalLookAt = lookAt || { + x: 0, + y: 0, + z: 0 + }; + + if (!transitionDuration) { + // no animation + setCameraPos(finalPos); + setLookAt(finalLookAt); + } else { + var camPos = Object.assign({}, camera.position); + var camLookAt = getLookAt(); + new exports$1.Tween(camPos).to(finalPos, transitionDuration).easing(exports$1.Easing.Quadratic.Out).onUpdate(setCameraPos).start(); // Face direction in 1/3rd of time + + new exports$1.Tween(camLookAt).to(finalLookAt, transitionDuration / 3).easing(exports$1.Easing.Quadratic.Out).onUpdate(setLookAt).start(); + } + + return this; + } // Getter + + + return Object.assign({}, camera.position, { + lookAt: getLookAt() + }); // + + function setCameraPos(pos) { + var x = pos.x, + y = pos.y, + z = pos.z; + if (x !== undefined) camera.position.x = x; + if (y !== undefined) camera.position.y = y; + if (z !== undefined) camera.position.z = z; + } + + function setLookAt(lookAt) { + state.controls.target = new three$1.Vector3(lookAt.x, lookAt.y, lookAt.z); + } + + function getLookAt() { + return Object.assign(new three$1.Vector3(0, 0, -1000).applyQuaternion(camera.quaternion).add(camera.position)); + } + }, + zoomToFit: function zoomToFit(state) { + var transitionDuration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var padding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10; + + for (var _len = arguments.length, bboxArgs = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { + bboxArgs[_key - 3] = arguments[_key]; + } + + return this.fitToBbox(this.getBbox.apply(this, bboxArgs), transitionDuration, padding); + }, + fitToBbox: function fitToBbox(state, bbox) { + var transitionDuration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + var padding = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10; + // based on https://discourse.threejs.org/t/camera-zoom-to-fit-object/936/24 + var camera = state.camera; + + if (bbox) { + var center = new three$1.Vector3(0, 0, 0); // reset camera aim to center + + var maxBoxSide = Math.max.apply(Math, _toConsumableArray(Object.entries(bbox).map(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + coordType = _ref2[0], + coords = _ref2[1]; + + return Math.max.apply(Math, _toConsumableArray(coords.map(function (c) { + return Math.abs(center[coordType] - c); + }))); + }))) * 2; // find distance that fits whole bbox within padded fov + + var paddedFov = (1 - padding * 2 / state.height) * camera.fov; + var fitHeightDistance = maxBoxSide / Math.atan(paddedFov * Math.PI / 180); + var fitWidthDistance = fitHeightDistance / camera.aspect; + var distance = Math.max(fitHeightDistance, fitWidthDistance); + + if (distance > 0) { + var newCameraPosition = center.clone().sub(camera.position).normalize().multiplyScalar(-distance); + this.cameraPosition(newCameraPosition, center, transitionDuration); + } + } + + return this; + }, + getBbox: function getBbox(state) { + var objFilter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () { + return true; + }; + var box = new three$1.Box3(new three$1.Vector3(0, 0, 0), new three$1.Vector3(0, 0, 0)); + var objs = state.objects.filter(objFilter); + if (!objs.length) return null; + objs.forEach(function (obj) { + return box.expandByObject(obj); + }); // extract global x,y,z min/max + + return Object.assign.apply(Object, _toConsumableArray(['x', 'y', 'z'].map(function (c) { + return _defineProperty({}, c, [box.min[c], box.max[c]]); + }))); + }, + getScreenCoords: function getScreenCoords(state, x, y, z) { + var vec = new three$1.Vector3(x, y, z); + vec.project(this.camera()); // project to the camera plane + + return { + // align relative pos to canvas dimensions + x: (vec.x + 1) * state.width / 2, + y: -(vec.y - 1) * state.height / 2 + }; + }, + getSceneCoords: function getSceneCoords(state, screenX, screenY) { + var distance = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; + var relCoords = new three$1.Vector2(screenX / state.width * 2 - 1, -(screenY / state.height) * 2 + 1); + var raycaster = new three$1.Raycaster(); + raycaster.setFromCamera(relCoords, state.camera); + return Object.assign({}, raycaster.ray.at(distance, new three$1.Vector3())); + }, + intersectingObjects: function intersectingObjects(state, x, y) { + var relCoords = new three$1.Vector2(x / state.width * 2 - 1, -(y / state.height) * 2 + 1); + var raycaster = new three$1.Raycaster(); + raycaster.params.Line.threshold = state.lineHoverPrecision; // set linePrecision + + raycaster.setFromCamera(relCoords, state.camera); + return raycaster.intersectObjects(state.objects, true); + }, + renderer: function renderer(state) { + return state.renderer; + }, + scene: function scene(state) { + return state.scene; + }, + camera: function camera(state) { + return state.camera; + }, + postProcessingComposer: function postProcessingComposer(state) { + return state.postProcessingComposer; + }, + controls: function controls(state) { + return state.controls; + }, + tbControls: function tbControls(state) { + return state.controls; + } // to be deprecated + + }, + stateInit: function stateInit() { + return { + scene: new three$1.Scene(), + camera: new three$1.OrthographicCamera(), + clock: new three$1.Clock() + }; + }, + init: function init(domNode, state) { + var _ref4 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + _ref4$controlType = _ref4.controlType, + controlType = _ref4$controlType === void 0 ? 'trackball' : _ref4$controlType, + _ref4$rendererConfig = _ref4.rendererConfig, + rendererConfig = _ref4$rendererConfig === void 0 ? {} : _ref4$rendererConfig, + _ref4$extraRenderers = _ref4.extraRenderers, + extraRenderers = _ref4$extraRenderers === void 0 ? [] : _ref4$extraRenderers, + _ref4$waitForLoadComp = _ref4.waitForLoadComplete, + waitForLoadComplete = _ref4$waitForLoadComp === void 0 ? true : _ref4$waitForLoadComp; + + // Wipe DOM + domNode.innerHTML = ''; // Add relative container + + domNode.appendChild(state.container = document.createElement('div')); + state.container.className = 'scene-container'; + state.container.style.position = 'relative'; // Add nav info section + + state.container.appendChild(state.navInfo = document.createElement('div')); + state.navInfo.className = 'scene-nav-info'; + state.navInfo.textContent = { + orbit: 'Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan', + trackball: 'Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan', + fly: 'WASD: move, R|F: up | down, Q|E: roll, up|down: pitch, left|right: yaw' + }[controlType] || ''; + state.navInfo.style.display = state.showNavInfo ? null : 'none'; // Setup tooltip + + state.toolTipElem = document.createElement('div'); + state.toolTipElem.classList.add('scene-tooltip'); + state.container.appendChild(state.toolTipElem); // Capture pointer coords on move or touchstart + + state.pointerPos = new three$1.Vector2(); + state.pointerPos.x = -2; // Initialize off canvas + + state.pointerPos.y = -2; + ['pointermove', 'pointerdown'].forEach(function (evType) { + return state.container.addEventListener(evType, function (ev) { + // track click state + evType === 'pointerdown' && (state.isPointerPressed = true); // detect point drag + + !state.isPointerDragging && ev.type === 'pointermove' && (ev.pressure > 0 || state.isPointerPressed) // ev.pressure always 0 on Safari, so we used the isPointerPressed tracker + && (ev.pointerType !== 'touch' || ev.movementX === undefined || [ev.movementX, ev.movementY].some(function (m) { + return Math.abs(m) > 1; + })) // relax drag trigger sensitivity on touch events + && (state.isPointerDragging = true); + + if (state.enablePointerInteraction) { + // update the pointer pos + var offset = getOffset(state.container); + state.pointerPos.x = ev.pageX - offset.left; + state.pointerPos.y = ev.pageY - offset.top; // Move tooltip + + state.toolTipElem.style.top = "".concat(state.pointerPos.y, "px"); + state.toolTipElem.style.left = "".concat(state.pointerPos.x, "px"); + state.toolTipElem.style.transform = "translate(-".concat(state.pointerPos.x / state.width * 100, "%, 21px)"); // adjust horizontal position to not exceed canvas boundaries + } + + function getOffset(el) { + var rect = el.getBoundingClientRect(), + scrollLeft = window.pageXOffset || document.documentElement.scrollLeft, + scrollTop = window.pageYOffset || document.documentElement.scrollTop; + return { + top: rect.top + scrollTop, + left: rect.left + scrollLeft + }; + } + }, { + passive: true + }); + }); // Handle click events on objs + + state.container.addEventListener('pointerup', function (ev) { + state.isPointerPressed = false; + + if (state.isPointerDragging) { + state.isPointerDragging = false; + if (!state.clickAfterDrag) return; // don't trigger onClick after pointer drag (camera motion via controls) + } + + requestAnimationFrame(function () { + // trigger click events asynchronously, to allow hoverObj to be set (on frame) + if (ev.button === 0) { + // left-click + state.onClick(state.hoverObj || null, ev, state.intersectionPoint); // trigger background clicks with null + } + + if (ev.button === 2 && state.onRightClick) { + // right-click + state.onRightClick(state.hoverObj || null, ev, state.intersectionPoint); + } + }); + }, { + passive: true, + capture: true + }); // use capture phase to prevent propagation blocking from controls (specifically for fly) + + state.container.addEventListener('contextmenu', function (ev) { + if (state.onRightClick) ev.preventDefault(); // prevent default contextmenu behavior and allow pointerup to fire instead + }); // Setup renderer, camera and controls + + state.renderer = new three$1.WebGLRenderer(Object.assign({ + antialias: true, + alpha: true + }, rendererConfig)); + state.renderer.setPixelRatio(Math.min(2, window.devicePixelRatio)); // clamp device pixel ratio + + state.container.appendChild(state.renderer.domElement); // Setup extra renderers + + state.extraRenderers = extraRenderers; + state.extraRenderers.forEach(function (r) { + // overlay them on top of main renderer + r.domElement.style.position = 'absolute'; + r.domElement.style.top = '0px'; + r.domElement.style.pointerEvents = 'none'; + state.container.appendChild(r.domElement); + }); // configure post-processing composer + + state.postProcessingComposer = new EffectComposer(state.renderer); + state.postProcessingComposer.addPass(new RenderPass(state.scene, state.camera)); // render scene as first pass + // configure controls + + state.controls = new { + trackball: TrackballControls, + orbit: OrbitControls, + fly: FlyControls + }[controlType](state.camera, state.renderer.domElement); + + if (controlType === 'fly') { + state.controls.movementSpeed = 300; + state.controls.rollSpeed = Math.PI / 6; + state.controls.dragToLook = true; + } + + if (controlType === 'trackball' || controlType === 'orbit') { + state.controls.minDistance = 0.1; + state.controls.maxDistance = state.skyRadius; + state.controls.addEventListener('start', function () { + state.controlsEngaged = true; + }); + state.controls.addEventListener('change', function () { + if (state.controlsEngaged) { + state.controlsDragging = true; + } + }); + state.controls.addEventListener('end', function () { + state.controlsEngaged = false; + state.controlsDragging = false; + }); + } + + [state.renderer, state.postProcessingComposer].concat(_toConsumableArray(state.extraRenderers)).forEach(function (r) { + return r.setSize(state.width, state.height); + }); + state.renderer.setSize(state.width, state.height); + state.postProcessingComposer.setSize(state.width, state.height); // state.camera.aspect = state.width/state.height; + // state.camera.updateProjectionMatrix(); + // state.camera.position.z = 1000; + // add sky + + state.scene.add(state.skysphere = new three$1.Mesh()); + state.skysphere.visible = false; + state.loadComplete = state.scene.visible = !waitForLoadComplete; + window.scene = state.scene; + }, + update: function update(state, changedProps) { + // resize canvas + if (state.width && state.height && (changedProps.hasOwnProperty('width') || changedProps.hasOwnProperty('height'))) { + state.container.style.width = state.width; + state.container.style.height = state.height; + [state.renderer, state.postProcessingComposer].concat(_toConsumableArray(state.extraRenderers)).forEach(function (r) { + return r.setSize(state.width, state.height); + }); + state.camera.aspect = state.width / state.height; + state.camera.updateProjectionMatrix(); + } + + if (changedProps.hasOwnProperty('skyRadius') && state.skyRadius) { + state.controls.hasOwnProperty('maxDistance') && changedProps.skyRadius && (state.controls.maxDistance = state.skyRadius); + state.camera.far = state.skyRadius * 2.5; + state.camera.updateProjectionMatrix(); + state.skysphere.geometry = new three$1.SphereGeometry(state.skyRadius); + } + + if (changedProps.hasOwnProperty('backgroundColor')) { + var alpha = parseToRgb(state.backgroundColor).alpha; + if (alpha === undefined) alpha = 1; + state.renderer.setClearColor(new three$1.Color(curriedOpacify(1, state.backgroundColor)), alpha); + } + + if (changedProps.hasOwnProperty('backgroundImageUrl')) { + if (!state.backgroundImageUrl) { + state.skysphere.visible = false; + state.skysphere.material.map = null; + !state.loadComplete && finishLoad(); + } else { + new three$1.TextureLoader().load(state.backgroundImageUrl, function (texture) { + state.skysphere.material = new three$1.MeshBasicMaterial({ + map: texture, + side: three$1.BackSide + }); + state.skysphere.visible = true; // triggered when background image finishes loading (asynchronously to allow 1 frame to load texture) + + state.onBackgroundImageLoaded && setTimeout(state.onBackgroundImageLoaded); + !state.loadComplete && finishLoad(); + }); + } + } + + changedProps.hasOwnProperty('showNavInfo') && (state.navInfo.style.display = state.showNavInfo ? null : 'none'); + + if (changedProps.hasOwnProperty('objects')) { + (changedProps.objects || []).forEach(function (obj) { + return state.scene.remove(obj); + }); // Clear the place + + state.objects.forEach(function (obj) { + return state.scene.add(obj); + }); // Add to scene + } // + + + function finishLoad() { + state.loadComplete = state.scene.visible = true; + } + } + }); + + function linkKapsule (kapsulePropName, kapsuleType) { + var dummyK = new kapsuleType(); // To extract defaults + + return { + linkProp: function linkProp(prop) { + // link property config + return { + "default": dummyK[prop](), + onChange: function onChange(v, state) { + state[kapsulePropName][prop](v); + }, + triggerUpdate: false + }; + }, + linkMethod: function linkMethod(method) { + // link method pass-through + return function (state) { + var kapsuleInstance = state[kapsulePropName]; + + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var returnVal = kapsuleInstance[method].apply(kapsuleInstance, args); + return returnVal === kapsuleInstance ? this // chain based on the parent object, not the inner kapsule + : returnVal; + }; + } + }; + } + + var three = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists + : { + AmbientLight: AmbientLight, + DirectionalLight: DirectionalLight, + Vector3: Vector3 + }; + + var CAMERA_DISTANCE2NODES_FACTOR = 170; // + // Expose config from forceGraph + + var bindFG = linkKapsule('forceGraph', threeForcegraph); + var linkedFGProps = Object.assign.apply(Object, _toConsumableArray$4(['jsonUrl', 'graphData', 'numDimensions', 'dagMode', 'dagLevelDistance', 'dagNodeFilter', 'onDagError', 'nodeRelSize', 'nodeId', 'nodeVal', 'nodeResolution', 'nodeColor', 'nodeAutoColorBy', 'nodeOpacity', 'nodeVisibility', 'nodeThreeObject', 'nodeThreeObjectExtend', 'linkSource', 'linkTarget', 'linkVisibility', 'linkColor', 'linkAutoColorBy', 'linkOpacity', 'linkWidth', 'linkResolution', 'linkCurvature', 'linkCurveRotation', 'linkMaterial', 'linkThreeObject', 'linkThreeObjectExtend', 'linkPositionUpdate', 'linkDirectionalArrowLength', 'linkDirectionalArrowColor', 'linkDirectionalArrowRelPos', 'linkDirectionalArrowResolution', 'linkDirectionalParticles', 'linkDirectionalParticleSpeed', 'linkDirectionalParticleWidth', 'linkDirectionalParticleColor', 'linkDirectionalParticleResolution', 'forceEngine', 'd3AlphaDecay', 'd3VelocityDecay', 'd3AlphaMin', 'ngraphPhysics', 'warmupTicks', 'cooldownTicks', 'cooldownTime', 'onEngineTick', 'onEngineStop'].map(function (p) { + return _defineProperty$3({}, p, bindFG.linkProp(p)); + }))); + var linkedFGMethods = Object.assign.apply(Object, _toConsumableArray$4(['refresh', 'getGraphBbox', 'd3Force', 'd3ReheatSimulation', 'emitParticle'].map(function (p) { + return _defineProperty$3({}, p, bindFG.linkMethod(p)); + }))); // Expose config from renderObjs + + var bindRenderObjs = linkKapsule('renderObjs', threeRenderObjects); + var linkedRenderObjsProps = Object.assign.apply(Object, _toConsumableArray$4(['width', 'height', 'backgroundColor', 'showNavInfo', 'enablePointerInteraction'].map(function (p) { + return _defineProperty$3({}, p, bindRenderObjs.linkProp(p)); + }))); + var linkedRenderObjsMethods = Object.assign.apply(Object, _toConsumableArray$4(['cameraPosition', 'postProcessingComposer'].map(function (p) { + return _defineProperty$3({}, p, bindRenderObjs.linkMethod(p)); + })).concat([{ + graph2ScreenCoords: bindRenderObjs.linkMethod('getScreenCoords'), + screen2GraphCoords: bindRenderObjs.linkMethod('getSceneCoords') + }])); // + + var _3dForceGraph = index$2({ + props: _objectSpread2$2(_objectSpread2$2({ + nodeLabel: { + "default": 'name', + triggerUpdate: false + }, + linkLabel: { + "default": 'name', + triggerUpdate: false + }, + linkHoverPrecision: { + "default": 1, + onChange: function onChange(p, state) { + return state.renderObjs.lineHoverPrecision(p); + }, + triggerUpdate: false + }, + enableNavigationControls: { + "default": true, + onChange: function onChange(enable, state) { + var controls = state.renderObjs.controls(); + + if (controls) { + controls.enabled = enable; + } + }, + triggerUpdate: false + }, + enableNodeDrag: { + "default": true, + triggerUpdate: false + }, + onNodeDrag: { + "default": function _default() {}, + triggerUpdate: false + }, + onNodeDragEnd: { + "default": function _default() {}, + triggerUpdate: false + }, + onNodeClick: { + triggerUpdate: false + }, + onNodeRightClick: { + triggerUpdate: false + }, + onNodeHover: { + triggerUpdate: false + }, + onLinkClick: { + triggerUpdate: false + }, + onLinkRightClick: { + triggerUpdate: false + }, + onLinkHover: { + triggerUpdate: false + }, + onBackgroundClick: { + triggerUpdate: false + }, + onBackgroundRightClick: { + triggerUpdate: false + } + }, linkedFGProps), linkedRenderObjsProps), + methods: _objectSpread2$2(_objectSpread2$2({ + zoomToFit: function zoomToFit(state, transitionDuration, padding) { + var _state$forceGraph; + + for (var _len = arguments.length, bboxArgs = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { + bboxArgs[_key - 3] = arguments[_key]; + } + + state.renderObjs.fitToBbox((_state$forceGraph = state.forceGraph).getGraphBbox.apply(_state$forceGraph, bboxArgs), transitionDuration, padding); + return this; + }, + pauseAnimation: function pauseAnimation(state) { + if (state.animationFrameRequestId !== null) { + cancelAnimationFrame(state.animationFrameRequestId); + state.animationFrameRequestId = null; + } + + return this; + }, + resumeAnimation: function resumeAnimation(state) { + if (state.animationFrameRequestId === null) { + this._animationCycle(); + } + + return this; + }, + _animationCycle: function _animationCycle(state) { + if (state.enablePointerInteraction) { + // reset canvas cursor (override dragControls cursor) + this.renderer().domElement.style.cursor = null; + } // Frame cycle + + + state.forceGraph.tickFrame(); + state.renderObjs.tick(); + state.animationFrameRequestId = requestAnimationFrame(this._animationCycle); + }, + scene: function scene(state) { + return state.renderObjs.scene(); + }, + // Expose scene + camera: function camera(state) { + return state.renderObjs.camera(); + }, + // Expose camera + renderer: function renderer(state) { + return state.renderObjs.renderer(); + }, + // Expose renderer + controls: function controls(state) { + return state.renderObjs.controls(); + }, + // Expose controls + tbControls: function tbControls(state) { + return state.renderObjs.tbControls(); + }, + // To be deprecated + _destructor: function _destructor() { + this.pauseAnimation(); + this.graphData({ + nodes: [], + links: [] + }); + } + }, linkedFGMethods), linkedRenderObjsMethods), + stateInit: function stateInit(_ref5) { + var controlType = _ref5.controlType, + rendererConfig = _ref5.rendererConfig, + extraRenderers = _ref5.extraRenderers; + return { + forceGraph: new threeForcegraph(), + renderObjs: threeRenderObjects({ + controlType: controlType, + rendererConfig: rendererConfig, + extraRenderers: extraRenderers + }) + }; + }, + init: function init(domNode, state) { + // Wipe DOM + domNode.innerHTML = ''; // Add relative container + + domNode.appendChild(state.container = document.createElement('div')); + state.container.style.position = 'relative'; // Add renderObjs + + var roDomNode = document.createElement('div'); + state.container.appendChild(roDomNode); + state.renderObjs(roDomNode); + var camera = state.renderObjs.camera(); + var renderer = state.renderObjs.renderer(); + var controls = state.renderObjs.controls(); + controls.enabled = !!state.enableNavigationControls; + state.lastSetCameraZ = camera.position.z; // Add info space + + var infoElem; + state.container.appendChild(infoElem = document.createElement('div')); + infoElem.className = 'graph-info-msg'; + infoElem.textContent = ''; // config forcegraph + + state.forceGraph.onLoading(function () { + infoElem.textContent = 'Loading...'; + }).onFinishLoading(function () { + infoElem.textContent = ''; + }).onUpdate(function () { + // sync graph data structures + state.graphData = state.forceGraph.graphData(); // re-aim camera, if still in default position (not user modified) + + if (camera.position.x === 0 && camera.position.y === 0 && camera.position.z === state.lastSetCameraZ && state.graphData.nodes.length) { + camera.lookAt(state.forceGraph.position); + state.lastSetCameraZ = camera.position.z = Math.cbrt(state.graphData.nodes.length) * CAMERA_DISTANCE2NODES_FACTOR; + } + }).onFinishUpdate(function () { + // Setup node drag interaction + if (state._dragControls) { + var curNodeDrag = state.graphData.nodes.find(function (node) { + return node.__initialFixedPos && !node.__disposeControlsAfterDrag; + }); // detect if there's a node being dragged using the existing drag controls + + if (curNodeDrag) { + curNodeDrag.__disposeControlsAfterDrag = true; // postpone previous controls disposal until drag ends + } else { + state._dragControls.dispose(); // cancel previous drag controls + + } + + state._dragControls = undefined; + } + + if (state.enableNodeDrag && state.enablePointerInteraction && state.forceEngine === 'd3') { + // Can't access node positions programatically in ngraph + var dragControls = state._dragControls = new DragControls(state.graphData.nodes.map(function (node) { + return node.__threeObj; + }).filter(function (obj) { + return obj; + }), camera, renderer.domElement); + dragControls.addEventListener('dragstart', function (event) { + controls.enabled = false; // Disable controls while dragging + // track drag object movement + + event.object.__initialPos = event.object.position.clone(); + event.object.__prevPos = event.object.position.clone(); + + var node = getGraphObj(event.object).__data; + + !node.__initialFixedPos && (node.__initialFixedPos = { + fx: node.fx, + fy: node.fy, + fz: node.fz + }); + !node.__initialPos && (node.__initialPos = { + x: node.x, + y: node.y, + z: node.z + }); // lock node + + ['x', 'y', 'z'].forEach(function (c) { + return node["f".concat(c)] = node[c]; + }); // drag cursor + + renderer.domElement.classList.add('grabbable'); + }); + dragControls.addEventListener('drag', function (event) { + var nodeObj = getGraphObj(event.object); + + if (!event.object.hasOwnProperty('__graphObjType')) { + // If dragging a child of the node, update the node object instead + var initPos = event.object.__initialPos; + var prevPos = event.object.__prevPos; + var _newPos = event.object.position; + nodeObj.position.add(_newPos.clone().sub(prevPos)); // translate node object by the motion delta + + prevPos.copy(_newPos); + + _newPos.copy(initPos); // reset child back to its initial position + + } + + var node = nodeObj.__data; + var newPos = nodeObj.position; + var translate = { + x: newPos.x - node.x, + y: newPos.y - node.y, + z: newPos.z - node.z + }; // Move fx/fy/fz (and x/y/z) of nodes based on object new position + + ['x', 'y', 'z'].forEach(function (c) { + return node["f".concat(c)] = node[c] = newPos[c]; + }); + state.forceGraph.d3AlphaTarget(0.3) // keep engine running at low intensity throughout drag + .resetCountdown(); // prevent freeze while dragging + + node.__dragged = true; + state.onNodeDrag(node, translate); + }); + dragControls.addEventListener('dragend', function (event) { + delete event.object.__initialPos; // remove tracking attributes + + delete event.object.__prevPos; + + var node = getGraphObj(event.object).__data; // dispose previous controls if needed + + + if (node.__disposeControlsAfterDrag) { + dragControls.dispose(); + delete node.__disposeControlsAfterDrag; + } + + var initFixedPos = node.__initialFixedPos; + var initPos = node.__initialPos; + var translate = { + x: initPos.x - node.x, + y: initPos.y - node.y, + z: initPos.z - node.z + }; + + if (initFixedPos) { + ['x', 'y', 'z'].forEach(function (c) { + var fc = "f".concat(c); + + if (initFixedPos[fc] === undefined) { + delete node[fc]; + } + }); + delete node.__initialFixedPos; + delete node.__initialPos; + + if (node.__dragged) { + delete node.__dragged; + state.onNodeDragEnd(node, translate); + } + } + + state.forceGraph.d3AlphaTarget(0) // release engine low intensity + .resetCountdown(); // let the engine readjust after releasing fixed nodes + + if (state.enableNavigationControls) { + controls.enabled = true; // Re-enable controls + + controls.domElement && controls.domElement.ownerDocument && controls.domElement.ownerDocument.dispatchEvent( // simulate mouseup to ensure the controls don't take over after dragend + new PointerEvent('pointerup', { + pointerType: 'mouse' + })); + } // clear cursor + + + renderer.domElement.classList.remove('grabbable'); + }); + } + }); // config renderObjs + + state.renderObjs.objects([// Populate scene + new three.AmbientLight(0xbbbbbb), new three.DirectionalLight(0xffffff, 0.6), state.forceGraph]).hoverOrderComparator(function (a, b) { + // Prioritize graph objects + var aObj = getGraphObj(a); + if (!aObj) return 1; + var bObj = getGraphObj(b); + if (!bObj) return -1; // Prioritize nodes over links + + var isNode = function isNode(o) { + return o.__graphObjType === 'node'; + }; + + return isNode(bObj) - isNode(aObj); + }).tooltipContent(function (obj) { + var graphObj = getGraphObj(obj); + return graphObj ? index$1(state["".concat(graphObj.__graphObjType, "Label")])(graphObj.__data) || '' : ''; + }).hoverDuringDrag(false).onHover(function (obj) { + // Update tooltip and trigger onHover events + var hoverObj = getGraphObj(obj); + + if (hoverObj !== state.hoverObj) { + var prevObjType = state.hoverObj ? state.hoverObj.__graphObjType : null; + var prevObjData = state.hoverObj ? state.hoverObj.__data : null; + var objType = hoverObj ? hoverObj.__graphObjType : null; + var objData = hoverObj ? hoverObj.__data : null; + + if (prevObjType && prevObjType !== objType) { + // Hover out + var fn = state["on".concat(prevObjType === 'node' ? 'Node' : 'Link', "Hover")]; + fn && fn(null, prevObjData); + } + + if (objType) { + // Hover in + var _fn = state["on".concat(objType === 'node' ? 'Node' : 'Link', "Hover")]; + _fn && _fn(objData, prevObjType === objType ? prevObjData : null); + } // set pointer if hovered object is clickable + + + renderer.domElement.classList[hoverObj && state["on".concat(objType === 'node' ? 'Node' : 'Link', "Click")] || !hoverObj && state.onBackgroundClick ? 'add' : 'remove']('clickable'); + state.hoverObj = hoverObj; + } + }).clickAfterDrag(false).onClick(function (obj, ev) { + var graphObj = getGraphObj(obj); + + if (graphObj) { + var fn = state["on".concat(graphObj.__graphObjType === 'node' ? 'Node' : 'Link', "Click")]; + fn && fn(graphObj.__data, ev); + } else { + state.onBackgroundClick && state.onBackgroundClick(ev); + } + }).onRightClick(function (obj, ev) { + // Handle right-click events + var graphObj = getGraphObj(obj); + + if (graphObj) { + var fn = state["on".concat(graphObj.__graphObjType === 'node' ? 'Node' : 'Link', "RightClick")]; + fn && fn(graphObj.__data, ev); + } else { + state.onBackgroundRightClick && state.onBackgroundRightClick(ev); + } + }); // + // Kick-off renderer + + this._animationCycle(); + } + }); // + + function getGraphObj(object) { + var obj = object; // recurse up object chain until finding the graph object + + while (obj && !obj.hasOwnProperty('__graphObjType')) { + obj = obj.parent; + } + + return obj; + } + + return _3dForceGraph; + +}))); +//# sourceMappingURL=3d-force-graph.js.map diff --git a/src/citationnet/static/lib/3d-force-graph.js.map b/src/citationnet/static/lib/3d-force-graph.js.map new file mode 100644 index 0000000..95802c9 --- /dev/null +++ b/src/citationnet/static/lib/3d-force-graph.js.map @@ -0,0 +1 @@ +{"version":3,"file":"3d-force-graph.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../node_modules/three/build/three.module.js","../node_modules/three/examples/jsm/controls/DragControls.js","../node_modules/d3-force-3d/src/center.js","../node_modules/d3-binarytree/src/add.js","../node_modules/d3-binarytree/src/cover.js","../node_modules/d3-binarytree/src/data.js","../node_modules/d3-binarytree/src/extent.js","../node_modules/d3-binarytree/src/half.js","../node_modules/d3-binarytree/src/find.js","../node_modules/d3-binarytree/src/remove.js","../node_modules/d3-binarytree/src/root.js","../node_modules/d3-binarytree/src/size.js","../node_modules/d3-binarytree/src/visit.js","../node_modules/d3-binarytree/src/visitAfter.js","../node_modules/d3-binarytree/src/x.js","../node_modules/d3-binarytree/src/binarytree.js","../node_modules/d3-quadtree/src/add.js","../node_modules/d3-quadtree/src/cover.js","../node_modules/d3-quadtree/src/data.js","../node_modules/d3-quadtree/src/extent.js","../node_modules/d3-quadtree/src/quad.js","../node_modules/d3-quadtree/src/find.js","../node_modules/d3-quadtree/src/remove.js","../node_modules/d3-quadtree/src/root.js","../node_modules/d3-quadtree/src/size.js","../node_modules/d3-quadtree/src/visit.js","../node_modules/d3-quadtree/src/visitAfter.js","../node_modules/d3-quadtree/src/x.js","../node_modules/d3-quadtree/src/y.js","../node_modules/d3-quadtree/src/quadtree.js","../node_modules/d3-octree/src/add.js","../node_modules/d3-octree/src/cover.js","../node_modules/d3-octree/src/data.js","../node_modules/d3-octree/src/extent.js","../node_modules/d3-octree/src/octant.js","../node_modules/d3-octree/src/find.js","../node_modules/d3-octree/src/remove.js","../node_modules/d3-octree/src/root.js","../node_modules/d3-octree/src/size.js","../node_modules/d3-octree/src/visit.js","../node_modules/d3-octree/src/visitAfter.js","../node_modules/d3-octree/src/x.js","../node_modules/d3-octree/src/y.js","../node_modules/d3-octree/src/z.js","../node_modules/d3-octree/src/octree.js","../node_modules/d3-force-3d/src/constant.js","../node_modules/d3-force-3d/src/jiggle.js","../node_modules/d3-force-3d/src/link.js","../node_modules/d3-dispatch/src/dispatch.js","../node_modules/d3-timer/src/timer.js","../node_modules/d3-force-3d/src/lcg.js","../node_modules/d3-force-3d/src/simulation.js","../node_modules/d3-force-3d/src/manyBody.js","../node_modules/d3-force-3d/src/radial.js","../node_modules/ngraph.events/index.js","../node_modules/ngraph.graph/index.js","../node_modules/ngraph.forcelayout/lib/codeGenerators/getVariableName.js","../node_modules/ngraph.forcelayout/lib/codeGenerators/createPatternBuilder.js","../node_modules/ngraph.forcelayout/lib/codeGenerators/generateCreateBody.js","../node_modules/ngraph.forcelayout/lib/codeGenerators/generateQuadTree.js","../node_modules/ngraph.forcelayout/lib/codeGenerators/generateBounds.js","../node_modules/ngraph.forcelayout/lib/codeGenerators/generateCreateDragForce.js","../node_modules/ngraph.forcelayout/lib/codeGenerators/generateCreateSpringForce.js","../node_modules/ngraph.forcelayout/lib/codeGenerators/generateIntegrator.js","../node_modules/ngraph.forcelayout/lib/spring.js","../node_modules/ngraph.merge/index.js","../node_modules/ngraph.random/index.js","../node_modules/ngraph.forcelayout/lib/createPhysicsSimulator.js","../node_modules/ngraph.forcelayout/index.js","../node_modules/debounce/index.js","../node_modules/kapsule/dist/kapsule.module.js","../node_modules/accessor-fn/dist/accessor-fn.module.js","../node_modules/d3-array/src/max.js","../node_modules/d3-array/src/min.js","../node_modules/index-array-by/dist/index-array-by.module.js","../node_modules/data-joint/dist/data-joint.module.js","../node_modules/d3-scale/src/init.js","../node_modules/d3-scale/src/ordinal.js","../node_modules/d3-scale-chromatic/src/colors.js","../node_modules/d3-scale-chromatic/src/categorical/Paired.js","../node_modules/tinycolor2/tinycolor.js","../node_modules/three-forcegraph/dist/three-forcegraph.module.js","../node_modules/three/examples/jsm/controls/TrackballControls.js","../node_modules/three/examples/jsm/controls/OrbitControls.js","../node_modules/three/examples/jsm/controls/FlyControls.js","../node_modules/three/examples/jsm/shaders/CopyShader.js","../node_modules/three/examples/jsm/postprocessing/Pass.js","../node_modules/three/examples/jsm/postprocessing/ShaderPass.js","../node_modules/three/examples/jsm/postprocessing/MaskPass.js","../node_modules/three/examples/jsm/postprocessing/EffectComposer.js","../node_modules/three/examples/jsm/postprocessing/RenderPass.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/esm/construct.js","../node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../node_modules/polished/dist/polished.esm.js","../node_modules/@tweenjs/tween.js/dist/tween.esm.js","../node_modules/three-render-objects/dist/three-render-objects.module.js","../src/kapsule-link.js","../src/3d-force-graph.js"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","// threejs.org/license\nconst REVISION = '123';\nconst MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };\nconst TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };\nconst CullFaceNone = 0;\nconst CullFaceBack = 1;\nconst CullFaceFront = 2;\nconst CullFaceFrontBack = 3;\nconst BasicShadowMap = 0;\nconst PCFShadowMap = 1;\nconst PCFSoftShadowMap = 2;\nconst VSMShadowMap = 3;\nconst FrontSide = 0;\nconst BackSide = 1;\nconst DoubleSide = 2;\nconst FlatShading = 1;\nconst SmoothShading = 2;\nconst NoBlending = 0;\nconst NormalBlending = 1;\nconst AdditiveBlending = 2;\nconst SubtractiveBlending = 3;\nconst MultiplyBlending = 4;\nconst CustomBlending = 5;\nconst AddEquation = 100;\nconst SubtractEquation = 101;\nconst ReverseSubtractEquation = 102;\nconst MinEquation = 103;\nconst MaxEquation = 104;\nconst ZeroFactor = 200;\nconst OneFactor = 201;\nconst SrcColorFactor = 202;\nconst OneMinusSrcColorFactor = 203;\nconst SrcAlphaFactor = 204;\nconst OneMinusSrcAlphaFactor = 205;\nconst DstAlphaFactor = 206;\nconst OneMinusDstAlphaFactor = 207;\nconst DstColorFactor = 208;\nconst OneMinusDstColorFactor = 209;\nconst SrcAlphaSaturateFactor = 210;\nconst NeverDepth = 0;\nconst AlwaysDepth = 1;\nconst LessDepth = 2;\nconst LessEqualDepth = 3;\nconst EqualDepth = 4;\nconst GreaterEqualDepth = 5;\nconst GreaterDepth = 6;\nconst NotEqualDepth = 7;\nconst MultiplyOperation = 0;\nconst MixOperation = 1;\nconst AddOperation = 2;\nconst NoToneMapping = 0;\nconst LinearToneMapping = 1;\nconst ReinhardToneMapping = 2;\nconst CineonToneMapping = 3;\nconst ACESFilmicToneMapping = 4;\nconst CustomToneMapping = 5;\n\nconst UVMapping = 300;\nconst CubeReflectionMapping = 301;\nconst CubeRefractionMapping = 302;\nconst EquirectangularReflectionMapping = 303;\nconst EquirectangularRefractionMapping = 304;\nconst CubeUVReflectionMapping = 306;\nconst CubeUVRefractionMapping = 307;\nconst RepeatWrapping = 1000;\nconst ClampToEdgeWrapping = 1001;\nconst MirroredRepeatWrapping = 1002;\nconst NearestFilter = 1003;\nconst NearestMipmapNearestFilter = 1004;\nconst NearestMipMapNearestFilter = 1004;\nconst NearestMipmapLinearFilter = 1005;\nconst NearestMipMapLinearFilter = 1005;\nconst LinearFilter = 1006;\nconst LinearMipmapNearestFilter = 1007;\nconst LinearMipMapNearestFilter = 1007;\nconst LinearMipmapLinearFilter = 1008;\nconst LinearMipMapLinearFilter = 1008;\nconst UnsignedByteType = 1009;\nconst ByteType = 1010;\nconst ShortType = 1011;\nconst UnsignedShortType = 1012;\nconst IntType = 1013;\nconst UnsignedIntType = 1014;\nconst FloatType = 1015;\nconst HalfFloatType = 1016;\nconst UnsignedShort4444Type = 1017;\nconst UnsignedShort5551Type = 1018;\nconst UnsignedShort565Type = 1019;\nconst UnsignedInt248Type = 1020;\nconst AlphaFormat = 1021;\nconst RGBFormat = 1022;\nconst RGBAFormat = 1023;\nconst LuminanceFormat = 1024;\nconst LuminanceAlphaFormat = 1025;\nconst RGBEFormat = RGBAFormat;\nconst DepthFormat = 1026;\nconst DepthStencilFormat = 1027;\nconst RedFormat = 1028;\nconst RedIntegerFormat = 1029;\nconst RGFormat = 1030;\nconst RGIntegerFormat = 1031;\nconst RGBIntegerFormat = 1032;\nconst RGBAIntegerFormat = 1033;\n\nconst RGB_S3TC_DXT1_Format = 33776;\nconst RGBA_S3TC_DXT1_Format = 33777;\nconst RGBA_S3TC_DXT3_Format = 33778;\nconst RGBA_S3TC_DXT5_Format = 33779;\nconst RGB_PVRTC_4BPPV1_Format = 35840;\nconst RGB_PVRTC_2BPPV1_Format = 35841;\nconst RGBA_PVRTC_4BPPV1_Format = 35842;\nconst RGBA_PVRTC_2BPPV1_Format = 35843;\nconst RGB_ETC1_Format = 36196;\nconst RGB_ETC2_Format = 37492;\nconst RGBA_ETC2_EAC_Format = 37496;\nconst RGBA_ASTC_4x4_Format = 37808;\nconst RGBA_ASTC_5x4_Format = 37809;\nconst RGBA_ASTC_5x5_Format = 37810;\nconst RGBA_ASTC_6x5_Format = 37811;\nconst RGBA_ASTC_6x6_Format = 37812;\nconst RGBA_ASTC_8x5_Format = 37813;\nconst RGBA_ASTC_8x6_Format = 37814;\nconst RGBA_ASTC_8x8_Format = 37815;\nconst RGBA_ASTC_10x5_Format = 37816;\nconst RGBA_ASTC_10x6_Format = 37817;\nconst RGBA_ASTC_10x8_Format = 37818;\nconst RGBA_ASTC_10x10_Format = 37819;\nconst RGBA_ASTC_12x10_Format = 37820;\nconst RGBA_ASTC_12x12_Format = 37821;\nconst RGBA_BPTC_Format = 36492;\nconst SRGB8_ALPHA8_ASTC_4x4_Format = 37840;\nconst SRGB8_ALPHA8_ASTC_5x4_Format = 37841;\nconst SRGB8_ALPHA8_ASTC_5x5_Format = 37842;\nconst SRGB8_ALPHA8_ASTC_6x5_Format = 37843;\nconst SRGB8_ALPHA8_ASTC_6x6_Format = 37844;\nconst SRGB8_ALPHA8_ASTC_8x5_Format = 37845;\nconst SRGB8_ALPHA8_ASTC_8x6_Format = 37846;\nconst SRGB8_ALPHA8_ASTC_8x8_Format = 37847;\nconst SRGB8_ALPHA8_ASTC_10x5_Format = 37848;\nconst SRGB8_ALPHA8_ASTC_10x6_Format = 37849;\nconst SRGB8_ALPHA8_ASTC_10x8_Format = 37850;\nconst SRGB8_ALPHA8_ASTC_10x10_Format = 37851;\nconst SRGB8_ALPHA8_ASTC_12x10_Format = 37852;\nconst SRGB8_ALPHA8_ASTC_12x12_Format = 37853;\nconst LoopOnce = 2200;\nconst LoopRepeat = 2201;\nconst LoopPingPong = 2202;\nconst InterpolateDiscrete = 2300;\nconst InterpolateLinear = 2301;\nconst InterpolateSmooth = 2302;\nconst ZeroCurvatureEnding = 2400;\nconst ZeroSlopeEnding = 2401;\nconst WrapAroundEnding = 2402;\nconst NormalAnimationBlendMode = 2500;\nconst AdditiveAnimationBlendMode = 2501;\nconst TrianglesDrawMode = 0;\nconst TriangleStripDrawMode = 1;\nconst TriangleFanDrawMode = 2;\nconst LinearEncoding = 3000;\nconst sRGBEncoding = 3001;\nconst GammaEncoding = 3007;\nconst RGBEEncoding = 3002;\nconst LogLuvEncoding = 3003;\nconst RGBM7Encoding = 3004;\nconst RGBM16Encoding = 3005;\nconst RGBDEncoding = 3006;\nconst BasicDepthPacking = 3200;\nconst RGBADepthPacking = 3201;\nconst TangentSpaceNormalMap = 0;\nconst ObjectSpaceNormalMap = 1;\n\nconst ZeroStencilOp = 0;\nconst KeepStencilOp = 7680;\nconst ReplaceStencilOp = 7681;\nconst IncrementStencilOp = 7682;\nconst DecrementStencilOp = 7683;\nconst IncrementWrapStencilOp = 34055;\nconst DecrementWrapStencilOp = 34056;\nconst InvertStencilOp = 5386;\n\nconst NeverStencilFunc = 512;\nconst LessStencilFunc = 513;\nconst EqualStencilFunc = 514;\nconst LessEqualStencilFunc = 515;\nconst GreaterStencilFunc = 516;\nconst NotEqualStencilFunc = 517;\nconst GreaterEqualStencilFunc = 518;\nconst AlwaysStencilFunc = 519;\n\nconst StaticDrawUsage = 35044;\nconst DynamicDrawUsage = 35048;\nconst StreamDrawUsage = 35040;\nconst StaticReadUsage = 35045;\nconst DynamicReadUsage = 35049;\nconst StreamReadUsage = 35041;\nconst StaticCopyUsage = 35046;\nconst DynamicCopyUsage = 35050;\nconst StreamCopyUsage = 35042;\n\nconst GLSL1 = \"100\";\nconst GLSL3 = \"300 es\";\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nfunction EventDispatcher() {}\n\nObject.assign( EventDispatcher.prototype, {\n\n\taddEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t},\n\n\thasEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tconst listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t},\n\n\tremoveEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tconst index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tdispatchEvent: function ( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nconst _lut = [];\n\nfor ( let i = 0; i < 256; i ++ ) {\n\n\t_lut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 );\n\n}\n\nlet _seed = 1234567;\n\nconst MathUtils = {\n\n\tDEG2RAD: Math.PI / 180,\n\tRAD2DEG: 180 / Math.PI,\n\n\tgenerateUUID: function () {\n\n\t\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n\t\tconst d0 = Math.random() * 0xffffffff | 0;\n\t\tconst d1 = Math.random() * 0xffffffff | 0;\n\t\tconst d2 = Math.random() * 0xffffffff | 0;\n\t\tconst d3 = Math.random() * 0xffffffff | 0;\n\t\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t\t// .toUpperCase() here flattens concatenated strings to save heap memory space.\n\t\treturn uuid.toUpperCase();\n\n\t},\n\n\tclamp: function ( value, min, max ) {\n\n\t\treturn Math.max( min, Math.min( max, value ) );\n\n\t},\n\n\t// compute euclidian modulo of m % n\n\t// https://en.wikipedia.org/wiki/Modulo_operation\n\n\teuclideanModulo: function ( n, m ) {\n\n\t\treturn ( ( n % m ) + m ) % m;\n\n\t},\n\n\t// Linear mapping from range to range \n\n\tmapLinear: function ( x, a1, a2, b1, b2 ) {\n\n\t\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n\t},\n\n\t// https://en.wikipedia.org/wiki/Linear_interpolation\n\n\tlerp: function ( x, y, t ) {\n\n\t\treturn ( 1 - t ) * x + t * y;\n\n\t},\n\n\t// http://en.wikipedia.org/wiki/Smoothstep\n\n\tsmoothstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * ( 3 - 2 * x );\n\n\t},\n\n\tsmootherstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n\t},\n\n\t// Random integer from interval\n\n\trandInt: function ( low, high ) {\n\n\t\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n\t},\n\n\t// Random float from interval\n\n\trandFloat: function ( low, high ) {\n\n\t\treturn low + Math.random() * ( high - low );\n\n\t},\n\n\t// Random float from <-range/2, range/2> interval\n\n\trandFloatSpread: function ( range ) {\n\n\t\treturn range * ( 0.5 - Math.random() );\n\n\t},\n\n\t// Deterministic pseudo-random float in the interval [ 0, 1 ]\n\n\tseededRandom: function ( s ) {\n\n\t\tif ( s !== undefined ) _seed = s % 2147483647;\n\n\t\t// Park-Miller algorithm\n\n\t\t_seed = _seed * 16807 % 2147483647;\n\n\t\treturn ( _seed - 1 ) / 2147483646;\n\n\t},\n\n\tdegToRad: function ( degrees ) {\n\n\t\treturn degrees * MathUtils.DEG2RAD;\n\n\t},\n\n\tradToDeg: function ( radians ) {\n\n\t\treturn radians * MathUtils.RAD2DEG;\n\n\t},\n\n\tisPowerOfTwo: function ( value ) {\n\n\t\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n\t},\n\n\tceilPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n\t},\n\n\tfloorPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n\t},\n\n\tsetQuaternionFromProperEuler: function ( q, a, b, c, order ) {\n\n\t\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t\t// rotations are applied to the axes in the order specified by 'order'\n\t\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t\t// angles are in radians\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c2 = cos( b / 2 );\n\t\tconst s2 = sin( b / 2 );\n\n\t\tconst c13 = cos( ( a + c ) / 2 );\n\t\tconst s13 = sin( ( a + c ) / 2 );\n\n\t\tconst c1_3 = cos( ( a - c ) / 2 );\n\t\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\t\tconst c3_1 = cos( ( c - a ) / 2 );\n\t\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYX':\n\t\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZY':\n\t\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXZ':\n\t\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZX':\n\t\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXY':\n\t\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYZ':\n\t\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t}\n\n};\n\nclass Vector2 {\n\n\tconstructor( x = 0, y = 0 ) {\n\n\t\tObject.defineProperty( this, 'isVector2', { value: true } );\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.x;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.x = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.y;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.y = value;\n\n\t}\n\n\tset( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tangle() {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tconst angle = Math.atan2( - this.y, - this.x ) + Math.PI;\n\n\t\treturn angle;\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t}\n\n\trotateAround( center, angle ) {\n\n\t\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tconst x = this.x - center.x;\n\t\tconst y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Matrix3 {\n\n\tconstructor() {\n\n\t\tObject.defineProperty( this, 'isMatrix3', { value: true } );\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t];\n\n\t\tif ( arguments.length > 0 ) {\n\n\t\t\tconsole.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix4( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t}\n\n\tinvert() {\n\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\ttranspose() {\n\n\t\tlet tmp;\n\t\tconst m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tgetNormalMatrix( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).copy( this ).invert().transpose();\n\n\t}\n\n\ttransposeIntoArray( r ) {\n\n\t\tconst m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tconst c = Math.cos( rotation );\n\t\tconst s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t}\n\n\tscale( sx, sy ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx;\n\t\tte[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy;\n\n\t\treturn this;\n\n\t}\n\n\trotate( theta ) {\n\n\t\tconst c = Math.cos( theta );\n\t\tconst s = Math.sin( theta );\n\n\t\tconst te = this.elements;\n\n\t\tconst a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];\n\t\tconst a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ];\n\n\t\tte[ 0 ] = c * a11 + s * a21;\n\t\tte[ 3 ] = c * a12 + s * a22;\n\t\tte[ 6 ] = c * a13 + s * a23;\n\n\t\tte[ 1 ] = - s * a11 + c * a21;\n\t\tte[ 4 ] = - s * a12 + c * a22;\n\t\tte[ 7 ] = - s * a13 + c * a23;\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( tx, ty ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ];\n\t\tte[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nlet _canvas;\n\nconst ImageUtils = {\n\n\tgetDataURL: function ( image ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement == 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n};\n\nlet textureId = 0;\n\nfunction Texture( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1, encoding = LinearEncoding ) {\n\n\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\n\tthis.image = image;\n\tthis.mipmaps = [];\n\n\tthis.mapping = mapping;\n\n\tthis.wrapS = wrapS;\n\tthis.wrapT = wrapT;\n\n\tthis.magFilter = magFilter;\n\tthis.minFilter = minFilter;\n\n\tthis.anisotropy = anisotropy;\n\n\tthis.format = format;\n\tthis.internalFormat = null;\n\tthis.type = type;\n\n\tthis.offset = new Vector2( 0, 0 );\n\tthis.repeat = new Vector2( 1, 1 );\n\tthis.center = new Vector2( 0, 0 );\n\tthis.rotation = 0;\n\n\tthis.matrixAutoUpdate = true;\n\tthis.matrix = new Matrix3();\n\n\tthis.generateMipmaps = true;\n\tthis.premultiplyAlpha = false;\n\tthis.flipY = true;\n\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t//\n\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\tthis.encoding = encoding;\n\n\tthis.version = 0;\n\tthis.onUpdate = null;\n\n}\n\nTexture.DEFAULT_IMAGE = undefined;\nTexture.DEFAULT_MAPPING = UVMapping;\n\nTexture.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Texture,\n\n\tisTexture: true,\n\n\tupdateMatrix: function () {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.image = source.image;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.internalFormat = source.internalFormat;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.encoding = source.encoding;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\tmapping: this.mapping,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\ttype: this.type,\n\t\t\tencoding: this.encoding,\n\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY,\n\n\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\n\n\t\t};\n\n\t\tif ( this.image !== undefined ) {\n\n\t\t\t// TODO: Move to THREE.Image\n\n\t\t\tconst image = this.image;\n\n\t\t\tif ( image.uuid === undefined ) {\n\n\t\t\t\timage.uuid = MathUtils.generateUUID(); // UGH\n\n\t\t\t}\n\n\t\t\tif ( ! isRootObject && meta.images[ image.uuid ] === undefined ) {\n\n\t\t\t\tlet url;\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\t// process array of images e.g. CubeTexture\n\n\t\t\t\t\turl = [];\n\n\t\t\t\t\tfor ( let i = 0, l = image.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t// check cube texture with data textures\n\n\t\t\t\t\t\tif ( image[ i ].isDataTexture ) {\n\n\t\t\t\t\t\t\turl.push( serializeImage( image[ i ].image ) );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\turl.push( serializeImage( image[ i ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// process single image\n\n\t\t\t\t\turl = serializeImage( image );\n\n\t\t\t\t}\n\n\t\t\t\tmeta.images[ image.uuid ] = {\n\t\t\t\t\tuuid: image.uuid,\n\t\t\t\t\turl: url\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\toutput.image = image.uuid;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t},\n\n\ttransformUv: function ( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t\treturn uv;\n\n\t}\n\n} );\n\nObject.defineProperty( Texture.prototype, \"needsUpdate\", {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.prototype.slice.call( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nclass Vector4 {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tObject.defineProperty( this, 'isVector4', { value: true } );\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.z;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.z = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.w;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.w = value;\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tsetAxisAngleFromQuaternion( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tconst s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetAxisAngleFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tlet angle, x, y, z; // variables for result\n\t\tconst epsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tconst xx = ( m11 + 1 ) / 2;\n\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\tconst yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\t\t( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\t\tthis.w = Math.max( minVal, Math.min( maxVal, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\t\tthis.w = Math.random();\n\n\t\treturn this;\n\n\t}\n\n}\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nfunction WebGLRenderTarget( width, height, options ) {\n\n\tthis.width = width;\n\tthis.height = height;\n\n\tthis.scissor = new Vector4( 0, 0, width, height );\n\tthis.scissorTest = false;\n\n\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\toptions = options || {};\n\n\tthis.texture = new Texture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\tthis.texture.image = {};\n\tthis.texture.image.width = width;\n\tthis.texture.image.height = height;\n\n\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false;\n\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n}\n\nWebGLRenderTarget.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: WebGLRenderTarget,\n\n\tisWebGLRenderTarget: true,\n\n\tsetSize: function ( width, height ) {\n\n\t\tif ( this.width !== width || this.height !== height ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\n\t\t\tthis.texture.image.width = width;\n\t\t\tthis.texture.image.height = height;\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.texture = source.texture.clone();\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\t\tthis.depthTexture = source.depthTexture;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\nfunction WebGLMultisampleRenderTarget( width, height, options ) {\n\n\tWebGLRenderTarget.call( this, width, height, options );\n\n\tthis.samples = 4;\n\n}\n\nWebGLMultisampleRenderTarget.prototype = Object.assign( Object.create( WebGLRenderTarget.prototype ), {\n\n\tconstructor: WebGLMultisampleRenderTarget,\n\n\tisWebGLMultisampleRenderTarget: true,\n\n\tcopy: function ( source ) {\n\n\t\tWebGLRenderTarget.prototype.copy.call( this, source );\n\n\t\tthis.samples = source.samples;\n\n\t\treturn this;\n\n\t}\n\n} );\n\nclass Quaternion {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tObject.defineProperty( this, 'isQuaternion', { value: true } );\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\tstatic slerp( qa, qb, qm, t ) {\n\n\t\treturn qm.copy( qa ).slerp( qb, t );\n\n\t}\n\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tconst sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tconst tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\tcopy( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromEuler( euler, update ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tthrow new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update !== false ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAxisAngle( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tconst EPS = 0.000001;\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < EPS ) {\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( MathUtils.clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\tinvert() {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t}\n\n\tconjugate() {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t}\n\n\tnormalize() {\n\n\t\tlet l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( q, p ) {\n\n\t\tif ( p !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );\n\t\t\treturn this.multiplyQuaternions( q, p );\n\n\t\t}\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t}\n\n\tpremultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerp( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tconst x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tlet cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize();\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tequals( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis._x = attribute.getX( index );\n\t\tthis._y = attribute.getY( index );\n\t\tthis._z = attribute.getZ( index );\n\t\tthis._w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n}\n\nclass Vector3 {\n\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\tObject.defineProperty( this, 'isVector3', { value: true } );\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t}\n\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );\n\t\t\treturn this.multiplyVectors( v, w );\n\n\t\t}\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyVectors( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyEuler( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\treturn this.applyQuaternion( _quaternion.setFromEuler( euler ) );\n\n\t}\n\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tconst ix = qw * x + qy * z - qz * y;\n\t\tconst iy = qw * y + qz * x - qx * z;\n\t\tconst iz = qw * z + qx * y - qy * x;\n\t\tconst iw = - qx * x - qy * y - qz * z;\n\n\t\t// calculate result * inverse quat\n\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\treturn this;\n\n\t}\n\n\tproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t}\n\n\t// TODO lengthSquared?\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tcross( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );\n\t\t\treturn this.crossVectors( v, w );\n\n\t\t}\n\n\t\treturn this.crossVectors( this, v );\n\n\t}\n\n\tcrossVectors( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t}\n\n\tprojectOnVector( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector );\n\n\t}\n\n\treflect( normal ) {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\treturn this.sub( _vector.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( MathUtils.clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t}\n\n\tsetFromSpherical( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixScale( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixColumn( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\n\nclass Box3 {\n\n\tconstructor( min, max ) {\n\n\t\tObject.defineProperty( this, 'isBox3', { value: true } );\n\n\t\tthis.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity );\n\t\tthis.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity );\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromArray( array ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tconst x = array[ i ];\n\t\t\tconst y = array[ i + 1 ];\n\t\t\tconst z = array[ i + 2 ];\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromBufferAttribute( attribute ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\tconst x = attribute.getX( i );\n\t\t\tconst y = attribute.getY( i );\n\t\t\tconst z = attribute.getZ( i );\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$1.copy( size ).multiplyScalar( 0.5 );\n\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getSize() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\texpandByObject( object ) {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t}\n\n\t\t\t_box.copy( geometry.boundingBox );\n\t\t\t_box.applyMatrix4( object.matrixWorld );\n\n\t\t\tthis.union( _box );\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis.expandByObject( children[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getParameter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector$1 );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector$1.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tlet min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t}\n\n\tintersectsTriangle( triangle ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// compute box center and extents\n\t\tthis.getCenter( _center );\n\t\t_extents.subVectors( this.max, _center );\n\n\t\t// translate triangle to aabb origin\n\t\t_v0.subVectors( triangle.a, _center );\n\t\t_v1.subVectors( triangle.b, _center );\n\t\t_v2.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1, _v0 );\n\t\t_f1.subVectors( _v2, _v1 );\n\t\t_f2.subVectors( _v0, _v2 );\n\n\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t// 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\n\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\tlet axes = [\n\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t];\n\t\tif ( ! satForAxes( axes, _v0, _v1, _v2, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// test 3 face normals from the aabb\n\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\tif ( ! satForAxes( axes, _v0, _v1, _v2, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// finally testing the face normal of the triangle\n\t\t// use already existing triangle edge vectors here\n\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\treturn satForAxes( axes, _v0, _v1, _v2, _extents );\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\tconst clampedPoint = _vector$1.copy( point ).clamp( this.min, this.max );\n\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tgetBoundingSphere( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Box3: .getBoundingSphere() target is now required' );\n\t\t\t//target = new Sphere(); // removed to avoid cyclic dependency\n\n\t\t}\n\n\t\tthis.getCenter( target.center );\n\n\t\ttarget.radius = this.getSize( _vector$1 ).length() * 0.5;\n\n\t\treturn target;\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// 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.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty() ) return this;\n\n\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\tthis.setFromPoints( _points );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t_testAxis.fromArray( axes, i );\n\t\t// project the aabb onto the seperating axis\n\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t// project all 3 vertices of the triangle onto the seperating axis\n\t\tconst p0 = v0.dot( _testAxis );\n\t\tconst p1 = v1.dot( _testAxis );\n\t\tconst p2 = v2.dot( _testAxis );\n\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t// the axis is seperating and we can exit\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nconst _points = [\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3()\n];\n\nconst _vector$1 = /*@__PURE__*/ new Vector3();\n\nconst _box = /*@__PURE__*/ new Box3();\n\n// triangle centered vertices\n\nconst _v0 = /*@__PURE__*/ new Vector3();\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = /*@__PURE__*/ new Vector3();\nconst _f1 = /*@__PURE__*/ new Vector3();\nconst _f2 = /*@__PURE__*/ new Vector3();\n\nconst _center = /*@__PURE__*/ new Vector3();\nconst _extents = /*@__PURE__*/ new Vector3();\nconst _triangleNormal = /*@__PURE__*/ new Vector3();\nconst _testAxis = /*@__PURE__*/ new Vector3();\n\nconst _box$1 = /*@__PURE__*/ new Box3();\n\nclass Sphere {\n\n\tconstructor( center, radius ) {\n\n\t\tthis.center = ( center !== undefined ) ? center : new Vector3();\n\t\tthis.radius = ( radius !== undefined ) ? radius : - 1;\n\n\t}\n\n\tset( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points, optionalCenter ) {\n\n\t\tconst center = this.center;\n\n\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\tcenter.copy( optionalCenter );\n\n\t\t} else {\n\n\t\t\t_box$1.setFromPoints( points ).getCenter( center );\n\n\t\t}\n\n\t\tlet maxRadiusSq = 0;\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t}\n\n\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\treturn ( this.radius < 0 );\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.center.set( 0, 0, 0 );\n\t\tthis.radius = - 1;\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tconst deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .getBoundingBox() target is now required' );\n\t\t\ttarget = new Box3();\n\n\t\t}\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\t// Empty sphere produces empty bounding box\n\t\t\ttarget.makeEmpty();\n\t\t\treturn target;\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n}\n\nconst _vector$2 = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal = /*@__PURE__*/ new Vector3();\n\nclass Ray {\n\n\tconstructor( origin, direction ) {\n\n\t\tthis.origin = ( origin !== undefined ) ? origin : new Vector3();\n\t\tthis.direction = ( direction !== undefined ) ? direction : new Vector3( 0, 0, - 1 );\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t}\n\n\tat( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t}\n\n\tlookAt( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector$2 ) );\n\n\t\treturn this;\n\n\t}\n\n\tclosestPointToPoint( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tconst directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector$2.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector$2.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\treturn _vector$2.distanceToSquared( point );\n\n\t}\n\n\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segDir ).multiplyScalar( s1 ).add( _segCenter );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t}\n\n\tintersectSphere( sphere, target ) {\n\n\t\t_vector$2.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector$2.dot( this.direction );\n\t\tconst d2 = _vector$2.dot( _vector$2 ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tdistanceToPlane( plane ) {\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t}\n\n\tintersectPlane( plane, target ) {\n\n\t\tconst t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t}\n\n\tintersectBox( box, target ) {\n\n\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\t// These lines also handle the case where tmin or tmax is NaN\n\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\n\n\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\n\n\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn this.intersectBox( box, _vector$2 ) !== null;\n\n\t}\n\n\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = - 1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\n\n\t}\n\n\tapplyMatrix4( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t}\n\n\tequals( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n}\n\nclass Matrix4 {\n\n\tconstructor() {\n\n\t\tObject.defineProperty( this, 'isMatrix4', { value: true } );\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t];\n\n\t\tif ( arguments.length > 0 ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tcopyPosition( m ) {\n\n\t\tconst te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmakeBasis( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractRotation( m ) {\n\n\t\t// this method does not support reflection matrices\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tconst scaleX = 1 / _v1$1.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1$1.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1$1.setFromMatrixColumn( m, 2 ).length();\n\n\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromEuler( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tconst te = this.elements;\n\n\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromQuaternion( q ) {\n\n\t\treturn this.compose( _zero, q, _one );\n\n\t}\n\n\tlookAt( eye, target, up ) {\n\n\t\tconst te = this.elements;\n\n\t\t_z.subVectors( eye, target );\n\n\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t// eye and target are in the same position\n\n\t\t\t_z.z = 1;\n\n\t\t}\n\n\t\t_z.normalize();\n\t\t_x.crossVectors( up, _z );\n\n\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t// up and z are parallel\n\n\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t_z.x += 0.0001;\n\n\t\t\t} else {\n\n\t\t\t\t_z.z += 0.0001;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t}\n\n\t\t_x.normalize();\n\t\t_y.crossVectors( _z, _x );\n\n\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m, n ) {\n\n\t\tif ( n !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );\n\t\t\treturn this.multiplyMatrices( m, n );\n\n\t\t}\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tconst b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tconst n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t}\n\n\ttranspose() {\n\n\t\tconst te = this.elements;\n\t\tlet tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tsetPosition( x, y, z ) {\n\n\t\tconst te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tinvert() {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tconst det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\tscale( v ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxScaleOnAxis() {\n\n\t\tconst te = this.elements;\n\n\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tconst scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t}\n\n\tmakeTranslation( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, x,\n\t\t\t0, 1, 0, y,\n\t\t\t0, 0, 1, z,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationX( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationY( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationZ( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationAxis( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tconst c = Math.cos( angle );\n\t\tconst s = Math.sin( angle );\n\t\tconst t = 1 - c;\n\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\tconst tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeShear( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, y, z, 0,\n\t\t\tx, 1, z, 0,\n\t\t\tx, y, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tdecompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tlet sx = _v1$1.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tconst sy = _v1$1.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tconst sz = _v1$1.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t// if determine is negative, we need to invert one scale\n\t\tconst det = this.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\tposition.x = te[ 12 ];\n\t\tposition.y = te[ 13 ];\n\t\tposition.z = te[ 14 ];\n\n\t\t// scale the rotation part\n\t\t_m1.copy( this );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\t_m1.elements[ 0 ] *= invSX;\n\t\t_m1.elements[ 1 ] *= invSX;\n\t\t_m1.elements[ 2 ] *= invSX;\n\n\t\t_m1.elements[ 4 ] *= invSY;\n\t\t_m1.elements[ 5 ] *= invSY;\n\t\t_m1.elements[ 6 ] *= invSY;\n\n\t\t_m1.elements[ 8 ] *= invSZ;\n\t\t_m1.elements[ 9 ] *= invSZ;\n\t\t_m1.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1 );\n\n\t\tscale.x = sx;\n\t\tscale.y = sy;\n\t\tscale.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tmakePerspective( left, right, top, bottom, near, far ) {\n\n\t\tif ( far === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' );\n\n\t\t}\n\n\t\tconst te = this.elements;\n\t\tconst x = 2 * near / ( right - left );\n\t\tconst y = 2 * near / ( top - bottom );\n\n\t\tconst a = ( right + left ) / ( right - left );\n\t\tconst b = ( top + bottom ) / ( top - bottom );\n\t\tconst c = - ( far + near ) / ( far - near );\n\t\tconst d = - 2 * far * near / ( far - near );\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t}\n\n\tmakeOrthographic( left, right, top, bottom, near, far ) {\n\n\t\tconst te = this.elements;\n\t\tconst w = 1.0 / ( right - left );\n\t\tconst h = 1.0 / ( top - bottom );\n\t\tconst p = 1.0 / ( far - near );\n\n\t\tconst x = ( right + left ) * w;\n\t\tconst y = ( top + bottom ) * h;\n\t\tconst z = ( far + near ) * p;\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nconst _v1$1 = /*@__PURE__*/ new Vector3();\nconst _m1 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\nconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nclass Euler {\n\n\tconstructor( x = 0, y = 0, z = 0, order = Euler.DefaultOrder ) {\n\n\t\tObject.defineProperty( this, 'isEuler', { value: true } );\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget order() {\n\n\t\treturn this._order;\n\n\t}\n\n\tset order( value ) {\n\n\t\tthis._order = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order || this._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t}\n\n\tcopy( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m, order, update ) {\n\n\t\tconst clamp = MathUtils.clamp;\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements;\n\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\torder = order || this._order;\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update !== false ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromQuaternion( q, order, update ) {\n\n\t\t_matrix.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix, order, update );\n\n\t}\n\n\tsetFromVector3( v, order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order || this._order );\n\n\t}\n\n\treorder( newOrder ) {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t_quaternion$1.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion$1, newOrder );\n\n\t}\n\n\tequals( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t}\n\n\tfromArray( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t}\n\n\ttoVector3( optionalResult ) {\n\n\t\tif ( optionalResult ) {\n\n\t\t\treturn optionalResult.set( this._x, this._y, this._z );\n\n\t\t} else {\n\n\t\t\treturn new Vector3( this._x, this._y, this._z );\n\n\t\t}\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n}\n\nEuler.DefaultOrder = 'XYZ';\nEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\nconst _matrix = /*@__PURE__*/ new Matrix4();\nconst _quaternion$1 = /*@__PURE__*/ new Quaternion();\n\nclass Layers {\n\n\tconstructor() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tset( channel ) {\n\n\t\tthis.mask = 1 << channel | 0;\n\n\t}\n\n\tenable( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t}\n\n\tenableAll() {\n\n\t\tthis.mask = 0xffffffff | 0;\n\n\t}\n\n\ttoggle( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t}\n\n\tdisable( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t}\n\n\tdisableAll() {\n\n\t\tthis.mask = 0;\n\n\t}\n\n\ttest( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n}\n\nlet _object3DId = 0;\n\nconst _v1$2 = new Vector3();\nconst _q1 = new Quaternion();\nconst _m1$1 = new Matrix4();\nconst _target = new Vector3();\n\nconst _position = new Vector3();\nconst _scale = new Vector3();\nconst _quaternion$2 = new Quaternion();\n\nconst _xAxis = new Vector3( 1, 0, 0 );\nconst _yAxis = new Vector3( 0, 1, 0 );\nconst _zAxis = new Vector3( 0, 0, 1 );\n\nconst _addedEvent = { type: 'added' };\nconst _removedEvent = { type: 'removed' };\n\nfunction Object3D() {\n\n\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Object3D';\n\n\tthis.parent = null;\n\tthis.children = [];\n\n\tthis.up = Object3D.DefaultUp.clone();\n\n\tconst position = new Vector3();\n\tconst rotation = new Euler();\n\tconst quaternion = new Quaternion();\n\tconst scale = new Vector3( 1, 1, 1 );\n\n\tfunction onRotationChange() {\n\n\t\tquaternion.setFromEuler( rotation, false );\n\n\t}\n\n\tfunction onQuaternionChange() {\n\n\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t}\n\n\trotation._onChange( onRotationChange );\n\tquaternion._onChange( onQuaternionChange );\n\n\tObject.defineProperties( this, {\n\t\tposition: {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: position\n\t\t},\n\t\trotation: {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: rotation\n\t\t},\n\t\tquaternion: {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: quaternion\n\t\t},\n\t\tscale: {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: scale\n\t\t},\n\t\tmodelViewMatrix: {\n\t\t\tvalue: new Matrix4()\n\t\t},\n\t\tnormalMatrix: {\n\t\t\tvalue: new Matrix3()\n\t\t}\n\t} );\n\n\tthis.matrix = new Matrix4();\n\tthis.matrixWorld = new Matrix4();\n\n\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\tthis.matrixWorldNeedsUpdate = false;\n\n\tthis.layers = new Layers();\n\tthis.visible = true;\n\n\tthis.castShadow = false;\n\tthis.receiveShadow = false;\n\n\tthis.frustumCulled = true;\n\tthis.renderOrder = 0;\n\n\tthis.animations = [];\n\n\tthis.userData = {};\n\n}\n\nObject3D.DefaultUp = new Vector3( 0, 1, 0 );\nObject3D.DefaultMatrixAutoUpdate = true;\n\nObject3D.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Object3D,\n\n\tisObject3D: true,\n\n\tonBeforeRender: function () {},\n\tonAfterRender: function () {},\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tthis.matrix.premultiply( matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t},\n\n\tapplyQuaternion: function ( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t},\n\n\tsetRotationFromAxisAngle: function ( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t},\n\n\tsetRotationFromEuler: function ( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t},\n\n\tsetRotationFromMatrix: function ( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t},\n\n\tsetRotationFromQuaternion: function ( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t},\n\n\trotateOnAxis: function ( axis, angle ) {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.multiply( _q1 );\n\n\t\treturn this;\n\n\t},\n\n\trotateOnWorldAxis: function ( axis, angle ) {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.premultiply( _q1 );\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function ( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t},\n\n\trotateY: function ( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t},\n\n\trotateZ: function ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t},\n\n\ttranslateOnAxis: function ( axis, distance ) {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_v1$2.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1$2.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t},\n\n\ttranslateX: function ( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t},\n\n\ttranslateY: function ( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t},\n\n\ttranslateZ: function ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t},\n\n\tlocalToWorld: function ( vector ) {\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t},\n\n\tworldToLocal: function ( vector ) {\n\n\t\treturn vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() );\n\n\t},\n\n\tlookAt: function ( x, y, z ) {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\t_target.copy( x );\n\n\t\t} else {\n\n\t\t\t_target.set( x, y, z );\n\n\t\t}\n\n\t\tconst parent = this.parent;\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_position.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1$1.lookAt( _position, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1$1.lookAt( _target, _position, this.up );\n\n\t\t}\n\n\t\tthis.quaternion.setFromRotationMatrix( _m1$1 );\n\n\t\tif ( parent ) {\n\n\t\t\t_m1$1.extractRotation( parent.matrixWorld );\n\t\t\t_q1.setFromRotationMatrix( _m1$1 );\n\t\t\tthis.quaternion.premultiply( _q1.invert() );\n\n\t\t}\n\n\t},\n\n\tadd: function ( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( \"THREE.Object3D.add: object can't be added as a child of itself.\", object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( ( object && object.isObject3D ) ) {\n\n\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\tobject.parent.remove( object );\n\n\t\t\t}\n\n\t\t\tobject.parent = this;\n\t\t\tthis.children.push( object );\n\n\t\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t} else {\n\n\t\t\tconsole.error( \"THREE.Object3D.add: object not an instance of THREE.Object3D.\", object );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tremove: function ( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tclear: function () {\n\n\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\tconst object = this.children[ i ];\n\n\t\t\tobject.parent = null;\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\tthis.children.length = 0;\n\n\t\treturn this;\n\n\n\t},\n\n\tattach: function ( object ) {\n\n\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_m1$1.copy( this.matrixWorld ).invert();\n\n\t\tif ( object.parent !== null ) {\n\n\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t_m1$1.multiply( object.parent.matrixWorld );\n\n\t\t}\n\n\t\tobject.applyMatrix4( _m1$1 );\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tthis.add( object );\n\n\t\treturn this;\n\n\t},\n\n\tgetObjectById: function ( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t},\n\n\tgetObjectByName: function ( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t},\n\n\tgetObjectByProperty: function ( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = this.children[ i ];\n\t\t\tconst object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t},\n\n\tgetWorldPosition: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldPosition() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t},\n\n\tgetWorldQuaternion: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldQuaternion() target is now required' );\n\t\t\ttarget = new Quaternion();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position, target, _scale );\n\n\t\treturn target;\n\n\t},\n\n\tgetWorldScale: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldScale() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion$2, target );\n\n\t\treturn target;\n\n\t},\n\n\tgetWorldDirection: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldDirection() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t},\n\n\traycast: function () {},\n\n\ttraverse: function ( callback ) {\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t},\n\n\ttraverseVisible: function ( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t},\n\n\ttraverseAncestors: function ( callback ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t},\n\n\tupdateMatrix: function () {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// update children\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].updateMatrixWorld( force );\n\n\t\t}\n\n\t},\n\n\tupdateWorldMatrix: function ( updateParents, updateChildren ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.parent === null ) {\n\n\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t} else {\n\n\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t}\n\n\t\t// update children\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateWorldMatrix( false, true );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tconst output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {},\n\t\t\t\tskeletons: {},\n\t\t\t\tanimations: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tconst object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData;\n\n\t\tobject.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t// object specific properties\n\n\t\tif ( this.isInstancedMesh ) {\n\n\t\t\tobject.type = 'InstancedMesh';\n\t\t\tobject.count = this.count;\n\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\n\t\t}\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.isSkinnedMesh ) {\n\n\t\t\tobject.bindMode = this.bindMode;\n\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\tobject.skeleton = this.skeleton.uuid;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tconst uuids = [];\n\n\t\t\t\tfor ( let i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.animations.length > 0 ) {\n\n\t\t\tobject.animations = [];\n\n\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst geometries = extractFromCache( meta.geometries );\n\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst shapes = extractFromCache( meta.shapes );\n\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\tconst animations = extractFromCache( meta.animations );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\tif ( animations.length > 0 ) output.animations = animations;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t},\n\n\tclone: function ( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t},\n\n\tcopy: function ( source, recursive = true ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.rotation.order = source.rotation.order;\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tconst child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\nconst _vector1 = /*@__PURE__*/ new Vector3();\nconst _vector2 = /*@__PURE__*/ new Vector3();\nconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\nclass Plane {\n\n\tconstructor( normal, constant ) {\n\n\t\tObject.defineProperty( this, 'isPlane', { value: true } );\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 );\n\t\tthis.constant = ( constant !== undefined ) ? constant : 0;\n\n\t}\n\n\tset( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponents( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromNormalAndCoplanarPoint( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCoplanarPoints( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();\n\n\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t}\n\n\tnormalize() {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tconst inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t}\n\n\tdistanceToSphere( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t}\n\n\tprojectPoint( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .projectPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point );\n\n\t}\n\n\tintersectLine( line, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .intersectLine() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tconst direction = line.delta( _vector1 );\n\n\t\tconst denominator = this.normal.dot( direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\treturn target.copy( line.start );\n\n\t\t\t}\n\n\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\treturn undefined;\n\n\t\t}\n\n\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\treturn undefined;\n\n\t\t}\n\n\t\treturn target.copy( direction ).multiplyScalar( t ).add( line.start );\n\n\t}\n\n\tintersectsLine( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tconst startSign = this.distanceToPoint( line.start );\n\t\tconst endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t}\n\n\tcoplanarPoint( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .coplanarPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t}\n\n\tapplyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tequals( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n}\n\nconst _v0$1 = /*@__PURE__*/ new Vector3();\nconst _v1$3 = /*@__PURE__*/ new Vector3();\nconst _v2$1 = /*@__PURE__*/ new Vector3();\nconst _v3 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nclass Triangle {\n\n\tconstructor( a, b, c ) {\n\n\t\tthis.a = ( a !== undefined ) ? a : new Vector3();\n\t\tthis.b = ( b !== undefined ) ? b : new Vector3();\n\t\tthis.c = ( c !== undefined ) ? c : new Vector3();\n\n\t}\n\n\tstatic getNormal( a, b, c, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getNormal() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0$1.subVectors( a, b );\n\t\ttarget.cross( _v0$1 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\n\n\t}\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t_v0$1.subVectors( c, a );\n\t\t_v1$3.subVectors( b, a );\n\t\t_v2$1.subVectors( point, a );\n\n\t\tconst dot00 = _v0$1.dot( _v0$1 );\n\t\tconst dot01 = _v0$1.dot( _v1$3 );\n\t\tconst dot02 = _v0$1.dot( _v2$1 );\n\t\tconst dot11 = _v1$3.dot( _v1$3 );\n\t\tconst dot12 = _v1$3.dot( _v2$1 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getBarycoord() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\t// arbitrary location outside of triangle?\n\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t}\n\n\tstatic containsPoint( point, a, b, c ) {\n\n\t\tthis.getBarycoord( point, a, b, c, _v3 );\n\n\t\treturn ( _v3.x >= 0 ) && ( _v3.y >= 0 ) && ( ( _v3.x + _v3.y ) <= 1 );\n\n\t}\n\n\tstatic getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) {\n\n\t\tthis.getBarycoord( point, p1, p2, p3, _v3 );\n\n\t\ttarget.set( 0, 0 );\n\t\ttarget.addScaledVector( uv1, _v3.x );\n\t\ttarget.addScaledVector( uv2, _v3.y );\n\t\ttarget.addScaledVector( uv3, _v3.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t_v0$1.subVectors( c, b );\n\t\t_v1$3.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn ( _v0$1.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;\n\n\t}\n\n\tset( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPointsAndIndices( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t}\n\n\tgetArea() {\n\n\t\t_v0$1.subVectors( this.c, this.b );\n\t\t_v1$3.subVectors( this.a, this.b );\n\n\t\treturn _v0$1.cross( _v1$3 ).length() * 0.5;\n\n\t}\n\n\tgetMidpoint( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getMidpoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t}\n\n\tgetNormal( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\tgetPlane( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getPlane() target is now required' );\n\t\t\ttarget = new Plane();\n\n\t\t}\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t}\n\n\tgetBarycoord( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\tgetUV( point, uv1, uv2, uv3, target ) {\n\n\t\treturn Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\tclosestPointToPoint( p, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t}\n\n\tequals( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n}\n\nconst _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\n\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\nfunction SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nfunction LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n}\n\nclass Color {\n\n\tconstructor( r, g, b ) {\n\n\t\tObject.defineProperty( this, 'isColor', { value: true } );\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\t\t\treturn this.set( r );\n\n\t\t}\n\n\t\treturn this.setRGB( r, g, b );\n\n\t}\n\n\tset( value ) {\n\n\t\tif ( value && value.isColor ) {\n\n\t\t\tthis.copy( value );\n\n\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\tthis.setHex( value );\n\n\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\tthis.setStyle( value );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetHex( hex ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\treturn this;\n\n\t}\n\n\tsetRGB( r, g, b ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\treturn this;\n\n\t}\n\n\tsetHSL( h, s, l ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = MathUtils.euclideanModulo( h, 1 );\n\t\ts = MathUtils.clamp( s, 0, 1 );\n\t\tl = MathUtils.clamp( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetStyle( style ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tlet m;\n\n\t\tif ( m = /^((?:rgb|hsl)a?)\\(\\s*([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^([0-9]*\\.?[0-9]+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\tconst h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\tconst s = parseInt( color[ 2 ], 10 ) / 100;\n\t\t\t\t\t\tconst l = parseInt( color[ 3 ], 10 ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this.setHSL( h, s, l );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f0-9]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tconst hex = m[ 1 ];\n\t\t\tconst size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( style && style.length > 0 ) {\n\n\t\t\treturn this.setColorName( style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetColorName( style ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\tcopy( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t}\n\n\tcopyGammaToLinear( color, gammaFactor = 2.0 ) {\n\n\t\tthis.r = Math.pow( color.r, gammaFactor );\n\t\tthis.g = Math.pow( color.g, gammaFactor );\n\t\tthis.b = Math.pow( color.b, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToGamma( color, gammaFactor = 2.0 ) {\n\n\t\tconst safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0;\n\n\t\tthis.r = Math.pow( color.r, safeInverse );\n\t\tthis.g = Math.pow( color.g, safeInverse );\n\t\tthis.b = Math.pow( color.b, safeInverse );\n\n\t\treturn this;\n\n\t}\n\n\tconvertGammaToLinear( gammaFactor ) {\n\n\t\tthis.copyGammaToLinear( this, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToGamma( gammaFactor ) {\n\n\t\tthis.copyLinearToGamma( this, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tcopySRGBToLinear( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToSRGB( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tconvertSRGBToLinear() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\tgetHex() {\n\n\t\treturn ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0;\n\n\t}\n\n\tgetHexString() {\n\n\t\treturn ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 );\n\n\t}\n\n\tgetHSL( target ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Color: .getHSL() target is now required' );\n\t\t\ttarget = { h: 0, s: 0, l: 0 };\n\n\t\t}\n\n\t\tconst r = this.r, g = this.g, b = this.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tconst delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t}\n\n\tgetStyle() {\n\n\t\treturn 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';\n\n\t}\n\n\toffsetHSL( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\t_hslA.h += h; _hslA.s += s; _hslA.l += l;\n\n\t\tthis.setHSL( _hslA.h, _hslA.s, _hslA.l );\n\n\t\treturn this;\n\n\t}\n\n\tadd( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t}\n\n\taddColors( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t}\n\n\tlerp( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = MathUtils.lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = MathUtils.lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = MathUtils.lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\n\n\t\treturn this;\n\n\t}\n\n\tequals( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\tif ( attribute.normalized === true ) {\n\n\t\t\t// assuming Uint8Array\n\n\t\t\tthis.r /= 255;\n\t\t\tthis.g /= 255;\n\t\t\tthis.b /= 255;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.getHex();\n\n\t}\n\n}\n\nColor.NAMES = _colorKeywords;\nColor.prototype.r = 1;\nColor.prototype.g = 1;\nColor.prototype.b = 1;\n\nclass Face3 {\n\n\tconstructor( a, b, c, normal, color, materialIndex = 0 ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t\tthis.normal = ( normal && normal.isVector3 ) ? normal : new Vector3();\n\t\tthis.vertexNormals = Array.isArray( normal ) ? normal : [];\n\n\t\tthis.color = ( color && color.isColor ) ? color : new Color();\n\t\tthis.vertexColors = Array.isArray( color ) ? color : [];\n\n\t\tthis.materialIndex = materialIndex;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.a = source.a;\n\t\tthis.b = source.b;\n\t\tthis.c = source.c;\n\n\t\tthis.normal.copy( source.normal );\n\t\tthis.color.copy( source.color );\n\n\t\tthis.materialIndex = source.materialIndex;\n\n\t\tfor ( let i = 0, il = source.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexNormals[ i ] = source.vertexNormals[ i ].clone();\n\n\t\t}\n\n\t\tfor ( let i = 0, il = source.vertexColors.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexColors[ i ] = source.vertexColors[ i ].clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nlet materialId = 0;\n\nfunction Material() {\n\n\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Material';\n\n\tthis.fog = true;\n\n\tthis.blending = NormalBlending;\n\tthis.side = FrontSide;\n\tthis.flatShading = false;\n\tthis.vertexColors = false;\n\n\tthis.opacity = 1;\n\tthis.transparent = false;\n\n\tthis.blendSrc = SrcAlphaFactor;\n\tthis.blendDst = OneMinusSrcAlphaFactor;\n\tthis.blendEquation = AddEquation;\n\tthis.blendSrcAlpha = null;\n\tthis.blendDstAlpha = null;\n\tthis.blendEquationAlpha = null;\n\n\tthis.depthFunc = LessEqualDepth;\n\tthis.depthTest = true;\n\tthis.depthWrite = true;\n\n\tthis.stencilWriteMask = 0xff;\n\tthis.stencilFunc = AlwaysStencilFunc;\n\tthis.stencilRef = 0;\n\tthis.stencilFuncMask = 0xff;\n\tthis.stencilFail = KeepStencilOp;\n\tthis.stencilZFail = KeepStencilOp;\n\tthis.stencilZPass = KeepStencilOp;\n\tthis.stencilWrite = false;\n\n\tthis.clippingPlanes = null;\n\tthis.clipIntersection = false;\n\tthis.clipShadows = false;\n\n\tthis.shadowSide = null;\n\n\tthis.colorWrite = true;\n\n\tthis.precision = null; // override the renderer's default precision for this material\n\n\tthis.polygonOffset = false;\n\tthis.polygonOffsetFactor = 0;\n\tthis.polygonOffsetUnits = 0;\n\n\tthis.dithering = false;\n\n\tthis.alphaTest = 0;\n\tthis.premultipliedAlpha = false;\n\n\tthis.visible = true;\n\n\tthis.toneMapped = true;\n\n\tthis.userData = {};\n\n\tthis.version = 0;\n\n}\n\nMaterial.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Material,\n\n\tisMaterial: true,\n\n\tonBeforeCompile: function ( /* shaderobject, renderer */ ) {},\n\n\tcustomProgramCacheKey: function () {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t},\n\n\tsetValues: function ( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( \"THREE.Material: '\" + key + \"' parameter is undefined.\" );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// for backward compatability if shading is set in the constructor\n\t\t\tif ( key === 'shading' ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\t\tthis.flatShading = ( newValue === FlatShading ) ? true : false;\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( \"THREE.\" + this.type + \": '\" + key + \"' is not a property of this material.\" );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst isRoot = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRoot ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.sheen && this.sheen.isColor ) data.sheen = this.sheen.getHex();\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;\n\t\tif ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\tif ( this.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\t\tif ( this.lightMap && this.lightMap.isTexture ) data.lightMap = this.lightMap.toJSON( meta ).uuid;\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\t\t\tdata.reflectivity = this.reflectivity; // Scale behind envMap\n\t\t\tdata.refractionRatio = this.refractionRatio;\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\t\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\n\t\t}\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors ) data.vertexColors = true;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\tdata.depthFunc = this.depthFunc;\n\t\tdata.depthTest = this.depthTest;\n\t\tdata.depthWrite = this.depthWrite;\n\n\t\tdata.stencilWrite = this.stencilWrite;\n\t\tdata.stencilWriteMask = this.stencilWriteMask;\n\t\tdata.stencilFunc = this.stencilFunc;\n\t\tdata.stencilRef = this.stencilRef;\n\t\tdata.stencilFuncMask = this.stencilFuncMask;\n\t\tdata.stencilFail = this.stencilFail;\n\t\tdata.stencilZFail = this.stencilZFail;\n\t\tdata.stencilZPass = this.stencilZPass;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth && this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\n\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.morphTargets === true ) data.morphTargets = true;\n\t\tif ( this.morphNormals === true ) data.morphNormals = true;\n\t\tif ( this.skinning === true ) data.skinning = true;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRoot ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.fog = source.fog;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.flatShading = source.flatShading;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\tthis.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\nObject.defineProperty( Material.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * depthTest: ,\n * depthWrite: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: \n * }\n */\n\nfunction MeshBasicMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshBasicMaterial';\n\n\tthis.color = new Color( 0xffffff ); // emissive\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshBasicMaterial.prototype = Object.create( Material.prototype );\nMeshBasicMaterial.prototype.constructor = MeshBasicMaterial;\n\nMeshBasicMaterial.prototype.isMeshBasicMaterial = true;\n\nMeshBasicMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\treturn this;\n\n};\n\nconst _vector$3 = new Vector3();\nconst _vector2$1 = new Vector2();\n\nfunction BufferAttribute( array, itemSize, normalized ) {\n\n\tif ( Array.isArray( array ) ) {\n\n\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t}\n\n\tthis.name = '';\n\n\tthis.array = array;\n\tthis.itemSize = itemSize;\n\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\tthis.normalized = normalized === true;\n\n\tthis.usage = StaticDrawUsage;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n}\n\nObject.defineProperty( BufferAttribute.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( BufferAttribute.prototype, {\n\n\tisBufferAttribute: true,\n\n\tonUploadCallback: function () {},\n\n\tsetUsage: function ( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t},\n\n\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( let i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyArray: function ( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t},\n\n\tcopyColorsArray: function ( colors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\tlet color = colors[ i ];\n\n\t\t\tif ( color === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i );\n\t\t\t\tcolor = new Color();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = color.r;\n\t\t\tarray[ offset ++ ] = color.g;\n\t\t\tarray[ offset ++ ] = color.b;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector2sArray: function ( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector2();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector3sArray: function ( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector3();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector4sArray: function ( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector4();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\t\t\tarray[ offset ++ ] = vector.w;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix3: function ( m ) {\n\n\t\tif ( this.itemSize === 2 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector2$1.fromBufferAttribute( this, i );\n\t\t\t\t_vector2$1.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2$1.x, _vector2$1.y );\n\n\t\t\t}\n\n\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$3.fromBufferAttribute( this, i );\n\t\t\t\t_vector$3.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$3.x = this.getX( i );\n\t\t\t_vector$3.y = this.getY( i );\n\t\t\t_vector$3.z = this.getZ( i );\n\n\t\t\t_vector$3.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tapplyNormalMatrix: function ( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$3.x = this.getX( i );\n\t\t\t_vector$3.y = this.getY( i );\n\t\t\t_vector$3.z = this.getZ( i );\n\n\t\t\t_vector$3.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttransformDirection: function ( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$3.x = this.getX( i );\n\t\t\t_vector$3.y = this.getY( i );\n\t\t\t_vector$3.z = this.getZ( i );\n\n\t\t\t_vector$3.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tset: function ( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t},\n\n\tgetX: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize ];\n\n\t},\n\n\tsetX: function ( index, x ) {\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t},\n\n\tgetY: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 1 ];\n\n\t},\n\n\tsetY: function ( index, y ) {\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tgetZ: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 2 ];\n\n\t},\n\n\tsetZ: function ( index, z ) {\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tgetW: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 3 ];\n\n\t},\n\n\tsetW: function ( index, w ) {\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetXY: function ( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZ: function ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t},\n\n\ttoJSON: function () {\n\n\t\treturn {\n\t\t\titemSize: this.itemSize,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tarray: Array.prototype.slice.call( this.array ),\n\t\t\tnormalized: this.normalized\n\t\t};\n\n\t}\n\n} );\n\n//\n\nfunction Int8BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int8Array( array ), itemSize, normalized );\n\n}\n\nInt8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt8BufferAttribute.prototype.constructor = Int8BufferAttribute;\n\n\nfunction Uint8BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint8Array( array ), itemSize, normalized );\n\n}\n\nUint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint8BufferAttribute.prototype.constructor = Uint8BufferAttribute;\n\n\nfunction Uint8ClampedBufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize, normalized );\n\n}\n\nUint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute;\n\n\nfunction Int16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int16Array( array ), itemSize, normalized );\n\n}\n\nInt16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt16BufferAttribute.prototype.constructor = Int16BufferAttribute;\n\n\nfunction Uint16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized );\n\n}\n\nUint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint16BufferAttribute.prototype.constructor = Uint16BufferAttribute;\n\n\nfunction Int32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int32Array( array ), itemSize, normalized );\n\n}\n\nInt32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt32BufferAttribute.prototype.constructor = Int32BufferAttribute;\n\n\nfunction Uint32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint32Array( array ), itemSize, normalized );\n\n}\n\nUint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint32BufferAttribute.prototype.constructor = Uint32BufferAttribute;\n\nfunction Float16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized );\n\n}\n\nFloat16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat16BufferAttribute.prototype.constructor = Float16BufferAttribute;\nFloat16BufferAttribute.prototype.isFloat16BufferAttribute = true;\n\nfunction Float32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Float32Array( array ), itemSize, normalized );\n\n}\n\nFloat32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat32BufferAttribute.prototype.constructor = Float32BufferAttribute;\n\n\nfunction Float64BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Float64Array( array ), itemSize, normalized );\n\n}\n\nFloat64BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat64BufferAttribute.prototype.constructor = Float64BufferAttribute;\n\nclass DirectGeometry {\n\n\tconstructor() {\n\n\t\tthis.vertices = [];\n\t\tthis.normals = [];\n\t\tthis.colors = [];\n\t\tthis.uvs = [];\n\t\tthis.uvs2 = [];\n\n\t\tthis.groups = [];\n\n\t\tthis.morphTargets = {};\n\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\n\t\t// this.lineDistances = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// update flags\n\n\t\tthis.verticesNeedUpdate = false;\n\t\tthis.normalsNeedUpdate = false;\n\t\tthis.colorsNeedUpdate = false;\n\t\tthis.uvsNeedUpdate = false;\n\t\tthis.groupsNeedUpdate = false;\n\n\t}\n\n\tcomputeGroups( geometry ) {\n\n\t\tconst groups = [];\n\n\t\tlet group, i;\n\t\tlet materialIndex = undefined;\n\n\t\tconst faces = geometry.faces;\n\n\t\tfor ( i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\tthis.groups = groups;\n\n\t}\n\n\tfromGeometry( geometry ) {\n\n\t\tconst faces = geometry.faces;\n\t\tconst vertices = geometry.vertices;\n\t\tconst faceVertexUvs = geometry.faceVertexUvs;\n\n\t\tconst hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\n\t\tconst hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\n\n\t\t// morphs\n\n\t\tconst morphTargets = geometry.morphTargets;\n\t\tconst morphTargetsLength = morphTargets.length;\n\n\t\tlet morphTargetsPosition;\n\n\t\tif ( morphTargetsLength > 0 ) {\n\n\t\t\tmorphTargetsPosition = [];\n\n\t\t\tfor ( let i = 0; i < morphTargetsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsPosition[ i ] = {\n\t\t\t\t\tname: morphTargets[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.position = morphTargetsPosition;\n\n\t\t}\n\n\t\tconst morphNormals = geometry.morphNormals;\n\t\tconst morphNormalsLength = morphNormals.length;\n\n\t\tlet morphTargetsNormal;\n\n\t\tif ( morphNormalsLength > 0 ) {\n\n\t\t\tmorphTargetsNormal = [];\n\n\t\t\tfor ( let i = 0; i < morphNormalsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsNormal[ i ] = {\n\t\t\t\t\tname: morphNormals[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.normal = morphTargetsNormal;\n\n\t\t}\n\n\t\t// skins\n\n\t\tconst skinIndices = geometry.skinIndices;\n\t\tconst skinWeights = geometry.skinWeights;\n\n\t\tconst hasSkinIndices = skinIndices.length === vertices.length;\n\t\tconst hasSkinWeights = skinWeights.length === vertices.length;\n\n\t\t//\n\n\t\tif ( vertices.length > 0 && faces.length === 0 ) {\n\n\t\t\tconsole.error( 'THREE.DirectGeometry: Faceless geometries are not supported.' );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\tthis.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] );\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tthis.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tconst normal = face.normal;\n\n\t\t\t\tthis.normals.push( normal, normal, normal );\n\n\t\t\t}\n\n\t\t\tconst vertexColors = face.vertexColors;\n\n\t\t\tif ( vertexColors.length === 3 ) {\n\n\t\t\t\tthis.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tconst color = face.color;\n\n\t\t\t\tthis.colors.push( color, color, color );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv === true ) {\n\n\t\t\t\tconst vertexUvs = faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i );\n\n\t\t\t\t\tthis.uvs.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv2 === true ) {\n\n\t\t\t\tconst vertexUvs = faceVertexUvs[ 1 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i );\n\n\t\t\t\t\tthis.uvs2.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// morphs\n\n\t\t\tfor ( let j = 0; j < morphTargetsLength; j ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ j ].vertices;\n\n\t\t\t\tmorphTargetsPosition[ j ].data.push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] );\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0; j < morphNormalsLength; j ++ ) {\n\n\t\t\t\tconst morphNormal = morphNormals[ j ].vertexNormals[ i ];\n\n\t\t\t\tmorphTargetsNormal[ j ].data.push( morphNormal.a, morphNormal.b, morphNormal.c );\n\n\t\t\t}\n\n\t\t\t// skins\n\n\t\t\tif ( hasSkinIndices ) {\n\n\t\t\t\tthis.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] );\n\n\t\t\t}\n\n\t\t\tif ( hasSkinWeights ) {\n\n\t\t\t\tthis.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeGroups( geometry );\n\n\t\tthis.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\tthis.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\tthis.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\tthis.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction arrayMax( array ) {\n\n\tif ( array.length === 0 ) return - Infinity;\n\n\tlet max = array[ 0 ];\n\n\tfor ( let i = 1, l = array.length; i < l; ++ i ) {\n\n\t\tif ( array[ i ] > max ) max = array[ i ];\n\n\t}\n\n\treturn max;\n\n}\n\nconst TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\t// Workaround for IE11 pre KB2929437. See #11440\n\tUint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\nfunction getTypedArray( type, buffer ) {\n\n\treturn new TYPED_ARRAYS[ type ]( buffer );\n\n}\n\nlet _bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id\n\nconst _m1$2 = new Matrix4();\nconst _obj = new Object3D();\nconst _offset = new Vector3();\nconst _box$2 = new Box3();\nconst _boxMorphTargets = new Box3();\nconst _vector$4 = new Vector3();\n\nfunction BufferGeometry() {\n\n\tObject.defineProperty( this, 'id', { value: _bufferGeometryId += 2 } );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'BufferGeometry';\n\n\tthis.index = null;\n\tthis.attributes = {};\n\n\tthis.morphAttributes = {};\n\tthis.morphTargetsRelative = false;\n\n\tthis.groups = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\tthis.drawRange = { start: 0, count: Infinity };\n\n\tthis.userData = {};\n\n}\n\nBufferGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: BufferGeometry,\n\n\tisBufferGeometry: true,\n\n\tgetIndex: function () {\n\n\t\treturn this.index;\n\n\t},\n\n\tsetIndex: function ( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetAttribute: function ( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t},\n\n\tsetAttribute: function ( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t},\n\n\tdeleteAttribute: function ( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t},\n\n\thasAttribute: function ( name ) {\n\n\t\treturn this.attributes[ name ] !== undefined;\n\n\t},\n\n\taddGroup: function ( start, count, materialIndex = 0 ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex\n\n\t\t} );\n\n\t},\n\n\tclearGroups: function () {\n\n\t\tthis.groups = [];\n\n\t},\n\n\tsetDrawRange: function ( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t},\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tconst position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tconst normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tconst tangent = this.attributes.tangent;\n\n\t\tif ( tangent !== undefined ) {\n\n\t\t\ttangent.transformDirection( matrix );\n\n\t\t\ttangent.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function ( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1$2.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\trotateY: function ( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1$2.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\trotateZ: function ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1$2.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1$2.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1$2.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\tlookAt: function ( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcenter: function () {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromObject: function ( object ) {\n\n\t\t// console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( object.isPoints || object.isLine ) {\n\n\t\t\tconst positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 );\n\t\t\tconst colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 );\n\n\t\t\tthis.setAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) );\n\t\t\tthis.setAttribute( 'color', colors.copyColorsArray( geometry.colors ) );\n\n\t\t\tif ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) {\n\n\t\t\t\tconst lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 );\n\n\t\t\t\tthis.setAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t\t}\n\n\t\t} else if ( object.isMesh ) {\n\n\t\t\tif ( geometry && geometry.isGeometry ) {\n\n\t\t\t\tthis.fromGeometry( geometry );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tconst position = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t},\n\n\tupdateFromObject: function ( object ) {\n\n\t\tlet geometry = object.geometry;\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tlet direct = geometry.__directGeometry;\n\n\t\t\tif ( geometry.elementsNeedUpdate === true ) {\n\n\t\t\t\tdirect = undefined;\n\t\t\t\tgeometry.elementsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( direct === undefined ) {\n\n\t\t\t\treturn this.fromGeometry( geometry );\n\n\t\t\t}\n\n\t\t\tdirect.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\t\tdirect.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\t\tdirect.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\t\tdirect.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\t\tdirect.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\t\tgeometry.verticesNeedUpdate = false;\n\t\t\tgeometry.normalsNeedUpdate = false;\n\t\t\tgeometry.colorsNeedUpdate = false;\n\t\t\tgeometry.uvsNeedUpdate = false;\n\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t\tgeometry = direct;\n\n\t\t}\n\n\t\tif ( geometry.verticesNeedUpdate === true ) {\n\n\t\t\tconst attribute = this.attributes.position;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector3sArray( geometry.vertices );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.verticesNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.normalsNeedUpdate === true ) {\n\n\t\t\tconst attribute = this.attributes.normal;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector3sArray( geometry.normals );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.normalsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.colorsNeedUpdate === true ) {\n\n\t\t\tconst attribute = this.attributes.color;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyColorsArray( geometry.colors );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.colorsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.uvsNeedUpdate ) {\n\n\t\t\tconst attribute = this.attributes.uv;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector2sArray( geometry.uvs );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.uvsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.lineDistancesNeedUpdate ) {\n\n\t\t\tconst attribute = this.attributes.lineDistance;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyArray( geometry.lineDistances );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.lineDistancesNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.groupsNeedUpdate ) {\n\n\t\t\tgeometry.computeGroups( object.geometry );\n\t\t\tthis.groups = geometry.groups;\n\n\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tfromGeometry: function ( geometry ) {\n\n\t\tgeometry.__directGeometry = new DirectGeometry().fromGeometry( geometry );\n\n\t\treturn this.fromDirectGeometry( geometry.__directGeometry );\n\n\t},\n\n\tfromDirectGeometry: function ( geometry ) {\n\n\t\tconst positions = new Float32Array( geometry.vertices.length * 3 );\n\t\tthis.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) );\n\n\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\tconst normals = new Float32Array( geometry.normals.length * 3 );\n\t\t\tthis.setAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) );\n\n\t\t}\n\n\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\tconst colors = new Float32Array( geometry.colors.length * 3 );\n\t\t\tthis.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs.length > 0 ) {\n\n\t\t\tconst uvs = new Float32Array( geometry.uvs.length * 2 );\n\t\t\tthis.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs2.length > 0 ) {\n\n\t\t\tconst uvs2 = new Float32Array( geometry.uvs2.length * 2 );\n\t\t\tthis.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) );\n\n\t\t}\n\n\t\t// groups\n\n\t\tthis.groups = geometry.groups;\n\n\t\t// morphs\n\n\t\tfor ( const name in geometry.morphTargets ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphTargets = geometry.morphTargets[ name ];\n\n\t\t\tfor ( let i = 0, l = morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ i ];\n\n\t\t\t\tconst attribute = new Float32BufferAttribute( morphTarget.data.length * 3, 3 );\n\t\t\t\tattribute.name = morphTarget.name;\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget.data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// skinning\n\n\t\tif ( geometry.skinIndices.length > 0 ) {\n\n\t\t\tconst skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 );\n\t\t\tthis.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );\n\n\t\t}\n\n\t\tif ( geometry.skinWeights.length > 0 ) {\n\n\t\t\tconst skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 );\n\t\t\tthis.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingBox.set(\n\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t);\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_box$2.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$4.addVectors( this.boundingBox.min, _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$4 );\n\n\t\t\t\t\t\t_vector$4.addVectors( this.boundingBox.max, _box$2.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$4 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position ) {\n\n\t\t\t// first, find the center of the bounding sphere\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t_box$2.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$4.addVectors( _box$2.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$4 );\n\n\t\t\t\t\t\t_vector$4.addVectors( _box$2.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$4 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_box$2.getCenter( center );\n\n\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t_vector$4.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) );\n\n\t\t\t}\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t_vector$4.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t_vector$4.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tcomputeFaceNormals: function () {\n\n\t\t// backwards compatibility\n\n\t},\n\n\tcomputeVertexNormals: function () {\n\n\t\tconst index = this.index;\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\tnA.add( cb );\n\t\t\t\t\tnB.add( cb );\n\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.needsUpdate = true;\n\n\t\t}\n\n\t},\n\n\tmerge: function ( geometry, offset ) {\n\n\t\tif ( ! ( geometry && geometry.isBufferGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( offset === undefined ) {\n\n\t\t\toffset = 0;\n\n\t\t\tconsole.warn(\n\t\t\t\t'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. '\n\t\t\t\t+ 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.'\n\t\t\t);\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tif ( geometry.attributes[ key ] === undefined ) continue;\n\n\t\t\tconst attribute1 = attributes[ key ];\n\t\t\tconst attributeArray1 = attribute1.array;\n\n\t\t\tconst attribute2 = geometry.attributes[ key ];\n\t\t\tconst attributeArray2 = attribute2.array;\n\n\t\t\tconst attributeOffset = attribute2.itemSize * offset;\n\t\t\tconst length = Math.min( attributeArray2.length, attributeArray1.length - attributeOffset );\n\n\t\t\tfor ( let i = 0, j = attributeOffset; i < length; i ++, j ++ ) {\n\n\t\t\t\tattributeArray1[ j ] = attributeArray2[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tnormalizeNormals: function () {\n\n\t\tconst normals = this.attributes.normal;\n\n\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t_vector$4.fromBufferAttribute( normals, i );\n\n\t\t\t_vector$4.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector$4.x, _vector$4.y, _vector$4.z );\n\n\t\t}\n\n\t},\n\n\ttoNonIndexed: function () {\n\n\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\t\t\tconst normalized = attribute.normalized;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( array2, itemSize, normalized );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tconst indices = this.index.array;\n\t\tconst attributes = this.attributes;\n\n\t\t// attributes\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = this.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst morphArray = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t}\n\n\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = this.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tdata.data = { attributes: {} };\n\n\t\tconst index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t};\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tconst attributeData = attribute.toJSON( data.data );\n\n\t\t\tif ( attribute.name !== '' ) attributeData.name = attribute.name;\n\n\t\t\tdata.data.attributes[ key ] = attributeData;\n\n\t\t}\n\n\t\tconst morphAttributes = {};\n\t\tlet hasMorphAttributes = false;\n\n\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\tconst attributeData = attribute.toJSON( data.data );\n\n\t\t\t\tif ( attribute.name !== '' ) attributeData.name = attribute.name;\n\n\t\t\t\tarray.push( attributeData );\n\n\t\t\t}\n\n\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\thasMorphAttributes = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphAttributes ) {\n\n\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t}\n\n\t\tconst groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t const parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t const values = [];\n\n\t\t for ( const key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t const geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new BufferGeometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// used for storing cloned, shared data\n\n\t\tconst data = {};\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tconst index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone( data ) );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tconst attributes = source.attributes;\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = source.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = source.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\nconst _inverseMatrix = new Matrix4();\nconst _ray = new Ray();\nconst _sphere = new Sphere();\n\nconst _vA = new Vector3();\nconst _vB = new Vector3();\nconst _vC = new Vector3();\n\nconst _tempA = new Vector3();\nconst _tempB = new Vector3();\nconst _tempC = new Vector3();\n\nconst _morphA = new Vector3();\nconst _morphB = new Vector3();\nconst _morphC = new Vector3();\n\nconst _uvA = new Vector2();\nconst _uvB = new Vector2();\nconst _uvC = new Vector2();\n\nconst _intersectionPoint = new Vector3();\nconst _intersectionPointWorld = new Vector3();\n\nfunction Mesh( geometry, material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Mesh';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new MeshBasicMaterial();\n\n\tthis.updateMorphTargets();\n\n}\n\nMesh.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Mesh,\n\n\tisMesh: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\t// Check boundingBox before continuing\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\tlet intersection;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\t\t\tconst uv = geometry.attributes.uv;\n\t\t\tconst uv2 = geometry.attributes.uv2;\n\t\t\tconst groups = geometry.groups;\n\t\t\tconst drawRange = geometry.drawRange;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\t// indexed buffer geometry\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\tconst end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( position !== undefined ) {\n\n\t\t\t\t// non-indexed buffer geometry\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\tconst end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\tconst a = i;\n\t\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconst isMultiMaterial = Array.isArray( material );\n\n\t\t\tconst vertices = geometry.vertices;\n\t\t\tconst faces = geometry.faces;\n\t\t\tlet uvs;\n\n\t\t\tconst faceVertexUvs = geometry.faceVertexUvs[ 0 ];\n\t\t\tif ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs;\n\n\t\t\tfor ( let f = 0, fl = faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = faces[ f ];\n\t\t\t\tconst faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material;\n\n\t\t\t\tif ( faceMaterial === undefined ) continue;\n\n\t\t\t\tconst fvA = vertices[ face.a ];\n\t\t\t\tconst fvB = vertices[ face.b ];\n\t\t\t\tconst fvC = vertices[ face.c ];\n\n\t\t\t\tintersection = checkIntersection( this, faceMaterial, raycaster, _ray, fvA, fvB, fvC, _intersectionPoint );\n\n\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\tif ( uvs && uvs[ f ] ) {\n\n\t\t\t\t\t\tconst uvs_f = uvs[ f ];\n\t\t\t\t\t\t_uvA.copy( uvs_f[ 0 ] );\n\t\t\t\t\t\t_uvB.copy( uvs_f[ 1 ] );\n\t\t\t\t\t\t_uvC.copy( uvs_f[ 2 ] );\n\n\t\t\t\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, fvA, fvB, fvC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tintersection.face = face;\n\t\t\t\t\tintersection.faceIndex = f;\n\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkBufferGeometryIntersection( object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ) {\n\n\t_vA.fromBufferAttribute( position, a );\n\t_vB.fromBufferAttribute( position, b );\n\t_vC.fromBufferAttribute( position, c );\n\n\tconst morphInfluences = object.morphTargetInfluences;\n\n\tif ( material.morphTargets && morphPosition && morphInfluences ) {\n\n\t\t_morphA.set( 0, 0, 0 );\n\t\t_morphB.set( 0, 0, 0 );\n\t\t_morphC.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\tconst influence = morphInfluences[ i ];\n\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t_tempA.fromBufferAttribute( morphAttribute, a );\n\t\t\t_tempB.fromBufferAttribute( morphAttribute, b );\n\t\t\t_tempC.fromBufferAttribute( morphAttribute, c );\n\n\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t} else {\n\n\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA ), influence );\n\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB ), influence );\n\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC ), influence );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_vA.add( _morphA );\n\t\t_vB.add( _morphB );\n\t\t_vC.add( _morphC );\n\n\t}\n\n\tif ( object.isSkinnedMesh ) {\n\n\t\tobject.boneTransform( a, _vA );\n\t\tobject.boneTransform( b, _vB );\n\t\tobject.boneTransform( c, _vC );\n\n\t}\n\n\tconst intersection = checkIntersection( object, material, raycaster, ray, _vA, _vB, _vC, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA.fromBufferAttribute( uv, a );\n\t\t\t_uvB.fromBufferAttribute( uv, b );\n\t\t\t_uvC.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv2 ) {\n\n\t\t\t_uvA.fromBufferAttribute( uv2, a );\n\t\t\t_uvB.fromBufferAttribute( uv2, b );\n\t\t\t_uvC.fromBufferAttribute( uv2, c );\n\n\t\t\tintersection.uv2 = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t}\n\n\t\tconst face = new Face3( a, b, c );\n\t\tTriangle.getNormal( _vA, _vB, _vC, face.normal );\n\n\t\tintersection.face = face;\n\n\t}\n\n\treturn intersection;\n\n}\n\nclass BoxBufferGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tconst scope = this;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet numberOfVertices = 0;\n\t\tlet groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tconst segmentWidth = width / gridX;\n\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\tconst widthHalf = width / 2;\n\t\t\tconst heightHalf = height / 2;\n\t\t\tconst depthHalf = depth / 2;\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tlet vertexCounter = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Uniform Utilities\n */\n\nfunction cloneUniforms( src ) {\n\n\tconst dst = {};\n\n\tfor ( const u in src ) {\n\n\t\tdst[ u ] = {};\n\n\t\tfor ( const p in src[ u ] ) {\n\n\t\t\tconst property = src[ u ][ p ];\n\n\t\t\tif ( property && ( property.isColor ||\n\t\t\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\t\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\t\t\tproperty.isTexture ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t} else {\n\n\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction mergeUniforms( uniforms ) {\n\n\tconst merged = {};\n\n\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\tfor ( const p in tmp ) {\n\n\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t}\n\n\t}\n\n\treturn merged;\n\n}\n\n// Legacy\n\nconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\nvar default_vertex = \"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";\n\nvar default_fragment = \"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";\n\n/**\n * parameters = {\n * defines: { \"label\" : \"value\" },\n * uniforms: { \"parameter1\": { value: 1.0 }, \"parameter2\": { value2: 2 } },\n *\n * fragmentShader: ,\n * vertexShader: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * lights: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction ShaderMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'ShaderMaterial';\n\n\tthis.defines = {};\n\tthis.uniforms = {};\n\n\tthis.vertexShader = default_vertex;\n\tthis.fragmentShader = default_fragment;\n\n\tthis.linewidth = 1;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false; // set to use scene fog\n\tthis.lights = false; // set to use scene lights\n\tthis.clipping = false; // set to use user-defined clipping planes\n\n\tthis.skinning = false; // set to use skinning attribute streams\n\tthis.morphTargets = false; // set to use morph targets\n\tthis.morphNormals = false; // set to use morph normals\n\n\tthis.extensions = {\n\t\tderivatives: false, // set to use derivatives\n\t\tfragDepth: false, // set to use fragment depth values\n\t\tdrawBuffers: false, // set to use draw buffers\n\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t};\n\n\t// When rendered geometry doesn't include these attributes but the material does,\n\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\tthis.defaultAttributeValues = {\n\t\t'color': [ 1, 1, 1 ],\n\t\t'uv': [ 0, 0 ],\n\t\t'uv2': [ 0, 0 ]\n\t};\n\n\tthis.index0AttributeName = undefined;\n\tthis.uniformsNeedUpdate = false;\n\n\tthis.glslVersion = null;\n\n\tif ( parameters !== undefined ) {\n\n\t\tif ( parameters.attributes !== undefined ) {\n\n\t\t\tconsole.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n}\n\nShaderMaterial.prototype = Object.create( Material.prototype );\nShaderMaterial.prototype.constructor = ShaderMaterial;\n\nShaderMaterial.prototype.isShaderMaterial = true;\n\nShaderMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.fragmentShader = source.fragmentShader;\n\tthis.vertexShader = source.vertexShader;\n\n\tthis.uniforms = cloneUniforms( source.uniforms );\n\n\tthis.defines = Object.assign( {}, source.defines );\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\tthis.lights = source.lights;\n\tthis.clipping = source.clipping;\n\n\tthis.skinning = source.skinning;\n\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\tthis.extensions = Object.assign( {}, source.extensions );\n\n\tthis.glslVersion = source.glslVersion;\n\n\treturn this;\n\n};\n\nShaderMaterial.prototype.toJSON = function ( meta ) {\n\n\tconst data = Material.prototype.toJSON.call( this, meta );\n\n\tdata.glslVersion = this.glslVersion;\n\tdata.uniforms = {};\n\n\tfor ( const name in this.uniforms ) {\n\n\t\tconst uniform = this.uniforms[ name ];\n\t\tconst value = uniform.value;\n\n\t\tif ( value && value.isTexture ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 't',\n\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t};\n\n\t\t} else if ( value && value.isColor ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'c',\n\t\t\t\tvalue: value.getHex()\n\t\t\t};\n\n\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'v2',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'v3',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'v4',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'm3',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'm4',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\tvalue: value\n\t\t\t};\n\n\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t}\n\n\t}\n\n\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\tdata.vertexShader = this.vertexShader;\n\tdata.fragmentShader = this.fragmentShader;\n\n\tconst extensions = {};\n\n\tfor ( const key in this.extensions ) {\n\n\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t}\n\n\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\treturn data;\n\n};\n\nfunction Camera() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Camera';\n\n\tthis.matrixWorldInverse = new Matrix4();\n\n\tthis.projectionMatrix = new Matrix4();\n\tthis.projectionMatrixInverse = new Matrix4();\n\n}\n\nCamera.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Camera,\n\n\tisCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\treturn this;\n\n\t},\n\n\tgetWorldDirection: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Camera: .getWorldDirection() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t},\n\n\tupdateWorldMatrix: function ( updateParents, updateChildren ) {\n\n\t\tObject3D.prototype.updateWorldMatrix.call( this, updateParents, updateChildren );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n} );\n\nfunction PerspectiveCamera( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\tCamera.call( this );\n\n\tthis.type = 'PerspectiveCamera';\n\n\tthis.fov = fov;\n\tthis.zoom = 1;\n\n\tthis.near = near;\n\tthis.far = far;\n\tthis.focus = 10;\n\n\tthis.aspect = aspect;\n\tthis.view = null;\n\n\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\tthis.updateProjectionMatrix();\n\n}\n\nPerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\tconstructor: PerspectiveCamera,\n\n\tisPerspectiveCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength: function ( focalLength ) {\n\n\t\t// see http://www.bobatkins.com/photography/technical/field_of_view.html\n\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = MathUtils.RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength: function () {\n\n\t\tconst vExtentSlope = Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t},\n\n\tgetEffectiveFOV: function () {\n\n\t\treturn MathUtils.RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( MathUtils.DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t},\n\n\tgetFilmWidth: function () {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t},\n\n\tgetFilmHeight: function () {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t},\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t * +---+---+---+\n\t * | A | B | C |\n\t * +---+---+---+\n\t * | D | E | F |\n\t * +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t * const w = 1920;\n\t * const h = 1080;\n\t * const fullWidth = w * 3;\n\t * const fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t * Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tclearViewOffset: function () {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tupdateProjectionMatrix: function () {\n\n\t\tconst near = this.near;\n\t\tlet top = near * Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\tlet height = 2 * top;\n\t\tlet width = this.aspect * height;\n\t\tlet left = - 0.5 * width;\n\t\tconst view = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tconst skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n} );\n\nconst fov = 90, aspect = 1;\n\nfunction CubeCamera( near, far, renderTarget ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'CubeCamera';\n\n\tif ( renderTarget.isWebGLCubeRenderTarget !== true ) {\n\n\t\tconsole.error( 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.' );\n\t\treturn;\n\n\t}\n\n\tthis.renderTarget = renderTarget;\n\n\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPX.layers = this.layers;\n\tcameraPX.up.set( 0, - 1, 0 );\n\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\tthis.add( cameraPX );\n\n\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNX.layers = this.layers;\n\tcameraNX.up.set( 0, - 1, 0 );\n\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\tthis.add( cameraNX );\n\n\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPY.layers = this.layers;\n\tcameraPY.up.set( 0, 0, 1 );\n\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\tthis.add( cameraPY );\n\n\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNY.layers = this.layers;\n\tcameraNY.up.set( 0, 0, - 1 );\n\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\tthis.add( cameraNY );\n\n\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPZ.layers = this.layers;\n\tcameraPZ.up.set( 0, - 1, 0 );\n\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\tthis.add( cameraPZ );\n\n\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNZ.layers = this.layers;\n\tcameraNZ.up.set( 0, - 1, 0 );\n\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\tthis.add( cameraNZ );\n\n\tthis.update = function ( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\trenderer.xr.enabled = false;\n\n\t\tconst generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderer.setRenderTarget( renderTarget, 0 );\n\t\trenderer.render( scene, cameraPX );\n\n\t\trenderer.setRenderTarget( renderTarget, 1 );\n\t\trenderer.render( scene, cameraNX );\n\n\t\trenderer.setRenderTarget( renderTarget, 2 );\n\t\trenderer.render( scene, cameraPY );\n\n\t\trenderer.setRenderTarget( renderTarget, 3 );\n\t\trenderer.render( scene, cameraNY );\n\n\t\trenderer.setRenderTarget( renderTarget, 4 );\n\t\trenderer.render( scene, cameraPZ );\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderer.setRenderTarget( renderTarget, 5 );\n\t\trenderer.render( scene, cameraNZ );\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\trenderer.xr.enabled = currentXrEnabled;\n\n\t};\n\n}\n\nCubeCamera.prototype = Object.create( Object3D.prototype );\nCubeCamera.prototype.constructor = CubeCamera;\n\nfunction CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\timages = images !== undefined ? images : [];\n\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\tformat = format !== undefined ? format : RGBFormat;\n\n\tTexture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.flipY = false;\n\n\t// Why CubeTexture._needsFlipEnvMap is necessary:\n\t//\n\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t// and the flag _needsFlipEnvMap controls this conversion. The flip is not required (and thus _needsFlipEnvMap is set to false)\n\t// when using WebGLCubeRenderTarget.texture as a cube texture.\n\n\tthis._needsFlipEnvMap = true;\n\n}\n\nCubeTexture.prototype = Object.create( Texture.prototype );\nCubeTexture.prototype.constructor = CubeTexture;\n\nCubeTexture.prototype.isCubeTexture = true;\n\nObject.defineProperty( CubeTexture.prototype, 'images', {\n\n\tget: function () {\n\n\t\treturn this.image;\n\n\t},\n\n\tset: function ( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n} );\n\nfunction WebGLCubeRenderTarget( size, options, dummy ) {\n\n\tif ( Number.isInteger( options ) ) {\n\n\t\tconsole.warn( 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )' );\n\n\t\toptions = dummy;\n\n\t}\n\n\tWebGLRenderTarget.call( this, size, size, options );\n\n\toptions = options || {};\n\n\tthis.texture = new CubeTexture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\tthis.texture._needsFlipEnvMap = false;\n\n}\n\nWebGLCubeRenderTarget.prototype = Object.create( WebGLRenderTarget.prototype );\nWebGLCubeRenderTarget.prototype.constructor = WebGLCubeRenderTarget;\n\nWebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true;\n\nWebGLCubeRenderTarget.prototype.fromEquirectangularTexture = function ( renderer, texture ) {\n\n\tthis.texture.type = texture.type;\n\tthis.texture.format = RGBAFormat; // see #18859\n\tthis.texture.encoding = texture.encoding;\n\n\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\tthis.texture.minFilter = texture.minFilter;\n\tthis.texture.magFilter = texture.magFilter;\n\n\tconst shader = {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: /* glsl */`\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t#include \n\t\t\t\t#include \n\n\t\t\t}\n\t\t`,\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tuniform sampler2D tEquirect;\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t}\n\t\t`\n\t};\n\n\tconst geometry = new BoxBufferGeometry( 5, 5, 5 );\n\n\tconst material = new ShaderMaterial( {\n\n\t\tname: 'CubemapFromEquirect',\n\n\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\tvertexShader: shader.vertexShader,\n\t\tfragmentShader: shader.fragmentShader,\n\t\tside: BackSide,\n\t\tblending: NoBlending\n\n\t} );\n\n\tmaterial.uniforms.tEquirect.value = texture;\n\n\tconst mesh = new Mesh( geometry, material );\n\n\tconst currentMinFilter = texture.minFilter;\n\n\t// Avoid blurred poles\n\tif ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;\n\n\tconst camera = new CubeCamera( 1, 10, this );\n\tcamera.update( renderer, mesh );\n\n\ttexture.minFilter = currentMinFilter;\n\n\tmesh.geometry.dispose();\n\tmesh.material.dispose();\n\n\treturn this;\n\n};\n\nWebGLCubeRenderTarget.prototype.clear = function ( renderer, color, depth, stencil ) {\n\n\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\trenderer.setRenderTarget( this, i );\n\n\t\trenderer.clear( color, depth, stencil );\n\n\t}\n\n\trenderer.setRenderTarget( currentRenderTarget );\n\n};\n\nfunction DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.image = { data: data || null, width: width || 1, height: height || 1 };\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\tthis.generateMipmaps = false;\n\tthis.flipY = false;\n\tthis.unpackAlignment = 1;\n\n\tthis.needsUpdate = true;\n\n}\n\nDataTexture.prototype = Object.create( Texture.prototype );\nDataTexture.prototype.constructor = DataTexture;\n\nDataTexture.prototype.isDataTexture = true;\n\nconst _sphere$1 = /*@__PURE__*/ new Sphere();\nconst _vector$5 = /*@__PURE__*/ new Vector3();\n\nclass Frustum {\n\n\tconstructor( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tthis.planes = [\n\n\t\t\t( p0 !== undefined ) ? p0 : new Plane(),\n\t\t\t( p1 !== undefined ) ? p1 : new Plane(),\n\t\t\t( p2 !== undefined ) ? p2 : new Plane(),\n\t\t\t( p3 !== undefined ) ? p3 : new Plane(),\n\t\t\t( p4 !== undefined ) ? p4 : new Plane(),\n\t\t\t( p5 !== undefined ) ? p5 : new Plane()\n\n\t\t];\n\n\t}\n\n\tset( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tconst planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( frustum ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromProjectionMatrix( m ) {\n\n\t\tconst planes = this.planes;\n\t\tconst me = m.elements;\n\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tconst me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\tintersectsObject( object ) {\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$1.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$1 );\n\n\t}\n\n\tintersectsSprite( sprite ) {\n\n\t\t_sphere$1.center.set( 0, 0, 0 );\n\t\t_sphere$1.radius = 0.7071067811865476;\n\t\t_sphere$1.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$1 );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst planes = this.planes;\n\t\tconst center = sphere.center;\n\t\tconst negRadius = - sphere.radius;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\n\t\t\t// corner at max distance\n\n\t\t\t_vector$5.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector$5.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector$5.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector$5 ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n}\n\nfunction WebGLAnimation() {\n\n\tlet context = null;\n\tlet isAnimating = false;\n\tlet animationLoop = null;\n\tlet requestId = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tanimationLoop( time, frame );\n\n\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tcontext.cancelAnimationFrame( requestId );\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLAttributes( gl, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tconst buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst usage = attribute.usage;\n\n\t\tconst buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tlet type = 5126;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = 5126;\n\n\t\t} else if ( array instanceof Float64Array ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' );\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\ttype = 5131;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\ttype = 5123;\n\n\t\t\t}\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = 5122;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = 5125;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = 5124;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = 5120;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = 5121;\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst updateRange = attribute.updateRange;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( updateRange.count === - 1 ) {\n\n\t\t\t// Not using update ranges\n\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t} else {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray, updateRange.offset, updateRange.count );\n\n\t\t\t} else {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\t}\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isGLBufferAttribute ) {\n\n\t\t\tconst cached = buffers.get( attribute );\n\n\t\t\tif ( ! cached || cached.version < attribute.version ) {\n\n\t\t\t\tbuffers.set( attribute, {\n\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\tversion: attribute.version\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\nclass PlaneBufferGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {\n\n\t\tsuper();\n\t\tthis.type = 'PlaneBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tconst width_half = width / 2;\n\t\tconst height_half = height / 2;\n\n\t\tconst gridX = Math.floor( widthSegments );\n\t\tconst gridY = Math.floor( heightSegments );\n\n\t\tconst gridX1 = gridX + 1;\n\t\tconst gridY1 = gridY + 1;\n\n\t\tconst segment_width = width / gridX;\n\t\tconst segment_height = height / gridY;\n\n\t\t//\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tconst y = iy * segment_height - height_half;\n\n\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tconst x = ix * segment_width - width_half;\n\n\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tconst a = ix + gridX1 * iy;\n\t\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tconst d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar alphatest_fragment = \"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\";\n\nvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\\n\\t#endif\\n#endif\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar begin_vertex = \"vec3 transformed = vec3( position );\";\n\nvar beginnormal_vertex = \"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\";\n\nvar bsdfs = \"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\\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\\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\\n}\\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\tif( cutoffDistance > 0.0 ) {\\n\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t}\\n\\treturn distanceFalloff;\\n#else\\n\\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n\\t}\\n\\treturn 1.0;\\n#endif\\n}\\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\\n\\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\\n}\\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\\n\\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\\n\\treturn Fr * fresnel + F0;\\n}\\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\treturn 1.0 / ( gl * gv );\\n}\\nfloat G_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}\\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( G * 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}\\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\treturn specularColor * brdf.x + brdf.y;\\n}\\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\tvec3 FssEss = F * brdf.x + brdf.y;\\n\\tfloat Ess = brdf.x + brdf.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\nfloat 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_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\\n\\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\\n}\\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\\n\\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie(float roughness, float NoH) {\\n\\tfloat invAlpha = 1.0 / roughness;\\n\\tfloat cos2h = NoH * NoH;\\n\\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\\n}\\nfloat V_Neubelt(float NoV, float NoL) {\\n\\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\\n}\\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\\n\\tvec3 N = geometry.normal;\\n\\tvec3 V = geometry.viewDir;\\n\\tvec3 H = normalize( V + L );\\n\\tfloat dotNH = saturate( dot( N, H ) );\\n\\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\\n}\\n#endif\";\n\nvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\\n\\t\\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\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 );\\n\\t\\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\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\";\n\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\";\n\nvar color_fragment = \"#ifdef USE_COLOR\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_pars_vertex = \"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_vertex = \"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvColor = vec3( 1.0 );\\n#endif\\n#ifdef USE_COLOR\\n\\tvColor.xyz *= color.xyz;\\n#endif\\n#ifdef USE_INSTANCING_COLOR\\n\\tvColor.xyz *= instanceColor.xyz;\\n#endif\";\n\nvar 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; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\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 max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\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};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal;\\n#endif\\n};\\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}\\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\tfloat distance = dot( planeNormal, point - pointOnPlane );\\n\\treturn - distance * planeNormal + point;\\n}\\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn sign( dot( point - pointOnPlane, planeNormal ) );\\n}\\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\\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 linearToRelativeLuminance( const in vec3 color ) {\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\treturn dot( weights, color.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}\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_maxMipLevel 8.0\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_maxTileSize 256.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\\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\\n\\t\\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\\n\\t\\tvec2 f = fract( uv );\\n\\t\\tuv += 0.5 - f;\\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\\tif ( mipInt < cubeUV_maxMipLevel ) {\\n\\t\\t\\tuv.y += 2.0 * cubeUV_maxTileSize;\\n\\t\\t}\\n\\t\\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\\n\\t\\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\\n\\t\\tuv *= texelSize;\\n\\t\\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x += texelSize;\\n\\t\\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.y += texelSize;\\n\\t\\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x -= texelSize;\\n\\t\\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tvec3 tm = mix( tl, tr, f.x );\\n\\t\\tvec3 bm = mix( bl, br, f.x );\\n\\t\\treturn mix( tm, bm, f.y );\\n\\t}\\n\\t#define r0 1.0\\n\\t#define v0 0.339\\n\\t#define m0 - 2.0\\n\\t#define r1 0.8\\n\\t#define v1 0.276\\n\\t#define m1 - 1.0\\n\\t#define r4 0.4\\n\\t#define v4 0.046\\n\\t#define m4 2.0\\n\\t#define r5 0.305\\n\\t#define v5 0.016\\n\\t#define m5 3.0\\n\\t#define r6 0.21\\n\\t#define v6 0.0038\\n\\t#define m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= r1 ) {\\n\\t\\t\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\n\\t\\t} else if ( roughness >= r4 ) {\\n\\t\\t\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\n\\t\\t} else if ( roughness >= r5 ) {\\n\\t\\t\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\n\\t\\t} else if ( roughness >= r6 ) {\\n\\t\\t\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + 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 ), m0, cubeUV_maxMipLevel );\\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\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = objectNormal;\\n#ifdef USE_INSTANCING\\n\\tmat3 m = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\n\\ttransformedNormal = m * transformedNormal;\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\n#endif\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\";\n\nvar encodings_fragment = \"gl_FragColor = linearToOutputTexel( gl_FragColor );\";\n\nvar encodings_pars_fragment = \"\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\\n}\\nvec4 LinearTosRGB( 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 RGBEToLinear( in vec4 value ) {\\n\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\n\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n\\tM = ceil( M * 255.0 ) / 255.0;\\n\\treturn vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\\n\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value ) {\\n\\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\\n\\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\\n\\tvec4 vResult;\\n\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n\\tvResult.w = fract( Le );\\n\\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\\n\\treturn vResult;\\n}\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n\\tfloat Le = value.z * 255.0 + value.w;\\n\\tvec3 Xp_Y_XYZp;\\n\\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\\n\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n\\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\\n\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\n}\";\n\nvar 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, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifndef ENVMAP_TYPE_CUBE_UV\\n\\t\\tenvColor = envMapTexelToLinear( envColor );\\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\";\n\nvar envmap_common_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform int maxMipLevel;\\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\";\n\nvar envmap_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\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\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\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\";\n\nvar 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\";\n\nvar fog_vertex = \"#ifdef USE_FOG\\n\\tfogDepth = - mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float fogDepth;\\n#endif\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\";\n\nvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float fogDepth;\\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\";\n\nvar 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 texture2D( gradientMap, coord ).rgb;\\n\\t#else\\n\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t#endif\\n}\";\n\nvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n#endif\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar lights_lambert_vertex = \"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\nvIndirectFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n\\tvIndirectBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\\n#ifdef DOUBLE_SIDED\\n\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\n\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\";\n\nvar lights_pars_begin = \"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\nuniform vec3 lightProbe[ 9 ];\\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 GeometricContext geometry ) {\\n\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treturn irradiance;\\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 getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tdirectLight.color = directionalLight.color;\\n\\t\\tdirectLight.direction = directionalLight.direction;\\n\\t\\tdirectLight.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 getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tdirectLight.color = pointLight.color;\\n\\t\\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tdirectLight.visible = ( directLight.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 getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tfloat angleCos = dot( directLight.direction, spotLight.direction );\\n\\t\\tif ( angleCos > spotLight.coneCos ) {\\n\\t\\t\\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\t\\tdirectLight.color = spotLight.color;\\n\\t\\t\\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tdirectLight.visible = true;\\n\\t\\t} else {\\n\\t\\t\\tdirectLight.color = vec3( 0.0 );\\n\\t\\t\\tdirectLight.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 GeometricContext geometry ) {\\n\\t\\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tirradiance *= PI;\\n\\t\\t#endif\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\";\n\nvar envmap_physical_pars_fragment = \"#if defined( USE_ENVMAP )\\n\\t#ifdef ENVMAP_MODE_REFRACTION\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n\\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\\n\\t\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\n\\t\\t#else\\n\\t\\t\\tvec4 envMapColor = vec4( 0.0 );\\n\\t\\t#endif\\n\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t}\\n\\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\\n\\t\\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\\t\\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\\n\\t\\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\\n\\t\\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\\t}\\n\\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( -viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\\n\\t\\t#endif\\n\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\n\\t\\t#endif\\n\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t}\\n#endif\";\n\nvar lights_toon_fragment = \"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\";\n\nvar lights_toon_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\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 GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\\n#ifdef REFLECTIVITY\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\\n#endif\\n#ifdef CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).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_SHEEN\\n\\tmaterial.sheenColor = sheen;\\n#endif\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularRoughness;\\n\\tvec3 specularColor;\\n#ifdef CLEARCOAT\\n\\tfloat clearcoat;\\n\\tfloat clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tvec3 sheenColor;\\n#endif\\n};\\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\\n\\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\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.specularRoughness;\\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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = ccDotNL * directLight.color;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tccIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t\\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\\n\\t\\t\\tmaterial.specularRoughness,\\n\\t\\t\\tdirectLight.direction,\\n\\t\\t\\tgeometry,\\n\\t\\t\\tmaterial.sheenColor\\n\\t\\t);\\n\\t#else\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\\n\\t#endif\\n\\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t\\tfloat ccDotNL = ccDotNV;\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\tfloat clearcoatInv = 1.0 - clearcoatDHR;\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\n\\treflectedLight.indirectSpecular += clearcoatInv * 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}\";\n\nvar lights_fragment_begin = \"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n#ifdef CLEARCOAT\\n\\tgeometry.clearcoatNormal = clearcoatNormal;\\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\\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( 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, geometry, 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\\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\\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, 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\\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( 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, geometry, 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, geometry, 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\\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\\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 ], geometry );\\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\";\n\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\\n\\t#ifdef CLEARCOAT\\n\\t\\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\\n\\t#endif\\n#endif\";\n\nvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\n#endif\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t\\tvarying float vIsPerspective;\\n\\t#else\\n\\t\\tuniform float logDepthBufFC;\\n\\t#endif\\n#endif\";\n\nvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n\\t#else\\n\\t\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\n\\t\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\t\\tgl_Position.z *= gl_Position.w;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\";\n\nvar map_particle_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\";\n\nvar map_particle_pars_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tuniform mat3 uvTransform;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\n\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\n\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\n\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\n#endif\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\tuniform float morphTargetBaseInfluence;\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\tuniform float morphTargetInfluences[ 8 ];\\n\\t#else\\n\\t\\tuniform float morphTargetInfluences[ 4 ];\\n\\t#endif\\n#endif\";\n\nvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\n\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\n\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\n\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\n\\t\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\n\\t\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\n\\t\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\n\\t#endif\\n#endif\";\n\nvar normal_fragment_begin = \"#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t#endif\\n\\t#ifdef USE_TANGENT\\n\\t\\tvec3 tangent = normalize( vTangent );\\n\\t\\tvec3 bitangent = normalize( vBitangent );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\t\\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\t#endif\\n\\t\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\nvec3 geometryNormal = normal;\";\n\nvar normal_fragment_maps = \"#ifdef OBJECTSPACE_NORMALMAP\\n\\tnormal = texture2D( normalMap, vUv ).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 * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t#endif\\n\\tnormal = normalize( normalMatrix * normal );\\n#elif defined( TANGENTSPACE_NORMALMAP )\\n\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tnormal = normalize( vTBN * mapN );\\n\\t#else\\n\\t\\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\\n\\t#endif\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\\n#endif\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef OBJECTSPACE_NORMALMAP\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\\n\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.st );\\n\\t\\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\\n\\t\\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\\n\\t\\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\\n\\t\\tvec3 N = normalize( surf_norm );\\n\\t\\tmat3 tsn = mat3( S, T, N );\\n\\t\\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\treturn normalize( tsn * mapN );\\n\\t}\\n#endif\";\n\nvar clearcoat_normal_fragment_begin = \"#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal = geometryNormal;\\n#endif\";\n\nvar clearcoat_normal_fragment_maps = \"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\n\\t#else\\n\\t\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\\n\\t#endif\\n#endif\";\n\nvar clearcoat_pars_fragment = \"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\";\n\nvar 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}\\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 linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( 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 invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\";\n\nvar project_vertex = \"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\";\n\nvar dithering_fragment = \"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\";\n\nvar 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\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar shadowmap_pars_fragment = \"#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\\tvarying vec4 vSpotShadowCoord[ 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\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn shadow;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar shadowmap_pars_vertex = \"#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\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ 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 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\";\n\nvar shadowmap_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\tvec4 shadowWorldPosition;\\n\\t#endif\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\";\n\nvar 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, vSpotShadowCoord[ 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}\";\n\nvar 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\";\n\nvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\t#ifdef BONE_TEXTURE\\n\\t\\tuniform highp sampler2D boneTexture;\\n\\t\\tuniform int boneTextureSize;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#else\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar 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\";\n\nvar 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\";\n\nvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\";\n\nvar 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 toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3( 1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108, 1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605, 1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\";\n\nvar transmissionmap_fragment = \"#ifdef USE_TRANSMISSIONMAP\\n\\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\\n#endif\";\n\nvar transmissionmap_pars_fragment = \"#ifdef USE_TRANSMISSIONMAP\\n\\tuniform sampler2D transmissionMap;\\n#endif\";\n\nvar uv_pars_fragment = \"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\\n\\tvarying vec2 vUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#ifdef USE_UV\\n\\t#ifdef UVS_VERTEX_ONLY\\n\\t\\tvec2 vUv;\\n\\t#else\\n\\t\\tvarying vec2 vUv;\\n\\t#endif\\n\\tuniform mat3 uvTransform;\\n#endif\";\n\nvar uv_vertex = \"#ifdef USE_UV\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\";\n\nvar uv2_pars_fragment = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\";\n\nvar uv2_pars_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n\\tuniform mat3 uv2Transform;\\n#endif\";\n\nvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\";\n\nvar background_frag = \"uniform sampler2D t2D;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include \\n\\t#include \\n}\";\n\nvar background_vert = \"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}\";\n\nvar cube_frag = \"#include \\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 vReflect = vWorldDirection;\\n\\t#include \\n\\tgl_FragColor = envColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include \\n\\t#include \\n}\";\n\nvar cube_vert = \"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}\";\n\nvar depth_frag = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\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\\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}\";\n\nvar depth_vert = \"#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#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}\";\n\nvar distanceRGBA_frag = \"#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 \\nvoid main () {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\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}\";\n\nvar distanceRGBA_vert = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\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}\";\n\nvar equirect_frag = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tvec4 texColor = texture2D( tEquirect, sampleUV );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include \\n\\t#include \\n}\";\n\nvar equirect_vert = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n}\";\n\nvar linedashed_frag = \"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 \\nvoid main() {\\n\\t#include \\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar linedashed_vert = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\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}\";\n\nvar meshbasic_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshbasic_vert = \"#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#ifdef USE_ENVMAP\\n\\t#include \\n\\t#include \\n\\t#include \\n\\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 \\n}\";\n\nvar meshlambert_frag = \"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vIndirectFront;\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshlambert_vert = \"#define LAMBERT\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include \\n#include \\n#include \\n#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#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\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshmatcap_frag = \"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t\\tmatcapColor = matcapTexelToLinear( matcapColor );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshmatcap_vert = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\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#include \\n\\t#include \\n\\t#ifndef FLAT_SHADED\\n\\t\\tvNormal = normalize( transformedNormal );\\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\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\nvar meshtoon_frag = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\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\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshtoon_vert = \"#define TOON\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#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#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphong_frag = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\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\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphong_vert = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#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#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphysical_frag = \"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define REFLECTIVITY\\n\\t#define CLEARCOAT\\n\\t#define TRANSMISSION\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef TRANSMISSION\\n\\tuniform float transmission;\\n#endif\\n#ifdef REFLECTIVITY\\n\\tuniform float reflectivity;\\n#endif\\n#ifdef CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheen;\\n#endif\\nvarying vec3 vViewPosition;\\n#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\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#ifdef TRANSMISSION\\n\\t\\tfloat totalTransmission = transmission;\\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 \\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\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#ifdef TRANSMISSION\\n\\t\\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\\n\\t#endif\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphysical_vert = \"#define STANDARD\\nvarying vec3 vViewPosition;\\n#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\\n#include \\n#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#include \\n\\t#include \\n\\t#include \\n#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\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar normal_frag = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#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\\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\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\";\n\nvar normal_vert = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#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\\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#include \\n#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\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\";\n\nvar points_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar points_vert = \"uniform float size;\\nuniform float scale;\\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\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar shadow_frag = \"uniform vec3 color;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar shadow_vert = \"#include \\n#include \\n#include \\nvoid main() {\\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}\";\n\nvar sprite_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar sprite_vert = \"uniform float rotation;\\nuniform vec2 center;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst ShaderChunk = {\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tencodings_fragment: encodings_fragment,\n\tencodings_pars_fragment: encodings_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_common_pars_fragment: envmap_common_pars_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_fragment: lightmap_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_vertex: lights_lambert_vertex,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_toon_fragment: lights_toon_fragment,\n\tlights_toon_pars_fragment: lights_toon_pars_fragment,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\tclearcoat_pars_fragment: clearcoat_pars_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\ttransmissionmap_fragment: transmissionmap_fragment,\n\ttransmissionmap_pars_fragment: transmissionmap_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tuv2_pars_fragment: uv2_pars_fragment,\n\tuv2_pars_vertex: uv2_pars_vertex,\n\tuv2_vertex: uv2_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tbackground_frag: background_frag,\n\tbackground_vert: background_vert,\n\tcube_frag: cube_frag,\n\tcube_vert: cube_vert,\n\tdepth_frag: depth_frag,\n\tdepth_vert: depth_vert,\n\tdistanceRGBA_frag: distanceRGBA_frag,\n\tdistanceRGBA_vert: distanceRGBA_vert,\n\tequirect_frag: equirect_frag,\n\tequirect_vert: equirect_vert,\n\tlinedashed_frag: linedashed_frag,\n\tlinedashed_vert: linedashed_vert,\n\tmeshbasic_frag: meshbasic_frag,\n\tmeshbasic_vert: meshbasic_vert,\n\tmeshlambert_frag: meshlambert_frag,\n\tmeshlambert_vert: meshlambert_vert,\n\tmeshmatcap_frag: meshmatcap_frag,\n\tmeshmatcap_vert: meshmatcap_vert,\n\tmeshtoon_frag: meshtoon_frag,\n\tmeshtoon_vert: meshtoon_vert,\n\tmeshphong_frag: meshphong_frag,\n\tmeshphong_vert: meshphong_vert,\n\tmeshphysical_frag: meshphysical_frag,\n\tmeshphysical_vert: meshphysical_vert,\n\tnormal_frag: normal_frag,\n\tnormal_vert: normal_vert,\n\tpoints_frag: points_frag,\n\tpoints_vert: points_vert,\n\tshadow_frag: shadow_frag,\n\tshadow_vert: shadow_vert,\n\tsprite_frag: sprite_frag,\n\tsprite_vert: sprite_vert\n};\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nconst UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tuvTransform: { value: new Matrix3() },\n\t\tuv2Transform: { value: new Matrix3() },\n\n\t\talphaMap: { value: null },\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 },\n\t\trefractionRatio: { value: 0.98 },\n\t\tmaxMipLevel: { value: 0 }\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalScale: { value: new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tlightProbe: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {}\n\t\t} },\n\n\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {}\n\t\t} },\n\n\t\tspotLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotShadowMap: { value: [] },\n\t\tspotShadowMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {}\n\t\t} },\n\n\t\tpointLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} },\n\n\t\tltc_1: { value: null },\n\t\tltc_2: { value: null }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t}\n\n};\n\nconst ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 1.0 },\n\t\t\t\tmetalness: { value: 0.0 },\n\t\t\t\tenvMapIntensity: { value: 1 } // temporary\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\ttoon: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.normal_vert,\n\t\tfragmentShader: ShaderChunk.normal_frag\n\n\t},\n\n\tsprite: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tuvTransform: { value: new Matrix3() },\n\t\t\tt2D: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\t/* -------------------------------------------------------------------------\n\t//\tCube map shader\n\t ------------------------------------------------------------------------- */\n\n\tcube: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.envmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: mergeUniforms( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearcoat: { value: 0 },\n\t\t\tclearcoatMap: { value: null },\n\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\tclearcoatNormalScale: { value: new Vector2( 1, 1 ) },\n\t\t\tclearcoatNormalMap: { value: null },\n\t\t\tsheen: { value: new Color( 0x000000 ) },\n\t\t\ttransmission: { value: 0 },\n\t\t\ttransmissionMap: { value: null },\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\nfunction WebGLBackground( renderer, cubemaps, state, objects, premultipliedAlpha ) {\n\n\tconst clearColor = new Color( 0x000000 );\n\tlet clearAlpha = 0;\n\n\tlet planeMesh;\n\tlet boxMesh;\n\n\tlet currentBackground = null;\n\tlet currentBackgroundVersion = 0;\n\tlet currentTonemapping = null;\n\n\tfunction render( renderList, scene, camera, forceClear ) {\n\n\t\tlet background = scene.isScene === true ? scene.background : null;\n\n\t\tif ( background && background.isTexture ) {\n\n\t\t\tbackground = cubemaps.get( background );\n\n\t\t}\n\n\t\t// Ignore background in AR\n\t\t// TODO: Reconsider this.\n\n\t\tconst xr = renderer.xr;\n\t\tconst session = xr.getSession && xr.getSession();\n\n\t\tif ( session && session.environmentBlendMode === 'additive' ) {\n\n\t\t\tbackground = null;\n\n\t\t}\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\tif ( background && ( background.isCubeTexture || background.isWebGLCubeRenderTarget || background.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxBufferGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.cube.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.cube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.cube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\t// enable code injection for non-built-in material\n\t\t\t\tObject.defineProperty( boxMesh.material, 'envMap', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\tif ( background.isWebGLCubeRenderTarget ) {\n\n\t\t\t\t// TODO Deprecate\n\n\t\t\t\tbackground = background.texture;\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\tboxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background._needsFlipEnvMap ) ? - 1 : 1;\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tboxMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneBufferGeometry( 2, 2 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.background.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tplaneMesh.geometry.deleteAttribute( 'normal' );\n\n\t\t\t\t// enable code injection for non-built-in material\n\t\t\t\tObject.defineProperty( planeMesh.material, 'map', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\n\t\t\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\tbackground.updateMatrix();\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tplaneMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tstate.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha = 1 ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render\n\n\t};\n\n}\n\nfunction WebGLBindingStates( gl, extensions, attributes, capabilities ) {\n\n\tconst maxVertexAttributes = gl.getParameter( 34921 );\n\n\tconst extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' );\n\tconst vaoAvailable = capabilities.isWebGL2 || extension !== null;\n\n\tconst bindingStates = {};\n\n\tconst defaultState = createBindingState( null );\n\tlet currentState = defaultState;\n\n\tfunction setup( object, material, program, geometry, index ) {\n\n\t\tlet updateBuffers = false;\n\n\t\tif ( vaoAvailable ) {\n\n\t\t\tconst state = getBindingState( geometry, program, material );\n\n\t\t\tif ( currentState !== state ) {\n\n\t\t\t\tcurrentState = state;\n\t\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t\t}\n\n\t\t\tupdateBuffers = needsUpdate( geometry, index );\n\n\t\t\tif ( updateBuffers ) saveCache( geometry, index );\n\n\t\t} else {\n\n\t\t\tconst wireframe = ( material.wireframe === true );\n\n\t\t\tif ( currentState.geometry !== geometry.id ||\n\t\t\t\tcurrentState.program !== program.id ||\n\t\t\t\tcurrentState.wireframe !== wireframe ) {\n\n\t\t\t\tcurrentState.geometry = geometry.id;\n\t\t\t\tcurrentState.program = program.id;\n\t\t\t\tcurrentState.wireframe = wireframe;\n\n\t\t\t\tupdateBuffers = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh === true ) {\n\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, 34963 );\n\n\t\t}\n\n\t\tif ( updateBuffers ) {\n\n\t\t\tsetupVertexAttributes( object, material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tgl.bindBuffer( 34963, attributes.get( index ).buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createVertexArrayObject() {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.createVertexArray();\n\n\t\treturn extension.createVertexArrayOES();\n\n\t}\n\n\tfunction bindVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao );\n\n\t\treturn extension.bindVertexArrayOES( vao );\n\n\t}\n\n\tfunction deleteVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao );\n\n\t\treturn extension.deleteVertexArrayOES( vao );\n\n\t}\n\n\tfunction getBindingState( geometry, program, material ) {\n\n\t\tconst wireframe = ( material.wireframe === true );\n\n\t\tlet programMap = bindingStates[ geometry.id ];\n\n\t\tif ( programMap === undefined ) {\n\n\t\t\tprogramMap = {};\n\t\t\tbindingStates[ geometry.id ] = programMap;\n\n\t\t}\n\n\t\tlet stateMap = programMap[ program.id ];\n\n\t\tif ( stateMap === undefined ) {\n\n\t\t\tstateMap = {};\n\t\t\tprogramMap[ program.id ] = stateMap;\n\n\t\t}\n\n\t\tlet state = stateMap[ wireframe ];\n\n\t\tif ( state === undefined ) {\n\n\t\t\tstate = createBindingState( createVertexArrayObject() );\n\t\t\tstateMap[ wireframe ] = state;\n\n\t\t}\n\n\t\treturn state;\n\n\t}\n\n\tfunction createBindingState( vao ) {\n\n\t\tconst newAttributes = [];\n\t\tconst enabledAttributes = [];\n\t\tconst attributeDivisors = [];\n\n\t\tfor ( let i = 0; i < maxVertexAttributes; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\t\t\tenabledAttributes[ i ] = 0;\n\t\t\tattributeDivisors[ i ] = 0;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\tgeometry: null,\n\t\t\tprogram: null,\n\t\t\twireframe: false,\n\n\t\t\tnewAttributes: newAttributes,\n\t\t\tenabledAttributes: enabledAttributes,\n\t\t\tattributeDivisors: attributeDivisors,\n\t\t\tobject: vao,\n\t\t\tattributes: {},\n\t\t\tindex: null\n\n\t\t};\n\n\t}\n\n\tfunction needsUpdate( geometry, index ) {\n\n\t\tconst cachedAttributes = currentState.attributes;\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tlet attributesNum = 0;\n\n\t\tfor ( const key in geometryAttributes ) {\n\n\t\t\tconst cachedAttribute = cachedAttributes[ key ];\n\t\t\tconst geometryAttribute = geometryAttributes[ key ];\n\n\t\t\tif ( cachedAttribute === undefined ) return true;\n\n\t\t\tif ( cachedAttribute.attribute !== geometryAttribute ) return true;\n\n\t\t\tif ( cachedAttribute.data !== geometryAttribute.data ) return true;\n\n\t\t\tattributesNum ++;\n\n\t\t}\n\n\t\tif ( currentState.attributesNum !== attributesNum ) return true;\n\n\t\tif ( currentState.index !== index ) return true;\n\n\t\treturn false;\n\n\t}\n\n\tfunction saveCache( geometry, index ) {\n\n\t\tconst cache = {};\n\t\tconst attributes = geometry.attributes;\n\t\tlet attributesNum = 0;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tconst data = {};\n\t\t\tdata.attribute = attribute;\n\n\t\t\tif ( attribute.data ) {\n\n\t\t\t\tdata.data = attribute.data;\n\n\t\t\t}\n\n\t\t\tcache[ key ] = data;\n\n\t\t\tattributesNum ++;\n\n\t\t}\n\n\t\tcurrentState.attributes = cache;\n\t\tcurrentState.attributesNum = attributesNum;\n\n\t\tcurrentState.index = index;\n\n\t}\n\n\tfunction initAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\n\t\tfor ( let i = 0, il = newAttributes.length; i < il; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\t\tconst attributeDivisors = currentState.attributeDivisors;\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tconst extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\n\t\tfor ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction vertexAttribPointer( index, size, type, normalized, stride, offset ) {\n\n\t\tif ( capabilities.isWebGL2 === true && ( type === 5124 || type === 5125 ) ) {\n\n\t\t\tgl.vertexAttribIPointer( index, size, type, stride, offset );\n\n\t\t} else {\n\n\t\t\tgl.vertexAttribPointer( index, size, type, normalized, stride, offset );\n\n\t\t}\n\n\t}\n\n\tfunction setupVertexAttributes( object, material, program, geometry ) {\n\n\t\tif ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) {\n\n\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return;\n\n\t\t}\n\n\t\tinitAttributes();\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tconst materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute >= 0 ) {\n\n\t\t\t\tconst geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tconst normalized = geometryAttribute.normalized;\n\t\t\t\t\tconst size = geometryAttribute.itemSize;\n\n\t\t\t\t\tconst attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\t\t\t\t\tconst bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst data = geometryAttribute.data;\n\t\t\t\t\t\tconst stride = data.stride;\n\t\t\t\t\t\tconst offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data && data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute, data.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tenableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\t\t\t\t\t\tvertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tenableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\t\t\t\t\t\tvertexAttribPointer( programAttribute, size, type, normalized, 0, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( name === 'instanceMatrix' ) {\n\n\t\t\t\t\tconst attribute = attributes.get( object.instanceMatrix );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 0, 1 );\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 1, 1 );\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 2, 1 );\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 3, 1 );\n\n\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 0, 4, type, false, 64, 0 );\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 1, 4, type, false, 64, 16 );\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 2, 4, type, false, 64, 32 );\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 3, 4, type, false, 64, 48 );\n\n\t\t\t\t} else if ( name === 'instanceColor' ) {\n\n\t\t\t\t\tconst attribute = attributes.get( object.instanceColor );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute, 1 );\n\n\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute, 3, type, false, 12, 0 );\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tconst value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\tgl.vertexAttrib2fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\tgl.vertexAttrib3fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\tgl.vertexAttrib4fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tgl.vertexAttrib1fv( programAttribute, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tdisableUnusedAttributes();\n\n\t}\n\n\tfunction dispose() {\n\n\t\treset();\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t}\n\n\t}\n\n\tfunction releaseStatesOfGeometry( geometry ) {\n\n\t\tif ( bindingStates[ geometry.id ] === undefined ) return;\n\n\t\tconst programMap = bindingStates[ geometry.id ];\n\n\t\tfor ( const programId in programMap ) {\n\n\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ programId ];\n\n\t\t}\n\n\t\tdelete bindingStates[ geometry.id ];\n\n\t}\n\n\tfunction releaseStatesOfProgram( program ) {\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tif ( programMap[ program.id ] === undefined ) continue;\n\n\t\t\tconst stateMap = programMap[ program.id ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ program.id ];\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\tresetDefaultState();\n\n\t\tif ( currentState === defaultState ) return;\n\n\t\tcurrentState = defaultState;\n\t\tbindVertexArrayObject( currentState.object );\n\n\t}\n\n\t// for backward-compatilibity\n\n\tfunction resetDefaultState() {\n\n\t\tdefaultState.geometry = null;\n\t\tdefaultState.program = null;\n\t\tdefaultState.wireframe = false;\n\n\t}\n\n\treturn {\n\n\t\tsetup: setup,\n\t\treset: reset,\n\t\tresetDefaultState: resetDefaultState,\n\t\tdispose: dispose,\n\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tdisableUnusedAttributes: disableUnusedAttributes\n\n\t};\n\n}\n\nfunction WebGLBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawArraysInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawArraysInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ methodName ]( mode, start, count, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\nfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\tlet maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( 35633, 36338 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36338 ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( 35633, 36337 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36337 ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\t/* eslint-disable no-undef */\n\tconst isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ) ||\n\t\t( typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext );\n\t/* eslint-enable no-undef */\n\n\tlet precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tconst maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tconst maxTextures = gl.getParameter( 34930 );\n\tconst maxVertexTextures = gl.getParameter( 35660 );\n\tconst maxTextureSize = gl.getParameter( 3379 );\n\tconst maxCubemapSize = gl.getParameter( 34076 );\n\n\tconst maxAttributes = gl.getParameter( 34921 );\n\tconst maxVertexUniforms = gl.getParameter( 36347 );\n\tconst maxVaryings = gl.getParameter( 36348 );\n\tconst maxFragmentUniforms = gl.getParameter( 36349 );\n\n\tconst vertexTextures = maxVertexTextures > 0;\n\tconst floatFragmentTextures = isWebGL2 || !! extensions.get( 'OES_texture_float' );\n\tconst floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\tconst maxSamples = isWebGL2 ? gl.getParameter( 36183 ) : 0;\n\n\treturn {\n\n\t\tisWebGL2: isWebGL2,\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\tfloatVertexTextures: floatVertexTextures,\n\n\t\tmaxSamples: maxSamples\n\n\t};\n\n}\n\nfunction WebGLClipping( properties ) {\n\n\tconst scope = this;\n\n\tlet globalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false;\n\n\tconst plane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping, camera ) {\n\n\t\tconst enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\t\tresetGlobalState();\n\n\t};\n\n\tthis.setState = function ( material, camera, useCache ) {\n\n\t\tconst planes = material.clippingPlanes,\n\t\t\tclipIntersection = material.clipIntersection,\n\t\t\tclipShadows = material.clipShadows;\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4;\n\n\t\t\tlet dstArray = materialProperties.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, useCache );\n\n\t\t\tfor ( let i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tmaterialProperties.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tconst nPlanes = planes !== null ? planes.length : 0;\n\t\tlet dstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tconst flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\t\tscope.numIntersection = 0;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\nfunction WebGLCubeMaps( renderer ) {\n\n\tlet cubemaps = new WeakMap();\n\n\tfunction mapTextureMapping( texture, mapping ) {\n\n\t\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\t\ttexture.mapping = CubeReflectionMapping;\n\n\t\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\t\ttexture.mapping = CubeRefractionMapping;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\tif ( cubemaps.has( texture ) ) {\n\n\t\t\t\t\tconst cubemap = cubemaps.get( texture ).texture;\n\t\t\t\t\treturn mapTextureMapping( cubemap, texture.mapping );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( image && image.height > 0 ) {\n\n\t\t\t\t\t\tconst currentRenderList = renderer.getRenderList();\n\t\t\t\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\t\t\t\t\tconst currentRenderState = renderer.getRenderState();\n\n\t\t\t\t\t\tconst renderTarget = new WebGLCubeRenderTarget( image.height / 2 );\n\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\t\t\t\t\t\tcubemaps.set( texture, renderTarget );\n\n\t\t\t\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\t\t\t\t\t\trenderer.setRenderList( currentRenderList );\n\t\t\t\t\t\trenderer.setRenderState( currentRenderState );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\treturn mapTextureMapping( renderTarget.texture, texture.mapping );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemap = cubemaps.get( texture );\n\n\t\tif ( cubemap !== undefined ) {\n\n\t\t\tcubemaps.delete( texture );\n\t\t\tcubemap.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubemaps = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLExtensions( gl ) {\n\n\tconst extensions = {};\n\n\treturn {\n\n\t\thas: function ( name ) {\n\n\t\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\t\treturn extensions[ name ] !== null;\n\n\t\t\t}\n\n\t\t\tlet extension;\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\textension = gl.getExtension( name );\n\n\t\t\t}\n\n\t\t\textensions[ name ] = extension;\n\n\t\t\treturn extension !== null;\n\n\t\t},\n\n\t\tget: function ( name ) {\n\n\t\t\tif ( ! this.has( name ) ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\treturn extensions[ name ];\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\tconst geometries = new WeakMap();\n\tconst wireframeAttributes = new WeakMap();\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tconst geometry = event.target;\n\t\tconst buffergeometry = geometries.get( geometry );\n\n\t\tif ( buffergeometry.index !== null ) {\n\n\t\t\tattributes.remove( buffergeometry.index );\n\n\t\t}\n\n\t\tfor ( const name in buffergeometry.attributes ) {\n\n\t\t\tattributes.remove( buffergeometry.attributes[ name ] );\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tgeometries.delete( geometry );\n\n\t\tconst attribute = wireframeAttributes.get( buffergeometry );\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\twireframeAttributes.delete( buffergeometry );\n\n\t\t}\n\n\t\tbindingStates.releaseStatesOfGeometry( buffergeometry );\n\n\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\tdelete geometry._maxInstanceCount;\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tlet buffergeometry = geometries.get( geometry );\n\n\t\tif ( buffergeometry ) return buffergeometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tbuffergeometry = geometry;\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tif ( geometry._bufferGeometry === undefined ) {\n\n\t\t\t\tgeometry._bufferGeometry = new BufferGeometry().setFromObject( object );\n\n\t\t\t}\n\n\t\t\tbuffergeometry = geometry._bufferGeometry;\n\n\t\t}\n\n\t\tgeometries.set( geometry, buffergeometry );\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\tfor ( const name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], 34962 );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateWireframeAttribute( geometry ) {\n\n\t\tconst indices = [];\n\n\t\tconst geometryIndex = geometry.index;\n\t\tconst geometryPosition = geometry.attributes.position;\n\t\tlet version = 0;\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tconst array = geometryIndex.array;\n\t\t\tversion = geometryIndex.version;\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = array[ i + 0 ];\n\t\t\t\tconst b = array[ i + 1 ];\n\t\t\t\tconst c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst array = geometryPosition.array;\n\t\t\tversion = geometryPosition.version;\n\n\t\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tconst a = i + 0;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\t\tattribute.version = version;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates\n\n\t\t//\n\n\t\tconst previousAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( previousAttribute ) attributes.remove( previousAttribute );\n\n\t\t//\n\n\t\twireframeAttributes.set( geometry, attribute );\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tconst currentAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( currentAttribute ) {\n\n\t\t\tconst geometryIndex = geometry.index;\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\t// if the attribute is obsolete, create a new one\n\n\t\t\t\tif ( currentAttribute.version < geometryIndex.version ) {\n\n\t\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t}\n\n\t\treturn wireframeAttributes.get( geometry );\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tlet type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawElementsInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawElementsInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ methodName ]( mode, count, type, start * bytesPerElement, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\nfunction WebGLInfo( gl ) {\n\n\tconst memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tconst render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase 4:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 3:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase 0:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.frame ++;\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\nfunction numericalSort( a, b ) {\n\n\treturn a[ 0 ] - b[ 0 ];\n\n}\n\nfunction absNumericalSort( a, b ) {\n\n\treturn Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );\n\n}\n\nfunction WebGLMorphtargets( gl ) {\n\n\tconst influencesList = {};\n\tconst morphInfluences = new Float32Array( 8 );\n\n\tconst workInfluences = [];\n\n\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\tworkInfluences[ i ] = [ i, 0 ];\n\n\t}\n\n\tfunction update( object, geometry, material, program ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\t// When object doesn't have morph target influences defined, we treat it as a 0-length array\n\t\t// This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences\n\n\t\tconst length = objectInfluences === undefined ? 0 : objectInfluences.length;\n\n\t\tlet influences = influencesList[ geometry.id ];\n\n\t\tif ( influences === undefined ) {\n\n\t\t\t// initialise list\n\n\t\t\tinfluences = [];\n\n\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\tinfluences[ i ] = [ i, 0 ];\n\n\t\t\t}\n\n\t\t\tinfluencesList[ geometry.id ] = influences;\n\n\t\t}\n\n\t\t// Collect influences\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst influence = influences[ i ];\n\n\t\t\tinfluence[ 0 ] = i;\n\t\t\tinfluence[ 1 ] = objectInfluences[ i ];\n\n\t\t}\n\n\t\tinfluences.sort( absNumericalSort );\n\n\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\tif ( i < length && influences[ i ][ 1 ] ) {\n\n\t\t\t\tworkInfluences[ i ][ 0 ] = influences[ i ][ 0 ];\n\t\t\t\tworkInfluences[ i ][ 1 ] = influences[ i ][ 1 ];\n\n\t\t\t} else {\n\n\t\t\t\tworkInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER;\n\t\t\t\tworkInfluences[ i ][ 1 ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tworkInfluences.sort( numericalSort );\n\n\t\tconst morphTargets = material.morphTargets && geometry.morphAttributes.position;\n\t\tconst morphNormals = material.morphNormals && geometry.morphAttributes.normal;\n\n\t\tlet morphInfluencesSum = 0;\n\n\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\tconst influence = workInfluences[ i ];\n\t\t\tconst index = influence[ 0 ];\n\t\t\tconst value = influence[ 1 ];\n\n\t\t\tif ( index !== Number.MAX_SAFE_INTEGER && value ) {\n\n\t\t\t\tif ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t}\n\n\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\tmorphInfluencesSum += value;\n\n\t\t\t} else {\n\n\t\t\t\tif ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) {\n\n\t\t\t\t\tgeometry.deleteAttribute( 'morphTarget' + i );\n\n\t\t\t\t}\n\n\t\t\t\tif ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) {\n\n\t\t\t\t\tgeometry.deleteAttribute( 'morphNormal' + i );\n\n\t\t\t\t}\n\n\t\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// GLSL shader uses formula baseinfluence * base + sum(target * influence)\n\t\t// This allows us to switch between absolute morphs and relative morphs without changing shader code\n\t\t// When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence)\n\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\nfunction WebGLObjects( gl, geometries, attributes, info ) {\n\n\tlet updateMap = new WeakMap();\n\n\tfunction update( object ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\tconst geometry = object.geometry;\n\t\tconst buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateMap.get( buffergeometry ) !== frame ) {\n\n\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\tbuffergeometry.updateFromObject( object );\n\n\t\t\t}\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateMap.set( buffergeometry, frame );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\tattributes.update( object.instanceMatrix, 34962 );\n\n\t\t\tif ( object.instanceColor !== null ) {\n\n\t\t\t\tattributes.update( object.instanceColor, 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateMap = new WeakMap();\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\nfunction DataTexture2DArray( data = null, width = 1, height = 1, depth = 1 ) {\n\n\tTexture.call( this, null );\n\n\tthis.image = { data, width, height, depth };\n\n\tthis.magFilter = NearestFilter;\n\tthis.minFilter = NearestFilter;\n\n\tthis.wrapR = ClampToEdgeWrapping;\n\n\tthis.generateMipmaps = false;\n\tthis.flipY = false;\n\n\tthis.needsUpdate = true;\n\n}\n\nDataTexture2DArray.prototype = Object.create( Texture.prototype );\nDataTexture2DArray.prototype.constructor = DataTexture2DArray;\nDataTexture2DArray.prototype.isDataTexture2DArray = true;\n\nfunction DataTexture3D( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t// We're going to add .setXXX() methods for setting properties later.\n\t// Users can still set in DataTexture3D directly.\n\t//\n\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t// \ttexture.anisotropy = 16;\n\t//\n\t// See #14839\n\n\tTexture.call( this, null );\n\n\tthis.image = { data, width, height, depth };\n\n\tthis.magFilter = NearestFilter;\n\tthis.minFilter = NearestFilter;\n\n\tthis.wrapR = ClampToEdgeWrapping;\n\n\tthis.generateMipmaps = false;\n\tthis.flipY = false;\n\n\tthis.needsUpdate = true;\n\n\n}\n\nDataTexture3D.prototype = Object.create( Texture.prototype );\nDataTexture3D.prototype.constructor = DataTexture3D;\nDataTexture3D.prototype.isDataTexture3D = true;\n\n/**\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [textures] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'textures' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (textures factorizations):\n *\n * .upload( gl, seq, values, textures )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (textures factorizations):\n *\n * .setValue( gl, name, value, textures )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\nconst emptyTexture = new Texture();\nconst emptyTexture2dArray = new DataTexture2DArray();\nconst emptyTexture3d = new DataTexture3D();\nconst emptyCubeTexture = new CubeTexture();\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nconst arrayCacheF32 = [];\nconst arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nconst mat4array = new Float32Array( 16 );\nconst mat3array = new Float32Array( 9 );\nconst mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tconst firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tconst n = nBlocks * blockSize;\n\tlet r = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( let i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( let i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( textures, n ) {\n\n\tlet r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\tr[ i ] = textures.allocateTextureUnit();\n\n\t}\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValueV1f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValueV2f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or MatrixN)\n\nfunction setValueM2( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM3( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM4( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.safeSetTexture2D( v || emptyTexture, unit );\n\n}\n\nfunction setValueT2DArray1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2DArray( v || emptyTexture2dArray, unit );\n\n}\n\nfunction setValueT3D1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture3D( v || emptyTexture3d, unit );\n\n}\n\nfunction setValueT6( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.safeSetTextureCube( v || emptyCubeTexture, unit );\n\n}\n\n// Integer / Boolean vectors or arrays thereof (always flat arrays)\n\nfunction setValueV1i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\nfunction setValueV2i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform2iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV3i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform3iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV4i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform4iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\n// uint\n\nfunction setValueV1ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1ui( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1f; // FLOAT\n\t\tcase 0x8b50: return setValueV2f; // _VEC2\n\t\tcase 0x8b51: return setValueV3f; // _VEC3\n\t\tcase 0x8b52: return setValueV4f; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2; // _MAT2\n\t\tcase 0x8b5b: return setValueM3; // _MAT3\n\t\tcase 0x8b5c: return setValueM4; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2i; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3i; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4i; // _VEC4\n\n\t\tcase 0x1405: return setValueV1ui; // UINT\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3D1;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArray1;\n\n\t}\n\n}\n\n// Array of scalars\nfunction setValueV1fArray( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\n\n// Integer / Boolean vectors or arrays thereof (always flat arrays)\nfunction setValueV1iArray( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\nfunction setValueV2iArray( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValueV3iArray( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValueV4iArray( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n\n// Array of vectors (flat or from THREE classes)\n\nfunction setValueV2fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 2 );\n\n\tgl.uniform2fv( this.addr, data );\n\n}\n\nfunction setValueV3fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 3 );\n\n\tgl.uniform3fv( this.addr, data );\n\n}\n\nfunction setValueV4fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniform4fv( this.addr, data );\n\n}\n\n// Array of matrices (flat or from THREE clases)\n\nfunction setValueM2Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n}\n\nfunction setValueM3Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 9 );\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n}\n\nfunction setValueM4Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 16 );\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n}\n\n// Array of textures (2D / Cube)\n\nfunction setValueT1Array( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.safeSetTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6Array( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.safeSetTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1fArray; // FLOAT\n\t\tcase 0x8b50: return setValueV2fArray; // _VEC2\n\t\tcase 0x8b51: return setValueV3fArray; // _VEC3\n\t\tcase 0x8b52: return setValueV4fArray; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2Array; // _MAT2\n\t\tcase 0x8b5b: return setValueM3Array; // _MAT3\n\t\tcase 0x8b5c: return setValueM4Array; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1Array;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6Array;\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nfunction SingleUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.cache = [];\n\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nfunction PureArrayUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.cache = [];\n\tthis.size = activeInfo.size;\n\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nPureArrayUniform.prototype.updateCache = function ( data ) {\n\n\tconst cache = this.cache;\n\n\tif ( data instanceof Float32Array && cache.length !== data.length ) {\n\n\t\tthis.cache = new Float32Array( data.length );\n\n\t}\n\n\tcopyArray( cache, data );\n\n};\n\nfunction StructuredUniform( id ) {\n\n\tthis.id = id;\n\n\tthis.seq = [];\n\tthis.map = {};\n\n}\n\nStructuredUniform.prototype.setValue = function ( gl, value, textures ) {\n\n\tconst seq = this.seq;\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ];\n\t\tu.setValue( gl, value[ u.id ], textures );\n\n\t}\n\n};\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nconst RePathPart = /([\\w\\d_]+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n// - followed by an optional right bracket (found when array index)\n// - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tconst path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\twhile ( true ) {\n\n\t\tconst match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex;\n\n\t\tlet id = match[ 1 ];\n\t\tconst idIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tconst map = container.map;\n\t\t\tlet next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nfunction WebGLUniforms( gl, program ) {\n\n\tthis.seq = [];\n\tthis.map = {};\n\n\tconst n = gl.getProgramParameter( program, 35718 );\n\n\tfor ( let i = 0; i < n; ++ i ) {\n\n\t\tconst info = gl.getActiveUniform( program, i ),\n\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\tparseUniform( info, addr, this );\n\n\t}\n\n}\n\nWebGLUniforms.prototype.setValue = function ( gl, name, value, textures ) {\n\n\tconst u = this.map[ name ];\n\n\tif ( u !== undefined ) u.setValue( gl, value, textures );\n\n};\n\nWebGLUniforms.prototype.setOptional = function ( gl, object, name ) {\n\n\tconst v = object[ name ];\n\n\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n};\n\n\n// Static interface\n\nWebGLUniforms.upload = function ( gl, seq, values, textures ) {\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ],\n\t\t\tv = values[ u.id ];\n\n\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\tu.setValue( gl, v.value, textures );\n\n\t\t}\n\n\t}\n\n};\n\nWebGLUniforms.seqWithValue = function ( seq, values ) {\n\n\tconst r = [];\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ];\n\t\tif ( u.id in values ) r.push( u );\n\n\t}\n\n\treturn r;\n\n};\n\nfunction WebGLShader( gl, type, string ) {\n\n\tconst shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\treturn shader;\n\n}\n\nlet programIdCount = 0;\n\nfunction addLineNumbers( string ) {\n\n\tconst lines = string.split( '\\n' );\n\n\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\tlines[ i ] = ( i + 1 ) + ': ' + lines[ i ];\n\n\t}\n\n\treturn lines.join( '\\n' );\n\n}\n\nfunction getEncodingComponents( encoding ) {\n\n\tswitch ( encoding ) {\n\n\t\tcase LinearEncoding:\n\t\t\treturn [ 'Linear', '( value )' ];\n\t\tcase sRGBEncoding:\n\t\t\treturn [ 'sRGB', '( value )' ];\n\t\tcase RGBEEncoding:\n\t\t\treturn [ 'RGBE', '( value )' ];\n\t\tcase RGBM7Encoding:\n\t\t\treturn [ 'RGBM', '( value, 7.0 )' ];\n\t\tcase RGBM16Encoding:\n\t\t\treturn [ 'RGBM', '( value, 16.0 )' ];\n\t\tcase RGBDEncoding:\n\t\t\treturn [ 'RGBD', '( value, 256.0 )' ];\n\t\tcase GammaEncoding:\n\t\t\treturn [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ];\n\t\tcase LogLuvEncoding:\n\t\t\treturn [ 'LogLuv', '( value )' ];\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding );\n\t\t\treturn [ 'Linear', '( value )' ];\n\n\t}\n\n}\n\nfunction getShaderErrors( gl, shader, type ) {\n\n\tconst status = gl.getShaderParameter( shader, 35713 );\n\tconst log = gl.getShaderInfoLog( shader ).trim();\n\n\tif ( status && log === '' ) return '';\n\n\t// --enable-privileged-webgl-extension\n\t// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\tconst source = gl.getShaderSource( shader );\n\n\treturn 'THREE.WebGLShader: gl.getShaderInfoLog() ' + type + '\\n' + log + addLineNumbers( source );\n\n}\n\nfunction getTexelDecodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }';\n\n}\n\nfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tlet toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tcase ACESFilmicToneMapping:\n\t\t\ttoneMappingName = 'ACESFilmic';\n\t\t\tbreak;\n\n\t\tcase CustomToneMapping:\n\t\t\ttoneMappingName = 'Custom';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );\n\t\t\ttoneMappingName = 'Linear';\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nfunction generateExtensions( parameters ) {\n\n\tconst chunks = [\n\t\t( parameters.extensionDerivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tconst chunks = [];\n\n\tfor ( const name in defines ) {\n\n\t\tconst value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tconst attributes = {};\n\n\tconst n = gl.getProgramParameter( program, 35721 );\n\n\tfor ( let i = 0; i < n; i ++ ) {\n\n\t\tconst info = gl.getActiveAttrib( program, i );\n\t\tconst name = info.name;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = gl.getAttribLocation( program, name );\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )\n\t\t.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )\n\t\t.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\n// Resolve Includes\n\nconst includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\nfunction resolveIncludes( string ) {\n\n\treturn string.replace( includePattern, includeReplacer );\n\n}\n\nfunction includeReplacer( match, include ) {\n\n\tconst string = ShaderChunk[ include ];\n\n\tif ( string === undefined ) {\n\n\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t}\n\n\treturn resolveIncludes( string );\n\n}\n\n// Unroll Loops\n\nconst deprecatedUnrollLoopPattern = /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\nconst unrollLoopPattern = /#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;\n\nfunction unrollLoops( string ) {\n\n\treturn string\n\t\t.replace( unrollLoopPattern, loopReplacer )\n\t\t.replace( deprecatedUnrollLoopPattern, deprecatedLoopReplacer );\n\n}\n\nfunction deprecatedLoopReplacer( match, start, end, snippet ) {\n\n\tconsole.warn( 'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.' );\n\treturn loopReplacer( match, start, end, snippet );\n\n}\n\nfunction loopReplacer( match, start, end, snippet ) {\n\n\tlet string = '';\n\n\tfor ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\tstring += snippet\n\t\t\t.replace( /\\[\\s*i\\s*\\]/g, '[ ' + i + ' ]' )\n\t\t\t.replace( /UNROLLED_LOOP_INDEX/g, i );\n\n\t}\n\n\treturn string;\n\n}\n\n//\n\nfunction generatePrecision( parameters ) {\n\n\tlet precisionstring = \"precision \" + parameters.precision + \" float;\\nprecision \" + parameters.precision + \" int;\";\n\n\tif ( parameters.precision === \"highp\" ) {\n\n\t\tprecisionstring += \"\\n#define HIGH_PRECISION\";\n\n\t} else if ( parameters.precision === \"mediump\" ) {\n\n\t\tprecisionstring += \"\\n#define MEDIUM_PRECISION\";\n\n\t} else if ( parameters.precision === \"lowp\" ) {\n\n\t\tprecisionstring += \"\\n#define LOW_PRECISION\";\n\n\t}\n\n\treturn precisionstring;\n\n}\n\nfunction generateShadowMapTypeDefine( parameters ) {\n\n\tlet shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t} else if ( parameters.shadowMapType === VSMShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';\n\n\t}\n\n\treturn shadowMapTypeDefine;\n\n}\n\nfunction generateEnvMapTypeDefine( parameters ) {\n\n\tlet envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapTypeDefine;\n\n}\n\nfunction generateEnvMapModeDefine( parameters ) {\n\n\tlet envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeRefractionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapModeDefine;\n\n}\n\nfunction generateEnvMapBlendingDefine( parameters ) {\n\n\tlet envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapBlendingDefine;\n\n}\n\nfunction WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {\n\n\tconst gl = renderer.getContext();\n\n\tconst defines = parameters.defines;\n\n\tlet vertexShader = parameters.vertexShader;\n\tlet fragmentShader = parameters.fragmentShader;\n\n\tconst shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );\n\tconst envMapTypeDefine = generateEnvMapTypeDefine( parameters );\n\tconst envMapModeDefine = generateEnvMapModeDefine( parameters );\n\tconst envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );\n\n\n\tconst gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;\n\n\tconst customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );\n\n\tconst customDefines = generateDefines( defines );\n\n\tconst program = gl.createProgram();\n\n\tlet prefixVertex, prefixFragment;\n\tlet versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + \"\\n\" : '';\n\n\tif ( parameters.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.instancing ? '#define USE_INSTANCING' : '',\n\t\t\tparameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',\n\n\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t'#define MAX_BONES ' + parameters.maxBones,\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\t\t\tparameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '',\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\t\t\tparameters.useVertexTexture ? '#define BONE_TEXTURE' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t'#ifdef USE_INSTANCING',\n\n\t\t\t'\tattribute mat4 instanceMatrix;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_COLOR',\n\n\t\t\t'\tattribute vec3 instanceColor;',\n\n\t\t\t'#endif',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_TANGENT',\n\n\t\t\t'\tattribute vec4 tangent;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_COLOR',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_MORPHTARGETS',\n\n\t\t\t'\tattribute vec3 morphTarget0;',\n\t\t\t'\tattribute vec3 morphTarget1;',\n\t\t\t'\tattribute vec3 morphTarget2;',\n\t\t\t'\tattribute vec3 morphTarget3;',\n\n\t\t\t'\t#ifdef USE_MORPHNORMALS',\n\n\t\t\t'\t\tattribute vec3 morphNormal0;',\n\t\t\t'\t\tattribute vec3 morphNormal1;',\n\t\t\t'\t\tattribute vec3 morphNormal2;',\n\t\t\t'\t\tattribute vec3 morphNormal3;',\n\n\t\t\t'\t#else',\n\n\t\t\t'\t\tattribute vec3 morphTarget4;',\n\t\t\t'\t\tattribute vec3 morphTarget5;',\n\t\t\t'\t\tattribute vec3 morphTarget6;',\n\t\t\t'\t\tattribute vec3 morphTarget7;',\n\n\t\t\t'\t#endif',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest + ( parameters.alphaTest % 1 ? '' : '.0' ) : '', // add '.0' if integer\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.matcap ? '#define USE_MATCAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\n\t\t\tparameters.sheen ? '#define USE_SHEEN' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t( ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ) ? '#define TEXTURE_LOD_EXT' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\n\t\t\tShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tparameters.map ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',\n\t\t\tparameters.matcap ? getTexelDecodingFunction( 'matcapTexelToLinear', parameters.matcapEncoding ) : '',\n\t\t\tparameters.envMap ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',\n\t\t\tparameters.emissiveMap ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',\n\t\t\tparameters.lightMap ? getTexelDecodingFunction( 'lightMapTexelToLinear', parameters.lightMapEncoding ) : '',\n\t\t\tgetTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ),\n\n\t\t\tparameters.depthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = resolveIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = resolveIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tif ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) {\n\n\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\n\t\tversionString = '#version 300 es\\n';\n\n\t\tprefixVertex = [\n\t\t\t'#define attribute in',\n\t\t\t'#define varying out',\n\t\t\t'#define texture2D texture'\n\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\tprefixFragment = [\n\t\t\t'#define varying in',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : 'out highp vec4 pc_fragColor;',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',\n\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t'#define texture2D texture',\n\t\t\t'#define textureCube texture',\n\t\t\t'#define texture2DProj textureProj',\n\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t}\n\n\tconst vertexGlsl = versionString + prefixVertex + vertexShader;\n\tconst fragmentGlsl = versionString + prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tconst glVertexShader = WebGLShader( gl, 35633, vertexGlsl );\n\tconst glFragmentShader = WebGLShader( gl, 35632, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( parameters.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, parameters.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\t// check for link errors\n\tif ( renderer.debug.checkShaderErrors ) {\n\n\t\tconst programLog = gl.getProgramInfoLog( program ).trim();\n\t\tconst vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\t\tconst fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\t\tlet runnable = true;\n\t\tlet haveDiagnostics = true;\n\n\t\tif ( gl.getProgramParameter( program, 35714 ) === false ) {\n\n\t\t\trunnable = false;\n\n\t\t\tconst vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\tconst fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\tconsole.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), '35715', gl.getProgramParameter( program, 35715 ), 'gl.getProgramInfoLog', programLog, vertexErrors, fragmentErrors );\n\n\t\t} else if ( programLog !== '' ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog );\n\n\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\thaveDiagnostics = false;\n\n\t\t}\n\n\t\tif ( haveDiagnostics ) {\n\n\t\t\tthis.diagnostics = {\n\n\t\t\t\trunnable: runnable,\n\n\t\t\t\tprogramLog: programLog,\n\n\t\t\t\tvertexShader: {\n\n\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t},\n\n\t\t\t\tfragmentShader: {\n\n\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\tprefix: prefixFragment\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\t// Clean up\n\n\t// Crashes in iOS9 and iOS10. #18402\n\t// gl.detachShader( program, glVertexShader );\n\t// gl.detachShader( program, glFragmentShader );\n\n\tgl.deleteShader( glVertexShader );\n\tgl.deleteShader( glFragmentShader );\n\n\t// set up caching for uniform locations\n\n\tlet cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\tcachedUniforms = new WebGLUniforms( gl, program );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tlet cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tbindingStates.releaseStatesOfProgram( this );\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t//\n\n\tthis.name = parameters.shaderName;\n\tthis.id = programIdCount ++;\n\tthis.cacheKey = cacheKey;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\nfunction WebGLPrograms( renderer, cubemaps, extensions, capabilities, bindingStates, clipping ) {\n\n\tconst programs = [];\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\tconst floatVertexTextures = capabilities.floatVertexTextures;\n\tconst maxVertexUniforms = capabilities.maxVertexUniforms;\n\tconst vertexTextures = capabilities.vertexTextures;\n\n\tlet precision = capabilities.precision;\n\n\tconst shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'toon',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tMeshMatcapMaterial: 'matcap',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow',\n\t\tSpriteMaterial: 'sprite'\n\t};\n\n\tconst parameterNames = [\n\t\t\"precision\", \"isWebGL2\", \"supportsVertexTextures\", \"outputEncoding\", \"instancing\", \"instancingColor\",\n\t\t\"map\", \"mapEncoding\", \"matcap\", \"matcapEncoding\", \"envMap\", \"envMapMode\", \"envMapEncoding\", \"envMapCubeUV\",\n\t\t\"lightMap\", \"lightMapEncoding\", \"aoMap\", \"emissiveMap\", \"emissiveMapEncoding\", \"bumpMap\", \"normalMap\", \"objectSpaceNormalMap\", \"tangentSpaceNormalMap\", \"clearcoatMap\", \"clearcoatRoughnessMap\", \"clearcoatNormalMap\", \"displacementMap\", \"specularMap\",\n\t\t\"roughnessMap\", \"metalnessMap\", \"gradientMap\",\n\t\t\"alphaMap\", \"combine\", \"vertexColors\", \"vertexTangents\", \"vertexUvs\", \"uvsVertexOnly\", \"fog\", \"useFog\", \"fogExp2\",\n\t\t\"flatShading\", \"sizeAttenuation\", \"logarithmicDepthBuffer\", \"skinning\",\n\t\t\"maxBones\", \"useVertexTexture\", \"morphTargets\", \"morphNormals\",\n\t\t\"maxMorphTargets\", \"maxMorphNormals\", \"premultipliedAlpha\",\n\t\t\"numDirLights\", \"numPointLights\", \"numSpotLights\", \"numHemiLights\", \"numRectAreaLights\",\n\t\t\"numDirLightShadows\", \"numPointLightShadows\", \"numSpotLightShadows\",\n\t\t\"shadowMapEnabled\", \"shadowMapType\", \"toneMapping\", 'physicallyCorrectLights',\n\t\t\"alphaTest\", \"doubleSided\", \"flipSided\", \"numClippingPlanes\", \"numClipIntersection\", \"depthPacking\", \"dithering\",\n\t\t\"sheen\", \"transmissionMap\"\n\t];\n\n\tfunction getMaxBones( object ) {\n\n\t\tconst skeleton = object.skeleton;\n\t\tconst bones = skeleton.bones;\n\n\t\tif ( floatVertexTextures ) {\n\n\t\t\treturn 1024;\n\n\t\t} else {\n\n\t\t\t// default for when object is not specified\n\t\t\t// ( for example when prebuilding shader to be used with multiple objects )\n\t\t\t//\n\t\t\t// - leave some extra space for other uniforms\n\t\t\t// - limit here is ANGLE's 254 max uniform vectors\n\t\t\t// (up to 54 should be safe)\n\n\t\t\tconst nVertexUniforms = maxVertexUniforms;\n\t\t\tconst nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );\n\n\t\t\tconst maxBones = Math.min( nVertexMatrices, bones.length );\n\n\t\t\tif ( maxBones < bones.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' );\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\treturn maxBones;\n\n\t\t}\n\n\t}\n\n\tfunction getTextureEncodingFromMap( map ) {\n\n\t\tlet encoding;\n\n\t\tif ( ! map ) {\n\n\t\t\tencoding = LinearEncoding;\n\n\t\t} else if ( map.isTexture ) {\n\n\t\t\tencoding = map.encoding;\n\n\t\t} else if ( map.isWebGLRenderTarget ) {\n\n\t\t\tconsole.warn( \"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\tencoding = map.texture.encoding;\n\n\t\t}\n\n\t\treturn encoding;\n\n\t}\n\n\tfunction getParameters( material, lights, shadows, scene, object ) {\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\n\t\tconst envMap = cubemaps.get( material.envMap || environment );\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tconst maxBones = object.isSkinnedMesh ? getMaxBones( object ) : 0;\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet vertexShader, fragmentShader;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\n\t\t\tvertexShader = shader.vertexShader;\n\t\t\tfragmentShader = shader.fragmentShader;\n\n\t\t} else {\n\n\t\t\tvertexShader = material.vertexShader;\n\t\t\tfragmentShader = material.fragmentShader;\n\n\t\t}\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tconst parameters = {\n\n\t\t\tisWebGL2: isWebGL2,\n\n\t\t\tshaderID: shaderID,\n\t\t\tshaderName: material.type,\n\n\t\t\tvertexShader: vertexShader,\n\t\t\tfragmentShader: fragmentShader,\n\t\t\tdefines: material.defines,\n\n\t\t\tisRawShaderMaterial: material.isRawShaderMaterial === true,\n\t\t\tglslVersion: material.glslVersion,\n\n\t\t\tprecision: precision,\n\n\t\t\tinstancing: object.isInstancedMesh === true,\n\t\t\tinstancingColor: object.isInstancedMesh === true && object.instanceColor !== null,\n\n\t\t\tsupportsVertexTextures: vertexTextures,\n\t\t\toutputEncoding: ( currentRenderTarget !== null ) ? getTextureEncodingFromMap( currentRenderTarget.texture ) : renderer.outputEncoding,\n\t\t\tmap: !! material.map,\n\t\t\tmapEncoding: getTextureEncodingFromMap( material.map ),\n\t\t\tmatcap: !! material.matcap,\n\t\t\tmatcapEncoding: getTextureEncodingFromMap( material.matcap ),\n\t\t\tenvMap: !! envMap,\n\t\t\tenvMapMode: envMap && envMap.mapping,\n\t\t\tenvMapEncoding: getTextureEncodingFromMap( envMap ),\n\t\t\tenvMapCubeUV: ( !! envMap ) && ( ( envMap.mapping === CubeUVReflectionMapping ) || ( envMap.mapping === CubeUVRefractionMapping ) ),\n\t\t\tlightMap: !! material.lightMap,\n\t\t\tlightMapEncoding: getTextureEncodingFromMap( material.lightMap ),\n\t\t\taoMap: !! material.aoMap,\n\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\temissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap ),\n\t\t\tbumpMap: !! material.bumpMap,\n\t\t\tnormalMap: !! material.normalMap,\n\t\t\tobjectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap,\n\t\t\ttangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap,\n\t\t\tclearcoatMap: !! material.clearcoatMap,\n\t\t\tclearcoatRoughnessMap: !! material.clearcoatRoughnessMap,\n\t\t\tclearcoatNormalMap: !! material.clearcoatNormalMap,\n\t\t\tdisplacementMap: !! material.displacementMap,\n\t\t\troughnessMap: !! material.roughnessMap,\n\t\t\tmetalnessMap: !! material.metalnessMap,\n\t\t\tspecularMap: !! material.specularMap,\n\t\t\talphaMap: !! material.alphaMap,\n\n\t\t\tgradientMap: !! material.gradientMap,\n\n\t\t\tsheen: !! material.sheen,\n\n\t\t\ttransmissionMap: !! material.transmissionMap,\n\n\t\t\tcombine: material.combine,\n\n\t\t\tvertexTangents: ( material.normalMap && material.vertexTangents ),\n\t\t\tvertexColors: material.vertexColors,\n\t\t\tvertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmissionMap,\n\t\t\tuvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.transmissionMap ) && !! material.displacementMap,\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog,\n\t\t\tfogExp2: ( fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: material.flatShading,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\tskinning: material.skinning && maxBones > 0,\n\t\t\tmaxBones: maxBones,\n\t\t\tuseVertexTexture: floatVertexTextures,\n\n\t\t\tmorphTargets: material.morphTargets,\n\t\t\tmorphNormals: material.morphNormals,\n\t\t\tmaxMorphTargets: renderer.maxMorphTargets,\n\t\t\tmaxMorphNormals: renderer.maxMorphNormals,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\tnumSpotLightShadows: lights.spotShadowMap.length,\n\n\t\t\tnumClippingPlanes: clipping.numPlanes,\n\t\t\tnumClipIntersection: clipping.numIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping,\n\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\talphaTest: material.alphaTest,\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tdepthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false,\n\n\t\t\tindex0AttributeName: material.index0AttributeName,\n\n\t\t\textensionDerivatives: material.extensions && material.extensions.derivatives,\n\t\t\textensionFragDepth: material.extensions && material.extensions.fragDepth,\n\t\t\textensionDrawBuffers: material.extensions && material.extensions.drawBuffers,\n\t\t\textensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD,\n\n\t\t\trendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ),\n\t\t\trendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ),\n\t\t\trendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ),\n\n\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\n\t\t};\n\n\t\treturn parameters;\n\n\t}\n\n\tfunction getProgramCacheKey( parameters ) {\n\n\t\tconst array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( parameters.fragmentShader );\n\t\t\tarray.push( parameters.vertexShader );\n\n\t\t}\n\n\t\tif ( parameters.defines !== undefined ) {\n\n\t\t\tfor ( const name in parameters.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( parameters.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.isRawShaderMaterial === false ) {\n\n\t\t\tfor ( let i = 0; i < parameterNames.length; i ++ ) {\n\n\t\t\t\tarray.push( parameters[ parameterNames[ i ] ] );\n\n\t\t\t}\n\n\t\t\tarray.push( renderer.outputEncoding );\n\t\t\tarray.push( renderer.gammaFactor );\n\n\t\t}\n\n\t\tarray.push( parameters.customProgramCacheKey );\n\n\t\treturn array.join();\n\n\t}\n\n\tfunction getUniforms( material ) {\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\t\tlet uniforms;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\t\t\tuniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t} else {\n\n\t\t\tuniforms = material.uniforms;\n\n\t\t}\n\n\t\treturn uniforms;\n\n\t}\n\n\tfunction acquireProgram( parameters, cacheKey ) {\n\n\t\tlet program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( let p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tconst preexistingProgram = programs[ p ];\n\n\t\t\tif ( preexistingProgram.cacheKey === cacheKey ) {\n\n\t\t\t\tprogram = preexistingProgram;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\tfunction releaseProgram( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tconst i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tgetParameters: getParameters,\n\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\tgetUniforms: getUniforms,\n\t\tacquireProgram: acquireProgram,\n\t\treleaseProgram: releaseProgram,\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tprograms: programs\n\t};\n\n}\n\nfunction WebGLProperties() {\n\n\tlet properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tlet map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.program !== b.program ) {\n\n\t\treturn a.program.id - b.program.id;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\n\nfunction WebGLRenderList( properties ) {\n\n\tconst renderItems = [];\n\tlet renderItemsIndex = 0;\n\n\tconst opaque = [];\n\tconst transparent = [];\n\n\tconst defaultProgram = { id: - 1 };\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction getNextRenderItem( object, geometry, material, groupOrder, z, group ) {\n\n\t\tlet renderItem = renderItems[ renderItemsIndex ];\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tprogram: materialProperties.program || defaultProgram,\n\t\t\t\tgroupOrder: groupOrder,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.program = materialProperties.program || defaultProgram;\n\t\t\trenderItem.groupOrder = groupOrder;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\trenderItemsIndex ++;\n\n\t\treturn renderItem;\n\n\t}\n\n\tfunction push( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\t( material.transparent === true ? transparent : opaque ).push( renderItem );\n\n\t}\n\n\tfunction unshift( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\t( material.transparent === true ? transparent : opaque ).unshift( renderItem );\n\n\t}\n\n\tfunction sort( customOpaqueSort, customTransparentSort ) {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t}\n\n\tfunction finish() {\n\n\t\t// Clear references from inactive renderItems in the list\n\n\t\tfor ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {\n\n\t\t\tconst renderItem = renderItems[ i ];\n\n\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\trenderItem.id = null;\n\t\t\trenderItem.object = null;\n\t\t\trenderItem.geometry = null;\n\t\t\trenderItem.material = null;\n\t\t\trenderItem.program = null;\n\t\t\trenderItem.group = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\topaque: opaque,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\t\tunshift: unshift,\n\t\tfinish: finish,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists( properties ) {\n\n\tlet lists = new WeakMap();\n\n\tfunction get( scene, camera ) {\n\n\t\tconst cameras = lists.get( scene );\n\t\tlet list;\n\n\t\tif ( cameras === undefined ) {\n\n\t\t\tlist = new WebGLRenderList( properties );\n\t\t\tlists.set( scene, new WeakMap() );\n\t\t\tlists.get( scene ).set( camera, list );\n\n\t\t} else {\n\n\t\t\tlist = cameras.get( camera );\n\t\t\tif ( list === undefined ) {\n\n\t\t\t\tlist = new WebGLRenderList( properties );\n\t\t\t\tcameras.set( camera, list );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction UniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nfunction ShadowUniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\n\n\nlet nextVersion = 0;\n\nfunction shadowCastingLightsFirst( lightA, lightB ) {\n\n\treturn ( lightB.castShadow ? 1 : 0 ) - ( lightA.castShadow ? 1 : 0 );\n\n}\n\nfunction WebGLLights( extensions, capabilities ) {\n\n\tconst cache = new UniformsCache();\n\n\tconst shadowCache = ShadowUniformsCache();\n\n\tconst state = {\n\n\t\tversion: 0,\n\n\t\thash: {\n\t\t\tdirectionalLength: - 1,\n\t\t\tpointLength: - 1,\n\t\t\tspotLength: - 1,\n\t\t\trectAreaLength: - 1,\n\t\t\themiLength: - 1,\n\n\t\t\tnumDirectionalShadows: - 1,\n\t\t\tnumPointShadows: - 1,\n\t\t\tnumSpotShadows: - 1\n\t\t},\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tprobe: [],\n\t\tdirectional: [],\n\t\tdirectionalShadow: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotShadow: [],\n\t\tspotShadowMap: [],\n\t\tspotShadowMatrix: [],\n\t\trectArea: [],\n\t\trectAreaLTC1: null,\n\t\trectAreaLTC2: null,\n\t\tpoint: [],\n\t\tpointShadow: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: []\n\n\t};\n\n\tfor ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );\n\n\tconst vector3 = new Vector3();\n\tconst matrix4 = new Matrix4();\n\tconst matrix42 = new Matrix4();\n\n\tfunction setup( lights, shadows, camera ) {\n\n\t\tlet r = 0, g = 0, b = 0;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tlet numDirectionalShadows = 0;\n\t\tlet numPointShadows = 0;\n\t\tlet numSpotShadows = 0;\n\n\t\tconst viewMatrix = camera.matrixWorldInverse;\n\n\t\tlights.sort( shadowCastingLightsFirst );\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tconst color = light.color;\n\t\t\tconst intensity = light.intensity;\n\t\t\tconst distance = light.distance;\n\n\t\t\tconst shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity;\n\t\t\t\tg += color.g * intensity;\n\t\t\t\tb += color.b * intensity;\n\n\t\t\t} else if ( light.isLightProbe ) {\n\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tstate.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );\n\n\t\t\t\t}\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.directionalShadow[ directionalLength ] = shadowUniforms;\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumDirectionalShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.spotShadow[ spotLength ] = shadowUniforms;\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\t\t\t\t\tstate.spotShadowMatrix[ spotLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumSpotShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\t// (a) intensity is the total visible light emitted\n\t\t\t\t//uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) );\n\n\t\t\t\t// (b) intensity is the brightness of the light\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\t// TODO (abelnation): RectAreaLight distance?\n\t\t\t\t// uniforms.distance = distance;\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tshadowUniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tshadowUniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\tstate.pointShadow[ pointLength ] = shadowUniforms;\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumPointShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\t\t\t\tuniforms.direction.normalize();\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( rectAreaLength > 0 ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\t// WebGL 2\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t} else {\n\n\t\t\t\t// WebGL 1\n\n\t\t\t\tif ( extensions.has( 'OES_texture_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t\t} else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tconst hash = state.hash;\n\n\t\tif ( hash.directionalLength !== directionalLength ||\n\t\t\thash.pointLength !== pointLength ||\n\t\t\thash.spotLength !== spotLength ||\n\t\t\thash.rectAreaLength !== rectAreaLength ||\n\t\t\thash.hemiLength !== hemiLength ||\n\t\t\thash.numDirectionalShadows !== numDirectionalShadows ||\n\t\t\thash.numPointShadows !== numPointShadows ||\n\t\t\thash.numSpotShadows !== numSpotShadows ) {\n\n\t\t\tstate.directional.length = directionalLength;\n\t\t\tstate.spot.length = spotLength;\n\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\tstate.point.length = pointLength;\n\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\tstate.spotShadowMatrix.length = numSpotShadows;\n\n\t\t\thash.directionalLength = directionalLength;\n\t\t\thash.pointLength = pointLength;\n\t\t\thash.spotLength = spotLength;\n\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\thash.hemiLength = hemiLength;\n\n\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\thash.numPointShadows = numPointShadows;\n\t\t\thash.numSpotShadows = numSpotShadows;\n\n\t\t\tstate.version = nextVersion ++;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tstate: state\n\t};\n\n}\n\nfunction WebGLRenderState( extensions, capabilities ) {\n\n\tconst lights = new WebGLLights( extensions, capabilities );\n\n\tconst lightsArray = [];\n\tconst shadowsArray = [];\n\n\tfunction init() {\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction setupLights( camera ) {\n\n\t\tlights.setup( lightsArray, shadowsArray, camera );\n\n\t}\n\n\tconst state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\n\t\tlights: lights\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow\n\t};\n\n}\n\nfunction WebGLRenderStates( extensions, capabilities ) {\n\n\tlet renderStates = new WeakMap();\n\n\tfunction get( scene, camera ) {\n\n\t\tlet renderState;\n\n\t\tif ( renderStates.has( scene ) === false ) {\n\n\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\trenderStates.set( scene, new WeakMap() );\n\t\t\trenderStates.get( scene ).set( camera, renderState );\n\n\t\t} else {\n\n\t\t\tif ( renderStates.get( scene ).has( camera ) === false ) {\n\n\t\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\t\trenderStates.get( scene ).set( camera, renderState );\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStates.get( scene ).get( camera );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * parameters = {\n *\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * wireframe: ,\n * wireframeLinewidth: \n * }\n */\n\nfunction MeshDepthMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshDepthMaterial';\n\n\tthis.depthPacking = BasicDepthPacking;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshDepthMaterial.prototype = Object.create( Material.prototype );\nMeshDepthMaterial.prototype.constructor = MeshDepthMaterial;\n\nMeshDepthMaterial.prototype.isMeshDepthMaterial = true;\n\nMeshDepthMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.depthPacking = source.depthPacking;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n *\n * referencePosition: ,\n * nearDistance: ,\n * farDistance: ,\n *\n * skinning: ,\n * morphTargets: ,\n *\n * map: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: \n *\n * }\n */\n\nfunction MeshDistanceMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshDistanceMaterial';\n\n\tthis.referencePosition = new Vector3();\n\tthis.nearDistance = 1;\n\tthis.farDistance = 1000;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.fog = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshDistanceMaterial.prototype = Object.create( Material.prototype );\nMeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial;\n\nMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\n\nMeshDistanceMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.referencePosition.copy( source.referencePosition );\n\tthis.nearDistance = source.nearDistance;\n\tthis.farDistance = source.farDistance;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\treturn this;\n\n};\n\nvar vsm_frag = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include \\nvoid main() {\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\\n\\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\\n\\t\\t#ifdef HORIZONAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean * HALF_SAMPLE_RATE;\\n\\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\";\n\nvar vsm_vert = \"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\";\n\nfunction WebGLShadowMap( _renderer, _objects, maxTextureSize ) {\n\n\tlet _frustum = new Frustum();\n\n\tconst _shadowMapSize = new Vector2(),\n\t\t_viewportSize = new Vector2(),\n\n\t\t_viewport = new Vector4(),\n\n\t\t_depthMaterials = [],\n\t\t_distanceMaterials = [],\n\n\t\t_materialCache = {};\n\n\tconst shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };\n\n\tconst shadowMaterialVertical = new ShaderMaterial( {\n\n\t\tdefines: {\n\t\t\tSAMPLE_RATE: 2.0 / 8.0,\n\t\t\tHALF_SAMPLE_RATE: 1.0 / 8.0\n\t\t},\n\n\t\tuniforms: {\n\t\t\tshadow_pass: { value: null },\n\t\t\tresolution: { value: new Vector2() },\n\t\t\tradius: { value: 4.0 }\n\t\t},\n\n\t\tvertexShader: vsm_vert,\n\n\t\tfragmentShader: vsm_frag\n\n\t} );\n\n\tconst shadowMaterialHorizonal = shadowMaterialVertical.clone();\n\tshadowMaterialHorizonal.defines.HORIZONAL_PASS = 1;\n\n\tconst fullScreenTri = new BufferGeometry();\n\tfullScreenTri.setAttribute(\n\t\t\"position\",\n\t\tnew BufferAttribute(\n\t\t\tnew Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ),\n\t\t\t3\n\t\t)\n\t);\n\n\tconst fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );\n\n\tconst scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\tconst currentRenderTarget = _renderer.getRenderTarget();\n\t\tconst activeCubeFace = _renderer.getActiveCubeFace();\n\t\tconst activeMipmapLevel = _renderer.getActiveMipmapLevel();\n\n\t\tconst _state = _renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.setBlending( NoBlending );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// render depth map\n\n\t\tfor ( let i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadow = light.shadow;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\n\t\t\tconst shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t_shadowMapSize.multiply( shadowFrameExtents );\n\n\t\t\t_viewportSize.copy( shadow.mapSize );\n\n\t\t\tif ( _shadowMapSize.x > maxTextureSize || _shadowMapSize.y > maxTextureSize ) {\n\n\t\t\t\tif ( _shadowMapSize.x > maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.x = Math.floor( maxTextureSize / shadowFrameExtents.x );\n\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _shadowMapSize.y > maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.y = Math.floor( maxTextureSize / shadowFrameExtents.y );\n\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null && ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {\n\n\t\t\t\tconst pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat };\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + \".shadowMap\";\n\n\t\t\t\tshadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\tconst pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + \".shadowMap\";\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\t_renderer.setRenderTarget( shadow.map );\n\t\t\t_renderer.clear();\n\n\t\t\tconst viewportCount = shadow.getViewportCount();\n\n\t\t\tfor ( let vp = 0; vp < viewportCount; vp ++ ) {\n\n\t\t\t\tconst viewport = shadow.getViewport( vp );\n\n\t\t\t\t_viewport.set(\n\t\t\t\t\t_viewportSize.x * viewport.x,\n\t\t\t\t\t_viewportSize.y * viewport.y,\n\t\t\t\t\t_viewportSize.x * viewport.z,\n\t\t\t\t\t_viewportSize.y * viewport.w\n\t\t\t\t);\n\n\t\t\t\t_state.viewport( _viewport );\n\n\t\t\t\tshadow.updateMatrices( light, vp );\n\n\t\t\t\t_frustum = shadow.getFrustum();\n\n\t\t\t\trenderObject( scene, camera, shadow.camera, light, this.type );\n\n\t\t\t}\n\n\t\t\t// do blur pass for VSM\n\n\t\t\tif ( ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {\n\n\t\t\t\tVSMPass( shadow, camera );\n\n\t\t\t}\n\n\t\t\tshadow.needsUpdate = false;\n\n\t\t}\n\n\t\tscope.needsUpdate = false;\n\n\t\t_renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t};\n\n\tfunction VSMPass( shadow, camera ) {\n\n\t\tconst geometry = _objects.update( fullScreenMesh );\n\n\t\t// vertical pass\n\n\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;\n\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.mapPass );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );\n\n\t\t// horizonal pass\n\n\t\tshadowMaterialHorizonal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\tshadowMaterialHorizonal.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialHorizonal.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.map );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizonal, fullScreenMesh, null );\n\n\t}\n\n\tfunction getDepthMaterialVariant( useMorphing, useSkinning, useInstancing ) {\n\n\t\tconst index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2;\n\n\t\tlet material = _depthMaterials[ index ];\n\n\t\tif ( material === undefined ) {\n\n\t\t\tmaterial = new MeshDepthMaterial( {\n\n\t\t\t\tdepthPacking: RGBADepthPacking,\n\n\t\t\t\tmorphTargets: useMorphing,\n\t\t\t\tskinning: useSkinning\n\n\t\t\t} );\n\n\t\t\t_depthMaterials[ index ] = material;\n\n\t\t}\n\n\t\treturn material;\n\n\t}\n\n\tfunction getDistanceMaterialVariant( useMorphing, useSkinning, useInstancing ) {\n\n\t\tconst index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2;\n\n\t\tlet material = _distanceMaterials[ index ];\n\n\t\tif ( material === undefined ) {\n\n\t\t\tmaterial = new MeshDistanceMaterial( {\n\n\t\t\t\tmorphTargets: useMorphing,\n\t\t\t\tskinning: useSkinning\n\n\t\t\t} );\n\n\t\t\t_distanceMaterials[ index ] = material;\n\n\t\t}\n\n\t\treturn material;\n\n\t}\n\n\tfunction getDepthMaterial( object, geometry, material, light, shadowCameraNear, shadowCameraFar, type ) {\n\n\t\tlet result = null;\n\n\t\tlet getMaterialVariant = getDepthMaterialVariant;\n\t\tlet customMaterial = object.customDepthMaterial;\n\n\t\tif ( light.isPointLight === true ) {\n\n\t\t\tgetMaterialVariant = getDistanceMaterialVariant;\n\t\t\tcustomMaterial = object.customDistanceMaterial;\n\n\t\t}\n\n\t\tif ( customMaterial === undefined ) {\n\n\t\t\tlet useMorphing = false;\n\n\t\t\tif ( material.morphTargets === true ) {\n\n\t\t\t\tuseMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0;\n\n\t\t\t}\n\n\t\t\tlet useSkinning = false;\n\n\t\t\tif ( object.isSkinnedMesh === true ) {\n\n\t\t\t\tif ( material.skinning === true ) {\n\n\t\t\t\t\tuseSkinning = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst useInstancing = object.isInstancedMesh === true;\n\n\t\t\tresult = getMaterialVariant( useMorphing, useSkinning, useInstancing );\n\n\t\t} else {\n\n\t\t\tresult = customMaterial;\n\n\t\t}\n\n\t\tif ( _renderer.localClippingEnabled &&\n\t\t\t\tmaterial.clipShadows === true &&\n\t\t\t\tmaterial.clippingPlanes.length !== 0 ) {\n\n\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t// appropriate state\n\n\t\t\tconst keyA = result.uuid, keyB = material.uuid;\n\n\t\t\tlet materialsForVariant = _materialCache[ keyA ];\n\n\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t}\n\n\t\t\tlet cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\n\t\t\t}\n\n\t\t\tresult = cachedMaterial;\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tif ( type === VSMShadowMap ) {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t} else {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t}\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {\n\n\t\t\tresult.referencePosition.setFromMatrixPosition( light.matrixWorld );\n\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\tresult.farDistance = shadowCameraFar;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, light, type ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tconst geometry = _objects.update( object );\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tfor ( let k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ k ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, geometry, groupMaterial, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, geometry, material, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, light, type );\n\n\t\t}\n\n\t}\n\n}\n\nfunction WebGLState( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction ColorBuffer() {\n\n\t\tlet locked = false;\n\n\t\tconst color = new Vector4();\n\t\tlet currentColorMask = null;\n\t\tconst currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentDepthMask = null;\n\t\tlet currentDepthFunc = null;\n\t\tlet currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( 2929 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( 2929 );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tif ( depthFunc ) {\n\n\t\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 512 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 519 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 513 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 514 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 518 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 516 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 517 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.depthFunc( 515 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentStencilMask = null;\n\t\tlet currentStencilFunc = null;\n\t\tlet currentStencilRef = null;\n\t\tlet currentStencilFuncMask = null;\n\t\tlet currentStencilFail = null;\n\t\tlet currentStencilZFail = null;\n\t\tlet currentStencilZPass = null;\n\t\tlet currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( ! locked ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( 2960 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( 2960 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t currentStencilRef !== stencilRef ||\n\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail !== stencilFail ||\n\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tconst colorBuffer = new ColorBuffer();\n\tconst depthBuffer = new DepthBuffer();\n\tconst stencilBuffer = new StencilBuffer();\n\n\tlet enabledCapabilities = {};\n\n\tlet currentProgram = null;\n\n\tlet currentBlendingEnabled = null;\n\tlet currentBlending = null;\n\tlet currentBlendEquation = null;\n\tlet currentBlendSrc = null;\n\tlet currentBlendDst = null;\n\tlet currentBlendEquationAlpha = null;\n\tlet currentBlendSrcAlpha = null;\n\tlet currentBlendDstAlpha = null;\n\tlet currentPremultipledAlpha = false;\n\n\tlet currentFlipSided = null;\n\tlet currentCullFace = null;\n\n\tlet currentLineWidth = null;\n\n\tlet currentPolygonOffsetFactor = null;\n\tlet currentPolygonOffsetUnits = null;\n\n\tconst maxTextures = gl.getParameter( 35661 );\n\n\tlet lineWidthAvailable = false;\n\tlet version = 0;\n\tconst glVersion = gl.getParameter( 7938 );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL\\ ([0-9])/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL\\ ES\\ ([0-9])/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tlet currentTextureSlot = null;\n\tlet currentBoundTextures = {};\n\n\tconst currentScissor = new Vector4();\n\tconst currentViewport = new Vector4();\n\n\tfunction createTexture( type, target, count ) {\n\n\t\tconst data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tconst texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, 10241, 9728 );\n\t\tgl.texParameteri( type, 10240, 9728 );\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tgl.texImage2D( target + i, 0, 6408, 1, 1, 0, 6408, 5121, data );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tconst emptyTextures = {};\n\temptyTextures[ 3553 ] = createTexture( 3553, 3553, 1 );\n\temptyTextures[ 34067 ] = createTexture( 34067, 34069, 6 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( 2929 );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( 2884 );\n\n\tsetBlending( NoBlending );\n\n\t//\n\n\tfunction enable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tconst equationToGL = {\n\t\t[ AddEquation ]: 32774,\n\t\t[ SubtractEquation ]: 32778,\n\t\t[ ReverseSubtractEquation ]: 32779\n\t};\n\n\tif ( isWebGL2 ) {\n\n\t\tequationToGL[ MinEquation ] = 32775;\n\t\tequationToGL[ MaxEquation ] = 32776;\n\n\t} else {\n\n\t\tconst extension = extensions.get( 'EXT_blend_minmax' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tequationToGL[ MinEquation ] = extension.MIN_EXT;\n\t\t\tequationToGL[ MaxEquation ] = extension.MAX_EXT;\n\n\t\t}\n\n\t}\n\n\tconst factorToGL = {\n\t\t[ ZeroFactor ]: 0,\n\t\t[ OneFactor ]: 1,\n\t\t[ SrcColorFactor ]: 768,\n\t\t[ SrcAlphaFactor ]: 770,\n\t\t[ SrcAlphaSaturateFactor ]: 776,\n\t\t[ DstColorFactor ]: 774,\n\t\t[ DstAlphaFactor ]: 772,\n\t\t[ OneMinusSrcColorFactor ]: 769,\n\t\t[ OneMinusSrcAlphaFactor ]: 771,\n\t\t[ OneMinusDstColorFactor ]: 775,\n\t\t[ OneMinusDstAlphaFactor ]: 773\n\t};\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( currentBlendingEnabled ) {\n\n\t\t\t\tdisable( 3042 );\n\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( ! currentBlendingEnabled ) {\n\n\t\t\tenable( 3042 );\n\t\t\tcurrentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( 32774 );\n\n\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 1, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 1, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 0, 769, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 768, 0, 770 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 770, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 770, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 0, 769 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 0, 768 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t\t\tcurrentBlending = blending;\n\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\tcurrentBlendDst = blendDst;\n\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = null;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( 2884 )\n\t\t\t: enable( 2884 );\n\n\t\tlet flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tconst stencilWrite = material.stencilWrite;\n\t\tstencilBuffer.setTest( stencilWrite );\n\t\tif ( stencilWrite ) {\n\n\t\t\tstencilBuffer.setMask( material.stencilWriteMask );\n\t\t\tstencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\tstencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t}\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( 2304 );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( 2305 );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( 2884 );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( 1029 );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( 1028 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( 1032 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 2884 );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( 32823 );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 32823 );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( 3089 );\n\n\t\t} else {\n\n\t\t\tdisable( 3089 );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = 33984 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture ) {\n\n\t\tif ( currentTextureSlot === null ) {\n\n\t\t\tactiveTexture();\n\n\t\t}\n\n\t\tlet boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ currentTextureSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction unbindTexture() {\n\n\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\tboundTexture.type = undefined;\n\t\t\tboundTexture.texture = undefined;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\tenabledCapabilities = {};\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlendingEnabled = null;\n\t\tcurrentBlending = null;\n\t\tcurrentBlendEquation = null;\n\t\tcurrentBlendSrc = null;\n\t\tcurrentBlendDst = null;\n\t\tcurrentBlendEquationAlpha = null;\n\t\tcurrentBlendSrcAlpha = null;\n\t\tcurrentBlendDstAlpha = null;\n\t\tcurrentPremultipledAlpha = false;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcurrentLineWidth = null;\n\n\t\tcurrentPolygonOffsetFactor = null;\n\t\tcurrentPolygonOffsetUnits = null;\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tenable: enable,\n\t\tdisable: disable,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tunbindTexture: unbindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\ttexImage2D: texImage2D,\n\t\ttexImage3D: texImage3D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst maxTextures = capabilities.maxTextures;\n\tconst maxCubemapSize = capabilities.maxCubemapSize;\n\tconst maxTextureSize = capabilities.maxTextureSize;\n\tconst maxSamples = capabilities.maxSamples;\n\n\tconst _videoTextures = new WeakMap();\n\tlet _canvas;\n\n\t// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\tlet useOffscreenCanvas = false;\n\n\ttry {\n\n\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'\n\t\t\t&& ( new OffscreenCanvas( 1, 1 ).getContext( \"2d\" ) ) !== null;\n\n\t} catch ( err ) {\n\n\t\t// Ignore any errors\n\n\t}\n\n\tfunction createCanvas( width, height ) {\n\n\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\n\t\treturn useOffscreenCanvas ?\n\t\t\tnew OffscreenCanvas( width, height ) :\n\t\t\tdocument.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t}\n\n\tfunction resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) {\n\n\t\tlet scale = 1;\n\n\t\t// handle case if texture exceeds max size\n\n\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\tscale = maxSize / Math.max( image.width, image.height );\n\n\t\t}\n\n\t\t// only perform resize if necessary\n\n\t\tif ( scale < 1 || needsPowerOfTwo === true ) {\n\n\t\t\t// only perform resize for certain image types\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t\tconst floor = needsPowerOfTwo ? MathUtils.floorPowerOfTwo : Math.floor;\n\n\t\t\t\tconst width = floor( scale * image.width );\n\t\t\t\tconst height = floor( scale * image.height );\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = createCanvas( width, height );\n\n\t\t\t\t// cube textures can't reuse the same canvas\n\n\t\t\t\tconst canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;\n\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' );\n\n\t\t\t\treturn canvas;\n\n\t\t\t} else {\n\n\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );\n\n\t\t\t\t}\n\n\t\t\t\treturn image;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction isPowerOfTwo( image ) {\n\n\t\treturn MathUtils.isPowerOfTwo( image.width ) && MathUtils.isPowerOfTwo( image.height );\n\n\t}\n\n\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\tif ( isWebGL2 ) return false;\n\n\t\treturn ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||\n\t\t\t( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture, supportsMips ) {\n\n\t\treturn texture.generateMipmaps && supportsMips &&\n\t\t\ttexture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t}\n\n\tfunction generateMipmap( target, texture, width, height ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\t// Note: Math.log( x ) * Math.LOG2E used instead of Math.log2( x ) which is not supported by IE11\n\t\ttextureProperties.__maxMipLevel = Math.log( Math.max( width, height ) ) * Math.LOG2E;\n\n\t}\n\n\tfunction getInternalFormat( internalFormatName, glFormat, glType ) {\n\n\t\tif ( isWebGL2 === false ) return glFormat;\n\n\t\tif ( internalFormatName !== null ) {\n\n\t\t\tif ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t}\n\n\t\tlet internalFormat = glFormat;\n\n\t\tif ( glFormat === 6403 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 33326;\n\t\t\tif ( glType === 5131 ) internalFormat = 33325;\n\t\t\tif ( glType === 5121 ) internalFormat = 33321;\n\n\t\t}\n\n\t\tif ( glFormat === 6407 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 34837;\n\t\t\tif ( glType === 5131 ) internalFormat = 34843;\n\t\t\tif ( glType === 5121 ) internalFormat = 32849;\n\n\t\t}\n\n\t\tif ( glFormat === 6408 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 34836;\n\t\t\tif ( glType === 5131 ) internalFormat = 34842;\n\t\t\tif ( glType === 5121 ) internalFormat = 32856;\n\n\t\t}\n\n\t\tif ( internalFormat === 33325 || internalFormat === 33326 ||\n\t\t\tinternalFormat === 34842 || internalFormat === 34836 ) {\n\n\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t}\n\n\t\treturn internalFormat;\n\n\t}\n\n\t// Fallback filters for non-power-of-2 textures\n\n\tfunction filterFallback( f ) {\n\n\t\tif ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) {\n\n\t\t\treturn 9728;\n\n\t\t}\n\n\t\treturn 9729;\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\t_videoTextures.delete( texture );\n\n\t\t}\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tconst renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( renderTarget.texture );\n\n\t\tif ( ! renderTarget ) return;\n\n\t\tif ( textureProperties.__webglTexture !== undefined ) {\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t}\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\t\t\tif ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );\n\n\t\t}\n\n\t\tproperties.remove( renderTarget.texture );\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\tlet textureUnits = 0;\n\n\tfunction resetTextureUnits() {\n\n\t\ttextureUnits = 0;\n\n\t}\n\n\tfunction allocateTextureUnit() {\n\n\t\tconst textureUnit = textureUnits;\n\n\t\tif ( textureUnit >= maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures );\n\n\t\t}\n\n\t\ttextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\t//\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tconst image = texture.image;\n\n\t\t\tif ( image === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined' );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 3553, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture2DArray( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 35866, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture3D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 32879, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadCubeTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t}\n\n\tconst wrappingToGL = {\n\t\t[ RepeatWrapping ]: 10497,\n\t\t[ ClampToEdgeWrapping ]: 33071,\n\t\t[ MirroredRepeatWrapping ]: 33648\n\t};\n\n\tconst filterToGL = {\n\t\t[ NearestFilter ]: 9728,\n\t\t[ NearestMipmapNearestFilter ]: 9984,\n\t\t[ NearestMipmapLinearFilter ]: 9986,\n\n\t\t[ LinearFilter ]: 9729,\n\t\t[ LinearMipmapNearestFilter ]: 9985,\n\t\t[ LinearMipmapLinearFilter ]: 9987\n\t};\n\n\tfunction setTextureParameters( textureType, texture, supportsMips ) {\n\n\t\tif ( supportsMips ) {\n\n\t\t\t_gl.texParameteri( textureType, 10242, wrappingToGL[ texture.wrapS ] );\n\t\t\t_gl.texParameteri( textureType, 10243, wrappingToGL[ texture.wrapT ] );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, wrappingToGL[ texture.wrapR ] );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterToGL[ texture.magFilter ] );\n\t\t\t_gl.texParameteri( textureType, 10241, filterToGL[ texture.minFilter ] );\n\n\t\t} else {\n\n\t\t\t_gl.texParameteri( textureType, 10242, 33071 );\n\t\t\t_gl.texParameteri( textureType, 10243, 33071 );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, 33071 );\n\n\t\t\t}\n\n\t\t\tif ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterFallback( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, 10241, filterFallback( texture.minFilter ) );\n\n\t\t\tif ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\tif ( extension ) {\n\n\t\t\tif ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return;\n\t\t\tif ( texture.type === HalfFloatType && ( isWebGL2 || extensions.get( 'OES_texture_half_float_linear' ) ) === null ) return;\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction initTexture( textureProperties, texture ) {\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tlet textureType = 3553;\n\n\t\tif ( texture.isDataTexture2DArray ) textureType = 35866;\n\t\tif ( texture.isDataTexture3D ) textureType = 32879;\n\n\t\tinitTexture( textureProperties, texture );\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( 37440, texture.flipY );\n\t\t_gl.pixelStorei( 37441, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, texture.unpackAlignment );\n\n\t\tconst needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( texture.image ) === false;\n\t\tconst image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );\n\n\t\tconst supportsMips = isPowerOfTwo( image ) || isWebGL2,\n\t\t\tglFormat = utils.convert( texture.format );\n\n\t\tlet glType = utils.convert( texture.type ),\n\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\tsetTextureParameters( textureType, texture, supportsMips );\n\n\t\tlet mipmap;\n\t\tconst mipmaps = texture.mipmaps;\n\n\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t// populate depth texture with dummy data\n\n\t\t\tglInternalFormat = 6402;\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t} else if ( texture.type === UnsignedIntType ) {\n\n\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t} else if ( texture.type === UnsignedInt248Type ) {\n\n\t\t\t\t\tglInternalFormat = 35056;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tglInternalFormat = 33189; // WebGL2 requires sized internalformat for glTexImage2D\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\tconsole.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// validation checks for WebGL 1\n\n\t\t\tif ( texture.format === DepthFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedShortType;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( texture.format === DepthStencilFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tglInternalFormat = 34041;\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedInt248Type ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedInt248Type;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\tstate.compressedTexImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t} else if ( texture.isDataTexture2DArray ) {\n\n\t\t\tstate.texImage3D( 35866, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t} else if ( texture.isDataTexture3D ) {\n\n\t\t\tstate.texImage3D( 32879, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t} else {\n\n\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, glFormat, glType, mipmap );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, glFormat, glType, image );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\tgenerateMipmap( textureType, texture, image.width, image.height );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t}\n\n\tfunction uploadCubeTexture( textureProperties, texture, slot ) {\n\n\t\tif ( texture.image.length !== 6 ) return;\n\n\t\tinitTexture( textureProperties, texture );\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( 37440, texture.flipY );\n\n\t\tconst isCompressed = ( texture && ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture ) );\n\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\tconst cubeImage = [];\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize );\n\n\t\t\t} else {\n\n\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst image = cubeImage[ 0 ],\n\t\t\tsupportsMips = isPowerOfTwo( image ) || isWebGL2,\n\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\tglType = utils.convert( texture.type ),\n\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\tsetTextureParameters( 34067, texture, supportsMips );\n\n\t\tlet mipmaps;\n\n\t\tif ( isCompressed ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\tstate.compressedTexImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t} else {\n\n\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length;\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t// We assume images for cube map have the same size.\n\t\t\tgenerateMipmap( 34067, texture, image.width, image.height );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) {\n\n\t\tconst glFormat = utils.convert( renderTarget.texture.format );\n\t\tconst glType = utils.convert( renderTarget.texture.type );\n\t\tconst glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType );\n\t\tstate.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\t\t_gl.bindFramebuffer( 36160, framebuffer );\n\t\t_gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 );\n\t\t_gl.bindFramebuffer( 36160, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {\n\n\t\t_gl.bindRenderbuffer( 36161, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\tlet glInternalFormat = 33189;\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst depthTexture = renderTarget.depthTexture;\n\n\t\t\t\tif ( depthTexture && depthTexture.isDepthTexture ) {\n\n\t\t\t\t\tif ( depthTexture.type === FloatType ) {\n\n\t\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t\t} else if ( depthTexture.type === UnsignedIntType ) {\n\n\t\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 36096, 36161, renderbuffer );\n\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, 35056, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, 34041, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 33306, 36161, renderbuffer );\n\n\t\t} else {\n\n\t\t\tconst glFormat = utils.convert( renderTarget.texture.format );\n\t\t\tconst glType = utils.convert( renderTarget.texture.type );\n\t\t\tconst glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType );\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tconst isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\t_gl.bindFramebuffer( 36160, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tconst webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( 36160, 36096, 3553, webglDepthTexture, 0 );\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( 36160, 33306, 3553, webglDepthTexture, 0 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindFramebuffer( 36160, null );\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( renderTarget.texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\tinfo.memory.textures ++;\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\tconst isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true );\n\t\tconst supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;\n\n\t\t// Handles WebGL2 RGBFormat fallback - #18858\n\n\t\tif ( isWebGL2 && renderTarget.texture.format === RGBFormat && ( renderTarget.texture.type === FloatType || renderTarget.texture.type === HalfFloatType ) ) {\n\n\t\t\trenderTarget.texture.format = RGBAFormat;\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.' );\n\n\t\t}\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer();\n\n\t\t\t\t\t_gl.bindRenderbuffer( 36161, renderTargetProperties.__webglColorRenderbuffer );\n\n\t\t\t\t\tconst glFormat = utils.convert( renderTarget.texture.format );\n\t\t\t\t\tconst glType = utils.convert( renderTarget.texture.type );\n\t\t\t\t\tconst glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType );\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t_gl.framebufferRenderbuffer( 36160, 36064, 36161, renderTargetProperties.__webglColorRenderbuffer );\n\t\t\t\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_gl.bindFramebuffer( 36160, null );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( 34067, renderTarget.texture, supportsMips );\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, 36064, 34069 + i );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( 34067, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( 34067, null );\n\n\t\t} else {\n\n\t\t\tstate.bindTexture( 3553, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( 3553, renderTarget.texture, supportsMips );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, 36064, 3553 );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( 3553, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( 3553, null );\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\t\tconst supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\tconst target = renderTarget.isWebGLCubeRenderTarget ? 34067 : 3553;\n\t\t\tconst webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\tgenerateMipmap( target, texture, renderTarget.width, renderTarget.height );\n\t\t\tstate.bindTexture( target, null );\n\n\t\t}\n\n\t}\n\n\tfunction updateMultisampleRenderTarget( renderTarget ) {\n\n\t\tif ( renderTarget.isWebGLMultisampleRenderTarget ) {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\t\t_gl.bindFramebuffer( 36008, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t_gl.bindFramebuffer( 36009, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\tconst width = renderTarget.width;\n\t\t\t\tconst height = renderTarget.height;\n\t\t\t\tlet mask = 16384;\n\n\t\t\t\tif ( renderTarget.depthBuffer ) mask |= 256;\n\t\t\t\tif ( renderTarget.stencilBuffer ) mask |= 1024;\n\n\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, 9728 );\n\n\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer ); // see #18905\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getRenderTargetSamples( renderTarget ) {\n\n\t\treturn ( isWebGL2 && renderTarget.isWebGLMultisampleRenderTarget ) ?\n\t\t\tMath.min( maxSamples, renderTarget.samples ) : 0;\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures.get( texture ) !== frame ) {\n\n\t\t\t_videoTextures.set( texture, frame );\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\t// backwards compatibility\n\n\tlet warnedTexture2D = false;\n\tlet warnedTextureCube = false;\n\n\tfunction safeSetTexture2D( texture, slot ) {\n\n\t\tif ( texture && texture.isWebGLRenderTarget ) {\n\n\t\t\tif ( warnedTexture2D === false ) {\n\n\t\t\t\tconsole.warn( \"THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\t\twarnedTexture2D = true;\n\n\t\t\t}\n\n\t\t\ttexture = texture.texture;\n\n\t\t}\n\n\t\tsetTexture2D( texture, slot );\n\n\t}\n\n\tfunction safeSetTextureCube( texture, slot ) {\n\n\t\tif ( texture && texture.isWebGLCubeRenderTarget ) {\n\n\t\t\tif ( warnedTextureCube === false ) {\n\n\t\t\t\tconsole.warn( \"THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead.\" );\n\t\t\t\twarnedTextureCube = true;\n\n\t\t\t}\n\n\t\t\ttexture = texture.texture;\n\n\t\t}\n\n\n\t\tsetTextureCube( texture, slot );\n\n\t}\n\n\t//\n\n\tthis.allocateTextureUnit = allocateTextureUnit;\n\tthis.resetTextureUnits = resetTextureUnits;\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTexture2DArray = setTexture2DArray;\n\tthis.setTexture3D = setTexture3D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\n\tthis.safeSetTexture2D = safeSetTexture2D;\n\tthis.safeSetTextureCube = safeSetTextureCube;\n\n}\n\nfunction WebGLUtils( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction convert( p ) {\n\n\t\tlet extension;\n\n\t\tif ( p === UnsignedByteType ) return 5121;\n\t\tif ( p === UnsignedShort4444Type ) return 32819;\n\t\tif ( p === UnsignedShort5551Type ) return 32820;\n\t\tif ( p === UnsignedShort565Type ) return 33635;\n\n\t\tif ( p === ByteType ) return 5120;\n\t\tif ( p === ShortType ) return 5122;\n\t\tif ( p === UnsignedShortType ) return 5123;\n\t\tif ( p === IntType ) return 5124;\n\t\tif ( p === UnsignedIntType ) return 5125;\n\t\tif ( p === FloatType ) return 5126;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\tif ( isWebGL2 ) return 5131;\n\n\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.HALF_FLOAT_OES;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === AlphaFormat ) return 6406;\n\t\tif ( p === RGBFormat ) return 6407;\n\t\tif ( p === RGBAFormat ) return 6408;\n\t\tif ( p === LuminanceFormat ) return 6409;\n\t\tif ( p === LuminanceAlphaFormat ) return 6410;\n\t\tif ( p === DepthFormat ) return 6402;\n\t\tif ( p === DepthStencilFormat ) return 34041;\n\t\tif ( p === RedFormat ) return 6403;\n\n\t\t// WebGL2 formats.\n\n\t\tif ( p === RedIntegerFormat ) return 36244;\n\t\tif ( p === RGFormat ) return 33319;\n\t\tif ( p === RGIntegerFormat ) return 33320;\n\t\tif ( p === RGBIntegerFormat ) return 36248;\n\t\tif ( p === RGBAIntegerFormat ) return 36249;\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format ||\n\t\t\tp === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format ||\n\t\t\tp === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_ETC2_Format ) return extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return extension.COMPRESSED_RGBA8_ETC2_EAC;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_4x4_Format || p === SRGB8_ALPHA8_ASTC_5x4_Format || p === SRGB8_ALPHA8_ASTC_5x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_6x5_Format || p === SRGB8_ALPHA8_ASTC_6x6_Format || p === SRGB8_ALPHA8_ASTC_8x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_8x6_Format || p === SRGB8_ALPHA8_ASTC_8x8_Format || p === SRGB8_ALPHA8_ASTC_10x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_10x6_Format || p === SRGB8_ALPHA8_ASTC_10x8_Format || p === SRGB8_ALPHA8_ASTC_10x10_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_12x10_Format || p === SRGB8_ALPHA8_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\t// TODO Complete?\n\n\t\t\t\treturn p;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGBA_BPTC_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\t// TODO Complete?\n\n\t\t\t\treturn p;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\tif ( isWebGL2 ) return 34042;\n\n\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\nfunction ArrayCamera( array = [] ) {\n\n\tPerspectiveCamera.call( this );\n\n\tthis.cameras = array;\n\n}\n\nArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), {\n\n\tconstructor: ArrayCamera,\n\n\tisArrayCamera: true\n\n} );\n\nfunction Group() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Group';\n\n}\n\nGroup.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Group,\n\n\tisGroup: true\n\n} );\n\nfunction WebXRController() {\n\n\tthis._targetRay = null;\n\tthis._grip = null;\n\tthis._hand = null;\n\n}\n\nObject.assign( WebXRController.prototype, {\n\n\tconstructor: WebXRController,\n\n\tgetHandSpace: function () {\n\n\t\tif ( this._hand === null ) {\n\n\t\t\tthis._hand = new Group();\n\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\tthis._hand.visible = false;\n\n\t\t\tthis._hand.joints = [];\n\t\t\tthis._hand.inputState = { pinching: false };\n\n\t\t\tif ( window.XRHand ) {\n\n\t\t\t\tfor ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) {\n\n\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\tconst joint = new Group();\n\t\t\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\t\t\tjoint.visible = false;\n\t\t\t\t\tthis._hand.joints.push( joint );\n\t\t\t\t\t// ??\n\t\t\t\t\tthis._hand.add( joint );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this._hand;\n\n\t},\n\n\tgetTargetRaySpace: function () {\n\n\t\tif ( this._targetRay === null ) {\n\n\t\t\tthis._targetRay = new Group();\n\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\treturn this._targetRay;\n\n\t},\n\n\tgetGripSpace: function () {\n\n\t\tif ( this._grip === null ) {\n\n\t\t\tthis._grip = new Group();\n\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\treturn this._grip;\n\n\t},\n\n\tdispatchEvent: function ( event ) {\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.dispatchEvent( event );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tdisconnect: function ( inputSource ) {\n\n\t\tthis.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.visible = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tupdate: function ( inputSource, frame, referenceSpace ) {\n\n\t\tlet inputPose = null;\n\t\tlet gripPose = null;\n\t\tlet handPose = null;\n\n\t\tconst targetRay = this._targetRay;\n\t\tconst grip = this._grip;\n\t\tconst hand = this._hand;\n\n\t\tif ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {\n\n\t\t\tif ( hand && inputSource.hand ) {\n\n\t\t\t\thandPose = true;\n\n\t\t\t\tfor ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) {\n\n\t\t\t\t\tif ( inputSource.hand[ i ] ) {\n\n\t\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\t\tconst jointPose = frame.getJointPose( inputSource.hand[ i ], referenceSpace );\n\t\t\t\t\t\tconst joint = hand.joints[ i ];\n\n\t\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t\t\t// Custom events\n\n\t\t\t\t\t\t// Check pinch\n\t\t\t\t\t\tconst indexTip = hand.joints[ window.XRHand.INDEX_PHALANX_TIP ];\n\t\t\t\t\t\tconst thumbTip = hand.joints[ window.XRHand.THUMB_PHALANX_TIP ];\n\t\t\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\t\t\ttype: \"pinchend\",\n\t\t\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\t\t\ttarget: this\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\t\t\ttype: \"pinchstart\",\n\t\t\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\t\t\ttarget: this\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( grip !== null && inputSource.gripSpace ) {\n\n\t\t\t\t\tgripPose = frame.getPose( inputSource.gripSpace, referenceSpace );\n\n\t\t\t\t\tif ( gripPose !== null ) {\n\n\t\t\t\t\t\tgrip.matrix.fromArray( gripPose.transform.matrix );\n\t\t\t\t\t\tgrip.matrix.decompose( grip.position, grip.rotation, grip.scale );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( targetRay !== null ) {\n\n\t\t\ttargetRay.visible = ( inputPose !== null );\n\n\t\t}\n\n\t\tif ( grip !== null ) {\n\n\t\t\tgrip.visible = ( gripPose !== null );\n\n\t\t}\n\n\t\tif ( hand !== null ) {\n\n\t\t\thand.visible = ( handPose !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction WebXRManager( renderer, gl ) {\n\n\tconst scope = this;\n\n\tlet session = null;\n\n\tlet framebufferScaleFactor = 1.0;\n\n\tlet referenceSpace = null;\n\tlet referenceSpaceType = 'local-floor';\n\n\tlet pose = null;\n\n\tconst controllers = [];\n\tconst inputSourcesMap = new Map();\n\n\t//\n\n\tconst cameraL = new PerspectiveCamera();\n\tcameraL.layers.enable( 1 );\n\tcameraL.viewport = new Vector4();\n\n\tconst cameraR = new PerspectiveCamera();\n\tcameraR.layers.enable( 2 );\n\tcameraR.viewport = new Vector4();\n\n\tconst cameras = [ cameraL, cameraR ];\n\n\tconst cameraVR = new ArrayCamera();\n\tcameraVR.layers.enable( 1 );\n\tcameraVR.layers.enable( 2 );\n\n\tlet _currentDepthNear = null;\n\tlet _currentDepthFar = null;\n\n\t//\n\n\tthis.enabled = false;\n\n\tthis.isPresenting = false;\n\n\tthis.getController = function ( index ) {\n\n\t\tlet controller = controllers[ index ];\n\n\t\tif ( controller === undefined ) {\n\n\t\t\tcontroller = new WebXRController();\n\t\t\tcontrollers[ index ] = controller;\n\n\t\t}\n\n\t\treturn controller.getTargetRaySpace();\n\n\t};\n\n\tthis.getControllerGrip = function ( index ) {\n\n\t\tlet controller = controllers[ index ];\n\n\t\tif ( controller === undefined ) {\n\n\t\t\tcontroller = new WebXRController();\n\t\t\tcontrollers[ index ] = controller;\n\n\t\t}\n\n\t\treturn controller.getGripSpace();\n\n\t};\n\n\tthis.getHand = function ( index ) {\n\n\t\tlet controller = controllers[ index ];\n\n\t\tif ( controller === undefined ) {\n\n\t\t\tcontroller = new WebXRController();\n\t\t\tcontrollers[ index ] = controller;\n\n\t\t}\n\n\t\treturn controller.getHandSpace();\n\n\t};\n\n\t//\n\n\tfunction onSessionEvent( event ) {\n\n\t\tconst controller = inputSourcesMap.get( event.inputSource );\n\n\t\tif ( controller ) {\n\n\t\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t\t}\n\n\t}\n\n\tfunction onSessionEnd() {\n\n\t\tinputSourcesMap.forEach( function ( controller, inputSource ) {\n\n\t\t\tcontroller.disconnect( inputSource );\n\n\t\t} );\n\n\t\tinputSourcesMap.clear();\n\n\t\t//\n\n\t\trenderer.setFramebuffer( null );\n\t\trenderer.setRenderTarget( renderer.getRenderTarget() ); // Hack #15830\n\t\tanimation.stop();\n\n\t\tscope.isPresenting = false;\n\n\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t}\n\n\tfunction onRequestReferenceSpace( value ) {\n\n\t\treferenceSpace = value;\n\n\t\tanimation.setContext( session );\n\t\tanimation.start();\n\n\t\tscope.isPresenting = true;\n\n\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t}\n\n\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\tframebufferScaleFactor = value;\n\n\t\tif ( scope.isPresenting === true ) {\n\n\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t}\n\n\t};\n\n\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\treferenceSpaceType = value;\n\n\t\tif ( scope.isPresenting === true ) {\n\n\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t}\n\n\t};\n\n\tthis.getReferenceSpace = function () {\n\n\t\treturn referenceSpace;\n\n\t};\n\n\tthis.getSession = function () {\n\n\t\treturn session;\n\n\t};\n\n\tthis.setSession = function ( value ) {\n\n\t\tsession = value;\n\n\t\tif ( session !== null ) {\n\n\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\n\t\t\tconst attributes = gl.getContextAttributes();\n\n\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\tgl.makeXRCompatible();\n\n\t\t\t}\n\n\t\t\tconst layerInit = {\n\t\t\t\tantialias: attributes.antialias,\n\t\t\t\talpha: attributes.alpha,\n\t\t\t\tdepth: attributes.depth,\n\t\t\t\tstencil: attributes.stencil,\n\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t};\n\n\t\t\t// eslint-disable-next-line no-undef\n\t\t\tconst baseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\tsession.updateRenderState( { baseLayer: baseLayer } );\n\n\t\t\tsession.requestReferenceSpace( referenceSpaceType ).then( onRequestReferenceSpace );\n\n\t\t\t//\n\n\t\t\tsession.addEventListener( 'inputsourceschange', updateInputSources );\n\n\t\t}\n\n\t};\n\n\tfunction updateInputSources( event ) {\n\n\t\tconst inputSources = session.inputSources;\n\n\t\t// Assign inputSources to available controllers\n\n\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\tinputSourcesMap.set( inputSources[ i ], controllers[ i ] );\n\n\t\t}\n\n\t\t// Notify disconnected\n\n\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\tconst inputSource = event.removed[ i ];\n\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\tif ( controller ) {\n\n\t\t\t\tcontroller.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\t\t\t\tinputSourcesMap.delete( inputSource );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Notify connected\n\n\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\tconst inputSource = event.added[ i ];\n\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\tif ( controller ) {\n\n\t\t\t\tcontroller.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t//\n\n\tconst cameraLPos = new Vector3();\n\tconst cameraRPos = new Vector3();\n\n\t/**\n\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t * the cameras' projection and world matrices have already been set.\n\t * And that near and far planes are identical for both cameras.\n\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t */\n\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t// VR systems will have identical far and near planes, and\n\t\t// most likely identical top and bottom frustum extents.\n\t\t// Use the left camera for these values.\n\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\tconst left = near * leftFov;\n\t\tconst right = near * rightFov;\n\n\t\t// Calculate the new camera's position offset from the\n\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t// TODO: Better way to apply this offset?\n\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\tcamera.translateX( xOffset );\n\t\tcamera.translateZ( zOffset );\n\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t// Find the union of the frustum values of the cameras and scale\n\t\t// the values so that the near plane's position does not change in world space,\n\t\t// although must now be relative to the new union camera.\n\t\tconst near2 = near + zOffset;\n\t\tconst far2 = far + zOffset;\n\t\tconst left2 = left - xOffset;\n\t\tconst right2 = right + ( ipd - xOffset );\n\t\tconst top2 = topFov * far / far2 * near2;\n\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\n\t}\n\n\tfunction updateCamera( camera, parent ) {\n\n\t\tif ( parent === null ) {\n\n\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t} else {\n\n\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t}\n\n\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t}\n\n\tthis.getCamera = function ( camera ) {\n\n\t\tcameraVR.near = cameraR.near = cameraL.near = camera.near;\n\t\tcameraVR.far = cameraR.far = cameraL.far = camera.far;\n\n\t\tif ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) {\n\n\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\tsession.updateRenderState( {\n\t\t\t\tdepthNear: cameraVR.near,\n\t\t\t\tdepthFar: cameraVR.far\n\t\t\t} );\n\n\t\t\t_currentDepthNear = cameraVR.near;\n\t\t\t_currentDepthFar = cameraVR.far;\n\n\t\t}\n\n\t\tconst parent = camera.parent;\n\t\tconst cameras = cameraVR.cameras;\n\n\t\tupdateCamera( cameraVR, parent );\n\n\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t}\n\n\t\t// update camera and its children\n\n\t\tcamera.matrixWorld.copy( cameraVR.matrixWorld );\n\n\t\tconst children = camera.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].updateMatrixWorld( true );\n\n\t\t}\n\n\t\t// update projection matrix for proper view frustum culling\n\n\t\tif ( cameras.length === 2 ) {\n\n\t\t\tsetProjectionFromUnion( cameraVR, cameraL, cameraR );\n\n\t\t} else {\n\n\t\t\t// assume single camera setup (AR)\n\n\t\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t}\n\n\t\treturn cameraVR;\n\n\t};\n\n\t// Animation Loop\n\n\tlet onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tpose = frame.getViewerPose( referenceSpace );\n\n\t\tif ( pose !== null ) {\n\n\t\t\tconst views = pose.views;\n\t\t\tconst baseLayer = session.renderState.baseLayer;\n\n\t\t\trenderer.setFramebuffer( baseLayer.framebuffer );\n\n\t\t\tlet cameraVRNeedsUpdate = false;\n\n\t\t\t// check if it's necessary to rebuild cameraVR's camera list\n\n\t\t\tif ( views.length !== cameraVR.cameras.length ) {\n\n\t\t\t\tcameraVR.cameras.length = 0;\n\t\t\t\tcameraVRNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\tconst view = views[ i ];\n\t\t\t\tconst viewport = baseLayer.getViewport( view );\n\n\t\t\t\tconst camera = cameras[ i ];\n\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\tcameraVR.matrix.copy( camera.matrix );\n\n\t\t\t\t}\n\n\t\t\t\tif ( cameraVRNeedsUpdate === true ) {\n\n\t\t\t\t\tcameraVR.cameras.push( camera );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst inputSources = session.inputSources;\n\n\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\tconst controller = controllers[ i ];\n\t\t\tconst inputSource = inputSources[ i ];\n\n\t\t\tcontroller.update( inputSource, frame, referenceSpace );\n\n\t\t}\n\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t}\n\n\tconst animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\n\t};\n\n\tthis.dispose = function () {};\n\n}\n\nObject.assign( WebXRManager.prototype, EventDispatcher.prototype );\n\nfunction WebGLMaterials( properties ) {\n\n\tfunction refreshFogUniforms( uniforms, fog ) {\n\n\t\tuniforms.fogColor.value.copy( fog.color );\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshMaterialUniforms( uniforms, material, pixelRatio, height ) {\n\n\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsLambert( uniforms, material );\n\n\t\t} else if ( material.isMeshToonMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsToon( uniforms, material );\n\n\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\trefreshUniformsPhysical( uniforms, material );\n\n\t\t\t} else {\n\n\t\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsMatcap( uniforms, material );\n\n\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDepth( uniforms, material );\n\n\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDistance( uniforms, material );\n\n\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsNormal( uniforms, material );\n\n\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\trefreshUniformsLine( uniforms, material );\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\trefreshUniformsDash( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\trefreshUniformsPoints( uniforms, material, pixelRatio, height );\n\n\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\trefreshUniformsSprites( uniforms, material );\n\n\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\tuniforms.color.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t} else if ( material.isShaderMaterial ) {\n\n\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value.copy( material.color );\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t}\n\n\t\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\tuniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap._needsFlipEnvMap ) ? - 1 : 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\tconst maxMipLevel = properties.get( envMap ).__maxMipLevel;\n\n\t\t\tif ( maxMipLevel !== undefined ) {\n\n\t\t\t\tuniforms.maxMipLevel.value = maxMipLevel;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. specular map\n\t\t// 3. displacementMap map\n\t\t// 4. normal map\n\t\t// 5. bump map\n\t\t// 6. roughnessMap map\n\t\t// 7. metalnessMap map\n\t\t// 8. alphaMap map\n\t\t// 9. emissiveMap map\n\t\t// 10. clearcoat map\n\t\t// 11. clearcoat normal map\n\t\t// 12. clearcoat roughnessMap map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.specularMap ) {\n\n\t\t\tuvScaleMap = material.specularMap;\n\n\t\t} else if ( material.displacementMap ) {\n\n\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t} else if ( material.normalMap ) {\n\n\t\t\tuvScaleMap = material.normalMap;\n\n\t\t} else if ( material.bumpMap ) {\n\n\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t} else if ( material.roughnessMap ) {\n\n\t\t\tuvScaleMap = material.roughnessMap;\n\n\t\t} else if ( material.metalnessMap ) {\n\n\t\t\tuvScaleMap = material.metalnessMap;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t} else if ( material.emissiveMap ) {\n\n\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t} else if ( material.clearcoatMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatMap;\n\n\t\t} else if ( material.clearcoatNormalMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatNormalMap;\n\n\t\t} else if ( material.clearcoatRoughnessMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatRoughnessMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities for uv2\n\t\t// 1. ao map\n\t\t// 2. light map\n\n\t\tlet uv2ScaleMap;\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuv2ScaleMap = material.aoMap;\n\n\t\t} else if ( material.lightMap ) {\n\n\t\t\tuv2ScaleMap = material.lightMap;\n\n\t\t}\n\n\t\tif ( uv2ScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uv2ScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuv2ScaleMap = uv2ScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uv2ScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuv2ScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uv2Transform.value.copy( uv2ScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material, pixelRatio, height ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * pixelRatio;\n\t\tuniforms.scale.value = height * 0.5;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsSprites( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.rotation.value = material.rotation;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLambert( uniforms, material ) {\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value.copy( material.specular );\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.roughness.value = material.roughness;\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t}\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material ) {\n\n\t\trefreshUniformsStandard( uniforms, material );\n\n\t\tuniforms.reflectivity.value = material.reflectivity; // also part of uniforms common\n\n\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\t\tif ( material.sheen ) uniforms.sheen.value.copy( material.sheen );\n\n\t\tif ( material.clearcoatMap ) {\n\n\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\n\t\t}\n\n\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\n\t\t}\n\n\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\tuniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );\n\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\n\t\t\t}\n\n\t\t}\n\n\t\tuniforms.transmission.value = material.transmission;\n\n\t\tif ( material.transmissionMap ) {\n\n\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\tif ( material.matcap ) {\n\n\t\t\tuniforms.matcap.value = material.matcap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDepth( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tuniforms.referencePosition.value.copy( material.referencePosition );\n\t\tuniforms.nearDistance.value = material.nearDistance;\n\t\tuniforms.farDistance.value = material.farDistance;\n\n\t}\n\n\tfunction refreshUniformsNormal( uniforms, material ) {\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\trefreshFogUniforms: refreshFogUniforms,\n\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t};\n\n}\n\nfunction createCanvasElement() {\n\n\tconst canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\tcanvas.style.display = 'block';\n\treturn canvas;\n\n}\n\nfunction WebGLRenderer( parameters ) {\n\n\tparameters = parameters || {};\n\n\tconst _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(),\n\t\t_context = parameters.context !== undefined ? parameters.context : null,\n\n\t\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false,\n\t\t_depth = parameters.depth !== undefined ? parameters.depth : true,\n\t\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\n\t\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\n\t\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\n\t\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,\n\t\t_powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default',\n\t\t_failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false;\n\n\tlet currentRenderList = null;\n\tlet currentRenderState = null;\n\n\t// public properties\n\n\tthis.domElement = _canvas;\n\n\t// Debug configuration container\n\tthis.debug = {\n\n\t\t/**\n\t\t * Enables error checking and reporting when shader programs are being compiled\n\t\t * @type {boolean}\n\t\t */\n\t\tcheckShaderErrors: true\n\t};\n\n\t// clearing\n\n\tthis.autoClear = true;\n\tthis.autoClearColor = true;\n\tthis.autoClearDepth = true;\n\tthis.autoClearStencil = true;\n\n\t// scene graph\n\n\tthis.sortObjects = true;\n\n\t// user-defined clipping\n\n\tthis.clippingPlanes = [];\n\tthis.localClippingEnabled = false;\n\n\t// physically based shading\n\n\tthis.gammaFactor = 2.0;\t// for backwards compatibility\n\tthis.outputEncoding = LinearEncoding;\n\n\t// physical lights\n\n\tthis.physicallyCorrectLights = false;\n\n\t// tone mapping\n\n\tthis.toneMapping = NoToneMapping;\n\tthis.toneMappingExposure = 1.0;\n\n\t// morphs\n\n\tthis.maxMorphTargets = 8;\n\tthis.maxMorphNormals = 4;\n\n\t// internal properties\n\n\tconst _this = this;\n\n\tlet _isContextLost = false;\n\n\t// internal state cache\n\n\tlet _framebuffer = null;\n\n\tlet _currentActiveCubeFace = 0;\n\tlet _currentActiveMipmapLevel = 0;\n\tlet _currentRenderTarget = null;\n\tlet _currentFramebuffer = null;\n\tlet _currentMaterialId = - 1;\n\n\tlet _currentCamera = null;\n\tlet _currentArrayCamera = null;\n\n\tconst _currentViewport = new Vector4();\n\tconst _currentScissor = new Vector4();\n\tlet _currentScissorTest = null;\n\n\t//\n\n\tlet _width = _canvas.width;\n\tlet _height = _canvas.height;\n\n\tlet _pixelRatio = 1;\n\tlet _opaqueSort = null;\n\tlet _transparentSort = null;\n\n\tconst _viewport = new Vector4( 0, 0, _width, _height );\n\tconst _scissor = new Vector4( 0, 0, _width, _height );\n\tlet _scissorTest = false;\n\n\t// frustum\n\n\tconst _frustum = new Frustum();\n\n\t// clipping\n\n\tlet _clippingEnabled = false;\n\tlet _localClippingEnabled = false;\n\n\t// camera matrices cache\n\n\tconst _projScreenMatrix = new Matrix4();\n\n\tconst _vector3 = new Vector3();\n\n\tconst _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };\n\n\tfunction getTargetPixelRatio() {\n\n\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t}\n\n\t// initialize\n\n\tlet _gl = _context;\n\n\tfunction getContext( contextNames, contextAttributes ) {\n\n\t\tfor ( let i = 0; i < contextNames.length; i ++ ) {\n\n\t\t\tconst contextName = contextNames[ i ];\n\t\t\tconst context = _canvas.getContext( contextName, contextAttributes );\n\t\t\tif ( context !== null ) return context;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\ttry {\n\n\t\tconst contextAttributes = {\n\t\t\talpha: _alpha,\n\t\t\tdepth: _depth,\n\t\t\tstencil: _stencil,\n\t\t\tantialias: _antialias,\n\t\t\tpremultipliedAlpha: _premultipliedAlpha,\n\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer,\n\t\t\tpowerPreference: _powerPreference,\n\t\t\tfailIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat\n\t\t};\n\n\t\t// event listeners must be registered before WebGL context is created, see #12753\n\n\t\t_canvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\tif ( _gl === null ) {\n\n\t\t\tconst contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ];\n\n\t\t\tif ( _this.isWebGL1Renderer === true ) {\n\n\t\t\t\tcontextNames.shift();\n\n\t\t\t}\n\n\t\t\t_gl = getContext( contextNames, contextAttributes );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tif ( getContext( contextNames ) ) {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Some experimental-webgl implementations do not have getShaderPrecisionFormat\n\n\t\tif ( _gl.getShaderPrecisionFormat === undefined ) {\n\n\t\t\t_gl.getShaderPrecisionFormat = function () {\n\n\t\t\t\treturn { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };\n\n\t\t\t};\n\n\t\t}\n\n\t} catch ( error ) {\n\n\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\t\tthrow error;\n\n\t}\n\n\tlet extensions, capabilities, state, info;\n\tlet properties, textures, cubemaps, attributes, geometries, objects;\n\tlet programCache, materials, renderLists, renderStates, clipping;\n\n\tlet background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\tlet utils, bindingStates;\n\n\tfunction initGLContext() {\n\n\t\textensions = new WebGLExtensions( _gl );\n\n\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\tif ( capabilities.isWebGL2 === false ) {\n\n\t\t\textensions.get( 'WEBGL_depth_texture' );\n\t\t\textensions.get( 'OES_texture_float' );\n\t\t\textensions.get( 'OES_texture_half_float' );\n\t\t\textensions.get( 'OES_texture_half_float_linear' );\n\t\t\textensions.get( 'OES_standard_derivatives' );\n\t\t\textensions.get( 'OES_element_index_uint' );\n\t\t\textensions.get( 'OES_vertex_array_object' );\n\t\t\textensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t}\n\n\t\textensions.get( 'OES_texture_float_linear' );\n\n\t\tutils = new WebGLUtils( _gl, extensions, capabilities );\n\n\t\tstate = new WebGLState( _gl, extensions, capabilities );\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );\n\n\t\tinfo = new WebGLInfo( _gl );\n\t\tproperties = new WebGLProperties();\n\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\tcubemaps = new WebGLCubeMaps( _this );\n\t\tattributes = new WebGLAttributes( _gl, capabilities );\n\t\tbindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities );\n\t\tgeometries = new WebGLGeometries( _gl, attributes, info, bindingStates );\n\t\tobjects = new WebGLObjects( _gl, geometries, attributes, info );\n\t\tmorphtargets = new WebGLMorphtargets( _gl );\n\t\tclipping = new WebGLClipping( properties );\n\t\tprogramCache = new WebGLPrograms( _this, cubemaps, extensions, capabilities, bindingStates, clipping );\n\t\tmaterials = new WebGLMaterials( properties );\n\t\trenderLists = new WebGLRenderLists( properties );\n\t\trenderStates = new WebGLRenderStates( extensions, capabilities );\n\t\tbackground = new WebGLBackground( _this, cubemaps, state, objects, _premultipliedAlpha );\n\n\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities );\n\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );\n\n\t\tinfo.programs = programCache.programs;\n\n\t\t_this.capabilities = capabilities;\n\t\t_this.extensions = extensions;\n\t\t_this.properties = properties;\n\t\t_this.renderLists = renderLists;\n\t\t_this.state = state;\n\t\t_this.info = info;\n\n\t}\n\n\tinitGLContext();\n\n\t// xr\n\n\tconst xr = new WebXRManager( _this, _gl );\n\n\tthis.xr = xr;\n\n\t// shadow map\n\n\tconst shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize );\n\n\tthis.shadowMap = shadowMap;\n\n\t// API\n\n\tthis.getContext = function () {\n\n\t\treturn _gl;\n\n\t};\n\n\tthis.getContextAttributes = function () {\n\n\t\treturn _gl.getContextAttributes();\n\n\t};\n\n\tthis.forceContextLoss = function () {\n\n\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.loseContext();\n\n\t};\n\n\tthis.forceContextRestore = function () {\n\n\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.restoreContext();\n\n\t};\n\n\tthis.getPixelRatio = function () {\n\n\t\treturn _pixelRatio;\n\n\t};\n\n\tthis.setPixelRatio = function ( value ) {\n\n\t\tif ( value === undefined ) return;\n\n\t\t_pixelRatio = value;\n\n\t\tthis.setSize( _width, _height, false );\n\n\t};\n\n\tthis.getSize = function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getsize() now requires a Vector2 as an argument' );\n\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set( _width, _height );\n\n\t};\n\n\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\tif ( xr.isPresenting ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_canvas.width = Math.floor( width * _pixelRatio );\n\t\t_canvas.height = Math.floor( height * _pixelRatio );\n\n\t\tif ( updateStyle !== false ) {\n\n\t\t\t_canvas.style.width = width + 'px';\n\t\t\t_canvas.style.height = height + 'px';\n\n\t\t}\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getDrawingBufferSize = function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument' );\n\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();\n\n\t};\n\n\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_pixelRatio = pixelRatio;\n\n\t\t_canvas.width = Math.floor( width * pixelRatio );\n\t\t_canvas.height = Math.floor( height * pixelRatio );\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getCurrentViewport = function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument' );\n\n\t\t\ttarget = new Vector4();\n\n\t\t}\n\n\t\treturn target.copy( _currentViewport );\n\n\t};\n\n\tthis.getViewport = function ( target ) {\n\n\t\treturn target.copy( _viewport );\n\n\t};\n\n\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_viewport.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_viewport.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissor = function ( target ) {\n\n\t\treturn target.copy( _scissor );\n\n\t};\n\n\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_scissor.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_scissor.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissorTest = function () {\n\n\t\treturn _scissorTest;\n\n\t};\n\n\tthis.setScissorTest = function ( boolean ) {\n\n\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t};\n\n\tthis.setOpaqueSort = function ( method ) {\n\n\t\t_opaqueSort = method;\n\n\t};\n\n\tthis.setTransparentSort = function ( method ) {\n\n\t\t_transparentSort = method;\n\n\t};\n\n\t// Clearing\n\n\tthis.getClearColor = function () {\n\n\t\treturn background.getClearColor();\n\n\t};\n\n\tthis.setClearColor = function () {\n\n\t\tbackground.setClearColor.apply( background, arguments );\n\n\t};\n\n\tthis.getClearAlpha = function () {\n\n\t\treturn background.getClearAlpha();\n\n\t};\n\n\tthis.setClearAlpha = function () {\n\n\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t};\n\n\tthis.clear = function ( color, depth, stencil ) {\n\n\t\tlet bits = 0;\n\n\t\tif ( color === undefined || color ) bits |= 16384;\n\t\tif ( depth === undefined || depth ) bits |= 256;\n\t\tif ( stencil === undefined || stencil ) bits |= 1024;\n\n\t\t_gl.clear( bits );\n\n\t};\n\n\tthis.clearColor = function () {\n\n\t\tthis.clear( true, false, false );\n\n\t};\n\n\tthis.clearDepth = function () {\n\n\t\tthis.clear( false, true, false );\n\n\t};\n\n\tthis.clearStencil = function () {\n\n\t\tthis.clear( false, false, true );\n\n\t};\n\n\t//\n\n\tthis.dispose = function () {\n\n\t\t_canvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\trenderLists.dispose();\n\t\trenderStates.dispose();\n\t\tproperties.dispose();\n\t\tcubemaps.dispose();\n\t\tobjects.dispose();\n\t\tbindingStates.dispose();\n\n\t\txr.dispose();\n\n\t\tanimation.stop();\n\n\t};\n\n\t// Events\n\n\tfunction onContextLost( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t_isContextLost = true;\n\n\t}\n\n\tfunction onContextRestore( /* event */ ) {\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t_isContextLost = false;\n\n\t\tinitGLContext();\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tconst material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\tdeallocateMaterial( material );\n\n\t}\n\n\t// Buffer deallocation\n\n\tfunction deallocateMaterial( material ) {\n\n\t\treleaseMaterialProgramReference( material );\n\n\t\tproperties.remove( material );\n\n\t}\n\n\n\tfunction releaseMaterialProgramReference( material ) {\n\n\t\tconst programInfo = properties.get( material ).program;\n\n\t\tif ( programInfo !== undefined ) {\n\n\t\t\tprogramCache.releaseProgram( programInfo );\n\n\t\t}\n\n\t}\n\n\t// Buffer rendering\n\n\tfunction renderObjectImmediate( object, program ) {\n\n\t\tobject.render( function ( object ) {\n\n\t\t\t_this.renderBufferImmediate( object, program );\n\n\t\t} );\n\n\t}\n\n\tthis.renderBufferImmediate = function ( object, program ) {\n\n\t\tbindingStates.initAttributes();\n\n\t\tconst buffers = properties.get( object );\n\n\t\tif ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer();\n\t\tif ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer();\n\t\tif ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer();\n\t\tif ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer();\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tif ( object.hasPositions ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.position );\n\t\t\t_gl.bufferData( 34962, object.positionArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.position );\n\t\t\t_gl.vertexAttribPointer( programAttributes.position, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasNormals ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.normal );\n\t\t\t_gl.bufferData( 34962, object.normalArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.normal );\n\t\t\t_gl.vertexAttribPointer( programAttributes.normal, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasUvs ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.uv );\n\t\t\t_gl.bufferData( 34962, object.uvArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.uv );\n\t\t\t_gl.vertexAttribPointer( programAttributes.uv, 2, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasColors ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.color );\n\t\t\t_gl.bufferData( 34962, object.colorArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.color );\n\t\t\t_gl.vertexAttribPointer( programAttributes.color, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tbindingStates.disableUnusedAttributes();\n\n\t\t_gl.drawArrays( 4, 0, object.count );\n\n\t\tobject.count = 0;\n\n\t};\n\n\tthis.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {\n\n\t\tif ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\tconst program = setProgram( camera, scene, material, object );\n\n\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t//\n\n\t\tlet index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\n\t\t//\n\n\t\tif ( index === null ) {\n\n\t\t\tif ( position === undefined || position.count === 0 ) return;\n\n\t\t} else if ( index.count === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t//\n\n\t\tlet rangeFactor = 1;\n\n\t\tif ( material.wireframe === true ) {\n\n\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\t\t\trangeFactor = 2;\n\n\t\t}\n\n\t\tif ( material.morphTargets || material.morphNormals ) {\n\n\t\t\tmorphtargets.update( object, geometry, material, program );\n\n\t\t}\n\n\t\tbindingStates.setup( object, material, program, geometry, index );\n\n\t\tlet attribute;\n\t\tlet renderer = bufferRenderer;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattribute = attributes.get( index );\n\n\t\t\trenderer = indexedBufferRenderer;\n\t\t\trenderer.setIndex( attribute );\n\n\t\t}\n\n\t\t//\n\n\t\tconst dataCount = ( index !== null ) ? index.count : position.count;\n\n\t\tconst rangeStart = geometry.drawRange.start * rangeFactor;\n\t\tconst rangeCount = geometry.drawRange.count * rangeFactor;\n\n\t\tconst groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\tconst groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\tconst drawStart = Math.max( rangeStart, groupStart );\n\t\tconst drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\tconst drawCount = Math.max( 0, drawEnd - drawStart + 1 );\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\t//\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\trenderer.setMode( 1 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 4 );\n\n\t\t\t}\n\n\t\t} else if ( object.isLine ) {\n\n\t\t\tlet lineWidth = material.linewidth;\n\n\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\trenderer.setMode( 1 );\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\trenderer.setMode( 2 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 3 );\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\trenderer.setMode( 0 );\n\n\t\t} else if ( object.isSprite ) {\n\n\t\t\trenderer.setMode( 4 );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, object.count );\n\n\t\t} else if ( geometry.isInstancedBufferGeometry ) {\n\n\t\t\tconst instanceCount = Math.min( geometry.instanceCount, geometry._maxInstanceCount );\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, instanceCount );\n\n\t\t} else {\n\n\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t}\n\n\t};\n\n\t// Compile\n\n\tthis.compile = function ( scene, camera ) {\n\n\t\tcurrentRenderState = renderStates.get( scene, camera );\n\t\tcurrentRenderState.init();\n\n\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tcurrentRenderState.setupLights( camera );\n\n\t\tconst compiled = new WeakMap();\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tconst material = object.material;\n\n\t\t\tif ( material ) {\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0; i < material.length; i ++ ) {\n\n\t\t\t\t\t\tconst material2 = material[ i ];\n\n\t\t\t\t\t\tif ( compiled.has( material2 ) === false ) {\n\n\t\t\t\t\t\t\tinitMaterial( material2, scene, object );\n\t\t\t\t\t\t\tcompiled.set( material2 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( compiled.has( material ) === false ) {\n\n\t\t\t\t\tinitMaterial( material, scene, object );\n\t\t\t\t\tcompiled.set( material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t};\n\n\t// Animation Loop\n\n\tlet onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time ) {\n\n\t\tif ( xr.isPresenting ) return;\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t}\n\n\tconst animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tif ( typeof window !== 'undefined' ) animation.setContext( window );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\t\txr.setAnimationLoop( callback );\n\n\t\t( callback === null ) ? animation.stop() : animation.start();\n\n\t};\n\n\t// Rendering\n\n\tthis.render = function ( scene, camera ) {\n\n\t\tlet renderTarget, forceClear;\n\n\t\tif ( arguments[ 2 ] !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.' );\n\t\t\trenderTarget = arguments[ 2 ];\n\n\t\t}\n\n\t\tif ( arguments[ 3 ] !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead.' );\n\t\t\tforceClear = arguments[ 3 ];\n\n\t\t}\n\n\t\tif ( camera !== undefined && camera.isCamera !== true ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( _isContextLost === true ) return;\n\n\t\t// reset caching for this frame\n\n\t\tbindingStates.resetDefaultState();\n\t\t_currentMaterialId = - 1;\n\t\t_currentCamera = null;\n\n\t\t// update scene graph\n\n\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t// update camera matrices and frustum\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\tcamera = xr.getCamera( camera );\n\n\t\t}\n\n\t\t//\n\t\tif ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, renderTarget || _currentRenderTarget );\n\n\t\tcurrentRenderState = renderStates.get( scene, camera );\n\t\tcurrentRenderState.init();\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t_frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled, camera );\n\n\t\tcurrentRenderList = renderLists.get( scene, camera );\n\t\tcurrentRenderList.init();\n\n\t\tprojectObject( scene, camera, 0, _this.sortObjects );\n\n\t\tcurrentRenderList.finish();\n\n\t\tif ( _this.sortObjects === true ) {\n\n\t\t\tcurrentRenderList.sort( _opaqueSort, _transparentSort );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _clippingEnabled === true ) clipping.beginShadows();\n\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\tcurrentRenderState.setupLights( camera );\n\n\t\tif ( _clippingEnabled === true ) clipping.endShadows();\n\n\t\t//\n\n\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n\t\tif ( renderTarget !== undefined ) {\n\n\t\t\tthis.setRenderTarget( renderTarget );\n\n\t\t}\n\n\t\t//\n\n\t\tbackground.render( currentRenderList, scene, camera, forceClear );\n\n\t\t// render scene\n\n\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\tconst transparentObjects = currentRenderList.transparent;\n\n\t\tif ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );\n\t\tif ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );\n\n\t\t//\n\n\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\n\n\t\t//\n\n\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\ttextures.updateRenderTargetMipmap( _currentRenderTarget );\n\n\t\t\t// resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\ttextures.updateMultisampleRenderTarget( _currentRenderTarget );\n\n\t\t}\n\n\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\tstate.buffers.depth.setTest( true );\n\t\tstate.buffers.depth.setMask( true );\n\t\tstate.buffers.color.setMask( true );\n\n\t\tstate.setPolygonOffset( false );\n\n\t\t// _gl.finish();\n\n\t\tcurrentRenderList = null;\n\t\tcurrentRenderState = null;\n\n\t};\n\n\tfunction projectObject( object, camera, groupOrder, sortObjects ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible ) {\n\n\t\t\tif ( object.isGroup ) {\n\n\t\t\t\tgroupOrder = object.renderOrder;\n\n\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t} else if ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isImmediateRenderObject ) {\n\n\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t}\n\n\t\t\t\tcurrentRenderList.push( object, null, object.material, groupOrder, _vector3.z, null );\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\t// update skeleton only once in a frame\n\n\t\t\t\t\tif ( object.skeleton.frame !== info.render.frame ) {\n\n\t\t\t\t\t\tobject.skeleton.update();\n\t\t\t\t\t\tobject.skeleton.frame = info.render.frame;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tprojectObject( children[ i ], camera, groupOrder, sortObjects );\n\n\t\t}\n\n\t}\n\n\tfunction renderObjects( renderList, scene, camera ) {\n\n\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\tfor ( let i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\tconst renderItem = renderList[ i ];\n\n\t\t\tconst object = renderItem.object;\n\t\t\tconst geometry = renderItem.geometry;\n\t\t\tconst material = overrideMaterial === null ? renderItem.material : overrideMaterial;\n\t\t\tconst group = renderItem.group;\n\n\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\t_currentArrayCamera = camera;\n\n\t\t\t\tconst cameras = camera.cameras;\n\n\t\t\t\tfor ( let j = 0, jl = cameras.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst camera2 = cameras[ j ];\n\n\t\t\t\t\tif ( object.layers.test( camera2.layers ) ) {\n\n\t\t\t\t\t\tstate.viewport( _currentViewport.copy( camera2.viewport ) );\n\n\t\t\t\t\t\tcurrentRenderState.setupLights( camera2 );\n\n\t\t\t\t\t\trenderObject( object, scene, camera2, geometry, material, group );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_currentArrayCamera = null;\n\n\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\t\tcurrentRenderState = renderStates.get( scene, _currentArrayCamera || camera );\n\n\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\tif ( object.isImmediateRenderObject ) {\n\n\t\t\tconst program = setProgram( camera, scene, material, object );\n\n\t\t\tstate.setMaterial( material );\n\n\t\t\tbindingStates.reset();\n\n\t\t\trenderObjectImmediate( object, program );\n\n\t\t} else {\n\n\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t}\n\n\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\t\tcurrentRenderState = renderStates.get( scene, _currentArrayCamera || camera );\n\n\t}\n\n\tfunction initMaterial( material, scene, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tconst lights = currentRenderState.state.lights;\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tconst lightsStateVersion = lights.state.version;\n\n\t\tconst parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );\n\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n\t\tlet program = materialProperties.program;\n\t\tlet programChange = true;\n\n\t\tif ( program === undefined ) {\n\n\t\t\t// new material\n\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t} else if ( program.cacheKey !== programCacheKey ) {\n\n\t\t\t// changed glsl or parameters\n\t\t\treleaseMaterialProgramReference( material );\n\n\t\t} else if ( materialProperties.lightsStateVersion !== lightsStateVersion ) {\n\n\t\t\tprogramChange = false;\n\n\t\t} else if ( parameters.shaderID !== undefined ) {\n\n\t\t\t// same glsl and uniform list, envMap still needs the update here to avoid a frame-late effect\n\n\t\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\tmaterialProperties.envMap = cubemaps.get( material.envMap || environment );\n\n\t\t\treturn;\n\n\t\t} else {\n\n\t\t\t// only rebuild uniform list\n\t\t\tprogramChange = false;\n\n\t\t}\n\n\t\tif ( programChange ) {\n\n\t\t\tparameters.uniforms = programCache.getUniforms( material );\n\n\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\n\t\t\tmaterialProperties.program = program;\n\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\t\t\tmaterialProperties.outputEncoding = parameters.outputEncoding;\n\n\t\t}\n\n\t\tconst uniforms = materialProperties.uniforms;\n\n\t\tif ( ! material.isShaderMaterial &&\n\t\t\t! material.isRawShaderMaterial ||\n\t\t\tmaterial.clipping === true ) {\n\n\t\t\tmaterialProperties.numClippingPlanes = clipping.numPlanes;\n\t\t\tmaterialProperties.numIntersection = clipping.numIntersection;\n\t\t\tuniforms.clippingPlanes = clipping.uniform;\n\n\t\t}\n\n\t\tmaterialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tmaterialProperties.fog = scene.fog;\n\t\tmaterialProperties.envMap = cubemaps.get( material.envMap || materialProperties.environment );\n\n\t\t// store the light setup it was created for\n\n\t\tmaterialProperties.needsLights = materialNeedsLights( material );\n\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\tuniforms.lightProbe.value = lights.state.probe;\n\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\tuniforms.directionalLightShadows.value = lights.state.directionalShadow;\n\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\tuniforms.spotLightShadows.value = lights.state.spotShadow;\n\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\tuniforms.ltc_1.value = lights.state.rectAreaLTC1;\n\t\t\tuniforms.ltc_2.value = lights.state.rectAreaLTC2;\n\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\tuniforms.pointLightShadows.value = lights.state.pointShadow;\n\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\tuniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix;\n\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t}\n\n\t\tconst progUniforms = materialProperties.program.getUniforms();\n\t\tconst uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n\t\tmaterialProperties.uniformsList = uniformsList;\n\n\t}\n\n\tfunction setProgram( camera, scene, material, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\ttextures.resetTextureUnits();\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tconst encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : _currentRenderTarget.texture.encoding;\n\t\tconst envMap = cubemaps.get( material.envMap || environment );\n\n\t\tconst materialProperties = properties.get( material );\n\t\tconst lights = currentRenderState.state.lights;\n\n\t\tif ( _clippingEnabled === true ) {\n\n\t\t\tif ( _localClippingEnabled === true || camera !== _currentCamera ) {\n\n\t\t\t\tconst useCache =\n\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t// (#8465, #8379)\n\t\t\t\tclipping.setState( material, camera, useCache );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.version === materialProperties.__version ) {\n\n\t\t\tif ( material.fog && materialProperties.fog !== fog ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( materialProperties.environment !== environment ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t( materialProperties.numClippingPlanes !== clipping.numPlanes ||\n\t\t\t\tmaterialProperties.numIntersection !== clipping.numIntersection ) ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( materialProperties.outputEncoding !== encoding ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( materialProperties.envMap !== envMap ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tinitMaterial( material, scene, object );\n\t\t\tmaterialProperties.__version = material.version;\n\n\t\t}\n\n\t\tlet refreshProgram = false;\n\t\tlet refreshMaterial = false;\n\t\tlet refreshLights = false;\n\n\t\tconst program = materialProperties.program,\n\t\t\tp_uniforms = program.getUniforms(),\n\t\t\tm_uniforms = materialProperties.uniforms;\n\n\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\trefreshProgram = true;\n\t\t\trefreshMaterial = true;\n\t\t\trefreshLights = true;\n\n\t\t}\n\n\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t_currentMaterialId = material.id;\n\n\t\t\trefreshMaterial = true;\n\n\t\t}\n\n\t\tif ( refreshProgram || _currentCamera !== camera ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t}\n\n\t\t\tif ( _currentCamera !== camera ) {\n\n\t\t\t\t_currentCamera = camera;\n\n\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t}\n\n\t\t\t// load material specific uniforms\n\t\t\t// (shader material also gets them for the sake of genericity)\n\n\t\t\tif ( material.isShaderMaterial ||\n\t\t\t\tmaterial.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.envMap ) {\n\n\t\t\t\tconst uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl,\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ||\n\t\t\t\tmaterial.isShadowMaterial ||\n\t\t\t\tmaterial.skinning ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// skinning uniforms must be set even if material didn't change\n\t\t// auto-setting of texture unit for bone texture must go before other textures\n\t\t// otherwise textures used for skinning can take over texture units reserved for other material textures\n\n\t\tif ( material.skinning ) {\n\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\tconst skeleton = object.skeleton;\n\n\t\t\tif ( skeleton ) {\n\n\t\t\t\tconst bones = skeleton.bones;\n\n\t\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === null ) {\n\n\t\t\t\t\t\t// layout (1 matrix = 4 pixels)\n\t\t\t\t\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t\t\t\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\n\t\t\t\t\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\n\t\t\t\t\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\n\t\t\t\t\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\n\t\t\t\t\t\tlet size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\t\t\t\t\tsize = MathUtils.ceilPowerOfTwo( size );\n\t\t\t\t\t\tsize = Math.max( size, 4 );\n\n\t\t\t\t\t\tconst boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\t\t\t\t\tboneMatrices.set( skeleton.boneMatrices ); // copy current values\n\n\t\t\t\t\t\tconst boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\n\t\t\t\t\t\tskeleton.boneMatrices = boneMatrices;\n\t\t\t\t\t\tskeleton.boneTexture = boneTexture;\n\t\t\t\t\t\tskeleton.boneTextureSize = size;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tp_uniforms.setOptional( _gl, skeleton, 'boneMatrices' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {\n\n\t\t\tmaterialProperties.receiveShadow = object.receiveShadow;\n\t\t\tp_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );\n\n\t\t}\n\n\t\tif ( refreshMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\n\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t// values\n\t\t\t\t//\n\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t// the GL state when required\n\n\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t}\n\n\t\t\t// refresh uniforms common to several materials\n\n\t\t\tif ( fog && material.fog ) {\n\n\t\t\t\tmaterials.refreshFogUniforms( m_uniforms, fog );\n\n\t\t\t}\n\n\t\t\tmaterials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height );\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\n\t\t}\n\n\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\n\n\t\t}\n\n\t\t// common matrices\n\n\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\treturn program;\n\n\t}\n\n\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\tuniforms.ambientLightColor.needsUpdate = value;\n\t\tuniforms.lightProbe.needsUpdate = value;\n\n\t\tuniforms.directionalLights.needsUpdate = value;\n\t\tuniforms.directionalLightShadows.needsUpdate = value;\n\t\tuniforms.pointLights.needsUpdate = value;\n\t\tuniforms.pointLightShadows.needsUpdate = value;\n\t\tuniforms.spotLights.needsUpdate = value;\n\t\tuniforms.spotLightShadows.needsUpdate = value;\n\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t}\n\n\tfunction materialNeedsLights( material ) {\n\n\t\treturn material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||\n\t\t\tmaterial.isMeshStandardMaterial || material.isShadowMaterial ||\n\t\t\t( material.isShaderMaterial && material.lights === true );\n\n\t}\n\n\t//\n\tthis.setFramebuffer = function ( value ) {\n\n\t\tif ( _framebuffer !== value && _currentRenderTarget === null ) _gl.bindFramebuffer( 36160, value );\n\n\t\t_framebuffer = value;\n\n\t};\n\n\tthis.getActiveCubeFace = function () {\n\n\t\treturn _currentActiveCubeFace;\n\n\t};\n\n\tthis.getActiveMipmapLevel = function () {\n\n\t\treturn _currentActiveMipmapLevel;\n\n\t};\n\n\tthis.getRenderList = function () {\n\n\t\treturn currentRenderList;\n\n\t};\n\n\tthis.setRenderList = function ( renderList ) {\n\n\t\tcurrentRenderList = renderList;\n\n\t};\n\n\tthis.getRenderState = function () {\n\n\t\treturn currentRenderState;\n\n\t};\n\n\tthis.setRenderState = function ( renderState ) {\n\n\t\tcurrentRenderState = renderState;\n\n\t};\n\n\tthis.getRenderTarget = function () {\n\n\t\treturn _currentRenderTarget;\n\n\t};\n\n\tthis.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {\n\n\t\t_currentRenderTarget = renderTarget;\n\t\t_currentActiveCubeFace = activeCubeFace;\n\t\t_currentActiveMipmapLevel = activeMipmapLevel;\n\n\t\tif ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {\n\n\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t}\n\n\t\tlet framebuffer = _framebuffer;\n\t\tlet isCube = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tconst __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ];\n\t\t\t\tisCube = true;\n\n\t\t\t} else if ( renderTarget.isWebGLMultisampleRenderTarget ) {\n\n\t\t\t\tframebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;\n\n\t\t\t} else {\n\n\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t}\n\n\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t} else {\n\n\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t}\n\n\t\tif ( _currentFramebuffer !== framebuffer ) {\n\n\t\t\t_gl.bindFramebuffer( 36160, framebuffer );\n\t\t\t_currentFramebuffer = framebuffer;\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport );\n\t\tstate.scissor( _currentScissor );\n\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\tif ( isCube ) {\n\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t_gl.framebufferTexture2D( 36160, 36064, 34069 + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t}\n\n\t};\n\n\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t}\n\n\t\tif ( framebuffer ) {\n\n\t\t\tlet restore = false;\n\n\t\t\tif ( framebuffer !== _currentFramebuffer ) {\n\n\t\t\t\t_gl.bindFramebuffer( 36160, framebuffer );\n\n\t\t\t\trestore = true;\n\n\t\t\t}\n\n\t\t\ttry {\n\n\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( 35739 ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( 35738 ) && // IE11, Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t! ( textureType === HalfFloatType && ( capabilities.isWebGL2 ? extensions.get( 'EXT_color_buffer_float' ) : extensions.get( 'EXT_color_buffer_half_float' ) ) ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _gl.checkFramebufferStatus( 36160 ) === 36053 ) {\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' );\n\n\t\t\t\t}\n\n\t\t\t} finally {\n\n\t\t\t\tif ( restore ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( 36160, _currentFramebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.copyFramebufferToTexture = function ( position, texture, level = 0 ) {\n\n\t\tconst levelScale = Math.pow( 2, - level );\n\t\tconst width = Math.floor( texture.image.width * levelScale );\n\t\tconst height = Math.floor( texture.image.height * levelScale );\n\t\tconst glFormat = utils.convert( texture.format );\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t_gl.copyTexImage2D( 3553, level, glFormat, position.x, position.y, width, height, 0 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) {\n\n\t\tconst width = srcTexture.image.width;\n\t\tconst height = srcTexture.image.height;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n\n\t\ttextures.setTexture2D( dstTexture, 0 );\n\n\t\t// As another texture upload may have changed pixelStorei\n\t\t// parameters, make sure they are correct for the dstTexture\n\t\t_gl.pixelStorei( 37440, dstTexture.flipY );\n\t\t_gl.pixelStorei( 37441, dstTexture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, dstTexture.unpackAlignment );\n\n\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data );\n\n\t\t} else {\n\n\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t_gl.compressedTexSubImage2D( 3553, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, glFormat, glType, srcTexture.image );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( 3553 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.initTexture = function ( texture ) {\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t}\n\n}\n\nfunction WebGL1Renderer( parameters ) {\n\n\tWebGLRenderer.call( this, parameters );\n\n}\n\nWebGL1Renderer.prototype = Object.assign( Object.create( WebGLRenderer.prototype ), {\n\n\tconstructor: WebGL1Renderer,\n\n\tisWebGL1Renderer: true\n\n} );\n\nclass FogExp2 {\n\n\tconstructor( color, density ) {\n\n\t\tObject.defineProperty( this, 'isFogExp2', { value: true } );\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\t\tthis.density = ( density !== undefined ) ? density : 0.00025;\n\n\t}\n\n\tclone() {\n\n\t\treturn new FogExp2( this.color, this.density );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'FogExp2',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tdensity: this.density\n\t\t};\n\n\t}\n\n}\n\nclass Fog {\n\n\tconstructor( color, near, far ) {\n\n\t\tObject.defineProperty( this, 'isFog', { value: true } );\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\n\t\tthis.near = ( near !== undefined ) ? near : 1;\n\t\tthis.far = ( far !== undefined ) ? far : 1000;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Fog( this.color, this.near, this.far );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'Fog',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tnear: this.near,\n\t\t\tfar: this.far\n\t\t};\n\n\t}\n\n}\n\nclass Scene extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'isScene', { value: true } );\n\n\t\tthis.type = 'Scene';\n\n\t\tthis.background = null;\n\t\tthis.environment = null;\n\t\tthis.fog = null;\n\n\t\tthis.overrideMaterial = null;\n\n\t\tthis.autoUpdate = true; // checked by the renderer\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.environment !== null ) this.environment = source.environment.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.background !== null ) data.object.background = this.background.toJSON( meta );\n\t\tif ( this.environment !== null ) data.object.environment = this.environment.toJSON( meta );\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\nfunction InterleavedBuffer( array, stride ) {\n\n\tthis.array = array;\n\tthis.stride = stride;\n\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\tthis.usage = StaticDrawUsage;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n\tthis.uuid = MathUtils.generateUUID();\n\n}\n\nObject.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( InterleavedBuffer.prototype, {\n\n\tisInterleavedBuffer: true,\n\n\tonUploadCallback: function () {},\n\n\tsetUsage: function ( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t},\n\n\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( let i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tset: function ( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function ( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = MathUtils.generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t}\n\n\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\tconst ib = new InterleavedBuffer( array, this.stride );\n\t\tib.setUsage( this.usage );\n\n\t\treturn ib;\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\t// generate UUID for array buffer if necessary\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = MathUtils.generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.prototype.slice.call( new Uint32Array( this.array.buffer ) );\n\n\t\t}\n\n\t\t//\n\n\t\treturn {\n\t\t\tuuid: this.uuid,\n\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tstride: this.stride\n\t\t};\n\n\t}\n\n} );\n\nconst _vector$6 = new Vector3();\n\nfunction InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) {\n\n\tthis.name = '';\n\n\tthis.data = interleavedBuffer;\n\tthis.itemSize = itemSize;\n\tthis.offset = offset;\n\n\tthis.normalized = normalized === true;\n\n}\n\nObject.defineProperties( InterleavedBufferAttribute.prototype, {\n\n\tcount: {\n\n\t\tget: function () {\n\n\t\t\treturn this.data.count;\n\n\t\t}\n\n\t},\n\n\tarray: {\n\n\t\tget: function () {\n\n\t\t\treturn this.data.array;\n\n\t\t}\n\n\t},\n\n\tneedsUpdate: {\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.data.needsUpdate = value;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( InterleavedBufferAttribute.prototype, {\n\n\tisInterleavedBufferAttribute: true,\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.x = this.getX( i );\n\t\t\t_vector$6.y = this.getY( i );\n\t\t\t_vector$6.z = this.getZ( i );\n\n\t\t\t_vector$6.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( index, x ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( index, y ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( index, z ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetW: function ( index, w ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tgetX: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset ];\n\n\t},\n\n\tgetY: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t},\n\n\tgetZ: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t},\n\n\tgetW: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t},\n\n\tsetXY: function ( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZ: function ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function ( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t} else {\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t}\n\n\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// deinterleave data and save it as an ordinary buffer attribute for now\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t} else {\n\n\t\t\t// save as true interlaved attribtue\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\tdata: this.data.uuid,\n\t\t\t\toffset: this.offset,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * parameters = {\n * color: ,\n * map: new THREE.Texture( ),\n * alphaMap: new THREE.Texture( ),\n * rotation: ,\n * sizeAttenuation: \n * }\n */\n\nfunction SpriteMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'SpriteMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.rotation = 0;\n\n\tthis.sizeAttenuation = true;\n\n\tthis.transparent = true;\n\n\tthis.setValues( parameters );\n\n}\n\nSpriteMaterial.prototype = Object.create( Material.prototype );\nSpriteMaterial.prototype.constructor = SpriteMaterial;\nSpriteMaterial.prototype.isSpriteMaterial = true;\n\nSpriteMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.rotation = source.rotation;\n\n\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\treturn this;\n\n};\n\nlet _geometry;\n\nconst _intersectPoint = new Vector3();\nconst _worldScale = new Vector3();\nconst _mvPosition = new Vector3();\n\nconst _alignedPosition = new Vector2();\nconst _rotatedPosition = new Vector2();\nconst _viewWorldMatrix = new Matrix4();\n\nconst _vA$1 = new Vector3();\nconst _vB$1 = new Vector3();\nconst _vC$1 = new Vector3();\n\nconst _uvA$1 = new Vector2();\nconst _uvB$1 = new Vector2();\nconst _uvC$1 = new Vector2();\n\nfunction Sprite( material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Sprite';\n\n\tif ( _geometry === undefined ) {\n\n\t\t_geometry = new BufferGeometry();\n\n\t\tconst float32Array = new Float32Array( [\n\t\t\t- 0.5, - 0.5, 0, 0, 0,\n\t\t\t0.5, - 0.5, 0, 1, 0,\n\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t- 0.5, 0.5, 0, 0, 1\n\t\t] );\n\n\t\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\t\t_geometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\t_geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\t_geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t}\n\n\tthis.geometry = _geometry;\n\tthis.material = ( material !== undefined ) ? material : new SpriteMaterial();\n\n\tthis.center = new Vector2( 0.5, 0.5 );\n\n}\n\nSprite.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Sprite,\n\n\tisSprite: true,\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tif ( raycaster.camera === null ) {\n\n\t\t\tconsole.error( 'THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.' );\n\n\t\t}\n\n\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\n\t\t_viewWorldMatrix.copy( raycaster.camera.matrixWorld );\n\t\tthis.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld );\n\n\t\t_mvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\tif ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) {\n\n\t\t\t_worldScale.multiplyScalar( - _mvPosition.z );\n\n\t\t}\n\n\t\tconst rotation = this.material.rotation;\n\t\tlet sin, cos;\n\n\t\tif ( rotation !== 0 ) {\n\n\t\t\tcos = Math.cos( rotation );\n\t\t\tsin = Math.sin( rotation );\n\n\t\t}\n\n\t\tconst center = this.center;\n\n\t\ttransformVertex( _vA$1.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vB$1.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vC$1.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\n\t\t_uvA$1.set( 0, 0 );\n\t\t_uvB$1.set( 1, 0 );\n\t\t_uvC$1.set( 1, 1 );\n\n\t\t// check first triangle\n\t\tlet intersect = raycaster.ray.intersectTriangle( _vA$1, _vB$1, _vC$1, false, _intersectPoint );\n\n\t\tif ( intersect === null ) {\n\n\t\t\t// check second triangle\n\t\t\ttransformVertex( _vB$1.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\t_uvB$1.set( 0, 1 );\n\n\t\t\tintersect = raycaster.ray.intersectTriangle( _vA$1, _vC$1, _vB$1, false, _intersectPoint );\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( _intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tpoint: _intersectPoint.clone(),\n\t\t\tuv: Triangle.getUV( _intersectPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() ),\n\t\t\tface: null,\n\t\t\tobject: this\n\n\t\t} );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\tthis.material = source.material;\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t// compute position in camera space\n\t_alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t// to check if rotation is not zero\n\tif ( sin !== undefined ) {\n\n\t\t_rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y );\n\t\t_rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y );\n\n\t} else {\n\n\t\t_rotatedPosition.copy( _alignedPosition );\n\n\t}\n\n\n\tvertexPosition.copy( mvPosition );\n\tvertexPosition.x += _rotatedPosition.x;\n\tvertexPosition.y += _rotatedPosition.y;\n\n\t// transform to world space\n\tvertexPosition.applyMatrix4( _viewWorldMatrix );\n\n}\n\nconst _v1$4 = new Vector3();\nconst _v2$2 = new Vector3();\n\nfunction LOD() {\n\n\tObject3D.call( this );\n\n\tthis._currentLevel = 0;\n\n\tthis.type = 'LOD';\n\n\tObject.defineProperties( this, {\n\t\tlevels: {\n\t\t\tenumerable: true,\n\t\t\tvalue: []\n\t\t}\n\t} );\n\n\tthis.autoUpdate = true;\n\n}\n\nLOD.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: LOD,\n\n\tisLOD: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source, false );\n\n\t\tconst levels = source.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance );\n\n\t\t}\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\n\t\treturn this;\n\n\t},\n\n\taddLevel: function ( object, distance = 0 ) {\n\n\t\tdistance = Math.abs( distance );\n\n\t\tconst levels = this.levels;\n\n\t\tlet l;\n\n\t\tfor ( l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, object: object } );\n\n\t\tthis.add( object );\n\n\t\treturn this;\n\n\t},\n\n\tgetCurrentLevel: function () {\n\n\t\treturn this._currentLevel;\n\n\t},\n\n\tgetObjectForDistance: function ( distance ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance < levels[ i ].distance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn levels[ i - 1 ].object;\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\t_v1$4.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( _v1$4 );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t}\n\n\t},\n\n\tupdate: function ( camera ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 1 ) {\n\n\t\t\t_v1$4.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t_v2$2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = _v1$4.distanceTo( _v2$2 ) / camera.zoom;\n\n\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance >= levels[ i ].distance ) {\n\n\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._currentLevel = i - 1;\n\n\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tif ( this.autoUpdate === false ) data.object.autoUpdate = false;\n\n\t\tdata.object.levels = [];\n\n\t\tconst levels = this.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction SkinnedMesh( geometry, material ) {\n\n\tif ( geometry && geometry.isGeometry ) {\n\n\t\tconsole.error( 'THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t}\n\n\tMesh.call( this, geometry, material );\n\n\tthis.type = 'SkinnedMesh';\n\n\tthis.bindMode = 'attached';\n\tthis.bindMatrix = new Matrix4();\n\tthis.bindMatrixInverse = new Matrix4();\n\n}\n\nSkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\tconstructor: SkinnedMesh,\n\n\tisSkinnedMesh: true,\n\n\tcopy: function ( source ) {\n\n\t\tMesh.prototype.copy.call( this, source );\n\n\t\tthis.bindMode = source.bindMode;\n\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\tthis.skeleton = source.skeleton;\n\n\t\treturn this;\n\n\t},\n\n\tbind: function ( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.copy( bindMatrix ).invert();\n\n\t},\n\n\tpose: function () {\n\n\t\tthis.skeleton.pose();\n\n\t},\n\n\tnormalizeSkinWeights: function () {\n\n\t\tconst vector = new Vector4();\n\n\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\tvector.x = skinWeight.getX( i );\n\t\t\tvector.y = skinWeight.getY( i );\n\t\t\tvector.z = skinWeight.getZ( i );\n\t\t\tvector.w = skinWeight.getW( i );\n\n\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t}\n\n\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\n\n\t\t}\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tMesh.prototype.updateMatrixWorld.call( this, force );\n\n\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t},\n\n\tboneTransform: ( function () {\n\n\t\tconst basePosition = new Vector3();\n\n\t\tconst skinIndex = new Vector4();\n\t\tconst skinWeight = new Vector4();\n\n\t\tconst vector = new Vector3();\n\t\tconst matrix = new Matrix4();\n\n\t\treturn function ( index, target ) {\n\n\t\t\tconst skeleton = this.skeleton;\n\t\t\tconst geometry = this.geometry;\n\n\t\t\tskinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t\tskinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t\tbasePosition.fromBufferAttribute( geometry.attributes.position, index ).applyMatrix4( this.bindMatrix );\n\n\t\t\ttarget.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\t\tconst weight = skinWeight.getComponent( i );\n\n\t\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\t\tconst boneIndex = skinIndex.getComponent( i );\n\n\t\t\t\t\tmatrix.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\t\ttarget.addScaledVector( vector.copy( basePosition ).applyMatrix4( matrix ), weight );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn target.applyMatrix4( this.bindMatrixInverse );\n\n\t\t};\n\n\t}() )\n\n} );\n\nfunction Bone() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Bone';\n\n}\n\nBone.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Bone,\n\n\tisBone: true\n\n} );\n\nconst _offsetMatrix = new Matrix4();\nconst _identityMatrix = new Matrix4();\n\nfunction Skeleton( bones = [], boneInverses = [] ) {\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.bones = bones.slice( 0 );\n\tthis.boneInverses = boneInverses;\n\tthis.boneMatrices = null;\n\n\tthis.boneTexture = null;\n\tthis.boneTextureSize = 0;\n\n\tthis.frame = - 1;\n\n\tthis.init();\n\n}\n\nObject.assign( Skeleton.prototype, {\n\n\tinit: function () {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t// calculate inverse bone matrices if necessary\n\n\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\t// handle special case\n\n\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tcalculateInverses: function () {\n\n\t\tthis.boneInverses.length = 0;\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t},\n\n\tpose: function () {\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.copy( this.boneInverses[ i ] ).invert();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdate: function () {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\t\tconst boneMatrices = this.boneMatrices;\n\t\tconst boneTexture = this.boneTexture;\n\n\t\t// flatten bone matrices to array\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t// compute the offset between the current and the original transform\n\n\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix;\n\n\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( boneTexture !== null ) {\n\n\t\t\tboneTexture.needsUpdate = true;\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t},\n\n\tgetBoneByName: function ( name ) {\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t},\n\n\tdispose: function ( ) {\n\n\t\tif ( this.boneTexture !== null ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = null;\n\n\t\t}\n\n\t},\n\n\tfromJSON: function ( json, bones ) {\n\n\t\tthis.uuid = json.uuid;\n\n\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\tconst uuid = json.bones[ i ];\n\t\t\tlet bone = bones[ uuid ];\n\n\t\t\tif ( bone === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );\n\t\t\t\tbone = new Bone();\n\n\t\t\t}\n\n\t\t\tthis.bones.push( bone );\n\t\t\tthis.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t}\n\n\t\tthis.init();\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Skeleton',\n\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t},\n\t\t\tbones: [],\n\t\t\tboneInverses: []\n\t\t};\n\n\t\tdata.uuid = this.uuid;\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n} );\n\nconst _instanceLocalMatrix = new Matrix4();\nconst _instanceWorldMatrix = new Matrix4();\n\nconst _instanceIntersects = [];\n\nconst _mesh = new Mesh();\n\nfunction InstancedMesh( geometry, material, count ) {\n\n\tMesh.call( this, geometry, material );\n\n\tthis.instanceMatrix = new BufferAttribute( new Float32Array( count * 16 ), 16 );\n\tthis.instanceColor = null;\n\n\tthis.count = count;\n\n\tthis.frustumCulled = false;\n\n}\n\nInstancedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\tconstructor: InstancedMesh,\n\n\tisInstancedMesh: true,\n\n\tcopy: function ( source ) {\n\n\t\tMesh.prototype.copy.call( this, source );\n\n\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\t\tthis.count = source.count;\n\n\t\treturn this;\n\n\t},\n\n\tgetColorAt: function ( index, color ) {\n\n\t\tcolor.fromArray( this.instanceColor.array, index * 3 );\n\n\t},\n\n\tgetMatrixAt: function ( index, matrix ) {\n\n\t\tmatrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst raycastTimes = this.count;\n\n\t\t_mesh.geometry = this.geometry;\n\t\t_mesh.material = this.material;\n\n\t\tif ( _mesh.material === undefined ) return;\n\n\t\tfor ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {\n\n\t\t\t// calculate the world matrix for each instance\n\n\t\t\tthis.getMatrixAt( instanceId, _instanceLocalMatrix );\n\n\t\t\t_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );\n\n\t\t\t// the mesh represents this single instance\n\n\t\t\t_mesh.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t_mesh.raycast( raycaster, _instanceIntersects );\n\n\t\t\t// process the result of raycast\n\n\t\t\tfor ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {\n\n\t\t\t\tconst intersect = _instanceIntersects[ i ];\n\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_instanceIntersects.length = 0;\n\n\t\t}\n\n\t},\n\n\tsetColorAt: function ( index, color ) {\n\n\t\tif ( this.instanceColor === null ) {\n\n\t\t\tthis.instanceColor = new BufferAttribute( new Float32Array( this.count * 3 ), 3 );\n\n\t\t}\n\n\t\tcolor.toArray( this.instanceColor.array, index * 3 );\n\n\t},\n\n\tsetMatrixAt: function ( index, matrix ) {\n\n\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t}\n\n} );\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * linewidth: ,\n * linecap: \"round\",\n * linejoin: \"round\"\n * }\n */\n\nfunction LineBasicMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'LineBasicMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.linewidth = 1;\n\tthis.linecap = 'round';\n\tthis.linejoin = 'round';\n\n\tthis.morphTargets = false;\n\n\tthis.setValues( parameters );\n\n}\n\nLineBasicMaterial.prototype = Object.create( Material.prototype );\nLineBasicMaterial.prototype.constructor = LineBasicMaterial;\n\nLineBasicMaterial.prototype.isLineBasicMaterial = true;\n\nLineBasicMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.linewidth = source.linewidth;\n\tthis.linecap = source.linecap;\n\tthis.linejoin = source.linejoin;\n\n\tthis.morphTargets = source.morphTargets;\n\n\treturn this;\n\n};\n\nconst _start = new Vector3();\nconst _end = new Vector3();\nconst _inverseMatrix$1 = new Matrix4();\nconst _ray$1 = new Ray();\nconst _sphere$2 = new Sphere();\n\nfunction Line( geometry, material, mode ) {\n\n\tif ( mode === 1 ) {\n\n\t\tconsole.error( 'THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead.' );\n\n\t}\n\n\tObject3D.call( this );\n\n\tthis.type = 'Line';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new LineBasicMaterial();\n\n\tthis.updateMorphTargets();\n\n}\n\nLine.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Line,\n\n\tisLine: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t},\n\n\tcomputeLineDistances: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconst vertices = geometry.vertices;\n\t\t\tconst lineDistances = geometry.lineDistances;\n\n\t\t\tlineDistances[ 0 ] = 0;\n\n\t\t\tfor ( let i = 1, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i ] += vertices[ i - 1 ].distanceTo( vertices[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$2.copy( geometry.boundingSphere );\n\t\t_sphere$2.applyMatrix4( matrixWorld );\n\t\t_sphere$2.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$2 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$1.copy( matrixWorld ).invert();\n\t\t_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst vStart = new Vector3();\n\t\tconst vEnd = new Vector3();\n\t\tconst interSegment = new Vector3();\n\t\tconst interRay = new Vector3();\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst indices = index.array;\n\n\t\t\t\tfor ( let i = 0, l = indices.length - 1; i < l; i += step ) {\n\n\t\t\t\t\tconst a = indices[ i ];\n\t\t\t\t\tconst b = indices[ i + 1 ];\n\n\t\t\t\t\tvStart.fromBufferAttribute( positionAttribute, a );\n\t\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, b );\n\n\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count - 1; i < l; i += step ) {\n\n\t\t\t\t\tvStart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconst vertices = geometry.vertices;\n\t\t\tconst nbVertices = vertices.length;\n\n\t\t\tfor ( let i = 0; i < nbVertices - 1; i += step ) {\n\n\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );\n\n\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\tintersects.push( {\n\n\t\t\t\t\tdistance: distance,\n\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\tindex: i,\n\t\t\t\t\tface: null,\n\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\tobject: this\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nconst _start$1 = new Vector3();\nconst _end$1 = new Vector3();\n\nfunction LineSegments( geometry, material ) {\n\n\tLine.call( this, geometry, material );\n\n\tthis.type = 'LineSegments';\n\n}\n\nLineSegments.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\tconstructor: LineSegments,\n\n\tisLineSegments: true,\n\n\tcomputeLineDistances: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [];\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t_start$1.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t_end$1.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start$1.distanceTo( _end$1 );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconst vertices = geometry.vertices;\n\t\t\tconst lineDistances = geometry.lineDistances;\n\n\t\t\tfor ( let i = 0, l = vertices.length; i < l; i += 2 ) {\n\n\t\t\t\t_start$1.copy( vertices[ i ] );\n\t\t\t\t_end$1.copy( vertices[ i + 1 ] );\n\n\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start$1.distanceTo( _end$1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction LineLoop( geometry, material ) {\n\n\tLine.call( this, geometry, material );\n\n\tthis.type = 'LineLoop';\n\n}\n\nLineLoop.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\tconstructor: LineLoop,\n\n\tisLineLoop: true,\n\n} );\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n * alphaMap: new THREE.Texture( ),\n *\n * size: ,\n * sizeAttenuation: \n *\n * morphTargets: \n * }\n */\n\nfunction PointsMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'PointsMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.size = 1;\n\tthis.sizeAttenuation = true;\n\n\tthis.morphTargets = false;\n\n\tthis.setValues( parameters );\n\n}\n\nPointsMaterial.prototype = Object.create( Material.prototype );\nPointsMaterial.prototype.constructor = PointsMaterial;\n\nPointsMaterial.prototype.isPointsMaterial = true;\n\nPointsMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.size = source.size;\n\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\tthis.morphTargets = source.morphTargets;\n\n\treturn this;\n\n};\n\nconst _inverseMatrix$2 = new Matrix4();\nconst _ray$2 = new Ray();\nconst _sphere$3 = new Sphere();\nconst _position$1 = new Vector3();\n\nfunction Points( geometry, material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Points';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new PointsMaterial();\n\n\tthis.updateMorphTargets();\n\n}\n\nPoints.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Points,\n\n\tisPoints: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$3.copy( geometry.boundingSphere );\n\t\t_sphere$3.applyMatrix4( matrixWorld );\n\t\t_sphere$3.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$2.copy( matrixWorld ).invert();\n\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst indices = index.array;\n\n\t\t\t\tfor ( let i = 0, il = indices.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst a = indices[ i ];\n\n\t\t\t\t\t_position$1.fromBufferAttribute( positionAttribute, a );\n\n\t\t\t\t\ttestPoint( _position$1, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t_position$1.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\ttestPoint( _position$1, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst vertices = geometry.vertices;\n\n\t\t\tfor ( let i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\ttestPoint( vertices[ i ], i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray$2.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray$2.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nfunction VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\tTexture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.format = format !== undefined ? format : RGBFormat;\n\n\tthis.minFilter = minFilter !== undefined ? minFilter : LinearFilter;\n\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\n\tthis.generateMipmaps = false;\n\n\tconst scope = this;\n\n\tfunction updateVideo() {\n\n\t\tscope.needsUpdate = true;\n\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t}\n\n\tif ( 'requestVideoFrameCallback' in video ) {\n\n\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t}\n\n}\n\nVideoTexture.prototype = Object.assign( Object.create( Texture.prototype ), {\n\n\tconstructor: VideoTexture,\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.image ).copy( this );\n\n\t},\n\n\tisVideoTexture: true,\n\n\tupdate: function () {\n\n\t\tconst video = this.image;\n\t\tconst hasVideoFrameCallback = 'requestVideoFrameCallback' in video;\n\n\t\tif ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n} );\n\nfunction CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.image = { width: width, height: height };\n\tthis.mipmaps = mipmaps;\n\n\t// no flipping for cube textures\n\t// (also flipping doesn't work for compressed textures )\n\n\tthis.flipY = false;\n\n\t// can't generate mipmaps for compressed textures\n\t// mips must be embedded in DDS files\n\n\tthis.generateMipmaps = false;\n\n}\n\nCompressedTexture.prototype = Object.create( Texture.prototype );\nCompressedTexture.prototype.constructor = CompressedTexture;\n\nCompressedTexture.prototype.isCompressedTexture = true;\n\nfunction CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\tTexture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.needsUpdate = true;\n\n}\n\nCanvasTexture.prototype = Object.create( Texture.prototype );\nCanvasTexture.prototype.constructor = CanvasTexture;\nCanvasTexture.prototype.isCanvasTexture = true;\n\nfunction DepthTexture( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {\n\n\tformat = format !== undefined ? format : DepthFormat;\n\n\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t}\n\n\tif ( type === undefined && format === DepthFormat ) type = UnsignedShortType;\n\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.image = { width: width, height: height };\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\tthis.flipY = false;\n\tthis.generateMipmaps = false;\n\n}\n\nDepthTexture.prototype = Object.create( Texture.prototype );\nDepthTexture.prototype.constructor = DepthTexture;\nDepthTexture.prototype.isDepthTexture = true;\n\nlet _geometryId = 0; // Geometry uses even numbers as Id\nconst _m1$3 = new Matrix4();\nconst _obj$1 = new Object3D();\nconst _offset$1 = new Vector3();\n\nfunction Geometry() {\n\n\tObject.defineProperty( this, 'id', { value: _geometryId += 2 } );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Geometry';\n\n\tthis.vertices = [];\n\tthis.colors = [];\n\tthis.faces = [];\n\tthis.faceVertexUvs = [[]];\n\n\tthis.morphTargets = [];\n\tthis.morphNormals = [];\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\tthis.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.elementsNeedUpdate = false;\n\tthis.verticesNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.lineDistancesNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\n}\n\nGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Geometry,\n\n\tisGeometry: true,\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tvertex.applyMatrix4( matrix );\n\n\t\t}\n\n\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tfor ( let j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.verticesNeedUpdate = true;\n\t\tthis.normalsNeedUpdate = true;\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function ( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1$3.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\trotateY: function ( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1$3.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\trotateZ: function ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1$3.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1$3.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1$3.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\tlookAt: function ( vector ) {\n\n\t\t_obj$1.lookAt( vector );\n\n\t\t_obj$1.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj$1.matrix );\n\n\t\treturn this;\n\n\t},\n\n\tfromBufferGeometry: function ( geometry ) {\n\n\t\tconst scope = this;\n\n\t\tconst index = geometry.index !== null ? geometry.index : undefined;\n\t\tconst attributes = geometry.attributes;\n\n\t\tif ( attributes.position === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst position = attributes.position;\n\t\tconst normal = attributes.normal;\n\t\tconst color = attributes.color;\n\t\tconst uv = attributes.uv;\n\t\tconst uv2 = attributes.uv2;\n\n\t\tif ( uv2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\n\n\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\tscope.vertices.push( new Vector3().fromBufferAttribute( position, i ) );\n\n\t\t\tif ( color !== undefined ) {\n\n\t\t\t\tscope.colors.push( new Color().fromBufferAttribute( color, i ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\tconst vertexColors = ( color === undefined ) ? [] : [\n\t\t\t\tscope.colors[ a ].clone(),\n\t\t\t\tscope.colors[ b ].clone(),\n\t\t\t\tscope.colors[ c ].clone()\n\t\t\t];\n\n\t\t\tconst vertexNormals = ( normal === undefined ) ? [] : [\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, a ),\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, b ),\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, c )\n\t\t\t];\n\n\t\t\tconst face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\n\n\t\t\tscope.faces.push( face );\n\n\t\t\tif ( uv !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 0 ].push( [\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, a ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, b ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, c )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t\tif ( uv2 !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 1 ].push( [\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, a ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, b ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, c )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst groups = geometry.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tconst start = group.start;\n\t\t\t\tconst count = group.count;\n\n\t\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\t\tif ( index !== undefined ) {\n\n\t\t\t\t\t\taddFace( index.getX( j ), index.getX( j + 1 ), index.getX( j + 2 ), group.materialIndex );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\taddFace( j, j + 1, j + 2, group.materialIndex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < index.count; i += 3 ) {\n\n\t\t\t\t\taddFace( index.getX( i ), index.getX( i + 1 ), index.getX( i + 2 ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i += 3 ) {\n\n\t\t\t\t\taddFace( i, i + 1, i + 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeFaceNormals();\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcenter: function () {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset$1 ).negate();\n\n\t\tthis.translate( _offset$1.x, _offset$1.y, _offset$1.z );\n\n\t\treturn this;\n\n\t},\n\n\tnormalize: function () {\n\n\t\tthis.computeBoundingSphere();\n\n\t\tconst center = this.boundingSphere.center;\n\t\tconst radius = this.boundingSphere.radius;\n\n\t\tconst s = radius === 0 ? 1 : 1.0 / radius;\n\n\t\tconst matrix = new Matrix4();\n\t\tmatrix.set(\n\t\t\ts, 0, 0, - s * center.x,\n\t\t\t0, s, 0, - s * center.y,\n\t\t\t0, 0, s, - s * center.z,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\tthis.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcomputeFaceNormals: function () {\n\n\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\tconst vC = this.vertices[ face.c ];\n\n\t\t\tcb.subVectors( vC, vB );\n\t\t\tab.subVectors( vA, vB );\n\t\t\tcb.cross( ab );\n\n\t\t\tcb.normalize();\n\n\t\t\tface.normal.copy( cb );\n\n\t\t}\n\n\t},\n\n\tcomputeVertexNormals: function ( areaWeighted = true ) {\n\n\t\tconst vertices = new Array( this.vertices.length );\n\n\t\tfor ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ] = new Vector3();\n\n\t\t}\n\n\t\tif ( areaWeighted ) {\n\n\t\t\t// vertex normals weighted by triangle areas\n\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\n\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\t\tconst vC = this.vertices[ face.c ];\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tvertices[ face.a ].add( cb );\n\t\t\t\tvertices[ face.b ].add( cb );\n\t\t\t\tvertices[ face.c ].add( cb );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tvertices[ face.a ].add( face.normal );\n\t\t\t\tvertices[ face.b ].add( face.normal );\n\t\t\t\tvertices[ face.c ].add( face.normal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ].normalize();\n\n\t\t}\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( vertices[ face.a ] );\n\t\t\t\tvertexNormals[ 1 ].copy( vertices[ face.b ] );\n\t\t\t\tvertexNormals[ 2 ].copy( vertices[ face.c ] );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = vertices[ face.a ].clone();\n\t\t\t\tvertexNormals[ 1 ] = vertices[ face.b ].clone();\n\t\t\t\tvertexNormals[ 2 ] = vertices[ face.c ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeFlatVertexNormals: function () {\n\n\t\tthis.computeFaceNormals();\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 1 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 2 ].copy( face.normal );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 1 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 2 ] = face.normal.clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeMorphNormals: function () {\n\n\t\t// save original normals\n\t\t// - create temp variables on first access\n\t\t// otherwise just copy (for faster repeated calls)\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tif ( ! face.__originalFaceNormal ) {\n\n\t\t\t\tface.__originalFaceNormal = face.normal.clone();\n\n\t\t\t} else {\n\n\t\t\t\tface.__originalFaceNormal.copy( face.normal );\n\n\t\t\t}\n\n\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\n\n\t\t\tfor ( let i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// use temp geometry to compute face and vertex normals for each morph\n\n\t\tconst tmpGeo = new Geometry();\n\t\ttmpGeo.faces = this.faces;\n\n\t\tfor ( let i = 0, il = this.morphTargets.length; i < il; i ++ ) {\n\n\t\t\t// create on first access\n\n\t\t\tif ( ! this.morphNormals[ i ] ) {\n\n\t\t\t\tthis.morphNormals[ i ] = {};\n\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\n\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\n\n\t\t\t\tconst dstNormalsFace = this.morphNormals[ i ].faceNormals;\n\t\t\t\tconst dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\n\n\t\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tconst faceNormal = new Vector3();\n\t\t\t\t\tconst vertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() };\n\n\t\t\t\t\tdstNormalsFace.push( faceNormal );\n\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphNormals = this.morphNormals[ i ];\n\n\t\t\t// set vertices to morph target\n\n\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\n\n\t\t\t// compute morph normals\n\n\t\t\ttmpGeo.computeFaceNormals();\n\t\t\ttmpGeo.computeVertexNormals();\n\n\t\t\t// store morph normals\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst faceNormal = morphNormals.faceNormals[ f ];\n\t\t\t\tconst vertexNormals = morphNormals.vertexNormals[ f ];\n\n\t\t\t\tfaceNormal.copy( face.normal );\n\n\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\n\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\n\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restore original normals\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tface.normal = face.__originalFaceNormal;\n\t\t\tface.vertexNormals = face.__originalVertexNormals;\n\n\t\t}\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.setFromPoints( this.vertices );\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.setFromPoints( this.vertices );\n\n\t},\n\n\tmerge: function ( geometry, matrix, materialIndexOffset = 0 ) {\n\n\t\tif ( ! ( geometry && geometry.isGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet normalMatrix;\n\t\tconst vertexOffset = this.vertices.length,\n\t\t\tvertices1 = this.vertices,\n\t\t\tvertices2 = geometry.vertices,\n\t\t\tfaces1 = this.faces,\n\t\t\tfaces2 = geometry.faces,\n\t\t\tcolors1 = this.colors,\n\t\t\tcolors2 = geometry.colors;\n\n\t\tif ( matrix !== undefined ) {\n\n\t\t\tnormalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t}\n\n\t\t// vertices\n\n\t\tfor ( let i = 0, il = vertices2.length; i < il; i ++ ) {\n\n\t\t\tconst vertex = vertices2[ i ];\n\n\t\t\tconst vertexCopy = vertex.clone();\n\n\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\n\n\t\t\tvertices1.push( vertexCopy );\n\n\t\t}\n\n\t\t// colors\n\n\t\tfor ( let i = 0, il = colors2.length; i < il; i ++ ) {\n\n\t\t\tcolors1.push( colors2[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tfor ( let i = 0, il = faces2.length; i < il; i ++ ) {\n\n\t\t\tconst face = faces2[ i ];\n\t\t\tlet normal, color;\n\t\t\tconst faceVertexNormals = face.vertexNormals,\n\t\t\t\tfaceVertexColors = face.vertexColors;\n\n\t\t\tconst faceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\n\t\t\tfaceCopy.normal.copy( face.normal );\n\n\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tnormal = faceVertexNormals[ j ].clone();\n\n\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.vertexNormals.push( normal );\n\n\t\t\t}\n\n\t\t\tfaceCopy.color.copy( face.color );\n\n\t\t\tfor ( let j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\n\n\t\t\t\tcolor = faceVertexColors[ j ];\n\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\n\n\t\t\t}\n\n\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n\n\t\t\tfaces1.push( faceCopy );\n\n\t\t}\n\n\t\t// uvs\n\n\t\tfor ( let i = 0, il = geometry.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tconst faceVertexUvs2 = geometry.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) this.faceVertexUvs[ i ] = [];\n\n\t\t\tfor ( let j = 0, jl = faceVertexUvs2.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uvs2 = faceVertexUvs2[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( let k = 0, kl = uvs2.length; k < kl; k ++ ) {\n\n\t\t\t\t\tuvsCopy.push( uvs2[ k ].clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tmergeMesh: function ( mesh ) {\n\n\t\tif ( ! ( mesh && mesh.isMesh ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( mesh.matrixAutoUpdate ) mesh.updateMatrix();\n\n\t\tthis.merge( mesh.geometry, mesh.matrix );\n\n\t},\n\n\t/*\n\t * Checks for duplicate vertices with hashmap.\n\t * Duplicated vertices are removed\n\t * and faces' vertices are updated.\n\t */\n\n\tmergeVertices: function ( precisionPoints = 4 ) {\n\n\t\tconst verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\t\tconst unique = [], changes = [];\n\n\t\tconst precision = Math.pow( 10, precisionPoints );\n\n\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tconst v = this.vertices[ i ];\n\t\t\tconst key = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\n\n\t\t\tif ( verticesMap[ key ] === undefined ) {\n\n\t\t\t\tverticesMap[ key ] = i;\n\t\t\t\tunique.push( this.vertices[ i ] );\n\t\t\t\tchanges[ i ] = unique.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\n\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// if faces are completely degenerate after merging vertices, we\n\t\t// have to remove them from the geometry.\n\t\tconst faceIndicesToRemove = [];\n\n\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tface.a = changes[ face.a ];\n\t\t\tface.b = changes[ face.b ];\n\t\t\tface.c = changes[ face.c ];\n\n\t\t\tconst indices = [ face.a, face.b, face.c ];\n\n\t\t\t// if any duplicate vertices are found in a Face3\n\t\t\t// we have to remove the face as nothing can be saved\n\t\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\t\tif ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) {\n\n\t\t\t\t\tfaceIndicesToRemove.push( i );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\n\n\t\t\tconst idx = faceIndicesToRemove[ i ];\n\n\t\t\tthis.faces.splice( idx, 1 );\n\n\t\t\tfor ( let j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Use unique set of vertices\n\n\t\tconst diff = this.vertices.length - unique.length;\n\t\tthis.vertices = unique;\n\t\treturn diff;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.vertices = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tthis.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsortFacesByMaterialIndex: function () {\n\n\t\tconst faces = this.faces;\n\t\tconst length = faces.length;\n\n\t\t// tag faces\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tfaces[ i ]._id = i;\n\n\t\t}\n\n\t\t// sort faces\n\n\t\tfunction materialIndexSort( a, b ) {\n\n\t\t\treturn a.materialIndex - b.materialIndex;\n\n\t\t}\n\n\t\tfaces.sort( materialIndexSort );\n\n\t\t// sort uvs\n\n\t\tconst uvs1 = this.faceVertexUvs[ 0 ];\n\t\tconst uvs2 = this.faceVertexUvs[ 1 ];\n\n\t\tlet newUvs1, newUvs2;\n\n\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\n\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst id = faces[ i ]._id;\n\n\t\t\tif ( newUvs1 ) newUvs1.push( uvs1[ id ] );\n\t\t\tif ( newUvs2 ) newUvs2.push( uvs2[ id ] );\n\n\t\t}\n\n\t\tif ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1;\n\t\tif ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Geometry',\n\t\t\t\tgenerator: 'Geometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Geometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tconst vertices = [];\n\n\t\tfor ( let i = 0; i < this.vertices.length; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tconst faces = [];\n\t\tconst normals = [];\n\t\tconst normalsHash = {};\n\t\tconst colors = [];\n\t\tconst colorsHash = {};\n\t\tconst uvs = [];\n\t\tconst uvsHash = {};\n\n\t\tfor ( let i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tconst hasMaterial = true;\n\t\t\tconst hasFaceUv = false; // deprecated\n\t\t\tconst hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\n\t\t\tconst hasFaceNormal = face.normal.length() > 0;\n\t\t\tconst hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\tconst hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\tconst hasFaceVertexColor = face.vertexColors.length > 0;\n\n\t\t\tlet faceType = 0;\n\n\t\t\tfaceType = setBit( faceType, 0, 0 ); // isQuad\n\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\n\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\n\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\n\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\n\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\n\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\n\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\n\n\t\t\tfaces.push( faceType );\n\t\t\tfaces.push( face.a, face.b, face.c );\n\t\t\tfaces.push( face.materialIndex );\n\n\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\tconst faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\tfaces.push( getColorIndex( face.color ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\tconst vertexColors = face.vertexColors;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setBit( value, position, enabled ) {\n\n\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) );\n\n\t\t}\n\n\t\tfunction getNormalIndex( normal ) {\n\n\t\t\tconst hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n\n\t\t\tif ( normalsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tnormalsHash[ hash ] = normals.length / 3;\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\treturn normalsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getColorIndex( color ) {\n\n\t\t\tconst hash = color.r.toString() + color.g.toString() + color.b.toString();\n\n\t\t\tif ( colorsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tcolorsHash[ hash ] = colors.length;\n\t\t\tcolors.push( color.getHex() );\n\n\t\t\treturn colorsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getUvIndex( uv ) {\n\n\t\t\tconst hash = uv.x.toString() + uv.y.toString();\n\n\t\t\tif ( uvsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tuvsHash[ hash ] = uvs.length / 2;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\treturn uvsHash[ hash ];\n\n\t\t}\n\n\t\tdata.data = {};\n\n\t\tdata.data.vertices = vertices;\n\t\tdata.data.normals = normals;\n\t\tif ( colors.length > 0 ) data.data.colors = colors;\n\t\tif ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility\n\t\tdata.data.faces = faces;\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t const parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t const values = [];\n\n\t\t for ( const key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t const geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new Geometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\t// reset\n\n\t\tthis.vertices = [];\n\t\tthis.colors = [];\n\t\tthis.faces = [];\n\t\tthis.faceVertexUvs = [[]];\n\t\tthis.morphTargets = [];\n\t\tthis.morphNormals = [];\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\t\tthis.lineDistances = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// vertices\n\n\t\tconst vertices = source.vertices;\n\n\t\tfor ( let i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\tthis.vertices.push( vertices[ i ].clone() );\n\n\t\t}\n\n\t\t// colors\n\n\t\tconst colors = source.colors;\n\n\t\tfor ( let i = 0, il = colors.length; i < il; i ++ ) {\n\n\t\t\tthis.colors.push( colors[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tconst faces = source.faces;\n\n\t\tfor ( let i = 0, il = faces.length; i < il; i ++ ) {\n\n\t\t\tthis.faces.push( faces[ i ].clone() );\n\n\t\t}\n\n\t\t// face vertex uvs\n\n\t\tfor ( let i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tconst faceVertexUvs = source.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) {\n\n\t\t\t\tthis.faceVertexUvs[ i ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uvs = faceVertexUvs[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( let k = 0, kl = uvs.length; k < kl; k ++ ) {\n\n\t\t\t\t\tconst uv = uvs[ k ];\n\n\t\t\t\t\tuvsCopy.push( uv.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphTargets = source.morphTargets;\n\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = {};\n\t\t\tmorphTarget.name = morphTargets[ i ].name;\n\n\t\t\t// vertices\n\n\t\t\tif ( morphTargets[ i ].vertices !== undefined ) {\n\n\t\t\t\tmorphTarget.vertices = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// normals\n\n\t\t\tif ( morphTargets[ i ].normals !== undefined ) {\n\n\t\t\t\tmorphTarget.normals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.push( morphTarget );\n\n\t\t}\n\n\t\t// morph normals\n\n\t\tconst morphNormals = source.morphNormals;\n\n\t\tfor ( let i = 0, il = morphNormals.length; i < il; i ++ ) {\n\n\t\t\tconst morphNormal = {};\n\n\t\t\t// vertex normals\n\n\t\t\tif ( morphNormals[ i ].vertexNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.vertexNormals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst srcVertexNormal = morphNormals[ i ].vertexNormals[ j ];\n\t\t\t\t\tconst destVertexNormal = {};\n\n\t\t\t\t\tdestVertexNormal.a = srcVertexNormal.a.clone();\n\t\t\t\t\tdestVertexNormal.b = srcVertexNormal.b.clone();\n\t\t\t\t\tdestVertexNormal.c = srcVertexNormal.c.clone();\n\n\t\t\t\t\tmorphNormal.vertexNormals.push( destVertexNormal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// face normals\n\n\t\t\tif ( morphNormals[ i ].faceNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.faceNormals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphNormals.push( morphNormal );\n\n\t\t}\n\n\t\t// skin weights\n\n\t\tconst skinWeights = source.skinWeights;\n\n\t\tfor ( let i = 0, il = skinWeights.length; i < il; i ++ ) {\n\n\t\t\tthis.skinWeights.push( skinWeights[ i ].clone() );\n\n\t\t}\n\n\t\t// skin indices\n\n\t\tconst skinIndices = source.skinIndices;\n\n\t\tfor ( let i = 0, il = skinIndices.length; i < il; i ++ ) {\n\n\t\t\tthis.skinIndices.push( skinIndices[ i ].clone() );\n\n\t\t}\n\n\t\t// line distances\n\n\t\tconst lineDistances = source.lineDistances;\n\n\t\tfor ( let i = 0, il = lineDistances.length; i < il; i ++ ) {\n\n\t\t\tthis.lineDistances.push( lineDistances[ i ] );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// update flags\n\n\t\tthis.elementsNeedUpdate = source.elementsNeedUpdate;\n\t\tthis.verticesNeedUpdate = source.verticesNeedUpdate;\n\t\tthis.uvsNeedUpdate = source.uvsNeedUpdate;\n\t\tthis.normalsNeedUpdate = source.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = source.colorsNeedUpdate;\n\t\tthis.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n\t\tthis.groupsNeedUpdate = source.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\nclass BoxGeometry extends Geometry {\n\n\tconstructor( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tthis.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass CircleBufferGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, segments = 8, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CircleBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tsegments = Math.max( 3, segments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// center point\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tnormals.push( 0, 0, 1 );\n\t\tuvs.push( 0.5, 0.5 );\n\n\t\tfor ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\tconst segment = thetaStart + s / segments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uvs\n\n\t\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tindices.push( i, i + 1, 0 );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nclass CircleGeometry extends Geometry {\n\n\tconstructor( radius, segments, thetaStart, thetaLength ) {\n\n\t\tsuper();\n\t\tthis.type = 'CircleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass CylinderBufferGeometry extends BufferGeometry {\n\n\tconstructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\t\tthis.type = 'CylinderBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tconst scope = this;\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet index = 0;\n\t\tconst indexArray = [];\n\t\tconst halfHeight = height / 2;\n\t\tlet groupStart = 0;\n\n\t\t// generate geometry\n\n\t\tgenerateTorso();\n\n\t\tif ( openEnded === false ) {\n\n\t\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction generateTorso() {\n\n\t\t\tconst normal = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\t// this will be used to calculate the normal\n\t\t\tconst slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\tconst indexRow = [];\n\n\t\t\t\tconst v = y / heightSegments;\n\n\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\tconst radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tconst u = x / radialSegments;\n\n\t\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\t\tconst cosTheta = Math.cos( theta );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t\t}\n\n\t\t\t\t// now save vertices of the row in our index array\n\n\t\t\t\tindexArray.push( indexRow );\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\t\tconst a = indexArray[ y ][ x ];\n\t\t\t\t\tconst b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\tconst c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\tconst d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// update group counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t\tfunction generateCap( top ) {\n\n\t\t\t// save the index of the first center vertex\n\t\t\tconst centerIndexStart = index;\n\n\t\t\tconst uv = new Vector2();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\tconst sign = ( top === true ) ? 1 : - 1;\n\n\t\t\t// first we generate the center vertex data of the cap.\n\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\tfor ( let x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// save the index of the last center vertex\n\t\t\tconst centerIndexEnd = index;\n\n\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tconst u = x / radialSegments;\n\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\tconst cosTheta = Math.cos( theta );\n\t\t\t\tconst sinTheta = Math.sin( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = halfHeight * sign;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tconst c = centerIndexStart + x;\n\t\t\t\tconst i = centerIndexEnd + x;\n\n\t\t\t\tif ( top === true ) {\n\n\t\t\t\t\t// face top\n\n\t\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// face bottom\n\n\t\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t\t}\n\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t}\n\n}\n\nclass CylinderGeometry extends Geometry {\n\n\tconstructor( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\tsuper();\n\t\tthis.type = 'CylinderGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass ConeGeometry extends CylinderGeometry {\n\n\tconstructor( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\t\tthis.type = 'ConeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n}\n\nclass ConeBufferGeometry extends CylinderBufferGeometry {\n\n\tconstructor( radius = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n}\n\nclass PolyhedronBufferGeometry extends BufferGeometry {\n\n\tconstructor( vertices, indices, radius = 1, detail = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\t// default buffer data\n\n\t\tconst vertexBuffer = [];\n\t\tconst uvBuffer = [];\n\n\t\t// the subdivision creates the vertex buffer data\n\n\t\tsubdivide( detail );\n\n\t\t// all vertices should lie on a conceptual sphere with a given radius\n\n\t\tapplyRadius( radius );\n\n\t\t// finally, create the uv data\n\n\t\tgenerateUVs();\n\n\t\t// build non-indexed geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\t\tif ( detail === 0 ) {\n\n\t\t\tthis.computeVertexNormals(); // flat normals\n\n\t\t} else {\n\n\t\t\tthis.normalizeNormals(); // smooth normals\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction subdivide( detail ) {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\t// iterate over all faces and apply a subdivison with the given detail value\n\n\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t// get the vertices of the face\n\n\t\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t\t// perform subdivision\n\n\t\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\t\tconst cols = detail + 1;\n\n\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\tconst v = [];\n\n\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\tfor ( let i = 0; i <= cols; i ++ ) {\n\n\t\t\t\tv[ i ] = [];\n\n\t\t\t\tconst aj = a.clone().lerp( c, i / cols );\n\t\t\t\tconst bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\tconst rows = cols - i;\n\n\t\t\t\tfor ( let j = 0; j <= rows; j ++ ) {\n\n\t\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// construct all of the faces\n\n\t\t\tfor ( let i = 0; i < cols; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\tconst k = Math.floor( j / 2 );\n\n\t\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction applyRadius( radius ) {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tconst u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\tconst v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t\t}\n\n\t\t\tcorrectUVs();\n\n\t\t\tcorrectSeam();\n\n\t\t}\n\n\t\tfunction correctSeam() {\n\n\t\t\t// handle case when face straddles the seam, see #3269\n\n\t\t\tfor ( let i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t// uv data of a single face\n\n\t\t\t\tconst x0 = uvBuffer[ i + 0 ];\n\t\t\t\tconst x1 = uvBuffer[ i + 2 ];\n\t\t\t\tconst x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\tconst max = Math.max( x0, x1, x2 );\n\t\t\t\tconst min = Math.min( x0, x1, x2 );\n\n\t\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushVertex( vertex ) {\n\n\t\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tfunction getVertexByIndex( index, vertex ) {\n\n\t\t\tconst stride = index * 3;\n\n\t\t\tvertex.x = vertices[ stride + 0 ];\n\t\t\tvertex.y = vertices[ stride + 1 ];\n\t\t\tvertex.z = vertices[ stride + 2 ];\n\n\t\t}\n\n\t\tfunction correctUVs() {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\tconst centroid = new Vector3();\n\n\t\t\tconst uvA = new Vector2();\n\t\t\tconst uvB = new Vector2();\n\t\t\tconst uvC = new Vector2();\n\n\t\t\tfor ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\t\tconst azi = azimuth( centroid );\n\n\t\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t\t}\n\n\t\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\t\tfunction azimuth( vector ) {\n\n\t\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t\t}\n\n\n\t\t// Angle above the XZ plane.\n\n\t\tfunction inclination( vector ) {\n\n\t\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t\t}\n\n\t}\n\n}\n\nclass DodecahedronBufferGeometry extends PolyhedronBufferGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\tconst r = 1 / t;\n\n\t\tconst vertices = [\n\n\t\t\t// (±1, ±1, ±1)\n\t\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t\t// (0, ±1/φ, ±φ)\n\t\t\t0, - r, - t, 0, - r, t,\n\t\t\t0, r, - t, 0, r, t,\n\n\t\t\t// (±1/φ, ±φ, 0)\n\t\t\t- r, - t, 0, - r, t, 0,\n\t\t\tr, - t, 0, r, t, 0,\n\n\t\t\t// (±φ, 0, ±1/φ)\n\t\t\t- t, 0, - r, t, 0, - r,\n\t\t\t- t, 0, r, t, 0, r\n\t\t];\n\n\t\tconst indices = [\n\t\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'DodecahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\nclass DodecahedronGeometry extends Geometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tsuper();\n\t\tthis.type = 'DodecahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new DodecahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nconst _v0$2 = new Vector3();\nconst _v1$5 = new Vector3();\nconst _normal$1 = new Vector3();\nconst _triangle = new Triangle();\n\nclass EdgesGeometry extends BufferGeometry {\n\n\tconstructor( geometry, thresholdAngle ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EdgesGeometry';\n\n\t\tthis.parameters = {\n\t\t\tthresholdAngle: thresholdAngle\n\t\t};\n\n\t\tthresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1;\n\n\t\tif ( geometry.isGeometry ) {\n\n\t\t\tgeometry = new BufferGeometry().fromGeometry( geometry );\n\n\t\t}\n\n\t\tconst precisionPoints = 4;\n\t\tconst precision = Math.pow( 10, precisionPoints );\n\t\tconst thresholdDot = Math.cos( MathUtils.DEG2RAD * thresholdAngle );\n\n\t\tconst indexAttr = geometry.getIndex();\n\t\tconst positionAttr = geometry.getAttribute( 'position' );\n\t\tconst indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\n\t\tconst indexArr = [ 0, 0, 0 ];\n\t\tconst vertKeys = [ 'a', 'b', 'c' ];\n\t\tconst hashes = new Array( 3 );\n\n\t\tconst edgeData = {};\n\t\tconst vertices = [];\n\t\tfor ( let i = 0; i < indexCount; i += 3 ) {\n\n\t\t\tif ( indexAttr ) {\n\n\t\t\t\tindexArr[ 0 ] = indexAttr.getX( i );\n\t\t\t\tindexArr[ 1 ] = indexAttr.getX( i + 1 );\n\t\t\t\tindexArr[ 2 ] = indexAttr.getX( i + 2 );\n\n\t\t\t} else {\n\n\t\t\t\tindexArr[ 0 ] = i;\n\t\t\t\tindexArr[ 1 ] = i + 1;\n\t\t\t\tindexArr[ 2 ] = i + 2;\n\n\t\t\t}\n\n\t\t\tconst { a, b, c } = _triangle;\n\t\t\ta.fromBufferAttribute( positionAttr, indexArr[ 0 ] );\n\t\t\tb.fromBufferAttribute( positionAttr, indexArr[ 1 ] );\n\t\t\tc.fromBufferAttribute( positionAttr, indexArr[ 2 ] );\n\t\t\t_triangle.getNormal( _normal$1 );\n\n\t\t\t// create hashes for the edge from the vertices\n\t\t\thashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;\n\t\t\thashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;\n\t\t\thashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;\n\n\t\t\t// skip degenerate triangles\n\t\t\tif ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// iterate over every edge\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t// get the first and next vertex making up the edge\n\t\t\t\tconst jNext = ( j + 1 ) % 3;\n\t\t\t\tconst vecHash0 = hashes[ j ];\n\t\t\t\tconst vecHash1 = hashes[ jNext ];\n\t\t\t\tconst v0 = _triangle[ vertKeys[ j ] ];\n\t\t\t\tconst v1 = _triangle[ vertKeys[ jNext ] ];\n\n\t\t\t\tconst hash = `${ vecHash0 }_${ vecHash1 }`;\n\t\t\t\tconst reverseHash = `${ vecHash1 }_${ vecHash0 }`;\n\n\t\t\t\tif ( reverseHash in edgeData && edgeData[ reverseHash ] ) {\n\n\t\t\t\t\t// if we found a sibling edge add it into the vertex array if\n\t\t\t\t\t// it meets the angle threshold and delete the edge from the map.\n\t\t\t\t\tif ( _normal$1.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {\n\n\t\t\t\t\t\tvertices.push( v0.x, v0.y, v0.z );\n\t\t\t\t\t\tvertices.push( v1.x, v1.y, v1.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tedgeData[ reverseHash ] = null;\n\n\t\t\t\t} else if ( ! ( hash in edgeData ) ) {\n\n\t\t\t\t\t// if we've already got an edge here then skip adding a new one\n\t\t\t\t\tedgeData[ hash ] = {\n\n\t\t\t\t\t\tindex0: indexArr[ j ],\n\t\t\t\t\t\tindex1: indexArr[ jNext ],\n\t\t\t\t\t\tnormal: _normal$1.clone(),\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// iterate over all remaining, unmatched edges and add them to the vertex array\n\t\tfor ( const key in edgeData ) {\n\n\t\t\tif ( edgeData[ key ] ) {\n\n\t\t\t\tconst { index0, index1 } = edgeData[ key ];\n\t\t\t\t_v0$2.fromBufferAttribute( positionAttr, index0 );\n\t\t\t\t_v1$5.fromBufferAttribute( positionAttr, index1 );\n\n\t\t\t\tvertices.push( _v0$2.x, _v0$2.y, _v0$2.z );\n\t\t\t\tvertices.push( _v1$5.x, _v1$5.y, _v1$5.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n}\n\n/**\n * Port from https://github.com/mapbox/earcut (v2.2.2)\n */\n\nconst Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim ) {\n\n\t\tdim = dim || 2;\n\n\t\tconst hasHoles = holeIndices && holeIndices.length;\n\t\tconst outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length;\n\t\tlet outerNode = linkedList( data, 0, outerLen, dim, true );\n\t\tconst triangles = [];\n\n\t\tif ( ! outerNode || outerNode.next === outerNode.prev ) return triangles;\n\n\t\tlet minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( let i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 1 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tlet i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tlet p = start,\n\t\tagain;\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tlet stop = ear,\n\t\tprev, next;\n\n\t// iterate through ears, slicing them one by one\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim );\n\t\t\ttriangles.push( ear.i / dim );\n\t\t\ttriangles.push( next.i / dim );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertex leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( filterPoints( ear ), triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar( ear ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tlet p = ear.next.next;\n\n\twhile ( p !== ear.prev ) {\n\n\t\tif ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ),\n\t\tminTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ),\n\t\tmaxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ),\n\t\tmaxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y );\n\n\t// z-order range for the current triangle bbox;\n\tconst minZ = zOrder( minTX, minTY, minX, minY, invSize ),\n\t\tmaxZ = zOrder( maxTX, maxTY, minX, minY, invSize );\n\n\tlet p = ear.prevZ,\n\t\tn = ear.nextZ;\n\n\t// look for points inside the triangle in both directions\n\twhile ( p && p.z >= minZ && n && n.z <= maxZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\t// look for remaining points in decreasing z-order\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t}\n\n\t// look for remaining points in increasing z-order\n\twhile ( n && n.z <= maxZ ) {\n\n\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tconst a = p.prev,\n\t\t\tb = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim );\n\t\t\ttriangles.push( p.i / dim );\n\t\t\ttriangles.push( b.i / dim );\n\n\t\t\t// remove two nodes involved\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn filterPoints( p );\n\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\tlet a = start;\n\tdo {\n\n\t\tlet b = a.next.next;\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\t\t\t\tlet c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tconst queue = [];\n\tlet i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\teliminateHole( queue[ i ], outerNode );\n\t\touterNode = filterPoints( outerNode, outerNode.next );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole( hole, outerNode ) {\n\n\touterNode = findHoleBridge( hole, outerNode );\n\tif ( outerNode ) {\n\n\t\tconst b = splitPolygon( outerNode, hole );\n\n\t\t// filter collinear points around the cuts\n\t\tfilterPoints( outerNode, outerNode.next );\n\t\tfilterPoints( b, b.next );\n\n\t}\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge( hole, outerNode ) {\n\n\tlet p = outerNode;\n\tconst hx = hole.x;\n\tconst hy = hole.y;\n\tlet qx = - Infinity, m;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tconst x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\t\t\t\tif ( x === hx ) {\n\n\t\t\t\t\tif ( hy === p.y ) return p;\n\t\t\t\t\tif ( hy === p.next.y ) return p.next;\n\n\t\t\t\t}\n\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\tif ( hx === qx ) return m; // hole touches outer segment; pick leftmost endpoint\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tconst stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y;\n\tlet tanMin = Infinity, tan;\n\n\tp = m;\n\n\tdo {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== stop );\n\n\treturn m;\n\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector( m, p ) {\n\n\treturn area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0;\n\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tif ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked( list ) {\n\n\tlet i, p, q, e, tail, numMerges, pSize, qSize,\n\t\tinSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\tx = 32767 * ( x - minX ) * invSize;\n\ty = 32767 * ( y - minY ) * invSize;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost( start ) {\n\n\tlet p = start,\n\t\tleftmost = start;\n\tdo {\n\n\t\tif ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 &&\n\t\t\t( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 &&\n\t\t\t( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0;\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges\n\t\t( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible\n\t\t( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors\n\t\tequals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case\n\n}\n\n// signed area of a triangle\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tconst o1 = sign( area( p1, q1, p2 ) );\n\tconst o2 = sign( area( p1, q1, q2 ) );\n\tconst o3 = sign( area( p2, q2, p1 ) );\n\tconst o4 = sign( area( p2, q2, q1 ) );\n\n\tif ( o1 !== o2 && o3 !== o4 ) return true; // general case\n\n\tif ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n\tif ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n\tif ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n\tif ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n\treturn false;\n\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment( p, q, r ) {\n\n\treturn q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y );\n\n}\n\nfunction sign( num ) {\n\n\treturn num > 0 ? 1 : num < 0 ? - 1 : 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon( a, b ) {\n\n\tlet p = a;\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\t\tintersects( p, p.next, a, b ) ) return true;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside( a, b ) {\n\n\tlet p = a,\n\t\tinside = false;\n\tconst px = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) )\n\t\t\tinside = ! inside;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon( a, b ) {\n\n\tconst a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode( i, x, y, last ) {\n\n\tconst p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertex index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertex nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = null;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tlet sum = 0;\n\tfor ( let i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\nconst ShapeUtils = {\n\n\t// calculate area of the contour polygon\n\n\tarea: function ( contour ) {\n\n\t\tconst n = contour.length;\n\t\tlet a = 0.0;\n\n\t\tfor ( let p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t},\n\n\tisClockWise: function ( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t},\n\n\ttriangulateShape: function ( contour, holes ) {\n\n\t\tconst vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tconst holeIndices = []; // array of hole indices\n\t\tconst faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tlet holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( let i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tconst triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( let i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n};\n\nfunction removeDupEndPts( points ) {\n\n\tconst l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( let i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline (including bevelOffset) is bevel\n * bevelOffset: , // how far from shape outline does bevel start\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // object that provides UV generator functions\n *\n * }\n */\n\nclass ExtrudeBufferGeometry extends BufferGeometry {\n\n\tconstructor( shapes, options ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\tconst scope = this;\n\n\t\tconst verticesArray = [];\n\t\tconst uvArray = [];\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\t\t\taddShape( shape );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\t\tthis.computeVertexNormals();\n\n\t\t// functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst placeholder = [];\n\n\t\t\t// options\n\n\t\t\tconst curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\tconst steps = options.steps !== undefined ? options.steps : 1;\n\t\t\tlet depth = options.depth !== undefined ? options.depth : 100;\n\n\t\t\tlet bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\tlet bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6;\n\t\t\tlet bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2;\n\t\t\tlet bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\t\tlet bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\t\tconst extrudePath = options.extrudePath;\n\n\t\t\tconst uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t\t// deprecated options\n\n\t\t\tif ( options.amount !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' );\n\t\t\t\tdepth = options.amount;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet extrudePts, extrudeByPath = false;\n\t\t\tlet splineTube, binormal, normal, position2;\n\n\t\t\tif ( extrudePath ) {\n\n\t\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\t\textrudeByPath = true;\n\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t\t// SETUP TNB variables\n\n\t\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\tbinormal = new Vector3();\n\t\t\t\tnormal = new Vector3();\n\t\t\t\tposition2 = new Vector3();\n\n\t\t\t}\n\n\t\t\t// Safeguards if bevels are not enabled\n\n\t\t\tif ( ! bevelEnabled ) {\n\n\t\t\t\tbevelSegments = 0;\n\t\t\t\tbevelThickness = 0;\n\t\t\t\tbevelSize = 0;\n\t\t\t\tbevelOffset = 0;\n\n\t\t\t}\n\n\t\t\t// Variables initialization\n\n\t\t\tconst shapePoints = shape.extractPoints( curveSegments );\n\n\t\t\tlet vertices = shapePoints.shape;\n\t\t\tconst holes = shapePoints.holes;\n\n\t\t\tconst reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\t\tif ( reverse ) {\n\n\t\t\t\tvertices = vertices.reverse();\n\n\t\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t\t/* Vertices */\n\n\t\t\tconst contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\tvertices = vertices.concat( ahole );\n\n\t\t\t}\n\n\n\t\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\t\tif ( ! vec ) console.error( \"THREE.ExtrudeGeometry: vec does not exist\" );\n\n\t\t\t\treturn vec.clone().multiplyScalar( size ).add( pt );\n\n\t\t\t}\n\n\t\t\tconst vlen = vertices.length, flen = faces.length;\n\n\n\t\t\t// Find directions for point movement\n\n\n\t\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t//\n\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\t\tlet v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\tconst v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\tconst v_next_x = inNext.x - inPt.x,\n\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\t\tconst v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t\t// check for collinear edges\n\t\t\t\tconst collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not collinear\n\n\t\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\t\tconst v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\t\tconst v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\t\tconst ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\t\tconst ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\t\tconst ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\t\tconst ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\t\tconst sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t// but prevent crazy spikes\n\t\t\t\t\tconst v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\t\tlet direction_eq = false; // assumes: opposite\n\n\t\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t\t}\n\n\n\t\t\tconst contourMovements = [];\n\n\t\t\tfor ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t\t}\n\n\t\t\tconst holesMovements = [];\n\t\t\tlet oneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\toneHoleMovements = [];\n\n\t\t\t\tfor ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t\t}\n\n\t\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t\t}\n\n\n\t\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\t\tfor ( let b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst bs = bevelSize + bevelOffset;\n\n\t\t\t// Back facing vertices\n\n\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Add stepped vertices...\n\t\t\t// Including front facing vertices\n\n\t\t\tfor ( let s = 1; s <= steps; s ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// Add bevel segments planes\n\n\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\t\tfor ( let b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t/* Faces */\n\n\t\t\t// Top and bottom faces\n\n\t\t\tbuildLidFaces();\n\n\t\t\t// Sides faces\n\n\t\t\tbuildSideFaces();\n\n\n\t\t\t///// Internal functions\n\n\t\t\tfunction buildLidFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\n\t\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\t\tlet layer = 0; // steps + 1\n\t\t\t\t\tlet offset = vlen * layer;\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t\t}\n\n\t\t\t// Create faces for the z-sides of the shape\n\n\t\t\tfunction buildSideFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\t\t\t\tlet layeroffset = 0;\n\t\t\t\tsidewalls( contour, layeroffset );\n\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t\t//, true\n\t\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t\t}\n\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t\t}\n\n\t\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\t\tlet i = contour.length;\n\n\t\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\t\tconst j = i;\n\t\t\t\t\tlet k = i - 1;\n\t\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\tfor ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {\n\n\t\t\t\t\t\tconst slen1 = vlen * s;\n\t\t\t\t\t\tconst slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\t\tconst a = layeroffset + j + slen1,\n\t\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction v( x, y, z ) {\n\n\t\t\t\tplaceholder.push( x );\n\t\t\t\tplaceholder.push( y );\n\t\t\t\tplaceholder.push( z );\n\n\t\t\t}\n\n\n\t\t\tfunction f3( a, b, c ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\n\t\t\t}\n\n\t\t\tfunction f4( a, b, c, d ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( d );\n\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\t\t\t\taddVertex( d );\n\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t}\n\n\t\t\tfunction addVertex( index ) {\n\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t\t}\n\n\n\t\t\tfunction addUV( vector2 ) {\n\n\t\t\t\tuvArray.push( vector2.x );\n\t\t\t\tuvArray.push( vector2.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON( shapes, options, data );\n\n\t}\n\n}\n\nconst WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst a_z = vertices[ indexA * 3 + 2 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst b_z = vertices[ indexB * 3 + 2 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\t\tconst c_z = vertices[ indexC * 3 + 2 ];\n\t\tconst d_x = vertices[ indexD * 3 ];\n\t\tconst d_y = vertices[ indexD * 3 + 1 ];\n\t\tconst d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < 0.01 ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n\n};\n\nfunction toJSON( shapes, options, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\n/**\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline (including bevelOffset) is bevel\n * bevelOffset: , // how far from shape outline does bevel start\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // object that provides UV generator functions\n *\n * }\n */\n\nclass ExtrudeGeometry extends Geometry {\n\n\tconstructor( shapes, options ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tthis.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON$1( shapes, options, data );\n\n\t}\n\n}\n\nfunction toJSON$1( shapes, options, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\nclass IcosahedronBufferGeometry extends PolyhedronBufferGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\tconst vertices = [\n\t\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t\t0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t\tt, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'IcosahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\nclass IcosahedronGeometry extends Geometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'IcosahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new IcosahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass LatheBufferGeometry extends BufferGeometry {\n\n\tconstructor( points, segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tsegments = Math.floor( segments );\n\n\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\tphiLength = MathUtils.clamp( phiLength, 0, Math.PI * 2 );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst inverseSegments = 1.0 / segments;\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices and uvs\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\tconst sin = Math.sin( phi );\n\t\t\tconst cos = Math.cos( phi );\n\n\t\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\t\tvertex.y = points[ j ].y;\n\t\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = i / segments;\n\t\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 0; i < segments; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\tconst base = j + i * points.length;\n\n\t\t\t\tconst a = base;\n\t\t\t\tconst b = base + points.length;\n\t\t\t\tconst c = base + points.length + 1;\n\t\t\t\tconst d = base + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// generate normals\n\n\t\tthis.computeVertexNormals();\n\n\t\t// if the geometry is closed, we need to average the normals along the seam.\n\t\t// because the corresponding vertices are identical (but still have different UVs).\n\n\t\tif ( phiLength === Math.PI * 2 ) {\n\n\t\t\tconst normals = this.attributes.normal.array;\n\t\t\tconst n1 = new Vector3();\n\t\t\tconst n2 = new Vector3();\n\t\t\tconst n = new Vector3();\n\n\t\t\t// this is the buffer offset for the last line of vertices\n\n\t\t\tconst base = segments * points.length * 3;\n\n\t\t\tfor ( let i = 0, j = 0; i < points.length; i ++, j += 3 ) {\n\n\t\t\t\t// select the normal of the vertex in the first line\n\n\t\t\t\tn1.x = normals[ j + 0 ];\n\t\t\t\tn1.y = normals[ j + 1 ];\n\t\t\t\tn1.z = normals[ j + 2 ];\n\n\t\t\t\t// select the normal of the vertex in the last line\n\n\t\t\t\tn2.x = normals[ base + j + 0 ];\n\t\t\t\tn2.y = normals[ base + j + 1 ];\n\t\t\t\tn2.z = normals[ base + j + 2 ];\n\n\t\t\t\t// average normals\n\n\t\t\t\tn.addVectors( n1, n2 ).normalize();\n\n\t\t\t\t// assign the new values to both normals\n\n\t\t\t\tnormals[ j + 0 ] = normals[ base + j + 0 ] = n.x;\n\t\t\t\tnormals[ j + 1 ] = normals[ base + j + 1 ] = n.y;\n\t\t\t\tnormals[ j + 2 ] = normals[ base + j + 2 ] = n.z;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nclass LatheGeometry extends Geometry {\n\n\tconstructor( points, segments, phiStart, phiLength ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new LatheBufferGeometry( points, segments, phiStart, phiLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass OctahedronBufferGeometry extends PolyhedronBufferGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t\t1, 3, 4,\t1, 4, 2\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'OctahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\nclass OctahedronGeometry extends Geometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'OctahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new OctahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\n/**\n * Parametric Surfaces Geometry\n * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html\n */\n\nfunction ParametricBufferGeometry( func, slices, stacks ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'ParametricBufferGeometry';\n\n\tthis.parameters = {\n\t\tfunc: func,\n\t\tslices: slices,\n\t\tstacks: stacks\n\t};\n\n\t// buffers\n\n\tconst indices = [];\n\tconst vertices = [];\n\tconst normals = [];\n\tconst uvs = [];\n\n\tconst EPS = 0.00001;\n\n\tconst normal = new Vector3();\n\n\tconst p0 = new Vector3(), p1 = new Vector3();\n\tconst pu = new Vector3(), pv = new Vector3();\n\n\tif ( func.length < 3 ) {\n\n\t\tconsole.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' );\n\n\t}\n\n\t// generate vertices, normals and uvs\n\n\tconst sliceCount = slices + 1;\n\n\tfor ( let i = 0; i <= stacks; i ++ ) {\n\n\t\tconst v = i / stacks;\n\n\t\tfor ( let j = 0; j <= slices; j ++ ) {\n\n\t\t\tconst u = j / slices;\n\n\t\t\t// vertex\n\n\t\t\tfunc( u, v, p0 );\n\t\t\tvertices.push( p0.x, p0.y, p0.z );\n\n\t\t\t// normal\n\n\t\t\t// approximate tangent vectors via finite differences\n\n\t\t\tif ( u - EPS >= 0 ) {\n\n\t\t\t\tfunc( u - EPS, v, p1 );\n\t\t\t\tpu.subVectors( p0, p1 );\n\n\t\t\t} else {\n\n\t\t\t\tfunc( u + EPS, v, p1 );\n\t\t\t\tpu.subVectors( p1, p0 );\n\n\t\t\t}\n\n\t\t\tif ( v - EPS >= 0 ) {\n\n\t\t\t\tfunc( u, v - EPS, p1 );\n\t\t\t\tpv.subVectors( p0, p1 );\n\n\t\t\t} else {\n\n\t\t\t\tfunc( u, v + EPS, p1 );\n\t\t\t\tpv.subVectors( p1, p0 );\n\n\t\t\t}\n\n\t\t\t// cross product of tangent vectors returns surface normal\n\n\t\t\tnormal.crossVectors( pu, pv ).normalize();\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( u, v );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( let i = 0; i < stacks; i ++ ) {\n\n\t\tfor ( let j = 0; j < slices; j ++ ) {\n\n\t\t\tconst a = i * sliceCount + j;\n\t\t\tconst b = i * sliceCount + j + 1;\n\t\t\tconst c = ( i + 1 ) * sliceCount + j + 1;\n\t\t\tconst d = ( i + 1 ) * sliceCount + j;\n\n\t\t\t// faces one and two\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry;\n\n/**\n * Parametric Surfaces Geometry\n * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html\n */\n\nfunction ParametricGeometry( func, slices, stacks ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'ParametricGeometry';\n\n\tthis.parameters = {\n\t\tfunc: func,\n\t\tslices: slices,\n\t\tstacks: stacks\n\t};\n\n\tthis.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) );\n\tthis.mergeVertices();\n\n}\n\nParametricGeometry.prototype = Object.create( Geometry.prototype );\nParametricGeometry.prototype.constructor = ParametricGeometry;\n\nclass PlaneGeometry extends Geometry {\n\n\tconstructor( width, height, widthSegments, heightSegments ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PlaneGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tthis.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass PolyhedronGeometry extends Geometry {\n\n\tconstructor( vertices, indices, radius, detail ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new PolyhedronBufferGeometry( vertices, indices, radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass RingBufferGeometry extends BufferGeometry {\n\n\tconstructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 8, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthetaSegments = Math.max( 3, thetaSegments );\n\t\tphiSegments = Math.max( 1, phiSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// some helper variables\n\n\t\tlet radius = innerRadius;\n\t\tconst radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\t\tconst segment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t\t// increase the radius for next row of vertices\n\n\t\t\tradius += radiusStep;\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let j = 0; j < phiSegments; j ++ ) {\n\n\t\t\tconst thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\tfor ( let i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\tconst segment = i + thetaSegmentLevel;\n\n\t\t\t\tconst a = segment;\n\t\t\t\tconst b = segment + thetaSegments + 1;\n\t\t\t\tconst c = segment + thetaSegments + 2;\n\t\t\t\tconst d = segment + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nclass RingGeometry extends Geometry {\n\n\tconstructor( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass ShapeBufferGeometry extends BufferGeometry {\n\n\tconstructor( shapes, curveSegments = 12 ) {\n\n\t\tsuper();\n\t\tthis.type = 'ShapeBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet groupStart = 0;\n\t\tlet groupCount = 0;\n\n\t\t// allow single and array values for \"shapes\" parameter\n\n\t\tif ( Array.isArray( shapes ) === false ) {\n\n\t\t\taddShape( shapes );\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < shapes.length; i ++ ) {\n\n\t\t\t\taddShape( shapes[ i ] );\n\n\t\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t\tgroupCount = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t// helper functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst indexOffset = vertices.length / 3;\n\t\t\tconst points = shape.extractPoints( curveSegments );\n\n\t\t\tlet shapeVertices = points.shape;\n\t\t\tconst shapeHoles = points.holes;\n\n\t\t\t// check direction of vertices\n\n\t\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t\t// join vertices of inner and outer paths to a single array\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\t\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t\t}\n\n\t\t\t// vertices, normals, uvs\n\n\t\t\tfor ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\tconst vertex = shapeVertices[ i ];\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\t\tnormals.push( 0, 0, 1 );\n\t\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t\t}\n\n\t\t\t// incides\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tconst a = face[ 0 ] + indexOffset;\n\t\t\t\tconst b = face[ 1 ] + indexOffset;\n\t\t\t\tconst c = face[ 2 ] + indexOffset;\n\n\t\t\t\tindices.push( a, b, c );\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON$2( shapes, data );\n\n\t}\n\n}\n\nfunction toJSON$2( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\nclass ShapeGeometry extends Geometry {\n\n\tconstructor( shapes, curveSegments ) {\n\n\t\tsuper();\n\t\tthis.type = 'ShapeGeometry';\n\n\t\tif ( typeof curveSegments === 'object' ) {\n\n\t\t\tconsole.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' );\n\n\t\t\tcurveSegments = curveSegments.curveSegments;\n\n\t\t}\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\tthis.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = Geometry.prototype.toJSON.call( this );\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON$3( shapes, data );\n\n\t}\n\n}\n\nfunction toJSON$3( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\nclass SphereBufferGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, widthSegments = 8, heightSegments = 6, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) {\n\n\t\tsuper();\n\t\tthis.type = 'SphereBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) );\n\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) );\n\n\t\tconst thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );\n\n\t\tlet index = 0;\n\t\tconst grid = [];\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\tconst verticesRow = [];\n\n\t\t\tconst v = iy / heightSegments;\n\n\t\t\t// special case for the poles\n\n\t\t\tlet uOffset = 0;\n\n\t\t\tif ( iy == 0 && thetaStart == 0 ) {\n\n\t\t\t\tuOffset = 0.5 / widthSegments;\n\n\t\t\t} else if ( iy == heightSegments && thetaEnd == Math.PI ) {\n\n\t\t\t\tuOffset = - 0.5 / widthSegments;\n\n\t\t\t}\n\n\t\t\tfor ( let ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\tconst u = ix / widthSegments;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.copy( vertex ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u + uOffset, 1 - v );\n\n\t\t\t\tverticesRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\tgrid.push( verticesRow );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\tconst a = grid[ iy ][ ix + 1 ];\n\t\t\t\tconst b = grid[ iy ][ ix ];\n\t\t\t\tconst c = grid[ iy + 1 ][ ix ];\n\t\t\t\tconst d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nclass SphereGeometry extends Geometry {\n\n\tconstructor( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\t\tsuper();\n\t\tthis.type = 'SphereGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass TetrahedronBufferGeometry extends PolyhedronBufferGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'TetrahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\nclass TetrahedronGeometry extends Geometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tsuper();\n\t\tthis.type = 'TetrahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new TetrahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\n/**\n * Text = 3D Text\n *\n * parameters = {\n * font: , // font\n *\n * size: , // size of the text\n * height: , // thickness to extrude text\n * curveSegments: , // number of points on the curves\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into text bevel goes\n * bevelSize: , // how far from text outline (including bevelOffset) is bevel\n * bevelOffset: // how far from text outline does bevel start\n * }\n */\n\nclass TextBufferGeometry extends ExtrudeBufferGeometry {\n\n\tconstructor( text, parameters = {} ) {\n\n\t\tconst font = parameters.font;\n\n\t\tif ( ! ( font && font.isFont ) ) {\n\n\t\t\tconsole.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' );\n\t\t\treturn new BufferGeometry();\n\n\t\t}\n\n\t\tconst shapes = font.generateShapes( text, parameters.size );\n\n\t\t// translate parameters to ExtrudeGeometry API\n\n\t\tparameters.depth = parameters.height !== undefined ? parameters.height : 50;\n\n\t\t// defaults\n\n\t\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\n\t\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\n\t\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\n\n\t\tsuper( shapes, parameters );\n\n\t\tthis.type = 'TextBufferGeometry';\n\n\t}\n\n}\n\n/**\n * Text = 3D Text\n *\n * parameters = {\n * font: , // font\n *\n * size: , // size of the text\n * height: , // thickness to extrude text\n * curveSegments: , // number of points on the curves\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into text bevel goes\n * bevelSize: , // how far from text outline (including bevelOffset) is bevel\n * bevelOffset: // how far from text outline does bevel start\n * }\n */\n\nclass TextGeometry extends Geometry {\n\n\tconstructor( text, parameters ) {\n\n\t\tsuper();\n\t\tthis.type = 'TextGeometry';\n\n\t\tthis.parameters = {\n\t\t\ttext: text,\n\t\t\tparameters: parameters\n\t\t};\n\n\t\tthis.fromBufferGeometry( new TextBufferGeometry( text, parameters ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass TorusBufferGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, radialSegments = 8, tubularSegments = 6, arc = Math.PI * 2 ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\ttubularSegments = Math.floor( tubularSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst center = new Vector3();\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tconst u = i / tubularSegments * arc;\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\tconst b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\tconst c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\tconst d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nclass TorusGeometry extends Geometry {\n\n\tconstructor( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tthis.fromBufferGeometry( new TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass TorusKnotBufferGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusKnotBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\ttubularSegments = Math.floor( tubularSegments );\n\t\tradialSegments = Math.floor( radialSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tconst P1 = new Vector3();\n\t\tconst P2 = new Vector3();\n\n\t\tconst B = new Vector3();\n\t\tconst T = new Vector3();\n\t\tconst N = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segement\n\n\t\t\tconst u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t\t// calculate orthonormal basis\n\n\t\t\tT.subVectors( P2, P1 );\n\t\t\tN.addVectors( P2, P1 );\n\t\t\tB.crossVectors( T, N );\n\t\t\tN.crossVectors( B, T );\n\n\t\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\t\tB.normalize();\n\t\t\tN.normalize();\n\n\t\t\tfor ( let j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\t\t\t\tconst cx = - tube * Math.cos( v );\n\t\t\t\tconst cy = tube * Math.sin( v );\n\n\t\t\t\t// now calculate the final vertex position.\n\t\t\t\t// first we orient the extrusion with our basis vectos, then we add it to the current position on the curve\n\n\t\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// this function calculates the current position on the torus curve\n\n\t\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\t\tconst cu = Math.cos( u );\n\t\t\tconst su = Math.sin( u );\n\t\t\tconst quOverP = q / p * u;\n\t\t\tconst cs = Math.cos( quOverP );\n\n\t\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t\t}\n\n\t}\n\n}\n\nclass TorusKnotGeometry extends Geometry {\n\n\tconstructor( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusKnotGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\tif ( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' );\n\n\t\tthis.fromBufferGeometry( new TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass TubeBufferGeometry extends BufferGeometry {\n\n\tconstructor( path, tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) {\n\n\t\tsuper();\n\t\tthis.type = 'TubeBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tconst frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = frames.tangents;\n\t\tthis.normals = frames.normals;\n\t\tthis.binormals = frames.binormals;\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tlet P = new Vector3();\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\t\tconst indices = [];\n\n\t\t// create buffer data\n\n\t\tgenerateBufferData();\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// functions\n\n\t\tfunction generateBufferData() {\n\n\t\t\tfor ( let i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\t\tgenerateSegment( i );\n\n\t\t\t}\n\n\t\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t// at the regular position on the given path\n\t\t\t//\n\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t\t// uvs are generated in a separate function.\n\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\tgenerateUVs();\n\n\t\t\t// finally create faces\n\n\t\t\tgenerateIndices();\n\n\t\t}\n\n\t\tfunction generateSegment( i ) {\n\n\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t\t// retrieve corresponding normal and binormal\n\n\t\t\tconst N = frames.normals[ i ];\n\t\t\tconst B = frames.binormals[ i ];\n\n\t\t\t// generate normals and vertices for the current segment\n\n\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\tconst sin = Math.sin( v );\n\t\t\t\tconst cos = - Math.cos( v );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\t\tnormal.normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateIndices() {\n\n\t\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\ttoJSON() {\n\n\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\tdata.path = this.parameters.path.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass TubeGeometry extends Geometry {\n\n\tconstructor( path, tubularSegments, radius, radialSegments, closed, taper ) {\n\n\t\tsuper();\n\t\tthis.type = 'TubeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tif ( taper !== undefined ) console.warn( 'THREE.TubeGeometry: taper has been removed.' );\n\n\t\tconst bufferGeometry = new TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = bufferGeometry.tangents;\n\t\tthis.normals = bufferGeometry.normals;\n\t\tthis.binormals = bufferGeometry.binormals;\n\n\t\t// create geometry\n\n\t\tthis.fromBufferGeometry( bufferGeometry );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass WireframeGeometry extends BufferGeometry {\n\n\tconstructor( geometry ) {\n\n\t\tsuper();\n\t\tthis.type = 'WireframeGeometry';\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\n\t\t// helper variables\n\n\t\tconst edge = [ 0, 0 ], edges = {};\n\t\tconst keys = [ 'a', 'b', 'c' ];\n\n\t\t// different logic for Geometry and BufferGeometry\n\n\t\tif ( geometry && geometry.isGeometry ) {\n\n\t\t\t// create a data structure that contains all edges without duplicates\n\n\t\t\tconst faces = geometry.faces;\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\tconst edge1 = face[ keys[ j ] ];\n\t\t\t\t\tconst edge2 = face[ keys[ ( j + 1 ) % 3 ] ];\n\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\tconst key = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// generate vertices\n\n\t\t\tfor ( const key in edges ) {\n\n\t\t\t\tconst e = edges[ key ];\n\n\t\t\t\tlet vertex = geometry.vertices[ e.index1 ];\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\tvertex = geometry.vertices[ e.index2 ];\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t} else if ( geometry && geometry.isBufferGeometry ) {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t// indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\tconst indices = geometry.index;\n\t\t\t\tlet groups = geometry.groups;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t\t}\n\n\t\t\t\t// create a data structure that contains all eges without duplicates\n\n\t\t\t\tfor ( let o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\t\tconst group = groups[ o ];\n\n\t\t\t\t\tconst start = group.start;\n\t\t\t\t\tconst count = group.count;\n\n\t\t\t\t\tfor ( let i = start, l = ( start + count ); i < l; i += 3 ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\tconst edge1 = indices.getX( i + j );\n\t\t\t\t\t\t\tconst edge2 = indices.getX( i + ( j + 1 ) % 3 );\n\t\t\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\t\t\tconst key = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// generate vertices\n\n\t\t\t\tfor ( const key in edges ) {\n\n\t\t\t\t\tconst e = edges[ key ];\n\n\t\t\t\t\tvertex.fromBufferAttribute( position, e.index1 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\tvertex.fromBufferAttribute( position, e.index2 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\n\t\t\t\tfor ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\t\tconst index1 = 3 * i + j;\n\t\t\t\t\t\tvertex.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t\tconst index2 = 3 * i + ( ( j + 1 ) % 3 );\n\t\t\t\t\t\tvertex.fromBufferAttribute( position, index2 );\n\t\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n}\n\nvar Geometries = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBoxGeometry: BoxGeometry,\n\tBoxBufferGeometry: BoxBufferGeometry,\n\tCircleGeometry: CircleGeometry,\n\tCircleBufferGeometry: CircleBufferGeometry,\n\tConeGeometry: ConeGeometry,\n\tConeBufferGeometry: ConeBufferGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tCylinderBufferGeometry: CylinderBufferGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tDodecahedronBufferGeometry: DodecahedronBufferGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tExtrudeBufferGeometry: ExtrudeBufferGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tIcosahedronBufferGeometry: IcosahedronBufferGeometry,\n\tLatheGeometry: LatheGeometry,\n\tLatheBufferGeometry: LatheBufferGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tOctahedronBufferGeometry: OctahedronBufferGeometry,\n\tParametricGeometry: ParametricGeometry,\n\tParametricBufferGeometry: ParametricBufferGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPlaneBufferGeometry: PlaneBufferGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tPolyhedronBufferGeometry: PolyhedronBufferGeometry,\n\tRingGeometry: RingGeometry,\n\tRingBufferGeometry: RingBufferGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tShapeBufferGeometry: ShapeBufferGeometry,\n\tSphereGeometry: SphereGeometry,\n\tSphereBufferGeometry: SphereBufferGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTetrahedronBufferGeometry: TetrahedronBufferGeometry,\n\tTextGeometry: TextGeometry,\n\tTextBufferGeometry: TextBufferGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusBufferGeometry: TorusBufferGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTorusKnotBufferGeometry: TorusKnotBufferGeometry,\n\tTubeGeometry: TubeGeometry,\n\tTubeBufferGeometry: TubeBufferGeometry,\n\tWireframeGeometry: WireframeGeometry\n});\n\n/**\n * parameters = {\n * color: \n * }\n */\n\nfunction ShadowMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'ShadowMaterial';\n\n\tthis.color = new Color( 0x000000 );\n\tthis.transparent = true;\n\n\tthis.setValues( parameters );\n\n}\n\nShadowMaterial.prototype = Object.create( Material.prototype );\nShadowMaterial.prototype.constructor = ShadowMaterial;\n\nShadowMaterial.prototype.isShadowMaterial = true;\n\nShadowMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\treturn this;\n\n};\n\nfunction RawShaderMaterial( parameters ) {\n\n\tShaderMaterial.call( this, parameters );\n\n\tthis.type = 'RawShaderMaterial';\n\n}\n\nRawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype );\nRawShaderMaterial.prototype.constructor = RawShaderMaterial;\n\nRawShaderMaterial.prototype.isRawShaderMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n * roughness: ,\n * metalness: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * roughnessMap: new THREE.Texture( ),\n *\n * metalnessMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * envMapIntensity: \n *\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshStandardMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.defines = { 'STANDARD': '' };\n\n\tthis.type = 'MeshStandardMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\tthis.roughness = 1.0;\n\tthis.metalness = 0.0;\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.roughnessMap = null;\n\n\tthis.metalnessMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.envMapIntensity = 1.0;\n\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.vertexTangents = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshStandardMaterial.prototype = Object.create( Material.prototype );\nMeshStandardMaterial.prototype.constructor = MeshStandardMaterial;\n\nMeshStandardMaterial.prototype.isMeshStandardMaterial = true;\n\nMeshStandardMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = { 'STANDARD': '' };\n\n\tthis.color.copy( source.color );\n\tthis.roughness = source.roughness;\n\tthis.metalness = source.metalness;\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.roughnessMap = source.roughnessMap;\n\n\tthis.metalnessMap = source.metalnessMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.envMapIntensity = source.envMapIntensity;\n\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\tthis.vertexTangents = source.vertexTangents;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n * clearcoat: ,\n * clearcoatMap: new THREE.Texture( ),\n * clearcoatRoughness: ,\n * clearcoatRoughnessMap: new THREE.Texture( ),\n * clearcoatNormalScale: ,\n * clearcoatNormalMap: new THREE.Texture( ),\n *\n * reflectivity: ,\n * ior: ,\n *\n * sheen: ,\n *\n * transmission: ,\n * transmissionMap: new THREE.Texture( )\n * }\n */\n\nfunction MeshPhysicalMaterial( parameters ) {\n\n\tMeshStandardMaterial.call( this );\n\n\tthis.defines = {\n\n\t\t'STANDARD': '',\n\t\t'PHYSICAL': ''\n\n\t};\n\n\tthis.type = 'MeshPhysicalMaterial';\n\n\tthis.clearcoat = 0.0;\n\tthis.clearcoatMap = null;\n\tthis.clearcoatRoughness = 0.0;\n\tthis.clearcoatRoughnessMap = null;\n\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\tthis.clearcoatNormalMap = null;\n\n\tthis.reflectivity = 0.5; // maps to F0 = 0.04\n\n\tObject.defineProperty( this, 'ior', {\n\t\tget: function () {\n\n\t\t\treturn ( 1 + 0.4 * this.reflectivity ) / ( 1 - 0.4 * this.reflectivity );\n\n\t\t},\n\t\tset: function ( ior ) {\n\n\t\t\tthis.reflectivity = MathUtils.clamp( 2.5 * ( ior - 1 ) / ( ior + 1 ), 0, 1 );\n\n\t\t}\n\t} );\n\n\tthis.sheen = null; // null will disable sheen bsdf\n\n\tthis.transmission = 0.0;\n\tthis.transmissionMap = null;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype );\nMeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial;\n\nMeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true;\n\nMeshPhysicalMaterial.prototype.copy = function ( source ) {\n\n\tMeshStandardMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = {\n\n\t\t'STANDARD': '',\n\t\t'PHYSICAL': ''\n\n\t};\n\n\tthis.clearcoat = source.clearcoat;\n\tthis.clearcoatMap = source.clearcoatMap;\n\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\tthis.reflectivity = source.reflectivity;\n\n\tif ( source.sheen ) {\n\n\t\tthis.sheen = ( this.sheen || new Color() ).copy( source.sheen );\n\n\t} else {\n\n\t\tthis.sheen = null;\n\n\t}\n\n\tthis.transmission = source.transmission;\n\tthis.transmissionMap = source.transmissionMap;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n * color: ,\n * specular: ,\n * shininess: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.MultiplyOperation,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshPhongMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshPhongMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\tthis.specular = new Color( 0x111111 );\n\tthis.shininess = 30;\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshPhongMaterial.prototype = Object.create( Material.prototype );\nMeshPhongMaterial.prototype.constructor = MeshPhongMaterial;\n\nMeshPhongMaterial.prototype.isMeshPhongMaterial = true;\n\nMeshPhongMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\tthis.specular.copy( source.specular );\n\tthis.shininess = source.shininess;\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n * color: ,\n *\n * map: new THREE.Texture( ),\n * gradientMap: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * alphaMap: new THREE.Texture( ),\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshToonMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.defines = { 'TOON': '' };\n\n\tthis.type = 'MeshToonMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.map = null;\n\tthis.gradientMap = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.alphaMap = null;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshToonMaterial.prototype = Object.create( Material.prototype );\nMeshToonMaterial.prototype.constructor = MeshToonMaterial;\n\nMeshToonMaterial.prototype.isMeshToonMaterial = true;\n\nMeshToonMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\tthis.gradientMap = source.gradientMap;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n * opacity: ,\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * wireframe: ,\n * wireframeLinewidth: \n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshNormalMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshNormalMaterial';\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshNormalMaterial.prototype = Object.create( Material.prototype );\nMeshNormalMaterial.prototype.constructor = MeshNormalMaterial;\n\nMeshNormalMaterial.prototype.isMeshNormalMaterial = true;\n\nMeshNormalMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshLambertMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshLambertMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshLambertMaterial.prototype = Object.create( Material.prototype );\nMeshLambertMaterial.prototype.constructor = MeshLambertMaterial;\n\nMeshLambertMaterial.prototype.isMeshLambertMaterial = true;\n\nMeshLambertMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * matcap: new THREE.Texture( ),\n *\n * map: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * alphaMap: new THREE.Texture( ),\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshMatcapMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.defines = { 'MATCAP': '' };\n\n\tthis.type = 'MeshMatcapMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\n\tthis.matcap = null;\n\n\tthis.map = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.alphaMap = null;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshMatcapMaterial.prototype = Object.create( Material.prototype );\nMeshMatcapMaterial.prototype.constructor = MeshMatcapMaterial;\n\nMeshMatcapMaterial.prototype.isMeshMatcapMaterial = true;\n\nMeshMatcapMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = { 'MATCAP': '' };\n\n\tthis.color.copy( source.color );\n\n\tthis.matcap = source.matcap;\n\n\tthis.map = source.map;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * linewidth: ,\n *\n * scale: ,\n * dashSize: ,\n * gapSize: \n * }\n */\n\nfunction LineDashedMaterial( parameters ) {\n\n\tLineBasicMaterial.call( this );\n\n\tthis.type = 'LineDashedMaterial';\n\n\tthis.scale = 1;\n\tthis.dashSize = 3;\n\tthis.gapSize = 1;\n\n\tthis.setValues( parameters );\n\n}\n\nLineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype );\nLineDashedMaterial.prototype.constructor = LineDashedMaterial;\n\nLineDashedMaterial.prototype.isLineDashedMaterial = true;\n\nLineDashedMaterial.prototype.copy = function ( source ) {\n\n\tLineBasicMaterial.prototype.copy.call( this, source );\n\n\tthis.scale = source.scale;\n\tthis.dashSize = source.dashSize;\n\tthis.gapSize = source.gapSize;\n\n\treturn this;\n\n};\n\nvar Materials = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tShadowMaterial: ShadowMaterial,\n\tSpriteMaterial: SpriteMaterial,\n\tRawShaderMaterial: RawShaderMaterial,\n\tShaderMaterial: ShaderMaterial,\n\tPointsMaterial: PointsMaterial,\n\tMeshPhysicalMaterial: MeshPhysicalMaterial,\n\tMeshStandardMaterial: MeshStandardMaterial,\n\tMeshPhongMaterial: MeshPhongMaterial,\n\tMeshToonMaterial: MeshToonMaterial,\n\tMeshNormalMaterial: MeshNormalMaterial,\n\tMeshLambertMaterial: MeshLambertMaterial,\n\tMeshDepthMaterial: MeshDepthMaterial,\n\tMeshDistanceMaterial: MeshDistanceMaterial,\n\tMeshBasicMaterial: MeshBasicMaterial,\n\tMeshMatcapMaterial: MeshMatcapMaterial,\n\tLineDashedMaterial: LineDashedMaterial,\n\tLineBasicMaterial: LineBasicMaterial,\n\tMaterial: Material\n});\n\nconst AnimationUtils = {\n\n\t// same as Array.prototype.slice, but also works on typed arrays\n\tarraySlice: function ( array, from, to ) {\n\n\t\tif ( AnimationUtils.isTypedArray( array ) ) {\n\n\t\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\t\treturn new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );\n\n\t\t}\n\n\t\treturn array.slice( from, to );\n\n\t},\n\n\t// converts an array to a specific type\n\tconvertArray: function ( array, type, forceClone ) {\n\n\t\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t\t! forceClone && array.constructor === type ) return array;\n\n\t\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\t\treturn new type( array ); // create typed array\n\n\t\t}\n\n\t\treturn Array.prototype.slice.call( array ); // create Array\n\n\t},\n\n\tisTypedArray: function ( object ) {\n\n\t\treturn ArrayBuffer.isView( object ) &&\n\t\t\t! ( object instanceof DataView );\n\n\t},\n\n\t// returns an array by which times and values can be sorted\n\tgetKeyframeOrder: function ( times ) {\n\n\t\tfunction compareTime( i, j ) {\n\n\t\t\treturn times[ i ] - times[ j ];\n\n\t\t}\n\n\t\tconst n = times.length;\n\t\tconst result = new Array( n );\n\t\tfor ( let i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\t\tresult.sort( compareTime );\n\n\t\treturn result;\n\n\t},\n\n\t// uses the array previously returned by 'getKeyframeOrder' to sort data\n\tsortedArray: function ( values, stride, order ) {\n\n\t\tconst nValues = values.length;\n\t\tconst result = new values.constructor( nValues );\n\n\t\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\t\tconst srcOffset = order[ i ] * stride;\n\n\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// function for parsing AOS keyframe formats\n\tflattenJSON: function ( jsonKeys, times, values, valuePropertyName ) {\n\n\t\tlet i = 1, key = jsonKeys[ 0 ];\n\n\t\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t}\n\n\t\tif ( key === undefined ) return; // no data\n\n\t\tlet value = key[ valuePropertyName ];\n\t\tif ( value === undefined ) return; // no data\n\n\t\tif ( Array.isArray( value ) ) {\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else if ( value.toArray !== undefined ) {\n\n\t\t\t// ...assume THREE.Math-ish\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else {\n\n\t\t\t// otherwise push as-is\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push( value );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t}\n\n\t},\n\n\tsubclip: function ( sourceClip, name, startFrame, endFrame, fps = 30 ) {\n\n\t\tconst clip = sourceClip.clone();\n\n\t\tclip.name = name;\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tconst track = clip.tracks[ i ];\n\t\t\tconst valueSize = track.getValueSize();\n\n\t\t\tconst times = [];\n\t\t\tconst values = [];\n\n\t\t\tfor ( let j = 0; j < track.times.length; ++ j ) {\n\n\t\t\t\tconst frame = track.times[ j ] * fps;\n\n\t\t\t\tif ( frame < startFrame || frame >= endFrame ) continue;\n\n\t\t\t\ttimes.push( track.times[ j ] );\n\n\t\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\t\tvalues.push( track.values[ j * valueSize + k ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( times.length === 0 ) continue;\n\n\t\t\ttrack.times = AnimationUtils.convertArray( times, track.times.constructor );\n\t\t\ttrack.values = AnimationUtils.convertArray( values, track.values.constructor );\n\n\t\t\ttracks.push( track );\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\t// find minimum .times value across all tracks in the trimmed clip\n\n\t\tlet minStartTime = Infinity;\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tif ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {\n\n\t\t\t\tminStartTime = clip.tracks[ i ].times[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// shift all tracks such that clip begins at t=0\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tclip.tracks[ i ].shift( - 1 * minStartTime );\n\n\t\t}\n\n\t\tclip.resetDuration();\n\n\t\treturn clip;\n\n\t},\n\n\tmakeClipAdditive: function ( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {\n\n\t\tif ( fps <= 0 ) fps = 30;\n\n\t\tconst numTracks = referenceClip.tracks.length;\n\t\tconst referenceTime = referenceFrame / fps;\n\n\t\t// Make each track's values relative to the values at the reference frame\n\t\tfor ( let i = 0; i < numTracks; ++ i ) {\n\n\t\t\tconst referenceTrack = referenceClip.tracks[ i ];\n\t\t\tconst referenceTrackType = referenceTrack.ValueTypeName;\n\n\t\t\t// Skip this track if it's non-numeric\n\t\t\tif ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;\n\n\t\t\t// Find the track in the target clip whose name and type matches the reference track\n\t\t\tconst targetTrack = targetClip.tracks.find( function ( track ) {\n\n\t\t\t\treturn track.name === referenceTrack.name\n\t\t\t\t\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t\t} );\n\n\t\t\tif ( targetTrack === undefined ) continue;\n\n\t\t\tlet referenceOffset = 0;\n\t\t\tconst referenceValueSize = referenceTrack.getValueSize();\n\n\t\t\tif ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\treferenceOffset = referenceValueSize / 3;\n\n\t\t\t}\n\n\t\t\tlet targetOffset = 0;\n\t\t\tconst targetValueSize = targetTrack.getValueSize();\n\n\t\t\tif ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\ttargetOffset = targetValueSize / 3;\n\n\t\t\t}\n\n\t\t\tconst lastIndex = referenceTrack.times.length - 1;\n\t\t\tlet referenceValue;\n\n\t\t\t// Find the value to subtract out of the track\n\t\t\tif ( referenceTime <= referenceTrack.times[ 0 ] ) {\n\n\t\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\t\tconst startIndex = referenceOffset;\n\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t\t} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {\n\n\t\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\t\tconst startIndex = lastIndex * referenceValueSize + referenceOffset;\n\t\t\t\tconst endIndex = startIndex + referenceValueSize - referenceOffset;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t\t} else {\n\n\t\t\t\t// Interpolate to the reference value\n\t\t\t\tconst interpolant = referenceTrack.createInterpolant();\n\t\t\t\tconst startIndex = referenceOffset;\n\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( interpolant.resultBuffer, startIndex, endIndex );\n\n\t\t\t}\n\n\t\t\t// Conjugate the quaternion\n\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\tconst referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate();\n\t\t\t\treferenceQuat.toArray( referenceValue );\n\n\t\t\t}\n\n\t\t\t// Subtract the reference value from all of the track values\n\n\t\t\tconst numTimes = targetTrack.times.length;\n\t\t\tfor ( let j = 0; j < numTimes; ++ j ) {\n\n\t\t\t\tconst valueStart = j * targetValueSize + targetOffset;\n\n\t\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\t\tQuaternion.multiplyQuaternionsFlat(\n\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\tvalueStart,\n\t\t\t\t\t\treferenceValue,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\tvalueStart\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst valueEnd = targetValueSize - targetOffset * 2;\n\n\t\t\t\t\t// Subtract each value for all other numeric track types\n\t\t\t\t\tfor ( let k = 0; k < valueEnd; ++ k ) {\n\n\t\t\t\t\t\ttargetTrack.values[ valueStart + k ] -= referenceValue[ k ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\ttargetClip.blendMode = AdditiveAnimationBlendMode;\n\n\t\treturn targetClip;\n\n\t}\n\n};\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n */\n\nfunction Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tthis.parameterPositions = parameterPositions;\n\tthis._cachedIndex = 0;\n\n\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\tthis.sampleValues = sampleValues;\n\tthis.valueSize = sampleSize;\n\n}\n\nObject.assign( Interpolant.prototype, {\n\n\tevaluate: function ( t ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet i1 = this._cachedIndex,\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tlet right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t, t0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tconst t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tconst mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.afterEnd_( i1 - 1, t0, t );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t},\n\n\tsettings: null, // optional, subclass-specific settings structure\n\t// Note: The indirection allows central control of many interpolants.\n\n\t// --- Protected interface\n\n\tDefaultSettings_: {},\n\n\tgetSettings_: function () {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t},\n\n\tcopySampleValue_: function ( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// Template methods for derived classes:\n\n\tinterpolate_: function ( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t},\n\n\tintervalChanged_: function ( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n} );\n\n// DECLARE ALIAS AFTER assign prototype\nObject.assign( Interpolant.prototype, {\n\n\t//( 0, t, t0 ), returns this.resultBuffer\n\tbeforeStart_: Interpolant.prototype.copySampleValue_,\n\n\t//( N-1, tN-1, t ), returns this.resultBuffer\n\tafterEnd_: Interpolant.prototype.copySampleValue_,\n\n} );\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n */\n\nfunction CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\tthis._weightPrev = - 0;\n\tthis._offsetPrev = - 0;\n\tthis._weightNext = - 0;\n\tthis._offsetNext = - 0;\n\n}\n\nCubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: CubicInterpolant,\n\n\tDefaultSettings_: {\n\n\t\tendingStart: ZeroCurvatureEnding,\n\t\tendingEnd: ZeroCurvatureEnding\n\n\t},\n\n\tintervalChanged_: function ( i1, t0, t1 ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet iPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t},\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tconst s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tconst s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\nfunction LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: LinearInterpolant,\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceeding\n * the parameter.\n */\n\nfunction DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nDiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: DiscreteInterpolant,\n\n\tinterpolate_: function ( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n} );\n\nfunction KeyframeTrack( name, times, values, interpolation ) {\n\n\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\tthis.name = name;\n\n\tthis.times = AnimationUtils.convertArray( times, this.TimeBufferType );\n\tthis.values = AnimationUtils.convertArray( values, this.ValueBufferType );\n\n\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n}\n\n// Static methods\n\nObject.assign( KeyframeTrack, {\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\ttoJSON: function ( track ) {\n\n\t\tconst trackType = track.constructor;\n\n\t\tlet json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== undefined ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': AnimationUtils.convertArray( track.times, Array ),\n\t\t\t\t'values': AnimationUtils.convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tconst interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t}\n\n} );\n\nObject.assign( KeyframeTrack.prototype, {\n\n\tconstructor: KeyframeTrack,\n\n\tTimeBufferType: Float32Array,\n\n\tValueBufferType: Float32Array,\n\n\tDefaultInterpolation: InterpolateLinear,\n\n\tInterpolantFactoryMethodDiscrete: function ( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodSmooth: function ( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tsetInterpolation: function ( interpolation ) {\n\n\t\tlet factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tconst message = \"unsupported interpolation for \" +\n\t\t\t\tthis.ValueTypeName + \" keyframe track named \" + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\n\n\t},\n\n\tgetInterpolation: function () {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t},\n\n\tgetValueSize: function () {\n\n\t\treturn this.values.length / this.times.length;\n\n\t},\n\n\t// move all keyframes either forwards or backwards in time\n\tshift: function ( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale: function ( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim: function ( startTime, endTime ) {\n\n\t\tconst times = this.times,\n\t\t\tnKeys = times.length;\n\n\t\tlet from = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) {\n\n\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\tfrom = to - 1;\n\n\t\t\t}\n\n\t\t\tconst stride = this.getValueSize();\n\t\t\tthis.times = AnimationUtils.arraySlice( times, from, to );\n\t\t\tthis.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate: function () {\n\n\t\tlet valid = true;\n\n\t\tconst valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tconst times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tlet prevTime = null;\n\n\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tconst currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( AnimationUtils.isTypedArray( values ) ) {\n\n\t\t\t\tfor ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t},\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize: function () {\n\n\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\tconst times = AnimationUtils.arraySlice( this.times ),\n\t\t\tvalues = AnimationUtils.arraySlice( this.values ),\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\tlastIndex = times.length - 1;\n\n\t\tlet writeIndex = 1;\n\n\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tlet keep = false;\n\n\t\t\tconst time = times[ i ];\n\t\t\tconst timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tconst offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tconst value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tconst readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = AnimationUtils.arraySlice( times, 0, writeIndex );\n\t\t\tthis.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride );\n\n\t\t} else {\n\n\t\t\tthis.times = times;\n\t\t\tthis.values = values;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\tconst times = AnimationUtils.arraySlice( this.times, 0 );\n\t\tconst values = AnimationUtils.arraySlice( this.values, 0 );\n\n\t\tconst TypedKeyframeTrack = this.constructor;\n\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\treturn track;\n\n\t}\n\n} );\n\n/**\n * A Track of Boolean keyframe values.\n */\n\nfunction BooleanKeyframeTrack( name, times, values ) {\n\n\tKeyframeTrack.call( this, name, times, values );\n\n}\n\nBooleanKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: BooleanKeyframeTrack,\n\n\tValueTypeName: 'bool',\n\tValueBufferType: Array,\n\n\tDefaultInterpolation: InterpolateDiscrete,\n\n\tInterpolantFactoryMethodLinear: undefined,\n\tInterpolantFactoryMethodSmooth: undefined\n\n\t// Note: Actually this track could have a optimized / compressed\n\t// representation of a single value and a custom interpolant that\n\t// computes \"firstValue ^ isOdd( index )\".\n\n} );\n\n/**\n * A Track of keyframe values that represent color.\n */\n\nfunction ColorKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nColorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: ColorKeyframeTrack,\n\n\tValueTypeName: 'color'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n\t// Note: Very basic implementation and nothing special yet.\n\t// However, this is the place for color space parameterization.\n\n} );\n\n/**\n * A Track of numeric keyframe values.\n */\n\nfunction NumberKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nNumberKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: NumberKeyframeTrack,\n\n\tValueTypeName: 'number'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n} );\n\n/**\n * Spherical linear unit quaternion interpolant.\n */\n\nfunction QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nQuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: QuaternionLinearInterpolant,\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tlet offset = i1 * stride;\n\n\t\tfor ( let end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n * A Track of quaternion keyframe values.\n */\n\nfunction QuaternionKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nQuaternionKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: QuaternionKeyframeTrack,\n\n\tValueTypeName: 'quaternion',\n\n\t// ValueBufferType is inherited\n\n\tDefaultInterpolation: InterpolateLinear,\n\n\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodSmooth: undefined // not yet implemented\n\n} );\n\n/**\n * A Track that interpolates Strings\n */\n\nfunction StringKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nStringKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: StringKeyframeTrack,\n\n\tValueTypeName: 'string',\n\tValueBufferType: Array,\n\n\tDefaultInterpolation: InterpolateDiscrete,\n\n\tInterpolantFactoryMethodLinear: undefined,\n\n\tInterpolantFactoryMethodSmooth: undefined\n\n} );\n\n/**\n * A Track of vectored keyframe values.\n */\n\nfunction VectorKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nVectorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: VectorKeyframeTrack,\n\n\tValueTypeName: 'vector'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n} );\n\nfunction AnimationClip( name, duration, tracks, blendMode ) {\n\n\tthis.name = name;\n\tthis.tracks = tracks;\n\tthis.duration = ( duration !== undefined ) ? duration : - 1;\n\tthis.blendMode = ( blendMode !== undefined ) ? blendMode : NormalAnimationBlendMode;\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\t// this means it should figure out its duration by scanning the tracks\n\tif ( this.duration < 0 ) {\n\n\t\tthis.resetDuration();\n\n\t}\n\n}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tconst times = [], values = [];\n\n\t\tAnimationUtils.flattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\nObject.assign( AnimationClip, {\n\n\tparse: function ( json ) {\n\n\t\tconst tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\tconst clip = new AnimationClip( json.name, json.duration, tracks, json.blendMode );\n\t\tclip.uuid = json.uuid;\n\n\t\treturn clip;\n\n\t},\n\n\ttoJSON: function ( clip ) {\n\n\t\tconst tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tconst json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid,\n\t\t\t'blendMode': clip.blendMode\n\n\t\t};\n\n\t\tfor ( let i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t},\n\n\tCreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tconst numMorphTargets = morphTargetSequence.length;\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tlet times = [];\n\t\t\tlet values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tconst order = AnimationUtils.getKeyframeOrder( times );\n\t\t\ttimes = AnimationUtils.sortedArray( times, 1, order );\n\t\t\tvalues = AnimationUtils.sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new AnimationClip( name, - 1, tracks );\n\n\t},\n\n\tfindByName: function ( objectOrClipArray, name ) {\n\n\t\tlet clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tconst o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\tCreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) {\n\n\t\tconst animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tconst pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst clips = [];\n\n\t\tfor ( const name in animationToMorphTargets ) {\n\n\t\t\tclips.push( AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t},\n\n\t// parse the animation.hierarchy format\n\tparseAnimation: function ( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst values = [];\n\n\t\t\t\tAnimationUtils.flattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tconst tracks = [];\n\n\t\tconst clipName = animation.name || 'default';\n\t\tconst fps = animation.fps || 30;\n\t\tconst blendMode = animation.blendMode;\n\n\t\t// automatic length determination in AnimationClip.\n\t\tlet duration = animation.length || - 1;\n\n\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tconst animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tconst morphTargetNames = {};\n\n\t\t\t\tlet k;\n\n\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tconst animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * ( fps || 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tconst boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst clip = new AnimationClip( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n} );\n\nObject.assign( AnimationClip.prototype, {\n\n\tresetDuration: function () {\n\n\t\tconst tracks = this.tracks;\n\t\tlet duration = 0;\n\n\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tconst track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t\treturn this;\n\n\t},\n\n\ttrim: function () {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tvalidate: function () {\n\n\t\tlet valid = true;\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t},\n\n\toptimize: function () {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t}\n\n\t\treturn new AnimationClip( this.name, this.duration, tracks, this.blendMode );\n\n\t},\n\n\ttoJSON: function () {\n\n\t\treturn AnimationClip.toJSON( this );\n\n\t}\n\n} );\n\nconst Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\nfunction LoadingManager( onLoad, onProgress, onError ) {\n\n\tconst scope = this;\n\n\tlet isLoading = false;\n\tlet itemsLoaded = 0;\n\tlet itemsTotal = 0;\n\tlet urlModifier = undefined;\n\tconst handlers = [];\n\n\t// Refer to #5689 for the reason why we don't set .onStart\n\t// in the constructor\n\n\tthis.onStart = undefined;\n\tthis.onLoad = onLoad;\n\tthis.onProgress = onProgress;\n\tthis.onError = onError;\n\n\tthis.itemStart = function ( url ) {\n\n\t\titemsTotal ++;\n\n\t\tif ( isLoading === false ) {\n\n\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tisLoading = true;\n\n\t};\n\n\tthis.itemEnd = function ( url ) {\n\n\t\titemsLoaded ++;\n\n\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t}\n\n\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\tisLoading = false;\n\n\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\tscope.onLoad();\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.itemError = function ( url ) {\n\n\t\tif ( scope.onError !== undefined ) {\n\n\t\t\tscope.onError( url );\n\n\t\t}\n\n\t};\n\n\tthis.resolveURL = function ( url ) {\n\n\t\tif ( urlModifier ) {\n\n\t\t\treturn urlModifier( url );\n\n\t\t}\n\n\t\treturn url;\n\n\t};\n\n\tthis.setURLModifier = function ( transform ) {\n\n\t\turlModifier = transform;\n\n\t\treturn this;\n\n\t};\n\n\tthis.addHandler = function ( regex, loader ) {\n\n\t\thandlers.push( regex, loader );\n\n\t\treturn this;\n\n\t};\n\n\tthis.removeHandler = function ( regex ) {\n\n\t\tconst index = handlers.indexOf( regex );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\thandlers.splice( index, 2 );\n\n\t\t}\n\n\t\treturn this;\n\n\t};\n\n\tthis.getHandler = function ( file ) {\n\n\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\tconst regex = handlers[ i ];\n\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\treturn loader;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t};\n\n}\n\nconst DefaultLoadingManager = new LoadingManager();\n\nfunction Loader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\tthis.crossOrigin = 'anonymous';\n\tthis.withCredentials = false;\n\tthis.path = '';\n\tthis.resourcePath = '';\n\tthis.requestHeader = {};\n\n}\n\nObject.assign( Loader.prototype, {\n\n\tload: function ( /* url, onLoad, onProgress, onError */ ) {},\n\n\tloadAsync: function ( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t},\n\n\tparse: function ( /* data */ ) {},\n\n\tsetCrossOrigin: function ( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t},\n\n\tsetWithCredentials: function ( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t},\n\n\tsetResourcePath: function ( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t},\n\n\tsetRequestHeader: function ( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n} );\n\nconst loading = {};\n\nfunction FileLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nFileLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: FileLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Check for data: URI\n\t\tconst dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\t\tconst dataUriRegexResult = url.match( dataUriRegex );\n\t\tlet request;\n\n\t\t// Safari can not handle Data URIs through XMLHttpRequest so process manually\n\t\tif ( dataUriRegexResult ) {\n\n\t\t\tconst mimeType = dataUriRegexResult[ 1 ];\n\t\t\tconst isBase64 = !! dataUriRegexResult[ 2 ];\n\n\t\t\tlet data = dataUriRegexResult[ 3 ];\n\t\t\tdata = decodeURIComponent( data );\n\n\t\t\tif ( isBase64 ) data = atob( data );\n\n\t\t\ttry {\n\n\t\t\t\tlet response;\n\t\t\t\tconst responseType = ( this.responseType || '' ).toLowerCase();\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\tconst view = new Uint8Array( data.length );\n\n\t\t\t\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\t\t\t\tview[ i ] = data.charCodeAt( i );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( responseType === 'blob' ) {\n\n\t\t\t\t\t\t\tresponse = new Blob( [ view.buffer ], { type: mimeType } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tresponse = view.buffer;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\tconst parser = new DOMParser();\n\t\t\t\t\t\tresponse = parser.parseFromString( data, mimeType );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\tresponse = JSON.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault: // 'text' or other\n\n\t\t\t\t\t\tresponse = data;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( response );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Initialise array for duplicate requests\n\n\t\t\tloading[ url ] = [];\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\trequest = new XMLHttpRequest();\n\n\t\t\trequest.open( 'GET', url, true );\n\n\t\t\trequest.addEventListener( 'load', function ( event ) {\n\n\t\t\t\tconst response = this.response;\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tif ( this.status === 200 || this.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\t\tCache.add( url, response );\n\n\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'progress', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'error', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'abort', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, false );\n\n\t\t\tif ( this.responseType !== undefined ) request.responseType = this.responseType;\n\t\t\tif ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;\n\n\t\t\tif ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' );\n\n\t\t\tfor ( const header in this.requestHeader ) {\n\n\t\t\t\trequest.setRequestHeader( header, this.requestHeader[ header ] );\n\n\t\t\t}\n\n\t\t\trequest.send( null );\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\treturn request;\n\n\t},\n\n\tsetResponseType: function ( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t},\n\n\tsetMimeType: function ( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction AnimationLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nAnimationLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: AnimationLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tconst animations = [];\n\n\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\tconst clip = AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n} );\n\n/**\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nfunction CompressedTextureLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nCompressedTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: CompressedTextureLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst images = [];\n\n\t\tconst texture = new CompressedTexture();\n\t\ttexture.image = images;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 )\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tfor ( let i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tconst faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( let f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( let i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n} );\n\nfunction ImageLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nImageLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: ImageLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.substr( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t}\n\n} );\n\nfunction CubeTextureLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nCubeTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: CubeTextureLoader,\n\n\tload: function ( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n} );\n\n/**\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nfunction DataTextureLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nDataTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: DataTextureLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst texture = new DataTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tconst texData = scope.parse( buffer );\n\n\t\t\tif ( ! texData ) return;\n\n\t\t\tif ( texData.image !== undefined ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( texData.data !== undefined ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;\n\n\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\n\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter; // presumably...\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmapCount === 1 ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n} );\n\nfunction TextureLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: TextureLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new Texture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\n\t\t\t// JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB.\n\t\t\tconst isJPEG = url.search( /\\.jpe?g($|\\?)/i ) > 0 || url.search( /^data\\:image\\/jpeg/ ) === 0;\n\n\t\t\ttexture.format = isJPEG ? RGBFormat : RGBAFormat;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n} );\n\n/**\n * Extensible curve object.\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\nfunction Curve() {\n\n\tthis.type = 'Curve';\n\n\tthis.arcLengthDivisions = 200;\n\n}\n\nObject.assign( Curve.prototype, {\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint: function ( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t},\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt: function ( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t},\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints: function ( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints: function ( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\t// Get total curve arc length\n\n\tgetLength: function () {\n\n\t\tconst lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t},\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = this.arcLengthDivisions;\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tconst cache = [];\n\t\tlet current, last = this.getPoint( 0 );\n\t\tlet sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( let p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t},\n\n\tupdateArcLengths: function () {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t},\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping: function ( u, distance ) {\n\n\t\tconst arcLengths = this.getLengths();\n\n\t\tlet i = 0;\n\t\tconst il = arcLengths.length;\n\n\t\tlet targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tlet low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tconst lengthBefore = arcLengths[ i ];\n\t\tconst lengthAfter = arcLengths[ i + 1 ];\n\n\t\tconst segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tconst segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tconst t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t},\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent: function ( t, optionalTarget ) {\n\n\t\tconst delta = 0.0001;\n\t\tlet t1 = t - delta;\n\t\tlet t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tconst pt1 = this.getPoint( t1 );\n\t\tconst pt2 = this.getPoint( t2 );\n\n\t\tconst tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() );\n\n\t\ttangent.copy( pt2 ).sub( pt1 ).normalize();\n\n\t\treturn tangent;\n\n\t},\n\n\tgetTangentAt: function ( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t, optionalTarget );\n\n\t},\n\n\tcomputeFrenetFrames: function ( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tconst normal = new Vector3();\n\n\t\tconst tangents = [];\n\t\tconst normals = [];\n\t\tconst binormals = [];\n\n\t\tconst vec = new Vector3();\n\t\tconst mat = new Matrix4();\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst u = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u, new Vector3() );\n\t\t\ttangents[ i ].normalize();\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tlet min = Number.MAX_VALUE;\n\t\tconst tx = Math.abs( tangents[ 0 ].x );\n\t\tconst ty = Math.abs( tangents[ 0 ].y );\n\t\tconst tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\tconst theta = Math.acos( MathUtils.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\tlet theta = Math.acos( MathUtils.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'EllipseCurve';\n\n\tthis.aX = aX || 0;\n\tthis.aY = aY || 0;\n\n\tthis.xRadius = xRadius || 1;\n\tthis.yRadius = yRadius || 1;\n\n\tthis.aStartAngle = aStartAngle || 0;\n\tthis.aEndAngle = aEndAngle || 2 * Math.PI;\n\n\tthis.aClockwise = aClockwise || false;\n\n\tthis.aRotation = aRotation || 0;\n\n}\n\nEllipseCurve.prototype = Object.create( Curve.prototype );\nEllipseCurve.prototype.constructor = EllipseCurve;\n\nEllipseCurve.prototype.isEllipseCurve = true;\n\nEllipseCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tconst point = optionalTarget || new Vector2();\n\n\tconst twoPi = Math.PI * 2;\n\tlet deltaAngle = this.aEndAngle - this.aStartAngle;\n\tconst samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t// ensures that deltaAngle is 0 .. 2 PI\n\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\tif ( samePoints ) {\n\n\t\t\tdeltaAngle = 0;\n\n\t\t} else {\n\n\t\t\tdeltaAngle = twoPi;\n\n\t\t}\n\n\t}\n\n\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\tdeltaAngle = - twoPi;\n\n\t\t} else {\n\n\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t}\n\n\t}\n\n\tconst angle = this.aStartAngle + t * deltaAngle;\n\tlet x = this.aX + this.xRadius * Math.cos( angle );\n\tlet y = this.aY + this.yRadius * Math.sin( angle );\n\n\tif ( this.aRotation !== 0 ) {\n\n\t\tconst cos = Math.cos( this.aRotation );\n\t\tconst sin = Math.sin( this.aRotation );\n\n\t\tconst tx = x - this.aX;\n\t\tconst ty = y - this.aY;\n\n\t\t// Rotate the point about the center of the ellipse.\n\t\tx = tx * cos - ty * sin + this.aX;\n\t\ty = tx * sin + ty * cos + this.aY;\n\n\t}\n\n\treturn point.set( x, y );\n\n};\n\nEllipseCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.aX = source.aX;\n\tthis.aY = source.aY;\n\n\tthis.xRadius = source.xRadius;\n\tthis.yRadius = source.yRadius;\n\n\tthis.aStartAngle = source.aStartAngle;\n\tthis.aEndAngle = source.aEndAngle;\n\n\tthis.aClockwise = source.aClockwise;\n\n\tthis.aRotation = source.aRotation;\n\n\treturn this;\n\n};\n\n\nEllipseCurve.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.aX = this.aX;\n\tdata.aY = this.aY;\n\n\tdata.xRadius = this.xRadius;\n\tdata.yRadius = this.yRadius;\n\n\tdata.aStartAngle = this.aStartAngle;\n\tdata.aEndAngle = this.aEndAngle;\n\n\tdata.aClockwise = this.aClockwise;\n\n\tdata.aRotation = this.aRotation;\n\n\treturn data;\n\n};\n\nEllipseCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.aX = json.aX;\n\tthis.aY = json.aY;\n\n\tthis.xRadius = json.xRadius;\n\tthis.yRadius = json.yRadius;\n\n\tthis.aStartAngle = json.aStartAngle;\n\tthis.aEndAngle = json.aEndAngle;\n\n\tthis.aClockwise = json.aClockwise;\n\n\tthis.aRotation = json.aRotation;\n\n\treturn this;\n\n};\n\nfunction ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\tEllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\tthis.type = 'ArcCurve';\n\n}\n\nArcCurve.prototype = Object.create( EllipseCurve.prototype );\nArcCurve.prototype.constructor = ArcCurve;\n\nArcCurve.prototype.isArcCurve = true;\n\n/**\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tlet c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t * p(0) = x0, p(1) = x1\n\t * and\n\t * p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tlet t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tlet t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tconst t2 = t * t;\n\t\t\tconst t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nconst tmp = new Vector3();\nconst px = new CubicPoly(), py = new CubicPoly(), pz = new CubicPoly();\n\nfunction CatmullRomCurve3( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CatmullRomCurve3';\n\n\tthis.points = points;\n\tthis.closed = closed;\n\tthis.curveType = curveType;\n\tthis.tension = tension;\n\n}\n\nCatmullRomCurve3.prototype = Object.create( Curve.prototype );\nCatmullRomCurve3.prototype.constructor = CatmullRomCurve3;\n\nCatmullRomCurve3.prototype.isCatmullRomCurve3 = true;\n\nCatmullRomCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) {\n\n\tconst point = optionalTarget;\n\n\tconst points = this.points;\n\tconst l = points.length;\n\n\tconst p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\tlet intPoint = Math.floor( p );\n\tlet weight = p - intPoint;\n\n\tif ( this.closed ) {\n\n\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\tintPoint = l - 2;\n\t\tweight = 1;\n\n\t}\n\n\tlet p0, p3; // 4 points (p1 & p2 defined below)\n\n\tif ( this.closed || intPoint > 0 ) {\n\n\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t} else {\n\n\t\t// extrapolate first point\n\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\tp0 = tmp;\n\n\t}\n\n\tconst p1 = points[ intPoint % l ];\n\tconst p2 = points[ ( intPoint + 1 ) % l ];\n\n\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t} else {\n\n\t\t// extrapolate last point\n\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\tp3 = tmp;\n\n\t}\n\n\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t// init Centripetal / Chordal Catmull-Rom\n\t\tconst pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\tlet dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\tlet dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\tlet dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t// safety check for repeated points\n\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t}\n\n\tpoint.set(\n\t\tpx.calc( weight ),\n\t\tpy.calc( weight ),\n\t\tpz.calc( weight )\n\t);\n\n\treturn point;\n\n};\n\nCatmullRomCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.points = [];\n\n\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\tconst point = source.points[ i ];\n\n\t\tthis.points.push( point.clone() );\n\n\t}\n\n\tthis.closed = source.closed;\n\tthis.curveType = source.curveType;\n\tthis.tension = source.tension;\n\n\treturn this;\n\n};\n\nCatmullRomCurve3.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.points = [];\n\n\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\tconst point = this.points[ i ];\n\t\tdata.points.push( point.toArray() );\n\n\t}\n\n\tdata.closed = this.closed;\n\tdata.curveType = this.curveType;\n\tdata.tension = this.tension;\n\n\treturn data;\n\n};\n\nCatmullRomCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.points = [];\n\n\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\tconst point = json.points[ i ];\n\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t}\n\n\tthis.closed = json.closed;\n\tthis.curveType = json.curveType;\n\tthis.tension = json.tension;\n\n\treturn this;\n\n};\n\n/**\n * Bezier Curves formulas obtained from\n * http://en.wikipedia.org/wiki/Bézier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tconst v0 = ( p2 - p0 ) * 0.5;\n\tconst v1 = ( p3 - p1 ) * 0.5;\n\tconst t2 = t * t;\n\tconst t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tconst k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\nfunction CubicBezierCurve( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CubicBezierCurve';\n\n\tthis.v0 = v0;\n\tthis.v1 = v1;\n\tthis.v2 = v2;\n\tthis.v3 = v3;\n\n}\n\nCubicBezierCurve.prototype = Object.create( Curve.prototype );\nCubicBezierCurve.prototype.constructor = CubicBezierCurve;\n\nCubicBezierCurve.prototype.isCubicBezierCurve = true;\n\nCubicBezierCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) {\n\n\tconst point = optionalTarget;\n\n\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\tpoint.set(\n\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t);\n\n\treturn point;\n\n};\n\nCubicBezierCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\tthis.v3.copy( source.v3 );\n\n\treturn this;\n\n};\n\nCubicBezierCurve.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\tdata.v3 = this.v3.toArray();\n\n\treturn data;\n\n};\n\nCubicBezierCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\tthis.v3.fromArray( json.v3 );\n\n\treturn this;\n\n};\n\nfunction CubicBezierCurve3( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CubicBezierCurve3';\n\n\tthis.v0 = v0;\n\tthis.v1 = v1;\n\tthis.v2 = v2;\n\tthis.v3 = v3;\n\n}\n\nCubicBezierCurve3.prototype = Object.create( Curve.prototype );\nCubicBezierCurve3.prototype.constructor = CubicBezierCurve3;\n\nCubicBezierCurve3.prototype.isCubicBezierCurve3 = true;\n\nCubicBezierCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) {\n\n\tconst point = optionalTarget;\n\n\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\tpoint.set(\n\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t);\n\n\treturn point;\n\n};\n\nCubicBezierCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\tthis.v3.copy( source.v3 );\n\n\treturn this;\n\n};\n\nCubicBezierCurve3.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\tdata.v3 = this.v3.toArray();\n\n\treturn data;\n\n};\n\nCubicBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\tthis.v3.fromArray( json.v3 );\n\n\treturn this;\n\n};\n\nfunction LineCurve( v1 = new Vector2(), v2 = new Vector2() ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'LineCurve';\n\n\tthis.v1 = v1;\n\tthis.v2 = v2;\n\n}\n\nLineCurve.prototype = Object.create( Curve.prototype );\nLineCurve.prototype.constructor = LineCurve;\n\nLineCurve.prototype.isLineCurve = true;\n\nLineCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) {\n\n\tconst point = optionalTarget;\n\n\tif ( t === 1 ) {\n\n\t\tpoint.copy( this.v2 );\n\n\t} else {\n\n\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t}\n\n\treturn point;\n\n};\n\n// Line curve is linear, so we can overwrite default getPointAt\n\nLineCurve.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\treturn this.getPoint( u, optionalTarget );\n\n};\n\nLineCurve.prototype.getTangent = function ( t, optionalTarget ) {\n\n\tconst tangent = optionalTarget || new Vector2();\n\n\ttangent.copy( this.v2 ).sub( this.v1 ).normalize();\n\n\treturn tangent;\n\n};\n\nLineCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nLineCurve.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nLineCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction LineCurve3( v1 = new Vector3(), v2 = new Vector3() ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'LineCurve3';\n\n\tthis.v1 = v1;\n\tthis.v2 = v2;\n\n}\n\nLineCurve3.prototype = Object.create( Curve.prototype );\nLineCurve3.prototype.constructor = LineCurve3;\n\nLineCurve3.prototype.isLineCurve3 = true;\n\nLineCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) {\n\n\tconst point = optionalTarget;\n\n\tif ( t === 1 ) {\n\n\t\tpoint.copy( this.v2 );\n\n\t} else {\n\n\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t}\n\n\treturn point;\n\n};\n\n// Line curve is linear, so we can overwrite default getPointAt\n\nLineCurve3.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\treturn this.getPoint( u, optionalTarget );\n\n};\n\nLineCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nLineCurve3.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nLineCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction QuadraticBezierCurve( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'QuadraticBezierCurve';\n\n\tthis.v0 = v0;\n\tthis.v1 = v1;\n\tthis.v2 = v2;\n\n}\n\nQuadraticBezierCurve.prototype = Object.create( Curve.prototype );\nQuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve;\n\nQuadraticBezierCurve.prototype.isQuadraticBezierCurve = true;\n\nQuadraticBezierCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) {\n\n\tconst point = optionalTarget;\n\n\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\tpoint.set(\n\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t);\n\n\treturn point;\n\n};\n\nQuadraticBezierCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nQuadraticBezierCurve.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nQuadraticBezierCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction QuadraticBezierCurve3( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'QuadraticBezierCurve3';\n\n\tthis.v0 = v0;\n\tthis.v1 = v1;\n\tthis.v2 = v2;\n\n}\n\nQuadraticBezierCurve3.prototype = Object.create( Curve.prototype );\nQuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3;\n\nQuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true;\n\nQuadraticBezierCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) {\n\n\tconst point = optionalTarget;\n\n\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\tpoint.set(\n\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t);\n\n\treturn point;\n\n};\n\nQuadraticBezierCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nQuadraticBezierCurve3.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nQuadraticBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction SplineCurve( points = [] ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'SplineCurve';\n\n\tthis.points = points;\n\n}\n\nSplineCurve.prototype = Object.create( Curve.prototype );\nSplineCurve.prototype.constructor = SplineCurve;\n\nSplineCurve.prototype.isSplineCurve = true;\n\nSplineCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) {\n\n\tconst point = optionalTarget;\n\n\tconst points = this.points;\n\tconst p = ( points.length - 1 ) * t;\n\n\tconst intPoint = Math.floor( p );\n\tconst weight = p - intPoint;\n\n\tconst p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\tconst p1 = points[ intPoint ];\n\tconst p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\tconst p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\tpoint.set(\n\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t);\n\n\treturn point;\n\n};\n\nSplineCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.points = [];\n\n\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\tconst point = source.points[ i ];\n\n\t\tthis.points.push( point.clone() );\n\n\t}\n\n\treturn this;\n\n};\n\nSplineCurve.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.points = [];\n\n\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\tconst point = this.points[ i ];\n\t\tdata.points.push( point.toArray() );\n\n\t}\n\n\treturn data;\n\n};\n\nSplineCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.points = [];\n\n\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\tconst point = json.points[ i ];\n\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t}\n\n\treturn this;\n\n};\n\nvar Curves = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n * curves, but retains the api of a curve\n **************************************************************/\n\nfunction CurvePath() {\n\n\tCurve.call( this );\n\n\tthis.type = 'CurvePath';\n\n\tthis.curves = [];\n\tthis.autoClose = false; // Automatically closes the path\n\n}\n\nCurvePath.prototype = Object.assign( Object.create( Curve.prototype ), {\n\n\tconstructor: CurvePath,\n\n\tadd: function ( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t},\n\n\tclosePath: function () {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tconst startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tconst endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tthis.curves.push( new LineCurve( endPoint, startPoint ) );\n\n\t\t}\n\n\t},\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint: function ( t ) {\n\n\t\tconst d = t * this.getLength();\n\t\tconst curveLengths = this.getCurveLengths();\n\t\tlet i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tconst diff = curveLengths[ i ] - d;\n\t\t\t\tconst curve = this.curves[ i ];\n\n\t\t\t\tconst segmentLength = curve.getLength();\n\t\t\t\tconst u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction Path( points ) {\n\n\tCurvePath.call( this );\n\n\tthis.type = 'Path';\n\n\tthis.currentPoint = new Vector2();\n\n\tif ( points ) {\n\n\t\tthis.setFromPoints( points );\n\n\t}\n\n}\n\nPath.prototype = Object.assign( Object.create( CurvePath.prototype ), {\n\n\tconstructor: Path,\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( let i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tmoveTo: function ( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t\treturn this;\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tconst curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t\treturn this;\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tconst curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t},\n\n\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tconst curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t},\n\n\tsplineThru: function ( pts /*Array of Vector*/ ) {\n\n\t\tconst npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tconst curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\treturn this;\n\n\t},\n\n\tarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t},\n\n\tabsarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t},\n\n\tellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\treturn this;\n\n\t},\n\n\tabsellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tconst firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tconst lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tCurvePath.prototype.copy.call( this, source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = CurvePath.prototype.toJSON.call( this );\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tCurvePath.prototype.fromJSON.call( this, json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction Shape( points ) {\n\n\tPath.call( this, points );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.type = 'Shape';\n\n\tthis.holes = [];\n\n}\n\nShape.prototype = Object.assign( Object.create( Path.prototype ), {\n\n\tconstructor: Shape,\n\n\tgetPointsHoles: function ( divisions ) {\n\n\t\tconst holesPts = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t},\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints: function ( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tPath.prototype.copy.call( this, source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = Path.prototype.toJSON.call( this );\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tPath.prototype.fromJSON.call( this, json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction Light( color, intensity = 1 ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Light';\n\n\tthis.color = new Color( color );\n\tthis.intensity = intensity;\n\n}\n\nLight.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Light,\n\n\tisLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction HemisphereLight( skyColor, groundColor, intensity ) {\n\n\tLight.call( this, skyColor, intensity );\n\n\tthis.type = 'HemisphereLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.groundColor = new Color( groundColor );\n\n}\n\nHemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: HemisphereLight,\n\n\tisHemisphereLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction LightShadow( camera ) {\n\n\tthis.camera = camera;\n\n\tthis.bias = 0;\n\tthis.normalBias = 0;\n\tthis.radius = 1;\n\n\tthis.mapSize = new Vector2( 512, 512 );\n\n\tthis.map = null;\n\tthis.mapPass = null;\n\tthis.matrix = new Matrix4();\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis._frustum = new Frustum();\n\tthis._frameExtents = new Vector2( 1, 1 );\n\n\tthis._viewportCount = 1;\n\n\tthis._viewports = [\n\n\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t];\n\n}\n\nObject.assign( LightShadow.prototype, {\n\n\t_projScreenMatrix: new Matrix4(),\n\n\t_lightPositionWorld: new Vector3(),\n\n\t_lookTarget: new Vector3(),\n\n\tgetViewportCount: function () {\n\n\t\treturn this._viewportCount;\n\n\t},\n\n\tgetFrustum: function () {\n\n\t\treturn this._frustum;\n\n\t},\n\n\tupdateMatrices: function ( light ) {\n\n\t\tconst shadowCamera = this.camera,\n\t\t\tshadowMatrix = this.matrix,\n\t\t\tprojScreenMatrix = this._projScreenMatrix,\n\t\t\tlookTarget = this._lookTarget,\n\t\t\tlightPositionWorld = this._lightPositionWorld;\n\n\t\tlightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tshadowCamera.position.copy( lightPositionWorld );\n\n\t\tlookTarget.setFromMatrixPosition( light.target.matrixWorld );\n\t\tshadowCamera.lookAt( lookTarget );\n\t\tshadowCamera.updateMatrixWorld();\n\n\t\tprojScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( projScreenMatrix );\n\n\t\tshadowMatrix.set(\n\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t);\n\n\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\n\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\n\n\t},\n\n\tgetViewport: function ( viewportIndex ) {\n\n\t\treturn this._viewports[ viewportIndex ];\n\n\t},\n\n\tgetFrameExtents: function () {\n\n\t\treturn this._frameExtents;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst object = {};\n\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.normalBias !== 0 ) object.normalBias = this.normalBias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n} );\n\nfunction SpotLightShadow() {\n\n\tLightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\tthis.focus = 1;\n\n}\n\nSpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: SpotLightShadow,\n\n\tisSpotLightShadow: true,\n\n\tupdateMatrices: function ( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = MathUtils.RAD2DEG * 2 * light.angle * this.focus;\n\t\tconst aspect = this.mapSize.width / this.mapSize.height;\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\tLightShadow.prototype.updateMatrices.call( this, light );\n\n\t}\n\n} );\n\nfunction SpotLight( color, intensity, distance, angle, penumbra, decay ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'SpotLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.target = new Object3D();\n\n\tObject.defineProperty( this, 'power', {\n\t\tget: function () {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\treturn this.intensity * Math.PI;\n\n\t\t},\n\t\tset: function ( power ) {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\tthis.intensity = power / Math.PI;\n\n\t\t}\n\t} );\n\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\tthis.angle = ( angle !== undefined ) ? angle : Math.PI / 3;\n\tthis.penumbra = ( penumbra !== undefined ) ? penumbra : 0;\n\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\tthis.shadow = new SpotLightShadow();\n\n}\n\nSpotLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: SpotLight,\n\n\tisSpotLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction PointLightShadow() {\n\n\tLightShadow.call( this, new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\tthis._frameExtents = new Vector2( 4, 2 );\n\n\tthis._viewportCount = 6;\n\n\tthis._viewports = [\n\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t// following orientation:\n\t\t//\n\t\t// xzXZ\n\t\t// y Y\n\t\t//\n\t\t// X - Positive x direction\n\t\t// x - Negative x direction\n\t\t// Y - Positive y direction\n\t\t// y - Negative y direction\n\t\t// Z - Positive z direction\n\t\t// z - Negative z direction\n\n\t\t// positive X\n\t\tnew Vector4( 2, 1, 1, 1 ),\n\t\t// negative X\n\t\tnew Vector4( 0, 1, 1, 1 ),\n\t\t// positive Z\n\t\tnew Vector4( 3, 1, 1, 1 ),\n\t\t// negative Z\n\t\tnew Vector4( 1, 1, 1, 1 ),\n\t\t// positive Y\n\t\tnew Vector4( 3, 0, 1, 1 ),\n\t\t// negative Y\n\t\tnew Vector4( 1, 0, 1, 1 )\n\t];\n\n\tthis._cubeDirections = [\n\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t];\n\n\tthis._cubeUps = [\n\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t];\n\n}\n\nPointLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: PointLightShadow,\n\n\tisPointLightShadow: true,\n\n\tupdateMatrices: function ( light, viewportIndex = 0 ) {\n\n\t\tconst camera = this.camera,\n\t\t\tshadowMatrix = this.matrix,\n\t\t\tlightPositionWorld = this._lightPositionWorld,\n\t\t\tlookTarget = this._lookTarget,\n\t\t\tprojScreenMatrix = this._projScreenMatrix;\n\n\t\tlightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tcamera.position.copy( lightPositionWorld );\n\n\t\tlookTarget.copy( camera.position );\n\t\tlookTarget.add( this._cubeDirections[ viewportIndex ] );\n\t\tcamera.up.copy( this._cubeUps[ viewportIndex ] );\n\t\tcamera.lookAt( lookTarget );\n\t\tcamera.updateMatrixWorld();\n\n\t\tshadowMatrix.makeTranslation( - lightPositionWorld.x, - lightPositionWorld.y, - lightPositionWorld.z );\n\n\t\tprojScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( projScreenMatrix );\n\n\t}\n\n} );\n\nfunction PointLight( color, intensity, distance, decay ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'PointLight';\n\n\tObject.defineProperty( this, 'power', {\n\t\tget: function () {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\treturn this.intensity * 4 * Math.PI;\n\n\t\t},\n\t\tset: function ( power ) {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t\t}\n\t} );\n\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\tthis.shadow = new PointLightShadow();\n\n}\n\nPointLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: PointLight,\n\n\tisPointLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction OrthographicCamera( left, right, top, bottom, near, far ) {\n\n\tCamera.call( this );\n\n\tthis.type = 'OrthographicCamera';\n\n\tthis.zoom = 1;\n\tthis.view = null;\n\n\tthis.left = ( left !== undefined ) ? left : - 1;\n\tthis.right = ( right !== undefined ) ? right : 1;\n\tthis.top = ( top !== undefined ) ? top : 1;\n\tthis.bottom = ( bottom !== undefined ) ? bottom : - 1;\n\n\tthis.near = ( near !== undefined ) ? near : 0.1;\n\tthis.far = ( far !== undefined ) ? far : 2000;\n\n\tthis.updateProjectionMatrix();\n\n}\n\nOrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\tconstructor: OrthographicCamera,\n\n\tisOrthographicCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t},\n\n\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tclearViewOffset: function () {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tupdateProjectionMatrix: function () {\n\n\t\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tconst cx = ( this.right + this.left ) / 2;\n\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\tlet left = cx - dx;\n\t\tlet right = cx + dx;\n\t\tlet top = cy + dy;\n\t\tlet bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\tright = left + scaleW * this.view.width;\n\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction DirectionalLightShadow() {\n\n\tLightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n}\n\nDirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: DirectionalLightShadow,\n\n\tisDirectionalLightShadow: true,\n\n\tupdateMatrices: function ( light ) {\n\n\t\tLightShadow.prototype.updateMatrices.call( this, light );\n\n\t}\n\n} );\n\nfunction DirectionalLight( color, intensity ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'DirectionalLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.target = new Object3D();\n\n\tthis.shadow = new DirectionalLightShadow();\n\n}\n\nDirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: DirectionalLight,\n\n\tisDirectionalLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction AmbientLight( color, intensity ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'AmbientLight';\n\n}\n\nAmbientLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: AmbientLight,\n\n\tisAmbientLight: true\n\n} );\n\nfunction RectAreaLight( color, intensity, width, height ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'RectAreaLight';\n\n\tthis.width = ( width !== undefined ) ? width : 10;\n\tthis.height = ( height !== undefined ) ? height : 10;\n\n}\n\nRectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: RectAreaLight,\n\n\tisRectAreaLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Light.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * Primary reference:\n * https://graphics.stanford.edu/papers/envmap/envmap.pdf\n *\n * Secondary reference:\n * https://www.ppsloan.org/publications/StupidSH36.pdf\n */\n\n// 3-band SH defined by 9 coefficients\n\nclass SphericalHarmonics3 {\n\n\tconstructor() {\n\n\t\tObject.defineProperty( this, 'isSphericalHarmonics3', { value: true } );\n\n\t\tthis.coefficients = [];\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients.push( new Vector3() );\n\n\t\t}\n\n\t}\n\n\tset( coefficients ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].copy( coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tzero() {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].set( 0, 0, 0 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// get the radiance in the direction of the normal\n\t// target is a Vector3\n\tgetAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 );\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 0.488603 * y );\n\t\ttarget.addScaledVector( coeff[ 2 ], 0.488603 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 0.488603 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) );\n\t\ttarget.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) );\n\t\ttarget.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) );\n\n\t\treturn target;\n\n\t}\n\n\t// get the irradiance (radiance convolved with cosine lobe) in the direction of the normal\n\t// target is a Vector3\n\t// https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\tgetIrradianceAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603\n\t\ttarget.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548\n\t\ttarget.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3\n\t\ttarget.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274\n\n\t\treturn target;\n\n\t}\n\n\tadd( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].add( sh.coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\taddScaledSH( sh, s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tscale( s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].multiplyScalar( s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tlerp( sh, alpha ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].lerp( sh.coefficients[ i ], alpha );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcopy( sh ) {\n\n\t\treturn this.set( sh.coefficients );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].fromArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].toArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n\t// evaluate the basis functions\n\t// shBasis is an Array[ 9 ]\n\tstatic getBasisAt( normal, shBasis ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t// band 0\n\t\tshBasis[ 0 ] = 0.282095;\n\n\t\t// band 1\n\t\tshBasis[ 1 ] = 0.488603 * y;\n\t\tshBasis[ 2 ] = 0.488603 * z;\n\t\tshBasis[ 3 ] = 0.488603 * x;\n\n\t\t// band 2\n\t\tshBasis[ 4 ] = 1.092548 * x * y;\n\t\tshBasis[ 5 ] = 1.092548 * y * z;\n\t\tshBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 );\n\t\tshBasis[ 7 ] = 1.092548 * x * z;\n\t\tshBasis[ 8 ] = 0.546274 * ( x * x - y * y );\n\n\t}\n\n}\n\nfunction LightProbe( sh, intensity ) {\n\n\tLight.call( this, undefined, intensity );\n\n\tthis.type = 'LightProbe';\n\n\tthis.sh = ( sh !== undefined ) ? sh : new SphericalHarmonics3();\n\n}\n\nLightProbe.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: LightProbe,\n\n\tisLightProbe: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.sh.copy( source.sh );\n\n\t\treturn this;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tthis.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();\n\t\tthis.sh.fromArray( json.sh );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Light.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.sh = this.sh.toArray();\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction MaterialLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n\tthis.textures = {};\n\n}\n\nMaterialLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: MaterialLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tconst textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tconst material = new Materials[ json.type ]();\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.sheen !== undefined ) material.sheen = new Color().setHex( json.sheen );\n\t\tif ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;\n\t\tif ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.combine !== undefined ) material.combine = json.combine;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\n\t\tif ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;\n\t\tif ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;\n\t\tif ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;\n\t\tif ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;\n\t\tif ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask;\n\t\tif ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;\n\t\tif ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;\n\t\tif ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;\n\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== 1 ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.skinning !== undefined ) material.skinning = json.skinning;\n\t\tif ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets;\n\t\tif ( json.morphNormals !== undefined ) material.morphNormals = json.morphNormals;\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.vertexTangents !== undefined ) material.vertexTangents = json.vertexTangents;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\n\t\tif ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped;\n\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\tif ( json.vertexColors !== undefined ) {\n\n\t\t\tif ( typeof json.vertexColors === 'number' ) {\n\n\t\t\t\tmaterial.vertexColors = ( json.vertexColors > 0 ) ? true : false;\n\n\t\t\t} else {\n\n\t\t\t\tmaterial.vertexColors = json.vertexColors;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Shader Material\n\n\t\tif ( json.uniforms !== undefined ) {\n\n\t\t\tfor ( const name in json.uniforms ) {\n\n\t\t\t\tconst uniform = json.uniforms[ name ];\n\n\t\t\t\tmaterial.uniforms[ name ] = {};\n\n\t\t\t\tswitch ( uniform.type ) {\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = getTexture( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Color().setHex( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector2().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = uniform.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.defines !== undefined ) material.defines = json.defines;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\n\t\tif ( json.extensions !== undefined ) {\n\n\t\t\tfor ( const key in json.extensions ) {\n\n\t\t\t\tmaterial.extensions[ key ] = json.extensions[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Deprecated\n\n\t\tif ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\t\tif ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap );\n\n\t\tif ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap );\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tlet normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\t\tif ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\t\tif ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\tif ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap );\n\t\tif ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap );\n\t\tif ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap );\n\t\tif ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale );\n\n\t\tif ( json.transmission !== undefined ) material.transmission = json.transmission;\n\t\tif ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );\n\n\t\treturn material;\n\n\t},\n\n\tsetTextures: function ( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\n\n\t}\n\n} );\n\nconst LoaderUtils = {\n\n\tdecodeText: function ( array ) {\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tlet s = '';\n\n\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\t// merges multi-byte utf-8 characters.\n\n\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t} catch ( e ) { // see #16358\n\n\t\t\treturn s;\n\n\t\t}\n\n\t},\n\n\textractUrlBase: function ( url ) {\n\n\t\tconst index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.substr( 0, index + 1 );\n\n\t}\n\n};\n\nfunction InstancedBufferGeometry() {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'InstancedBufferGeometry';\n\tthis.instanceCount = Infinity;\n\n}\n\nInstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), {\n\n\tconstructor: InstancedBufferGeometry,\n\n\tisInstancedBufferGeometry: true,\n\n\tcopy: function ( source ) {\n\n\t\tBufferGeometry.prototype.copy.call( this, source );\n\n\t\tthis.instanceCount = source.instanceCount;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\tdata.instanceCount = this.instanceCount;\n\n\t\tdata.isInstancedBufferGeometry = true;\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction InstancedBufferAttribute( array, itemSize, normalized, meshPerAttribute ) {\n\n\tif ( typeof ( normalized ) === 'number' ) {\n\n\t\tmeshPerAttribute = normalized;\n\n\t\tnormalized = false;\n\n\t\tconsole.error( 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.' );\n\n\t}\n\n\tBufferAttribute.call( this, array, itemSize, normalized );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), {\n\n\tconstructor: InstancedBufferAttribute,\n\n\tisInstancedBufferAttribute: true,\n\n\tcopy: function ( source ) {\n\n\t\tBufferAttribute.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ()\t{\n\n\t\tconst data = BufferAttribute.prototype.toJSON.call( this );\n\n\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\tdata.isInstancedBufferAttribute = true;\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction BufferGeometryLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nBufferGeometryLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: BufferGeometryLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tconst interleavedBufferMap = {};\n\t\tconst arrayBufferMap = {};\n\n\t\tfunction getInterleavedBuffer( json, uuid ) {\n\n\t\t\tif ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ];\n\n\t\t\tconst interleavedBuffers = json.interleavedBuffers;\n\t\t\tconst interleavedBuffer = interleavedBuffers[ uuid ];\n\n\t\t\tconst buffer = getArrayBuffer( json, interleavedBuffer.buffer );\n\n\t\t\tconst array = getTypedArray( interleavedBuffer.type, buffer );\n\t\t\tconst ib = new InterleavedBuffer( array, interleavedBuffer.stride );\n\t\t\tib.uuid = interleavedBuffer.uuid;\n\n\t\t\tinterleavedBufferMap[ uuid ] = ib;\n\n\t\t\treturn ib;\n\n\t\t}\n\n\t\tfunction getArrayBuffer( json, uuid ) {\n\n\t\t\tif ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ];\n\n\t\t\tconst arrayBuffers = json.arrayBuffers;\n\t\t\tconst arrayBuffer = arrayBuffers[ uuid ];\n\n\t\t\tconst ab = new Uint32Array( arrayBuffer ).buffer;\n\n\t\t\tarrayBufferMap[ uuid ] = ab;\n\n\t\t\treturn ab;\n\n\t\t}\n\n\t\tconst geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry();\n\n\t\tconst index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst typedArray = getTypedArray( index.type, index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tconst attributes = json.data.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\t\t\tlet bufferAttribute;\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t} else {\n\n\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\tconst bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute;\n\t\t\t\tbufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\tgeometry.setAttribute( key, bufferAttribute );\n\n\t\t}\n\n\t\tconst morphAttributes = json.data.morphAttributes;\n\n\t\tif ( morphAttributes ) {\n\n\t\t\tfor ( const key in morphAttributes ) {\n\n\t\t\t\tconst attributeArray = morphAttributes[ key ];\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attribute = attributeArray[ i ];\n\t\t\t\t\tlet bufferAttribute;\n\n\t\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\t\t\tbufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\t\t\tarray.push( bufferAttribute );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.morphAttributes[ key ] = array;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst morphTargetsRelative = json.data.morphTargetsRelative;\n\n\t\tif ( morphTargetsRelative ) {\n\n\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t}\n\n\t\tconst groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( let i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tconst center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\tif ( json.name ) geometry.name = json.name;\n\t\tif ( json.userData ) geometry.userData = json.userData;\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\nclass ObjectLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json, onLoad ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\n\t\t//\n\n\t\tif ( onLoad !== undefined ) {\n\n\t\t\tlet hasImages = false;\n\n\t\t\tfor ( const uuid in images ) {\n\n\t\t\t\tif ( images[ uuid ] instanceof HTMLImageElement ) {\n\n\t\t\t\t\thasImages = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasImages === false ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tparseShapes( json ) {\n\n\t\tconst shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n\tparseSkeletons( json, object ) {\n\n\t\tconst skeletons = {};\n\t\tconst bones = {};\n\n\t\t// generate bone lookup table\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isBone ) bones[ child.uuid ] = child;\n\n\t\t} );\n\n\t\t// create skeletons\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst skeleton = new Skeleton().fromJSON( json[ i ], bones );\n\n\t\t\t\tskeletons[ skeleton.uuid ] = skeleton;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn skeletons;\n\n\t}\n\n\tparseGeometries( json, shapes ) {\n\n\t\tconst geometries = {};\n\t\tlet geometryShapes;\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tlet geometry;\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'PlaneGeometry':\n\t\t\t\t\tcase 'PlaneBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BoxGeometry':\n\t\t\t\t\tcase 'BoxBufferGeometry':\n\t\t\t\t\tcase 'CubeGeometry': // backwards compatible\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.depth,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.depthSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CircleGeometry':\n\t\t\t\t\tcase 'CircleBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CylinderGeometry':\n\t\t\t\t\tcase 'CylinderBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radiusTop,\n\t\t\t\t\t\t\tdata.radiusBottom,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ConeGeometry':\n\t\t\t\t\tcase 'ConeBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SphereGeometry':\n\t\t\t\t\tcase 'SphereBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'DodecahedronGeometry':\n\t\t\t\t\tcase 'DodecahedronBufferGeometry':\n\t\t\t\t\tcase 'IcosahedronGeometry':\n\t\t\t\t\tcase 'IcosahedronBufferGeometry':\n\t\t\t\t\tcase 'OctahedronGeometry':\n\t\t\t\t\tcase 'OctahedronBufferGeometry':\n\t\t\t\t\tcase 'TetrahedronGeometry':\n\t\t\t\t\tcase 'TetrahedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.detail\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RingGeometry':\n\t\t\t\t\tcase 'RingBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.innerRadius,\n\t\t\t\t\t\t\tdata.outerRadius,\n\t\t\t\t\t\t\tdata.thetaSegments,\n\t\t\t\t\t\t\tdata.phiSegments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusGeometry':\n\t\t\t\t\tcase 'TorusBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.arc\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusKnotGeometry':\n\t\t\t\t\tcase 'TorusKnotBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.p,\n\t\t\t\t\t\t\tdata.q\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TubeGeometry':\n\t\t\t\t\tcase 'TubeBufferGeometry':\n\n\t\t\t\t\t\t// This only works for built-in curves (e.g. CatmullRomCurve3).\n\t\t\t\t\t\t// User defined curves or instances of CurvePath will not be deserialized.\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tnew Curves[ data.path.type ]().fromJSON( data.path ),\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.closed\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LatheGeometry':\n\t\t\t\t\tcase 'LatheBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.points,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PolyhedronGeometry':\n\t\t\t\t\tcase 'PolyhedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.vertices,\n\t\t\t\t\t\t\tdata.indices,\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.details\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ShapeGeometry':\n\t\t\t\t\tcase 'ShapeBufferGeometry':\n\n\t\t\t\t\t\tgeometryShapes = [];\n\n\t\t\t\t\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.curveSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\tcase 'ExtrudeGeometry':\n\t\t\t\t\tcase 'ExtrudeBufferGeometry':\n\n\t\t\t\t\t\tgeometryShapes = [];\n\n\t\t\t\t\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst extrudePath = data.options.extrudePath;\n\n\t\t\t\t\t\tif ( extrudePath !== undefined ) {\n\n\t\t\t\t\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.options\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BufferGeometry':\n\t\t\t\t\tcase 'InstancedBufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Geometry':\n\n\t\t\t\t\t\tconsole.error( 'THREE.ObjectLoader: Loading \"Geometry\" is not supported anymore.' );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Unsupported geometry type \"' + data.type + '\"' );\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\tif ( geometry.isBufferGeometry === true && data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t}\n\n\tparseMaterials( json, textures ) {\n\n\t\tconst cache = {}; // MultiMaterial\n\t\tconst materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.type === 'MultiMaterial' ) {\n\n\t\t\t\t\t// Deprecated\n\n\t\t\t\t\tconst array = [];\n\n\t\t\t\t\tfor ( let j = 0; j < data.materials.length; j ++ ) {\n\n\t\t\t\t\t\tconst material = data.materials[ j ];\n\n\t\t\t\t\t\tif ( cache[ material.uuid ] === undefined ) {\n\n\t\t\t\t\t\t\tcache[ material.uuid ] = loader.parse( material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tarray.push( cache[ material.uuid ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = array;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( cache[ data.uuid ] === undefined ) {\n\n\t\t\t\t\t\tcache[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = cache[ data.uuid ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\tparseAnimations( json ) {\n\n\t\tconst animations = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tconst clip = AnimationClip.parse( data );\n\n\t\t\t\tanimations[ clip.uuid ] = clip;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n\tparseImages( json, onLoad ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn loadImage( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tconst manager = new LoadingManager( onLoad );\n\n\t\t\tloader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\timages[ image.uuid ] = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = deserializeImage( image.url );\n\n\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\timages[ image.uuid ] = deserializedImage;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tparseTextures( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tconst textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tlet texture;\n\t\t\t\tconst image = images[ data.image ];\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture( image );\n\n\t\t\t\t\tif ( image.length === 6 ) texture.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( image && image.data ) {\n\n\t\t\t\t\t\ttexture = new DataTexture( image.data, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture = new Texture( image );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( image ) texture.needsUpdate = true; // textures can have undefined image data\n\n\t\t\t\t}\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\t\t\t\tif ( data.type !== undefined ) texture.type = data.type;\n\t\t\t\tif ( data.encoding !== undefined ) texture.encoding = data.encoding;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\tif ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;\n\t\t\t\tif ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t}\n\n\tparseObject( data, geometries, materials, animations ) {\n\n\t\tlet object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tlet geometry, material;\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LightProbe':\n\n\t\t\t\tobject = new LightProbe().fromJSON( data );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t \tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\tif ( data.bindMode !== undefined ) object.bindMode = data.bindMode;\n\t\t\t\tif ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix );\n\t\t\t\tif ( data.skeleton !== undefined ) object.skeleton = data.skeleton;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'InstancedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\t\t\t\tconst count = data.count;\n\t\t\t\tconst instanceMatrix = data.instanceMatrix;\n\n\t\t\t\tobject = new InstancedMesh( geometry, material, count );\n\t\t\t\tobject.instanceMatrix = new BufferAttribute( new Float32Array( instanceMatrix.array ), 16 );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Bone':\n\n\t\t\t\tobject = new Bone();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials, animations ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.animations !== undefined ) {\n\n\t\t\tconst objectAnimations = data.animations;\n\n\t\t\tfor ( let i = 0; i < objectAnimations.length; i ++ ) {\n\n\t\t\t\tconst uuid = objectAnimations[ i ];\n\n\t\t\t\tobject.animations.push( animations[ uuid ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tif ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate;\n\n\t\t\tconst levels = data.levels;\n\n\t\t\tfor ( let l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tconst level = levels[ l ];\n\t\t\t\tconst child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tbindSkeletons( object, skeletons ) {\n\n\t\tif ( Object.keys( skeletons ).length === 0 ) return;\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isSkinnedMesh === true && child.skeleton !== undefined ) {\n\n\t\t\t\tconst skeleton = skeletons[ child.skeleton ];\n\n\t\t\t\tif ( skeleton === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.bind( skeleton, child.bindMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/* DEPRECATED */\n\n\tsetTexturePath( value ) {\n\n\t\tconsole.warn( 'THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().' );\n\t\treturn this.setResourcePath( value );\n\n\t}\n\n}\n\nconst TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping,\n\tCubeUVRefractionMapping: CubeUVRefractionMapping\n};\n\nconst TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nconst TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipmapNearestFilter: NearestMipmapNearestFilter,\n\tNearestMipmapLinearFilter: NearestMipmapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipmapNearestFilter: LinearMipmapNearestFilter,\n\tLinearMipmapLinearFilter: LinearMipmapLinearFilter\n};\n\nfunction ImageBitmapLoader( manager ) {\n\n\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t}\n\n\tif ( typeof fetch === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t}\n\n\tLoader.call( this, manager );\n\n\tthis.options = { premultiplyAlpha: 'none' };\n\n}\n\nImageBitmapLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: ImageBitmapLoader,\n\n\tisImageBitmapLoader: true,\n\n\tsetOptions: function setOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t},\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst fetchOptions = {};\n\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\n\t\tfetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, scope.options );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} );\n\n\t\tscope.manager.itemStart( url );\n\n\t}\n\n} );\n\nfunction ShapePath() {\n\n\tthis.type = 'ShapePath';\n\n\tthis.color = new Color();\n\n\tthis.subPaths = [];\n\tthis.currentPath = null;\n\n}\n\nObject.assign( ShapePath.prototype, {\n\n\tmoveTo: function ( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t\treturn this;\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t\treturn this;\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\treturn this;\n\n\t},\n\n\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t\treturn this;\n\n\t},\n\n\tsplineThru: function ( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t\treturn this;\n\n\t},\n\n\ttoShapes: function ( isCCW, noHoles ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tconst shapes = [];\n\n\t\t\tfor ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tconst tmpPath = inSubpaths[ i ];\n\n\t\t\t\tconst tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tconst polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tlet inside = false;\n\t\t\tfor ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tlet edgeLowPt = inPolygon[ p ];\n\t\t\t\tlet edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tlet edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tlet edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tconst isClockWise = ShapeUtils.isClockWise;\n\n\t\tconst subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tlet solid, tmpPath, tmpShape;\n\t\tconst shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tlet holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tconst betterShapeHoles = [];\n\t\tconst newShapes = [];\n\t\tlet newShapeHoles = [];\n\t\tlet mainIdx = 0;\n\t\tlet tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( let i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tlet ambiguous = false;\n\t\t\tconst toChange = [];\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tconst sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tconst ho = sho[ hIdx ];\n\t\t\t\t\tlet hole_unassigned = true;\n\n\t\t\t\t\tfor ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } );\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t// console.log(\"ambiguous: \", ambiguous);\n\n\t\t\tif ( toChange.length > 0 ) {\n\n\t\t\t\t// console.log(\"to change: \", toChange);\n\t\t\t\tif ( ! ambiguous )\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet tmpHoles;\n\n\t\tfor ( let i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n} );\n\nfunction Font( data ) {\n\n\tthis.type = 'Font';\n\n\tthis.data = data;\n\n}\n\nObject.assign( Font.prototype, {\n\n\tisFont: true,\n\n\tgenerateShapes: function ( text, size = 100 ) {\n\n\t\tconst shapes = [];\n\t\tconst paths = createPaths( text, size, this.data );\n\n\t\tfor ( let p = 0, pl = paths.length; p < pl; p ++ ) {\n\n\t\t\tArray.prototype.push.apply( shapes, paths[ p ].toShapes() );\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n} );\n\nfunction createPaths( text, size, data ) {\n\n\tconst chars = Array.from ? Array.from( text ) : String( text ).split( '' ); // workaround for IE11, see #13988\n\tconst scale = size / data.resolution;\n\tconst line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\tconst paths = [];\n\n\tlet offsetX = 0, offsetY = 0;\n\n\tfor ( let i = 0; i < chars.length; i ++ ) {\n\n\t\tconst char = chars[ i ];\n\n\t\tif ( char === '\\n' ) {\n\n\t\t\toffsetX = 0;\n\t\t\toffsetY -= line_height;\n\n\t\t} else {\n\n\t\t\tconst ret = createPath( char, scale, offsetX, offsetY, data );\n\t\t\toffsetX += ret.offsetX;\n\t\t\tpaths.push( ret.path );\n\n\t\t}\n\n\t}\n\n\treturn paths;\n\n}\n\nfunction createPath( char, scale, offsetX, offsetY, data ) {\n\n\tconst glyph = data.glyphs[ char ] || data.glyphs[ '?' ];\n\n\tif ( ! glyph ) {\n\n\t\tconsole.error( 'THREE.Font: character \"' + char + '\" does not exists in font family ' + data.familyName + '.' );\n\n\t\treturn;\n\n\t}\n\n\tconst path = new ShapePath();\n\n\tlet x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\tif ( glyph.o ) {\n\n\t\tconst outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\tfor ( let i = 0, l = outline.length; i < l; ) {\n\n\t\t\tconst action = outline[ i ++ ];\n\n\t\t\tswitch ( action ) {\n\n\t\t\t\tcase 'm': // moveTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'l': // lineTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'q': // quadraticCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'b': // bezierCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx2 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy2 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { offsetX: glyph.ha * scale, path: path };\n\n}\n\nfunction FontLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nFontLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: FontLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet json;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tconsole.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' );\n\t\t\t\tjson = JSON.parse( text.substring( 65, text.length - 2 ) );\n\n\t\t\t}\n\n\t\t\tconst font = scope.parse( json );\n\n\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\treturn new Font( json );\n\n\t}\n\n} );\n\nlet _context;\n\nconst AudioContext = {\n\n\tgetContext: function () {\n\n\t\tif ( _context === undefined ) {\n\n\t\t\t_context = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn _context;\n\n\t},\n\n\tsetContext: function ( value ) {\n\n\t\t_context = value;\n\n\t}\n\n};\n\nfunction AudioLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nAudioLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: AudioLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\t\tconst bufferCopy = buffer.slice( 0 );\n\n\t\t\t\tconst context = AudioContext.getContext();\n\t\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t\t} );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n} );\n\nfunction HemisphereLightProbe( skyColor, groundColor, intensity ) {\n\n\tLightProbe.call( this, undefined, intensity );\n\n\tconst color1 = new Color().set( skyColor );\n\tconst color2 = new Color().set( groundColor );\n\n\tconst sky = new Vector3( color1.r, color1.g, color1.b );\n\tconst ground = new Vector3( color2.r, color2.g, color2.b );\n\n\t// without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI );\n\tconst c0 = Math.sqrt( Math.PI );\n\tconst c1 = c0 * Math.sqrt( 0.75 );\n\n\tthis.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 );\n\tthis.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 );\n\n}\n\nHemisphereLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), {\n\n\tconstructor: HemisphereLightProbe,\n\n\tisHemisphereLightProbe: true,\n\n\tcopy: function ( source ) { // modifying colors not currently supported\n\n\t\tLightProbe.prototype.copy.call( this, source );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = LightProbe.prototype.toJSON.call( this, meta );\n\n\t\t// data.sh = this.sh.toArray(); // todo\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction AmbientLightProbe( color, intensity ) {\n\n\tLightProbe.call( this, undefined, intensity );\n\n\tconst color1 = new Color().set( color );\n\n\t// without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI );\n\tthis.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) );\n\n}\n\nAmbientLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), {\n\n\tconstructor: AmbientLightProbe,\n\n\tisAmbientLightProbe: true,\n\n\tcopy: function ( source ) { // modifying color not currently supported\n\n\t\tLightProbe.prototype.copy.call( this, source );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = LightProbe.prototype.toJSON.call( this, meta );\n\n\t\t// data.sh = this.sh.toArray(); // todo\n\n\t\treturn data;\n\n\t}\n\n} );\n\nconst _eyeRight = new Matrix4();\nconst _eyeLeft = new Matrix4();\n\nfunction StereoCamera() {\n\n\tthis.type = 'StereoCamera';\n\n\tthis.aspect = 1;\n\n\tthis.eyeSep = 0.064;\n\n\tthis.cameraL = new PerspectiveCamera();\n\tthis.cameraL.layers.enable( 1 );\n\tthis.cameraL.matrixAutoUpdate = false;\n\n\tthis.cameraR = new PerspectiveCamera();\n\tthis.cameraR.layers.enable( 2 );\n\tthis.cameraR.matrixAutoUpdate = false;\n\n\tthis._cache = {\n\t\tfocus: null,\n\t\tfov: null,\n\t\taspect: null,\n\t\tnear: null,\n\t\tfar: null,\n\t\tzoom: null,\n\t\teyeSep: null\n\t};\n\n}\n\nObject.assign( StereoCamera.prototype, {\n\n\tupdate: function ( camera ) {\n\n\t\tconst cache = this._cache;\n\n\t\tconst needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov ||\n\t\t\tcache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near ||\n\t\t\tcache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tcache.focus = camera.focus;\n\t\t\tcache.fov = camera.fov;\n\t\t\tcache.aspect = camera.aspect * this.aspect;\n\t\t\tcache.near = camera.near;\n\t\t\tcache.far = camera.far;\n\t\t\tcache.zoom = camera.zoom;\n\t\t\tcache.eyeSep = this.eyeSep;\n\n\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\tconst projectionMatrix = camera.projectionMatrix.clone();\n\t\t\tconst eyeSepHalf = cache.eyeSep / 2;\n\t\t\tconst eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;\n\t\t\tconst ymax = ( cache.near * Math.tan( MathUtils.DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom;\n\t\t\tlet xmin, xmax;\n\n\t\t\t// translate xOffset\n\n\t\t\t_eyeLeft.elements[ 12 ] = - eyeSepHalf;\n\t\t\t_eyeRight.elements[ 12 ] = eyeSepHalf;\n\n\t\t\t// for left eye\n\n\t\t\txmin = - ymax * cache.aspect + eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect + eyeSepOnProjection;\n\n\t\t\tprojectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t// for right eye\n\n\t\t\txmin = - ymax * cache.aspect - eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect - eyeSepOnProjection;\n\n\t\t\tprojectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t}\n\n\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft );\n\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight );\n\n\t}\n\n} );\n\nclass Clock {\n\n\tconstructor( autoStart ) {\n\n\t\tthis.autoStart = ( autoStart !== undefined ) ? autoStart : true;\n\n\t\tthis.startTime = 0;\n\t\tthis.oldTime = 0;\n\t\tthis.elapsedTime = 0;\n\n\t\tthis.running = false;\n\n\t}\n\n\tstart() {\n\n\t\tthis.startTime = now();\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t}\n\n\tstop() {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t}\n\n\tgetElapsedTime() {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t}\n\n\tgetDelta() {\n\n\t\tlet diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tconst newTime = now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n}\n\nfunction now() {\n\n\treturn ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n}\n\nconst _position$2 = /*@__PURE__*/ new Vector3();\nconst _quaternion$3 = /*@__PURE__*/ new Quaternion();\nconst _scale$1 = /*@__PURE__*/ new Vector3();\nconst _orientation = /*@__PURE__*/ new Vector3();\n\nclass AudioListener extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'AudioListener';\n\n\t\tthis.context = AudioContext.getContext();\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( this.context.destination );\n\n\t\tthis.filter = null;\n\n\t\tthis.timeDelta = 0;\n\n\t\t// private\n\n\t\tthis._clock = new Clock();\n\n\t}\n\n\tgetInput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tremoveFilter() {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.filter;\n\n\t}\n\n\tsetFilter( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t\treturn this;\n\n\t}\n\n\tgetMasterVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetMasterVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tconst listener = this.context.listener;\n\t\tconst up = this.up;\n\n\t\tthis.timeDelta = this._clock.getDelta();\n\n\t\tthis.matrixWorld.decompose( _position$2, _quaternion$3, _scale$1 );\n\n\t\t_orientation.set( 0, 0, - 1 ).applyQuaternion( _quaternion$3 );\n\n\t\tif ( listener.positionX ) {\n\n\t\t\t// code path for Chrome (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.timeDelta;\n\n\t\t\tlistener.positionX.linearRampToValueAtTime( _position$2.x, endTime );\n\t\t\tlistener.positionY.linearRampToValueAtTime( _position$2.y, endTime );\n\t\t\tlistener.positionZ.linearRampToValueAtTime( _position$2.z, endTime );\n\t\t\tlistener.forwardX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\tlistener.forwardY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\tlistener.forwardZ.linearRampToValueAtTime( _orientation.z, endTime );\n\t\t\tlistener.upX.linearRampToValueAtTime( up.x, endTime );\n\t\t\tlistener.upY.linearRampToValueAtTime( up.y, endTime );\n\t\t\tlistener.upZ.linearRampToValueAtTime( up.z, endTime );\n\n\t\t} else {\n\n\t\t\tlistener.setPosition( _position$2.x, _position$2.y, _position$2.z );\n\t\t\tlistener.setOrientation( _orientation.x, _orientation.y, _orientation.z, up.x, up.y, up.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass Audio extends Object3D {\n\n\tconstructor( listener ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Audio';\n\n\t\tthis.listener = listener;\n\t\tthis.context = listener.context;\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( listener.getInput() );\n\n\t\tthis.autoplay = false;\n\n\t\tthis.buffer = null;\n\t\tthis.detune = 0;\n\t\tthis.loop = false;\n\t\tthis.loopStart = 0;\n\t\tthis.loopEnd = 0;\n\t\tthis.offset = 0;\n\t\tthis.duration = undefined;\n\t\tthis.playbackRate = 1;\n\t\tthis.isPlaying = false;\n\t\tthis.hasPlaybackControl = true;\n\t\tthis.source = null;\n\t\tthis.sourceType = 'empty';\n\n\t\tthis._startedAt = 0;\n\t\tthis._progress = 0;\n\t\tthis._connected = false;\n\n\t\tthis.filters = [];\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tsetNodeSource( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaElementSource( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaStreamSource( mediaStream ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaStreamNode';\n\t\tthis.source = this.context.createMediaStreamSource( mediaStream );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetBuffer( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t}\n\n\tplay( delay = 0 ) {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._startedAt = this.context.currentTime + delay;\n\n\t\tconst source = this.context.createBufferSource();\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.loopStart = this.loopStart;\n\t\tsource.loopEnd = this.loopEnd;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.start( this._startedAt, this._progress + this.offset, this.duration );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\tthis.setDetune( this.detune );\n\t\tthis.setPlaybackRate( this.playbackRate );\n\n\t\treturn this.connect();\n\n\t}\n\n\tpause() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\t// update current progress\n\n\t\t\tthis._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate;\n\n\t\t\tif ( this.loop === true ) {\n\n\t\t\t\t// ensure _progress does not exceed duration with looped audios\n\n\t\t\t\tthis._progress = this._progress % ( this.duration || this.buffer.duration );\n\n\t\t\t}\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._progress = 0;\n\n\t\tthis.source.stop();\n\t\tthis.source.onended = null;\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t}\n\n\tconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = true;\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = false;\n\n\t\treturn this;\n\n\t}\n\n\tgetFilters() {\n\n\t\treturn this.filters;\n\n\t}\n\n\tsetFilters( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this._connected === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value.slice();\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetDetune( value ) {\n\n\t\tthis.detune = value;\n\n\t\tif ( this.source.detune === undefined ) return; // only set detune when available\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetDetune() {\n\n\t\treturn this.detune;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t}\n\n\tsetFilter( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t}\n\n\tsetPlaybackRate( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetPlaybackRate() {\n\n\t\treturn this.playbackRate;\n\n\t}\n\n\tonEnded() {\n\n\t\tthis.isPlaying = false;\n\n\t}\n\n\tgetLoop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t}\n\n\tsetLoop( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopStart( value ) {\n\n\t\tthis.loopStart = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopEnd( value ) {\n\n\t\tthis.loopEnd = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _position$3 = /*@__PURE__*/ new Vector3();\nconst _quaternion$4 = /*@__PURE__*/ new Quaternion();\nconst _scale$2 = /*@__PURE__*/ new Vector3();\nconst _orientation$1 = /*@__PURE__*/ new Vector3();\n\nclass PositionalAudio extends Audio {\n\n\tconstructor( listener ) {\n\n\t\tsuper( listener );\n\n\t\tthis.panner = this.context.createPanner();\n\t\tthis.panner.panningModel = 'HRTF';\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.panner;\n\n\t}\n\n\tgetRefDistance() {\n\n\t\treturn this.panner.refDistance;\n\n\t}\n\n\tsetRefDistance( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetRolloffFactor() {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t}\n\n\tsetRolloffFactor( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetDistanceModel() {\n\n\t\treturn this.panner.distanceModel;\n\n\t}\n\n\tsetDistanceModel( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxDistance() {\n\n\t\treturn this.panner.maxDistance;\n\n\t}\n\n\tsetMaxDistance( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.hasPlaybackControl === true && this.isPlaying === false ) return;\n\n\t\tthis.matrixWorld.decompose( _position$3, _quaternion$4, _scale$2 );\n\n\t\t_orientation$1.set( 0, 0, 1 ).applyQuaternion( _quaternion$4 );\n\n\t\tconst panner = this.panner;\n\n\t\tif ( panner.positionX ) {\n\n\t\t\t// code path for Chrome and Firefox (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.listener.timeDelta;\n\n\t\t\tpanner.positionX.linearRampToValueAtTime( _position$3.x, endTime );\n\t\t\tpanner.positionY.linearRampToValueAtTime( _position$3.y, endTime );\n\t\t\tpanner.positionZ.linearRampToValueAtTime( _position$3.z, endTime );\n\t\t\tpanner.orientationX.linearRampToValueAtTime( _orientation$1.x, endTime );\n\t\t\tpanner.orientationY.linearRampToValueAtTime( _orientation$1.y, endTime );\n\t\t\tpanner.orientationZ.linearRampToValueAtTime( _orientation$1.z, endTime );\n\n\t\t} else {\n\n\t\t\tpanner.setPosition( _position$3.x, _position$3.y, _position$3.z );\n\t\t\tpanner.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass AudioAnalyser {\n\n\tconstructor( audio, fftSize = 2048 ) {\n\n\t\tthis.analyser = audio.context.createAnalyser();\n\t\tthis.analyser.fftSize = fftSize;\n\n\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\taudio.getOutput().connect( this.analyser );\n\n\t}\n\n\n\tgetFrequencyData() {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t}\n\n\tgetAverageFrequency() {\n\n\t\tlet value = 0;\n\t\tconst data = this.getFrequencyData();\n\n\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n}\n\nfunction PropertyMixer( binding, typeName, valueSize ) {\n\n\tthis.binding = binding;\n\tthis.valueSize = valueSize;\n\n\tlet mixFunction,\n\t\tmixFunctionAdditive,\n\t\tsetIdentity;\n\n\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t//\n\t// interpolators can use .buffer as their .result\n\t// the data then goes to 'incoming'\n\t//\n\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t// the cumulative result and are compared to detect\n\t// changes\n\t//\n\t// 'orig' stores the original state of the property\n\t//\n\t// 'add' is used for additive cumulative results\n\t//\n\t// 'work' is optional and is only present for quaternion types. It is used\n\t// to store intermediate quaternion multiplication results\n\n\tswitch ( typeName ) {\n\n\t\tcase 'quaternion':\n\t\t\tmixFunction = this._slerp;\n\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\tthis._workIndex = 5;\n\t\t\tbreak;\n\n\t\tcase 'string':\n\t\tcase 'bool':\n\t\t\tmixFunction = this._select;\n\n\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t// additive is not relevant for non-numeric types\n\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tmixFunction = this._lerp;\n\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t}\n\n\tthis._mixBufferRegion = mixFunction;\n\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\tthis._setIdentity = setIdentity;\n\tthis._origIndex = 3;\n\tthis._addIndex = 4;\n\n\tthis.cumulativeWeight = 0;\n\tthis.cumulativeWeightAdditive = 0;\n\n\tthis.useCount = 0;\n\tthis.referenceCount = 0;\n\n}\n\nObject.assign( PropertyMixer.prototype, {\n\n\t// accumulate data in the 'incoming' region into 'accu'\n\taccumulate: function ( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride;\n\n\t\tlet currentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tconst mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t},\n\n\t// accumulate data in the 'incoming' region into 'add'\n\taccumulateAdditive: function ( weight ) {\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = stride * this._addIndex;\n\n\t\tif ( this.cumulativeWeightAdditive === 0 ) {\n\n\t\t\t// add = identity\n\n\t\t\tthis._setIdentity();\n\n\t\t}\n\n\t\t// add := add + incoming * weight\n\n\t\tthis._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );\n\t\tthis.cumulativeWeightAdditive += weight;\n\n\t},\n\n\t// apply the state of 'accu' to the binding when accus differ\n\tapply: function ( accuIndex ) {\n\n\t\tconst stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tconst originalValueOffset = stride * this._origIndex;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tif ( weightAdditive > 0 ) {\n\n\t\t\t// accuN := accuN + additive accuN\n\n\t\t\tthis._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );\n\n\t\t}\n\n\t\tfor ( let i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState: function () {\n\n\t\tconst binding = this.binding;\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * this._origIndex;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\t// Add to identity for additive\n\t\tthis._setIdentity();\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t},\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState: function () {\n\n\t\tconst originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t},\n\n\t_setAdditiveIdentityNumeric: function () {\n\n\t\tconst startIndex = this._addIndex * this.valueSize;\n\t\tconst endIndex = startIndex + this.valueSize;\n\n\t\tfor ( let i = startIndex; i < endIndex; i ++ ) {\n\n\t\t\tthis.buffer[ i ] = 0;\n\n\t\t}\n\n\t},\n\n\t_setAdditiveIdentityQuaternion: function () {\n\n\t\tthis._setAdditiveIdentityNumeric();\n\t\tthis.buffer[ this._addIndex * this.valueSize + 3 ] = 1;\n\n\t},\n\n\t_setAdditiveIdentityOther: function () {\n\n\t\tconst startIndex = this._origIndex * this.valueSize;\n\t\tconst targetIndex = this._addIndex * this.valueSize;\n\n\t\tfor ( let i = 0; i < this.valueSize; i ++ ) {\n\n\t\t\tthis.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];\n\n\t\t}\n\n\t},\n\n\n\t// mix functions\n\n\t_select: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_slerp: function ( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t},\n\n\t_slerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst workOffset = this._workIndex * stride;\n\n\t\t// Store result in intermediate buffer offset\n\t\tQuaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );\n\n\t\t// Slerp to the intermediate result\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );\n\n\t},\n\n\t_lerp: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst s = 1 - t;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t},\n\n\t_lerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n} );\n\n// Characters [].:/ are reserved for track binding syntax.\nconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\nconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n// only latin characters, and the unicode \\p{L} is not yet supported. So\n// instead, we exclude reserved characters and match everything else.\nconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\nconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n// Parent directories, delimited by '/' or ':'. Currently unused, but must\n// be matched to parse the rest of the track name.\nconst _directoryRe = /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\nconst _nodeRe = /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n// Object on target node, and accessor. May not contain reserved\n// characters. Accessor may contain any character except closing bracket.\nconst _objectRe = /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n// Property and accessor. May not contain reserved characters. Accessor may\n// contain any non-bracket characters.\nconst _propertyRe = /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\nconst _trackRe = new RegExp( ''\n\t+ '^'\n\t+ _directoryRe\n\t+ _nodeRe\n\t+ _objectRe\n\t+ _propertyRe\n\t+ '$'\n);\n\nconst _supportedObjectNames = [ 'material', 'materials', 'bones' ];\n\nfunction Composite( targetGroup, path, optionalParsedPath ) {\n\n\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\tthis._targetGroup = targetGroup;\n\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n}\n\nObject.assign( Composite.prototype, {\n\n\tgetValue: function ( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tconst firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t},\n\n\tsetValue: function ( array, offset ) {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t},\n\n\tbind: function () {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t},\n\n\tunbind: function () {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n} );\n\n\nfunction PropertyBinding( rootNode, path, parsedPath ) {\n\n\tthis.path = path;\n\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode;\n\n\tthis.rootNode = rootNode;\n\n}\n\nObject.assign( PropertyBinding, {\n\n\tComposite: Composite,\n\n\tcreate: function ( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tsanitizeNodeName: function ( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t},\n\n\tparseTrackName: function ( trackName ) {\n\n\t\tconst matches = _trackRe.exec( trackName );\n\n\t\tif ( ! matches ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t}\n\n\t\tconst results = {\n\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\tnodeName: matches[ 2 ],\n\t\t\tobjectName: matches[ 3 ],\n\t\t\tobjectIndex: matches[ 4 ],\n\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\tpropertyIndex: matches[ 6 ]\n\t\t};\n\n\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t// include '.' characters).\n\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\tresults.objectName = objectName;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t}\n\n\t\treturn results;\n\n\t},\n\n\tfindNode: function ( root, nodeName ) {\n\n\t\tif ( ! nodeName || nodeName === \"\" || nodeName === \".\" || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tconst bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tconst childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tconst subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n} );\n\nObject.assign( PropertyBinding.prototype, { // prototype, continued\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable: function () {},\n\t_setValue_unavailable: function () {},\n\n\tBindingType: {\n\t\tDirect: 0,\n\t\tEntireArray: 1,\n\t\tArrayElement: 2,\n\t\tHasFromToArray: 3\n\t},\n\n\tVersioning: {\n\t\tNone: 0,\n\t\tNeedsUpdate: 1,\n\t\tMatrixWorldNeedsUpdate: 2\n\t},\n\n\tGetterByBindingType: [\n\n\t\tfunction getValue_direct( buffer, offset ) {\n\n\t\t\tbuffer[ offset ] = this.node[ this.propertyName ];\n\n\t\t},\n\n\t\tfunction getValue_array( buffer, offset ) {\n\n\t\t\tconst source = this.resolvedProperty;\n\n\t\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t\t}\n\n\t\t},\n\n\t\tfunction getValue_arrayElement( buffer, offset ) {\n\n\t\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t\t},\n\n\t\tfunction getValue_toArray( buffer, offset ) {\n\n\t\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t\t}\n\n\t],\n\n\tSetterByBindingTypeAndVersioning: [\n\n\t\t[\n\t\t\t// Direct\n\n\t\t\tfunction setValue_direct( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t\t\t},\n\n\t\t\tfunction setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// EntireArray\n\n\t\t\tfunction setValue_array( buffer, offset ) {\n\n\t\t\t\tconst dest = this.resolvedProperty;\n\n\t\t\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tfunction setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tconst dest = this.resolvedProperty;\n\n\t\t\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tconst dest = this.resolvedProperty;\n\n\t\t\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// ArrayElement\n\n\t\t\tfunction setValue_arrayElement( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t\t\t},\n\n\t\t\tfunction setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// HasToFromArray\n\n\t\t\tfunction setValue_fromArray( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t\t\t},\n\n\t\t\tfunction setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t]\n\n\t],\n\n\tgetValue: function getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t\t// Note: This class uses a State pattern on a per-method basis:\n\t\t// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n\t\t// prototype version of these methods with one that represents\n\t\t// the bound state. When the property is not found, the methods\n\t\t// become no-ops.\n\n\t},\n\n\tsetValue: function getValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t},\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind: function () {\n\n\t\tlet targetObject = this.node;\n\t\tconst parsedPath = this.parsedPath;\n\n\t\tconst objectName = parsedPath.objectName;\n\t\tconst propertyName = parsedPath.propertyName;\n\t\tlet propertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode;\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\\'t found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tlet objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( let i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tconst nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tlet versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tlet bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === \"morphTargetInfluences\" ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.geometry.isBufferGeometry ) {\n\n\t\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t},\n\n\tunbind: function () {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n} );\n\n// DECLARE ALIAS AFTER assign prototype\nObject.assign( PropertyBinding.prototype, {\n\n\t// initial state of these methods that calls 'bind'\n\t_getValue_unbound: PropertyBinding.prototype.getValue,\n\t_setValue_unbound: PropertyBinding.prototype.setValue,\n\n} );\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * - Add objects you would otherwise pass as 'root' to the\n * constructor or the .clipAction method of AnimationMixer.\n *\n * - Instead pass this object as 'root'.\n *\n * - You can also add and remove objects later when the mixer\n * is running.\n *\n * Note:\n *\n * Objects of this class appear as one object to the mixer,\n * so cache control of the individual objects must be done\n * on the group.\n *\n * Limitation:\n *\n * - The animated properties must be compatible among the\n * all objects in the group.\n *\n * - A single property can either be controlled through a\n * target group or directly, but not both.\n */\n\nfunction AnimationObjectGroup() {\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\t// cached objects followed by the active ones\n\tthis._objects = Array.prototype.slice.call( arguments );\n\n\tthis.nCachedObjects_ = 0; // threshold\n\t// note: read by PropertyBinding.Composite\n\n\tconst indices = {};\n\tthis._indicesByUUID = indices; // for bookkeeping\n\n\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t}\n\n\tthis._paths = []; // inside: string\n\tthis._parsedPaths = []; // inside: { we don't care, here }\n\tthis._bindings = []; // inside: Array< PropertyBinding >\n\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\tconst scope = this;\n\n\tthis.stats = {\n\n\t\tobjects: {\n\t\t\tget total() {\n\n\t\t\t\treturn scope._objects.length;\n\n\t\t\t},\n\t\t\tget inUse() {\n\n\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t}\n\t\t},\n\t\tget bindingsPerObject() {\n\n\t\t\treturn scope._bindings.length;\n\n\t\t}\n\n\t};\n\n}\n\nObject.assign( AnimationObjectGroup.prototype, {\n\n\tisAnimationObjectGroup: true,\n\n\tadd: function () {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet knownObject = undefined,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid;\n\t\t\tlet index = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ];\n\n\t\t\t\t\tlet binding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\tremove: function () {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tconst lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\t// remove & forget\n\tuncache: function () {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_,\n\t\t\tnObjects = objects.length;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tconst lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_: function ( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath;\n\t\tlet index = indicesByPath[ path ];\n\t\tconst bindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tconst paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tconst object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t},\n\n\tunsubscribe_: function ( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n} );\n\nclass AnimationAction {\n\n\tconstructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot;\n\t\tthis.blendMode = blendMode;\n\n\t\tconst tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tconst interpolantSettings = {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst interpolant = tracks[ i ].createInterpolant( null );\n\t\t\tinterpolants[ i ] = interpolant;\n\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t}\n\n\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\tthis._interpolants = interpolants; // bound by the mixer\n\n\t\t// inside: PropertyMixer (managed by the mixer)\n\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\tthis._cacheIndex = null; // for the memory manager\n\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\tthis._timeScaleInterpolant = null;\n\t\tthis._weightInterpolant = null;\n\n\t\tthis.loop = LoopRepeat;\n\t\tthis._loopCount = - 1;\n\n\t\t// global mixer time when the action is to be started\n\t\t// it's set back to 'null' upon start of the action\n\t\tthis._startTime = null;\n\n\t\t// scaled local time of the action\n\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1;\n\t\tthis._effectiveTimeScale = 1;\n\n\t\tthis.weight = 1;\n\t\tthis._effectiveWeight = 1;\n\n\t\tthis.repetitions = Infinity; // no. of repetitions when looping\n\n\t\tthis.paused = false; // true -> zero effective time scale\n\t\tthis.enabled = true; // false -> zero effective weight\n\n\t\tthis.clampWhenFinished = false;// keep feeding the last frame?\n\n\t\tthis.zeroSlopeAtStart = true;// for smooth interpolation w/o separate\n\t\tthis.zeroSlopeAtEnd = true;// clips for start, loop and end\n\n\t}\n\n\t// State & Scheduling\n\n\tplay() {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t}\n\n\treset() {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0; // restart clip\n\t\tthis._loopCount = - 1;// forget previous loops\n\t\tthis._startTime = null;// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t}\n\n\tisRunning() {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t}\n\n\t// return true when play has been called\n\tisScheduled() {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t}\n\n\tstartAt( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoop( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t}\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t}\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight() {\n\n\t\treturn this._effectiveWeight;\n\n\t}\n\n\tfadeIn( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t}\n\n\tfadeOut( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t}\n\n\tcrossFadeFrom( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tconst fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcrossFadeTo( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t}\n\n\tstopFading() {\n\n\t\tconst weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale() {\n\n\t\treturn this._effectiveTimeScale;\n\n\t}\n\n\tsetDuration( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\tsyncWith( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\thalt( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t}\n\n\twarp( startTimeScale, endTimeScale, duration ) {\n\n\t\tconst mixer = this._mixer,\n\t\t\tnow = mixer.time,\n\t\t\ttimeScale = this.timeScale;\n\n\t\tlet interpolant = this._timeScaleInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t}\n\n\tstopWarping() {\n\n\t\tconst timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Object Accessors\n\n\tgetMixer() {\n\n\t\treturn this._mixer;\n\n\t}\n\n\tgetClip() {\n\n\t\treturn this._clip;\n\n\t}\n\n\tgetRoot() {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t}\n\n\t// Interna\n\n\t_update( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tconst timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\treturn; // yet to come / don't decide when delta = 0\n\n\t\t\t}\n\n\t\t\t// start\n\n\t\t\tthis._startTime = null; // unschedule\n\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tconst clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tconst weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tconst interpolants = this._interpolants;\n\t\t\tconst propertyMixers = this._propertyBindings;\n\n\t\t\tswitch ( this.blendMode ) {\n\n\t\t\t\tcase AdditiveAnimationBlendMode:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulateAdditive( weight );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase NormalAnimationBlendMode:\n\t\t\t\tdefault:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_updateWeight( time ) {\n\n\t\tlet weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tconst interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t}\n\n\t_updateTimeScale( time ) {\n\n\t\tlet timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tconst interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t}\n\n\t_updateTime( deltaTime ) {\n\n\t\tconst duration = this._clip.duration;\n\t\tconst loop = this.loop;\n\n\t\tlet time = this.time + deltaTime;\n\t\tlet loopCount = this._loopCount;\n\n\t\tconst pingPong = ( loop === LoopPingPong );\n\n\t\tif ( deltaTime === 0 ) {\n\n\t\t\tif ( loopCount === - 1 ) return time;\n\n\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t}\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tbreak handle_stop;\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis.time = time;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tconst loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tconst pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tconst atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.time = time;\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\t_setEndings( atStart, atEnd, pingPong ) {\n\n\t\tconst settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart = ZeroSlopeEnding;\n\t\t\tsettings.endingEnd = ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_scheduleFading( duration, weightNow, weightThen ) {\n\n\t\tconst mixer = this._mixer, now = mixer.time;\n\t\tlet interpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\n\t\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction AnimationMixer( root ) {\n\n\tthis._root = root;\n\tthis._initMemoryManager();\n\tthis._accuIndex = 0;\n\n\tthis.time = 0;\n\n\tthis.timeScale = 1.0;\n\n}\n\nAnimationMixer.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: AnimationMixer,\n\n\t_bindAction: function ( action, prototypeAction ) {\n\n\t\tconst root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName;\n\n\t\tlet bindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst track = tracks[ i ],\n\t\t\t\ttrackName = track.name;\n\n\t\t\tlet binding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tconst path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t},\n\n\t_activateAction: function ( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tconst rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t},\n\n\t_deactivateAction: function ( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t},\n\n\t// Memory manager\n\n\t_initMemoryManager: function () {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t// \tactionByRoot: AnimationAction - lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t},\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction: function ( action ) {\n\n\t\tconst index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t},\n\n\t_addInactiveAction: function ( action, clipUuid, rootUuid ) {\n\n\t\tconst actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tlet actionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tconst knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t},\n\n\t_removeInactiveAction: function ( action ) {\n\n\t\tconst actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tconst clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tconst actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t},\n\n\t_removeInactiveBindingsForAction: function ( action ) {\n\n\t\tconst bindings = action._propertyBindings;\n\n\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tconst binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_lendAction: function ( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions >| inactive actions ]\n\t\t// s a\n\t\t// <-swap->\n\t\t// a s\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t},\n\n\t_takeBackAction: function ( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions |< inactive actions ]\n\t\t// a s\n\t\t// <-swap->\n\t\t// s a\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t},\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding: function ( binding, rootUuid, trackName ) {\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindings = this._bindings;\n\n\t\tlet bindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t},\n\n\t_removeInactiveBinding: function ( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tif ( Object.keys( bindingByName ).length === 0 ) {\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t},\n\n\t_lendBinding: function ( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t},\n\n\t_takeBackBinding: function ( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t},\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant: function () {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++;\n\n\t\tlet interpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, this._controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t},\n\n\t_takeBackControlInterpolant: function ( interpolant ) {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t},\n\n\t_controlInterpolantsResultBuffer: new Float32Array( 1 ),\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction: function ( clip, optionalRoot, blendMode ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid;\n\n\t\tlet clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip;\n\n\t\tconst clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\n\t\tconst actionsForClip = this._actionsByClip[ clipUuid ];\n\t\tlet prototypeAction = null;\n\n\t\tif ( blendMode === undefined ) {\n\n\t\t\tif ( clipObject !== null ) {\n\n\t\t\t\tblendMode = clipObject.blendMode;\n\n\t\t\t} else {\n\n\t\t\t\tblendMode = NormalAnimationBlendMode;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tconst existingAction = actionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined && existingAction.blendMode === blendMode ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tconst newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t},\n\n\t// get an existing action\n\texistingAction: function ( clip, optionalRoot ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction: function () {\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions;\n\n\t\tfor ( let i = nActions - 1; i >= 0; -- i ) {\n\n\t\t\tactions[ i ].stop();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// advance the time and update apply the animation\n\tupdate: function ( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( let i = 0; i !== nActions; ++ i ) {\n\n\t\t\tconst action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tconst bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( let i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// Allows you to seek to a specific time in an animation.\n\tsetTime: function ( timeInSeconds ) {\n\n\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\t\tfor ( let i = 0; i < this._actions.length; i ++ ) {\n\n\t\t\tthis._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\n\t\t}\n\n\t\treturn this.update( timeInSeconds ); // Update used to set exact time. Returns \"this\" AnimationMixer object.\n\n\t},\n\n\t// return this mixer's root target object\n\tgetRoot: function () {\n\n\t\treturn this._root;\n\n\t},\n\n\t// free all resources specific to a particular clip\n\tuncacheClip: function ( clip ) {\n\n\t\tconst actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tconst actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tconst action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tconst cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t},\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot: function ( root ) {\n\n\t\tconst rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( const clipUuid in actionsByClip ) {\n\n\t\t\tconst actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( const trackName in bindingByName ) {\n\n\t\t\t\tconst binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t// remove a targeted clip from the cache\n\tuncacheAction: function ( clip, optionalRoot ) {\n\n\t\tconst action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n} );\n\nclass Uniform {\n\n\tconstructor( value ) {\n\n\t\tif ( typeof value === 'string' ) {\n\n\t\t\tconsole.warn( 'THREE.Uniform: Type parameter is no longer needed.' );\n\t\t\tvalue = arguments[ 1 ];\n\n\t\t}\n\n\t\tthis.value = value;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t}\n\n}\n\nfunction InstancedInterleavedBuffer( array, stride, meshPerAttribute ) {\n\n\tInterleavedBuffer.call( this, array, stride );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), {\n\n\tconstructor: InstancedInterleavedBuffer,\n\n\tisInstancedInterleavedBuffer: true,\n\n\tcopy: function ( source ) {\n\n\t\tInterleavedBuffer.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function ( data ) {\n\n\t\tconst ib = InterleavedBuffer.prototype.clone.call( this, data );\n\n\t\tib.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn ib;\n\n\t},\n\n\ttoJSON: function ( data ) {\n\n\t\tconst json = InterleavedBuffer.prototype.toJSON.call( this, data );\n\n\t\tjson.isInstancedInterleavedBuffer = true;\n\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn json;\n\n\t}\n\n} );\n\nfunction GLBufferAttribute( buffer, type, itemSize, elementSize, count ) {\n\n\tthis.buffer = buffer;\n\tthis.type = type;\n\tthis.itemSize = itemSize;\n\tthis.elementSize = elementSize;\n\tthis.count = count;\n\n\tthis.version = 0;\n\n}\n\nObject.defineProperty( GLBufferAttribute.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( GLBufferAttribute.prototype, {\n\n\tisGLBufferAttribute: true,\n\n\tsetBuffer: function ( buffer ) {\n\n\t\tthis.buffer = buffer;\n\n\t\treturn this;\n\n\t},\n\n\tsetType: function ( type, elementSize ) {\n\n\t\tthis.type = type;\n\t\tthis.elementSize = elementSize;\n\n\t\treturn this;\n\n\t},\n\n\tsetItemSize: function ( itemSize ) {\n\n\t\tthis.itemSize = itemSize;\n\n\t\treturn this;\n\n\t},\n\n\tsetCount: function ( count ) {\n\n\t\tthis.count = count;\n\n\t\treturn this;\n\n\t},\n\n} );\n\nfunction Raycaster( origin, direction, near, far ) {\n\n\tthis.ray = new Ray( origin, direction );\n\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\tthis.near = near || 0;\n\tthis.far = far || Infinity;\n\tthis.camera = null;\n\tthis.layers = new Layers();\n\n\tthis.params = {\n\t\tMesh: {},\n\t\tLine: { threshold: 1 },\n\t\tLOD: {},\n\t\tPoints: { threshold: 1 },\n\t\tSprite: {}\n\t};\n\n\tObject.defineProperties( this.params, {\n\t\tPointCloud: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' );\n\t\t\t\treturn this.Points;\n\n\t\t\t}\n\t\t}\n\t} );\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\tif ( object.layers.test( raycaster.layers ) ) {\n\n\t\tobject.raycast( raycaster, intersects );\n\n\t}\n\n\tif ( recursive === true ) {\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\nObject.assign( Raycaster.prototype, {\n\n\tset: function ( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t},\n\n\tsetFromCamera: function ( coords, camera ) {\n\n\t\tif ( ( camera && camera.isPerspectiveCamera ) ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\t\t\tthis.camera = camera;\n\n\t\t} else if ( ( camera && camera.isOrthographicCamera ) ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\t\t\tthis.camera = camera;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type.' );\n\n\t\t}\n\n\t},\n\n\tintersectObject: function ( object, recursive, optionalTarget ) {\n\n\t\tconst intersects = optionalTarget || [];\n\n\t\tintersectObject( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t},\n\n\tintersectObjects: function ( objects, recursive, optionalTarget ) {\n\n\t\tconst intersects = optionalTarget || [];\n\n\t\tif ( Array.isArray( objects ) === false ) {\n\n\t\t\tconsole.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' );\n\t\t\treturn intersects;\n\n\t\t}\n\n\t\tfor ( let i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n} );\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up.\n * The azimuthal angle (theta) is measured from the positive z-axis.\n */\n\nclass Spherical {\n\n\tconstructor( radius = 1, phi = 0, theta = 0 ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi; // polar angle\n\t\tthis.theta = theta; // azimuthal angle\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t}\n\n\t// restrict phi to be betwee EPS and PI-EPS\n\tmakeSafe() {\n\n\t\tconst EPS = 0.000001;\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + y * y + z * z );\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( x, z );\n\t\t\tthis.phi = Math.acos( MathUtils.clamp( y / this.radius, - 1, 1 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n */\n\nclass Cylindrical {\n\n\tconstructor( radius, theta, y ) {\n\n\t\tthis.radius = ( radius !== undefined ) ? radius : 1.0; // distance from the origin to a point in the x-z plane\n\t\tthis.theta = ( theta !== undefined ) ? theta : 0; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\t\tthis.y = ( y !== undefined ) ? y : 0; // height above the x-z plane\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + z * z );\n\t\tthis.theta = Math.atan2( x, z );\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vector$7 = /*@__PURE__*/ new Vector2();\n\nclass Box2 {\n\n\tconstructor( min, max ) {\n\n\t\tObject.defineProperty( this, 'isBox2', { value: true } );\n\n\t\tthis.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity );\n\t\tthis.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity );\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$7.copy( size ).multiplyScalar( 0.5 );\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getCenter() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getSize() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getParameter() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ? false : true;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\tconst clampedPoint = _vector$7.copy( point ).clamp( this.min, this.max );\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _startP = /*@__PURE__*/ new Vector3();\nconst _startEnd = /*@__PURE__*/ new Vector3();\n\nclass Line3 {\n\n\tconstructor( start, end ) {\n\n\t\tthis.start = ( start !== undefined ) ? start : new Vector3();\n\t\tthis.end = ( end !== undefined ) ? end : new Vector3();\n\n\t}\n\n\tset( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t}\n\n\tdelta( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .delta() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t}\n\n\tdistanceSq() {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t}\n\n\tdistance() {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t}\n\n\tat( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tclosestPointToPointParameter( point, clampToLine ) {\n\n\t\t_startP.subVectors( point, this.start );\n\t\t_startEnd.subVectors( this.end, this.start );\n\n\t\tconst startEnd2 = _startEnd.dot( _startEnd );\n\t\tconst startEnd_startP = _startEnd.dot( _startP );\n\n\t\tlet t = startEnd_startP / startEnd2;\n\n\t\tif ( clampToLine ) {\n\n\t\t\tt = MathUtils.clamp( t, 0, 1 );\n\n\t\t}\n\n\t\treturn t;\n\n\t}\n\n\tclosestPointToPoint( point, clampToLine, target ) {\n\n\t\tconst t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t}\n\n\tequals( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n}\n\nfunction ImmediateRenderObject( material ) {\n\n\tObject3D.call( this );\n\n\tthis.material = material;\n\tthis.render = function ( /* renderCallback */ ) {};\n\n\tthis.hasPositions = false;\n\tthis.hasNormals = false;\n\tthis.hasColors = false;\n\tthis.hasUvs = false;\n\n\tthis.positionArray = null;\n\tthis.normalArray = null;\n\tthis.colorArray = null;\n\tthis.uvArray = null;\n\n\tthis.count = 0;\n\n}\n\nImmediateRenderObject.prototype = Object.create( Object3D.prototype );\nImmediateRenderObject.prototype.constructor = ImmediateRenderObject;\n\nImmediateRenderObject.prototype.isImmediateRenderObject = true;\n\nconst _vector$8 = /*@__PURE__*/ new Vector3();\n\nclass SpotLightHelper extends Object3D {\n\n\tconstructor( light, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst positions = [\n\t\t\t0, 0, 0, \t0, 0, 1,\n\t\t\t0, 0, 0, \t1, 0, 1,\n\t\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t\t0, 0, 0, \t0, 1, 1,\n\t\t\t0, 0, 0, \t0, - 1, 1\n\t\t];\n\n\t\tfor ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\tconst p1 = ( i / l ) * Math.PI * 2;\n\t\t\tconst p2 = ( j / l ) * Math.PI * 2;\n\n\t\t\tpositions.push(\n\t\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t\t);\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.cone = new LineSegments( geometry, material );\n\t\tthis.add( this.cone );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateMatrixWorld();\n\n\t\tconst coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tconst coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t_vector$8.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( _vector$8 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t}\n\n}\n\nconst _vector$9 = /*@__PURE__*/ new Vector3();\nconst _boneMatrix = /*@__PURE__*/ new Matrix4();\nconst _matrixWorldInv = /*@__PURE__*/ new Matrix4();\n\n\nclass SkeletonHelper extends LineSegments {\n\n\tconstructor( object ) {\n\n\t\tconst bones = getBoneList( object );\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = new Color( 0, 0, 1 );\n\t\tconst color2 = new Color( 0, 1, 0 );\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'SkeletonHelper';\n\t\tthis.isSkeletonHelper = true;\n\n\t\tthis.root = object;\n\t\tthis.bones = bones;\n\n\t\tthis.matrix = object.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst bones = this.bones;\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t_matrixWorldInv.copy( this.root.matrixWorld ).invert();\n\n\t\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t\t_vector$9.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t_vector$9.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\n\nfunction getBoneList( object ) {\n\n\tconst boneList = [];\n\n\tif ( object && object.isBone ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( let i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nclass PointLightHelper extends Mesh {\n\n\tconstructor( light, sphereSize, color ) {\n\n\t\tconst geometry = new SphereBufferGeometry( sphereSize, 4, 2 );\n\t\tconst material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'PointLightHelper';\n\n\t\tthis.matrix = this.light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\n\t\t/*\n\t// TODO: delete this comment?\n\tconst distanceGeometry = new THREE.IcosahedronBufferGeometry( 1, 2 );\n\tconst distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tconst d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\t/*\n\t\tconst d = this.light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.visible = true;\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\t\t*/\n\n\t}\n\n}\n\nconst _vector$a = /*@__PURE__*/ new Vector3();\nconst _color1 = /*@__PURE__*/ new Color();\nconst _color2 = /*@__PURE__*/ new Color();\n\nclass HemisphereLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tconst geometry = new OctahedronBufferGeometry( size );\n\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\t\tif ( this.color === undefined ) this.material.vertexColors = true;\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\t\tconst colors = new Float32Array( position.count * 3 );\n\n\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\t\tthis.add( new Mesh( geometry, this.material ) );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tconst mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tconst colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t_color1.copy( this.light.color );\n\t\t\t_color2.copy( this.light.groundColor );\n\n\t\t\tfor ( let i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tconst color = ( i < ( l / 2 ) ) ? _color1 : _color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tmesh.lookAt( _vector$a.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t}\n\n}\n\nclass GridHelper extends LineSegments {\n\n\tconstructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst center = divisions / 2;\n\t\tconst step = size / divisions;\n\t\tconst halfSize = size / 2;\n\n\t\tconst vertices = [], colors = [];\n\n\t\tfor ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\t\tconst color = i === center ? color1 : color2;\n\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'GridHelper';\n\n\t}\n\n}\n\nclass PolarGridHelper extends LineSegments {\n\n\tconstructor( radius = 10, radials = 16, circles = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\t// create the radials\n\n\t\tfor ( let i = 0; i <= radials; i ++ ) {\n\n\t\t\tconst v = ( i / radials ) * ( Math.PI * 2 );\n\n\t\t\tconst x = Math.sin( v ) * radius;\n\t\t\tconst z = Math.cos( v ) * radius;\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tvertices.push( x, 0, z );\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tcolors.push( color.r, color.g, color.b );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t}\n\n\t\t// create the circles\n\n\t\tfor ( let i = 0; i <= circles; i ++ ) {\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tconst r = radius - ( radius / circles * i );\n\n\t\t\tfor ( let j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t// first vertex\n\n\t\t\t\tlet v = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tlet x = Math.sin( v ) * r;\n\t\t\t\tlet z = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t// second vertex\n\n\t\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'PolarGridHelper';\n\n\t}\n\n}\n\nconst _v1$6 = /*@__PURE__*/ new Vector3();\nconst _v2$3 = /*@__PURE__*/ new Vector3();\nconst _v3$1 = /*@__PURE__*/ new Vector3();\n\nclass DirectionalLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tif ( size === undefined ) size = 1;\n\n\t\tlet geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [\n\t\t\t- size, size, 0,\n\t\t\tsize, size, 0,\n\t\t\tsize, - size, 0,\n\t\t\t- size, - size, 0,\n\t\t\t- size, size, 0\n\t\t], 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.lightPlane = new Line( geometry, material );\n\t\tthis.add( this.lightPlane );\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\t\tthis.targetLine = new Line( geometry, material );\n\t\tthis.add( this.targetLine );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.lightPlane.geometry.dispose();\n\t\tthis.lightPlane.material.dispose();\n\t\tthis.targetLine.geometry.dispose();\n\t\tthis.targetLine.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\t_v1$6.setFromMatrixPosition( this.light.matrixWorld );\n\t\t_v2$3.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t_v3$1.subVectors( _v2$3, _v1$6 );\n\n\t\tthis.lightPlane.lookAt( _v2$3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( _v2$3 );\n\t\tthis.targetLine.scale.z = _v3$1.length();\n\n\t}\n\n}\n\nconst _vector$b = /*@__PURE__*/ new Vector3();\nconst _camera = /*@__PURE__*/ new Camera();\n\n/**\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttp://evanw.github.com/lightgl.js/tests/shadowmap.html\n */\n\nclass CameraHelper extends LineSegments {\n\n\tconstructor( camera ) {\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst pointMap = {};\n\n\t\t// colors\n\n\t\tconst colorFrustum = new Color( 0xffaa00 );\n\t\tconst colorCone = new Color( 0xff0000 );\n\t\tconst colorUp = new Color( 0x00aaff );\n\t\tconst colorTarget = new Color( 0xffffff );\n\t\tconst colorCross = new Color( 0x333333 );\n\n\t\t// near\n\n\t\taddLine( 'n1', 'n2', colorFrustum );\n\t\taddLine( 'n2', 'n4', colorFrustum );\n\t\taddLine( 'n4', 'n3', colorFrustum );\n\t\taddLine( 'n3', 'n1', colorFrustum );\n\n\t\t// far\n\n\t\taddLine( 'f1', 'f2', colorFrustum );\n\t\taddLine( 'f2', 'f4', colorFrustum );\n\t\taddLine( 'f4', 'f3', colorFrustum );\n\t\taddLine( 'f3', 'f1', colorFrustum );\n\n\t\t// sides\n\n\t\taddLine( 'n1', 'f1', colorFrustum );\n\t\taddLine( 'n2', 'f2', colorFrustum );\n\t\taddLine( 'n3', 'f3', colorFrustum );\n\t\taddLine( 'n4', 'f4', colorFrustum );\n\n\t\t// cone\n\n\t\taddLine( 'p', 'n1', colorCone );\n\t\taddLine( 'p', 'n2', colorCone );\n\t\taddLine( 'p', 'n3', colorCone );\n\t\taddLine( 'p', 'n4', colorCone );\n\n\t\t// up\n\n\t\taddLine( 'u1', 'u2', colorUp );\n\t\taddLine( 'u2', 'u3', colorUp );\n\t\taddLine( 'u3', 'u1', colorUp );\n\n\t\t// target\n\n\t\taddLine( 'c', 't', colorTarget );\n\t\taddLine( 'p', 'c', colorCross );\n\n\t\t// cross\n\n\t\taddLine( 'cn1', 'cn2', colorCross );\n\t\taddLine( 'cn3', 'cn4', colorCross );\n\n\t\taddLine( 'cf1', 'cf2', colorCross );\n\t\taddLine( 'cf3', 'cf4', colorCross );\n\n\t\tfunction addLine( a, b, color ) {\n\n\t\t\taddPoint( a, color );\n\t\t\taddPoint( b, color );\n\n\t\t}\n\n\t\tfunction addPoint( id, color ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\t\tpointMap[ id ] = [];\n\n\t\t\t}\n\n\t\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'CameraHelper';\n\n\t\tthis.camera = camera;\n\t\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\t\tthis.matrix = camera.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.pointMap = pointMap;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst pointMap = this.pointMap;\n\n\t\tconst w = 1, h = 1;\n\n\t\t// we need just camera projection matrix inverse\n\t\t// world matrix must be identity\n\n\t\t_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 );\n\t\tsetPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 );\n\t\tsetPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 );\n\t\tsetPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 );\n\t\tsetPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 );\n\t\tsetPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 );\n\t\tsetPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 );\n\t\tsetPoint( 'f4', pointMap, geometry, _camera, w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 );\n\t\tsetPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 );\n\t\tsetPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );\n\t\tsetPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );\n\n\t\tsetPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 );\n\t\tsetPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 );\n\t\tsetPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 );\n\t\tsetPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t}\n\n}\n\n\nfunction setPoint( point, pointMap, geometry, camera, x, y, z ) {\n\n\t_vector$b.set( x, y, z ).unproject( camera );\n\n\tconst points = pointMap[ point ];\n\n\tif ( points !== undefined ) {\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tposition.setXYZ( points[ i ], _vector$b.x, _vector$b.y, _vector$b.z );\n\n\t\t}\n\n\t}\n\n}\n\nconst _box$3 = /*@__PURE__*/ new Box3();\n\nclass BoxHelper extends LineSegments {\n\n\tconstructor( object, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\tconst positions = new Float32Array( 8 * 3 );\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.type = 'BoxHelper';\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\t_box$3.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( _box$3.isEmpty() ) return;\n\n\t\tconst min = _box$3.min;\n\t\tconst max = _box$3.max;\n\n\t\t/*\n\t\t\t5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tconst position = this.geometry.attributes.position;\n\t\tconst array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.object = object;\n\t\tthis.update();\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tLineSegments.prototype.copy.call( this, source );\n\n\t\tthis.object = source.object;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Box3Helper extends LineSegments {\n\n\tconstructor( box, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\t\tconst positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.box = box;\n\n\t\tthis.type = 'Box3Helper';\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst box = this.box;\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tbox.getCenter( this.position );\n\n\t\tbox.getSize( this.scale );\n\n\t\tthis.scale.multiplyScalar( 0.5 );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\nclass PlaneHelper extends Line {\n\n\tconstructor( plane, size = 1, hex = 0xffff00 ) {\n\n\t\tconst color = hex;\n\n\t\tconst positions = [ 1, - 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 ];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.computeBoundingSphere();\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.type = 'PlaneHelper';\n\n\t\tthis.plane = plane;\n\n\t\tthis.size = size;\n\n\t\tconst positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ];\n\n\t\tconst geometry2 = new BufferGeometry();\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\t\tgeometry2.computeBoundingSphere();\n\n\t\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tlet scale = - this.plane.constant;\n\n\t\tif ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter\n\n\t\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, scale );\n\n\t\tthis.children[ 0 ].material.side = ( scale < 0 ) ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here\n\n\t\tthis.lookAt( this.plane.normal );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\nconst _axis = /*@__PURE__*/ new Vector3();\nlet _lineGeometry, _coneGeometry;\n\nclass ArrowHelper extends Object3D {\n\n\tconstructor( dir, origin, length, color, headLength, headWidth ) {\n\n\t\tsuper();\n\t\t// dir is assumed to be normalized\n\n\t\tthis.type = 'ArrowHelper';\n\n\t\tif ( dir === undefined ) dir = new Vector3( 0, 0, 1 );\n\t\tif ( origin === undefined ) origin = new Vector3( 0, 0, 0 );\n\t\tif ( length === undefined ) length = 1;\n\t\tif ( color === undefined ) color = 0xffff00;\n\t\tif ( headLength === undefined ) headLength = 0.2 * length;\n\t\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\t\tif ( _lineGeometry === undefined ) {\n\n\t\t\t_lineGeometry = new BufferGeometry();\n\t\t\t_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\t_coneGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 );\n\t\t\t_coneGeometry.translate( 0, - 0.5, 0 );\n\n\t\t}\n\n\t\tthis.position.copy( origin );\n\n\t\tthis.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add( this.line );\n\n\t\tthis.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.cone.matrixAutoUpdate = false;\n\t\tthis.add( this.cone );\n\n\t\tthis.setDirection( dir );\n\t\tthis.setLength( length, headLength, headWidth );\n\n\t}\n\n\tsetDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\t_axis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tconst radians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( _axis, radians );\n\n\t\t}\n\n\t}\n\n\tsetLength( length, headLength, headWidth ) {\n\n\t\tif ( headLength === undefined ) headLength = 0.2 * length;\n\t\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\t\tthis.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458\n\t\tthis.line.updateMatrix();\n\n\t\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\t\tthis.cone.position.y = length;\n\t\tthis.cone.updateMatrix();\n\n\t}\n\n\tsetColor( color ) {\n\n\t\tthis.line.material.color.set( color );\n\t\tthis.cone.material.color.set( color );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tthis.line.copy( source.line );\n\t\tthis.cone.copy( source.cone );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AxesHelper extends LineSegments {\n\n\tconstructor( size = 1 ) {\n\n\t\tconst vertices = [\n\t\t\t0, 0, 0,\tsize, 0, 0,\n\t\t\t0, 0, 0,\t0, size, 0,\n\t\t\t0, 0, 0,\t0, 0, size\n\t\t];\n\n\t\tconst colors = [\n\t\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t\t0, 0, 1,\t0, 0.6, 1\n\t\t];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'AxesHelper';\n\n\t}\n\n}\n\nconst _floatView = new Float32Array( 1 );\nconst _int32View = new Int32Array( _floatView.buffer );\n\nconst DataUtils = {\n\n\t// Converts float32 to float16 (stored as uint16 value).\n\n\ttoHalfFloat: function ( val ) {\n\n\t\t// Source: http://gamedev.stackexchange.com/questions/17326/conversion-of-a-number-from-single-precision-floating-point-representation-to-a/17410#17410\n\n\t\t/* This method is faster than the OpenEXR implementation (very often\n\t\t* used, eg. in Ogre), with the additional benefit of rounding, inspired\n\t\t* by James Tursa?s half-precision code. */\n\n\t\t_floatView[ 0 ] = val;\n\t\tconst x = _int32View[ 0 ];\n\n\t\tlet bits = ( x >> 16 ) & 0x8000; /* Get the sign */\n\t\tlet m = ( x >> 12 ) & 0x07ff; /* Keep one extra bit for rounding */\n\t\tconst e = ( x >> 23 ) & 0xff; /* Using int is faster here */\n\n\t\t/* If zero, or denormal, or exponent underflows too much for a denormal\n\t\t\t* half, return signed zero. */\n\t\tif ( e < 103 ) return bits;\n\n\t\t/* If NaN, return NaN. If Inf or exponent overflow, return Inf. */\n\t\tif ( e > 142 ) {\n\n\t\t\tbits |= 0x7c00;\n\t\t\t/* If exponent was 0xff and one mantissa bit was set, it means NaN,\n\t\t\t\t\t\t* not Inf, so make sure we set one mantissa bit too. */\n\t\t\tbits |= ( ( e == 255 ) ? 0 : 1 ) && ( x & 0x007fffff );\n\t\t\treturn bits;\n\n\t\t}\n\n\t\t/* If exponent underflows but not too much, return a denormal */\n\t\tif ( e < 113 ) {\n\n\t\t\tm |= 0x0800;\n\t\t\t/* Extra rounding may overflow and set mantissa to 0 and exponent\n\t\t\t\t* to 1, which is OK. */\n\t\t\tbits |= ( m >> ( 114 - e ) ) + ( ( m >> ( 113 - e ) ) & 1 );\n\t\t\treturn bits;\n\n\t\t}\n\n\t\tbits |= ( ( e - 112 ) << 10 ) | ( m >> 1 );\n\t\t/* Extra rounding. An overflow will set mantissa to 0 and increment\n\t\t\t* the exponent, which is OK. */\n\t\tbits += m & 1;\n\t\treturn bits;\n\n\t}\n\n};\n\nconst LOD_MIN = 4;\nconst LOD_MAX = 8;\nconst SIZE_MAX = Math.pow( 2, LOD_MAX );\n\n// The standard deviations (radians) associated with the extra mips. These are\n// chosen to approximate a Trowbridge-Reitz distribution function times the\n// geometric shadowing function. These sigma values squared must match the\n// variance #defines in cube_uv_reflection_fragment.glsl.js.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\nconst TOTAL_LODS = LOD_MAX - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\nconst MAX_SAMPLES = 20;\n\nconst ENCODINGS = {\n\t[ LinearEncoding ]: 0,\n\t[ sRGBEncoding ]: 1,\n\t[ RGBEEncoding ]: 2,\n\t[ RGBM7Encoding ]: 3,\n\t[ RGBM16Encoding ]: 4,\n\t[ RGBDEncoding ]: 5,\n\t[ GammaEncoding ]: 6\n};\n\nconst _flatCamera = /*@__PURE__*/ new OrthographicCamera();\nconst { _lodPlanes, _sizeLods, _sigmas } = /*@__PURE__*/ _createPlanes();\nlet _oldTarget = null;\n\n// Golden Ratio\nconst PHI = ( 1 + Math.sqrt( 5 ) ) / 2;\nconst INV_PHI = 1 / PHI;\n\n// Vertices of a dodecahedron (except the opposites, which represent the\n// same axis), used as axis directions evenly spread on a sphere.\nconst _axisDirections = [\n\t/*@__PURE__*/ new Vector3( 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),\n\t/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ) ];\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n */\n\nclass PMREMGenerator {\n\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._blurMaterial = _getBlurShader( MAX_SAMPLES );\n\t\tthis._equirectShader = null;\n\t\tthis._cubemapShader = null;\n\n\t\tthis._compileMaterial( this._blurMaterial );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t * is placed at the origin).\n\t */\n\tfromScene( scene, sigma = 0, near = 0.1, far = 100 ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * (RGBFormat) or HDR (RGBEFormat). The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromEquirectangular( equirectangular ) {\n\n\t\treturn this._fromTexture( equirectangular );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * (RGBFormat) or HDR (RGBEFormat). The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromCubemap( cubemap ) {\n\n\t\treturn this._fromTexture( cubemap );\n\n\t}\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileCubemapShader() {\n\n\t\tif ( this._cubemapShader === null ) {\n\n\t\t\tthis._cubemapShader = _getCubemapShader();\n\t\t\tthis._compileMaterial( this._cubemapShader );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileEquirectangularShader() {\n\n\t\tif ( this._equirectShader === null ) {\n\n\t\t\tthis._equirectShader = _getEquirectShader();\n\t\t\tthis._compileMaterial( this._equirectShader );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose() {\n\n\t\tthis._blurMaterial.dispose();\n\n\t\tif ( this._cubemapShader !== null ) this._cubemapShader.dispose();\n\t\tif ( this._equirectShader !== null ) this._equirectShader.dispose();\n\n\t\tfor ( let i = 0; i < _lodPlanes.length; i ++ ) {\n\n\t\t\t_lodPlanes[ i ].dispose();\n\n\t\t}\n\n\t}\n\n\t// private interface\n\n\t_cleanup( outputTarget ) {\n\n\t\tthis._pingPongRenderTarget.dispose();\n\t\tthis._renderer.setRenderTarget( _oldTarget );\n\t\toutputTarget.scissorTest = false;\n\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t}\n\n\t_fromTexture( texture ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\tconst cubeUVRenderTarget = this._allocateTargets( texture );\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_allocateTargets( texture ) { // warning: null texture is valid\n\n\t\tconst params = {\n\t\t\tmagFilter: NearestFilter,\n\t\t\tminFilter: NearestFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\ttype: UnsignedByteType,\n\t\t\tformat: RGBEFormat,\n\t\t\tencoding: _isLDR( texture ) ? texture.encoding : RGBEEncoding,\n\t\t\tdepthBuffer: false\n\t\t};\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( params );\n\t\tcubeUVRenderTarget.depthBuffer = texture ? false : true;\n\t\tthis._pingPongRenderTarget = _createRenderTarget( params );\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_compileMaterial( material ) {\n\n\t\tconst tmpMesh = new Mesh( _lodPlanes[ 0 ], material );\n\t\tthis._renderer.compile( tmpMesh, _flatCamera );\n\n\t}\n\n\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {\n\n\t\tconst fov = 90;\n\t\tconst aspect = 1;\n\t\tconst cubeCamera = new PerspectiveCamera( fov, aspect, near, far );\n\t\tconst upSign = [ 1, - 1, 1, 1, 1, 1 ];\n\t\tconst forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];\n\t\tconst renderer = this._renderer;\n\n\t\tconst outputEncoding = renderer.outputEncoding;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\tconst clearColor = renderer.getClearColor();\n\t\tconst clearAlpha = renderer.getClearAlpha();\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.outputEncoding = LinearEncoding;\n\n\t\tlet background = scene.background;\n\t\tif ( background && background.isColor ) {\n\n\t\t\tbackground.convertSRGBToLinear();\n\t\t\t// Convert linear to RGBE\n\t\t\tconst maxComponent = Math.max( background.r, background.g, background.b );\n\t\t\tconst fExp = Math.min( Math.max( Math.ceil( Math.log2( maxComponent ) ), - 128.0 ), 127.0 );\n\t\t\tbackground = background.multiplyScalar( Math.pow( 2.0, - fExp ) );\n\t\t\tconst alpha = ( fExp + 128.0 ) / 255.0;\n\t\t\trenderer.setClearColor( background, alpha );\n\t\t\tscene.background = null;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\t\t\tif ( col == 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( forwardSign[ i ], 0, 0 );\n\n\t\t\t} else if ( col == 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.lookAt( 0, forwardSign[ i ], 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( 0, 0, forwardSign[ i ] );\n\n\t\t\t}\n\n\t\t\t_setViewport( cubeUVRenderTarget,\n\t\t\t\tcol * SIZE_MAX, i > 2 ? SIZE_MAX : 0, SIZE_MAX, SIZE_MAX );\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.outputEncoding = outputEncoding;\n\t\trenderer.setClearColor( clearColor, clearAlpha );\n\n\t}\n\n\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tif ( texture.isCubeTexture ) {\n\n\t\t\tif ( this._cubemapShader == null ) {\n\n\t\t\t\tthis._cubemapShader = _getCubemapShader();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( this._equirectShader == null ) {\n\n\t\t\t\tthis._equirectShader = _getEquirectShader();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = texture.isCubeTexture ? this._cubemapShader : this._equirectShader;\n\t\tconst mesh = new Mesh( _lodPlanes[ 0 ], material );\n\n\t\tconst uniforms = material.uniforms;\n\n\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\tif ( ! texture.isCubeTexture ) {\n\n\t\t\tuniforms[ 'texelSize' ].value.set( 1.0 / texture.image.width, 1.0 / texture.image.height );\n\n\t\t}\n\n\t\tuniforms[ 'inputEncoding' ].value = ENCODINGS[ texture.encoding ];\n\t\tuniforms[ 'outputEncoding' ].value = ENCODINGS[ cubeUVRenderTarget.texture.encoding ];\n\n\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * SIZE_MAX, 2 * SIZE_MAX );\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera );\n\n\t}\n\n\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tfor ( let i = 1; i < TOTAL_LODS; i ++ ) {\n\n\t\t\tconst sigma = Math.sqrt( _sigmas[ i ] * _sigmas[ i ] - _sigmas[ i - 1 ] * _sigmas[ i - 1 ] );\n\n\t\t\tconst poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];\n\n\t\t\tthis._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t}\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t */\n\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t}\n\n\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\tconsole.error(\n\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = new Mesh( _lodPlanes[ lodOut ], blurMaterial );\n\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\tconst pixels = _sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\tconsole.warn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i == 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\tblurUniforms[ 'samples' ].value = samples;\n\t\tblurUniforms[ 'weights' ].value = weights;\n\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t}\n\n\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\tblurUniforms[ 'mipInt' ].value = LOD_MAX - lodIn;\n\t\tblurUniforms[ 'inputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ];\n\t\tblurUniforms[ 'outputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ];\n\n\t\tconst outputSize = _sizeLods[ lodOut ];\n\t\tconst x = 3 * Math.max( 0, SIZE_MAX - 2 * outputSize );\n\t\tconst y = ( lodOut === 0 ? 0 : 2 * SIZE_MAX ) + 2 * outputSize * ( lodOut > LOD_MAX - LOD_MIN ? lodOut - LOD_MAX + LOD_MIN : 0 );\n\n\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera );\n\n\t}\n\n}\n\nfunction _isLDR( texture ) {\n\n\tif ( texture === undefined || texture.type !== UnsignedByteType ) return false;\n\n\treturn texture.encoding === LinearEncoding || texture.encoding === sRGBEncoding || texture.encoding === GammaEncoding;\n\n}\n\nfunction _createPlanes() {\n\n\tconst _lodPlanes = [];\n\tconst _sizeLods = [];\n\tconst _sigmas = [];\n\n\tlet lod = LOD_MAX;\n\n\tfor ( let i = 0; i < TOTAL_LODS; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\t_sizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > LOD_MAX - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - LOD_MAX + LOD_MIN - 1 ];\n\n\t\t} else if ( i == 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\t_sigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 1 );\n\t\tconst min = - texelSize / 2;\n\t\tconst max = 1 + texelSize / 2;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : - 1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t}\n\n\t\tconst planes = new BufferGeometry();\n\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\t_lodPlanes.push( planes );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { _lodPlanes, _sizeLods, _sigmas };\n\n}\n\nfunction _createRenderTarget( params ) {\n\n\tconst cubeUVRenderTarget = new WebGLRenderTarget( 3 * SIZE_MAX, 3 * SIZE_MAX, params );\n\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _setViewport( target, x, y, width, height ) {\n\n\ttarget.viewport.set( x, y, width, height );\n\ttarget.scissor.set( x, y, width, height );\n\n}\n\nfunction _getBlurShader( maxSamples ) {\n\n\tconst weights = new Float32Array( maxSamples );\n\tconst poleAxis = new Vector3( 0, 1, 0 );\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'SphericalGaussianBlur',\n\n\t\tdefines: { 'n': maxSamples },\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'samples': { value: 1 },\n\t\t\t'weights': { value: weights },\n\t\t\t'latitudinal': { value: false },\n\t\t\t'dTheta': { value: 0 },\n\t\t\t'mipInt': { value: 0 },\n\t\t\t'poleAxis': { value: poleAxis },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getEquirectShader() {\n\n\tconst texelSize = new Vector2( 1, 1 );\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'EquirectangularToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'texelSize': { value: texelSize },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getCubemapShader() {\n\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'CubemapToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getCommonVertexShader() {\n\n\treturn /* glsl */`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`;\n\n}\n\nfunction _getEncodings() {\n\n\treturn /* glsl */`\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t`;\n\n}\n\nfunction Face4( a, b, c, d, normal, color, materialIndex ) {\n\n\tconsole.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' );\n\treturn new Face3( a, b, c, normal, color, materialIndex );\n\n}\n\nconst LineStrip = 0;\nconst LinePieces = 1;\nconst NoColors = 0;\nconst FaceColors = 1;\nconst VertexColors = 2;\n\nfunction MeshFaceMaterial( materials ) {\n\n\tconsole.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' );\n\treturn materials;\n\n}\n\nfunction MultiMaterial( materials = [] ) {\n\n\tconsole.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' );\n\tmaterials.isMultiMaterial = true;\n\tmaterials.materials = materials;\n\tmaterials.clone = function () {\n\n\t\treturn materials.slice();\n\n\t};\n\n\treturn materials;\n\n}\n\nfunction PointCloud( geometry, material ) {\n\n\tconsole.warn( 'THREE.PointCloud has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction Particle( material ) {\n\n\tconsole.warn( 'THREE.Particle has been renamed to THREE.Sprite.' );\n\treturn new Sprite( material );\n\n}\n\nfunction ParticleSystem( geometry, material ) {\n\n\tconsole.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction PointCloudMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleBasicMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleSystemMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction Vertex( x, y, z ) {\n\n\tconsole.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' );\n\treturn new Vector3( x, y, z );\n\n}\n\n//\n\nfunction DynamicBufferAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.' );\n\treturn new BufferAttribute( array, itemSize ).setUsage( DynamicDrawUsage );\n\n}\n\nfunction Int8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' );\n\treturn new Int8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' );\n\treturn new Uint8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8ClampedAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' );\n\treturn new Uint8ClampedBufferAttribute( array, itemSize );\n\n}\n\nfunction Int16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' );\n\treturn new Int16BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' );\n\treturn new Uint16BufferAttribute( array, itemSize );\n\n}\n\nfunction Int32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' );\n\treturn new Int32BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' );\n\treturn new Uint32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' );\n\treturn new Float32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float64Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' );\n\treturn new Float64BufferAttribute( array, itemSize );\n\n}\n\n//\n\nCurve.create = function ( construct, getPoint ) {\n\n\tconsole.log( 'THREE.Curve.create() has been deprecated' );\n\n\tconstruct.prototype = Object.create( Curve.prototype );\n\tconstruct.prototype.constructor = construct;\n\tconstruct.prototype.getPoint = getPoint;\n\n\treturn construct;\n\n};\n\n//\n\nObject.assign( CurvePath.prototype, {\n\n\tcreatePointsGeometry: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t// generate geometry from path points (for Line or Points objects)\n\n\t\tconst pts = this.getPoints( divisions );\n\t\treturn this.createGeometry( pts );\n\n\t},\n\n\tcreateSpacedPointsGeometry: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t// generate geometry from equidistant sampling along the path\n\n\t\tconst pts = this.getSpacedPoints( divisions );\n\t\treturn this.createGeometry( pts );\n\n\t},\n\n\tcreateGeometry: function ( points ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\tconst geometry = new Geometry();\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tgeometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\n//\n\nObject.assign( Path.prototype, {\n\n\tfromPoints: function ( points ) {\n\n\t\tconsole.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' );\n\t\treturn this.setFromPoints( points );\n\n\t}\n\n} );\n\n//\n\nfunction ClosedSplineCurve3( points ) {\n\n\tconsole.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\tthis.closed = true;\n\n}\n\nClosedSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n//\n\nfunction SplineCurve3( points ) {\n\n\tconsole.warn( 'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\n}\n\nSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n//\n\nfunction Spline( points ) {\n\n\tconsole.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\n}\n\nSpline.prototype = Object.create( CatmullRomCurve3.prototype );\n\nObject.assign( Spline.prototype, {\n\n\tinitFromArray: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .initFromArray() has been removed.' );\n\n\t},\n\tgetControlPointsArray: function ( /* optionalTarget */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .getControlPointsArray() has been removed.' );\n\n\t},\n\treparametrizeByArcLength: function ( /* samplingCoef */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nfunction AxisHelper( size ) {\n\n\tconsole.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' );\n\treturn new AxesHelper( size );\n\n}\n\nfunction BoundingBoxHelper( object, color ) {\n\n\tconsole.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' );\n\treturn new BoxHelper( object, color );\n\n}\n\nfunction EdgesHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' );\n\treturn new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\nGridHelper.prototype.setColors = function () {\n\n\tconsole.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' );\n\n};\n\nSkeletonHelper.prototype.update = function () {\n\n\tconsole.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );\n\n};\n\nfunction WireframeHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' );\n\treturn new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\n//\n\nObject.assign( Loader.prototype, {\n\n\textractUrlBase: function ( url ) {\n\n\t\tconsole.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' );\n\t\treturn LoaderUtils.extractUrlBase( url );\n\n\t}\n\n} );\n\nLoader.Handlers = {\n\n\tadd: function ( /* regex, loader */ ) {\n\n\t\tconsole.error( 'THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.' );\n\n\t},\n\n\tget: function ( /* file */ ) {\n\n\t\tconsole.error( 'THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.' );\n\n\t}\n\n};\n\nfunction XHRLoader( manager ) {\n\n\tconsole.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' );\n\treturn new FileLoader( manager );\n\n}\n\nfunction BinaryTextureLoader( manager ) {\n\n\tconsole.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' );\n\treturn new DataTextureLoader( manager );\n\n}\n\n//\n\nObject.assign( Box2.prototype, {\n\n\tcenter: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t},\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tsize: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box2: .size() has been renamed to .getSize().' );\n\t\treturn this.getSize( optionalTarget );\n\n\t}\n} );\n\nObject.assign( Box3.prototype, {\n\n\tcenter: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t},\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tisIntersectionSphere: function ( sphere ) {\n\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\treturn this.intersectsSphere( sphere );\n\n\t},\n\tsize: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box3: .size() has been renamed to .getSize().' );\n\t\treturn this.getSize( optionalTarget );\n\n\t}\n} );\n\nObject.assign( Sphere.prototype, {\n\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Sphere: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\n} );\n\nFrustum.prototype.setFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().' );\n\treturn this.setFromProjectionMatrix( m );\n\n};\n\nLine3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\nObject.assign( MathUtils, {\n\n\trandom16: function () {\n\n\t\tconsole.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' );\n\t\treturn Math.random();\n\n\t},\n\n\tnearestPowerOfTwo: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' );\n\t\treturn MathUtils.floorPowerOfTwo( value );\n\n\t},\n\n\tnextPowerOfTwo: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' );\n\t\treturn MathUtils.ceilPowerOfTwo( value );\n\n\t}\n\n} );\n\nObject.assign( Matrix3.prototype, {\n\n\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\tconsole.warn( \"THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\treturn this.toArray( array, offset );\n\n\t},\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\n\t\treturn vector.applyMatrix3( this );\n\n\t},\n\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' );\n\n\t},\n\tapplyToBufferAttribute: function ( attribute ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.' );\n\t\treturn attribute.applyMatrix3( this );\n\n\t},\n\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\tconsole.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' );\n\n\t},\n\tgetInverse: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\t\treturn this.copy( matrix ).invert();\n\n\t}\n\n} );\n\nObject.assign( Matrix4.prototype, {\n\n\textractPosition: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\n\t\treturn this.copyPosition( m );\n\n\t},\n\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\tconsole.warn( \"THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\treturn this.toArray( array, offset );\n\n\t},\n\tgetPosition: function () {\n\n\t\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\t\treturn new Vector3().setFromMatrixColumn( this, 3 );\n\n\t},\n\tsetRotationFromQuaternion: function ( q ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\n\t\treturn this.makeRotationFromQuaternion( q );\n\n\t},\n\tmultiplyToArray: function () {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' );\n\n\t},\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\tmultiplyVector4: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' );\n\n\t},\n\trotateAxis: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\n\t\tv.transformDirection( this );\n\n\t},\n\tcrossVector: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\ttranslate: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\n\n\t},\n\trotateX: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\n\n\t},\n\trotateY: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\n\n\t},\n\trotateZ: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\n\n\t},\n\trotateByAxis: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\n\n\t},\n\tapplyToBufferAttribute: function ( attribute ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.' );\n\t\treturn attribute.applyMatrix4( this );\n\n\t},\n\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\tconsole.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' );\n\n\t},\n\tmakeFrustum: function ( left, right, bottom, top, near, far ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' );\n\t\treturn this.makePerspective( left, right, top, bottom, near, far );\n\n\t},\n\tgetInverse: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\t\treturn this.copy( matrix ).invert();\n\n\t}\n\n} );\n\nPlane.prototype.isIntersectionLine = function ( line ) {\n\n\tconsole.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' );\n\treturn this.intersectsLine( line );\n\n};\n\nObject.assign( Quaternion.prototype, {\n\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' );\n\t\treturn vector.applyQuaternion( this );\n\n\t},\n\tinverse: function ( ) {\n\n\t\tconsole.warn( 'THREE.Quaternion: .inverse() has been renamed to invert().' );\n\t\treturn this.invert();\n\n\t}\n\n} );\n\nObject.assign( Ray.prototype, {\n\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tisIntersectionPlane: function ( plane ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\n\t\treturn this.intersectsPlane( plane );\n\n\t},\n\tisIntersectionSphere: function ( sphere ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\treturn this.intersectsSphere( sphere );\n\n\t}\n\n} );\n\nObject.assign( Triangle.prototype, {\n\n\tarea: function () {\n\n\t\tconsole.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' );\n\t\treturn this.getArea();\n\n\t},\n\tbarycoordFromPoint: function ( point, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\treturn this.getBarycoord( point, target );\n\n\t},\n\tmidpoint: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' );\n\t\treturn this.getMidpoint( target );\n\n\t},\n\tnormal: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\treturn this.getNormal( target );\n\n\t},\n\tplane: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' );\n\t\treturn this.getPlane( target );\n\n\t}\n\n} );\n\nObject.assign( Triangle, {\n\n\tbarycoordFromPoint: function ( point, a, b, c, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\treturn Triangle.getBarycoord( point, a, b, c, target );\n\n\t},\n\tnormal: function ( a, b, c, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\treturn Triangle.getNormal( a, b, c, target );\n\n\t}\n\n} );\n\nObject.assign( Shape.prototype, {\n\n\textractAllPoints: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' );\n\t\treturn this.extractPoints( divisions );\n\n\t},\n\textrude: function ( options ) {\n\n\t\tconsole.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' );\n\t\treturn new ExtrudeGeometry( this, options );\n\n\t},\n\tmakeGeometry: function ( options ) {\n\n\t\tconsole.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' );\n\t\treturn new ShapeGeometry( this, options );\n\n\t}\n\n} );\n\nObject.assign( Vector2.prototype, {\n\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tdistanceToManhattan: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\treturn this.manhattanDistanceTo( v );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\nObject.assign( Vector3.prototype, {\n\n\tsetEulerFromRotationMatrix: function () {\n\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\n\n\t},\n\tsetEulerFromQuaternion: function () {\n\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\n\n\t},\n\tgetPositionFromMatrix: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\n\t\treturn this.setFromMatrixPosition( m );\n\n\t},\n\tgetScaleFromMatrix: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\n\t\treturn this.setFromMatrixScale( m );\n\n\t},\n\tgetColumnFromMatrix: function ( index, matrix ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\n\t\treturn this.setFromMatrixColumn( matrix, index );\n\n\t},\n\tapplyProjection: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' );\n\t\treturn this.applyMatrix4( m );\n\n\t},\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tdistanceToManhattan: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\treturn this.manhattanDistanceTo( v );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\nObject.assign( Vector4.prototype, {\n\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\n//\n\nObject.assign( Geometry.prototype, {\n\n\tcomputeTangents: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeTangents() has been removed.' );\n\n\t},\n\tcomputeLineDistances: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' );\n\n\t},\n\tapplyMatrix: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\treturn this.applyMatrix4( matrix );\n\n\t}\n\n} );\n\nObject.assign( Object3D.prototype, {\n\n\tgetChildByName: function ( name ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\n\t\treturn this.getObjectByName( name );\n\n\t},\n\trenderDepth: function () {\n\n\t\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\n\n\t},\n\ttranslate: function ( distance, axis ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\n\t\treturn this.translateOnAxis( axis, distance );\n\n\t},\n\tgetWorldRotation: function () {\n\n\t\tconsole.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' );\n\n\t},\n\tapplyMatrix: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\treturn this.applyMatrix4( matrix );\n\n\t}\n\n} );\n\nObject.defineProperties( Object3D.prototype, {\n\n\teulerOrder: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\treturn this.rotation.order;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\tthis.rotation.order = value;\n\n\t\t}\n\t},\n\tuseQuaternion: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t}\n\t}\n\n} );\n\nObject.assign( Mesh.prototype, {\n\n\tsetDrawMode: function () {\n\n\t\tconsole.error( 'THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n\t},\n\n} );\n\nObject.defineProperties( Mesh.prototype, {\n\n\tdrawMode: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.' );\n\t\t\treturn TrianglesDrawMode;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( LOD.prototype, {\n\n\tobjects: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.LOD: .objects has been renamed to .levels.' );\n\t\t\treturn this.levels;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperty( Skeleton.prototype, 'useVertexTexture', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t},\n\tset: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t}\n\n} );\n\nSkinnedMesh.prototype.initBones = function () {\n\n\tconsole.error( 'THREE.SkinnedMesh: initBones() has been removed.' );\n\n};\n\nObject.defineProperty( Curve.prototype, '__arcLengthDivisions', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\treturn this.arcLengthDivisions;\n\n\t},\n\tset: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\tthis.arcLengthDivisions = value;\n\n\t}\n\n} );\n\n//\n\nPerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) {\n\n\tconsole.warn( \"THREE.PerspectiveCamera.setLens is deprecated. \" +\n\t\t\t\"Use .setFocalLength and .filmGauge for a photographic setup.\" );\n\n\tif ( filmGauge !== undefined ) this.filmGauge = filmGauge;\n\tthis.setFocalLength( focalLength );\n\n};\n\n//\n\nObject.defineProperties( Light.prototype, {\n\tonlyShadow: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .onlyShadow has been removed.' );\n\n\t\t}\n\t},\n\tshadowCameraFov: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' );\n\t\t\tthis.shadow.camera.fov = value;\n\n\t\t}\n\t},\n\tshadowCameraLeft: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' );\n\t\t\tthis.shadow.camera.left = value;\n\n\t\t}\n\t},\n\tshadowCameraRight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' );\n\t\t\tthis.shadow.camera.right = value;\n\n\t\t}\n\t},\n\tshadowCameraTop: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' );\n\t\t\tthis.shadow.camera.top = value;\n\n\t\t}\n\t},\n\tshadowCameraBottom: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' );\n\t\t\tthis.shadow.camera.bottom = value;\n\n\t\t}\n\t},\n\tshadowCameraNear: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' );\n\t\t\tthis.shadow.camera.near = value;\n\n\t\t}\n\t},\n\tshadowCameraFar: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' );\n\t\t\tthis.shadow.camera.far = value;\n\n\t\t}\n\t},\n\tshadowCameraVisible: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' );\n\n\t\t}\n\t},\n\tshadowBias: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' );\n\t\t\tthis.shadow.bias = value;\n\n\t\t}\n\t},\n\tshadowDarkness: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowDarkness has been removed.' );\n\n\t\t}\n\t},\n\tshadowMapWidth: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' );\n\t\t\tthis.shadow.mapSize.width = value;\n\n\t\t}\n\t},\n\tshadowMapHeight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' );\n\t\t\tthis.shadow.mapSize.height = value;\n\n\t\t}\n\t}\n} );\n\n//\n\nObject.defineProperties( BufferAttribute.prototype, {\n\n\tlength: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' );\n\t\t\treturn this.array.length;\n\n\t\t}\n\t},\n\tdynamic: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\treturn this.usage === DynamicDrawUsage;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\tthis.setUsage( DynamicDrawUsage );\n\n\t\t}\n\t}\n\n} );\n\nObject.assign( BufferAttribute.prototype, {\n\tsetDynamic: function ( value ) {\n\n\t\tconsole.warn( 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\t\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\t\treturn this;\n\n\t},\n\tcopyIndicesArray: function ( /* indices */ ) {\n\n\t\tconsole.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' );\n\n\t},\n\tsetArray: function ( /* array */ ) {\n\n\t\tconsole.error( 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n\t}\n} );\n\nObject.assign( BufferGeometry.prototype, {\n\n\taddIndex: function ( index ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\n\t\tthis.setIndex( index );\n\n\t},\n\taddAttribute: function ( name, attribute ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().' );\n\n\t\tif ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\n\n\t\t\treturn this.setAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\n\n\t\t}\n\n\t\tif ( name === 'index' ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' );\n\t\t\tthis.setIndex( attribute );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\treturn this.setAttribute( name, attribute );\n\n\t},\n\taddDrawCall: function ( start, count, indexOffset ) {\n\n\t\tif ( indexOffset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\n\n\t\t}\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\n\t\tthis.addGroup( start, count );\n\n\t},\n\tclearDrawCalls: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\n\t\tthis.clearGroups();\n\n\t},\n\tcomputeTangents: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' );\n\n\t},\n\tcomputeOffsets: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\n\n\t},\n\tremoveAttribute: function ( name ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().' );\n\n\t\treturn this.deleteAttribute( name );\n\n\t},\n\tapplyMatrix: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\treturn this.applyMatrix4( matrix );\n\n\t}\n\n} );\n\nObject.defineProperties( BufferGeometry.prototype, {\n\n\tdrawcalls: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t},\n\toffsets: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( InstancedBufferGeometry.prototype, {\n\n\tmaxInstancedCount: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' );\n\t\t\treturn this.instanceCount;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' );\n\t\t\tthis.instanceCount = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( Raycaster.prototype, {\n\n\tlinePrecision: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' );\n\t\t\treturn this.params.Line.threshold;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' );\n\t\t\tthis.params.Line.threshold = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( InterleavedBuffer.prototype, {\n\n\tdynamic: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' );\n\t\t\treturn this.usage === DynamicDrawUsage;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' );\n\t\t\tthis.setUsage( value );\n\n\t\t}\n\t}\n\n} );\n\nObject.assign( InterleavedBuffer.prototype, {\n\tsetDynamic: function ( value ) {\n\n\t\tconsole.warn( 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\t\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\t\treturn this;\n\n\t},\n\tsetArray: function ( /* array */ ) {\n\n\t\tconsole.error( 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n\t}\n} );\n\n//\n\nObject.assign( ExtrudeBufferGeometry.prototype, {\n\n\tgetArrays: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .getArrays() has been removed.' );\n\n\t},\n\n\taddShapeList: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.' );\n\n\t},\n\n\taddShape: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShape() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nObject.assign( Scene.prototype, {\n\n\tdispose: function () {\n\n\t\tconsole.error( 'THREE.Scene: .dispose() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Uniform.prototype, {\n\n\tdynamic: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' );\n\n\t\t}\n\t},\n\tonUpdate: {\n\t\tvalue: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' );\n\t\t\treturn this;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Material.prototype, {\n\n\twrapAround: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t}\n\t},\n\n\toverdraw: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t}\n\t},\n\n\twrapRGB: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapRGB has been removed.' );\n\t\t\treturn new Color();\n\n\t\t}\n\t},\n\n\tshading: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\tthis.flatShading = ( value === FlatShading );\n\n\t\t}\n\t},\n\n\tstencilMask: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\treturn this.stencilFuncMask;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\tthis.stencilFuncMask = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( MeshPhongMaterial.prototype, {\n\n\tmetal: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( MeshPhysicalMaterial.prototype, {\n\n\ttransparency: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' );\n\t\t\treturn this.transmission;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' );\n\t\t\tthis.transmission = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( ShaderMaterial.prototype, {\n\n\tderivatives: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\treturn this.extensions.derivatives;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\tthis.extensions.derivatives = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.assign( WebGLRenderer.prototype, {\n\n\tclearTarget: function ( renderTarget, color, depth, stencil ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' );\n\t\tthis.setRenderTarget( renderTarget );\n\t\tthis.clear( color, depth, stencil );\n\n\t},\n\tanimate: function ( callback ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' );\n\t\tthis.setAnimationLoop( callback );\n\n\t},\n\tgetCurrentRenderTarget: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' );\n\t\treturn this.getRenderTarget();\n\n\t},\n\tgetMaxAnisotropy: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' );\n\t\treturn this.capabilities.getMaxAnisotropy();\n\n\t},\n\tgetPrecision: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' );\n\t\treturn this.capabilities.precision;\n\n\t},\n\tresetGLState: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' );\n\t\treturn this.state.reset();\n\n\t},\n\tsupportsFloatTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).' );\n\t\treturn this.extensions.get( 'OES_texture_float' );\n\n\t},\n\tsupportsHalfFloatTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).' );\n\t\treturn this.extensions.get( 'OES_texture_half_float' );\n\n\t},\n\tsupportsStandardDerivatives: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).' );\n\t\treturn this.extensions.get( 'OES_standard_derivatives' );\n\n\t},\n\tsupportsCompressedTextureS3TC: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).' );\n\t\treturn this.extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t},\n\tsupportsCompressedTexturePVRTC: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).' );\n\t\treturn this.extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t},\n\tsupportsBlendMinMax: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).' );\n\t\treturn this.extensions.get( 'EXT_blend_minmax' );\n\n\t},\n\tsupportsVertexTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' );\n\t\treturn this.capabilities.vertexTextures;\n\n\t},\n\tsupportsInstancedArrays: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).' );\n\t\treturn this.extensions.get( 'ANGLE_instanced_arrays' );\n\n\t},\n\tenableScissorTest: function ( boolean ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );\n\t\tthis.setScissorTest( boolean );\n\n\t},\n\tinitMaterial: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\n\n\t},\n\taddPrePlugin: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\n\n\t},\n\taddPostPlugin: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\n\n\t},\n\tupdateShadowMap: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\n\n\t},\n\tsetFaceCulling: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' );\n\n\t},\n\tallocTextureUnit: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .allocTextureUnit() has been removed.' );\n\n\t},\n\tsetTexture: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setTexture() has been removed.' );\n\n\t},\n\tsetTexture2D: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setTexture2D() has been removed.' );\n\n\t},\n\tsetTextureCube: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setTextureCube() has been removed.' );\n\n\t},\n\tgetActiveMipMapLevel: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().' );\n\t\treturn this.getActiveMipmapLevel();\n\n\t}\n\n} );\n\nObject.defineProperties( WebGLRenderer.prototype, {\n\n\tshadowMapEnabled: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.enabled;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' );\n\t\t\tthis.shadowMap.enabled = value;\n\n\t\t}\n\t},\n\tshadowMapType: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' );\n\t\t\tthis.shadowMap.type = value;\n\n\t\t}\n\t},\n\tshadowMapCullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\tcontext: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' );\n\t\t\treturn this.getContext();\n\n\t\t}\n\t},\n\tvr: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .vr has been renamed to .xr' );\n\t\t\treturn this.xr;\n\n\t\t}\n\t},\n\tgammaInput: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\n\t\t}\n\t},\n\tgammaOutput: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\tthis.outputEncoding = ( value === true ) ? sRGBEncoding : LinearEncoding;\n\n\t\t}\n\t},\n\ttoneMappingWhitePoint: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\t\t\treturn 1.0;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\n\t\t}\n\t},\n\n} );\n\nObject.defineProperties( WebGLShadowMap.prototype, {\n\n\tcullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* cullFace */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderReverseSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderSingleSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t}\n\n} );\n\nfunction WebGLRenderTargetCube( width, height, options ) {\n\n\tconsole.warn( 'THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).' );\n\treturn new WebGLCubeRenderTarget( width, options );\n\n}\n\n//\n\nObject.defineProperties( WebGLRenderTarget.prototype, {\n\n\twrapS: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\treturn this.texture.wrapS;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\tthis.texture.wrapS = value;\n\n\t\t}\n\t},\n\twrapT: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\treturn this.texture.wrapT;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\tthis.texture.wrapT = value;\n\n\t\t}\n\t},\n\tmagFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\treturn this.texture.magFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\tthis.texture.magFilter = value;\n\n\t\t}\n\t},\n\tminFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\treturn this.texture.minFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\tthis.texture.minFilter = value;\n\n\t\t}\n\t},\n\tanisotropy: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\treturn this.texture.anisotropy;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\tthis.texture.anisotropy = value;\n\n\t\t}\n\t},\n\toffset: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\treturn this.texture.offset;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\tthis.texture.offset = value;\n\n\t\t}\n\t},\n\trepeat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\treturn this.texture.repeat;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\tthis.texture.repeat = value;\n\n\t\t}\n\t},\n\tformat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\treturn this.texture.format;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\tthis.texture.format = value;\n\n\t\t}\n\t},\n\ttype: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\treturn this.texture.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\tthis.texture.type = value;\n\n\t\t}\n\t},\n\tgenerateMipmaps: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\treturn this.texture.generateMipmaps;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\tthis.texture.generateMipmaps = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Audio.prototype, {\n\n\tload: {\n\t\tvalue: function ( file ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' );\n\t\t\tconst scope = this;\n\t\t\tconst audioLoader = new AudioLoader();\n\t\t\taudioLoader.load( file, function ( buffer ) {\n\n\t\t\t\tscope.setBuffer( buffer );\n\n\t\t\t} );\n\t\t\treturn this;\n\n\t\t}\n\t},\n\tstartTime: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Audio: .startTime is now .play( delay ).' );\n\n\t\t}\n\t}\n\n} );\n\nAudioAnalyser.prototype.getData = function () {\n\n\tconsole.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' );\n\treturn this.getFrequencyData();\n\n};\n\n//\n\nCubeCamera.prototype.updateCubeMap = function ( renderer, scene ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' );\n\treturn this.update( renderer, scene );\n\n};\n\nCubeCamera.prototype.clear = function ( renderer, color, depth, stencil ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .clear() is now .renderTarget.clear().' );\n\treturn this.renderTarget.clear( renderer, color, depth, stencil );\n\n};\n\n//\n\nconst GeometryUtils = {\n\n\tmerge: function ( geometry1, geometry2, materialIndexOffset ) {\n\n\t\tconsole.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' );\n\t\tlet matrix;\n\n\t\tif ( geometry2.isMesh ) {\n\n\t\t\tgeometry2.matrixAutoUpdate && geometry2.updateMatrix();\n\n\t\t\tmatrix = geometry2.matrix;\n\t\t\tgeometry2 = geometry2.geometry;\n\n\t\t}\n\n\t\tgeometry1.merge( geometry2, matrix, materialIndexOffset );\n\n\t},\n\n\tcenter: function ( geometry ) {\n\n\t\tconsole.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' );\n\t\treturn geometry.center();\n\n\t}\n\n};\n\nImageUtils.crossOrigin = undefined;\n\nImageUtils.loadTexture = function ( url, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\n\n\tconst loader = new TextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tconst texture = loader.load( url, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\nImageUtils.loadTextureCube = function ( urls, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\n\n\tconst loader = new CubeTextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tconst texture = loader.load( urls, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\nImageUtils.loadCompressedTexture = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\nImageUtils.loadCompressedTextureCube = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\n//\n\nfunction CanvasRenderer() {\n\n\tconsole.error( 'THREE.CanvasRenderer has been removed' );\n\n}\n\n//\n\nfunction JSONLoader() {\n\n\tconsole.error( 'THREE.JSONLoader has been removed.' );\n\n}\n\n//\n\nconst SceneUtils = {\n\n\tcreateMultiMaterialObject: function ( /* geometry, materials */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t},\n\n\tdetach: function ( /* child, parent, scene */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t},\n\n\tattach: function ( /* child, scene, parent */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t}\n\n};\n\n//\n\nfunction LensFlare() {\n\n\tconsole.error( 'THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js' );\n\n}\n\nif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t/* eslint-disable no-undef */\n\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\trevision: REVISION,\n\t} } ) );\n\t/* eslint-enable no-undef */\n\n}\n\nexport { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AlphaFormat, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AmbientLightProbe, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, AxisHelper, BackSide, BasicDepthPacking, BasicShadowMap, BinaryTextureLoader, Bone, BooleanKeyframeTrack, BoundingBoxHelper, Box2, Box3, Box3Helper, BoxBufferGeometry, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasRenderer, CanvasTexture, CatmullRomCurve3, CineonToneMapping, CircleBufferGeometry, CircleGeometry, ClampToEdgeWrapping, Clock, ClosedSplineCurve3, Color, ColorKeyframeTrack, CompressedTexture, CompressedTextureLoader, ConeBufferGeometry, ConeGeometry, CubeCamera, BoxGeometry as CubeGeometry, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubeUVRefractionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderBufferGeometry, CylinderGeometry, Cylindrical, DataTexture, DataTexture2DArray, DataTexture3D, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronBufferGeometry, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicBufferAttribute, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EdgesHelper, EllipseCurve, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExtrudeBufferGeometry, ExtrudeGeometry, Face3, Face4, FaceColors, FileLoader, FlatShading, Float16BufferAttribute, Float32Attribute, Float32BufferAttribute, Float64Attribute, Float64BufferAttribute, FloatType, Fog, FogExp2, Font, FontLoader, FrontSide, Frustum, GLBufferAttribute, GLSL1, GLSL3, GammaEncoding, Geometry, GeometryUtils, GreaterDepth, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HalfFloatType, HemisphereLight, HemisphereLightHelper, HemisphereLightProbe, IcosahedronBufferGeometry, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, ImmediateRenderObject, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16Attribute, Int16BufferAttribute, Int32Attribute, Int32BufferAttribute, Int8Attribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InvertStencilOp, JSONLoader, KeepStencilOp, KeyframeTrack, LOD, LatheBufferGeometry, LatheGeometry, Layers, LensFlare, LessDepth, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LinePieces, LineSegments, LineStrip, LinearEncoding, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearToneMapping, Loader, LoaderUtils, LoadingManager, LogLuvEncoding, LoopOnce, LoopPingPong, LoopRepeat, LuminanceAlphaFormat, LuminanceFormat, MOUSE, Material, MaterialLoader, MathUtils as Math, MathUtils, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshFaceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiMaterial, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeverDepth, NeverStencilFunc, NoBlending, NoColors, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronBufferGeometry, OctahedronGeometry, OneFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, ParametricBufferGeometry, ParametricGeometry, Particle, ParticleBasicMaterial, ParticleSystem, ParticleSystemMaterial, Path, PerspectiveCamera, Plane, PlaneBufferGeometry, PlaneGeometry, PlaneHelper, PointCloud, PointCloudMaterial, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronBufferGeometry, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, REVISION, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBDEncoding, RGBEEncoding, RGBEFormat, RGBFormat, RGBIntegerFormat, RGBM16Encoding, RGBM7Encoding, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RingBufferGeometry, RingGeometry, SRGB8_ALPHA8_ASTC_10x10_Format, SRGB8_ALPHA8_ASTC_10x5_Format, SRGB8_ALPHA8_ASTC_10x6_Format, SRGB8_ALPHA8_ASTC_10x8_Format, SRGB8_ALPHA8_ASTC_12x10_Format, SRGB8_ALPHA8_ASTC_12x12_Format, SRGB8_ALPHA8_ASTC_4x4_Format, SRGB8_ALPHA8_ASTC_5x4_Format, SRGB8_ALPHA8_ASTC_5x5_Format, SRGB8_ALPHA8_ASTC_6x5_Format, SRGB8_ALPHA8_ASTC_6x6_Format, SRGB8_ALPHA8_ASTC_8x5_Format, SRGB8_ALPHA8_ASTC_8x6_Format, SRGB8_ALPHA8_ASTC_8x8_Format, Scene, SceneUtils, ShaderChunk, ShaderLib, ShaderMaterial, ShadowMaterial, Shape, ShapeBufferGeometry, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, SmoothShading, Sphere, SphereBufferGeometry, SphereGeometry, Spherical, SphericalHarmonics3, Spline, SplineCurve, SplineCurve3, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronBufferGeometry, TetrahedronGeometry, TextBufferGeometry, TextGeometry, Texture, TextureLoader, TorusBufferGeometry, TorusGeometry, TorusKnotBufferGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeBufferGeometry, TubeGeometry, UVMapping, Uint16Attribute, Uint16BufferAttribute, Uint32Attribute, Uint32BufferAttribute, Uint8Attribute, Uint8BufferAttribute, Uint8ClampedAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt248Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShort565Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, Vertex, VertexColors, VideoTexture, WebGL1Renderer, WebGLCubeRenderTarget, WebGLMultisampleRenderTarget, WebGLRenderTarget, WebGLRenderTargetCube, WebGLRenderer, WebGLUtils, WireframeGeometry, WireframeHelper, WrapAroundEnding, XHRLoader, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, sRGBEncoding };\n","import {\n\tEventDispatcher,\n\tMatrix4,\n\tPlane,\n\tRaycaster,\n\tVector2,\n\tVector3\n} from \"../../../build/three.module.js\";\n\nvar DragControls = function ( _objects, _camera, _domElement ) {\n\n\tvar _plane = new Plane();\n\tvar _raycaster = new Raycaster();\n\n\tvar _mouse = new Vector2();\n\tvar _offset = new Vector3();\n\tvar _intersection = new Vector3();\n\tvar _worldPosition = new Vector3();\n\tvar _inverseMatrix = new Matrix4();\n\tvar _intersections = [];\n\n\tvar _selected = null, _hovered = null;\n\n\t//\n\n\tvar scope = this;\n\n\tfunction activate() {\n\n\t\t_domElement.addEventListener( 'pointermove', onPointerMove, false );\n\t\t_domElement.addEventListener( 'pointerdown', onPointerDown, false );\n\t\t_domElement.addEventListener( 'pointerup', onPointerCancel, false );\n\t\t_domElement.addEventListener( 'pointerleave', onPointerCancel, false );\n\t\t_domElement.addEventListener( 'touchmove', onTouchMove, false );\n\t\t_domElement.addEventListener( 'touchstart', onTouchStart, false );\n\t\t_domElement.addEventListener( 'touchend', onTouchEnd, false );\n\n\t}\n\n\tfunction deactivate() {\n\n\t\t_domElement.removeEventListener( 'pointermove', onPointerMove, false );\n\t\t_domElement.removeEventListener( 'pointerdown', onPointerDown, false );\n\t\t_domElement.removeEventListener( 'pointerup', onPointerCancel, false );\n\t\t_domElement.removeEventListener( 'pointerleave', onPointerCancel, false );\n\t\t_domElement.removeEventListener( 'touchmove', onTouchMove, false );\n\t\t_domElement.removeEventListener( 'touchstart', onTouchStart, false );\n\t\t_domElement.removeEventListener( 'touchend', onTouchEnd, false );\n\n\t\t_domElement.style.cursor = '';\n\n\t}\n\n\tfunction dispose() {\n\n\t\tdeactivate();\n\n\t}\n\n\tfunction getObjects() {\n\n\t\treturn _objects;\n\n\t}\n\n\tfunction onPointerMove( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseMove( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onMouseMove( event ) {\n\n\t\tvar rect = _domElement.getBoundingClientRect();\n\n\t\t_mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;\n\t\t_mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;\n\n\t\t_raycaster.setFromCamera( _mouse, _camera );\n\n\t\tif ( _selected && scope.enabled ) {\n\n\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t_selected.position.copy( _intersection.sub( _offset ).applyMatrix4( _inverseMatrix ) );\n\n\t\t\t}\n\n\t\t\tscope.dispatchEvent( { type: 'drag', object: _selected } );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t_intersections.length = 0;\n\n\t\t_raycaster.setFromCamera( _mouse, _camera );\n\t\t_raycaster.intersectObjects( _objects, true, _intersections );\n\n\t\tif ( _intersections.length > 0 ) {\n\n\t\t\tvar object = _intersections[ 0 ].object;\n\n\t\t\t_plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( object.matrixWorld ) );\n\n\t\t\tif ( _hovered !== object ) {\n\n\t\t\t\tscope.dispatchEvent( { type: 'hoveron', object: object } );\n\n\t\t\t\t_domElement.style.cursor = 'pointer';\n\t\t\t\t_hovered = object;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( _hovered !== null ) {\n\n\t\t\t\tscope.dispatchEvent( { type: 'hoveroff', object: _hovered } );\n\n\t\t\t\t_domElement.style.cursor = 'auto';\n\t\t\t\t_hovered = null;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction onPointerDown( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseDown( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onMouseDown( event ) {\n\n\t\tevent.preventDefault();\n\n\t\t_intersections.length = 0;\n\n\t\t_raycaster.setFromCamera( _mouse, _camera );\n\t\t_raycaster.intersectObjects( _objects, true, _intersections );\n\n\t\tif ( _intersections.length > 0 ) {\n\n\t\t\t_selected = ( scope.transformGroup === true ) ? _objects[ 0 ] : _intersections[ 0 ].object;\n\n\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t_inverseMatrix.copy( _selected.parent.matrixWorld ).invert();\n\t\t\t\t_offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );\n\n\t\t\t}\n\n\t\t\t_domElement.style.cursor = 'move';\n\n\t\t\tscope.dispatchEvent( { type: 'dragstart', object: _selected } );\n\n\t\t}\n\n\n\t}\n\n\tfunction onPointerCancel( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseCancel( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onMouseCancel( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tif ( _selected ) {\n\n\t\t\tscope.dispatchEvent( { type: 'dragend', object: _selected } );\n\n\t\t\t_selected = null;\n\n\t\t}\n\n\t\t_domElement.style.cursor = _hovered ? 'pointer' : 'auto';\n\n\t}\n\n\tfunction onTouchMove( event ) {\n\n\t\tevent.preventDefault();\n\t\tevent = event.changedTouches[ 0 ];\n\n\t\tvar rect = _domElement.getBoundingClientRect();\n\n\t\t_mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;\n\t\t_mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;\n\n\t\t_raycaster.setFromCamera( _mouse, _camera );\n\n\t\tif ( _selected && scope.enabled ) {\n\n\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t_selected.position.copy( _intersection.sub( _offset ).applyMatrix4( _inverseMatrix ) );\n\n\t\t\t}\n\n\t\t\tscope.dispatchEvent( { type: 'drag', object: _selected } );\n\n\t\t\treturn;\n\n\t\t}\n\n\t}\n\n\tfunction onTouchStart( event ) {\n\n\t\tevent.preventDefault();\n\t\tevent = event.changedTouches[ 0 ];\n\n\t\tvar rect = _domElement.getBoundingClientRect();\n\n\t\t_mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;\n\t\t_mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;\n\n\t\t_intersections.length = 0;\n\n\t\t_raycaster.setFromCamera( _mouse, _camera );\n\t\t _raycaster.intersectObjects( _objects, true, _intersections );\n\n\t\tif ( _intersections.length > 0 ) {\n\n\t\t\t_selected = ( scope.transformGroup === true ) ? _objects[ 0 ] : _intersections[ 0 ].object;\n\n\t\t\t_plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );\n\n\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t_inverseMatrix.copy( _selected.parent.matrixWorld ).invert();\n\t\t\t\t_offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );\n\n\t\t\t}\n\n\t\t\t_domElement.style.cursor = 'move';\n\n\t\t\tscope.dispatchEvent( { type: 'dragstart', object: _selected } );\n\n\t\t}\n\n\n\t}\n\n\tfunction onTouchEnd( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tif ( _selected ) {\n\n\t\t\tscope.dispatchEvent( { type: 'dragend', object: _selected } );\n\n\t\t\t_selected = null;\n\n\t\t}\n\n\t\t_domElement.style.cursor = 'auto';\n\n\t}\n\n\tactivate();\n\n\t// API\n\n\tthis.enabled = true;\n\tthis.transformGroup = false;\n\n\tthis.activate = activate;\n\tthis.deactivate = deactivate;\n\tthis.dispose = dispose;\n\tthis.getObjects = getObjects;\n\n};\n\nDragControls.prototype = Object.create( EventDispatcher.prototype );\nDragControls.prototype.constructor = DragControls;\n\nexport { DragControls };\n","export default function(x, y, z) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n if (z == null) z = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0,\n sz = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x || 0, sy += node.y || 0, sz += node.z || 0;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, sz = (sz / n - z) * strength, i = 0; i < n; ++i) {\n node = nodes[i];\n if (sx) { node.x -= sx }\n if (sy) { node.y -= sy; }\n if (sz) { node.z -= sz; }\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.z = function(_) {\n return arguments.length ? (z = +_, force) : z;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n","export default function(d) {\n var x = +this._x.call(null, d);\n return add(this.cover(x), x, d);\n}\n\nfunction add(tree, x, d) {\n if (isNaN(x)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n x1 = tree._x1,\n xm,\n xp,\n right,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (parent = node, !(node = node[i = +right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n if (x === xp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(2) : tree._root = new Array(2);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n } while ((i = +right) === (j = +(xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var i, n = data.length,\n x,\n xz = new Array(n),\n x0 = Infinity,\n x1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, data[i]))) continue;\n xz[i] = x;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n }\n\n // If there were no (valid) points, inherit the existing extent.\n if (x1 < x0) x0 = this._x0, x1 = this._x1;\n\n // Expand the tree to cover the new points.\n this.cover(x0).cover(x1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x) {\n if (isNaN(x = +x)) return this; // ignore invalid points\n\n var x0 = this._x0,\n x1 = this._x1;\n\n // If the binarytree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing half boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else if (x0 > x || x > x1) {\n var z = x1 - x0,\n node = this._root,\n parent,\n i;\n\n switch (i = +(x < (x0 + x1) / 2)) {\n case 0: {\n do parent = new Array(2), parent[i] = node, node = parent;\n while (z *= 2, x1 = x0 + z, x > x1);\n break;\n }\n case 1: {\n do parent = new Array(2), parent[i] = node, node = parent;\n while (z *= 2, x0 = x1 - z, x0 > x);\n break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n // If the binarytree covers the point already, just return.\n else return this;\n\n this._x0 = x0;\n this._x1 = x1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0]).cover(+_[1][0])\n : isNaN(this._x0) ? undefined : [[this._x0], [this._x1]];\n}\n","export default function(node, x0, x1) {\n this.node = node;\n this.x0 = x0;\n this.x1 = x1;\n}\n","import Half from \"./half\";\n\nexport default function(x, radius) {\n var data,\n x0 = this._x0,\n x1,\n x2,\n x3 = this._x1,\n halves = [],\n node = this._root,\n q,\n i;\n\n if (node) halves.push(new Half(node, x0, x3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius;\n x3 = x + radius;\n }\n\n while (q = halves.pop()) {\n\n // Stop searching if this half can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (x2 = q.x1) < x0) continue;\n\n // Bisect the current half.\n if (node.length) {\n var xm = (x1 + x2) / 2;\n\n halves.push(\n new Half(node[1], xm, x2),\n new Half(node[0], x1, xm)\n );\n\n // Visit the closest half first.\n if (i = +(x >= xm)) {\n q = halves[halves.length - 1];\n halves[halves.length - 1] = halves[halves.length - 1 - i];\n halves[halves.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var d = Math.abs(x - +this._x.call(null, node.data));\n if (d < radius) {\n radius = d;\n x0 = x - d;\n x3 = x + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n x1 = this._x1,\n x,\n xm,\n right,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (!(parent = node, node = node[i = +right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 1]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1])\n && node === (parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Half from \"./half\";\n\nexport default function(callback) {\n var halves = [], q, node = this._root, child, x0, x1;\n if (node) halves.push(new Half(node, this._x0, this._x1));\n while (q = halves.pop()) {\n if (!callback(node = q.node, x0 = q.x0, x1 = q.x1) && node.length) {\n var xm = (x0 + x1) / 2;\n if (child = node[1]) halves.push(new Half(child, xm, x1));\n if (child = node[0]) halves.push(new Half(child, x0, xm));\n }\n }\n return this;\n}\n","import Half from \"./half\";\n\nexport default function(callback) {\n var halves = [], next = [], q;\n if (this._root) halves.push(new Half(this._root, this._x0, this._x1));\n while (q = halves.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, x1 = q.x1, xm = (x0 + x1) / 2;\n if (child = node[0]) halves.push(new Half(child, x0, xm));\n if (child = node[1]) halves.push(new Half(child, xm, x1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.x1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add\";\nimport tree_cover from \"./cover\";\nimport tree_data from \"./data\";\nimport tree_extent from \"./extent\";\nimport tree_find from \"./find\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove\";\nimport tree_root from \"./root\";\nimport tree_size from \"./size\";\nimport tree_visit from \"./visit\";\nimport tree_visitAfter from \"./visitAfter\";\nimport tree_x, {defaultX} from \"./x\";\n\nexport default function binarytree(nodes, x) {\n var tree = new Binarytree(x == null ? defaultX : x, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Binarytree(x, x0, x1) {\n this._x = x;\n this._x0 = x0;\n this._x1 = x1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = binarytree.prototype = Binarytree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Binarytree(this._x, this._x0, this._x1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(2)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 2; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(2)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;","export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(d) {\n var x = +this._x.call(null, d),\n y = +this._y.call(null, d),\n z = +this._z.call(null, d);\n return add(this.cover(x, y, z), x, y, z, d);\n}\n\nfunction add(tree, x, y, z, d) {\n if (isNaN(x) || isNaN(y) || isNaN(z)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n z0 = tree._z0,\n x1 = tree._x1,\n y1 = tree._y1,\n z1 = tree._z1,\n xm,\n ym,\n zm,\n xp,\n yp,\n zp,\n right,\n bottom,\n deep,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm; else z1 = zm;\n if (parent = node, !(node = node[i = deep << 2 | bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n zp = +tree._z.call(null, node.data);\n if (x === xp && y === yp && z === zp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(8) : tree._root = new Array(8);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm; else z1 = zm;\n } while ((i = deep << 2 | bottom << 1 | right) === (j = (zp >= zm) << 2 | (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n z,\n xz = new Array(n),\n yz = new Array(n),\n zz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n z0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity,\n z1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d)) || isNaN(z = +this._z.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n zz[i] = z;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n if (z < z0) z0 = z;\n if (z > z1) z1 = z;\n }\n\n // If there were no (valid) points, inherit the existing extent.\n if (x1 < x0) x0 = this._x0, x1 = this._x1;\n if (y1 < y0) y0 = this._y0, y1 = this._y1;\n if (z1 < z0) z0 = this._z0, z1 = this._z1;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0, z0).cover(x1, y1, z1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], zz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y, z) {\n if (isNaN(x = +x) || isNaN(y = +y) || isNaN(z = +z)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n z0 = this._z0,\n x1 = this._x1,\n y1 = this._y1,\n z1 = this._z1;\n\n // If the octree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing octant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n z1 = (z0 = Math.floor(z)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else if (x0 > x || x > x1 || y0 > y || y > y1 || z0 > z || z > z1) {\n var t = x1 - x0,\n node = this._root,\n parent,\n i;\n\n switch (i = (z < (z0 + z1) / 2) << 2 | (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) {\n case 0: {\n do parent = new Array(8), parent[i] = node, node = parent;\n while (t *= 2, x1 = x0 + t, y1 = y0 + t, z1 = z0 + t, x > x1 || y > y1 || z > z1);\n break;\n }\n case 1: {\n do parent = new Array(8), parent[i] = node, node = parent;\n while (t *= 2, x0 = x1 - t, y1 = y0 + t, z1 = z0 + t, x0 > x || y > y1 || z > z1);\n break;\n }\n case 2: {\n do parent = new Array(8), parent[i] = node, node = parent;\n while (t *= 2, x1 = x0 + t, y0 = y1 - t, z1 = z0 + t, x > x1 || y0 > y || z > z1);\n break;\n }\n case 3: {\n do parent = new Array(8), parent[i] = node, node = parent;\n while (t *= 2, x0 = x1 - t, y0 = y1 - t, z1 = z0 + t, x0 > x || y0 > y || z > z1);\n break;\n }\n case 4: {\n do parent = new Array(8), parent[i] = node, node = parent;\n while (t *= 2, x1 = x0 + t, y1 = y0 + t, z0 = z1 - t, x > x1 || y > y1 || z0 > z);\n break;\n }\n case 5: {\n do parent = new Array(8), parent[i] = node, node = parent;\n while (t *= 2, x0 = x1 - t, y1 = y0 + t, z0 = z1 - t, x0 > x || y > y1 || z0 > z);\n break;\n }\n case 6: {\n do parent = new Array(8), parent[i] = node, node = parent;\n while (t *= 2, x1 = x0 + t, y0 = y1 - t, z0 = z1 - t, x > x1 || y0 > y || z0 > z);\n break;\n }\n case 7: {\n do parent = new Array(8), parent[i] = node, node = parent;\n while (t *= 2, x0 = x1 - t, y0 = y1 - t, z0 = z1 - t, x0 > x || y0 > y || z0 > z);\n break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n // If the octree covers the point already, just return.\n else return this;\n\n this._x0 = x0;\n this._y0 = y0;\n this._z0 = z0;\n this._x1 = x1;\n this._y1 = y1;\n this._z1 = z1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1], +_[0][2]).cover(+_[1][0], +_[1][1], +_[1][2])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0, this._z0], [this._x1, this._y1, this._z1]];\n}\n","export default function(node, x0, y0, z0, x1, y1, z1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.z0 = z0;\n this.x1 = x1;\n this.y1 = y1;\n this.z1 = z1;\n}\n","import Octant from \"./octant\";\n\nexport default function(x, y, z, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n z0 = this._z0,\n x1,\n y1,\n z1,\n x2,\n y2,\n z2,\n x3 = this._x1,\n y3 = this._y1,\n z3 = this._z1,\n octs = [],\n node = this._root,\n q,\n i;\n\n if (node) octs.push(new Octant(node, x0, y0, z0, x3, y3, z3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius, z0 = z - radius;\n x3 = x + radius, y3 = y + radius, z3 = z + radius;\n radius *= radius;\n }\n\n while (q = octs.pop()) {\n\n // Stop searching if this octant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (z1 = q.z0) > z3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0\n || (z2 = q.z1) < z0) continue;\n\n // Bisect the current octant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2,\n zm = (z1 + z2) / 2;\n\n octs.push(\n new Octant(node[7], xm, ym, zm, x2, y2, z2),\n new Octant(node[6], x1, ym, zm, xm, y2, z2),\n new Octant(node[5], xm, y1, zm, x2, ym, z2),\n new Octant(node[4], x1, y1, zm, xm, ym, z2),\n new Octant(node[3], xm, ym, z1, x2, y2, zm),\n new Octant(node[2], x1, ym, z1, xm, y2, zm),\n new Octant(node[1], xm, y1, z1, x2, ym, zm),\n new Octant(node[0], x1, y1, z1, xm, ym, zm)\n );\n\n // Visit the closest octant first.\n if (i = (z >= zm) << 2 | (y >= ym) << 1 | (x >= xm)) {\n q = octs[octs.length - 1];\n octs[octs.length - 1] = octs[octs.length - 1 - i];\n octs[octs.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n dz = z - +this._z.call(null, node.data),\n d2 = dx * dx + dy * dy + dz * dz;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d, z0 = z - d;\n x3 = x + d, y3 = y + d, z3 = z + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d)) || isNaN(z = +this._z.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n z0 = this._z0,\n x1 = this._x1,\n y1 = this._y1,\n z1 = this._z1,\n x,\n y,\n z,\n xm,\n ym,\n zm,\n right,\n bottom,\n deep,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm; else z1 = zm;\n if (!(parent = node, node = node[i = deep << 2 | bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 7] || parent[(i + 2) & 7] || parent[(i + 3) & 7] || parent[(i + 4) & 7] || parent[(i + 5) & 7] || parent[(i + 6) & 7] || parent[(i + 7) & 7]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3] || parent[4] || parent[5] || parent[6] || parent[7])\n && node === (parent[7] || parent[6] || parent[5] || parent[4] || parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Octant from \"./octant\";\n\nexport default function(callback) {\n var octs = [], q, node = this._root, child, x0, y0, z0, x1, y1, z1;\n if (node) octs.push(new Octant(node, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1));\n while (q = octs.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, z0 = q.z0, x1 = q.x1, y1 = q.y1, z1 = q.z1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2, zm = (z0 + z1) / 2;\n if (child = node[7]) octs.push(new Octant(child, xm, ym, zm, x1, y1, z1));\n if (child = node[6]) octs.push(new Octant(child, x0, ym, zm, xm, y1, z1));\n if (child = node[5]) octs.push(new Octant(child, xm, y0, zm, x1, ym, z1));\n if (child = node[4]) octs.push(new Octant(child, x0, y0, zm, xm, ym, z1));\n if (child = node[3]) octs.push(new Octant(child, xm, ym, z0, x1, y1, zm));\n if (child = node[2]) octs.push(new Octant(child, x0, ym, z0, xm, y1, zm));\n if (child = node[1]) octs.push(new Octant(child, xm, y0, z0, x1, ym, zm));\n if (child = node[0]) octs.push(new Octant(child, x0, y0, z0, xm, ym, zm));\n }\n }\n return this;\n}\n","import Octant from \"./octant\";\n\nexport default function(callback) {\n var octs = [], next = [], q;\n if (this._root) octs.push(new Octant(this._root, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1));\n while (q = octs.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, z0 = q.z0, x1 = q.x1, y1 = q.y1, z1 = q.z1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2, zm = (z0 + z1) / 2;\n if (child = node[0]) octs.push(new Octant(child, x0, y0, z0, xm, ym, zm));\n if (child = node[1]) octs.push(new Octant(child, xm, y0, z0, x1, ym, zm));\n if (child = node[2]) octs.push(new Octant(child, x0, ym, z0, xm, y1, zm));\n if (child = node[3]) octs.push(new Octant(child, xm, ym, z0, x1, y1, zm));\n if (child = node[4]) octs.push(new Octant(child, x0, y0, zm, xm, ym, z1));\n if (child = node[5]) octs.push(new Octant(child, xm, y0, zm, x1, ym, z1));\n if (child = node[6]) octs.push(new Octant(child, x0, ym, zm, xm, y1, z1));\n if (child = node[7]) octs.push(new Octant(child, xm, ym, zm, x1, y1, z1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.z0, q.x1, q.y1, q.z1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","export function defaultZ(d) {\n return d[2];\n}\n\nexport default function(_) {\n return arguments.length ? (this._z = _, this) : this._z;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add\";\nimport tree_cover from \"./cover\";\nimport tree_data from \"./data\";\nimport tree_extent from \"./extent\";\nimport tree_find from \"./find\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove\";\nimport tree_root from \"./root\";\nimport tree_size from \"./size\";\nimport tree_visit from \"./visit\";\nimport tree_visitAfter from \"./visitAfter\";\nimport tree_x, {defaultX} from \"./x\";\nimport tree_y, {defaultY} from \"./y\";\nimport tree_z, {defaultZ} from \"./z\";\n\nexport default function octree(nodes, x, y, z) {\n var tree = new Octree(x == null ? defaultX : x, y == null ? defaultY : y, z == null ? defaultZ : z, NaN, NaN, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Octree(x, y, z, x0, y0, z0, x1, y1, z1) {\n this._x = x;\n this._y = y;\n this._z = z;\n this._x0 = x0;\n this._y0 = y0;\n this._z0 = z0;\n this._x1 = x1;\n this._y1 = y1;\n this._z1 = z1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = octree.prototype = Octree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Octree(this._x, this._y, this._z, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(8)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 8; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(8)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\ntreeProto.z = tree_z;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n nDim,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x = 0, y = 0, z = 0, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n if (nDim > 1) { y = target.y + target.vy - source.y - source.vy || jiggle(random); }\n if (nDim > 2) { z = target.z + target.vz - source.z - source.vz || jiggle(random); }\n l = Math.sqrt(x * x + y * y + z * z);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l, z *= l;\n\n target.vx -= x * (b = bias[i]);\n if (nDim > 1) { target.vy -= y * b; }\n if (nDim > 2) { target.vz -= z * b; }\n\n source.vx += x * (b = 1 - b);\n if (nDim > 1) { source.vy += y * b; }\n if (nDim > 2) { source.vz += z * b; }\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _numDimensions, _random) {\n nodes = _nodes;\n nDim = _numDimensions;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nvar MAX_DIMENSIONS = 3;\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nexport function z(d) {\n return d.z;\n}\n\nvar initialRadius = 10,\n initialAngleRoll = Math.PI * (3 - Math.sqrt(5)), // Golden ratio angle\n initialAngleYaw = Math.PI * 20 / (9 + Math.sqrt(221)); // Markov irrational number\n\nexport default function(nodes, numDimensions) {\n numDimensions = numDimensions || 2;\n\n var nDim = Math.min(MAX_DIMENSIONS, Math.max(1, Math.round(numDimensions))),\n simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function (force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (nDim > 1) {\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n if (nDim > 2) {\n if (node.fz == null) node.z += node.vz *= velocityDecay;\n else node.z = node.fz, node.vz = 0;\n }\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (node.fz != null) node.z = node.fz;\n if (isNaN(node.x) || (nDim > 1 && isNaN(node.y)) || (nDim > 2 && isNaN(node.z))) {\n var radius = initialRadius * (nDim > 2 ? Math.cbrt(0.5 + i) : (nDim > 1 ? Math.sqrt(0.5 + i) : i)),\n rollAngle = i * initialAngleRoll,\n yawAngle = i * initialAngleYaw;\n\n if (nDim === 1) {\n node.x = radius;\n } else if (nDim === 2) {\n node.x = radius * Math.cos(rollAngle);\n node.y = radius * Math.sin(rollAngle);\n } else { // 3 dimensions: use spherical distribution along 2 irrational number angles\n node.x = radius * Math.sin(rollAngle) * Math.cos(yawAngle);\n node.y = radius * Math.cos(rollAngle);\n node.z = radius * Math.sin(rollAngle) * Math.sin(yawAngle);\n }\n }\n if (isNaN(node.vx) || (nDim > 1 && isNaN(node.vy)) || (nDim > 2 && isNaN(node.vz))) {\n node.vx = 0;\n if (nDim > 1) { node.vy = 0; }\n if (nDim > 2) { node.vz = 0; }\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, nDim, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n numDimensions: function(_) {\n return arguments.length\n ? (nDim = Math.min(MAX_DIMENSIONS, Math.max(1, Math.round(_))), forces.forEach(initializeForce), simulation)\n : nDim;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function() {\n var args = Array.prototype.slice.call(arguments);\n var x = args.shift() || 0,\n y = (nDim > 1 ? args.shift() : null) || 0,\n z = (nDim > 2 ? args.shift() : null) || 0,\n radius = args.shift() || Infinity;\n\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n dz,\n d2,\n node,\n closest;\n\n radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - (node.y || 0);\n dz = z - (node.z ||0);\n d2 = dx * dx + dy * dy + dz * dz;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import {binarytree} from \"d3-binarytree\";\nimport {quadtree} from \"d3-quadtree\";\nimport {octree} from \"d3-octree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y, z} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n nDim,\n node,\n random,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i,\n n = nodes.length,\n tree =\n (nDim === 1 ? binarytree(nodes, x)\n :(nDim === 2 ? quadtree(nodes, x, y)\n :(nDim === 3 ? octree(nodes, x, y, z)\n :null\n ))).visitAfter(accumulate);\n\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(treeNode) {\n var strength = 0, q, c, weight = 0, x, y, z, i;\n var numChildren = treeNode.length;\n\n // For internal nodes, accumulate forces from children.\n if (numChildren) {\n for (x = y = z = i = 0; i < numChildren; ++i) {\n if ((q = treeNode[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * (q.x || 0), y += c * (q.y || 0), z += c * (q.z || 0);\n }\n }\n strength *= Math.sqrt(4 / numChildren); // scale accumulated strength according to number of dimensions\n\n treeNode.x = x / weight;\n if (nDim > 1) { treeNode.y = y / weight; }\n if (nDim > 2) { treeNode.z = z / weight; }\n }\n\n // For leaf nodes, accumulate forces from coincident nodes.\n else {\n q = treeNode;\n q.x = q.data.x;\n if (nDim > 1) { q.y = q.data.y; }\n if (nDim > 2) { q.z = q.data.z; }\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n treeNode.value = strength;\n }\n\n function apply(treeNode, x1, arg1, arg2, arg3) {\n if (!treeNode.value) return true;\n var x2 = [arg1, arg2, arg3][nDim-1];\n\n var x = treeNode.x - node.x,\n y = (nDim > 1 ? treeNode.y - node.y : 0),\n z = (nDim > 2 ? treeNode.z - node.z : 0),\n w = x2 - x1,\n l = x * x + y * y + z * z;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (nDim > 1 && y === 0) y = jiggle(random), l += y * y;\n if (nDim > 2 && z === 0) z = jiggle(random), l += z * z;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * treeNode.value * alpha / l;\n if (nDim > 1) { node.vy += y * treeNode.value * alpha / l; }\n if (nDim > 2) { node.vz += z * treeNode.value * alpha / l; }\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (treeNode.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (treeNode.data !== node || treeNode.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (nDim > 1 && y === 0) y = jiggle(random), l += y * y;\n if (nDim > 2 && z === 0) z = jiggle(random), l += z * z;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (treeNode.data !== node) {\n w = strengths[treeNode.data.index] * alpha / l;\n node.vx += x * w;\n if (nDim > 1) { node.vy += y * w; }\n if (nDim > 2) { node.vz += z * w; }\n } while (treeNode = treeNode.next);\n }\n\n force.initialize = function(_nodes, _numDimensions, _random) {\n nodes = _nodes;\n nDim = _numDimensions;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(radius, x, y, z) {\n var nodes,\n nDim,\n strength = constant(0.1),\n strengths,\n radiuses;\n\n if (typeof radius !== \"function\") radius = constant(+radius);\n if (x == null) x = 0;\n if (y == null) y = 0;\n if (z == null) z = 0;\n\n function force(alpha) {\n for (var i = 0, n = nodes.length; i < n; ++i) {\n var node = nodes[i],\n dx = node.x - x || 1e-6,\n dy = (node.y || 0) - y || 1e-6,\n dz = (node.z || 0) - z || 1e-6,\n r = Math.sqrt(dx * dx + dy * dy + dz * dz),\n k = (radiuses[i] - r) * strengths[i] * alpha / r;\n node.vx += dx * k;\n if (nDim>1) { node.vy += dy * k; }\n if (nDim>2) { node.vz += dz * k; }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n radiuses = new Array(n);\n for (i = 0; i < n; ++i) {\n radiuses[i] = +radius(nodes[i], i, nodes);\n strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(initNodes, numDimensions) {\n nodes = initNodes;\n nDim = numDimensions;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.z = function(_) {\n return arguments.length ? (z = +_, force) : z;\n };\n\n return force;\n}\n","module.exports = function eventify(subject) {\n validateSubject(subject);\n\n var eventsStorage = createEventsStorage(subject);\n subject.on = eventsStorage.on;\n subject.off = eventsStorage.off;\n subject.fire = eventsStorage.fire;\n return subject;\n};\n\nfunction createEventsStorage(subject) {\n // Store all event listeners to this hash. Key is event name, value is array\n // of callback records.\n //\n // A callback record consists of callback function and its optional context:\n // { 'eventName' => [{callback: function, ctx: object}] }\n var registeredEvents = Object.create(null);\n\n return {\n on: function (eventName, callback, ctx) {\n if (typeof callback !== 'function') {\n throw new Error('callback is expected to be a function');\n }\n var handlers = registeredEvents[eventName];\n if (!handlers) {\n handlers = registeredEvents[eventName] = [];\n }\n handlers.push({callback: callback, ctx: ctx});\n\n return subject;\n },\n\n off: function (eventName, callback) {\n var wantToRemoveAll = (typeof eventName === 'undefined');\n if (wantToRemoveAll) {\n // Killing old events storage should be enough in this case:\n registeredEvents = Object.create(null);\n return subject;\n }\n\n if (registeredEvents[eventName]) {\n var deleteAllCallbacksForEvent = (typeof callback !== 'function');\n if (deleteAllCallbacksForEvent) {\n delete registeredEvents[eventName];\n } else {\n var callbacks = registeredEvents[eventName];\n for (var i = 0; i < callbacks.length; ++i) {\n if (callbacks[i].callback === callback) {\n callbacks.splice(i, 1);\n }\n }\n }\n }\n\n return subject;\n },\n\n fire: function (eventName) {\n var callbacks = registeredEvents[eventName];\n if (!callbacks) {\n return subject;\n }\n\n var fireArguments;\n if (arguments.length > 1) {\n fireArguments = Array.prototype.splice.call(arguments, 1);\n }\n for(var i = 0; i < callbacks.length; ++i) {\n var callbackInfo = callbacks[i];\n callbackInfo.callback.apply(callbackInfo.ctx, fireArguments);\n }\n\n return subject;\n }\n };\n}\n\nfunction validateSubject(subject) {\n if (!subject) {\n throw new Error('Eventify cannot use falsy object as events subject');\n }\n var reservedWords = ['on', 'fire', 'off'];\n for (var i = 0; i < reservedWords.length; ++i) {\n if (subject.hasOwnProperty(reservedWords[i])) {\n throw new Error(\"Subject cannot be eventified, since it already has property '\" + reservedWords[i] + \"'\");\n }\n }\n}\n","/**\n * @fileOverview Contains definition of the core graph object.\n */\n\n// TODO: need to change storage layer:\n// 1. Be able to get all nodes O(1)\n// 2. Be able to get number of links O(1)\n\n/**\n * @example\n * var graph = require('ngraph.graph')();\n * graph.addNode(1); // graph has one node.\n * graph.addLink(2, 3); // now graph contains three nodes and one link.\n *\n */\nmodule.exports = createGraph;\n\nvar eventify = require('ngraph.events');\n\n/**\n * Creates a new graph\n */\nfunction createGraph(options) {\n // Graph structure is maintained as dictionary of nodes\n // and array of links. Each node has 'links' property which\n // hold all links related to that node. And general links\n // array is used to speed up all links enumeration. This is inefficient\n // in terms of memory, but simplifies coding.\n options = options || {};\n if ('uniqueLinkId' in options) {\n console.warn(\n 'ngraph.graph: Starting from version 0.14 `uniqueLinkId` is deprecated.\\n' +\n 'Use `multigraph` option instead\\n',\n '\\n',\n 'Note: there is also change in default behavior: From now on each graph\\n'+\n 'is considered to be not a multigraph by default (each edge is unique).'\n );\n\n options.multigraph = options.uniqueLinkId;\n }\n\n // Dear reader, the non-multigraphs do not guarantee that there is only\n // one link for a given pair of node. When this option is set to false\n // we can save some memory and CPU (18% faster for non-multigraph);\n if (options.multigraph === undefined) options.multigraph = false;\n\n if (typeof Map !== 'function') {\n // TODO: Should we polyfill it ourselves? We don't use much operations there..\n throw new Error('ngraph.graph requires `Map` to be defined. Please polyfill it before using ngraph');\n } \n\n var nodes = new Map();\n var links = [],\n // Hash of multi-edges. Used to track ids of edges between same nodes\n multiEdges = {},\n suspendEvents = 0,\n\n createLink = options.multigraph ? createUniqueLink : createSingleLink,\n\n // Our graph API provides means to listen to graph changes. Users can subscribe\n // to be notified about changes in the graph by using `on` method. However\n // in some cases they don't use it. To avoid unnecessary memory consumption\n // we will not record graph changes until we have at least one subscriber.\n // Code below supports this optimization.\n //\n // Accumulates all changes made during graph updates.\n // Each change element contains:\n // changeType - one of the strings: 'add', 'remove' or 'update';\n // node - if change is related to node this property is set to changed graph's node;\n // link - if change is related to link this property is set to changed graph's link;\n changes = [],\n recordLinkChange = noop,\n recordNodeChange = noop,\n enterModification = noop,\n exitModification = noop;\n\n // this is our public API:\n var graphPart = {\n /**\n * Adds node to the graph. If node with given id already exists in the graph\n * its data is extended with whatever comes in 'data' argument.\n *\n * @param nodeId the node's identifier. A string or number is preferred.\n * @param [data] additional data for the node being added. If node already\n * exists its data object is augmented with the new one.\n *\n * @return {node} The newly added node or node with given id if it already exists.\n */\n addNode: addNode,\n\n /**\n * Adds a link to the graph. The function always create a new\n * link between two nodes. If one of the nodes does not exists\n * a new node is created.\n *\n * @param fromId link start node id;\n * @param toId link end node id;\n * @param [data] additional data to be set on the new link;\n *\n * @return {link} The newly created link\n */\n addLink: addLink,\n\n /**\n * Removes link from the graph. If link does not exist does nothing.\n *\n * @param link - object returned by addLink() or getLinks() methods.\n *\n * @returns true if link was removed; false otherwise.\n */\n removeLink: removeLink,\n\n /**\n * Removes node with given id from the graph. If node does not exist in the graph\n * does nothing.\n *\n * @param nodeId node's identifier passed to addNode() function.\n *\n * @returns true if node was removed; false otherwise.\n */\n removeNode: removeNode,\n\n /**\n * Gets node with given identifier. If node does not exist undefined value is returned.\n *\n * @param nodeId requested node identifier;\n *\n * @return {node} in with requested identifier or undefined if no such node exists.\n */\n getNode: getNode,\n\n /**\n * Gets number of nodes in this graph.\n *\n * @return number of nodes in the graph.\n */\n getNodeCount: getNodeCount,\n\n /**\n * Gets total number of links in the graph.\n */\n getLinkCount: getLinkCount,\n\n /**\n * Synonym for `getLinkCount()`\n */\n getLinksCount: getLinkCount,\n \n /**\n * Synonym for `getNodeCount()`\n */\n getNodesCount: getNodeCount,\n\n /**\n * Gets all links (inbound and outbound) from the node with given id.\n * If node with given id is not found null is returned.\n *\n * @param nodeId requested node identifier.\n *\n * @return Array of links from and to requested node if such node exists;\n * otherwise null is returned.\n */\n getLinks: getLinks,\n\n /**\n * Invokes callback on each node of the graph.\n *\n * @param {Function(node)} callback Function to be invoked. The function\n * is passed one argument: visited node.\n */\n forEachNode: forEachNode,\n\n /**\n * Invokes callback on every linked (adjacent) node to the given one.\n *\n * @param nodeId Identifier of the requested node.\n * @param {Function(node, link)} callback Function to be called on all linked nodes.\n * The function is passed two parameters: adjacent node and link object itself.\n * @param oriented if true graph treated as oriented.\n */\n forEachLinkedNode: forEachLinkedNode,\n\n /**\n * Enumerates all links in the graph\n *\n * @param {Function(link)} callback Function to be called on all links in the graph.\n * The function is passed one parameter: graph's link object.\n *\n * Link object contains at least the following fields:\n * fromId - node id where link starts;\n * toId - node id where link ends,\n * data - additional data passed to graph.addLink() method.\n */\n forEachLink: forEachLink,\n\n /**\n * Suspend all notifications about graph changes until\n * endUpdate is called.\n */\n beginUpdate: enterModification,\n\n /**\n * Resumes all notifications about graph changes and fires\n * graph 'changed' event in case there are any pending changes.\n */\n endUpdate: exitModification,\n\n /**\n * Removes all nodes and links from the graph.\n */\n clear: clear,\n\n /**\n * Detects whether there is a link between two nodes.\n * Operation complexity is O(n) where n - number of links of a node.\n * NOTE: this function is synonim for getLink()\n *\n * @returns link if there is one. null otherwise.\n */\n hasLink: getLink,\n\n /**\n * Detects whether there is a node with given id\n * \n * Operation complexity is O(1)\n * NOTE: this function is synonim for getNode()\n *\n * @returns node if there is one; Falsy value otherwise.\n */\n hasNode: getNode,\n\n /**\n * Gets an edge between two nodes.\n * Operation complexity is O(n) where n - number of links of a node.\n *\n * @param {string} fromId link start identifier\n * @param {string} toId link end identifier\n *\n * @returns link if there is one. null otherwise.\n */\n getLink: getLink\n };\n\n // this will add `on()` and `fire()` methods.\n eventify(graphPart);\n\n monitorSubscribers();\n\n return graphPart;\n\n function monitorSubscribers() {\n var realOn = graphPart.on;\n\n // replace real `on` with our temporary on, which will trigger change\n // modification monitoring:\n graphPart.on = on;\n\n function on() {\n // now it's time to start tracking stuff:\n graphPart.beginUpdate = enterModification = enterModificationReal;\n graphPart.endUpdate = exitModification = exitModificationReal;\n recordLinkChange = recordLinkChangeReal;\n recordNodeChange = recordNodeChangeReal;\n\n // this will replace current `on` method with real pub/sub from `eventify`.\n graphPart.on = realOn;\n // delegate to real `on` handler:\n return realOn.apply(graphPart, arguments);\n }\n }\n\n function recordLinkChangeReal(link, changeType) {\n changes.push({\n link: link,\n changeType: changeType\n });\n }\n\n function recordNodeChangeReal(node, changeType) {\n changes.push({\n node: node,\n changeType: changeType\n });\n }\n\n function addNode(nodeId, data) {\n if (nodeId === undefined) {\n throw new Error('Invalid node identifier');\n }\n\n enterModification();\n\n var node = getNode(nodeId);\n if (!node) {\n node = new Node(nodeId, data);\n recordNodeChange(node, 'add');\n } else {\n node.data = data;\n recordNodeChange(node, 'update');\n }\n\n nodes.set(nodeId, node);\n\n exitModification();\n return node;\n }\n\n function getNode(nodeId) {\n return nodes.get(nodeId);\n }\n\n function removeNode(nodeId) {\n var node = getNode(nodeId);\n if (!node) {\n return false;\n }\n\n enterModification();\n\n var prevLinks = node.links;\n if (prevLinks) {\n node.links = null;\n for(var i = 0; i < prevLinks.length; ++i) {\n removeLink(prevLinks[i]);\n }\n }\n\n nodes.delete(nodeId)\n\n recordNodeChange(node, 'remove');\n\n exitModification();\n\n return true;\n }\n\n\n function addLink(fromId, toId, data) {\n enterModification();\n\n var fromNode = getNode(fromId) || addNode(fromId);\n var toNode = getNode(toId) || addNode(toId);\n\n var link = createLink(fromId, toId, data);\n\n links.push(link);\n\n // TODO: this is not cool. On large graphs potentially would consume more memory.\n addLinkToNode(fromNode, link);\n if (fromId !== toId) {\n // make sure we are not duplicating links for self-loops\n addLinkToNode(toNode, link);\n }\n\n recordLinkChange(link, 'add');\n\n exitModification();\n\n return link;\n }\n\n function createSingleLink(fromId, toId, data) {\n var linkId = makeLinkId(fromId, toId);\n return new Link(fromId, toId, data, linkId);\n }\n\n function createUniqueLink(fromId, toId, data) {\n // TODO: Get rid of this method.\n var linkId = makeLinkId(fromId, toId);\n var isMultiEdge = multiEdges.hasOwnProperty(linkId);\n if (isMultiEdge || getLink(fromId, toId)) {\n if (!isMultiEdge) {\n multiEdges[linkId] = 0;\n }\n var suffix = '@' + (++multiEdges[linkId]);\n linkId = makeLinkId(fromId + suffix, toId + suffix);\n }\n\n return new Link(fromId, toId, data, linkId);\n }\n\n function getNodeCount() {\n return nodes.size;\n }\n\n function getLinkCount() {\n return links.length;\n }\n\n function getLinks(nodeId) {\n var node = getNode(nodeId);\n return node ? node.links : null;\n }\n\n function removeLink(link) {\n if (!link) {\n return false;\n }\n var idx = indexOfElementInArray(link, links);\n if (idx < 0) {\n return false;\n }\n\n enterModification();\n\n links.splice(idx, 1);\n\n var fromNode = getNode(link.fromId);\n var toNode = getNode(link.toId);\n\n if (fromNode) {\n idx = indexOfElementInArray(link, fromNode.links);\n if (idx >= 0) {\n fromNode.links.splice(idx, 1);\n }\n }\n\n if (toNode) {\n idx = indexOfElementInArray(link, toNode.links);\n if (idx >= 0) {\n toNode.links.splice(idx, 1);\n }\n }\n\n recordLinkChange(link, 'remove');\n\n exitModification();\n\n return true;\n }\n\n function getLink(fromNodeId, toNodeId) {\n // TODO: Use sorted links to speed this up\n var node = getNode(fromNodeId),\n i;\n if (!node || !node.links) {\n return null;\n }\n\n for (i = 0; i < node.links.length; ++i) {\n var link = node.links[i];\n if (link.fromId === fromNodeId && link.toId === toNodeId) {\n return link;\n }\n }\n\n return null; // no link.\n }\n\n function clear() {\n enterModification();\n forEachNode(function(node) {\n removeNode(node.id);\n });\n exitModification();\n }\n\n function forEachLink(callback) {\n var i, length;\n if (typeof callback === 'function') {\n for (i = 0, length = links.length; i < length; ++i) {\n callback(links[i]);\n }\n }\n }\n\n function forEachLinkedNode(nodeId, callback, oriented) {\n var node = getNode(nodeId);\n\n if (node && node.links && typeof callback === 'function') {\n if (oriented) {\n return forEachOrientedLink(node.links, nodeId, callback);\n } else {\n return forEachNonOrientedLink(node.links, nodeId, callback);\n }\n }\n }\n\n function forEachNonOrientedLink(links, nodeId, callback) {\n var quitFast;\n for (var i = 0; i < links.length; ++i) {\n var link = links[i];\n var linkedNodeId = link.fromId === nodeId ? link.toId : link.fromId;\n\n quitFast = callback(nodes.get(linkedNodeId), link);\n if (quitFast) {\n return true; // Client does not need more iterations. Break now.\n }\n }\n }\n\n function forEachOrientedLink(links, nodeId, callback) {\n var quitFast;\n for (var i = 0; i < links.length; ++i) {\n var link = links[i];\n if (link.fromId === nodeId) {\n quitFast = callback(nodes.get(link.toId), link)\n if (quitFast) {\n return true; // Client does not need more iterations. Break now.\n }\n }\n }\n }\n\n // we will not fire anything until users of this library explicitly call `on()`\n // method.\n function noop() {}\n\n // Enter, Exit modification allows bulk graph updates without firing events.\n function enterModificationReal() {\n suspendEvents += 1;\n }\n\n function exitModificationReal() {\n suspendEvents -= 1;\n if (suspendEvents === 0 && changes.length > 0) {\n graphPart.fire('changed', changes);\n changes.length = 0;\n }\n }\n\n function forEachNode(callback) {\n if (typeof callback !== 'function') {\n throw new Error('Function is expected to iterate over graph nodes. You passed ' + callback);\n }\n\n var valuesIterator = nodes.values();\n var nextValue = valuesIterator.next();\n while (!nextValue.done) {\n if (callback(nextValue.value)) {\n return true; // client doesn't want to proceed. Return.\n }\n nextValue = valuesIterator.next();\n }\n }\n}\n\n// need this for old browsers. Should this be a separate module?\nfunction indexOfElementInArray(element, array) {\n if (!array) return -1;\n\n if (array.indexOf) {\n return array.indexOf(element);\n }\n\n var len = array.length,\n i;\n\n for (i = 0; i < len; i += 1) {\n if (array[i] === element) {\n return i;\n }\n }\n\n return -1;\n}\n\n/**\n * Internal structure to represent node;\n */\nfunction Node(id, data) {\n this.id = id;\n this.links = null;\n this.data = data;\n}\n\nfunction addLinkToNode(node, link) {\n if (node.links) {\n node.links.push(link);\n } else {\n node.links = [link];\n }\n}\n\n/**\n * Internal structure to represent links;\n */\nfunction Link(fromId, toId, data, id) {\n this.fromId = fromId;\n this.toId = toId;\n this.data = data;\n this.id = id;\n}\n\nfunction makeLinkId(fromId, toId) {\n return fromId.toString() + '👉 ' + toId.toString();\n}\n","module.exports = function getVariableName(index) {\n if (index === 0) return 'x';\n if (index === 1) return 'y';\n if (index === 2) return 'z';\n return 'c' + (index + 1);\n};","const getVariableName = require('./getVariableName');\n\nmodule.exports = function createPatternBuilder(dimension) {\n\n return pattern;\n \n function pattern(template, config) {\n let indent = (config && config.indent) || 0;\n let join = (config && config.join !== undefined) ? config.join : '\\n';\n let indentString = Array(indent + 1).join(' ');\n let buffer = [];\n for (let i = 0; i < dimension; ++i) {\n let variableName = getVariableName(i);\n let prefix = (i === 0) ? '' : indentString;\n buffer.push(prefix + template.replace(/{var}/g, variableName));\n }\n return buffer.join(join);\n }\n};\n","\nconst createPatternBuilder = require('./createPatternBuilder');\n\nmodule.exports = generateCreateBodyFunction;\nmodule.exports.generateCreateBodyFunctionBody = generateCreateBodyFunctionBody;\n\n// InlineTransform: getVectorCode\nmodule.exports.getVectorCode = getVectorCode;\n// InlineTransform: getBodyCode\nmodule.exports.getBodyCode = getBodyCode;\n// InlineTransformExport: module.exports = function() { return Body; }\n\nfunction generateCreateBodyFunction(dimension, debugSetters) {\n let code = generateCreateBodyFunctionBody(dimension, debugSetters);\n let {Body} = (new Function(code))();\n return Body;\n}\n\nfunction generateCreateBodyFunctionBody(dimension, debugSetters) {\n let code = `\n${getVectorCode(dimension, debugSetters)}\n${getBodyCode(dimension, debugSetters)}\nreturn {Body: Body, Vector: Vector};\n`;\n return code;\n}\n\nfunction getBodyCode(dimension) {\n let pattern = createPatternBuilder(dimension);\n let variableList = pattern('{var}', {join: ', '});\n return `\nfunction Body(${variableList}) {\n this.isPinned = false;\n this.pos = new Vector(${variableList});\n this.force = new Vector();\n this.velocity = new Vector();\n this.mass = 1;\n\n this.springCount = 0;\n this.springLength = 0;\n}\n\nBody.prototype.reset = function() {\n this.force.reset();\n this.springCount = 0;\n this.springLength = 0;\n}\n\nBody.prototype.setPosition = function (${variableList}) {\n ${pattern('this.pos.{var} = {var} || 0;', {indent: 2})}\n};`;\n}\n\nfunction getVectorCode(dimension, debugSetters) {\n let pattern = createPatternBuilder(dimension);\n let setters = '';\n if (debugSetters) {\n setters = `${pattern(\"\\n\\\n var v{var};\\n\\\nObject.defineProperty(this, '{var}', {\\n\\\n set: function(v) { \\n\\\n if (!Number.isFinite(v)) throw new Error('Cannot set non-numbers to {var}');\\n\\\n v{var} = v; \\n\\\n },\\n\\\n get: function() { return v{var}; }\\n\\\n});\")}`;\n }\n\n let variableList = pattern('{var}', {join: ', '});\n return `function Vector(${variableList}) {\n ${setters}\n if (typeof arguments[0] === 'object') {\n // could be another vector\n let v = arguments[0];\n ${pattern('if (!Number.isFinite(v.{var})) throw new Error(\"Expected value is not a finite number at Vector constructor ({var})\");', {indent: 4})}\n ${pattern('this.{var} = v.{var};', {indent: 4})}\n } else {\n ${pattern('this.{var} = typeof {var} === \"number\" ? {var} : 0;', {indent: 4})}\n }\n }\n \n Vector.prototype.reset = function () {\n ${pattern('this.{var} = ', {join: ''})}0;\n };`;\n}","const createPatternBuilder = require('./createPatternBuilder');\nconst getVariableName = require('./getVariableName');\n\nmodule.exports = generateQuadTreeFunction;\nmodule.exports.generateQuadTreeFunctionBody = generateQuadTreeFunctionBody;\n\n// These exports are for InlineTransform tool.\n// InlineTransform: getInsertStackCode\nmodule.exports.getInsertStackCode = getInsertStackCode;\n// InlineTransform: getQuadNodeCode\nmodule.exports.getQuadNodeCode = getQuadNodeCode;\n// InlineTransform: isSamePosition\nmodule.exports.isSamePosition = isSamePosition;\n// InlineTransform: getChildBodyCode\nmodule.exports.getChildBodyCode = getChildBodyCode;\n// InlineTransform: setChildBodyCode\nmodule.exports.setChildBodyCode = setChildBodyCode;\n\nfunction generateQuadTreeFunction(dimension) {\n let code = generateQuadTreeFunctionBody(dimension);\n return (new Function(code))();\n}\n\nfunction generateQuadTreeFunctionBody(dimension) {\n let pattern = createPatternBuilder(dimension);\n let quadCount = Math.pow(2, dimension);\n\n let code = `\n${getInsertStackCode()}\n${getQuadNodeCode(dimension)}\n${isSamePosition(dimension)}\n${getChildBodyCode(dimension)}\n${setChildBodyCode(dimension)}\n\nfunction createQuadTree(options, random) {\n options = options || {};\n options.gravity = typeof options.gravity === 'number' ? options.gravity : -1;\n options.theta = typeof options.theta === 'number' ? options.theta : 0.8;\n\n var gravity = options.gravity;\n var updateQueue = [];\n var insertStack = new InsertStack();\n var theta = options.theta;\n\n var nodesCache = [];\n var currentInCache = 0;\n var root = newNode();\n\n return {\n insertBodies: insertBodies,\n\n /**\n * Gets root node if it is present\n */\n getRoot: function() {\n return root;\n },\n\n updateBodyForce: update,\n\n options: function(newOptions) {\n if (newOptions) {\n if (typeof newOptions.gravity === 'number') {\n gravity = newOptions.gravity;\n }\n if (typeof newOptions.theta === 'number') {\n theta = newOptions.theta;\n }\n\n return this;\n }\n\n return {\n gravity: gravity,\n theta: theta\n };\n }\n };\n\n function newNode() {\n // To avoid pressure on GC we reuse nodes.\n var node = nodesCache[currentInCache];\n if (node) {\n${assignQuads(' node.')}\n node.body = null;\n node.mass = ${pattern('node.mass_{var} = ', {join: ''})}0;\n ${pattern('node.min_{var} = node.max_{var} = ', {join: ''})}0;\n } else {\n node = new QuadNode();\n nodesCache[currentInCache] = node;\n }\n\n ++currentInCache;\n return node;\n }\n\n function update(sourceBody) {\n var queue = updateQueue;\n var v;\n ${pattern('var d{var};', {indent: 4})}\n var r; \n ${pattern('var f{var} = 0;', {indent: 4})}\n var queueLength = 1;\n var shiftIdx = 0;\n var pushIdx = 1;\n\n queue[0] = root;\n\n while (queueLength) {\n var node = queue[shiftIdx];\n var body = node.body;\n\n queueLength -= 1;\n shiftIdx += 1;\n var differentBody = (body !== sourceBody);\n if (body && differentBody) {\n // If the current node is a leaf node (and it is not source body),\n // calculate the force exerted by the current node on body, and add this\n // amount to body's net force.\n ${pattern('d{var} = body.pos.{var} - sourceBody.pos.{var};', {indent: 8})}\n r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})});\n\n if (r === 0) {\n // Poor man's protection against zero distance.\n ${pattern('d{var} = (random.nextDouble() - 0.5) / 50;', {indent: 10})}\n r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})});\n }\n\n // This is standard gravitation force calculation but we divide\n // by r^3 to save two operations when normalizing force vector.\n v = gravity * body.mass * sourceBody.mass / (r * r * r);\n ${pattern('f{var} += v * d{var};', {indent: 8})}\n } else if (differentBody) {\n // Otherwise, calculate the ratio s / r, where s is the width of the region\n // represented by the internal node, and r is the distance between the body\n // and the node's center-of-mass\n ${pattern('d{var} = node.mass_{var} / node.mass - sourceBody.pos.{var};', {indent: 8})}\n r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})});\n\n if (r === 0) {\n // Sorry about code duplication. I don't want to create many functions\n // right away. Just want to see performance first.\n ${pattern('d{var} = (random.nextDouble() - 0.5) / 50;', {indent: 10})}\n r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})});\n }\n // If s / r < θ, treat this internal node as a single body, and calculate the\n // force it exerts on sourceBody, and add this amount to sourceBody's net force.\n if ((node.max_${getVariableName(0)} - node.min_${getVariableName(0)}) / r < theta) {\n // in the if statement above we consider node's width only\n // because the region was made into square during tree creation.\n // Thus there is no difference between using width or height.\n v = gravity * node.mass * sourceBody.mass / (r * r * r);\n ${pattern('f{var} += v * d{var};', {indent: 10})}\n } else {\n // Otherwise, run the procedure recursively on each of the current node's children.\n\n // I intentionally unfolded this loop, to save several CPU cycles.\n${runRecursiveOnChildren()}\n }\n }\n }\n\n ${pattern('sourceBody.force.{var} += f{var};', {indent: 4})}\n }\n\n function insertBodies(bodies) {\n ${pattern('var {var}min = Number.MAX_VALUE;', {indent: 4})}\n ${pattern('var {var}max = Number.MIN_VALUE;', {indent: 4})}\n var i = bodies.length;\n\n // To reduce quad tree depth we are looking for exact bounding box of all particles.\n while (i--) {\n var pos = bodies[i].pos;\n ${pattern('if (pos.{var} < {var}min) {var}min = pos.{var};', {indent: 6})}\n ${pattern('if (pos.{var} > {var}max) {var}max = pos.{var};', {indent: 6})}\n }\n\n // Makes the bounds square.\n var maxSideLength = -Infinity;\n ${pattern('if ({var}max - {var}min > maxSideLength) maxSideLength = {var}max - {var}min ;', {indent: 4})}\n\n currentInCache = 0;\n root = newNode();\n ${pattern('root.min_{var} = {var}min;', {indent: 4})}\n ${pattern('root.max_{var} = {var}min + maxSideLength;', {indent: 4})}\n\n i = bodies.length - 1;\n if (i >= 0) {\n root.body = bodies[i];\n }\n while (i--) {\n insert(bodies[i], root);\n }\n }\n\n function insert(newBody) {\n insertStack.reset();\n insertStack.push(root, newBody);\n\n while (!insertStack.isEmpty()) {\n var stackItem = insertStack.pop();\n var node = stackItem.node;\n var body = stackItem.body;\n\n if (!node.body) {\n // This is internal node. Update the total mass of the node and center-of-mass.\n ${pattern('var {var} = body.pos.{var};', {indent: 8})}\n node.mass += body.mass;\n ${pattern('node.mass_{var} += body.mass * {var};', {indent: 8})}\n\n // Recursively insert the body in the appropriate quadrant.\n // But first find the appropriate quadrant.\n var quadIdx = 0; // Assume we are in the 0's quad.\n ${pattern('var min_{var} = node.min_{var};', {indent: 8})}\n ${pattern('var max_{var} = (min_{var} + node.max_{var}) / 2;', {indent: 8})}\n\n${assignInsertionQuadIndex(8)}\n\n var child = getChild(node, quadIdx);\n\n if (!child) {\n // The node is internal but this quadrant is not taken. Add\n // subnode to it.\n child = newNode();\n ${pattern('child.min_{var} = min_{var};', {indent: 10})}\n ${pattern('child.max_{var} = max_{var};', {indent: 10})}\n child.body = body;\n\n setChild(node, quadIdx, child);\n } else {\n // continue searching in this quadrant.\n insertStack.push(child, body);\n }\n } else {\n // We are trying to add to the leaf node.\n // We have to convert current leaf into internal node\n // and continue adding two nodes.\n var oldBody = node.body;\n node.body = null; // internal nodes do not cary bodies\n\n if (isSamePosition(oldBody.pos, body.pos)) {\n // Prevent infinite subdivision by bumping one node\n // anywhere in this quadrant\n var retriesCount = 3;\n do {\n var offset = random.nextDouble();\n ${pattern('var d{var} = (node.max_{var} - node.min_{var}) * offset;', {indent: 12})}\n\n ${pattern('oldBody.pos.{var} = node.min_{var} + d{var};', {indent: 12})}\n retriesCount -= 1;\n // Make sure we don't bump it out of the box. If we do, next iteration should fix it\n } while (retriesCount > 0 && isSamePosition(oldBody.pos, body.pos));\n\n if (retriesCount === 0 && isSamePosition(oldBody.pos, body.pos)) {\n // This is very bad, we ran out of precision.\n // if we do not return from the method we'll get into\n // infinite loop here. So we sacrifice correctness of layout, and keep the app running\n // Next layout iteration should get larger bounding box in the first step and fix this\n return;\n }\n }\n // Next iteration should subdivide node further.\n insertStack.push(node, oldBody);\n insertStack.push(node, body);\n }\n }\n }\n}\nreturn createQuadTree;\n\n`;\n return code;\n\n\n function assignInsertionQuadIndex(indentCount) {\n let insertionCode = [];\n let indent = Array(indentCount + 1).join(' ');\n for (let i = 0; i < dimension; ++i) {\n insertionCode.push(indent + `if (${getVariableName(i)} > max_${getVariableName(i)}) {`);\n insertionCode.push(indent + ` quadIdx = quadIdx + ${Math.pow(2, i)};`);\n insertionCode.push(indent + ` min_${getVariableName(i)} = max_${getVariableName(i)};`);\n insertionCode.push(indent + ` max_${getVariableName(i)} = node.max_${getVariableName(i)};`);\n insertionCode.push(indent + `}`);\n }\n return insertionCode.join('\\n');\n // if (x > max_x) { // somewhere in the eastern part.\n // quadIdx = quadIdx + 1;\n // left = right;\n // right = node.right;\n // }\n }\n\n function runRecursiveOnChildren() {\n let indent = Array(11).join(' ');\n let recursiveCode = [];\n for (let i = 0; i < quadCount; ++i) {\n recursiveCode.push(indent + `if (node.quad${i}) {`);\n recursiveCode.push(indent + ` queue[pushIdx] = node.quad${i};`);\n recursiveCode.push(indent + ` queueLength += 1;`);\n recursiveCode.push(indent + ` pushIdx += 1;`);\n recursiveCode.push(indent + `}`);\n }\n return recursiveCode.join('\\n');\n // if (node.quad0) {\n // queue[pushIdx] = node.quad0;\n // queueLength += 1;\n // pushIdx += 1;\n // }\n }\n\n function assignQuads(indent) {\n // this.quad0 = null;\n // this.quad1 = null;\n // this.quad2 = null;\n // this.quad3 = null;\n let quads = [];\n for (let i = 0; i < quadCount; ++i) {\n quads.push(`${indent}quad${i} = null;`);\n }\n return quads.join('\\n');\n }\n}\n\nfunction isSamePosition(dimension) {\n let pattern = createPatternBuilder(dimension);\n return `\n function isSamePosition(point1, point2) {\n ${pattern('var d{var} = Math.abs(point1.{var} - point2.{var});', {indent: 2})}\n \n return ${pattern('d{var} < 1e-8', {join: ' && '})};\n } \n`;\n}\n\nfunction setChildBodyCode(dimension) {\n var quadCount = Math.pow(2, dimension);\n return `\nfunction setChild(node, idx, child) {\n ${setChildBody()}\n}`;\n function setChildBody() {\n let childBody = [];\n for (let i = 0; i < quadCount; ++i) {\n let prefix = (i === 0) ? ' ' : ' else ';\n childBody.push(`${prefix}if (idx === ${i}) node.quad${i} = child;`);\n }\n\n return childBody.join('\\n');\n // if (idx === 0) node.quad0 = child;\n // else if (idx === 1) node.quad1 = child;\n // else if (idx === 2) node.quad2 = child;\n // else if (idx === 3) node.quad3 = child;\n }\n}\n\nfunction getChildBodyCode(dimension) {\n return `function getChild(node, idx) {\n${getChildBody()}\n return null;\n}`;\n\n function getChildBody() {\n let childBody = [];\n let quadCount = Math.pow(2, dimension);\n for (let i = 0; i < quadCount; ++i) {\n childBody.push(` if (idx === ${i}) return node.quad${i};`);\n }\n\n return childBody.join('\\n');\n // if (idx === 0) return node.quad0;\n // if (idx === 1) return node.quad1;\n // if (idx === 2) return node.quad2;\n // if (idx === 3) return node.quad3;\n }\n}\n\nfunction getQuadNodeCode(dimension) {\n let pattern = createPatternBuilder(dimension);\n let quadCount = Math.pow(2, dimension);\n var quadNodeCode = `\nfunction QuadNode() {\n // body stored inside this node. In quad tree only leaf nodes (by construction)\n // contain bodies:\n this.body = null;\n\n // Child nodes are stored in quads. Each quad is presented by number:\n // 0 | 1\n // -----\n // 2 | 3\n${assignQuads(' this.')}\n\n // Total mass of current node\n this.mass = 0;\n\n // Center of mass coordinates\n ${pattern('this.mass_{var} = 0;', {indent: 2})}\n\n // bounding box coordinates\n ${pattern('this.min_{var} = 0;', {indent: 2})}\n ${pattern('this.max_{var} = 0;', {indent: 2})}\n}\n`;\n return quadNodeCode;\n\n function assignQuads(indent) {\n // this.quad0 = null;\n // this.quad1 = null;\n // this.quad2 = null;\n // this.quad3 = null;\n let quads = [];\n for (let i = 0; i < quadCount; ++i) {\n quads.push(`${indent}quad${i} = null;`);\n }\n return quads.join('\\n');\n }\n}\n\nfunction getInsertStackCode() {\n return `\n/**\n * Our implementation of QuadTree is non-recursive to avoid GC hit\n * This data structure represent stack of elements\n * which we are trying to insert into quad tree.\n */\nfunction InsertStack () {\n this.stack = [];\n this.popIdx = 0;\n}\n\nInsertStack.prototype = {\n isEmpty: function() {\n return this.popIdx === 0;\n },\n push: function (node, body) {\n var item = this.stack[this.popIdx];\n if (!item) {\n // we are trying to avoid memory pressure: create new element\n // only when absolutely necessary\n this.stack[this.popIdx] = new InsertStackElement(node, body);\n } else {\n item.node = node;\n item.body = body;\n }\n ++this.popIdx;\n },\n pop: function () {\n if (this.popIdx > 0) {\n return this.stack[--this.popIdx];\n }\n },\n reset: function () {\n this.popIdx = 0;\n }\n};\n\nfunction InsertStackElement(node, body) {\n this.node = node; // QuadTree node\n this.body = body; // physical body which needs to be inserted to node\n}\n`;\n}","\nmodule.exports = generateBoundsFunction;\nmodule.exports.generateFunctionBody = generateBoundsFunctionBody;\n\nconst createPatternBuilder = require('./createPatternBuilder');\n\nfunction generateBoundsFunction(dimension) {\n let code = generateBoundsFunctionBody(dimension);\n return new Function('bodies', 'settings', 'random', code);\n}\n\nfunction generateBoundsFunctionBody(dimension) {\n let pattern = createPatternBuilder(dimension);\n\n let code = `\n var boundingBox = {\n ${pattern('min_{var}: 0, max_{var}: 0,', {indent: 4})}\n };\n\n return {\n box: boundingBox,\n\n update: updateBoundingBox,\n\n reset: resetBoundingBox,\n\n getBestNewPosition: function (neighbors) {\n var ${pattern('base_{var} = 0', {join: ', '})};\n\n if (neighbors.length) {\n for (var i = 0; i < neighbors.length; ++i) {\n let neighborPos = neighbors[i].pos;\n ${pattern('base_{var} += neighborPos.{var};', {indent: 10})}\n }\n\n ${pattern('base_{var} /= neighbors.length;', {indent: 8})}\n } else {\n ${pattern('base_{var} = (boundingBox.min_{var} + boundingBox.max_{var}) / 2;', {indent: 8})}\n }\n\n var springLength = settings.springLength;\n return {\n ${pattern('{var}: base_{var} + (random.nextDouble() - 0.5) * springLength,', {indent: 8})}\n };\n }\n };\n\n function updateBoundingBox() {\n var i = bodies.length;\n if (i === 0) return; // No bodies - no borders.\n\n ${pattern('var max_{var} = -Infinity;', {indent: 4})}\n ${pattern('var min_{var} = Infinity;', {indent: 4})}\n\n while(i--) {\n // this is O(n), it could be done faster with quadtree, if we check the root node bounds\n var bodyPos = bodies[i].pos;\n ${pattern('if (bodyPos.{var} < min_{var}) min_{var} = bodyPos.{var};', {indent: 6})}\n ${pattern('if (bodyPos.{var} > max_{var}) max_{var} = bodyPos.{var};', {indent: 6})}\n }\n\n ${pattern('boundingBox.min_{var} = min_{var};', {indent: 4})}\n ${pattern('boundingBox.max_{var} = max_{var};', {indent: 4})}\n }\n\n function resetBoundingBox() {\n ${pattern('boundingBox.min_{var} = boundingBox.max_{var} = 0;', {indent: 4})}\n }\n`;\n return code;\n}\n","const createPatternBuilder = require('./createPatternBuilder');\n\nmodule.exports = generateCreateDragForceFunction;\nmodule.exports.generateCreateDragForceFunctionBody = generateCreateDragForceFunctionBody;\n\nfunction generateCreateDragForceFunction(dimension) {\n let code = generateCreateDragForceFunctionBody(dimension);\n return new Function('options', code);\n}\n\nfunction generateCreateDragForceFunctionBody(dimension) {\n let pattern = createPatternBuilder(dimension);\n let code = `\n if (!Number.isFinite(options.dragCoefficient)) throw new Error('dragCoefficient is not a finite number');\n\n return {\n update: function(body) {\n ${pattern('body.force.{var} -= options.dragCoefficient * body.velocity.{var};', {indent: 6})}\n }\n };\n`;\n return code;\n}\n","const createPatternBuilder = require('./createPatternBuilder');\n\nmodule.exports = generateCreateSpringForceFunction;\nmodule.exports.generateCreateSpringForceFunctionBody = generateCreateSpringForceFunctionBody;\n\nfunction generateCreateSpringForceFunction(dimension) {\n let code = generateCreateSpringForceFunctionBody(dimension);\n return new Function('options', 'random', code);\n}\n\nfunction generateCreateSpringForceFunctionBody(dimension) {\n let pattern = createPatternBuilder(dimension);\n let code = `\n if (!Number.isFinite(options.springCoefficient)) throw new Error('Spring coefficient is not a number');\n if (!Number.isFinite(options.springLength)) throw new Error('Spring length is not a number');\n\n return {\n /**\n * Updates forces acting on a spring\n */\n update: function (spring) {\n var body1 = spring.from;\n var body2 = spring.to;\n var length = spring.length < 0 ? options.springLength : spring.length;\n ${pattern('var d{var} = body2.pos.{var} - body1.pos.{var};', {indent: 6})}\n var r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})});\n\n if (r === 0) {\n ${pattern('d{var} = (random.nextDouble() - 0.5) / 50;', {indent: 8})}\n r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})});\n }\n\n var d = r - length;\n var coefficient = ((spring.coefficient > 0) ? spring.coefficient : options.springCoefficient) * d / r;\n\n ${pattern('body1.force.{var} += coefficient * d{var}', {indent: 6})};\n body1.springCount += 1;\n body1.springLength += r;\n\n ${pattern('body2.force.{var} -= coefficient * d{var}', {indent: 6})};\n body2.springCount += 1;\n body2.springLength += r;\n }\n };\n`;\n return code;\n}\n","const createPatternBuilder = require('./createPatternBuilder');\n\nmodule.exports = generateIntegratorFunction;\nmodule.exports.generateIntegratorFunctionBody = generateIntegratorFunctionBody;\n\nfunction generateIntegratorFunction(dimension) {\n let code = generateIntegratorFunctionBody(dimension);\n return new Function('bodies', 'timeStep', 'adaptiveTimeStepWeight', code);\n}\n\nfunction generateIntegratorFunctionBody(dimension) {\n let pattern = createPatternBuilder(dimension);\n let code = `\n var length = bodies.length;\n if (length === 0) return 0;\n\n ${pattern('var d{var} = 0, t{var} = 0;', {indent: 2})}\n\n for (var i = 0; i < length; ++i) {\n var body = bodies[i];\n if (body.isPinned) continue;\n\n if (adaptiveTimeStepWeight && body.springCount) {\n timeStep = (adaptiveTimeStepWeight * body.springLength/body.springCount);\n }\n\n var coeff = timeStep / body.mass;\n\n ${pattern('body.velocity.{var} += coeff * body.force.{var};', {indent: 4})}\n ${pattern('var v{var} = body.velocity.{var};', {indent: 4})}\n var v = Math.sqrt(${pattern('v{var} * v{var}', {join: ' + '})});\n\n if (v > 1) {\n // We normalize it so that we move within timeStep range. \n // for the case when v <= 1 - we let velocity to fade out.\n ${pattern('body.velocity.{var} = v{var} / v;', {indent: 6})}\n }\n\n ${pattern('d{var} = timeStep * body.velocity.{var};', {indent: 4})}\n\n ${pattern('body.pos.{var} += d{var};', {indent: 4})}\n\n ${pattern('t{var} += Math.abs(d{var});', {indent: 4})}\n }\n\n return (${pattern('t{var} * t{var}', {join: ' + '})})/length;\n`;\n return code;\n}\n","module.exports = Spring;\n\n/**\n * Represents a physical spring. Spring connects two bodies, has rest length\n * stiffness coefficient and optional weight\n */\nfunction Spring(fromBody, toBody, length, springCoefficient) {\n this.from = fromBody;\n this.to = toBody;\n this.length = length;\n this.coefficient = springCoefficient;\n}\n","module.exports = merge;\n\n/**\n * Augments `target` with properties in `options`. Does not override\n * target's properties if they are defined and matches expected type in \n * options\n *\n * @returns {Object} merged object\n */\nfunction merge(target, options) {\n var key;\n if (!target) { target = {}; }\n if (options) {\n for (key in options) {\n if (options.hasOwnProperty(key)) {\n var targetHasIt = target.hasOwnProperty(key),\n optionsValueType = typeof options[key],\n shouldReplace = !targetHasIt || (typeof target[key] !== optionsValueType);\n\n if (shouldReplace) {\n target[key] = options[key];\n } else if (optionsValueType === 'object') {\n // go deep, don't care about loops here, we are simple API!:\n target[key] = merge(target[key], options[key]);\n }\n }\n }\n }\n\n return target;\n}\n","module.exports = random;\n\n// TODO: Deprecate?\nmodule.exports.random = random,\nmodule.exports.randomIterator = randomIterator\n\n/**\n * Creates seeded PRNG with two methods:\n * next() and nextDouble()\n */\nfunction random(inputSeed) {\n var seed = typeof inputSeed === 'number' ? inputSeed : (+new Date());\n return new Generator(seed)\n}\n\nfunction Generator(seed) {\n this.seed = seed;\n}\n\n/**\n * Generates random integer number in the range from 0 (inclusive) to maxValue (exclusive)\n *\n * @param maxValue Number REQUIRED. Omitting this number will result in NaN values from PRNG.\n */\nGenerator.prototype.next = next;\n\n/**\n * Generates random double number in the range from 0 (inclusive) to 1 (exclusive)\n * This function is the same as Math.random() (except that it could be seeded)\n */\nGenerator.prototype.nextDouble = nextDouble;\n\n/**\n * Returns a random real number from uniform distribution in [0, 1)\n */\nGenerator.prototype.uniform = nextDouble;\n\n/**\n * Returns a random real number from a Gaussian distribution\n * with 0 as a mean, and 1 as standard deviation u ~ N(0,1)\n */\nGenerator.prototype.gaussian = gaussian;\n\nfunction gaussian() {\n // use the polar form of the Box-Muller transform\n // based on https://introcs.cs.princeton.edu/java/23recursion/StdRandom.java\n var r, x, y;\n do {\n x = this.nextDouble() * 2 - 1;\n y = this.nextDouble() * 2 - 1;\n r = x * x + y * y;\n } while (r >= 1 || r === 0);\n\n return x * Math.sqrt(-2 * Math.log(r)/r);\n}\n\n/**\n * See https://twitter.com/anvaka/status/1296182534150135808\n */\nGenerator.prototype.levy = levy;\n\nfunction levy() {\n var beta = 3 / 2;\n var sigma = Math.pow(\n gamma( 1 + beta ) * Math.sin(Math.PI * beta / 2) / \n (gamma((1 + beta) / 2) * beta * Math.pow(2, (beta - 1) / 2)),\n 1/beta\n );\n return this.gaussian() * sigma / Math.pow(Math.abs(this.gaussian()), 1/beta);\n}\n\n// gamma function approximation\nfunction gamma(z) {\n return Math.sqrt(2 * Math.PI / z) * Math.pow((1 / Math.E) * (z + 1 / (12 * z - 1 / (10 * z))), z);\n}\n\nfunction nextDouble() {\n var seed = this.seed;\n // Robert Jenkins' 32 bit integer hash function.\n seed = ((seed + 0x7ed55d16) + (seed << 12)) & 0xffffffff;\n seed = ((seed ^ 0xc761c23c) ^ (seed >>> 19)) & 0xffffffff;\n seed = ((seed + 0x165667b1) + (seed << 5)) & 0xffffffff;\n seed = ((seed + 0xd3a2646c) ^ (seed << 9)) & 0xffffffff;\n seed = ((seed + 0xfd7046c5) + (seed << 3)) & 0xffffffff;\n seed = ((seed ^ 0xb55a4f09) ^ (seed >>> 16)) & 0xffffffff;\n this.seed = seed;\n return (seed & 0xfffffff) / 0x10000000;\n}\n\nfunction next(maxValue) {\n return Math.floor(this.nextDouble() * maxValue);\n}\n\n/*\n * Creates iterator over array, which returns items of array in random order\n * Time complexity is guaranteed to be O(n);\n */\nfunction randomIterator(array, customRandom) {\n var localRandom = customRandom || random();\n if (typeof localRandom.next !== 'function') {\n throw new Error('customRandom does not match expected API: next() function is missing');\n }\n\n return {\n forEach: forEach,\n\n /**\n * Shuffles array randomly, in place.\n */\n shuffle: shuffle\n };\n\n function shuffle() {\n var i, j, t;\n for (i = array.length - 1; i > 0; --i) {\n j = localRandom.next(i + 1); // i inclusive\n t = array[j];\n array[j] = array[i];\n array[i] = t;\n }\n\n return array;\n }\n\n function forEach(callback) {\n var i, j, t;\n for (i = array.length - 1; i > 0; --i) {\n j = localRandom.next(i + 1); // i inclusive\n t = array[j];\n array[j] = array[i];\n array[i] = t;\n\n callback(t);\n }\n\n if (array.length) {\n callback(array[0]);\n }\n }\n}","/**\n * Manages a simulation of physical forces acting on bodies and springs.\n */\nmodule.exports = createPhysicsSimulator;\n\nvar generateCreateBodyFunction = require('./codeGenerators/generateCreateBody');\nvar generateQuadTreeFunction = require('./codeGenerators/generateQuadTree');\nvar generateBoundsFunction = require('./codeGenerators/generateBounds');\nvar generateCreateDragForceFunction = require('./codeGenerators/generateCreateDragForce');\nvar generateCreateSpringForceFunction = require('./codeGenerators/generateCreateSpringForce');\nvar generateIntegratorFunction = require('./codeGenerators/generateIntegrator');\n\nvar dimensionalCache = {};\n\nfunction createPhysicsSimulator(settings) {\n var Spring = require('./spring');\n var merge = require('ngraph.merge');\n var eventify = require('ngraph.events');\n if (settings) {\n // Check for names from older versions of the layout\n if (settings.springCoeff !== undefined) throw new Error('springCoeff was renamed to springCoefficient');\n if (settings.dragCoeff !== undefined) throw new Error('dragCoeff was renamed to dragCoefficient');\n }\n\n settings = merge(settings, {\n /**\n * Ideal length for links (springs in physical model).\n */\n springLength: 10,\n\n /**\n * Hook's law coefficient. 1 - solid spring.\n */\n springCoefficient: 0.8, \n\n /**\n * Coulomb's law coefficient. It's used to repel nodes thus should be negative\n * if you make it positive nodes start attract each other :).\n */\n gravity: -12,\n\n /**\n * Theta coefficient from Barnes Hut simulation. Ranged between (0, 1).\n * The closer it's to 1 the more nodes algorithm will have to go through.\n * Setting it to one makes Barnes Hut simulation no different from\n * brute-force forces calculation (each node is considered).\n */\n theta: 0.8,\n\n /**\n * Drag force coefficient. Used to slow down system, thus should be less than 1.\n * The closer it is to 0 the less tight system will be.\n */\n dragCoefficient: 0.9, // TODO: Need to rename this to something better. E.g. `dragCoefficient`\n\n /**\n * Default time step (dt) for forces integration\n */\n timeStep : 0.5,\n\n /**\n * Adaptive time step uses average spring length to compute actual time step:\n * See: https://twitter.com/anvaka/status/1293067160755957760\n */\n adaptiveTimeStepWeight: 0,\n\n /**\n * This parameter defines number of dimensions of the space where simulation\n * is performed. \n */\n dimensions: 2,\n\n /**\n * In debug mode more checks are performed, this will help you catch errors\n * quickly, however for production build it is recommended to turn off this flag\n * to speed up computation.\n */\n debug: false\n });\n\n var factory = dimensionalCache[settings.dimensions];\n if (!factory) {\n var dimensions = settings.dimensions;\n factory = {\n Body: generateCreateBodyFunction(dimensions, settings.debug),\n createQuadTree: generateQuadTreeFunction(dimensions),\n createBounds: generateBoundsFunction(dimensions),\n createDragForce: generateCreateDragForceFunction(dimensions),\n createSpringForce: generateCreateSpringForceFunction(dimensions),\n integrate: generateIntegratorFunction(dimensions),\n };\n dimensionalCache[dimensions] = factory;\n }\n\n var Body = factory.Body;\n var createQuadTree = factory.createQuadTree;\n var createBounds = factory.createBounds;\n var createDragForce = factory.createDragForce;\n var createSpringForce = factory.createSpringForce;\n var integrate = factory.integrate;\n var createBody = pos => new Body(pos);\n\n var random = require('ngraph.random').random(42);\n var bodies = []; // Bodies in this simulation.\n var springs = []; // Springs in this simulation.\n\n var quadTree = createQuadTree(settings, random);\n var bounds = createBounds(bodies, settings, random);\n var springForce = createSpringForce(settings, random);\n var dragForce = createDragForce(settings);\n\n var totalMovement = 0; // how much movement we made on last step\n var forces = [];\n var forceMap = new Map();\n var iterationNumber = 0;\n \n addForce('nbody', nbodyForce);\n addForce('spring', updateSpringForce);\n\n var publicApi = {\n /**\n * Array of bodies, registered with current simulator\n *\n * Note: To add new body, use addBody() method. This property is only\n * exposed for testing/performance purposes.\n */\n bodies: bodies,\n \n quadTree: quadTree,\n\n /**\n * Array of springs, registered with current simulator\n *\n * Note: To add new spring, use addSpring() method. This property is only\n * exposed for testing/performance purposes.\n */\n springs: springs,\n\n /**\n * Returns settings with which current simulator was initialized\n */\n settings: settings,\n\n /**\n * Adds a new force to simulation\n */\n addForce: addForce,\n \n /**\n * Removes a force from the simulation.\n */\n removeForce: removeForce,\n\n /**\n * Returns a map of all registered forces.\n */\n getForces: getForces,\n\n /**\n * Performs one step of force simulation.\n *\n * @returns {boolean} true if system is considered stable; False otherwise.\n */\n step: function () {\n for (var i = 0; i < forces.length; ++i) {\n forces[i](iterationNumber);\n }\n var movement = integrate(bodies, settings.timeStep, settings.adaptiveTimeStepWeight);\n iterationNumber += 1;\n return movement;\n },\n\n /**\n * Adds body to the system\n *\n * @param {ngraph.physics.primitives.Body} body physical body\n *\n * @returns {ngraph.physics.primitives.Body} added body\n */\n addBody: function (body) {\n if (!body) {\n throw new Error('Body is required');\n }\n bodies.push(body);\n\n return body;\n },\n\n /**\n * Adds body to the system at given position\n *\n * @param {Object} pos position of a body\n *\n * @returns {ngraph.physics.primitives.Body} added body\n */\n addBodyAt: function (pos) {\n if (!pos) {\n throw new Error('Body position is required');\n }\n var body = createBody(pos);\n bodies.push(body);\n\n return body;\n },\n\n /**\n * Removes body from the system\n *\n * @param {ngraph.physics.primitives.Body} body to remove\n *\n * @returns {Boolean} true if body found and removed. falsy otherwise;\n */\n removeBody: function (body) {\n if (!body) { return; }\n\n var idx = bodies.indexOf(body);\n if (idx < 0) { return; }\n\n bodies.splice(idx, 1);\n if (bodies.length === 0) {\n bounds.reset();\n }\n return true;\n },\n\n /**\n * Adds a spring to this simulation.\n *\n * @returns {Object} - a handle for a spring. If you want to later remove\n * spring pass it to removeSpring() method.\n */\n addSpring: function (body1, body2, springLength, springCoefficient) {\n if (!body1 || !body2) {\n throw new Error('Cannot add null spring to force simulator');\n }\n\n if (typeof springLength !== 'number') {\n springLength = -1; // assume global configuration\n }\n\n var spring = new Spring(body1, body2, springLength, springCoefficient >= 0 ? springCoefficient : -1);\n springs.push(spring);\n\n // TODO: could mark simulator as dirty.\n return spring;\n },\n\n /**\n * Returns amount of movement performed on last step() call\n */\n getTotalMovement: function () {\n return totalMovement;\n },\n\n /**\n * Removes spring from the system\n *\n * @param {Object} spring to remove. Spring is an object returned by addSpring\n *\n * @returns {Boolean} true if spring found and removed. falsy otherwise;\n */\n removeSpring: function (spring) {\n if (!spring) { return; }\n var idx = springs.indexOf(spring);\n if (idx > -1) {\n springs.splice(idx, 1);\n return true;\n }\n },\n\n getBestNewBodyPosition: function (neighbors) {\n return bounds.getBestNewPosition(neighbors);\n },\n\n /**\n * Returns bounding box which covers all bodies\n */\n getBBox: getBoundingBox, \n getBoundingBox: getBoundingBox, \n\n invalidateBBox: function () {\n console.warn('invalidateBBox() is deprecated, bounds always recomputed on `getBBox()` call');\n },\n\n // TODO: Move the force specific stuff to force\n gravity: function (value) {\n if (value !== undefined) {\n settings.gravity = value;\n quadTree.options({gravity: value});\n return this;\n } else {\n return settings.gravity;\n }\n },\n\n theta: function (value) {\n if (value !== undefined) {\n settings.theta = value;\n quadTree.options({theta: value});\n return this;\n } else {\n return settings.theta;\n }\n },\n\n /**\n * Returns pseudo-random number generator instance.\n */\n random: random\n };\n\n // allow settings modification via public API:\n expose(settings, publicApi);\n\n eventify(publicApi);\n\n return publicApi;\n\n function getBoundingBox() {\n bounds.update();\n return bounds.box;\n }\n\n function addForce(forceName, forceFunction) {\n if (forceMap.has(forceName)) throw new Error('Force ' + forceName + ' is already added');\n\n forceMap.set(forceName, forceFunction);\n forces.push(forceFunction);\n }\n\n function removeForce(forceName) {\n var forceIndex = forces.indexOf(forceMap.get(forceName));\n if (forceIndex < 0) return;\n forces.splice(forceIndex, 1);\n forceMap.delete(forceName);\n }\n\n function getForces() {\n // TODO: Should I trust them or clone the forces?\n return forceMap;\n }\n\n function nbodyForce(/* iterationUmber */) {\n if (bodies.length === 0) return;\n\n quadTree.insertBodies(bodies);\n var i = bodies.length;\n while (i--) {\n var body = bodies[i];\n if (!body.isPinned) {\n body.reset();\n quadTree.updateBodyForce(body);\n dragForce.update(body);\n }\n }\n }\n\n function updateSpringForce() {\n var i = springs.length;\n while (i--) {\n springForce.update(springs[i]);\n }\n }\n\n}\n\nfunction expose(settings, target) {\n for (var key in settings) {\n augment(settings, target, key);\n }\n}\n\nfunction augment(source, target, key) {\n if (!source.hasOwnProperty(key)) return;\n if (typeof target[key] === 'function') {\n // this accessor is already defined. Ignore it\n return;\n }\n var sourceIsNumber = Number.isFinite(source[key]);\n\n if (sourceIsNumber) {\n target[key] = function (value) {\n if (value !== undefined) {\n if (!Number.isFinite(value)) throw new Error('Value of ' + key + ' should be a valid number.');\n source[key] = value;\n return target;\n }\n return source[key];\n };\n } else {\n target[key] = function (value) {\n if (value !== undefined) {\n source[key] = value;\n return target;\n }\n return source[key];\n };\n }\n}\n","module.exports = createLayout;\nmodule.exports.simulator = require('./lib/createPhysicsSimulator');\n\nvar eventify = require('ngraph.events');\n\n/**\n * Creates force based layout for a given graph.\n *\n * @param {ngraph.graph} graph which needs to be laid out\n * @param {object} physicsSettings if you need custom settings\n * for physics simulator you can pass your own settings here. If it's not passed\n * a default one will be created.\n */\nfunction createLayout(graph, physicsSettings) {\n if (!graph) {\n throw new Error('Graph structure cannot be undefined');\n }\n\n var createSimulator = (physicsSettings && physicsSettings.createSimulator) || require('./lib/createPhysicsSimulator');\n var physicsSimulator = createSimulator(physicsSettings);\n if (Array.isArray(physicsSettings)) throw new Error('Physics settings is expected to be an object');\n\n var nodeMass = defaultNodeMass;\n if (physicsSettings && typeof physicsSettings.nodeMass === 'function') {\n nodeMass = physicsSettings.nodeMass;\n }\n\n var nodeBodies = new Map();\n var springs = {};\n var bodiesCount = 0;\n\n var springTransform = physicsSimulator.settings.springTransform || noop;\n\n // Initialize physics with what we have in the graph:\n initPhysics();\n listenToEvents();\n\n var wasStable = false;\n\n var api = {\n /**\n * Performs one step of iterative layout algorithm\n *\n * @returns {boolean} true if the system should be considered stable; False otherwise.\n * The system is stable if no further call to `step()` can improve the layout.\n */\n step: function() {\n if (bodiesCount === 0) {\n updateStableStatus(true);\n return true;\n }\n\n var lastMove = physicsSimulator.step();\n\n // Save the movement in case if someone wants to query it in the step\n // callback.\n api.lastMove = lastMove;\n\n // Allow listeners to perform low-level actions after nodes are updated.\n api.fire('step');\n\n var ratio = lastMove/bodiesCount;\n var isStableNow = ratio <= 0.01; // TODO: The number is somewhat arbitrary...\n updateStableStatus(isStableNow);\n\n\n return isStableNow;\n },\n\n /**\n * For a given `nodeId` returns position\n */\n getNodePosition: function (nodeId) {\n return getInitializedBody(nodeId).pos;\n },\n\n /**\n * Sets position of a node to a given coordinates\n * @param {string} nodeId node identifier\n * @param {number} x position of a node\n * @param {number} y position of a node\n * @param {number=} z position of node (only if applicable to body)\n */\n setNodePosition: function (nodeId) {\n var body = getInitializedBody(nodeId);\n body.setPosition.apply(body, Array.prototype.slice.call(arguments, 1));\n },\n\n /**\n * @returns {Object} Link position by link id\n * @returns {Object.from} {x, y} coordinates of link start\n * @returns {Object.to} {x, y} coordinates of link end\n */\n getLinkPosition: function (linkId) {\n var spring = springs[linkId];\n if (spring) {\n return {\n from: spring.from.pos,\n to: spring.to.pos\n };\n }\n },\n\n /**\n * @returns {Object} area required to fit in the graph. Object contains\n * `x1`, `y1` - top left coordinates\n * `x2`, `y2` - bottom right coordinates\n */\n getGraphRect: function () {\n return physicsSimulator.getBBox();\n },\n\n /**\n * Iterates over each body in the layout simulator and performs a callback(body, nodeId)\n */\n forEachBody: forEachBody,\n\n /*\n * Requests layout algorithm to pin/unpin node to its current position\n * Pinned nodes should not be affected by layout algorithm and always\n * remain at their position\n */\n pinNode: function (node, isPinned) {\n var body = getInitializedBody(node.id);\n body.isPinned = !!isPinned;\n },\n\n /**\n * Checks whether given graph's node is currently pinned\n */\n isNodePinned: function (node) {\n return getInitializedBody(node.id).isPinned;\n },\n\n /**\n * Request to release all resources\n */\n dispose: function() {\n graph.off('changed', onGraphChanged);\n api.fire('disposed');\n },\n\n /**\n * Gets physical body for a given node id. If node is not found undefined\n * value is returned.\n */\n getBody: getBody,\n\n /**\n * Gets spring for a given edge.\n *\n * @param {string} linkId link identifer. If two arguments are passed then\n * this argument is treated as formNodeId\n * @param {string=} toId when defined this parameter denotes head of the link\n * and first argument is treated as tail of the link (fromId)\n */\n getSpring: getSpring,\n\n /**\n * Returns length of cumulative force vector. The closer this to zero - the more stable the system is\n */\n getForceVectorLength: getForceVectorLength,\n\n /**\n * [Read only] Gets current physics simulator\n */\n simulator: physicsSimulator,\n\n /**\n * Gets the graph that was used for layout\n */\n graph: graph,\n\n /**\n * Gets amount of movement performed during last step operation\n */\n lastMove: 0\n };\n\n eventify(api);\n\n return api;\n\n function updateStableStatus(isStableNow) {\n if (wasStable !== isStableNow) {\n wasStable = isStableNow;\n onStableChanged(isStableNow);\n }\n }\n\n function forEachBody(cb) {\n nodeBodies.forEach(cb);\n }\n\n function getForceVectorLength() {\n var fx = 0, fy = 0;\n forEachBody(function(body) {\n fx += Math.abs(body.force.x);\n fy += Math.abs(body.force.y);\n });\n return Math.sqrt(fx * fx + fy * fy);\n }\n\n function getSpring(fromId, toId) {\n var linkId;\n if (toId === undefined) {\n if (typeof fromId !== 'object') {\n // assume fromId as a linkId:\n linkId = fromId;\n } else {\n // assume fromId to be a link object:\n linkId = fromId.id;\n }\n } else {\n // toId is defined, should grab link:\n var link = graph.hasLink(fromId, toId);\n if (!link) return;\n linkId = link.id;\n }\n\n return springs[linkId];\n }\n\n function getBody(nodeId) {\n return nodeBodies.get(nodeId);\n }\n\n function listenToEvents() {\n graph.on('changed', onGraphChanged);\n }\n\n function onStableChanged(isStable) {\n api.fire('stable', isStable);\n }\n\n function onGraphChanged(changes) {\n for (var i = 0; i < changes.length; ++i) {\n var change = changes[i];\n if (change.changeType === 'add') {\n if (change.node) {\n initBody(change.node.id);\n }\n if (change.link) {\n initLink(change.link);\n }\n } else if (change.changeType === 'remove') {\n if (change.node) {\n releaseNode(change.node);\n }\n if (change.link) {\n releaseLink(change.link);\n }\n }\n }\n bodiesCount = graph.getNodesCount();\n }\n\n function initPhysics() {\n bodiesCount = 0;\n\n graph.forEachNode(function (node) {\n initBody(node.id);\n bodiesCount += 1;\n });\n\n graph.forEachLink(initLink);\n }\n\n function initBody(nodeId) {\n var body = nodeBodies.get(nodeId);\n if (!body) {\n var node = graph.getNode(nodeId);\n if (!node) {\n throw new Error('initBody() was called with unknown node id');\n }\n\n var pos = node.position;\n if (!pos) {\n var neighbors = getNeighborBodies(node);\n pos = physicsSimulator.getBestNewBodyPosition(neighbors);\n }\n\n body = physicsSimulator.addBodyAt(pos);\n body.id = nodeId;\n\n nodeBodies.set(nodeId, body);\n updateBodyMass(nodeId);\n\n if (isNodeOriginallyPinned(node)) {\n body.isPinned = true;\n }\n }\n }\n\n function releaseNode(node) {\n var nodeId = node.id;\n var body = nodeBodies.get(nodeId);\n if (body) {\n nodeBodies.delete(nodeId);\n physicsSimulator.removeBody(body);\n }\n }\n\n function initLink(link) {\n updateBodyMass(link.fromId);\n updateBodyMass(link.toId);\n\n var fromBody = nodeBodies.get(link.fromId),\n toBody = nodeBodies.get(link.toId),\n spring = physicsSimulator.addSpring(fromBody, toBody, link.length);\n\n springTransform(link, spring);\n\n springs[link.id] = spring;\n }\n\n function releaseLink(link) {\n var spring = springs[link.id];\n if (spring) {\n var from = graph.getNode(link.fromId),\n to = graph.getNode(link.toId);\n\n if (from) updateBodyMass(from.id);\n if (to) updateBodyMass(to.id);\n\n delete springs[link.id];\n\n physicsSimulator.removeSpring(spring);\n }\n }\n\n function getNeighborBodies(node) {\n // TODO: Could probably be done better on memory\n var neighbors = [];\n if (!node.links) {\n return neighbors;\n }\n var maxNeighbors = Math.min(node.links.length, 2);\n for (var i = 0; i < maxNeighbors; ++i) {\n var link = node.links[i];\n var otherBody = link.fromId !== node.id ? nodeBodies.get(link.fromId) : nodeBodies.get(link.toId);\n if (otherBody && otherBody.pos) {\n neighbors.push(otherBody);\n }\n }\n\n return neighbors;\n }\n\n function updateBodyMass(nodeId) {\n var body = nodeBodies.get(nodeId);\n body.mass = nodeMass(nodeId);\n if (Number.isNaN(body.mass)) {\n throw new Error('Node mass should be a number');\n }\n }\n\n /**\n * Checks whether graph node has in its settings pinned attribute,\n * which means layout algorithm cannot move it. Node can be marked\n * as pinned, if it has \"isPinned\" attribute, or when node.data has it.\n *\n * @param {Object} node a graph node to check\n * @return {Boolean} true if node should be treated as pinned; false otherwise.\n */\n function isNodeOriginallyPinned(node) {\n return (node && (node.isPinned || (node.data && node.data.isPinned)));\n }\n\n function getInitializedBody(nodeId) {\n var body = nodeBodies.get(nodeId);\n if (!body) {\n initBody(nodeId);\n body = nodeBodies.get(nodeId);\n }\n return body;\n }\n\n /**\n * Calculates mass of a body, which corresponds to node with given id.\n *\n * @param {String|Number} nodeId identifier of a node, for which body mass needs to be calculated\n * @returns {Number} recommended mass of the body;\n */\n function defaultNodeMass(nodeId) {\n var links = graph.getLinks(nodeId);\n if (!links) return 1;\n return 1 + links.length / 3.0;\n }\n}\n\nfunction noop() { }\n","/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n };\n\n var debounced = function(){\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n \n debounced.flush = function() {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n \n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n","import debounce from 'debounce';\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nvar Prop = function Prop(name, _ref) {\n var _ref$default = _ref[\"default\"],\n defaultVal = _ref$default === void 0 ? null : _ref$default,\n _ref$triggerUpdate = _ref.triggerUpdate,\n triggerUpdate = _ref$triggerUpdate === void 0 ? true : _ref$triggerUpdate,\n _ref$onChange = _ref.onChange,\n onChange = _ref$onChange === void 0 ? function (newVal, state) {} : _ref$onChange;\n\n _classCallCheck(this, Prop);\n\n this.name = name;\n this.defaultVal = defaultVal;\n this.triggerUpdate = triggerUpdate;\n this.onChange = onChange;\n};\n\nfunction index (_ref2) {\n var _ref2$stateInit = _ref2.stateInit,\n stateInit = _ref2$stateInit === void 0 ? function () {\n return {};\n } : _ref2$stateInit,\n _ref2$props = _ref2.props,\n rawProps = _ref2$props === void 0 ? {} : _ref2$props,\n _ref2$methods = _ref2.methods,\n methods = _ref2$methods === void 0 ? {} : _ref2$methods,\n _ref2$aliases = _ref2.aliases,\n aliases = _ref2$aliases === void 0 ? {} : _ref2$aliases,\n _ref2$init = _ref2.init,\n initFn = _ref2$init === void 0 ? function () {} : _ref2$init,\n _ref2$update = _ref2.update,\n updateFn = _ref2$update === void 0 ? function () {} : _ref2$update;\n // Parse props into Prop instances\n var props = Object.keys(rawProps).map(function (propName) {\n return new Prop(propName, rawProps[propName]);\n });\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // Holds component state\n var state = Object.assign({}, stateInit instanceof Function ? stateInit(options) : stateInit, // Support plain objects for backwards compatibility\n {\n initialised: false\n }); // keeps track of which props triggered an update\n\n var changedProps = {}; // Component constructor\n\n function comp(nodeElement) {\n initStatic(nodeElement, options);\n digest();\n return comp;\n }\n\n var initStatic = function initStatic(nodeElement, options) {\n initFn.call(comp, nodeElement, state, options);\n state.initialised = true;\n };\n\n var digest = debounce(function () {\n if (!state.initialised) {\n return;\n }\n\n updateFn.call(comp, state, changedProps);\n changedProps = {};\n }, 1); // Getter/setter methods\n\n props.forEach(function (prop) {\n comp[prop.name] = getSetProp(prop);\n\n function getSetProp(_ref3) {\n var prop = _ref3.name,\n _ref3$triggerUpdate = _ref3.triggerUpdate,\n redigest = _ref3$triggerUpdate === void 0 ? false : _ref3$triggerUpdate,\n _ref3$onChange = _ref3.onChange,\n onChange = _ref3$onChange === void 0 ? function (newVal, state) {} : _ref3$onChange,\n _ref3$defaultVal = _ref3.defaultVal,\n defaultVal = _ref3$defaultVal === void 0 ? null : _ref3$defaultVal;\n return function (_) {\n var curVal = state[prop];\n\n if (!arguments.length) {\n return curVal;\n } // Getter mode\n\n\n var val = _ === undefined ? defaultVal : _; // pick default if value passed is undefined\n\n state[prop] = val;\n onChange.call(comp, val, state, curVal); // track changed props\n\n !changedProps.hasOwnProperty(prop) && (changedProps[prop] = curVal);\n\n if (redigest) {\n digest();\n }\n\n return comp;\n };\n }\n }); // Other methods\n\n Object.keys(methods).forEach(function (methodName) {\n comp[methodName] = function () {\n var _methods$methodName;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return (_methods$methodName = methods[methodName]).call.apply(_methods$methodName, [comp, state].concat(args));\n };\n }); // Link aliases\n\n Object.entries(aliases).forEach(function (_ref4) {\n var _ref5 = _slicedToArray(_ref4, 2),\n alias = _ref5[0],\n target = _ref5[1];\n\n return comp[alias] = comp[target];\n }); // Reset all component props to their default value\n\n comp.resetProps = function () {\n props.forEach(function (prop) {\n comp[prop.name](prop.defaultVal);\n });\n return comp;\n }; //\n\n\n comp.resetProps(); // Apply all prop defaults\n\n state._rerender = digest; // Expose digest method\n\n return comp;\n };\n}\n\nexport default index;\n","var index = (function (p) {\n return p instanceof Function ? p // fn\n : typeof p === 'string' ? function (obj) {\n return obj[p];\n } // property name\n : function (obj) {\n return p;\n };\n}); // constant\n\nexport default index;\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n\n return (hint === \"string\" ? String : Number)(input);\n}\n\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n\n return typeof key === \"symbol\" ? key : String(key);\n}\n\nvar index = (function () {\n var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var keyAccessors = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var multiItem = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var flattenKeys = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var keys = (keyAccessors instanceof Array ? keyAccessors.length ? keyAccessors : [undefined] : [keyAccessors]).map(function (key) {\n return {\n keyAccessor: key,\n isProp: !(key instanceof Function)\n };\n });\n var indexedResult = list.reduce(function (res, item) {\n var iterObj = res;\n var itemVal = item;\n keys.forEach(function (_ref, idx) {\n var keyAccessor = _ref.keyAccessor,\n isProp = _ref.isProp;\n var key;\n\n if (isProp) {\n var _itemVal = itemVal,\n propVal = _itemVal[keyAccessor],\n rest = _objectWithoutProperties(_itemVal, [keyAccessor].map(_toPropertyKey));\n\n key = propVal;\n itemVal = rest;\n } else {\n key = keyAccessor(itemVal, idx);\n }\n\n if (idx + 1 < keys.length) {\n if (!iterObj.hasOwnProperty(key)) {\n iterObj[key] = {};\n }\n\n iterObj = iterObj[key];\n } else {\n // Leaf key\n if (multiItem) {\n if (!iterObj.hasOwnProperty(key)) {\n iterObj[key] = [];\n }\n\n iterObj[key].push(itemVal);\n } else {\n iterObj[key] = itemVal;\n }\n }\n });\n return res;\n }, {});\n\n if (multiItem instanceof Function) {\n // Reduce leaf multiple values\n (function reduce(node) {\n var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n if (level === keys.length) {\n Object.keys(node).forEach(function (k) {\n return node[k] = multiItem(node[k]);\n });\n } else {\n Object.values(node).forEach(function (child) {\n return reduce(child, level + 1);\n });\n }\n })(indexedResult); // IIFE\n\n }\n\n var result = indexedResult;\n\n if (flattenKeys) {\n // flatten into array\n result = [];\n\n (function flatten(node) {\n var accKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n if (accKeys.length === keys.length) {\n result.push({\n keys: accKeys,\n vals: node\n });\n } else {\n Object.entries(node).forEach(function (_ref2) {\n var _ref3 = _slicedToArray(_ref2, 2),\n key = _ref3[0],\n val = _ref3[1];\n\n return flatten(val, [].concat(_toConsumableArray(accKeys), [key]));\n });\n }\n })(indexedResult); //IIFE\n\n\n if (keyAccessors instanceof Array && keyAccessors.length === 0 && result.length === 1) {\n // clear keys if there's no key accessors (single result)\n result[0].keys = [];\n }\n }\n\n return result;\n});\n\nexport default index;\n","import indexBy from 'index-array-by';\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction diffArrays(prev, next, idAccessor) {\n var result = {\n enter: [],\n update: [],\n exit: []\n };\n\n if (!idAccessor) {\n // use object references for comparison\n var prevSet = new Set(prev);\n var nextSet = new Set(next);\n new Set([].concat(_toConsumableArray(prevSet), _toConsumableArray(nextSet))).forEach(function (item) {\n var type = !prevSet.has(item) ? 'enter' : !nextSet.has(item) ? 'exit' : 'update';\n result[type].push(type === 'update' ? [item, item] : item);\n });\n } else {\n // compare by id (duplicate keys are ignored)\n var prevById = indexBy(prev, idAccessor, false);\n var nextById = indexBy(next, idAccessor, false);\n var byId = Object.assign({}, prevById, nextById);\n Object.entries(byId).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n id = _ref2[0],\n item = _ref2[1];\n\n var type = !prevById.hasOwnProperty(id) ? 'enter' : !nextById.hasOwnProperty(id) ? 'exit' : 'update';\n result[type].push(type === 'update' ? [prevById[id], nextById[id]] : item);\n });\n }\n\n return result;\n}\n\nfunction dataBindDiff(data, existingObjs, _ref3) {\n var _ref3$objBindAttr = _ref3.objBindAttr,\n objBindAttr = _ref3$objBindAttr === void 0 ? '__obj' : _ref3$objBindAttr,\n _ref3$dataBindAttr = _ref3.dataBindAttr,\n dataBindAttr = _ref3$dataBindAttr === void 0 ? '__data' : _ref3$dataBindAttr,\n idAccessor = _ref3.idAccessor,\n _ref3$purge = _ref3.purge,\n purge = _ref3$purge === void 0 ? false : _ref3$purge;\n\n var isObjValid = function isObjValid(obj) {\n return obj.hasOwnProperty(dataBindAttr);\n };\n\n var removeObjs = existingObjs.filter(function (obj) {\n return !isObjValid(obj);\n });\n var prevD = existingObjs.filter(isObjValid).map(function (obj) {\n return obj[dataBindAttr];\n });\n var nextD = data;\n var diff = purge ? {\n enter: nextD,\n exit: prevD,\n update: []\n } // don't diff data in purge mode\n : diffArrays(prevD, nextD, idAccessor);\n diff.update = diff.update.map(function (_ref4) {\n var _ref5 = _slicedToArray(_ref4, 2),\n prevD = _ref5[0],\n nextD = _ref5[1];\n\n if (prevD !== nextD) {\n // transfer obj to new data point (if different)\n nextD[objBindAttr] = prevD[objBindAttr];\n nextD[objBindAttr][dataBindAttr] = nextD;\n }\n\n return nextD;\n });\n diff.exit = diff.exit.concat(removeObjs.map(function (obj) {\n return _defineProperty({}, objBindAttr, obj);\n }));\n return diff;\n}\n\nfunction viewDigest(data, existingObjs, // list\nappendObj, // item => {...} function\nremoveObj, // item => {...} function\n_ref7) {\n var _ref7$createObj = _ref7.createObj,\n createObj = _ref7$createObj === void 0 ? function (d) {\n return {};\n } : _ref7$createObj,\n _ref7$updateObj = _ref7.updateObj,\n updateObj = _ref7$updateObj === void 0 ? function (obj, d) {} : _ref7$updateObj,\n _ref7$exitObj = _ref7.exitObj,\n exitObj = _ref7$exitObj === void 0 ? function (obj) {} : _ref7$exitObj,\n _ref7$objBindAttr = _ref7.objBindAttr,\n objBindAttr = _ref7$objBindAttr === void 0 ? '__obj' : _ref7$objBindAttr,\n _ref7$dataBindAttr = _ref7.dataBindAttr,\n dataBindAttr = _ref7$dataBindAttr === void 0 ? '__data' : _ref7$dataBindAttr,\n dataDiffOptions = _objectWithoutProperties(_ref7, [\"createObj\", \"updateObj\", \"exitObj\", \"objBindAttr\", \"dataBindAttr\"]);\n\n var _dataBindDiff = dataBindDiff(data, existingObjs, _objectSpread2({\n objBindAttr: objBindAttr,\n dataBindAttr: dataBindAttr\n }, dataDiffOptions)),\n enter = _dataBindDiff.enter,\n update = _dataBindDiff.update,\n exit = _dataBindDiff.exit; // Remove exiting points\n\n\n exit.forEach(function (d) {\n var obj = d[objBindAttr];\n delete d[objBindAttr]; // unbind obj\n\n exitObj(obj);\n removeObj(obj);\n });\n var newObjs = createObjs(enter);\n var pointsData = [].concat(_toConsumableArray(enter), _toConsumableArray(update));\n updateObjs(pointsData); // Add new points\n\n newObjs.forEach(appendObj); //\n\n function createObjs(data) {\n var newObjs = [];\n data.forEach(function (d) {\n var obj = createObj(d);\n\n if (obj) {\n obj[dataBindAttr] = d;\n d[objBindAttr] = obj;\n newObjs.push(obj);\n }\n });\n return newObjs;\n }\n\n function updateObjs(data) {\n data.forEach(function (d) {\n var obj = d[objBindAttr];\n\n if (obj) {\n obj[dataBindAttr] = d;\n updateObj(obj, d);\n }\n });\n }\n}\n\nexport default viewDigest;\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new Map(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new Map();\n for (const value of _) {\n const key = value + \"\";\n if (index.has(key)) continue;\n index.set(key, domain.push(value));\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","// TinyColor v1.4.2\n// https://github.com/bgrins/TinyColor\n// Brian Grinstead, MIT License\n\n(function(Math) {\n\nvar trimLeft = /^\\s+/,\n trimRight = /\\s+$/,\n tinyCounter = 0,\n mathRound = Math.round,\n mathMin = Math.min,\n mathMax = Math.max,\n mathRandom = Math.random;\n\nfunction tinycolor (color, opts) {\n\n color = (color) ? color : '';\n opts = opts || { };\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n\n var rgb = inputToRGB(color);\n this._originalInput = color,\n this._r = rgb.r,\n this._g = rgb.g,\n this._b = rgb.b,\n this._a = rgb.a,\n this._roundA = mathRound(100*this._a) / 100,\n this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this._r < 1) { this._r = mathRound(this._r); }\n if (this._g < 1) { this._g = mathRound(this._g); }\n if (this._b < 1) { this._b = mathRound(this._b); }\n\n this._ok = rgb.ok;\n this._tc_id = tinyCounter++;\n}\n\ntinycolor.prototype = {\n isDark: function() {\n return this.getBrightness() < 128;\n },\n isLight: function() {\n return !this.isDark();\n },\n isValid: function() {\n return this._ok;\n },\n getOriginalInput: function() {\n return this._originalInput;\n },\n getFormat: function() {\n return this._format;\n },\n getAlpha: function() {\n return this._a;\n },\n getBrightness: function() {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function() {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r/255;\n GsRGB = rgb.g/255;\n BsRGB = rgb.b/255;\n\n if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);}\n if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);}\n if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);}\n return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);\n },\n setAlpha: function(value) {\n this._a = boundAlpha(value);\n this._roundA = mathRound(100*this._a) / 100;\n return this;\n },\n toHsv: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };\n },\n toHsvString: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);\n return (this._a == 1) ?\n \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" :\n \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \"+ this._roundA + \")\";\n },\n toHsl: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };\n },\n toHslString: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);\n return (this._a == 1) ?\n \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" :\n \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \"+ this._roundA + \")\";\n },\n toHex: function(allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function(allow3Char) {\n return '#' + this.toHex(allow3Char);\n },\n toHex8: function(allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function(allow4Char) {\n return '#' + this.toHex8(allow4Char);\n },\n toRgb: function() {\n return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };\n },\n toRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \")\" :\n \"rgba(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function() {\n return { r: mathRound(bound01(this._r, 255) * 100) + \"%\", g: mathRound(bound01(this._g, 255) * 100) + \"%\", b: mathRound(bound01(this._b, 255) * 100) + \"%\", a: this._a };\n },\n toPercentageRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%)\" :\n \"rgba(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function() {\n if (this._a === 0) {\n return \"transparent\";\n }\n\n if (this._a < 1) {\n return false;\n }\n\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function(secondColor) {\n var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n\n return \"progid:DXImageTransform.Microsoft.gradient(\"+gradientType+\"startColorstr=\"+hex8String+\",endColorstr=\"+secondHex8String+\")\";\n },\n toString: function(format) {\n var formatSet = !!format;\n format = format || this._format;\n\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n\n return formattedString || this.toHexString();\n },\n clone: function() {\n return tinycolor(this.toString());\n },\n\n _applyModification: function(fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function() {\n return this._applyModification(lighten, arguments);\n },\n brighten: function() {\n return this._applyModification(brighten, arguments);\n },\n darken: function() {\n return this._applyModification(darken, arguments);\n },\n desaturate: function() {\n return this._applyModification(desaturate, arguments);\n },\n saturate: function() {\n return this._applyModification(saturate, arguments);\n },\n greyscale: function() {\n return this._applyModification(greyscale, arguments);\n },\n spin: function() {\n return this._applyModification(spin, arguments);\n },\n\n _applyCombination: function(fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function() {\n return this._applyCombination(analogous, arguments);\n },\n complement: function() {\n return this._applyCombination(complement, arguments);\n },\n monochromatic: function() {\n return this._applyCombination(monochromatic, arguments);\n },\n splitcomplement: function() {\n return this._applyCombination(splitcomplement, arguments);\n },\n triad: function() {\n return this._applyCombination(triad, arguments);\n },\n tetrad: function() {\n return this._applyCombination(tetrad, arguments);\n }\n};\n\n// If input is an object, force 1 into \"1.0\" to handle ratios properly\n// String input requires \"1.0\" as input, so 1 will be treated as 1\ntinycolor.fromRatio = function(color, opts) {\n if (typeof color == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n }\n else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n\n return tinycolor(color, opts);\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n// \"red\"\n// \"#f00\" or \"f00\"\n// \"#ff0000\" or \"ff0000\"\n// \"#ff000000\" or \"ff000000\"\n// \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n// \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n// \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n// \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n// \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n// \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n// \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n\n var rgb = { r: 0, g: 0, b: 0 };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n\n if (typeof color == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n\n a = boundAlpha(a);\n\n return {\n ok: ok,\n format: color.format || format,\n r: mathMin(255, mathMax(rgb.r, 0)),\n g: mathMin(255, mathMax(rgb.g, 0)),\n b: mathMin(255, mathMax(rgb.b, 0)),\n a: a\n };\n}\n\n\n// Conversion Functions\n// --------------------\n\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// \n\n// `rgbToRgb`\n// Handle bounds / percentage checking to conform to CSS color spec\n// \n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b){\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n}\n\n// `rgbToHsl`\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, l = (max + min) / 2;\n\n if(max == min) {\n h = s = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n\n h /= 6;\n }\n\n return { h: h, s: s, l: l };\n}\n\n// `hslToRgb`\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n var r, g, b;\n\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n\n function hue2rgb(p, q, t) {\n if(t < 0) t += 1;\n if(t > 1) t -= 1;\n if(t < 1/6) return p + (q - p) * 6 * t;\n if(t < 1/2) return q;\n if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n return p;\n }\n\n if(s === 0) {\n r = g = b = l; // achromatic\n }\n else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nfunction rgbToHsv(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, v = max;\n\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n\n if(max == min) {\n h = 0; // achromatic\n }\n else {\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h /= 6;\n }\n return { h: h, s: s, v: v };\n}\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\n function hsvToRgb(h, s, v) {\n\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHex`\n// Converts an RGB color to hex\n// Assumes r, g, and b are contained in the set [0, 255]\n// Returns a 3 or 6 character hex\nfunction rgbToHex(r, g, b, allow3Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// `rgbaToHex`\n// Converts an RGBA color plus alpha transparency to hex\n// Assumes r, g, b are contained in the set [0, 255] and\n// a in [0, 1]. Returns a 4 or 8 character rgba hex\nfunction rgbaToHex(r, g, b, a, allow4Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16)),\n pad2(convertDecimalToHex(a))\n ];\n\n // Return a 4 character hex if possible\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// `rgbaToArgbHex`\n// Converts an RGBA color to an ARGB Hex8 string\n// Rarely used, but required for \"toFilter()\"\nfunction rgbaToArgbHex(r, g, b, a) {\n\n var hex = [\n pad2(convertDecimalToHex(a)),\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n return hex.join(\"\");\n}\n\n// `equals`\n// Can be called with any tinycolor input\ntinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) { return false; }\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n};\n\ntinycolor.random = function() {\n return tinycolor.fromRatio({\n r: mathRandom(),\n g: mathRandom(),\n b: mathRandom()\n });\n};\n\n\n// Modification Functions\n// ----------------------\n// Thanks to less.js for some of the basics here\n// \n\nfunction desaturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction saturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction greyscale(color) {\n return tinycolor(color).desaturate(100);\n}\n\nfunction lighten (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\nfunction brighten(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var rgb = tinycolor(color).toRgb();\n rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));\n rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));\n rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));\n return tinycolor(rgb);\n}\n\nfunction darken (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\n// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n// Values outside of this range will be wrapped into this range.\nfunction spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n}\n\n// Combination Functions\n// ---------------------\n// Thanks to jQuery xColor for some of the ideas behind these\n// \n\nfunction complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n}\n\nfunction triad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction tetrad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),\n tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})\n ];\n}\n\nfunction analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n\n for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n}\n\nfunction monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h, s = hsv.s, v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n\n while (results--) {\n ret.push(tinycolor({ h: h, s: s, v: v}));\n v = (v + modification) % 1;\n }\n\n return ret;\n}\n\n// Utility Functions\n// ---------------------\n\ntinycolor.mix = function(color1, color2, amount) {\n amount = (amount === 0) ? 0 : (amount || 50);\n\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n\n var p = amount / 100;\n\n var rgba = {\n r: ((rgb2.r - rgb1.r) * p) + rgb1.r,\n g: ((rgb2.g - rgb1.g) * p) + rgb1.g,\n b: ((rgb2.b - rgb1.b) * p) + rgb1.b,\n a: ((rgb2.a - rgb1.a) * p) + rgb1.a\n };\n\n return tinycolor(rgba);\n};\n\n\n// Readability Functions\n// ---------------------\n// false\n// tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\ntinycolor.isReadable = function(color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n\n out = false;\n\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n\n};\n\n// `mostReadable`\n// Given a base color and a list of possible foreground or background\n// colors for that base, returns the most readable color.\n// Optionally returns Black or White if the most readable color is unreadable.\n// *Example*\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\ntinycolor.mostReadable = function(baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size ;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors ;\n level = args.level;\n size = args.size;\n\n for (var i= 0; i < colorList.length ; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n\n if (tinycolor.isReadable(baseColor, bestColor, {\"level\":level,\"size\":size}) || !includeFallbackColors) {\n return bestColor;\n }\n else {\n args.includeFallbackColors=false;\n return tinycolor.mostReadable(baseColor,[\"#fff\", \"#000\"],args);\n }\n};\n\n\n// Big List of Colors\n// ------------------\n// \nvar names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n};\n\n// Make it easy to access colors via `hexNames[hex]`\nvar hexNames = tinycolor.hexNames = flip(names);\n\n\n// Utilities\n// ---------\n\n// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\nfunction flip(o) {\n var flipped = { };\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n}\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n a = parseFloat(a);\n\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n\n return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n if (isOnePointZero(n)) { n = \"100%\"; }\n\n var processPercent = isPercentage(n);\n n = mathMin(max, mathMax(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if ((Math.abs(n - max) < 0.000001)) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return (n % max) / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n return mathMin(1, mathMax(0, val));\n}\n\n// Parse a base-16 hex value into a base-10 integer\nfunction parseIntFromHex(val) {\n return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// \nfunction isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n return typeof n === \"string\" && n.indexOf('%') != -1;\n}\n\n// Force a hex value to have 2 characters\nfunction pad2(c) {\n return c.length == 1 ? '0' + c : '' + c;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n if (n <= 1) {\n n = (n * 100) + \"%\";\n }\n\n return n;\n}\n\n// Converts a decimal to a hex value\nfunction convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n// Converts a hex value to a decimal\nfunction convertHexToDecimal(h) {\n return (parseIntFromHex(h) / 255);\n}\n\nvar matchers = (function() {\n\n // \n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // \n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n})();\n\n// `isValidCSSUnit`\n// Take in a single string / number and check to see if it looks like a CSS unit\n// (see `matchers` above for definition).\nfunction isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n}\n\n// `stringInputToObject`\n// Permissive string parsing. Take in a number of formats, and output an object\n// based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\nfunction stringInputToObject(color) {\n\n color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n }\n else if (color == 'transparent') {\n return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if ((match = matchers.rgb.exec(color))) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n if ((match = matchers.rgba.exec(color))) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n if ((match = matchers.hsl.exec(color))) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n if ((match = matchers.hsla.exec(color))) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n if ((match = matchers.hsv.exec(color))) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n if ((match = matchers.hsva.exec(color))) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n if ((match = matchers.hex8.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex6.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if ((match = matchers.hex4.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n a: convertHexToDecimal(match[4] + '' + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex3.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n\n return false;\n}\n\nfunction validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\"level\":\"AA\", \"size\":\"small\"};\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return {\"level\":level, \"size\":size};\n}\n\n// Node: Export function\nif (typeof module !== \"undefined\" && module.exports) {\n module.exports = tinycolor;\n}\n// AMD/requirejs: Define the module\nelse if (typeof define === 'function' && define.amd) {\n define(function () {return tinycolor;});\n}\n// Browser: Expose to window\nelse {\n window.tinycolor = tinycolor;\n}\n\n})(Math);\n","import { Group, Mesh, MeshLambertMaterial, Color, BufferGeometry, BufferAttribute, Matrix4, Vector3, SphereBufferGeometry, CylinderBufferGeometry, TubeBufferGeometry, ConeBufferGeometry, Line, LineBasicMaterial, QuadraticBezierCurve3, CubicBezierCurve3, Box3 } from 'three';\nimport { forceSimulation, forceLink, forceManyBody, forceCenter, forceRadial } from 'd3-force-3d';\nimport graph from 'ngraph.graph';\nimport forcelayout from 'ngraph.forcelayout';\nimport Kapsule from 'kapsule';\nimport accessorFn from 'accessor-fn';\nimport { min, max } from 'd3-array';\nimport dataJoint from 'data-joint';\nimport { scaleOrdinal } from 'd3-scale';\nimport { schemePaired } from 'd3-scale-chromatic';\nimport tinyColor from 'tinycolor2';\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar materialDispose = function materialDispose(material) {\n if (material instanceof Array) {\n material.forEach(materialDispose);\n } else {\n if (material.map) {\n material.map.dispose();\n }\n\n material.dispose();\n }\n};\n\nvar deallocate = function deallocate(obj) {\n if (obj.geometry) {\n obj.geometry.dispose();\n }\n\n if (obj.material) {\n materialDispose(obj.material);\n }\n\n if (obj.texture) {\n obj.texture.dispose();\n }\n\n if (obj.children) {\n obj.children.forEach(deallocate);\n }\n};\n\nvar emptyObject = function emptyObject(obj) {\n while (obj.children.length) {\n var childObj = obj.children[0];\n obj.remove(childObj);\n deallocate(childObj);\n }\n};\n\nvar _excluded = [\"objFilter\"];\n\nfunction threeDigest(data, scene) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n var _ref$objFilter = _ref.objFilter,\n objFilter = _ref$objFilter === void 0 ? function () {\n return true;\n } : _ref$objFilter,\n options = _objectWithoutProperties(_ref, _excluded);\n\n return dataJoint(data, scene.children.filter(objFilter), function (obj) {\n return scene.add(obj);\n }, function (obj) {\n scene.remove(obj);\n emptyObject(obj);\n }, _objectSpread2({\n objBindAttr: '__threeObj'\n }, options));\n}\n\nvar colorStr2Hex = function colorStr2Hex(str) {\n return isNaN(str) ? parseInt(tinyColor(str).toHex(), 16) : str;\n};\n\nvar colorAlpha = function colorAlpha(str) {\n return isNaN(str) ? tinyColor(str).getAlpha() : 1;\n};\n\nvar autoColorScale = scaleOrdinal(schemePaired); // Autoset attribute colorField by colorByAccessor property\n// If an object has already a color, don't set it\n// Objects can be nodes or links\n\nfunction autoColorObjects(objects, colorByAccessor, colorField) {\n if (!colorByAccessor || typeof colorField !== 'string') return;\n objects.filter(function (obj) {\n return !obj[colorField];\n }).forEach(function (obj) {\n obj[colorField] = autoColorScale(colorByAccessor(obj));\n });\n}\n\nfunction getDagDepths (_ref, idAccessor) {\n var nodes = _ref.nodes,\n links = _ref.links;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$nodeFilter = _ref2.nodeFilter,\n nodeFilter = _ref2$nodeFilter === void 0 ? function () {\n return true;\n } : _ref2$nodeFilter,\n _ref2$onLoopError = _ref2.onLoopError,\n onLoopError = _ref2$onLoopError === void 0 ? function (loopIds) {\n throw \"Invalid DAG structure! Found cycle in node path: \".concat(loopIds.join(' -> '), \".\");\n } : _ref2$onLoopError;\n\n // linked graph\n var graph = {};\n nodes.forEach(function (node) {\n return graph[idAccessor(node)] = {\n data: node,\n out: [],\n depth: -1,\n skip: !nodeFilter(node)\n };\n });\n links.forEach(function (_ref3) {\n var source = _ref3.source,\n target = _ref3.target;\n var sourceId = getNodeId(source);\n var targetId = getNodeId(target);\n if (!graph.hasOwnProperty(sourceId)) throw \"Missing source node with id: \".concat(sourceId);\n if (!graph.hasOwnProperty(targetId)) throw \"Missing target node with id: \".concat(targetId);\n var sourceNode = graph[sourceId];\n var targetNode = graph[targetId];\n sourceNode.out.push(targetNode);\n\n function getNodeId(node) {\n return _typeof(node) === 'object' ? idAccessor(node) : node;\n }\n });\n var foundLoops = [];\n traverse(Object.values(graph));\n var nodeDepths = Object.assign.apply(Object, [{}].concat(_toConsumableArray(Object.entries(graph).filter(function (_ref4) {\n var _ref5 = _slicedToArray(_ref4, 2),\n node = _ref5[1];\n\n return !node.skip;\n }).map(function (_ref6) {\n var _ref7 = _slicedToArray(_ref6, 2),\n id = _ref7[0],\n node = _ref7[1];\n\n return _defineProperty({}, id, node.depth);\n }))));\n return nodeDepths;\n\n function traverse(nodes) {\n var nodeStack = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var currentDepth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n for (var i = 0, l = nodes.length; i < l; i++) {\n var node = nodes[i];\n\n if (nodeStack.indexOf(node) !== -1) {\n var _ret = function () {\n var loop = [].concat(_toConsumableArray(nodeStack.slice(nodeStack.indexOf(node))), [node]).map(function (d) {\n return idAccessor(d.data);\n });\n\n if (!foundLoops.some(function (foundLoop) {\n return foundLoop.length === loop.length && foundLoop.every(function (id, idx) {\n return id === loop[idx];\n });\n })) {\n foundLoops.push(loop);\n onLoopError(loop);\n }\n\n return \"continue\";\n }();\n\n if (_ret === \"continue\") continue;\n }\n\n if (currentDepth > node.depth) {\n // Don't unnecessarily revisit chunks of the graph\n node.depth = currentDepth;\n traverse(node.out, [].concat(_toConsumableArray(nodeStack), [node]), currentDepth + (node.skip ? 0 : 1));\n }\n }\n }\n}\n\nvar three$1 = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n Group: Group,\n Mesh: Mesh,\n MeshLambertMaterial: MeshLambertMaterial,\n Color: Color,\n BufferGeometry: BufferGeometry,\n BufferAttribute: BufferAttribute,\n Matrix4: Matrix4,\n Vector3: Vector3,\n SphereBufferGeometry: SphereBufferGeometry,\n CylinderBufferGeometry: CylinderBufferGeometry,\n TubeBufferGeometry: TubeBufferGeometry,\n ConeBufferGeometry: ConeBufferGeometry,\n Line: Line,\n LineBasicMaterial: LineBasicMaterial,\n QuadraticBezierCurve3: QuadraticBezierCurve3,\n CubicBezierCurve3: CubicBezierCurve3,\n Box3: Box3\n};\nvar ngraph = {\n graph: graph,\n forcelayout: forcelayout\n};\n\nvar DAG_LEVEL_NODE_RATIO = 2; // support multiple method names for backwards threejs compatibility\n\nvar setAttributeFn = new three$1.BufferGeometry().setAttribute ? 'setAttribute' : 'addAttribute';\nvar applyMatrix4Fn = new three$1.BufferGeometry().applyMatrix4 ? 'applyMatrix4' : 'applyMatrix';\nvar ForceGraph = Kapsule({\n props: {\n jsonUrl: {\n onChange: function onChange(jsonUrl, state) {\n var _this = this;\n\n if (jsonUrl && !state.fetchingJson) {\n // Load data asynchronously\n state.fetchingJson = true;\n state.onLoading();\n fetch(jsonUrl).then(function (r) {\n return r.json();\n }).then(function (json) {\n state.fetchingJson = false;\n state.onFinishLoading(json);\n\n _this.graphData(json);\n });\n }\n },\n triggerUpdate: false\n },\n graphData: {\n \"default\": {\n nodes: [],\n links: []\n },\n onChange: function onChange(graphData, state) {\n state.engineRunning = false; // Pause simulation immediately\n }\n },\n numDimensions: {\n \"default\": 3,\n onChange: function onChange(numDim, state) {\n var chargeForce = state.d3ForceLayout.force('charge'); // Increase repulsion on 3D mode for improved spatial separation\n\n if (chargeForce) {\n chargeForce.strength(numDim > 2 ? -60 : -30);\n }\n\n if (numDim < 3) {\n eraseDimension(state.graphData.nodes, 'z');\n }\n\n if (numDim < 2) {\n eraseDimension(state.graphData.nodes, 'y');\n }\n\n function eraseDimension(nodes, dim) {\n nodes.forEach(function (d) {\n delete d[dim]; // position\n\n delete d[\"v\".concat(dim)]; // velocity\n });\n }\n }\n },\n dagMode: {\n onChange: function onChange(dagMode, state) {\n // td, bu, lr, rl, zin, zout, radialin, radialout\n !dagMode && state.forceEngine === 'd3' && (state.graphData.nodes || []).forEach(function (n) {\n return n.fx = n.fy = n.fz = undefined;\n }); // unfix nodes when disabling dag mode\n }\n },\n dagLevelDistance: {},\n dagNodeFilter: {\n \"default\": function _default(node) {\n return true;\n }\n },\n onDagError: {\n triggerUpdate: false\n },\n nodeRelSize: {\n \"default\": 4\n },\n // volume per val unit\n nodeId: {\n \"default\": 'id'\n },\n nodeVal: {\n \"default\": 'val'\n },\n nodeResolution: {\n \"default\": 8\n },\n // how many slice segments in the sphere's circumference\n nodeColor: {\n \"default\": 'color'\n },\n nodeAutoColorBy: {},\n nodeOpacity: {\n \"default\": 0.75\n },\n nodeVisibility: {\n \"default\": true\n },\n nodeThreeObject: {},\n nodeThreeObjectExtend: {\n \"default\": false\n },\n linkSource: {\n \"default\": 'source'\n },\n linkTarget: {\n \"default\": 'target'\n },\n linkVisibility: {\n \"default\": true\n },\n linkColor: {\n \"default\": 'color'\n },\n linkAutoColorBy: {},\n linkOpacity: {\n \"default\": 0.2\n },\n linkWidth: {},\n // Rounded to nearest decimal. For falsy values use dimensionless line with 1px regardless of distance.\n linkResolution: {\n \"default\": 6\n },\n // how many radial segments in each line tube's geometry\n linkCurvature: {\n \"default\": 0,\n triggerUpdate: false\n },\n // line curvature radius (0: straight, 1: semi-circle)\n linkCurveRotation: {\n \"default\": 0,\n triggerUpdate: false\n },\n // line curve rotation along the line axis (0: interection with XY plane, PI: upside down)\n linkMaterial: {},\n linkThreeObject: {},\n linkThreeObjectExtend: {\n \"default\": false\n },\n linkPositionUpdate: {\n triggerUpdate: false\n },\n // custom function to call for updating the link's position. Signature: (threeObj, { start: { x, y, z}, end: { x, y, z }}, link). If the function returns a truthy value, the regular link position update will not run.\n linkDirectionalArrowLength: {\n \"default\": 0\n },\n linkDirectionalArrowColor: {},\n linkDirectionalArrowRelPos: {\n \"default\": 0.5,\n triggerUpdate: false\n },\n // value between 0<>1 indicating the relative pos along the (exposed) line\n linkDirectionalArrowResolution: {\n \"default\": 8\n },\n // how many slice segments in the arrow's conic circumference\n linkDirectionalParticles: {\n \"default\": 0\n },\n // animate photons travelling in the link direction\n linkDirectionalParticleSpeed: {\n \"default\": 0.01,\n triggerUpdate: false\n },\n // in link length ratio per frame\n linkDirectionalParticleWidth: {\n \"default\": 0.5\n },\n linkDirectionalParticleColor: {},\n linkDirectionalParticleResolution: {\n \"default\": 4\n },\n // how many slice segments in the particle sphere's circumference\n forceEngine: {\n \"default\": 'd3'\n },\n // d3 or ngraph\n d3AlphaMin: {\n \"default\": 0\n },\n d3AlphaDecay: {\n \"default\": 0.0228,\n triggerUpdate: false,\n onChange: function onChange(alphaDecay, state) {\n state.d3ForceLayout.alphaDecay(alphaDecay);\n }\n },\n d3AlphaTarget: {\n \"default\": 0,\n triggerUpdate: false,\n onChange: function onChange(alphaTarget, state) {\n state.d3ForceLayout.alphaTarget(alphaTarget);\n }\n },\n d3VelocityDecay: {\n \"default\": 0.4,\n triggerUpdate: false,\n onChange: function onChange(velocityDecay, state) {\n state.d3ForceLayout.velocityDecay(velocityDecay);\n }\n },\n ngraphPhysics: {\n \"default\": {\n // defaults from https://github.com/anvaka/ngraph.physics.simulator/blob/master/index.js\n timeStep: 20,\n gravity: -1.2,\n theta: 0.8,\n springLength: 30,\n springCoefficient: 0.0008,\n dragCoefficient: 0.02\n }\n },\n warmupTicks: {\n \"default\": 0,\n triggerUpdate: false\n },\n // how many times to tick the force engine at init before starting to render\n cooldownTicks: {\n \"default\": Infinity,\n triggerUpdate: false\n },\n cooldownTime: {\n \"default\": 15000,\n triggerUpdate: false\n },\n // ms\n onLoading: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onFinishLoading: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onUpdate: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onFinishUpdate: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onEngineTick: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onEngineStop: {\n \"default\": function _default() {},\n triggerUpdate: false\n }\n },\n methods: {\n refresh: function refresh(state) {\n state._flushObjects = true;\n\n state._rerender();\n\n return this;\n },\n // Expose d3 forces for external manipulation\n d3Force: function d3Force(state, forceName, forceFn) {\n if (forceFn === undefined) {\n return state.d3ForceLayout.force(forceName); // Force getter\n }\n\n state.d3ForceLayout.force(forceName, forceFn); // Force setter\n\n return this;\n },\n d3ReheatSimulation: function d3ReheatSimulation(state) {\n state.d3ForceLayout.alpha(1);\n this.resetCountdown();\n return this;\n },\n // reset cooldown state\n resetCountdown: function resetCountdown(state) {\n state.cntTicks = 0;\n state.startTickTime = new Date();\n state.engineRunning = true;\n return this;\n },\n tickFrame: function tickFrame(state) {\n var isD3Sim = state.forceEngine !== 'ngraph';\n\n if (state.engineRunning) {\n layoutTick();\n }\n\n updateArrows();\n updatePhotons();\n return this; //\n\n function layoutTick() {\n if (++state.cntTicks > state.cooldownTicks || new Date() - state.startTickTime > state.cooldownTime || isD3Sim && state.d3AlphaMin > 0 && state.d3ForceLayout.alpha() < state.d3AlphaMin) {\n state.engineRunning = false; // Stop ticking graph\n\n state.onEngineStop();\n } else {\n state.layout[isD3Sim ? 'tick' : 'step'](); // Tick it\n\n state.onEngineTick();\n } // Update nodes position\n\n\n state.graphData.nodes.forEach(function (node) {\n var obj = node.__threeObj;\n if (!obj) return;\n var pos = isD3Sim ? node : state.layout.getNodePosition(node[state.nodeId]);\n obj.position.x = pos.x;\n obj.position.y = pos.y || 0;\n obj.position.z = pos.z || 0;\n }); // Update links position\n\n var linkWidthAccessor = accessorFn(state.linkWidth);\n var linkCurvatureAccessor = accessorFn(state.linkCurvature);\n var linkCurveRotationAccessor = accessorFn(state.linkCurveRotation);\n var linkThreeObjectExtendAccessor = accessorFn(state.linkThreeObjectExtend);\n state.graphData.links.forEach(function (link) {\n var lineObj = link.__lineObj;\n if (!lineObj) return;\n var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id);\n var start = pos[isD3Sim ? 'source' : 'from'];\n var end = pos[isD3Sim ? 'target' : 'to'];\n if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link\n\n calcLinkCurve(link); // calculate link curve for all links, including custom replaced, so it can be used in directional functionality\n\n var extendedObj = linkThreeObjectExtendAccessor(link);\n\n if (state.linkPositionUpdate && state.linkPositionUpdate(extendedObj ? lineObj.children[1] : lineObj, // pass child custom object if extending the default\n {\n start: {\n x: start.x,\n y: start.y,\n z: start.z\n },\n end: {\n x: end.x,\n y: end.y,\n z: end.z\n }\n }, link) && !extendedObj) {\n // exit if successfully custom updated position of non-extended obj\n return;\n }\n\n var curveResolution = 30; // # line segments\n\n var curve = link.__curve; // select default line obj if it's an extended group\n\n var line = lineObj.children.length ? lineObj.children[0] : lineObj;\n\n if (line.type === 'Line') {\n // Update line geometry\n if (!curve) {\n // straight line\n var linePos = line.geometry.getAttribute('position');\n\n if (!linePos || !linePos.array || linePos.array.length !== 6) {\n line.geometry[setAttributeFn]('position', linePos = new three$1.BufferAttribute(new Float32Array(2 * 3), 3));\n }\n\n linePos.array[0] = start.x;\n linePos.array[1] = start.y || 0;\n linePos.array[2] = start.z || 0;\n linePos.array[3] = end.x;\n linePos.array[4] = end.y || 0;\n linePos.array[5] = end.z || 0;\n linePos.needsUpdate = true;\n } else {\n // bezier curve line\n line.geometry.setFromPoints(curve.getPoints(curveResolution));\n }\n\n line.geometry.computeBoundingSphere();\n } else if (line.type === 'Mesh') {\n // Update cylinder geometry\n if (!curve) {\n // straight tube\n if (!line.geometry.type.match(/^Cylinder(Buffer)?Geometry$/)) {\n var linkWidth = Math.ceil(linkWidthAccessor(link) * 10) / 10;\n var r = linkWidth / 2;\n var geometry = new three$1.CylinderBufferGeometry(r, r, 1, state.linkResolution, 1, false);\n geometry[applyMatrix4Fn](new three$1.Matrix4().makeTranslation(0, 1 / 2, 0));\n geometry[applyMatrix4Fn](new three$1.Matrix4().makeRotationX(Math.PI / 2));\n line.geometry.dispose();\n line.geometry = geometry;\n }\n\n var vStart = new three$1.Vector3(start.x, start.y || 0, start.z || 0);\n var vEnd = new three$1.Vector3(end.x, end.y || 0, end.z || 0);\n var distance = vStart.distanceTo(vEnd);\n line.position.x = vStart.x;\n line.position.y = vStart.y;\n line.position.z = vStart.z;\n line.scale.z = distance;\n line.parent.localToWorld(vEnd); // lookAt requires world coords\n\n line.lookAt(vEnd);\n } else {\n // curved tube\n if (!line.geometry.type.match(/^Tube(Buffer)?Geometry$/)) {\n // reset object positioning\n line.position.set(0, 0, 0);\n line.rotation.set(0, 0, 0);\n line.scale.set(1, 1, 1);\n }\n\n var _linkWidth = Math.ceil(linkWidthAccessor(link) * 10) / 10;\n\n var _r = _linkWidth / 2;\n\n var _geometry = new three$1.TubeBufferGeometry(curve, curveResolution, _r, state.linkResolution, false);\n\n line.geometry.dispose();\n line.geometry = _geometry;\n }\n }\n }); //\n\n function calcLinkCurve(link) {\n var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id);\n var start = pos[isD3Sim ? 'source' : 'from'];\n var end = pos[isD3Sim ? 'target' : 'to'];\n if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link\n\n var curvature = linkCurvatureAccessor(link);\n\n if (!curvature) {\n link.__curve = null; // Straight line\n } else {\n // bezier curve line (only for line types)\n var vStart = new three$1.Vector3(start.x, start.y || 0, start.z || 0);\n var vEnd = new three$1.Vector3(end.x, end.y || 0, end.z || 0);\n var l = vStart.distanceTo(vEnd); // line length\n\n var curve;\n var curveRotation = linkCurveRotationAccessor(link);\n\n if (l > 0) {\n var dx = end.x - start.x;\n var dy = end.y - start.y || 0;\n var vLine = new three$1.Vector3().subVectors(vEnd, vStart);\n var cp = vLine.clone().multiplyScalar(curvature).cross(dx !== 0 || dy !== 0 ? new three$1.Vector3(0, 0, 1) : new three$1.Vector3(0, 1, 0)) // avoid cross-product of parallel vectors (prefer Z, fallback to Y)\n .applyAxisAngle(vLine.normalize(), curveRotation) // rotate along line axis according to linkCurveRotation\n .add(new three$1.Vector3().addVectors(vStart, vEnd).divideScalar(2));\n curve = new three$1.QuadraticBezierCurve3(vStart, cp, vEnd);\n } else {\n // Same point, draw a loop\n var d = curvature * 70;\n var endAngle = -curveRotation; // Rotate clockwise (from Z angle perspective)\n\n var startAngle = endAngle + Math.PI / 2;\n curve = new three$1.CubicBezierCurve3(vStart, new three$1.Vector3(d * Math.cos(startAngle), d * Math.sin(startAngle), 0).add(vStart), new three$1.Vector3(d * Math.cos(endAngle), d * Math.sin(endAngle), 0).add(vStart), vEnd);\n }\n\n link.__curve = curve;\n }\n }\n }\n\n function updateArrows() {\n // update link arrow position\n var arrowRelPosAccessor = accessorFn(state.linkDirectionalArrowRelPos);\n var arrowLengthAccessor = accessorFn(state.linkDirectionalArrowLength);\n var nodeValAccessor = accessorFn(state.nodeVal);\n state.graphData.links.forEach(function (link) {\n var arrowObj = link.__arrowObj;\n if (!arrowObj) return;\n var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id);\n var start = pos[isD3Sim ? 'source' : 'from'];\n var end = pos[isD3Sim ? 'target' : 'to'];\n if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link\n\n var startR = Math.sqrt(Math.max(0, nodeValAccessor(start) || 1)) * state.nodeRelSize;\n var endR = Math.sqrt(Math.max(0, nodeValAccessor(end) || 1)) * state.nodeRelSize;\n var arrowLength = arrowLengthAccessor(link);\n var arrowRelPos = arrowRelPosAccessor(link);\n var getPosAlongLine = link.__curve ? function (t) {\n return link.__curve.getPoint(t);\n } // interpolate along bezier curve\n : function (t) {\n // straight line: interpolate linearly\n var iplt = function iplt(dim, start, end, t) {\n return start[dim] + (end[dim] - start[dim]) * t || 0;\n };\n\n return {\n x: iplt('x', start, end, t),\n y: iplt('y', start, end, t),\n z: iplt('z', start, end, t)\n };\n };\n var lineLen = link.__curve ? link.__curve.getLength() : Math.sqrt(['x', 'y', 'z'].map(function (dim) {\n return Math.pow((end[dim] || 0) - (start[dim] || 0), 2);\n }).reduce(function (acc, v) {\n return acc + v;\n }, 0));\n var posAlongLine = startR + arrowLength + (lineLen - startR - endR - arrowLength) * arrowRelPos;\n var arrowHead = getPosAlongLine(posAlongLine / lineLen);\n var arrowTail = getPosAlongLine((posAlongLine - arrowLength) / lineLen);\n ['x', 'y', 'z'].forEach(function (dim) {\n return arrowObj.position[dim] = arrowTail[dim];\n });\n\n var headVec = _construct(three$1.Vector3, _toConsumableArray(['x', 'y', 'z'].map(function (c) {\n return arrowHead[c];\n })));\n\n arrowObj.parent.localToWorld(headVec); // lookAt requires world coords\n\n arrowObj.lookAt(headVec);\n });\n }\n\n function updatePhotons() {\n // update link particle positions\n var particleSpeedAccessor = accessorFn(state.linkDirectionalParticleSpeed);\n state.graphData.links.forEach(function (link) {\n var cyclePhotons = link.__photonsObj && link.__photonsObj.children;\n var singleHopPhotons = link.__singleHopPhotonsObj && link.__singleHopPhotonsObj.children;\n if ((!singleHopPhotons || !singleHopPhotons.length) && (!cyclePhotons || !cyclePhotons.length)) return;\n var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id);\n var start = pos[isD3Sim ? 'source' : 'from'];\n var end = pos[isD3Sim ? 'target' : 'to'];\n if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link\n\n var particleSpeed = particleSpeedAccessor(link);\n var getPhotonPos = link.__curve ? function (t) {\n return link.__curve.getPoint(t);\n } // interpolate along bezier curve\n : function (t) {\n // straight line: interpolate linearly\n var iplt = function iplt(dim, start, end, t) {\n return start[dim] + (end[dim] - start[dim]) * t || 0;\n };\n\n return {\n x: iplt('x', start, end, t),\n y: iplt('y', start, end, t),\n z: iplt('z', start, end, t)\n };\n };\n var photons = [].concat(_toConsumableArray(cyclePhotons || []), _toConsumableArray(singleHopPhotons || []));\n photons.forEach(function (photon, idx) {\n var singleHop = photon.parent.__linkThreeObjType === 'singleHopPhotons';\n\n if (!photon.hasOwnProperty('__progressRatio')) {\n photon.__progressRatio = singleHop ? 0 : idx / cyclePhotons.length;\n }\n\n photon.__progressRatio += particleSpeed;\n\n if (photon.__progressRatio >= 1) {\n if (!singleHop) {\n photon.__progressRatio = photon.__progressRatio % 1;\n } else {\n // remove particle\n photon.parent.remove(photon);\n emptyObject(photon);\n return;\n }\n }\n\n var photonPosRatio = photon.__progressRatio;\n var pos = getPhotonPos(photonPosRatio);\n ['x', 'y', 'z'].forEach(function (dim) {\n return photon.position[dim] = pos[dim];\n });\n });\n });\n }\n },\n emitParticle: function emitParticle(state, link) {\n if (link) {\n if (!link.__singleHopPhotonsObj) {\n var obj = new three$1.Group();\n obj.__linkThreeObjType = 'singleHopPhotons';\n link.__singleHopPhotonsObj = obj;\n state.graphScene.add(obj);\n }\n\n var particleWidthAccessor = accessorFn(state.linkDirectionalParticleWidth);\n var photonR = Math.ceil(particleWidthAccessor(link) * 10) / 10 / 2;\n var numSegments = state.linkDirectionalParticleResolution;\n var particleGeometry = new three$1.SphereBufferGeometry(photonR, numSegments, numSegments);\n var linkColorAccessor = accessorFn(state.linkColor);\n var particleColorAccessor = accessorFn(state.linkDirectionalParticleColor);\n var photonColor = particleColorAccessor(link) || linkColorAccessor(link) || '#f0f0f0';\n var materialColor = new three$1.Color(colorStr2Hex(photonColor));\n var opacity = state.linkOpacity * 3;\n var particleMaterial = new three$1.MeshLambertMaterial({\n color: materialColor,\n transparent: true,\n opacity: opacity\n }); // add a single hop particle\n\n link.__singleHopPhotonsObj.add(new three$1.Mesh(particleGeometry, particleMaterial));\n }\n\n return this;\n },\n getGraphBbox: function getGraphBbox(state) {\n var nodeFilter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {\n return true;\n };\n if (!state.initialised) return null; // recursively collect all nested geometries bboxes\n\n var bboxes = function getBboxes(obj) {\n var bboxes = [];\n\n if (obj.geometry) {\n obj.geometry.computeBoundingBox();\n var box = new three$1.Box3();\n box.copy(obj.geometry.boundingBox).applyMatrix4(obj.matrixWorld);\n bboxes.push(box);\n }\n\n return bboxes.concat.apply(bboxes, _toConsumableArray((obj.children || []).filter(function (obj) {\n return !obj.hasOwnProperty('__graphObjType') || obj.__graphObjType === 'node' && nodeFilter(obj.__data);\n } // exclude filtered out nodes\n ).map(getBboxes)));\n }(state.graphScene);\n\n if (!bboxes.length) return null; // extract global x,y,z min/max\n\n return Object.assign.apply(Object, _toConsumableArray(['x', 'y', 'z'].map(function (c) {\n return _defineProperty({}, c, [min(bboxes, function (bb) {\n return bb.min[c];\n }), max(bboxes, function (bb) {\n return bb.max[c];\n })]);\n })));\n }\n },\n stateInit: function stateInit() {\n return {\n d3ForceLayout: forceSimulation().force('link', forceLink()).force('charge', forceManyBody()).force('center', forceCenter()).force('dagRadial', null).stop(),\n engineRunning: false\n };\n },\n init: function init(threeObj, state) {\n // Main three object to manipulate\n state.graphScene = threeObj;\n },\n update: function update(state, changedProps) {\n var hasAnyPropChanged = function hasAnyPropChanged(propList) {\n return propList.some(function (p) {\n return changedProps.hasOwnProperty(p);\n });\n };\n\n state.engineRunning = false; // pause simulation\n\n state.onUpdate();\n\n if (state.nodeAutoColorBy !== null && hasAnyPropChanged(['nodeAutoColorBy', 'graphData', 'nodeColor'])) {\n // Auto add color to uncolored nodes\n autoColorObjects(state.graphData.nodes, accessorFn(state.nodeAutoColorBy), state.nodeColor);\n }\n\n if (state.linkAutoColorBy !== null && hasAnyPropChanged(['linkAutoColorBy', 'graphData', 'linkColor'])) {\n // Auto add color to uncolored links\n autoColorObjects(state.graphData.links, accessorFn(state.linkAutoColorBy), state.linkColor);\n } // Digest nodes WebGL objects\n\n\n if (state._flushObjects || hasAnyPropChanged(['graphData', 'nodeThreeObject', 'nodeThreeObjectExtend', 'nodeVal', 'nodeColor', 'nodeVisibility', 'nodeRelSize', 'nodeResolution', 'nodeOpacity'])) {\n var customObjectAccessor = accessorFn(state.nodeThreeObject);\n var customObjectExtendAccessor = accessorFn(state.nodeThreeObjectExtend);\n var valAccessor = accessorFn(state.nodeVal);\n var colorAccessor = accessorFn(state.nodeColor);\n var visibilityAccessor = accessorFn(state.nodeVisibility);\n var sphereGeometries = {}; // indexed by node value\n\n var sphereMaterials = {}; // indexed by color\n\n threeDigest(state.graphData.nodes.filter(visibilityAccessor), state.graphScene, {\n purge: state._flushObjects || hasAnyPropChanged([// recreate objects if any of these props have changed\n 'nodeThreeObject', 'nodeThreeObjectExtend']),\n objFilter: function objFilter(obj) {\n return obj.__graphObjType === 'node';\n },\n createObj: function createObj(node) {\n var customObj = customObjectAccessor(node);\n var extendObj = customObjectExtendAccessor(node);\n\n if (customObj && state.nodeThreeObject === customObj) {\n // clone object if it's a shared object among all nodes\n customObj = customObj.clone();\n }\n\n var obj;\n\n if (customObj && !extendObj) {\n obj = customObj;\n } else {\n // Add default object (sphere mesh)\n obj = new three$1.Mesh();\n obj.__graphDefaultObj = true;\n\n if (customObj && extendObj) {\n obj.add(customObj); // extend default with custom\n }\n }\n\n obj.__graphObjType = 'node'; // Add object type\n\n return obj;\n },\n updateObj: function updateObj(obj, node) {\n if (obj.__graphDefaultObj) {\n // bypass internal updates for custom node objects\n var val = valAccessor(node) || 1;\n var radius = Math.cbrt(val) * state.nodeRelSize;\n var numSegments = state.nodeResolution;\n\n if (!obj.geometry.type.match(/^Sphere(Buffer)?Geometry$/) || obj.geometry.parameters.radius !== radius || obj.geometry.parameters.widthSegments !== numSegments) {\n if (!sphereGeometries.hasOwnProperty(val)) {\n sphereGeometries[val] = new three$1.SphereBufferGeometry(radius, numSegments, numSegments);\n }\n\n obj.geometry.dispose();\n obj.geometry = sphereGeometries[val];\n }\n\n var color = colorAccessor(node);\n var materialColor = new three$1.Color(colorStr2Hex(color || '#ffffaa'));\n var opacity = state.nodeOpacity * colorAlpha(color);\n\n if (obj.material.type !== 'MeshLambertMaterial' || !obj.material.color.equals(materialColor) || obj.material.opacity !== opacity) {\n if (!sphereMaterials.hasOwnProperty(color)) {\n sphereMaterials[color] = new three$1.MeshLambertMaterial({\n color: materialColor,\n transparent: true,\n opacity: opacity\n });\n }\n\n obj.material.dispose();\n obj.material = sphereMaterials[color];\n }\n }\n }\n });\n } // Digest links WebGL objects\n\n\n if (state._flushObjects || hasAnyPropChanged(['graphData', 'linkThreeObject', 'linkThreeObjectExtend', 'linkMaterial', 'linkColor', 'linkWidth', 'linkVisibility', 'linkResolution', 'linkOpacity', 'linkDirectionalArrowLength', 'linkDirectionalArrowColor', 'linkDirectionalArrowResolution', 'linkDirectionalParticles', 'linkDirectionalParticleWidth', 'linkDirectionalParticleColor', 'linkDirectionalParticleResolution'])) {\n var _customObjectAccessor = accessorFn(state.linkThreeObject);\n\n var _customObjectExtendAccessor = accessorFn(state.linkThreeObjectExtend);\n\n var customMaterialAccessor = accessorFn(state.linkMaterial);\n\n var _visibilityAccessor = accessorFn(state.linkVisibility);\n\n var _colorAccessor = accessorFn(state.linkColor);\n\n var widthAccessor = accessorFn(state.linkWidth);\n var cylinderGeometries = {}; // indexed by link width\n\n var lambertLineMaterials = {}; // for cylinder objects, indexed by link color\n\n var basicLineMaterials = {}; // for line objects, indexed by link color\n\n var visibleLinks = state.graphData.links.filter(_visibilityAccessor); // lines digest cycle\n\n threeDigest(visibleLinks, state.graphScene, {\n objBindAttr: '__lineObj',\n purge: state._flushObjects || hasAnyPropChanged([// recreate objects if any of these props have changed\n 'linkThreeObject', 'linkThreeObjectExtend', 'linkWidth']),\n objFilter: function objFilter(obj) {\n return obj.__graphObjType === 'link';\n },\n createObj: function createObj(link) {\n var customObj = _customObjectAccessor(link);\n\n var extendObj = _customObjectExtendAccessor(link);\n\n if (customObj && state.linkThreeObject === customObj) {\n // clone object if it's a shared object among all links\n customObj = customObj.clone();\n }\n\n var defaultObj;\n\n if (!customObj || extendObj) {\n // construct default line obj\n var useCylinder = !!widthAccessor(link);\n\n if (useCylinder) {\n defaultObj = new three$1.Mesh();\n } else {\n // Use plain line (constant width)\n var lineGeometry = new three$1.BufferGeometry();\n lineGeometry[setAttributeFn]('position', new three$1.BufferAttribute(new Float32Array(2 * 3), 3));\n defaultObj = new three$1.Line(lineGeometry);\n }\n }\n\n var obj;\n\n if (!customObj) {\n obj = defaultObj;\n obj.__graphDefaultObj = true;\n } else {\n if (!extendObj) {\n // use custom object\n obj = customObj;\n } else {\n // extend default with custom in a group\n obj = new three$1.Group();\n obj.__graphDefaultObj = true;\n obj.add(defaultObj);\n obj.add(customObj);\n }\n }\n\n obj.renderOrder = 10; // Prevent visual glitches of dark lines on top of nodes by rendering them last\n\n obj.__graphObjType = 'link'; // Add object type\n\n return obj;\n },\n updateObj: function updateObj(updObj, link) {\n if (updObj.__graphDefaultObj) {\n // bypass internal updates for custom link objects\n // select default object if it's an extended group\n var obj = updObj.children.length ? updObj.children[0] : updObj;\n var linkWidth = Math.ceil(widthAccessor(link) * 10) / 10;\n var useCylinder = !!linkWidth;\n\n if (useCylinder) {\n var r = linkWidth / 2;\n var numSegments = state.linkResolution;\n\n if (!obj.geometry.type.match(/^Cylinder(Buffer)?Geometry$/) || obj.geometry.parameters.radiusTop !== r || obj.geometry.parameters.radialSegments !== numSegments) {\n if (!cylinderGeometries.hasOwnProperty(linkWidth)) {\n var geometry = new three$1.CylinderBufferGeometry(r, r, 1, numSegments, 1, false);\n geometry[applyMatrix4Fn](new three$1.Matrix4().makeTranslation(0, 1 / 2, 0));\n geometry[applyMatrix4Fn](new three$1.Matrix4().makeRotationX(Math.PI / 2));\n cylinderGeometries[linkWidth] = geometry;\n }\n\n obj.geometry.dispose();\n obj.geometry = cylinderGeometries[linkWidth];\n }\n }\n\n var customMaterial = customMaterialAccessor(link);\n\n if (customMaterial) {\n obj.material = customMaterial;\n } else {\n var color = _colorAccessor(link);\n\n var materialColor = new three$1.Color(colorStr2Hex(color || '#f0f0f0'));\n var opacity = state.linkOpacity * colorAlpha(color);\n var materialType = useCylinder ? 'MeshLambertMaterial' : 'LineBasicMaterial';\n\n if (obj.material.type !== materialType || !obj.material.color.equals(materialColor) || obj.material.opacity !== opacity) {\n var lineMaterials = useCylinder ? lambertLineMaterials : basicLineMaterials;\n\n if (!lineMaterials.hasOwnProperty(color)) {\n lineMaterials[color] = new three$1[materialType]({\n color: materialColor,\n transparent: opacity < 1,\n opacity: opacity,\n depthWrite: opacity >= 1 // Prevent transparency issues\n\n });\n }\n\n obj.material.dispose();\n obj.material = lineMaterials[color];\n }\n }\n }\n }\n }); // Arrows digest cycle\n\n if (state.linkDirectionalArrowLength || changedProps.hasOwnProperty('linkDirectionalArrowLength')) {\n var arrowLengthAccessor = accessorFn(state.linkDirectionalArrowLength);\n var arrowColorAccessor = accessorFn(state.linkDirectionalArrowColor);\n threeDigest(visibleLinks.filter(arrowLengthAccessor), state.graphScene, {\n objBindAttr: '__arrowObj',\n objFilter: function objFilter(obj) {\n return obj.__linkThreeObjType === 'arrow';\n },\n createObj: function createObj() {\n var obj = new three$1.Mesh(undefined, new three$1.MeshLambertMaterial({\n transparent: true\n }));\n obj.__linkThreeObjType = 'arrow'; // Add object type\n\n return obj;\n },\n updateObj: function updateObj(obj, link) {\n var arrowLength = arrowLengthAccessor(link);\n var numSegments = state.linkDirectionalArrowResolution;\n\n if (!obj.geometry.type.match(/^Cone(Buffer)?Geometry$/) || obj.geometry.parameters.height !== arrowLength || obj.geometry.parameters.radialSegments !== numSegments) {\n var coneGeometry = new three$1.ConeBufferGeometry(arrowLength * 0.25, arrowLength, numSegments); // Correct orientation\n\n coneGeometry.translate(0, arrowLength / 2, 0);\n coneGeometry.rotateX(Math.PI / 2);\n obj.geometry.dispose();\n obj.geometry = coneGeometry;\n }\n\n obj.material.color = new three$1.Color(arrowColorAccessor(link) || _colorAccessor(link) || '#f0f0f0');\n obj.material.opacity = state.linkOpacity * 3;\n }\n });\n } // Photon particles digest cycle\n\n\n if (state.linkDirectionalParticles || changedProps.hasOwnProperty('linkDirectionalParticles')) {\n var particlesAccessor = accessorFn(state.linkDirectionalParticles);\n var particleWidthAccessor = accessorFn(state.linkDirectionalParticleWidth);\n var particleColorAccessor = accessorFn(state.linkDirectionalParticleColor);\n var particleMaterials = {}; // indexed by link color\n\n var particleGeometries = {}; // indexed by particle width\n\n threeDigest(visibleLinks.filter(particlesAccessor), state.graphScene, {\n objBindAttr: '__photonsObj',\n objFilter: function objFilter(obj) {\n return obj.__linkThreeObjType === 'photons';\n },\n createObj: function createObj() {\n var obj = new three$1.Group();\n obj.__linkThreeObjType = 'photons'; // Add object type\n\n return obj;\n },\n updateObj: function updateObj(obj, link) {\n var numPhotons = Math.round(Math.abs(particlesAccessor(link)));\n var curPhoton = !!obj.children.length && obj.children[0];\n var photonR = Math.ceil(particleWidthAccessor(link) * 10) / 10 / 2;\n var numSegments = state.linkDirectionalParticleResolution;\n var particleGeometry;\n\n if (curPhoton && curPhoton.geometry.parameters.radius === photonR && curPhoton.geometry.parameters.widthSegments === numSegments) {\n particleGeometry = curPhoton.geometry;\n } else {\n if (!particleGeometries.hasOwnProperty(photonR)) {\n particleGeometries[photonR] = new three$1.SphereBufferGeometry(photonR, numSegments, numSegments);\n }\n\n particleGeometry = particleGeometries[photonR];\n curPhoton && curPhoton.geometry.dispose();\n }\n\n var photonColor = particleColorAccessor(link) || _colorAccessor(link) || '#f0f0f0';\n var materialColor = new three$1.Color(colorStr2Hex(photonColor));\n var opacity = state.linkOpacity * 3;\n var particleMaterial;\n\n if (curPhoton && curPhoton.material.color.equals(materialColor) && curPhoton.material.opacity === opacity) {\n particleMaterial = curPhoton.material;\n } else {\n if (!particleMaterials.hasOwnProperty(photonColor)) {\n particleMaterials[photonColor] = new three$1.MeshLambertMaterial({\n color: materialColor,\n transparent: true,\n opacity: opacity\n });\n }\n\n particleMaterial = particleMaterials[photonColor];\n curPhoton && curPhoton.material.dispose();\n } // digest cycle for each photon\n\n\n threeDigest(_toConsumableArray(new Array(numPhotons)).map(function (_, idx) {\n return {\n idx: idx\n };\n }), obj, {\n idAccessor: function idAccessor(d) {\n return d.idx;\n },\n createObj: function createObj() {\n return new three$1.Mesh(particleGeometry, particleMaterial);\n },\n updateObj: function updateObj(obj) {\n obj.geometry = particleGeometry;\n obj.material = particleMaterial;\n }\n });\n }\n });\n }\n }\n\n state._flushObjects = false; // reset objects refresh flag\n // simulation engine\n\n if (hasAnyPropChanged(['graphData', 'nodeId', 'linkSource', 'linkTarget', 'numDimensions', 'forceEngine', 'dagMode', 'dagNodeFilter', 'dagLevelDistance'])) {\n state.engineRunning = false; // Pause simulation\n // parse links\n\n state.graphData.links.forEach(function (link) {\n link.source = link[state.linkSource];\n link.target = link[state.linkTarget];\n }); // Feed data to force-directed layout\n\n var isD3Sim = state.forceEngine !== 'ngraph';\n var layout;\n\n if (isD3Sim) {\n // D3-force\n (layout = state.d3ForceLayout).stop().alpha(1) // re-heat the simulation\n .numDimensions(state.numDimensions).nodes(state.graphData.nodes); // add links (if link force is still active)\n\n var linkForce = state.d3ForceLayout.force('link');\n\n if (linkForce) {\n linkForce.id(function (d) {\n return d[state.nodeId];\n }).links(state.graphData.links);\n } // setup dag force constraints\n\n\n var nodeDepths = state.dagMode && getDagDepths(state.graphData, function (node) {\n return node[state.nodeId];\n }, {\n nodeFilter: state.dagNodeFilter,\n onLoopError: state.onDagError || undefined\n });\n var maxDepth = Math.max.apply(Math, _toConsumableArray(Object.values(nodeDepths || [])));\n var dagLevelDistance = state.dagLevelDistance || state.graphData.nodes.length / (maxDepth || 1) * DAG_LEVEL_NODE_RATIO * (['radialin', 'radialout'].indexOf(state.dagMode) !== -1 ? 0.7 : 1); // Fix nodes to x,y,z for dag mode\n\n if (state.dagMode) {\n var getFFn = function getFFn(fix, invert) {\n return function (node) {\n return !fix ? undefined : (nodeDepths[node[state.nodeId]] - maxDepth / 2) * dagLevelDistance * (invert ? -1 : 1);\n };\n };\n\n var fxFn = getFFn(['lr', 'rl'].indexOf(state.dagMode) !== -1, state.dagMode === 'rl');\n var fyFn = getFFn(['td', 'bu'].indexOf(state.dagMode) !== -1, state.dagMode === 'td');\n var fzFn = getFFn(['zin', 'zout'].indexOf(state.dagMode) !== -1, state.dagMode === 'zout');\n state.graphData.nodes.filter(state.dagNodeFilter).forEach(function (node) {\n node.fx = fxFn(node);\n node.fy = fyFn(node);\n node.fz = fzFn(node);\n });\n } // Use radial force for radial dags\n\n\n state.d3ForceLayout.force('dagRadial', ['radialin', 'radialout'].indexOf(state.dagMode) !== -1 ? forceRadial(function (node) {\n var nodeDepth = nodeDepths[node[state.nodeId]] || -1;\n return (state.dagMode === 'radialin' ? maxDepth - nodeDepth : nodeDepth) * dagLevelDistance;\n }).strength(function (node) {\n return state.dagNodeFilter(node) ? 1 : 0;\n }) : null);\n } else {\n // ngraph\n var _graph = ngraph.graph();\n\n state.graphData.nodes.forEach(function (node) {\n _graph.addNode(node[state.nodeId]);\n });\n state.graphData.links.forEach(function (link) {\n _graph.addLink(link.source, link.target);\n });\n layout = ngraph.forcelayout(_graph, _objectSpread2({\n dimensions: state.numDimensions\n }, state.ngraphPhysics));\n layout.graph = _graph; // Attach graph reference to layout\n }\n\n for (var i = 0; i < state.warmupTicks && !(isD3Sim && state.d3AlphaMin > 0 && state.d3ForceLayout.alpha() < state.d3AlphaMin); i++) {\n layout[isD3Sim ? \"tick\" : \"step\"]();\n } // Initial ticks before starting to render\n\n\n state.layout = layout;\n this.resetCountdown();\n }\n\n state.engineRunning = true; // resume simulation\n\n state.onFinishUpdate();\n }\n});\n\nfunction fromKapsule (kapsule) {\n var baseClass = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Object;\n var initKapsuleWithSelf = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var FromKapsule = /*#__PURE__*/function (_baseClass) {\n _inherits(FromKapsule, _baseClass);\n\n var _super = _createSuper(FromKapsule);\n\n function FromKapsule() {\n var _this;\n\n _classCallCheck(this, FromKapsule);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n _this.__kapsuleInstance = kapsule().apply(void 0, [].concat(_toConsumableArray(initKapsuleWithSelf ? [_assertThisInitialized(_this)] : []), args));\n return _this;\n }\n\n return FromKapsule;\n }(baseClass); // attach kapsule props/methods to class prototype\n\n\n Object.keys(kapsule()).forEach(function (m) {\n return FromKapsule.prototype[m] = function () {\n var _this$__kapsuleInstan;\n\n var returnVal = (_this$__kapsuleInstan = this.__kapsuleInstance)[m].apply(_this$__kapsuleInstan, arguments);\n\n return returnVal === this.__kapsuleInstance ? this // chain based on this class, not the kapsule obj\n : returnVal;\n };\n });\n return FromKapsule;\n}\n\nvar three = window.THREE ? window.THREE : {\n Group: Group\n}; // Prefer consumption from global THREE, if exists\nvar threeForcegraph = fromKapsule(ForceGraph, three.Group, true);\n\nexport default threeForcegraph;\n","import {\n\tEventDispatcher,\n\tMOUSE,\n\tQuaternion,\n\tVector2,\n\tVector3\n} from \"../../../build/three.module.js\";\n\nvar TrackballControls = function ( object, domElement ) {\n\n\tif ( domElement === undefined ) console.warn( 'THREE.TrackballControls: The second parameter \"domElement\" is now mandatory.' );\n\tif ( domElement === document ) console.error( 'THREE.TrackballControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.' );\n\n\tvar scope = this;\n\tvar STATE = { NONE: - 1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4 };\n\n\tthis.object = object;\n\tthis.domElement = domElement;\n\n\t// API\n\n\tthis.enabled = true;\n\n\tthis.screen = { left: 0, top: 0, width: 0, height: 0 };\n\n\tthis.rotateSpeed = 1.0;\n\tthis.zoomSpeed = 1.2;\n\tthis.panSpeed = 0.3;\n\n\tthis.noRotate = false;\n\tthis.noZoom = false;\n\tthis.noPan = false;\n\n\tthis.staticMoving = false;\n\tthis.dynamicDampingFactor = 0.2;\n\n\tthis.minDistance = 0;\n\tthis.maxDistance = Infinity;\n\n\tthis.keys = [ 65 /*A*/, 83 /*S*/, 68 /*D*/ ];\n\n\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.ZOOM, RIGHT: MOUSE.PAN };\n\n\t// internals\n\n\tthis.target = new Vector3();\n\n\tvar EPS = 0.000001;\n\n\tvar lastPosition = new Vector3();\n\tvar lastZoom = 1;\n\n\tvar _state = STATE.NONE,\n\t\t_keyState = STATE.NONE,\n\n\t\t_eye = new Vector3(),\n\n\t\t_movePrev = new Vector2(),\n\t\t_moveCurr = new Vector2(),\n\n\t\t_lastAxis = new Vector3(),\n\t\t_lastAngle = 0,\n\n\t\t_zoomStart = new Vector2(),\n\t\t_zoomEnd = new Vector2(),\n\n\t\t_touchZoomDistanceStart = 0,\n\t\t_touchZoomDistanceEnd = 0,\n\n\t\t_panStart = new Vector2(),\n\t\t_panEnd = new Vector2();\n\n\t// for reset\n\n\tthis.target0 = this.target.clone();\n\tthis.position0 = this.object.position.clone();\n\tthis.up0 = this.object.up.clone();\n\tthis.zoom0 = this.object.zoom;\n\n\t// events\n\n\tvar changeEvent = { type: 'change' };\n\tvar startEvent = { type: 'start' };\n\tvar endEvent = { type: 'end' };\n\n\n\t// methods\n\n\tthis.handleResize = function () {\n\n\t\tvar box = scope.domElement.getBoundingClientRect();\n\t\t// adjustments come from similar code in the jquery offset() function\n\t\tvar d = scope.domElement.ownerDocument.documentElement;\n\t\tscope.screen.left = box.left + window.pageXOffset - d.clientLeft;\n\t\tscope.screen.top = box.top + window.pageYOffset - d.clientTop;\n\t\tscope.screen.width = box.width;\n\t\tscope.screen.height = box.height;\n\n\t};\n\n\tvar getMouseOnScreen = ( function () {\n\n\t\tvar vector = new Vector2();\n\n\t\treturn function getMouseOnScreen( pageX, pageY ) {\n\n\t\t\tvector.set(\n\t\t\t\t( pageX - scope.screen.left ) / scope.screen.width,\n\t\t\t\t( pageY - scope.screen.top ) / scope.screen.height\n\t\t\t);\n\n\t\t\treturn vector;\n\n\t\t};\n\n\t}() );\n\n\tvar getMouseOnCircle = ( function () {\n\n\t\tvar vector = new Vector2();\n\n\t\treturn function getMouseOnCircle( pageX, pageY ) {\n\n\t\t\tvector.set(\n\t\t\t\t( ( pageX - scope.screen.width * 0.5 - scope.screen.left ) / ( scope.screen.width * 0.5 ) ),\n\t\t\t\t( ( scope.screen.height + 2 * ( scope.screen.top - pageY ) ) / scope.screen.width ) // screen.width intentional\n\t\t\t);\n\n\t\t\treturn vector;\n\n\t\t};\n\n\t}() );\n\n\tthis.rotateCamera = ( function () {\n\n\t\tvar axis = new Vector3(),\n\t\t\tquaternion = new Quaternion(),\n\t\t\teyeDirection = new Vector3(),\n\t\t\tobjectUpDirection = new Vector3(),\n\t\t\tobjectSidewaysDirection = new Vector3(),\n\t\t\tmoveDirection = new Vector3(),\n\t\t\tangle;\n\n\t\treturn function rotateCamera() {\n\n\t\t\tmoveDirection.set( _moveCurr.x - _movePrev.x, _moveCurr.y - _movePrev.y, 0 );\n\t\t\tangle = moveDirection.length();\n\n\t\t\tif ( angle ) {\n\n\t\t\t\t_eye.copy( scope.object.position ).sub( scope.target );\n\n\t\t\t\teyeDirection.copy( _eye ).normalize();\n\t\t\t\tobjectUpDirection.copy( scope.object.up ).normalize();\n\t\t\t\tobjectSidewaysDirection.crossVectors( objectUpDirection, eyeDirection ).normalize();\n\n\t\t\t\tobjectUpDirection.setLength( _moveCurr.y - _movePrev.y );\n\t\t\t\tobjectSidewaysDirection.setLength( _moveCurr.x - _movePrev.x );\n\n\t\t\t\tmoveDirection.copy( objectUpDirection.add( objectSidewaysDirection ) );\n\n\t\t\t\taxis.crossVectors( moveDirection, _eye ).normalize();\n\n\t\t\t\tangle *= scope.rotateSpeed;\n\t\t\t\tquaternion.setFromAxisAngle( axis, angle );\n\n\t\t\t\t_eye.applyQuaternion( quaternion );\n\t\t\t\tscope.object.up.applyQuaternion( quaternion );\n\n\t\t\t\t_lastAxis.copy( axis );\n\t\t\t\t_lastAngle = angle;\n\n\t\t\t} else if ( ! scope.staticMoving && _lastAngle ) {\n\n\t\t\t\t_lastAngle *= Math.sqrt( 1.0 - scope.dynamicDampingFactor );\n\t\t\t\t_eye.copy( scope.object.position ).sub( scope.target );\n\t\t\t\tquaternion.setFromAxisAngle( _lastAxis, _lastAngle );\n\t\t\t\t_eye.applyQuaternion( quaternion );\n\t\t\t\tscope.object.up.applyQuaternion( quaternion );\n\n\t\t\t}\n\n\t\t\t_movePrev.copy( _moveCurr );\n\n\t\t};\n\n\t}() );\n\n\n\tthis.zoomCamera = function () {\n\n\t\tvar factor;\n\n\t\tif ( _state === STATE.TOUCH_ZOOM_PAN ) {\n\n\t\t\tfactor = _touchZoomDistanceStart / _touchZoomDistanceEnd;\n\t\t\t_touchZoomDistanceStart = _touchZoomDistanceEnd;\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t_eye.multiplyScalar( factor );\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\tscope.object.zoom *= factor;\n\t\t\t\tscope.object.updateProjectionMatrix();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfactor = 1.0 + ( _zoomEnd.y - _zoomStart.y ) * scope.zoomSpeed;\n\n\t\t\tif ( factor !== 1.0 && factor > 0.0 ) {\n\n\t\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t\t_eye.multiplyScalar( factor );\n\n\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\tscope.object.zoom /= factor;\n\t\t\t\t\tscope.object.updateProjectionMatrix();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( scope.staticMoving ) {\n\n\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t} else {\n\n\t\t\t\t_zoomStart.y += ( _zoomEnd.y - _zoomStart.y ) * this.dynamicDampingFactor;\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.panCamera = ( function () {\n\n\t\tvar mouseChange = new Vector2(),\n\t\t\tobjectUp = new Vector3(),\n\t\t\tpan = new Vector3();\n\n\t\treturn function panCamera() {\n\n\t\t\tmouseChange.copy( _panEnd ).sub( _panStart );\n\n\t\t\tif ( mouseChange.lengthSq() ) {\n\n\t\t\t\tif ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\tvar scale_x = ( scope.object.right - scope.object.left ) / scope.object.zoom / scope.domElement.clientWidth;\n\t\t\t\t\tvar scale_y = ( scope.object.top - scope.object.bottom ) / scope.object.zoom / scope.domElement.clientWidth;\n\n\t\t\t\t\tmouseChange.x *= scale_x;\n\t\t\t\t\tmouseChange.y *= scale_y;\n\n\t\t\t\t}\n\n\t\t\t\tmouseChange.multiplyScalar( _eye.length() * scope.panSpeed );\n\n\t\t\t\tpan.copy( _eye ).cross( scope.object.up ).setLength( mouseChange.x );\n\t\t\t\tpan.add( objectUp.copy( scope.object.up ).setLength( mouseChange.y ) );\n\n\t\t\t\tscope.object.position.add( pan );\n\t\t\t\tscope.target.add( pan );\n\n\t\t\t\tif ( scope.staticMoving ) {\n\n\t\t\t\t\t_panStart.copy( _panEnd );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_panStart.add( mouseChange.subVectors( _panEnd, _panStart ).multiplyScalar( scope.dynamicDampingFactor ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() );\n\n\tthis.checkDistances = function () {\n\n\t\tif ( ! scope.noZoom || ! scope.noPan ) {\n\n\t\t\tif ( _eye.lengthSq() > scope.maxDistance * scope.maxDistance ) {\n\n\t\t\t\tscope.object.position.addVectors( scope.target, _eye.setLength( scope.maxDistance ) );\n\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t}\n\n\t\t\tif ( _eye.lengthSq() < scope.minDistance * scope.minDistance ) {\n\n\t\t\t\tscope.object.position.addVectors( scope.target, _eye.setLength( scope.minDistance ) );\n\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.update = function () {\n\n\t\t_eye.subVectors( scope.object.position, scope.target );\n\n\t\tif ( ! scope.noRotate ) {\n\n\t\t\tscope.rotateCamera();\n\n\t\t}\n\n\t\tif ( ! scope.noZoom ) {\n\n\t\t\tscope.zoomCamera();\n\n\t\t}\n\n\t\tif ( ! scope.noPan ) {\n\n\t\t\tscope.panCamera();\n\n\t\t}\n\n\t\tscope.object.position.addVectors( scope.target, _eye );\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscope.checkDistances();\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tif ( lastPosition.distanceToSquared( scope.object.position ) > EPS ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\n\t\t\t}\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tif ( lastPosition.distanceToSquared( scope.object.position ) > EPS || lastZoom !== scope.object.zoom ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\tlastZoom = scope.object.zoom;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t}\n\n\t};\n\n\tthis.reset = function () {\n\n\t\t_state = STATE.NONE;\n\t\t_keyState = STATE.NONE;\n\n\t\tscope.target.copy( scope.target0 );\n\t\tscope.object.position.copy( scope.position0 );\n\t\tscope.object.up.copy( scope.up0 );\n\t\tscope.object.zoom = scope.zoom0;\n\n\t\tscope.object.updateProjectionMatrix();\n\n\t\t_eye.subVectors( scope.object.position, scope.target );\n\n\t\tscope.object.lookAt( scope.target );\n\n\t\tscope.dispatchEvent( changeEvent );\n\n\t\tlastPosition.copy( scope.object.position );\n\t\tlastZoom = scope.object.zoom;\n\n\t};\n\n\t// listeners\n\n\tfunction onPointerDown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseDown( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onPointerMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseMove( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onPointerUp( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseUp( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction keydown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\twindow.removeEventListener( 'keydown', keydown );\n\n\t\tif ( _keyState !== STATE.NONE ) {\n\n\t\t\treturn;\n\n\t\t} else if ( event.keyCode === scope.keys[ STATE.ROTATE ] && ! scope.noRotate ) {\n\n\t\t\t_keyState = STATE.ROTATE;\n\n\t\t} else if ( event.keyCode === scope.keys[ STATE.ZOOM ] && ! scope.noZoom ) {\n\n\t\t\t_keyState = STATE.ZOOM;\n\n\t\t} else if ( event.keyCode === scope.keys[ STATE.PAN ] && ! scope.noPan ) {\n\n\t\t\t_keyState = STATE.PAN;\n\n\t\t}\n\n\t}\n\n\tfunction keyup() {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\t_keyState = STATE.NONE;\n\n\t\twindow.addEventListener( 'keydown', keydown, false );\n\n\t}\n\n\tfunction onMouseDown( event ) {\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tif ( _state === STATE.NONE ) {\n\n\t\t\tswitch ( event.button ) {\n\n\t\t\t\tcase scope.mouseButtons.LEFT:\n\t\t\t\t\t_state = STATE.ROTATE;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.mouseButtons.MIDDLE:\n\t\t\t\t\t_state = STATE.ZOOM;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.mouseButtons.RIGHT:\n\t\t\t\t\t_state = STATE.PAN;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t_state = STATE.NONE;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar state = ( _keyState !== STATE.NONE ) ? _keyState : _state;\n\n\t\tif ( state === STATE.ROTATE && ! scope.noRotate ) {\n\n\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\t\t\t_movePrev.copy( _moveCurr );\n\n\t\t} else if ( state === STATE.ZOOM && ! scope.noZoom ) {\n\n\t\t\t_zoomStart.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\t\t\t_zoomEnd.copy( _zoomStart );\n\n\t\t} else if ( state === STATE.PAN && ! scope.noPan ) {\n\n\t\t\t_panStart.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\t\t\t_panEnd.copy( _panStart );\n\n\t\t}\n\n\t\tscope.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove, false );\n\t\tscope.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp, false );\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t}\n\n\tfunction onMouseMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tvar state = ( _keyState !== STATE.NONE ) ? _keyState : _state;\n\n\t\tif ( state === STATE.ROTATE && ! scope.noRotate ) {\n\n\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\n\t\t} else if ( state === STATE.ZOOM && ! scope.noZoom ) {\n\n\t\t\t_zoomEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t\t} else if ( state === STATE.PAN && ! scope.noPan ) {\n\n\t\t\t_panEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t\t}\n\n\t}\n\n\tfunction onMouseUp( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\t_state = STATE.NONE;\n\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove );\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction mousewheel( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tif ( scope.noZoom === true ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tswitch ( event.deltaMode ) {\n\n\t\t\tcase 2:\n\t\t\t\t// Zoom in pages\n\t\t\t\t_zoomStart.y -= event.deltaY * 0.025;\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\t// Zoom in lines\n\t\t\t\t_zoomStart.y -= event.deltaY * 0.01;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t// undefined, 0, assume pixels\n\t\t\t\t_zoomStart.y -= event.deltaY * 0.00025;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tscope.dispatchEvent( startEvent );\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction touchstart( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\n\t\t\t\t_state = STATE.TOUCH_ROTATE;\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) );\n\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\tbreak;\n\n\t\t\tdefault: // 2 or more\n\t\t\t\t_state = STATE.TOUCH_ZOOM_PAN;\n\t\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\t\t\t\t_touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\t\tvar x = ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ) / 2;\n\t\t\t\tvar y = ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ) / 2;\n\t\t\t\t_panStart.copy( getMouseOnScreen( x, y ) );\n\t\t\t\t_panEnd.copy( _panStart );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t}\n\n\tfunction touchmove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\n\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) );\n\t\t\t\tbreak;\n\n\t\t\tdefault: // 2 or more\n\t\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\t\t\t\t_touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\t\tvar x = ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ) / 2;\n\t\t\t\tvar y = ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ) / 2;\n\t\t\t\t_panEnd.copy( getMouseOnScreen( x, y ) );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction touchend( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 0:\n\t\t\t\t_state = STATE.NONE;\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\t_state = STATE.TOUCH_ROTATE;\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) );\n\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction contextmenu( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t}\n\n\tthis.dispose = function () {\n\n\t\tscope.domElement.removeEventListener( 'contextmenu', contextmenu, false );\n\n\t\tscope.domElement.removeEventListener( 'pointerdown', onPointerDown, false );\n\t\tscope.domElement.removeEventListener( 'wheel', mousewheel, false );\n\n\t\tscope.domElement.removeEventListener( 'touchstart', touchstart, false );\n\t\tscope.domElement.removeEventListener( 'touchend', touchend, false );\n\t\tscope.domElement.removeEventListener( 'touchmove', touchmove, false );\n\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove, false );\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp, false );\n\n\t\twindow.removeEventListener( 'keydown', keydown, false );\n\t\twindow.removeEventListener( 'keyup', keyup, false );\n\n\t};\n\n\tthis.domElement.addEventListener( 'contextmenu', contextmenu, false );\n\n\tthis.domElement.addEventListener( 'pointerdown', onPointerDown, false );\n\tthis.domElement.addEventListener( 'wheel', mousewheel, false );\n\n\tthis.domElement.addEventListener( 'touchstart', touchstart, false );\n\tthis.domElement.addEventListener( 'touchend', touchend, false );\n\tthis.domElement.addEventListener( 'touchmove', touchmove, false );\n\n\tthis.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove, false );\n\tthis.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp, false );\n\n\twindow.addEventListener( 'keydown', keydown, false );\n\twindow.addEventListener( 'keyup', keyup, false );\n\n\tthis.handleResize();\n\n\t// force an update at start\n\tthis.update();\n\n};\n\nTrackballControls.prototype = Object.create( EventDispatcher.prototype );\nTrackballControls.prototype.constructor = TrackballControls;\n\nexport { TrackballControls };\n","import {\n\tEventDispatcher,\n\tMOUSE,\n\tQuaternion,\n\tSpherical,\n\tTOUCH,\n\tVector2,\n\tVector3\n} from \"../../../build/three.module.js\";\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n// Orbit - left mouse / touch: one-finger move\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n\nvar OrbitControls = function ( object, domElement ) {\n\n\tif ( domElement === undefined ) console.warn( 'THREE.OrbitControls: The second parameter \"domElement\" is now mandatory.' );\n\tif ( domElement === document ) console.error( 'THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.' );\n\n\tthis.object = object;\n\tthis.domElement = domElement;\n\n\t// Set to false to disable this control\n\tthis.enabled = true;\n\n\t// \"target\" sets the location of focus, where the object orbits around\n\tthis.target = new Vector3();\n\n\t// How far you can dolly in and out ( PerspectiveCamera only )\n\tthis.minDistance = 0;\n\tthis.maxDistance = Infinity;\n\n\t// How far you can zoom in and out ( OrthographicCamera only )\n\tthis.minZoom = 0;\n\tthis.maxZoom = Infinity;\n\n\t// How far you can orbit vertically, upper and lower limits.\n\t// Range is 0 to Math.PI radians.\n\tthis.minPolarAngle = 0; // radians\n\tthis.maxPolarAngle = Math.PI; // radians\n\n\t// How far you can orbit horizontally, upper and lower limits.\n\t// If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI )\n\tthis.minAzimuthAngle = - Infinity; // radians\n\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t// Set to true to enable damping (inertia)\n\t// If damping is enabled, you must call controls.update() in your animation loop\n\tthis.enableDamping = false;\n\tthis.dampingFactor = 0.05;\n\n\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t// Set to false to disable zooming\n\tthis.enableZoom = true;\n\tthis.zoomSpeed = 1.0;\n\n\t// Set to false to disable rotating\n\tthis.enableRotate = true;\n\tthis.rotateSpeed = 1.0;\n\n\t// Set to false to disable panning\n\tthis.enablePan = true;\n\tthis.panSpeed = 1.0;\n\tthis.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up\n\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\n\t// Set to true to automatically rotate around the target\n\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\tthis.autoRotate = false;\n\tthis.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n\t// Set to false to disable use of the keys\n\tthis.enableKeys = true;\n\n\t// The four arrow keys\n\tthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n\t// Mouse buttons\n\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n\t// Touch fingers\n\tthis.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };\n\n\t// for reset\n\tthis.target0 = this.target.clone();\n\tthis.position0 = this.object.position.clone();\n\tthis.zoom0 = this.object.zoom;\n\n\t//\n\t// public methods\n\t//\n\n\tthis.getPolarAngle = function () {\n\n\t\treturn spherical.phi;\n\n\t};\n\n\tthis.getAzimuthalAngle = function () {\n\n\t\treturn spherical.theta;\n\n\t};\n\n\tthis.saveState = function () {\n\n\t\tscope.target0.copy( scope.target );\n\t\tscope.position0.copy( scope.object.position );\n\t\tscope.zoom0 = scope.object.zoom;\n\n\t};\n\n\tthis.reset = function () {\n\n\t\tscope.target.copy( scope.target0 );\n\t\tscope.object.position.copy( scope.position0 );\n\t\tscope.object.zoom = scope.zoom0;\n\n\t\tscope.object.updateProjectionMatrix();\n\t\tscope.dispatchEvent( changeEvent );\n\n\t\tscope.update();\n\n\t\tstate = STATE.NONE;\n\n\t};\n\n\t// this method is exposed, but perhaps it would be better if we can make it private...\n\tthis.update = function () {\n\n\t\tvar offset = new Vector3();\n\n\t\t// so camera.up is the orbit axis\n\t\tvar quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );\n\t\tvar quatInverse = quat.clone().invert();\n\n\t\tvar lastPosition = new Vector3();\n\t\tvar lastQuaternion = new Quaternion();\n\n\t\tvar twoPI = 2 * Math.PI;\n\n\t\treturn function update() {\n\n\t\t\tvar position = scope.object.position;\n\n\t\t\toffset.copy( position ).sub( scope.target );\n\n\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\toffset.applyQuaternion( quat );\n\n\t\t\t// angle from z-axis around y-axis\n\t\t\tspherical.setFromVector3( offset );\n\n\t\t\tif ( scope.autoRotate && state === STATE.NONE ) {\n\n\t\t\t\trotateLeft( getAutoRotationAngle() );\n\n\t\t\t}\n\n\t\t\tif ( scope.enableDamping ) {\n\n\t\t\t\tspherical.theta += sphericalDelta.theta * scope.dampingFactor;\n\t\t\t\tspherical.phi += sphericalDelta.phi * scope.dampingFactor;\n\n\t\t\t} else {\n\n\t\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\t\tspherical.phi += sphericalDelta.phi;\n\n\t\t\t}\n\n\t\t\t// restrict theta to be between desired limits\n\n\t\t\tvar min = scope.minAzimuthAngle;\n\t\t\tvar max = scope.maxAzimuthAngle;\n\n\t\t\tif ( isFinite( min ) && isFinite( max ) ) {\n\n\t\t\t\tif ( min < - Math.PI ) min += twoPI; else if ( min > Math.PI ) min -= twoPI;\n\n\t\t\t\tif ( max < - Math.PI ) max += twoPI; else if ( max > Math.PI ) max -= twoPI;\n\n\t\t\t\tif ( min <= max ) {\n\n\t\t\t\t\tspherical.theta = Math.max( min, Math.min( max, spherical.theta ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tspherical.theta = ( spherical.theta > ( min + max ) / 2 ) ?\n\t\t\t\t\t\tMath.max( min, spherical.theta ) :\n\t\t\t\t\t\tMath.min( max, spherical.theta );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// restrict phi to be between desired limits\n\t\t\tspherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\n\n\t\t\tspherical.makeSafe();\n\n\n\t\t\tspherical.radius *= scale;\n\n\t\t\t// restrict radius to be between desired limits\n\t\t\tspherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) );\n\n\t\t\t// move target to panned location\n\n\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\tscope.target.addScaledVector( panOffset, scope.dampingFactor );\n\n\t\t\t} else {\n\n\t\t\t\tscope.target.add( panOffset );\n\n\t\t\t}\n\n\t\t\toffset.setFromSpherical( spherical );\n\n\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\toffset.applyQuaternion( quatInverse );\n\n\t\t\tposition.copy( scope.target ).add( offset );\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\tsphericalDelta.theta *= ( 1 - scope.dampingFactor );\n\t\t\t\tsphericalDelta.phi *= ( 1 - scope.dampingFactor );\n\n\t\t\t\tpanOffset.multiplyScalar( 1 - scope.dampingFactor );\n\n\t\t\t} else {\n\n\t\t\t\tsphericalDelta.set( 0, 0, 0 );\n\n\t\t\t\tpanOffset.set( 0, 0, 0 );\n\n\t\t\t}\n\n\t\t\tscale = 1;\n\n\t\t\t// update condition is:\n\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\t\tif ( zoomChanged ||\n\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\tzoomChanged = false;\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t};\n\n\t}();\n\n\tthis.dispose = function () {\n\n\t\tscope.domElement.removeEventListener( 'contextmenu', onContextMenu, false );\n\n\t\tscope.domElement.removeEventListener( 'pointerdown', onPointerDown, false );\n\t\tscope.domElement.removeEventListener( 'wheel', onMouseWheel, false );\n\n\t\tscope.domElement.removeEventListener( 'touchstart', onTouchStart, false );\n\t\tscope.domElement.removeEventListener( 'touchend', onTouchEnd, false );\n\t\tscope.domElement.removeEventListener( 'touchmove', onTouchMove, false );\n\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove, false );\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp, false );\n\n\t\tscope.domElement.removeEventListener( 'keydown', onKeyDown, false );\n\n\t\t//scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n\n\t};\n\n\t//\n\t// internals\n\t//\n\n\tvar scope = this;\n\n\tvar changeEvent = { type: 'change' };\n\tvar startEvent = { type: 'start' };\n\tvar endEvent = { type: 'end' };\n\n\tvar STATE = {\n\t\tNONE: - 1,\n\t\tROTATE: 0,\n\t\tDOLLY: 1,\n\t\tPAN: 2,\n\t\tTOUCH_ROTATE: 3,\n\t\tTOUCH_PAN: 4,\n\t\tTOUCH_DOLLY_PAN: 5,\n\t\tTOUCH_DOLLY_ROTATE: 6\n\t};\n\n\tvar state = STATE.NONE;\n\n\tvar EPS = 0.000001;\n\n\t// current position in spherical coordinates\n\tvar spherical = new Spherical();\n\tvar sphericalDelta = new Spherical();\n\n\tvar scale = 1;\n\tvar panOffset = new Vector3();\n\tvar zoomChanged = false;\n\n\tvar rotateStart = new Vector2();\n\tvar rotateEnd = new Vector2();\n\tvar rotateDelta = new Vector2();\n\n\tvar panStart = new Vector2();\n\tvar panEnd = new Vector2();\n\tvar panDelta = new Vector2();\n\n\tvar dollyStart = new Vector2();\n\tvar dollyEnd = new Vector2();\n\tvar dollyDelta = new Vector2();\n\n\tfunction getAutoRotationAngle() {\n\n\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n\t}\n\n\tfunction getZoomScale() {\n\n\t\treturn Math.pow( 0.95, scope.zoomSpeed );\n\n\t}\n\n\tfunction rotateLeft( angle ) {\n\n\t\tsphericalDelta.theta -= angle;\n\n\t}\n\n\tfunction rotateUp( angle ) {\n\n\t\tsphericalDelta.phi -= angle;\n\n\t}\n\n\tvar panLeft = function () {\n\n\t\tvar v = new Vector3();\n\n\t\treturn function panLeft( distance, objectMatrix ) {\n\n\t\t\tv.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t\tv.multiplyScalar( - distance );\n\n\t\t\tpanOffset.add( v );\n\n\t\t};\n\n\t}();\n\n\tvar panUp = function () {\n\n\t\tvar v = new Vector3();\n\n\t\treturn function panUp( distance, objectMatrix ) {\n\n\t\t\tif ( scope.screenSpacePanning === true ) {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 1 );\n\n\t\t\t} else {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 );\n\t\t\t\tv.crossVectors( scope.object.up, v );\n\n\t\t\t}\n\n\t\t\tv.multiplyScalar( distance );\n\n\t\t\tpanOffset.add( v );\n\n\t\t};\n\n\t}();\n\n\t// deltaX and deltaY are in pixels; right and down are positive\n\tvar pan = function () {\n\n\t\tvar offset = new Vector3();\n\n\t\treturn function pan( deltaX, deltaY ) {\n\n\t\t\tvar element = scope.domElement;\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t// perspective\n\t\t\t\tvar position = scope.object.position;\n\t\t\t\toffset.copy( position ).sub( scope.target );\n\t\t\t\tvar targetDistance = offset.length();\n\n\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\ttargetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\t\tpanLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n\t\t\t\tpanUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t// orthographic\n\t\t\t\tpanLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );\n\t\t\t\tpanUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );\n\n\t\t\t} else {\n\n\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\t\tscope.enablePan = false;\n\n\t\t\t}\n\n\t\t};\n\n\t}();\n\n\tfunction dollyOut( dollyScale ) {\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscale /= dollyScale;\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) );\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tzoomChanged = true;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tscope.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\tfunction dollyIn( dollyScale ) {\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscale *= dollyScale;\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) );\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tzoomChanged = true;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tscope.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t//\n\t// event callbacks - update the object state\n\t//\n\n\tfunction handleMouseDownRotate( event ) {\n\n\t\trotateStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseDownDolly( event ) {\n\n\t\tdollyStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseDownPan( event ) {\n\n\t\tpanStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseMoveRotate( event ) {\n\n\t\trotateEnd.set( event.clientX, event.clientY );\n\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\tvar element = scope.domElement;\n\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\trotateStart.copy( rotateEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseMoveDolly( event ) {\n\n\t\tdollyEnd.set( event.clientX, event.clientY );\n\n\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\n\n\t\tif ( dollyDelta.y > 0 ) {\n\n\t\t\tdollyOut( getZoomScale() );\n\n\t\t} else if ( dollyDelta.y < 0 ) {\n\n\t\t\tdollyIn( getZoomScale() );\n\n\t\t}\n\n\t\tdollyStart.copy( dollyEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseMovePan( event ) {\n\n\t\tpanEnd.set( event.clientX, event.clientY );\n\n\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\tpan( panDelta.x, panDelta.y );\n\n\t\tpanStart.copy( panEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseUp( /*event*/ ) {\n\n\t\t// no-op\n\n\t}\n\n\tfunction handleMouseWheel( event ) {\n\n\t\tif ( event.deltaY < 0 ) {\n\n\t\t\tdollyIn( getZoomScale() );\n\n\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\tdollyOut( getZoomScale() );\n\n\t\t}\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleKeyDown( event ) {\n\n\t\tvar needsUpdate = false;\n\n\t\tswitch ( event.keyCode ) {\n\n\t\t\tcase scope.keys.UP:\n\t\t\t\tpan( 0, scope.keyPanSpeed );\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\tpan( 0, - scope.keyPanSpeed );\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.LEFT:\n\t\t\t\tpan( scope.keyPanSpeed, 0 );\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.RIGHT:\n\t\t\t\tpan( - scope.keyPanSpeed, 0 );\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\t// prevent the browser from scrolling on cursor keys\n\t\t\tevent.preventDefault();\n\n\t\t\tscope.update();\n\n\t\t}\n\n\n\t}\n\n\tfunction handleTouchStartRotate( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\trotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\trotateStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\tfunction handleTouchStartPan( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\tpanStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\tpanStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\tfunction handleTouchStartDolly( event ) {\n\n\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tdollyStart.set( 0, distance );\n\n\t}\n\n\tfunction handleTouchStartDollyPan( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchStartDolly( event );\n\n\t\tif ( scope.enablePan ) handleTouchStartPan( event );\n\n\t}\n\n\tfunction handleTouchStartDollyRotate( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchStartDolly( event );\n\n\t\tif ( scope.enableRotate ) handleTouchStartRotate( event );\n\n\t}\n\n\tfunction handleTouchMoveRotate( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\trotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\trotateEnd.set( x, y );\n\n\t\t}\n\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\tvar element = scope.domElement;\n\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\trotateStart.copy( rotateEnd );\n\n\t}\n\n\tfunction handleTouchMovePan( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\tpanEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\tpanEnd.set( x, y );\n\n\t\t}\n\n\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\tpan( panDelta.x, panDelta.y );\n\n\t\tpanStart.copy( panEnd );\n\n\t}\n\n\tfunction handleTouchMoveDolly( event ) {\n\n\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tdollyEnd.set( 0, distance );\n\n\t\tdollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );\n\n\t\tdollyOut( dollyDelta.y );\n\n\t\tdollyStart.copy( dollyEnd );\n\n\t}\n\n\tfunction handleTouchMoveDollyPan( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n\t\tif ( scope.enablePan ) handleTouchMovePan( event );\n\n\t}\n\n\tfunction handleTouchMoveDollyRotate( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n\t\tif ( scope.enableRotate ) handleTouchMoveRotate( event );\n\n\t}\n\n\tfunction handleTouchEnd( /*event*/ ) {\n\n\t\t// no-op\n\n\t}\n\n\t//\n\t// event handlers - FSM: listen for events and reset state\n\t//\n\n\tfunction onPointerDown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseDown( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onPointerMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseMove( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onPointerUp( event ) {\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseUp( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onMouseDown( event ) {\n\n\t\t// Prevent the browser from scrolling.\n\t\tevent.preventDefault();\n\n\t\t// Manually set the focus since calling preventDefault above\n\t\t// prevents the browser from setting it automatically.\n\n\t\tscope.domElement.focus ? scope.domElement.focus() : window.focus();\n\n\t\tvar mouseAction;\n\n\t\tswitch ( event.button ) {\n\n\t\t\tcase 0:\n\n\t\t\t\tmouseAction = scope.mouseButtons.LEFT;\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\n\t\t\t\tmouseAction = scope.mouseButtons.MIDDLE;\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\n\t\t\t\tmouseAction = scope.mouseButtons.RIGHT;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tmouseAction = - 1;\n\n\t\t}\n\n\t\tswitch ( mouseAction ) {\n\n\t\t\tcase MOUSE.DOLLY:\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseDownDolly( event );\n\n\t\t\t\tstate = STATE.DOLLY;\n\n\t\t\t\tbreak;\n\n\t\t\tcase MOUSE.ROTATE:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase MOUSE.PAN:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\n\t\t\tscope.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove, false );\n\t\t\tscope.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp, false );\n\n\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t}\n\n\t}\n\n\tfunction onMouseMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( state ) {\n\n\t\t\tcase STATE.ROTATE:\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleMouseMoveRotate( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.DOLLY:\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseMoveDolly( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.PAN:\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleMouseMovePan( event );\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction onMouseUp( event ) {\n\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove, false );\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp, false );\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\thandleMouseUp( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onMouseWheel( event ) {\n\n\t\tif ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t\thandleMouseWheel( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction onKeyDown( event ) {\n\n\t\tif ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return;\n\n\t\thandleKeyDown( event );\n\n\t}\n\n\tfunction onTouchStart( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault(); // prevent scrolling\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\n\n\t\t\t\tswitch ( scope.touches.ONE ) {\n\n\t\t\t\t\tcase TOUCH.ROTATE:\n\n\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleTouchStartRotate( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TOUCH.PAN:\n\n\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleTouchStartPan( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_PAN;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\n\t\t\t\tswitch ( scope.touches.TWO ) {\n\n\t\t\t\t\tcase TOUCH.DOLLY_PAN:\n\n\t\t\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleTouchStartDollyPan( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TOUCH.DOLLY_ROTATE:\n\n\t\t\t\t\t\tif ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleTouchStartDollyRotate( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_ROTATE;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\n\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t}\n\n\t}\n\n\tfunction onTouchMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault(); // prevent scrolling\n\t\tevent.stopPropagation();\n\n\t\tswitch ( state ) {\n\n\t\t\tcase STATE.TOUCH_ROTATE:\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleTouchMoveRotate( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.TOUCH_PAN:\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleTouchMovePan( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.TOUCH_DOLLY_PAN:\n\n\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\thandleTouchMoveDollyPan( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.TOUCH_DOLLY_ROTATE:\n\n\t\t\t\tif ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n\t\t\t\thandleTouchMoveDollyRotate( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t}\n\n\tfunction onTouchEnd( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\thandleTouchEnd( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onContextMenu( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t}\n\n\t//\n\n\tscope.domElement.addEventListener( 'contextmenu', onContextMenu, false );\n\n\tscope.domElement.addEventListener( 'pointerdown', onPointerDown, false );\n\tscope.domElement.addEventListener( 'wheel', onMouseWheel, false );\n\n\tscope.domElement.addEventListener( 'touchstart', onTouchStart, false );\n\tscope.domElement.addEventListener( 'touchend', onTouchEnd, false );\n\tscope.domElement.addEventListener( 'touchmove', onTouchMove, false );\n\n\tscope.domElement.addEventListener( 'keydown', onKeyDown, false );\n\n\t// force an update at start\n\n\tthis.update();\n\n};\n\nOrbitControls.prototype = Object.create( EventDispatcher.prototype );\nOrbitControls.prototype.constructor = OrbitControls;\n\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n// This is very similar to OrbitControls, another set of touch behavior\n//\n// Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - left mouse, or arrow keys / touch: one-finger move\n\nvar MapControls = function ( object, domElement ) {\n\n\tOrbitControls.call( this, object, domElement );\n\n\tthis.screenSpacePanning = false; // pan orthogonal to world-space direction camera.up\n\n\tthis.mouseButtons.LEFT = MOUSE.PAN;\n\tthis.mouseButtons.RIGHT = MOUSE.ROTATE;\n\n\tthis.touches.ONE = TOUCH.PAN;\n\tthis.touches.TWO = TOUCH.DOLLY_ROTATE;\n\n};\n\nMapControls.prototype = Object.create( EventDispatcher.prototype );\nMapControls.prototype.constructor = MapControls;\n\nexport { OrbitControls, MapControls };\n","import {\n\tEventDispatcher,\n\tQuaternion,\n\tVector3\n} from \"../../../build/three.module.js\";\n\nvar FlyControls = function ( object, domElement ) {\n\n\tif ( domElement === undefined ) {\n\n\t\tconsole.warn( 'THREE.FlyControls: The second parameter \"domElement\" is now mandatory.' );\n\t\tdomElement = document;\n\n\t}\n\n\tthis.object = object;\n\tthis.domElement = domElement;\n\n\tif ( domElement ) this.domElement.setAttribute( 'tabindex', - 1 );\n\n\t// API\n\n\tthis.movementSpeed = 1.0;\n\tthis.rollSpeed = 0.005;\n\n\tthis.dragToLook = false;\n\tthis.autoForward = false;\n\n\t// disable default target object behavior\n\n\t// internals\n\n\tvar scope = this;\n\tvar changeEvent = { type: \"change\" };\n\tvar EPS = 0.000001;\n\n\tthis.tmpQuaternion = new Quaternion();\n\n\tthis.mouseStatus = 0;\n\n\tthis.moveState = { up: 0, down: 0, left: 0, right: 0, forward: 0, back: 0, pitchUp: 0, pitchDown: 0, yawLeft: 0, yawRight: 0, rollLeft: 0, rollRight: 0 };\n\tthis.moveVector = new Vector3( 0, 0, 0 );\n\tthis.rotationVector = new Vector3( 0, 0, 0 );\n\n\tthis.keydown = function ( event ) {\n\n\t\tif ( event.altKey ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t//event.preventDefault();\n\n\t\tswitch ( event.keyCode ) {\n\n\t\t\tcase 16: /* shift */ this.movementSpeedMultiplier = .1; break;\n\n\t\t\tcase 87: /*W*/ this.moveState.forward = 1; break;\n\t\t\tcase 83: /*S*/ this.moveState.back = 1; break;\n\n\t\t\tcase 65: /*A*/ this.moveState.left = 1; break;\n\t\t\tcase 68: /*D*/ this.moveState.right = 1; break;\n\n\t\t\tcase 82: /*R*/ this.moveState.up = 1; break;\n\t\t\tcase 70: /*F*/ this.moveState.down = 1; break;\n\n\t\t\tcase 38: /*up*/ this.moveState.pitchUp = 1; break;\n\t\t\tcase 40: /*down*/ this.moveState.pitchDown = 1; break;\n\n\t\t\tcase 37: /*left*/ this.moveState.yawLeft = 1; break;\n\t\t\tcase 39: /*right*/ this.moveState.yawRight = 1; break;\n\n\t\t\tcase 81: /*Q*/ this.moveState.rollLeft = 1; break;\n\t\t\tcase 69: /*E*/ this.moveState.rollRight = 1; break;\n\n\t\t}\n\n\t\tthis.updateMovementVector();\n\t\tthis.updateRotationVector();\n\n\t};\n\n\tthis.keyup = function ( event ) {\n\n\t\tswitch ( event.keyCode ) {\n\n\t\t\tcase 16: /* shift */ this.movementSpeedMultiplier = 1; break;\n\n\t\t\tcase 87: /*W*/ this.moveState.forward = 0; break;\n\t\t\tcase 83: /*S*/ this.moveState.back = 0; break;\n\n\t\t\tcase 65: /*A*/ this.moveState.left = 0; break;\n\t\t\tcase 68: /*D*/ this.moveState.right = 0; break;\n\n\t\t\tcase 82: /*R*/ this.moveState.up = 0; break;\n\t\t\tcase 70: /*F*/ this.moveState.down = 0; break;\n\n\t\t\tcase 38: /*up*/ this.moveState.pitchUp = 0; break;\n\t\t\tcase 40: /*down*/ this.moveState.pitchDown = 0; break;\n\n\t\t\tcase 37: /*left*/ this.moveState.yawLeft = 0; break;\n\t\t\tcase 39: /*right*/ this.moveState.yawRight = 0; break;\n\n\t\t\tcase 81: /*Q*/ this.moveState.rollLeft = 0; break;\n\t\t\tcase 69: /*E*/ this.moveState.rollRight = 0; break;\n\n\t\t}\n\n\t\tthis.updateMovementVector();\n\t\tthis.updateRotationVector();\n\n\t};\n\n\tthis.mousedown = function ( event ) {\n\n\t\tif ( this.domElement !== document ) {\n\n\t\t\tthis.domElement.focus();\n\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tif ( this.dragToLook ) {\n\n\t\t\tthis.mouseStatus ++;\n\n\t\t} else {\n\n\t\t\tswitch ( event.button ) {\n\n\t\t\t\tcase 0: this.moveState.forward = 1; break;\n\t\t\t\tcase 2: this.moveState.back = 1; break;\n\n\t\t\t}\n\n\t\t\tthis.updateMovementVector();\n\n\t\t}\n\n\t};\n\n\tthis.mousemove = function ( event ) {\n\n\t\tif ( ! this.dragToLook || this.mouseStatus > 0 ) {\n\n\t\t\tvar container = this.getContainerDimensions();\n\t\t\tvar halfWidth = container.size[ 0 ] / 2;\n\t\t\tvar halfHeight = container.size[ 1 ] / 2;\n\n\t\t\tthis.moveState.yawLeft = - ( ( event.pageX - container.offset[ 0 ] ) - halfWidth ) / halfWidth;\n\t\t\tthis.moveState.pitchDown = ( ( event.pageY - container.offset[ 1 ] ) - halfHeight ) / halfHeight;\n\n\t\t\tthis.updateRotationVector();\n\n\t\t}\n\n\t};\n\n\tthis.mouseup = function ( event ) {\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tif ( this.dragToLook ) {\n\n\t\t\tthis.mouseStatus --;\n\n\t\t\tthis.moveState.yawLeft = this.moveState.pitchDown = 0;\n\n\t\t} else {\n\n\t\t\tswitch ( event.button ) {\n\n\t\t\t\tcase 0: this.moveState.forward = 0; break;\n\t\t\t\tcase 2: this.moveState.back = 0; break;\n\n\t\t\t}\n\n\t\t\tthis.updateMovementVector();\n\n\t\t}\n\n\t\tthis.updateRotationVector();\n\n\t};\n\n\tthis.update = function () {\n\n\t\tvar lastQuaternion = new Quaternion();\n\t\tvar lastPosition = new Vector3();\n\n\t\treturn function ( delta ) {\n\n\t\t\tvar moveMult = delta * scope.movementSpeed;\n\t\t\tvar rotMult = delta * scope.rollSpeed;\n\n\t\t\tscope.object.translateX( scope.moveVector.x * moveMult );\n\t\t\tscope.object.translateY( scope.moveVector.y * moveMult );\n\t\t\tscope.object.translateZ( scope.moveVector.z * moveMult );\n\n\t\t\tscope.tmpQuaternion.set( scope.rotationVector.x * rotMult, scope.rotationVector.y * rotMult, scope.rotationVector.z * rotMult, 1 ).normalize();\n\t\t\tscope.object.quaternion.multiply( scope.tmpQuaternion );\n\n\t\t\tif (\n\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS\n\t\t\t) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\tlastPosition.copy( scope.object.position );\n\n\t\t\t}\n\n\t\t};\n\n\t}();\n\n\tthis.updateMovementVector = function () {\n\n\t\tvar forward = ( this.moveState.forward || ( this.autoForward && ! this.moveState.back ) ) ? 1 : 0;\n\n\t\tthis.moveVector.x = ( - this.moveState.left + this.moveState.right );\n\t\tthis.moveVector.y = ( - this.moveState.down + this.moveState.up );\n\t\tthis.moveVector.z = ( - forward + this.moveState.back );\n\n\t\t//console.log( 'move:', [ this.moveVector.x, this.moveVector.y, this.moveVector.z ] );\n\n\t};\n\n\tthis.updateRotationVector = function () {\n\n\t\tthis.rotationVector.x = ( - this.moveState.pitchDown + this.moveState.pitchUp );\n\t\tthis.rotationVector.y = ( - this.moveState.yawRight + this.moveState.yawLeft );\n\t\tthis.rotationVector.z = ( - this.moveState.rollRight + this.moveState.rollLeft );\n\n\t\t//console.log( 'rotate:', [ this.rotationVector.x, this.rotationVector.y, this.rotationVector.z ] );\n\n\t};\n\n\tthis.getContainerDimensions = function () {\n\n\t\tif ( this.domElement != document ) {\n\n\t\t\treturn {\n\t\t\t\tsize: [ this.domElement.offsetWidth, this.domElement.offsetHeight ],\n\t\t\t\toffset: [ this.domElement.offsetLeft, this.domElement.offsetTop ]\n\t\t\t};\n\n\t\t} else {\n\n\t\t\treturn {\n\t\t\t\tsize: [ window.innerWidth, window.innerHeight ],\n\t\t\t\toffset: [ 0, 0 ]\n\t\t\t};\n\n\t\t}\n\n\t};\n\n\tfunction bind( scope, fn ) {\n\n\t\treturn function () {\n\n\t\t\tfn.apply( scope, arguments );\n\n\t\t};\n\n\t}\n\n\tfunction contextmenu( event ) {\n\n\t\tevent.preventDefault();\n\n\t}\n\n\tthis.dispose = function () {\n\n\t\tthis.domElement.removeEventListener( 'contextmenu', contextmenu, false );\n\t\tthis.domElement.removeEventListener( 'mousedown', _mousedown, false );\n\t\tthis.domElement.removeEventListener( 'mousemove', _mousemove, false );\n\t\tthis.domElement.removeEventListener( 'mouseup', _mouseup, false );\n\n\t\twindow.removeEventListener( 'keydown', _keydown, false );\n\t\twindow.removeEventListener( 'keyup', _keyup, false );\n\n\t};\n\n\tvar _mousemove = bind( this, this.mousemove );\n\tvar _mousedown = bind( this, this.mousedown );\n\tvar _mouseup = bind( this, this.mouseup );\n\tvar _keydown = bind( this, this.keydown );\n\tvar _keyup = bind( this, this.keyup );\n\n\tthis.domElement.addEventListener( 'contextmenu', contextmenu, false );\n\n\tthis.domElement.addEventListener( 'mousemove', _mousemove, false );\n\tthis.domElement.addEventListener( 'mousedown', _mousedown, false );\n\tthis.domElement.addEventListener( 'mouseup', _mouseup, false );\n\n\twindow.addEventListener( 'keydown', _keydown, false );\n\twindow.addEventListener( 'keyup', _keyup, false );\n\n\tthis.updateMovementVector();\n\tthis.updateRotationVector();\n\n};\n\nFlyControls.prototype = Object.create( EventDispatcher.prototype );\nFlyControls.prototype.constructor = FlyControls;\n\nexport { FlyControls };\n","/**\n * Full-screen textured quad shader\n */\n\nvar CopyShader = {\n\n\tuniforms: {\n\n\t\t\"tDiffuse\": { value: null },\n\t\t\"opacity\": { value: 1.0 }\n\n\t},\n\n\tvertexShader: [\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"void main() {\",\n\n\t\t\"\tvUv = uv;\",\n\t\t\"\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\",\n\n\t\t\"}\"\n\n\t].join( \"\\n\" ),\n\n\tfragmentShader: [\n\n\t\t\"uniform float opacity;\",\n\n\t\t\"uniform sampler2D tDiffuse;\",\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"void main() {\",\n\n\t\t\"\tvec4 texel = texture2D( tDiffuse, vUv );\",\n\t\t\"\tgl_FragColor = opacity * texel;\",\n\n\t\t\"}\"\n\n\t].join( \"\\n\" )\n\n};\n\nexport { CopyShader };\n","import {\n\tOrthographicCamera,\n\tPlaneBufferGeometry,\n\tMesh\n} from \"../../../build/three.module.js\";\n\nfunction Pass() {\n\n\t// if set to true, the pass is processed by the composer\n\tthis.enabled = true;\n\n\t// if set to true, the pass indicates to swap read and write buffer after rendering\n\tthis.needsSwap = true;\n\n\t// if set to true, the pass clears its buffer before rendering\n\tthis.clear = false;\n\n\t// if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.\n\tthis.renderToScreen = false;\n\n}\n\nObject.assign( Pass.prototype, {\n\n\tsetSize: function ( /* width, height */ ) {},\n\n\trender: function ( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\tconsole.error( 'THREE.Pass: .render() must be implemented in derived pass.' );\n\n\t}\n\n} );\n\n// Helper for passes that need to fill the viewport with a single quad.\n\n// Important: It's actually a hack to put FullScreenQuad into the Pass namespace. This is only\n// done to make examples/js code work. Normally, FullScreenQuad should be exported\n// from this module like Pass.\n\nPass.FullScreenQuad = ( function () {\n\n\tvar camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\tvar geometry = new PlaneBufferGeometry( 2, 2 );\n\n\tvar FullScreenQuad = function ( material ) {\n\n\t\tthis._mesh = new Mesh( geometry, material );\n\n\t};\n\n\tObject.defineProperty( FullScreenQuad.prototype, 'material', {\n\n\t\tget: function () {\n\n\t\t\treturn this._mesh.material;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._mesh.material = value;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( FullScreenQuad.prototype, {\n\n\t\tdispose: function () {\n\n\t\t\tthis._mesh.geometry.dispose();\n\n\t\t},\n\n\t\trender: function ( renderer ) {\n\n\t\t\trenderer.render( this._mesh, camera );\n\n\t\t}\n\n\t} );\n\n\treturn FullScreenQuad;\n\n} )();\n\nexport { Pass };\n","import {\n\tShaderMaterial,\n\tUniformsUtils\n} from \"../../../build/three.module.js\";\nimport { Pass } from \"../postprocessing/Pass.js\";\n\nvar ShaderPass = function ( shader, textureID ) {\n\n\tPass.call( this );\n\n\tthis.textureID = ( textureID !== undefined ) ? textureID : \"tDiffuse\";\n\n\tif ( shader instanceof ShaderMaterial ) {\n\n\t\tthis.uniforms = shader.uniforms;\n\n\t\tthis.material = shader;\n\n\t} else if ( shader ) {\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tthis.material = new ShaderMaterial( {\n\n\t\t\tdefines: Object.assign( {}, shader.defines ),\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader\n\n\t\t} );\n\n\t}\n\n\tthis.fsQuad = new Pass.FullScreenQuad( this.material );\n\n};\n\nShaderPass.prototype = Object.assign( Object.create( Pass.prototype ), {\n\n\tconstructor: ShaderPass,\n\n\trender: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tif ( this.uniforms[ this.textureID ] ) {\n\n\t\t\tthis.uniforms[ this.textureID ].value = readBuffer.texture;\n\n\t\t}\n\n\t\tthis.fsQuad.material = this.material;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\t// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n\t\t\tif ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n} );\n\nexport { ShaderPass };\n","import { Pass } from \"../postprocessing/Pass.js\";\n\nvar MaskPass = function ( scene, camera ) {\n\n\tPass.call( this );\n\n\tthis.scene = scene;\n\tthis.camera = camera;\n\n\tthis.clear = true;\n\tthis.needsSwap = false;\n\n\tthis.inverse = false;\n\n};\n\nMaskPass.prototype = Object.assign( Object.create( Pass.prototype ), {\n\n\tconstructor: MaskPass,\n\n\trender: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tvar context = renderer.getContext();\n\t\tvar state = renderer.state;\n\n\t\t// don't update color or depth\n\n\t\tstate.buffers.color.setMask( false );\n\t\tstate.buffers.depth.setMask( false );\n\n\t\t// lock buffers\n\n\t\tstate.buffers.color.setLocked( true );\n\t\tstate.buffers.depth.setLocked( true );\n\n\t\t// set up stencil\n\n\t\tvar writeValue, clearValue;\n\n\t\tif ( this.inverse ) {\n\n\t\t\twriteValue = 0;\n\t\t\tclearValue = 1;\n\n\t\t} else {\n\n\t\t\twriteValue = 1;\n\t\t\tclearValue = 0;\n\n\t\t}\n\n\t\tstate.buffers.stencil.setTest( true );\n\t\tstate.buffers.stencil.setOp( context.REPLACE, context.REPLACE, context.REPLACE );\n\t\tstate.buffers.stencil.setFunc( context.ALWAYS, writeValue, 0xffffffff );\n\t\tstate.buffers.stencil.setClear( clearValue );\n\t\tstate.buffers.stencil.setLocked( true );\n\n\t\t// draw into the stencil buffer\n\n\t\trenderer.setRenderTarget( readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\trenderer.setRenderTarget( writeBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\t// unlock color and depth buffer for subsequent rendering\n\n\t\tstate.buffers.color.setLocked( false );\n\t\tstate.buffers.depth.setLocked( false );\n\n\t\t// only render where stencil is set to 1\n\n\t\tstate.buffers.stencil.setLocked( false );\n\t\tstate.buffers.stencil.setFunc( context.EQUAL, 1, 0xffffffff ); // draw if == 1\n\t\tstate.buffers.stencil.setOp( context.KEEP, context.KEEP, context.KEEP );\n\t\tstate.buffers.stencil.setLocked( true );\n\n\t}\n\n} );\n\n\nvar ClearMaskPass = function () {\n\n\tPass.call( this );\n\n\tthis.needsSwap = false;\n\n};\n\nClearMaskPass.prototype = Object.create( Pass.prototype );\n\nObject.assign( ClearMaskPass.prototype, {\n\n\trender: function ( renderer /*, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\trenderer.state.buffers.stencil.setLocked( false );\n\t\trenderer.state.buffers.stencil.setTest( false );\n\n\t}\n\n} );\n\nexport { MaskPass, ClearMaskPass };\n","import {\n\tClock,\n\tLinearFilter,\n\tMesh,\n\tOrthographicCamera,\n\tPlaneBufferGeometry,\n\tRGBAFormat,\n\tVector2,\n\tWebGLRenderTarget\n} from \"../../../build/three.module.js\";\nimport { CopyShader } from \"../shaders/CopyShader.js\";\nimport { ShaderPass } from \"../postprocessing/ShaderPass.js\";\nimport { MaskPass } from \"../postprocessing/MaskPass.js\";\nimport { ClearMaskPass } from \"../postprocessing/MaskPass.js\";\n\nvar EffectComposer = function ( renderer, renderTarget ) {\n\n\tthis.renderer = renderer;\n\n\tif ( renderTarget === undefined ) {\n\n\t\tvar parameters = {\n\t\t\tminFilter: LinearFilter,\n\t\t\tmagFilter: LinearFilter,\n\t\t\tformat: RGBAFormat\n\t\t};\n\n\t\tvar size = renderer.getSize( new Vector2() );\n\t\tthis._pixelRatio = renderer.getPixelRatio();\n\t\tthis._width = size.width;\n\t\tthis._height = size.height;\n\n\t\trenderTarget = new WebGLRenderTarget( this._width * this._pixelRatio, this._height * this._pixelRatio, parameters );\n\t\trenderTarget.texture.name = 'EffectComposer.rt1';\n\n\t} else {\n\n\t\tthis._pixelRatio = 1;\n\t\tthis._width = renderTarget.width;\n\t\tthis._height = renderTarget.height;\n\n\t}\n\n\tthis.renderTarget1 = renderTarget;\n\tthis.renderTarget2 = renderTarget.clone();\n\tthis.renderTarget2.texture.name = 'EffectComposer.rt2';\n\n\tthis.writeBuffer = this.renderTarget1;\n\tthis.readBuffer = this.renderTarget2;\n\n\tthis.renderToScreen = true;\n\n\tthis.passes = [];\n\n\t// dependencies\n\n\tif ( CopyShader === undefined ) {\n\n\t\tconsole.error( 'THREE.EffectComposer relies on CopyShader' );\n\n\t}\n\n\tif ( ShaderPass === undefined ) {\n\n\t\tconsole.error( 'THREE.EffectComposer relies on ShaderPass' );\n\n\t}\n\n\tthis.copyPass = new ShaderPass( CopyShader );\n\n\tthis.clock = new Clock();\n\n};\n\nObject.assign( EffectComposer.prototype, {\n\n\tswapBuffers: function () {\n\n\t\tvar tmp = this.readBuffer;\n\t\tthis.readBuffer = this.writeBuffer;\n\t\tthis.writeBuffer = tmp;\n\n\t},\n\n\taddPass: function ( pass ) {\n\n\t\tthis.passes.push( pass );\n\t\tpass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t},\n\n\tinsertPass: function ( pass, index ) {\n\n\t\tthis.passes.splice( index, 0, pass );\n\t\tpass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t},\n\n\tremovePass: function ( pass ) {\n\n\t\tconst index = this.passes.indexOf( pass );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tthis.passes.splice( index, 1 );\n\n\t\t}\n\n\t},\n\n\tisLastEnabledPass: function ( passIndex ) {\n\n\t\tfor ( var i = passIndex + 1; i < this.passes.length; i ++ ) {\n\n\t\t\tif ( this.passes[ i ].enabled ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\trender: function ( deltaTime ) {\n\n\t\t// deltaTime value is in seconds\n\n\t\tif ( deltaTime === undefined ) {\n\n\t\t\tdeltaTime = this.clock.getDelta();\n\n\t\t}\n\n\t\tvar currentRenderTarget = this.renderer.getRenderTarget();\n\n\t\tvar maskActive = false;\n\n\t\tvar pass, i, il = this.passes.length;\n\n\t\tfor ( i = 0; i < il; i ++ ) {\n\n\t\t\tpass = this.passes[ i ];\n\n\t\t\tif ( pass.enabled === false ) continue;\n\n\t\t\tpass.renderToScreen = ( this.renderToScreen && this.isLastEnabledPass( i ) );\n\t\t\tpass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive );\n\n\t\t\tif ( pass.needsSwap ) {\n\n\t\t\t\tif ( maskActive ) {\n\n\t\t\t\t\tvar context = this.renderer.getContext();\n\t\t\t\t\tvar stencil = this.renderer.state.buffers.stencil;\n\n\t\t\t\t\t//context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );\n\t\t\t\t\tstencil.setFunc( context.NOTEQUAL, 1, 0xffffffff );\n\n\t\t\t\t\tthis.copyPass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime );\n\n\t\t\t\t\t//context.stencilFunc( context.EQUAL, 1, 0xffffffff );\n\t\t\t\t\tstencil.setFunc( context.EQUAL, 1, 0xffffffff );\n\n\t\t\t\t}\n\n\t\t\t\tthis.swapBuffers();\n\n\t\t\t}\n\n\t\t\tif ( MaskPass !== undefined ) {\n\n\t\t\t\tif ( pass instanceof MaskPass ) {\n\n\t\t\t\t\tmaskActive = true;\n\n\t\t\t\t} else if ( pass instanceof ClearMaskPass ) {\n\n\t\t\t\t\tmaskActive = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.renderer.setRenderTarget( currentRenderTarget );\n\n\t},\n\n\treset: function ( renderTarget ) {\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\tvar size = this.renderer.getSize( new Vector2() );\n\t\t\tthis._pixelRatio = this.renderer.getPixelRatio();\n\t\t\tthis._width = size.width;\n\t\t\tthis._height = size.height;\n\n\t\t\trenderTarget = this.renderTarget1.clone();\n\t\t\trenderTarget.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t\t}\n\n\t\tthis.renderTarget1.dispose();\n\t\tthis.renderTarget2.dispose();\n\t\tthis.renderTarget1 = renderTarget;\n\t\tthis.renderTarget2 = renderTarget.clone();\n\n\t\tthis.writeBuffer = this.renderTarget1;\n\t\tthis.readBuffer = this.renderTarget2;\n\n\t},\n\n\tsetSize: function ( width, height ) {\n\n\t\tthis._width = width;\n\t\tthis._height = height;\n\n\t\tvar effectiveWidth = this._width * this._pixelRatio;\n\t\tvar effectiveHeight = this._height * this._pixelRatio;\n\n\t\tthis.renderTarget1.setSize( effectiveWidth, effectiveHeight );\n\t\tthis.renderTarget2.setSize( effectiveWidth, effectiveHeight );\n\n\t\tfor ( var i = 0; i < this.passes.length; i ++ ) {\n\n\t\t\tthis.passes[ i ].setSize( effectiveWidth, effectiveHeight );\n\n\t\t}\n\n\t},\n\n\tsetPixelRatio: function ( pixelRatio ) {\n\n\t\tthis._pixelRatio = pixelRatio;\n\n\t\tthis.setSize( this._width, this._height );\n\n\t}\n\n} );\n\n\nvar Pass = function () {\n\n\t// if set to true, the pass is processed by the composer\n\tthis.enabled = true;\n\n\t// if set to true, the pass indicates to swap read and write buffer after rendering\n\tthis.needsSwap = true;\n\n\t// if set to true, the pass clears its buffer before rendering\n\tthis.clear = false;\n\n\t// if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.\n\tthis.renderToScreen = false;\n\n};\n\nObject.assign( Pass.prototype, {\n\n\tsetSize: function ( /* width, height */ ) {},\n\n\trender: function ( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\tconsole.error( 'THREE.Pass: .render() must be implemented in derived pass.' );\n\n\t}\n\n} );\n\n// Helper for passes that need to fill the viewport with a single quad.\nPass.FullScreenQuad = ( function () {\n\n\tvar camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\tvar geometry = new PlaneBufferGeometry( 2, 2 );\n\n\tvar FullScreenQuad = function ( material ) {\n\n\t\tthis._mesh = new Mesh( geometry, material );\n\n\t};\n\n\tObject.defineProperty( FullScreenQuad.prototype, 'material', {\n\n\t\tget: function () {\n\n\t\t\treturn this._mesh.material;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._mesh.material = value;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( FullScreenQuad.prototype, {\n\n\t\tdispose: function () {\n\n\t\t\tthis._mesh.geometry.dispose();\n\n\t\t},\n\n\t\trender: function ( renderer ) {\n\n\t\t\trenderer.render( this._mesh, camera );\n\n\t\t}\n\n\t} );\n\n\treturn FullScreenQuad;\n\n} )();\n\nexport { EffectComposer, Pass };\n","import { Pass } from \"../postprocessing/Pass.js\";\n\nvar RenderPass = function ( scene, camera, overrideMaterial, clearColor, clearAlpha ) {\n\n\tPass.call( this );\n\n\tthis.scene = scene;\n\tthis.camera = camera;\n\n\tthis.overrideMaterial = overrideMaterial;\n\n\tthis.clearColor = clearColor;\n\tthis.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0;\n\n\tthis.clear = true;\n\tthis.clearDepth = false;\n\tthis.needsSwap = false;\n\n};\n\nRenderPass.prototype = Object.assign( Object.create( Pass.prototype ), {\n\n\tconstructor: RenderPass,\n\n\trender: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tvar oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tvar oldClearColor, oldClearAlpha, oldOverrideMaterial;\n\n\t\tif ( this.overrideMaterial !== undefined ) {\n\n\t\t\toldOverrideMaterial = this.scene.overrideMaterial;\n\n\t\t\tthis.scene.overrideMaterial = this.overrideMaterial;\n\n\t\t}\n\n\t\tif ( this.clearColor ) {\n\n\t\t\toldClearColor = renderer.getClearColor().getHex();\n\t\t\toldClearAlpha = renderer.getClearAlpha();\n\n\t\t\trenderer.setClearColor( this.clearColor, this.clearAlpha );\n\n\t\t}\n\n\t\tif ( this.clearDepth ) {\n\n\t\t\trenderer.clearDepth();\n\n\t\t}\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\n\t\t// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n\t\tif ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\t\trenderer.render( this.scene, this.camera );\n\n\t\tif ( this.clearColor ) {\n\n\t\t\trenderer.setClearColor( oldClearColor, oldClearAlpha );\n\n\t\t}\n\n\t\tif ( this.overrideMaterial !== undefined ) {\n\n\t\t\tthis.scene.overrideMaterial = oldOverrideMaterial;\n\n\t\t}\n\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n} );\n\nexport { RenderPass };\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport _wrapNativeSuper from '@babel/runtime/helpers/esm/wrapNativeSuper';\nimport _taggedTemplateLiteralLoose from '@babel/runtime/helpers/esm/taggedTemplateLiteralLoose';\n\nfunction last() {\n var _ref;\n\n return _ref = arguments.length - 1, _ref < 0 || arguments.length <= _ref ? undefined : arguments[_ref];\n}\n\nfunction negation(a) {\n return -a;\n}\n\nfunction addition(a, b) {\n return a + b;\n}\n\nfunction subtraction(a, b) {\n return a - b;\n}\n\nfunction multiplication(a, b) {\n return a * b;\n}\n\nfunction division(a, b) {\n return a / b;\n}\n\nfunction max() {\n return Math.max.apply(Math, arguments);\n}\n\nfunction min() {\n return Math.min.apply(Math, arguments);\n}\n\nfunction comma() {\n return Array.of.apply(Array, arguments);\n}\n\nvar defaultSymbols = {\n symbols: {\n '*': {\n infix: {\n symbol: '*',\n f: multiplication,\n notation: 'infix',\n precedence: 4,\n rightToLeft: 0,\n argCount: 2\n },\n symbol: '*',\n regSymbol: '\\\\*'\n },\n '/': {\n infix: {\n symbol: '/',\n f: division,\n notation: 'infix',\n precedence: 4,\n rightToLeft: 0,\n argCount: 2\n },\n symbol: '/',\n regSymbol: '/'\n },\n '+': {\n infix: {\n symbol: '+',\n f: addition,\n notation: 'infix',\n precedence: 2,\n rightToLeft: 0,\n argCount: 2\n },\n prefix: {\n symbol: '+',\n f: last,\n notation: 'prefix',\n precedence: 3,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: '+',\n regSymbol: '\\\\+'\n },\n '-': {\n infix: {\n symbol: '-',\n f: subtraction,\n notation: 'infix',\n precedence: 2,\n rightToLeft: 0,\n argCount: 2\n },\n prefix: {\n symbol: '-',\n f: negation,\n notation: 'prefix',\n precedence: 3,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: '-',\n regSymbol: '-'\n },\n ',': {\n infix: {\n symbol: ',',\n f: comma,\n notation: 'infix',\n precedence: 1,\n rightToLeft: 0,\n argCount: 2\n },\n symbol: ',',\n regSymbol: ','\n },\n '(': {\n prefix: {\n symbol: '(',\n f: last,\n notation: 'prefix',\n precedence: 0,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: '(',\n regSymbol: '\\\\('\n },\n ')': {\n postfix: {\n symbol: ')',\n f: undefined,\n notation: 'postfix',\n precedence: 0,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: ')',\n regSymbol: '\\\\)'\n },\n min: {\n func: {\n symbol: 'min',\n f: min,\n notation: 'func',\n precedence: 0,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: 'min',\n regSymbol: 'min\\\\b'\n },\n max: {\n func: {\n symbol: 'max',\n f: max,\n notation: 'func',\n precedence: 0,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: 'max',\n regSymbol: 'max\\\\b'\n }\n }\n};\n\n// based on https://github.com/styled-components/styled-components/blob/fcf6f3804c57a14dd7984dfab7bc06ee2edca044/src/utils/error.js\n\n/**\n * Parse errors.md and turn it into a simple hash of code: message\n * @private\n */\nvar ERRORS = {\n \"1\": \"Passed invalid arguments to hsl, please pass multiple numbers e.g. hsl(360, 0.75, 0.4) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75 }).\\n\\n\",\n \"2\": \"Passed invalid arguments to hsla, please pass multiple numbers e.g. hsla(360, 0.75, 0.4, 0.7) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75, alpha: 0.7 }).\\n\\n\",\n \"3\": \"Passed an incorrect argument to a color function, please pass a string representation of a color.\\n\\n\",\n \"4\": \"Couldn't generate valid rgb string from %s, it returned %s.\\n\\n\",\n \"5\": \"Couldn't parse the color string. Please provide the color as a string in hex, rgb, rgba, hsl or hsla notation.\\n\\n\",\n \"6\": \"Passed invalid arguments to rgb, please pass multiple numbers e.g. rgb(255, 205, 100) or an object e.g. rgb({ red: 255, green: 205, blue: 100 }).\\n\\n\",\n \"7\": \"Passed invalid arguments to rgba, please pass multiple numbers e.g. rgb(255, 205, 100, 0.75) or an object e.g. rgb({ red: 255, green: 205, blue: 100, alpha: 0.75 }).\\n\\n\",\n \"8\": \"Passed invalid argument to toColorString, please pass a RgbColor, RgbaColor, HslColor or HslaColor object.\\n\\n\",\n \"9\": \"Please provide a number of steps to the modularScale helper.\\n\\n\",\n \"10\": \"Please pass a number or one of the predefined scales to the modularScale helper as the ratio.\\n\\n\",\n \"11\": \"Invalid value passed as base to modularScale, expected number or em string but got \\\"%s\\\"\\n\\n\",\n \"12\": \"Expected a string ending in \\\"px\\\" or a number passed as the first argument to %s(), got \\\"%s\\\" instead.\\n\\n\",\n \"13\": \"Expected a string ending in \\\"px\\\" or a number passed as the second argument to %s(), got \\\"%s\\\" instead.\\n\\n\",\n \"14\": \"Passed invalid pixel value (\\\"%s\\\") to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n \"15\": \"Passed invalid base value (\\\"%s\\\") to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n \"16\": \"You must provide a template to this method.\\n\\n\",\n \"17\": \"You passed an unsupported selector state to this method.\\n\\n\",\n \"18\": \"minScreen and maxScreen must be provided as stringified numbers with the same units.\\n\\n\",\n \"19\": \"fromSize and toSize must be provided as stringified numbers with the same units.\\n\\n\",\n \"20\": \"expects either an array of objects or a single object with the properties prop, fromSize, and toSize.\\n\\n\",\n \"21\": \"expects the objects in the first argument array to have the properties `prop`, `fromSize`, and `toSize`.\\n\\n\",\n \"22\": \"expects the first argument object to have the properties `prop`, `fromSize`, and `toSize`.\\n\\n\",\n \"23\": \"fontFace expects a name of a font-family.\\n\\n\",\n \"24\": \"fontFace expects either the path to the font file(s) or a name of a local copy.\\n\\n\",\n \"25\": \"fontFace expects localFonts to be an array.\\n\\n\",\n \"26\": \"fontFace expects fileFormats to be an array.\\n\\n\",\n \"27\": \"radialGradient requries at least 2 color-stops to properly render.\\n\\n\",\n \"28\": \"Please supply a filename to retinaImage() as the first argument.\\n\\n\",\n \"29\": \"Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.\\n\\n\",\n \"30\": \"Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\\n\\n\",\n \"31\": \"The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation\\n\\n\",\n \"32\": \"To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])\\nTo pass a single animation please supply them in simple values, e.g. animation('rotate', '2s')\\n\\n\",\n \"33\": \"The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation\\n\\n\",\n \"34\": \"borderRadius expects a radius value as a string or number as the second argument.\\n\\n\",\n \"35\": \"borderRadius expects one of \\\"top\\\", \\\"bottom\\\", \\\"left\\\" or \\\"right\\\" as the first argument.\\n\\n\",\n \"36\": \"Property must be a string value.\\n\\n\",\n \"37\": \"Syntax Error at %s.\\n\\n\",\n \"38\": \"Formula contains a function that needs parentheses at %s.\\n\\n\",\n \"39\": \"Formula is missing closing parenthesis at %s.\\n\\n\",\n \"40\": \"Formula has too many closing parentheses at %s.\\n\\n\",\n \"41\": \"All values in a formula must have the same unit or be unitless.\\n\\n\",\n \"42\": \"Please provide a number of steps to the modularScale helper.\\n\\n\",\n \"43\": \"Please pass a number or one of the predefined scales to the modularScale helper as the ratio.\\n\\n\",\n \"44\": \"Invalid value passed as base to modularScale, expected number or em/rem string but got %s.\\n\\n\",\n \"45\": \"Passed invalid argument to hslToColorString, please pass a HslColor or HslaColor object.\\n\\n\",\n \"46\": \"Passed invalid argument to rgbToColorString, please pass a RgbColor or RgbaColor object.\\n\\n\",\n \"47\": \"minScreen and maxScreen must be provided as stringified numbers with the same units.\\n\\n\",\n \"48\": \"fromSize and toSize must be provided as stringified numbers with the same units.\\n\\n\",\n \"49\": \"Expects either an array of objects or a single object with the properties prop, fromSize, and toSize.\\n\\n\",\n \"50\": \"Expects the objects in the first argument array to have the properties prop, fromSize, and toSize.\\n\\n\",\n \"51\": \"Expects the first argument object to have the properties prop, fromSize, and toSize.\\n\\n\",\n \"52\": \"fontFace expects either the path to the font file(s) or a name of a local copy.\\n\\n\",\n \"53\": \"fontFace expects localFonts to be an array.\\n\\n\",\n \"54\": \"fontFace expects fileFormats to be an array.\\n\\n\",\n \"55\": \"fontFace expects a name of a font-family.\\n\\n\",\n \"56\": \"linearGradient requries at least 2 color-stops to properly render.\\n\\n\",\n \"57\": \"radialGradient requries at least 2 color-stops to properly render.\\n\\n\",\n \"58\": \"Please supply a filename to retinaImage() as the first argument.\\n\\n\",\n \"59\": \"Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.\\n\\n\",\n \"60\": \"Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\\n\\n\",\n \"61\": \"Property must be a string value.\\n\\n\",\n \"62\": \"borderRadius expects a radius value as a string or number as the second argument.\\n\\n\",\n \"63\": \"borderRadius expects one of \\\"top\\\", \\\"bottom\\\", \\\"left\\\" or \\\"right\\\" as the first argument.\\n\\n\",\n \"64\": \"The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation.\\n\\n\",\n \"65\": \"To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])\\\\nTo pass a single animation please supply them in simple values, e.g. animation('rotate', '2s').\\n\\n\",\n \"66\": \"The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation.\\n\\n\",\n \"67\": \"You must provide a template to this method.\\n\\n\",\n \"68\": \"You passed an unsupported selector state to this method.\\n\\n\",\n \"69\": \"Expected a string ending in \\\"px\\\" or a number passed as the first argument to %s(), got %s instead.\\n\\n\",\n \"70\": \"Expected a string ending in \\\"px\\\" or a number passed as the second argument to %s(), got %s instead.\\n\\n\",\n \"71\": \"Passed invalid pixel value %s to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n \"72\": \"Passed invalid base value %s to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n \"73\": \"Please provide a valid CSS variable.\\n\\n\",\n \"74\": \"CSS variable not found and no default was provided.\\n\\n\",\n \"75\": \"important requires a valid style object, got a %s instead.\\n\\n\",\n \"76\": \"fromSize and toSize must be provided as stringified numbers with the same units as minScreen and maxScreen.\\n\\n\",\n \"77\": \"remToPx expects a value in \\\"rem\\\" but you provided it in \\\"%s\\\".\\n\\n\",\n \"78\": \"base must be set in \\\"px\\\" or \\\"%\\\" but you set it in \\\"%s\\\".\\n\"\n};\n/**\n * super basic version of sprintf\n * @private\n */\n\nfunction format() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var a = args[0];\n var b = [];\n var c;\n\n for (c = 1; c < args.length; c += 1) {\n b.push(args[c]);\n }\n\n b.forEach(function (d) {\n a = a.replace(/%[a-z]/, d);\n });\n return a;\n}\n/**\n * Create an error file out of errors.md for development and a simple web link to the full errors\n * in production mode.\n * @private\n */\n\n\nvar PolishedError = /*#__PURE__*/function (_Error) {\n _inheritsLoose(PolishedError, _Error);\n\n function PolishedError(code) {\n var _this;\n\n if (process.env.NODE_ENV === 'production') {\n _this = _Error.call(this, \"An error occurred. See https://github.com/styled-components/polished/blob/main/src/internalHelpers/errors.md#\" + code + \" for more information.\") || this;\n } else {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n _this = _Error.call(this, format.apply(void 0, [ERRORS[code]].concat(args))) || this;\n }\n\n return _assertThisInitialized(_this);\n }\n\n return PolishedError;\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n\nvar unitRegExp = /((?!\\w)a|na|hc|mc|dg|me[r]?|xe|ni(?![a-zA-Z])|mm|cp|tp|xp|q(?!s)|hv|xamv|nimv|wv|sm|s(?!\\D|$)|ged|darg?|nrut)/g; // Merges additional math functionality into the defaults.\n\nfunction mergeSymbolMaps(additionalSymbols) {\n var symbolMap = {};\n symbolMap.symbols = additionalSymbols ? _extends({}, defaultSymbols.symbols, additionalSymbols.symbols) : _extends({}, defaultSymbols.symbols);\n return symbolMap;\n}\n\nfunction exec(operators, values) {\n var _ref;\n\n var op = operators.pop();\n values.push(op.f.apply(op, (_ref = []).concat.apply(_ref, values.splice(-op.argCount))));\n return op.precedence;\n}\n\nfunction calculate(expression, additionalSymbols) {\n var symbolMap = mergeSymbolMaps(additionalSymbols);\n var match;\n var operators = [symbolMap.symbols['('].prefix];\n var values = [];\n var pattern = new RegExp( // Pattern for numbers\n \"\\\\d+(?:\\\\.\\\\d+)?|\" + // ...and patterns for individual operators/function names\n Object.keys(symbolMap.symbols).map(function (key) {\n return symbolMap.symbols[key];\n }) // longer symbols should be listed first\n // $FlowFixMe\n .sort(function (a, b) {\n return b.symbol.length - a.symbol.length;\n }) // $FlowFixMe\n .map(function (val) {\n return val.regSymbol;\n }).join('|') + \"|(\\\\S)\", 'g');\n pattern.lastIndex = 0; // Reset regular expression object\n\n var afterValue = false;\n\n do {\n match = pattern.exec(expression);\n\n var _ref2 = match || [')', undefined],\n token = _ref2[0],\n bad = _ref2[1];\n\n var notNumber = symbolMap.symbols[token];\n var notNewValue = notNumber && !notNumber.prefix && !notNumber.func;\n var notAfterValue = !notNumber || !notNumber.postfix && !notNumber.infix; // Check for syntax errors:\n\n if (bad || (afterValue ? notAfterValue : notNewValue)) {\n throw new PolishedError(37, match ? match.index : expression.length, expression);\n }\n\n if (afterValue) {\n // We either have an infix or postfix operator (they should be mutually exclusive)\n var curr = notNumber.postfix || notNumber.infix;\n\n do {\n var prev = operators[operators.length - 1];\n if ((curr.precedence - prev.precedence || prev.rightToLeft) > 0) break; // Apply previous operator, since it has precedence over current one\n } while (exec(operators, values)); // Exit loop after executing an opening parenthesis or function\n\n\n afterValue = curr.notation === 'postfix';\n\n if (curr.symbol !== ')') {\n operators.push(curr); // Postfix always has precedence over any operator that follows after it\n\n if (afterValue) exec(operators, values);\n }\n } else if (notNumber) {\n // prefix operator or function\n operators.push(notNumber.prefix || notNumber.func);\n\n if (notNumber.func) {\n // Require an opening parenthesis\n match = pattern.exec(expression);\n\n if (!match || match[0] !== '(') {\n throw new PolishedError(38, match ? match.index : expression.length, expression);\n }\n }\n } else {\n // number\n values.push(+token);\n afterValue = true;\n }\n } while (match && operators.length);\n\n if (operators.length) {\n throw new PolishedError(39, match ? match.index : expression.length, expression);\n } else if (match) {\n throw new PolishedError(40, match ? match.index : expression.length, expression);\n } else {\n return values.pop();\n }\n}\n\nfunction reverseString(str) {\n return str.split('').reverse().join('');\n}\n/**\n * Helper for doing math with CSS Units. Accepts a formula as a string. All values in the formula must have the same unit (or be unitless). Supports complex formulas utliziing addition, subtraction, multiplication, division, square root, powers, factorial, min, max, as well as parentheses for order of operation.\n *\n *In cases where you need to do calculations with mixed units where one unit is a [relative length unit](https://developer.mozilla.org/en-US/docs/Web/CSS/length#Relative_length_units), you will want to use [CSS Calc](https://developer.mozilla.org/en-US/docs/Web/CSS/calc).\n *\n * *warning* While we've done everything possible to ensure math safely evalutes formulas expressed as strings, you should always use extreme caution when passing `math` user provided values.\n * @example\n * // Styles as object usage\n * const styles = {\n * fontSize: math('12rem + 8rem'),\n * fontSize: math('(12px + 2px) * 3'),\n * fontSize: math('3px^2 + sqrt(4)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * fontSize: ${math('12rem + 8rem')};\n * fontSize: ${math('(12px + 2px) * 3')};\n * fontSize: ${math('3px^2 + sqrt(4)')};\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * fontSize: '20rem',\n * fontSize: '42px',\n * fontSize: '11px',\n * }\n */\n\n\nfunction math(formula, additionalSymbols) {\n var reversedFormula = reverseString(formula);\n var formulaMatch = reversedFormula.match(unitRegExp); // Check that all units are the same\n\n if (formulaMatch && !formulaMatch.every(function (unit) {\n return unit === formulaMatch[0];\n })) {\n throw new PolishedError(41);\n }\n\n var cleanFormula = reverseString(reversedFormula.replace(unitRegExp, ''));\n return \"\" + calculate(cleanFormula, additionalSymbols) + (formulaMatch ? reverseString(formulaMatch[0]) : '');\n}\n\nvar cssVariableRegex = /--[\\S]*/g;\n/**\n * Fetches the value of a passed CSS Variable in the :root scope, or otherwise returns a defaultValue if provided.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'background': cssVar('--background-color'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${cssVar('--background-color')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'background': 'red'\n * }\n */\n\nfunction cssVar(cssVariable, defaultValue) {\n if (!cssVariable || !cssVariable.match(cssVariableRegex)) {\n throw new PolishedError(73);\n }\n\n var variableValue;\n /* eslint-disable */\n\n /* istanbul ignore next */\n\n if (typeof document !== 'undefined' && document.documentElement !== null) {\n variableValue = getComputedStyle(document.documentElement).getPropertyValue(cssVariable);\n }\n /* eslint-enable */\n\n\n if (variableValue) {\n return variableValue.trim();\n } else if (defaultValue) {\n return defaultValue;\n }\n\n throw new PolishedError(74);\n}\n\n// @private\nfunction capitalizeString(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nvar positionMap$1 = ['Top', 'Right', 'Bottom', 'Left'];\n\nfunction generateProperty(property, position) {\n if (!property) return position.toLowerCase();\n var splitProperty = property.split('-');\n\n if (splitProperty.length > 1) {\n splitProperty.splice(1, 0, position);\n return splitProperty.reduce(function (acc, val) {\n return \"\" + acc + capitalizeString(val);\n });\n }\n\n var joinedProperty = property.replace(/([a-z])([A-Z])/g, \"$1\" + position + \"$2\");\n return property === joinedProperty ? \"\" + property + position : joinedProperty;\n}\n\nfunction generateStyles(property, valuesWithDefaults) {\n var styles = {};\n\n for (var i = 0; i < valuesWithDefaults.length; i += 1) {\n if (valuesWithDefaults[i] || valuesWithDefaults[i] === 0) {\n styles[generateProperty(property, positionMap$1[i])] = valuesWithDefaults[i];\n }\n }\n\n return styles;\n}\n/**\n * Enables shorthand for direction-based properties. It accepts a property (hyphenated or camelCased) and up to four values that map to top, right, bottom, and left, respectively. You can optionally pass an empty string to get only the directional values as properties. You can also optionally pass a null argument for a directional value to ignore it.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...directionalProperty('padding', '12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${directionalProperty('padding', '12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'paddingTop': '12px',\n * 'paddingRight': '24px',\n * 'paddingBottom': '36px',\n * 'paddingLeft': '48px'\n * }\n */\n\n\nfunction directionalProperty(property) {\n for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n values[_key - 1] = arguments[_key];\n }\n\n // prettier-ignore\n var firstValue = values[0],\n _values$ = values[1],\n secondValue = _values$ === void 0 ? firstValue : _values$,\n _values$2 = values[2],\n thirdValue = _values$2 === void 0 ? firstValue : _values$2,\n _values$3 = values[3],\n fourthValue = _values$3 === void 0 ? secondValue : _values$3;\n var valuesWithDefaults = [firstValue, secondValue, thirdValue, fourthValue];\n return generateStyles(property, valuesWithDefaults);\n}\n\n/**\n * Check if a string ends with something\n * @private\n */\nfunction endsWith(string, suffix) {\n return string.substr(-suffix.length) === suffix;\n}\n\nvar cssRegex$1 = /^([+-]?(?:\\d+|\\d*\\.\\d+))([a-z]*|%)$/;\n/**\n * Returns a given CSS value minus its unit of measure.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * '--dimension': stripUnit('100px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * --dimension: ${stripUnit('100px')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * '--dimension': 100\n * }\n */\n\nfunction stripUnit(value) {\n if (typeof value !== 'string') return value;\n var matchedValue = value.match(cssRegex$1);\n return matchedValue ? parseFloat(value) : value;\n}\n\n/**\n * Factory function that creates pixel-to-x converters\n * @private\n */\n\nvar pxtoFactory = function pxtoFactory(to) {\n return function (pxval, base) {\n if (base === void 0) {\n base = '16px';\n }\n\n var newPxval = pxval;\n var newBase = base;\n\n if (typeof pxval === 'string') {\n if (!endsWith(pxval, 'px')) {\n throw new PolishedError(69, to, pxval);\n }\n\n newPxval = stripUnit(pxval);\n }\n\n if (typeof base === 'string') {\n if (!endsWith(base, 'px')) {\n throw new PolishedError(70, to, base);\n }\n\n newBase = stripUnit(base);\n }\n\n if (typeof newPxval === 'string') {\n throw new PolishedError(71, pxval, to);\n }\n\n if (typeof newBase === 'string') {\n throw new PolishedError(72, base, to);\n }\n\n return \"\" + newPxval / newBase + to;\n };\n};\n\n/**\n * Convert pixel value to ems. The default base value is 16px, but can be changed by passing a\n * second argument to the function.\n * @function\n * @param {string|number} pxval\n * @param {string|number} [base='16px']\n * @example\n * // Styles as object usage\n * const styles = {\n * 'height': em('16px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * height: ${em('16px')}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'height': '1em'\n * }\n */\n\nvar em = /*#__PURE__*/pxtoFactory('em');\n\nvar cssRegex = /^([+-]?(?:\\d+|\\d*\\.\\d+))([a-z]*|%)$/;\n/**\n * Returns a given CSS value and its unit as elements of an array.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * '--dimension': getValueAndUnit('100px')[0],\n * '--unit': getValueAndUnit('100px')[1],\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * --dimension: ${getValueAndUnit('100px')[0]};\n * --unit: ${getValueAndUnit('100px')[1]};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * '--dimension': 100,\n * '--unit': 'px',\n * }\n */\n\nfunction getValueAndUnit(value) {\n if (typeof value !== 'string') return [value, ''];\n var matchedValue = value.match(cssRegex);\n if (matchedValue) return [parseFloat(value), matchedValue[2]];\n return [value, undefined];\n}\n\n/**\n * Helper for targeting rules in a style block generated by polished modules that need !important-level specificity. Can optionally specify a rule (or rules) to target specific rules.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...important(cover())\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${important(cover())}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * 'position': 'absolute !important',\n * 'top': '0 !important',\n * 'right: '0 !important',\n * 'bottom': '0 !important',\n * 'left: '0 !important'\n * }\n */\n\nfunction important(styleBlock, rules) {\n if (typeof styleBlock !== 'object' || styleBlock === null) {\n throw new PolishedError(75, typeof styleBlock);\n }\n\n var newStyleBlock = {};\n Object.keys(styleBlock).forEach(function (key) {\n if (typeof styleBlock[key] === 'object' && styleBlock[key] !== null) {\n newStyleBlock[key] = important(styleBlock[key], rules);\n } else if (!rules || rules && (rules === key || rules.indexOf(key) >= 0)) {\n newStyleBlock[key] = styleBlock[key] + \" !important\";\n } else {\n newStyleBlock[key] = styleBlock[key];\n }\n });\n return newStyleBlock;\n}\n\nvar ratioNames = {\n minorSecond: 1.067,\n majorSecond: 1.125,\n minorThird: 1.2,\n majorThird: 1.25,\n perfectFourth: 1.333,\n augFourth: 1.414,\n perfectFifth: 1.5,\n minorSixth: 1.6,\n goldenSection: 1.618,\n majorSixth: 1.667,\n minorSeventh: 1.778,\n majorSeventh: 1.875,\n octave: 2,\n majorTenth: 2.5,\n majorEleventh: 2.667,\n majorTwelfth: 3,\n doubleOctave: 4\n};\n\nfunction getRatio(ratioName) {\n return ratioNames[ratioName];\n}\n/**\n * Establish consistent measurements and spacial relationships throughout your projects by incrementing an em or rem value up or down a defined scale. We provide a list of commonly used scales as pre-defined variables.\n * @example\n * // Styles as object usage\n * const styles = {\n * // Increment two steps up the default scale\n * 'fontSize': modularScale(2)\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * // Increment two steps up the default scale\n * fontSize: ${modularScale(2)}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'fontSize': '1.77689em'\n * }\n */\n\n\nfunction modularScale(steps, base, ratio) {\n if (base === void 0) {\n base = '1em';\n }\n\n if (ratio === void 0) {\n ratio = 1.333;\n }\n\n if (typeof steps !== 'number') {\n throw new PolishedError(42);\n }\n\n if (typeof ratio === 'string' && !ratioNames[ratio]) {\n throw new PolishedError(43);\n }\n\n var _ref = typeof base === 'string' ? getValueAndUnit(base) : [base, ''],\n realBase = _ref[0],\n unit = _ref[1];\n\n var realRatio = typeof ratio === 'string' ? getRatio(ratio) : ratio;\n\n if (typeof realBase === 'string') {\n throw new PolishedError(44, base);\n }\n\n return \"\" + realBase * Math.pow(realRatio, steps) + (unit || '');\n}\n\n/**\n * Convert pixel value to rems. The default base value is 16px, but can be changed by passing a\n * second argument to the function.\n * @function\n * @param {string|number} pxval\n * @param {string|number} [base='16px']\n * @example\n * // Styles as object usage\n * const styles = {\n * 'height': rem('16px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * height: ${rem('16px')}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'height': '1rem'\n * }\n */\n\nvar rem = /*#__PURE__*/pxtoFactory('rem');\n\nvar defaultFontSize = 16;\n\nfunction convertBase(base) {\n var deconstructedValue = getValueAndUnit(base);\n\n if (deconstructedValue[1] === 'px') {\n return parseFloat(base);\n }\n\n if (deconstructedValue[1] === '%') {\n return parseFloat(base) / 100 * defaultFontSize;\n }\n\n throw new PolishedError(78, deconstructedValue[1]);\n}\n\nfunction getBaseFromDoc() {\n /* eslint-disable */\n\n /* istanbul ignore next */\n if (typeof document !== 'undefined' && document.documentElement !== null) {\n var rootFontSize = getComputedStyle(document.documentElement).fontSize;\n return rootFontSize ? convertBase(rootFontSize) : defaultFontSize;\n }\n /* eslint-enable */\n\n /* istanbul ignore next */\n\n\n return defaultFontSize;\n}\n/**\n * Convert rem values to px. By default, the base value is pulled from the font-size property on the root element (if it is set in % or px). It defaults to 16px if not found on the root. You can also override the base value by providing your own base in % or px.\n * @example\n * // Styles as object usage\n * const styles = {\n * 'height': remToPx('1.6rem')\n * 'height': remToPx('1.6rem', '10px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * height: ${remToPx('1.6rem')}\n * height: ${remToPx('1.6rem', '10px')}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'height': '25.6px',\n * 'height': '16px',\n * }\n */\n\n\nfunction remToPx(value, base) {\n var deconstructedValue = getValueAndUnit(value);\n\n if (deconstructedValue[1] !== 'rem' && deconstructedValue[1] !== '') {\n throw new PolishedError(77, deconstructedValue[1]);\n }\n\n var newBase = base ? convertBase(base) : getBaseFromDoc();\n return deconstructedValue[0] * newBase + \"px\";\n}\n\nvar functionsMap$3 = {\n back: 'cubic-bezier(0.600, -0.280, 0.735, 0.045)',\n circ: 'cubic-bezier(0.600, 0.040, 0.980, 0.335)',\n cubic: 'cubic-bezier(0.550, 0.055, 0.675, 0.190)',\n expo: 'cubic-bezier(0.950, 0.050, 0.795, 0.035)',\n quad: 'cubic-bezier(0.550, 0.085, 0.680, 0.530)',\n quart: 'cubic-bezier(0.895, 0.030, 0.685, 0.220)',\n quint: 'cubic-bezier(0.755, 0.050, 0.855, 0.060)',\n sine: 'cubic-bezier(0.470, 0.000, 0.745, 0.715)'\n};\n/**\n * String to represent common easing functions as demonstrated here: (github.com/jaukia/easie).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'transitionTimingFunction': easeIn('quad')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * transitionTimingFunction: ${easeIn('quad')};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'transitionTimingFunction': 'cubic-bezier(0.550, 0.085, 0.680, 0.530)',\n * }\n */\n\nfunction easeIn(functionName) {\n return functionsMap$3[functionName.toLowerCase().trim()];\n}\n\nvar functionsMap$2 = {\n back: 'cubic-bezier(0.680, -0.550, 0.265, 1.550)',\n circ: 'cubic-bezier(0.785, 0.135, 0.150, 0.860)',\n cubic: 'cubic-bezier(0.645, 0.045, 0.355, 1.000)',\n expo: 'cubic-bezier(1.000, 0.000, 0.000, 1.000)',\n quad: 'cubic-bezier(0.455, 0.030, 0.515, 0.955)',\n quart: 'cubic-bezier(0.770, 0.000, 0.175, 1.000)',\n quint: 'cubic-bezier(0.860, 0.000, 0.070, 1.000)',\n sine: 'cubic-bezier(0.445, 0.050, 0.550, 0.950)'\n};\n/**\n * String to represent common easing functions as demonstrated here: (github.com/jaukia/easie).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'transitionTimingFunction': easeInOut('quad')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * transitionTimingFunction: ${easeInOut('quad')};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'transitionTimingFunction': 'cubic-bezier(0.455, 0.030, 0.515, 0.955)',\n * }\n */\n\nfunction easeInOut(functionName) {\n return functionsMap$2[functionName.toLowerCase().trim()];\n}\n\nvar functionsMap$1 = {\n back: 'cubic-bezier(0.175, 0.885, 0.320, 1.275)',\n cubic: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)',\n circ: 'cubic-bezier(0.075, 0.820, 0.165, 1.000)',\n expo: 'cubic-bezier(0.190, 1.000, 0.220, 1.000)',\n quad: 'cubic-bezier(0.250, 0.460, 0.450, 0.940)',\n quart: 'cubic-bezier(0.165, 0.840, 0.440, 1.000)',\n quint: 'cubic-bezier(0.230, 1.000, 0.320, 1.000)',\n sine: 'cubic-bezier(0.390, 0.575, 0.565, 1.000)'\n};\n/**\n * String to represent common easing functions as demonstrated here: (github.com/jaukia/easie).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'transitionTimingFunction': easeOut('quad')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * transitionTimingFunction: ${easeOut('quad')};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'transitionTimingFunction': 'cubic-bezier(0.250, 0.460, 0.450, 0.940)',\n * }\n */\n\nfunction easeOut(functionName) {\n return functionsMap$1[functionName.toLowerCase().trim()];\n}\n\n/**\n * Returns a CSS calc formula for linear interpolation of a property between two values. Accepts optional minScreen (defaults to '320px') and maxScreen (defaults to '1200px').\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * fontSize: between('20px', '100px', '400px', '1000px'),\n * fontSize: between('20px', '100px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * fontSize: ${between('20px', '100px', '400px', '1000px')};\n * fontSize: ${between('20px', '100px')}\n * `\n *\n * // CSS as JS Output\n *\n * h1: {\n * 'fontSize': 'calc(-33.33333333333334px + 13.333333333333334vw)',\n * 'fontSize': 'calc(-9.090909090909093px + 9.090909090909092vw)'\n * }\n */\n\nfunction between(fromSize, toSize, minScreen, maxScreen) {\n if (minScreen === void 0) {\n minScreen = '320px';\n }\n\n if (maxScreen === void 0) {\n maxScreen = '1200px';\n }\n\n var _getValueAndUnit = getValueAndUnit(fromSize),\n unitlessFromSize = _getValueAndUnit[0],\n fromSizeUnit = _getValueAndUnit[1];\n\n var _getValueAndUnit2 = getValueAndUnit(toSize),\n unitlessToSize = _getValueAndUnit2[0],\n toSizeUnit = _getValueAndUnit2[1];\n\n var _getValueAndUnit3 = getValueAndUnit(minScreen),\n unitlessMinScreen = _getValueAndUnit3[0],\n minScreenUnit = _getValueAndUnit3[1];\n\n var _getValueAndUnit4 = getValueAndUnit(maxScreen),\n unitlessMaxScreen = _getValueAndUnit4[0],\n maxScreenUnit = _getValueAndUnit4[1];\n\n if (typeof unitlessMinScreen !== 'number' || typeof unitlessMaxScreen !== 'number' || !minScreenUnit || !maxScreenUnit || minScreenUnit !== maxScreenUnit) {\n throw new PolishedError(47);\n }\n\n if (typeof unitlessFromSize !== 'number' || typeof unitlessToSize !== 'number' || fromSizeUnit !== toSizeUnit) {\n throw new PolishedError(48);\n }\n\n if (fromSizeUnit !== minScreenUnit || toSizeUnit !== maxScreenUnit) {\n throw new PolishedError(76);\n }\n\n var slope = (unitlessFromSize - unitlessToSize) / (unitlessMinScreen - unitlessMaxScreen);\n var base = unitlessToSize - slope * unitlessMaxScreen;\n return \"calc(\" + base.toFixed(2) + (fromSizeUnit || '') + \" + \" + (100 * slope).toFixed(2) + \"vw)\";\n}\n\n/**\n * CSS to contain a float (credit to CSSMojo).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...clearFix(),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${clearFix()}\n * `\n *\n * // CSS as JS Output\n *\n * '&::after': {\n * 'clear': 'both',\n * 'content': '\"\"',\n * 'display': 'table'\n * }\n */\nfunction clearFix(parent) {\n var _ref;\n\n if (parent === void 0) {\n parent = '&';\n }\n\n var pseudoSelector = parent + \"::after\";\n return _ref = {}, _ref[pseudoSelector] = {\n clear: 'both',\n content: '\"\"',\n display: 'table'\n }, _ref;\n}\n\n/**\n * CSS to fully cover an area. Can optionally be passed an offset to act as a \"padding\".\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...cover()\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${cover()}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * 'position': 'absolute',\n * 'top': '0',\n * 'right: '0',\n * 'bottom': '0',\n * 'left: '0'\n * }\n */\nfunction cover(offset) {\n if (offset === void 0) {\n offset = 0;\n }\n\n return {\n position: 'absolute',\n top: offset,\n right: offset,\n bottom: offset,\n left: offset\n };\n}\n\n/**\n * CSS to represent truncated text with an ellipsis. You can optionally pass a max-width and number of lines before truncating.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...ellipsis('250px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${ellipsis('250px')}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * 'display': 'inline-block',\n * 'maxWidth': '250px',\n * 'overflow': 'hidden',\n * 'textOverflow': 'ellipsis',\n * 'whiteSpace': 'nowrap',\n * 'wordWrap': 'normal'\n * }\n */\nfunction ellipsis(width, lines) {\n if (lines === void 0) {\n lines = 1;\n }\n\n var styles = {\n display: 'inline-block',\n maxWidth: width || '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n wordWrap: 'normal'\n };\n return lines > 1 ? _extends({}, styles, {\n WebkitBoxOrient: 'vertical',\n WebkitLineClamp: lines,\n display: '-webkit-box',\n whiteSpace: 'normal'\n }) : styles;\n}\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/**\n * Returns a set of media queries that resizes a property (or set of properties) between a provided fromSize and toSize. Accepts optional minScreen (defaults to '320px') and maxScreen (defaults to '1200px') to constrain the interpolation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...fluidRange(\n * {\n * prop: 'padding',\n * fromSize: '20px',\n * toSize: '100px',\n * },\n * '400px',\n * '1000px',\n * )\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${fluidRange(\n * {\n * prop: 'padding',\n * fromSize: '20px',\n * toSize: '100px',\n * },\n * '400px',\n * '1000px',\n * )}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * \"@media (min-width: 1000px)\": Object {\n * \"padding\": \"100px\",\n * },\n * \"@media (min-width: 400px)\": Object {\n * \"padding\": \"calc(-33.33333333333334px + 13.333333333333334vw)\",\n * },\n * \"padding\": \"20px\",\n * }\n */\nfunction fluidRange(cssProp, minScreen, maxScreen) {\n if (minScreen === void 0) {\n minScreen = '320px';\n }\n\n if (maxScreen === void 0) {\n maxScreen = '1200px';\n }\n\n if (!Array.isArray(cssProp) && typeof cssProp !== 'object' || cssProp === null) {\n throw new PolishedError(49);\n }\n\n if (Array.isArray(cssProp)) {\n var mediaQueries = {};\n var fallbacks = {};\n\n for (var _iterator = _createForOfIteratorHelperLoose(cssProp), _step; !(_step = _iterator()).done;) {\n var _extends2, _extends3;\n\n var obj = _step.value;\n\n if (!obj.prop || !obj.fromSize || !obj.toSize) {\n throw new PolishedError(50);\n }\n\n fallbacks[obj.prop] = obj.fromSize;\n mediaQueries[\"@media (min-width: \" + minScreen + \")\"] = _extends({}, mediaQueries[\"@media (min-width: \" + minScreen + \")\"], (_extends2 = {}, _extends2[obj.prop] = between(obj.fromSize, obj.toSize, minScreen, maxScreen), _extends2));\n mediaQueries[\"@media (min-width: \" + maxScreen + \")\"] = _extends({}, mediaQueries[\"@media (min-width: \" + maxScreen + \")\"], (_extends3 = {}, _extends3[obj.prop] = obj.toSize, _extends3));\n }\n\n return _extends({}, fallbacks, mediaQueries);\n } else {\n var _ref, _ref2, _ref3;\n\n if (!cssProp.prop || !cssProp.fromSize || !cssProp.toSize) {\n throw new PolishedError(51);\n }\n\n return _ref3 = {}, _ref3[cssProp.prop] = cssProp.fromSize, _ref3[\"@media (min-width: \" + minScreen + \")\"] = (_ref = {}, _ref[cssProp.prop] = between(cssProp.fromSize, cssProp.toSize, minScreen, maxScreen), _ref), _ref3[\"@media (min-width: \" + maxScreen + \")\"] = (_ref2 = {}, _ref2[cssProp.prop] = cssProp.toSize, _ref2), _ref3;\n }\n}\n\nvar dataURIRegex = /^\\s*data:([a-z]+\\/[a-z-]+(;[a-z-]+=[a-z-]+)?)?(;charset=[a-z0-9-]+)?(;base64)?,[a-z0-9!$&',()*+,;=\\-._~:@/?%\\s]*\\s*$/i;\nvar formatHintMap = {\n woff: 'woff',\n woff2: 'woff2',\n ttf: 'truetype',\n otf: 'opentype',\n eot: 'embedded-opentype',\n svg: 'svg',\n svgz: 'svg'\n};\n\nfunction generateFormatHint(format, formatHint) {\n if (!formatHint) return '';\n return \" format(\\\"\" + formatHintMap[format] + \"\\\")\";\n}\n\nfunction isDataURI(fontFilePath) {\n return !!fontFilePath.replace(/\\s+/g, ' ').match(dataURIRegex);\n}\n\nfunction generateFileReferences(fontFilePath, fileFormats, formatHint) {\n if (isDataURI(fontFilePath)) {\n return \"url(\\\"\" + fontFilePath + \"\\\")\" + generateFormatHint(fileFormats[0], formatHint);\n }\n\n var fileFontReferences = fileFormats.map(function (format) {\n return \"url(\\\"\" + fontFilePath + \".\" + format + \"\\\")\" + generateFormatHint(format, formatHint);\n });\n return fileFontReferences.join(', ');\n}\n\nfunction generateLocalReferences(localFonts) {\n var localFontReferences = localFonts.map(function (font) {\n return \"local(\\\"\" + font + \"\\\")\";\n });\n return localFontReferences.join(', ');\n}\n\nfunction generateSources(fontFilePath, localFonts, fileFormats, formatHint) {\n var fontReferences = [];\n if (localFonts) fontReferences.push(generateLocalReferences(localFonts));\n\n if (fontFilePath) {\n fontReferences.push(generateFileReferences(fontFilePath, fileFormats, formatHint));\n }\n\n return fontReferences.join(', ');\n}\n/**\n * CSS for a @font-face declaration. Defaults to check for local copies of the font on the user's machine. You can disable this by passing `null` to localFonts.\n *\n * @example\n * // Styles as object basic usage\n * const styles = {\n * ...fontFace({\n * 'fontFamily': 'Sans-Pro',\n * 'fontFilePath': 'path/to/file'\n * })\n * }\n *\n * // styled-components basic usage\n * const GlobalStyle = createGlobalStyle`${\n * fontFace({\n * 'fontFamily': 'Sans-Pro',\n * 'fontFilePath': 'path/to/file'\n * }\n * )}`\n *\n * // CSS as JS Output\n *\n * '@font-face': {\n * 'fontFamily': 'Sans-Pro',\n * 'src': 'url(\"path/to/file.eot\"), url(\"path/to/file.woff2\"), url(\"path/to/file.woff\"), url(\"path/to/file.ttf\"), url(\"path/to/file.svg\")',\n * }\n */\n\n\nfunction fontFace(_ref) {\n var fontFamily = _ref.fontFamily,\n fontFilePath = _ref.fontFilePath,\n fontStretch = _ref.fontStretch,\n fontStyle = _ref.fontStyle,\n fontVariant = _ref.fontVariant,\n fontWeight = _ref.fontWeight,\n _ref$fileFormats = _ref.fileFormats,\n fileFormats = _ref$fileFormats === void 0 ? ['eot', 'woff2', 'woff', 'ttf', 'svg'] : _ref$fileFormats,\n _ref$formatHint = _ref.formatHint,\n formatHint = _ref$formatHint === void 0 ? false : _ref$formatHint,\n _ref$localFonts = _ref.localFonts,\n localFonts = _ref$localFonts === void 0 ? [fontFamily] : _ref$localFonts,\n unicodeRange = _ref.unicodeRange,\n fontDisplay = _ref.fontDisplay,\n fontVariationSettings = _ref.fontVariationSettings,\n fontFeatureSettings = _ref.fontFeatureSettings;\n // Error Handling\n if (!fontFamily) throw new PolishedError(55);\n\n if (!fontFilePath && !localFonts) {\n throw new PolishedError(52);\n }\n\n if (localFonts && !Array.isArray(localFonts)) {\n throw new PolishedError(53);\n }\n\n if (!Array.isArray(fileFormats)) {\n throw new PolishedError(54);\n }\n\n var fontFaceDeclaration = {\n '@font-face': {\n fontFamily: fontFamily,\n src: generateSources(fontFilePath, localFonts, fileFormats, formatHint),\n unicodeRange: unicodeRange,\n fontStretch: fontStretch,\n fontStyle: fontStyle,\n fontVariant: fontVariant,\n fontWeight: fontWeight,\n fontDisplay: fontDisplay,\n fontVariationSettings: fontVariationSettings,\n fontFeatureSettings: fontFeatureSettings\n }\n }; // Removes undefined fields for cleaner css object.\n\n return JSON.parse(JSON.stringify(fontFaceDeclaration));\n}\n\n/**\n * CSS to hide text to show a background image in a SEO-friendly way.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'backgroundImage': 'url(logo.png)',\n * ...hideText(),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * backgroundImage: url(logo.png);\n * ${hideText()};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'backgroundImage': 'url(logo.png)',\n * 'textIndent': '101%',\n * 'overflow': 'hidden',\n * 'whiteSpace': 'nowrap',\n * }\n */\nfunction hideText() {\n return {\n textIndent: '101%',\n overflow: 'hidden',\n whiteSpace: 'nowrap'\n };\n}\n\n/**\n * CSS to hide content visually but remain accessible to screen readers.\n * from [HTML5 Boilerplate](https://github.com/h5bp/html5-boilerplate/blob/9a176f57af1cfe8ec70300da4621fb9b07e5fa31/src/css/main.css#L121)\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...hideVisually(),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${hideVisually()};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'border': '0',\n * 'clip': 'rect(0 0 0 0)',\n * 'height': '1px',\n * 'margin': '-1px',\n * 'overflow': 'hidden',\n * 'padding': '0',\n * 'position': 'absolute',\n * 'whiteSpace': 'nowrap',\n * 'width': '1px',\n * }\n */\nfunction hideVisually() {\n return {\n border: '0',\n clip: 'rect(0 0 0 0)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n padding: '0',\n position: 'absolute',\n whiteSpace: 'nowrap',\n width: '1px'\n };\n}\n\n/**\n * Generates a media query to target HiDPI devices.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * [hiDPI(1.5)]: {\n * width: 200px;\n * }\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${hiDPI(1.5)} {\n * width: 200px;\n * }\n * `\n *\n * // CSS as JS Output\n *\n * '@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n * only screen and (min--moz-device-pixel-ratio: 1.5),\n * only screen and (-o-min-device-pixel-ratio: 1.5/1),\n * only screen and (min-resolution: 144dpi),\n * only screen and (min-resolution: 1.5dppx)': {\n * 'width': '200px',\n * }\n */\nfunction hiDPI(ratio) {\n if (ratio === void 0) {\n ratio = 1.3;\n }\n\n return \"\\n @media only screen and (-webkit-min-device-pixel-ratio: \" + ratio + \"),\\n only screen and (min--moz-device-pixel-ratio: \" + ratio + \"),\\n only screen and (-o-min-device-pixel-ratio: \" + ratio + \"/1),\\n only screen and (min-resolution: \" + Math.round(ratio * 96) + \"dpi),\\n only screen and (min-resolution: \" + ratio + \"dppx)\\n \";\n}\n\nfunction constructGradientValue(literals) {\n var template = '';\n\n for (var _len = arguments.length, substitutions = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n substitutions[_key - 1] = arguments[_key];\n }\n\n for (var i = 0; i < literals.length; i += 1) {\n template += literals[i];\n\n if (i === substitutions.length - 1 && substitutions[i]) {\n var definedValues = substitutions.filter(function (substitute) {\n return !!substitute;\n }); // Adds leading coma if properties preceed color-stops\n\n if (definedValues.length > 1) {\n template = template.slice(0, -1);\n template += \", \" + substitutions[i]; // No trailing space if color-stops is the only param provided\n } else if (definedValues.length === 1) {\n template += \"\" + substitutions[i];\n }\n } else if (substitutions[i]) {\n template += substitutions[i] + \" \";\n }\n }\n\n return template.trim();\n}\n\nvar _templateObject$1;\n\n/**\n * CSS for declaring a linear gradient, including a fallback background-color. The fallback is either the first color-stop or an explicitly passed fallback color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...linearGradient({\n colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n toDirection: 'to top right',\n fallback: '#FFF',\n })\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${linearGradient({\n colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n toDirection: 'to top right',\n fallback: '#FFF',\n })}\n *`\n *\n * // CSS as JS Output\n *\n * div: {\n * 'backgroundColor': '#FFF',\n * 'backgroundImage': 'linear-gradient(to top right, #00FFFF 0%, rgba(0, 0, 255, 0) 50%, #0000FF 95%)',\n * }\n */\nfunction linearGradient(_ref) {\n var colorStops = _ref.colorStops,\n fallback = _ref.fallback,\n _ref$toDirection = _ref.toDirection,\n toDirection = _ref$toDirection === void 0 ? '' : _ref$toDirection;\n\n if (!colorStops || colorStops.length < 2) {\n throw new PolishedError(56);\n }\n\n return {\n backgroundColor: fallback || colorStops[0].replace(/,\\s+/g, ',').split(' ')[0].replace(/,(?=\\S)/g, ', '),\n backgroundImage: constructGradientValue(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteralLoose([\"linear-gradient(\", \"\", \")\"])), toDirection, colorStops.join(', ').replace(/,(?=\\S)/g, ', '))\n };\n}\n\n/**\n * CSS to normalize abnormalities across browsers (normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css)\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...normalize(),\n * }\n *\n * // styled-components usage\n * const GlobalStyle = createGlobalStyle`${normalize()}`\n *\n * // CSS as JS Output\n *\n * html {\n * lineHeight: 1.15,\n * textSizeAdjust: 100%,\n * } ...\n */\nfunction normalize() {\n var _ref;\n\n return [(_ref = {\n html: {\n lineHeight: '1.15',\n textSizeAdjust: '100%'\n },\n body: {\n margin: '0'\n },\n main: {\n display: 'block'\n },\n h1: {\n fontSize: '2em',\n margin: '0.67em 0'\n },\n hr: {\n boxSizing: 'content-box',\n height: '0',\n overflow: 'visible'\n },\n pre: {\n fontFamily: 'monospace, monospace',\n fontSize: '1em'\n },\n a: {\n backgroundColor: 'transparent'\n },\n 'abbr[title]': {\n borderBottom: 'none',\n textDecoration: 'underline'\n }\n }, _ref[\"b,\\n strong\"] = {\n fontWeight: 'bolder'\n }, _ref[\"code,\\n kbd,\\n samp\"] = {\n fontFamily: 'monospace, monospace',\n fontSize: '1em'\n }, _ref.small = {\n fontSize: '80%'\n }, _ref[\"sub,\\n sup\"] = {\n fontSize: '75%',\n lineHeight: '0',\n position: 'relative',\n verticalAlign: 'baseline'\n }, _ref.sub = {\n bottom: '-0.25em'\n }, _ref.sup = {\n top: '-0.5em'\n }, _ref.img = {\n borderStyle: 'none'\n }, _ref[\"button,\\n input,\\n optgroup,\\n select,\\n textarea\"] = {\n fontFamily: 'inherit',\n fontSize: '100%',\n lineHeight: '1.15',\n margin: '0'\n }, _ref[\"button,\\n input\"] = {\n overflow: 'visible'\n }, _ref[\"button,\\n select\"] = {\n textTransform: 'none'\n }, _ref[\"button,\\n html [type=\\\"button\\\"],\\n [type=\\\"reset\\\"],\\n [type=\\\"submit\\\"]\"] = {\n WebkitAppearance: 'button'\n }, _ref[\"button::-moz-focus-inner,\\n [type=\\\"button\\\"]::-moz-focus-inner,\\n [type=\\\"reset\\\"]::-moz-focus-inner,\\n [type=\\\"submit\\\"]::-moz-focus-inner\"] = {\n borderStyle: 'none',\n padding: '0'\n }, _ref[\"button:-moz-focusring,\\n [type=\\\"button\\\"]:-moz-focusring,\\n [type=\\\"reset\\\"]:-moz-focusring,\\n [type=\\\"submit\\\"]:-moz-focusring\"] = {\n outline: '1px dotted ButtonText'\n }, _ref.fieldset = {\n padding: '0.35em 0.625em 0.75em'\n }, _ref.legend = {\n boxSizing: 'border-box',\n color: 'inherit',\n display: 'table',\n maxWidth: '100%',\n padding: '0',\n whiteSpace: 'normal'\n }, _ref.progress = {\n verticalAlign: 'baseline'\n }, _ref.textarea = {\n overflow: 'auto'\n }, _ref[\"[type=\\\"checkbox\\\"],\\n [type=\\\"radio\\\"]\"] = {\n boxSizing: 'border-box',\n padding: '0'\n }, _ref[\"[type=\\\"number\\\"]::-webkit-inner-spin-button,\\n [type=\\\"number\\\"]::-webkit-outer-spin-button\"] = {\n height: 'auto'\n }, _ref['[type=\"search\"]'] = {\n WebkitAppearance: 'textfield',\n outlineOffset: '-2px'\n }, _ref['[type=\"search\"]::-webkit-search-decoration'] = {\n WebkitAppearance: 'none'\n }, _ref['::-webkit-file-upload-button'] = {\n WebkitAppearance: 'button',\n font: 'inherit'\n }, _ref.details = {\n display: 'block'\n }, _ref.summary = {\n display: 'list-item'\n }, _ref.template = {\n display: 'none'\n }, _ref['[hidden]'] = {\n display: 'none'\n }, _ref), {\n 'abbr[title]': {\n textDecoration: 'underline dotted'\n }\n }];\n}\n\nvar _templateObject;\n\n/**\n * CSS for declaring a radial gradient, including a fallback background-color. The fallback is either the first color-stop or an explicitly passed fallback color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...radialGradient({\n * colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n * extent: 'farthest-corner at 45px 45px',\n * position: 'center',\n * shape: 'ellipse',\n * })\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${radialGradient({\n * colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n * extent: 'farthest-corner at 45px 45px',\n * position: 'center',\n * shape: 'ellipse',\n * })}\n *`\n *\n * // CSS as JS Output\n *\n * div: {\n * 'backgroundColor': '#00FFFF',\n * 'backgroundImage': 'radial-gradient(center ellipse farthest-corner at 45px 45px, #00FFFF 0%, rgba(0, 0, 255, 0) 50%, #0000FF 95%)',\n * }\n */\nfunction radialGradient(_ref) {\n var colorStops = _ref.colorStops,\n _ref$extent = _ref.extent,\n extent = _ref$extent === void 0 ? '' : _ref$extent,\n fallback = _ref.fallback,\n _ref$position = _ref.position,\n position = _ref$position === void 0 ? '' : _ref$position,\n _ref$shape = _ref.shape,\n shape = _ref$shape === void 0 ? '' : _ref$shape;\n\n if (!colorStops || colorStops.length < 2) {\n throw new PolishedError(57);\n }\n\n return {\n backgroundColor: fallback || colorStops[0].split(' ')[0],\n backgroundImage: constructGradientValue(_templateObject || (_templateObject = _taggedTemplateLiteralLoose([\"radial-gradient(\", \"\", \"\", \"\", \")\"])), position, shape, extent, colorStops.join(', '))\n };\n}\n\n/**\n * A helper to generate a retina background image and non-retina\n * background image. The retina background image will output to a HiDPI media query. The mixin uses\n * a _2x.png filename suffix by default.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...retinaImage('my-img')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${retinaImage('my-img')}\n * `\n *\n * // CSS as JS Output\n * div {\n * backgroundImage: 'url(my-img.png)',\n * '@media only screen and (-webkit-min-device-pixel-ratio: 1.3),\n * only screen and (min--moz-device-pixel-ratio: 1.3),\n * only screen and (-o-min-device-pixel-ratio: 1.3/1),\n * only screen and (min-resolution: 144dpi),\n * only screen and (min-resolution: 1.5dppx)': {\n * backgroundImage: 'url(my-img_2x.png)',\n * }\n * }\n */\nfunction retinaImage(filename, backgroundSize, extension, retinaFilename, retinaSuffix) {\n var _ref;\n\n if (extension === void 0) {\n extension = 'png';\n }\n\n if (retinaSuffix === void 0) {\n retinaSuffix = '_2x';\n }\n\n if (!filename) {\n throw new PolishedError(58);\n } // Replace the dot at the beginning of the passed extension if one exists\n\n\n var ext = extension.replace(/^\\./, '');\n var rFilename = retinaFilename ? retinaFilename + \".\" + ext : \"\" + filename + retinaSuffix + \".\" + ext;\n return _ref = {\n backgroundImage: \"url(\" + filename + \".\" + ext + \")\"\n }, _ref[hiDPI()] = _extends({\n backgroundImage: \"url(\" + rFilename + \")\"\n }, backgroundSize ? {\n backgroundSize: backgroundSize\n } : {}), _ref;\n}\n\n/* eslint-disable key-spacing */\nvar functionsMap = {\n easeInBack: 'cubic-bezier(0.600, -0.280, 0.735, 0.045)',\n easeInCirc: 'cubic-bezier(0.600, 0.040, 0.980, 0.335)',\n easeInCubic: 'cubic-bezier(0.550, 0.055, 0.675, 0.190)',\n easeInExpo: 'cubic-bezier(0.950, 0.050, 0.795, 0.035)',\n easeInQuad: 'cubic-bezier(0.550, 0.085, 0.680, 0.530)',\n easeInQuart: 'cubic-bezier(0.895, 0.030, 0.685, 0.220)',\n easeInQuint: 'cubic-bezier(0.755, 0.050, 0.855, 0.060)',\n easeInSine: 'cubic-bezier(0.470, 0.000, 0.745, 0.715)',\n easeOutBack: 'cubic-bezier(0.175, 0.885, 0.320, 1.275)',\n easeOutCubic: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)',\n easeOutCirc: 'cubic-bezier(0.075, 0.820, 0.165, 1.000)',\n easeOutExpo: 'cubic-bezier(0.190, 1.000, 0.220, 1.000)',\n easeOutQuad: 'cubic-bezier(0.250, 0.460, 0.450, 0.940)',\n easeOutQuart: 'cubic-bezier(0.165, 0.840, 0.440, 1.000)',\n easeOutQuint: 'cubic-bezier(0.230, 1.000, 0.320, 1.000)',\n easeOutSine: 'cubic-bezier(0.390, 0.575, 0.565, 1.000)',\n easeInOutBack: 'cubic-bezier(0.680, -0.550, 0.265, 1.550)',\n easeInOutCirc: 'cubic-bezier(0.785, 0.135, 0.150, 0.860)',\n easeInOutCubic: 'cubic-bezier(0.645, 0.045, 0.355, 1.000)',\n easeInOutExpo: 'cubic-bezier(1.000, 0.000, 0.000, 1.000)',\n easeInOutQuad: 'cubic-bezier(0.455, 0.030, 0.515, 0.955)',\n easeInOutQuart: 'cubic-bezier(0.770, 0.000, 0.175, 1.000)',\n easeInOutQuint: 'cubic-bezier(0.860, 0.000, 0.070, 1.000)',\n easeInOutSine: 'cubic-bezier(0.445, 0.050, 0.550, 0.950)'\n};\n/* eslint-enable key-spacing */\n\nfunction getTimingFunction(functionName) {\n return functionsMap[functionName];\n}\n/**\n * String to represent common easing functions as demonstrated here: (github.com/jaukia/easie).\n *\n * @deprecated - This will be deprecated in v5 in favor of `easeIn`, `easeOut`, `easeInOut`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'transitionTimingFunction': timingFunctions('easeInQuad')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * transitionTimingFunction: ${timingFunctions('easeInQuad')};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'transitionTimingFunction': 'cubic-bezier(0.550, 0.085, 0.680, 0.530)',\n * }\n */\n\n\nfunction timingFunctions(timingFunction) {\n return getTimingFunction(timingFunction);\n}\n\nvar getBorderWidth = function getBorderWidth(pointingDirection, height, width) {\n var fullWidth = \"\" + width[0] + (width[1] || '');\n var halfWidth = \"\" + width[0] / 2 + (width[1] || '');\n var fullHeight = \"\" + height[0] + (height[1] || '');\n var halfHeight = \"\" + height[0] / 2 + (height[1] || '');\n\n switch (pointingDirection) {\n case 'top':\n return \"0 \" + halfWidth + \" \" + fullHeight + \" \" + halfWidth;\n\n case 'topLeft':\n return fullWidth + \" \" + fullHeight + \" 0 0\";\n\n case 'left':\n return halfHeight + \" \" + fullWidth + \" \" + halfHeight + \" 0\";\n\n case 'bottomLeft':\n return fullWidth + \" 0 0 \" + fullHeight;\n\n case 'bottom':\n return fullHeight + \" \" + halfWidth + \" 0 \" + halfWidth;\n\n case 'bottomRight':\n return \"0 0 \" + fullWidth + \" \" + fullHeight;\n\n case 'right':\n return halfHeight + \" 0 \" + halfHeight + \" \" + fullWidth;\n\n case 'topRight':\n default:\n return \"0 \" + fullWidth + \" \" + fullHeight + \" 0\";\n }\n};\n\nvar getBorderColor = function getBorderColor(pointingDirection, foregroundColor) {\n switch (pointingDirection) {\n case 'top':\n case 'bottomRight':\n return {\n borderBottomColor: foregroundColor\n };\n\n case 'right':\n case 'bottomLeft':\n return {\n borderLeftColor: foregroundColor\n };\n\n case 'bottom':\n case 'topLeft':\n return {\n borderTopColor: foregroundColor\n };\n\n case 'left':\n case 'topRight':\n return {\n borderRightColor: foregroundColor\n };\n\n default:\n throw new PolishedError(59);\n }\n};\n/**\n * CSS to represent triangle with any pointing direction with an optional background color.\n *\n * @example\n * // Styles as object usage\n *\n * const styles = {\n * ...triangle({ pointingDirection: 'right', width: '100px', height: '100px', foregroundColor: 'red' })\n * }\n *\n *\n * // styled-components usage\n * const div = styled.div`\n * ${triangle({ pointingDirection: 'right', width: '100px', height: '100px', foregroundColor: 'red' })}\n *\n *\n * // CSS as JS Output\n *\n * div: {\n * 'borderColor': 'transparent transparent transparent red',\n * 'borderStyle': 'solid',\n * 'borderWidth': '50px 0 50px 100px',\n * 'height': '0',\n * 'width': '0',\n * }\n */\n\n\nfunction triangle(_ref) {\n var pointingDirection = _ref.pointingDirection,\n height = _ref.height,\n width = _ref.width,\n foregroundColor = _ref.foregroundColor,\n _ref$backgroundColor = _ref.backgroundColor,\n backgroundColor = _ref$backgroundColor === void 0 ? 'transparent' : _ref$backgroundColor;\n var widthAndUnit = getValueAndUnit(width);\n var heightAndUnit = getValueAndUnit(height);\n\n if (isNaN(heightAndUnit[0]) || isNaN(widthAndUnit[0])) {\n throw new PolishedError(60);\n }\n\n return _extends({\n width: '0',\n height: '0',\n borderColor: backgroundColor\n }, getBorderColor(pointingDirection, foregroundColor), {\n borderStyle: 'solid',\n borderWidth: getBorderWidth(pointingDirection, heightAndUnit, widthAndUnit)\n });\n}\n\n/**\n * Provides an easy way to change the `wordWrap` property.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...wordWrap('break-word')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${wordWrap('break-word')}\n * `\n *\n * // CSS as JS Output\n *\n * const styles = {\n * overflowWrap: 'break-word',\n * wordWrap: 'break-word',\n * wordBreak: 'break-all',\n * }\n */\nfunction wordWrap(wrap) {\n if (wrap === void 0) {\n wrap = 'break-word';\n }\n\n var wordBreak = wrap === 'break-word' ? 'break-all' : wrap;\n return {\n overflowWrap: wrap,\n wordWrap: wrap,\n wordBreak: wordBreak\n };\n}\n\nfunction colorToInt(color) {\n return Math.round(color * 255);\n}\n\nfunction convertToInt(red, green, blue) {\n return colorToInt(red) + \",\" + colorToInt(green) + \",\" + colorToInt(blue);\n}\n\nfunction hslToRgb(hue, saturation, lightness, convert) {\n if (convert === void 0) {\n convert = convertToInt;\n }\n\n if (saturation === 0) {\n // achromatic\n return convert(lightness, lightness, lightness);\n } // formulae from https://en.wikipedia.org/wiki/HSL_and_HSV\n\n\n var huePrime = (hue % 360 + 360) % 360 / 60;\n var chroma = (1 - Math.abs(2 * lightness - 1)) * saturation;\n var secondComponent = chroma * (1 - Math.abs(huePrime % 2 - 1));\n var red = 0;\n var green = 0;\n var blue = 0;\n\n if (huePrime >= 0 && huePrime < 1) {\n red = chroma;\n green = secondComponent;\n } else if (huePrime >= 1 && huePrime < 2) {\n red = secondComponent;\n green = chroma;\n } else if (huePrime >= 2 && huePrime < 3) {\n green = chroma;\n blue = secondComponent;\n } else if (huePrime >= 3 && huePrime < 4) {\n green = secondComponent;\n blue = chroma;\n } else if (huePrime >= 4 && huePrime < 5) {\n red = secondComponent;\n blue = chroma;\n } else if (huePrime >= 5 && huePrime < 6) {\n red = chroma;\n blue = secondComponent;\n }\n\n var lightnessModification = lightness - chroma / 2;\n var finalRed = red + lightnessModification;\n var finalGreen = green + lightnessModification;\n var finalBlue = blue + lightnessModification;\n return convert(finalRed, finalGreen, finalBlue);\n}\n\nvar namedColorMap = {\n aliceblue: 'f0f8ff',\n antiquewhite: 'faebd7',\n aqua: '00ffff',\n aquamarine: '7fffd4',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '000',\n blanchedalmond: 'ffebcd',\n blue: '0000ff',\n blueviolet: '8a2be2',\n brown: 'a52a2a',\n burlywood: 'deb887',\n cadetblue: '5f9ea0',\n chartreuse: '7fff00',\n chocolate: 'd2691e',\n coral: 'ff7f50',\n cornflowerblue: '6495ed',\n cornsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgoldenrod: 'b8860b',\n darkgray: 'a9a9a9',\n darkgreen: '006400',\n darkgrey: 'a9a9a9',\n darkkhaki: 'bdb76b',\n darkmagenta: '8b008b',\n darkolivegreen: '556b2f',\n darkorange: 'ff8c00',\n darkorchid: '9932cc',\n darkred: '8b0000',\n darksalmon: 'e9967a',\n darkseagreen: '8fbc8f',\n darkslateblue: '483d8b',\n darkslategray: '2f4f4f',\n darkslategrey: '2f4f4f',\n darkturquoise: '00ced1',\n darkviolet: '9400d3',\n deeppink: 'ff1493',\n deepskyblue: '00bfff',\n dimgray: '696969',\n dimgrey: '696969',\n dodgerblue: '1e90ff',\n firebrick: 'b22222',\n floralwhite: 'fffaf0',\n forestgreen: '228b22',\n fuchsia: 'ff00ff',\n gainsboro: 'dcdcdc',\n ghostwhite: 'f8f8ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n grey: '808080',\n honeydew: 'f0fff0',\n hotpink: 'ff69b4',\n indianred: 'cd5c5c',\n indigo: '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lavender: 'e6e6fa',\n lavenderblush: 'fff0f5',\n lawngreen: '7cfc00',\n lemonchiffon: 'fffacd',\n lightblue: 'add8e6',\n lightcoral: 'f08080',\n lightcyan: 'e0ffff',\n lightgoldenrodyellow: 'fafad2',\n lightgray: 'd3d3d3',\n lightgreen: '90ee90',\n lightgrey: 'd3d3d3',\n lightpink: 'ffb6c1',\n lightsalmon: 'ffa07a',\n lightseagreen: '20b2aa',\n lightskyblue: '87cefa',\n lightslategray: '789',\n lightslategrey: '789',\n lightsteelblue: 'b0c4de',\n lightyellow: 'ffffe0',\n lime: '0f0',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'f0f',\n maroon: '800000',\n mediumaquamarine: '66cdaa',\n mediumblue: '0000cd',\n mediumorchid: 'ba55d3',\n mediumpurple: '9370db',\n mediumseagreen: '3cb371',\n mediumslateblue: '7b68ee',\n mediumspringgreen: '00fa9a',\n mediumturquoise: '48d1cc',\n mediumvioletred: 'c71585',\n midnightblue: '191970',\n mintcream: 'f5fffa',\n mistyrose: 'ffe4e1',\n moccasin: 'ffe4b5',\n navajowhite: 'ffdead',\n navy: '000080',\n oldlace: 'fdf5e6',\n olive: '808000',\n olivedrab: '6b8e23',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n palegoldenrod: 'eee8aa',\n palegreen: '98fb98',\n paleturquoise: 'afeeee',\n palevioletred: 'db7093',\n papayawhip: 'ffefd5',\n peachpuff: 'ffdab9',\n peru: 'cd853f',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n powderblue: 'b0e0e6',\n purple: '800080',\n rebeccapurple: '639',\n red: 'f00',\n rosybrown: 'bc8f8f',\n royalblue: '4169e1',\n saddlebrown: '8b4513',\n salmon: 'fa8072',\n sandybrown: 'f4a460',\n seagreen: '2e8b57',\n seashell: 'fff5ee',\n sienna: 'a0522d',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n slategrey: '708090',\n snow: 'fffafa',\n springgreen: '00ff7f',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n thistle: 'd8bfd8',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n wheat: 'f5deb3',\n white: 'fff',\n whitesmoke: 'f5f5f5',\n yellow: 'ff0',\n yellowgreen: '9acd32'\n};\n/**\n * Checks if a string is a CSS named color and returns its equivalent hex value, otherwise returns the original color.\n * @private\n */\n\nfunction nameToHex(color) {\n if (typeof color !== 'string') return color;\n var normalizedColorName = color.toLowerCase();\n return namedColorMap[normalizedColorName] ? \"#\" + namedColorMap[normalizedColorName] : color;\n}\n\nvar hexRegex = /^#[a-fA-F0-9]{6}$/;\nvar hexRgbaRegex = /^#[a-fA-F0-9]{8}$/;\nvar reducedHexRegex = /^#[a-fA-F0-9]{3}$/;\nvar reducedRgbaHexRegex = /^#[a-fA-F0-9]{4}$/;\nvar rgbRegex = /^rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/i;\nvar rgbaRegex = /^rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*([-+]?[0-9]*[.]?[0-9]+)\\s*\\)$/i;\nvar hslRegex = /^hsl\\(\\s*(\\d{0,3}[.]?[0-9]+)\\s*,\\s*(\\d{1,3}[.]?[0-9]?)%\\s*,\\s*(\\d{1,3}[.]?[0-9]?)%\\s*\\)$/i;\nvar hslaRegex = /^hsla\\(\\s*(\\d{0,3}[.]?[0-9]+)\\s*,\\s*(\\d{1,3}[.]?[0-9]?)%\\s*,\\s*(\\d{1,3}[.]?[0-9]?)%\\s*,\\s*([-+]?[0-9]*[.]?[0-9]+)\\s*\\)$/i;\n/**\n * Returns an RgbColor or RgbaColor object. This utility function is only useful\n * if want to extract a color component. With the color util `toColorString` you\n * can convert a RgbColor or RgbaColor object back to a string.\n *\n * @example\n * // Assigns `{ red: 255, green: 0, blue: 0 }` to color1\n * const color1 = parseToRgb('rgb(255, 0, 0)');\n * // Assigns `{ red: 92, green: 102, blue: 112, alpha: 0.75 }` to color2\n * const color2 = parseToRgb('hsla(210, 10%, 40%, 0.75)');\n */\n\nfunction parseToRgb(color) {\n if (typeof color !== 'string') {\n throw new PolishedError(3);\n }\n\n var normalizedColor = nameToHex(color);\n\n if (normalizedColor.match(hexRegex)) {\n return {\n red: parseInt(\"\" + normalizedColor[1] + normalizedColor[2], 16),\n green: parseInt(\"\" + normalizedColor[3] + normalizedColor[4], 16),\n blue: parseInt(\"\" + normalizedColor[5] + normalizedColor[6], 16)\n };\n }\n\n if (normalizedColor.match(hexRgbaRegex)) {\n var alpha = parseFloat((parseInt(\"\" + normalizedColor[7] + normalizedColor[8], 16) / 255).toFixed(2));\n return {\n red: parseInt(\"\" + normalizedColor[1] + normalizedColor[2], 16),\n green: parseInt(\"\" + normalizedColor[3] + normalizedColor[4], 16),\n blue: parseInt(\"\" + normalizedColor[5] + normalizedColor[6], 16),\n alpha: alpha\n };\n }\n\n if (normalizedColor.match(reducedHexRegex)) {\n return {\n red: parseInt(\"\" + normalizedColor[1] + normalizedColor[1], 16),\n green: parseInt(\"\" + normalizedColor[2] + normalizedColor[2], 16),\n blue: parseInt(\"\" + normalizedColor[3] + normalizedColor[3], 16)\n };\n }\n\n if (normalizedColor.match(reducedRgbaHexRegex)) {\n var _alpha = parseFloat((parseInt(\"\" + normalizedColor[4] + normalizedColor[4], 16) / 255).toFixed(2));\n\n return {\n red: parseInt(\"\" + normalizedColor[1] + normalizedColor[1], 16),\n green: parseInt(\"\" + normalizedColor[2] + normalizedColor[2], 16),\n blue: parseInt(\"\" + normalizedColor[3] + normalizedColor[3], 16),\n alpha: _alpha\n };\n }\n\n var rgbMatched = rgbRegex.exec(normalizedColor);\n\n if (rgbMatched) {\n return {\n red: parseInt(\"\" + rgbMatched[1], 10),\n green: parseInt(\"\" + rgbMatched[2], 10),\n blue: parseInt(\"\" + rgbMatched[3], 10)\n };\n }\n\n var rgbaMatched = rgbaRegex.exec(normalizedColor.substring(0, 50));\n\n if (rgbaMatched) {\n return {\n red: parseInt(\"\" + rgbaMatched[1], 10),\n green: parseInt(\"\" + rgbaMatched[2], 10),\n blue: parseInt(\"\" + rgbaMatched[3], 10),\n alpha: parseFloat(\"\" + rgbaMatched[4])\n };\n }\n\n var hslMatched = hslRegex.exec(normalizedColor);\n\n if (hslMatched) {\n var hue = parseInt(\"\" + hslMatched[1], 10);\n var saturation = parseInt(\"\" + hslMatched[2], 10) / 100;\n var lightness = parseInt(\"\" + hslMatched[3], 10) / 100;\n var rgbColorString = \"rgb(\" + hslToRgb(hue, saturation, lightness) + \")\";\n var hslRgbMatched = rgbRegex.exec(rgbColorString);\n\n if (!hslRgbMatched) {\n throw new PolishedError(4, normalizedColor, rgbColorString);\n }\n\n return {\n red: parseInt(\"\" + hslRgbMatched[1], 10),\n green: parseInt(\"\" + hslRgbMatched[2], 10),\n blue: parseInt(\"\" + hslRgbMatched[3], 10)\n };\n }\n\n var hslaMatched = hslaRegex.exec(normalizedColor.substring(0, 50));\n\n if (hslaMatched) {\n var _hue = parseInt(\"\" + hslaMatched[1], 10);\n\n var _saturation = parseInt(\"\" + hslaMatched[2], 10) / 100;\n\n var _lightness = parseInt(\"\" + hslaMatched[3], 10) / 100;\n\n var _rgbColorString = \"rgb(\" + hslToRgb(_hue, _saturation, _lightness) + \")\";\n\n var _hslRgbMatched = rgbRegex.exec(_rgbColorString);\n\n if (!_hslRgbMatched) {\n throw new PolishedError(4, normalizedColor, _rgbColorString);\n }\n\n return {\n red: parseInt(\"\" + _hslRgbMatched[1], 10),\n green: parseInt(\"\" + _hslRgbMatched[2], 10),\n blue: parseInt(\"\" + _hslRgbMatched[3], 10),\n alpha: parseFloat(\"\" + hslaMatched[4])\n };\n }\n\n throw new PolishedError(5);\n}\n\nfunction rgbToHsl(color) {\n // make sure rgb are contained in a set of [0, 255]\n var red = color.red / 255;\n var green = color.green / 255;\n var blue = color.blue / 255;\n var max = Math.max(red, green, blue);\n var min = Math.min(red, green, blue);\n var lightness = (max + min) / 2;\n\n if (max === min) {\n // achromatic\n if (color.alpha !== undefined) {\n return {\n hue: 0,\n saturation: 0,\n lightness: lightness,\n alpha: color.alpha\n };\n } else {\n return {\n hue: 0,\n saturation: 0,\n lightness: lightness\n };\n }\n }\n\n var hue;\n var delta = max - min;\n var saturation = lightness > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n\n switch (max) {\n case red:\n hue = (green - blue) / delta + (green < blue ? 6 : 0);\n break;\n\n case green:\n hue = (blue - red) / delta + 2;\n break;\n\n default:\n // blue case\n hue = (red - green) / delta + 4;\n break;\n }\n\n hue *= 60;\n\n if (color.alpha !== undefined) {\n return {\n hue: hue,\n saturation: saturation,\n lightness: lightness,\n alpha: color.alpha\n };\n }\n\n return {\n hue: hue,\n saturation: saturation,\n lightness: lightness\n };\n}\n\n/**\n * Returns an HslColor or HslaColor object. This utility function is only useful\n * if want to extract a color component. With the color util `toColorString` you\n * can convert a HslColor or HslaColor object back to a string.\n *\n * @example\n * // Assigns `{ hue: 0, saturation: 1, lightness: 0.5 }` to color1\n * const color1 = parseToHsl('rgb(255, 0, 0)');\n * // Assigns `{ hue: 128, saturation: 1, lightness: 0.5, alpha: 0.75 }` to color2\n * const color2 = parseToHsl('hsla(128, 100%, 50%, 0.75)');\n */\nfunction parseToHsl(color) {\n // Note: At a later stage we can optimize this function as right now a hsl\n // color would be parsed converted to rgb values and converted back to hsl.\n return rgbToHsl(parseToRgb(color));\n}\n\n/**\n * Reduces hex values if possible e.g. #ff8866 to #f86\n * @private\n */\nvar reduceHexValue = function reduceHexValue(value) {\n if (value.length === 7 && value[1] === value[2] && value[3] === value[4] && value[5] === value[6]) {\n return \"#\" + value[1] + value[3] + value[5];\n }\n\n return value;\n};\n\nfunction numberToHex(value) {\n var hex = value.toString(16);\n return hex.length === 1 ? \"0\" + hex : hex;\n}\n\nfunction colorToHex(color) {\n return numberToHex(Math.round(color * 255));\n}\n\nfunction convertToHex(red, green, blue) {\n return reduceHexValue(\"#\" + colorToHex(red) + colorToHex(green) + colorToHex(blue));\n}\n\nfunction hslToHex(hue, saturation, lightness) {\n return hslToRgb(hue, saturation, lightness, convertToHex);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible hex notation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: hsl(359, 0.75, 0.4),\n * background: hsl({ hue: 360, saturation: 0.75, lightness: 0.4 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${hsl(359, 0.75, 0.4)};\n * background: ${hsl({ hue: 360, saturation: 0.75, lightness: 0.4 })};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#b3191c\";\n * background: \"#b3191c\";\n * }\n */\nfunction hsl(value, saturation, lightness) {\n if (typeof value === 'number' && typeof saturation === 'number' && typeof lightness === 'number') {\n return hslToHex(value, saturation, lightness);\n } else if (typeof value === 'object' && saturation === undefined && lightness === undefined) {\n return hslToHex(value.hue, value.saturation, value.lightness);\n }\n\n throw new PolishedError(1);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible rgba or hex notation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: hsla(359, 0.75, 0.4, 0.7),\n * background: hsla({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0,7 }),\n * background: hsla(359, 0.75, 0.4, 1),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${hsla(359, 0.75, 0.4, 0.7)};\n * background: ${hsla({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0,7 })};\n * background: ${hsla(359, 0.75, 0.4, 1)};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"rgba(179,25,28,0.7)\";\n * background: \"rgba(179,25,28,0.7)\";\n * background: \"#b3191c\";\n * }\n */\nfunction hsla(value, saturation, lightness, alpha) {\n if (typeof value === 'number' && typeof saturation === 'number' && typeof lightness === 'number' && typeof alpha === 'number') {\n return alpha >= 1 ? hslToHex(value, saturation, lightness) : \"rgba(\" + hslToRgb(value, saturation, lightness) + \",\" + alpha + \")\";\n } else if (typeof value === 'object' && saturation === undefined && lightness === undefined && alpha === undefined) {\n return value.alpha >= 1 ? hslToHex(value.hue, value.saturation, value.lightness) : \"rgba(\" + hslToRgb(value.hue, value.saturation, value.lightness) + \",\" + value.alpha + \")\";\n }\n\n throw new PolishedError(2);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible hex notation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: rgb(255, 205, 100),\n * background: rgb({ red: 255, green: 205, blue: 100 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${rgb(255, 205, 100)};\n * background: ${rgb({ red: 255, green: 205, blue: 100 })};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#ffcd64\";\n * background: \"#ffcd64\";\n * }\n */\nfunction rgb(value, green, blue) {\n if (typeof value === 'number' && typeof green === 'number' && typeof blue === 'number') {\n return reduceHexValue(\"#\" + numberToHex(value) + numberToHex(green) + numberToHex(blue));\n } else if (typeof value === 'object' && green === undefined && blue === undefined) {\n return reduceHexValue(\"#\" + numberToHex(value.red) + numberToHex(value.green) + numberToHex(value.blue));\n }\n\n throw new PolishedError(6);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible rgba or hex notation.\n *\n * Can also be used to fade a color by passing a hex value or named CSS color along with an alpha value.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: rgba(255, 205, 100, 0.7),\n * background: rgba({ red: 255, green: 205, blue: 100, alpha: 0.7 }),\n * background: rgba(255, 205, 100, 1),\n * background: rgba('#ffffff', 0.4),\n * background: rgba('black', 0.7),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${rgba(255, 205, 100, 0.7)};\n * background: ${rgba({ red: 255, green: 205, blue: 100, alpha: 0.7 })};\n * background: ${rgba(255, 205, 100, 1)};\n * background: ${rgba('#ffffff', 0.4)};\n * background: ${rgba('black', 0.7)};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"rgba(255,205,100,0.7)\";\n * background: \"rgba(255,205,100,0.7)\";\n * background: \"#ffcd64\";\n * background: \"rgba(255,255,255,0.4)\";\n * background: \"rgba(0,0,0,0.7)\";\n * }\n */\nfunction rgba(firstValue, secondValue, thirdValue, fourthValue) {\n if (typeof firstValue === 'string' && typeof secondValue === 'number') {\n var rgbValue = parseToRgb(firstValue);\n return \"rgba(\" + rgbValue.red + \",\" + rgbValue.green + \",\" + rgbValue.blue + \",\" + secondValue + \")\";\n } else if (typeof firstValue === 'number' && typeof secondValue === 'number' && typeof thirdValue === 'number' && typeof fourthValue === 'number') {\n return fourthValue >= 1 ? rgb(firstValue, secondValue, thirdValue) : \"rgba(\" + firstValue + \",\" + secondValue + \",\" + thirdValue + \",\" + fourthValue + \")\";\n } else if (typeof firstValue === 'object' && secondValue === undefined && thirdValue === undefined && fourthValue === undefined) {\n return firstValue.alpha >= 1 ? rgb(firstValue.red, firstValue.green, firstValue.blue) : \"rgba(\" + firstValue.red + \",\" + firstValue.green + \",\" + firstValue.blue + \",\" + firstValue.alpha + \")\";\n }\n\n throw new PolishedError(7);\n}\n\nvar isRgb = function isRgb(color) {\n return typeof color.red === 'number' && typeof color.green === 'number' && typeof color.blue === 'number' && (typeof color.alpha !== 'number' || typeof color.alpha === 'undefined');\n};\n\nvar isRgba = function isRgba(color) {\n return typeof color.red === 'number' && typeof color.green === 'number' && typeof color.blue === 'number' && typeof color.alpha === 'number';\n};\n\nvar isHsl = function isHsl(color) {\n return typeof color.hue === 'number' && typeof color.saturation === 'number' && typeof color.lightness === 'number' && (typeof color.alpha !== 'number' || typeof color.alpha === 'undefined');\n};\n\nvar isHsla = function isHsla(color) {\n return typeof color.hue === 'number' && typeof color.saturation === 'number' && typeof color.lightness === 'number' && typeof color.alpha === 'number';\n};\n/**\n * Converts a RgbColor, RgbaColor, HslColor or HslaColor object to a color string.\n * This util is useful in case you only know on runtime which color object is\n * used. Otherwise we recommend to rely on `rgb`, `rgba`, `hsl` or `hsla`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: toColorString({ red: 255, green: 205, blue: 100 }),\n * background: toColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 }),\n * background: toColorString({ hue: 240, saturation: 1, lightness: 0.5 }),\n * background: toColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${toColorString({ red: 255, green: 205, blue: 100 })};\n * background: ${toColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 })};\n * background: ${toColorString({ hue: 240, saturation: 1, lightness: 0.5 })};\n * background: ${toColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 })};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#ffcd64\";\n * background: \"rgba(255,205,100,0.72)\";\n * background: \"#00f\";\n * background: \"rgba(179,25,25,0.72)\";\n * }\n */\n\n\nfunction toColorString(color) {\n if (typeof color !== 'object') throw new PolishedError(8);\n if (isRgba(color)) return rgba(color);\n if (isRgb(color)) return rgb(color);\n if (isHsla(color)) return hsla(color);\n if (isHsl(color)) return hsl(color);\n throw new PolishedError(8);\n}\n\n// Type definitions taken from https://github.com/gcanti/flow-static-land/blob/master/src/Fun.js\n// eslint-disable-next-line no-unused-vars\n// eslint-disable-next-line no-unused-vars\n// eslint-disable-next-line no-redeclare\nfunction curried(f, length, acc) {\n return function fn() {\n // eslint-disable-next-line prefer-rest-params\n var combined = acc.concat(Array.prototype.slice.call(arguments));\n return combined.length >= length ? f.apply(this, combined) : curried(f, length, combined);\n };\n} // eslint-disable-next-line no-redeclare\n\n\nfunction curry(f) {\n // eslint-disable-line no-redeclare\n return curried(f, f.length, []);\n}\n\n/**\n * Changes the hue of the color. Hue is a number between 0 to 360. The first\n * argument for adjustHue is the amount of degrees the color is rotated around\n * the color wheel, always producing a positive hue value.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: adjustHue(180, '#448'),\n * background: adjustHue('180', 'rgba(101,100,205,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${adjustHue(180, '#448')};\n * background: ${adjustHue('180', 'rgba(101,100,205,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#888844\";\n * background: \"rgba(136,136,68,0.7)\";\n * }\n */\n\nfunction adjustHue(degree, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n hue: hslColor.hue + parseFloat(degree)\n }));\n} // prettier-ignore\n\n\nvar curriedAdjustHue = /*#__PURE__*/curry\n/* :: */\n(adjustHue);\n\n/**\n * Returns the complement of the provided color. This is identical to adjustHue(180, ).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: complement('#448'),\n * background: complement('rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${complement('#448')};\n * background: ${complement('rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#884\";\n * background: \"rgba(153,153,153,0.7)\";\n * }\n */\n\nfunction complement(color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n hue: (hslColor.hue + 180) % 360\n }));\n}\n\nfunction guard(lowerBoundary, upperBoundary, value) {\n return Math.max(lowerBoundary, Math.min(upperBoundary, value));\n}\n\n/**\n * Returns a string value for the darkened color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: darken(0.2, '#FFCD64'),\n * background: darken('0.2', 'rgba(255,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${darken(0.2, '#FFCD64')};\n * background: ${darken('0.2', 'rgba(255,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#ffbd31\";\n * background: \"rgba(255,189,49,0.7)\";\n * }\n */\n\nfunction darken(amount, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n lightness: guard(0, 1, hslColor.lightness - parseFloat(amount))\n }));\n} // prettier-ignore\n\n\nvar curriedDarken = /*#__PURE__*/curry\n/* :: */\n(darken);\n\n/**\n * Decreases the intensity of a color. Its range is between 0 to 1. The first\n * argument of the desaturate function is the amount by how much the color\n * intensity should be decreased.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: desaturate(0.2, '#CCCD64'),\n * background: desaturate('0.2', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${desaturate(0.2, '#CCCD64')};\n * background: ${desaturate('0.2', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#b8b979\";\n * background: \"rgba(184,185,121,0.7)\";\n * }\n */\n\nfunction desaturate(amount, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n saturation: guard(0, 1, hslColor.saturation - parseFloat(amount))\n }));\n} // prettier-ignore\n\n\nvar curriedDesaturate = /*#__PURE__*/curry\n/* :: */\n(desaturate);\n\n/**\n * Returns a number (float) representing the luminance of a color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: getLuminance('#CCCD64') >= getLuminance('#0000ff') ? '#CCCD64' : '#0000ff',\n * background: getLuminance('rgba(58, 133, 255, 1)') >= getLuminance('rgba(255, 57, 149, 1)') ?\n * 'rgba(58, 133, 255, 1)' :\n * 'rgba(255, 57, 149, 1)',\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${getLuminance('#CCCD64') >= getLuminance('#0000ff') ? '#CCCD64' : '#0000ff'};\n * background: ${getLuminance('rgba(58, 133, 255, 1)') >= getLuminance('rgba(255, 57, 149, 1)') ?\n * 'rgba(58, 133, 255, 1)' :\n * 'rgba(255, 57, 149, 1)'};\n *\n * // CSS in JS Output\n *\n * div {\n * background: \"#CCCD64\";\n * background: \"rgba(58, 133, 255, 1)\";\n * }\n */\n\nfunction getLuminance(color) {\n if (color === 'transparent') return 0;\n var rgbColor = parseToRgb(color);\n\n var _Object$keys$map = Object.keys(rgbColor).map(function (key) {\n var channel = rgbColor[key] / 255;\n return channel <= 0.03928 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4);\n }),\n r = _Object$keys$map[0],\n g = _Object$keys$map[1],\n b = _Object$keys$map[2];\n\n return parseFloat((0.2126 * r + 0.7152 * g + 0.0722 * b).toFixed(3));\n}\n\n/**\n * Returns the contrast ratio between two colors based on\n * [W3's recommended equation for calculating contrast](http://www.w3.org/TR/WCAG20/#contrast-ratiodef).\n *\n * @example\n * const contrastRatio = getContrast('#444', '#fff');\n */\n\nfunction getContrast(color1, color2) {\n var luminance1 = getLuminance(color1);\n var luminance2 = getLuminance(color2);\n return parseFloat((luminance1 > luminance2 ? (luminance1 + 0.05) / (luminance2 + 0.05) : (luminance2 + 0.05) / (luminance1 + 0.05)).toFixed(2));\n}\n\n/**\n * Converts the color to a grayscale, by reducing its saturation to 0.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: grayscale('#CCCD64'),\n * background: grayscale('rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${grayscale('#CCCD64')};\n * background: ${grayscale('rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#999\";\n * background: \"rgba(153,153,153,0.7)\";\n * }\n */\n\nfunction grayscale(color) {\n if (color === 'transparent') return color;\n return toColorString(_extends({}, parseToHsl(color), {\n saturation: 0\n }));\n}\n\n/**\n * Converts a HslColor or HslaColor object to a color string.\n * This util is useful in case you only know on runtime which color object is\n * used. Otherwise we recommend to rely on `hsl` or `hsla`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: hslToColorString({ hue: 240, saturation: 1, lightness: 0.5 }),\n * background: hslToColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${hslToColorString({ hue: 240, saturation: 1, lightness: 0.5 })};\n * background: ${hslToColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 })};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#00f\";\n * background: \"rgba(179,25,25,0.72)\";\n * }\n */\nfunction hslToColorString(color) {\n if (typeof color === 'object' && typeof color.hue === 'number' && typeof color.saturation === 'number' && typeof color.lightness === 'number') {\n if (color.alpha && typeof color.alpha === 'number') {\n return hsla({\n hue: color.hue,\n saturation: color.saturation,\n lightness: color.lightness,\n alpha: color.alpha\n });\n }\n\n return hsl({\n hue: color.hue,\n saturation: color.saturation,\n lightness: color.lightness\n });\n }\n\n throw new PolishedError(45);\n}\n\n/**\n * Inverts the red, green and blue values of a color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: invert('#CCCD64'),\n * background: invert('rgba(101,100,205,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${invert('#CCCD64')};\n * background: ${invert('rgba(101,100,205,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#33329b\";\n * background: \"rgba(154,155,50,0.7)\";\n * }\n */\n\nfunction invert(color) {\n if (color === 'transparent') return color; // parse color string to rgb\n\n var value = parseToRgb(color);\n return toColorString(_extends({}, value, {\n red: 255 - value.red,\n green: 255 - value.green,\n blue: 255 - value.blue\n }));\n}\n\n/**\n * Returns a string value for the lightened color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: lighten(0.2, '#CCCD64'),\n * background: lighten('0.2', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${lighten(0.2, '#FFCD64')};\n * background: ${lighten('0.2', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#e5e6b1\";\n * background: \"rgba(229,230,177,0.7)\";\n * }\n */\n\nfunction lighten(amount, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n lightness: guard(0, 1, hslColor.lightness + parseFloat(amount))\n }));\n} // prettier-ignore\n\n\nvar curriedLighten = /*#__PURE__*/curry\n/* :: */\n(lighten);\n\n/**\n * Determines which contrast guidelines have been met for two colors.\n * Based on the [contrast calculations recommended by W3](https://www.w3.org/WAI/WCAG21/Understanding/contrast-enhanced.html).\n *\n * @example\n * const scores = meetsContrastGuidelines('#444', '#fff');\n */\nfunction meetsContrastGuidelines(color1, color2) {\n var contrastRatio = getContrast(color1, color2);\n return {\n AA: contrastRatio >= 4.5,\n AALarge: contrastRatio >= 3,\n AAA: contrastRatio >= 7,\n AAALarge: contrastRatio >= 4.5\n };\n}\n\n/**\n * Mixes the two provided colors together by calculating the average of each of the RGB components weighted to the first color by the provided weight.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: mix(0.5, '#f00', '#00f')\n * background: mix(0.25, '#f00', '#00f')\n * background: mix('0.5', 'rgba(255, 0, 0, 0.5)', '#00f')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${mix(0.5, '#f00', '#00f')};\n * background: ${mix(0.25, '#f00', '#00f')};\n * background: ${mix('0.5', 'rgba(255, 0, 0, 0.5)', '#00f')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#7f007f\";\n * background: \"#3f00bf\";\n * background: \"rgba(63, 0, 191, 0.75)\";\n * }\n */\n\nfunction mix(weight, color, otherColor) {\n if (color === 'transparent') return otherColor;\n if (otherColor === 'transparent') return color;\n if (weight === 0) return otherColor;\n var parsedColor1 = parseToRgb(color);\n\n var color1 = _extends({}, parsedColor1, {\n alpha: typeof parsedColor1.alpha === 'number' ? parsedColor1.alpha : 1\n });\n\n var parsedColor2 = parseToRgb(otherColor);\n\n var color2 = _extends({}, parsedColor2, {\n alpha: typeof parsedColor2.alpha === 'number' ? parsedColor2.alpha : 1\n }); // The formula is copied from the original Sass implementation:\n // http://sass-lang.com/documentation/Sass/Script/Functions.html#mix-instance_method\n\n\n var alphaDelta = color1.alpha - color2.alpha;\n var x = parseFloat(weight) * 2 - 1;\n var y = x * alphaDelta === -1 ? x : x + alphaDelta;\n var z = 1 + x * alphaDelta;\n var weight1 = (y / z + 1) / 2.0;\n var weight2 = 1 - weight1;\n var mixedColor = {\n red: Math.floor(color1.red * weight1 + color2.red * weight2),\n green: Math.floor(color1.green * weight1 + color2.green * weight2),\n blue: Math.floor(color1.blue * weight1 + color2.blue * weight2),\n alpha: color1.alpha * (parseFloat(weight) / 1.0) + color2.alpha * (1 - parseFloat(weight) / 1.0)\n };\n return rgba(mixedColor);\n} // prettier-ignore\n\n\nvar curriedMix = /*#__PURE__*/curry\n/* :: */\n(mix);\n\n/**\n * Increases the opacity of a color. Its range for the amount is between 0 to 1.\n *\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: opacify(0.1, 'rgba(255, 255, 255, 0.9)');\n * background: opacify(0.2, 'hsla(0, 0%, 100%, 0.5)'),\n * background: opacify('0.5', 'rgba(255, 0, 0, 0.2)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${opacify(0.1, 'rgba(255, 255, 255, 0.9)')};\n * background: ${opacify(0.2, 'hsla(0, 0%, 100%, 0.5)')},\n * background: ${opacify('0.5', 'rgba(255, 0, 0, 0.2)')},\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#fff\";\n * background: \"rgba(255,255,255,0.7)\";\n * background: \"rgba(255,0,0,0.7)\";\n * }\n */\n\nfunction opacify(amount, color) {\n if (color === 'transparent') return color;\n var parsedColor = parseToRgb(color);\n var alpha = typeof parsedColor.alpha === 'number' ? parsedColor.alpha : 1;\n\n var colorWithAlpha = _extends({}, parsedColor, {\n alpha: guard(0, 1, (alpha * 100 + parseFloat(amount) * 100) / 100)\n });\n\n return rgba(colorWithAlpha);\n} // prettier-ignore\n\n\nvar curriedOpacify = /*#__PURE__*/curry\n/* :: */\n(opacify);\n\nvar defaultReturnIfLightColor = '#000';\nvar defaultReturnIfDarkColor = '#fff';\n/**\n * Returns black or white (or optional passed colors) for best\n * contrast depending on the luminosity of the given color.\n * When passing custom return colors, strict mode ensures that the\n * return color always meets or exceeds WCAG level AA or greater. If this test\n * fails, the default return color (black or white) is returned in place of the\n * custom return color. You can optionally turn off strict mode.\n *\n * Follows [W3C specs for readability](https://www.w3.org/TR/WCAG20-TECHS/G18.html).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * color: readableColor('#000'),\n * color: readableColor('black', '#001', '#ff8'),\n * color: readableColor('white', '#001', '#ff8'),\n * color: readableColor('red', '#333', '#ddd', true)\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * color: ${readableColor('#000')};\n * color: ${readableColor('black', '#001', '#ff8')};\n * color: ${readableColor('white', '#001', '#ff8')};\n * color: ${readableColor('red', '#333', '#ddd', true)};\n * `\n *\n * // CSS in JS Output\n * element {\n * color: \"#fff\";\n * color: \"#ff8\";\n * color: \"#001\";\n * color: \"#000\";\n * }\n */\n\nfunction readableColor(color, returnIfLightColor, returnIfDarkColor, strict) {\n if (returnIfLightColor === void 0) {\n returnIfLightColor = defaultReturnIfLightColor;\n }\n\n if (returnIfDarkColor === void 0) {\n returnIfDarkColor = defaultReturnIfDarkColor;\n }\n\n if (strict === void 0) {\n strict = true;\n }\n\n var isColorLight = getLuminance(color) > 0.179;\n var preferredReturnColor = isColorLight ? returnIfLightColor : returnIfDarkColor;\n\n if (!strict || getContrast(color, preferredReturnColor) >= 4.5) {\n return preferredReturnColor;\n }\n\n return isColorLight ? defaultReturnIfLightColor : defaultReturnIfDarkColor;\n}\n\n/**\n * Converts a RgbColor or RgbaColor object to a color string.\n * This util is useful in case you only know on runtime which color object is\n * used. Otherwise we recommend to rely on `rgb` or `rgba`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: rgbToColorString({ red: 255, green: 205, blue: 100 }),\n * background: rgbToColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${rgbToColorString({ red: 255, green: 205, blue: 100 })};\n * background: ${rgbToColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 })};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#ffcd64\";\n * background: \"rgba(255,205,100,0.72)\";\n * }\n */\nfunction rgbToColorString(color) {\n if (typeof color === 'object' && typeof color.red === 'number' && typeof color.green === 'number' && typeof color.blue === 'number') {\n if (typeof color.alpha === 'number') {\n return rgba({\n red: color.red,\n green: color.green,\n blue: color.blue,\n alpha: color.alpha\n });\n }\n\n return rgb({\n red: color.red,\n green: color.green,\n blue: color.blue\n });\n }\n\n throw new PolishedError(46);\n}\n\n/**\n * Increases the intensity of a color. Its range is between 0 to 1. The first\n * argument of the saturate function is the amount by how much the color\n * intensity should be increased.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: saturate(0.2, '#CCCD64'),\n * background: saturate('0.2', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${saturate(0.2, '#FFCD64')};\n * background: ${saturate('0.2', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#e0e250\";\n * background: \"rgba(224,226,80,0.7)\";\n * }\n */\n\nfunction saturate(amount, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n saturation: guard(0, 1, hslColor.saturation + parseFloat(amount))\n }));\n} // prettier-ignore\n\n\nvar curriedSaturate = /*#__PURE__*/curry\n/* :: */\n(saturate);\n\n/**\n * Sets the hue of a color to the provided value. The hue range can be\n * from 0 and 359.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: setHue(42, '#CCCD64'),\n * background: setHue('244', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${setHue(42, '#CCCD64')};\n * background: ${setHue('244', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#cdae64\";\n * background: \"rgba(107,100,205,0.7)\";\n * }\n */\n\nfunction setHue(hue, color) {\n if (color === 'transparent') return color;\n return toColorString(_extends({}, parseToHsl(color), {\n hue: parseFloat(hue)\n }));\n} // prettier-ignore\n\n\nvar curriedSetHue = /*#__PURE__*/curry\n/* :: */\n(setHue);\n\n/**\n * Sets the lightness of a color to the provided value. The lightness range can be\n * from 0 and 1.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: setLightness(0.2, '#CCCD64'),\n * background: setLightness('0.75', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${setLightness(0.2, '#CCCD64')};\n * background: ${setLightness('0.75', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#4d4d19\";\n * background: \"rgba(223,224,159,0.7)\";\n * }\n */\n\nfunction setLightness(lightness, color) {\n if (color === 'transparent') return color;\n return toColorString(_extends({}, parseToHsl(color), {\n lightness: parseFloat(lightness)\n }));\n} // prettier-ignore\n\n\nvar curriedSetLightness = /*#__PURE__*/curry\n/* :: */\n(setLightness);\n\n/**\n * Sets the saturation of a color to the provided value. The saturation range can be\n * from 0 and 1.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: setSaturation(0.2, '#CCCD64'),\n * background: setSaturation('0.75', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${setSaturation(0.2, '#CCCD64')};\n * background: ${setSaturation('0.75', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#adad84\";\n * background: \"rgba(228,229,76,0.7)\";\n * }\n */\n\nfunction setSaturation(saturation, color) {\n if (color === 'transparent') return color;\n return toColorString(_extends({}, parseToHsl(color), {\n saturation: parseFloat(saturation)\n }));\n} // prettier-ignore\n\n\nvar curriedSetSaturation = /*#__PURE__*/curry\n/* :: */\n(setSaturation);\n\n/**\n * Shades a color by mixing it with black. `shade` can produce\n * hue shifts, where as `darken` manipulates the luminance channel and therefore\n * doesn't produce hue shifts.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: shade(0.25, '#00f')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${shade(0.25, '#00f')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#00003f\";\n * }\n */\n\nfunction shade(percentage, color) {\n if (color === 'transparent') return color;\n return curriedMix(parseFloat(percentage), 'rgb(0, 0, 0)', color);\n} // prettier-ignore\n\n\nvar curriedShade = /*#__PURE__*/curry\n/* :: */\n(shade);\n\n/**\n * Tints a color by mixing it with white. `tint` can produce\n * hue shifts, where as `lighten` manipulates the luminance channel and therefore\n * doesn't produce hue shifts.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: tint(0.25, '#00f')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${tint(0.25, '#00f')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#bfbfff\";\n * }\n */\n\nfunction tint(percentage, color) {\n if (color === 'transparent') return color;\n return curriedMix(parseFloat(percentage), 'rgb(255, 255, 255)', color);\n} // prettier-ignore\n\n\nvar curriedTint = /*#__PURE__*/curry\n/* :: */\n(tint);\n\n/**\n * Decreases the opacity of a color. Its range for the amount is between 0 to 1.\n *\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: transparentize(0.1, '#fff');\n * background: transparentize(0.2, 'hsl(0, 0%, 100%)'),\n * background: transparentize('0.5', 'rgba(255, 0, 0, 0.8)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${transparentize(0.1, '#fff')};\n * background: ${transparentize(0.2, 'hsl(0, 0%, 100%)')},\n * background: ${transparentize('0.5', 'rgba(255, 0, 0, 0.8)')},\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"rgba(255,255,255,0.9)\";\n * background: \"rgba(255,255,255,0.8)\";\n * background: \"rgba(255,0,0,0.3)\";\n * }\n */\n\nfunction transparentize(amount, color) {\n if (color === 'transparent') return color;\n var parsedColor = parseToRgb(color);\n var alpha = typeof parsedColor.alpha === 'number' ? parsedColor.alpha : 1;\n\n var colorWithAlpha = _extends({}, parsedColor, {\n alpha: guard(0, 1, +(alpha * 100 - parseFloat(amount) * 100).toFixed(2) / 100)\n });\n\n return rgba(colorWithAlpha);\n} // prettier-ignore\n\n\nvar curriedTransparentize = /*#__PURE__*/curry\n/* :: */\n(transparentize);\n\n/**\n * Shorthand for easily setting the animation property. Allows either multiple arrays with animations\n * or a single animation spread over the arguments.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...animation(['rotate', '1s', 'ease-in-out'], ['colorchange', '2s'])\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${animation(['rotate', '1s', 'ease-in-out'], ['colorchange', '2s'])}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'animation': 'rotate 1s ease-in-out, colorchange 2s'\n * }\n * @example\n * // Styles as object usage\n * const styles = {\n * ...animation('rotate', '1s', 'ease-in-out')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${animation('rotate', '1s', 'ease-in-out')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'animation': 'rotate 1s ease-in-out'\n * }\n */\nfunction animation() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n // Allow single or multiple animations passed\n var multiMode = Array.isArray(args[0]);\n\n if (!multiMode && args.length > 8) {\n throw new PolishedError(64);\n }\n\n var code = args.map(function (arg) {\n if (multiMode && !Array.isArray(arg) || !multiMode && Array.isArray(arg)) {\n throw new PolishedError(65);\n }\n\n if (Array.isArray(arg) && arg.length > 8) {\n throw new PolishedError(66);\n }\n\n return Array.isArray(arg) ? arg.join(' ') : arg;\n }).join(', ');\n return {\n animation: code\n };\n}\n\n/**\n * Shorthand that accepts any number of backgroundImage values as parameters for creating a single background statement.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...backgroundImages('url(\"/image/background.jpg\")', 'linear-gradient(red, green)')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${backgroundImages('url(\"/image/background.jpg\")', 'linear-gradient(red, green)')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'backgroundImage': 'url(\"/image/background.jpg\"), linear-gradient(red, green)'\n * }\n */\nfunction backgroundImages() {\n for (var _len = arguments.length, properties = new Array(_len), _key = 0; _key < _len; _key++) {\n properties[_key] = arguments[_key];\n }\n\n return {\n backgroundImage: properties.join(', ')\n };\n}\n\n/**\n * Shorthand that accepts any number of background values as parameters for creating a single background statement.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...backgrounds('url(\"/image/background.jpg\")', 'linear-gradient(red, green)', 'center no-repeat')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${backgrounds('url(\"/image/background.jpg\")', 'linear-gradient(red, green)', 'center no-repeat')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'background': 'url(\"/image/background.jpg\"), linear-gradient(red, green), center no-repeat'\n * }\n */\nfunction backgrounds() {\n for (var _len = arguments.length, properties = new Array(_len), _key = 0; _key < _len; _key++) {\n properties[_key] = arguments[_key];\n }\n\n return {\n background: properties.join(', ')\n };\n}\n\nvar sideMap = ['top', 'right', 'bottom', 'left'];\n/**\n * Shorthand for the border property that splits out individual properties for use with tools like Fela and Styletron. A side keyword can optionally be passed to target only one side's border properties.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...border('1px', 'solid', 'red')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${border('1px', 'solid', 'red')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderColor': 'red',\n * 'borderStyle': 'solid',\n * 'borderWidth': `1px`,\n * }\n *\n * // Styles as object usage\n * const styles = {\n * ...border('top', '1px', 'solid', 'red')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${border('top', '1px', 'solid', 'red')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopColor': 'red',\n * 'borderTopStyle': 'solid',\n * 'borderTopWidth': `1px`,\n * }\n */\n\nfunction border(sideKeyword) {\n for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n values[_key - 1] = arguments[_key];\n }\n\n if (typeof sideKeyword === 'string' && sideMap.indexOf(sideKeyword) >= 0) {\n var _ref;\n\n return _ref = {}, _ref[\"border\" + capitalizeString(sideKeyword) + \"Width\"] = values[0], _ref[\"border\" + capitalizeString(sideKeyword) + \"Style\"] = values[1], _ref[\"border\" + capitalizeString(sideKeyword) + \"Color\"] = values[2], _ref;\n } else {\n values.unshift(sideKeyword);\n return {\n borderWidth: values[0],\n borderStyle: values[1],\n borderColor: values[2]\n };\n }\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...borderColor('red', 'green', 'blue', 'yellow')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${borderColor('red', 'green', 'blue', 'yellow')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopColor': 'red',\n * 'borderRightColor': 'green',\n * 'borderBottomColor': 'blue',\n * 'borderLeftColor': 'yellow'\n * }\n */\nfunction borderColor() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['borderColor'].concat(values));\n}\n\n/**\n * Shorthand that accepts a value for side and a value for radius and applies the radius value to both corners of the side.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...borderRadius('top', '5px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${borderRadius('top', '5px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopRightRadius': '5px',\n * 'borderTopLeftRadius': '5px',\n * }\n */\nfunction borderRadius(side, radius) {\n var uppercaseSide = capitalizeString(side);\n\n if (!radius && radius !== 0) {\n throw new PolishedError(62);\n }\n\n if (uppercaseSide === 'Top' || uppercaseSide === 'Bottom') {\n var _ref;\n\n return _ref = {}, _ref[\"border\" + uppercaseSide + \"RightRadius\"] = radius, _ref[\"border\" + uppercaseSide + \"LeftRadius\"] = radius, _ref;\n }\n\n if (uppercaseSide === 'Left' || uppercaseSide === 'Right') {\n var _ref2;\n\n return _ref2 = {}, _ref2[\"borderTop\" + uppercaseSide + \"Radius\"] = radius, _ref2[\"borderBottom\" + uppercaseSide + \"Radius\"] = radius, _ref2;\n }\n\n throw new PolishedError(63);\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...borderStyle('solid', 'dashed', 'dotted', 'double')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${borderStyle('solid', 'dashed', 'dotted', 'double')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopStyle': 'solid',\n * 'borderRightStyle': 'dashed',\n * 'borderBottomStyle': 'dotted',\n * 'borderLeftStyle': 'double'\n * }\n */\nfunction borderStyle() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['borderStyle'].concat(values));\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...borderWidth('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${borderWidth('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopWidth': '12px',\n * 'borderRightWidth': '24px',\n * 'borderBottomWidth': '36px',\n * 'borderLeftWidth': '48px'\n * }\n */\nfunction borderWidth() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['borderWidth'].concat(values));\n}\n\nfunction generateSelectors(template, state) {\n var stateSuffix = state ? \":\" + state : '';\n return template(stateSuffix);\n}\n/**\n * Function helper that adds an array of states to a template of selectors. Used in textInputs and buttons.\n * @private\n */\n\n\nfunction statefulSelectors(states, template, stateMap) {\n if (!template) throw new PolishedError(67);\n if (states.length === 0) return generateSelectors(template, null);\n var selectors = [];\n\n for (var i = 0; i < states.length; i += 1) {\n if (stateMap && stateMap.indexOf(states[i]) < 0) {\n throw new PolishedError(68);\n }\n\n selectors.push(generateSelectors(template, states[i]));\n }\n\n selectors = selectors.join(',');\n return selectors;\n}\n\nvar stateMap$1 = [undefined, null, 'active', 'focus', 'hover'];\n\nfunction template$1(state) {\n return \"button\" + state + \",\\n input[type=\\\"button\\\"]\" + state + \",\\n input[type=\\\"reset\\\"]\" + state + \",\\n input[type=\\\"submit\\\"]\" + state;\n}\n/**\n * Populates selectors that target all buttons. You can pass optional states to append to the selectors.\n * @example\n * // Styles as object usage\n * const styles = {\n * [buttons('active')]: {\n * 'border': 'none'\n * }\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * > ${buttons('active')} {\n * border: none;\n * }\n * `\n *\n * // CSS in JS Output\n *\n * 'button:active,\n * 'input[type=\"button\"]:active,\n * 'input[type=\\\"reset\\\"]:active,\n * 'input[type=\\\"submit\\\"]:active: {\n * 'border': 'none'\n * }\n */\n\n\nfunction buttons() {\n for (var _len = arguments.length, states = new Array(_len), _key = 0; _key < _len; _key++) {\n states[_key] = arguments[_key];\n }\n\n return statefulSelectors(states, template$1, stateMap$1);\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...margin('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${margin('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'marginTop': '12px',\n * 'marginRight': '24px',\n * 'marginBottom': '36px',\n * 'marginLeft': '48px'\n * }\n */\nfunction margin() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['margin'].concat(values));\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...padding('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${padding('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'paddingTop': '12px',\n * 'paddingRight': '24px',\n * 'paddingBottom': '36px',\n * 'paddingLeft': '48px'\n * }\n */\nfunction padding() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['padding'].concat(values));\n}\n\nvar positionMap = ['absolute', 'fixed', 'relative', 'static', 'sticky'];\n/**\n * Shorthand accepts up to five values, including null to skip a value, and maps them to their respective directions. The first value can optionally be a position keyword.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...position('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${position('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'top': '12px',\n * 'right': '24px',\n * 'bottom': '36px',\n * 'left': '48px'\n * }\n *\n * // Styles as object usage\n * const styles = {\n * ...position('absolute', '12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${position('absolute', '12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'position': 'absolute',\n * 'top': '12px',\n * 'right': '24px',\n * 'bottom': '36px',\n * 'left': '48px'\n * }\n */\n\nfunction position(firstValue) {\n for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n values[_key - 1] = arguments[_key];\n }\n\n if (positionMap.indexOf(firstValue) >= 0 && firstValue) {\n return _extends({}, directionalProperty.apply(void 0, [''].concat(values)), {\n position: firstValue\n });\n } else {\n return directionalProperty.apply(void 0, ['', firstValue].concat(values));\n }\n}\n\n/**\n * Shorthand to set the height and width properties in a single statement.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...size('300px', '250px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${size('300px', '250px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'height': '300px',\n * 'width': '250px',\n * }\n */\nfunction size(height, width) {\n if (width === void 0) {\n width = height;\n }\n\n return {\n height: height,\n width: width\n };\n}\n\nvar stateMap = [undefined, null, 'active', 'focus', 'hover'];\n\nfunction template(state) {\n return \"input[type=\\\"color\\\"]\" + state + \",\\n input[type=\\\"date\\\"]\" + state + \",\\n input[type=\\\"datetime\\\"]\" + state + \",\\n input[type=\\\"datetime-local\\\"]\" + state + \",\\n input[type=\\\"email\\\"]\" + state + \",\\n input[type=\\\"month\\\"]\" + state + \",\\n input[type=\\\"number\\\"]\" + state + \",\\n input[type=\\\"password\\\"]\" + state + \",\\n input[type=\\\"search\\\"]\" + state + \",\\n input[type=\\\"tel\\\"]\" + state + \",\\n input[type=\\\"text\\\"]\" + state + \",\\n input[type=\\\"time\\\"]\" + state + \",\\n input[type=\\\"url\\\"]\" + state + \",\\n input[type=\\\"week\\\"]\" + state + \",\\n input:not([type])\" + state + \",\\n textarea\" + state;\n}\n/**\n * Populates selectors that target all text inputs. You can pass optional states to append to the selectors.\n * @example\n * // Styles as object usage\n * const styles = {\n * [textInputs('active')]: {\n * 'border': 'none'\n * }\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * > ${textInputs('active')} {\n * border: none;\n * }\n * `\n *\n * // CSS in JS Output\n *\n * 'input[type=\"color\"]:active,\n * input[type=\"date\"]:active,\n * input[type=\"datetime\"]:active,\n * input[type=\"datetime-local\"]:active,\n * input[type=\"email\"]:active,\n * input[type=\"month\"]:active,\n * input[type=\"number\"]:active,\n * input[type=\"password\"]:active,\n * input[type=\"search\"]:active,\n * input[type=\"tel\"]:active,\n * input[type=\"text\"]:active,\n * input[type=\"time\"]:active,\n * input[type=\"url\"]:active,\n * input[type=\"week\"]:active,\n * input:not([type]):active,\n * textarea:active': {\n * 'border': 'none'\n * }\n */\n\n\nfunction textInputs() {\n for (var _len = arguments.length, states = new Array(_len), _key = 0; _key < _len; _key++) {\n states[_key] = arguments[_key];\n }\n\n return statefulSelectors(states, template, stateMap);\n}\n\n/**\n * Accepts any number of transition values as parameters for creating a single transition statement. You may also pass an array of properties as the first parameter that you would like to apply the same transition values to (second parameter).\n * @example\n * // Styles as object usage\n * const styles = {\n * ...transitions('opacity 1.0s ease-in 0s', 'width 2.0s ease-in 2s'),\n * ...transitions(['color', 'background-color'], '2.0s ease-in 2s')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${transitions('opacity 1.0s ease-in 0s', 'width 2.0s ease-in 2s')};\n * ${transitions(['color', 'background-color'], '2.0s ease-in 2s'),};\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'transition': 'opacity 1.0s ease-in 0s, width 2.0s ease-in 2s'\n * 'transition': 'color 2.0s ease-in 2s, background-color 2.0s ease-in 2s',\n * }\n */\n\nfunction transitions() {\n for (var _len = arguments.length, properties = new Array(_len), _key = 0; _key < _len; _key++) {\n properties[_key] = arguments[_key];\n }\n\n if (Array.isArray(properties[0]) && properties.length === 2) {\n var value = properties[1];\n\n if (typeof value !== 'string') {\n throw new PolishedError(61);\n }\n\n var transitionsString = properties[0].map(function (property) {\n return property + \" \" + value;\n }).join(', ');\n return {\n transition: transitionsString\n };\n } else {\n return {\n transition: properties.join(', ')\n };\n }\n}\n\nexport { curriedAdjustHue as adjustHue, animation, backgroundImages, backgrounds, between, border, borderColor, borderRadius, borderStyle, borderWidth, buttons, clearFix, complement, cover, cssVar, curriedDarken as darken, curriedDesaturate as desaturate, directionalProperty, easeIn, easeInOut, easeOut, ellipsis, em, fluidRange, fontFace, getContrast, getLuminance, getValueAndUnit, grayscale, hiDPI, hideText, hideVisually, hsl, hslToColorString, hsla, important, invert, curriedLighten as lighten, linearGradient, margin, math, meetsContrastGuidelines, curriedMix as mix, modularScale, normalize, curriedOpacify as opacify, padding, parseToHsl, parseToRgb, position, radialGradient, readableColor, rem, remToPx, retinaImage, rgb, rgbToColorString, rgba, curriedSaturate as saturate, curriedSetHue as setHue, curriedSetLightness as setLightness, curriedSetSaturation as setSaturation, curriedShade as shade, size, stripUnit, textInputs, timingFunctions, curriedTint as tint, toColorString, transitions, curriedTransparentize as transparentize, triangle, wordWrap };\n","/**\n * The Ease class provides a collection of easing functions for use with tween.js.\n */\nvar Easing = {\n Linear: {\n None: function (amount) {\n return amount;\n },\n },\n Quadratic: {\n In: function (amount) {\n return amount * amount;\n },\n Out: function (amount) {\n return amount * (2 - amount);\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount;\n }\n return -0.5 * (--amount * (amount - 2) - 1);\n },\n },\n Cubic: {\n In: function (amount) {\n return amount * amount * amount;\n },\n Out: function (amount) {\n return --amount * amount * amount + 1;\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount * amount;\n }\n return 0.5 * ((amount -= 2) * amount * amount + 2);\n },\n },\n Quartic: {\n In: function (amount) {\n return amount * amount * amount * amount;\n },\n Out: function (amount) {\n return 1 - --amount * amount * amount * amount;\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount * amount * amount;\n }\n return -0.5 * ((amount -= 2) * amount * amount * amount - 2);\n },\n },\n Quintic: {\n In: function (amount) {\n return amount * amount * amount * amount * amount;\n },\n Out: function (amount) {\n return --amount * amount * amount * amount * amount + 1;\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount * amount * amount * amount;\n }\n return 0.5 * ((amount -= 2) * amount * amount * amount * amount + 2);\n },\n },\n Sinusoidal: {\n In: function (amount) {\n return 1 - Math.cos((amount * Math.PI) / 2);\n },\n Out: function (amount) {\n return Math.sin((amount * Math.PI) / 2);\n },\n InOut: function (amount) {\n return 0.5 * (1 - Math.cos(Math.PI * amount));\n },\n },\n Exponential: {\n In: function (amount) {\n return amount === 0 ? 0 : Math.pow(1024, amount - 1);\n },\n Out: function (amount) {\n return amount === 1 ? 1 : 1 - Math.pow(2, -10 * amount);\n },\n InOut: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n if ((amount *= 2) < 1) {\n return 0.5 * Math.pow(1024, amount - 1);\n }\n return 0.5 * (-Math.pow(2, -10 * (amount - 1)) + 2);\n },\n },\n Circular: {\n In: function (amount) {\n return 1 - Math.sqrt(1 - amount * amount);\n },\n Out: function (amount) {\n return Math.sqrt(1 - --amount * amount);\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return -0.5 * (Math.sqrt(1 - amount * amount) - 1);\n }\n return 0.5 * (Math.sqrt(1 - (amount -= 2) * amount) + 1);\n },\n },\n Elastic: {\n In: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n return -Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI);\n },\n Out: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n return Math.pow(2, -10 * amount) * Math.sin((amount - 0.1) * 5 * Math.PI) + 1;\n },\n InOut: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n amount *= 2;\n if (amount < 1) {\n return -0.5 * Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI);\n }\n return 0.5 * Math.pow(2, -10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI) + 1;\n },\n },\n Back: {\n In: function (amount) {\n var s = 1.70158;\n return amount * amount * ((s + 1) * amount - s);\n },\n Out: function (amount) {\n var s = 1.70158;\n return --amount * amount * ((s + 1) * amount + s) + 1;\n },\n InOut: function (amount) {\n var s = 1.70158 * 1.525;\n if ((amount *= 2) < 1) {\n return 0.5 * (amount * amount * ((s + 1) * amount - s));\n }\n return 0.5 * ((amount -= 2) * amount * ((s + 1) * amount + s) + 2);\n },\n },\n Bounce: {\n In: function (amount) {\n return 1 - Easing.Bounce.Out(1 - amount);\n },\n Out: function (amount) {\n if (amount < 1 / 2.75) {\n return 7.5625 * amount * amount;\n }\n else if (amount < 2 / 2.75) {\n return 7.5625 * (amount -= 1.5 / 2.75) * amount + 0.75;\n }\n else if (amount < 2.5 / 2.75) {\n return 7.5625 * (amount -= 2.25 / 2.75) * amount + 0.9375;\n }\n else {\n return 7.5625 * (amount -= 2.625 / 2.75) * amount + 0.984375;\n }\n },\n InOut: function (amount) {\n if (amount < 0.5) {\n return Easing.Bounce.In(amount * 2) * 0.5;\n }\n return Easing.Bounce.Out(amount * 2 - 1) * 0.5 + 0.5;\n },\n },\n};\n\nvar now;\n// Include a performance.now polyfill.\n// In node.js, use process.hrtime.\n// eslint-disable-next-line\n// @ts-ignore\nif (typeof self === 'undefined' && typeof process !== 'undefined' && process.hrtime) {\n now = function () {\n // eslint-disable-next-line\n // @ts-ignore\n var time = process.hrtime();\n // Convert [seconds, nanoseconds] to milliseconds.\n return time[0] * 1000 + time[1] / 1000000;\n };\n}\n// In a browser, use self.performance.now if it is available.\nelse if (typeof self !== 'undefined' && self.performance !== undefined && self.performance.now !== undefined) {\n // This must be bound, because directly assigning this function\n // leads to an invocation exception in Chrome.\n now = self.performance.now.bind(self.performance);\n}\n// Use Date.now if it is available.\nelse if (Date.now !== undefined) {\n now = Date.now;\n}\n// Otherwise, use 'new Date().getTime()'.\nelse {\n now = function () {\n return new Date().getTime();\n };\n}\nvar now$1 = now;\n\n/**\n * Controlling groups of tweens\n *\n * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.\n * In these cases, you may want to create your own smaller groups of tween\n */\nvar Group = /** @class */ (function () {\n function Group() {\n this._tweens = {};\n this._tweensAddedDuringUpdate = {};\n }\n Group.prototype.getAll = function () {\n var _this = this;\n return Object.keys(this._tweens).map(function (tweenId) {\n return _this._tweens[tweenId];\n });\n };\n Group.prototype.removeAll = function () {\n this._tweens = {};\n };\n Group.prototype.add = function (tween) {\n this._tweens[tween.getId()] = tween;\n this._tweensAddedDuringUpdate[tween.getId()] = tween;\n };\n Group.prototype.remove = function (tween) {\n delete this._tweens[tween.getId()];\n delete this._tweensAddedDuringUpdate[tween.getId()];\n };\n Group.prototype.update = function (time, preserve) {\n if (time === void 0) { time = now$1(); }\n if (preserve === void 0) { preserve = false; }\n var tweenIds = Object.keys(this._tweens);\n if (tweenIds.length === 0) {\n return false;\n }\n // Tweens are updated in \"batches\". If you add a new tween during an\n // update, then the new tween will be updated in the next batch.\n // If you remove a tween during an update, it may or may not be updated.\n // However, if the removed tween was added during the current batch,\n // then it will not be updated.\n while (tweenIds.length > 0) {\n this._tweensAddedDuringUpdate = {};\n for (var i = 0; i < tweenIds.length; i++) {\n var tween = this._tweens[tweenIds[i]];\n var autoStart = !preserve;\n if (tween && tween.update(time, autoStart) === false && !preserve) {\n delete this._tweens[tweenIds[i]];\n }\n }\n tweenIds = Object.keys(this._tweensAddedDuringUpdate);\n }\n return true;\n };\n return Group;\n}());\n\n/**\n *\n */\nvar Interpolation = {\n Linear: function (v, k) {\n var m = v.length - 1;\n var f = m * k;\n var i = Math.floor(f);\n var fn = Interpolation.Utils.Linear;\n if (k < 0) {\n return fn(v[0], v[1], f);\n }\n if (k > 1) {\n return fn(v[m], v[m - 1], m - f);\n }\n return fn(v[i], v[i + 1 > m ? m : i + 1], f - i);\n },\n Bezier: function (v, k) {\n var b = 0;\n var n = v.length - 1;\n var pw = Math.pow;\n var bn = Interpolation.Utils.Bernstein;\n for (var i = 0; i <= n; i++) {\n b += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);\n }\n return b;\n },\n CatmullRom: function (v, k) {\n var m = v.length - 1;\n var f = m * k;\n var i = Math.floor(f);\n var fn = Interpolation.Utils.CatmullRom;\n if (v[0] === v[m]) {\n if (k < 0) {\n i = Math.floor((f = m * (1 + k)));\n }\n return fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);\n }\n else {\n if (k < 0) {\n return v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);\n }\n if (k > 1) {\n return v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);\n }\n return fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);\n }\n },\n Utils: {\n Linear: function (p0, p1, t) {\n return (p1 - p0) * t + p0;\n },\n Bernstein: function (n, i) {\n var fc = Interpolation.Utils.Factorial;\n return fc(n) / fc(i) / fc(n - i);\n },\n Factorial: (function () {\n var a = [1];\n return function (n) {\n var s = 1;\n if (a[n]) {\n return a[n];\n }\n for (var i = n; i > 1; i--) {\n s *= i;\n }\n a[n] = s;\n return s;\n };\n })(),\n CatmullRom: function (p0, p1, p2, p3, t) {\n var v0 = (p2 - p0) * 0.5;\n var v1 = (p3 - p1) * 0.5;\n var t2 = t * t;\n var t3 = t * t2;\n return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\n },\n },\n};\n\n/**\n * Utils\n */\nvar Sequence = /** @class */ (function () {\n function Sequence() {\n }\n Sequence.nextId = function () {\n return Sequence._nextId++;\n };\n Sequence._nextId = 0;\n return Sequence;\n}());\n\nvar mainGroup = new Group();\n\n/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\nvar Tween = /** @class */ (function () {\n function Tween(_object, _group) {\n if (_group === void 0) { _group = mainGroup; }\n this._object = _object;\n this._group = _group;\n this._isPaused = false;\n this._pauseStart = 0;\n this._valuesStart = {};\n this._valuesEnd = {};\n this._valuesStartRepeat = {};\n this._duration = 1000;\n this._initialRepeat = 0;\n this._repeat = 0;\n this._yoyo = false;\n this._isPlaying = false;\n this._reversed = false;\n this._delayTime = 0;\n this._startTime = 0;\n this._easingFunction = Easing.Linear.None;\n this._interpolationFunction = Interpolation.Linear;\n this._chainedTweens = [];\n this._onStartCallbackFired = false;\n this._id = Sequence.nextId();\n this._isChainStopped = false;\n this._goToEnd = false;\n }\n Tween.prototype.getId = function () {\n return this._id;\n };\n Tween.prototype.isPlaying = function () {\n return this._isPlaying;\n };\n Tween.prototype.isPaused = function () {\n return this._isPaused;\n };\n Tween.prototype.to = function (properties, duration) {\n // TODO? restore this, then update the 07_dynamic_to example to set fox\n // tween's to on each update. That way the behavior is opt-in (there's\n // currently no opt-out).\n // for (const prop in properties) this._valuesEnd[prop] = properties[prop]\n this._valuesEnd = Object.create(properties);\n if (duration !== undefined) {\n this._duration = duration;\n }\n return this;\n };\n Tween.prototype.duration = function (d) {\n this._duration = d;\n return this;\n };\n Tween.prototype.start = function (time) {\n if (this._isPlaying) {\n return this;\n }\n // eslint-disable-next-line\n this._group && this._group.add(this);\n this._repeat = this._initialRepeat;\n if (this._reversed) {\n // If we were reversed (f.e. using the yoyo feature) then we need to\n // flip the tween direction back to forward.\n this._reversed = false;\n for (var property in this._valuesStartRepeat) {\n this._swapEndStartRepeatValues(property);\n this._valuesStart[property] = this._valuesStartRepeat[property];\n }\n }\n this._isPlaying = true;\n this._isPaused = false;\n this._onStartCallbackFired = false;\n this._isChainStopped = false;\n this._startTime = time !== undefined ? (typeof time === 'string' ? now$1() + parseFloat(time) : time) : now$1();\n this._startTime += this._delayTime;\n this._setupProperties(this._object, this._valuesStart, this._valuesEnd, this._valuesStartRepeat);\n return this;\n };\n Tween.prototype._setupProperties = function (_object, _valuesStart, _valuesEnd, _valuesStartRepeat) {\n for (var property in _valuesEnd) {\n var startValue = _object[property];\n var startValueIsArray = Array.isArray(startValue);\n var propType = startValueIsArray ? 'array' : typeof startValue;\n var isInterpolationList = !startValueIsArray && Array.isArray(_valuesEnd[property]);\n // If `to()` specifies a property that doesn't exist in the source object,\n // we should not set that property in the object\n if (propType === 'undefined' || propType === 'function') {\n continue;\n }\n // Check if an Array was provided as property value\n if (isInterpolationList) {\n var endValues = _valuesEnd[property];\n if (endValues.length === 0) {\n continue;\n }\n // handle an array of relative values\n endValues = endValues.map(this._handleRelativeValue.bind(this, startValue));\n // Create a local copy of the Array with the start value at the front\n _valuesEnd[property] = [startValue].concat(endValues);\n }\n // handle the deepness of the values\n if ((propType === 'object' || startValueIsArray) && startValue && !isInterpolationList) {\n _valuesStart[property] = startValueIsArray ? [] : {};\n // eslint-disable-next-line\n for (var prop in startValue) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _valuesStart[property][prop] = startValue[prop];\n }\n _valuesStartRepeat[property] = startValueIsArray ? [] : {}; // TODO? repeat nested values? And yoyo? And array values?\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n this._setupProperties(startValue, _valuesStart[property], _valuesEnd[property], _valuesStartRepeat[property]);\n }\n else {\n // Save the starting value, but only once.\n if (typeof _valuesStart[property] === 'undefined') {\n _valuesStart[property] = startValue;\n }\n if (!startValueIsArray) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings\n }\n if (isInterpolationList) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _valuesStartRepeat[property] = _valuesEnd[property].slice().reverse();\n }\n else {\n _valuesStartRepeat[property] = _valuesStart[property] || 0;\n }\n }\n }\n };\n Tween.prototype.stop = function () {\n if (!this._isChainStopped) {\n this._isChainStopped = true;\n this.stopChainedTweens();\n }\n if (!this._isPlaying) {\n return this;\n }\n // eslint-disable-next-line\n this._group && this._group.remove(this);\n this._isPlaying = false;\n this._isPaused = false;\n if (this._onStopCallback) {\n this._onStopCallback(this._object);\n }\n return this;\n };\n Tween.prototype.end = function () {\n this._goToEnd = true;\n this.update(Infinity);\n return this;\n };\n Tween.prototype.pause = function (time) {\n if (time === void 0) { time = now$1(); }\n if (this._isPaused || !this._isPlaying) {\n return this;\n }\n this._isPaused = true;\n this._pauseStart = time;\n // eslint-disable-next-line\n this._group && this._group.remove(this);\n return this;\n };\n Tween.prototype.resume = function (time) {\n if (time === void 0) { time = now$1(); }\n if (!this._isPaused || !this._isPlaying) {\n return this;\n }\n this._isPaused = false;\n this._startTime += time - this._pauseStart;\n this._pauseStart = 0;\n // eslint-disable-next-line\n this._group && this._group.add(this);\n return this;\n };\n Tween.prototype.stopChainedTweens = function () {\n for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n this._chainedTweens[i].stop();\n }\n return this;\n };\n Tween.prototype.group = function (group) {\n this._group = group;\n return this;\n };\n Tween.prototype.delay = function (amount) {\n this._delayTime = amount;\n return this;\n };\n Tween.prototype.repeat = function (times) {\n this._initialRepeat = times;\n this._repeat = times;\n return this;\n };\n Tween.prototype.repeatDelay = function (amount) {\n this._repeatDelayTime = amount;\n return this;\n };\n Tween.prototype.yoyo = function (yoyo) {\n this._yoyo = yoyo;\n return this;\n };\n Tween.prototype.easing = function (easingFunction) {\n this._easingFunction = easingFunction;\n return this;\n };\n Tween.prototype.interpolation = function (interpolationFunction) {\n this._interpolationFunction = interpolationFunction;\n return this;\n };\n Tween.prototype.chain = function () {\n var tweens = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n tweens[_i] = arguments[_i];\n }\n this._chainedTweens = tweens;\n return this;\n };\n Tween.prototype.onStart = function (callback) {\n this._onStartCallback = callback;\n return this;\n };\n Tween.prototype.onUpdate = function (callback) {\n this._onUpdateCallback = callback;\n return this;\n };\n Tween.prototype.onRepeat = function (callback) {\n this._onRepeatCallback = callback;\n return this;\n };\n Tween.prototype.onComplete = function (callback) {\n this._onCompleteCallback = callback;\n return this;\n };\n Tween.prototype.onStop = function (callback) {\n this._onStopCallback = callback;\n return this;\n };\n /**\n * @returns true if the tween is still playing after the update, false\n * otherwise (calling update on a paused tween still returns true because\n * it is still playing, just paused).\n */\n Tween.prototype.update = function (time, autoStart) {\n if (time === void 0) { time = now$1(); }\n if (autoStart === void 0) { autoStart = true; }\n if (this._isPaused)\n return true;\n var property;\n var elapsed;\n var endTime = this._startTime + this._duration;\n if (!this._goToEnd && !this._isPlaying) {\n if (time > endTime)\n return false;\n if (autoStart)\n this.start(time);\n }\n this._goToEnd = false;\n if (time < this._startTime) {\n return true;\n }\n if (this._onStartCallbackFired === false) {\n if (this._onStartCallback) {\n this._onStartCallback(this._object);\n }\n this._onStartCallbackFired = true;\n }\n elapsed = (time - this._startTime) / this._duration;\n elapsed = this._duration === 0 || elapsed > 1 ? 1 : elapsed;\n var value = this._easingFunction(elapsed);\n // properties transformations\n this._updateProperties(this._object, this._valuesStart, this._valuesEnd, value);\n if (this._onUpdateCallback) {\n this._onUpdateCallback(this._object, elapsed);\n }\n if (elapsed === 1) {\n if (this._repeat > 0) {\n if (isFinite(this._repeat)) {\n this._repeat--;\n }\n // Reassign starting values, restart by making startTime = now\n for (property in this._valuesStartRepeat) {\n if (!this._yoyo && typeof this._valuesEnd[property] === 'string') {\n this._valuesStartRepeat[property] =\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n this._valuesStartRepeat[property] + parseFloat(this._valuesEnd[property]);\n }\n if (this._yoyo) {\n this._swapEndStartRepeatValues(property);\n }\n this._valuesStart[property] = this._valuesStartRepeat[property];\n }\n if (this._yoyo) {\n this._reversed = !this._reversed;\n }\n if (this._repeatDelayTime !== undefined) {\n this._startTime = time + this._repeatDelayTime;\n }\n else {\n this._startTime = time + this._delayTime;\n }\n if (this._onRepeatCallback) {\n this._onRepeatCallback(this._object);\n }\n return true;\n }\n else {\n if (this._onCompleteCallback) {\n this._onCompleteCallback(this._object);\n }\n for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n // Make the chained tweens start exactly at the time they should,\n // even if the `update()` method was called way past the duration of the tween\n this._chainedTweens[i].start(this._startTime + this._duration);\n }\n this._isPlaying = false;\n return false;\n }\n }\n return true;\n };\n Tween.prototype._updateProperties = function (_object, _valuesStart, _valuesEnd, value) {\n for (var property in _valuesEnd) {\n // Don't update properties that do not exist in the source object\n if (_valuesStart[property] === undefined) {\n continue;\n }\n var start = _valuesStart[property] || 0;\n var end = _valuesEnd[property];\n var startIsArray = Array.isArray(_object[property]);\n var endIsArray = Array.isArray(end);\n var isInterpolationList = !startIsArray && endIsArray;\n if (isInterpolationList) {\n _object[property] = this._interpolationFunction(end, value);\n }\n else if (typeof end === 'object' && end) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n this._updateProperties(_object[property], start, end, value);\n }\n else {\n // Parses relative end values with start as base (e.g.: +10, -3)\n end = this._handleRelativeValue(start, end);\n // Protect against non numeric properties.\n if (typeof end === 'number') {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _object[property] = start + (end - start) * value;\n }\n }\n }\n };\n Tween.prototype._handleRelativeValue = function (start, end) {\n if (typeof end !== 'string') {\n return end;\n }\n if (end.charAt(0) === '+' || end.charAt(0) === '-') {\n return start + parseFloat(end);\n }\n else {\n return parseFloat(end);\n }\n };\n Tween.prototype._swapEndStartRepeatValues = function (property) {\n var tmp = this._valuesStartRepeat[property];\n var endValue = this._valuesEnd[property];\n if (typeof endValue === 'string') {\n this._valuesStartRepeat[property] = this._valuesStartRepeat[property] + parseFloat(endValue);\n }\n else {\n this._valuesStartRepeat[property] = this._valuesEnd[property];\n }\n this._valuesEnd[property] = tmp;\n };\n return Tween;\n}());\n\nvar VERSION = '18.6.4';\n\n/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\nvar nextId = Sequence.nextId;\n/**\n * Controlling groups of tweens\n *\n * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.\n * In these cases, you may want to create your own smaller groups of tweens.\n */\nvar TWEEN = mainGroup;\n// This is the best way to export things in a way that's compatible with both ES\n// Modules and CommonJS, without build hacks, and so as not to break the\n// existing API.\n// https://github.com/rollup/rollup/issues/1961#issuecomment-423037881\nvar getAll = TWEEN.getAll.bind(TWEEN);\nvar removeAll = TWEEN.removeAll.bind(TWEEN);\nvar add = TWEEN.add.bind(TWEEN);\nvar remove = TWEEN.remove.bind(TWEEN);\nvar update = TWEEN.update.bind(TWEEN);\nvar exports = {\n Easing: Easing,\n Group: Group,\n Interpolation: Interpolation,\n now: now$1,\n Sequence: Sequence,\n nextId: nextId,\n Tween: Tween,\n VERSION: VERSION,\n getAll: getAll,\n removeAll: removeAll,\n add: add,\n remove: remove,\n update: update,\n};\n\nexport default exports;\nexport { Easing, Group, Interpolation, Sequence, Tween, VERSION, add, getAll, nextId, now$1 as now, remove, removeAll, update };\n","import { WebGLRenderer, Scene, OrthographicCamera, Raycaster, TextureLoader, Vector2, Vector3, Box3, Color, Mesh, SphereGeometry, MeshBasicMaterial, BackSide, EventDispatcher, MOUSE, Quaternion, Spherical, Clock } from 'three';\nimport { TrackballControls } from 'three/examples/jsm/controls/TrackballControls.js';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\nimport { FlyControls } from 'three/examples/jsm/controls/FlyControls.js';\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';\nimport { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';\nimport { parseToRgb, opacify } from 'polished';\nimport TWEEN from '@tweenjs/tween.js';\nimport accessorFn from 'accessor-fn';\nimport Kapsule from 'kapsule';\n\nfunction styleInject(css, ref) {\n if (ref === void 0) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') {\n return;\n }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar css_248z = \".scene-nav-info {\\n bottom: 5px;\\n width: 100%;\\n text-align: center;\\n color: slategrey;\\n opacity: 0.7;\\n font-size: 10px;\\n}\\n\\n.scene-tooltip {\\n color: lavender;\\n font-size: 15px;\\n}\\n\\n.scene-nav-info, .scene-tooltip {\\n position: absolute;\\n font-family: sans-serif;\\n pointer-events: none;\\n}\\n\\n.scene-container canvas:focus {\\n outline: none;\\n}\";\nstyleInject(css_248z);\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar three = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n WebGLRenderer: WebGLRenderer,\n Scene: Scene,\n // PerspectiveCamera,\n OrthographicCamera: OrthographicCamera,\n Raycaster: Raycaster,\n TextureLoader: TextureLoader,\n Vector2: Vector2,\n Vector3: Vector3,\n Box3: Box3,\n Color: Color,\n Mesh: Mesh,\n SphereGeometry: SphereGeometry,\n MeshBasicMaterial: MeshBasicMaterial,\n BackSide: BackSide,\n EventDispatcher: EventDispatcher,\n MOUSE: MOUSE,\n Quaternion: Quaternion,\n Spherical: Spherical,\n Clock: Clock\n};\nvar threeRenderObjects = Kapsule({\n props: {\n width: {\n \"default\": window.innerWidth,\n onChange: function onChange(width, state, prevWidth) {\n isNaN(width) && (state.width = prevWidth);\n }\n },\n height: {\n \"default\": window.innerHeight,\n onChange: function onChange(height, state, prevHeight) {\n isNaN(height) && (state.height = prevHeight);\n }\n },\n backgroundColor: {\n \"default\": '#000011'\n },\n backgroundImageUrl: {},\n onBackgroundImageLoaded: {},\n showNavInfo: {\n \"default\": true\n },\n skyRadius: {\n \"default\": 50000\n },\n objects: {\n \"default\": []\n },\n enablePointerInteraction: {\n \"default\": true,\n onChange: function onChange(_, state) {\n // Reset hover state\n state.hoverObj = null;\n if (state.toolTipElem) state.toolTipElem.innerHTML = '';\n },\n triggerUpdate: false\n },\n lineHoverPrecision: {\n \"default\": 1,\n triggerUpdate: false\n },\n hoverOrderComparator: {\n \"default\": function _default() {\n return -1;\n },\n triggerUpdate: false\n },\n // keep existing order by default\n hoverFilter: {\n \"default\": function _default() {\n return true;\n },\n triggerUpdate: false\n },\n // exclude objects from interaction\n tooltipContent: {\n triggerUpdate: false\n },\n hoverDuringDrag: {\n \"default\": false,\n triggerUpdate: false\n },\n clickAfterDrag: {\n \"default\": false,\n triggerUpdate: false\n },\n onHover: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onClick: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onRightClick: {\n triggerUpdate: false\n }\n },\n methods: {\n tick: function tick(state) {\n if (state.initialised) {\n state.controls.update && state.controls.update(state.clock.getDelta()); // timedelta is required for fly controls\n\n state.postProcessingComposer ? state.postProcessingComposer.render() // if using postprocessing, switch the output to it\n : state.renderer.render(state.scene, state.camera);\n state.extraRenderers.forEach(function (r) {\n return r.render(state.scene, state.camera);\n });\n\n if (state.enablePointerInteraction) {\n // Update tooltip and trigger onHover events\n var topObject = null;\n\n if (state.hoverDuringDrag || !state.isPointerDragging) {\n var intersects = this.intersectingObjects(state.pointerPos.x, state.pointerPos.y).filter(function (d) {\n return state.hoverFilter(d.object);\n }).sort(function (a, b) {\n return state.hoverOrderComparator(a.object, b.object);\n });\n var topIntersect = intersects.length ? intersects[0] : null;\n topObject = topIntersect ? topIntersect.object : null;\n state.intersectionPoint = topIntersect ? topIntersect.point : null;\n }\n\n if (topObject !== state.hoverObj) {\n state.onHover(topObject, state.hoverObj);\n state.toolTipElem.innerHTML = topObject ? accessorFn(state.tooltipContent)(topObject) || '' : '';\n state.hoverObj = topObject;\n }\n }\n\n TWEEN.update(); // update camera animation tweens\n }\n\n return this;\n },\n getPointerPos: function getPointerPos(state) {\n var _state$pointerPos = state.pointerPos,\n x = _state$pointerPos.x,\n y = _state$pointerPos.y;\n return {\n x: x,\n y: y\n };\n },\n cameraPosition: function cameraPosition(state, position, lookAt, transitionDuration) {\n var camera = state.camera; // Setter\n\n if (position && state.initialised) {\n var finalPos = position;\n var finalLookAt = lookAt || {\n x: 0,\n y: 0,\n z: 0\n };\n\n if (!transitionDuration) {\n // no animation\n setCameraPos(finalPos);\n setLookAt(finalLookAt);\n } else {\n var camPos = Object.assign({}, camera.position);\n var camLookAt = getLookAt();\n new TWEEN.Tween(camPos).to(finalPos, transitionDuration).easing(TWEEN.Easing.Quadratic.Out).onUpdate(setCameraPos).start(); // Face direction in 1/3rd of time\n\n new TWEEN.Tween(camLookAt).to(finalLookAt, transitionDuration / 3).easing(TWEEN.Easing.Quadratic.Out).onUpdate(setLookAt).start();\n }\n\n return this;\n } // Getter\n\n\n return Object.assign({}, camera.position, {\n lookAt: getLookAt()\n }); //\n\n function setCameraPos(pos) {\n var x = pos.x,\n y = pos.y,\n z = pos.z;\n if (x !== undefined) camera.position.x = x;\n if (y !== undefined) camera.position.y = y;\n if (z !== undefined) camera.position.z = z;\n }\n\n function setLookAt(lookAt) {\n state.controls.target = new three.Vector3(lookAt.x, lookAt.y, lookAt.z);\n }\n\n function getLookAt() {\n return Object.assign(new three.Vector3(0, 0, -1000).applyQuaternion(camera.quaternion).add(camera.position));\n }\n },\n zoomToFit: function zoomToFit(state) {\n var transitionDuration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var padding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;\n\n for (var _len = arguments.length, bboxArgs = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n bboxArgs[_key - 3] = arguments[_key];\n }\n\n return this.fitToBbox(this.getBbox.apply(this, bboxArgs), transitionDuration, padding);\n },\n fitToBbox: function fitToBbox(state, bbox) {\n var transitionDuration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var padding = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;\n // based on https://discourse.threejs.org/t/camera-zoom-to-fit-object/936/24\n var camera = state.camera;\n\n if (bbox) {\n var center = new three.Vector3(0, 0, 0); // reset camera aim to center\n\n var maxBoxSide = Math.max.apply(Math, _toConsumableArray(Object.entries(bbox).map(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n coordType = _ref2[0],\n coords = _ref2[1];\n\n return Math.max.apply(Math, _toConsumableArray(coords.map(function (c) {\n return Math.abs(center[coordType] - c);\n })));\n }))) * 2; // find distance that fits whole bbox within padded fov\n\n var paddedFov = (1 - padding * 2 / state.height) * camera.fov;\n var fitHeightDistance = maxBoxSide / Math.atan(paddedFov * Math.PI / 180);\n var fitWidthDistance = fitHeightDistance / camera.aspect;\n var distance = Math.max(fitHeightDistance, fitWidthDistance);\n\n if (distance > 0) {\n var newCameraPosition = center.clone().sub(camera.position).normalize().multiplyScalar(-distance);\n this.cameraPosition(newCameraPosition, center, transitionDuration);\n }\n }\n\n return this;\n },\n getBbox: function getBbox(state) {\n var objFilter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {\n return true;\n };\n var box = new three.Box3(new three.Vector3(0, 0, 0), new three.Vector3(0, 0, 0));\n var objs = state.objects.filter(objFilter);\n if (!objs.length) return null;\n objs.forEach(function (obj) {\n return box.expandByObject(obj);\n }); // extract global x,y,z min/max\n\n return Object.assign.apply(Object, _toConsumableArray(['x', 'y', 'z'].map(function (c) {\n return _defineProperty({}, c, [box.min[c], box.max[c]]);\n })));\n },\n getScreenCoords: function getScreenCoords(state, x, y, z) {\n var vec = new three.Vector3(x, y, z);\n vec.project(this.camera()); // project to the camera plane\n\n return {\n // align relative pos to canvas dimensions\n x: (vec.x + 1) * state.width / 2,\n y: -(vec.y - 1) * state.height / 2\n };\n },\n getSceneCoords: function getSceneCoords(state, screenX, screenY) {\n var distance = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var relCoords = new three.Vector2(screenX / state.width * 2 - 1, -(screenY / state.height) * 2 + 1);\n var raycaster = new three.Raycaster();\n raycaster.setFromCamera(relCoords, state.camera);\n return Object.assign({}, raycaster.ray.at(distance, new three.Vector3()));\n },\n intersectingObjects: function intersectingObjects(state, x, y) {\n var relCoords = new three.Vector2(x / state.width * 2 - 1, -(y / state.height) * 2 + 1);\n var raycaster = new three.Raycaster();\n raycaster.params.Line.threshold = state.lineHoverPrecision; // set linePrecision\n\n raycaster.setFromCamera(relCoords, state.camera);\n return raycaster.intersectObjects(state.objects, true);\n },\n renderer: function renderer(state) {\n return state.renderer;\n },\n scene: function scene(state) {\n return state.scene;\n },\n camera: function camera(state) {\n return state.camera;\n },\n postProcessingComposer: function postProcessingComposer(state) {\n return state.postProcessingComposer;\n },\n controls: function controls(state) {\n return state.controls;\n },\n tbControls: function tbControls(state) {\n return state.controls;\n } // to be deprecated\n\n },\n stateInit: function stateInit() {\n return {\n scene: new three.Scene(),\n camera: new three.OrthographicCamera(),\n clock: new three.Clock()\n };\n },\n init: function init(domNode, state) {\n var _ref4 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref4$controlType = _ref4.controlType,\n controlType = _ref4$controlType === void 0 ? 'trackball' : _ref4$controlType,\n _ref4$rendererConfig = _ref4.rendererConfig,\n rendererConfig = _ref4$rendererConfig === void 0 ? {} : _ref4$rendererConfig,\n _ref4$extraRenderers = _ref4.extraRenderers,\n extraRenderers = _ref4$extraRenderers === void 0 ? [] : _ref4$extraRenderers,\n _ref4$waitForLoadComp = _ref4.waitForLoadComplete,\n waitForLoadComplete = _ref4$waitForLoadComp === void 0 ? true : _ref4$waitForLoadComp;\n\n // Wipe DOM\n domNode.innerHTML = ''; // Add relative container\n\n domNode.appendChild(state.container = document.createElement('div'));\n state.container.className = 'scene-container';\n state.container.style.position = 'relative'; // Add nav info section\n\n state.container.appendChild(state.navInfo = document.createElement('div'));\n state.navInfo.className = 'scene-nav-info';\n state.navInfo.textContent = {\n orbit: 'Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan',\n trackball: 'Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan',\n fly: 'WASD: move, R|F: up | down, Q|E: roll, up|down: pitch, left|right: yaw'\n }[controlType] || '';\n state.navInfo.style.display = state.showNavInfo ? null : 'none'; // Setup tooltip\n\n state.toolTipElem = document.createElement('div');\n state.toolTipElem.classList.add('scene-tooltip');\n state.container.appendChild(state.toolTipElem); // Capture pointer coords on move or touchstart\n\n state.pointerPos = new three.Vector2();\n state.pointerPos.x = -2; // Initialize off canvas\n\n state.pointerPos.y = -2;\n ['pointermove', 'pointerdown'].forEach(function (evType) {\n return state.container.addEventListener(evType, function (ev) {\n // track click state\n evType === 'pointerdown' && (state.isPointerPressed = true); // detect point drag\n\n !state.isPointerDragging && ev.type === 'pointermove' && (ev.pressure > 0 || state.isPointerPressed) // ev.pressure always 0 on Safari, so we used the isPointerPressed tracker\n && (ev.pointerType !== 'touch' || ev.movementX === undefined || [ev.movementX, ev.movementY].some(function (m) {\n return Math.abs(m) > 1;\n })) // relax drag trigger sensitivity on touch events\n && (state.isPointerDragging = true);\n\n if (state.enablePointerInteraction) {\n // update the pointer pos\n var offset = getOffset(state.container);\n state.pointerPos.x = ev.pageX - offset.left;\n state.pointerPos.y = ev.pageY - offset.top; // Move tooltip\n\n state.toolTipElem.style.top = \"\".concat(state.pointerPos.y, \"px\");\n state.toolTipElem.style.left = \"\".concat(state.pointerPos.x, \"px\");\n state.toolTipElem.style.transform = \"translate(-\".concat(state.pointerPos.x / state.width * 100, \"%, 21px)\"); // adjust horizontal position to not exceed canvas boundaries\n }\n\n function getOffset(el) {\n var rect = el.getBoundingClientRect(),\n scrollLeft = window.pageXOffset || document.documentElement.scrollLeft,\n scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n return {\n top: rect.top + scrollTop,\n left: rect.left + scrollLeft\n };\n }\n }, {\n passive: true\n });\n }); // Handle click events on objs\n\n state.container.addEventListener('pointerup', function (ev) {\n state.isPointerPressed = false;\n\n if (state.isPointerDragging) {\n state.isPointerDragging = false;\n if (!state.clickAfterDrag) return; // don't trigger onClick after pointer drag (camera motion via controls)\n }\n\n requestAnimationFrame(function () {\n // trigger click events asynchronously, to allow hoverObj to be set (on frame)\n if (ev.button === 0) {\n // left-click\n state.onClick(state.hoverObj || null, ev, state.intersectionPoint); // trigger background clicks with null\n }\n\n if (ev.button === 2 && state.onRightClick) {\n // right-click\n state.onRightClick(state.hoverObj || null, ev, state.intersectionPoint);\n }\n });\n }, {\n passive: true,\n capture: true\n }); // use capture phase to prevent propagation blocking from controls (specifically for fly)\n\n state.container.addEventListener('contextmenu', function (ev) {\n if (state.onRightClick) ev.preventDefault(); // prevent default contextmenu behavior and allow pointerup to fire instead\n }); // Setup renderer, camera and controls\n\n state.renderer = new three.WebGLRenderer(Object.assign({\n antialias: true,\n alpha: true\n }, rendererConfig));\n state.renderer.setPixelRatio(Math.min(2, window.devicePixelRatio)); // clamp device pixel ratio\n\n state.container.appendChild(state.renderer.domElement); // Setup extra renderers\n\n state.extraRenderers = extraRenderers;\n state.extraRenderers.forEach(function (r) {\n // overlay them on top of main renderer\n r.domElement.style.position = 'absolute';\n r.domElement.style.top = '0px';\n r.domElement.style.pointerEvents = 'none';\n state.container.appendChild(r.domElement);\n }); // configure post-processing composer\n\n state.postProcessingComposer = new EffectComposer(state.renderer);\n state.postProcessingComposer.addPass(new RenderPass(state.scene, state.camera)); // render scene as first pass\n // configure controls\n\n state.controls = new {\n trackball: TrackballControls,\n orbit: OrbitControls,\n fly: FlyControls\n }[controlType](state.camera, state.renderer.domElement);\n\n if (controlType === 'fly') {\n state.controls.movementSpeed = 300;\n state.controls.rollSpeed = Math.PI / 6;\n state.controls.dragToLook = true;\n }\n\n if (controlType === 'trackball' || controlType === 'orbit') {\n state.controls.minDistance = 0.1;\n state.controls.maxDistance = state.skyRadius;\n state.controls.addEventListener('start', function () {\n state.controlsEngaged = true;\n });\n state.controls.addEventListener('change', function () {\n if (state.controlsEngaged) {\n state.controlsDragging = true;\n }\n });\n state.controls.addEventListener('end', function () {\n state.controlsEngaged = false;\n state.controlsDragging = false;\n });\n }\n\n [state.renderer, state.postProcessingComposer].concat(_toConsumableArray(state.extraRenderers)).forEach(function (r) {\n return r.setSize(state.width, state.height);\n });\n state.renderer.setSize(state.width, state.height);\n state.postProcessingComposer.setSize(state.width, state.height); // state.camera.aspect = state.width/state.height;\n // state.camera.updateProjectionMatrix();\n // state.camera.position.z = 1000;\n // add sky\n\n state.scene.add(state.skysphere = new three.Mesh());\n state.skysphere.visible = false;\n state.loadComplete = state.scene.visible = !waitForLoadComplete;\n window.scene = state.scene;\n },\n update: function update(state, changedProps) {\n // resize canvas\n if (state.width && state.height && (changedProps.hasOwnProperty('width') || changedProps.hasOwnProperty('height'))) {\n state.container.style.width = state.width;\n state.container.style.height = state.height;\n [state.renderer, state.postProcessingComposer].concat(_toConsumableArray(state.extraRenderers)).forEach(function (r) {\n return r.setSize(state.width, state.height);\n });\n state.camera.aspect = state.width / state.height;\n state.camera.updateProjectionMatrix();\n }\n\n if (changedProps.hasOwnProperty('skyRadius') && state.skyRadius) {\n state.controls.hasOwnProperty('maxDistance') && changedProps.skyRadius && (state.controls.maxDistance = state.skyRadius);\n state.camera.far = state.skyRadius * 2.5;\n state.camera.updateProjectionMatrix();\n state.skysphere.geometry = new three.SphereGeometry(state.skyRadius);\n }\n\n if (changedProps.hasOwnProperty('backgroundColor')) {\n var alpha = parseToRgb(state.backgroundColor).alpha;\n if (alpha === undefined) alpha = 1;\n state.renderer.setClearColor(new three.Color(opacify(1, state.backgroundColor)), alpha);\n }\n\n if (changedProps.hasOwnProperty('backgroundImageUrl')) {\n if (!state.backgroundImageUrl) {\n state.skysphere.visible = false;\n state.skysphere.material.map = null;\n !state.loadComplete && finishLoad();\n } else {\n new three.TextureLoader().load(state.backgroundImageUrl, function (texture) {\n state.skysphere.material = new three.MeshBasicMaterial({\n map: texture,\n side: three.BackSide\n });\n state.skysphere.visible = true; // triggered when background image finishes loading (asynchronously to allow 1 frame to load texture)\n\n state.onBackgroundImageLoaded && setTimeout(state.onBackgroundImageLoaded);\n !state.loadComplete && finishLoad();\n });\n }\n }\n\n changedProps.hasOwnProperty('showNavInfo') && (state.navInfo.style.display = state.showNavInfo ? null : 'none');\n\n if (changedProps.hasOwnProperty('objects')) {\n (changedProps.objects || []).forEach(function (obj) {\n return state.scene.remove(obj);\n }); // Clear the place\n\n state.objects.forEach(function (obj) {\n return state.scene.add(obj);\n }); // Add to scene\n } //\n\n\n function finishLoad() {\n state.loadComplete = state.scene.visible = true;\n }\n }\n});\n\nexport default threeRenderObjects;\n","export default function(kapsulePropName, kapsuleType) {\n\n const dummyK = new kapsuleType(); // To extract defaults\n\n return {\n linkProp: function(prop) { // link property config\n return {\n default: dummyK[prop](),\n onChange(v, state) { state[kapsulePropName][prop](v) },\n triggerUpdate: false\n }\n },\n linkMethod: function(method) { // link method pass-through\n return function(state, ...args) {\n const kapsuleInstance = state[kapsulePropName];\n const returnVal = kapsuleInstance[method](...args);\n\n return returnVal === kapsuleInstance\n ? this // chain based on the parent object, not the inner kapsule\n : returnVal;\n }\n }\n }\n\n}","import { AmbientLight, DirectionalLight, Vector3 } from 'three';\n\nconst three = window.THREE\n ? window.THREE // Prefer consumption from global THREE, if exists\n : { AmbientLight, DirectionalLight, Vector3 };\n\nimport { DragControls as ThreeDragControls } from 'three/examples/jsm/controls/DragControls.js';\n\nimport ThreeForceGraph from 'three-forcegraph';\nimport ThreeRenderObjects from 'three-render-objects';\n\nimport accessorFn from 'accessor-fn';\nimport Kapsule from 'kapsule';\n\nimport linkKapsule from './kapsule-link.js';\n\n//\n\nconst CAMERA_DISTANCE2NODES_FACTOR = 170;\n\n//\n\n// Expose config from forceGraph\nconst bindFG = linkKapsule('forceGraph', ThreeForceGraph);\nconst linkedFGProps = Object.assign(...[\n 'jsonUrl',\n 'graphData',\n 'numDimensions',\n 'dagMode',\n 'dagLevelDistance',\n 'dagNodeFilter',\n 'onDagError',\n 'nodeRelSize',\n 'nodeId',\n 'nodeVal',\n 'nodeResolution',\n 'nodeColor',\n 'nodeAutoColorBy',\n 'nodeOpacity',\n 'nodeVisibility',\n 'nodeThreeObject',\n 'nodeThreeObjectExtend',\n 'linkSource',\n 'linkTarget',\n 'linkVisibility',\n 'linkColor',\n 'linkAutoColorBy',\n 'linkOpacity',\n 'linkWidth',\n 'linkResolution',\n 'linkCurvature',\n 'linkCurveRotation',\n 'linkMaterial',\n 'linkThreeObject',\n 'linkThreeObjectExtend',\n 'linkPositionUpdate',\n 'linkDirectionalArrowLength',\n 'linkDirectionalArrowColor',\n 'linkDirectionalArrowRelPos',\n 'linkDirectionalArrowResolution',\n 'linkDirectionalParticles',\n 'linkDirectionalParticleSpeed',\n 'linkDirectionalParticleWidth',\n 'linkDirectionalParticleColor',\n 'linkDirectionalParticleResolution',\n 'forceEngine',\n 'd3AlphaDecay',\n 'd3VelocityDecay',\n 'd3AlphaMin',\n 'ngraphPhysics',\n 'warmupTicks',\n 'cooldownTicks',\n 'cooldownTime',\n 'onEngineTick',\n 'onEngineStop'\n].map(p => ({ [p]: bindFG.linkProp(p)})));\nconst linkedFGMethods = Object.assign(...[\n 'refresh',\n 'getGraphBbox',\n 'd3Force',\n 'd3ReheatSimulation',\n 'emitParticle'\n].map(p => ({ [p]: bindFG.linkMethod(p)})));\n\n// Expose config from renderObjs\nconst bindRenderObjs = linkKapsule('renderObjs', ThreeRenderObjects);\nconst linkedRenderObjsProps = Object.assign(...[\n 'width',\n 'height',\n 'backgroundColor',\n 'showNavInfo',\n 'enablePointerInteraction'\n].map(p => ({ [p]: bindRenderObjs.linkProp(p)})));\nconst linkedRenderObjsMethods = Object.assign(\n ...[\n 'cameraPosition',\n 'postProcessingComposer'\n ].map(p => ({ [p]: bindRenderObjs.linkMethod(p)})),\n {\n graph2ScreenCoords: bindRenderObjs.linkMethod('getScreenCoords'),\n screen2GraphCoords: bindRenderObjs.linkMethod('getSceneCoords')\n }\n);\n\n//\n\nexport default Kapsule({\n\n props: {\n nodeLabel: { default: 'name', triggerUpdate: false },\n linkLabel: { default: 'name', triggerUpdate: false },\n linkHoverPrecision: { default: 1, onChange: (p, state) => state.renderObjs.lineHoverPrecision(p), triggerUpdate: false },\n enableNavigationControls: {\n default: true,\n onChange(enable, state) {\n const controls = state.renderObjs.controls();\n if (controls) {\n controls.enabled = enable;\n }\n },\n triggerUpdate: false\n },\n enableNodeDrag: { default: true, triggerUpdate: false },\n onNodeDrag: { default: () => {}, triggerUpdate: false },\n onNodeDragEnd: { default: () => {}, triggerUpdate: false },\n onNodeClick: { triggerUpdate: false },\n onNodeRightClick: { triggerUpdate: false },\n onNodeHover: { triggerUpdate: false },\n onLinkClick: { triggerUpdate: false },\n onLinkRightClick: { triggerUpdate: false },\n onLinkHover: { triggerUpdate: false },\n onBackgroundClick: { triggerUpdate: false },\n onBackgroundRightClick: { triggerUpdate: false },\n ...linkedFGProps,\n ...linkedRenderObjsProps\n },\n\n methods: {\n zoomToFit: function(state, transitionDuration, padding, ...bboxArgs) {\n state.renderObjs.fitToBbox(\n state.forceGraph.getGraphBbox(...bboxArgs),\n transitionDuration,\n padding\n );\n return this;\n },\n pauseAnimation: function(state) {\n if (state.animationFrameRequestId !== null) {\n cancelAnimationFrame(state.animationFrameRequestId);\n state.animationFrameRequestId = null;\n }\n return this;\n },\n\n resumeAnimation: function(state) {\n if (state.animationFrameRequestId === null) {\n this._animationCycle();\n }\n return this;\n },\n _animationCycle(state) {\n if (state.enablePointerInteraction) {\n // reset canvas cursor (override dragControls cursor)\n this.renderer().domElement.style.cursor = null;\n }\n\n // Frame cycle\n state.forceGraph.tickFrame();\n state.renderObjs.tick();\n state.animationFrameRequestId = requestAnimationFrame(this._animationCycle);\n },\n scene: state => state.renderObjs.scene(), // Expose scene\n camera: state => state.renderObjs.camera(), // Expose camera\n renderer: state => state.renderObjs.renderer(), // Expose renderer\n controls: state => state.renderObjs.controls(), // Expose controls\n tbControls: state => state.renderObjs.tbControls(), // To be deprecated\n _destructor: function() {\n this.pauseAnimation();\n this.graphData({ nodes: [], links: []});\n },\n ...linkedFGMethods,\n ...linkedRenderObjsMethods\n },\n\n stateInit: ({ controlType, rendererConfig, extraRenderers }) => ({\n forceGraph: new ThreeForceGraph(),\n renderObjs: ThreeRenderObjects({ controlType, rendererConfig, extraRenderers })\n }),\n\n init: function(domNode, state) {\n // Wipe DOM\n domNode.innerHTML = '';\n\n // Add relative container\n domNode.appendChild(state.container = document.createElement('div'));\n state.container.style.position = 'relative';\n\n // Add renderObjs\n const roDomNode = document.createElement('div');\n state.container.appendChild(roDomNode);\n state.renderObjs(roDomNode);\n const camera = state.renderObjs.camera();\n const renderer = state.renderObjs.renderer();\n const controls = state.renderObjs.controls();\n controls.enabled = !!state.enableNavigationControls;\n state.lastSetCameraZ = camera.position.z;\n\n // Add info space\n let infoElem;\n state.container.appendChild(infoElem = document.createElement('div'));\n infoElem.className = 'graph-info-msg';\n infoElem.textContent = '';\n\n // config forcegraph\n state.forceGraph\n .onLoading(() => { infoElem.textContent = 'Loading...' })\n .onFinishLoading(() => { infoElem.textContent = '' })\n .onUpdate(() => {\n // sync graph data structures\n state.graphData = state.forceGraph.graphData();\n\n // re-aim camera, if still in default position (not user modified)\n if (camera.position.x === 0 && camera.position.y === 0 && camera.position.z === state.lastSetCameraZ && state.graphData.nodes.length) {\n camera.lookAt(state.forceGraph.position);\n state.lastSetCameraZ = camera.position.z = Math.cbrt(state.graphData.nodes.length) * CAMERA_DISTANCE2NODES_FACTOR;\n }\n })\n .onFinishUpdate(() => {\n // Setup node drag interaction\n if (state._dragControls) {\n const curNodeDrag = state.graphData.nodes.find(node => node.__initialFixedPos && !node.__disposeControlsAfterDrag); // detect if there's a node being dragged using the existing drag controls\n if (curNodeDrag) {\n curNodeDrag.__disposeControlsAfterDrag = true; // postpone previous controls disposal until drag ends\n } else {\n state._dragControls.dispose(); // cancel previous drag controls\n }\n\n state._dragControls = undefined;\n }\n\n if (state.enableNodeDrag && state.enablePointerInteraction && state.forceEngine === 'd3') { // Can't access node positions programatically in ngraph\n const dragControls = state._dragControls = new ThreeDragControls(\n state.graphData.nodes.map(node => node.__threeObj).filter(obj => obj),\n camera,\n renderer.domElement\n );\n\n dragControls.addEventListener('dragstart', function (event) {\n controls.enabled = false; // Disable controls while dragging\n\n // track drag object movement\n event.object.__initialPos = event.object.position.clone();\n event.object.__prevPos = event.object.position.clone();\n\n const node = getGraphObj(event.object).__data;\n !node.__initialFixedPos && (node.__initialFixedPos = {fx: node.fx, fy: node.fy, fz: node.fz});\n !node.__initialPos && (node.__initialPos = {x: node.x, y: node.y, z: node.z});\n\n // lock node\n ['x', 'y', 'z'].forEach(c => node[`f${c}`] = node[c]);\n\n // drag cursor\n renderer.domElement.classList.add('grabbable');\n });\n\n dragControls.addEventListener('drag', function (event) {\n const nodeObj = getGraphObj(event.object);\n\n if (!event.object.hasOwnProperty('__graphObjType')) {\n // If dragging a child of the node, update the node object instead\n const initPos = event.object.__initialPos;\n const prevPos = event.object.__prevPos;\n const newPos = event.object.position;\n\n nodeObj.position.add(newPos.clone().sub(prevPos)); // translate node object by the motion delta\n prevPos.copy(newPos);\n newPos.copy(initPos); // reset child back to its initial position\n }\n\n const node = nodeObj.__data;\n const newPos = nodeObj.position;\n const translate = {x: newPos.x - node.x, y: newPos.y - node.y, z: newPos.z - node.z};\n // Move fx/fy/fz (and x/y/z) of nodes based on object new position\n ['x', 'y', 'z'].forEach(c => node[`f${c}`] = node[c] = newPos[c]);\n\n state.forceGraph\n .d3AlphaTarget(0.3) // keep engine running at low intensity throughout drag\n .resetCountdown(); // prevent freeze while dragging\n\n node.__dragged = true;\n state.onNodeDrag(node, translate);\n });\n\n dragControls.addEventListener('dragend', function (event) {\n delete(event.object.__initialPos); // remove tracking attributes\n delete(event.object.__prevPos);\n\n const node = getGraphObj(event.object).__data;\n\n // dispose previous controls if needed\n if (node.__disposeControlsAfterDrag) {\n dragControls.dispose();\n delete(node.__disposeControlsAfterDrag);\n }\n\n const initFixedPos = node.__initialFixedPos;\n const initPos = node.__initialPos;\n const translate = {x: initPos.x - node.x, y: initPos.y - node.y, z: initPos.z - node.z};\n if (initFixedPos) {\n ['x', 'y', 'z'].forEach(c => {\n const fc = `f${c}`;\n if (initFixedPos[fc] === undefined) {\n delete(node[fc])\n }\n });\n delete(node.__initialFixedPos);\n delete(node.__initialPos);\n if (node.__dragged) {\n delete(node.__dragged);\n state.onNodeDragEnd(node, translate);\n }\n }\n\n state.forceGraph\n .d3AlphaTarget(0) // release engine low intensity\n .resetCountdown(); // let the engine readjust after releasing fixed nodes\n\n if (state.enableNavigationControls) {\n controls.enabled = true; // Re-enable controls\n controls.domElement && controls.domElement.ownerDocument && controls.domElement.ownerDocument.dispatchEvent(\n // simulate mouseup to ensure the controls don't take over after dragend\n new PointerEvent('pointerup', { pointerType: 'mouse' })\n );\n }\n\n // clear cursor\n renderer.domElement.classList.remove('grabbable');\n });\n }\n });\n\n // config renderObjs\n state.renderObjs\n .objects([ // Populate scene\n new three.AmbientLight(0xbbbbbb),\n new three.DirectionalLight(0xffffff, 0.6),\n state.forceGraph\n ])\n .hoverOrderComparator((a, b) => {\n // Prioritize graph objects\n const aObj = getGraphObj(a);\n if (!aObj) return 1;\n const bObj = getGraphObj(b);\n if (!bObj) return -1;\n\n // Prioritize nodes over links\n const isNode = o => o.__graphObjType === 'node';\n return isNode(bObj) - isNode(aObj);\n })\n .tooltipContent(obj => {\n const graphObj = getGraphObj(obj);\n return graphObj ? accessorFn(state[`${graphObj.__graphObjType}Label`])(graphObj.__data) || '' : '';\n })\n .hoverDuringDrag(false)\n .onHover(obj => {\n // Update tooltip and trigger onHover events\n const hoverObj = getGraphObj(obj);\n\n if (hoverObj !== state.hoverObj) {\n const prevObjType = state.hoverObj ? state.hoverObj.__graphObjType : null;\n const prevObjData = state.hoverObj ? state.hoverObj.__data : null;\n const objType = hoverObj ? hoverObj.__graphObjType : null;\n const objData = hoverObj ? hoverObj.__data : null;\n if (prevObjType && prevObjType !== objType) {\n // Hover out\n const fn = state[`on${prevObjType === 'node' ? 'Node' : 'Link'}Hover`];\n fn && fn(null, prevObjData);\n }\n if (objType) {\n // Hover in\n const fn = state[`on${objType === 'node' ? 'Node' : 'Link'}Hover`];\n fn && fn(objData, prevObjType === objType ? prevObjData : null);\n }\n\n // set pointer if hovered object is clickable\n renderer.domElement.classList[\n ((hoverObj && state[`on${objType === 'node' ? 'Node' : 'Link'}Click`]) || (!hoverObj && state.onBackgroundClick)) ? 'add' : 'remove'\n ]('clickable');\n\n state.hoverObj = hoverObj;\n }\n })\n .clickAfterDrag(false)\n .onClick((obj, ev) => {\n const graphObj = getGraphObj(obj);\n if (graphObj) {\n const fn = state[`on${graphObj.__graphObjType === 'node' ? 'Node' : 'Link'}Click`];\n fn && fn(graphObj.__data, ev);\n } else {\n state.onBackgroundClick && state.onBackgroundClick(ev);\n }\n })\n .onRightClick((obj, ev) => {\n // Handle right-click events\n const graphObj = getGraphObj(obj);\n if (graphObj) {\n const fn = state[`on${graphObj.__graphObjType === 'node' ? 'Node' : 'Link'}RightClick`];\n fn && fn(graphObj.__data, ev);\n } else {\n state.onBackgroundRightClick && state.onBackgroundRightClick(ev);\n }\n });\n\n //\n\n // Kick-off renderer\n this._animationCycle();\n }\n});\n\n//\n\nfunction getGraphObj(object) {\n let obj = object;\n // recurse up object chain until finding the graph object\n while (obj && !obj.hasOwnProperty('__graphObjType')) {\n obj = obj.parent;\n }\n return obj;\n}\n"],"names":["styleInject","Group","Node","now","add","addAll","removeAll","defaultX","leaf_copy","treeProto","tree_add","tree_addAll","tree_cover","tree_data","tree_extent","tree_find","tree_remove","tree_removeAll","tree_root","tree_size","tree_visit","tree_visitAfter","tree_x","defaultY","tree_y","index","noop","eventify","require$$0","getVariableName","createPatternBuilder","generateCreateBodyModule","generateCreateBodyFunction","require$$1","generateQuadTreeModule","generateQuadTreeFunction","generateBoundsModule","generateBoundsFunction","generateCreateDragForceModule","generateCreateDragForceFunction","generateCreateSpringForceModule","generateCreateSpringForceFunction","generateIntegratorModule","generateIntegratorFunction","ngraph_randomModule","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","ngraph_forcelayoutModule","_classCallCheck","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","debounce","_objectWithoutPropertiesLoose","_objectWithoutProperties","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","_defineProperty","ownKeys","_objectSpread2","indexBy","_setPrototypeOf","_getPrototypeOf","_isNativeReflectConstruct","_construct","_assertThisInitialized","_unsupportedIterableToArray","_arrayLikeToArray","dataJoint","scaleOrdinal","three$1","graph","Kapsule","accessorFn","three","Pass","setPrototypeOf","isNativeReflectConstruct","isNativeFunction","construct","getPrototypeOf","exports","TWEEN","opacify","kapsulePropName","kapsuleType","dummyK","linkProp","prop","onChange","v","state","triggerUpdate","linkMethod","method","kapsuleInstance","args","returnVal","window","THREE","AmbientLight","DirectionalLight","Vector3","CAMERA_DISTANCE2NODES_FACTOR","bindFG","linkKapsule","ThreeForceGraph","linkedFGProps","Object","assign","map","p","linkedFGMethods","bindRenderObjs","ThreeRenderObjects","linkedRenderObjsProps","linkedRenderObjsMethods","graph2ScreenCoords","screen2GraphCoords","props","nodeLabel","linkLabel","linkHoverPrecision","renderObjs","lineHoverPrecision","enableNavigationControls","enable","controls","enabled","enableNodeDrag","onNodeDrag","onNodeDragEnd","onNodeClick","onNodeRightClick","onNodeHover","onLinkClick","onLinkRightClick","onLinkHover","onBackgroundClick","onBackgroundRightClick","methods","zoomToFit","transitionDuration","padding","bboxArgs","fitToBbox","forceGraph","getGraphBbox","pauseAnimation","animationFrameRequestId","cancelAnimationFrame","resumeAnimation","_animationCycle","enablePointerInteraction","renderer","domElement","style","cursor","tickFrame","tick","requestAnimationFrame","scene","camera","tbControls","_destructor","graphData","nodes","links","stateInit","controlType","rendererConfig","extraRenderers","init","domNode","innerHTML","appendChild","container","document","createElement","position","roDomNode","lastSetCameraZ","z","infoElem","className","textContent","onLoading","onFinishLoading","onUpdate","x","y","length","lookAt","Math","cbrt","onFinishUpdate","_dragControls","curNodeDrag","find","node","__initialFixedPos","__disposeControlsAfterDrag","dispose","undefined","forceEngine","dragControls","ThreeDragControls","__threeObj","filter","obj","addEventListener","event","object","__initialPos","clone","__prevPos","getGraphObj","__data","fx","fy","fz","forEach","c","classList","nodeObj","hasOwnProperty","initPos","prevPos","newPos","sub","copy","translate","d3AlphaTarget","resetCountdown","__dragged","initFixedPos","fc","ownerDocument","dispatchEvent","PointerEvent","pointerType","remove","objects","hoverOrderComparator","a","b","aObj","bObj","isNode","o","__graphObjType","tooltipContent","graphObj","hoverDuringDrag","onHover","hoverObj","prevObjType","prevObjData","objType","objData","fn","clickAfterDrag","onClick","ev","onRightClick","parent"],"mappings":"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AAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;EACpD,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;EACpD,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;AACpD;EACA,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;EACpD,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;EACpD,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;AACpD;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC9C,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC9C,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC9C;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC9C,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC9C,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AE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;EACrE,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AACrE;EACA,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;EACpE,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;EACpE,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;EACrE,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AACrE;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC3D,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC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AAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;EAC9I,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;EAChF,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;EAChF,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;EAChF,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;EAChF,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;EAChF,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,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I,OAAO,EAAE,OAAO;AACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,OAAO;AACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,UAAU,EAAE,UAAU;AAC1B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,UAAU,EAAE,UAAU;AAC1B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,OAAO;AACpB;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,YAAY,EAAE,YAAY;AAC9B;EACA;EACA;EACA;EACA,IAAI,YAAY,EAAE,YAAY;AAC9B;EACA;EACA;EACA;EACA,IAAI,aAAa,EAAE,YAAY;EAC/B;EACA;EACA;EACA;EACA,IAAI,aAAa,EAAE,YAAY;AAC/B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,QAAQ,EAAE,QAAQ;AACtB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,WAAW,EAAE,WAAW;AAC5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,iBAAiB,EAAE,iBAAiB;AACxC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,WAAW,EAAE,WAAW;AAC5B;EACA;EACA;EACA;EACA;EACA,IAAI,WAAW,EAAE,iBAAiB;AAClC;EACA;EACA;EACA;EACA;EACA,IAAI,SAAS,EAAE,gBAAgB;AAC/B;EACA;EACA;EACA;EACA,IAAI,KAAK,EAAE,KAAK;AAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,OAAO;AACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,OAAO;AACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,OAAO;EACpB,GAAG,CAAC;AACJ;EACA;EACA,EAAED,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"} \ No newline at end of file diff --git a/src/citationnet/static/lib/3d-force-graph.min.js b/src/citationnet/static/lib/3d-force-graph.min.js new file mode 100644 index 0000000..e5671a8 --- /dev/null +++ b/src/citationnet/static/lib/3d-force-graph.min.js @@ -0,0 +1,5 @@ +// Version 1.70.5-0 3d-force-graph - https://github.com/vasturiano/3d-force-graph +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).ForceGraph3D=e()}(this,(function(){"use strict";function t(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function e(e){for(var i=1;it.length)&&(e=t.length);for(var n=0,i=new Array(e);n>8&255]+j[t>>16&255]+j[t>>24&255]+"-"+j[255&e]+j[e>>8&255]+"-"+j[e>>16&15|64]+j[e>>24&255]+"-"+j[63&n|128]+j[n>>8&255]+"-"+j[n>>16&255]+j[n>>24&255]+j[255&i]+j[i>>8&255]+j[i>>16&255]+j[i>>24&255]).toUpperCase()},clamp:function(t,e,n){return Math.max(e,Math.min(n,t))},euclideanModulo:function(t,e){return(t%e+e)%e},mapLinear:function(t,e,n,i,r){return i+(t-e)*(r-i)/(n-e)},lerp:function(t,e,n){return(1-n)*t+n*e},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){return void 0!==t&&(U=t%2147483647),U=16807*U%2147483647,(U-1)/2147483646},degToRad:function(t){return t*H.DEG2RAD},radToDeg:function(t){return t*H.RAD2DEG},isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t},ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:function(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))},setQuaternionFromProperEuler:function(t,e,n,i,r){const o=Math.cos,a=Math.sin,s=o(n/2),c=a(n/2),l=o((e+i)/2),h=a((e+i)/2),u=o((e-i)/2),d=a((e-i)/2),p=o((i-e)/2),f=a((i-e)/2);switch(r){case"XYX":t.set(s*h,c*u,c*d,s*l);break;case"YZY":t.set(c*d,s*h,c*u,s*l);break;case"ZXZ":t.set(c*u,c*d,s*h,s*l);break;case"XZX":t.set(s*h,c*f,c*p,s*l);break;case"YXY":t.set(c*p,s*h,c*f,s*l);break;case"ZYZ":t.set(c*f,c*p,s*h,s*l);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}}};class G{constructor(t=0,e=0){Object.defineProperty(this,"isVector2",{value:!0}),this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,o=this.y-t.y;return this.x=r*n-o*i+t.x,this.y=r*i+o*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}}class V{constructor(){Object.defineProperty(this,"isMatrix3",{value:!0}),this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,o,a,s,c){const l=this.elements;return l[0]=t,l[1]=i,l[2]=a,l[3]=e,l[4]=r,l[5]=s,l[6]=n,l[7]=o,l[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}clone(){return(new this.constructor).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,o=n[0],a=n[3],s=n[6],c=n[1],l=n[4],h=n[7],u=n[2],d=n[5],p=n[8],f=i[0],m=i[3],g=i[6],v=i[1],y=i[4],b=i[7],x=i[2],_=i[5],w=i[8];return r[0]=o*f+a*v+s*x,r[3]=o*m+a*y+s*_,r[6]=o*g+a*b+s*w,r[1]=c*f+l*v+h*x,r[4]=c*m+l*y+h*_,r[7]=c*g+l*b+h*w,r[2]=u*f+d*v+p*x,r[5]=u*m+d*y+p*_,r[8]=u*g+d*b+p*w,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],a=t[5],s=t[6],c=t[7],l=t[8];return e*o*l-e*a*c-n*r*l+n*a*s+i*r*c-i*o*s}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],a=t[5],s=t[6],c=t[7],l=t[8],h=l*o-a*c,u=a*s-l*r,d=c*r-o*s,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const f=1/p;return t[0]=h*f,t[1]=(i*c-l*n)*f,t[2]=(a*n-i*o)*f,t[3]=u*f,t[4]=(l*e-i*s)*f,t[5]=(i*r-a*e)*f,t[6]=d*f,t[7]=(n*s-c*e)*f,t[8]=(o*e-n*r)*f,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).copy(this).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,o,a){const s=Math.cos(r),c=Math.sin(r);this.set(n*s,n*c,-n*(s*o+c*a)+o+t,-i*c,i*s,-i*(-c*o+s*a)+a+e,0,0,1)}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],o=i[3],a=i[6],s=i[1],c=i[4],l=i[7];return i[0]=e*r+n*s,i[3]=e*o+n*c,i[6]=e*a+n*l,i[1]=-n*r+e*s,i[4]=-n*o+e*c,i[7]=-n*a+e*l,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}}let W;const q={getDataURL:function(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===W&&(W=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),W.width=t.width,W.height=t.height;const n=W.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=W}return e.width>2048||e.height>2048?e.toDataURL("image/jpeg",.6):e.toDataURL("image/png")}};let X=0;function Y(t=Y.DEFAULT_IMAGE,e=Y.DEFAULT_MAPPING,n=1001,i=1001,r=1006,o=1008,a=1023,s=1009,c=1,l=3e3){Object.defineProperty(this,"id",{value:X++}),this.uuid=H.generateUUID(),this.name="",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=o,this.anisotropy=c,this.format=a,this.internalFormat=null,this.type=s,this.offset=new G(0,0),this.repeat=new G(1,1),this.center=new G(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new V,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=l,this.version=0,this.onUpdate=null}function Z(t){return"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap?q.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}Y.DEFAULT_IMAGE=void 0,Y.DEFAULT_MAPPING=300,Y.prototype=Object.assign(Object.create(F.prototype),{constructor:Y,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this},toJSON:function(t){const e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,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,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid&&(i.uuid=H.generateUUID()),!e&&void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t1)switch(this.wrapS){case u:t.x=t.x-Math.floor(t.x);break;case d:t.x=t.x<0?0:1;break;case p:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case u:t.y=t.y-Math.floor(t.y);break;case d:t.y=t.y<0?0:1;break;case p:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}}),Object.defineProperty(Y.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}});class J{constructor(t=0,e=0,n=0,i=1){Object.defineProperty(this,"isVector4",{value:!0}),this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,o=t.elements;return this.x=o[0]*e+o[4]*n+o[8]*i+o[12]*r,this.y=o[1]*e+o[5]*n+o[9]*i+o[13]*r,this.z=o[2]*e+o[6]*n+o[10]*i+o[14]*r,this.w=o[3]*e+o[7]*n+o[11]*i+o[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const o=.01,a=.1,s=t.elements,c=s[0],l=s[4],h=s[8],u=s[1],d=s[5],p=s[9],f=s[2],m=s[6],g=s[10];if(Math.abs(l-u)s&&t>v?tv?s=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),o=Math.atan2(r,e*n);t=Math.sin(t*o)/r,a=Math.sin(a*o)/r}const r=a*n;if(s=s*t+u*r,c=c*t+d*r,l=l*t+p*r,h=h*t+f*r,t===1-a){const t=1/Math.sqrt(s*s+c*c+l*l+h*h);s*=t,c*=t,l*=t,h*=t}}t[e]=s,t[e+1]=c,t[e+2]=l,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,r,o){const a=n[i],s=n[i+1],c=n[i+2],l=n[i+3],h=r[o],u=r[o+1],d=r[o+2],p=r[o+3];return t[e]=a*p+l*h+s*d-c*u,t[e+1]=s*p+l*u+c*h-a*d,t[e+2]=c*p+l*d+a*u-s*h,t[e+3]=l*p-a*h-s*u-c*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");const n=t._x,i=t._y,r=t._z,o=t._order,a=Math.cos,s=Math.sin,c=a(n/2),l=a(i/2),h=a(r/2),u=s(n/2),d=s(i/2),p=s(r/2);switch(o){case"XYZ":this._x=u*l*h+c*d*p,this._y=c*d*h-u*l*p,this._z=c*l*p+u*d*h,this._w=c*l*h-u*d*p;break;case"YXZ":this._x=u*l*h+c*d*p,this._y=c*d*h-u*l*p,this._z=c*l*p-u*d*h,this._w=c*l*h+u*d*p;break;case"ZXY":this._x=u*l*h-c*d*p,this._y=c*d*h+u*l*p,this._z=c*l*p+u*d*h,this._w=c*l*h-u*d*p;break;case"ZYX":this._x=u*l*h-c*d*p,this._y=c*d*h+u*l*p,this._z=c*l*p-u*d*h,this._w=c*l*h+u*d*p;break;case"YZX":this._x=u*l*h+c*d*p,this._y=c*d*h+u*l*p,this._z=c*l*p-u*d*h,this._w=c*l*h-u*d*p;break;case"XZY":this._x=u*l*h-c*d*p,this._y=c*d*h-u*l*p,this._z=c*l*p+u*d*h,this._w=c*l*h+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+o)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],o=e[1],a=e[5],s=e[9],c=e[2],l=e[6],h=e[10],u=n+a+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(l-s)*t,this._y=(r-c)*t,this._z=(o-i)*t}else if(n>a&&n>h){const t=2*Math.sqrt(1+n-a-h);this._w=(l-s)/t,this._x=.25*t,this._y=(i+o)/t,this._z=(r+c)/t}else if(a>h){const t=2*Math.sqrt(1+a-n-h);this._w=(r-c)/t,this._x=(i+o)/t,this._y=.25*t,this._z=(s+l)/t}else{const t=2*Math.sqrt(1+h-n-a);this._w=(o-i)/t,this._x=(r+c)/t,this._y=(s+l)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n<1e-6?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(H.clamp(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,o=t._w,a=e._x,s=e._y,c=e._z,l=e._w;return this._x=n*l+o*a+i*c-r*s,this._y=i*l+o*s+r*a-n*c,this._z=r*l+o*c+n*s-i*a,this._w=o*l-n*a-i*s-r*c,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,o=this._w;let a=o*t._w+n*t._x+i*t._y+r*t._z;if(a<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a>=1)return this._w=o,this._x=n,this._y=i,this._z=r,this;const s=1-a*a;if(s<=Number.EPSILON){const t=1-e;return this._w=t*o+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const c=Math.sqrt(s),l=Math.atan2(c,a),h=Math.sin((1-e)*l)/c,u=Math.sin(e*l)/c;return this._w=o*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}class tt{constructor(t=0,e=0,n=0){Object.defineProperty(this,"isVector3",{value:!0}),this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(nt.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(nt.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,o=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*o,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*o,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*o,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,o=t.y,a=t.z,s=t.w,c=s*e+o*i-a*n,l=s*n+a*e-r*i,h=s*i+r*n-o*e,u=-r*e-o*n-a*i;return this.x=c*s+u*-r+l*-a-h*-o,this.y=l*s+u*-o+h*-r-c*-a,this.z=h*s+u*-a+c*-o-l*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,o=e.x,a=e.y,s=e.z;return this.x=i*s-r*a,this.y=r*o-n*s,this.z=n*a-i*o,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return et.copy(this).projectOnVector(t),this.sub(et)}reflect(t){return this.sub(et.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(H.clamp(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}}const et=new tt,nt=new K;class it{constructor(t,e){Object.defineProperty(this,"isBox3",{value:!0}),this.min=void 0!==t?t:new tt(1/0,1/0,1/0),this.max=void 0!==e?e:new tt(-1/0,-1/0,-1/0)}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,o=-1/0,a=-1/0;for(let s=0,c=t.length;sr&&(r=c),l>o&&(o=l),h>a&&(a=h)}return this.min.set(e,n,i),this.max.set(r,o,a),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,o=-1/0,a=-1/0;for(let s=0,c=t.count;sr&&(r=c),l>o&&(o=l),h>a&&(a=h)}return this.min.set(e,n,i),this.max.set(r,o,a),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new tt),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,at),at.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(ft),mt.subVectors(this.max,ft),ct.subVectors(t.a,ft),lt.subVectors(t.b,ft),ht.subVectors(t.c,ft),ut.subVectors(lt,ct),dt.subVectors(ht,lt),pt.subVectors(ct,ht);let e=[0,-ut.z,ut.y,0,-dt.z,dt.y,0,-pt.z,pt.y,ut.z,0,-ut.x,dt.z,0,-dt.x,pt.z,0,-pt.x,-ut.y,ut.x,0,-dt.y,dt.x,0,-pt.y,pt.x,0];return!!rt(e,ct,lt,ht,mt)&&(e=[1,0,0,0,1,0,0,0,1],!!rt(e,ct,lt,ht,mt)&&(gt.crossVectors(ut,dt),e=[gt.x,gt.y,gt.z],rt(e,ct,lt,ht,mt)))}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new tt),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return at.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return void 0===t&&console.error("THREE.Box3: .getBoundingSphere() target is now required"),this.getCenter(t.center),t.radius=.5*this.getSize(at).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(ot[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),ot[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),ot[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),ot[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),ot[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),ot[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),ot[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),ot[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(ot)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}function rt(t,e,n,i,r){for(let o=0,a=t.length-3;o<=a;o+=3){vt.fromArray(t,o);const a=r.x*Math.abs(vt.x)+r.y*Math.abs(vt.y)+r.z*Math.abs(vt.z),s=e.dot(vt),c=n.dot(vt),l=i.dot(vt);if(Math.max(-Math.max(s,c,l),Math.min(s,c,l))>a)return!1}return!0}const ot=[new tt,new tt,new tt,new tt,new tt,new tt,new tt,new tt],at=new tt,st=new it,ct=new tt,lt=new tt,ht=new tt,ut=new tt,dt=new tt,pt=new tt,ft=new tt,mt=new tt,gt=new tt,vt=new tt,yt=new it;class bt{constructor(t,e){this.center=void 0!==t?t:new tt,this.radius=void 0!==e?e:-1}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):yt.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return void 0===t&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),t=new it),this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}}const xt=new tt,_t=new tt,wt=new tt,Mt=new tt,St=new tt,Et=new tt,Tt=new tt;class At{constructor(t,e){this.origin=void 0!==t?t:new tt,this.direction=void 0!==e?e:new tt(0,0,-1)}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return void 0===e&&(console.warn("THREE.Ray: .at() target is now required"),e=new tt),e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,xt)),this}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),e=new tt),e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=xt.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(xt.copy(this.direction).multiplyScalar(e).add(this.origin),xt.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){_t.copy(t).add(e).multiplyScalar(.5),wt.copy(e).sub(t).normalize(),Mt.copy(this.origin).sub(_t);const r=.5*t.distanceTo(e),o=-this.direction.dot(wt),a=Mt.dot(this.direction),s=-Mt.dot(wt),c=Mt.lengthSq(),l=Math.abs(1-o*o);let h,u,d,p;if(l>0)if(h=o*s-a,u=o*a-s,p=r*l,h>=0)if(u>=-p)if(u<=p){const t=1/l;h*=t,u*=t,d=h*(h+o*u+2*a)+u*(o*h+u+2*s)+c}else u=r,h=Math.max(0,-(o*u+a)),d=-h*h+u*(u+2*s)+c;else u=-r,h=Math.max(0,-(o*u+a)),d=-h*h+u*(u+2*s)+c;else u<=-p?(h=Math.max(0,-(-o*r+a)),u=h>0?-r:Math.min(Math.max(-r,-s),r),d=-h*h+u*(u+2*s)+c):u<=p?(h=0,u=Math.min(Math.max(-r,-s),r),d=u*(u+2*s)+c):(h=Math.max(0,-(o*r+a)),u=h>0?r:Math.min(Math.max(-r,-s),r),d=-h*h+u*(u+2*s)+c);else u=o>0?-r:r,h=Math.max(0,-(o*u+a)),d=-h*h+u*(u+2*s)+c;return n&&n.copy(this.direction).multiplyScalar(h).add(this.origin),i&&i.copy(wt).multiplyScalar(u).add(_t),d}intersectSphere(t,e){xt.subVectors(t.center,this.origin);const n=xt.dot(this.direction),i=xt.dot(xt)-n*n,r=t.radius*t.radius;if(i>r)return null;const o=Math.sqrt(r-i),a=n-o,s=n+o;return a<0&&s<0?null:a<0?this.at(s,e):this.at(a,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,o,a,s;const c=1/this.direction.x,l=1/this.direction.y,h=1/this.direction.z,u=this.origin;return c>=0?(n=(t.min.x-u.x)*c,i=(t.max.x-u.x)*c):(n=(t.max.x-u.x)*c,i=(t.min.x-u.x)*c),l>=0?(r=(t.min.y-u.y)*l,o=(t.max.y-u.y)*l):(r=(t.max.y-u.y)*l,o=(t.min.y-u.y)*l),n>o||r>i?null:((r>n||n!=n)&&(n=r),(o=0?(a=(t.min.z-u.z)*h,s=(t.max.z-u.z)*h):(a=(t.max.z-u.z)*h,s=(t.min.z-u.z)*h),n>s||a>i?null:((a>n||n!=n)&&(n=a),(s=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,xt)}intersectTriangle(t,e,n,i,r){St.subVectors(e,t),Et.subVectors(n,t),Tt.crossVectors(St,Et);let o,a=this.direction.dot(Tt);if(a>0){if(i)return null;o=1}else{if(!(a<0))return null;o=-1,a=-a}Mt.subVectors(this.origin,t);const s=o*this.direction.dot(Et.crossVectors(Mt,Et));if(s<0)return null;const c=o*this.direction.dot(St.cross(Mt));if(c<0)return null;if(s+c>a)return null;const l=-o*Mt.dot(Tt);return l<0?null:this.at(l/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}}class Lt{constructor(){Object.defineProperty(this,"isMatrix4",{value:!0}),this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,o,a,s,c,l,h,u,d,p,f,m){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=o,g[9]=a,g[13]=s,g[2]=c,g[6]=l,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=f,g[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new Lt).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/Pt.setFromMatrixColumn(t,0).length(),r=1/Pt.setFromMatrixColumn(t,1).length(),o=1/Pt.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*o,e[9]=n[9]*o,e[10]=n[10]*o,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");const e=this.elements,n=t.x,i=t.y,r=t.z,o=Math.cos(n),a=Math.sin(n),s=Math.cos(i),c=Math.sin(i),l=Math.cos(r),h=Math.sin(r);if("XYZ"===t.order){const t=o*l,n=o*h,i=a*l,r=a*h;e[0]=s*l,e[4]=-s*h,e[8]=c,e[1]=n+i*c,e[5]=t-r*c,e[9]=-a*s,e[2]=r-t*c,e[6]=i+n*c,e[10]=o*s}else if("YXZ"===t.order){const t=s*l,n=s*h,i=c*l,r=c*h;e[0]=t+r*a,e[4]=i*a-n,e[8]=o*c,e[1]=o*h,e[5]=o*l,e[9]=-a,e[2]=n*a-i,e[6]=r+t*a,e[10]=o*s}else if("ZXY"===t.order){const t=s*l,n=s*h,i=c*l,r=c*h;e[0]=t-r*a,e[4]=-o*h,e[8]=i+n*a,e[1]=n+i*a,e[5]=o*l,e[9]=r-t*a,e[2]=-o*c,e[6]=a,e[10]=o*s}else if("ZYX"===t.order){const t=o*l,n=o*h,i=a*l,r=a*h;e[0]=s*l,e[4]=i*c-n,e[8]=t*c+r,e[1]=s*h,e[5]=r*c+t,e[9]=n*c-i,e[2]=-c,e[6]=a*s,e[10]=o*s}else if("YZX"===t.order){const t=o*s,n=o*c,i=a*s,r=a*c;e[0]=s*l,e[4]=r-t*h,e[8]=i*h+n,e[1]=h,e[5]=o*l,e[9]=-a*l,e[2]=-c*l,e[6]=n*h+i,e[10]=t-r*h}else if("XZY"===t.order){const t=o*s,n=o*c,i=a*s,r=a*c;e[0]=s*l,e[4]=-h,e[8]=c*l,e[1]=t*h+r,e[5]=o*l,e[9]=n*h-i,e[2]=i*h-n,e[6]=a*l,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Rt,t,Ot)}lookAt(t,e,n){const i=this.elements;return Dt.subVectors(t,e),0===Dt.lengthSq()&&(Dt.z=1),Dt.normalize(),Nt.crossVectors(n,Dt),0===Nt.lengthSq()&&(1===Math.abs(n.z)?Dt.x+=1e-4:Dt.z+=1e-4,Dt.normalize(),Nt.crossVectors(n,Dt)),Nt.normalize(),It.crossVectors(Dt,Nt),i[0]=Nt.x,i[4]=It.x,i[8]=Dt.x,i[1]=Nt.y,i[5]=It.y,i[9]=Dt.y,i[2]=Nt.z,i[6]=It.z,i[10]=Dt.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,o=n[0],a=n[4],s=n[8],c=n[12],l=n[1],h=n[5],u=n[9],d=n[13],p=n[2],f=n[6],m=n[10],g=n[14],v=n[3],y=n[7],b=n[11],x=n[15],_=i[0],w=i[4],M=i[8],S=i[12],E=i[1],T=i[5],A=i[9],L=i[13],P=i[2],C=i[6],R=i[10],O=i[14],N=i[3],I=i[7],D=i[11],k=i[15];return r[0]=o*_+a*E+s*P+c*N,r[4]=o*w+a*T+s*C+c*I,r[8]=o*M+a*A+s*R+c*D,r[12]=o*S+a*L+s*O+c*k,r[1]=l*_+h*E+u*P+d*N,r[5]=l*w+h*T+u*C+d*I,r[9]=l*M+h*A+u*R+d*D,r[13]=l*S+h*L+u*O+d*k,r[2]=p*_+f*E+m*P+g*N,r[6]=p*w+f*T+m*C+g*I,r[10]=p*M+f*A+m*R+g*D,r[14]=p*S+f*L+m*O+g*k,r[3]=v*_+y*E+b*P+x*N,r[7]=v*w+y*T+b*C+x*I,r[11]=v*M+y*A+b*R+x*D,r[15]=v*S+y*L+b*O+x*k,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],o=t[1],a=t[5],s=t[9],c=t[13],l=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*s*h-i*c*h-r*a*u+n*c*u+i*a*d-n*s*d)+t[7]*(+e*s*d-e*c*u+r*o*u-i*o*d+i*c*l-r*s*l)+t[11]*(+e*c*h-e*a*d-r*o*h+n*o*d+r*a*l-n*c*l)+t[15]*(-i*a*l-e*s*h+e*a*u+i*o*h-n*o*u+n*s*l)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],a=t[5],s=t[6],c=t[7],l=t[8],h=t[9],u=t[10],d=t[11],p=t[12],f=t[13],m=t[14],g=t[15],v=h*m*c-f*u*c+f*s*d-a*m*d-h*s*g+a*u*g,y=p*u*c-l*m*c-p*s*d+o*m*d+l*s*g-o*u*g,b=l*f*c-p*h*c+p*a*d-o*f*d-l*a*g+o*h*g,x=p*h*s-l*f*s-p*a*u+o*f*u+l*a*m-o*h*m,_=e*v+n*y+i*b+r*x;if(0===_)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const w=1/_;return t[0]=v*w,t[1]=(f*u*r-h*m*r-f*i*d+n*m*d+h*i*g-n*u*g)*w,t[2]=(a*m*r-f*s*r+f*i*c-n*m*c-a*i*g+n*s*g)*w,t[3]=(h*s*r-a*u*r-h*i*c+n*u*c+a*i*d-n*s*d)*w,t[4]=y*w,t[5]=(l*m*r-p*u*r+p*i*d-e*m*d-l*i*g+e*u*g)*w,t[6]=(p*s*r-o*m*r-p*i*c+e*m*c+o*i*g-e*s*g)*w,t[7]=(o*u*r-l*s*r+l*i*c-e*u*c-o*i*d+e*s*d)*w,t[8]=b*w,t[9]=(p*h*r-l*f*r-p*n*d+e*f*d+l*n*g-e*h*g)*w,t[10]=(o*f*r-p*a*r+p*n*c-e*f*c-o*n*g+e*a*g)*w,t[11]=(l*a*r-o*h*r-l*n*c+e*h*c+o*n*d-e*a*d)*w,t[12]=x*w,t[13]=(l*f*i-p*h*i+p*n*u-e*f*u-l*n*m+e*h*m)*w,t[14]=(p*a*i-o*f*i-p*n*s+e*f*s+o*n*m-e*a*m)*w,t[15]=(o*h*i-l*a*i+l*n*s-e*h*s-o*n*u+e*a*u)*w,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,o=t.x,a=t.y,s=t.z,c=r*o,l=r*a;return this.set(c*o+n,c*a-i*s,c*s+i*a,0,c*a+i*s,l*a+n,l*s-i*o,0,c*s-i*a,l*s+i*o,r*s*s+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n){return this.set(1,e,n,0,t,1,n,0,t,e,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,o=e._y,a=e._z,s=e._w,c=r+r,l=o+o,h=a+a,u=r*c,d=r*l,p=r*h,f=o*l,m=o*h,g=a*h,v=s*c,y=s*l,b=s*h,x=n.x,_=n.y,w=n.z;return i[0]=(1-(f+g))*x,i[1]=(d+b)*x,i[2]=(p-y)*x,i[3]=0,i[4]=(d-b)*_,i[5]=(1-(u+g))*_,i[6]=(m+v)*_,i[7]=0,i[8]=(p+y)*w,i[9]=(m-v)*w,i[10]=(1-(u+f))*w,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=Pt.set(i[0],i[1],i[2]).length();const o=Pt.set(i[4],i[5],i[6]).length(),a=Pt.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],Ct.copy(this);const s=1/r,c=1/o,l=1/a;return Ct.elements[0]*=s,Ct.elements[1]*=s,Ct.elements[2]*=s,Ct.elements[4]*=c,Ct.elements[5]*=c,Ct.elements[6]*=c,Ct.elements[8]*=l,Ct.elements[9]*=l,Ct.elements[10]*=l,e.setFromRotationMatrix(Ct),n.x=r,n.y=o,n.z=a,this}makePerspective(t,e,n,i,r,o){void 0===o&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");const a=this.elements,s=2*r/(e-t),c=2*r/(n-i),l=(e+t)/(e-t),h=(n+i)/(n-i),u=-(o+r)/(o-r),d=-2*o*r/(o-r);return a[0]=s,a[4]=0,a[8]=l,a[12]=0,a[1]=0,a[5]=c,a[9]=h,a[13]=0,a[2]=0,a[6]=0,a[10]=u,a[14]=d,a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this}makeOrthographic(t,e,n,i,r,o){const a=this.elements,s=1/(e-t),c=1/(n-i),l=1/(o-r),h=(e+t)*s,u=(n+i)*c,d=(o+r)*l;return a[0]=2*s,a[4]=0,a[8]=0,a[12]=-h,a[1]=0,a[5]=2*c,a[9]=0,a[13]=-u,a[2]=0,a[6]=0,a[10]=-2*l,a[14]=-d,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}const Pt=new tt,Ct=new Lt,Rt=new tt(0,0,0),Ot=new tt(1,1,1),Nt=new tt,It=new tt,Dt=new tt;class kt{constructor(t=0,e=0,n=0,i=kt.DefaultOrder){Object.defineProperty(this,"isEuler",{value:!0}),this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._order=i||this._order,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e,n){const i=H.clamp,r=t.elements,o=r[0],a=r[4],s=r[8],c=r[1],l=r[5],h=r[9],u=r[2],d=r[6],p=r[10];switch(e=e||this._order){case"XYZ":this._y=Math.asin(i(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-h,p),this._z=Math.atan2(-a,o)):(this._x=Math.atan2(d,l),this._z=0);break;case"YXZ":this._x=Math.asin(-i(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(s,p),this._z=Math.atan2(c,l)):(this._y=Math.atan2(-u,o),this._z=0);break;case"ZXY":this._x=Math.asin(i(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,p),this._z=Math.atan2(-a,l)):(this._y=0,this._z=Math.atan2(c,o));break;case"ZYX":this._y=Math.asin(-i(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,p),this._z=Math.atan2(c,o)):(this._x=0,this._z=Math.atan2(-a,l));break;case"YZX":this._z=Math.asin(i(c,-1,1)),Math.abs(c)<.9999999?(this._x=Math.atan2(-h,l),this._y=Math.atan2(-u,o)):(this._x=0,this._y=Math.atan2(s,p));break;case"XZY":this._z=Math.asin(-i(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(d,l),this._y=Math.atan2(s,o)):(this._x=Math.atan2(-h,p),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!1!==n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return zt.makeRotationFromQuaternion(t),this.setFromRotationMatrix(zt,e,n)}setFromVector3(t,e){return this.set(t.x,t.y,t.z,e||this._order)}reorder(t){return Bt.setFromEuler(this),this.setFromQuaternion(Bt,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new tt(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}kt.DefaultOrder="XYZ",kt.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];const zt=new Lt,Bt=new K;class Ft{constructor(){this.mask=1}set(t){this.mask=1<1){for(let t=0;t1){for(let t=0;t0){i.children=[];for(let e=0;e0){i.animations=[];for(let e=0;e0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),a.length>0&&(n.images=a),s.length>0&&(n.shapes=s),c.length>0&&(n.skeletons=c),l.length>0&&(n.animations=l)}return n.object=i,n;function o(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}},clone:function(t){return(new this.constructor).copy(this,t)},copy:function(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e1?void 0:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return void 0===t&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),t=new tt),t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||ne.getNormalMatrix(t),i=this.coplanarPoint(te).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}}const re=new tt,oe=new tt,ae=new tt,se=new tt,ce=new tt,le=new tt,he=new tt,ue=new tt,de=new tt,pe=new tt;class fe{constructor(t,e,n){this.a=void 0!==t?t:new tt,this.b=void 0!==e?e:new tt,this.c=void 0!==n?n:new tt}static getNormal(t,e,n,i){void 0===i&&(console.warn("THREE.Triangle: .getNormal() target is now required"),i=new tt),i.subVectors(n,e),re.subVectors(t,e),i.cross(re);const r=i.lengthSq();return r>0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){re.subVectors(i,e),oe.subVectors(n,e),ae.subVectors(t,e);const o=re.dot(re),a=re.dot(oe),s=re.dot(ae),c=oe.dot(oe),l=oe.dot(ae),h=o*c-a*a;if(void 0===r&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),r=new tt),0===h)return r.set(-2,-1,-1);const u=1/h,d=(c*s-a*l)*u,p=(o*l-a*s)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,se),se.x>=0&&se.y>=0&&se.x+se.y<=1}static getUV(t,e,n,i,r,o,a,s){return this.getBarycoord(t,e,n,i,se),s.set(0,0),s.addScaledVector(r,se.x),s.addScaledVector(o,se.y),s.addScaledVector(a,se.z),s}static isFrontFacing(t,e,n,i){return re.subVectors(n,e),oe.subVectors(t,e),re.cross(oe).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return re.subVectors(this.c,this.b),oe.subVectors(this.a,this.b),.5*re.cross(oe).length()}getMidpoint(t){return void 0===t&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),t=new tt),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return fe.getNormal(this.a,this.b,this.c,t)}getPlane(t){return void 0===t&&(console.warn("THREE.Triangle: .getPlane() target is now required"),t=new ie),t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return fe.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return fe.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return fe.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return fe.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),e=new tt);const n=this.a,i=this.b,r=this.c;let o,a;ce.subVectors(i,n),le.subVectors(r,n),ue.subVectors(t,n);const s=ce.dot(ue),c=le.dot(ue);if(s<=0&&c<=0)return e.copy(n);de.subVectors(t,i);const l=ce.dot(de),h=le.dot(de);if(l>=0&&h<=l)return e.copy(i);const u=s*h-l*c;if(u<=0&&s>=0&&l<=0)return o=s/(s-l),e.copy(n).addScaledVector(ce,o);pe.subVectors(t,r);const d=ce.dot(pe),p=le.dot(pe);if(p>=0&&d<=p)return e.copy(r);const f=d*c-s*p;if(f<=0&&c>=0&&p<=0)return a=c/(c-p),e.copy(n).addScaledVector(le,a);const m=l*p-d*h;if(m<=0&&h-l>=0&&d-p>=0)return he.subVectors(r,i),a=(h-l)/(h-l+(d-p)),e.copy(i).addScaledVector(he,a);const g=1/(m+f+u);return o=f*g,a=u*g,e.copy(n).addScaledVector(ce,o).addScaledVector(le,a)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const me={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},ge={h:0,s:0,l:0},ve={h:0,s:0,l:0};function ye(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function be(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function xe(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class _e{constructor(t,e,n){return Object.defineProperty(this,"isColor",{value:!0}),void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){if(t=H.euclideanModulo(t,1),e=H.clamp(e,0,1),n=H.clamp(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=ye(r,i,t+1/3),this.g=ye(r,i,t),this.b=ye(r,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(t)){let t;const i=n[1],r=n[2];switch(i){case"rgb":case"rgba":if(t=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(r))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[5]),this;if(t=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(r))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[5]),this;break;case"hsl":case"hsla":if(t=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(r)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,r=parseInt(t[3],10)/100;return e(t[5]),this.setHSL(n,i,r)}}}else if(n=/^\#([A-Fa-f0-9]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this}setColorName(t){const e=me[t];return void 0!==e?this.setHex(e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=be(t.r),this.g=be(t.g),this.b=be(t.b),this}copyLinearToSRGB(t){return this.r=xe(t.r),this.g=xe(t.g),this.b=xe(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return("000000"+this.getHex().toString(16)).slice(-6)}getHSL(t){void 0===t&&(console.warn("THREE.Color: .getHSL() target is now required"),t={h:0,s:0,l:0});const e=this.r,n=this.g,i=this.b,r=Math.max(e,n,i),o=Math.min(e,n,i);let a,s;const c=(o+r)/2;if(o===r)a=0,s=0;else{const t=r-o;switch(s=c<=.5?t/(r+o):t/(2-r-o),r){case e:a=(n-i)/t+(n0&&(n.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(n.morphTargets=!0),!0===this.morphNormals&&(n.morphNormals=!0),!0===this.skinning&&(n.skinning=!0),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length>0&&(n.textures=e),r.length>0&&(n.images=r)}return n},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.flatShading=t.flatShading,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),Object.defineProperty(Se.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Ee.prototype=Object.create(Se.prototype),Ee.prototype.constructor=Ee,Ee.prototype.isMeshBasicMaterial=!0,Ee.prototype.copy=function(t){return Se.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this};const Te=new tt,Ae=new G;function Le(t,e,n){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=k,this.updateRange={offset:0,count:-1},this.version=0}function Pe(t,e,n){Le.call(this,new Int8Array(t),e,n)}function Ce(t,e,n){Le.call(this,new Uint8Array(t),e,n)}function Re(t,e,n){Le.call(this,new Uint8ClampedArray(t),e,n)}function Oe(t,e,n){Le.call(this,new Int16Array(t),e,n)}function Ne(t,e,n){Le.call(this,new Uint16Array(t),e,n)}function Ie(t,e,n){Le.call(this,new Int32Array(t),e,n)}function De(t,e,n){Le.call(this,new Uint32Array(t),e,n)}function ke(t,e,n){Le.call(this,new Uint16Array(t),e,n)}function ze(t,e,n){Le.call(this,new Float32Array(t),e,n)}function Be(t,e,n){Le.call(this,new Float64Array(t),e,n)}Object.defineProperty(Le.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(Le.prototype,{isBufferAttribute:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,r=this.itemSize;i0,o=i[1]&&i[1].length>0,a=t.morphTargets,s=a.length;let c;if(s>0){c=[];for(let t=0;t0){u=[];for(let t=0;t0&&0===e.length&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(let t=0;te&&(e=t[n]);return e}const Ue={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:"undefined"!=typeof Uint8ClampedArray?Uint8ClampedArray:Uint8Array,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function He(t,e){return new Ue[t](e)}let Ge=1;const Ve=new Lt,We=new Kt,qe=new tt,Xe=new it,Ye=new it,Ze=new tt;function Je(){Object.defineProperty(this,"id",{value:Ge+=2}),this.uuid=H.generateUUID(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}Je.prototype=Object.assign(Object.create(F.prototype),{constructor:Je,isBufferGeometry:!0,getIndex:function(){return this.index},setIndex:function(t){return Array.isArray(t)?this.index=new(je(t)>65535?De:Ne)(t,1):this.index=t,this},getAttribute:function(t){return this.attributes[t]},setAttribute:function(t,e){return this.attributes[t]=e,this},deleteAttribute:function(t){return delete this.attributes[t],this},hasAttribute:function(t){return void 0!==this.attributes[t]},addGroup:function(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})},clearGroups:function(){this.groups=[]},setDrawRange:function(t,e){this.drawRange.start=t,this.drawRange.count=e},applyMatrix4:function(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new V).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(t){return Ve.makeRotationX(t),this.applyMatrix4(Ve),this},rotateY:function(t){return Ve.makeRotationY(t),this.applyMatrix4(Ve),this},rotateZ:function(t){return Ve.makeRotationZ(t),this.applyMatrix4(Ve),this},translate:function(t,e,n){return Ve.makeTranslation(t,e,n),this.applyMatrix4(Ve),this},scale:function(t,e,n){return Ve.makeScale(t,e,n),this.applyMatrix4(Ve),this},lookAt:function(t){return We.lookAt(t),We.updateMatrix(),this.applyMatrix4(We.matrix),this},center:function(){return this.computeBoundingBox(),this.boundingBox.getCenter(qe).negate(),this.translate(qe.x,qe.y,qe.z),this},setFromObject:function(t){const e=t.geometry;if(t.isPoints||t.isLine){const t=new ze(3*e.vertices.length,3),n=new ze(3*e.colors.length,3);if(this.setAttribute("position",t.copyVector3sArray(e.vertices)),this.setAttribute("color",n.copyColorsArray(e.colors)),e.lineDistances&&e.lineDistances.length===e.vertices.length){const t=new ze(e.lineDistances.length,1);this.setAttribute("lineDistance",t.copyArray(e.lineDistances))}null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone())}else t.isMesh&&e&&e.isGeometry&&this.fromGeometry(e);return this},setFromPoints:function(t){const e=[];for(let n=0,i=t.length;n0){const e=new Float32Array(3*t.normals.length);this.setAttribute("normal",new Le(e,3).copyVector3sArray(t.normals))}if(t.colors.length>0){const e=new Float32Array(3*t.colors.length);this.setAttribute("color",new Le(e,3).copyColorsArray(t.colors))}if(t.uvs.length>0){const e=new Float32Array(2*t.uvs.length);this.setAttribute("uv",new Le(e,2).copyVector2sArray(t.uvs))}if(t.uvs2.length>0){const e=new Float32Array(2*t.uvs2.length);this.setAttribute("uv2",new Le(e,2).copyVector2sArray(t.uvs2))}this.groups=t.groups;for(const e in t.morphTargets){const n=[],i=t.morphTargets[e];for(let t=0,e=i.length;t0){const e=new ze(4*t.skinIndices.length,4);this.setAttribute("skinIndex",e.copyVector4sArray(t.skinIndices))}if(t.skinWeights.length>0){const e=new ze(4*t.skinWeights.length,4);this.setAttribute("skinWeight",e.copyVector4sArray(t.skinWeights))}return null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),this},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new it);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".',this),void this.boundingBox.set(new tt(-1/0,-1/0,-1/0),new tt(1/0,1/0,1/0));if(void 0!==t){if(this.boundingBox.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e],r=i.toJSON(t.data);""!==i.name&&(r.name=i.name),t.data.attributes[e]=r}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],o=[];for(let e=0,i=n.length;e0&&(i[e]=o,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const o=this.groups;o.length>0&&(t.data.groups=JSON.parse(JSON.stringify(o)));const a=this.boundingSphere;return null!==a&&(t.data.boundingSphere={center:a.center.toArray(),radius:a.radius}),t},clone:function(){return(new Je).copy(this)},copy:function(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;tn.far?null:{distance:l,point:fn.clone(),object:t}}function vn(t,e,n,i,r,o,a,s,c,l,h,u){tn.fromBufferAttribute(r,l),en.fromBufferAttribute(r,h),nn.fromBufferAttribute(r,u);const d=t.morphTargetInfluences;if(e.morphTargets&&o&&d){sn.set(0,0,0),cn.set(0,0,0),ln.set(0,0,0);for(let t=0,e=o.length;t0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}},raycast:function(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),Ke.copy(n.boundingSphere),Ke.applyMatrix4(r),!1===t.ray.intersectsSphere(Ke))return;if($e.copy(r).invert(),Qe.copy(t.ray).applyMatrix4($e),null!==n.boundingBox&&!1===Qe.intersectsBox(n.boundingBox))return;let o;if(n.isBufferGeometry){const r=n.index,a=n.attributes.position,s=n.morphAttributes.position,c=n.morphTargetsRelative,l=n.attributes.uv,h=n.attributes.uv2,u=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=u.length;n0&&(c=l);for(let n=0,l=s.length;n0?1:-1,l.push(A.x,A.y,A.z),h.push(s/m),h.push(1-o/g),E+=1}}for(let t=0;t0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e},Mn.prototype=Object.assign(Object.create(Kt.prototype),{constructor:Mn,isCamera:!0,copy:function(t,e){return Kt.prototype.copy.call(this,t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this},getWorldDirection:function(t){void 0===t&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),t=new tt),this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()},updateMatrixWorld:function(t){Kt.prototype.updateMatrixWorld.call(this,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()},updateWorldMatrix:function(t,e){Kt.prototype.updateWorldMatrix.call(this,t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()},clone:function(){return(new this.constructor).copy(this)}}),Sn.prototype=Object.assign(Object.create(Mn.prototype),{constructor:Sn,isPerspectiveCamera:!0,copy:function(t,e){return Mn.prototype.copy.call(this,t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this},setFocalLength:function(t){const e=.5*this.getFilmHeight()/t;this.fov=2*H.RAD2DEG*Math.atan(e),this.updateProjectionMatrix()},getFocalLength:function(){const t=Math.tan(.5*H.DEG2RAD*this.fov);return.5*this.getFilmHeight()/t},getEffectiveFOV:function(){return 2*H.RAD2DEG*Math.atan(Math.tan(.5*H.DEG2RAD*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,1)},setViewOffset:function(t,e,n,i,r,o){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=o,this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()},updateProjectionMatrix:function(){const t=this.near;let e=t*Math.tan(.5*H.DEG2RAD*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const o=this.view;if(null!==this.view&&this.view.enabled){const t=o.fullWidth,a=o.fullHeight;r+=o.offsetX*i/t,e-=o.offsetY*n/a,i*=o.width/t,n*=o.height/a}const a=this.filmOffset;0!==a&&(r+=t*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()},toJSON:function(t){const e=Kt.prototype.toJSON.call(this,t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}});const En=90;function Tn(t,e,n){if(Kt.call(this),this.type="CubeCamera",!0!==n.isWebGLCubeRenderTarget)return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");this.renderTarget=n;const i=new Sn(En,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new tt(1,0,0)),this.add(i);const r=new Sn(En,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new tt(-1,0,0)),this.add(r);const o=new Sn(En,1,t,e);o.layers=this.layers,o.up.set(0,0,1),o.lookAt(new tt(0,1,0)),this.add(o);const a=new Sn(En,1,t,e);a.layers=this.layers,a.up.set(0,0,-1),a.lookAt(new tt(0,-1,0)),this.add(a);const s=new Sn(En,1,t,e);s.layers=this.layers,s.up.set(0,-1,0),s.lookAt(new tt(0,0,1)),this.add(s);const c=new Sn(En,1,t,e);c.layers=this.layers,c.up.set(0,-1,0),c.lookAt(new tt(0,0,-1)),this.add(c),this.update=function(t,e){null===this.parent&&this.updateMatrixWorld();const l=t.xr.enabled,h=t.getRenderTarget();t.xr.enabled=!1;const u=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,o),t.setRenderTarget(n,3),t.render(e,a),t.setRenderTarget(n,4),t.render(e,s),n.texture.generateMipmaps=u,t.setRenderTarget(n,5),t.render(e,c),t.setRenderTarget(h),t.xr.enabled=l}}function An(t,e,n,i,r,o,a,s,c,l){t=void 0!==t?t:[],e=void 0!==e?e:301,a=void 0!==a?a:M,Y.call(this,t,e,n,i,r,o,a,s,c,l),this.flipY=!1,this._needsFlipEnvMap=!0}function Ln(t,e,n){Number.isInteger(e)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),e=n),$.call(this,t,t,e),e=e||{},this.texture=new An(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture._needsFlipEnvMap=!1}function Pn(t,e,n,i,r,o,a,s,c,l,h,u){Y.call(this,null,o,a,s,c,l,i,r,h,u),this.image={data:t||null,width:e||1,height:n||1},this.magFilter=void 0!==c?c:f,this.minFilter=void 0!==l?l:f,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}Tn.prototype=Object.create(Kt.prototype),Tn.prototype.constructor=Tn,An.prototype=Object.create(Y.prototype),An.prototype.constructor=An,An.prototype.isCubeTexture=!0,Object.defineProperty(An.prototype,"images",{get:function(){return this.image},set:function(t){this.image=t}}),Ln.prototype=Object.create($.prototype),Ln.prototype.constructor=Ln,Ln.prototype.isWebGLCubeRenderTarget=!0,Ln.prototype.fromEquirectangularTexture=function(t,e){this.texture.type=e.type,this.texture.format=S,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t#include \n\t\t\t\t#include \n\n\t\t\t}\n\t\t",fragmentShader:"\n\n\t\t\tuniform sampler2D tEquirect;\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t}\n\t\t"},i=new yn(5,5,5),r=new wn({name:"CubemapFromEquirect",uniforms:bn(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const o=new mn(i,r),a=e.minFilter;e.minFilter===g&&(e.minFilter=m);return new Tn(1,10,this).update(t,o),e.minFilter=a,o.geometry.dispose(),o.material.dispose(),this},Ln.prototype.clear=function(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)},Pn.prototype=Object.create(Y.prototype),Pn.prototype.constructor=Pn,Pn.prototype.isDataTexture=!0;const Cn=new bt,Rn=new tt;class On{constructor(t,e,n,i,r,o){this.planes=[void 0!==t?t:new ie,void 0!==e?e:new ie,void 0!==n?n:new ie,void 0!==i?i:new ie,void 0!==r?r:new ie,void 0!==o?o:new ie]}set(t,e,n,i,r,o){const a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(n),a[3].copy(i),a[4].copy(r),a[5].copy(o),this}clone(){return(new this.constructor).copy(this)}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],o=n[2],a=n[3],s=n[4],c=n[5],l=n[6],h=n[7],u=n[8],d=n[9],p=n[10],f=n[11],m=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(a-i,h-s,f-u,y-m).normalize(),e[1].setComponents(a+i,h+s,f+u,y+m).normalize(),e[2].setComponents(a+r,h+c,f+d,y+g).normalize(),e[3].setComponents(a-r,h-c,f-d,y-g).normalize(),e[4].setComponents(a-o,h-l,f-p,y-v).normalize(),e[5].setComponents(a+o,h+l,f+p,y+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),Cn.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(Cn)}intersectsSprite(t){return Cn.center.set(0,0,0),Cn.radius=.7071067811865476,Cn.applyMatrix4(t.matrixWorld),this.intersectsSphere(Cn)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)0?t.max.x:t.min.x,Rn.y=i.normal.y>0?t.max.y:t.min.y,Rn.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(Rn)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}}function Nn(){let t=null,e=!1,n=null,i=null;function r(e,o){n(e,o),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function In(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_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}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * 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}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat 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_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\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 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\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",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",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; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\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 max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\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};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\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}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\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 linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.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}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.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\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\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\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + 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 ), m0, cubeUV_maxMipLevel );\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",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( 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 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",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, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\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",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\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",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\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",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\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",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif",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",fog_vertex:"#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\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",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 texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\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 GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\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 getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.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 getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.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 getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.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 GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\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 GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).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_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\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.specularRoughness;\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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * 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}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\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\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( 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, geometry, 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\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\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, 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\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( 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, geometry, 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, geometry, 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\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\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 ], geometry );\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",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif",normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).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 * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",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}\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 linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( 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 invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",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",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#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\tvarying vec4 vSpotShadowCoord[ 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\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#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\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ 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 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",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",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, vSpotShadowCoord[ 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}",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",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",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",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",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",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 toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmissionmap_fragment:"#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif",transmissionmap_pars_fragment:"#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"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}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",cube_vert:"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}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\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\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}",depth_vert:"#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#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}",distanceRGBA_frag:"#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 \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\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}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\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}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"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 \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\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}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#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#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\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 \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#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#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\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\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#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\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\tvViewPosition = - mvPosition.xyz;\n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \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\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#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#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \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\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#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#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#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\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\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 \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\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#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\n#include \n#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#include \n\t#include \n\t#include \n#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\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#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\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\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#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\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#include \n#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\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\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\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \nvoid main() {\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}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"},zn={common:{diffuse:{value:new _e(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new V},uv2Transform:{value:new V},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new G(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new _e(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new _e(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new V}},sprite:{diffuse:{value:new _e(15658734)},opacity:{value:1},center:{value:new G(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new V}}},Bn={basic:{uniforms:xn([zn.common,zn.specularmap,zn.envmap,zn.aomap,zn.lightmap,zn.fog]),vertexShader:kn.meshbasic_vert,fragmentShader:kn.meshbasic_frag},lambert:{uniforms:xn([zn.common,zn.specularmap,zn.envmap,zn.aomap,zn.lightmap,zn.emissivemap,zn.fog,zn.lights,{emissive:{value:new _e(0)}}]),vertexShader:kn.meshlambert_vert,fragmentShader:kn.meshlambert_frag},phong:{uniforms:xn([zn.common,zn.specularmap,zn.envmap,zn.aomap,zn.lightmap,zn.emissivemap,zn.bumpmap,zn.normalmap,zn.displacementmap,zn.fog,zn.lights,{emissive:{value:new _e(0)},specular:{value:new _e(1118481)},shininess:{value:30}}]),vertexShader:kn.meshphong_vert,fragmentShader:kn.meshphong_frag},standard:{uniforms:xn([zn.common,zn.envmap,zn.aomap,zn.lightmap,zn.emissivemap,zn.bumpmap,zn.normalmap,zn.displacementmap,zn.roughnessmap,zn.metalnessmap,zn.fog,zn.lights,{emissive:{value:new _e(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:kn.meshphysical_vert,fragmentShader:kn.meshphysical_frag},toon:{uniforms:xn([zn.common,zn.aomap,zn.lightmap,zn.emissivemap,zn.bumpmap,zn.normalmap,zn.displacementmap,zn.gradientmap,zn.fog,zn.lights,{emissive:{value:new _e(0)}}]),vertexShader:kn.meshtoon_vert,fragmentShader:kn.meshtoon_frag},matcap:{uniforms:xn([zn.common,zn.bumpmap,zn.normalmap,zn.displacementmap,zn.fog,{matcap:{value:null}}]),vertexShader:kn.meshmatcap_vert,fragmentShader:kn.meshmatcap_frag},points:{uniforms:xn([zn.points,zn.fog]),vertexShader:kn.points_vert,fragmentShader:kn.points_frag},dashed:{uniforms:xn([zn.common,zn.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:kn.linedashed_vert,fragmentShader:kn.linedashed_frag},depth:{uniforms:xn([zn.common,zn.displacementmap]),vertexShader:kn.depth_vert,fragmentShader:kn.depth_frag},normal:{uniforms:xn([zn.common,zn.bumpmap,zn.normalmap,zn.displacementmap,{opacity:{value:1}}]),vertexShader:kn.normal_vert,fragmentShader:kn.normal_frag},sprite:{uniforms:xn([zn.sprite,zn.fog]),vertexShader:kn.sprite_vert,fragmentShader:kn.sprite_frag},background:{uniforms:{uvTransform:{value:new V},t2D:{value:null}},vertexShader:kn.background_vert,fragmentShader:kn.background_frag},cube:{uniforms:xn([zn.envmap,{opacity:{value:1}}]),vertexShader:kn.cube_vert,fragmentShader:kn.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:kn.equirect_vert,fragmentShader:kn.equirect_frag},distanceRGBA:{uniforms:xn([zn.common,zn.displacementmap,{referencePosition:{value:new tt},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:kn.distanceRGBA_vert,fragmentShader:kn.distanceRGBA_frag},shadow:{uniforms:xn([zn.lights,zn.fog,{color:{value:new _e(0)},opacity:{value:1}}]),vertexShader:kn.shadow_vert,fragmentShader:kn.shadow_frag}};function Fn(t,e,n,i,r){const o=new _e(0);let a,s,c=0,l=null,h=0,u=null;function d(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,r)}return{getClearColor:function(){return o},setClearColor:function(t,e=1){o.set(t),c=e,d(o,c)},getClearAlpha:function(){return c},setClearAlpha:function(t){c=t,d(o,c)},render:function(n,r,p,f){let m=!0===r.isScene?r.background:null;m&&m.isTexture&&(m=e.get(m));const g=t.xr,v=g.getSession&&g.getSession();v&&"additive"===v.environmentBlendMode&&(m=null),null===m?d(o,c):m&&m.isColor&&(d(m,1),f=!0),(t.autoClear||f)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),m&&(m.isCubeTexture||m.isWebGLCubeRenderTarget||306===m.mapping)?(void 0===s&&(s=new mn(new yn(1,1,1),new wn({name:"BackgroundCubeMaterial",uniforms:bn(Bn.cube.uniforms),vertexShader:Bn.cube.vertexShader,fragmentShader:Bn.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),s.geometry.deleteAttribute("normal"),s.geometry.deleteAttribute("uv"),s.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(s.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(s)),m.isWebGLCubeRenderTarget&&(m=m.texture),s.material.uniforms.envMap.value=m,s.material.uniforms.flipEnvMap.value=m.isCubeTexture&&m._needsFlipEnvMap?-1:1,l===m&&h===m.version&&u===t.toneMapping||(s.material.needsUpdate=!0,l=m,h=m.version,u=t.toneMapping),n.unshift(s,s.geometry,s.material,0,0,null)):m&&m.isTexture&&(void 0===a&&(a=new mn(new Dn(2,2),new wn({name:"BackgroundMaterial",uniforms:bn(Bn.background.uniforms),vertexShader:Bn.background.vertexShader,fragmentShader:Bn.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute("normal"),Object.defineProperty(a.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(a)),a.material.uniforms.t2D.value=m,!0===m.matrixAutoUpdate&&m.updateMatrix(),a.material.uniforms.uvTransform.value.copy(m.matrix),l===m&&h===m.version&&u===t.toneMapping||(a.material.needsUpdate=!0,l=m,h=m.version,u=t.toneMapping),n.unshift(a,a.geometry,a.material,0,0,null))}}}function jn(t,e,n,i){const r=t.getParameter(34921),o=i.isWebGL2?null:e.get("OES_vertex_array_object"),a=i.isWebGL2||null!==o,s={},c=d(null);let l=c;function h(e){return i.isWebGL2?t.bindVertexArray(e):o.bindVertexArrayOES(e)}function u(e){return i.isWebGL2?t.deleteVertexArray(e):o.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t=0){const o=c[e];if(void 0!==o){const e=o.normalized,r=o.itemSize,a=n.get(o);if(void 0===a)continue;const c=a.buffer,l=a.type,h=a.bytesPerElement;if(o.isInterleavedBufferAttribute){const n=o.data,a=n.stride,u=o.offset;n&&n.isInstancedInterleavedBuffer?(m(i,n.meshPerAttribute),void 0===s._maxInstanceCount&&(s._maxInstanceCount=n.meshPerAttribute*n.count)):f(i),t.bindBuffer(34962,c),v(i,r,l,e,a*h,u*h)}else o.isInstancedBufferAttribute?(m(i,o.meshPerAttribute),void 0===s._maxInstanceCount&&(s._maxInstanceCount=o.meshPerAttribute*o.count)):f(i),t.bindBuffer(34962,c),v(i,r,l,e,0,0)}else if("instanceMatrix"===e){const e=n.get(r.instanceMatrix);if(void 0===e)continue;const o=e.buffer,a=e.type;m(i+0,1),m(i+1,1),m(i+2,1),m(i+3,1),t.bindBuffer(34962,o),t.vertexAttribPointer(i+0,4,a,!1,64,0),t.vertexAttribPointer(i+1,4,a,!1,64,16),t.vertexAttribPointer(i+2,4,a,!1,64,32),t.vertexAttribPointer(i+3,4,a,!1,64,48)}else if("instanceColor"===e){const e=n.get(r.instanceColor);if(void 0===e)continue;const o=e.buffer,a=e.type;m(i,1),t.bindBuffer(34962,o),t.vertexAttribPointer(i,3,a,!1,12,0)}else if(void 0!==h){const n=h[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i,n);break;case 3:t.vertexAttrib3fv(i,n);break;case 4:t.vertexAttrib4fv(i,n);break;default:t.vertexAttrib1fv(i,n)}}}}g()}(r,c,u,y),null!==b&&t.bindBuffer(34963,n.get(b).buffer))},reset:y,resetDefaultState:b,dispose:function(){y();for(const t in s){const e=s[t];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete s[t]}},releaseStatesOfGeometry:function(t){if(void 0===s[t.id])return;const e=s[t.id];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete s[t.id]},releaseStatesOfProgram:function(t){for(const e in s){const n=s[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)u(i[t].object),delete i[t];delete n[t.id]}},initAttributes:p,enableAttribute:f,disableUnusedAttributes:g}}function Un(t,e,n,i){const r=i.isWebGL2;let o;this.setMode=function(t){o=t},this.render=function(e,i){t.drawArrays(o,e,i),n.update(i,o,1)},this.renderInstances=function(i,a,s){if(0===s)return;let c,l;if(r)c=t,l="drawArraysInstanced";else if(c=e.get("ANGLE_instanced_arrays"),l="drawArraysInstancedANGLE",null===c)return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");c[l](o,i,a,s),n.update(a,o,s)}}function Hn(t,e,n){let i;function r(e){if("highp"===e){if(t.getShaderPrecisionFormat(35633,36338).precision>0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const o="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let a=void 0!==n.precision?n.precision:"highp";const s=r(a);s!==a&&(console.warn("THREE.WebGLRenderer:",a,"not supported, using",s,"instead."),a=s);const c=!0===n.logarithmicDepthBuffer,l=t.getParameter(34930),h=t.getParameter(35660),u=t.getParameter(3379),d=t.getParameter(34076),p=t.getParameter(34921),f=t.getParameter(36347),m=t.getParameter(36348),g=t.getParameter(36349),v=h>0,y=o||!!e.get("OES_texture_float");return{isWebGL2:o,getMaxAnisotropy:function(){if(void 0!==i)return i;const n=e.get("EXT_texture_filter_anisotropic");return i=null!==n?t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,i},getMaxPrecision:r,precision:a,logarithmicDepthBuffer:c,maxTextures:l,maxVertexTextures:h,maxTextureSize:u,maxCubemapSize:d,maxAttributes:p,maxVertexUniforms:f,maxVaryings:m,maxFragmentUniforms:g,vertexTextures:v,floatFragmentTextures:y,floatVertexTextures:v&&y,maxSamples:o?t.getParameter(36183):0}}function Gn(t){const e=this;let n=null,i=0,r=!1,o=!1;const a=new ie,s=new V,c={value:null,needsUpdate:!1};function l(){c.value!==n&&(c.value=n,c.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function h(t,n,i,r){const o=null!==t?t.length:0;let l=null;if(0!==o){if(l=c.value,!0!==r||null===l){const e=i+4*o,r=n.matrixWorldInverse;s.getNormalMatrix(r),(null===l||l.length0){const a=t.getRenderList(),s=t.getRenderTarget(),c=t.getRenderState(),l=new Ln(o.height/2);return l.fromEquirectangularTexture(t,r),e.set(r,l),t.setRenderTarget(s),t.setRenderList(a),t.setRenderState(c),r.addEventListener("dispose",i),n(l.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}function Wn(t){const e={};return{has:function(n){if(void 0!==e[n])return null!==e[n];let i;switch(n){case"WEBGL_depth_texture":i=t.getExtension("WEBGL_depth_texture")||t.getExtension("MOZ_WEBGL_depth_texture")||t.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":i=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":i=t.getExtension("WEBGL_compressed_texture_s3tc")||t.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":i=t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:i=t.getExtension(n)}return e[n]=i,null!==i},get:function(t){return this.has(t)||console.warn("THREE.WebGLRenderer: "+t+" extension not supported."),e[t]}}}function qn(t,e,n,i){const r=new WeakMap,o=new WeakMap;function a(t){const s=t.target,c=r.get(s);null!==c.index&&e.remove(c.index);for(const t in c.attributes)e.remove(c.attributes[t]);s.removeEventListener("dispose",a),r.delete(s);const l=o.get(c);l&&(e.remove(l),o.delete(c)),i.releaseStatesOfGeometry(c),!0===s.isInstancedBufferGeometry&&delete s._maxInstanceCount,n.memory.geometries--}function s(t){const n=[],i=t.index,r=t.attributes.position;let a=0;if(null!==i){const t=i.array;a=i.version;for(let e=0,i=t.length;e65535?De:Ne)(n,1);s.version=a;const c=o.get(t);c&&e.remove(c),o.set(t,s)}return{get:function(t,e){let i=r.get(e);return i||(e.addEventListener("dispose",a),e.isBufferGeometry?i=e:e.isGeometry&&(void 0===e._bufferGeometry&&(e._bufferGeometry=(new Je).setFromObject(t)),i=e._bufferGeometry),r.set(e,i),n.memory.geometries++,i)},update:function(t){const n=t.attributes;for(const t in n)e.update(n[t],34962);const i=t.morphAttributes;for(const t in i){const n=i[t];for(let t=0,i=n.length;t0)return t;const r=e*n;let o=oi[r];if(void 0===o&&(o=new Float32Array(r),oi[r]=o),0!==e){i.toArray(o,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(o,r)}return o}function ui(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n/gm;function sr(t){return t.replace(ar,cr)}function cr(t,e){const n=kn[e];if(void 0===n)throw new Error("Can not resolve #include <"+e+">");return sr(n)}const lr=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,hr=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function ur(t){return t.replace(hr,pr).replace(lr,dr)}function dr(t,e,n,i){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),pr(t,e,n,i)}function pr(t,e,n,i){let r="";for(let t=parseInt(e);t0?t.gammaFactor:1,p=n.isWebGL2?"":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||"physical"===t.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(t.extensionFragDepth||t.logarithmicDepthBuffer)&&t.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",t.extensionDrawBuffers&&t.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(t.extensionShaderTextureLOD||t.envMap)&&t.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(ir).join("\n")}(n),f=function(t){const e=[];for(const n in t){const i=t[n];!1!==i&&e.push("#define "+n+" "+i)}return e.join("\n")}(o),m=r.createProgram();let g,v,y=n.glslVersion?"#version "+n.glslVersion+"\n":"";n.isRawShaderMaterial?(g=[f].filter(ir).join("\n"),g.length>0&&(g+="\n"),v=[p,f].filter(ir).join("\n"),v.length>0&&(v+="\n")):(g=[fr(n),"#define SHADER_NAME "+n.shaderName,f,n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+d,"#define MAX_BONES "+n.maxBones,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+h:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.useVertexTexture?"#define BONE_TEXTURE":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+c:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(ir).join("\n"),v=[p,fr(n),"#define SHADER_NAME "+n.shaderName,f,n.alphaTest?"#define ALPHATEST "+n.alphaTest+(n.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+d,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+l:"",n.envMap?"#define "+h:"",n.envMap?"#define "+u:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.sheen?"#define USE_SHEEN":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+c:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?kn.tonemapping_pars_fragment:"",0!==n.toneMapping?nr("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",kn.encodings_pars_fragment,n.map?tr("mapTexelToLinear",n.mapEncoding):"",n.matcap?tr("matcapTexelToLinear",n.matcapEncoding):"",n.envMap?tr("envMapTexelToLinear",n.envMapEncoding):"",n.emissiveMap?tr("emissiveMapTexelToLinear",n.emissiveMapEncoding):"",n.lightMap?tr("lightMapTexelToLinear",n.lightMapEncoding):"",er("linearToOutputTexel",n.outputEncoding),n.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(ir).join("\n")),a=sr(a),a=rr(a,n),a=or(a,n),s=sr(s),s=rr(s,n),s=or(s,n),a=ur(a),s=ur(s),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(y="#version 300 es\n",g=["#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+g,v=["#define varying in",n.glslVersion===B?"":"out highp vec4 pc_fragColor;",n.glslVersion===B?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+v);const b=y+v+s,x=Ji(r,35633,y+g+a),_=Ji(r,35632,b);if(r.attachShader(m,x),r.attachShader(m,_),void 0!==n.index0AttributeName?r.bindAttribLocation(m,0,n.index0AttributeName):!0===n.morphTargets&&r.bindAttribLocation(m,0,"position"),r.linkProgram(m),t.debug.checkShaderErrors){const t=r.getProgramInfoLog(m).trim(),e=r.getShaderInfoLog(x).trim(),n=r.getShaderInfoLog(_).trim();let i=!0,o=!0;if(!1===r.getProgramParameter(m,35714)){i=!1;const e=Ki(r,x,"vertex"),n=Ki(r,_,"fragment");console.error("THREE.WebGLProgram: shader error: ",r.getError(),"35715",r.getProgramParameter(m,35715),"gl.getProgramInfoLog",t,e,n)}else""!==t?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",t):""!==e&&""!==n||(o=!1);o&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:g},fragmentShader:{log:n,prefix:v}})}let w,M;return r.deleteShader(x),r.deleteShader(_),this.getUniforms=function(){return void 0===w&&(w=new Zi(r,m)),w},this.getAttributes=function(){return void 0===M&&(M=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r0,maxBones:w,useVertexTexture:l,morphTargets:r.morphTargets,morphNormals:r.morphNormals,maxMorphTargets:t.maxMorphTargets,maxMorphNormals:t.maxMorphNormals,numDirLights:a.directional.length,numPointLights:a.point.length,numSpotLights:a.spot.length,numRectAreaLights:a.rectArea.length,numHemiLights:a.hemi.length,numDirLightShadows:a.directionalShadowMap.length,numPointLightShadows:a.pointShadowMap.length,numSpotLightShadows:a.spotShadowMap.length,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:r.dithering,shadowMapEnabled:t.shadowMap.enabled&&f.length>0,shadowMapType:t.shadowMap.type,toneMapping:r.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:r.premultipliedAlpha,alphaTest:r.alphaTest,doubleSided:2===r.side,flipSided:1===r.side,depthPacking:void 0!==r.depthPacking&&r.depthPacking,index0AttributeName:r.index0AttributeName,extensionDerivatives:r.extensions&&r.extensions.derivatives,extensionFragDepth:r.extensions&&r.extensions.fragDepth,extensionDrawBuffers:r.extensions&&r.extensions.drawBuffers,extensionShaderTextureLOD:r.extensions&&r.extensions.shaderTextureLOD,rendererExtensionFragDepth:s||n.has("EXT_frag_depth"),rendererExtensionDrawBuffers:s||n.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:s||n.has("EXT_shader_texture_lod"),customProgramCacheKey:r.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t1&&i.sort(t||yr),r.length>1&&r.sort(e||br)}}}function _r(t){let e=new WeakMap;return{get:function(n,i){const r=e.get(n);let o;return void 0===r?(o=new xr(t),e.set(n,new WeakMap),e.get(n).set(i,o)):(o=r.get(i),void 0===o&&(o=new xr(t),r.set(i,o))),o},dispose:function(){e=new WeakMap}}}function wr(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":n={direction:new tt,color:new _e};break;case"SpotLight":n={position:new tt,direction:new tt,color:new _e,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new tt,color:new _e,distance:0,decay:0};break;case"HemisphereLight":n={direction:new tt,skyColor:new _e,groundColor:new _e};break;case"RectAreaLight":n={color:new _e,position:new tt,halfWidth:new tt,halfHeight:new tt}}return t[e.id]=n,n}}}let Mr=0;function Sr(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function Er(t,e){const n=new wr,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":case"SpotLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new G};break;case"PointLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new G,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)r.probe.push(new tt);const o=new tt,a=new Lt,s=new Lt;return{setup:function(c,l,h){let u=0,d=0,p=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let f=0,m=0,g=0,v=0,y=0,b=0,x=0,_=0;const w=h.matrixWorldInverse;c.sort(Sr);for(let t=0,e=c.length;t0&&(e.isWebGL2||!0===t.has("OES_texture_float_linear")?(r.rectAreaLTC1=zn.LTC_FLOAT_1,r.rectAreaLTC2=zn.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=zn.LTC_HALF_1,r.rectAreaLTC2=zn.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=u,r.ambient[1]=d,r.ambient[2]=p;const M=r.hash;M.directionalLength===f&&M.pointLength===m&&M.spotLength===g&&M.rectAreaLength===v&&M.hemiLength===y&&M.numDirectionalShadows===b&&M.numPointShadows===x&&M.numSpotShadows===_||(r.directional.length=f,r.spot.length=g,r.rectArea.length=v,r.point.length=m,r.hemi.length=y,r.directionalShadow.length=b,r.directionalShadowMap.length=b,r.pointShadow.length=x,r.pointShadowMap.length=x,r.spotShadow.length=_,r.spotShadowMap.length=_,r.directionalShadowMatrix.length=b,r.pointShadowMatrix.length=x,r.spotShadowMatrix.length=_,M.directionalLength=f,M.pointLength=m,M.spotLength=g,M.rectAreaLength=v,M.hemiLength=y,M.numDirectionalShadows=b,M.numPointShadows=x,M.numSpotShadows=_,r.version=Mr++)},state:r}}function Tr(t,e){const n=new Er(t,e),i=[],r=[];return{init:function(){i.length=0,r.length=0},state:{lightsArray:i,shadowsArray:r,lights:n},setupLights:function(t){n.setup(i,r,t)},pushLight:function(t){i.push(t)},pushShadow:function(t){r.push(t)}}}function Ar(t,e){let n=new WeakMap;return{get:function(i,r){let o;return!1===n.has(i)?(o=new Tr(t,e),n.set(i,new WeakMap),n.get(i).set(r,o)):!1===n.get(i).has(r)?(o=new Tr(t,e),n.get(i).set(r,o)):o=n.get(i).get(r),o},dispose:function(){n=new WeakMap}}}function Lr(t){Se.call(this),this.type="MeshDepthMaterial",this.depthPacking=3200,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}function Pr(t){Se.call(this),this.type="MeshDistanceMaterial",this.referencePosition=new tt,this.nearDistance=1,this.farDistance=1e3,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}Lr.prototype=Object.create(Se.prototype),Lr.prototype.constructor=Lr,Lr.prototype.isMeshDepthMaterial=!0,Lr.prototype.copy=function(t){return Se.prototype.copy.call(this,t),this.depthPacking=t.depthPacking,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this},Pr.prototype=Object.create(Se.prototype),Pr.prototype.constructor=Pr,Pr.prototype.isMeshDistanceMaterial=!0,Pr.prototype.copy=function(t){return Se.prototype.copy.call(this,t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this};function Cr(t,e,n){let i=new On;const r=new G,o=new G,a=new J,s=[],c=[],l={},h={0:1,1:0,2:2},u=new wn({defines:{SAMPLE_RATE:2/8,HALF_SAMPLE_RATE:1/8},uniforms:{shadow_pass:{value:null},resolution:{value:new G},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),d=u.clone();d.defines.HORIZONAL_PASS=1;const p=new Je;p.setAttribute("position",new Le(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const g=new mn(p,u),v=this;function y(n,i){const r=e.update(g);u.uniforms.shadow_pass.value=n.map.texture,u.uniforms.resolution.value=n.mapSize,u.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,u,g,null),d.uniforms.shadow_pass.value=n.mapPass.texture,d.uniforms.resolution.value=n.mapSize,d.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,d,g,null)}function b(t,e,n){const i=t<<0|e<<1|n<<2;let r=s[i];return void 0===r&&(r=new Lr({depthPacking:3201,morphTargets:t,skinning:e}),s[i]=r),r}function x(t,e,n){const i=t<<0|e<<1|n<<2;let r=c[i];return void 0===r&&(r=new Pr({morphTargets:t,skinning:e}),c[i]=r),r}function _(e,n,i,r,o,a,s){let c=null,u=b,d=e.customDepthMaterial;if(!0===r.isPointLight&&(u=x,d=e.customDistanceMaterial),void 0===d){let t=!1;!0===i.morphTargets&&(t=n.morphAttributes&&n.morphAttributes.position&&n.morphAttributes.position.length>0);let r=!1;!0===e.isSkinnedMesh&&(!0===i.skinning?r=!0:console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",e));c=u(t,r,!0===e.isInstancedMesh)}else c=d;if(t.localClippingEnabled&&!0===i.clipShadows&&0!==i.clippingPlanes.length){const t=c.uuid,e=i.uuid;let n=l[t];void 0===n&&(n={},l[t]=n);let r=n[e];void 0===r&&(r=c.clone(),n[e]=r),c=r}return c.visible=i.visible,c.wireframe=i.wireframe,c.side=3===s?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:h[i.side],c.clipShadows=i.clipShadows,c.clippingPlanes=i.clippingPlanes,c.clipIntersection=i.clipIntersection,c.wireframeLinewidth=i.wireframeLinewidth,c.linewidth=i.linewidth,!0===r.isPointLight&&!0===c.isMeshDistanceMaterial&&(c.referencePosition.setFromMatrixPosition(r.matrixWorld),c.nearDistance=o,c.farDistance=a),c}function w(n,r,o,a,s){if(!1===n.visible)return;if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===s)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let c=0,l=e.length;cn||r.y>n)&&(r.x>n&&(o.x=Math.floor(n/p.x),r.x=o.x*p.x,u.mapSize.x=o.x),r.y>n&&(o.y=Math.floor(n/p.y),r.y=o.y*p.y,u.mapSize.y=o.y)),null===u.map&&!u.isPointLightShadow&&3===this.type){const t={minFilter:m,magFilter:m,format:S};u.map=new $(r.x,r.y,t),u.map.texture.name=h.name+".shadowMap",u.mapPass=new $(r.x,r.y,t),u.camera.updateProjectionMatrix()}if(null===u.map){const t={minFilter:f,magFilter:f,format:S};u.map=new $(r.x,r.y,t),u.map.texture.name=h.name+".shadowMap",u.camera.updateProjectionMatrix()}t.setRenderTarget(u.map),t.clear();const g=u.getViewportCount();for(let t=0;t=1):-1!==A.indexOf("OpenGL ES")&&(T=parseFloat(/^OpenGL\ ES\ ([0-9])/.exec(A)[1]),E=T>=2);let L=null,P={};const C=new J,R=new J;function O(e,n,i){const r=new Uint8Array(4),o=t.createTexture();t.bindTexture(e,o),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;ei||t.height>i)&&(r=i/Math.max(t.width,t.height)),r<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?H.floorPowerOfTwo:Math.floor,o=i(r*t.width),a=i(r*t.height);void 0===L&&(L=C(o,a));const s=n?C(o,a):L;s.width=o,s.height=a;return s.getContext("2d").drawImage(t,0,0,o,a),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+o+"x"+a+")."),s}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function O(t){return H.isPowerOfTwo(t.width)&&H.isPowerOfTwo(t.height)}function N(t,e){return t.generateMipmaps&&e&&t.minFilter!==f&&t.minFilter!==m}function I(e,n,r,o){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log(Math.max(r,o))*Math.LOG2E}function D(n,i,r){if(!1===s)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let o=i;return 6403===i&&(5126===r&&(o=33326),5131===r&&(o=33325),5121===r&&(o=33321)),6407===i&&(5126===r&&(o=34837),5131===r&&(o=34843),5121===r&&(o=32849)),6408===i&&(5126===r&&(o=34836),5131===r&&(o=34842),5121===r&&(o=32856)),33325!==o&&33326!==o&&34842!==o&&34836!==o||e.get("EXT_color_buffer_float"),o}function k(t){return t===f||1004===t||1005===t?9728:9729}function z(e){const n=e.target;n.removeEventListener("dispose",z),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture&&A.delete(n),a.memory.textures--}function B(e){const n=e.target;n.removeEventListener("dispose",B),function(e){const n=i.get(e),r=i.get(e.texture);if(!e)return;void 0!==r.__webglTexture&&t.deleteTexture(r.__webglTexture);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(n.__webglFramebuffer[e]),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer[e]);else t.deleteFramebuffer(n.__webglFramebuffer),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer),n.__webglMultisampledFramebuffer&&t.deleteFramebuffer(n.__webglMultisampledFramebuffer),n.__webglColorRenderbuffer&&t.deleteRenderbuffer(n.__webglColorRenderbuffer),n.__webglDepthRenderbuffer&&t.deleteRenderbuffer(n.__webglDepthRenderbuffer);i.remove(e.texture),i.remove(e)}(n),a.memory.textures--}let F=0;function j(t,e){const r=i.get(t);if(t.isVideoTexture&&function(t){const e=a.render.frame;A.get(t)!==e&&(A.set(t,e),t.update())}(t),t.version>0&&r.__version!==t.version){const n=t.image;if(void 0===n)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==n.complete)return void X(r,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}function U(e,r){const a=i.get(e);e.version>0&&a.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;q(e,i),n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),t.pixelStorei(37440,i.flipY);const a=i&&(i.isCompressedTexture||i.image[0].isCompressedTexture),c=i.image[0]&&i.image[0].isDataTexture,h=[];for(let t=0;t<6;t++)h[t]=a||c?c?i.image[t].image:i.image[t]:R(i.image[t],!1,!0,l);const u=h[0],d=O(u)||s,p=o.convert(i.format),f=o.convert(i.type),m=D(i.internalFormat,p,f);let g;if(W(34067,i,d),a){for(let t=0;t<6;t++){g=h[t].mipmaps;for(let e=0;e1||i.get(o).__currentAnisotropy)&&(t.texParameterf(n,c.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(o.anisotropy,r.getMaxAnisotropy())),i.get(o).__currentAnisotropy=o.anisotropy)}}function q(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",z),e.__webglTexture=t.createTexture(),a.memory.textures++)}function X(e,i,r){let a=3553;i.isDataTexture2DArray&&(a=35866),i.isDataTexture3D&&(a=32879),q(e,i),n.activeTexture(33984+r),n.bindTexture(a,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment);const c=function(t){return!s&&(t.wrapS!==d||t.wrapT!==d||t.minFilter!==f&&t.minFilter!==m)}(i)&&!1===O(i.image),l=R(i.image,c,!1,h),u=O(l)||s,p=o.convert(i.format);let g,v=o.convert(i.type),_=D(i.internalFormat,p,v);W(a,i,u);const A=i.mipmaps;if(i.isDepthTexture)_=6402,s?_=i.type===x?36012:i.type===b?33190:i.type===w?35056:33189:i.type===x&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),i.format===E&&6402===_&&i.type!==y&&i.type!==b&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),i.type=y,v=o.convert(i.type)),i.format===T&&6402===_&&(_=34041,i.type!==w&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),i.type=w,v=o.convert(i.type))),n.texImage2D(3553,0,_,l.width,l.height,0,p,v,null);else if(i.isDataTexture)if(A.length>0&&u){for(let t=0,e=A.length;t0&&u){for(let t=0,e=A.length;t=c&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+c),F+=1,t},this.resetTextureUnits=function(){F=0},this.setTexture2D=j,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?X(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?X(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=U,this.setupRenderTarget=function(e){const r=i.get(e),c=i.get(e.texture);e.addEventListener("dispose",B),c.__webglTexture=t.createTexture(),a.memory.textures++;const l=!0===e.isWebGLCubeRenderTarget,h=!0===e.isWebGLMultisampleRenderTarget,u=O(e)||s;if(!s||e.texture.format!==M||e.texture.type!==x&&e.texture.type!==_||(e.texture.format=S,console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")),l){r.__webglFramebuffer=[];for(let e=0;e<6;e++)r.__webglFramebuffer[e]=t.createFramebuffer()}else if(r.__webglFramebuffer=t.createFramebuffer(),h)if(s){r.__webglMultisampledFramebuffer=t.createFramebuffer(),r.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,r.__webglColorRenderbuffer);const n=o.convert(e.texture.format),i=o.convert(e.texture.type),a=D(e.texture.internalFormat,n,i),s=$(e);t.renderbufferStorageMultisample(36161,s,a,e.width,e.height),t.bindFramebuffer(36160,r.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,r.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer&&(r.__webglDepthRenderbuffer=t.createRenderbuffer(),Z(r.__webglDepthRenderbuffer,e,!0)),t.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(l){n.bindTexture(34067,c.__webglTexture),W(34067,e.texture,u);for(let t=0;t<6;t++)Y(r.__webglFramebuffer[t],e,36064,34069+t);N(e.texture,u)&&I(34067,e.texture,e.width,e.height),n.bindTexture(34067,null)}else n.bindTexture(3553,c.__webglTexture),W(3553,e.texture,u),Y(r.__webglFramebuffer,e,36064,3553),N(e.texture,u)&&I(3553,e.texture,e.width,e.height),n.bindTexture(3553,null);e.depthBuffer&&J(e)},this.updateRenderTargetMipmap=function(t){const e=t.texture;if(N(e,O(t)||s)){const r=t.isWebGLCubeRenderTarget?34067:3553,o=i.get(e).__webglTexture;n.bindTexture(r,o),I(r,e,t.width,t.height),n.bindTexture(r,null)}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(s){const n=i.get(e);t.bindFramebuffer(36008,n.__webglMultisampledFramebuffer),t.bindFramebuffer(36009,n.__webglFramebuffer);const r=e.width,o=e.height;let a=16384;e.depthBuffer&&(a|=256),e.stencilBuffer&&(a|=1024),t.blitFramebuffer(0,0,r,o,0,0,r,o,a,9728),t.bindFramebuffer(36160,n.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")},this.safeSetTexture2D=function(t,e){t&&t.isWebGLRenderTarget&&(!1===Q&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),Q=!0),t=t.texture),j(t,e)},this.safeSetTextureCube=function(t,e){t&&t.isWebGLCubeRenderTarget&&(!1===K&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),K=!0),t=t.texture),U(t,e)}}function Nr(t,e,n){const i=n.isWebGL2;return{convert:function(t){let n;if(t===v)return 5121;if(1017===t)return 32819;if(1018===t)return 32820;if(1019===t)return 33635;if(1010===t)return 5120;if(1011===t)return 5122;if(t===y)return 5123;if(1013===t)return 5124;if(t===b)return 5125;if(t===x)return 5126;if(t===_)return i?5131:(n=e.get("OES_texture_half_float"),null!==n?n.HALF_FLOAT_OES:null);if(1021===t)return 6406;if(t===M)return 6407;if(t===S)return 6408;if(1024===t)return 6409;if(1025===t)return 6410;if(t===E)return 6402;if(t===T)return 34041;if(1028===t)return 6403;if(1029===t)return 36244;if(1030===t)return 33319;if(1031===t)return 33320;if(1032===t)return 36248;if(1033===t)return 36249;if(33776===t||33777===t||33778===t||33779===t){if(n=e.get("WEBGL_compressed_texture_s3tc"),null===n)return null;if(33776===t)return n.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===t)return n.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===t)return n.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===t)return n.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===t||35841===t||35842===t||35843===t){if(n=e.get("WEBGL_compressed_texture_pvrtc"),null===n)return null;if(35840===t)return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===t)return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===t)return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===t)return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===t)return n=e.get("WEBGL_compressed_texture_etc1"),null!==n?n.COMPRESSED_RGB_ETC1_WEBGL:null;if((37492===t||37496===t)&&(n=e.get("WEBGL_compressed_texture_etc"),null!==n)){if(37492===t)return n.COMPRESSED_RGB8_ETC2;if(37496===t)return n.COMPRESSED_RGBA8_ETC2_EAC}return 37808===t||37809===t||37810===t||37811===t||37812===t||37813===t||37814===t||37815===t||37816===t||37817===t||37818===t||37819===t||37820===t||37821===t||37840===t||37841===t||37842===t||37843===t||37844===t||37845===t||37846===t||37847===t||37848===t||37849===t||37850===t||37851===t||37852===t||37853===t?(n=e.get("WEBGL_compressed_texture_astc"),null!==n?t:null):36492===t?(n=e.get("EXT_texture_compression_bptc"),null!==n?t:null):t===w?i?34042:(n=e.get("WEBGL_depth_texture"),null!==n?n.UNSIGNED_INT_24_8_WEBGL:null):void 0}}}function Ir(t=[]){Sn.call(this),this.cameras=t}function Dr(){Kt.call(this),this.type="Group"}function kr(){this._targetRay=null,this._grip=null,this._hand=null}function zr(t,e){const n=this;let i=null,r=1,o=null,a="local-floor",s=null;const c=[],l=new Map,h=new Sn;h.layers.enable(1),h.viewport=new J;const u=new Sn;u.layers.enable(2),u.viewport=new J;const d=[h,u],p=new Ir;p.layers.enable(1),p.layers.enable(2);let f=null,m=null;function g(t){const e=l.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function v(){l.forEach((function(t,e){t.disconnect(e)})),l.clear(),t.setFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),S.stop(),n.isPresenting=!1,n.dispatchEvent({type:"sessionend"})}function y(t){o=t,S.setContext(i),S.start(),n.isPresenting=!0,n.dispatchEvent({type:"sessionstart"})}function b(t){const e=i.inputSources;for(let t=0;t0&&Ct(o,t,e),a.length>0&&Ct(a,t,e),!0===t.isScene&&t.onAfterRender(p,t,e),null!==b&&(et.updateRenderTargetMipmap(b),et.updateMultisampleRenderTarget(b)),$.buffers.depth.setTest(!0),$.buffers.depth.setMask(!0),$.buffers.color.setMask(!0),$.setPolygonOffset(!1),u=null,d=null},this.setFramebuffer=function(t){m!==t&&null===b&&vt.bindFramebuffer(36160,t),m=t},this.getActiveCubeFace=function(){return g},this.getActiveMipmapLevel=function(){return y},this.getRenderList=function(){return u},this.setRenderList=function(t){u=t},this.getRenderState=function(){return d},this.setRenderState=function(t){d=t},this.getRenderTarget=function(){return b},this.setRenderTarget=function(t,e=0,n=0){b=t,g=e,y=n,t&&void 0===K.get(t).__webglFramebuffer&&et.setupRenderTarget(t);let i=m,r=!1;if(t){const n=K.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=n[e],r=!0):i=t.isWebGLMultisampleRenderTarget?K.get(t).__webglMultisampledFramebuffer:n,A.copy(t.viewport),L.copy(t.scissor),P=t.scissorTest}else A.copy(k).multiplyScalar(O).floor(),L.copy(z).multiplyScalar(O).floor(),P=B;if(w!==i&&(vt.bindFramebuffer(36160,i),w=i),$.viewport(A),$.scissor(L),$.setScissorTest(P),r){const i=K.get(t.texture);vt.framebufferTexture2D(36160,36064,34069+e,i.__webglTexture,n)}},this.readRenderTargetPixels=function(t,e,n,i,r,o,a){if(!t||!t.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let s=K.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==a&&(s=s[a]),s){let a=!1;s!==w&&(vt.bindFramebuffer(36160,s),a=!0);try{const s=t.texture,c=s.format,l=s.type;if(c!==S&&mt.convert(c)!==vt.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");if(!(l===v||mt.convert(l)===vt.getParameter(35738)||l===x&&(Z.isWebGL2||Y.get("OES_texture_float")||Y.get("WEBGL_color_buffer_float"))||l===_&&(Z.isWebGL2?Y.get("EXT_color_buffer_float"):Y.get("EXT_color_buffer_half_float"))))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");36053===vt.checkFramebufferStatus(36160)?e>=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&vt.readPixels(e,n,i,r,mt.convert(c),mt.convert(l),o):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{a&&vt.bindFramebuffer(36160,w)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),o=Math.floor(e.image.height*i),a=mt.convert(e.format);et.setTexture2D(e,0),vt.copyTexImage2D(3553,n,a,t.x,t.y,r,o,0),$.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,o=e.image.height,a=mt.convert(n.format),s=mt.convert(n.type);et.setTexture2D(n,0),vt.pixelStorei(37440,n.flipY),vt.pixelStorei(37441,n.premultiplyAlpha),vt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?vt.texSubImage2D(3553,i,t.x,t.y,r,o,a,s,e.image.data):e.isCompressedTexture?vt.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,a,e.mipmaps[0].data):vt.texSubImage2D(3553,i,t.x,t.y,a,s,e.image),0===i&&n.generateMipmaps&&vt.generateMipmap(3553),$.unbindTexture()},this.initTexture=function(t){et.setTexture2D(t,0),$.unbindTexture()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}function jr(t){Fr.call(this,t)}Ir.prototype=Object.assign(Object.create(Sn.prototype),{constructor:Ir,isArrayCamera:!0}),Dr.prototype=Object.assign(Object.create(Kt.prototype),{constructor:Dr,isGroup:!0}),Object.assign(kr.prototype,{constructor:kr,getHandSpace:function(){if(null===this._hand&&(this._hand=new Dr,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints=[],this._hand.inputState={pinching:!1},window.XRHand))for(let t=0;t<=window.XRHand.LITTLE_PHALANX_TIP;t++){const t=new Dr;t.matrixAutoUpdate=!1,t.visible=!1,this._hand.joints.push(t),this._hand.add(t)}return this._hand},getTargetRaySpace:function(){return null===this._targetRay&&(this._targetRay=new Dr,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1),this._targetRay},getGripSpace:function(){return null===this._grip&&(this._grip=new Dr,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1),this._grip},dispatchEvent:function(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this},disconnect:function(t){return this.dispatchEvent({type:"disconnected",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this},update:function(t,e,n){let i=null,r=null,o=null;const a=this._targetRay,s=this._grip,c=this._hand;if(t&&"visible-blurred"!==e.session.visibilityState)if(c&&t.hand){o=!0;for(let i=0;i<=window.XRHand.LITTLE_PHALANX_TIP;i++)if(t.hand[i]){const r=e.getJointPose(t.hand[i],n),o=c.joints[i];null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.jointRadius=r.radius),o.visible=null!==r;const a=c.joints[window.XRHand.INDEX_PHALANX_TIP],s=c.joints[window.XRHand.THUMB_PHALANX_TIP],l=a.position.distanceTo(s.position),h=.02,u=.005;c.inputState.pinching&&l>h+u?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!c.inputState.pinching&&l<=h-u&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}}else null!==a&&(i=e.getPose(t.targetRaySpace,n),null!==i&&(a.matrix.fromArray(i.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale))),null!==s&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),null!==r&&(s.matrix.fromArray(r.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale)));return null!==a&&(a.visible=null!==i),null!==s&&(s.visible=null!==r),null!==c&&(c.visible=null!==o),this}}),Object.assign(zr.prototype,F.prototype),jr.prototype=Object.assign(Object.create(Fr.prototype),{constructor:jr,isWebGL1Renderer:!0});class Ur extends Kt{constructor(){super(),Object.defineProperty(this,"isScene",{value:!0}),this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.background&&(e.object.background=this.background.toJSON(t)),null!==this.environment&&(e.object.environment=this.environment.toJSON(t)),null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}function Hr(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=k,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=H.generateUUID()}Object.defineProperty(Hr.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(Hr.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;it.far||e.push({distance:s,point:Xr.clone(),uv:fe.getUV(Xr,Kr,to,eo,no,io,ro,new G),face:null,object:this})},copy:function(t){return Kt.prototype.copy.call(this,t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}});const so=new tt,co=new tt;function lo(){Kt.call(this),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}function ho(t,e){t&&t.isGeometry&&console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."),mn.call(this,t,e),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new Lt,this.bindMatrixInverse=new Lt}function uo(){Kt.call(this),this.type="Bone"}lo.prototype=Object.assign(Object.create(Kt.prototype),{constructor:lo,isLOD:!0,copy:function(t){Kt.prototype.copy.call(this,t,!1);const e=t.levels;for(let t=0,n=e.length;t0){let n,i;for(n=1,i=e.length;n0){so.setFromMatrixPosition(this.matrixWorld);const n=t.ray.origin.distanceTo(so);this.getObjectForDistance(n).raycast(t,e)}},update:function(t){const e=this.levels;if(e.length>1){so.setFromMatrixPosition(t.matrixWorld),co.setFromMatrixPosition(this.matrixWorld);const n=so.distanceTo(co)/t.zoom;let i,r;for(e[0].object.visible=!0,i=1,r=e.length;i=e[i].distance;i++)e[i-1].object.visible=!1,e[i].object.visible=!0;for(this._currentLevel=i-1;ia)continue;h.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(h);dt.far||e.push({distance:d,point:l.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}else for(let n=0,i=r.count-1;na)continue;h.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(h);it.far||e.push({distance:i,point:l.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else if(n.isGeometry){const i=n.vertices,r=i.length;for(let n=0;na)continue;h.applyMatrix4(this.matrixWorld);const r=t.ray.origin.distanceTo(h);rt.far||e.push({distance:r,point:l.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}},updateMorphTargets:function(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}});const Lo=new tt,Po=new tt;function Co(t,e){Ao.call(this,t,e),this.type="LineSegments"}function Ro(t,e){Ao.call(this,t,e),this.type="LineLoop"}function Oo(t){Se.call(this),this.type="PointsMaterial",this.color=new _e(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.morphTargets=!1,this.setValues(t)}Co.prototype=Object.assign(Object.create(Ao.prototype),{constructor:Co,isLineSegments:!0,computeLineDistances:function(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;tr.far)return;o.push({distance:c,distanceToRay:Math.sqrt(s),point:n,index:e,face:null,object:a})}}function Fo(t,e,n,i,r,o,a,s,c){Y.call(this,t,e,n,i,r,o,a,s,c),this.format=void 0!==a?a:M,this.minFilter=void 0!==o?o:m,this.magFilter=void 0!==r?r:m,this.generateMipmaps=!1;const l=this;"requestVideoFrameCallback"in t&&t.requestVideoFrameCallback((function e(){l.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}function jo(t,e,n,i,r,o,a,s,c,l,h,u){Y.call(this,null,o,a,s,c,l,i,r,h,u),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}function Uo(t,e,n,i,r,o,a,s,c){Y.call(this,t,e,n,i,r,o,a,s,c),this.needsUpdate=!0}function Ho(t,e,n,i,r,o,a,s,c,l){if((l=void 0!==l?l:E)!==E&&l!==T)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&l===E&&(n=y),void 0===n&&l===T&&(n=w),Y.call(this,null,i,r,o,a,s,l,n,c),this.image={width:t,height:e},this.magFilter=void 0!==a?a:f,this.minFilter=void 0!==s?s:f,this.flipY=!1,this.generateMipmaps=!1}zo.prototype=Object.assign(Object.create(Kt.prototype),{constructor:zo,isPoints:!0,copy:function(t){return Kt.prototype.copy.call(this,t),this.material=t.material,this.geometry=t.geometry,this},raycast:function(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Points.threshold;if(null===n.boundingSphere&&n.computeBoundingSphere(),Do.copy(n.boundingSphere),Do.applyMatrix4(i),Do.radius+=r,!1===t.ray.intersectsSphere(Do))return;No.copy(i).invert(),Io.copy(t.ray).applyMatrix4(No);const o=r/((this.scale.x+this.scale.y+this.scale.z)/3),a=o*o;if(n.isBufferGeometry){const r=n.index,o=n.attributes.position;if(null!==r){const n=r.array;for(let r=0,s=n.length;r0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}),Fo.prototype=Object.assign(Object.create(Y.prototype),{constructor:Fo,clone:function(){return new this.constructor(this.image).copy(this)},isVideoTexture:!0,update:function(){const t=this.image;!1==="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}),jo.prototype=Object.create(Y.prototype),jo.prototype.constructor=jo,jo.prototype.isCompressedTexture=!0,Uo.prototype=Object.create(Y.prototype),Uo.prototype.constructor=Uo,Uo.prototype.isCanvasTexture=!0,Ho.prototype=Object.create(Y.prototype),Ho.prototype.constructor=Ho,Ho.prototype.isDepthTexture=!0;let Go=0;const Vo=new Lt,Wo=new Kt,qo=new tt;function Xo(){Object.defineProperty(this,"id",{value:Go+=2}),this.uuid=H.generateUUID(),this.name="",this.type="Geometry",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.elementsNeedUpdate=!1,this.verticesNeedUpdate=!1,this.uvsNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.lineDistancesNeedUpdate=!1,this.groupsNeedUpdate=!1}Xo.prototype=Object.assign(Object.create(F.prototype),{constructor:Xo,isGeometry:!0,applyMatrix4:function(t){const e=(new V).getNormalMatrix(t);for(let e=0,n=this.vertices.length;e0)for(let t=0;t0&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){this.computeFaceNormals();for(let t=0,e=this.faces.length;t0&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){for(let t=0,e=this.faces.length;t=0;t--){const e=o[t];this.faces.splice(e,1);for(let t=0,n=this.faceVertexUvs.length;t0,s=e.vertexNormals.length>0,c=1!==e.color.r||1!==e.color.g||1!==e.color.b,p=e.vertexColors.length>0;let f=0;if(f=l(f,0,0),f=l(f,1,i),f=l(f,2,r),f=l(f,3,o),f=l(f,4,a),f=l(f,5,s),f=l(f,6,c),f=l(f,7,p),n.push(f),n.push(e.a,e.b,e.c),n.push(e.materialIndex),o){const e=this.faceVertexUvs[0][t];n.push(d(e[0]),d(e[1]),d(e[2]))}if(a&&n.push(h(e.normal)),s){const t=e.vertexNormals;n.push(h(t[0]),h(t[1]),h(t[2]))}if(c&&n.push(u(e.color)),p){const t=e.vertexColors;n.push(u(t[0]),u(t[1]),u(t[2]))}}function l(t,e,n){return n?t|1<0&&(t.data.colors=o),s.length>0&&(t.data.uvs=[s]),t.data.faces=n,t},clone:function(){return(new Xo).copy(this)},copy:function(t){this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=t.name;const e=t.vertices;for(let t=0,n=e.length;t0&&v(!0),e>0&&v(!1)),this.setIndex(l),this.setAttribute("position",new ze(h,3)),this.setAttribute("normal",new ze(u,3)),this.setAttribute("uv",new ze(d,2))}}new tt,new tt,new tt,new fe;const Zo=function(t,e,n){n=n||2;const i=e&&e.length,r=i?e[0]*n:t.length;let o=Jo(t,0,r,n,!0);const a=[];if(!o||o.next===o.prev)return a;let s,c,l,h,u,d,p;if(i&&(o=function(t,e,n,i){const r=[];let o,a,s,c,l;for(o=0,a=e.length;o80*n){s=l=t[0],c=h=t[1];for(let e=n;el&&(l=u),d>h&&(h=d);p=Math.max(l-s,h-c),p=0!==p?1/p:0}return Qo(o,a,n,s,c,p),a};function Jo(t,e,n,i,r){let o,a;if(r===function(t,e,n,i){let r=0;for(let o=e,a=n-i;o0)for(o=e;o=e;o-=i)a=va(o,t[o],t[o+1],a);return a&&ua(a,a.next)&&(ya(a),a=a.next),a}function $o(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!ua(i,i.next)&&0!==ha(i.prev,i,i.next))i=i.next;else{if(ya(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function Qo(t,e,n,i,r,o,a){if(!t)return;!a&&o&&function(t,e,n,i){let r=t;do{null===r.z&&(r.z=aa(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,o,a,s,c,l=1;do{for(n=t,t=null,o=null,a=0;n;){for(a++,i=n,s=0,e=0;e0||c>0&&i;)0!==s&&(0===c||!i||n.z<=i.z)?(r=n,n=n.nextZ,s--):(r=i,i=i.nextZ,c--),o?o.nextZ=r:t=r,r.prevZ=o,o=r;n=i}o.nextZ=null,l*=2}while(a>1)}(r)}(t,i,r,o);let s,c,l=t;for(;t.prev!==t.next;)if(s=t.prev,c=t.next,o?ta(t,i,r,o):Ko(t))e.push(s.i/n),e.push(t.i/n),e.push(c.i/n),ya(t),t=c.next,l=c.next;else if((t=c)===l){a?1===a?Qo(t=ea($o(t),e,n),e,n,i,r,o,2):2===a&&na(t,e,n,i,r,o):Qo($o(t),e,n,i,r,o,1);break}}function Ko(t){const e=t.prev,n=t,i=t.next;if(ha(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(ca(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&ha(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function ta(t,e,n,i){const r=t.prev,o=t,a=t.next;if(ha(r,o,a)>=0)return!1;const s=r.xo.x?r.x>a.x?r.x:a.x:o.x>a.x?o.x:a.x,h=r.y>o.y?r.y>a.y?r.y:a.y:o.y>a.y?o.y:a.y,u=aa(s,c,e,n,i),d=aa(l,h,e,n,i);let p=t.prevZ,f=t.nextZ;for(;p&&p.z>=u&&f&&f.z<=d;){if(p!==t.prev&&p!==t.next&&ca(r.x,r.y,o.x,o.y,a.x,a.y,p.x,p.y)&&ha(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,f!==t.prev&&f!==t.next&&ca(r.x,r.y,o.x,o.y,a.x,a.y,f.x,f.y)&&ha(f.prev,f,f.next)>=0)return!1;f=f.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&ca(r.x,r.y,o.x,o.y,a.x,a.y,p.x,p.y)&&ha(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;f&&f.z<=d;){if(f!==t.prev&&f!==t.next&&ca(r.x,r.y,o.x,o.y,a.x,a.y,f.x,f.y)&&ha(f.prev,f,f.next)>=0)return!1;f=f.nextZ}return!0}function ea(t,e,n){let i=t;do{const r=i.prev,o=i.next.next;!ua(r,o)&&da(r,i,i.next,o)&&ma(r,o)&&ma(o,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(o.i/n),ya(i),ya(i.next),i=t=o),i=i.next}while(i!==t);return $o(i)}function na(t,e,n,i,r,o){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i&&la(a,t)){let s=ga(a,t);return a=$o(a,a.next),s=$o(s,s.next),Qo(a,e,n,i,r,o),void Qo(s,e,n,i,r,o)}t=t.next}a=a.next}while(a!==t)}function ia(t,e){return t.x-e.x}function ra(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let o,a=-1/0;do{if(r<=n.y&&r>=n.next.y&&n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>a){if(a=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}o=n.x=n.x&&n.x>=c&&i!==n.x&&ca(ro.x||n.x===o.x&&oa(o,n)))&&(o=n,u=h)),n=n.next}while(n!==s);return o}(t,e)){const n=ga(e,t);$o(e,e.next),$o(n,n.next)}}function oa(t,e){return ha(t.prev,t,e.prev)<0&&ha(e.next,t,t.next)<0}function aa(t,e,n,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function sa(t){let e=t,n=t;do{(e.x=0&&(t-a)*(i-s)-(n-a)*(e-s)>=0&&(n-a)*(o-s)-(r-a)*(i-s)>=0}function la(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&da(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(ma(t,e)&&ma(e,t)&&function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,o=(t.y+e.y)/2;do{n.y>o!=n.next.y>o&&n.next.y!==n.y&&r<(n.next.x-n.x)*(o-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(ha(t.prev,t,e.prev)||ha(t,e.prev,e))||ua(t,e)&&ha(t.prev,t,t.next)>0&&ha(e.prev,e,e.next)>0)}function ha(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function ua(t,e){return t.x===e.x&&t.y===e.y}function da(t,e,n,i){const r=fa(ha(t,e,n)),o=fa(ha(t,e,i)),a=fa(ha(n,i,t)),s=fa(ha(n,i,e));return r!==o&&a!==s||(!(0!==r||!pa(t,n,e))||(!(0!==o||!pa(t,i,e))||(!(0!==a||!pa(n,t,i))||!(0!==s||!pa(n,e,i)))))}function pa(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function fa(t){return t>0?1:t<0?-1:0}function ma(t,e){return ha(t.prev,t,t.next)<0?ha(t,e,t.next)>=0&&ha(t,t.prev,e)>=0:ha(t,e,t.prev)<0||ha(t,t.next,e)<0}function ga(t,e){const n=new ba(t.i,t.x,t.y),i=new ba(e.i,e.x,e.y),r=t.next,o=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,o.next=i,i.prev=o,i}function va(t,e,n,i){const r=new ba(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function ya(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function ba(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}const xa={area:function(t){const e=t.length;let n=0;for(let i=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function wa(t,e){for(let n=0;nNumber.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(c*c+l*l),p=e.x-s/u,f=e.y+a/u,m=((n.x-l/d-p)*l-(n.y+c/d-f)*c)/(a*l-s*c);i=p+a*m-t.x,r=f+s*m-t.y;const g=i*i+r*r;if(g<=2)return new G(i,r);o=Math.sqrt(g/2)}else{let t=!1;a>Number.EPSILON?c>Number.EPSILON&&(t=!0):a<-Number.EPSILON?c<-Number.EPSILON&&(t=!0):Math.sign(s)===Math.sign(l)&&(t=!0),t?(i=-s,r=a,o=Math.sqrt(h)):(i=a,r=s,o=Math.sqrt(h/2))}return new G(i/o,r/o)}const R=[];for(let t=0,e=T.length,n=e-1,i=t+1;t=0;t--){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=T.length;t=0;){const i=n;let r=n-1;r<0&&(r=t.length-1);for(let t=0,n=s+2*p;t=0?(t(i-s,p,h),u.subVectors(l,h)):(t(i+s,p,h),u.subVectors(h,l)),p-s>=0?(t(i,p-s,h),d.subVectors(l,h)):(t(i,p+s,h),d.subVectors(h,l)),c.crossVectors(u,d).normalize(),o.push(c.x,c.y,c.z),a.push(i,p)}}for(let t=0;t0)&&d.push(e,r,c),(t!==n-1||s=i)){c.push(e.times[t]);for(let n=0;no.tracks[t].times[0]&&(s=o.tracks[t].times[0]);for(let t=0;t=i.times[u]){const t=u*c+s,e=t+c-s;d=Ha.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=s,n=c-s;t.evaluate(o),d=Ha.arraySlice(t.resultBuffer,e,n)}if("quaternion"===r){(new K).fromArray(d).normalize().conjugate().toArray(d)}const p=a.times.length;for(let t=0;t=r)break t;{const a=e[1];t=r)break e}o=n,n=0}}for(;n>>1;te;)--o;if(++o,0!==r||o!==i){r>=o&&(o=Math.max(o,1),r=o-1);const t=this.getValueSize();this.times=Ha.arraySlice(n,r,o),this.values=Ha.arraySlice(this.values,r*t,o*t)}return this},validate:function(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let o=null;for(let e=0;e!==r;e++){const i=n[e];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,i),t=!1;break}if(null!==o&&o>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,i,o),t=!1;break}o=i}if(void 0!==i&&Ha.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,n),t=!1;break}}return t},optimize:function(){const t=Ha.arraySlice(this.times),e=Ha.arraySlice(this.values),n=this.getValueSize(),i=this.getInterpolation()===P,r=t.length-1;let o=1;for(let a=1;a0){t[o]=t[r];for(let t=r*n,i=o*n,a=0;a!==n;++a)e[i+a]=e[t+a];++o}return o!==t.length?(this.times=Ha.arraySlice(t,0,o),this.values=Ha.arraySlice(e,0,o*n)):(this.times=t,this.values=e),this},clone:function(){const t=Ha.arraySlice(this.times,0),e=Ha.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}),Ya.prototype=Object.assign(Object.create(Xa.prototype),{constructor:Ya,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:A,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),Za.prototype=Object.assign(Object.create(Xa.prototype),{constructor:Za,ValueTypeName:"color"}),Ja.prototype=Object.assign(Object.create(Xa.prototype),{constructor:Ja,ValueTypeName:"number"}),$a.prototype=Object.assign(Object.create(Ga.prototype),{constructor:$a,interpolate_:function(t,e,n,i){const r=this.resultBuffer,o=this.sampleValues,a=this.valueSize,s=(n-e)/(i-e);let c=t*a;for(let t=c+a;c!==t;c+=4)K.slerpFlat(r,0,o,c-a,o,c,s);return r}}),Qa.prototype=Object.assign(Object.create(Xa.prototype),{constructor:Qa,ValueTypeName:"quaternion",DefaultInterpolation:L,InterpolantFactoryMethodLinear:function(t){return new $a(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:void 0}),Ka.prototype=Object.assign(Object.create(Xa.prototype),{constructor:Ka,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:A,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),ts.prototype=Object.assign(Object.create(Xa.prototype),{constructor:ts,ValueTypeName:"vector"}),Object.assign(es,{parse:function(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(ns(n[t]).scale(i));const r=new es(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r},toJSON:function(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(Xa.toJSON(n[t]));return i},CreateFromMorphTargetSequence:function(t,e,n,i){const r=e.length,o=[];for(let t=0;t1){const t=o[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const o=[];for(const t in i)o.push(es.CreateFromMorphTargetSequence(t,i[t],e,n));return o},parseAnimation:function(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const n=function(t,e,n,i,r){if(0!==n.length){const o=[],a=[];Ha.flattenJSON(n,o,a,i),0!==o.length&&r.push(new t(e,o,a))}},i=[],r=t.name||"default",o=t.fps||30,a=t.blendMode;let s=t.length||-1;const c=t.hierarchy||[];for(let t=0;t0||0===t.search(/^data\:image\/jpeg/);r.format=i?M:S,r.needsUpdate=!0,void 0!==e&&e(r)}),n,i),r}}),Object.assign(fs.prototype,{getPoint:function(){return console.warn("THREE.Curve: .getPoint() not implemented."),null},getPointAt:function(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)},getPoints:function(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e},getSpacedPoints:function(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e},getLength:function(){const t=this.getLengths();return t[t.length-1]},getLengths:function(t){if(void 0===t&&(t=this.arcLengthDivisions),this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let o=1;o<=t;o++)n=this.getPoint(o/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(t,e){const n=this.getLengths();let i=0;const r=n.length;let o;o=e||t*n[r-1];let a,s=0,c=r-1;for(;s<=c;)if(i=Math.floor(s+(c-s)/2),a=n[i]-o,a<0)s=i+1;else{if(!(a>0)){c=i;break}c=i-1}if(i=c,n[i]===o)return i/(r-1);const l=n[i];return(i+(o-l)/(n[i+1]-l))/(r-1)},getTangent:function(t,e){const n=1e-4;let i=t-n,r=t+n;i<0&&(i=0),r>1&&(r=1);const o=this.getPoint(i),a=this.getPoint(r),s=e||(o.isVector2?new G:new tt);return s.copy(a).sub(o).normalize(),s},getTangentAt:function(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)},computeFrenetFrames:function(t,e){const n=new tt,i=[],r=[],o=[],a=new tt,s=new Lt;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new tt),i[e].normalize()}r[0]=new tt,o[0]=new tt;let c=Number.MAX_VALUE;const l=Math.abs(i[0].x),h=Math.abs(i[0].y),u=Math.abs(i[0].z);l<=c&&(c=l,n.set(1,0,0)),h<=c&&(c=h,n.set(0,1,0)),u<=c&&n.set(0,0,1),a.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],a),o[0].crossVectors(i[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),o[e]=o[e-1].clone(),a.crossVectors(i[e-1],i[e]),a.length()>Number.EPSILON){a.normalize();const t=Math.acos(H.clamp(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(s.makeRotationAxis(a,t))}o[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(H.clamp(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(a.crossVectors(r[0],r[t]))>0&&(e=-e);for(let n=1;n<=t;n++)r[n].applyMatrix4(s.makeRotationAxis(i[n],e*n)),o[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:o}},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this},toJSON:function(){const t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t},fromJSON:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}),ms.prototype=Object.create(fs.prototype),ms.prototype.constructor=ms,ms.prototype.isEllipseCurve=!0,ms.prototype.getPoint=function(t,e){const n=e||new G,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const o=Math.abs(r)i;)r-=i;r0?0:(Math.floor(Math.abs(c)/r)+1)*r:0===l&&c===r-1&&(c=r-2,l=1),this.closed||c>0?a=i[(c-1)%r]:(ys.subVectors(i[0],i[1]).add(i[0]),a=ys);const h=i[c%r],u=i[(c+1)%r];if(this.closed||c+2i.length-2?i.length-1:o+1],h=i[o>i.length-3?i.length-1:o+2];return n.set(Ms(a,s.x,c.x,l.x,h.x),Ms(a,s.y,c.y,l.y,h.y)),n},Os.prototype.copy=function(t){fs.prototype.copy.call(this,t),this.points=[];for(let e=0,n=t.points.length;e=e){const t=n[i]-e,r=this.curves[i],o=r.getLength(),a=0===o?0:1-t/o;return r.getPointAt(a)}i++}return null},getLength:function(){const t=this.getCurveLengths();return t[t.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e},copy:function(t){fs.prototype.copy.call(this,t),this.curves=[];for(let e=0,n=t.curves.length;e0){const t=c.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(c);const l=c.getPoint(1);return this.currentPoint.copy(l),this},copy:function(t){return Is.prototype.copy.call(this,t),this.currentPoint.copy(t.currentPoint),this},toJSON:function(){const t=Is.prototype.toJSON.call(this);return t.currentPoint=this.currentPoint.toArray(),t},fromJSON:function(t){return Is.prototype.fromJSON.call(this,t),this.currentPoint.fromArray(t.currentPoint),this}}),ks.prototype=Object.assign(Object.create(Ds.prototype),{constructor:ks,getPointsHoles:function(t){const e=[];for(let n=0,i=this.holes.length;n0:i.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(i.uniforms[e]={},r.type){case"t":i.uniforms[e].value=n(r.value);break;case"c":i.uniforms[e].value=(new _e).setHex(r.value);break;case"v2":i.uniforms[e].value=(new G).fromArray(r.value);break;case"v3":i.uniforms[e].value=(new tt).fromArray(r.value);break;case"v4":i.uniforms[e].value=(new J).fromArray(r.value);break;case"m3":i.uniforms[e].value=(new V).fromArray(r.value);break;case"m4":i.uniforms[e].value=(new Lt).fromArray(r.value);break;default:i.uniforms[e].value=r.value}}if(void 0!==t.defines&&(i.defines=t.defines),void 0!==t.vertexShader&&(i.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(i.fragmentShader=t.fragmentShader),void 0!==t.extensions)for(const e in t.extensions)i.extensions[e]=t.extensions[e];if(void 0!==t.shading&&(i.flatShading=1===t.shading),void 0!==t.size&&(i.size=t.size),void 0!==t.sizeAttenuation&&(i.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(i.map=n(t.map)),void 0!==t.matcap&&(i.matcap=n(t.matcap)),void 0!==t.alphaMap&&(i.alphaMap=n(t.alphaMap)),void 0!==t.bumpMap&&(i.bumpMap=n(t.bumpMap)),void 0!==t.bumpScale&&(i.bumpScale=t.bumpScale),void 0!==t.normalMap&&(i.normalMap=n(t.normalMap)),void 0!==t.normalMapType&&(i.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),i.normalScale=(new G).fromArray(e)}return void 0!==t.displacementMap&&(i.displacementMap=n(t.displacementMap)),void 0!==t.displacementScale&&(i.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(i.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(i.roughnessMap=n(t.roughnessMap)),void 0!==t.metalnessMap&&(i.metalnessMap=n(t.metalnessMap)),void 0!==t.emissiveMap&&(i.emissiveMap=n(t.emissiveMap)),void 0!==t.emissiveIntensity&&(i.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(i.specularMap=n(t.specularMap)),void 0!==t.envMap&&(i.envMap=n(t.envMap)),void 0!==t.envMapIntensity&&(i.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(i.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(i.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(i.lightMap=n(t.lightMap)),void 0!==t.lightMapIntensity&&(i.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(i.aoMap=n(t.aoMap)),void 0!==t.aoMapIntensity&&(i.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(i.gradientMap=n(t.gradientMap)),void 0!==t.clearcoatMap&&(i.clearcoatMap=n(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(i.clearcoatRoughnessMap=n(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(i.clearcoatNormalMap=n(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(i.clearcoatNormalScale=(new G).fromArray(t.clearcoatNormalScale)),void 0!==t.transmission&&(i.transmission=t.transmission),void 0!==t.transmissionMap&&(i.transmissionMap=n(t.transmissionMap)),i},setTextures:function(t){return this.textures=t,this}});const Qs=function(t){const e=t.lastIndexOf("/");return-1===e?"./":t.substr(0,e+1)};function Ks(){Je.call(this),this.type="InstancedBufferGeometry",this.instanceCount=1/0}function tc(t,e,n,i){"number"==typeof n&&(i=n,n=!1,console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")),Le.call(this,t,e,n),this.meshPerAttribute=i||1}function ec(t){os.call(this,t)}function nc(t){"undefined"==typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),"undefined"==typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),os.call(this,t),this.options={premultiplyAlpha:"none"}}function ic(){this.type="ShapePath",this.color=new _e,this.subPaths=[],this.currentPath=null}function rc(t){this.type="Font",this.data=t}function oc(t,e,n,i,r){const o=r.glyphs[t]||r.glyphs["?"];if(!o)return void console.error('THREE.Font: character "'+t+'" does not exists in font family '+r.familyName+".");const a=new ic;let s,c,l,h,u,d,p,f;if(o.o){const t=o._cachedOutline||(o._cachedOutline=o.o.split(" "));for(let r=0,o=t.length;rNumber.EPSILON){if(c<0&&(n=e[o],s=-s,a=e[r],c=-c),t.ya.y)continue;if(t.y===n.y){if(t.x===n.x)return!0}else{const e=c*(t.x-n.x)-s*(t.y-n.y);if(0===e)return!0;if(e<0)continue;i=!i}}else{if(t.y!==n.y)continue;if(a.x<=t.x&&t.x<=n.x||n.x<=t.x&&t.x<=a.x)return!0}}return i}const r=xa.isClockWise,o=this.subPaths;if(0===o.length)return[];if(!0===e)return n(o);let a,s,c;const l=[];if(1===o.length)return s=o[0],c=new ks,c.curves=s.curves,l.push(c),l;let h=!r(o[0].getPoints());h=t?!h:h;const u=[],d=[];let p,f,m=[],g=0;d[g]=void 0,m[g]=[];for(let e=0,n=o.length;e1){let t=!1;const e=[];for(let t=0,e=d.length;t0&&(t||(m=u))}for(let t=0,e=d.length;t0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){a.setValue(n,i);break}},saveOriginalState:function(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0},restoreOriginalState:function(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)},_setAdditiveIdentityNumeric:function(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]},_slerp:function(t,e,n,i){K.slerpFlat(t,e,t,e,t,n,i)},_slerpAdditive:function(t,e,n,i,r){const o=this._workIndex*r;K.multiplyQuaternionsFlat(t,o,t,e,t,n),K.slerpFlat(t,e,t,e,t,o,i)},_lerp:function(t,e,n,i,r){const o=1-i;for(let a=0;a!==r;++a){const r=e+a;t[r]=t[r]*o+t[n+a]*i}},_lerpAdditive:function(t,e,n,i,r){for(let o=0;o!==r;++o){const r=e+o;t[r]=t[r]+t[n+o]*i}}});const vc="\\[\\]\\.:\\/",yc=new RegExp("[\\[\\]\\.:\\/]","g"),bc="[^\\[\\]\\.:\\/]",xc="[^"+vc.replace("\\.","")+"]",_c=/((?:WC+[\/:])*)/.source.replace("WC",bc),wc=/(WCOD+)?/.source.replace("WCOD",xc),Mc=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",bc),Sc=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",bc),Ec=new RegExp("^"+_c+wc+Mc+Sc+"$"),Tc=["material","materials","bones"];function Ac(t,e,n){const i=n||Lc.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}function Lc(t,e,n){this.path=e,this.parsedPath=n||Lc.parseTrackName(e),this.node=Lc.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t}Object.assign(Ac.prototype,{getValue:function(t,e){this.bind();const n=this._targetGroup.nCachedObjects_,i=this._bindings[n];void 0!==i&&i.getValue(t,e)},setValue:function(t,e){const n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,r=n.length;i!==r;++i)n[i].setValue(t,e)},bind:function(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()},unbind:function(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}}),Object.assign(Lc,{Composite:Ac,create:function(t,e,n){return t&&t.isAnimationObjectGroup?new Lc.Composite(t,e,n):new Lc(t,e,n)},sanitizeNodeName:function(t){return t.replace(/\s/g,"_").replace(yc,"")},parseTrackName:function(t){const e=Ec.exec(t);if(!e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==Tc.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n},findNode:function(t,e){if(!e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i=r){const o=r++,l=t[o];e[l.uuid]=c,t[c]=l,e[s]=o,t[o]=a;for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[o],r=e[c];e[c]=i,e[o]=r}}}this.nCachedObjects_=r},uncache:function(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_,o=t.length;for(let a=0,s=arguments.length;a!==s;++a){const s=arguments[a].uuid,c=e[s];if(void 0!==c)if(delete e[s],c0&&(e[a.uuid]=c),t[c]=a,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t];e[c]=e[r],e.pop()}}}this.nCachedObjects_=r},subscribe_:function(t,e){const n=this._bindingsIndicesByPath;let i=n[t];const r=this._bindings;if(void 0!==i)return r[i];const o=this._paths,a=this._parsedPaths,s=this._objects,c=s.length,l=this.nCachedObjects_,h=new Array(c);i=r.length,n[t]=i,o.push(t),a.push(e),r.push(h);for(let n=l,i=s.length;n!==i;++n){const i=s[n];h[n]=new Lc(i,t,e)}return h},unsubscribe_:function(t){const e=this._bindingsIndicesByPath,n=e[t];if(void 0!==n){const i=this._paths,r=this._parsedPaths,o=this._bindings,a=o.length-1,s=o[a];e[t[a]]=n,o[n]=s,o.pop(),r[n]=r[a],r.pop(),i[n]=i[a],i.pop()}}});class Pc{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const r=e.tracks,o=r.length,a=new Array(o),s={endingStart:C,endingEnd:C};for(let t=0;t!==o;++t){const e=r[t].createInterpolant(null);a[t]=e,e.settings=s}this._interpolantSettings=s,this._interpolants=a,this._propertyBindings=new Array(o),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,r=i/n,o=n/i;t.warp(1,r,e),this.warp(o,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,r=i.time,o=this.timeScale;let a=this._timeScaleInterpolant;null===a&&(a=i._lendControlInterpolant(),this._timeScaleInterpolant=a);const s=a.parameterPositions,c=a.sampleValues;return s[0]=r,s[1]=r+n,c[0]=t/o,c[1]=e/o,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const i=(t-r)*n;if(i<0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const o=this._updateTime(e),a=this._updateWeight(t);if(a>0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case 2501:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(o),e[n].accumulateAdditive(a);break;case N:default:for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(o),e[n].accumulate(i,a)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const o=2202===n;if(0===t)return-1===r?i:o&&1==(1&r)?e-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const a=this.repetitions-r;if(a<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===a){const e=t<0;this._setEndings(e,!e,o)}else this._setEndings(!1,!1,o);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n})}}else this.time=i;if(o&&1==(1&r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=R,i.endingEnd=R):(i.endingStart=t?this.zeroSlopeAtStart?R:C:O,i.endingEnd=e?this.zeroSlopeAtEnd?R:C:O)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let o=this._weightInterpolant;null===o&&(o=i._lendControlInterpolant(),this._weightInterpolant=o);const a=o.parameterPositions,s=o.sampleValues;return a[0]=r,s[0]=e,a[1]=r+t,s[1]=n,this}}function Cc(t){this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}Cc.prototype=Object.assign(Object.create(F.prototype),{constructor:Cc,_bindAction:function(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,o=t._propertyBindings,a=t._interpolants,s=n.uuid,c=this._bindingsByRootAndName;let l=c[s];void 0===l&&(l={},c[s]=l);for(let t=0;t!==r;++t){const r=i[t],c=r.name;let h=l[c];if(void 0!==h)o[t]=h;else{if(h=o[t],void 0!==h){null===h._cacheIndex&&(++h.referenceCount,this._addInactiveBinding(h,s,c));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;h=new gc(Lc.create(n,c,i),r.ValueTypeName,r.getValueSize()),++h.referenceCount,this._addInactiveBinding(h,s,c),o[t]=h}a[t].resultBuffer=h.buffer}},_activateAction:function(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}},_deactivateAction:function(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}},_isActiveAction:function(t){const e=t._cacheIndex;return null!==e&&e=0;--e)t[e].stop();return this},update:function(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),o=this._accuIndex^=1;for(let a=0;a!==n;++a){e[a]._update(i,t,r,o)}const a=this._bindings,s=this._nActiveBindings;for(let t=0;t!==s;++t)a[t].apply(o);return this},setTime:function(t){this.time=0;for(let t=0;tthis.max.x||t.ythis.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box2: .getParameter() target is now required"),e=new G),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box2: .clampPoint() target is now required"),e=new G),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return Bc.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}.prototype,{center:function(t){return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},size:function(t){return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(it.prototype,{center:function(t){return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionSphere:function(t){return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},size:function(t){return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(bt.prototype,{empty:function(){return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."),this.isEmpty()}}),On.prototype.setFromMatrix=function(t){return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."),this.setFromProjectionMatrix(t)},Object.assign(H,{random16:function(){return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."),Math.random()},nearestPowerOfTwo:function(t){return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."),H.floorPowerOfTwo(t)},nextPowerOfTwo:function(t){return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."),H.ceilPowerOfTwo(t)}}),Object.assign(V.prototype,{flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},multiplyVector3:function(t){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},multiplyVector3Array:function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},applyToBufferAttribute:function(t){return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},applyToVector3Array:function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")},getInverse:function(t){return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()}}),Object.assign(Lt.prototype,{extractPosition:function(t){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(t)},flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},getPosition:function(){return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),(new tt).setFromMatrixColumn(this,3)},setRotationFromQuaternion:function(t){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(t)},multiplyToArray:function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},multiplyVector3:function(t){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector4:function(t){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector3Array:function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},rotateAxis:function(t){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),t.transformDirection(this)},crossVector:function(t){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},translate:function(){console.error("THREE.Matrix4: .translate() has been removed.")},rotateX:function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},rotateY:function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},rotateZ:function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},rotateByAxis:function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},applyToBufferAttribute:function(t){return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},applyToVector3Array:function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},makeFrustum:function(t,e,n,i,r,o){return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."),this.makePerspective(t,e,i,n,r,o)},getInverse:function(t){return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()}}),ie.prototype.isIntersectionLine=function(t){return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),this.intersectsLine(t)},Object.assign(K.prototype,{multiplyVector3:function(t){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),t.applyQuaternion(this)},inverse:function(){return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."),this.invert()}}),Object.assign(At.prototype,{isIntersectionBox:function(t){return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionPlane:function(t){return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),this.intersectsPlane(t)},isIntersectionSphere:function(t){return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)}}),Object.assign(fe.prototype,{area:function(){return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."),this.getArea()},barycoordFromPoint:function(t,e){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),this.getBarycoord(t,e)},midpoint:function(t){return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."),this.getMidpoint(t)},normal:function(t){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),this.getNormal(t)},plane:function(t){return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."),this.getPlane(t)}}),Object.assign(fe,{barycoordFromPoint:function(t,e,n,i,r){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),fe.getBarycoord(t,e,n,i,r)},normal:function(t,e,n,i){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),fe.getNormal(t,e,n,i)}}),Object.assign(ks.prototype,{extractAllPoints:function(t){return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."),this.extractPoints(t)},extrude:function(t){return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),new Ea(this,t)},makeGeometry:function(t){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new Pa(this,t)}}),Object.assign(G.prototype,{fromAttribute:function(t,e,n){return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},distanceToManhattan:function(t){return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},lengthManhattan:function(){return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(tt.prototype,{setEulerFromRotationMatrix:function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},setEulerFromQuaternion:function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},getPositionFromMatrix:function(t){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(t)},getScaleFromMatrix:function(t){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(t)},getColumnFromMatrix:function(t,e){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(e,t)},applyProjection:function(t){return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."),this.applyMatrix4(t)},fromAttribute:function(t,e,n){return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},distanceToManhattan:function(t){return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},lengthManhattan:function(){return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(J.prototype,{fromAttribute:function(t,e,n){return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},lengthManhattan:function(){return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(Xo.prototype,{computeTangents:function(){console.error("THREE.Geometry: .computeTangents() has been removed.")},computeLineDistances:function(){console.error("THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.")},applyMatrix:function(t){return console.warn("THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}}),Object.assign(Kt.prototype,{getChildByName:function(t){return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),this.getObjectByName(t)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},translate:function(t,e){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(e,t)},getWorldRotation:function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")},applyMatrix:function(t){return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}}),Object.defineProperties(Kt.prototype,{eulerOrder:{get:function(){return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order},set:function(t){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order=t}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}),Object.assign(mn.prototype,{setDrawMode:function(){console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}),Object.defineProperties(mn.prototype,{drawMode:{get:function(){return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."),0},set:function(){console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}}),Object.defineProperties(lo.prototype,{objects:{get:function(){return console.warn("THREE.LOD: .objects has been renamed to .levels."),this.levels}}}),Object.defineProperty(mo.prototype,"useVertexTexture",{get:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")},set:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")}}),ho.prototype.initBones=function(){console.error("THREE.SkinnedMesh: initBones() has been removed.")},Object.defineProperty(fs.prototype,"__arcLengthDivisions",{get:function(){return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions},set:function(t){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions=t}}),Sn.prototype.setLens=function(t,e){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),void 0!==e&&(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(zs.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(t){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(t){console.warn("THREE.Light: .shadowBias is now .shadow.bias."),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(t){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),this.shadow.mapSize.height=t}}}),Object.defineProperties(Le.prototype,{length:{get:function(){return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),this.array.length}},dynamic:{get:function(){return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.usage===z},set:function(){console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.setUsage(z)}}}),Object.assign(Le.prototype,{setDynamic:function(t){return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?z:k),this},copyIndicesArray:function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")},setArray:function(){console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}}),Object.assign(Je.prototype,{addIndex:function(t){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(t)},addAttribute:function(t,e){return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."),e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?"index"===t?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(e),this):this.setAttribute(t,e):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.setAttribute(t,new Le(arguments[1],arguments[2])))},addDrawCall:function(t,e,n){void 0!==n&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),this.addGroup(t,e)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},computeTangents:function(){console.warn("THREE.BufferGeometry: .computeTangents() has been removed.")},computeOffsets:function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")},removeAttribute:function(t){return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."),this.deleteAttribute(t)},applyMatrix:function(t){return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}}),Object.defineProperties(Je.prototype,{drawcalls:{get:function(){return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),this.groups}},offsets:{get:function(){return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),this.groups}}}),Object.defineProperties(Ks.prototype,{maxInstancedCount:{get:function(){return console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."),this.instanceCount},set:function(t){console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."),this.instanceCount=t}}}),Object.defineProperties(Ic.prototype,{linePrecision:{get:function(){return console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."),this.params.Line.threshold},set:function(t){console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."),this.params.Line.threshold=t}}}),Object.defineProperties(Hr.prototype,{dynamic:{get:function(){return console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."),this.usage===z},set:function(t){console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."),this.setUsage(t)}}}),Object.assign(Hr.prototype,{setDynamic:function(t){return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?z:k),this},setArray:function(){console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}}),Object.assign(Ma.prototype,{getArrays:function(){console.error("THREE.ExtrudeBufferGeometry: .getArrays() has been removed.")},addShapeList:function(){console.error("THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.")},addShape:function(){console.error("THREE.ExtrudeBufferGeometry: .addShape() has been removed.")}}),Object.assign(Ur.prototype,{dispose:function(){console.error("THREE.Scene: .dispose() has been removed.")}}),Object.defineProperties(Rc.prototype,{dynamic:{set:function(){console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")}},onUpdate:{value:function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this}}}),Object.defineProperties(Se.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")},set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},overdraw:{get:function(){console.warn("THREE.Material: .overdraw has been removed.")},set:function(){console.warn("THREE.Material: .overdraw has been removed.")}},wrapRGB:{get:function(){return console.warn("THREE.Material: .wrapRGB has been removed."),new _e}},shading:{get:function(){console.error("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(t){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===t}},stencilMask:{get:function(){return console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask},set:function(t){console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask=t}}}),Object.defineProperties(Da.prototype,{metal:{get:function(){return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."),!1},set:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")}}}),Object.defineProperties(Ia.prototype,{transparency:{get:function(){return console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."),this.transmission},set:function(t){console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."),this.transmission=t}}}),Object.defineProperties(wn.prototype,{derivatives:{get:function(){return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives},set:function(t){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives=t}}}),Object.assign(Fr.prototype,{clearTarget:function(t,e,n,i){console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."),this.setRenderTarget(t),this.clear(e,n,i)},animate:function(t){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."),this.setAnimationLoop(t)},getCurrentRenderTarget:function(){return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."),this.getRenderTarget()},getMaxAnisotropy:function(){return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."),this.capabilities.getMaxAnisotropy()},getPrecision:function(){return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."),this.capabilities.precision},resetGLState:function(){return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."),this.state.reset()},supportsFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},supportsHalfFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},supportsStandardDerivatives:function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},supportsCompressedTextureS3TC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},supportsCompressedTexturePVRTC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},supportsBlendMinMax:function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},supportsVertexTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},supportsInstancedArrays:function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},enableScissorTest:function(t){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(t)},initMaterial:function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},addPrePlugin:function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},addPostPlugin:function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},updateShadowMap:function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")},setFaceCulling:function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")},allocTextureUnit:function(){console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.")},setTexture:function(){console.warn("THREE.WebGLRenderer: .setTexture() has been removed.")},setTexture2D:function(){console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.")},setTextureCube:function(){console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.")},getActiveMipMapLevel:function(){return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."),this.getActiveMipmapLevel()}}),Object.defineProperties(Fr.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")}},context:{get:function(){return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."),this.getContext()}},vr:{get:function(){return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"),this.xr}},gammaInput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."),!1},set:function(){console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.")}},gammaOutput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),!1},set:function(t){console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),this.outputEncoding=!0===t?3001:I}},toneMappingWhitePoint:{get:function(){return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."),1},set:function(){console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.")}}}),Object.defineProperties(Cr.prototype,{cullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")}},renderReverseSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")}},renderSingleSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")}}}),Object.defineProperties($.prototype,{wrapS:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy},set:function(t){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy=t}},offset:{get:function(){return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset},set:function(t){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset=t}},repeat:{get:function(){return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat},set:function(t){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat=t}},format:{get:function(){return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format},set:function(t){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format=t}},type:{get:function(){return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type},set:function(t){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps},set:function(t){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps=t}}}),Object.defineProperties(class extends Kt{constructor(t){super(),this.type="Audio",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType="empty",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(t){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType="buffer",this.autoplay&&this.play(),this}play(t=0){if(!0===this.isPlaying)return void console.warn("THREE.Audio: Audio is already playing.");if(!1===this.hasPlaybackControl)return void console.warn("THREE.Audio: this Audio has no playback control.");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;console.warn("THREE.Audio: this Audio has no playback control.")}stop(){if(!1!==this.hasPlaybackControl)return this._progress=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this;console.warn("THREE.Audio: this Audio has no playback control.")}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0){var g=h[0].object;i.setFromNormalAndCoplanarPoint(e.getWorldDirection(i.normal),c.setFromMatrixPosition(g.matrixWorld)),d!==g&&(p.dispatchEvent({type:"hoveron",object:g}),n.style.cursor="pointer",d=g)}else null!==d&&(p.dispatchEvent({type:"hoveroff",object:d}),n.style.cursor="auto",d=null)}(f)}}function v(d){switch(d.preventDefault(),d.pointerType){case"mouse":case"pen":!function(d){d.preventDefault(),h.length=0,r.setFromCamera(o,e),r.intersectObjects(t,!0,h),h.length>0&&(u=!0===p.transformGroup?t[0]:h[0].object,r.ray.intersectPlane(i,s)&&(l.copy(u.parent.matrixWorld).invert(),a.copy(s).sub(c.setFromMatrixPosition(u.matrixWorld))),n.style.cursor="move",p.dispatchEvent({type:"dragstart",object:u}))}(d)}}function y(t){switch(t.preventDefault(),t.pointerType){case"mouse":case"pen":!function(t){t.preventDefault(),u&&(p.dispatchEvent({type:"dragend",object:u}),u=null);n.style.cursor=d?"pointer":"auto"}(t)}}function b(t){t.preventDefault(),t=t.changedTouches[0];var c=n.getBoundingClientRect();if(o.x=(t.clientX-c.left)/c.width*2-1,o.y=-(t.clientY-c.top)/c.height*2+1,r.setFromCamera(o,e),u&&p.enabled)return r.ray.intersectPlane(i,s)&&u.position.copy(s.sub(a).applyMatrix4(l)),void p.dispatchEvent({type:"drag",object:u})}function x(d){d.preventDefault(),d=d.changedTouches[0];var f=n.getBoundingClientRect();o.x=(d.clientX-f.left)/f.width*2-1,o.y=-(d.clientY-f.top)/f.height*2+1,h.length=0,r.setFromCamera(o,e),r.intersectObjects(t,!0,h),h.length>0&&(u=!0===p.transformGroup?t[0]:h[0].object,i.setFromNormalAndCoplanarPoint(e.getWorldDirection(i.normal),c.setFromMatrixPosition(u.matrixWorld)),r.ray.intersectPlane(i,s)&&(l.copy(u.parent.matrixWorld).invert(),a.copy(s).sub(c.setFromMatrixPosition(u.matrixWorld))),n.style.cursor="move",p.dispatchEvent({type:"dragstart",object:u}))}function _(t){t.preventDefault(),u&&(p.dispatchEvent({type:"dragend",object:u}),u=null),n.style.cursor="auto"}f(),this.enabled=!0,this.transformGroup=!1,this.activate=f,this.deactivate=m,this.dispose=function(){m()},this.getObjects=function(){return t}};function Xc(t,e,n){var i,r=1;function o(){var o,a,s=i.length,c=0,l=0,h=0;for(o=0;o=(r=(u+d)/2))?u=r:d=r,i=l,!(l=l[s=+a]))return i[s]=h,t;if(e===(o=+t._x.call(null,l.data)))return h.next=l,i?i[s]=h:t._root=h,t;do{i=i?i[s]=new Array(2):t._root=new Array(2),(a=e>=(r=(u+d)/2))?u=r:d=r}while((s=+a)==(c=+(o>=r)));return i[c]=l,i[s]=h,t}function Zc(t,e,n){this.node=t,this.x0=e,this.x1=n}function Jc(t){return t[0]}function $c(t,e){var n=new Qc(null==e?Jc:e,NaN,NaN);return null==t?n:n.addAll(t)}function Qc(t,e,n){this._x=t,this._x0=e,this._x1=n,this._root=void 0}function Kc(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}(qc.prototype=Object.create(F.prototype)).constructor=qc;var tl=$c.prototype=Qc.prototype;function el(t,e,n,i){if(isNaN(e)||isNaN(n))return t;var r,o,a,s,c,l,h,u,d,p=t._root,f={data:i},m=t._x0,g=t._y0,v=t._x1,y=t._y1;if(!p)return t._root=f,t;for(;p.length;)if((l=e>=(o=(m+v)/2))?m=o:v=o,(h=n>=(a=(g+y)/2))?g=a:y=a,r=p,!(p=p[u=h<<1|l]))return r[u]=f,t;if(s=+t._x.call(null,p.data),c=+t._y.call(null,p.data),e===s&&n===c)return f.next=p,r?r[u]=f:t._root=f,t;do{r=r?r[u]=new Array(4):t._root=new Array(4),(l=e>=(o=(m+v)/2))?m=o:v=o,(h=n>=(a=(g+y)/2))?g=a:y=a}while((u=h<<1|l)==(d=(c>=a)<<1|s>=o));return r[d]=p,r[u]=f,t}function nl(t,e,n,i,r){this.node=t,this.x0=e,this.y0=n,this.x1=i,this.y1=r}function il(t){return t[0]}function rl(t){return t[1]}function ol(t,e,n){var i=new al(null==e?il:e,null==n?rl:n,NaN,NaN,NaN,NaN);return null==t?i:i.addAll(t)}function al(t,e,n,i,r,o){this._x=t,this._y=e,this._x0=n,this._y0=i,this._x1=r,this._y1=o,this._root=void 0}function sl(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}tl.copy=function(){var t,e,n=new Qc(this._x,this._x0,this._x1),i=this._root;if(!i)return n;if(!i.length)return n._root=Kc(i),n;for(t=[{source:i,target:n._root=new Array(2)}];i=t.pop();)for(var r=0;r<2;++r)(e=i.source[r])&&(e.length?t.push({source:e,target:i.target[r]=new Array(2)}):i.target[r]=Kc(e));return n},tl.add=function(t){var e=+this._x.call(null,t);return Yc(this.cover(e),e,t)},tl.addAll=function(t){var e,n,i=t.length,r=new Array(i),o=1/0,a=-1/0;for(e=0;ea&&(a=n));for(at||t>n))return this;var i,r,o=n-e,a=this._root;switch(r=+(t<(e+n)/2)){case 0:do{(i=new Array(2))[r]=a,a=i}while(t>(n=e+(o*=2)));break;case 1:do{(i=new Array(2))[r]=a,a=i}while((e=n-(o*=2))>t)}this._root&&this._root.length&&(this._root=a)}return this._x0=e,this._x1=n,this},tl.data=function(){var t=[];return this.visit((function(e){if(!e.length)do{t.push(e.data)}while(e=e.next)})),t},tl.extent=function(t){return arguments.length?this.cover(+t[0][0]).cover(+t[1][0]):isNaN(this._x0)?void 0:[[this._x0],[this._x1]]},tl.find=function(t,e){var n,i,r,o,a,s=this._x0,c=this._x1,l=[],h=this._root;for(h&&l.push(new Zc(h,s,c)),null==e?e=1/0:(s=t-e,c=t+e);o=l.pop();)if(!(!(h=o.node)||(i=o.x0)>c||(r=o.x1)=u))&&(o=l[l.length-1],l[l.length-1]=l[l.length-1-a],l[l.length-1-a]=o)}else{var d=Math.abs(t-+this._x.call(null,h.data));d=(a=(u+d)/2))?u=a:d=a,e=h,!(h=h[c=+s]))return this;if(!h.length)break;e[c+1&1]&&(n=e,l=c)}for(;h.data!==t;)if(i=h,!(h=h.next))return this;return(r=h.next)&&delete h.next,i?(r?i.next=r:delete i.next,this):e?(r?e[c]=r:delete e[c],(h=e[0]||e[1])&&h===(e[1]||e[0])&&!h.length&&(n?n[l]=h:this._root=h),this):(this._root=r,this)},tl.removeAll=function(t){for(var e=0,n=t.length;e=(a=(b+w)/2))?b=a:w=a,(p=n>=(s=(x+M)/2))?x=s:M=s,(f=i>=(c=(_+S)/2))?_=c:S=c,o=v,!(v=v[m=f<<2|p<<1|d]))return o[m]=y,t;if(l=+t._x.call(null,v.data),h=+t._y.call(null,v.data),u=+t._z.call(null,v.data),e===l&&n===h&&i===u)return y.next=v,o?o[m]=y:t._root=y,t;do{o=o?o[m]=new Array(8):t._root=new Array(8),(d=e>=(a=(b+w)/2))?b=a:w=a,(p=n>=(s=(x+M)/2))?x=s:M=s,(f=i>=(c=(_+S)/2))?_=c:S=c}while((m=f<<2|p<<1|d)==(g=(u>=c)<<2|(h>=s)<<1|l>=a));return o[g]=v,o[m]=y,t}function hl(t,e,n,i,r,o,a){this.node=t,this.x0=e,this.y0=n,this.z0=i,this.x1=r,this.y1=o,this.z1=a}function ul(t){return t[0]}function dl(t){return t[1]}function pl(t){return t[2]}function fl(t,e,n,i){var r=new ml(null==e?ul:e,null==n?dl:n,null==i?pl:i,NaN,NaN,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function ml(t,e,n,i,r,o,a,s,c){this._x=t,this._y=e,this._z=n,this._x0=i,this._y0=r,this._z0=o,this._x1=a,this._y1=s,this._z1=c,this._root=void 0}function gl(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}cl.copy=function(){var t,e,n=new al(this._x,this._y,this._x0,this._y0,this._x1,this._y1),i=this._root;if(!i)return n;if(!i.length)return n._root=sl(i),n;for(t=[{source:i,target:n._root=new Array(4)}];i=t.pop();)for(var r=0;r<4;++r)(e=i.source[r])&&(e.length?t.push({source:e,target:i.target[r]=new Array(4)}):i.target[r]=sl(e));return n},cl.add=function(t){const e=+this._x.call(null,t),n=+this._y.call(null,t);return el(this.cover(e,n),e,n,t)},cl.addAll=function(t){var e,n,i,r,o=t.length,a=new Array(o),s=new Array(o),c=1/0,l=1/0,h=-1/0,u=-1/0;for(n=0;nh&&(h=i),ru&&(u=r));if(c>h||l>u)return this;for(this.cover(c,l).cover(h,u),n=0;nt||t>=r||i>e||e>=o;)switch(s=(ed||(o=c.y0)>p||(a=c.x1)=v)<<1|t>=g)&&(c=f[f.length-1],f[f.length-1]=f[f.length-1-l],f[f.length-1-l]=c)}else{var y=t-+this._x.call(null,m.data),b=e-+this._y.call(null,m.data),x=y*y+b*b;if(x=(s=(f+g)/2))?f=s:g=s,(h=a>=(c=(m+v)/2))?m=c:v=c,e=p,!(p=p[u=h<<1|l]))return this;if(!p.length)break;(e[u+1&3]||e[u+2&3]||e[u+3&3])&&(n=e,d=u)}for(;p.data!==t;)if(i=p,!(p=p.next))return this;return(r=p.next)&&delete p.next,i?(r?i.next=r:delete i.next,this):e?(r?e[u]=r:delete e[u],(p=e[0]||e[1]||e[2]||e[3])&&p===(e[3]||e[2]||e[1]||e[0])&&!p.length&&(n?n[d]=p:this._root=p),this):(this._root=r,this)},cl.removeAll=function(t){for(var e=0,n=t.length;e1&&(v=d.y+d.vy-h.y-h.vy||bl(s)),r>2&&(y=d.z+d.vz-h.z-h.vz||bl(s)),g*=p=((p=Math.sqrt(g*g+v*v+y*y))-n[m])/p*i*e[m],v*=p,y*=p,d.vx-=g*(f=a[m]),r>1&&(d.vy-=v*f),r>2&&(d.vz-=y*f),h.vx+=g*(f=1-f),r>1&&(h.vy+=v*f),r>2&&(h.vz+=y*f)}function p(){if(i){var r,s,l=i.length,h=t.length,u=new Map(i.map(((t,e)=>[c(t,e,i),t])));for(r=0,o=new Array(l);rp&&(p=i),rf&&(f=r),om&&(m=o));for(pt||t>a||r>e||e>s||o>n||n>c))return this;var l,h,u=a-i,d=this._root;switch(h=(n<(o+c)/2)<<2|(e<(r+s)/2)<<1|t<(i+a)/2){case 0:do{(l=new Array(8))[h]=d,d=l}while(s=r+(u*=2),c=o+u,t>(a=i+u)||e>s||n>c);break;case 1:do{(l=new Array(8))[h]=d,d=l}while(s=r+(u*=2),c=o+u,(i=a-u)>t||e>s||n>c);break;case 2:do{(l=new Array(8))[h]=d,d=l}while(r=s-(u*=2),c=o+u,t>(a=i+u)||r>e||n>c);break;case 3:do{(l=new Array(8))[h]=d,d=l}while(r=s-(u*=2),c=o+u,(i=a-u)>t||r>e||n>c);break;case 4:do{(l=new Array(8))[h]=d,d=l}while(s=r+(u*=2),o=c-u,t>(a=i+u)||e>s||o>n);break;case 5:do{(l=new Array(8))[h]=d,d=l}while(s=r+(u*=2),o=c-u,(i=a-u)>t||e>s||o>n);break;case 6:do{(l=new Array(8))[h]=d,d=l}while(r=s-(u*=2),o=c-u,t>(a=i+u)||r>e||o>n);break;case 7:do{(l=new Array(8))[h]=d,d=l}while(r=s-(u*=2),o=c-u,(i=a-u)>t||r>e||o>n)}this._root&&this._root.length&&(this._root=d)}return this._x0=i,this._y0=r,this._z0=o,this._x1=a,this._y1=s,this._z1=c,this},vl.data=function(){var t=[];return this.visit((function(e){if(!e.length)do{t.push(e.data)}while(e=e.next)})),t},vl.extent=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1],+t[0][2]).cover(+t[1][0],+t[1][1],+t[1][2]):isNaN(this._x0)?void 0:[[this._x0,this._y0,this._z0],[this._x1,this._y1,this._z1]]},vl.find=function(t,e,n,i){var r,o,a,s,c,l,h,u,d,p=this._x0,f=this._y0,m=this._z0,g=this._x1,v=this._y1,y=this._z1,b=[],x=this._root;for(x&&b.push(new hl(x,p,f,m,g,v,y)),null==i?i=1/0:(p=t-i,f=e-i,m=n-i,g=t+i,v=e+i,y=n+i,i*=i);u=b.pop();)if(!(!(x=u.node)||(o=u.x0)>g||(a=u.y0)>v||(s=u.z0)>y||(c=u.x1)=M)<<2|(e>=w)<<1|t>=_)&&(u=b[b.length-1],b[b.length-1]=b[b.length-1-d],b[b.length-1-d]=u)}else{var S=t-+this._x.call(null,x.data),E=e-+this._y.call(null,x.data),T=n-+this._z.call(null,x.data),A=S*S+E*E+T*T;if(A=(c=(v+x)/2))?v=c:x=c,(d=a>=(l=(y+_)/2))?y=l:_=l,(p=s>=(h=(b+w)/2))?b=h:w=h,e=g,!(g=g[f=p<<2|d<<1|u]))return this;if(!g.length)break;(e[f+1&7]||e[f+2&7]||e[f+3&7]||e[f+4&7]||e[f+5&7]||e[f+6&7]||e[f+7&7])&&(n=e,m=f)}for(;g.data!==t;)if(i=g,!(g=g.next))return this;return(r=g.next)&&delete g.next,i?(r?i.next=r:delete i.next,this):e?(r?e[f]=r:delete e[f],(g=e[0]||e[1]||e[2]||e[3]||e[4]||e[5]||e[6]||e[7])&&g===(e[7]||e[6]||e[5]||e[4]||e[3]||e[2]||e[1]||e[0])&&!g.length&&(n?n[m]=g:this._root=g),this):(this._root=r,this)},vl.removeAll=function(t){for(var e=0,n=t.length;e{}};function Sl(){for(var t,e=0,n=arguments.length,i={};e=0&&(n=t.slice(i+1),t=t.slice(0,i)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function Al(t,e){for(var n,i=0,r=t.length;i0)for(var n,i,r=new Array(n),o=0;o=0&&e._call.call(null,t),e=e._next;--Rl}()}finally{Rl=0,function(){var t,e,n=Pl,i=1/0;for(;n;)n._call?(i>n._time&&(i=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:Pl=e);Cl=t,Wl(i)}(),Dl=0}}function Vl(){var t=zl.now(),e=t-Il;e>1e3&&(kl-=e,Il=t)}function Wl(t){Rl||(Ol&&(Ol=clearTimeout(Ol)),t-Dl>24?(t<1/0&&(Ol=setTimeout(Gl,t-zl.now()-kl)),Nl&&(Nl=clearInterval(Nl))):(Nl||(Il=zl.now(),Nl=setInterval(Vl,1e3)),Rl=1,Bl(Gl)))}Ul.prototype=Hl.prototype={constructor:Ul,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?Fl():+n)+(null==e?0:+e),this._next||Cl===this||(Cl?Cl._next=this:Pl=this,Cl=this),this._call=t,this._time=n,Wl()},stop:function(){this._call&&(this._call=null,this._time=1/0,Wl())}};const ql=4294967296;function Xl(t){return t.x}function Yl(t){return t.y}function Zl(t){return t.z}var Jl=Math.PI*(3-Math.sqrt(5)),$l=20*Math.PI/(9+Math.sqrt(221));function Ql(t,e){e=e||2;var n,i=Math.min(3,Math.max(1,Math.round(e))),r=1,o=.001,a=1-Math.pow(o,1/300),s=0,c=.6,l=new Map,h=Hl(p),u=Sl("tick","end"),d=function(){let t=1;return()=>(t=(1664525*t+1013904223)%ql)/ql}();function p(){f(),u.call("tick",n),r1&&(null==h.fy?h.y+=h.vy*=c:(h.y=h.fy,h.vy=0)),i>2&&(null==h.fz?h.z+=h.vz*=c:(h.z=h.fz,h.vz=0));return n}function m(){for(var e,n=0,r=t.length;n1&&isNaN(e.y)||i>2&&isNaN(e.z)){var o=10*(i>2?Math.cbrt(.5+n):i>1?Math.sqrt(.5+n):n),a=n*Jl,s=n*$l;1===i?e.x=o:2===i?(e.x=o*Math.cos(a),e.y=o*Math.sin(a)):(e.x=o*Math.sin(a)*Math.cos(s),e.y=o*Math.cos(a),e.z=o*Math.sin(a)*Math.sin(s))}(isNaN(e.vx)||i>1&&isNaN(e.vy)||i>2&&isNaN(e.vz))&&(e.vx=0,i>1&&(e.vy=0),i>2&&(e.vz=0))}}function g(e){return e.initialize&&e.initialize(t,i,d),e}return null==t&&(t=[]),m(),n={tick:f,restart:function(){return h.restart(p),n},stop:function(){return h.stop(),n},numDimensions:function(t){return arguments.length?(i=Math.min(3,Math.max(1,Math.round(t))),l.forEach(g),n):i},nodes:function(e){return arguments.length?(t=e,m(),l.forEach(g),n):t},alpha:function(t){return arguments.length?(r=+t,n):r},alphaMin:function(t){return arguments.length?(o=+t,n):o},alphaDecay:function(t){return arguments.length?(a=+t,n):+a},alphaTarget:function(t){return arguments.length?(s=+t,n):s},velocityDecay:function(t){return arguments.length?(c=1-t,n):1-c},randomSource:function(t){return arguments.length?(d=t,l.forEach(g),n):d},force:function(t,e){return arguments.length>1?(null==e?l.delete(t):l.set(t,g(e)),n):l.get(t)},find:function(){var e,n,r,o,a,s,c=Array.prototype.slice.call(arguments),l=c.shift()||0,h=(i>1?c.shift():null)||0,u=(i>2?c.shift():null)||0,d=c.shift()||1/0,p=0,f=t.length;for(d*=d,p=0;p1?(u.on(t,e),n):u.on(t)}}}function Kl(){var t,e,n,i,r,o,a=yl(-30),s=1,c=1/0,l=.81;function h(i){var o,a=t.length,s=(1===e?$c(t,Xl):2===e?ol(t,Xl,Yl):3===e?fl(t,Xl,Yl,Zl):null).visitAfter(d);for(r=i,o=0;o1&&(t.y=a/h),e>2&&(t.z=s/h)}else{(n=t).x=n.data.x,e>1&&(n.y=n.data.y),e>2&&(n.z=n.data.z);do{l+=o[n.data.index]}while(n=n.next)}t.value=l}function p(t,a,h,u,d){if(!t.value)return!0;var p=[h,u,d][e-1],f=t.x-n.x,m=e>1?t.y-n.y:0,g=e>2?t.z-n.z:0,v=p-a,y=f*f+m*m+g*g;if(v*v/l1&&0===m&&(y+=(m=bl(i))*m),e>2&&0===g&&(y+=(g=bl(i))*g),y1&&(n.vy+=m*t.value*r/y),e>2&&(n.vz+=g*t.value*r/y)),!0;if(!(t.length||y>=c)){(t.data!==n||t.next)&&(0===f&&(y+=(f=bl(i))*f),e>1&&0===m&&(y+=(m=bl(i))*m),e>2&&0===g&&(y+=(g=bl(i))*g),y1&&(n.vy+=m*v),e>2&&(n.vz+=g*v))}while(t=t.next)}}return h.initialize=function(n,r,o){t=n,e=r,i=o,u()},h.strength=function(t){return arguments.length?(a="function"==typeof t?t:yl(+t),u(),h):a},h.distanceMin=function(t){return arguments.length?(s=t*t,h):Math.sqrt(s)},h.distanceMax=function(t){return arguments.length?(c=t*t,h):Math.sqrt(c)},h.theta=function(t){return arguments.length?(l=t*t,h):Math.sqrt(l)},h}var th=function(t){!function(t){if(!t)throw new Error("Eventify cannot use falsy object as events subject");for(var e=["on","fire","off"],n=0;n1&&(i=Array.prototype.splice.call(arguments,1));for(var o=0;o=0&&i.links.splice(e,1),r&&(e=ih(t,r.links))>=0&&r.links.splice(e,1),s(t,"remove"),h(),!0}function x(t,e){var n,i=m(t);if(!i||!i.links)return null;for(n=0;n0&&(u.fire("changed",a),a.length=0)}function S(t){if("function"!=typeof t)throw new Error("Function is expected to iterate over graph nodes. You passed "+t);for(var n=e.values(),i=n.next();!i.done;){if(t(i.value))return!0;i=n.next()}}},nh=th;function ih(t,e){if(!e)return-1;if(e.indexOf)return e.indexOf(t);var n,i=e.length;for(n=0;n {var}max) {var}max = pos.{var};",{indent:6})}\n }\n\n // Makes the bounds square.\n var maxSideLength = -Infinity;\n ${e("if ({var}max - {var}min > maxSideLength) maxSideLength = {var}max - {var}min ;",{indent:4})}\n\n currentInCache = 0;\n root = newNode();\n ${e("root.min_{var} = {var}min;",{indent:4})}\n ${e("root.max_{var} = {var}min + maxSideLength;",{indent:4})}\n\n i = bodies.length - 1;\n if (i >= 0) {\n root.body = bodies[i];\n }\n while (i--) {\n insert(bodies[i], root);\n }\n }\n\n function insert(newBody) {\n insertStack.reset();\n insertStack.push(root, newBody);\n\n while (!insertStack.isEmpty()) {\n var stackItem = insertStack.pop();\n var node = stackItem.node;\n var body = stackItem.body;\n\n if (!node.body) {\n // This is internal node. Update the total mass of the node and center-of-mass.\n ${e("var {var} = body.pos.{var};",{indent:8})}\n node.mass += body.mass;\n ${e("node.mass_{var} += body.mass * {var};",{indent:8})}\n\n // Recursively insert the body in the appropriate quadrant.\n // But first find the appropriate quadrant.\n var quadIdx = 0; // Assume we are in the 0's quad.\n ${e("var min_{var} = node.min_{var};",{indent:8})}\n ${e("var max_{var} = (min_{var} + node.max_{var}) / 2;",{indent:8})}\n\n${function(e){let n=[],i=Array(e+1).join(" ");for(let e=0;e max_${bh(e)}) {`),n.push(i+` quadIdx = quadIdx + ${Math.pow(2,e)};`),n.push(i+` min_${bh(e)} = max_${bh(e)};`),n.push(i+` max_${bh(e)} = node.max_${bh(e)};`),n.push(i+"}");return n.join("\n")}(8)}\n\n var child = getChild(node, quadIdx);\n\n if (!child) {\n // The node is internal but this quadrant is not taken. Add\n // subnode to it.\n child = newNode();\n ${e("child.min_{var} = min_{var};",{indent:10})}\n ${e("child.max_{var} = max_{var};",{indent:10})}\n child.body = body;\n\n setChild(node, quadIdx, child);\n } else {\n // continue searching in this quadrant.\n insertStack.push(child, body);\n }\n } else {\n // We are trying to add to the leaf node.\n // We have to convert current leaf into internal node\n // and continue adding two nodes.\n var oldBody = node.body;\n node.body = null; // internal nodes do not cary bodies\n\n if (isSamePosition(oldBody.pos, body.pos)) {\n // Prevent infinite subdivision by bumping one node\n // anywhere in this quadrant\n var retriesCount = 3;\n do {\n var offset = random.nextDouble();\n ${e("var d{var} = (node.max_{var} - node.min_{var}) * offset;",{indent:12})}\n\n ${e("oldBody.pos.{var} = node.min_{var} + d{var};",{indent:12})}\n retriesCount -= 1;\n // Make sure we don't bump it out of the box. If we do, next iteration should fix it\n } while (retriesCount > 0 && isSamePosition(oldBody.pos, body.pos));\n\n if (retriesCount === 0 && isSamePosition(oldBody.pos, body.pos)) {\n // This is very bad, we ran out of precision.\n // if we do not return from the method we'll get into\n // infinite loop here. So we sacrifice correctness of layout, and keep the app running\n // Next layout iteration should get larger bounding box in the first step and fix this\n return;\n }\n }\n // Next iteration should subdivide node further.\n insertStack.push(node, oldBody);\n insertStack.push(node, body);\n }\n }\n }\n}\nreturn createQuadTree;\n\n`}function _h(t){let e=yh(t);return`\n function isSamePosition(point1, point2) {\n ${e("var d{var} = Math.abs(point1.{var} - point2.{var});",{indent:2})}\n \n return ${e("d{var} < 1e-8",{join:" && "})};\n } \n`}function wh(t){var e=Math.pow(2,t);return`\nfunction setChild(node, idx, child) {\n ${function(){let t=[];for(let n=0;n 0) {\n return this.stack[--this.popIdx];\n }\n },\n reset: function () {\n this.popIdx = 0;\n }\n};\n\nfunction InsertStackElement(node, body) {\n this.node = node; // QuadTree node\n this.body = body; // physical body which needs to be inserted to node\n}\n"}vh.exports=function(t){let e=xh(t);return new Function(e)()},vh.exports.generateQuadTreeFunctionBody=xh,vh.exports.getInsertStackCode=Eh,vh.exports.getQuadNodeCode=Sh,vh.exports.isSamePosition=_h,vh.exports.getChildBodyCode=Mh,vh.exports.setChildBodyCode=wh;var Th={exports:{}};Th.exports=function(t){let e=Lh(t);return new Function("bodies","settings","random",e)},Th.exports.generateFunctionBody=Lh;const Ah=dh;function Lh(t){let e=Ah(t);return`\n var boundingBox = {\n ${e("min_{var}: 0, max_{var}: 0,",{indent:4})}\n };\n\n return {\n box: boundingBox,\n\n update: updateBoundingBox,\n\n reset: resetBoundingBox,\n\n getBestNewPosition: function (neighbors) {\n var ${e("base_{var} = 0",{join:", "})};\n\n if (neighbors.length) {\n for (var i = 0; i < neighbors.length; ++i) {\n let neighborPos = neighbors[i].pos;\n ${e("base_{var} += neighborPos.{var};",{indent:10})}\n }\n\n ${e("base_{var} /= neighbors.length;",{indent:8})}\n } else {\n ${e("base_{var} = (boundingBox.min_{var} + boundingBox.max_{var}) / 2;",{indent:8})}\n }\n\n var springLength = settings.springLength;\n return {\n ${e("{var}: base_{var} + (random.nextDouble() - 0.5) * springLength,",{indent:8})}\n };\n }\n };\n\n function updateBoundingBox() {\n var i = bodies.length;\n if (i === 0) return; // No bodies - no borders.\n\n ${e("var max_{var} = -Infinity;",{indent:4})}\n ${e("var min_{var} = Infinity;",{indent:4})}\n\n while(i--) {\n // this is O(n), it could be done faster with quadtree, if we check the root node bounds\n var bodyPos = bodies[i].pos;\n ${e("if (bodyPos.{var} < min_{var}) min_{var} = bodyPos.{var};",{indent:6})}\n ${e("if (bodyPos.{var} > max_{var}) max_{var} = bodyPos.{var};",{indent:6})}\n }\n\n ${e("boundingBox.min_{var} = min_{var};",{indent:4})}\n ${e("boundingBox.max_{var} = max_{var};",{indent:4})}\n }\n\n function resetBoundingBox() {\n ${e("boundingBox.min_{var} = boundingBox.max_{var} = 0;",{indent:4})}\n }\n`}var Ph={exports:{}};const Ch=dh;function Rh(t){return`\n if (!Number.isFinite(options.dragCoefficient)) throw new Error('dragCoefficient is not a finite number');\n\n return {\n update: function(body) {\n ${Ch(t)("body.force.{var} -= options.dragCoefficient * body.velocity.{var};",{indent:6})}\n }\n };\n`}Ph.exports=function(t){let e=Rh(t);return new Function("options",e)},Ph.exports.generateCreateDragForceFunctionBody=Rh;var Oh={exports:{}};const Nh=dh;function Ih(t){let e=Nh(t);return`\n if (!Number.isFinite(options.springCoefficient)) throw new Error('Spring coefficient is not a number');\n if (!Number.isFinite(options.springLength)) throw new Error('Spring length is not a number');\n\n return {\n /**\n * Updates forces acting on a spring\n */\n update: function (spring) {\n var body1 = spring.from;\n var body2 = spring.to;\n var length = spring.length < 0 ? options.springLength : spring.length;\n ${e("var d{var} = body2.pos.{var} - body1.pos.{var};",{indent:6})}\n var r = Math.sqrt(${e("d{var} * d{var}",{join:" + "})});\n\n if (r === 0) {\n ${e("d{var} = (random.nextDouble() - 0.5) / 50;",{indent:8})}\n r = Math.sqrt(${e("d{var} * d{var}",{join:" + "})});\n }\n\n var d = r - length;\n var coefficient = ((spring.coefficient > 0) ? spring.coefficient : options.springCoefficient) * d / r;\n\n ${e("body1.force.{var} += coefficient * d{var}",{indent:6})};\n body1.springCount += 1;\n body1.springLength += r;\n\n ${e("body2.force.{var} -= coefficient * d{var}",{indent:6})};\n body2.springCount += 1;\n body2.springLength += r;\n }\n };\n`}Oh.exports=function(t){let e=Ih(t);return new Function("options","random",e)},Oh.exports.generateCreateSpringForceFunctionBody=Ih;var Dh={exports:{}};const kh=dh;function zh(t){let e=kh(t);return`\n var length = bodies.length;\n if (length === 0) return 0;\n\n ${e("var d{var} = 0, t{var} = 0;",{indent:2})}\n\n for (var i = 0; i < length; ++i) {\n var body = bodies[i];\n if (body.isPinned) continue;\n\n if (adaptiveTimeStepWeight && body.springCount) {\n timeStep = (adaptiveTimeStepWeight * body.springLength/body.springCount);\n }\n\n var coeff = timeStep / body.mass;\n\n ${e("body.velocity.{var} += coeff * body.force.{var};",{indent:4})}\n ${e("var v{var} = body.velocity.{var};",{indent:4})}\n var v = Math.sqrt(${e("v{var} * v{var}",{join:" + "})});\n\n if (v > 1) {\n // We normalize it so that we move within timeStep range. \n // for the case when v <= 1 - we let velocity to fade out.\n ${e("body.velocity.{var} = v{var} / v;",{indent:6})}\n }\n\n ${e("d{var} = timeStep * body.velocity.{var};",{indent:4})}\n\n ${e("body.pos.{var} += d{var};",{indent:4})}\n\n ${e("t{var} += Math.abs(d{var});",{indent:4})}\n }\n\n return (${e("t{var} * t{var}",{join:" + "})})/length;\n`}Dh.exports=function(t){let e=zh(t);return new Function("bodies","timeStep","adaptiveTimeStepWeight",e)},Dh.exports.generateIntegratorFunctionBody=zh;var Bh=function(t,e,n,i){this.from=t,this.to=e,this.length=n,this.coefficient=i};var Fh=function t(e,n){var i;e||(e={});if(n)for(i in n)if(n.hasOwnProperty(i)){var r=e.hasOwnProperty(i),o=typeof n[i];!r||typeof e[i]!==o?e[i]=n[i]:"object"===o&&(e[i]=t(e[i],n[i]))}return e};var jh={exports:{}};function Uh(t){return new Hh("number"==typeof t?t:+new Date)}function Hh(t){this.seed=t}function Gh(t){return Math.sqrt(2*Math.PI/t)*Math.pow(1/Math.E*(t+1/(12*t-1/(10*t))),t)}function Vh(){var t=this.seed;return t=4294967295&(3042594569^(t=(t=4294967295&((t=(t=4294967295&(3345072700^(t=t+2127912214+(t<<12)&4294967295)^t>>>19))+374761393+(t<<5)&4294967295)+3550635116^t<<9))+4251993797+(t<<3)&4294967295)^t>>>16),this.seed=t,(268435455&t)/268435456}jh.exports=Uh,jh.exports.random=Uh,jh.exports.randomIterator=function(t,e){var n=e||Uh();if("function"!=typeof n.next)throw new Error("customRandom does not match expected API: next() function is missing");return{forEach:function(e){var i,r,o;for(i=t.length-1;i>0;--i)r=n.next(i+1),o=t[r],t[r]=t[i],t[i]=o,e(o);t.length&&e(t[0])},shuffle:function(){var e,i,r;for(e=t.length-1;e>0;--e)i=n.next(e+1),r=t[i],t[i]=t[e],t[e]=r;return t}}},Hh.prototype.next=function(t){return Math.floor(this.nextDouble()*t)},Hh.prototype.nextDouble=Vh,Hh.prototype.uniform=Vh,Hh.prototype.gaussian=function(){var t,e,n;do{e=2*this.nextDouble()-1,n=2*this.nextDouble()-1,t=e*e+n*n}while(t>=1||0===t);return e*Math.sqrt(-2*Math.log(t)/t)},Hh.prototype.levy=function(){var t=1.5,e=Math.pow(Gh(2.5)*Math.sin(Math.PI*t/2)/(Gh(1.25)*t*Math.pow(2,.25)),1/t);return this.gaussian()*e/Math.pow(Math.abs(this.gaussian()),1/t)};var Wh=function(t){var e=Bh,n=Fh,i=th;if(t){if(void 0!==t.springCoeff)throw new Error("springCoeff was renamed to springCoefficient");if(void 0!==t.dragCoeff)throw new Error("dragCoeff was renamed to dragCoefficient")}t=n(t,{springLength:10,springCoefficient:.8,gravity:-12,theta:.8,dragCoefficient:.9,timeStep:.5,adaptiveTimeStepWeight:0,dimensions:2,debug:!1});var r=Qh[t.dimensions];if(!r){var o=t.dimensions;r={Body:qh(o,t.debug),createQuadTree:Xh(o),createBounds:Yh(o),createDragForce:Zh(o),createSpringForce:Jh(o),integrate:$h(o)},Qh[o]=r}var a=r.Body,s=r.createQuadTree,c=r.createBounds,l=r.createDragForce,h=r.createSpringForce,u=r.integrate,d=jh.exports.random(42),p=[],f=[],m=s(t,d),g=c(p,t,d),v=h(t,d),y=l(t),b=[],x=new Map,_=0;S("nbody",(function(){if(0===p.length)return;m.insertBodies(p);var t=p.length;for(;t--;){var e=p[t];e.isPinned||(e.reset(),m.updateBodyForce(e),y.update(e))}})),S("spring",(function(){var t=f.length;for(;t--;)v.update(f[t])}));var w={bodies:p,quadTree:m,springs:f,settings:t,addForce:S,removeForce:function(t){var e=b.indexOf(x.get(t));if(e<0)return;b.splice(e,1),x.delete(t)},getForces:function(){return x},step:function(){for(var e=0;enew a(t))(t);return p.push(e),e},removeBody:function(t){if(t){var e=p.indexOf(t);if(!(e<0))return p.splice(e,1),0===p.length&&g.reset(),!0}},addSpring:function(t,n,i,r){if(!t||!n)throw new Error("Cannot add null spring to force simulator");"number"!=typeof i&&(i=-1);var o=new e(t,n,i,r>=0?r:-1);return f.push(o),o},getTotalMovement:function(){return 0},removeSpring:function(t){if(t){var e=f.indexOf(t);return e>-1?(f.splice(e,1),!0):void 0}},getBestNewBodyPosition:function(t){return g.getBestNewPosition(t)},getBBox:M,getBoundingBox:M,invalidateBBox:function(){console.warn("invalidateBBox() is deprecated, bounds always recomputed on `getBBox()` call")},gravity:function(e){return void 0!==e?(t.gravity=e,m.options({gravity:e}),this):t.gravity},theta:function(e){return void 0!==e?(t.theta=e,m.options({theta:e}),this):t.theta},random:d};return function(t,e){for(var n in t)Kh(t,e,n)}(t,w),i(w),w;function M(){return g.update(),g.box}function S(t,e){if(x.has(t))throw new Error("Force "+t+" is already added");x.set(t,e),b.push(e)}},qh=lh.exports,Xh=vh.exports,Yh=Th.exports,Zh=Ph.exports,Jh=Oh.exports,$h=Dh.exports,Qh={};function Kh(t,e,n){if(t.hasOwnProperty(n)&&"function"!=typeof e[n]){var i=Number.isFinite(t[n]);e[n]=i?function(i){if(void 0!==i){if(!Number.isFinite(i))throw new Error("Value of "+n+" should be a valid number.");return t[n]=i,e}return t[n]}:function(i){return void 0!==i?(t[n]=i,e):t[n]}}}ch.exports=function(t,e){if(!t)throw new Error("Graph structure cannot be undefined");var n=(e&&e.createSimulator||Wh)(e);if(Array.isArray(e))throw new Error("Physics settings is expected to be an object");var i=function(e){var n=t.getLinks(e);return n?1+n.length/3:1};e&&"function"==typeof e.nodeMass&&(i=e.nodeMass);var r=new Map,o={},a=0,s=n.settings.springTransform||eu;a=0,t.forEachNode((function(t){p(t.id),a+=1})),t.forEachLink(m),t.on("changed",d);var c=!1,l={step:function(){if(0===a)return h(!0),!0;var t=n.step();l.lastMove=t,l.fire("step");var e=t/a<=.01;return h(e),e},getNodePosition:function(t){return y(t).pos},setNodePosition:function(t){var e=y(t);e.setPosition.apply(e,Array.prototype.slice.call(arguments,1))},getLinkPosition:function(t){var e=o[t];if(e)return{from:e.from.pos,to:e.to.pos}},getGraphRect:function(){return n.getBBox()},forEachBody:u,pinNode:function(t,e){y(t.id).isPinned=!!e},isNodePinned:function(t){return y(t.id).isPinned},dispose:function(){t.off("changed",d),l.fire("disposed")},getBody:function(t){return r.get(t)},getSpring:function(e,n){var i;if(void 0===n)i="object"!=typeof e?e:e.id;else{var r=t.hasLink(e,n);if(!r)return;i=r.id}return o[i]},getForceVectorLength:function(){var t=0,e=0;return u((function(n){t+=Math.abs(n.force.x),e+=Math.abs(n.force.y)})),Math.sqrt(t*t+e*e)},simulator:n,graph:t,lastMove:0};return tu(l),l;function h(t){var e;c!==t&&(c=t,e=t,l.fire("stable",e))}function u(t){r.forEach(t)}function d(e){for(var n=0;n=0?i=setTimeout(c,e-l):(i=null,n||(s=t.apply(o,r),o=r=null))}null==e&&(e=100);var l=function(){o=this,r=arguments,a=Date.now();var l=n&&!i;return i||(i=setTimeout(c,e)),l&&(s=t.apply(o,r),o=r=null),s};return l.clear=function(){i&&(clearTimeout(i),i=null)},l.flush=function(){i&&(s=t.apply(o,r),o=r=null,clearTimeout(i),i=null)},l}iu.debounce=iu;var ru=iu;function ou(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if(!(Symbol.iterator in Object(t))&&"[object Arguments]"!==Object.prototype.toString.call(t))return;var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=t[Symbol.iterator]();!(i=(a=s.next()).done)&&(n.push(a.value),!e||n.length!==e);i=!0);}catch(t){r=!0,o=t}finally{try{i||null==s.return||s.return()}finally{if(r)throw o}}return n}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var au=function t(e,n){var i=n.default,r=void 0===i?null:i,o=n.triggerUpdate,a=void 0===o||o,s=n.onChange,c=void 0===s?function(t,e){}:s;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.name=e,this.defaultVal=r,this.triggerUpdate=a,this.onChange=c};function su(t){var e=t.stateInit,n=void 0===e?function(){return{}}:e,i=t.props,r=void 0===i?{}:i,o=t.methods,a=void 0===o?{}:o,s=t.aliases,c=void 0===s?{}:s,l=t.init,h=void 0===l?function(){}:l,u=t.update,d=void 0===u?function(){}:u,p=Object.keys(r).map((function(t){return new au(t,r[t])}));return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=Object.assign({},n instanceof Function?n(t):n,{initialised:!1}),i={};function r(e){return o(e,t),s(),r}var o=function(t,n){h.call(r,t,e,n),e.initialised=!0},s=ru((function(){e.initialised&&(d.call(r,e,i),i={})}),1);return p.forEach((function(t){r[t.name]=function(t){var n=t.name,o=t.triggerUpdate,a=void 0!==o&&o,c=t.onChange,l=void 0===c?function(t,e){}:c,h=t.defaultVal,u=void 0===h?null:h;return function(t){var o=e[n];if(!arguments.length)return o;var c=void 0===t?u:t;return e[n]=c,l.call(r,c,e,o),!i.hasOwnProperty(n)&&(i[n]=o),a&&s(),r}}(t)})),Object.keys(a).forEach((function(t){r[t]=function(){for(var n,i=arguments.length,o=new Array(i),s=0;s=e)&&(n=e);else{let i=-1;for(let r of t)null!=(r=e(r,++i,t))&&(n=r)&&(n=r)}return n}function hu(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n>e||void 0===n&&e>=e)&&(n=e);else{let i=-1;for(let r of t)null!=(r=e(r,++i,t))&&(n>r||void 0===n&&r>=r)&&(n=r)}return n}function uu(t,e){if(null==t)return{};var n,i,r=function(t,e){if(null==t)return{};var n,i,r={},o=Object.keys(t);for(i=0;i=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}function du(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if(!(Symbol.iterator in Object(t))&&"[object Arguments]"!==Object.prototype.toString.call(t))return;var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=t[Symbol.iterator]();!(i=(a=s.next()).done)&&(n.push(a.value),!e||n.length!==e);i=!0);}catch(t){r=!0,o=t}finally{try{i||null==s.return||s.return()}finally{if(r)throw o}}return n}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function pu(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=(e instanceof Array?e.length?e:[void 0]:[e]).map((function(t){return{keyAccessor:t,isProp:!(t instanceof Function)}})),o=t.reduce((function(t,e){var i=t,o=e;return r.forEach((function(t,e){var a,s=t.keyAccessor;if(t.isProp){var c=o,l=c[s],h=uu(c,[s].map(fu));a=l,o=h}else a=s(o,e);e+11&&void 0!==arguments[1]?arguments[1]:1;i===r.length?Object.keys(e).forEach((function(t){return e[t]=n(e[t])})):Object.values(e).forEach((function(e){return t(e,i+1)}))}(o);var a=o;return i&&(a=[],function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];n.length===r.length?a.push({keys:n,vals:e}):Object.entries(e).forEach((function(e){var i=du(e,2),r=i[0],o=i[1];return t(o,[].concat(pu(n),[r]))}))}(o),e instanceof Array&&0===e.length&&1===a.length&&(a[0].keys=[])),a};function gu(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function vu(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function yu(t,e){if(null==t)return{};var n,i,r=function(t,e){if(null==t)return{};var n,i,r={},o=Object.keys(t);for(i=0;i=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}function bu(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if(!(Symbol.iterator in Object(t))&&"[object Arguments]"!==Object.prototype.toString.call(t))return;var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=t[Symbol.iterator]();!(i=(a=s.next()).done)&&(n.push(a.value),!e||n.length!==e);i=!0);}catch(t){r=!0,o=t}finally{try{i||null==s.return||s.return()}finally{if(r)throw o}}return n}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function xu(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t}if(t=C(t,360),e=C(e,100),n=C(n,100),0===e)i=r=o=n;else{var s=n<.5?n*(1+e):n+e-n*e,c=2*n-s;i=a(c,s,t+1/3),r=a(c,s,t),o=a(c,s,t-1/3)}return{r:255*i,g:255*r,b:255*o}}(t.h,c,h),u=!0,d="hsl"),t.hasOwnProperty("a")&&(o=t.a));var p,f,m;return o=P(o),{ok:u,format:t.format||d,r:a(255,s(r.r,0)),g:a(255,s(r.g,0)),b:a(255,s(r.b,0)),a:o}}(t);this._originalInput=t,this._r=h.r,this._g=h.g,this._b=h.b,this._a=h.a,this._roundA=o(100*this._a)/100,this._format=c.format||h.format,this._gradientType=c.gradientType,this._r<1&&(this._r=o(this._r)),this._g<1&&(this._g=o(this._g)),this._b<1&&(this._b=o(this._b)),this._ok=h.ok,this._tc_id=r++}function h(t,e,n){t=C(t,255),e=C(e,255),n=C(n,255);var i,r,o=s(t,e,n),c=a(t,e,n),l=(o+c)/2;if(o==c)i=r=0;else{var h=o-c;switch(r=l>.5?h/(2-o-c):h/(o+c),o){case t:i=(e-n)/h+(e>1)+720)%360;--e;)i.h=(i.h+r)%360,o.push(l(i));return o}function T(t,e){e=e||6;for(var n=l(t).toHsv(),i=n.h,r=n.s,o=n.v,a=[],s=1/e;e--;)a.push(l({h:i,s:r,v:o})),o=(o+s)%1;return a}l.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},getLuminance:function(){var t,n,i,r=this.toRgb();return t=r.r/255,n=r.g/255,i=r.b/255,.2126*(t<=.03928?t/12.92:e.pow((t+.055)/1.055,2.4))+.7152*(n<=.03928?n/12.92:e.pow((n+.055)/1.055,2.4))+.0722*(i<=.03928?i/12.92:e.pow((i+.055)/1.055,2.4))},setAlpha:function(t){return this._a=P(t),this._roundA=o(100*this._a)/100,this},toHsv:function(){var t=u(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=u(this._r,this._g,this._b),e=o(360*t.h),n=o(100*t.s),i=o(100*t.v);return 1==this._a?"hsv("+e+", "+n+"%, "+i+"%)":"hsva("+e+", "+n+"%, "+i+"%, "+this._roundA+")"},toHsl:function(){var t=h(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=h(this._r,this._g,this._b),e=o(360*t.h),n=o(100*t.s),i=o(100*t.l);return 1==this._a?"hsl("+e+", "+n+"%, "+i+"%)":"hsla("+e+", "+n+"%, "+i+"%, "+this._roundA+")"},toHex:function(t){return d(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(t){return function(t,e,n,i,r){var a=[N(o(t).toString(16)),N(o(e).toString(16)),N(o(n).toString(16)),N(D(i))];if(r&&a[0].charAt(0)==a[0].charAt(1)&&a[1].charAt(0)==a[1].charAt(1)&&a[2].charAt(0)==a[2].charAt(1)&&a[3].charAt(0)==a[3].charAt(1))return a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0)+a[3].charAt(0);return a.join("")}(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return"#"+this.toHex8(t)},toRgb:function(){return{r:o(this._r),g:o(this._g),b:o(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+o(this._r)+", "+o(this._g)+", "+o(this._b)+")":"rgba("+o(this._r)+", "+o(this._g)+", "+o(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:o(100*C(this._r,255))+"%",g:o(100*C(this._g,255))+"%",b:o(100*C(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+o(100*C(this._r,255))+"%, "+o(100*C(this._g,255))+"%, "+o(100*C(this._b,255))+"%)":"rgba("+o(100*C(this._r,255))+"%, "+o(100*C(this._g,255))+"%, "+o(100*C(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(L[d(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e="#"+p(this._r,this._g,this._b,this._a),n=e,i=this._gradientType?"GradientType = 1, ":"";if(t){var r=l(t);n="#"+p(r._r,r._g,r._b,r._a)}return"progid:DXImageTransform.Microsoft.gradient("+i+"startColorstr="+e+",endColorstr="+n+")"},toString:function(t){var e=!!t;t=t||this._format;var n=!1,i=this._a<1&&this._a>=0;return e||!i||"hex"!==t&&"hex6"!==t&&"hex3"!==t&&"hex4"!==t&&"hex8"!==t&&"name"!==t?("rgb"===t&&(n=this.toRgbString()),"prgb"===t&&(n=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(n=this.toHexString()),"hex3"===t&&(n=this.toHexString(!0)),"hex4"===t&&(n=this.toHex8String(!0)),"hex8"===t&&(n=this.toHex8String()),"name"===t&&(n=this.toName()),"hsl"===t&&(n=this.toHslString()),"hsv"===t&&(n=this.toHsvString()),n||this.toHexString()):"name"===t&&0===this._a?this.toName():this.toRgbString()},clone:function(){return l(this.toString())},_applyModification:function(t,e){var n=t.apply(null,[this].concat([].slice.call(e)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(v,arguments)},brighten:function(){return this._applyModification(y,arguments)},darken:function(){return this._applyModification(b,arguments)},desaturate:function(){return this._applyModification(f,arguments)},saturate:function(){return this._applyModification(m,arguments)},greyscale:function(){return this._applyModification(g,arguments)},spin:function(){return this._applyModification(x,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(E,arguments)},complement:function(){return this._applyCombination(_,arguments)},monochromatic:function(){return this._applyCombination(T,arguments)},splitcomplement:function(){return this._applyCombination(S,arguments)},triad:function(){return this._applyCombination(w,arguments)},tetrad:function(){return this._applyCombination(M,arguments)}},l.fromRatio=function(t,e){if("object"==typeof t){var n={};for(var i in t)t.hasOwnProperty(i)&&(n[i]="a"===i?t[i]:I(t[i]));t=n}return l(t,e)},l.equals=function(t,e){return!(!t||!e)&&l(t).toRgbString()==l(e).toRgbString()},l.random=function(){return l.fromRatio({r:c(),g:c(),b:c()})},l.mix=function(t,e,n){n=0===n?0:n||50;var i=l(t).toRgb(),r=l(e).toRgb(),o=n/100;return l({r:(r.r-i.r)*o+i.r,g:(r.g-i.g)*o+i.g,b:(r.b-i.b)*o+i.b,a:(r.a-i.a)*o+i.a})}, +// =4.5;break;case"AAlarge":r=o>=3;break;case"AAAsmall":r=o>=7}return r},l.mostReadable=function(t,e,n){var i,r,o,a,s=null,c=0;r=(n=n||{}).includeFallbackColors,o=n.level,a=n.size;for(var h=0;hc&&(c=i,s=l(e[h]));return l.isReadable(t,s,{level:o,size:a})||!r?s:(n.includeFallbackColors=!1,l.mostReadable(t,["#fff","#000"],n))};var A=l.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},L=l.hexNames=function(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[t[n]]=n);return e}(A);function P(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function C(t,n){(function(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t)})(t)&&(t="100%");var i=function(t){return"string"==typeof t&&-1!=t.indexOf("%")}(t);return t=a(n,s(0,parseFloat(t))),i&&(t=parseInt(t*n,10)/100),e.abs(t-n)<1e-6?1:t%n/parseFloat(n)}function R(t){return a(1,s(0,t))}function O(t){return parseInt(t,16)}function N(t){return 1==t.length?"0"+t:""+t}function I(t){return t<=1&&(t=100*t+"%"),t}function D(t){return e.round(255*parseFloat(t)).toString(16)}function k(t){return O(t)/255}var z,B,F,j=(B="[\\s|\\(]+("+(z="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+z+")[,|\\s]+("+z+")\\s*\\)?",F="[\\s|\\(]+("+z+")[,|\\s]+("+z+")[,|\\s]+("+z+")[,|\\s]+("+z+")\\s*\\)?",{CSS_UNIT:new RegExp(z),rgb:new RegExp("rgb"+B),rgba:new RegExp("rgba"+F),hsl:new RegExp("hsl"+B),hsla:new RegExp("hsla"+F),hsv:new RegExp("hsv"+B),hsva:new RegExp("hsva"+F),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function U(t){return!!j.CSS_UNIT.exec(t)}t.exports?t.exports=l:window.tinycolor=l}(Math)}(Tu);var Au=Tu.exports;function Lu(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Pu(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}function Fu(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function ju(t,e){return!e||"object"!=typeof e&&"function"!=typeof e?Fu(t):e}function Uu(t){var e=ku();return function(){var n,i=Iu(t);if(e){var r=Iu(this).constructor;n=Reflect.construct(i,arguments,r)}else n=i.apply(this,arguments);return ju(this,n)}}function Hu(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==n)return;var i,r,o=[],a=!0,s=!1;try{for(n=n.call(t);!(a=(i=n.next()).done)&&(o.push(i.value),!e||o.length!==e);a=!0);}catch(t){s=!0,r=t}finally{try{a||null==n.return||n.return()}finally{if(s)throw r}}return o}(t,e)||Vu(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Gu(t){return function(t){if(Array.isArray(t))return Wu(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||Vu(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Vu(t,e){if(t){if("string"==typeof t)return Wu(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Wu(t,e):void 0}}function Wu(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n2&&void 0!==arguments[2]?arguments[2]:{},i=n.objFilter,r=void 0===i?function(){return!0}:i,o=Bu(n,Zu);return wu(t,e.children.filter(r),(function(t){return e.add(t)}),(function(t){e.remove(t),Yu(t)}),Pu({objBindAttr:"__threeObj"},o))}var $u=function(t){return isNaN(t)?parseInt(Au(t).toHex(),16):t},Qu=function(t){return isNaN(t)?Au(t).getAlpha():1},Ku=function t(){var e=new Map,n=[],i=[],r=Su;function o(t){var o=t+"",a=e.get(o);if(!a){if(r!==Su)return r;e.set(o,a=n.push(t))}return i[(a-1)%i.length]}return o.domain=function(t){if(!arguments.length)return n.slice();n=[],e=new Map;for(const i of t){const t=i+"";e.has(t)||e.set(t,n.push(i))}return o},o.range=function(t){return arguments.length?(i=Array.from(t),o):i.slice()},o.unknown=function(t){return arguments.length?(r=t,o):r},o.copy=function(){return t(n,i).unknown(r)},Mu.apply(o,arguments),o}(Eu);function td(t,e,n){e&&"string"==typeof n&&t.filter((function(t){return!t[n]})).forEach((function(t){t[n]=Ku(e(t))}))}var ed=window.THREE?window.THREE:{Group:Dr,Mesh:mn,MeshLambertMaterial:Ba,Color:_e,BufferGeometry:Je,BufferAttribute:Le,Matrix4:Lt,Vector3:tt,SphereBufferGeometry:Ca,CylinderBufferGeometry:Yo,TubeBufferGeometry:class extends Je{constructor(t,e=64,n=1,i=8,r=!1){super(),this.type="TubeBufferGeometry",this.parameters={path:t,tubularSegments:e,radius:n,radialSegments:i,closed:r};const o=t.computeFrenetFrames(e,r);this.tangents=o.tangents,this.normals=o.normals,this.binormals=o.binormals;const a=new tt,s=new tt,c=new G;let l=new tt;const h=[],u=[],d=[],p=[];function f(r){l=t.getPointAt(r/e,l);const c=o.normals[r],d=o.binormals[r];for(let t=0;t<=i;t++){const e=t/i*Math.PI*2,r=Math.sin(e),o=-Math.cos(e);s.x=o*c.x+r*d.x,s.y=o*c.y+r*d.y,s.z=o*c.z+r*d.z,s.normalize(),u.push(s.x,s.y,s.z),a.x=l.x+n*s.x,a.y=l.y+n*s.y,a.z=l.z+n*s.z,h.push(a.x,a.y,a.z)}}!function(){for(let t=0;t1&&void 0!==arguments[1]?arguments[1]:Object,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=function(e){Nu(r,e);var i=Uu(r);function r(){var e;Ru(this,r);for(var o=arguments.length,a=new Array(o),s=0;s2?-60:-30),t<3&&i(e.graphData.nodes,"z"),t<2&&i(e.graphData.nodes,"y")}},dagMode:{onChange:function(t,e){!t&&"d3"===e.forceEngine&&(e.graphData.nodes||[]).forEach((function(t){return t.fx=t.fy=t.fz=void 0}))}},dagLevelDistance:{},dagNodeFilter:{default:function(t){return!0}},onDagError:{triggerUpdate:!1},nodeRelSize:{default:4},nodeId:{default:"id"},nodeVal:{default:"val"},nodeResolution:{default:8},nodeColor:{default:"color"},nodeAutoColorBy:{},nodeOpacity:{default:.75},nodeVisibility:{default:!0},nodeThreeObject:{},nodeThreeObjectExtend:{default:!1},linkSource:{default:"source"},linkTarget:{default:"target"},linkVisibility:{default:!0},linkColor:{default:"color"},linkAutoColorBy:{},linkOpacity:{default:.2},linkWidth:{},linkResolution:{default:6},linkCurvature:{default:0,triggerUpdate:!1},linkCurveRotation:{default:0,triggerUpdate:!1},linkMaterial:{},linkThreeObject:{},linkThreeObjectExtend:{default:!1},linkPositionUpdate:{triggerUpdate:!1},linkDirectionalArrowLength:{default:0},linkDirectionalArrowColor:{},linkDirectionalArrowRelPos:{default:.5,triggerUpdate:!1},linkDirectionalArrowResolution:{default:8},linkDirectionalParticles:{default:0},linkDirectionalParticleSpeed:{default:.01,triggerUpdate:!1},linkDirectionalParticleWidth:{default:.5},linkDirectionalParticleColor:{},linkDirectionalParticleResolution:{default:4},forceEngine:{default:"d3"},d3AlphaMin:{default:0},d3AlphaDecay:{default:.0228,triggerUpdate:!1,onChange:function(t,e){e.d3ForceLayout.alphaDecay(t)}},d3AlphaTarget:{default:0,triggerUpdate:!1,onChange:function(t,e){e.d3ForceLayout.alphaTarget(t)}},d3VelocityDecay:{default:.4,triggerUpdate:!1,onChange:function(t,e){e.d3ForceLayout.velocityDecay(t)}},ngraphPhysics:{default:{timeStep:20,gravity:-1.2,theta:.8,springLength:30,springCoefficient:8e-4,dragCoefficient:.02}},warmupTicks:{default:0,triggerUpdate:!1},cooldownTicks:{default:1/0,triggerUpdate:!1},cooldownTime:{default:15e3,triggerUpdate:!1},onLoading:{default:function(){},triggerUpdate:!1},onFinishLoading:{default:function(){},triggerUpdate:!1},onUpdate:{default:function(){},triggerUpdate:!1},onFinishUpdate:{default:function(){},triggerUpdate:!1},onEngineTick:{default:function(){},triggerUpdate:!1},onEngineStop:{default:function(){},triggerUpdate:!1}},methods:{refresh:function(t){return t._flushObjects=!0,t._rerender(),this},d3Force:function(t,e,n){return void 0===n?t.d3ForceLayout.force(e):(t.d3ForceLayout.force(e,n),this)},d3ReheatSimulation:function(t){return t.d3ForceLayout.alpha(1),this.resetCountdown(),this},resetCountdown:function(t){return t.cntTicks=0,t.startTickTime=new Date,t.engineRunning=!0,this},tickFrame:function(t){var e,n,i,r,o="ngraph"!==t.forceEngine;return t.engineRunning&&function(){++t.cntTicks>t.cooldownTicks||new Date-t.startTickTime>t.cooldownTime||o&&t.d3AlphaMin>0&&t.d3ForceLayout.alpha()0){var f=s.x-a.x,m=s.y-a.y||0,g=(new ed.Vector3).subVectors(u,h),v=g.clone().multiplyScalar(c).cross(0!==f||0!==m?new ed.Vector3(0,0,1):new ed.Vector3(0,1,0)).applyAxisAngle(g.normalize(),p).add((new ed.Vector3).addVectors(h,u).divideScalar(2));l=new ed.QuadraticBezierCurve3(h,v,u)}else{var y=70*c,b=-p,x=b+Math.PI/2;l=new ed.CubicBezierCurve3(h,new ed.Vector3(y*Math.cos(x),y*Math.sin(x),0).add(h),new ed.Vector3(y*Math.cos(b),y*Math.sin(b),0).add(h),u)}e.__curve=l}else e.__curve=null}}t.graphData.links.forEach((function(n){var i=n.__lineObj;if(i){var s=o?n:t.layout.getLinkPosition(t.layout.graph.getLink(n.source,n.target).id),c=s[o?"source":"from"],l=s[o?"target":"to"];if(c&&l&&c.hasOwnProperty("x")&&l.hasOwnProperty("x")){a(n);var h=r(n);if(!t.linkPositionUpdate||!t.linkPositionUpdate(h?i.children[1]:i,{start:{x:c.x,y:c.y,z:c.z},end:{x:l.x,y:l.y,z:l.z}},n)||h){var u=30,d=n.__curve,p=i.children.length?i.children[0]:i;if("Line"===p.type){if(d)p.geometry.setFromPoints(d.getPoints(u));else{var f=p.geometry.getAttribute("position");f&&f.array&&6===f.array.length||p.geometry[id]("position",f=new ed.BufferAttribute(new Float32Array(6),3)),f.array[0]=c.x,f.array[1]=c.y||0,f.array[2]=c.z||0,f.array[3]=l.x,f.array[4]=l.y||0,f.array[5]=l.z||0,f.needsUpdate=!0}p.geometry.computeBoundingSphere()}else if("Mesh"===p.type)if(d){p.geometry.type.match(/^Tube(Buffer)?Geometry$/)||(p.position.set(0,0,0),p.rotation.set(0,0,0),p.scale.set(1,1,1));var m=Math.ceil(10*e(n))/10/2,g=new ed.TubeBufferGeometry(d,u,m,t.linkResolution,!1);p.geometry.dispose(),p.geometry=g}else{if(!p.geometry.type.match(/^Cylinder(Buffer)?Geometry$/)){var v=Math.ceil(10*e(n))/10/2,y=new ed.CylinderBufferGeometry(v,v,1,t.linkResolution,1,!1);y[rd]((new ed.Matrix4).makeTranslation(0,.5,0)),y[rd]((new ed.Matrix4).makeRotationX(Math.PI/2)),p.geometry.dispose(),p.geometry=y}var b=new ed.Vector3(c.x,c.y||0,c.z||0),x=new ed.Vector3(l.x,l.y||0,l.z||0),_=b.distanceTo(x);p.position.x=b.x,p.position.y=b.y,p.position.z=b.z,p.scale.z=_,p.parent.localToWorld(x),p.lookAt(x)}}}}}))}(),e=cu(t.linkDirectionalArrowRelPos),n=cu(t.linkDirectionalArrowLength),i=cu(t.nodeVal),t.graphData.links.forEach((function(r){var a=r.__arrowObj;if(a){var s=o?r:t.layout.getLinkPosition(t.layout.graph.getLink(r.source,r.target).id),c=s[o?"source":"from"],l=s[o?"target":"to"];if(c&&l&&c.hasOwnProperty("x")&&l.hasOwnProperty("x")){var h=Math.sqrt(Math.max(0,i(c)||1))*t.nodeRelSize,u=Math.sqrt(Math.max(0,i(l)||1))*t.nodeRelSize,d=n(r),p=e(r),f=r.__curve?function(t){return r.__curve.getPoint(t)}:function(t){var e=function(t,e,n,i){return e[t]+(n[t]-e[t])*i||0};return{x:e("x",c,l,t),y:e("y",c,l,t),z:e("z",c,l,t)}},m=r.__curve?r.__curve.getLength():Math.sqrt(["x","y","z"].map((function(t){return Math.pow((l[t]||0)-(c[t]||0),2)})).reduce((function(t,e){return t+e}),0)),g=h+d+(m-h-u-d)*p,v=f(g/m),y=f((g-d)/m);["x","y","z"].forEach((function(t){return a.position[t]=y[t]}));var b=zu(ed.Vector3,Gu(["x","y","z"].map((function(t){return v[t]}))));a.parent.localToWorld(b),a.lookAt(b)}}})),r=cu(t.linkDirectionalParticleSpeed),t.graphData.links.forEach((function(e){var n=e.__photonsObj&&e.__photonsObj.children,i=e.__singleHopPhotonsObj&&e.__singleHopPhotonsObj.children;if(i&&i.length||n&&n.length){var a=o?e:t.layout.getLinkPosition(t.layout.graph.getLink(e.source,e.target).id),s=a[o?"source":"from"],c=a[o?"target":"to"];if(s&&c&&s.hasOwnProperty("x")&&c.hasOwnProperty("x")){var l=r(e),h=e.__curve?function(t){return e.__curve.getPoint(t)}:function(t){var e=function(t,e,n,i){return e[t]+(n[t]-e[t])*i||0};return{x:e("x",s,c,t),y:e("y",s,c,t),z:e("z",s,c,t)}};[].concat(Gu(n||[]),Gu(i||[])).forEach((function(t,e){var i="singleHopPhotons"===t.parent.__linkThreeObjType;if(t.hasOwnProperty("__progressRatio")||(t.__progressRatio=i?0:e/n.length),t.__progressRatio+=l,t.__progressRatio>=1){if(i)return t.parent.remove(t),void Yu(t);t.__progressRatio=t.__progressRatio%1}var r=t.__progressRatio,o=h(r);["x","y","z"].forEach((function(e){return t.position[e]=o[e]}))}))}}})),this},emitParticle:function(t,e){if(e){if(!e.__singleHopPhotonsObj){var n=new ed.Group;n.__linkThreeObjType="singleHopPhotons",e.__singleHopPhotonsObj=n,t.graphScene.add(n)}var i=cu(t.linkDirectionalParticleWidth),r=Math.ceil(10*i(e))/10/2,o=t.linkDirectionalParticleResolution,a=new ed.SphereBufferGeometry(r,o,o),s=cu(t.linkColor),c=cu(t.linkDirectionalParticleColor)(e)||s(e)||"#f0f0f0",l=new ed.Color($u(c)),h=3*t.linkOpacity,u=new ed.MeshLambertMaterial({color:l,transparent:!0,opacity:h});e.__singleHopPhotonsObj.add(new ed.Mesh(a,u))}return this},getGraphBbox:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){return!0};if(!t.initialised)return null;var n=function t(n){var i=[];if(n.geometry){n.geometry.computeBoundingBox();var r=new ed.Box3;r.copy(n.geometry.boundingBox).applyMatrix4(n.matrixWorld),i.push(r)}return i.concat.apply(i,Gu((n.children||[]).filter((function(t){return!t.hasOwnProperty("__graphObjType")||"node"===t.__graphObjType&&e(t.__data)})).map(t)))}(t.graphScene);return n.length?Object.assign.apply(Object,Gu(["x","y","z"].map((function(t){return Ou({},t,[hu(n,(function(e){return e.min[t]})),lu(n,(function(e){return e.max[t]}))])})))):null}},stateInit:function(){return{d3ForceLayout:Ql().force("link",wl()).force("charge",Kl()).force("center",Xc()).force("dagRadial",null).stop(),engineRunning:!1}},init:function(t,e){e.graphScene=t},update:function(t,e){var n=function(t){return t.some((function(t){return e.hasOwnProperty(t)}))};if(t.engineRunning=!1,t.onUpdate(),null!==t.nodeAutoColorBy&&n(["nodeAutoColorBy","graphData","nodeColor"])&&td(t.graphData.nodes,cu(t.nodeAutoColorBy),t.nodeColor),null!==t.linkAutoColorBy&&n(["linkAutoColorBy","graphData","linkColor"])&&td(t.graphData.links,cu(t.linkAutoColorBy),t.linkColor),t._flushObjects||n(["graphData","nodeThreeObject","nodeThreeObjectExtend","nodeVal","nodeColor","nodeVisibility","nodeRelSize","nodeResolution","nodeOpacity"])){var i=cu(t.nodeThreeObject),r=cu(t.nodeThreeObjectExtend),o=cu(t.nodeVal),a=cu(t.nodeColor),s=cu(t.nodeVisibility),c={},l={};Ju(t.graphData.nodes.filter(s),t.graphScene,{purge:t._flushObjects||n(["nodeThreeObject","nodeThreeObjectExtend"]),objFilter:function(t){return"node"===t.__graphObjType},createObj:function(e){var n,o=i(e),a=r(e);return o&&t.nodeThreeObject===o&&(o=o.clone()),o&&!a?n=o:((n=new ed.Mesh).__graphDefaultObj=!0,o&&a&&n.add(o)),n.__graphObjType="node",n},updateObj:function(e,n){if(e.__graphDefaultObj){var i=o(n)||1,r=Math.cbrt(i)*t.nodeRelSize,s=t.nodeResolution;e.geometry.type.match(/^Sphere(Buffer)?Geometry$/)&&e.geometry.parameters.radius===r&&e.geometry.parameters.widthSegments===s||(c.hasOwnProperty(i)||(c[i]=new ed.SphereBufferGeometry(r,s,s)),e.geometry.dispose(),e.geometry=c[i]);var h=a(n),u=new ed.Color($u(h||"#ffffaa")),d=t.nodeOpacity*Qu(h);"MeshLambertMaterial"===e.material.type&&e.material.color.equals(u)&&e.material.opacity===d||(l.hasOwnProperty(h)||(l[h]=new ed.MeshLambertMaterial({color:u,transparent:!0,opacity:d})),e.material.dispose(),e.material=l[h])}}})}if(t._flushObjects||n(["graphData","linkThreeObject","linkThreeObjectExtend","linkMaterial","linkColor","linkWidth","linkVisibility","linkResolution","linkOpacity","linkDirectionalArrowLength","linkDirectionalArrowColor","linkDirectionalArrowResolution","linkDirectionalParticles","linkDirectionalParticleWidth","linkDirectionalParticleColor","linkDirectionalParticleResolution"])){var h=cu(t.linkThreeObject),u=cu(t.linkThreeObjectExtend),d=cu(t.linkMaterial),p=cu(t.linkVisibility),f=cu(t.linkColor),m=cu(t.linkWidth),g={},v={},y={},b=t.graphData.links.filter(p);if(Ju(b,t.graphScene,{objBindAttr:"__lineObj",purge:t._flushObjects||n(["linkThreeObject","linkThreeObjectExtend","linkWidth"]),objFilter:function(t){return"link"===t.__graphObjType},createObj:function(e){var n,i,r=h(e),o=u(e);if(r&&t.linkThreeObject===r&&(r=r.clone()),!r||o)if(!!m(e))n=new ed.Mesh;else{var a=new ed.BufferGeometry;a[id]("position",new ed.BufferAttribute(new Float32Array(6),3)),n=new ed.Line(a)}return r?o?((i=new ed.Group).__graphDefaultObj=!0,i.add(n),i.add(r)):i=r:(i=n).__graphDefaultObj=!0,i.renderOrder=10,i.__graphObjType="link",i},updateObj:function(e,n){if(e.__graphDefaultObj){var i=e.children.length?e.children[0]:e,r=Math.ceil(10*m(n))/10,o=!!r;if(o){var a=r/2,s=t.linkResolution;if(!i.geometry.type.match(/^Cylinder(Buffer)?Geometry$/)||i.geometry.parameters.radiusTop!==a||i.geometry.parameters.radialSegments!==s){if(!g.hasOwnProperty(r)){var c=new ed.CylinderBufferGeometry(a,a,1,s,1,!1);c[rd]((new ed.Matrix4).makeTranslation(0,.5,0)),c[rd]((new ed.Matrix4).makeRotationX(Math.PI/2)),g[r]=c}i.geometry.dispose(),i.geometry=g[r]}}var l=d(n);if(l)i.material=l;else{var h=f(n),u=new ed.Color($u(h||"#f0f0f0")),p=t.linkOpacity*Qu(h),b=o?"MeshLambertMaterial":"LineBasicMaterial";if(i.material.type!==b||!i.material.color.equals(u)||i.material.opacity!==p){var x=o?v:y;x.hasOwnProperty(h)||(x[h]=new ed[b]({color:u,transparent:p<1,opacity:p,depthWrite:p>=1})),i.material.dispose(),i.material=x[h]}}}}}),t.linkDirectionalArrowLength||e.hasOwnProperty("linkDirectionalArrowLength")){var x=cu(t.linkDirectionalArrowLength),_=cu(t.linkDirectionalArrowColor);Ju(b.filter(x),t.graphScene,{objBindAttr:"__arrowObj",objFilter:function(t){return"arrow"===t.__linkThreeObjType},createObj:function(){var t=new ed.Mesh(void 0,new ed.MeshLambertMaterial({transparent:!0}));return t.__linkThreeObjType="arrow",t},updateObj:function(e,n){var i=x(n),r=t.linkDirectionalArrowResolution;if(!e.geometry.type.match(/^Cone(Buffer)?Geometry$/)||e.geometry.parameters.height!==i||e.geometry.parameters.radialSegments!==r){var o=new ed.ConeBufferGeometry(.25*i,i,r);o.translate(0,i/2,0),o.rotateX(Math.PI/2),e.geometry.dispose(),e.geometry=o}e.material.color=new ed.Color(_(n)||f(n)||"#f0f0f0"),e.material.opacity=3*t.linkOpacity}})}if(t.linkDirectionalParticles||e.hasOwnProperty("linkDirectionalParticles")){var w=cu(t.linkDirectionalParticles),M=cu(t.linkDirectionalParticleWidth),S=cu(t.linkDirectionalParticleColor),E={},T={};Ju(b.filter(w),t.graphScene,{objBindAttr:"__photonsObj",objFilter:function(t){return"photons"===t.__linkThreeObjType},createObj:function(){var t=new ed.Group;return t.__linkThreeObjType="photons",t},updateObj:function(e,n){var i,r=Math.round(Math.abs(w(n))),o=!!e.children.length&&e.children[0],a=Math.ceil(10*M(n))/10/2,s=t.linkDirectionalParticleResolution;o&&o.geometry.parameters.radius===a&&o.geometry.parameters.widthSegments===s?i=o.geometry:(T.hasOwnProperty(a)||(T[a]=new ed.SphereBufferGeometry(a,s,s)),i=T[a],o&&o.geometry.dispose());var c,l=S(n)||f(n)||"#f0f0f0",h=new ed.Color($u(l)),u=3*t.linkOpacity;o&&o.material.color.equals(h)&&o.material.opacity===u?c=o.material:(E.hasOwnProperty(l)||(E[l]=new ed.MeshLambertMaterial({color:h,transparent:!0,opacity:u})),c=E[l],o&&o.material.dispose()),Ju(Gu(new Array(r)).map((function(t,e){return{idx:e}})),e,{idAccessor:function(t){return t.idx},createObj:function(){return new ed.Mesh(i,c)},updateObj:function(t){t.geometry=i,t.material=c}})}})}}if(t._flushObjects=!1,n(["graphData","nodeId","linkSource","linkTarget","numDimensions","forceEngine","dagMode","dagNodeFilter","dagLevelDistance"])){t.engineRunning=!1,t.graphData.links.forEach((function(e){e.source=e[t.linkSource],e.target=e[t.linkTarget]}));var A,L="ngraph"!==t.forceEngine;if(L){(A=t.d3ForceLayout).stop().alpha(1).numDimensions(t.numDimensions).nodes(t.graphData.nodes);var P=t.d3ForceLayout.force("link");P&&P.id((function(e){return e[t.nodeId]})).links(t.graphData.links);var C=t.dagMode&&function(t,e){var n=t.nodes,i=t.links,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=r.nodeFilter,a=void 0===o?function(){return!0}:o,s=r.onLoopError,c=void 0===s?function(t){throw"Invalid DAG structure! Found cycle in node path: ".concat(t.join(" -> "),".")}:s,l={};n.forEach((function(t){return l[e(t)]={data:t,out:[],depth:-1,skip:!a(t)}})),i.forEach((function(t){var n=t.source,i=t.target,r=c(n),o=c(i);if(!l.hasOwnProperty(r))throw"Missing source node with id: ".concat(r);if(!l.hasOwnProperty(o))throw"Missing target node with id: ".concat(o);var a=l[r],s=l[o];function c(t){return"object"===Cu(t)?e(t):t}a.out.push(s)}));var h=[];return u(Object.values(l)),Object.assign.apply(Object,[{}].concat(Gu(Object.entries(l).filter((function(t){return!Hu(t,2)[1].skip})).map((function(t){var e=Hu(t,2);return Ou({},e[0],e[1].depth)})))));function u(t){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=0,o=t.length;ra.depth&&(a.depth=i,u(a.out,[].concat(Gu(n),[a]),i+(a.skip?0:1)))}}}(t.graphData,(function(e){return e[t.nodeId]}),{nodeFilter:t.dagNodeFilter,onLoopError:t.onDagError||void 0}),R=Math.max.apply(Math,Gu(Object.values(C||[]))),O=t.dagLevelDistance||t.graphData.nodes.length/(R||1)*2*(-1!==["radialin","radialout"].indexOf(t.dagMode)?.7:1);if(t.dagMode){var N=function(e,n){return function(i){return e?(C[i[t.nodeId]]-R/2)*O*(n?-1:1):void 0}},I=N(-1!==["lr","rl"].indexOf(t.dagMode),"rl"===t.dagMode),D=N(-1!==["td","bu"].indexOf(t.dagMode),"td"===t.dagMode),k=N(-1!==["zin","zout"].indexOf(t.dagMode),"zout"===t.dagMode);t.graphData.nodes.filter(t.dagNodeFilter).forEach((function(t){t.fx=I(t),t.fy=D(t),t.fz=k(t)}))}t.d3ForceLayout.force("dagRadial",-1!==["radialin","radialout"].indexOf(t.dagMode)?function(t,e,n,i){var r,o,a,s,c=yl(.1);function l(t){for(var c=0,l=r.length;c1&&(h.vy+=d*m),o>2&&(h.vz+=p*m)}}function h(){if(r){var e,n=r.length;for(a=new Array(n),s=new Array(n),e=0;e0&&t.d3ForceLayout.alpha()0&&(n.object.isPerspectiveCamera?m.multiplyScalar(t):n.object.isOrthographicCamera?(n.object.zoom/=t,n.object.updateProjectionMatrix()):console.warn("THREE.TrackballControls: Unsupported camera type")),n.staticMoving?x.copy(_):x.y+=(_.y-x.y)*this.dynamicDampingFactor)},this.panCamera=(z=new G,B=new tt,F=new tt,function(){if(z.copy(E).sub(S),z.lengthSq()){if(n.object.isOrthographicCamera){var t=(n.object.right-n.object.left)/n.object.zoom/n.domElement.clientWidth,e=(n.object.top-n.object.bottom)/n.object.zoom/n.domElement.clientWidth;z.x*=t,z.y*=e}z.multiplyScalar(m.length()*n.panSpeed),F.copy(m).cross(n.object.up).setLength(z.x),F.add(B.copy(n.object.up).setLength(z.y)),n.object.position.add(F),n.target.add(F),n.staticMoving?S.copy(E):S.add(z.subVectors(E,S).multiplyScalar(n.dynamicDampingFactor))}}),this.checkDistances=function(){n.noZoom&&n.noPan||(m.lengthSq()>n.maxDistance*n.maxDistance&&(n.object.position.addVectors(n.target,m.setLength(n.maxDistance)),x.copy(_)),m.lengthSq()h&&(n.dispatchEvent(T),u.copy(n.object.position))):n.object.isOrthographicCamera?(n.object.lookAt(n.target),(u.distanceToSquared(n.object.position)>h||d!==n.object.zoom)&&(n.dispatchEvent(T),u.copy(n.object.position),d=n.object.zoom)):console.warn("THREE.TrackballControls: Unsupported camera type")},this.reset=function(){p=i,f=i,n.target.copy(n.target0),n.object.position.copy(n.position0),n.object.up.copy(n.up0),n.object.zoom=n.zoom0,n.object.updateProjectionMatrix(),m.subVectors(n.object.position,n.target),n.object.lookAt(n.target),n.dispatchEvent(T),u.copy(n.object.position),d=n.object.zoom},this.dispose=function(){n.domElement.removeEventListener("contextmenu",Q,!1),n.domElement.removeEventListener("pointerdown",H,!1),n.domElement.removeEventListener("wheel",Y,!1),n.domElement.removeEventListener("touchstart",Z,!1),n.domElement.removeEventListener("touchend",$,!1),n.domElement.removeEventListener("touchmove",J,!1),n.domElement.ownerDocument.removeEventListener("pointermove",V,!1),n.domElement.ownerDocument.removeEventListener("pointerup",W,!1),window.removeEventListener("keydown",q,!1),window.removeEventListener("keyup",X,!1)},this.domElement.addEventListener("contextmenu",Q,!1),this.domElement.addEventListener("pointerdown",H,!1),this.domElement.addEventListener("wheel",Y,!1),this.domElement.addEventListener("touchstart",Z,!1),this.domElement.addEventListener("touchend",$,!1),this.domElement.addEventListener("touchmove",J,!1),this.domElement.ownerDocument.addEventListener("pointermove",V,!1),this.domElement.ownerDocument.addEventListener("pointerup",W,!1),window.addEventListener("keydown",q,!1),window.addEventListener("keyup",X,!1),this.handleResize(),this.update()};ad.prototype=Object.create(F.prototype),ad.prototype.constructor=ad;var sd=function(t,e){var n,i,r,h,u,d;void 0===e&&console.warn('THREE.OrbitControls: The second parameter "domElement" is now mandatory.'),e===document&&console.error('THREE.OrbitControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.'),this.object=t,this.domElement=e,this.enabled=!0,this.target=new tt,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.enableKeys=!0,this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40},this.mouseButtons={LEFT:o.ROTATE,MIDDLE:o.DOLLY,RIGHT:o.PAN},this.touches={ONE:a,TWO:c},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.getPolarAngle=function(){return x.phi},this.getAzimuthalAngle=function(){return x.theta},this.saveState=function(){p.target0.copy(p.target),p.position0.copy(p.object.position),p.zoom0=p.object.zoom},this.reset=function(){p.target.copy(p.target0),p.object.position.copy(p.position0),p.object.zoom=p.zoom0,p.object.updateProjectionMatrix(),p.dispatchEvent(f),p.update(),y=v.NONE},this.update=(n=new tt,i=(new K).setFromUnitVectors(t.up,new tt(0,1,0)),r=i.clone().invert(),h=new tt,u=new K,d=2*Math.PI,function(){var t=p.object.position;n.copy(t).sub(p.target),n.applyQuaternion(i),x.setFromVector3(n),p.autoRotate&&y===v.NONE&&D(2*Math.PI/60/60*p.autoRotateSpeed),p.enableDamping?(x.theta+=_.theta*p.dampingFactor,x.phi+=_.phi*p.dampingFactor):(x.theta+=_.theta,x.phi+=_.phi);var e=p.minAzimuthAngle,o=p.maxAzimuthAngle;return isFinite(e)&&isFinite(o)&&(e<-Math.PI?e+=d:e>Math.PI&&(e-=d),o<-Math.PI?o+=d:o>Math.PI&&(o-=d),x.theta=e<=o?Math.max(e,Math.min(o,x.theta)):x.theta>(e+o)/2?Math.max(e,x.theta):Math.min(o,x.theta)),x.phi=Math.max(p.minPolarAngle,Math.min(p.maxPolarAngle,x.phi)),x.makeSafe(),x.radius*=w,x.radius=Math.max(p.minDistance,Math.min(p.maxDistance,x.radius)),!0===p.enableDamping?p.target.addScaledVector(M,p.dampingFactor):p.target.add(M),n.setFromSpherical(x),n.applyQuaternion(r),t.copy(p.target).add(n),p.object.lookAt(p.target),!0===p.enableDamping?(_.theta*=1-p.dampingFactor,_.phi*=1-p.dampingFactor,M.multiplyScalar(1-p.dampingFactor)):(_.set(0,0,0),M.set(0,0,0)),w=1,!!(S||h.distanceToSquared(p.object.position)>b||8*(1-u.dot(p.object.quaternion))>b)&&(p.dispatchEvent(f),h.copy(p.object.position),u.copy(p.object.quaternion),S=!1,!0)}),this.dispose=function(){p.domElement.removeEventListener("contextmenu",ct,!1),p.domElement.removeEventListener("pointerdown",Q,!1),p.domElement.removeEventListener("wheel",it,!1),p.domElement.removeEventListener("touchstart",ot,!1),p.domElement.removeEventListener("touchend",st,!1),p.domElement.removeEventListener("touchmove",at,!1),p.domElement.ownerDocument.removeEventListener("pointermove",et,!1),p.domElement.ownerDocument.removeEventListener("pointerup",nt,!1),p.domElement.removeEventListener("keydown",rt,!1)};var p=this,f={type:"change"},m={type:"start"},g={type:"end"},v={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},y=v.NONE,b=1e-6,x=new zc,_=new zc,w=1,M=new tt,S=!1,E=new G,T=new G,A=new G,L=new G,P=new G,C=new G,R=new G,O=new G,N=new G;function I(){return Math.pow(.95,p.zoomSpeed)}function D(t){_.theta-=t}function k(t){_.phi-=t}var z,B=(z=new tt,function(t,e){z.setFromMatrixColumn(e,0),z.multiplyScalar(-t),M.add(z)}),F=function(){var t=new tt;return function(e,n){!0===p.screenSpacePanning?t.setFromMatrixColumn(n,1):(t.setFromMatrixColumn(n,0),t.crossVectors(p.object.up,t)),t.multiplyScalar(e),M.add(t)}}(),j=function(){var t=new tt;return function(e,n){var i=p.domElement;if(p.object.isPerspectiveCamera){var r=p.object.position;t.copy(r).sub(p.target);var o=t.length();o*=Math.tan(p.object.fov/2*Math.PI/180),B(2*e*o/i.clientHeight,p.object.matrix),F(2*n*o/i.clientHeight,p.object.matrix)}else p.object.isOrthographicCamera?(B(e*(p.object.right-p.object.left)/p.object.zoom/i.clientWidth,p.object.matrix),F(n*(p.object.top-p.object.bottom)/p.object.zoom/i.clientHeight,p.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),p.enablePan=!1)}}();function U(t){p.object.isPerspectiveCamera?w/=t:p.object.isOrthographicCamera?(p.object.zoom=Math.max(p.minZoom,Math.min(p.maxZoom,p.object.zoom*t)),p.object.updateProjectionMatrix(),S=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),p.enableZoom=!1)}function H(t){p.object.isPerspectiveCamera?w*=t:p.object.isOrthographicCamera?(p.object.zoom=Math.max(p.minZoom,Math.min(p.maxZoom,p.object.zoom/t)),p.object.updateProjectionMatrix(),S=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),p.enableZoom=!1)}function V(t){E.set(t.clientX,t.clientY)}function W(t){L.set(t.clientX,t.clientY)}function q(t){if(1==t.touches.length)E.set(t.touches[0].pageX,t.touches[0].pageY);else{var e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);E.set(e,n)}}function X(t){if(1==t.touches.length)L.set(t.touches[0].pageX,t.touches[0].pageY);else{var e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);L.set(e,n)}}function Y(t){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);R.set(0,i)}function Z(t){if(1==t.touches.length)T.set(t.touches[0].pageX,t.touches[0].pageY);else{var e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);T.set(e,n)}A.subVectors(T,E).multiplyScalar(p.rotateSpeed);var i=p.domElement;D(2*Math.PI*A.x/i.clientHeight),k(2*Math.PI*A.y/i.clientHeight),E.copy(T)}function J(t){if(1==t.touches.length)P.set(t.touches[0].pageX,t.touches[0].pageY);else{var e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);P.set(e,n)}C.subVectors(P,L).multiplyScalar(p.panSpeed),j(C.x,C.y),L.copy(P)}function $(t){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);O.set(0,i),N.set(0,Math.pow(O.y/R.y,p.zoomSpeed)),U(N.y),R.copy(O)}function Q(t){if(!1!==p.enabled)switch(t.pointerType){case"mouse":case"pen":!function(t){var e;switch(t.preventDefault(),p.domElement.focus?p.domElement.focus():window.focus(),t.button){case 0:e=p.mouseButtons.LEFT;break;case 1:e=p.mouseButtons.MIDDLE;break;case 2:e=p.mouseButtons.RIGHT;break;default:e=-1}switch(e){case o.DOLLY:if(!1===p.enableZoom)return;!function(t){R.set(t.clientX,t.clientY)}(t),y=v.DOLLY;break;case o.ROTATE:if(t.ctrlKey||t.metaKey||t.shiftKey){if(!1===p.enablePan)return;W(t),y=v.PAN}else{if(!1===p.enableRotate)return;V(t),y=v.ROTATE}break;case o.PAN:if(t.ctrlKey||t.metaKey||t.shiftKey){if(!1===p.enableRotate)return;V(t),y=v.ROTATE}else{if(!1===p.enablePan)return;W(t),y=v.PAN}break;default:y=v.NONE}y!==v.NONE&&(p.domElement.ownerDocument.addEventListener("pointermove",et,!1),p.domElement.ownerDocument.addEventListener("pointerup",nt,!1),p.dispatchEvent(m))}(t)}}function et(t){if(!1!==p.enabled)switch(t.pointerType){case"mouse":case"pen":!function(t){if(!1===p.enabled)return;switch(t.preventDefault(),y){case v.ROTATE:if(!1===p.enableRotate)return;!function(t){T.set(t.clientX,t.clientY),A.subVectors(T,E).multiplyScalar(p.rotateSpeed);var e=p.domElement;D(2*Math.PI*A.x/e.clientHeight),k(2*Math.PI*A.y/e.clientHeight),E.copy(T),p.update()}(t);break;case v.DOLLY:if(!1===p.enableZoom)return;!function(t){O.set(t.clientX,t.clientY),N.subVectors(O,R),N.y>0?U(I()):N.y<0&&H(I()),R.copy(O),p.update()}(t);break;case v.PAN:if(!1===p.enablePan)return;!function(t){P.set(t.clientX,t.clientY),C.subVectors(P,L).multiplyScalar(p.panSpeed),j(C.x,C.y),L.copy(P),p.update()}(t)}}(t)}}function nt(t){switch(t.pointerType){case"mouse":case"pen":!function(t){if(p.domElement.ownerDocument.removeEventListener("pointermove",et,!1),p.domElement.ownerDocument.removeEventListener("pointerup",nt,!1),!1===p.enabled)return;p.dispatchEvent(g),y=v.NONE}()}}function it(t){!1===p.enabled||!1===p.enableZoom||y!==v.NONE&&y!==v.ROTATE||(t.preventDefault(),t.stopPropagation(),p.dispatchEvent(m),function(t){t.deltaY<0?H(I()):t.deltaY>0&&U(I()),p.update()}(t),p.dispatchEvent(g))}function rt(t){!1!==p.enabled&&!1!==p.enableKeys&&!1!==p.enablePan&&function(t){var e=!1;switch(t.keyCode){case p.keys.UP:j(0,p.keyPanSpeed),e=!0;break;case p.keys.BOTTOM:j(0,-p.keyPanSpeed),e=!0;break;case p.keys.LEFT:j(p.keyPanSpeed,0),e=!0;break;case p.keys.RIGHT:j(-p.keyPanSpeed,0),e=!0}e&&(t.preventDefault(),p.update())}(t)}function ot(t){if(!1!==p.enabled){switch(t.preventDefault(),t.touches.length){case 1:switch(p.touches.ONE){case a:if(!1===p.enableRotate)return;q(t),y=v.TOUCH_ROTATE;break;case s:if(!1===p.enablePan)return;X(t),y=v.TOUCH_PAN;break;default:y=v.NONE}break;case 2:switch(p.touches.TWO){case c:if(!1===p.enableZoom&&!1===p.enablePan)return;!function(t){p.enableZoom&&Y(t),p.enablePan&&X(t)}(t),y=v.TOUCH_DOLLY_PAN;break;case l:if(!1===p.enableZoom&&!1===p.enableRotate)return;!function(t){p.enableZoom&&Y(t),p.enableRotate&&q(t)}(t),y=v.TOUCH_DOLLY_ROTATE;break;default:y=v.NONE}break;default:y=v.NONE}y!==v.NONE&&p.dispatchEvent(m)}}function at(t){if(!1!==p.enabled)switch(t.preventDefault(),t.stopPropagation(),y){case v.TOUCH_ROTATE:if(!1===p.enableRotate)return;Z(t),p.update();break;case v.TOUCH_PAN:if(!1===p.enablePan)return;J(t),p.update();break;case v.TOUCH_DOLLY_PAN:if(!1===p.enableZoom&&!1===p.enablePan)return;!function(t){p.enableZoom&&$(t),p.enablePan&&J(t)}(t),p.update();break;case v.TOUCH_DOLLY_ROTATE:if(!1===p.enableZoom&&!1===p.enableRotate)return;!function(t){p.enableZoom&&$(t),p.enableRotate&&Z(t)}(t),p.update();break;default:y=v.NONE}}function st(t){!1!==p.enabled&&(p.dispatchEvent(g),y=v.NONE)}function ct(t){!1!==p.enabled&&t.preventDefault()}p.domElement.addEventListener("contextmenu",ct,!1),p.domElement.addEventListener("pointerdown",Q,!1),p.domElement.addEventListener("wheel",it,!1),p.domElement.addEventListener("touchstart",ot,!1),p.domElement.addEventListener("touchend",st,!1),p.domElement.addEventListener("touchmove",at,!1),p.domElement.addEventListener("keydown",rt,!1),this.update()};sd.prototype=Object.create(F.prototype),sd.prototype.constructor=sd;var cd=function(t,e){sd.call(this,t,e),this.screenSpacePanning=!1,this.mouseButtons.LEFT=o.PAN,this.mouseButtons.RIGHT=o.ROTATE,this.touches.ONE=s,this.touches.TWO=l};(cd.prototype=Object.create(F.prototype)).constructor=cd;var ld=function(t,e){void 0===e&&(console.warn('THREE.FlyControls: The second parameter "domElement" is now mandatory.'),e=document),this.object=t,this.domElement=e,e&&this.domElement.setAttribute("tabindex",-1),this.movementSpeed=1,this.rollSpeed=.005,this.dragToLook=!1,this.autoForward=!1;var n,i,r=this,o={type:"change"},a=1e-6;function s(t,e){return function(){e.apply(t,arguments)}}function c(t){t.preventDefault()}this.tmpQuaternion=new K,this.mouseStatus=0,this.moveState={up:0,down:0,left:0,right:0,forward:0,back:0,pitchUp:0,pitchDown:0,yawLeft:0,yawRight:0,rollLeft:0,rollRight:0},this.moveVector=new tt(0,0,0),this.rotationVector=new tt(0,0,0),this.keydown=function(t){if(!t.altKey){switch(t.keyCode){case 16:this.movementSpeedMultiplier=.1;break;case 87:this.moveState.forward=1;break;case 83:this.moveState.back=1;break;case 65:this.moveState.left=1;break;case 68:this.moveState.right=1;break;case 82:this.moveState.up=1;break;case 70:this.moveState.down=1;break;case 38:this.moveState.pitchUp=1;break;case 40:this.moveState.pitchDown=1;break;case 37:this.moveState.yawLeft=1;break;case 39:this.moveState.yawRight=1;break;case 81:this.moveState.rollLeft=1;break;case 69:this.moveState.rollRight=1}this.updateMovementVector(),this.updateRotationVector()}},this.keyup=function(t){switch(t.keyCode){case 16:this.movementSpeedMultiplier=1;break;case 87:this.moveState.forward=0;break;case 83:this.moveState.back=0;break;case 65:this.moveState.left=0;break;case 68:this.moveState.right=0;break;case 82:this.moveState.up=0;break;case 70:this.moveState.down=0;break;case 38:this.moveState.pitchUp=0;break;case 40:this.moveState.pitchDown=0;break;case 37:this.moveState.yawLeft=0;break;case 39:this.moveState.yawRight=0;break;case 81:this.moveState.rollLeft=0;break;case 69:this.moveState.rollRight=0}this.updateMovementVector(),this.updateRotationVector()},this.mousedown=function(t){if(this.domElement!==document&&this.domElement.focus(),t.preventDefault(),t.stopPropagation(),this.dragToLook)this.mouseStatus++;else{switch(t.button){case 0:this.moveState.forward=1;break;case 2:this.moveState.back=1}this.updateMovementVector()}},this.mousemove=function(t){if(!this.dragToLook||this.mouseStatus>0){var e=this.getContainerDimensions(),n=e.size[0]/2,i=e.size[1]/2;this.moveState.yawLeft=-(t.pageX-e.offset[0]-n)/n,this.moveState.pitchDown=(t.pageY-e.offset[1]-i)/i,this.updateRotationVector()}},this.mouseup=function(t){if(t.preventDefault(),t.stopPropagation(),this.dragToLook)this.mouseStatus--,this.moveState.yawLeft=this.moveState.pitchDown=0;else{switch(t.button){case 0:this.moveState.forward=0;break;case 2:this.moveState.back=0}this.updateMovementVector()}this.updateRotationVector()},this.update=(n=new K,i=new tt,function(t){var e=t*r.movementSpeed,s=t*r.rollSpeed;r.object.translateX(r.moveVector.x*e),r.object.translateY(r.moveVector.y*e),r.object.translateZ(r.moveVector.z*e),r.tmpQuaternion.set(r.rotationVector.x*s,r.rotationVector.y*s,r.rotationVector.z*s,1).normalize(),r.object.quaternion.multiply(r.tmpQuaternion),(i.distanceToSquared(r.object.position)>a||8*(1-n.dot(r.object.quaternion))>a)&&(r.dispatchEvent(o),n.copy(r.object.quaternion),i.copy(r.object.position))}),this.updateMovementVector=function(){var t=this.moveState.forward||this.autoForward&&!this.moveState.back?1:0;this.moveVector.x=-this.moveState.left+this.moveState.right,this.moveVector.y=-this.moveState.down+this.moveState.up,this.moveVector.z=-t+this.moveState.back},this.updateRotationVector=function(){this.rotationVector.x=-this.moveState.pitchDown+this.moveState.pitchUp,this.rotationVector.y=-this.moveState.yawRight+this.moveState.yawLeft,this.rotationVector.z=-this.moveState.rollRight+this.moveState.rollLeft},this.getContainerDimensions=function(){return this.domElement!=document?{size:[this.domElement.offsetWidth,this.domElement.offsetHeight],offset:[this.domElement.offsetLeft,this.domElement.offsetTop]}:{size:[window.innerWidth,window.innerHeight],offset:[0,0]}},this.dispose=function(){this.domElement.removeEventListener("contextmenu",c,!1),this.domElement.removeEventListener("mousedown",h,!1),this.domElement.removeEventListener("mousemove",l,!1),this.domElement.removeEventListener("mouseup",u,!1),window.removeEventListener("keydown",d,!1),window.removeEventListener("keyup",p,!1)};var l=s(this,this.mousemove),h=s(this,this.mousedown),u=s(this,this.mouseup),d=s(this,this.keydown),p=s(this,this.keyup);this.domElement.addEventListener("contextmenu",c,!1),this.domElement.addEventListener("mousemove",l,!1),this.domElement.addEventListener("mousedown",h,!1),this.domElement.addEventListener("mouseup",u,!1),window.addEventListener("keydown",d,!1),window.addEventListener("keyup",p,!1),this.updateMovementVector(),this.updateRotationVector()};ld.prototype=Object.create(F.prototype),ld.prototype.constructor=ld;var hd,ud,dd,pd={uniforms:{tDiffuse:{value:null},opacity:{value:1}},vertexShader:["varying vec2 vUv;","void main() {","\tvUv = uv;","\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:["uniform float opacity;","uniform sampler2D tDiffuse;","varying vec2 vUv;","void main() {","\tvec4 texel = texture2D( tDiffuse, vUv );","\tgl_FragColor = opacity * texel;","}"].join("\n")};function fd(){this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1}Object.assign(fd.prototype,{setSize:function(){},render:function(){console.error("THREE.Pass: .render() must be implemented in derived pass.")}}),fd.FullScreenQuad=(hd=new Vs(-1,1,1,-1,0,1),ud=new Dn(2,2),dd=function(t){this._mesh=new mn(ud,t)},Object.defineProperty(dd.prototype,"material",{get:function(){return this._mesh.material},set:function(t){this._mesh.material=t}}),Object.assign(dd.prototype,{dispose:function(){this._mesh.geometry.dispose()},render:function(t){t.render(this._mesh,hd)}}),dd);var md=function(t,e){fd.call(this),this.textureID=void 0!==e?e:"tDiffuse",t instanceof wn?(this.uniforms=t.uniforms,this.material=t):t&&(this.uniforms=_n.clone(t.uniforms),this.material=new wn({defines:Object.assign({},t.defines),uniforms:this.uniforms,vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})),this.fsQuad=new fd.FullScreenQuad(this.material)};md.prototype=Object.assign(Object.create(fd.prototype),{constructor:md,render:function(t,e,n){this.uniforms[this.textureID]&&(this.uniforms[this.textureID].value=n.texture),this.fsQuad.material=this.material,this.renderToScreen?(t.setRenderTarget(null),this.fsQuad.render(t)):(t.setRenderTarget(e),this.clear&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),this.fsQuad.render(t))}});var gd=function(t,e){fd.call(this),this.scene=t,this.camera=e,this.clear=!0,this.needsSwap=!1,this.inverse=!1};gd.prototype=Object.assign(Object.create(fd.prototype),{constructor:gd,render:function(t,e,n){var i,r,o=t.getContext(),a=t.state;a.buffers.color.setMask(!1),a.buffers.depth.setMask(!1),a.buffers.color.setLocked(!0),a.buffers.depth.setLocked(!0),this.inverse?(i=0,r=1):(i=1,r=0),a.buffers.stencil.setTest(!0),a.buffers.stencil.setOp(o.REPLACE,o.REPLACE,o.REPLACE),a.buffers.stencil.setFunc(o.ALWAYS,i,4294967295),a.buffers.stencil.setClear(r),a.buffers.stencil.setLocked(!0),t.setRenderTarget(n),this.clear&&t.clear(),t.render(this.scene,this.camera),t.setRenderTarget(e),this.clear&&t.clear(),t.render(this.scene,this.camera),a.buffers.color.setLocked(!1),a.buffers.depth.setLocked(!1),a.buffers.stencil.setLocked(!1),a.buffers.stencil.setFunc(o.EQUAL,1,4294967295),a.buffers.stencil.setOp(o.KEEP,o.KEEP,o.KEEP),a.buffers.stencil.setLocked(!0)}});var vd=function(){fd.call(this),this.needsSwap=!1};vd.prototype=Object.create(fd.prototype),Object.assign(vd.prototype,{render:function(t){t.state.buffers.stencil.setLocked(!1),t.state.buffers.stencil.setTest(!1)}});var yd=function(t,e){if(this.renderer=t,void 0===e){var n={minFilter:m,magFilter:m,format:S},i=t.getSize(new G);this._pixelRatio=t.getPixelRatio(),this._width=i.width,this._height=i.height,(e=new $(this._width*this._pixelRatio,this._height*this._pixelRatio,n)).texture.name="EffectComposer.rt1"}else this._pixelRatio=1,this._width=e.width,this._height=e.height;this.renderTarget1=e,this.renderTarget2=e.clone(),this.renderTarget2.texture.name="EffectComposer.rt2",this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2,this.renderToScreen=!0,this.passes=[],void 0===pd&&console.error("THREE.EffectComposer relies on CopyShader"),void 0===md&&console.error("THREE.EffectComposer relies on ShaderPass"),this.copyPass=new md(pd),this.clock=new fc};Object.assign(yd.prototype,{swapBuffers:function(){var t=this.readBuffer;this.readBuffer=this.writeBuffer,this.writeBuffer=t},addPass:function(t){this.passes.push(t),t.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)},insertPass:function(t,e){this.passes.splice(e,0,t),t.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)},removePass:function(t){const e=this.passes.indexOf(t);-1!==e&&this.passes.splice(e,1)},isLastEnabledPass:function(t){for(var e=t+1;e1?i-1:0),o=1;o=0&&r<1?(s=o,c=a):r>=1&&r<2?(s=a,c=o):r>=2&&r<3?(c=o,l=a):r>=3&&r<4?(c=a,l=o):r>=4&&r<5?(s=a,l=o):r>=5&&r<6&&(s=o,l=a);var h=n-o/2;return i(s+h,c+h,l+h)}var Id={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"639",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"};var Dd=/^#[a-fA-F0-9]{6}$/,kd=/^#[a-fA-F0-9]{8}$/,zd=/^#[a-fA-F0-9]{3}$/,Bd=/^#[a-fA-F0-9]{4}$/,Fd=/^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/i,jd=/^rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*([-+]?[0-9]*[.]?[0-9]+)\s*\)$/i,Ud=/^hsl\(\s*(\d{0,3}[.]?[0-9]+)\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*\)$/i,Hd=/^hsla\(\s*(\d{0,3}[.]?[0-9]+)\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*,\s*([-+]?[0-9]*[.]?[0-9]+)\s*\)$/i;function Gd(t){if("string"!=typeof t)throw new Cd(3);var e=function(t){if("string"!=typeof t)return t;var e=t.toLowerCase();return Id[e]?"#"+Id[e]:t}(t);if(e.match(Dd))return{red:parseInt(""+e[1]+e[2],16),green:parseInt(""+e[3]+e[4],16),blue:parseInt(""+e[5]+e[6],16)};if(e.match(kd)){var n=parseFloat((parseInt(""+e[7]+e[8],16)/255).toFixed(2));return{red:parseInt(""+e[1]+e[2],16),green:parseInt(""+e[3]+e[4],16),blue:parseInt(""+e[5]+e[6],16),alpha:n}}if(e.match(zd))return{red:parseInt(""+e[1]+e[1],16),green:parseInt(""+e[2]+e[2],16),blue:parseInt(""+e[3]+e[3],16)};if(e.match(Bd)){var i=parseFloat((parseInt(""+e[4]+e[4],16)/255).toFixed(2));return{red:parseInt(""+e[1]+e[1],16),green:parseInt(""+e[2]+e[2],16),blue:parseInt(""+e[3]+e[3],16),alpha:i}}var r=Fd.exec(e);if(r)return{red:parseInt(""+r[1],10),green:parseInt(""+r[2],10),blue:parseInt(""+r[3],10)};var o=jd.exec(e.substring(0,50));if(o)return{red:parseInt(""+o[1],10),green:parseInt(""+o[2],10),blue:parseInt(""+o[3],10),alpha:parseFloat(""+o[4])};var a=Ud.exec(e);if(a){var s="rgb("+Nd(parseInt(""+a[1],10),parseInt(""+a[2],10)/100,parseInt(""+a[3],10)/100)+")",c=Fd.exec(s);if(!c)throw new Cd(4,e,s);return{red:parseInt(""+c[1],10),green:parseInt(""+c[2],10),blue:parseInt(""+c[3],10)}}var l=Hd.exec(e.substring(0,50));if(l){var h="rgb("+Nd(parseInt(""+l[1],10),parseInt(""+l[2],10)/100,parseInt(""+l[3],10)/100)+")",u=Fd.exec(h);if(!u)throw new Cd(4,e,h);return{red:parseInt(""+u[1],10),green:parseInt(""+u[2],10),blue:parseInt(""+u[3],10),alpha:parseFloat(""+l[4])}}throw new Cd(5)}var Vd=function(t){return 7===t.length&&t[1]===t[2]&&t[3]===t[4]&&t[5]===t[6]?"#"+t[1]+t[3]+t[5]:t};function Wd(t){var e=t.toString(16);return 1===e.length?"0"+e:e}function qd(t,e,n){if("number"==typeof t&&"number"==typeof e&&"number"==typeof n)return Vd("#"+Wd(t)+Wd(e)+Wd(n));if("object"==typeof t&&void 0===e&&void 0===n)return Vd("#"+Wd(t.red)+Wd(t.green)+Wd(t.blue));throw new Cd(6)}function Xd(t,e,n){return function(){var i=n.concat(Array.prototype.slice.call(arguments));return i.length>=e?t.apply(this,i):Xd(t,e,i)}}function Yd(t){return Xd(t,t.length,[])}function Zd(t,e){if("transparent"===e)return e;var n,i,r,o=Gd(e),a="number"==typeof o.alpha?o.alpha:1;return function(t,e,n,i){if("string"==typeof t&&"number"==typeof e){var r=Gd(t);return"rgba("+r.red+","+r.green+","+r.blue+","+e+")"}if("number"==typeof t&&"number"==typeof e&&"number"==typeof n&&"number"==typeof i)return i>=1?qd(t,e,n):"rgba("+t+","+e+","+n+","+i+")";if("object"==typeof t&&void 0===e&&void 0===n&&void 0===i)return t.alpha>=1?qd(t.red,t.green,t.blue):"rgba("+t.red+","+t.green+","+t.blue+","+t.alpha+")";throw new Cd(7)}(_d({},o,{alpha:(n=0,i=1,r=(100*a+100*parseFloat(t))/100,Math.max(n,Math.min(i,r)))}))}var Jd=Yd(Zd),$d={Linear:{None:function(t){return t}},Quadratic:{In:function(t){return t*t},Out:function(t){return t*(2-t)},InOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)}},Cubic:{In:function(t){return t*t*t},Out:function(t){return--t*t*t+1},InOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)}},Quartic:{In:function(t){return t*t*t*t},Out:function(t){return 1- --t*t*t*t},InOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)}},Quintic:{In:function(t){return t*t*t*t*t},Out:function(t){return--t*t*t*t*t+1},InOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)}},Sinusoidal:{In:function(t){return 1-Math.cos(t*Math.PI/2)},Out:function(t){return Math.sin(t*Math.PI/2)},InOut:function(t){return.5*(1-Math.cos(Math.PI*t))}},Exponential:{In:function(t){return 0===t?0:Math.pow(1024,t-1)},Out:function(t){return 1===t?1:1-Math.pow(2,-10*t)},InOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(2-Math.pow(2,-10*(t-1)))}},Circular:{In:function(t){return 1-Math.sqrt(1-t*t)},Out:function(t){return Math.sqrt(1- --t*t)},InOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)}},Elastic:{In:function(t){return 0===t?0:1===t?1:-Math.pow(2,10*(t-1))*Math.sin(5*(t-1.1)*Math.PI)},Out:function(t){return 0===t?0:1===t?1:Math.pow(2,-10*t)*Math.sin(5*(t-.1)*Math.PI)+1},InOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?-.5*Math.pow(2,10*(t-1))*Math.sin(5*(t-1.1)*Math.PI):.5*Math.pow(2,-10*(t-1))*Math.sin(5*(t-1.1)*Math.PI)+1}},Back:{In:function(t){var e=1.70158;return t*t*((e+1)*t-e)},Out:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},InOut:function(t){var e=2.5949095;return(t*=2)<1?t*t*((e+1)*t-e)*.5:.5*((t-=2)*t*((e+1)*t+e)+2)}},Bounce:{In:function(t){return 1-$d.Bounce.Out(1-t)},Out:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},InOut:function(t){return t<.5?.5*$d.Bounce.In(2*t):.5*$d.Bounce.Out(2*t-1)+.5}}},Qd="undefined"==typeof self&&"undefined"!=typeof process&&process.hrtime?function(){var t=process.hrtime();return 1e3*t[0]+t[1]/1e6}:"undefined"!=typeof self&&void 0!==self.performance&&void 0!==self.performance.now?self.performance.now.bind(self.performance):void 0!==Date.now?Date.now:function(){return(new Date).getTime()},Kd=function(){function t(){this._tweens={},this._tweensAddedDuringUpdate={}}return t.prototype.getAll=function(){var t=this;return Object.keys(this._tweens).map((function(e){return t._tweens[e]}))},t.prototype.removeAll=function(){this._tweens={}},t.prototype.add=function(t){this._tweens[t.getId()]=t,this._tweensAddedDuringUpdate[t.getId()]=t},t.prototype.remove=function(t){delete this._tweens[t.getId()],delete this._tweensAddedDuringUpdate[t.getId()]},t.prototype.update=function(t,e){void 0===t&&(t=Qd()),void 0===e&&(e=!1);var n=Object.keys(this._tweens);if(0===n.length)return!1;for(;n.length>0;){this._tweensAddedDuringUpdate={};for(var i=0;i1?o(t[n],t[n-1],n-i):o(t[r],t[r+1>n?n:r+1],i-r)},Bezier:function(t,e){for(var n=0,i=t.length-1,r=Math.pow,o=tp.Utils.Bernstein,a=0;a<=i;a++)n+=r(1-e,i-a)*r(e,a)*t[a]*o(i,a);return n},CatmullRom:function(t,e){var n=t.length-1,i=n*e,r=Math.floor(i),o=tp.Utils.CatmullRom;return t[0]===t[n]?(e<0&&(r=Math.floor(i=n*(1+e))),o(t[(r-1+n)%n],t[r],t[(r+1)%n],t[(r+2)%n],i-r)):e<0?t[0]-(o(t[0],t[0],t[1],t[1],-i)-t[0]):e>1?t[n]-(o(t[n],t[n],t[n-1],t[n-1],i-n)-t[n]):o(t[r?r-1:0],t[r],t[n1;i--)n*=i;return t[e]=n,n}}(),CatmullRom:function(t,e,n,i,r){var o=.5*(n-t),a=.5*(i-e),s=r*r;return(2*e-2*n+o+a)*(r*s)+(-3*e+3*n-2*o-a)*s+o*r+e}}},ep=function(){function t(){}return t.nextId=function(){return t._nextId++},t._nextId=0,t}(),np=new Kd,ip=function(){function t(t,e){void 0===e&&(e=np),this._object=t,this._group=e,this._isPaused=!1,this._pauseStart=0,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._initialRepeat=0,this._repeat=0,this._yoyo=!1,this._isPlaying=!1,this._reversed=!1,this._delayTime=0,this._startTime=0,this._easingFunction=$d.Linear.None,this._interpolationFunction=tp.Linear,this._chainedTweens=[],this._onStartCallbackFired=!1,this._id=ep.nextId(),this._isChainStopped=!1,this._goToEnd=!1}return t.prototype.getId=function(){return this._id},t.prototype.isPlaying=function(){return this._isPlaying},t.prototype.isPaused=function(){return this._isPaused},t.prototype.to=function(t,e){return this._valuesEnd=Object.create(t),void 0!==e&&(this._duration=e),this},t.prototype.duration=function(t){return this._duration=t,this},t.prototype.start=function(t){if(this._isPlaying)return this;if(this._group&&this._group.add(this),this._repeat=this._initialRepeat,this._reversed)for(var e in this._reversed=!1,this._valuesStartRepeat)this._swapEndStartRepeatValues(e),this._valuesStart[e]=this._valuesStartRepeat[e];return this._isPlaying=!0,this._isPaused=!1,this._onStartCallbackFired=!1,this._isChainStopped=!1,this._startTime=void 0!==t?"string"==typeof t?Qd()+parseFloat(t):t:Qd(),this._startTime+=this._delayTime,this._setupProperties(this._object,this._valuesStart,this._valuesEnd,this._valuesStartRepeat),this},t.prototype._setupProperties=function(t,e,n,i){for(var r in n){var o=t[r],a=Array.isArray(o),s=a?"array":typeof o,c=!a&&Array.isArray(n[r]);if("undefined"!==s&&"function"!==s){if(c){var l=n[r];if(0===l.length)continue;l=l.map(this._handleRelativeValue.bind(this,o)),n[r]=[o].concat(l)}if("object"!==s&&!a||!o||c)void 0===e[r]&&(e[r]=o),a||(e[r]*=1),i[r]=c?n[r].slice().reverse():e[r]||0;else{for(var h in e[r]=a?[]:{},o)e[r][h]=o[h];i[r]=a?[]:{},this._setupProperties(o,e[r],n[r],i[r])}}}},t.prototype.stop=function(){return this._isChainStopped||(this._isChainStopped=!0,this.stopChainedTweens()),this._isPlaying?(this._group&&this._group.remove(this),this._isPlaying=!1,this._isPaused=!1,this._onStopCallback&&this._onStopCallback(this._object),this):this},t.prototype.end=function(){return this._goToEnd=!0,this.update(1/0),this},t.prototype.pause=function(t){return void 0===t&&(t=Qd()),this._isPaused||!this._isPlaying||(this._isPaused=!0,this._pauseStart=t,this._group&&this._group.remove(this)),this},t.prototype.resume=function(t){return void 0===t&&(t=Qd()),this._isPaused&&this._isPlaying?(this._isPaused=!1,this._startTime+=t-this._pauseStart,this._pauseStart=0,this._group&&this._group.add(this),this):this},t.prototype.stopChainedTweens=function(){for(var t=0,e=this._chainedTweens.length;tr)return!1;e&&this.start(t)}if(this._goToEnd=!1,t1?1:i;var o=this._easingFunction(i);if(this._updateProperties(this._object,this._valuesStart,this._valuesEnd,o),this._onUpdateCallback&&this._onUpdateCallback(this._object,i),1===i){if(this._repeat>0){for(n in isFinite(this._repeat)&&this._repeat--,this._valuesStartRepeat)this._yoyo||"string"!=typeof this._valuesEnd[n]||(this._valuesStartRepeat[n]=this._valuesStartRepeat[n]+parseFloat(this._valuesEnd[n])),this._yoyo&&this._swapEndStartRepeatValues(n),this._valuesStart[n]=this._valuesStartRepeat[n];return this._yoyo&&(this._reversed=!this._reversed),void 0!==this._repeatDelayTime?this._startTime=t+this._repeatDelayTime:this._startTime=t+this._delayTime,this._onRepeatCallback&&this._onRepeatCallback(this._object),!0}this._onCompleteCallback&&this._onCompleteCallback(this._object);for(var a=0,s=this._chainedTweens.length;at.length)&&(e=t.length);for(var n=0,i=new Array(e);n1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,i=arguments.length,r=new Array(i>3?i-3:0),o=3;o2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10,r=t.camera;if(e){var o=new vp.Vector3(0,0,0),a=2*Math.max.apply(Math,fp(Object.entries(e).map((function(t){var e=pp(t,2),n=e[0],i=e[1];return Math.max.apply(Math,fp(i.map((function(t){return Math.abs(o[n]-t)}))))})))),s=(1-2*i/t.height)*r.fov,c=a/Math.atan(s*Math.PI/180),l=c/r.aspect,h=Math.max(c,l);if(h>0){var u=o.clone().sub(r.position).normalize().multiplyScalar(-h);this.cameraPosition(u,o,n)}}return this},getBbox:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){return!0},n=new vp.Box3(new vp.Vector3(0,0,0),new vp.Vector3(0,0,0)),i=t.objects.filter(e);return i.length?(i.forEach((function(t){return n.expandByObject(t)})),Object.assign.apply(Object,fp(["x","y","z"].map((function(t){return dp({},t,[n.min[t],n.max[t]])}))))):null},getScreenCoords:function(t,e,n,i){var r=new vp.Vector3(e,n,i);return r.project(this.camera()),{x:(r.x+1)*t.width/2,y:-(r.y-1)*t.height/2}},getSceneCoords:function(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,r=new vp.Vector2(e/t.width*2-1,-n/t.height*2+1),o=new vp.Raycaster;return o.setFromCamera(r,t.camera),Object.assign({},o.ray.at(i,new vp.Vector3))},intersectingObjects:function(t,e,n){var i=new vp.Vector2(e/t.width*2-1,-n/t.height*2+1),r=new vp.Raycaster;return r.params.Line.threshold=t.lineHoverPrecision,r.setFromCamera(i,t.camera),r.intersectObjects(t.objects,!0)},renderer:function(t){return t.renderer},scene:function(t){return t.scene},camera:function(t){return t.camera},postProcessingComposer:function(t){return t.postProcessingComposer},controls:function(t){return t.controls},tbControls:function(t){return t.controls}},stateInit:function(){return{scene:new vp.Scene,camera:new vp.OrthographicCamera,clock:new vp.Clock}},init:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=n.controlType,r=void 0===i?"trackball":i,o=n.rendererConfig,a=void 0===o?{}:o,s=n.extraRenderers,c=void 0===s?[]:s,l=n.waitForLoadComplete,h=void 0===l||l;t.innerHTML="",t.appendChild(e.container=document.createElement("div")),e.container.className="scene-container",e.container.style.position="relative",e.container.appendChild(e.navInfo=document.createElement("div")),e.navInfo.className="scene-nav-info",e.navInfo.textContent={orbit:"Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan",trackball:"Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan",fly:"WASD: move, R|F: up | down, Q|E: roll, up|down: pitch, left|right: yaw"}[r]||"",e.navInfo.style.display=e.showNavInfo?null:"none",e.toolTipElem=document.createElement("div"),e.toolTipElem.classList.add("scene-tooltip"),e.container.appendChild(e.toolTipElem),e.pointerPos=new vp.Vector2,e.pointerPos.x=-2,e.pointerPos.y=-2,["pointermove","pointerdown"].forEach((function(t){return e.container.addEventListener(t,(function(n){if("pointerdown"===t&&(e.isPointerPressed=!0),!e.isPointerDragging&&"pointermove"===n.type&&(n.pressure>0||e.isPointerPressed)&&("touch"!==n.pointerType||void 0===n.movementX||[n.movementX,n.movementY].some((function(t){return Math.abs(t)>1})))&&(e.isPointerDragging=!0),e.enablePointerInteraction){var i=(r=e.container,o=r.getBoundingClientRect(),a=window.pageXOffset||document.documentElement.scrollLeft,s=window.pageYOffset||document.documentElement.scrollTop,{top:o.top+s,left:o.left+a});e.pointerPos.x=n.pageX-i.left,e.pointerPos.y=n.pageY-i.top,e.toolTipElem.style.top="".concat(e.pointerPos.y,"px"),e.toolTipElem.style.left="".concat(e.pointerPos.x,"px"),e.toolTipElem.style.transform="translate(-".concat(e.pointerPos.x/e.width*100,"%, 21px)")}var r,o,a,s}),{passive:!0})})),e.container.addEventListener("pointerup",(function(t){e.isPointerPressed=!1,e.isPointerDragging&&(e.isPointerDragging=!1,!e.clickAfterDrag)||requestAnimationFrame((function(){0===t.button&&e.onClick(e.hoverObj||null,t,e.intersectionPoint),2===t.button&&e.onRightClick&&e.onRightClick(e.hoverObj||null,t,e.intersectionPoint)}))}),{passive:!0,capture:!0}),e.container.addEventListener("contextmenu",(function(t){e.onRightClick&&t.preventDefault()})),e.renderer=new vp.WebGLRenderer(Object.assign({antialias:!0,alpha:!0},a)),e.renderer.setPixelRatio(Math.min(2,window.devicePixelRatio)),e.container.appendChild(e.renderer.domElement),e.extraRenderers=c,e.extraRenderers.forEach((function(t){t.domElement.style.position="absolute",t.domElement.style.top="0px",t.domElement.style.pointerEvents="none",e.container.appendChild(t.domElement)})),e.postProcessingComposer=new yd(e.renderer),e.postProcessingComposer.addPass(new xd(e.scene,e.camera)),e.controls=new{trackball:ad,orbit:sd,fly:ld}[r](e.camera,e.renderer.domElement),"fly"===r&&(e.controls.movementSpeed=300,e.controls.rollSpeed=Math.PI/6,e.controls.dragToLook=!0),"trackball"!==r&&"orbit"!==r||(e.controls.minDistance=.1,e.controls.maxDistance=e.skyRadius,e.controls.addEventListener("start",(function(){e.controlsEngaged=!0})),e.controls.addEventListener("change",(function(){e.controlsEngaged&&(e.controlsDragging=!0)})),e.controls.addEventListener("end",(function(){e.controlsEngaged=!1,e.controlsDragging=!1}))),[e.renderer,e.postProcessingComposer].concat(fp(e.extraRenderers)).forEach((function(t){return t.setSize(e.width,e.height)})),e.renderer.setSize(e.width,e.height),e.postProcessingComposer.setSize(e.width,e.height),e.scene.add(e.skysphere=new vp.Mesh),e.skysphere.visible=!1,e.loadComplete=e.scene.visible=!h,window.scene=e.scene},update:function(t,e){if(t.width&&t.height&&(e.hasOwnProperty("width")||e.hasOwnProperty("height"))&&(t.container.style.width=t.width,t.container.style.height=t.height,[t.renderer,t.postProcessingComposer].concat(fp(t.extraRenderers)).forEach((function(e){return e.setSize(t.width,t.height)})),t.camera.aspect=t.width/t.height,t.camera.updateProjectionMatrix()),e.hasOwnProperty("skyRadius")&&t.skyRadius&&(t.controls.hasOwnProperty("maxDistance")&&e.skyRadius&&(t.controls.maxDistance=t.skyRadius),t.camera.far=2.5*t.skyRadius,t.camera.updateProjectionMatrix(),t.skysphere.geometry=new vp.SphereGeometry(t.skyRadius)),e.hasOwnProperty("backgroundColor")){var n=Gd(t.backgroundColor).alpha;void 0===n&&(n=1),t.renderer.setClearColor(new vp.Color(Jd(1,t.backgroundColor)),n)}function i(){t.loadComplete=t.scene.visible=!0}e.hasOwnProperty("backgroundImageUrl")&&(t.backgroundImageUrl?(new vp.TextureLoader).load(t.backgroundImageUrl,(function(e){t.skysphere.material=new vp.MeshBasicMaterial({map:e,side:vp.BackSide}),t.skysphere.visible=!0,t.onBackgroundImageLoaded&&setTimeout(t.onBackgroundImageLoaded),!t.loadComplete&&i()})):(t.skysphere.visible=!1,t.skysphere.material.map=null,!t.loadComplete&&i())),e.hasOwnProperty("showNavInfo")&&(t.navInfo.style.display=t.showNavInfo?null:"none"),e.hasOwnProperty("objects")&&((e.objects||[]).forEach((function(e){return t.scene.remove(e)})),t.objects.forEach((function(e){return t.scene.add(e)})))}});function bp(t,e){var n=new e;return{linkProp:function(e){return{default:n[e](),onChange:function(n,i){i[t][e](n)},triggerUpdate:!1}},linkMethod:function(e){return function(n){for(var i=n[t],r=arguments.length,o=new Array(r>1?r-1:0),a=1;a3?r-3:0),a=3;a arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; +} + +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +function linkKapsule (kapsulePropName, kapsuleType) { + var dummyK = new kapsuleType(); // To extract defaults + + return { + linkProp: function linkProp(prop) { + // link property config + return { + "default": dummyK[prop](), + onChange: function onChange(v, state) { + state[kapsulePropName][prop](v); + }, + triggerUpdate: false + }; + }, + linkMethod: function linkMethod(method) { + // link method pass-through + return function (state) { + var kapsuleInstance = state[kapsulePropName]; + + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var returnVal = kapsuleInstance[method].apply(kapsuleInstance, args); + return returnVal === kapsuleInstance ? this // chain based on the parent object, not the inner kapsule + : returnVal; + }; + } + }; +} + +var three = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists +: { + AmbientLight: AmbientLight, + DirectionalLight: DirectionalLight, + Vector3: Vector3 +}; + +var CAMERA_DISTANCE2NODES_FACTOR = 170; // +// Expose config from forceGraph + +var bindFG = linkKapsule('forceGraph', ThreeForceGraph); +var linkedFGProps = Object.assign.apply(Object, _toConsumableArray(['jsonUrl', 'graphData', 'numDimensions', 'dagMode', 'dagLevelDistance', 'dagNodeFilter', 'onDagError', 'nodeRelSize', 'nodeId', 'nodeVal', 'nodeResolution', 'nodeColor', 'nodeAutoColorBy', 'nodeOpacity', 'nodeVisibility', 'nodeThreeObject', 'nodeThreeObjectExtend', 'linkSource', 'linkTarget', 'linkVisibility', 'linkColor', 'linkAutoColorBy', 'linkOpacity', 'linkWidth', 'linkResolution', 'linkCurvature', 'linkCurveRotation', 'linkMaterial', 'linkThreeObject', 'linkThreeObjectExtend', 'linkPositionUpdate', 'linkDirectionalArrowLength', 'linkDirectionalArrowColor', 'linkDirectionalArrowRelPos', 'linkDirectionalArrowResolution', 'linkDirectionalParticles', 'linkDirectionalParticleSpeed', 'linkDirectionalParticleWidth', 'linkDirectionalParticleColor', 'linkDirectionalParticleResolution', 'forceEngine', 'd3AlphaDecay', 'd3VelocityDecay', 'd3AlphaMin', 'ngraphPhysics', 'warmupTicks', 'cooldownTicks', 'cooldownTime', 'onEngineTick', 'onEngineStop'].map(function (p) { + return _defineProperty({}, p, bindFG.linkProp(p)); +}))); +var linkedFGMethods = Object.assign.apply(Object, _toConsumableArray(['refresh', 'getGraphBbox', 'd3Force', 'd3ReheatSimulation', 'emitParticle'].map(function (p) { + return _defineProperty({}, p, bindFG.linkMethod(p)); +}))); // Expose config from renderObjs + +var bindRenderObjs = linkKapsule('renderObjs', ThreeRenderObjects); +var linkedRenderObjsProps = Object.assign.apply(Object, _toConsumableArray(['width', 'height', 'backgroundColor', 'showNavInfo', 'enablePointerInteraction'].map(function (p) { + return _defineProperty({}, p, bindRenderObjs.linkProp(p)); +}))); +var linkedRenderObjsMethods = Object.assign.apply(Object, _toConsumableArray(['cameraPosition', 'postProcessingComposer'].map(function (p) { + return _defineProperty({}, p, bindRenderObjs.linkMethod(p)); +})).concat([{ + graph2ScreenCoords: bindRenderObjs.linkMethod('getScreenCoords'), + screen2GraphCoords: bindRenderObjs.linkMethod('getSceneCoords') +}])); // + +var _3dForceGraph = Kapsule({ + props: _objectSpread2(_objectSpread2({ + nodeLabel: { + "default": 'name', + triggerUpdate: false + }, + linkLabel: { + "default": 'name', + triggerUpdate: false + }, + linkHoverPrecision: { + "default": 1, + onChange: function onChange(p, state) { + return state.renderObjs.lineHoverPrecision(p); + }, + triggerUpdate: false + }, + enableNavigationControls: { + "default": true, + onChange: function onChange(enable, state) { + var controls = state.renderObjs.controls(); + + if (controls) { + controls.enabled = enable; + } + }, + triggerUpdate: false + }, + enableNodeDrag: { + "default": true, + triggerUpdate: false + }, + onNodeDrag: { + "default": function _default() {}, + triggerUpdate: false + }, + onNodeDragEnd: { + "default": function _default() {}, + triggerUpdate: false + }, + onNodeClick: { + triggerUpdate: false + }, + onNodeRightClick: { + triggerUpdate: false + }, + onNodeHover: { + triggerUpdate: false + }, + onLinkClick: { + triggerUpdate: false + }, + onLinkRightClick: { + triggerUpdate: false + }, + onLinkHover: { + triggerUpdate: false + }, + onBackgroundClick: { + triggerUpdate: false + }, + onBackgroundRightClick: { + triggerUpdate: false + } + }, linkedFGProps), linkedRenderObjsProps), + methods: _objectSpread2(_objectSpread2({ + zoomToFit: function zoomToFit(state, transitionDuration, padding) { + var _state$forceGraph; + + for (var _len = arguments.length, bboxArgs = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { + bboxArgs[_key - 3] = arguments[_key]; + } + + state.renderObjs.fitToBbox((_state$forceGraph = state.forceGraph).getGraphBbox.apply(_state$forceGraph, bboxArgs), transitionDuration, padding); + return this; + }, + pauseAnimation: function pauseAnimation(state) { + if (state.animationFrameRequestId !== null) { + cancelAnimationFrame(state.animationFrameRequestId); + state.animationFrameRequestId = null; + } + + return this; + }, + resumeAnimation: function resumeAnimation(state) { + if (state.animationFrameRequestId === null) { + this._animationCycle(); + } + + return this; + }, + _animationCycle: function _animationCycle(state) { + if (state.enablePointerInteraction) { + // reset canvas cursor (override dragControls cursor) + this.renderer().domElement.style.cursor = null; + } // Frame cycle + + + state.forceGraph.tickFrame(); + state.renderObjs.tick(); + state.animationFrameRequestId = requestAnimationFrame(this._animationCycle); + }, + scene: function scene(state) { + return state.renderObjs.scene(); + }, + // Expose scene + camera: function camera(state) { + return state.renderObjs.camera(); + }, + // Expose camera + renderer: function renderer(state) { + return state.renderObjs.renderer(); + }, + // Expose renderer + controls: function controls(state) { + return state.renderObjs.controls(); + }, + // Expose controls + tbControls: function tbControls(state) { + return state.renderObjs.tbControls(); + }, + // To be deprecated + _destructor: function _destructor() { + this.pauseAnimation(); + this.graphData({ + nodes: [], + links: [] + }); + } + }, linkedFGMethods), linkedRenderObjsMethods), + stateInit: function stateInit(_ref5) { + var controlType = _ref5.controlType, + rendererConfig = _ref5.rendererConfig, + extraRenderers = _ref5.extraRenderers; + return { + forceGraph: new ThreeForceGraph(), + renderObjs: ThreeRenderObjects({ + controlType: controlType, + rendererConfig: rendererConfig, + extraRenderers: extraRenderers + }) + }; + }, + init: function init(domNode, state) { + // Wipe DOM + domNode.innerHTML = ''; // Add relative container + + domNode.appendChild(state.container = document.createElement('div')); + state.container.style.position = 'relative'; // Add renderObjs + + var roDomNode = document.createElement('div'); + state.container.appendChild(roDomNode); + state.renderObjs(roDomNode); + var camera = state.renderObjs.camera(); + var renderer = state.renderObjs.renderer(); + var controls = state.renderObjs.controls(); + controls.enabled = !!state.enableNavigationControls; + state.lastSetCameraZ = camera.position.z; // Add info space + + var infoElem; + state.container.appendChild(infoElem = document.createElement('div')); + infoElem.className = 'graph-info-msg'; + infoElem.textContent = ''; // config forcegraph + + state.forceGraph.onLoading(function () { + infoElem.textContent = 'Loading...'; + }).onFinishLoading(function () { + infoElem.textContent = ''; + }).onUpdate(function () { + // sync graph data structures + state.graphData = state.forceGraph.graphData(); // re-aim camera, if still in default position (not user modified) + + if (camera.position.x === 0 && camera.position.y === 0 && camera.position.z === state.lastSetCameraZ && state.graphData.nodes.length) { + camera.lookAt(state.forceGraph.position); + state.lastSetCameraZ = camera.position.z = Math.cbrt(state.graphData.nodes.length) * CAMERA_DISTANCE2NODES_FACTOR; + } + }).onFinishUpdate(function () { + // Setup node drag interaction + if (state._dragControls) { + var curNodeDrag = state.graphData.nodes.find(function (node) { + return node.__initialFixedPos && !node.__disposeControlsAfterDrag; + }); // detect if there's a node being dragged using the existing drag controls + + if (curNodeDrag) { + curNodeDrag.__disposeControlsAfterDrag = true; // postpone previous controls disposal until drag ends + } else { + state._dragControls.dispose(); // cancel previous drag controls + + } + + state._dragControls = undefined; + } + + if (state.enableNodeDrag && state.enablePointerInteraction && state.forceEngine === 'd3') { + // Can't access node positions programatically in ngraph + var dragControls = state._dragControls = new DragControls(state.graphData.nodes.map(function (node) { + return node.__threeObj; + }).filter(function (obj) { + return obj; + }), camera, renderer.domElement); + dragControls.addEventListener('dragstart', function (event) { + controls.enabled = false; // Disable controls while dragging + // track drag object movement + + event.object.__initialPos = event.object.position.clone(); + event.object.__prevPos = event.object.position.clone(); + + var node = getGraphObj(event.object).__data; + + !node.__initialFixedPos && (node.__initialFixedPos = { + fx: node.fx, + fy: node.fy, + fz: node.fz + }); + !node.__initialPos && (node.__initialPos = { + x: node.x, + y: node.y, + z: node.z + }); // lock node + + ['x', 'y', 'z'].forEach(function (c) { + return node["f".concat(c)] = node[c]; + }); // drag cursor + + renderer.domElement.classList.add('grabbable'); + }); + dragControls.addEventListener('drag', function (event) { + var nodeObj = getGraphObj(event.object); + + if (!event.object.hasOwnProperty('__graphObjType')) { + // If dragging a child of the node, update the node object instead + var initPos = event.object.__initialPos; + var prevPos = event.object.__prevPos; + var _newPos = event.object.position; + nodeObj.position.add(_newPos.clone().sub(prevPos)); // translate node object by the motion delta + + prevPos.copy(_newPos); + + _newPos.copy(initPos); // reset child back to its initial position + + } + + var node = nodeObj.__data; + var newPos = nodeObj.position; + var translate = { + x: newPos.x - node.x, + y: newPos.y - node.y, + z: newPos.z - node.z + }; // Move fx/fy/fz (and x/y/z) of nodes based on object new position + + ['x', 'y', 'z'].forEach(function (c) { + return node["f".concat(c)] = node[c] = newPos[c]; + }); + state.forceGraph.d3AlphaTarget(0.3) // keep engine running at low intensity throughout drag + .resetCountdown(); // prevent freeze while dragging + + node.__dragged = true; + state.onNodeDrag(node, translate); + }); + dragControls.addEventListener('dragend', function (event) { + delete event.object.__initialPos; // remove tracking attributes + + delete event.object.__prevPos; + + var node = getGraphObj(event.object).__data; // dispose previous controls if needed + + + if (node.__disposeControlsAfterDrag) { + dragControls.dispose(); + delete node.__disposeControlsAfterDrag; + } + + var initFixedPos = node.__initialFixedPos; + var initPos = node.__initialPos; + var translate = { + x: initPos.x - node.x, + y: initPos.y - node.y, + z: initPos.z - node.z + }; + + if (initFixedPos) { + ['x', 'y', 'z'].forEach(function (c) { + var fc = "f".concat(c); + + if (initFixedPos[fc] === undefined) { + delete node[fc]; + } + }); + delete node.__initialFixedPos; + delete node.__initialPos; + + if (node.__dragged) { + delete node.__dragged; + state.onNodeDragEnd(node, translate); + } + } + + state.forceGraph.d3AlphaTarget(0) // release engine low intensity + .resetCountdown(); // let the engine readjust after releasing fixed nodes + + if (state.enableNavigationControls) { + controls.enabled = true; // Re-enable controls + + controls.domElement && controls.domElement.ownerDocument && controls.domElement.ownerDocument.dispatchEvent( // simulate mouseup to ensure the controls don't take over after dragend + new PointerEvent('pointerup', { + pointerType: 'mouse' + })); + } // clear cursor + + + renderer.domElement.classList.remove('grabbable'); + }); + } + }); // config renderObjs + + state.renderObjs.objects([// Populate scene + new three.AmbientLight(0xbbbbbb), new three.DirectionalLight(0xffffff, 0.6), state.forceGraph]).hoverOrderComparator(function (a, b) { + // Prioritize graph objects + var aObj = getGraphObj(a); + if (!aObj) return 1; + var bObj = getGraphObj(b); + if (!bObj) return -1; // Prioritize nodes over links + + var isNode = function isNode(o) { + return o.__graphObjType === 'node'; + }; + + return isNode(bObj) - isNode(aObj); + }).tooltipContent(function (obj) { + var graphObj = getGraphObj(obj); + return graphObj ? accessorFn(state["".concat(graphObj.__graphObjType, "Label")])(graphObj.__data) || '' : ''; + }).hoverDuringDrag(false).onHover(function (obj) { + // Update tooltip and trigger onHover events + var hoverObj = getGraphObj(obj); + + if (hoverObj !== state.hoverObj) { + var prevObjType = state.hoverObj ? state.hoverObj.__graphObjType : null; + var prevObjData = state.hoverObj ? state.hoverObj.__data : null; + var objType = hoverObj ? hoverObj.__graphObjType : null; + var objData = hoverObj ? hoverObj.__data : null; + + if (prevObjType && prevObjType !== objType) { + // Hover out + var fn = state["on".concat(prevObjType === 'node' ? 'Node' : 'Link', "Hover")]; + fn && fn(null, prevObjData); + } + + if (objType) { + // Hover in + var _fn = state["on".concat(objType === 'node' ? 'Node' : 'Link', "Hover")]; + _fn && _fn(objData, prevObjType === objType ? prevObjData : null); + } // set pointer if hovered object is clickable + + + renderer.domElement.classList[hoverObj && state["on".concat(objType === 'node' ? 'Node' : 'Link', "Click")] || !hoverObj && state.onBackgroundClick ? 'add' : 'remove']('clickable'); + state.hoverObj = hoverObj; + } + }).clickAfterDrag(false).onClick(function (obj, ev) { + var graphObj = getGraphObj(obj); + + if (graphObj) { + var fn = state["on".concat(graphObj.__graphObjType === 'node' ? 'Node' : 'Link', "Click")]; + fn && fn(graphObj.__data, ev); + } else { + state.onBackgroundClick && state.onBackgroundClick(ev); + } + }).onRightClick(function (obj, ev) { + // Handle right-click events + var graphObj = getGraphObj(obj); + + if (graphObj) { + var fn = state["on".concat(graphObj.__graphObjType === 'node' ? 'Node' : 'Link', "RightClick")]; + fn && fn(graphObj.__data, ev); + } else { + state.onBackgroundRightClick && state.onBackgroundRightClick(ev); + } + }); // + // Kick-off renderer + + this._animationCycle(); + } +}); // + +function getGraphObj(object) { + var obj = object; // recurse up object chain until finding the graph object + + while (obj && !obj.hasOwnProperty('__graphObjType')) { + obj = obj.parent; + } + + return obj; +} + +export default _3dForceGraph; diff --git a/src/citationnet/static/lib/d3-force.js b/src/citationnet/static/lib/d3-force.js new file mode 100644 index 0000000..d96788d --- /dev/null +++ b/src/citationnet/static/lib/d3-force.js @@ -0,0 +1,693 @@ +// https://d3js.org/d3-force/ v2.1.1 Copyright 2020 Mike Bostock +(function (global, factory) { +typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-quadtree'), require('d3-dispatch'), require('d3-timer')) : +typeof define === 'function' && define.amd ? define(['exports', 'd3-quadtree', 'd3-dispatch', 'd3-timer'], factory) : +(global = global || self, factory(global.d3 = global.d3 || {}, global.d3, global.d3, global.d3)); +}(this, function (exports, d3Quadtree, d3Dispatch, d3Timer) { 'use strict'; + +function center(x, y) { + var nodes, strength = 1; + + if (x == null) x = 0; + if (y == null) y = 0; + + function force() { + var i, + n = nodes.length, + node, + sx = 0, + sy = 0; + + for (i = 0; i < n; ++i) { + node = nodes[i], sx += node.x, sy += node.y; + } + + for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) { + node = nodes[i], node.x -= sx, node.y -= sy; + } + } + + force.initialize = function(_) { + nodes = _; + }; + + force.x = function(_) { + return arguments.length ? (x = +_, force) : x; + }; + + force.y = function(_) { + return arguments.length ? (y = +_, force) : y; + }; + + force.strength = function(_) { + return arguments.length ? (strength = +_, force) : strength; + }; + + return force; +} + +function constant(x) { + return function() { + return x; + }; +} + +function jiggle(random) { + return (random() - 0.5) * 1e-6; +} + +function x(d) { + return d.x + d.vx; +} + +function y(d) { + return d.y + d.vy; +} + +function collide(radius) { + var nodes, + radii, + random, + strength = 1, + iterations = 1; + + if (typeof radius !== "function") radius = constant(radius == null ? 1 : +radius); + + function force() { + var i, n = nodes.length, + tree, + node, + xi, + yi, + ri, + ri2; + + for (var k = 0; k < iterations; ++k) { + tree = d3Quadtree.quadtree(nodes, x, y).visitAfter(prepare); + for (i = 0; i < n; ++i) { + node = nodes[i]; + ri = radii[node.index], ri2 = ri * ri; + xi = node.x + node.vx; + yi = node.y + node.vy; + tree.visit(apply); + } + } + + function apply(quad, x0, y0, x1, y1) { + var data = quad.data, rj = quad.r, r = ri + rj; + if (data) { + if (data.index > node.index) { + var x = xi - data.x - data.vx, + y = yi - data.y - data.vy, + l = x * x + y * y; + if (l < r * r) { + if (x === 0) x = jiggle(random), l += x * x; + if (y === 0) y = jiggle(random), l += y * y; + l = (r - (l = Math.sqrt(l))) / l * strength; + node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj)); + node.vy += (y *= l) * r; + data.vx -= x * (r = 1 - r); + data.vy -= y * r; + } + } + return; + } + return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r; + } + } + + function prepare(quad) { + if (quad.data) return quad.r = radii[quad.data.index]; + for (var i = quad.r = 0; i < 4; ++i) { + if (quad[i] && quad[i].r > quad.r) { + quad.r = quad[i].r; + } + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length, node; + radii = new Array(n); + for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes); + } + + force.initialize = function(_nodes, _random) { + nodes = _nodes; + random = _random; + initialize(); + }; + + force.iterations = function(_) { + return arguments.length ? (iterations = +_, force) : iterations; + }; + + force.strength = function(_) { + return arguments.length ? (strength = +_, force) : strength; + }; + + force.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : constant(+_), initialize(), force) : radius; + }; + + return force; +} + +function index(d) { + return d.index; +} + +function find(nodeById, nodeId) { + var node = nodeById.get(nodeId); + if (!node) throw new Error("node not found: " + nodeId); + return node; +} + +function link(links) { + var id = index, + strength = defaultStrength, + strengths, + distance = constant(30), + distances, + nodes, + count, + bias, + random, + iterations = 1; + + if (links == null) links = []; + + function defaultStrength(link) { + return 1 / Math.min(count[link.source.index], count[link.target.index]); + } + + function force(alpha) { + for (var k = 0, n = links.length; k < iterations; ++k) { + for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) { + link = links[i], source = link.source, target = link.target; + x = target.x + target.vx - source.x - source.vx || jiggle(random); + y = target.y + target.vy - source.y - source.vy || jiggle(random); + l = Math.sqrt(x * x + y * y); + l = (l - distances[i]) / l * alpha * strengths[i]; + x *= l, y *= l; + target.vx -= x * (b = bias[i]); + target.vy -= y * b; + source.vx += x * (b = 1 - b); + source.vy += y * b; + } + } + } + + function initialize() { + if (!nodes) return; + + var i, + n = nodes.length, + m = links.length, + nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])), + link; + + for (i = 0, count = new Array(n); i < m; ++i) { + link = links[i], link.index = i; + if (typeof link.source !== "object") link.source = find(nodeById, link.source); + if (typeof link.target !== "object") link.target = find(nodeById, link.target); + count[link.source.index] = (count[link.source.index] || 0) + 1; + count[link.target.index] = (count[link.target.index] || 0) + 1; + } + + for (i = 0, bias = new Array(m); i < m; ++i) { + link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]); + } + + strengths = new Array(m), initializeStrength(); + distances = new Array(m), initializeDistance(); + } + + function initializeStrength() { + if (!nodes) return; + + for (var i = 0, n = links.length; i < n; ++i) { + strengths[i] = +strength(links[i], i, links); + } + } + + function initializeDistance() { + if (!nodes) return; + + for (var i = 0, n = links.length; i < n; ++i) { + distances[i] = +distance(links[i], i, links); + } + } + + force.initialize = function(_nodes, _random) { + nodes = _nodes; + random = _random; + initialize(); + }; + + force.links = function(_) { + return arguments.length ? (links = _, initialize(), force) : links; + }; + + force.id = function(_) { + return arguments.length ? (id = _, force) : id; + }; + + force.iterations = function(_) { + return arguments.length ? (iterations = +_, force) : iterations; + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initializeStrength(), force) : strength; + }; + + force.distance = function(_) { + return arguments.length ? (distance = typeof _ === "function" ? _ : constant(+_), initializeDistance(), force) : distance; + }; + + return force; +} + +// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use +const a = 1664525; +const c = 1013904223; +const m = 4294967296; // 2^32 + +function lcg() { + let s = 1; + return () => (s = (a * s + c) % m) / m; +} + +function x$1(d) { + return d.x; +} + +function y$1(d) { + return d.y; +} + +var initialRadius = 10, + initialAngle = Math.PI * (3 - Math.sqrt(5)); + +function simulation(nodes) { + var simulation, + alpha = 1, + alphaMin = 0.001, + alphaDecay = 1 - Math.pow(alphaMin, 1 / 300), + alphaTarget = 0, + velocityDecay = 0.6, + forces = new Map(), + stepper = d3Timer.timer(step), + event = d3Dispatch.dispatch("tick", "end"), + random = lcg(); + + if (nodes == null) nodes = []; + + function step() { + tick(); + event.call("tick", simulation); + if (alpha < alphaMin) { + stepper.stop(); + event.call("end", simulation); + } + } + + function tick(iterations) { + var i, n = nodes.length, node; + + if (iterations === undefined) iterations = 1; + + for (var k = 0; k < iterations; ++k) { + alpha += (alphaTarget - alpha) * alphaDecay; + + forces.forEach(function(force) { + force(alpha); + }); + + for (i = 0; i < n; ++i) { + node = nodes[i]; + if (node.fx == null) node.x += node.vx *= velocityDecay; + else node.x = node.fx, node.vx = 0; + if (node.fy == null) node.y += node.vy *= velocityDecay; + else node.y = node.fy, node.vy = 0; + } + } + + return simulation; + } + + function initializeNodes() { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.index = i; + if (node.fx != null) node.x = node.fx; + if (node.fy != null) node.y = node.fy; + if (isNaN(node.x) || isNaN(node.y)) { + var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle; + node.x = radius * Math.cos(angle); + node.y = radius * Math.sin(angle); + } + if (isNaN(node.vx) || isNaN(node.vy)) { + node.vx = node.vy = 0; + } + } + } + + function initializeForce(force) { + if (force.initialize) force.initialize(nodes, random); + return force; + } + + initializeNodes(); + + return simulation = { + tick: tick, + + restart: function() { + return stepper.restart(step), simulation; + }, + + stop: function() { + return stepper.stop(), simulation; + }, + + nodes: function(_) { + return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes; + }, + + alpha: function(_) { + return arguments.length ? (alpha = +_, simulation) : alpha; + }, + + alphaMin: function(_) { + return arguments.length ? (alphaMin = +_, simulation) : alphaMin; + }, + + alphaDecay: function(_) { + return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay; + }, + + alphaTarget: function(_) { + return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget; + }, + + velocityDecay: function(_) { + return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay; + }, + + randomSource: function(_) { + return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random; + }, + + force: function(name, _) { + return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name); + }, + + find: function(x, y, radius) { + var i = 0, + n = nodes.length, + dx, + dy, + d2, + node, + closest; + + if (radius == null) radius = Infinity; + else radius *= radius; + + for (i = 0; i < n; ++i) { + node = nodes[i]; + dx = x - node.x; + dy = y - node.y; + d2 = dx * dx + dy * dy; + if (d2 < radius) closest = node, radius = d2; + } + + return closest; + }, + + on: function(name, _) { + return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name); + } + }; +} + +function manyBody() { + var nodes, + node, + random, + alpha, + strength = constant(-30), + strengths, + distanceMin2 = 1, + distanceMax2 = Infinity, + theta2 = 0.81; + + function force(_) { + var i, n = nodes.length, tree = d3Quadtree.quadtree(nodes, x$1, y$1).visitAfter(accumulate); + for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply); + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length, node; + strengths = new Array(n); + for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes); + } + + function accumulate(quad) { + var strength = 0, q, c, weight = 0, x, y, i; + + // For internal nodes, accumulate forces from child quadrants. + if (quad.length) { + for (x = y = i = 0; i < 4; ++i) { + if ((q = quad[i]) && (c = Math.abs(q.value))) { + strength += q.value, weight += c, x += c * q.x, y += c * q.y; + } + } + quad.x = x / weight; + quad.y = y / weight; + } + + // For leaf nodes, accumulate forces from coincident quadrants. + else { + q = quad; + q.x = q.data.x; + q.y = q.data.y; + do strength += strengths[q.data.index]; + while (q = q.next); + } + + quad.value = strength; + } + + function apply(quad, x1, _, x2) { + if (!quad.value) return true; + + var x = quad.x - node.x, + y = quad.y - node.y, + w = x2 - x1, + l = x * x + y * y; + + // Apply the Barnes-Hut approximation if possible. + // Limit forces for very close nodes; randomize direction if coincident. + if (w * w / theta2 < l) { + if (l < distanceMax2) { + if (x === 0) x = jiggle(random), l += x * x; + if (y === 0) y = jiggle(random), l += y * y; + if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); + node.vx += x * quad.value * alpha / l; + node.vy += y * quad.value * alpha / l; + } + return true; + } + + // Otherwise, process points directly. + else if (quad.length || l >= distanceMax2) return; + + // Limit forces for very close nodes; randomize direction if coincident. + if (quad.data !== node || quad.next) { + if (x === 0) x = jiggle(random), l += x * x; + if (y === 0) y = jiggle(random), l += y * y; + if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); + } + + do if (quad.data !== node) { + w = strengths[quad.data.index] * alpha / l; + node.vx += x * w; + node.vy += y * w; + } while (quad = quad.next); + } + + force.initialize = function(_nodes, _random) { + nodes = _nodes; + random = _random; + initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initialize(), force) : strength; + }; + + force.distanceMin = function(_) { + return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2); + }; + + force.distanceMax = function(_) { + return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2); + }; + + force.theta = function(_) { + return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2); + }; + + return force; +} + +function radial(radius, x, y) { + var nodes, + strength = constant(0.1), + strengths, + radiuses; + + if (typeof radius !== "function") radius = constant(+radius); + if (x == null) x = 0; + if (y == null) y = 0; + + function force(alpha) { + for (var i = 0, n = nodes.length; i < n; ++i) { + var node = nodes[i], + dx = node.x - x || 1e-6, + dy = node.y - y || 1e-6, + r = Math.sqrt(dx * dx + dy * dy), + k = (radiuses[i] - r) * strengths[i] * alpha / r; + node.vx += dx * k; + node.vy += dy * k; + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + strengths = new Array(n); + radiuses = new Array(n); + for (i = 0; i < n; ++i) { + radiuses[i] = +radius(nodes[i], i, nodes); + strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes); + } + } + + force.initialize = function(_) { + nodes = _, initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initialize(), force) : strength; + }; + + force.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : constant(+_), initialize(), force) : radius; + }; + + force.x = function(_) { + return arguments.length ? (x = +_, force) : x; + }; + + force.y = function(_) { + return arguments.length ? (y = +_, force) : y; + }; + + return force; +} + +function x$2(x) { + var strength = constant(0.1), + nodes, + strengths, + xz; + + if (typeof x !== "function") x = constant(x == null ? 0 : +x); + + function force(alpha) { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha; + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + strengths = new Array(n); + xz = new Array(n); + for (i = 0; i < n; ++i) { + strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); + } + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initialize(), force) : strength; + }; + + force.x = function(_) { + return arguments.length ? (x = typeof _ === "function" ? _ : constant(+_), initialize(), force) : x; + }; + + return force; +} + +function y$2(y) { + var strength = constant(0.1), + nodes, + strengths, + yz; + + if (typeof y !== "function") y = constant(y == null ? 0 : +y); + + function force(alpha) { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha; + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + strengths = new Array(n); + yz = new Array(n); + for (i = 0; i < n; ++i) { + strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); + } + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initialize(), force) : strength; + }; + + force.y = function(_) { + return arguments.length ? (y = typeof _ === "function" ? _ : constant(+_), initialize(), force) : y; + }; + + return force; +} + +exports.forceCenter = center; +exports.forceCollide = collide; +exports.forceLink = link; +exports.forceManyBody = manyBody; +exports.forceRadial = radial; +exports.forceSimulation = simulation; +exports.forceX = x$2; +exports.forceY = y$2; + +Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/src/citationnet/static/lib/force-citationNet.js b/src/citationnet/static/lib/force-citationNet.js new file mode 100644 index 0000000..c877a44 --- /dev/null +++ b/src/citationnet/static/lib/force-citationNet.js @@ -0,0 +1,321 @@ +/** +* Async function for fetching and parsing JSON files +* @param {String} path - path or url to JSON file +* @return {object} parsed JSON object +*/ +async function fetchJSON(path) { + try { + var res = await fetch(path); + // waits until the request completes... + var data = await res.json() + } catch (error) { + console.log(path) + throw error + } + + + return data; +} + +class CitationNet { + + /** + * Constructs a new CitationNet object, but does not initialize it. Call object.initialize() right after this. + * @param {String} jsonPath - path or url to citation data as JSON file/stream + */ + constructor(jsonPath = null) { + // if jsonPath is not provided try to get globJsonPath, show alert if fails + try { + if (!(jsonPath)) jsonPath = globJsonPath; + } catch (error) { + alert("no path or URL to JSON containing citation data specified, graph cannot be displayed") + } + + this.jsonPath = jsonPath; + this.is_initialized = false; + } + + /** + * Fetches and processes data, initializes graph and sets view. Constructors cannot be async in JS, which is needed for fetching and saving data. + */ + async initialize() { + // fetch data (async) + this.data = await fetchJSON(this.jsonPath); + this.processData(); + this.graph = CitationNet.makeGraph(this.data); + + // variables for control toggle-functions + this.nodeSize = false; + this.edgesOnlyInput = false; + this.distanceFromInputNode = true; + + this.adaptWindowSize(); + this.view('top'); + + this.is_initialized = true; + } + + /** + * Reads current window size, adapts canvas size and camera projection settings to it. + */ + adaptWindowSize() { + this.graph.height(window.innerHeight - document.getElementsByClassName("navbar")[0].scrollHeight); + this.graph.width(window.innerWidth); + + this.graph.camera().left = this.graph.width() / -2; + this.graph.camera().right = this.graph.width() / 2; + this.graph.camera().top = this.graph.height() / 2; + this.graph.camera().bottom = this.graph.height() / -2; + this.graph.camera().updateProjectionMatrix(); + } + + /** + * Static method to instantiate and configure graph + * @param {object} data - preprocessed citation data + * @return {function} Brief description of the returning value here. + */ + static makeGraph(data) { + // sort nodes descending by data.nodes.attributes['ref-by-count'], get first items 'ref-by-count'-attribute + const maxCites = data.nodes.sort((a, b) => (a.attributes['ref-by-count'] > b.attributes['ref-by-count']) ? -1 + : (a.attributes['ref-by-count'] < b.attributes['ref-by-count']) ? 1 + : 0)[0].attributes['ref-by-count']; + + // make Graph object + var graph = ForceGraph3D({ "controlType": 'trackball' }) + (document.getElementById('3d-graph')) + .graphData({ nodes: data.nodes, links: data.edges }) + .nodeId('id') + .nodeLabel(node => { + var doi = (typeof node.attributes.doi !== 'undefined') ? node.attributes.doi : node.id + var category_for = (typeof node.attributes.category_for !== 'undefined') ? ", FOR: " + node.attributes.category_for : "" + return `${doi} @ ${node.attributes.nodeyear}\n cited ${node.attributes['ref-by-count']} times${category_for}` + } + ) + .nodeRelSize(0.5) + .nodeAutoColorBy(node => node.attributes.category_for) + .nodeVal(1.0) // uniform size, is changed using this.toggleNodeSize() + .d3Force('center', null) // disable center force + .d3Force('charge', null) // disable charge force + .d3Force('radialInner', d3.forceRadial(0).strength(0.1)) // weak force pulling the nodes towards the middle axis of the cylinder + + // force pulling the nodes towards the outer radius of the cylinder, strength is dynamic (, look at strengthFuncFactory for details) + .d3Force('radialOuter', d3.forceRadial(100).strength(CitationNet.strengthFuncFactory(0.0, 1.0, 0, 200))) + + .enableNodeDrag(false) + .onNodeClick(node => { + var doi = (typeof node.attributes.doi !== 'undefined') ? node.attributes.doi : node.id + window.open(`https://doi.org/${doi}`) + }) // open using doi when node is clicked + ; + + // somehow this needs to be done after graph instantiated or else it breaks layouting + graph.d3Force('link', graph.d3Force('link').strength(0.0)) // show edges, but set strength to 0.0 -> no charge/spring forces + return graph; + } + + /** + * Function factory for dynamic strength functions using linear interpolation. If input is outside the interval minStrength or maxStrength is used. + * @param {number} minStrength - minimum strength, default = 0.0 + * @param {number} maxStrength - maximum strength, default = 1.0 + * @param {number} min - lower interval boundary, default = 0.0 + * @param {number} min - upper interval boundary, default = 100.0 + * @param {number} exp - exponent (used for adjusting spacing between nodes), default = 1.0 + * @return {function} Interpolation function + */ + static strengthFuncFactory(minStrength = 0.0, maxStrength, min = 0, max = 100, exp = 1.0) { + + let strengthFunc = function (node, i, nodes) { + let x = node.attributes['ref-by-count']; + // linear interpolation + let out = minStrength + (x - min) * (maxStrength - minStrength) / (max - min); + + // return minStrength if out smaller than minStrength + // return maxStrength if out larger than maxStrength + // return out ** + return out <= minStrength ? minStrength + : out >= maxStrength ? maxStrength + : out ** exp; + } + return strengthFunc; + } + + /** + * Preprocess this.data + */ + processData() { + var data = this.data; + var id_map = {}; + + // find input node + this.inputNode = data.nodes.filter(o => o.attributes.is_input_DOI == "True")[0]; + var inputNode = this.inputNode; + + for (let i = 0; i < data.nodes.length; i++) { + id_map[data.nodes[i].id] = i; + data.nodes[i].outgoingLinks = []; + data.nodes[i].outgoingLinkTo = []; + data.nodes[i].incomingLinks = []; + data.nodes[i].incomingLinkFrom = []; + + // delete unused attributes + delete data.nodes[i].color; + delete data.nodes[i].size; + delete data.nodes[i].x; + delete data.nodes[i].y; + + // fix z-coordinate of nodes depending on publication year + // 20 units between input node and years before/after + // 5 units spacing between years + if (data.nodes[i].attributes.nodeyear >= inputNode.attributes.nodeyear) { + data.nodes[i].fz = 5 * (data.nodes[i].attributes.nodeyear - inputNode.attributes.nodeyear + 20); + } else { + data.nodes[i].fz = 5 * (data.nodes[i].attributes.nodeyear - inputNode.attributes.nodeyear - 20); + } + } + + // fix position of input node, color red + inputNode.fx = 0.0; + inputNode.fy = 0.0; + inputNode.fz = 0.0; + inputNode.color = 'red'; + + // cross-link node objects + data.edges.forEach(edge => { + var a = data.nodes[id_map[edge.source]]; + var b = data.nodes[id_map[edge.target]]; + + !a.outgoingLinks && (a.outgoingLinks = []); + a.outgoingLinks.push(edge); + + !a.outgoingLinkTo && (a.outgoingLinkTo = []) + a.outgoingLinkTo.push(b); + + !b.incomingLinks && (b.incomingLinks = []); + b.incomingLinks.push(edge); + + !b.incomingLinkFrom && (b.incomingLinkFrom = []); + b.incomingLinkFrom.push(a); + + delete edge.color; + delete edge.size; + }); + } + + /** + * Move camera to default view point. Triggered by UI. + * @param {String} viewPoint - either "top" or "side" + * @return {ReturnValueDataTypeHere} Brief description of the returning value here. + */ + view(viewPoint) { + if (viewPoint == 'top') { + // indicate view point using bold font + document.getElementById("btnTopView").style.fontWeight = "bold"; + document.getElementById("btnSideView").style.fontWeight = "normal"; + // set camera position, zoom and viewing direction (up-vector) + this.graph.cameraPosition({ x: 0, y: 0, z: 500 }, { x: 0, y: 0, z: 0 }, 500); + this.graph.camera().up.set(0.0, 1.0, 0.0); + this.graph.camera().zoom = 2.0; + this.graph.camera().updateProjectionMatrix(); + } else if (viewPoint == 'side') { + // indicate view point using bold font + document.getElementById("btnSideView").style.fontWeight = "bold"; + document.getElementById("btnTopView").style.fontWeight = "normal"; + // set camera position, zoom and viewing direction (up-vector) + this.graph.cameraPosition({ x: 0, y: -500, z: 0 }, { x: 0, y: 0, z: 0 }, 500); + this.graph.camera().up.set(0.0, 0.0, 1.0); + this.graph.camera().zoom = 1.0; + this.graph.camera().updateProjectionMatrix(); + } + } + + /** + * Toggle on/off relative node size by number of citations. Triggered by UI. + */ + toggleNodeSize() { + if (this.nodeSize) { + // indicate state using bold font + document.getElementById("btnNodeSize").style.fontWeight = "normal"; + // set constant nodeVal + this.graph.nodeVal(1.0); + this.nodeSize = false; + } else { + // indicate state using bold font + document.getElementById("btnNodeSize").style.fontWeight = "bolder"; + // set ref-by-count attribute as nodeVal + this.graph.nodeVal(node => node.attributes['ref-by-count']); + this.nodeSize = true; + } + } + + /** + * Read relative node size from range slider and apply to graph. Triggered by UI. + */ + readNodeSize() { + var size = document.getElementById("rngNodeSize").value; + this.graph.nodeRelSize(size); + } + + + /** + * Read layout options from range sliders and apply to graph. Triggered by UI. + */ + readLayout() { + var radius = document.getElementById("rngLayoutRadius").value; + var outerValue = document.getElementById("rngLayoutOuterValue").value; + + // set constant strength if outerValue == 0 (-> all nodes are moved towards outer shell) + if (outerValue == 0) { + this.graph.d3Force('radialOuter', d3.forceRadial(radius).strength(1.0)); + } else { + this.graph.d3Force('radialOuter', d3.forceRadial(radius).strength(CitationNet.strengthFuncFactory(0.0, 1.0, 0, outerValue))); + } + + this.graph.d3ReheatSimulation(); + } + + /** + * Toggle on/off viewing only edges that connect to input node directly. Triggered by UI. + */ + toggleEdgesOnlyInput() { + if (this.edgesOnlyInput) { + this.graph.graphData({ nodes: this.data.nodes, links: this.data.edges }); + document.getElementById("btnEdgesOnlyInput").style.fontWeight = "normal"; + this.edgesOnlyInput = false; + } else { + // get all edges, filter edges that directly attach to input node + var edges = this.data.edges; + var filteredEdges = edges.filter(edge => edge.source.id == this.inputNode.id || edge.target.id == this.inputNode.id); + // display all nodes but only filtered edges + this.graph.graphData({ nodes: this.data.nodes, links: filteredEdges }); + document.getElementById("btnEdgesOnlyInput").style.fontWeight = "bold"; + this.edgesOnlyInput = true; + } + } + + toggleDistanceFromInputNode() { + let nodes = this.graph.graphData()['nodes']; + if (this.distanceFromInputNode) { + nodes.forEach((node) => { + if (node.attributes.nodeyear >= this.inputNode.attributes.nodeyear) { + node.fz = 5 * (node.attributes.nodeyear - this.inputNode.attributes.nodeyear); + } else { + node.fz = 5 * (node.attributes.nodeyear - this.inputNode.attributes.nodeyear); + } + }); + this.inputNode.fz = 0; + document.getElementById("btnDistanceFromInputNode").style.fontWeight = "normal"; + this.distanceFromInputNode = false; + } else { + nodes.forEach((node) => { + if (node.attributes.nodeyear >= this.inputNode.attributes.nodeyear) { + node.fz = 5 * (node.attributes.nodeyear - this.inputNode.attributes.nodeyear + 20); + } else { + node.fz = 5 * (node.attributes.nodeyear - this.inputNode.attributes.nodeyear - 20); + } + }); + this.inputNode.fz = 0; + document.getElementById("btnDistanceFromInputNode").style.fontWeight = "bold"; + this.distanceFromInputNode = true; + } + } +} \ No newline at end of file diff --git a/src/citationnet/static/lib/select2-bootstrap4.min.css b/src/citationnet/static/lib/select2-bootstrap4.min.css new file mode 100644 index 0000000..73cb4d4 --- /dev/null +++ b/src/citationnet/static/lib/select2-bootstrap4.min.css @@ -0,0 +1 @@ +.select2-container--bootstrap4 .select2-selection--single{height:calc(1.5em + .75rem + 2px)!important}.select2-container--bootstrap4 .select2-selection--single .select2-selection__placeholder{color:#757575;line-height:calc(1.5em + .75rem)}.select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow{position:absolute;top:50%;right:3px;width:20px}.select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b{top:60%;border-color:#343a40 transparent transparent;border-style:solid;border-width:5px 4px 0;width:0;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute}.select2-container--bootstrap4 .select2-selection--single .select2-selection__rendered{line-height:calc(1.5em + .75rem)}.select2-search--dropdown .select2-search__field{border:1px solid #ced4da;border-radius:.25rem}.select2-results__message{color:#6c757d}.select2-container--bootstrap4 .select2-selection--multiple{min-height:calc(1.5em + .75rem + 2px)!important}.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__rendered{-webkit-box-sizing:border-box;box-sizing:border-box;list-style:none;margin:0;padding:0 8px;width:100%}.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice{color:#343a40;border:1px solid #bdc6d0;border-radius:.2rem;padding:0 5px 0 0;cursor:pointer;float:left;margin-top:.3em;margin-right:5px}.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice__remove{color:#bdc6d0;font-weight:700;margin-left:3px;margin-right:1px;padding-right:3px;padding-left:3px;float:left}.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice__remove:hover{color:#343a40}.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__clear{float:none;margin-right:0;position:absolute!important;top:0;right:.7em}.select2-container{display:block}.select2-container :focus{outline:0}.input-group .select2-container--bootstrap4{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.input-group-prepend~.select2-container--bootstrap4 .select2-selection{border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.select2-container--bootstrap4:not(:last-child) .select2-selection{border-top-right-radius:0;border-bottom-right-radius:0}.select2-container--bootstrap4 .select2-selection{background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.select2-container--bootstrap4 .select2-selection{-webkit-transition:none;transition:none}}.select2-container--bootstrap4.select2-container--focus .select2-selection{border-color:#80bdff;-webkit-box-shadow:0 0 0 .2rem rgba(0,123,255,.25);box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.select2-container--bootstrap4.select2-container--focus.select2-container--open .select2-selection{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--bootstrap4.select2-container--disabled.select2-container--focus .select2-selection,.select2-container--bootstrap4.select2-container--disabled .select2-selection{background-color:#e9ecef;cursor:not-allowed;border-color:#ced4da;-webkit-box-shadow:none;box-shadow:none}.select2-container--bootstrap4.select2-container--disabled.select2-container--focus .select2-search__field,.select2-container--bootstrap4.select2-container--disabled .select2-search__field{background-color:transparent}form.was-validated select:invalid~.select2-container--bootstrap4 .select2-selection,select.is-invalid~.select2-container--bootstrap4 .select2-selection{border-color:#dc3545}form.was-validated select:valid~.select2-container--bootstrap4 .select2-selection,select.is-valid~.select2-container--bootstrap4 .select2-selection{border-color:#28a745}.select2-container--bootstrap4 .select2-dropdown{border-color:#ced4da;border-radius:0}.select2-container--bootstrap4 .select2-dropdown.select2-dropdown--below{border-top:none;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.select2-container--bootstrap4 .select2-dropdown.select2-dropdown--above{border-top:1px solid #ced4da;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.select2-container--bootstrap4 .select2-dropdown .select2-results__option[aria-selected=true]{background-color:#e9ecef}.select2-container--bootstrap4 .select2-results__option--highlighted,.select2-container--bootstrap4 .select2-results__option--highlighted.select2-results__option[aria-selected=true]{background-color:#007bff;color:#f8f9fa}.select2-container--bootstrap4 .select2-results__option[role=group]{padding:0}.select2-container--bootstrap4 .select2-results__option[role=group] .select2-results__options--nested .select2-results__option{padding-left:1em}.select2-container--bootstrap4 .select2-results>.select2-results__options{max-height:15em;overflow-y:auto}.select2-container--bootstrap4 .select2-results__group{padding:6px;display:list-item;color:#6c757d}.select2-container--bootstrap4 .select2-selection__clear{width:.9em;height:.9em;line-height:.75em;padding-left:.15em;margin-top:.7em;border-radius:100%;background-color:#c8c8c8;color:#f8f9fa;float:right;margin-right:.3em}.select2-container--bootstrap4 .select2-selection__clear:hover{background-color:#afafaf} \ No newline at end of file diff --git a/src/citationnet/static/lib/sidebar.css b/src/citationnet/static/lib/sidebar.css new file mode 100644 index 0000000..255204b --- /dev/null +++ b/src/citationnet/static/lib/sidebar.css @@ -0,0 +1,116 @@ +body { + font-family: "Lato", sans-serif; + } + + .sidebar { + height: 100%; + width: 300px; + position: fixed; + z-index: 1; + top: 75px; + left: 0; + background-color: #111; + overflow-x: hidden; + transition: 0.5s; + color: #818181; + /* padding-top: 32px; */ + } + + .sidebar a { + padding: 0px 10px 8px 32px; + text-decoration: none; + font-size: 20px; + color: #818181; + display: block; + transition: 0s; + } + + .sidebar a:hover { + color: #f1f1f1; + } + + .sidebar p { + padding: 0px 0px 0px 16px; + text-decoration: none; + font-size: 25px; + color: #818181; + display: block; + transition: 0.0s; + } + + .sidebar button { + text-decoration: none; + font-size: 20px; + color: #818181; + /* display: block; */ + transition: 0.0s; + background-color: transparent; + border: 0mm; + } + + .sidebar button:hover { + color: #f1f1f1; + } + + .sidebar .usage .body { + padding-left: 32px; + padding-right: 16px; + font-size: 16px; + color: #818181; + } + + .sidebar .usage a { + font-size: 16px; + color: #818181; + display: inline; + padding: 0%; + } + .sidebar .usage a:hover { + color: #f1f1f1; + } + + .sidebar .usage p:hover { + color: #f1f1f1; + } + + .sidebar .slider { + width: 210px; + } + + .sidebar .closebtn { + position: absolute; + top: 0; + right: 25px; + font-size: 36px; + margin-left: 50px; + } + + .openbtn { + font-size: 20px; + cursor: pointer; + background-color: #111; + color: white; + padding: 10px 15px; + border: none; + z-index: 5000; + } + + .openbtn:hover { + background-color: #444; + } + + #main { + position: relative; + top: 0; + margin-left: 300px; + width: fit-content; + transition: margin-left .5s; + padding: 16px; + background-color: transparent; + } + + /* On smaller screens, where height is less than 450px, change the style of the sidenav (less padding and a smaller font size) */ + @media screen and (max-height: 450px) { + .sidebar {padding-top: 15px;} + .sidebar a {font-size: 18px;} + } \ No newline at end of file diff --git a/src/citationnet/static/lib/sidebar.js b/src/citationnet/static/lib/sidebar.js new file mode 100644 index 0000000..69a0528 --- /dev/null +++ b/src/citationnet/static/lib/sidebar.js @@ -0,0 +1,19 @@ +/* Set the width of the sidebar to 250px and the left margin of the page content to 250px */ +function openNav() { + document.getElementById("sidebar").style.width = "300px"; + document.getElementById("main").style.marginLeft = "300px"; + // document.getElementById("3d-graph").style.marginLeft = "250px"; + adaptWindowSize(); +} + +/* Set the width of the sidebar to 0 and the left margin of the page content to 0 */ +function closeNav() { + document.getElementById("sidebar").style.width = "0"; + document.getElementById("main").style.marginLeft = "0"; + // document.getElementById("3d-graph").style.marginLeft = "0"; + adaptWindowSize(); +} + +function toggleNav() { + document.getElementById("sidebar").style.width == "300px" ? closeNav() : openNav(); +} \ No newline at end of file diff --git a/src/citationnet/templates/visDynamic.html b/src/citationnet/templates/visDynamic.html new file mode 100644 index 0000000..c771f34 --- /dev/null +++ b/src/citationnet/templates/visDynamic.html @@ -0,0 +1,84 @@ +{% extends 'base.html' %} +{% load static %} +{% block content %} + + + + + +
+
+ +
+ +
+ + + + + + + + +{% endblock %} \ No newline at end of file From af1268858d3426f2824dbd24e313b0f08ba43a9f Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Tue, 15 Mar 2022 17:51:44 +0100 Subject: [PATCH 02/23] wip fix template install, todo: clean template syntax --- setup.cfg | 5 + src/citationnet/__init__.py | 19 +- .../static/css/bootstrap.4.3.1.min.css | 7 + .../static/css/bootstrap.min.css.map | 1 + .../static/css/jquery-ui.1.12.1.css | 1311 +++++++++++++++++ .../static/css/select2-bootstrap4.min.css | 1 + .../static/css/select2.4.0.13.min.css | 1 + .../static/css/select2.4.1.0.min.css | 1 + src/citationnet/static/images/favicon.ico | Bin 0 -> 318 bytes src/citationnet/static/images/gmpg_logo.png | Bin 0 -> 148695 bytes src/citationnet/static/images/mpg_logo.png | Bin 0 -> 32754 bytes .../static/js/bootstrap.4.3.1.min.js | 7 + .../static/js/bootstrap.min.js.map | 1 + .../static/js/jquery-3.3.1.slim.min.js | 2 + .../static/js/jquery-ui.1.12.1.min.js | 13 + src/citationnet/static/js/jquery.3.5.1.min.js | 2 + .../static/js/popper.1.14.7.min.js | 5 + src/citationnet/static/js/popper.min.js.map | 1 + .../static/js/select2.4.0.13.min.js | 2 + .../static/js/select2.4.1.0.min.js | 2 + .../static/js/vega-embed.min.js.map | 1 + .../static/js/vega-embed@6.12.2.js | 27 + .../static/js/vega-lite.min.js.map | 1 + src/citationnet/static/js/vega-lite@4.17.0.js | 2 + src/citationnet/static/js/vega.min.js.map | 1 + src/citationnet/static/js/vega@5.17.0.js | 2 + src/citationnet/templates/base.html | 17 + src/citationnet/templates/visDynamic.html | 3 +- 28 files changed, 1425 insertions(+), 10 deletions(-) create mode 100644 src/citationnet/static/css/bootstrap.4.3.1.min.css create mode 100644 src/citationnet/static/css/bootstrap.min.css.map create mode 100644 src/citationnet/static/css/jquery-ui.1.12.1.css create mode 100644 src/citationnet/static/css/select2-bootstrap4.min.css create mode 100644 src/citationnet/static/css/select2.4.0.13.min.css create mode 100644 src/citationnet/static/css/select2.4.1.0.min.css create mode 100644 src/citationnet/static/images/favicon.ico create mode 100644 src/citationnet/static/images/gmpg_logo.png create mode 100644 src/citationnet/static/images/mpg_logo.png create mode 100644 src/citationnet/static/js/bootstrap.4.3.1.min.js create mode 100644 src/citationnet/static/js/bootstrap.min.js.map create mode 100644 src/citationnet/static/js/jquery-3.3.1.slim.min.js create mode 100644 src/citationnet/static/js/jquery-ui.1.12.1.min.js create mode 100644 src/citationnet/static/js/jquery.3.5.1.min.js create mode 100644 src/citationnet/static/js/popper.1.14.7.min.js create mode 100644 src/citationnet/static/js/popper.min.js.map create mode 100644 src/citationnet/static/js/select2.4.0.13.min.js create mode 100644 src/citationnet/static/js/select2.4.1.0.min.js create mode 100644 src/citationnet/static/js/vega-embed.min.js.map create mode 100644 src/citationnet/static/js/vega-embed@6.12.2.js create mode 100644 src/citationnet/static/js/vega-lite.min.js.map create mode 100644 src/citationnet/static/js/vega-lite@4.17.0.js create mode 100644 src/citationnet/static/js/vega.min.js.map create mode 100644 src/citationnet/static/js/vega@5.17.0.js create mode 100644 src/citationnet/templates/base.html diff --git a/setup.cfg b/setup.cfg index 74ab7e0..abe68bb 100644 --- a/setup.cfg +++ b/setup.cfg @@ -32,3 +32,8 @@ dev = [options.packages.find] where = src + +[options.package_data] +citationnet = + templates/* + static/* diff --git a/src/citationnet/__init__.py b/src/citationnet/__init__.py index 3381cd0..dfa0ee5 100644 --- a/src/citationnet/__init__.py +++ b/src/citationnet/__init__.py @@ -1,15 +1,20 @@ import os from flask import Flask, render_template +mainpath = os.path.dirname(os.path.abspath(__file__)) def create_app(test_config=None): # create and configure the app - app = Flask(__name__, instance_relative_config=True) - app.config.from_mapping( - SECRET_KEY='dev', - DATABASE=os.path.join(app.instance_path, 'citationnet.sqlite'), + app = Flask( + __name__, + instance_relative_config=True, + template_folder=f'{mainpath}/templates' ) + # app.config.from_mapping( + # SECRET_KEY='dev', + # DATABASE=os.path.join(app.instance_path, 'citationnet.sqlite'), + # ) if test_config is None: # load the instance config, if it exists, when not testing @@ -25,14 +30,12 @@ def create_app(test_config=None): pass # a simple page that says hello - @app.route('/hello') + @app.route('/') def hello(): - return 'Hello, World!' + return 'Startpage!' @app.route('/citationnet/') @app.route('/citationnet/') def citnet(name=None): return render_template('visDynamic.html', name=name) - - return app diff --git a/src/citationnet/static/css/bootstrap.4.3.1.min.css b/src/citationnet/static/css/bootstrap.4.3.1.min.css new file mode 100644 index 0000000..92e3fe8 --- /dev/null +++ b/src/citationnet/static/css/bootstrap.4.3.1.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:0s .6s opacity}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/src/citationnet/static/css/bootstrap.min.css.map b/src/citationnet/static/css/bootstrap.min.css.map new file mode 100644 index 0000000..1e9cb78 --- /dev/null +++ b/src/citationnet/static/css/bootstrap.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","../../scss/vendor/_rfs.scss","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/_table-row.scss","../../scss/_forms.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_forms.scss","../../scss/mixins/_gradients.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/mixins/_nav-divider.scss","../../scss/_button-group.scss","../../scss/_input-group.scss","../../scss/_custom-forms.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/mixins/_badge.scss","../../scss/_jumbotron.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_media.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/utilities/_align.scss","../../scss/mixins/_background-variant.scss","../../scss/utilities/_background.scss","../../scss/utilities/_borders.scss","../../scss/utilities/_display.scss","../../scss/utilities/_embed.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_float.scss","../../scss/utilities/_overflow.scss","../../scss/utilities/_position.scss","../../scss/utilities/_screenreaders.scss","../../scss/mixins/_screen-reader.scss","../../scss/utilities/_shadows.scss","../../scss/utilities/_sizing.scss","../../scss/utilities/_stretched-link.scss","../../scss/utilities/_spacing.scss","../../scss/utilities/_text.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_text-hide.scss","../../scss/utilities/_visibility.scss","../../scss/_print.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"utilities\";\n@import \"print\";\n",":root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n\n @include hover-focus {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus {\n outline: 0;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-blacklist\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-break: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.col-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n -ms-flex-order: -1;\n order: -1;\n}\n\n.order-last {\n -ms-flex-order: 13;\n order: 13;\n}\n\n.order-0 {\n -ms-flex-order: 0;\n order: 0;\n}\n\n.order-1 {\n -ms-flex-order: 1;\n order: 1;\n}\n\n.order-2 {\n -ms-flex-order: 2;\n order: 2;\n}\n\n.order-3 {\n -ms-flex-order: 3;\n order: 3;\n}\n\n.order-4 {\n -ms-flex-order: 4;\n order: 4;\n}\n\n.order-5 {\n -ms-flex-order: 5;\n order: 5;\n}\n\n.order-6 {\n -ms-flex-order: 6;\n order: 6;\n}\n\n.order-7 {\n -ms-flex-order: 7;\n order: 7;\n}\n\n.order-8 {\n -ms-flex-order: 8;\n order: 8;\n}\n\n.order-9 {\n -ms-flex-order: 9;\n order: 9;\n}\n\n.order-10 {\n -ms-flex-order: 10;\n order: 10;\n}\n\n.order-11 {\n -ms-flex-order: 11;\n order: 11;\n}\n\n.order-12 {\n -ms-flex-order: 12;\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-sm-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-sm-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-sm-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-sm-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-sm-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-sm-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-sm-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-sm-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-sm-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-sm-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-sm-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-sm-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-sm-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-sm-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-sm-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-md-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-md-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-md-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-md-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-md-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-md-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-md-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-md-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-md-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-md-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-md-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-md-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-md-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-md-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-md-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-lg-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-lg-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-lg-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-lg-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-lg-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-lg-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-lg-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-lg-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-lg-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-lg-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-lg-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-lg-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-lg-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-lg-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-lg-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-xl-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-xl-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-xl-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-xl-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-xl-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-xl-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-xl-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-xl-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-xl-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-xl-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-xl-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-xl-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-xl-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-xl-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-xl-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n color: #212529;\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #343a40;\n border-color: #454d55;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::-webkit-input-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n margin-bottom: 0;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n height: auto;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: -ms-inline-flexbox;\n display: inline-flex;\n -ms-flex-align: center;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #28a745;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: center right calc(0.375em + 0.1875rem);\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-control:valid ~ .valid-feedback,\n.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback,\n.form-control.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n border-color: #28a745;\n padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-select:valid ~ .valid-feedback,\n.was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback,\n.custom-select.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control-file:valid ~ .valid-feedback,\n.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback,\n.form-control-file.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .valid-feedback,\n.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback,\n.custom-control-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n border-color: #34ce57;\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .valid-feedback,\n.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback,\n.custom-file-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\");\n background-repeat: no-repeat;\n background-position: center right calc(0.375em + 0.1875rem);\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control:invalid ~ .invalid-feedback,\n.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,\n.form-control.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n border-color: #dc3545;\n padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-select:invalid ~ .invalid-feedback,\n.was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback,\n.custom-select.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control-file:invalid ~ .invalid-feedback,\n.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback,\n.form-control-file.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .invalid-feedback,\n.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback,\n.custom-control-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n border-color: #e4606d;\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .invalid-feedback,\n.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback,\n.custom-file-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: -ms-flexbox;\n display: flex;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n -ms-flex-align: center;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n color: #212529;\n text-align: center;\n vertical-align: middle;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover {\n color: #212529;\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n text-decoration: none;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 768px) {\n .dropdown-menu-md-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 992px) {\n .dropdown-menu-lg-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 1200px) {\n .dropdown-menu-xl-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-right {\n right: 0;\n left: auto;\n }\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: -ms-inline-flexbox;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-align: start;\n align-items: flex-start;\n -ms-flex-pack: center;\n justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: stretch;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n width: 1%;\n margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: -ms-flexbox;\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n display: -ms-inline-flexbox;\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n z-index: -1;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n border-color: #b3d7ff;\n}\n\n.custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n vertical-align: top;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n background-color: #fff;\n border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background: no-repeat 50% / 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n left: -2.25rem;\n width: 1.75rem;\n pointer-events: all;\n border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n top: calc(0.25rem + 2px);\n left: calc(-2.25rem + 2px);\n width: calc(1rem - 4px);\n height: calc(1rem - 4px);\n background-color: #adb5bd;\n border-radius: 0.5rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-switch .custom-control-label::after {\n transition: none;\n }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n background-color: #fff;\n -webkit-transform: translateX(0.75rem);\n transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n display: none;\n}\n\n.custom-select-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n}\n\n.custom-select-lg {\n height: calc(1.5em + 1rem + 2px);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin: 0;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input:disabled ~ .custom-file-label {\n background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: calc(1.5em + 0.75rem);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: inherit;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n height: calc(1rem + 0.4rem);\n padding: 0;\n background-color: transparent;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -webkit-appearance: none;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -moz-appearance: none;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-moz-range-thumb {\n transition: none;\n }\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: 0;\n margin-right: 0.2rem;\n margin-left: 0.2rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-ms-thumb {\n transition: none;\n }\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-control-label::before,\n .custom-file-label,\n .custom-select {\n transition: none;\n }\n}\n\n.nav {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified .nav-item {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: justify;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: justify;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n -ms-flex-preferred-size: 100%;\n flex-basis: 100%;\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n border-top: 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n}\n\n.card-img {\n width: 100%;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img-top {\n width: 100%;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img-bottom {\n width: 100%;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n display: -ms-flexbox;\n display: flex;\n -ms-flex: 1 0 0%;\n flex: 1 0 0%;\n -ms-flex-direction: column;\n flex-direction: column;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n }\n .card-group > .card {\n -ms-flex: 1 0 0%;\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n -webkit-column-count: 3;\n -moz-column-count: 3;\n column-count: 3;\n -webkit-column-gap: 1.25rem;\n -moz-column-gap: 1.25rem;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion > .card {\n overflow: hidden;\n}\n\n.accordion > .card:not(:first-of-type) .card-header:first-child {\n border-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type):not(:last-of-type) {\n border-bottom: 0;\n border-radius: 0;\n}\n\n.accordion > .card:first-of-type {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion > .card:last-of-type {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.accordion > .card .card-header {\n margin-bottom: -1px;\n}\n\n.breadcrumb {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n display: inline-block;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: -ms-flexbox;\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 2;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 1;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .badge {\n transition: none;\n }\n}\n\na.badge:hover, a.badge:focus {\n text-decoration: none;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n color: #fff;\n background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n color: #fff;\n background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n color: #fff;\n background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n color: #fff;\n background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n color: #212529;\n background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n color: #fff;\n background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n color: #212529;\n background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n color: #fff;\n background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: -ms-flexbox;\n display: flex;\n height: 1rem;\n overflow: hidden;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-pack: center;\n justify-content: center;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n -webkit-animation: progress-bar-stripes 1s linear infinite;\n animation: progress-bar-stripes 1s linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n -webkit-animation: none;\n animation: none;\n }\n}\n\n.media {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: start;\n align-items: flex-start;\n}\n\n.media-body {\n -ms-flex: 1;\n flex: 1;\n}\n\n.list-group {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-horizontal {\n -ms-flex-direction: row;\n flex-direction: row;\n}\n\n.list-group-horizontal .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n}\n\n.list-group-horizontal .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n\n.list-group-horizontal .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-sm .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-sm .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-md .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-md .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-lg .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-lg .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-xl .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-xl .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n.list-group-flush .list-group-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n\n.list-group-flush .list-group-item:last-child {\n margin-bottom: -1px;\n}\n\n.list-group-flush:first-child .list-group-item:first-child {\n border-top: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n margin-bottom: 0;\n border-bottom: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover {\n color: #000;\n text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\na.close.disabled {\n pointer-events: none;\n}\n\n.toast {\n max-width: 350px;\n overflow: hidden;\n font-size: 0.875rem;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n -webkit-backdrop-filter: blur(10px);\n backdrop-filter: blur(10px);\n opacity: 0;\n border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n opacity: 1;\n}\n\n.toast.show {\n display: block;\n opacity: 1;\n}\n\n.toast.hide {\n display: none;\n}\n\n.toast-header {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n padding: 0.25rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.toast-body {\n padding: 0.75rem;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: -webkit-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n -webkit-transform: translate(0, -50px);\n transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n -webkit-transform: none;\n transform: none;\n}\n\n.modal-dialog-scrollable {\n display: -ms-flexbox;\n display: flex;\n max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 1rem);\n overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n -ms-flex-negative: 0;\n flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n display: block;\n height: calc(100vh - 1rem);\n content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-pack: center;\n justify-content: center;\n height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n content: none;\n}\n\n.modal-content {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: start;\n align-items: flex-start;\n -ms-flex-pack: justify;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: 0.3rem;\n border-top-right-radius: 0.3rem;\n}\n\n.modal-header .close {\n padding: 1rem 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: end;\n justify-content: flex-end;\n padding: 1rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.modal-footer > :not(:first-child) {\n margin-left: .25rem;\n}\n\n.modal-footer > :not(:last-child) {\n margin-right: .25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-scrollable {\n max-height: calc(100% - 3.5rem);\n }\n .modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 3.5rem);\n }\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n .modal-dialog-centered::before {\n height: calc(100vh - 3.5rem);\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n max-width: 800px;\n }\n}\n\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n bottom: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n left: calc((0.5rem + 1px) * -1);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n top: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n right: calc((0.5rem + 1px) * -1);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n -ms-touch-action: pan-y;\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n transition: -webkit-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n -webkit-transform: translateX(100%);\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n -webkit-transform: translateX(-100%);\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n -webkit-transform: none;\n transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n transition: 0s 0.6s opacity;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-right {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: no-repeat 50% / 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: center;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n box-sizing: content-box;\n -ms-flex: 0 1 auto;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: .5;\n transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators li {\n transition: none;\n }\n}\n\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n@-webkit-keyframes spinner-border {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes spinner-border {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n -webkit-animation: spinner-border .75s linear infinite;\n animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n }\n}\n\n@keyframes spinner-grow {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n -webkit-animation: spinner-grow .75s linear infinite;\n animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded-sm {\n border-radius: 0.2rem !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n}\n\n.d-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-md-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-print-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n}\n\n.flex-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n}\n\n.justify-content-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n}\n\n.align-items-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n}\n\n.align-items-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n}\n\n.align-items-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n}\n\n.align-items-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n}\n\n.align-content-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n}\n\n.align-content-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n}\n\n.align-content-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n}\n\n.align-content-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n}\n\n.align-content-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n}\n\n.align-self-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n}\n\n.align-self-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n}\n\n.align-self-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n}\n\n.align-self-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n}\n\n.align-self-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-sm-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-sm-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-sm-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-sm-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-sm-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-sm-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-sm-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-sm-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-md-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-md-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-md-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-md-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-md-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-md-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-md-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-md-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-md-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-md-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-md-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-md-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-md-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-md-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-md-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-md-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-lg-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-lg-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-lg-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-lg-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-lg-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-lg-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-lg-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-lg-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-xl-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-xl-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-xl-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-xl-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-xl-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-xl-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-xl-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-xl-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: -webkit-sticky !important;\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports ((position: -webkit-sticky) or (position: sticky)) {\n .sticky-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n pointer-events: auto;\n content: \"\";\n background-color: rgba(0, 0, 0, 0);\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n font-weight: lighter !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n font-weight: bolder !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0056b3 !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #494f54 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #19692c !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #0f6674 !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #ba8b00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #a71d2a !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #cbd3da !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #121416 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-break {\n word-break: break-word !important;\n overflow-wrap: break-word !important;\n}\n\n.text-reset {\n color: inherit !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n .table-dark {\n color: inherit;\n }\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-break: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n color: #212529;\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #343a40;\n border-color: #454d55;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n margin-bottom: 0;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n height: auto;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #28a745;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: center right calc(0.375em + 0.1875rem);\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-control:valid ~ .valid-feedback,\n.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback,\n.form-control.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n border-color: #28a745;\n padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-select:valid ~ .valid-feedback,\n.was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback,\n.custom-select.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control-file:valid ~ .valid-feedback,\n.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback,\n.form-control-file.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .valid-feedback,\n.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback,\n.custom-control-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n border-color: #34ce57;\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .valid-feedback,\n.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback,\n.custom-file-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\");\n background-repeat: no-repeat;\n background-position: center right calc(0.375em + 0.1875rem);\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control:invalid ~ .invalid-feedback,\n.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,\n.form-control.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n border-color: #dc3545;\n padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-select:invalid ~ .invalid-feedback,\n.was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback,\n.custom-select.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control-file:invalid ~ .invalid-feedback,\n.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback,\n.form-control-file.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .invalid-feedback,\n.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback,\n.custom-control-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n border-color: #e4606d;\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .invalid-feedback,\n.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback,\n.custom-file-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n align-items: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n color: #212529;\n text-align: center;\n vertical-align: middle;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover {\n color: #212529;\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n text-decoration: none;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 768px) {\n .dropdown-menu-md-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 992px) {\n .dropdown-menu-lg-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 1200px) {\n .dropdown-menu-xl-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-right {\n right: 0;\n left: auto;\n }\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: flex;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n z-index: -1;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n border-color: #b3d7ff;\n}\n\n.custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n vertical-align: top;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n background-color: #fff;\n border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background: no-repeat 50% / 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n left: -2.25rem;\n width: 1.75rem;\n pointer-events: all;\n border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n top: calc(0.25rem + 2px);\n left: calc(-2.25rem + 2px);\n width: calc(1rem - 4px);\n height: calc(1rem - 4px);\n background-color: #adb5bd;\n border-radius: 0.5rem;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-switch .custom-control-label::after {\n transition: none;\n }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n background-color: #fff;\n transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n display: none;\n}\n\n.custom-select-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n}\n\n.custom-select-lg {\n height: calc(1.5em + 1rem + 2px);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin: 0;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input:disabled ~ .custom-file-label {\n background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: calc(1.5em + 0.75rem);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: inherit;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n height: calc(1rem + 0.4rem);\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-moz-range-thumb {\n transition: none;\n }\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: 0;\n margin-right: 0.2rem;\n margin-left: 0.2rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-ms-thumb {\n transition: none;\n }\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-control-label::before,\n .custom-file-label,\n .custom-select {\n transition: none;\n }\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n flex-flow: row nowrap;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n border-top: 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n}\n\n.card-img {\n width: 100%;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img-top {\n width: 100%;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img-bottom {\n width: 100%;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck {\n display: flex;\n flex-direction: column;\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n display: flex;\n flex: 1 0 0%;\n flex-direction: column;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group {\n display: flex;\n flex-direction: column;\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n column-count: 3;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion > .card {\n overflow: hidden;\n}\n\n.accordion > .card:not(:first-of-type) .card-header:first-child {\n border-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type):not(:last-of-type) {\n border-bottom: 0;\n border-radius: 0;\n}\n\n.accordion > .card:first-of-type {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion > .card:last-of-type {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.accordion > .card .card-header {\n margin-bottom: -1px;\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n display: inline-block;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 2;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 1;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .badge {\n transition: none;\n }\n}\n\na.badge:hover, a.badge:focus {\n text-decoration: none;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n color: #fff;\n background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n color: #fff;\n background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n color: #fff;\n background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n color: #fff;\n background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n color: #212529;\n background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n color: #fff;\n background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n color: #212529;\n background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n color: #fff;\n background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n animation: progress-bar-stripes 1s linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n\n.list-group-horizontal .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n}\n\n.list-group-horizontal .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n\n.list-group-horizontal .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-sm .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-md .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-lg .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-xl .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n.list-group-flush .list-group-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n\n.list-group-flush .list-group-item:last-child {\n margin-bottom: -1px;\n}\n\n.list-group-flush:first-child .list-group-item:first-child {\n border-top: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n margin-bottom: 0;\n border-bottom: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover {\n color: #000;\n text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n appearance: none;\n}\n\na.close.disabled {\n pointer-events: none;\n}\n\n.toast {\n max-width: 350px;\n overflow: hidden;\n font-size: 0.875rem;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n backdrop-filter: blur(10px);\n opacity: 0;\n border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n opacity: 1;\n}\n\n.toast.show {\n display: block;\n opacity: 1;\n}\n\n.toast.hide {\n display: none;\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: 0.25rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.toast-body {\n padding: 0.75rem;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n transform: none;\n}\n\n.modal-dialog-scrollable {\n display: flex;\n max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 1rem);\n overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n display: block;\n height: calc(100vh - 1rem);\n content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n flex-direction: column;\n justify-content: center;\n height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n content: none;\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: 0.3rem;\n border-top-right-radius: 0.3rem;\n}\n\n.modal-header .close {\n padding: 1rem 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding: 1rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.modal-footer > :not(:first-child) {\n margin-left: .25rem;\n}\n\n.modal-footer > :not(:last-child) {\n margin-right: .25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-scrollable {\n max-height: calc(100% - 3.5rem);\n }\n .modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 3.5rem);\n }\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n .modal-dialog-centered::before {\n height: calc(100vh - 3.5rem);\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n max-width: 800px;\n }\n}\n\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n bottom: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n left: calc((0.5rem + 1px) * -1);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n top: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n right: calc((0.5rem + 1px) * -1);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n transition: 0s 0.6s opacity;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-right {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: no-repeat 50% / 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: .5;\n transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators li {\n transition: none;\n }\n}\n\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg);\n }\n}\n\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded-sm {\n border-radius: 0.2rem !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports (position: sticky) {\n .sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n pointer-events: auto;\n content: \"\";\n background-color: rgba(0, 0, 0, 0);\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n font-weight: lighter !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n font-weight: bolder !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0056b3 !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #494f54 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #19692c !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #0f6674 !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #ba8b00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #a71d2a !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #cbd3da !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #121416 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-break {\n word-break: break-word !important;\n overflow-wrap: break-word !important;\n}\n\n.text-reset {\n color: inherit !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n .table-dark {\n color: inherit;\n }\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover {\n &:hover { @content; }\n}\n\n@mixin hover-focus {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n","// stylelint-disable declaration-no-important, selector-list-comma-newline-after\n\n//\n// Headings\n//\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1, .h1 { @include font-size($h1-font-size); }\nh2, .h2 { @include font-size($h2-font-size); }\nh3, .h3 { @include font-size($h3-font-size); }\nh4, .h4 { @include font-size($h4-font-size); }\nh5, .h5 { @include font-size($h5-font-size); }\nh6, .h6 { @include font-size($h6-font-size); }\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n.display-1 {\n @include font-size($display1-size);\n font-weight: $display1-weight;\n line-height: $display-line-height;\n}\n.display-2 {\n @include font-size($display2-size);\n font-weight: $display2-weight;\n line-height: $display-line-height;\n}\n.display-3 {\n @include font-size($display3-size);\n font-weight: $display3-weight;\n line-height: $display-line-height;\n}\n.display-4 {\n @include font-size($display4-size);\n font-weight: $display4-weight;\n line-height: $display-line-height;\n}\n\n\n//\n// Horizontal rules\n//\n\nhr {\n margin-top: $hr-margin-y;\n margin-bottom: $hr-margin-y;\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n}\n\n\n//\n// Emphasis\n//\n\nsmall,\n.small {\n @include font-size($small-font-size);\n font-weight: $font-weight-normal;\n}\n\nmark,\n.mark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled;\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size(90%);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $spacer;\n @include font-size($blockquote-font-size);\n}\n\n.blockquote-footer {\n display: block;\n @include font-size($blockquote-small-font-size);\n color: $blockquote-small-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all ``s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid;\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid;\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer / 2;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url($file-1x);\n\n // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n // but doesn't convert dppx=>dpi.\n // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n // Compatibility info: https://caniuse.com/#feat=css-media-resolution\n @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n only screen and (min-resolution: 2dppx) { // Standardized\n background-image: url($file-2x);\n background-size: $width-1x $height-1x;\n }\n @include deprecate(\"`img-retina()`\", \"v4.3.0\", \"v5\");\n}\n","// stylelint-disable property-blacklist\n// Single side border-radius\n\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: $radius;\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-top-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n }\n}\n\n@mixin border-top-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-right-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-left-radius($radius) {\n @if $enable-rounded {\n border-bottom-left-radius: $radius;\n }\n}\n","// Inline code\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-break: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n @include box-shadow($kbd-box-shadow);\n\n kbd {\n padding: 0;\n @include font-size(100%);\n font-weight: $nested-kbd-font-weight;\n @include box-shadow(none);\n }\n}\n\n// Blocks of code\npre {\n display: block;\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: $pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n}\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but with 100% width for\n// fluid, full width layouts.\n\n@if $enable-grid-classes {\n .container-fluid {\n @include make-container();\n }\n}\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col#{$infix}-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n width: 100%;\n margin-bottom: $spacer;\n color: $table-color;\n background-color: $table-bg; // Reset for nesting within parents with `background-color`.\n\n th,\n td {\n padding: $table-cell-padding;\n vertical-align: top;\n border-top: $table-border-width solid $table-border-color;\n }\n\n thead th {\n vertical-align: bottom;\n border-bottom: (2 * $table-border-width) solid $table-border-color;\n }\n\n tbody + tbody {\n border-top: (2 * $table-border-width) solid $table-border-color;\n }\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n th,\n td {\n padding: $table-cell-padding-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n\n.table-bordered {\n border: $table-border-width solid $table-border-color;\n\n th,\n td {\n border: $table-border-width solid $table-border-color;\n }\n\n thead {\n th,\n td {\n border-bottom-width: 2 * $table-border-width;\n }\n }\n}\n\n.table-borderless {\n th,\n td,\n thead th,\n tbody + tbody {\n border: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-accent-bg;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n tbody tr {\n @include hover {\n color: $table-hover-color;\n background-color: $table-hover-bg;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n@each $color, $value in $theme-colors {\n @include table-row-variant($color, theme-color-level($color, $table-bg-level), theme-color-level($color, $table-border-level));\n}\n\n@include table-row-variant(active, $table-active-bg);\n\n\n// Dark styles\n//\n// Same table markup, but inverted color scheme: dark background and light text.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.table {\n .thead-dark {\n th {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n border-color: $table-dark-border-color;\n }\n }\n\n .thead-light {\n th {\n color: $table-head-color;\n background-color: $table-head-bg;\n border-color: $table-border-color;\n }\n }\n}\n\n.table-dark {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n\n th,\n td,\n thead th {\n border-color: $table-dark-border-color;\n }\n\n &.table-bordered {\n border: 0;\n }\n\n &.table-striped {\n tbody tr:nth-of-type(odd) {\n background-color: $table-dark-accent-bg;\n }\n }\n\n &.table-hover {\n tbody tr {\n @include hover {\n color: $table-dark-hover-color;\n background-color: $table-dark-hover-bg;\n }\n }\n }\n}\n\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n.table-responsive {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n\n // Prevent double border on horizontal scroll due to use of `display: block;`\n > .table-bordered {\n border: 0;\n }\n }\n }\n }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background, $border: null) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table-#{$state} {\n &,\n > th,\n > td {\n background-color: $background;\n }\n\n @if $border != null {\n th,\n td,\n thead th,\n tbody + tbody {\n border-color: $border;\n }\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover {\n $hover-background: darken($background, 5%);\n\n .table-#{$state} {\n @include hover {\n background-color: $hover-background;\n\n > td,\n > th {\n background-color: $hover-background;\n }\n }\n }\n }\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Textual form controls\n//\n\n.form-control {\n display: block;\n width: 100%;\n height: $input-height;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n\n // Note: This has no effect on `s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n // Unstyle the caret on ` receives focus\n // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to\n // match the appearance of the native widget.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n}\n\n// Make file inputs better match text inputs by forcing them to new lines.\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n\n//\n// Labels\n//\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: calc(#{$input-padding-y} + #{$input-border-width});\n padding-bottom: calc(#{$input-padding-y} + #{$input-border-width});\n margin-bottom: 0; // Override the `
`),a&&(n+=``);const l=Object.keys(s);if(l.length>0){n+="";for(const e of l){let o=s[e];void 0!==o&&(er(o)&&(o=ir(o,r)),n+=``)}n+="
${t(e)}:${t(o)}
"}return n||"{}"}return t(e)}function ir(e,t){return JSON.stringify(e,function(e){const t=[];return function(r,n){if("object"!=typeof n||null===n)return n;const o=t.indexOf(this)+1;return t.length=o,t.length>e?"[Object]":t.indexOf(n)>=0?"[Circular]":(t.push(n),n)}}(t))}class ar{constructor(e){this.options=Object.assign(Object.assign({},nr),e);const t=this.options.id;if(this.call=this.tooltipHandler.bind(this),!this.options.disableDefaultStyle&&!document.getElementById(this.options.styleId)){const e=document.createElement("style");e.setAttribute("id",this.options.styleId),e.innerHTML=function(e){if(!/^[A-Za-z]+[-:.\w]*$/.test(e))throw new Error("Invalid HTML ID");return tr.toString().replace(rr,e)}(t);const r=document.head;r.childNodes.length>0?r.insertBefore(e,r.childNodes[0]):r.appendChild(e)}this.el=document.getElementById(t),this.el||(this.el=document.createElement("div"),this.el.setAttribute("id",t),this.el.classList.add("vg-tooltip"),document.body.appendChild(this.el))}tooltipHandler(e,t,r,n){if(null==n||""===n)return void this.el.classList.remove("visible",this.options.theme+"-theme");this.el.innerHTML=or(n,this.options.sanitize,this.options.maxDepth),this.el.classList.add("visible",this.options.theme+"-theme");const{x:o,y:i}=function(e,t,r,n){let o=e.clientX+r;o+t.width>window.innerWidth&&(o=+e.clientX-r-t.width);let i=e.clientY+n;return i+t.height>window.innerHeight&&(i=+e.clientY-n-t.height),{x:o,y:i}}(t,this.el.getBoundingClientRect(),this.options.offsetX,this.options.offsetY);this.el.setAttribute("style",`top: ${i}px; left: ${o}px`)}}var sr;function lr(e){return e.startsWith("http://")||e.startsWith("https://")||e.startsWith("//")}function cr(e){for(var t=[],r=1;r
',i="
"+r+"",a=window.open("");a.document.write(o+e+i),a.document.title=gr[n]+" JSON Source"}function yr(t,r,n){var o,l,c;return void 0===n&&(n={}),a(this,void 0,void 0,(function(){var a,p,d,u,f,h,v,g;return s(this,(function(s){switch(s.label){case 0:return m=n.loader,a=m&&"load"in m?n.loader:dr.loader(n.loader),e.isString(r)?(f=(u=JSON).parse,[4,a.load(r)]):[3,2];case 1:return d=f.apply(u,[s.sent()]),[3,3];case 2:d=r,s.label=3;case 3:return[4,wr(null!==(o=(p=d).usermeta&&p.usermeta.embedOptions)&&void 0!==o?o:{},a)];case 4:return h=s.sent(),[4,wr(n,a)];case 5:return v=s.sent(),g=i(i({},cr(v,h)),{config:e.mergeConfig(null!==(l=v.config)&&void 0!==l?l:{},null!==(c=h.config)&&void 0!==c?c:{})}),[4,Or(t,p,g,a)];case 6:return[2,s.sent()]}var m}))}))}function wr(t,r){var n;return a(this,void 0,void 0,(function(){var o,a,l,c,p,d,u,f;return s(this,(function(s){switch(s.label){case 0:return e.isString(t.config)?(c=(l=JSON).parse,[4,r.load(t.config)]):[3,2];case 1:return a=c.apply(l,[s.sent()]),[3,3];case 2:a=null!==(n=t.config)&&void 0!==n?n:{},s.label=3;case 3:return o=a,e.isString(t.patch)?(f=(u=JSON).parse,[4,r.load(t.patch)]):[3,5];case 4:return d=f.apply(u,[s.sent()]),[3,6];case 5:d=t.patch,s.label=6;case 6:return p=d,[2,i(i(i({},t),p?{patch:p}:{}),o?{config:o}:{})]}}))}))}function Or(t,r,n,o){var l,c,p,d,u,f;return void 0===n&&(n={}),a(this,void 0,void 0,(function(){function h(){U&&document.removeEventListener("click",U),k.finalize()}var v,g,m,E,b,y,w,O,I,A,N,T,L,$,S,x,C,D,F,P,k,j,z,M,B,G,U,X,V,W,H,q,Y,J,Q,Z,K,ee;return s(this,(function(te){switch(te.label){case 0:if(v=n.theme?e.mergeConfig(Ht[n.theme],null!==(l=n.config)&&void 0!==l?l:{}):n.config,g=e.isBoolean(n.actions)?n.actions:cr({},hr,null!==(c=n.actions)&&void 0!==c?c:{}),m=i(i({},vr),n.i18n),E=null!==(p=n.renderer)&&void 0!==p?p:"canvas",b=null!==(d=n.logLevel)&&void 0!==d?d:dr.Warn,y=null!==(u=n.downloadFileName)&&void 0!==u?u:"visualization",!(w="string"==typeof t?document.querySelector(t):t))throw new Error(t+" does not exist");return!1!==n.defaultStyle&&(O="vega-embed-style",I=function(e){var t,r=e.getRootNode?e.getRootNode():document;return r instanceof ShadowRoot?{root:r,rootContainer:r}:{root:document,rootContainer:null!==(t=document.head)&&void 0!==t?t:document.body}}(w),A=I.root,N=I.rootContainer,A.getElementById(O)||((T=document.createElement("style")).id=O,T.innerText=void 0===n.defaultStyle||!0===n.defaultStyle?'.vega-embed {\n position: relative;\n display: inline-block;\n box-sizing: border-box; }\n .vega-embed.has-actions {\n padding-right: 38px; }\n .vega-embed details:not([open]) > :not(summary) {\n display: none !important; }\n .vega-embed summary {\n list-style: none;\n position: absolute;\n top: 0;\n right: 0;\n padding: 6px;\n z-index: 1000;\n background: white;\n box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1);\n color: #1b1e23;\n border: 1px solid #aaa;\n border-radius: 999px;\n opacity: 0.2;\n transition: opacity 0.4s ease-in;\n outline: none;\n cursor: pointer;\n line-height: 0px; }\n .vega-embed summary::-webkit-details-marker {\n display: none; }\n .vega-embed summary:active {\n box-shadow: #aaa 0px 0px 0px 1px inset; }\n .vega-embed summary svg {\n width: 14px;\n height: 14px; }\n .vega-embed details[open] summary {\n opacity: 0.7; }\n .vega-embed:hover summary,\n .vega-embed:focus summary {\n opacity: 1 !important;\n transition: opacity 0.2s ease; }\n .vega-embed .vega-actions {\n position: absolute;\n z-index: 1001;\n top: 35px;\n right: -9px;\n display: flex;\n flex-direction: column;\n padding-bottom: 8px;\n padding-top: 8px;\n border-radius: 4px;\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.2);\n border: 1px solid #d9d9d9;\n background: white;\n animation-duration: 0.15s;\n animation-name: scale-in;\n animation-timing-function: cubic-bezier(0.2, 0, 0.13, 1.5);\n text-align: left; }\n .vega-embed .vega-actions a {\n padding: 8px 16px;\n font-family: sans-serif;\n font-size: 14px;\n font-weight: 600;\n white-space: nowrap;\n color: #434a56;\n text-decoration: none; }\n .vega-embed .vega-actions a:hover {\n background-color: #f7f7f9;\n color: black; }\n .vega-embed .vega-actions::before, .vega-embed .vega-actions::after {\n content: "";\n display: inline-block;\n position: absolute; }\n .vega-embed .vega-actions::before {\n left: auto;\n right: 14px;\n top: -16px;\n border: 8px solid #0000;\n border-bottom-color: #d9d9d9; }\n .vega-embed .vega-actions::after {\n left: auto;\n right: 15px;\n top: -14px;\n border: 7px solid #0000;\n border-bottom-color: #fff; }\n .vega-embed .chart-wrapper {\n width: 100%;\n height: 100%; }\n\n.vega-embed-wrapper {\n max-width: 100%;\n overflow: scroll;\n padding-right: 14px; }\n\n@keyframes scale-in {\n from {\n opacity: 0;\n transform: scale(0.6); }\n to {\n opacity: 1;\n transform: scale(1); } }\n'.toString():n.defaultStyle,N.appendChild(T))),L=function(e,t){var r;if(e.$schema){var n=ft(e.$schema);t&&t!==n.library&&console.warn("The given visualization spec is written in "+gr[n.library]+", but mode argument sets "+(null!==(r=gr[t])&&void 0!==r?r:t)+".");var o=n.library;return ut.satisfies(mr[o],"^"+n.version.slice(1))||console.warn("The input spec uses "+gr[o]+" "+n.version+", but the current version of "+gr[o]+" is v"+mr[o]+"."),o}return"mark"in e||"encoding"in e||"layer"in e||"hconcat"in e||"vconcat"in e||"facet"in e||"repeat"in e?"vega-lite":"marks"in e||"signals"in e||"scales"in e||"axes"in e?"vega":null!=t?t:"vega"}(r,n.mode),$=Er[L](r,v),"vega-lite"===L&&$.$schema&&(S=ft($.$schema),ut.satisfies(mr.vega,"^"+S.version.slice(1))||console.warn("The compiled spec uses Vega "+S.version+", but current version is v"+mr.vega+".")),w.classList.add("vega-embed"),g&&w.classList.add("has-actions"),w.innerHTML="",x=w,g&&((C=document.createElement("div")).classList.add("chart-wrapper"),w.appendChild(C),x=C),(D=n.patch)&&($=D instanceof Function?D($):R($,D,!0,!1).newDocument),n.formatLocale&&dr.formatLocale(n.formatLocale),n.timeFormatLocale&&dr.timeFormatLocale(n.timeFormatLocale),F=n.ast,P=dr.parse($,"vega-lite"===L?{}:v,{ast:F}),k=new dr.View(P,i({loader:o,logLevel:b,renderer:E},F?{expr:dr.expressionInterpreter}:{})),!1!==n.tooltip&&(j=void 0,re=n.tooltip,j="function"==typeof re?n.tooltip:new ar(!0===n.tooltip?{}:n.tooltip).call,k.tooltip(j)),void 0===(z=n.hover)&&(z="vega"===L),z&&(B=(M="boolean"==typeof z?{}:z).hoverSet,G=M.updateSet,k.hover(B,G)),n&&(null!=n.width&&k.width(n.width),null!=n.height&&k.height(n.height),null!=n.padding&&k.padding(n.padding)),[4,k.initialize(x).runAsync()];case 1:if(te.sent(),!1!==g){if(X=w,!1!==n.defaultStyle&&((V=document.createElement("details")).title=m.CLICK_TO_VIEW_ACTIONS,w.append(V),X=V,(W=document.createElement("summary")).innerHTML='\n\n \n \n \n',V.append(W),U=function(e){V.contains(e.target)||V.removeAttribute("open")},document.addEventListener("click",U)),H=document.createElement("div"),X.append(H),H.classList.add("vega-actions"),!0===g||!1!==g.export)for(q=function(e){if(!0===g||!0===g.export||g.export[e]){var t=m[e.toUpperCase()+"_ACTION"],r=document.createElement("a");r.text=t,r.href="#",r.target="_blank",r.download=y+"."+e,r.addEventListener("mousedown",(function(t){return a(this,void 0,void 0,(function(){var r;return s(this,(function(o){switch(o.label){case 0:return t.preventDefault(),[4,k.toImageURL(e,n.scaleFactor)];case 1:return r=o.sent(),this.href=r,[2]}}))}))})),H.append(r)}},Y=0,J=["svg","png"];Y1&&(e.isString(t[0])&&!lr(t[0])||Ar(t[0])||3===t.length)?yr(t[0],t[1],t[2]):Ir(t[0],t[1])};return Rr.vegaLite=ur,Rr.vl=ur,Rr.container=Ir,Rr.embed=yr,Rr.vega=dr,Rr.default=yr,Rr.version="6.12.2",Rr})); +//# sourceMappingURL=vega-embed.min.js.map diff --git a/src/citationnet/static/js/vega-lite.min.js.map b/src/citationnet/static/js/vega-lite.min.js.map new file mode 100644 index 0000000..46c509b --- /dev/null +++ b/src/citationnet/static/js/vega-lite.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vega-lite.min.js","sources":["../node_modules/array-flat-polyfill/index.mjs","../node_modules/clone/clone.js","../node_modules/fast-json-stable-stringify/index.js","../src/logical.ts","../src/util.ts","../node_modules/fast-deep-equal/index.js","../src/channel.ts","../src/aggregate.ts","../src/bin.ts","../src/expr.ts","../src/title.ts","../src/vega.schema.ts","../src/compile/common.ts","../src/log/message.ts","../src/log/index.ts","../src/datetime.ts","../src/timeunit.ts","../src/predicate.ts","../src/type.ts","../src/scale.ts","../src/mark.ts","../src/compile/mark/encode/valueref.ts","../src/compile/format.ts","../src/sort.ts","../src/spec/facet.ts","../src/channeldef.ts","../src/axis.ts","../src/spec/unit.ts","../src/compositemark/base.ts","../src/encoding.ts","../src/compositemark/common.ts","../src/compositemark/boxplot.ts","../src/compositemark/errorbar.ts","../src/compositemark/errorband.ts","../src/compositemark/index.ts","../src/guide.ts","../src/header.ts","../src/legend.ts","../src/selection.ts","../src/parameter.ts","../src/spec/concat.ts","../src/spec/toplevel.ts","../src/spec/base.ts","../src/config.ts","../src/spec/layer.ts","../src/spec/map.ts","../src/spec/repeat.ts","../src/stack.ts","../src/normalize/pathoverlay.ts","../src/normalize/repeater.ts","../src/normalize/ruleforrangedline.ts","../src/normalize/core.ts","../src/transform.ts","../src/normalize/selectioncompat.ts","../src/normalize/toplevelselection.ts","../src/normalize/index.ts","../src/compile/split.ts","../src/compile/data/index.ts","../src/data.ts","../node_modules/vega-event-selector/build/vega-event-selector.module.js","../src/compile/selection/assemble.ts","../src/compile/data/dataflow.ts","../src/compile/data/timeunit.ts","../src/compile/selection/project.ts","../src/compile/selection/scales.ts","../src/compile/selection/interval.ts","../src/compile/selection/point.ts","../src/compile/mark/encode/conditional.ts","../src/compile/mark/encode/text.ts","../src/compile/mark/encode/tooltip.ts","../src/compile/mark/encode/aria.ts","../src/compile/mark/encode/nonposition.ts","../src/compile/mark/encode/color.ts","../src/compile/mark/encode/zindex.ts","../src/compile/mark/encode/offset.ts","../src/compile/mark/encode/position-point.ts","../src/compile/mark/encode/position-align.ts","../src/compile/mark/encode/position-range.ts","../src/compile/mark/encode/position-rect.ts","../src/compile/mark/encode/base.ts","../src/compile/mark/encode/defined.ts","../src/compile/selection/nearest.ts","../src/compile/selection/inputs.ts","../src/compile/selection/toggle.ts","../src/compile/selection/clear.ts","../src/compile/selection/legends.ts","../src/compile/selection/translate.ts","../src/compile/selection/zoom.ts","../src/compile/selection/index.ts","../node_modules/vega-expression/build/vega-expression.module.js","../src/compile/data/expressions.ts","../src/compile/data/filter.ts","../src/compile/selection/parse.ts","../src/compile/predicate.ts","../src/compile/axis/assemble.ts","../src/compile/axis/config.ts","../src/compile/axis/properties.ts","../src/compile/data/calculate.ts","../src/compile/header/common.ts","../src/compile/header/component.ts","../src/compile/header/assemble.ts","../src/compile/layoutsize/assemble.ts","../src/compile/layoutsize/component.ts","../src/compile/guide.ts","../src/compile/resolve.ts","../src/compile/legend/component.ts","../src/compile/legend/encode.ts","../src/compile/legend/properties.ts","../src/compile/legend/parse.ts","../src/compile/legend/assemble.ts","../src/compile/projection/assemble.ts","../src/projection.ts","../src/compile/projection/component.ts","../src/compile/projection/parse.ts","../src/compile/data/bin.ts","../src/compile/data/aggregate.ts","../src/compile/data/facet.ts","../src/compile/data/formatparse.ts","../src/compile/data/identifier.ts","../src/compile/data/graticule.ts","../src/compile/data/sequence.ts","../src/compile/data/source.ts","../src/compile/data/optimizer.ts","../src/compile/data/optimizers.ts","../src/compile/data/joinaggregate.ts","../src/compile/data/stack.ts","../src/compile/data/window.ts","../src/compile/data/subtree.ts","../src/compile/data/optimize.ts","../src/compile/signal.ts","../src/compile/scale/domain.ts","../src/compile/scale/assemble.ts","../src/compile/scale/component.ts","../src/compile/scale/range.ts","../src/compile/scale/properties.ts","../src/compile/scale/type.ts","../src/compile/scale/parse.ts","../src/compile/model.ts","../src/compile/data/density.ts","../src/compile/data/filterinvalid.ts","../src/compile/data/flatten.ts","../src/compile/data/fold.ts","../src/compile/data/geojson.ts","../src/compile/data/geopoint.ts","../src/compile/data/impute.ts","../src/compile/data/loess.ts","../src/compile/data/lookup.ts","../src/compile/data/quantile.ts","../src/compile/data/regression.ts","../src/compile/data/pivot.ts","../src/compile/data/sample.ts","../src/compile/data/assemble.ts","../src/compile/header/parse.ts","../src/compile/layoutsize/parse.ts","../src/compile/facet.ts","../src/compile/data/parse.ts","../src/compile/data/joinaggregatefacet.ts","../src/compile/concat.ts","../src/compile/axis/component.ts","../src/compile/axis/parse.ts","../src/compile/axis/encode.ts","../src/compile/mark/init.ts","../src/compile/mark/point.ts","../src/compile/mark/text.ts","../src/compile/mark/tick.ts","../src/compile/mark/mark.ts","../src/compile/mark/arc.ts","../src/compile/mark/area.ts","../src/compile/mark/bar.ts","../src/compile/mark/geoshape.ts","../src/compile/mark/image.ts","../src/compile/mark/line.ts","../src/compile/mark/rect.ts","../src/compile/mark/rule.ts","../src/compile/unit.ts","../src/compile/layoutsize/init.ts","../src/compile/layer.ts","../src/compile/buildmodel.ts","../src/index.ts","../src/compile/compile.ts"],"sourcesContent":["Array.prototype.flat||Object.defineProperty(Array.prototype,\"flat\",{configurable:!0,value:function r(){var t=isNaN(arguments[0])?1:Number(arguments[0]);return t?Array.prototype.reduce.call(this,function(a,e){return Array.isArray(e)?a.push.apply(a,r.call(e,t-1)):a.push(e),a},[]):Array.prototype.slice.call(this)},writable:!0}),Array.prototype.flatMap||Object.defineProperty(Array.prototype,\"flatMap\",{configurable:!0,value:function(r){return Array.prototype.map.apply(this,arguments).flat()},writable:!0})\n","var clone = (function() {\n'use strict';\n\nfunction _instanceof(obj, type) {\n return type != null && obj instanceof type;\n}\n\nvar nativeMap;\ntry {\n nativeMap = Map;\n} catch(_) {\n // maybe a reference error because no `Map`. Give it a dummy value that no\n // value will ever be an instanceof.\n nativeMap = function() {};\n}\n\nvar nativeSet;\ntry {\n nativeSet = Set;\n} catch(_) {\n nativeSet = function() {};\n}\n\nvar nativePromise;\ntry {\n nativePromise = Promise;\n} catch(_) {\n nativePromise = function() {};\n}\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n * circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n * a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n * (optional - defaults to parent prototype).\n * @param `includeNonEnumerable` - set to true if the non-enumerable properties\n * should be cloned as well. Non-enumerable properties on the prototype\n * chain will be ignored. (optional - false by default)\n*/\nfunction clone(parent, circular, depth, prototype, includeNonEnumerable) {\n if (typeof circular === 'object') {\n depth = circular.depth;\n prototype = circular.prototype;\n includeNonEnumerable = circular.includeNonEnumerable;\n circular = circular.circular;\n }\n // maintain two arrays for circular references, where corresponding parents\n // and children have the same index\n var allParents = [];\n var allChildren = [];\n\n var useBuffer = typeof Buffer != 'undefined';\n\n if (typeof circular == 'undefined')\n circular = true;\n\n if (typeof depth == 'undefined')\n depth = Infinity;\n\n // recurse this function so we don't reset allParents and allChildren\n function _clone(parent, depth) {\n // cloning null always returns null\n if (parent === null)\n return null;\n\n if (depth === 0)\n return parent;\n\n var child;\n var proto;\n if (typeof parent != 'object') {\n return parent;\n }\n\n if (_instanceof(parent, nativeMap)) {\n child = new nativeMap();\n } else if (_instanceof(parent, nativeSet)) {\n child = new nativeSet();\n } else if (_instanceof(parent, nativePromise)) {\n child = new nativePromise(function (resolve, reject) {\n parent.then(function(value) {\n resolve(_clone(value, depth - 1));\n }, function(err) {\n reject(_clone(err, depth - 1));\n });\n });\n } else if (clone.__isArray(parent)) {\n child = [];\n } else if (clone.__isRegExp(parent)) {\n child = new RegExp(parent.source, __getRegExpFlags(parent));\n if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n } else if (clone.__isDate(parent)) {\n child = new Date(parent.getTime());\n } else if (useBuffer && Buffer.isBuffer(parent)) {\n if (Buffer.allocUnsafe) {\n // Node.js >= 4.5.0\n child = Buffer.allocUnsafe(parent.length);\n } else {\n // Older Node.js versions\n child = new Buffer(parent.length);\n }\n parent.copy(child);\n return child;\n } else if (_instanceof(parent, Error)) {\n child = Object.create(parent);\n } else {\n if (typeof prototype == 'undefined') {\n proto = Object.getPrototypeOf(parent);\n child = Object.create(proto);\n }\n else {\n child = Object.create(prototype);\n proto = prototype;\n }\n }\n\n if (circular) {\n var index = allParents.indexOf(parent);\n\n if (index != -1) {\n return allChildren[index];\n }\n allParents.push(parent);\n allChildren.push(child);\n }\n\n if (_instanceof(parent, nativeMap)) {\n parent.forEach(function(value, key) {\n var keyChild = _clone(key, depth - 1);\n var valueChild = _clone(value, depth - 1);\n child.set(keyChild, valueChild);\n });\n }\n if (_instanceof(parent, nativeSet)) {\n parent.forEach(function(value) {\n var entryChild = _clone(value, depth - 1);\n child.add(entryChild);\n });\n }\n\n for (var i in parent) {\n var attrs;\n if (proto) {\n attrs = Object.getOwnPropertyDescriptor(proto, i);\n }\n\n if (attrs && attrs.set == null) {\n continue;\n }\n child[i] = _clone(parent[i], depth - 1);\n }\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(parent);\n for (var i = 0; i < symbols.length; i++) {\n // Don't need to worry about cloning a symbol because it is a primitive,\n // like a number or string.\n var symbol = symbols[i];\n var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);\n if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {\n continue;\n }\n child[symbol] = _clone(parent[symbol], depth - 1);\n if (!descriptor.enumerable) {\n Object.defineProperty(child, symbol, {\n enumerable: false\n });\n }\n }\n }\n\n if (includeNonEnumerable) {\n var allPropertyNames = Object.getOwnPropertyNames(parent);\n for (var i = 0; i < allPropertyNames.length; i++) {\n var propertyName = allPropertyNames[i];\n var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);\n if (descriptor && descriptor.enumerable) {\n continue;\n }\n child[propertyName] = _clone(parent[propertyName], depth - 1);\n Object.defineProperty(child, propertyName, {\n enumerable: false\n });\n }\n }\n\n return child;\n }\n\n return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n if (parent === null)\n return null;\n\n var c = function () {};\n c.prototype = parent;\n return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n return Object.prototype.toString.call(o);\n}\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Date]';\n}\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Array]';\n}\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n}\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n var flags = '';\n if (re.global) flags += 'g';\n if (re.ignoreCase) flags += 'i';\n if (re.multiline) flags += 'm';\n return flags;\n}\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n module.exports = clone;\n}\n","'use strict';\n\nmodule.exports = function (data, opts) {\n if (!opts) opts = {};\n if (typeof opts === 'function') opts = { cmp: opts };\n var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;\n\n var cmp = opts.cmp && (function (f) {\n return function (node) {\n return function (a, b) {\n var aobj = { key: a, value: node[a] };\n var bobj = { key: b, value: node[b] };\n return f(aobj, bobj);\n };\n };\n })(opts.cmp);\n\n var seen = [];\n return (function stringify (node) {\n if (node && node.toJSON && typeof node.toJSON === 'function') {\n node = node.toJSON();\n }\n\n if (node === undefined) return;\n if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';\n if (typeof node !== 'object') return JSON.stringify(node);\n\n var i, out;\n if (Array.isArray(node)) {\n out = '[';\n for (i = 0; i < node.length; i++) {\n if (i) out += ',';\n out += stringify(node[i]) || 'null';\n }\n return out + ']';\n }\n\n if (node === null) return 'null';\n\n if (seen.indexOf(node) !== -1) {\n if (cycles) return JSON.stringify('__cycle__');\n throw new TypeError('Converting circular structure to JSON');\n }\n\n var seenIndex = seen.push(node) - 1;\n var keys = Object.keys(node).sort(cmp && cmp(node));\n out = '';\n for (i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = stringify(node[key]);\n\n if (!value) continue;\n if (out) out += ',';\n out += JSON.stringify(key) + ':' + value;\n }\n seen.splice(seenIndex, 1);\n return '{' + out + '}';\n })(data);\n};\n","export type LogicalComposition = LogicalNot | LogicalAnd | LogicalOr | T;\n\nexport interface LogicalOr {\n or: LogicalComposition[];\n}\n\nexport interface LogicalAnd {\n and: LogicalComposition[];\n}\n\nexport interface LogicalNot {\n not: LogicalComposition;\n}\n\nexport function isLogicalOr(op: LogicalComposition): op is LogicalOr {\n return !!op.or;\n}\n\nexport function isLogicalAnd(op: LogicalComposition): op is LogicalAnd {\n return !!op.and;\n}\n\nexport function isLogicalNot(op: LogicalComposition): op is LogicalNot {\n return !!op.not;\n}\n\nexport function forEachLeaf(op: LogicalComposition, fn: (op: T) => void) {\n if (isLogicalNot(op)) {\n forEachLeaf(op.not, fn);\n } else if (isLogicalAnd(op)) {\n for (const subop of op.and) {\n forEachLeaf(subop, fn);\n }\n } else if (isLogicalOr(op)) {\n for (const subop of op.or) {\n forEachLeaf(subop, fn);\n }\n } else {\n fn(op);\n }\n}\n\nexport function normalizeLogicalComposition(\n op: LogicalComposition,\n normalizer: (o: T) => T\n): LogicalComposition {\n if (isLogicalNot(op)) {\n return {not: normalizeLogicalComposition(op.not, normalizer)};\n } else if (isLogicalAnd(op)) {\n return {and: op.and.map(o => normalizeLogicalComposition(o, normalizer))};\n } else if (isLogicalOr(op)) {\n return {or: op.or.map(o => normalizeLogicalComposition(o, normalizer))};\n } else {\n return normalizer(op);\n }\n}\n","import 'array-flat-polyfill';\nimport {default as clone_} from 'clone';\nimport deepEqual_ from 'fast-deep-equal';\nimport stableStringify from 'fast-json-stable-stringify';\nimport {hasOwnProperty, isNumber, isString, splitAccessPath, stringValue, writeConfig} from 'vega-util';\nimport {isLogicalAnd, isLogicalNot, isLogicalOr, LogicalComposition} from './logical';\n\nexport const deepEqual = deepEqual_;\nexport const duplicate = clone_;\n\n/**\n * Creates an object composed of the picked object properties.\n *\n * var object = {'a': 1, 'b': '2', 'c': 3};\n * pick(object, ['a', 'c']);\n * // → {'a': 1, 'c': 3}\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function pick(obj: T, props: readonly K[]): Pick {\n const copy: any = {};\n for (const prop of props) {\n if (hasOwnProperty(obj, prop)) {\n copy[prop] = obj[prop];\n }\n }\n return copy;\n}\n\n/**\n * The opposite of _.pick; this method creates an object composed of the own\n * and inherited enumerable string keyed properties of object that are not omitted.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function omit(obj: T, props: readonly K[]): Omit {\n const copy = {...(obj as any)};\n for (const prop of props) {\n delete copy[prop];\n }\n return copy;\n}\n\n/**\n * Monkey patch Set so that `stringify` produces a string representation of sets.\n */\nSet.prototype['toJSON'] = function () {\n return `Set(${[...this].map(x => stableStringify(x)).join(',')})`;\n};\n\n/**\n * Converts any object to a string representation that can be consumed by humans.\n */\nexport const stringify = stableStringify;\n\n/**\n * Converts any object to a string of limited size, or a number.\n */\nexport function hash(a: any): string | number {\n if (isNumber(a)) {\n return a;\n }\n\n const str = isString(a) ? a : stableStringify(a);\n\n // short strings can be used as hash directly, longer strings are hashed to reduce memory usage\n if (str.length < 250) {\n return str;\n }\n\n // from http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/\n let h = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n h = (h << 5) - h + char;\n h = h & h; // Convert to 32bit integer\n }\n return h;\n}\n\nexport function isNullOrFalse(x: any): x is false | null {\n return x === false || x === null;\n}\n\nexport function contains(array: readonly T[], item: T) {\n return array.includes(item);\n}\n\n/**\n * Returns true if any item returns true.\n */\nexport function some(arr: readonly T[], f: (d: T, k?: any, i?: any) => boolean) {\n let i = 0;\n for (const [k, a] of arr.entries()) {\n if (f(a, k, i++)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Returns true if all items return true.\n */\nexport function every(arr: readonly T[], f: (d: T, k?: any, i?: any) => boolean) {\n let i = 0;\n for (const [k, a] of arr.entries()) {\n if (!f(a, k, i++)) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Like TS Partial but applies recursively to all properties.\n */\nexport type DeepPartial = {[P in keyof T]?: DeepPartial};\n\n/**\n * recursively merges src into dest\n */\nexport function mergeDeep(dest: T, ...src: readonly DeepPartial[]): T {\n for (const s of src) {\n deepMerge_(dest, s ?? {});\n }\n return dest;\n}\n\nfunction deepMerge_(dest: any, src: any) {\n for (const property of keys(src)) {\n writeConfig(dest, property, src[property], true);\n }\n}\n\nexport function unique(values: readonly T[], f: (item: T) => string | number): T[] {\n const results: T[] = [];\n const u = {};\n let v: string | number;\n for (const val of values) {\n v = f(val);\n if (v in u) {\n continue;\n }\n u[v] = 1;\n results.push(val);\n }\n return results;\n}\n\nexport type Dict = Record;\n\n/**\n * Returns true if the two dictionaries disagree. Applies only to defined values.\n */\nexport function isEqual(dict: Dict, other: Dict) {\n const dictKeys = keys(dict);\n const otherKeys = keys(other);\n if (dictKeys.length !== otherKeys.length) {\n return false;\n }\n for (const key of dictKeys) {\n if (dict[key] !== other[key]) {\n return false;\n }\n }\n return true;\n}\n\nexport function setEqual(a: Set, b: Set) {\n if (a.size !== b.size) {\n return false;\n }\n for (const e of a) {\n if (!b.has(e)) {\n return false;\n }\n }\n return true;\n}\n\nexport function hasIntersection(a: ReadonlySet, b: ReadonlySet) {\n for (const key of a) {\n if (b.has(key)) {\n return true;\n }\n }\n return false;\n}\n\nexport function prefixGenerator(a: ReadonlySet): ReadonlySet {\n const prefixes = new Set();\n for (const x of a) {\n const splitField = splitAccessPath(x);\n // Wrap every element other than the first in `[]`\n const wrappedWithAccessors = splitField.map((y, i) => (i === 0 ? y : `[${y}]`));\n const computedPrefixes = wrappedWithAccessors.map((_, i) => wrappedWithAccessors.slice(0, i + 1).join(''));\n for (const y of computedPrefixes) {\n prefixes.add(y);\n }\n }\n return prefixes;\n}\n\n/**\n * Returns true if a and b have an intersection. Also return true if a or b are undefined\n * since this means we don't know what fields a node produces or depends on.\n */\nexport function fieldIntersection(a: ReadonlySet, b: ReadonlySet): boolean {\n if (a === undefined || b === undefined) {\n return true;\n }\n return hasIntersection(prefixGenerator(a), prefixGenerator(b));\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isEmpty(obj: object) {\n return keys(obj).length === 0;\n}\n\n// This is a stricter version of Object.keys but with better types. See https://github.com/Microsoft/TypeScript/pull/12253#issuecomment-263132208\nexport const keys = Object.keys as (o: T) => Extract[];\n\nexport const vals = Object.values;\n\nexport const entries = Object.entries;\n\n// Using mapped type to declare a collect of flags for a string literal type S\n// https://www.typescriptlang.org/docs/handbook/advanced-types.html#mapped-types\nexport type Flag = {[K in S]: 1};\n\nexport function isBoolean(b: any): b is boolean {\n return b === true || b === false;\n}\n\n/**\n * Convert a string into a valid variable name\n */\nexport function varName(s: string): string {\n // Replace non-alphanumeric characters (anything besides a-zA-Z0-9_) with _\n const alphanumericS = s.replace(/\\W/g, '_');\n\n // Add _ if the string has leading numbers.\n return (s.match(/^\\d+/) ? '_' : '') + alphanumericS;\n}\n\nexport function logicalExpr(op: LogicalComposition, cb: (...args: readonly any[]) => string): string {\n if (isLogicalNot(op)) {\n return `!(${logicalExpr(op.not, cb)})`;\n } else if (isLogicalAnd(op)) {\n return `(${op.and.map((and: LogicalComposition) => logicalExpr(and, cb)).join(') && (')})`;\n } else if (isLogicalOr(op)) {\n return `(${op.or.map((or: LogicalComposition) => logicalExpr(or, cb)).join(') || (')})`;\n } else {\n return cb(op);\n }\n}\n\n/**\n * Delete nested property of an object, and delete the ancestors of the property if they become empty.\n */\nexport function deleteNestedProperty(obj: any, orderedProps: string[]) {\n if (orderedProps.length === 0) {\n return true;\n }\n const prop = orderedProps.shift()!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n if (prop in obj && deleteNestedProperty(obj[prop], orderedProps)) {\n delete obj[prop];\n }\n return isEmpty(obj);\n}\n\nexport function titleCase(s: string) {\n return s.charAt(0).toUpperCase() + s.substr(1);\n}\n\n/**\n * Converts a path to an access path with datum.\n * @param path The field name.\n * @param datum The string to use for `datum`.\n */\nexport function accessPathWithDatum(path: string, datum = 'datum') {\n const pieces = splitAccessPath(path);\n const prefixes = [];\n for (let i = 1; i <= pieces.length; i++) {\n const prefix = `[${pieces.slice(0, i).map(stringValue).join('][')}]`;\n prefixes.push(`${datum}${prefix}`);\n }\n return prefixes.join(' && ');\n}\n\n/**\n * Return access with datum to the flattened field.\n *\n * @param path The field name.\n * @param datum The string to use for `datum`.\n */\nexport function flatAccessWithDatum(path: string, datum: 'datum' | 'parent' | 'datum.datum' = 'datum') {\n return `${datum}[${stringValue(splitAccessPath(path).join('.'))}]`;\n}\n\nfunction escapePathAccess(string: string) {\n return string.replace(/(\\[|\\]|\\.|'|\")/g, '\\\\$1');\n}\n\n/**\n * Replaces path accesses with access to non-nested field.\n * For example, `foo[\"bar\"].baz` becomes `foo\\\\.bar\\\\.baz`.\n */\nexport function replacePathInField(path: string) {\n return `${splitAccessPath(path).map(escapePathAccess).join('\\\\.')}`;\n}\n\n/**\n * Replace all occurrences of a string with another string.\n *\n * @param string the string to replace in\n * @param find the string to replace\n * @param replacement the replacement\n */\nexport function replaceAll(string: string, find: string, replacement: string) {\n return string.replace(new RegExp(find.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'g'), replacement);\n}\n\n/**\n * Remove path accesses with access from field.\n * For example, `foo[\"bar\"].baz` becomes `foo.bar.baz`.\n */\nexport function removePathFromField(path: string) {\n return `${splitAccessPath(path).join('.')}`;\n}\n\n/**\n * Count the depth of the path. Returns 1 for fields that are not nested.\n */\nexport function accessPathDepth(path: string) {\n if (!path) {\n return 0;\n }\n return splitAccessPath(path).length;\n}\n\n/**\n * This is a replacement for chained || for numeric properties or properties that respect null so that 0 will be included.\n */\nexport function getFirstDefined(...args: readonly T[]): T | undefined {\n for (const arg of args) {\n if (arg !== undefined) {\n return arg;\n }\n }\n return undefined;\n}\n\n// variable used to generate id\nlet idCounter = 42;\n\n/**\n * Returns a new random id every time it gets called.\n *\n * Has side effect!\n */\nexport function uniqueId(prefix?: string) {\n const id = ++idCounter;\n return prefix ? String(prefix) + id : id;\n}\n\n/**\n * Resets the id counter used in uniqueId. This can be useful for testing.\n */\nexport function resetIdCounter() {\n idCounter = 42;\n}\n\nexport function internalField(name: string) {\n return isInternalField(name) ? name : `__${name}`;\n}\n\nexport function isInternalField(name: string) {\n return name.startsWith('__');\n}\n\n/**\n * Normalize angle to be within [0,360).\n */\nexport function normalizeAngle(angle: number) {\n if (angle === undefined) {\n return undefined;\n }\n return ((angle % 360) + 360) % 360;\n}\n\n/**\n * Returns whether the passed in value is a valid number.\n */\nexport function isNumeric(value: number | string): boolean {\n if (isNumber(value)) {\n return true;\n }\n return !isNaN(value as any) && !isNaN(parseFloat(value));\n}\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","/*\n * Constants and utilities for encoding channels (Visual variables)\n * such as 'x', 'y', 'color'.\n */\n\nimport {RangeType} from './compile/scale/type';\nimport {Encoding} from './encoding';\nimport {Mark} from './mark';\nimport {EncodingFacetMapping} from './spec/facet';\nimport {Flag, keys} from './util';\n\nexport type Channel = keyof Encoding;\nexport type ExtendedChannel = Channel | FacetChannel;\n\n// Facet\nexport const ROW = 'row' as const;\nexport const COLUMN = 'column' as const;\n\nexport const FACET = 'facet' as const;\n\n// Position\nexport const X = 'x' as const;\nexport const Y = 'y' as const;\nexport const X2 = 'x2' as const;\nexport const Y2 = 'y2' as const;\n\n// Arc-Position\nexport const RADIUS = 'radius' as const;\nexport const RADIUS2 = 'radius2' as const;\nexport const THETA = 'theta' as const;\nexport const THETA2 = 'theta2' as const;\n\n// Geo Position\nexport const LATITUDE = 'latitude' as const;\nexport const LONGITUDE = 'longitude' as const;\nexport const LATITUDE2 = 'latitude2' as const;\nexport const LONGITUDE2 = 'longitude2' as const;\n\n// Mark property with scale\nexport const COLOR = 'color' as const;\n\nexport const FILL = 'fill' as const;\n\nexport const STROKE = 'stroke' as const;\n\nexport const SHAPE = 'shape' as const;\nexport const SIZE = 'size' as const;\n\nexport const ANGLE = 'angle' as const;\n\nexport const OPACITY = 'opacity' as const;\nexport const FILLOPACITY = 'fillOpacity' as const;\n\nexport const STROKEOPACITY = 'strokeOpacity' as const;\n\nexport const STROKEWIDTH = 'strokeWidth' as const;\nexport const STROKEDASH = 'strokeDash' as const;\n\n// Non-scale channel\nexport const TEXT = 'text' as const;\nexport const ORDER = 'order' as const;\nexport const DETAIL = 'detail' as const;\nexport const KEY = 'key' as const;\n\nexport const TOOLTIP = 'tooltip' as const;\nexport const HREF = 'href' as const;\n\nexport const URL = 'url' as const;\nexport const DESCRIPTION = 'description' as const;\n\nconst POSITION_CHANNEL_INDEX = {\n x: 1,\n y: 1,\n x2: 1,\n y2: 1\n} as const;\n\nexport type PositionChannel = keyof typeof POSITION_CHANNEL_INDEX;\n\nconst POLAR_POSITION_CHANNEL_INDEX = {\n theta: 1,\n theta2: 1,\n radius: 1,\n radius2: 1\n} as const;\n\nexport type PolarPositionChannel = keyof typeof POLAR_POSITION_CHANNEL_INDEX;\n\nexport function isPolarPositionChannel(c: Channel): c is PolarPositionChannel {\n return c in POLAR_POSITION_CHANNEL_INDEX;\n}\n\nconst GEO_POSIITON_CHANNEL_INDEX = {\n longitude: 1,\n longitude2: 1,\n latitude: 1,\n latitude2: 1\n} as const;\n\nexport type GeoPositionChannel = keyof typeof GEO_POSIITON_CHANNEL_INDEX;\n\nexport function getPositionChannelFromLatLong(channel: GeoPositionChannel): PositionChannel {\n switch (channel) {\n case LATITUDE:\n return 'y';\n case LATITUDE2:\n return 'y2';\n case LONGITUDE:\n return 'x';\n case LONGITUDE2:\n return 'x2';\n }\n}\n\nexport function isGeoPositionChannel(c: Channel): c is GeoPositionChannel {\n return c in GEO_POSIITON_CHANNEL_INDEX;\n}\n\nexport const GEOPOSITION_CHANNELS = keys(GEO_POSIITON_CHANNEL_INDEX);\n\nconst UNIT_CHANNEL_INDEX: Flag = {\n ...POSITION_CHANNEL_INDEX,\n ...POLAR_POSITION_CHANNEL_INDEX,\n\n ...GEO_POSIITON_CHANNEL_INDEX,\n\n // color\n color: 1,\n fill: 1,\n stroke: 1,\n\n // other non-position with scale\n opacity: 1,\n fillOpacity: 1,\n strokeOpacity: 1,\n\n strokeWidth: 1,\n strokeDash: 1,\n size: 1,\n angle: 1,\n shape: 1,\n\n // channels without scales\n order: 1,\n text: 1,\n detail: 1,\n key: 1,\n tooltip: 1,\n href: 1,\n url: 1,\n description: 1\n};\n\nexport type ColorChannel = 'color' | 'fill' | 'stroke';\n\nexport function isColorChannel(channel: Channel): channel is ColorChannel {\n return channel === COLOR || channel === FILL || channel === STROKE;\n}\n\nexport type FacetChannel = keyof EncodingFacetMapping;\n\nconst FACET_CHANNEL_INDEX: Flag> = {\n row: 1,\n column: 1,\n facet: 1\n};\n\nexport const FACET_CHANNELS = keys(FACET_CHANNEL_INDEX);\n\nconst CHANNEL_INDEX = {\n ...UNIT_CHANNEL_INDEX,\n ...FACET_CHANNEL_INDEX\n};\n\nexport const CHANNELS = keys(CHANNEL_INDEX);\n\nconst {order: _o, detail: _d, tooltip: _tt1, ...SINGLE_DEF_CHANNEL_INDEX} = CHANNEL_INDEX;\nconst {row: _r, column: _c, facet: _f, ...SINGLE_DEF_UNIT_CHANNEL_INDEX} = SINGLE_DEF_CHANNEL_INDEX;\n/**\n * Channels that cannot have an array of channelDef.\n * model.fieldDef, getFieldDef only work for these channels.\n *\n * (The only two channels that can have an array of channelDefs are \"detail\" and \"order\".\n * Since there can be multiple fieldDefs for detail and order, getFieldDef/model.fieldDef\n * are not applicable for them. Similarly, selection projection won't work with \"detail\" and \"order\".)\n */\n\nexport const SINGLE_DEF_CHANNELS = keys(SINGLE_DEF_CHANNEL_INDEX);\n\nexport type SingleDefChannel = typeof SINGLE_DEF_CHANNELS[number];\n\nexport const SINGLE_DEF_UNIT_CHANNELS = keys(SINGLE_DEF_UNIT_CHANNEL_INDEX);\n\nexport type SingleDefUnitChannel = typeof SINGLE_DEF_UNIT_CHANNELS[number];\n\nexport function isSingleDefUnitChannel(str: string): str is SingleDefUnitChannel {\n return !!SINGLE_DEF_UNIT_CHANNEL_INDEX[str];\n}\n\nexport function isChannel(str: string): str is Channel {\n return !!CHANNEL_INDEX[str];\n}\n\nexport type SecondaryRangeChannel = 'x2' | 'y2' | 'latitude2' | 'longitude2' | 'theta2' | 'radius2';\n\nexport const SECONDARY_RANGE_CHANNEL: SecondaryRangeChannel[] = [X2, Y2, LATITUDE2, LONGITUDE2, THETA2, RADIUS2];\n\nexport function isSecondaryRangeChannel(c: ExtendedChannel): c is SecondaryRangeChannel {\n const main = getMainRangeChannel(c);\n return main !== c;\n}\n\nexport type MainChannelOf = C extends 'x2'\n ? 'x'\n : C extends 'y2'\n ? 'y'\n : C extends 'latitude2'\n ? 'latitude'\n : C extends 'longitude2'\n ? 'longitude'\n : C extends 'theta2'\n ? 'theta'\n : C extends 'radius2'\n ? 'radius'\n : C;\n\n/**\n * Get the main channel for a range channel. E.g. `x` for `x2`.\n */\nexport function getMainRangeChannel(channel: C): MainChannelOf {\n switch (channel) {\n case X2:\n return X as MainChannelOf;\n case Y2:\n return Y as MainChannelOf;\n case LATITUDE2:\n return LATITUDE as MainChannelOf;\n case LONGITUDE2:\n return LONGITUDE as MainChannelOf;\n case THETA2:\n return THETA as MainChannelOf;\n case RADIUS2:\n return RADIUS as MainChannelOf;\n }\n return channel as MainChannelOf;\n}\n\nexport type SecondaryChannelOf = C extends 'x'\n ? 'x2'\n : C extends 'y'\n ? 'y2'\n : C extends 'latitude'\n ? 'latitude2'\n : C extends 'longitude'\n ? 'longitude2'\n : C extends 'theta'\n ? 'theta2'\n : C extends 'radius'\n ? 'radius2'\n : undefined;\n\nexport function getVgPositionChannel(channel: PolarPositionChannel | PositionChannel) {\n if (isPolarPositionChannel(channel)) {\n switch (channel) {\n case THETA:\n return 'startAngle';\n case THETA2:\n return 'endAngle';\n case RADIUS:\n return 'outerRadius';\n case RADIUS2:\n return 'innerRadius';\n }\n }\n return channel;\n}\n\n/**\n * Get the main channel for a range channel. E.g. `x` for `x2`.\n */\nexport function getSecondaryRangeChannel(channel: C): SecondaryChannelOf | undefined {\n switch (channel) {\n case X:\n return X2 as SecondaryChannelOf;\n case Y:\n return Y2 as SecondaryChannelOf;\n case LATITUDE:\n return LATITUDE2 as SecondaryChannelOf;\n case LONGITUDE:\n return LONGITUDE2 as SecondaryChannelOf;\n case THETA:\n return THETA2 as SecondaryChannelOf;\n case RADIUS:\n return RADIUS2 as SecondaryChannelOf;\n }\n return undefined;\n}\n\nexport function getSizeChannel(channel: PositionChannel): 'width' | 'height';\nexport function getSizeChannel(channel: Channel): 'width' | 'height' | undefined;\nexport function getSizeChannel(channel: Channel): 'width' | 'height' | undefined {\n switch (channel) {\n case X:\n case X2:\n return 'width';\n case Y:\n case Y2:\n return 'height';\n }\n return undefined;\n}\n\n/**\n * Get the main channel for a range channel. E.g. `x` for `x2`.\n */\nexport function getOffsetChannel(channel: Channel) {\n switch (channel) {\n case X:\n return 'xOffset';\n case Y:\n return 'yOffset';\n case X2:\n return 'x2Offset';\n case Y2:\n return 'y2Offset';\n case THETA:\n return 'thetaOffset';\n case RADIUS:\n return 'radiusOffset';\n case THETA2:\n return 'theta2Offset';\n case RADIUS2:\n return 'radius2Offset';\n }\n return undefined;\n}\n\n// CHANNELS without COLUMN, ROW\nexport const UNIT_CHANNELS = keys(UNIT_CHANNEL_INDEX);\n\n// NONPOSITION_CHANNELS = UNIT_CHANNELS without X, Y, X2, Y2;\nconst {\n x: _x,\n y: _y,\n // x2 and y2 share the same scale as x and y\n x2: _x2,\n y2: _y2,\n latitude: _latitude,\n longitude: _longitude,\n latitude2: _latitude2,\n longitude2: _longitude2,\n theta: _theta,\n theta2: _theta2,\n radius: _radius,\n radius2: _radius2,\n // The rest of unit channels then have scale\n ...NONPOSITION_CHANNEL_INDEX\n} = UNIT_CHANNEL_INDEX;\n\nexport const NONPOSITION_CHANNELS = keys(NONPOSITION_CHANNEL_INDEX);\nexport type NonPositionChannel = typeof NONPOSITION_CHANNELS[number];\n\nexport const POSITION_SCALE_CHANNEL_INDEX = {\n x: 1,\n y: 1\n} as const;\nexport const POSITION_SCALE_CHANNELS = keys(POSITION_SCALE_CHANNEL_INDEX);\nexport type PositionScaleChannel = keyof typeof POSITION_SCALE_CHANNEL_INDEX;\n\nexport function isXorY(channel: ExtendedChannel): channel is PositionScaleChannel {\n return channel in POSITION_SCALE_CHANNEL_INDEX;\n}\n\nexport const POLAR_POSITION_SCALE_CHANNEL_INDEX = {\n theta: 1,\n radius: 1\n} as const;\n\nexport const POLAR_POSITION_SCALE_CHANNELS = keys(POLAR_POSITION_SCALE_CHANNEL_INDEX);\nexport type PolarPositionScaleChannel = keyof typeof POLAR_POSITION_SCALE_CHANNEL_INDEX;\n\nexport function getPositionScaleChannel(sizeType: 'width' | 'height'): PositionScaleChannel {\n return sizeType === 'width' ? X : Y;\n}\n\n// NON_POSITION_SCALE_CHANNEL = SCALE_CHANNELS without X, Y\nconst {\n // x2 and y2 share the same scale as x and y\n // text and tooltip have format instead of scale,\n // href has neither format, nor scale\n text: _t,\n tooltip: _tt,\n href: _hr,\n url: _u,\n description: _al,\n // detail and order have no scale\n detail: _dd,\n key: _k,\n order: _oo,\n ...NONPOSITION_SCALE_CHANNEL_INDEX\n} = NONPOSITION_CHANNEL_INDEX;\nexport const NONPOSITION_SCALE_CHANNELS = keys(NONPOSITION_SCALE_CHANNEL_INDEX);\nexport type NonPositionScaleChannel = typeof NONPOSITION_SCALE_CHANNELS[number];\n\nexport function isNonPositionScaleChannel(channel: Channel): channel is NonPositionScaleChannel {\n return !!NONPOSITION_CHANNEL_INDEX[channel];\n}\n\n/**\n * @returns whether Vega supports legends for a particular channel\n */\nexport function supportLegend(channel: NonPositionScaleChannel) {\n switch (channel) {\n case COLOR:\n case FILL:\n case STROKE:\n case SIZE:\n case SHAPE:\n case OPACITY:\n case STROKEWIDTH:\n case STROKEDASH:\n return true;\n case FILLOPACITY:\n case STROKEOPACITY:\n case ANGLE:\n return false;\n }\n}\n\n// Declare SCALE_CHANNEL_INDEX\nconst SCALE_CHANNEL_INDEX = {\n ...POSITION_SCALE_CHANNEL_INDEX,\n ...POLAR_POSITION_SCALE_CHANNEL_INDEX,\n ...NONPOSITION_SCALE_CHANNEL_INDEX\n};\n\n/** List of channels with scales */\nexport const SCALE_CHANNELS = keys(SCALE_CHANNEL_INDEX);\nexport type ScaleChannel = typeof SCALE_CHANNELS[number];\n\nexport function isScaleChannel(channel: Channel): channel is ScaleChannel {\n return !!SCALE_CHANNEL_INDEX[channel];\n}\n\nexport type SupportedMark = Partial>;\n\n/**\n * Return whether a channel supports a particular mark type.\n * @param channel channel name\n * @param mark the mark type\n * @return whether the mark supports the channel\n */\nexport function supportMark(channel: ExtendedChannel, mark: Mark) {\n return getSupportedMark(channel)[mark];\n}\n\nconst ALL_MARKS: Record = {\n // all marks\n arc: 'always',\n area: 'always',\n bar: 'always',\n circle: 'always',\n geoshape: 'always',\n image: 'always',\n line: 'always',\n rule: 'always',\n point: 'always',\n rect: 'always',\n square: 'always',\n trail: 'always',\n text: 'always',\n tick: 'always'\n};\n\nconst {geoshape: _g, ...ALL_MARKS_EXCEPT_GEOSHAPE} = ALL_MARKS;\n\n/**\n * Return a dictionary showing whether a channel supports mark type.\n * @param channel\n * @return A dictionary mapping mark types to 'always', 'binned', or undefined\n */\nfunction getSupportedMark(channel: ExtendedChannel): SupportedMark {\n switch (channel) {\n case COLOR:\n case FILL:\n case STROKE:\n // falls through\n\n case DESCRIPTION:\n case DETAIL:\n case KEY:\n case TOOLTIP:\n case HREF:\n case ORDER: // TODO: revise (order might not support rect, which is not stackable?)\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n case STROKEWIDTH:\n\n // falls through\n\n case FACET:\n case ROW: // falls through\n case COLUMN:\n return ALL_MARKS;\n case X:\n case Y:\n case LATITUDE:\n case LONGITUDE:\n // all marks except geoshape. geoshape does not use X, Y -- it uses a projection\n return ALL_MARKS_EXCEPT_GEOSHAPE;\n case X2:\n case Y2:\n case LATITUDE2:\n case LONGITUDE2:\n return {\n area: 'always',\n bar: 'always',\n image: 'always',\n rect: 'always',\n rule: 'always',\n circle: 'binned',\n point: 'binned',\n square: 'binned',\n tick: 'binned',\n line: 'binned',\n trail: 'binned'\n };\n case SIZE:\n return {\n point: 'always',\n tick: 'always',\n rule: 'always',\n circle: 'always',\n square: 'always',\n bar: 'always',\n text: 'always',\n line: 'always',\n trail: 'always'\n };\n case STROKEDASH:\n return {\n line: 'always',\n point: 'always',\n tick: 'always',\n rule: 'always',\n circle: 'always',\n square: 'always',\n bar: 'always',\n geoshape: 'always'\n };\n case SHAPE:\n return {point: 'always', geoshape: 'always'};\n case TEXT:\n return {text: 'always'};\n case ANGLE:\n return {point: 'always', square: 'always', text: 'always'};\n case URL:\n return {image: 'always'};\n case THETA:\n return {text: 'always', arc: 'always'};\n case RADIUS:\n return {text: 'always', arc: 'always'};\n case THETA2:\n case RADIUS2:\n return {arc: 'always'};\n }\n}\n\nexport function rangeType(channel: ExtendedChannel): RangeType {\n switch (channel) {\n case X:\n case Y:\n case THETA:\n case RADIUS:\n case SIZE:\n case ANGLE:\n case STROKEWIDTH:\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n\n // X2 and Y2 use X and Y scales, so they similarly have continuous range. [falls through]\n case X2:\n case Y2:\n case THETA2:\n case RADIUS2:\n return undefined;\n\n case FACET:\n case ROW:\n case COLUMN:\n case SHAPE:\n case STROKEDASH:\n // TEXT, TOOLTIP, URL, and HREF have no scale but have discrete output [falls through]\n case TEXT:\n case TOOLTIP:\n case HREF:\n case URL:\n case DESCRIPTION:\n return 'discrete';\n\n // Color can be either continuous or discrete, depending on scale type.\n case COLOR:\n case FILL:\n case STROKE:\n return 'flexible';\n\n // No scale, no range type.\n\n case LATITUDE:\n case LONGITUDE:\n case LATITUDE2:\n case LONGITUDE2:\n case DETAIL:\n case KEY:\n case ORDER:\n return undefined;\n }\n}\n","import {AggregateOp} from 'vega';\nimport {isString, toSet} from 'vega-util';\nimport {FieldName} from './channeldef';\nimport {contains, Flag, keys} from './util';\n\nconst AGGREGATE_OP_INDEX: Flag = {\n argmax: 1,\n argmin: 1,\n average: 1,\n count: 1,\n distinct: 1,\n product: 1,\n max: 1,\n mean: 1,\n median: 1,\n min: 1,\n missing: 1,\n q1: 1,\n q3: 1,\n ci0: 1,\n ci1: 1,\n stderr: 1,\n stdev: 1,\n stdevp: 1,\n sum: 1,\n valid: 1,\n values: 1,\n variance: 1,\n variancep: 1\n};\n\nexport const MULTIDOMAIN_SORT_OP_INDEX = {\n count: 1,\n min: 1,\n max: 1\n};\n\nexport interface ArgminDef {\n argmin: FieldName;\n}\n\nexport interface ArgmaxDef {\n argmax: FieldName;\n}\n\nexport type NonArgAggregateOp = Exclude;\n\nexport type Aggregate = NonArgAggregateOp | ArgmaxDef | ArgminDef;\n\nexport function isArgminDef(a: Aggregate | string): a is ArgminDef {\n return !!a && !!a['argmin'];\n}\n\nexport function isArgmaxDef(a: Aggregate | string): a is ArgmaxDef {\n return !!a && !!a['argmax'];\n}\n\nexport const AGGREGATE_OPS = keys(AGGREGATE_OP_INDEX);\n\nexport function isAggregateOp(a: string | ArgminDef | ArgmaxDef): a is AggregateOp {\n return isString(a) && !!AGGREGATE_OP_INDEX[a];\n}\n\nexport const COUNTING_OPS: NonArgAggregateOp[] = ['count', 'valid', 'missing', 'distinct'];\n\nexport function isCountingAggregateOp(aggregate?: string | Aggregate): boolean {\n return isString(aggregate) && contains(COUNTING_OPS, aggregate);\n}\n\nexport function isMinMaxOp(aggregate?: Aggregate | string): boolean {\n return isString(aggregate) && contains(['min', 'max'], aggregate);\n}\n\n/** Additive-based aggregation operations. These can be applied to stack. */\nexport const SUM_OPS: NonArgAggregateOp[] = ['count', 'sum', 'distinct', 'valid', 'missing'];\n\n/**\n * Aggregation operators that always produce values within the range [domainMin, domainMax].\n */\nexport const SHARED_DOMAIN_OPS: AggregateOp[] = ['mean', 'average', 'median', 'q1', 'q3', 'min', 'max'];\n\nexport const SHARED_DOMAIN_OP_INDEX = toSet(SHARED_DOMAIN_OPS);\n","import {isBoolean, isObject} from 'vega-util';\nimport {\n COLOR,\n COLUMN,\n ExtendedChannel,\n FILL,\n FILLOPACITY,\n OPACITY,\n ROW,\n SHAPE,\n SIZE,\n STROKE,\n STROKEDASH,\n STROKEOPACITY,\n STROKEWIDTH\n} from './channel';\nimport {normalizeBin} from './channeldef';\nimport {ParameterExtent} from './selection';\nimport {entries, keys, varName} from './util';\n\nexport interface BaseBin {\n /**\n * The number base to use for automatic bin determination (default is base 10).\n *\n * __Default value:__ `10`\n *\n */\n base?: number;\n /**\n * An exact step size to use between bins.\n *\n * __Note:__ If provided, options such as maxbins will be ignored.\n */\n step?: number;\n /**\n * An array of allowable step sizes to choose from.\n * @minItems 1\n */\n steps?: number[];\n /**\n * A minimum allowable step size (particularly useful for integer values).\n */\n minstep?: number;\n /**\n * Scale factors indicating allowable subdivisions. The default value is [5, 2], which indicates that for base 10 numbers (the default base), the method may consider dividing bin sizes by 5 and/or 2. For example, for an initial step size of 10, the method can check if bin sizes of 2 (= 10/5), 5 (= 10/2), or 1 (= 10/(5*2)) might also satisfy the given constraints.\n *\n * __Default value:__ `[5, 2]`\n *\n * @minItems 1\n */\n divide?: [number, number];\n /**\n * Maximum number of bins.\n *\n * __Default value:__ `6` for `row`, `column` and `shape` channels; `10` for other channels\n *\n * @minimum 2\n */\n maxbins?: number;\n /**\n * A value in the binned domain at which to anchor the bins, shifting the bin boundaries if necessary to ensure that a boundary aligns with the anchor value.\n *\n * __Default value:__ the minimum bin extent value\n */\n anchor?: number;\n /**\n * If true, attempts to make the bin boundaries use human-friendly boundaries, such as multiples of ten.\n *\n * __Default value:__ `true`\n */\n nice?: boolean;\n}\n\n/**\n * Binning properties or boolean flag for determining whether to bin data or not.\n */\nexport interface BinParams extends BaseBin {\n /**\n * A two-element (`[min, max]`) array indicating the range of desired bin values.\n */\n extent?: BinExtent; // VgBinTransform uses a different extent so we need to pull this out.\n\n /**\n * When set to `true`, Vega-Lite treats the input data as already binned.\n */\n binned?: boolean;\n}\n\nexport type Bin = boolean | BinParams | 'binned' | null;\n\nexport type BinExtent = [number, number] | ParameterExtent;\n\n/**\n * Create a key for the bin configuration. Not for prebinned bin.\n */\nexport function binToString(bin: BinParams | true) {\n if (isBoolean(bin)) {\n bin = normalizeBin(bin, undefined);\n }\n return (\n 'bin' +\n keys(bin)\n .map(p => (isParameterExtent(bin[p]) ? varName(`_${p}_${entries(bin[p])}`) : varName(`_${p}_${bin[p]}`)))\n .join('')\n );\n}\n\n/**\n * Vega-Lite should bin the data.\n */\nexport function isBinning(bin: BinParams | boolean | 'binned'): bin is BinParams | true {\n return bin === true || (isBinParams(bin) && !bin.binned);\n}\n\n/**\n * The data is already binned and so Vega-Lite should not bin it again.\n */\nexport function isBinned(bin: BinParams | boolean | 'binned'): bin is 'binned' | BinParams {\n return bin === 'binned' || (isBinParams(bin) && bin.binned === true);\n}\n\nexport function isBinParams(bin: BinParams | boolean | 'binned'): bin is BinParams {\n return isObject(bin);\n}\n\nexport function isParameterExtent(extent: BinExtent): extent is ParameterExtent {\n return extent?.['param'];\n}\n\nexport function autoMaxBins(channel?: ExtendedChannel): number {\n switch (channel) {\n case ROW:\n case COLUMN:\n case SIZE:\n case COLOR:\n case FILL:\n case STROKE:\n case STROKEWIDTH:\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n // Facets and Size shouldn't have too many bins\n // We choose 6 like shape to simplify the rule [falls through]\n case SHAPE:\n return 6; // Vega's \"shape\" has 6 distinct values\n case STROKEDASH:\n return 4; // We only provide 5 different stroke dash values (but 4 is more effective)\n default:\n return 10;\n }\n}\n","import {signalRefOrValue} from './compile/common';\nimport {Dict, keys} from './util';\nimport {MappedExclude} from './vega.schema';\n\nexport interface ExprRef {\n /**\n * Vega expression (which can refer to Vega-Lite parameters).\n */\n expr: string;\n}\n\nexport function isExprRef(o: any): o is ExprRef {\n return o && !!o['expr'];\n}\n\nexport function replaceExprRef>(index: T) {\n const props = keys(index || {});\n const newIndex: Dict = {};\n for (const prop of props) {\n newIndex[prop] = signalRefOrValue(index[prop]);\n }\n return newIndex as MappedExclude;\n}\n","import {BaseTitle, SignalRef, Text, TextEncodeEntry, TitleAnchor} from 'vega';\nimport {isArray, isString} from 'vega-util';\nimport {ExprRef} from './expr';\nimport {MarkConfig} from './mark';\nimport {pick} from './util';\nimport {MapExcludeValueRefAndReplaceSignalWith, MappedExcludeValueRef} from './vega.schema';\n\nexport type BaseTitleNoValueRefs = MapExcludeValueRefAndReplaceSignalWith<\n Omit,\n ES\n> &\n // Since some logic depends on align/baseline, Vega-Lite does NOT allow signal for them.\n MappedExcludeValueRef>;\n\nexport type TitleConfig = BaseTitleNoValueRefs;\n\nexport interface TitleBase extends BaseTitleNoValueRefs {\n /**\n * The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title.\n *\n * __Default value:__ `\"middle\"` for [single](https://vega.github.io/vega-lite/docs/spec.html) and [layered](https://vega.github.io/vega-lite/docs/layer.html) views.\n * `\"start\"` for other composite views.\n *\n * __Note:__ [For now](https://github.com/vega/vega-lite/issues/2875), `anchor` is only customizable only for [single](https://vega.github.io/vega-lite/docs/spec.html) and [layered](https://vega.github.io/vega-lite/docs/layer.html) views. For other composite views, `anchor` is always `\"start\"`.\n */\n anchor?: TitleAnchor;\n\n /**\n * A [mark style property](https://vega.github.io/vega-lite/docs/config.html#style) to apply to the title text mark.\n *\n * __Default value:__ `\"group-title\"`.\n */\n style?: string | string[];\n\n /**\n * \tThe integer z-index indicating the layering of the title group relative to other axis, mark and legend groups.\n *\n * __Default value:__ `0`.\n *\n * @TJS-type integer\n * @minimum 0\n */\n zindex?: number;\n\n /**\n * Mark definitions for custom encoding.\n *\n * @hidden\n */\n encoding?: TextEncodeEntry;\n}\n\nexport interface TitleParams extends TitleBase {\n /**\n * The title text.\n */\n text: Text | ES;\n\n /**\n * The subtitle Text.\n */\n subtitle?: Text;\n}\n\nexport function extractTitleConfig(\n titleConfig: TitleConfig\n): {\n titleMarkConfig: MarkConfig;\n subtitleMarkConfig: MarkConfig;\n nonMark: BaseTitleNoValueRefs;\n subtitle: BaseTitleNoValueRefs;\n} {\n const {\n // These are non-mark title config that need to be hardcoded\n anchor,\n frame,\n offset,\n orient,\n\n // color needs to be redirect to fill\n color,\n\n // subtitle properties\n subtitleColor,\n subtitleFont,\n subtitleFontSize,\n subtitleFontStyle,\n subtitleFontWeight,\n subtitleLineHeight,\n subtitlePadding,\n\n // The rest are mark config.\n ...rest\n } = titleConfig;\n\n const titleMarkConfig: MarkConfig = {\n ...rest,\n ...(color ? {fill: color} : {})\n };\n\n // These are non-mark title config that need to be hardcoded\n const nonMark: BaseTitleNoValueRefs = {\n ...(anchor ? {anchor} : {}),\n ...(frame ? {frame} : {}),\n ...(offset ? {offset} : {}),\n ...(orient ? {orient} : {})\n };\n\n // subtitle part can stay in config.title since header titles do not use subtitle\n const subtitle: BaseTitleNoValueRefs = {\n ...(subtitleColor ? {subtitleColor} : {}),\n ...(subtitleFont ? {subtitleFont} : {}),\n ...(subtitleFontSize ? {subtitleFontSize} : {}),\n ...(subtitleFontStyle ? {subtitleFontStyle} : {}),\n ...(subtitleFontWeight ? {subtitleFontWeight} : {}),\n ...(subtitleLineHeight ? {subtitleLineHeight} : {}),\n ...(subtitlePadding ? {subtitlePadding} : {})\n };\n\n const subtitleMarkConfig = pick(titleMarkConfig, ['align', 'baseline', 'dx', 'dy', 'limit']);\n\n return {titleMarkConfig, subtitleMarkConfig, nonMark, subtitle};\n}\n\nexport function isText(v: any): v is Text {\n return isString(v) || (isArray(v) && isString(v[0]));\n}\n","import type {\n AggregateOp,\n BandScale,\n BaseScale,\n BinOrdinalScale,\n ColorValueRef,\n Compare as VgCompare,\n ExprRef as VgExprRef,\n GeoShapeTransform as VgGeoShapeTransform,\n IdentityScale,\n LayoutAlign,\n LinearScale,\n LogScale,\n Mark,\n MarkConfig,\n NumericValueRef,\n OrdinalScale,\n PointScale,\n PowScale,\n ProjectionType,\n QuantileScale,\n QuantizeScale,\n RangeBand,\n RangeRaw,\n RangeScheme,\n ScaleData,\n ScaleDataRef,\n ScaledValueRef,\n ScaleMultiDataRef,\n ScaleMultiFieldsRef,\n SequentialScale,\n SignalRef,\n SortField as VgSortField,\n SqrtScale,\n SymLogScale,\n ThresholdScale,\n TimeInterval,\n TimeIntervalStep,\n TimeScale,\n Title as VgTitle,\n Transforms as VgTransform,\n UnionSortField as VgUnionSortField\n} from 'vega';\nimport {isArray} from 'vega-util';\nimport {Value} from './channeldef';\nimport {ExprRef} from './expr';\nimport {SortOrder} from './sort';\nimport {Dict, Flag, keys} from './util';\n\nexport type {VgSortField, VgUnionSortField, VgCompare, VgTitle, LayoutAlign, ProjectionType, VgExprRef};\n\n// TODO: make recursive (e.g. with https://stackoverflow.com/a/64900252/214950 but needs https://github.com/vega/ts-json-schema-generator/issues/568)\nexport type MappedExclude = {\n [P in keyof T]: Exclude;\n};\n\nexport type MapExcludeAndKeepSignalAs = {\n [P in keyof T]: SignalRef extends T[P] ? Exclude | S : Exclude;\n};\n\n// Remove ValueRefs from mapped types\nexport type MappedExcludeValueRef = MappedExclude | NumericValueRef | ColorValueRef>;\n\nexport type MapExcludeValueRefAndReplaceSignalWith = MapExcludeAndKeepSignalAs<\n T,\n ScaledValueRef | NumericValueRef | ColorValueRef,\n S\n>;\n\nexport interface VgData {\n name: string;\n source?: string;\n values?: any;\n format?: {\n type?: string;\n parse?: string | Dict;\n property?: string;\n feature?: string;\n mesh?: string;\n };\n url?: string;\n transform?: VgTransform[];\n}\n\nexport type VgScaleDataRefWithSort = ScaleDataRef & {\n sort?: VgSortField;\n};\n\nexport function isSignalRef(o: any): o is SignalRef {\n return o && !!o['signal'];\n}\n\n// TODO: add type of value (Make it VgValueRef {value?:V ...})\nexport interface VgValueRef {\n value?: Value; // value should never be a signal so we use never\n field?:\n | string\n | {\n datum?: string;\n group?: string;\n parent?: string;\n };\n signal?: string;\n scale?: string; // TODO: object\n mult?: number;\n offset?: number | VgValueRef;\n band?: boolean | number | VgValueRef;\n test?: string;\n}\n\n// TODO: add vg prefix\nexport type VgScaleMultiDataRefWithSort = ScaleMultiDataRef & {\n fields: (any[] | VgScaleDataRefWithSort | SignalRef)[];\n sort?: VgUnionSortField;\n};\n\nexport type VgMultiFieldsRefWithSort = ScaleMultiFieldsRef & {\n sort?: VgUnionSortField;\n};\n\nexport type VgRange = RangeScheme | ScaleData | RangeBand | RangeRaw;\n\nexport function isVgRangeStep(range: VgRange): range is VgRangeStep {\n return !!range['step'];\n}\n\nexport interface VgRangeStep {\n step: number | SignalRef;\n}\n// Domains that are not a union of domains\nexport type VgNonUnionDomain = (null | string | number | boolean | SignalRef)[] | VgScaleDataRefWithSort | SignalRef;\n\nexport type VgDomain = BaseScale['domain'];\n\nexport type VgMarkGroup = any;\n\n/**\n * A combined type for any Vega scales that Vega-Lite can generate\n */\nexport type VgScale = Pick & {\n range?: RangeScheme | RangeBand | ScaleData; // different Vega scales have conflicting range, need to union them here\n nice?: boolean | number | TimeInterval | TimeIntervalStep | SignalRef; // different Vega scales have conflicting range, need to union them here\n zero?: boolean | SignalRef; // LogScale only allow false, making the intersection type overly strict\n} & Omit<\n // Continuous\n Omit &\n Omit &\n Omit &\n Omit, 'type'> & // use partial so exponent is not required\n Omit &\n Omit &\n Omit &\n // Discretizing\n Omit &\n Omit &\n Omit &\n Omit &\n // Sequential\n Omit &\n // Discrete\n Omit &\n Omit &\n Omit,\n 'range' | 'nice' | 'zero'\n >;\n\nexport interface RowCol {\n row?: T;\n column?: T;\n}\n\nexport interface VgLayout {\n center?: boolean | RowCol;\n padding?: number | RowCol;\n headerBand?: number | RowCol;\n footerBand?: number | RowCol;\n\n titleAnchor?: 'start' | 'end' | RowCol<'start' | 'end'>;\n offset?:\n | number\n | {\n rowHeader?: number;\n rowFooter?: number;\n rowTitle?: number;\n columnHeader?: number;\n columnFooter?: number;\n columnTitle?: number;\n };\n bounds?: 'full' | 'flush';\n columns?: number | {signal: string};\n align?: LayoutAlign | RowCol;\n}\n\nexport function isDataRefUnionedDomain(domain: VgDomain): domain is VgScaleMultiDataRefWithSort {\n if (!isArray(domain)) {\n return 'fields' in domain && !('data' in domain);\n }\n return false;\n}\n\nexport function isFieldRefUnionDomain(domain: VgDomain): domain is VgMultiFieldsRefWithSort {\n if (!isArray(domain)) {\n return 'fields' in domain && 'data' in domain;\n }\n return false;\n}\n\nexport function isDataRefDomain(domain: VgDomain | any): domain is VgScaleDataRefWithSort {\n if (!isArray(domain)) {\n return 'field' in domain && 'data' in domain;\n }\n return false;\n}\n\nexport type VgEncodeChannel =\n | 'x'\n | 'x2'\n | 'xc'\n | 'width'\n | 'y'\n | 'y2'\n | 'yc'\n | 'height'\n | 'opacity'\n | 'fill'\n | 'fillOpacity'\n | 'stroke'\n | 'strokeWidth'\n | 'strokeCap'\n | 'strokeOpacity'\n | 'strokeDash'\n | 'strokeDashOffset'\n | 'strokeMiterLimit'\n | 'strokeJoin'\n | 'strokeOffset'\n | 'strokeForeground'\n | 'cursor'\n | 'clip'\n | 'size'\n | 'shape'\n | 'path'\n | 'innerRadius'\n | 'outerRadius'\n | 'startAngle'\n | 'endAngle'\n | 'interpolate'\n | 'tension'\n | 'orient'\n | 'url'\n | 'align'\n | 'baseline'\n | 'text'\n | 'dir'\n | 'ellipsis'\n | 'limit'\n | 'dx'\n | 'dy'\n | 'radius'\n | 'theta'\n | 'angle'\n | 'font'\n | 'fontSize'\n | 'fontWeight'\n | 'fontStyle'\n | 'tooltip'\n | 'href'\n | 'cursor'\n | 'defined'\n | 'cornerRadius'\n | 'cornerRadiusTopLeft'\n | 'cornerRadiusTopRight'\n | 'cornerRadiusBottomRight'\n | 'cornerRadiusBottomLeft'\n | 'scaleX'\n | 'scaleY';\n\nexport type VgEncodeEntry = Partial>;\n\n// TODO: make export interface VgEncodeEntry {\n// x?: VgValueRef\n// y?: VgValueRef\n// ...\n// color?: VgValueRef\n// ...\n// }\n\nexport type VgPostEncodingTransform = VgGeoShapeTransform;\n\nconst VG_MARK_CONFIG_INDEX: Flag = {\n aria: 1,\n description: 1,\n ariaRole: 1,\n ariaRoleDescription: 1,\n blend: 1,\n opacity: 1,\n fill: 1,\n fillOpacity: 1,\n stroke: 1,\n strokeCap: 1,\n strokeWidth: 1,\n strokeOpacity: 1,\n strokeDash: 1,\n strokeDashOffset: 1,\n strokeJoin: 1,\n strokeOffset: 1,\n strokeMiterLimit: 1,\n startAngle: 1,\n endAngle: 1,\n padAngle: 1,\n innerRadius: 1,\n outerRadius: 1,\n size: 1,\n shape: 1,\n interpolate: 1,\n tension: 1,\n orient: 1,\n align: 1,\n baseline: 1,\n text: 1,\n dir: 1,\n dx: 1,\n dy: 1,\n ellipsis: 1,\n limit: 1,\n radius: 1,\n theta: 1,\n angle: 1,\n font: 1,\n fontSize: 1,\n fontWeight: 1,\n fontStyle: 1,\n lineBreak: 1,\n lineHeight: 1,\n cursor: 1,\n href: 1,\n tooltip: 1,\n cornerRadius: 1,\n cornerRadiusTopLeft: 1,\n cornerRadiusTopRight: 1,\n cornerRadiusBottomLeft: 1,\n cornerRadiusBottomRight: 1,\n aspect: 1,\n width: 1,\n height: 1,\n url: 1,\n smooth: 1\n\n // commented below are vg channel that do not have mark config.\n // x: 1,\n // y: 1,\n // x2: 1,\n // y2: 1,\n\n // xc'|'yc'\n // clip: 1,\n // path: 1,\n // url: 1,\n};\n\nexport const VG_MARK_CONFIGS = keys(VG_MARK_CONFIG_INDEX);\n\nexport const VG_MARK_INDEX: Flag = {\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n};\n\n// Vega's cornerRadius channels.\nexport const VG_CORNERRADIUS_CHANNELS = [\n 'cornerRadius',\n 'cornerRadiusTopLeft',\n 'cornerRadiusTopRight',\n 'cornerRadiusBottomLeft',\n 'cornerRadiusBottomRight'\n] as const;\n\nexport interface VgComparator {\n field?: string | string[];\n order?: SortOrder | SortOrder[];\n}\n\nexport interface VgJoinAggregateTransform {\n type: 'joinaggregate';\n as?: string[];\n ops?: AggregateOp[];\n fields?: string[];\n groupby?: string[];\n}\n","import {ExprRef, SignalRef, Text} from 'vega';\nimport {array, isArray, stringValue} from 'vega-util';\nimport {AxisConfig, ConditionalAxisProperty} from '../axis';\nimport {\n ConditionalPredicate,\n DatumDef,\n FieldDef,\n FieldDefBase,\n FieldRefOption,\n OrderFieldDef,\n Value,\n ValueDef,\n vgField\n} from '../channeldef';\nimport {Config, StyleConfigIndex} from '../config';\nimport {isExprRef} from '../expr';\nimport {Mark, MarkConfig, MarkDef} from '../mark';\nimport {SortFields} from '../sort';\nimport {isText} from '../title';\nimport {deepEqual, getFirstDefined} from '../util';\nimport {isSignalRef, VgEncodeChannel, VgEncodeEntry, VgValueRef} from '../vega.schema';\nimport {AxisComponentProps} from './axis/component';\nimport {Explicit} from './split';\nimport {UnitModel} from './unit';\n\nexport const BIN_RANGE_DELIMITER = ' \\u2013 ';\n\nexport function signalOrValueRefWithCondition(\n val: ConditionalAxisProperty\n): ConditionalAxisProperty {\n const condition = isArray(val.condition)\n ? (val.condition as ConditionalPredicate | ExprRef | SignalRef>[]).map(conditionalSignalRefOrValue)\n : conditionalSignalRefOrValue(val.condition);\n\n return {\n ...signalRefOrValue>(val),\n condition\n };\n}\n\nexport function signalRefOrValue(value: T | SignalRef | ExprRef): T | SignalRef {\n if (isExprRef(value)) {\n const {expr, ...rest} = value;\n return {signal: expr, ...rest};\n }\n return value;\n}\n\nexport function conditionalSignalRefOrValue | DatumDef | ValueDef>(\n value: ConditionalPredicate\n): ConditionalPredicate {\n if (isExprRef(value)) {\n const {expr, ...rest} = value;\n return {signal: expr, ...rest};\n }\n return value;\n}\n\nexport function signalOrValueRef(value: T | SignalRef | ExprRef): {value: T} | SignalRef {\n if (isExprRef(value)) {\n const {expr, ...rest} = value;\n return {signal: expr, ...rest};\n }\n if (isSignalRef(value)) {\n return value;\n }\n return value !== undefined ? {value} : undefined;\n}\n\nexport function exprFromValueOrSignalRef(ref: VgValueRef | SignalRef): string {\n if (isSignalRef(ref)) {\n return ref.signal;\n }\n return stringValue(ref.value);\n}\n\nexport function signalOrStringValue(v: SignalRef | any) {\n if (isSignalRef(v)) {\n return v.signal;\n }\n return v == null ? null : stringValue(v);\n}\n\nexport function applyMarkConfig(e: VgEncodeEntry, model: UnitModel, propsList: (keyof MarkConfig)[]) {\n for (const property of propsList) {\n const value = getMarkConfig(property, model.markDef, model.config);\n if (value !== undefined) {\n e[property] = signalOrValueRef(value);\n }\n }\n return e;\n}\n\nexport function getStyles(mark: MarkDef): string[] {\n return [].concat(mark.type, mark.style ?? []);\n}\n\nexport function getMarkPropOrConfig

(\n channel: P,\n mark: MarkDef,\n config: Config,\n opt: {\n vgChannel?: VgEncodeChannel;\n ignoreVgConfig?: boolean;\n } = {}\n): MarkDef[P] {\n const {vgChannel, ignoreVgConfig} = opt;\n if (vgChannel && mark[vgChannel] !== undefined) {\n return mark[vgChannel];\n } else if (mark[channel] !== undefined) {\n return mark[channel];\n } else if (ignoreVgConfig && (!vgChannel || vgChannel === channel)) {\n return undefined;\n }\n\n return getMarkConfig(channel, mark, config, opt);\n}\n\n/**\n * Return property value from style or mark specific config property if exists.\n * Otherwise, return general mark specific config.\n */\nexport function getMarkConfig

(\n channel: P,\n mark: MarkDef,\n config: Config,\n {vgChannel}: {vgChannel?: VgEncodeChannel} = {}\n): MarkDef[P] {\n return getFirstDefined[P]>(\n // style config has highest precedence\n vgChannel ? getMarkStyleConfig(channel, mark, config.style) : undefined,\n getMarkStyleConfig(channel, mark, config.style),\n // then mark-specific config\n vgChannel ? config[mark.type][vgChannel] : undefined,\n\n config[mark.type][channel as any], // Need to cast because MarkDef doesn't perfectly match with AnyMarkConfig, but if the type isn't available, we'll get nothing here, which is fine\n\n // If there is vgChannel, skip vl channel.\n // For example, vl size for text is vg fontSize, but config.mark.size is only for point size.\n vgChannel ? config.mark[vgChannel] : config.mark[channel as any] // Need to cast for the same reason as above\n );\n}\n\nexport function getMarkStyleConfig

(\n prop: P,\n mark: MarkDef,\n styleConfigIndex: StyleConfigIndex\n) {\n return getStyleConfig(prop, getStyles(mark), styleConfigIndex);\n}\n\nexport function getStyleConfig

>(\n p: P,\n styles: string | string[],\n styleConfigIndex: StyleConfigIndex\n) {\n styles = array(styles);\n let value;\n for (const style of styles) {\n const styleConfig = styleConfigIndex[style];\n\n if (styleConfig && styleConfig[p as string] !== undefined) {\n value = styleConfig[p as string];\n }\n }\n return value;\n}\n\n/**\n * Return Vega sort parameters (tuple of field and order).\n */\nexport function sortParams(\n orderDef: OrderFieldDef | OrderFieldDef[],\n fieldRefOption?: FieldRefOption\n): SortFields {\n return array(orderDef).reduce(\n (s, orderChannelDef) => {\n s.field.push(vgField(orderChannelDef, fieldRefOption));\n s.order.push(orderChannelDef.sort ?? 'ascending');\n return s;\n },\n {field: [], order: []}\n );\n}\n\nexport type AxisTitleComponent = AxisComponentProps['title'];\n\nexport function mergeTitleFieldDefs(f1: readonly FieldDefBase[], f2: readonly FieldDefBase[]) {\n const merged = [...f1];\n\n f2.forEach(fdToMerge => {\n for (const fieldDef1 of merged) {\n // If already exists, no need to append to merged array\n if (deepEqual(fieldDef1, fdToMerge)) {\n return;\n }\n }\n merged.push(fdToMerge);\n });\n return merged;\n}\n\nexport function mergeTitle(title1: Text | SignalRef, title2: Text | SignalRef) {\n if (deepEqual(title1, title2) || !title2) {\n // if titles are the same or title2 is falsy\n return title1;\n } else if (!title1) {\n // if title1 is falsy\n return title2;\n } else {\n return [...array(title1), ...array(title2)].join(', ');\n }\n}\n\nexport function mergeTitleComponent(v1: Explicit, v2: Explicit) {\n const v1Val = v1.value;\n const v2Val = v2.value;\n\n if (v1Val == null || v2Val === null) {\n return {\n explicit: v1.explicit,\n value: null\n };\n } else if ((isText(v1Val) || isSignalRef(v1Val)) && (isText(v2Val) || isSignalRef(v2Val))) {\n return {\n explicit: v1.explicit,\n value: mergeTitle(v1Val, v2Val)\n };\n } else if (isText(v1Val) || isSignalRef(v1Val)) {\n return {\n explicit: v1.explicit,\n value: v1Val\n };\n } else if (isText(v2Val) || isSignalRef(v2Val)) {\n return {\n explicit: v1.explicit,\n value: v2Val\n };\n } else if (!isText(v1Val) && !isSignalRef(v1Val) && !isText(v2Val) && !isSignalRef(v2Val)) {\n return {\n explicit: v1.explicit,\n value: mergeTitleFieldDefs(v1Val, v2Val)\n };\n }\n /* istanbul ignore next: Condition should not happen -- only for warning in development. */\n throw new Error('It should never reach here');\n}\n","/**\n * Collection of all Vega-Lite Error Messages\n */\nimport {AggregateOp, SignalRef} from 'vega';\nimport {Aggregate} from '../aggregate';\nimport {Channel, ExtendedChannel, FacetChannel, getSizeChannel, PositionScaleChannel, ScaleChannel} from '../channel';\nimport {HiddenCompositeAggregate, TypedFieldDef, Value} from '../channeldef';\nimport {SplitParentProperty} from '../compile/split';\nimport {CompositeMark} from '../compositemark';\nimport {ErrorBarCenter, ErrorBarExtent} from '../compositemark/errorbar';\nimport {DateTime, DateTimeExpr} from '../datetime';\nimport {ExprRef} from '../expr';\nimport {Mark} from '../mark';\nimport {Projection} from '../projection';\nimport {ScaleType} from '../scale';\nimport {GenericSpec} from '../spec';\nimport {Type} from '../type';\nimport {stringify} from '../util';\nimport {VgSortField} from '../vega.schema';\n\nexport function invalidSpec(spec: GenericSpec) {\n return `Invalid specification ${stringify(\n spec\n )}. Make sure the specification includes at least one of the following properties: \"mark\", \"layer\", \"facet\", \"hconcat\", \"vconcat\", \"concat\", or \"repeat\".`;\n}\n\n// FIT\nexport const FIT_NON_SINGLE = 'Autosize \"fit\" only works for single views and layered views.';\n\nexport function containerSizeNonSingle(name: 'width' | 'height') {\n const uName = name == 'width' ? 'Width' : 'Height';\n return `${uName} \"container\" only works for single views and layered views.`;\n}\n\nexport function containerSizeNotCompatibleWithAutosize(name: 'width' | 'height') {\n const uName = name == 'width' ? 'Width' : 'Height';\n const fitDirection = name == 'width' ? 'x' : 'y';\n return `${uName} \"container\" only works well with autosize \"fit\" or \"fit-${fitDirection}\".`;\n}\n\nexport function droppingFit(channel?: PositionScaleChannel) {\n return channel\n ? `Dropping \"fit-${channel}\" because spec has discrete ${getSizeChannel(channel)}.`\n : `Dropping \"fit\" because spec has discrete size.`;\n}\n\n// VIEW SIZE\n\nexport function unknownField(channel: Channel) {\n return `Unknown field for ${channel}. Cannot calculate view size.`;\n}\n\n// SELECTION\nexport function cannotProjectOnChannelWithoutField(channel: Channel) {\n return `Cannot project a selection on encoding channel \"${channel}\", which has no field.`;\n}\n\nexport function cannotProjectAggregate(channel: Channel, aggregate: Aggregate | HiddenCompositeAggregate) {\n return `Cannot project a selection on encoding channel \"${channel}\" as it uses an aggregate function (\"${aggregate}\").`;\n}\n\nexport function nearestNotSupportForContinuous(mark: string) {\n return `The \"nearest\" transform is not supported for ${mark} marks.`;\n}\n\nexport function selectionNotSupported(mark: CompositeMark) {\n return `Selection not supported for ${mark} yet.`;\n}\n\nexport function selectionNotFound(name: string) {\n return `Cannot find a selection named \"${name}\".`;\n}\n\nexport const SCALE_BINDINGS_CONTINUOUS =\n 'Scale bindings are currently only supported for scales with unbinned, continuous domains.';\n\nexport const LEGEND_BINDINGS_MUST_HAVE_PROJECTION =\n 'Legend bindings are only supported for selections over an individual field or encoding channel.';\nexport function cannotLookupVariableParameter(name: string) {\n return `Lookups can only be performed on selection parameters. \"${name}\" is a variable parameter.`;\n}\n\nexport function noSameUnitLookup(name: string) {\n return (\n `Cannot define and lookup the \"${name}\" selection in the same view. ` +\n `Try moving the lookup into a second, layered view?`\n );\n}\n\nexport const NEEDS_SAME_SELECTION = 'The same selection must be used to override scale domains in a layered view.';\n\nexport const INTERVAL_INITIALIZED_WITH_X_Y = 'Interval selections should be initialized using \"x\" and/or \"y\" keys.';\n\n// REPEAT\nexport function noSuchRepeatedValue(field: string) {\n return `Unknown repeated value \"${field}\".`;\n}\n\nexport function columnsNotSupportByRowCol(type: 'facet' | 'repeat') {\n return `The \"columns\" property cannot be used when \"${type}\" has nested row/column.`;\n}\n\n// CONCAT / REPEAT\nexport const CONCAT_CANNOT_SHARE_AXIS =\n 'Axes cannot be shared in concatenated or repeated views yet (https://github.com/vega/vega-lite/issues/2415).';\n\n// DATA\nexport function unrecognizedParse(p: string) {\n return `Unrecognized parse \"${p}\".`;\n}\n\nexport function differentParse(field: string, local: string, ancestor: string) {\n return `An ancestor parsed field \"${field}\" as ${ancestor} but a child wants to parse the field as ${local}.`;\n}\n\nexport const ADD_SAME_CHILD_TWICE = 'Attempt to add the same child twice.';\n\n// TRANSFORMS\nexport function invalidTransformIgnored(transform: any) {\n return `Ignoring an invalid transform: ${stringify(transform)}.`;\n}\n\nexport const NO_FIELDS_NEEDS_AS =\n 'If \"from.fields\" is not specified, \"as\" has to be a string that specifies the key to be used for the data from the secondary source.';\n\n// ENCODING & FACET\n\nexport function customFormatTypeNotAllowed(channel: ExtendedChannel) {\n return `Config.customFormatTypes is not true, thus custom format type and format for channel ${channel} are dropped.`;\n}\n\nexport function projectionOverridden(opt: {\n parentProjection: Projection;\n projection: Projection;\n}) {\n const {parentProjection, projection} = opt;\n return `Layer's shared projection ${stringify(parentProjection)} is overridden by a child projection ${stringify(\n projection\n )}.`;\n}\n\nexport const REPLACE_ANGLE_WITH_THETA = 'Arc marks uses theta channel rather than angle, replacing angle with theta.';\n\nexport function primitiveChannelDef(\n channel: ExtendedChannel,\n type: 'string' | 'number' | 'boolean',\n value: Exclude\n) {\n return `Channel ${channel} is a ${type}. Converted to {value: ${stringify(value)}}.`;\n}\n\nexport function invalidFieldType(type: Type) {\n return `Invalid field type \"${type}\".`;\n}\n\nexport function invalidFieldTypeForCountAggregate(type: Type, aggregate: Aggregate | string) {\n return `Invalid field type \"${type}\" for aggregate: \"${aggregate}\", using \"quantitative\" instead.`;\n}\n\nexport function invalidAggregate(aggregate: AggregateOp | string) {\n return `Invalid aggregation operator \"${aggregate}\".`;\n}\n\nexport function missingFieldType(channel: Channel, newType: Type) {\n return `Missing type for channel \"${channel}\", using \"${newType}\" instead.`;\n}\nexport function droppingColor(type: 'encoding' | 'property', opt: {fill?: boolean; stroke?: boolean}) {\n const {fill, stroke} = opt;\n return `Dropping color ${type} as the plot also has ${\n fill && stroke ? 'fill and stroke' : fill ? 'fill' : 'stroke'\n }.`;\n}\n\nexport function relativeBandSizeNotSupported(sizeChannel: 'width' | 'height') {\n return `Position range does not support relative band size for ${sizeChannel}.`;\n}\n\nexport function emptyFieldDef(fieldDef: unknown, channel: ExtendedChannel) {\n return `Dropping ${stringify(\n fieldDef\n )} from channel \"${channel}\" since it does not contain any data field, datum, value, or signal.`;\n}\n\nexport const LINE_WITH_VARYING_SIZE =\n 'Line marks cannot encode size with a non-groupby field. You may want to use trail marks instead.';\n\nexport function incompatibleChannel(\n channel: ExtendedChannel,\n markOrFacet: Mark | 'facet' | CompositeMark,\n when?: string\n) {\n return `${channel} dropped as it is incompatible with \"${markOrFacet}\"${when ? ` when ${when}` : ''}.`;\n}\n\nexport function invalidEncodingChannel(channel: ExtendedChannel) {\n return `${channel}-encoding is dropped as ${channel} is not a valid encoding channel.`;\n}\n\nexport function channelShouldBeDiscrete(channel: ExtendedChannel) {\n return `${channel} encoding should be discrete (ordinal / nominal / binned).`;\n}\n\nexport function channelShouldBeDiscreteOrDiscretizing(channel: ExtendedChannel) {\n return `${channel} encoding should be discrete (ordinal / nominal / binned) or use a discretizing scale (e.g. threshold).`;\n}\n\nexport function facetChannelDropped(channels: FacetChannel[]) {\n return `Facet encoding dropped as ${channels.join(' and ')} ${channels.length > 1 ? 'are' : 'is'} also specified.`;\n}\n\nexport function discreteChannelCannotEncode(channel: Channel, type: Type) {\n return `Using discrete channel \"${channel}\" to encode \"${type}\" field can be misleading as it does not encode ${\n type === 'ordinal' ? 'order' : 'magnitude'\n }.`;\n}\n\n// MARK\n\nexport function rangeMarkAlignmentCannotBeExpression(align: 'align' | 'baseline') {\n return `The ${align} for range marks cannot be an expression`;\n}\n\nexport function lineWithRange(hasX2: boolean, hasY2: boolean) {\n const channels = hasX2 && hasY2 ? 'x2 and y2' : hasX2 ? 'x2' : 'y2';\n return `Line mark is for continuous lines and thus cannot be used with ${channels}. We will use the rule mark (line segments) instead.`;\n}\n\nexport function orientOverridden(original: string, actual: string) {\n return `Specified orient \"${original}\" overridden with \"${actual}\".`;\n}\n\n// SCALE\nexport const CANNOT_UNION_CUSTOM_DOMAIN_WITH_FIELD_DOMAIN =\n 'Custom domain scale cannot be unioned with default field-based domain.';\n\nexport function cannotUseScalePropertyWithNonColor(prop: string) {\n return `Cannot use the scale property \"${prop}\" with non-color channel.`;\n}\n\nexport function cannotUseRelativeBandSizeWithNonBandScale(scaleType: ScaleType) {\n return `Cannot use the relative band size with ${scaleType} scale.`;\n}\n\nexport function unaggregateDomainHasNoEffectForRawField(fieldDef: TypedFieldDef) {\n return `Using unaggregated domain with raw field has no effect (${stringify(fieldDef)}).`;\n}\n\nexport function unaggregateDomainWithNonSharedDomainOp(aggregate: Aggregate | string) {\n return `Unaggregated domain not applicable for \"${aggregate}\" since it produces values outside the origin domain of the source data.`;\n}\n\nexport function unaggregatedDomainWithLogScale(fieldDef: TypedFieldDef) {\n return `Unaggregated domain is currently unsupported for log scale (${stringify(fieldDef)}).`;\n}\n\nexport function cannotApplySizeToNonOrientedMark(mark: Mark) {\n return `Cannot apply size to non-oriented mark \"${mark}\".`;\n}\n\nexport function scaleTypeNotWorkWithChannel(channel: Channel, scaleType: ScaleType, defaultScaleType: ScaleType) {\n return `Channel \"${channel}\" does not work with \"${scaleType}\" scale. We are using \"${defaultScaleType}\" scale instead.`;\n}\n\nexport function scaleTypeNotWorkWithFieldDef(scaleType: ScaleType, defaultScaleType: ScaleType) {\n return `FieldDef does not work with \"${scaleType}\" scale. We are using \"${defaultScaleType}\" scale instead.`;\n}\n\nexport function scalePropertyNotWorkWithScaleType(scaleType: ScaleType, propName: string, channel: Channel) {\n return `${channel}-scale's \"${propName}\" is dropped as it does not work with ${scaleType} scale.`;\n}\n\nexport function scaleTypeNotWorkWithMark(mark: Mark, scaleType: ScaleType) {\n return `Scale type \"${scaleType}\" does not work with mark \"${mark}\".`;\n}\n\nexport function stepDropped(channel: 'width' | 'height') {\n return `The step for \"${channel}\" is dropped because the ${channel === 'width' ? 'x' : 'y'} is continuous.`;\n}\n\nexport function mergeConflictingProperty(\n property: string | number | symbol,\n propertyOf: SplitParentProperty,\n v1: T,\n v2: T\n) {\n return `Conflicting ${propertyOf.toString()} property \"${property.toString()}\" (${stringify(v1)} and ${stringify(\n v2\n )}). Using ${stringify(v1)}.`;\n}\n\nexport function mergeConflictingDomainProperty(property: 'domains', propertyOf: SplitParentProperty, v1: T, v2: T) {\n return `Conflicting ${propertyOf.toString()} property \"${property.toString()}\" (${stringify(v1)} and ${stringify(\n v2\n )}). Using the union of the two domains.`;\n}\n\nexport function independentScaleMeansIndependentGuide(channel: Channel) {\n return `Setting the scale to be independent for \"${channel}\" means we also have to set the guide (axis or legend) to be independent.`;\n}\n\nexport function domainSortDropped(sort: VgSortField) {\n return `Dropping sort property ${stringify(\n sort\n )} as unioned domains only support boolean or op \"count\", \"min\", and \"max\".`;\n}\n\nexport const MORE_THAN_ONE_SORT =\n 'Domains that should be unioned has conflicting sort properties. Sort will be set to true.';\n\nexport const FACETED_INDEPENDENT_DIFFERENT_SOURCES =\n 'Detected faceted independent scales that union domain of multiple fields from different data sources. We will use the first field. The result view size may be incorrect.';\n\nexport const FACETED_INDEPENDENT_SAME_FIELDS_DIFFERENT_SOURCES =\n 'Detected faceted independent scales that union domain of the same fields from different source. We will assume that this is the same field from a different fork of the same data source. However, if this is not the case, the result view size may be incorrect.';\n\nexport const FACETED_INDEPENDENT_SAME_SOURCE =\n 'Detected faceted independent scales that union domain of multiple fields from the same data source. We will use the first field. The result view size may be incorrect.';\n\n// AXIS\nexport const INVALID_CHANNEL_FOR_AXIS = 'Invalid channel for axis.';\n\n// STACK\nexport function cannotStackRangedMark(channel: Channel) {\n return `Cannot stack \"${channel}\" if there is already \"${channel}2\".`;\n}\n\nexport function cannotStackNonLinearScale(scaleType: ScaleType) {\n return `Cannot stack non-linear scale (${scaleType}).`;\n}\n\nexport function stackNonSummativeAggregate(aggregate: Aggregate | string) {\n return `Stacking is applied even though the aggregate function is non-summative (\"${aggregate}\").`;\n}\n\n// TIMEUNIT\nexport function invalidTimeUnit(unitName: string, value: string | number) {\n return `Invalid ${unitName}: ${stringify(value)}.`;\n}\n\nexport function droppedDay(d: DateTime | DateTimeExpr) {\n return `Dropping day from datetime ${stringify(d)} as day cannot be combined with other units.`;\n}\n\nexport function errorBarCenterAndExtentAreNotNeeded(center: ErrorBarCenter, extent: ErrorBarExtent) {\n return `${extent ? 'extent ' : ''}${extent && center ? 'and ' : ''}${center ? 'center ' : ''}${\n extent && center ? 'are ' : 'is '\n }not needed when data are aggregated.`;\n}\n\nexport function errorBarCenterIsUsedWithWrongExtent(\n center: ErrorBarCenter,\n extent: ErrorBarExtent,\n mark: 'errorbar' | 'errorband'\n) {\n return `${center} is not usually used with ${extent} for ${mark}.`;\n}\n\nexport function errorBarContinuousAxisHasCustomizedAggregate(\n aggregate: Aggregate | string,\n compositeMark: CompositeMark\n) {\n return `Continuous axis should not have customized aggregation function ${aggregate}; ${compositeMark} already agregates the axis.`;\n}\n\nexport function errorBand1DNotSupport(property: 'interpolate' | 'tension') {\n return `1D error band does not support ${property}.`;\n}\n\n// CHANNEL\nexport function channelRequiredForBinned(channel: Channel) {\n return `Channel ${channel} is required for \"binned\" bin.`;\n}\n\nexport function channelShouldNotBeUsedForBinned(channel: ExtendedChannel) {\n return `Channel ${channel} should not be used with \"binned\" bin.`;\n}\n\nexport function domainRequiredForThresholdScale(channel: ScaleChannel) {\n return `Domain for ${channel} is required for threshold scale.`;\n}\n","/**\n * Vega-Lite's singleton logger utility.\n */\n\nimport {Debug, Error as ErrorLevel, Info, logger, LoggerInterface, Warn} from 'vega-util';\nexport * as message from './message';\n\n/**\n * Main (default) Vega Logger instance for Vega-Lite.\n */\nconst main = logger(Warn);\nlet current: LoggerInterface = main;\n\n/**\n * Logger tool for checking if the code throws correct warning.\n */\nexport class LocalLogger implements LoggerInterface {\n public warns: any[] = [];\n public infos: any[] = [];\n public debugs: any[] = [];\n\n #level: number = Warn;\n\n public level(): number;\n public level(_: number): this;\n public level(_?: number) {\n if (_) {\n this.#level = _;\n return this;\n }\n return this.#level;\n }\n\n public warn(...args: readonly any[]) {\n if (this.#level >= Warn) this.warns.push(...args);\n return this;\n }\n\n public info(...args: readonly any[]) {\n if (this.#level >= Info) this.infos.push(...args);\n return this;\n }\n\n public debug(...args: readonly any[]) {\n if (this.#level >= Debug) this.debugs.push(...args);\n return this;\n }\n\n public error(...args: readonly any[]): this {\n if (this.#level >= ErrorLevel) throw Error(...args);\n return this;\n }\n}\n\nexport function wrap(f: (logger: LocalLogger) => void) {\n return () => {\n current = new LocalLogger();\n f(current as LocalLogger);\n reset();\n };\n}\n\n/**\n * Set the singleton logger to be a custom logger.\n */\nexport function set(newLogger: LoggerInterface) {\n current = newLogger;\n return current;\n}\n\n/**\n * Reset the main logger to use the default Vega Logger.\n */\nexport function reset() {\n current = main;\n return current;\n}\n\nexport function error(...args: readonly any[]) {\n current.error(...args);\n}\n\nexport function warn(...args: readonly any[]) {\n current.warn(...args);\n}\n\nexport function info(...args: readonly any[]) {\n current.info(...args);\n}\n\nexport function debug(...args: readonly any[]) {\n current.debug(...args);\n}\n","// DateTime definition object\n\nimport {isNumber, isObject} from 'vega-util';\nimport * as log from './log';\nimport {TIMEUNIT_PARTS} from './timeunit';\nimport {duplicate, isNumeric, keys} from './util';\n\n/**\n * @minimum 1\n * @maximum 12\n * @TJS-type integer\n */\nexport type Month = number;\n\n/**\n * @minimum 1\n * @maximum 7\n */\nexport type Day = number;\n\n/**\n * Object for defining datetime in Vega-Lite Filter.\n * If both month and quarter are provided, month has higher precedence.\n * `day` cannot be combined with other date.\n * We accept string for month and day names.\n */\nexport interface DateTime {\n /**\n * Integer value representing the year.\n * @TJS-type integer\n */\n year?: number;\n\n /**\n * Integer value representing the quarter of the year (from 1-4).\n * @minimum 1\n * @maximum 4\n * @TJS-type integer\n */\n quarter?: number;\n\n /**\n * One of:\n * (1) integer value representing the month from `1`-`12`. `1` represents January;\n * (2) case-insensitive month name (e.g., `\"January\"`);\n * (3) case-insensitive, 3-character short month name (e.g., `\"Jan\"`).\n */\n month?: Month | string;\n\n /**\n * Integer value representing the date (day of the month) from 1-31.\n * @minimum 1\n * @maximum 31\n * @TJS-type integer\n */\n date?: number;\n\n /**\n * Value representing the day of a week. This can be one of:\n * (1) integer value -- `1` represents Monday;\n * (2) case-insensitive day name (e.g., `\"Monday\"`);\n * (3) case-insensitive, 3-character short day name (e.g., `\"Mon\"`).\n *\n * **Warning:** A DateTime definition object with `day`** should not be combined with `year`, `quarter`, `month`, or `date`.\n */\n day?: Day | string;\n\n /**\n * Integer value representing the hour of a day from 0-23.\n * @minimum 0\n * @maximum 24\n * @TJS-type integer\n */\n hours?: number;\n\n /**\n * Integer value representing the minute segment of time from 0-59.\n * @minimum 0\n * @maximum 60\n * @TJS-type integer\n */\n minutes?: number;\n\n /**\n * Integer value representing the second segment (0-59) of a time value\n * @minimum 0\n * @maximum 60\n * @TJS-type integer\n */\n seconds?: number;\n\n /**\n * Integer value representing the millisecond segment of time.\n * @minimum 0\n * @maximum 1000\n * @TJS-type integer\n */\n milliseconds?: number;\n\n /**\n * A boolean flag indicating if date time is in utc time. If false, the date time is in local time\n */\n utc?: boolean;\n}\n\n/**\n * Internal Object for defining datetime expressions.\n * This is an expression version of DateTime.\n * If both month and quarter are provided, month has higher precedence.\n * `day` cannot be combined with other date.\n */\nexport interface DateTimeExpr {\n year?: string;\n quarter?: string;\n month?: string;\n date?: string;\n day?: string;\n hours?: string;\n minutes?: string;\n seconds?: string;\n milliseconds?: string;\n utc?: boolean;\n}\n\nexport function isDateTime(o: any): o is DateTime {\n if (o && isObject(o)) {\n for (const part of TIMEUNIT_PARTS) {\n if (part in o) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport const MONTHS = [\n 'january',\n 'february',\n 'march',\n 'april',\n 'may',\n 'june',\n 'july',\n 'august',\n 'september',\n 'october',\n 'november',\n 'december'\n];\nexport const SHORT_MONTHS = MONTHS.map(m => m.substr(0, 3));\n\nexport const DAYS = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];\nexport const SHORT_DAYS = DAYS.map(d => d.substr(0, 3));\n\nfunction normalizeQuarter(q: number | string): number {\n if (isNumeric(q)) {\n q = +q;\n }\n\n if (isNumber(q)) {\n if (q > 4) {\n log.warn(log.message.invalidTimeUnit('quarter', q));\n }\n // We accept 1-based quarter, so need to readjust to 0-based quarter\n return q - 1;\n } else {\n // Invalid quarter\n throw new Error(log.message.invalidTimeUnit('quarter', q));\n }\n}\n\nfunction normalizeMonth(m: string | number): number {\n if (isNumeric(m)) {\n m = +m;\n }\n\n if (isNumber(m)) {\n // We accept 1-based month, so need to readjust to 0-based month\n return m - 1;\n } else {\n const lowerM = m.toLowerCase();\n const monthIndex = MONTHS.indexOf(lowerM);\n if (monthIndex !== -1) {\n return monthIndex; // 0 for january, ...\n }\n const shortM = lowerM.substr(0, 3);\n const shortMonthIndex = SHORT_MONTHS.indexOf(shortM);\n if (shortMonthIndex !== -1) {\n return shortMonthIndex;\n }\n\n // Invalid month\n throw new Error(log.message.invalidTimeUnit('month', m));\n }\n}\n\nfunction normalizeDay(d: string | number): number {\n if (isNumeric(d)) {\n d = +d;\n }\n\n if (isNumber(d)) {\n // mod so that this can be both 0-based where 0 = sunday\n // and 1-based where 7=sunday\n return d % 7;\n } else {\n const lowerD = d.toLowerCase();\n const dayIndex = DAYS.indexOf(lowerD);\n if (dayIndex !== -1) {\n return dayIndex; // 0 for january, ...\n }\n const shortD = lowerD.substr(0, 3);\n const shortDayIndex = SHORT_DAYS.indexOf(shortD);\n if (shortDayIndex !== -1) {\n return shortDayIndex;\n }\n // Invalid day\n throw new Error(log.message.invalidTimeUnit('day', d));\n }\n}\n\n/**\n * @param d the date.\n * @param normalize whether to normalize quarter, month, day. This should probably be true if d is a DateTime.\n * @returns array of date time parts [year, month, day, hours, minutes, seconds, milliseconds]\n */\nfunction dateTimeParts(d: DateTime | DateTimeExpr, normalize: boolean) {\n const parts: (string | number)[] = [];\n\n if (normalize && d.day !== undefined) {\n if (keys(d).length > 1) {\n log.warn(log.message.droppedDay(d));\n d = duplicate(d);\n delete d.day;\n }\n }\n\n if (d.year !== undefined) {\n parts.push(d.year);\n } else {\n // Just like Vega's timeunit transform, set default year to 2012, so domain conversion will be compatible with Vega\n // Note: 2012 is a leap year (and so the date February 29 is respected) that begins on a Sunday (and so days of the week will order properly at the beginning of the year).\n parts.push(2012);\n }\n\n if (d.month !== undefined) {\n const month = normalize ? normalizeMonth(d.month) : d.month;\n parts.push(month);\n } else if (d.quarter !== undefined) {\n const quarter = normalize ? normalizeQuarter(d.quarter) : d.quarter;\n parts.push(isNumber(quarter) ? quarter * 3 : `${quarter}*3`);\n } else {\n parts.push(0); // months start at zero in JS\n }\n\n if (d.date !== undefined) {\n parts.push(d.date);\n } else if (d.day !== undefined) {\n // HACK: Day only works as a standalone unit\n // This is only correct because we always set year to 2006 for day\n const day = normalize ? normalizeDay(d.day) : d.day;\n parts.push(isNumber(day) ? day + 1 : `${day}+1`);\n } else {\n parts.push(1); // Date starts at 1 in JS\n }\n\n // Note: can't use TimeUnit enum here as importing it will create\n // circular dependency problem!\n for (const timeUnit of ['hours', 'minutes', 'seconds', 'milliseconds'] as const) {\n const unit = d[timeUnit];\n parts.push(typeof unit === 'undefined' ? 0 : unit);\n }\n\n return parts;\n}\n\n/**\n * Return Vega expression for a date time.\n *\n * @param d the date time.\n * @returns the Vega expression.\n */\nexport function dateTimeToExpr(d: DateTime) {\n const parts: (string | number)[] = dateTimeParts(d, true);\n\n const string = parts.join(', ');\n\n if (d.utc) {\n return `utc(${string})`;\n } else {\n return `datetime(${string})`;\n }\n}\n\n/**\n * Return Vega expression for a date time expression.\n *\n * @param d the internal date time object with expression.\n * @returns the Vega expression.\n */\nexport function dateTimeExprToExpr(d: DateTimeExpr) {\n const parts: (string | number)[] = dateTimeParts(d, false);\n\n const string = parts.join(', ');\n\n if (d.utc) {\n return `utc(${string})`;\n } else {\n return `datetime(${string})`;\n }\n}\n\n/**\n * @param d the date time.\n * @returns the timestamp.\n */\nexport function dateTimeToTimestamp(d: DateTime) {\n const parts: (string | number)[] = dateTimeParts(d, true);\n\n if (d.utc) {\n return +new Date(Date.UTC(...(parts as [any, any])));\n } else {\n return +new Date(...(parts as [any]));\n }\n}\n","import {isObject, isString} from 'vega-util';\nimport {DateTimeExpr, dateTimeExprToExpr} from './datetime';\nimport {accessPathWithDatum, keys, stringify, varName} from './util';\n\n/** Time Unit that only corresponds to only one part of Date objects. */\nexport const LOCAL_SINGLE_TIMEUNIT_INDEX = {\n year: 1,\n quarter: 1,\n month: 1,\n week: 1,\n day: 1,\n dayofyear: 1,\n date: 1,\n hours: 1,\n minutes: 1,\n seconds: 1,\n milliseconds: 1\n} as const;\n\nexport type LocalSingleTimeUnit = keyof typeof LOCAL_SINGLE_TIMEUNIT_INDEX;\n\nexport const TIMEUNIT_PARTS = keys(LOCAL_SINGLE_TIMEUNIT_INDEX);\n\nexport function isLocalSingleTimeUnit(timeUnit: string): timeUnit is LocalSingleTimeUnit {\n return !!LOCAL_SINGLE_TIMEUNIT_INDEX[timeUnit];\n}\n\nexport const UTC_SINGLE_TIMEUNIT_INDEX = {\n utcyear: 1,\n utcquarter: 1,\n utcmonth: 1,\n utcweek: 1,\n utcday: 1,\n utcdayofyear: 1,\n utcdate: 1,\n utchours: 1,\n utcminutes: 1,\n utcseconds: 1,\n utcmilliseconds: 1\n} as const;\n\nexport type UtcSingleTimeUnit = keyof typeof UTC_SINGLE_TIMEUNIT_INDEX;\n\nexport type SingleTimeUnit = LocalSingleTimeUnit | UtcSingleTimeUnit;\n\nexport const LOCAL_MULTI_TIMEUNIT_INDEX = {\n yearquarter: 1,\n yearquartermonth: 1,\n\n yearmonth: 1,\n yearmonthdate: 1,\n yearmonthdatehours: 1,\n yearmonthdatehoursminutes: 1,\n yearmonthdatehoursminutesseconds: 1,\n\n yearweek: 1,\n yearweekday: 1,\n yearweekdayhours: 1,\n yearweekdayhoursminutes: 1,\n yearweekdayhoursminutesseconds: 1,\n\n yeardayofyear: 1,\n\n quartermonth: 1,\n\n monthdate: 1,\n monthdatehours: 1,\n monthdatehoursminutes: 1,\n monthdatehoursminutesseconds: 1,\n\n weekday: 1,\n weeksdayhours: 1,\n weekdayhoursminutes: 1,\n weekdayhoursminutesseconds: 1,\n\n dayhours: 1,\n dayhoursminutes: 1,\n dayhoursminutesseconds: 1,\n\n hoursminutes: 1,\n hoursminutesseconds: 1,\n\n minutesseconds: 1,\n\n secondsmilliseconds: 1\n} as const;\n\nexport type LocalMultiTimeUnit = keyof typeof LOCAL_MULTI_TIMEUNIT_INDEX;\n\nexport const UTC_MULTI_TIMEUNIT_INDEX = {\n utcyearquarter: 1,\n utcyearquartermonth: 1,\n\n utcyearmonth: 1,\n utcyearmonthdate: 1,\n utcyearmonthdatehours: 1,\n utcyearmonthdatehoursminutes: 1,\n utcyearmonthdatehoursminutesseconds: 1,\n\n utcyearweek: 1,\n utcyearweekday: 1,\n utcyearweekdayhours: 1,\n utcyearweekdayhoursminutes: 1,\n utcyearweekdayhoursminutesseconds: 1,\n\n utcyeardayofyear: 1,\n\n utcquartermonth: 1,\n\n utcmonthdate: 1,\n utcmonthdatehours: 1,\n utcmonthdatehoursminutes: 1,\n utcmonthdatehoursminutesseconds: 1,\n\n utcweekday: 1,\n utcweeksdayhours: 1,\n utcweekdayhoursminutes: 1,\n utcweekdayhoursminutesseconds: 1,\n\n utcdayhours: 1,\n utcdayhoursminutes: 1,\n utcdayhoursminutesseconds: 1,\n\n utchoursminutes: 1,\n utchoursminutesseconds: 1,\n\n utcminutesseconds: 1,\n\n utcsecondsmilliseconds: 1\n} as const;\n\nexport type UtcMultiTimeUnit = keyof typeof UTC_MULTI_TIMEUNIT_INDEX;\n\nexport type MultiTimeUnit = LocalMultiTimeUnit | UtcMultiTimeUnit;\n\nexport type LocalTimeUnit = LocalSingleTimeUnit | LocalMultiTimeUnit;\nexport type UtcTimeUnit = UtcSingleTimeUnit | UtcMultiTimeUnit;\n\nexport function isUTCTimeUnit(t: string): t is UtcTimeUnit {\n return t.startsWith('utc');\n}\n\nexport function getLocalTimeUnit(t: UtcTimeUnit): LocalTimeUnit {\n return t.substr(3) as LocalTimeUnit;\n}\n\nexport type TimeUnit = SingleTimeUnit | MultiTimeUnit;\n\nexport type TimeUnitFormat =\n | 'year'\n | 'year-month'\n | 'year-month-date'\n | 'quarter'\n | 'month'\n | 'date'\n | 'week'\n | 'day'\n | 'hours'\n | 'hours-minutes'\n | 'minutes'\n | 'seconds'\n | 'milliseconds';\n\nexport interface TimeUnitParams {\n /**\n * Defines how date-time values should be binned.\n */\n unit?: TimeUnit;\n\n /**\n * If no `unit` is specified, maxbins is used to infer time units.\n */\n maxbins?: number;\n\n /**\n * The number of steps between bins, in terms of the least\n * significant unit provided.\n */\n step?: number;\n\n /**\n * True to use UTC timezone. Equivalent to using a `utc` prefixed `TimeUnit`.\n */\n utc?: boolean;\n}\n\n// matches vega time unit format specifier\nexport type TimeFormatConfig = Partial>;\n\n// In order of increasing specificity\nexport const VEGALITE_TIMEFORMAT: TimeFormatConfig = {\n 'year-month': '%b %Y ',\n 'year-month-date': '%b %d, %Y '\n};\n\nexport function getTimeUnitParts(timeUnit: TimeUnit): LocalSingleTimeUnit[] {\n return TIMEUNIT_PARTS.filter(part => containsTimeUnit(timeUnit, part));\n}\n\n/** Returns true if fullTimeUnit contains the timeUnit, false otherwise. */\nexport function containsTimeUnit(fullTimeUnit: TimeUnit, timeUnit: TimeUnit) {\n const index = fullTimeUnit.indexOf(timeUnit);\n\n if (index < 0) {\n return false;\n }\n\n // exclude milliseconds\n if (index > 0 && timeUnit === 'seconds' && fullTimeUnit.charAt(index - 1) === 'i') {\n return false;\n }\n\n // exclude dayofyear\n if (fullTimeUnit.length > index + 3 && timeUnit === 'day' && fullTimeUnit.charAt(index + 3) === 'o') {\n return false;\n }\n if (index > 0 && timeUnit === 'year' && fullTimeUnit.charAt(index - 1) === 'f') {\n return false;\n }\n\n return true;\n}\n\n/**\n * Returns Vega expression for a given timeUnit and fieldRef\n */\nexport function fieldExpr(fullTimeUnit: TimeUnit, field: string, {end}: {end: boolean} = {end: false}): string {\n const fieldRef = accessPathWithDatum(field);\n\n const utc = isUTCTimeUnit(fullTimeUnit) ? 'utc' : '';\n\n function func(timeUnit: TimeUnit) {\n if (timeUnit === 'quarter') {\n // quarter starting at 0 (0,3,6,9).\n return `(${utc}quarter(${fieldRef})-1)`;\n } else {\n return `${utc}${timeUnit}(${fieldRef})`;\n }\n }\n\n let lastTimeUnit: TimeUnit;\n\n const dateExpr: DateTimeExpr = {};\n\n for (const part of TIMEUNIT_PARTS) {\n if (containsTimeUnit(fullTimeUnit, part)) {\n dateExpr[part] = func(part);\n lastTimeUnit = part;\n }\n }\n\n if (end) {\n dateExpr[lastTimeUnit] += '+1';\n }\n\n return dateTimeExprToExpr(dateExpr);\n}\n\nexport function timeUnitSpecifierExpression(timeUnit: TimeUnit) {\n if (!timeUnit) {\n return undefined;\n }\n\n const timeUnitParts = getTimeUnitParts(timeUnit);\n return `timeUnitSpecifier(${stringify(timeUnitParts)}, ${stringify(VEGALITE_TIMEFORMAT)})`;\n}\n\n/**\n * Returns the signal expression used for axis labels for a time unit.\n */\nexport function formatExpression(timeUnit: TimeUnit, field: string, isUTCScale: boolean): string {\n if (!timeUnit) {\n return undefined;\n }\n\n const expr = timeUnitSpecifierExpression(timeUnit);\n\n // We only use utcFormat for utc scale\n // For utc time units, the data is already converted as a part of timeUnit transform.\n // Thus, utc time units should use timeFormat to avoid shifting the time twice.\n const utc = isUTCScale || isUTCTimeUnit(timeUnit);\n\n return `${utc ? 'utc' : 'time'}Format(${field}, ${expr})`;\n}\n\nexport function normalizeTimeUnit(timeUnit: TimeUnit | TimeUnitParams): TimeUnitParams {\n if (!timeUnit) {\n return undefined;\n }\n\n let params: TimeUnitParams;\n if (isString(timeUnit)) {\n params = {\n unit: timeUnit\n };\n } else if (isObject(timeUnit)) {\n params = {\n ...timeUnit,\n ...(timeUnit.unit ? {unit: timeUnit.unit} : {})\n };\n }\n\n if (isUTCTimeUnit(params.unit)) {\n params.utc = true;\n params.unit = getLocalTimeUnit(params.unit);\n }\n\n return params;\n}\n\nexport function timeUnitToString(tu: TimeUnit | TimeUnitParams) {\n const {utc, ...rest} = normalizeTimeUnit(tu);\n\n if (rest.unit) {\n return (\n (utc ? 'utc' : '') +\n keys(rest)\n .map(p => varName(`${p === 'unit' ? '' : `_${p}_`}${rest[p]}`))\n .join('')\n );\n } else {\n // when maxbins is specified instead of units\n return (\n (utc ? 'utc' : '') +\n 'timeunit' +\n keys(rest)\n .map(p => varName(`_${p}_${rest[p]}`))\n .join('')\n );\n }\n}\n","import {SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {FieldName, valueExpr, vgField} from './channeldef';\nimport {DateTime} from './datetime';\nimport {ExprRef} from './expr';\nimport {LogicalComposition} from './logical';\nimport {ParameterName} from './parameter';\nimport {fieldExpr as timeUnitFieldExpr, normalizeTimeUnit, TimeUnit, TimeUnitParams} from './timeunit';\nimport {stringify} from './util';\nimport {isSignalRef} from './vega.schema';\n\nexport type Predicate =\n // a) FieldPredicate (but we don't type FieldFilter here so the schema has no nesting\n // and thus the documentation shows all of the types clearly)\n | FieldEqualPredicate\n | FieldRangePredicate\n | FieldOneOfPredicate\n | FieldLTPredicate\n | FieldGTPredicate\n | FieldLTEPredicate\n | FieldGTEPredicate\n | FieldValidPredicate\n // b) Selection Predicate\n | ParameterPredicate\n // c) Vega Expression string\n | string;\n\nexport type FieldPredicate =\n | FieldEqualPredicate\n | FieldLTPredicate\n | FieldGTPredicate\n | FieldLTEPredicate\n | FieldGTEPredicate\n | FieldRangePredicate\n | FieldOneOfPredicate\n | FieldValidPredicate;\n\nexport interface ParameterPredicate {\n /**\n * Filter using a parameter name.\n */\n param: ParameterName;\n /**\n * For selection parameters, the predicate of empty selections returns true by default.\n * Override this behavior, by setting this property `empty: false`.\n */\n empty?: boolean;\n}\n\nexport function isSelectionPredicate(predicate: LogicalComposition): predicate is ParameterPredicate {\n return predicate?.['param'];\n}\n\nexport interface FieldPredicateBase {\n // TODO: support aggregate\n\n /**\n * Time unit for the field to be tested.\n */\n timeUnit?: TimeUnit | TimeUnitParams;\n\n /**\n * Field to be tested.\n */\n field: FieldName;\n}\n\nexport interface FieldEqualPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be equal to.\n */\n equal: string | number | boolean | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldEqualPredicate(predicate: any): predicate is FieldEqualPredicate {\n return predicate && !!predicate.field && predicate.equal !== undefined;\n}\n\nexport interface FieldLTPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be less than.\n */\n lt: string | number | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldLTPredicate(predicate: any): predicate is FieldLTPredicate {\n return predicate && !!predicate.field && predicate.lt !== undefined;\n}\n\nexport interface FieldLTEPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be less than or equals to.\n */\n lte: string | number | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldLTEPredicate(predicate: any): predicate is FieldLTEPredicate {\n return predicate && !!predicate.field && predicate.lte !== undefined;\n}\n\nexport interface FieldGTPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be greater than.\n */\n gt: string | number | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldGTPredicate(predicate: any): predicate is FieldGTPredicate {\n return predicate && !!predicate.field && predicate.gt !== undefined;\n}\n\nexport interface FieldGTEPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be greater than or equals to.\n */\n gte: string | number | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldGTEPredicate(predicate: any): predicate is FieldGTEPredicate {\n return predicate && !!predicate.field && predicate.gte !== undefined;\n}\n\nexport interface FieldRangePredicate extends FieldPredicateBase {\n /**\n * An array of inclusive minimum and maximum values\n * for a field value of a data item to be included in the filtered data.\n * @maxItems 2\n * @minItems 2\n */\n range: (number | DateTime | null | ExprRef | SignalRef)[] | ExprRef | SignalRef;\n}\n\nexport function isFieldRangePredicate(predicate: any): predicate is FieldRangePredicate {\n if (predicate && predicate.field) {\n if (isArray(predicate.range) && predicate.range.length === 2) {\n return true;\n } else if (isSignalRef(predicate.range)) {\n return true;\n }\n }\n return false;\n}\n\nexport interface FieldOneOfPredicate extends FieldPredicateBase {\n /**\n * A set of values that the `field`'s value should be a member of,\n * for a data item included in the filtered data.\n */\n oneOf: string[] | number[] | boolean[] | DateTime[];\n}\n\nexport interface FieldValidPredicate extends FieldPredicateBase {\n /**\n * If set to true the field's value has to be valid, meaning both not `null` and not [`NaN`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN).\n */\n valid: boolean;\n}\n\nexport function isFieldOneOfPredicate(predicate: any): predicate is FieldOneOfPredicate {\n return (\n predicate && !!predicate.field && (isArray(predicate.oneOf) || isArray(predicate.in)) // backward compatibility\n );\n}\n\nexport function isFieldValidPredicate(predicate: any): predicate is FieldValidPredicate {\n return predicate && !!predicate.field && predicate.valid !== undefined;\n}\n\nexport function isFieldPredicate(\n predicate: Predicate\n): predicate is\n | FieldOneOfPredicate\n | FieldEqualPredicate\n | FieldRangePredicate\n | FieldLTPredicate\n | FieldGTPredicate\n | FieldLTEPredicate\n | FieldGTEPredicate {\n return (\n isFieldOneOfPredicate(predicate) ||\n isFieldEqualPredicate(predicate) ||\n isFieldRangePredicate(predicate) ||\n isFieldLTPredicate(predicate) ||\n isFieldGTPredicate(predicate) ||\n isFieldLTEPredicate(predicate) ||\n isFieldGTEPredicate(predicate)\n );\n}\n\nfunction predicateValueExpr(v: number | string | boolean | DateTime | ExprRef | SignalRef, timeUnit: TimeUnit) {\n return valueExpr(v, {timeUnit, wrapTime: true});\n}\n\nfunction predicateValuesExpr(vals: (number | string | boolean | DateTime)[], timeUnit: TimeUnit) {\n return vals.map(v => predicateValueExpr(v, timeUnit));\n}\n\n// This method is used by Voyager. Do not change its behavior without changing Voyager.\nexport function fieldFilterExpression(predicate: FieldPredicate, useInRange = true) {\n const {field} = predicate;\n const timeUnit = normalizeTimeUnit(predicate.timeUnit)?.unit;\n const fieldExpr = timeUnit\n ? // For timeUnit, cast into integer with time() so we can use ===, inrange, indexOf to compare values directly.\n // TODO: We calculate timeUnit on the fly here. Consider if we would like to consolidate this with timeUnit pipeline\n // TODO: support utc\n `time(${timeUnitFieldExpr(timeUnit, field)})`\n : vgField(predicate, {expr: 'datum'});\n\n if (isFieldEqualPredicate(predicate)) {\n return `${fieldExpr}===${predicateValueExpr(predicate.equal, timeUnit)}`;\n } else if (isFieldLTPredicate(predicate)) {\n const upper = predicate.lt;\n return `${fieldExpr}<${predicateValueExpr(upper, timeUnit)}`;\n } else if (isFieldGTPredicate(predicate)) {\n const lower = predicate.gt;\n return `${fieldExpr}>${predicateValueExpr(lower, timeUnit)}`;\n } else if (isFieldLTEPredicate(predicate)) {\n const upper = predicate.lte;\n return `${fieldExpr}<=${predicateValueExpr(upper, timeUnit)}`;\n } else if (isFieldGTEPredicate(predicate)) {\n const lower = predicate.gte;\n return `${fieldExpr}>=${predicateValueExpr(lower, timeUnit)}`;\n } else if (isFieldOneOfPredicate(predicate)) {\n return `indexof([${predicateValuesExpr(predicate.oneOf, timeUnit).join(',')}], ${fieldExpr}) !== -1`;\n } else if (isFieldValidPredicate(predicate)) {\n return fieldValidPredicate(fieldExpr, predicate.valid);\n } else if (isFieldRangePredicate(predicate)) {\n const {range} = predicate;\n const lower = isSignalRef(range) ? {signal: `${range.signal}[0]`} : range[0];\n const upper = isSignalRef(range) ? {signal: `${range.signal}[1]`} : range[1];\n\n if (lower !== null && upper !== null && useInRange) {\n return (\n 'inrange(' +\n fieldExpr +\n ', [' +\n predicateValueExpr(lower, timeUnit) +\n ', ' +\n predicateValueExpr(upper, timeUnit) +\n '])'\n );\n }\n\n const exprs = [];\n if (lower !== null) {\n exprs.push(`${fieldExpr} >= ${predicateValueExpr(lower, timeUnit)}`);\n }\n if (upper !== null) {\n exprs.push(`${fieldExpr} <= ${predicateValueExpr(upper, timeUnit)}`);\n }\n\n return exprs.length > 0 ? exprs.join(' && ') : 'true';\n }\n\n /* istanbul ignore next: it should never reach here */\n throw new Error(`Invalid field predicate: ${stringify(predicate)}`);\n}\n\nexport function fieldValidPredicate(fieldExpr: string, valid = true) {\n if (valid) {\n return `isValid(${fieldExpr}) && isFinite(+${fieldExpr})`;\n } else {\n return `!isValid(${fieldExpr}) || !isFinite(+${fieldExpr})`;\n }\n}\n\nexport function normalizePredicate(f: Predicate): Predicate {\n if (isFieldPredicate(f) && f.timeUnit) {\n return {\n ...f,\n timeUnit: normalizeTimeUnit(f.timeUnit)?.unit\n };\n }\n return f;\n}\n","import {keys} from './util';\n\n/**\n * Data type based on level of measurement\n */\nexport const Type = {\n quantitative: 'quantitative',\n ordinal: 'ordinal',\n temporal: 'temporal',\n nominal: 'nominal',\n geojson: 'geojson'\n} as const;\n\nexport type Type = keyof typeof Type;\n\nexport function isType(t: any): t is Type {\n return t in Type;\n}\n\nexport const QUANTITATIVE = Type.quantitative;\nexport const ORDINAL = Type.ordinal;\nexport const TEMPORAL = Type.temporal;\nexport const NOMINAL = Type.nominal;\n\nexport const GEOJSON = Type.geojson;\n\nexport type StandardType = 'quantitative' | 'ordinal' | 'temporal' | 'nominal';\n\nexport const TYPES = keys(Type);\n\n/**\n * Get full, lowercase type name for a given type.\n * @param type\n * @return Full type name.\n */\nexport function getFullName(type: Type | string): Type | undefined {\n if (type) {\n type = type.toLowerCase();\n switch (type) {\n case 'q':\n case QUANTITATIVE:\n return 'quantitative';\n case 't':\n case TEMPORAL:\n return 'temporal';\n case 'o':\n case ORDINAL:\n return 'ordinal';\n case 'n':\n case NOMINAL:\n return 'nominal';\n case GEOJSON:\n return 'geojson';\n }\n }\n // If we get invalid input, return undefined type.\n return undefined;\n}\n","import {\n RangeEnum,\n ScaleBins,\n ScaleInterpolateEnum,\n ScaleInterpolateParams,\n SignalRef,\n TimeInterval,\n TimeIntervalStep\n} from 'vega';\nimport {isString, toSet} from 'vega-util';\nimport * as CHANNEL from './channel';\nimport {Channel, isColorChannel} from './channel';\nimport {DateTime} from './datetime';\nimport {ExprRef} from './expr';\nimport * as log from './log';\nimport {ParameterExtent} from './selection';\nimport {NOMINAL, ORDINAL, QUANTITATIVE, TEMPORAL, Type} from './type';\nimport {contains, Flag, keys} from './util';\n\nexport const ScaleType = {\n // Continuous - Quantitative\n LINEAR: 'linear',\n LOG: 'log',\n POW: 'pow',\n SQRT: 'sqrt',\n SYMLOG: 'symlog',\n\n IDENTITY: 'identity',\n SEQUENTIAL: 'sequential',\n\n // Continuous - Time\n TIME: 'time',\n UTC: 'utc',\n\n // Discretizing scales\n QUANTILE: 'quantile',\n QUANTIZE: 'quantize',\n THRESHOLD: 'threshold',\n BIN_ORDINAL: 'bin-ordinal',\n\n // Discrete scales\n ORDINAL: 'ordinal',\n POINT: 'point',\n BAND: 'band'\n} as const;\n\ntype ValueOf = T[keyof T];\nexport type ScaleType = ValueOf;\n\n/**\n * Index for scale categories -- only scale of the same categories can be merged together.\n * Current implementation is trying to be conservative and avoid merging scale type that might not work together\n */\nexport const SCALE_CATEGORY_INDEX: Record = {\n linear: 'numeric',\n log: 'numeric',\n pow: 'numeric',\n sqrt: 'numeric',\n symlog: 'numeric',\n identity: 'numeric',\n sequential: 'numeric',\n time: 'time',\n utc: 'time',\n ordinal: 'ordinal',\n 'bin-ordinal': 'bin-ordinal', // TODO: should bin-ordinal support merging with other\n point: 'ordinal-position',\n band: 'ordinal-position',\n quantile: 'discretizing',\n quantize: 'discretizing',\n threshold: 'discretizing'\n};\n\nexport const SCALE_TYPES: ScaleType[] = keys(SCALE_CATEGORY_INDEX);\n\n/**\n * Whether the two given scale types can be merged together.\n */\nexport function scaleCompatible(scaleType1: ScaleType, scaleType2: ScaleType) {\n const scaleCategory1 = SCALE_CATEGORY_INDEX[scaleType1];\n const scaleCategory2 = SCALE_CATEGORY_INDEX[scaleType2];\n return (\n scaleCategory1 === scaleCategory2 ||\n (scaleCategory1 === 'ordinal-position' && scaleCategory2 === 'time') ||\n (scaleCategory2 === 'ordinal-position' && scaleCategory1 === 'time')\n );\n}\n\n/**\n * Index for scale precedence -- high score = higher priority for merging.\n */\nconst SCALE_PRECEDENCE_INDEX: Record = {\n // numeric\n linear: 0,\n log: 1,\n pow: 1,\n sqrt: 1,\n symlog: 1,\n identity: 1,\n sequential: 1,\n // time\n time: 0,\n utc: 0,\n // ordinal-position -- these have higher precedence than continuous scales as they support more types of data\n point: 10,\n band: 11, // band has higher precedence as it is better for interaction\n // non grouped types\n ordinal: 0,\n 'bin-ordinal': 0,\n quantile: 0,\n quantize: 0,\n threshold: 0\n};\n\n/**\n * Return scale categories -- only scale of the same categories can be merged together.\n */\nexport function scaleTypePrecedence(scaleType: ScaleType): number {\n return SCALE_PRECEDENCE_INDEX[scaleType];\n}\n\nexport const CONTINUOUS_TO_CONTINUOUS_SCALES: ScaleType[] = ['linear', 'log', 'pow', 'sqrt', 'symlog', 'time', 'utc'];\nconst CONTINUOUS_TO_CONTINUOUS_INDEX = toSet(CONTINUOUS_TO_CONTINUOUS_SCALES);\n\nexport const QUANTITATIVE_SCALES: ScaleType[] = ['linear', 'log', 'pow', 'sqrt', 'symlog'];\n\nconst QUANTITATIVE_SCALES_INDEX = toSet(QUANTITATIVE_SCALES);\n\nexport function isQuantitative(type: ScaleType): type is 'linear' | 'log' | 'pow' | 'sqrt' | 'symlog' {\n return type in QUANTITATIVE_SCALES_INDEX;\n}\n\nexport const CONTINUOUS_TO_DISCRETE_SCALES: ScaleType[] = ['quantile', 'quantize', 'threshold'];\nconst CONTINUOUS_TO_DISCRETE_INDEX = toSet(CONTINUOUS_TO_DISCRETE_SCALES);\n\nexport const CONTINUOUS_DOMAIN_SCALES: ScaleType[] = CONTINUOUS_TO_CONTINUOUS_SCALES.concat([\n 'quantile',\n 'quantize',\n 'threshold',\n 'sequential',\n 'identity'\n]);\nconst CONTINUOUS_DOMAIN_INDEX = toSet(CONTINUOUS_DOMAIN_SCALES);\n\nexport const DISCRETE_DOMAIN_SCALES: ScaleType[] = ['ordinal', 'bin-ordinal', 'point', 'band'];\nconst DISCRETE_DOMAIN_INDEX = toSet(DISCRETE_DOMAIN_SCALES);\n\nexport const TIME_SCALE_TYPES: ScaleType[] = ['time', 'utc'];\n\nexport function hasDiscreteDomain(type: ScaleType): type is 'ordinal' | 'bin-ordinal' | 'point' | 'band' {\n return type in DISCRETE_DOMAIN_INDEX;\n}\n\nexport function hasContinuousDomain(\n type: ScaleType\n): type is 'linear' | 'log' | 'pow' | 'sqrt' | 'symlog' | 'time' | 'utc' | 'quantile' | 'quantize' | 'threshold' {\n return type in CONTINUOUS_DOMAIN_INDEX;\n}\n\nexport function isContinuousToContinuous(\n type: ScaleType\n): type is 'linear' | 'log' | 'pow' | 'sqrt' | 'symlog' | 'time' | 'utc' {\n return type in CONTINUOUS_TO_CONTINUOUS_INDEX;\n}\n\nexport function isContinuousToDiscrete(type: ScaleType): type is 'quantile' | 'quantize' | 'threshold' {\n return type in CONTINUOUS_TO_DISCRETE_INDEX;\n}\n\nexport interface ScaleConfig {\n /**\n * If true, rounds numeric output values to integers.\n * This can be helpful for snapping to the pixel grid.\n * (Only available for `x`, `y`, and `size` scales.)\n */\n round?: boolean | ES;\n\n /**\n * If true, values that exceed the data domain are clamped to either the minimum or maximum range value\n */\n clamp?: boolean | ES;\n\n /**\n * Default inner padding for `x` and `y` band-ordinal scales.\n *\n * __Default value:__\n * - `barBandPaddingInner` for bar marks (`0.1` by default)\n * - `rectBandPaddingInner` for rect and other marks (`0` by default)\n *\n * @minimum 0\n * @maximum 1\n */\n bandPaddingInner?: number | ES;\n\n /**\n * Default outer padding for `x` and `y` band-ordinal scales.\n *\n * __Default value:__ `paddingInner/2` (which makes _width/height = number of unique values * step_)\n *\n * @minimum 0\n * @maximum 1\n */\n bandPaddingOuter?: number | ES;\n\n /**\n * Default inner padding for `x` and `y` band-ordinal scales of `\"bar\"` marks.\n *\n * __Default value:__ `0.1`\n *\n * @minimum 0\n * @maximum 1\n */\n barBandPaddingInner?: number | ES;\n\n /**\n * Default inner padding for `x` and `y` band-ordinal scales of `\"rect\"` marks.\n *\n * __Default value:__ `0`\n *\n * @minimum 0\n * @maximum 1\n */\n rectBandPaddingInner?: number | ES;\n\n /**\n * Default padding for continuous scales.\n *\n * __Default:__ `5` for continuous x-scale of a vertical bar and continuous y-scale of a horizontal bar.; `0` otherwise.\n *\n * @minimum 0\n */\n continuousPadding?: number | ES;\n\n /**\n * Default outer padding for `x` and `y` point-ordinal scales.\n *\n * __Default value:__ `0.5` (which makes _width/height = number of unique values * step_)\n *\n * @minimum 0\n * @maximum 1\n */\n pointPadding?: number | ES;\n\n /**\n * Use the source data range before aggregation as scale domain instead of aggregated data for aggregate axis.\n *\n * This is equivalent to setting `domain` to `\"unaggregate\"` for aggregated _quantitative_ fields by default.\n *\n * This property only works with aggregate functions that produce values within the raw data domain (`\"mean\"`, `\"average\"`, `\"median\"`, `\"q1\"`, `\"q3\"`, `\"min\"`, `\"max\"`). For other aggregations that produce values outside of the raw data domain (e.g. `\"count\"`, `\"sum\"`), this property is ignored.\n *\n * __Default value:__ `false`\n */\n useUnaggregatedDomain?: boolean;\n\n // nice should depends on type (quantitative or temporal), so\n // let's not make a config.\n\n // Configs for Range\n\n /**\n * The default max value for mapping quantitative fields to bar's size/bandSize.\n *\n * If undefined (default), we will use the axis's size (width or height) - 1.\n * @minimum 0\n */\n maxBandSize?: number;\n\n /**\n * The default min value for mapping quantitative fields to bar and tick's size/bandSize scale with zero=false.\n *\n * __Default value:__ `2`\n *\n * @minimum 0\n */\n minBandSize?: number;\n\n /**\n * The default max value for mapping quantitative fields to text's size/fontSize.\n *\n * __Default value:__ `40`\n *\n * @minimum 0\n */\n maxFontSize?: number;\n\n /**\n * The default min value for mapping quantitative fields to tick's size/fontSize scale with zero=false\n *\n * __Default value:__ `8`\n *\n * @minimum 0\n */\n minFontSize?: number;\n\n /**\n * Default minimum opacity for mapping a field to opacity.\n *\n * __Default value:__ `0.3`\n *\n * @minimum 0\n * @maximum 1\n */\n minOpacity?: number;\n\n /**\n * Default max opacity for mapping a field to opacity.\n *\n * __Default value:__ `0.8`\n *\n * @minimum 0\n * @maximum 1\n */\n maxOpacity?: number;\n\n /**\n * Default minimum value for point size scale with zero=false.\n *\n * __Default value:__ `9`\n *\n * @minimum 0\n */\n minSize?: number;\n\n /**\n * Default max value for point size scale.\n * @minimum 0\n */\n maxSize?: number;\n\n /**\n * Default minimum strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks with zero=false.\n *\n * __Default value:__ `1`\n *\n * @minimum 0\n */\n minStrokeWidth?: number;\n\n /**\n * Default max strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks.\n *\n * __Default value:__ `4`\n *\n * @minimum 0\n */\n maxStrokeWidth?: number;\n\n /**\n * Default range cardinality for [`quantile`](https://vega.github.io/vega-lite/docs/scale.html#quantile) scale.\n *\n * __Default value:__ `4`\n *\n * @minimum 0\n */\n quantileCount?: number;\n\n /**\n * Default range cardinality for [`quantize`](https://vega.github.io/vega-lite/docs/scale.html#quantize) scale.\n *\n * __Default value:__ `4`\n *\n * @minimum 0\n */\n quantizeCount?: number;\n\n /**\n * Reverse x-scale by default (useful for right-to-left charts).\n */\n xReverse?: boolean | ES;\n}\n\nexport const defaultScaleConfig: ScaleConfig = {\n pointPadding: 0.5,\n\n barBandPaddingInner: 0.1,\n rectBandPaddingInner: 0,\n\n minBandSize: 2,\n\n minFontSize: 8,\n maxFontSize: 40,\n\n minOpacity: 0.3,\n maxOpacity: 0.8,\n\n // FIXME: revise if these *can* become ratios of width/height step\n minSize: 9, // Point size is area. For square point, 9 = 3 pixel ^ 2, not too small!\n\n minStrokeWidth: 1,\n maxStrokeWidth: 4,\n quantileCount: 4,\n quantizeCount: 4\n};\n\nexport interface SchemeParams {\n /**\n * A color scheme name for ordinal scales (e.g., `\"category10\"` or `\"blues\"`).\n *\n * For the full list of supported schemes, please refer to the [Vega Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference.\n */\n name: string | SignalRef;\n\n /**\n * The extent of the color range to use. For example `[0.2, 1]` will rescale the color scheme such that color values in the range _[0, 0.2)_ are excluded from the scheme.\n */\n extent?: (number | SignalRef)[] | SignalRef;\n\n /**\n * The number of colors to use in the scheme. This can be useful for scale types such as `\"quantize\"`, which use the length of the scale range to determine the number of discrete bins for the scale domain.\n */\n count?: number | SignalRef;\n}\n\nexport type Domain =\n | (null | string | number | boolean | DateTime | SignalRef)[]\n | 'unaggregated'\n | ParameterExtent\n | SignalRef\n | DomainUnionWith;\n\nexport type Scheme = string | SchemeParams;\n\nexport function isExtendedScheme(scheme: Scheme | SignalRef): scheme is SchemeParams {\n return !isString(scheme) && !!scheme['name'];\n}\n\nexport function isParameterDomain(domain: Domain): domain is ParameterExtent {\n return domain?.['param'];\n}\n\nexport interface DomainUnionWith {\n /**\n * Customized domain values to be union with the field's values or explicitly defined domain.\n * Should be an array of valid scale domain values.\n */\n unionWith: number[] | string[] | boolean[] | DateTime[];\n}\n\nexport function isDomainUnionWith(domain: Domain): domain is DomainUnionWith {\n return domain && domain['unionWith'];\n}\n\nexport interface Scale {\n /**\n * The type of scale. Vega-Lite supports the following categories of scale types:\n *\n * 1) [**Continuous Scales**](https://vega.github.io/vega-lite/docs/scale.html#continuous) -- mapping continuous domains to continuous output ranges ([`\"linear\"`](https://vega.github.io/vega-lite/docs/scale.html#linear), [`\"pow\"`](https://vega.github.io/vega-lite/docs/scale.html#pow), [`\"sqrt\"`](https://vega.github.io/vega-lite/docs/scale.html#sqrt), [`\"symlog\"`](https://vega.github.io/vega-lite/docs/scale.html#symlog), [`\"log\"`](https://vega.github.io/vega-lite/docs/scale.html#log), [`\"time\"`](https://vega.github.io/vega-lite/docs/scale.html#time), [`\"utc\"`](https://vega.github.io/vega-lite/docs/scale.html#utc).\n *\n * 2) [**Discrete Scales**](https://vega.github.io/vega-lite/docs/scale.html#discrete) -- mapping discrete domains to discrete ([`\"ordinal\"`](https://vega.github.io/vega-lite/docs/scale.html#ordinal)) or continuous ([`\"band\"`](https://vega.github.io/vega-lite/docs/scale.html#band) and [`\"point\"`](https://vega.github.io/vega-lite/docs/scale.html#point)) output ranges.\n *\n * 3) [**Discretizing Scales**](https://vega.github.io/vega-lite/docs/scale.html#discretizing) -- mapping continuous domains to discrete output ranges [`\"bin-ordinal\"`](https://vega.github.io/vega-lite/docs/scale.html#bin-ordinal), [`\"quantile\"`](https://vega.github.io/vega-lite/docs/scale.html#quantile), [`\"quantize\"`](https://vega.github.io/vega-lite/docs/scale.html#quantize) and [`\"threshold\"`](https://vega.github.io/vega-lite/docs/scale.html#threshold).\n *\n * __Default value:__ please see the [scale type table](https://vega.github.io/vega-lite/docs/scale.html#type).\n */\n type?: ScaleType;\n\n /**\n * Customized domain values in the form of constant values or dynamic values driven by a parameter.\n *\n * 1) Constant `domain` for _quantitative_ fields can take one of the following forms:\n *\n * - A two-element array with minimum and maximum values. To create a diverging scale, this two-element array can be combined with the `domainMid` property.\n * - An array with more than two entries, for [Piecewise quantitative scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise).\n * - A string value `\"unaggregated\"`, if the input field is aggregated, to indicate that the domain should include the raw data values prior to the aggregation.\n *\n * 2) Constant `domain` for _temporal_ fields can be a two-element array with minimum and maximum values, in the form of either timestamps or the [DateTime definition objects](https://vega.github.io/vega-lite/docs/types.html#datetime).\n *\n * 3) Constant `domain` for _ordinal_ and _nominal_ fields can be an array that lists valid input values.\n *\n * 4) To combine (union) specified constant domain with the field's values, `domain` can be an object with a `unionWith` property that specify constant domain to be combined. For example, `domain: {unionWith: [0, 100]}` for a quantitative scale means that the scale domain always includes `[0, 100]`, but will include other values in the fields beyond `[0, 100]`.\n *\n * 5) Domain can also takes an object defining a field or encoding of a parameter that [interactively determines](https://vega.github.io/vega-lite/docs/selection.html#scale-domains) the scale domain.\n */\n domain?:\n | (null | string | number | boolean | DateTime | ES)[]\n | 'unaggregated'\n | ParameterExtent\n | DomainUnionWith\n | ES;\n\n /**\n * Inserts a single mid-point value into a two-element domain. The mid-point value must lie between the domain minimum and maximum values. This property can be useful for setting a midpoint for [diverging color scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise). The domainMid property is only intended for use with scales supporting continuous, piecewise domains.\n */\n domainMid?: number | ES;\n\n /**\n * Sets the maximum value in the scale domain, overriding the `domain` property. This property is only intended for use with scales having continuous domains.\n */\n domainMax?: number | DateTime | ES;\n\n /**\n * Sets the minimum value in the scale domain, overriding the domain property. This property is only intended for use with scales having continuous domains.\n */\n domainMin?: number | DateTime | ES;\n\n /**\n * If true, reverses the order of the scale range.\n * __Default value:__ `false`.\n */\n reverse?: boolean | ES;\n\n /**\n * The range of the scale. One of:\n *\n * - A string indicating a [pre-defined named scale range](https://vega.github.io/vega-lite/docs/scale.html#range-config) (e.g., example, `\"symbol\"`, or `\"diverging\"`).\n *\n * - For [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous), two-element array indicating minimum and maximum values, or an array with more than two entries for specifying a [piecewise scale](https://vega.github.io/vega-lite/docs/scale.html#piecewise).\n *\n * - For [discrete](https://vega.github.io/vega-lite/docs/scale.html#discrete) and [discretizing](https://vega.github.io/vega-lite/docs/scale.html#discretizing) scales, an array of desired output values or an object with a `field` property representing the range values. For example, if a field `color` contains CSS color names, we can set `range` to `{field: \"color\"}`.\n *\n * __Notes:__\n *\n * 1) For color scales you can also specify a color [`scheme`](https://vega.github.io/vega-lite/docs/scale.html#scheme) instead of `range`.\n *\n * 2) Any directly specified `range` for `x` and `y` channels will be ignored. Range can be customized via the view's corresponding [size](https://vega.github.io/vega-lite/docs/size.html) (`width` and `height`).\n */\n range?: RangeEnum | (number | string | number[] | ES)[] | {field: string};\n\n /**\n * Sets the maximum value in the scale range, overriding the `range` property or the default range. This property is only intended for use with scales having continuous ranges.\n */\n rangeMax?: number | string | ES;\n\n /**\n * Sets the minimum value in the scale range, overriding the `range` property or the default range. This property is only intended for use with scales having continuous ranges.\n */\n rangeMin?: number | string | ES;\n\n // ordinal\n\n /**\n * A string indicating a color [scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme) name (e.g., `\"category10\"` or `\"blues\"`) or a [scheme parameter object](https://vega.github.io/vega-lite/docs/scale.html#scheme-params).\n *\n * Discrete color schemes may be used with [discrete](https://vega.github.io/vega-lite/docs/scale.html#discrete) or [discretizing](https://vega.github.io/vega-lite/docs/scale.html#discretizing) scales. Continuous color schemes are intended for use with color scales.\n *\n * For the full list of supported schemes, please refer to the [Vega Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference.\n */\n scheme?: string | SchemeParams | ES;\n\n /**\n * The alignment of the steps within the scale range.\n *\n * This value must lie in the range `[0,1]`. A value of `0.5` indicates that the steps should be centered within the range. A value of `0` or `1` may be used to shift the bands to one side, say to position them adjacent to an axis.\n *\n * __Default value:__ `0.5`\n */\n align?: number | ES;\n\n /**\n * Bin boundaries can be provided to scales as either an explicit array of bin boundaries or as a bin specification object. The legal values are:\n * - An [array](../types/#Array) literal of bin boundary values. For example, `[0, 5, 10, 15, 20]`. The array must include both starting and ending boundaries. The previous example uses five values to indicate a total of four bin intervals: [0-5), [5-10), [10-15), [15-20]. Array literals may include signal references as elements.\n * - A [bin specification object](https://vega.github.io/vega-lite/docs/scale.html#bins) that indicates the bin _step_ size, and optionally the _start_ and _stop_ boundaries.\n * - An array of bin boundaries over the scale domain. If provided, axes and legends will use the bin boundaries to inform the choice of tick marks and text labels.\n */\n // TODO: add - A [signal reference](../types/#Signal) that resolves to either an array or bin specification object.\n bins?: ScaleBins;\n\n /**\n * If `true`, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid.\n *\n * __Default value:__ `false`.\n */\n round?: boolean | ES;\n\n /**\n * For _[continuous](https://vega.github.io/vega-lite/docs/scale.html#continuous)_ scales, expands the scale domain to accommodate the specified number of pixels on each of the scale range. The scale range must represent pixels for this parameter to function as intended. Padding adjustment is performed prior to all other adjustments, including the effects of the `zero`, `nice`, `domainMin`, and `domainMax` properties.\n *\n * For _[band](https://vega.github.io/vega-lite/docs/scale.html#band)_ scales, shortcut for setting `paddingInner` and `paddingOuter` to the same value.\n *\n * For _[point](https://vega.github.io/vega-lite/docs/scale.html#point)_ scales, alias for `paddingOuter`.\n *\n * __Default value:__ For _continuous_ scales, derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `continuousPadding`.\n * For _band and point_ scales, see `paddingInner` and `paddingOuter`. By default, Vega-Lite sets padding such that _width/height = number of unique values * step_.\n *\n * @minimum 0\n */\n padding?: number | ES;\n\n /**\n * The inner padding (spacing) within each band step of band scales, as a fraction of the step size. This value must lie in the range [0,1].\n *\n * For point scale, this property is invalid as point scales do not have internal band widths (only step sizes between bands).\n *\n * __Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `bandPaddingInner`.\n *\n * @minimum 0\n * @maximum 1\n */\n paddingInner?: number | ES;\n\n /**\n * The outer padding (spacing) at the ends of the range of band and point scales,\n * as a fraction of the step size. This value must lie in the range [0,1].\n *\n * __Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `bandPaddingOuter` for band scales and `pointPadding` for point scales.\n * By default, Vega-Lite sets outer padding such that _width/height = number of unique values * step_.\n *\n * @minimum 0\n * @maximum 1\n */\n paddingOuter?: number | ES;\n\n // typical\n /**\n * If `true`, values that exceed the data domain are clamped to either the minimum or maximum range value\n *\n * __Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/config.html#scale-config)'s `clamp` (`true` by default).\n */\n clamp?: boolean | ES;\n\n /**\n * Extending the domain so that it starts and ends on nice round values. This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value. Nicing is useful if the domain is computed from data and may be irregular. For example, for a domain of _[0.201479…, 0.996679…]_, a nice domain might be _[0.2, 1.0]_.\n *\n * For quantitative scales such as linear, `nice` can be either a boolean flag or a number. If `nice` is a number, it will represent a desired tick count. This allows greater control over the step size used to extend the bounds, guaranteeing that the returned ticks will exactly cover the domain.\n *\n * For temporal fields with time and utc scales, the `nice` value can be a string indicating the desired time interval. Legal values are `\"millisecond\"`, `\"second\"`, `\"minute\"`, `\"hour\"`, `\"day\"`, `\"week\"`, `\"month\"`, and `\"year\"`. Alternatively, `time` and `utc` scales can accept an object-valued interval specifier of the form `{\"interval\": \"month\", \"step\": 3}`, which includes a desired number of interval steps. Here, the domain would snap to quarter (Jan, Apr, Jul, Oct) boundaries.\n *\n * __Default value:__ `true` for unbinned _quantitative_ fields; `false` otherwise.\n *\n */\n nice?: boolean | number | TimeInterval | TimeIntervalStep | ES;\n\n /**\n * The logarithm base of the `log` scale (default `10`).\n */\n base?: number | ES;\n\n /**\n * The exponent of the `pow` scale.\n */\n exponent?: number | ES;\n\n /**\n * A constant determining the slope of the symlog function around zero. Only used for `symlog` scales.\n *\n * __Default value:__ `1`\n */\n constant?: number | ES;\n\n /**\n * If `true`, ensures that a zero baseline value is included in the scale domain.\n *\n * __Default value:__ `true` for x and y channels if the quantitative field is not binned and no custom `domain` is provided; `false` otherwise.\n *\n * __Note:__ Log, time, and utc scales do not support `zero`.\n */\n zero?: boolean | ES;\n\n /**\n * The interpolation method for range values. By default, a general interpolator for numbers, dates, strings and colors (in HCL space) is used. For color ranges, this property allows interpolation in alternative color spaces. Legal values include `rgb`, `hsl`, `hsl-long`, `lab`, `hcl`, `hcl-long`, `cubehelix` and `cubehelix-long` ('-long' variants use longer paths in polar coordinate spaces). If object-valued, this property accepts an object with a string-valued _type_ property and an optional numeric _gamma_ property applicable to rgb and cubehelix interpolators. For more, see the [d3-interpolate documentation](https://github.com/d3/d3-interpolate).\n *\n * * __Default value:__ `hcl`\n */\n interpolate?: ScaleInterpolateEnum | ES | ScaleInterpolateParams;\n}\n\nconst SCALE_PROPERTY_INDEX: Flag> = {\n type: 1,\n domain: 1,\n domainMax: 1,\n domainMin: 1,\n domainMid: 1,\n align: 1,\n range: 1,\n rangeMax: 1,\n rangeMin: 1,\n scheme: 1,\n bins: 1,\n // Other properties\n reverse: 1,\n round: 1,\n // quantitative / time\n clamp: 1,\n nice: 1,\n // quantitative\n base: 1,\n exponent: 1,\n constant: 1,\n interpolate: 1,\n zero: 1, // zero depends on domain\n // band/point\n padding: 1,\n paddingInner: 1,\n paddingOuter: 1\n};\n\nexport const SCALE_PROPERTIES = keys(SCALE_PROPERTY_INDEX);\n\nconst {\n type,\n domain,\n range,\n rangeMax,\n rangeMin,\n scheme,\n ...NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTY_INDEX\n} = SCALE_PROPERTY_INDEX;\n\nexport const NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES = keys(NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTY_INDEX);\n\nexport function scaleTypeSupportProperty(scaleType: ScaleType, propName: keyof Scale): boolean {\n switch (propName) {\n case 'type':\n case 'domain':\n case 'reverse':\n case 'range':\n return true;\n case 'scheme':\n case 'interpolate':\n return !['point', 'band', 'identity'].includes(scaleType);\n case 'bins':\n return !['point', 'band', 'identity', 'ordinal'].includes(scaleType);\n case 'round':\n return isContinuousToContinuous(scaleType) || scaleType === 'band' || scaleType === 'point';\n case 'padding':\n case 'rangeMin':\n case 'rangeMax':\n return isContinuousToContinuous(scaleType) || ['point', 'band'].includes(scaleType);\n case 'paddingOuter':\n case 'align':\n return ['point', 'band'].includes(scaleType);\n case 'paddingInner':\n return scaleType === 'band';\n case 'domainMax':\n case 'domainMid':\n case 'domainMin':\n case 'clamp':\n return isContinuousToContinuous(scaleType);\n case 'nice':\n return isContinuousToContinuous(scaleType) || scaleType === 'quantize' || scaleType === 'threshold';\n case 'exponent':\n return scaleType === 'pow';\n case 'base':\n return scaleType === 'log';\n case 'constant':\n return scaleType === 'symlog';\n case 'zero':\n return (\n hasContinuousDomain(scaleType) &&\n !contains(\n [\n 'log', // log scale cannot have zero value\n 'time',\n 'utc', // zero is not meaningful for time\n 'threshold', // threshold requires custom domain so zero does not matter\n 'quantile' // quantile depends on distribution so zero does not matter\n ],\n scaleType\n )\n );\n }\n}\n\n/**\n * Returns undefined if the input channel supports the input scale property name\n */\nexport function channelScalePropertyIncompatability(channel: Channel, propName: keyof Scale): string {\n switch (propName) {\n case 'interpolate':\n case 'scheme':\n case 'domainMid':\n if (!isColorChannel(channel)) {\n return log.message.cannotUseScalePropertyWithNonColor(channel);\n }\n return undefined;\n case 'align':\n case 'type':\n case 'bins':\n case 'domain':\n case 'domainMax':\n case 'domainMin':\n case 'range':\n case 'base':\n case 'exponent':\n case 'constant':\n case 'nice':\n case 'padding':\n case 'paddingInner':\n case 'paddingOuter':\n case 'rangeMax':\n case 'rangeMin':\n case 'reverse':\n case 'round':\n case 'clamp':\n case 'zero':\n return undefined; // GOOD!\n }\n}\n\nexport function scaleTypeSupportDataType(specifiedType: ScaleType, fieldDefType: Type): boolean {\n if (contains([ORDINAL, NOMINAL], fieldDefType)) {\n return specifiedType === undefined || hasDiscreteDomain(specifiedType);\n } else if (fieldDefType === TEMPORAL) {\n return contains([ScaleType.TIME, ScaleType.UTC, undefined], specifiedType);\n } else if (fieldDefType === QUANTITATIVE) {\n return contains(\n [\n ScaleType.LOG,\n ScaleType.POW,\n ScaleType.SQRT,\n ScaleType.SYMLOG,\n ScaleType.QUANTILE,\n ScaleType.QUANTIZE,\n ScaleType.THRESHOLD,\n ScaleType.LINEAR,\n undefined\n ],\n specifiedType\n );\n }\n\n return true;\n}\n\nexport function channelSupportScaleType(channel: Channel, scaleType: ScaleType): boolean {\n if (!CHANNEL.isScaleChannel(channel)) {\n return false;\n }\n switch (channel) {\n case CHANNEL.X:\n case CHANNEL.Y:\n case CHANNEL.THETA:\n case CHANNEL.RADIUS:\n return isContinuousToContinuous(scaleType) || contains(['band', 'point'], scaleType);\n case CHANNEL.SIZE: // TODO: size and opacity can support ordinal with more modification\n case CHANNEL.STROKEWIDTH:\n case CHANNEL.OPACITY:\n case CHANNEL.FILLOPACITY:\n case CHANNEL.STROKEOPACITY:\n case CHANNEL.ANGLE:\n // Although it generally doesn't make sense to use band with size and opacity,\n // it can also work since we use band: 0.5 to get midpoint.\n return (\n isContinuousToContinuous(scaleType) ||\n isContinuousToDiscrete(scaleType) ||\n contains(['band', 'point', 'ordinal'], scaleType)\n );\n case CHANNEL.COLOR:\n case CHANNEL.FILL:\n case CHANNEL.STROKE:\n return scaleType !== 'band'; // band does not make sense with color\n case CHANNEL.STROKEDASH:\n case CHANNEL.SHAPE:\n return scaleType === 'ordinal' || isContinuousToDiscrete(scaleType);\n }\n}\n","import {Align, Color, Gradient, MarkConfig as VgMarkConfig, Orientation, SignalRef, TextBaseline} from 'vega';\nimport {toSet} from 'vega-util';\nimport {CompositeMark, CompositeMarkDef} from './compositemark';\nimport {ExprRef} from './expr';\nimport {Flag, keys} from './util';\nimport {MapExcludeValueRefAndReplaceSignalWith} from './vega.schema';\n\n/**\n * All types of primitive marks.\n */\nexport const Mark = {\n arc: 'arc',\n area: 'area',\n bar: 'bar',\n image: 'image',\n line: 'line',\n point: 'point',\n rect: 'rect',\n rule: 'rule',\n text: 'text',\n tick: 'tick',\n trail: 'trail',\n circle: 'circle',\n square: 'square',\n geoshape: 'geoshape'\n} as const;\n\nexport const ARC = Mark.arc;\nexport const AREA = Mark.area;\nexport const BAR = Mark.bar;\nexport const IMAGE = Mark.image;\nexport const LINE = Mark.line;\nexport const POINT = Mark.point;\nexport const RECT = Mark.rect;\nexport const RULE = Mark.rule;\nexport const TEXT = Mark.text;\nexport const TICK = Mark.tick;\nexport const TRAIL = Mark.trail;\nexport const CIRCLE = Mark.circle;\nexport const SQUARE = Mark.square;\nexport const GEOSHAPE = Mark.geoshape;\n\nexport type Mark = keyof typeof Mark;\n\nexport function isMark(m: string): m is Mark {\n return m in Mark;\n}\n\nexport function isPathMark(m: Mark | CompositeMark): m is 'line' | 'area' | 'trail' {\n return ['line', 'area', 'trail'].includes(m);\n}\n\nexport function isRectBasedMark(m: Mark | CompositeMark): m is 'rect' | 'bar' | 'image' | 'arc' {\n return ['rect', 'bar', 'image', 'arc' /* arc is rect/interval in polar coordinate */].includes(m);\n}\n\nexport const PRIMITIVE_MARKS = keys(Mark);\n\nexport interface ColorMixins {\n /**\n * Default color.\n *\n * __Default value:__ `\"#4682b4\"`\n *\n * __Note:__\n * - This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n * - The `fill` and `stroke` properties have higher precedence than `color` and will override `color`.\n */\n color?: Color | Gradient | ES;\n}\n\nexport interface TooltipContent {\n content: 'encoding' | 'data';\n}\n\n/** @hidden */\nexport type Hide = 'hide';\n\nexport interface VLOnlyMarkConfig extends ColorMixins {\n /**\n * Whether the mark's color should be used as fill color instead of stroke color.\n *\n * __Default value:__ `false` for all `point`, `line`, and `rule` marks as well as `geoshape` marks for [`graticule`](https://vega.github.io/vega-lite/docs/data.html#graticule) data sources; otherwise, `true`.\n *\n * __Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n *\n */\n filled?: boolean;\n\n /**\n * Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n * - If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n * - If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.\n */\n invalid?: 'filter' | Hide | null;\n\n /**\n * For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.\n */\n order?: null | boolean;\n\n /**\n * Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step.\n * If set to `0.5`, the marks will be positioned in the middle of the time unit band step.\n */\n timeUnitBandPosition?: number;\n\n /**\n * Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step.\n * If set to `0.5`, bandwidth of the marks will be half of the time unit band step.\n */\n timeUnitBandSize?: number;\n\n /**\n * The end angle of arc marks in radians. A value of 0 indicates up or “north”, increasing values proceed clockwise.\n */\n theta2?: number | ES; // In Vega, this is called endAngle\n\n /**\n * The secondary (inner) radius in pixels of arc marks.\n *\n * @minimum 0\n * __Default value:__ `0`\n */\n radius2?: number | ES; // In Vega, this is called innerRadius\n}\n\nexport interface MarkConfig\n extends VLOnlyMarkConfig,\n MapExcludeValueRefAndReplaceSignalWith, ES> {\n // ========== Overriding Vega ==========\n\n /**\n * The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n *\n * - If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n * - If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n * - If set to `null` or `false`, then no tooltip will be used.\n *\n * See the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite.\n *\n * __Default value:__ `null`\n */\n tooltip?: number | string | boolean | TooltipContent | ES | null; // VL has a special object form for tooltip content\n\n /**\n * Default size for marks.\n * - For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n * - For `bar`, this represents the band size of the bar, in pixels.\n * - For `text`, this represents the font size, in pixels.\n *\n * __Default value:__\n * - `30` for point, circle, square marks; width/height's `step`\n * - `2` for bar marks with discrete dimensions;\n * - `5` for bar marks with continuous dimensions;\n * - `11` for text marks.\n *\n * @minimum 0\n */\n size?: number | ES; // size works beyond symbol marks in VL\n\n /**\n * X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n *\n * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n */\n x?: number | 'width' | ES; // Vega doesn't have 'width'\n\n /**\n * Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n *\n * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n */\n y?: number | 'height' | ES; // Vega doesn't have 'height'\n\n /**\n * X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n *\n * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n */\n x2?: number | 'width' | ES; // Vega doesn't have 'width'\n\n /**\n * Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n *\n * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n */\n y2?: number | 'height' | ES; // Vega doesn't have 'height'\n\n /**\n * Default fill color. This property has higher precedence than `config.color`. Set to `null` to remove fill.\n *\n * __Default value:__ (None)\n *\n */\n fill?: Color | Gradient | null | ES; // docs: Vega doesn't have config.color\n\n /**\n * Default stroke color. This property has higher precedence than `config.color`. Set to `null` to remove stroke.\n *\n * __Default value:__ (None)\n *\n */\n stroke?: Color | Gradient | null | ES; // docs: Vega doesn't have config.color\n\n /**\n * The overall opacity (value between [0,1]).\n *\n * __Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.\n *\n * @minimum 0\n * @maximum 1\n */\n opacity?: number | ES; // docs (different defaults)\n\n /**\n * The orientation of a non-stacked bar, tick, area, and line charts.\n * The value is either horizontal (default) or vertical.\n * - For bar, rule and tick, this determines whether the size of the bar and tick\n * should be applied to x or y dimension.\n * - For area, this property determines the orient property of the Vega output.\n * - For line and trail marks, this property determines the sort order of the points in the line\n * if `config.sortLineBy` is not specified.\n * For stacked charts, this is always determined by the orientation of the stack;\n * therefore explicitly specified value will be ignored.\n */\n orient?: Orientation; // Vega orient doesn't apply to bar/tick/line. Since some logic depends on this property, Vega-Lite does NOT allow signal for orient.\n\n /**\n * The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of `\"left\"`, `\"right\"`, `\"center\"`.\n *\n * __Note:__ Expression reference is *not* supported for range marks.\n */\n align?: Align | ES;\n\n /**\n * For text marks, the vertical text baseline. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, `\"line-bottom\"`, or an expression reference that provides one of the valid values.\n * The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`,\n * but are calculated relative to the `lineHeight` rather than `fontSize` alone.\n *\n * For range marks, the vertical alignment of the marks. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n *\n * __Note:__ Expression reference is *not* supported for range marks.\n *\n */\n baseline?: TextBaseline | ES;\n\n /**\n * - For arc marks, the arc length in radians if theta2 is not specified, otherwise the start arc angle. (A value of 0 indicates up or “north”, increasing values proceed clockwise.)\n *\n * - For text marks, polar coordinate angle in radians.\n *\n * @minimum 0\n * @maximum 360\n */\n theta?: number | ES; // overriding VG\n\n /**\n *\n * For arc mark, the primary (outer) radius in pixels.\n *\n * For text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties.\n *\n * @minimum 0\n *\n * __Default value:__ `min(plot_width, plot_height)/2`\n */\n radius?: number | ES; // overriding VG\n\n /**\n * The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`.\n *\n * @minimum 0\n * __Default value:__ `0`\n */\n innerRadius?: number | ES;\n\n /**\n * The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n *\n * @minimum 0\n * __Default value:__ `0`\n */\n outerRadius?: number | ES;\n}\n\nexport interface RectBinSpacingMixins {\n /**\n * Offset between bars for binned field. The ideal value for this is either 0 (preferred by statisticians) or 1 (Vega-Lite default, D3 example style).\n *\n * __Default value:__ `1`\n *\n * @minimum 0\n */\n binSpacing?: number;\n}\n\nexport type AnyMark = CompositeMark | CompositeMarkDef | Mark | MarkDef;\n\nexport function isMarkDef(mark: string | GenericMarkDef): mark is GenericMarkDef {\n return mark['type'];\n}\n\nconst PRIMITIVE_MARK_INDEX = toSet(PRIMITIVE_MARKS);\n\nexport function isPrimitiveMark(mark: AnyMark): mark is Mark {\n const markType = isMarkDef(mark) ? mark.type : mark;\n return markType in PRIMITIVE_MARK_INDEX;\n}\n\nexport const STROKE_CONFIG = [\n 'stroke',\n 'strokeWidth',\n 'strokeDash',\n 'strokeDashOffset',\n 'strokeOpacity',\n 'strokeJoin',\n 'strokeMiterLimit'\n] as const;\n\nexport const FILL_CONFIG = ['fill', 'fillOpacity'] as const;\n\nexport const FILL_STROKE_CONFIG = [...STROKE_CONFIG, ...FILL_CONFIG];\n\nconst VL_ONLY_MARK_CONFIG_INDEX: Flag> = {\n color: 1,\n filled: 1,\n invalid: 1,\n order: 1,\n radius2: 1,\n theta2: 1,\n timeUnitBandSize: 1,\n timeUnitBandPosition: 1\n};\n\nexport const VL_ONLY_MARK_CONFIG_PROPERTIES = keys(VL_ONLY_MARK_CONFIG_INDEX);\n\nexport const VL_ONLY_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX: {\n [k in Mark]?: (keyof Required>[k])[];\n} = {\n area: ['line', 'point'],\n bar: ['binSpacing', 'continuousBandSize', 'discreteBandSize'],\n rect: ['binSpacing', 'continuousBandSize', 'discreteBandSize'],\n line: ['point'],\n tick: ['bandSize', 'thickness']\n};\n\nexport const defaultMarkConfig: MarkConfig = {\n color: '#4c78a8',\n invalid: 'filter',\n timeUnitBandSize: 1\n};\n\n// TODO: replace with MarkConfigMixins[Mark] once https://github.com/vega/ts-json-schema-generator/issues/344 is fixed\nexport type AnyMarkConfig =\n | MarkConfig\n | AreaConfig\n | BarConfig\n | RectConfig\n | LineConfig\n | TickConfig;\n\nexport interface MarkConfigMixins {\n /** Mark Config */\n mark?: MarkConfig;\n\n // MARK-SPECIFIC CONFIGS\n\n /** Arc-specific Config */\n arc?: RectConfig;\n\n /** Area-Specific Config */\n area?: AreaConfig;\n\n /** Bar-Specific Config */\n bar?: BarConfig;\n\n /** Circle-Specific Config */\n circle?: MarkConfig;\n\n /** Image-specific Config */\n image?: RectConfig;\n\n /** Line-Specific Config */\n line?: LineConfig;\n\n /** Point-Specific Config */\n point?: MarkConfig;\n\n /** Rect-Specific Config */\n rect?: RectConfig;\n\n /** Rule-Specific Config */\n rule?: MarkConfig;\n\n /** Square-Specific Config */\n square?: MarkConfig;\n\n /** Text-Specific Config */\n text?: MarkConfig;\n\n /** Tick-Specific Config */\n tick?: TickConfig;\n\n /** Trail-Specific Config */\n trail?: LineConfig;\n\n /** Geoshape-Specific Config */\n geoshape?: MarkConfig;\n}\n\nconst MARK_CONFIG_INDEX: Flag> = {\n mark: 1,\n arc: 1,\n area: 1,\n bar: 1,\n circle: 1,\n image: 1,\n line: 1,\n point: 1,\n rect: 1,\n rule: 1,\n square: 1,\n text: 1,\n tick: 1,\n trail: 1,\n geoshape: 1\n};\n\nexport const MARK_CONFIGS = keys(MARK_CONFIG_INDEX);\n\nexport interface RectConfig extends RectBinSpacingMixins, MarkConfig {\n /**\n * The default size of the bars on continuous scales.\n *\n * __Default value:__ `5`\n *\n * @minimum 0\n */\n continuousBandSize?: number;\n\n /**\n * The default size of the bars with discrete dimensions. If unspecified, the default size is `step-2`, which provides 2 pixel offset between bars.\n * @minimum 0\n */\n discreteBandSize?: number | RelativeBandSize;\n}\n\nexport type BandSize = number | RelativeBandSize | SignalRef;\n\nexport interface RelativeBandSize {\n /**\n * The relative band size. For example `0.5` means half of the band scale's band width.\n */\n band: number;\n}\n\nexport function isRelativeBandSize(o: number | RelativeBandSize | ExprRef | SignalRef): o is RelativeBandSize {\n return o && o['band'] != undefined;\n}\n\nexport const BAR_CORNER_RADIUS_INDEX: Partial<\n Record<\n Orientation,\n ('cornerRadiusTopLeft' | 'cornerRadiusTopRight' | 'cornerRadiusBottomLeft' | 'cornerRadiusBottomRight')[]\n >\n> = {\n horizontal: ['cornerRadiusTopRight', 'cornerRadiusBottomRight'],\n vertical: ['cornerRadiusTopLeft', 'cornerRadiusTopRight']\n};\n\nexport interface BarCornerRadiusMixins {\n /**\n * - For vertical bars, top-left and top-right corner radius.\n *\n * - For horizontal bars, top-right and bottom-right corner radius.\n */\n cornerRadiusEnd?: number | ES;\n}\n\nexport type BarConfig = RectConfig & BarCornerRadiusMixins;\n\nexport type OverlayMarkDef = MarkConfig & MarkDefMixins;\n\nexport interface PointOverlayMixins {\n /**\n * A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points.\n *\n * - If this property is `\"transparent\"`, transparent points will be used (for enhancing tooltips and selections).\n *\n * - If this property is an empty object (`{}`) or `true`, filled points with default properties will be used.\n *\n * - If this property is `false`, no points would be automatically added to line or area marks.\n *\n * __Default value:__ `false`.\n */\n point?: boolean | OverlayMarkDef | 'transparent';\n}\n\nexport interface LineConfig extends MarkConfig, PointOverlayMixins {}\n\nexport interface LineOverlayMixins {\n /**\n * A flag for overlaying line on top of area marks, or an object defining the properties of the overlayed lines.\n *\n * - If this value is an empty object (`{}`) or `true`, lines with default properties will be used.\n *\n * - If this value is `false`, no lines would be automatically added to area marks.\n *\n * __Default value:__ `false`.\n */\n line?: boolean | OverlayMarkDef;\n}\n\nexport interface AreaConfig\n extends MarkConfig,\n PointOverlayMixins,\n LineOverlayMixins {}\n\nexport interface TickThicknessMixins {\n /**\n * Thickness of the tick mark.\n *\n * __Default value:__ `1`\n *\n * @minimum 0\n */\n thickness?: number | SignalRef;\n}\n\nexport interface GenericMarkDef {\n /**\n * The mark type. This could a primitive mark type\n * (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n * `\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`)\n * or a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`).\n */\n type: M;\n}\n\nexport interface MarkDefMixins {\n /**\n * A string or array of strings indicating the name of custom styles to apply to the mark. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles. Any [mark properties](https://vega.github.io/vega-lite/docs/encoding.html#mark-prop) explicitly defined within the `encoding` will override a style default.\n *\n * __Default value:__ The mark's name. For example, a bar mark will have style `\"bar\"` by default.\n * __Note:__ Any specified style will augment the default style. For example, a bar mark with `\"style\": \"foo\"` will receive from `config.style.bar` and `config.style.foo` (the specified style `\"foo\"` has higher precedence).\n */\n style?: string | string[];\n\n /**\n * Whether a mark be clipped to the enclosing group’s width and height.\n */\n clip?: boolean;\n\n // Offset properties should not be a part of config\n\n /**\n * Offset for x-position.\n */\n xOffset?: number | ES;\n\n /**\n * Offset for y-position.\n */\n yOffset?: number | ES;\n\n /**\n * Offset for x2-position.\n */\n x2Offset?: number | ES;\n\n /**\n * Offset for y2-position.\n */\n y2Offset?: number | ES;\n\n /**\n * Offset for theta.\n */\n thetaOffset?: number | ES;\n\n /**\n * Offset for theta2.\n */\n theta2Offset?: number | ES;\n\n /**\n * Offset for radius.\n */\n radiusOffset?: number | ES;\n\n /**\n * Offset for radius2.\n */\n radius2Offset?: number | ES;\n}\n\nexport interface RelativeBandSize {\n /**\n * The relative band size. For example `0.5` means half of the band scale's band width.\n */\n band: number;\n}\n\n// Point/Line OverlayMixins are only for area, line, and trail but we don't want to declare multiple types of MarkDef\nexport interface MarkDef<\n M extends string | Mark = Mark,\n ES extends ExprRef | SignalRef = ExprRef | SignalRef\n> extends GenericMarkDef,\n Omit<\n MarkConfig &\n AreaConfig &\n BarConfig & // always extends RectConfig\n LineConfig &\n TickConfig,\n 'startAngle' | 'endAngle' | 'width' | 'height'\n >,\n MarkDefMixins {\n // Omit startAngle/endAngle since we use theta/theta2 from Vega-Lite schema to avoid confusion\n // We still support start/endAngle only in config, just in case people use Vega config with Vega-Lite.\n\n /**\n * @hidden\n */\n startAngle?: number | ES;\n /**\n * @hidden\n */\n endAngle?: number | ES;\n\n // Replace width / height to include relative band size\n\n /**\n * Width of the marks. One of:\n *\n * - A number representing a fixed pixel width.\n *\n * - A relative band size definition. For example, `{band: 0.5}` represents half of the band.\n */\n width?: number | ES | RelativeBandSize;\n\n /**\n * Height of the marks. One of:\n *\n * - A number representing a fixed pixel height.\n *\n * - A relative band size definition. For example, `{band: 0.5}` represents half of the band\n */\n height?: number | ES | RelativeBandSize;\n}\n\nconst DEFAULT_RECT_BAND_SIZE = 5;\n\nexport const defaultBarConfig: RectConfig = {\n binSpacing: 1,\n continuousBandSize: DEFAULT_RECT_BAND_SIZE,\n timeUnitBandPosition: 0.5\n};\n\nexport const defaultRectConfig: RectConfig = {\n binSpacing: 0,\n continuousBandSize: DEFAULT_RECT_BAND_SIZE,\n timeUnitBandPosition: 0.5\n};\n\nexport interface TickConfig extends MarkConfig, TickThicknessMixins {\n /**\n * The width of the ticks.\n *\n * __Default value:__ 3/4 of step (width step for horizontal ticks and height step for vertical ticks).\n * @minimum 0\n */\n bandSize?: number;\n}\n\nexport const defaultTickConfig: TickConfig = {\n thickness: 1\n};\n\nexport function getMarkType(m: string | GenericMarkDef) {\n return isMarkDef(m) ? m.type : m;\n}\n","/**\n * Utility files for producing Vega ValueRef for marks\n */\nimport {SignalRef} from 'vega';\nimport {isFunction, isString} from 'vega-util';\nimport {isCountingAggregateOp} from '../../../aggregate';\nimport {isBinned, isBinning} from '../../../bin';\nimport {Channel, getMainRangeChannel, PolarPositionChannel, PositionChannel, X, X2, Y2} from '../../../channel';\nimport {\n binRequiresRange,\n ChannelDef,\n DatumDef,\n FieldDef,\n FieldDefBase,\n FieldName,\n FieldRefOption,\n getBandPosition,\n isDatumDef,\n isFieldDef,\n isFieldOrDatumDef,\n isTypedFieldDef,\n isValueDef,\n SecondaryChannelDef,\n SecondaryFieldDef,\n TypedFieldDef,\n Value,\n vgField\n} from '../../../channeldef';\nimport {Config} from '../../../config';\nimport {dateTimeToExpr, isDateTime} from '../../../datetime';\nimport {isExprRef} from '../../../expr';\nimport * as log from '../../../log';\nimport {isPathMark, Mark, MarkDef} from '../../../mark';\nimport {fieldValidPredicate} from '../../../predicate';\nimport {hasDiscreteDomain, isContinuousToContinuous} from '../../../scale';\nimport {StackProperties} from '../../../stack';\nimport {TEMPORAL} from '../../../type';\nimport {contains, stringify} from '../../../util';\nimport {isSignalRef, VgValueRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {ScaleComponent} from '../../scale/component';\n\nexport function midPointRefWithPositionInvalidTest(\n params: MidPointParams & {\n channel: PositionChannel | PolarPositionChannel;\n }\n) {\n const {channel, channelDef, markDef, scale, config} = params;\n const ref = midPoint(params);\n\n // Wrap to check if the positional value is invalid, if so, plot the point on the min value\n if (\n // Only this for field def without counting aggregate (as count wouldn't be null)\n isFieldDef(channelDef) &&\n !isCountingAggregateOp(channelDef.aggregate) &&\n // and only for continuous scale without zero (otherwise, null / invalid will be interpreted as zero, which doesn't cause layout problem)\n scale &&\n isContinuousToContinuous(scale.get('type')) &&\n scale.get('zero') === false\n ) {\n return wrapPositionInvalidTest({\n fieldDef: channelDef,\n channel,\n markDef,\n ref,\n config\n });\n }\n return ref;\n}\n\nexport function wrapPositionInvalidTest({\n fieldDef,\n channel,\n markDef,\n ref,\n config\n}: {\n fieldDef: FieldDef;\n channel: PositionChannel | PolarPositionChannel;\n markDef: MarkDef;\n ref: VgValueRef;\n config: Config;\n}): VgValueRef | VgValueRef[] {\n if (isPathMark(markDef.type)) {\n // path mark already use defined to skip points, no need to do it here.\n return ref;\n }\n\n const invalid = getMarkPropOrConfig('invalid', markDef, config);\n if (invalid === null) {\n // if there is no invalid filter, don't do the invalid test\n return ref;\n }\n\n return [fieldInvalidTestValueRef(fieldDef, channel), ref];\n}\n\nexport function fieldInvalidTestValueRef(fieldDef: FieldDef, channel: PositionChannel | PolarPositionChannel) {\n const test = fieldInvalidPredicate(fieldDef, true);\n\n const mainChannel = getMainRangeChannel(channel) as PositionChannel | PolarPositionChannel; // we can cast here as the output can't be other things.\n const zeroValueRef =\n mainChannel === 'y'\n ? {field: {group: 'height'}}\n : // x / angle / radius can all use 0\n {value: 0};\n\n return {test, ...zeroValueRef};\n}\n\nexport function fieldInvalidPredicate(field: FieldName | FieldDef, invalid = true) {\n return fieldValidPredicate(isString(field) ? field : vgField(field, {expr: 'datum'}), !invalid);\n}\n\nexport function datumDefToExpr(datumDef: DatumDef) {\n const {datum} = datumDef;\n if (isDateTime(datum)) {\n return dateTimeToExpr(datum);\n }\n return `${stringify(datum)}`;\n}\n\nexport function valueRefForFieldOrDatumDef(\n fieldDef: FieldDefBase | DatumDef,\n scaleName: string,\n opt: FieldRefOption,\n encode: {offset?: number | VgValueRef; band?: number | boolean | SignalRef}\n): VgValueRef {\n const ref: VgValueRef = {};\n\n if (scaleName) {\n ref.scale = scaleName;\n }\n\n if (isDatumDef(fieldDef)) {\n const {datum} = fieldDef;\n if (isDateTime(datum)) {\n ref.signal = dateTimeToExpr(datum);\n } else if (isSignalRef(datum)) {\n ref.signal = datum.signal;\n } else if (isExprRef(datum)) {\n ref.signal = datum.expr;\n } else {\n ref.value = datum;\n }\n } else {\n ref.field = vgField(fieldDef, opt);\n }\n\n if (encode) {\n const {offset, band} = encode;\n if (offset) {\n ref.offset = offset;\n }\n if (band) {\n ref.band = band;\n }\n }\n return ref;\n}\n\n/**\n * Signal that returns the middle of a bin from start and end field. Should only be used with x and y.\n */\nexport function interpolatedSignalRef({\n scaleName,\n fieldOrDatumDef,\n fieldOrDatumDef2,\n offset,\n startSuffix,\n bandPosition = 0.5\n}: {\n scaleName: string;\n fieldOrDatumDef: TypedFieldDef;\n fieldOrDatumDef2?: SecondaryFieldDef;\n startSuffix?: string;\n offset: number | SignalRef;\n bandPosition: number | SignalRef;\n}): VgValueRef {\n const expr = 0 < bandPosition && bandPosition < 1 ? 'datum' : undefined;\n const start = vgField(fieldOrDatumDef, {expr, suffix: startSuffix});\n const end =\n fieldOrDatumDef2 !== undefined\n ? vgField(fieldOrDatumDef2, {expr})\n : vgField(fieldOrDatumDef, {suffix: 'end', expr});\n\n const ref: VgValueRef = {};\n\n if (bandPosition === 0 || bandPosition === 1) {\n ref.scale = scaleName;\n const val = bandPosition === 0 ? start : end;\n ref.field = val;\n } else {\n const datum = isSignalRef(bandPosition)\n ? `${bandPosition.signal} * ${start} + (1-${bandPosition.signal}) * ${end}`\n : `${bandPosition} * ${start} + ${1 - bandPosition} * ${end}`;\n ref.signal = `scale(\"${scaleName}\", ${datum})`;\n }\n\n if (offset) {\n ref.offset = offset;\n }\n return ref;\n}\n\nexport interface MidPointParams {\n channel: Channel;\n channelDef: ChannelDef;\n channel2Def?: SecondaryChannelDef;\n\n markDef: MarkDef;\n config: Config;\n\n scaleName: string;\n scale: ScaleComponent;\n stack?: StackProperties;\n offset?: number | SignalRef;\n defaultRef: VgValueRef | (() => VgValueRef);\n\n bandPosition?: number | SignalRef;\n}\n\n/**\n * @returns {VgValueRef} Value Ref for xc / yc or mid point for other channels.\n */\nexport function midPoint({\n channel,\n channelDef,\n channel2Def,\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef,\n bandPosition\n}: MidPointParams): VgValueRef {\n // TODO: datum support\n if (channelDef) {\n /* istanbul ignore else */\n\n if (isFieldOrDatumDef(channelDef)) {\n if (isTypedFieldDef(channelDef)) {\n bandPosition ??= getBandPosition({\n fieldDef: channelDef,\n fieldDef2: channel2Def,\n markDef,\n config\n });\n const {bin, timeUnit, type} = channelDef;\n\n if (isBinning(bin) || (bandPosition && timeUnit && type === TEMPORAL)) {\n // Use middle only for x an y to place marks in the center between start and end of the bin range.\n // We do not use the mid point for other channels (e.g. size) so that properties of legends and marks match.\n if (stack && stack.impute) {\n // For stack, we computed bin_mid so we can impute.\n return valueRefForFieldOrDatumDef(channelDef, scaleName, {binSuffix: 'mid'}, {offset});\n }\n\n if (bandPosition) {\n // if band = 0, no need to call interpolation\n // For non-stack, we can just calculate bin mid on the fly using signal.\n return interpolatedSignalRef({scaleName, fieldOrDatumDef: channelDef, bandPosition, offset});\n }\n return valueRefForFieldOrDatumDef(\n channelDef,\n scaleName,\n binRequiresRange(channelDef, channel) ? {binSuffix: 'range'} : {},\n {\n offset\n }\n );\n } else if (isBinned(bin)) {\n if (isFieldDef(channel2Def)) {\n return interpolatedSignalRef({\n scaleName,\n fieldOrDatumDef: channelDef,\n fieldOrDatumDef2: channel2Def,\n bandPosition,\n offset\n });\n } else {\n const channel2 = channel === X ? X2 : Y2;\n log.warn(log.message.channelRequiredForBinned(channel2));\n }\n }\n }\n\n const scaleType = scale?.get('type');\n return valueRefForFieldOrDatumDef(\n channelDef,\n scaleName,\n hasDiscreteDomain(scaleType) ? {binSuffix: 'range'} : {}, // no need for bin suffix if there is no scale\n {\n offset,\n // For band, to get mid point, need to offset by half of the band\n band: scaleType === 'band' ? bandPosition ?? channelDef.bandPosition ?? 0.5 : undefined\n }\n );\n } else if (isValueDef(channelDef)) {\n const value = channelDef.value;\n const offsetMixins = offset ? {offset} : {};\n\n return {...widthHeightValueOrSignalRef(channel, value), ...offsetMixins};\n }\n\n // If channelDef is neither field def or value def, it's a condition-only def.\n // In such case, we will use default ref.\n }\n\n if (isFunction(defaultRef)) {\n defaultRef = defaultRef();\n }\n\n if (defaultRef) {\n // for non-position, ref could be undefined.\n return {\n ...defaultRef,\n // only include offset when it is non-zero (zero = no offset)\n ...(offset ? {offset} : {})\n };\n }\n return defaultRef;\n}\n\n/**\n * Convert special \"width\" and \"height\" values in Vega-Lite into Vega value ref.\n */\nexport function widthHeightValueOrSignalRef(channel: Channel, value: Value | SignalRef) {\n if (contains(['x', 'x2'], channel) && value === 'width') {\n return {field: {group: 'width'}};\n } else if (contains(['y', 'y2'], channel) && value === 'height') {\n return {field: {group: 'height'}};\n }\n return signalOrValueRef(value);\n}\n","import {SignalRef} from 'vega';\nimport {isString} from 'vega-util';\nimport {isBinning} from '../bin';\nimport {\n channelDefType,\n DatumDef,\n FieldDef,\n isFieldDef,\n isFieldOrDatumDefForTimeFormat,\n isScaleFieldDef,\n vgField\n} from '../channeldef';\nimport {Config} from '../config';\nimport {fieldValidPredicate} from '../predicate';\nimport {ScaleType} from '../scale';\nimport {formatExpression, normalizeTimeUnit, timeUnitSpecifierExpression} from '../timeunit';\nimport {QUANTITATIVE, Type} from '../type';\nimport {Dict, stringify} from '../util';\nimport {isSignalRef} from '../vega.schema';\nimport {TimeUnit} from './../timeunit';\nimport {datumDefToExpr} from './mark/encode/valueref';\n\nexport function isCustomFormatType(formatType: string) {\n return formatType && formatType !== 'number' && formatType !== 'time';\n}\n\nfunction customFormatExpr(formatType: string, field: string, format: string | Dict) {\n return `${formatType}(${field}${format ? `, ${stringify(format)}` : ''})`;\n}\n\nexport const BIN_RANGE_DELIMITER = ' \\u2013 ';\n\nexport function formatSignalRef({\n fieldOrDatumDef,\n format,\n formatType,\n expr,\n normalizeStack,\n config\n}: {\n fieldOrDatumDef: FieldDef | DatumDef;\n format: string | Dict;\n formatType: string;\n expr?: 'datum' | 'parent' | 'datum.datum';\n normalizeStack?: boolean;\n config: Config;\n}) {\n if (isCustomFormatType(formatType)) {\n return formatCustomType({\n fieldOrDatumDef,\n format,\n formatType,\n expr,\n config\n });\n }\n\n const field = fieldToFormat(fieldOrDatumDef, expr, normalizeStack);\n\n if (isFieldOrDatumDefForTimeFormat(fieldOrDatumDef)) {\n const signal = timeFormatExpression(\n field,\n isFieldDef(fieldOrDatumDef) ? normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit : undefined,\n format,\n config.timeFormat,\n isScaleFieldDef(fieldOrDatumDef) && fieldOrDatumDef.scale?.type === ScaleType.UTC\n );\n return signal ? {signal} : undefined;\n }\n\n format = numberFormat(channelDefType(fieldOrDatumDef), format, config);\n if (isFieldDef(fieldOrDatumDef) && isBinning(fieldOrDatumDef.bin)) {\n const endField = vgField(fieldOrDatumDef, {expr, binSuffix: 'end'});\n return {\n signal: binFormatExpression(field, endField, format, formatType, config)\n };\n } else if (format || channelDefType(fieldOrDatumDef) === 'quantitative') {\n return {\n signal: `${formatExpr(field, format)}`\n };\n } else {\n return {signal: `isValid(${field}) ? ${field} : \"\"+${field}`};\n }\n}\n\nfunction fieldToFormat(\n fieldOrDatumDef: FieldDef | DatumDef,\n expr: 'datum' | 'parent' | 'datum.datum',\n normalizeStack: boolean\n) {\n if (isFieldDef(fieldOrDatumDef)) {\n if (normalizeStack) {\n return `${vgField(fieldOrDatumDef, {expr, suffix: 'end'})}-${vgField(fieldOrDatumDef, {\n expr,\n suffix: 'start'\n })}`;\n } else {\n return vgField(fieldOrDatumDef, {expr});\n }\n } else {\n return datumDefToExpr(fieldOrDatumDef);\n }\n}\n\nexport function formatCustomType({\n fieldOrDatumDef,\n format,\n formatType,\n expr,\n normalizeStack,\n config,\n field\n}: {\n fieldOrDatumDef: FieldDef | DatumDef;\n format: string | Dict;\n formatType: string;\n expr?: 'datum' | 'parent' | 'datum.datum';\n normalizeStack?: boolean;\n config: Config;\n field?: string; // axis/legend \"use datum.value\"\n}) {\n field ??= fieldToFormat(fieldOrDatumDef, expr, normalizeStack);\n\n if (isFieldDef(fieldOrDatumDef) && isBinning(fieldOrDatumDef.bin)) {\n const endField = vgField(fieldOrDatumDef, {expr, binSuffix: 'end'});\n return {\n signal: binFormatExpression(field, endField, format, formatType, config)\n };\n }\n return {signal: customFormatExpr(formatType, field, format)};\n}\n\nexport function guideFormat(\n fieldOrDatumDef: FieldDef | DatumDef,\n type: Type,\n format: string | Dict,\n formatType: string,\n config: Config,\n omitTimeFormatConfig: boolean // axis doesn't use config.timeFormat\n) {\n if (isCustomFormatType(formatType)) {\n return undefined; // handled in encode block\n }\n\n if (isFieldOrDatumDefForTimeFormat(fieldOrDatumDef)) {\n const timeUnit = isFieldDef(fieldOrDatumDef) ? normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit : undefined;\n\n return timeFormat(format as string, timeUnit, config, omitTimeFormatConfig);\n }\n\n return numberFormat(type, format, config);\n}\n\nexport function guideFormatType(\n formatType: string | SignalRef,\n fieldOrDatumDef: FieldDef | DatumDef,\n scaleType: ScaleType\n) {\n if (formatType && (isSignalRef(formatType) || formatType === 'number' || formatType === 'time')) {\n return formatType;\n }\n if (isFieldOrDatumDefForTimeFormat(fieldOrDatumDef) && scaleType !== 'time' && scaleType !== 'utc') {\n return 'time';\n }\n return undefined;\n}\n\n/**\n * Returns number format for a fieldDef.\n */\nexport function numberFormat(type: Type, specifiedFormat: string | Dict, config: Config) {\n // Specified format in axis/legend has higher precedence than fieldDef.format\n if (isString(specifiedFormat)) {\n return specifiedFormat;\n }\n\n if (type === QUANTITATIVE) {\n // we only apply the default if the field is quantitative\n return config.numberFormat;\n }\n return undefined;\n}\n\n/**\n * Returns time format for a fieldDef for use in guides.\n */\nexport function timeFormat(specifiedFormat: string, timeUnit: TimeUnit, config: Config, omitTimeFormatConfig: boolean) {\n if (specifiedFormat) {\n return specifiedFormat;\n }\n\n if (timeUnit) {\n return {\n signal: timeUnitSpecifierExpression(timeUnit)\n };\n }\n\n return omitTimeFormatConfig ? undefined : config.timeFormat;\n}\n\nfunction formatExpr(field: string, format: string) {\n return `format(${field}, \"${format || ''}\")`;\n}\n\nfunction binNumberFormatExpr(field: string, format: string | Dict, formatType: string, config: Config) {\n if (isCustomFormatType(formatType)) {\n return customFormatExpr(formatType, field, format);\n }\n\n return formatExpr(field, (isString(format) ? format : undefined) ?? config.numberFormat);\n}\n\nexport function binFormatExpression(\n startField: string,\n endField: string,\n format: string | Dict,\n formatType: string,\n config: Config\n) {\n const start = binNumberFormatExpr(startField, format, formatType, config);\n const end = binNumberFormatExpr(endField, format, formatType, config);\n return `${fieldValidPredicate(startField, false)} ? \"null\" : ${start} + \"${BIN_RANGE_DELIMITER}\" + ${end}`;\n}\n\n/**\n * Returns the time expression used for axis/legend labels or text mark for a temporal field\n */\nexport function timeFormatExpression(\n field: string,\n timeUnit: TimeUnit,\n format: string | Dict,\n rawTimeFormat: string, // should be provided only for actual text and headers, not axis/legend labels\n isUTCScale: boolean\n): string {\n if (!timeUnit || format) {\n // If there is no time unit, or if user explicitly specifies format for axis/legend/text.\n format = isString(format) ? format : rawTimeFormat; // only use provided timeFormat if there is no timeUnit.\n return `${isUTCScale ? 'utc' : 'time'}Format(${field}, '${format}')`;\n } else {\n return formatExpression(timeUnit, field, isUTCScale);\n }\n}\n","import {isArray} from 'vega-util';\nimport {NonArgAggregateOp} from './aggregate';\nimport {FieldName} from './channeldef';\nimport {DateTime} from './datetime';\n\nexport type SortOrder = 'ascending' | 'descending';\n\n/**\n * A sort definition for transform\n */\nexport interface SortField {\n /**\n * The name of the field to sort.\n */\n field: FieldName;\n\n /**\n * Whether to sort the field in ascending or descending order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort).\n */\n order?: SortOrder | null;\n}\n\nexport interface SortFields {\n field: FieldName[];\n order?: SortOrder[];\n}\n\nexport const DEFAULT_SORT_OP = 'min';\n\n/**\n * A sort definition for sorting a discrete scale in an encoding field definition.\n */\n\nexport interface EncodingSortField {\n /**\n * The data [field](https://vega.github.io/vega-lite/docs/field.html) to sort by.\n *\n * __Default value:__ If unspecified, defaults to the field specified in the outer data reference.\n */\n field?: F; // Field is optional because `\"op\": \"count\"` does not require a field.\n /**\n * An [aggregate operation](https://vega.github.io/vega-lite/docs/aggregate.html#ops) to perform on the field prior to sorting (e.g., `\"count\"`, `\"mean\"` and `\"median\"`).\n * An aggregation is required when there are multiple values of the sort field for each encoded data field.\n * The input data objects will be aggregated, grouped by the encoded data field.\n *\n * For a full list of operations, please see the documentation for [aggregate](https://vega.github.io/vega-lite/docs/aggregate.html#ops).\n *\n * __Default value:__ `\"sum\"` for stacked plots. Otherwise, `\"min\"`.\n */\n op?: NonArgAggregateOp;\n\n /**\n * The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort).\n */\n order?: SortOrder | null;\n}\n\nexport interface SortByEncoding {\n /**\n * The [encoding channel](https://vega.github.io/vega-lite/docs/encoding.html#channels) to sort by (e.g., `\"x\"`, `\"y\"`)\n */\n encoding: SortByChannel;\n\n /**\n * The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort).\n */\n order?: SortOrder | null;\n}\n\nexport type SortArray = number[] | string[] | boolean[] | DateTime[];\n\nconst SORT_BY_CHANNEL_INDEX = {\n x: 1,\n y: 1,\n color: 1,\n fill: 1,\n stroke: 1,\n strokeWidth: 1,\n size: 1,\n shape: 1,\n fillOpacity: 1,\n strokeOpacity: 1,\n opacity: 1,\n text: 1\n} as const;\n\nexport type SortByChannel = keyof typeof SORT_BY_CHANNEL_INDEX;\n\nexport function isSortByChannel(c: string): c is SortByChannel {\n return c in SORT_BY_CHANNEL_INDEX;\n}\n\nexport type SortByChannelDesc =\n | '-x'\n | '-y'\n | '-color'\n | '-fill'\n | '-stroke'\n | '-strokeWidth'\n | '-size'\n | '-shape'\n | '-fillOpacity'\n | '-strokeOpacity'\n | '-opacity'\n | '-text';\n\nexport type AllSortString = SortOrder | SortByChannel | SortByChannelDesc;\n\nexport type Sort = SortArray | AllSortString | EncodingSortField | SortByEncoding | null;\n\nexport function isSortByEncoding(sort: Sort): sort is SortByEncoding {\n return !!sort && !!sort['encoding'];\n}\n\nexport function isSortField(sort: Sort): sort is EncodingSortField {\n return !!sort && (sort['op'] === 'count' || !!sort['field']);\n}\n\nexport function isSortArray(sort: Sort): sort is SortArray {\n return !!sort && isArray(sort);\n}\n","import {LayoutAlign, SignalRef} from 'vega';\nimport {BinParams} from '../bin';\nimport {ChannelDef, Field, FieldName, TypedFieldDef} from '../channeldef';\nimport {ExprRef} from '../expr';\nimport {Header} from '../header';\nimport {EncodingSortField, SortArray, SortOrder} from '../sort';\nimport {StandardType} from '../type';\nimport {BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins} from './base';\nimport {GenericLayerSpec, NormalizedLayerSpec} from './layer';\nimport {GenericUnitSpec, NormalizedUnitSpec} from './unit';\n\nexport interface FacetFieldDef\n extends TypedFieldDef {\n /**\n * An object defining properties of a facet's header.\n */\n header?: Header | null;\n\n // Note: `\"sort\"` for facet field def is different from encoding field def as it does not support `SortByEncoding`\n\n /**\n * Sort order for the encoded field.\n *\n * For continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n *\n * For discrete fields, `sort` can be one of the following:\n * - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n * - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n * - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n * - `null` indicating no sort.\n *\n * __Default value:__ `\"ascending\"`\n *\n * __Note:__ `null` is not supported for `row` and `column`.\n */\n sort?: SortArray | SortOrder | EncodingSortField | null;\n}\n\nexport type FacetEncodingFieldDef<\n F extends Field,\n ES extends ExprRef | SignalRef = ExprRef | SignalRef\n> = FacetFieldDef & GenericCompositionLayoutWithColumns;\n\nexport interface RowColumnEncodingFieldDef\n extends FacetFieldDef {\n // Manually declarae this separated from GenericCompositionLayout as we don't support RowCol object in RowColumnEncodingFieldDef\n\n /**\n * The alignment to apply to row/column facet's subplot.\n * The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n *\n * - For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n * - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n * - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n *\n * __Default value:__ `\"all\"`.\n */\n align?: LayoutAlign;\n\n /**\n * Boolean flag indicating if facet's subviews should be centered relative to their respective rows or columns.\n *\n * __Default value:__ `false`\n */\n center?: boolean;\n\n /**\n * The spacing in pixels between facet's sub-views.\n *\n * __Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)\n */\n spacing?: number;\n}\n\nexport interface FacetMapping<\n F extends Field,\n FD extends FacetFieldDef = FacetFieldDef\n> {\n /**\n * A field definition for the vertical facet of trellis plots.\n */\n row?: FD;\n\n /**\n * A field definition for the horizontal facet of trellis plots.\n */\n column?: FD;\n}\n\nexport function isFacetMapping(\n f: FacetFieldDef | FacetMapping\n): f is FacetMapping {\n return 'row' in f || 'column' in f;\n}\n\n/**\n * Facet mapping for encoding macro\n */\nexport interface EncodingFacetMapping\n extends FacetMapping> {\n /**\n * A field definition for the (flexible) facet of trellis plots.\n *\n * If either `row` or `column` is specified, this channel will be ignored.\n */\n facet?: FacetEncodingFieldDef;\n}\n\nexport function isFacetFieldDef(channelDef: ChannelDef): channelDef is FacetFieldDef {\n return !!channelDef && 'header' in channelDef;\n}\n\n/**\n * Base interface for a facet specification.\n */\nexport interface GenericFacetSpec, L extends GenericLayerSpec, F extends Field>\n extends BaseSpec,\n GenericCompositionLayoutWithColumns,\n ResolveMixins {\n /**\n * Definition for how to facet the data. One of:\n * 1) [a field definition for faceting the plot by one field](https://vega.github.io/vega-lite/docs/facet.html#field-def)\n * 2) [An object that maps `row` and `column` channels to their field definitions](https://vega.github.io/vega-lite/docs/facet.html#mapping)\n */\n facet: FacetFieldDef | FacetMapping;\n\n /**\n * A specification of the view that gets faceted.\n */\n spec: L | U;\n // TODO: replace this with GenericSpec once we support all cases;\n}\n\n/**\n * A facet specification without any shortcut / expansion syntax\n */\nexport type NormalizedFacetSpec = GenericFacetSpec;\n\nexport function isFacetSpec(spec: BaseSpec): spec is GenericFacetSpec {\n return 'facet' in spec;\n}\n","import {Gradient, ScaleType, SignalRef, Text} from 'vega';\nimport {isArray, isBoolean, isNumber, isString} from 'vega-util';\nimport {Aggregate, isAggregateOp, isArgmaxDef, isArgminDef, isCountingAggregateOp} from './aggregate';\nimport {Axis} from './axis';\nimport {autoMaxBins, Bin, BinParams, binToString, isBinned, isBinning} from './bin';\nimport {\n ANGLE,\n Channel,\n COLOR,\n COLUMN,\n DESCRIPTION,\n DETAIL,\n ExtendedChannel,\n FACET,\n FILL,\n FILLOPACITY,\n getSizeChannel,\n HREF,\n isScaleChannel,\n isSecondaryRangeChannel,\n isXorY,\n KEY,\n LATITUDE,\n LATITUDE2,\n LONGITUDE,\n LONGITUDE2,\n OPACITY,\n ORDER,\n PolarPositionScaleChannel,\n PositionScaleChannel,\n RADIUS,\n RADIUS2,\n ROW,\n SHAPE,\n SIZE,\n STROKE,\n STROKEDASH,\n STROKEOPACITY,\n STROKEWIDTH,\n TEXT,\n THETA,\n THETA2,\n TOOLTIP,\n URL,\n X,\n X2,\n Y,\n Y2\n} from './channel';\nimport {getMarkConfig, getMarkPropOrConfig} from './compile/common';\nimport {isCustomFormatType} from './compile/format';\nimport {CompositeAggregate} from './compositemark';\nimport {Config} from './config';\nimport {DateTime, dateTimeToExpr, isDateTime} from './datetime';\nimport {Encoding} from './encoding';\nimport {ExprRef, isExprRef} from './expr';\nimport {Guide, GuideEncodingConditionalValueDef, TitleMixins} from './guide';\nimport {ImputeParams} from './impute';\nimport {Legend} from './legend';\nimport * as log from './log';\nimport {LogicalComposition} from './logical';\nimport {isRectBasedMark, Mark, MarkDef, RelativeBandSize} from './mark';\nimport {ParameterPredicate, Predicate} from './predicate';\nimport {hasDiscreteDomain, isContinuousToDiscrete, Scale, SCALE_CATEGORY_INDEX} from './scale';\nimport {isSortByChannel, Sort, SortOrder} from './sort';\nimport {isFacetFieldDef} from './spec/facet';\nimport {StackOffset} from './stack';\nimport {\n getTimeUnitParts,\n isLocalSingleTimeUnit,\n normalizeTimeUnit,\n TimeUnit,\n TimeUnitParams,\n timeUnitToString\n} from './timeunit';\nimport {AggregatedFieldDef, WindowFieldDef} from './transform';\nimport {getFullName, QUANTITATIVE, StandardType, Type} from './type';\nimport {\n Dict,\n flatAccessWithDatum,\n getFirstDefined,\n internalField,\n omit,\n removePathFromField,\n replacePathInField,\n stringify,\n titleCase\n} from './util';\nimport {isSignalRef} from './vega.schema';\n\nexport type PrimitiveValue = number | string | boolean | null;\n\nexport type Value =\n | PrimitiveValue\n | number[]\n | Gradient\n | Text\n | ES;\n\n/**\n * Definition object for a constant value (primitive value or gradient definition) of an encoding channel.\n */\nexport interface ValueDef {\n /**\n * A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).\n */\n value: V;\n}\n\nexport type PositionValueDef = ValueDef;\nexport type NumericValueDef = ValueDef;\n\n/**\n * A ValueDef with Condition where either the condition or the value are optional.\n * {\n * condition: {field: ...} | {value: ...},\n * value: ...,\n * }\n */\n\n/**\n * @minProperties 1\n */\nexport type ValueDefWithCondition | DatumDef, V extends Value = Value> = Partial<\n ValueDef\n> & {\n /**\n * A field definition or one or more value definition(s) with a parameter predicate.\n */\n condition?:\n | Conditional\n | Conditional>\n | Conditional>[];\n};\n\nexport type StringValueDefWithCondition = ValueDefWithCondition<\n MarkPropFieldOrDatumDef,\n string | null\n>;\nexport type TypeForShape = 'nominal' | 'ordinal' | 'geojson';\n\nexport type Conditional | DatumDef | ValueDef | ExprRef | SignalRef> =\n | ConditionalPredicate\n | ConditionalParameter;\n\nexport type ConditionalPredicate | DatumDef | ValueDef | ExprRef | SignalRef> = {\n /**\n * Predicate for triggering the condition\n */\n test: LogicalComposition;\n} & CD;\n\nexport type ConditionalParameter<\n CD extends FieldDef | DatumDef | ValueDef | ExprRef | SignalRef\n> = ParameterPredicate & CD;\n\nexport function isConditionalParameter(c: Conditional): c is ConditionalParameter {\n return c['param'];\n}\n\nexport interface ConditionValueDefMixins {\n /**\n * One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n *\n * __Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\n * since Vega-Lite only allows at most one encoded field per encoding channel.\n */\n condition?: Conditional> | Conditional>[];\n}\n\n/**\n * A FieldDef with Condition\n * {\n * condition: {value: ...},\n * field: ...,\n * ...\n * }\n */\n\nexport type FieldOrDatumDefWithCondition | DatumDef, V extends Value = Value> = F &\n ConditionValueDefMixins;\n\nexport type MarkPropDef =\n | FieldOrDatumDefWithCondition, V>\n | FieldOrDatumDefWithCondition, V>\n | ValueDefWithCondition, V>;\n\nexport type ColorDef = MarkPropDef;\nexport type NumericMarkPropDef = MarkPropDef;\n\nexport type NumericArrayMarkPropDef = MarkPropDef;\n\nexport type ShapeDef = MarkPropDef;\n\nexport type StringFieldDefWithCondition = FieldOrDatumDefWithCondition, string>;\nexport type TextDef =\n | FieldOrDatumDefWithCondition, Text>\n | FieldOrDatumDefWithCondition, Text>\n | ValueDefWithCondition, Text>;\n\n/**\n * A ValueDef with optional Condition\n * {\n * condition: {field: ...} | {value: ...},\n * value: ...,\n * }\n */\n\n/**\n * Reference to a repeated value.\n */\nexport interface RepeatRef {\n repeat: 'row' | 'column' | 'repeat' | 'layer';\n}\n\nexport type FieldName = string;\nexport type Field = FieldName | RepeatRef;\n\nexport function isRepeatRef(field: Field | any): field is RepeatRef {\n return field && !isString(field) && 'repeat' in field;\n}\n\n/** @@hidden */\nexport type HiddenCompositeAggregate = CompositeAggregate;\n\nexport interface FieldDefBase extends BandMixins {\n /**\n * __Required.__ A string defining the name of the field from which to pull a data value\n * or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n *\n * __See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n *\n * __Notes:__\n * 1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\n * If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\n * See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n * 2) `field` is not required if `aggregate` is `count`.\n */\n field?: F;\n\n // function\n\n /**\n * Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\n * or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n *\n * __Default value:__ `undefined` (None)\n *\n * __See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation.\n */\n timeUnit?: TimeUnit | TimeUnitParams;\n\n /**\n * Aggregation function for the field\n * (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n *\n * __Default value:__ `undefined` (None)\n *\n * __See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation.\n */\n aggregate?: Aggregate | HiddenCompositeAggregate;\n\n /**\n * A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n *\n * - If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n *\n * - If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n *\n * __Default value:__ `false`\n *\n * __See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.\n */\n bin?: B;\n}\n\nexport function toFieldDefBase(fieldDef: FieldDef): FieldDefBase {\n const {field, timeUnit, bin, aggregate} = fieldDef;\n return {\n ...(timeUnit ? {timeUnit} : {}),\n ...(bin ? {bin} : {}),\n ...(aggregate ? {aggregate} : {}),\n field\n };\n}\n\nexport interface TypeMixins {\n /**\n * The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`).\n * It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n *\n * Vega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if:\n * (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit`\n * or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n *\n * __Default value:__\n *\n * 1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n * - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n * - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n * - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n *\n * 2) For a constant value in data domain (`datum`):\n * - `\"quantitative\"` if the datum is a number\n * - `\"nominal\"` if the datum is a string\n * - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n *\n * __Note:__\n * - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n * - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n * - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n * - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n * - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n * - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n *\n * __See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation.\n */\n type?: T;\n}\n\n/**\n * Definition object for a data field, its type and transformation of an encoding channel.\n */\nexport type TypedFieldDef<\n F extends Field,\n T extends Type = any,\n B extends Bin = boolean | BinParams | 'binned' | null // This is equivalent to Bin but we use the full form so the docs has detailed types\n> = FieldDefBase & TitleMixins & TypeMixins;\n\nexport interface SortableFieldDef<\n F extends Field,\n T extends Type = StandardType,\n B extends Bin = boolean | BinParams | null\n> extends TypedFieldDef {\n /**\n * Sort order for the encoded field.\n *\n * For continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n *\n * For discrete fields, `sort` can be one of the following:\n * - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n * - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n * - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n * - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n * - `null` indicating no sort.\n *\n * __Default value:__ `\"ascending\"`\n *\n * __Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n *\n * __See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation.\n */\n sort?: Sort;\n}\n\nexport function isSortableFieldDef(fieldDef: FieldDef): fieldDef is SortableFieldDef {\n return 'sort' in fieldDef;\n}\n\nexport type ScaleFieldDef<\n F extends Field,\n T extends Type = StandardType,\n B extends Bin = boolean | BinParams | null\n> = SortableFieldDef & ScaleMixins;\n\nexport interface ScaleMixins {\n /**\n * An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n *\n * If `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n *\n * __Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n *\n * __See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation.\n */\n scale?: Scale | null;\n}\n\nexport interface DatumDef<\n F extends Field = string,\n V extends PrimitiveValue | DateTime | ExprRef | SignalRef = PrimitiveValue | DateTime | ExprRef | SignalRef\n> extends Partial>,\n BandMixins {\n /**\n * A constant value in data domain.\n */\n datum?: F extends RepeatRef ? V | RepeatRef : V;\n // only apply Repeatref if field (F) can be RepeatRef\n // FIXME(https://github.com/microsoft/TypeScript/issues/37586):\n // `F extends RepeatRef` probably should be `RepeatRef extends F` but there is likely a bug in TS.\n}\n\nexport interface FormatMixins {\n /**\n * When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n *\n * - If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n * - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n *\n * See the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n *\n * When used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n *\n * __Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.\n */\n format?: string | Dict;\n\n /**\n * The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n *\n * __Default value:__\n * - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n * - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.\n */\n formatType?: 'number' | 'time' | string;\n}\n\nexport type StringDatumDef = DatumDef & FormatMixins;\n\nexport type ScaleDatumDef = ScaleMixins & DatumDef;\n\n/**\n * A field definition of a secondary channel that shares a scale with another primary channel. For example, `x2`, `xError` and `xError2` share the same scale with `x`.\n */\nexport type SecondaryFieldDef = FieldDefBase & TitleMixins; // x2/y2 shouldn't have bin, but we keep bin property for simplicity of the codebase.\n\nexport type Position2Def = SecondaryFieldDef | DatumDef | PositionValueDef;\n\nexport type SecondaryChannelDef = Encoding['x2' | 'y2'];\n\n/**\n * Field Def without scale (and without bin: \"binned\" support).\n */\nexport type FieldDefWithoutScale = TypedFieldDef;\n\nexport type LatLongFieldDef = FieldDefBase &\n TitleMixins &\n Partial>; // Lat long shouldn't have bin, but we keep bin property for simplicity of the codebase.\n\nexport type LatLongDef = LatLongFieldDef | DatumDef;\n\nexport type PositionFieldDefBase = ScaleFieldDef<\n F,\n StandardType,\n boolean | BinParams | 'binned' | null // This is equivalent to Bin but we use the full form so the docs has detailed types\n> &\n PositionBaseMixins;\n\nexport type PositionDatumDefBase = ScaleDatumDef & PositionBaseMixins;\n\nexport interface PositionBaseMixins {\n /**\n * Type of stacking offset if the field should be stacked.\n * `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains.\n * For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n *\n * `stack` can be one of the following values:\n * - `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart).\n * - `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized).
\n * -`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)).\n * - `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n *\n * __Default value:__ `zero` for plots with all of the following conditions are true:\n * (1) the mark is `bar`, `area`, or `arc`;\n * (2) the stacked measure channel (x or y) has a linear scale;\n * (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n *\n * __See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation.\n */\n stack?: StackOffset | null | boolean;\n}\n\nexport interface BandMixins {\n /**\n * Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.\n *\n * @minimum 0\n * @maximum 1\n */\n bandPosition?: number;\n}\n\nexport type PositionFieldDef = PositionFieldDefBase & PositionMixins;\n\nexport type PositionDatumDef = PositionDatumDefBase & PositionMixins;\n\nexport type PositionDef = PositionFieldDef | PositionDatumDef | PositionValueDef;\n\nexport interface PositionMixins {\n /**\n * An object defining properties of axis's gridlines, ticks and labels.\n * If `null`, the axis for the encoding channel will be removed.\n *\n * __Default value:__ If undefined, default [axis properties](https://vega.github.io/vega-lite/docs/axis.html) are applied.\n *\n * __See also:__ [`axis`](https://vega.github.io/vega-lite/docs/axis.html) documentation.\n */\n axis?: Axis | null;\n\n /**\n * An object defining the properties of the Impute Operation to be applied.\n * The field value of the other positional channel is taken as `key` of the `Impute` Operation.\n * The field of the `color` channel if specified is used as `groupby` of the `Impute` Operation.\n *\n * __See also:__ [`impute`](https://vega.github.io/vega-lite/docs/impute.html) documentation.\n */\n impute?: ImputeParams | null;\n}\n\nexport type PolarDef = PositionFieldDefBase | PositionDatumDefBase | PositionValueDef;\n\nexport function getBandPosition({\n fieldDef,\n fieldDef2,\n markDef: mark,\n config\n}: {\n fieldDef: FieldDef | DatumDef;\n fieldDef2?: SecondaryChannelDef;\n markDef: MarkDef;\n config: Config;\n}): number {\n if (isFieldOrDatumDef(fieldDef) && fieldDef.bandPosition !== undefined) {\n return fieldDef.bandPosition;\n }\n if (isFieldDef(fieldDef)) {\n const {timeUnit, bin} = fieldDef;\n if (timeUnit && !fieldDef2) {\n return isRectBasedMark(mark.type) ? 0 : getMarkConfig('timeUnitBandPosition', mark, config);\n } else if (isBinning(bin)) {\n return 0.5;\n }\n }\n\n return undefined;\n}\n\nexport function getBandSize({\n channel,\n fieldDef,\n fieldDef2,\n markDef: mark,\n config,\n scaleType,\n useVlSizeChannel\n}: {\n channel: PositionScaleChannel | PolarPositionScaleChannel;\n fieldDef: ChannelDef;\n fieldDef2?: SecondaryChannelDef;\n markDef: MarkDef;\n config: Config;\n scaleType: ScaleType;\n useVlSizeChannel?: boolean;\n}): number | RelativeBandSize | SignalRef {\n const sizeChannel = getSizeChannel(channel);\n const size = getMarkPropOrConfig(useVlSizeChannel ? 'size' : sizeChannel, mark, config, {\n vgChannel: sizeChannel\n });\n\n if (size !== undefined) {\n return size;\n }\n\n if (isFieldDef(fieldDef)) {\n const {timeUnit, bin} = fieldDef;\n\n if (timeUnit && !fieldDef2) {\n return {band: getMarkConfig('timeUnitBandSize', mark, config)};\n } else if (isBinning(bin) && !hasDiscreteDomain(scaleType)) {\n return {band: 1};\n }\n }\n\n if (isRectBasedMark(mark.type)) {\n if (scaleType) {\n if (hasDiscreteDomain(scaleType)) {\n return config[mark.type]?.discreteBandSize || {band: 1};\n } else {\n return config[mark.type]?.continuousBandSize;\n }\n }\n return config[mark.type]?.discreteBandSize;\n }\n\n return undefined;\n}\n\nexport function hasBandEnd(\n fieldDef: FieldDef,\n fieldDef2: SecondaryChannelDef,\n markDef: MarkDef,\n config: Config\n): boolean {\n if (isBinning(fieldDef.bin) || (fieldDef.timeUnit && isTypedFieldDef(fieldDef) && fieldDef.type === 'temporal')) {\n // Need to check bandPosition because non-rect marks (e.g., point) with timeUnit\n // doesn't have to use bandEnd if there is no bandPosition.\n return getBandPosition({fieldDef, fieldDef2, markDef, config}) !== undefined;\n }\n return false;\n}\n\n/**\n * Field definition of a mark property, which can contain a legend.\n */\nexport type MarkPropFieldDef = ScaleFieldDef &\n LegendMixins;\n\nexport type MarkPropDatumDef = LegendMixins & ScaleDatumDef;\n\nexport type MarkPropFieldOrDatumDef =\n | MarkPropFieldDef\n | MarkPropDatumDef;\n\nexport interface LegendMixins {\n /**\n * An object defining properties of the legend.\n * If `null`, the legend for the encoding channel will be removed.\n *\n * __Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n *\n * __See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation.\n */\n legend?: Legend | null;\n}\n\n// Detail\n\n// Order Path have no scale\n\nexport interface OrderFieldDef extends FieldDefWithoutScale {\n /**\n * The sort order. One of `\"ascending\"` (default) or `\"descending\"`.\n */\n sort?: SortOrder;\n}\n\nexport type OrderValueDef = ConditionValueDefMixins & NumericValueDef;\n\nexport interface StringFieldDef extends FieldDefWithoutScale, FormatMixins {}\n\nexport type FieldDef = SecondaryFieldDef | TypedFieldDef;\nexport type ChannelDef = Encoding[keyof Encoding];\n\nexport function isConditionalDef | GuideEncodingConditionalValueDef | ExprRef | SignalRef>(\n channelDef: CD\n): channelDef is CD & {condition: Conditional} {\n return !!channelDef && 'condition' in channelDef;\n}\n\n/**\n * Return if a channelDef is a ConditionalValueDef with ConditionFieldDef\n */\nexport function hasConditionalFieldDef(\n channelDef: Partial>\n): channelDef is {condition: Conditional>} {\n const condition = channelDef && channelDef['condition'];\n return !!condition && !isArray(condition) && isFieldDef(condition);\n}\n\nexport function hasConditionalFieldOrDatumDef(\n channelDef: ChannelDef\n): channelDef is {condition: Conditional>} {\n const condition = channelDef && channelDef['condition'];\n return !!condition && !isArray(condition) && isFieldOrDatumDef(condition);\n}\n\nexport function hasConditionalValueDef(\n channelDef: ChannelDef\n): channelDef is ValueDef & {condition: Conditional> | Conditional>[]} {\n const condition = channelDef && channelDef['condition'];\n return !!condition && (isArray(condition) || isValueDef(condition));\n}\n\nexport function isFieldDef(\n channelDef: Partial> | FieldDefBase | DatumDef\n): channelDef is FieldDefBase | TypedFieldDef | SecondaryFieldDef {\n // TODO: we can't use field in channelDef here as it's somehow failing runtime test\n return !!channelDef && (!!channelDef['field'] || channelDef['aggregate'] === 'count');\n}\n\nexport function channelDefType(channelDef: ChannelDef): Type | undefined {\n return channelDef && channelDef['type'];\n}\n\nexport function isDatumDef(\n channelDef: Partial> | FieldDefBase | DatumDef\n): channelDef is DatumDef {\n return !!channelDef && 'datum' in channelDef;\n}\n\nexport function isContinuousFieldOrDatumDef(\n cd: ChannelDef\n): cd is TypedFieldDef | DatumDef {\n // TODO: make datum support DateTime object\n return (isTypedFieldDef(cd) && !isDiscrete(cd)) || isNumericDataDef(cd);\n}\n\nexport function isQuantitativeFieldOrDatumDef(cd: ChannelDef) {\n // TODO: make datum support DateTime object\n return channelDefType(cd) === 'quantitative' || isNumericDataDef(cd);\n}\n\nexport function isNumericDataDef(cd: ChannelDef): cd is DatumDef {\n return isDatumDef(cd) && isNumber(cd.datum);\n}\n\nexport function isFieldOrDatumDef(\n channelDef: Partial>\n): channelDef is FieldDef | DatumDef {\n return isFieldDef(channelDef) || isDatumDef(channelDef);\n}\n\nexport function isTypedFieldDef(channelDef: ChannelDef): channelDef is TypedFieldDef {\n return !!channelDef && ('field' in channelDef || channelDef['aggregate'] === 'count') && 'type' in channelDef;\n}\n\nexport function isValueDef(channelDef: Partial>): channelDef is ValueDef {\n return channelDef && 'value' in channelDef && 'value' in channelDef;\n}\n\nexport function isScaleFieldDef(channelDef: ChannelDef): channelDef is ScaleFieldDef {\n return !!channelDef && ('scale' in channelDef || 'sort' in channelDef);\n}\n\nexport function isPositionFieldOrDatumDef(\n channelDef: ChannelDef\n): channelDef is PositionFieldDef | PositionDatumDef {\n return channelDef && ('axis' in channelDef || 'stack' in channelDef || 'impute' in channelDef);\n}\n\nexport function isMarkPropFieldOrDatumDef(\n channelDef: ChannelDef\n): channelDef is MarkPropFieldDef | MarkPropDatumDef {\n return !!channelDef && 'legend' in channelDef;\n}\n\nexport function isStringFieldOrDatumDef(\n channelDef: ChannelDef\n): channelDef is StringFieldDef | StringDatumDef {\n return !!channelDef && ('format' in channelDef || 'formatType' in channelDef);\n}\n\nexport function toStringFieldDef(fieldDef: FieldDef): StringFieldDef {\n // omit properties that don't exist in string field defs\n return omit(fieldDef, ['legend', 'axis', 'header', 'scale'] as any[]);\n}\n\nexport interface FieldRefOption {\n /** Exclude bin, aggregate, timeUnit */\n nofn?: boolean;\n /** Wrap the field with datum, parent, or datum.datum (e.g., datum['...'] for Vega Expression */\n expr?: 'datum' | 'parent' | 'datum.datum';\n /** Prepend fn with custom function prefix */\n prefix?: string;\n /** Append suffix to the field ref for bin (default='start') */\n binSuffix?: 'end' | 'range' | 'mid';\n /** Append suffix to the field ref (general) */\n suffix?: string;\n /**\n * Use the field name for `as` in a transform.\n * We will not escape nested accesses because Vega transform outputs cannot be nested.\n */\n forAs?: boolean;\n}\n\nfunction isOpFieldDef(\n fieldDef: FieldDefBase | WindowFieldDef | AggregatedFieldDef\n): fieldDef is WindowFieldDef | AggregatedFieldDef {\n return 'op' in fieldDef;\n}\n\n/**\n * Get a Vega field reference from a Vega-Lite field def.\n */\nexport function vgField(\n fieldDef: FieldDefBase | WindowFieldDef | AggregatedFieldDef,\n opt: FieldRefOption = {}\n): string {\n let field = fieldDef.field;\n const prefix = opt.prefix;\n let suffix = opt.suffix;\n\n let argAccessor = ''; // for accessing argmin/argmax field at the end without getting escaped\n\n if (isCount(fieldDef)) {\n field = internalField('count');\n } else {\n let fn: string;\n\n if (!opt.nofn) {\n if (isOpFieldDef(fieldDef)) {\n fn = fieldDef.op;\n } else {\n const {bin, aggregate, timeUnit} = fieldDef;\n if (isBinning(bin)) {\n fn = binToString(bin);\n suffix = (opt.binSuffix ?? '') + (opt.suffix ?? '');\n } else if (aggregate) {\n if (isArgmaxDef(aggregate)) {\n argAccessor = `[\"${field}\"]`;\n field = `argmax_${aggregate.argmax}`;\n } else if (isArgminDef(aggregate)) {\n argAccessor = `[\"${field}\"]`;\n field = `argmin_${aggregate.argmin}`;\n } else {\n fn = String(aggregate);\n }\n } else if (timeUnit) {\n fn = timeUnitToString(timeUnit);\n suffix = ((!['range', 'mid'].includes(opt.binSuffix) && opt.binSuffix) || '') + (opt.suffix ?? '');\n }\n }\n }\n\n if (fn) {\n field = field ? `${fn}_${field}` : fn;\n }\n }\n\n if (suffix) {\n field = `${field}_${suffix}`;\n }\n\n if (prefix) {\n field = `${prefix}_${field}`;\n }\n\n if (opt.forAs) {\n return removePathFromField(field);\n } else if (opt.expr) {\n // Expression to access flattened field. No need to escape dots.\n return flatAccessWithDatum(field, opt.expr) + argAccessor;\n } else {\n // We flattened all fields so paths should have become dot.\n return replacePathInField(field) + argAccessor;\n }\n}\n\nexport function isDiscrete(def: TypedFieldDef | DatumDef) {\n switch (def.type) {\n case 'nominal':\n case 'ordinal':\n case 'geojson':\n return true;\n case 'quantitative':\n return isFieldDef(def) && !!def.bin;\n case 'temporal':\n return false;\n }\n throw new Error(log.message.invalidFieldType(def.type));\n}\n\nexport function isDiscretizing(def: TypedFieldDef | DatumDef) {\n return isScaleFieldDef(def) && isContinuousToDiscrete(def.scale?.type);\n}\n\nexport function isCount(fieldDef: FieldDefBase) {\n return fieldDef.aggregate === 'count';\n}\n\nexport type FieldTitleFormatter = (fieldDef: FieldDefBase, config: Config) => string;\n\nexport function verbalTitleFormatter(fieldDef: FieldDefBase, config: Config) {\n const {field, bin, timeUnit, aggregate} = fieldDef;\n if (aggregate === 'count') {\n return config.countTitle;\n } else if (isBinning(bin)) {\n return `${field} (binned)`;\n } else if (timeUnit) {\n const unit = normalizeTimeUnit(timeUnit)?.unit;\n if (unit) {\n return `${field} (${getTimeUnitParts(unit).join('-')})`;\n }\n } else if (aggregate) {\n if (isArgmaxDef(aggregate)) {\n return `${field} for max ${aggregate.argmax}`;\n } else if (isArgminDef(aggregate)) {\n return `${field} for min ${aggregate.argmin}`;\n } else {\n return `${titleCase(aggregate)} of ${field}`;\n }\n }\n return field;\n}\n\nexport function functionalTitleFormatter(fieldDef: FieldDefBase) {\n const {aggregate, bin, timeUnit, field} = fieldDef;\n if (isArgmaxDef(aggregate)) {\n return `${field} for argmax(${aggregate.argmax})`;\n } else if (isArgminDef(aggregate)) {\n return `${field} for argmin(${aggregate.argmin})`;\n }\n\n const timeUnitParams = normalizeTimeUnit(timeUnit);\n\n const fn = aggregate || timeUnitParams?.unit || (timeUnitParams?.maxbins && 'timeunit') || (isBinning(bin) && 'bin');\n if (fn) {\n return `${fn.toUpperCase()}(${field})`;\n } else {\n return field;\n }\n}\n\nexport const defaultTitleFormatter: FieldTitleFormatter = (fieldDef: FieldDefBase, config: Config) => {\n switch (config.fieldTitle) {\n case 'plain':\n return fieldDef.field;\n case 'functional':\n return functionalTitleFormatter(fieldDef);\n default:\n return verbalTitleFormatter(fieldDef, config);\n }\n};\n\nlet titleFormatter = defaultTitleFormatter;\n\nexport function setTitleFormatter(formatter: FieldTitleFormatter) {\n titleFormatter = formatter;\n}\n\nexport function resetTitleFormatter() {\n setTitleFormatter(defaultTitleFormatter);\n}\n\nexport function title(\n fieldOrDatumDef: TypedFieldDef | SecondaryFieldDef | DatumDef,\n config: Config,\n {allowDisabling, includeDefault = true}: {allowDisabling: boolean; includeDefault?: boolean}\n) {\n const guideTitle = getGuide(fieldOrDatumDef)?.title;\n\n if (!isFieldDef(fieldOrDatumDef)) {\n return guideTitle;\n }\n const fieldDef = fieldOrDatumDef;\n\n const def = includeDefault ? defaultTitle(fieldDef, config) : undefined;\n\n if (allowDisabling) {\n return getFirstDefined(guideTitle, fieldDef.title, def);\n } else {\n return guideTitle ?? fieldDef.title ?? def;\n }\n}\n\nexport function getGuide(fieldDef: TypedFieldDef | SecondaryFieldDef | DatumDef): Guide {\n if (isPositionFieldOrDatumDef(fieldDef) && fieldDef.axis) {\n return fieldDef.axis;\n } else if (isMarkPropFieldOrDatumDef(fieldDef) && fieldDef.legend) {\n return fieldDef.legend;\n } else if (isFacetFieldDef(fieldDef) && fieldDef.header) {\n return fieldDef.header;\n }\n return undefined;\n}\n\nexport function defaultTitle(fieldDef: FieldDefBase, config: Config) {\n return titleFormatter(fieldDef, config);\n}\n\nexport function getFormatMixins(fieldDef: TypedFieldDef | DatumDef) {\n if (isStringFieldOrDatumDef(fieldDef)) {\n const {format, formatType} = fieldDef;\n return {format, formatType};\n } else {\n const guide = getGuide(fieldDef) ?? {};\n const {format, formatType} = guide;\n return {format, formatType};\n }\n}\n\nexport function defaultType>(fieldDef: T, channel: ExtendedChannel): Type {\n switch (channel) {\n case 'latitude':\n case 'longitude':\n return 'quantitative';\n\n case 'row':\n case 'column':\n case 'facet':\n case 'shape':\n case 'strokeDash':\n return 'nominal';\n\n case 'order':\n return 'ordinal';\n }\n\n if (isSortableFieldDef(fieldDef) && isArray(fieldDef.sort)) {\n return 'ordinal';\n }\n\n const {aggregate, bin, timeUnit} = fieldDef;\n if (timeUnit) {\n return 'temporal';\n }\n\n if (bin || (aggregate && !isArgmaxDef(aggregate) && !isArgminDef(aggregate))) {\n return 'quantitative';\n }\n\n if (isScaleFieldDef(fieldDef) && fieldDef.scale?.type) {\n switch (SCALE_CATEGORY_INDEX[fieldDef.scale.type]) {\n case 'numeric':\n case 'discretizing':\n return 'quantitative';\n case 'time':\n return 'temporal';\n }\n }\n\n return 'nominal';\n}\n\n/**\n * Returns the fieldDef -- either from the outer channelDef or from the condition of channelDef.\n * @param channelDef\n */\n\nexport function getFieldDef(channelDef: ChannelDef): FieldDef {\n if (isFieldDef(channelDef)) {\n return channelDef;\n } else if (hasConditionalFieldDef(channelDef)) {\n return channelDef.condition;\n }\n return undefined;\n}\n\nexport function getFieldOrDatumDef = ChannelDef>(\n channelDef: CD\n): FieldDef | DatumDef {\n if (isFieldOrDatumDef(channelDef)) {\n return channelDef;\n } else if (hasConditionalFieldOrDatumDef(channelDef)) {\n return channelDef.condition;\n }\n return undefined;\n}\n\n/**\n * Convert type to full, lowercase type, or augment the fieldDef with a default type if missing.\n */\nexport function initChannelDef(\n channelDef: ChannelDef,\n channel: ExtendedChannel,\n config: Config,\n opt: {compositeMark?: boolean} = {}\n): ChannelDef {\n if (isString(channelDef) || isNumber(channelDef) || isBoolean(channelDef)) {\n const primitiveType = isString(channelDef) ? 'string' : isNumber(channelDef) ? 'number' : 'boolean';\n log.warn(log.message.primitiveChannelDef(channel, primitiveType, channelDef));\n return {value: channelDef} as ValueDef;\n }\n\n // If a fieldDef contains a field, we need type.\n if (isFieldOrDatumDef(channelDef)) {\n return initFieldOrDatumDef(channelDef, channel, config, opt);\n } else if (hasConditionalFieldOrDatumDef(channelDef)) {\n return {\n ...channelDef,\n // Need to cast as normalizeFieldDef normally return FieldDef, but here we know that it is definitely Condition\n condition: initFieldOrDatumDef(channelDef.condition, channel, config, opt) as Conditional>\n };\n }\n return channelDef;\n}\n\nexport function initFieldOrDatumDef(\n fd: FieldDef | DatumDef,\n channel: ExtendedChannel,\n config: Config,\n opt: {compositeMark?: boolean}\n): FieldDef | DatumDef {\n if (isStringFieldOrDatumDef(fd)) {\n const {format, formatType, ...rest} = fd;\n if (isCustomFormatType(formatType) && !config.customFormatTypes) {\n log.warn(log.message.customFormatTypeNotAllowed(channel));\n return initFieldOrDatumDef(rest, channel, config, opt);\n }\n } else {\n const guideType = isPositionFieldOrDatumDef(fd)\n ? 'axis'\n : isMarkPropFieldOrDatumDef(fd)\n ? 'legend'\n : isFacetFieldDef(fd)\n ? 'header'\n : null;\n if (guideType && fd[guideType]) {\n const {format, formatType, ...newGuide} = fd[guideType];\n if (isCustomFormatType(formatType) && !config.customFormatTypes) {\n log.warn(log.message.customFormatTypeNotAllowed(channel));\n return initFieldOrDatumDef({...fd, [guideType]: newGuide}, channel, config, opt);\n }\n }\n }\n\n if (isFieldDef(fd)) {\n return initFieldDef(fd, channel, opt);\n }\n return initDatumDef(fd);\n}\n\nfunction initDatumDef(datumDef: DatumDef): DatumDef {\n let type = datumDef['type'];\n if (type) {\n return datumDef;\n }\n const {datum} = datumDef;\n type = isNumber(datum) ? 'quantitative' : isString(datum) ? 'nominal' : isDateTime(datum) ? 'temporal' : undefined;\n\n return {...datumDef, type};\n}\n\nexport function initFieldDef(\n fd: FieldDef,\n channel: ExtendedChannel,\n {compositeMark = false}: {compositeMark?: boolean} = {}\n) {\n const {aggregate, timeUnit, bin, field} = fd;\n const fieldDef = {...fd};\n\n // Drop invalid aggregate\n if (!compositeMark && aggregate && !isAggregateOp(aggregate) && !isArgmaxDef(aggregate) && !isArgminDef(aggregate)) {\n log.warn(log.message.invalidAggregate(aggregate));\n delete fieldDef.aggregate;\n }\n\n // Normalize Time Unit\n if (timeUnit) {\n fieldDef.timeUnit = normalizeTimeUnit(timeUnit);\n }\n\n if (field) {\n fieldDef.field = `${field}`;\n }\n\n // Normalize bin\n if (isBinning(bin)) {\n fieldDef.bin = normalizeBin(bin, channel);\n }\n\n if (isBinned(bin) && !isXorY(channel)) {\n log.warn(log.message.channelShouldNotBeUsedForBinned(channel));\n }\n\n // Normalize Type\n if (isTypedFieldDef(fieldDef)) {\n const {type} = fieldDef;\n const fullType = getFullName(type);\n if (type !== fullType) {\n // convert short type to full type\n fieldDef.type = fullType;\n }\n if (type !== 'quantitative') {\n if (isCountingAggregateOp(aggregate)) {\n log.warn(log.message.invalidFieldTypeForCountAggregate(type, aggregate));\n fieldDef.type = 'quantitative';\n }\n }\n } else if (!isSecondaryRangeChannel(channel)) {\n // If type is empty / invalid, then augment with default type\n const newType = defaultType(fieldDef as TypedFieldDef, channel);\n fieldDef['type'] = newType;\n }\n\n if (isTypedFieldDef(fieldDef)) {\n const {compatible, warning} = channelCompatibility(fieldDef, channel) || {};\n if (compatible === false) {\n log.warn(warning);\n }\n }\n\n if (isSortableFieldDef(fieldDef) && isString(fieldDef.sort)) {\n const {sort} = fieldDef;\n if (isSortByChannel(sort)) {\n return {\n ...fieldDef,\n sort: {encoding: sort}\n };\n }\n const sub = sort.substr(1);\n if (sort.charAt(0) === '-' && isSortByChannel(sub)) {\n return {\n ...fieldDef,\n sort: {encoding: sub, order: 'descending'}\n };\n }\n }\n\n if (isFacetFieldDef(fieldDef)) {\n const {header} = fieldDef;\n if (header) {\n const {orient, ...rest} = header;\n if (orient) {\n return {\n ...fieldDef,\n header: {\n ...rest,\n labelOrient: header.labelOrient || orient,\n titleOrient: header.titleOrient || orient\n }\n };\n }\n }\n }\n\n return fieldDef;\n}\n\nexport function normalizeBin(bin: BinParams | boolean | 'binned', channel?: ExtendedChannel) {\n if (isBoolean(bin)) {\n return {maxbins: autoMaxBins(channel)};\n } else if (bin === 'binned') {\n return {\n binned: true\n };\n } else if (!bin.maxbins && !bin.step) {\n return {...bin, maxbins: autoMaxBins(channel)};\n } else {\n return bin;\n }\n}\n\nconst COMPATIBLE = {compatible: true};\nexport function channelCompatibility(\n fieldDef: TypedFieldDef,\n channel: ExtendedChannel\n): {compatible: boolean; warning?: string} {\n const type = fieldDef.type;\n\n if (type === 'geojson' && channel !== 'shape') {\n return {\n compatible: false,\n warning: `Channel ${channel} should not be used with a geojson data.`\n };\n }\n\n switch (channel) {\n case ROW:\n case COLUMN:\n case FACET:\n if (!isDiscrete(fieldDef)) {\n return {\n compatible: false,\n warning: log.message.channelShouldBeDiscrete(channel)\n };\n }\n return COMPATIBLE;\n\n case X:\n case Y:\n case COLOR:\n case FILL:\n case STROKE:\n case TEXT:\n case DETAIL:\n case KEY:\n case TOOLTIP:\n case HREF:\n case URL:\n case ANGLE:\n case THETA:\n case RADIUS:\n case DESCRIPTION:\n return COMPATIBLE;\n\n case LONGITUDE:\n case LONGITUDE2:\n case LATITUDE:\n case LATITUDE2:\n if (type !== QUANTITATIVE) {\n return {\n compatible: false,\n warning: `Channel ${channel} should be used with a quantitative field only, not ${fieldDef.type} field.`\n };\n }\n return COMPATIBLE;\n\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n case STROKEWIDTH:\n case SIZE:\n case THETA2:\n case RADIUS2:\n case X2:\n case Y2:\n if (type === 'nominal' && !fieldDef['sort']) {\n return {\n compatible: false,\n warning: `Channel ${channel} should not be used with an unsorted discrete field.`\n };\n }\n return COMPATIBLE;\n\n case SHAPE:\n case STROKEDASH:\n if (!isDiscrete(fieldDef) && !isDiscretizing(fieldDef)) {\n return {\n compatible: false,\n warning: log.message.channelShouldBeDiscreteOrDiscretizing(channel)\n };\n }\n return COMPATIBLE;\n\n case ORDER:\n if (fieldDef.type === 'nominal' && !('sort' in fieldDef)) {\n return {\n compatible: false,\n warning: `Channel order is inappropriate for nominal field, which has no inherent order.`\n };\n }\n return COMPATIBLE;\n }\n}\n\n/**\n * Check if the field def uses a time format or does not use any format but is temporal\n * (this does not cover field defs that are temporal but use a number format).\n */\nexport function isFieldOrDatumDefForTimeFormat(fieldOrDatumDef: FieldDef | DatumDef): boolean {\n const {formatType} = getFormatMixins(fieldOrDatumDef);\n return formatType === 'time' || (!formatType && isTimeFieldDef(fieldOrDatumDef));\n}\n\n/**\n * Check if field def has type `temporal`. If you want to also cover field defs that use a time format, use `isTimeFormatFieldDef`.\n */\nexport function isTimeFieldDef(def: FieldDef | DatumDef): boolean {\n return def && (def['type'] === 'temporal' || (isFieldDef(def) && !!def.timeUnit));\n}\n\n/**\n * Getting a value associated with a fielddef.\n * Convert the value to Vega expression if applicable (for datetime object, or string if the field def is temporal or has timeUnit)\n */\nexport function valueExpr(\n v: number | string | boolean | DateTime | ExprRef | SignalRef | number[],\n {\n timeUnit,\n type,\n wrapTime,\n undefinedIfExprNotRequired\n }: {\n timeUnit: TimeUnit | TimeUnitParams;\n type?: Type;\n wrapTime?: boolean;\n undefinedIfExprNotRequired?: boolean;\n }\n): string {\n const unit = timeUnit && normalizeTimeUnit(timeUnit)?.unit;\n let isTime = unit || type === 'temporal';\n\n let expr;\n if (isExprRef(v)) {\n expr = v.expr;\n } else if (isSignalRef(v)) {\n expr = v.signal;\n } else if (isDateTime(v)) {\n isTime = true;\n expr = dateTimeToExpr(v);\n } else if (isString(v) || isNumber(v)) {\n if (isTime) {\n expr = `datetime(${stringify(v)})`;\n\n if (isLocalSingleTimeUnit(unit)) {\n // for single timeUnit, we will use dateTimeToExpr to convert number/string to match the timeUnit\n if ((isNumber(v) && v < 10000) || (isString(v) && isNaN(Date.parse(v)))) {\n expr = dateTimeToExpr({[unit]: v});\n }\n }\n }\n }\n if (expr) {\n return wrapTime && isTime ? `time(${expr})` : expr;\n }\n // number or boolean or normal string\n return undefinedIfExprNotRequired ? undefined : stringify(v);\n}\n\n/**\n * Standardize value array -- convert each value to Vega expression if applicable\n */\nexport function valueArray(\n fieldOrDatumDef: TypedFieldDef | DatumDef,\n values: (number | string | boolean | DateTime)[]\n) {\n const {type} = fieldOrDatumDef;\n return values.map(v => {\n const expr = valueExpr(v, {\n timeUnit: isFieldDef(fieldOrDatumDef) ? fieldOrDatumDef.timeUnit : undefined,\n type,\n undefinedIfExprNotRequired: true\n });\n // return signal for the expression if we need an expression\n if (expr !== undefined) {\n return {signal: expr};\n }\n // otherwise just return the original value\n return v;\n });\n}\n\n/**\n * Checks whether a fieldDef for a particular channel requires a computed bin range.\n */\nexport function binRequiresRange(fieldDef: FieldDef, channel: Channel): boolean {\n if (!isBinning(fieldDef.bin)) {\n console.warn('Only call this method for binned field defs.');\n return false;\n }\n\n // We need the range only when the user explicitly forces a binned field to be use discrete scale. In this case, bin range is used in axis and legend labels.\n // We could check whether the axis or legend exists (not disabled) but that seems overkill.\n return isScaleChannel(channel) && ['ordinal', 'nominal'].includes((fieldDef as ScaleFieldDef).type);\n}\n","import {\n Align,\n Axis as VgAxis,\n AxisEncode,\n AxisOrient,\n BaseAxis,\n Color,\n FontStyle,\n FontWeight,\n LabelOverlap,\n SignalRef,\n TextBaseline,\n TimeInterval,\n TimeIntervalStep\n} from 'vega';\nimport {ConditionalPredicate, Value, ValueDef} from './channeldef';\nimport {DateTime} from './datetime';\nimport {ExprRef} from './expr';\nimport {Guide, GuideEncodingEntry, TitleMixins, VlOnlyGuideConfig} from './guide';\nimport {Flag, keys} from './util';\nimport {MapExcludeValueRefAndReplaceSignalWith, VgEncodeChannel} from './vega.schema';\n\nexport type BaseAxisNoValueRefs = AxisOverrideMixins &\n VLOnlyAxisMixins &\n Omit, 'labelOverlap'>;\n\ninterface AxisOverrideMixins {\n // Position and tickMinStep are not config in Vega, but are in Vega-Lite. So we just copy them here.\n\n /**\n * The anchor position of the axis in pixels. For x-axes with top or bottom orientation, this sets the axis group x coordinate. For y-axes with left or right orientation, this sets the axis group y coordinate.\n *\n * __Default value__: `0`\n */\n position?: number | ES;\n\n /**\n * The minimum desired step between axis ticks, in terms of scale domain values. For example, a value of `1` indicates that ticks should not be less than 1 unit apart. If `tickMinStep` is specified, the `tickCount` value will be adjusted, if necessary, to enforce the minimum step value.\n */\n tickMinStep?: number | ES;\n\n // ---------- Properties that do not support signal / expression ----------\n /**\n * A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis.\n *\n * __Default value:__ `true`\n */\n domain?: boolean;\n\n /**\n * A boolean flag indicating if grid lines should be included as part of the axis\n *\n * __Default value:__ `true` for [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous) that are not binned; otherwise, `false`.\n */\n grid?: boolean;\n\n /**\n * A boolean flag indicating if labels should be included as part of the axis.\n *\n * __Default value:__ `true`.\n */\n labels?: boolean;\n\n /**\n * Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for `band` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with `\"bandPosition\": 1` and an axis `\"padding\"` value of `0`.\n */\n tickExtra?: boolean;\n\n /**\n * Boolean flag indicating if pixel position values should be rounded to the nearest integer.\n *\n * __Default value:__ `true`\n */\n tickRound?: boolean;\n\n /**\n * Boolean value that determines whether the axis should include ticks.\n *\n * __Default value:__ `true`\n */\n ticks?: boolean;\n\n // Override comments to be Vega-Lite specific\n\n /**\n * Indicates if the first and last axis labels should be aligned flush with the scale range. Flush alignment for a horizontal axis will left-align the first label and right-align the last label. For vertical axes, bottom and top text baselines are applied instead. If this property is a number, it also indicates the number of pixels by which to offset the first and last labels; for example, a value of 2 will flush-align the first and last labels and also push them 2 pixels outward from the center of the axis. The additional adjustment can sometimes help the labels better visually group with corresponding axis ticks.\n *\n * __Default value:__ `true` for axis of a continuous x-scale. Otherwise, `false`.\n */\n labelFlush?: boolean | number;\n\n /**\n * The strategy to use for resolving overlap of axis labels. If `false` (the default), no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used (this works well for standard linear axes). If set to `\"greedy\"`, a linear scan of the labels is performed, removing any labels that overlaps with the last visible label (this often works better for log-scaled axes).\n *\n * __Default value:__ `true` for non-nominal fields with non-log scales; `\"greedy\"` for log scales; otherwise `false`.\n */\n labelOverlap?: LabelOverlap | ES;\n\n /**\n * The offset, in pixels, by which to displace the axis from the edge of the enclosing group or data rectangle.\n *\n * __Default value:__ derived from the [axis config](https://vega.github.io/vega-lite/docs/config.html#facet-scale-config)'s `offset` (`0` by default)\n */\n offset?: number | ES;\n\n /**\n * The orientation of the axis. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`. The orientation can be used to further specialize the axis type (e.g., a y-axis oriented towards the right edge of the chart).\n *\n * __Default value:__ `\"bottom\"` for x-axes and `\"left\"` for y-axes.\n */\n orient?: AxisOrient | ES;\n\n /**\n * A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are \"nice\" (multiples of 2, 5, 10) and lie within the underlying scale's range.\n *\n * For scales of type `\"time\"` or `\"utc\"`, the tick count can instead be a time interval specifier. Legal string values are `\"millisecond\"`, `\"second\"`, `\"minute\"`, `\"hour\"`, `\"day\"`, `\"week\"`, `\"month\"`, and `\"year\"`. Alternatively, an object-valued interval specifier of the form `{\"interval\": \"month\", \"step\": 3}` includes a desired number of interval steps. Here, ticks are generated for each quarter (Jan, Apr, Jul, Oct) boundary.\n *\n * __Default value__: Determine using a formula `ceil(width/40)` for x and `ceil(height/40)` for y.\n *\n * @minimum 0\n */\n tickCount?: number | TimeInterval | TimeIntervalStep | ES;\n\n /**\n * Explicitly set the visible axis tick values.\n */\n values?: number[] | string[] | boolean[] | DateTime[] | ES; // Vega already supports Signal -- we have to re-declare here since VL supports special Date Time object that's not valid in Vega.\n\n /**\n * A non-negative integer indicating the z-index of the axis.\n * If zindex is 0, axes should be drawn behind all chart elements.\n * To put them in front, set `zindex` to `1` or more.\n *\n * __Default value:__ `0` (behind the marks).\n *\n * @TJS-type integer\n * @minimum 0\n */\n zindex?: number;\n}\n\ninterface VLOnlyAxisMixins {\n /**\n * [Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n *\n * __Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.\n */\n labelExpr?: string;\n\n /**\n * A string or array of strings indicating the name of custom styles to apply to the axis. A style is a named collection of axis property defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles.\n *\n * __Default value:__ (none)\n * __Note:__ Any specified style will augment the default style. For example, an x-axis mark with `\"style\": \"foo\"` will use `config.axisX` and `config.style.foo` (the specified style `\"foo\"` has higher precedence).\n */\n style?: string | string[];\n}\n\nexport type ConditionalAxisProp =\n | 'labelAlign'\n | 'labelBaseline'\n | 'labelColor'\n | 'labelFont'\n | 'labelFontSize'\n | 'labelFontStyle'\n | 'labelFontWeight'\n | 'labelOpacity'\n | 'labelOffset'\n | 'labelPadding'\n | 'gridColor'\n | 'gridDash'\n | 'gridDashOffset'\n | 'gridOpacity'\n | 'gridWidth'\n | 'tickColor'\n | 'tickDash'\n | 'tickDashOffset'\n | 'tickOpacity'\n | 'tickSize'\n | 'tickWidth';\n\nexport const CONDITIONAL_AXIS_PROP_INDEX: Record<\n ConditionalAxisProp,\n {\n part: keyof AxisEncode;\n vgProp: VgEncodeChannel;\n } | null // null if we need to convert condition to signal\n> = {\n labelAlign: {\n part: 'labels',\n vgProp: 'align'\n },\n labelBaseline: {\n part: 'labels',\n vgProp: 'baseline'\n },\n labelColor: {\n part: 'labels',\n vgProp: 'fill'\n },\n labelFont: {\n part: 'labels',\n vgProp: 'font'\n },\n labelFontSize: {\n part: 'labels',\n vgProp: 'fontSize'\n },\n labelFontStyle: {\n part: 'labels',\n vgProp: 'fontStyle'\n },\n labelFontWeight: {\n part: 'labels',\n vgProp: 'fontWeight'\n },\n labelOpacity: {\n part: 'labels',\n vgProp: 'opacity'\n },\n labelOffset: null,\n labelPadding: null, // There is no fixed vgProp for tickSize, need to use signal.\n gridColor: {\n part: 'grid',\n vgProp: 'stroke'\n },\n gridDash: {\n part: 'grid',\n vgProp: 'strokeDash'\n },\n gridDashOffset: {\n part: 'grid',\n vgProp: 'strokeDashOffset'\n },\n gridOpacity: {\n part: 'grid',\n vgProp: 'opacity'\n },\n gridWidth: {\n part: 'grid',\n vgProp: 'strokeWidth'\n },\n tickColor: {\n part: 'ticks',\n vgProp: 'stroke'\n },\n tickDash: {\n part: 'ticks',\n vgProp: 'strokeDash'\n },\n tickDashOffset: {\n part: 'ticks',\n vgProp: 'strokeDashOffset'\n },\n tickOpacity: {\n part: 'ticks',\n vgProp: 'opacity'\n },\n tickSize: null, // There is no fixed vgProp for tickSize, need to use signal.\n tickWidth: {\n part: 'ticks',\n vgProp: 'strokeWidth'\n }\n};\n\nexport type ConditionalAxisProperty = (ValueDef | ES) & {\n condition: ConditionalPredicate | ES> | ConditionalPredicate | ES>[];\n};\n\nexport function isConditionalAxisValue(\n v: any\n): v is ConditionalAxisProperty {\n return v && v['condition'];\n}\n\nexport type ConditionalAxisNumber = ConditionalAxisProperty<\n number | null,\n ES\n>;\nexport type ConditionalAxisLabelAlign = ConditionalAxisProperty<\n Align | null,\n ES\n>;\nexport type ConditionalAxisLabelBaseline<\n ES extends ExprRef | SignalRef = ExprRef | SignalRef\n> = ConditionalAxisProperty;\nexport type ConditionalAxisColor = ConditionalAxisProperty<\n Color | null,\n ES\n>;\nexport type ConditionalAxisString = ConditionalAxisProperty<\n string | null,\n ES\n>;\n\nexport type ConditionalAxisLabelFontStyle<\n ES extends ExprRef | SignalRef = ExprRef | SignalRef\n> = ConditionalAxisProperty;\nexport type ConditionalAxisLabelFontWeight<\n ES extends ExprRef | SignalRef = ExprRef | SignalRef\n> = ConditionalAxisProperty;\n\nexport type ConditionalAxisNumberArray = ConditionalAxisProperty<\n number[] | null,\n ES\n>;\n\n// Vega axis config is the same as Vega axis base. If this is not the case, add specific type.\nexport type AxisConfigBaseWithConditionalAndSignal = Omit<\n BaseAxisNoValueRefs,\n ConditionalAxisProp | 'title'\n> &\n AxisPropsWithCondition;\n\nexport interface AxisPropsWithCondition {\n labelAlign?: BaseAxisNoValueRefs['labelAlign'] | ConditionalAxisLabelAlign;\n labelBaseline?: BaseAxisNoValueRefs['labelBaseline'] | ConditionalAxisLabelBaseline;\n labelColor?: BaseAxisNoValueRefs['labelColor'] | ConditionalAxisColor;\n labelFont?: BaseAxisNoValueRefs['labelFont'] | ConditionalAxisString;\n labelFontSize?: BaseAxisNoValueRefs['labelFontSize'] | ConditionalAxisNumber;\n labelFontStyle?: BaseAxisNoValueRefs['labelFontStyle'] | ConditionalAxisLabelFontStyle;\n labelFontWeight?: BaseAxisNoValueRefs['labelFontWeight'] | ConditionalAxisLabelFontWeight;\n labelLineHeight?: BaseAxisNoValueRefs['labelLineHeight'] | ConditionalAxisNumber;\n labelOpacity?: BaseAxisNoValueRefs['labelOpacity'] | ConditionalAxisNumber;\n labelOffset?: BaseAxisNoValueRefs['labelOffset'] | ConditionalAxisNumber;\n labelPadding?: BaseAxisNoValueRefs['labelPadding'] | ConditionalAxisNumber;\n gridColor?: BaseAxisNoValueRefs['gridColor'] | ConditionalAxisColor;\n gridDash?: BaseAxisNoValueRefs['gridDash'] | ConditionalAxisNumberArray;\n gridDashOffset?: BaseAxisNoValueRefs['gridDashOffset'] | ConditionalAxisNumber;\n gridOpacity?: BaseAxisNoValueRefs['gridOpacity'] | ConditionalAxisNumber;\n gridWidth?: BaseAxisNoValueRefs['gridWidth'] | ConditionalAxisNumber;\n tickColor?: BaseAxisNoValueRefs['tickColor'] | ConditionalAxisColor;\n tickDash?: BaseAxisNoValueRefs['tickDash'] | ConditionalAxisNumberArray;\n tickDashOffset?: BaseAxisNoValueRefs['tickDashOffset'] | ConditionalAxisNumber;\n tickOpacity?: BaseAxisNoValueRefs['tickOpacity'] | ConditionalAxisNumber;\n tickSize?: BaseAxisNoValueRefs['tickSize'] | ConditionalAxisNumber;\n tickWidth?: BaseAxisNoValueRefs['tickWidth'] | ConditionalAxisNumber;\n title?: TitleMixins['title'];\n}\n\nexport type AxisConfig = Guide &\n VlOnlyGuideConfig &\n AxisConfigBaseWithConditionalAndSignal & {\n /**\n * Disable axis by default.\n */\n disable?: boolean;\n };\n\nexport interface Axis\n extends AxisConfigBaseWithConditionalAndSignal,\n Guide {\n /**\n * Mark definitions for custom axis encoding.\n *\n * @hidden\n */\n encoding?: AxisEncoding;\n}\n\nexport type AxisInternal = Axis;\n\nexport type AxisPart = keyof AxisEncoding;\nexport const AXIS_PARTS: AxisPart[] = ['domain', 'grid', 'labels', 'ticks', 'title'];\n\n/**\n * A dictionary listing whether a certain axis property is applicable for only main axes or only grid axes.\n */\nexport const AXIS_PROPERTY_TYPE: Record = {\n grid: 'grid',\n gridCap: 'grid',\n gridColor: 'grid',\n gridDash: 'grid',\n gridDashOffset: 'grid',\n gridOpacity: 'grid',\n gridScale: 'grid',\n gridWidth: 'grid',\n\n orient: 'main',\n\n bandPosition: 'both', // Need to be applied to grid axis too, so the grid will align with ticks.\n\n aria: 'main',\n description: 'main',\n domain: 'main',\n domainCap: 'main',\n domainColor: 'main',\n domainDash: 'main',\n domainDashOffset: 'main',\n domainOpacity: 'main',\n domainWidth: 'main',\n format: 'main',\n formatType: 'main',\n labelAlign: 'main',\n labelAngle: 'main',\n labelBaseline: 'main',\n labelBound: 'main',\n labelColor: 'main',\n labelFlush: 'main',\n labelFlushOffset: 'main',\n labelFont: 'main',\n labelFontSize: 'main',\n labelFontStyle: 'main',\n labelFontWeight: 'main',\n labelLimit: 'main',\n labelLineHeight: 'main',\n labelOffset: 'main',\n labelOpacity: 'main',\n labelOverlap: 'main',\n labelPadding: 'main',\n labels: 'main',\n labelSeparation: 'main',\n maxExtent: 'main',\n minExtent: 'main',\n offset: 'both',\n position: 'main',\n tickCap: 'main',\n tickColor: 'main',\n tickDash: 'main',\n tickDashOffset: 'main',\n tickMinStep: 'both',\n tickOffset: 'both', // Need to be applied to grid axis too, so the grid will align with ticks.\n tickOpacity: 'main',\n tickRound: 'both', // Apply rounding to grid and ticks so they are aligned.\n ticks: 'main',\n tickSize: 'main',\n tickWidth: 'both',\n title: 'main',\n titleAlign: 'main',\n titleAnchor: 'main',\n titleAngle: 'main',\n titleBaseline: 'main',\n titleColor: 'main',\n titleFont: 'main',\n titleFontSize: 'main',\n titleFontStyle: 'main',\n titleFontWeight: 'main',\n titleLimit: 'main',\n titleLineHeight: 'main',\n titleOpacity: 'main',\n titlePadding: 'main',\n titleX: 'main',\n titleY: 'main',\n\n encode: 'both', // we hide this in Vega-Lite\n scale: 'both',\n tickBand: 'both',\n tickCount: 'both',\n tickExtra: 'both',\n translate: 'both',\n values: 'both',\n zindex: 'both' // this is actually set afterward, so it doesn't matter\n};\n\nexport interface AxisEncoding {\n /**\n * Custom encoding for the axis container.\n */\n axis?: GuideEncodingEntry;\n\n /**\n * Custom encoding for the axis domain rule mark.\n */\n domain?: GuideEncodingEntry;\n\n /**\n * Custom encoding for axis gridline rule marks.\n */\n grid?: GuideEncodingEntry;\n\n /**\n * Custom encoding for axis label text marks.\n */\n labels?: GuideEncodingEntry;\n\n /**\n * Custom encoding for axis tick rule marks.\n */\n ticks?: GuideEncodingEntry;\n\n /**\n * Custom encoding for the axis title text mark.\n */\n title?: GuideEncodingEntry;\n}\n\nexport const COMMON_AXIS_PROPERTIES_INDEX: Flag)> = {\n orient: 1, // other things can depend on orient\n\n aria: 1,\n bandPosition: 1,\n description: 1,\n domain: 1,\n domainCap: 1,\n domainColor: 1,\n domainDash: 1,\n domainDashOffset: 1,\n domainOpacity: 1,\n domainWidth: 1,\n format: 1,\n formatType: 1,\n grid: 1,\n gridCap: 1,\n gridColor: 1,\n gridDash: 1,\n gridDashOffset: 1,\n gridOpacity: 1,\n gridWidth: 1,\n labelAlign: 1,\n labelAngle: 1,\n labelBaseline: 1,\n labelBound: 1,\n labelColor: 1,\n labelFlush: 1,\n labelFlushOffset: 1,\n labelFont: 1,\n labelFontSize: 1,\n labelFontStyle: 1,\n labelFontWeight: 1,\n labelLimit: 1,\n labelLineHeight: 1,\n labelOffset: 1,\n labelOpacity: 1,\n labelOverlap: 1,\n labelPadding: 1,\n labels: 1,\n labelSeparation: 1,\n maxExtent: 1,\n minExtent: 1,\n offset: 1,\n position: 1,\n tickBand: 1,\n tickCap: 1,\n tickColor: 1,\n tickCount: 1,\n tickDash: 1,\n tickDashOffset: 1,\n tickExtra: 1,\n tickMinStep: 1,\n tickOffset: 1,\n tickOpacity: 1,\n tickRound: 1,\n ticks: 1,\n tickSize: 1,\n tickWidth: 1,\n title: 1,\n titleAlign: 1,\n titleAnchor: 1,\n titleAngle: 1,\n titleBaseline: 1,\n titleColor: 1,\n titleFont: 1,\n titleFontSize: 1,\n titleFontStyle: 1,\n titleFontWeight: 1,\n titleLimit: 1,\n titleLineHeight: 1,\n titleOpacity: 1,\n titlePadding: 1,\n titleX: 1,\n titleY: 1,\n translate: 1,\n values: 1,\n zindex: 1\n};\n\nconst AXIS_PROPERTIES_INDEX: Flag> = {\n ...COMMON_AXIS_PROPERTIES_INDEX,\n style: 1,\n labelExpr: 1,\n encoding: 1\n};\n\nexport function isAxisProperty(prop: string): prop is keyof Axis {\n return !!AXIS_PROPERTIES_INDEX[prop];\n}\n\n// Export for dependent projects\nexport const AXIS_PROPERTIES = keys(AXIS_PROPERTIES_INDEX);\n\nexport interface AxisConfigMixins {\n /**\n * Axis configuration, which determines default properties for all `x` and `y` [axes](https://vega.github.io/vega-lite/docs/axis.html). For a full list of axis configuration options, please see the [corresponding section of the axis documentation](https://vega.github.io/vega-lite/docs/axis.html#config).\n */\n axis?: AxisConfig;\n\n /**\n * X-axis specific config.\n */\n axisX?: AxisConfig;\n\n /**\n * Y-axis specific config.\n */\n axisY?: AxisConfig;\n\n /**\n * Config for y-axis along the left edge of the chart.\n */\n axisLeft?: AxisConfig;\n\n /**\n * Config for y-axis along the right edge of the chart.\n */\n axisRight?: AxisConfig;\n\n /**\n * Config for x-axis along the top edge of the chart.\n */\n axisTop?: AxisConfig;\n\n /**\n * Config for x-axis along the bottom edge of the chart.\n */\n axisBottom?: AxisConfig;\n\n /**\n * Config for axes with \"band\" scales.\n */\n axisBand?: AxisConfig;\n\n /**\n * Config for axes with \"point\" scales.\n */\n axisPoint?: AxisConfig;\n\n /**\n * Config for axes with \"point\" or \"band\" scales.\n */\n axisDiscrete?: AxisConfig;\n\n /**\n * Config for quantitative axes.\n */\n axisQuantitative?: AxisConfig;\n\n /**\n * Config for temporal axes.\n */\n axisTemporal?: AxisConfig;\n\n /**\n * Config for x-axes with \"band\" scales.\n */\n axisXBand?: AxisConfig;\n\n /**\n * Config for x-axes with \"point\" scales.\n */\n axisXPoint?: AxisConfig;\n\n /**\n * Config for x-axes with \"point\" or \"band\" scales.\n */\n axisXDiscrete?: AxisConfig;\n\n /**\n * Config for x-quantitative axes.\n */\n axisXQuantitative?: AxisConfig;\n\n /**\n * Config for x-temporal axes.\n */\n axisXTemporal?: AxisConfig;\n\n /**\n * Config for y-axes with \"band\" scales.\n */\n axisYBand?: AxisConfig;\n\n /**\n * Config for y-axes with \"point\" scales.\n */\n axisYPoint?: AxisConfig;\n\n /**\n * Config for y-axes with \"point\" or \"band\" scales.\n */\n axisYDiscrete?: AxisConfig;\n\n /**\n * Config for y-quantitative axes.\n */\n axisYQuantitative?: AxisConfig;\n\n /**\n * Config for y-temporal axes.\n */\n axisYTemporal?: AxisConfig;\n}\n\nconst AXIS_CONFIGS_INDEX: Flag> = {\n axis: 1,\n axisBand: 1,\n axisBottom: 1,\n axisDiscrete: 1,\n axisLeft: 1,\n axisPoint: 1,\n axisQuantitative: 1,\n axisRight: 1,\n axisTemporal: 1,\n axisTop: 1,\n axisX: 1,\n axisXBand: 1,\n axisXDiscrete: 1,\n axisXPoint: 1,\n axisXQuantitative: 1,\n axisXTemporal: 1,\n axisY: 1,\n axisYBand: 1,\n axisYDiscrete: 1,\n axisYPoint: 1,\n axisYQuantitative: 1,\n axisYTemporal: 1\n};\n\nexport const AXIS_CONFIGS = keys(AXIS_CONFIGS_INDEX);\n","import {FieldName} from '../channeldef';\nimport {CompositeEncoding, FacetedCompositeEncoding} from '../compositemark';\nimport {Encoding} from '../encoding';\nimport {ExprRef} from '../expr';\nimport {AnyMark, Mark, MarkDef} from '../mark';\nimport {VariableParameter} from '../parameter';\nimport {Projection} from '../projection';\nimport {SelectionParameter} from '../selection';\nimport {Field} from './../channeldef';\nimport {BaseSpec, DataMixins, FrameMixins, GenericCompositionLayout, ResolveMixins} from './base';\nimport {TopLevel} from './toplevel';\n/**\n * Base interface for a unit (single-view) specification.\n */\nexport interface GenericUnitSpec, M> extends BaseSpec {\n /**\n * A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n * `\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def).\n */\n mark: M;\n\n /**\n * A key-value mapping between encoding channels and definition of fields.\n */\n encoding?: E;\n\n /**\n * An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks\n * and to `latitude` and `\"longitude\"` channels for other marks.\n */\n projection?: Projection;\n\n /**\n * An array of parameters that may either be simple variables, or more complex selections that map user input to data queries.\n */\n params?: (VariableParameter | SelectionParameter)[];\n}\n\n/**\n * A unit specification without any shortcut/expansion syntax.\n */\nexport type NormalizedUnitSpec = GenericUnitSpec, Mark | MarkDef>;\n\n/**\n * A unit specification, which can contain either [primitive marks or composite marks](https://vega.github.io/vega-lite/docs/mark.html#types).\n */\nexport type UnitSpec = GenericUnitSpec, AnyMark>;\n\nexport type UnitSpecWithFrame = GenericUnitSpec, AnyMark> & FrameMixins;\n\n/**\n * Unit spec that can have a composite mark and row or column channels (shorthand for a facet spec).\n */\nexport type FacetedUnitSpec = GenericUnitSpec, AnyMark> &\n ResolveMixins &\n GenericCompositionLayout &\n FrameMixins;\n\nexport type TopLevelUnitSpec = TopLevel> & DataMixins;\n\nexport function isUnitSpec(spec: BaseSpec): spec is FacetedUnitSpec | NormalizedUnitSpec {\n return 'mark' in spec;\n}\n","import {Encoding} from '../encoding';\nimport {GenericMarkDef, getMarkType} from '../mark';\nimport {NonFacetUnitNormalizer, Normalize, NormalizerParams} from '../normalize/base';\nimport {GenericSpec} from '../spec';\nimport {GenericLayerSpec, NormalizedLayerSpec} from '../spec/layer';\nimport {GenericUnitSpec, isUnitSpec, NormalizedUnitSpec} from '../spec/unit';\nimport {FieldName} from '../channeldef';\n\n// TODO: replace string with Mark\nexport type CompositeMarkUnitSpec = GenericUnitSpec>;\n\nexport class CompositeMarkNormalizer implements NonFacetUnitNormalizer> {\n constructor(\n public name: string,\n public run: (\n spec: CompositeMarkUnitSpec,\n params: NormalizerParams,\n normalize: Normalize<\n // Input of the normalize method\n GenericUnitSpec, M> | GenericLayerSpec,\n // Output of the normalize method\n NormalizedLayerSpec | NormalizedUnitSpec\n >\n ) => NormalizedLayerSpec | NormalizedUnitSpec\n ) {}\n\n public hasMatchingType(spec: GenericSpec): spec is CompositeMarkUnitSpec {\n if (isUnitSpec(spec)) {\n return getMarkType(spec.mark) === this.name;\n }\n return false;\n }\n}\n","import {AggregateOp} from 'vega';\nimport {array, isArray} from 'vega-util';\nimport {isArgmaxDef, isArgminDef} from './aggregate';\nimport {isBinned, isBinning} from './bin';\nimport {\n ANGLE,\n CHANNELS,\n COLOR,\n DESCRIPTION,\n DETAIL,\n FILL,\n FILLOPACITY,\n HREF,\n isChannel,\n isNonPositionScaleChannel,\n isSecondaryRangeChannel,\n isXorY,\n KEY,\n LATITUDE,\n LATITUDE2,\n LONGITUDE,\n LONGITUDE2,\n OPACITY,\n ORDER,\n RADIUS,\n RADIUS2,\n SHAPE,\n SIZE,\n STROKE,\n STROKEDASH,\n STROKEOPACITY,\n STROKEWIDTH,\n supportMark,\n TEXT,\n THETA,\n THETA2,\n TOOLTIP,\n URL,\n X,\n X2,\n Y,\n Y2,\n Channel\n} from './channel';\nimport {\n binRequiresRange,\n ChannelDef,\n ColorDef,\n Field,\n FieldDef,\n FieldDefWithoutScale,\n getFieldDef,\n getGuide,\n hasConditionalFieldDef,\n initChannelDef,\n initFieldDef,\n isConditionalDef,\n isDatumDef,\n isFieldDef,\n isTypedFieldDef,\n isValueDef,\n LatLongDef,\n NumericArrayMarkPropDef,\n NumericMarkPropDef,\n OrderFieldDef,\n OrderValueDef,\n PolarDef,\n Position2Def,\n PositionDef,\n SecondaryFieldDef,\n ShapeDef,\n StringFieldDef,\n StringFieldDefWithCondition,\n StringValueDefWithCondition,\n TextDef,\n title,\n TypedFieldDef,\n vgField\n} from './channeldef';\nimport {Config} from './config';\nimport * as log from './log';\nimport {Mark} from './mark';\nimport {EncodingFacetMapping} from './spec/facet';\nimport {AggregatedFieldDef, BinTransform, TimeUnitTransform} from './transform';\nimport {QUANTITATIVE, TEMPORAL} from './type';\nimport {keys, some} from './util';\nimport {isSignalRef} from './vega.schema';\n\nexport interface Encoding {\n /**\n * X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n *\n * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n */\n x?: PositionDef;\n\n /**\n * Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n *\n * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n */\n y?: PositionDef;\n\n /**\n * X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n *\n * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n */\n // TODO: Ham need to add default behavior\n // `x2` cannot have type as it should have the same type as `x`\n x2?: Position2Def;\n\n /**\n * Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n *\n * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n */\n // TODO: Ham need to add default behavior\n // `y2` cannot have type as it should have the same type as `y`\n y2?: Position2Def;\n\n /**\n * Longitude position of geographically projected marks.\n */\n longitude?: LatLongDef;\n\n /**\n * Latitude position of geographically projected marks.\n */\n latitude?: LatLongDef;\n\n /**\n * Longitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n */\n // `longitude2` cannot have type as it should have the same type as `longitude`\n longitude2?: Position2Def;\n\n /**\n * Latitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n */\n // `latitude2` cannot have type as it should have the same type as `latitude`\n latitude2?: Position2Def;\n\n /**\n * - For arc marks, the arc length in radians if theta2 is not specified, otherwise the start arc angle. (A value of 0 indicates up or “north”, increasing values proceed clockwise.)\n *\n * - For text marks, polar coordinate angle in radians.\n */\n theta?: PolarDef;\n\n /**\n * The end angle of arc marks in radians. A value of 0 indicates up or “north”, increasing values proceed clockwise.\n */\n theta2?: Position2Def;\n\n /**\n * The outer radius in pixels of arc marks.\n */\n\n radius?: PolarDef;\n\n /**\n * The inner radius in pixels of arc marks.\n */\n radius2?: Position2Def;\n\n /**\n * Color of the marks – either fill or stroke color based on the `filled` property of mark definition.\n * By default, `color` represents fill color for `\"area\"`, `\"bar\"`, `\"tick\"`,\n * `\"text\"`, `\"trail\"`, `\"circle\"`, and `\"square\"` / stroke color for `\"line\"` and `\"point\"`.\n *\n * __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n *\n * _Note:_\n * 1) For fine-grained control over both fill and stroke colors of the marks, please use the `fill` and `stroke` channels. The `fill` or `stroke` encodings have higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified.\n * 2) See the scale documentation for more information about customizing [color scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme).\n */\n color?: ColorDef;\n\n /**\n * Fill color of the marks.\n * __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n *\n * _Note:_ The `fill` encoding has higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified.\n */\n fill?: ColorDef;\n\n /**\n * Stroke color of the marks.\n * __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n *\n * _Note:_ The `stroke` encoding has higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified.\n */\n\n stroke?: ColorDef;\n\n /**\n * Opacity of the marks.\n *\n * __Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `opacity` property.\n */\n opacity?: NumericMarkPropDef;\n\n /**\n * Fill opacity of the marks.\n *\n * __Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `fillOpacity` property.\n */\n fillOpacity?: NumericMarkPropDef;\n\n /**\n * Stroke opacity of the marks.\n *\n * __Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `strokeOpacity` property.\n */\n strokeOpacity?: NumericMarkPropDef;\n\n /**\n * Stroke width of the marks.\n *\n * __Default value:__ If undefined, the default stroke width depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `strokeWidth` property.\n */\n strokeWidth?: NumericMarkPropDef;\n\n /**\n * Stroke dash of the marks.\n *\n * __Default value:__ `[1,0]` (No dash).\n */\n strokeDash?: NumericArrayMarkPropDef;\n\n /**\n * Size of the mark.\n * - For `\"point\"`, `\"square\"` and `\"circle\"`, – the symbol size, or pixel area of the mark.\n * - For `\"bar\"` and `\"tick\"` – the bar and tick's size.\n * - For `\"text\"` – the text's font size.\n * - Size is unsupported for `\"line\"`, `\"area\"`, and `\"rect\"`. (Use `\"trail\"` instead of line with varying size)\n */\n size?: NumericMarkPropDef;\n\n /**\n * Rotation angle of point and text marks.\n */\n angle?: NumericMarkPropDef;\n\n /**\n * Shape of the mark.\n *\n * 1. For `point` marks the supported values include:\n * - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n * - the line symbol `\"stroke\"`\n * - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n * - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n *\n * 2. For `geoshape` marks it should be a field definition of the geojson data\n *\n * __Default value:__ If undefined, the default shape depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#point-config)'s `shape` property. (`\"circle\"` if unset.)\n */\n shape?: ShapeDef;\n /**\n * Additional levels of detail for grouping data in aggregate views and\n * in line, trail, and area marks without mapping data to a specific visual channel.\n */\n detail?: FieldDefWithoutScale | FieldDefWithoutScale[];\n\n /**\n * A data field to use as a unique key for data binding. When a visualization’s data is updated, the key value will be used to match data elements to existing mark instances. Use a key channel to enable object constancy for transitions over dynamic data.\n */\n key?: FieldDefWithoutScale;\n\n /**\n * Text of the `text` mark.\n */\n text?: TextDef;\n\n /**\n * The tooltip text to show upon mouse hover. Specifying `tooltip` encoding overrides [the `tooltip` property in the mark definition](https://vega.github.io/vega-lite/docs/mark.html#mark-def).\n *\n * See the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite.\n */\n tooltip?: StringFieldDefWithCondition | StringValueDefWithCondition | StringFieldDef[] | null;\n\n /**\n * A URL to load upon mouse click.\n */\n href?: StringFieldDefWithCondition | StringValueDefWithCondition;\n\n /**\n * The URL of an image mark.\n */\n url?: StringFieldDefWithCondition | StringValueDefWithCondition;\n\n /**\n * A text description of this mark for ARIA accessibility (SVG output only). For SVG output the `\"aria-label\"` attribute will be set to this description.\n */\n description?: StringFieldDefWithCondition | StringValueDefWithCondition;\n\n /**\n * Order of the marks.\n * - For stacked marks, this `order` channel encodes [stack order](https://vega.github.io/vega-lite/docs/stack.html#order).\n * - For line and trail marks, this `order` channel encodes order of data points in the lines. This can be useful for creating [a connected scatterplot](https://vega.github.io/vega-lite/examples/connected_scatterplot.html). Setting `order` to `{\"value\": null}` makes the line marks use the original order in the data sources.\n * - Otherwise, this `order` channel encodes layer order of the marks.\n *\n * __Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating additional aggregation grouping.\n */\n order?: OrderFieldDef | OrderFieldDef[] | OrderValueDef;\n}\n\nexport interface EncodingWithFacet extends Encoding, EncodingFacetMapping {}\n\nexport function channelHasField(\n encoding: EncodingWithFacet,\n channel: keyof EncodingWithFacet\n): boolean {\n const channelDef = encoding && encoding[channel];\n if (channelDef) {\n if (isArray(channelDef)) {\n return some(channelDef, fieldDef => !!fieldDef.field);\n } else {\n return isFieldDef(channelDef) || hasConditionalFieldDef(channelDef);\n }\n }\n return false;\n}\n\nexport function isAggregate(encoding: EncodingWithFacet) {\n return some(CHANNELS, channel => {\n if (channelHasField(encoding, channel)) {\n const channelDef = encoding[channel];\n if (isArray(channelDef)) {\n return some(channelDef, fieldDef => !!fieldDef.aggregate);\n } else {\n const fieldDef = getFieldDef(channelDef);\n return fieldDef && !!fieldDef.aggregate;\n }\n }\n return false;\n });\n}\n\nexport function extractTransformsFromEncoding(oldEncoding: Encoding, config: Config) {\n const groupby: string[] = [];\n const bins: BinTransform[] = [];\n const timeUnits: TimeUnitTransform[] = [];\n const aggregate: AggregatedFieldDef[] = [];\n const encoding: Encoding = {};\n\n forEach(oldEncoding, (channelDef, channel) => {\n // Extract potential embedded transformations along with remaining properties\n if (isFieldDef(channelDef)) {\n const {field, aggregate: aggOp, bin, timeUnit, ...remaining} = channelDef;\n if (aggOp || timeUnit || bin) {\n const guide = getGuide(channelDef);\n const isTitleDefined = guide && guide.title;\n let newField = vgField(channelDef, {forAs: true});\n const newFieldDef: FieldDef = {\n // Only add title if it doesn't exist\n ...(isTitleDefined ? [] : {title: title(channelDef, config, {allowDisabling: true})}),\n ...remaining,\n // Always overwrite field\n field: newField\n };\n\n if (aggOp) {\n let op: AggregateOp;\n\n if (isArgmaxDef(aggOp)) {\n op = 'argmax';\n newField = vgField({op: 'argmax', field: aggOp.argmax}, {forAs: true});\n newFieldDef.field = `${newField}.${field}`;\n } else if (isArgminDef(aggOp)) {\n op = 'argmin';\n newField = vgField({op: 'argmin', field: aggOp.argmin}, {forAs: true});\n newFieldDef.field = `${newField}.${field}`;\n } else if (aggOp !== 'boxplot' && aggOp !== 'errorbar' && aggOp !== 'errorband') {\n op = aggOp;\n }\n\n if (op) {\n const aggregateEntry: AggregatedFieldDef = {\n op,\n as: newField\n };\n if (field) {\n aggregateEntry.field = field;\n }\n aggregate.push(aggregateEntry);\n }\n } else {\n groupby.push(newField);\n if (isTypedFieldDef(channelDef) && isBinning(bin)) {\n bins.push({bin, field, as: newField});\n // Add additional groupbys for range and end of bins\n groupby.push(vgField(channelDef, {binSuffix: 'end'}));\n if (binRequiresRange(channelDef, channel)) {\n groupby.push(vgField(channelDef, {binSuffix: 'range'}));\n }\n // Create accompanying 'x2' or 'y2' field if channel is 'x' or 'y' respectively\n if (isXorY(channel)) {\n const secondaryChannel: SecondaryFieldDef = {\n field: `${newField}_end`\n };\n encoding[`${channel}2`] = secondaryChannel;\n }\n newFieldDef.bin = 'binned';\n if (!isSecondaryRangeChannel(channel)) {\n newFieldDef['type'] = QUANTITATIVE;\n }\n } else if (timeUnit) {\n timeUnits.push({\n timeUnit,\n field,\n as: newField\n });\n\n // define the format type for later compilation\n const formatType = isTypedFieldDef(channelDef) && channelDef.type !== TEMPORAL && 'time';\n if (formatType) {\n if (channel === TEXT || channel === TOOLTIP) {\n newFieldDef['formatType'] = formatType;\n } else if (isNonPositionScaleChannel(channel)) {\n newFieldDef['legend'] = {\n formatType,\n ...newFieldDef['legend']\n };\n } else if (isXorY(channel)) {\n newFieldDef['axis'] = {\n formatType,\n ...newFieldDef['axis']\n };\n }\n }\n }\n }\n\n // now the field should refer to post-transformed field instead\n encoding[channel as any] = newFieldDef;\n } else {\n groupby.push(field);\n encoding[channel as any] = oldEncoding[channel];\n }\n } else {\n // For value def / signal ref / datum def, just copy\n encoding[channel as any] = oldEncoding[channel];\n }\n });\n\n return {\n bins,\n timeUnits,\n aggregate,\n groupby,\n encoding\n };\n}\n\nexport function markChannelCompatible(encoding: Encoding, channel: Channel, mark: Mark) {\n const markSupported = supportMark(channel, mark);\n if (!markSupported) {\n return false;\n } else if (markSupported === 'binned') {\n const primaryFieldDef = encoding[channel === X2 ? X : Y];\n\n // circle, point, square and tick only support x2/y2 when their corresponding x/y fieldDef\n // has \"binned\" data and thus need x2/y2 to specify the bin-end field.\n if (isFieldDef(primaryFieldDef) && isFieldDef(encoding[channel]) && isBinned(primaryFieldDef.bin)) {\n return true;\n } else {\n return false;\n }\n }\n return true;\n}\n\nexport function initEncoding(\n encoding: Encoding,\n mark: Mark,\n filled: boolean,\n config: Config\n): Encoding {\n return keys(encoding).reduce((normalizedEncoding: Encoding, channel: Channel) => {\n if (!isChannel(channel)) {\n // Drop invalid channel\n log.warn(log.message.invalidEncodingChannel(channel));\n return normalizedEncoding;\n }\n\n const channelDef = encoding[channel];\n if (channel === 'angle' && mark === 'arc' && !encoding.theta) {\n log.warn(log.message.REPLACE_ANGLE_WITH_THETA);\n channel = THETA;\n }\n\n if (!markChannelCompatible(encoding, channel, mark)) {\n // Drop unsupported channel\n log.warn(log.message.incompatibleChannel(channel, mark));\n return normalizedEncoding;\n }\n\n // Drop line's size if the field is aggregated.\n if (channel === SIZE && mark === 'line') {\n const fieldDef = getFieldDef(encoding[channel]);\n if (fieldDef?.aggregate) {\n log.warn(log.message.LINE_WITH_VARYING_SIZE);\n return normalizedEncoding;\n }\n }\n // Drop color if either fill or stroke is specified\n\n if (channel === COLOR && (filled ? 'fill' in encoding : 'stroke' in encoding)) {\n log.warn(log.message.droppingColor('encoding', {fill: 'fill' in encoding, stroke: 'stroke' in encoding}));\n return normalizedEncoding;\n }\n\n if (\n channel === DETAIL ||\n (channel === ORDER && !isArray(channelDef) && !isValueDef(channelDef)) ||\n (channel === TOOLTIP && isArray(channelDef))\n ) {\n if (channelDef) {\n // Array of fieldDefs for detail channel (or production rule)\n (normalizedEncoding[channel] as any) = array(channelDef).reduce(\n (defs: FieldDef[], fieldDef: FieldDef) => {\n if (!isFieldDef(fieldDef)) {\n log.warn(log.message.emptyFieldDef(fieldDef, channel));\n } else {\n defs.push(initFieldDef(fieldDef, channel));\n }\n return defs;\n },\n []\n );\n }\n } else {\n if (channel === TOOLTIP && channelDef === null) {\n // Preserve null so we can use it to disable tooltip\n normalizedEncoding[channel] = null;\n } else if (\n !isFieldDef(channelDef) &&\n !isDatumDef(channelDef) &&\n !isValueDef(channelDef) &&\n !isConditionalDef(channelDef) &&\n !isSignalRef(channelDef)\n ) {\n log.warn(log.message.emptyFieldDef(channelDef, channel));\n return normalizedEncoding;\n }\n\n normalizedEncoding[channel as any] = initChannelDef(channelDef as ChannelDef, channel, config);\n }\n return normalizedEncoding;\n }, {});\n}\n\n/**\n * For composite marks, we have to call initChannelDef during init so we can infer types earlier.\n */\nexport function normalizeEncoding(encoding: Encoding, config: Config): Encoding {\n const normalizedEncoding: Encoding = {};\n\n for (const channel of keys(encoding)) {\n const newChannelDef = initChannelDef(encoding[channel], channel, config, {compositeMark: true});\n normalizedEncoding[channel as any] = newChannelDef;\n }\n\n return normalizedEncoding;\n}\n\nexport function fieldDefs(encoding: EncodingWithFacet): FieldDef[] {\n const arr: FieldDef[] = [];\n for (const channel of keys(encoding)) {\n if (channelHasField(encoding, channel)) {\n const channelDef = encoding[channel];\n const channelDefArray = array(channelDef);\n for (const def of channelDefArray) {\n if (isFieldDef(def)) {\n arr.push(def);\n } else if (hasConditionalFieldDef(def)) {\n arr.push(def.condition);\n }\n }\n }\n }\n return arr;\n}\n\nexport function forEach>(\n mapping: U,\n f: (cd: ChannelDef, c: keyof U) => void,\n thisArg?: any\n) {\n if (!mapping) {\n return;\n }\n\n for (const channel of keys(mapping)) {\n const el = mapping[channel];\n if (isArray(el)) {\n for (const channelDef of el as unknown[]) {\n f.call(thisArg, channelDef, channel);\n }\n } else {\n f.call(thisArg, el, channel);\n }\n }\n}\n\nexport function reduce>(\n mapping: U,\n f: (acc: any, fd: TypedFieldDef, c: keyof U) => U,\n init: T,\n thisArg?: any\n) {\n if (!mapping) {\n return init;\n }\n\n return keys(mapping).reduce((r, channel) => {\n const map = mapping[channel];\n if (isArray(map)) {\n return map.reduce((r1: T, channelDef: ChannelDef) => {\n return f.call(thisArg, r1, channelDef, channel);\n }, r);\n } else {\n return f.call(thisArg, r, map, channel);\n }\n }, init);\n}\n\n/**\n * Returns list of path grouping fields for the given encoding\n */\nexport function pathGroupingFields(mark: Mark, encoding: Encoding): string[] {\n return keys(encoding).reduce((details, channel) => {\n switch (channel) {\n // x, y, x2, y2, lat, long, lat1, long2, order, tooltip, href, aria label, cursor should not cause lines to group\n case X:\n case Y:\n case HREF:\n case DESCRIPTION:\n case URL:\n case X2:\n case Y2:\n case THETA:\n case THETA2:\n case RADIUS:\n case RADIUS2:\n // falls through\n\n case LATITUDE:\n case LONGITUDE:\n case LATITUDE2:\n case LONGITUDE2:\n // TODO: case 'cursor':\n\n // text, shape, shouldn't be a part of line/trail/area [falls through]\n case TEXT:\n case SHAPE:\n case ANGLE:\n // falls through\n\n // tooltip fields should not be added to group by [falls through]\n case TOOLTIP:\n return details;\n\n case ORDER:\n // order should not group line / trail\n if (mark === 'line' || mark === 'trail') {\n return details;\n }\n // but order should group area for stacking (falls through)\n\n case DETAIL:\n case KEY: {\n const channelDef = encoding[channel];\n if (isArray(channelDef) || isFieldDef(channelDef)) {\n for (const fieldDef of array(channelDef)) {\n if (!fieldDef.aggregate) {\n details.push(vgField(fieldDef, {}));\n }\n }\n }\n return details;\n }\n\n case SIZE:\n if (mark === 'trail') {\n // For trail, size should not group trail lines.\n return details;\n }\n // For line, size should group lines.\n\n // falls through\n case COLOR:\n case FILL:\n case STROKE:\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n case STROKEDASH:\n case STROKEWIDTH: {\n // TODO strokeDashOffset:\n // falls through\n\n const fieldDef = getFieldDef(encoding[channel]);\n if (fieldDef && !fieldDef.aggregate) {\n details.push(vgField(fieldDef, {}));\n }\n return details;\n }\n }\n }, []);\n}\n","import {Orientation, SignalRef, Text} from 'vega';\nimport {isArray, isBoolean, isString} from 'vega-util';\nimport {CompositeMark, CompositeMarkDef} from '.';\nimport {\n Field,\n FieldDefBase,\n isContinuousFieldOrDatumDef,\n isFieldDef,\n isFieldOrDatumDefForTimeFormat,\n PositionFieldDef,\n SecondaryFieldDef,\n StringFieldDef,\n StringFieldDefWithCondition,\n StringValueDefWithCondition\n} from '../channeldef';\nimport {Encoding, fieldDefs} from '../encoding';\nimport {ExprRef} from '../expr';\nimport * as log from '../log';\nimport {ColorMixins, GenericMarkDef, isMarkDef, Mark, MarkConfig, MarkDef} from '../mark';\nimport {GenericUnitSpec, NormalizedUnitSpec} from '../spec';\nimport {getFirstDefined, hash, unique} from '../util';\nimport {isSignalRef} from '../vega.schema';\nimport {toStringFieldDef} from './../channeldef';\n\nexport type PartsMixins

= Partial>>;\n\nexport type GenericCompositeMarkDef = GenericMarkDef &\n ColorMixins & {\n /**\n * The opacity (value between [0,1]) of the mark.\n *\n * @minimum 0\n * @maximum 1\n */\n opacity?: number;\n\n /**\n * Whether a composite mark be clipped to the enclosing group’s width and height.\n */\n clip?: boolean;\n };\n\nexport interface CompositeMarkTooltipSummary {\n /**\n * The prefix of the field to be shown in tooltip\n */\n fieldPrefix: string;\n\n /**\n * The title prefix to show, corresponding to the field with field prefix `fieldPrefix`\n */\n titlePrefix: Text | SignalRef;\n}\n\nexport function filterTooltipWithAggregatedField(\n oldEncoding: Encoding\n): {\n customTooltipWithoutAggregatedField?:\n | StringFieldDefWithCondition\n | StringValueDefWithCondition\n | StringFieldDef[];\n filteredEncoding: Encoding;\n} {\n const {tooltip, ...filteredEncoding} = oldEncoding;\n if (!tooltip) {\n return {filteredEncoding};\n }\n\n let customTooltipWithAggregatedField:\n | StringFieldDefWithCondition\n | StringValueDefWithCondition\n | StringFieldDef[];\n let customTooltipWithoutAggregatedField:\n | StringFieldDefWithCondition\n | StringValueDefWithCondition\n | StringFieldDef[];\n\n if (isArray(tooltip)) {\n for (const t of tooltip) {\n if (t.aggregate) {\n if (!customTooltipWithAggregatedField) {\n customTooltipWithAggregatedField = [];\n }\n (customTooltipWithAggregatedField as StringFieldDef[]).push(t);\n } else {\n if (!customTooltipWithoutAggregatedField) {\n customTooltipWithoutAggregatedField = [];\n }\n (customTooltipWithoutAggregatedField as StringFieldDef[]).push(t);\n }\n }\n\n if (customTooltipWithAggregatedField) {\n (filteredEncoding as Encoding).tooltip = customTooltipWithAggregatedField;\n }\n } else {\n if (tooltip['aggregate']) {\n (filteredEncoding as Encoding).tooltip = tooltip;\n } else {\n customTooltipWithoutAggregatedField = tooltip;\n }\n }\n\n if (isArray(customTooltipWithoutAggregatedField) && customTooltipWithoutAggregatedField.length === 1) {\n customTooltipWithoutAggregatedField = customTooltipWithoutAggregatedField[0];\n }\n return {customTooltipWithoutAggregatedField, filteredEncoding};\n}\n\nexport function getCompositeMarkTooltip(\n tooltipSummary: CompositeMarkTooltipSummary[],\n continuousAxisChannelDef: PositionFieldDef,\n encodingWithoutContinuousAxis: Encoding,\n withFieldName = true\n): Encoding {\n if ('tooltip' in encodingWithoutContinuousAxis) {\n return {tooltip: encodingWithoutContinuousAxis.tooltip};\n }\n\n const fiveSummaryTooltip: StringFieldDef[] = tooltipSummary.map(\n ({fieldPrefix, titlePrefix}): StringFieldDef => {\n const mainTitle = withFieldName ? ` of ${getTitle(continuousAxisChannelDef)}` : '';\n return {\n field: fieldPrefix + continuousAxisChannelDef.field,\n type: continuousAxisChannelDef.type,\n title: isSignalRef(titlePrefix) ? {signal: `${titlePrefix}\"${escape(mainTitle)}\"`} : titlePrefix + mainTitle\n };\n }\n );\n\n const tooltipFieldDefs = fieldDefs(encodingWithoutContinuousAxis).map(toStringFieldDef);\n\n return {\n tooltip: [\n ...fiveSummaryTooltip,\n // need to cast because TextFieldDef supports fewer types of bin\n ...unique(tooltipFieldDefs, hash)\n ]\n };\n}\n\nexport function getTitle(continuousAxisChannelDef: PositionFieldDef) {\n const {title, field} = continuousAxisChannelDef;\n return getFirstDefined(title, field);\n}\n\nexport function makeCompositeAggregatePartFactory

>(\n compositeMarkDef: GenericCompositeMarkDef & P,\n continuousAxis: 'x' | 'y',\n continuousAxisChannelDef: PositionFieldDef,\n sharedEncoding: Encoding,\n compositeMarkConfig: P\n) {\n const {scale, axis} = continuousAxisChannelDef;\n\n return ({\n partName,\n mark,\n positionPrefix,\n endPositionPrefix = undefined,\n extraEncoding = {}\n }: {\n partName: keyof P;\n mark: Mark | MarkDef;\n positionPrefix: string;\n endPositionPrefix?: string;\n extraEncoding?: Encoding;\n }) => {\n const title = getTitle(continuousAxisChannelDef);\n\n return partLayerMixins

(compositeMarkDef, partName, compositeMarkConfig, {\n mark, // TODO better remove this method and just have mark as a parameter of the method\n encoding: {\n [continuousAxis]: {\n field: `${positionPrefix}_${continuousAxisChannelDef.field}`,\n type: continuousAxisChannelDef.type,\n ...(title !== undefined ? {title} : {}),\n ...(scale !== undefined ? {scale} : {}),\n ...(axis !== undefined ? {axis} : {})\n },\n ...(isString(endPositionPrefix)\n ? {\n [`${continuousAxis}2`]: {\n field: `${endPositionPrefix}_${continuousAxisChannelDef.field}`\n }\n }\n : {}),\n ...sharedEncoding,\n ...extraEncoding\n }\n });\n };\n}\n\nexport function partLayerMixins

>(\n markDef: GenericCompositeMarkDef & P,\n part: keyof P,\n compositeMarkConfig: P,\n partBaseSpec: NormalizedUnitSpec\n): NormalizedUnitSpec[] {\n const {clip, color, opacity} = markDef;\n\n const mark = markDef.type;\n\n if (markDef[part] || (markDef[part] === undefined && compositeMarkConfig[part])) {\n return [\n {\n ...partBaseSpec,\n mark: {\n ...(compositeMarkConfig[part] as MarkConfig),\n ...(clip ? {clip} : {}),\n ...(color ? {color} : {}),\n ...(opacity ? {opacity} : {}),\n ...(isMarkDef(partBaseSpec.mark) ? partBaseSpec.mark : {type: partBaseSpec.mark}),\n style: `${mark}-${part}`,\n ...(isBoolean(markDef[part]) ? {} : (markDef[part] as MarkConfig))\n }\n }\n ];\n }\n return [];\n}\n\nexport function compositeMarkContinuousAxis(\n spec: GenericUnitSpec, CompositeMark | CompositeMarkDef>,\n orient: Orientation,\n compositeMark: M\n): {\n continuousAxisChannelDef: PositionFieldDef;\n continuousAxisChannelDef2: SecondaryFieldDef;\n continuousAxisChannelDefError: SecondaryFieldDef;\n continuousAxisChannelDefError2: SecondaryFieldDef;\n continuousAxis: 'x' | 'y';\n} {\n const {encoding} = spec;\n const continuousAxis: 'x' | 'y' = orient === 'vertical' ? 'y' : 'x';\n\n const continuousAxisChannelDef = encoding[continuousAxis] as PositionFieldDef; // Safe to cast because if x is not continuous fielddef, the orient would not be horizontal.\n const continuousAxisChannelDef2 = encoding[`${continuousAxis}2`] as SecondaryFieldDef;\n const continuousAxisChannelDefError = encoding[`${continuousAxis}Error`] as SecondaryFieldDef;\n const continuousAxisChannelDefError2 = encoding[`${continuousAxis}Error2`] as SecondaryFieldDef;\n\n return {\n continuousAxisChannelDef: filterAggregateFromChannelDef(continuousAxisChannelDef, compositeMark),\n continuousAxisChannelDef2: filterAggregateFromChannelDef(continuousAxisChannelDef2, compositeMark),\n continuousAxisChannelDefError: filterAggregateFromChannelDef(continuousAxisChannelDefError, compositeMark),\n continuousAxisChannelDefError2: filterAggregateFromChannelDef(continuousAxisChannelDefError2, compositeMark),\n continuousAxis\n };\n}\n\nfunction filterAggregateFromChannelDef>(\n continuousAxisChannelDef: F,\n compositeMark: M\n): F {\n if (continuousAxisChannelDef && continuousAxisChannelDef.aggregate) {\n const {aggregate, ...continuousAxisWithoutAggregate} = continuousAxisChannelDef;\n if (aggregate !== compositeMark) {\n log.warn(log.message.errorBarContinuousAxisHasCustomizedAggregate(aggregate, compositeMark));\n }\n return continuousAxisWithoutAggregate as F;\n } else {\n return continuousAxisChannelDef;\n }\n}\n\nexport function compositeMarkOrient(\n spec: GenericUnitSpec, CompositeMark | CompositeMarkDef>,\n compositeMark: M\n): Orientation {\n const {mark, encoding} = spec;\n const {x, y} = encoding;\n\n if (isMarkDef(mark) && mark.orient) {\n return mark.orient;\n }\n\n if (isContinuousFieldOrDatumDef(x)) {\n // x is continuous\n if (isContinuousFieldOrDatumDef(y)) {\n // both x and y are continuous\n const xAggregate = isFieldDef(x) && x.aggregate;\n const yAggregate = isFieldDef(y) && y.aggregate;\n\n if (!xAggregate && yAggregate === compositeMark) {\n return 'vertical';\n } else if (!yAggregate && xAggregate === compositeMark) {\n return 'horizontal';\n } else if (xAggregate === compositeMark && yAggregate === compositeMark) {\n throw new Error('Both x and y cannot have aggregate');\n } else {\n if (isFieldOrDatumDefForTimeFormat(y) && !isFieldOrDatumDefForTimeFormat(x)) {\n // y is temporal but x is not\n return 'horizontal';\n }\n\n // default orientation for two continuous\n return 'vertical';\n }\n }\n\n return 'horizontal';\n } else if (isContinuousFieldOrDatumDef(y)) {\n // y is continuous but x is not\n return 'vertical';\n } else {\n // Neither x nor y is continuous.\n throw new Error(`Need a valid continuous axis for ${compositeMark}s`);\n }\n}\n","import {Orientation} from 'vega';\nimport {isNumber, isObject} from 'vega-util';\nimport {getMarkPropOrConfig} from '../compile/common';\nimport {Config} from '../config';\nimport {Encoding, extractTransformsFromEncoding, normalizeEncoding} from '../encoding';\nimport * as log from '../log';\nimport {isMarkDef, MarkDef} from '../mark';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec, NormalizedUnitSpec} from '../spec';\nimport {AggregatedFieldDef, CalculateTransform, JoinAggregateTransform, Transform} from '../transform';\nimport {isEmpty, omit} from '../util';\nimport {CompositeMarkNormalizer} from './base';\nimport {\n compositeMarkContinuousAxis,\n compositeMarkOrient,\n filterTooltipWithAggregatedField,\n GenericCompositeMarkDef,\n getCompositeMarkTooltip,\n getTitle,\n makeCompositeAggregatePartFactory,\n partLayerMixins,\n PartsMixins\n} from './common';\n\nexport const BOXPLOT = 'boxplot' as const;\nexport type BoxPlot = typeof BOXPLOT;\n\nexport const BOXPLOT_PARTS = ['box', 'median', 'outliers', 'rule', 'ticks'] as const;\n\ntype BoxPlotPart = typeof BOXPLOT_PARTS[number];\n\nexport type BoxPlotPartsMixins = PartsMixins;\n\nexport interface BoxPlotConfig extends BoxPlotPartsMixins {\n /** Size of the box and median tick of a box plot */\n size?: number;\n\n /**\n * The extent of the whiskers. Available options include:\n * - `\"min-max\"`: min and max are the lower and upper whiskers respectively.\n * - A number representing multiple of the interquartile range. This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range _[Q1 - k * IQR, Q3 + k * IQR]_ where _Q1_ and _Q3_ are the first and third quartiles while _IQR_ is the interquartile range (_Q3-Q1_).\n *\n * __Default value:__ `1.5`.\n */\n extent?: 'min-max' | number;\n}\n\nexport type BoxPlotDef = GenericCompositeMarkDef &\n BoxPlotConfig & {\n /**\n * Type of the mark. For box plots, this should always be `\"boxplot\"`.\n * [boxplot](https://vega.github.io/vega-lite/docs/boxplot.html)\n */\n type: BoxPlot;\n\n /**\n * Orientation of the box plot. This is normally automatically determined based on types of fields on x and y channels. However, an explicit `orient` be specified when the orientation is ambiguous.\n *\n * __Default value:__ `\"vertical\"`.\n */\n orient?: Orientation;\n };\n\nexport interface BoxPlotConfigMixins {\n /**\n * Box Config\n */\n boxplot?: BoxPlotConfig;\n}\n\nexport const boxPlotNormalizer = new CompositeMarkNormalizer(BOXPLOT, normalizeBoxPlot);\n\nexport function getBoxPlotType(extent: number | 'min-max') {\n if (isNumber(extent)) {\n return 'tukey';\n }\n // Ham: If we ever want to, we could add another extent syntax `{kIQR: number}` for the original [Q1-k*IQR, Q3+k*IQR] whisker and call this boxPlotType = `kIQR`. However, I'm not exposing this for now.\n return extent;\n}\n\nexport function normalizeBoxPlot(\n spec: GenericUnitSpec, BoxPlot | BoxPlotDef>,\n {config}: NormalizerParams\n): NormalizedLayerSpec {\n // Need to initEncoding first so we can infer type\n spec = {\n ...spec,\n encoding: normalizeEncoding(spec.encoding, config)\n };\n const {mark, encoding: _encoding, params, projection: _p, ...outerSpec} = spec;\n const markDef: BoxPlotDef = isMarkDef(mark) ? mark : {type: mark};\n\n // TODO(https://github.com/vega/vega-lite/issues/3702): add selection support\n if (params) {\n log.warn(log.message.selectionNotSupported('boxplot'));\n }\n\n const extent = markDef.extent ?? config.boxplot.extent;\n const sizeValue = getMarkPropOrConfig(\n 'size',\n markDef as any, // TODO: https://github.com/vega/vega-lite/issues/6245\n config\n );\n\n const boxPlotType = getBoxPlotType(extent);\n const {\n bins,\n timeUnits,\n transform,\n continuousAxisChannelDef,\n continuousAxis,\n groupby,\n aggregate,\n encodingWithoutContinuousAxis,\n ticksOrient,\n boxOrient,\n customTooltipWithoutAggregatedField\n } = boxParams(spec, extent, config);\n\n const {color, size, ...encodingWithoutSizeColorAndContinuousAxis} = encodingWithoutContinuousAxis;\n\n const makeBoxPlotPart = (sharedEncoding: Encoding) => {\n return makeCompositeAggregatePartFactory(\n markDef,\n continuousAxis,\n continuousAxisChannelDef,\n sharedEncoding,\n config.boxplot\n );\n };\n\n const makeBoxPlotExtent = makeBoxPlotPart(encodingWithoutSizeColorAndContinuousAxis);\n const makeBoxPlotBox = makeBoxPlotPart(encodingWithoutContinuousAxis);\n const makeBoxPlotMidTick = makeBoxPlotPart({...encodingWithoutSizeColorAndContinuousAxis, ...(size ? {size} : {})});\n\n const fiveSummaryTooltipEncoding: Encoding = getCompositeMarkTooltip(\n [\n {fieldPrefix: boxPlotType === 'min-max' ? 'upper_whisker_' : 'max_', titlePrefix: 'Max'},\n {fieldPrefix: 'upper_box_', titlePrefix: 'Q3'},\n {fieldPrefix: 'mid_box_', titlePrefix: 'Median'},\n {fieldPrefix: 'lower_box_', titlePrefix: 'Q1'},\n {fieldPrefix: boxPlotType === 'min-max' ? 'lower_whisker_' : 'min_', titlePrefix: 'Min'}\n ],\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis\n );\n\n // ## Whisker Layers\n\n const endTick: MarkDef = {type: 'tick', color: 'black', opacity: 1, orient: ticksOrient, invalid: null, aria: false};\n const whiskerTooltipEncoding: Encoding =\n boxPlotType === 'min-max'\n ? fiveSummaryTooltipEncoding // for min-max, show five-summary tooltip for whisker\n : // for tukey / k-IQR, just show upper/lower-whisker\n getCompositeMarkTooltip(\n [\n {fieldPrefix: 'upper_whisker_', titlePrefix: 'Upper Whisker'},\n {fieldPrefix: 'lower_whisker_', titlePrefix: 'Lower Whisker'}\n ],\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis\n );\n\n const whiskerLayers = [\n ...makeBoxPlotExtent({\n partName: 'rule',\n mark: {type: 'rule', invalid: null, aria: false},\n positionPrefix: 'lower_whisker',\n endPositionPrefix: 'lower_box',\n extraEncoding: whiskerTooltipEncoding\n }),\n ...makeBoxPlotExtent({\n partName: 'rule',\n mark: {type: 'rule', invalid: null, aria: false},\n positionPrefix: 'upper_box',\n endPositionPrefix: 'upper_whisker',\n extraEncoding: whiskerTooltipEncoding\n }),\n ...makeBoxPlotExtent({\n partName: 'ticks',\n mark: endTick,\n positionPrefix: 'lower_whisker',\n extraEncoding: whiskerTooltipEncoding\n }),\n ...makeBoxPlotExtent({\n partName: 'ticks',\n mark: endTick,\n positionPrefix: 'upper_whisker',\n extraEncoding: whiskerTooltipEncoding\n })\n ];\n\n // ## Box Layers\n\n // TODO: support hiding certain mark parts\n const boxLayers: NormalizedUnitSpec[] = [\n ...(boxPlotType !== 'tukey' ? whiskerLayers : []),\n ...makeBoxPlotBox({\n partName: 'box',\n mark: {\n type: 'bar',\n ...(sizeValue ? {size: sizeValue} : {}),\n orient: boxOrient,\n invalid: null,\n ariaRoleDescription: 'box'\n },\n positionPrefix: 'lower_box',\n endPositionPrefix: 'upper_box',\n extraEncoding: fiveSummaryTooltipEncoding\n }),\n ...makeBoxPlotMidTick({\n partName: 'median',\n mark: {\n type: 'tick',\n invalid: null,\n ...(isObject(config.boxplot.median) && config.boxplot.median.color ? {color: config.boxplot.median.color} : {}),\n ...(sizeValue ? {size: sizeValue} : {}),\n orient: ticksOrient,\n aria: false\n },\n positionPrefix: 'mid_box',\n extraEncoding: fiveSummaryTooltipEncoding\n })\n ];\n\n if (boxPlotType === 'min-max') {\n return {\n ...outerSpec,\n transform: (outerSpec.transform ?? []).concat(transform),\n layer: boxLayers\n };\n }\n\n // Tukey Box Plot\n\n const lowerBoxExpr = `datum[\"lower_box_${continuousAxisChannelDef.field}\"]`;\n const upperBoxExpr = `datum[\"upper_box_${continuousAxisChannelDef.field}\"]`;\n const iqrExpr = `(${upperBoxExpr} - ${lowerBoxExpr})`;\n const lowerWhiskerExpr = `${lowerBoxExpr} - ${extent} * ${iqrExpr}`;\n const upperWhiskerExpr = `${upperBoxExpr} + ${extent} * ${iqrExpr}`;\n const fieldExpr = `datum[\"${continuousAxisChannelDef.field}\"]`;\n\n const joinaggregateTransform: JoinAggregateTransform = {\n joinaggregate: boxParamsQuartiles(continuousAxisChannelDef.field),\n groupby\n };\n\n const filteredWhiskerSpec: NormalizedLayerSpec = {\n transform: [\n {\n filter: `(${lowerWhiskerExpr} <= ${fieldExpr}) && (${fieldExpr} <= ${upperWhiskerExpr})`\n },\n {\n aggregate: [\n {\n op: 'min',\n field: continuousAxisChannelDef.field,\n as: `lower_whisker_${continuousAxisChannelDef.field}`\n },\n {\n op: 'max',\n field: continuousAxisChannelDef.field,\n as: `upper_whisker_${continuousAxisChannelDef.field}`\n },\n // preserve lower_box / upper_box\n {\n op: 'min',\n field: `lower_box_${continuousAxisChannelDef.field}`,\n as: `lower_box_${continuousAxisChannelDef.field}`\n },\n {\n op: 'max',\n field: `upper_box_${continuousAxisChannelDef.field}`,\n as: `upper_box_${continuousAxisChannelDef.field}`\n },\n ...aggregate\n ],\n groupby\n }\n ],\n layer: whiskerLayers\n };\n\n const {tooltip, ...encodingWithoutSizeColorContinuousAxisAndTooltip} = encodingWithoutSizeColorAndContinuousAxis;\n\n const {scale, axis} = continuousAxisChannelDef;\n const title = getTitle(continuousAxisChannelDef);\n const axisWithoutTitle = omit(axis, ['title']);\n\n const outlierLayersMixins = partLayerMixins(markDef, 'outliers', config.boxplot, {\n transform: [{filter: `(${fieldExpr} < ${lowerWhiskerExpr}) || (${fieldExpr} > ${upperWhiskerExpr})`}],\n mark: 'point',\n encoding: {\n [continuousAxis]: {\n field: continuousAxisChannelDef.field,\n type: continuousAxisChannelDef.type,\n ...(title !== undefined ? {title} : {}),\n ...(scale !== undefined ? {scale} : {}),\n // add axis without title since we already added the title above\n ...(isEmpty(axisWithoutTitle) ? {} : {axis: axisWithoutTitle})\n },\n ...encodingWithoutSizeColorContinuousAxisAndTooltip,\n ...(color ? {color} : {}),\n ...(customTooltipWithoutAggregatedField ? {tooltip: customTooltipWithoutAggregatedField} : {})\n }\n })[0];\n\n let filteredLayersMixins: NormalizedLayerSpec;\n const filteredLayersMixinsTransforms = [...bins, ...timeUnits, joinaggregateTransform];\n if (outlierLayersMixins) {\n filteredLayersMixins = {\n transform: filteredLayersMixinsTransforms,\n layer: [outlierLayersMixins, filteredWhiskerSpec]\n };\n } else {\n filteredLayersMixins = filteredWhiskerSpec;\n filteredLayersMixins.transform.unshift(...filteredLayersMixinsTransforms);\n }\n\n return {\n ...outerSpec,\n layer: [\n filteredLayersMixins,\n {\n // boxplot\n transform,\n layer: boxLayers\n }\n ]\n };\n}\n\nfunction boxParamsQuartiles(continousAxisField: string): AggregatedFieldDef[] {\n return [\n {\n op: 'q1',\n field: continousAxisField,\n as: `lower_box_${continousAxisField}`\n },\n {\n op: 'q3',\n field: continousAxisField,\n as: `upper_box_${continousAxisField}`\n }\n ];\n}\n\nfunction boxParams(\n spec: GenericUnitSpec, BoxPlot | BoxPlotDef>,\n extent: 'min-max' | number,\n config: Config\n) {\n const orient = compositeMarkOrient(spec, BOXPLOT);\n const {continuousAxisChannelDef, continuousAxis} = compositeMarkContinuousAxis(spec, orient, BOXPLOT);\n const continuousFieldName: string = continuousAxisChannelDef.field;\n\n const boxPlotType = getBoxPlotType(extent);\n\n const boxplotSpecificAggregate: AggregatedFieldDef[] = [\n ...boxParamsQuartiles(continuousFieldName),\n {\n op: 'median',\n field: continuousFieldName,\n as: `mid_box_${continuousFieldName}`\n },\n {\n op: 'min',\n field: continuousFieldName,\n as: (boxPlotType === 'min-max' ? 'lower_whisker_' : 'min_') + continuousFieldName\n },\n {\n op: 'max',\n field: continuousFieldName,\n as: (boxPlotType === 'min-max' ? 'upper_whisker_' : 'max_') + continuousFieldName\n }\n ];\n\n const postAggregateCalculates: CalculateTransform[] =\n boxPlotType === 'min-max' || boxPlotType === 'tukey'\n ? []\n : [\n // This is for the original k-IQR, which we do not expose\n {\n calculate: `datum[\"upper_box_${continuousFieldName}\"] - datum[\"lower_box_${continuousFieldName}\"]`,\n as: `iqr_${continuousFieldName}`\n },\n {\n calculate: `min(datum[\"upper_box_${continuousFieldName}\"] + datum[\"iqr_${continuousFieldName}\"] * ${extent}, datum[\"max_${continuousFieldName}\"])`,\n as: `upper_whisker_${continuousFieldName}`\n },\n {\n calculate: `max(datum[\"lower_box_${continuousFieldName}\"] - datum[\"iqr_${continuousFieldName}\"] * ${extent}, datum[\"min_${continuousFieldName}\"])`,\n as: `lower_whisker_${continuousFieldName}`\n }\n ];\n\n const {[continuousAxis]: oldContinuousAxisChannelDef, ...oldEncodingWithoutContinuousAxis} = spec.encoding;\n const {customTooltipWithoutAggregatedField, filteredEncoding} = filterTooltipWithAggregatedField(\n oldEncodingWithoutContinuousAxis\n );\n\n const {bins, timeUnits, aggregate, groupby, encoding: encodingWithoutContinuousAxis} = extractTransformsFromEncoding(\n filteredEncoding,\n config\n );\n\n const ticksOrient: Orientation = orient === 'vertical' ? 'horizontal' : 'vertical';\n const boxOrient: Orientation = orient;\n\n const transform: Transform[] = [\n ...bins,\n ...timeUnits,\n {\n aggregate: [...aggregate, ...boxplotSpecificAggregate],\n groupby\n },\n ...postAggregateCalculates\n ];\n\n return {\n bins,\n timeUnits,\n transform,\n groupby,\n aggregate,\n continuousAxisChannelDef,\n continuousAxis,\n encodingWithoutContinuousAxis,\n ticksOrient,\n boxOrient,\n customTooltipWithoutAggregatedField\n };\n}\n","import {AggregateOp, Orientation, SignalRef, Text} from 'vega';\nimport {PositionChannel} from '../channel';\nimport {\n Field,\n isContinuousFieldOrDatumDef,\n isFieldOrDatumDef,\n PositionFieldDef,\n SecondaryFieldDef,\n title,\n ValueDef\n} from '../channeldef';\nimport {Config} from '../config';\nimport {Data} from '../data';\nimport {Encoding, extractTransformsFromEncoding, normalizeEncoding} from '../encoding';\nimport {ExprRef} from '../expr';\nimport * as log from '../log';\nimport {isMarkDef, MarkDef} from '../mark';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec} from '../spec';\nimport {Step} from '../spec/base';\nimport {NormalizedUnitSpec} from '../spec/unit';\nimport {TitleParams} from '../title';\nimport {AggregatedFieldDef, CalculateTransform, Transform} from '../transform';\nimport {replaceAll, titleCase} from '../util';\nimport {CompositeMarkNormalizer} from './base';\nimport {\n compositeMarkContinuousAxis,\n compositeMarkOrient,\n CompositeMarkTooltipSummary,\n GenericCompositeMarkDef,\n getCompositeMarkTooltip,\n makeCompositeAggregatePartFactory,\n PartsMixins\n} from './common';\nimport {ErrorBand, ErrorBandDef} from './errorband';\n\nexport const ERRORBAR = 'errorbar' as const;\nexport type ErrorBar = typeof ERRORBAR;\n\nexport type ErrorBarExtent = 'ci' | 'iqr' | 'stderr' | 'stdev';\nexport type ErrorBarCenter = 'mean' | 'median';\n\nexport type ErrorInputType = 'raw' | 'aggregated-upper-lower' | 'aggregated-error';\n\nexport const ERRORBAR_PARTS = ['ticks', 'rule'] as const;\n\nexport type ErrorBarPart = typeof ERRORBAR_PARTS[number];\n\nexport interface ErrorExtraEncoding {\n /**\n * Error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n */\n xError?: SecondaryFieldDef | ValueDef;\n\n /**\n * Secondary error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n */\n // `xError2` cannot have type as it should have the same type as `xError`\n xError2?: SecondaryFieldDef | ValueDef;\n\n /**\n * Error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n */\n yError?: SecondaryFieldDef | ValueDef;\n\n /**\n * Secondary error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n */\n // `yError2` cannot have type as it should have the same type as `yError`\n yError2?: SecondaryFieldDef | ValueDef;\n}\n\nexport type ErrorEncoding = Pick, PositionChannel | 'color' | 'detail' | 'opacity'> &\n ErrorExtraEncoding;\n\nexport type ErrorBarPartsMixins = PartsMixins;\n\nexport interface ErrorBarConfig extends ErrorBarPartsMixins {\n /** Size of the ticks of an error bar */\n size?: number;\n\n /** Thickness of the ticks and the bar of an error bar */\n thickness?: number;\n\n /**\n * The center of the errorbar. Available options include:\n * - `\"mean\"`: the mean of the data points.\n * - `\"median\"`: the median of the data points.\n *\n * __Default value:__ `\"mean\"`.\n * @hidden\n */\n\n // center is not needed right now but will be added back to the schema if future features require it.\n center?: ErrorBarCenter;\n\n /**\n * The extent of the rule. Available options include:\n * - `\"ci\"`: Extend the rule to the confidence interval of the mean.\n * - `\"stderr\"`: The size of rule are set to the value of standard error, extending from the mean.\n * - `\"stdev\"`: The size of rule are set to the value of standard deviation, extending from the mean.\n * - `\"iqr\"`: Extend the rule to the q1 and q3.\n *\n * __Default value:__ `\"stderr\"`.\n */\n extent?: ErrorBarExtent;\n}\n\nexport type ErrorBarDef = GenericCompositeMarkDef &\n ErrorBarConfig & {\n /**\n * Orientation of the error bar. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined.\n */\n orient?: Orientation;\n };\n\nexport interface ErrorBarConfigMixins {\n /**\n * ErrorBar Config\n */\n errorbar?: ErrorBarConfig;\n}\n\nexport const errorBarNormalizer = new CompositeMarkNormalizer(ERRORBAR, normalizeErrorBar);\n\nexport function normalizeErrorBar(\n spec: GenericUnitSpec, ErrorBar | ErrorBarDef>,\n {config}: NormalizerParams\n): NormalizedLayerSpec | NormalizedUnitSpec {\n // Need to initEncoding first so we can infer type\n spec = {\n ...spec,\n encoding: normalizeEncoding(spec.encoding, config)\n };\n\n const {\n transform,\n continuousAxisChannelDef,\n continuousAxis,\n encodingWithoutContinuousAxis,\n ticksOrient,\n markDef,\n outerSpec,\n tooltipEncoding\n } = errorBarParams(spec, ERRORBAR, config);\n delete encodingWithoutContinuousAxis['size'];\n\n const makeErrorBarPart = makeCompositeAggregatePartFactory(\n markDef,\n continuousAxis,\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis,\n config.errorbar\n );\n\n const thickness = markDef.thickness;\n const size = markDef.size;\n const tick: MarkDef = {\n type: 'tick',\n orient: ticksOrient,\n aria: false,\n ...(thickness !== undefined ? {thickness} : {}),\n ...(size !== undefined ? {size} : {})\n };\n\n const layer = [\n ...makeErrorBarPart({\n partName: 'ticks',\n mark: tick,\n positionPrefix: 'lower',\n extraEncoding: tooltipEncoding\n }),\n ...makeErrorBarPart({\n partName: 'ticks',\n mark: tick,\n positionPrefix: 'upper',\n extraEncoding: tooltipEncoding\n }),\n ...makeErrorBarPart({\n partName: 'rule',\n mark: {\n type: 'rule',\n ariaRoleDescription: 'errorbar',\n ...(thickness !== undefined ? {size: thickness} : {})\n },\n positionPrefix: 'lower',\n endPositionPrefix: 'upper',\n extraEncoding: tooltipEncoding\n })\n ];\n\n return {\n ...outerSpec,\n transform,\n ...(layer.length > 1 ? {layer} : {...layer[0]})\n };\n}\n\nfunction errorBarOrientAndInputType(\n spec: GenericUnitSpec, ErrorBar | ErrorBand | ErrorBarDef | ErrorBandDef>,\n compositeMark: ErrorBar | ErrorBand\n): {\n orient: Orientation;\n inputType: ErrorInputType;\n} {\n const {encoding} = spec;\n\n if (errorBarIsInputTypeRaw(encoding)) {\n return {\n orient: compositeMarkOrient(spec, compositeMark),\n inputType: 'raw'\n };\n }\n\n const isTypeAggregatedUpperLower: boolean = errorBarIsInputTypeAggregatedUpperLower(encoding);\n const isTypeAggregatedError: boolean = errorBarIsInputTypeAggregatedError(encoding);\n const x = encoding.x;\n const y = encoding.y;\n\n if (isTypeAggregatedUpperLower) {\n // type is aggregated-upper-lower\n\n if (isTypeAggregatedError) {\n throw new Error(`${compositeMark} cannot be both type aggregated-upper-lower and aggregated-error`);\n }\n\n const x2 = encoding.x2;\n const y2 = encoding.y2;\n\n if (isFieldOrDatumDef(x2) && isFieldOrDatumDef(y2)) {\n // having both x, x2 and y, y2\n throw new Error(`${compositeMark} cannot have both x2 and y2`);\n } else if (isFieldOrDatumDef(x2)) {\n if (isContinuousFieldOrDatumDef(x)) {\n // having x, x2 quantitative and field y, y2 are not specified\n return {orient: 'horizontal', inputType: 'aggregated-upper-lower'};\n } else {\n // having x, x2 that are not both quantitative\n throw new Error(`Both x and x2 have to be quantitative in ${compositeMark}`);\n }\n } else if (isFieldOrDatumDef(y2)) {\n // y2 is a FieldDef\n if (isContinuousFieldOrDatumDef(y)) {\n // having y, y2 quantitative and field x, x2 are not specified\n return {orient: 'vertical', inputType: 'aggregated-upper-lower'};\n } else {\n // having y, y2 that are not both quantitative\n throw new Error(`Both y and y2 have to be quantitative in ${compositeMark}`);\n }\n }\n throw new Error('No ranged axis');\n } else {\n // type is aggregated-error\n\n const xError = encoding.xError;\n const xError2 = encoding.xError2;\n const yError = encoding.yError;\n const yError2 = encoding.yError2;\n\n if (isFieldOrDatumDef(xError2) && !isFieldOrDatumDef(xError)) {\n // having xError2 without xError\n throw new Error(`${compositeMark} cannot have xError2 without xError`);\n }\n\n if (isFieldOrDatumDef(yError2) && !isFieldOrDatumDef(yError)) {\n // having yError2 without yError\n throw new Error(`${compositeMark} cannot have yError2 without yError`);\n }\n\n if (isFieldOrDatumDef(xError) && isFieldOrDatumDef(yError)) {\n // having both xError and yError\n throw new Error(`${compositeMark} cannot have both xError and yError with both are quantiative`);\n } else if (isFieldOrDatumDef(xError)) {\n if (isContinuousFieldOrDatumDef(x)) {\n // having x and xError that are all quantitative\n return {orient: 'horizontal', inputType: 'aggregated-error'};\n } else {\n // having x, xError, and xError2 that are not all quantitative\n throw new Error('All x, xError, and xError2 (if exist) have to be quantitative');\n }\n } else if (isFieldOrDatumDef(yError)) {\n if (isContinuousFieldOrDatumDef(y)) {\n // having y and yError that are all quantitative\n return {orient: 'vertical', inputType: 'aggregated-error'};\n } else {\n // having y, yError, and yError2 that are not all quantitative\n throw new Error('All y, yError, and yError2 (if exist) have to be quantitative');\n }\n }\n throw new Error('No ranged axis');\n }\n}\n\nfunction errorBarIsInputTypeRaw(encoding: ErrorEncoding): boolean {\n return (\n (isFieldOrDatumDef(encoding.x) || isFieldOrDatumDef(encoding.y)) &&\n !isFieldOrDatumDef(encoding.x2) &&\n !isFieldOrDatumDef(encoding.y2) &&\n !isFieldOrDatumDef(encoding.xError) &&\n !isFieldOrDatumDef(encoding.xError2) &&\n !isFieldOrDatumDef(encoding.yError) &&\n !isFieldOrDatumDef(encoding.yError2)\n );\n}\n\nfunction errorBarIsInputTypeAggregatedUpperLower(encoding: ErrorEncoding): boolean {\n return isFieldOrDatumDef(encoding.x2) || isFieldOrDatumDef(encoding.y2);\n}\n\nfunction errorBarIsInputTypeAggregatedError(encoding: ErrorEncoding): boolean {\n return (\n isFieldOrDatumDef(encoding.xError) ||\n isFieldOrDatumDef(encoding.xError2) ||\n isFieldOrDatumDef(encoding.yError) ||\n isFieldOrDatumDef(encoding.yError2)\n );\n}\n\nexport function errorBarParams<\n M extends ErrorBar | ErrorBand,\n MD extends GenericCompositeMarkDef & (ErrorBarDef | ErrorBandDef)\n>(\n spec: GenericUnitSpec, M | MD>,\n compositeMark: M,\n config: Config\n): {\n transform: Transform[];\n groupby: string[];\n continuousAxisChannelDef: PositionFieldDef;\n continuousAxis: 'x' | 'y';\n encodingWithoutContinuousAxis: ErrorEncoding;\n ticksOrient: Orientation;\n markDef: MD;\n outerSpec: {\n data?: Data;\n title?: Text | TitleParams;\n name?: string;\n description?: string;\n transform?: Transform[];\n width?: number | 'container' | Step;\n height?: number | 'container' | Step;\n };\n tooltipEncoding: ErrorEncoding;\n} {\n // TODO: use selection\n const {mark, encoding, params, projection: _p, ...outerSpec} = spec;\n const markDef: MD = isMarkDef(mark) ? mark : ({type: mark} as MD);\n\n // TODO(https://github.com/vega/vega-lite/issues/3702): add selection support\n if (params) {\n log.warn(log.message.selectionNotSupported(compositeMark));\n }\n\n const {orient, inputType} = errorBarOrientAndInputType(spec, compositeMark);\n const {\n continuousAxisChannelDef,\n continuousAxisChannelDef2,\n continuousAxisChannelDefError,\n continuousAxisChannelDefError2,\n continuousAxis\n } = compositeMarkContinuousAxis(spec, orient, compositeMark);\n\n const {\n errorBarSpecificAggregate,\n postAggregateCalculates,\n tooltipSummary,\n tooltipTitleWithFieldName\n } = errorBarAggregationAndCalculation(\n markDef,\n continuousAxisChannelDef,\n continuousAxisChannelDef2,\n continuousAxisChannelDefError,\n continuousAxisChannelDefError2,\n inputType,\n compositeMark,\n config\n );\n\n const {\n [continuousAxis]: oldContinuousAxisChannelDef,\n [continuousAxis === 'x' ? 'x2' : 'y2']: oldContinuousAxisChannelDef2,\n [continuousAxis === 'x' ? 'xError' : 'yError']: oldContinuousAxisChannelDefError,\n [continuousAxis === 'x' ? 'xError2' : 'yError2']: oldContinuousAxisChannelDefError2,\n ...oldEncodingWithoutContinuousAxis\n } = encoding;\n\n const {\n bins,\n timeUnits,\n aggregate: oldAggregate,\n groupby: oldGroupBy,\n encoding: encodingWithoutContinuousAxis\n } = extractTransformsFromEncoding(oldEncodingWithoutContinuousAxis, config);\n\n const aggregate: AggregatedFieldDef[] = [...oldAggregate, ...errorBarSpecificAggregate];\n const groupby: string[] = inputType !== 'raw' ? [] : oldGroupBy;\n\n const tooltipEncoding: ErrorEncoding = getCompositeMarkTooltip(\n tooltipSummary,\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis,\n tooltipTitleWithFieldName\n );\n\n return {\n transform: [\n ...(outerSpec.transform ?? []),\n ...bins,\n ...timeUnits,\n ...(aggregate.length === 0 ? [] : [{aggregate, groupby}]),\n ...postAggregateCalculates\n ],\n groupby,\n continuousAxisChannelDef,\n continuousAxis,\n encodingWithoutContinuousAxis,\n ticksOrient: orient === 'vertical' ? 'horizontal' : 'vertical',\n markDef,\n outerSpec,\n tooltipEncoding\n };\n}\n\nfunction errorBarAggregationAndCalculation<\n M extends ErrorBar | ErrorBand,\n MD extends GenericCompositeMarkDef & (ErrorBarDef | ErrorBandDef)\n>(\n markDef: MD,\n continuousAxisChannelDef: PositionFieldDef,\n continuousAxisChannelDef2: SecondaryFieldDef,\n continuousAxisChannelDefError: SecondaryFieldDef,\n continuousAxisChannelDefError2: SecondaryFieldDef,\n inputType: ErrorInputType,\n compositeMark: M,\n config: Config\n): {\n postAggregateCalculates: CalculateTransform[];\n errorBarSpecificAggregate: AggregatedFieldDef[];\n tooltipSummary: CompositeMarkTooltipSummary[];\n tooltipTitleWithFieldName: boolean;\n} {\n let errorBarSpecificAggregate: AggregatedFieldDef[] = [];\n let postAggregateCalculates: CalculateTransform[] = [];\n const continuousFieldName: string = continuousAxisChannelDef.field;\n\n let tooltipSummary: CompositeMarkTooltipSummary[];\n let tooltipTitleWithFieldName = false;\n\n if (inputType === 'raw') {\n const center: ErrorBarCenter = markDef.center\n ? markDef.center\n : markDef.extent\n ? markDef.extent === 'iqr'\n ? 'median'\n : 'mean'\n : config.errorbar.center;\n const extent: ErrorBarExtent = markDef.extent ? markDef.extent : center === 'mean' ? 'stderr' : 'iqr';\n\n if ((center === 'median') !== (extent === 'iqr')) {\n log.warn(log.message.errorBarCenterIsUsedWithWrongExtent(center, extent, compositeMark));\n }\n\n if (extent === 'stderr' || extent === 'stdev') {\n errorBarSpecificAggregate = [\n {op: extent, field: continuousFieldName, as: `extent_${continuousFieldName}`},\n {op: center, field: continuousFieldName, as: `center_${continuousFieldName}`}\n ];\n\n postAggregateCalculates = [\n {\n calculate: `datum[\"center_${continuousFieldName}\"] + datum[\"extent_${continuousFieldName}\"]`,\n as: `upper_${continuousFieldName}`\n },\n {\n calculate: `datum[\"center_${continuousFieldName}\"] - datum[\"extent_${continuousFieldName}\"]`,\n as: `lower_${continuousFieldName}`\n }\n ];\n\n tooltipSummary = [\n {fieldPrefix: 'center_', titlePrefix: titleCase(center)},\n {fieldPrefix: 'upper_', titlePrefix: getTitlePrefix(center, extent, '+')},\n {fieldPrefix: 'lower_', titlePrefix: getTitlePrefix(center, extent, '-')}\n ];\n tooltipTitleWithFieldName = true;\n } else {\n let centerOp: AggregateOp;\n let lowerExtentOp: AggregateOp;\n let upperExtentOp: AggregateOp;\n if (extent === 'ci') {\n centerOp = 'mean';\n lowerExtentOp = 'ci0';\n upperExtentOp = 'ci1';\n } else {\n centerOp = 'median';\n lowerExtentOp = 'q1';\n upperExtentOp = 'q3';\n }\n\n errorBarSpecificAggregate = [\n {op: lowerExtentOp, field: continuousFieldName, as: `lower_${continuousFieldName}`},\n {op: upperExtentOp, field: continuousFieldName, as: `upper_${continuousFieldName}`},\n {op: centerOp, field: continuousFieldName, as: `center_${continuousFieldName}`}\n ];\n\n tooltipSummary = [\n {\n fieldPrefix: 'upper_',\n titlePrefix: title({field: continuousFieldName, aggregate: upperExtentOp, type: 'quantitative'}, config, {\n allowDisabling: false\n })\n },\n {\n fieldPrefix: 'lower_',\n titlePrefix: title({field: continuousFieldName, aggregate: lowerExtentOp, type: 'quantitative'}, config, {\n allowDisabling: false\n })\n },\n {\n fieldPrefix: 'center_',\n titlePrefix: title({field: continuousFieldName, aggregate: centerOp, type: 'quantitative'}, config, {\n allowDisabling: false\n })\n }\n ];\n }\n } else {\n if (markDef.center || markDef.extent) {\n log.warn(log.message.errorBarCenterAndExtentAreNotNeeded(markDef.center, markDef.extent));\n }\n\n if (inputType === 'aggregated-upper-lower') {\n tooltipSummary = [];\n postAggregateCalculates = [\n {calculate: `datum[\"${continuousAxisChannelDef2.field}\"]`, as: `upper_${continuousFieldName}`},\n {calculate: `datum[\"${continuousFieldName}\"]`, as: `lower_${continuousFieldName}`}\n ];\n } else if (inputType === 'aggregated-error') {\n tooltipSummary = [{fieldPrefix: '', titlePrefix: continuousFieldName}];\n postAggregateCalculates = [\n {\n calculate: `datum[\"${continuousFieldName}\"] + datum[\"${continuousAxisChannelDefError.field}\"]`,\n as: `upper_${continuousFieldName}`\n }\n ];\n\n if (continuousAxisChannelDefError2) {\n postAggregateCalculates.push({\n calculate: `datum[\"${continuousFieldName}\"] + datum[\"${continuousAxisChannelDefError2.field}\"]`,\n as: `lower_${continuousFieldName}`\n });\n } else {\n postAggregateCalculates.push({\n calculate: `datum[\"${continuousFieldName}\"] - datum[\"${continuousAxisChannelDefError.field}\"]`,\n as: `lower_${continuousFieldName}`\n });\n }\n }\n\n for (const postAggregateCalculate of postAggregateCalculates) {\n tooltipSummary.push({\n fieldPrefix: postAggregateCalculate.as.substring(0, 6),\n titlePrefix: replaceAll(replaceAll(postAggregateCalculate.calculate, 'datum[\"', ''), '\"]', '')\n });\n }\n }\n return {postAggregateCalculates, errorBarSpecificAggregate, tooltipSummary, tooltipTitleWithFieldName};\n}\n\nfunction getTitlePrefix(center: ErrorBarCenter, extent: ErrorBarExtent, operation: '+' | '-'): string {\n return `${titleCase(center)} ${operation} ${extent}`;\n}\n","import {Interpolate, Orientation} from 'vega';\nimport {Field} from '../channeldef';\nimport {Encoding, normalizeEncoding} from '../encoding';\nimport * as log from '../log';\nimport {MarkDef} from '../mark';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec} from '../spec';\nimport {CompositeMarkNormalizer} from './base';\nimport {GenericCompositeMarkDef, makeCompositeAggregatePartFactory, PartsMixins} from './common';\nimport {ErrorBarCenter, ErrorBarExtent, errorBarParams, ErrorEncoding} from './errorbar';\n\nexport type ErrorBandUnitSpec<\n EE = undefined // extra encoding parameter (for faceted composite unit spec)\n> = GenericUnitSpec & EE, ErrorBand | ErrorBandDef>;\n\nexport const ERRORBAND = 'errorband' as const;\nexport type ErrorBand = typeof ERRORBAND;\n\nexport const ERRORBAND_PARTS = ['band', 'borders'] as const;\n\ntype ErrorBandPart = typeof ERRORBAND_PARTS[number];\n\nexport type ErrorBandPartsMixins = PartsMixins;\n\nexport interface ErrorBandConfig extends ErrorBandPartsMixins {\n /**\n * The center of the error band. Available options include:\n * - `\"mean\"`: the mean of the data points.\n * - `\"median\"`: the median of the data points.\n *\n * __Default value:__ `\"mean\"`.\n * @hidden\n */\n\n // center is not needed right now but will be added back to the schema if future features require it.\n center?: ErrorBarCenter;\n\n /**\n * The extent of the band. Available options include:\n * - `\"ci\"`: Extend the band to the confidence interval of the mean.\n * - `\"stderr\"`: The size of band are set to the value of standard error, extending from the mean.\n * - `\"stdev\"`: The size of band are set to the value of standard deviation, extending from the mean.\n * - `\"iqr\"`: Extend the band to the q1 and q3.\n *\n * __Default value:__ `\"stderr\"`.\n */\n extent?: ErrorBarExtent;\n\n /**\n * The line interpolation method for the error band. One of the following:\n * - `\"linear\"`: piecewise linear segments, as in a polyline.\n * - `\"linear-closed\"`: close the linear segments to form a polygon.\n * - `\"step\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values.\n * - `\"step-before\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value.\n * - `\"step-after\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value.\n * - `\"basis\"`: a B-spline, with control point duplication on the ends.\n * - `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n * - `\"basis-closed\"`: a closed B-spline, as in a loop.\n * - `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n * - `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n * - `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n * - `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n * - `\"monotone\"`: cubic interpolation that preserves monotonicity in y.\n */\n interpolate?: Interpolate;\n\n /**\n * The tension parameter for the interpolation type of the error band.\n *\n * @minimum 0\n * @maximum 1\n */\n tension?: number;\n}\n\nexport type ErrorBandDef = GenericCompositeMarkDef &\n ErrorBandConfig & {\n /**\n * Orientation of the error band. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined.\n */\n orient?: Orientation;\n };\n\nexport interface ErrorBandConfigMixins {\n /**\n * ErrorBand Config\n */\n errorband?: ErrorBandConfig;\n}\n\nexport const errorBandNormalizer = new CompositeMarkNormalizer(ERRORBAND, normalizeErrorBand);\n\nexport function normalizeErrorBand(\n spec: GenericUnitSpec, ErrorBand | ErrorBandDef>,\n {config}: NormalizerParams\n): NormalizedLayerSpec {\n // Need to initEncoding first so we can infer type\n spec = {\n ...spec,\n encoding: normalizeEncoding(spec.encoding, config)\n };\n\n const {\n transform,\n continuousAxisChannelDef,\n continuousAxis,\n encodingWithoutContinuousAxis,\n markDef,\n outerSpec,\n tooltipEncoding\n } = errorBarParams(spec, ERRORBAND, config);\n const errorBandDef: ErrorBandDef = markDef;\n\n const makeErrorBandPart = makeCompositeAggregatePartFactory(\n errorBandDef,\n continuousAxis,\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis,\n config.errorband\n );\n\n const is2D = spec.encoding.x !== undefined && spec.encoding.y !== undefined;\n\n let bandMark: MarkDef = {type: is2D ? 'area' : 'rect'};\n let bordersMark: MarkDef = {type: is2D ? 'line' : 'rule'};\n const interpolate = {\n ...(errorBandDef.interpolate ? {interpolate: errorBandDef.interpolate} : {}),\n ...(errorBandDef.tension && errorBandDef.interpolate ? {tension: errorBandDef.tension} : {})\n };\n\n if (is2D) {\n bandMark = {\n ...bandMark,\n ...interpolate,\n ariaRoleDescription: 'errorband'\n };\n bordersMark = {\n ...bordersMark,\n ...interpolate,\n aria: false\n };\n } else if (errorBandDef.interpolate) {\n log.warn(log.message.errorBand1DNotSupport('interpolate'));\n } else if (errorBandDef.tension) {\n log.warn(log.message.errorBand1DNotSupport('tension'));\n }\n\n return {\n ...outerSpec,\n transform,\n layer: [\n ...makeErrorBandPart({\n partName: 'band',\n mark: bandMark,\n positionPrefix: 'lower',\n endPositionPrefix: 'upper',\n extraEncoding: tooltipEncoding\n }),\n ...makeErrorBandPart({\n partName: 'borders',\n mark: bordersMark,\n positionPrefix: 'lower',\n\n extraEncoding: tooltipEncoding\n }),\n ...makeErrorBandPart({\n partName: 'borders',\n mark: bordersMark,\n positionPrefix: 'upper',\n extraEncoding: tooltipEncoding\n })\n ]\n };\n}\n","import {Field} from '../channeldef';\nimport {Encoding} from '../encoding';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec} from '../spec';\nimport {EncodingFacetMapping} from '../spec/facet';\nimport {NormalizedUnitSpec} from '../spec/unit';\nimport {keys} from '../util';\nimport {CompositeMarkNormalizer} from './base';\nimport {BOXPLOT, BoxPlot, BoxPlotConfigMixins, BoxPlotDef, BOXPLOT_PARTS, normalizeBoxPlot} from './boxplot';\nimport {\n ERRORBAND,\n ErrorBand,\n ErrorBandConfigMixins,\n ErrorBandDef,\n ERRORBAND_PARTS,\n normalizeErrorBand\n} from './errorband';\nimport {\n ERRORBAR,\n ErrorBar,\n ErrorBarConfigMixins,\n ErrorBarDef,\n ERRORBAR_PARTS,\n ErrorExtraEncoding,\n normalizeErrorBar\n} from './errorbar';\n\nexport {BoxPlotConfig} from './boxplot';\nexport {ErrorBandConfigMixins} from './errorband';\nexport {ErrorBarConfigMixins} from './errorbar';\n\nexport type CompositeMarkNormalizerRun = (\n spec: GenericUnitSpec,\n params: NormalizerParams\n) => NormalizedLayerSpec | NormalizedUnitSpec;\n\n/**\n * Registry index for all composite mark's normalizer\n */\nconst compositeMarkRegistry: {\n [mark: string]: {\n normalizer: CompositeMarkNormalizer;\n parts: readonly string[];\n };\n} = {};\n\nexport function add(mark: string, run: CompositeMarkNormalizerRun, parts: readonly string[]) {\n const normalizer = new CompositeMarkNormalizer(mark, run);\n compositeMarkRegistry[mark] = {normalizer, parts};\n}\n\nexport function remove(mark: string) {\n delete compositeMarkRegistry[mark];\n}\n\nexport type CompositeEncoding = Encoding & ErrorExtraEncoding;\n\nexport type PartialIndex> = {\n [t in keyof T]?: Partial;\n};\n\nexport type SharedCompositeEncoding = PartialIndex<\n Omit, 'detail' | 'order' | 'tooltip'> // need to omit and cherry pick detail / order / tooltip since they allow array\n> &\n Pick, 'detail' | 'order' | 'tooltip'>;\n\nexport type FacetedCompositeEncoding = Encoding & ErrorExtraEncoding & EncodingFacetMapping;\n\nexport type CompositeMark = BoxPlot | ErrorBar | ErrorBand;\n\nexport function getAllCompositeMarks() {\n return keys(compositeMarkRegistry);\n}\n\nexport type CompositeMarkDef = BoxPlotDef | ErrorBarDef | ErrorBandDef;\n\nexport type CompositeAggregate = BoxPlot | ErrorBar | ErrorBand;\n\nexport interface CompositeMarkConfigMixins extends BoxPlotConfigMixins, ErrorBarConfigMixins, ErrorBandConfigMixins {}\n\nadd(BOXPLOT, normalizeBoxPlot, BOXPLOT_PARTS);\nadd(ERRORBAR, normalizeErrorBar, ERRORBAR_PARTS);\nadd(ERRORBAND, normalizeErrorBand, ERRORBAND_PARTS);\n","import {SignalRef, Text} from 'vega';\nimport {ConditionValueDefMixins, FormatMixins, ValueDef} from './channeldef';\nimport {LegendConfig} from './legend';\nimport {VgEncodeChannel} from './vega.schema';\n\nexport interface TitleMixins {\n /**\n * A title for the field. If `null`, the title will be removed.\n *\n * __Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n *\n * __Notes__:\n *\n * 1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n *\n * 2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.\n */\n title?: Text | null | SignalRef;\n}\n\nexport interface Guide extends TitleMixins, FormatMixins {}\n\nexport interface VlOnlyGuideConfig {\n /**\n * Set to null to disable title for the axis, legend, or header.\n */\n title?: null;\n}\n\nexport type GuideEncodingConditionalValueDef = ValueDef & ConditionValueDefMixins;\n\nexport type GuideEncodingEntry = Partial>;\n\nexport const VL_ONLY_LEGEND_CONFIG: (keyof LegendConfig)[] = [\n 'gradientHorizontalMaxLength',\n 'gradientHorizontalMinLength',\n 'gradientVerticalMaxLength',\n 'gradientVerticalMinLength',\n 'unselectedOpacity'\n];\n","import {Align, Color, FontStyle, FontWeight, Orient, SignalRef, TextBaseline, TitleAnchor, TitleConfig} from 'vega';\nimport {FormatMixins} from './channeldef';\nimport {ExprRef} from './expr';\nimport {Guide, VlOnlyGuideConfig} from './guide';\nimport {Flag, keys} from './util';\n\nexport const HEADER_TITLE_PROPERTIES_MAP: Partial, keyof TitleConfig>> = {\n titleAlign: 'align',\n titleAnchor: 'anchor',\n titleAngle: 'angle',\n titleBaseline: 'baseline',\n titleColor: 'color',\n titleFont: 'font',\n titleFontSize: 'fontSize',\n titleFontStyle: 'fontStyle',\n titleFontWeight: 'fontWeight',\n titleLimit: 'limit',\n titleLineHeight: 'lineHeight',\n titleOrient: 'orient',\n titlePadding: 'offset'\n};\n\nexport const HEADER_LABEL_PROPERTIES_MAP: Partial, keyof TitleConfig>> = {\n labelAlign: 'align',\n labelAnchor: 'anchor',\n labelAngle: 'angle',\n labelBaseline: 'baseline',\n labelColor: 'color',\n labelFont: 'font',\n labelFontSize: 'fontSize',\n labelFontStyle: 'fontStyle',\n labelFontWeight: 'fontWeight',\n labelLimit: 'limit',\n labelLineHeight: 'lineHeight',\n labelOrient: 'orient',\n labelPadding: 'offset'\n};\n\nexport const HEADER_TITLE_PROPERTIES = keys(HEADER_TITLE_PROPERTIES_MAP);\n\nexport const HEADER_LABEL_PROPERTIES = keys(HEADER_LABEL_PROPERTIES_MAP);\n\nexport interface CoreHeader extends FormatMixins {\n // ---------- Title ----------\n /**\n * The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title.\n */\n titleAnchor?: TitleAnchor; // We don't allow signal for titleAnchor since there is a dependent logic\n\n /**\n * Horizontal text alignment (to the anchor) of header titles.\n */\n titleAlign?: Align | ES;\n\n /**\n * The rotation angle of the header title.\n *\n * __Default value:__ `0`.\n *\n * @minimum -360\n * @maximum 360\n */\n titleAngle?: number; // We don't allow signal for titleAngle since there is a dependent logic\n\n /**\n * The vertical text baseline for the header title. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`.\n * The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone.\n *\n * __Default value:__ `\"middle\"`\n */\n titleBaseline?: TextBaseline | ES;\n\n /**\n * Color of the header title, can be in hex color code or regular color name.\n */\n titleColor?: Color | ES;\n\n /**\n * Font of the header title. (e.g., `\"Helvetica Neue\"`).\n */\n titleFont?: string | ES;\n\n /**\n * Font size of the header title.\n *\n * @minimum 0\n */\n titleFontSize?: number | ES;\n\n /**\n * The font style of the header title.\n */\n titleFontStyle?: FontStyle | ES;\n\n /**\n * Font weight of the header title.\n * This can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`).\n */\n titleFontWeight?: FontWeight | ES;\n\n /**\n * The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n *\n * __Default value:__ `0`, indicating no limit\n */\n titleLimit?: number | ES;\n\n /**\n * Line height in pixels for multi-line header title text or title text with `\"line-top\"` or `\"line-bottom\"` baseline.\n */\n titleLineHeight?: number | ES;\n\n /**\n * The orientation of the header title. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`.\n */\n titleOrient?: Orient; // no signal ref since there is a dependent logic\n\n /**\n * The padding, in pixel, between facet header's title and the label.\n *\n * __Default value:__ `10`\n */\n titlePadding?: number | ES;\n\n // ---------- Label ----------\n\n /**\n * A boolean flag indicating if labels should be included as part of the header.\n *\n * __Default value:__ `true`.\n */\n labels?: boolean;\n\n /**\n * Horizontal text alignment of header labels. One of `\"left\"`, `\"center\"`, or `\"right\"`.\n */\n labelAlign?: Align | ES;\n\n /**\n * The vertical text baseline for the header labels. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`.\n * The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone.\n *\n */\n labelBaseline?: TextBaseline | ES;\n\n /**\n * The anchor position for placing the labels. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label.\n */\n labelAnchor?: TitleAnchor;\n\n /**\n * [Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n *\n * __Note:__ The label text and value can be assessed via the `label` and `value` properties of the header's backing `datum` object.\n */\n labelExpr?: string;\n\n /**\n * The rotation angle of the header labels.\n *\n * __Default value:__ `0` for column header, `-90` for row header.\n *\n * @minimum -360\n * @maximum 360\n */\n labelAngle?: number; // no signal ref since there is a dependent logic\n\n /**\n * The color of the header label, can be in hex color code or regular color name.\n */\n labelColor?: Color | ES;\n\n /**\n * The font of the header label.\n */\n labelFont?: string | ES;\n\n /**\n * The font size of the header label, in pixels.\n *\n * @minimum 0\n */\n labelFontSize?: number | ES;\n\n /**\n * The font style of the header label.\n */\n labelFontStyle?: FontStyle | ES;\n\n /**\n * The font weight of the header label.\n */\n labelFontWeight?: FontWeight | ES;\n\n /**\n * The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n *\n * __Default value:__ `0`, indicating no limit\n */\n labelLimit?: number | ES;\n\n /**\n * Line height in pixels for multi-line header labels or title text with `\"line-top\"` or `\"line-bottom\"` baseline.\n */\n labelLineHeight?: number | ES;\n\n /**\n * The orientation of the header label. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`.\n */\n labelOrient?: Orient; // no signal ref since there is a dependent logic\n\n /**\n * The padding, in pixel, between facet header's label and the plot.\n *\n * __Default value:__ `10`\n */\n labelPadding?: number | ES;\n\n /**\n * Shortcut for setting both labelOrient and titleOrient.\n */\n orient?: Orient; // no signal ref since there is a dependent logic\n}\n\nexport interface HeaderConfig extends CoreHeader, VlOnlyGuideConfig {}\n\n/**\n * Headers of row / column channels for faceted plots.\n */\nexport interface Header extends CoreHeader, Guide {}\n\nexport interface HeaderConfigMixins {\n /**\n * Header configuration, which determines default properties for all [headers](https://vega.github.io/vega-lite/docs/header.html).\n *\n * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n */\n header?: HeaderConfig;\n\n /**\n * Header configuration, which determines default properties for row [headers](https://vega.github.io/vega-lite/docs/header.html).\n *\n * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n */\n headerRow?: HeaderConfig;\n\n /**\n * Header configuration, which determines default properties for column [headers](https://vega.github.io/vega-lite/docs/header.html).\n *\n * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n */\n headerColumn?: HeaderConfig;\n\n /**\n * Header configuration, which determines default properties for non-row/column facet [headers](https://vega.github.io/vega-lite/docs/header.html).\n *\n * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n */\n headerFacet?: HeaderConfig;\n}\n\nconst HEADER_CONFIGS_INDEX: Flag> = {\n header: 1,\n headerRow: 1,\n headerColumn: 1,\n headerFacet: 1\n};\n\nexport const HEADER_CONFIGS = keys(HEADER_CONFIGS_INDEX);\n","import {\n BaseLegend,\n LabelOverlap,\n Legend as VgLegend,\n LegendConfig as VgLegendConfig,\n LegendOrient,\n Orientation,\n SignalRef\n} from 'vega';\nimport {DateTime} from './datetime';\nimport {ExprRef} from './expr';\nimport {Guide, GuideEncodingEntry, VlOnlyGuideConfig} from './guide';\nimport {Flag, keys} from './util';\nimport {MapExcludeValueRefAndReplaceSignalWith} from './vega.schema';\n\nexport const LEGEND_SCALE_CHANNELS = [\n 'size',\n 'shape',\n 'fill',\n 'stroke',\n 'strokeDash',\n 'strokeWidth',\n 'opacity'\n] as const;\n\ntype BaseLegendNoValueRefs = MapExcludeValueRefAndReplaceSignalWith;\n\nexport type LegendConfig = LegendMixins &\n VlOnlyGuideConfig &\n MapExcludeValueRefAndReplaceSignalWith & {\n /**\n * Max legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n *\n * __Default value:__ `200`\n */\n gradientVerticalMaxLength?: number;\n\n /**\n * Min legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n *\n * __Default value:__ `100`\n */\n gradientVerticalMinLength?: number;\n\n /**\n * Max legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n *\n * __Default value:__ `200`\n */\n gradientHorizontalMaxLength?: number;\n\n /**\n * Min legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n *\n * __Default value:__ `100`\n */\n gradientHorizontalMinLength?: number;\n\n /**\n * The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient.\n *\n * __Default value:__ `undefined`. If `undefined`, the default gradient will be determined based on the following rules:\n * - For vertical gradients, `clamp(plot_height, gradientVerticalMinLength, gradientVerticalMaxLength)`\n * - For top-`orient`ed or bottom-`orient`ed horizontal gradients, `clamp(plot_width, gradientHorizontalMinLength, gradientHorizontalMaxLength)`\n * - For other horizontal gradients, `gradientHorizontalMinLength`\n *\n * where `clamp(value, min, max)` restricts _value_ to be between the specified _min_ and _max_.\n * @minimum 0\n */\n gradientLength?: number;\n\n /**\n * The opacity of unselected legend entries.\n *\n * __Default value:__ 0.35.\n */\n unselectedOpacity?: number;\n\n /**\n * Disable legend by default\n */\n disable?: boolean;\n };\n\n/**\n * Properties of a legend or boolean flag for determining whether to show it.\n */\nexport interface Legend\n extends Omit, 'orient'>,\n LegendMixins,\n Guide {\n /**\n * Mark definitions for custom legend encoding.\n *\n * @hidden\n */\n encoding?: LegendEncoding;\n\n /**\n * [Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n *\n * __Note:__ The label text and value can be assessed via the `label` and `value` properties of the legend's backing `datum` object.\n */\n labelExpr?: string;\n\n /**\n * The minimum desired step between legend ticks, in terms of scale domain values. For example, a value of `1` indicates that ticks should not be less than 1 unit apart. If `tickMinStep` is specified, the `tickCount` value will be adjusted, if necessary, to enforce the minimum step value.\n *\n * __Default value__: `undefined`\n */\n tickMinStep?: number | ES;\n\n /**\n * Explicitly set the visible legend values.\n */\n values?: number[] | string[] | boolean[] | DateTime[] | ES; // Vega already supports Signal -- we have to re-declare here since VL supports special Date Time object that's not valid in Vega.\n\n /**\n * The type of the legend. Use `\"symbol\"` to create a discrete legend and `\"gradient\"` for a continuous color gradient.\n *\n * __Default value:__ `\"gradient\"` for non-binned quantitative fields and temporal fields; `\"symbol\"` otherwise.\n */\n type?: 'symbol' | 'gradient';\n\n /**\n * A non-negative integer indicating the z-index of the legend.\n * If zindex is 0, legend should be drawn behind all chart elements.\n * To put them in front, use zindex = 1.\n *\n * @TJS-type integer\n * @minimum 0\n */\n zindex?: number;\n}\n\n// Change comments to be Vega-Lite specific\ninterface LegendMixins {\n /**\n * The strategy to use for resolving overlap of labels in gradient legends. If `false`, no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used. If set to `\"greedy\"`, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes).\n *\n * __Default value:__ `\"greedy\"` for `log scales otherwise `true`.\n */\n labelOverlap?: LabelOverlap | ES; // override comment since our default differs from Vega\n\n /**\n * The direction of the legend, one of `\"vertical\"` or `\"horizontal\"`.\n *\n * __Default value:__\n * - For top-/bottom-`orient`ed legends, `\"horizontal\"`\n * - For left-/right-`orient`ed legends, `\"vertical\"`\n * - For top/bottom-left/right-`orient`ed legends, `\"horizontal\"` for gradient legends and `\"vertical\"` for symbol legends.\n */\n direction?: Orientation; // Omit SignalRef\n\n /**\n * The orientation of the legend, which determines how the legend is positioned within the scene. One of `\"left\"`, `\"right\"`, `\"top\"`, `\"bottom\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom-left\"`, `\"bottom-right\"`, `\"none\"`.\n *\n * __Default value:__ `\"right\"`\n */\n orient?: LegendOrient; // Omit SignalRef\n}\n\nexport type LegendInternal = Legend;\n\nexport interface LegendEncoding {\n /**\n * Custom encoding for the legend container.\n * This can be useful for creating legend with custom x, y position.\n */\n legend?: GuideEncodingEntry;\n\n /**\n * Custom encoding for the legend title text mark.\n */\n title?: GuideEncodingEntry;\n\n /**\n * Custom encoding for legend label text marks.\n */\n labels?: GuideEncodingEntry;\n\n /**\n * Custom encoding for legend symbol marks.\n */\n symbols?: GuideEncodingEntry;\n\n /**\n * Custom encoding for legend gradient filled rect marks.\n */\n gradient?: GuideEncodingEntry;\n}\n\nexport const defaultLegendConfig: LegendConfig = {\n gradientHorizontalMaxLength: 200,\n gradientHorizontalMinLength: 100,\n gradientVerticalMaxLength: 200,\n gradientVerticalMinLength: 64, // This is Vega's minimum.\n unselectedOpacity: 0.35\n};\n\nexport const COMMON_LEGEND_PROPERTY_INDEX: Flag)> = {\n aria: 1,\n clipHeight: 1,\n columnPadding: 1,\n columns: 1,\n cornerRadius: 1,\n description: 1,\n direction: 1,\n fillColor: 1,\n format: 1,\n formatType: 1,\n gradientLength: 1,\n gradientOpacity: 1,\n gradientStrokeColor: 1,\n gradientStrokeWidth: 1,\n gradientThickness: 1,\n gridAlign: 1,\n labelAlign: 1,\n labelBaseline: 1,\n labelColor: 1,\n labelFont: 1,\n labelFontSize: 1,\n labelFontStyle: 1,\n labelFontWeight: 1,\n labelLimit: 1,\n labelOffset: 1,\n labelOpacity: 1,\n labelOverlap: 1,\n labelPadding: 1,\n labelSeparation: 1,\n legendX: 1,\n legendY: 1,\n offset: 1,\n orient: 1,\n padding: 1,\n rowPadding: 1,\n strokeColor: 1,\n symbolDash: 1,\n symbolDashOffset: 1,\n symbolFillColor: 1,\n symbolLimit: 1,\n symbolOffset: 1,\n symbolOpacity: 1,\n symbolSize: 1,\n symbolStrokeColor: 1,\n symbolStrokeWidth: 1,\n symbolType: 1,\n tickCount: 1,\n tickMinStep: 1,\n title: 1,\n titleAlign: 1,\n titleAnchor: 1,\n titleBaseline: 1,\n titleColor: 1,\n titleFont: 1,\n titleFontSize: 1,\n titleFontStyle: 1,\n titleFontWeight: 1,\n titleLimit: 1,\n titleLineHeight: 1,\n titleOpacity: 1,\n titleOrient: 1,\n titlePadding: 1,\n type: 1,\n values: 1,\n zindex: 1\n};\n\nexport const LEGEND_PROPERTIES = keys(COMMON_LEGEND_PROPERTY_INDEX);\n","import {Binding, Color, Cursor, Stream, Vector2} from 'vega';\nimport {isObject} from 'vega-util';\nimport {SingleDefUnitChannel} from './channel';\nimport {FieldName, PrimitiveValue} from './channeldef';\nimport {DateTime} from './datetime';\nimport {ParameterName} from './parameter';\nimport {Dict} from './util';\n\nexport const SELECTION_ID = '_vgsid_';\nexport type SelectionType = 'point' | 'interval';\nexport type SelectionResolution = 'global' | 'union' | 'intersect';\n\nexport type SelectionInit = PrimitiveValue | DateTime;\nexport type SelectionInitInterval = Vector2 | Vector2 | Vector2 | Vector2;\n\nexport type SelectionInitMapping = Dict;\nexport type SelectionInitIntervalMapping = Dict;\n\nexport type LegendStreamBinding = {legend: string | Stream};\nexport type LegendBinding = 'legend' | LegendStreamBinding;\n\nexport interface BaseSelectionConfig {\n /**\n * Determines the default event processing and data query for the selection. Vega-Lite currently supports two selection types:\n *\n * - `\"point\"` -- to select multiple discrete data values; the first value is selected on `click` and additional values toggled on shift-click.\n * - `\"interval\"` -- to select a continuous range of data values on `drag`.\n */\n type: T;\n\n /**\n * Clears the selection, emptying it of all values. This property can be a\n * [Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable clear.\n *\n * __Default value:__ `dblclick`.\n *\n * __See also:__ [`clear` examples ](https://vega.github.io/vega-lite/docs/selection.html#clear) in the documentation.\n */\n clear?: Stream | string | boolean;\n\n /**\n * A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\n * For interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters).\n *\n * __See also:__ [`on` examples](https://vega.github.io/vega-lite/docs/selection.html#on) in the documentation.\n */\n on?: Stream | string;\n\n /**\n * With layered and multi-view displays, a strategy that determines how\n * selections' data queries are resolved when applied in a filter transform,\n * conditional encoding rule, or scale domain.\n *\n * One of:\n * - `\"global\"` -- only one brush exists for the entire SPLOM. When the user begins to drag, any previous brushes are cleared, and a new one is constructed.\n * - `\"union\"` -- each cell contains its own brush, and points are highlighted if they lie within _any_ of these individual brushes.\n * - `\"intersect\"` -- each cell contains its own brush, and points are highlighted only if they fall within _all_ of these individual brushes.\n *\n * __Default value:__ `global`.\n *\n * __See also:__ [`resolve` examples](https://vega.github.io/vega-lite/docs/selection.html#resolve) in the documentation.\n */\n resolve?: SelectionResolution;\n\n // TODO(https://github.com/vega/vega-lite/issues/2596).\n // predicate?: string;\n // domain?: SelectionDomain;\n\n /**\n * An array of encoding channels. The corresponding data field values\n * must match for a data tuple to fall within the selection.\n *\n * __See also:__ The [projection with `encodings` and `fields` section](https://vega.github.io/vega-lite/docs/selection.html#project) in the documentation.\n */\n encodings?: SingleDefUnitChannel[];\n\n /**\n * An array of field names whose values must match for a data tuple to\n * fall within the selection.\n *\n * __See also:__ The [projection with `encodings` and `fields` section](https://vega.github.io/vega-lite/docs/selection.html#project) in the documentation.\n */\n fields?: FieldName[];\n}\n\nexport interface PointSelectionConfig extends BaseSelectionConfig<'point'> {\n /**\n * Controls whether data values should be toggled (inserted or removed from a point selection)\n * or only ever inserted into multi selections.\n *\n * One of:\n * - `true` -- the default behavior, which corresponds to `\"event.shiftKey\"`. As a result, data values are toggled when the user interacts with the shift-key pressed.\n * - `false` -- disables toggling behaviour; as the user interacts, data values are only inserted into the multi selection and never removed.\n * - A [Vega expression](https://vega.github.io/vega/docs/expressions/) which is re-evaluated as the user interacts. If the expression evaluates to `true`, the data value is toggled into or out of the multi selection. If the expression evaluates to `false`, the multi selection is first clear, and the data value is then inserted. For example, setting the value to the Vega expression `\"true\"` will toggle data values\n * without the user pressing the shift-key.\n *\n * __Default value:__ `true`\n *\n * __See also:__ [`toggle` examples](https://vega.github.io/vega-lite/docs/selection.html#toggle) in the documentation.\n */\n toggle?: string | boolean;\n\n /**\n * When true, an invisible voronoi diagram is computed to accelerate discrete\n * selection. The data value _nearest_ the mouse cursor is added to the selection.\n *\n * __Default value:__ `false`, which means that data values must be interacted with directly (e.g., clicked on) to be added to the selection.\n *\n * __See also:__ [`nearest` examples](https://vega.github.io/vega-lite/docs/selection.html#nearest) documentation.\n */\n nearest?: boolean;\n}\n\n// Similar to BaseMarkConfig but the field documentations are specificly for an interval mark.\nexport interface BrushConfig {\n /**\n * The fill color of the interval mark.\n *\n * __Default value:__ `\"#333333\"`\n *\n */\n fill?: Color;\n\n /**\n * The fill opacity of the interval mark (a value between `0` and `1`).\n *\n * __Default value:__ `0.125`\n */\n fillOpacity?: number;\n\n /**\n * The stroke color of the interval mark.\n *\n * __Default value:__ `\"#ffffff\"`\n */\n stroke?: Color;\n\n /**\n * The stroke opacity of the interval mark (a value between `0` and `1`).\n */\n strokeOpacity?: number;\n\n /**\n * The stroke width of the interval mark.\n */\n strokeWidth?: number;\n\n /**\n * An array of alternating stroke and space lengths, for creating dashed or dotted lines.\n */\n strokeDash?: number[];\n\n /**\n * The offset (in pixels) with which to begin drawing the stroke dash array.\n */\n strokeDashOffset?: number;\n\n /**\n * The mouse cursor used over the interval mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used.\n */\n cursor?: Cursor;\n}\n\nexport interface IntervalSelectionConfig extends BaseSelectionConfig<'interval'> {\n /**\n * When truthy, allows a user to interactively move an interval selection\n * back-and-forth. Can be `true`, `false` (to disable panning), or a\n * [Vega event stream definition](https://vega.github.io/vega/docs/event-streams/)\n * which must include a start and end event to trigger continuous panning.\n * Discrete panning (e.g., pressing the left/right arrow keys) will be supported in future versions.\n *\n * __Default value:__ `true`, which corresponds to `[mousedown, window:mouseup] > window:mousemove!`.\n * This default allows users to clicks and drags within an interval selection to reposition it.\n *\n * __See also:__ [`translate` examples](https://vega.github.io/vega-lite/docs/selection.html#translate) in the documentation.\n */\n translate?: string | boolean;\n\n /**\n * When truthy, allows a user to interactively resize an interval selection.\n * Can be `true`, `false` (to disable zooming), or a [Vega event stream\n * definition](https://vega.github.io/vega/docs/event-streams/). Currently,\n * only `wheel` events are supported,\n * but custom event streams can still be used to specify filters, debouncing, and throttling.\n * Future versions will expand the set of events that can trigger this transformation.\n *\n * __Default value:__ `true`, which corresponds to `wheel!`. This default allows users to use the mouse wheel to resize an interval selection.\n *\n * __See also:__ [`zoom` examples](https://vega.github.io/vega-lite/docs/selection.html#zoom) in the documentation.\n */\n zoom?: string | boolean;\n\n /**\n * An interval selection also adds a rectangle mark to depict the\n * extents of the interval. The `mark` property can be used to customize the\n * appearance of the mark.\n *\n * __See also:__ [`mark` examples](https://vega.github.io/vega-lite/docs/selection.html#mark) in the documentation.\n */\n mark?: BrushConfig;\n}\n\nexport interface SelectionParameter {\n /**\n * Required. A unique name for the selection parameter. Selection names should be valid JavaScript identifiers: they should contain only alphanumeric characters (or \"$\", or \"_\") and may not start with a digit. Reserved keywords that may not be used as parameter names are \"datum\", \"event\", \"item\", and \"parent\".\n */\n name: ParameterName;\n\n /**\n * Determines the default event processing and data query for the selection. Vega-Lite currently supports two selection types:\n *\n * - `\"point\"` -- to select multiple discrete data values; the first value is selected on `click` and additional values toggled on shift-click.\n * - `\"interval\"` -- to select a continuous range of data values on `drag`.\n */\n select: T | (T extends 'point' ? PointSelectionConfig : T extends 'interval' ? IntervalSelectionConfig : never);\n\n /**\n * Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/selection.html#project) and initial values.\n *\n * __See also:__ [`init`](https://vega.github.io/vega-lite/docs/value.html) documentation.\n */\n value?: T extends 'point'\n ? SelectionInit | SelectionInitMapping[]\n : T extends 'interval'\n ? SelectionInitIntervalMapping\n : never;\n\n /**\n * When set, a selection is populated by input elements (also known as dynamic query widgets)\n * or by interacting with the corresponding legend. Direct manipulation interaction is disabled by default;\n * to re-enable it, set the selection's [`on`](https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties) property.\n *\n * Legend bindings are restricted to selections that only specify a single field or encoding.\n *\n * Query widget binding takes the form of Vega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind)\n * or can be a mapping between projected field/encodings and binding definitions.\n *\n * __See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation.\n */\n bind?: T extends 'point'\n ? Binding | Record | LegendBinding\n : T extends 'interval'\n ? 'scales'\n : never;\n}\n\nexport type TopLevelSelectionParameter = SelectionParameter & {\n /**\n * By default, top-level selections are applied to every view in the visualization.\n * If this property is specified, selections will only be applied to views with the given names.\n */\n views?: (string | string[])[];\n};\n\nexport type ParameterExtent =\n | {\n /**\n * The name of a parameter.\n */\n param: ParameterName;\n\n /**\n * If a selection parameter is specified, the field name to extract selected values for\n * when the selection is [projected](https://vega.github.io/vega-lite/docs/selection.html#project) over multiple fields or encodings.\n */\n field?: FieldName;\n }\n | {\n /**\n * The name of a parameter.\n */\n param: ParameterName;\n\n /**\n * If a selection parameter is specified, the encoding channel to extract selected values for\n * when a selection is [projected](https://vega.github.io/vega-lite/docs/selection.html#project) over multiple fields or encodings.\n */\n encoding?: SingleDefUnitChannel;\n };\n\nexport type PointSelectionConfigWithoutType = Omit;\n\nexport type IntervalSelectionConfigWithoutType = Omit;\n\nexport interface SelectionConfig {\n /**\n * The default definition for a [`point`](https://vega.github.io/vega-lite/docs/parameter.html#select) selection. All properties and transformations\n * for a point selection definition (except `type`) may be specified here.\n *\n * For instance, setting `point` to `{\"on\": \"dblclick\"}` populates point selections on double-click by default.\n */\n point?: PointSelectionConfigWithoutType;\n\n /**\n * The default definition for an [`interval`](https://vega.github.io/vega-lite/docs/parameter.html#select) selection. All properties and transformations\n * for an interval selection definition (except `type`) may be specified here.\n *\n * For instance, setting `interval` to `{\"translate\": false}` disables the ability to move\n * interval selections by default.\n */\n interval?: IntervalSelectionConfigWithoutType;\n}\n\nexport const defaultConfig: SelectionConfig = {\n point: {\n on: 'click',\n fields: [SELECTION_ID],\n toggle: 'event.shiftKey',\n resolve: 'global',\n clear: 'dblclick'\n },\n interval: {\n on: '[mousedown, window:mouseup] > window:mousemove!',\n encodings: ['x', 'y'],\n translate: '[mousedown, window:mouseup] > window:mousemove!',\n zoom: 'wheel!',\n mark: {fill: '#333', fillOpacity: 0.125, stroke: 'white'},\n resolve: 'global',\n clear: 'dblclick'\n }\n};\n\nexport function isLegendBinding(bind: any): bind is LegendBinding {\n return !!bind && (bind === 'legend' || !!bind.legend);\n}\n\nexport function isLegendStreamBinding(bind: any): bind is LegendStreamBinding {\n return isLegendBinding(bind) && isObject(bind);\n}\n\nexport function isSelectionParameter(param: any): param is SelectionParameter {\n return !!param['select'];\n}\n","import {Binding, Expr, InitSignal, NewSignal} from 'vega';\nimport {isSelectionParameter, TopLevelSelectionParameter} from './selection';\n\nexport type ParameterName = string;\n\nexport interface VariableParameter {\n /**\n * A unique name for the variable parameter. Parameter names should be valid JavaScript identifiers: they should contain only alphanumeric characters (or \"$\", or \"_\") and may not start with a digit. Reserved keywords that may not be used as parameter names are \"datum\", \"event\", \"item\", and \"parent\".\n */\n name: ParameterName;\n\n /**\n * The [initial value](http://vega.github.io/vega-lite/docs/value.html) of the parameter.\n *\n * __Default value:__ `undefined`\n */\n value?: any;\n\n /**\n * An expression for the value of the parameter. This expression may include other parameters, in which case the parameter will automatically update in response to upstream parameter changes.\n */\n expr?: Expr;\n\n /**\n * Binds the parameter to an external input element such as a slider, selection list or radio button group.\n */\n bind?: Binding;\n}\n\nexport function assembleParameterSignals(params: (VariableParameter | TopLevelSelectionParameter)[]) {\n const signals: (NewSignal | InitSignal)[] = [];\n for (const param of params || []) {\n // Selection parameters are handled separately via assembleSelectionTopLevelSignals\n // and assembleSignals methods registered on the Model.\n if (isSelectionParameter(param)) continue;\n const {expr, bind, ...rest} = param;\n\n if (bind && expr) {\n // Vega's InitSignal -- apply expr to \"init\"\n const signal: InitSignal = {\n ...rest,\n bind,\n init: expr\n };\n signals.push(signal);\n } else {\n const signal: NewSignal = {\n ...rest,\n ...(expr ? {update: expr} : {}),\n ...(bind ? {bind} : {})\n };\n signals.push(signal);\n }\n }\n return signals;\n}\n","import {GenericSpec, NormalizedSpec} from '.';\nimport {BaseSpec, BoundsMixins, GenericCompositionLayoutWithColumns, ResolveMixins} from './base';\n\n/**\n * Base layout mixins for V/HConcatSpec, which should not have RowCol generic fo its property.\n */\nexport interface OneDirectionalConcatLayout extends BoundsMixins, ResolveMixins {\n /**\n * Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n *\n * __Default value:__ `false`\n */\n center?: boolean;\n\n /**\n * The spacing in pixels between sub-views of the concat operator.\n *\n * __Default value__: `10`\n */\n spacing?: number;\n}\n\n/**\n * Base interface for a generalized concatenation specification.\n */\nexport interface GenericConcatSpec>\n extends BaseSpec,\n GenericCompositionLayoutWithColumns,\n ResolveMixins {\n /**\n * A list of views to be concatenated.\n */\n concat: S[];\n}\n\n/**\n * Base interface for a vertical concatenation specification.\n */\nexport interface GenericVConcatSpec>\n extends BaseSpec,\n OneDirectionalConcatLayout {\n /**\n * A list of views to be concatenated and put into a column.\n */\n vconcat: S[];\n}\n\n/**\n * Base interface for a horizontal concatenation specification.\n */\nexport interface GenericHConcatSpec>\n extends BaseSpec,\n OneDirectionalConcatLayout {\n /**\n * A list of views to be concatenated and put into a row.\n */\n hconcat: S[];\n}\n\n/** A concat spec without any shortcut/expansion syntax */\nexport type NormalizedConcatSpec =\n | GenericConcatSpec\n | GenericVConcatSpec\n | GenericHConcatSpec;\n\nexport function isAnyConcatSpec(spec: BaseSpec): spec is GenericVConcatSpec | GenericHConcatSpec {\n return isVConcatSpec(spec) || isHConcatSpec(spec) || isConcatSpec(spec);\n}\n\nexport function isConcatSpec(spec: BaseSpec): spec is GenericConcatSpec {\n return 'concat' in spec;\n}\n\nexport function isVConcatSpec(spec: BaseSpec): spec is GenericVConcatSpec {\n return 'vconcat' in spec;\n}\n\nexport function isHConcatSpec(spec: BaseSpec): spec is GenericHConcatSpec {\n return 'hconcat' in spec;\n}\n","import {Color, SignalRef} from 'vega';\nimport {BaseSpec} from '.';\nimport {getPositionScaleChannel} from '../channel';\nimport {signalRefOrValue} from '../compile/common';\nimport {Config} from '../config';\nimport {InlineDataset} from '../data';\nimport {ExprRef} from '../expr';\nimport {VariableParameter} from '../parameter';\nimport {TopLevelSelectionParameter} from '../selection';\nimport {Dict} from '../util';\n\n/**\n * @minimum 0\n */\nexport type Padding = number | {top?: number; bottom?: number; left?: number; right?: number};\n\nexport type Datasets = Dict;\n\nexport type TopLevel = S &\n TopLevelProperties & {\n /**\n * URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v5.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.\n * @format uri\n */\n $schema?: string;\n\n /**\n * Vega-Lite configuration object. This property can only be defined at the top-level of a specification.\n */\n config?: Config;\n\n /**\n * A global data store for named datasets. This is a mapping from names to inline datasets.\n * This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property.\n */\n datasets?: Datasets;\n\n /**\n * Optional metadata that will be passed to Vega.\n * This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.\n */\n usermeta?: Dict;\n };\n\n/**\n * Shared properties between Top-Level specs and Config\n */\nexport interface TopLevelProperties {\n /**\n * CSS color property to use as the background of the entire view.\n *\n * __Default value:__ `\"white\"`\n */\n background?: Color | ES;\n\n /**\n * The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\n * If an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n *\n * __Default value__: `5`\n */\n padding?: Padding | ES;\n\n /**\n * How the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\n * Object values can additionally specify parameters for content sizing and automatic resizing.\n *\n * __Default value__: `pad`\n */\n autosize?: AutosizeType | AutoSizeParams; // Vega actually supports signal for autosize. However, we need to check autosize at compile time to infer the rest of the spec. Thus VL's autosize won't support SignalRef for now.\n\n /**\n * Dynamic variables or selections that parameterize a visualization.\n */\n params?: (VariableParameter | TopLevelSelectionParameter)[];\n}\n\nexport type FitType = 'fit' | 'fit-x' | 'fit-y';\n\nexport function isFitType(autoSizeType: AutosizeType): autoSizeType is FitType {\n return autoSizeType === 'fit' || autoSizeType === 'fit-x' || autoSizeType === 'fit-y';\n}\n\nexport function getFitType(sizeType?: 'width' | 'height'): FitType {\n return sizeType ? (`fit-${getPositionScaleChannel(sizeType)}` as FitType) : 'fit';\n}\n\nexport type AutosizeType = 'pad' | 'none' | 'fit' | 'fit-x' | 'fit-y';\n\nexport interface AutoSizeParams {\n /**\n * The sizing format type. One of `\"pad\"`, `\"fit\"`, `\"fit-x\"`, `\"fit-y\"`, or `\"none\"`. See the [autosize type](https://vega.github.io/vega-lite/docs/size.html#autosize) documentation for descriptions of each.\n *\n * __Default value__: `\"pad\"`\n */\n type?: AutosizeType;\n\n /**\n * A boolean flag indicating if autosize layout should be re-calculated on every view update.\n *\n * __Default value__: `false`\n */\n resize?: boolean;\n\n /**\n * Determines how size calculation should be performed, one of `\"content\"` or `\"padding\"`. The default setting (`\"content\"`) interprets the width and height settings as the data rectangle (plotting) dimensions, to which padding is then added. In contrast, the `\"padding\"` setting includes the padding within the view size calculations, such that the width and height settings indicate the **total** intended size of the view.\n *\n * __Default value__: `\"content\"`\n */\n contains?: 'content' | 'padding';\n}\n\nconst TOP_LEVEL_PROPERTIES: (keyof TopLevelProperties)[] = [\n 'background',\n 'padding'\n // We do not include \"autosize\" here as it is supported by only unit and layer specs and thus need to be normalized\n];\n\nexport function extractTopLevelProperties(t: TopLevelProperties, includeParams: boolean) {\n const o: TopLevelProperties = {};\n for (const p of TOP_LEVEL_PROPERTIES) {\n if (t && t[p] !== undefined) {\n o[p as any] = signalRefOrValue(t[p]);\n }\n }\n if (includeParams) {\n o.params = t.params;\n }\n return o;\n}\n","import {Color, Cursor, SignalRef, Text} from 'vega';\nimport {isNumber, isObject} from 'vega-util';\nimport {NormalizedSpec} from '.';\nimport {Data} from '../data';\nimport {ExprRef} from '../expr';\nimport {MarkConfig} from '../mark';\nimport {Resolve} from '../resolve';\nimport {TitleParams} from '../title';\nimport {Transform} from '../transform';\nimport {Flag, keys} from '../util';\nimport {LayoutAlign, RowCol} from '../vega.schema';\nimport {isConcatSpec, isVConcatSpec} from './concat';\nimport {isFacetMapping, isFacetSpec} from './facet';\n\nexport {TopLevel} from './toplevel';\n\n/**\n * Common properties for all types of specification\n */\nexport interface BaseSpec {\n /**\n * Title for the plot.\n */\n title?: Text | TitleParams;\n\n /**\n * Name of the visualization for later reference.\n */\n name?: string;\n\n /**\n * Description of this mark for commenting purpose.\n */\n description?: string;\n\n /**\n * An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent.\n */\n data?: Data | null;\n\n /**\n * An array of data transformations such as filter and new field calculation.\n */\n transform?: Transform[];\n}\n\nexport interface DataMixins {\n /**\n * An object describing the data source.\n */\n data: Data;\n}\n\nexport interface Step {\n /**\n * The size (width/height) per discrete step.\n */\n step: number;\n}\n\nexport function isStep(size: number | Step | 'container' | 'merged'): size is Step {\n return isObject(size) && size['step'] !== undefined;\n}\n\n// TODO(https://github.com/vega/vega-lite/issues/2503): Make this generic so we can support some form of top-down sizing.\n/**\n * Common properties for specifying width and height of unit and layer specifications.\n */\nexport interface LayoutSizeMixins {\n /**\n * The width of a visualization.\n *\n * - For a plot with a continuous x-field, width should be a number.\n * - For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.)\n * - To enable responsive sizing on width, it should be set to `\"container\"`.\n *\n * __Default value:__\n * Based on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n *\n * __Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n *\n * __See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation.\n */\n width?: number | 'container' | Step; // Vega also supports SignalRef for width and height. However, we need to know if width is a step or not in VL and it's very difficult to check this at runtime, so we intentionally do not support SignalRef here.\n\n /**\n * The height of a visualization.\n *\n * - For a plot with a continuous y-field, height should be a number.\n * - For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.)\n * - To enable responsive sizing on height, it should be set to `\"container\"`.\n *\n * __Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n *\n * __Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n *\n * __See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation.\n */\n height?: number | 'container' | Step; // Vega also supports SignalRef for width and height. However, we need to know if width is a step or not in VL and it's very difficult to check this at runtime, so we intentionally do not support SignalRef here.\n}\n\nexport function isFrameMixins(o: any): o is FrameMixins {\n return o['view'] || o['width'] || o['height'];\n}\n\nexport interface FrameMixins extends LayoutSizeMixins {\n /**\n * An object defining the view background's fill and stroke.\n *\n * __Default value:__ none (transparent)\n */\n view?: ViewBackground;\n}\n\nexport interface ResolveMixins {\n /**\n * Scale, axis, and legend resolutions for view composition specifications.\n */\n resolve?: Resolve;\n}\n\nexport interface BaseViewBackground\n extends Partial<\n Pick<\n MarkConfig,\n | 'cornerRadius'\n | 'fillOpacity'\n | 'opacity'\n | 'strokeCap'\n | 'strokeDash'\n | 'strokeDashOffset'\n | 'strokeJoin'\n | 'strokeMiterLimit'\n | 'strokeOpacity'\n | 'strokeWidth'\n >\n > {\n // Override documentations for fill, stroke, and cursor\n /**\n * The fill color.\n *\n * __Default value:__ `undefined`\n */\n fill?: Color | null | ES;\n\n /**\n * The stroke color.\n *\n * __Default value:__ `\"#ddd\"`\n */\n stroke?: Color | null | ES;\n\n /**\n * The mouse cursor used over the view. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used.\n */\n cursor?: Cursor;\n}\n\nexport interface ViewBackground extends BaseViewBackground {\n /**\n * A string or array of strings indicating the name of custom styles to apply to the view background. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles.\n *\n * __Default value:__ `\"cell\"`\n * __Note:__ Any specified view background properties will augment the default style.\n */\n style?: string | string[];\n}\n\nexport interface BoundsMixins {\n /**\n * The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n *\n * - If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n * - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n *\n * __Default value:__ `\"full\"`\n */\n\n bounds?: 'full' | 'flush';\n}\n\n/**\n * Base layout for FacetSpec and RepeatSpec.\n * This is named \"GenericComposition\" layout as ConcatLayout is a GenericCompositionLayout too\n * (but _not_ vice versa).\n */\nexport interface GenericCompositionLayout extends BoundsMixins {\n /**\n * The alignment to apply to grid rows and columns.\n * The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n *\n * - For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n * - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n * - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n *\n * Alternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n *\n * __Default value:__ `\"all\"`.\n */\n align?: LayoutAlign | RowCol;\n\n /**\n * Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n *\n * An object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n *\n * __Default value:__ `false`\n */\n center?: boolean | RowCol;\n\n /**\n * The spacing in pixels between sub-views of the composition operator.\n * An object of the form `{\"row\": number, \"column\": number}` can be used to set\n * different spacing values for rows and columns.\n *\n * __Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)\n */\n spacing?: number | RowCol;\n}\n\nexport const DEFAULT_SPACING = 20;\n\nexport interface ColumnMixins {\n /**\n * The number of columns to include in the view composition layout.\n *\n * __Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n * `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n *\n * __Note__:\n *\n * 1) This property is only for:\n * - the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n * - the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n *\n * 2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).\n */\n columns?: number;\n}\n\nexport type GenericCompositionLayoutWithColumns = GenericCompositionLayout & ColumnMixins;\n\nexport type CompositionConfig = ColumnMixins & {\n /**\n * The default spacing in pixels between composed sub-views.\n *\n * __Default value__: `20`\n */\n spacing?: number;\n};\n\nexport interface CompositionConfigMixins {\n /** Default configuration for the `facet` view composition operator */\n facet?: CompositionConfig;\n\n /** Default configuration for all concatenation and repeat view composition operators (`concat`, `hconcat`, `vconcat`, and `repeat`) */\n concat?: CompositionConfig;\n}\n\nconst COMPOSITION_LAYOUT_INDEX: Flag = {\n align: 1,\n bounds: 1,\n center: 1,\n columns: 1,\n spacing: 1\n};\n\nconst COMPOSITION_LAYOUT_PROPERTIES = keys(COMPOSITION_LAYOUT_INDEX);\n\nexport type SpecType = 'unit' | 'facet' | 'layer' | 'concat';\n\nexport function extractCompositionLayout(\n spec: NormalizedSpec,\n specType: keyof CompositionConfigMixins,\n config: CompositionConfigMixins\n): GenericCompositionLayoutWithColumns {\n const compositionConfig = config[specType];\n const layout: GenericCompositionLayoutWithColumns = {};\n\n // Apply config first\n const {spacing: spacingConfig, columns} = compositionConfig;\n if (spacingConfig !== undefined) {\n layout.spacing = spacingConfig;\n }\n\n if (columns !== undefined) {\n if ((isFacetSpec(spec) && !isFacetMapping(spec.facet)) || isConcatSpec(spec)) {\n layout.columns = columns;\n }\n }\n\n if (isVConcatSpec(spec)) {\n layout.columns = 1;\n }\n\n // Then copy properties from the spec\n for (const prop of COMPOSITION_LAYOUT_PROPERTIES) {\n if (spec[prop] !== undefined) {\n if (prop === 'spacing') {\n const spacing: number | RowCol = spec[prop];\n\n layout[prop] = isNumber(spacing)\n ? spacing\n : {\n row: spacing.row ?? spacingConfig,\n column: spacing.column ?? spacingConfig\n };\n } else {\n (layout[prop] as any) = spec[prop];\n }\n }\n }\n\n return layout;\n}\n","import {Color, InitSignal, Locale, NewSignal, RangeConfig, RangeScheme, SignalRef} from 'vega';\nimport {isObject, mergeConfig} from 'vega-util';\nimport {Axis, AxisConfig, AxisConfigMixins, AXIS_CONFIGS, isConditionalAxisValue} from './axis';\nimport {signalOrValueRefWithCondition, signalRefOrValue} from './compile/common';\nimport {CompositeMarkConfigMixins, getAllCompositeMarks} from './compositemark';\nimport {ExprRef, replaceExprRef} from './expr';\nimport {VL_ONLY_LEGEND_CONFIG} from './guide';\nimport {HeaderConfigMixins, HEADER_CONFIGS} from './header';\nimport {defaultLegendConfig, LegendConfig} from './legend';\nimport * as mark from './mark';\nimport {\n AnyMarkConfig,\n Mark,\n MarkConfig,\n MarkConfigMixins,\n MARK_CONFIGS,\n PRIMITIVE_MARKS,\n VL_ONLY_MARK_CONFIG_PROPERTIES,\n VL_ONLY_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX\n} from './mark';\nimport {assembleParameterSignals} from './parameter';\nimport {ProjectionConfig} from './projection';\nimport {defaultScaleConfig, ScaleConfig} from './scale';\nimport {defaultConfig as defaultSelectionConfig, SelectionConfig} from './selection';\nimport {BaseViewBackground, CompositionConfigMixins, DEFAULT_SPACING, isStep} from './spec/base';\nimport {TopLevelProperties} from './spec/toplevel';\nimport {extractTitleConfig, TitleConfig} from './title';\nimport {duplicate, getFirstDefined, isEmpty, keys, omit} from './util';\n\nexport interface ViewConfig extends BaseViewBackground {\n /**\n * The default width when the plot has a continuous field for x or longitude, or has arc marks.\n *\n * __Default value:__ `200`\n */\n continuousWidth?: number;\n\n /**\n * The default width when the plot has non-arc marks and either a discrete x-field or no x-field.\n * The width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step.\n *\n * __Default value:__ a step size based on `config.view.step`.\n */\n discreteWidth?: number | {step: number};\n /**\n * The default height when the plot has a continuous y-field for x or latitude, or has arc marks.\n *\n * __Default value:__ `200`\n */\n continuousHeight?: number;\n\n /**\n * The default height when the plot has non arc marks and either a discrete y-field or no y-field.\n * The height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step.\n *\n * __Default value:__ a step size based on `config.view.step`.\n */\n discreteHeight?: number | {step: number};\n\n /**\n * Default step size for x-/y- discrete fields.\n */\n step?: number;\n\n /**\n * Whether the view should be clipped.\n */\n clip?: boolean;\n}\n\nexport function getViewConfigContinuousSize(\n viewConfig: ViewConfig,\n channel: 'width' | 'height'\n) {\n return viewConfig[channel] ?? viewConfig[channel === 'width' ? 'continuousWidth' : 'continuousHeight']; // get width/height for backwards compatibility\n}\n\nexport function getViewConfigDiscreteStep(\n viewConfig: ViewConfig,\n channel: 'width' | 'height'\n) {\n const size = getViewConfigDiscreteSize(viewConfig, channel);\n return isStep(size) ? size.step : DEFAULT_STEP;\n}\n\nexport function getViewConfigDiscreteSize(\n viewConfig: ViewConfig,\n channel: 'width' | 'height'\n) {\n const size = viewConfig[channel] ?? viewConfig[channel === 'width' ? 'discreteWidth' : 'discreteHeight']; // get width/height for backwards compatibility\n return getFirstDefined(size, {step: viewConfig.step});\n}\n\nexport const DEFAULT_STEP = 20;\n\nexport const defaultViewConfig: ViewConfig = {\n continuousWidth: 200,\n continuousHeight: 200,\n step: DEFAULT_STEP\n};\n\nexport function isVgScheme(rangeScheme: string[] | RangeScheme): rangeScheme is RangeScheme {\n return rangeScheme && !!rangeScheme['scheme'];\n}\n\nexport type ColorConfig = Record;\n\nexport type FontSizeConfig = Record;\n\nexport interface VLOnlyConfig {\n /**\n * Default font for all text marks, titles, and labels.\n */\n font?: string;\n\n /**\n * Default color signals.\n *\n * @hidden\n */\n color?: boolean | ColorConfig;\n\n /**\n * Default font size signals.\n *\n * @hidden\n */\n fontSize?: boolean | FontSizeConfig;\n\n /**\n * Default axis and legend title for count fields.\n *\n * __Default value:__ `'Count of Records`.\n *\n * @type {string}\n */\n countTitle?: string;\n\n /**\n * Defines how Vega-Lite generates title for fields. There are three possible styles:\n * - `\"verbal\"` (Default) - displays function in a verbal style (e.g., \"Sum of field\", \"Year-month of date\", \"field (binned)\").\n * - `\"function\"` - displays function using parentheses and capitalized texts (e.g., \"SUM(field)\", \"YEARMONTH(date)\", \"BIN(field)\").\n * - `\"plain\"` - displays only the field name without functions (e.g., \"field\", \"date\", \"field\").\n */\n fieldTitle?: 'verbal' | 'functional' | 'plain';\n\n /**\n * D3 Number format for guide labels and text marks. For example `\"s\"` for SI units. Use [D3's number format pattern](https://github.com/d3/d3-format#locale_format).\n */\n numberFormat?: string;\n\n /**\n * Default time format for raw time values (without time units) in text marks, legend labels and header labels.\n *\n * __Default value:__ `\"%b %d, %Y\"`\n * __Note:__ Axes automatically determine the format for each label automatically so this config does not affect axes.\n */\n timeFormat?: string;\n\n /**\n * Allow the `formatType` property for text marks and guides to accept a custom formatter function [registered as a Vega expression](https://vega.github.io/vega-lite/usage/compile.html#format-type).\n */\n customFormatTypes?: boolean;\n\n /** Default properties for [single view plots](https://vega.github.io/vega-lite/docs/spec.html#single). */\n view?: ViewConfig;\n\n /**\n * Scale configuration determines default properties for all [scales](https://vega.github.io/vega-lite/docs/scale.html). For a full list of scale configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config).\n */\n scale?: ScaleConfig;\n\n /** An object hash for defining default properties for each type of selections. */\n selection?: SelectionConfig;\n}\n\nexport type StyleConfigIndex = Partial | Axis>> &\n MarkConfigMixins & {\n /**\n * Default style for axis, legend, and header titles.\n */\n 'guide-title'?: MarkConfig;\n\n /**\n * Default style for axis, legend, and header labels.\n */\n 'guide-label'?: MarkConfig;\n\n /**\n * Default style for chart titles\n */\n 'group-title'?: MarkConfig;\n\n /**\n * Default style for chart subtitles\n */\n 'group-subtitle'?: MarkConfig;\n };\n\nexport interface Config\n extends TopLevelProperties,\n VLOnlyConfig,\n MarkConfigMixins,\n CompositeMarkConfigMixins,\n AxisConfigMixins,\n HeaderConfigMixins,\n CompositionConfigMixins {\n /**\n * An object hash that defines default range arrays or schemes for using with scales.\n * For a full list of scale range configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config).\n */\n range?: RangeConfig;\n\n /**\n * Legend configuration, which determines default properties for all [legends](https://vega.github.io/vega-lite/docs/legend.html). For a full list of legend configuration options, please see the [corresponding section of in the legend documentation](https://vega.github.io/vega-lite/docs/legend.html#config).\n */\n legend?: LegendConfig;\n\n /**\n * Title configuration, which determines default properties for all [titles](https://vega.github.io/vega-lite/docs/title.html). For a full list of title configuration options, please see the [corresponding section of the title documentation](https://vega.github.io/vega-lite/docs/title.html#config).\n */\n title?: TitleConfig;\n\n /**\n * Projection configuration, which determines default properties for all [projections](https://vega.github.io/vega-lite/docs/projection.html). For a full list of projection configuration options, please see the [corresponding section of the projection documentation](https://vega.github.io/vega-lite/docs/projection.html#config).\n */\n projection?: ProjectionConfig;\n\n /** An object hash that defines key-value mappings to determine default properties for marks with a given [style](https://vega.github.io/vega-lite/docs/mark.html#mark-def). The keys represent styles names; the values have to be valid [mark configuration objects](https://vega.github.io/vega-lite/docs/mark.html#config). */\n style?: StyleConfigIndex;\n\n /**\n * A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property provides a global default for text marks, which is overridden by mark or style config settings, and by the lineBreak mark encoding channel. If signal-valued, either string or regular expression (regexp) values are valid.\n */\n lineBreak?: string | ES;\n\n /**\n * A boolean flag indicating if ARIA default attributes should be included for marks and guides (SVG output only). If false, the `\"aria-hidden\"` attribute will be set for all guides, removing them from the ARIA accessibility tree and Vega-Lite will not generate default descriptions for marks.\n *\n * __Default value:__ `true`.\n */\n aria?: boolean;\n\n /**\n * Locale definitions for string parsing and formatting of number and date values. The locale object should contain `number` and/or `time` properties with [locale definitions](https://vega.github.io/vega/docs/api/locale/). Locale definitions provided in the config block may be overridden by the View constructor locale option.\n */\n locale?: Locale;\n\n /**\n * @hidden\n */\n signals?: (InitSignal | NewSignal)[];\n}\n\nexport const defaultConfig: Config = {\n background: 'white',\n\n padding: 5,\n timeFormat: '%b %d, %Y',\n countTitle: 'Count of Records',\n\n view: defaultViewConfig,\n\n mark: mark.defaultMarkConfig,\n\n arc: {},\n area: {},\n bar: mark.defaultBarConfig,\n circle: {},\n geoshape: {},\n image: {},\n line: {},\n point: {},\n rect: mark.defaultRectConfig,\n rule: {color: 'black'}, // Need this to override default color in mark config\n square: {},\n text: {color: 'black'}, // Need this to override default color in mark config\n tick: mark.defaultTickConfig,\n trail: {},\n\n boxplot: {\n size: 14,\n extent: 1.5,\n box: {},\n median: {color: 'white'},\n outliers: {},\n rule: {},\n ticks: null\n },\n\n errorbar: {\n center: 'mean',\n rule: true,\n ticks: false\n },\n\n errorband: {\n band: {\n opacity: 0.3\n },\n borders: false\n },\n\n scale: defaultScaleConfig,\n\n projection: {},\n\n legend: defaultLegendConfig,\n header: {titlePadding: 10, labelPadding: 10},\n headerColumn: {},\n headerRow: {},\n headerFacet: {},\n\n selection: defaultSelectionConfig,\n style: {},\n\n title: {},\n\n facet: {spacing: DEFAULT_SPACING},\n concat: {spacing: DEFAULT_SPACING}\n};\n\n// Tableau10 color palette, copied from `vegaScale.scheme('tableau10')`\nconst tab10 = [\n '#4c78a8',\n '#f58518',\n '#e45756',\n '#72b7b2',\n '#54a24b',\n '#eeca3b',\n '#b279a2',\n '#ff9da6',\n '#9d755d',\n '#bab0ac'\n];\n\nexport const DEFAULT_FONT_SIZE = {\n text: 11,\n guideLabel: 10,\n guideTitle: 11,\n groupTitle: 13,\n groupSubtitle: 12\n};\n\nexport const DEFAULT_COLOR = {\n blue: tab10[0],\n orange: tab10[1],\n red: tab10[2],\n teal: tab10[3],\n green: tab10[4],\n yellow: tab10[5],\n purple: tab10[6],\n pink: tab10[7],\n brown: tab10[8],\n gray0: '#000',\n gray1: '#111',\n gray2: '#222',\n gray3: '#333',\n gray4: '#444',\n gray5: '#555',\n gray6: '#666',\n gray7: '#777',\n gray8: '#888',\n gray9: '#999',\n gray10: '#aaa',\n gray11: '#bbb',\n gray12: '#ccc',\n gray13: '#ddd',\n gray14: '#eee',\n gray15: '#fff'\n};\n\nexport function colorSignalConfig(color: boolean | ColorConfig = {}): Config {\n return {\n signals: [\n {\n name: 'color',\n value: isObject(color) ? {...DEFAULT_COLOR, ...color} : DEFAULT_COLOR\n }\n ],\n mark: {color: {signal: 'color.blue'}},\n rule: {color: {signal: 'color.gray0'}},\n text: {\n color: {signal: 'color.gray0'}\n },\n style: {\n 'guide-label': {\n fill: {signal: 'color.gray0'}\n },\n 'guide-title': {\n fill: {signal: 'color.gray0'}\n },\n 'group-title': {\n fill: {signal: 'color.gray0'}\n },\n 'group-subtitle': {\n fill: {signal: 'color.gray0'}\n },\n cell: {\n stroke: {signal: 'color.gray8'}\n }\n },\n axis: {\n domainColor: {signal: 'color.gray13'},\n gridColor: {signal: 'color.gray8'},\n tickColor: {signal: 'color.gray13'}\n },\n range: {\n category: [\n {signal: 'color.blue'},\n {signal: 'color.orange'},\n {signal: 'color.red'},\n {signal: 'color.teal'},\n {signal: 'color.green'},\n {signal: 'color.yellow'},\n {signal: 'color.purple'},\n {signal: 'color.pink'},\n {signal: 'color.brown'},\n {signal: 'color.grey8'}\n ]\n }\n };\n}\n\nexport function fontSizeSignalConfig(fontSize: boolean | FontSizeConfig): Config {\n return {\n signals: [\n {\n name: 'fontSize',\n value: isObject(fontSize) ? {...DEFAULT_FONT_SIZE, ...fontSize} : DEFAULT_FONT_SIZE\n }\n ],\n text: {\n fontSize: {signal: 'fontSize.text'}\n },\n style: {\n 'guide-label': {\n fontSize: {signal: 'fontSize.guideLabel'}\n },\n 'guide-title': {\n fontSize: {signal: 'fontSize.guideTitle'}\n },\n 'group-title': {\n fontSize: {signal: 'fontSize.groupTitle'}\n },\n 'group-subtitle': {\n fontSize: {signal: 'fontSize.groupSubtitle'}\n }\n }\n };\n}\n\nexport function fontConfig(font: string): Config {\n return {\n text: {font},\n style: {\n 'guide-label': {font},\n 'guide-title': {font},\n 'group-title': {font},\n 'group-subtitle': {font}\n }\n };\n}\n\nfunction getAxisConfigInternal(axisConfig: AxisConfig) {\n const props = keys(axisConfig || {});\n const axisConfigInternal: AxisConfig = {};\n for (const prop of props) {\n const val = axisConfig[prop];\n axisConfigInternal[prop as any] = isConditionalAxisValue(val)\n ? signalOrValueRefWithCondition(val)\n : signalRefOrValue(val);\n }\n return axisConfigInternal;\n}\n\nfunction getStyleConfigInternal(styleConfig: StyleConfigIndex) {\n const props = keys(styleConfig);\n\n const styleConfigInternal: StyleConfigIndex = {};\n for (const prop of props) {\n // We need to cast to cheat a bit here since styleConfig can be either mark config or axis config\n styleConfigInternal[prop as any] = getAxisConfigInternal(styleConfig[prop] as any);\n }\n return styleConfigInternal;\n}\n\nconst configPropsWithExpr = [\n ...MARK_CONFIGS,\n ...AXIS_CONFIGS,\n ...HEADER_CONFIGS,\n 'background',\n 'padding',\n 'legend',\n 'lineBreak',\n 'scale',\n 'style',\n 'title',\n 'view'\n] as const;\n\n/**\n * Merge specified config with default config and config for the `color` flag,\n * then replace all expressions with signals\n */\nexport function initConfig(specifiedConfig: Config = {}): Config {\n const {color, font, fontSize, ...restConfig} = specifiedConfig;\n const mergedConfig = mergeConfig(\n {},\n defaultConfig,\n font ? fontConfig(font) : {},\n color ? colorSignalConfig(color) : {},\n fontSize ? fontSizeSignalConfig(fontSize) : {},\n restConfig || {}\n );\n const outputConfig: Config = omit(mergedConfig, configPropsWithExpr);\n\n for (const prop of ['background', 'lineBreak', 'padding']) {\n if (mergedConfig[prop]) {\n outputConfig[prop] = signalRefOrValue(mergedConfig[prop]);\n }\n }\n\n for (const markConfigType of mark.MARK_CONFIGS) {\n if (mergedConfig[markConfigType]) {\n // FIXME: outputConfig[markConfigType] expects that types are replaced recursively but replaceExprRef only replaces one level deep\n outputConfig[markConfigType] = replaceExprRef(mergedConfig[markConfigType]) as any;\n }\n }\n\n for (const axisConfigType of AXIS_CONFIGS) {\n if (mergedConfig[axisConfigType]) {\n outputConfig[axisConfigType] = getAxisConfigInternal(mergedConfig[axisConfigType]);\n }\n }\n\n for (const headerConfigType of HEADER_CONFIGS) {\n if (mergedConfig[headerConfigType]) {\n outputConfig[headerConfigType] = replaceExprRef(mergedConfig[headerConfigType]);\n }\n }\n\n if (mergedConfig.legend) {\n outputConfig.legend = replaceExprRef(mergedConfig.legend);\n }\n\n if (mergedConfig.scale) {\n outputConfig.scale = replaceExprRef(mergedConfig.scale);\n }\n\n if (mergedConfig.style) {\n outputConfig.style = getStyleConfigInternal(mergedConfig.style);\n }\n\n if (mergedConfig.title) {\n outputConfig.title = replaceExprRef(mergedConfig.title);\n }\n\n if (mergedConfig.view) {\n outputConfig.view = replaceExprRef(mergedConfig.view);\n }\n\n return outputConfig;\n}\n\nconst MARK_STYLES = ['view', ...PRIMITIVE_MARKS] as ('view' | Mark)[];\n\nconst VL_ONLY_CONFIG_PROPERTIES: (keyof Config)[] = [\n 'color',\n 'fontSize',\n 'background', // We apply background to the spec directly.\n 'padding',\n 'facet',\n 'concat',\n 'numberFormat',\n 'timeFormat',\n 'countTitle',\n 'header',\n\n 'axisQuantitative',\n 'axisTemporal',\n 'axisDiscrete',\n 'axisPoint',\n\n 'axisXBand',\n 'axisXPoint',\n 'axisXDiscrete',\n 'axisXQuantitative',\n 'axisXTemporal',\n\n 'axisYBand',\n 'axisYPoint',\n 'axisYDiscrete',\n 'axisYQuantitative',\n 'axisYTemporal',\n\n 'scale',\n 'selection',\n 'overlay' as keyof Config // FIXME: Redesign and unhide this\n];\n\nconst VL_ONLY_ALL_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX = {\n view: ['continuousWidth', 'continuousHeight', 'discreteWidth', 'discreteHeight', 'step'],\n ...VL_ONLY_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX\n};\n\nexport function stripAndRedirectConfig(config: Config) {\n config = duplicate(config);\n\n for (const prop of VL_ONLY_CONFIG_PROPERTIES) {\n delete config[prop];\n }\n\n if (config.axis) {\n // delete condition axis config\n for (const prop in config.axis) {\n if (isConditionalAxisValue(config.axis[prop])) {\n delete config.axis[prop];\n }\n }\n }\n\n if (config.legend) {\n for (const prop of VL_ONLY_LEGEND_CONFIG) {\n delete config.legend[prop];\n }\n }\n\n // Remove Vega-Lite only generic mark config\n if (config.mark) {\n for (const prop of VL_ONLY_MARK_CONFIG_PROPERTIES) {\n delete config.mark[prop];\n }\n\n if (config.mark.tooltip && isObject(config.mark.tooltip)) {\n delete config.mark.tooltip;\n }\n }\n\n if (config.params) {\n config.signals = (config.signals || []).concat(assembleParameterSignals(config.params));\n delete config.params;\n }\n\n for (const markType of MARK_STYLES) {\n // Remove Vega-Lite-only mark config\n for (const prop of VL_ONLY_MARK_CONFIG_PROPERTIES) {\n delete config[markType][prop];\n }\n\n // Remove Vega-Lite only mark-specific config\n const vlOnlyMarkSpecificConfigs = VL_ONLY_ALL_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX[markType];\n if (vlOnlyMarkSpecificConfigs) {\n for (const prop of vlOnlyMarkSpecificConfigs) {\n delete config[markType][prop];\n }\n }\n\n // Redirect mark config to config.style so that mark config only affect its own mark type\n // without affecting other marks that share the same underlying Vega marks.\n // For example, config.rect should not affect bar marks.\n redirectConfigToStyleConfig(config, markType);\n }\n\n for (const m of getAllCompositeMarks()) {\n // Clean up the composite mark config as we don't need them in the output specs anymore\n delete config[m];\n }\n\n redirectTitleConfig(config);\n\n // Remove empty config objects.\n for (const prop in config) {\n if (isObject(config[prop]) && isEmpty(config[prop])) {\n delete config[prop];\n }\n }\n\n return isEmpty(config) ? undefined : config;\n}\n\n/**\n *\n * Redirect config.title -- so that title config do not affect header labels,\n * which also uses `title` directive to implement.\n *\n * For subtitle configs in config.title, keep them in config.title as header titles never have subtitles.\n */\nfunction redirectTitleConfig(config: Config) {\n const {titleMarkConfig, subtitleMarkConfig, subtitle} = extractTitleConfig(config.title);\n\n // set config.style if title/subtitleMarkConfig is not an empty object\n if (!isEmpty(titleMarkConfig)) {\n config.style['group-title'] = {\n ...config.style['group-title'],\n ...titleMarkConfig // config.title has higher precedence than config.style.group-title in Vega\n };\n }\n if (!isEmpty(subtitleMarkConfig)) {\n config.style['group-subtitle'] = {\n ...config.style['group-subtitle'],\n ...subtitleMarkConfig\n };\n }\n\n // subtitle part can stay in config.title since header titles do not use subtitle\n if (!isEmpty(subtitle)) {\n config.title = subtitle;\n } else {\n delete config.title;\n }\n}\n\nfunction redirectConfigToStyleConfig(\n config: Config,\n prop: Mark | 'view' | string, // string = composite mark\n toProp?: string,\n compositeMarkPart?: string\n) {\n const propConfig: MarkConfig = compositeMarkPart ? config[prop][compositeMarkPart] : config[prop];\n\n if (prop === 'view') {\n toProp = 'cell'; // View's default style is \"cell\"\n }\n\n const style: MarkConfig = {\n ...propConfig,\n ...(config.style[toProp ?? prop] as MarkConfig)\n };\n\n // set config.style if it is not an empty object\n if (!isEmpty(style)) {\n config.style[toProp ?? prop] = style;\n }\n\n if (!compositeMarkPart) {\n // For composite mark, so don't delete the whole config yet as we have to do multiple redirections.\n delete config[prop];\n }\n}\n","import {Field} from '../channeldef';\nimport {SharedCompositeEncoding} from '../compositemark';\nimport {ExprRef} from '../expr';\nimport {Projection} from '../projection';\nimport {BaseSpec, FrameMixins, ResolveMixins} from './base';\nimport {GenericUnitSpec, NormalizedUnitSpec, UnitSpec} from './unit';\n\n/**\n * Base interface for a layer specification.\n */\nexport interface GenericLayerSpec> extends BaseSpec, FrameMixins, ResolveMixins {\n /**\n * Layer or single view specifications to be layered.\n *\n * __Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.\n */\n layer: (GenericLayerSpec | U)[];\n}\n\n/**\n * A full layered plot specification, which may contains `encoding` and `projection` properties that will be applied to underlying unit (single-view) specifications.\n */\nexport interface LayerSpec extends BaseSpec, FrameMixins, ResolveMixins {\n /**\n * Layer or single view specifications to be layered.\n *\n * __Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.\n */\n layer: (LayerSpec | UnitSpec)[];\n\n /**\n * A shared key-value mapping between encoding channels and definition of fields in the underlying layers.\n */\n encoding?: SharedCompositeEncoding;\n\n /**\n * An object defining properties of the geographic projection shared by underlying layers.\n */\n projection?: Projection;\n}\n\n/**\n * A layered specification without any shortcut/expansion syntax.\n */\nexport type NormalizedLayerSpec = GenericLayerSpec;\n\nexport function isLayerSpec(spec: BaseSpec): spec is GenericLayerSpec {\n return 'layer' in spec;\n}\n","import {GenericSpec} from '.';\nimport * as log from '../log';\nimport {Field, FieldName} from '../channeldef';\nimport {\n GenericConcatSpec,\n GenericHConcatSpec,\n GenericVConcatSpec,\n isConcatSpec,\n isHConcatSpec,\n isVConcatSpec\n} from './concat';\nimport {GenericFacetSpec, isFacetSpec} from './facet';\nimport {GenericLayerSpec, isLayerSpec} from './layer';\nimport {isRepeatSpec, RepeatSpec} from './repeat';\nimport {GenericUnitSpec, isUnitSpec, NormalizedUnitSpec} from './unit';\n\nexport abstract class SpecMapper<\n P,\n UI extends GenericUnitSpec,\n LI extends GenericLayerSpec = GenericLayerSpec,\n UO extends GenericUnitSpec = NormalizedUnitSpec,\n RO extends RepeatSpec = never,\n FO extends Field = FieldName\n> {\n public map(spec: GenericSpec, params: P): GenericSpec, RO, FO> {\n if (isFacetSpec(spec)) {\n return this.mapFacet(spec, params);\n } else if (isRepeatSpec(spec)) {\n return this.mapRepeat(spec, params);\n } else if (isHConcatSpec(spec)) {\n return this.mapHConcat(spec, params);\n } else if (isVConcatSpec(spec)) {\n return this.mapVConcat(spec, params);\n } else if (isConcatSpec(spec)) {\n return this.mapConcat(spec, params);\n } else {\n return this.mapLayerOrUnit(spec, params);\n }\n }\n\n public mapLayerOrUnit(spec: UI | LI, params: P): UO | GenericLayerSpec {\n if (isLayerSpec(spec)) {\n return this.mapLayer(spec, params);\n } else if (isUnitSpec(spec)) {\n return this.mapUnit(spec, params);\n }\n throw new Error(log.message.invalidSpec(spec));\n }\n\n public abstract mapUnit(spec: UI, params: P): UO | GenericLayerSpec;\n\n protected mapLayer(spec: LI, params: P): GenericLayerSpec {\n return {\n ...spec,\n layer: spec.layer.map(subspec => this.mapLayerOrUnit(subspec, params))\n };\n }\n\n protected mapHConcat(\n spec: GenericHConcatSpec>,\n params: P\n ): GenericHConcatSpec, RO, FO>> {\n return {\n ...spec,\n hconcat: spec.hconcat.map(subspec => this.map(subspec, params))\n };\n }\n\n protected mapVConcat(\n spec: GenericVConcatSpec>,\n params: P\n ): GenericVConcatSpec, RO, FO>> {\n return {\n ...spec,\n vconcat: spec.vconcat.map(subspec => this.map(subspec, params))\n };\n }\n\n protected mapConcat(\n spec: GenericConcatSpec>,\n params: P\n ): GenericConcatSpec, RO, FO>> {\n const {concat, ...rest} = spec;\n\n return {\n ...rest,\n concat: concat.map(subspec => this.map(subspec, params))\n };\n }\n\n protected mapFacet(spec: GenericFacetSpec, params: P): GenericFacetSpec, FO> {\n return {\n // as any is required here since TS cannot infer that FO may only be FieldName or Field, but not RepeatRef\n ...(spec as any),\n // TODO: remove \"any\" once we support all facet listed in https://github.com/vega/vega-lite/issues/2760\n spec: this.map(spec.spec, params) as any\n };\n }\n\n protected mapRepeat(spec: RepeatSpec, params: P): GenericSpec {\n return {\n ...spec,\n // as any is required here since TS cannot infer that the output type satisfies the input type\n spec: this.map(spec.spec as any, params)\n };\n }\n}\n","import {isArray} from 'vega-util';\nimport {LayerSpec, NonNormalizedSpec} from '.';\nimport {Field} from '../channeldef';\nimport {BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins} from './base';\nimport {UnitSpec} from './unit';\n\nexport interface RepeatMapping {\n /**\n * An array of fields to be repeated vertically.\n */\n row?: string[];\n\n /**\n * An array of fields to be repeated horizontally.\n */\n column?: string[];\n}\n\nexport interface LayerRepeatMapping extends RepeatMapping {\n /**\n * An array of fields to be repeated as layers.\n */\n layer: string[];\n}\n\nexport type RepeatSpec = NonLayerRepeatSpec | LayerRepeatSpec;\n\n/**\n * Base interface for a repeat specification.\n */\nexport interface NonLayerRepeatSpec extends BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins {\n /**\n * Definition for fields to be repeated. One of:\n * 1) An array of fields to be repeated. If `\"repeat\"` is an array, the field can be referred to as `{\"repeat\": \"repeat\"}`. The repeated views are laid out in a wrapped row. You can set the number of columns to control the wrapping.\n * 2) An object that maps `\"row\"` and/or `\"column\"` to the listed fields to be repeated along the particular orientations. The objects `{\"repeat\": \"row\"}` and `{\"repeat\": \"column\"}` can be used to refer to the repeated field respectively.\n */\n repeat: string[] | RepeatMapping;\n\n /**\n * A specification of the view that gets repeated.\n */\n spec: NonNormalizedSpec;\n}\n\nexport interface LayerRepeatSpec extends BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins {\n /**\n * Definition for fields to be repeated. One of:\n * 1) An array of fields to be repeated. If `\"repeat\"` is an array, the field can be referred to as `{\"repeat\": \"repeat\"}`. The repeated views are laid out in a wrapped row. You can set the number of columns to control the wrapping.\n * 2) An object that maps `\"row\"` and/or `\"column\"` to the listed fields to be repeated along the particular orientations. The objects `{\"repeat\": \"row\"}` and `{\"repeat\": \"column\"}` can be used to refer to the repeated field respectively.\n */\n repeat: LayerRepeatMapping;\n\n /**\n * A specification of the view that gets repeated.\n */\n spec: LayerSpec | UnitSpec;\n}\n\nexport function isRepeatSpec(spec: BaseSpec): spec is RepeatSpec {\n return 'repeat' in spec;\n}\n\nexport function isLayerRepeatSpec(spec: RepeatSpec): spec is LayerRepeatSpec {\n return !isArray(spec.repeat) && spec.repeat['layer'];\n}\n","import {array, isBoolean} from 'vega-util';\nimport {SUM_OPS} from './aggregate';\nimport {getSecondaryRangeChannel, NonPositionChannel, NONPOSITION_CHANNELS} from './channel';\nimport {\n channelDefType,\n FieldName,\n getFieldDef,\n isFieldDef,\n isFieldOrDatumDef,\n PositionDatumDef,\n PositionFieldDef,\n TypedFieldDef,\n vgField\n} from './channeldef';\nimport {channelHasField, Encoding, isAggregate} from './encoding';\nimport * as log from './log';\nimport {\n ARC,\n AREA,\n BAR,\n CIRCLE,\n isMarkDef,\n isPathMark,\n LINE,\n Mark,\n MarkDef,\n POINT,\n RULE,\n SQUARE,\n TEXT,\n TICK\n} from './mark';\nimport {ScaleType} from './scale';\nimport {contains} from './util';\n\nconst STACK_OFFSET_INDEX = {\n zero: 1,\n center: 1,\n normalize: 1\n} as const;\n\nexport type StackOffset = keyof typeof STACK_OFFSET_INDEX;\n\nexport function isStackOffset(s: string): s is StackOffset {\n return s in STACK_OFFSET_INDEX;\n}\n\nexport interface StackProperties {\n /** Dimension axis of the stack. */\n groupbyChannel?: 'x' | 'y' | 'theta' | 'radius';\n\n /** Field for groupbyChannel. */\n groupbyField?: FieldName;\n\n /** Measure axis of the stack. */\n fieldChannel: 'x' | 'y' | 'theta' | 'radius';\n\n /** Stack-by fields e.g., color, detail */\n stackBy: {\n fieldDef: TypedFieldDef;\n channel: NonPositionChannel;\n }[];\n\n /**\n * See `stack` property of Position Field Def.\n */\n offset: StackOffset;\n\n /**\n * Whether this stack will produce impute transform\n */\n impute: boolean;\n}\n\nexport const STACKABLE_MARKS = new Set([ARC, BAR, AREA, RULE, POINT, CIRCLE, SQUARE, LINE, TEXT, TICK]);\nexport const STACK_BY_DEFAULT_MARKS = new Set([BAR, AREA, ARC]);\n\nfunction potentialStackedChannel(\n encoding: Encoding,\n x: 'x' | 'theta'\n): 'x' | 'y' | 'theta' | 'radius' | undefined {\n const y = x === 'x' ? 'y' : 'radius';\n\n const xDef = encoding[x];\n const yDef = encoding[y];\n\n if (isFieldDef(xDef) && isFieldDef(yDef)) {\n if (channelDefType(xDef) === 'quantitative' && channelDefType(yDef) === 'quantitative') {\n if (xDef.stack) {\n return x;\n } else if (yDef.stack) {\n return y;\n }\n const xAggregate = isFieldDef(xDef) && !!xDef.aggregate;\n const yAggregate = isFieldDef(yDef) && !!yDef.aggregate;\n // if there is no explicit stacking, only apply stack if there is only one aggregate for x or y\n if (xAggregate !== yAggregate) {\n return xAggregate ? x : y;\n } else {\n const xScale = xDef.scale?.type;\n const yScale = yDef.scale?.type;\n\n if (xScale && xScale !== 'linear') {\n return y;\n } else if (yScale && yScale !== 'linear') {\n return x;\n }\n }\n } else if (channelDefType(xDef) === 'quantitative') {\n return x;\n } else if (channelDefType(yDef) === 'quantitative') {\n return y;\n }\n } else if (channelDefType(xDef) === 'quantitative') {\n return x;\n } else if (channelDefType(yDef) === 'quantitative') {\n return y;\n }\n return undefined;\n}\n\nfunction getDimensionChannel(channel: 'x' | 'y' | 'theta' | 'radius') {\n switch (channel) {\n case 'x':\n return 'y';\n case 'y':\n return 'x';\n case 'theta':\n return 'radius';\n case 'radius':\n return 'theta';\n }\n}\n\n// Note: CompassQL uses this method and only pass in required properties of each argument object.\n// If required properties change, make sure to update CompassQL.\nexport function stack(\n m: Mark | MarkDef,\n encoding: Encoding,\n opt: {\n disallowNonLinearStack?: boolean; // This option is for CompassQL\n } = {}\n): StackProperties {\n const mark = isMarkDef(m) ? m.type : m;\n // Should have stackable mark\n if (!STACKABLE_MARKS.has(mark)) {\n return null;\n }\n\n // Run potential stacked twice, one for Cartesian and another for Polar,\n // so text marks can be stacked in any of the coordinates.\n\n // Note: The logic here is not perfectly correct. If we want to support stacked dot plots where each dot is a pie chart with label, we have to change the stack logic here to separate Cartesian stacking for polar stacking.\n // However, since we probably never want to do that, let's just note the limitation here.\n const fieldChannel = potentialStackedChannel(encoding, 'x') || potentialStackedChannel(encoding, 'theta');\n\n if (!fieldChannel) {\n return null;\n }\n\n const stackedFieldDef = encoding[fieldChannel] as PositionFieldDef | PositionDatumDef;\n const stackedField = isFieldDef(stackedFieldDef) ? vgField(stackedFieldDef, {}) : undefined;\n\n let dimensionChannel: 'x' | 'y' | 'theta' | 'radius' = getDimensionChannel(fieldChannel);\n let dimensionDef = encoding[dimensionChannel];\n\n let dimensionField = isFieldDef(dimensionDef) ? vgField(dimensionDef, {}) : undefined;\n\n // avoid grouping by the stacked field\n if (dimensionField === stackedField) {\n dimensionField = undefined;\n dimensionDef = undefined;\n dimensionChannel = undefined;\n }\n\n // Should have grouping level of detail that is different from the dimension field\n const stackBy = NONPOSITION_CHANNELS.reduce((sc, channel) => {\n // Ignore tooltip in stackBy (https://github.com/vega/vega-lite/issues/4001)\n if (channel !== 'tooltip' && channelHasField(encoding, channel)) {\n const channelDef = encoding[channel];\n for (const cDef of array(channelDef)) {\n const fieldDef = getFieldDef(cDef);\n if (fieldDef.aggregate) {\n continue;\n }\n\n // Check whether the channel's field is identical to x/y's field or if the channel is a repeat\n const f = vgField(fieldDef, {});\n if (\n // if fielddef is a repeat, just include it in the stack by\n !f ||\n // otherwise, the field must be different from x and y fields.\n f !== dimensionField\n ) {\n sc.push({channel, fieldDef});\n }\n }\n }\n return sc;\n }, []);\n\n // Automatically determine offset\n let offset: StackOffset;\n if (stackedFieldDef.stack !== undefined) {\n if (isBoolean(stackedFieldDef.stack)) {\n offset = stackedFieldDef.stack ? 'zero' : null;\n } else {\n offset = stackedFieldDef.stack;\n }\n } else if (STACK_BY_DEFAULT_MARKS.has(mark)) {\n offset = 'zero';\n }\n\n if (!offset || !isStackOffset(offset)) {\n return null;\n }\n\n if (isAggregate(encoding) && stackBy.length === 0) {\n return null;\n }\n\n // warn when stacking non-linear\n if (stackedFieldDef?.scale?.type && stackedFieldDef?.scale?.type !== ScaleType.LINEAR) {\n if (opt.disallowNonLinearStack) {\n return null;\n } else {\n log.warn(log.message.cannotStackNonLinearScale(stackedFieldDef.scale.type));\n }\n }\n\n // Check if it is a ranged mark\n if (isFieldOrDatumDef(encoding[getSecondaryRangeChannel(fieldChannel)])) {\n if (stackedFieldDef.stack !== undefined) {\n log.warn(log.message.cannotStackRangedMark(fieldChannel));\n }\n return null;\n }\n\n // Warn if stacking non-summative aggregate\n if (isFieldDef(stackedFieldDef) && stackedFieldDef.aggregate && !contains(SUM_OPS, stackedFieldDef.aggregate)) {\n log.warn(log.message.stackNonSummativeAggregate(stackedFieldDef.aggregate));\n }\n\n return {\n groupbyChannel: dimensionDef ? dimensionChannel : undefined,\n groupbyField: dimensionField,\n fieldChannel,\n impute: stackedFieldDef.impute === null ? false : isPathMark(mark),\n stackBy,\n offset\n };\n}\n","import {SignalRef} from 'vega';\nimport {isObject} from 'vega-util';\nimport {Config} from '../config';\nimport {Encoding, normalizeEncoding} from '../encoding';\nimport {ExprRef} from '../expr';\nimport {AreaConfig, isMarkDef, LineConfig, Mark, MarkConfig, MarkDef} from '../mark';\nimport {GenericUnitSpec, NormalizedUnitSpec} from '../spec';\nimport {isUnitSpec} from '../spec/unit';\nimport {stack} from '../stack';\nimport {keys, omit, pick} from '../util';\nimport {NonFacetUnitNormalizer, NormalizeLayerOrUnit, NormalizerParams} from './base';\n\ntype UnitSpecWithPathOverlay = GenericUnitSpec, Mark | MarkDef<'line' | 'area' | 'rule' | 'trail'>>;\n\nfunction dropLineAndPoint(markDef: MarkDef): MarkDef | Mark {\n const {point: _point, line: _line, ...mark} = markDef;\n\n return keys(mark).length > 1 ? mark : mark.type;\n}\n\nfunction dropLineAndPointFromConfig(config: Config) {\n for (const mark of ['line', 'area', 'rule', 'trail'] as const) {\n if (config[mark]) {\n config = {\n ...config,\n // TODO: remove as any\n [mark]: omit(config[mark], ['point', 'line'] as any)\n };\n }\n }\n return config;\n}\n\nfunction getPointOverlay(\n markDef: MarkDef,\n markConfig: LineConfig = {},\n encoding: Encoding\n): MarkConfig {\n if (markDef.point === 'transparent') {\n return {opacity: 0};\n } else if (markDef.point) {\n // truthy : true or object\n return isObject(markDef.point) ? markDef.point : {};\n } else if (markDef.point !== undefined) {\n // false or null\n return null;\n } else {\n // undefined (not disabled)\n if (markConfig.point || encoding.shape) {\n // enable point overlay if config[mark].point is truthy or if encoding.shape is provided\n return isObject(markConfig.point) ? markConfig.point : {};\n }\n // markDef.point is defined as falsy\n return undefined;\n }\n}\n\nfunction getLineOverlay(\n markDef: MarkDef,\n markConfig: AreaConfig = {}\n): MarkConfig {\n if (markDef.line) {\n // true or object\n return markDef.line === true ? {} : markDef.line;\n } else if (markDef.line !== undefined) {\n // false or null\n return null;\n } else {\n // undefined (not disabled)\n if (markConfig.line) {\n // enable line overlay if config[mark].line is truthy\n return markConfig.line === true ? {} : markConfig.line;\n }\n // markDef.point is defined as falsy\n return undefined;\n }\n}\n\nexport class PathOverlayNormalizer implements NonFacetUnitNormalizer {\n public name = 'path-overlay';\n\n public hasMatchingType(spec: GenericUnitSpec, config: Config): spec is UnitSpecWithPathOverlay {\n if (isUnitSpec(spec)) {\n const {mark, encoding} = spec;\n const markDef = isMarkDef(mark) ? mark : {type: mark};\n switch (markDef.type) {\n case 'line':\n case 'rule':\n case 'trail':\n return !!getPointOverlay(markDef, config[markDef.type], encoding);\n case 'area':\n return (\n // false / null are also included as we want to remove the properties\n !!getPointOverlay(markDef, config[markDef.type], encoding) ||\n !!getLineOverlay(markDef, config[markDef.type])\n );\n }\n }\n return false;\n }\n\n public run(spec: UnitSpecWithPathOverlay, normParams: NormalizerParams, normalize: NormalizeLayerOrUnit) {\n const {config} = normParams;\n const {params, projection, mark, encoding: e, ...outerSpec} = spec;\n\n // Need to call normalizeEncoding because we need the inferred types to correctly determine stack\n const encoding = normalizeEncoding(e, config);\n\n const markDef: MarkDef = isMarkDef(mark) ? mark : {type: mark};\n\n const pointOverlay = getPointOverlay(markDef, config[markDef.type], encoding);\n const lineOverlay = markDef.type === 'area' && getLineOverlay(markDef, config[markDef.type]);\n\n const layer: NormalizedUnitSpec[] = [\n {\n ...(params ? {params} : {}),\n mark: dropLineAndPoint({\n // TODO: extract this 0.7 to be shared with default opacity for point/tick/...\n ...(markDef.type === 'area' && markDef.opacity === undefined && markDef.fillOpacity === undefined\n ? {opacity: 0.7}\n : {}),\n ...markDef\n }),\n // drop shape from encoding as this might be used to trigger point overlay\n encoding: omit(encoding, ['shape'])\n }\n ];\n\n // FIXME: determine rules for applying selections.\n\n // Need to copy stack config to overlayed layer\n const stackProps = stack(markDef, encoding);\n\n let overlayEncoding = encoding;\n if (stackProps) {\n const {fieldChannel: stackFieldChannel, offset} = stackProps;\n overlayEncoding = {\n ...encoding,\n [stackFieldChannel]: {\n ...encoding[stackFieldChannel],\n ...(offset ? {stack: offset} : {})\n }\n };\n }\n\n if (lineOverlay) {\n layer.push({\n ...(projection ? {projection} : {}),\n mark: {\n type: 'line',\n ...pick(markDef, ['clip', 'interpolate', 'tension', 'tooltip']),\n ...lineOverlay\n },\n encoding: overlayEncoding\n });\n }\n if (pointOverlay) {\n layer.push({\n ...(projection ? {projection} : {}),\n mark: {\n type: 'point',\n opacity: 1,\n filled: true,\n ...pick(markDef, ['clip', 'tooltip']),\n ...pointOverlay\n },\n encoding: overlayEncoding\n });\n }\n\n return normalize(\n {\n ...outerSpec,\n layer\n },\n {\n ...normParams,\n config: dropLineAndPointFromConfig(config)\n }\n );\n }\n}\n","import {hasOwnProperty, isArray} from 'vega-util';\nimport {\n ChannelDef,\n DatumDef,\n Field,\n FieldDef,\n FieldName,\n hasConditionalFieldOrDatumDef,\n isConditionalDef,\n isFieldDef,\n isFieldOrDatumDef,\n isRepeatRef,\n isSortableFieldDef,\n ScaleFieldDef,\n ValueDef\n} from '../channeldef';\nimport {Encoding} from '../encoding';\nimport * as log from '../log';\nimport {isSortField} from '../sort';\nimport {FacetFieldDef, FacetMapping, isFacetMapping} from '../spec/facet';\n\nexport interface RepeaterValue {\n row?: string;\n column?: string;\n\n repeat?: string;\n\n layer?: string;\n}\n\nexport function replaceRepeaterInFacet(\n facet: FacetFieldDef | FacetMapping,\n repeater: RepeaterValue\n): FacetFieldDef | FacetMapping {\n if (!repeater) {\n return facet as FacetFieldDef;\n }\n\n if (isFacetMapping(facet)) {\n return replaceRepeaterInMapping(facet, repeater) as FacetMapping;\n }\n return replaceRepeaterInFieldDef(facet, repeater) as FacetFieldDef;\n}\n\nexport function replaceRepeaterInEncoding>(\n encoding: E,\n repeater: RepeaterValue\n): Encoding {\n if (!repeater) {\n return encoding as Encoding;\n }\n\n return replaceRepeaterInMapping(encoding, repeater) as Encoding;\n}\n\n/**\n * Replaces repeated value and returns if the repeated value is valid.\n */\nfunction replaceRepeatInProp(prop: keyof T, o: T, repeater: RepeaterValue): T {\n const val = o[prop];\n if (isRepeatRef(val)) {\n if (val.repeat in repeater) {\n return {...o, [prop]: repeater[val.repeat]};\n } else {\n log.warn(log.message.noSuchRepeatedValue(val.repeat));\n return undefined;\n }\n }\n return o;\n}\n\n/**\n * Replace repeater values in a field def with the concrete field name.\n */\n\nfunction replaceRepeaterInFieldDef(fieldDef: FieldDef, repeater: RepeaterValue) {\n fieldDef = replaceRepeatInProp('field', fieldDef, repeater);\n\n if (fieldDef === undefined) {\n // the field def should be ignored\n return undefined;\n } else if (fieldDef === null) {\n return null;\n }\n\n if (isSortableFieldDef(fieldDef) && isSortField(fieldDef.sort)) {\n const sort = replaceRepeatInProp('field', fieldDef.sort, repeater);\n fieldDef = {\n ...fieldDef,\n ...(sort ? {sort} : {})\n };\n }\n\n return fieldDef as ScaleFieldDef;\n}\n\nfunction replaceRepeaterInFieldOrDatumDef(def: FieldDef | DatumDef, repeater: RepeaterValue) {\n if (isFieldDef(def)) {\n return replaceRepeaterInFieldDef(def, repeater);\n } else {\n const datumDef = replaceRepeatInProp('datum', def, repeater);\n if (datumDef !== def && !datumDef.type) {\n datumDef.type = 'nominal';\n }\n return datumDef;\n }\n}\n\nfunction replaceRepeaterInChannelDef(channelDef: ChannelDef, repeater: RepeaterValue) {\n if (isFieldOrDatumDef(channelDef)) {\n const fd = replaceRepeaterInFieldOrDatumDef(channelDef, repeater);\n if (fd) {\n return fd;\n } else if (isConditionalDef>(channelDef)) {\n return {condition: channelDef.condition};\n }\n } else {\n if (hasConditionalFieldOrDatumDef(channelDef)) {\n const fd = replaceRepeaterInFieldOrDatumDef(channelDef.condition, repeater);\n if (fd) {\n return {\n ...channelDef,\n condition: fd\n } as ChannelDef;\n } else {\n const {condition, ...channelDefWithoutCondition} = channelDef;\n return channelDefWithoutCondition as ChannelDef;\n }\n }\n return channelDef as ValueDef;\n }\n return undefined;\n}\n\ntype EncodingOrFacet = Encoding | FacetMapping;\n\nfunction replaceRepeaterInMapping(\n mapping: EncodingOrFacet,\n repeater: RepeaterValue\n): EncodingOrFacet {\n const out: EncodingOrFacet = {};\n for (const channel in mapping) {\n if (hasOwnProperty(mapping, channel)) {\n const channelDef: ChannelDef | ChannelDef[] = mapping[channel];\n\n if (isArray(channelDef)) {\n // array cannot have condition\n out[channel] = (channelDef as ChannelDef[]) // somehow we need to cast it here\n .map(cd => replaceRepeaterInChannelDef(cd, repeater))\n .filter(cd => cd);\n } else {\n const cd = replaceRepeaterInChannelDef(channelDef, repeater);\n if (cd !== undefined) {\n out[channel] = cd;\n }\n }\n }\n }\n return out;\n}\n","import {isObject} from 'vega-util';\nimport {isBinned} from '../bin';\nimport {getMainRangeChannel, SECONDARY_RANGE_CHANNEL} from '../channel';\nimport {Field, isDatumDef, isFieldDef} from '../channeldef';\nimport {Encoding} from '../encoding';\nimport * as log from '../log';\nimport {isMarkDef} from '../mark';\nimport {GenericSpec} from '../spec';\nimport {GenericUnitSpec, isUnitSpec} from '../spec/unit';\nimport {NonFacetUnitNormalizer, NormalizeLayerOrUnit, NormalizerParams} from './base';\n\ninterface EncodingX2Mixins {\n x2: Encoding['x2'];\n}\n\ninterface EncodingY2Mixins {\n y2: Encoding['y2'];\n}\n\ntype RangedLineSpec = GenericUnitSpec & (EncodingX2Mixins | EncodingY2Mixins), 'line' | {mark: 'line'}>;\n\nexport class RuleForRangedLineNormalizer implements NonFacetUnitNormalizer {\n public name = 'RuleForRangedLine';\n\n public hasMatchingType(spec: GenericSpec): spec is RangedLineSpec {\n if (isUnitSpec(spec)) {\n const {encoding, mark} = spec;\n if (mark === 'line' || (isMarkDef(mark) && mark.type === 'line')) {\n for (const channel of SECONDARY_RANGE_CHANNEL) {\n const mainChannel = getMainRangeChannel(channel);\n const mainChannelDef = encoding[mainChannel];\n\n if (encoding[channel]) {\n if ((isFieldDef(mainChannelDef) && !isBinned(mainChannelDef.bin)) || isDatumDef(mainChannelDef)) {\n return true;\n }\n }\n }\n }\n }\n return false;\n }\n\n public run(spec: RangedLineSpec, params: NormalizerParams, normalize: NormalizeLayerOrUnit) {\n const {encoding, mark} = spec;\n log.warn(log.message.lineWithRange(!!encoding.x2, !!encoding.y2));\n\n console.log(mark);\n\n return normalize(\n {\n ...spec,\n mark: isObject(mark) ? {...mark, type: 'rule'} : 'rule'\n },\n params\n );\n }\n}\n","import {SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {COLUMN, FACET, ROW} from '../channel';\nimport {Field, FieldName, hasConditionalFieldOrDatumDef, isFieldOrDatumDef, isValueDef} from '../channeldef';\nimport {SharedCompositeEncoding} from '../compositemark';\nimport {boxPlotNormalizer} from '../compositemark/boxplot';\nimport {errorBandNormalizer} from '../compositemark/errorband';\nimport {errorBarNormalizer} from '../compositemark/errorbar';\nimport {channelHasField, Encoding} from '../encoding';\nimport {ExprRef} from '../expr';\nimport * as log from '../log';\nimport {Projection} from '../projection';\nimport {FacetedUnitSpec, GenericSpec, LayerSpec, UnitSpec} from '../spec';\nimport {GenericCompositionLayoutWithColumns} from '../spec/base';\nimport {GenericConcatSpec} from '../spec/concat';\nimport {\n FacetEncodingFieldDef,\n FacetFieldDef,\n FacetMapping,\n GenericFacetSpec,\n isFacetMapping,\n NormalizedFacetSpec\n} from '../spec/facet';\nimport {NormalizedSpec} from '../spec/index';\nimport {NormalizedLayerSpec} from '../spec/layer';\nimport {SpecMapper} from '../spec/map';\nimport {isLayerRepeatSpec, LayerRepeatSpec, NonLayerRepeatSpec, RepeatSpec} from '../spec/repeat';\nimport {isUnitSpec, NormalizedUnitSpec} from '../spec/unit';\nimport {isEmpty, keys, omit, varName} from '../util';\nimport {isSignalRef} from '../vega.schema';\nimport {NonFacetUnitNormalizer, NormalizerParams} from './base';\nimport {PathOverlayNormalizer} from './pathoverlay';\nimport {replaceRepeaterInEncoding, replaceRepeaterInFacet} from './repeater';\nimport {RuleForRangedLineNormalizer} from './ruleforrangedline';\n\nexport class CoreNormalizer extends SpecMapper, LayerSpec> {\n private nonFacetUnitNormalizers: NonFacetUnitNormalizer[] = [\n boxPlotNormalizer,\n errorBarNormalizer,\n errorBandNormalizer,\n new PathOverlayNormalizer(),\n new RuleForRangedLineNormalizer()\n ];\n\n public map(spec: GenericSpec, LayerSpec, RepeatSpec, Field>, params: NormalizerParams) {\n // Special handling for a faceted unit spec as it can return a facet spec, not just a layer or unit spec like a normal unit spec.\n if (isUnitSpec(spec)) {\n const hasRow = channelHasField(spec.encoding, ROW);\n const hasColumn = channelHasField(spec.encoding, COLUMN);\n const hasFacet = channelHasField(spec.encoding, FACET);\n\n if (hasRow || hasColumn || hasFacet) {\n return this.mapFacetedUnit(spec, params);\n }\n }\n\n return super.map(spec, params);\n }\n\n // This is for normalizing non-facet unit\n public mapUnit(spec: UnitSpec, params: NormalizerParams): NormalizedUnitSpec | NormalizedLayerSpec {\n const {parentEncoding, parentProjection} = params;\n\n const encoding = replaceRepeaterInEncoding(spec.encoding, params.repeater);\n\n const specWithReplacedEncoding = {\n ...spec,\n ...(encoding ? {encoding} : {})\n };\n\n if (parentEncoding || parentProjection) {\n return this.mapUnitWithParentEncodingOrProjection(specWithReplacedEncoding, params);\n }\n\n const normalizeLayerOrUnit = this.mapLayerOrUnit.bind(this);\n\n for (const unitNormalizer of this.nonFacetUnitNormalizers) {\n if (unitNormalizer.hasMatchingType(specWithReplacedEncoding, params.config)) {\n return unitNormalizer.run(specWithReplacedEncoding, params, normalizeLayerOrUnit);\n }\n }\n\n return specWithReplacedEncoding as NormalizedUnitSpec;\n }\n\n protected mapRepeat(\n spec: RepeatSpec,\n params: NormalizerParams\n ): GenericConcatSpec | NormalizedLayerSpec {\n if (isLayerRepeatSpec(spec)) {\n return this.mapLayerRepeat(spec, params);\n } else {\n return this.mapNonLayerRepeat(spec, params);\n }\n }\n\n private mapLayerRepeat(\n spec: LayerRepeatSpec,\n params: NormalizerParams\n ): GenericConcatSpec | NormalizedLayerSpec {\n const {repeat, spec: childSpec, ...rest} = spec;\n const {row, column, layer} = repeat;\n\n const {repeater = {}, repeaterPrefix = ''} = params;\n\n if (row || column) {\n return this.mapRepeat(\n {\n ...spec,\n repeat: {\n ...(row ? {row} : {}),\n ...(column ? {column} : {})\n },\n spec: {\n repeat: {layer},\n spec: childSpec\n }\n },\n params\n );\n } else {\n return {\n ...rest,\n layer: layer.map(layerValue => {\n const childRepeater = {\n ...repeater,\n layer: layerValue\n };\n\n const childName = `${(childSpec.name || '') + repeaterPrefix}child__layer_${varName(layerValue)}`;\n\n const child = this.mapLayerOrUnit(childSpec, {...params, repeater: childRepeater, repeaterPrefix: childName});\n child.name = childName;\n\n return child;\n })\n };\n }\n }\n\n private mapNonLayerRepeat(spec: NonLayerRepeatSpec, params: NormalizerParams): GenericConcatSpec {\n const {repeat, spec: childSpec, data, ...remainingProperties} = spec;\n\n if (!isArray(repeat) && spec.columns) {\n // is repeat with row/column\n spec = omit(spec, ['columns']);\n log.warn(log.message.columnsNotSupportByRowCol('repeat'));\n }\n\n const concat: NormalizedSpec[] = [];\n\n const {repeater = {}, repeaterPrefix = ''} = params;\n\n const row = (!isArray(repeat) && repeat.row) || [repeater ? repeater.row : null];\n const column = (!isArray(repeat) && repeat.column) || [repeater ? repeater.column : null];\n\n const repeatValues = (isArray(repeat) && repeat) || [repeater ? repeater.repeat : null];\n\n // cross product\n for (const repeatValue of repeatValues) {\n for (const rowValue of row) {\n for (const columnValue of column) {\n const childRepeater = {\n repeat: repeatValue,\n row: rowValue,\n column: columnValue,\n layer: repeater.layer\n };\n\n const childName =\n (childSpec.name || '') +\n repeaterPrefix +\n 'child__' +\n (isArray(repeat)\n ? `${varName(repeatValue)}`\n : (repeat.row ? `row_${varName(rowValue)}` : '') +\n (repeat.column ? `column_${varName(columnValue)}` : ''));\n\n const child = this.map(childSpec, {...params, repeater: childRepeater, repeaterPrefix: childName});\n child.name = childName;\n\n // we move data up\n concat.push(omit(child, ['data']) as NormalizedSpec);\n }\n }\n }\n\n const columns = isArray(repeat) ? spec.columns : repeat.column ? repeat.column.length : 1;\n return {\n data: childSpec.data ?? data, // data from child spec should have precedence\n align: 'all',\n ...remainingProperties,\n columns,\n concat\n };\n }\n\n protected mapFacet(\n spec: GenericFacetSpec, LayerSpec, Field>,\n params: NormalizerParams\n ): GenericFacetSpec {\n const {facet} = spec;\n\n if (isFacetMapping(facet) && spec.columns) {\n // is facet with row/column\n spec = omit(spec, ['columns']);\n log.warn(log.message.columnsNotSupportByRowCol('facet'));\n }\n\n return super.mapFacet(spec, params);\n }\n\n private mapUnitWithParentEncodingOrProjection(\n spec: FacetedUnitSpec,\n params: NormalizerParams\n ): NormalizedUnitSpec | NormalizedLayerSpec {\n const {encoding, projection} = spec;\n const {parentEncoding, parentProjection, config} = params;\n const mergedProjection = mergeProjection({parentProjection, projection});\n const mergedEncoding = mergeEncoding({\n parentEncoding,\n encoding: replaceRepeaterInEncoding(encoding, params.repeater)\n });\n\n return this.mapUnit(\n {\n ...spec,\n ...(mergedProjection ? {projection: mergedProjection} : {}),\n ...(mergedEncoding ? {encoding: mergedEncoding} : {})\n },\n {config}\n );\n }\n\n private mapFacetedUnit(spec: FacetedUnitSpec, normParams: NormalizerParams): NormalizedFacetSpec {\n // New encoding in the inside spec should not contain row / column\n // as row/column should be moved to facet\n const {row, column, facet, ...encoding} = spec.encoding;\n\n // Mark and encoding should be moved into the inner spec\n const {mark, width, projection, height, view, params, encoding: _, ...outerSpec} = spec;\n\n const {facetMapping, layout} = this.getFacetMappingAndLayout({row, column, facet}, normParams);\n\n const newEncoding = replaceRepeaterInEncoding(encoding, normParams.repeater);\n\n return this.mapFacet(\n {\n ...outerSpec,\n ...layout,\n\n // row / column has higher precedence than facet\n facet: facetMapping,\n spec: {\n ...(width ? {width} : {}),\n ...(height ? {height} : {}),\n ...(view ? {view} : {}),\n ...(projection ? {projection} : {}),\n mark,\n encoding: newEncoding,\n ...(params ? {params} : {})\n }\n },\n normParams\n );\n }\n\n private getFacetMappingAndLayout(\n facets: {\n row: FacetEncodingFieldDef;\n column: FacetEncodingFieldDef;\n facet: FacetEncodingFieldDef;\n },\n params: NormalizerParams\n ): {facetMapping: FacetMapping | FacetFieldDef; layout: GenericCompositionLayoutWithColumns} {\n const {row, column, facet} = facets;\n\n if (row || column) {\n if (facet) {\n log.warn(log.message.facetChannelDropped([...(row ? [ROW] : []), ...(column ? [COLUMN] : [])]));\n }\n\n const facetMapping = {};\n const layout = {};\n\n for (const channel of [ROW, COLUMN]) {\n const def = facets[channel];\n if (def) {\n const {align, center, spacing, columns, ...defWithoutLayout} = def;\n facetMapping[channel] = defWithoutLayout;\n\n for (const prop of ['align', 'center', 'spacing'] as const) {\n if (def[prop] !== undefined) {\n layout[prop] ??= {};\n layout[prop][channel] = def[prop];\n }\n }\n }\n }\n\n return {facetMapping, layout};\n } else {\n const {align, center, spacing, columns, ...facetMapping} = facet;\n return {\n facetMapping: replaceRepeaterInFacet(facetMapping, params.repeater),\n layout: {\n ...(align ? {align} : {}),\n ...(center ? {center} : {}),\n ...(spacing ? {spacing} : {}),\n ...(columns ? {columns} : {})\n }\n };\n }\n }\n\n public mapLayer(\n spec: LayerSpec,\n {parentEncoding, parentProjection, ...otherParams}: NormalizerParams\n ): NormalizedLayerSpec {\n // Special handling for extended layer spec\n\n const {encoding, projection, ...rest} = spec;\n const params: NormalizerParams = {\n ...otherParams,\n parentEncoding: mergeEncoding({parentEncoding, encoding, layer: true}),\n parentProjection: mergeProjection({parentProjection, projection})\n };\n return super.mapLayer(rest, params);\n }\n}\n\nfunction mergeEncoding({\n parentEncoding,\n encoding = {},\n layer\n}: {\n parentEncoding: SharedCompositeEncoding;\n encoding: SharedCompositeEncoding | Encoding;\n layer?: boolean;\n}): Encoding {\n let merged: any = {};\n if (parentEncoding) {\n const channels = new Set([...keys(parentEncoding), ...keys(encoding)]);\n for (const channel of channels) {\n const channelDef = encoding[channel];\n const parentChannelDef = parentEncoding[channel];\n\n if (isFieldOrDatumDef(channelDef)) {\n // Field/Datum Def can inherit properties from its parent\n // Note that parentChannelDef doesn't have to be a field/datum def if the channelDef is already one.\n const mergedChannelDef = {\n ...parentChannelDef,\n ...channelDef\n };\n merged[channel] = mergedChannelDef;\n } else if (hasConditionalFieldOrDatumDef(channelDef)) {\n merged[channel] = {\n ...channelDef,\n condition: {\n ...parentChannelDef,\n ...channelDef.condition\n }\n };\n } else if (channelDef || channelDef === null) {\n merged[channel] = channelDef;\n } else if (\n layer ||\n isValueDef(parentChannelDef) ||\n isSignalRef(parentChannelDef) ||\n isFieldOrDatumDef(parentChannelDef) ||\n isArray(parentChannelDef)\n ) {\n merged[channel] = parentChannelDef;\n }\n }\n } else {\n merged = encoding;\n }\n return !merged || isEmpty(merged) ? undefined : merged;\n}\n\nfunction mergeProjection(opt: {\n parentProjection: Projection;\n projection: Projection;\n}) {\n const {parentProjection, projection} = opt;\n if (parentProjection && projection) {\n log.warn(log.message.projectionOverridden({parentProjection, projection}));\n }\n return projection ?? parentProjection;\n}\n","import {AggregateOp} from 'vega';\nimport {BinParams} from './bin';\nimport {FieldName} from './channeldef';\nimport {Data} from './data';\nimport {ImputeParams} from './impute';\nimport {LogicalComposition, normalizeLogicalComposition} from './logical';\nimport {ParameterName} from './parameter';\nimport {normalizePredicate, Predicate} from './predicate';\nimport {SortField} from './sort';\nimport {TimeUnit, TimeUnitParams} from './timeunit';\n\nexport interface FilterTransform {\n /**\n * The `filter` property must be a predication definition, which can take one of the following forms:\n *\n * 1) an [expression](https://vega.github.io/vega-lite/docs/types.html#expression) string,\n * where `datum` can be used to refer to the current data object.\n * For example, `{filter: \"datum.b2 > 60\"}` would make the output data includes only items that have values in the field `b2` over 60.\n *\n * 2) one of the [field predicates](https://vega.github.io/vega-lite/docs/predicate.html#field-predicate):\n * [`equal`](https://vega.github.io/vega-lite/docs/predicate.html#field-equal-predicate),\n * [`lt`](https://vega.github.io/vega-lite/docs/predicate.html#lt-predicate),\n * [`lte`](https://vega.github.io/vega-lite/docs/predicate.html#lte-predicate),\n * [`gt`](https://vega.github.io/vega-lite/docs/predicate.html#gt-predicate),\n * [`gte`](https://vega.github.io/vega-lite/docs/predicate.html#gte-predicate),\n * [`range`](https://vega.github.io/vega-lite/docs/predicate.html#range-predicate),\n * [`oneOf`](https://vega.github.io/vega-lite/docs/predicate.html#one-of-predicate),\n * or [`valid`](https://vega.github.io/vega-lite/docs/predicate.html#valid-predicate),\n\n * 3) a [selection predicate](https://vega.github.io/vega-lite/docs/predicate.html#selection-predicate), which define the names of a selection that the data point should belong to (or a logical composition of selections).\n *\n * 4) a [logical composition](https://vega.github.io/vega-lite/docs/predicate.html#composition) of (1), (2), or (3).\n */\n filter: LogicalComposition;\n}\n\nexport function isFilter(t: Transform): t is FilterTransform {\n return 'filter' in t;\n}\n\nexport interface CalculateTransform {\n /**\n * A [expression](https://vega.github.io/vega-lite/docs/types.html#expression) string. Use the variable `datum` to refer to the current data object.\n */\n calculate: string;\n\n /**\n * The field for storing the computed formula value.\n */\n as: FieldName;\n}\n\nexport interface BinTransform {\n /**\n * An object indicating bin properties, or simply `true` for using default bin parameters.\n */\n bin: true | BinParams;\n\n /**\n * The data field to bin.\n */\n field: FieldName;\n\n /**\n * The output fields at which to write the start and end bin values.\n * This can be either a string or an array of strings with two elements denoting the name for the fields for bin start and bin end respectively.\n * If a single string (e.g., `\"val\"`) is provided, the end field will be `\"val_end\"`.\n */\n as: FieldName | FieldName[];\n}\n\nexport interface TimeUnitTransform {\n /**\n * The timeUnit.\n */\n timeUnit: TimeUnit | TimeUnitParams;\n\n /**\n * The data field to apply time unit.\n */\n field: FieldName;\n\n /**\n * The output field to write the timeUnit value.\n */\n as: FieldName;\n}\n\nexport interface AggregateTransform {\n /**\n * Array of objects that define fields to aggregate.\n */\n aggregate: AggregatedFieldDef[];\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n}\n\nexport interface AggregatedFieldDef {\n /**\n * The aggregation operation to apply to the fields (e.g., `\"sum\"`, `\"average\"`, or `\"count\"`).\n * See the [full list of supported aggregation operations](https://vega.github.io/vega-lite/docs/aggregate.html#ops)\n * for more information.\n */\n op: AggregateOp;\n\n /**\n * The data field for which to compute aggregate function. This is required for all aggregation operations except `\"count\"`.\n */\n field?: FieldName;\n\n /**\n * The output field names to use for each aggregated field.\n */\n as: FieldName;\n}\n\nexport interface StackTransform {\n /**\n * The field which is stacked.\n */\n stack: FieldName;\n /**\n * The data fields to group by.\n */\n groupby: FieldName[];\n /**\n * Mode for stacking marks. One of `\"zero\"` (default), `\"center\"`, or `\"normalize\"`.\n * The `\"zero\"` offset will stack starting at `0`. The `\"center\"` offset will center the stacks. The `\"normalize\"` offset will compute percentage values for each stack point, with output values in the range `[0,1]`.\n *\n * __Default value:__ `\"zero\"`\n */\n offset?: 'zero' | 'center' | 'normalize';\n /**\n * Field that determines the order of leaves in the stacked charts.\n */\n sort?: SortField[];\n /**\n * Output field names. This can be either a string or an array of strings with two elements denoting the name for the fields for stack start and stack end respectively.\n * If a single string(e.g., `\"val\"`) is provided, the end field will be `\"val_end\"`.\n */\n as: FieldName | [FieldName, FieldName];\n}\n\nexport type WindowOnlyOp =\n | 'row_number'\n | 'rank'\n | 'dense_rank'\n | 'percent_rank'\n | 'cume_dist'\n | 'ntile'\n | 'lag'\n | 'lead'\n | 'first_value'\n | 'last_value'\n | 'nth_value';\n\nexport interface WindowFieldDef {\n /**\n * The window or aggregation operation to apply within a window (e.g., `\"rank\"`, `\"lead\"`, `\"sum\"`, `\"average\"` or `\"count\"`). See the list of all supported operations [here](https://vega.github.io/vega-lite/docs/window.html#ops).\n */\n op: AggregateOp | WindowOnlyOp;\n\n /**\n * Parameter values for the window functions. Parameter values can be omitted for operations that do not accept a parameter.\n *\n * See the list of all supported operations and their parameters [here](https://vega.github.io/vega-lite/docs/transforms/window.html).\n */\n param?: number;\n\n /**\n * The data field for which to compute the aggregate or window function. This can be omitted for window functions that do not operate over a field such as `\"count\"`, `\"rank\"`, `\"dense_rank\"`.\n */\n field?: FieldName;\n\n /**\n * The output name for the window operation.\n */\n as: FieldName;\n}\n\nexport interface WindowTransform {\n /**\n * The definition of the fields in the window, and what calculations to use.\n */\n window: WindowFieldDef[];\n\n /**\n * A frame specification as a two-element array indicating how the sliding window should proceed. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. The default value is `[null, 0]`, indicating that the sliding window includes the current object and all preceding objects. The value `[-5, 5]` indicates that the window should include five objects preceding and five objects following the current object. Finally, `[null, null]` indicates that the window frame should always include all data objects. If you this frame and want to assign the same value to add objects, you can use the simpler [join aggregate transform](https://vega.github.io/vega-lite/docs/joinaggregate.html). The only operators affected are the aggregation operations and the `first_value`, `last_value`, and `nth_value` window operations. The other window operations are not affected by this.\n *\n * __Default value:__: `[null, 0]` (includes the current object and all preceding objects)\n */\n frame?: (null | number)[];\n\n /**\n * Indicates if the sliding window frame should ignore peer values (data that are considered identical by the sort criteria). The default is false, causing the window frame to expand to include all peer values. If set to true, the window frame will be defined by offset values only. This setting only affects those operations that depend on the window frame, namely aggregation operations and the first_value, last_value, and nth_value window operations.\n *\n * __Default value:__ `false`\n */\n ignorePeers?: boolean;\n\n /**\n * The data fields for partitioning the data objects into separate windows. If unspecified, all data points will be in a single window.\n */\n groupby?: FieldName[];\n\n /**\n * A sort field definition for sorting data objects within a window. If two data objects are considered equal by the comparator, they are considered \"peer\" values of equal rank. If sort is not specified, the order is undefined: data objects are processed in the order they are observed and none are considered peers (the ignorePeers parameter is ignored and treated as if set to `true`).\n */\n sort?: SortField[];\n}\n\nexport interface JoinAggregateFieldDef {\n /**\n * The aggregation operation to apply (e.g., `\"sum\"`, `\"average\"` or `\"count\"`). See the list of all supported operations [here](https://vega.github.io/vega-lite/docs/aggregate.html#ops).\n */\n op: AggregateOp;\n\n /**\n * The data field for which to compute the aggregate function. This can be omitted for functions that do not operate over a field such as `\"count\"`.\n */\n field?: FieldName;\n\n /**\n * The output name for the join aggregate operation.\n */\n as: FieldName;\n}\n\nexport interface JoinAggregateTransform {\n /**\n * The definition of the fields in the join aggregate, and what calculations to use.\n */\n joinaggregate: JoinAggregateFieldDef[];\n\n /**\n * The data fields for partitioning the data objects into separate groups. If unspecified, all data points will be in a single group.\n */\n groupby?: FieldName[];\n}\n\nexport interface ImputeSequence {\n /**\n * The starting value of the sequence.\n * __Default value:__ `0`\n */\n start?: number;\n /**\n * The ending value(exclusive) of the sequence.\n */\n stop: number;\n /**\n * The step value between sequence entries.\n * __Default value:__ `1` or `-1` if `stop < start`\n */\n step?: number;\n}\n\nexport function isImputeSequence(t: ImputeSequence | any[] | undefined): t is ImputeSequence {\n return t?.['stop'] !== undefined;\n}\n\nexport interface ImputeTransform extends ImputeParams {\n /**\n * The data field for which the missing values should be imputed.\n */\n impute: FieldName;\n\n /**\n * A key field that uniquely identifies data objects within a group.\n * Missing key values (those occurring in the data but not in the current group) will be imputed.\n */\n key: FieldName;\n\n /**\n * An optional array of fields by which to group the values.\n * Imputation will then be performed on a per-group basis.\n */\n groupby?: FieldName[];\n}\n\nexport interface FlattenTransform {\n /**\n * An array of one or more data fields containing arrays to flatten.\n * If multiple fields are specified, their array values should have a parallel structure, ideally with the same length.\n * If the lengths of parallel arrays do not match,\n * the longest array will be used with `null` values added for missing entries.\n */\n flatten: FieldName[];\n\n /**\n * The output field names for extracted array values.\n *\n * __Default value:__ The field name of the corresponding array field\n */\n as?: FieldName[];\n}\n\nexport interface SampleTransform {\n /**\n * The maximum number of data objects to include in the sample.\n *\n * __Default value:__ `1000`\n */\n sample: number;\n}\n\nexport interface LookupBase {\n /**\n * Key in data to lookup.\n */\n key: FieldName;\n /**\n * Fields in foreign data or selection to lookup.\n * If not specified, the entire object is queried.\n */\n fields?: FieldName[];\n}\n\nexport interface LookupData extends LookupBase {\n /**\n * Secondary data source to lookup in.\n */\n data: Data;\n}\n\nexport interface LookupSelection extends LookupBase {\n /**\n * Selection parameter name to look up.\n */\n param: ParameterName;\n}\n\nexport interface LookupTransform {\n /**\n * Key in primary data source.\n */\n lookup: string;\n\n /**\n * The output fields on which to store the looked up data values.\n *\n * For data lookups, this property may be left blank if `from.fields`\n * has been specified (those field names will be used); if `from.fields`\n * has not been specified, `as` must be a string.\n *\n * For selection lookups, this property is optional: if unspecified,\n * looked up values will be stored under a property named for the selection;\n * and if specified, it must correspond to `from.fields`.\n */\n as?: FieldName | FieldName[];\n\n /**\n * The default value to use if lookup fails.\n *\n * __Default value:__ `null`\n */\n default?: any;\n\n /**\n * Data source or selection for secondary data reference.\n */\n from: LookupData | LookupSelection;\n}\n\nexport function isLookup(t: Transform): t is LookupTransform {\n return 'lookup' in t;\n}\n\nexport function isLookupData(from: LookupData | LookupSelection): from is LookupData {\n return 'data' in from;\n}\n\nexport function isLookupSelection(from: LookupData | LookupSelection): from is LookupSelection {\n return 'param' in from;\n}\n\nexport interface FoldTransform {\n /**\n * An array of data fields indicating the properties to fold.\n */\n fold: FieldName[];\n\n /**\n * The output field names for the key and value properties produced by the fold transform.\n * __Default value:__ `[\"key\", \"value\"]`\n */\n as?: [FieldName, FieldName];\n}\n\nexport interface PivotTransform {\n /**\n * The data field to pivot on. The unique values of this field become new field names in the output stream.\n */\n pivot: FieldName;\n\n /**\n * The data field to populate pivoted fields. The aggregate values of this field become the values of the new pivoted fields.\n */\n value: FieldName;\n\n /**\n * The optional data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * An optional parameter indicating the maximum number of pivoted fields to generate.\n * The default (`0`) applies no limit. The pivoted `pivot` names are sorted in ascending order prior to enforcing the limit.\n * __Default value:__ `0`\n */\n limit?: number;\n\n /**\n * The aggregation operation to apply to grouped `value` field values.\n * __Default value:__ `sum`\n */\n op?: AggregateOp;\n}\n\nexport function isPivot(t: Transform): t is PivotTransform {\n return 'pivot' in t;\n}\n\nexport interface DensityTransform {\n /**\n * The data field for which to perform density estimation.\n */\n density: FieldName;\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * A boolean flag indicating whether to produce density estimates (false) or cumulative density estimates (true).\n *\n * __Default value:__ `false`\n */\n cumulative?: boolean;\n\n /**\n * A boolean flag indicating if the output values should be probability estimates (false) or smoothed counts (true).\n *\n * __Default value:__ `false`\n */\n counts?: boolean;\n\n /**\n * The bandwidth (standard deviation) of the Gaussian kernel. If unspecified or set to zero, the bandwidth value is automatically estimated from the input data using Scott’s rule.\n */\n bandwidth?: number;\n\n /**\n * A [min, max] domain from which to sample the distribution. If unspecified, the extent will be determined by the observed minimum and maximum values of the density value field.\n */\n extent?: [number, number];\n\n /**\n * The minimum number of samples to take along the extent domain for plotting the density.\n *\n * __Default value:__ `25`\n */\n minsteps?: number;\n\n /**\n * The maximum number of samples to take along the extent domain for plotting the density.\n *\n * __Default value:__ `200`\n */\n maxsteps?: number;\n\n /**\n * The exact number of samples to take along the extent domain for plotting the density. If specified, overrides both minsteps and maxsteps to set an exact number of uniform samples. Potentially useful in conjunction with a fixed extent to ensure consistent sample points for stacked densities.\n */\n steps?: number;\n\n /**\n * The output fields for the sample value and corresponding density estimate.\n *\n * __Default value:__ `[\"value\", \"density\"]`\n */\n as?: [FieldName, FieldName];\n}\n\nexport function isDensity(t: Transform): t is DensityTransform {\n return 'density' in t;\n}\n\nexport interface QuantileTransform {\n /**\n * The data field for which to perform quantile estimation.\n */\n quantile: FieldName;\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * An array of probabilities in the range (0, 1) for which to compute quantile values. If not specified, the *step* parameter will be used.\n */\n probs?: number[];\n\n /**\n * A probability step size (default 0.01) for sampling quantile values. All values from one-half the step size up to 1 (exclusive) will be sampled. This parameter is only used if the *probs* parameter is not provided.\n */\n step?: number;\n\n /**\n * The output field names for the probability and quantile values.\n *\n * __Default value:__ `[\"prob\", \"value\"]`\n */\n as?: [FieldName, FieldName];\n}\n\nexport function isQuantile(t: Transform): t is QuantileTransform {\n return 'quantile' in t;\n}\n\nexport interface RegressionTransform {\n /**\n * The data field of the dependent variable to predict.\n */\n regression: FieldName;\n\n /**\n * The data field of the independent variable to use a predictor.\n */\n on: FieldName;\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * The functional form of the regression model. One of `\"linear\"`, `\"log\"`, `\"exp\"`, `\"pow\"`, `\"quad\"`, or `\"poly\"`.\n *\n * __Default value:__ `\"linear\"`\n */\n method?: 'linear' | 'log' | 'exp' | 'pow' | 'quad' | 'poly';\n\n /**\n * The polynomial order (number of coefficients) for the 'poly' method.\n *\n * __Default value:__ `3`\n */\n order?: number;\n\n /**\n * A [min, max] domain over the independent (x) field for the starting and ending points of the generated trend line.\n */\n extent?: [number, number];\n\n /**\n * A boolean flag indicating if the transform should return the regression model parameters (one object per group), rather than trend line points.\n * The resulting objects include a `coef` array of fitted coefficient values (starting with the intercept term and then including terms of increasing order)\n * and an `rSquared` value (indicating the total variance explained by the model).\n *\n * __Default value:__ `false`\n */\n params?: boolean;\n\n /**\n * The output field names for the smoothed points generated by the regression transform.\n *\n * __Default value:__ The field names of the input x and y values.\n */\n as?: [FieldName, FieldName];\n}\n\nexport function isRegression(t: Transform): t is RegressionTransform {\n return 'regression' in t;\n}\n\nexport interface LoessTransform {\n /**\n * The data field of the dependent variable to smooth.\n */\n loess: FieldName;\n\n /**\n * The data field of the independent variable to use a predictor.\n */\n on: FieldName;\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * A bandwidth parameter in the range `[0, 1]` that determines the amount of smoothing.\n *\n * __Default value:__ `0.3`\n */\n bandwidth?: number;\n\n /**\n * The output field names for the smoothed points generated by the loess transform.\n *\n * __Default value:__ The field names of the input x and y values.\n */\n as?: [FieldName, FieldName];\n}\n\nexport function isLoess(t: Transform): t is LoessTransform {\n return 'loess' in t;\n}\n\nexport function isSample(t: Transform): t is SampleTransform {\n return 'sample' in t;\n}\n\nexport function isWindow(t: Transform): t is WindowTransform {\n return 'window' in t;\n}\n\nexport function isJoinAggregate(t: Transform): t is JoinAggregateTransform {\n return 'joinaggregate' in t;\n}\n\nexport function isFlatten(t: Transform): t is FlattenTransform {\n return 'flatten' in t;\n}\nexport function isCalculate(t: Transform): t is CalculateTransform {\n return 'calculate' in t;\n}\n\nexport function isBin(t: Transform): t is BinTransform {\n return 'bin' in t;\n}\n\nexport function isImpute(t: Transform): t is ImputeTransform {\n return 'impute' in t;\n}\n\nexport function isTimeUnit(t: Transform): t is TimeUnitTransform {\n return 'timeUnit' in t;\n}\n\nexport function isAggregate(t: Transform): t is AggregateTransform {\n return 'aggregate' in t;\n}\n\nexport function isStack(t: Transform): t is StackTransform {\n return 'stack' in t;\n}\n\nexport function isFold(t: Transform): t is FoldTransform {\n return 'fold' in t;\n}\n\nexport type Transform =\n | AggregateTransform\n | BinTransform\n | CalculateTransform\n | DensityTransform\n | FilterTransform\n | FlattenTransform\n | FoldTransform\n | ImputeTransform\n | JoinAggregateTransform\n | LoessTransform\n | LookupTransform\n | QuantileTransform\n | RegressionTransform\n | TimeUnitTransform\n | SampleTransform\n | StackTransform\n | WindowTransform\n | PivotTransform;\n\nexport function normalizeTransform(transform: Transform[]) {\n return transform.map(t => {\n if (isFilter(t)) {\n return {\n filter: normalizeLogicalComposition(t.filter, normalizePredicate)\n };\n }\n return t;\n });\n}\n","import {isArray} from 'vega';\nimport {BinParams, isBinParams} from '../bin';\nimport {ChannelDef, Field, isConditionalDef, isFieldDef, isScaleFieldDef} from '../channeldef';\nimport {LogicalComposition, normalizeLogicalComposition} from '../logical';\nimport {FacetedUnitSpec, GenericSpec, LayerSpec, RepeatSpec, UnitSpec} from '../spec';\nimport {SpecMapper} from '../spec/map';\nimport {isBin, isFilter, isLookup} from '../transform';\nimport {duplicate, entries, vals} from '../util';\nimport {NormalizerParams} from './base';\n\nexport class SelectionCompatibilityNormalizer extends SpecMapper<\n NormalizerParams,\n FacetedUnitSpec,\n LayerSpec,\n UnitSpec\n> {\n public map(\n spec: GenericSpec, LayerSpec, RepeatSpec, Field>,\n normParams: NormalizerParams\n ) {\n normParams.emptySelections ??= {};\n normParams.selectionPredicates ??= {};\n spec = normalizeTransforms(spec, normParams);\n return super.map(spec, normParams);\n }\n\n public mapLayerOrUnit(spec: FacetedUnitSpec | LayerSpec, normParams: NormalizerParams) {\n spec = normalizeTransforms(spec, normParams);\n\n if (spec.encoding) {\n const encoding = {};\n for (const [channel, enc] of entries(spec.encoding)) {\n encoding[channel] = normalizeChannelDef(enc, normParams);\n }\n\n spec = {...spec, encoding};\n }\n\n return super.mapLayerOrUnit(spec, normParams);\n }\n\n public mapUnit(spec: UnitSpec, normParams: NormalizerParams) {\n const {selection, ...rest} = spec as any;\n if (selection) {\n return {\n ...rest,\n params: entries(selection).map(([name, selDef]) => {\n const {init: value, bind, empty, ...select} = selDef as any;\n if (select.type === 'single') {\n select.type = 'point';\n select.toggle = false;\n } else if (select.type === 'multi') {\n select.type = 'point';\n }\n\n // Propagate emptiness forwards and backwards\n normParams.emptySelections[name] = empty !== 'none';\n for (const pred of vals(normParams.selectionPredicates[name] ?? {})) {\n pred.empty = empty !== 'none';\n }\n\n return {name, value, select, bind};\n })\n };\n }\n\n return spec;\n }\n}\n\nfunction normalizeTransforms(spec: any, normParams: NormalizerParams) {\n const {transform: tx, ...rest} = spec;\n if (tx) {\n const transform = tx.map((t: any) => {\n if (isFilter(t)) {\n return {filter: normalizePredicate(t, normParams)};\n } else if (isBin(t) && isBinParams(t.bin)) {\n return {\n ...t,\n bin: normalizeBinExtent(t.bin)\n };\n } else if (isLookup(t)) {\n const {selection: param, ...from} = t.from as any;\n return param\n ? {\n ...t,\n from: {param, ...from}\n }\n : t;\n }\n return t;\n });\n\n return {...rest, transform};\n }\n\n return spec;\n}\n\nfunction normalizeChannelDef(obj: any, normParams: NormalizerParams): ChannelDef {\n const enc = duplicate(obj);\n\n if (isFieldDef(enc) && isBinParams(enc.bin)) {\n enc.bin = normalizeBinExtent(enc.bin);\n }\n\n if (isScaleFieldDef(enc) && (enc.scale?.domain as any)?.selection) {\n const {selection: param, ...domain} = enc.scale.domain as any;\n enc.scale.domain = {...domain, ...(param ? {param} : {})};\n }\n\n if (isConditionalDef(enc)) {\n if (isArray(enc.condition)) {\n enc.condition = enc.condition.map((c: any) => {\n const {selection, param, test, ...cond} = c;\n return param ? c : {...cond, test: normalizePredicate(c, normParams)};\n });\n } else {\n const {selection, param, test, ...cond} = normalizeChannelDef(enc.condition, normParams) as any;\n enc.condition = param\n ? enc.condition\n : {\n ...cond,\n test: normalizePredicate(enc.condition, normParams)\n };\n }\n }\n\n return enc;\n}\n\nfunction normalizeBinExtent(bin: BinParams): BinParams {\n const ext = bin.extent as any;\n if (ext?.selection) {\n const {selection: param, ...rest} = ext;\n return {...bin, extent: {...rest, param}};\n }\n\n return bin;\n}\n\nfunction normalizePredicate(op: any, normParams: NormalizerParams) {\n // Normalize old compositions of selection names (e.g., selection: {and: [\"one\", \"two\"]})\n const normalizeSelectionComposition = (o: LogicalComposition) => {\n return normalizeLogicalComposition(o, param => {\n const empty = normParams.emptySelections[param] ?? true;\n const pred = {param, empty};\n normParams.selectionPredicates[param] ??= [];\n normParams.selectionPredicates[param].push(pred);\n return pred as any;\n });\n };\n\n return op.selection\n ? normalizeSelectionComposition(op.selection)\n : normalizeLogicalComposition(op.test || op.filter, o =>\n o.selection ? normalizeSelectionComposition(o.selection) : o\n );\n}\n","import {isArray, isString} from 'vega';\nimport {Field} from '../channeldef';\nimport {VariableParameter} from '../parameter';\nimport {isSelectionParameter, SelectionParameter} from '../selection';\nimport {\n BaseSpec,\n isUnitSpec,\n NormalizedLayerSpec,\n NormalizedSpec,\n NormalizedUnitSpec,\n TopLevel,\n UnitSpec\n} from '../spec';\nimport {SpecMapper} from '../spec/map';\nimport {NormalizerParams} from './base';\n\nexport class TopLevelSelectionsNormalizer extends SpecMapper {\n public map(spec: TopLevel, normParams: NormalizerParams): TopLevel {\n const selections = normParams.selections ?? [];\n if (spec.params && !isUnitSpec(spec)) {\n const params: VariableParameter[] = [];\n for (const param of spec.params) {\n if (isSelectionParameter(param)) {\n selections.push(param);\n } else {\n params.push(param);\n }\n }\n\n spec.params = params;\n }\n\n normParams.selections = selections;\n return super.map(spec, addSpecNameToParams(spec, normParams));\n }\n\n public mapUnit(spec: UnitSpec, normParams: NormalizerParams): NormalizedUnitSpec | NormalizedLayerSpec {\n const selections = normParams.selections;\n if (!selections || !selections.length) return spec as NormalizedUnitSpec;\n\n const path = (normParams.path ?? []).concat(spec.name);\n const params: SelectionParameter[] = [];\n\n for (const selection of selections) {\n // By default, apply selections to all unit views.\n if (!selection.views || !selection.views.length) {\n params.push(selection);\n } else {\n for (const view of selection.views) {\n // view is either a specific unit name, or a partial path through the spec tree.\n if (\n (isString(view) && (view === spec.name || path.indexOf(view) >= 0)) ||\n (isArray(view) &&\n view.map(v => path.indexOf(v)).every((v, i, arr) => v !== -1 && (i === 0 || v > arr[i - 1])))\n ) {\n params.push(selection);\n }\n }\n }\n }\n\n if (params.length) spec.params = params;\n return spec as NormalizedUnitSpec;\n }\n}\n\nfor (const method of ['mapFacet', 'mapRepeat', 'mapHConcat', 'mapVConcat', 'mapLayer']) {\n const proto = TopLevelSelectionsNormalizer.prototype[method];\n TopLevelSelectionsNormalizer.prototype[method] = function (spec: BaseSpec, params: NormalizerParams) {\n return proto.call(this, spec, addSpecNameToParams(spec, params));\n };\n}\n\nfunction addSpecNameToParams(spec: BaseSpec, params: NormalizerParams) {\n return spec.name\n ? {\n ...params,\n path: (params.path ?? []).concat(spec.name)\n }\n : params;\n}\n","import {SignalRef} from 'vega';\nimport {isString} from 'vega-util';\nimport {Field} from '../channeldef';\nimport {Config, initConfig} from '../config';\nimport * as log from '../log';\nimport {\n FacetedUnitSpec,\n isLayerSpec,\n isUnitSpec,\n LayoutSizeMixins,\n NonNormalizedSpec,\n NormalizedSpec,\n RepeatSpec,\n TopLevelSpec\n} from '../spec';\nimport {AutoSizeParams, AutosizeType, TopLevel} from '../spec/toplevel';\nimport {deepEqual} from '../util';\nimport {NormalizerParams} from './base';\nimport {CoreNormalizer} from './core';\nimport {SelectionCompatibilityNormalizer} from './selectioncompat';\nimport {TopLevelSelectionsNormalizer} from './toplevelselection';\n\nexport function normalize(\n spec: TopLevelSpec & LayoutSizeMixins,\n config?: Config\n): TopLevel & LayoutSizeMixins {\n if (config === undefined) {\n config = initConfig(spec.config);\n }\n\n const normalizedSpec = normalizeGenericSpec(spec, config);\n\n const {width, height} = spec;\n const autosize = normalizeAutoSize(normalizedSpec, {width, height, autosize: spec.autosize}, config);\n\n return {\n ...normalizedSpec,\n ...(autosize ? {autosize} : {})\n };\n}\n\nconst coreNormalizer = new CoreNormalizer();\nconst selectionCompatNormalizer = new SelectionCompatibilityNormalizer();\nconst topLevelSelectionNormalizer = new TopLevelSelectionsNormalizer();\n\n/**\n * Decompose extended unit specs into composition of pure unit specs.\n * And push top-level selection definitions down to unit specs.\n */\nfunction normalizeGenericSpec(\n spec: NonNormalizedSpec | FacetedUnitSpec | RepeatSpec,\n config: Config = {}\n) {\n const normParams = {config};\n return topLevelSelectionNormalizer.map(\n coreNormalizer.map(selectionCompatNormalizer.map(spec, normParams), normParams),\n normParams\n );\n}\n\nfunction _normalizeAutoSize(autosize: AutosizeType | AutoSizeParams) {\n return isString(autosize) ? {type: autosize} : autosize ?? {};\n}\n\n/**\n * Normalize autosize and deal with width or height == \"container\".\n */\nexport function normalizeAutoSize(\n spec: TopLevel,\n sizeInfo: {autosize: AutosizeType | AutoSizeParams} & LayoutSizeMixins,\n config?: Config\n) {\n let {width, height} = sizeInfo;\n\n const isFitCompatible = isUnitSpec(spec) || isLayerSpec(spec);\n const autosizeDefault: AutoSizeParams = {};\n\n if (!isFitCompatible) {\n // If spec is not compatible with autosize == \"fit\", discard width/height == container\n if (width == 'container') {\n log.warn(log.message.containerSizeNonSingle('width'));\n width = undefined;\n }\n if (height == 'container') {\n log.warn(log.message.containerSizeNonSingle('height'));\n height = undefined;\n }\n } else {\n // Default autosize parameters to fit when width/height is \"container\"\n if (width == 'container' && height == 'container') {\n autosizeDefault.type = 'fit';\n autosizeDefault.contains = 'padding';\n } else if (width == 'container') {\n autosizeDefault.type = 'fit-x';\n autosizeDefault.contains = 'padding';\n } else if (height == 'container') {\n autosizeDefault.type = 'fit-y';\n autosizeDefault.contains = 'padding';\n }\n }\n\n const autosize: AutoSizeParams = {\n type: 'pad',\n ...autosizeDefault,\n ...(config ? _normalizeAutoSize(config.autosize) : {}),\n ..._normalizeAutoSize(spec.autosize)\n };\n\n if (autosize.type === 'fit' && !isFitCompatible) {\n log.warn(log.message.FIT_NON_SINGLE);\n autosize.type = 'pad';\n }\n\n if (width == 'container' && !(autosize.type == 'fit' || autosize.type == 'fit-x')) {\n log.warn(log.message.containerSizeNotCompatibleWithAutosize('width'));\n }\n if (height == 'container' && !(autosize.type == 'fit' || autosize.type == 'fit-y')) {\n log.warn(log.message.containerSizeNotCompatibleWithAutosize('height'));\n }\n\n // Delete autosize property if it's Vega's default\n if (deepEqual(autosize, {type: 'pad'})) {\n return undefined;\n }\n\n return autosize;\n}\n\nexport type {NormalizerParams};\n","import * as log from '../log';\nimport {deepEqual, duplicate, getFirstDefined, keys} from '../util';\n\n/**\n * Generic class for storing properties that are explicitly specified\n * and implicitly determined by the compiler.\n * This is important for scale/axis/legend merging as\n * we want to prioritize properties that users explicitly specified.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport class Split {\n constructor(public readonly explicit: Partial = {}, public readonly implicit: Partial = {}) {}\n\n public clone() {\n return new Split(duplicate(this.explicit), duplicate(this.implicit));\n }\n\n public combine(): Partial {\n return {\n ...this.explicit, // Explicit properties comes first\n ...this.implicit\n };\n }\n\n public get(key: K): T[K] {\n // Explicit has higher precedence\n return getFirstDefined(this.explicit[key], this.implicit[key]);\n }\n\n public getWithExplicit(key: K): Explicit {\n // Explicit has higher precedence\n if (this.explicit[key] !== undefined) {\n return {explicit: true, value: this.explicit[key]};\n } else if (this.implicit[key] !== undefined) {\n return {explicit: false, value: this.implicit[key]};\n }\n return {explicit: false, value: undefined};\n }\n\n public setWithExplicit(key: K, {value, explicit}: Explicit) {\n if (value !== undefined) {\n this.set(key, value, explicit);\n }\n }\n\n public set(key: K, value: T[K], explicit: boolean) {\n delete this[explicit ? 'implicit' : 'explicit'][key];\n this[explicit ? 'explicit' : 'implicit'][key] = value;\n return this;\n }\n\n public copyKeyFromSplit(key: keyof T, {explicit, implicit}: Split) {\n // Explicit has higher precedence\n if (explicit[key] !== undefined) {\n this.set(key, explicit[key], true);\n } else if (implicit[key] !== undefined) {\n this.set(key, implicit[key], false);\n }\n }\n public copyKeyFromObject(key: keyof T, s: Partial) {\n // Explicit has higher precedence\n if (s[key] !== undefined) {\n this.set(key, s[key], true);\n }\n }\n\n /**\n * Merge split object into this split object. Properties from the other split\n * overwrite properties from this split.\n */\n public copyAll(other: Split) {\n for (const key of keys(other.combine())) {\n const val = other.getWithExplicit(key);\n this.setWithExplicit(key, val);\n }\n }\n}\n\nexport interface Explicit {\n explicit: boolean;\n value: T;\n}\n\nexport function makeExplicit(value: T): Explicit {\n return {\n explicit: true,\n value\n };\n}\n\nexport function makeImplicit(value: T): Explicit {\n return {\n explicit: false,\n value\n };\n}\n\nexport type SplitParentProperty = 'scale' | 'axis' | 'legend' | '';\n\nexport function tieBreakByComparing(compare: (v1: T, v2: T) => number) {\n return (\n v1: Explicit,\n v2: Explicit,\n property: keyof S | never,\n propertyOf: SplitParentProperty\n ): Explicit => {\n const diff = compare(v1.value, v2.value);\n if (diff > 0) {\n return v1;\n } else if (diff < 0) {\n return v2;\n }\n return defaultTieBreaker(v1, v2, property, propertyOf);\n };\n}\n\nexport function defaultTieBreaker(\n v1: Explicit,\n v2: Explicit,\n property: keyof S,\n propertyOf: SplitParentProperty\n) {\n if (v1.explicit && v2.explicit) {\n log.warn(log.message.mergeConflictingProperty(property, propertyOf, v1.value, v2.value));\n }\n // If equal score, prefer v1.\n return v1;\n}\n\nexport function mergeValuesWithExplicit(\n v1: Explicit,\n v2: Explicit,\n property: keyof S,\n propertyOf: SplitParentProperty,\n tieBreaker: (\n v1: Explicit,\n v2: Explicit,\n property: keyof S,\n propertyOf: string\n ) => Explicit = defaultTieBreaker\n) {\n if (v1 === undefined || v1.value === undefined) {\n // For first run\n return v2;\n }\n\n if (v1.explicit && !v2.explicit) {\n return v1;\n } else if (v2.explicit && !v1.explicit) {\n return v2;\n } else if (deepEqual(v1.value, v2.value)) {\n return v1;\n } else {\n return tieBreaker(v1, v2, property, propertyOf);\n }\n}\n","import {Parse} from '../../data';\nimport {Dict} from '../../util';\nimport {Split} from '../split';\nimport {OutputNode} from './dataflow';\nimport {FacetNode} from './facet';\nimport {SourceNode} from './source';\n\nexport interface DataComponent {\n /**\n * A list of unique sources.\n */\n sources: SourceNode[];\n\n /**\n * Registry of output nodes.\n */\n outputNodes: Dict;\n\n /**\n * How often is an output node used. If it is not used, we don't need to\n * instantiate it in the assemble step.\n */\n outputNodeRefCounts: Dict;\n\n /**\n * The output node before aggregation.\n */\n raw?: OutputNode;\n\n /**\n * The main output node.\n */\n main?: OutputNode;\n\n /**\n * For facets, we store the reference to the root node.\n */\n facetRoot?: FacetNode;\n\n /**\n * True if the data for this model is faceted.\n * A dataset is faceted if a parent model is a facet and no new dataset is\n * defined (which would make the data unfaceted again).\n */\n isFaceted: boolean;\n\n /**\n * Parse properties passed down from ancestors. Helps us to keep track of what has been parsed or is derived.\n */\n ancestorParse?: AncestorParse;\n}\n\n/**\n * Class to track interesting properties (see https://15721.courses.cs.cmu.edu/spring2016/papers/graefe-ieee1995.pdf)\n * about how fields have been parsed or whether they have been derived in a transform. We use this to not parse the\n * same field again (or differently).\n */\nexport class AncestorParse extends Split {\n constructor(\n public readonly explicit: Partial = {},\n public readonly implicit: Partial = {},\n public parseNothing = false\n ) {\n super(explicit, implicit);\n }\n\n public clone(): AncestorParse {\n const clone = super.clone() as AncestorParse;\n clone.parseNothing = this.parseNothing;\n return clone;\n }\n}\n","/*\n * Constants and utilities for data.\n */\nimport {Vector2} from 'vega';\nimport {FieldName} from './channeldef';\nimport {VgData} from './vega.schema';\n\nexport type ParseValue = null | string | 'string' | 'boolean' | 'date' | 'number';\n\nexport interface Parse {\n [field: string]: ParseValue;\n}\n\nexport interface DataFormatBase {\n /**\n * If set to `null`, disable type inference based on the spec and only use type inference based on the data.\n * Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)).\n * For example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n *\n * For `\"date\"`, we parse data based using JavaScript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\n * For Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)\n */\n parse?: Parse | null;\n\n /**\n * Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n *\n * __Default value:__ The default format type is determined by the extension of the file URL.\n * If no extension is detected, `\"json\"` will be used by default.\n */\n type?: 'csv' | 'tsv' | 'dsv' | 'json' | 'topojson';\n}\n\nexport interface CsvDataFormat extends DataFormatBase {\n type?: 'csv' | 'tsv';\n}\n\nexport interface DsvDataFormat extends DataFormatBase {\n type?: 'dsv';\n\n /**\n * The delimiter between records. The delimiter must be a single character (i.e., a single 16-bit code unit); so, ASCII delimiters are fine, but emoji delimiters are not.\n *\n * @minLength 1\n * @maxLength 1\n */\n delimiter: string;\n}\n\nexport interface JsonDataFormat extends DataFormatBase {\n type?: 'json';\n /**\n * The JSON property containing the desired data.\n * This parameter can be used when the loaded JSON file may have surrounding structure or meta-data.\n * For example `\"property\": \"values.features\"` is equivalent to retrieving `json.values.features`\n * from the loaded JSON object.\n */\n property?: string;\n}\n\nexport interface TopoDataFormat extends DataFormatBase {\n type?: 'topojson';\n /**\n * The name of the TopoJSON object set to convert to a GeoJSON feature collection.\n * For example, in a map of the world, there may be an object set named `\"countries\"`.\n * Using the feature property, we can extract this set and generate a GeoJSON feature object for each country.\n */\n feature?: string;\n /**\n * The name of the TopoJSON object set to convert to mesh.\n * Similar to the `feature` option, `mesh` extracts a named TopoJSON object set.\n * Unlike the `feature` option, the corresponding geo data is returned as a single, unified mesh instance, not as individual GeoJSON features.\n * Extracting a mesh is useful for more efficiently drawing borders or other geographic elements that you do not need to associate with specific regions such as individual countries, states or counties.\n */\n mesh?: string;\n}\n\nexport type DataFormat = CsvDataFormat | DsvDataFormat | JsonDataFormat | TopoDataFormat;\n\nexport type DataFormatType = 'json' | 'csv' | 'tsv' | 'dsv' | 'topojson';\n\nexport type DataSource = UrlData | InlineData | NamedData;\n\nexport type Data = DataSource | Generator;\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport type InlineDataset = number[] | string[] | boolean[] | object[] | string | object;\n\nexport interface DataBase {\n /**\n * An object that specifies the format for parsing the data.\n */\n format?: DataFormat;\n /**\n * Provide a placeholder name and bind data at runtime.\n */\n name?: string;\n}\n\nexport interface UrlData extends DataBase {\n /**\n * An URL from which to load the data set. Use the `format.type` property\n * to ensure the loaded data is correctly parsed.\n */\n url: string;\n}\n\nexport interface InlineData extends DataBase {\n /**\n * The full data set, included inline. This can be an array of objects or primitive values, an object, or a string.\n * Arrays of primitive values are ingested as objects with a `data` property. Strings are parsed according to the specified format type.\n */\n values: InlineDataset;\n}\n\nexport interface NamedData extends DataBase {\n /**\n * Provide a placeholder name and bind data at runtime.\n */\n name: string;\n}\n\nexport function isUrlData(data: Partial | Partial): data is UrlData {\n return 'url' in data;\n}\n\nexport function isInlineData(data: Partial | Partial): data is InlineData {\n return 'values' in data;\n}\n\nexport function isNamedData(data: Partial | Partial): data is NamedData {\n return 'name' in data && !isUrlData(data) && !isInlineData(data) && !isGenerator(data);\n}\n\nexport function isGenerator(data: Partial | Partial): data is Generator {\n return data && (isSequenceGenerator(data) || isSphereGenerator(data) || isGraticuleGenerator(data));\n}\n\nexport function isSequenceGenerator(data: Partial | Partial): data is SequenceGenerator {\n return 'sequence' in data;\n}\n\nexport function isSphereGenerator(data: Partial | Partial): data is SphereGenerator {\n return 'sphere' in data;\n}\n\nexport function isGraticuleGenerator(data: Partial | Partial): data is GraticuleGenerator {\n return 'graticule' in data;\n}\n\nexport enum DataSourceType {\n Raw,\n Main,\n Row,\n Column,\n Lookup\n}\n\nexport type Generator = SequenceGenerator | SphereGenerator | GraticuleGenerator;\n\nexport interface GeneratorBase {\n /**\n * Provide a placeholder name and bind data at runtime.\n */\n name?: string;\n}\n\nexport interface SequenceGenerator extends GeneratorBase {\n /**\n * Generate a sequence of numbers.\n */\n sequence: SequenceParams;\n}\n\nexport interface SequenceParams {\n /**\n * The starting value of the sequence (inclusive).\n */\n start: number;\n /**\n * The ending value of the sequence (exclusive).\n */\n stop: number;\n /**\n * The step value between sequence entries.\n *\n * __Default value:__ `1`\n */\n step?: number;\n\n /**\n * The name of the generated sequence field.\n *\n * __Default value:__ `\"data\"`\n */\n as?: FieldName;\n}\n\nexport interface SphereGenerator extends GeneratorBase {\n /**\n * Generate sphere GeoJSON data for the full globe.\n */\n // eslint-disable-next-line @typescript-eslint/ban-types\n sphere: true | {};\n}\n\nexport interface GraticuleGenerator extends GeneratorBase {\n /**\n * Generate graticule GeoJSON data for geographic reference lines.\n */\n graticule: true | GraticuleParams;\n}\n\nexport interface GraticuleParams {\n /**\n * The major extent of the graticule as a two-element array of coordinates.\n */\n extentMajor?: Vector2>;\n\n /**\n * The minor extent of the graticule as a two-element array of coordinates.\n */\n extentMinor?: Vector2>;\n\n /**\n * Sets both the major and minor extents to the same values.\n */\n extent?: Vector2>;\n\n /**\n * The major step angles of the graticule.\n *\n *\n * __Default value:__ `[90, 360]`\n */\n stepMajor?: Vector2;\n\n /**\n * The minor step angles of the graticule.\n *\n * __Default value:__ `[10, 10]`\n */\n stepMinor?: Vector2;\n\n /**\n * Sets both the major and minor step angles to the same values.\n */\n step?: Vector2;\n\n /**\n * The precision of the graticule in degrees.\n *\n * __Default value:__ `2.5`\n */\n precision?: number;\n}\n","const VIEW = 'view',\n LBRACK = '[',\n RBRACK = ']',\n LBRACE = '{',\n RBRACE = '}',\n COLON = ':',\n COMMA = ',',\n NAME = '@',\n GT = '>',\n ILLEGAL = /[[\\]{}]/,\n DEFAULT_MARKS = {\n '*': 1,\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n};\nlet DEFAULT_SOURCE, MARKS;\n/**\n * Parse an event selector string.\n * Returns an array of event stream definitions.\n */\n\nfunction eventSelector (selector, source, marks) {\n DEFAULT_SOURCE = source || VIEW;\n MARKS = marks || DEFAULT_MARKS;\n return parseMerge(selector.trim()).map(parseSelector);\n}\n\nfunction isMarkType(type) {\n return MARKS[type];\n}\n\nfunction find(s, i, endChar, pushChar, popChar) {\n const n = s.length;\n let count = 0,\n c;\n\n for (; i < n; ++i) {\n c = s[i];\n if (!count && c === endChar) return i;else if (popChar && popChar.indexOf(c) >= 0) --count;else if (pushChar && pushChar.indexOf(c) >= 0) ++count;\n }\n\n return i;\n}\n\nfunction parseMerge(s) {\n const output = [],\n n = s.length;\n let start = 0,\n i = 0;\n\n while (i < n) {\n i = find(s, i, COMMA, LBRACK + LBRACE, RBRACK + RBRACE);\n output.push(s.substring(start, i).trim());\n start = ++i;\n }\n\n if (output.length === 0) {\n throw 'Empty event selector: ' + s;\n }\n\n return output;\n}\n\nfunction parseSelector(s) {\n return s[0] === '[' ? parseBetween(s) : parseStream(s);\n}\n\nfunction parseBetween(s) {\n const n = s.length;\n let i = 1,\n b;\n i = find(s, i, RBRACK, LBRACK, RBRACK);\n\n if (i === n) {\n throw 'Empty between selector: ' + s;\n }\n\n b = parseMerge(s.substring(1, i));\n\n if (b.length !== 2) {\n throw 'Between selector must have two elements: ' + s;\n }\n\n s = s.slice(i + 1).trim();\n\n if (s[0] !== GT) {\n throw 'Expected \\'>\\' after between selector: ' + s;\n }\n\n b = b.map(parseSelector);\n const stream = parseSelector(s.slice(1).trim());\n\n if (stream.between) {\n return {\n between: b,\n stream: stream\n };\n } else {\n stream.between = b;\n }\n\n return stream;\n}\n\nfunction parseStream(s) {\n const stream = {\n source: DEFAULT_SOURCE\n },\n source = [];\n let throttle = [0, 0],\n markname = 0,\n start = 0,\n n = s.length,\n i = 0,\n j,\n filter; // extract throttle from end\n\n if (s[n - 1] === RBRACE) {\n i = s.lastIndexOf(LBRACE);\n\n if (i >= 0) {\n try {\n throttle = parseThrottle(s.substring(i + 1, n - 1));\n } catch (e) {\n throw 'Invalid throttle specification: ' + s;\n }\n\n s = s.slice(0, i).trim();\n n = s.length;\n } else throw 'Unmatched right brace: ' + s;\n\n i = 0;\n }\n\n if (!n) throw s; // set name flag based on first char\n\n if (s[0] === NAME) markname = ++i; // extract first part of multi-part stream selector\n\n j = find(s, i, COLON);\n\n if (j < n) {\n source.push(s.substring(start, j).trim());\n start = i = ++j;\n } // extract remaining part of stream selector\n\n\n i = find(s, i, LBRACK);\n\n if (i === n) {\n source.push(s.substring(start, n).trim());\n } else {\n source.push(s.substring(start, i).trim());\n filter = [];\n start = ++i;\n if (start === n) throw 'Unmatched left bracket: ' + s;\n } // extract filters\n\n\n while (i < n) {\n i = find(s, i, RBRACK);\n if (i === n) throw 'Unmatched left bracket: ' + s;\n filter.push(s.substring(start, i).trim());\n if (i < n - 1 && s[++i] !== LBRACK) throw 'Expected left bracket: ' + s;\n start = ++i;\n } // marshall event stream specification\n\n\n if (!(n = source.length) || ILLEGAL.test(source[n - 1])) {\n throw 'Invalid event selector: ' + s;\n }\n\n if (n > 1) {\n stream.type = source[1];\n\n if (markname) {\n stream.markname = source[0].slice(1);\n } else if (isMarkType(source[0])) {\n stream.marktype = source[0];\n } else {\n stream.source = source[0];\n }\n } else {\n stream.type = source[0];\n }\n\n if (stream.type.slice(-1) === '!') {\n stream.consume = true;\n stream.type = stream.type.slice(0, -1);\n }\n\n if (filter != null) stream.filter = filter;\n if (throttle[0]) stream.throttle = throttle[0];\n if (throttle[1]) stream.debounce = throttle[1];\n return stream;\n}\n\nfunction parseThrottle(s) {\n const a = s.split(COMMA);\n if (!s.length || a.length > 2) throw s;\n return a.map(_ => {\n const x = +_;\n if (x !== x) throw s;\n return x;\n });\n}\n\nexport { eventSelector as selector };\n","import {Signal, SignalRef} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {identity, isArray, stringValue} from 'vega-util';\nimport {MODIFY, STORE, unitName, VL_SELECTION_RESOLVE, TUPLE, selectionCompilers} from '.';\nimport {dateTimeToExpr, isDateTime, dateTimeToTimestamp} from '../../datetime';\nimport {hasContinuousDomain} from '../../scale';\nimport {SelectionInit, SelectionInitInterval, ParameterExtent} from '../../selection';\nimport {keys, stringify, vals} from '../../util';\nimport {VgData, VgDomain} from '../../vega.schema';\nimport {FacetModel} from '../facet';\nimport {LayerModel} from '../layer';\nimport {isUnitModel, Model} from '../model';\nimport {ScaleComponent} from '../scale/component';\nimport {UnitModel} from '../unit';\nimport {parseSelectionExtent} from './parse';\n\nexport function assembleInit(\n init: readonly (SelectionInit | readonly SelectionInit[] | SelectionInitInterval)[] | SelectionInit,\n isExpr = true,\n wrap: (str: string | number) => string | number = identity\n): any {\n if (isArray(init)) {\n const assembled = init.map(v => assembleInit(v, isExpr, wrap));\n return isExpr ? `[${assembled.join(', ')}]` : assembled;\n } else if (isDateTime(init)) {\n if (isExpr) {\n return wrap(dateTimeToExpr(init));\n } else {\n return wrap(dateTimeToTimestamp(init));\n }\n }\n return isExpr ? wrap(stringify(init)) : init;\n}\n\nexport function assembleUnitSelectionSignals(model: UnitModel, signals: Signal[]) {\n for (const selCmpt of vals(model.component.selection ?? {})) {\n const name = selCmpt.name;\n let modifyExpr = `${name}${TUPLE}, ${selCmpt.resolve === 'global' ? 'true' : `{unit: ${unitName(model)}}`}`;\n\n for (const c of selectionCompilers) {\n if (!c.defined(selCmpt)) continue;\n if (c.signals) signals = c.signals(model, selCmpt, signals);\n if (c.modifyExpr) modifyExpr = c.modifyExpr(model, selCmpt, modifyExpr);\n }\n\n signals.push({\n name: name + MODIFY,\n on: [\n {\n events: {signal: selCmpt.name + TUPLE},\n update: `modify(${stringValue(selCmpt.name + STORE)}, ${modifyExpr})`\n }\n ]\n });\n }\n\n return cleanupEmptyOnArray(signals);\n}\n\nexport function assembleFacetSignals(model: FacetModel, signals: Signal[]) {\n if (model.component.selection && keys(model.component.selection).length) {\n const name = stringValue(model.getName('cell'));\n signals.unshift({\n name: 'facet',\n value: {},\n on: [\n {\n events: parseSelector('mousemove', 'scope'),\n update: `isTuple(facet) ? facet : group(${name}).datum`\n }\n ]\n });\n }\n\n return cleanupEmptyOnArray(signals);\n}\n\nexport function assembleTopLevelSignals(model: UnitModel, signals: Signal[]) {\n let hasSelections = false;\n for (const selCmpt of vals(model.component.selection ?? {})) {\n const name = selCmpt.name;\n const store = stringValue(name + STORE);\n const hasSg = signals.filter(s => s.name === name);\n if (hasSg.length === 0) {\n const resolve = selCmpt.resolve === 'global' ? 'union' : selCmpt.resolve;\n const isPoint = selCmpt.type === 'point' ? ', true, true)' : ')';\n signals.push({\n name: selCmpt.name,\n update: `${VL_SELECTION_RESOLVE}(${store}, ${stringValue(resolve)}${isPoint}`\n });\n }\n hasSelections = true;\n\n for (const c of selectionCompilers) {\n if (c.defined(selCmpt) && c.topLevelSignals) {\n signals = c.topLevelSignals(model, selCmpt, signals);\n }\n }\n }\n\n if (hasSelections) {\n const hasUnit = signals.filter(s => s.name === 'unit');\n if (hasUnit.length === 0) {\n signals.unshift({\n name: 'unit',\n value: {},\n on: [{events: 'mousemove', update: 'isTuple(group()) ? group() : unit'}]\n });\n }\n }\n\n return cleanupEmptyOnArray(signals);\n}\n\nexport function assembleUnitSelectionData(model: UnitModel, data: readonly VgData[]): VgData[] {\n const dataCopy = [...data];\n for (const selCmpt of vals(model.component.selection ?? {})) {\n const init: VgData = {name: selCmpt.name + STORE};\n if (selCmpt.init) {\n const fields = selCmpt.project.items.map(proj => {\n const {signals, ...rest} = proj;\n return rest;\n });\n\n init.values = selCmpt.init.map(i => ({\n unit: unitName(model, {escape: false}),\n fields,\n values: assembleInit(i, false)\n }));\n }\n const contains = dataCopy.filter(d => d.name === selCmpt.name + STORE);\n if (!contains.length) {\n dataCopy.push(init);\n }\n }\n\n return dataCopy;\n}\n\nexport function assembleUnitSelectionMarks(model: UnitModel, marks: any[]): any[] {\n for (const selCmpt of vals(model.component.selection ?? {})) {\n for (const c of selectionCompilers) {\n if (c.defined(selCmpt) && c.marks) {\n marks = c.marks(model, selCmpt, marks);\n }\n }\n }\n\n return marks;\n}\n\nexport function assembleLayerSelectionMarks(model: LayerModel, marks: any[]): any[] {\n for (const child of model.children) {\n if (isUnitModel(child)) {\n marks = assembleUnitSelectionMarks(child, marks);\n }\n }\n\n return marks;\n}\n\nexport function assembleSelectionScaleDomain(\n model: Model,\n extent: ParameterExtent,\n scaleCmpt: ScaleComponent,\n domain: VgDomain\n): SignalRef {\n const parsedExtent = parseSelectionExtent(model, extent.param, extent);\n\n return {\n signal:\n hasContinuousDomain(scaleCmpt.get('type')) && isArray(domain) && domain[0] > domain[1]\n ? `isValid(${parsedExtent}) && reverse(${parsedExtent})`\n : parsedExtent\n };\n}\n\nfunction cleanupEmptyOnArray(signals: Signal[]) {\n return signals.map(s => {\n if (s.on && !s.on.length) delete s.on;\n return s;\n });\n}\n","import {DataSourceType} from '../../data';\nimport * as log from '../../log';\nimport {Dict, uniqueId} from '../../util';\n\n/**\n * A node in the dataflow tree.\n */\nexport abstract class DataFlowNode {\n private _children: DataFlowNode[] = [];\n\n private _parent: DataFlowNode = null;\n\n protected _hash: string | number;\n\n constructor(parent: DataFlowNode, public readonly debugName?: string) {\n if (parent) {\n this.parent = parent;\n }\n }\n\n /**\n * Clone this node with a deep copy but don't clone links to children or parents.\n */\n public clone(): DataFlowNode {\n throw new Error('Cannot clone node');\n }\n\n /**\n * Return a hash of the node.\n */\n public abstract hash(): string | number;\n\n /**\n * Set of fields that this node depends on.\n */\n public abstract dependentFields(): Set;\n\n /**\n * Set of fields that are being created by this node.\n */\n public abstract producedFields(): Set;\n\n get parent() {\n return this._parent;\n }\n\n /**\n * Set the parent of the node and also add this node to the parent's children.\n */\n set parent(parent: DataFlowNode) {\n this._parent = parent;\n if (parent) {\n parent.addChild(this);\n }\n }\n\n get children() {\n return this._children;\n }\n\n public numChildren() {\n return this._children.length;\n }\n\n public addChild(child: DataFlowNode, loc?: number) {\n // do not add the same child twice\n if (this._children.includes(child)) {\n log.warn(log.message.ADD_SAME_CHILD_TWICE);\n return;\n }\n\n if (loc !== undefined) {\n this._children.splice(loc, 0, child);\n } else {\n this._children.push(child);\n }\n }\n\n public removeChild(oldChild: DataFlowNode) {\n const loc = this._children.indexOf(oldChild);\n this._children.splice(loc, 1);\n return loc;\n }\n\n /**\n * Remove node from the dataflow.\n */\n public remove() {\n let loc = this._parent.removeChild(this);\n for (const child of this._children) {\n // do not use the set method because we want to insert at a particular location\n child._parent = this._parent;\n this._parent.addChild(child, loc++);\n }\n }\n\n /**\n * Insert another node as a parent of this node.\n */\n public insertAsParentOf(other: DataFlowNode) {\n const parent = other.parent;\n parent.removeChild(this);\n this.parent = parent;\n other.parent = this;\n }\n\n public swapWithParent() {\n const parent = this._parent;\n const newParent = parent.parent;\n\n // reconnect the children\n for (const child of this._children) {\n child.parent = parent;\n }\n\n // remove old links\n this._children = []; // equivalent to removing every child link one by one\n parent.removeChild(this);\n parent.parent.removeChild(parent);\n\n // swap two nodes\n this.parent = newParent;\n parent.parent = this;\n }\n}\n\nexport class OutputNode extends DataFlowNode {\n private _source: string;\n\n private _name: string;\n\n public clone(): this {\n const cloneObj = new (this.constructor as any)();\n cloneObj.debugName = `clone_${this.debugName}`;\n cloneObj._source = this._source;\n cloneObj._name = `clone_${this._name}`;\n cloneObj.type = this.type;\n cloneObj.refCounts = this.refCounts;\n cloneObj.refCounts[cloneObj._name] = 0;\n return cloneObj;\n }\n\n /**\n * @param source The name of the source. Will change in assemble.\n * @param type The type of the output node.\n * @param refCounts A global ref counter map.\n */\n constructor(\n parent: DataFlowNode,\n source: string,\n public readonly type: DataSourceType,\n private readonly refCounts: Dict\n ) {\n super(parent, source);\n\n this._source = this._name = source;\n\n if (this.refCounts && !(this._name in this.refCounts)) {\n this.refCounts[this._name] = 0;\n }\n }\n\n public dependentFields() {\n return new Set();\n }\n\n public producedFields() {\n return new Set();\n }\n\n public hash() {\n if (this._hash === undefined) {\n this._hash = `Output ${uniqueId()}`;\n }\n return this._hash;\n }\n\n /**\n * Request the datasource name and increase the ref counter.\n *\n * During the parsing phase, this will return the simple name such as 'main' or 'raw'.\n * It is crucial to request the name from an output node to mark it as a required node.\n * If nobody ever requests the name, this datasource will not be instantiated in the assemble phase.\n *\n * In the assemble phase, this will return the correct name.\n */\n public getSource() {\n this.refCounts[this._name]++;\n return this._source;\n }\n\n public isRequired(): boolean {\n return !!this.refCounts[this._name];\n }\n\n public setSource(source: string) {\n this._source = source;\n }\n}\n","import {TimeUnitTransform as VgTimeUnitTransform} from 'vega';\nimport {vgField} from '../../channeldef';\nimport {getTimeUnitParts, normalizeTimeUnit} from '../../timeunit';\nimport {TimeUnitTransform} from '../../transform';\nimport {Dict, duplicate, entries, hash, isEmpty, replacePathInField, vals} from '../../util';\nimport {ModelWithField} from '../model';\nimport {DataFlowNode} from './dataflow';\n\nexport type TimeUnitComponent = TimeUnitTransform;\n\nexport class TimeUnitNode extends DataFlowNode {\n public clone() {\n return new TimeUnitNode(null, duplicate(this.formula));\n }\n\n constructor(parent: DataFlowNode, private formula: Dict) {\n super(parent);\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: ModelWithField) {\n const formula = model.reduceFieldDef((timeUnitComponent: TimeUnitComponent, fieldDef) => {\n const {field, timeUnit} = fieldDef;\n\n if (timeUnit) {\n const as = vgField(fieldDef, {forAs: true});\n timeUnitComponent[\n hash({\n as,\n field,\n timeUnit\n })\n ] = {\n as,\n field,\n timeUnit\n };\n }\n return timeUnitComponent;\n }, {} as Dict);\n\n if (isEmpty(formula)) {\n return null;\n }\n\n return new TimeUnitNode(parent, formula);\n }\n\n public static makeFromTransform(parent: DataFlowNode, t: TimeUnitTransform) {\n const {timeUnit, ...other} = {...t};\n\n const normalizedTimeUnit = normalizeTimeUnit(timeUnit);\n\n const component = {\n ...other,\n timeUnit: normalizedTimeUnit\n };\n\n return new TimeUnitNode(parent, {\n [hash(component)]: component\n });\n }\n\n /**\n * Merge together TimeUnitNodes assigning the children of `other` to `this`\n * and removing `other`.\n */\n public merge(other: TimeUnitNode) {\n this.formula = {...this.formula};\n\n // if the same hash happen twice, merge\n for (const key in other.formula) {\n if (!this.formula[key]) {\n // copy if it's not a duplicate\n this.formula[key] = other.formula[key];\n }\n }\n\n for (const child of other.children) {\n other.removeChild(child);\n child.parent = this;\n }\n\n other.remove();\n }\n\n /**\n * Remove time units coming from the other node.\n */\n public removeFormulas(fields: Set) {\n const newFormula = {};\n\n for (const [key, timeUnit] of entries(this.formula)) {\n if (!fields.has(timeUnit.as)) {\n newFormula[key] = timeUnit;\n }\n }\n\n this.formula = newFormula;\n }\n\n public producedFields() {\n return new Set(vals(this.formula).map(f => f.as));\n }\n\n public dependentFields() {\n return new Set(vals(this.formula).map(f => f.field));\n }\n\n public hash() {\n return `TimeUnit ${hash(this.formula)}`;\n }\n\n public assemble() {\n const transforms: VgTimeUnitTransform[] = [];\n\n for (const f of vals(this.formula)) {\n const {field, as, timeUnit} = f;\n const {unit, utc, ...params} = normalizeTimeUnit(timeUnit);\n\n transforms.push({\n field: replacePathInField(field),\n type: 'timeunit',\n ...(unit ? {units: getTimeUnitParts(unit)} : {}),\n ...(utc ? {timezone: 'utc'} : {}),\n ...params,\n as: [as, `${as}_end`]\n });\n }\n\n return transforms;\n }\n}\n","import {array, isObject} from 'vega-util';\nimport {isSingleDefUnitChannel, ScaleChannel, SingleDefUnitChannel} from '../../channel';\nimport * as log from '../../log';\nimport {hasContinuousDomain} from '../../scale';\nimport {BaseSelectionConfig, SelectionInitIntervalMapping, SelectionInitMapping} from '../../selection';\nimport {Dict, hash, keys, replacePathInField, varName, isEmpty} from '../../util';\nimport {TimeUnitComponent, TimeUnitNode} from '../data/timeunit';\nimport {SelectionCompiler} from '.';\nexport const TUPLE_FIELDS = '_tuple_fields';\n\n/**\n * Whether the selection tuples hold enumerated or ranged values for a field.\n */\nexport type TupleStoreType =\n // enumerated\n | 'E'\n // ranged, exclusive, left-right inclusive\n | 'R'\n // ranged, left-inclusive, right-exclusive\n | 'R-RE';\n\nexport interface SelectionProjection {\n type: TupleStoreType;\n field: string;\n channel?: SingleDefUnitChannel;\n signals?: {data?: string; visual?: string};\n hasLegend?: boolean;\n}\n\nexport class SelectionProjectionComponent {\n public hasChannel: Partial>;\n public hasField: Record;\n public timeUnit?: TimeUnitNode;\n public items: SelectionProjection[];\n\n constructor(...items: SelectionProjection[]) {\n this.items = items;\n this.hasChannel = {};\n this.hasField = {};\n }\n}\n\nconst project: SelectionCompiler = {\n defined: () => {\n return true; // This transform handles its own defaults, so always run parse.\n },\n\n parse: (model, selCmpt, selDef) => {\n const name = selCmpt.name;\n const proj = (selCmpt.project ??= new SelectionProjectionComponent());\n const parsed: Dict = {};\n const timeUnits: Dict = {};\n\n const signals = new Set();\n const signalName = (p: SelectionProjection, range: 'data' | 'visual') => {\n const suffix = range === 'visual' ? p.channel : p.field;\n let sg = varName(`${name}_${suffix}`);\n for (let counter = 1; signals.has(sg); counter++) {\n sg = varName(`${name}_${suffix}_${counter}`);\n }\n signals.add(sg);\n return {[range]: sg};\n };\n\n const type = selCmpt.type;\n const cfg = model.config.selection[type];\n const init =\n selDef.value !== undefined\n ? (array(selDef.value as any) as SelectionInitMapping[] | SelectionInitIntervalMapping[])\n : null;\n\n // If no explicit projection (either fields or encodings) is specified, set some defaults.\n // If an initial value is set, try to infer projections.\n let {fields, encodings} = isObject(selDef.select) ? selDef.select : ({} as BaseSelectionConfig);\n if (!fields && !encodings && init) {\n for (const initVal of init) {\n // initVal may be a scalar value to smoothen varParam -> pointSelection gradient.\n if (!isObject(initVal)) {\n continue;\n }\n\n for (const key of keys(initVal)) {\n if (isSingleDefUnitChannel(key)) {\n (encodings || (encodings = [])).push(key as SingleDefUnitChannel);\n } else {\n if (type === 'interval') {\n log.warn(log.message.INTERVAL_INITIALIZED_WITH_X_Y);\n encodings = cfg.encodings;\n } else {\n (fields || (fields = [])).push(key);\n }\n }\n }\n }\n }\n\n // If no initial value is specified, use the default configuration.\n // We break this out as a separate if block (instead of an else condition)\n // to account for unprojected point selections that have scalar initial values\n if (!fields && !encodings) {\n encodings = cfg.encodings;\n fields = cfg.fields;\n }\n\n for (const channel of encodings ?? []) {\n const fieldDef = model.fieldDef(channel);\n if (fieldDef) {\n let field = fieldDef.field;\n\n if (fieldDef.aggregate) {\n log.warn(log.message.cannotProjectAggregate(channel, fieldDef.aggregate));\n continue;\n } else if (!field) {\n log.warn(log.message.cannotProjectOnChannelWithoutField(channel));\n continue;\n }\n\n if (fieldDef.timeUnit) {\n field = model.vgField(channel);\n // Construct TimeUnitComponents which will be combined into a\n // TimeUnitNode. This node may need to be inserted into the\n // dataflow if the selection is used across views that do not\n // have these time units defined.\n const component = {\n timeUnit: fieldDef.timeUnit,\n as: field,\n field: fieldDef.field\n };\n\n timeUnits[hash(component)] = component;\n }\n\n // Prevent duplicate projections on the same field.\n // TODO: what if the same field is bound to multiple channels (e.g., SPLOM diag).\n if (!parsed[field]) {\n // Determine whether the tuple will store enumerated or ranged values.\n // Interval selections store ranges for continuous scales, and enumerations otherwise.\n // Single/multi selections store ranges for binned fields, and enumerations otherwise.\n let tplType: TupleStoreType = 'E';\n if (type === 'interval') {\n const scaleType = model.getScaleComponent(channel as ScaleChannel).get('type');\n if (hasContinuousDomain(scaleType)) {\n tplType = 'R';\n }\n } else if (fieldDef.bin) {\n tplType = 'R-RE';\n }\n\n const p: SelectionProjection = {field, channel, type: tplType};\n p.signals = {...signalName(p, 'data'), ...signalName(p, 'visual')};\n proj.items.push((parsed[field] = p));\n proj.hasField[field] = proj.hasChannel[channel] = parsed[field];\n }\n } else {\n log.warn(log.message.cannotProjectOnChannelWithoutField(channel));\n }\n }\n\n // TODO: find a possible channel mapping for these fields.\n for (const field of fields ?? []) {\n if (proj.hasField[field]) continue;\n const p: SelectionProjection = {type: 'E', field};\n p.signals = {...signalName(p, 'data')};\n proj.items.push(p);\n proj.hasField[field] = p;\n }\n\n if (init) {\n selCmpt.init = (init as any).map((v: SelectionInitMapping | SelectionInitIntervalMapping) => {\n // Selections can be initialized either with a full object that maps projections to values\n // or scalar values to smoothen the abstraction gradient from variable params to point selections.\n return proj.items.map(p => (isObject(v) ? (v[p.channel] !== undefined ? v[p.channel] : v[p.field]) : v));\n });\n }\n\n if (!isEmpty(timeUnits)) {\n proj.timeUnit = new TimeUnitNode(null, timeUnits);\n }\n },\n\n signals: (model, selCmpt, allSignals) => {\n const name = selCmpt.name + TUPLE_FIELDS;\n const hasSignal = allSignals.filter(s => s.name === name);\n return hasSignal.length > 0\n ? allSignals\n : allSignals.concat({\n name,\n value: selCmpt.project.items.map(proj => {\n const {signals, hasLegend, ...rest} = proj;\n rest.field = replacePathInField(rest.field);\n return rest;\n })\n });\n }\n};\n\nexport default project;\n","import {stringValue} from 'vega-util';\nimport {VL_SELECTION_RESOLVE} from '.';\nimport {isScaleChannel, ScaleChannel} from '../../channel';\nimport * as log from '../../log';\nimport {hasContinuousDomain} from '../../scale';\nimport {isLayerModel, Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {SelectionProjection} from './project';\nimport {SelectionCompiler} from '.';\nimport {replacePathInField} from '../../util';\n\nconst scaleBindings: SelectionCompiler<'interval'> = {\n defined: selCmpt => {\n return selCmpt.type === 'interval' && selCmpt.resolve === 'global' && selCmpt.bind && selCmpt.bind === 'scales';\n },\n\n parse: (model, selCmpt) => {\n const bound: SelectionProjection[] = (selCmpt.scales = []);\n\n for (const proj of selCmpt.project.items) {\n const channel = proj.channel;\n\n if (!isScaleChannel(channel)) {\n continue;\n }\n\n const scale = model.getScaleComponent(channel);\n const scaleType = scale ? scale.get('type') : undefined;\n\n if (!scale || !hasContinuousDomain(scaleType)) {\n log.warn(log.message.SCALE_BINDINGS_CONTINUOUS);\n continue;\n }\n\n scale.set('selectionExtent', {param: selCmpt.name, field: proj.field}, true);\n bound.push(proj);\n }\n },\n\n topLevelSignals: (model, selCmpt, signals) => {\n const bound = selCmpt.scales.filter(proj => signals.filter(s => s.name === proj.signals.data).length === 0);\n\n // Top-level signals are only needed for multiview displays and if this\n // view's top-level signals haven't already been generated.\n if (!model.parent || isTopLevelLayer(model) || bound.length === 0) {\n return signals;\n }\n\n // vlSelectionResolve does not account for the behavior of bound scales in\n // multiview displays. Each unit view adds a tuple to the store, but the\n // state of the selection is the unit selection most recently updated. This\n // state is captured by the top-level signals that we insert and \"push\n // outer\" to from within the units. We need to reassemble this state into\n // the top-level named signal, except no single selCmpt has a global view.\n const namedSg = signals.filter(s => s.name === selCmpt.name)[0];\n let update = namedSg.update;\n if (update.indexOf(VL_SELECTION_RESOLVE) >= 0) {\n namedSg.update = `{${bound\n .map(proj => `${stringValue(replacePathInField(proj.field))}: ${proj.signals.data}`)\n .join(', ')}}`;\n } else {\n for (const proj of bound) {\n const mapping = `${stringValue(replacePathInField(proj.field))}: ${proj.signals.data}`;\n if (!update.includes(mapping)) {\n update = `${update.substring(0, update.length - 1)}, ${mapping}}`;\n }\n }\n namedSg.update = update;\n }\n\n return signals.concat(bound.map(proj => ({name: proj.signals.data})));\n },\n\n signals: (model, selCmpt, signals) => {\n // Nested signals need only push to top-level signals with multiview displays.\n if (model.parent && !isTopLevelLayer(model)) {\n for (const proj of selCmpt.scales) {\n const signal: any = signals.filter(s => s.name === proj.signals.data)[0];\n signal.push = 'outer';\n delete signal.value;\n delete signal.update;\n }\n }\n\n return signals;\n }\n};\n\nexport default scaleBindings;\n\nexport function domain(model: UnitModel, channel: ScaleChannel) {\n const scale = stringValue(model.scaleName(channel));\n return `domain(${scale})`;\n}\n\nfunction isTopLevelLayer(model: Model): boolean {\n return model.parent && isLayerModel(model.parent) && (!model.parent.parent ?? isTopLevelLayer(model.parent.parent));\n}\n","import {NewSignal, OnEvent, Stream} from 'vega';\nimport {array, stringValue} from 'vega-util';\nimport {SelectionCompiler, SelectionComponent, STORE, TUPLE, unitName} from '.';\nimport {ScaleChannel, X, Y} from '../../channel';\nimport {warn} from '../../log';\nimport {hasContinuousDomain} from '../../scale';\nimport {SelectionInitInterval} from '../../selection';\nimport {keys} from '../../util';\nimport {UnitModel} from '../unit';\nimport {assembleInit} from './assemble';\nimport {SelectionProjection, TUPLE_FIELDS} from './project';\nimport scales from './scales';\n\nexport const BRUSH = '_brush';\nexport const SCALE_TRIGGER = '_scale_trigger';\n\nconst interval: SelectionCompiler<'interval'> = {\n defined: selCmpt => selCmpt.type === 'interval',\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const fieldsSg = name + TUPLE_FIELDS;\n const hasScales = scales.defined(selCmpt);\n const init = selCmpt.init ? selCmpt.init[0] : null;\n const dataSignals: string[] = [];\n const scaleTriggers: {\n scaleName: string;\n expr: string;\n }[] = [];\n\n if (selCmpt.translate && !hasScales) {\n const filterExpr = `!event.item || event.item.mark.name !== ${stringValue(name + BRUSH)}`;\n events(selCmpt, (on: OnEvent[], evt: Stream) => {\n const filters = array((evt.between[0].filter ??= []));\n if (!filters.includes(filterExpr)) {\n filters.push(filterExpr);\n }\n return on;\n });\n }\n\n selCmpt.project.items.forEach((proj, i) => {\n const channel = proj.channel;\n if (channel !== X && channel !== Y) {\n warn('Interval selections only support x and y encoding channels.');\n return;\n }\n\n const val = init ? init[i] : null;\n const cs = channelSignals(model, selCmpt, proj, val);\n const dname = proj.signals.data;\n const vname = proj.signals.visual;\n const scaleName = stringValue(model.scaleName(channel));\n const scaleType = model.getScaleComponent(channel).get('type');\n const toNum = hasContinuousDomain(scaleType) ? '+' : '';\n\n signals.push(...cs);\n dataSignals.push(dname);\n\n scaleTriggers.push({\n scaleName: model.scaleName(channel),\n expr:\n `(!isArray(${dname}) || ` +\n `(${toNum}invert(${scaleName}, ${vname})[0] === ${toNum}${dname}[0] && ` +\n `${toNum}invert(${scaleName}, ${vname})[1] === ${toNum}${dname}[1]))`\n });\n });\n\n // Proxy scale reactions to ensure that an infinite loop doesn't occur\n // when an interval selection filter touches the scale.\n if (!hasScales) {\n signals.push({\n name: name + SCALE_TRIGGER,\n value: {},\n on: [\n {\n events: scaleTriggers.map(t => ({scale: t.scaleName})),\n update: `${scaleTriggers.map(t => t.expr).join(' && ')} ? ${name + SCALE_TRIGGER} : {}`\n }\n ]\n });\n }\n\n // Only add an interval to the store if it has valid data extents. Data extents\n // are set to null if pixel extents are equal to account for intervals over\n // ordinal/nominal domains which, when inverted, will still produce a valid datum.\n const update = `unit: ${unitName(model)}, fields: ${fieldsSg}, values`;\n return signals.concat({\n name: name + TUPLE,\n ...(init ? {init: `{${update}: ${assembleInit(init)}}`} : {}),\n on: [\n {\n events: [{signal: dataSignals.join(' || ')}], // Prevents double invocation, see https://github.com/vega/vega#1672.\n update: `${dataSignals.join(' && ')} ? {${update}: [${dataSignals}]} : null`\n }\n ]\n });\n },\n\n marks: (model, selCmpt, marks) => {\n const name = selCmpt.name;\n const {x, y} = selCmpt.project.hasChannel;\n const xvname = x && x.signals.visual;\n const yvname = y && y.signals.visual;\n const store = `data(${stringValue(selCmpt.name + STORE)})`;\n\n // Do not add a brush if we're binding to scales.\n if (scales.defined(selCmpt)) {\n return marks;\n }\n\n const update: any = {\n x: x !== undefined ? {signal: `${xvname}[0]`} : {value: 0},\n y: y !== undefined ? {signal: `${yvname}[0]`} : {value: 0},\n x2: x !== undefined ? {signal: `${xvname}[1]`} : {field: {group: 'width'}},\n y2: y !== undefined ? {signal: `${yvname}[1]`} : {field: {group: 'height'}}\n };\n\n // If the selection is resolved to global, only a single interval is in\n // the store. Wrap brush mark's encodings with a production rule to test\n // this based on the `unit` property. Hide the brush mark if it corresponds\n // to a unit different from the one in the store.\n if (selCmpt.resolve === 'global') {\n for (const key of keys(update)) {\n update[key] = [\n {\n test: `${store}.length && ${store}[0].unit === ${unitName(model)}`,\n ...update[key]\n },\n {value: 0}\n ];\n }\n }\n\n // Two brush marks ensure that fill colors and other aesthetic choices do\n // not interefere with the core marks, but that the brushed region can still\n // be interacted with (e.g., dragging it around).\n const {fill, fillOpacity, cursor, ...stroke} = selCmpt.mark;\n const vgStroke = keys(stroke).reduce((def, k) => {\n def[k] = [\n {\n test: [x !== undefined && `${xvname}[0] !== ${xvname}[1]`, y !== undefined && `${yvname}[0] !== ${yvname}[1]`]\n .filter(t => t)\n .join(' && '),\n value: stroke[k]\n },\n {value: null}\n ];\n return def;\n }, {});\n\n return [\n {\n name: `${name + BRUSH}_bg`,\n type: 'rect',\n clip: true,\n encode: {\n enter: {\n fill: {value: fill},\n fillOpacity: {value: fillOpacity}\n },\n update: update\n }\n },\n ...marks,\n {\n name: name + BRUSH,\n type: 'rect',\n clip: true,\n encode: {\n enter: {\n ...(cursor ? {cursor: {value: cursor}} : {}),\n fill: {value: 'transparent'}\n },\n update: {...update, ...vgStroke}\n }\n }\n ];\n }\n};\nexport default interval;\n\n/**\n * Returns the visual and data signals for an interval selection.\n */\nfunction channelSignals(\n model: UnitModel,\n selCmpt: SelectionComponent<'interval'>,\n proj: SelectionProjection,\n init?: SelectionInitInterval\n): NewSignal[] {\n const channel = proj.channel;\n const vname = proj.signals.visual;\n const dname = proj.signals.data;\n const hasScales = scales.defined(selCmpt);\n const scaleName = stringValue(model.scaleName(channel));\n const scale = model.getScaleComponent(channel as ScaleChannel);\n const scaleType = scale ? scale.get('type') : undefined;\n const scaled = (str: string) => `scale(${scaleName}, ${str})`;\n const size = model.getSizeSignalRef(channel === X ? 'width' : 'height').signal;\n const coord = `${channel}(unit)`;\n\n const on = events(selCmpt, (def: OnEvent[], evt: Stream) => {\n return [\n ...def,\n {events: evt.between[0], update: `[${coord}, ${coord}]`}, // Brush Start\n {events: evt, update: `[${vname}[0], clamp(${coord}, 0, ${size})]`} // Brush End\n ];\n });\n\n // React to pan/zooms of continuous scales. Non-continuous scales\n // (band, point) cannot be pan/zoomed and any other changes\n // to their domains (e.g., filtering) should clear the brushes.\n on.push({\n events: {signal: selCmpt.name + SCALE_TRIGGER},\n update: hasContinuousDomain(scaleType) ? `[${scaled(`${dname}[0]`)}, ${scaled(`${dname}[1]`)}]` : `[0, 0]`\n });\n\n return hasScales\n ? [{name: dname, on: []}]\n : [\n {\n name: vname,\n ...(init ? {init: assembleInit(init, true, scaled)} : {value: []}),\n on: on\n },\n {\n name: dname,\n ...(init ? {init: assembleInit(init)} : {}), // Cannot be `value` as `init` may require datetime exprs.\n on: [\n {\n events: {signal: vname},\n update: `${vname}[0] === ${vname}[1] ? null : invert(${scaleName}, ${vname})`\n }\n ]\n }\n ];\n}\n\nfunction events(selCmpt: SelectionComponent<'interval'>, cb: (def: OnEvent[], evt: Stream) => OnEvent[]): OnEvent[] {\n return selCmpt.events.reduce((on, evt) => {\n if (!evt.between) {\n warn(`${evt} is not an ordered event stream for interval selections.`);\n return on;\n }\n return cb(on, evt);\n }, [] as OnEvent[]);\n}\n","import {Stream} from 'vega';\nimport {stringValue} from 'vega-util';\nimport {SelectionCompiler, TUPLE, unitName} from '.';\nimport {TUPLE_FIELDS} from './project';\n\nconst point: SelectionCompiler<'point'> = {\n defined: selCmpt => selCmpt.type === 'point',\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const fieldsSg = name + TUPLE_FIELDS;\n const project = selCmpt.project;\n const datum = '(item().isVoronoi ? datum.datum : datum)';\n const values = project.items\n .map(p => {\n const fieldDef = model.fieldDef(p.channel);\n // Binned fields should capture extents, for a range test against the raw field.\n return fieldDef && fieldDef.bin\n ? `[${datum}[${stringValue(model.vgField(p.channel, {}))}], ` +\n `${datum}[${stringValue(model.vgField(p.channel, {binSuffix: 'end'}))}]]`\n : `${datum}[${stringValue(p.field)}]`;\n })\n .join(', ');\n\n // Only add a discrete selection to the store if a datum is present _and_\n // the interaction isn't occurring on a group mark. This guards against\n // polluting interactive state with invalid values in faceted displays\n // as the group marks are also data-driven. We force the update to account\n // for constant null states but varying toggles (e.g., shift-click in\n // whitespace followed by a click in whitespace; the store should only\n // be cleared on the second click).\n const update = `unit: ${unitName(model)}, fields: ${fieldsSg}, values`;\n\n const events: Stream[] = selCmpt.events;\n\n return signals.concat([\n {\n name: name + TUPLE,\n on: events\n ? [\n {\n events,\n update: `datum && item().mark.marktype !== 'group' ? {${update}: [${values}]} : null`,\n force: true\n }\n ]\n : []\n }\n ]);\n }\n};\n\nexport default point;\n","import {array} from 'vega-util';\nimport {ChannelDef, ConditionalPredicate, isConditionalDef, isConditionalParameter} from '../../../channeldef';\nimport {GuideEncodingConditionalValueDef} from '../../../guide';\nimport {VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {expression} from '../../predicate';\nimport {parseSelectionPredicate} from '../../selection/parse';\nimport {UnitModel} from '../../unit';\n\n/**\n * Return a mixin that includes a Vega production rule for a Vega-Lite conditional channel definition\n * or a simple mixin if channel def has no condition.\n */\nexport function wrapCondition(\n model: UnitModel,\n channelDef: CD,\n vgChannel: string,\n refFn: (cDef: CD) => VgValueRef\n): VgEncodeEntry {\n const condition = isConditionalDef(channelDef) && channelDef.condition;\n const valueRef = refFn(channelDef);\n if (condition) {\n const conditions = array(condition);\n const vgConditions = conditions.map(c => {\n const conditionValueRef = refFn(c);\n if (isConditionalParameter(c)) {\n const {param, empty} = c;\n const test = parseSelectionPredicate(model, {param, empty});\n return {test, ...conditionValueRef};\n } else {\n const test = expression(model, (c as ConditionalPredicate).test); // FIXME: remove casting once TS is no longer dumb about it\n return {test, ...conditionValueRef};\n }\n });\n return {\n [vgChannel]: [...vgConditions, ...(valueRef !== undefined ? [valueRef] : [])]\n };\n } else {\n return valueRef !== undefined ? {[vgChannel]: valueRef} : {};\n }\n}\n","import {getFormatMixins, isFieldOrDatumDef, isValueDef} from '../../../channeldef';\nimport {Config} from '../../../config';\nimport {Encoding} from '../../../encoding';\nimport {VgValueRef} from '../../../vega.schema';\nimport {signalOrValueRef} from '../../common';\nimport {formatSignalRef} from '../../format';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\n\nexport function text(model: UnitModel, channel: 'text' | 'href' | 'url' | 'description' = 'text') {\n const channelDef = model.encoding[channel];\n return wrapCondition(model, channelDef, channel, cDef => textRef(cDef, model.config));\n}\n\nexport function textRef(\n channelDef: Encoding['text' | 'tooltip'],\n config: Config,\n expr: 'datum' | 'datum.datum' = 'datum'\n): VgValueRef {\n // text\n if (channelDef) {\n if (isValueDef(channelDef)) {\n return signalOrValueRef(channelDef.value);\n }\n if (isFieldOrDatumDef(channelDef)) {\n const {format, formatType} = getFormatMixins(channelDef);\n return formatSignalRef({fieldOrDatumDef: channelDef, format, formatType, expr, config});\n }\n }\n return undefined;\n}\n","import {array, isArray, isObject, isString} from 'vega-util';\nimport {isBinned} from '../../../bin';\nimport {getMainRangeChannel, isXorY, Channel} from '../../../channel';\nimport {\n defaultTitle,\n getFieldDef,\n getFormatMixins,\n hasConditionalFieldDef,\n isFieldDef,\n isTypedFieldDef,\n SecondaryFieldDef,\n TypedFieldDef,\n vgField\n} from '../../../channeldef';\nimport {Config} from '../../../config';\nimport {Encoding, forEach} from '../../../encoding';\nimport {StackProperties} from '../../../stack';\nimport {entries} from '../../../util';\nimport {isSignalRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig} from '../../common';\nimport {binFormatExpression, formatSignalRef} from '../../format';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\nimport {textRef} from './text';\n\nexport function tooltip(model: UnitModel, opt: {reactiveGeom?: boolean} = {}) {\n const {encoding, markDef, config, stack} = model;\n const channelDef = encoding.tooltip;\n if (isArray(channelDef)) {\n return {tooltip: tooltipRefForEncoding({tooltip: channelDef}, stack, config, opt)};\n } else {\n const datum = opt.reactiveGeom ? 'datum.datum' : 'datum';\n return wrapCondition(model, channelDef, 'tooltip', cDef => {\n // use valueRef based on channelDef first\n const tooltipRefFromChannelDef = textRef(cDef, config, datum);\n if (tooltipRefFromChannelDef) {\n return tooltipRefFromChannelDef;\n }\n\n if (cDef === null) {\n // Allow using encoding.tooltip = null to disable tooltip\n return undefined;\n }\n\n let markTooltip = getMarkPropOrConfig('tooltip', markDef, config);\n\n if (markTooltip === true) {\n markTooltip = {content: 'encoding'};\n }\n\n if (isString(markTooltip)) {\n return {value: markTooltip};\n } else if (isObject(markTooltip)) {\n // `tooltip` is `{fields: 'encodings' | 'fields'}`\n if (isSignalRef(markTooltip)) {\n return markTooltip;\n } else if (markTooltip.content === 'encoding') {\n return tooltipRefForEncoding(encoding, stack, config, opt);\n } else {\n return {signal: datum};\n }\n }\n\n return undefined;\n });\n }\n}\n\nexport function tooltipData(\n encoding: Encoding,\n stack: StackProperties,\n config: Config,\n {reactiveGeom}: {reactiveGeom?: boolean} = {}\n) {\n const toSkip = {};\n const expr = reactiveGeom ? 'datum.datum' : 'datum';\n const tuples: {channel: Channel; key: string; value: string}[] = [];\n\n function add(fDef: TypedFieldDef | SecondaryFieldDef, channel: Channel) {\n const mainChannel = getMainRangeChannel(channel);\n\n const fieldDef: TypedFieldDef = isTypedFieldDef(fDef)\n ? fDef\n : {\n ...fDef,\n type: (encoding[mainChannel] as TypedFieldDef).type // for secondary field def, copy type from main channel\n };\n\n const title = fieldDef.title || defaultTitle(fieldDef, config);\n const key = array(title).join(', ');\n\n let value: string;\n\n if (isXorY(channel)) {\n const channel2 = channel === 'x' ? 'x2' : 'y2';\n const fieldDef2 = getFieldDef(encoding[channel2]);\n\n if (isBinned(fieldDef.bin) && fieldDef2) {\n const startField = vgField(fieldDef, {expr});\n const endField = vgField(fieldDef2, {expr});\n const {format, formatType} = getFormatMixins(fieldDef);\n value = binFormatExpression(startField, endField, format, formatType, config);\n toSkip[channel2] = true;\n } else if (stack && stack.fieldChannel === channel && stack.offset === 'normalize') {\n const {format, formatType} = getFormatMixins(fieldDef);\n value = formatSignalRef({fieldOrDatumDef: fieldDef, format, formatType, expr, config, normalizeStack: true})\n .signal;\n }\n }\n\n value ??= textRef(fieldDef, config, expr).signal;\n\n tuples.push({channel, key, value});\n }\n\n forEach(encoding, (channelDef, channel) => {\n if (isFieldDef(channelDef)) {\n add(channelDef, channel);\n } else if (hasConditionalFieldDef(channelDef)) {\n add(channelDef.condition, channel);\n }\n });\n\n const out = {};\n for (const {channel, key, value} of tuples) {\n if (!toSkip[channel] && !out[key]) {\n out[key] = value;\n }\n }\n\n return out;\n}\n\nexport function tooltipRefForEncoding(\n encoding: Encoding,\n stack: StackProperties,\n config: Config,\n {reactiveGeom}: {reactiveGeom?: boolean} = {}\n) {\n const data = tooltipData(encoding, stack, config, {reactiveGeom});\n\n const keyValues = entries(data).map(([key, value]) => `\"${key}\": ${value}`);\n return keyValues.length > 0 ? {signal: `{${keyValues.join(', ')}}`} : undefined;\n}\n","import {entries, isEmpty} from '../../../util';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {VG_MARK_INDEX} from './../../../vega.schema';\nimport {UnitModel} from './../../unit';\nimport {wrapCondition} from './conditional';\nimport {textRef} from './text';\nimport {tooltipData} from './tooltip';\n\nexport function aria(model: UnitModel) {\n const {markDef, config} = model;\n\n const enableAria = getMarkPropOrConfig('aria', markDef, config);\n\n // We can ignore other aria properties if ariaHidden is true.\n if (enableAria === false) {\n // getMarkGroups sets aria to false already so we don't have to set it in the encode block\n return {};\n }\n\n return {\n ...(enableAria ? {aria: enableAria} : {}),\n ...ariaRoleDescription(model),\n ...description(model)\n };\n}\n\nfunction ariaRoleDescription(model: UnitModel) {\n const {mark, markDef, config} = model;\n\n if (config.aria === false) {\n return {};\n }\n\n const ariaRoleDesc = getMarkPropOrConfig('ariaRoleDescription', markDef, config);\n\n if (ariaRoleDesc != null) {\n return {ariaRoleDescription: {value: ariaRoleDesc}};\n }\n\n return mark in VG_MARK_INDEX ? {} : {ariaRoleDescription: {value: mark}};\n}\n\nexport function description(model: UnitModel) {\n const {encoding, markDef, config, stack} = model;\n const channelDef = encoding.description;\n\n if (channelDef) {\n return wrapCondition(model, channelDef, 'description', cDef => textRef(cDef, model.config));\n }\n\n // Use default from mark def or config if defined.\n // Functions in encode usually just return undefined but since we are defining a default below, we need to check the default here.\n const descriptionValue = getMarkPropOrConfig('description', markDef, config);\n if (descriptionValue != null) {\n return {\n description: signalOrValueRef(descriptionValue)\n };\n }\n\n if (config.aria === false) {\n return {};\n }\n\n const data = tooltipData(encoding, stack, config);\n\n if (isEmpty(data)) {\n return undefined;\n }\n\n return {\n description: {\n signal: entries(data)\n .map(([key, value], index) => `\"${index > 0 ? '; ' : ''}${key}: \" + (${value})`)\n .join(' + ')\n }\n };\n}\n","import {SignalRef} from 'vega';\nimport {NonPositionScaleChannel} from '../../../channel';\nimport {Value} from '../../../channeldef';\nimport {VgEncodeChannel, VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\nimport * as ref from './valueref';\n\n/**\n * Return encode for non-positional channels with scales. (Text doesn't have scale.)\n */\nexport function nonPosition(\n channel: NonPositionScaleChannel,\n model: UnitModel,\n opt: {\n defaultValue?: Value | SignalRef;\n vgChannel?: VgEncodeChannel;\n defaultRef?: VgValueRef;\n } = {}\n): VgEncodeEntry {\n const {markDef, encoding, config} = model;\n const {vgChannel} = opt;\n let {defaultRef, defaultValue} = opt;\n\n if (defaultRef === undefined) {\n // prettier-ignore\n defaultValue ??= getMarkPropOrConfig(channel, markDef, config, {vgChannel, ignoreVgConfig: true});\n\n if (defaultValue !== undefined) {\n defaultRef = signalOrValueRef(defaultValue);\n }\n }\n\n const channelDef = encoding[channel];\n\n return wrapCondition(model, channelDef, vgChannel ?? channel, cDef => {\n return ref.midPoint({\n channel,\n channelDef: cDef,\n markDef,\n config,\n scaleName: model.scaleName(channel),\n scale: model.getScaleComponent(channel),\n stack: null, // No need to provide stack for non-position as it does not affect mid point\n defaultRef\n });\n });\n}\n","import * as log from '../../../log';\nimport {contains} from '../../../util';\nimport {VgEncodeEntry} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {nonPosition} from './nonposition';\n\nexport function color(model: UnitModel, opt: {filled: boolean | undefined} = {filled: undefined}): VgEncodeEntry {\n const {markDef, encoding, config} = model;\n const {type: markType} = markDef;\n\n // Allow filled to be overridden (for trail's \"filled\")\n const filled = opt.filled ?? getMarkPropOrConfig('filled', markDef, config);\n\n const transparentIfNeeded = contains(['bar', 'point', 'circle', 'square', 'geoshape'], markType)\n ? 'transparent'\n : undefined;\n\n const defaultFill =\n getMarkPropOrConfig(filled === true ? 'color' : undefined, markDef, config, {vgChannel: 'fill'}) ??\n // need to add this manually as getMarkConfig normally drops config.mark[channel] if vgChannel is specified\n config.mark[filled === true && 'color'] ??\n // If there is no fill, always fill symbols, bar, geoshape\n // with transparent fills https://github.com/vega/vega-lite/issues/1316\n transparentIfNeeded;\n\n const defaultStroke =\n getMarkPropOrConfig(filled === false ? 'color' : undefined, markDef, config, {vgChannel: 'stroke'}) ??\n // need to add this manually as getMarkConfig normally drops config.mark[channel] if vgChannel is specified\n config.mark[filled === false && 'color'];\n\n const colorVgChannel = filled ? 'fill' : 'stroke';\n\n const fillStrokeMarkDefAndConfig: VgEncodeEntry = {\n ...(defaultFill ? {fill: signalOrValueRef(defaultFill)} : {}),\n ...(defaultStroke ? {stroke: signalOrValueRef(defaultStroke)} : {})\n };\n\n if (markDef.color && (filled ? markDef.fill : markDef.stroke)) {\n log.warn(log.message.droppingColor('property', {fill: 'fill' in markDef, stroke: 'stroke' in markDef}));\n }\n\n return {\n ...fillStrokeMarkDefAndConfig,\n ...nonPosition('color', model, {\n vgChannel: colorVgChannel,\n defaultValue: filled ? defaultFill : defaultStroke\n }),\n ...nonPosition('fill', model, {\n // if there is encoding.fill, include default fill just in case we have conditional-only fill encoding\n defaultValue: encoding.fill ? defaultFill : undefined\n }),\n ...nonPosition('stroke', model, {\n // if there is encoding.stroke, include default fill just in case we have conditional-only stroke encoding\n defaultValue: encoding.stroke ? defaultStroke : undefined\n })\n };\n}\n","import {isValueDef} from '../../../channeldef';\nimport {isPathMark} from '../../../mark';\nimport {signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\n\nexport function zindex(model: UnitModel) {\n const {encoding, mark} = model;\n const order = encoding.order;\n\n if (!isPathMark(mark) && isValueDef(order)) {\n return wrapCondition(model, order, 'zindex', cd => signalOrValueRef(cd.value));\n }\n return {};\n}\n","/**\n * Utility files for producing Vega ValueRef for marks\n */\nimport {SignalRef} from 'vega';\nimport {getOffsetChannel, PolarPositionChannel, PositionChannel} from '../../../channel';\nimport {Mark, MarkDef} from '../../../mark';\n\nexport function getOffset(\n channel: PositionChannel | PolarPositionChannel,\n markDef: MarkDef\n): number | SignalRef {\n const offsetChannel = getOffsetChannel(channel);\n\n // TODO: in the future read from encoding channel too\n const markDefOffsetValue = markDef[offsetChannel];\n if (markDefOffsetValue) {\n return markDefOffsetValue;\n }\n\n return undefined;\n}\n","import {\n getMainRangeChannel,\n getSecondaryRangeChannel,\n getSizeChannel,\n getVgPositionChannel,\n isXorY,\n PolarPositionChannel,\n PositionChannel\n} from '../../../channel';\nimport {isFieldDef, isFieldOrDatumDef, TypedFieldDef} from '../../../channeldef';\nimport {ScaleType} from '../../../scale';\nimport {contains} from '../../../util';\nimport {VgValueRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig} from '../../common';\nimport {ScaleComponent} from '../../scale/component';\nimport {UnitModel} from '../../unit';\nimport {getOffset} from './offset';\nimport * as ref from './valueref';\n\n/**\n * Return encode for point (non-band) position channels.\n */\nexport function pointPosition(\n channel: 'x' | 'y' | 'theta' | 'radius',\n model: UnitModel,\n {\n defaultPos,\n vgChannel\n }: {\n defaultPos: 'mid' | 'zeroOrMin' | 'zeroOrMax' | null;\n vgChannel?: 'x' | 'y' | 'xc' | 'yc';\n }\n) {\n const {encoding, markDef, config, stack} = model;\n\n const channelDef = encoding[channel];\n const channel2Def = encoding[getSecondaryRangeChannel(channel)];\n const scaleName = model.scaleName(channel);\n const scale = model.getScaleComponent(channel);\n\n const offset = getOffset(channel, markDef);\n\n // Get default position or position from mark def\n const defaultRef = pointPositionDefaultRef({\n model,\n defaultPos,\n channel,\n scaleName,\n scale\n });\n\n const valueRef =\n !channelDef && isXorY(channel) && (encoding.latitude || encoding.longitude)\n ? // use geopoint output if there are lat/long and there is no point position overriding lat/long.\n {field: model.getName(channel)}\n : positionRef({\n channel,\n channelDef,\n channel2Def,\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef\n });\n\n return valueRef ? {[vgChannel || channel]: valueRef} : undefined;\n}\n\n// TODO: we need to find a way to refactor these so that scaleName is a part of scale\n// but that's complicated. For now, this is a huge step moving forward.\n\n/**\n * @return Vega ValueRef for normal x- or y-position without projection\n */\nexport function positionRef(\n params: ref.MidPointParams & {\n channel: 'x' | 'y' | 'radius' | 'theta';\n }\n): VgValueRef | VgValueRef[] {\n const {channel, channelDef, scaleName, stack, offset, markDef} = params;\n\n // This isn't a part of midPoint because we use midPoint for non-position too\n if (isFieldOrDatumDef(channelDef) && stack && channel === stack.fieldChannel) {\n if (isFieldDef(channelDef)) {\n let bandPosition = channelDef.bandPosition;\n\n if (bandPosition === undefined && markDef.type === 'text' && (channel === 'radius' || channel === 'theta')) {\n // theta and radius of text mark should use bandPosition = 0.5 by default\n // so that labels for arc marks are centered automatically\n bandPosition = 0.5;\n }\n\n if (bandPosition !== undefined) {\n return ref.interpolatedSignalRef({\n scaleName,\n fieldOrDatumDef: channelDef as TypedFieldDef, // positionRef always have type\n startSuffix: 'start',\n bandPosition,\n offset\n });\n }\n }\n // x or y use stack_end so that stacked line's point mark use stack_end too.\n return ref.valueRefForFieldOrDatumDef(channelDef, scaleName, {suffix: 'end'}, {offset});\n }\n\n return ref.midPointRefWithPositionInvalidTest(params);\n}\n\nexport function pointPositionDefaultRef({\n model,\n defaultPos,\n channel,\n scaleName,\n scale\n}: {\n model: UnitModel;\n defaultPos: 'mid' | 'zeroOrMin' | 'zeroOrMax' | null;\n channel: PositionChannel | PolarPositionChannel;\n scaleName: string;\n scale: ScaleComponent;\n}): () => VgValueRef {\n const {markDef, config} = model;\n return () => {\n const mainChannel = getMainRangeChannel(channel);\n const vgChannel = getVgPositionChannel(channel);\n\n const definedValueOrConfig = getMarkPropOrConfig(channel, markDef, config, {vgChannel});\n if (definedValueOrConfig !== undefined) {\n return ref.widthHeightValueOrSignalRef(channel, definedValueOrConfig);\n }\n\n switch (defaultPos) {\n case 'zeroOrMin':\n case 'zeroOrMax':\n if (scaleName) {\n const scaleType = scale.get('type');\n if (contains([ScaleType.LOG, ScaleType.TIME, ScaleType.UTC], scaleType)) {\n // Log scales cannot have zero.\n // Zero in time scale is arbitrary, and does not affect ratio.\n // (Time is an interval level of measurement, not ratio).\n // See https://en.wikipedia.org/wiki/Level_of_measurement for more info.\n } else {\n if (scale.domainDefinitelyIncludesZero()) {\n return {\n scale: scaleName,\n value: 0\n };\n }\n }\n }\n\n if (defaultPos === 'zeroOrMin') {\n return mainChannel === 'y' ? {field: {group: 'height'}} : {value: 0};\n } else {\n // zeroOrMax\n switch (mainChannel) {\n case 'radius':\n // max of radius is min(width, height) / 2\n return {\n signal: `min(${model.width.signal},${model.height.signal})/2`\n };\n case 'theta':\n return {signal: '2*PI'};\n case 'x':\n return {field: {group: 'width'}};\n case 'y':\n return {value: 0};\n }\n }\n break;\n case 'mid': {\n const sizeRef = model[getSizeChannel(channel)];\n return {...sizeRef, mult: 0.5};\n }\n }\n // defaultPos === null\n return undefined;\n };\n}\n","import {Align, SignalRef, TextBaseline} from 'vega';\nimport {getVgPositionChannel} from '../../../channel';\nimport {Config} from '../../../config';\nimport * as log from '../../../log';\nimport {Mark, MarkDef} from '../../../mark';\nimport {isSignalRef, VgEncodeChannel} from '../../../vega.schema';\nimport {getMarkPropOrConfig} from '../../common';\n\nconst ALIGNED_X_CHANNEL: Record = {\n left: 'x',\n center: 'xc',\n right: 'x2'\n};\n\nconst BASELINED_Y_CHANNEL = {\n top: 'y',\n middle: 'yc',\n bottom: 'y2'\n};\n\nexport function vgAlignedPositionChannel(\n channel: 'x' | 'y' | 'radius' | 'theta',\n markDef: MarkDef,\n config: Config,\n defaultAlign: 'top' | 'middle' = 'middle'\n) {\n if (channel === 'radius' || channel === 'theta') {\n return getVgPositionChannel(channel);\n }\n const alignChannel = channel === 'x' ? 'align' : 'baseline';\n const align = getMarkPropOrConfig(alignChannel, markDef, config);\n\n let alignExcludingSignal: Align | TextBaseline;\n\n if (isSignalRef(align)) {\n log.warn(log.message.rangeMarkAlignmentCannotBeExpression(alignChannel));\n alignExcludingSignal = undefined;\n } else {\n alignExcludingSignal = align;\n }\n\n if (channel === 'x') {\n return ALIGNED_X_CHANNEL[alignExcludingSignal || (defaultAlign === 'top' ? 'left' : 'center')];\n } else {\n return BASELINED_Y_CHANNEL[alignExcludingSignal || defaultAlign];\n }\n}\n","import {SignalRef} from 'vega';\nimport {getMainRangeChannel, getSecondaryRangeChannel, getSizeChannel, getVgPositionChannel} from '../../../channel';\nimport {isFieldOrDatumDef} from '../../../channeldef';\nimport * as log from '../../../log';\nimport {isRelativeBandSize, Mark, MarkConfig, MarkDef} from '../../../mark';\nimport {VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {getMarkStyleConfig} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {getOffset} from './offset';\nimport {vgAlignedPositionChannel} from './position-align';\nimport {pointPosition, pointPositionDefaultRef} from './position-point';\nimport * as ref from './valueref';\n\n/**\n * Utility for area/rule position, which can be either point or range.\n * (One of the axes should be point and the other should be range.)\n */\nexport function pointOrRangePosition(\n channel: 'x' | 'y',\n model: UnitModel,\n {\n defaultPos,\n defaultPos2,\n range\n }: {\n defaultPos: 'zeroOrMin' | 'zeroOrMax' | 'mid';\n defaultPos2: 'zeroOrMin' | 'zeroOrMax';\n range: boolean;\n }\n) {\n if (range) {\n return rangePosition(channel, model, {defaultPos, defaultPos2});\n }\n return pointPosition(channel, model, {defaultPos});\n}\n\nexport function rangePosition(\n channel: 'x' | 'y' | 'theta' | 'radius',\n model: UnitModel,\n {\n defaultPos,\n defaultPos2\n }: {\n defaultPos: 'zeroOrMin' | 'zeroOrMax' | 'mid';\n defaultPos2: 'zeroOrMin' | 'zeroOrMax';\n }\n): VgEncodeEntry {\n const {markDef, config} = model;\n const channel2 = getSecondaryRangeChannel(channel);\n const sizeChannel = getSizeChannel(channel);\n\n const pos2Mixins = pointPosition2OrSize(model, defaultPos2, channel2);\n\n const vgChannel = pos2Mixins[sizeChannel]\n ? // If there is width/height, we need to position the marks based on the alignment.\n vgAlignedPositionChannel(channel, markDef, config)\n : // Otherwise, make sure to apply to the right Vg Channel (for arc mark)\n getVgPositionChannel(channel);\n\n return {\n ...pointPosition(channel, model, {defaultPos, vgChannel}),\n ...pos2Mixins\n };\n}\n\n/**\n * Return encode for x2, y2.\n * If channel is not specified, return one channel based on orientation.\n */\nfunction pointPosition2OrSize(\n model: UnitModel,\n defaultPos: 'zeroOrMin' | 'zeroOrMax',\n channel: 'x2' | 'y2' | 'radius2' | 'theta2'\n) {\n const {encoding, mark, markDef, stack, config} = model;\n\n const baseChannel = getMainRangeChannel(channel);\n const sizeChannel = getSizeChannel(channel);\n const vgChannel = getVgPositionChannel(channel);\n\n const channelDef = encoding[baseChannel];\n const scaleName = model.scaleName(baseChannel);\n const scale = model.getScaleComponent(baseChannel);\n\n const offset =\n channel in encoding || channel in markDef\n ? getOffset(channel, model.markDef)\n : getOffset(baseChannel, model.markDef);\n\n if (!channelDef && (channel === 'x2' || channel === 'y2') && (encoding.latitude || encoding.longitude)) {\n const vgSizeChannel = getSizeChannel(channel);\n\n const size = model.markDef[vgSizeChannel];\n if (size != null) {\n return {\n [vgSizeChannel]: {value: size}\n };\n } else {\n return {\n [vgChannel]: {field: model.getName(channel)}\n };\n }\n }\n\n const valueRef = position2Ref({\n channel,\n channelDef,\n channel2Def: encoding[channel],\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef: undefined\n });\n\n if (valueRef !== undefined) {\n return {[vgChannel]: valueRef};\n }\n\n // TODO: check width/height encoding here once we add them\n\n // no x2/y2 encoding, then try to read x2/y2 or width/height based on precedence:\n // markDef > config.style > mark-specific config (config[mark]) > general mark config (config.mark)\n\n return (\n position2orSize(channel, markDef) ||\n position2orSize(channel, {\n [channel]: getMarkStyleConfig(channel, markDef, config.style),\n [sizeChannel]: getMarkStyleConfig(sizeChannel, markDef, config.style)\n }) ||\n position2orSize(channel, config[mark]) ||\n position2orSize(channel, config.mark) || {\n [vgChannel]: pointPositionDefaultRef({\n model,\n defaultPos,\n channel,\n scaleName,\n scale\n })()\n }\n );\n}\n\nexport function position2Ref({\n channel,\n channelDef,\n channel2Def,\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef\n}: ref.MidPointParams & {\n channel: 'x2' | 'y2' | 'radius2' | 'theta2';\n}): VgValueRef | VgValueRef[] {\n if (\n isFieldOrDatumDef(channelDef) &&\n stack &&\n // If fieldChannel is X and channel is X2 (or Y and Y2)\n channel.charAt(0) === stack.fieldChannel.charAt(0)\n ) {\n return ref.valueRefForFieldOrDatumDef(channelDef, scaleName, {suffix: 'start'}, {offset});\n }\n return ref.midPointRefWithPositionInvalidTest({\n channel,\n channelDef: channel2Def,\n scaleName,\n scale,\n stack,\n markDef,\n config,\n offset,\n defaultRef\n });\n}\n\nfunction position2orSize(\n channel: 'x2' | 'y2' | 'radius2' | 'theta2',\n markDef: MarkConfig | MarkDef\n) {\n const sizeChannel = getSizeChannel(channel);\n const vgChannel = getVgPositionChannel(channel);\n if (markDef[vgChannel] !== undefined) {\n return {[vgChannel]: ref.widthHeightValueOrSignalRef(channel, markDef[vgChannel])};\n } else if (markDef[channel] !== undefined) {\n return {[vgChannel]: ref.widthHeightValueOrSignalRef(channel, markDef[channel])};\n } else if (markDef[sizeChannel]) {\n const dimensionSize = markDef[sizeChannel];\n if (isRelativeBandSize(dimensionSize)) {\n log.warn(log.message.relativeBandSizeNotSupported(sizeChannel));\n } else {\n return {[sizeChannel]: ref.widthHeightValueOrSignalRef(channel, dimensionSize)};\n }\n }\n return undefined;\n}\n","import {SignalRef} from 'vega';\nimport {isArray, isNumber} from 'vega-util';\nimport {isBinned, isBinning, isBinParams} from '../../../bin';\nimport {\n getSecondaryRangeChannel,\n getSizeChannel,\n getVgPositionChannel,\n isPolarPositionChannel,\n isXorY,\n PolarPositionChannel,\n PositionChannel\n} from '../../../channel';\nimport {getBandSize, isFieldDef, isFieldOrDatumDef, TypedFieldDef, vgField} from '../../../channeldef';\nimport {Config, getViewConfigDiscreteStep} from '../../../config';\nimport {Encoding} from '../../../encoding';\nimport * as log from '../../../log';\nimport {BandSize, isRelativeBandSize, Mark, MarkDef, RelativeBandSize} from '../../../mark';\nimport {hasDiscreteDomain} from '../../../scale';\nimport {isSignalRef, isVgRangeStep, VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrStringValue, signalOrValueRef} from '../../common';\nimport {ScaleComponent} from '../../scale/component';\nimport {UnitModel} from '../../unit';\nimport {nonPosition} from './nonposition';\nimport {getOffset} from './offset';\nimport {vgAlignedPositionChannel} from './position-align';\nimport {pointPositionDefaultRef} from './position-point';\nimport {rangePosition} from './position-range';\nimport * as ref from './valueref';\n\nexport function rectPosition(\n model: UnitModel,\n channel: 'x' | 'y' | 'theta' | 'radius',\n mark: 'bar' | 'rect' | 'image' | 'arc'\n): VgEncodeEntry {\n const {config, encoding, markDef} = model;\n\n const channel2 = getSecondaryRangeChannel(channel);\n const sizeChannel = getSizeChannel(channel);\n const channelDef = encoding[channel];\n const channelDef2 = encoding[channel2];\n\n const scale = model.getScaleComponent(channel);\n const scaleType = scale ? scale.get('type') : undefined;\n const scaleName = model.scaleName(channel);\n\n const orient = markDef.orient;\n const hasSizeDef =\n encoding[sizeChannel] ?? encoding.size ?? getMarkPropOrConfig('size', markDef, config, {vgChannel: sizeChannel});\n\n const isBarBand = mark === 'bar' && (channel === 'x' ? orient === 'vertical' : orient === 'horizontal');\n\n // x, x2, and width -- we must specify two of these in all conditions\n if (\n isFieldDef(channelDef) &&\n (isBinning(channelDef.bin) || isBinned(channelDef.bin) || (channelDef.timeUnit && !channelDef2)) &&\n !(hasSizeDef && !isRelativeBandSize(hasSizeDef)) &&\n !hasDiscreteDomain(scaleType)\n ) {\n const bandSize = getBandSize({channel, fieldDef: channelDef, markDef, config, scaleType});\n const axis = model.component.axes[channel]?.[0];\n const axisTranslate = axis?.get('translate') ?? 0.5; // vega default is 0.5\n\n return rectBinPosition({\n fieldDef: channelDef,\n fieldDef2: channelDef2,\n channel,\n markDef,\n scaleName,\n bandSize,\n axisTranslate,\n spacing: isXorY(channel) ? getMarkPropOrConfig('binSpacing', markDef, config) : undefined,\n reverse: scale.get('reverse'),\n config\n });\n } else if (((isFieldOrDatumDef(channelDef) && hasDiscreteDomain(scaleType)) || isBarBand) && !channelDef2) {\n return positionAndSize(channelDef, channel, model);\n } else {\n return rangePosition(channel, model, {defaultPos: 'zeroOrMax', defaultPos2: 'zeroOrMin'});\n }\n}\nfunction defaultSizeRef(\n sizeChannel: 'width' | 'height',\n scaleName: string,\n scale: ScaleComponent,\n config: Config,\n bandSize: BandSize\n): VgValueRef {\n if (isRelativeBandSize(bandSize)) {\n if (scale) {\n const scaleType = scale.get('type');\n if (scaleType === 'band') {\n return {scale: scaleName, band: bandSize.band};\n } else if (bandSize.band !== 1) {\n log.warn(log.message.cannotUseRelativeBandSizeWithNonBandScale(scaleType));\n bandSize = undefined;\n }\n } else {\n return {\n mult: bandSize.band,\n field: {group: sizeChannel}\n };\n }\n } else if (isSignalRef(bandSize)) {\n return bandSize;\n } else if (bandSize) {\n return {value: bandSize};\n }\n\n // no valid band size\n if (scale) {\n const scaleRange = scale.get('range');\n if (isVgRangeStep(scaleRange) && isNumber(scaleRange.step)) {\n return {value: scaleRange.step - 2};\n }\n }\n const defaultStep = getViewConfigDiscreteStep(config.view, sizeChannel);\n return {value: defaultStep - 2};\n}\n\n/**\n * Output position encoding and its size encoding for continuous, point, and band scales.\n */\nfunction positionAndSize(\n fieldDef: Encoding['x' | 'y' | 'theta' | 'radius'],\n channel: 'x' | 'y' | 'theta' | 'radius',\n model: UnitModel\n) {\n const {markDef, encoding, config, stack} = model;\n const orient = markDef.orient;\n\n const scaleName = model.scaleName(channel);\n const scale = model.getScaleComponent(channel);\n const vgSizeChannel = getSizeChannel(channel);\n const channel2 = getSecondaryRangeChannel(channel);\n\n // use \"size\" channel for bars, if there is orient and the channel matches the right orientation\n const useVlSizeChannel = (orient === 'horizontal' && channel === 'y') || (orient === 'vertical' && channel === 'x');\n\n // Use size encoding / mark property / config if it exists\n let sizeMixins;\n if (encoding.size || markDef.size) {\n if (useVlSizeChannel) {\n sizeMixins = nonPosition('size', model, {\n vgChannel: vgSizeChannel,\n defaultRef: signalOrValueRef(markDef.size)\n });\n } else {\n log.warn(log.message.cannotApplySizeToNonOrientedMark(markDef.type));\n }\n }\n\n // Otherwise, apply default value\n const bandSize = getBandSize({channel, fieldDef, markDef, config, scaleType: scale?.get('type'), useVlSizeChannel});\n\n sizeMixins = sizeMixins || {[vgSizeChannel]: defaultSizeRef(vgSizeChannel, scaleName, scale, config, bandSize)};\n\n /*\n Band scales with size value and all point scales, use xc/yc + band=0.5\n\n Otherwise (band scales that has size based on a band ref), use x/y with position band = (1 - size_band) / 2.\n In this case, size_band is the band specified in the x/y-encoding.\n By default band is 1, so `(1 - band) / 2` = 0.\n If band is 0.6, the the x/y position in such case should be `(1 - band) / 2` = 0.2\n */\n\n const defaultBandAlign = scale?.get('type') !== 'band' || !('band' in sizeMixins[vgSizeChannel]) ? 'middle' : 'top';\n\n const vgChannel = vgAlignedPositionChannel(channel, markDef, config, defaultBandAlign);\n const center = vgChannel === 'xc' || vgChannel === 'yc';\n const offset = getOffset(channel, markDef);\n\n const posRef = ref.midPointRefWithPositionInvalidTest({\n channel,\n channelDef: fieldDef,\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef: pointPositionDefaultRef({model, defaultPos: 'mid', channel, scaleName, scale}),\n bandPosition: center\n ? 0.5\n : isSignalRef(bandSize)\n ? {signal: `(1-${bandSize})/2`}\n : isRelativeBandSize(bandSize)\n ? (1 - bandSize.band) / 2\n : 0\n });\n\n if (vgSizeChannel) {\n return {[vgChannel]: posRef, ...sizeMixins};\n } else {\n // otherwise, we must simulate size by setting position2 = position + size\n // (for theta/radius since Vega doesn't have thetaWidth/radiusWidth)\n const vgChannel2 = getVgPositionChannel(channel2);\n const sizeRef = sizeMixins[vgSizeChannel];\n const sizeOffset = offset ? {...sizeRef, offset} : sizeRef;\n return {\n [vgChannel]: posRef,\n\n // posRef might be an array that wraps position invalid test\n [vgChannel2]: isArray(posRef)\n ? [posRef[0], {...posRef[1], offset: sizeOffset}]\n : {\n ...posRef,\n offset: sizeOffset\n }\n };\n }\n}\n\nfunction getBinSpacing(\n channel: PositionChannel | PolarPositionChannel,\n spacing: number,\n reverse: boolean | SignalRef,\n translate: number | SignalRef,\n offset: number | SignalRef\n) {\n if (isPolarPositionChannel(channel)) {\n return 0;\n }\n\n const spacingOffset = channel === 'x' || channel === 'y2' ? -spacing / 2 : spacing / 2;\n\n if (isSignalRef(reverse) || isSignalRef(offset) || isSignalRef(translate)) {\n const reverseExpr = signalOrStringValue(reverse);\n const offsetExpr = signalOrStringValue(offset);\n const translateExpr = signalOrStringValue(translate);\n\n const t = translateExpr ? `${translateExpr} + ` : '';\n const r = reverseExpr ? `(${reverseExpr} ? -1 : 1) * ` : '';\n const o = offsetExpr ? `(${offsetExpr} + ${spacingOffset})` : spacingOffset;\n\n return {\n signal: t + r + o\n };\n } else {\n offset = offset || 0;\n return translate + (reverse ? -offset - spacingOffset : +offset + spacingOffset);\n }\n}\n\nexport function rectBinPosition({\n fieldDef,\n fieldDef2,\n channel,\n bandSize,\n scaleName,\n markDef,\n spacing = 0,\n axisTranslate,\n reverse,\n config\n}: {\n fieldDef: TypedFieldDef;\n fieldDef2?: Encoding['x2' | 'y2'];\n channel: 'x' | 'y' | 'theta' | 'radius';\n bandSize: number | RelativeBandSize | SignalRef | undefined;\n scaleName: string;\n markDef: MarkDef;\n spacing?: number;\n axisTranslate: number | SignalRef;\n reverse: boolean | SignalRef;\n config: Config;\n}) {\n const channel2 = getSecondaryRangeChannel(channel);\n\n const vgChannel = getVgPositionChannel(channel);\n const vgChannel2 = getVgPositionChannel(channel2);\n\n const offset = getOffset(channel, markDef);\n\n const bandPosition = isSignalRef(bandSize)\n ? {signal: `(1-${bandSize.signal})/2`}\n : isRelativeBandSize(bandSize)\n ? (1 - bandSize.band) / 2\n : 0.5;\n\n if (isBinning(fieldDef.bin) || fieldDef.timeUnit) {\n return {\n [vgChannel2]: rectBinRef({\n channel,\n fieldDef,\n scaleName,\n markDef,\n bandPosition,\n offset: getBinSpacing(channel2, spacing, reverse, axisTranslate, offset),\n config\n }),\n [vgChannel]: rectBinRef({\n channel,\n fieldDef,\n scaleName,\n markDef,\n bandPosition: isSignalRef(bandPosition) ? {signal: `1-${bandPosition.signal}`} : 1 - bandPosition,\n offset: getBinSpacing(channel, spacing, reverse, axisTranslate, offset),\n config\n })\n };\n } else if (isBinned(fieldDef.bin)) {\n const startRef = ref.valueRefForFieldOrDatumDef(\n fieldDef,\n scaleName,\n {},\n {offset: getBinSpacing(channel2, spacing, reverse, axisTranslate, offset)}\n );\n\n if (isFieldDef(fieldDef2)) {\n return {\n [vgChannel2]: startRef,\n [vgChannel]: ref.valueRefForFieldOrDatumDef(\n fieldDef2,\n scaleName,\n {},\n {offset: getBinSpacing(channel, spacing, reverse, axisTranslate, offset)}\n )\n };\n } else if (isBinParams(fieldDef.bin) && fieldDef.bin.step) {\n return {\n [vgChannel2]: startRef,\n [vgChannel]: {\n signal: `scale(\"${scaleName}\", ${vgField(fieldDef, {expr: 'datum'})} + ${fieldDef.bin.step})`,\n offset: getBinSpacing(channel, spacing, reverse, axisTranslate, offset)\n }\n };\n }\n }\n log.warn(log.message.channelRequiredForBinned(channel2));\n return undefined;\n}\n\n/**\n * Value Ref for binned fields\n */\nexport function rectBinRef({\n channel,\n fieldDef,\n scaleName,\n markDef,\n bandPosition,\n offset,\n config\n}: {\n channel: PositionChannel | PolarPositionChannel;\n fieldDef: TypedFieldDef;\n scaleName: string;\n markDef: MarkDef;\n bandPosition: number | SignalRef;\n offset?: number | SignalRef;\n config?: Config;\n}) {\n const r = ref.interpolatedSignalRef({\n scaleName,\n fieldOrDatumDef: fieldDef,\n bandPosition,\n offset\n });\n\n return ref.wrapPositionInvalidTest({\n fieldDef,\n channel,\n markDef,\n ref: r,\n config\n });\n}\n","import {array} from 'vega-util';\nimport {Channel, ScaleChannel, SCALE_CHANNELS} from '../../../channel';\nimport {isPathMark, MarkDef} from '../../../mark';\nimport {hasContinuousDomain} from '../../../scale';\nimport {Dict, keys} from '../../../util';\nimport {VgEncodeEntry, VgValueRef, VG_MARK_CONFIGS} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {aria} from './aria';\nimport {color} from './color';\nimport {nonPosition} from './nonposition';\nimport {text} from './text';\nimport {tooltip} from './tooltip';\nimport {fieldInvalidPredicate} from './valueref';\nimport {zindex} from './zindex';\n\nexport {color} from './color';\nexport {wrapCondition} from './conditional';\nexport {nonPosition} from './nonposition';\nexport {pointPosition} from './position-point';\nexport {pointOrRangePosition, rangePosition} from './position-range';\nexport {rectPosition} from './position-rect';\nexport {text} from './text';\nexport {tooltip} from './tooltip';\n\nexport type Ignore = Record<'color' | 'size' | 'orient' | 'align' | 'baseline' | 'theta', 'ignore' | 'include'>;\n\nconst ALWAYS_IGNORE = new Set(['aria', 'width', 'height']);\n\nexport function baseEncodeEntry(model: UnitModel, ignore: Ignore) {\n const {fill = undefined, stroke = undefined} = ignore.color === 'include' ? color(model) : {};\n return {\n ...markDefProperties(model.markDef, ignore),\n ...wrapAllFieldsInvalid(model, 'fill', fill),\n ...wrapAllFieldsInvalid(model, 'stroke', stroke),\n ...nonPosition('opacity', model),\n ...nonPosition('fillOpacity', model),\n ...nonPosition('strokeOpacity', model),\n ...nonPosition('strokeWidth', model),\n ...nonPosition('strokeDash', model),\n ...zindex(model),\n ...tooltip(model),\n ...text(model, 'href'),\n ...aria(model)\n };\n}\n\n// TODO: mark VgValueRef[] as readonly after https://github.com/vega/vega/pull/1987\nfunction wrapAllFieldsInvalid(model: UnitModel, channel: Channel, valueRef: VgValueRef | VgValueRef[]): VgEncodeEntry {\n const {config, mark, markDef} = model;\n\n const invalid = getMarkPropOrConfig('invalid', markDef, config);\n\n if (invalid === 'hide' && valueRef && !isPathMark(mark)) {\n // For non-path marks, we have to exclude invalid values (null and NaN) for scales with continuous domains.\n // For path marks, we will use \"defined\" property and skip these values instead.\n const test = allFieldsInvalidPredicate(model, {invalid: true, channels: SCALE_CHANNELS});\n if (test) {\n return {\n [channel]: [\n // prepend the invalid case\n // TODO: support custom value\n {test, value: null},\n ...array(valueRef)\n ]\n };\n }\n }\n return valueRef ? {[channel]: valueRef} : {};\n}\n\nfunction markDefProperties(mark: MarkDef, ignore: Ignore) {\n return VG_MARK_CONFIGS.reduce((m, prop) => {\n if (!ALWAYS_IGNORE.has(prop) && mark[prop] !== undefined && ignore[prop] !== 'ignore') {\n m[prop] = signalOrValueRef(mark[prop]);\n }\n return m;\n }, {});\n}\n\nfunction allFieldsInvalidPredicate(\n model: UnitModel,\n {invalid = false, channels}: {invalid?: boolean; channels: ScaleChannel[]}\n) {\n const filterIndex = channels.reduce((aggregator: Dict, channel) => {\n const scaleComponent = model.getScaleComponent(channel);\n if (scaleComponent) {\n const scaleType = scaleComponent.get('type');\n const field = model.vgField(channel, {expr: 'datum'});\n\n // While discrete domain scales can handle invalid values, continuous scales can't.\n if (field && hasContinuousDomain(scaleType)) {\n aggregator[field] = true;\n }\n }\n return aggregator;\n }, {});\n\n const fields = keys(filterIndex);\n if (fields.length > 0) {\n const op = invalid ? '||' : '&&';\n return fields.map(field => fieldInvalidPredicate(field, invalid)).join(` ${op} `);\n }\n return undefined;\n}\n","import {POSITION_SCALE_CHANNELS} from '../../../channel';\nimport {ScaleChannel} from '../../../channel';\nimport {Value} from '../../../channeldef';\nimport {hasContinuousDomain} from '../../../scale';\nimport {Dict, keys} from '../../../util';\nimport {VgEncodeEntry} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {fieldInvalidPredicate} from './valueref';\n\nexport function defined(model: UnitModel): VgEncodeEntry {\n const {config, markDef} = model;\n\n const invalid = getMarkPropOrConfig('invalid', markDef, config);\n if (invalid) {\n const signal = allFieldsInvalidPredicate(model, {channels: POSITION_SCALE_CHANNELS});\n\n if (signal) {\n return {defined: {signal}};\n }\n }\n return {};\n}\n\nfunction allFieldsInvalidPredicate(\n model: UnitModel,\n {invalid = false, channels}: {invalid?: boolean; channels: ScaleChannel[]}\n) {\n const filterIndex = channels.reduce((aggregator: Dict, channel) => {\n const scaleComponent = model.getScaleComponent(channel);\n if (scaleComponent) {\n const scaleType = scaleComponent.get('type');\n const field = model.vgField(channel, {expr: 'datum'});\n\n // While discrete domain scales can handle invalid values, continuous scales can't.\n if (field && hasContinuousDomain(scaleType)) {\n aggregator[field] = true;\n }\n }\n return aggregator;\n }, {});\n\n const fields = keys(filterIndex);\n if (fields.length > 0) {\n const op = invalid ? '||' : '&&';\n return fields.map(field => fieldInvalidPredicate(field, invalid)).join(` ${op} `);\n }\n return undefined;\n}\n\nexport function valueIfDefined(prop: string, value: Value): VgEncodeEntry {\n if (value !== undefined) {\n return {[prop]: signalOrValueRef(value)};\n }\n return undefined;\n}\n","import * as log from '../../log';\nimport {isPathMark} from '../../mark';\nimport {tooltip} from '../mark/encode';\nimport {SelectionCompiler} from '.';\n\nconst VORONOI = 'voronoi';\n\nconst nearest: SelectionCompiler<'point'> = {\n defined: selCmpt => {\n return selCmpt.type === 'point' && selCmpt.nearest;\n },\n\n parse: (model, selCmpt) => {\n // Scope selection events to the voronoi mark to prevent capturing\n // events that occur on the group mark (https://github.com/vega/vega/issues/2112).\n if (selCmpt.events) {\n for (const s of selCmpt.events) {\n s.markname = model.getName(VORONOI);\n }\n }\n },\n\n marks: (model, selCmpt, marks) => {\n const {x, y} = selCmpt.project.hasChannel;\n const markType = model.mark;\n if (isPathMark(markType)) {\n log.warn(log.message.nearestNotSupportForContinuous(markType));\n return marks;\n }\n\n const cellDef = {\n name: model.getName(VORONOI),\n type: 'path',\n interactive: true,\n from: {data: model.getName('marks')},\n encode: {\n update: {\n fill: {value: 'transparent'},\n strokeWidth: {value: 0.35},\n stroke: {value: 'transparent'},\n isVoronoi: {value: true},\n ...tooltip(model, {reactiveGeom: true})\n }\n },\n transform: [\n {\n type: 'voronoi',\n x: {expr: x || !y ? 'datum.datum.x || 0' : '0'},\n y: {expr: y || !x ? 'datum.datum.y || 0' : '0'},\n size: [model.getSizeSignalRef('width'), model.getSizeSignalRef('height')]\n }\n ]\n };\n\n let index = 0;\n let exists = false;\n marks.forEach((mark, i) => {\n const name = mark.name ?? '';\n if (name === model.component.mark[0].name) {\n index = i;\n } else if (name.indexOf(VORONOI) >= 0) {\n exists = true;\n }\n });\n\n if (!exists) {\n marks.splice(index + 1, 0, cellDef);\n }\n\n return marks;\n }\n};\n\nexport default nearest;\n","import {stringValue} from 'vega-util';\nimport {disableDirectManipulation, TUPLE} from '.';\nimport {varName} from '../../util';\nimport {assembleInit} from './assemble';\nimport nearest from './nearest';\nimport {TUPLE_FIELDS} from './project';\nimport {SelectionCompiler} from '.';\nimport {isLegendBinding} from '../../selection';\n\nconst inputBindings: SelectionCompiler<'point'> = {\n defined: selCmpt => {\n return (\n selCmpt.type === 'point' &&\n selCmpt.resolve === 'global' &&\n selCmpt.bind &&\n selCmpt.bind !== 'scales' &&\n !isLegendBinding(selCmpt.bind)\n );\n },\n\n parse: (model, selCmpt, selDef) => disableDirectManipulation(selCmpt, selDef),\n\n topLevelSignals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const proj = selCmpt.project;\n const bind = selCmpt.bind;\n const init = selCmpt.init && selCmpt.init[0]; // Can only exist on single selections (one initial value).\n const datum = nearest.defined(selCmpt) ? '(item().isVoronoi ? datum.datum : datum)' : 'datum';\n\n proj.items.forEach((p, i) => {\n const sgname = varName(`${name}_${p.field}`);\n const hasSignal = signals.filter(s => s.name === sgname);\n\n if (!hasSignal.length) {\n signals.unshift({\n name: sgname,\n ...(init ? {init: assembleInit(init[i])} : {value: null}),\n on: selCmpt.events\n ? [\n {\n events: selCmpt.events,\n update: `datum && item().mark.marktype !== 'group' ? ${datum}[${stringValue(p.field)}] : null`\n }\n ]\n : [],\n bind: bind[p.field] ?? bind[p.channel] ?? bind\n });\n }\n });\n\n return signals;\n },\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const proj = selCmpt.project;\n const signal = signals.filter(s => s.name === name + TUPLE)[0];\n const fields = name + TUPLE_FIELDS;\n const values = proj.items.map(p => varName(`${name}_${p.field}`));\n const valid = values.map(v => `${v} !== null`).join(' && ');\n\n if (values.length) {\n signal.update = `${valid} ? {fields: ${fields}, values: [${values.join(', ')}]} : null`;\n }\n\n delete signal.value;\n delete signal.on;\n\n return signals;\n }\n};\n\nexport default inputBindings;\n","import {TUPLE, unitName} from '.';\nimport {SelectionCompiler} from '.';\n\nexport const TOGGLE = '_toggle';\n\nconst toggle: SelectionCompiler<'point'> = {\n defined: selCmpt => {\n return selCmpt.type === 'point' && !!selCmpt.toggle;\n },\n\n signals: (model, selCmpt, signals) => {\n return signals.concat({\n name: selCmpt.name + TOGGLE,\n value: false,\n on: [{events: selCmpt.events, update: selCmpt.toggle}]\n });\n },\n\n modifyExpr: (model, selCmpt) => {\n const tpl = selCmpt.name + TUPLE;\n const signal = selCmpt.name + TOGGLE;\n\n return (\n `${signal} ? null : ${tpl}, ` +\n (selCmpt.resolve === 'global' ? `${signal} ? null : true, ` : `${signal} ? null : {unit: ${unitName(model)}}, `) +\n `${signal} ? ${tpl} : null`\n );\n }\n};\n\nexport default toggle;\n","import {Update} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {isString} from 'vega-util';\nimport {TUPLE} from '.';\nimport {varName} from '../../util';\nimport inputBindings from './inputs';\nimport toggle, {TOGGLE} from './toggle';\nimport {SelectionCompiler} from '.';\n\nconst clear: SelectionCompiler = {\n defined: selCmpt => {\n return selCmpt.clear !== undefined && selCmpt.clear !== false;\n },\n\n parse: (model, selCmpt) => {\n if (selCmpt.clear) {\n selCmpt.clear = isString(selCmpt.clear) ? parseSelector(selCmpt.clear, 'view') : selCmpt.clear;\n }\n },\n\n topLevelSignals: (model, selCmpt, signals) => {\n if (inputBindings.defined(selCmpt)) {\n for (const proj of selCmpt.project.items) {\n const idx = signals.findIndex(n => n.name === varName(`${selCmpt.name}_${proj.field}`));\n if (idx !== -1) {\n signals[idx].on.push({events: selCmpt.clear, update: 'null'});\n }\n }\n }\n\n return signals;\n },\n\n signals: (model, selCmpt, signals) => {\n function addClear(idx: number, update: Update) {\n if (idx !== -1 && signals[idx].on) {\n signals[idx].on.push({events: selCmpt.clear, update});\n }\n }\n\n // Be as minimalist as possible when adding clear triggers to minimize dataflow execution.\n if (selCmpt.type === 'interval') {\n for (const proj of selCmpt.project.items) {\n const vIdx = signals.findIndex(n => n.name === proj.signals.visual);\n addClear(vIdx, '[0, 0]');\n\n if (vIdx === -1) {\n const dIdx = signals.findIndex(n => n.name === proj.signals.data);\n addClear(dIdx, 'null');\n }\n }\n } else {\n let tIdx = signals.findIndex(n => n.name === selCmpt.name + TUPLE);\n addClear(tIdx, 'null');\n\n if (toggle.defined(selCmpt)) {\n tIdx = signals.findIndex(n => n.name === selCmpt.name + TOGGLE);\n addClear(tIdx, 'false');\n }\n }\n\n return signals;\n }\n};\n\nexport default clear;\n","import {isObject, MergedStream, Stream} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {array, isString} from 'vega-util';\nimport {disableDirectManipulation, TUPLE} from '.';\nimport {NonPositionScaleChannel} from '../../channel';\nimport * as log from '../../log';\nimport {isLegendBinding, isLegendStreamBinding, SELECTION_ID} from '../../selection';\nimport {duplicate, vals, varName} from '../../util';\nimport {LegendComponent} from '../legend/component';\nimport {UnitModel} from '../unit';\nimport {TUPLE_FIELDS} from './project';\nimport {TOGGLE} from './toggle';\nimport {SelectionCompiler} from '.';\n\nconst legendBindings: SelectionCompiler<'point'> = {\n defined: selCmpt => {\n const spec = selCmpt.resolve === 'global' && selCmpt.bind && isLegendBinding(selCmpt.bind);\n const projLen = selCmpt.project.items.length === 1 && selCmpt.project.items[0].field !== SELECTION_ID;\n if (spec && !projLen) {\n log.warn(log.message.LEGEND_BINDINGS_MUST_HAVE_PROJECTION);\n }\n\n return spec && projLen;\n },\n\n parse: (model, selCmpt, selDef) => {\n // Allow legend items to be toggleable by default even though direct manipulation is disabled.\n const selDef_ = duplicate(selDef);\n selDef_.select = isString(selDef_.select)\n ? {type: selDef_.select, toggle: selCmpt.toggle}\n : {...selDef_.select, toggle: selCmpt.toggle};\n disableDirectManipulation(selCmpt, selDef_);\n\n if (isObject(selDef.select) && (selDef.select.on || selDef.select.clear)) {\n const legendFilter = 'event.item && indexof(event.item.mark.role, \"legend\") < 0';\n for (const evt of selCmpt.events) {\n evt.filter = array(evt.filter ?? []);\n if (!evt.filter.includes(legendFilter)) {\n evt.filter.push(legendFilter);\n }\n }\n }\n\n const evt = isLegendStreamBinding(selCmpt.bind) ? selCmpt.bind.legend : 'click';\n const stream: Stream[] = isString(evt) ? parseSelector(evt, 'view') : array(evt);\n selCmpt.bind = {legend: {merge: stream}};\n },\n\n topLevelSignals: (model, selCmpt, signals) => {\n const selName = selCmpt.name;\n const stream = isLegendStreamBinding(selCmpt.bind) && (selCmpt.bind.legend as MergedStream);\n const markName = (name: string) => (s: Stream) => {\n const ds = duplicate(s);\n ds.markname = name;\n return ds;\n };\n\n for (const proj of selCmpt.project.items) {\n if (!proj.hasLegend) continue;\n const prefix = `${varName(proj.field)}_legend`;\n const sgName = `${selName}_${prefix}`;\n const hasSignal = signals.filter(s => s.name === sgName);\n\n if (hasSignal.length === 0) {\n const events = stream.merge\n .map(markName(`${prefix}_symbols`))\n .concat(stream.merge.map(markName(`${prefix}_labels`)))\n .concat(stream.merge.map(markName(`${prefix}_entries`)));\n\n signals.unshift({\n name: sgName,\n ...(!selCmpt.init ? {value: null} : {}),\n on: [\n // Legend entries do not store values, so we need to walk the scenegraph to the symbol datum.\n {events, update: 'datum.value || item().items[0].items[0].datum.value', force: true},\n {events: stream.merge, update: `!event.item || !datum ? null : ${sgName}`, force: true}\n ]\n });\n }\n }\n\n return signals;\n },\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const proj = selCmpt.project;\n const tuple = signals.find(s => s.name === name + TUPLE);\n const fields = name + TUPLE_FIELDS;\n const values = proj.items.filter(p => p.hasLegend).map(p => varName(`${name}_${varName(p.field)}_legend`));\n const valid = values.map(v => `${v} !== null`).join(' && ');\n const update = `${valid} ? {fields: ${fields}, values: [${values.join(', ')}]} : null`;\n\n if (selCmpt.events && values.length > 0) {\n tuple.on.push({\n events: values.map(signal => ({signal})),\n update\n });\n } else if (values.length > 0) {\n tuple.update = update;\n delete tuple.value;\n delete tuple.on;\n }\n\n const toggle = signals.find(s => s.name === name + TOGGLE);\n const events = isLegendStreamBinding(selCmpt.bind) && selCmpt.bind.legend;\n if (toggle) {\n if (!selCmpt.events) toggle.on[0].events = events;\n else toggle.on.push({...toggle.on[0], events});\n }\n\n return signals;\n }\n};\n\nexport default legendBindings;\n\nexport function parseInteractiveLegend(\n model: UnitModel,\n channel: NonPositionScaleChannel,\n legendCmpt: LegendComponent\n) {\n const field = model.fieldDef(channel)?.field;\n for (const selCmpt of vals(model.component.selection ?? {})) {\n const proj = selCmpt.project.hasField[field] ?? selCmpt.project.hasChannel[channel];\n if (proj && legendBindings.defined(selCmpt)) {\n const legendSelections = legendCmpt.get('selections') ?? [];\n legendSelections.push(selCmpt.name);\n legendCmpt.set('selections', legendSelections, false);\n proj.hasLegend = true;\n }\n }\n}\n","import {NewSignal} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {SelectionComponent} from '.';\nimport {ScaleChannel, X, Y} from '../../channel';\nimport {UnitModel} from '../unit';\nimport {BRUSH as INTERVAL_BRUSH} from './interval';\nimport {SelectionProjection} from './project';\nimport scalesCompiler, {domain} from './scales';\nimport {SelectionCompiler} from '.';\n\nconst ANCHOR = '_translate_anchor';\nconst DELTA = '_translate_delta';\n\nconst translate: SelectionCompiler<'interval'> = {\n defined: selCmpt => {\n return selCmpt.type === 'interval' && selCmpt.translate;\n },\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const hasScales = scalesCompiler.defined(selCmpt);\n const anchor = name + ANCHOR;\n const {x, y} = selCmpt.project.hasChannel;\n let events = parseSelector(selCmpt.translate, 'scope');\n\n if (!hasScales) {\n events = events.map(e => ((e.between[0].markname = name + INTERVAL_BRUSH), e));\n }\n\n signals.push(\n {\n name: anchor,\n value: {},\n on: [\n {\n events: events.map(e => e.between[0]),\n update:\n '{x: x(unit), y: y(unit)' +\n (x !== undefined ? `, extent_x: ${hasScales ? domain(model, X) : `slice(${x.signals.visual})`}` : '') +\n (y !== undefined ? `, extent_y: ${hasScales ? domain(model, Y) : `slice(${y.signals.visual})`}` : '') +\n '}'\n }\n ]\n },\n {\n name: name + DELTA,\n value: {},\n on: [\n {\n events: events,\n update: `{x: ${anchor}.x - x(unit), y: ${anchor}.y - y(unit)}`\n }\n ]\n }\n );\n\n if (x !== undefined) {\n onDelta(model, selCmpt, x, 'width', signals);\n }\n\n if (y !== undefined) {\n onDelta(model, selCmpt, y, 'height', signals);\n }\n\n return signals;\n }\n};\n\nexport default translate;\n\nfunction onDelta(\n model: UnitModel,\n selCmpt: SelectionComponent,\n proj: SelectionProjection,\n size: 'width' | 'height',\n signals: NewSignal[]\n) {\n const name = selCmpt.name;\n const anchor = name + ANCHOR;\n const delta = name + DELTA;\n const channel = proj.channel as ScaleChannel;\n const hasScales = scalesCompiler.defined(selCmpt);\n const signal = signals.filter(s => s.name === proj.signals[hasScales ? 'data' : 'visual'])[0];\n const sizeSg = model.getSizeSignalRef(size).signal;\n const scaleCmpt = model.getScaleComponent(channel);\n const scaleType = scaleCmpt.get('type');\n const reversed = scaleCmpt.get('reverse'); // scale parsing sets this flag for fieldDef.sort\n const sign = !hasScales ? '' : channel === X ? (reversed ? '' : '-') : reversed ? '-' : '';\n const extent = `${anchor}.extent_${channel}`;\n const offset = `${sign}${delta}.${channel} / ${hasScales ? `${sizeSg}` : `span(${extent})`}`;\n const panFn = !hasScales\n ? 'panLinear'\n : scaleType === 'log'\n ? 'panLog'\n : scaleType === 'symlog'\n ? 'panSymlog'\n : scaleType === 'pow'\n ? 'panPow'\n : 'panLinear';\n const arg = !hasScales\n ? ''\n : scaleType === 'pow'\n ? `, ${scaleCmpt.get('exponent') ?? 1}`\n : scaleType === 'symlog'\n ? `, ${scaleCmpt.get('constant') ?? 1}`\n : '';\n const update = `${panFn}(${extent}, ${offset}${arg})`;\n\n signal.on.push({\n events: {signal: delta},\n update: hasScales ? update : `clampRange(${update}, 0, ${sizeSg})`\n });\n}\n","import {NewSignal} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {stringValue} from 'vega-util';\nimport {SelectionComponent} from '.';\nimport {ScaleChannel, X, Y} from '../../channel';\nimport {UnitModel} from '../unit';\nimport {BRUSH as INTERVAL_BRUSH} from './interval';\nimport {SelectionProjection} from './project';\nimport {default as scalesCompiler, domain} from './scales';\nimport {SelectionCompiler} from '.';\n\nconst ANCHOR = '_zoom_anchor';\nconst DELTA = '_zoom_delta';\n\nconst zoom: SelectionCompiler<'interval'> = {\n defined: selCmpt => {\n return selCmpt.type === 'interval' && selCmpt.zoom;\n },\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const hasScales = scalesCompiler.defined(selCmpt);\n const delta = name + DELTA;\n const {x, y} = selCmpt.project.hasChannel;\n const sx = stringValue(model.scaleName(X));\n const sy = stringValue(model.scaleName(Y));\n let events = parseSelector(selCmpt.zoom, 'scope');\n\n if (!hasScales) {\n events = events.map(e => ((e.markname = name + INTERVAL_BRUSH), e));\n }\n\n signals.push(\n {\n name: name + ANCHOR,\n on: [\n {\n events: events,\n update: !hasScales\n ? `{x: x(unit), y: y(unit)}`\n : '{' +\n [sx ? `x: invert(${sx}, x(unit))` : '', sy ? `y: invert(${sy}, y(unit))` : '']\n .filter(expr => !!expr)\n .join(', ') +\n '}'\n }\n ]\n },\n {\n name: delta,\n on: [\n {\n events: events,\n force: true,\n update: 'pow(1.001, event.deltaY * pow(16, event.deltaMode))'\n }\n ]\n }\n );\n\n if (x !== undefined) {\n onDelta(model, selCmpt, x, 'width', signals);\n }\n\n if (y !== undefined) {\n onDelta(model, selCmpt, y, 'height', signals);\n }\n\n return signals;\n }\n};\n\nexport default zoom;\n\nfunction onDelta(\n model: UnitModel,\n selCmpt: SelectionComponent,\n proj: SelectionProjection,\n size: 'width' | 'height',\n signals: NewSignal[]\n) {\n const name = selCmpt.name;\n const channel = proj.channel as ScaleChannel;\n const hasScales = scalesCompiler.defined(selCmpt);\n const signal = signals.filter(s => s.name === proj.signals[hasScales ? 'data' : 'visual'])[0];\n const sizeSg = model.getSizeSignalRef(size).signal;\n const scaleCmpt = model.getScaleComponent(channel);\n const scaleType = scaleCmpt.get('type');\n const base = hasScales ? domain(model, channel) : signal.name;\n const delta = name + DELTA;\n const anchor = `${name}${ANCHOR}.${channel}`;\n const zoomFn = !hasScales\n ? 'zoomLinear'\n : scaleType === 'log'\n ? 'zoomLog'\n : scaleType === 'symlog'\n ? 'zoomSymlog'\n : scaleType === 'pow'\n ? 'zoomPow'\n : 'zoomLinear';\n const arg = !hasScales\n ? ''\n : scaleType === 'pow'\n ? `, ${scaleCmpt.get('exponent') ?? 1}`\n : scaleType === 'symlog'\n ? `, ${scaleCmpt.get('constant') ?? 1}`\n : '';\n const update = `${zoomFn}(${base}, ${anchor}, ${delta}${arg})`;\n\n signal.on.push({\n events: {signal: delta},\n update: hasScales ? update : `clampRange(${update}, 0, ${sizeSg})`\n });\n}\n","import {Binding, isString, NewSignal, Signal, Stream} from 'vega';\nimport {stringValue} from 'vega-util';\nimport {FACET_CHANNELS} from '../../channel';\nimport {\n BrushConfig,\n LegendBinding,\n SelectionInit,\n SelectionInitInterval,\n SelectionResolution,\n SelectionType,\n SELECTION_ID\n} from '../../selection';\nimport {Dict, vals} from '../../util';\nimport {OutputNode} from '../data/dataflow';\nimport {FacetModel} from '../facet';\nimport {isFacetModel, Model} from '../model';\nimport {UnitModel} from '../unit';\nimport interval from './interval';\nimport point from './point';\nimport {SelectionProjection, SelectionProjectionComponent} from './project';\nimport {SelectionParameter} from '../../selection';\nimport clear from './clear';\nimport inputs from './inputs';\nimport nearest from './nearest';\nimport project from './project';\nimport scales from './scales';\nimport legends from './legends';\nimport toggle from './toggle';\nimport translate from './translate';\nimport zoom from './zoom';\nimport {ParameterName} from '../../parameter';\n\nexport const STORE = '_store';\nexport const TUPLE = '_tuple';\nexport const MODIFY = '_modify';\nexport const SELECTION_DOMAIN = '_selection_domain_';\nexport const VL_SELECTION_RESOLVE = 'vlSelectionResolve';\n\nexport interface SelectionComponent {\n name: ParameterName;\n type: T;\n // Use conditional types for stricter type of init (as the type of init depends on selection type).\n init?: (T extends 'interval' ? SelectionInitInterval : T extends 'point' ? SelectionInit : never)[][];\n events: Stream[];\n materialized: OutputNode;\n bind?: 'scales' | Binding | Dict | LegendBinding;\n resolve: SelectionResolution;\n mark?: BrushConfig;\n\n // Transforms\n project: SelectionProjectionComponent;\n scales?: SelectionProjection[];\n toggle?: string;\n translate?: any;\n zoom?: any;\n nearest?: any;\n clear?: any;\n}\n\nexport interface SelectionCompiler {\n defined: (selCmpt: SelectionComponent) => boolean;\n parse?: (model: UnitModel, selCmpt: SelectionComponent, def: SelectionParameter) => void;\n signals?: (model: UnitModel, selCmpt: SelectionComponent, signals: NewSignal[]) => Signal[]; // the output can be a new or a push signal\n topLevelSignals?: (model: Model, selCmpt: SelectionComponent, signals: NewSignal[]) => NewSignal[];\n modifyExpr?: (model: UnitModel, selCmpt: SelectionComponent, expr: string) => string;\n marks?: (model: UnitModel, selCmpt: SelectionComponent, marks: any[]) => any[];\n}\n\n// Order matters for parsing and assembly.\nexport const selectionCompilers: SelectionCompiler[] = [\n point,\n interval,\n project,\n toggle,\n\n // Bindings may disable direct manipulation.\n inputs,\n scales,\n legends,\n\n clear,\n translate,\n zoom,\n nearest\n];\n\nfunction getFacetModel(model: Model): FacetModel {\n let parent = model.parent;\n while (parent) {\n if (isFacetModel(parent)) break;\n parent = parent.parent;\n }\n\n return parent as FacetModel;\n}\n\nexport function unitName(model: Model, {escape} = {escape: true}) {\n let name = escape ? stringValue(model.name) : model.name;\n const facetModel = getFacetModel(model);\n if (facetModel) {\n const {facet} = facetModel;\n for (const channel of FACET_CHANNELS) {\n if (facet[channel]) {\n name += ` + '__facet_${channel}_' + (facet[${stringValue(facetModel.vgField(channel))}])`;\n }\n }\n }\n return name;\n}\n\nexport function requiresSelectionId(model: Model) {\n return vals(model.component.selection ?? {}).reduce((identifier, selCmpt) => {\n return identifier || selCmpt.project.items.some(proj => proj.field === SELECTION_ID);\n }, false);\n}\n\n// Binding a point selection to query widgets or legends disables default direct manipulation interaction.\n// A user can choose to re-enable it by explicitly specifying triggering input events.\nexport function disableDirectManipulation(selCmpt: SelectionComponent, selDef: SelectionParameter<'point'>) {\n if (isString(selDef.select) || !selDef.select.on) delete selCmpt.events;\n if (isString(selDef.select) || !selDef.select.clear) delete selCmpt.clear;\n if (isString(selDef.select) || !selDef.select.toggle) delete selCmpt.toggle;\n}\n","import { error, toSet, isFunction, isString, hasOwnProperty } from 'vega-util';\n\nconst RawCode = 'RawCode';\nconst Literal = 'Literal';\nconst Property = 'Property';\nconst Identifier = 'Identifier';\nconst ArrayExpression = 'ArrayExpression';\nconst BinaryExpression = 'BinaryExpression';\nconst CallExpression = 'CallExpression';\nconst ConditionalExpression = 'ConditionalExpression';\nconst LogicalExpression = 'LogicalExpression';\nconst MemberExpression = 'MemberExpression';\nconst ObjectExpression = 'ObjectExpression';\nconst UnaryExpression = 'UnaryExpression';\nfunction ASTNode(type) {\n this.type = type;\n}\n\nASTNode.prototype.visit = function (visitor) {\n let c, i, n;\n if (visitor(this)) return 1;\n\n for (c = children(this), i = 0, n = c.length; i < n; ++i) {\n if (c[i].visit(visitor)) return 1;\n }\n};\n\nfunction children(node) {\n switch (node.type) {\n case ArrayExpression:\n return node.elements;\n\n case BinaryExpression:\n case LogicalExpression:\n return [node.left, node.right];\n\n case CallExpression:\n return [node.callee].concat(node.arguments);\n\n case ConditionalExpression:\n return [node.test, node.consequent, node.alternate];\n\n case MemberExpression:\n return [node.object, node.property];\n\n case ObjectExpression:\n return node.properties;\n\n case Property:\n return [node.key, node.value];\n\n case UnaryExpression:\n return [node.argument];\n\n case Identifier:\n case Literal:\n case RawCode:\n default:\n return [];\n }\n}\n\n/*\n The following expression parser is based on Esprima (http://esprima.org/).\n Original header comment and license for Esprima is included here:\n\n Copyright (C) 2013 Ariya Hidayat \n Copyright (C) 2013 Thaddee Tyl \n Copyright (C) 2013 Mathias Bynens \n Copyright (C) 2012 Ariya Hidayat \n Copyright (C) 2012 Mathias Bynens \n Copyright (C) 2012 Joost-Wim Boekesteijn \n Copyright (C) 2012 Kris Kowal \n Copyright (C) 2012 Yusuke Suzuki \n Copyright (C) 2012 Arpad Borsos \n Copyright (C) 2011 Ariya Hidayat \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nvar TokenName, source, index, length, lookahead;\nvar TokenBooleanLiteral = 1,\n TokenEOF = 2,\n TokenIdentifier = 3,\n TokenKeyword = 4,\n TokenNullLiteral = 5,\n TokenNumericLiteral = 6,\n TokenPunctuator = 7,\n TokenStringLiteral = 8,\n TokenRegularExpression = 9;\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\nvar SyntaxArrayExpression = 'ArrayExpression',\n SyntaxBinaryExpression = 'BinaryExpression',\n SyntaxCallExpression = 'CallExpression',\n SyntaxConditionalExpression = 'ConditionalExpression',\n SyntaxIdentifier = 'Identifier',\n SyntaxLiteral = 'Literal',\n SyntaxLogicalExpression = 'LogicalExpression',\n SyntaxMemberExpression = 'MemberExpression',\n SyntaxObjectExpression = 'ObjectExpression',\n SyntaxProperty = 'Property',\n SyntaxUnaryExpression = 'UnaryExpression'; // Error messages should be identical to V8.\n\nvar MessageUnexpectedToken = 'Unexpected token %0',\n MessageUnexpectedNumber = 'Unexpected number',\n MessageUnexpectedString = 'Unexpected string',\n MessageUnexpectedIdentifier = 'Unexpected identifier',\n MessageUnexpectedReserved = 'Unexpected reserved word',\n MessageUnexpectedEOS = 'Unexpected end of input',\n MessageInvalidRegExp = 'Invalid regular expression',\n MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\nvar ILLEGAL = 'ILLEGAL',\n DISABLED = 'Disabled.'; // See also tools/generate-unicode-regex.py.\n\nvar RegexNonAsciiIdentifierStart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'),\n // eslint-disable-next-line no-misleading-character-class\nRegexNonAsciiIdentifierPart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'); // Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n /* istanbul ignore next */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n}\n\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 && ch <= 0x39; // 0..9\n}\n\nfunction isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\n\nfunction isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n} // 7.2 White Space\n\n\nfunction isWhiteSpace(ch) {\n return ch === 0x20 || ch === 0x09 || ch === 0x0B || ch === 0x0C || ch === 0xA0 || ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0;\n} // 7.3 Line Terminators\n\n\nfunction isLineTerminator(ch) {\n return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029;\n} // 7.6 Identifier Names and Identifiers\n\n\nfunction isIdentifierStart(ch) {\n return ch === 0x24 || ch === 0x5F || // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A || // A..Z\n ch >= 0x61 && ch <= 0x7A || // a..z\n ch === 0x5C || // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch));\n}\n\nfunction isIdentifierPart(ch) {\n return ch === 0x24 || ch === 0x5F || // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A || // A..Z\n ch >= 0x61 && ch <= 0x7A || // a..z\n ch >= 0x30 && ch <= 0x39 || // 0..9\n ch === 0x5C || // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch));\n} // 7.6.1.1 Keywords\n\n\nconst keywords = {\n 'if': 1,\n 'in': 1,\n 'do': 1,\n 'var': 1,\n 'for': 1,\n 'new': 1,\n 'try': 1,\n 'let': 1,\n 'this': 1,\n 'else': 1,\n 'case': 1,\n 'void': 1,\n 'with': 1,\n 'enum': 1,\n 'while': 1,\n 'break': 1,\n 'catch': 1,\n 'throw': 1,\n 'const': 1,\n 'yield': 1,\n 'class': 1,\n 'super': 1,\n 'return': 1,\n 'typeof': 1,\n 'delete': 1,\n 'switch': 1,\n 'export': 1,\n 'import': 1,\n 'public': 1,\n 'static': 1,\n 'default': 1,\n 'finally': 1,\n 'extends': 1,\n 'package': 1,\n 'private': 1,\n 'function': 1,\n 'continue': 1,\n 'debugger': 1,\n 'interface': 1,\n 'protected': 1,\n 'instanceof': 1,\n 'implements': 1\n};\n\nfunction skipComment() {\n while (index < length) {\n const ch = source.charCodeAt(index);\n\n if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n ++index;\n } else {\n break;\n }\n }\n}\n\nfunction scanHexEscape(prefix) {\n var i,\n len,\n ch,\n code = 0;\n len = prefix === 'u' ? 4 : 2;\n\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n return String.fromCharCode(code);\n}\n\nfunction scanUnicodeCodePointEscape() {\n var ch, code, cu1, cu2;\n ch = source[index];\n code = 0; // At least, one hex digit is required.\n\n if (ch === '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n while (index < length) {\n ch = source[index++];\n\n if (!isHexDigit(ch)) {\n break;\n }\n\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n\n if (code > 0x10FFFF || ch !== '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } // UTF-16 Encoding\n\n\n if (code <= 0xFFFF) {\n return String.fromCharCode(code);\n }\n\n cu1 = (code - 0x10000 >> 10) + 0xD800;\n cu2 = (code - 0x10000 & 1023) + 0xDC00;\n return String.fromCharCode(cu1, cu2);\n}\n\nfunction getEscapedIdentifier() {\n var ch, id;\n ch = source.charCodeAt(index++);\n id = String.fromCharCode(ch); // '\\u' (U+005C, U+0075) denotes an escaped character.\n\n if (ch === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n ++index;\n ch = scanHexEscape('u');\n\n if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n id = ch;\n }\n\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (!isIdentifierPart(ch)) {\n break;\n }\n\n ++index;\n id += String.fromCharCode(ch); // '\\u' (U+005C, U+0075) denotes an escaped character.\n\n if (ch === 0x5C) {\n id = id.substr(0, id.length - 1);\n\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n ++index;\n ch = scanHexEscape('u');\n\n if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n id += ch;\n }\n }\n\n return id;\n}\n\nfunction getIdentifier() {\n var start, ch;\n start = index++;\n\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getEscapedIdentifier();\n }\n\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n}\n\nfunction scanIdentifier() {\n var start, id, type;\n start = index; // Backslash (U+005C) starts an escaped character.\n\n id = source.charCodeAt(index) === 0x5C ? getEscapedIdentifier() : getIdentifier(); // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n\n if (id.length === 1) {\n type = TokenIdentifier;\n } else if (keywords.hasOwnProperty(id)) {\n // eslint-disable-line no-prototype-builtins\n type = TokenKeyword;\n } else if (id === 'null') {\n type = TokenNullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = TokenBooleanLiteral;\n } else {\n type = TokenIdentifier;\n }\n\n return {\n type: type,\n value: id,\n start: start,\n end: index\n };\n} // 7.7 Punctuators\n\n\nfunction scanPunctuator() {\n var start = index,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2,\n ch3,\n ch4;\n\n switch (code) {\n // Check for most common single-character punctuators.\n case 0x2E: // . dot\n\n case 0x28: // ( open bracket\n\n case 0x29: // ) close bracket\n\n case 0x3B: // ; semicolon\n\n case 0x2C: // , comma\n\n case 0x7B: // { open curly brace\n\n case 0x7D: // } close curly brace\n\n case 0x5B: // [\n\n case 0x5D: // ]\n\n case 0x3A: // :\n\n case 0x3F: // ?\n\n case 0x7E:\n // ~\n ++index;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code),\n start: start,\n end: index\n };\n\n default:\n code2 = source.charCodeAt(index + 1); // '=' (U+003D) marks an assignment or comparison operator.\n\n if (code2 === 0x3D) {\n switch (code) {\n case 0x2B: // +\n\n case 0x2D: // -\n\n case 0x2F: // /\n\n case 0x3C: // <\n\n case 0x3E: // >\n\n case 0x5E: // ^\n\n case 0x7C: // |\n\n case 0x25: // %\n\n case 0x26: // &\n\n case 0x2A:\n // *\n index += 2;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n start: start,\n end: index\n };\n\n case 0x21: // !\n\n case 0x3D:\n // =\n index += 2; // !== and ===\n\n if (source.charCodeAt(index) === 0x3D) {\n ++index;\n }\n\n return {\n type: TokenPunctuator,\n value: source.slice(start, index),\n start: start,\n end: index\n };\n }\n }\n\n } // 4-character punctuator: >>>=\n\n\n ch4 = source.substr(index, 4);\n\n if (ch4 === '>>>=') {\n index += 4;\n return {\n type: TokenPunctuator,\n value: ch4,\n start: start,\n end: index\n };\n } // 3-character punctuators: === !== >>> <<= >>=\n\n\n ch3 = ch4.substr(0, 3);\n\n if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n index += 3;\n return {\n type: TokenPunctuator,\n value: ch3,\n start: start,\n end: index\n };\n } // Other 2-character punctuators: ++ -- << >> && ||\n\n\n ch2 = ch3.substr(0, 2);\n\n if (ch1 === ch2[1] && '+-<>&|'.indexOf(ch1) >= 0 || ch2 === '=>') {\n index += 2;\n return {\n type: TokenPunctuator,\n value: ch2,\n start: start,\n end: index\n };\n }\n\n if (ch2 === '//') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } // 1-character punctuators: < > = ! + - * % & | ^ /\n\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;\n return {\n type: TokenPunctuator,\n value: ch1,\n start: start,\n end: index\n };\n }\n\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n} // 7.8.3 Numeric Literals\n\n\nfunction scanHexLiteral(start) {\n let number = '';\n\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n\n number += source[index++];\n }\n\n if (number.length === 0) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt('0x' + number, 16),\n start: start,\n end: index\n };\n}\n\nfunction scanOctalLiteral(start) {\n let number = '0' + source[index++];\n\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n\n number += source[index++];\n }\n\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt(number, 8),\n octal: true,\n start: start,\n end: index\n };\n}\n\nfunction scanNumericLiteral() {\n var number, start, ch;\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || ch === '.', 'Numeric literal must start with a decimal digit or a decimal point');\n start = index;\n number = '';\n\n if (ch !== '.') {\n number = source[index++];\n ch = source[index]; // Hex number starts with '0x'.\n // Octal number starts with '0'.\n\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n\n if (isOctalDigit(ch)) {\n return scanOctalLiteral(start);\n } // decimal number starts with '0' such as '09' is illegal.\n\n\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n ch = source[index];\n\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseFloat(number),\n start: start,\n end: index\n };\n} // 7.8.4 String Literals\n\n\nfunction scanStringLiteral() {\n var str = '',\n quote,\n start,\n ch,\n code,\n octal = false;\n quote = source[index];\n assert(quote === '\\'' || quote === '\"', 'String literal must starts with a quote');\n start = index;\n ++index;\n\n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n str += scanHexEscape(ch);\n }\n\n break;\n\n case 'n':\n str += '\\n';\n break;\n\n case 'r':\n str += '\\r';\n break;\n\n case 't':\n str += '\\t';\n break;\n\n case 'b':\n str += '\\b';\n break;\n\n case 'f':\n str += '\\f';\n break;\n\n case 'v':\n str += '\\x0B';\n break;\n\n default:\n if (isOctalDigit(ch)) {\n code = '01234567'.indexOf(ch); // \\0 is not octal escape sequence\n\n if (code !== 0) {\n octal = true;\n }\n\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]); // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n\n if ('0123'.indexOf(ch) >= 0 && index < length && isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n\n str += String.fromCharCode(code);\n } else {\n str += ch;\n }\n\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenStringLiteral,\n value: str,\n octal: octal,\n start: start,\n end: index\n };\n}\n\nfunction testRegExp(pattern, flags) {\n let tmp = pattern;\n\n if (flags.indexOf('u') >= 0) {\n // Replace each astral symbol and every Unicode code point\n // escape sequence with a single ASCII symbol to avoid throwing on\n // regular expressions that are only valid in combination with the\n // `/u` flag.\n // Note: replacing with the ASCII symbol `x` might cause false\n // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n // perfectly valid pattern that is equivalent to `[a-b]`, but it\n // would be replaced by `[x-b]` which throws an error.\n tmp = tmp.replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, ($0, $1) => {\n if (parseInt($1, 16) <= 0x10FFFF) {\n return 'x';\n }\n\n throwError({}, MessageInvalidRegExp);\n }).replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n } // First, detect invalid regular expressions.\n\n\n try {\n new RegExp(tmp);\n } catch (e) {\n throwError({}, MessageInvalidRegExp);\n } // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n\n\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n}\n\nfunction scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n classMarker = false;\n terminated = false;\n\n while (index < length) {\n ch = source[index++];\n str += ch;\n\n if (ch === '\\\\') {\n ch = source[index++]; // ECMA-262 7.8.5\n\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n }\n\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n\n if (!terminated) {\n throwError({}, MessageUnterminatedRegExp);\n } // Exclude leading and trailing slash.\n\n\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n}\n\nfunction scanRegExpFlags() {\n var ch, str, flags;\n str = '';\n flags = '';\n\n while (index < length) {\n ch = source[index];\n\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n\n ++index;\n\n if (ch === '\\\\' && index < length) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } else {\n flags += ch;\n str += ch;\n }\n }\n\n if (flags.search(/[^gimuy]/g) >= 0) {\n throwError({}, MessageInvalidRegExp, flags);\n }\n\n return {\n value: flags,\n literal: str\n };\n}\n\nfunction scanRegExp() {\n var start, body, flags, value;\n lookahead = null;\n skipComment();\n start = index;\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n}\n\nfunction isIdentifierName(token) {\n return token.type === TokenIdentifier || token.type === TokenKeyword || token.type === TokenBooleanLiteral || token.type === TokenNullLiteral;\n}\n\nfunction advance() {\n skipComment();\n\n if (index >= length) {\n return {\n type: TokenEOF,\n start: index,\n end: index\n };\n }\n\n const ch = source.charCodeAt(index);\n\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n } // Very common: ( and ) and ;\n\n\n if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n return scanPunctuator();\n } // String literal starts with single quote (U+0027) or double quote (U+0022).\n\n\n if (ch === 0x27 || ch === 0x22) {\n return scanStringLiteral();\n } // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n\n\n if (ch === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n}\n\nfunction lex() {\n const token = lookahead;\n index = token.end;\n lookahead = advance();\n index = token.end;\n return token;\n}\n\nfunction peek() {\n const pos = index;\n lookahead = advance();\n index = pos;\n}\n\nfunction finishArrayExpression(elements) {\n const node = new ASTNode(SyntaxArrayExpression);\n node.elements = elements;\n return node;\n}\n\nfunction finishBinaryExpression(operator, left, right) {\n const node = new ASTNode(operator === '||' || operator === '&&' ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n node.operator = operator;\n node.left = left;\n node.right = right;\n return node;\n}\n\nfunction finishCallExpression(callee, args) {\n const node = new ASTNode(SyntaxCallExpression);\n node.callee = callee;\n node.arguments = args;\n return node;\n}\n\nfunction finishConditionalExpression(test, consequent, alternate) {\n const node = new ASTNode(SyntaxConditionalExpression);\n node.test = test;\n node.consequent = consequent;\n node.alternate = alternate;\n return node;\n}\n\nfunction finishIdentifier(name) {\n const node = new ASTNode(SyntaxIdentifier);\n node.name = name;\n return node;\n}\n\nfunction finishLiteral(token) {\n const node = new ASTNode(SyntaxLiteral);\n node.value = token.value;\n node.raw = source.slice(token.start, token.end);\n\n if (token.regex) {\n if (node.raw === '//') {\n node.raw = '/(?:)/';\n }\n\n node.regex = token.regex;\n }\n\n return node;\n}\n\nfunction finishMemberExpression(accessor, object, property) {\n const node = new ASTNode(SyntaxMemberExpression);\n node.computed = accessor === '[';\n node.object = object;\n node.property = property;\n if (!node.computed) property.member = true;\n return node;\n}\n\nfunction finishObjectExpression(properties) {\n const node = new ASTNode(SyntaxObjectExpression);\n node.properties = properties;\n return node;\n}\n\nfunction finishProperty(kind, key, value) {\n const node = new ASTNode(SyntaxProperty);\n node.key = key;\n node.value = value;\n node.kind = kind;\n return node;\n}\n\nfunction finishUnaryExpression(operator, argument) {\n const node = new ASTNode(SyntaxUnaryExpression);\n node.operator = operator;\n node.argument = argument;\n node.prefix = true;\n return node;\n} // Throw an exception\n\n\nfunction throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(/%(\\d)/g, (whole, index) => {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n });\n error = new Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n} // Throw an exception because of the token.\n\n\nfunction throwUnexpected(token) {\n if (token.type === TokenEOF) {\n throwError(token, MessageUnexpectedEOS);\n }\n\n if (token.type === TokenNumericLiteral) {\n throwError(token, MessageUnexpectedNumber);\n }\n\n if (token.type === TokenStringLiteral) {\n throwError(token, MessageUnexpectedString);\n }\n\n if (token.type === TokenIdentifier) {\n throwError(token, MessageUnexpectedIdentifier);\n }\n\n if (token.type === TokenKeyword) {\n throwError(token, MessageUnexpectedReserved);\n } // BooleanLiteral, NullLiteral, or Punctuator.\n\n\n throwError(token, MessageUnexpectedToken, token.value);\n} // Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\n\nfunction expect(value) {\n const token = lex();\n\n if (token.type !== TokenPunctuator || token.value !== value) {\n throwUnexpected(token);\n }\n} // Return true if the next token matches the specified punctuator.\n\n\nfunction match(value) {\n return lookahead.type === TokenPunctuator && lookahead.value === value;\n} // Return true if the next token matches the specified keyword\n\n\nfunction matchKeyword(keyword) {\n return lookahead.type === TokenKeyword && lookahead.value === keyword;\n} // 11.1.4 Array Initialiser\n\n\nfunction parseArrayInitialiser() {\n const elements = [];\n index = lookahead.start;\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseConditionalExpression());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n lex();\n return finishArrayExpression(elements);\n} // 11.1.5 Object Initialiser\n\n\nfunction parseObjectPropertyKey() {\n index = lookahead.start;\n const token = lex(); // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n if (token.octal) {\n throwError(token, MessageStrictOctalLiteral);\n }\n\n return finishLiteral(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseObjectProperty() {\n var token, key, id, value;\n index = lookahead.start;\n token = lookahead;\n\n if (token.type === TokenIdentifier) {\n id = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', id, value);\n }\n\n if (token.type === TokenEOF || token.type === TokenPunctuator) {\n throwUnexpected(token);\n } else {\n key = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', key, value);\n }\n}\n\nfunction parseObjectInitialiser() {\n var properties = [],\n property,\n name,\n key,\n map = {},\n toString = String;\n index = lookahead.start;\n expect('{');\n\n while (!match('}')) {\n property = parseObjectProperty();\n\n if (property.key.type === SyntaxIdentifier) {\n name = property.key.name;\n } else {\n name = toString(property.key.value);\n }\n\n key = '$' + name;\n\n if (Object.prototype.hasOwnProperty.call(map, key)) {\n throwError({}, MessageStrictDuplicateProperty);\n } else {\n map[key] = true;\n }\n\n properties.push(property);\n\n if (!match('}')) {\n expect(',');\n }\n }\n\n expect('}');\n return finishObjectExpression(properties);\n} // 11.1.6 The Grouping Operator\n\n\nfunction parseGroupExpression() {\n expect('(');\n const expr = parseExpression();\n expect(')');\n return expr;\n} // 11.1 Primary Expressions\n\n\nconst legalKeywords = {\n 'if': 1\n};\n\nfunction parsePrimaryExpression() {\n var type, token, expr;\n\n if (match('(')) {\n return parseGroupExpression();\n }\n\n if (match('[')) {\n return parseArrayInitialiser();\n }\n\n if (match('{')) {\n return parseObjectInitialiser();\n }\n\n type = lookahead.type;\n index = lookahead.start;\n\n if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n expr = finishIdentifier(lex().value);\n } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n if (lookahead.octal) {\n throwError(lookahead, MessageStrictOctalLiteral);\n }\n\n expr = finishLiteral(lex());\n } else if (type === TokenKeyword) {\n throw new Error(DISABLED);\n } else if (type === TokenBooleanLiteral) {\n token = lex();\n token.value = token.value === 'true';\n expr = finishLiteral(token);\n } else if (type === TokenNullLiteral) {\n token = lex();\n token.value = null;\n expr = finishLiteral(token);\n } else if (match('/') || match('/=')) {\n expr = finishLiteral(scanRegExp());\n peek();\n } else {\n throwUnexpected(lex());\n }\n\n return expr;\n} // 11.2 Left-Hand-Side Expressions\n\n\nfunction parseArguments() {\n const args = [];\n expect('(');\n\n if (!match(')')) {\n while (index < length) {\n args.push(parseConditionalExpression());\n\n if (match(')')) {\n break;\n }\n\n expect(',');\n }\n }\n\n expect(')');\n return args;\n}\n\nfunction parseNonComputedProperty() {\n index = lookahead.start;\n const token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseNonComputedMember() {\n expect('.');\n return parseNonComputedProperty();\n}\n\nfunction parseComputedMember() {\n expect('[');\n const expr = parseExpression();\n expect(']');\n return expr;\n}\n\nfunction parseLeftHandSideExpressionAllowCall() {\n var expr, args, property;\n expr = parsePrimaryExpression();\n\n for (;;) {\n if (match('.')) {\n property = parseNonComputedMember();\n expr = finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = finishCallExpression(expr, args);\n } else if (match('[')) {\n property = parseComputedMember();\n expr = finishMemberExpression('[', expr, property);\n } else {\n break;\n }\n }\n\n return expr;\n} // 11.3 Postfix Expressions\n\n\nfunction parsePostfixExpression() {\n const expr = parseLeftHandSideExpressionAllowCall();\n\n if (lookahead.type === TokenPunctuator) {\n if (match('++') || match('--')) {\n throw new Error(DISABLED);\n }\n }\n\n return expr;\n} // 11.4 Unary Operators\n\n\nfunction parseUnaryExpression() {\n var token, expr;\n\n if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n throw new Error(DISABLED);\n } else if (match('+') || match('-') || match('~') || match('!')) {\n token = lex();\n expr = parseUnaryExpression();\n expr = finishUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw new Error(DISABLED);\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n}\n\nfunction binaryPrecedence(token) {\n let prec = 0;\n\n if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '|':\n prec = 3;\n break;\n\n case '^':\n prec = 4;\n break;\n\n case '&':\n prec = 5;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n case 'in':\n prec = 7;\n break;\n\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n }\n\n return prec;\n} // 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\n\nfunction parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n marker = lookahead;\n left = parseUnaryExpression();\n token = lookahead;\n prec = binaryPrecedence(token);\n\n if (prec === 0) {\n return left;\n }\n\n token.prec = prec;\n lex();\n markers = [marker, lookahead];\n right = parseUnaryExpression();\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n // Reduce: make a binary expression from the three topmost entries.\n while (stack.length > 2 && prec <= stack[stack.length - 2].prec) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = finishBinaryExpression(operator, left, right);\n stack.push(expr);\n } // Shift.\n\n\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = parseUnaryExpression();\n stack.push(expr);\n } // Final reduce to clean-up the stack.\n\n\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n\n while (i > 1) {\n markers.pop();\n expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n} // 11.12 Conditional Operator\n\n\nfunction parseConditionalExpression() {\n var expr, consequent, alternate;\n expr = parseBinaryExpression();\n\n if (match('?')) {\n lex();\n consequent = parseConditionalExpression();\n expect(':');\n alternate = parseConditionalExpression();\n expr = finishConditionalExpression(expr, consequent, alternate);\n }\n\n return expr;\n} // 11.14 Comma Operator\n\n\nfunction parseExpression() {\n const expr = parseConditionalExpression();\n\n if (match(',')) {\n throw new Error(DISABLED); // no sequence expressions\n }\n\n return expr;\n}\n\nfunction parser (code) {\n source = code;\n index = 0;\n length = source.length;\n lookahead = null;\n peek();\n const expr = parseExpression();\n\n if (lookahead.type !== TokenEOF) {\n throw new Error('Unexpect token after expression.');\n }\n\n return expr;\n}\n\nvar Constants = {\n NaN: 'NaN',\n E: 'Math.E',\n LN2: 'Math.LN2',\n LN10: 'Math.LN10',\n LOG2E: 'Math.LOG2E',\n LOG10E: 'Math.LOG10E',\n PI: 'Math.PI',\n SQRT1_2: 'Math.SQRT1_2',\n SQRT2: 'Math.SQRT2',\n MIN_VALUE: 'Number.MIN_VALUE',\n MAX_VALUE: 'Number.MAX_VALUE'\n};\n\nfunction Functions (codegen) {\n function fncall(name, args, cast, type) {\n let obj = codegen(args[0]);\n\n if (cast) {\n obj = cast + '(' + obj + ')';\n if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n }\n\n return obj + '.' + name + (type < 0 ? '' : type === 0 ? '()' : '(' + args.slice(1).map(codegen).join(',') + ')');\n }\n\n function fn(name, cast, type) {\n return args => fncall(name, args, cast, type);\n }\n\n const DATE = 'new Date',\n STRING = 'String',\n REGEXP = 'RegExp';\n return {\n // MATH functions\n isNaN: 'Number.isNaN',\n isFinite: 'Number.isFinite',\n abs: 'Math.abs',\n acos: 'Math.acos',\n asin: 'Math.asin',\n atan: 'Math.atan',\n atan2: 'Math.atan2',\n ceil: 'Math.ceil',\n cos: 'Math.cos',\n exp: 'Math.exp',\n floor: 'Math.floor',\n log: 'Math.log',\n max: 'Math.max',\n min: 'Math.min',\n pow: 'Math.pow',\n random: 'Math.random',\n round: 'Math.round',\n sin: 'Math.sin',\n sqrt: 'Math.sqrt',\n tan: 'Math.tan',\n clamp: function (args) {\n if (args.length < 3) error('Missing arguments to clamp function.');\n if (args.length > 3) error('Too many arguments to clamp function.');\n const a = args.map(codegen);\n return 'Math.max(' + a[1] + ', Math.min(' + a[2] + ',' + a[0] + '))';\n },\n // DATE functions\n now: 'Date.now',\n utc: 'Date.UTC',\n datetime: DATE,\n date: fn('getDate', DATE, 0),\n day: fn('getDay', DATE, 0),\n year: fn('getFullYear', DATE, 0),\n month: fn('getMonth', DATE, 0),\n hours: fn('getHours', DATE, 0),\n minutes: fn('getMinutes', DATE, 0),\n seconds: fn('getSeconds', DATE, 0),\n milliseconds: fn('getMilliseconds', DATE, 0),\n time: fn('getTime', DATE, 0),\n timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n utcdate: fn('getUTCDate', DATE, 0),\n utcday: fn('getUTCDay', DATE, 0),\n utcyear: fn('getUTCFullYear', DATE, 0),\n utcmonth: fn('getUTCMonth', DATE, 0),\n utchours: fn('getUTCHours', DATE, 0),\n utcminutes: fn('getUTCMinutes', DATE, 0),\n utcseconds: fn('getUTCSeconds', DATE, 0),\n utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n // sequence functions\n length: fn('length', null, -1),\n // STRING functions\n parseFloat: 'parseFloat',\n parseInt: 'parseInt',\n upper: fn('toUpperCase', STRING, 0),\n lower: fn('toLowerCase', STRING, 0),\n substring: fn('substring', STRING),\n split: fn('split', STRING),\n trim: fn('trim', STRING, 0),\n // REGEXP functions\n regexp: REGEXP,\n test: fn('test', REGEXP),\n // Control Flow functions\n if: function (args) {\n if (args.length < 3) error('Missing arguments to if function.');\n if (args.length > 3) error('Too many arguments to if function.');\n const a = args.map(codegen);\n return '(' + a[0] + '?' + a[1] + ':' + a[2] + ')';\n }\n };\n}\n\nfunction stripQuotes(s) {\n const n = s && s.length - 1;\n return n && (s[0] === '\"' && s[n] === '\"' || s[0] === '\\'' && s[n] === '\\'') ? s.slice(1, -1) : s;\n}\n\nfunction codegen (opt) {\n opt = opt || {};\n const allowed = opt.allowed ? toSet(opt.allowed) : {},\n forbidden = opt.forbidden ? toSet(opt.forbidden) : {},\n constants = opt.constants || Constants,\n functions = (opt.functions || Functions)(visit),\n globalvar = opt.globalvar,\n fieldvar = opt.fieldvar,\n outputGlobal = isFunction(globalvar) ? globalvar : id => \"\".concat(globalvar, \"[\\\"\").concat(id, \"\\\"]\");\n let globals = {},\n fields = {},\n memberDepth = 0;\n\n function visit(ast) {\n if (isString(ast)) return ast;\n const generator = Generators[ast.type];\n if (generator == null) error('Unsupported type: ' + ast.type);\n return generator(ast);\n }\n\n const Generators = {\n Literal: n => n.raw,\n Identifier: n => {\n const id = n.name;\n\n if (memberDepth > 0) {\n return id;\n } else if (hasOwnProperty(forbidden, id)) {\n return error('Illegal identifier: ' + id);\n } else if (hasOwnProperty(constants, id)) {\n return constants[id];\n } else if (hasOwnProperty(allowed, id)) {\n return id;\n } else {\n globals[id] = 1;\n return outputGlobal(id);\n }\n },\n MemberExpression: n => {\n const d = !n.computed,\n o = visit(n.object);\n if (d) memberDepth += 1;\n const p = visit(n.property);\n\n if (o === fieldvar) {\n // strip quotes to sanitize field name (#1653)\n fields[stripQuotes(p)] = 1;\n }\n\n if (d) memberDepth -= 1;\n return o + (d ? '.' + p : '[' + p + ']');\n },\n CallExpression: n => {\n if (n.callee.type !== 'Identifier') {\n error('Illegal callee type: ' + n.callee.type);\n }\n\n const callee = n.callee.name,\n args = n.arguments,\n fn = hasOwnProperty(functions, callee) && functions[callee];\n if (!fn) error('Unrecognized function: ' + callee);\n return isFunction(fn) ? fn(args) : fn + '(' + args.map(visit).join(',') + ')';\n },\n ArrayExpression: n => '[' + n.elements.map(visit).join(',') + ']',\n BinaryExpression: n => '(' + visit(n.left) + ' ' + n.operator + ' ' + visit(n.right) + ')',\n UnaryExpression: n => '(' + n.operator + visit(n.argument) + ')',\n ConditionalExpression: n => '(' + visit(n.test) + '?' + visit(n.consequent) + ':' + visit(n.alternate) + ')',\n LogicalExpression: n => '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n ObjectExpression: n => '{' + n.properties.map(visit).join(',') + '}',\n Property: n => {\n memberDepth += 1;\n const k = visit(n.key);\n memberDepth -= 1;\n return k + ':' + visit(n.value);\n }\n };\n\n function codegen(ast) {\n const result = {\n code: visit(ast),\n globals: Object.keys(globals),\n fields: Object.keys(fields)\n };\n globals = {};\n fields = {};\n return result;\n }\n\n codegen.functions = functions;\n codegen.constants = constants;\n return codegen;\n}\n\nexport { ASTNode, ArrayExpression, BinaryExpression, CallExpression, ConditionalExpression, Identifier, Literal, LogicalExpression, MemberExpression, ObjectExpression, Property, RawCode, UnaryExpression, codegen, Constants as constants, Functions as functions, parser as parse };\n","import {parse} from 'vega-expression';\n\nfunction getName(node: any) {\n const name: string[] = [];\n\n if (node.type === 'Identifier') {\n return [node.name];\n }\n\n if (node.type === 'Literal') {\n return [node.value];\n }\n\n if (node.type === 'MemberExpression') {\n name.push(...getName(node.object));\n name.push(...getName(node.property));\n }\n\n return name;\n}\n\nfunction startsWithDatum(node: any): boolean {\n if (node.object.type === 'MemberExpression') {\n return startsWithDatum(node.object);\n }\n return node.object.name === 'datum';\n}\n\nexport function getDependentFields(expression: string) {\n const ast = parse(expression);\n const dependents = new Set();\n ast.visit((node: any) => {\n if (node.type === 'MemberExpression' && startsWithDatum(node)) {\n dependents.add(getName(node).slice(1).join('.'));\n }\n });\n\n return dependents;\n}\n","import {FilterTransform as VgFilterTransform} from 'vega';\nimport {LogicalComposition} from '../../logical';\nimport {Predicate} from '../../predicate';\nimport {duplicate} from '../../util';\nimport {Model} from '../model';\nimport {expression} from '../predicate';\nimport {DataFlowNode} from './dataflow';\nimport {getDependentFields} from './expressions';\n\nexport class FilterNode extends DataFlowNode {\n private expr: string;\n private _dependentFields: Set;\n public clone() {\n return new FilterNode(null, this.model, duplicate(this.filter));\n }\n\n constructor(\n parent: DataFlowNode,\n private readonly model: Model,\n private readonly filter: LogicalComposition\n ) {\n super(parent);\n\n // TODO: refactor this to not take a node and\n // then add a static function makeFromOperand and make the constructor take only an expression\n this.expr = expression(this.model, this.filter, this);\n\n this._dependentFields = getDependentFields(this.expr);\n }\n\n public dependentFields() {\n return this._dependentFields;\n }\n\n public producedFields() {\n return new Set(); // filter does not produce any new fields\n }\n\n public assemble(): VgFilterTransform {\n return {\n type: 'filter',\n expr: this.expr\n };\n }\n\n public hash() {\n return `Filter ${this.expr}`;\n }\n}\n","import {selector as parseSelector} from 'vega-event-selector';\nimport {array, isObject, isString, stringValue} from 'vega-util';\nimport {selectionCompilers, SelectionComponent, STORE} from '.';\nimport {warn} from '../../log';\nimport {BaseSelectionConfig, SelectionParameter, ParameterExtent} from '../../selection';\nimport {Dict, duplicate, entries, replacePathInField, varName} from '../../util';\nimport {DataFlowNode, OutputNode} from '../data/dataflow';\nimport {FilterNode} from '../data/filter';\nimport {Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {DataSourceType} from '../../data';\nimport {ParameterPredicate} from '../../predicate';\n\nexport function parseUnitSelection(model: UnitModel, selDefs: SelectionParameter[]) {\n const selCmpts: Dict> = {};\n const selectionConfig = model.config.selection;\n\n if (!selDefs || !selDefs.length) return selCmpts;\n\n for (const def of selDefs) {\n const name = varName(def.name);\n const selDef = def.select;\n const type = isString(selDef) ? selDef : selDef.type;\n const defaults: BaseSelectionConfig = isObject(selDef) ? duplicate(selDef) : {type};\n\n // Set default values from config if a property hasn't been specified,\n // or if it is true. E.g., \"translate\": true should use the default\n // event handlers for translate. However, true may be a valid value for\n // a property (e.g., \"nearest\": true). Project transform applies its defaults.\n const {fields, encodings, ...cfg} = selectionConfig[type];\n for (const key in cfg) {\n if (key === 'mark') {\n defaults[key] = {...cfg[key], ...defaults[key]};\n }\n\n if (defaults[key] === undefined || defaults[key] === true) {\n defaults[key] = cfg[key] ?? defaults[key];\n }\n }\n\n const selCmpt: SelectionComponent = (selCmpts[name] = {\n ...defaults,\n name,\n type,\n init: def.value,\n bind: def.bind,\n events: isString(defaults.on) ? parseSelector(defaults.on, 'scope') : array(duplicate(defaults.on))\n } as any);\n\n for (const c of selectionCompilers) {\n if (c.defined(selCmpt) && c.parse) {\n c.parse(model, selCmpt, def);\n }\n }\n }\n\n return selCmpts;\n}\n\nexport function parseSelectionPredicate(\n model: Model,\n pred: ParameterPredicate,\n dfnode?: DataFlowNode,\n datum = 'datum'\n): string {\n const name = isString(pred) ? pred : pred.param;\n const vname = varName(name);\n const store = stringValue(vname + STORE);\n let selCmpt;\n\n try {\n selCmpt = model.getSelectionComponent(vname, name);\n } catch (e) {\n // If a selection isn't found, treat as a variable parameter and coerce to boolean.\n return `!!${vname}`;\n }\n\n if (selCmpt.project.timeUnit) {\n const child = dfnode ?? model.component.data.raw;\n const tunode = selCmpt.project.timeUnit.clone();\n if (child.parent) {\n tunode.insertAsParentOf(child);\n } else {\n child.parent = tunode;\n }\n }\n\n const test = `vlSelectionTest(${store}, ${datum}${\n selCmpt.resolve === 'global' ? ')' : `, ${stringValue(selCmpt.resolve)})`\n }`;\n const length = `length(data(${store}))`;\n\n return pred.empty === false ? `${length} && ${test}` : `!${length} || ${test}`;\n}\n\nexport function parseSelectionExtent(model: Model, name: string, extent: ParameterExtent) {\n const vname = varName(name);\n const encoding = extent['encoding'];\n let field = extent['field'];\n let selCmpt;\n\n try {\n selCmpt = model.getSelectionComponent(vname, name);\n } catch (e) {\n // If a selection isn't found, treat it as a variable parameter.\n return vname;\n }\n\n if (!encoding && !field) {\n field = selCmpt.project.items[0].field;\n if (selCmpt.project.items.length > 1) {\n warn(\n 'A \"field\" or \"encoding\" must be specified when using a selection as a scale domain. ' +\n `Using \"field\": ${stringValue(field)}.`\n );\n }\n } else if (encoding && !field) {\n const encodings = selCmpt.project.items.filter(p => p.channel === encoding);\n if (!encodings.length || encodings.length > 1) {\n field = selCmpt.project.items[0].field;\n warn(\n (!encodings.length ? 'No ' : 'Multiple ') +\n `matching ${stringValue(encoding)} encoding found for selection ${stringValue(extent.param)}. ` +\n `Using \"field\": ${stringValue(field)}.`\n );\n } else {\n field = encodings[0].field;\n }\n }\n\n return `${selCmpt.name}[${stringValue(replacePathInField(field))}]`;\n}\n\nexport function materializeSelections(model: UnitModel, main: OutputNode) {\n for (const [selection, selCmpt] of entries(model.component.selection ?? {})) {\n const lookupName = model.getName(`lookup_${selection}`);\n model.component.data.outputNodes[lookupName] = selCmpt.materialized = new OutputNode(\n new FilterNode(main, model, {param: selection}),\n lookupName,\n DataSourceType.Lookup,\n model.component.data.outputNodeRefCounts\n );\n }\n}\n","import {isString} from 'vega-util';\nimport {LogicalComposition} from '../logical';\nimport {fieldFilterExpression, isSelectionPredicate, Predicate} from '../predicate';\nimport {logicalExpr} from '../util';\nimport {DataFlowNode} from './data/dataflow';\nimport {Model} from './model';\nimport {parseSelectionPredicate} from './selection/parse';\n\n/**\n * Converts a predicate into an expression.\n */\n// model is only used for selection filters.\nexport function expression(model: Model, filterOp: LogicalComposition, node?: DataFlowNode): string {\n return logicalExpr(filterOp, (predicate: Predicate) => {\n if (isString(predicate)) {\n return predicate;\n } else if (isSelectionPredicate(predicate)) {\n return parseSelectionPredicate(model, predicate, node);\n } else {\n // Filter Object\n return fieldFilterExpression(predicate);\n }\n });\n}\n","import {Axis as VgAxis, AxisEncode, NewSignal, SignalRef, Text} from 'vega';\nimport {array, isArray} from 'vega-util';\nimport {AXIS_PARTS, AXIS_PROPERTY_TYPE, CONDITIONAL_AXIS_PROP_INDEX, isConditionalAxisValue} from '../../axis';\nimport {POSITION_SCALE_CHANNELS} from '../../channel';\nimport {defaultTitle, FieldDefBase} from '../../channeldef';\nimport {Config} from '../../config';\nimport {isText} from '../../title';\nimport {contains, getFirstDefined, isEmpty, replaceAll} from '../../util';\nimport {isSignalRef, VgEncodeChannel, VgValueRef} from '../../vega.schema';\nimport {exprFromValueOrSignalRef} from '../common';\nimport {Model} from '../model';\nimport {expression} from '../predicate';\nimport {AxisComponent, AxisComponentIndex} from './component';\n\nfunction assembleTitle(title: Text | FieldDefBase[] | SignalRef, config: Config): Text | SignalRef {\n if (!title) {\n return undefined;\n }\n if (isArray(title) && !isText(title)) {\n return title.map(fieldDef => defaultTitle(fieldDef, config)).join(', ');\n }\n return title;\n}\n\nfunction setAxisEncode(\n axis: Omit,\n part: keyof AxisEncode,\n vgProp: VgEncodeChannel,\n vgRef: VgValueRef | readonly VgValueRef[]\n) {\n axis.encode ??= {};\n axis.encode[part] ??= {};\n axis.encode[part].update ??= {};\n // TODO: remove as any after https://github.com/prisma/nexus-prisma/issues/291\n (axis.encode[part].update[vgProp] as any) = vgRef;\n}\n\nexport function assembleAxis(\n axisCmpt: AxisComponent,\n kind: 'main' | 'grid',\n config: Config,\n opt: {\n header: boolean; // whether this is called via a header\n } = {header: false}\n): VgAxis {\n const {disable, orient, scale, labelExpr, title, zindex, ...axis} = axisCmpt.combine();\n\n if (disable) {\n return undefined;\n }\n\n for (const prop in axis) {\n const propType = AXIS_PROPERTY_TYPE[prop];\n const propValue = axis[prop];\n\n if (propType && propType !== kind && propType !== 'both') {\n // Remove properties that are not valid for this kind of axis\n delete axis[prop];\n } else if (isConditionalAxisValue(propValue)) {\n // deal with conditional axis value\n\n const {condition, ...valueOrSignalRef} = propValue;\n const conditions = array(condition);\n\n const propIndex = CONDITIONAL_AXIS_PROP_INDEX[prop];\n if (propIndex) {\n const {vgProp, part} = propIndex;\n // If there is a corresponding Vega property for the channel,\n // use Vega's custom axis encoding and delete the original axis property to avoid conflicts\n\n const vgRef = [\n ...conditions.map(c => {\n const {test, ...valueOrSignalCRef} = c;\n return {\n test: expression(null, test),\n ...valueOrSignalCRef\n };\n }),\n valueOrSignalRef\n ];\n setAxisEncode(axis, part, vgProp, vgRef);\n delete axis[prop];\n } else if (propIndex === null) {\n // If propIndex is null, this means we support conditional axis property by converting the condition to signal instead.\n const signalRef: SignalRef = {\n signal:\n conditions\n .map(c => {\n const {test, ...valueOrSignalCRef} = c;\n return `${expression(null, test)} ? ${exprFromValueOrSignalRef(valueOrSignalCRef)} : `;\n })\n .join('') + exprFromValueOrSignalRef(valueOrSignalRef)\n };\n axis[prop] = signalRef;\n }\n } else if (isSignalRef(propValue)) {\n const propIndex = CONDITIONAL_AXIS_PROP_INDEX[prop];\n if (propIndex) {\n const {vgProp, part} = propIndex;\n setAxisEncode(axis, part, vgProp, propValue);\n delete axis[prop];\n } // else do nothing since the property already supports signal\n }\n\n // Do not pass labelAlign/Baseline = null to Vega since it won't pass the schema\n // Note that we need to use null so the default labelAlign is preserved.\n if (contains(['labelAlign', 'labelBaseline'], prop) && axis[prop] === null) {\n delete axis[prop];\n }\n }\n\n if (kind === 'grid') {\n if (!axis.grid) {\n return undefined;\n }\n\n // Remove unnecessary encode block\n if (axis.encode) {\n // Only need to keep encode block for grid\n const {grid} = axis.encode;\n axis.encode = {\n ...(grid ? {grid} : {})\n };\n\n if (isEmpty(axis.encode)) {\n delete axis.encode;\n }\n }\n\n return {\n scale,\n orient,\n ...axis,\n domain: false,\n labels: false,\n aria: false, // always hide grid axis\n\n // Always set min/maxExtent to 0 to ensure that `config.axis*.minExtent` and `config.axis*.maxExtent`\n // would not affect gridAxis\n maxExtent: 0,\n minExtent: 0,\n ticks: false,\n zindex: getFirstDefined(zindex, 0) // put grid behind marks by default\n };\n } else {\n // kind === 'main'\n\n if (!opt.header && axisCmpt.mainExtracted) {\n // if mainExtracted has been extracted to a separate facet\n return undefined;\n }\n\n if (labelExpr !== undefined) {\n let expr = labelExpr;\n if (axis.encode?.labels?.update && isSignalRef(axis.encode.labels.update.text)) {\n expr = replaceAll(labelExpr, 'datum.label', axis.encode.labels.update.text.signal);\n }\n setAxisEncode(axis, 'labels', 'text', {signal: expr});\n }\n\n if (axis.labelAlign === null) {\n delete axis.labelAlign;\n }\n\n // Remove unnecessary encode block\n if (axis.encode) {\n for (const part of AXIS_PARTS) {\n if (!axisCmpt.hasAxisPart(part)) {\n delete axis.encode[part];\n }\n }\n if (isEmpty(axis.encode)) {\n delete axis.encode;\n }\n }\n\n const titleString = assembleTitle(title, config);\n\n return {\n scale,\n orient,\n grid: false,\n ...(titleString ? {title: titleString} : {}),\n ...axis,\n ...(config.aria === false ? {aria: false} : {}),\n zindex: getFirstDefined(zindex, 0) // put axis line above marks by default\n };\n }\n}\n\n/**\n * Add axis signals so grid line works correctly\n * (Fix https://github.com/vega/vega-lite/issues/4226)\n */\nexport function assembleAxisSignals(model: Model): NewSignal[] {\n const {axes} = model.component;\n const signals: NewSignal[] = [];\n\n for (const channel of POSITION_SCALE_CHANNELS) {\n if (axes[channel]) {\n for (const axis of axes[channel]) {\n if (!axis.get('disable') && !axis.get('gridScale')) {\n // If there is x-axis but no y-scale for gridScale, need to set height/width so x-axis can draw the grid with the right height. Same for y-axis and width.\n\n const sizeType = channel === 'x' ? 'height' : 'width';\n const update = model.getSizeSignalRef(sizeType).signal;\n\n if (sizeType !== update) {\n signals.push({\n name: sizeType,\n update: update\n });\n }\n }\n }\n }\n }\n return signals;\n}\n\nexport function assembleAxes(axisComponents: AxisComponentIndex, config: Config): VgAxis[] {\n const {x = [], y = []} = axisComponents;\n return [\n ...x.map(a => assembleAxis(a, 'grid', config)),\n ...y.map(a => assembleAxis(a, 'grid', config)),\n ...x.map(a => assembleAxis(a, 'main', config)),\n ...y.map(a => assembleAxis(a, 'main', config))\n ].filter(a => a); // filter undefined\n}\n","import {ScaleType, SignalRef} from 'vega';\nimport {array} from 'vega-util';\nimport {AxisConfig} from '../../axis';\nimport {PositionScaleChannel} from '../../channel';\nimport {Config, StyleConfigIndex} from '../../config';\nimport {isQuantitative} from '../../scale';\nimport {keys, titleCase} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {getStyleConfig, signalOrStringValue} from '../common';\n\nfunction getAxisConfigFromConfigTypes(\n configTypes: string[],\n config: Config,\n channel: 'x' | 'y',\n orient: string | SignalRef\n) {\n // TODO: add special casing to add conditional value based on orient signal\n return Object.assign.apply(null, [\n {},\n ...configTypes.map(configType => {\n if (configType === 'axisOrient') {\n const orient1 = channel === 'x' ? 'bottom' : 'left';\n const orientConfig1 = config[channel === 'x' ? 'axisBottom' : 'axisLeft'] || {};\n const orientConfig2 = config[channel === 'x' ? 'axisTop' : 'axisRight'] || {};\n\n const props = new Set([...keys(orientConfig1), ...keys(orientConfig2)]);\n\n const conditionalOrientAxisConfig = {};\n for (const prop of props.values()) {\n conditionalOrientAxisConfig[prop] = {\n // orient is surely signal in this case\n signal: `${orient['signal']} === \"${orient1}\" ? ${signalOrStringValue(\n orientConfig1[prop]\n )} : ${signalOrStringValue(orientConfig2[prop])}`\n };\n }\n\n return conditionalOrientAxisConfig;\n }\n\n return config[configType];\n })\n ]);\n}\n\nexport type AxisConfigs = ReturnType;\n\nexport function getAxisConfigs(\n channel: PositionScaleChannel,\n scaleType: ScaleType,\n orient: string | SignalRef,\n config: Config\n) {\n const typeBasedConfigTypes =\n scaleType === 'band'\n ? ['axisDiscrete', 'axisBand']\n : scaleType === 'point'\n ? ['axisDiscrete', 'axisPoint']\n : isQuantitative(scaleType)\n ? ['axisQuantitative']\n : scaleType === 'time' || scaleType === 'utc'\n ? ['axisTemporal']\n : [];\n\n const axisChannel = channel === 'x' ? 'axisX' : 'axisY';\n const axisOrient = isSignalRef(orient) ? 'axisOrient' : `axis${titleCase(orient)}`; // axisTop, axisBottom, ...\n\n const vlOnlyConfigTypes = [\n // technically Vega does have axisBand, but if we make another separation here,\n // it will further introduce complexity in the code\n ...typeBasedConfigTypes,\n ...typeBasedConfigTypes.map(c => axisChannel + c.substr(4))\n ];\n\n const vgConfigTypes = ['axis', axisOrient, axisChannel];\n\n return {\n vlOnlyAxisConfig: getAxisConfigFromConfigTypes(vlOnlyConfigTypes, config, channel, orient),\n vgAxisConfig: getAxisConfigFromConfigTypes(vgConfigTypes, config, channel, orient),\n axisConfigStyle: getAxisConfigStyle([...vgConfigTypes, ...vlOnlyConfigTypes], config)\n };\n}\n\nexport function getAxisConfigStyle(axisConfigTypes: string[], config: Config) {\n const toMerge = [{}];\n for (const configType of axisConfigTypes) {\n // TODO: add special casing to add conditional value based on orient signal\n let style = config[configType]?.style;\n if (style) {\n style = array(style);\n for (const s of style) {\n toMerge.push(config.style[s]);\n }\n }\n }\n return Object.assign.apply(null, toMerge);\n}\nexport function getAxisConfig(\n property: keyof AxisConfig,\n styleConfigIndex: StyleConfigIndex,\n style: string | string[],\n axisConfigs: Partial = {}\n): {configFrom?: string; configValue?: any} {\n const styleConfig = getStyleConfig(property, style, styleConfigIndex);\n\n if (styleConfig !== undefined) {\n return {\n configFrom: 'style',\n configValue: styleConfig\n };\n }\n\n for (const configFrom of ['vlOnlyAxisConfig', 'vgAxisConfig', 'axisConfigStyle']) {\n if (axisConfigs[configFrom]?.[property] !== undefined) {\n return {configFrom, configValue: axisConfigs[configFrom][property]};\n }\n }\n return {};\n}\n","import {Align, AxisOrient, Orient, SignalRef} from 'vega';\nimport {isArray, isObject} from 'vega-util';\nimport {AxisInternal} from '../../axis';\nimport {isBinned, isBinning} from '../../bin';\nimport {PositionScaleChannel, X} from '../../channel';\nimport {\n DatumDef,\n isDiscrete,\n isFieldDef,\n PositionDatumDef,\n PositionFieldDef,\n toFieldDefBase,\n TypedFieldDef,\n valueArray\n} from '../../channeldef';\nimport {Config, StyleConfigIndex} from '../../config';\nimport {Mark} from '../../mark';\nimport {hasDiscreteDomain} from '../../scale';\nimport {Sort} from '../../sort';\nimport {normalizeTimeUnit} from '../../timeunit';\nimport {NOMINAL, ORDINAL, Type} from '../../type';\nimport {contains, normalizeAngle} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {mergeTitle, mergeTitleFieldDefs} from '../common';\nimport {guideFormat, guideFormatType} from '../format';\nimport {UnitModel} from '../unit';\nimport {ScaleType} from './../../scale';\nimport {AxisComponentProps} from './component';\nimport {AxisConfigs, getAxisConfig} from './config';\n\nexport interface AxisRuleParams {\n fieldOrDatumDef: PositionFieldDef | PositionDatumDef;\n axis: AxisInternal;\n channel: PositionScaleChannel;\n model: UnitModel;\n\n mark: Mark;\n scaleType: ScaleType;\n orient: Orient | SignalRef;\n labelAngle: number | SignalRef;\n config: Config;\n}\n\nexport const axisRules: {\n [k in keyof AxisComponentProps]?: (params: AxisRuleParams) => AxisComponentProps[k];\n} = {\n scale: ({model, channel}) => model.scaleName(channel),\n\n format: ({fieldOrDatumDef, config, axis}) => {\n const {format, formatType} = axis;\n return guideFormat(fieldOrDatumDef, fieldOrDatumDef.type, format, formatType, config, true);\n },\n\n formatType: ({axis, fieldOrDatumDef, scaleType}) => {\n const {formatType} = axis;\n return guideFormatType(formatType, fieldOrDatumDef, scaleType);\n },\n\n grid: ({fieldOrDatumDef, axis, scaleType}) => axis.grid ?? defaultGrid(scaleType, fieldOrDatumDef),\n\n gridScale: ({model, channel}) => gridScale(model, channel),\n\n labelAlign: ({axis, labelAngle, orient, channel}) =>\n axis.labelAlign || defaultLabelAlign(labelAngle, orient, channel),\n\n labelAngle: ({labelAngle}) => labelAngle, // we already calculate this in parse\n\n labelBaseline: ({axis, labelAngle, orient, channel}) =>\n axis.labelBaseline || defaultLabelBaseline(labelAngle, orient, channel),\n\n labelFlush: ({axis, fieldOrDatumDef, channel}) => axis.labelFlush ?? defaultLabelFlush(fieldOrDatumDef.type, channel),\n\n labelOverlap: ({axis, fieldOrDatumDef, scaleType}) =>\n axis.labelOverlap ??\n defaultLabelOverlap(\n fieldOrDatumDef.type,\n scaleType,\n isFieldDef(fieldOrDatumDef) && !!fieldOrDatumDef.timeUnit,\n isFieldDef(fieldOrDatumDef) ? fieldOrDatumDef.sort : undefined\n ),\n\n // we already calculate orient in parse\n orient: ({orient}) => orient as AxisOrient, // Need to cast until Vega supports signal\n\n tickCount: ({channel, model, axis, fieldOrDatumDef, scaleType}) => {\n const sizeType = channel === 'x' ? 'width' : channel === 'y' ? 'height' : undefined;\n const size = sizeType ? model.getSizeSignalRef(sizeType) : undefined;\n return axis.tickCount ?? defaultTickCount({fieldOrDatumDef, scaleType, size, values: axis.values});\n },\n\n title: ({axis, model, channel}) => {\n if (axis.title !== undefined) {\n return axis.title;\n }\n const fieldDefTitle = getFieldDefTitle(model, channel);\n if (fieldDefTitle !== undefined) {\n return fieldDefTitle;\n }\n const fieldDef = model.typedFieldDef(channel);\n const channel2 = channel === 'x' ? 'x2' : 'y2';\n const fieldDef2 = model.fieldDef(channel2);\n\n // If title not specified, store base parts of fieldDef (and fieldDef2 if exists)\n return mergeTitleFieldDefs(\n fieldDef ? [toFieldDefBase(fieldDef)] : [],\n isFieldDef(fieldDef2) ? [toFieldDefBase(fieldDef2)] : []\n );\n },\n\n values: ({axis, fieldOrDatumDef}) => values(axis, fieldOrDatumDef),\n\n zindex: ({axis, fieldOrDatumDef, mark}) => axis.zindex ?? defaultZindex(mark, fieldOrDatumDef)\n};\n\n// TODO: we need to refactor this method after we take care of config refactoring\n/**\n * Default rules for whether to show a grid should be shown for a channel.\n * If `grid` is unspecified, the default value is `true` for ordinal scales that are not binned\n */\n\nexport function defaultGrid(scaleType: ScaleType, fieldDef: TypedFieldDef | DatumDef) {\n return !hasDiscreteDomain(scaleType) && isFieldDef(fieldDef) && !isBinning(fieldDef?.bin) && !isBinned(fieldDef?.bin);\n}\n\nexport function gridScale(model: UnitModel, channel: PositionScaleChannel) {\n const gridChannel: PositionScaleChannel = channel === 'x' ? 'y' : 'x';\n if (model.getScaleComponent(gridChannel)) {\n return model.scaleName(gridChannel);\n }\n return undefined;\n}\n\nexport function getLabelAngle(\n fieldOrDatumDef: PositionFieldDef | PositionDatumDef,\n axis: AxisInternal,\n channel: PositionScaleChannel,\n styleConfig: StyleConfigIndex,\n axisConfigs?: AxisConfigs\n) {\n const labelAngle = axis?.labelAngle;\n // try axis value\n if (labelAngle !== undefined) {\n return isSignalRef(labelAngle) ? labelAngle : normalizeAngle(labelAngle);\n } else {\n // try axis config value\n const {configValue: angle} = getAxisConfig('labelAngle', styleConfig, axis?.style, axisConfigs);\n if (angle !== undefined) {\n return normalizeAngle(angle);\n } else {\n // get default value\n if (\n channel === X &&\n contains([NOMINAL, ORDINAL], fieldOrDatumDef.type) &&\n !(isFieldDef(fieldOrDatumDef) && fieldOrDatumDef.timeUnit)\n ) {\n return 270;\n }\n // no default\n return undefined;\n }\n }\n}\n\nexport function normalizeAngleExpr(angle: SignalRef) {\n return `(((${angle.signal} % 360) + 360) % 360)`;\n}\n\nexport function defaultLabelBaseline(\n angle: number | SignalRef,\n orient: AxisOrient | SignalRef,\n channel: 'x' | 'y',\n alwaysIncludeMiddle?: boolean\n) {\n if (angle !== undefined) {\n if (channel === 'x') {\n if (isSignalRef(angle)) {\n const a = normalizeAngleExpr(angle);\n const orientIsTop = isSignalRef(orient) ? `(${orient.signal} === \"top\")` : orient === 'top';\n return {\n signal:\n `(45 < ${a} && ${a} < 135) || (225 < ${a} && ${a} < 315) ? \"middle\" :` +\n `(${a} <= 45 || 315 <= ${a}) === ${orientIsTop} ? \"bottom\" : \"top\"`\n };\n }\n\n if ((45 < angle && angle < 135) || (225 < angle && angle < 315)) {\n return 'middle';\n }\n\n if (isSignalRef(orient)) {\n const op = angle <= 45 || 315 <= angle ? '===' : '!==';\n return {signal: `${orient.signal} ${op} \"top\" ? \"bottom\" : \"top\"`};\n }\n\n return (angle <= 45 || 315 <= angle) === (orient === 'top') ? 'bottom' : 'top';\n } else {\n if (isSignalRef(angle)) {\n const a = normalizeAngleExpr(angle);\n const orientIsLeft = isSignalRef(orient) ? `(${orient.signal} === \"left\")` : orient === 'left';\n const middle = alwaysIncludeMiddle ? '\"middle\"' : 'null';\n return {\n signal: `${a} <= 45 || 315 <= ${a} || (135 <= ${a} && ${a} <= 225) ? ${middle} : (45 <= ${a} && ${a} <= 135) === ${orientIsLeft} ? \"top\" : \"bottom\"`\n };\n }\n\n if (angle <= 45 || 315 <= angle || (135 <= angle && angle <= 225)) {\n return alwaysIncludeMiddle ? 'middle' : null;\n }\n\n if (isSignalRef(orient)) {\n const op = 45 <= angle && angle <= 135 ? '===' : '!==';\n return {signal: `${orient.signal} ${op} \"left\" ? \"top\" : \"bottom\"`};\n }\n\n return (45 <= angle && angle <= 135) === (orient === 'left') ? 'top' : 'bottom';\n }\n }\n return undefined;\n}\n\nexport function defaultLabelAlign(\n angle: number | SignalRef,\n orient: AxisOrient | SignalRef,\n channel: 'x' | 'y'\n): Align | SignalRef {\n if (angle === undefined) {\n return undefined;\n }\n\n const isX = channel === 'x';\n const startAngle = isX ? 0 : 90;\n const mainOrient = isX ? 'bottom' : 'left';\n\n if (isSignalRef(angle)) {\n const a = normalizeAngleExpr(angle);\n const orientIsMain = isSignalRef(orient) ? `(${orient.signal} === \"${mainOrient}\")` : orient === mainOrient;\n return {\n signal:\n `(${startAngle ? `(${a} + 90)` : a} % 180 === 0) ? ${isX ? null : '\"center\"'} :` +\n `(${startAngle} < ${a} && ${a} < ${180 + startAngle}) === ${orientIsMain} ? \"left\" : \"right\"`\n };\n }\n\n if ((angle + startAngle) % 180 === 0) {\n // For bottom, use default label align so label flush still works\n return isX ? null : 'center';\n }\n\n if (isSignalRef(orient)) {\n const op = startAngle < angle && angle < 180 + startAngle ? '===' : '!==';\n const orientIsMain = `${orient.signal} ${op} \"${mainOrient}\"`;\n return {\n signal: `${orientIsMain} ? \"left\" : \"right\"`\n };\n }\n\n if ((startAngle < angle && angle < 180 + startAngle) === (orient === mainOrient)) {\n return 'left';\n }\n\n return 'right';\n}\n\nexport function defaultLabelFlush(type: Type, channel: PositionScaleChannel) {\n if (channel === 'x' && contains(['quantitative', 'temporal'], type)) {\n return true;\n }\n return undefined;\n}\n\nexport function defaultLabelOverlap(type: Type, scaleType: ScaleType, hasTimeUnit: boolean, sort?: Sort) {\n // do not prevent overlap for nominal data because there is no way to infer what the missing labels are\n if ((hasTimeUnit && !isObject(sort)) || (type !== 'nominal' && type !== 'ordinal')) {\n if (scaleType === 'log' || scaleType === 'symlog') {\n return 'greedy';\n }\n return true;\n }\n return undefined;\n}\n\nexport function defaultOrient(channel: PositionScaleChannel) {\n return channel === 'x' ? 'bottom' : 'left';\n}\n\nexport function defaultTickCount({\n fieldOrDatumDef,\n scaleType,\n size,\n values: vals\n}: {\n fieldOrDatumDef: TypedFieldDef | DatumDef;\n scaleType: ScaleType;\n size?: SignalRef;\n values?: AxisInternal['values'];\n}) {\n if (!vals && !hasDiscreteDomain(scaleType) && scaleType !== 'log') {\n if (isFieldDef(fieldOrDatumDef)) {\n if (isBinning(fieldOrDatumDef.bin)) {\n // for binned data, we don't want more ticks than maxbins\n return {signal: `ceil(${size.signal}/10)`};\n }\n\n if (\n fieldOrDatumDef.timeUnit &&\n contains(['month', 'hours', 'day', 'quarter'], normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit)\n ) {\n return undefined;\n }\n }\n\n return {signal: `ceil(${size.signal}/40)`};\n }\n\n return undefined;\n}\n\nexport function getFieldDefTitle(model: UnitModel, channel: 'x' | 'y') {\n const channel2 = channel === 'x' ? 'x2' : 'y2';\n const fieldDef = model.fieldDef(channel);\n const fieldDef2 = model.fieldDef(channel2);\n\n const title1 = fieldDef ? fieldDef.title : undefined;\n const title2 = fieldDef2 ? fieldDef2.title : undefined;\n\n if (title1 && title2) {\n return mergeTitle(title1, title2);\n } else if (title1) {\n return title1;\n } else if (title2) {\n return title2;\n } else if (title1 !== undefined) {\n // falsy value to disable config\n return title1;\n } else if (title2 !== undefined) {\n // falsy value to disable config\n return title2;\n }\n\n return undefined;\n}\n\nexport function values(axis: AxisInternal, fieldOrDatumDef: TypedFieldDef | DatumDef) {\n const vals = axis.values;\n\n if (isArray(vals)) {\n return valueArray(fieldOrDatumDef, vals);\n } else if (isSignalRef(vals)) {\n return vals;\n }\n\n return undefined;\n}\n\nexport function defaultZindex(mark: Mark, fieldDef: TypedFieldDef | DatumDef) {\n if (mark === 'rect' && isDiscrete(fieldDef)) {\n return 1;\n }\n return 0;\n}\n","import {FormulaTransform as VgFormulaTransform} from 'vega';\nimport {SingleDefChannel} from '../../channel';\nimport {FieldRefOption, isScaleFieldDef, TypedFieldDef, vgField} from '../../channeldef';\nimport {DateTime} from '../../datetime';\nimport {fieldFilterExpression} from '../../predicate';\nimport {isSortArray} from '../../sort';\nimport {CalculateTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {ModelWithField} from '../model';\nimport {DataFlowNode} from './dataflow';\nimport {getDependentFields} from './expressions';\n\nexport class CalculateNode extends DataFlowNode {\n private _dependentFields: Set;\n\n public clone() {\n return new CalculateNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private readonly transform: CalculateTransform) {\n super(parent);\n\n this._dependentFields = getDependentFields(this.transform.calculate);\n }\n\n public static parseAllForSortIndex(parent: DataFlowNode, model: ModelWithField) {\n // get all the encoding with sort fields from model\n model.forEachFieldDef((fieldDef: TypedFieldDef, channel: SingleDefChannel) => {\n if (!isScaleFieldDef(fieldDef)) {\n return;\n }\n if (isSortArray(fieldDef.sort)) {\n const {field, timeUnit} = fieldDef;\n const sort: (number | string | boolean | DateTime)[] = fieldDef.sort;\n // generate `datum[\"a\"] === val0 ? 0 : datum[\"a\"] === val1 ? 1 : ... : n` via FieldEqualPredicate\n const calculate =\n sort\n .map((sortValue, i) => {\n return `${fieldFilterExpression({field, timeUnit, equal: sortValue})} ? ${i} : `;\n })\n .join('') + sort.length;\n\n parent = new CalculateNode(parent, {\n calculate,\n as: sortArrayIndexField(fieldDef, channel, {forAs: true})\n });\n }\n });\n return parent;\n }\n\n public producedFields() {\n return new Set([this.transform.as]);\n }\n\n public dependentFields() {\n return this._dependentFields;\n }\n\n public assemble(): VgFormulaTransform {\n return {\n type: 'formula',\n expr: this.transform.calculate,\n as: this.transform.as\n };\n }\n\n public hash() {\n return `Calculate ${hash(this.transform)}`;\n }\n}\n\nexport function sortArrayIndexField(fieldDef: TypedFieldDef, channel: SingleDefChannel, opt?: FieldRefOption) {\n return vgField(fieldDef, {prefix: channel, suffix: 'sort_index', ...(opt ?? {})});\n}\n","import {Orient, SignalRef} from 'vega';\nimport {FacetChannel} from '../../channel';\nimport {Config} from '../../config';\nimport {Header} from '../../header';\nimport {contains, getFirstDefined} from '../../util';\nimport {HeaderChannel} from './component';\n\n/**\n * Get header channel, which can be different from facet channel when orient is specified or when the facet channel is facet.\n */\nexport function getHeaderChannel(channel: FacetChannel, orient: Orient): HeaderChannel {\n if (contains(['top', 'bottom'], orient)) {\n return 'column';\n } else if (contains(['left', 'right'], orient)) {\n return 'row';\n }\n return channel === 'row' ? 'row' : 'column';\n}\n\nexport function getHeaderProperty

>(\n prop: P,\n header: Header,\n config: Config,\n channel: FacetChannel\n): Header[P] {\n const headerSpecificConfig =\n channel === 'row' ? config.headerRow : channel === 'column' ? config.headerColumn : config.headerFacet;\n\n return getFirstDefined((header || {})[prop], headerSpecificConfig[prop], config.header[prop]);\n}\n\nexport function getHeaderProperties(\n properties: (keyof Header)[],\n header: Header,\n config: Config,\n channel: FacetChannel\n): Header {\n const props = {};\n for (const prop of properties) {\n const value = getHeaderProperty(prop, header || {}, config, channel);\n if (value !== undefined) {\n props[prop] = value;\n }\n }\n return props;\n}\n","/**\n * Utility for generating row / column headers\n */\nimport {Axis as VgAxis, SignalRef, Text} from 'vega';\nimport {FacetFieldDef} from '../../spec/facet';\n\nexport type HeaderChannel = 'row' | 'column';\nexport const HEADER_CHANNELS: HeaderChannel[] = ['row', 'column'];\n\nexport type HeaderType = 'header' | 'footer';\nexport const HEADER_TYPES: HeaderType[] = ['header', 'footer'];\n\nexport interface LayoutHeaderComponentIndex {\n row?: LayoutHeaderComponent;\n column?: LayoutHeaderComponent;\n facet?: LayoutHeaderComponent;\n}\n\n/**\n * A component that represents all header, footers and title of a Vega group with layout directive.\n */\nexport interface LayoutHeaderComponent {\n title?: Text | SignalRef;\n\n // TODO: concat can have multiple header / footer.\n // Need to redesign this part a bit.\n\n facetFieldDef?: FacetFieldDef;\n\n /**\n * An array of header components for headers.\n * For facet, there should be only one header component, which is data-driven.\n * For concat, there can be multiple header components that explicitly list different axes.\n */\n header?: HeaderComponent[];\n\n /**\n * An array of header components for footers.\n * For facet, there should be only one header component, which is data-driven.\n * For concat, there can be multiple header components that explicitly list different axes.\n */\n footer?: HeaderComponent[];\n}\n\n/**\n * A component that represents one group of row/column-header/footer.\n */\nexport interface HeaderComponent {\n labels: boolean;\n\n sizeSignal: {signal: string};\n\n axes: VgAxis[];\n}\n","/**\n * Utility for generating row / column headers\n */\n\nimport {SignalRef, TitleAnchor, TitleConfig} from 'vega';\nimport {isArray} from 'vega-util';\nimport {FacetChannel, FACET_CHANNELS} from '../../channel';\nimport {vgField} from '../../channeldef';\nimport {Config} from '../../config';\nimport {\n CoreHeader,\n HEADER_LABEL_PROPERTIES,\n HEADER_LABEL_PROPERTIES_MAP,\n HEADER_TITLE_PROPERTIES,\n HEADER_TITLE_PROPERTIES_MAP\n} from '../../header';\nimport {isSortField} from '../../sort';\nimport {FacetFieldDef, isFacetMapping} from '../../spec/facet';\nimport {contains, isEmpty, normalizeAngle, replaceAll} from '../../util';\nimport {RowCol, VgComparator, VgMarkGroup, VgTitle} from '../../vega.schema';\nimport {defaultLabelAlign, defaultLabelBaseline} from '../axis/properties';\nimport {sortArrayIndexField} from '../data/calculate';\nimport {formatSignalRef} from '../format';\nimport {isFacetModel, Model} from '../model';\nimport {getHeaderChannel, getHeaderProperties, getHeaderProperty} from './common';\nimport {\n HeaderChannel,\n HeaderComponent,\n HeaderType,\n HEADER_TYPES,\n LayoutHeaderComponent,\n LayoutHeaderComponentIndex\n} from './component';\n\n// TODO: rename to assembleHeaderTitleGroup\nexport function assembleTitleGroup(model: Model, channel: FacetChannel) {\n const title = model.component.layoutHeaders[channel].title;\n const config = model.config ? model.config : undefined;\n const facetFieldDef = model.component.layoutHeaders[channel].facetFieldDef\n ? model.component.layoutHeaders[channel].facetFieldDef\n : undefined;\n\n const {titleAnchor, titleAngle: ta, titleOrient} = getHeaderProperties(\n ['titleAnchor', 'titleAngle', 'titleOrient'],\n facetFieldDef.header,\n config,\n channel\n );\n const headerChannel = getHeaderChannel(channel, titleOrient);\n\n const titleAngle = normalizeAngle(ta);\n\n return {\n name: `${channel}-title`,\n type: 'group',\n role: `${headerChannel}-title`,\n title: {\n text: title,\n ...(channel === 'row' ? {orient: 'left'} : {}),\n style: 'guide-title',\n ...defaultHeaderGuideBaseline(titleAngle, headerChannel),\n ...defaultHeaderGuideAlign(headerChannel, titleAngle, titleAnchor),\n ...assembleHeaderProperties(config, facetFieldDef, channel, HEADER_TITLE_PROPERTIES, HEADER_TITLE_PROPERTIES_MAP)\n }\n };\n}\n\nexport function defaultHeaderGuideAlign(headerChannel: HeaderChannel, angle: number, anchor: TitleAnchor = 'middle') {\n switch (anchor) {\n case 'start':\n return {align: 'left'};\n case 'end':\n return {align: 'right'};\n }\n\n const align = defaultLabelAlign(angle, headerChannel === 'row' ? 'left' : 'top', headerChannel === 'row' ? 'y' : 'x');\n return align ? {align} : {};\n}\n\nexport function defaultHeaderGuideBaseline(angle: number, channel: FacetChannel) {\n const baseline = defaultLabelBaseline(angle, channel === 'row' ? 'left' : 'top', channel === 'row' ? 'y' : 'x', true);\n return baseline ? {baseline} : {};\n}\n\nexport function assembleHeaderGroups(model: Model, channel: HeaderChannel): VgMarkGroup[] {\n const layoutHeader = model.component.layoutHeaders[channel];\n const groups = [];\n for (const headerType of HEADER_TYPES) {\n if (layoutHeader[headerType]) {\n for (const headerComponent of layoutHeader[headerType]) {\n const group = assembleHeaderGroup(model, channel, headerType, layoutHeader, headerComponent);\n if (group != null) {\n groups.push(group);\n }\n }\n }\n }\n return groups;\n}\n\nfunction getSort(facetFieldDef: FacetFieldDef, channel: HeaderChannel): VgComparator {\n const {sort} = facetFieldDef;\n if (isSortField(sort)) {\n return {\n field: vgField(sort, {expr: 'datum'}),\n order: sort.order ?? 'ascending'\n };\n } else if (isArray(sort)) {\n return {\n field: sortArrayIndexField(facetFieldDef, channel, {expr: 'datum'}),\n order: 'ascending'\n };\n } else {\n return {\n field: vgField(facetFieldDef, {expr: 'datum'}),\n order: sort ?? 'ascending'\n };\n }\n}\n\nexport function assembleLabelTitle(\n facetFieldDef: FacetFieldDef,\n channel: FacetChannel,\n config: Config\n) {\n const {format, formatType, labelAngle, labelAnchor, labelOrient, labelExpr} = getHeaderProperties(\n ['format', 'formatType', 'labelAngle', 'labelAnchor', 'labelOrient', 'labelExpr'],\n facetFieldDef.header,\n config,\n channel\n );\n\n const titleTextExpr = formatSignalRef({fieldOrDatumDef: facetFieldDef, format, formatType, expr: 'parent', config})\n .signal;\n const headerChannel = getHeaderChannel(channel, labelOrient);\n\n return {\n text: {\n signal: labelExpr\n ? replaceAll(\n replaceAll(labelExpr, 'datum.label', titleTextExpr),\n 'datum.value',\n vgField(facetFieldDef, {expr: 'parent'})\n )\n : titleTextExpr\n },\n ...(channel === 'row' ? {orient: 'left'} : {}),\n style: 'guide-label',\n frame: 'group',\n ...defaultHeaderGuideBaseline(labelAngle, headerChannel),\n ...defaultHeaderGuideAlign(headerChannel, labelAngle, labelAnchor),\n ...assembleHeaderProperties(config, facetFieldDef, channel, HEADER_LABEL_PROPERTIES, HEADER_LABEL_PROPERTIES_MAP)\n };\n}\n\nexport function assembleHeaderGroup(\n model: Model,\n channel: HeaderChannel,\n headerType: HeaderType,\n layoutHeader: LayoutHeaderComponent,\n headerComponent: HeaderComponent\n) {\n if (headerComponent) {\n let title = null;\n const {facetFieldDef} = layoutHeader;\n const config = model.config ? model.config : undefined;\n if (facetFieldDef && headerComponent.labels) {\n const {labelOrient} = getHeaderProperties(['labelOrient'], facetFieldDef.header, config, channel);\n\n // Include label title in the header if orient aligns with the channel\n if (\n (channel === 'row' && !contains(['top', 'bottom'], labelOrient)) ||\n (channel === 'column' && !contains(['left', 'right'], labelOrient))\n ) {\n title = assembleLabelTitle(facetFieldDef, channel, config);\n }\n }\n\n const isFacetWithoutRowCol = isFacetModel(model) && !isFacetMapping(model.facet);\n\n const axes = headerComponent.axes;\n\n const hasAxes = axes?.length > 0;\n if (title || hasAxes) {\n const sizeChannel = channel === 'row' ? 'height' : 'width';\n\n return {\n name: model.getName(`${channel}_${headerType}`),\n type: 'group',\n role: `${channel}-${headerType}`,\n\n ...(layoutHeader.facetFieldDef\n ? {\n from: {data: model.getName(`${channel}_domain`)},\n sort: getSort(facetFieldDef, channel)\n }\n : {}),\n ...(hasAxes && isFacetWithoutRowCol\n ? {\n from: {data: model.getName(`facet_domain_${channel}`)}\n }\n : {}),\n\n ...(title ? {title} : {}),\n ...(headerComponent.sizeSignal\n ? {\n encode: {\n update: {\n [sizeChannel]: headerComponent.sizeSignal\n }\n }\n }\n : {}),\n ...(hasAxes ? {axes} : {})\n };\n }\n }\n return null;\n}\n\nconst LAYOUT_TITLE_BAND = {\n column: {\n start: 0,\n end: 1\n },\n row: {\n start: 1,\n end: 0\n }\n};\n\nexport function getLayoutTitleBand(titleAnchor: TitleAnchor, headerChannel: HeaderChannel) {\n return LAYOUT_TITLE_BAND[headerChannel][titleAnchor];\n}\n\nexport function assembleLayoutTitleBand(\n headerComponentIndex: LayoutHeaderComponentIndex,\n config: Config\n): RowCol {\n const titleBand = {};\n\n for (const channel of FACET_CHANNELS) {\n const headerComponent = headerComponentIndex[channel];\n if (headerComponent?.facetFieldDef) {\n const {titleAnchor, titleOrient} = getHeaderProperties(\n ['titleAnchor', 'titleOrient'],\n headerComponent.facetFieldDef.header,\n config,\n channel\n );\n\n const headerChannel = getHeaderChannel(channel, titleOrient);\n const band = getLayoutTitleBand(titleAnchor, headerChannel);\n if (band !== undefined) {\n titleBand[headerChannel] = band;\n }\n }\n }\n\n return isEmpty(titleBand) ? undefined : titleBand;\n}\n\nexport function assembleHeaderProperties(\n config: Config,\n facetFieldDef: FacetFieldDef,\n channel: FacetChannel,\n properties: (keyof CoreHeader)[],\n propertiesMap: Partial, keyof TitleConfig>>\n): Partial {\n const props = {};\n for (const prop of properties) {\n if (!propertiesMap[prop]) {\n continue;\n }\n\n const value = getHeaderProperty(prop, facetFieldDef?.header, config, channel);\n if (value !== undefined) {\n props[propertiesMap[prop]] = value;\n }\n }\n return props;\n}\n","import {InitSignal, NewSignal} from 'vega';\nimport {getViewConfigContinuousSize} from '../../config';\nimport {hasDiscreteDomain} from '../../scale';\nimport {getFirstDefined} from '../../util';\nimport {isVgRangeStep, VgRangeStep} from '../../vega.schema';\nimport {signalOrStringValue} from '../common';\nimport {isFacetModel, Model} from '../model';\nimport {ScaleComponent} from '../scale/component';\nimport {LayoutSizeType} from './component';\n\nexport function assembleLayoutSignals(model: Model): NewSignal[] {\n return [\n ...sizeSignals(model, 'width'),\n ...sizeSignals(model, 'height'),\n ...sizeSignals(model, 'childWidth'),\n ...sizeSignals(model, 'childHeight')\n ];\n}\n\nexport function sizeSignals(model: Model, sizeType: LayoutSizeType): (NewSignal | InitSignal)[] {\n const channel = sizeType === 'width' ? 'x' : 'y';\n const size = model.component.layoutSize.get(sizeType);\n if (!size || size === 'merged') {\n return [];\n }\n\n // Read size signal name from name map, just in case it is the top-level size signal that got renamed.\n const name = model.getSizeSignalRef(sizeType).signal;\n\n if (size === 'step') {\n const scaleComponent = model.getScaleComponent(channel);\n\n if (scaleComponent) {\n const type = scaleComponent.get('type');\n const range = scaleComponent.get('range');\n\n if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n const scaleName = model.scaleName(channel);\n\n if (isFacetModel(model.parent)) {\n // If parent is facet and this is an independent scale, return only signal signal\n // as the width/height will be calculated using the cardinality from\n // facet's aggregate rather than reading from scale domain\n const parentResolve = model.parent.component.resolve;\n if (parentResolve.scale[channel] === 'independent') {\n return [stepSignal(scaleName, range)];\n }\n }\n\n return [\n stepSignal(scaleName, range),\n {\n name,\n update: sizeExpr(scaleName, scaleComponent, `domain('${scaleName}').length`)\n }\n ];\n }\n }\n /* istanbul ignore next: Condition should not happen -- only for warning in development. */\n throw new Error('layout size is step although width/height is not step.');\n } else if (size == 'container') {\n const isWidth = name.endsWith('width');\n const expr = isWidth ? 'containerSize()[0]' : 'containerSize()[1]';\n const defaultValue = getViewConfigContinuousSize(model.config.view, isWidth ? 'width' : 'height');\n const safeExpr = `isFinite(${expr}) ? ${expr} : ${defaultValue}`;\n return [{name, init: safeExpr, on: [{update: safeExpr, events: 'window:resize'}]}];\n } else {\n return [\n {\n name,\n value: size\n }\n ];\n }\n}\n\nfunction stepSignal(scaleName: string, range: VgRangeStep): NewSignal {\n return {\n name: `${scaleName}_step`,\n value: range.step\n };\n}\n\nexport function sizeExpr(scaleName: string, scaleComponent: ScaleComponent, cardinality: string) {\n const type = scaleComponent.get('type');\n const padding = scaleComponent.get('padding');\n const paddingOuter = getFirstDefined(scaleComponent.get('paddingOuter'), padding);\n\n let paddingInner = scaleComponent.get('paddingInner');\n paddingInner =\n type === 'band'\n ? // only band has real paddingInner\n paddingInner !== undefined\n ? paddingInner\n : padding\n : // For point, as calculated in https://github.com/vega/vega-scale/blob/master/src/band.js#L128,\n // it's equivalent to have paddingInner = 1 since there is only n-1 steps between n points.\n 1;\n return `bandspace(${cardinality}, ${signalOrStringValue(paddingInner)}, ${signalOrStringValue(\n paddingOuter\n )}) * ${scaleName}_step`;\n}\n","import {Split} from '../split';\n\nexport type LayoutSize = number | 'container' | 'step' | 'merged';\n\nexport interface LayoutSizeIndex {\n width?: LayoutSize;\n\n childWidth?: LayoutSize;\n\n height?: LayoutSize;\n\n childHeight?: LayoutSize;\n}\n\nexport type LayoutSizeType = keyof LayoutSizeIndex;\n\nexport type LayoutSizeComponent = Split;\n\nexport function getSizeTypeFromLayoutSizeType(layoutSizeType: LayoutSizeType): 'width' | 'height' {\n return layoutSizeType === 'childWidth' ? 'width' : layoutSizeType === 'childHeight' ? 'height' : layoutSizeType;\n}\n","import {GuideEncodingEntry} from '../guide';\nimport {keys} from '../util';\nimport {VgEncodeChannel} from '../vega.schema';\nimport {signalOrValueRef} from './common';\nimport {wrapCondition} from './mark/encode';\nimport {UnitModel} from './unit';\n\nexport function guideEncodeEntry(encoding: GuideEncodingEntry, model: UnitModel) {\n return keys(encoding).reduce((encode, channel: VgEncodeChannel) => {\n const valueDef = encoding[channel];\n return {\n ...encode,\n ...wrapCondition(model, valueDef, channel, def => signalOrValueRef(def.value))\n };\n }, {});\n}\n","import {isXorY, ScaleChannel} from '../channel';\nimport * as log from '../log';\nimport {Resolve, ResolveMode} from '../resolve';\nimport {isConcatModel, isFacetModel, isLayerModel, Model} from './model';\n\nexport function defaultScaleResolve(channel: ScaleChannel, model: Model): ResolveMode {\n if (isLayerModel(model) || isFacetModel(model)) {\n return 'shared';\n } else if (isConcatModel(model)) {\n return isXorY(channel) ? 'independent' : 'shared';\n }\n /* istanbul ignore next: should never reach here. */\n throw new Error('invalid model type for resolve');\n}\n\nexport function parseGuideResolve(resolve: Resolve, channel: ScaleChannel): ResolveMode {\n const channelScaleResolve = resolve.scale[channel];\n const guide = isXorY(channel) ? 'axis' : 'legend';\n\n if (channelScaleResolve === 'independent') {\n if (resolve[guide][channel] === 'shared') {\n log.warn(log.message.independentScaleMeansIndependentGuide(channel));\n }\n return 'independent';\n }\n\n return resolve[guide][channel] || 'shared';\n}\n","import {Legend as VgLegend} from 'vega';\nimport {NonPositionScaleChannel} from '../../channel';\nimport {COMMON_LEGEND_PROPERTY_INDEX, LegendInternal} from '../../legend';\nimport {Flag, keys} from '../../util';\nimport {Split} from '../split';\n\nexport type LegendComponentProps = VgLegend & {\n labelExpr?: string;\n selections?: string[];\n disable?: boolean;\n};\n\nconst LEGEND_COMPONENT_PROPERTY_INDEX: Flag = {\n ...COMMON_LEGEND_PROPERTY_INDEX,\n disable: 1,\n labelExpr: 1,\n selections: 1,\n // channel scales\n opacity: 1,\n shape: 1,\n stroke: 1,\n fill: 1,\n size: 1,\n strokeWidth: 1,\n strokeDash: 1,\n // encode\n encode: 1\n};\n\nexport const LEGEND_COMPONENT_PROPERTIES = keys(LEGEND_COMPONENT_PROPERTY_INDEX);\n\nexport class LegendComponent extends Split {}\n\nexport type LegendComponentIndex = Partial>;\n\nexport type LegendInternalIndex = Partial>;\n","import {ColorValueRef, EncodeEntry, Gradient, LegendEncode, LegendType, SignalRef, SymbolEncodeEntry} from 'vega';\nimport {array, isArray, stringValue} from 'vega-util';\nimport {COLOR, NonPositionScaleChannel, OPACITY} from '../../channel';\nimport {\n Conditional,\n DatumDef,\n hasConditionalValueDef,\n isFieldDef,\n isValueDef,\n TypedFieldDef,\n Value,\n ValueDef\n} from '../../channeldef';\nimport {Encoding} from '../../encoding';\nimport {FILL_STROKE_CONFIG} from '../../mark';\nimport {getFirstDefined, isEmpty, varName} from '../../util';\nimport {applyMarkConfig, signalOrValueRef} from '../common';\nimport {formatCustomType, isCustomFormatType} from '../format';\nimport * as mixins from '../mark/encode';\nimport {STORE} from '../selection';\nimport {UnitModel} from '../unit';\nimport {LegendComponent} from './component';\n\nexport interface LegendEncodeParams {\n fieldOrDatumDef: TypedFieldDef | DatumDef;\n model: UnitModel;\n channel: NonPositionScaleChannel;\n legendCmpt: LegendComponent;\n legendType: LegendType;\n}\n\nexport const legendEncodeRules: {\n [part in keyof LegendEncode]?: (spec: EncodeEntry, params: LegendEncodeParams) => EncodeEntry;\n} = {\n symbols,\n gradient,\n labels,\n entries\n};\n\nexport function symbols(\n symbolsSpec: any,\n {fieldOrDatumDef, model, channel, legendCmpt, legendType}: LegendEncodeParams\n): SymbolEncodeEntry {\n if (legendType !== 'symbol') {\n return undefined;\n }\n\n const {markDef, encoding, config, mark} = model;\n const filled = markDef.filled && mark !== 'trail';\n\n let out = {\n ...applyMarkConfig({}, model, FILL_STROKE_CONFIG),\n ...mixins.color(model, {filled})\n } as SymbolEncodeEntry; // FIXME: remove this when VgEncodeEntry is compatible with SymbolEncodeEntry\n\n const symbolOpacity = legendCmpt.get('symbolOpacity') ?? config.legend.symbolOpacity;\n const symbolFillColor = legendCmpt.get('symbolFillColor') ?? config.legend.symbolFillColor;\n const symbolStrokeColor = legendCmpt.get('symbolStrokeColor') ?? config.legend.symbolStrokeColor;\n\n const opacity = symbolOpacity === undefined ? getMaxValue(encoding.opacity) ?? markDef.opacity : undefined;\n\n if (out.fill) {\n // for fill legend, we don't want any fill in symbol\n if (channel === 'fill' || (filled && channel === COLOR)) {\n delete out.fill;\n } else {\n if (out.fill['field']) {\n // For others, set fill to some opaque value (or nothing if a color is already set)\n if (symbolFillColor) {\n delete out.fill;\n } else {\n out.fill = signalOrValueRef(config.legend.symbolBaseFillColor ?? 'black');\n out.fillOpacity = signalOrValueRef(opacity ?? 1);\n }\n } else if (isArray(out.fill)) {\n const fill =\n getFirstConditionValue(encoding.fill ?? encoding.color) ?? markDef.fill ?? (filled && markDef.color);\n if (fill) {\n out.fill = signalOrValueRef(fill) as ColorValueRef;\n }\n }\n }\n }\n\n if (out.stroke) {\n if (channel === 'stroke' || (!filled && channel === COLOR)) {\n delete out.stroke;\n } else {\n if (out.stroke['field'] || symbolStrokeColor) {\n // For others, remove stroke field\n delete out.stroke;\n } else if (isArray(out.stroke)) {\n const stroke = getFirstDefined(\n getFirstConditionValue(encoding.stroke || encoding.color),\n markDef.stroke,\n filled ? markDef.color : undefined\n );\n if (stroke) {\n out.stroke = {value: stroke} as ColorValueRef;\n }\n }\n }\n }\n\n if (channel !== OPACITY) {\n const condition = isFieldDef(fieldOrDatumDef) && selectedCondition(model, legendCmpt, fieldOrDatumDef);\n\n if (condition) {\n out.opacity = [\n {test: condition, ...signalOrValueRef(opacity ?? 1)},\n signalOrValueRef(config.legend.unselectedOpacity)\n ];\n } else if (opacity) {\n out.opacity = signalOrValueRef(opacity);\n }\n }\n\n out = {...out, ...symbolsSpec};\n\n return isEmpty(out) ? undefined : out;\n}\n\nexport function gradient(gradientSpec: any, {model, legendType, legendCmpt}: LegendEncodeParams) {\n if (legendType !== 'gradient') {\n return undefined;\n }\n\n const {config, markDef, encoding} = model;\n\n let out: SymbolEncodeEntry = {};\n\n const gradientOpacity = legendCmpt.get('gradientOpacity') ?? config.legend.gradientOpacity;\n const opacity = gradientOpacity === undefined ? getMaxValue(encoding.opacity) || markDef.opacity : undefined;\n if (opacity) {\n // only apply opacity if it is neither zero or undefined\n out.opacity = signalOrValueRef(opacity);\n }\n\n out = {...out, ...gradientSpec};\n return isEmpty(out) ? undefined : out;\n}\n\nexport function labels(specifiedlabelsSpec: any, {fieldOrDatumDef, model, channel, legendCmpt}: LegendEncodeParams) {\n const legend = model.legend(channel) || {};\n const config = model.config;\n\n const condition = isFieldDef(fieldOrDatumDef) ? selectedCondition(model, legendCmpt, fieldOrDatumDef) : undefined;\n const opacity = condition ? [{test: condition, value: 1}, {value: config.legend.unselectedOpacity}] : undefined;\n\n const {format, formatType} = legend;\n\n const text = isCustomFormatType(formatType)\n ? formatCustomType({\n fieldOrDatumDef,\n field: 'datum.value',\n format,\n formatType,\n config\n })\n : undefined;\n\n const labelsSpec = {\n ...(opacity ? {opacity} : {}),\n ...(text ? {text} : {}),\n ...specifiedlabelsSpec\n };\n\n return isEmpty(labelsSpec) ? undefined : labelsSpec;\n}\n\nexport function entries(entriesSpec: any, {legendCmpt}: LegendEncodeParams) {\n const selections = legendCmpt.get('selections');\n return selections?.length ? {...entriesSpec, fill: {value: 'transparent'}} : entriesSpec;\n}\n\nfunction getMaxValue(channelDef: Encoding['opacity']) {\n return getConditionValue(channelDef, (v: number, conditionalDef) => Math.max(v, conditionalDef.value as any));\n}\n\nexport function getFirstConditionValue(\n channelDef: Encoding['fill' | 'stroke' | 'shape']\n): V {\n return getConditionValue(channelDef, (v: V, conditionalDef: Conditional>) => {\n return getFirstDefined(v, conditionalDef.value);\n });\n}\n\nfunction getConditionValue(\n channelDef: Encoding['fill' | 'stroke' | 'shape' | 'opacity'],\n reducer: (val: V, conditionalDef: Conditional>) => V\n): V {\n if (hasConditionalValueDef(channelDef)) {\n return array(channelDef.condition).reduce(reducer, channelDef.value as any);\n } else if (isValueDef(channelDef)) {\n return channelDef.value as any;\n }\n return undefined;\n}\n\nfunction selectedCondition(model: UnitModel, legendCmpt: LegendComponent, fieldDef: TypedFieldDef) {\n const selections = legendCmpt.get('selections');\n if (!selections?.length) return undefined;\n\n const field = stringValue(fieldDef.field);\n return selections\n .map(name => {\n const store = stringValue(varName(name) + STORE);\n return `(!length(data(${store})) || (${name}[${field}] && indexof(${name}[${field}], datum.value) >= 0))`;\n })\n .join(' || ');\n}\n","import {LabelOverlap, LegendOrient, LegendType, Orientation, SignalRef, SymbolShape} from 'vega';\nimport {isArray} from 'vega-util';\nimport {isColorChannel} from '../../channel';\nimport {DatumDef, MarkPropFieldOrDatumDef, title as fieldDefTitle, TypedFieldDef, valueArray} from '../../channeldef';\nimport {Config} from '../../config';\nimport {Encoding} from '../../encoding';\nimport {Legend, LegendConfig, LegendInternal} from '../../legend';\nimport {Mark, MarkDef} from '../../mark';\nimport {isContinuousToContinuous, ScaleType} from '../../scale';\nimport {TimeUnit} from '../../timeunit';\nimport {contains, getFirstDefined} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {guideFormat, guideFormatType} from '../format';\nimport {Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {NonPositionScaleChannel} from './../../channel';\nimport {LegendComponentProps} from './component';\nimport {getFirstConditionValue} from './encode';\n\nexport interface LegendRuleParams {\n legend: LegendInternal;\n channel: NonPositionScaleChannel;\n model: UnitModel;\n markDef: MarkDef;\n encoding: Encoding;\n fieldOrDatumDef: MarkPropFieldOrDatumDef;\n legendConfig: LegendConfig;\n config: Config;\n scaleType: ScaleType;\n orient: LegendOrient;\n legendType: LegendType;\n direction: Orientation;\n}\n\nexport const legendRules: {\n [k in keyof LegendComponentProps]?: (params: LegendRuleParams) => LegendComponentProps[k];\n} = {\n direction: ({direction}) => direction,\n\n format: ({fieldOrDatumDef, legend, config}) => {\n const {format, formatType} = legend;\n return guideFormat(fieldOrDatumDef, fieldOrDatumDef.type, format, formatType, config, false);\n },\n\n formatType: ({legend, fieldOrDatumDef, scaleType}) => {\n const {formatType} = legend;\n return guideFormatType(formatType, fieldOrDatumDef, scaleType);\n },\n\n gradientLength: params => {\n const {legend, legendConfig} = params;\n return legend.gradientLength ?? legendConfig.gradientLength ?? defaultGradientLength(params);\n },\n\n labelOverlap: ({legend, legendConfig, scaleType}) =>\n legend.labelOverlap ?? legendConfig.labelOverlap ?? defaultLabelOverlap(scaleType),\n\n symbolType: ({legend, markDef, channel, encoding}) =>\n legend.symbolType ?? defaultSymbolType(markDef.type, channel, encoding.shape, markDef.shape),\n\n title: ({fieldOrDatumDef, config}) => fieldDefTitle(fieldOrDatumDef, config, {allowDisabling: true}),\n\n type: ({legendType, scaleType, channel}) => {\n if (isColorChannel(channel) && isContinuousToContinuous(scaleType)) {\n if (legendType === 'gradient') {\n return undefined;\n }\n } else if (legendType === 'symbol') {\n return undefined;\n }\n return legendType;\n }, // depended by other property, let's define upfront\n\n values: ({fieldOrDatumDef, legend}) => values(legend, fieldOrDatumDef)\n};\n\nexport function values(legend: LegendInternal, fieldOrDatumDef: TypedFieldDef | DatumDef) {\n const vals = legend.values;\n\n if (isArray(vals)) {\n return valueArray(fieldOrDatumDef, vals);\n } else if (isSignalRef(vals)) {\n return vals;\n }\n return undefined;\n}\n\nexport function defaultSymbolType(\n mark: Mark,\n channel: NonPositionScaleChannel,\n shapeChannelDef: Encoding['shape'],\n markShape: SymbolShape | SignalRef\n): SymbolShape | SignalRef {\n if (channel !== 'shape') {\n // use the value from the shape encoding or the mark config if they exist\n const shape = getFirstConditionValue(shapeChannelDef) ?? markShape;\n if (shape) {\n return shape;\n }\n }\n\n switch (mark) {\n case 'bar':\n case 'rect':\n case 'image':\n case 'square':\n return 'square';\n case 'line':\n case 'trail':\n case 'rule':\n return 'stroke';\n case 'arc':\n case 'point':\n case 'circle':\n case 'tick':\n case 'geoshape':\n case 'area':\n case 'text':\n return 'circle';\n }\n}\n\nexport function clipHeight(legendType: LegendType) {\n if (legendType === 'gradient') {\n return 20;\n }\n return undefined;\n}\n\nexport function getLegendType(params: {\n legend: LegendInternal;\n channel: NonPositionScaleChannel;\n timeUnit?: TimeUnit;\n scaleType: ScaleType;\n}): LegendType {\n const {legend} = params;\n\n return getFirstDefined(legend.type, defaultType(params));\n}\n\nexport function defaultType({\n channel,\n timeUnit,\n scaleType\n}: {\n channel: NonPositionScaleChannel;\n timeUnit?: TimeUnit;\n scaleType: ScaleType;\n}): LegendType {\n // Following the logic in https://github.com/vega/vega-parser/blob/master/src/parsers/legend.js\n\n if (isColorChannel(channel)) {\n if (contains(['quarter', 'month', 'day'], timeUnit)) {\n return 'symbol';\n }\n\n if (isContinuousToContinuous(scaleType)) {\n return 'gradient';\n }\n }\n return 'symbol';\n}\n\nexport function getDirection({\n legendConfig,\n legendType,\n orient,\n legend\n}: {\n orient: LegendOrient;\n legendConfig: LegendConfig;\n legendType: LegendType;\n legend: Legend;\n}): Orientation {\n return (\n legend.direction ??\n legendConfig[legendType ? 'gradientDirection' : 'symbolDirection'] ??\n defaultDirection(orient, legendType)\n );\n}\n\nexport function defaultDirection(orient: LegendOrient, legendType: LegendType): 'horizontal' | undefined {\n switch (orient) {\n case 'top':\n case 'bottom':\n return 'horizontal';\n\n case 'left':\n case 'right':\n case 'none':\n case undefined: // undefined = \"right\" in Vega\n return undefined; // vertical is Vega's default\n default:\n // top-left / ...\n // For inner legend, uses compact layout like Tableau\n return legendType === 'gradient' ? 'horizontal' : undefined;\n }\n}\n\nexport function defaultGradientLength({\n legendConfig,\n model,\n direction,\n orient,\n scaleType\n}: {\n scaleType: ScaleType;\n direction: Orientation;\n orient: LegendOrient;\n model: Model;\n legendConfig: LegendConfig;\n}) {\n const {\n gradientHorizontalMaxLength,\n gradientHorizontalMinLength,\n gradientVerticalMaxLength,\n gradientVerticalMinLength\n } = legendConfig;\n if (isContinuousToContinuous(scaleType)) {\n if (direction === 'horizontal') {\n if (orient === 'top' || orient === 'bottom') {\n return gradientLengthSignal(model, 'width', gradientHorizontalMinLength, gradientHorizontalMaxLength);\n } else {\n return gradientHorizontalMinLength;\n }\n } else {\n // vertical / undefined (Vega uses vertical by default)\n return gradientLengthSignal(model, 'height', gradientVerticalMinLength, gradientVerticalMaxLength);\n }\n }\n return undefined;\n}\n\nfunction gradientLengthSignal(model: Model, sizeType: 'width' | 'height', min: number, max: number) {\n const sizeSignal = model.getSizeSignalRef(sizeType).signal;\n return {signal: `clamp(${sizeSignal}, ${min}, ${max})`};\n}\n\nexport function defaultLabelOverlap(scaleType: ScaleType): LabelOverlap {\n if (contains(['quantile', 'threshold', 'log', 'symlog'], scaleType)) {\n return 'greedy';\n }\n return undefined;\n}\n","import {Legend as VgLegend, LegendEncode} from 'vega';\nimport {COLOR, NonPositionScaleChannel, SHAPE} from '../../channel';\nimport {DatumDef, FieldDef, getFieldOrDatumDef, isFieldDef, MarkPropDatumDef, MarkPropFieldDef} from '../../channeldef';\nimport {LegendInternal, LEGEND_SCALE_CHANNELS} from '../../legend';\nimport {normalizeTimeUnit} from '../../timeunit';\nimport {GEOJSON} from '../../type';\nimport {deleteNestedProperty, isEmpty, keys, varName} from '../../util';\nimport {mergeTitleComponent} from '../common';\nimport {guideEncodeEntry} from '../guide';\nimport {isUnitModel, Model} from '../model';\nimport {parseGuideResolve} from '../resolve';\nimport {parseInteractiveLegend} from '../selection/legends';\nimport {defaultTieBreaker, Explicit, makeImplicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {LegendComponent, LegendComponentIndex, LegendComponentProps, LEGEND_COMPONENT_PROPERTIES} from './component';\nimport {LegendEncodeParams, legendEncodeRules} from './encode';\nimport {getDirection, getLegendType, LegendRuleParams, legendRules} from './properties';\n\nexport function parseLegend(model: Model) {\n const legendComponent = isUnitModel(model) ? parseUnitLegend(model) : parseNonUnitLegend(model);\n model.component.legends = legendComponent;\n return legendComponent;\n}\n\nfunction parseUnitLegend(model: UnitModel): LegendComponentIndex {\n const {encoding} = model;\n\n const legendComponent: LegendComponentIndex = {};\n\n for (const channel of [COLOR, ...LEGEND_SCALE_CHANNELS]) {\n const def = getFieldOrDatumDef(encoding[channel]) as MarkPropFieldDef | MarkPropDatumDef;\n\n if (!def || !model.getScaleComponent(channel)) {\n continue;\n }\n\n if (channel === SHAPE && isFieldDef(def) && def.type === GEOJSON) {\n continue;\n }\n\n legendComponent[channel] = parseLegendForChannel(model, channel);\n }\n\n return legendComponent;\n}\n\nfunction getLegendDefWithScale(model: UnitModel, channel: NonPositionScaleChannel): VgLegend {\n const scale = model.scaleName(channel);\n if (model.mark === 'trail') {\n if (channel === 'color') {\n // trail is a filled mark, but its default symbolType (\"stroke\") should use \"stroke\"\n return {stroke: scale};\n } else if (channel === 'size') {\n return {strokeWidth: scale};\n }\n }\n\n if (channel === 'color') {\n return model.markDef.filled ? {fill: scale} : {stroke: scale};\n }\n return {[channel]: scale};\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isExplicit(\n value: T,\n property: keyof LegendComponentProps,\n legend: LegendInternal,\n fieldDef: FieldDef\n) {\n switch (property) {\n case 'disable':\n return legend !== undefined; // if axis is specified or null/false, then its enable/disable state is explicit\n case 'values':\n // specified legend.values is already respected, but may get transformed.\n return !!legend?.values;\n case 'title':\n // title can be explicit if fieldDef.title is set\n if (property === 'title' && value === fieldDef?.title) {\n return true;\n }\n }\n // Otherwise, things are explicit if the returned value matches the specified property\n return value === (legend || {})[property];\n}\n\nexport function parseLegendForChannel(model: UnitModel, channel: NonPositionScaleChannel): LegendComponent {\n let legend = model.legend(channel);\n\n const {markDef, encoding, config} = model;\n const legendConfig = config.legend;\n const legendCmpt = new LegendComponent({}, getLegendDefWithScale(model, channel));\n parseInteractiveLegend(model, channel, legendCmpt);\n\n const disable = legend !== undefined ? !legend : legendConfig.disable;\n legendCmpt.set('disable', disable, legend !== undefined);\n if (disable) {\n return legendCmpt;\n }\n\n legend = legend || {};\n\n const scaleType = model.getScaleComponent(channel).get('type');\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as MarkPropFieldDef | DatumDef;\n const timeUnit = isFieldDef(fieldOrDatumDef) ? normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit : undefined;\n\n const orient = legend.orient || config.legend.orient || 'right';\n const legendType = getLegendType({legend, channel, timeUnit, scaleType});\n\n const direction = getDirection({legend, legendType, orient, legendConfig});\n\n const ruleParams: LegendRuleParams = {\n legend,\n channel,\n model,\n markDef,\n encoding,\n fieldOrDatumDef,\n legendConfig,\n config,\n scaleType,\n orient,\n legendType,\n direction\n };\n\n for (const property of LEGEND_COMPONENT_PROPERTIES) {\n if (\n (legendType === 'gradient' && property.startsWith('symbol')) ||\n (legendType === 'symbol' && property.startsWith('gradient'))\n ) {\n continue;\n }\n\n const value = property in legendRules ? legendRules[property](ruleParams) : legend[property];\n if (value !== undefined) {\n const explicit = isExplicit(value, property, legend, model.fieldDef(channel));\n if (explicit || config.legend[property] === undefined) {\n legendCmpt.set(property, value, explicit);\n }\n }\n }\n\n const legendEncoding = legend?.encoding ?? {};\n const selections = legendCmpt.get('selections');\n const legendEncode: LegendEncode = {};\n\n const legendEncodeParams: LegendEncodeParams = {fieldOrDatumDef, model, channel, legendCmpt, legendType};\n\n for (const part of ['labels', 'legend', 'title', 'symbols', 'gradient', 'entries']) {\n const legendEncodingPart = guideEncodeEntry(legendEncoding[part] ?? {}, model);\n\n const value =\n part in legendEncodeRules\n ? legendEncodeRules[part](legendEncodingPart, legendEncodeParams) // apply rule\n : legendEncodingPart; // no rule -- just default values\n\n if (value !== undefined && !isEmpty(value)) {\n legendEncode[part] = {\n ...(selections?.length && isFieldDef(fieldOrDatumDef)\n ? {name: `${varName(fieldOrDatumDef.field)}_legend_${part}`}\n : {}),\n ...(selections?.length ? {interactive: !!selections} : {}),\n update: value\n };\n }\n }\n\n if (!isEmpty(legendEncode)) {\n legendCmpt.set('encode', legendEncode, !!legend?.encoding);\n }\n\n return legendCmpt;\n}\n\nfunction parseNonUnitLegend(model: Model) {\n const {legends, resolve} = model.component;\n\n for (const child of model.children) {\n parseLegend(child);\n\n for (const channel of keys(child.component.legends)) {\n resolve.legend[channel] = parseGuideResolve(model.component.resolve, channel);\n\n if (resolve.legend[channel] === 'shared') {\n // If the resolve says shared (and has not been overridden)\n // We will try to merge and see if there is a conflict\n\n legends[channel] = mergeLegendComponent(legends[channel], child.component.legends[channel]);\n\n if (!legends[channel]) {\n // If merge returns nothing, there is a conflict so we cannot make the legend shared.\n // Thus, mark legend as independent and remove the legend component.\n resolve.legend[channel] = 'independent';\n delete legends[channel];\n }\n }\n }\n }\n\n for (const channel of keys(legends)) {\n for (const child of model.children) {\n if (!child.component.legends[channel]) {\n // skip if the child does not have a particular legend\n continue;\n }\n\n if (resolve.legend[channel] === 'shared') {\n // After merging shared legend, make sure to remove legend from child\n delete child.component.legends[channel];\n }\n }\n }\n\n return legends;\n}\n\nexport function mergeLegendComponent(mergedLegend: LegendComponent, childLegend: LegendComponent): LegendComponent {\n if (!mergedLegend) {\n return childLegend.clone();\n }\n const mergedOrient = mergedLegend.getWithExplicit('orient');\n const childOrient = childLegend.getWithExplicit('orient');\n\n if (mergedOrient.explicit && childOrient.explicit && mergedOrient.value !== childOrient.value) {\n // TODO: throw warning if resolve is explicit (We don't have info about explicit/implicit resolve yet.)\n // Cannot merge due to inconsistent orient\n return undefined;\n }\n\n let typeMerged = false;\n // Otherwise, let's merge\n for (const prop of LEGEND_COMPONENT_PROPERTIES) {\n const mergedValueWithExplicit = mergeValuesWithExplicit(\n mergedLegend.getWithExplicit(prop),\n childLegend.getWithExplicit(prop),\n prop,\n 'legend',\n\n // Tie breaker function\n (v1: Explicit, v2: Explicit): any => {\n switch (prop) {\n case 'symbolType':\n return mergeSymbolType(v1, v2);\n case 'title':\n return mergeTitleComponent(v1, v2);\n case 'type':\n // There are only two types. If we have different types, then prefer symbol over gradient.\n typeMerged = true;\n return makeImplicit('symbol');\n }\n return defaultTieBreaker(v1, v2, prop, 'legend');\n }\n );\n mergedLegend.setWithExplicit(prop, mergedValueWithExplicit);\n }\n if (typeMerged) {\n if (mergedLegend.implicit?.encode?.gradient) {\n deleteNestedProperty(mergedLegend.implicit, ['encode', 'gradient']);\n }\n if (mergedLegend.explicit?.encode?.gradient) {\n deleteNestedProperty(mergedLegend.explicit, ['encode', 'gradient']);\n }\n }\n\n return mergedLegend;\n}\n\nfunction mergeSymbolType(st1: Explicit, st2: Explicit) {\n if (st2.value === 'circle') {\n // prefer \"circle\" over \"stroke\"\n return st2;\n }\n return st1;\n}\n","import {Legend as VgLegend, LegendEncode} from 'vega';\nimport {Config} from '../../config';\nimport {LEGEND_SCALE_CHANNELS} from '../../legend';\nimport {keys, replaceAll, stringify, vals} from '../../util';\nimport {isSignalRef, VgEncodeChannel, VgValueRef} from '../../vega.schema';\nimport {Model} from '../model';\nimport {LegendComponent} from './component';\nimport {mergeLegendComponent} from './parse';\n\nfunction setLegendEncode(\n legend: VgLegend,\n part: keyof LegendEncode,\n vgProp: VgEncodeChannel,\n vgRef: VgValueRef | VgValueRef[]\n) {\n legend.encode ??= {};\n legend.encode[part] ??= {};\n legend.encode[part].update ??= {};\n // TODO: remove as any after https://github.com/prisma/nexus-prisma/issues/291\n (legend.encode[part].update[vgProp] as any) = vgRef;\n}\n\nexport function assembleLegends(model: Model): VgLegend[] {\n const legendComponentIndex = model.component.legends;\n const legendByDomain: Record = {};\n\n for (const channel of keys(legendComponentIndex)) {\n const scaleComponent = model.getScaleComponent(channel);\n const domainHash = stringify(scaleComponent.get('domains'));\n if (legendByDomain[domainHash]) {\n for (const mergedLegendComponent of legendByDomain[domainHash]) {\n const merged = mergeLegendComponent(mergedLegendComponent, legendComponentIndex[channel]);\n if (!merged) {\n // If cannot merge, need to add this legend separately\n legendByDomain[domainHash].push(legendComponentIndex[channel]);\n }\n }\n } else {\n legendByDomain[domainHash] = [legendComponentIndex[channel].clone()];\n }\n }\n\n const legends = vals(legendByDomain)\n .flat()\n .map(l => assembleLegend(l, model.config))\n .filter(l => l !== undefined);\n\n return legends;\n}\n\nexport function assembleLegend(legendCmpt: LegendComponent, config: Config) {\n const {disable, labelExpr, selections, ...legend} = legendCmpt.combine();\n\n if (disable) {\n return undefined;\n }\n\n if (config.aria === false && legend.aria == undefined) {\n legend.aria = false;\n }\n\n if (legend.encode?.symbols) {\n const out = legend.encode.symbols.update;\n if (out.fill && out.fill['value'] !== 'transparent' && !out.stroke && !legend.stroke) {\n // For non color channel's legend, we need to override symbol stroke config from Vega config if stroke channel is not used.\n out.stroke = {value: 'transparent'};\n }\n\n // Remove properties that the legend is encoding.\n for (const property of LEGEND_SCALE_CHANNELS) {\n if (legend[property]) {\n delete out[property];\n }\n }\n }\n\n if (!legend.title) {\n // title schema doesn't include null, ''\n delete legend.title;\n }\n\n if (labelExpr !== undefined) {\n let expr = labelExpr;\n if (legend.encode?.labels?.update && isSignalRef(legend.encode.labels.update.text)) {\n expr = replaceAll(labelExpr, 'datum.label', legend.encode.labels.update.text.signal);\n }\n setLegendEncode(legend, 'labels', 'text', {signal: expr});\n }\n\n return legend;\n}\n","import {Projection as VgProjection, SignalRef} from 'vega';\nimport {contains} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {isConcatModel, isLayerModel, Model} from '../model';\n\nexport function assembleProjections(model: Model): VgProjection[] {\n if (isLayerModel(model) || isConcatModel(model)) {\n return assembleProjectionsForModelAndChildren(model);\n } else {\n return assembleProjectionForModel(model);\n }\n}\n\nexport function assembleProjectionsForModelAndChildren(model: Model): VgProjection[] {\n return model.children.reduce((projections, child) => {\n return projections.concat(child.assembleProjections());\n }, assembleProjectionForModel(model));\n}\n\nexport function assembleProjectionForModel(model: Model): VgProjection[] {\n const component = model.component.projection;\n if (!component || component.merged) {\n return [];\n }\n\n const projection = component.combine();\n const {name} = projection; // we need to extract name so that it is always present in the output and pass TS type validation\n\n if (!component.data) {\n // generate custom projection, no automatic fitting\n return [\n {\n name,\n // translate to center by default\n ...{translate: {signal: '[width / 2, height / 2]'}},\n // parameters, overwrite default translate if specified\n ...projection\n }\n ];\n } else {\n // generate projection that uses extent fitting\n const size: SignalRef = {\n signal: `[${component.size.map(ref => ref.signal).join(', ')}]`\n };\n\n const fits: string[] = component.data.reduce((sources, data) => {\n const source: string = isSignalRef(data) ? data.signal : `data('${model.lookupDataSource(data)}')`;\n if (!contains(sources, source)) {\n // build a unique list of sources\n sources.push(source);\n }\n return sources;\n }, []);\n\n if (fits.length <= 0) {\n throw new Error(\"Projection's fit didn't find any data sources\");\n }\n\n return [\n {\n name,\n size,\n fit: {\n signal: fits.length > 1 ? `[${fits.join(', ')}]` : fits[0]\n },\n ...projection\n }\n ];\n }\n}\n","import {BaseProjection, SignalRef, Vector2} from 'vega';\nimport {ExprRef} from './expr';\nimport {MapExcludeValueRefAndReplaceSignalWith, ProjectionType} from './vega.schema';\n\nexport interface Projection\n extends MapExcludeValueRefAndReplaceSignalWith {\n /**\n * The cartographic projection to use. This value is case-insensitive, for example `\"albers\"` and `\"Albers\"` indicate the same projection type. You can find all valid projection types [in the documentation](https://vega.github.io/vega-lite/docs/projection.html#projection-types).\n *\n * __Default value:__ `equalEarth`\n */\n type?: ProjectionType | ES; // Re-declare to override docs\n\n /**\n * The projection’s scale (zoom) factor, overriding automatic fitting. The default scale is projection-specific. The scale factor corresponds linearly to the distance between projected points; however, scale factor values are not equivalent across projections.\n */\n scale?: number | ES; // Re-declare to override docs\n\n /**\n * The projection’s translation offset as a two-element array `[tx, ty]`.\n */\n translate?: Vector2 | ES; // TODO: figure what's VL default value\n}\n\n/**\n * Any property of Projection can be in config\n */\nexport type ProjectionConfig = Projection;\n\nexport const PROJECTION_PROPERTIES: (keyof Projection)[] = [\n 'type',\n 'clipAngle',\n 'clipExtent',\n 'center',\n 'rotate',\n 'precision',\n 'reflectX',\n 'reflectY',\n 'coefficient',\n 'distance',\n 'fraction',\n 'lobes',\n 'parallel',\n 'radius',\n 'ratio',\n 'spacing',\n 'tilt'\n];\n","import {Projection as VgProjection, SignalRef} from 'vega';\nimport {Projection} from '../../projection';\nimport {Split} from '../split';\n\nexport class ProjectionComponent extends Split {\n public merged = false;\n\n constructor(\n name: string,\n public specifiedProjection: Projection,\n public size: SignalRef[],\n public data: (string | SignalRef)[]\n ) {\n super(\n {...specifiedProjection}, // all explicit properties of projection\n {name} // name as initial implicit property\n );\n }\n\n /**\n * Whether the projection parameters should fit provided data.\n */\n public get isFit() {\n return !!this.data;\n }\n}\n","import {SignalRef} from 'vega';\nimport {hasOwnProperty} from 'vega-util';\nimport {LATITUDE, LATITUDE2, LONGITUDE, LONGITUDE2, SHAPE} from '../../channel';\nimport {getFieldOrDatumDef} from '../../channeldef';\nimport {DataSourceType} from '../../data';\nimport {replaceExprRef} from '../../expr';\nimport {PROJECTION_PROPERTIES} from '../../projection';\nimport {GEOJSON} from '../../type';\nimport {deepEqual, duplicate, every} from '../../util';\nimport {isUnitModel, Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {ProjectionComponent} from './component';\n\nexport function parseProjection(model: Model) {\n model.component.projection = isUnitModel(model) ? parseUnitProjection(model) : parseNonUnitProjections(model);\n}\n\nfunction parseUnitProjection(model: UnitModel): ProjectionComponent {\n if (model.hasProjection) {\n const proj = replaceExprRef(model.specifiedProjection);\n const fit = !(proj && (proj.scale != null || proj.translate != null));\n const size = fit ? [model.getSizeSignalRef('width'), model.getSizeSignalRef('height')] : undefined;\n const data = fit ? gatherFitData(model) : undefined;\n\n const projComp = new ProjectionComponent(\n model.projectionName(true),\n {\n ...(replaceExprRef(model.config.projection) ?? {}),\n ...(proj ?? {})\n },\n size,\n data\n );\n\n if (!projComp.get('type')) {\n projComp.set('type', 'equalEarth', false);\n }\n\n return projComp;\n }\n\n return undefined;\n}\n\nfunction gatherFitData(model: UnitModel) {\n const data: (SignalRef | string)[] = [];\n\n const {encoding} = model;\n\n for (const posssiblePair of [\n [LONGITUDE, LATITUDE],\n [LONGITUDE2, LATITUDE2]\n ]) {\n if (getFieldOrDatumDef(encoding[posssiblePair[0]]) || getFieldOrDatumDef(encoding[posssiblePair[1]])) {\n data.push({\n signal: model.getName(`geojson_${data.length}`)\n });\n }\n }\n\n if (model.channelHasField(SHAPE) && model.typedFieldDef(SHAPE).type === GEOJSON) {\n data.push({\n signal: model.getName(`geojson_${data.length}`)\n });\n }\n\n if (data.length === 0) {\n // main source is geojson, so we can just use that\n data.push(model.requestDataName(DataSourceType.Main));\n }\n\n return data;\n}\n\nfunction mergeIfNoConflict(first: ProjectionComponent, second: ProjectionComponent): ProjectionComponent {\n const allPropertiesShared = every(PROJECTION_PROPERTIES, prop => {\n // neither has the property\n if (!hasOwnProperty(first.explicit, prop) && !hasOwnProperty(second.explicit, prop)) {\n return true;\n }\n // both have property and an equal value for property\n if (\n hasOwnProperty(first.explicit, prop) &&\n hasOwnProperty(second.explicit, prop) &&\n // some properties might be signals or objects and require hashing for comparison\n deepEqual(first.get(prop), second.get(prop))\n ) {\n return true;\n }\n return false;\n });\n\n const size = deepEqual(first.size, second.size);\n if (size) {\n if (allPropertiesShared) {\n return first;\n } else if (deepEqual(first.explicit, {})) {\n return second;\n } else if (deepEqual(second.explicit, {})) {\n return first;\n }\n }\n\n // if all properties don't match, let each unit spec have its own projection\n return null;\n}\n\nfunction parseNonUnitProjections(model: Model): ProjectionComponent {\n if (model.children.length === 0) {\n return undefined;\n }\n\n let nonUnitProjection: ProjectionComponent;\n\n // parse all children first\n for (const child of model.children) {\n parseProjection(child);\n }\n\n // analyze parsed projections, attempt to merge\n const mergable = every(model.children, child => {\n const projection = child.component.projection;\n if (!projection) {\n // child layer does not use a projection\n return true;\n } else if (!nonUnitProjection) {\n // cached 'projection' is null, cache this one\n nonUnitProjection = projection;\n return true;\n } else {\n const merge = mergeIfNoConflict(nonUnitProjection, projection);\n if (merge) {\n nonUnitProjection = merge;\n }\n return !!merge;\n }\n });\n\n // if cached one and all other children share the same projection,\n if (nonUnitProjection && mergable) {\n // so we can elevate it to the layer level\n const name = model.projectionName(true);\n const modelProjection = new ProjectionComponent(\n name,\n nonUnitProjection.specifiedProjection,\n nonUnitProjection.size,\n duplicate(nonUnitProjection.data)\n );\n\n // rename and assign all others as merged\n for (const child of model.children) {\n const projection = child.component.projection;\n if (projection) {\n if (projection.isFit) {\n modelProjection.data.push(...child.component.projection.data);\n }\n child.renameProjection(projection.get('name'), name);\n projection.merged = true;\n }\n }\n\n return modelProjection;\n }\n\n return undefined;\n}\n","import {BinTransform as VgBinTransform, Transforms as VgTransform} from 'vega';\nimport {isString} from 'vega-util';\nimport {BinParams, binToString, isBinning, isParameterExtent} from '../../bin';\nimport {Channel} from '../../channel';\nimport {binRequiresRange, FieldName, isTypedFieldDef, normalizeBin, TypedFieldDef, vgField} from '../../channeldef';\nimport {Config} from '../../config';\nimport {BinTransform} from '../../transform';\nimport {Dict, duplicate, hash, isEmpty, keys, replacePathInField, unique, vals} from '../../util';\nimport {binFormatExpression} from '../format';\nimport {isUnitModel, Model, ModelWithField} from '../model';\nimport {parseSelectionExtent} from '../selection/parse';\nimport {NonPositionScaleChannel, PositionChannel} from './../../channel';\nimport {DataFlowNode} from './dataflow';\n\nfunction rangeFormula(model: ModelWithField, fieldDef: TypedFieldDef, channel: Channel, config: Config) {\n if (binRequiresRange(fieldDef, channel)) {\n // read format from axis or legend, if there is no format then use config.numberFormat\n\n const guide = isUnitModel(model)\n ? model.axis(channel as PositionChannel) ?? model.legend(channel as NonPositionScaleChannel) ?? {}\n : {};\n\n const startField = vgField(fieldDef, {expr: 'datum'});\n const endField = vgField(fieldDef, {expr: 'datum', binSuffix: 'end'});\n\n return {\n formulaAs: vgField(fieldDef, {binSuffix: 'range', forAs: true}),\n formula: binFormatExpression(startField, endField, guide.format, guide.formatType, config)\n };\n }\n return {};\n}\n\nfunction binKey(bin: BinParams, field: string) {\n return `${binToString(bin)}_${field}`;\n}\n\nfunction getSignalsFromModel(model: Model, key: string) {\n return {\n signal: model.getName(`${key}_bins`),\n extentSignal: model.getName(`${key}_extent`)\n };\n}\n\nexport function getBinSignalName(model: Model, field: string, bin: boolean | BinParams) {\n const normalizedBin = normalizeBin(bin, undefined) ?? {};\n const key = binKey(normalizedBin, field);\n return model.getName(`${key}_bins`);\n}\n\nfunction isBinTransform(t: TypedFieldDef | BinTransform): t is BinTransform {\n return 'as' in t;\n}\n\nfunction createBinComponent(t: TypedFieldDef | BinTransform, bin: boolean | BinParams, model: Model) {\n let as: [string, string];\n let span: string;\n\n if (isBinTransform(t)) {\n as = isString(t.as) ? [t.as, `${t.as}_end`] : [t.as[0], t.as[1]];\n } else {\n as = [vgField(t, {forAs: true}), vgField(t, {binSuffix: 'end', forAs: true})];\n }\n\n const normalizedBin = {...normalizeBin(bin, undefined)};\n const key = binKey(normalizedBin, t.field);\n const {signal, extentSignal} = getSignalsFromModel(model, key);\n\n if (isParameterExtent(normalizedBin.extent)) {\n const ext = normalizedBin.extent;\n span = parseSelectionExtent(model, ext.param, ext);\n delete normalizedBin.extent; // Vega-Lite selection extent map to Vega's span property.\n }\n\n const binComponent: BinComponent = {\n bin: normalizedBin,\n field: t.field,\n as: [as],\n ...(signal ? {signal} : {}),\n ...(extentSignal ? {extentSignal} : {}),\n ...(span ? {span} : {})\n };\n\n return {key, binComponent};\n}\n\nexport interface BinComponent {\n bin: BinParams;\n field: FieldName;\n extentSignal?: string;\n signal?: string;\n span?: string;\n\n /** Pairs of strings of the names of start and end signals */\n as: [string, string][];\n\n // Range Formula\n\n formula?: string;\n formulaAs?: string;\n}\n\nexport class BinNode extends DataFlowNode {\n public clone() {\n return new BinNode(null, duplicate(this.bins));\n }\n\n constructor(parent: DataFlowNode, private bins: Dict) {\n super(parent);\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: ModelWithField) {\n const bins = model.reduceFieldDef((binComponentIndex: Dict, fieldDef, channel) => {\n if (isTypedFieldDef(fieldDef) && isBinning(fieldDef.bin)) {\n const {key, binComponent} = createBinComponent(fieldDef, fieldDef.bin, model);\n binComponentIndex[key] = {\n ...binComponent,\n ...binComponentIndex[key],\n ...rangeFormula(model, fieldDef, channel, model.config)\n };\n }\n return binComponentIndex;\n }, {} as Dict);\n\n if (isEmpty(bins)) {\n return null;\n }\n\n return new BinNode(parent, bins);\n }\n\n /**\n * Creates a bin node from BinTransform.\n * The optional parameter should provide\n */\n public static makeFromTransform(parent: DataFlowNode, t: BinTransform, model: Model) {\n const {key, binComponent} = createBinComponent(t, t.bin, model);\n return new BinNode(parent, {\n [key]: binComponent\n });\n }\n\n /**\n * Merge bin nodes. This method either integrates the bin config from the other node\n * or if this node already has a bin config, renames the corresponding signal in the model.\n */\n public merge(other: BinNode, renameSignal: (s1: string, s2: string) => void) {\n for (const key of keys(other.bins)) {\n if (key in this.bins) {\n renameSignal(other.bins[key].signal, this.bins[key].signal);\n // Ensure that we don't have duplicate names for signal pairs\n this.bins[key].as = unique([...this.bins[key].as, ...other.bins[key].as], hash);\n } else {\n this.bins[key] = other.bins[key];\n }\n }\n\n for (const child of other.children) {\n other.removeChild(child);\n child.parent = this;\n }\n other.remove();\n }\n\n public producedFields() {\n return new Set(\n vals(this.bins)\n .map(c => c.as)\n .flat(2)\n );\n }\n\n public dependentFields() {\n return new Set(vals(this.bins).map(c => c.field));\n }\n\n public hash() {\n return `Bin ${hash(this.bins)}`;\n }\n\n public assemble(): VgTransform[] {\n return vals(this.bins).flatMap(bin => {\n const transform: VgTransform[] = [];\n\n const [binAs, ...remainingAs] = bin.as;\n const {extent, ...params} = bin.bin;\n const binTrans: VgBinTransform = {\n type: 'bin',\n field: replacePathInField(bin.field),\n as: binAs,\n signal: bin.signal,\n ...(!isParameterExtent(extent) ? {extent} : {extent: null}),\n ...(bin.span ? {span: {signal: `span(${bin.span})`}} : {}),\n ...params\n };\n\n if (!extent && bin.extentSignal) {\n transform.push({\n type: 'extent',\n field: replacePathInField(bin.field),\n signal: bin.extentSignal\n });\n binTrans.extent = {signal: bin.extentSignal};\n }\n\n transform.push(binTrans);\n\n for (const as of remainingAs) {\n for (let i = 0; i < 2; i++) {\n transform.push({\n type: 'formula',\n expr: vgField({field: binAs[i]}, {expr: 'datum'}),\n as: as[i]\n });\n }\n }\n\n if (bin.formula) {\n transform.push({\n type: 'formula',\n expr: bin.formula,\n as: bin.formulaAs\n });\n }\n return transform;\n });\n }\n}\n","import {AggregateOp, AggregateTransform as VgAggregateTransform} from 'vega';\nimport {isArgmaxDef, isArgminDef} from '../../aggregate';\nimport {\n Channel,\n getPositionChannelFromLatLong,\n getSecondaryRangeChannel,\n isGeoPositionChannel,\n isScaleChannel\n} from '../../channel';\nimport {binRequiresRange, FieldDef, hasBandEnd, isTypedFieldDef, vgField} from '../../channeldef';\nimport * as log from '../../log';\nimport {AggregateTransform} from '../../transform';\nimport {Dict, duplicate, hash, keys, replacePathInField, setEqual} from '../../util';\nimport {isUnitModel, ModelWithField} from '../model';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\ntype Measures = Dict>>>;\n\nfunction addDimension(dims: Set, channel: Channel, fieldDef: FieldDef, model: ModelWithField) {\n const channelDef2 = isUnitModel(model) ? model.encoding[getSecondaryRangeChannel(channel)] : undefined;\n\n if (\n isTypedFieldDef(fieldDef) &&\n isUnitModel(model) &&\n hasBandEnd(fieldDef, channelDef2, model.markDef, model.config)\n ) {\n dims.add(vgField(fieldDef, {}));\n dims.add(vgField(fieldDef, {suffix: 'end'}));\n\n if (fieldDef.bin && binRequiresRange(fieldDef, channel)) {\n dims.add(vgField(fieldDef, {binSuffix: 'range'}));\n }\n } else if (isGeoPositionChannel(channel)) {\n const posChannel = getPositionChannelFromLatLong(channel);\n dims.add(model.getName(posChannel));\n } else {\n dims.add(vgField(fieldDef));\n }\n return dims;\n}\n\nfunction mergeMeasures(parentMeasures: Measures, childMeasures: Measures) {\n for (const field of keys(childMeasures)) {\n // when we merge a measure, we either have to add an aggregation operator or even a new field\n const ops = childMeasures[field];\n for (const op of keys(ops)) {\n if (field in parentMeasures) {\n // add operator to existing measure field\n parentMeasures[field][op] = new Set([...(parentMeasures[field][op] ?? []), ...ops[op]]);\n } else {\n parentMeasures[field] = {[op]: ops[op]};\n }\n }\n }\n}\n\nexport class AggregateNode extends DataFlowNode {\n public clone() {\n return new AggregateNode(null, new Set(this.dimensions), duplicate(this.measures));\n }\n\n /**\n * @param dimensions string set for dimensions\n * @param measures dictionary mapping field name => dict of aggregation functions and names to use\n */\n constructor(parent: DataFlowNode, private dimensions: Set, private measures: Measures) {\n super(parent);\n }\n\n get groupBy() {\n return this.dimensions;\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: UnitModel): AggregateNode {\n let isAggregate = false;\n model.forEachFieldDef(fd => {\n if (fd.aggregate) {\n isAggregate = true;\n }\n });\n\n const meas: Measures = {};\n const dims = new Set();\n\n if (!isAggregate) {\n // no need to create this node if the model has no aggregation\n return null;\n }\n\n model.forEachFieldDef((fieldDef, channel: Channel) => {\n const {aggregate, field} = fieldDef;\n if (aggregate) {\n if (aggregate === 'count') {\n meas['*'] ??= {};\n meas['*']['count'] = new Set([vgField(fieldDef, {forAs: true})]);\n } else {\n if (isArgminDef(aggregate) || isArgmaxDef(aggregate)) {\n const op = isArgminDef(aggregate) ? 'argmin' : 'argmax';\n const argField = aggregate[op];\n meas[argField] ??= {};\n meas[argField][op] = new Set([vgField({op, field: argField}, {forAs: true})]);\n } else {\n meas[field] ??= {};\n meas[field][aggregate] = new Set([vgField(fieldDef, {forAs: true})]);\n }\n\n // For scale channel with domain === 'unaggregated', add min/max so we can use their union as unaggregated domain\n if (isScaleChannel(channel) && model.scaleDomain(channel) === 'unaggregated') {\n meas[field] ??= {};\n meas[field]['min'] = new Set([vgField({field, aggregate: 'min'}, {forAs: true})]);\n meas[field]['max'] = new Set([vgField({field, aggregate: 'max'}, {forAs: true})]);\n }\n }\n } else {\n addDimension(dims, channel, fieldDef, model);\n }\n });\n\n if (dims.size + keys(meas).length === 0) {\n return null;\n }\n\n return new AggregateNode(parent, dims, meas);\n }\n\n public static makeFromTransform(parent: DataFlowNode, t: AggregateTransform): AggregateNode {\n const dims = new Set();\n const meas: Measures = {};\n\n for (const s of t.aggregate) {\n const {op, field, as} = s;\n if (op) {\n if (op === 'count') {\n meas['*'] ??= {};\n meas['*']['count'] = new Set([as ? as : vgField(s, {forAs: true})]);\n } else {\n meas[field] ??= {};\n meas[field][op] = new Set([as ? as : vgField(s, {forAs: true})]);\n }\n }\n }\n\n for (const s of t.groupby ?? []) {\n dims.add(s);\n }\n\n if (dims.size + keys(meas).length === 0) {\n return null;\n }\n\n return new AggregateNode(parent, dims, meas);\n }\n\n public merge(other: AggregateNode): boolean {\n if (setEqual(this.dimensions, other.dimensions)) {\n mergeMeasures(this.measures, other.measures);\n return true;\n } else {\n log.debug('different dimensions, cannot merge');\n return false;\n }\n }\n\n public addDimensions(fields: readonly string[]) {\n fields.forEach(this.dimensions.add, this.dimensions);\n }\n\n public dependentFields() {\n return new Set([...this.dimensions, ...keys(this.measures)]);\n }\n\n public producedFields() {\n const out = new Set();\n\n for (const field of keys(this.measures)) {\n for (const op of keys(this.measures[field])) {\n const m = this.measures[field][op];\n if (m.size === 0) {\n out.add(`${op}_${field}`);\n } else {\n m.forEach(out.add, out);\n }\n }\n }\n\n return out;\n }\n\n public hash() {\n return `Aggregate ${hash({dimensions: this.dimensions, measures: this.measures})}`;\n }\n\n public assemble(): VgAggregateTransform {\n const ops: AggregateOp[] = [];\n const fields: string[] = [];\n const as: string[] = [];\n\n for (const field of keys(this.measures)) {\n for (const op of keys(this.measures[field])) {\n for (const alias of this.measures[field][op]) {\n as.push(alias);\n ops.push(op);\n fields.push(field === '*' ? null : replacePathInField(field));\n }\n }\n }\n\n const result: VgAggregateTransform = {\n type: 'aggregate',\n groupby: [...this.dimensions].map(replacePathInField),\n ops,\n fields,\n as\n };\n\n return result;\n }\n}\n","import {AggregateOp} from 'vega';\nimport {isArray} from 'vega-util';\nimport {isBinning} from '../../bin';\nimport {COLUMN, FACET_CHANNELS, POSITION_SCALE_CHANNELS, ROW} from '../../channel';\nimport {vgField} from '../../channeldef';\nimport * as log from '../../log';\nimport {hasDiscreteDomain} from '../../scale';\nimport {DEFAULT_SORT_OP, EncodingSortField, isSortField} from '../../sort';\nimport {hash} from '../../util';\nimport {isVgRangeStep, VgData} from '../../vega.schema';\nimport {FacetModel} from '../facet';\nimport {HEADER_CHANNELS, HEADER_TYPES} from '../header/component';\nimport {Model} from '../model';\nimport {assembleDomain, getFieldFromDomain} from '../scale/domain';\nimport {sortArrayIndexField} from './calculate';\nimport {DataFlowNode} from './dataflow';\n\ninterface ChildIndependentFieldsWithStep {\n x?: string;\n y?: string;\n}\n\ninterface FacetChannelInfo {\n name: string;\n fields: string[];\n sortField?: EncodingSortField;\n\n sortIndexField?: string;\n}\n\n/**\n * A node that helps us track what fields we are faceting by.\n */\nexport class FacetNode extends DataFlowNode {\n private readonly column: FacetChannelInfo;\n\n private readonly row: FacetChannelInfo;\n\n private readonly facet: FacetChannelInfo;\n\n private readonly childModel: Model;\n\n /**\n * @param model The facet model.\n * @param name The name that this facet source will have.\n * @param data The source data for this facet data.\n */\n public constructor(\n parent: DataFlowNode,\n public readonly model: FacetModel,\n public readonly name: string,\n public data: string\n ) {\n super(parent);\n\n for (const channel of FACET_CHANNELS) {\n const fieldDef = model.facet[channel];\n if (fieldDef) {\n const {bin, sort} = fieldDef;\n this[channel] = {\n name: model.getName(`${channel}_domain`),\n fields: [vgField(fieldDef), ...(isBinning(bin) ? [vgField(fieldDef, {binSuffix: 'end'})] : [])],\n ...(isSortField(sort)\n ? {sortField: sort}\n : isArray(sort)\n ? {sortIndexField: sortArrayIndexField(fieldDef, channel)}\n : {})\n };\n }\n }\n this.childModel = model.child;\n }\n\n public hash() {\n let out = `Facet`;\n\n for (const channel of FACET_CHANNELS) {\n if (this[channel]) {\n out += ` ${channel.charAt(0)}:${hash(this[channel])}`;\n }\n }\n\n return out;\n }\n\n get fields() {\n const f: string[] = [];\n\n for (const channel of FACET_CHANNELS) {\n if (this[channel]?.fields) {\n f.push(...this[channel].fields);\n }\n }\n return f;\n }\n\n public dependentFields() {\n const depFields = new Set(this.fields);\n\n for (const channel of FACET_CHANNELS) {\n if (this[channel]) {\n if (this[channel].sortField) {\n depFields.add(this[channel].sortField.field);\n }\n if (this[channel].sortIndexField) {\n depFields.add(this[channel].sortIndexField);\n }\n }\n }\n\n return depFields;\n }\n\n public producedFields() {\n return new Set(); // facet does not produce any new fields\n }\n\n /**\n * The name to reference this source is its name.\n */\n public getSource() {\n return this.name;\n }\n\n private getChildIndependentFieldsWithStep() {\n const childIndependentFieldsWithStep: ChildIndependentFieldsWithStep = {};\n\n for (const channel of POSITION_SCALE_CHANNELS) {\n const childScaleComponent = this.childModel.component.scales[channel];\n if (childScaleComponent && !childScaleComponent.merged) {\n // independent scale\n const type = childScaleComponent.get('type');\n const range = childScaleComponent.get('range');\n\n if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n const domain = assembleDomain(this.childModel, channel);\n const field = getFieldFromDomain(domain);\n if (field) {\n childIndependentFieldsWithStep[channel] = field;\n } else {\n log.warn(log.message.unknownField(channel));\n }\n }\n }\n }\n\n return childIndependentFieldsWithStep;\n }\n\n private assembleRowColumnHeaderData(\n channel: 'row' | 'column' | 'facet',\n crossedDataName: string,\n childIndependentFieldsWithStep: ChildIndependentFieldsWithStep\n ): VgData {\n const childChannel = {row: 'y', column: 'x', facet: undefined}[channel];\n\n const fields: string[] = [];\n const ops: AggregateOp[] = [];\n const as: string[] = [];\n\n if (childChannel && childIndependentFieldsWithStep && childIndependentFieldsWithStep[childChannel]) {\n if (crossedDataName) {\n // If there is a crossed data, calculate max\n fields.push(`distinct_${childIndependentFieldsWithStep[childChannel]}`);\n\n ops.push('max');\n } else {\n // If there is no crossed data, just calculate distinct\n fields.push(childIndependentFieldsWithStep[childChannel]);\n ops.push('distinct');\n }\n // Although it is technically a max, just name it distinct so it's easier to refer to it\n as.push(`distinct_${childIndependentFieldsWithStep[childChannel]}`);\n }\n\n const {sortField, sortIndexField} = this[channel];\n if (sortField) {\n const {op = DEFAULT_SORT_OP, field} = sortField;\n fields.push(field);\n ops.push(op);\n as.push(vgField(sortField, {forAs: true}));\n } else if (sortIndexField) {\n fields.push(sortIndexField);\n ops.push('max');\n as.push(sortIndexField);\n }\n\n return {\n name: this[channel].name,\n // Use data from the crossed one if it exist\n source: crossedDataName ?? this.data,\n transform: [\n {\n type: 'aggregate',\n groupby: this[channel].fields,\n ...(fields.length\n ? {\n fields,\n ops,\n as\n }\n : {})\n }\n ]\n };\n }\n\n private assembleFacetHeaderData(childIndependentFieldsWithStep: ChildIndependentFieldsWithStep) {\n const {columns} = this.model.layout;\n const {layoutHeaders} = this.model.component;\n const data: VgData[] = [];\n\n const hasSharedAxis: {row?: true; column?: true} = {};\n for (const headerChannel of HEADER_CHANNELS) {\n for (const headerType of HEADER_TYPES) {\n const headers = (layoutHeaders[headerChannel] && layoutHeaders[headerChannel][headerType]) ?? [];\n for (const header of headers) {\n if (header.axes?.length > 0) {\n hasSharedAxis[headerChannel] = true;\n break;\n }\n }\n }\n\n if (hasSharedAxis[headerChannel]) {\n const cardinality = `length(data(\"${this.facet.name}\"))`;\n\n const stop =\n headerChannel === 'row'\n ? columns\n ? {signal: `ceil(${cardinality} / ${columns})`}\n : 1\n : columns\n ? {signal: `min(${cardinality}, ${columns})`}\n : {signal: cardinality};\n\n data.push({\n name: `${this.facet.name}_${headerChannel}`,\n transform: [\n {\n type: 'sequence',\n start: 0,\n stop\n }\n ]\n });\n }\n }\n\n const {row, column} = hasSharedAxis;\n\n if (row || column) {\n data.unshift(this.assembleRowColumnHeaderData('facet', null, childIndependentFieldsWithStep));\n }\n\n return data;\n }\n\n public assemble() {\n const data: VgData[] = [];\n let crossedDataName = null;\n const childIndependentFieldsWithStep = this.getChildIndependentFieldsWithStep();\n\n const {column, row, facet} = this;\n\n if (column && row && (childIndependentFieldsWithStep.x || childIndependentFieldsWithStep.y)) {\n // Need to create a cross dataset to correctly calculate cardinality\n crossedDataName = `cross_${this.column.name}_${this.row.name}`;\n\n const fields: string[] = [].concat(\n childIndependentFieldsWithStep.x ?? [],\n childIndependentFieldsWithStep.y ?? []\n );\n const ops = fields.map((): AggregateOp => 'distinct');\n\n data.push({\n name: crossedDataName,\n source: this.data,\n transform: [\n {\n type: 'aggregate',\n groupby: this.fields,\n fields,\n ops\n }\n ]\n });\n }\n\n for (const channel of [COLUMN, ROW]) {\n if (this[channel]) {\n data.push(this.assembleRowColumnHeaderData(channel, crossedDataName, childIndependentFieldsWithStep));\n }\n }\n\n if (facet) {\n const facetData = this.assembleFacetHeaderData(childIndependentFieldsWithStep);\n if (facetData) {\n data.push(...facetData);\n }\n }\n\n return data;\n }\n}\n","import {FormulaTransform as VgFormulaTransform, SignalRef} from 'vega';\nimport {isNumber, isString} from 'vega-util';\nimport {AncestorParse} from '.';\nimport {isMinMaxOp} from '../../aggregate';\nimport {getMainRangeChannel, SingleDefChannel} from '../../channel';\nimport {\n isFieldDef,\n isFieldOrDatumDefForTimeFormat,\n isScaleFieldDef,\n isTypedFieldDef,\n TypedFieldDef\n} from '../../channeldef';\nimport {isGenerator, Parse} from '../../data';\nimport {DateTime, isDateTime} from '../../datetime';\nimport * as log from '../../log';\nimport {forEachLeaf} from '../../logical';\nimport {isPathMark} from '../../mark';\nimport {\n isFieldEqualPredicate,\n isFieldGTEPredicate,\n isFieldGTPredicate,\n isFieldLTEPredicate,\n isFieldLTPredicate,\n isFieldOneOfPredicate,\n isFieldPredicate,\n isFieldRangePredicate\n} from '../../predicate';\nimport {isSortField} from '../../sort';\nimport {FilterTransform} from '../../transform';\nimport {accessPathDepth, accessPathWithDatum, Dict, duplicate, hash, keys, removePathFromField} from '../../util';\nimport {signalRefOrValue} from '../common';\nimport {isFacetModel, isUnitModel, Model} from '../model';\nimport {Split} from '../split';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * Remove quotes from a string.\n */\nfunction unquote(pattern: string) {\n if (\n (pattern[0] === \"'\" && pattern[pattern.length - 1] === \"'\") ||\n (pattern[0] === '\"' && pattern[pattern.length - 1] === '\"')\n ) {\n return pattern.slice(1, -1);\n }\n return pattern;\n}\n\n/**\n * @param field The field.\n * @param parse What to parse the field as.\n */\nfunction parseExpression(field: string, parse: string): string {\n const f = accessPathWithDatum(field);\n if (parse === 'number') {\n return `toNumber(${f})`;\n } else if (parse === 'boolean') {\n return `toBoolean(${f})`;\n } else if (parse === 'string') {\n return `toString(${f})`;\n } else if (parse === 'date') {\n return `toDate(${f})`;\n } else if (parse === 'flatten') {\n return f;\n } else if (parse.startsWith('date:')) {\n const specifier = unquote(parse.slice(5, parse.length));\n return `timeParse(${f},'${specifier}')`;\n } else if (parse.startsWith('utc:')) {\n const specifier = unquote(parse.slice(4, parse.length));\n return `utcParse(${f},'${specifier}')`;\n } else {\n log.warn(log.message.unrecognizedParse(parse));\n return null;\n }\n}\n\nexport function getImplicitFromFilterTransform(transform: FilterTransform) {\n const implicit: Dict = {};\n forEachLeaf(transform.filter, filter => {\n if (isFieldPredicate(filter)) {\n // Automatically add a parse node for filters with filter objects\n let val: string | number | boolean | DateTime | SignalRef = null;\n\n // For EqualFilter, just use the equal property.\n // For RangeFilter and OneOfFilter, all array members should have\n // the same type, so we only use the first one.\n if (isFieldEqualPredicate(filter)) {\n val = signalRefOrValue(filter.equal);\n } else if (isFieldLTEPredicate(filter)) {\n val = signalRefOrValue(filter.lte);\n } else if (isFieldLTPredicate(filter)) {\n val = signalRefOrValue(filter.lt);\n } else if (isFieldGTPredicate(filter)) {\n val = signalRefOrValue(filter.gt);\n } else if (isFieldGTEPredicate(filter)) {\n val = signalRefOrValue(filter.gte);\n } else if (isFieldRangePredicate(filter)) {\n val = filter.range[0];\n } else if (isFieldOneOfPredicate(filter)) {\n val = (filter.oneOf ?? filter['in'])[0];\n } // else -- for filter expression, we can't infer anything\n\n if (val) {\n if (isDateTime(val)) {\n implicit[filter.field] = 'date';\n } else if (isNumber(val)) {\n implicit[filter.field] = 'number';\n } else if (isString(val)) {\n implicit[filter.field] = 'string';\n }\n }\n\n if (filter.timeUnit) {\n implicit[filter.field] = 'date';\n }\n }\n });\n\n return implicit;\n}\n\n/**\n * Creates a parse node for implicit parsing from a model and updates ancestorParse.\n */\nexport function getImplicitFromEncoding(model: Model) {\n const implicit: Dict = {};\n\n function add(fieldDef: TypedFieldDef) {\n if (isFieldOrDatumDefForTimeFormat(fieldDef)) {\n implicit[fieldDef.field] = 'date';\n } else if (\n fieldDef.type === 'quantitative' &&\n isMinMaxOp(fieldDef.aggregate) // we need to parse numbers to support correct min and max\n ) {\n implicit[fieldDef.field] = 'number';\n } else if (accessPathDepth(fieldDef.field) > 1) {\n // For non-date/non-number (strings and booleans), derive a flattened field for a referenced nested field.\n // (Parsing numbers / dates already flattens numeric and temporal fields.)\n if (!(fieldDef.field in implicit)) {\n implicit[fieldDef.field] = 'flatten';\n }\n } else if (isScaleFieldDef(fieldDef) && isSortField(fieldDef.sort) && accessPathDepth(fieldDef.sort.field) > 1) {\n // Flatten fields that we sort by but that are not otherwise flattened.\n if (!(fieldDef.sort.field in implicit)) {\n implicit[fieldDef.sort.field] = 'flatten';\n }\n }\n }\n\n if (isUnitModel(model) || isFacetModel(model)) {\n // Parse encoded fields\n model.forEachFieldDef((fieldDef, channel) => {\n if (isTypedFieldDef(fieldDef)) {\n add(fieldDef);\n } else {\n const mainChannel = getMainRangeChannel(channel);\n const mainFieldDef = model.fieldDef(mainChannel as SingleDefChannel) as TypedFieldDef;\n add({\n ...fieldDef,\n type: mainFieldDef.type\n });\n }\n });\n }\n\n // Parse quantitative dimension fields of path marks as numbers so that we sort them correctly.\n if (isUnitModel(model)) {\n const {mark, markDef, encoding} = model;\n if (\n isPathMark(mark) &&\n // No need to sort by dimension if we have a connected scatterplot (order channel is present)\n !model.encoding.order\n ) {\n const dimensionChannel = markDef.orient === 'horizontal' ? 'y' : 'x';\n const dimensionChannelDef = encoding[dimensionChannel];\n if (\n isFieldDef(dimensionChannelDef) &&\n dimensionChannelDef.type === 'quantitative' &&\n !(dimensionChannelDef.field in implicit)\n ) {\n implicit[dimensionChannelDef.field] = 'number';\n }\n }\n }\n\n return implicit;\n}\n\n/**\n * Creates a parse node for implicit parsing from a model and updates ancestorParse.\n */\nexport function getImplicitFromSelection(model: Model) {\n const implicit: Dict = {};\n\n if (isUnitModel(model) && model.component.selection) {\n for (const name of keys(model.component.selection)) {\n const selCmpt = model.component.selection[name];\n for (const proj of selCmpt.project.items) {\n if (!proj.channel && accessPathDepth(proj.field) > 1) {\n implicit[proj.field] = 'flatten';\n }\n }\n }\n }\n\n return implicit;\n}\n\nexport class ParseNode extends DataFlowNode {\n private _parse: Parse;\n\n public clone() {\n return new ParseNode(null, duplicate(this._parse));\n }\n\n constructor(parent: DataFlowNode, parse: Parse) {\n super(parent);\n\n this._parse = parse;\n }\n\n public hash() {\n return `Parse ${hash(this._parse)}`;\n }\n\n /**\n * Creates a parse node from a data.format.parse and updates ancestorParse.\n */\n public static makeExplicit(parent: DataFlowNode, model: Model, ancestorParse: AncestorParse) {\n // Custom parse\n let explicit = {};\n const data = model.data;\n if (!isGenerator(data) && data && data.format && data.format.parse) {\n explicit = data.format.parse;\n }\n\n return this.makeWithAncestors(parent, explicit, {}, ancestorParse);\n }\n\n /**\n * Creates a parse node from \"explicit\" parse and \"implicit\" parse and updates ancestorParse.\n */\n public static makeWithAncestors(\n parent: DataFlowNode,\n explicit: Parse,\n implicit: Parse,\n ancestorParse: AncestorParse\n ) {\n // We should not parse what has already been parsed in a parent (explicitly or implicitly) or what has been derived (maked as \"derived\"). We also don't need to flatten a field that has already been parsed.\n for (const field of keys(implicit)) {\n const parsedAs = ancestorParse.getWithExplicit(field);\n if (parsedAs.value !== undefined) {\n // We always ignore derived fields even if they are implicitly defined because we expect users to create the right types.\n if (\n parsedAs.explicit ||\n parsedAs.value === implicit[field] ||\n parsedAs.value === 'derived' ||\n implicit[field] === 'flatten'\n ) {\n delete implicit[field];\n } else {\n log.warn(log.message.differentParse(field, implicit[field], parsedAs.value));\n }\n }\n }\n\n for (const field of keys(explicit)) {\n const parsedAs = ancestorParse.get(field);\n if (parsedAs !== undefined) {\n // Don't parse a field again if it has been parsed with the same type already.\n if (parsedAs === explicit[field]) {\n delete explicit[field];\n } else {\n log.warn(log.message.differentParse(field, explicit[field], parsedAs));\n }\n }\n }\n\n const parse = new Split(explicit, implicit);\n\n // add the format parse from this model so that children don't parse the same field again\n ancestorParse.copyAll(parse);\n\n // copy only non-null parses\n const p: Dict = {};\n for (const key of keys(parse.combine())) {\n const val = parse.get(key);\n if (val !== null) {\n p[key] = val;\n }\n }\n\n if (keys(p).length === 0 || ancestorParse.parseNothing) {\n return null;\n }\n\n return new ParseNode(parent, p);\n }\n\n public get parse() {\n return this._parse;\n }\n\n public merge(other: ParseNode) {\n this._parse = {...this._parse, ...other.parse};\n other.remove();\n }\n\n /**\n * Assemble an object for Vega's format.parse property.\n */\n public assembleFormatParse() {\n const formatParse: Dict = {};\n for (const field of keys(this._parse)) {\n const p = this._parse[field];\n if (accessPathDepth(field) === 1) {\n formatParse[field] = p;\n }\n }\n return formatParse;\n }\n\n // format parse depends and produces all fields in its parse\n public producedFields() {\n return new Set(keys(this._parse));\n }\n\n public dependentFields() {\n return new Set(keys(this._parse));\n }\n\n public assembleTransforms(onlyNested = false): VgFormulaTransform[] {\n return keys(this._parse)\n .filter(field => (onlyNested ? accessPathDepth(field) > 1 : true))\n .map(field => {\n const expr = parseExpression(field, this._parse[field]);\n if (!expr) {\n return null;\n }\n\n const formula: VgFormulaTransform = {\n type: 'formula',\n expr,\n as: removePathFromField(field) // Vega output is always flattened\n };\n return formula;\n })\n .filter(t => t !== null);\n }\n}\n","import {SELECTION_ID} from '../../selection';\nimport {IdentifierTransform as VgIdentifierTransform} from 'vega';\nimport {DataFlowNode} from './dataflow';\n\nexport class IdentifierNode extends DataFlowNode {\n public clone() {\n return new IdentifierNode(null);\n }\n\n constructor(parent: DataFlowNode) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set();\n }\n\n public producedFields() {\n return new Set([SELECTION_ID]);\n }\n\n public hash() {\n return 'Identifier';\n }\n\n public assemble(): VgIdentifierTransform {\n return {type: 'identifier', as: SELECTION_ID};\n }\n}\n","import {GraticuleTransform as VgGraticuleTransform} from 'vega';\nimport {GraticuleParams} from '../../data';\nimport {hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\nexport class GraticuleNode extends DataFlowNode {\n public clone() {\n return new GraticuleNode(null, this.params);\n }\n\n constructor(parent: DataFlowNode, private params: true | GraticuleParams) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set();\n }\n\n public producedFields(): undefined {\n return undefined; // there should never be a node before graticule\n }\n\n public hash() {\n return `Graticule ${hash(this.params)}`;\n }\n\n public assemble(): VgGraticuleTransform {\n return {\n type: 'graticule',\n ...(this.params === true ? {} : this.params)\n };\n }\n}\n","import {SequenceParams} from '../../data';\nimport {hash} from '../../util';\nimport {SequenceTransform as VgSequenceTransform} from 'vega';\nimport {DataFlowNode} from './dataflow';\n\nexport class SequenceNode extends DataFlowNode {\n public clone() {\n return new SequenceNode(null, this.params);\n }\n\n constructor(parent: DataFlowNode, private params: SequenceParams) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set();\n }\n\n public producedFields() {\n return new Set([this.params.as ?? 'data']);\n }\n\n public hash() {\n return `Hash ${hash(this.params)}`;\n }\n\n public assemble(): VgSequenceTransform {\n return {\n type: 'sequence',\n ...this.params\n };\n }\n}\n","import {\n Data,\n DataFormat,\n DataFormatType,\n isGenerator,\n isInlineData,\n isNamedData,\n isSphereGenerator,\n isUrlData\n} from '../../data';\nimport {contains, isEmpty, omit} from '../../util';\nimport {VgData} from '../../vega.schema';\nimport {DataFlowNode} from './dataflow';\n\nexport class SourceNode extends DataFlowNode {\n private _data: Partial;\n\n private _name: string;\n\n private _generator: boolean;\n\n constructor(data: Data) {\n super(null); // source cannot have parent\n\n data ??= {name: 'source'};\n let format;\n\n if (!isGenerator(data)) {\n format = data.format ? {...omit(data.format, ['parse'])} : ({} as DataFormat);\n }\n\n if (isInlineData(data)) {\n this._data = {values: data.values};\n } else if (isUrlData(data)) {\n this._data = {url: data.url};\n\n if (!format.type) {\n // Extract extension from URL using snippet from\n // http://stackoverflow.com/questions/680929/how-to-extract-extension-from-filename-string-in-javascript\n let defaultExtension = /(?:\\.([^.]+))?$/.exec(data.url)[1];\n if (!contains(['json', 'csv', 'tsv', 'dsv', 'topojson'], defaultExtension)) {\n defaultExtension = 'json';\n }\n\n // defaultExtension has type string but we ensure that it is DataFormatType above\n format.type = defaultExtension as DataFormatType;\n }\n } else if (isSphereGenerator(data)) {\n // hardwire GeoJSON sphere data into output specification\n this._data = {values: [{type: 'Sphere'}]};\n } else if (isNamedData(data) || isGenerator(data)) {\n this._data = {};\n }\n\n // set flag to check if generator\n this._generator = isGenerator(data);\n\n // any dataset can be named\n if (data.name) {\n this._name = data.name;\n }\n\n if (format && !isEmpty(format)) {\n this._data.format = format;\n }\n }\n\n public dependentFields() {\n return new Set();\n }\n\n public producedFields(): undefined {\n return undefined; // we don't know what this source produces\n }\n\n get data() {\n return this._data;\n }\n\n public hasName(): boolean {\n return !!this._name;\n }\n\n get isGenerator() {\n return this._generator;\n }\n get dataName() {\n return this._name;\n }\n\n set dataName(name: string) {\n this._name = name;\n }\n\n set parent(parent: DataFlowNode) {\n throw new Error('Source nodes have to be roots.');\n }\n\n public remove() {\n throw new Error('Source nodes are roots and cannot be removed.');\n }\n\n public hash(): string | number {\n throw new Error('Cannot hash sources');\n }\n\n public assemble(): VgData {\n return {\n name: this._name,\n ...this._data,\n transform: []\n };\n }\n}\n","import {DataFlowNode} from './dataflow';\nimport {GraticuleNode} from './graticule';\nimport {SequenceNode} from './sequence';\nimport {SourceNode} from './source';\n\n/**\n * Whether this dataflow node is the source of the dataflow that produces data i.e. a source or a generator.\n */\nexport function isDataSourceNode(node: DataFlowNode) {\n return node instanceof SourceNode || node instanceof GraticuleNode || node instanceof SequenceNode;\n}\n\n/**\n * Abstract base class for Dataflow optimizers.\n * Contains only mutation handling logic. Subclasses need to implement iteration logic.\n */\nexport abstract class Optimizer {\n #modified: boolean;\n\n constructor() {\n this.#modified = false;\n }\n\n // Once true, #modified is never set to false\n public setModified() {\n this.#modified = true;\n }\n\n get modifiedFlag() {\n return this.#modified;\n }\n\n /**\n * Run the optimization for the tree with the provided root.\n */\n public abstract optimize(root: DataFlowNode): boolean;\n}\n\n/**\n * Starts from a node and runs the optimization function (the \"run\" method) upwards to the root,\n * depending on the continue and modified flag values returned by the optimization function.\n */\nexport abstract class BottomUpOptimizer extends Optimizer {\n /**\n * Run the optimizer at the node. This method should not change the parent of the passed in node (it should only affect children).\n */\n public abstract run(node: DataFlowNode): void;\n\n /**\n * Compute a map of node depths that we can use to determine a topological sort order.\n */\n private getNodeDepths(\n node: DataFlowNode,\n depth: number,\n depths: Map\n ): Map {\n depths.set(node, depth);\n\n for (const child of node.children) {\n this.getNodeDepths(child, depth + 1, depths);\n }\n\n return depths;\n }\n\n /**\n * Run the optimizer on all nodes starting from the leaves.\n */\n public optimize(node: DataFlowNode): boolean {\n const depths = this.getNodeDepths(node, 0, new Map());\n const topologicalSort = [...depths.entries()].sort((a, b) => b[1] - a[1]);\n\n for (const tuple of topologicalSort) {\n this.run(tuple[0]);\n }\n\n return this.modifiedFlag;\n }\n}\n\n/**\n * The optimizer function (the \"run\" method), is invoked on the given node and then continues recursively.\n */\nexport abstract class TopDownOptimizer extends Optimizer {\n /**\n * Run the optimizer at the node.\n */\n public abstract run(node: DataFlowNode): void;\n\n /**\n * Run the optimizer depth first on all nodes starting from the roots.\n */\n public optimize(node: DataFlowNode): boolean {\n this.run(node);\n\n for (const child of node.children) {\n this.optimize(child);\n }\n\n return this.modifiedFlag;\n }\n}\n","import {Parse} from '../../data';\nimport {Dict, fieldIntersection, hash, hasIntersection, isEmpty, keys, some} from '../../util';\nimport {Model} from '../model';\nimport {requiresSelectionId} from '../selection';\nimport {AggregateNode} from './aggregate';\nimport {BinNode} from './bin';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {FacetNode} from './facet';\nimport {FilterNode} from './filter';\nimport {ParseNode} from './formatparse';\nimport {IdentifierNode} from './identifier';\nimport {BottomUpOptimizer, isDataSourceNode, Optimizer, TopDownOptimizer} from './optimizer';\nimport {SourceNode} from './source';\nimport {TimeUnitNode} from './timeunit';\n\n/**\n * Merge identical nodes at forks by comparing hashes.\n *\n * Does not need to iterate from leaves so we implement this with recursion as it's a bit simpler.\n */\nexport class MergeIdenticalNodes extends TopDownOptimizer {\n public mergeNodes(parent: DataFlowNode, nodes: DataFlowNode[]) {\n const mergedNode = nodes.shift();\n for (const node of nodes) {\n parent.removeChild(node);\n node.parent = mergedNode;\n node.remove();\n }\n }\n\n public run(node: DataFlowNode) {\n const hashes = node.children.map(x => x.hash());\n const buckets: {hash?: DataFlowNode[]} = {};\n\n for (let i = 0; i < hashes.length; i++) {\n if (buckets[hashes[i]] === undefined) {\n buckets[hashes[i]] = [node.children[i]];\n } else {\n buckets[hashes[i]].push(node.children[i]);\n }\n }\n\n for (const k of keys(buckets)) {\n if (buckets[k].length > 1) {\n this.setModified();\n this.mergeNodes(node, buckets[k]);\n }\n }\n }\n}\n\n/**\n * Optimizer that removes identifier nodes that are not needed for selections.\n */\nexport class RemoveUnnecessaryIdentifierNodes extends TopDownOptimizer {\n private requiresSelectionId: boolean;\n\n constructor(model: Model) {\n super();\n this.requiresSelectionId = model && requiresSelectionId(model);\n }\n\n public run(node: DataFlowNode) {\n if (node instanceof IdentifierNode) {\n // Only preserve IdentifierNodes if we have default discrete selections\n // in our model tree, and if the nodes come after tuple producing nodes.\n if (\n !(\n this.requiresSelectionId &&\n (isDataSourceNode(node.parent) || node.parent instanceof AggregateNode || node.parent instanceof ParseNode)\n )\n ) {\n this.setModified();\n node.remove();\n }\n }\n }\n}\n\n/**\n * Removes duplicate time unit nodes (as determined by the name of the output field) that may be generated due to\n * selections projected over time units. Only keeps the first time unit in any branch.\n *\n * This optimizer is a custom top down optimizer that keep track of produced fields in a branch.\n */\nexport class RemoveDuplicateTimeUnits extends Optimizer {\n public optimize(node: DataFlowNode): boolean {\n this.run(node, new Set());\n\n return this.modifiedFlag;\n }\n\n public run(node: DataFlowNode, timeUnitFields: Set) {\n let producedFields = new Set();\n\n if (node instanceof TimeUnitNode) {\n producedFields = node.producedFields();\n if (hasIntersection(producedFields, timeUnitFields)) {\n this.setModified();\n node.removeFormulas(timeUnitFields);\n if (node.producedFields.length === 0) {\n node.remove();\n }\n }\n }\n\n for (const child of node.children) {\n this.run(child, new Set([...timeUnitFields, ...producedFields]));\n }\n }\n}\n\n/**\n * Remove output nodes that are not required.\n */\nexport class RemoveUnnecessaryOutputNodes extends TopDownOptimizer {\n constructor() {\n super();\n }\n\n public run(node: DataFlowNode) {\n if (node instanceof OutputNode && !node.isRequired()) {\n this.setModified();\n node.remove();\n }\n }\n}\n\n/**\n * Move parse nodes up to forks and merges them if possible.\n */\nexport class MoveParseUp extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n if (isDataSourceNode(node)) {\n return;\n }\n\n if (node.numChildren() > 1) {\n // Don't move parse further up but continue with parent.\n return;\n }\n\n for (const child of node.children) {\n if (child instanceof ParseNode) {\n if (node instanceof ParseNode) {\n this.setModified();\n node.merge(child);\n } else {\n // Don't swap with nodes that produce something that the parse node depends on (e.g. lookup).\n if (fieldIntersection(node.producedFields(), child.dependentFields())) {\n continue;\n }\n this.setModified();\n child.swapWithParent();\n }\n }\n }\n\n return;\n }\n}\n\n/**\n * Inserts an intermediate ParseNode containing all non-conflicting parse fields and removes the empty ParseNodes.\n *\n * We assume that dependent paths that do not have a parse node can be just merged.\n */\nexport class MergeParse extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n const originalChildren = [...node.children];\n const parseChildren = node.children.filter((child): child is ParseNode => child instanceof ParseNode);\n\n if (node.numChildren() > 1 && parseChildren.length >= 1) {\n const commonParse: Parse = {};\n const conflictingParse = new Set();\n for (const parseNode of parseChildren) {\n const parse = parseNode.parse;\n for (const k of keys(parse)) {\n if (!(k in commonParse)) {\n commonParse[k] = parse[k];\n } else if (commonParse[k] !== parse[k]) {\n conflictingParse.add(k);\n }\n }\n }\n\n for (const field of conflictingParse) {\n delete commonParse[field];\n }\n\n if (!isEmpty(commonParse)) {\n this.setModified();\n const mergedParseNode = new ParseNode(node, commonParse);\n for (const childNode of originalChildren) {\n if (childNode instanceof ParseNode) {\n for (const key of keys(commonParse)) {\n delete childNode.parse[key];\n }\n }\n\n node.removeChild(childNode);\n childNode.parent = mergedParseNode;\n\n // remove empty parse nodes\n if (childNode instanceof ParseNode && keys(childNode.parse).length === 0) {\n childNode.remove();\n }\n }\n }\n }\n }\n}\n\n/**\n * Repeatedly remove leaf nodes that are not output or facet nodes.\n * The reason is that we don't need subtrees that don't have any output nodes.\n * Facet nodes are needed for the row or column domains.\n */\nexport class RemoveUnusedSubtrees extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n if (node instanceof OutputNode || node.numChildren() > 0 || node instanceof FacetNode) {\n // no need to continue with parent because it is output node or will have children (there was a fork)\n } else if (node instanceof SourceNode) {\n // ignore empty unused sources as they will be removed in optimizationDataflowHelper\n } else {\n this.setModified();\n node.remove();\n }\n }\n}\n\n/**\n * Merge adjacent time unit nodes.\n */\nexport class MergeTimeUnits extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n const timeUnitChildren = node.children.filter((x): x is TimeUnitNode => x instanceof TimeUnitNode);\n const combination = timeUnitChildren.pop();\n for (const timeUnit of timeUnitChildren) {\n this.setModified();\n combination.merge(timeUnit);\n }\n }\n}\n\nexport class MergeAggregates extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n const aggChildren = node.children.filter((child): child is AggregateNode => child instanceof AggregateNode);\n\n // Object which we'll use to map the fields which an aggregate is grouped by to\n // the set of aggregates with that grouping. This is useful as only aggregates\n // with the same group by can be merged\n const groupedAggregates: Dict = {};\n\n // Build groupedAggregates\n for (const agg of aggChildren) {\n const groupBys = hash(agg.groupBy);\n if (!(groupBys in groupedAggregates)) {\n groupedAggregates[groupBys] = [];\n }\n groupedAggregates[groupBys].push(agg);\n }\n\n // Merge aggregateNodes with same key in groupedAggregates\n for (const group of keys(groupedAggregates)) {\n const mergeableAggs = groupedAggregates[group];\n if (mergeableAggs.length > 1) {\n const mergedAggs = mergeableAggs.pop();\n for (const agg of mergeableAggs) {\n if (mergedAggs.merge(agg)) {\n node.removeChild(agg);\n agg.parent = mergedAggs;\n agg.remove();\n\n this.setModified();\n }\n }\n }\n }\n }\n}\n\n/**\n * Merge bin nodes and move them up through forks. Stop at filters, parse, identifier as we want them to stay before the bin node.\n */\nexport class MergeBins extends BottomUpOptimizer {\n constructor(private model: Model) {\n super();\n }\n\n public run(node: DataFlowNode) {\n const moveBinsUp = !(\n isDataSourceNode(node) ||\n node instanceof FilterNode ||\n node instanceof ParseNode ||\n node instanceof IdentifierNode\n );\n\n const promotableBins: BinNode[] = [];\n const remainingBins: BinNode[] = [];\n\n for (const child of node.children) {\n if (child instanceof BinNode) {\n if (moveBinsUp && !fieldIntersection(node.producedFields(), child.dependentFields())) {\n promotableBins.push(child);\n } else {\n remainingBins.push(child);\n }\n }\n }\n\n if (promotableBins.length > 0) {\n const promotedBin = promotableBins.pop();\n for (const bin of promotableBins) {\n promotedBin.merge(bin, this.model.renameSignal.bind(this.model));\n }\n this.setModified();\n if (node instanceof BinNode) {\n node.merge(promotedBin, this.model.renameSignal.bind(this.model));\n } else {\n promotedBin.swapWithParent();\n }\n }\n if (remainingBins.length > 1) {\n const remainingBin = remainingBins.pop();\n for (const bin of remainingBins) {\n remainingBin.merge(bin, this.model.renameSignal.bind(this.model));\n }\n this.setModified();\n }\n }\n}\n\n/**\n * This optimizer takes output nodes that are at a fork and moves them before the fork.\n *\n * The algorithm iterates over the children and tries to find the last output node in a chain of output nodes.\n * It then moves all output nodes before that main output node. All other children (and the children of the output nodes)\n * are inserted after the main output node.\n */\nexport class MergeOutputs extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n const children = [...node.children];\n const hasOutputChild = some(children, child => child instanceof OutputNode);\n\n if (!hasOutputChild || node.numChildren() <= 1) {\n return;\n }\n\n const otherChildren: DataFlowNode[] = [];\n\n // The output node we will connect all other nodes to.\n // Output nodes will be added before the new node, other nodes after.\n let mainOutput: OutputNode;\n\n for (const child of children) {\n if (child instanceof OutputNode) {\n let lastOutput = child;\n\n while (lastOutput.numChildren() === 1) {\n const [theChild] = lastOutput.children;\n if (theChild instanceof OutputNode) {\n lastOutput = theChild;\n } else {\n break;\n }\n }\n\n otherChildren.push(...lastOutput.children);\n\n if (mainOutput) {\n // Move the output nodes before the mainOutput. We do this by setting\n // the parent of the first not to the parent of the main output and\n // the main output's parent to the last output.\n\n // note: the child is the first output\n node.removeChild(child);\n child.parent = mainOutput.parent;\n\n mainOutput.parent.removeChild(mainOutput);\n mainOutput.parent = lastOutput;\n\n this.setModified();\n } else {\n mainOutput = lastOutput;\n }\n } else {\n otherChildren.push(child);\n }\n }\n\n if (otherChildren.length) {\n this.setModified();\n for (const child of otherChildren) {\n child.parent.removeChild(child);\n child.parent = mainOutput;\n }\n }\n }\n}\n","import {AggregateOp} from 'vega';\nimport {vgField} from '../../channeldef';\nimport {JoinAggregateTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {VgJoinAggregateTransform} from '../../vega.schema';\nimport {JoinAggregateFieldDef} from '../../transform';\nimport {unique} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for the join aggregate transform nodes.\n */\nexport class JoinAggregateTransformNode extends DataFlowNode {\n public clone() {\n return new JoinAggregateTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private readonly transform: JoinAggregateTransform) {\n super(parent);\n }\n\n public addDimensions(fields: string[]) {\n this.transform.groupby = unique(this.transform.groupby.concat(fields), d => d);\n }\n\n public dependentFields() {\n const out = new Set();\n\n if (this.transform.groupby) {\n this.transform.groupby.forEach(out.add, out);\n }\n this.transform.joinaggregate\n .map(w => w.field)\n .filter(f => f !== undefined)\n .forEach(out.add, out);\n\n return out;\n }\n\n public producedFields() {\n return new Set(this.transform.joinaggregate.map(this.getDefaultName));\n }\n\n private getDefaultName(joinAggregateFieldDef: JoinAggregateFieldDef): string {\n return joinAggregateFieldDef.as ?? vgField(joinAggregateFieldDef);\n }\n\n public hash() {\n return `JoinAggregateTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgJoinAggregateTransform {\n const fields: string[] = [];\n const ops: AggregateOp[] = [];\n const as: string[] = [];\n for (const joinaggregate of this.transform.joinaggregate) {\n ops.push(joinaggregate.op);\n as.push(this.getDefaultName(joinaggregate));\n fields.push(joinaggregate.field === undefined ? null : joinaggregate.field);\n }\n\n const groupby = this.transform.groupby;\n\n return {\n type: 'joinaggregate',\n as,\n ops,\n fields,\n ...(groupby !== undefined ? {groupby} : {})\n };\n }\n}\n","import {Transforms as VgTransform} from 'vega';\nimport {isArray, isString} from 'vega-util';\nimport {FieldName, getFieldDef, isFieldDef, PositionFieldDef, vgField} from '../../channeldef';\nimport {SortFields, SortOrder} from '../../sort';\nimport {StackOffset} from '../../stack';\nimport {StackTransform} from '../../transform';\nimport {duplicate, getFirstDefined, hash} from '../../util';\nimport {sortParams} from '../common';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nfunction getStackByFields(model: UnitModel): string[] {\n return model.stack.stackBy.reduce((fields, by) => {\n const fieldDef = by.fieldDef;\n\n const _field = vgField(fieldDef);\n if (_field) {\n fields.push(_field);\n }\n return fields;\n }, [] as string[]);\n}\n\nexport interface StackComponent {\n /**\n * Faceted field.\n */\n facetby: string[];\n\n dimensionFieldDef?: PositionFieldDef;\n\n /**\n * Stack measure's field. Used in makeFromEncoding.\n */\n stackField: string;\n\n /**\n * Level of detail fields for each level in the stacked charts such as color or detail.\n * Used in makeFromEncoding.\n */\n stackby?: string[];\n\n /**\n * Field that determines order of levels in the stacked charts.\n * Used in both but optional in transform.\n */\n sort: SortFields;\n\n /** Mode for stacking marks.\n */\n offset: StackOffset;\n\n /**\n * Whether to impute the data before stacking. Used only in makeFromEncoding.\n */\n impute?: boolean;\n\n /**\n * The data fields to group by.\n */\n groupby?: FieldName[];\n /**\n * Output field names of each stack field.\n */\n as: [FieldName, FieldName];\n}\n\nfunction isValidAsArray(as: string[] | string): as is string[] {\n return isArray(as) && as.every(s => isString(s)) && as.length > 1;\n}\n\nexport class StackNode extends DataFlowNode {\n private _stack: StackComponent;\n\n public clone() {\n return new StackNode(null, duplicate(this._stack));\n }\n\n constructor(parent: DataFlowNode, stack: StackComponent) {\n super(parent);\n\n this._stack = stack;\n }\n\n public static makeFromTransform(parent: DataFlowNode, stackTransform: StackTransform) {\n const {stack, groupby, as, offset = 'zero'} = stackTransform;\n\n const sortFields: string[] = [];\n const sortOrder: SortOrder[] = [];\n if (stackTransform.sort !== undefined) {\n for (const sortField of stackTransform.sort) {\n sortFields.push(sortField.field);\n sortOrder.push(getFirstDefined(sortField.order, 'ascending'));\n }\n }\n const sort: SortFields = {\n field: sortFields,\n order: sortOrder\n };\n let normalizedAs: [string, string];\n if (isValidAsArray(as)) {\n normalizedAs = as;\n } else if (isString(as)) {\n normalizedAs = [as, `${as}_end`];\n } else {\n normalizedAs = [`${stackTransform.stack}_start`, `${stackTransform.stack}_end`];\n }\n\n return new StackNode(parent, {\n stackField: stack,\n groupby,\n offset,\n sort,\n facetby: [],\n as: normalizedAs\n });\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: UnitModel) {\n const stackProperties = model.stack;\n const {encoding} = model;\n\n if (!stackProperties) {\n return null;\n }\n\n const {groupbyChannel, fieldChannel, offset, impute} = stackProperties;\n\n let dimensionFieldDef: PositionFieldDef;\n if (groupbyChannel) {\n const cDef = encoding[groupbyChannel];\n dimensionFieldDef = getFieldDef(cDef) as PositionFieldDef; // Fair to cast as groupByChannel is always either x or y\n }\n\n const stackby = getStackByFields(model);\n const orderDef = model.encoding.order;\n\n let sort: SortFields;\n if (isArray(orderDef) || isFieldDef(orderDef)) {\n sort = sortParams(orderDef);\n } else {\n // default = descending by stackFields\n // FIXME is the default here correct for binned fields?\n sort = stackby.reduce(\n (s, field) => {\n s.field.push(field);\n s.order.push(fieldChannel === 'y' ? 'descending' : 'ascending');\n return s;\n },\n {field: [], order: []}\n );\n }\n\n return new StackNode(parent, {\n dimensionFieldDef,\n stackField: model.vgField(fieldChannel),\n facetby: [],\n stackby,\n sort,\n offset,\n impute,\n as: [\n model.vgField(fieldChannel, {suffix: 'start', forAs: true}),\n model.vgField(fieldChannel, {suffix: 'end', forAs: true})\n ]\n });\n }\n\n get stack(): StackComponent {\n return this._stack;\n }\n\n public addDimensions(fields: string[]) {\n this._stack.facetby.push(...fields);\n }\n\n public dependentFields() {\n const out = new Set();\n\n out.add(this._stack.stackField);\n\n this.getGroupbyFields().forEach(out.add, out);\n this._stack.facetby.forEach(out.add, out);\n this._stack.sort.field.forEach(out.add, out);\n\n return out;\n }\n\n public producedFields() {\n return new Set(this._stack.as);\n }\n\n public hash() {\n return `Stack ${hash(this._stack)}`;\n }\n\n private getGroupbyFields() {\n const {dimensionFieldDef, impute, groupby} = this._stack;\n if (dimensionFieldDef) {\n if (dimensionFieldDef.bin) {\n if (impute) {\n // For binned group by field with impute, we calculate bin_mid\n // as we cannot impute two fields simultaneously\n return [vgField(dimensionFieldDef, {binSuffix: 'mid'})];\n }\n return [\n // For binned group by field without impute, we need both bin (start) and bin_end\n vgField(dimensionFieldDef, {}),\n vgField(dimensionFieldDef, {binSuffix: 'end'})\n ];\n }\n return [vgField(dimensionFieldDef)];\n }\n return groupby ?? [];\n }\n\n public assemble(): VgTransform[] {\n const transform: VgTransform[] = [];\n const {facetby, dimensionFieldDef, stackField: field, stackby, sort, offset, impute, as} = this._stack;\n\n // Impute\n if (impute && dimensionFieldDef) {\n const {bandPosition = 0.5, bin} = dimensionFieldDef;\n if (bin) {\n // As we can only impute one field at a time, we need to calculate\n // mid point for a binned field\n transform.push({\n type: 'formula',\n expr:\n `${bandPosition}*` +\n vgField(dimensionFieldDef, {expr: 'datum'}) +\n `+${1 - bandPosition}*` +\n vgField(dimensionFieldDef, {expr: 'datum', binSuffix: 'end'}),\n as: vgField(dimensionFieldDef, {binSuffix: 'mid', forAs: true})\n });\n }\n\n transform.push({\n type: 'impute',\n field,\n groupby: [...stackby, ...facetby],\n key: vgField(dimensionFieldDef, {binSuffix: 'mid'}),\n method: 'value',\n value: 0\n });\n }\n\n // Stack\n transform.push({\n type: 'stack',\n groupby: [...this.getGroupbyFields(), ...facetby],\n field,\n sort,\n as,\n offset\n });\n\n return transform;\n }\n}\n","import {AggregateOp, WindowTransform as VgWindowTransform} from 'vega';\nimport {isAggregateOp} from '../../aggregate';\nimport {vgField} from '../../channeldef';\nimport {SortOrder} from '../../sort';\nimport {WindowFieldDef, WindowOnlyOp, WindowTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {VgComparator, VgJoinAggregateTransform} from '../../vega.schema';\nimport {unique} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for the window transform nodes\n */\nexport class WindowTransformNode extends DataFlowNode {\n public clone() {\n return new WindowTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private readonly transform: WindowTransform) {\n super(parent);\n }\n\n public addDimensions(fields: string[]) {\n this.transform.groupby = unique(this.transform.groupby.concat(fields), d => d);\n }\n\n public dependentFields() {\n const out = new Set();\n\n (this.transform.groupby ?? []).forEach(out.add, out);\n (this.transform.sort ?? []).forEach(m => out.add(m.field));\n\n this.transform.window\n .map(w => w.field)\n .filter(f => f !== undefined)\n .forEach(out.add, out);\n\n return out;\n }\n\n public producedFields() {\n return new Set(this.transform.window.map(this.getDefaultName));\n }\n\n private getDefaultName(windowFieldDef: WindowFieldDef): string {\n return windowFieldDef.as ?? vgField(windowFieldDef);\n }\n\n public hash() {\n return `WindowTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgWindowTransform | VgJoinAggregateTransform {\n const fields: string[] = [];\n const ops: (AggregateOp | WindowOnlyOp)[] = [];\n const as: string[] = [];\n const params = [];\n\n for (const window of this.transform.window) {\n ops.push(window.op);\n as.push(this.getDefaultName(window));\n params.push(window.param === undefined ? null : window.param);\n fields.push(window.field === undefined ? null : window.field);\n }\n\n const frame = this.transform.frame;\n const groupby = this.transform.groupby;\n\n if (frame && frame[0] === null && frame[1] === null && ops.every(o => isAggregateOp(o))) {\n // when the window does not rely on any particular window ops or frame, switch to a simpler and more efficient joinaggregate\n return {\n type: 'joinaggregate',\n as,\n ops: ops as AggregateOp[],\n fields,\n ...(groupby !== undefined ? {groupby} : {})\n } as VgJoinAggregateTransform;\n }\n\n const sortFields: string[] = [];\n const sortOrder: SortOrder[] = [];\n if (this.transform.sort !== undefined) {\n for (const sortField of this.transform.sort) {\n sortFields.push(sortField.field);\n sortOrder.push(sortField.order ?? 'ascending');\n }\n }\n const sort: VgComparator = {\n field: sortFields,\n order: sortOrder\n };\n const ignorePeers = this.transform.ignorePeers;\n\n return {\n type: 'window',\n params,\n as,\n ops,\n fields,\n sort,\n ...(ignorePeers !== undefined ? {ignorePeers} : {}),\n ...(groupby !== undefined ? {groupby} : {}),\n ...(frame !== undefined ? {frame} : {})\n } as VgWindowTransform;\n }\n}\n","import {DataSourceType} from '../../data';\nimport {AggregateNode} from './aggregate';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {FacetNode} from './facet';\nimport {JoinAggregateTransformNode} from './joinaggregate';\nimport {FACET_SCALE_PREFIX} from './optimize';\nimport {StackNode} from './stack';\nimport {WindowTransformNode} from './window';\n\n/**\n * Clones the subtree and ignores output nodes except for the leaves, which are renamed.\n */\nfunction cloneSubtree(facet: FacetNode) {\n function clone(node: DataFlowNode): DataFlowNode[] {\n if (!(node instanceof FacetNode)) {\n const copy = node.clone();\n\n if (copy instanceof OutputNode) {\n const newName = FACET_SCALE_PREFIX + copy.getSource();\n copy.setSource(newName);\n\n facet.model.component.data.outputNodes[newName] = copy;\n } else if (\n copy instanceof AggregateNode ||\n copy instanceof StackNode ||\n copy instanceof WindowTransformNode ||\n copy instanceof JoinAggregateTransformNode\n ) {\n copy.addDimensions(facet.fields);\n }\n for (const n of node.children.flatMap(clone)) {\n n.parent = copy;\n }\n\n return [copy];\n }\n\n return node.children.flatMap(clone);\n }\n return clone;\n}\n\n/**\n * Move facet nodes down to the next fork or output node. Also pull the main output with the facet node.\n * After moving down the facet node, make a copy of the subtree and make it a child of the main output.\n */\nexport function moveFacetDown(node: DataFlowNode) {\n if (node instanceof FacetNode) {\n if (node.numChildren() === 1 && !(node.children[0] instanceof OutputNode)) {\n // move down until we hit a fork or output node\n const child = node.children[0];\n\n if (\n child instanceof AggregateNode ||\n child instanceof StackNode ||\n child instanceof WindowTransformNode ||\n child instanceof JoinAggregateTransformNode\n ) {\n child.addDimensions(node.fields);\n }\n\n child.swapWithParent();\n moveFacetDown(node);\n } else {\n // move main to facet\n\n const facetMain = node.model.component.data.main;\n moveMainDownToFacet(facetMain);\n\n // replicate the subtree and place it before the facet's main node\n const cloner = cloneSubtree(node);\n const copy: DataFlowNode[] = node.children.map(cloner).flat();\n for (const c of copy) {\n c.parent = facetMain;\n }\n }\n } else {\n node.children.map(moveFacetDown);\n }\n}\n\nfunction moveMainDownToFacet(node: DataFlowNode) {\n if (node instanceof OutputNode && node.type === DataSourceType.Main) {\n if (node.numChildren() === 1) {\n const child = node.children[0];\n if (!(child instanceof FacetNode)) {\n child.swapWithParent();\n moveMainDownToFacet(node);\n }\n }\n }\n}\n","import {DataComponent} from '.';\nimport * as log from '../../log';\nimport {Model} from '../model';\nimport {DataFlowNode} from './dataflow';\nimport {Optimizer} from './optimizer';\nimport * as optimizers from './optimizers';\nimport {moveFacetDown} from './subtree';\n\nexport const FACET_SCALE_PREFIX = 'scale_';\nexport const MAX_OPTIMIZATION_RUNS = 5;\n\n/**\n * Iterates over a dataflow graph and checks whether all links are consistent.\n */\nexport function checkLinks(nodes: readonly DataFlowNode[]): boolean {\n for (const node of nodes) {\n for (const child of node.children) {\n if (child.parent !== node) {\n // log.error('Dataflow graph is inconsistent.', node, child);\n return false;\n }\n }\n\n if (!checkLinks(node.children)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Run the specified optimizer on the provided nodes.\n *\n * @param optimizer The optimizer instance to run.\n * @param nodes A set of nodes to optimize.\n */\nfunction runOptimizer(optimizer: Optimizer, nodes: DataFlowNode[]): boolean {\n let modified = false;\n\n for (const node of nodes) {\n modified = optimizer.optimize(node) || modified;\n }\n\n return modified;\n}\n\nfunction optimizationDataflowHelper(dataComponent: DataComponent, model: Model, firstPass: boolean) {\n let roots = dataComponent.sources;\n let modified = false;\n\n modified = runOptimizer(new optimizers.RemoveUnnecessaryOutputNodes(), roots) || modified;\n modified = runOptimizer(new optimizers.RemoveUnnecessaryIdentifierNodes(model), roots) || modified;\n\n // remove source nodes that don't have any children because they also don't have output nodes\n roots = roots.filter(r => r.numChildren() > 0);\n\n modified = runOptimizer(new optimizers.RemoveUnusedSubtrees(), roots) || modified;\n\n roots = roots.filter(r => r.numChildren() > 0);\n\n if (!firstPass) {\n // Only run these optimizations after the optimizer has moved down the facet node.\n // With this change, we can be more aggressive in the optimizations.\n modified = runOptimizer(new optimizers.MoveParseUp(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeBins(model), roots) || modified;\n modified = runOptimizer(new optimizers.RemoveDuplicateTimeUnits(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeParse(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeAggregates(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeTimeUnits(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeIdenticalNodes(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeOutputs(), roots) || modified;\n }\n\n dataComponent.sources = roots;\n\n return modified;\n}\n\n/**\n * Optimizes the dataflow of the passed in data component.\n */\nexport function optimizeDataflow(data: DataComponent, model: Model) {\n // check before optimizations\n checkLinks(data.sources);\n\n let firstPassCounter = 0;\n let secondPassCounter = 0;\n\n for (let i = 0; i < MAX_OPTIMIZATION_RUNS; i++) {\n if (!optimizationDataflowHelper(data, model, true)) {\n break;\n }\n firstPassCounter++;\n }\n\n // move facets down and make a copy of the subtree so that we can have scales at the top level\n data.sources.map(moveFacetDown);\n\n for (let i = 0; i < MAX_OPTIMIZATION_RUNS; i++) {\n if (!optimizationDataflowHelper(data, model, false)) {\n break;\n }\n secondPassCounter++;\n }\n\n // check after optimizations\n checkLinks(data.sources);\n\n if (Math.max(firstPassCounter, secondPassCounter) === MAX_OPTIMIZATION_RUNS) {\n log.warn(`Maximum optimization runs(${MAX_OPTIMIZATION_RUNS}) reached.`);\n }\n}\n","import {SignalRef} from 'vega';\n\nexport type Rename = (oldSignalName: string) => string;\n\n/**\n * A class that behaves like a SignalRef but lazily generates the signal.\n * The provided generator function should use `Model.getSignalName` to use the correct signal name.\n */\nexport class SignalRefWrapper implements SignalRef {\n constructor(exprGenerator: () => string) {\n Object.defineProperty(this, 'signal', {\n enumerable: true,\n get: exprGenerator\n });\n }\n\n public signal: string; // for ts\n\n public static fromName(rename: Rename, signalName: string) {\n return new SignalRefWrapper(() => rename(signalName));\n }\n}\n","import {SignalRef} from 'vega';\nimport {isObject, isString} from 'vega-util';\nimport {\n isAggregateOp,\n isArgmaxDef,\n isArgminDef,\n MULTIDOMAIN_SORT_OP_INDEX as UNIONDOMAIN_SORT_OP_INDEX,\n NonArgAggregateOp,\n SHARED_DOMAIN_OP_INDEX\n} from '../../aggregate';\nimport {isBinning, isBinParams, isParameterExtent} from '../../bin';\nimport {getSecondaryRangeChannel, isScaleChannel, ScaleChannel} from '../../channel';\nimport {\n binRequiresRange,\n getFieldOrDatumDef,\n hasBandEnd,\n isDatumDef,\n isFieldDef,\n ScaleDatumDef,\n ScaleFieldDef,\n TypedFieldDef,\n valueExpr,\n vgField\n} from '../../channeldef';\nimport {DataSourceType} from '../../data';\nimport {DateTime} from '../../datetime';\nimport {ExprRef} from '../../expr';\nimport * as log from '../../log';\nimport {Domain, hasDiscreteDomain, isDomainUnionWith, isParameterDomain, ScaleConfig, ScaleType} from '../../scale';\nimport {ParameterExtent} from '../../selection';\nimport {DEFAULT_SORT_OP, EncodingSortField, isSortArray, isSortByEncoding, isSortField} from '../../sort';\nimport {normalizeTimeUnit, TimeUnit, TimeUnitParams} from '../../timeunit';\nimport {Type} from '../../type';\nimport * as util from '../../util';\nimport {\n isDataRefDomain,\n isDataRefUnionedDomain,\n isFieldRefUnionDomain,\n isSignalRef,\n VgDomain,\n VgMultiFieldsRefWithSort,\n VgNonUnionDomain,\n VgScaleDataRefWithSort,\n VgSortField,\n VgUnionSortField\n} from '../../vega.schema';\nimport {getBinSignalName} from '../data/bin';\nimport {sortArrayIndexField} from '../data/calculate';\nimport {FACET_SCALE_PREFIX} from '../data/optimize';\nimport {isFacetModel, isUnitModel, Model} from '../model';\nimport {SignalRefWrapper} from '../signal';\nimport {Explicit, makeExplicit, makeImplicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponent, ScaleComponentIndex} from './component';\n\nexport function parseScaleDomain(model: Model) {\n if (isUnitModel(model)) {\n parseUnitScaleDomain(model);\n } else {\n parseNonUnitScaleDomain(model);\n }\n}\n\nfunction parseUnitScaleDomain(model: UnitModel) {\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n for (const channel of util.keys(localScaleComponents)) {\n const domains = parseDomainForChannel(model, channel);\n const localScaleCmpt = localScaleComponents[channel];\n localScaleCmpt.setWithExplicit('domains', domains);\n parseSelectionDomain(model, channel);\n\n if (model.component.data.isFaceted) {\n // get resolve from closest facet parent as this decides whether we need to refer to cloned subtree or not\n let facetParent: Model = model;\n while (!isFacetModel(facetParent) && facetParent.parent) {\n facetParent = facetParent.parent;\n }\n\n const resolve = facetParent.component.resolve.scale[channel];\n\n if (resolve === 'shared') {\n for (const domain of domains.value) {\n // Replace the scale domain with data output from a cloned subtree after the facet.\n if (isDataRefDomain(domain)) {\n // use data from cloned subtree (which is the same as data but with a prefix added once)\n domain.data = FACET_SCALE_PREFIX + domain.data.replace(FACET_SCALE_PREFIX, '');\n }\n }\n }\n }\n }\n}\n\nfunction parseNonUnitScaleDomain(model: Model) {\n for (const child of model.children) {\n parseScaleDomain(child);\n }\n\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n for (const channel of util.keys(localScaleComponents)) {\n let domains: Explicit;\n let selectionExtent: ParameterExtent = null;\n\n for (const child of model.children) {\n const childComponent = child.component.scales[channel];\n if (childComponent) {\n if (domains === undefined) {\n domains = childComponent.getWithExplicit('domains');\n } else {\n domains = mergeValuesWithExplicit(\n domains,\n childComponent.getWithExplicit('domains'),\n 'domains',\n 'scale',\n domainsTieBreaker\n );\n }\n\n const se = childComponent.get('selectionExtent');\n if (selectionExtent && se && selectionExtent.param !== se.param) {\n log.warn(log.message.NEEDS_SAME_SELECTION);\n }\n selectionExtent = se;\n }\n }\n\n localScaleComponents[channel].setWithExplicit('domains', domains);\n\n if (selectionExtent) {\n localScaleComponents[channel].set('selectionExtent', selectionExtent, true);\n }\n }\n}\n\n/**\n * Remove unaggregated domain if it is not applicable\n * Add unaggregated domain if domain is not specified and config.scale.useUnaggregatedDomain is true.\n */\nfunction normalizeUnaggregatedDomain(\n domain: Domain,\n fieldDef: TypedFieldDef,\n scaleType: ScaleType,\n scaleConfig: ScaleConfig\n) {\n if (domain === 'unaggregated') {\n const {valid, reason} = canUseUnaggregatedDomain(fieldDef, scaleType);\n if (!valid) {\n log.warn(reason);\n return undefined;\n }\n } else if (domain === undefined && scaleConfig.useUnaggregatedDomain) {\n // Apply config if domain is not specified.\n const {valid} = canUseUnaggregatedDomain(fieldDef, scaleType);\n if (valid) {\n return 'unaggregated';\n }\n }\n\n return domain;\n}\n\nexport function parseDomainForChannel(model: UnitModel, channel: ScaleChannel): Explicit {\n const scaleType = model.getScaleComponent(channel).get('type');\n const {encoding} = model;\n\n const domain = normalizeUnaggregatedDomain(\n model.scaleDomain(channel),\n model.typedFieldDef(channel),\n scaleType,\n model.config.scale\n );\n if (domain !== model.scaleDomain(channel)) {\n model.specifiedScales[channel] = {\n ...model.specifiedScales[channel],\n domain\n };\n }\n\n // If channel is either X or Y then union them with X2 & Y2 if they exist\n if (channel === 'x' && getFieldOrDatumDef(encoding.x2)) {\n if (getFieldOrDatumDef(encoding.x)) {\n return mergeValuesWithExplicit(\n parseSingleChannelDomain(scaleType, domain, model, 'x'),\n parseSingleChannelDomain(scaleType, domain, model, 'x2'),\n 'domain',\n 'scale',\n domainsTieBreaker\n );\n } else {\n return parseSingleChannelDomain(scaleType, domain, model, 'x2');\n }\n } else if (channel === 'y' && getFieldOrDatumDef(encoding.y2)) {\n if (getFieldOrDatumDef(encoding.y)) {\n return mergeValuesWithExplicit(\n parseSingleChannelDomain(scaleType, domain, model, 'y'),\n parseSingleChannelDomain(scaleType, domain, model, 'y2'),\n 'domain',\n 'scale',\n domainsTieBreaker\n );\n } else {\n return parseSingleChannelDomain(scaleType, domain, model, 'y2');\n }\n }\n return parseSingleChannelDomain(scaleType, domain, model, channel);\n}\n\nfunction mapDomainToDataSignal(\n domain: (number | string | boolean | DateTime | ExprRef | SignalRef | number[])[],\n type: Type,\n timeUnit: TimeUnit\n) {\n return domain.map(v => {\n const data = valueExpr(v, {timeUnit, type});\n return {signal: `{data: ${data}}`};\n });\n}\n\nfunction convertDomainIfItIsDateTime(\n domain: (number | string | boolean | DateTime | ExprRef | SignalRef | number[])[],\n type: Type,\n timeUnit: TimeUnit | TimeUnitParams\n): [number[]] | [string[]] | [boolean[]] | SignalRef[] {\n // explicit value\n const normalizedTimeUnit = normalizeTimeUnit(timeUnit)?.unit;\n if (type === 'temporal' || normalizedTimeUnit) {\n return mapDomainToDataSignal(domain, type, normalizedTimeUnit);\n }\n\n return [domain] as [number[]] | [string[]] | [boolean[]]; // Date time won't make sense\n}\n\nfunction parseSingleChannelDomain(\n scaleType: ScaleType,\n domain: Domain,\n model: UnitModel,\n channel: ScaleChannel | 'x2' | 'y2'\n): Explicit {\n const {encoding} = model;\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as ScaleDatumDef | ScaleFieldDef;\n\n const {type} = fieldOrDatumDef;\n const timeUnit = fieldOrDatumDef['timeUnit'];\n\n if (isDomainUnionWith(domain)) {\n const defaultDomain = parseSingleChannelDomain(scaleType, undefined, model, channel);\n\n const unionWith = convertDomainIfItIsDateTime(domain.unionWith, type, timeUnit);\n\n return makeExplicit([...defaultDomain.value, ...unionWith]);\n } else if (isSignalRef(domain)) {\n return makeExplicit([domain]);\n } else if (domain && domain !== 'unaggregated' && !isParameterDomain(domain)) {\n return makeExplicit(convertDomainIfItIsDateTime(domain, type, timeUnit));\n }\n\n const stack = model.stack;\n if (stack && channel === stack.fieldChannel) {\n if (stack.offset === 'normalize') {\n return makeImplicit([[0, 1]]);\n }\n\n const data = model.requestDataName(DataSourceType.Main);\n return makeImplicit([\n {\n data,\n field: model.vgField(channel, {suffix: 'start'})\n },\n {\n data,\n field: model.vgField(channel, {suffix: 'end'})\n }\n ]);\n }\n\n const sort: undefined | true | VgSortField =\n isScaleChannel(channel) && isFieldDef(fieldOrDatumDef) ? domainSort(model, channel, scaleType) : undefined;\n\n if (isDatumDef(fieldOrDatumDef)) {\n const d = convertDomainIfItIsDateTime([fieldOrDatumDef.datum], type, timeUnit);\n return makeImplicit(d);\n }\n\n const fieldDef = fieldOrDatumDef; // now we can be sure it's a fieldDef\n if (domain === 'unaggregated') {\n const data = model.requestDataName(DataSourceType.Main);\n const {field} = fieldOrDatumDef;\n return makeImplicit([\n {\n data,\n field: vgField({field, aggregate: 'min'})\n },\n {\n data,\n field: vgField({field, aggregate: 'max'})\n }\n ]);\n } else if (isBinning(fieldDef.bin)) {\n if (hasDiscreteDomain(scaleType)) {\n if (scaleType === 'bin-ordinal') {\n // we can omit the domain as it is inferred from the `bins` property\n return makeImplicit([]);\n }\n\n // ordinal bin scale takes domain from bin_range, ordered by bin start\n // This is useful for both axis-based scale (x/y) and legend-based scale (other channels).\n return makeImplicit([\n {\n // If sort by aggregation of a specified sort field, we need to use RAW table,\n // so we can aggregate values for the scale independently from the main aggregation.\n data: util.isBoolean(sort)\n ? model.requestDataName(DataSourceType.Main)\n : model.requestDataName(DataSourceType.Raw),\n // Use range if we added it and the scale does not support computing a range as a signal.\n field: model.vgField(channel, binRequiresRange(fieldDef, channel) ? {binSuffix: 'range'} : {}),\n // we have to use a sort object if sort = true to make the sort correct by bin start\n sort:\n sort === true || !isObject(sort)\n ? {\n field: model.vgField(channel, {}),\n op: 'min' // min or max doesn't matter since we sort by the start of the bin range\n }\n : sort\n }\n ]);\n } else {\n // continuous scales\n const {bin} = fieldDef;\n if (isBinning(bin)) {\n const binSignal = getBinSignalName(model, fieldDef.field, bin);\n return makeImplicit([\n new SignalRefWrapper(() => {\n const signal = model.getSignalName(binSignal);\n return `[${signal}.start, ${signal}.stop]`;\n })\n ]);\n } else {\n return makeImplicit([\n {\n data: model.requestDataName(DataSourceType.Main),\n field: model.vgField(channel, {})\n }\n ]);\n }\n }\n } else if (\n fieldDef.timeUnit &&\n util.contains(['time', 'utc'], scaleType) &&\n hasBandEnd(\n fieldDef,\n isUnitModel(model) ? model.encoding[getSecondaryRangeChannel(channel)] : undefined,\n model.markDef,\n model.config\n )\n ) {\n const data = model.requestDataName(DataSourceType.Main);\n return makeImplicit([\n {\n data,\n field: model.vgField(channel)\n },\n {\n data,\n field: model.vgField(channel, {suffix: 'end'})\n }\n ]);\n } else if (sort) {\n return makeImplicit([\n {\n // If sort by aggregation of a specified sort field, we need to use RAW table,\n // so we can aggregate values for the scale independently from the main aggregation.\n data: util.isBoolean(sort)\n ? model.requestDataName(DataSourceType.Main)\n : model.requestDataName(DataSourceType.Raw),\n field: model.vgField(channel),\n sort: sort\n }\n ]);\n } else {\n return makeImplicit([\n {\n data: model.requestDataName(DataSourceType.Main),\n field: model.vgField(channel)\n }\n ]);\n }\n}\n\nfunction normalizeSortField(sort: EncodingSortField, isStackedMeasure: boolean): VgSortField {\n const {op, field, order} = sort;\n return {\n // Apply default op\n op: op ?? (isStackedMeasure ? 'sum' : DEFAULT_SORT_OP),\n // flatten nested fields\n ...(field ? {field: util.replacePathInField(field)} : {}),\n\n ...(order ? {order} : {})\n };\n}\n\nfunction parseSelectionDomain(model: UnitModel, channel: ScaleChannel) {\n const scale = model.component.scales[channel];\n const spec = model.specifiedScales[channel].domain;\n const bin = model.fieldDef(channel)?.bin;\n const domain = isParameterDomain(spec) && spec;\n const extent = isBinParams(bin) && isParameterExtent(bin.extent) && bin.extent;\n\n if (domain || extent) {\n // As scale parsing occurs before selection parsing, we cannot set\n // domainRaw directly. So instead, we store the selectionExtent on\n // the scale component, and then add domainRaw during scale assembly.\n scale.set('selectionExtent', domain ?? extent, true);\n }\n}\n\nexport function domainSort(\n model: UnitModel,\n channel: ScaleChannel,\n scaleType: ScaleType\n): undefined | true | VgSortField {\n if (!hasDiscreteDomain(scaleType)) {\n return undefined;\n }\n\n // save to cast as the only exception is the geojson type for shape, which would not generate a scale\n const fieldDef = model.fieldDef(channel) as ScaleFieldDef;\n const sort = fieldDef.sort;\n\n // if the sort is specified with array, use the derived sort index field\n if (isSortArray(sort)) {\n return {\n op: 'min',\n field: sortArrayIndexField(fieldDef, channel),\n order: 'ascending'\n };\n }\n\n const {stack} = model;\n const stackDimensions = stack\n ? [...(stack.groupbyField ? [stack.groupbyField] : []), ...stack.stackBy.map(s => s.fieldDef.field)]\n : undefined;\n\n // Sorted based on an aggregate calculation over a specified sort field (only for ordinal scale)\n if (isSortField(sort)) {\n const isStackedMeasure = stack && !util.contains(stackDimensions, sort.field);\n return normalizeSortField(sort, isStackedMeasure);\n } else if (isSortByEncoding(sort)) {\n const {encoding, order} = sort;\n const fieldDefToSortBy = model.fieldDef(encoding);\n const {aggregate, field} = fieldDefToSortBy;\n\n const isStackedMeasure = stack && !util.contains(stackDimensions, field);\n\n if (isArgminDef(aggregate) || isArgmaxDef(aggregate)) {\n return normalizeSortField(\n {\n field: vgField(fieldDefToSortBy),\n order\n },\n isStackedMeasure\n );\n } else if (isAggregateOp(aggregate) || !aggregate) {\n return normalizeSortField(\n {\n op: aggregate as NonArgAggregateOp, // can't be argmin/argmax since we don't support them in encoding field def\n field,\n order\n },\n isStackedMeasure\n );\n }\n } else if (sort === 'descending') {\n return {\n op: 'min',\n field: model.vgField(channel),\n order: 'descending'\n };\n } else if (util.contains(['ascending', undefined /* default =ascending*/], sort)) {\n return true;\n }\n\n // sort == null\n return undefined;\n}\n\n/**\n * Determine if a scale can use unaggregated domain.\n * @return {Boolean} Returns true if all of the following conditions apply:\n * 1. `scale.domain` is `unaggregated`\n * 2. Aggregation function is not `count` or `sum`\n * 3. The scale is quantitative or time scale.\n */\nexport function canUseUnaggregatedDomain(\n fieldDef: TypedFieldDef,\n scaleType: ScaleType\n): {valid: boolean; reason?: string} {\n const {aggregate, type} = fieldDef;\n\n if (!aggregate) {\n return {\n valid: false,\n reason: log.message.unaggregateDomainHasNoEffectForRawField(fieldDef)\n };\n }\n\n if (isString(aggregate) && !SHARED_DOMAIN_OP_INDEX[aggregate]) {\n return {\n valid: false,\n reason: log.message.unaggregateDomainWithNonSharedDomainOp(aggregate)\n };\n }\n\n if (type === 'quantitative') {\n if (scaleType === 'log') {\n return {\n valid: false,\n reason: log.message.unaggregatedDomainWithLogScale(fieldDef)\n };\n }\n }\n\n return {valid: true};\n}\n\n/**\n * Tie breaker for mergeValuesWithExplicit for domains. We concat the specified values.\n */\nfunction domainsTieBreaker(\n v1: Explicit,\n v2: Explicit,\n property: 'domains',\n propertyOf: 'scale'\n) {\n if (v1.explicit && v2.explicit) {\n log.warn(log.message.mergeConflictingDomainProperty(property, propertyOf, v1.value, v2.value));\n }\n // If equal score, concat the domains so that we union them later.\n return {explicit: v1.explicit, value: [...v1.value, ...v2.value]};\n}\n\n/**\n * Converts an array of domains to a single Vega scale domain.\n */\nexport function mergeDomains(domains: VgNonUnionDomain[]): VgDomain {\n const uniqueDomains = util.unique(\n domains.map(domain => {\n // ignore sort property when computing the unique domains\n if (isDataRefDomain(domain)) {\n const {sort: _s, ...domainWithoutSort} = domain;\n return domainWithoutSort;\n }\n return domain;\n }),\n util.hash\n );\n\n const sorts: VgSortField[] = util.unique(\n domains\n .map(d => {\n if (isDataRefDomain(d)) {\n const s = d.sort;\n if (s !== undefined && !util.isBoolean(s)) {\n if ('op' in s && s.op === 'count') {\n // let's make sure that if op is count, we don't use a field\n delete s.field;\n }\n if (s.order === 'ascending') {\n // drop order: ascending as it is the default\n delete s.order;\n }\n }\n return s;\n }\n return undefined;\n })\n .filter(s => s !== undefined),\n util.hash\n );\n\n if (uniqueDomains.length === 0) {\n return undefined;\n } else if (uniqueDomains.length === 1) {\n const domain = domains[0];\n if (isDataRefDomain(domain) && sorts.length > 0) {\n let sort = sorts[0];\n if (sorts.length > 1) {\n log.warn(log.message.MORE_THAN_ONE_SORT);\n sort = true;\n } else {\n // Simplify domain sort by removing field and op when the field is the same as the domain field.\n if (isObject(sort) && 'field' in sort) {\n const sortField = sort.field;\n if (domain.field === sortField) {\n sort = sort.order ? {order: sort.order} : true;\n }\n }\n }\n return {\n ...domain,\n sort\n };\n }\n return domain;\n }\n\n // only keep sort properties that work with unioned domains\n const unionDomainSorts = util.unique(\n sorts.map(s => {\n if (util.isBoolean(s) || !('op' in s) || (isString(s.op) && s.op in UNIONDOMAIN_SORT_OP_INDEX)) {\n return s as VgUnionSortField;\n }\n log.warn(log.message.domainSortDropped(s));\n return true;\n }),\n util.hash\n ) as VgUnionSortField[];\n\n let sort: VgUnionSortField;\n\n if (unionDomainSorts.length === 1) {\n sort = unionDomainSorts[0];\n } else if (unionDomainSorts.length > 1) {\n log.warn(log.message.MORE_THAN_ONE_SORT);\n sort = true;\n }\n\n const allData = util.unique(\n domains.map(d => {\n if (isDataRefDomain(d)) {\n return d.data;\n }\n return null;\n }),\n x => x\n );\n\n if (allData.length === 1 && allData[0] !== null) {\n // create a union domain of different fields with a single data source\n const domain: VgMultiFieldsRefWithSort = {\n data: allData[0],\n fields: uniqueDomains.map(d => (d as VgScaleDataRefWithSort).field),\n ...(sort ? {sort} : {})\n };\n\n return domain;\n }\n\n return {fields: uniqueDomains, ...(sort ? {sort} : {})};\n}\n\n/**\n * Return a field if a scale uses a single field.\n * Return `undefined` otherwise.\n */\nexport function getFieldFromDomain(domain: VgDomain): string {\n if (isDataRefDomain(domain) && isString(domain.field)) {\n return domain.field;\n } else if (isDataRefUnionedDomain(domain)) {\n let field;\n for (const nonUnionDomain of domain.fields) {\n if (isDataRefDomain(nonUnionDomain) && isString(nonUnionDomain.field)) {\n if (!field) {\n field = nonUnionDomain.field;\n } else if (field !== nonUnionDomain.field) {\n log.warn(log.message.FACETED_INDEPENDENT_DIFFERENT_SOURCES);\n return field;\n }\n }\n }\n log.warn(log.message.FACETED_INDEPENDENT_SAME_FIELDS_DIFFERENT_SOURCES);\n return field;\n } else if (isFieldRefUnionDomain(domain)) {\n log.warn(log.message.FACETED_INDEPENDENT_SAME_SOURCE);\n const field = domain.fields[0];\n return isString(field) ? field : undefined;\n }\n\n return undefined;\n}\n\nexport function assembleDomain(model: Model, channel: ScaleChannel) {\n const scaleComponent: ScaleComponent = model.component.scales[channel];\n\n const domains = scaleComponent.get('domains').map((domain: VgNonUnionDomain) => {\n // Correct references to data as the original domain's data was determined\n // in parseScale, which happens before parseData. Thus the original data\n // reference can be incorrect.\n if (isDataRefDomain(domain)) {\n domain.data = model.lookupDataSource(domain.data);\n }\n\n return domain;\n });\n\n // domains is an array that has to be merged into a single vega domain\n return mergeDomains(domains);\n}\n","import {isObject} from 'vega-util';\nimport {isXorY, ScaleChannel} from '../../channel';\nimport {keys} from '../../util';\nimport {isDataRefDomain, isVgRangeStep, VgRange, VgScale} from '../../vega.schema';\nimport {isConcatModel, isLayerModel, Model} from '../model';\nimport {assembleSelectionScaleDomain} from '../selection/assemble';\nimport {assembleDomain} from './domain';\n\nexport function assembleScales(model: Model): VgScale[] {\n if (isLayerModel(model) || isConcatModel(model)) {\n // For concat and layer, include scales of children too\n return model.children.reduce((scales, child) => {\n return scales.concat(assembleScales(child));\n }, assembleScalesForModel(model));\n } else {\n // For facet, child scales would not be included in the parent's scope.\n // For unit, there is no child.\n return assembleScalesForModel(model);\n }\n}\n\nexport function assembleScalesForModel(model: Model): VgScale[] {\n return keys(model.component.scales).reduce((scales: VgScale[], channel: ScaleChannel) => {\n const scaleComponent = model.component.scales[channel];\n if (scaleComponent.merged) {\n // Skipped merged scales\n return scales;\n }\n\n const scale = scaleComponent.combine();\n const {name, type, selectionExtent, domains: _d, range: _r, reverse, ...otherScaleProps} = scale;\n const range = assembleScaleRange(scale.range, name, channel, model);\n\n const domain = assembleDomain(model, channel);\n const domainRaw = selectionExtent\n ? assembleSelectionScaleDomain(model, selectionExtent, scaleComponent, domain)\n : null;\n\n scales.push({\n name,\n type,\n ...(domain ? {domain} : {}),\n ...(domainRaw ? {domainRaw} : {}),\n range,\n ...(reverse !== undefined ? {reverse: reverse as any} : {}),\n ...otherScaleProps\n });\n\n return scales;\n }, [] as VgScale[]);\n}\n\nexport function assembleScaleRange(\n scaleRange: VgRange,\n scaleName: string,\n channel: ScaleChannel,\n model?: Model\n): VgRange {\n // add signals to x/y range\n if (isXorY(channel)) {\n if (isVgRangeStep(scaleRange)) {\n // For width/height step, use a signal created in layout assemble instead of a constant step.\n return {\n step: {signal: `${scaleName}_step`}\n };\n }\n } else if (isObject(scaleRange) && isDataRefDomain(scaleRange)) {\n return {\n ...scaleRange,\n data: model.lookupDataSource(scaleRange.data)\n };\n }\n return scaleRange;\n}\n","import {SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {ScaleChannel} from '../../channel';\nimport {Scale, ScaleType} from '../../scale';\nimport {ParameterExtent} from '../../selection';\nimport {some} from '../../util';\nimport {VgNonUnionDomain, VgScale} from '../../vega.schema';\nimport {Explicit, Split} from '../split';\n\n/**\n * All VgDomain property except domain.\n * (We exclude domain as we have a special \"domains\" array that allow us merge them all at once in assemble.)\n */\nexport type ScaleComponentProps = Omit & {\n domains: VgNonUnionDomain[];\n selectionExtent?: ParameterExtent;\n reverse?: boolean | SignalRef; // Need override since Vega doesn't official support scale reverse yet (though it does in practice)\n};\n\nexport type Range = ScaleComponentProps['range'];\n\nexport class ScaleComponent extends Split {\n public merged = false;\n\n constructor(name: string, typeWithExplicit: Explicit) {\n super(\n {}, // no initial explicit property\n {name} // name as initial implicit property\n );\n this.setWithExplicit('type', typeWithExplicit);\n }\n\n /**\n * Whether the scale definitely includes zero in the domain\n */\n public domainDefinitelyIncludesZero() {\n if (this.get('zero') !== false) {\n return true;\n }\n return some(this.get('domains'), d => isArray(d) && d.length === 2 && d[0] <= 0 && d[1] >= 0);\n }\n}\n\nexport type ScaleComponentIndex = Partial>;\n\nexport type ScaleIndex = Partial>>;\n","import {RangeScheme, SignalRef} from 'vega';\nimport {isArray, isNumber, isObject} from 'vega-util';\nimport {isBinning} from '../../bin';\nimport {\n ANGLE,\n COLOR,\n FILL,\n FILLOPACITY,\n isXorY,\n OPACITY,\n RADIUS,\n ScaleChannel,\n SCALE_CHANNELS,\n SHAPE,\n SIZE,\n STROKE,\n STROKEDASH,\n STROKEOPACITY,\n STROKEWIDTH,\n THETA,\n X,\n Y\n} from '../../channel';\nimport {getFieldOrDatumDef, ScaleDatumDef, ScaleFieldDef} from '../../channeldef';\nimport {Config, getViewConfigDiscreteSize, getViewConfigDiscreteStep, ViewConfig} from '../../config';\nimport {DataSourceType} from '../../data';\nimport * as log from '../../log';\nimport {Mark} from '../../mark';\nimport {\n channelScalePropertyIncompatability,\n Domain,\n hasContinuousDomain,\n hasDiscreteDomain,\n isContinuousToDiscrete,\n isExtendedScheme,\n Scale,\n scaleTypeSupportProperty,\n Scheme\n} from '../../scale';\nimport {isStep, LayoutSizeMixins} from '../../spec/base';\nimport * as util from '../../util';\nimport {isSignalRef, VgRange} from '../../vega.schema';\nimport {signalOrStringValue} from '../common';\nimport {getBinSignalName} from '../data/bin';\nimport {SignalRefWrapper} from '../signal';\nimport {Explicit, makeExplicit, makeImplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponentIndex} from './component';\n\nexport const RANGE_PROPERTIES: (keyof Scale)[] = ['range', 'scheme'];\n\nfunction getSizeChannel(channel: ScaleChannel) {\n return channel === 'x' ? 'width' : channel === 'y' ? 'height' : undefined;\n}\n\nexport function parseUnitScaleRange(model: UnitModel) {\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n // use SCALE_CHANNELS instead of scales[channel] to ensure that x, y come first!\n for (const channel of SCALE_CHANNELS) {\n const localScaleCmpt = localScaleComponents[channel];\n if (!localScaleCmpt) {\n continue;\n }\n\n const rangeWithExplicit = parseRangeForChannel(channel, model);\n\n localScaleCmpt.setWithExplicit('range', rangeWithExplicit);\n }\n}\n\nfunction getBinStepSignal(model: UnitModel, channel: 'x' | 'y'): SignalRefWrapper {\n const fieldDef = model.fieldDef(channel);\n\n if (fieldDef?.bin) {\n const {bin, field} = fieldDef;\n const sizeType = getSizeChannel(channel);\n const sizeSignal = model.getName(sizeType);\n\n if (isObject(bin) && bin.binned && bin.step !== undefined) {\n return new SignalRefWrapper(() => {\n const scaleName = model.scaleName(channel);\n const binCount = `(domain(\"${scaleName}\")[1] - domain(\"${scaleName}\")[0]) / ${bin.step}`;\n return `${model.getSignalName(sizeSignal)} / (${binCount})`;\n });\n } else if (isBinning(bin)) {\n const binSignal = getBinSignalName(model, field, bin);\n\n // TODO: extract this to be range step signal\n return new SignalRefWrapper(() => {\n const updatedName = model.getSignalName(binSignal);\n const binCount = `(${updatedName}.stop - ${updatedName}.start) / ${updatedName}.step`;\n return `${model.getSignalName(sizeSignal)} / (${binCount})`;\n });\n }\n }\n return undefined;\n}\n\n/**\n * Return mixins that includes one of the Vega range types (explicit range, range.step, range.scheme).\n */\nexport function parseRangeForChannel(channel: ScaleChannel, model: UnitModel): Explicit {\n const specifiedScale = model.specifiedScales[channel];\n const {size} = model;\n\n const mergedScaleCmpt = model.getScaleComponent(channel);\n const scaleType = mergedScaleCmpt.get('type');\n\n // Check if any of the range properties is specified.\n // If so, check if it is compatible and make sure that we only output one of the properties\n for (const property of RANGE_PROPERTIES) {\n if (specifiedScale[property] !== undefined) {\n const supportedByScaleType = scaleTypeSupportProperty(scaleType, property);\n const channelIncompatability = channelScalePropertyIncompatability(channel, property);\n if (!supportedByScaleType) {\n log.warn(log.message.scalePropertyNotWorkWithScaleType(scaleType, property, channel));\n } else if (channelIncompatability) {\n // channel\n log.warn(channelIncompatability);\n } else {\n switch (property) {\n case 'range': {\n const range = specifiedScale.range;\n if (isArray(range)) {\n if (isXorY(channel)) {\n return makeExplicit(\n range.map(v => {\n if (v === 'width' || v === 'height') {\n // get signal for width/height\n\n // Just like default range logic below, we use SignalRefWrapper to account for potential merges and renames.\n\n const sizeSignal = model.getName(v);\n const getSignalName = model.getSignalName.bind(model);\n return SignalRefWrapper.fromName(getSignalName, sizeSignal);\n }\n return v;\n })\n );\n }\n } else if (isObject(range)) {\n return makeExplicit({\n data: model.requestDataName(DataSourceType.Main),\n field: range.field,\n sort: {op: 'min', field: model.vgField(channel)}\n });\n }\n\n return makeExplicit(range);\n }\n case 'scheme':\n return makeExplicit(parseScheme(specifiedScale[property]));\n }\n }\n }\n }\n\n if (channel === X || channel === Y) {\n const sizeChannel = channel === X ? 'width' : 'height';\n const sizeValue = size[sizeChannel];\n if (isStep(sizeValue)) {\n if (hasDiscreteDomain(scaleType)) {\n return makeExplicit({step: sizeValue.step});\n } else {\n log.warn(log.message.stepDropped(sizeChannel));\n }\n }\n }\n\n const {rangeMin, rangeMax} = specifiedScale;\n const d = defaultRange(channel, model);\n\n if (\n (rangeMin !== undefined || rangeMax !== undefined) &&\n // it's ok to check just rangeMin's compatibility since rangeMin/rangeMax are the same\n scaleTypeSupportProperty(scaleType, 'rangeMin') &&\n isArray(d) &&\n d.length === 2\n ) {\n return makeExplicit([rangeMin ?? d[0], rangeMax ?? d[1]]);\n }\n\n return makeImplicit(d);\n}\n\nfunction parseScheme(scheme: Scheme | SignalRef): RangeScheme {\n if (isExtendedScheme(scheme)) {\n return {\n scheme: scheme.name,\n ...util.omit(scheme, ['name'])\n };\n }\n return {scheme: scheme};\n}\n\nfunction defaultRange(channel: ScaleChannel, model: UnitModel): VgRange {\n const {size, config, mark, encoding} = model;\n\n const getSignalName = model.getSignalName.bind(model);\n\n const {type} = getFieldOrDatumDef(encoding[channel]) as ScaleFieldDef | ScaleDatumDef;\n\n const mergedScaleCmpt = model.getScaleComponent(channel);\n const scaleType = mergedScaleCmpt.get('type');\n\n const {domain, domainMid} = model.specifiedScales[channel];\n\n switch (channel) {\n case X:\n case Y: {\n // If there is no explicit width/height for discrete x/y scales\n if (util.contains(['point', 'band'], scaleType)) {\n if (channel === X && !size.width) {\n const w = getViewConfigDiscreteSize(config.view, 'width');\n if (isStep(w)) {\n return w;\n }\n } else if (channel === Y && !size.height) {\n const h = getViewConfigDiscreteSize(config.view, 'height');\n if (isStep(h)) {\n return h;\n }\n }\n }\n\n // If step is null, use zero to width or height.\n // Note that we use SignalRefWrapper to account for potential merges and renames.\n\n const sizeType = getSizeChannel(channel);\n const sizeSignal = model.getName(sizeType);\n\n if (channel === Y && hasContinuousDomain(scaleType)) {\n // For y continuous scale, we have to start from the height as the bottom part has the max value.\n return [SignalRefWrapper.fromName(getSignalName, sizeSignal), 0];\n } else {\n return [0, SignalRefWrapper.fromName(getSignalName, sizeSignal)];\n }\n }\n\n case SIZE: {\n // TODO: support custom rangeMin, rangeMax\n const zero = model.component.scales[channel].get('zero');\n const rangeMin = sizeRangeMin(mark, zero, config);\n const rangeMax = sizeRangeMax(mark, size, model, config);\n if (isContinuousToDiscrete(scaleType)) {\n return interpolateRange(\n rangeMin,\n rangeMax,\n defaultContinuousToDiscreteCount(scaleType, config, domain, channel)\n );\n } else {\n return [rangeMin, rangeMax];\n }\n }\n\n case THETA:\n return [0, Math.PI * 2];\n\n case ANGLE:\n // TODO: add config.scale.min/maxAngleDegree (for point and text) and config.scale.min/maxAngleRadian (for arc) once we add arc marks.\n // (It's weird to add just config.scale.min/maxAngleDegree for now)\n return [0, 360];\n\n case RADIUS: {\n // max radius = half od min(width,height)\n return [\n 0,\n new SignalRefWrapper(() => {\n const w = model.getSignalName('width');\n const h = model.getSignalName('height');\n return `min(${w},${h})/2`;\n })\n ];\n }\n\n case STROKEWIDTH:\n // TODO: support custom rangeMin, rangeMax\n return [config.scale.minStrokeWidth, config.scale.maxStrokeWidth];\n case STROKEDASH:\n return [\n // TODO: add this to Vega's config.range?\n [1, 0],\n [4, 2],\n [2, 1],\n [1, 1],\n [1, 2, 4, 2]\n ];\n case SHAPE:\n return 'symbol';\n case COLOR:\n case FILL:\n case STROKE:\n if (scaleType === 'ordinal') {\n // Only nominal data uses ordinal scale by default\n return type === 'nominal' ? 'category' : 'ordinal';\n } else {\n if (domainMid !== undefined) {\n return 'diverging';\n } else {\n return mark === 'rect' || mark === 'geoshape' ? 'heatmap' : 'ramp';\n }\n }\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n // TODO: support custom rangeMin, rangeMax\n return [config.scale.minOpacity, config.scale.maxOpacity];\n }\n /* istanbul ignore next: should never reach here */\n throw new Error(`Scale range undefined for channel ${channel}`);\n}\n\nexport function defaultContinuousToDiscreteCount(\n scaleType: 'quantile' | 'quantize' | 'threshold',\n config: Config,\n domain: Domain,\n channel: ScaleChannel\n) {\n switch (scaleType) {\n case 'quantile':\n return config.scale.quantileCount;\n case 'quantize':\n return config.scale.quantizeCount;\n case 'threshold':\n if (domain !== undefined && isArray(domain)) {\n return domain.length + 1;\n } else {\n log.warn(log.message.domainRequiredForThresholdScale(channel));\n // default threshold boundaries for threshold scale since domain has cardinality of 2\n return 3;\n }\n }\n}\n\n/**\n * Returns the linear interpolation of the range according to the cardinality\n *\n * @param rangeMin start of the range\n * @param rangeMax end of the range\n * @param cardinality number of values in the output range\n */\nexport function interpolateRange(\n rangeMin: number | SignalRef,\n rangeMax: number | SignalRef,\n cardinality: number\n): SignalRef {\n // always return a signal since it's better to compute the sequence in Vega later\n const f = () => {\n const rMax = signalOrStringValue(rangeMax);\n const rMin = signalOrStringValue(rangeMin);\n const step = `(${rMax} - ${rMin}) / (${cardinality} - 1)`;\n return `sequence(${rMin}, ${rMax} + ${step}, ${step})`;\n };\n if (isSignalRef(rangeMax)) {\n return new SignalRefWrapper(f);\n } else {\n return {signal: f()};\n }\n}\n\nfunction sizeRangeMin(mark: Mark, zero: boolean | SignalRef, config: Config): number | SignalRef {\n if (zero) {\n if (isSignalRef(zero)) {\n return {signal: `${zero.signal} ? 0 : ${sizeRangeMin(mark, false, config)}`};\n } else {\n return 0;\n }\n }\n switch (mark) {\n case 'bar':\n case 'tick':\n return config.scale.minBandSize;\n case 'line':\n case 'trail':\n case 'rule':\n return config.scale.minStrokeWidth;\n case 'text':\n return config.scale.minFontSize;\n case 'point':\n case 'square':\n case 'circle':\n return config.scale.minSize;\n }\n /* istanbul ignore next: should never reach here */\n // sizeRangeMin not implemented for the mark\n throw new Error(log.message.incompatibleChannel('size', mark));\n}\n\nexport const MAX_SIZE_RANGE_STEP_RATIO = 0.95;\n\nfunction sizeRangeMax(\n mark: Mark,\n size: LayoutSizeMixins,\n model: UnitModel,\n config: Config\n): number | SignalRef {\n const xyStepSignals = {\n x: getBinStepSignal(model, 'x'),\n y: getBinStepSignal(model, 'y')\n };\n\n switch (mark) {\n case 'bar':\n case 'tick': {\n if (config.scale.maxBandSize !== undefined) {\n return config.scale.maxBandSize;\n }\n const min = minXYStep(size, xyStepSignals, config.view);\n\n if (isNumber(min)) {\n return min - 1;\n } else {\n return new SignalRefWrapper(() => `${min.signal} - 1`);\n }\n }\n case 'line':\n case 'trail':\n case 'rule':\n return config.scale.maxStrokeWidth;\n case 'text':\n return config.scale.maxFontSize;\n case 'point':\n case 'square':\n case 'circle': {\n if (config.scale.maxSize) {\n return config.scale.maxSize;\n }\n\n const pointStep = minXYStep(size, xyStepSignals, config.view);\n if (isNumber(pointStep)) {\n return Math.pow(MAX_SIZE_RANGE_STEP_RATIO * pointStep, 2);\n } else {\n return new SignalRefWrapper(() => `pow(${MAX_SIZE_RANGE_STEP_RATIO} * ${pointStep.signal}, 2)`);\n }\n }\n }\n /* istanbul ignore next: should never reach here */\n // sizeRangeMax not implemented for the mark\n throw new Error(log.message.incompatibleChannel('size', mark));\n}\n\n/**\n * @returns {number} Range step of x or y or minimum between the two if both are ordinal scale.\n */\nfunction minXYStep(\n size: LayoutSizeMixins,\n xyStepSignals: {x?: SignalRefWrapper; y?: SignalRefWrapper},\n viewConfig: ViewConfig\n): number | SignalRef {\n const widthStep = isStep(size.width) ? size.width.step : getViewConfigDiscreteStep(viewConfig, 'width');\n const heightStep = isStep(size.height) ? size.height.step : getViewConfigDiscreteStep(viewConfig, 'height');\n\n if (xyStepSignals.x || xyStepSignals.y) {\n return new SignalRefWrapper(() => {\n const exprs = [\n xyStepSignals.x ? xyStepSignals.x.signal : widthStep,\n xyStepSignals.y ? xyStepSignals.y.signal : heightStep\n ];\n return `min(${exprs.join(', ')})`;\n });\n }\n\n return Math.min(widthStep, heightStep);\n}\n","import {SignalRef, TimeInterval} from 'vega';\nimport {isArray} from 'vega-util';\nimport {isBinned, isBinning, isBinParams} from '../../bin';\nimport {\n COLOR,\n FILL,\n POLAR_POSITION_SCALE_CHANNELS,\n POSITION_SCALE_CHANNELS,\n POSITION_SCALE_CHANNEL_INDEX,\n ScaleChannel,\n STROKE\n} from '../../channel';\nimport {\n getFieldDef,\n getFieldOrDatumDef,\n isFieldDef,\n ScaleDatumDef,\n ScaleFieldDef,\n TypedFieldDef,\n valueExpr\n} from '../../channeldef';\nimport {Config} from '../../config';\nimport {isDateTime} from '../../datetime';\nimport * as log from '../../log';\nimport {Mark, MarkDef, RectConfig} from '../../mark';\nimport {\n channelScalePropertyIncompatability,\n Domain,\n hasContinuousDomain,\n isContinuousToContinuous,\n isContinuousToDiscrete,\n Scale,\n ScaleConfig,\n ScaleType,\n scaleTypeSupportProperty\n} from '../../scale';\nimport {Sort} from '../../sort';\nimport {Type} from '../../type';\nimport * as util from '../../util';\nimport {contains, getFirstDefined, keys} from '../../util';\nimport {isSignalRef, VgScale} from '../../vega.schema';\nimport {getBinSignalName} from '../data/bin';\nimport {isUnitModel, Model} from '../model';\nimport {SignalRefWrapper} from '../signal';\nimport {Explicit, mergeValuesWithExplicit, tieBreakByComparing} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponentIndex, ScaleComponentProps} from './component';\nimport {parseUnitScaleRange} from './range';\n\nexport function parseScaleProperty(model: Model, property: Exclude) {\n if (isUnitModel(model)) {\n parseUnitScaleProperty(model, property);\n } else {\n parseNonUnitScaleProperty(model, property);\n }\n}\n\nfunction parseUnitScaleProperty(model: UnitModel, property: Exclude) {\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n const {config, encoding, markDef, specifiedScales} = model;\n\n for (const channel of keys(localScaleComponents)) {\n const specifiedScale = specifiedScales[channel];\n const localScaleCmpt = localScaleComponents[channel];\n const mergedScaleCmpt = model.getScaleComponent(channel);\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as ScaleFieldDef | ScaleDatumDef;\n\n const specifiedValue = specifiedScale[property];\n const scaleType = mergedScaleCmpt.get('type');\n const scalePadding = mergedScaleCmpt.get('padding');\n const scalePaddingInner = mergedScaleCmpt.get('paddingInner');\n\n const supportedByScaleType = scaleTypeSupportProperty(scaleType, property);\n const channelIncompatability = channelScalePropertyIncompatability(channel, property);\n\n if (specifiedValue !== undefined) {\n // If there is a specified value, check if it is compatible with scale type and channel\n if (!supportedByScaleType) {\n log.warn(log.message.scalePropertyNotWorkWithScaleType(scaleType, property, channel));\n } else if (channelIncompatability) {\n // channel\n log.warn(channelIncompatability);\n }\n }\n if (supportedByScaleType && channelIncompatability === undefined) {\n if (specifiedValue !== undefined) {\n const timeUnit = fieldOrDatumDef['timeUnit'];\n const type = fieldOrDatumDef.type;\n\n switch (property) {\n // domainMax/Min to signal if the value is a datetime object\n case 'domainMax':\n case 'domainMin':\n if (isDateTime(specifiedScale[property]) || type === 'temporal' || timeUnit) {\n localScaleCmpt.set(property, {signal: valueExpr(specifiedScale[property], {type, timeUnit})}, true);\n } else {\n localScaleCmpt.set(property, specifiedScale[property] as any, true);\n }\n break;\n default:\n localScaleCmpt.copyKeyFromObject>(\n property,\n specifiedScale\n );\n }\n } else {\n const value =\n property in scaleRules\n ? scaleRules[property]({\n model,\n channel,\n fieldOrDatumDef,\n scaleType,\n scalePadding,\n scalePaddingInner,\n domain: specifiedScale.domain,\n markDef,\n config\n })\n : config.scale[property];\n if (value !== undefined) {\n localScaleCmpt.set(property, value, false);\n }\n }\n }\n }\n}\n\nexport interface ScaleRuleParams {\n model: Model;\n channel: ScaleChannel;\n fieldOrDatumDef: ScaleFieldDef | ScaleDatumDef;\n scaleType: ScaleType;\n scalePadding: number | SignalRef;\n scalePaddingInner: number | SignalRef;\n domain: Domain;\n markDef: MarkDef;\n config: Config;\n}\n\nexport const scaleRules: {\n [k in keyof Scale]?: (params: ScaleRuleParams) => Scale[k];\n} = {\n bins: ({model, fieldOrDatumDef}) => (isFieldDef(fieldOrDatumDef) ? bins(model, fieldOrDatumDef) : undefined),\n\n interpolate: ({channel, fieldOrDatumDef}) => interpolate(channel, fieldOrDatumDef.type),\n\n nice: ({scaleType, channel, domain, fieldOrDatumDef}) => nice(scaleType, channel, domain, fieldOrDatumDef),\n\n padding: ({channel, scaleType, fieldOrDatumDef, markDef, config}) =>\n padding(channel, scaleType, config.scale, fieldOrDatumDef, markDef, config.bar),\n\n paddingInner: ({scalePadding, channel, markDef, config}) =>\n paddingInner(scalePadding, channel, markDef.type, config.scale),\n\n paddingOuter: ({scalePadding, channel, scaleType, markDef, scalePaddingInner, config}) =>\n paddingOuter(scalePadding, channel, scaleType, markDef.type, scalePaddingInner, config.scale),\n\n reverse: ({fieldOrDatumDef, scaleType, channel, config}) => {\n const sort = isFieldDef(fieldOrDatumDef) ? fieldOrDatumDef.sort : undefined;\n return reverse(scaleType, sort, channel, config.scale);\n },\n zero: ({channel, fieldOrDatumDef, domain, markDef, scaleType}) =>\n zero(channel, fieldOrDatumDef, domain, markDef, scaleType)\n};\n\n// This method is here rather than in range.ts to avoid circular dependency.\nexport function parseScaleRange(model: Model) {\n if (isUnitModel(model)) {\n parseUnitScaleRange(model);\n } else {\n parseNonUnitScaleProperty(model, 'range');\n }\n}\n\nexport function parseNonUnitScaleProperty(model: Model, property: keyof (Scale | ScaleComponentProps)) {\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n for (const child of model.children) {\n if (property === 'range') {\n parseScaleRange(child);\n } else {\n parseScaleProperty(child, property);\n }\n }\n\n for (const channel of keys(localScaleComponents)) {\n let valueWithExplicit: Explicit;\n\n for (const child of model.children) {\n const childComponent = child.component.scales[channel];\n if (childComponent) {\n const childValueWithExplicit = childComponent.getWithExplicit(property);\n valueWithExplicit = mergeValuesWithExplicit(\n valueWithExplicit,\n childValueWithExplicit,\n property,\n 'scale',\n tieBreakByComparing((v1, v2) => {\n switch (property) {\n case 'range':\n // For step, prefer larger step\n if (v1.step && v2.step) {\n return v1.step - v2.step;\n }\n return 0;\n // TODO: precedence rule for other properties\n }\n return 0;\n })\n );\n }\n }\n localScaleComponents[channel].setWithExplicit(property, valueWithExplicit);\n }\n}\n\nexport function bins(model: Model, fieldDef: TypedFieldDef) {\n const bin = fieldDef.bin;\n if (isBinning(bin)) {\n const binSignal = getBinSignalName(model, fieldDef.field, bin);\n return new SignalRefWrapper(() => {\n return model.getSignalName(binSignal);\n });\n } else if (isBinned(bin) && isBinParams(bin) && bin.step !== undefined) {\n // start and stop will be determined from the scale domain\n return {\n step: bin.step\n };\n }\n return undefined;\n}\n\nexport function interpolate(channel: ScaleChannel, type: Type): Scale['interpolate'] {\n if (contains([COLOR, FILL, STROKE], channel) && type !== 'nominal') {\n return 'hcl';\n }\n return undefined;\n}\n\nexport function nice(\n scaleType: ScaleType,\n channel: ScaleChannel,\n specifiedDomain: Domain,\n fieldOrDatumDef: TypedFieldDef | ScaleDatumDef\n): boolean | TimeInterval {\n if (\n getFieldDef(fieldOrDatumDef)?.bin ||\n isArray(specifiedDomain) ||\n util.contains([ScaleType.TIME, ScaleType.UTC], scaleType)\n ) {\n return undefined;\n }\n return channel in POSITION_SCALE_CHANNEL_INDEX ? true : undefined;\n}\n\nexport function padding(\n channel: ScaleChannel,\n scaleType: ScaleType,\n scaleConfig: ScaleConfig,\n fieldOrDatumDef: TypedFieldDef | ScaleDatumDef,\n markDef: MarkDef,\n barConfig: RectConfig\n) {\n if (channel in POSITION_SCALE_CHANNEL_INDEX) {\n if (isContinuousToContinuous(scaleType)) {\n if (scaleConfig.continuousPadding !== undefined) {\n return scaleConfig.continuousPadding;\n }\n\n const {type, orient} = markDef;\n if (type === 'bar' && !(isFieldDef(fieldOrDatumDef) && (fieldOrDatumDef.bin || fieldOrDatumDef.timeUnit))) {\n if ((orient === 'vertical' && channel === 'x') || (orient === 'horizontal' && channel === 'y')) {\n return barConfig.continuousBandSize;\n }\n }\n }\n\n if (scaleType === ScaleType.POINT) {\n return scaleConfig.pointPadding;\n }\n }\n return undefined;\n}\n\nexport function paddingInner(\n paddingValue: number | SignalRef,\n channel: ScaleChannel,\n mark: Mark,\n scaleConfig: ScaleConfig\n) {\n if (paddingValue !== undefined) {\n // If user has already manually specified \"padding\", no need to add default paddingInner.\n return undefined;\n }\n\n if (channel in POSITION_SCALE_CHANNEL_INDEX) {\n // Padding is only set for X and Y by default.\n // Basically it doesn't make sense to add padding for color and size.\n\n // paddingOuter would only be called if it's a band scale, just return the default for bandScale.\n\n const {bandPaddingInner, barBandPaddingInner, rectBandPaddingInner} = scaleConfig;\n\n return getFirstDefined(bandPaddingInner, mark === 'bar' ? barBandPaddingInner : rectBandPaddingInner);\n }\n return undefined;\n}\n\nexport function paddingOuter(\n paddingValue: number | SignalRef,\n channel: ScaleChannel,\n scaleType: ScaleType,\n mark: Mark,\n paddingInnerValue: number | SignalRef,\n scaleConfig: ScaleConfig\n) {\n if (paddingValue !== undefined) {\n // If user has already manually specified \"padding\", no need to add default paddingOuter.\n return undefined;\n }\n\n if (channel in POSITION_SCALE_CHANNEL_INDEX) {\n // Padding is only set for X and Y by default.\n // Basically it doesn't make sense to add padding for color and size.\n if (scaleType === ScaleType.BAND) {\n const {bandPaddingOuter} = scaleConfig;\n\n return getFirstDefined(\n bandPaddingOuter,\n /* By default, paddingOuter is paddingInner / 2. The reason is that\n size (width/height) = step * (cardinality - paddingInner + 2 * paddingOuter).\n and we want the width/height to be integer by default.\n Note that step (by default) and cardinality are integers.) */\n isSignalRef(paddingInnerValue) ? {signal: `${paddingInnerValue.signal}/2`} : paddingInnerValue / 2\n );\n }\n }\n return undefined;\n}\n\nexport function reverse(\n scaleType: ScaleType,\n sort: Sort,\n channel: ScaleChannel,\n scaleConfig: ScaleConfig\n) {\n if (channel === 'x' && scaleConfig.xReverse !== undefined) {\n if (hasContinuousDomain(scaleType) && sort === 'descending') {\n if (isSignalRef(scaleConfig.xReverse)) {\n return {signal: `!${scaleConfig.xReverse.signal}`};\n } else {\n return !scaleConfig.xReverse;\n }\n }\n return scaleConfig.xReverse;\n }\n\n if (hasContinuousDomain(scaleType) && sort === 'descending') {\n // For continuous domain scales, Vega does not support domain sort.\n // Thus, we reverse range instead if sort is descending\n return true;\n }\n return undefined;\n}\n\nexport function zero(\n channel: ScaleChannel,\n fieldDef: TypedFieldDef | ScaleDatumDef,\n specifiedDomain: Domain,\n markDef: MarkDef,\n scaleType: ScaleType\n) {\n // If users explicitly provide a domain, we should not augment zero as that will be unexpected.\n const hasCustomDomain = !!specifiedDomain && specifiedDomain !== 'unaggregated';\n if (hasCustomDomain) {\n if (hasContinuousDomain(scaleType)) {\n if (isArray(specifiedDomain)) {\n const first = specifiedDomain[0];\n const last = specifiedDomain[specifiedDomain.length - 1];\n\n if (first <= 0 && last >= 0) {\n // if the domain includes zero, make zero remains true\n return true;\n }\n }\n return false;\n }\n }\n\n // If there is no custom domain, return true only for the following cases:\n\n // 1) using quantitative field with size\n // While this can be either ratio or interval fields, our assumption is that\n // ratio are more common. However, if the scaleType is discretizing scale, we want to return\n // false so that range doesn't start at zero\n if (channel === 'size' && fieldDef.type === 'quantitative' && !isContinuousToDiscrete(scaleType)) {\n return true;\n }\n\n // 2) non-binned, quantitative x-scale or y-scale\n // (For binning, we should not include zero by default because binning are calculated without zero.)\n if (\n !(isFieldDef(fieldDef) && fieldDef.bin) &&\n util.contains([...POSITION_SCALE_CHANNELS, ...POLAR_POSITION_SCALE_CHANNELS], channel)\n ) {\n const {orient, type} = markDef;\n if (contains(['bar', 'area', 'line', 'trail'], type)) {\n if ((orient === 'horizontal' && channel === 'y') || (orient === 'vertical' && channel === 'x')) {\n return false;\n }\n }\n\n return true;\n }\n return false;\n}\n","import {isBinning} from '../../bin';\nimport {Channel, getSizeChannel, isColorChannel, isScaleChannel, rangeType} from '../../channel';\nimport {DatumDef, isFieldDef, isPositionFieldOrDatumDef, ScaleDatumDef, TypedFieldDef} from '../../channeldef';\nimport * as log from '../../log';\nimport {isRelativeBandSize, MarkDef} from '../../mark';\nimport {channelSupportScaleType, Scale, ScaleType, scaleTypeSupportDataType} from '../../scale';\nimport {normalizeTimeUnit} from '../../timeunit';\nimport * as util from '../../util';\nimport {POLAR_POSITION_SCALE_CHANNEL_INDEX, POSITION_SCALE_CHANNEL_INDEX} from './../../channel';\n\nexport type RangeType = 'continuous' | 'discrete' | 'flexible' | undefined;\n\n/**\n * Determine if there is a specified scale type and if it is appropriate,\n * or determine default type if type is unspecified or inappropriate.\n */\n// NOTE: CompassQL uses this method.\nexport function scaleType(\n specifiedScale: Scale,\n channel: Channel,\n fieldDef: TypedFieldDef | DatumDef,\n mark: MarkDef\n): ScaleType {\n const defaultScaleType = defaultType(channel, fieldDef, mark);\n const {type} = specifiedScale;\n\n if (!isScaleChannel(channel)) {\n // There is no scale for these channels\n return null;\n }\n if (type !== undefined) {\n // Check if explicitly specified scale type is supported by the channel\n if (!channelSupportScaleType(channel, type)) {\n log.warn(log.message.scaleTypeNotWorkWithChannel(channel, type, defaultScaleType));\n return defaultScaleType;\n }\n\n // Check if explicitly specified scale type is supported by the data type\n if (isFieldDef(fieldDef) && !scaleTypeSupportDataType(type, fieldDef.type)) {\n log.warn(log.message.scaleTypeNotWorkWithFieldDef(type, defaultScaleType));\n return defaultScaleType;\n }\n\n return type;\n }\n\n return defaultScaleType;\n}\n\n/**\n * Determine appropriate default scale type.\n */\n// NOTE: Voyager uses this method.\nfunction defaultType(channel: Channel, fieldDef: TypedFieldDef | ScaleDatumDef, mark: MarkDef): ScaleType {\n switch (fieldDef.type) {\n case 'nominal':\n case 'ordinal': {\n if (isColorChannel(channel) || rangeType(channel) === 'discrete') {\n if (channel === 'shape' && fieldDef.type === 'ordinal') {\n log.warn(log.message.discreteChannelCannotEncode(channel, 'ordinal'));\n }\n return 'ordinal';\n }\n\n if (channel in POSITION_SCALE_CHANNEL_INDEX) {\n if (util.contains(['rect', 'bar', 'image', 'rule'], mark.type)) {\n // The rect/bar mark should fit into a band.\n // For rule, using band scale to make rule align with axis ticks better https://github.com/vega/vega-lite/issues/3429\n return 'band';\n }\n } else if (mark.type === 'arc' && channel in POLAR_POSITION_SCALE_CHANNEL_INDEX) {\n return 'band';\n }\n\n const dimensionSize = mark[getSizeChannel(channel)];\n if (isRelativeBandSize(dimensionSize)) {\n return 'band';\n }\n\n if (isPositionFieldOrDatumDef(fieldDef) && fieldDef.axis?.tickBand) {\n return 'band';\n }\n // Otherwise, use ordinal point scale so we can easily get center positions of the marks.\n return 'point';\n }\n\n case 'temporal':\n if (isColorChannel(channel)) {\n return 'time';\n } else if (rangeType(channel) === 'discrete') {\n log.warn(log.message.discreteChannelCannotEncode(channel, 'temporal'));\n // TODO: consider using quantize (equivalent to binning) once we have it\n return 'ordinal';\n } else if (isFieldDef(fieldDef) && fieldDef.timeUnit && normalizeTimeUnit(fieldDef.timeUnit).utc) {\n return 'utc';\n }\n return 'time';\n\n case 'quantitative':\n if (isColorChannel(channel)) {\n if (isFieldDef(fieldDef) && isBinning(fieldDef.bin)) {\n return 'bin-ordinal';\n }\n\n return 'linear';\n } else if (rangeType(channel) === 'discrete') {\n log.warn(log.message.discreteChannelCannotEncode(channel, 'quantitative'));\n // TODO: consider using quantize (equivalent to binning) once we have it\n return 'ordinal';\n }\n\n return 'linear';\n\n case 'geojson':\n return undefined;\n }\n\n /* istanbul ignore next: should never reach this */\n throw new Error(log.message.invalidFieldType(fieldDef.type));\n}\n","import {ScaleChannel, SCALE_CHANNELS, SHAPE} from '../../channel';\nimport {getFieldOrDatumDef, ScaleDatumDef, TypedFieldDef} from '../../channeldef';\nimport {GEOSHAPE} from '../../mark';\nimport {\n NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES,\n scaleCompatible,\n ScaleType,\n scaleTypePrecedence\n} from '../../scale';\nimport {GEOJSON} from '../../type';\nimport {keys} from '../../util';\nimport {VgScale} from '../../vega.schema';\nimport {isUnitModel, Model} from '../model';\nimport {defaultScaleResolve} from '../resolve';\nimport {Explicit, mergeValuesWithExplicit, tieBreakByComparing} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponent, ScaleComponentIndex} from './component';\nimport {parseScaleDomain} from './domain';\nimport {parseScaleProperty, parseScaleRange} from './properties';\nimport {scaleType} from './type';\n\nexport function parseScales(model: Model, {ignoreRange}: {ignoreRange?: boolean} = {}) {\n parseScaleCore(model);\n parseScaleDomain(model);\n for (const prop of NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES) {\n parseScaleProperty(model, prop);\n }\n if (!ignoreRange) {\n // range depends on zero\n parseScaleRange(model);\n }\n}\n\nexport function parseScaleCore(model: Model) {\n if (isUnitModel(model)) {\n model.component.scales = parseUnitScaleCore(model);\n } else {\n model.component.scales = parseNonUnitScaleCore(model);\n }\n}\n\n/**\n * Parse scales for all channels of a model.\n */\nfunction parseUnitScaleCore(model: UnitModel): ScaleComponentIndex {\n const {encoding, mark, markDef} = model;\n\n return SCALE_CHANNELS.reduce((scaleComponents: ScaleComponentIndex, channel: ScaleChannel) => {\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as TypedFieldDef | ScaleDatumDef; // must be typed def to have scale\n\n // Don't generate scale for shape of geoshape\n if (fieldOrDatumDef && mark === GEOSHAPE && channel === SHAPE && fieldOrDatumDef.type === GEOJSON) {\n return scaleComponents;\n }\n let specifiedScale = fieldOrDatumDef && fieldOrDatumDef['scale'];\n\n if (fieldOrDatumDef && specifiedScale !== null && specifiedScale !== false) {\n specifiedScale ??= {};\n\n const sType = scaleType(specifiedScale, channel, fieldOrDatumDef, markDef);\n scaleComponents[channel] = new ScaleComponent(model.scaleName(`${channel}`, true), {\n value: sType,\n explicit: specifiedScale.type === sType\n });\n }\n\n return scaleComponents;\n }, {});\n}\n\nconst scaleTypeTieBreaker = tieBreakByComparing(\n (st1: ScaleType, st2: ScaleType) => scaleTypePrecedence(st1) - scaleTypePrecedence(st2)\n);\n\nfunction parseNonUnitScaleCore(model: Model) {\n const scaleComponents: ScaleComponentIndex = (model.component.scales = {});\n\n const scaleTypeWithExplicitIndex: Partial>> = {};\n const resolve = model.component.resolve;\n\n // Parse each child scale and determine if a particular channel can be merged.\n for (const child of model.children) {\n parseScaleCore(child);\n\n // Instead of always merging right away -- check if it is compatible to merge first!\n for (const channel of keys(child.component.scales)) {\n // if resolve is undefined, set default first\n resolve.scale[channel] ??= defaultScaleResolve(channel, model);\n\n if (resolve.scale[channel] === 'shared') {\n const explicitScaleType = scaleTypeWithExplicitIndex[channel];\n const childScaleType = child.component.scales[channel].getWithExplicit('type');\n\n if (explicitScaleType) {\n if (scaleCompatible(explicitScaleType.value, childScaleType.value)) {\n // merge scale component if type are compatible\n scaleTypeWithExplicitIndex[channel] = mergeValuesWithExplicit(\n explicitScaleType,\n childScaleType,\n 'type',\n 'scale',\n scaleTypeTieBreaker\n );\n } else {\n // Otherwise, update conflicting channel to be independent\n resolve.scale[channel] = 'independent';\n // Remove from the index so they don't get merged\n delete scaleTypeWithExplicitIndex[channel];\n }\n } else {\n scaleTypeWithExplicitIndex[channel] = childScaleType;\n }\n }\n }\n }\n\n // Merge each channel listed in the index\n for (const channel of keys(scaleTypeWithExplicitIndex)) {\n // Create new merged scale component\n const name = model.scaleName(channel, true);\n const typeWithExplicit = scaleTypeWithExplicitIndex[channel];\n scaleComponents[channel] = new ScaleComponent(name, typeWithExplicit);\n\n // rename each child and mark them as merged\n for (const child of model.children) {\n const childScale = child.component.scales[channel];\n if (childScale) {\n child.renameScale(childScale.get('name'), name);\n childScale.merged = true;\n }\n }\n }\n\n return scaleComponents;\n}\n","import {\n AnchorValue,\n Axis as VgAxis,\n Legend as VgLegend,\n NewSignal,\n Projection as VgProjection,\n Signal,\n SignalRef,\n Title as VgTitle\n} from 'vega';\nimport {\n Channel,\n ExtendedChannel,\n FACET_CHANNELS,\n getPositionScaleChannel,\n isChannel,\n isScaleChannel,\n ScaleChannel,\n SingleDefChannel\n} from '../channel';\nimport {ChannelDef, FieldDef, FieldRefOption, getFieldDef, vgField} from '../channeldef';\nimport {Config} from '../config';\nimport {Data, DataSourceType} from '../data';\nimport {forEach, reduce} from '../encoding';\nimport {ExprRef, replaceExprRef} from '../expr';\nimport * as log from '../log';\nimport {Resolve} from '../resolve';\nimport {hasDiscreteDomain} from '../scale';\nimport {isFacetSpec} from '../spec';\nimport {\n extractCompositionLayout,\n GenericCompositionLayoutWithColumns,\n LayoutSizeMixins,\n SpecType,\n ViewBackground\n} from '../spec/base';\nimport {NormalizedSpec} from '../spec/index';\nimport {extractTitleConfig, isText, TitleParams} from '../title';\nimport {normalizeTransform, Transform} from '../transform';\nimport {contains, Dict, duplicate, isEmpty, keys, varName} from '../util';\nimport {isVgRangeStep, VgData, VgEncodeEntry, VgLayout, VgMarkGroup} from '../vega.schema';\nimport {assembleAxes} from './axis/assemble';\nimport {AxisComponentIndex} from './axis/component';\nimport {signalOrValueRef} from './common';\nimport {ConcatModel} from './concat';\nimport {DataComponent} from './data';\nimport {FacetModel} from './facet';\nimport {assembleHeaderGroups, assembleLayoutTitleBand, assembleTitleGroup} from './header/assemble';\nimport {HEADER_CHANNELS, LayoutHeaderComponent} from './header/component';\nimport {LayerModel} from './layer';\nimport {sizeExpr} from './layoutsize/assemble';\nimport {\n getSizeTypeFromLayoutSizeType,\n LayoutSizeComponent,\n LayoutSizeIndex,\n LayoutSizeType\n} from './layoutsize/component';\nimport {assembleLegends} from './legend/assemble';\nimport {LegendComponentIndex} from './legend/component';\nimport {parseLegend} from './legend/parse';\nimport {assembleProjections} from './projection/assemble';\nimport {ProjectionComponent} from './projection/component';\nimport {parseProjection} from './projection/parse';\nimport {assembleScales} from './scale/assemble';\nimport {ScaleComponent, ScaleComponentIndex} from './scale/component';\nimport {assembleDomain, getFieldFromDomain} from './scale/domain';\nimport {parseScales} from './scale/parse';\nimport {SelectionComponent} from './selection';\nimport {Split} from './split';\nimport {UnitModel} from './unit';\n\n/**\n * Composable Components that are intermediate results of the parsing phase of the\n * compilations. The components represents parts of the specification in a form that\n * can be easily merged (during parsing for composite specs).\n * In addition, these components are easily transformed into Vega specifications\n * during the \"assemble\" phase, which is the last phase of the compilation step.\n */\nexport interface Component {\n data: DataComponent;\n\n layoutSize: LayoutSizeComponent;\n\n layoutHeaders: {\n row?: LayoutHeaderComponent;\n column?: LayoutHeaderComponent;\n facet?: LayoutHeaderComponent;\n };\n\n mark: VgMarkGroup[];\n scales: ScaleComponentIndex;\n projection: ProjectionComponent;\n selection: Dict;\n\n /** Dictionary mapping channel to VgAxis definition */\n axes: AxisComponentIndex;\n\n /** Dictionary mapping channel to VgLegend definition */\n legends: LegendComponentIndex;\n\n resolve: Resolve;\n}\n\nexport interface NameMapInterface {\n rename(oldname: string, newName: string): void;\n has(name: string): boolean;\n get(name: string): string;\n}\n\nexport class NameMap implements NameMapInterface {\n private nameMap: Dict;\n\n constructor() {\n this.nameMap = {};\n }\n\n public rename(oldName: string, newName: string) {\n this.nameMap[oldName] = newName;\n }\n\n public has(name: string): boolean {\n return this.nameMap[name] !== undefined;\n }\n\n public get(name: string): string {\n // If the name appears in the _nameMap, we need to read its new name.\n // We have to loop over the dict just in case the new name also gets renamed.\n while (this.nameMap[name] && name !== this.nameMap[name]) {\n name = this.nameMap[name];\n }\n\n return name;\n }\n}\n\n/*\n We use type guards instead of `instanceof` as `instanceof` makes\n different parts of the compiler depend on the actual implementation of\n the model classes, which in turn depend on different parts of the compiler.\n Thus, `instanceof` leads to circular dependency problems.\n\n On the other hand, type guards only make different parts of the compiler\n depend on the type of the model classes, but not the actual implementation.\n*/\n\nexport function isUnitModel(model: Model): model is UnitModel {\n return model?.type === 'unit';\n}\n\nexport function isFacetModel(model: Model): model is FacetModel {\n return model?.type === 'facet';\n}\n\nexport function isConcatModel(model: Model): model is ConcatModel {\n return model?.type === 'concat';\n}\n\nexport function isLayerModel(model: Model): model is LayerModel {\n return model?.type === 'layer';\n}\n\nexport abstract class Model {\n public readonly name: string;\n\n public size: LayoutSizeMixins;\n\n public readonly title: TitleParams;\n public readonly description: string;\n\n public readonly data: Data | null;\n public readonly transforms: Transform[];\n public readonly layout: GenericCompositionLayoutWithColumns;\n\n /** Name map for scales, which can be renamed by a model's parent. */\n protected scaleNameMap: NameMapInterface;\n\n /** Name map for projections, which can be renamed by a model's parent. */\n protected projectionNameMap: NameMapInterface;\n\n /** Name map for signals, which can be renamed by a model's parent. */\n protected signalNameMap: NameMapInterface;\n\n public readonly component: Component;\n\n public readonly view?: ViewBackground;\n\n public abstract readonly children: Model[] = [];\n\n constructor(\n spec: NormalizedSpec,\n public readonly type: SpecType,\n public readonly parent: Model,\n parentGivenName: string,\n public readonly config: Config,\n resolve: Resolve,\n view?: ViewBackground\n ) {\n this.parent = parent;\n this.config = config;\n this.view = replaceExprRef(view);\n\n // If name is not provided, always use parent's givenName to avoid name conflicts.\n this.name = spec.name ?? parentGivenName;\n this.title = isText(spec.title) ? {text: spec.title} : spec.title ? replaceExprRef(spec.title) : undefined;\n\n // Shared name maps\n this.scaleNameMap = parent ? parent.scaleNameMap : new NameMap();\n this.projectionNameMap = parent ? parent.projectionNameMap : new NameMap();\n this.signalNameMap = parent ? parent.signalNameMap : new NameMap();\n\n this.data = spec.data;\n\n this.description = spec.description;\n this.transforms = normalizeTransform(spec.transform ?? []);\n this.layout = type === 'layer' || type === 'unit' ? {} : extractCompositionLayout(spec, type, config);\n\n this.component = {\n data: {\n sources: parent ? parent.component.data.sources : [],\n outputNodes: parent ? parent.component.data.outputNodes : {},\n outputNodeRefCounts: parent ? parent.component.data.outputNodeRefCounts : {},\n // data is faceted if the spec is a facet spec or the parent has faceted data and data is undefined\n isFaceted: isFacetSpec(spec) || (parent && parent.component.data.isFaceted && spec.data === undefined)\n },\n layoutSize: new Split(),\n layoutHeaders: {row: {}, column: {}, facet: {}},\n mark: null,\n resolve: {\n scale: {},\n axis: {},\n legend: {},\n ...(resolve ? duplicate(resolve) : {})\n },\n selection: null,\n scales: null,\n projection: null,\n axes: {},\n legends: {}\n };\n }\n\n public get width(): SignalRef {\n return this.getSizeSignalRef('width');\n }\n\n public get height(): SignalRef {\n return this.getSizeSignalRef('height');\n }\n\n public parse() {\n this.parseScale();\n\n this.parseLayoutSize(); // depends on scale\n this.renameTopLevelLayoutSizeSignal();\n\n this.parseSelections();\n this.parseProjection();\n this.parseData(); // (pathorder) depends on markDef; selection filters depend on parsed selections; depends on projection because some transforms require the finalized projection name.\n this.parseAxesAndHeaders(); // depends on scale and layout size\n this.parseLegends(); // depends on scale, markDef\n this.parseMarkGroup(); // depends on data name, scale, layout size, axisGroup, and children's scale, axis, legend and mark.\n }\n\n public abstract parseData(): void;\n\n public abstract parseSelections(): void;\n\n public parseScale() {\n parseScales(this);\n }\n\n public parseProjection() {\n parseProjection(this);\n }\n\n public abstract parseLayoutSize(): void;\n\n /**\n * Rename top-level spec's size to be just width / height, ignoring model name.\n * This essentially merges the top-level spec's width/height signals with the width/height signals\n * to help us reduce redundant signals declaration.\n */\n private renameTopLevelLayoutSizeSignal() {\n if (this.getName('width') !== 'width') {\n this.renameSignal(this.getName('width'), 'width');\n }\n if (this.getName('height') !== 'height') {\n this.renameSignal(this.getName('height'), 'height');\n }\n }\n\n public abstract parseMarkGroup(): void;\n\n public abstract parseAxesAndHeaders(): void;\n\n public parseLegends() {\n parseLegend(this);\n }\n\n public abstract assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[];\n public abstract assembleSignals(): NewSignal[];\n\n public abstract assembleSelectionData(data: readonly VgData[]): readonly VgData[];\n\n public assembleGroupStyle(): string | string[] {\n if (this.type === 'unit' || this.type === 'layer') {\n return this.view?.style ?? 'cell';\n }\n return undefined;\n }\n\n private assembleEncodeFromView(view: ViewBackground): VgEncodeEntry {\n // Exclude \"style\"\n const {style: _, ...baseView} = view;\n\n const e: VgEncodeEntry = {};\n for (const property of keys(baseView)) {\n const value = baseView[property];\n if (value !== undefined) {\n e[property] = signalOrValueRef(value);\n }\n }\n\n return e;\n }\n\n public assembleGroupEncodeEntry(isTopLevel: boolean): VgEncodeEntry {\n let encodeEntry: VgEncodeEntry = {};\n if (this.view) {\n encodeEntry = this.assembleEncodeFromView(this.view);\n }\n\n if (!isTopLevel) {\n // Descriptions are already added to the top-level description so we only need to add them to the inner views.\n if (this.description) {\n encodeEntry['description'] = signalOrValueRef(this.description);\n }\n\n // For top-level spec, we can set the global width and height signal to adjust the group size.\n // For other child specs, we have to manually set width and height in the encode entry.\n if (this.type === 'unit' || this.type === 'layer') {\n return {\n width: this.getSizeSignalRef('width'),\n height: this.getSizeSignalRef('height'),\n ...(encodeEntry ?? {})\n };\n }\n }\n\n return isEmpty(encodeEntry) ? undefined : encodeEntry;\n }\n\n public assembleLayout(): VgLayout {\n if (!this.layout) {\n return undefined;\n }\n\n const {spacing, ...layout} = this.layout;\n\n const {component, config} = this;\n const titleBand = assembleLayoutTitleBand(component.layoutHeaders, config);\n\n return {\n padding: spacing,\n ...this.assembleDefaultLayout(),\n ...layout,\n ...(titleBand ? {titleBand} : {})\n };\n }\n\n protected assembleDefaultLayout(): VgLayout {\n return {};\n }\n\n public abstract assembleLayoutSignals(): NewSignal[];\n\n public assembleHeaderMarks(): VgMarkGroup[] {\n const {layoutHeaders} = this.component;\n let headerMarks = [];\n\n for (const channel of FACET_CHANNELS) {\n if (layoutHeaders[channel].title) {\n headerMarks.push(assembleTitleGroup(this, channel));\n }\n }\n\n for (const channel of HEADER_CHANNELS) {\n headerMarks = headerMarks.concat(assembleHeaderGroups(this, channel));\n }\n return headerMarks;\n }\n\n public abstract assembleMarks(): VgMarkGroup[];\n\n public assembleAxes(): VgAxis[] {\n return assembleAxes(this.component.axes, this.config);\n }\n\n public assembleLegends(): VgLegend[] {\n return assembleLegends(this);\n }\n\n public assembleProjections(): VgProjection[] {\n return assembleProjections(this);\n }\n\n public assembleTitle(): VgTitle {\n const {encoding, ...titleNoEncoding} = this.title ?? ({} as TitleParams);\n\n const title: VgTitle = {\n ...extractTitleConfig(this.config.title).nonMark,\n ...titleNoEncoding,\n ...(encoding ? {encode: {update: encoding}} : {})\n };\n\n if (title.text) {\n if (contains(['unit', 'layer'], this.type)) {\n // Unit/Layer\n if (contains(['middle', undefined], title.anchor)) {\n title.frame ??= 'group';\n }\n } else {\n // composition with Vega layout\n\n // Set title = \"start\" by default for composition as \"middle\" does not look nice\n // https://github.com/vega/vega/issues/960#issuecomment-471360328\n title.anchor ??= 'start';\n }\n\n return isEmpty(title) ? undefined : title;\n }\n return undefined;\n }\n\n /**\n * Assemble the mark group for this model. We accept optional `signals` so that we can include concat top-level signals with the top-level model's local signals.\n */\n public assembleGroup(signals: Signal[] = []) {\n const group: VgMarkGroup = {};\n\n signals = signals.concat(this.assembleSignals());\n\n if (signals.length > 0) {\n group.signals = signals;\n }\n\n const layout = this.assembleLayout();\n if (layout) {\n group.layout = layout;\n }\n\n group.marks = [].concat(this.assembleHeaderMarks(), this.assembleMarks());\n\n // Only include scales if this spec is top-level or if parent is facet.\n // (Otherwise, it will be merged with upper-level's scope.)\n const scales = !this.parent || isFacetModel(this.parent) ? assembleScales(this) : [];\n if (scales.length > 0) {\n group.scales = scales;\n }\n\n const axes = this.assembleAxes();\n if (axes.length > 0) {\n group.axes = axes;\n }\n\n const legends = this.assembleLegends();\n if (legends.length > 0) {\n group.legends = legends;\n }\n\n return group;\n }\n\n public getName(text: string) {\n return varName((this.name ? `${this.name}_` : '') + text);\n }\n\n public getDataName(type: DataSourceType) {\n return this.getName(DataSourceType[type].toLowerCase());\n }\n\n /**\n * Request a data source name for the given data source type and mark that data source as required.\n * This method should be called in parse, so that all used data source can be correctly instantiated in assembleData().\n * You can lookup the correct dataset name in assemble with `lookupDataSource`.\n */\n public requestDataName(name: DataSourceType) {\n const fullName = this.getDataName(name);\n\n // Increase ref count. This is critical because otherwise we won't create a data source.\n // We also increase the ref counts on OutputNode.getSource() calls.\n const refCounts = this.component.data.outputNodeRefCounts;\n refCounts[fullName] = (refCounts[fullName] || 0) + 1;\n\n return fullName;\n }\n\n public getSizeSignalRef(layoutSizeType: LayoutSizeType): SignalRef {\n if (isFacetModel(this.parent)) {\n const sizeType = getSizeTypeFromLayoutSizeType(layoutSizeType);\n const channel = getPositionScaleChannel(sizeType);\n const scaleComponent = this.component.scales[channel];\n\n if (scaleComponent && !scaleComponent.merged) {\n // independent scale\n const type = scaleComponent.get('type');\n const range = scaleComponent.get('range');\n\n if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n const scaleName = scaleComponent.get('name');\n const domain = assembleDomain(this, channel);\n const field = getFieldFromDomain(domain);\n if (field) {\n const fieldRef = vgField({aggregate: 'distinct', field}, {expr: 'datum'});\n return {\n signal: sizeExpr(scaleName, scaleComponent, fieldRef)\n };\n } else {\n log.warn(log.message.unknownField(channel));\n return null;\n }\n }\n }\n }\n\n return {\n signal: this.signalNameMap.get(this.getName(layoutSizeType))\n };\n }\n\n /**\n * Lookup the name of the datasource for an output node. You probably want to call this in assemble.\n */\n public lookupDataSource(name: string) {\n const node = this.component.data.outputNodes[name];\n\n if (!node) {\n // Name not found in map so let's just return what we got.\n // This can happen if we already have the correct name.\n return name;\n }\n\n return node.getSource();\n }\n\n public getSignalName(oldSignalName: string): string {\n return this.signalNameMap.get(oldSignalName);\n }\n\n public renameSignal(oldName: string, newName: string) {\n this.signalNameMap.rename(oldName, newName);\n }\n\n public renameScale(oldName: string, newName: string) {\n this.scaleNameMap.rename(oldName, newName);\n }\n\n public renameProjection(oldName: string, newName: string) {\n this.projectionNameMap.rename(oldName, newName);\n }\n\n /**\n * @return scale name for a given channel after the scale has been parsed and named.\n */\n public scaleName(originalScaleName: ScaleChannel | string, parse?: boolean): string {\n if (parse) {\n // During the parse phase always return a value\n // No need to refer to rename map because a scale can't be renamed\n // before it has the original name.\n return this.getName(originalScaleName);\n }\n\n // If there is a scale for the channel, it should either\n // be in the scale component or exist in the name map\n if (\n // If there is a scale for the channel, there should be a local scale component for it\n (isChannel(originalScaleName) && isScaleChannel(originalScaleName) && this.component.scales[originalScaleName]) ||\n // in the scale name map (the scale get merged by its parent)\n this.scaleNameMap.has(this.getName(originalScaleName))\n ) {\n return this.scaleNameMap.get(this.getName(originalScaleName));\n }\n return undefined;\n }\n\n /**\n * @return projection name after the projection has been parsed and named.\n */\n public projectionName(parse?: boolean): string {\n if (parse) {\n // During the parse phase always return a value\n // No need to refer to rename map because a projection can't be renamed\n // before it has the original name.\n return this.getName('projection');\n }\n\n if (\n (this.component.projection && !this.component.projection.merged) ||\n this.projectionNameMap.has(this.getName('projection'))\n ) {\n return this.projectionNameMap.get(this.getName('projection'));\n }\n return undefined;\n }\n\n /**\n * Corrects the data references in marks after assemble.\n */\n public correctDataNames = (mark: VgMarkGroup) => {\n // TODO: make this correct\n\n // for normal data references\n if (mark.from && mark.from.data) {\n mark.from.data = this.lookupDataSource(mark.from.data);\n }\n\n // for access to facet data\n if (mark.from && mark.from.facet && mark.from.facet.data) {\n mark.from.facet.data = this.lookupDataSource(mark.from.facet.data);\n }\n\n return mark;\n };\n\n /**\n * Traverse a model's hierarchy to get the scale component for a particular channel.\n */\n public getScaleComponent(channel: ScaleChannel): ScaleComponent {\n /* istanbul ignore next: This is warning for debugging test */\n if (!this.component.scales) {\n throw new Error(\n 'getScaleComponent cannot be called before parseScale(). Make sure you have called parseScale or use parseUnitModelWithScale().'\n );\n }\n\n const localScaleComponent = this.component.scales[channel];\n if (localScaleComponent && !localScaleComponent.merged) {\n return localScaleComponent;\n }\n return this.parent ? this.parent.getScaleComponent(channel) : undefined;\n }\n\n /**\n * Traverse a model's hierarchy to get a particular selection component.\n */\n public getSelectionComponent(variableName: string, origName: string): SelectionComponent {\n let sel = this.component.selection[variableName];\n if (!sel && this.parent) {\n sel = this.parent.getSelectionComponent(variableName, origName);\n }\n if (!sel) {\n throw new Error(log.message.selectionNotFound(origName));\n }\n return sel;\n }\n\n /**\n * Returns true if the model has a signalRef for an axis orient.\n */\n public hasAxisOrientSignalRef() {\n return (\n this.component.axes.x?.some(a => a.hasOrientSignalRef()) ||\n this.component.axes.y?.some(a => a.hasOrientSignalRef())\n );\n }\n}\n\n/** Abstract class for UnitModel and FacetModel. Both of which can contain fieldDefs as a part of its own specification. */\nexport abstract class ModelWithField extends Model {\n public abstract fieldDef(channel: SingleDefChannel): FieldDef;\n\n /** Get \"field\" reference for Vega */\n public vgField(channel: SingleDefChannel, opt: FieldRefOption = {}) {\n const fieldDef = this.fieldDef(channel);\n\n if (!fieldDef) {\n return undefined;\n }\n\n return vgField(fieldDef, opt);\n }\n\n protected abstract getMapping(): Partial>;\n\n public reduceFieldDef(f: (acc: U, fd: FieldDef, c: Channel) => U, init: T): T {\n return reduce(\n this.getMapping(),\n (acc: U, cd: ChannelDef, c: Channel) => {\n const fieldDef = getFieldDef(cd);\n if (fieldDef) {\n return f(acc, fieldDef, c);\n }\n return acc;\n },\n init\n );\n }\n\n public forEachFieldDef(f: (fd: FieldDef, c: ExtendedChannel) => void, t?: any) {\n forEach(\n this.getMapping(),\n (cd, c) => {\n const fieldDef = getFieldDef(cd);\n if (fieldDef) {\n f(fieldDef, c);\n }\n },\n t\n );\n }\n\n public abstract channelHasField(channel: Channel): boolean;\n}\n","import {KDETransform as VgKDETransform} from 'vega';\nimport {DensityTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for density transform nodes\n */\nexport class DensityTransformNode extends DataFlowNode {\n public clone() {\n return new DensityTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: DensityTransform) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? 'value', specifiedAs[1] ?? 'density'];\n }\n\n public dependentFields() {\n return new Set([this.transform.density, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `DensityTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgKDETransform {\n const {density, ...rest} = this.transform;\n const result: VgKDETransform = {\n type: 'kde',\n field: density,\n ...rest\n };\n return result;\n }\n}\n","import {FilterTransform as VgFilterTransform} from 'vega';\nimport {isScaleChannel} from '../../channel';\nimport {TypedFieldDef, vgField as fieldRef} from '../../channeldef';\nimport {isPathMark} from '../../mark';\nimport {hasContinuousDomain} from '../../scale';\nimport {Dict, hash, keys} from '../../util';\nimport {getMarkPropOrConfig} from '../common';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class FilterInvalidNode extends DataFlowNode {\n public clone() {\n return new FilterInvalidNode(null, {...this.filter});\n }\n\n constructor(parent: DataFlowNode, public readonly filter: Dict>) {\n super(parent);\n }\n\n public static make(parent: DataFlowNode, model: UnitModel): FilterInvalidNode {\n const {config, mark, markDef} = model;\n\n const invalid = getMarkPropOrConfig('invalid', markDef, config);\n if (invalid !== 'filter') {\n return null;\n }\n\n const filter = model.reduceFieldDef((aggregator: Dict>, fieldDef, channel) => {\n const scaleComponent = isScaleChannel(channel) && model.getScaleComponent(channel);\n if (scaleComponent) {\n const scaleType = scaleComponent.get('type');\n\n // While discrete domain scales can handle invalid values, continuous scales can't.\n // Thus, for non-path marks, we have to filter null for scales with continuous domains.\n // (For path marks, we will use \"defined\" property and skip these values instead.)\n if (hasContinuousDomain(scaleType) && fieldDef.aggregate !== 'count' && !isPathMark(mark)) {\n aggregator[fieldDef.field] = fieldDef as any; // we know that the fieldDef is a typed field def\n }\n }\n return aggregator;\n }, {} as Dict>);\n\n if (!keys(filter).length) {\n return null;\n }\n\n return new FilterInvalidNode(parent, filter);\n }\n\n public dependentFields() {\n return new Set(keys(this.filter));\n }\n\n public producedFields() {\n return new Set(); // filter does not produce any new fields\n }\n\n public hash() {\n return `FilterInvalid ${hash(this.filter)}`;\n }\n\n /**\n * Create the VgTransforms for each of the filtered fields.\n */\n public assemble(): VgFilterTransform {\n const filters = keys(this.filter).reduce((vegaFilters, field) => {\n const fieldDef = this.filter[field];\n const ref = fieldRef(fieldDef, {expr: 'datum'});\n\n if (fieldDef !== null) {\n if (fieldDef.type === 'temporal') {\n vegaFilters.push(`(isDate(${ref}) || (isValid(${ref}) && isFinite(+${ref})))`);\n } else if (fieldDef.type === 'quantitative') {\n vegaFilters.push(`isValid(${ref})`);\n vegaFilters.push(`isFinite(+${ref})`);\n } else {\n // should never get here\n }\n }\n return vegaFilters;\n }, [] as string[]);\n\n return filters.length > 0\n ? {\n type: 'filter',\n expr: filters.join(' && ')\n }\n : null;\n }\n}\n","import {FlattenTransform as VgFlattenTransform} from 'vega';\nimport {FlattenTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for flatten transform nodes\n */\nexport class FlattenTransformNode extends DataFlowNode {\n public clone() {\n return new FlattenTransformNode(this.parent, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: FlattenTransform) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const {flatten, as = []} = this.transform;\n this.transform.as = flatten.map((f, i) => as[i] ?? f);\n }\n\n public dependentFields() {\n return new Set(this.transform.flatten);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `FlattenTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgFlattenTransform {\n const {flatten: fields, as} = this.transform;\n\n const result: VgFlattenTransform = {\n type: 'flatten',\n fields,\n as\n };\n return result;\n }\n}\n","import {FoldTransform as VgFoldTransform} from 'vega';\nimport {FoldTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for flatten transform nodes\n */\nexport class FoldTransformNode extends DataFlowNode {\n public clone() {\n return new FoldTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: FoldTransform) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? 'key', specifiedAs[1] ?? 'value'];\n }\n\n public dependentFields() {\n return new Set(this.transform.fold);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `FoldTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgFoldTransform {\n const {fold, as} = this.transform;\n const result: VgFoldTransform = {\n type: 'fold',\n fields: fold,\n as\n };\n return result;\n }\n}\n","import {Transforms as VgTransform, Vector2} from 'vega';\nimport {isString} from 'vega-util';\nimport {GeoPositionChannel, LATITUDE, LATITUDE2, LONGITUDE, LONGITUDE2, SHAPE} from '../../channel';\nimport {getFieldOrDatumDef, isDatumDef, isFieldDef, isValueDef} from '../../channeldef';\nimport {GEOJSON} from '../../type';\nimport {duplicate, hash} from '../../util';\nimport {VgExprRef} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class GeoJSONNode extends DataFlowNode {\n public clone() {\n return new GeoJSONNode(null, duplicate(this.fields), this.geojson, this.signal);\n }\n\n public static parseAll(parent: DataFlowNode, model: UnitModel): DataFlowNode {\n if (model.component.projection && !model.component.projection.isFit) {\n return parent;\n }\n\n let geoJsonCounter = 0;\n\n for (const coordinates of [\n [LONGITUDE, LATITUDE],\n [LONGITUDE2, LATITUDE2]\n ] as Vector2[]) {\n const pair = coordinates.map(channel => {\n const def = getFieldOrDatumDef(model.encoding[channel]);\n return isFieldDef(def)\n ? def.field\n : isDatumDef(def)\n ? {expr: `${def.datum}`}\n : isValueDef(def)\n ? {expr: `${def['value']}`}\n : undefined;\n }) as [GeoPositionChannel, GeoPositionChannel];\n\n if (pair[0] || pair[1]) {\n parent = new GeoJSONNode(parent, pair, null, model.getName(`geojson_${geoJsonCounter++}`));\n }\n }\n\n if (model.channelHasField(SHAPE)) {\n const fieldDef = model.typedFieldDef(SHAPE);\n if (fieldDef.type === GEOJSON) {\n parent = new GeoJSONNode(parent, null, fieldDef.field, model.getName(`geojson_${geoJsonCounter++}`));\n }\n }\n\n return parent;\n }\n\n constructor(\n parent: DataFlowNode,\n private fields?: Vector2,\n private geojson?: string,\n private signal?: string\n ) {\n super(parent);\n }\n\n public dependentFields() {\n const fields = (this.fields ?? []).filter(isString) as string[];\n return new Set([...(this.geojson ? [this.geojson] : []), ...fields]);\n }\n\n public producedFields() {\n return new Set();\n }\n\n public hash() {\n return `GeoJSON ${this.geojson} ${this.signal} ${hash(this.fields)}`;\n }\n\n public assemble(): VgTransform[] {\n return [\n ...(this.geojson\n ? [\n {\n type: 'filter',\n expr: `isValid(datum[\"${this.geojson}\"])`\n } as const\n ]\n : []),\n {\n type: 'geojson',\n ...(this.fields ? {fields: this.fields} : {}),\n ...(this.geojson ? {geojson: this.geojson} : {}),\n signal: this.signal\n }\n ];\n }\n}\n","import {GeoPointTransform as VgGeoPointTransform, Vector2} from 'vega';\nimport {isString} from 'vega-util';\nimport {GeoPositionChannel, LATITUDE, LATITUDE2, LONGITUDE, LONGITUDE2} from '../../channel';\nimport {getFieldOrDatumDef, isDatumDef, isFieldDef, isValueDef} from '../../channeldef';\nimport {duplicate, hash} from '../../util';\nimport {VgExprRef} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class GeoPointNode extends DataFlowNode {\n public clone() {\n return new GeoPointNode(null, this.projection, duplicate(this.fields), duplicate(this.as));\n }\n\n constructor(\n parent: DataFlowNode,\n private projection: string,\n private fields: [string | VgExprRef, string | VgExprRef],\n private as: [string, string]\n ) {\n super(parent);\n }\n\n public static parseAll(parent: DataFlowNode, model: UnitModel): DataFlowNode {\n if (!model.projectionName()) {\n return parent;\n }\n\n for (const coordinates of [\n [LONGITUDE, LATITUDE],\n [LONGITUDE2, LATITUDE2]\n ] as Vector2[]) {\n const pair = coordinates.map(channel => {\n const def = getFieldOrDatumDef(model.encoding[channel]);\n return isFieldDef(def)\n ? def.field\n : isDatumDef(def)\n ? {expr: `${def.datum}`}\n : isValueDef(def)\n ? {expr: `${def['value']}`}\n : undefined;\n }) as [GeoPositionChannel, GeoPositionChannel];\n\n const suffix = coordinates[0] === LONGITUDE2 ? '2' : '';\n\n if (pair[0] || pair[1]) {\n parent = new GeoPointNode(parent, model.projectionName(), pair, [\n model.getName(`x${suffix}`),\n model.getName(`y${suffix}`)\n ]);\n }\n }\n\n return parent;\n }\n\n public dependentFields() {\n return new Set(this.fields.filter(isString));\n }\n\n public producedFields() {\n return new Set(this.as);\n }\n\n public hash() {\n return `Geopoint ${this.projection} ${hash(this.fields)} ${hash(this.as)}`;\n }\n\n public assemble(): VgGeoPointTransform {\n return {\n type: 'geopoint',\n projection: this.projection,\n fields: this.fields,\n as: this.as\n };\n }\n}\n","import {\n FormulaTransform as VgFormulaTransform,\n ImputeTransform as VgImputeTransform,\n SignalRef,\n WindowTransform as VgWindowTransform\n} from 'vega';\nimport {isFieldDef} from '../../channeldef';\nimport {pathGroupingFields} from '../../encoding';\nimport {ImputeSequence, ImputeTransform, isImputeSequence} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class ImputeNode extends DataFlowNode {\n public clone() {\n return new ImputeNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private readonly transform: ImputeTransform) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set([this.transform.impute, this.transform.key, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set([this.transform.impute]);\n }\n\n private processSequence(keyvals: ImputeSequence): SignalRef {\n const {start = 0, stop, step} = keyvals;\n const result = [start, stop, ...(step ? [step] : [])].join(',');\n\n return {signal: `sequence(${result})`};\n }\n\n public static makeFromTransform(parent: DataFlowNode, imputeTransform: ImputeTransform): ImputeNode {\n return new ImputeNode(parent, imputeTransform);\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: UnitModel) {\n const encoding = model.encoding;\n const xDef = encoding.x;\n const yDef = encoding.y;\n\n if (isFieldDef(xDef) && isFieldDef(yDef)) {\n const imputedChannel = xDef.impute ? xDef : yDef.impute ? yDef : undefined;\n if (imputedChannel === undefined) {\n return undefined;\n }\n const keyChannel = xDef.impute ? yDef : yDef.impute ? xDef : undefined;\n const {method, value, frame, keyvals} = imputedChannel.impute;\n const groupbyFields = pathGroupingFields(model.mark, encoding);\n\n return new ImputeNode(parent, {\n impute: imputedChannel.field,\n key: keyChannel.field,\n ...(method ? {method} : {}),\n ...(value !== undefined ? {value} : {}),\n ...(frame ? {frame} : {}),\n ...(keyvals !== undefined ? {keyvals} : {}),\n ...(groupbyFields.length ? {groupby: groupbyFields} : {})\n });\n }\n return null;\n }\n\n public hash() {\n return `Impute ${hash(this.transform)}`;\n }\n\n public assemble() {\n const {impute, key, keyvals, method, groupby, value, frame = [null, null] as [null, null]} = this.transform;\n\n const imputeTransform: VgImputeTransform = {\n type: 'impute',\n field: impute,\n key,\n ...(keyvals ? {keyvals: isImputeSequence(keyvals) ? this.processSequence(keyvals) : keyvals} : {}),\n method: 'value',\n ...(groupby ? {groupby} : {}),\n value: !method || method === 'value' ? value : null\n };\n\n if (method && method !== 'value') {\n const deriveNewField: VgWindowTransform = {\n type: 'window',\n as: [`imputed_${impute}_value`],\n ops: [method],\n fields: [impute],\n frame,\n ignorePeers: false,\n ...(groupby ? {groupby} : {})\n };\n const replaceOriginal: VgFormulaTransform = {\n type: 'formula',\n expr: `datum.${impute} === null ? datum.imputed_${impute}_value : datum.${impute}`,\n as: impute\n };\n return [imputeTransform, deriveNewField, replaceOriginal];\n } else {\n return [imputeTransform];\n }\n }\n}\n","import {LoessTransform as VgLoessTransform} from 'vega';\nimport {LoessTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for loess transform nodes\n */\nexport class LoessTransformNode extends DataFlowNode {\n public clone() {\n return new LoessTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: LoessTransform) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? transform.on, specifiedAs[1] ?? transform.loess];\n }\n\n public dependentFields() {\n return new Set([this.transform.loess, this.transform.on, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `LoessTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgLoessTransform {\n const {loess, on, ...rest} = this.transform;\n const result: VgLoessTransform = {\n type: 'loess',\n x: on,\n y: loess,\n ...rest\n };\n return result;\n }\n}\n","import {LookupTransform as VgLookupTransform} from 'vega';\nimport {array, isString} from 'vega-util';\nimport * as log from '../../log';\nimport {isLookupData, isLookupSelection, LookupTransform} from '../../transform';\nimport {duplicate, hash, varName} from '../../util';\nimport {Model} from '../model';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {findSource} from './parse';\nimport {SourceNode} from './source';\nimport {DataSourceType} from '../../data';\n\nexport class LookupNode extends DataFlowNode {\n public clone() {\n return new LookupNode(null, duplicate(this.transform), this.secondary);\n }\n\n constructor(parent: DataFlowNode, public readonly transform: LookupTransform, public readonly secondary: string) {\n super(parent);\n }\n\n public static make(parent: DataFlowNode, model: Model, transform: LookupTransform, counter: number) {\n const sources = model.component.data.sources;\n const {from} = transform;\n let fromOutputNode = null;\n\n if (isLookupData(from)) {\n let fromSource = findSource(from.data, sources);\n\n if (!fromSource) {\n fromSource = new SourceNode(from.data);\n sources.push(fromSource);\n }\n\n const fromOutputName = model.getName(`lookup_${counter}`);\n fromOutputNode = new OutputNode(\n fromSource,\n fromOutputName,\n DataSourceType.Lookup,\n model.component.data.outputNodeRefCounts\n );\n model.component.data.outputNodes[fromOutputName] = fromOutputNode;\n } else if (isLookupSelection(from)) {\n const selName = from.param;\n transform = {as: selName, ...transform};\n let selCmpt;\n\n try {\n selCmpt = model.getSelectionComponent(varName(selName), selName);\n } catch (e) {\n throw new Error(log.message.cannotLookupVariableParameter(selName));\n }\n\n fromOutputNode = selCmpt.materialized;\n if (!fromOutputNode) {\n throw new Error(log.message.noSameUnitLookup(selName));\n }\n }\n\n return new LookupNode(parent, transform, fromOutputNode.getSource());\n }\n\n public dependentFields() {\n return new Set([this.transform.lookup]);\n }\n\n public producedFields() {\n return new Set(this.transform.as ? array(this.transform.as) : this.transform.from.fields);\n }\n\n public hash() {\n return `Lookup ${hash({transform: this.transform, secondary: this.secondary})}`;\n }\n\n public assemble(): VgLookupTransform {\n let foreign: Partial;\n\n if (this.transform.from.fields) {\n // lookup a few fields and add create a flat output\n foreign = {\n values: this.transform.from.fields,\n ...(this.transform.as ? {as: array(this.transform.as)} : {})\n };\n } else {\n // lookup full record and nest it\n let asName = this.transform.as;\n if (!isString(asName)) {\n log.warn(log.message.NO_FIELDS_NEEDS_AS);\n asName = '_lookup';\n }\n\n foreign = {\n as: [asName]\n };\n }\n\n return {\n type: 'lookup',\n from: this.secondary,\n key: this.transform.from.key,\n fields: [this.transform.lookup],\n ...foreign,\n ...(this.transform.default ? {default: this.transform.default} : {})\n };\n }\n}\n","import {QuantileTransform as VgQuantileTransform} from 'vega';\nimport {QuantileTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for quantile transform nodes\n */\nexport class QuantileTransformNode extends DataFlowNode {\n public clone() {\n return new QuantileTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: QuantileTransform) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? 'prob', specifiedAs[1] ?? 'value'];\n }\n\n public dependentFields() {\n return new Set([this.transform.quantile, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `QuantileTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgQuantileTransform {\n const {quantile, ...rest} = this.transform;\n const result: VgQuantileTransform = {\n type: 'quantile',\n field: quantile,\n ...rest\n };\n return result;\n }\n}\n","import {RegressionTransform as VgRegressionTransform} from 'vega';\nimport {RegressionTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for regression transform nodes\n */\nexport class RegressionTransformNode extends DataFlowNode {\n public clone() {\n return new RegressionTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: RegressionTransform) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? transform.on, specifiedAs[1] ?? transform.regression];\n }\n\n public dependentFields() {\n return new Set([this.transform.regression, this.transform.on, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `RegressionTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgRegressionTransform {\n const {regression, on, ...rest} = this.transform;\n const result: VgRegressionTransform = {\n type: 'regression',\n x: on,\n y: regression,\n ...rest\n };\n return result;\n }\n}\n","import {PivotTransform} from '../../transform';\nimport {duplicate, hash, unique} from '../../util';\nimport {PivotTransform as VgPivotTransform} from 'vega';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for pivot transform nodes.\n */\nexport class PivotTransformNode extends DataFlowNode {\n public clone() {\n return new PivotTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: PivotTransform) {\n super(parent);\n }\n\n public addDimensions(fields: readonly string[]) {\n this.transform.groupby = unique((this.transform.groupby ?? []).concat(fields), d => d);\n }\n\n public producedFields(): undefined {\n return undefined; // return undefined so that potentially everything can depend on the pivot\n }\n\n public dependentFields() {\n return new Set([this.transform.pivot, this.transform.value, ...(this.transform.groupby ?? [])]);\n }\n\n public hash() {\n return `PivotTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgPivotTransform {\n const {pivot, value, groupby, limit, op} = this.transform;\n return {\n type: 'pivot',\n field: pivot,\n value,\n ...(limit !== undefined ? {limit} : {}),\n ...(op !== undefined ? {op} : {}),\n ...(groupby !== undefined ? {groupby} : {})\n };\n }\n}\n","import {SampleTransform as VgSampleTransform} from 'vega';\nimport {SampleTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for the sample transform nodes\n */\nexport class SampleTransformNode extends DataFlowNode {\n public clone() {\n return new SampleTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: SampleTransform) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set();\n }\n\n public producedFields() {\n return new Set();\n }\n\n public hash() {\n return `SampleTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgSampleTransform {\n return {\n type: 'sample',\n size: this.transform.sample\n };\n }\n}\n","import {InlineDataset, isUrlData} from '../../data';\nimport {Dict} from '../../util';\nimport {VgData} from '../../vega.schema';\nimport {DataComponent} from './';\nimport {AggregateNode} from './aggregate';\nimport {BinNode} from './bin';\nimport {CalculateNode} from './calculate';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {DensityTransformNode} from './density';\nimport {FacetNode} from './facet';\nimport {FilterNode} from './filter';\nimport {FilterInvalidNode} from './filterinvalid';\nimport {FlattenTransformNode} from './flatten';\nimport {FoldTransformNode} from './fold';\nimport {ParseNode} from './formatparse';\nimport {GeoJSONNode} from './geojson';\nimport {GeoPointNode} from './geopoint';\nimport {GraticuleNode} from './graticule';\nimport {IdentifierNode} from './identifier';\nimport {ImputeNode} from './impute';\nimport {JoinAggregateTransformNode} from './joinaggregate';\nimport {LoessTransformNode} from './loess';\nimport {LookupNode} from './lookup';\nimport {QuantileTransformNode} from './quantile';\nimport {RegressionTransformNode} from './regression';\nimport {PivotTransformNode} from './pivot';\nimport {SampleTransformNode} from './sample';\nimport {SequenceNode} from './sequence';\nimport {SourceNode} from './source';\nimport {StackNode} from './stack';\nimport {TimeUnitNode} from './timeunit';\nimport {WindowTransformNode} from './window';\n\nfunction makeWalkTree(data: VgData[]) {\n // to name datasources\n let datasetIndex = 0;\n\n /**\n * Recursively walk down the tree.\n */\n function walkTree(node: DataFlowNode, dataSource: VgData) {\n if (node instanceof SourceNode) {\n // If the source is a named data source or a data source with values, we need\n // to put it in a different data source. Otherwise, Vega may override the data.\n if (!node.isGenerator && !isUrlData(node.data)) {\n data.push(dataSource);\n const newData: VgData = {\n name: null,\n source: dataSource.name,\n transform: []\n };\n dataSource = newData;\n }\n }\n\n if (node instanceof ParseNode) {\n if (node.parent instanceof SourceNode && !dataSource.source) {\n // If node's parent is a root source and the data source does not refer to another data source, use normal format parse\n dataSource.format = {\n ...(dataSource.format ?? {}),\n parse: node.assembleFormatParse()\n };\n\n // add calculates for all nested fields\n dataSource.transform.push(...node.assembleTransforms(true));\n } else {\n // Otherwise use Vega expression to parse\n dataSource.transform.push(...node.assembleTransforms());\n }\n }\n\n if (node instanceof FacetNode) {\n if (!dataSource.name) {\n dataSource.name = `data_${datasetIndex++}`;\n }\n\n if (!dataSource.source || dataSource.transform.length > 0) {\n data.push(dataSource);\n node.data = dataSource.name;\n } else {\n node.data = dataSource.source;\n }\n\n data.push(...node.assemble());\n\n // break here because the rest of the tree has to be taken care of by the facet.\n return;\n }\n\n if (\n node instanceof GraticuleNode ||\n node instanceof SequenceNode ||\n node instanceof FilterInvalidNode ||\n node instanceof FilterNode ||\n node instanceof CalculateNode ||\n node instanceof GeoPointNode ||\n node instanceof AggregateNode ||\n node instanceof LookupNode ||\n node instanceof WindowTransformNode ||\n node instanceof JoinAggregateTransformNode ||\n node instanceof FoldTransformNode ||\n node instanceof FlattenTransformNode ||\n node instanceof DensityTransformNode ||\n node instanceof LoessTransformNode ||\n node instanceof QuantileTransformNode ||\n node instanceof RegressionTransformNode ||\n node instanceof IdentifierNode ||\n node instanceof SampleTransformNode ||\n node instanceof PivotTransformNode\n ) {\n dataSource.transform.push(node.assemble());\n }\n\n if (\n node instanceof BinNode ||\n node instanceof TimeUnitNode ||\n node instanceof ImputeNode ||\n node instanceof StackNode ||\n node instanceof GeoJSONNode\n ) {\n dataSource.transform.push(...node.assemble());\n }\n\n if (node instanceof OutputNode) {\n if (dataSource.source && dataSource.transform.length === 0) {\n node.setSource(dataSource.source);\n } else if (node.parent instanceof OutputNode) {\n // Note that an output node may be required but we still do not assemble a\n // separate data source for it.\n node.setSource(dataSource.name);\n } else {\n if (!dataSource.name) {\n dataSource.name = `data_${datasetIndex++}`;\n }\n\n // Here we set the name of the datasource we generated. From now on\n // other assemblers can use it.\n node.setSource(dataSource.name);\n\n // if this node has more than one child, we will add a datasource automatically\n if (node.numChildren() === 1) {\n data.push(dataSource);\n const newData: VgData = {\n name: null,\n source: dataSource.name,\n transform: []\n };\n dataSource = newData;\n }\n }\n }\n\n switch (node.numChildren()) {\n case 0:\n // done\n if (node instanceof OutputNode && (!dataSource.source || dataSource.transform.length > 0)) {\n // do not push empty datasources that are simply references\n data.push(dataSource);\n }\n break;\n case 1:\n walkTree(node.children[0], dataSource);\n break;\n default: {\n if (!dataSource.name) {\n dataSource.name = `data_${datasetIndex++}`;\n }\n\n let source = dataSource.name;\n if (!dataSource.source || dataSource.transform.length > 0) {\n data.push(dataSource);\n } else {\n source = dataSource.source;\n }\n\n for (const child of node.children) {\n const newData: VgData = {\n name: null,\n source: source,\n transform: []\n };\n walkTree(child, newData);\n }\n break;\n }\n }\n }\n\n return walkTree;\n}\n\n/**\n * Assemble data sources that are derived from faceted data.\n */\nexport function assembleFacetData(root: FacetNode): VgData[] {\n const data: VgData[] = [];\n const walkTree = makeWalkTree(data);\n\n for (const child of root.children) {\n walkTree(child, {\n source: root.name,\n name: null,\n transform: []\n });\n }\n\n return data;\n}\n\n/**\n * Create Vega data array from a given compiled model and append all of them to the given array\n *\n * @param model\n * @param data array\n * @return modified data array\n */\nexport function assembleRootData(dataComponent: DataComponent, datasets: Dict): VgData[] {\n const data: VgData[] = [];\n\n // dataComponent.sources.forEach(debug);\n // draw(dataComponent.sources);\n\n const walkTree = makeWalkTree(data);\n\n let sourceIndex = 0;\n\n for (const root of dataComponent.sources) {\n // assign a name if the source does not have a name yet\n if (!root.hasName()) {\n root.dataName = `source_${sourceIndex++}`;\n }\n\n const newData: VgData = root.assemble();\n\n walkTree(root, newData);\n }\n\n // remove empty transform arrays for cleaner output\n for (const d of data) {\n if (d.transform.length === 0) {\n delete d.transform;\n }\n }\n\n // move sources without transforms (the ones that are potentially used in lookups) to the beginning\n let whereTo = 0;\n for (const [i, d] of data.entries()) {\n if ((d.transform ?? []).length === 0 && !d.source) {\n data.splice(whereTo++, 0, data.splice(i, 1)[0]);\n }\n }\n\n // now fix the from references in lookup transforms\n for (const d of data) {\n for (const t of d.transform ?? []) {\n if (t.type === 'lookup') {\n t.from = dataComponent.outputNodes[t.from].getSource();\n }\n }\n }\n\n // inline values for datasets that are in the datastore\n for (const d of data) {\n if (d.name in datasets) {\n d.values = datasets[d.name];\n }\n }\n\n return data;\n}\n","import {AxisOrient, SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {FacetChannel, FACET_CHANNELS} from '../../channel';\nimport {title as fieldDefTitle} from '../../channeldef';\nimport {contains, getFirstDefined} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {assembleAxis} from '../axis/assemble';\nimport {FacetModel} from '../facet';\nimport {parseGuideResolve} from '../resolve';\nimport {getHeaderProperty} from './common';\nimport {HeaderChannel, HeaderComponent} from './component';\n\nexport function getHeaderType(orient: AxisOrient | SignalRef) {\n if (orient === 'top' || orient === 'left' || isSignalRef(orient)) {\n // we always use header for orient signal since we can't dynamically make header becomes footer\n return 'header';\n }\n return 'footer';\n}\n\nexport function parseFacetHeaders(model: FacetModel) {\n for (const channel of FACET_CHANNELS) {\n parseFacetHeader(model, channel);\n }\n\n mergeChildAxis(model, 'x');\n mergeChildAxis(model, 'y');\n}\n\nfunction parseFacetHeader(model: FacetModel, channel: FacetChannel) {\n const {facet, config, child, component} = model;\n if (model.channelHasField(channel)) {\n const fieldDef = facet[channel];\n const titleConfig = getHeaderProperty('title', null, config, channel);\n let title = fieldDefTitle(fieldDef, config, {\n allowDisabling: true,\n includeDefault: titleConfig === undefined || !!titleConfig\n });\n\n if (child.component.layoutHeaders[channel].title) {\n // TODO: better handle multiline titles\n title = isArray(title) ? title.join(', ') : title;\n\n // merge title with child to produce \"Title / Subtitle / Sub-subtitle\"\n title += ` / ${child.component.layoutHeaders[channel].title}`;\n child.component.layoutHeaders[channel].title = null;\n }\n\n const labelOrient = getHeaderProperty('labelOrient', fieldDef.header, config, channel);\n\n const labels =\n fieldDef.header !== null ? getFirstDefined(fieldDef.header?.labels, config.header.labels, true) : false;\n const headerType = contains(['bottom', 'right'], labelOrient) ? 'footer' : 'header';\n\n component.layoutHeaders[channel] = {\n title: fieldDef.header !== null ? title : null,\n facetFieldDef: fieldDef,\n [headerType]: channel === 'facet' ? [] : [makeHeaderComponent(model, channel, labels)]\n };\n }\n}\n\nfunction makeHeaderComponent(model: FacetModel, channel: HeaderChannel, labels: boolean): HeaderComponent {\n const sizeType = channel === 'row' ? 'height' : 'width';\n\n return {\n labels,\n sizeSignal: model.child.component.layoutSize.get(sizeType) ? model.child.getSizeSignalRef(sizeType) : undefined,\n axes: []\n };\n}\n\nfunction mergeChildAxis(model: FacetModel, channel: 'x' | 'y') {\n const {child} = model;\n if (child.component.axes[channel]) {\n const {layoutHeaders, resolve} = model.component;\n resolve.axis[channel] = parseGuideResolve(resolve, channel);\n\n if (resolve.axis[channel] === 'shared') {\n // For shared axis, move the axes to facet's header or footer\n const headerChannel = channel === 'x' ? 'column' : 'row';\n\n const layoutHeader = layoutHeaders[headerChannel];\n for (const axisComponent of child.component.axes[channel]) {\n const headerType = getHeaderType(axisComponent.get('orient'));\n layoutHeader[headerType] ??= [makeHeaderComponent(model, headerChannel, false)];\n\n // FIXME: assemble shouldn't be called here, but we do it this way so we only extract the main part of the axes\n const mainAxis = assembleAxis(axisComponent, 'main', model.config, {header: true});\n if (mainAxis) {\n // LayoutHeader no longer keep track of property precedence, thus let's combine.\n layoutHeader[headerType][0].axes.push(mainAxis);\n }\n axisComponent.mainExtracted = true;\n }\n } else {\n // Otherwise do nothing for independent axes\n }\n }\n}\n","import {getPositionScaleChannel, getSizeChannel, POSITION_SCALE_CHANNELS} from '../../channel';\nimport {getViewConfigContinuousSize, getViewConfigDiscreteSize} from '../../config';\nimport {hasDiscreteDomain} from '../../scale';\nimport {isStep} from '../../spec/base';\nimport {isVgRangeStep} from '../../vega.schema';\nimport {ConcatModel} from '../concat';\nimport {Model} from '../model';\nimport {defaultScaleResolve} from '../resolve';\nimport {Explicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {getSizeTypeFromLayoutSizeType, LayoutSize, LayoutSizeIndex, LayoutSizeType} from './component';\n\nexport function parseLayerLayoutSize(model: Model) {\n parseChildrenLayoutSize(model);\n\n parseNonUnitLayoutSizeForChannel(model, 'width');\n parseNonUnitLayoutSizeForChannel(model, 'height');\n}\n\nexport function parseConcatLayoutSize(model: ConcatModel) {\n parseChildrenLayoutSize(model);\n\n // for columns === 1 (vconcat), we can completely merge width. Otherwise, we can treat merged width as childWidth.\n const widthType = model.layout.columns === 1 ? 'width' : 'childWidth';\n\n // for columns === undefined (hconcat), we can completely merge height. Otherwise, we can treat merged height as childHeight.\n const heightType = model.layout.columns === undefined ? 'height' : 'childHeight';\n\n parseNonUnitLayoutSizeForChannel(model, widthType);\n parseNonUnitLayoutSizeForChannel(model, heightType);\n}\n\nexport function parseChildrenLayoutSize(model: Model) {\n for (const child of model.children) {\n child.parseLayoutSize();\n }\n}\n\n/**\n * Merge child layout size (width or height).\n */\nfunction parseNonUnitLayoutSizeForChannel(model: Model, layoutSizeType: LayoutSizeType) {\n /*\n * For concat, the parent width or height might not be the same as the children's shared height.\n * For example, hconcat's subviews may share width, but the shared width is not the hconcat view's width.\n *\n * layoutSizeType represents the output of the view (could be childWidth/childHeight/width/height)\n * while the sizeType represents the properties of the child.\n */\n const sizeType = getSizeTypeFromLayoutSizeType(layoutSizeType);\n const channel = getPositionScaleChannel(sizeType);\n const resolve = model.component.resolve;\n const layoutSizeCmpt = model.component.layoutSize;\n\n let mergedSize: Explicit;\n // Try to merge layout size\n for (const child of model.children) {\n const childSize = child.component.layoutSize.getWithExplicit(sizeType);\n const scaleResolve = resolve.scale[channel] ?? defaultScaleResolve(channel, model);\n if (scaleResolve === 'independent' && childSize.value === 'step') {\n // Do not merge independent scales with range-step as their size depends\n // on the scale domains, which can be different between scales.\n mergedSize = undefined;\n break;\n }\n\n if (mergedSize) {\n if (scaleResolve === 'independent' && mergedSize.value !== childSize.value) {\n // For independent scale, only merge if all the sizes are the same.\n // If the values are different, abandon the merge!\n mergedSize = undefined;\n break;\n }\n mergedSize = mergeValuesWithExplicit(mergedSize, childSize, sizeType, '');\n } else {\n mergedSize = childSize;\n }\n }\n\n if (mergedSize) {\n // If merged, rename size and set size of all children.\n for (const child of model.children) {\n model.renameSignal(child.getName(sizeType), model.getName(layoutSizeType));\n child.component.layoutSize.set(sizeType, 'merged', false);\n }\n layoutSizeCmpt.setWithExplicit(layoutSizeType, mergedSize);\n } else {\n layoutSizeCmpt.setWithExplicit(layoutSizeType, {\n explicit: false,\n value: undefined\n });\n }\n}\n\nexport function parseUnitLayoutSize(model: UnitModel) {\n const {size, component} = model;\n for (const channel of POSITION_SCALE_CHANNELS) {\n const sizeType = getSizeChannel(channel);\n\n if (size[sizeType]) {\n const specifiedSize = size[sizeType];\n component.layoutSize.set(sizeType, isStep(specifiedSize) ? 'step' : specifiedSize, true);\n } else {\n const defaultSize = defaultUnitSize(model, sizeType);\n component.layoutSize.set(sizeType, defaultSize, false);\n }\n }\n}\n\nfunction defaultUnitSize(model: UnitModel, sizeType: 'width' | 'height'): LayoutSize {\n const channel = sizeType === 'width' ? 'x' : 'y';\n const config = model.config;\n const scaleComponent = model.getScaleComponent(channel);\n\n if (scaleComponent) {\n const scaleType = scaleComponent.get('type');\n const range = scaleComponent.get('range');\n\n if (hasDiscreteDomain(scaleType)) {\n const size = getViewConfigDiscreteSize(config.view, sizeType);\n if (isVgRangeStep(range) || isStep(size)) {\n // For discrete domain with range.step, use dynamic width/height\n return 'step';\n } else {\n return size;\n }\n } else {\n return getViewConfigContinuousSize(config.view, sizeType);\n }\n } else if (model.hasProjection || model.mark === 'arc') {\n // arc should use continuous size by default otherwise the pie is extremely small\n return getViewConfigContinuousSize(config.view, sizeType);\n } else {\n const size = getViewConfigDiscreteSize(config.view, sizeType);\n return isStep(size) ? size.step : size;\n }\n}\n","import {AggregateOp, LayoutAlign, NewSignal, SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {isBinning} from '../bin';\nimport {COLUMN, ExtendedChannel, FacetChannel, FACET_CHANNELS, POSITION_SCALE_CHANNELS, ROW} from '../channel';\nimport {FieldName, FieldRefOption, initFieldDef, TypedFieldDef, vgField} from '../channeldef';\nimport {Config} from '../config';\nimport {ExprRef, replaceExprRef} from '../expr';\nimport * as log from '../log';\nimport {hasDiscreteDomain} from '../scale';\nimport {DEFAULT_SORT_OP, EncodingSortField, isSortField, SortOrder} from '../sort';\nimport {NormalizedFacetSpec} from '../spec';\nimport {EncodingFacetMapping, FacetFieldDef, FacetMapping, isFacetMapping} from '../spec/facet';\nimport {keys} from '../util';\nimport {isVgRangeStep, VgData, VgLayout, VgMarkGroup} from '../vega.schema';\nimport {buildModel} from './buildmodel';\nimport {assembleFacetData} from './data/assemble';\nimport {sortArrayIndexField} from './data/calculate';\nimport {parseData} from './data/parse';\nimport {assembleLabelTitle} from './header/assemble';\nimport {getHeaderChannel, getHeaderProperty} from './header/common';\nimport {HEADER_CHANNELS, HEADER_TYPES} from './header/component';\nimport {parseFacetHeaders} from './header/parse';\nimport {parseChildrenLayoutSize} from './layoutsize/parse';\nimport {Model, ModelWithField} from './model';\nimport {assembleDomain, getFieldFromDomain} from './scale/domain';\nimport {assembleFacetSignals} from './selection/assemble';\n\nexport function facetSortFieldName(\n fieldDef: FacetFieldDef,\n sort: EncodingSortField,\n opt?: FieldRefOption\n) {\n return vgField(sort, {suffix: `by_${vgField(fieldDef)}`, ...(opt ?? {})});\n}\n\nexport class FacetModel extends ModelWithField {\n public readonly facet: EncodingFacetMapping;\n\n public readonly child: Model;\n\n public readonly children: Model[];\n\n constructor(spec: NormalizedFacetSpec, parent: Model, parentGivenName: string, config: Config) {\n super(spec, 'facet', parent, parentGivenName, config, spec.resolve);\n\n this.child = buildModel(spec.spec, this, this.getName('child'), undefined, config);\n this.children = [this.child];\n\n this.facet = this.initFacet(spec.facet);\n }\n\n private initFacet(\n facet: FacetFieldDef | FacetMapping\n ): EncodingFacetMapping {\n // clone to prevent side effect to the original spec\n if (!isFacetMapping(facet)) {\n return {facet: this.initFacetFieldDef(facet, 'facet')};\n }\n\n const channels = keys(facet);\n const normalizedFacet = {};\n for (const channel of channels) {\n if (![ROW, COLUMN].includes(channel)) {\n // Drop unsupported channel\n log.warn(log.message.incompatibleChannel(channel, 'facet'));\n break;\n }\n\n const fieldDef = facet[channel];\n if (fieldDef.field === undefined) {\n log.warn(log.message.emptyFieldDef(fieldDef, channel));\n break;\n }\n\n normalizedFacet[channel] = this.initFacetFieldDef(fieldDef, channel);\n }\n\n return normalizedFacet;\n }\n\n private initFacetFieldDef(fieldDef: FacetFieldDef, channel: FacetChannel) {\n // Cast because we call initFieldDef, which assumes general FieldDef.\n // However, FacetFieldDef is a bit more constrained than the general FieldDef\n const facetFieldDef = initFieldDef(fieldDef, channel) as FacetFieldDef;\n if (facetFieldDef.header) {\n facetFieldDef.header = replaceExprRef(facetFieldDef.header);\n } else if (facetFieldDef.header === null) {\n facetFieldDef.header = null;\n }\n return facetFieldDef;\n }\n\n public channelHasField(channel: ExtendedChannel): boolean {\n return !!this.facet[channel];\n }\n\n public fieldDef(channel: ExtendedChannel): TypedFieldDef {\n return this.facet[channel];\n }\n\n public parseData() {\n this.component.data = parseData(this);\n this.child.parseData();\n }\n\n public parseLayoutSize() {\n parseChildrenLayoutSize(this);\n }\n\n public parseSelections() {\n // As a facet has a single child, the selection components are the same.\n // The child maintains its selections to assemble signals, which remain\n // within its unit.\n this.child.parseSelections();\n this.component.selection = this.child.component.selection;\n }\n\n public parseMarkGroup() {\n this.child.parseMarkGroup();\n }\n\n public parseAxesAndHeaders() {\n this.child.parseAxesAndHeaders();\n\n parseFacetHeaders(this);\n }\n\n public assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[] {\n return this.child.assembleSelectionTopLevelSignals(signals);\n }\n\n public assembleSignals(): NewSignal[] {\n this.child.assembleSignals();\n return [];\n }\n\n public assembleSelectionData(data: readonly VgData[]): readonly VgData[] {\n return this.child.assembleSelectionData(data);\n }\n\n private getHeaderLayoutMixins(): VgLayout {\n const layoutMixins: VgLayout = {};\n\n for (const channel of FACET_CHANNELS) {\n for (const headerType of HEADER_TYPES) {\n const layoutHeaderComponent = this.component.layoutHeaders[channel];\n const headerComponent = layoutHeaderComponent[headerType];\n\n const {facetFieldDef} = layoutHeaderComponent;\n if (facetFieldDef) {\n const titleOrient = getHeaderProperty('titleOrient', facetFieldDef.header, this.config, channel);\n\n if (['right', 'bottom'].includes(titleOrient)) {\n const headerChannel = getHeaderChannel(channel, titleOrient);\n layoutMixins.titleAnchor ??= {};\n layoutMixins.titleAnchor[headerChannel] = 'end';\n }\n }\n\n if (headerComponent?.[0]) {\n // set header/footerBand\n const sizeType = channel === 'row' ? 'height' : 'width';\n const bandType = headerType === 'header' ? 'headerBand' : 'footerBand';\n if (channel !== 'facet' && !this.child.component.layoutSize.get(sizeType)) {\n // If facet child does not have size signal, then apply headerBand\n layoutMixins[bandType] ??= {};\n layoutMixins[bandType][channel] = 0.5;\n }\n\n if (layoutHeaderComponent.title) {\n layoutMixins.offset ??= {};\n layoutMixins.offset[channel === 'row' ? 'rowTitle' : 'columnTitle'] = 10;\n }\n }\n }\n }\n return layoutMixins;\n }\n\n protected assembleDefaultLayout(): VgLayout {\n const {column, row} = this.facet;\n\n const columns = column ? this.columnDistinctSignal() : row ? 1 : undefined;\n\n let align: LayoutAlign = 'all';\n\n // Do not align the cells if the scale corresponding to the direction is indepent.\n // We always align when we facet into both row and column.\n if (!row && this.component.resolve.scale.x === 'independent') {\n align = 'none';\n } else if (!column && this.component.resolve.scale.y === 'independent') {\n align = 'none';\n }\n\n return {\n ...this.getHeaderLayoutMixins(),\n\n ...(columns ? {columns} : {}),\n bounds: 'full',\n align\n };\n }\n\n public assembleLayoutSignals(): NewSignal[] {\n // FIXME(https://github.com/vega/vega-lite/issues/1193): this can be incorrect if we have independent scales.\n return this.child.assembleLayoutSignals();\n }\n\n private columnDistinctSignal() {\n if (this.parent && this.parent instanceof FacetModel) {\n // For nested facet, we will add columns to group mark instead\n // See discussion in https://github.com/vega/vega/issues/952\n // and https://github.com/vega/vega-view/releases/tag/v1.2.6\n return undefined;\n } else {\n // In facetNode.assemble(), the name is always this.getName('column') + '_layout'.\n const facetLayoutDataName = this.getName('column_domain');\n return {signal: `length(data('${facetLayoutDataName}'))`};\n }\n }\n\n public assembleGroup(signals: NewSignal[]) {\n if (this.parent && this.parent instanceof FacetModel) {\n // Provide number of columns for layout.\n // See discussion in https://github.com/vega/vega/issues/952\n // and https://github.com/vega/vega-view/releases/tag/v1.2.6\n return {\n ...(this.channelHasField('column')\n ? {\n encode: {\n update: {\n // TODO(https://github.com/vega/vega-lite/issues/2759):\n // Correct the signal for facet of concat of facet_column\n columns: {field: vgField(this.facet.column, {prefix: 'distinct'})}\n }\n }\n }\n : {}),\n ...super.assembleGroup(signals)\n };\n }\n return super.assembleGroup(signals);\n }\n\n /**\n * Aggregate cardinality for calculating size\n */\n private getCardinalityAggregateForChild() {\n const fields: string[] = [];\n const ops: AggregateOp[] = [];\n const as: string[] = [];\n\n if (this.child instanceof FacetModel) {\n if (this.child.channelHasField('column')) {\n const field = vgField(this.child.facet.column);\n fields.push(field);\n ops.push('distinct');\n as.push(`distinct_${field}`);\n }\n } else {\n for (const channel of POSITION_SCALE_CHANNELS) {\n const childScaleComponent = this.child.component.scales[channel];\n if (childScaleComponent && !childScaleComponent.merged) {\n const type = childScaleComponent.get('type');\n const range = childScaleComponent.get('range');\n\n if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n const domain = assembleDomain(this.child, channel);\n const field = getFieldFromDomain(domain);\n if (field) {\n fields.push(field);\n ops.push('distinct');\n as.push(`distinct_${field}`);\n } else {\n log.warn(log.message.unknownField(channel));\n }\n }\n }\n }\n }\n return {fields, ops, as};\n }\n\n private assembleFacet() {\n const {name, data} = this.component.data.facetRoot;\n const {row, column} = this.facet;\n const {fields, ops, as} = this.getCardinalityAggregateForChild();\n const groupby: string[] = [];\n\n for (const channel of FACET_CHANNELS) {\n const fieldDef = this.facet[channel];\n if (fieldDef) {\n groupby.push(vgField(fieldDef));\n\n const {bin, sort} = fieldDef;\n\n if (isBinning(bin)) {\n groupby.push(vgField(fieldDef, {binSuffix: 'end'}));\n }\n\n if (isSortField(sort)) {\n const {field, op = DEFAULT_SORT_OP} = sort;\n const outputName = facetSortFieldName(fieldDef, sort);\n if (row && column) {\n // For crossed facet, use pre-calculate field as it requires a different groupby\n // For each calculated field, apply max and assign them to the same name as\n // all values of the same group should be the same anyway.\n fields.push(outputName);\n ops.push('max');\n as.push(outputName);\n } else {\n fields.push(field);\n ops.push(op);\n as.push(outputName);\n }\n } else if (isArray(sort)) {\n const outputName = sortArrayIndexField(fieldDef, channel);\n fields.push(outputName);\n ops.push('max');\n as.push(outputName);\n }\n }\n }\n\n const cross = !!row && !!column;\n\n return {\n name,\n data,\n groupby,\n ...(cross || fields.length > 0\n ? {\n aggregate: {\n ...(cross ? {cross} : {}),\n ...(fields.length ? {fields, ops, as} : {})\n }\n }\n : {})\n };\n }\n\n private facetSortFields(channel: FacetChannel): string[] {\n const {facet} = this;\n const fieldDef = facet[channel];\n\n if (fieldDef) {\n if (isSortField(fieldDef.sort)) {\n return [facetSortFieldName(fieldDef, fieldDef.sort, {expr: 'datum'})];\n } else if (isArray(fieldDef.sort)) {\n return [sortArrayIndexField(fieldDef, channel, {expr: 'datum'})];\n }\n return [vgField(fieldDef, {expr: 'datum'})];\n }\n return [];\n }\n\n private facetSortOrder(channel: FacetChannel): SortOrder[] {\n const {facet} = this;\n const fieldDef = facet[channel];\n if (fieldDef) {\n const {sort} = fieldDef;\n const order = (isSortField(sort) ? sort.order : !isArray(sort) && sort) || 'ascending';\n return [order];\n }\n return [];\n }\n\n private assembleLabelTitle() {\n const {facet, config} = this;\n if (facet.facet) {\n // Facet always uses title to display labels\n return assembleLabelTitle(facet.facet, 'facet', config);\n }\n\n const ORTHOGONAL_ORIENT = {\n row: ['top', 'bottom'],\n column: ['left', 'right']\n };\n\n for (const channel of HEADER_CHANNELS) {\n if (facet[channel]) {\n const labelOrient = getHeaderProperty('labelOrient', facet[channel]?.header, config, channel);\n if (ORTHOGONAL_ORIENT[channel].includes(labelOrient)) {\n // Row/Column with orthogonal labelOrient must use title to display labels\n return assembleLabelTitle(facet[channel], channel, config);\n }\n }\n }\n return undefined;\n }\n\n public assembleMarks(): VgMarkGroup[] {\n const {child} = this;\n\n // If we facet by two dimensions, we need to add a cross operator to the aggregation\n // so that we create all groups\n const facetRoot = this.component.data.facetRoot;\n const data = assembleFacetData(facetRoot);\n\n const encodeEntry = child.assembleGroupEncodeEntry(false);\n\n const title = this.assembleLabelTitle() || child.assembleTitle();\n const style = child.assembleGroupStyle();\n\n const markGroup = {\n name: this.getName('cell'),\n type: 'group',\n ...(title ? {title} : {}),\n ...(style ? {style} : {}),\n from: {\n facet: this.assembleFacet()\n },\n // TODO: move this to after data\n sort: {\n field: FACET_CHANNELS.map(c => this.facetSortFields(c)).flat(),\n order: FACET_CHANNELS.map(c => this.facetSortOrder(c)).flat()\n },\n ...(data.length > 0 ? {data: data} : {}),\n ...(encodeEntry ? {encode: {update: encodeEntry}} : {}),\n ...child.assembleGroup(assembleFacetSignals(this, []))\n };\n\n return [markGroup];\n }\n\n protected getMapping() {\n return this.facet;\n }\n}\n","import {AncestorParse, DataComponent} from '.';\nimport {\n Data,\n isGenerator,\n isGraticuleGenerator,\n isInlineData,\n isNamedData,\n isSequenceGenerator,\n isUrlData,\n DataSourceType,\n ParseValue\n} from '../../data';\nimport * as log from '../../log';\nimport {\n isAggregate,\n isBin,\n isCalculate,\n isDensity,\n isFilter,\n isFlatten,\n isFold,\n isImpute,\n isJoinAggregate,\n isLoess,\n isLookup,\n isPivot,\n isQuantile,\n isRegression,\n isSample,\n isStack,\n isTimeUnit,\n isWindow\n} from '../../transform';\nimport {deepEqual, mergeDeep} from '../../util';\nimport {isFacetModel, isLayerModel, isUnitModel, Model} from '../model';\nimport {requiresSelectionId} from '../selection';\nimport {materializeSelections} from '../selection/parse';\nimport {AggregateNode} from './aggregate';\nimport {BinNode} from './bin';\nimport {CalculateNode} from './calculate';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {DensityTransformNode} from './density';\nimport {FacetNode} from './facet';\nimport {FilterNode} from './filter';\nimport {FilterInvalidNode} from './filterinvalid';\nimport {FlattenTransformNode} from './flatten';\nimport {FoldTransformNode} from './fold';\nimport {\n getImplicitFromEncoding,\n getImplicitFromFilterTransform,\n getImplicitFromSelection,\n ParseNode\n} from './formatparse';\nimport {GeoJSONNode} from './geojson';\nimport {GeoPointNode} from './geopoint';\nimport {GraticuleNode} from './graticule';\nimport {IdentifierNode} from './identifier';\nimport {ImputeNode} from './impute';\nimport {JoinAggregateTransformNode} from './joinaggregate';\nimport {makeJoinAggregateFromFacet} from './joinaggregatefacet';\nimport {LoessTransformNode} from './loess';\nimport {LookupNode} from './lookup';\nimport {PivotTransformNode} from './pivot';\nimport {QuantileTransformNode} from './quantile';\nimport {RegressionTransformNode} from './regression';\nimport {SampleTransformNode} from './sample';\nimport {SequenceNode} from './sequence';\nimport {SourceNode} from './source';\nimport {StackNode} from './stack';\nimport {TimeUnitNode} from './timeunit';\nimport {WindowTransformNode} from './window';\n\nexport function findSource(data: Data, sources: SourceNode[]) {\n for (const other of sources) {\n const otherData = other.data;\n\n // if both datasets have a name defined, we cannot merge\n if (data.name && other.hasName() && data.name !== other.dataName) {\n continue;\n }\n\n const formatMesh = data['format']?.mesh;\n const otherFeature = otherData.format?.feature;\n\n // feature and mesh are mutually exclusive\n if (formatMesh && otherFeature) {\n continue;\n }\n\n // we have to extract the same feature or mesh\n const formatFeature = data['format']?.feature;\n if ((formatFeature || otherFeature) && formatFeature !== otherFeature) {\n continue;\n }\n\n const otherMesh = otherData.format?.mesh;\n if ((formatMesh || otherMesh) && formatMesh !== otherMesh) {\n continue;\n }\n\n if (isInlineData(data) && isInlineData(otherData)) {\n if (deepEqual(data.values, otherData.values)) {\n return other;\n }\n } else if (isUrlData(data) && isUrlData(otherData)) {\n if (data.url === otherData.url) {\n return other;\n }\n } else if (isNamedData(data)) {\n if (data.name === other.dataName) {\n return other;\n }\n }\n }\n return null;\n}\n\nfunction parseRoot(model: Model, sources: SourceNode[]): DataFlowNode {\n if (model.data || !model.parent) {\n // if the model defines a data source or is the root, create a source node\n\n if (model.data === null) {\n // data: null means we should ignore the parent's data so we just create a new data source\n const source = new SourceNode({values: []});\n sources.push(source);\n return source;\n }\n\n const existingSource = findSource(model.data, sources);\n\n if (existingSource) {\n if (!isGenerator(model.data)) {\n existingSource.data.format = mergeDeep({}, model.data.format, existingSource.data.format);\n }\n\n // if the new source has a name but the existing one does not, we can set it\n if (!existingSource.hasName() && model.data.name) {\n existingSource.dataName = model.data.name;\n }\n\n return existingSource;\n } else {\n const source = new SourceNode(model.data);\n sources.push(source);\n return source;\n }\n } else {\n // If we don't have a source defined (overriding parent's data), use the parent's facet root or main.\n return model.parent.component.data.facetRoot\n ? model.parent.component.data.facetRoot\n : model.parent.component.data.main;\n }\n}\n\n/**\n * Parses a transform array into a chain of connected dataflow nodes.\n */\nexport function parseTransformArray(head: DataFlowNode, model: Model, ancestorParse: AncestorParse): DataFlowNode {\n let lookupCounter = 0;\n\n for (const t of model.transforms) {\n let derivedType: ParseValue = undefined;\n let transformNode: DataFlowNode;\n\n if (isCalculate(t)) {\n transformNode = head = new CalculateNode(head, t);\n derivedType = 'derived';\n } else if (isFilter(t)) {\n const implicit = getImplicitFromFilterTransform(t);\n transformNode = head = ParseNode.makeWithAncestors(head, {}, implicit, ancestorParse) ?? head;\n\n head = new FilterNode(head, model, t.filter);\n } else if (isBin(t)) {\n transformNode = head = BinNode.makeFromTransform(head, t, model);\n derivedType = 'number';\n } else if (isTimeUnit(t)) {\n derivedType = 'date';\n const parsedAs = ancestorParse.getWithExplicit(t.field);\n // Create parse node because the input to time unit is always date.\n if (parsedAs.value === undefined) {\n head = new ParseNode(head, {[t.field]: derivedType});\n ancestorParse.set(t.field, derivedType, false);\n }\n transformNode = head = TimeUnitNode.makeFromTransform(head, t);\n } else if (isAggregate(t)) {\n transformNode = head = AggregateNode.makeFromTransform(head, t);\n derivedType = 'number';\n if (requiresSelectionId(model)) {\n head = new IdentifierNode(head);\n }\n } else if (isLookup(t)) {\n transformNode = head = LookupNode.make(head, model, t, lookupCounter++);\n derivedType = 'derived';\n } else if (isWindow(t)) {\n transformNode = head = new WindowTransformNode(head, t);\n derivedType = 'number';\n } else if (isJoinAggregate(t)) {\n transformNode = head = new JoinAggregateTransformNode(head, t);\n derivedType = 'number';\n } else if (isStack(t)) {\n transformNode = head = StackNode.makeFromTransform(head, t);\n derivedType = 'derived';\n } else if (isFold(t)) {\n transformNode = head = new FoldTransformNode(head, t);\n derivedType = 'derived';\n } else if (isFlatten(t)) {\n transformNode = head = new FlattenTransformNode(head, t);\n derivedType = 'derived';\n } else if (isPivot(t)) {\n transformNode = head = new PivotTransformNode(head, t);\n derivedType = 'derived';\n } else if (isSample(t)) {\n head = new SampleTransformNode(head, t);\n } else if (isImpute(t)) {\n transformNode = head = ImputeNode.makeFromTransform(head, t);\n derivedType = 'derived';\n } else if (isDensity(t)) {\n transformNode = head = new DensityTransformNode(head, t);\n derivedType = 'derived';\n } else if (isQuantile(t)) {\n transformNode = head = new QuantileTransformNode(head, t);\n derivedType = 'derived';\n } else if (isRegression(t)) {\n transformNode = head = new RegressionTransformNode(head, t);\n derivedType = 'derived';\n } else if (isLoess(t)) {\n transformNode = head = new LoessTransformNode(head, t);\n derivedType = 'derived';\n } else {\n log.warn(log.message.invalidTransformIgnored(t));\n continue;\n }\n\n if (transformNode && derivedType !== undefined) {\n for (const field of transformNode.producedFields() ?? []) {\n ancestorParse.set(field, derivedType, false);\n }\n }\n }\n\n return head;\n}\n\n/*\nDescription of the dataflow (http://asciiflow.com/):\n +--------+\n | Source |\n +---+----+\n |\n v\n FormatParse\n (explicit)\n |\n v\n Transforms\n(Filter, Calculate, Binning, TimeUnit, Aggregate, Window, ...)\n |\n v\n FormatParse\n (implicit)\n |\n v\n Binning (in `encoding`)\n |\n v\n Timeunit (in `encoding`)\n |\n v\nFormula From Sort Array\n |\n v\n +--+--+\n | Raw |\n +-----+\n |\n v\n Aggregate (in `encoding`)\n |\n v\n Stack (in `encoding`)\n |\n v\n Invalid Filter\n |\n v\n +----------+\n | Main |\n +----------+\n |\n v\n +-------+\n | Facet |----> \"column\", \"column-layout\", and \"row\"\n +-------+\n |\n v\n ...Child data...\n*/\n\nexport function parseData(model: Model): DataComponent {\n let head = parseRoot(model, model.component.data.sources);\n\n const {outputNodes, outputNodeRefCounts} = model.component.data;\n const ancestorParse = model.parent ? model.parent.component.data.ancestorParse.clone() : new AncestorParse();\n const data = model.data;\n\n if (isGenerator(data)) {\n // insert generator transform\n if (isSequenceGenerator(data)) {\n head = new SequenceNode(head, data.sequence);\n } else if (isGraticuleGenerator(data)) {\n head = new GraticuleNode(head, data.graticule);\n }\n // no parsing necessary for generator\n ancestorParse.parseNothing = true;\n } else if (data?.format?.parse === null) {\n // format.parse: null means disable parsing\n ancestorParse.parseNothing = true;\n }\n\n head = ParseNode.makeExplicit(head, model, ancestorParse) ?? head;\n\n // Default discrete selections require an identifer transform to\n // uniquely identify data points. Add this transform at the head of\n // the pipeline such that the identifier field is available for all\n // subsequent datasets. During optimization, we will remove this\n // transform if it proves to be unnecessary. Additional identifier\n // transforms will be necessary when new tuples are constructed\n // (e.g., post-aggregation).\n head = new IdentifierNode(head);\n\n // HACK: This is equivalent for merging bin extent for union scale.\n // FIXME(https://github.com/vega/vega-lite/issues/2270): Correctly merge extent / bin node for shared bin scale\n const parentIsLayer = model.parent && isLayerModel(model.parent);\n if (isUnitModel(model) || isFacetModel(model)) {\n if (parentIsLayer) {\n head = BinNode.makeFromEncoding(head, model) ?? head;\n }\n }\n\n if (model.transforms.length > 0) {\n head = parseTransformArray(head, model, ancestorParse);\n }\n\n // create parse nodes for fields that need to be parsed (or flattened) implicitly\n const implicitSelection = getImplicitFromSelection(model);\n const implicitEncoding = getImplicitFromEncoding(model);\n head = ParseNode.makeWithAncestors(head, {}, {...implicitSelection, ...implicitEncoding}, ancestorParse) ?? head;\n\n if (isUnitModel(model)) {\n head = GeoJSONNode.parseAll(head, model);\n head = GeoPointNode.parseAll(head, model);\n }\n\n if (isUnitModel(model) || isFacetModel(model)) {\n if (!parentIsLayer) {\n head = BinNode.makeFromEncoding(head, model) ?? head;\n }\n\n head = TimeUnitNode.makeFromEncoding(head, model) ?? head;\n head = CalculateNode.parseAllForSortIndex(head, model);\n }\n\n // add an output node pre aggregation\n const rawName = model.getDataName(DataSourceType.Raw);\n const raw = new OutputNode(head, rawName, DataSourceType.Raw, outputNodeRefCounts);\n outputNodes[rawName] = raw;\n head = raw;\n\n if (isUnitModel(model)) {\n const agg = AggregateNode.makeFromEncoding(head, model);\n if (agg) {\n head = agg;\n\n if (requiresSelectionId(model)) {\n head = new IdentifierNode(head);\n }\n }\n head = ImputeNode.makeFromEncoding(head, model) ?? head;\n head = StackNode.makeFromEncoding(head, model) ?? head;\n }\n\n if (isUnitModel(model)) {\n head = FilterInvalidNode.make(head, model) ?? head;\n }\n\n // output node for marks\n const mainName = model.getDataName(DataSourceType.Main);\n const main = new OutputNode(head, mainName, DataSourceType.Main, outputNodeRefCounts);\n outputNodes[mainName] = main;\n head = main;\n\n if (isUnitModel(model)) {\n materializeSelections(model, main);\n }\n\n // add facet marker\n let facetRoot = null;\n if (isFacetModel(model)) {\n const facetName = model.getName('facet');\n\n // Derive new aggregate for facet's sort field\n // augment data source with new fields for crossed facet\n head = makeJoinAggregateFromFacet(head, model.facet) ?? head;\n\n facetRoot = new FacetNode(head, model, facetName, main.getSource());\n outputNodes[facetName] = facetRoot;\n }\n\n return {\n ...model.component.data,\n outputNodes,\n outputNodeRefCounts,\n raw,\n main,\n facetRoot,\n ancestorParse\n };\n}\n","import {vgField} from '../../channeldef';\nimport {DEFAULT_SORT_OP, isSortField} from '../../sort';\nimport {FacetMapping} from '../../spec/facet';\nimport {facetSortFieldName} from '../facet';\nimport {DataFlowNode} from './dataflow';\nimport {JoinAggregateTransformNode} from './joinaggregate';\n\nexport function makeJoinAggregateFromFacet(\n parent: DataFlowNode,\n facet: FacetMapping\n): JoinAggregateTransformNode {\n const {row, column} = facet;\n if (row && column) {\n let newParent = null;\n // only need to make one for crossed facet\n for (const fieldDef of [row, column]) {\n if (isSortField(fieldDef.sort)) {\n const {field, op = DEFAULT_SORT_OP} = fieldDef.sort;\n parent = newParent = new JoinAggregateTransformNode(parent, {\n joinaggregate: [\n {\n op,\n field,\n as: facetSortFieldName(fieldDef, fieldDef.sort, {forAs: true})\n }\n ],\n groupby: [vgField(fieldDef)]\n });\n }\n }\n return newParent;\n }\n return null;\n}\n","import {NewSignal, SignalRef} from 'vega';\nimport {Config} from '../config';\nimport * as log from '../log';\nimport {isHConcatSpec, isVConcatSpec, NormalizedConcatSpec, NormalizedSpec} from '../spec';\nimport {keys} from '../util';\nimport {VgData, VgLayout} from '../vega.schema';\nimport {buildModel} from './buildmodel';\nimport {parseData} from './data/parse';\nimport {assembleLayoutSignals} from './layoutsize/assemble';\nimport {parseConcatLayoutSize} from './layoutsize/parse';\nimport {Model} from './model';\n\nexport class ConcatModel extends Model {\n public readonly children: Model[];\n\n constructor(spec: NormalizedConcatSpec, parent: Model, parentGivenName: string, config: Config) {\n super(spec, 'concat', parent, parentGivenName, config, spec.resolve);\n\n if (spec.resolve?.axis?.x === 'shared' || spec.resolve?.axis?.y === 'shared') {\n log.warn(log.message.CONCAT_CANNOT_SHARE_AXIS);\n }\n\n this.children = this.getChildren(spec).map((child, i) => {\n return buildModel(child, this, this.getName(`concat_${i}`), undefined, config);\n });\n }\n\n public parseData() {\n this.component.data = parseData(this);\n for (const child of this.children) {\n child.parseData();\n }\n }\n\n public parseSelections() {\n // Merge selections up the hierarchy so that they may be referenced\n // across unit specs. Persist their definitions within each child\n // to assemble signals which remain within output Vega unit groups.\n this.component.selection = {};\n for (const child of this.children) {\n child.parseSelections();\n for (const key of keys(child.component.selection)) {\n this.component.selection[key] = child.component.selection[key];\n }\n }\n }\n\n public parseMarkGroup() {\n for (const child of this.children) {\n child.parseMarkGroup();\n }\n }\n\n public parseAxesAndHeaders() {\n for (const child of this.children) {\n child.parseAxesAndHeaders();\n }\n\n // TODO(#2415): support shared axes\n }\n\n private getChildren(spec: NormalizedConcatSpec): NormalizedSpec[] {\n if (isVConcatSpec(spec)) {\n return spec.vconcat;\n } else if (isHConcatSpec(spec)) {\n return spec.hconcat;\n }\n return spec.concat;\n }\n\n public parseLayoutSize() {\n parseConcatLayoutSize(this);\n }\n\n public parseAxisGroup(): void {\n return null;\n }\n\n public assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[] {\n return this.children.reduce((sg, child) => child.assembleSelectionTopLevelSignals(sg), signals);\n }\n\n public assembleSignals(): NewSignal[] {\n this.children.forEach(child => child.assembleSignals());\n return [];\n }\n\n public assembleLayoutSignals(): NewSignal[] {\n const layoutSignals = assembleLayoutSignals(this);\n\n for (const child of this.children) {\n layoutSignals.push(...child.assembleLayoutSignals());\n }\n\n return layoutSignals;\n }\n\n public assembleSelectionData(data: readonly VgData[]): readonly VgData[] {\n return this.children.reduce((db, child) => child.assembleSelectionData(db), data);\n }\n\n public assembleMarks(): any[] {\n // only children have marks\n return this.children.map(child => {\n const title = child.assembleTitle();\n const style = child.assembleGroupStyle();\n const encodeEntry = child.assembleGroupEncodeEntry(false);\n\n return {\n type: 'group',\n name: child.getName('group'),\n ...(title ? {title} : {}),\n ...(style ? {style} : {}),\n ...(encodeEntry ? {encode: {update: encodeEntry}} : {}),\n ...child.assembleGroup()\n };\n });\n }\n\n protected assembleDefaultLayout(): VgLayout {\n const columns = this.layout.columns;\n return {\n ...(columns != null ? {columns: columns} : {}),\n bounds: 'full',\n // Use align each so it can work with multiple plots with different size\n align: 'each'\n };\n }\n}\n","import {Axis as VgAxis, SignalRef, Text} from 'vega';\nimport {\n AxisInternal,\n AxisPart,\n AxisPropsWithCondition,\n COMMON_AXIS_PROPERTIES_INDEX,\n ConditionalAxisProp\n} from '../../axis';\nimport {FieldDefBase} from '../../channeldef';\nimport {duplicate, Flag, keys} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {Split} from '../split';\n\nfunction isFalseOrNull(v: any) {\n return v === false || v === null;\n}\n\nexport type AxisComponentProps = Omit &\n Omit, 'title'> & {\n title: Text | FieldDefBase[] | SignalRef;\n labelExpr: string;\n disable: boolean;\n };\n\nconst AXIS_COMPONENT_PROPERTIES_INDEX: Flag = {\n disable: 1,\n gridScale: 1,\n scale: 1,\n ...COMMON_AXIS_PROPERTIES_INDEX,\n labelExpr: 1,\n encode: 1\n};\n\nexport const AXIS_COMPONENT_PROPERTIES = keys(AXIS_COMPONENT_PROPERTIES_INDEX);\n\nexport class AxisComponent extends Split {\n constructor(\n public readonly explicit: Partial = {},\n public readonly implicit: Partial = {},\n public mainExtracted = false\n ) {\n super();\n }\n\n public clone() {\n return new AxisComponent(duplicate(this.explicit), duplicate(this.implicit), this.mainExtracted);\n }\n\n public hasAxisPart(part: AxisPart) {\n // FIXME(https://github.com/vega/vega-lite/issues/2552) this method can be wrong if users use a Vega theme.\n\n if (part === 'axis') {\n // always has the axis container part\n return true;\n }\n\n if (part === 'grid' || part === 'title') {\n return !!this.get(part);\n }\n // Other parts are enabled by default, so they should not be false or null.\n return !isFalseOrNull(this.get(part));\n }\n\n public hasOrientSignalRef() {\n return isSignalRef(this.explicit.orient);\n }\n}\n\nexport interface AxisComponentIndex {\n x?: AxisComponent[];\n y?: AxisComponent[];\n}\n\nexport interface AxisInternalIndex {\n x?: AxisInternal;\n y?: AxisInternal;\n}\n","import {AxisEncode as VgAxisEncode, AxisOrient, SignalRef} from 'vega';\nimport {Axis, AXIS_PARTS, isAxisProperty, isConditionalAxisValue} from '../../axis';\nimport {PositionScaleChannel, POSITION_SCALE_CHANNELS} from '../../channel';\nimport {getFieldOrDatumDef, PositionDatumDef, PositionFieldDef} from '../../channeldef';\nimport {getFirstDefined, isEmpty, keys, normalizeAngle} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {mergeTitleComponent} from '../common';\nimport {guideEncodeEntry} from '../guide';\nimport {LayerModel} from '../layer';\nimport {parseGuideResolve} from '../resolve';\nimport {defaultTieBreaker, Explicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {AxisComponent, AxisComponentIndex, AxisComponentProps, AXIS_COMPONENT_PROPERTIES} from './component';\nimport {getAxisConfig, getAxisConfigs} from './config';\nimport * as encode from './encode';\nimport {AxisRuleParams, axisRules, defaultOrient, getFieldDefTitle, getLabelAngle} from './properties';\n\nexport function parseUnitAxes(model: UnitModel): AxisComponentIndex {\n return POSITION_SCALE_CHANNELS.reduce((axis, channel) => {\n if (model.component.scales[channel]) {\n axis[channel] = [parseAxis(channel, model)];\n }\n return axis;\n }, {} as AxisComponentIndex);\n}\n\nconst OPPOSITE_ORIENT: Record = {\n bottom: 'top',\n top: 'bottom',\n left: 'right',\n right: 'left'\n};\n\nexport function parseLayerAxes(model: LayerModel) {\n const {axes, resolve} = model.component;\n const axisCount: Record = {top: 0, bottom: 0, right: 0, left: 0};\n\n for (const child of model.children) {\n child.parseAxesAndHeaders();\n\n for (const channel of keys(child.component.axes)) {\n resolve.axis[channel] = parseGuideResolve(model.component.resolve, channel);\n if (resolve.axis[channel] === 'shared') {\n // If the resolve says shared (and has not been overridden)\n // We will try to merge and see if there is a conflict\n\n axes[channel] = mergeAxisComponents(axes[channel], child.component.axes[channel]);\n\n if (!axes[channel]) {\n // If merge returns nothing, there is a conflict so we cannot make the axis shared.\n // Thus, mark axis as independent and remove the axis component.\n resolve.axis[channel] = 'independent';\n delete axes[channel];\n }\n }\n }\n }\n\n // Move axes to layer's axis component and merge shared axes\n for (const channel of POSITION_SCALE_CHANNELS) {\n for (const child of model.children) {\n if (!child.component.axes[channel]) {\n // skip if the child does not have a particular axis\n continue;\n }\n\n if (resolve.axis[channel] === 'independent') {\n // If axes are independent, concat the axisComponent array.\n axes[channel] = (axes[channel] ?? []).concat(child.component.axes[channel]);\n\n // Automatically adjust orient\n for (const axisComponent of child.component.axes[channel]) {\n const {value: orient, explicit} = axisComponent.getWithExplicit('orient');\n if (isSignalRef(orient)) {\n continue;\n }\n\n if (axisCount[orient] > 0 && !explicit) {\n // Change axis orient if the number do not match\n const oppositeOrient = OPPOSITE_ORIENT[orient];\n if (axisCount[orient] > axisCount[oppositeOrient]) {\n axisComponent.set('orient', oppositeOrient, false);\n }\n }\n axisCount[orient]++;\n\n // TODO(https://github.com/vega/vega-lite/issues/2634): automatically add extra offset?\n }\n }\n\n // After merging, make sure to remove axes from child\n delete child.component.axes[channel];\n }\n\n // Suppress grid lines for dual axis charts (https://github.com/vega/vega-lite/issues/4676)\n if (resolve.axis[channel] === 'independent' && axes[channel] && axes[channel].length > 1) {\n for (const axisCmpt of axes[channel]) {\n if (!!axisCmpt.get('grid') && !axisCmpt.explicit.grid) {\n axisCmpt.implicit.grid = false;\n }\n }\n }\n }\n}\n\nfunction mergeAxisComponents(\n mergedAxisCmpts: AxisComponent[],\n childAxisCmpts: readonly AxisComponent[]\n): AxisComponent[] {\n if (mergedAxisCmpts) {\n // FIXME: this is a bit wrong once we support multiple axes\n if (mergedAxisCmpts.length !== childAxisCmpts.length) {\n return undefined; // Cannot merge axis component with different number of axes.\n }\n const length = mergedAxisCmpts.length;\n for (let i = 0; i < length; i++) {\n const merged = mergedAxisCmpts[i];\n const child = childAxisCmpts[i];\n\n if (!!merged !== !!child) {\n return undefined;\n } else if (merged && child) {\n const mergedOrient = merged.getWithExplicit('orient');\n const childOrient = child.getWithExplicit('orient');\n\n if (mergedOrient.explicit && childOrient.explicit && mergedOrient.value !== childOrient.value) {\n // TODO: throw warning if resolve is explicit (We don't have info about explicit/implicit resolve yet.)\n\n // Cannot merge due to inconsistent orient\n return undefined;\n } else {\n mergedAxisCmpts[i] = mergeAxisComponent(merged, child);\n }\n }\n }\n } else {\n // For first one, return a copy of the child\n return childAxisCmpts.map(axisComponent => axisComponent.clone());\n }\n return mergedAxisCmpts;\n}\n\nfunction mergeAxisComponent(merged: AxisComponent, child: AxisComponent): AxisComponent {\n for (const prop of AXIS_COMPONENT_PROPERTIES) {\n const mergedValueWithExplicit = mergeValuesWithExplicit(\n merged.getWithExplicit(prop),\n child.getWithExplicit(prop),\n prop,\n 'axis',\n\n // Tie breaker function\n (v1: Explicit, v2: Explicit) => {\n switch (prop) {\n case 'title':\n return mergeTitleComponent(v1, v2);\n case 'gridScale':\n return {\n explicit: v1.explicit, // keep the old explicit\n value: getFirstDefined(v1.value, v2.value)\n };\n }\n return defaultTieBreaker(v1, v2, prop, 'axis');\n }\n );\n merged.setWithExplicit(prop, mergedValueWithExplicit);\n }\n return merged;\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isExplicit(\n value: T,\n property: keyof AxisComponentProps,\n axis: Axis,\n model: UnitModel,\n channel: PositionScaleChannel\n) {\n if (property === 'disable') {\n return axis !== undefined; // if axis is specified or null/false, then its enable/disable state is explicit\n }\n\n axis = axis || {};\n\n switch (property) {\n case 'titleAngle':\n case 'labelAngle':\n return value === (isSignalRef(axis.labelAngle) ? axis.labelAngle : normalizeAngle(axis.labelAngle));\n case 'values':\n return !!axis.values;\n // specified axis.values is already respected, but may get transformed.\n case 'encode':\n // both VL axis.encoding and axis.labelAngle affect VG axis.encode\n return !!axis.encoding || !!axis.labelAngle;\n case 'title':\n // title can be explicit if fieldDef.title is set\n if (value === getFieldDefTitle(model, channel)) {\n return true;\n }\n }\n // Otherwise, things are explicit if the returned value matches the specified property\n return value === axis[property];\n}\n\n/**\n * Properties to always include values from config\n */\nconst propsToAlwaysIncludeConfig = new Set([\n 'grid', // Grid is an exception because we need to set grid = true to generate another grid axis\n 'translate', // translate has dependent logic for bar's bin position and it's 0.5 by default in Vega. If a config overrides this value, we need to know.\n // the rest are not axis configs in Vega, but are in VL, so we need to set too.\n 'format',\n 'formatType',\n 'orient',\n 'labelExpr',\n 'tickCount',\n 'position',\n 'tickMinStep'\n]);\n\nfunction parseAxis(channel: PositionScaleChannel, model: UnitModel): AxisComponent {\n let axis = model.axis(channel);\n\n const axisComponent = new AxisComponent();\n\n const fieldOrDatumDef = getFieldOrDatumDef(model.encoding[channel]) as\n | PositionFieldDef\n | PositionDatumDef;\n\n const {mark, config} = model;\n\n const orient =\n axis?.orient ||\n config[channel === 'x' ? 'axisX' : 'axisY']?.orient ||\n config.axis?.orient ||\n defaultOrient(channel);\n\n const scaleType = model.getScaleComponent(channel).get('type');\n\n const axisConfigs = getAxisConfigs(channel, scaleType, orient, model.config);\n\n const disable =\n axis !== undefined ? !axis : getAxisConfig('disable', config.style, axis?.style, axisConfigs).configValue;\n axisComponent.set('disable', disable, axis !== undefined);\n if (disable) {\n return axisComponent;\n }\n\n axis = axis || {};\n\n const labelAngle = getLabelAngle(fieldOrDatumDef, axis, channel, config.style, axisConfigs);\n\n const ruleParams: AxisRuleParams = {\n fieldOrDatumDef,\n axis,\n channel,\n model,\n scaleType,\n orient,\n labelAngle,\n mark,\n config\n };\n // 1.2. Add properties\n for (const property of AXIS_COMPONENT_PROPERTIES) {\n const value =\n property in axisRules ? axisRules[property](ruleParams) : isAxisProperty(property) ? axis[property] : undefined;\n\n const hasValue = value !== undefined;\n\n const explicit = isExplicit(value, property, axis, model, channel);\n\n if (hasValue && explicit) {\n axisComponent.set(property, value, explicit);\n } else {\n const {configValue = undefined, configFrom = undefined} =\n isAxisProperty(property) && property !== 'values'\n ? getAxisConfig(property, config.style, axis.style, axisConfigs)\n : {};\n const hasConfigValue = configValue !== undefined;\n\n if (hasValue && !hasConfigValue) {\n // only set property if it is explicitly set or has no config value (otherwise we will accidentally override config)\n axisComponent.set(property, value, explicit);\n } else if (\n // Cases need implicit values\n // 1. Axis config that aren't available in Vega\n !(configFrom === 'vgAxisConfig') ||\n // 2. Certain properties are always included (see `propsToAlwaysIncludeConfig`'s declaration for more details)\n (propsToAlwaysIncludeConfig.has(property) && hasConfigValue) ||\n // 3. Conditional axis values and signals\n isConditionalAxisValue(configValue) ||\n isSignalRef(configValue)\n ) {\n // If a config is specified and is conditional, copy conditional value from axis config\n axisComponent.set(property, configValue, false);\n }\n }\n }\n\n // 2) Add guide encode definition groups\n const axisEncoding = axis.encoding ?? {};\n const axisEncode = AXIS_PARTS.reduce((e: VgAxisEncode, part) => {\n if (!axisComponent.hasAxisPart(part)) {\n // No need to create encode for a disabled part.\n return e;\n }\n\n const axisEncodingPart = guideEncodeEntry(axisEncoding[part] ?? {}, model);\n\n const value = part === 'labels' ? encode.labels(model, channel, axisEncodingPart) : axisEncodingPart;\n\n if (value !== undefined && !isEmpty(value)) {\n e[part] = {update: value};\n }\n return e;\n }, {} as VgAxisEncode);\n\n // FIXME: By having encode as one property, we won't have fine grained encode merging.\n if (!isEmpty(axisEncode)) {\n axisComponent.set('encode', axisEncode, !!axis.encoding || axis.labelAngle !== undefined);\n }\n\n return axisComponent;\n}\n","import {getSecondaryRangeChannel, PositionScaleChannel} from '../../channel';\nimport {getFieldOrDatumDef} from '../../channeldef';\nimport {formatCustomType, isCustomFormatType} from '../format';\nimport {UnitModel} from '../unit';\n\nexport function labels(model: UnitModel, channel: PositionScaleChannel, specifiedLabelsSpec: any) {\n const {encoding, config} = model;\n\n const fieldOrDatumDef =\n getFieldOrDatumDef(encoding[channel]) ?? getFieldOrDatumDef(encoding[getSecondaryRangeChannel(channel)]);\n const axis = model.axis(channel) || {};\n const {format, formatType} = axis;\n\n if (isCustomFormatType(formatType)) {\n return {\n text: formatCustomType({\n fieldOrDatumDef,\n field: 'datum.value',\n format,\n formatType,\n config\n }),\n ...specifiedLabelsSpec\n };\n }\n\n return specifiedLabelsSpec;\n}\n","import {Orientation, SignalRef} from 'vega';\nimport {isBinned, isBinning} from '../../bin';\nimport {isContinuousFieldOrDatumDef, isFieldDef, isNumericDataDef, TypedFieldDef} from '../../channeldef';\nimport {Config} from '../../config';\nimport {Encoding, isAggregate} from '../../encoding';\nimport {replaceExprRef} from '../../expr';\nimport * as log from '../../log';\nimport {\n AREA,\n BAR,\n BAR_CORNER_RADIUS_INDEX as BAR_CORNER_RADIUS_END_INDEX,\n CIRCLE,\n IMAGE,\n LINE,\n Mark,\n MarkDef,\n POINT,\n RECT,\n RULE,\n SQUARE,\n TEXT,\n TICK\n} from '../../mark';\nimport {QUANTITATIVE, TEMPORAL} from '../../type';\nimport {contains, getFirstDefined} from '../../util';\nimport {getMarkConfig, getMarkPropOrConfig} from '../common';\n\nexport function initMarkdef(originalMarkDef: MarkDef, encoding: Encoding, config: Config) {\n // FIXME: markDef expects that exprRefs are replaced recursively but replaceExprRef only replaces the top level\n const markDef: MarkDef = replaceExprRef(originalMarkDef) as any;\n\n // set orient, which can be overridden by rules as sometimes the specified orient is invalid.\n const specifiedOrient = getMarkPropOrConfig('orient', markDef, config);\n markDef.orient = orient(markDef.type, encoding, specifiedOrient);\n if (specifiedOrient !== undefined && specifiedOrient !== markDef.orient) {\n log.warn(log.message.orientOverridden(markDef.orient, specifiedOrient));\n }\n\n if (markDef.type === 'bar' && markDef.orient) {\n const cornerRadiusEnd = getMarkPropOrConfig('cornerRadiusEnd', markDef, config);\n if (cornerRadiusEnd !== undefined) {\n const newProps =\n (markDef.orient === 'horizontal' && encoding.x2) || (markDef.orient === 'vertical' && encoding.y2)\n ? ['cornerRadius']\n : BAR_CORNER_RADIUS_END_INDEX[markDef.orient];\n\n for (const newProp of newProps) {\n markDef[newProp] = cornerRadiusEnd;\n }\n\n if (markDef.cornerRadiusEnd !== undefined) {\n delete markDef.cornerRadiusEnd; // no need to keep the original cap cornerRadius\n }\n }\n }\n\n // set opacity and filled if not specified in mark config\n const specifiedOpacity = getMarkPropOrConfig('opacity', markDef, config);\n if (specifiedOpacity === undefined) {\n markDef.opacity = opacity(markDef.type, encoding);\n }\n\n // set cursor, which should be pointer if href channel is present unless otherwise specified\n const specifiedCursor = getMarkPropOrConfig('cursor', markDef, config);\n if (specifiedCursor === undefined) {\n markDef.cursor = cursor(markDef, encoding, config);\n }\n\n return markDef;\n}\n\nfunction cursor(markDef: MarkDef, encoding: Encoding, config: Config) {\n if (encoding.href || markDef.href || getMarkPropOrConfig('href', markDef, config)) {\n return 'pointer';\n }\n return markDef.cursor;\n}\n\nfunction opacity(mark: Mark, encoding: Encoding) {\n if (contains([POINT, TICK, CIRCLE, SQUARE], mark)) {\n // point-based marks\n if (!isAggregate(encoding)) {\n return 0.7;\n }\n }\n return undefined;\n}\n\nexport function defaultFilled(markDef: MarkDef, config: Config, {graticule}: {graticule: boolean}) {\n if (graticule) {\n return false;\n }\n const filledConfig = getMarkConfig('filled', markDef, config);\n const mark = markDef.type;\n return getFirstDefined(filledConfig, mark !== POINT && mark !== LINE && mark !== RULE);\n}\n\nfunction orient(mark: Mark, encoding: Encoding, specifiedOrient: Orientation): Orientation {\n switch (mark) {\n case POINT:\n case CIRCLE:\n case SQUARE:\n case TEXT:\n case RECT:\n case IMAGE:\n // orient is meaningless for these marks.\n return undefined;\n }\n\n const {x, y, x2, y2} = encoding;\n\n switch (mark) {\n case BAR:\n if (isFieldDef(x) && (isBinned(x.bin) || (isFieldDef(y) && y.aggregate && !x.aggregate))) {\n return 'vertical';\n }\n if (isFieldDef(y) && (isBinned(y.bin) || (isFieldDef(x) && x.aggregate && !y.aggregate))) {\n return 'horizontal';\n }\n if (y2 || x2) {\n // Ranged bar does not always have clear orientation, so we allow overriding\n if (specifiedOrient) {\n return specifiedOrient;\n }\n\n // If y is range and x is non-range, non-bin Q, y is likely a prebinned field\n if (!x2) {\n if ((isFieldDef(x) && x.type === QUANTITATIVE && !isBinning(x.bin)) || isNumericDataDef(x)) {\n return 'horizontal';\n }\n }\n\n // If x is range and y is non-range, non-bin Q, x is likely a prebinned field\n if (!y2) {\n if ((isFieldDef(y) && y.type === QUANTITATIVE && !isBinning(y.bin)) || isNumericDataDef(y)) {\n return 'vertical';\n }\n }\n }\n\n // falls through\n case RULE:\n // return undefined for line segment rule and bar with both axis ranged\n // we have to ignore the case that the data are already binned\n if (x2 && !(isFieldDef(x) && isBinned(x.bin)) && y2 && !(isFieldDef(y) && isBinned(y.bin))) {\n return undefined;\n }\n\n // falls through\n case AREA:\n // If there are range for both x and y, y (vertical) has higher precedence.\n if (y2) {\n if (isFieldDef(y) && isBinned(y.bin)) {\n return 'horizontal';\n } else {\n return 'vertical';\n }\n } else if (x2) {\n if (isFieldDef(x) && isBinned(x.bin)) {\n return 'vertical';\n } else {\n return 'horizontal';\n }\n } else if (mark === RULE) {\n if (x && !y) {\n return 'vertical';\n } else if (y && !x) {\n return 'horizontal';\n }\n }\n\n // falls through\n case LINE:\n case TICK: {\n // Tick is opposite to bar, line, area and never have ranged mark.\n const xIsContinuous = isContinuousFieldOrDatumDef(x);\n const yIsContinuous = isContinuousFieldOrDatumDef(y);\n\n if (specifiedOrient) {\n return specifiedOrient;\n } else if (xIsContinuous && !yIsContinuous) {\n return mark !== 'tick' ? 'horizontal' : 'vertical';\n } else if (!xIsContinuous && yIsContinuous) {\n return mark !== 'tick' ? 'vertical' : 'horizontal';\n } else if (xIsContinuous && yIsContinuous) {\n const xDef = x as TypedFieldDef; // we can cast here since they are surely fieldDef\n const yDef = y as TypedFieldDef;\n\n const xIsTemporal = xDef.type === TEMPORAL;\n const yIsTemporal = yDef.type === TEMPORAL;\n\n // temporal without timeUnit is considered continuous, but better serves as dimension\n if (xIsTemporal && !yIsTemporal) {\n return mark !== 'tick' ? 'vertical' : 'horizontal';\n } else if (!xIsTemporal && yIsTemporal) {\n return mark !== 'tick' ? 'horizontal' : 'vertical';\n }\n\n if (!xDef.aggregate && yDef.aggregate) {\n return mark !== 'tick' ? 'vertical' : 'horizontal';\n } else if (xDef.aggregate && !yDef.aggregate) {\n return mark !== 'tick' ? 'horizontal' : 'vertical';\n }\n return 'vertical';\n } else {\n return undefined;\n }\n }\n }\n return 'vertical';\n}\n","import {Config} from '../../config';\nimport {VgEncodeEntry} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nfunction encodeEntry(model: UnitModel, fixedShape?: 'circle' | 'square') {\n const {config} = model;\n\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'include',\n orient: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n ...encode.nonPosition('size', model),\n ...encode.nonPosition('angle', model),\n ...shapeMixins(model, config, fixedShape)\n };\n}\n\nexport function shapeMixins(model: UnitModel, config: Config, fixedShape?: 'circle' | 'square'): VgEncodeEntry {\n if (fixedShape) {\n return {shape: {value: fixedShape}};\n }\n return encode.nonPosition('shape', model);\n}\n\nexport const point: MarkCompiler = {\n vgMark: 'symbol',\n encodeEntry: (model: UnitModel) => {\n return encodeEntry(model);\n }\n};\n\nexport const circle: MarkCompiler = {\n vgMark: 'symbol',\n encodeEntry: (model: UnitModel) => {\n return encodeEntry(model, 'circle');\n }\n};\n\nexport const square: MarkCompiler = {\n vgMark: 'symbol',\n encodeEntry: (model: UnitModel) => {\n return encodeEntry(model, 'square');\n }\n};\n","import {SignalRef} from 'vega';\nimport {Config} from '../../config';\nimport {Encoding} from '../../encoding';\nimport {MarkDef} from '../../mark';\nimport {getMarkPropOrConfig} from '../common';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const text: MarkCompiler = {\n vgMark: 'text',\n\n encodeEntry: (model: UnitModel) => {\n const {config, encoding} = model;\n\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'include',\n baseline: 'include',\n color: 'include',\n size: 'ignore',\n orient: 'ignore',\n theta: 'include'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n ...encode.text(model),\n ...encode.nonPosition('size', model, {\n vgChannel: 'fontSize' // VL's text size is fontSize\n }),\n ...encode.nonPosition('angle', model),\n ...encode.valueIfDefined('align', align(model.markDef, encoding, config)),\n ...encode.valueIfDefined('baseline', baseline(model.markDef, encoding, config)),\n ...encode.pointPosition('radius', model, {defaultPos: null}),\n ...encode.pointPosition('theta', model, {defaultPos: null})\n };\n }\n};\n\nfunction align(markDef: MarkDef, encoding: Encoding, config: Config) {\n const a = getMarkPropOrConfig('align', markDef, config);\n if (a === undefined) {\n return 'center';\n }\n // If there is a config, Vega-parser will process this already.\n return undefined;\n}\n\nfunction baseline(markDef: MarkDef, encoding: Encoding, config: Config) {\n const b = getMarkPropOrConfig('baseline', markDef, config);\n if (b === undefined) {\n return 'middle';\n }\n // If there is a config, Vega-parser will process this already.\n return undefined;\n}\n","import {SignalRef} from 'vega';\nimport {isNumber} from 'vega-util';\nimport {getViewConfigDiscreteStep} from '../../config';\nimport {isVgRangeStep} from '../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../common';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const tick: MarkCompiler = {\n vgMark: 'rect',\n\n encodeEntry: (model: UnitModel) => {\n const {config, markDef} = model;\n const orient = markDef.orient;\n\n const vgSizeChannel = orient === 'horizontal' ? 'width' : 'height';\n const vgThicknessChannel = orient === 'horizontal' ? 'height' : 'width';\n\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n\n ...encode.pointPosition('x', model, {defaultPos: 'mid', vgChannel: 'xc'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid', vgChannel: 'yc'}),\n\n // size / thickness => width / height\n ...encode.nonPosition('size', model, {\n defaultValue: defaultSize(model),\n vgChannel: vgSizeChannel\n }),\n [vgThicknessChannel]: signalOrValueRef(getMarkPropOrConfig('thickness', markDef, config))\n };\n }\n};\n\nfunction defaultSize(model: UnitModel): number | SignalRef {\n const {config, markDef} = model;\n const {orient} = markDef;\n\n const vgSizeChannel = orient === 'horizontal' ? 'width' : 'height';\n const scale = model.getScaleComponent(orient === 'horizontal' ? 'x' : 'y');\n\n const markPropOrConfig =\n getMarkPropOrConfig('size', markDef, config, {vgChannel: vgSizeChannel}) ?? config.tick.bandSize;\n\n if (markPropOrConfig !== undefined) {\n return markPropOrConfig;\n } else {\n const scaleRange = scale ? scale.get('range') : undefined;\n if (scaleRange && isVgRangeStep(scaleRange) && isNumber(scaleRange.step)) {\n return (scaleRange.step * 3) / 4;\n }\n\n const defaultViewStep = getViewConfigDiscreteStep(config.view, vgSizeChannel);\n\n return (defaultViewStep * 3) / 4;\n }\n}\n","import {isArray} from 'vega-util';\nimport {FieldRefOption, isFieldDef, isValueDef, vgField} from '../../channeldef';\nimport {DataSourceType} from '../../data';\nimport {isAggregate, pathGroupingFields} from '../../encoding';\nimport {AREA, BAR, isPathMark, LINE, Mark, TRAIL} from '../../mark';\nimport {isSortByEncoding, isSortField} from '../../sort';\nimport {contains, getFirstDefined, isNullOrFalse, keys, omit, pick} from '../../util';\nimport {VgCompare, VgEncodeEntry, VG_CORNERRADIUS_CHANNELS} from '../../vega.schema';\nimport {getMarkConfig, getMarkPropOrConfig, getStyles, signalOrValueRef, sortParams} from '../common';\nimport {UnitModel} from '../unit';\nimport {arc} from './arc';\nimport {area} from './area';\nimport {bar} from './bar';\nimport {MarkCompiler} from './base';\nimport {geoshape} from './geoshape';\nimport {image} from './image';\nimport {line, trail} from './line';\nimport {circle, point, square} from './point';\nimport {rect} from './rect';\nimport {rule} from './rule';\nimport {text} from './text';\nimport {tick} from './tick';\n\nconst markCompiler: Record = {\n arc,\n area,\n bar,\n circle,\n geoshape,\n image,\n line,\n point,\n rect,\n rule,\n square,\n text,\n tick,\n trail\n};\n\nexport function parseMarkGroups(model: UnitModel): any[] {\n if (contains([LINE, AREA, TRAIL], model.mark)) {\n const details = pathGroupingFields(model.mark, model.encoding);\n if (details.length > 0) {\n return getPathGroups(model, details);\n }\n // otherwise use standard mark groups\n } else if (model.mark === BAR) {\n const hasCornerRadius = VG_CORNERRADIUS_CHANNELS.some(prop =>\n getMarkPropOrConfig(prop, model.markDef, model.config)\n );\n if (model.stack && !model.fieldDef('size') && hasCornerRadius) {\n return getGroupsForStackedBarWithCornerRadius(model);\n }\n }\n\n return getMarkGroup(model);\n}\n\nconst FACETED_PATH_PREFIX = 'faceted_path_';\n\nfunction getPathGroups(model: UnitModel, details: string[]) {\n // TODO: for non-stacked plot, map order to zindex. (Maybe rename order for layer to zindex?)\n\n return [\n {\n name: model.getName('pathgroup'),\n type: 'group',\n from: {\n facet: {\n name: FACETED_PATH_PREFIX + model.requestDataName(DataSourceType.Main),\n data: model.requestDataName(DataSourceType.Main),\n groupby: details\n }\n },\n encode: {\n update: {\n width: {field: {group: 'width'}},\n height: {field: {group: 'height'}}\n }\n },\n // With subfacet for line/area group, need to use faceted data from above.\n marks: getMarkGroup(model, {fromPrefix: FACETED_PATH_PREFIX})\n }\n ];\n}\n\nconst STACK_GROUP_PREFIX = 'stack_group_';\n\n/**\n * We need to put stacked bars into groups in order to enable cornerRadius for stacks.\n * If stack is used and the model doesn't have size encoding, we put the mark into groups,\n * and apply cornerRadius properties at the group.\n */\nfunction getGroupsForStackedBarWithCornerRadius(model: UnitModel) {\n // Generate the mark\n const [mark] = getMarkGroup(model, {fromPrefix: STACK_GROUP_PREFIX});\n\n // Get the scale for the stacked field\n const fieldScale = model.scaleName(model.stack.fieldChannel);\n const stackField = (opt: FieldRefOption = {}) => model.vgField(model.stack.fieldChannel, opt);\n // Find the min/max of the pixel value on the stacked direction\n const stackFieldGroup = (func: 'min' | 'max', expr: 'datum' | 'parent') => {\n const vgFieldMinMax = [\n stackField({prefix: 'min', suffix: 'start', expr}),\n stackField({prefix: 'max', suffix: 'start', expr}),\n stackField({prefix: 'min', suffix: 'end', expr}),\n stackField({prefix: 'max', suffix: 'end', expr})\n ];\n return `${func}(${vgFieldMinMax.map(field => `scale('${fieldScale}',${field})`).join(',')})`;\n };\n\n let groupUpdate: VgEncodeEntry;\n let innerGroupUpdate: VgEncodeEntry;\n\n // Build the encoding for group and an inner group\n if (model.stack.fieldChannel === 'x') {\n // Move cornerRadius, y/yc/y2/height properties to group\n // Group x/x2 should be the min/max of the marks within\n groupUpdate = {\n ...pick(mark.encode.update, ['y', 'yc', 'y2', 'height', ...VG_CORNERRADIUS_CHANNELS]),\n x: {signal: stackFieldGroup('min', 'datum')},\n x2: {signal: stackFieldGroup('max', 'datum')},\n clip: {value: true}\n };\n // Inner group should revert the x translation, and pass height through\n innerGroupUpdate = {\n x: {field: {group: 'x'}, mult: -1},\n height: {field: {group: 'height'}}\n };\n // The marks should use the same height as group, without y/yc/y2 properties (because it's already done by group)\n // This is why size encoding is not supported yet\n mark.encode.update = {\n ...omit(mark.encode.update, ['y', 'yc', 'y2']),\n height: {field: {group: 'height'}}\n };\n } else {\n groupUpdate = {\n ...pick(mark.encode.update, ['x', 'xc', 'x2', 'width']),\n y: {signal: stackFieldGroup('min', 'datum')},\n y2: {signal: stackFieldGroup('max', 'datum')},\n clip: {value: true}\n };\n innerGroupUpdate = {\n y: {field: {group: 'y'}, mult: -1},\n width: {field: {group: 'width'}}\n };\n mark.encode.update = {\n ...omit(mark.encode.update, ['x', 'xc', 'x2']),\n width: {field: {group: 'width'}}\n };\n }\n\n // Deal with cornerRadius properties\n for (const key of VG_CORNERRADIUS_CHANNELS) {\n const configValue = getMarkConfig(key, model.markDef, model.config);\n // Move from mark to group\n if (mark.encode.update[key]) {\n groupUpdate[key] = mark.encode.update[key];\n delete mark.encode.update[key];\n } else if (configValue) {\n groupUpdate[key] = signalOrValueRef(configValue);\n }\n // Overwrite any cornerRadius on mark set by config --- they are already moved to the group\n if (configValue) {\n mark.encode.update[key] = {value: 0};\n }\n }\n\n const groupby: string[] = [];\n\n if (model.stack.groupbyChannel) {\n // For bin and time unit, we have to add bin/timeunit -end channels.\n const groupByField = model.fieldDef(model.stack.groupbyChannel);\n const field = vgField(groupByField);\n if (field) {\n groupby.push(field);\n }\n\n if (groupByField?.bin || groupByField?.timeUnit) {\n groupby.push(vgField(groupByField, {binSuffix: 'end'}));\n }\n }\n\n const strokeProperties = [\n 'stroke',\n 'strokeWidth',\n 'strokeJoin',\n 'strokeCap',\n 'strokeDash',\n 'strokeDashOffset',\n 'strokeMiterLimit',\n 'strokeOpacity'\n ] as const;\n\n // Generate stroke properties for the group\n groupUpdate = strokeProperties.reduce((encode, prop) => {\n if (mark.encode.update[prop]) {\n return {...encode, [prop]: mark.encode.update[prop]};\n } else {\n const configValue = getMarkConfig(prop, model.markDef, model.config);\n if (configValue !== undefined) {\n return {...encode, [prop]: signalOrValueRef(configValue)};\n } else {\n return encode;\n }\n }\n }, groupUpdate);\n\n // Apply strokeForeground and strokeOffset if stroke is used\n if (groupUpdate.stroke) {\n groupUpdate.strokeForeground = {value: true};\n groupUpdate.strokeOffset = {value: 0};\n }\n\n return [\n {\n type: 'group',\n from: {\n facet: {\n data: model.requestDataName(DataSourceType.Main),\n name: STACK_GROUP_PREFIX + model.requestDataName(DataSourceType.Main),\n groupby,\n aggregate: {\n fields: [\n stackField({suffix: 'start'}),\n stackField({suffix: 'start'}),\n stackField({suffix: 'end'}),\n stackField({suffix: 'end'})\n ],\n ops: ['min', 'max', 'min', 'max']\n }\n }\n },\n encode: {\n update: groupUpdate\n },\n marks: [\n {\n type: 'group',\n encode: {update: innerGroupUpdate},\n marks: [mark]\n }\n ]\n }\n ];\n}\n\nexport function getSort(model: UnitModel): VgCompare {\n const {encoding, stack, mark, markDef, config} = model;\n const order = encoding.order;\n if (\n (!isArray(order) && isValueDef(order) && isNullOrFalse(order.value)) ||\n (!order && isNullOrFalse(getMarkPropOrConfig('order', markDef, config)))\n ) {\n return undefined;\n } else if ((isArray(order) || isFieldDef(order)) && !stack) {\n // Sort by the order field if it is specified and the field is not stacked. (For stacked field, order specify stack order.)\n return sortParams(order, {expr: 'datum'});\n } else if (isPathMark(mark)) {\n // For both line and area, we sort values based on dimension by default\n const dimensionChannel = markDef.orient === 'horizontal' ? 'y' : 'x';\n const dimensionChannelDef = encoding[dimensionChannel];\n if (isFieldDef(dimensionChannelDef)) {\n const s = dimensionChannelDef.sort;\n\n if (isArray(s)) {\n return {\n field: vgField(dimensionChannelDef, {prefix: dimensionChannel, suffix: 'sort_index', expr: 'datum'})\n };\n } else if (isSortField(s)) {\n return {\n field: vgField(\n {\n // FIXME: this op might not already exist?\n // FIXME: what if dimensionChannel (x or y) contains custom domain?\n aggregate: isAggregate(model.encoding) ? s.op : undefined,\n field: s.field\n },\n {expr: 'datum'}\n )\n };\n } else if (isSortByEncoding(s)) {\n const fieldDefToSort = model.fieldDef(s.encoding);\n return {\n field: vgField(fieldDefToSort, {expr: 'datum'}),\n order: s.order\n };\n } else if (s === null) {\n return undefined;\n } else {\n return {\n field: vgField(dimensionChannelDef, {\n // For stack with imputation, we only have bin_mid\n binSuffix: model.stack && model.stack.impute ? 'mid' : undefined,\n expr: 'datum'\n })\n };\n }\n }\n return undefined;\n }\n return undefined;\n}\n\nfunction getMarkGroup(model: UnitModel, opt: {fromPrefix: string} = {fromPrefix: ''}) {\n const {mark, markDef, encoding, config} = model;\n\n const clip = getFirstDefined(markDef.clip, scaleClip(model), projectionClip(model));\n const style = getStyles(markDef);\n const key = encoding.key;\n const sort = getSort(model);\n const interactive = interactiveFlag(model);\n const aria = getMarkPropOrConfig('aria', markDef, config);\n\n const postEncodingTransform = markCompiler[mark].postEncodingTransform\n ? markCompiler[mark].postEncodingTransform(model)\n : null;\n\n return [\n {\n name: model.getName('marks'),\n type: markCompiler[mark].vgMark,\n ...(clip ? {clip: true} : {}),\n ...(style ? {style} : {}),\n ...(key ? {key: key.field} : {}),\n ...(sort ? {sort} : {}),\n ...(interactive ? interactive : {}),\n ...(aria === false ? {aria} : {}),\n from: {data: opt.fromPrefix + model.requestDataName(DataSourceType.Main)},\n encode: {\n update: markCompiler[mark].encodeEntry(model)\n },\n ...(postEncodingTransform\n ? {\n transform: postEncodingTransform\n }\n : {})\n }\n ];\n}\n\n/**\n * If scales are bound to interval selections, we want to automatically clip\n * marks to account for panning/zooming interactions. We identify bound scales\n * by the selectionExtent property, which gets added during scale parsing.\n */\nfunction scaleClip(model: UnitModel) {\n const xScale = model.getScaleComponent('x');\n const yScale = model.getScaleComponent('y');\n return (xScale && xScale.get('selectionExtent')) || (yScale && yScale.get('selectionExtent')) ? true : undefined;\n}\n\n/**\n * If we use a custom projection with auto-fitting to the geodata extent,\n * we need to clip to ensure the chart size doesn't explode.\n */\nfunction projectionClip(model: UnitModel) {\n const projection = model.component.projection;\n return projection && !projection.isFit ? true : undefined;\n}\n\n/**\n * Only output interactive flags if we have selections defined somewhere in our model hierarchy.\n */\nfunction interactiveFlag(model: UnitModel) {\n if (!model.component.selection) return null;\n const unitCount = keys(model.component.selection).length;\n let parentCount = unitCount;\n let parent = model.parent;\n while (parent && parentCount === 0) {\n parentCount = keys(parent.component.selection).length;\n parent = parent.parent;\n }\n return parentCount\n ? {\n interactive: unitCount > 0 || !!model.encoding.tooltip\n }\n : null;\n}\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const arc: MarkCompiler = {\n vgMark: 'arc',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'ignore',\n orient: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n\n // arcs are rectangles in polar coordinates\n ...encode.rectPosition(model, 'radius', 'arc'),\n ...encode.rectPosition(model, 'theta', 'arc')\n };\n }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const area: MarkCompiler = {\n vgMark: 'area',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'include',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointOrRangePosition('x', model, {\n defaultPos: 'zeroOrMin',\n defaultPos2: 'zeroOrMin',\n range: model.markDef.orient === 'horizontal'\n }),\n ...encode.pointOrRangePosition('y', model, {\n defaultPos: 'zeroOrMin',\n defaultPos2: 'zeroOrMin',\n range: model.markDef.orient === 'vertical'\n }),\n ...encode.defined(model)\n };\n }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const bar: MarkCompiler = {\n vgMark: 'rect',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.rectPosition(model, 'x', 'bar'),\n ...encode.rectPosition(model, 'y', 'bar')\n };\n }\n};\n","import {GeoShapeTransform as VgGeoShapeTransform} from 'vega';\nimport {isFieldDef, vgField} from '../../channeldef';\nimport {GEOJSON} from '../../type';\nimport {VgPostEncodingTransform} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const geoshape: MarkCompiler = {\n vgMark: 'shape',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'ignore',\n orient: 'ignore',\n theta: 'ignore'\n })\n };\n },\n postEncodingTransform: (model: UnitModel): VgPostEncodingTransform[] => {\n const {encoding} = model;\n const shapeDef = encoding.shape;\n\n const transform: VgGeoShapeTransform = {\n type: 'geoshape',\n projection: model.projectionName(),\n // as: 'shape',\n ...(shapeDef && isFieldDef(shapeDef) && shapeDef.type === GEOJSON\n ? {field: vgField(shapeDef, {expr: 'datum'})}\n : {})\n };\n return [transform];\n }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const image: MarkCompiler = {\n vgMark: 'image',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'ignore',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.rectPosition(model, 'x', 'image'),\n ...encode.rectPosition(model, 'y', 'image'),\n ...encode.text(model, 'url')\n };\n }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const line: MarkCompiler = {\n vgMark: 'line',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'ignore',\n orient: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n ...encode.nonPosition('size', model, {\n vgChannel: 'strokeWidth' // VL's line size is strokeWidth\n }),\n ...encode.defined(model)\n };\n }\n};\n\nexport const trail: MarkCompiler = {\n vgMark: 'trail',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'include',\n orient: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n ...encode.nonPosition('size', model),\n ...encode.defined(model)\n };\n }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const rect: MarkCompiler = {\n vgMark: 'rect',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.rectPosition(model, 'x', 'rect'),\n ...encode.rectPosition(model, 'y', 'rect')\n };\n }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const rule: MarkCompiler = {\n vgMark: 'rule',\n encodeEntry: (model: UnitModel) => {\n const {markDef} = model;\n const orient = markDef.orient;\n\n if (!model.encoding.x && !model.encoding.y && !model.encoding.latitude && !model.encoding.longitude) {\n // Show nothing if we have none of x, y, lat, and long.\n return {};\n }\n\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointOrRangePosition('x', model, {\n defaultPos: orient === 'horizontal' ? 'zeroOrMax' : 'mid',\n defaultPos2: 'zeroOrMin',\n range: orient !== 'vertical' // include x2 for horizontal or line segment rule\n }),\n ...encode.pointOrRangePosition('y', model, {\n defaultPos: orient === 'vertical' ? 'zeroOrMax' : 'mid',\n defaultPos2: 'zeroOrMin',\n range: orient !== 'horizontal' // include y2 for vertical or line segment rule\n }),\n ...encode.nonPosition('size', model, {\n vgChannel: 'strokeWidth' // VL's rule size is strokeWidth\n })\n };\n }\n};\n","import {NewSignal, SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {Axis, AxisInternal, isConditionalAxisValue} from '../axis';\nimport {\n Channel,\n GEOPOSITION_CHANNELS,\n NonPositionScaleChannel,\n NONPOSITION_SCALE_CHANNELS,\n PositionChannel,\n POSITION_SCALE_CHANNELS,\n ScaleChannel,\n SCALE_CHANNELS,\n SingleDefChannel,\n supportLegend,\n X,\n Y\n} from '../channel';\nimport {\n getFieldDef,\n getFieldOrDatumDef,\n isFieldOrDatumDef,\n isTypedFieldDef,\n MarkPropFieldOrDatumDef,\n PositionFieldDef\n} from '../channeldef';\nimport {Config} from '../config';\nimport {isGraticuleGenerator} from '../data';\nimport * as vlEncoding from '../encoding';\nimport {Encoding, initEncoding} from '../encoding';\nimport {ExprRef, replaceExprRef} from '../expr';\nimport {LegendInternal} from '../legend';\nimport {GEOSHAPE, isMarkDef, Mark, MarkDef} from '../mark';\nimport {Projection} from '../projection';\nimport {Domain, Scale} from '../scale';\nimport {isSelectionParameter, SelectionParameter} from '../selection';\nimport {LayoutSizeMixins, NormalizedUnitSpec} from '../spec';\nimport {isFrameMixins} from '../spec/base';\nimport {stack, StackProperties} from '../stack';\nimport {keys} from '../util';\nimport {VgData, VgLayout} from '../vega.schema';\nimport {assembleAxisSignals} from './axis/assemble';\nimport {AxisInternalIndex} from './axis/component';\nimport {parseUnitAxes} from './axis/parse';\nimport {signalOrValueRefWithCondition, signalRefOrValue} from './common';\nimport {parseData} from './data/parse';\nimport {assembleLayoutSignals} from './layoutsize/assemble';\nimport {initLayoutSize} from './layoutsize/init';\nimport {parseUnitLayoutSize} from './layoutsize/parse';\nimport {LegendInternalIndex} from './legend/component';\nimport {defaultFilled, initMarkdef} from './mark/init';\nimport {parseMarkGroups} from './mark/mark';\nimport {isLayerModel, Model, ModelWithField} from './model';\nimport {ScaleIndex} from './scale/component';\nimport {\n assembleTopLevelSignals,\n assembleUnitSelectionData,\n assembleUnitSelectionMarks,\n assembleUnitSelectionSignals\n} from './selection/assemble';\nimport {parseUnitSelection} from './selection/parse';\n\n/**\n * Internal model of Vega-Lite specification for the compiler.\n */\nexport class UnitModel extends ModelWithField {\n public readonly markDef: MarkDef;\n public readonly encoding: Encoding;\n\n public readonly specifiedScales: ScaleIndex = {};\n\n public readonly stack: StackProperties;\n\n protected specifiedAxes: AxisInternalIndex = {};\n\n protected specifiedLegends: LegendInternalIndex = {};\n\n public specifiedProjection: Projection = {};\n\n public readonly selection: SelectionParameter[] = [];\n public children: Model[] = [];\n\n constructor(\n spec: NormalizedUnitSpec,\n parent: Model,\n parentGivenName: string,\n parentGivenSize: LayoutSizeMixins = {},\n config: Config\n ) {\n super(spec, 'unit', parent, parentGivenName, config, undefined, isFrameMixins(spec) ? spec.view : undefined);\n\n const markDef = isMarkDef(spec.mark) ? {...spec.mark} : {type: spec.mark};\n const mark = markDef.type;\n\n // Need to init filled before other mark properties because encoding depends on filled but other mark properties depend on types inside encoding\n if (markDef.filled === undefined) {\n markDef.filled = defaultFilled(markDef, config, {\n graticule: spec.data && isGraticuleGenerator(spec.data)\n });\n }\n\n const encoding = (this.encoding = initEncoding(spec.encoding || {}, mark, markDef.filled, config));\n this.markDef = initMarkdef(markDef, encoding, config);\n\n this.size = initLayoutSize({\n encoding: encoding,\n size: isFrameMixins(spec)\n ? {\n ...parentGivenSize,\n ...(spec.width ? {width: spec.width} : {}),\n ...(spec.height ? {height: spec.height} : {})\n }\n : parentGivenSize\n });\n\n // calculate stack properties\n this.stack = stack(mark, encoding);\n this.specifiedScales = this.initScales(mark, encoding);\n\n this.specifiedAxes = this.initAxes(encoding);\n this.specifiedLegends = this.initLegends(encoding);\n this.specifiedProjection = spec.projection;\n\n // Selections will be initialized upon parse.\n this.selection = (spec.params ?? []).filter(p => isSelectionParameter(p)) as SelectionParameter[];\n }\n\n public get hasProjection(): boolean {\n const {encoding} = this;\n const isGeoShapeMark = this.mark === GEOSHAPE;\n const hasGeoPosition = encoding && GEOPOSITION_CHANNELS.some(channel => isFieldOrDatumDef(encoding[channel]));\n return isGeoShapeMark || hasGeoPosition;\n }\n\n /**\n * Return specified Vega-Lite scale domain for a particular channel\n * @param channel\n */\n public scaleDomain(channel: ScaleChannel): Domain {\n const scale = this.specifiedScales[channel];\n return scale ? scale.domain : undefined;\n }\n\n public axis(channel: PositionChannel): AxisInternal {\n return this.specifiedAxes[channel];\n }\n\n public legend(channel: NonPositionScaleChannel): LegendInternal {\n return this.specifiedLegends[channel];\n }\n\n private initScales(mark: Mark, encoding: Encoding): ScaleIndex {\n return SCALE_CHANNELS.reduce((scales, channel) => {\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as\n | PositionFieldDef\n | MarkPropFieldOrDatumDef;\n if (fieldOrDatumDef) {\n scales[channel] = this.initScale(fieldOrDatumDef.scale ?? {});\n }\n return scales;\n }, {} as ScaleIndex);\n }\n\n private initScale(scale: Scale): Scale {\n const {domain, range} = scale;\n // TODO: we could simplify this function if we had a recursive replace function\n const scaleInternal = replaceExprRef(scale);\n if (isArray(domain)) {\n scaleInternal.domain = domain.map(signalRefOrValue);\n }\n if (isArray(range)) {\n scaleInternal.range = range.map(signalRefOrValue);\n }\n return scaleInternal as Scale;\n }\n\n private initAxes(encoding: Encoding): AxisInternalIndex {\n return POSITION_SCALE_CHANNELS.reduce((_axis, channel) => {\n // Position Axis\n\n // TODO: handle ConditionFieldDef\n const channelDef = encoding[channel];\n if (\n isFieldOrDatumDef(channelDef) ||\n (channel === X && isFieldOrDatumDef(encoding.x2)) ||\n (channel === Y && isFieldOrDatumDef(encoding.y2))\n ) {\n const axisSpec = isFieldOrDatumDef(channelDef) ? channelDef.axis : undefined;\n\n _axis[channel] = axisSpec\n ? this.initAxis({...axisSpec}) // convert truthy value to object\n : axisSpec;\n }\n return _axis;\n }, {});\n }\n\n private initAxis(axis: Axis): Axis {\n const props = keys(axis);\n const axisInternal = {};\n for (const prop of props) {\n const val = axis[prop];\n axisInternal[prop as any] = isConditionalAxisValue(val)\n ? signalOrValueRefWithCondition(val)\n : signalRefOrValue(val);\n }\n return axisInternal;\n }\n\n private initLegends(encoding: Encoding): LegendInternalIndex {\n return NONPOSITION_SCALE_CHANNELS.reduce((_legend, channel) => {\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as MarkPropFieldOrDatumDef;\n\n if (fieldOrDatumDef && supportLegend(channel)) {\n const legend = fieldOrDatumDef.legend;\n _legend[channel] = legend\n ? replaceExprRef(legend) // convert truthy value to object\n : legend;\n }\n\n return _legend;\n }, {});\n }\n\n public parseData() {\n this.component.data = parseData(this);\n }\n\n public parseLayoutSize() {\n parseUnitLayoutSize(this);\n }\n\n public parseSelections() {\n this.component.selection = parseUnitSelection(this, this.selection);\n }\n\n public parseMarkGroup() {\n this.component.mark = parseMarkGroups(this);\n }\n\n public parseAxesAndHeaders() {\n this.component.axes = parseUnitAxes(this);\n }\n\n public assembleSelectionTopLevelSignals(signals: any[]): NewSignal[] {\n return assembleTopLevelSignals(this, signals);\n }\n\n public assembleSignals(): NewSignal[] {\n return [...assembleAxisSignals(this), ...assembleUnitSelectionSignals(this, [])];\n }\n\n public assembleSelectionData(data: readonly VgData[]): VgData[] {\n return assembleUnitSelectionData(this, data);\n }\n\n public assembleLayout(): VgLayout {\n return null;\n }\n\n public assembleLayoutSignals(): NewSignal[] {\n return assembleLayoutSignals(this);\n }\n\n public assembleMarks() {\n let marks = this.component.mark ?? [];\n\n // If this unit is part of a layer, selections should augment\n // all in concert rather than each unit individually. This\n // ensures correct interleaving of clipping and brushed marks.\n if (!this.parent || !isLayerModel(this.parent)) {\n marks = assembleUnitSelectionMarks(this, marks);\n }\n\n return marks.map(this.correctDataNames);\n }\n\n protected getMapping() {\n return this.encoding;\n }\n\n public get mark(): Mark {\n return this.markDef.type;\n }\n\n public channelHasField(channel: Channel) {\n return vlEncoding.channelHasField(this.encoding, channel);\n }\n\n public fieldDef(channel: SingleDefChannel) {\n const channelDef = this.encoding[channel];\n return getFieldDef(channelDef);\n }\n\n public typedFieldDef(channel: SingleDefChannel) {\n const fieldDef = this.fieldDef(channel);\n if (isTypedFieldDef(fieldDef)) {\n return fieldDef;\n }\n return null;\n }\n}\n","import {getSizeChannel, POSITION_SCALE_CHANNELS} from '../../channel';\nimport {isContinuousFieldOrDatumDef} from '../../channeldef';\nimport {Encoding} from '../../encoding';\nimport * as log from '../../log';\nimport {isStep, LayoutSizeMixins} from '../../spec/base';\n\nexport function initLayoutSize({encoding, size}: {encoding: Encoding; size: LayoutSizeMixins}) {\n for (const channel of POSITION_SCALE_CHANNELS) {\n const sizeType = getSizeChannel(channel);\n if (isStep(size[sizeType])) {\n if (isContinuousFieldOrDatumDef(encoding[channel])) {\n delete size[sizeType];\n log.warn(log.message.stepDropped(sizeType));\n }\n }\n }\n\n return size;\n}\n","import {Legend as VgLegend, NewSignal, SignalRef, Title as VgTitle} from 'vega';\nimport {Config} from '../config';\nimport * as log from '../log';\nimport {isLayerSpec, isUnitSpec, LayoutSizeMixins, NormalizedLayerSpec} from '../spec';\nimport {keys} from '../util';\nimport {VgData, VgLayout} from '../vega.schema';\nimport {assembleAxisSignals} from './axis/assemble';\nimport {parseLayerAxes} from './axis/parse';\nimport {parseData} from './data/parse';\nimport {assembleLayoutSignals} from './layoutsize/assemble';\nimport {parseLayerLayoutSize} from './layoutsize/parse';\nimport {assembleLegends} from './legend/assemble';\nimport {Model} from './model';\nimport {assembleLayerSelectionMarks} from './selection/assemble';\nimport {UnitModel} from './unit';\n\nexport class LayerModel extends Model {\n // HACK: This should be (LayerModel | UnitModel)[], but setting the correct type leads to weird error.\n // So I'm just putting generic Model for now\n public readonly children: Model[];\n\n constructor(\n spec: NormalizedLayerSpec,\n parent: Model,\n parentGivenName: string,\n parentGivenSize: LayoutSizeMixins,\n config: Config\n ) {\n super(spec, 'layer', parent, parentGivenName, config, spec.resolve, spec.view);\n\n const layoutSize = {\n ...parentGivenSize,\n ...(spec.width ? {width: spec.width} : {}),\n ...(spec.height ? {height: spec.height} : {})\n };\n\n this.children = spec.layer.map((layer, i) => {\n if (isLayerSpec(layer)) {\n return new LayerModel(layer, this, this.getName(`layer_${i}`), layoutSize, config);\n } else if (isUnitSpec(layer)) {\n return new UnitModel(layer, this, this.getName(`layer_${i}`), layoutSize, config);\n }\n\n throw new Error(log.message.invalidSpec(layer));\n });\n }\n\n public parseData() {\n this.component.data = parseData(this);\n for (const child of this.children) {\n child.parseData();\n }\n }\n\n public parseLayoutSize() {\n parseLayerLayoutSize(this);\n }\n\n public parseSelections() {\n // Merge selections up the hierarchy so that they may be referenced\n // across unit specs. Persist their definitions within each child\n // to assemble signals which remain within output Vega unit groups.\n this.component.selection = {};\n for (const child of this.children) {\n child.parseSelections();\n for (const key of keys(child.component.selection)) {\n this.component.selection[key] = child.component.selection[key];\n }\n }\n }\n\n public parseMarkGroup() {\n for (const child of this.children) {\n child.parseMarkGroup();\n }\n }\n\n public parseAxesAndHeaders() {\n parseLayerAxes(this);\n }\n\n public assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[] {\n return this.children.reduce((sg, child) => child.assembleSelectionTopLevelSignals(sg), signals);\n }\n\n // TODO: Support same named selections across children.\n public assembleSignals(): NewSignal[] {\n return this.children.reduce((signals, child) => {\n return signals.concat(child.assembleSignals());\n }, assembleAxisSignals(this));\n }\n\n public assembleLayoutSignals(): NewSignal[] {\n return this.children.reduce((signals, child) => {\n return signals.concat(child.assembleLayoutSignals());\n }, assembleLayoutSignals(this));\n }\n\n public assembleSelectionData(data: readonly VgData[]): readonly VgData[] {\n return this.children.reduce((db, child) => child.assembleSelectionData(db), data);\n }\n\n public assembleTitle(): VgTitle {\n let title = super.assembleTitle();\n if (title) {\n return title;\n }\n // If title does not provide layer, look into children\n for (const child of this.children) {\n title = child.assembleTitle();\n if (title) {\n return title;\n }\n }\n return undefined;\n }\n\n public assembleLayout(): VgLayout {\n return null;\n }\n\n public assembleMarks(): any[] {\n return assembleLayerSelectionMarks(\n this,\n this.children.flatMap(child => {\n return child.assembleMarks();\n })\n );\n }\n\n public assembleLegends(): VgLegend[] {\n return this.children.reduce((legends, child) => {\n return legends.concat(child.assembleLegends());\n }, assembleLegends(this));\n }\n}\n","import {SignalRef} from 'vega';\nimport {Config} from '../config';\nimport * as log from '../log';\nimport {isAnyConcatSpec, isFacetSpec, isLayerSpec, isUnitSpec, LayoutSizeMixins, NormalizedSpec} from '../spec';\nimport {ConcatModel} from './concat';\nimport {FacetModel} from './facet';\nimport {LayerModel} from './layer';\nimport {Model} from './model';\nimport {UnitModel} from './unit';\n\nexport function buildModel(\n spec: NormalizedSpec,\n parent: Model,\n parentGivenName: string,\n unitSize: LayoutSizeMixins,\n config: Config\n): Model {\n if (isFacetSpec(spec)) {\n return new FacetModel(spec, parent, parentGivenName, config);\n } else if (isLayerSpec(spec)) {\n return new LayerModel(spec, parent, parentGivenName, unitSize, config);\n } else if (isUnitSpec(spec)) {\n return new UnitModel(spec, parent, parentGivenName, unitSize, config);\n } else if (isAnyConcatSpec(spec)) {\n return new ConcatModel(spec, parent, parentGivenName, config);\n }\n throw new Error(log.message.invalidSpec(spec));\n}\n","import pkg from '../package.json';\nexport const version = pkg.version;\n\nexport {compile} from './compile/compile';\nexport type {Config} from './config';\nexport {normalize} from './normalize';\nexport type {TopLevelSpec} from './spec';\nexport * from './util';\n","import {AutoSizeType, LoggerInterface, Spec as VgSpec} from 'vega';\nimport {isString, mergeConfig} from 'vega-util';\nimport {getPositionScaleChannel} from '../channel';\nimport * as vlFieldDef from '../channeldef';\nimport {Config, initConfig, stripAndRedirectConfig} from '../config';\nimport * as log from '../log';\nimport {normalize} from '../normalize';\nimport {assembleParameterSignals} from '../parameter';\nimport {LayoutSizeMixins, TopLevel, TopLevelSpec} from '../spec';\nimport {\n AutoSizeParams,\n Datasets,\n extractTopLevelProperties,\n getFitType,\n isFitType,\n TopLevelProperties\n} from '../spec/toplevel';\nimport {Dict, keys} from '../util';\nimport {buildModel} from './buildmodel';\nimport {assembleRootData} from './data/assemble';\nimport {optimizeDataflow} from './data/optimize';\nimport {Model} from './model';\n\nexport interface CompileOptions {\n /**\n * Sets a Vega-Lite configuration.\n */\n config?: Config;\n\n /**\n * Sets a custom logger.\n */\n logger?: LoggerInterface;\n\n /**\n * Sets a field title formatter.\n */\n fieldTitle?: vlFieldDef.FieldTitleFormatter;\n}\n\n/**\n * Vega-Lite's main function, for compiling Vega-Lite spec into Vega spec.\n *\n * At a high-level, we make the following transformations in different phases:\n *\n * Input spec\n * |\n * | (Normalization)\n * v\n * Normalized Spec (Row/Column channels in single-view specs becomes faceted specs, composite marks becomes layered specs.)\n * |\n * | (Build Model)\n * v\n * A model tree of the spec\n * |\n * | (Parse)\n * v\n * A model tree with parsed components (intermediate structure of visualization primitives in a format that can be easily merged)\n * |\n * | (Optimize)\n * v\n * A model tree with parsed components with the data component optimized\n * |\n * | (Assemble)\n * v\n * Vega spec\n *\n * @param inputSpec The Vega-Lite specification.\n * @param opt Optional arguments passed to the Vega-Lite compiler.\n * @returns An object containing the compiled Vega spec and normalized Vega-Lite spec.\n */\nexport function compile(inputSpec: TopLevelSpec, opt: CompileOptions = {}) {\n // 0. Augment opt with default opts\n if (opt.logger) {\n // set the singleton logger to the provided logger\n log.set(opt.logger);\n }\n\n if (opt.fieldTitle) {\n // set the singleton field title formatter\n vlFieldDef.setTitleFormatter(opt.fieldTitle);\n }\n\n try {\n // 1. Initialize config by deep merging default config with the config provided via option and the input spec.\n const config = initConfig(mergeConfig(opt.config, inputSpec.config));\n\n // 2. Normalize: Convert input spec -> normalized spec\n\n // - Decompose all extended unit specs into composition of unit spec. For example, a box plot get expanded into multiple layers of bars, ticks, and rules. The shorthand row/column channel is also expanded to a facet spec.\n // - Normalize autosize and width or height spec\n const spec = normalize(inputSpec, config);\n\n // 3. Build Model: normalized spec -> Model (a tree structure)\n\n // This phases instantiates the models with default config by doing a top-down traversal. This allows us to pass properties that child models derive from their parents via their constructors.\n // See the abstract `Model` class and its children (UnitModel, LayerModel, FacetModel, ConcatModel) for different types of models.\n const model: Model = buildModel(spec, null, '', undefined, config);\n\n // 4 Parse: Model --> Model with components\n\n // Note that components = intermediate representations that are equivalent to Vega specs.\n // We need these intermediate representation because we need to merge many visualization \"components\" like projections, scales, axes, and legends.\n // We will later convert these components into actual Vega specs in the assemble phase.\n\n // In this phase, we do a bottom-up traversal over the whole tree to\n // parse for each type of components once (e.g., data, layout, mark, scale).\n // By doing bottom-up traversal, we start parsing components of unit specs and\n // then merge child components of parent composite specs.\n //\n // Please see inside model.parse() for order of different components parsed.\n model.parse();\n\n // drawDataflow(model.component.data.sources);\n\n // 5. Optimize the dataflow. This will modify the data component of the model.\n optimizeDataflow(model.component.data, model);\n\n // drawDataflow(model.component.data.sources);\n\n // 6. Assemble: convert model components --> Vega Spec.\n const vgSpec = assembleTopLevelModel(\n model,\n getTopLevelProperties(inputSpec, spec.autosize, config, model),\n inputSpec.datasets,\n inputSpec.usermeta\n );\n\n return {\n spec: vgSpec,\n normalized: spec\n };\n } finally {\n // Reset the singleton logger if a logger is provided\n if (opt.logger) {\n log.reset();\n }\n // Reset the singleton field title formatter if provided\n if (opt.fieldTitle) {\n vlFieldDef.resetTitleFormatter();\n }\n }\n}\n\nfunction getTopLevelProperties(\n inputSpec: TopLevel,\n autosize: AutoSizeType | AutoSizeParams,\n config: Config,\n model: Model\n) {\n const width = model.component.layoutSize.get('width');\n const height = model.component.layoutSize.get('height');\n if (autosize === undefined) {\n autosize = {type: 'pad'};\n if (model.hasAxisOrientSignalRef()) {\n autosize.resize = true;\n }\n } else if (isString(autosize)) {\n autosize = {type: autosize};\n }\n if (width && height && isFitType(autosize.type)) {\n if (width === 'step' && height === 'step') {\n log.warn(log.message.droppingFit());\n autosize.type = 'pad';\n } else if (width === 'step' || height === 'step') {\n // effectively XOR, because else if\n\n // get step dimension\n const sizeType = width === 'step' ? 'width' : 'height';\n // log that we're dropping fit for respective channel\n log.warn(log.message.droppingFit(getPositionScaleChannel(sizeType)));\n\n // setting type to inverse fit (so if we dropped fit-x, type is now fit-y)\n const inverseSizeType = sizeType === 'width' ? 'height' : 'width';\n autosize.type = getFitType(inverseSizeType);\n }\n }\n\n return {\n ...(keys(autosize).length === 1 && autosize.type\n ? autosize.type === 'pad'\n ? {}\n : {autosize: autosize.type}\n : {autosize}),\n ...extractTopLevelProperties(config, false),\n ...extractTopLevelProperties(inputSpec, true)\n };\n}\n\n/*\n * Assemble the top-level model to a Vega spec.\n *\n * Note: this couldn't be `model.assemble()` since the top-level model\n * needs some special treatment to generate top-level properties.\n */\nfunction assembleTopLevelModel(\n model: Model,\n topLevelProperties: TopLevelProperties & LayoutSizeMixins,\n datasets: Datasets = {},\n usermeta: Dict\n): VgSpec {\n // Config with Vega-Lite only config removed.\n const vgConfig = model.config ? stripAndRedirectConfig(model.config) : undefined;\n\n const data = [].concat(\n model.assembleSelectionData([]),\n // only assemble data in the root\n assembleRootData(model.component.data, datasets)\n );\n\n const projections = model.assembleProjections();\n const title = model.assembleTitle();\n const style = model.assembleGroupStyle();\n const encodeEntry = model.assembleGroupEncodeEntry(true);\n\n let layoutSignals = model.assembleLayoutSignals();\n\n // move width and height signals with values to top level\n layoutSignals = layoutSignals.filter(signal => {\n if ((signal.name === 'width' || signal.name === 'height') && signal.value !== undefined) {\n topLevelProperties[signal.name] = +signal.value;\n return false;\n }\n return true;\n });\n\n const {params, ...otherTopLevelProps} = topLevelProperties;\n\n return {\n $schema: 'https://vega.github.io/schema/vega/v5.json',\n ...(model.description ? {description: model.description} : {}),\n ...otherTopLevelProps,\n ...(title ? {title} : {}),\n ...(style ? {style} : {}),\n ...(encodeEntry ? {encode: {update: encodeEntry}} : {}),\n data,\n ...(projections.length > 0 ? {projections: projections} : {}),\n ...model.assembleGroup([\n ...layoutSignals,\n ...model.assembleSelectionTopLevelSignals([]),\n ...assembleParameterSignals(params)\n ]),\n ...(vgConfig ? {config: vgConfig} : {}),\n ...(usermeta ? {usermeta} : {})\n };\n}\n"],"names":["Array","prototype","flat","Object","defineProperty","configurable","value","r","t","isNaN","arguments","Number","reduce","call","this","a","e","isArray","push","apply","slice","writable","flatMap","map","clone","_instanceof","obj","type","nativeMap","nativeSet","nativePromise","Map","_","Set","Promise","parent","circular","depth","includeNonEnumerable","allParents","allChildren","useBuffer","Buffer","Infinity","_clone","child","proto","resolve","reject","then","err","__isArray","__isRegExp","RegExp","source","__getRegExpFlags","lastIndex","__isDate","Date","getTime","isBuffer","allocUnsafe","length","copy","Error","create","getPrototypeOf","index","indexOf","i","forEach","key","keyChild","valueChild","set","entryChild","add","attrs","getOwnPropertyDescriptor","getOwnPropertySymbols","symbols","symbol","descriptor","enumerable","allPropertyNames","getOwnPropertyNames","propertyName","__objToStr","o","toString","re","flags","global","ignoreCase","multiline","clonePrototype","c","module","exports","data","opts","cmp","f","cycles","node","b","aobj","bobj","seen","stringify","toJSON","undefined","isFinite","JSON","out","TypeError","seenIndex","keys","sort","splice","isLogicalOr","op","or","isLogicalAnd","and","isLogicalNot","not","forEachLeaf","fn","subop","normalizeLogicalComposition","normalizer","deepEqual","equal","constructor","valueOf","hasOwnProperty","duplicate","clone_","pick","props","prop","omit","x","stableStringify","join","hash","isNumber","str","isString","h","charCodeAt","isNullOrFalse","contains","array","item","includes","some","arr","k","entries","every","mergeDeep","dest","src","s","deepMerge_","property","writeConfig","unique","values","results","u","v","val","setEqual","size","has","hasIntersection","prefixGenerator","prefixes","wrappedWithAccessors","splitAccessPath","y","computedPrefixes","fieldIntersection","isEmpty","vals","isBoolean","varName","alphanumericS","replace","match","logicalExpr","cb","deleteNestedProperty","orderedProps","shift","titleCase","charAt","toUpperCase","substr","accessPathWithDatum","path","datum","pieces","prefix","stringValue","flatAccessWithDatum","escapePathAccess","string","replacePathInField","replaceAll","find","replacement","removePathFromField","accessPathDepth","getFirstDefined","args","arg","idCounter","uniqueId","id","String","internalField","name","isInternalField","startsWith","normalizeAngle","angle","isNumeric","parseFloat","ROW","COLUMN","FACET","X","Y","X2","Y2","RADIUS","RADIUS2","THETA","THETA2","LATITUDE","LONGITUDE","LATITUDE2","LONGITUDE2","COLOR","FILL","STROKE","SHAPE","SIZE","ANGLE","OPACITY","FILLOPACITY","STROKEOPACITY","STROKEWIDTH","STROKEDASH","TEXT","ORDER","DETAIL","KEY","TOOLTIP","HREF","URL","DESCRIPTION","POLAR_POSITION_CHANNEL_INDEX","theta","theta2","radius","radius2","isPolarPositionChannel","GEO_POSIITON_CHANNEL_INDEX","longitude","longitude2","latitude","latitude2","GEOPOSITION_CHANNELS","UNIT_CHANNEL_INDEX","x2","y2","color","fill","stroke","opacity","fillOpacity","strokeOpacity","strokeWidth","strokeDash","shape","order","text","detail","tooltip","href","url","description","isColorChannel","channel","FACET_CHANNEL_INDEX","row","column","facet","FACET_CHANNELS","CHANNEL_INDEX","CHANNELS","_o","_d","_tt1","SINGLE_DEF_CHANNEL_INDEX","_r","_c","_f","SINGLE_DEF_UNIT_CHANNEL_INDEX","isChannel","SECONDARY_RANGE_CHANNEL","isSecondaryRangeChannel","getMainRangeChannel","getVgPositionChannel","getSecondaryRangeChannel","getSizeChannel","_x","_y","_x2","_y2","_latitude","_longitude","_latitude2","_longitude2","_theta","_theta2","_radius","_radius2","NONPOSITION_CHANNEL_INDEX","NONPOSITION_CHANNELS","POSITION_SCALE_CHANNEL_INDEX","POSITION_SCALE_CHANNELS","isXorY","POLAR_POSITION_SCALE_CHANNEL_INDEX","POLAR_POSITION_SCALE_CHANNELS","getPositionScaleChannel","sizeType","_t","_tt","_hr","_u","_al","_dd","_k","_oo","NONPOSITION_SCALE_CHANNEL_INDEX","NONPOSITION_SCALE_CHANNELS","SCALE_CHANNEL_INDEX","SCALE_CHANNELS","isScaleChannel","supportMark","mark","ALL_MARKS","ALL_MARKS_EXCEPT_GEOSHAPE","area","bar","image","rect","rule","circle","point","square","tick","line","trail","geoshape","arc","getSupportedMark","_g","rangeType","AGGREGATE_OP_INDEX","argmax","argmin","average","count","distinct","product","max","mean","median","min","missing","q1","q3","ci0","ci1","stderr","stdev","stdevp","sum","valid","variance","variancep","MULTIDOMAIN_SORT_OP_INDEX","isArgminDef","isArgmaxDef","isAggregateOp","COUNTING_OPS","isCountingAggregateOp","aggregate","SUM_OPS","SHARED_DOMAIN_OP_INDEX","toSet","binToString","bin","normalizeBin","p","isParameterExtent","isBinning","isBinParams","binned","isBinned","isObject","extent","autoMaxBins","isExprRef","replaceExprRef","newIndex","signalRefOrValue","extractTitleConfig","titleConfig","anchor","frame","offset","orient","subtitleColor","subtitleFont","subtitleFontSize","subtitleFontStyle","subtitleFontWeight","subtitleLineHeight","subtitlePadding","rest","titleMarkConfig","nonMark","subtitle","subtitleMarkConfig","isText","isSignalRef","isVgRangeStep","range","isDataRefDomain","domain","VG_MARK_CONFIGS","aria","ariaRole","ariaRoleDescription","blend","strokeCap","strokeDashOffset","strokeJoin","strokeOffset","strokeMiterLimit","startAngle","endAngle","padAngle","innerRadius","outerRadius","interpolate","tension","align","baseline","dir","dx","dy","ellipsis","limit","font","fontSize","fontWeight","fontStyle","lineBreak","lineHeight","cursor","cornerRadius","cornerRadiusTopLeft","cornerRadiusTopRight","cornerRadiusBottomLeft","cornerRadiusBottomRight","aspect","width","height","smooth","VG_MARK_INDEX","group","VG_CORNERRADIUS_CHANNELS","signalOrValueRefWithCondition","condition","conditionalSignalRefOrValue","expr","signal","signalOrValueRef","exprFromValueOrSignalRef","ref","signalOrStringValue","applyMarkConfig","model","propsList","getMarkConfig","markDef","config","getStyles","concat","style","getMarkPropOrConfig","opt","vgChannel","ignoreVgConfig","getMarkStyleConfig","styleConfigIndex","getStyleConfig","styles","styleConfig","sortParams","orderDef","fieldRefOption","orderChannelDef","field","vgField","mergeTitleFieldDefs","f1","f2","merged","fdToMerge","fieldDef1","mergeTitle","title1","title2","mergeTitleComponent","v1","v2","v1Val","v2Val","explicit","invalidSpec","spec","FIT_NON_SINGLE","containerSizeNonSingle","containerSizeNotCompatibleWithAutosize","droppingFit","unknownField","cannotProjectOnChannelWithoutField","cannotProjectAggregate","selectionNotSupported","NEEDS_SAME_SELECTION","columnsNotSupportByRowCol","differentParse","local","ancestor","customFormatTypeNotAllowed","invalidFieldType","droppingColor","emptyFieldDef","fieldDef","incompatibleChannel","markOrFacet","when","channelShouldBeDiscrete","channelShouldBeDiscreteOrDiscretizing","discreteChannelCannotEncode","unaggregateDomainHasNoEffectForRawField","unaggregateDomainWithNonSharedDomainOp","unaggregatedDomainWithLogScale","scalePropertyNotWorkWithScaleType","scaleType","propName","stepDropped","MORE_THAN_ONE_SORT","invalidTimeUnit","unitName","errorBand1DNotSupport","channelRequiredForBinned","main","logger","Warn","current","warn","isDateTime","part","TIMEUNIT_PARTS","MONTHS","SHORT_MONTHS","m","DAYS","SHORT_DAYS","d","dateTimeParts","normalize","parts","day","log","year","month","lowerM","toLowerCase","monthIndex","shortM","shortMonthIndex","normalizeMonth","quarter","q","normalizeQuarter","date","lowerD","dayIndex","shortD","shortDayIndex","normalizeDay","timeUnit","unit","dateTimeToExpr","utc","LOCAL_SINGLE_TIMEUNIT_INDEX","week","dayofyear","hours","minutes","seconds","milliseconds","isUTCTimeUnit","VEGALITE_TIMEFORMAT","getTimeUnitParts","filter","containsTimeUnit","fullTimeUnit","fieldExpr","end","fieldRef","lastTimeUnit","dateExpr","dateTimeExprToExpr","timeUnitSpecifierExpression","timeUnitParts","normalizeTimeUnit","params","isFieldEqualPredicate","predicate","isFieldLTPredicate","lt","isFieldLTEPredicate","lte","isFieldGTPredicate","gt","isFieldGTEPredicate","gte","isFieldRangePredicate","isFieldOneOfPredicate","oneOf","in","isFieldPredicate","predicateValueExpr","valueExpr","wrapTime","fieldFilterExpression","useInRange","_normalizeTimeUnit","timeUnitFieldExpr","predicateValuesExpr","isFieldValidPredicate","fieldValidPredicate","lower","upper","exprs","normalizePredicate","_normalizeTimeUnit2","QUANTITATIVE","ORDINAL","TEMPORAL","NOMINAL","GEOJSON","ScaleType","SCALE_CATEGORY_INDEX","linear","pow","sqrt","symlog","identity","sequential","time","ordinal","band","quantile","quantize","threshold","scaleCompatible","scaleType1","scaleType2","scaleCategory1","scaleCategory2","SCALE_PRECEDENCE_INDEX","scaleTypePrecedence","CONTINUOUS_TO_CONTINUOUS_SCALES","CONTINUOUS_TO_CONTINUOUS_INDEX","QUANTITATIVE_SCALES_INDEX","CONTINUOUS_TO_DISCRETE_INDEX","CONTINUOUS_DOMAIN_SCALES","CONTINUOUS_DOMAIN_INDEX","DISCRETE_DOMAIN_INDEX","hasDiscreteDomain","hasContinuousDomain","isContinuousToContinuous","isContinuousToDiscrete","isParameterDomain","rangeMax","rangeMin","scheme","NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTY_INDEX","domainMax","domainMin","domainMid","bins","reverse","round","clamp","nice","base","exponent","constant","zero","padding","paddingInner","paddingOuter","NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES","scaleTypeSupportProperty","channelScalePropertyIncompatability","Mark","ARC","AREA","BAR","IMAGE","LINE","POINT","RECT","RULE","TICK","TRAIL","CIRCLE","SQUARE","GEOSHAPE","isPathMark","isRectBasedMark","PRIMITIVE_MARKS","isMarkDef","FILL_STROKE_CONFIG","VL_ONLY_MARK_CONFIG_PROPERTIES","filled","invalid","timeUnitBandSize","timeUnitBandPosition","MARK_CONFIGS","isRelativeBandSize","BAR_CORNER_RADIUS_INDEX","horizontal","vertical","defaultBarConfig","binSpacing","continuousBandSize","defaultRectConfig","midPointRefWithPositionInvalidTest","channelDef","scale","midPoint","isFieldDef","get","wrapPositionInvalidTest","fieldInvalidTestValueRef","test","fieldInvalidPredicate","valueRefForFieldOrDatumDef","scaleName","encode","isDatumDef","interpolatedSignalRef","fieldOrDatumDef","fieldOrDatumDef2","startSuffix","bandPosition","start","suffix","channel2Def","stack","defaultRef","isFieldOrDatumDef","isTypedFieldDef","getBandPosition","fieldDef2","impute","binSuffix","binRequiresRange","isValueDef","offsetMixins","widthHeightValueOrSignalRef","isFunction","isCustomFormatType","formatType","customFormatExpr","format","formatSignalRef","normalizeStack","formatCustomType","fieldToFormat","isFieldOrDatumDefForTimeFormat","rawTimeFormat","isUTCScale","formatExpression","timeFormatExpression","timeFormat","isScaleFieldDef","numberFormat","channelDefType","binFormatExpression","formatExpr","datumDef","datumDefToExpr","guideFormat","omitTimeFormatConfig","specifiedFormat","guideFormatType","binNumberFormatExpr","startField","endField","DEFAULT_SORT_OP","SORT_BY_CHANNEL_INDEX","isSortByChannel","isSortByEncoding","isSortField","isSortArray","isFacetMapping","isFacetFieldDef","isFacetSpec","toFieldDefBase","isSortableFieldDef","getBandSize","useVlSizeChannel","sizeChannel","discreteBandSize","_config$mark$type2","_config$mark$type3","hasBandEnd","isConditionalDef","hasConditionalFieldDef","hasConditionalFieldOrDatumDef","isContinuousFieldOrDatumDef","cd","isDiscrete","isNumericDataDef","isPositionFieldOrDatumDef","isMarkPropFieldOrDatumDef","isStringFieldOrDatumDef","toStringFieldDef","argAccessor","isCount","nofn","isOpFieldDef","tu","timeUnitToString","forAs","def","defaultTitleFormatter","fieldTitle","timeUnitParams","maxbins","functionalTitleFormatter","countTitle","verbalTitleFormatter","titleFormatter","setTitleFormatter","formatter","title","allowDisabling","includeDefault","guideTitle","getGuide","_getGuide","defaultTitle","axis","legend","header","getFormatMixins","guide","getFieldDef","getFieldOrDatumDef","initChannelDef","initFieldOrDatumDef","fd","customFormatTypes","guideType","newGuide","initFieldDef","initDatumDef","compositeMark","fullType","getFullName","newType","_fieldDef$scale","defaultType","compatible","warning","COMPATIBLE","_def$scale","channelCompatibility","encoding","sub","labelOrient","titleOrient","step","undefinedIfExprNotRequired","isTime","isLocalSingleTimeUnit","parse","valueArray","console","CONDITIONAL_AXIS_PROP_INDEX","labelAlign","vgProp","labelBaseline","labelColor","labelFont","labelFontSize","labelFontStyle","labelFontWeight","labelOpacity","labelOffset","labelPadding","gridColor","gridDash","gridDashOffset","gridOpacity","gridWidth","tickColor","tickDash","tickDashOffset","tickOpacity","tickSize","tickWidth","isConditionalAxisValue","AXIS_PARTS","AXIS_PROPERTY_TYPE","grid","gridCap","gridScale","domainCap","domainColor","domainDash","domainDashOffset","domainOpacity","domainWidth","labelAngle","labelBound","labelFlush","labelFlushOffset","labelLimit","labelLineHeight","labelOverlap","labels","labelSeparation","maxExtent","minExtent","position","tickCap","tickMinStep","tickOffset","tickRound","ticks","titleAlign","titleAnchor","titleAngle","titleBaseline","titleColor","titleFont","titleFontSize","titleFontStyle","titleFontWeight","titleLimit","titleLineHeight","titleOpacity","titlePadding","titleX","titleY","tickBand","tickCount","tickExtra","translate","zindex","COMMON_AXIS_PROPERTIES_INDEX","AXIS_PROPERTIES_INDEX","labelExpr","isAxisProperty","AXIS_CONFIGS","axisBand","axisBottom","axisDiscrete","axisLeft","axisPoint","axisQuantitative","axisRight","axisTemporal","axisTop","axisX","axisXBand","axisXDiscrete","axisXPoint","axisXQuantitative","axisXTemporal","axisY","axisYBand","axisYDiscrete","axisYPoint","axisYQuantitative","axisYTemporal","isUnitSpec","CompositeMarkNormalizer","run","hasMatchingType","channelHasField","isAggregate","extractTransformsFromEncoding","oldEncoding","groupby","timeUnits","aggOp","remaining","isTitleDefined","newField","newFieldDef","aggregateEntry","as","secondaryChannel","isNonPositionScaleChannel","initEncoding","normalizedEncoding","markSupported","primaryFieldDef","markChannelCompatible","defs","normalizeEncoding","newChannelDef","mapping","thisArg","el","pathGroupingFields","details","getCompositeMarkTooltip","tooltipSummary","continuousAxisChannelDef","encodingWithoutContinuousAxis","withFieldName","fieldPrefix","titlePrefix","mainTitle","getTitle","escape","channelDefArray","fieldDefs","makeCompositeAggregatePartFactory","compositeMarkDef","continuousAxis","sharedEncoding","compositeMarkConfig","partName","positionPrefix","endPositionPrefix","extraEncoding","partLayerMixins","partBaseSpec","clip","compositeMarkContinuousAxis","continuousAxisChannelDef2","continuousAxisChannelDefError","continuousAxisChannelDefError2","filterAggregateFromChannelDef","continuousAxisWithoutAggregate","compositeMarkOrient","xAggregate","yAggregate","BOXPLOT","boxPlotNormalizer","normalizeBoxPlot","getBoxPlotType","_encoding","projection","_p","outerSpec","boxplot","sizeValue","boxPlotType","transform","ticksOrient","boxOrient","customTooltipWithoutAggregatedField","continuousFieldName","boxplotSpecificAggregate","boxParamsQuartiles","postAggregateCalculates","calculate","oldContinuousAxisChannelDef","oldEncodingWithoutContinuousAxis","filteredEncoding","customTooltipWithAggregatedField","filterTooltipWithAggregatedField","boxParams","encodingWithoutSizeColorAndContinuousAxis","makeBoxPlotPart","makeBoxPlotExtent","makeBoxPlotBox","makeBoxPlotMidTick","fiveSummaryTooltipEncoding","endTick","whiskerTooltipEncoding","whiskerLayers","boxLayers","layer","lowerBoxExpr","upperBoxExpr","iqrExpr","lowerWhiskerExpr","upperWhiskerExpr","joinaggregateTransform","joinaggregate","filteredWhiskerSpec","encodingWithoutSizeColorContinuousAxisAndTooltip","axisWithoutTitle","outlierLayersMixins","filteredLayersMixins","filteredLayersMixinsTransforms","unshift","continousAxisField","ERRORBAR","errorBarNormalizer","normalizeErrorBar","tooltipEncoding","errorBarParams","makeErrorBarPart","errorbar","thickness","errorBarOrientAndInputType","xError","xError2","yError","yError2","errorBarIsInputTypeRaw","inputType","isTypeAggregatedUpperLower","errorBarIsInputTypeAggregatedUpperLower","isTypeAggregatedError","errorBarIsInputTypeAggregatedError","errorBarSpecificAggregate","tooltipTitleWithFieldName","center","getTitlePrefix","centerOp","lowerExtentOp","upperExtentOp","postAggregateCalculate","substring","errorBarAggregationAndCalculation","oldContinuousAxisChannelDef2","oldContinuousAxisChannelDefError","oldContinuousAxisChannelDefError2","oldAggregate","oldGroupBy","operation","ERRORBAND","errorBandNormalizer","normalizeErrorBand","errorBandDef","makeErrorBandPart","errorband","is2D","bandMark","bordersMark","compositeMarkRegistry","VL_ONLY_LEGEND_CONFIG","HEADER_TITLE_PROPERTIES_MAP","HEADER_LABEL_PROPERTIES_MAP","labelAnchor","HEADER_TITLE_PROPERTIES","HEADER_LABEL_PROPERTIES","HEADER_CONFIGS","headerRow","headerColumn","headerFacet","LEGEND_SCALE_CHANNELS","SELECTION_ID","defaultConfig","on","fields","toggle","clear","interval","encodings","zoom","isLegendBinding","bind","isLegendStreamBinding","isSelectionParameter","param","assembleParameterSignals","signals","init","update","isConcatSpec","isVConcatSpec","isHConcatSpec","TOP_LEVEL_PROPERTIES","extractTopLevelProperties","includeParams","isStep","isFrameMixins","COMPOSITION_LAYOUT_PROPERTIES","bounds","columns","spacing","getViewConfigContinuousSize","viewConfig","getViewConfigDiscreteStep","getViewConfigDiscreteSize","DEFAULT_STEP","background","view","continuousWidth","continuousHeight","box","outliers","borders","pointPadding","barBandPaddingInner","rectBandPaddingInner","minBandSize","minFontSize","maxFontSize","minOpacity","maxOpacity","minSize","minStrokeWidth","maxStrokeWidth","quantileCount","quantizeCount","gradientHorizontalMaxLength","gradientHorizontalMinLength","gradientVerticalMaxLength","gradientVerticalMinLength","unselectedOpacity","selection","defaultSelectionConfig","tab10","DEFAULT_FONT_SIZE","guideLabel","groupTitle","groupSubtitle","DEFAULT_COLOR","blue","orange","red","teal","green","yellow","purple","pink","brown","gray0","gray1","gray2","gray3","gray4","gray5","gray6","gray7","gray8","gray9","gray10","gray11","gray12","gray13","gray14","gray15","getAxisConfigInternal","axisConfig","axisConfigInternal","configPropsWithExpr","initConfig","specifiedConfig","restConfig","mergedConfig","mergeConfig","fontConfig","cell","category","colorSignalConfig","fontSizeSignalConfig","outputConfig","markConfigType","axisConfigType","headerConfigType","styleConfigInternal","getStyleConfigInternal","MARK_STYLES","VL_ONLY_CONFIG_PROPERTIES","VL_ONLY_ALL_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX","stripAndRedirectConfig","markType","vlOnlyMarkSpecificConfigs","redirectConfigToStyleConfig","redirectTitleConfig","toProp","compositeMarkPart","isLayerSpec","SpecMapper","mapFacet","isRepeatSpec","mapRepeat","mapHConcat","mapVConcat","mapConcat","mapLayerOrUnit","mapLayer","mapUnit","subspec","hconcat","vconcat","STACK_OFFSET_INDEX","STACKABLE_MARKS","STACK_BY_DEFAULT_MARKS","potentialStackedChannel","xDef","yDef","xScale","_xDef$scale","yScale","_yDef$scale","fieldChannel","stackedFieldDef","stackedField","dimensionChannel","getDimensionChannel","dimensionDef","dimensionField","stackBy","sc","cDef","disallowNonLinearStack","groupbyChannel","groupbyField","dropLineAndPoint","_point","_line","dropLineAndPointFromConfig","getPointOverlay","markConfig","getLineOverlay","PathOverlayNormalizer","normParams","pointOverlay","lineOverlay","stackProps","overlayEncoding","stackFieldChannel","replaceRepeaterInFacet","repeater","replaceRepeaterInMapping","replaceRepeaterInFieldDef","replaceRepeaterInEncoding","replaceRepeatInProp","repeat","replaceRepeaterInFieldOrDatumDef","replaceRepeaterInChannelDef","channelDefWithoutCondition","RuleForRangedLineNormalizer","mainChannelDef","hasX2","hasY2","mergeEncoding","parentEncoding","channels","parentChannelDef","mergedChannelDef","mergeProjection","parentProjection","isFilter","isLookup","isPivot","isDensity","isQuantile","isRegression","isLoess","isSample","isWindow","isJoinAggregate","isFlatten","isCalculate","isBin","isImpute","isTimeUnit","isStack","isFold","normalizeTransforms","tx","normalizeBinExtent","from","normalizeChannelDef","enc","_enc$scale","_enc$scale$domain","cond","ext","normalizeSelectionComposition","pred","empty","emptySelections","selectionPredicates","TopLevelSelectionsNormalizer","selections","super","addSpecNameToParams","views","method","normalizedSpec","topLevelSelectionNormalizer","coreNormalizer","selectionCompatNormalizer","normalizeGenericSpec","autosize","sizeInfo","isFitCompatible","autosizeDefault","_normalizeAutoSize","normalizeAutoSize","hasRow","hasColumn","hasFacet","mapFacetedUnit","specWithReplacedEncoding","mapUnitWithParentEncodingOrProjection","normalizeLayerOrUnit","unitNormalizer","nonFacetUnitNormalizers","isLayerRepeatSpec","mapLayerRepeat","mapNonLayerRepeat","childSpec","repeaterPrefix","layerValue","childRepeater","childName","remainingProperties","repeatValues","repeatValue","rowValue","columnValue","mergedProjection","mergedEncoding","facetMapping","layout","getFacetMappingAndLayout","newEncoding","facets","defWithoutLayout","otherParams","selDef","select","Split","implicit","combine","getWithExplicit","setWithExplicit","copyKeyFromSplit","copyKeyFromObject","copyAll","other","makeExplicit","makeImplicit","tieBreakByComparing","compare","propertyOf","diff","defaultTieBreaker","mergeValuesWithExplicit","tieBreaker","AncestorParse","parseNothing","isUrlData","isInlineData","isNamedData","isGenerator","isSequenceGenerator","isSphereGenerator","isGraticuleGenerator","DataSourceType","LBRACK","RBRACK","ILLEGAL","DEFAULT_MARKS","DEFAULT_SOURCE","MARKS","eventSelector","selector","marks","parseMerge","trim","parseSelector","endChar","pushChar","popChar","n","output","stream","between","parseBetween","j","throttle","markname","lastIndexOf","split","parseThrottle","isMarkType","marktype","consume","debounce","parseStream","assembleInit","isExpr","wrap","assembled","UTC","dateTimeToTimestamp","assembleUnitSelectionSignals","selCmpt","component","modifyExpr","TUPLE","selectionCompilers","defined","MODIFY","events","STORE","cleanupEmptyOnArray","assembleFacetSignals","getName","assembleUnitSelectionMarks","DataFlowNode","debugName","_parent","addChild","_children","numChildren","loc","removeChild","oldChild","remove","insertAsParentOf","swapWithParent","newParent","OutputNode","cloneObj","_source","_name","refCounts","dependentFields","producedFields","_hash","getSource","isRequired","setSource","TimeUnitNode","formula","reduceFieldDef","timeUnitComponent","merge","children","removeFormulas","newFormula","assemble","transforms","units","timezone","TUPLE_FIELDS","SelectionProjectionComponent","items","hasChannel","hasField","project","proj","parsed","signalName","sg","counter","cfg","initVal","tplType","getScaleComponent","allSignals","hasLegend","scaleBindings","bound","scales","topLevelSignals","isTopLevelLayer","namedSg","VL_SELECTION_RESOLVE","isLayerModel","BRUSH","SCALE_TRIGGER","fieldsSg","hasScales","dataSignals","scaleTriggers","filterExpr","evt","filters","_evt$between$","cs","vname","visual","dname","scaled","getSizeSignalRef","coord","channelSignals","toNum","xvname","yvname","store","vgStroke","enter","force","wrapCondition","refFn","valueRef","conditionValueRef","isConditionalParameter","parseSelectionPredicate","expression","textRef","tooltipRefForEncoding","reactiveGeom","tooltipRefFromChannelDef","markTooltip","content","tooltipData","toSkip","tuples","fDef","mainChannel","channel2","keyValues","enableAria","ariaRoleDesc","descriptionValue","nonPosition","defaultValue","transparentIfNeeded","defaultFill","defaultStroke","colorVgChannel","fillStrokeMarkDefAndConfig","getOffset","markDefOffsetValue","getOffsetChannel","pointPosition","defaultPos","pointPositionDefaultRef","positionRef","definedValueOrConfig","domainDefinitelyIncludesZero","mult","ALIGNED_X_CHANNEL","left","right","BASELINED_Y_CHANNEL","top","middle","bottom","vgAlignedPositionChannel","defaultAlign","alignChannel","alignExcludingSignal","pointOrRangePosition","defaultPos2","rangePosition","pos2Mixins","baseChannel","vgSizeChannel","position2Ref","position2orSize","pointPosition2OrSize","dimensionSize","rectPosition","channelDef2","hasSizeDef","isBarBand","sizeMixins","bandSize","defaultSizeRef","defaultBandAlign","posRef","vgChannel2","sizeRef","sizeOffset","positionAndSize","axes","_model$component$axes","axisTranslate","rectBinRef","getBinSpacing","startRef","rectBinPosition","scaleRange","spacingOffset","reverseExpr","offsetExpr","translateExpr","ALWAYS_IGNORE","baseEncodeEntry","ignore","markDefProperties","wrapAllFieldsInvalid","filterIndex","aggregator","scaleComponent","allFieldsInvalidPredicate","valueIfDefined","VORONOI","nearest","cellDef","interactive","isVoronoi","exists","inputBindings","disableDirectManipulation","sgname","TOGGLE","tpl","idx","findIndex","addClear","vIdx","tIdx","legendBindings","projLen","selDef_","legendFilter","selName","markName","ds","sgName","tuple","ANCHOR","DELTA","scalesCompiler","INTERVAL_BRUSH","onDelta","delta","sizeSg","scaleCmpt","reversed","sx","sy","legends","facetModel","isFacetModel","getFacetModel","requiresSelectionId","identifier","RawCode","Literal","Property","Identifier","ArrayExpression","BinaryExpression","CallExpression","ConditionalExpression","LogicalExpression","MemberExpression","ObjectExpression","UnaryExpression","ASTNode","TokenName","lookahead","visit","visitor","elements","callee","consequent","alternate","object","properties","argument","SyntaxIdentifier","MessageUnexpectedToken","MessageInvalidRegExp","MessageUnterminatedRegExp","MessageStrictOctalLiteral","DISABLED","RegexNonAsciiIdentifierStart","RegexNonAsciiIdentifierPart","assert","message","isDecimalDigit","ch","isHexDigit","isOctalDigit","isWhiteSpace","isLineTerminator","isIdentifierStart","fromCharCode","isIdentifierPart","keywords","skipComment","scanHexEscape","len","code","throwError","scanUnicodeCodePointEscape","cu1","cu2","getEscapedIdentifier","scanIdentifier","getIdentifier","scanPunctuator","code2","ch2","ch3","ch4","ch1","scanNumericLiteral","number","parseInt","scanHexLiteral","octal","scanOctalLiteral","scanRegExp","body","classMarker","terminated","literal","scanRegExpBody","search","scanRegExpFlags","pattern","tmp","$0","$1","exception","testRegExp","regex","advance","quote","scanStringLiteral","lex","token","peek","pos","finishBinaryExpression","operator","finishCallExpression","finishIdentifier","finishLiteral","raw","finishMemberExpression","accessor","computed","member","finishProperty","kind","messageFormat","error","msg","whole","throwUnexpected","expect","matchKeyword","keyword","parseArrayInitialiser","parseConditionalExpression","finishArrayExpression","parseObjectPropertyKey","parseObjectProperty","parseObjectInitialiser","finishObjectExpression","legalKeywords","parsePrimaryExpression","parseExpression","parseGroupExpression","parseArguments","parseNonComputedMember","isIdentifierName","parseNonComputedProperty","parseComputedMember","parsePostfixExpression","parseLeftHandSideExpressionAllowCall","parseUnaryExpression","finishUnaryExpression","binaryPrecedence","prec","marker","markers","pop","parseBinaryExpression","finishConditionalExpression","startsWithDatum","getDependentFields","ast","dependents","FilterNode","_dependentFields","dfnode","getSelectionComponent","tunode","parseSelectionExtent","filterOp","isSelectionPredicate","setAxisEncode","vgRef","assembleAxis","axisCmpt","disable","propType","propValue","valueOrSignalRef","conditions","propIndex","valueOrSignalCRef","signalRef","mainExtracted","hasAxisPart","titleString","assembleTitle","assembleAxisSignals","getAxisConfigFromConfigTypes","configTypes","assign","configType","orient1","orientConfig1","orientConfig2","conditionalOrientAxisConfig","getAxisConfigs","typeBasedConfigTypes","isQuantitative","axisChannel","axisOrient","vlOnlyConfigTypes","vgConfigTypes","vlOnlyAxisConfig","vgAxisConfig","axisConfigStyle","getAxisConfigStyle","axisConfigTypes","toMerge","_config$configType","getAxisConfig","axisConfigs","configFrom","configValue","axisRules","defaultGrid","gridChannel","defaultLabelAlign","defaultLabelBaseline","defaultLabelFlush","hasTimeUnit","defaultLabelOverlap","defaultTickCount","fieldDefTitle","getFieldDefTitle","typedFieldDef","defaultZindex","normalizeAngleExpr","alwaysIncludeMiddle","isX","mainOrient","CalculateNode","forEachFieldDef","sortValue","sortArrayIndexField","getHeaderChannel","getHeaderProperty","headerSpecificConfig","getHeaderProperties","HEADER_CHANNELS","HEADER_TYPES","assembleTitleGroup","layoutHeaders","facetFieldDef","ta","headerChannel","role","defaultHeaderGuideBaseline","defaultHeaderGuideAlign","assembleHeaderProperties","assembleHeaderGroups","layoutHeader","groups","headerType","headerComponent","assembleHeaderGroup","getSort","assembleLabelTitle","titleTextExpr","isFacetWithoutRowCol","hasAxes","sizeSignal","LAYOUT_TITLE_BAND","getLayoutTitleBand","propertiesMap","assembleLayoutSignals","sizeSignals","layoutSize","stepSignal","sizeExpr","isWidth","endsWith","safeExpr","cardinality","getSizeTypeFromLayoutSizeType","layoutSizeType","guideEncodeEntry","valueDef","defaultScaleResolve","isConcatModel","parseGuideResolve","channelScaleResolve","LEGEND_COMPONENT_PROPERTIES","clipHeight","columnPadding","direction","fillColor","gradientLength","gradientOpacity","gradientStrokeColor","gradientStrokeWidth","gradientThickness","gridAlign","legendX","legendY","rowPadding","strokeColor","symbolDash","symbolDashOffset","symbolFillColor","symbolLimit","symbolOffset","symbolOpacity","symbolSize","symbolStrokeColor","symbolStrokeWidth","symbolType","LegendComponent","legendEncodeRules","symbolsSpec","legendCmpt","legendType","mixins","getMaxValue","symbolBaseFillColor","getFirstConditionValue","selectedCondition","gradient","gradientSpec","specifiedlabelsSpec","labelsSpec","entriesSpec","getConditionValue","conditionalDef","Math","reducer","hasConditionalValueDef","legendRules","legendConfig","gradientLengthSignal","defaultGradientLength","shapeChannelDef","markShape","defaultSymbolType","getLegendType","getDirection","defaultDirection","parseLegend","legendComponent","isUnitModel","parseLegendForChannel","parseUnitLegend","mergeLegendComponent","parseNonUnitLegend","isExplicit","getLegendDefWithScale","_model$fieldDef","legendSelections","parseInteractiveLegend","ruleParams","legendEncoding","_legend","legendEncode","legendEncodeParams","legendEncodingPart","_legend2","mergedLegend","childLegend","mergedOrient","childOrient","typeMerged","mergedValueWithExplicit","mergeSymbolType","_mergedLegend$implici","_mergedLegend$implici2","_mergedLegend$explici","_mergedLegend$explici2","st1","st2","assembleLegends","legendComponentIndex","legendByDomain","domainHash","mergedLegendComponent","l","_legend$encode3","setLegendEncode","assembleLegend","assembleProjections","projections","assembleProjectionForModel","assembleProjectionsForModelAndChildren","fits","sources","lookupDataSource","fit","PROJECTION_PROPERTIES","ProjectionComponent","specifiedProjection","parseProjection","hasProjection","posssiblePair","requestDataName","Main","gatherFitData","projComp","projectionName","parseUnitProjection","nonUnitProjection","mergable","first","second","allPropertiesShared","mergeIfNoConflict","modelProjection","isFit","renameProjection","parseNonUnitProjections","rangeFormula","formulaAs","binKey","getBinSignalName","createBinComponent","span","isBinTransform","normalizedBin","extentSignal","getSignalsFromModel","binComponent","BinNode","binComponentIndex","renameSignal","binAs","remainingAs","binTrans","addDimension","dims","posChannel","getPositionChannelFromLatLong","AggregateNode","dimensions","measures","meas","argField","scaleDomain","parentMeasures","childMeasures","ops","mergeMeasures","debug","addDimensions","alias","FacetNode","sortField","sortIndexField","childModel","_this$channel","depFields","getChildIndependentFieldsWithStep","childIndependentFieldsWithStep","childScaleComponent","getFieldFromDomain","assembleDomain","assembleRowColumnHeaderData","crossedDataName","childChannel","assembleFacetHeaderData","hasSharedAxis","headers","stop","facetData","unquote","getImplicitFromFilterTransform","getImplicitFromEncoding","mainFieldDef","dimensionChannelDef","ParseNode","_parse","ancestorParse","makeWithAncestors","parsedAs","assembleFormatParse","formatParse","assembleTransforms","onlyNested","IdentifierNode","GraticuleNode","SequenceNode","SourceNode","_data","defaultExtension","exec","_generator","hasName","isDataSourceNode","Optimizer","setModified","BottomUpOptimizer","getNodeDepths","depths","optimize","topologicalSort","modifiedFlag","TopDownOptimizer","MergeIdenticalNodes","mergeNodes","nodes","mergedNode","hashes","buckets","RemoveUnnecessaryIdentifierNodes","RemoveDuplicateTimeUnits","timeUnitFields","RemoveUnnecessaryOutputNodes","MoveParseUp","MergeParse","originalChildren","parseChildren","commonParse","conflictingParse","parseNode","mergedParseNode","childNode","RemoveUnusedSubtrees","MergeTimeUnits","timeUnitChildren","combination","MergeAggregates","aggChildren","groupedAggregates","agg","groupBys","groupBy","mergeableAggs","mergedAggs","MergeBins","moveBinsUp","promotableBins","remainingBins","promotedBin","remainingBin","MergeOutputs","otherChildren","mainOutput","lastOutput","theChild","JoinAggregateTransformNode","w","getDefaultName","joinAggregateFieldDef","StackNode","_stack","stackTransform","sortFields","sortOrder","normalizedAs","isValidAsArray","stackField","facetby","stackProperties","dimensionFieldDef","stackby","by","_field","getStackByFields","getGroupbyFields","WindowTransformNode","window","windowFieldDef","ignorePeers","moveFacetDown","facetMain","moveMainDownToFacet","cloner","newName","FACET_SCALE_PREFIX","outputNodes","checkLinks","runOptimizer","optimizer","modified","optimizationDataflowHelper","dataComponent","firstPass","roots","optimizers","SignalRefWrapper","exprGenerator","rename","parseScaleDomain","localScaleComponents","util","domains","parseDomainForChannel","parseSelectionDomain","isFaceted","facetParent","parseUnitScaleDomain","selectionExtent","childComponent","domainsTieBreaker","se","parseNonUnitScaleDomain","scaleConfig","reason","canUseUnaggregatedDomain","useUnaggregatedDomain","normalizeUnaggregatedDomain","specifiedScales","parseSingleChannelDomain","convertDomainIfItIsDateTime","normalizedTimeUnit","mapDomainToDataSignal","isDomainUnionWith","defaultDomain","unionWith","stackDimensions","normalizeSortField","fieldDefToSortBy","isStackedMeasure","domainSort","Raw","binSignal","getSignalName","mergeDomains","uniqueDomains","_s","domainWithoutSort","sorts","unionDomainSorts","UNIONDOMAIN_SORT_OP_INDEX","allData","isDataRefUnionedDomain","nonUnionDomain","isFieldRefUnionDomain","assembleScales","assembleScalesForModel","otherScaleProps","assembleScaleRange","domainRaw","parsedExtent","assembleSelectionScaleDomain","ScaleComponent","typeWithExplicit","RANGE_PROPERTIES","getBinStepSignal","binCount","updatedName","parseRangeForChannel","specifiedScale","supportedByScaleType","channelIncompatability","fromName","parseScheme","sizeRangeMin","xyStepSignals","maxBandSize","minXYStep","maxSize","pointStep","MAX_SIZE_RANGE_STEP_RATIO","sizeRangeMax","rMax","rMin","interpolateRange","defaultContinuousToDiscreteCount","PI","defaultRange","isExtendedScheme","widthStep","heightStep","parseScaleProperty","localScaleCmpt","mergedScaleCmpt","specifiedValue","scalePadding","scalePaddingInner","scaleRules","parseUnitScaleProperty","parseNonUnitScaleProperty","specifiedDomain","barConfig","continuousPadding","paddingValue","bandPaddingInner","paddingInnerValue","bandPaddingOuter","xReverse","last","parseScaleRange","rangeWithExplicit","parseUnitScaleRange","valueWithExplicit","defaultScaleType","_fieldDef$axis","CHANNEL","channelSupportScaleType","specifiedType","fieldDefType","parseScaleCore","scaleComponents","sType","parseUnitScaleCore","scaleTypeWithExplicitIndex","explicitScaleType","childScaleType","scaleTypeTieBreaker","childScale","renameScale","parseNonUnitScaleCore","NameMap","nameMap","oldName","Model","parentGivenName","scaleNameMap","projectionNameMap","signalNameMap","specType","compositionConfig","spacingConfig","extractCompositionLayout","outputNodeRefCounts","parseScale","parseLayoutSize","renameTopLevelLayoutSizeSignal","parseSelections","parseData","parseAxesAndHeaders","parseLegends","parseMarkGroup","ignoreRange","parseScales","assembleGroupStyle","_this$view","assembleEncodeFromView","baseView","assembleGroupEncodeEntry","isTopLevel","encodeEntry","assembleLayout","titleBand","headerComponentIndex","assembleLayoutTitleBand","assembleDefaultLayout","assembleHeaderMarks","headerMarks","assembleAxes","axisComponents","titleNoEncoding","assembleGroup","assembleSignals","assembleMarks","getDataName","fullName","oldSignalName","originalScaleName","localScaleComponent","variableName","origName","sel","hasAxisOrientSignalRef","hasOrientSignalRef","_this$component$axes$2","ModelWithField","r1","getMapping","acc","DensityTransformNode","specifiedAs","density","FilterInvalidNode","vegaFilters","FlattenTransformNode","flatten","FoldTransformNode","fold","GeoJSONNode","geojson","geoJsonCounter","coordinates","pair","GeoPointNode","ImputeNode","processSequence","keyvals","imputeTransform","imputedChannel","keyChannel","groupbyFields","LoessTransformNode","loess","LookupNode","secondary","fromOutputNode","isLookupData","fromSource","findSource","fromOutputName","Lookup","isLookupSelection","materialized","lookup","foreign","asName","default","QuantileTransformNode","RegressionTransformNode","regression","PivotTransformNode","pivot","SampleTransformNode","sample","makeWalkTree","datasetIndex","walkTree","dataSource","getHeaderType","parseFacetHeader","_fieldDef$header","makeHeaderComponent","mergeChildAxis","axisComponent","mainAxis","parseChildrenLayoutSize","parseNonUnitLayoutSizeForChannel","layoutSizeCmpt","mergedSize","childSize","scaleResolve","defaultUnitSize","facetSortFieldName","FacetModel","buildModel","initFacet","initFacetFieldDef","normalizedFacet","parseFacetHeaders","assembleSelectionTopLevelSignals","assembleSelectionData","getHeaderLayoutMixins","layoutMixins","layoutHeaderComponent","bandType","columnDistinctSignal","getCardinalityAggregateForChild","assembleFacet","facetRoot","outputName","cross","facetSortFields","facetSortOrder","ORTHOGONAL_ORIENT","_facet$channel","root","assembleFacetData","otherData","dataName","formatMesh","_data$format","mesh","otherFeature","_otherData$format","feature","formatFeature","_data$format2","otherMesh","_otherData$format2","head","existingSource","parseRoot","sequence","graticule","parentIsLayer","makeFromEncoding","lookupCounter","derivedType","transformNode","makeFromTransform","make","parseTransformArray","implicitSelection","getImplicitFromSelection","implicitEncoding","parseAll","parseAllForSortIndex","rawName","mainName","lookupName","materializeSelections","facetName","makeJoinAggregateFromFacet","ConcatModel","getChildren","widthType","heightType","parseConcatLayoutSize","parseAxisGroup","layoutSignals","db","AXIS_COMPONENT_PROPERTIES_INDEX","AXIS_COMPONENT_PROPERTIES","AxisComponent","OPPOSITE_ORIENT","mergeAxisComponents","mergedAxisCmpts","childAxisCmpts","mergeAxisComponent","propsToAlwaysIncludeConfig","parseAxis","_config","_config$axis","defaultOrient","_axis2","getLabelAngle","hasValue","hasConfigValue","axisEncoding","axisEncode","axisEncodingPart","specifiedLabelsSpec","initMarkdef","originalMarkDef","specifiedOrient","xIsContinuous","yIsContinuous","xIsTemporal","yIsTemporal","cornerRadiusEnd","newProps","BAR_CORNER_RADIUS_END_INDEX","newProp","fixedShape","shapeMixins","defaultSize","markPropOrConfig","markCompiler","vgMark","postEncodingTransform","shapeDef","vgThicknessChannel","parseMarkGroups","FACETED_PATH_PREFIX","getMarkGroup","fromPrefix","getPathGroups","hasCornerRadius","STACK_GROUP_PREFIX","fieldScale","stackFieldGroup","func","groupUpdate","innerGroupUpdate","groupByField","strokeForeground","getGroupsForStackedBarWithCornerRadius","scaleClip","projectionClip","unitCount","parentCount","interactiveFlag","UnitModel","parentGivenSize","filledConfig","defaultFilled","initLayoutSize","initScales","specifiedAxes","initAxes","specifiedLegends","initLegends","isGeoShapeMark","hasGeoPosition","initScale","scaleInternal","_axis","axisSpec","initAxis","axisInternal","supportLegend","specifiedSize","parseUnitLayoutSize","selDefs","selCmpts","selectionConfig","defaults","parseUnitSelection","hasSelections","isPoint","assembleTopLevelSignals","dataCopy","assembleUnitSelectionData","correctDataNames","vlEncoding","LayerModel","axisCount","oppositeOrient","parseLayerAxes","assembleLayerSelectionMarks","unitSize","isAnyConcatSpec","version","pkg","inputSpec","newLogger","vlFieldDef","firstPassCounter","secondPassCounter","optimizeDataflow","topLevelProperties","datasets","usermeta","vgConfig","sourceIndex","newData","whereTo","assembleRootData","otherTopLevelProps","$schema","assembleTopLevelModel","resize","autoSizeType","inverseSizeType","getFitType","getTopLevelProperties","normalized","dict","dictKeys","otherKeys"],"mappings":"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"} \ No newline at end of file diff --git a/src/citationnet/static/js/vega-lite@4.17.0.js b/src/citationnet/static/js/vega-lite@4.17.0.js new file mode 100644 index 0000000..68eecbf --- /dev/null +++ b/src/citationnet/static/js/vega-lite@4.17.0.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).vegaLite={})}(this,(function(e){"use strict";function t(e,t,n){return e.fields=t||[],e.fname=n,e}function n(e){return 1===e.length?i(e[0]):o(e)}const i=e=>function(t){return t[e]},o=e=>{const t=e.length;return function(n){for(let i=0;ii&&l(),c=i=o+1):"]"===a&&(c||r("Access path missing open bracket: "+e),c>0&&l(),c=0,i=o+1):o>i?l():i=o+1}return c&&r("Access path missing closing bracket: "+e),s&&r("Access path missing closing quote: "+e),o>i&&(o++,l()),t}!function(e,i,o){const r=a(e);e=1===r.length?r[0]:e,t((o&&o.get||n)(r),[e],i||e)}("id");const s=t((e=>e),[],"identity");t((()=>0),[],"zero"),t((()=>1),[],"one"),t((()=>!0),[],"true"),t((()=>!1),[],"false");function c(e,t,n){const i=[t].concat([].slice.call(n));console[e].apply(console,i)}var u=Array.isArray;function l(e){return e===Object(e)}const f=e=>"__proto__"!==e;function d(...e){return e.reduce(((e,t)=>{for(const n in t)if("signals"===n)e.signals=m(e.signals,t.signals);else{const i="legend"===n?{layout:1}:"style"===n||null;p(e,n,t[n],i)}return e}),{})}function p(e,t,n,i){if(!f(t))return;let o,r;if(l(n)&&!u(n))for(o in r=l(e[t])?e[t]:e[t]={},n)i&&(!0===i||i[o])?p(r,o,n[o]):f(o)&&(r[o]=n[o]);else e[t]=n}function m(e,t){if(null==e)return t;const n={},i=[];function o(e){n[e.name]||(n[e.name]=1,i.push(e))}return t.forEach(o),e.forEach(o),i}function h(e){return null!=e?u(e)?e:[e]:[]}const g=Object.prototype.hasOwnProperty;function v(e,t){return g.call(e,t)}function y(e){return"boolean"==typeof e}function b(e){return"number"==typeof e}function x(e){return"string"==typeof e}function w(e){return u(e)?"["+e.map(w)+"]":l(e)||x(e)?JSON.stringify(e).replace("\u2028","\\u2028").replace("\u2029","\\u2029"):e}function A(e){const t={},n=e.length;for(let i=0;iB(e,t)))}:k(e)?{or:e.or.map((e=>B(e,t)))}:t(e)}const _=function e(t,n){if(t===n)return!0;if(t&&n&&"object"==typeof t&&"object"==typeof n){if(t.constructor!==n.constructor)return!1;var i,o,r;if(Array.isArray(t)){if((i=t.length)!=n.length)return!1;for(o=i;0!=o--;)if(!e(t[o],n[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if((i=(r=Object.keys(t)).length)!==Object.keys(n).length)return!1;for(o=i;0!=o--;)if(!Object.prototype.hasOwnProperty.call(n,r[o]))return!1;for(o=i;0!=o--;){var a=r[o];if(!e(t[a],n[a]))return!1}return!0}return t!=t&&n!=n},z=D;function O(e,t){const n={};for(const i of t)v(e,i)&&(n[i]=e[i]);return n}function N(e,t){const n={...e};for(const e of t)delete n[e];return n}Set.prototype.toJSON=function(){return"Set(".concat([...this].map((e=>F(e))).join(","),")")};const P=F;function j(e){if(b(e))return e;const t=x(e)?e:F(e);if(t.length<250)return t;let n=0;for(let e=0;e-1}function L(e,t){let n=0;for(const[i,o]of e.entries())if(t(o,i,n++))return!0;return!1}function q(e,t){let n=0;for(const[i,o]of e.entries())if(!t(o,i,n++))return!1;return!0}function R(e,...t){for(const n of t)W(e,null!=n?n:{});return e}function W(e,t){for(const n of J(t))p(e,n,t[n],!0)}function U(e,t){const n=[],i={};let o;for(const r of e)o=t(r),o in i||(i[o]=1,n.push(r));return n}function I(e,t){if(e.size!==t.size)return!1;for(const n of e)if(!t.has(n))return!1;return!0}function H(e,t){for(const n of e)if(t.has(n))return!0;return!1}function G(e){const t=new Set;for(const n of e){const e=a(n).map(((e,t)=>0===t?e:"[".concat(e,"]"))),i=e.map(((t,n)=>e.slice(0,n+1).join("")));for(const e of i)t.add(e)}return t}function V(e,t){return void 0===e||void 0===t||H(G(e),G(t))}function Y(e){return 0===J(e).length}const J=Object.keys,X=Object.values,Q=Object.entries;function $(e){return!0===e||!1===e}function K(e){const t=e.replace(/\W/g,"_");return(e.match(/^\d+/)?"_":"")+t}function Z(e,t){return E(e)?"!("+Z(e.not,t)+")":C(e)?"("+e.and.map((e=>Z(e,t))).join(") && (")+")":k(e)?"("+e.or.map((e=>Z(e,t))).join(") || (")+")":t(e)}function ee(e,t){if(0===t.length)return!0;const n=t.shift();return n in e&&ee(e[n],t)&&delete e[n],Y(e)}function te(e){return e.charAt(0).toUpperCase()+e.substr(1)}function ne(e,t="datum"){const n=a(e),i=[];for(let e=1;e<=n.length;e++){const o="[".concat(n.slice(0,e).map(w).join("]["),"]");i.push("".concat(t).concat(o))}return i.join(" && ")}function ie(e,t="datum"){return"".concat(t,"[").concat(w(a(e).join(".")),"]")}function oe(e){return e.replace(/(\[|\]|\.|'|")/g,"\\$1")}function re(e){return"".concat(a(e).map(oe).join("\\."))}function ae(e,t,n){return e.replace(new RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"g"),n)}function se(e){return"".concat(a(e).join("."))}function ce(e){return e?a(e).length:0}function ue(...e){for(const t of e)if(void 0!==t)return t}let le=42;function fe(e){const t=++le;return e?String(e)+t:t}function de(e){return pe(e)?e:"__".concat(e)}function pe(e){return 0===e.indexOf("__")}function me(e){if(void 0!==e)return(e%360+360)%360}function he(e){return!!b(e)||!isNaN(e)&&!isNaN(parseFloat(e))}const ge={labelAlign:{part:"labels",vgProp:"align"},labelBaseline:{part:"labels",vgProp:"baseline"},labelColor:{part:"labels",vgProp:"fill"},labelFont:{part:"labels",vgProp:"font"},labelFontSize:{part:"labels",vgProp:"fontSize"},labelFontStyle:{part:"labels",vgProp:"fontStyle"},labelFontWeight:{part:"labels",vgProp:"fontWeight"},labelOpacity:{part:"labels",vgProp:"opacity"},labelOffset:null,labelPadding:null,gridColor:{part:"grid",vgProp:"stroke"},gridDash:{part:"grid",vgProp:"strokeDash"},gridDashOffset:{part:"grid",vgProp:"strokeDashOffset"},gridOpacity:{part:"grid",vgProp:"opacity"},gridWidth:{part:"grid",vgProp:"strokeWidth"},tickColor:{part:"ticks",vgProp:"stroke"},tickDash:{part:"ticks",vgProp:"strokeDash"},tickDashOffset:{part:"ticks",vgProp:"strokeDashOffset"},tickOpacity:{part:"ticks",vgProp:"opacity"},tickSize:null,tickWidth:{part:"ticks",vgProp:"strokeWidth"}};function ve(e){return e&&e.condition}const ye=["domain","grid","labels","ticks","title"],be={grid:"grid",gridCap:"grid",gridColor:"grid",gridDash:"grid",gridDashOffset:"grid",gridOpacity:"grid",gridScale:"grid",gridWidth:"grid",orient:"main",bandPosition:"both",aria:"main",description:"main",domain:"main",domainCap:"main",domainColor:"main",domainDash:"main",domainDashOffset:"main",domainOpacity:"main",domainWidth:"main",format:"main",formatType:"main",labelAlign:"main",labelAngle:"main",labelBaseline:"main",labelBound:"main",labelColor:"main",labelFlush:"main",labelFlushOffset:"main",labelFont:"main",labelFontSize:"main",labelFontStyle:"main",labelFontWeight:"main",labelLimit:"main",labelLineHeight:"main",labelOffset:"main",labelOpacity:"main",labelOverlap:"main",labelPadding:"main",labels:"main",labelSeparation:"main",maxExtent:"main",minExtent:"main",offset:"both",position:"main",tickCap:"main",tickColor:"main",tickDash:"main",tickDashOffset:"main",tickMinStep:"main",tickOffset:"both",tickOpacity:"main",tickRound:"both",ticks:"main",tickSize:"main",tickWidth:"both",title:"main",titleAlign:"main",titleAnchor:"main",titleAngle:"main",titleBaseline:"main",titleColor:"main",titleFont:"main",titleFontSize:"main",titleFontStyle:"main",titleFontWeight:"main",titleLimit:"main",titleLineHeight:"main",titleOpacity:"main",titlePadding:"main",titleX:"main",titleY:"main",encode:"both",scale:"both",tickBand:"both",tickCount:"both",tickExtra:"both",translate:"both",values:"both",zindex:"both"},xe={orient:1,aria:1,bandPosition:1,description:1,domain:1,domainCap:1,domainColor:1,domainDash:1,domainDashOffset:1,domainOpacity:1,domainWidth:1,format:1,formatType:1,grid:1,gridCap:1,gridColor:1,gridDash:1,gridDashOffset:1,gridOpacity:1,gridWidth:1,labelAlign:1,labelAngle:1,labelBaseline:1,labelBound:1,labelColor:1,labelFlush:1,labelFlushOffset:1,labelFont:1,labelFontSize:1,labelFontStyle:1,labelFontWeight:1,labelLimit:1,labelLineHeight:1,labelOffset:1,labelOpacity:1,labelOverlap:1,labelPadding:1,labels:1,labelSeparation:1,maxExtent:1,minExtent:1,offset:1,position:1,tickBand:1,tickCap:1,tickColor:1,tickCount:1,tickDash:1,tickDashOffset:1,tickExtra:1,tickMinStep:1,tickOffset:1,tickOpacity:1,tickRound:1,ticks:1,tickSize:1,tickWidth:1,title:1,titleAlign:1,titleAnchor:1,titleAngle:1,titleBaseline:1,titleColor:1,titleFont:1,titleFontSize:1,titleFontStyle:1,titleFontWeight:1,titleLimit:1,titleLineHeight:1,titleOpacity:1,titlePadding:1,titleX:1,titleY:1,translate:1,values:1,zindex:1},we={...xe,style:1,labelExpr:1,encoding:1};function Ae(e){return!!we[e]}const De=J({axis:1,axisBand:1,axisBottom:1,axisDiscrete:1,axisLeft:1,axisPoint:1,axisQuantitative:1,axisRight:1,axisTemporal:1,axisTop:1,axisX:1,axisXBand:1,axisXDiscrete:1,axisXPoint:1,axisXQuantitative:1,axisXTemporal:1,axisY:1,axisYBand:1,axisYDiscrete:1,axisYPoint:1,axisYQuantitative:1,axisYTemporal:1}),Fe={argmax:1,argmin:1,average:1,count:1,distinct:1,product:1,max:1,mean:1,median:1,min:1,missing:1,q1:1,q3:1,ci0:1,ci1:1,stderr:1,stdev:1,stdevp:1,sum:1,valid:1,values:1,variance:1,variancep:1},ke={count:1,min:1,max:1};function Ce(e){return!!e&&!!e.argmin}function Ee(e){return!!e&&!!e.argmax}function Se(e){return x(e)&&!!Fe[e]}const Be=["count","valid","missing","distinct"];function _e(e){return x(e)&&T(Be,e)}const ze=["count","sum","distinct","valid","missing"],Oe=A(["mean","average","median","q1","q3","min","max"]),Ne="row",Pe="column",je="facet",Me="x",Te="y",Le="x2",qe="y2",Re="radius",We="radius2",Ue="theta",Ie="theta2",He="latitude",Ge="longitude",Ve="latitude2",Ye="longitude2",Je="color",Xe="fill",Qe="stroke",$e="shape",Ke="size",Ze="angle",et="opacity",tt="fillOpacity",nt="strokeOpacity",it="strokeWidth",ot="strokeDash",rt="text",at="order",st="detail",ct="key",ut="tooltip",lt="href",ft="url",dt="description",pt={theta:1,theta2:1,radius:1,radius2:1};function mt(e){return e in pt}const ht={longitude:1,longitude2:1,latitude:1,latitude2:1};const gt=J(ht),vt={x:1,y:1,x2:1,y2:1,...pt,...ht,color:1,fill:1,stroke:1,opacity:1,fillOpacity:1,strokeOpacity:1,strokeWidth:1,strokeDash:1,size:1,angle:1,shape:1,order:1,text:1,detail:1,key:1,tooltip:1,href:1,url:1,description:1};function yt(e){return e===Je||e===Xe||e===Qe}const bt={row:1,column:1,facet:1},xt=J(bt),wt={...vt,...bt},At=J(wt),{order:Dt,detail:Ft,tooltip:kt,...Ct}=wt,{row:Et,column:St,facet:Bt,..._t}=Ct;function zt(e){return!!wt[e]}const Ot=[Le,qe,Ve,Ye,Ie,We];function Nt(e){return Pt(e)!==e}function Pt(e){switch(e){case Le:return Me;case qe:return Te;case Ve:return He;case Ye:return Ge;case Ie:return Ue;case We:return Re}return e}function jt(e){if(mt(e))switch(e){case Ue:return"startAngle";case Ie:return"endAngle";case Re:return"outerRadius";case We:return"innerRadius"}return e}function Mt(e){switch(e){case Me:return Le;case Te:return qe;case He:return Ve;case Ge:return Ye;case Ue:return Ie;case Re:return We}}function Tt(e){switch(e){case Me:case Le:return"width";case Te:case qe:return"height"}}const{x:Lt,y:qt,x2:Rt,y2:Wt,latitude:Ut,longitude:It,latitude2:Ht,longitude2:Gt,theta:Vt,theta2:Yt,radius:Jt,radius2:Xt,...Qt}=vt,$t=J(Qt),Kt={x:1,y:1},Zt=J(Kt);function en(e){return e in Kt}const tn={theta:1,radius:1},nn=J(tn);function on(e){return"width"===e?Me:Te}const{text:rn,tooltip:an,href:sn,url:cn,description:un,detail:ln,key:fn,order:dn,...pn}=Qt,mn=J(pn);const hn={...Kt,...tn,...pn},gn=J(hn);function vn(e){return!!hn[e]}function yn(e,t){return function(e){switch(e){case Je:case Xe:case Qe:case dt:case st:case ct:case ut:case lt:case at:case et:case tt:case nt:case it:case je:case Ne:case Pe:return bn;case Me:case Te:case He:case Ge:return wn;case Le:case qe:case Ve:case Ye:return{area:"always",bar:"always",image:"always",rect:"always",rule:"always",circle:"binned",point:"binned",square:"binned",tick:"binned",line:"binned",trail:"binned"};case Ke:return{point:"always",tick:"always",rule:"always",circle:"always",square:"always",bar:"always",text:"always",line:"always",trail:"always"};case ot:return{line:"always",point:"always",tick:"always",rule:"always",circle:"always",square:"always",bar:"always",geoshape:"always"};case $e:return{point:"always",geoshape:"always"};case rt:return{text:"always"};case Ze:return{point:"always",square:"always",text:"always"};case ft:return{image:"always"};case Ue:case Re:return{text:"always",arc:"always"};case Ie:case We:return{arc:"always"}}}(e)[t]}const bn={arc:"always",area:"always",bar:"always",circle:"always",geoshape:"always",image:"always",line:"always",rule:"always",point:"always",rect:"always",square:"always",trail:"always",text:"always",tick:"always"},{geoshape:xn,...wn}=bn;function An(e){switch(e){case Me:case Te:case Ue:case Re:case Ke:case Ze:case it:case et:case tt:case nt:case Le:case qe:case Ie:case We:return;case je:case Ne:case Pe:case $e:case ot:case rt:case ut:case lt:case ft:case dt:return"discrete";case Je:case Xe:case Qe:return"flexible";case He:case Ge:case Ve:case Ye:case st:case ct:case at:return}}function Dn(e){return y(e)&&(e=pa(e,void 0)),"bin"+J(e).map((t=>En(e[t])?K("_".concat(t,"_").concat(Q(e[t]))):K("_".concat(t,"_").concat(e[t])))).join("")}function Fn(e){return!0===e||Cn(e)&&!e.binned}function kn(e){return"binned"===e||Cn(e)&&!0===e.binned}function Cn(e){return l(e)}function En(e){return null==e?void 0:e.selection}function Sn(e){switch(e){case Ne:case Pe:case Ke:case Je:case Xe:case Qe:case it:case et:case tt:case nt:case $e:return 6;case ot:return 4;default:return 10}}function Bn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _n(e,t,n){var i=t.get(e);if(!i)throw new TypeError("attempted to set private field on non-instance");if(i.set)i.set.call(e,n);else{if(!i.writable)throw new TypeError("attempted to set read only private field");i.value=n}return n}function zn(e){return"Invalid specification ".concat(JSON.stringify(e),'. Make sure the specification includes at least one of the following properties: "mark", "layer", "facet", "hconcat", "vconcat", "concat", or "repeat".')}const On='Autosize "fit" only works for single views and layered views.';function Nn(e){return"".concat("width"==e?"Width":"Height",' "container" only works for single views and layered views.')}function Pn(e){const t="width"==e?"x":"y";return"".concat("width"==e?"Width":"Height",' "container" only works well with autosize "fit" or "fit-').concat(t,'".')}function jn(e){return e?'Dropping "fit-'.concat(e,'" because spec has discrete ').concat(Tt(e),"."):'Dropping "fit" because spec has discrete size.'}function Mn(e){return"Unknown field for ".concat(e,". Cannot calculate view size.")}function Tn(e){return'Cannot project a selection on encoding channel "'.concat(e,'", which has no field.')}function Ln(e,t){return'Cannot project a selection on encoding channel "'.concat(e,'" as it uses an aggregate function ("').concat(t,'").')}function qn(e){return"Selection not supported for ".concat(e," yet.")}const Rn="The same selection must be used to override scale domains in a layered view.";function Wn(e){return'The "columns" property cannot be used when "'.concat(e,'" has nested row/column.')}function Un(e,t,n){return'An ancestor parsed field "'.concat(e,'" as ').concat(n," but a child wants to parse the field as ").concat(t,".")}function In(e){return"Config.customFormatTypes is not true, thus custom format type and format for channel ".concat(e," are dropped.")}function Hn(e){return'Invalid field type "'.concat(e,'".')}function Gn(e,t){const{fill:n,stroke:i}=t;return"Dropping color ".concat(e," as the plot also has ").concat(n&&i?"fill and stroke":n?"fill":"stroke",".")}function Vn(e,t){return"Dropping ".concat(P(e),' from channel "').concat(t,'" since it does not contain any data field, datum, value, or signal.')}function Yn(e,t,n){return"".concat(e,' dropped as it is incompatible with "').concat(t,'"').concat(n?" when ".concat(n):"",".")}function Jn(e){return"".concat(e," encoding should be discrete (ordinal / nominal / binned).")}function Xn(e,t){return'Using discrete channel "'.concat(e,'" to encode "').concat(t,'" field can be misleading as it does not encode ').concat("ordinal"===t?"order":"magnitude",".")}function Qn(e){return"Using unaggregated domain with raw field has no effect (".concat(P(e),").")}function $n(e){return'Unaggregated domain not applicable for "'.concat(e,'" since it produces values outside the origin domain of the source data.')}function Kn(e){return"Unaggregated domain is currently unsupported for log scale (".concat(P(e),").")}function Zn(e,t,n){return"".concat(n,"-scale's \"").concat(t,'" is dropped as it does not work with ').concat(e," scale.")}function ei(e){return'The step for "'.concat(e,'" is dropped because the ').concat("width"===e?"x":"y"," is continuous.")}const ti="Domains that should be unioned has conflicting sort properties. Sort will be set to true.";function ni(e,t){return"Invalid ".concat(e,": ").concat(P(t),".")}function ii(e){return"1D error band does not support ".concat(e,".")}function oi(e){return"Channel ".concat(e,' is required for "binned" bin.')}const ri=function(e,t){let n=e||0;return{level(e){return arguments.length?(n=+e,this):n},error(){return n>=1&&c(t||"error","ERROR",arguments),this},warn(){return n>=2&&c(t||"warn","WARN",arguments),this},info(){return n>=3&&c(t||"log","INFO",arguments),this},debug(){return n>=4&&c(t||"log","DEBUG",arguments),this}}}(2);let ai=ri;function si(...e){ai.warn(...e)}function ci(e){if(e&&l(e))for(const t of gi)if(t in e)return!0;return!1}const ui=["january","february","march","april","may","june","july","august","september","october","november","december"],li=ui.map((e=>e.substr(0,3))),fi=["sunday","monday","tuesday","wednesday","thursday","friday","saturday"],di=fi.map((e=>e.substr(0,3)));function pi(e,t){const n=[];if(t&&void 0!==e.day&&J(e).length>1&&(si(function(e){return"Dropping day from datetime ".concat(P(e)," as day cannot be combined with other units.")}(e)),delete(e=z(e)).day),void 0!==e.year?n.push(e.year):n.push(2012),void 0!==e.month){const i=t?function(e){if(he(e)&&(e=+e),b(e))return e-1;{const t=e.toLowerCase(),n=ui.indexOf(t);if(-1!==n)return n;const i=t.substr(0,3),o=li.indexOf(i);if(-1!==o)return o;throw new Error(ni("month",e))}}(e.month):e.month;n.push(i)}else if(void 0!==e.quarter){const i=t?function(e){if(he(e)&&(e=+e),b(e))return e>4&&si(ni("quarter",e)),e-1;throw new Error(ni("quarter",e))}(e.quarter):e.quarter;n.push(b(i)?3*i:i+"*3")}else n.push(0);if(void 0!==e.date)n.push(e.date);else if(void 0!==e.day){const i=t?function(e){if(he(e)&&(e=+e),b(e))return e%7;{const t=e.toLowerCase(),n=fi.indexOf(t);if(-1!==n)return n;const i=t.substr(0,3),o=di.indexOf(i);if(-1!==o)return o;throw new Error(ni("day",e))}}(e.day):e.day;n.push(b(i)?i+1:i+"+1")}else n.push(1);for(const t of["hours","minutes","seconds","milliseconds"]){const i=e[t];n.push(void 0===i?0:i)}return n}function mi(e){const t=pi(e,!0).join(", ");return e.utc?"utc(".concat(t,")"):"datetime(".concat(t,")")}const hi={year:1,quarter:1,month:1,week:1,day:1,dayofyear:1,date:1,hours:1,minutes:1,seconds:1,milliseconds:1},gi=J(hi);function vi(e){return e.startsWith("utc")}const yi={"year-month":"%b %Y ","year-month-date":"%b %d, %Y "};function bi(e){const t=[];for(const n of gi)xi(e,n)&&t.push(n);return t}function xi(e,t){const n=e.indexOf(t);return!(n<0)&&(!(n>0&&"seconds"===t&&"i"===e.charAt(n-1))&&(!(e.length>n+3&&"day"===t&&"o"===e.charAt(n+3))&&!(n>0&&"year"===t&&"f"===e.charAt(n-1))))}function wi(e,t,{end:n}={end:!1}){const i=ne(t),o=vi(e)?"utc":"";let r;const a={};for(const t of gi)xi(e,t)&&(a[t]="quarter"===(s=t)?"(".concat(o,"quarter(").concat(i,")-1)"):"".concat(o).concat(s,"(").concat(i,")"),r=t);var s;return n&&(a[r]+="+1"),function(e){const t=pi(e,!1).join(", ");return e.utc?"utc(".concat(t,")"):"datetime(".concat(t,")")}(a)}function Ai(e){if(!e)return;const t=bi(e);return"timeUnitSpecifier(".concat(F(t),", ").concat(F(yi),")")}function Di(e){if(!e)return;let t;return x(e)?t={unit:e}:l(e)&&(t={...e,...e.unit?{unit:e.unit}:{}}),vi(t.unit)&&(t.utc=!0,t.unit=t.unit.substr(3)),t}function Fi(e){return e&&!!e.signal}function ki(e){return!!e.step}function Ci(e){return!u(e)&&("field"in e&&"data"in e)}const Ei=J({aria:1,description:1,ariaRole:1,ariaRoleDescription:1,blend:1,opacity:1,fill:1,fillOpacity:1,stroke:1,strokeCap:1,strokeWidth:1,strokeOpacity:1,strokeDash:1,strokeDashOffset:1,strokeJoin:1,strokeOffset:1,strokeMiterLimit:1,startAngle:1,endAngle:1,padAngle:1,innerRadius:1,outerRadius:1,size:1,shape:1,interpolate:1,tension:1,orient:1,align:1,baseline:1,text:1,dir:1,dx:1,dy:1,ellipsis:1,limit:1,radius:1,theta:1,angle:1,font:1,fontSize:1,fontWeight:1,fontStyle:1,lineBreak:1,lineHeight:1,cursor:1,href:1,tooltip:1,cornerRadius:1,cornerRadiusTopLeft:1,cornerRadiusTopRight:1,cornerRadiusBottomLeft:1,cornerRadiusBottomRight:1,aspect:1,width:1,height:1,url:1,smooth:1}),Si={arc:1,area:1,group:1,image:1,line:1,path:1,rect:1,rule:1,shape:1,symbol:1,text:1,trail:1},Bi=["cornerRadius","cornerRadiusTopLeft","cornerRadiusTopRight","cornerRadiusBottomLeft","cornerRadiusBottomRight"];function _i(e){return e&&!!e.field&&void 0!==e.equal}function zi(e){return e&&!!e.field&&void 0!==e.lt}function Oi(e){return e&&!!e.field&&void 0!==e.lte}function Ni(e){return e&&!!e.field&&void 0!==e.gt}function Pi(e){return e&&!!e.field&&void 0!==e.gte}function ji(e){if(e&&e.field){if(u(e.range)&&2===e.range.length)return!0;if(Fi(e.range))return!0}return!1}function Mi(e){return e&&!!e.field&&(u(e.oneOf)||u(e.in))}function Ti(e){return Mi(e)||_i(e)||ji(e)||zi(e)||Ni(e)||Oi(e)||Pi(e)}function Li(e,t){return ga(e,{timeUnit:t,wrapTime:!0})}function qi(e,t=!0){var n;const{field:i}=e,o=null===(n=Di(e.timeUnit))||void 0===n?void 0:n.unit,r=o?"time("+wi(o,i)+")":Kr(e,{expr:"datum"});if(_i(e))return r+"==="+Li(e.equal,o);if(zi(e)){const t=e.lt;return"".concat(r,"<").concat(Li(t,o))}if(Ni(e)){const t=e.gt;return"".concat(r,">").concat(Li(t,o))}if(Oi(e)){const t=e.lte;return"".concat(r,"<=").concat(Li(t,o))}if(Pi(e)){const t=e.gte;return"".concat(r,">=").concat(Li(t,o))}if(Mi(e))return"indexof([".concat(function(e,t){return e.map((e=>Li(e,t)))}(e.oneOf,o).join(","),"], ").concat(r,") !== -1");if(function(e){return e&&!!e.field&&void 0!==e.valid}(e))return Ri(r,e.valid);if(ji(e)){const{range:n}=e,i=Fi(n)?{signal:"".concat(n.signal,"[0]")}:n[0],a=Fi(n)?{signal:"".concat(n.signal,"[1]")}:n[1];if(null!==i&&null!==a&&t)return"inrange("+r+", ["+Li(i,o)+", "+Li(a,o)+"])";const s=[];return null!==i&&s.push("".concat(r," >= ").concat(Li(i,o))),null!==a&&s.push("".concat(r," <= ").concat(Li(a,o))),s.length>0?s.join(" && "):"true"}throw new Error("Invalid field predicate: ".concat(JSON.stringify(e)))}function Ri(e,t=!0){return t?"isValid(".concat(e,") && isFinite(+").concat(e,")"):"!isValid(".concat(e,") || !isFinite(+").concat(e,")")}function Wi(e){var t;return Ti(e)&&e.timeUnit?{...e,timeUnit:null===(t=Di(e.timeUnit))||void 0===t?void 0:t.unit}:e}const Ui="quantitative",Ii="ordinal",Hi="temporal",Gi="nominal",Vi="geojson";const Yi="linear",Ji="log",Xi="pow",Qi="sqrt",$i="symlog",Ki="time",Zi="utc",eo="quantile",to="quantize",no="threshold",io="point",oo="band",ro={linear:"numeric",log:"numeric",pow:"numeric",sqrt:"numeric",symlog:"numeric",identity:"numeric",sequential:"numeric",time:"time",utc:"time",ordinal:"ordinal","bin-ordinal":"bin-ordinal",point:"ordinal-position",band:"ordinal-position",quantile:"discretizing",quantize:"discretizing",threshold:"discretizing"};function ao(e,t){const n=ro[e],i=ro[t];return n===i||"ordinal-position"===n&&"time"===i||"ordinal-position"===i&&"time"===n}const so={linear:0,log:1,pow:1,sqrt:1,symlog:1,identity:1,sequential:1,time:0,utc:0,point:10,band:11,ordinal:0,"bin-ordinal":0,quantile:0,quantize:0,threshold:0};function co(e){return so[e]}const uo=["linear","log","pow","sqrt","symlog","time","utc"],lo=A(uo),fo=A(["linear","log","pow","sqrt","symlog"]);const po=A(["quantile","quantize","threshold"]),mo=A(uo.concat(["quantile","quantize","threshold","sequential","identity"])),ho=A(["ordinal","bin-ordinal","point","band"]);function go(e){return e in ho}function vo(e){return e in mo}function yo(e){return e in lo}function bo(e){return e in po}function xo(e){return null==e?void 0:e.selection}const{type:wo,domain:Ao,range:Do,rangeMax:Fo,rangeMin:ko,scheme:Co,...Eo}={type:1,domain:1,domainMax:1,domainMin:1,domainMid:1,align:1,range:1,rangeMax:1,rangeMin:1,scheme:1,bins:1,reverse:1,round:1,clamp:1,nice:1,base:1,exponent:1,constant:1,interpolate:1,zero:1,padding:1,paddingInner:1,paddingOuter:1},So=J(Eo);function Bo(e,t){switch(t){case"type":case"domain":case"reverse":case"range":return!0;case"scheme":case"interpolate":return!T(["point","band","identity"],e);case"bins":return!T(["point","band","identity","ordinal"],e);case"round":return yo(e)||"band"===e||"point"===e;case"padding":case"rangeMin":case"rangeMax":return yo(e)||T(["point","band"],e);case"paddingOuter":case"align":return T(["point","band"],e);case"paddingInner":return"band"===e;case"domainMax":case"domainMid":case"domainMin":case"clamp":return yo(e);case"nice":return yo(e)||"quantize"===e||"threshold"===e;case"exponent":return"pow"===e;case"base":return"log"===e;case"constant":return"symlog"===e;case"zero":return vo(e)&&!T(["log","time","utc","threshold","quantile"],e)}}function _o(e,t){switch(t){case"interpolate":case"scheme":case"domainMid":return yt(e)?void 0:'Cannot use the scale property "'.concat(e,'" with non-color channel.');case"align":case"type":case"bins":case"domain":case"domainMax":case"domainMin":case"range":case"base":case"exponent":case"constant":case"nice":case"padding":case"paddingInner":case"paddingOuter":case"rangeMax":case"rangeMin":case"reverse":case"round":case"clamp":case"zero":return}}function zo(e){return e&&!!e.expr}function Oo(e){const t=J(e||{}),n={};for(const i of t)n[i]=Aa(e[i]);return n}const No={arc:"arc",area:"area",bar:"bar",image:"image",line:"line",point:"point",rect:"rect",rule:"rule",text:"text",tick:"tick",trail:"trail",circle:"circle",square:"square",geoshape:"geoshape"},Po=No.arc,jo=No.area,Mo=No.bar,To=No.image,Lo=No.line,qo=No.point,Ro=No.rect,Wo=No.rule,Uo=No.text,Io=No.tick,Ho=No.trail,Go=No.circle,Vo=No.square,Yo=No.geoshape;function Jo(e){return T(["line","area","trail"],e)}function Xo(e){return T(["rect","bar","image","arc"],e)}const Qo=J(No);function $o(e){return e.type}A(Qo);const Ko=["stroke","strokeWidth","strokeDash","strokeDashOffset","strokeOpacity","strokeJoin","strokeMiterLimit","fill","fillOpacity"],Zo=J({color:1,filled:1,invalid:1,order:1,radius2:1,theta2:1,timeUnitBand:1,timeUnitBandPosition:1}),er=J({mark:1,arc:1,area:1,bar:1,circle:1,image:1,line:1,point:1,rect:1,rule:1,square:1,text:1,tick:1,trail:1,geoshape:1}),tr={horizontal:["cornerRadiusTopRight","cornerRadiusBottomRight"],vertical:["cornerRadiusTopLeft","cornerRadiusTopRight"]},nr={binSpacing:1,continuousBandSize:5,timeUnitBandPosition:.5},ir={binSpacing:0,continuousBandSize:5,timeUnitBandPosition:.5};function or(e){const{channel:t,channelDef:n,markDef:i,scale:o,config:r}=e,a=lr(e);return qr(n)&&!_e(n.aggregate)&&o&&yo(o.get("type"))&&!1===o.get("zero")?rr({fieldDef:n,channel:t,markDef:i,ref:a,config:r}):a}function rr({fieldDef:e,channel:t,markDef:n,ref:i,config:o}){if(Jo(n.type))return i;return null===Ba("invalid",n,o)?i:[ar(e,t),i]}function ar(e,t){return{test:sr(e,!0),..."y"===Pt(t)?{field:{group:"height"}}:{value:0}}}function sr(e,t=!0){return Ri(x(e)?e:Kr(e,{expr:"datum"}),!t)}function cr(e,t,n,i){const o={};if(t&&(o.scale=t),Wr(e)){const{datum:t}=e;ci(t)?o.signal=mi(t):Fi(t)?o.signal=t.signal:zo(t)?o.signal=t.expr:o.value=t}else o.field=Kr(e,n);if(i){const{offset:e,band:t}=i;e&&(o.offset=e),t&&(o.band=t)}return o}function ur({scaleName:e,fieldOrDatumDef:t,fieldOrDatumDef2:n,offset:i,startSuffix:o,band:r=.5}){const a=0K("".concat("unit"===e?"":"_".concat(e,"_")).concat(n[e])))).join(""):(t?"utc":"")+"timeunit"+J(n).map((e=>K("_".concat(e,"_").concat(n[e])))).join("")}(f),o=(!T(["range","mid"],t.binSuffix)&&t.binSuffix||"")+(null!==(c=t.suffix)&&void 0!==c?c:"")}}i&&(n=n?"".concat(i,"_").concat(n):i)}return o&&(n="".concat(n,"_").concat(o)),i&&(n="".concat(i,"_").concat(n)),t.forAs?se(n):t.expr?ie(n,t.expr)+r:re(n)+r}function Zr(e){switch(e.type){case"nominal":case"ordinal":case"geojson":return!0;case"quantitative":return qr(e)&&!!e.bin;case"temporal":return!1}throw new Error(Hn(e.type))}function ea(e){return!Zr(e)}const ta=(e,t)=>{switch(t.fieldTitle){case"plain":return e.field;case"functional":return function(e){const{aggregate:t,bin:n,timeUnit:i,field:o}=e;if(Ee(t))return"".concat(o," for argmax(").concat(t.argmax,")");if(Ce(t))return"".concat(o," for argmin(").concat(t.argmin,")");const r=Di(i),a=t||(null==r?void 0:r.unit)||(null==r?void 0:r.maxbins)&&"timeunit"||Fn(n)&&"bin";return a?a.toUpperCase()+"("+o+")":o}(e);default:return function(e,t){const{field:n,bin:i,timeUnit:o,aggregate:r}=e;if("count"===r)return t.countTitle;if(Fn(i))return"".concat(n," (binned)");if(o){var a;const e=null===(a=Di(o))||void 0===a?void 0:a.unit;if(e)return"".concat(n," (").concat(bi(e).join("-"),")")}else if(r)return Ee(r)?"".concat(n," for max ").concat(r.argmax):Ce(r)?"".concat(n," for min ").concat(r.argmin):"".concat(te(r)," of ").concat(n);return n}(e,t)}};let na=ta;function ia(e){na=e}function oa(e,t,{allowDisabling:n,includeDefault:i=!0}){var o;const r=null===(o=ra(e))||void 0===o?void 0:o.title;if(!qr(e))return r;const a=e,s=i?aa(a,t):void 0;return n?ue(r,a.title,s):null!==(c=null!=r?r:a.title)&&void 0!==c?c:s;var c}function ra(e){return Jr(e)&&e.axis?e.axis:Xr(e)&&e.legend?e.legend:_r(e)&&e.header?e.header:void 0}function aa(e,t){return na(e,t)}function sa(e){if(Qr(e)){const{format:t,formatType:n}=e;return{format:t,formatType:n}}{var t;const n=null!==(t=ra(e))&&void 0!==t?t:{},{format:i,formatType:o}=n;return{format:i,formatType:o}}}function ca(e){return qr(e)?e:Tr(e)?e.condition:void 0}function ua(e){return Hr(e)?e:Lr(e)?e.condition:void 0}function la(e,t,n,i={}){if(x(e)||b(e)||y(e)){return si(function(e,t,n){return"Channel ".concat(e," is a ").concat(t,". Converted to {value: ").concat(P(n),"}.")}(t,x(e)?"string":b(e)?"number":"boolean",e)),{value:e}}return Hr(e)?fa(e,t,n,i):Lr(e)?{...e,condition:fa(e.condition,t,n,i)}:e}function fa(e,t,n,i){if(Qr(e)){const{format:o,formatType:r,...a}=e;if(dr(r)&&!n.customFormatTypes)return si(In(t)),fa(a,t,n,i)}else{const o=Jr(e)?"axis":Xr(e)?"legend":_r(e)?"header":null;if(o&&e[o]){const{format:r,formatType:a,...s}=e[o];if(dr(a)&&!n.customFormatTypes)return si(In(t)),fa({...e,[o]:s},t,n,i)}}return qr(e)?da(e,t,i):function(e){let t=e.type;if(t)return e;const{datum:n}=e;return t=b(n)?"quantitative":x(n)?"nominal":ci(n)?"temporal":void 0,{...e,type:t}}(e)}function da(e,t,{compositeMark:n=!1}={}){const{aggregate:i,timeUnit:o,bin:r,field:a}=e,s={...e};if(n||!i||Se(i)||Ee(i)||Ce(i)||(si(function(e){return'Invalid aggregation operator "'.concat(e,'".')}(i)),delete s.aggregate),o&&(s.timeUnit=Di(o)),a&&(s.field="".concat(a)),Fn(r)&&(s.bin=pa(r,t)),kn(r)&&!en(t)&&si(function(e){return"Channel ".concat(e,' should not be used with "binned" bin.')}(t)),Gr(s)){const{type:e}=s,t=function(e){if(e)switch(e=e.toLowerCase()){case"q":case Ui:return"quantitative";case"t":case Hi:return"temporal";case"o":case Ii:return"ordinal";case"n":case Gi:return"nominal";case Vi:return"geojson"}}(e);e!==t&&(s.type=t),"quantitative"!==e&&_e(i)&&(si(function(e,t){return'Invalid field type "'.concat(e,'" for aggregate: "').concat(t,'", using "quantitative" instead.')}(e,i)),s.type="quantitative")}else if(!Nt(t)){const e=function(e,t){var n;switch(t){case"latitude":case"longitude":return"quantitative";case"row":case"column":case"facet":case"shape":case"strokeDash":return"nominal";case"order":return"ordinal"}if(Nr(e)&&u(e.sort))return"ordinal";const{aggregate:i,bin:o,timeUnit:r}=e;if(r)return"temporal";if(o||i&&!Ee(i)&&!Ce(i))return"quantitative";if(Yr(e)&&(null===(n=e.scale)||void 0===n?void 0:n.type))switch(ro[e.scale.type]){case"numeric":case"discretizing":return"quantitative";case"time":return"temporal"}return"nominal"}(s,t);s.type=e}if(Gr(s)){const{compatible:e,warning:n}=function(e,t){const n=e.type;if("geojson"===n&&"shape"!==t)return{compatible:!1,warning:"Channel ".concat(t," should not be used with a geojson data.")};switch(t){case Ne:case Pe:case je:return ea(e)?{compatible:!1,warning:Jn(t)}:ma;case Me:case Te:case Je:case Xe:case Qe:case rt:case st:case ct:case ut:case lt:case ft:case Ze:case Ue:case Re:case dt:return ma;case Ge:case Ye:case He:case Ve:return n!==Ui?{compatible:!1,warning:"Channel ".concat(t," should be used with a quantitative field only, not ").concat(e.type," field.")}:ma;case et:case tt:case nt:case it:case Ke:case Ie:case We:case Le:case qe:return"nominal"!==n||e.sort?ma:{compatible:!1,warning:"Channel ".concat(t," should not be used with an unsorted discrete field.")};case ot:return T(["ordinal","nominal"],e.type)?ma:{compatible:!1,warning:"StrokeDash channel should be used with only discrete data."};case $e:return T(["ordinal","nominal","geojson"],e.type)?ma:{compatible:!1,warning:"Shape channel should be used with only either discrete or geojson data."};case at:return"nominal"!==e.type||"sort"in e?ma:{compatible:!1,warning:"Channel order is inappropriate for nominal field, which has no inherent order."}}}(s,t)||{};!1===e&&si(n)}if(Nr(s)&&x(s.sort)){const{sort:e}=s;if(kr(e))return{...s,sort:{encoding:e}};const t=e.substr(1);if("-"===e.charAt(0)&&kr(t))return{...s,sort:{encoding:t,order:"descending"}}}if(_r(s)){const{header:e}=s,{orient:t,...n}=e;if(t)return{...s,header:{...n,labelOrient:e.labelOrient||t,titleOrient:e.titleOrient||t}}}return s}function pa(e,t){return y(e)?{maxbins:Sn(t)}:"binned"===e?{binned:!0}:e.maxbins||e.step?e:{...e,maxbins:Sn(t)}}const ma={compatible:!0};function ha(e){const{formatType:t}=sa(e);return"time"===t||!t&&((n=e)&&("temporal"===n.type||qr(n)&&!!n.timeUnit));var n}function ga(e,{timeUnit:t,type:n,wrapTime:i,undefinedIfExprNotRequired:o}){var r;const a=t&&(null===(r=Di(t))||void 0===r?void 0:r.unit);let s,c=a||"temporal"===n;return zo(e)?s=e.expr:Fi(e)?s=e.signal:ci(e)?(c=!0,s=mi(e)):(x(e)||b(e))&&c&&(s="datetime(".concat(JSON.stringify(e),")"),function(e){return!!hi[e]}(a)&&(b(e)&&e<1e4||x(e)&&isNaN(Date.parse(e)))&&(s=mi({[a]:e}))),s?i&&c?"time(".concat(s,")"):s:o?void 0:JSON.stringify(e)}function va(e,t){const{type:n}=e;return t.map((t=>{const i=ga(t,{timeUnit:qr(e)?e.timeUnit:void 0,type:n,undefinedIfExprNotRequired:!0});return void 0!==i?{signal:i}:t}))}function ya(e,t){return Fn(e.bin)?vn(t)&&T(["ordinal","nominal"],e.type):(console.warn("Only call this method for binned field defs."),!1)}function ba(e){const{anchor:t,frame:n,offset:i,orient:o,color:r,subtitleColor:a,subtitleFont:s,subtitleFontSize:c,subtitleFontStyle:u,subtitleFontWeight:l,subtitleLineHeight:f,subtitlePadding:d,...p}=e,m={...p,...r?{fill:r}:{}},h={...t?{anchor:t}:{},...n?{frame:n}:{},...i?{offset:i}:{},...o?{orient:o}:{}},g={...a?{subtitleColor:a}:{},...s?{subtitleFont:s}:{},...c?{subtitleFontSize:c}:{},...u?{subtitleFontStyle:u}:{},...l?{subtitleFontWeight:l}:{},...f?{subtitleLineHeight:f}:{},...d?{subtitlePadding:d}:{}};return{titleMarkConfig:m,subtitleMarkConfig:O(m,["align","baseline","dx","dy","limit"]),nonMark:h,subtitle:g}}function xa(e){return x(e)||u(e)&&x(e[0])}function wa(e){const t=u(e.condition)?e.condition.map(Da):Da(e.condition);return{...Aa(e),condition:t}}function Aa(e){if(zo(e)){const{expr:t,...n}=e;return{signal:t,...n}}return e}function Da(e){if(zo(e)){const{expr:t,...n}=e;return{signal:t,...n}}return e}function Fa(e){if(zo(e)){const{expr:t,...n}=e;return{signal:t,...n}}return Fi(e)?e:void 0!==e?{value:e}:void 0}function ka(e){return Fi(e)?e.signal:w(e.value)}function Ca(e){return Fi(e)?e.signal:null==e?null:w(e)}function Ea(e,t,n){for(const i of n){const n=_a(i,t.markDef,t.config);void 0!==n&&(e[i]=Fa(n))}return e}function Sa(e){var t;return[].concat(e.type,null!==(t=e.style)&&void 0!==t?t:[])}function Ba(e,t,n,i={}){const{vgChannel:o,ignoreVgConfig:r}=i;return o&&void 0!==t[o]?t[o]:void 0!==t[e]?t[e]:!r||o&&o!==e?_a(e,t,n,i):void 0}function _a(e,t,n,{vgChannel:i}={}){return ue(i?za(e,t,n.style):void 0,za(e,t,n.style),i?n[t.type][i]:void 0,n[t.type][e],i?n.mark[i]:n.mark[e])}function za(e,t,n){return Oa(e,Sa(t),n)}function Oa(e,t,n){let i;t=h(t);for(const o of t){const t=n[o];t&&void 0!==t[e]&&(i=t[e])}return i}function Na(e,t){return h(e).reduce(((e,n)=>{var i;return e.field.push(Kr(n,t)),e.order.push(null!==(i=n.sort)&&void 0!==i?i:"ascending"),e}),{field:[],order:[]})}function Pa(e,t){const n=[...e];return t.forEach((e=>{for(const t of n)if(_(t,e))return;n.push(e)})),n}function ja(e,t){return _(e,t)||!t?e:e?[...h(e),...h(t)].join(", "):t}function Ma(e,t){const n=e.value,i=t.value;if(null==n||null===i)return{explicit:e.explicit,value:null};if((xa(n)||Fi(n))&&(xa(i)||Fi(i)))return{explicit:e.explicit,value:ja(n,i)};if(xa(n)||Fi(n))return{explicit:e.explicit,value:n};if(xa(i)||Fi(i))return{explicit:e.explicit,value:i};if(!(xa(n)||Fi(n)||xa(i)||Fi(i)))return{explicit:e.explicit,value:Pa(n,i)};throw new Error("It should never reach here")}function Ta(e){return"mark"in e}class La{constructor(e,t){this.name=e,this.run=t}hasMatchingType(e){return!!Ta(e)&&($o(t=e.mark)?t.type:t)===this.name;var t}}function qa(e,t){const n=e&&e[t];return!!n&&(u(n)?L(n,(e=>!!e.field)):qr(n)||Tr(n))}function Ra(e){return L(At,(t=>{if(qa(e,t)){const n=e[t];if(u(n))return L(n,(e=>!!e.aggregate));{const e=ca(n);return e&&!!e.aggregate}}return!1}))}function Wa(e,t){const n=[],i=[],o=[],r=[],a={};return Ha(e,((s,c)=>{if(qr(s)){const{field:u,aggregate:l,bin:f,timeUnit:d,...p}=s;if(l||d||f){const e=ra(s),m=e&&e.title;let h=Kr(s,{forAs:!0});const g={...m?[]:{title:oa(s,t,{allowDisabling:!0})},...p,field:h};if(l){let e;if(Ee(l)?(e="argmax",h=Kr({op:"argmax",field:l.argmax},{forAs:!0}),g.field="".concat(h,".").concat(u)):Ce(l)?(e="argmin",h=Kr({op:"argmin",field:l.argmin},{forAs:!0}),g.field="".concat(h,".").concat(u)):"boxplot"!==l&&"errorbar"!==l&&"errorband"!==l&&(e=l),e){const t={op:e,as:h};u&&(t.field=u),r.push(t)}}else if(n.push(h),Gr(s)&&Fn(f)){if(i.push({bin:f,field:u,as:h}),n.push(Kr(s,{binSuffix:"end"})),ya(s,c)&&n.push(Kr(s,{binSuffix:"range"})),en(c)){const e={field:h+"_end"};a[c+"2"]=e}g.bin="binned",Nt(c)||(g.type=Ui)}else if(d){o.push({timeUnit:d,field:u,as:h});const e=Gr(s)&&s.type!==Hi&&"time";e&&(c===rt||c===ut?g.formatType=e:!function(e){return!!Qt[e]}(c)?en(c)&&(g.axis={formatType:e,...g.axis}):g.legend={formatType:e,...g.legend})}a[c]=g}else n.push(u),a[c]=e[c]}else a[c]=e[c]})),{bins:i,timeUnits:o,aggregate:r,groupby:n,encoding:a}}function Ua(e,t,n,i){return J(e).reduce(((o,r)=>{if(!zt(r))return si(function(e){return"".concat(e,"-encoding is dropped as ").concat(e," is not a valid encoding channel.")}(r)),o;const a=e[r];if("angle"!==r||"arc"!==t||e.theta||(si("Arc marks uses theta channel rather than angle, replacing angle with theta."),r=Ue),!function(e,t,n){const i=yn(t,n);if(!i)return!1;if("binned"===i){const n=e[t===Le?Me:Te];return!!(qr(n)&&qr(e[t])&&kn(n.bin))}return!0}(e,r,t))return si(Yn(r,t)),o;if(r===Ke&&"line"===t){const t=ca(e[r]);if(null==t?void 0:t.aggregate)return si("Line marks cannot encode size with a non-groupby field. You may want to use trail marks instead."),o}if(r===Je&&(n?"fill"in e:"stroke"in e))return si(Gn("encoding",{fill:"fill"in e,stroke:"stroke"in e})),o;if(r===st||r===at&&!u(a)&&!Vr(a)||r===ut&&u(a))a&&(o[r]=h(a).reduce(((e,t)=>(qr(t)?e.push(da(t,r)):si(Vn(t,r)),e)),[]));else{if(r===ut&&null===a)o[r]=null;else if(!(qr(a)||Wr(a)||Vr(a)||Mr(a)||Fi(a)))return si(Vn(a,r)),o;o[r]=la(a,r,i)}return o}),{})}function Ia(e,t){const n={};for(const i of J(e)){const o=la(e[i],i,t,{compositeMark:!0});n[i]=o}return n}function Ha(e,t,n){if(e)for(const i of J(e)){const o=e[i];if(u(o))for(const e of o)t.call(n,e,i);else t.call(n,o,i)}}function Ga(e,t){return J(t).reduce(((n,i)=>{switch(i){case Me:case Te:case lt:case dt:case ft:case Le:case qe:case Ue:case Ie:case Re:case We:case He:case Ge:case Ve:case Ye:case rt:case $e:case Ze:case ut:return n;case at:if("line"===e||"trail"===e)return n;case st:case ct:{const e=t[i];if(u(e)||qr(e))for(const t of h(e))t.aggregate||n.push(Kr(t,{}));return n}case Ke:if("trail"===e)return n;case Je:case Xe:case Qe:case et:case tt:case nt:case ot:case it:{const e=ca(t[i]);return e&&!e.aggregate&&n.push(Kr(e,{})),n}}}),[])}function Va(e,t,n,i=!0){if("tooltip"in n)return{tooltip:n.tooltip};return{tooltip:[...e.map((({fieldPrefix:e,titlePrefix:n})=>{const o=i?" of ".concat(Ya(t)):"";return{field:e+t.field,type:t.type,title:Fi(n)?{signal:n+'"'.concat(escape(o),'"')}:n+o}})),...U(function(e){const t=[];for(const n of J(e))if(qa(e,n)){const i=h(e[n]);for(const e of i)qr(e)?t.push(e):Tr(e)&&t.push(e.condition)}return t}(n).map($r),j)]}}function Ya(e){const{title:t,field:n}=e;return ue(t,n)}function Ja(e,t,n,i,o){const{scale:r,axis:a}=n;return({partName:s,mark:c,positionPrefix:u,endPositionPrefix:l,extraEncoding:f={}})=>{const d=Ya(n);return Xa(e,s,o,{mark:c,encoding:{[t]:{field:u+"_"+n.field,type:n.type,...void 0!==d?{title:d}:{},...void 0!==r?{scale:r}:{},...void 0!==a?{axis:a}:{}},...x(l)?{[t+"2"]:{field:l+"_"+n.field}}:{},...i,...f}})}}function Xa(e,t,n,i){const{clip:o,color:r,opacity:a}=e,s=e.type;return e[t]||void 0===e[t]&&n[t]?[{...i,mark:{...n[t],...o?{clip:o}:{},...r?{color:r}:{},...a?{opacity:a}:{},...$o(i.mark)?i.mark:{type:i.mark},style:"".concat(s,"-").concat(t),...y(e[t])?{}:e[t]}}]:[]}function Qa(e,t,n){const{encoding:i}=e,o="vertical"===t?"y":"x",r=i[o],a=i[o+"2"],s=i[o+"Error"],c=i[o+"Error2"];return{continuousAxisChannelDef:$a(r,n),continuousAxisChannelDef2:$a(a,n),continuousAxisChannelDefError:$a(s,n),continuousAxisChannelDefError2:$a(c,n),continuousAxis:o}}function $a(e,t){if(e&&e.aggregate){const{aggregate:n,...i}=e;return n!==t&&si(function(e,t){return"Continuous axis should not have customized aggregation function ".concat(e,"; ").concat(t," already agregates the axis.")}(n,t)),i}return e}function Ka(e,t){const{mark:n,encoding:i}=e,{x:o,y:r}=i;if($o(n)&&n.orient)return n.orient;if(Ur(o)){if(Ur(r)){const e=qr(o)&&o.aggregate,n=qr(r)&&r.aggregate;if(e||n!==t){if(n||e!==t){if(e===t&&n===t)throw new Error("Both x and y cannot have aggregate");return ha(r)&&!ha(o)?"horizontal":"vertical"}return"horizontal"}return"vertical"}return"horizontal"}if(Ur(r))return"vertical";throw new Error("Need a valid continuous axis for ".concat(t,"s"))}const Za="boxplot",es=new La(Za,ns);function ts(e){return b(e)?"tukey":e}function ns(e,{config:t}){var n;e={...e,encoding:Ia(e.encoding,t)};const{mark:i,encoding:o,selection:r,projection:a,...s}=e,c=$o(i)?i:{type:i};r&&si(qn("boxplot"));const f=null!==(n=c.extent)&&void 0!==n?n:t.boxplot.extent,d=Ba("size",c,t),p=ts(f),{bins:m,timeUnits:h,transform:g,continuousAxisChannelDef:v,continuousAxis:y,groupby:b,aggregate:x,encodingWithoutContinuousAxis:w,ticksOrient:A,boxOrient:D,customTooltipWithoutAggregatedField:F}=function(e,t,n){const i=Ka(e,Za),{continuousAxisChannelDef:o,continuousAxis:r}=Qa(e,i,Za),a=o.field,s=ts(t),c=[...is(a),{op:"median",field:a,as:"mid_box_"+a},{op:"min",field:a,as:("min-max"===s?"lower_whisker_":"min_")+a},{op:"max",field:a,as:("min-max"===s?"upper_whisker_":"max_")+a}],l="min-max"===s||"tukey"===s?[]:[{calculate:'datum["upper_box_'.concat(a,'"] - datum["lower_box_').concat(a,'"]'),as:"iqr_"+a},{calculate:'min(datum["upper_box_'.concat(a,'"] + datum["iqr_').concat(a,'"] * ').concat(t,', datum["max_').concat(a,'"])'),as:"upper_whisker_"+a},{calculate:'max(datum["lower_box_'.concat(a,'"] - datum["iqr_').concat(a,'"] * ').concat(t,', datum["min_').concat(a,'"])'),as:"lower_whisker_"+a}],{[r]:f,...d}=e.encoding,{customTooltipWithoutAggregatedField:p,filteredEncoding:m}=function(e){const{tooltip:t,...n}=e;if(!t)return{filteredEncoding:n};let i,o;if(u(t)){for(const e of t)e.aggregate?(i||(i=[]),i.push(e)):(o||(o=[]),o.push(e));i&&(n.tooltip=i)}else t.aggregate?n.tooltip=t:o=t;return u(o)&&1===o.length&&(o=o[0]),{customTooltipWithoutAggregatedField:o,filteredEncoding:n}}(d),{bins:h,timeUnits:g,aggregate:v,groupby:y,encoding:b}=Wa(m,n),x="vertical"===i?"horizontal":"vertical",w=i,A=[...h,...g,{aggregate:[...v,...c],groupby:y},...l];return{bins:h,timeUnits:g,transform:A,groupby:y,aggregate:v,continuousAxisChannelDef:o,continuousAxis:r,encodingWithoutContinuousAxis:b,ticksOrient:x,boxOrient:w,customTooltipWithoutAggregatedField:p}}(e,f,t),{color:k,size:C,...E}=w,S=e=>Ja(c,y,v,e,t.boxplot),B=S(E),_=S(w),z=S({...E,...C?{size:C}:{}}),O=Va([{fieldPrefix:"min-max"===p?"upper_whisker_":"max_",titlePrefix:"Max"},{fieldPrefix:"upper_box_",titlePrefix:"Q3"},{fieldPrefix:"mid_box_",titlePrefix:"Median"},{fieldPrefix:"lower_box_",titlePrefix:"Q1"},{fieldPrefix:"min-max"===p?"lower_whisker_":"min_",titlePrefix:"Min"}],v,w),P={type:"tick",color:"black",opacity:1,orient:A,invalid:null,aria:!1},j="min-max"===p?O:Va([{fieldPrefix:"upper_whisker_",titlePrefix:"Upper Whisker"},{fieldPrefix:"lower_whisker_",titlePrefix:"Lower Whisker"}],v,w),M=[...B({partName:"rule",mark:{type:"rule",invalid:null,aria:!1},positionPrefix:"lower_whisker",endPositionPrefix:"lower_box",extraEncoding:j}),...B({partName:"rule",mark:{type:"rule",invalid:null,aria:!1},positionPrefix:"upper_box",endPositionPrefix:"upper_whisker",extraEncoding:j}),...B({partName:"ticks",mark:P,positionPrefix:"lower_whisker",extraEncoding:j}),...B({partName:"ticks",mark:P,positionPrefix:"upper_whisker",extraEncoding:j})],T=[..."tukey"!==p?M:[],..._({partName:"box",mark:{type:"bar",...d?{size:d}:{},orient:D,invalid:null,ariaRoleDescription:"box"},positionPrefix:"lower_box",endPositionPrefix:"upper_box",extraEncoding:O}),...z({partName:"median",mark:{type:"tick",invalid:null,...l(t.boxplot.median)&&t.boxplot.median.color?{color:t.boxplot.median.color}:{},...d?{size:d}:{},orient:A,aria:!1},positionPrefix:"mid_box",extraEncoding:O})];var L;if("min-max"===p)return{...s,transform:(null!==(L=s.transform)&&void 0!==L?L:[]).concat(g),layer:T};const q='datum["lower_box_'.concat(v.field,'"]'),R='datum["upper_box_'.concat(v.field,'"]'),W="(".concat(R," - ").concat(q,")"),U="".concat(q," - ").concat(f," * ").concat(W),I="".concat(R," + ").concat(f," * ").concat(W),H='datum["'.concat(v.field,'"]'),G={joinaggregate:is(v.field),groupby:b},V={transform:[{filter:"(".concat(U," <= ").concat(H,") && (").concat(H," <= ").concat(I,")")},{aggregate:[{op:"min",field:v.field,as:"lower_whisker_"+v.field},{op:"max",field:v.field,as:"upper_whisker_"+v.field},{op:"min",field:"lower_box_"+v.field,as:"lower_box_"+v.field},{op:"max",field:"upper_box_"+v.field,as:"upper_box_"+v.field},...x],groupby:b}],layer:M},{tooltip:J,...X}=E,{scale:Q,axis:$}=v,K=Ya(v),Z=N($,["title"]),ee=Xa(c,"outliers",t.boxplot,{transform:[{filter:"(".concat(H," < ").concat(U,") || (").concat(H," > ").concat(I,")")}],mark:"point",encoding:{[y]:{field:v.field,type:v.type,...void 0!==K?{title:K}:{},...void 0!==Q?{scale:Q}:{},...Y(Z)?{}:{axis:Z}},...X,...k?{color:k}:{},...F?{tooltip:F}:{}}})[0];let te;const ne=[...m,...h,G];return ee?te={transform:ne,layer:[ee,V]}:(te=V,te.transform.unshift(...ne)),{...s,layer:[te,{transform:g,layer:T}]}}function is(e){return[{op:"q1",field:e,as:"lower_box_"+e},{op:"q3",field:e,as:"upper_box_"+e}]}const os="errorbar",rs=new La(os,as);function as(e,{config:t}){e={...e,encoding:Ia(e.encoding,t)};const{transform:n,continuousAxisChannelDef:i,continuousAxis:o,encodingWithoutContinuousAxis:r,ticksOrient:a,markDef:s,outerSpec:c,tooltipEncoding:u}=cs(e,os,t);delete r.size;const l=Ja(s,o,i,r,t.errorbar),f=s.thickness,d=s.size,p={type:"tick",orient:a,aria:!1,...void 0!==f?{thickness:f}:{},...void 0!==d?{size:d}:{}},m=[...l({partName:"ticks",mark:p,positionPrefix:"lower",extraEncoding:u}),...l({partName:"ticks",mark:p,positionPrefix:"upper",extraEncoding:u}),...l({partName:"rule",mark:{type:"rule",ariaRoleDescription:"errorbar",...void 0!==f?{size:f}:{}},positionPrefix:"lower",endPositionPrefix:"upper",extraEncoding:u})];return{...c,transform:n,...m.length>1?{layer:m}:{...m[0]}}}function ss(e,t){const{encoding:n}=e;if(function(e){return(Hr(e.x)||Hr(e.y))&&!Hr(e.x2)&&!Hr(e.y2)&&!Hr(e.xError)&&!Hr(e.xError2)&&!Hr(e.yError)&&!Hr(e.yError2)}(n))return{orient:Ka(e,t),inputType:"raw"};const i=function(e){return Hr(e.x2)||Hr(e.y2)}(n),o=function(e){return Hr(e.xError)||Hr(e.xError2)||Hr(e.yError)||Hr(e.yError2)}(n),r=n.x,a=n.y;if(i){if(o)throw new Error("".concat(t," cannot be both type aggregated-upper-lower and aggregated-error"));const e=n.x2,i=n.y2;if(Hr(e)&&Hr(i))throw new Error("".concat(t," cannot have both x2 and y2"));if(Hr(e)){if(Ur(r))return{orient:"horizontal",inputType:"aggregated-upper-lower"};throw new Error("Both x and x2 have to be quantitative in ".concat(t))}if(Hr(i)){if(Ur(a))return{orient:"vertical",inputType:"aggregated-upper-lower"};throw new Error("Both y and y2 have to be quantitative in ".concat(t))}throw new Error("No ranged axis")}{const e=n.xError,i=n.xError2,o=n.yError,s=n.yError2;if(Hr(i)&&!Hr(e))throw new Error("".concat(t," cannot have xError2 without xError"));if(Hr(s)&&!Hr(o))throw new Error("".concat(t," cannot have yError2 without yError"));if(Hr(e)&&Hr(o))throw new Error("".concat(t," cannot have both xError and yError with both are quantiative"));if(Hr(e)){if(Ur(r))return{orient:"horizontal",inputType:"aggregated-error"};throw new Error("All x, xError, and xError2 (if exist) have to be quantitative")}if(Hr(o)){if(Ur(a))return{orient:"vertical",inputType:"aggregated-error"};throw new Error("All y, yError, and yError2 (if exist) have to be quantitative")}throw new Error("No ranged axis")}}function cs(e,t,n){var i;const{mark:o,encoding:r,selection:a,projection:s,...c}=e,u=$o(o)?o:{type:o};a&&si(qn(t));const{orient:l,inputType:f}=ss(e,t),{continuousAxisChannelDef:d,continuousAxisChannelDef2:p,continuousAxisChannelDefError:m,continuousAxisChannelDefError2:h,continuousAxis:g}=Qa(e,l,t),{errorBarSpecificAggregate:v,postAggregateCalculates:y,tooltipSummary:b,tooltipTitleWithFieldName:x}=function(e,t,n,i,o,r,a,s){let c=[],u=[];const l=t.field;let f,d=!1;if("raw"===r){const t=e.center?e.center:e.extent?"iqr"===e.extent?"median":"mean":s.errorbar.center,n=e.extent?e.extent:"mean"===t?"stderr":"iqr";if("median"===t!=("iqr"===n)&&si(function(e,t,n){return"".concat(e," is not usually used with ").concat(t," for ").concat(n,".")}(t,n,a)),"stderr"===n||"stdev"===n)c=[{op:n,field:l,as:"extent_"+l},{op:t,field:l,as:"center_"+l}],u=[{calculate:'datum["center_'.concat(l,'"] + datum["extent_').concat(l,'"]'),as:"upper_"+l},{calculate:'datum["center_'.concat(l,'"] - datum["extent_').concat(l,'"]'),as:"lower_"+l}],f=[{fieldPrefix:"center_",titlePrefix:te(t)},{fieldPrefix:"upper_",titlePrefix:us(t,n,"+")},{fieldPrefix:"lower_",titlePrefix:us(t,n,"-")}],d=!0;else{let e,t,i;"ci"===n?(e="mean",t="ci0",i="ci1"):(e="median",t="q1",i="q3"),c=[{op:t,field:l,as:"lower_"+l},{op:i,field:l,as:"upper_"+l},{op:e,field:l,as:"center_"+l}],f=[{fieldPrefix:"upper_",titlePrefix:oa({field:l,aggregate:i,type:"quantitative"},s,{allowDisabling:!1})},{fieldPrefix:"lower_",titlePrefix:oa({field:l,aggregate:t,type:"quantitative"},s,{allowDisabling:!1})},{fieldPrefix:"center_",titlePrefix:oa({field:l,aggregate:e,type:"quantitative"},s,{allowDisabling:!1})}]}}else{(e.center||e.extent)&&si((p=e.center,m=e.extent,"".concat(m?"extent ":"").concat(m&&p?"and ":"").concat(p?"center ":"").concat(m&&p?"are ":"is ","not needed when data are aggregated."))),"aggregated-upper-lower"===r?(f=[],u=[{calculate:'datum["'.concat(n.field,'"]'),as:"upper_"+l},{calculate:'datum["'.concat(l,'"]'),as:"lower_"+l}]):"aggregated-error"===r&&(f=[{fieldPrefix:"",titlePrefix:l}],u=[{calculate:'datum["'.concat(l,'"] + datum["').concat(i.field,'"]'),as:"upper_"+l}],o?u.push({calculate:'datum["'.concat(l,'"] + datum["').concat(o.field,'"]'),as:"lower_"+l}):u.push({calculate:'datum["'.concat(l,'"] - datum["').concat(i.field,'"]'),as:"lower_"+l}));for(const e of u)f.push({fieldPrefix:e.as.substring(0,6),titlePrefix:ae(ae(e.calculate,'datum["',""),'"]',"")})}var p,m;return{postAggregateCalculates:u,errorBarSpecificAggregate:c,tooltipSummary:f,tooltipTitleWithFieldName:d}}(u,d,p,m,h,f,t,n),{[g]:w,["x"===g?"x2":"y2"]:A,["x"===g?"xError":"yError"]:D,["x"===g?"xError2":"yError2"]:F,...k}=r,{bins:C,timeUnits:E,aggregate:S,groupby:B,encoding:_}=Wa(k,n),z=[...S,...v],O="raw"!==f?[]:B,N=Va(b,d,_,x);return{transform:[...null!==(i=c.transform)&&void 0!==i?i:[],...C,...E,...0===z.length?[]:[{aggregate:z,groupby:O}],...y],groupby:O,continuousAxisChannelDef:d,continuousAxis:g,encodingWithoutContinuousAxis:_,ticksOrient:"vertical"===l?"horizontal":"vertical",markDef:u,outerSpec:c,tooltipEncoding:N}}function us(e,t,n){return te(e)+" "+n+" "+t}const ls="errorband",fs=new La(ls,ds);function ds(e,{config:t}){e={...e,encoding:Ia(e.encoding,t)};const{transform:n,continuousAxisChannelDef:i,continuousAxis:o,encodingWithoutContinuousAxis:r,markDef:a,outerSpec:s,tooltipEncoding:c}=cs(e,ls,t),u=a,l=Ja(u,o,i,r,t.errorband),f=void 0!==e.encoding.x&&void 0!==e.encoding.y;let d={type:f?"area":"rect"},p={type:f?"line":"rule"};const m={...u.interpolate?{interpolate:u.interpolate}:{},...u.tension&&u.interpolate?{tension:u.tension}:{}};return f?(d={...d,...m,ariaRoleDescription:"errorband"},p={...p,...m,aria:!1}):u.interpolate?si(ii("interpolate")):u.tension&&si(ii("tension")),{...s,transform:n,layer:[...l({partName:"band",mark:d,positionPrefix:"lower",endPositionPrefix:"upper",extraEncoding:c}),...l({partName:"borders",mark:p,positionPrefix:"lower",extraEncoding:c}),...l({partName:"borders",mark:p,positionPrefix:"upper",extraEncoding:c})]}}const ps={};function ms(e,t,n){const i=new La(e,t);ps[e]={normalizer:i,parts:n}}ms(Za,ns,["box","median","outliers","rule","ticks"]),ms(os,as,["ticks","rule"]),ms(ls,ds,["band","borders"]);const hs=["gradientHorizontalMaxLength","gradientHorizontalMinLength","gradientVerticalMaxLength","gradientVerticalMinLength","unselectedOpacity"],gs={titleAlign:"align",titleAnchor:"anchor",titleAngle:"angle",titleBaseline:"baseline",titleColor:"color",titleFont:"font",titleFontSize:"fontSize",titleFontStyle:"fontStyle",titleFontWeight:"fontWeight",titleLimit:"limit",titleLineHeight:"lineHeight",titleOrient:"orient",titlePadding:"offset"},vs={labelAlign:"align",labelAnchor:"anchor",labelAngle:"angle",labelBaseline:"baseline",labelColor:"color",labelFont:"font",labelFontSize:"fontSize",labelFontStyle:"fontStyle",labelFontWeight:"fontWeight",labelLimit:"limit",labelLineHeight:"lineHeight",labelOrient:"orient",labelPadding:"offset"},ys=J(gs),bs=J(vs),xs=J({header:1,headerRow:1,headerColumn:1,headerFacet:1}),ws=["size","shape","fill","stroke","strokeDash","strokeWidth","opacity"];function As(e){const t=[];for(const n of e||[]){const{expr:e,bind:i,...o}=n;if(i&&e){const n={...o,bind:i,init:e};t.push(n)}else{const n={...o,...e?{update:e}:{},...i?{bind:i}:{}};t.push(n)}}return t}const Ds="_vgsid_",Fs={single:{on:"click",fields:[Ds],resolve:"global",empty:"all",clear:"dblclick"},multi:{on:"click",fields:[Ds],toggle:"event.shiftKey",resolve:"global",empty:"all",clear:"dblclick"},interval:{on:"[mousedown, window:mouseup] > window:mousemove!",encodings:["x","y"],translate:"[mousedown, window:mouseup] > window:mousemove!",zoom:"wheel!",mark:{fill:"#333",fillOpacity:.125,stroke:"white"},resolve:"global",clear:"dblclick"}};function ks(e){return!(!e||"legend"!==e&&!e.legend)}function Cs(e){return ks(e)&&l(e)}function Es(e){return"concat"in e}function Ss(e){return"vconcat"in e}function Bs(e){return"hconcat"in e}const _s=["background","padding"];function zs(e,t){const n={};for(const t of _s)e&&void 0!==e[t]&&(n[t]=Aa(e[t]));return t&&(n.params=e.params),n}function Os(e){return l(e)&&void 0!==e.step}function Ns(e){return e.view||e.width||e.height}const Ps=J({align:1,bounds:1,center:1,columns:1,spacing:1});function js(e,t){var n;return null!==(n=e[t])&&void 0!==n?n:e["width"===t?"continuousWidth":"continuousHeight"]}function Ms(e,t){const n=Ts(e,t);return Os(n)?n.step:Ls}function Ts(e,t){var n;return ue(null!==(n=e[t])&&void 0!==n?n:e["width"===t?"discreteWidth":"discreteHeight"],{step:e.step})}const Ls=20,qs={background:"white",padding:5,timeFormat:"%b %d, %Y",countTitle:"Count of Records",view:{continuousWidth:200,continuousHeight:200,step:Ls},mark:{color:"#4c78a8",invalid:"filter",timeUnitBand:1},arc:{},area:{},bar:nr,circle:{},geoshape:{},image:{},line:{},point:{},rect:ir,rule:{color:"black"},square:{},text:{color:"black"},tick:{thickness:1},trail:{},boxplot:{size:14,extent:1.5,box:{},median:{color:"white"},outliers:{},rule:{},ticks:null},errorbar:{center:"mean",rule:!0,ticks:!1},errorband:{band:{opacity:.3},borders:!1},scale:{pointPadding:.5,barBandPaddingInner:.1,rectBandPaddingInner:0,minBandSize:2,minFontSize:8,maxFontSize:40,minOpacity:.3,maxOpacity:.8,minSize:9,minStrokeWidth:1,maxStrokeWidth:4,quantileCount:4,quantizeCount:4},projection:{},legend:{gradientHorizontalMaxLength:200,gradientHorizontalMinLength:100,gradientVerticalMaxLength:200,gradientVerticalMinLength:64,unselectedOpacity:.35},header:{titlePadding:10,labelPadding:10},headerColumn:{},headerRow:{},headerFacet:{},selection:Fs,style:{},title:{},facet:{spacing:20},concat:{spacing:20}},Rs=["#4c78a8","#f58518","#e45756","#72b7b2","#54a24b","#eeca3b","#b279a2","#ff9da6","#9d755d","#bab0ac"],Ws={text:11,guideLabel:10,guideTitle:11,groupTitle:13,groupSubtitle:12},Us={blue:Rs[0],orange:Rs[1],red:Rs[2],teal:Rs[3],green:Rs[4],yellow:Rs[5],purple:Rs[6],pink:Rs[7],brown:Rs[8],gray0:"#000",gray1:"#111",gray2:"#222",gray3:"#333",gray4:"#444",gray5:"#555",gray6:"#666",gray7:"#777",gray8:"#888",gray9:"#999",gray10:"#aaa",gray11:"#bbb",gray12:"#ccc",gray13:"#ddd",gray14:"#eee",gray15:"#fff"};function Is(e){const t=J(e||{}),n={};for(const i of t){const t=e[i];n[i]=ve(t)?wa(t):Aa(t)}return n}const Hs=[...er,...De,...xs,"background","padding","legend","lineBreak","scale","style","title","view"];function Gs(e={}){const{color:t,font:n,fontSize:i,...o}=e,r=d({},qs,n?function(e){return{text:{font:e},style:{"guide-label":{font:e},"guide-title":{font:e},"group-title":{font:e},"group-subtitle":{font:e}}}}(n):{},t?function(e={}){return{signals:[{name:"color",value:l(e)?{...Us,...e}:Us}],mark:{color:{signal:"color.blue"}},rule:{color:{signal:"color.gray0"}},text:{color:{signal:"color.gray0"}},style:{"guide-label":{fill:{signal:"color.gray0"}},"guide-title":{fill:{signal:"color.gray0"}},"group-title":{fill:{signal:"color.gray0"}},"group-subtitle":{fill:{signal:"color.gray0"}},cell:{stroke:{signal:"color.gray8"}}},axis:{domainColor:{signal:"color.gray13"},gridColor:{signal:"color.gray8"},tickColor:{signal:"color.gray13"}},range:{category:[{signal:"color.blue"},{signal:"color.orange"},{signal:"color.red"},{signal:"color.teal"},{signal:"color.green"},{signal:"color.yellow"},{signal:"color.purple"},{signal:"color.pink"},{signal:"color.brown"},{signal:"color.grey8"}]}}}(t):{},i?function(e){return{signals:[{name:"fontSize",value:l(e)?{...Ws,...e}:Ws}],text:{fontSize:{signal:"fontSize.text"}},style:{"guide-label":{fontSize:{signal:"fontSize.guideLabel"}},"guide-title":{fontSize:{signal:"fontSize.guideTitle"}},"group-title":{fontSize:{signal:"fontSize.groupTitle"}},"group-subtitle":{fontSize:{signal:"fontSize.groupSubtitle"}}}}}(i):{},o||{}),a=N(r,Hs);for(const e of["background","lineBreak","padding"])r[e]&&(a[e]=Aa(r[e]));for(const e of er)r[e]&&(a[e]=Oo(r[e]));for(const e of De)r[e]&&(a[e]=Is(r[e]));for(const e of xs)r[e]&&(a[e]=Oo(r[e]));return r.legend&&(a.legend=Oo(r.legend)),r.scale&&(a.scale=Oo(r.scale)),r.style&&(a.style=function(e){const t=J(e),n={};for(const i of t)n[i]=Is(e[i]);return n}(r.style)),r.title&&(a.title=Oo(r.title)),r.view&&(a.view=Oo(r.view)),a}const Vs=["view",...Qo],Ys=["color","fontSize","background","padding","facet","concat","numberFormat","timeFormat","countTitle","header","axisQuantitative","axisTemporal","axisDiscrete","axisPoint","axisXBand","axisXPoint","axisXDiscrete","axisXQuantitative","axisXTemporal","axisYBand","axisYPoint","axisYDiscrete","axisYQuantitative","axisYTemporal","scale","selection","overlay"],Js={view:["continuousWidth","continuousHeight","discreteWidth","discreteHeight","step"],area:["line","point"],bar:["binSpacing","continuousBandSize","discreteBandSize"],rect:["binSpacing","continuousBandSize","discreteBandSize"],line:["point"],tick:["bandSize","thickness"]};function Xs(e){e=z(e);for(const t of Ys)delete e[t];if(e.axis)for(const t in e.axis)ve(e.axis[t])&&delete e.axis[t];if(e.legend)for(const t of hs)delete e.legend[t];if(e.mark){for(const t of Zo)delete e.mark[t];e.mark.tooltip&&l(e.mark.tooltip)&&delete e.mark.tooltip}e.params&&(e.signals=(e.signals||[]).concat(As(e.params)),delete e.params);for(const t of Vs){for(const n of Zo)delete e[t][n];const n=Js[t];if(n)for(const i of n)delete e[t][i];Qs(e,t)}for(const t of J(ps))delete e[t];!function(e){const{titleMarkConfig:t,subtitleMarkConfig:n,subtitle:i}=ba(e.title);Y(t)||(e.style["group-title"]={...e.style["group-title"],...t});Y(n)||(e.style["group-subtitle"]={...e.style["group-subtitle"],...n});Y(i)?delete e.title:e.title=i}(e);for(const t in e)l(e[t])&&Y(e[t])&&delete e[t];return Y(e)?void 0:e}function Qs(e,t,n,i){var o;"view"===t&&(n="cell");const r={...i?e[t][i]:e[t],...e.style[null!==(o=n)&&void 0!==o?o:t]};var a;Y(r)||(e.style[null!==(a=n)&&void 0!==a?a:t]=r);i||delete e[t]}function $s(e){return"layer"in e}const Ks={zero:1,center:1,normalize:1};const Zs=new Set([Po,Mo,jo,Wo,qo,Go,Vo,Lo,Uo,Io]),ec=new Set([Mo,jo,Po]);function tc(e,t){const n="x"===t?"y":"radius",i=e[t],o=e[n];if(qr(i)&&qr(o))if("quantitative"===Rr(i)&&"quantitative"===Rr(o)){if(i.stack)return t;if(o.stack)return n;const e=qr(i)&&!!i.aggregate;if(e!==(qr(o)&&!!o.aggregate))return e?t:n;{var r,a;const e=null===(r=i.scale)||void 0===r?void 0:r.type,s=null===(a=o.scale)||void 0===a?void 0:a.type;if(e&&"linear"!==e)return n;if(s&&"linear"!==s)return t}}else{if("quantitative"===Rr(i))return t;if("quantitative"===Rr(o))return n}else{if("quantitative"===Rr(i))return t;if("quantitative"===Rr(o))return n}}function nc(e,t,n={}){const i=$o(e)?e.type:e;if(!Zs.has(i))return null;const o=tc(t,"x")||tc(t,"theta");if(!o)return null;const r=t[o],a=qr(r)?Kr(r,{}):void 0;let s=function(e){switch(e){case"x":return"y";case"y":return"x";case"theta":return"radius";case"radius":return"theta"}}(o),c=t[s],u=qr(c)?Kr(c,{}):void 0;u===a&&(u=void 0,c=void 0,s=void 0);const l=$t.reduce(((e,n)=>{if("tooltip"!==n&&qa(t,n)){const i=t[n];for(const t of h(i)){const i=ca(t);if(i.aggregate)continue;const o=Kr(i,{});o&&o===u||e.push({channel:n,fieldDef:i})}}return e}),[]);let f;if(void 0!==r.stack?f=y(r.stack)?r.stack?"zero":null:r.stack:l.length>0&&ec.has(i)&&(f="zero"),!f||!(f in Ks))return null;var d,p;if(Ra(t)&&0===l.length)return null;if(r.scale&&r.scale.type&&r.scale.type!==Yi){if(n.disallowNonLinearStack)return null;si(function(e){return"Cannot stack non-linear scale (".concat(e,").")}(r.scale.type))}return Hr(t[Mt(o)])?(void 0!==r.stack&&si('Cannot stack "'.concat(d=o,'" if there is already "').concat(d,'2".')),null):(qr(r)&&r.aggregate&&!T(ze,r.aggregate)&&si((p=r.aggregate,'Stacking is applied even though the aggregate function is non-summative ("'.concat(p,'").'))),{groupbyChannel:c?s:void 0,groupbyField:u,fieldChannel:o,impute:null!==r.impute&&Jo(i),stackBy:l,offset:f})}function ic(e){const{point:t,line:n,...i}=e;return J(i).length>1?i:i.type}function oc(e){for(const t of["line","area","rule","trail"])e[t]&&(e={...e,[t]:N(e[t],["point","line"])});return e}function rc(e,t={},n){return"transparent"===e.point?{opacity:0}:e.point?l(e.point)?e.point:{}:void 0!==e.point?null:t.point||n.shape?l(t.point)?t.point:{}:void 0}function ac(e,t={}){return e.line?!0===e.line?{}:e.line:void 0!==e.line?null:t.line?!0===t.line?{}:t.line:void 0}class sc{constructor(){Bn(this,"name","path-overlay")}hasMatchingType(e,t){if(Ta(e)){const{mark:n,encoding:i}=e,o=$o(n)?n:{type:n};switch(o.type){case"line":case"rule":case"trail":return!!rc(o,t[o.type],i);case"area":return!!rc(o,t[o.type],i)||!!ac(o,t[o.type])}}return!1}run(e,t,n){const{config:i}=t,{selection:o,projection:r,mark:a,encoding:s,...c}=e,u=Ia(s,i),l=$o(a)?a:{type:a},f=rc(l,i[l.type],u),d="area"===l.type&&ac(l,i[l.type]),p=[{...o?{selection:o}:{},mark:ic({..."area"===l.type&&void 0===l.opacity&&void 0===l.fillOpacity?{opacity:.7}:{},...l}),encoding:N(u,["shape"])}],m=nc(l,u);let h=u;if(m){const{fieldChannel:e,offset:t}=m;h={...u,[e]:{...u[e],...t?{stack:t}:{}}}}return d&&p.push({...r?{projection:r}:{},mark:{type:"line",...O(l,["clip","interpolate","tension","tooltip"]),...d},encoding:h}),f&&p.push({...r?{projection:r}:{},mark:{type:"point",opacity:1,filled:!0,...O(l,["clip","tooltip"]),...f},encoding:h}),n({...c,layer:p},{...t,config:oc(i)})}}class cc{constructor(){Bn(this,"name","RangeStep")}hasMatchingType(e){if(Ta(e)&&e.encoding)for(const n of Zt){const i=e.encoding[n];var t;if(i&&Hr(i))if(null==i||null===(t=i.scale)||void 0===t?void 0:t.rangeStep)return!0}return!1}run(e){const t={};let n={...e.encoding};for(const e of Zt){const o=Tt(e),r=n[e];var i;if(r&&Hr(r))if(null==r||null===(i=r.scale)||void 0===i?void 0:i.rangeStep){const{scale:i,...a}=r,{rangeStep:s,...c}=i;t[o]={step:i.rangeStep},si('Scale\'s "rangeStep" is deprecated and will be removed in Vega-Lite 5.0. Please use "width"/"height": {"step": ...} instead. See https://vega.github.io/vega-lite/docs/size.html.'),n={...n,[e]:{...a,...Y(c)?{}:{scale:c}}}}}return{...t,...e,encoding:n}}}function uc(e,t){return t?Br(e)?hc(e,t):dc(e,t):e}function lc(e,t){return t?hc(e,t):e}function fc(e,t,n){const i=t[e];return function(e){return e&&!x(e)&&"repeat"in e}(i)?i.repeat in n?{...t,[e]:n[i.repeat]}:void si(function(e){return'Unknown repeated value "'.concat(e,'".')}(i.repeat)):t}function dc(e,t){if(void 0!==(e=fc("field",e,t))){if(null===e)return null;if(Nr(e)&&Er(e.sort)){const n=fc("field",e.sort,t);e={...e,...n?{sort:n}:{}}}return e}}function pc(e,t){if(qr(e))return dc(e,t);{const n=fc("datum",e,t);return n===e||n.type||(n.type="nominal"),n}}function mc(e,t){if(!Hr(e)){if(Lr(e)){const n=pc(e.condition,t);if(n)return{...e,condition:n};{const{condition:t,...n}=e;return n}}return e}{const n=pc(e,t);if(n)return n;if(Mr(e))return{condition:e.condition}}}function hc(e,t){const n={};for(const i in e)if(v(e,i)){const o=e[i];if(u(o))n[i]=o.map((e=>mc(e,t))).filter((e=>e));else{const e=mc(o,t);void 0!==e&&(n[i]=e)}}return n}class gc{constructor(){Bn(this,"name","RuleForRangedLine")}hasMatchingType(e){if(Ta(e)){const{encoding:t,mark:n}=e;if("line"===n)for(const e of Ot){const n=t[Pt(e)];if(t[e]&&(qr(n)&&!kn(n.bin)||Wr(n)))return!0}}return!1}run(e,t,n){const{encoding:i}=e;var o,r;return si((o=!!i.x2,r=!!i.y2,"Line mark is for continuous lines and thus cannot be used with ".concat(o&&r?"x2 and y2":o?"x2":"y2",". We will use the rule mark (line segments) instead."))),n({...e,mark:"rule"},t)}}function vc({parentEncoding:e,encoding:t={},layer:n}){let i={};if(e){const o=new Set([...J(e),...J(t)]);for(const r of o){const o=t[r],a=e[r];if(Hr(o)){const e={...a,...o};i[r]=e}else Lr(o)?i[r]={...o,condition:{...a,...o.condition}}:o||null===o?i[r]=o:(n||Vr(a)||Fi(a)||Hr(a)||u(a))&&(i[r]=a)}}else i=t;return!i||Y(i)?void 0:i}function yc(e){const{parentProjection:t,projection:n}=e;return t&&n&&si(function(e){const{parentProjection:t,projection:n}=e;return"Layer's shared projection ".concat(P(t)," is overridden by a child projection ").concat(P(n),".")}({parentProjection:t,projection:n})),null!=n?n:t}function bc(e,t){void 0===t&&(t=Gs(e.config));const n=function(e,t={}){return xc.map(e,{config:t})}(e,t),{width:i,height:o}=e,r=function(e,t,n){let{width:i,height:o}=t;const r=Ta(e)||$s(e),a={};r?"container"==i&&"container"==o?(a.type="fit",a.contains="padding"):"container"==i?(a.type="fit-x",a.contains="padding"):"container"==o&&(a.type="fit-y",a.contains="padding"):("container"==i&&(si(Nn("width")),i=void 0),"container"==o&&(si(Nn("height")),o=void 0));const s={type:"pad",...a,...n?wc(n.autosize):{},...wc(e.autosize)};"fit"!==s.type||r||(si(On),s.type="pad");"container"==i&&"fit"!=s.type&&"fit-x"!=s.type&&si(Pn("width"));"container"==o&&"fit"!=s.type&&"fit-y"!=s.type&&si(Pn("height"));if(_(s,{type:"pad"}))return;return s}(n,{width:i,height:o,autosize:e.autosize},t);return{...n,...r?{autosize:r}:{}}}const xc=new class extends class{map(e,t){return zr(e)?this.mapFacet(e,t):function(e){return"repeat"in e}(e)?this.mapRepeat(e,t):Bs(e)?this.mapHConcat(e,t):Ss(e)?this.mapVConcat(e,t):Es(e)?this.mapConcat(e,t):this.mapLayerOrUnit(e,t)}mapLayerOrUnit(e,t){if($s(e))return this.mapLayer(e,t);if(Ta(e))return this.mapUnit(e,t);throw new Error(zn(e))}mapLayer(e,t){return{...e,layer:e.layer.map((e=>this.mapLayerOrUnit(e,t)))}}mapHConcat(e,t){return{...e,hconcat:e.hconcat.map((e=>this.map(e,t)))}}mapVConcat(e,t){return{...e,vconcat:e.vconcat.map((e=>this.map(e,t)))}}mapConcat(e,t){const{concat:n,...i}=e;return{...i,concat:n.map((e=>this.map(e,t)))}}mapFacet(e,t){return{...e,spec:this.map(e.spec,t)}}mapRepeat(e,t){return{...e,spec:this.map(e.spec,t)}}}{constructor(...e){super(...e),Bn(this,"nonFacetUnitNormalizers",[es,rs,fs,new sc,new gc,new cc])}map(e,t){if(Ta(e)){const n=qa(e.encoding,Ne),i=qa(e.encoding,Pe),o=qa(e.encoding,je);if(n||i||o)return this.mapFacetedUnit(e,t)}return super.map(e,t)}mapUnit(e,t){const{parentEncoding:n,parentProjection:i}=t,o=lc(e.encoding,t.repeater),r={...e,...o?{encoding:o}:{}};if(n||i)return this.mapUnitWithParentEncodingOrProjection(r,t);const a=this.mapLayerOrUnit.bind(this);for(const e of this.nonFacetUnitNormalizers)if(e.hasMatchingType(r,t.config))return e.run(r,t,a);return r}mapRepeat(e,t){return function(e){return!u(e.repeat)&&e.repeat.layer}(e)?this.mapLayerRepeat(e,t):this.mapNonLayerRepeat(e,t)}mapLayerRepeat(e,t){const{repeat:n,spec:i,...o}=e,{row:r,column:a,layer:s}=n,{repeater:c={},repeaterPrefix:u=""}=t;return r||a?this.mapRepeat({...e,repeat:{...r?{row:r}:{},...a?{column:a}:{}},spec:{repeat:{layer:s},spec:i}},t):{...o,layer:s.map((e=>{const n={...c,layer:e},o=(i.name||"")+u+"child__layer_".concat(K(e)),r=this.mapLayerOrUnit(i,{...t,repeater:n,repeaterPrefix:o});return r.name=o,r}))}}mapNonLayerRepeat(e,t){var n;const{repeat:i,spec:o,data:r,...a}=e;!u(i)&&e.columns&&(e=N(e,["columns"]),si(Wn("repeat")));const s=[],{repeater:c={},repeaterPrefix:l=""}=t,f=!u(i)&&i.row||[c?c.row:null],d=!u(i)&&i.column||[c?c.column:null],p=u(i)&&i||[c?c.repeat:null];for(const e of p)for(const n of f)for(const r of d){const a={repeat:e,row:n,column:r,layer:c.layer},f=(o.name||"")+l+"child__"+(u(i)?"".concat(K(e)):(i.row?"row_".concat(K(n)):"")+(i.column?"column_".concat(K(r)):"")),d=this.map(o,{...t,repeater:a,repeaterPrefix:f});d.name=f,s.push(N(d,["data"]))}const m=u(i)?e.columns:i.column?i.column.length:1;return{data:null!==(n=o.data)&&void 0!==n?n:r,align:"all",...a,columns:m,concat:s}}mapFacet(e,t){const{facet:n}=e;return Br(n)&&e.columns&&(e=N(e,["columns"]),si(Wn("facet"))),super.mapFacet(e,t)}mapUnitWithParentEncodingOrProjection(e,t){const{encoding:n,projection:i}=e,{parentEncoding:o,parentProjection:r,config:a}=t,s=yc({parentProjection:r,projection:i}),c=vc({parentEncoding:o,encoding:lc(n,t.repeater)});return this.mapUnit({...e,...s?{projection:s}:{},...c?{encoding:c}:{}},{config:a})}mapFacetedUnit(e,t){const{row:n,column:i,facet:o,...r}=e.encoding,{mark:a,width:s,projection:c,height:u,view:l,selection:f,encoding:d,...p}=e,{facetMapping:m,layout:h}=this.getFacetMappingAndLayout({row:n,column:i,facet:o},t),g=lc(r,t.repeater);return this.mapFacet({...p,...h,facet:m,spec:{...s?{width:s}:{},...u?{height:u}:{},...l?{view:l}:{},...c?{projection:c}:{},mark:a,encoding:g,...f?{selection:f}:{}}},t)}getFacetMappingAndLayout(e,t){const{row:n,column:i,facet:o}=e;if(n||i){o&&si((a=[...n?[Ne]:[],...i?[Pe]:[]],"Facet encoding dropped as ".concat(a.join(" and ")," ").concat(a.length>1?"are":"is"," also specified.")));const t={},s={};for(const n of[Ne,Pe]){const i=e[n];if(i){const{align:e,center:o,spacing:a,columns:c,...u}=i;t[n]=u;for(const e of["align","center","spacing"]){var r;if(void 0!==i[e])s[e]=null!==(r=s[e])&&void 0!==r?r:{},s[e][n]=i[e]}}}return{facetMapping:t,layout:s}}{const{align:e,center:n,spacing:i,columns:r,...a}=o;return{facetMapping:uc(a,t.repeater),layout:{...e?{align:e}:{},...n?{center:n}:{},...i?{spacing:i}:{},...r?{columns:r}:{}}}}var a}mapLayer(e,{parentEncoding:t,parentProjection:n,...i}){const{encoding:o,projection:r,...a}=e,s={...i,parentEncoding:vc({parentEncoding:t,encoding:o,layer:!0}),parentProjection:yc({parentProjection:n,projection:r})};return super.mapLayer(a,s)}};function wc(e){return x(e)?{type:e}:null!=e?e:{}}class Ac{constructor(e={},t={}){this.explicit=e,this.implicit=t}clone(){return new Ac(z(this.explicit),z(this.implicit))}combine(){return{...this.explicit,...this.implicit}}get(e){return ue(this.explicit[e],this.implicit[e])}getWithExplicit(e){return void 0!==this.explicit[e]?{explicit:!0,value:this.explicit[e]}:void 0!==this.implicit[e]?{explicit:!1,value:this.implicit[e]}:{explicit:!1,value:void 0}}setWithExplicit(e,t){void 0!==t.value&&this.set(e,t.value,t.explicit)}set(e,t,n){return delete this[n?"implicit":"explicit"][e],this[n?"explicit":"implicit"][e]=t,this}copyKeyFromSplit(e,t){void 0!==t.explicit[e]?this.set(e,t.explicit[e],!0):void 0!==t.implicit[e]&&this.set(e,t.implicit[e],!1)}copyKeyFromObject(e,t){void 0!==t[e]&&this.set(e,t[e],!0)}copyAll(e){for(const t of J(e.combine())){const n=e.getWithExplicit(t);this.setWithExplicit(t,n)}}}function Dc(e){return{explicit:!0,value:e}}function Fc(e){return{explicit:!1,value:e}}function kc(e){return(t,n,i,o)=>{const r=e(t.value,n.value);return r>0?t:r<0?n:Cc(t,n,i,o)}}function Cc(e,t,n,i){return e.explicit&&t.explicit&&si(function(e,t,n,i){return"Conflicting ".concat(t.toString(),' property "').concat(e.toString(),'" (').concat(P(n)," and ").concat(P(i),"). Using ").concat(P(n),".")}(n,i,e.value,t.value)),e}function Ec(e,t,n,i,o=Cc){return void 0===e||void 0===e.value?t:e.explicit&&!t.explicit?e:t.explicit&&!e.explicit?t:_(e.value,t.value)?e:o(e,t,n,i)}class Sc extends Ac{constructor(e={},t={},n=!1){super(e,t),this.explicit=e,this.implicit=t,this.parseNothing=n}clone(){const e=super.clone();return e.parseNothing=this.parseNothing,e}}function Bc(e){return"url"in e}function _c(e){return"values"in e}function zc(e){return"name"in e&&!Bc(e)&&!_c(e)&&!Oc(e)}function Oc(e){return e&&(Nc(e)||Pc(e)||jc(e))}function Nc(e){return"sequence"in e}function Pc(e){return"sphere"in e}function jc(e){return"graticule"in e}let Mc;function Tc(e){return"filter"in e}function Lc(e){return"lookup"in e}function qc(e){return"pivot"in e}function Rc(e){return"density"in e}function Wc(e){return"quantile"in e}function Uc(e){return"regression"in e}function Ic(e){return"loess"in e}function Hc(e){return"sample"in e}function Gc(e){return"window"in e}function Vc(e){return"joinaggregate"in e}function Yc(e){return"flatten"in e}function Jc(e){return"calculate"in e}function Xc(e){return"bin"in e}function Qc(e){return"impute"in e}function $c(e){return"timeUnit"in e}function Kc(e){return"aggregate"in e}function Zc(e){return"stack"in e}function eu(e){return"fold"in e}!function(e){e[e.Raw=0]="Raw",e[e.Main=1]="Main",e[e.Row=2]="Row",e[e.Column=3]="Column",e[e.Lookup=4]="Lookup"}(Mc||(Mc={}));const tu="[",nu="]",iu=/[[\]{}]/,ou={"*":1,arc:1,area:1,group:1,image:1,line:1,path:1,rect:1,rule:1,shape:1,symbol:1,text:1,trail:1};let ru,au;function su(e,t,n){return ru=t||"view",au=n||ou,uu(e.trim()).map(lu)}function cu(e,t,n,i,o){const r=e.length;let a,s=0;for(;t=0?--s:i&&i.indexOf(a)>=0&&++s}return t}function uu(e){const t=[],n=e.length;let i=0,o=0;for(;o"!==(e=e.slice(i+1).trim())[0])throw"Expected '>' after between selector: "+e;n=n.map(lu);const o=lu(e.slice(1).trim());if(o.between)return{between:n,stream:o};o.between=n;return o}(e):function(e){const t={source:ru},n=[];let i,o,r=[0,0],a=0,s=0,c=e.length,u=0;if("}"===e[c-1]){if(u=e.lastIndexOf("{"),!(u>=0))throw"Unmatched right brace: "+e;try{r=function(e){const t=e.split(",");if(!e.length||t.length>2)throw e;return t.map((t=>{const n=+t;if(n!=n)throw e;return n}))}(e.substring(u+1,c-1))}catch(t){throw"Invalid throttle specification: "+e}c=(e=e.slice(0,u).trim()).length,u=0}if(!c)throw e;"@"===e[0]&&(a=++u);i=cu(e,u,":"),i1?(t.type=n[1],a?t.markname=n[0].slice(1):!function(e){return au[e]}(n[0])?t.source=n[0]:t.marktype=n[0]):t.type=n[0];"!"===t.type.slice(-1)&&(t.consume=!0,t.type=t.type.slice(0,-1));null!=o&&(t.filter=o);r[0]&&(t.throttle=r[0]);r[1]&&(t.debounce=r[1]);return t}(e)}function fu(e,t,n,i){const o=Mr(t)&&t.condition,r=i(t);if(o){return{[n]:[...h(o).map((t=>{const n=i(t);return{test:function(e){return e.selection}(t)?td(e,t.selection):id(e,t.test),...n}})),...void 0!==r?[r]:[]]}}return void 0!==r?{[n]:r}:{}}function du(e,t="text"){const n=e.encoding[t];return fu(e,n,t,(t=>pu(t,e.config)))}function pu(e,t,n="datum"){if(e){if(Vr(e))return Fa(e.value);if(Hr(e)){const{format:i,formatType:o}=sa(e);return mr({fieldOrDatumDef:e,format:i,formatType:o,expr:n,config:t})}}}function mu(e,t={}){const{encoding:n,markDef:i,config:o,stack:r}=e,a=n.tooltip;if(u(a))return{tooltip:gu({tooltip:a},r,o,t)};{const s=t.reactiveGeom?"datum.datum":"datum";return fu(e,a,"tooltip",(e=>{const a=pu(e,o,s);if(a)return a;if(null===e)return;let c=Ba("tooltip",i,o);return!0===c&&(c={content:"encoding"}),x(c)?{value:c}:l(c)?Fi(c)?c:"encoding"===c.content?gu(n,r,o,t):{signal:s}:void 0}))}}function hu(e,t,n,{reactiveGeom:i}={}){const o={},r=i?"datum.datum":"datum",a=[];function s(i,s){var c;const u=Pt(s),l=Gr(i)?i:{...i,type:e[u].type},f=h(l.title||aa(l,n)).join(", ");let d;if(en(s)){const i="x"===s?"x2":"y2",a=ca(e[i]);if(kn(l.bin)&&a){const e=Kr(l,{expr:r}),t=Kr(a,{expr:r}),{format:s,formatType:c}=sa(l);d=Ar(e,t,s,c,n),o[i]=!0}else if(t&&t.fieldChannel===s&&"normalize"===t.offset){const{format:e,formatType:t}=sa(l);d=mr({fieldOrDatumDef:l,format:e,formatType:t,expr:r,config:n,normalizeStack:!0}).signal}}d=null!==(c=d)&&void 0!==c?c:pu(l,n,r).signal,a.push({channel:s,key:f,value:d})}Ha(e,((e,t)=>{qr(e)?s(e,t):Tr(e)&&s(e.condition,t)}));const c={};for(const{channel:e,key:t,value:n}of a)o[e]||c[t]||(c[t]=n);return c}function gu(e,t,n,{reactiveGeom:i}={}){const o=hu(e,t,n,{reactiveGeom:i}),r=Q(o).map((([e,t])=>'"'.concat(e,'": ').concat(t)));return r.length>0?{signal:"{".concat(r.join(", "),"}")}:void 0}function vu(e){const{markDef:t,config:n}=e,i=Ba("aria",t,n);return!1===i?{}:{...i?{aria:i}:{},...yu(e),...bu(e)}}function yu(e){const{mark:t,markDef:n,config:i}=e;if(!1===i.aria)return{};const o=Ba("ariaRoleDescription",n,i);return null!=o?{ariaRoleDescription:{value:o}}:t in Si?{}:{ariaRoleDescription:{value:t}}}function bu(e){const{encoding:t,markDef:n,config:i,stack:o}=e,r=t.description;if(r)return fu(e,r,"description",(t=>pu(t,e.config)));const a=Ba("description",n,i);if(null!=a)return{description:Fa(a)};if(!1===i.aria)return{};const s=hu(t,o,i);return Y(s)?void 0:{description:{signal:Q(s).map((([e,t],n)=>'"'.concat(n>0?"; ":"").concat(e,': " + (').concat(t,")"))).join(" + ")}}}function xu(e,t,n={}){const{markDef:i,encoding:o,config:r}=t,{vgChannel:a}=n;let{defaultRef:s,defaultValue:c}=n;var u;void 0===s&&(c=null!==(u=c)&&void 0!==u?u:Ba(e,i,r,{vgChannel:a,ignoreVgConfig:!0}),void 0!==c&&(s=Fa(c)));const l=o[e];return fu(t,l,null!=a?a:e,(n=>lr({channel:e,channelDef:n,markDef:i,config:r,scaleName:t.scaleName(e),scale:t.getScaleComponent(e),stack:null,defaultRef:s})))}function wu(e,t={filled:void 0}){var n,i,o,r;const{markDef:a,encoding:s,config:c}=e,{type:u}=a,l=null!==(n=t.filled)&&void 0!==n?n:Ba("filled",a,c),f=T(["bar","point","circle","square","geoshape"],u)?"transparent":void 0,d=null!==(i=null!==(o=Ba(!0===l?"color":void 0,a,c,{vgChannel:"fill"}))&&void 0!==o?o:c.mark[!0===l&&"color"])&&void 0!==i?i:f,p=null!==(r=Ba(!1===l?"color":void 0,a,c,{vgChannel:"stroke"}))&&void 0!==r?r:c.mark[!1===l&&"color"],m=l?"fill":"stroke",h={...d?{fill:Fa(d)}:{},...p?{stroke:Fa(p)}:{}};return a.color&&(l?a.fill:a.stroke)&&si(Gn("property",{fill:"fill"in a,stroke:"stroke"in a})),{...h,...xu("color",e,{vgChannel:m,defaultValue:l?d:p}),...xu("fill",e,{defaultValue:s.fill?d:void 0}),...xu("stroke",e,{defaultValue:s.stroke?p:void 0})}}function Au(e){const{encoding:t,mark:n}=e,i=t.order;return!Jo(n)&&Vr(i)?fu(e,i,"zindex",(e=>Fa(e.value))):{}}function Du(e,t){const n=t[function(e){switch(e){case Me:return"xOffset";case Te:return"yOffset";case Le:return"x2Offset";case qe:return"y2Offset";case Ue:return"thetaOffset";case Re:return"radiusOffset";case Ie:return"theta2Offset";case We:return"radius2Offset"}}(e)];if(n)return n}function Fu(e,t,{defaultPos:n,vgChannel:i,isMidPoint:o}){const{encoding:r,markDef:a,config:s,stack:c}=t,u=r[e],l=r[Mt(e)],f=t.scaleName(e),d=t.getScaleComponent(e),p=Du(e,a),m=ku({model:t,defaultPos:n,channel:e,scaleName:f,scale:d}),h=!u&&en(e)&&(r.latitude||r.longitude)?{field:t.getName(e)}:function(e){const{channel:t,channelDef:n,isMidPoint:i,scaleName:o,stack:r,offset:a,markDef:s,config:c}=e;if(Hr(n)&&r&&t===r.fieldChannel){if(qr(n)){const e=Pr({channel:t,fieldDef:n,isMidPoint:i,markDef:s,stack:r,config:c});if(void 0!==e)return ur({scaleName:o,fieldOrDatumDef:n,startSuffix:"start",band:e,offset:a})}return cr(n,o,{suffix:"end"},{offset:a})}return or(e)}({channel:e,channelDef:u,channel2Def:l,markDef:a,config:s,isMidPoint:o,scaleName:f,scale:d,stack:c,offset:p,defaultRef:m});return h?{[i||e]:h}:void 0}function ku({model:e,defaultPos:t,channel:n,scaleName:i,scale:o}){const{markDef:r,config:a}=e;return()=>{const s=Pt(n),c=jt(n),u=Ba(n,r,a,{vgChannel:c});if(void 0!==u)return fr(n,u);switch(t){case"zeroOrMin":case"zeroOrMax":if(i){const e=o.get("type");if(T([Ji,Ki,Zi],e));else if(o.domainDefinitelyIncludesZero())return{scale:i,value:0}}if("zeroOrMin"===t)return"y"===s?{field:{group:"height"}}:{value:0};switch(s){case"radius":return{signal:"min(".concat(e.width.signal,",").concat(e.height.signal,")/2")};case"theta":return{signal:"2*PI"};case"x":return{field:{group:"width"}};case"y":return{value:0}}break;case"mid":return{...e[Tt(n)],mult:.5}}}}const Cu={left:"x",center:"xc",right:"x2"},Eu={top:"y",middle:"yc",bottom:"y2"};function Su(e,t,n,i="middle"){if("radius"===e||"theta"===e)return jt(e);const o="x"===e?"align":"baseline",r=Ba(o,t,n);let a;return Fi(r)?(si(function(e){return"The ".concat(e," for range marks cannot be an expression")}(o)),a=void 0):a=r,"x"===e?Cu[a||("top"===i?"left":"center")]:Eu[a||i]}function Bu(e,t,{defaultPos:n,defaultPos2:i,range:o}){return o?_u(e,t,{defaultPos:n,defaultPos2:i}):Fu(e,t,{defaultPos:n})}function _u(e,t,{defaultPos:n,defaultPos2:i}){const{markDef:o,config:r}=t,a=Mt(e),s=Tt(e),c=function(e,t,n){const{encoding:i,mark:o,markDef:r,stack:a,config:s}=e,c=Pt(n),u=Tt(n),l=jt(n),f=i[c],d=e.scaleName(c),p=e.getScaleComponent(c),m=Du(n in i||n in r?n:c,e.markDef);if(!f&&("x2"===n||"y2"===n)&&(i.latitude||i.longitude))return{[l]:{field:e.getName(n)}};const h=function({channel:e,channelDef:t,channel2Def:n,markDef:i,config:o,scaleName:r,scale:a,stack:s,offset:c,defaultRef:u}){if(Hr(t)&&s&&e.charAt(0)===s.fieldChannel.charAt(0))return cr(t,r,{suffix:"start"},{offset:c});return or({channel:e,channelDef:n,scaleName:r,scale:a,stack:s,markDef:i,config:o,offset:c,defaultRef:u})}({channel:n,channelDef:f,channel2Def:i[n],markDef:r,config:s,scaleName:d,scale:p,stack:a,offset:m,defaultRef:void 0});if(void 0!==h)return{[l]:h};return zu(n,r)||zu(n,{[n]:za(n,r,s.style),[u]:za(u,r,s.style)})||zu(n,s[o])||zu(n,s.mark)||{[l]:ku({model:e,defaultPos:t,channel:n,scaleName:d,scale:p})()}}(t,i,a);return{...Fu(e,t,{defaultPos:n,vgChannel:c[s]?Su(e,o,r):jt(e)}),...c}}function zu(e,t){const n=Tt(e),i=jt(e);return void 0!==t[i]?{[i]:fr(e,t[i])}:void 0!==t[e]?{[i]:fr(e,t[e])}:t[n]?{[n]:fr(e,t[n])}:void 0}function Ou(e,t,n){var i,o;const{config:r,encoding:a,markDef:s,stack:c}=e,l=Mt(t),f=Tt(t),d=a[t],p=a[l],m=e.getScaleComponent(t),h=m?m.get("type"):void 0,g=e.scaleName(t),v=s.orient,y=null!==(i=null!==(o=a[f])&&void 0!==o?o:a.size)&&void 0!==i?i:Ba("size",s,r,{vgChannel:f}),b="bar"===n&&("x"===t?"vertical"===v:"horizontal"===v);if(qr(d)&&(Fn(d.bin)||kn(d.bin)||d.timeUnit&&!p)&&!y&&!go(h)){var x,w;const n=Pr({channel:t,fieldDef:d,stack:c,markDef:s,config:r}),i=null===(x=e.component.axes[t])||void 0===x?void 0:x[0];return function({fieldDef:e,fieldDef2:t,channel:n,band:i,scaleName:o,markDef:r,spacing:a=0,axisTranslate:s,reverse:c,config:u}){const l=Mt(n),f=jt(n),d=jt(l),p=Du(n,r);if(Fn(e.bin)||e.timeUnit)return{[d]:ju({channel:n,fieldDef:e,scaleName:o,markDef:r,band:(1-i)/2,offset:Pu(l,a,c,s,p),config:u}),[f]:ju({channel:n,fieldDef:e,scaleName:o,markDef:r,band:1-(1-i)/2,offset:Pu(n,a,c,s,p),config:u})};if(kn(e.bin)){const i=cr(e,o,{},{offset:Pu(l,a,c,s,p)});if(qr(t))return{[d]:i,[f]:cr(t,o,{},{offset:Pu(n,a,c,s,p)})};if(Cn(e.bin)&&e.bin.step)return{[d]:i,[f]:{signal:'scale("'.concat(o,'", ').concat(Kr(e,{expr:"datum"})," + ").concat(e.bin.step,")"),offset:Pu(n,a,c,s,p)}}}return void si(oi(l))}({fieldDef:d,fieldDef2:p,channel:t,markDef:s,scaleName:g,band:n,axisTranslate:null!==(w=null==i?void 0:i.get("translate"))&&void 0!==w?w:.5,spacing:en(t)?Ba("binSpacing",s,r):void 0,reverse:m.get("reverse"),config:r})}return(Hr(d)&&go(h)||b)&&!p?function(e,t,n,i){var o;const{markDef:r,encoding:a,config:s,stack:c}=i,l=r.orient,f=i.scaleName(n),d=i.getScaleComponent(n),p=Tt(n),m=Mt(n),h="horizontal"===l&&"y"===n||"vertical"===l&&"x"===n,g=Ba(h?"size":p,r,s,{vgChannel:p});let v;(a.size||void 0!==g)&&(h?v=xu("size",i,{vgChannel:p,defaultValue:g}):si(function(e){return'Cannot apply size to non-oriented mark "'.concat(e,'".')}(r.type)));const y=null!==(o=Hr(t)?Pr({channel:n,fieldDef:t,markDef:r,stack:c,config:s}):void 0)&&void 0!==o?o:1;v=v||{[p]:Nu(e,p,f,d,s,y)};const b="band"!==(null==d?void 0:d.get("type"))||!("band"in v[p]),x=Su(n,r,s,b?"middle":"top"),w=Du(n,r),A=or({channel:n,channelDef:t,markDef:r,config:s,scaleName:f,scale:d,stack:c,offset:w,defaultRef:ku({model:i,defaultPos:"mid",channel:n,scaleName:f,scale:d}),band:b?.5:(1-y)/2});if(p)return{[x]:A,...v};{const e=jt(m),t=v[p],n=w?{...t,offset:w}:t;return{[x]:A,[e]:u(A)?[A[0],{...A[1],offset:n}]:{...A,offset:n}}}}(n,d,t,e):_u(t,e,{defaultPos:"zeroOrMax",defaultPos2:"zeroOrMin"})}function Nu(e,t,n,i,o,r){if(i){const t=i.get("type");if("point"===t||"band"===t){if(void 0!==o[e].discreteBandSize)return{value:o[e].discreteBandSize};if(t===io){const e=i.get("range");return ki(e)&&b(e.step)?{value:e.step-2}:{value:Ls-2}}return{scale:n,band:r}}return{value:o[e].continuousBandSize}}const a=Ms(o.view,t),s=ue(o[e].discreteBandSize,a-2);return void 0!==s?{value:s}:void 0}function Pu(e,t,n,i,o){if(mt(e))return 0;const r="x"===e||"y2"===e?-t/2:t/2;if(Fi(n)||Fi(o)||Fi(i)){const e=Ca(n),t=Ca(o),a=Ca(i);return{signal:(a?"".concat(a," + "):"")+(e?"(".concat(e," ? -1 : 1) * "):"")+(t?"(".concat(t," + ").concat(r,")"):r)}}return o=o||0,i+(n?-o-r:+o+r)}function ju({channel:e,fieldDef:t,scaleName:n,markDef:i,band:o,offset:r,config:a}){return rr({fieldDef:t,channel:e,markDef:i,ref:ur({scaleName:n,fieldOrDatumDef:t,band:o,offset:r}),config:a})}const Mu=new Set(["aria"]);function Tu(e,t){const{fill:n,stroke:i}="include"===t.color?wu(e):{};return{...qu(e.markDef,t),...Lu(e,"fill",n),...Lu(e,"stroke",i),...xu("opacity",e),...xu("fillOpacity",e),...xu("strokeOpacity",e),...xu("strokeWidth",e),...xu("strokeDash",e),...Au(e),...mu(e),...du(e,"href"),...vu(e)}}function Lu(e,t,n){const{config:i,mark:o,markDef:r}=e;if("hide"===Ba("invalid",r,i)&&n&&!Jo(o)){const i=function(e,{invalid:t=!1,channels:n}){const i=n.reduce(((t,n)=>{const i=e.getScaleComponent(n);if(i){const o=i.get("type"),r=e.vgField(n,{expr:"datum"});r&&vo(o)&&(t[r]=!0)}return t}),{}),o=J(i);if(o.length>0){const e=t?"||":"&&";return o.map((e=>sr(e,t))).join(" ".concat(e," "))}return}(e,{invalid:!0,channels:gn});if(i)return{[t]:[{test:i,value:null},...h(n)]}}return n?{[t]:n}:{}}function qu(e,t){return Ei.reduce(((n,i)=>(Mu.has(i)||void 0===e[i]||"ignore"===t[i]||(n[i]=Fa(e[i])),n)),{})}function Ru(e){const{config:t,markDef:n}=e;if(Ba("invalid",n,t)){const t=function(e,{invalid:t=!1,channels:n}){const i=n.reduce(((t,n)=>{const i=e.getScaleComponent(n);if(i){const o=i.get("type"),r=e.vgField(n,{expr:"datum"});r&&vo(o)&&(t[r]=!0)}return t}),{}),o=J(i);if(o.length>0){const e=t?"||":"&&";return o.map((e=>sr(e,t))).join(" ".concat(e," "))}return}(e,{channels:Zt});if(t)return{defined:{signal:t}}}return{}}function Wu(e,t){if(void 0!==t)return{[e]:Fa(t)}}const Uu="voronoi",Iu={has:e=>"interval"!==e.type&&e.nearest,parse:(e,t)=>{if(t.events)for(const n of t.events)n.markname=e.getName(Uu)},marks:(e,t,n)=>{const{x:i,y:o}=t.project.hasChannel,r=e.mark;if(Jo(r))return si('The "nearest" transform is not supported for '.concat(r," marks.")),n;const a={name:e.getName(Uu),type:"path",interactive:!0,from:{data:e.getName("marks")},encode:{update:{fill:{value:"transparent"},strokeWidth:{value:.35},stroke:{value:"transparent"},isVoronoi:{value:!0},...mu(e,{reactiveGeom:!0})}},transform:[{type:"voronoi",x:{expr:i||!o?"datum.datum.x || 0":"0"},y:{expr:o||!i?"datum.datum.y || 0":"0"},size:[e.getSizeSignalRef("width"),e.getSizeSignalRef("height")]}]};let s=0,c=!1;return n.forEach(((t,n)=>{var i;const o=null!==(i=t.name)&&void 0!==i?i:"";o===e.component.mark[0].name?s=n:o.indexOf(Uu)>=0&&(c=!0)})),c||n.splice(s+1,0,a),n}};class Hu{constructor(e,t){this.debugName=t,Bn(this,"_children",[]),Bn(this,"_parent",null),Bn(this,"_hash",void 0),e&&(this.parent=e)}clone(){throw new Error("Cannot clone node")}get parent(){return this._parent}set parent(e){this._parent=e,e&&e.addChild(this)}get children(){return this._children}numChildren(){return this._children.length}addChild(e,t){this._children.indexOf(e)>-1?si("Attempt to add the same child twice."):void 0!==t?this._children.splice(t,0,e):this._children.push(e)}removeChild(e){const t=this._children.indexOf(e);return this._children.splice(t,1),t}remove(){let e=this._parent.removeChild(this);for(const t of this._children)t._parent=this._parent,this._parent.addChild(t,e++)}insertAsParentOf(e){const t=e.parent;t.removeChild(this),this.parent=t,e.parent=this}swapWithParent(){const e=this._parent,t=e.parent;for(const t of this._children)t.parent=e;this._children=[],e.removeChild(this),e.parent.removeChild(e),this.parent=t,e.parent=this}}class Gu extends Hu{clone(){const e=new this.constructor;return e.debugName="clone_"+this.debugName,e._source=this._source,e._name="clone_"+this._name,e.type=this.type,e.refCounts=this.refCounts,e.refCounts[e._name]=0,e}constructor(e,t,n,i){super(e,t),this.type=n,this.refCounts=i,Bn(this,"_source",void 0),Bn(this,"_name",void 0),this._source=this._name=t,this.refCounts&&!(this._name in this.refCounts)&&(this.refCounts[this._name]=0)}dependentFields(){return new Set}producedFields(){return new Set}hash(){return void 0===this._hash&&(this._hash="Output ".concat(fe())),this._hash}getSource(){return this.refCounts[this._name]++,this._source}isRequired(){return!!this.refCounts[this._name]}setSource(e){this._source=e}}class Vu extends Hu{clone(){return new Vu(null,z(this.formula))}constructor(e,t){super(e),this.formula=t}static makeFromEncoding(e,t){const n=t.reduceFieldDef(((e,n,i)=>{const{field:o,timeUnit:r}=n,a=Em(t)?t.encoding[Mt(i)]:void 0,s=Em(t)&&jr(i,n,a,t.stack,t.markDef,t.config);if(r){const t=Kr(n,{forAs:!0});e[j({as:t,field:o,timeUnit:r})]={as:t,field:o,timeUnit:r,...s?{band:!0}:{}}}return e}),{});return Y(n)?null:new Vu(e,n)}static makeFromTransform(e,t){const{timeUnit:n,...i}={...t},o={...i,timeUnit:Di(n)};return new Vu(e,{[j(o)]:o})}merge(e){this.formula={...this.formula};for(const t in e.formula)this.formula[t]&&!e.formula[t].band||(this.formula[t]=e.formula[t]);for(const t of e.children)e.removeChild(t),t.parent=this;e.remove()}removeFormulas(e){const t={};for(const[n,i]of Q(this.formula))e.has(i.as)||(t[n]=i);this.formula=t}producedFields(){return new Set(X(this.formula).map((e=>e.as)))}dependentFields(){return new Set(X(this.formula).map((e=>e.field)))}hash(){return"TimeUnit ".concat(j(this.formula))}assemble(){const e=[];for(const t of X(this.formula)){const{field:n,as:i,timeUnit:o}=t,{unit:r,utc:a,...s}=Di(o);e.push({field:re(n),type:"timeunit",...r?{units:bi(r)}:{},...a?{timezone:"utc"}:{},...s,as:[i,"".concat(i,"_end")]})}return e}}const Yu="_tuple_fields";class Ju{constructor(...e){Bn(this,"hasChannel",void 0),Bn(this,"hasField",void 0),Bn(this,"timeUnit",void 0),Bn(this,"items",void 0),this.items=e,this.hasChannel={},this.hasField={}}}const Xu={has:e=>"single"===e.type&&"global"===e.resolve&&e.bind&&"scales"!==e.bind&&!ks(e.bind),parse:(e,t,n,i)=>{i.on||delete t.events,i.clear||delete t.clear},topLevelSignals:(e,t,n)=>{const i=t.name,o=t.project,r=t.bind,a=t.init&&t.init[0],s=Iu.has(t)?"(item().isVoronoi ? datum.datum : datum)":"datum";return o.items.forEach(((e,o)=>{const c=K("".concat(i,"_").concat(e.field));var u,l;n.filter((e=>e.name===c)).length||n.unshift({name:c,...a?{init:pl(a[o])}:{value:null},on:t.events?[{events:t.events,update:"datum && item().mark.marktype !== 'group' ? ".concat(s,"[").concat(w(e.field),"] : null")}]:[],bind:null!==(u=null!==(l=r[e.field])&&void 0!==l?l:r[e.channel])&&void 0!==u?u:r})})),n},signals:(e,t,n)=>{const i=t.name,o=t.project,r=n.filter((e=>e.name===i+kl))[0],a=i+Yu,s=o.items.map((e=>K("".concat(i,"_").concat(e.field)))),c=s.map((e=>"".concat(e," !== null"))).join(" && ");return s.length&&(r.update="".concat(c," ? {fields: ").concat(a,", values: [").concat(s.join(", "),"]} : null")),delete r.value,delete r.on,n}},Qu="_toggle",$u={has:e=>"multi"===e.type&&!!e.toggle,signals:(e,t,n)=>n.concat({name:t.name+Qu,value:!1,on:[{events:t.events,update:t.toggle}]}),modifyExpr:(e,t)=>{const n=t.name+kl,i=t.name+Qu;return"".concat(i," ? null : ").concat(n,", ")+("global"===t.resolve?"".concat(i," ? null : true, "):"".concat(i," ? null : {unit: ").concat(_l(e),"}, "))+"".concat(i," ? ").concat(n," : null")}},Ku={has:e=>void 0!==e.clear&&!1!==e.clear,parse:(e,t,n)=>{n.clear&&(t.clear=x(n.clear)?su(n.clear,"scope"):n.clear)},topLevelSignals:(e,t,n)=>{if(Xu.has(t))for(const e of t.project.items){const i=n.findIndex((n=>n.name===K("".concat(t.name,"_").concat(e.field))));-1!==i&&n[i].on.push({events:t.clear,update:"null"})}return n},signals:(e,t,n)=>{function i(e,i){-1!==e&&n[e].on&&n[e].on.push({events:t.clear,update:i})}if("interval"===t.type)for(const e of t.project.items){const t=n.findIndex((t=>t.name===e.signals.visual));if(i(t,"[0, 0]"),-1===t){i(n.findIndex((t=>t.name===e.signals.data)),"null")}}else{let e=n.findIndex((e=>e.name===t.name+kl));i(e,"null"),$u.has(t)&&(e=n.findIndex((e=>e.name===t.name+Qu)),i(e,"false"))}return n}},Zu={has:e=>"interval"===e.type&&"global"===e.resolve&&e.bind&&"scales"===e.bind,parse:(e,t)=>{const n=t.scales=[];for(const i of t.project.items){const o=i.channel;if(!vn(o))continue;const r=e.getScaleComponent(o),a=r?r.get("type"):void 0;if(!r||!vo(a)){si("Scale bindings are currently only supported for scales with unbinned, continuous domains.");continue}const s={selection:t.name,field:i.field};r.set("selectionExtent",s,!0),n.push(i)}},topLevelSignals:(e,t,n)=>{const i=t.scales.filter((e=>0===n.filter((t=>t.name===e.signals.data)).length));if(!e.parent||tl(e)||0===i.length)return n;const o=n.filter((e=>e.name===t.name))[0];let r=o.update;if(r.indexOf(El)>=0)o.update="{".concat(i.map((e=>"".concat(w(e.field),": ").concat(e.signals.data))).join(", "),"}");else{for(const e of i){const t="".concat(w(e.field),": ").concat(e.signals.data);r.indexOf(t)<0&&(r="".concat(r.substring(0,r.length-1),", ").concat(t,"}"))}o.update=r}return n.concat(i.map((e=>({name:e.signals.data}))))},signals:(e,t,n)=>{if(e.parent&&!tl(e))for(const e of t.scales){const t=n.filter((t=>t.name===e.signals.data))[0];t.push="outer",delete t.value,delete t.update}return n}};function el(e,t){const n=w(e.scaleName(t));return"domain(".concat(n,")")}function tl(e){var t;return e.parent&&_m(e.parent)&&(null!==(t=!e.parent.parent)&&void 0!==t?t:tl(e.parent.parent))}const nl={has:e=>{const t="global"===e.resolve&&e.bind&&ks(e.bind),n=1===e.project.items.length&&e.project.items[0].field!==Ds;return t&&!n&&si("Legend bindings are only supported for selections over an individual field or encoding channel."),t&&n},parse:(e,t,n,i)=>{if(i.on||delete t.events,i.clear||delete t.clear,i.on||i.clear){const e='event.item && indexof(event.item.mark.role, "legend") < 0';for(const n of t.events){var o;n.filter=h(null!==(o=n.filter)&&void 0!==o?o:[]),n.filter.indexOf(e)<0&&n.filter.push(e)}}const r=Cs(t.bind)?t.bind.legend:"click",a=x(r)?su(r,"view"):h(r);t.bind={legend:{merge:a}}},topLevelSignals:(e,t,n)=>{const i=t.name,o=Cs(t.bind)&&t.bind.legend,r=e=>t=>{const n=z(t);return n.markname=e,n};for(const e of t.project.items){if(!e.hasLegend)continue;const a="".concat(K(e.field),"_legend"),s="".concat(i,"_").concat(a);if(0===n.filter((e=>e.name===s)).length){const e=o.merge.map(r("".concat(a,"_symbols"))).concat(o.merge.map(r("".concat(a,"_labels")))).concat(o.merge.map(r("".concat(a,"_entries"))));n.unshift({name:s,...t.init?{}:{value:null},on:[{events:e,update:"datum.value || item().items[0].items[0].datum.value",force:!0},{events:o.merge,update:"!event.item || !datum ? null : ".concat(s),force:!0}]})}}return n},signals:(e,t,n)=>{const i=t.name,o=t.project,r=n.find((e=>e.name===i+kl)),a=i+Yu,s=o.items.filter((e=>e.hasLegend)).map((e=>K("".concat(i,"_").concat(K(e.field),"_legend")))),c=s.map((e=>"".concat(e," !== null"))).join(" && "),u="".concat(c," ? {fields: ").concat(a,", values: [").concat(s.join(", "),"]} : null");t.events&&s.length>0?r.on.push({events:s.map((e=>({signal:e}))),update:u}):s.length>0&&(r.update=u,delete r.value,delete r.on);const l=n.find((e=>e.name===i+Qu)),f=Cs(t.bind)&&t.bind.legend;return l&&(t.events?l.on.push({...l.on[0],events:f}):l.on[0].events=f),n}};const il="_translate_anchor",ol="_translate_delta",rl={has:e=>"interval"===e.type&&e.translate,signals:(e,t,n)=>{const i=t.name,o=Zu.has(t),r=i+il,{x:a,y:s}=t.project.hasChannel;let c=su(t.translate,"scope");return o||(c=c.map((e=>(e.between[0].markname=i+vl,e)))),n.push({name:r,value:{},on:[{events:c.map((e=>e.between[0])),update:"{x: x(unit), y: y(unit)"+(void 0!==a?", extent_x: "+(o?el(e,Me):"slice(".concat(a.signals.visual,")")):"")+(void 0!==s?", extent_y: "+(o?el(e,Te):"slice(".concat(s.signals.visual,")")):"")+"}"}]},{name:i+ol,value:{},on:[{events:c,update:"{x: ".concat(r,".x - x(unit), y: ").concat(r,".y - y(unit)}")}]}),void 0!==a&&al(e,t,a,"width",n),void 0!==s&&al(e,t,s,"height",n),n}};function al(e,t,n,i,o){var r;const a=t.name,s=a+il,c=a+ol,u=n.channel,l=Zu.has(t),f=o.filter((e=>e.name===n.signals[l?"data":"visual"]))[0],d=e.getSizeSignalRef(i).signal,p=e.getScaleComponent(u),m=p.get("type"),h=l&&u===Me?"-":"",g="".concat(s,".extent_").concat(u),v="".concat(h).concat(c,".").concat(u," / ")+(l?"".concat(d):"span(".concat(g,")")),y="".concat(l?"log"===m?"panLog":"pow"===m?"panPow":"panLinear":"panLinear","(").concat(g,", ").concat(v)+(l&&"pow"===m?", ".concat(null!==(r=p.get("exponent"))&&void 0!==r?r:1):"")+")";f.on.push({events:{signal:c},update:l?y:"clampRange(".concat(y,", 0, ").concat(d,")")})}const sl="_zoom_anchor",cl="_zoom_delta",ul={has:e=>"interval"===e.type&&e.zoom,signals:(e,t,n)=>{const i=t.name,o=Zu.has(t),r=i+cl,{x:a,y:s}=t.project.hasChannel,c=w(e.scaleName(Me)),u=w(e.scaleName(Te));let l=su(t.zoom,"scope");return o||(l=l.map((e=>(e.markname=i+vl,e)))),n.push({name:i+sl,on:[{events:l,update:o?"{"+[c?"x: invert(".concat(c,", x(unit))"):"",u?"y: invert(".concat(u,", y(unit))"):""].filter((e=>!!e)).join(", ")+"}":"{x: x(unit), y: y(unit)}"}]},{name:r,on:[{events:l,force:!0,update:"pow(1.001, event.deltaY * pow(16, event.deltaMode))"}]}),void 0!==a&&ll(e,t,a,"width",n),void 0!==s&&ll(e,t,s,"height",n),n}};function ll(e,t,n,i,o){var r;const a=t.name,s=n.channel,c=Zu.has(t),u=o.filter((e=>e.name===n.signals[c?"data":"visual"]))[0],l=e.getSizeSignalRef(i).signal,f=e.getScaleComponent(s),d=f.get("type"),p=c?el(e,s):u.name,m=a+cl,h="".concat(a).concat(sl,".").concat(s),g="".concat(c?"log"===d?"zoomLog":"pow"===d?"zoomPow":"zoomLinear":"zoomLinear","(").concat(p,", ").concat(h,", ").concat(m)+(c&&"pow"===d?", ".concat(null!==(r=f.get("exponent"))&&void 0!==r?r:1):"")+")";u.on.push({events:{signal:m},update:c?g:"clampRange(".concat(g,", 0, ").concat(l,")")})}const fl=[{has:()=>!0,parse:(e,t,n)=>{var i;const o=t.name,r=null!==(i=t.project)&&void 0!==i?i:t.project=new Ju,a={},s={},c=new Set,u=(e,t)=>{const n="visual"===t?e.channel:e.field;let i=K("".concat(o,"_").concat(n));for(let e=1;c.has(i);e++)i=K("".concat(o,"_").concat(n,"_").concat(e));return c.add(i),{[t]:i}};if(!n.fields&&!n.encodings){const t=e.config.selection[n.type];if(n.init)for(const e of h(n.init))for(const i of J(e))_t[i]?(n.encodings||(n.encodings=[])).push(i):"interval"===n.type?(si('Interval selections should be initialized using "x" and/or "y" keys.'),n.encodings=t.encodings):(n.fields||(n.fields=[])).push(i);else n.encodings=t.encodings,n.fields=t.fields}for(const e of null!==(l=n.fields)&&void 0!==l?l:[]){var l;const t={type:"E",field:e};t.signals={...u(t,"data")},r.items.push(t),r.hasField[e]=t}for(const i of null!==(f=n.encodings)&&void 0!==f?f:[]){var f;const n=e.fieldDef(i);if(n){let o=n.field;if(n.aggregate){si(Ln(i,n.aggregate));continue}if(!o){si(Tn(i));continue}if(n.timeUnit){o=e.vgField(i);const t={timeUnit:n.timeUnit,as:o,field:n.field};s[j(t)]=t}if(!a[o]){let s="E";if("interval"===t.type){vo(e.getScaleComponent(i).get("type"))&&(s="R")}else n.bin&&(s="R-RE");const c={field:o,channel:i,type:s};c.signals={...u(c,"data"),...u(c,"visual")},r.items.push(a[o]=c),r.hasField[o]=r.hasChannel[i]=a[o]}}else si(Tn(i))}if(n.init){const e=e=>r.items.map((t=>void 0!==e[t.channel]?e[t.channel]:e[t.field]));if("interval"===n.type)t.init=e(n.init);else{const i=h(n.init);t.init=i.map(e)}}Y(s)||(r.timeUnit=new Vu(null,s))},signals:(e,t,n)=>{const i=t.name+Yu;return n.filter((e=>e.name===i)).length>0?n:n.concat({name:i,value:t.project.items.map((e=>{const{signals:t,hasLegend:n,...i}=e;return i.field=re(i.field),i}))})}},$u,Zu,nl,rl,ul,Xu,Iu,Ku];function dl(e,t){for(const n of fl)n.has(e)&&t(n)}function pl(e,t=!0,n=s){if(u(e)){const i=e.map((e=>pl(e,t,n)));return t?"[".concat(i.join(", "),"]"):i}return ci(e)?n(t?mi(e):function(e){const t=pi(e,!0);return e.utc?+new Date(Date.UTC(...t)):+new Date(...t)}(e)):t?n(JSON.stringify(e)):e}function ml(e,t){if(e.component.selection&&J(e.component.selection).length){const n=w(e.getName("cell"));t.unshift({name:"facet",value:{},on:[{events:su("mousemove","scope"),update:"isTuple(facet) ? facet : group(".concat(n,").datum")}]})}return gl(t)}function hl(e,t){return Bl(e,((n,i)=>{t=i.marks?i.marks(e,n,t):t,dl(n,(i=>{i.marks&&(t=i.marks(e,n,t))}))})),t}function gl(e){return e.map((e=>(e.on&&!e.on.length&&delete e.on,e)))}const vl="_brush",yl="_scale_trigger",bl={signals:(e,t)=>{const n=t.name,i=n+Yu,o=Zu.has(t),r=[],a=[],s=[];if(t.translate&&!o){const e="!event.item || event.item.mark.name !== ".concat(w(n+vl));xl(t,((t,n)=>{var i;const o=h(null!==(i=n.between[0].filter)&&void 0!==i?i:n.between[0].filter=[]);return o.indexOf(e)<0&&o.push(e),t}))}t.project.items.forEach(((n,i)=>{const o=n.channel;if(o!==Me&&o!==Te)return void si("Interval selections only support x and y encoding channels.");const c=t.init?t.init[i]:null,u=function(e,t,n,i){const o=n.channel,r=n.signals.visual,a=n.signals.data,s=Zu.has(t),c=w(e.scaleName(o)),u=e.getScaleComponent(o),l=u?u.get("type"):void 0,f=e=>"scale(".concat(c,", ").concat(e,")"),d=e.getSizeSignalRef(o===Me?"width":"height").signal,p="".concat(o,"(unit)"),m=xl(t,((e,t)=>[...e,{events:t.between[0],update:"[".concat(p,", ").concat(p,"]")},{events:t,update:"[".concat(r,"[0], clamp(").concat(p,", 0, ").concat(d,")]")}]));return m.push({events:{signal:t.name+yl},update:vo(l)?"[".concat(f("".concat(a,"[0]")),", ").concat(f("".concat(a,"[1]")),"]"):"[0, 0]"}),s?[{name:a,on:[]}]:[{name:r,...i?{init:pl(i,!0,f)}:{value:[]},on:m},{name:a,...i?{init:pl(i)}:{},on:[{events:{signal:r},update:"".concat(r,"[0] === ").concat(r,"[1] ? null : invert(").concat(c,", ").concat(r,")")}]}]}(e,t,n,c),l=n.signals.data,f=n.signals.visual,d=w(e.scaleName(o)),p=vo(e.getScaleComponent(o).get("type"))?"+":"";r.push(...u),a.push(l),s.push({scaleName:e.scaleName(o),expr:"(!isArray(".concat(l,") || ")+"(".concat(p,"invert(").concat(d,", ").concat(f,")[0] === ").concat(p).concat(l,"[0] && ")+"".concat(p,"invert(").concat(d,", ").concat(f,")[1] === ").concat(p).concat(l,"[1]))")})})),o||r.push({name:n+yl,value:{},on:[{events:s.map((e=>({scale:e.scaleName}))),update:s.map((e=>e.expr)).join(" && ")+" ? ".concat(n+yl," : {}")}]});const c=t.init,u="unit: ".concat(_l(e),", fields: ").concat(i,", values");return r.concat({name:n+kl,...c?{init:"{".concat(u,": ").concat(pl(c),"}")}:{},on:[{events:[{signal:a.join(" || ")}],update:a.join(" && ")+" ? {".concat(u,": [").concat(a,"]} : null")}]})},modifyExpr:(e,t)=>t.name+kl+", "+("global"===t.resolve?"true":"{unit: ".concat(_l(e),"}")),marks:(e,t,n)=>{const i=t.name,{x:o,y:r}=t.project.hasChannel,a=o&&o.signals.visual,s=r&&r.signals.visual,c="data(".concat(w(t.name+Fl),")");if(Zu.has(t))return n;const u={x:void 0!==o?{signal:"".concat(a,"[0]")}:{value:0},y:void 0!==r?{signal:"".concat(s,"[0]")}:{value:0},x2:void 0!==o?{signal:"".concat(a,"[1]")}:{field:{group:"width"}},y2:void 0!==r?{signal:"".concat(s,"[1]")}:{field:{group:"height"}}};if("global"===t.resolve)for(const t of J(u))u[t]=[{test:"".concat(c,".length && ").concat(c,"[0].unit === ").concat(_l(e)),...u[t]},{value:0}];const{fill:l,fillOpacity:f,cursor:d,...p}=t.mark,m=J(p).reduce(((e,t)=>(e[t]=[{test:[void 0!==o&&"".concat(a,"[0] !== ").concat(a,"[1]"),void 0!==r&&"".concat(s,"[0] !== ").concat(s,"[1]")].filter((e=>e)).join(" && "),value:p[t]},{value:null}],e)),{});return[{name:i+vl+"_bg",type:"rect",clip:!0,encode:{enter:{fill:{value:l},fillOpacity:{value:f}},update:u}},...n,{name:i+vl,type:"rect",clip:!0,encode:{enter:{...d?{cursor:{value:d}}:{},fill:{value:"transparent"}},update:{...u,...m}}}]}};function xl(e,t){return e.events.reduce(((e,n)=>n.between?t(e,n):(si("".concat(n," is not an ordered event stream for interval selections.")),e)),[])}function wl(e,t){const n=t.name,i=n+Yu,o=t.project,r="(item().isVoronoi ? datum.datum : datum)",a=o.items.map((t=>{const n=e.fieldDef(t.channel);return n&&n.bin?"[".concat(r,"[").concat(w(e.vgField(t.channel,{})),"], ")+"".concat(r,"[").concat(w(e.vgField(t.channel,{binSuffix:"end"})),"]]"):"".concat(r,"[").concat(w(t.field),"]")})).join(", "),s="unit: ".concat(_l(e),", fields: ").concat(i,", values"),c=t.events;return[{name:n+kl,on:c?[{events:c,update:"datum && item().mark.marktype !== 'group' ? {".concat(s,": [").concat(a,"]} : null"),force:!0}]:[]}]}const Al={signals:wl,modifyExpr:(e,t)=>t.name+kl+", "+("global"===t.resolve?"null":"{unit: ".concat(_l(e),"}"))},Dl={signals:wl,modifyExpr:(e,t)=>t.name+kl+", "+("global"===t.resolve?"true":"{unit: ".concat(_l(e),"}"))},Fl="_store",kl="_tuple",Cl="_modify",El="vlSelectionResolve",Sl={single:Dl,multi:Al,interval:bl};function Bl(e,t){const n=e.component.selection;if(n)for(const e of X(n)){if(!0===t(e,Sl[e.type]))break}}function _l(e,{escape:t}={escape:!0}){let n=t?w(e.name):e.name;const i=function(e){let t=e.parent;for(;t&&!Sm(t);)t=t.parent;return t}(e);if(i){const{facet:e}=i;for(const t of xt)e[t]&&(n+=" + '__facet_".concat(t,"_' + (facet[").concat(w(i.vgField(t)),"])"))}return n}function zl(e){let t=!1;return Bl(e,(e=>{t=t||e.project.items.some((e=>e.field===Ds))})),t}const Ol="RawCode",Nl="Literal",Pl="Property",jl="Identifier",Ml="ArrayExpression",Tl="BinaryExpression",Ll="CallExpression",ql="ConditionalExpression",Rl="LogicalExpression",Wl="MemberExpression",Ul="ObjectExpression",Il="UnaryExpression";function Hl(e){this.type=e}var Gl,Vl,Yl,Jl,Xl;Hl.prototype.visit=function(e){let t,n,i;if(e(this))return 1;for(t=function(e){switch(e.type){case Ml:return e.elements;case Tl:case Rl:return[e.left,e.right];case Ll:return[e.callee].concat(e.arguments);case ql:return[e.test,e.consequent,e.alternate];case Wl:return[e.object,e.property];case Ul:return e.properties;case Pl:return[e.key,e.value];case Il:return[e.argument];case jl:case Nl:case Ol:default:return[]}}(this),n=0,i=t.length;n",Gl[3]="Identifier",Gl[4]="Keyword",Gl[5]="Null",Gl[6]="Numeric",Gl[7]="Punctuator",Gl[8]="String",Gl[9]="RegularExpression";var Ql="Identifier",$l="Unexpected token %0",Kl="Invalid regular expression",Zl="Invalid regular expression: missing /",ef="Octal literals are not allowed in strict mode.",tf="ILLEGAL",nf="Disabled.",of=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),rf=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]");function af(e,t){if(!e)throw new Error("ASSERT: "+t)}function sf(e){return e>=48&&e<=57}function cf(e){return"0123456789abcdefABCDEF".indexOf(e)>=0}function uf(e){return"01234567".indexOf(e)>=0}function lf(e){return 32===e||9===e||11===e||12===e||160===e||e>=5760&&[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(e)>=0}function ff(e){return 10===e||13===e||8232===e||8233===e}function df(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||92===e||e>=128&&of.test(String.fromCharCode(e))}function pf(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||92===e||e>=128&&rf.test(String.fromCharCode(e))}const mf={if:1,in:1,do:1,var:1,for:1,new:1,try:1,let:1,this:1,else:1,case:1,void:1,with:1,enum:1,while:1,break:1,catch:1,throw:1,const:1,yield:1,class:1,super:1,return:1,typeof:1,delete:1,switch:1,export:1,import:1,public:1,static:1,default:1,finally:1,extends:1,package:1,private:1,function:1,continue:1,debugger:1,interface:1,protected:1,instanceof:1,implements:1};function hf(){for(;Yl1114111||"}"!==e)&&Of({},$l,tf),t<=65535?String.fromCharCode(t):(n=55296+(t-65536>>10),i=56320+(t-65536&1023),String.fromCharCode(n,i))}function yf(){var e,t;for(e=Vl.charCodeAt(Yl++),t=String.fromCharCode(e),92===e&&(117!==Vl.charCodeAt(Yl)&&Of({},$l,tf),++Yl,(e=gf("u"))&&"\\"!==e&&df(e.charCodeAt(0))||Of({},$l,tf),t=e);Yl>>="===(i=Vl.substr(Yl,4))?{type:7,value:i,start:o,end:Yl+=4}:">>>"===(n=i.substr(0,3))||"<<="===n||">>="===n?{type:7,value:n,start:o,end:Yl+=3}:a===(t=n.substr(0,2))[1]&&"+-<>&|".indexOf(a)>=0||"=>"===t?{type:7,value:t,start:o,end:Yl+=2}:"<>=!+-*%&|^/".indexOf(a)>=0?{type:7,value:a,start:o,end:++Yl}:void Of({},$l,tf)}function wf(){var e,t,n;if(af(sf((n=Vl[Yl]).charCodeAt(0))||"."===n,"Numeric literal must start with a decimal digit or a decimal point"),t=Yl,e="","."!==n){if(e=Vl[Yl++],n=Vl[Yl],"0"===e){if("x"===n||"X"===n)return++Yl,function(e){let t="";for(;Yl=0&&Of({},Kl,n),{value:n,literal:t}}(),i=function(e,t){let n=e;t.indexOf("u")>=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}/g,((e,t)=>{if(parseInt(t,16)<=1114111)return"x";Of({},Kl)})).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"x"));try{new RegExp(n)}catch(e){Of({},Kl)}try{return new RegExp(e,t)}catch(e){return null}}(t.value,n.value),{literal:t.literal+n.literal,value:i,regex:{pattern:t.value,flags:n.value},start:e,end:Yl}}function Df(){if(hf(),Yl>=Jl)return{type:2,start:Yl,end:Yl};const e=Vl.charCodeAt(Yl);return df(e)?bf():40===e||41===e||59===e?xf():39===e||34===e?function(){var e,t,n,i,o="",r=!1;for(af("'"===(e=Vl[Yl])||'"'===e,"String literal must starts with a quote"),t=Yl,++Yl;Yl=0&&Yl(af(t":case"<=":case">=":case"instanceof":case"in":t=7;break;case"<<":case">>":case">>>":t=8;break;case"+":case"-":t=9;break;case"*":case"/":case"%":t=11}return t}function Xf(){var e,t;return e=function(){var e,t,n,i,o,r,a,s,c,u;if(e=Xl,c=Yf(),0===(o=Jf(i=Xl)))return c;for(i.prec=o,Ff(),t=[e,Xl],r=[c,i,a=Yf()];(o=Jf(Xl))>0;){for(;r.length>2&&o<=r[r.length-2].prec;)a=r.pop(),s=r.pop().value,c=r.pop(),t.pop(),n=Cf(s,c,a),r.push(n);(i=Ff()).prec=o,r.push(i),t.push(Xl),n=Yf(),r.push(n)}for(n=r[u=r.length-1],t.pop();u>1;)t.pop(),n=Cf(r[u-1].value,r[u-2],n),u-=2;return n}(),jf("?")&&(Ff(),t=Xf(),Pf(":"),e=function(e,t,n){const i=new Hl("ConditionalExpression");return i.test=e,i.consequent=t,i.alternate=n,i}(e,t,Xf())),e}function Qf(){const e=Xf();if(jf(","))throw new Error(nf);return e}function $f(e){const t=[];return"Identifier"===e.type?[e.name]:"Literal"===e.type?[e.value]:("MemberExpression"===e.type&&(t.push(...$f(e.object)),t.push(...$f(e.property))),t)}function Kf(e){return"MemberExpression"===e.object.type?Kf(e.object):"datum"===e.object.name}function Zf(e){const t=function(e){Yl=0,Jl=(Vl=e).length,Xl=null,kf();const t=Qf();if(2!==Xl.type)throw new Error("Unexpect token after expression.");return t}(e),n=new Set;return t.visit((e=>{"MemberExpression"===e.type&&Kf(e)&&n.add($f(e).slice(1).join("."))})),n}class ed extends Hu{clone(){return new ed(null,this.model,z(this.filter))}constructor(e,t,n){super(e),this.model=t,this.filter=n,Bn(this,"expr",void 0),Bn(this,"_dependentFields",void 0),this.expr=id(this.model,this.filter,this),this._dependentFields=Zf(this.expr)}dependentFields(){return this._dependentFields}producedFields(){return new Set}assemble(){return{type:"filter",expr:this.expr}}hash(){return"Filter ".concat(this.expr)}}function td(e,t,n,i="datum"){const o=[];const r=Z(t,(function(t){const r=K(t),a=e.getSelectionComponent(r,t),s=w(r+Fl);if(a.project.timeUnit){const t=null!=n?n:e.component.data.raw,i=a.project.timeUnit.clone();t.parent?i.insertAsParentOf(t):t.parent=i}return"none"!==a.empty&&o.push(s),"vlSelectionTest(".concat(s,", ").concat(i)+("global"===a.resolve?")":", ".concat(w(a.resolve),")"))}));return(o.length?"!("+o.map((e=>"length(data(".concat(e,"))"))).join(" || ")+") || ":"")+"(".concat(r,")")}function nd(e,t){const n=t.encoding;let i=t.field;if(n||i){if(n&&!i){const o=e.project.items.filter((e=>e.channel===n));!o.length||o.length>1?(i=e.project.items[0].field,si((o.length?"Multiple ":"No ")+"matching ".concat(w(n)," encoding found for selection ").concat(w(t.selection),". ")+'Using "field": '.concat(w(i),"."))):i=o[0].field}}else i=e.project.items[0].field,e.project.items.length>1&&si('A "field" or "encoding" must be specified when using a selection as a scale domain. '+'Using "field": '.concat(w(i),"."));return"".concat(e.name,"[").concat(w(i),"]")}function id(e,t,n){return Z(t,(t=>x(t)?t:function(e){return null==e?void 0:e.selection}(t)?td(e,t.selection,n):qi(t)))}function od(e,t,n,i){var o,r,a;e.encode=null!==(o=e.encode)&&void 0!==o?o:{},e.encode[t]=null!==(r=e.encode[t])&&void 0!==r?r:{},e.encode[t].update=null!==(a=e.encode[t].update)&&void 0!==a?a:{},e.encode[t].update[n]=i}function rd(e,t,n,i={header:!1}){const{disable:o,orient:r,scale:a,labelExpr:s,title:c,zindex:l,...f}=e.combine();if(!o){for(const e in f){const n=be[e],i=f[e];if(n&&n!==t&&"both"!==n)delete f[e];else if(ve(i)){const{condition:t,...n}=i,o=h(t),r=ge[e];if(r){const{vgProp:t,part:i}=r;od(f,i,t,[...o.map((e=>{const{test:t,...n}=e;return{test:id(null,t),...n}})),n]),delete f[e]}else if(null===r){const t={signal:o.map((e=>{const{test:t,...n}=e;return"".concat(id(null,t)," ? ").concat(ka(n)," : ")})).join("")+ka(n)};f[e]=t}}else if(Fi(i)){const t=ge[e];if(t){const{vgProp:n,part:o}=t;od(f,o,n,i),delete f[e]}}}if("grid"===t){if(!f.grid)return;if(f.encode){const{grid:e}=f.encode;f.encode={...e?{grid:e}:{}},Y(f.encode)&&delete f.encode}return{scale:a,orient:r,...f,domain:!1,labels:!1,aria:!1,maxExtent:0,minExtent:0,ticks:!1,zindex:ue(l,0)}}{if(!i.header&&e.mainExtracted)return;if(void 0!==s){var d,p;let e=s;(null===(d=f.encode)||void 0===d||null===(p=d.labels)||void 0===p?void 0:p.update)&&Fi(f.encode.labels.update.text)&&(e=ae(s,"datum.label",f.encode.labels.update.text.signal)),od(f,"labels","text",{signal:e})}if(null===f.labelAlign&&delete f.labelAlign,f.encode){for(const t of ye)e.hasAxisPart(t)||delete f.encode[t];Y(f.encode)&&delete f.encode}const t=function(e,t){if(e)return u(e)&&!xa(e)?e.map((e=>aa(e,t))).join(", "):e}(c,n);return{scale:a,orient:r,grid:!1,...t?{title:t}:{},...f,...!1===n.aria?{aria:!1}:{},zindex:ue(l,0)}}}}function ad(e){const{axes:t}=e.component,n=[];for(const i of Zt)if(t[i])for(const o of t[i])if(!o.get("disable")&&!o.get("gridScale")){const t="x"===i?"height":"width",o=e.getSizeSignalRef(t).signal;t!==o&&n.push({name:t,update:o})}return n}function sd(e,t,n,i){return Object.assign.apply(null,[{},...e.map((e=>{if("axisOrient"===e){const e="x"===n?"bottom":"left",o=t["x"===n?"axisBottom":"axisLeft"]||{},r=t["x"===n?"axisTop":"axisRight"]||{},a=new Set([...J(o),...J(r)]),s={};for(const t of a.values())s[t]={signal:"".concat(i.signal,' === "').concat(e,'" ? ').concat(Ca(o[t])," : ").concat(Ca(r[t]))};return s}return t[e]}))])}function cd(e,t,n,i){const o="band"===t?["axisDiscrete","axisBand"]:"point"===t?["axisDiscrete","axisPoint"]:function(e){return e in fo}(t)?["axisQuantitative"]:"time"===t||"utc"===t?["axisTemporal"]:[],r="x"===e?"axisX":"axisY",a=Fi(n)?"axisOrient":"axis"+te(n),s=[...o,...o.map((e=>r+e.substr(4)))],c=["axis",a,r];return{vlOnlyAxisConfig:sd(s,i,e,n),vgAxisConfig:sd(c,i,e,n),axisConfigStyle:ud([...c,...s],i)}}function ud(e,t){const n=[{}];for(const o of e){var i;let e=null===(i=t[o])||void 0===i?void 0:i.style;if(e){e=h(e);for(const i of e)n.push(t.style[i])}}return Object.assign.apply(null,n)}function ld(e,t,n,i={}){const o=Oa(e,n,t);if(void 0!==o)return{configFrom:"style",configValue:o};for(const t of["vlOnlyAxisConfig","vgAxisConfig","axisConfigStyle"]){var r;if(void 0!==(null===(r=i[t])||void 0===r?void 0:r[e]))return{configFrom:t,configValue:i[t][e]}}return{}}const fd={scale:({model:e,channel:t})=>e.scaleName(t),format:({fieldOrDatumDef:e,config:t,axis:n})=>{const{format:i,formatType:o}=n;return vr(e,e.type,i,o,t,!0)},formatType:({axis:e,fieldOrDatumDef:t,scaleType:n})=>{const{formatType:i}=e;return yr(i,t,n)},grid:({fieldOrDatumDef:e,axis:t,scaleType:n})=>{return(!qr(e)||!kn(e.bin))&&(null!==(i=t.grid)&&void 0!==i?i:function(e,t){return!go(e)&&qr(t)&&!Fn(null==t?void 0:t.bin)}(n,e));var i},gridScale:({model:e,channel:t})=>function(e,t){const n="x"===t?"y":"x";if(e.getScaleComponent(n))return e.scaleName(n);return}(e,t),labelAlign:({axis:e,labelAngle:t,orient:n,channel:i})=>e.labelAlign||md(t,n,i),labelAngle:({labelAngle:e})=>e,labelBaseline:({axis:e,labelAngle:t,orient:n,channel:i})=>e.labelBaseline||pd(t,n,i),labelFlush:({axis:e,fieldOrDatumDef:t,channel:n})=>{var i;return null!==(i=e.labelFlush)&&void 0!==i?i:function(e,t){if("x"===t&&T(["quantitative","temporal"],e))return!0;return}(t.type,n)},labelOverlap:({axis:e,fieldOrDatumDef:t,scaleType:n})=>{var i;return null!==(i=e.labelOverlap)&&void 0!==i?i:function(e,t,n,i){if(n&&!l(i)||"nominal"!==e&&"ordinal"!==e)return"log"!==t&&"symlog"!==t||"greedy";return}(t.type,n,qr(t)&&!!t.timeUnit,qr(t)?t.sort:void 0)},orient:({orient:e})=>e,tickCount:({channel:e,model:t,axis:n,fieldOrDatumDef:i,scaleType:o})=>{var r;const a="x"===e?"width":"y"===e?"height":void 0,s=a?t.getSizeSignalRef(a):void 0;return null!==(r=n.tickCount)&&void 0!==r?r:function({fieldOrDatumDef:e,scaleType:t,size:n,values:i}){if(!i&&!go(t)&&"log"!==t){if(qr(e)){var o;if(Fn(e.bin))return{signal:"ceil(".concat(n.signal,"/10)")};if(e.timeUnit&&T(["month","hours","day","quarter"],null===(o=Di(e.timeUnit))||void 0===o?void 0:o.unit))return}return{signal:"ceil(".concat(n.signal,"/40)")}}return}({fieldOrDatumDef:i,scaleType:o,size:s,values:n.values})},title:({axis:e,model:t,channel:n})=>{if(void 0!==e.title)return e.title;const i=hd(t,n);if(void 0!==i)return i;const o=t.typedFieldDef(n),r="x"===n?"x2":"y2",a=t.fieldDef(r);return Pa(o?[Or(o)]:[],qr(a)?[Or(a)]:[])},values:({axis:e,fieldOrDatumDef:t})=>function(e,t){const n=e.values;if(u(n))return va(t,n);if(Fi(n))return n;return}(e,t),zindex:({axis:e,fieldOrDatumDef:t,mark:n})=>{var i;return null!==(i=e.zindex)&&void 0!==i?i:function(e,t){if("rect"===e&&Zr(t))return 1;return 0}(n,t)}};function dd(e){return"(((".concat(e.signal," % 360) + 360) % 360)")}function pd(e,t,n,i){if(void 0!==e){if("x"===n){if(Fi(e)){const n=dd(e),i=Fi(t)?"(".concat(t.signal,' === "top")'):"top"===t;return{signal:"(45 < ".concat(n," && ").concat(n," < 135) || (225 < ").concat(n," && ").concat(n,' < 315) ? "middle" :')+"(".concat(n," <= 45 || 315 <= ").concat(n,") === ").concat(i,' ? "bottom" : "top"')}}if(45{if(Yr(t)&&Sr(t.sort)){const{field:i,timeUnit:o}=t,r=t.sort,a=r.map(((e,t)=>"".concat(qi({field:i,timeUnit:o,equal:e})," ? ").concat(t," : "))).join("")+r.length;e=new gd(e,{calculate:a,as:vd(t,n,{forAs:!0})})}})),e}producedFields(){return new Set([this.transform.as])}dependentFields(){return this._dependentFields}assemble(){return{type:"formula",expr:this.transform.calculate,as:this.transform.as}}hash(){return"Calculate ".concat(j(this.transform))}}function vd(e,t,n){return Kr(e,{prefix:t,suffix:"sort_index",...null!=n?n:{}})}function yd(e,t){return T(["top","bottom"],t)?"column":T(["left","right"],t)||"row"===e?"row":"column"}function bd(e,t,n,i){const o="row"===i?n.headerRow:"column"===i?n.headerColumn:n.headerFacet;return ue((t||{})[e],o[e],n.header[e])}function xd(e,t,n,i){const o={};for(const r of e){const e=bd(r,t||{},n,i);void 0!==e&&(o[r]=e)}return o}const wd=["row","column"],Ad=["header","footer"];function Dd(e,t){const n=e.component.layoutHeaders[t].title,i=e.config?e.config:void 0,o=e.component.layoutHeaders[t].facetFieldDef?e.component.layoutHeaders[t].facetFieldDef:void 0,{titleAnchor:r,titleAngle:a,titleOrient:s}=xd(["titleAnchor","titleAngle","titleOrient"],o.header,i,t),c=yd(t,s),u=me(a);return{name:"".concat(t,"-title"),type:"group",role:"".concat(c,"-title"),title:{text:n,..."row"===t?{orient:"left"}:{},style:"guide-title",...kd(u,c),...Fd(c,u,r),...Od(i,o,t,ys,gs)}}}function Fd(e,t,n="middle"){switch(n){case"start":return{align:"left"};case"end":return{align:"right"}}const i=md(t,"row"===e?"left":"top","row"===e?"y":"x");return i?{align:i}:{}}function kd(e,t){const n=pd(e,"row"===t?"left":"top","row"===t?"y":"x",!0);return n?{baseline:n}:{}}function Cd(e,t){const n=e.component.layoutHeaders[t],i=[];for(const o of Ad)if(n[o])for(const r of n[o]){const a=Bd(e,t,o,n,r);null!=a&&i.push(a)}return i}function Ed(e,t){const{sort:n}=e;var i;return Er(n)?{field:Kr(n,{expr:"datum"}),order:null!==(i=n.order)&&void 0!==i?i:"ascending"}:u(n)?{field:vd(e,t,{expr:"datum"}),order:"ascending"}:{field:Kr(e,{expr:"datum"}),order:null!=n?n:"ascending"}}function Sd(e,t,n){const{format:i,formatType:o,labelAngle:r,labelAnchor:a,labelOrient:s,labelExpr:c}=xd(["format","formatType","labelAngle","labelAnchor","labelOrient","labelExpr"],e.header,n,t),u=mr({fieldOrDatumDef:e,format:i,formatType:o,expr:"parent",config:n}).signal,l=yd(t,s);return{text:{signal:c?ae(ae(c,"datum.label",u),"datum.value",Kr(e,{expr:"parent"})):u},..."row"===t?{orient:"left"}:{},style:"guide-label",frame:"group",...kd(r,l),...Fd(l,r,a),...Od(n,e,t,bs,vs)}}function Bd(e,t,n,i,o){if(o){let r=null;const{facetFieldDef:a}=i,s=e.config?e.config:void 0;if(a&&o.labels){const{labelOrient:e}=xd(["labelOrient"],a.header,s,t);("row"===t&&!T(["top","bottom"],e)||"column"===t&&!T(["left","right"],e))&&(r=Sd(a,t,s))}const c=Sm(e)&&!Br(e.facet),u=o.axes,l=(null==u?void 0:u.length)>0;if(r||l){const s="row"===t?"height":"width";return{name:e.getName("".concat(t,"_").concat(n)),type:"group",role:"".concat(t,"-").concat(n),...i.facetFieldDef?{from:{data:e.getName(t+"_domain")},sort:Ed(a,t)}:{},...l&&c?{from:{data:e.getName("facet_domain_".concat(t))}}:{},...r?{title:r}:{},...o.sizeSignal?{encode:{update:{[s]:o.sizeSignal}}}:{},...l?{axes:u}:{}}}}return null}const _d={column:{start:0,end:1},row:{start:1,end:0}};function zd(e,t){return _d[t][e]}function Od(e,t,n,i,o){const r={};for(const a of i){if(!o[a])continue;const i=bd(a,null==t?void 0:t.header,e,n);void 0!==i&&(r[o[a]]=i)}return r}function Nd(e){return[...Pd(e,"width"),...Pd(e,"height"),...Pd(e,"childWidth"),...Pd(e,"childHeight")]}function Pd(e,t){const n="width"===t?"x":"y",i=e.component.layoutSize.get(t);if(!i||"merged"===i)return[];const o=e.getSizeSignalRef(t).signal;if("step"===i){const t=e.getScaleComponent(n);if(t){const i=t.get("type"),r=t.get("range");if(go(i)&&ki(r)){const i=e.scaleName(n);if(Sm(e.parent)){if("independent"===e.parent.component.resolve.scale[n])return[jd(i,r)]}return[jd(i,r),{name:o,update:Md(i,t,"domain('".concat(i,"').length"))}]}}throw new Error("layout size is step although width/height is not step.")}if("container"==i){const t=o.endsWith("width"),n=t?"containerSize()[0]":"containerSize()[1]",i=js(e.config.view,t?"width":"height"),r="isFinite(".concat(n,") ? ").concat(n," : ").concat(i);return[{name:o,init:r,on:[{update:r,events:"window:resize"}]}]}return[{name:o,value:i}]}function jd(e,t){return{name:e+"_step",value:t.step}}function Md(e,t,n){const i=t.get("type"),o=t.get("padding"),r=ue(t.get("paddingOuter"),o);let a=t.get("paddingInner");return a="band"===i?void 0!==a?a:o:1,"bandspace(".concat(n,", ").concat(Ca(a),", ").concat(Ca(r),") * ").concat(e,"_step")}function Td(e){return"childWidth"===e?"width":"childHeight"===e?"height":e}function Ld(e,t){return J(e).reduce(((n,i)=>{const o=e[i];return{...n,...fu(t,o,i,(e=>Fa(e.value)))}}),{})}function qd(e,t){if(_m(t)||Sm(t))return"shared";if(Bm(t))return en(e)?"independent":"shared";throw new Error("invalid model type for resolve")}function Rd(e,t){const n=e.scale[t],i=en(t)?"axis":"legend";return"independent"===n?("shared"===e[i][t]&&si(function(e){return'Setting the scale to be independent for "'.concat(e,'" means we also have to set the guide (axis or legend) to be independent.')}(t)),"independent"):e[i][t]||"shared"}const Wd=J({aria:1,clipHeight:1,columnPadding:1,columns:1,cornerRadius:1,description:1,direction:1,fillColor:1,format:1,formatType:1,gradientLength:1,gradientOpacity:1,gradientStrokeColor:1,gradientStrokeWidth:1,gradientThickness:1,gridAlign:1,labelAlign:1,labelBaseline:1,labelColor:1,labelFont:1,labelFontSize:1,labelFontStyle:1,labelFontWeight:1,labelLimit:1,labelOffset:1,labelOpacity:1,labelOverlap:1,labelPadding:1,labelSeparation:1,legendX:1,legendY:1,offset:1,orient:1,padding:1,rowPadding:1,strokeColor:1,symbolDash:1,symbolDashOffset:1,symbolFillColor:1,symbolLimit:1,symbolOffset:1,symbolOpacity:1,symbolSize:1,symbolStrokeColor:1,symbolStrokeWidth:1,symbolType:1,tickCount:1,tickMinStep:1,title:1,titleAlign:1,titleAnchor:1,titleBaseline:1,titleColor:1,titleFont:1,titleFontSize:1,titleFontStyle:1,titleFontWeight:1,titleLimit:1,titleLineHeight:1,titleOpacity:1,titleOrient:1,titlePadding:1,type:1,values:1,zindex:1,disable:1,labelExpr:1,selections:1,opacity:1,shape:1,stroke:1,fill:1,size:1,strokeWidth:1,strokeDash:1,encode:1});class Ud extends Ac{}const Id={symbols:function(e,{fieldOrDatumDef:t,model:n,channel:i,legendCmpt:o,legendType:r}){var a,s,c,l;if("symbol"!==r)return;const{markDef:f,encoding:d,config:p,mark:m}=n,h=f.filled&&"trail"!==m;let g={...Ea({},n,Ko),...wu(n,{filled:h})};const v=null!==(a=o.get("symbolOpacity"))&&void 0!==a?a:p.legend.symbolOpacity,y=null!==(s=o.get("symbolFillColor"))&&void 0!==s?s:p.legend.symbolFillColor,b=null!==(c=o.get("symbolStrokeColor"))&&void 0!==c?c:p.legend.symbolStrokeColor,x=void 0===v?null!==(l=Hd(d.opacity))&&void 0!==l?l:f.opacity:void 0;if(g.fill){var w;if("fill"===i||h&&i===Je)delete g.fill;else if(g.fill.field)if(y)delete g.fill;else g.fill=Fa(null!==(w=p.legend.symbolBaseFillColor)&&void 0!==w?w:"black"),g.fillOpacity=Fa(null!=x?x:1);else if(u(g.fill)){var A,D,F;const e=null!==(A=null!==(D=Gd(null!==(F=d.fill)&&void 0!==F?F:d.color))&&void 0!==D?D:f.fill)&&void 0!==A?A:h&&f.color;e&&(g.fill=Fa(e))}}if(g.stroke)if("stroke"===i||!h&&i===Je)delete g.stroke;else if(g.stroke.field||b)delete g.stroke;else if(u(g.stroke)){const e=ue(Gd(d.stroke||d.color),f.stroke,h?f.color:void 0);e&&(g.stroke={value:e})}if(i!==et){const e=qr(t)&&Yd(n,o,t);e?g.opacity=[{test:e,...Fa(null!=x?x:1)},Fa(p.legend.unselectedOpacity)]:x&&(g.opacity=Fa(x))}return g={...g,...e},Y(g)?void 0:g},gradient:function(e,{model:t,legendType:n,legendCmpt:i}){var o;if("gradient"!==n)return;const{config:r,markDef:a,encoding:s}=t;let c={};const u=void 0===(null!==(o=i.get("gradientOpacity"))&&void 0!==o?o:r.legend.gradientOpacity)?Hd(s.opacity)||a.opacity:void 0;u&&(c.opacity=Fa(u));return c={...c,...e},Y(c)?void 0:c},labels:function(e,{fieldOrDatumDef:t,model:n,channel:i,legendCmpt:o}){const r=n.legend(i)||{},a=n.config,s=qr(t)?Yd(n,o,t):void 0,c=s?[{test:s,value:1},{value:a.legend.unselectedOpacity}]:void 0,{format:u,formatType:l}=r,f=dr(l)?gr({fieldOrDatumDef:t,field:"datum.value",format:u,formatType:l,config:a}):void 0,d={...c?{opacity:c}:{},...f?{text:f}:{},...e};return Y(d)?void 0:d},entries:function(e,{legendCmpt:t}){const n=t.get("selections");return(null==n?void 0:n.length)?{...e,fill:{value:"transparent"}}:e}};function Hd(e){return Vd(e,((e,t)=>Math.max(e,t.value)))}function Gd(e){return Vd(e,((e,t)=>ue(e,t.value)))}function Vd(e,t){return function(e){const t=e&&e.condition;return!!t&&(u(t)||Vr(t))}(e)?h(e.condition).reduce(t,e.value):Vr(e)?e.value:void 0}function Yd(e,t,n){const i=t.get("selections");if(!(null==i?void 0:i.length))return;const o=w(n.field);return i.map((e=>{const t=w(K(e)+Fl);return"(!length(data(".concat(t,")) || (").concat(e,"[").concat(o,"] && indexof(").concat(e,"[").concat(o,"], datum.value) >= 0))")})).join(" || ")}const Jd={direction:({direction:e})=>e,format:({fieldOrDatumDef:e,legend:t,config:n})=>{const{format:i,formatType:o}=t;return vr(e,e.type,i,o,n,!1)},formatType:({legend:e,fieldOrDatumDef:t,scaleType:n})=>{const{formatType:i}=e;return yr(i,t,n)},gradientLength:e=>{var t,n;const{legend:i,legendConfig:o}=e;return null!==(t=null!==(n=i.gradientLength)&&void 0!==n?n:o.gradientLength)&&void 0!==t?t:function({legendConfig:e,model:t,direction:n,orient:i,scaleType:o}){const{gradientHorizontalMaxLength:r,gradientHorizontalMinLength:a,gradientVerticalMaxLength:s,gradientVerticalMinLength:c}=e;if(yo(o))return"horizontal"===n?"top"===i||"bottom"===i?$d(t,"width",a,r):a:$d(t,"height",c,s);return}(e)},labelOverlap:({legend:e,legendConfig:t,scaleType:n})=>{var i,o;return null!==(i=null!==(o=e.labelOverlap)&&void 0!==o?o:t.labelOverlap)&&void 0!==i?i:function(e){if(T(["quantile","threshold","log","symlog"],e))return"greedy";return}(n)},symbolType:({legend:e,markDef:t,channel:n,encoding:i})=>{var o;return null!==(o=e.symbolType)&&void 0!==o?o:function(e,t,n,i){if("shape"!==t){var o;const e=null!==(o=Gd(n))&&void 0!==o?o:i;if(e)return e}switch(e){case"bar":case"rect":case"image":case"square":return"square";case"line":case"trail":case"rule":return"stroke";case"arc":case"point":case"circle":case"tick":case"geoshape":case"area":case"text":return"circle"}}(t.type,n,i.shape,t.shape)},title:({fieldOrDatumDef:e,config:t})=>oa(e,t,{allowDisabling:!0}),type:({legendType:e,scaleType:t,channel:n})=>{if(yt(n)&&yo(t)){if("gradient"===e)return}else if("symbol"===e)return;return e},values:({fieldOrDatumDef:e,legend:t})=>function(e,t){const n=e.values;if(u(n))return va(t,n);if(Fi(n))return n;return}(t,e)};function Xd(e){const{legend:t}=e;return ue(t.type,function({channel:e,timeUnit:t,scaleType:n}){if(yt(e)){if(T(["quarter","month","day"],t))return"symbol";if(yo(n))return"gradient"}return"symbol"}(e))}function Qd({legendConfig:e,legendType:t,orient:n,legend:i}){var o,r;return null!==(o=null!==(r=i.direction)&&void 0!==r?r:e[t?"gradientDirection":"symbolDirection"])&&void 0!==o?o:function(e,t){switch(e){case"top":case"bottom":return"horizontal";case"left":case"right":case"none":case void 0:return;default:return"gradient"===t?"horizontal":void 0}}(n,t)}function $d(e,t,n,i){const o=e.getSizeSignalRef(t).signal;return{signal:"clamp(".concat(o,", ").concat(n,", ").concat(i,")")}}function Kd(e){const t=Em(e)?function(e){const{encoding:t}=e,n={};for(const i of[Je,...ws]){const o=ua(t[i]);o&&e.getScaleComponent(i)&&(i===$e&&qr(o)&&o.type===Vi||(n[i]=ep(e,i)))}return n}(e):function(e){const{legends:t,resolve:n}=e.component;for(const i of e.children){Kd(i);for(const o of J(i.component.legends))n.legend[o]=Rd(e.component.resolve,o),"shared"===n.legend[o]&&(t[o]=tp(t[o],i.component.legends[o]),t[o]||(n.legend[o]="independent",delete t[o]))}for(const i of J(t))for(const t of e.children)t.component.legends[i]&&"shared"===n.legend[i]&&delete t.component.legends[i];return t}(e);return e.component.legends=t,t}function Zd(e,t,n,i){switch(t){case"disable":return void 0!==n;case"values":return!!(null==n?void 0:n.values);case"title":if("title"===t&&e===(null==i?void 0:i.title))return!0}return e===(n||{})[t]}function ep(e,t){var n,i,o;let r=e.legend(t);const{markDef:a,encoding:s,config:c}=e,u=c.legend,l=new Ud({},function(e,t){const n=e.scaleName(t);if("trail"===e.mark){if("color"===t)return{stroke:n};if("size"===t)return{strokeWidth:n}}return"color"===t?e.markDef.filled?{fill:n}:{stroke:n}:{[t]:n}}(e,t));!function(e,t,n){var i;const o=null===(i=e.fieldDef(t))||void 0===i?void 0:i.field;Bl(e,(e=>{var i;const r=null!==(i=e.project.hasField[o])&&void 0!==i?i:e.project.hasChannel[t];if(r&&nl.has(e)){var a;const t=null!==(a=n.get("selections"))&&void 0!==a?a:[];t.push(e.name),n.set("selections",t,!1),r.hasLegend=!0}}))}(e,t,l);const f=void 0!==r?!r:u.disable;if(l.set("disable",f,void 0!==r),f)return l;r=r||{};const d=e.getScaleComponent(t).get("type"),p=ua(s[t]),m=qr(p)?null===(n=Di(p.timeUnit))||void 0===n?void 0:n.unit:void 0,h=r.orient||c.legend.orient||"right",g=Xd({legend:r,channel:t,timeUnit:m,scaleType:d}),v={legend:r,channel:t,model:e,markDef:a,encoding:s,fieldOrDatumDef:p,legendConfig:u,config:c,scaleType:d,orient:h,legendType:g,direction:Qd({legend:r,legendType:g,orient:h,legendConfig:u})};for(const n of Wd){if("gradient"===g&&n.startsWith("symbol")||"symbol"===g&&n.startsWith("gradient"))continue;const i=n in Jd?Jd[n](v):r[n];if(void 0!==i){const o=Zd(i,n,r,e.fieldDef(t));(o||void 0===c.legend[n])&&l.set(n,i,o)}}const y=null!==(i=null===(o=r)||void 0===o?void 0:o.encoding)&&void 0!==i?i:{},b=l.get("selections"),x={},w={fieldOrDatumDef:p,model:e,channel:t,legendCmpt:l,legendType:g};for(const t of["labels","legend","title","symbols","gradient","entries"]){var A;const n=Ld(null!==(A=y[t])&&void 0!==A?A:{},e),i=t in Id?Id[t](n,w):n;void 0===i||Y(i)||(x[t]={...(null==b?void 0:b.length)&&qr(p)?{name:"".concat(K(p.field),"_legend_").concat(t)}:{},...(null==b?void 0:b.length)?{interactive:!!b}:{},update:i})}var D;Y(x)||l.set("encode",x,!!(null===(D=r)||void 0===D?void 0:D.encoding));return l}function tp(e,t){if(!e)return t.clone();const n=e.getWithExplicit("orient"),i=t.getWithExplicit("orient");if(n.explicit&&i.explicit&&n.value!==i.value)return;let o=!1;for(const n of Wd){const i=Ec(e.getWithExplicit(n),t.getWithExplicit(n),n,"legend",((e,t)=>{switch(n){case"symbolType":return np(e,t);case"title":return Ma(e,t);case"type":return o=!0,Fc("symbol")}return Cc(e,t,n,"legend")}));e.setWithExplicit(n,i)}var r,a,s,c;o&&((null===(r=e.implicit)||void 0===r||null===(a=r.encode)||void 0===a?void 0:a.gradient)&&ee(e.implicit,["encode","gradient"]),(null===(s=e.explicit)||void 0===s||null===(c=s.encode)||void 0===c?void 0:c.gradient)&&ee(e.explicit,["encode","gradient"]));return e}function np(e,t){return"circle"===t.value?t:e}function ip(e){const t=e.component.legends,n={};for(const i of J(t)){const o=e.getScaleComponent(i),r=P(o.get("domains"));if(n[r])for(const e of n[r]){tp(e,t[i])||n[r].push(t[i])}else n[r]=[t[i].clone()]}return X(n).flat().map((t=>function(e,t){var n;const{disable:i,labelExpr:o,selections:r,...a}=e.combine();if(i)return;!1===t.aria&&null==a.aria&&(a.aria=!1);if(null===(n=a.encode)||void 0===n?void 0:n.symbols){const e=a.encode.symbols.update;!e.fill||"transparent"===e.fill.value||e.stroke||a.stroke||(e.stroke={value:"transparent"});for(const t of ws)a[t]&&delete e[t]}a.title||delete a.title;if(void 0!==o){var s,c;let e=o;(null===(s=a.encode)||void 0===s||null===(c=s.labels)||void 0===c?void 0:c.update)&&Fi(a.encode.labels.update.text)&&(e=ae(o,"datum.label",a.encode.labels.update.text.signal)),function(e,t,n,i){var o,r,a;e.encode=null!==(o=e.encode)&&void 0!==o?o:{},e.encode[t]=null!==(r=e.encode[t])&&void 0!==r?r:{},e.encode[t].update=null!==(a=e.encode[t].update)&&void 0!==a?a:{},e.encode[t].update[n]=i}(a,"labels","text",{signal:e})}return a}(t,e.config))).filter((e=>void 0!==e))}function op(e){return _m(e)||Bm(e)?function(e){return e.children.reduce(((e,t)=>e.concat(t.assembleProjections())),rp(e))}(e):rp(e)}function rp(e){const t=e.component.projection;if(!t||t.merged)return[];const n=t.combine(),{name:i}=n;if(t.data){const o={signal:"[".concat(t.size.map((e=>e.signal)).join(", "),"]")},r=t.data.reduce(((t,n)=>{const i=Fi(n)?n.signal:"data('".concat(e.lookupDataSource(n),"')");return T(t,i)||t.push(i),t}),[]);if(r.length<=0)throw new Error("Projection's fit didn't find any data sources");return[{name:i,size:o,fit:{signal:r.length>1?"[".concat(r.join(", "),"]"):r[0]},...n}]}return[{name:i,translate:{signal:"[width / 2, height / 2]"},...n}]}const ap=["type","clipAngle","clipExtent","center","rotate","precision","reflectX","reflectY","coefficient","distance","fraction","lobes","parallel","radius","ratio","spacing","tilt"];class sp extends Ac{constructor(e,t,n,i){super({...t},{name:e}),this.specifiedProjection=t,this.size=n,this.data=i,Bn(this,"merged",!1)}get isFit(){return!!this.data}}function cp(e){e.component.projection=Em(e)?function(e){if(e.hasProjection){var t;const n=e.specifiedProjection,i=!(n&&(null!=n.scale||null!=n.translate)),o=i?[e.getSizeSignalRef("width"),e.getSizeSignalRef("height")]:void 0,r=i?function(e){const t=[],{encoding:n}=e;for(const i of[[Ge,He],[Ye,Ve]])(ua(n[i[0]])||ua(n[i[1]]))&&t.push({signal:e.getName("geojson_".concat(t.length))});e.channelHasField($e)&&e.typedFieldDef($e).type===Vi&&t.push({signal:e.getName("geojson_".concat(t.length))});0===t.length&&t.push(e.requestDataName(Mc.Main));return t}(e):void 0;return new sp(e.projectionName(!0),{...null!==(t=e.config.projection)&&void 0!==t?t:{},...null!=n?n:{}},o,r)}return}(e):function(e){if(0===e.children.length)return;let t;for(const t of e.children)cp(t);const n=q(e.children,(e=>{const n=e.component.projection;if(n){if(t){const e=function(e,t){const n=q(ap,(n=>!v(e.explicit,n)&&!v(t.explicit,n)||!(!v(e.explicit,n)||!v(t.explicit,n)||P(e.get(n))!==P(t.get(n)))));if(P(e.size)===P(t.size)){if(n)return e;if(P(e.explicit)===P({}))return t;if(P(t.explicit)===P({}))return e}return null}(t,n);return e&&(t=e),!!e}return t=n,!0}return!0}));if(t&&n){const n=e.projectionName(!0),i=new sp(n,t.specifiedProjection,t.size,z(t.data));for(const t of e.children){const e=t.component.projection;e&&(e.isFit&&i.data.push(...t.component.projection.data),t.renameProjection(e.get("name"),n),e.merged=!0)}return i}return}(e)}function up(e,t,n,i){if(ya(t,n)){var o,r;const a=Em(e)&&null!==(o=null!==(r=e.axis(n))&&void 0!==r?r:e.legend(n))&&void 0!==o?o:{},s=Kr(t,{expr:"datum"}),c=Kr(t,{expr:"datum",binSuffix:"end"});return{formulaAs:Kr(t,{binSuffix:"range",forAs:!0}),formula:Ar(s,c,a.format,a.formatType,i)}}return{}}function lp(e,t){return"".concat(Dn(e),"_").concat(t)}function fp(e,t,n){var i;const o=lp(null!==(i=pa(n,void 0))&&void 0!==i?i:{},t);return e.getName("".concat(o,"_bins"))}function dp(e,t,n){let i,o;i=function(e){return"as"in e}(e)?x(e.as)?[e.as,"".concat(e.as,"_end")]:[e.as[0],e.as[1]]:[Kr(e,{forAs:!0}),Kr(e,{binSuffix:"end",forAs:!0})];const r={...pa(t,void 0)},a=lp(r,e.field),{signal:s,extentSignal:c}=function(e,t){return{signal:e.getName("".concat(t,"_bins")),extentSignal:e.getName("".concat(t,"_extent"))}}(n,a);if(En(r.extent)){const e=r.extent,t=e.selection;o=nd(n.getSelectionComponent(K(t),t),e),delete r.extent}return{key:a,binComponent:{bin:r,field:e.field,as:[i],...s?{signal:s}:{},...c?{extentSignal:c}:{},...o?{span:o}:{}}}}class pp extends Hu{clone(){return new pp(null,z(this.bins))}constructor(e,t){super(e),this.bins=t}static makeFromEncoding(e,t){const n=t.reduceFieldDef(((e,n,i)=>{if(Gr(n)&&Fn(n.bin)){const{key:o,binComponent:r}=dp(n,n.bin,t);e[o]={...r,...e[o],...up(t,n,i,t.config)}}return e}),{});return Y(n)?null:new pp(e,n)}static makeFromTransform(e,t,n){const{key:i,binComponent:o}=dp(t,t.bin,n);return new pp(e,{[i]:o})}merge(e,t){for(const n of J(e.bins))n in this.bins?(t(e.bins[n].signal,this.bins[n].signal),this.bins[n].as=U([...this.bins[n].as,...e.bins[n].as],j)):this.bins[n]=e.bins[n];for(const t of e.children)e.removeChild(t),t.parent=this;e.remove()}producedFields(){return new Set(X(this.bins).map((e=>e.as)).flat(2))}dependentFields(){return new Set(X(this.bins).map((e=>e.field)))}hash(){return"Bin ".concat(j(this.bins))}assemble(){return X(this.bins).flatMap((e=>{const t=[],[n,...i]=e.as,{extent:o,...r}=e.bin,a={type:"bin",field:re(e.field),as:n,signal:e.signal,...En(o)?{extent:null}:{extent:o},...e.span?{span:{signal:"span(".concat(e.span,")")}}:{},...r};!o&&e.extentSignal&&(t.push({type:"extent",field:re(e.field),signal:e.extentSignal}),a.extent={signal:e.extentSignal}),t.push(a);for(const e of i)for(let i=0;i<2;i++)t.push({type:"formula",expr:Kr({field:n[i]},{expr:"datum"}),as:e[i]});return e.formula&&t.push({type:"formula",expr:e.formula,as:e.formulaAs}),t}))}}function mp(e,t,n,i){const o=Em(i)?i.encoding[Mt(t)]:void 0;if(Gr(n)&&Em(i)&&jr(t,n,o,i.stack,i.markDef,i.config))e.add(Kr(n,{})),e.add(Kr(n,{suffix:"end"})),n.bin&&ya(n,t)&&e.add(Kr(n,{binSuffix:"range"}));else if(t in ht){const n=function(e){switch(e){case He:return"y";case Ve:return"y2";case Ge:return"x";case Ye:return"x2"}}(t);e.add(i.getName(n))}else e.add(Kr(n));return e}class hp extends Hu{clone(){return new hp(null,new Set(this.dimensions),z(this.measures))}constructor(e,t,n){super(e),this.dimensions=t,this.measures=n}get groupBy(){return this.dimensions}static makeFromEncoding(e,t){let n=!1;t.forEachFieldDef((e=>{e.aggregate&&(n=!0)}));const i={},o=new Set;return n?(t.forEachFieldDef(((e,n)=>{const{aggregate:r,field:a}=e;if(r)if("count"===r){var s;i["*"]=null!==(s=i["*"])&&void 0!==s?s:{},i["*"].count=new Set([Kr(e,{forAs:!0})])}else{if(Ce(r)||Ee(r)){var c;const e=Ce(r)?"argmin":"argmax",t=r[e];i[t]=null!==(c=i[t])&&void 0!==c?c:{},i[t][e]=new Set([Kr({op:e,field:t},{forAs:!0})])}else{var u;i[a]=null!==(u=i[a])&&void 0!==u?u:{},i[a][r]=new Set([Kr(e,{forAs:!0})])}var l;if(vn(n)&&"unaggregated"===t.scaleDomain(n))i[a]=null!==(l=i[a])&&void 0!==l?l:{},i[a].min=new Set([Kr({field:a,aggregate:"min"},{forAs:!0})]),i[a].max=new Set([Kr({field:a,aggregate:"max"},{forAs:!0})])}else mp(o,n,e,t)})),o.size+J(i).length===0?null:new hp(e,o,i)):null}static makeFromTransform(e,t){const n=new Set,i={};for(const e of t.aggregate){const{op:t,field:n,as:a}=e;var o,r;if(t)if("count"===t)i["*"]=null!==(o=i["*"])&&void 0!==o?o:{},i["*"].count=new Set([a||Kr(e,{forAs:!0})]);else i[n]=null!==(r=i[n])&&void 0!==r?r:{},i[n][t]=new Set([a||Kr(e,{forAs:!0})])}for(const e of null!==(a=t.groupby)&&void 0!==a?a:[]){var a;n.add(e)}return n.size+J(i).length===0?null:new hp(e,n,i)}merge(e){return I(this.dimensions,e.dimensions)?(function(e,t){for(const i of J(t)){const o=t[i];for(const t of J(o)){var n;i in e?e[i][t]=new Set([...null!==(n=e[i][t])&&void 0!==n?n:[],...o[t]]):e[i]={[t]:o[t]}}}}(this.measures,e.measures),!0):(function(...e){ai.debug(...e)}("different dimensions, cannot merge"),!1)}addDimensions(e){e.forEach(this.dimensions.add,this.dimensions)}dependentFields(){return new Set([...this.dimensions,...J(this.measures)])}producedFields(){const e=new Set;for(const t of J(this.measures))for(const n of J(this.measures[t])){const i=this.measures[t][n];0===i.size?e.add("".concat(n,"_").concat(t)):i.forEach(e.add,e)}return e}hash(){return"Aggregate ".concat(j({dimensions:this.dimensions,measures:this.measures}))}assemble(){const e=[],t=[],n=[];for(const i of J(this.measures))for(const o of J(this.measures[i]))for(const r of this.measures[i][o])n.push(r),e.push(o),t.push("*"===i?null:re(i));return{type:"aggregate",groupby:[...this.dimensions].map(re),ops:e,fields:t,as:n}}}class gp extends Hu{constructor(e,t,n,i){super(e),this.model=t,this.name=n,this.data=i,Bn(this,"column",void 0),Bn(this,"row",void 0),Bn(this,"facet",void 0),Bn(this,"childModel",void 0);for(const e of xt){const n=t.facet[e];if(n){const{bin:i,sort:o}=n;this[e]={name:t.getName("".concat(e,"_domain")),fields:[Kr(n),...Fn(i)?[Kr(n,{binSuffix:"end"})]:[]],...Er(o)?{sortField:o}:u(o)?{sortIndexField:vd(n,e)}:{}}}}this.childModel=t.child}hash(){let e="Facet";for(const t of xt)this[t]&&(e+=" ".concat(t.charAt(0),":").concat(j(this[t])));return e}get fields(){const e=[];for(const n of xt){var t;(null===(t=this[n])||void 0===t?void 0:t.fields)&&e.push(...this[n].fields)}return e}dependentFields(){const e=new Set(this.fields);for(const t of xt)this[t]&&(this[t].sortField&&e.add(this[t].sortField.field),this[t].sortIndexField&&e.add(this[t].sortIndexField));return e}producedFields(){return new Set}getSource(){return this.name}getChildIndependentFieldsWithStep(){const e={};for(const t of Zt){const n=this.childModel.component.scales[t];if(n&&!n.merged){const i=n.get("type"),o=n.get("range");if(go(i)&&ki(o)){const n=am(sm(this.childModel,t));n?e[t]=n:si(Mn(t))}}}return e}assembleRowColumnHeaderData(e,t,n){const i={row:"y",column:"x"}[e],o=[],r=[],a=[];n&&n[i]&&(t?(o.push("distinct_".concat(n[i])),r.push("max")):(o.push(n[i]),r.push("distinct")),a.push("distinct_".concat(n[i])));const{sortField:s,sortIndexField:c}=this[e];if(s){const{op:e=Dr,field:t}=s;o.push(t),r.push(e),a.push(Kr(s,{forAs:!0}))}else c&&(o.push(c),r.push("max"),a.push(c));return{name:this[e].name,source:null!=t?t:this.data,transform:[{type:"aggregate",groupby:this[e].fields,...o.length?{fields:o,ops:r,as:a}:{}}]}}assembleFacetHeaderData(e){const{columns:t}=this.model.layout,{layoutHeaders:n}=this.model.component,i=[],o={};for(const e of wd){for(const t of Ad){var r;const i=null!==(r=n[e]&&n[e][t])&&void 0!==r?r:[];for(const t of i){var a;if((null===(a=t.axes)||void 0===a?void 0:a.length)>0){o[e]=!0;break}}}if(o[e]){const n='length(data("'.concat(this.facet.name,'"))'),o="row"===e?t?{signal:"ceil(".concat(n," / ").concat(t,")")}:1:t?{signal:"min(".concat(n,", ").concat(t,")")}:{signal:n};i.push({name:"".concat(this.facet.name,"_").concat(e),transform:[{type:"sequence",start:0,stop:o}]})}}const{row:s,column:c}=o;return(s||c)&&i.unshift(this.assembleRowColumnHeaderData("facet",null,e)),i}assemble(){const e=[];let t=null;const n=this.getChildIndependentFieldsWithStep(),{column:i,row:o,facet:r}=this;if(i&&o&&(n.x||n.y)){var a,s;t="cross_".concat(this.column.name,"_").concat(this.row.name);const i=[].concat(null!==(a=n.x)&&void 0!==a?a:[],null!==(s=n.y)&&void 0!==s?s:[]),o=i.map((()=>"distinct"));e.push({name:t,source:this.data,transform:[{type:"aggregate",groupby:this.fields,fields:i,ops:o}]})}for(const i of[Pe,Ne])this[i]&&e.push(this.assembleRowColumnHeaderData(i,t,n));if(r){const t=this.assembleFacetHeaderData(n);t&&e.push(...t)}return e}}function vp(e){return"'"===e[0]&&"'"===e[e.length-1]||'"'===e[0]&&'"'===e[e.length-1]?e.slice(1,-1):e}function yp(e){const t={};return S(e.filter,(e=>{if(Ti(e)){let i=null;if(_i(e))i=Aa(e.equal);else if(Oi(e))i=Aa(e.lte);else if(zi(e))i=Aa(e.lt);else if(Ni(e))i=Aa(e.gt);else if(Pi(e))i=Aa(e.gte);else if(ji(e))i=e.range[0];else if(Mi(e)){var n;i=(null!==(n=e.oneOf)&&void 0!==n?n:e.in)[0]}i&&(ci(i)?t[e.field]="date":b(i)?t[e.field]="number":x(i)&&(t[e.field]="string")),e.timeUnit&&(t[e.field]="date")}})),t}function bp(e){const t={};function n(e){var n;ha(e)?t[e.field]="date":"quantitative"===e.type&&(x(n=e.aggregate)&&T(["min","max"],n))?t[e.field]="number":ce(e.field)>1?e.field in t||(t[e.field]="flatten"):Yr(e)&&Er(e.sort)&&ce(e.sort.field)>1&&(e.sort.field in t||(t[e.sort.field]="flatten"))}if((Em(e)||Sm(e))&&e.forEachFieldDef(((t,i)=>{if(Gr(t))n(t);else{const o=Pt(i),r=e.fieldDef(o);n({...t,type:r.type})}})),Em(e)){const{mark:n,markDef:i,encoding:o}=e;if(Jo(n)&&!e.encoding.order){const e=o["horizontal"===i.orient?"y":"x"];qr(e)&&"quantitative"===e.type&&!(e.field in t)&&(t[e.field]="number")}}return t}class xp extends Hu{clone(){return new xp(null,z(this._parse))}constructor(e,t){super(e),Bn(this,"_parse",void 0),this._parse=t}hash(){return"Parse ".concat(j(this._parse))}static makeExplicit(e,t,n){let i={};const o=t.data;return!Oc(o)&&o&&o.format&&o.format.parse&&(i=o.format.parse),this.makeWithAncestors(e,i,{},n)}static makeWithAncestors(e,t,n,i){for(const e of J(n)){const t=i.getWithExplicit(e);void 0!==t.value&&(t.explicit||t.value===n[e]||"derived"===t.value||"flatten"===n[e]?delete n[e]:si(Un(e,n[e],t.value)))}for(const e of J(t)){const n=i.get(e);void 0!==n&&(n===t[e]?delete t[e]:si(Un(e,t[e],n)))}const o=new Ac(t,n);i.copyAll(o);const r={};for(const e of J(o.combine())){const t=o.get(e);null!==t&&(r[e]=t)}return 0===J(r).length||i.parseNothing?null:new xp(e,r)}get parse(){return this._parse}merge(e){this._parse={...this._parse,...e.parse},e.remove()}assembleFormatParse(){const e={};for(const t of J(this._parse)){const n=this._parse[t];1===ce(t)&&(e[t]=n)}return e}producedFields(){return new Set(J(this._parse))}dependentFields(){return new Set(J(this._parse))}assembleTransforms(e=!1){return J(this._parse).filter((t=>!e||ce(t)>1)).map((e=>{const t=function(e,t){const n=ne(e);if("number"===t)return"toNumber(".concat(n,")");if("boolean"===t)return"toBoolean(".concat(n,")");if("string"===t)return"toString(".concat(n,")");if("date"===t)return"toDate(".concat(n,")");if("flatten"===t)return n;if(0===t.indexOf("date:")){const e=vp(t.slice(5,t.length));return"timeParse(".concat(n,",'").concat(e,"')")}if(0===t.indexOf("utc:")){const e=vp(t.slice(4,t.length));return"utcParse(".concat(n,",'").concat(e,"')")}return si('Unrecognized parse "'.concat(t,'".')),null}(e,this._parse[e]);if(!t)return null;return{type:"formula",expr:t,as:se(e)}})).filter((e=>null!==e))}}class wp extends Hu{clone(){return new wp(null)}constructor(e){super(e)}dependentFields(){return new Set}producedFields(){return new Set([Ds])}hash(){return"Identifier"}assemble(){return{type:"identifier",as:Ds}}}class Ap extends Hu{clone(){return new Ap(null,this.params)}constructor(e,t){super(e),this.params=t}dependentFields(){return new Set}producedFields(){}hash(){return"Graticule ".concat(j(this.params))}assemble(){return{type:"graticule",...!0===this.params?{}:this.params}}}class Dp extends Hu{clone(){return new Dp(null,this.params)}constructor(e,t){super(e),this.params=t}dependentFields(){return new Set}producedFields(){var e;return new Set([null!==(e=this.params.as)&&void 0!==e?e:"data"])}hash(){return"Hash ".concat(j(this.params))}assemble(){return{type:"sequence",...this.params}}}class Fp extends Hu{constructor(e){var t;let n;if(super(null),Bn(this,"_data",void 0),Bn(this,"_name",void 0),Bn(this,"_generator",void 0),Oc(e=null!==(t=e)&&void 0!==t?t:{name:"source"})||(n=e.format?{...N(e.format,["parse"])}:{}),_c(e))this._data={values:e.values};else if(Bc(e)){if(this._data={url:e.url},!n.type){let t=/(?:\.([^.]+))?$/.exec(e.url)[1];T(["json","csv","tsv","dsv","topojson"],t)||(t="json"),n.type=t}}else Pc(e)?this._data={values:[{type:"Sphere"}]}:(zc(e)||Oc(e))&&(this._data={});this._generator=Oc(e),e.name&&(this._name=e.name),n&&!Y(n)&&(this._data.format=n)}dependentFields(){return new Set}producedFields(){}get data(){return this._data}hasName(){return!!this._name}get isGenerator(){return this._generator}get dataName(){return this._name}set dataName(e){this._name=e}set parent(e){throw new Error("Source nodes have to be roots.")}remove(){throw new Error("Source nodes are roots and cannot be removed.")}hash(){throw new Error("Cannot hash sources")}assemble(){return{name:this._name,...this._data,transform:[]}}}function kp(e){return e instanceof Fp||e instanceof Ap||e instanceof Dp}var Cp=new WeakMap;class Ep{constructor(){Cp.set(this,{writable:!0,value:void 0}),_n(this,Cp,!1)}setModified(){_n(this,Cp,!0)}get modifiedFlag(){return function(e,t){var n=t.get(e);if(!n)throw new TypeError("attempted to get private field on non-instance");return n.get?n.get.call(e):n.value}(this,Cp)}}class Sp extends Ep{getNodeDepths(e,t,n){n.set(e,t);for(const i of e.children)this.getNodeDepths(i,t+1,n);return n}optimize(e){const t=[...this.getNodeDepths(e,0,new Map).entries()].sort(((e,t)=>t[1]-e[1]));for(const e of t)this.run(e[0]);return this.modifiedFlag}}class Bp extends Ep{optimize(e){this.run(e);for(const t of e.children)this.optimize(t);return this.modifiedFlag}}class _p extends Bp{mergeNodes(e,t){const n=t.shift();for(const i of t)e.removeChild(i),i.parent=n,i.remove()}run(e){const t=e.children.map((e=>e.hash())),n={};for(let i=0;i1&&(this.setModified(),this.mergeNodes(e,n[t]))}}class zp extends Bp{constructor(e){super(),Bn(this,"requiresSelectionId",void 0),this.requiresSelectionId=e&&zl(e)}run(e){e instanceof wp&&(this.requiresSelectionId&&(kp(e.parent)||e.parent instanceof hp||e.parent instanceof xp)||(this.setModified(),e.remove()))}}class Op extends Ep{optimize(e){return this.run(e,new Set),this.modifiedFlag}run(e,t){let n=new Set;e instanceof Vu&&(n=e.producedFields(),H(n,t)&&(this.setModified(),e.removeFormulas(t),0===e.producedFields.length&&e.remove()));for(const i of e.children)this.run(i,new Set([...t,...n]))}}class Np extends Bp{constructor(){super()}run(e){e instanceof Gu&&!e.isRequired()&&(this.setModified(),e.remove())}}class Pp extends Sp{run(e){if(!(kp(e)||e.numChildren()>1))for(const t of e.children)if(t instanceof xp)if(e instanceof xp)this.setModified(),e.merge(t);else{if(V(e.producedFields(),t.dependentFields()))continue;this.setModified(),t.swapWithParent()}}}class jp extends Sp{run(e){const t=[...e.children],n=e.children.filter((e=>e instanceof xp));if(e.numChildren()>1&&n.length>=1){const i={},o=new Set;for(const e of n){const t=e.parse;for(const e of J(t))e in i?i[e]!==t[e]&&o.add(e):i[e]=t[e]}for(const e of o)delete i[e];if(!Y(i)){this.setModified();const n=new xp(e,i);for(const o of t){if(o instanceof xp)for(const e of J(i))delete o.parse[e];e.removeChild(o),o.parent=n,o instanceof xp&&0===J(o.parse).length&&o.remove()}}}}}class Mp extends Sp{run(e){e instanceof Gu||e.numChildren()>0||e instanceof gp||e instanceof Fp||(this.setModified(),e.remove())}}class Tp extends Sp{run(e){const t=e.children.filter((e=>e instanceof Vu)),n=t.pop();for(const e of t)this.setModified(),n.merge(e)}}class Lp extends Sp{run(e){const t=e.children.filter((e=>e instanceof hp)),n={};for(const e of t){const t=j(e.groupBy);t in n||(n[t]=[]),n[t].push(e)}for(const t of J(n)){const i=n[t];if(i.length>1){const t=i.pop();for(const n of i)t.merge(n)&&(e.removeChild(n),n.parent=t,n.remove(),this.setModified())}}}}class qp extends Sp{constructor(e){super(),this.model=e}run(e){const t=!(kp(e)||e instanceof ed||e instanceof xp||e instanceof wp),n=[],i=[];for(const o of e.children)o instanceof pp&&(t&&!V(e.producedFields(),o.dependentFields())?n.push(o):i.push(o));if(n.length>0){const t=n.pop();for(const e of n)t.merge(e,this.model.renameSignal.bind(this.model));this.setModified(),e instanceof pp?e.merge(t,this.model.renameSignal.bind(this.model)):t.swapWithParent()}if(i.length>1){const e=i.pop();for(const t of i)e.merge(t,this.model.renameSignal.bind(this.model));this.setModified()}}}class Rp extends Sp{run(e){const t=[...e.children];if(!L(t,(e=>e instanceof Gu))||e.numChildren()<=1)return;const n=[];let i;for(const o of t)if(o instanceof Gu){let t=o;for(;1===t.numChildren();){const[e]=t.children;if(!(e instanceof Gu))break;t=e}n.push(...t.children),i?(e.removeChild(o),o.parent=i.parent,i.parent.removeChild(i),i.parent=t,this.setModified()):i=t}else n.push(o);if(n.length){this.setModified();for(const e of n)e.parent.removeChild(e),e.parent=i}}}class Wp extends Hu{clone(){return new Wp(null,z(this.transform))}constructor(e,t){super(e),this.transform=t}addDimensions(e){this.transform.groupby=U(this.transform.groupby.concat(e),(e=>e))}dependentFields(){const e=new Set;return this.transform.groupby&&this.transform.groupby.forEach(e.add,e),this.transform.joinaggregate.map((e=>e.field)).filter((e=>void 0!==e)).forEach(e.add,e),e}producedFields(){return new Set(this.transform.joinaggregate.map(this.getDefaultName))}getDefaultName(e){var t;return null!==(t=e.as)&&void 0!==t?t:Kr(e)}hash(){return"JoinAggregateTransform ".concat(j(this.transform))}assemble(){const e=[],t=[],n=[];for(const i of this.transform.joinaggregate)t.push(i.op),n.push(this.getDefaultName(i)),e.push(void 0===i.field?null:i.field);const i=this.transform.groupby;return{type:"joinaggregate",as:n,ops:t,fields:e,...void 0!==i?{groupby:i}:{}}}}class Up extends Hu{clone(){return new Up(null,z(this._stack))}constructor(e,t){super(e),Bn(this,"_stack",void 0),this._stack=t}static makeFromTransform(e,t){const{stack:n,groupby:i,as:o,offset:r="zero"}=t,a=[],s=[];if(void 0!==t.sort)for(const e of t.sort)a.push(e.field),s.push(ue(e.order,"ascending"));const c={field:a,order:s};let l;return l=function(e){return u(e)&&e.every((e=>x(e)))&&e.length>1}(o)?o:x(o)?[o,o+"_end"]:[t.stack+"_start",t.stack+"_end"],new Up(e,{stackField:n,groupby:i,offset:r,sort:c,facetby:[],as:l})}static makeFromEncoding(e,t){const n=t.stack,{encoding:i}=t;if(!n)return null;const{groupbyChannel:o,fieldChannel:r,offset:a,impute:s}=n;let c;if(o){c=ca(i[o])}const l=function(e){return e.stack.stackBy.reduce(((e,t)=>{const n=Kr(t.fieldDef);return n&&e.push(n),e}),[])}(t),f=t.encoding.order;let d;return d=u(f)||qr(f)?Na(f):l.reduce(((e,t)=>(e.field.push(t),e.order.push("y"===r?"descending":"ascending"),e)),{field:[],order:[]}),new Up(e,{dimensionFieldDef:c,stackField:t.vgField(r),facetby:[],stackby:l,sort:d,offset:a,impute:s,as:[t.vgField(r,{suffix:"start",forAs:!0}),t.vgField(r,{suffix:"end",forAs:!0})]})}get stack(){return this._stack}addDimensions(e){this._stack.facetby.push(...e)}dependentFields(){const e=new Set;return e.add(this._stack.stackField),this.getGroupbyFields().forEach(e.add,e),this._stack.facetby.forEach(e.add,e),this._stack.sort.field.forEach(e.add,e),e}producedFields(){return new Set(this._stack.as)}hash(){return"Stack ".concat(j(this._stack))}getGroupbyFields(){const{dimensionFieldDef:e,impute:t,groupby:n}=this._stack;return e?e.bin?t?[Kr(e,{binSuffix:"mid"})]:[Kr(e,{}),Kr(e,{binSuffix:"end"})]:[Kr(e)]:null!=n?n:[]}assemble(){const e=[],{facetby:t,dimensionFieldDef:n,stackField:i,stackby:o,sort:r,offset:a,impute:s,as:c}=this._stack;if(s&&n){const{band:r=.5,bin:a}=n;a&&e.push({type:"formula",expr:"".concat(r,"*")+Kr(n,{expr:"datum"})+"+".concat(1-r,"*")+Kr(n,{expr:"datum",binSuffix:"end"}),as:Kr(n,{binSuffix:"mid",forAs:!0})}),e.push({type:"impute",field:i,groupby:[...o,...t],key:Kr(n,{binSuffix:"mid"}),method:"value",value:0})}return e.push({type:"stack",groupby:[...this.getGroupbyFields(),...t],field:i,sort:r,as:c,offset:a}),e}}class Ip extends Hu{clone(){return new Ip(null,z(this.transform))}constructor(e,t){super(e),this.transform=t}addDimensions(e){this.transform.groupby=U(this.transform.groupby.concat(e),(e=>e))}dependentFields(){var e,t;const n=new Set;return(null!==(e=this.transform.groupby)&&void 0!==e?e:[]).forEach(n.add,n),(null!==(t=this.transform.sort)&&void 0!==t?t:[]).forEach((e=>n.add(e.field))),this.transform.window.map((e=>e.field)).filter((e=>void 0!==e)).forEach(n.add,n),n}producedFields(){return new Set(this.transform.window.map(this.getDefaultName))}getDefaultName(e){var t;return null!==(t=e.as)&&void 0!==t?t:Kr(e)}hash(){return"WindowTransform ".concat(j(this.transform))}assemble(){const e=[],t=[],n=[],i=[];for(const o of this.transform.window)t.push(o.op),n.push(this.getDefaultName(o)),i.push(void 0===o.param?null:o.param),e.push(void 0===o.field?null:o.field);const o=this.transform.frame,r=this.transform.groupby;if(o&&null===o[0]&&null===o[1]&&t.every((e=>Se(e))))return{type:"joinaggregate",as:n,ops:t,fields:e,...void 0!==r?{groupby:r}:{}};const a=[],s=[];if(void 0!==this.transform.sort)for(const e of this.transform.sort){var c;a.push(e.field),s.push(null!==(c=e.order)&&void 0!==c?c:"ascending")}const u={field:a,order:s},l=this.transform.ignorePeers;return{type:"window",params:i,as:n,ops:t,fields:e,sort:u,...void 0!==l?{ignorePeers:l}:{},...void 0!==r?{groupby:r}:{},...void 0!==o?{frame:o}:{}}}}function Hp(e){if(e instanceof gp)if(1!==e.numChildren()||e.children[0]instanceof Gu){const n=e.model.component.data.main;Gp(n);const i=(t=e,function e(n){if(!(n instanceof gp)){const i=n.clone();if(i instanceof Gu){const e=Vp+i.getSource();i.setSource(e),t.model.component.data.outputNodes[e]=i}else(i instanceof hp||i instanceof Up||i instanceof Ip||i instanceof Wp)&&i.addDimensions(t.fields);for(const t of n.children.flatMap(e))t.parent=i;return[i]}return n.children.flatMap(e)}),o=e.children.map(i).flat();for(const e of o)e.parent=n}else{const t=e.children[0];(t instanceof hp||t instanceof Up||t instanceof Ip||t instanceof Wp)&&t.addDimensions(e.fields),t.swapWithParent(),Hp(e)}else e.children.map(Hp);var t}function Gp(e){if(e instanceof Gu&&e.type===Mc.Main&&1===e.numChildren()){const t=e.children[0];t instanceof gp||(t.swapWithParent(),Gp(e))}}const Vp="scale_";function Yp(e){for(const t of e){for(const e of t.children)if(e.parent!==t)return!1;if(!Yp(t.children))return!1}return!0}function Jp(e,t){let n=!1;for(const i of t)n=e.optimize(i)||n;return n}function Xp(e,t,n){let i=e.sources,o=!1;return o=Jp(new Np,i)||o,o=Jp(new zp(t),i)||o,i=i.filter((e=>e.numChildren()>0)),o=Jp(new Mp,i)||o,i=i.filter((e=>e.numChildren()>0)),n||(o=Jp(new Pp,i)||o,o=Jp(new qp(t),i)||o,o=Jp(new Op,i)||o,o=Jp(new jp,i)||o,o=Jp(new Lp,i)||o,o=Jp(new Tp,i)||o,o=Jp(new _p,i)||o,o=Jp(new Rp,i)||o),e.sources=i,o}class Qp{constructor(e){Bn(this,"signal",void 0),Object.defineProperty(this,"signal",{enumerable:!0,get:e})}static fromName(e,t){return new Qp((()=>e(t)))}}function $p(e){Em(e)?function(e){const t=e.component.scales;for(const n of J(t)){const i=Kp(e,n);if(t[n].setWithExplicit("domains",i),nm(e,n),e.component.data.isFaceted){let t=e;for(;!Sm(t)&&t.parent;)t=t.parent;if("shared"===t.component.resolve.scale[n])for(const e of i.value)Ci(e)&&(e.data=Vp+e.data.replace(Vp,""))}}}(e):function(e){for(const t of e.children)$p(t);const t=e.component.scales;for(const n of J(t)){let i,o=null;for(const t of e.children){const e=t.component.scales[n];if(e){i=void 0===i?e.getWithExplicit("domains"):Ec(i,e.getWithExplicit("domains"),"domains","scale",om);const t=e.get("selectionExtent");o&&t&&o.selection!==t.selection&&si(Rn),o=t}}t[n].setWithExplicit("domains",i),o&&t[n].set("selectionExtent",o,!0)}}(e)}function Kp(e,t){const n=e.getScaleComponent(t).get("type"),{encoding:i}=e,o=function(e,t,n,i){if("unaggregated"===e){const{valid:e,reason:i}=im(t,n);if(!e)return void si(i)}else if(void 0===e&&i.useUnaggregatedDomain){const{valid:e}=im(t,n);if(e)return"unaggregated"}return e}(e.scaleDomain(t),e.typedFieldDef(t),n,e.config.scale);return o!==e.scaleDomain(t)&&(e.specifiedScales[t]={...e.specifiedScales[t],domain:o}),"x"===t&&ua(i.x2)?ua(i.x)?Ec(em(n,o,e,"x"),em(n,o,e,"x2"),"domain","scale",om):em(n,o,e,"x2"):"y"===t&&ua(i.y2)?ua(i.y)?Ec(em(n,o,e,"y"),em(n,o,e,"y2"),"domain","scale",om):em(n,o,e,"y2"):em(n,o,e,t)}function Zp(e,t,n){var i;const o=null===(i=Di(n))||void 0===i?void 0:i.unit;return"temporal"===t||o?function(e,t,n){return e.map((e=>{const i=ga(e,{timeUnit:n,type:t});return{signal:"{data: ".concat(i,"}")}}))}(e,t,o):[e]}function em(e,t,n,i){const{encoding:o}=n,r=ua(o[i]),{type:a}=r,s=r.timeUnit;if(function(e){return e&&e.unionWith}(t)){const o=em(e,void 0,n,i),r=Zp(t.unionWith,a,s);return Dc([...o.value,...r])}if(Fi(t))return Dc([t]);if(t&&"unaggregated"!==t&&!xo(t))return Dc(Zp(t,a,s));const c=n.stack;if(c&&i===c.fieldChannel){if("normalize"===c.offset)return Fc([[0,1]]);const e=n.requestDataName(Mc.Main);return Fc([{data:e,field:n.vgField(i,{suffix:"start"})},{data:e,field:n.vgField(i,{suffix:"end"})}])}const u=vn(i)&&qr(r)?function(e,t,n){if(!go(n))return;const i=e.fieldDef(t),o=i.sort;if(Sr(o))return{op:"min",field:vd(i,t),order:"ascending"};const{stack:r}=e,a=r?[...r.groupbyField?[r.groupbyField]:[],...r.stackBy.map((e=>e.fieldDef.field))]:void 0;if(Er(o)){return tm(o,r&&!T(a,o.field))}if(Cr(o)){const{encoding:t,order:n}=o,i=e.fieldDef(t),{aggregate:s,field:c}=i,u=r&&!T(a,c);if(Ce(s)||Ee(s))return tm({field:Kr(i),order:n},u);if(Se(s)||!s)return tm({op:s,field:c,order:n},u)}else{if("descending"===o)return{op:"min",field:e.vgField(t),order:"descending"};if(T(["ascending",void 0],o))return!0}return}(n,i,e):void 0;if(Wr(r)){return Fc(Zp([r.datum],a,s))}const f=r;if("unaggregated"===t){const e=n.requestDataName(Mc.Main),{field:t}=r;return Fc([{data:e,field:Kr({field:t,aggregate:"min"})},{data:e,field:Kr({field:t,aggregate:"max"})}])}if(Fn(f.bin)){if(go(e))return Fc("bin-ordinal"===e?[]:[{data:$(u)?n.requestDataName(Mc.Main):n.requestDataName(Mc.Raw),field:n.vgField(i,ya(f,i)?{binSuffix:"range"}:{}),sort:!0!==u&&l(u)?u:{field:n.vgField(i,{}),op:"min"}}]);{const{bin:e}=f;if(Fn(e)){const t=fp(n,f.field,e);return Fc([new Qp((()=>{const e=n.getSignalName(t);return"[".concat(e,".start, ").concat(e,".stop]")}))])}return Fc([{data:n.requestDataName(Mc.Main),field:n.vgField(i,{})}])}}if(f.timeUnit&&T(["time","utc"],e)&&jr(i,f,Em(n)?n.encoding[Mt(i)]:void 0,n.stack,n.markDef,n.config)){const e=n.requestDataName(Mc.Main);return Fc([{data:e,field:n.vgField(i)},{data:e,field:n.vgField(i,{suffix:"end"})}])}return Fc(u?[{data:$(u)?n.requestDataName(Mc.Main):n.requestDataName(Mc.Raw),field:n.vgField(i),sort:u}]:[{data:n.requestDataName(Mc.Main),field:n.vgField(i)}])}function tm(e,t){const{op:n,field:i,order:o}=e;return{op:null!=n?n:t?"sum":Dr,...i?{field:re(i)}:{},...o?{order:o}:{}}}function nm(e,t){var n;const i=e.component.scales[t],o=e.specifiedScales[t].domain,r=null===(n=e.fieldDef(t))||void 0===n?void 0:n.bin,a=xo(o)&&o,s=Cn(r)&&En(r.extent)&&r.extent;(a||s)&&i.set("selectionExtent",null!=a?a:s,!0)}function im(e,t){const{aggregate:n,type:i}=e;return n?x(n)&&!Oe[n]?{valid:!1,reason:$n(n)}:"quantitative"===i&&"log"===t?{valid:!1,reason:Kn(e)}:{valid:!0}:{valid:!1,reason:Qn(e)}}function om(e,t,n,i){return e.explicit&&t.explicit&&si(function(e,t,n,i){return"Conflicting ".concat(t.toString(),' property "').concat(e.toString(),'" (').concat(P(n)," and ").concat(P(i),"). Using the union of the two domains.")}(n,i,e.value,t.value)),{explicit:e.explicit,value:[...e.value,...t.value]}}function rm(e){const t=U(e.map((e=>{if(Ci(e)){const{sort:t,...n}=e;return n}return e})),j),n=U(e.map((e=>{if(Ci(e)){const t=e.sort;return void 0===t||$(t)||("op"in t&&"count"===t.op&&delete t.field,"ascending"===t.order&&delete t.order),t}})).filter((e=>void 0!==e)),j);if(0===t.length)return;if(1===t.length){const t=e[0];if(Ci(t)&&n.length>0){let e=n[0];if(n.length>1)si(ti),e=!0;else if(l(e)&&"field"in e){const n=e.field;t.field===n&&(e=!e.order||{order:e.order})}return{...t,sort:e}}return t}const i=U(n.map((e=>$(e)||!("op"in e)||x(e.op)&&e.op in ke?e:(si(function(e){return"Dropping sort property ".concat(P(e),' as unioned domains only support boolean or op "count", "min", and "max".')}(e)),!0))),j);let o;1===i.length?o=i[0]:i.length>1&&(si(ti),o=!0);const r=U(e.map((e=>Ci(e)?e.data:null)),(e=>e));if(1===r.length&&null!==r[0]){return{data:r[0],fields:t.map((e=>e.field)),...o?{sort:o}:{}}}return{fields:t,...o?{sort:o}:{}}}function am(e){if(Ci(e)&&x(e.field))return e.field;if(function(e){return!u(e)&&"fields"in e&&!("data"in e)}(e)){let t;for(const n of e.fields)if(Ci(n)&&x(n.field))if(t){if(t!==n.field)return si("Detected faceted independent scales that union domain of multiple fields from different data sources. We will use the first field. The result view size may be incorrect."),t}else t=n.field;return si("Detected faceted independent scales that union domain of the same fields from different source. We will assume that this is the same field from a different fork of the same data source. However, if this is not the case, the result view size may be incorrect."),t}if(function(e){return!u(e)&&"fields"in e&&"data"in e}(e)){si("Detected faceted independent scales that union domain of multiple fields from the same data source. We will use the first field. The result view size may be incorrect.");const t=e.fields[0];return x(t)?t:void 0}}function sm(e,t){return rm(e.component.scales[t].get("domains").map((t=>(Ci(t)&&(t.data=e.lookupDataSource(t.data)),t))))}function cm(e){return _m(e)||Bm(e)?e.children.reduce(((e,t)=>e.concat(cm(t))),um(e)):um(e)}function um(e){return J(e.component.scales).reduce(((t,n)=>{const i=e.component.scales[n];if(i.merged)return t;const o=i.combine(),{name:r,type:a,selectionExtent:s,domains:c,range:u,reverse:f,...d}=o,p=function(e,t,n,i){if(en(n)){if(ki(e))return{step:{signal:t+"_step"}}}else if(l(e)&&Ci(e))return{...e,data:i.lookupDataSource(e.data)};return e}(o.range,r,n,e);let m;s&&(m=function(e,t){const n=t.selection;return{signal:nd(e.getSelectionComponent(n,K(n)),t)}}(e,s));const h=sm(e,n);return t.push({name:r,type:a,...h?{domain:h}:{},...m?{domainRaw:m}:{},range:p,...void 0!==f?{reverse:f}:{},...d}),t}),[])}class lm extends Ac{constructor(e,t){super({},{name:e}),Bn(this,"merged",!1),this.setWithExplicit("type",t)}domainDefinitelyIncludesZero(){return!1!==this.get("zero")||L(this.get("domains"),(e=>u(e)&&2===e.length&&e[0]<=0&&e[1]>=0))}}const fm=["range","scheme"];function dm(e){return"x"===e?"width":"y"===e?"height":void 0}function pm(e,t){const n=e.fieldDef(t);if(n&&n.bin&&Fn(n.bin)){const i=fp(e,n.field,n.bin),o=dm(t),r=e.getName(o);return new Qp((()=>{const t=e.getSignalName(i),n="(".concat(t,".stop - ").concat(t,".start) / ").concat(t,".step");return"".concat(e.getSignalName(r)," / (").concat(n,")")}))}}function mm(e,t){const n=t.specifiedScales[e],{size:i}=t,o=t.getScaleComponent(e).get("type");for(const i of fm)if(void 0!==n[i]){const r=Bo(o,i),a=_o(e,i);if(r)if(a)si(a);else switch(i){case"range":{const i=n.range;if(u(i)){if(en(e))return Dc(i.map((e=>{if("width"===e||"height"===e){const n=t.getName(e),i=t.getSignalName.bind(t);return Qp.fromName(i,n)}return e})))}else if(l(i))return Dc({data:t.requestDataName(Mc.Main),field:i.field,sort:{op:"min",field:t.vgField(e)}});return Dc(i)}case"scheme":return Dc(hm(n[i]))}else si(Zn(o,i,e))}if(e===Me||e===Te){const t=e===Me?"width":"height",n=i[t];if(Os(n)){if(go(o))return Dc({step:n.step});si(ei(t))}}const{rangeMin:r,rangeMax:a}=n,s=function(e,t){const{size:n,config:i,mark:o,encoding:r}=t,a=t.getSignalName.bind(t),{type:s}=ua(r[e]),c=t.getScaleComponent(e).get("type"),{domain:l,domainMid:f}=t.specifiedScales[e];switch(e){case Me:case Te:{if(T(["point","band"],c))if(e!==Me||n.width){if(e===Te&&!n.height){const e=Ts(i.view,"height");if(Os(e))return e}}else{const e=Ts(i.view,"width");if(Os(e))return e}const o=dm(e),r=t.getName(o);return e===Te&&vo(c)?[Qp.fromName(a,r),0]:[0,Qp.fromName(a,r)]}case Ke:{const r=gm(o,t.component.scales[e].get("zero"),i),a=function(e,t,n,i){const o={x:pm(n,"x"),y:pm(n,"y")};switch(e){case"bar":case"tick":{if(void 0!==i.scale.maxBandSize)return i.scale.maxBandSize;const e=ym(t,o,i.view);return b(e)?e-1:new Qp((()=>"".concat(e.signal," - 1")))}case"line":case"trail":case"rule":return i.scale.maxStrokeWidth;case"text":return i.scale.maxFontSize;case"point":case"square":case"circle":{if(i.scale.maxSize)return i.scale.maxSize;const e=ym(t,o,i.view);return b(e)?Math.pow(vm*e,2):new Qp((()=>"pow(".concat(vm," * ").concat(e.signal,", 2)")))}}throw new Error(Yn("size",e))}(o,n,t,i);return bo(c)?function(e,t,n){const i=()=>{const i=Ca(t),o=Ca(e),r="(".concat(i," - ").concat(o,") / (").concat(n," - 1)");return"sequence(".concat(o,", ").concat(i," + ").concat(r,", ").concat(r,")")};return Fi(t)?new Qp(i):{signal:i()}}(r,a,function(e,t,n,i){switch(e){case"quantile":return t.scale.quantileCount;case"quantize":return t.scale.quantizeCount;case"threshold":return void 0!==n&&u(n)?n.length+1:(si(function(e){return"Domain for ".concat(e," is required for threshold scale.")}(i)),3)}}(c,i,l,e)):[r,a]}case Ue:return[0,2*Math.PI];case Ze:return[0,360];case Re:return[0,new Qp((()=>{const e=t.getSignalName("width"),n=t.getSignalName("height");return"min(".concat(e,",").concat(n,")/2")}))];case it:return[i.scale.minStrokeWidth,i.scale.maxStrokeWidth];case ot:return[[1,0],[4,2],[2,1],[1,1],[1,2,4,2]];case $e:return"symbol";case Je:case Xe:case Qe:return"ordinal"===c?"nominal"===s?"category":"ordinal":void 0!==f?"diverging":"rect"===o||"geoshape"===o?"heatmap":"ramp";case et:case tt:case nt:return[i.scale.minOpacity,i.scale.maxOpacity]}throw new Error("Scale range undefined for channel ".concat(e))}(e,t);return(void 0!==r||void 0!==a)&&Bo(o,"rangeMin")&&u(s)&&2===s.length?Dc([null!=r?r:s[0],null!=a?a:s[1]]):Fc(s)}function hm(e){return function(e){return!x(e)&&!!e.name}(e)?{scheme:e.name,...N(e,["name"])}:{scheme:e}}function gm(e,t,n){if(t)return Fi(t)?{signal:"".concat(t.signal," ? 0 : ").concat(gm(e,!1,n))}:0;switch(e){case"bar":case"tick":return n.scale.minBandSize;case"line":case"trail":case"rule":return n.scale.minStrokeWidth;case"text":return n.scale.minFontSize;case"point":case"square":case"circle":return n.scale.minSize}throw new Error(Yn("size",e))}const vm=.95;function ym(e,t,n){const i=Os(e.width)?e.width.step:Ms(n,"width"),o=Os(e.height)?e.height.step:Ms(n,"height");return t.x||t.y?new Qp((()=>{const e=[t.x?t.x.signal:i,t.y?t.y.signal:o];return"min(".concat(e.join(", "),")")})):Math.min(i,o)}function bm(e,t){Em(e)?function(e,t){const n=e.component.scales,{config:i,encoding:o,markDef:r,specifiedScales:a}=e;for(const s of J(n)){const c=a[s],u=n[s],l=e.getScaleComponent(s),f=ua(o[s]),d=c[t],p=l.get("type"),m=l.get("padding"),h=l.get("paddingInner"),g=Bo(p,t),v=_o(s,t);if(void 0!==d&&(g?v&&si(v):si(Zn(p,t,s))),g&&void 0===v)if(void 0!==d){const e=f.timeUnit,n=f.type;switch(t){case"domainMax":case"domainMin":ci(c[t])||"temporal"===n||e?u.set(t,{signal:ga(c[t],{type:n,timeUnit:e})},!0):u.set(t,c[t],!0);break;default:u.copyKeyFromObject(t,c)}}else{const n=t in xm?xm[t]({model:e,channel:s,fieldOrDatumDef:f,scaleType:p,scalePadding:m,scalePaddingInner:h,domain:c.domain,markDef:r,config:i}):i.scale[t];void 0!==n&&u.set(t,n,!1)}}}(e,t):Am(e,t)}const xm={bins:({model:e,fieldOrDatumDef:t})=>qr(t)?function(e,t){const n=t.bin;if(Fn(n)){const i=fp(e,t.field,n);return new Qp((()=>e.getSignalName(i)))}if(kn(n)&&Cn(n)&&void 0!==n.step)return{step:n.step};return}(e,t):void 0,interpolate:({channel:e,fieldOrDatumDef:t})=>function(e,t){if(T([Je,Xe,Qe],e)&&"nominal"!==t)return"hcl";return}(e,t.type),nice:({scaleType:e,channel:t,fieldOrDatumDef:n})=>function(e,t,n){var i;if((null===(i=ca(n))||void 0===i?void 0:i.bin)||T([Ki,Zi],e))return;return t in Kt||void 0}(e,t,n),padding:({channel:e,scaleType:t,fieldOrDatumDef:n,markDef:i,config:o})=>function(e,t,n,i,o,r){if(e in Kt){if(yo(t)){if(void 0!==n.continuousPadding)return n.continuousPadding;const{type:t,orient:a}=o;if("bar"===t&&(!qr(i)||!i.bin&&!i.timeUnit)&&("vertical"===a&&"x"===e||"horizontal"===a&&"y"===e))return r.continuousBandSize}if(t===io)return n.pointPadding}return}(e,t,o.scale,n,i,o.bar),paddingInner:({scalePadding:e,channel:t,markDef:n,config:i})=>function(e,t,n,i){if(void 0!==e)return;if(t in Kt){const{bandPaddingInner:e,barBandPaddingInner:t,rectBandPaddingInner:o}=i;return ue(e,"bar"===n?t:o)}return}(e,t,n.type,i.scale),paddingOuter:({scalePadding:e,channel:t,scaleType:n,markDef:i,scalePaddingInner:o,config:r})=>function(e,t,n,i,o,r){if(void 0!==e)return;if(t in Kt&&n===oo){const{bandPaddingOuter:e}=r;return ue(e,Fi(o)?{signal:"".concat(o.signal,"/2")}:o/2)}return}(e,t,n,i.type,o,r.scale),reverse:({fieldOrDatumDef:e,scaleType:t,channel:n,config:i})=>function(e,t,n,i){if("x"===n&&void 0!==i.xReverse)return vo(e)&&"descending"===t?Fi(i.xReverse)?{signal:"!".concat(i.xReverse.signal)}:!i.xReverse:i.xReverse;if(vo(e)&&"descending"===t)return!0;return}(t,qr(e)?e.sort:void 0,n,i.scale),zero:({channel:e,fieldOrDatumDef:t,domain:n,markDef:i,scaleType:o})=>function(e,t,n,i,o){if(n&&"unaggregated"!==n&&vo(o)){if(u(n)){const e=n[0],t=n[n.length-1];if(e<=0&&t>=0)return!0}return!1}if("size"===e&&"quantitative"===t.type&&!bo(o))return!0;if((!qr(t)||!t.bin)&&T([...Zt,...nn],e)){const{orient:t,type:n}=i;return!T(["bar","area","line","trail"],n)||!("horizontal"===t&&"y"===e||"vertical"===t&&"x"===e)}return!1}(e,t,n,i,o)};function wm(e){Em(e)?function(e){const t=e.component.scales;for(const n of gn){const i=t[n];if(!i)continue;const o=mm(n,e);i.setWithExplicit("range",o)}}(e):Am(e,"range")}function Am(e,t){const n=e.component.scales;for(const n of e.children)"range"===t?wm(n):bm(n,t);for(const i of J(n)){let o;for(const n of e.children){const e=n.component.scales[i];if(e){o=Ec(o,e.getWithExplicit(t),t,"scale",kc(((e,n)=>{switch(t){case"range":return e.step&&n.step?e.step-n.step:0}return 0})))}}n[i].setWithExplicit(t,o)}}function Dm(e,t,n,i){const o=function(e,t,n){var i;switch(t.type){case"nominal":case"ordinal":if(yt(e)||"discrete"===An(e))return"shape"===e&&"ordinal"===t.type&&si(Xn(e,"ordinal")),"ordinal";if(e in Kt){if(T(["rect","bar","image","rule"],n))return"band"}else if("arc"===n&&e in tn)return"band";return void 0!==t.band||Jr(t)&&(null===(i=t.axis)||void 0===i?void 0:i.tickBand)?"band":"point";case"temporal":return yt(e)?"time":"discrete"===An(e)?(si(Xn(e,"temporal")),"ordinal"):qr(t)&&t.timeUnit&&Di(t.timeUnit).utc?"utc":"time";case"quantitative":return yt(e)?qr(t)&&Fn(t.bin)?"bin-ordinal":"linear":"discrete"===An(e)?(si(Xn(e,"quantitative")),"ordinal"):"linear";case"geojson":return}throw new Error(Hn(t.type))}(t,n,i),{type:r}=e;return vn(t)?void 0!==r?function(e,t){if(!vn(e))return!1;switch(e){case Me:case Te:case Ue:case Re:return yo(t)||T(["band","point"],t);case Ke:case it:case et:case tt:case nt:case Ze:return yo(t)||bo(t)||T(["band","point","ordinal"],t);case Je:case Xe:case Qe:return"band"!==t;case ot:return"ordinal"===t||bo(t);case $e:return"ordinal"===t}}(t,r)?qr(n)&&(a=r,s=n.type,!(T([Ii,Gi],s)?void 0===a||go(a):s===Hi?T([Ki,Zi,void 0],a):s!==Ui||T([Ji,Xi,Qi,$i,eo,to,no,Yi,void 0],a)))?(si(function(e,t){return'FieldDef does not work with "'.concat(e,'" scale. We are using "').concat(t,'" scale instead.')}(r,o)),o):r:(si(function(e,t,n){return'Channel "'.concat(e,'" does not work with "').concat(t,'" scale. We are using "').concat(n,'" scale instead.')}(t,r,o)),o):o:null;var a,s}function Fm(e){Em(e)?e.component.scales=function(e){const{encoding:t,mark:n}=e;return gn.reduce(((i,o)=>{const r=ua(t[o]);if(r&&n===Yo&&o===$e&&r.type===Vi)return i;let a=r&&r.scale;if(r&&null!==a&&!1!==a){var s;a=null!==(s=a)&&void 0!==s?s:{};const t=Dm(a,o,r,n);i[o]=new lm(e.scaleName(o+"",!0),{value:t,explicit:a.type===t})}return i}),{})}(e):e.component.scales=function(e){const t=e.component.scales={},n={},i=e.component.resolve;for(const t of e.children){Fm(t);for(const r of J(t.component.scales)){var o;if(i.scale[r]=null!==(o=i.scale[r])&&void 0!==o?o:qd(r,e),"shared"===i.scale[r]){const e=n[r],o=t.component.scales[r].getWithExplicit("type");e?ao(e.value,o.value)?n[r]=Ec(e,o,"type","scale",km):(i.scale[r]="independent",delete n[r]):n[r]=o}}}for(const i of J(n)){const o=e.scaleName(i,!0),r=n[i];t[i]=new lm(o,r);for(const t of e.children){const e=t.component.scales[i];e&&(t.renameScale(e.get("name"),o),e.merged=!0)}}return t}(e)}const km=kc(((e,t)=>co(e)-co(t)));class Cm{constructor(){Bn(this,"nameMap",void 0),this.nameMap={}}rename(e,t){this.nameMap[e]=t}has(e){return void 0!==this.nameMap[e]}get(e){for(;this.nameMap[e]&&e!==this.nameMap[e];)e=this.nameMap[e];return e}}function Em(e){return"unit"===(null==e?void 0:e.type)}function Sm(e){return"facet"===(null==e?void 0:e.type)}function Bm(e){return"concat"===(null==e?void 0:e.type)}function _m(e){return"layer"===(null==e?void 0:e.type)}class zm{constructor(e,t,n,i,o,r,a){var s,c;this.type=t,this.parent=n,this.config=o,Bn(this,"name",void 0),Bn(this,"size",void 0),Bn(this,"title",void 0),Bn(this,"description",void 0),Bn(this,"data",void 0),Bn(this,"transforms",void 0),Bn(this,"layout",void 0),Bn(this,"scaleNameMap",void 0),Bn(this,"projectionNameMap",void 0),Bn(this,"signalNameMap",void 0),Bn(this,"component",void 0),Bn(this,"view",void 0),Bn(this,"children",[]),Bn(this,"correctDataNames",(e=>(e.from&&e.from.data&&(e.from.data=this.lookupDataSource(e.from.data)),e.from&&e.from.facet&&e.from.facet.data&&(e.from.facet.data=this.lookupDataSource(e.from.facet.data)),e))),this.parent=n,this.config=o,this.view=Oo(a),this.name=null!==(s=e.name)&&void 0!==s?s:i,this.title=xa(e.title)?{text:e.title}:e.title?this.initTitle(e.title):void 0,this.scaleNameMap=n?n.scaleNameMap:new Cm,this.projectionNameMap=n?n.projectionNameMap:new Cm,this.signalNameMap=n?n.signalNameMap:new Cm,this.data=e.data,this.description=e.description,this.transforms=(null!==(c=e.transform)&&void 0!==c?c:[]).map((e=>Tc(e)?{filter:B(e.filter,Wi)}:e)),this.layout="layer"===t||"unit"===t?{}:function(e,t,n){const i=n[t],o={},{spacing:r,columns:a}=i;void 0!==r&&(o.spacing=r),void 0!==a&&(zr(e)&&!Br(e.facet)||Es(e))&&(o.columns=a),Ss(e)&&(o.columns=1);for(const t of Ps)if(void 0!==e[t])if("spacing"===t){var s,c;const n=e[t];o[t]=b(n)?n:{row:null!==(s=n.row)&&void 0!==s?s:r,column:null!==(c=n.column)&&void 0!==c?c:r}}else o[t]=e[t];return o}(e,t,o),this.component={data:{sources:n?n.component.data.sources:[],outputNodes:n?n.component.data.outputNodes:{},outputNodeRefCounts:n?n.component.data.outputNodeRefCounts:{},isFaceted:zr(e)||n&&n.component.data.isFaceted&&void 0===e.data},layoutSize:new Ac,layoutHeaders:{row:{},column:{},facet:{}},mark:null,resolve:{scale:{},axis:{},legend:{},...r?z(r):{}},selection:null,scales:null,projection:null,axes:{},legends:{}}}initTitle(e){const t=J(e),n={text:Aa(e.text)};for(const i of t)n[i]=Aa(e[i]);return n}get width(){return this.getSizeSignalRef("width")}get height(){return this.getSizeSignalRef("height")}parse(){this.parseScale(),this.parseLayoutSize(),this.renameTopLevelLayoutSizeSignal(),this.parseSelections(),this.parseProjection(),this.parseData(),this.parseAxesAndHeaders(),this.parseLegends(),this.parseMarkGroup()}parseScale(){!function(e,{ignoreRange:t}={}){Fm(e),$p(e);for(const t of So)bm(e,t);t||wm(e)}(this)}parseProjection(){cp(this)}renameTopLevelLayoutSizeSignal(){"width"!==this.getName("width")&&this.renameSignal(this.getName("width"),"width"),"height"!==this.getName("height")&&this.renameSignal(this.getName("height"),"height")}parseLegends(){Kd(this)}assembleGroupStyle(){var e,t;if("unit"===this.type||"layer"===this.type)return null!==(e=null===(t=this.view)||void 0===t?void 0:t.style)&&void 0!==e?e:"cell"}assembleEncodeFromView(e){const{style:t,...n}=e,i={};for(const e of J(n)){const t=n[e];void 0!==t&&(i[e]=Fa(t))}return i}assembleGroupEncodeEntry(e){let t={};var n;if((this.view&&(t=this.assembleEncodeFromView(this.view)),!e)&&(this.description&&(t.description=Fa(this.description)),"unit"===this.type||"layer"===this.type))return{width:this.getSizeSignalRef("width"),height:this.getSizeSignalRef("height"),...null!==(n=t)&&void 0!==n?n:{}};return Y(t)?void 0:t}assembleLayout(){if(!this.layout)return;const{spacing:e,...t}=this.layout,{component:n,config:i}=this,o=function(e,t){const n={};for(const i of xt){const o=e[i];if(null==o?void 0:o.facetFieldDef){const{titleAnchor:e,titleOrient:r}=xd(["titleAnchor","titleOrient"],o.facetFieldDef.header,t,i),a=yd(i,r),s=zd(e,a);void 0!==s&&(n[a]=s)}}return Y(n)?void 0:n}(n.layoutHeaders,i);return{padding:e,...this.assembleDefaultLayout(),...t,...o?{titleBand:o}:{}}}assembleDefaultLayout(){return{}}assembleHeaderMarks(){const{layoutHeaders:e}=this.component;let t=[];for(const n of xt)e[n].title&&t.push(Dd(this,n));for(const e of wd)t=t.concat(Cd(this,e));return t}assembleAxes(){return function(e,t){const{x:n=[],y:i=[]}=e;return[...n.map((e=>rd(e,"grid",t))),...i.map((e=>rd(e,"grid",t))),...n.map((e=>rd(e,"main",t))),...i.map((e=>rd(e,"main",t)))].filter((e=>e))}(this.component.axes,this.config)}assembleLegends(){return ip(this)}assembleProjections(){return op(this)}assembleTitle(){var e;const{encoding:t,...n}=null!==(e=this.title)&&void 0!==e?e:{},i={...ba(this.config.title).nonMark,...n,...t?{encode:{update:t}}:{}};if(i.text){var o,r;if(T(["unit","layer"],this.type)){if(T(["middle",void 0],i.anchor))i.frame=null!==(o=i.frame)&&void 0!==o?o:"group"}else i.anchor=null!==(r=i.anchor)&&void 0!==r?r:"start";return Y(i)?void 0:i}}assembleGroup(e=[]){const t={};(e=e.concat(this.assembleSignals())).length>0&&(t.signals=e);const n=this.assembleLayout();n&&(t.layout=n),t.marks=[].concat(this.assembleHeaderMarks(),this.assembleMarks());const i=!this.parent||Sm(this.parent)?cm(this):[];i.length>0&&(t.scales=i);const o=this.assembleAxes();o.length>0&&(t.axes=o);const r=this.assembleLegends();return r.length>0&&(t.legends=r),t}getName(e){return K((this.name?this.name+"_":"")+e)}getDataName(e){return this.getName(Mc[e].toLowerCase())}requestDataName(e){const t=this.getDataName(e),n=this.component.data.outputNodeRefCounts;return n[t]=(n[t]||0)+1,t}getSizeSignalRef(e){if(Sm(this.parent)){const t=on(Td(e)),n=this.component.scales[t];if(n&&!n.merged){const e=n.get("type"),i=n.get("range");if(go(e)&&ki(i)){const e=n.get("name"),i=am(sm(this,t));if(i){return{signal:Md(e,n,Kr({aggregate:"distinct",field:i},{expr:"datum"}))}}return si(Mn(t)),null}}}return{signal:this.signalNameMap.get(this.getName(e))}}lookupDataSource(e){const t=this.component.data.outputNodes[e];return t?t.getSource():e}getSignalName(e){return this.signalNameMap.get(e)}renameSignal(e,t){this.signalNameMap.rename(e,t)}renameScale(e,t){this.scaleNameMap.rename(e,t)}renameProjection(e,t){this.projectionNameMap.rename(e,t)}scaleName(e,t){return t?this.getName(e):zt(e)&&vn(e)&&this.component.scales[e]||this.scaleNameMap.has(this.getName(e))?this.scaleNameMap.get(this.getName(e)):void 0}projectionName(e){return e?this.getName("projection"):this.component.projection&&!this.component.projection.merged||this.projectionNameMap.has(this.getName("projection"))?this.projectionNameMap.get(this.getName("projection")):void 0}getScaleComponent(e){if(!this.component.scales)throw new Error("getScaleComponent cannot be called before parseScale(). Make sure you have called parseScale or use parseUnitModelWithScale().");const t=this.component.scales[e];return t&&!t.merged?t:this.parent?this.parent.getScaleComponent(e):void 0}getSelectionComponent(e,t){let n=this.component.selection[e];if(!n&&this.parent&&(n=this.parent.getSelectionComponent(e,t)),!n)throw new Error('Cannot find a selection named "'.concat(t,'".'));return n}hasAxisOrientSignalRef(){var e,t;return(null===(e=this.component.axes.x)||void 0===e?void 0:e.some((e=>e.hasOrientSignalRef())))||(null===(t=this.component.axes.y)||void 0===t?void 0:t.some((e=>e.hasOrientSignalRef())))}}class Om extends zm{vgField(e,t={}){const n=this.fieldDef(e);if(n)return Kr(n,t)}reduceFieldDef(e,t){return function(e,t,n,i){return e?J(e).reduce(((n,o)=>{const r=e[o];return u(r)?r.reduce(((e,n)=>t.call(i,e,n,o)),n):t.call(i,n,r,o)}),n):n}(this.getMapping(),((t,n,i)=>{const o=ca(n);return o?e(t,o,i):t}),t)}forEachFieldDef(e,t){Ha(this.getMapping(),((t,n)=>{const i=ca(t);i&&e(i,n)}),t)}}class Nm extends Hu{clone(){return new Nm(null,z(this.transform))}constructor(e,t){var n,i,o;super(e),this.transform=t,this.transform=z(t);const r=null!==(n=this.transform.as)&&void 0!==n?n:[void 0,void 0];this.transform.as=[null!==(i=r[0])&&void 0!==i?i:"value",null!==(o=r[1])&&void 0!==o?o:"density"]}dependentFields(){var e;return new Set([this.transform.density,...null!==(e=this.transform.groupby)&&void 0!==e?e:[]])}producedFields(){return new Set(this.transform.as)}hash(){return"DensityTransform ".concat(j(this.transform))}assemble(){const{density:e,...t}=this.transform;return{type:"kde",field:e,...t}}}class Pm extends Hu{clone(){return new Pm(null,{...this.filter})}constructor(e,t){super(e),this.filter=t}static make(e,t){const{config:n,mark:i,markDef:o}=t;if("filter"!==Ba("invalid",o,n))return null;const r=t.reduceFieldDef(((e,n,o)=>{const r=vn(o)&&t.getScaleComponent(o);if(r){vo(r.get("type"))&&"count"!==n.aggregate&&!Jo(i)&&(e[n.field]=n)}return e}),{});return J(r).length?new Pm(e,r):null}dependentFields(){return new Set(J(this.filter))}producedFields(){return new Set}hash(){return"FilterInvalid ".concat(j(this.filter))}assemble(){const e=J(this.filter).reduce(((e,t)=>{const n=this.filter[t],i=Kr(n,{expr:"datum"});return null!==n&&("temporal"===n.type?e.push("(isDate(".concat(i,") || (isValid(").concat(i,") && isFinite(+").concat(i,")))")):"quantitative"===n.type&&(e.push("isValid(".concat(i,")")),e.push("isFinite(+".concat(i,")")))),e}),[]);return e.length>0?{type:"filter",expr:e.join(" && ")}:null}}class jm extends Hu{clone(){return new jm(this.parent,z(this.transform))}constructor(e,t){super(e),this.transform=t,this.transform=z(t);const{flatten:n,as:i=[]}=this.transform;this.transform.as=n.map(((e,t)=>{var n;return null!==(n=i[t])&&void 0!==n?n:e}))}dependentFields(){return new Set(this.transform.flatten)}producedFields(){return new Set(this.transform.as)}hash(){return"FlattenTransform ".concat(j(this.transform))}assemble(){const{flatten:e,as:t}=this.transform;return{type:"flatten",fields:e,as:t}}}class Mm extends Hu{clone(){return new Mm(null,z(this.transform))}constructor(e,t){var n,i,o;super(e),this.transform=t,this.transform=z(t);const r=null!==(n=this.transform.as)&&void 0!==n?n:[void 0,void 0];this.transform.as=[null!==(i=r[0])&&void 0!==i?i:"key",null!==(o=r[1])&&void 0!==o?o:"value"]}dependentFields(){return new Set(this.transform.fold)}producedFields(){return new Set(this.transform.as)}hash(){return"FoldTransform ".concat(j(this.transform))}assemble(){const{fold:e,as:t}=this.transform;return{type:"fold",fields:e,as:t}}}class Tm extends Hu{clone(){return new Tm(null,z(this.fields),this.geojson,this.signal)}static parseAll(e,t){if(t.component.projection&&!t.component.projection.isFit)return e;let n=0;for(const i of[[Ge,He],[Ye,Ve]]){const o=i.map((e=>{const n=ua(t.encoding[e]);return qr(n)?n.field:Wr(n)?{expr:"".concat(n.datum)}:Vr(n)?{expr:"".concat(n.value)}:void 0}));(o[0]||o[1])&&(e=new Tm(e,o,null,t.getName("geojson_".concat(n++))))}if(t.channelHasField($e)){const i=t.typedFieldDef($e);i.type===Vi&&(e=new Tm(e,null,i.field,t.getName("geojson_".concat(n++))))}return e}constructor(e,t,n,i){super(e),this.fields=t,this.geojson=n,this.signal=i}dependentFields(){var e;const t=(null!==(e=this.fields)&&void 0!==e?e:[]).filter(x);return new Set([...this.geojson?[this.geojson]:[],...t])}producedFields(){return new Set}hash(){return"GeoJSON ".concat(this.geojson," ").concat(this.signal," ").concat(j(this.fields))}assemble(){return{type:"geojson",...this.fields?{fields:this.fields}:{},...this.geojson?{geojson:this.geojson}:{},signal:this.signal}}}class Lm extends Hu{clone(){return new Lm(null,this.projection,z(this.fields),z(this.as))}constructor(e,t,n,i){super(e),this.projection=t,this.fields=n,this.as=i}static parseAll(e,t){if(!t.projectionName())return e;for(const n of[[Ge,He],[Ye,Ve]]){const i=n.map((e=>{const n=ua(t.encoding[e]);return qr(n)?n.field:Wr(n)?{expr:"".concat(n.datum)}:Vr(n)?{expr:"".concat(n.value)}:void 0})),o=n[0]===Ye?"2":"";(i[0]||i[1])&&(e=new Lm(e,t.projectionName(),i,[t.getName("x"+o),t.getName("y"+o)]))}return e}dependentFields(){return new Set(this.fields.filter(x))}producedFields(){return new Set(this.as)}hash(){return"Geopoint ".concat(this.projection," ").concat(j(this.fields)," ").concat(j(this.as))}assemble(){return{type:"geopoint",projection:this.projection,fields:this.fields,as:this.as}}}class qm extends Hu{clone(){return new qm(null,z(this.transform))}constructor(e,t){super(e),this.transform=t}dependentFields(){var e;return new Set([this.transform.impute,this.transform.key,...null!==(e=this.transform.groupby)&&void 0!==e?e:[]])}producedFields(){return new Set([this.transform.impute])}processSequence(e){const{start:t=0,stop:n,step:i}=e,o=[t,n,...i?[i]:[]].join(",");return{signal:"sequence(".concat(o,")")}}static makeFromTransform(e,t){return new qm(e,t)}static makeFromEncoding(e,t){const n=t.encoding,i=n.x,o=n.y;if(qr(i)&&qr(o)){const r=i.impute?i:o.impute?o:void 0;if(void 0===r)return;const a=i.impute?o:o.impute?i:void 0,{method:s,value:c,frame:u,keyvals:l}=r.impute,f=Ga(t.mark,n);return new qm(e,{impute:r.field,key:a.field,...s?{method:s}:{},...void 0!==c?{value:c}:{},...u?{frame:u}:{},...void 0!==l?{keyvals:l}:{},...f.length?{groupby:f}:{}})}return null}hash(){return"Impute ".concat(j(this.transform))}assemble(){const{impute:e,key:t,keyvals:n,method:i,groupby:o,value:r,frame:a=[null,null]}=this.transform,s={type:"impute",field:e,key:t,...n?{keyvals:(c=n,void 0!==(null==c?void 0:c.stop)?this.processSequence(n):n)}:{},method:"value",...o?{groupby:o}:{},value:i&&"value"!==i?null:r};var c;if(i&&"value"!==i){return[s,{type:"window",as:["imputed_".concat(e,"_value")],ops:[i],fields:[e],frame:a,ignorePeers:!1,...o?{groupby:o}:{}},{type:"formula",expr:"datum.".concat(e," === null ? datum.imputed_").concat(e,"_value : datum.").concat(e),as:e}]}return[s]}}class Rm extends Hu{clone(){return new Rm(null,z(this.transform))}constructor(e,t){var n,i,o;super(e),this.transform=t,this.transform=z(t);const r=null!==(n=this.transform.as)&&void 0!==n?n:[void 0,void 0];this.transform.as=[null!==(i=r[0])&&void 0!==i?i:t.on,null!==(o=r[1])&&void 0!==o?o:t.loess]}dependentFields(){var e;return new Set([this.transform.loess,this.transform.on,...null!==(e=this.transform.groupby)&&void 0!==e?e:[]])}producedFields(){return new Set(this.transform.as)}hash(){return"LoessTransform ".concat(j(this.transform))}assemble(){const{loess:e,on:t,...n}=this.transform;return{type:"loess",x:t,y:e,...n}}}class Wm extends Hu{clone(){return new Wm(null,z(this.transform),this.secondary)}constructor(e,t,n){super(e),this.transform=t,this.secondary=n}static make(e,t,n,i){const o=t.component.data.sources,{from:r}=n;let a=null;if(function(e){return"data"in e}(r)){let e=nh(r.data,o);e||(e=new Fp(r.data),o.push(e));const n=t.getName("lookup_".concat(i));a=new Gu(e,n,Mc.Lookup,t.component.data.outputNodeRefCounts),t.component.data.outputNodes[n]=a}else if(function(e){return"selection"in e}(r)){const e=r.selection;if(n={as:e,...n},a=t.getSelectionComponent(K(e),e).materialized,!a)throw new Error('Cannot define and lookup the "'.concat(e,'" selection in the same view. ')+"Try moving the lookup into a second, layered view?")}return new Wm(e,n,a.getSource())}dependentFields(){return new Set([this.transform.lookup])}producedFields(){return new Set(this.transform.as?h(this.transform.as):this.transform.from.fields)}hash(){return"Lookup ".concat(j({transform:this.transform,secondary:this.secondary}))}assemble(){let e;if(this.transform.from.fields)e={values:this.transform.from.fields,...this.transform.as?{as:h(this.transform.as)}:{}};else{let t=this.transform.as;x(t)||(si('If "from.fields" is not specified, "as" has to be a string that specifies the key to be used for the data from the secondary source.'),t="_lookup"),e={as:[t]}}return{type:"lookup",from:this.secondary,key:this.transform.from.key,fields:[this.transform.lookup],...e,...this.transform.default?{default:this.transform.default}:{}}}}class Um extends Hu{clone(){return new Um(null,z(this.transform))}constructor(e,t){var n,i,o;super(e),this.transform=t,this.transform=z(t);const r=null!==(n=this.transform.as)&&void 0!==n?n:[void 0,void 0];this.transform.as=[null!==(i=r[0])&&void 0!==i?i:"prob",null!==(o=r[1])&&void 0!==o?o:"value"]}dependentFields(){var e;return new Set([this.transform.quantile,...null!==(e=this.transform.groupby)&&void 0!==e?e:[]])}producedFields(){return new Set(this.transform.as)}hash(){return"QuantileTransform ".concat(j(this.transform))}assemble(){const{quantile:e,...t}=this.transform;return{type:"quantile",field:e,...t}}}class Im extends Hu{clone(){return new Im(null,z(this.transform))}constructor(e,t){var n,i,o;super(e),this.transform=t,this.transform=z(t);const r=null!==(n=this.transform.as)&&void 0!==n?n:[void 0,void 0];this.transform.as=[null!==(i=r[0])&&void 0!==i?i:t.on,null!==(o=r[1])&&void 0!==o?o:t.regression]}dependentFields(){var e;return new Set([this.transform.regression,this.transform.on,...null!==(e=this.transform.groupby)&&void 0!==e?e:[]])}producedFields(){return new Set(this.transform.as)}hash(){return"RegressionTransform ".concat(j(this.transform))}assemble(){const{regression:e,on:t,...n}=this.transform;return{type:"regression",x:t,y:e,...n}}}class Hm extends Hu{clone(){return new Hm(null,z(this.transform))}constructor(e,t){super(e),this.transform=t}addDimensions(e){var t;this.transform.groupby=U((null!==(t=this.transform.groupby)&&void 0!==t?t:[]).concat(e),(e=>e))}producedFields(){}dependentFields(){var e;return new Set([this.transform.pivot,this.transform.value,...null!==(e=this.transform.groupby)&&void 0!==e?e:[]])}hash(){return"PivotTransform ".concat(j(this.transform))}assemble(){const{pivot:e,value:t,groupby:n,limit:i,op:o}=this.transform;return{type:"pivot",field:e,value:t,...void 0!==i?{limit:i}:{},...void 0!==o?{op:o}:{},...void 0!==n?{groupby:n}:{}}}}class Gm extends Hu{clone(){return new Gm(null,z(this.transform))}constructor(e,t){super(e),this.transform=t}dependentFields(){return new Set}producedFields(){return new Set}hash(){return"SampleTransform ".concat(j(this.transform))}assemble(){return{type:"sample",size:this.transform.sample}}}function Vm(e){let t=0;return function n(i,o){if(i instanceof Fp&&!i.isGenerator&&!Bc(i.data)){e.push(o);o={name:null,source:o.name,transform:[]}}var r;if(i instanceof xp&&(i.parent instanceof Fp&&!o.source?(o.format={...null!==(r=o.format)&&void 0!==r?r:{},parse:i.assembleFormatParse()},o.transform.push(...i.assembleTransforms(!0))):o.transform.push(...i.assembleTransforms())),i instanceof gp){o.name||(o.name="data_".concat(t++)),!o.source||o.transform.length>0?(e.push(o),i.data=o.name):i.data=o.source;for(const t of i.assemble())e.push(t)}else{if((i instanceof Ap||i instanceof Dp||i instanceof Pm||i instanceof ed||i instanceof gd||i instanceof Lm||i instanceof Tm||i instanceof hp||i instanceof Wm||i instanceof Ip||i instanceof Wp||i instanceof Mm||i instanceof jm||i instanceof Nm||i instanceof Rm||i instanceof Um||i instanceof Im||i instanceof wp||i instanceof Gm||i instanceof Hm)&&o.transform.push(i.assemble()),(i instanceof pp||i instanceof Vu||i instanceof qm||i instanceof Up)&&o.transform.push(...i.assemble()),i instanceof Gu)if(o.source&&0===o.transform.length)i.setSource(o.source);else if(i.parent instanceof Gu)i.setSource(o.name);else if(o.name||(o.name="data_".concat(t++)),i.setSource(o.name),1===i.numChildren()){e.push(o);o={name:null,source:o.name,transform:[]}}switch(i.numChildren()){case 0:i instanceof Gu&&(!o.source||o.transform.length>0)&&e.push(o);break;case 1:n(i.children[0],o);break;default:{o.name||(o.name="data_".concat(t++));let r=o.name;!o.source||o.transform.length>0?e.push(o):r=o.source;for(const e of i.children){n(e,{name:null,source:r,transform:[]})}break}}}}}function Ym(e){return"top"===e||"left"===e||Fi(e)?"header":"footer"}function Jm(e,t){const{facet:n,config:i,child:o,component:r}=e;if(e.channelHasField(t)){var a;const s=n[t],c=bd("title",null,i,t);let l=oa(s,i,{allowDisabling:!0,includeDefault:void 0===c||!!c});o.component.layoutHeaders[t].title&&(l=u(l)?l.join(", "):l,l+=" / "+o.component.layoutHeaders[t].title,o.component.layoutHeaders[t].title=null);const f=bd("labelOrient",s,i,t),d=ue((null!==(a=s.header)&&void 0!==a?a:{}).labels,i.header.labels,!0),p=T(["bottom","right"],f)?"footer":"header";r.layoutHeaders[t]={title:l,facetFieldDef:s,[p]:"facet"===t?[]:[Xm(e,t,d)]}}}function Xm(e,t,n){const i="row"===t?"height":"width";return{labels:n,sizeSignal:e.child.component.layoutSize.get(i)?e.child.getSizeSignalRef(i):void 0,axes:[]}}function Qm(e,t){const{child:n}=e;if(n.component.axes[t]){const{layoutHeaders:o,resolve:r}=e.component;if(r.axis[t]=Rd(r,t),"shared"===r.axis[t]){const r="x"===t?"column":"row",a=o[r];for(const o of n.component.axes[t]){var i;const t=Ym(o.get("orient"));a[t]=null!==(i=a[t])&&void 0!==i?i:[Xm(e,r,!1)];const n=rd(o,"main",e.config,{header:!0});n&&a[t][0].axes.push(n),o.mainExtracted=!0}}}}function $m(e){for(const t of e.children)t.parseLayoutSize()}function Km(e,t){const n=Td(t),i=on(n),o=e.component.resolve,r=e.component.layoutSize;let a;for(const t of e.children){const e=t.component.layoutSize.getWithExplicit(n),r=o.scale[i];if("independent"===r&&"step"===e.value){a=void 0;break}if(a){if("independent"===r&&a.value!==e.value){a=void 0;break}a=Ec(a,e,n,"")}else a=e}if(a){for(const i of e.children)e.renameSignal(i.getName(n),e.getName(t)),i.component.layoutSize.set(n,"merged",!1);r.setWithExplicit(t,a)}else r.setWithExplicit(t,{explicit:!1,value:void 0})}function Zm(e,t){const n="width"===t?"x":"y",i=e.config,o=e.getScaleComponent(n);if(o){const e=o.get("type"),n=o.get("range");if(go(e)){const e=Ts(i.view,t);return ki(n)||Os(e)?"step":e}return js(i.view,t)}if(e.hasProjection||"arc"===e.mark)return js(i.view,t);{const e=Ts(i.view,t);return Os(e)?e.step:e}}function eh(e,t,n){return Kr(t,{suffix:"by_".concat(Kr(e)),...null!=n?n:{}})}class th extends Om{constructor(e,t,n,i){super(e,"facet",t,n,i,e.resolve),Bn(this,"facet",void 0),Bn(this,"child",void 0),Bn(this,"children",void 0),this.child=Eh(e.spec,this,this.getName("child"),void 0,i),this.children=[this.child],this.facet=this.initFacet(e.facet)}initFacet(e){if(!Br(e))return{facet:this.initFacetFieldDef(e,"facet")};const t=J(e),n={};for(const i of t){if(!T([Ne,Pe],i)){si(Yn(i,"facet"));break}const t=e[i];if(void 0===t.field){si(Vn(t,i));break}n[i]=this.initFacetFieldDef(t,i)}return n}initFacetFieldDef(e,t){const{header:n,...i}=e,o=da(i,t);return n&&(o.header=Oo(n)),o}channelHasField(e){return!!this.facet[e]}fieldDef(e){return this.facet[e]}parseData(){this.component.data=ih(this),this.child.parseData()}parseLayoutSize(){$m(this)}parseSelections(){this.child.parseSelections(),this.component.selection=this.child.component.selection}parseMarkGroup(){this.child.parseMarkGroup()}parseAxesAndHeaders(){this.child.parseAxesAndHeaders(),function(e){for(const t of xt)Jm(e,t);Qm(e,"x"),Qm(e,"y")}(this)}assembleSelectionTopLevelSignals(e){return this.child.assembleSelectionTopLevelSignals(e)}assembleSignals(){return this.child.assembleSignals(),[]}assembleSelectionData(e){return this.child.assembleSelectionData(e)}getHeaderLayoutMixins(){const e={};for(const o of xt)for(const r of Ad){const a=this.component.layoutHeaders[o],s=a[r],{facetFieldDef:c}=a;if(c){const n=bd("titleOrient",c.header,this.config,o);if(T(["right","bottom"],n)){var t;const i=yd(o,n);e.titleAnchor=null!==(t=e.titleAnchor)&&void 0!==t?t:{},e.titleAnchor[i]="end"}}if(null==s?void 0:s[0]){const t="row"===o?"height":"width",s="header"===r?"headerBand":"footerBand";var n,i;if("facet"!==o&&!this.child.component.layoutSize.get(t))e[s]=null!==(n=e[s])&&void 0!==n?n:{},e[s][o]=.5;if(a.title)e.offset=null!==(i=e.offset)&&void 0!==i?i:{},e.offset["row"===o?"rowTitle":"columnTitle"]=10}}return e}assembleDefaultLayout(){const{column:e,row:t}=this.facet,n=e?this.columnDistinctSignal():t?1:void 0;let i="all";return(t||"independent"!==this.component.resolve.scale.x)&&(e||"independent"!==this.component.resolve.scale.y)||(i="none"),{...this.getHeaderLayoutMixins(),...n?{columns:n}:{},bounds:"full",align:i}}assembleLayoutSignals(){return this.child.assembleLayoutSignals()}columnDistinctSignal(){if(!(this.parent&&this.parent instanceof th)){const e=this.getName("column_domain");return{signal:"length(data('".concat(e,"'))")}}}assembleGroup(e){return this.parent&&this.parent instanceof th?{...this.channelHasField("column")?{encode:{update:{columns:{field:Kr(this.facet.column,{prefix:"distinct"})}}}}:{},...super.assembleGroup(e)}:super.assembleGroup(e)}getCardinalityAggregateForChild(){const e=[],t=[],n=[];if(this.child instanceof th){if(this.child.channelHasField("column")){const i=Kr(this.child.facet.column);e.push(i),t.push("distinct"),n.push("distinct_".concat(i))}}else for(const i of Zt){const o=this.child.component.scales[i];if(o&&!o.merged){const r=o.get("type"),a=o.get("range");if(go(r)&&ki(a)){const o=am(sm(this.child,i));o?(e.push(o),t.push("distinct"),n.push("distinct_".concat(o))):si(Mn(i))}}}return{fields:e,ops:t,as:n}}assembleFacet(){const{name:e,data:t}=this.component.data.facetRoot,{row:n,column:i}=this.facet,{fields:o,ops:r,as:a}=this.getCardinalityAggregateForChild(),s=[];for(const e of xt){const t=this.facet[e];if(t){s.push(Kr(t));const{bin:c,sort:l}=t;if(Fn(c)&&s.push(Kr(t,{binSuffix:"end"})),Er(l)){const{field:e,op:s=Dr}=l,c=eh(t,l);n&&i?(o.push(c),r.push("max"),a.push(c)):(o.push(e),r.push(s),a.push(c))}else if(u(l)){const n=vd(t,e);o.push(n),r.push("max"),a.push(n)}}}const c=!!n&&!!i;return{name:e,data:t,groupby:s,...c||o.length>0?{aggregate:{...c?{cross:c}:{},...o.length?{fields:o,ops:r,as:a}:{}}}:{}}}facetSortFields(e){const{facet:t}=this,n=t[e];return n?Er(n.sort)?[eh(n,n.sort,{expr:"datum"})]:u(n.sort)?[vd(n,e,{expr:"datum"})]:[Kr(n,{expr:"datum"})]:[]}facetSortOrder(e){const{facet:t}=this,n=t[e];if(n){const{sort:e}=n;return[(Er(e)?e.order:!u(e)&&e)||"ascending"]}return[]}assembleLabelTitle(){const{facet:e,config:t}=this;if(e.facet)return Sd(e.facet,"facet",t);const n={row:["top","bottom"],column:["left","right"]};for(const o of wd)if(e[o]){var i;const r=bd("labelOrient",null===(i=e[o])||void 0===i?void 0:i.header,t,o);if(T(n[o],r))return Sd(e[o],o,t)}}assembleMarks(){const{child:e}=this,t=function(e){const t=[],n=Vm(t);for(const t of e.children)n(t,{source:e.name,name:null,transform:[]});return t}(this.component.data.facetRoot),n=e.assembleGroupEncodeEntry(!1),i=this.assembleLabelTitle()||e.assembleTitle(),o=e.assembleGroupStyle();return[{name:this.getName("cell"),type:"group",...i?{title:i}:{},...o?{style:o}:{},from:{facet:this.assembleFacet()},sort:{field:xt.map((e=>this.facetSortFields(e))).flat(),order:xt.map((e=>this.facetSortOrder(e))).flat()},...t.length>0?{data:t}:{},...n?{encode:{update:n}}:{},...e.assembleGroup(ml(this,[]))}]}getMapping(){return this.facet}}function nh(e,t){for(const a of t){var n,i,o,r;const t=a.data;if(e.name&&a.hasName()&&e.name!==a.dataName)continue;const s=null===(n=e.format)||void 0===n?void 0:n.mesh,c=null===(i=t.format)||void 0===i?void 0:i.feature;if(s&&c)continue;const u=null===(o=e.format)||void 0===o?void 0:o.feature;if((u||c)&&u!==c)continue;const l=null===(r=t.format)||void 0===r?void 0:r.mesh;if(!s&&!l||s===l)if(_c(e)&&_c(t)){if(_(e.values,t.values))return a}else if(Bc(e)&&Bc(t)){if(e.url===t.url)return a}else if(zc(e)&&e.name===a.dataName)return a}return null}function ih(e){var t,n,i;let o=function(e,t){if(e.data||!e.parent){if(null===e.data){const e=new Fp({values:[]});return t.push(e),e}const n=nh(e.data,t);if(n)return Oc(e.data)||(n.data.format=R({},e.data.format,n.data.format)),!n.hasName()&&e.data.name&&(n.dataName=e.data.name),n;{const n=new Fp(e.data);return t.push(n),n}}return e.parent.component.data.facetRoot?e.parent.component.data.facetRoot:e.parent.component.data.main}(e,e.component.data.sources);const{outputNodes:r,outputNodeRefCounts:a}=e.component.data,s=e.parent?e.parent.component.data.ancestorParse.clone():new Sc,c=e.data;Oc(c)?(Nc(c)?o=new Dp(o,c.sequence):jc(c)&&(o=new Ap(o,c.graticule)),s.parseNothing=!0):null===(null==c||null===(t=c.format)||void 0===t?void 0:t.parse)&&(s.parseNothing=!0),o=null!==(n=xp.makeExplicit(o,e,s))&&void 0!==n?n:o,o=new wp(o);const u=e.parent&&_m(e.parent);var l;(Em(e)||Sm(e))&&(u&&(o=null!==(l=pp.makeFromEncoding(o,e))&&void 0!==l?l:o));e.transforms.length>0&&(o=function(e,t,n){let i=0;for(const a of t.transforms){let s,c=void 0;if(Jc(a))s=e=new gd(e,a),c="derived";else if(Tc(a)){var o;const i=yp(a);s=e=null!==(o=xp.makeWithAncestors(e,{},i,n))&&void 0!==o?o:e,e=new ed(e,t,a.filter)}else if(Xc(a))s=e=pp.makeFromTransform(e,a,t),c="number";else if($c(a))c="date",void 0===n.getWithExplicit(a.field).value&&(e=new xp(e,{[a.field]:c}),n.set(a.field,c,!1)),s=e=Vu.makeFromTransform(e,a);else if(Kc(a))s=e=hp.makeFromTransform(e,a),c="number",zl(t)&&(e=new wp(e));else if(Lc(a))s=e=Wm.make(e,t,a,i++),c="derived";else if(Gc(a))s=e=new Ip(e,a),c="number";else if(Vc(a))s=e=new Wp(e,a),c="number";else if(Zc(a))s=e=Up.makeFromTransform(e,a),c="derived";else if(eu(a))s=e=new Mm(e,a),c="derived";else if(Yc(a))s=e=new jm(e,a),c="derived";else if(qc(a))s=e=new Hm(e,a),c="derived";else if(Hc(a))e=new Gm(e,a);else if(Qc(a))s=e=qm.makeFromTransform(e,a),c="derived";else if(Rc(a))s=e=new Nm(e,a),c="derived";else if(Wc(a))s=e=new Um(e,a),c="derived";else if(Uc(a))s=e=new Im(e,a),c="derived";else{if(!Ic(a)){si("Ignoring an invalid transform: ".concat(P(a),"."));continue}s=e=new Rm(e,a),c="derived"}if(s&&void 0!==c)for(const e of null!==(r=s.producedFields())&&void 0!==r?r:[]){var r;n.set(e,c,!1)}}return e}(o,e,s));const f=function(e){const t={};if(Em(e)&&e.component.selection)for(const n of J(e.component.selection)){const i=e.component.selection[n];for(const e of i.project.items)!e.channel&&ce(e.field)>1&&(t[e.field]="flatten")}return t}(e),d=bp(e);if(o=null!==(i=xp.makeWithAncestors(o,{},{...f,...d},s))&&void 0!==i?i:o,Em(e)&&(o=Tm.parseAll(o,e),o=Lm.parseAll(o,e)),Em(e)||Sm(e)){var p,m;if(!u)o=null!==(m=pp.makeFromEncoding(o,e))&&void 0!==m?m:o;o=null!==(p=Vu.makeFromEncoding(o,e))&&void 0!==p?p:o,o=gd.parseAllForSortIndex(o,e)}const h=e.getDataName(Mc.Raw),g=new Gu(o,h,Mc.Raw,a);if(r[h]=g,o=g,Em(e)){var v,y;const t=hp.makeFromEncoding(o,e);t&&(o=t,zl(e)&&(o=new wp(o))),o=null!==(v=qm.makeFromEncoding(o,e))&&void 0!==v?v:o,o=null!==(y=Up.makeFromEncoding(o,e))&&void 0!==y?y:o}var b;Em(e)&&(o=null!==(b=Pm.make(o,e))&&void 0!==b?b:o);const x=e.getDataName(Mc.Main),w=new Gu(o,x,Mc.Main,a);r[x]=w,o=w,Em(e)&&function(e,t){Bl(e,(n=>{const i=n.name,o=e.getName("lookup_".concat(i));e.component.data.outputNodes[o]=n.materialized=new Gu(new ed(t,e,{selection:i}),o,Mc.Lookup,e.component.data.outputNodeRefCounts)}))}(e,w);let A=null;if(Sm(e)){var D;const t=e.getName("facet");o=null!==(D=function(e,t){const{row:n,column:i}=t;if(n&&i){let t=null;for(const o of[n,i])if(Er(o.sort)){const{field:n,op:i=Dr}=o.sort;e=t=new Wp(e,{joinaggregate:[{op:i,field:n,as:eh(o,o.sort,{forAs:!0})}],groupby:[Kr(o)]})}return t}return null}(o,e.facet))&&void 0!==D?D:o,A=new gp(o,e,t,w.getSource()),r[t]=A}return{...e.component.data,outputNodes:r,outputNodeRefCounts:a,raw:g,main:w,facetRoot:A,ancestorParse:s}}class oh extends zm{constructor(e,t,n,i){var o,r,a,s;super(e,"concat",t,n,i,e.resolve),Bn(this,"children",void 0),"shared"!==(null===(o=e.resolve)||void 0===o||null===(r=o.axis)||void 0===r?void 0:r.x)&&"shared"!==(null===(a=e.resolve)||void 0===a||null===(s=a.axis)||void 0===s?void 0:s.y)||si("Axes cannot be shared in concatenated or repeated views yet (https://github.com/vega/vega-lite/issues/2415)."),this.children=this.getChildren(e).map(((e,t)=>Eh(e,this,this.getName("concat_"+t),void 0,i)))}parseData(){this.component.data=ih(this);for(const e of this.children)e.parseData()}parseSelections(){this.component.selection={};for(const e of this.children){e.parseSelections();for(const t of J(e.component.selection))this.component.selection[t]=e.component.selection[t]}}parseMarkGroup(){for(const e of this.children)e.parseMarkGroup()}parseAxesAndHeaders(){for(const e of this.children)e.parseAxesAndHeaders()}getChildren(e){return Ss(e)?e.vconcat:Bs(e)?e.hconcat:e.concat}parseLayoutSize(){!function(e){$m(e);const t=1===e.layout.columns?"width":"childWidth",n=void 0===e.layout.columns?"height":"childHeight";Km(e,t),Km(e,n)}(this)}parseAxisGroup(){return null}assembleSelectionTopLevelSignals(e){return this.children.reduce(((e,t)=>t.assembleSelectionTopLevelSignals(e)),e)}assembleSignals(){return this.children.forEach((e=>e.assembleSignals())),[]}assembleLayoutSignals(){const e=Nd(this);for(const t of this.children)e.push(...t.assembleLayoutSignals());return e}assembleSelectionData(e){return this.children.reduce(((e,t)=>t.assembleSelectionData(e)),e)}assembleMarks(){return this.children.map((e=>{const t=e.assembleTitle(),n=e.assembleGroupStyle(),i=e.assembleGroupEncodeEntry(!1);return{type:"group",name:e.getName("group"),...t?{title:t}:{},...n?{style:n}:{},...i?{encode:{update:i}}:{},...e.assembleGroup()}}))}assembleDefaultLayout(){const e=this.layout.columns;return{...null!=e?{columns:e}:{},bounds:"full",align:"each"}}}const rh={disable:1,gridScale:1,scale:1,...xe,labelExpr:1,encode:1},ah=J(rh);class sh extends Ac{constructor(e={},t={},n=!1){super(),this.explicit=e,this.implicit=t,this.mainExtracted=n}clone(){return new sh(z(this.explicit),z(this.implicit),this.mainExtracted)}hasAxisPart(e){return"axis"===e||("grid"===e||"title"===e?!!this.get(e):!(!1===(t=this.get(e))||null===t));var t}hasOrientSignalRef(){return Fi(this.explicit.orient)}}const ch={bottom:"top",top:"bottom",left:"right",right:"left"};function uh(e,t){if(!e)return t.map((e=>e.clone()));{if(e.length!==t.length)return;const n=e.length;for(let i=0;i{switch(n){case"title":return Ma(e,t);case"gridScale":return{explicit:e.explicit,value:ue(e.value,t.value)}}return Cc(e,t,n,"axis")}));e.setWithExplicit(n,i)}return e}function fh(e,t,n,i,o){if("disable"===t)return void 0!==n;switch(n=n||{},t){case"titleAngle":case"labelAngle":return e===(Fi(n.labelAngle)?n.labelAngle:me(n.labelAngle));case"values":return!!n.values;case"encode":return!!n.encoding||!!n.labelAngle;case"title":if(e===hd(i,o))return!0}return e===n[t]}const dh=new Set(["grid","translate","format","formatType","orient","labelExpr","tickCount","position","tickMinStep"]);function ph(e,t){var n,i,o,r,a;let s=t.axis(e);const c=new sh,u=ua(t.encoding[e]),{mark:l,config:f}=t,d=(null===(n=s)||void 0===n?void 0:n.orient)||(null===(i=f["x"===e?"axisX":"axisY"])||void 0===i?void 0:i.orient)||(null===(o=f.axis)||void 0===o?void 0:o.orient)||function(e){return"x"===e?"bottom":"left"}(e),p=t.getScaleComponent(e).get("type"),m=cd(e,p,d,t.config),h=void 0!==s?!s:ld("disable",f.style,null===(r=s)||void 0===r?void 0:r.style,m).configValue;if(c.set("disable",h,void 0!==s),h)return c;s=s||{};const g=function(e,t,n,i,o){const r=null==t?void 0:t.labelAngle;if(void 0!==r)return Fi(r)?r:me(r);{const{configValue:r}=ld("labelAngle",i,null==t?void 0:t.style,o);return void 0!==r?me(r):n!==Me||!T([Gi,Ii],e.type)||qr(e)&&e.timeUnit?void 0:270}}(u,s,e,f.style,m),v={fieldOrDatumDef:u,axis:s,channel:e,model:t,scaleType:p,orient:d,labelAngle:g,mark:l,config:f};for(const n of ah){const i=n in fd?fd[n](v):Ae(n)?s[n]:void 0,o=void 0!==i,r=fh(i,n,s,t,e);if(o&&r)c.set(n,i,r);else{const{configValue:e,configFrom:t}=Ae(n)&&"values"!==n?ld(n,f.style,s.style,m):{},a=void 0!==e;o&&!a?c.set(n,i,r):("vgAxisConfig"!==t||dh.has(n)&&a||ve(e)||Fi(e))&&c.set(n,e,!1)}}const y=null!==(a=s.encoding)&&void 0!==a?a:{},b=ye.reduce(((n,i)=>{var o;if(!c.hasAxisPart(i))return n;const r=Ld(null!==(o=y[i])&&void 0!==o?o:{},t),a="labels"===i?function(e,t,n){var i;const{encoding:o,config:r}=e,a=null!==(i=ua(o[t]))&&void 0!==i?i:ua(o[Mt(t)]),s=e.axis(t)||{},{format:c,formatType:u}=s;return dr(u)?{text:gr({fieldOrDatumDef:a,field:"datum.value",format:c,formatType:u,config:r}),...n}:n}(t,e,r):r;return void 0===a||Y(a)||(n[i]={update:a}),n}),{});return Y(b)||c.set("encode",b,!!s.encoding||void 0!==s.labelAngle),c}function mh(e,t,n){const i=Oo(e),o=Ba("orient",i,n);var r,a;if(i.orient=function(e,t,n){switch(e){case qo:case Go:case Vo:case Uo:case Ro:case To:return}const{x:i,y:o,x2:r,y2:a}=t;switch(e){case Mo:if(qr(i)&&(kn(i.bin)||qr(o)&&o.aggregate&&!i.aggregate))return"vertical";if(qr(o)&&(kn(o.bin)||qr(i)&&i.aggregate&&!o.aggregate))return"horizontal";if(a||r){if(n)return n;if(!r&&(qr(i)&&i.type===Ui&&!Fn(i.bin)||Ir(i)))return"horizontal";if(!a&&(qr(o)&&o.type===Ui&&!Fn(o.bin)||Ir(o)))return"vertical"}case Wo:if(r&&(!qr(i)||!kn(i.bin))&&a&&(!qr(o)||!kn(o.bin)))return;case jo:if(a)return qr(o)&&kn(o.bin)?"horizontal":"vertical";if(r)return qr(i)&&kn(i.bin)?"vertical":"horizontal";if(e===Wo){if(i&&!o)return"vertical";if(o&&!i)return"horizontal"}case Lo:case Io:{const t=Ur(i),r=Ur(o);if(t&&!r)return"tick"!==e?"horizontal":"vertical";if(!t&&r)return"tick"!==e?"vertical":"horizontal";if(t&&r){const t=i,r=o,a=t.type===Hi,s=r.type===Hi;return a&&!s?"tick"!==e?"vertical":"horizontal":!a&&s?"tick"!==e?"horizontal":"vertical":!t.aggregate&&r.aggregate?"tick"!==e?"vertical":"horizontal":t.aggregate&&!r.aggregate?"tick"!==e?"horizontal":"vertical":n||"vertical"}return n||void 0}}return"vertical"}(i.type,t,o),void 0!==o&&o!==i.orient&&si((r=i.orient,a=o,'Specified orient "'.concat(r,'" overridden with "').concat(a,'".'))),"bar"===i.type&&i.orient){const e=Ba("cornerRadiusEnd",i,n);if(void 0!==e){const n="horizontal"===i.orient&&t.x2||"vertical"===i.orient&&t.y2?["cornerRadius"]:tr[i.orient];for(const t of n)i[t]=e;void 0!==i.cornerRadiusEnd&&delete i.cornerRadiusEnd}}void 0===Ba("opacity",i,n)&&(i.opacity=function(e,t){if(T([qo,Io,Go,Vo],e)&&!Ra(t))return.7;return}(i.type,t));return void 0===Ba("cursor",i,n)&&(i.cursor=function(e,t,n){if(t.href||e.href||Ba("href",e,n))return"pointer";return e.cursor}(i,t,n)),i}function hh(e,t){const{config:n}=e;return{...Tu(e,{align:"ignore",baseline:"ignore",color:"include",size:"include",orient:"ignore",theta:"ignore"}),...Fu("x",e,{defaultPos:"mid"}),...Fu("y",e,{defaultPos:"mid"}),...xu("size",e),...xu("angle",e),...gh(e,n,t)}}function gh(e,t,n){return n?{shape:{value:n}}:xu("shape",e)}function vh(e,t,n){if(void 0===Ba("align",e,n))return"center"}function yh(e,t,n){if(void 0===Ba("baseline",e,n))return"middle"}function bh(e){var t;const{config:n,markDef:i}=e,{orient:o}=i,r="horizontal"===o?"width":"height",a=e.getScaleComponent("horizontal"===o?"x":"y"),s=null!==(t=Ba("size",i,n,{vgChannel:r}))&&void 0!==t?t:n.tick.bandSize;if(void 0!==s)return s;{const e=a?a.get("range"):void 0;if(e&&ki(e)&&b(e.step))return 3*e.step/4;return 3*Ms(n.view,r)/4}}const xh={arc:{vgMark:"arc",encodeEntry:e=>({...Tu(e,{align:"ignore",baseline:"ignore",color:"include",size:"ignore",orient:"ignore",theta:"ignore"}),...Fu("x",e,{defaultPos:"mid"}),...Fu("y",e,{defaultPos:"mid"}),...Ou(e,"radius","arc"),...Ou(e,"theta","arc")})},area:{vgMark:"area",encodeEntry:e=>({...Tu(e,{align:"ignore",baseline:"ignore",color:"include",orient:"include",size:"ignore",theta:"ignore"}),...Bu("x",e,{defaultPos:"zeroOrMin",defaultPos2:"zeroOrMin",range:"horizontal"===e.markDef.orient}),...Bu("y",e,{defaultPos:"zeroOrMin",defaultPos2:"zeroOrMin",range:"vertical"===e.markDef.orient}),...Ru(e)})},bar:{vgMark:"rect",encodeEntry:e=>({...Tu(e,{align:"ignore",baseline:"ignore",color:"include",orient:"ignore",size:"ignore",theta:"ignore"}),...Ou(e,"x","bar"),...Ou(e,"y","bar")})},circle:{vgMark:"symbol",encodeEntry:e=>hh(e,"circle")},geoshape:{vgMark:"shape",encodeEntry:e=>({...Tu(e,{align:"ignore",baseline:"ignore",color:"include",size:"ignore",orient:"ignore",theta:"ignore"})}),postEncodingTransform:e=>{const{encoding:t}=e,n=t.shape;return[{type:"geoshape",projection:e.projectionName(),...n&&qr(n)&&n.type===Vi?{field:Kr(n,{expr:"datum"})}:{}}]}},image:{vgMark:"image",encodeEntry:e=>({...Tu(e,{align:"ignore",baseline:"ignore",color:"ignore",orient:"ignore",size:"ignore",theta:"ignore"}),...Ou(e,"x","image"),...Ou(e,"y","image"),...du(e,"url")})},line:{vgMark:"line",encodeEntry:e=>({...Tu(e,{align:"ignore",baseline:"ignore",color:"include",size:"ignore",orient:"ignore",theta:"ignore"}),...Fu("x",e,{defaultPos:"mid"}),...Fu("y",e,{defaultPos:"mid"}),...xu("size",e,{vgChannel:"strokeWidth"}),...Ru(e)})},point:{vgMark:"symbol",encodeEntry:e=>hh(e)},rect:{vgMark:"rect",encodeEntry:e=>({...Tu(e,{align:"ignore",baseline:"ignore",color:"include",orient:"ignore",size:"ignore",theta:"ignore"}),...Ou(e,"x","rect"),...Ou(e,"y","rect")})},rule:{vgMark:"rule",encodeEntry:e=>{const{markDef:t}=e,n=t.orient;return e.encoding.x||e.encoding.y||e.encoding.latitude||e.encoding.longitude?{...Tu(e,{align:"ignore",baseline:"ignore",color:"include",orient:"ignore",size:"ignore",theta:"ignore"}),...Bu("x",e,{defaultPos:"horizontal"===n?"zeroOrMax":"mid",defaultPos2:"zeroOrMin",range:"vertical"!==n}),...Bu("y",e,{defaultPos:"vertical"===n?"zeroOrMax":"mid",defaultPos2:"zeroOrMin",range:"horizontal"!==n}),...xu("size",e,{vgChannel:"strokeWidth"})}:{}}},square:{vgMark:"symbol",encodeEntry:e=>hh(e,"square")},text:{vgMark:"text",encodeEntry:e=>{const{config:t,encoding:n}=e;return{...Tu(e,{align:"include",baseline:"include",color:"include",size:"ignore",orient:"ignore",theta:"include"}),...Fu("x",e,{defaultPos:"mid"}),...Fu("y",e,{defaultPos:"mid"}),...du(e),...xu("size",e,{vgChannel:"fontSize"}),...xu("angle",e),...Wu("align",vh(e.markDef,n,t)),...Wu("baseline",yh(e.markDef,n,t)),...Fu("radius",e,{defaultPos:null,isMidPoint:!0}),...Fu("theta",e,{defaultPos:null,isMidPoint:!0})}}},tick:{vgMark:"rect",encodeEntry:e=>{const{config:t,markDef:n}=e,i=n.orient,o="horizontal"===i?"width":"height",r="horizontal"===i?"height":"width";return{...Tu(e,{align:"ignore",baseline:"ignore",color:"include",orient:"ignore",size:"ignore",theta:"ignore"}),...Fu("x",e,{defaultPos:"mid",vgChannel:"xc"}),...Fu("y",e,{defaultPos:"mid",vgChannel:"yc"}),...xu("size",e,{defaultValue:bh(e),vgChannel:o}),[r]:Fa(Ba("thickness",n,t))}}},trail:{vgMark:"trail",encodeEntry:e=>({...Tu(e,{align:"ignore",baseline:"ignore",color:"include",size:"include",orient:"ignore",theta:"ignore"}),...Fu("x",e,{defaultPos:"mid"}),...Fu("y",e,{defaultPos:"mid"}),...xu("size",e),...Ru(e)})}};function wh(e){if(T([Lo,jo,Ho],e.mark)){const t=Ga(e.mark,e.encoding);if(t.length>0)return function(e,t){return[{name:e.getName("pathgroup"),type:"group",from:{facet:{name:Ah+e.requestDataName(Mc.Main),data:e.requestDataName(Mc.Main),groupby:t}},encode:{update:{width:{field:{group:"width"}},height:{field:{group:"height"}}}},marks:Fh(e,{fromPrefix:Ah})}]}(e,t)}else if(T([Mo],e.mark)){const t=Bi.some((t=>Ba(t,e.markDef,e.config)));if(e.stack&&!e.fieldDef("size")&&t)return function(e){const[t]=Fh(e,{fromPrefix:Dh}),n=e.scaleName(e.stack.fieldChannel),i=(t={})=>e.vgField(e.stack.fieldChannel,t),o=(e,t)=>{const o=[i({prefix:"min",suffix:"start",expr:t}),i({prefix:"max",suffix:"start",expr:t}),i({prefix:"min",suffix:"end",expr:t}),i({prefix:"max",suffix:"end",expr:t})];return"".concat(e,"(").concat(o.map((e=>"scale('".concat(n,"',").concat(e,")"))).join(","),")")};let r,a;"x"===e.stack.fieldChannel?(r={...O(t.encode.update,["y","yc","y2","height",...Bi]),x:{signal:o("min","datum")},x2:{signal:o("max","datum")},clip:{value:!0}},a={x:{field:{group:"x"},mult:-1},height:{field:{group:"height"}}},t.encode.update={...N(t.encode.update,["y","yc","y2"]),height:{field:{group:"height"}}}):(r={...O(t.encode.update,["x","xc","x2","width"]),y:{signal:o("min","datum")},y2:{signal:o("max","datum")},clip:{value:!0}},a={y:{field:{group:"y"},mult:-1},width:{field:{group:"width"}}},t.encode.update={...N(t.encode.update,["x","xc","x2"]),width:{field:{group:"width"}}});for(const n of Bi){const i=_a(n,e.markDef,e.config);t.encode.update[n]?(r[n]=t.encode.update[n],delete t.encode.update[n]):i&&(r[n]=Fa(i)),i&&(t.encode.update[n]={value:0})}const s=e.fieldDef(e.stack.groupbyChannel),c=Kr(s)?[Kr(s)]:[];((null==s?void 0:s.bin)||(null==s?void 0:s.timeUnit))&&c.push(Kr(s,{binSuffix:"end"}));r=["stroke","strokeWidth","strokeJoin","strokeCap","strokeDash","strokeDashOffset","strokeMiterLimit","strokeOpacity"].reduce(((n,i)=>{if(t.encode.update[i])return{...n,[i]:t.encode.update[i]};{const t=_a(i,e.markDef,e.config);return void 0!==t?{...n,[i]:Fa(t)}:n}}),r),r.stroke&&(r.strokeForeground={value:!0},r.strokeOffset={value:0});return[{type:"group",from:{facet:{data:e.requestDataName(Mc.Main),name:Dh+e.requestDataName(Mc.Main),groupby:c,aggregate:{fields:[i({suffix:"start"}),i({suffix:"start"}),i({suffix:"end"}),i({suffix:"end"})],ops:["min","max","min","max"]}}},encode:{update:r},marks:[{type:"group",encode:{update:a},marks:[t]}]}]}(e)}return Fh(e)}const Ah="faceted_path_";const Dh="stack_group_";function Fh(e,t={fromPrefix:""}){const{mark:n,markDef:i,encoding:o,config:r}=e,a=ue(i.clip,function(e){const t=e.getScaleComponent("x"),n=e.getScaleComponent("y");return!!(t&&t.get("selectionExtent")||n&&n.get("selectionExtent"))||void 0}(e),function(e){const t=e.component.projection;return!(!t||t.isFit)||void 0}(e)),s=Sa(i),c=o.key,l=function(e){const{encoding:t,stack:n,mark:i,markDef:o,config:r}=e,a=t.order;if(!(!u(a)&&Vr(a)&&M(a.value)||!a&&M(Ba("order",o,r)))){if((u(a)||qr(a))&&!n)return Na(a,{expr:"datum"});if(Jo(i)){const n="horizontal"===o.orient?"y":"x",i=t[n];if(qr(i)){const t=i.sort;return u(t)?{field:Kr(i,{prefix:n,suffix:"sort_index",expr:"datum"})}:Er(t)?{field:Kr({aggregate:Ra(e.encoding)?t.op:void 0,field:t.field},{expr:"datum"})}:Cr(t)?{field:Kr(e.fieldDef(t.encoding),{expr:"datum"}),order:t.order}:null===t?void 0:{field:Kr(i,{binSuffix:e.stack&&e.stack.impute?"mid":void 0,expr:"datum"})}}}}}(e),f=function(e){if(!e.component.selection)return null;const t=J(e.component.selection).length;let n=t,i=e.parent;for(;i&&0===n;)n=J(i.component.selection).length,i=i.parent;return n?{interactive:t>0||!!e.encoding.tooltip}:null}(e),d=Ba("aria",i,r),p=xh[n].postEncodingTransform?xh[n].postEncodingTransform(e):null;return[{name:e.getName("marks"),type:xh[n].vgMark,...a?{clip:!0}:{},...s?{style:s}:{},...c?{key:c.field}:{},...l?{sort:l}:{},...f||{},...!1===d?{aria:d}:{},from:{data:t.fromPrefix+e.requestDataName(Mc.Main)},encode:{update:xh[n].encodeEntry(e)},...p?{transform:p}:{}}]}class kh extends Om{constructor(e,t,n,i={},o){super(e,"unit",t,n,o,void 0,Ns(e)?e.view:void 0),Bn(this,"markDef",void 0),Bn(this,"encoding",void 0),Bn(this,"specifiedScales",{}),Bn(this,"stack",void 0),Bn(this,"specifiedAxes",{}),Bn(this,"specifiedLegends",{}),Bn(this,"specifiedProjection",{}),Bn(this,"selection",{}),Bn(this,"children",[]);const r=$o(e.mark)?{...e.mark}:{type:e.mark},a=r.type;void 0===r.filled&&(r.filled=function(e,t,{graticule:n}){if(n)return!1;const i=_a("filled",e,t),o=e.type;return ue(i,o!==qo&&o!==Lo&&o!==Wo)}(r,o,{graticule:e.data&&jc(e.data)}));const s=this.encoding=Ua(e.encoding||{},a,r.filled,o);this.markDef=mh(r,s,o),this.size=function({encoding:e,size:t}){for(const n of Zt){const i=Tt(n);Os(t[i])&&Ur(e[n])&&(delete t[i],si(ei(i)))}return t}({encoding:s,size:Ns(e)?{...i,...e.width?{width:e.width}:{},...e.height?{height:e.height}:{}}:i}),this.stack=nc(a,s),this.specifiedScales=this.initScales(a,s),this.specifiedAxes=this.initAxes(s),this.specifiedLegends=this.initLegends(s),this.specifiedProjection=e.projection,this.selection=e.selection}get hasProjection(){const{encoding:e}=this,t=this.mark===Yo,n=e&>.some((t=>Hr(e[t])));return t||n}scaleDomain(e){const t=this.specifiedScales[e];return t?t.domain:void 0}axis(e){return this.specifiedAxes[e]}legend(e){return this.specifiedLegends[e]}initScales(e,t){return gn.reduce(((e,n)=>{const i=ua(t[n]);var o;i&&(e[n]=this.initScale(null!==(o=i.scale)&&void 0!==o?o:{}));return e}),{})}initScale(e){const{domain:t,range:n}=e,i=Oo(e);return u(t)&&(i.domain=t.map(Aa)),u(n)&&(i.range=n.map(Aa)),i}initAxes(e){return Zt.reduce(((t,n)=>{const i=e[n];if(Hr(i)||n===Me&&Hr(e.x2)||n===Te&&Hr(e.y2)){const e=Hr(i)?i.axis:void 0;t[n]=e?this.initAxis({...e}):e}return t}),{})}initAxis(e){const t=J(e),n={};for(const i of t){const t=e[i];n[i]=ve(t)?wa(t):Aa(t)}return n}initLegends(e){return mn.reduce(((t,n)=>{const i=ua(e[n]);if(i&&function(e){switch(e){case Je:case Xe:case Qe:case Ke:case $e:case et:case it:case ot:return!0;case tt:case nt:case Ze:return!1}}(n)){const e=i.legend;t[n]=e?Oo(e):e}return t}),{})}parseData(){this.component.data=ih(this)}parseLayoutSize(){!function(e){const{size:t,component:n}=e;for(const i of Zt){const o=Tt(i);if(t[o]){const e=t[o];n.layoutSize.set(o,Os(e)?"step":e,!0)}else{const t=Zm(e,o);n.layoutSize.set(o,t,!1)}}}(this)}parseSelections(){this.component.selection=function(e,t){const n={},i=e.config.selection;for(const r of J(null!=t?t:{})){const a=z(t[r]),{fields:s,encodings:c,...u}=i[a.type];for(const e in u){var o;"encodings"===e&&a.fields||"fields"===e&&a.encodings||("mark"===e&&(a[e]={...u[e],...a[e]}),(void 0===a[e]||!0===a[e])&&(a[e]=null!==(o=u[e])&&void 0!==o?o:a[e]))}const l=K(r),f=n[l]={...a,name:l,events:x(a.on)?su(a.on,"scope"):z(a.on)};dl(f,(n=>{n.has(f)&&n.parse&&n.parse(e,f,a,t[r])}))}return n}(this,this.selection)}parseMarkGroup(){this.component.mark=wh(this)}parseAxesAndHeaders(){var e;this.component.axes=(e=this,Zt.reduce(((t,n)=>(e.component.scales[n]&&(t[n]=[ph(n,e)]),t)),{}))}assembleSelectionTopLevelSignals(e){return function(e,t){let n=!1;Bl(e,((i,o)=>{const r=i.name,a=w(r+Fl);if(0===t.filter((e=>e.name===r)).length){const e="global"===i.resolve?"union":i.resolve,n="multi"===i.type?", true)":")";t.push({name:i.name,update:"".concat(El,"(").concat(a,", ").concat(w(e)).concat(n)})}n=!0,o.topLevelSignals&&(t=o.topLevelSignals(e,i,t)),dl(i,(n=>{n.topLevelSignals&&(t=n.topLevelSignals(e,i,t))}))})),n&&0===t.filter((e=>"unit"===e.name)).length&&t.unshift({name:"unit",value:{},on:[{events:"mousemove",update:"isTuple(group()) ? group() : unit"}]});return gl(t)}(this,e)}assembleSignals(){return[...ad(this),...(e=this,t=[],Bl(e,((n,i)=>{const o=n.name;let r=i.modifyExpr(e,n);t.push(...i.signals(e,n)),dl(n,(i=>{i.signals&&(t=i.signals(e,n,t)),i.modifyExpr&&(r=i.modifyExpr(e,n,r))})),t.push({name:o+Cl,on:[{events:{signal:n.name+kl},update:"modify(".concat(w(n.name+Fl),", ").concat(r,")")}]})})),gl(t))];var e,t}assembleSelectionData(e){return function(e,t){const n=[...t];return Bl(e,(t=>{const i={name:t.name+Fl};if(t.init){const n=t.project.items.map((e=>{const{signals:t,...n}=e;return n})),o=t.init.map((e=>pl(e,!1)));i.values="interval"===t.type?[{unit:_l(e,{escape:!1}),fields:n,values:o}]:o.map((t=>({unit:_l(e,{escape:!1}),fields:n,values:t})))}n.filter((e=>e.name===t.name+Fl)).length||n.push(i)})),n}(this,e)}assembleLayout(){return null}assembleLayoutSignals(){return Nd(this)}assembleMarks(){var e;let t=null!==(e=this.component.mark)&&void 0!==e?e:[];return this.parent&&_m(this.parent)||(t=hl(this,t)),t.map(this.correctDataNames)}getMapping(){return this.encoding}get mark(){return this.markDef.type}channelHasField(e){return qa(this.encoding,e)}fieldDef(e){return ca(this.encoding[e])}typedFieldDef(e){const t=this.fieldDef(e);return Gr(t)?t:null}}class Ch extends zm{constructor(e,t,n,i,o){super(e,"layer",t,n,o,e.resolve,e.view),Bn(this,"children",void 0);const r={...i,...e.width?{width:e.width}:{},...e.height?{height:e.height}:{}};this.children=e.layer.map(((e,t)=>{if($s(e))return new Ch(e,this,this.getName("layer_"+t),r,o);if(Ta(e))return new kh(e,this,this.getName("layer_"+t),r,o);throw new Error(zn(e))}))}parseData(){this.component.data=ih(this);for(const e of this.children)e.parseData()}parseLayoutSize(){var e;$m(e=this),Km(e,"width"),Km(e,"height")}parseSelections(){this.component.selection={};for(const e of this.children){e.parseSelections();for(const t of J(e.component.selection))this.component.selection[t]=e.component.selection[t]}}parseMarkGroup(){for(const e of this.children)e.parseMarkGroup()}parseAxesAndHeaders(){!function(e){const{axes:t,resolve:n}=e.component,i={top:0,bottom:0,right:0,left:0};for(const i of e.children){i.parseAxesAndHeaders();for(const o of J(i.component.axes))n.axis[o]=Rd(e.component.resolve,o),"shared"===n.axis[o]&&(t[o]=uh(t[o],i.component.axes[o]),t[o]||(n.axis[o]="independent",delete t[o]))}for(const r of Zt){for(const a of e.children)if(a.component.axes[r]){if("independent"===n.axis[r]){var o;t[r]=(null!==(o=t[r])&&void 0!==o?o:[]).concat(a.component.axes[r]);for(const e of a.component.axes[r]){const{value:t,explicit:n}=e.getWithExplicit("orient");if(!Fi(t)){if(i[t]>0&&!n){const n=ch[t];i[t]>i[n]&&e.set("orient",n,!1)}i[t]++}}}delete a.component.axes[r]}if("independent"===n.axis[r]&&t[r]&&t[r].length>1)for(const e of t[r])e.get("grid")&&!e.explicit.grid&&(e.implicit.grid=!1)}}(this)}assembleSelectionTopLevelSignals(e){return this.children.reduce(((e,t)=>t.assembleSelectionTopLevelSignals(e)),e)}assembleSignals(){return this.children.reduce(((e,t)=>e.concat(t.assembleSignals())),ad(this))}assembleLayoutSignals(){return this.children.reduce(((e,t)=>e.concat(t.assembleLayoutSignals())),Nd(this))}assembleSelectionData(e){return this.children.reduce(((e,t)=>t.assembleSelectionData(e)),e)}assembleTitle(){let e=super.assembleTitle();if(e)return e;for(const t of this.children)if(e=t.assembleTitle(),e)return e}assembleLayout(){return null}assembleMarks(){return function(e,t){for(const n of e.children)Em(n)&&(t=hl(n,t));return t}(this,this.children.flatMap((e=>e.assembleMarks())))}assembleLegends(){return this.children.reduce(((e,t)=>e.concat(t.assembleLegends())),ip(this))}}function Eh(e,t,n,i,o){if(zr(e))return new th(e,t,n,o);if($s(e))return new Ch(e,t,n,i,o);if(Ta(e))return new kh(e,t,n,i,o);if(function(e){return Ss(e)||Bs(e)||Es(e)}(e))return new oh(e,t,n,o);throw new Error(zn(e))}e.accessPathDepth=ce,e.accessPathWithDatum=ne,e.compile=function(e,t={}){var n;t.logger&&(n=t.logger,ai=n),t.fieldTitle&&ia(t.fieldTitle);try{const n=Gs(d(t.config,e.config)),i=bc(e,n),o=Eh(i,null,"",void 0,n);o.parse(),function(e,t){Yp(e.sources);let n=0,i=0;for(let i=0;i<5&&Xp(e,t,!0);i++)n++;e.sources.map(Hp);for(let n=0;n<5&&Xp(e,t,!1);n++)i++;Yp(e.sources),5===Math.max(n,i)&&si("Maximum optimization runs(".concat(5,") reached."))}(o.component.data,o);return{spec:function(e,t,n={},i){const o=e.config?Xs(e.config):void 0,r=[].concat(e.assembleSelectionData([]),function(e,t){const n=[],i=Vm(n);let o=0;for(const t of e.sources){t.hasName()||(t.dataName="source_".concat(o++));const e=t.assemble();i(t,e)}for(const e of n)0===e.transform.length&&delete e.transform;let r=0;for(const[e,t]of n.entries()){var a;0!==(null!==(a=t.transform)&&void 0!==a?a:[]).length||t.source||n.splice(r++,0,n.splice(e,1)[0])}for(const t of n)for(const n of null!==(s=t.transform)&&void 0!==s?s:[]){var s;"lookup"===n.type&&(n.from=e.outputNodes[n.from].getSource())}for(const e of n)e.name in t&&(e.values=t[e.name]);return n}(e.component.data,n)),a=e.assembleProjections(),s=e.assembleTitle(),c=e.assembleGroupStyle(),u=e.assembleGroupEncodeEntry(!0);let l=e.assembleLayoutSignals();l=l.filter((e=>"width"!==e.name&&"height"!==e.name||void 0===e.value||(t[e.name]=+e.value,!1)));const{params:f,...d}=t;return{$schema:"https://vega.github.io/schema/vega/v5.json",...e.description?{description:e.description}:{},...d,...s?{title:s}:{},...c?{style:c}:{},...u?{encode:{update:u}}:{},data:r,...a.length>0?{projections:a}:{},...e.assembleGroup([...l,...e.assembleSelectionTopLevelSignals([]),...As(f)]),...o?{config:o}:{},...i?{usermeta:i}:{}}}(o,function(e,t,n,i){const o=i.component.layoutSize.get("width"),r=i.component.layoutSize.get("height");void 0===t?(t={type:"pad"},i.hasAxisOrientSignalRef()&&(t.resize=!0)):x(t)&&(t={type:t});if(o&&r&&(a=t.type,"fit"===a||"fit-x"===a||"fit-y"===a))if("step"===o&&"step"===r)si(jn()),t.type="pad";else if("step"===o||"step"===r){const e="step"===o?"width":"height";si(jn(on(e)));const n="width"===e?"height":"width";t.type=function(e){return e?"fit-".concat(on(e)):"fit"}(n)}var a;return{...1===J(t).length&&t.type?"pad"===t.type?{}:{autosize:t.type}:{autosize:t},...zs(n,!1),...zs(e,!0)}}(e,i.autosize,n,o),e.datasets,e.usermeta),normalized:i}}finally{t.logger&&(ai=ri),t.fieldTitle&&ia(ta)}},e.contains=T,e.deepEqual=_,e.deleteNestedProperty=ee,e.duplicate=z,e.entries=Q,e.every=q,e.fieldIntersection=V,e.flatAccessWithDatum=ie,e.getFirstDefined=ue,e.hasIntersection=H,e.hash=j,e.internalField=de,e.isBoolean=$,e.isEmpty=Y,e.isEqual=function(e,t){const n=J(e),i=J(t);if(n.length!==i.length)return!1;for(const i of n)if(e[i]!==t[i])return!1;return!0},e.isInternalField=pe,e.isNullOrFalse=M,e.isNumeric=he,e.keys=J,e.logicalExpr=Z,e.mergeDeep=R,e.normalize=bc,e.normalizeAngle=me,e.omit=N,e.pick=O,e.prefixGenerator=G,e.removePathFromField=se,e.replaceAll=ae,e.replacePathInField=re,e.resetIdCounter=function(){le=42},e.setEqual=I,e.some=L,e.stringify=P,e.titleCase=te,e.unique=U,e.uniqueId=fe,e.vals=X,e.varName=K,e.version="4.17.0",Object.defineProperty(e,"__esModule",{value:!0})})); +//# sourceMappingURL=vega-lite.min.js.map diff --git a/src/citationnet/static/js/vega.min.js.map b/src/citationnet/static/js/vega.min.js.map new file mode 100644 index 0000000..c87db80 --- /dev/null +++ b/src/citationnet/static/js/vega.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vega.min.js","sources":["../../vega-util/build/vega-util.module.js","../../../node_modules/d3-dsv/src/dsv.js","../../../node_modules/topojson-client/src/identity.js","../../../node_modules/topojson-client/src/feature.js","../../../node_modules/topojson-client/src/transform.js","../../../node_modules/topojson-client/src/reverse.js","../../../node_modules/topojson-client/src/stitch.js","../../../node_modules/topojson-client/src/mesh.js","../../../node_modules/d3-array/src/ascending.js","../../../node_modules/d3-array/src/bisector.js","../../../node_modules/d3-array/src/number.js","../../../node_modules/d3-array/src/bisect.js","../../../node_modules/d3-array/src/fsum.js","../../../node_modules/d3-array/src/ticks.js","../../../node_modules/d3-array/src/max.js","../../../node_modules/d3-array/src/min.js","../../../node_modules/d3-array/src/quickselect.js","../../../node_modules/d3-array/src/quantile.js","../../../node_modules/d3-array/src/median.js","../../../node_modules/d3-array/src/merge.js","../../../node_modules/d3-array/src/range.js","../../../node_modules/d3-array/src/sum.js","../../../node_modules/d3-format/src/formatDecimal.js","../../../node_modules/d3-format/src/exponent.js","../../../node_modules/d3-format/src/formatSpecifier.js","../../../node_modules/d3-format/src/formatPrefixAuto.js","../../../node_modules/d3-format/src/formatRounded.js","../../../node_modules/d3-format/src/formatTypes.js","../../../node_modules/d3-format/src/identity.js","../../../node_modules/d3-format/src/locale.js","../../../node_modules/d3-format/src/defaultLocale.js","../../../node_modules/d3-format/src/formatGroup.js","../../../node_modules/d3-format/src/formatNumerals.js","../../../node_modules/d3-format/src/formatTrim.js","../../../node_modules/d3-format/src/precisionFixed.js","../../../node_modules/d3-format/src/precisionPrefix.js","../../../node_modules/d3-format/src/precisionRound.js","../../../node_modules/d3-time/src/interval.js","../../../node_modules/d3-time/src/millisecond.js","../../../node_modules/d3-time/src/duration.js","../../../node_modules/d3-time/src/second.js","../../../node_modules/d3-time/src/minute.js","../../../node_modules/d3-time/src/hour.js","../../../node_modules/d3-time/src/day.js","../../../node_modules/d3-time/src/week.js","../../../node_modules/d3-time/src/month.js","../../../node_modules/d3-time/src/year.js","../../../node_modules/d3-time/src/utcMinute.js","../../../node_modules/d3-time/src/utcHour.js","../../../node_modules/d3-time/src/utcDay.js","../../../node_modules/d3-time/src/utcWeek.js","../../../node_modules/d3-time/src/utcMonth.js","../../../node_modules/d3-time/src/utcYear.js","../../vega-time/build/vega-time.module.js","../../../node_modules/d3-time-format/src/locale.js","../../../node_modules/d3-time-format/src/defaultLocale.js","../../vega-format/build/vega-format.module.js","../../vega-loader/build/vega-loader.browser.module.js","../../vega-dataflow/build/vega-dataflow.module.js","../../vega-statistics/build/vega-statistics.module.js","../../../node_modules/d3-array/src/deviation.js","../../../node_modules/d3-array/src/variance.js","../../vega-transforms/build/vega-transforms.module.js","../../../node_modules/d3-array/src/mean.js","../../../node_modules/d3-path/src/path.js","../../../node_modules/d3-shape/src/constant.js","../../../node_modules/d3-shape/src/math.js","../../../node_modules/d3-shape/src/arc.js","../../../node_modules/d3-shape/src/array.js","../../../node_modules/d3-shape/src/curve/linear.js","../../../node_modules/d3-shape/src/point.js","../../../node_modules/d3-shape/src/line.js","../../../node_modules/d3-shape/src/area.js","../../../node_modules/d3-shape/src/symbol/circle.js","../../../node_modules/d3-shape/src/noop.js","../../../node_modules/d3-shape/src/curve/basis.js","../../../node_modules/d3-shape/src/curve/basisClosed.js","../../../node_modules/d3-shape/src/curve/basisOpen.js","../../../node_modules/d3-shape/src/curve/bundle.js","../../../node_modules/d3-shape/src/curve/cardinal.js","../../../node_modules/d3-shape/src/curve/cardinalClosed.js","../../../node_modules/d3-shape/src/curve/cardinalOpen.js","../../../node_modules/d3-shape/src/curve/catmullRom.js","../../../node_modules/d3-shape/src/curve/catmullRomClosed.js","../../../node_modules/d3-shape/src/curve/catmullRomOpen.js","../../../node_modules/d3-shape/src/curve/linearClosed.js","../../../node_modules/d3-shape/src/curve/monotone.js","../../../node_modules/d3-shape/src/curve/natural.js","../../../node_modules/d3-shape/src/curve/step.js","../../vega-canvas/build/vega-canvas.browser.module.js","../../../node_modules/d3-scale/src/init.js","../../../node_modules/d3-scale/src/ordinal.js","../../../node_modules/d3-color/src/define.js","../../../node_modules/d3-color/src/color.js","../../../node_modules/d3-color/src/math.js","../../../node_modules/d3-color/src/lab.js","../../../node_modules/d3-color/src/cubehelix.js","../../../node_modules/d3-interpolate/src/basis.js","../../../node_modules/d3-interpolate/src/basisClosed.js","../../../node_modules/d3-interpolate/src/constant.js","../../../node_modules/d3-interpolate/src/color.js","../../../node_modules/d3-interpolate/src/rgb.js","../../../node_modules/d3-interpolate/src/numberArray.js","../../../node_modules/d3-interpolate/src/array.js","../../../node_modules/d3-interpolate/src/date.js","../../../node_modules/d3-interpolate/src/number.js","../../../node_modules/d3-interpolate/src/object.js","../../../node_modules/d3-interpolate/src/string.js","../../../node_modules/d3-interpolate/src/value.js","../../../node_modules/d3-interpolate/src/round.js","../../../node_modules/d3-interpolate/src/transform/decompose.js","../../../node_modules/d3-interpolate/src/transform/parse.js","../../../node_modules/d3-interpolate/src/transform/index.js","../../../node_modules/d3-interpolate/src/zoom.js","../../../node_modules/d3-interpolate/src/hsl.js","../../../node_modules/d3-interpolate/src/hcl.js","../../../node_modules/d3-interpolate/src/cubehelix.js","../../../node_modules/d3-interpolate/src/piecewise.js","../../../node_modules/d3-interpolate/src/discrete.js","../../../node_modules/d3-interpolate/src/hue.js","../../../node_modules/d3-interpolate/src/lab.js","../../../node_modules/d3-interpolate/src/quantize.js","../../../node_modules/d3-scale/src/number.js","../../../node_modules/d3-scale/src/continuous.js","../../../node_modules/d3-scale/src/constant.js","../../../node_modules/d3-scale/src/tickFormat.js","../../../node_modules/d3-scale/src/linear.js","../../../node_modules/d3-scale/src/nice.js","../../../node_modules/d3-scale/src/log.js","../../../node_modules/d3-scale/src/symlog.js","../../../node_modules/d3-scale/src/pow.js","../../../node_modules/d3-scale/src/time.js","../../../node_modules/d3-scale/src/sequential.js","../../../node_modules/d3-scale/src/diverging.js","../../vega-scale/build/vega-scale.module.js","../../../node_modules/d3-scale/src/identity.js","../../../node_modules/d3-scale/src/utcTime.js","../../../node_modules/d3-scale/src/quantile.js","../../../node_modules/d3-scale/src/quantize.js","../../../node_modules/d3-scale/src/threshold.js","../../vega-scenegraph/build/vega-scenegraph.module.js","../../../node_modules/d3-shape/src/symbol.js","../../vega-view-transforms/build/vega-view-transforms.module.js","../../vega-encode/build/vega-encode.module.js","../../../node_modules/d3-geo/src/math.js","../../../node_modules/d3-geo/src/noop.js","../../../node_modules/d3-geo/src/stream.js","../../../node_modules/d3-geo/src/area.js","../../../node_modules/d3-geo/src/bounds.js","../../../node_modules/d3-geo/src/cartesian.js","../../../node_modules/d3-geo/src/centroid.js","../../../node_modules/d3-geo/src/compose.js","../../../node_modules/d3-geo/src/rotation.js","../../../node_modules/d3-geo/src/circle.js","../../../node_modules/d3-geo/src/clip/buffer.js","../../../node_modules/d3-geo/src/pointEqual.js","../../../node_modules/d3-geo/src/clip/rejoin.js","../../../node_modules/d3-geo/src/polygonContains.js","../../../node_modules/d3-geo/src/clip/index.js","../../../node_modules/d3-geo/src/clip/antimeridian.js","../../../node_modules/d3-geo/src/clip/circle.js","../../../node_modules/d3-geo/src/clip/rectangle.js","../../../node_modules/d3-geo/src/clip/line.js","../../../node_modules/d3-geo/src/graticule.js","../../../node_modules/d3-geo/src/path/area.js","../../../node_modules/d3-geo/src/identity.js","../../../node_modules/d3-geo/src/path/bounds.js","../../../node_modules/d3-geo/src/path/centroid.js","../../../node_modules/d3-geo/src/path/context.js","../../../node_modules/d3-geo/src/path/measure.js","../../../node_modules/d3-geo/src/path/string.js","../../../node_modules/d3-geo/src/path/index.js","../../../node_modules/d3-geo/src/transform.js","../../../node_modules/d3-geo/src/projection/fit.js","../../../node_modules/d3-geo/src/projection/resample.js","../../../node_modules/d3-geo/src/projection/index.js","../../../node_modules/d3-geo/src/projection/conic.js","../../../node_modules/d3-geo/src/projection/conicEqualArea.js","../../../node_modules/d3-geo/src/projection/cylindricalEqualArea.js","../../../node_modules/d3-geo/src/projection/albers.js","../../../node_modules/d3-geo/src/projection/azimuthal.js","../../../node_modules/d3-geo/src/projection/azimuthalEqualArea.js","../../../node_modules/d3-geo/src/projection/azimuthalEquidistant.js","../../../node_modules/d3-geo/src/projection/mercator.js","../../../node_modules/d3-geo/src/projection/conicConformal.js","../../../node_modules/d3-geo/src/projection/equirectangular.js","../../../node_modules/d3-geo/src/projection/conicEquidistant.js","../../../node_modules/d3-geo/src/projection/equalEarth.js","../../../node_modules/d3-geo/src/projection/gnomonic.js","../../../node_modules/d3-geo/src/projection/naturalEarth1.js","../../../node_modules/d3-geo/src/projection/orthographic.js","../../../node_modules/d3-geo/src/projection/stereographic.js","../../../node_modules/d3-geo/src/projection/transverseMercator.js","../../../node_modules/d3-geo-projection/src/math.js","../../../node_modules/d3-geo-projection/src/mollweide.js","../../vega-projection/build/vega-projection.module.js","../../../node_modules/d3-geo/src/projection/albersUsa.js","../../../node_modules/d3-geo/src/projection/identity.js","../../vega-geo/build/vega-geo.module.js","../../../node_modules/d3-quadtree/src/add.js","../../../node_modules/d3-quadtree/src/quad.js","../../../node_modules/d3-quadtree/src/x.js","../../../node_modules/d3-quadtree/src/y.js","../../../node_modules/d3-quadtree/src/quadtree.js","../../../node_modules/d3-force/src/constant.js","../../../node_modules/d3-force/src/jiggle.js","../../../node_modules/d3-force/src/collide.js","../../../node_modules/d3-force/src/link.js","../../../node_modules/d3-quadtree/src/cover.js","../../../node_modules/d3-quadtree/src/data.js","../../../node_modules/d3-quadtree/src/extent.js","../../../node_modules/d3-quadtree/src/find.js","../../../node_modules/d3-quadtree/src/remove.js","../../../node_modules/d3-quadtree/src/root.js","../../../node_modules/d3-quadtree/src/size.js","../../../node_modules/d3-quadtree/src/visit.js","../../../node_modules/d3-quadtree/src/visitAfter.js","../../../node_modules/d3-dispatch/src/dispatch.js","../../../node_modules/d3-timer/src/timer.js","../../../node_modules/d3-force/src/lcg.js","../../../node_modules/d3-force/src/simulation.js","../../vega-force/build/vega-force.module.js","../../../node_modules/d3-force/src/center.js","../../../node_modules/d3-force/src/manyBody.js","../../../node_modules/d3-force/src/x.js","../../../node_modules/d3-force/src/y.js","../../../node_modules/d3-hierarchy/src/cluster.js","../../../node_modules/d3-hierarchy/src/hierarchy/count.js","../../../node_modules/d3-hierarchy/src/hierarchy/index.js","../../../node_modules/d3-hierarchy/src/pack/enclose.js","../../../node_modules/d3-hierarchy/src/array.js","../../../node_modules/d3-hierarchy/src/pack/siblings.js","../../../node_modules/d3-hierarchy/src/accessors.js","../../../node_modules/d3-hierarchy/src/constant.js","../../../node_modules/d3-hierarchy/src/pack/index.js","../../../node_modules/d3-hierarchy/src/treemap/round.js","../../../node_modules/d3-hierarchy/src/treemap/dice.js","../../../node_modules/d3-hierarchy/src/hierarchy/each.js","../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../../../node_modules/d3-hierarchy/src/hierarchy/find.js","../../../node_modules/d3-hierarchy/src/hierarchy/sum.js","../../../node_modules/d3-hierarchy/src/hierarchy/sort.js","../../../node_modules/d3-hierarchy/src/hierarchy/path.js","../../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../../../node_modules/d3-hierarchy/src/hierarchy/descendants.js","../../../node_modules/d3-hierarchy/src/hierarchy/leaves.js","../../../node_modules/d3-hierarchy/src/hierarchy/links.js","../../../node_modules/d3-hierarchy/src/hierarchy/iterator.js","../../../node_modules/d3-hierarchy/src/stratify.js","../../../node_modules/d3-hierarchy/src/tree.js","../../../node_modules/d3-hierarchy/src/treemap/slice.js","../../../node_modules/d3-hierarchy/src/treemap/squarify.js","../../../node_modules/d3-hierarchy/src/treemap/resquarify.js","../../vega-hierarchy/build/vega-hierarchy.module.js","../../../node_modules/d3-hierarchy/src/partition.js","../../../node_modules/d3-hierarchy/src/treemap/binary.js","../../../node_modules/d3-hierarchy/src/treemap/sliceDice.js","../../../node_modules/d3-hierarchy/src/treemap/index.js","../../vega-label/build/vega-label.module.js","../../vega-regression/build/vega-regression.module.js","../../../node_modules/delaunator/index.js","../../../node_modules/d3-delaunay/src/path.js","../../../node_modules/d3-delaunay/src/polygon.js","../../../node_modules/d3-delaunay/src/voronoi.js","../../../node_modules/d3-delaunay/src/delaunay.js","../../vega-voronoi/build/vega-voronoi.module.js","../../vega-wordcloud/build/vega-wordcloud.module.js","../../vega-crossfilter/build/vega-crossfilter.module.js","../../../node_modules/d3-array/src/permute.js","../../vega-expression/build/vega-expression.module.js","../../vega-selections/build/vega-selection.module.js","../../vega-functions/build/vega-functions.module.js","../../vega-runtime/build/vega-runtime.module.js","../../vega-view/build/vega-view.module.js","../../../node_modules/d3-timer/src/interval.js","../../vega-event-selector/build/vega-event-selector.module.js","../../vega-parser/build/vega-parser.module.js","../index.js"],"sourcesContent":["function accessor (fn, fields, name) {\n fn.fields = fields || [];\n fn.fname = name;\n return fn;\n}\nfunction accessorName(fn) {\n return fn == null ? null : fn.fname;\n}\nfunction accessorFields(fn) {\n return fn == null ? null : fn.fields;\n}\n\nfunction getter (path) {\n return path.length === 1 ? get1(path[0]) : getN(path);\n}\n\nconst get1 = field => function (obj) {\n return obj[field];\n};\n\nconst getN = path => {\n const len = path.length;\n return function (obj) {\n for (let i = 0; i < len; ++i) {\n obj = obj[path[i]];\n }\n\n return obj;\n };\n};\n\nfunction error (message) {\n throw Error(message);\n}\n\nfunction splitAccessPath (p) {\n const path = [],\n n = p.length;\n let q = null,\n b = 0,\n s = '',\n i,\n j,\n c;\n p = p + '';\n\n function push() {\n path.push(s + p.substring(i, j));\n s = '';\n i = j + 1;\n }\n\n for (i = j = 0; j < n; ++j) {\n c = p[j];\n\n if (c === '\\\\') {\n s += p.substring(i, j);\n s += p.substring(++j, ++j);\n i = j;\n } else if (c === q) {\n push();\n q = null;\n b = -1;\n } else if (q) {\n continue;\n } else if (i === b && c === '\"') {\n i = j + 1;\n q = c;\n } else if (i === b && c === \"'\") {\n i = j + 1;\n q = c;\n } else if (c === '.' && !b) {\n if (j > i) {\n push();\n } else {\n i = j + 1;\n }\n } else if (c === '[') {\n if (j > i) push();\n b = i = j + 1;\n } else if (c === ']') {\n if (!b) error('Access path missing open bracket: ' + p);\n if (b > 0) push();\n b = 0;\n i = j + 1;\n }\n }\n\n if (b) error('Access path missing closing bracket: ' + p);\n if (q) error('Access path missing closing quote: ' + p);\n\n if (j > i) {\n j++;\n push();\n }\n\n return path;\n}\n\nfunction field (field, name, opt) {\n const path = splitAccessPath(field);\n field = path.length === 1 ? path[0] : field;\n return accessor((opt && opt.get || getter)(path), [field], name || field);\n}\n\nconst id = field('id');\nconst identity = accessor(_ => _, [], 'identity');\nconst zero = accessor(() => 0, [], 'zero');\nconst one = accessor(() => 1, [], 'one');\nconst truthy = accessor(() => true, [], 'true');\nconst falsy = accessor(() => false, [], 'false');\n\nfunction log$1(method, level, input) {\n const args = [level].concat([].slice.call(input));\n console[method].apply(console, args); // eslint-disable-line no-console\n}\n\nconst None = 0;\nconst Error$1 = 1;\nconst Warn = 2;\nconst Info = 3;\nconst Debug = 4;\nfunction logger (_, method) {\n let level = _ || None;\n return {\n level(_) {\n if (arguments.length) {\n level = +_;\n return this;\n } else {\n return level;\n }\n },\n\n error() {\n if (level >= Error$1) log$1(method || 'error', 'ERROR', arguments);\n return this;\n },\n\n warn() {\n if (level >= Warn) log$1(method || 'warn', 'WARN', arguments);\n return this;\n },\n\n info() {\n if (level >= Info) log$1(method || 'log', 'INFO', arguments);\n return this;\n },\n\n debug() {\n if (level >= Debug) log$1(method || 'log', 'DEBUG', arguments);\n return this;\n }\n\n };\n}\n\nvar isArray = Array.isArray;\n\nfunction isObject (_) {\n return _ === Object(_);\n}\n\nconst isLegalKey = key => key !== '__proto__';\n\nfunction mergeConfig(...configs) {\n return configs.reduce((out, source) => {\n for (const key in source) {\n if (key === 'signals') {\n // for signals, we merge the signals arrays\n // source signals take precedence over\n // existing signals with the same name\n out.signals = mergeNamed(out.signals, source.signals);\n } else {\n // otherwise, merge objects subject to recursion constraints\n // for legend block, recurse for the layout entry only\n // for style block, recurse for all properties\n // otherwise, no recursion: objects overwrite, no merging\n const r = key === 'legend' ? {\n layout: 1\n } : key === 'style' ? true : null;\n writeConfig(out, key, source[key], r);\n }\n }\n\n return out;\n }, {});\n}\nfunction writeConfig(output, key, value, recurse) {\n if (!isLegalKey(key)) return;\n let k, o;\n\n if (isObject(value) && !isArray(value)) {\n o = isObject(output[key]) ? output[key] : output[key] = {};\n\n for (k in value) {\n if (recurse && (recurse === true || recurse[k])) {\n writeConfig(o, k, value[k]);\n } else if (isLegalKey(k)) {\n o[k] = value[k];\n }\n }\n } else {\n output[key] = value;\n }\n}\n\nfunction mergeNamed(a, b) {\n if (a == null) return b;\n const map = {},\n out = [];\n\n function add(_) {\n if (!map[_.name]) {\n map[_.name] = 1;\n out.push(_);\n }\n }\n\n b.forEach(add);\n a.forEach(add);\n return out;\n}\n\nfunction peek (array) {\n return array[array.length - 1];\n}\n\nfunction toNumber (_) {\n return _ == null || _ === '' ? null : +_;\n}\n\nconst exp = sign => x => sign * Math.exp(x);\n\nconst log = sign => x => Math.log(sign * x);\n\nconst symlog = c => x => Math.sign(x) * Math.log1p(Math.abs(x / c));\n\nconst symexp = c => x => Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n\nconst pow = exponent => x => x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n\nfunction pan(domain, delta, lift, ground) {\n const d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n dd = (d1 - d0) * delta;\n return [ground(d0 - dd), ground(d1 - dd)];\n}\n\nfunction panLinear(domain, delta) {\n return pan(domain, delta, toNumber, identity);\n}\nfunction panLog(domain, delta) {\n var sign = Math.sign(domain[0]);\n return pan(domain, delta, log(sign), exp(sign));\n}\nfunction panPow(domain, delta, exponent) {\n return pan(domain, delta, pow(exponent), pow(1 / exponent));\n}\nfunction panSymlog(domain, delta, constant) {\n return pan(domain, delta, symlog(constant), symexp(constant));\n}\n\nfunction zoom(domain, anchor, scale, lift, ground) {\n const d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n return [ground(da + (d0 - da) * scale), ground(da + (d1 - da) * scale)];\n}\n\nfunction zoomLinear(domain, anchor, scale) {\n return zoom(domain, anchor, scale, toNumber, identity);\n}\nfunction zoomLog(domain, anchor, scale) {\n const sign = Math.sign(domain[0]);\n return zoom(domain, anchor, scale, log(sign), exp(sign));\n}\nfunction zoomPow(domain, anchor, scale, exponent) {\n return zoom(domain, anchor, scale, pow(exponent), pow(1 / exponent));\n}\nfunction zoomSymlog(domain, anchor, scale, constant) {\n return zoom(domain, anchor, scale, symlog(constant), symexp(constant));\n}\n\nfunction quarter(date) {\n return 1 + ~~(new Date(date).getMonth() / 3);\n}\nfunction utcquarter(date) {\n return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n\nfunction array (_) {\n return _ != null ? isArray(_) ? _ : [_] : [];\n}\n\n/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nfunction clampRange (range, min, max) {\n let lo = range[0],\n hi = range[1],\n span;\n\n if (hi < lo) {\n span = hi;\n hi = lo;\n lo = span;\n }\n\n span = hi - lo;\n return span >= max - min ? [min, max] : [lo = Math.min(Math.max(lo, min), max - span), lo + span];\n}\n\nfunction isFunction (_) {\n return typeof _ === 'function';\n}\n\nconst DESCENDING = 'descending';\nfunction compare (fields, orders, opt) {\n opt = opt || {};\n orders = array(orders) || [];\n const ord = [],\n get = [],\n fmap = {},\n gen = opt.comparator || comparator;\n array(fields).forEach((f, i) => {\n if (f == null) return;\n ord.push(orders[i] === DESCENDING ? -1 : 1);\n get.push(f = isFunction(f) ? f : field(f, null, opt));\n (accessorFields(f) || []).forEach(_ => fmap[_] = 1);\n });\n return get.length === 0 ? null : accessor(gen(get, ord), Object.keys(fmap));\n}\nconst ascending = (u, v) => (u < v || u == null) && v != null ? -1 : (u > v || v == null) && u != null ? 1 : (v = v instanceof Date ? +v : v, u = u instanceof Date ? +u : u) !== u && v === v ? -1 : v !== v && u === u ? 1 : 0;\n\nconst comparator = (fields, orders) => fields.length === 1 ? compare1(fields[0], orders[0]) : compareN(fields, orders, fields.length);\n\nconst compare1 = (field, order) => function (a, b) {\n return ascending(field(a), field(b)) * order;\n};\n\nconst compareN = (fields, orders, n) => {\n orders.push(0); // pad zero for convenient lookup\n\n return function (a, b) {\n let f,\n c = 0,\n i = -1;\n\n while (c === 0 && ++i < n) {\n f = fields[i];\n c = ascending(f(a), f(b));\n }\n\n return c * orders[i];\n };\n};\n\nfunction constant (_) {\n return isFunction(_) ? _ : () => _;\n}\n\nfunction debounce (delay, handler) {\n let tid;\n return e => {\n if (tid) clearTimeout(tid);\n tid = setTimeout(() => (handler(e), tid = null), delay);\n };\n}\n\nfunction extend (_) {\n for (let x, k, i = 1, len = arguments.length; i < len; ++i) {\n x = arguments[i];\n\n for (k in x) {\n _[k] = x[k];\n }\n }\n\n return _;\n}\n\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nfunction extent (array, f) {\n let i = 0,\n n,\n v,\n min,\n max;\n\n if (array && (n = array.length)) {\n if (f == null) {\n // find first valid value\n for (v = array[i]; i < n && (v == null || v !== v); v = array[++i]);\n\n min = max = v; // visit all other values\n\n for (; i < n; ++i) {\n v = array[i]; // skip null/undefined; NaN will fail all comparisons\n\n if (v != null) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n } else {\n // find first valid value\n for (v = f(array[i]); i < n && (v == null || v !== v); v = f(array[++i]));\n\n min = max = v; // visit all other values\n\n for (; i < n; ++i) {\n v = f(array[i]); // skip null/undefined; NaN will fail all comparisons\n\n if (v != null) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n }\n }\n\n return [min, max];\n}\n\nfunction extentIndex (array, f) {\n const n = array.length;\n let i = -1,\n a,\n b,\n c,\n u,\n v;\n\n if (f == null) {\n while (++i < n) {\n b = array[i];\n\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n\n if (i === n) return [-1, -1];\n u = v = i;\n\n while (++i < n) {\n b = array[i];\n\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n } else {\n while (++i < n) {\n b = f(array[i], i, array);\n\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n\n if (i === n) return [-1, -1];\n u = v = i;\n\n while (++i < n) {\n b = f(array[i], i, array);\n\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n }\n\n return [u, v];\n}\n\nconst hop = Object.prototype.hasOwnProperty;\nfunction has (object, property) {\n return hop.call(object, property);\n}\n\nconst NULL = {};\nfunction fastmap (input) {\n let obj = {},\n test;\n\n function has$1(key) {\n return has(obj, key) && obj[key] !== NULL;\n }\n\n const map = {\n size: 0,\n empty: 0,\n object: obj,\n has: has$1,\n\n get(key) {\n return has$1(key) ? obj[key] : undefined;\n },\n\n set(key, value) {\n if (!has$1(key)) {\n ++map.size;\n if (obj[key] === NULL) --map.empty;\n }\n\n obj[key] = value;\n return this;\n },\n\n delete(key) {\n if (has$1(key)) {\n --map.size;\n ++map.empty;\n obj[key] = NULL;\n }\n\n return this;\n },\n\n clear() {\n map.size = map.empty = 0;\n map.object = obj = {};\n },\n\n test(_) {\n if (arguments.length) {\n test = _;\n return map;\n } else {\n return test;\n }\n },\n\n clean() {\n const next = {};\n let size = 0;\n\n for (const key in obj) {\n const value = obj[key];\n\n if (value !== NULL && (!test || !test(value))) {\n next[key] = value;\n ++size;\n }\n }\n\n map.size = size;\n map.empty = 0;\n map.object = obj = next;\n }\n\n };\n if (input) Object.keys(input).forEach(key => {\n map.set(key, input[key]);\n });\n return map;\n}\n\nfunction flush (range, value, threshold, left, right, center) {\n if (!threshold && threshold !== 0) return center;\n const t = +threshold;\n let a = range[0],\n b = peek(range),\n l; // swap endpoints if range is reversed\n\n if (b < a) {\n l = a;\n a = b;\n b = l;\n } // compare value to endpoints\n\n\n l = Math.abs(value - a);\n const r = Math.abs(b - value); // adjust if value is within threshold distance of endpoint\n\n return l < r && l <= t ? left : r <= t ? right : center;\n}\n\nfunction inherits (child, parent, members) {\n const proto = child.prototype = Object.create(parent.prototype);\n Object.defineProperty(proto, 'constructor', {\n value: child,\n writable: true,\n enumerable: true,\n configurable: true\n });\n return extend(proto, members);\n}\n\n/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nfunction inrange (value, range, left, right) {\n let r0 = range[0],\n r1 = range[range.length - 1],\n t;\n\n if (r0 > r1) {\n t = r0;\n r0 = r1;\n r1 = t;\n }\n\n left = left === undefined || left;\n right = right === undefined || right;\n return (left ? r0 <= value : r0 < value) && (right ? value <= r1 : value < r1);\n}\n\nfunction isBoolean (_) {\n return typeof _ === 'boolean';\n}\n\nfunction isDate (_) {\n return Object.prototype.toString.call(_) === '[object Date]';\n}\n\nfunction isIterable (_) {\n return _ && isFunction(_[Symbol.iterator]);\n}\n\nfunction isNumber (_) {\n return typeof _ === 'number';\n}\n\nfunction isRegExp (_) {\n return Object.prototype.toString.call(_) === '[object RegExp]';\n}\n\nfunction isString (_) {\n return typeof _ === 'string';\n}\n\nfunction key (fields, flat, opt) {\n if (fields) {\n fields = flat ? array(fields).map(f => f.replace(/\\\\(.)/g, '$1')) : array(fields);\n }\n\n const len = fields && fields.length,\n gen = opt && opt.get || getter,\n map = f => gen(flat ? [f] : splitAccessPath(f));\n\n let fn;\n\n if (!len) {\n fn = function () {\n return '';\n };\n } else if (len === 1) {\n const get = map(fields[0]);\n\n fn = function (_) {\n return '' + get(_);\n };\n } else {\n const get = fields.map(map);\n\n fn = function (_) {\n let s = '' + get[0](_),\n i = 0;\n\n while (++i < len) s += '|' + get[i](_);\n\n return s;\n };\n }\n\n return accessor(fn, fields, 'key');\n}\n\nfunction lerp (array, frac) {\n const lo = array[0],\n hi = peek(array),\n f = +frac;\n return !f ? lo : f === 1 ? hi : lo + f * (hi - lo);\n}\n\nconst DEFAULT_MAX_SIZE = 10000; // adapted from https://github.com/dominictarr/hashlru/ (MIT License)\n\nfunction lruCache (maxsize) {\n maxsize = +maxsize || DEFAULT_MAX_SIZE;\n let curr, prev, size;\n\n const clear = () => {\n curr = {};\n prev = {};\n size = 0;\n };\n\n const update = (key, value) => {\n if (++size > maxsize) {\n prev = curr;\n curr = {};\n size = 1;\n }\n\n return curr[key] = value;\n };\n\n clear();\n return {\n clear,\n has: key => has(curr, key) || has(prev, key),\n get: key => has(curr, key) ? curr[key] : has(prev, key) ? update(key, prev[key]) : undefined,\n set: (key, value) => has(curr, key) ? curr[key] = value : update(key, value)\n };\n}\n\nfunction merge (compare, array0, array1, output) {\n const n0 = array0.length,\n n1 = array1.length;\n if (!n1) return array0;\n if (!n0) return array1;\n const merged = output || new array0.constructor(n0 + n1);\n let i0 = 0,\n i1 = 0,\n i = 0;\n\n for (; i0 < n0 && i1 < n1; ++i) {\n merged[i] = compare(array0[i0], array1[i1]) > 0 ? array1[i1++] : array0[i0++];\n }\n\n for (; i0 < n0; ++i0, ++i) {\n merged[i] = array0[i0];\n }\n\n for (; i1 < n1; ++i1, ++i) {\n merged[i] = array1[i1];\n }\n\n return merged;\n}\n\nfunction repeat (str, reps) {\n let s = '';\n\n while (--reps >= 0) s += str;\n\n return s;\n}\n\nfunction pad (str, length, padchar, align) {\n const c = padchar || ' ',\n s = str + '',\n n = length - s.length;\n return n <= 0 ? s : align === 'left' ? repeat(c, n) + s : align === 'center' ? repeat(c, ~~(n / 2)) + s + repeat(c, Math.ceil(n / 2)) : s + repeat(c, n);\n}\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\n\nfunction span (array) {\n return array && peek(array) - array[0] || 0;\n}\n\nfunction $(x) {\n return isArray(x) ? '[' + x.map($) + ']' : isObject(x) || isString(x) ? // Output valid JSON and JS source strings.\n // See http://timelessrepo.com/json-isnt-a-javascript-subset\n JSON.stringify(x).replace('\\u2028', '\\\\u2028').replace('\\u2029', '\\\\u2029') : x;\n}\n\nfunction toBoolean (_) {\n return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n}\n\nconst defaultParser = _ => isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\n\nfunction toDate (_, parser) {\n parser = parser || defaultParser;\n return _ == null || _ === '' ? null : parser(_);\n}\n\nfunction toString (_) {\n return _ == null || _ === '' ? null : _ + '';\n}\n\nfunction toSet (_) {\n const s = {},\n n = _.length;\n\n for (let i = 0; i < n; ++i) s[_[i]] = true;\n\n return s;\n}\n\nfunction truncate (str, length, align, ellipsis) {\n const e = ellipsis != null ? ellipsis : '\\u2026',\n s = str + '',\n n = s.length,\n l = Math.max(0, length - e.length);\n return n <= length ? s : align === 'left' ? e + s.slice(n - l) : align === 'center' ? s.slice(0, Math.ceil(l / 2)) + e + s.slice(n - ~~(l / 2)) : s.slice(0, l) + e;\n}\n\nfunction visitArray (array, filter, visitor) {\n if (array) {\n if (filter) {\n const n = array.length;\n\n for (let i = 0; i < n; ++i) {\n const t = filter(array[i]);\n if (t) visitor(t, i, array);\n }\n } else {\n array.forEach(visitor);\n }\n }\n}\n\nexport { Debug, Error$1 as Error, Info, None, Warn, accessor, accessorFields, accessorName, array, ascending, clampRange, compare, constant, debounce, error, extend, extent, extentIndex, falsy, fastmap, field, flush, has as hasOwnProperty, id, identity, inherits, inrange, isArray, isBoolean, isDate, isFunction, isIterable, isNumber, isObject, isRegExp, isString, key, lerp, logger, lruCache, merge, mergeConfig, one, pad, panLinear, panLog, panPow, panSymlog, peek, quarter, repeat, span, splitAccessPath, $ as stringValue, toBoolean, toDate, toNumber, toSet, toString, truncate, truthy, utcquarter, visitArray, writeConfig, zero, zoomLinear, zoomLog, zoomPow, zoomSymlog };\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","export default function(x) {\n return x;\n}\n","import reverse from \"./reverse.js\";\nimport transform from \"./transform.js\";\n\nexport default function(topology, o) {\n if (typeof o === \"string\") o = topology.objects[o];\n return o.type === \"GeometryCollection\"\n ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n : feature(topology, o);\n}\n\nfunction feature(topology, o) {\n var id = o.id,\n bbox = o.bbox,\n properties = o.properties == null ? {} : o.properties,\n geometry = object(topology, o);\n return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n var transformPoint = transform(topology.transform),\n arcs = topology.arcs;\n\n function arc(i, points) {\n if (points.length) points.pop();\n for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n points.push(transformPoint(a[k], k));\n }\n if (i < 0) reverse(points, n);\n }\n\n function point(p) {\n return transformPoint(p);\n }\n\n function line(arcs) {\n var points = [];\n for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n return points;\n }\n\n function ring(arcs) {\n var points = line(arcs);\n while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n return points;\n }\n\n function polygon(arcs) {\n return arcs.map(ring);\n }\n\n function geometry(o) {\n var type = o.type, coordinates;\n switch (type) {\n case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n case \"Point\": coordinates = point(o.coordinates); break;\n case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n case \"LineString\": coordinates = line(o.arcs); break;\n case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n case \"Polygon\": coordinates = polygon(o.arcs); break;\n case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n default: return null;\n }\n return {type: type, coordinates: coordinates};\n }\n\n return geometry(o);\n}\n","import identity from \"./identity.js\";\n\nexport default function(transform) {\n if (transform == null) return identity;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function(input, i) {\n if (!i) x0 = y0 = 0;\n var j = 2, n = input.length, output = new Array(n);\n output[0] = (x0 += input[0]) * kx + dx;\n output[1] = (y0 += input[1]) * ky + dy;\n while (j < n) output[j] = input[j], ++j;\n return output;\n };\n}\n","export default function(array, n) {\n var t, j = array.length, i = j - n;\n while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n","export default function(topology, arcs) {\n var stitchedArcs = {},\n fragmentByStart = {},\n fragmentByEnd = {},\n fragments = [],\n emptyIndex = -1;\n\n // Stitch empty arcs first, since they may be subsumed by other arcs.\n arcs.forEach(function(i, j) {\n var arc = topology.arcs[i < 0 ? ~i : i], t;\n if (arc.length < 3 && !arc[1][0] && !arc[1][1]) {\n t = arcs[++emptyIndex], arcs[emptyIndex] = i, arcs[j] = t;\n }\n });\n\n arcs.forEach(function(i) {\n var e = ends(i),\n start = e[0],\n end = e[1],\n f, g;\n\n if (f = fragmentByEnd[start]) {\n delete fragmentByEnd[f.end];\n f.push(i);\n f.end = end;\n if (g = fragmentByStart[end]) {\n delete fragmentByStart[g.start];\n var fg = g === f ? f : f.concat(g);\n fragmentByStart[fg.start = f.start] = fragmentByEnd[fg.end = g.end] = fg;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else if (f = fragmentByStart[end]) {\n delete fragmentByStart[f.start];\n f.unshift(i);\n f.start = start;\n if (g = fragmentByEnd[start]) {\n delete fragmentByEnd[g.end];\n var gf = g === f ? f : g.concat(f);\n fragmentByStart[gf.start = g.start] = fragmentByEnd[gf.end = f.end] = gf;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else {\n f = [i];\n fragmentByStart[f.start = start] = fragmentByEnd[f.end = end] = f;\n }\n });\n\n function ends(i) {\n var arc = topology.arcs[i < 0 ? ~i : i], p0 = arc[0], p1;\n if (topology.transform) p1 = [0, 0], arc.forEach(function(dp) { p1[0] += dp[0], p1[1] += dp[1]; });\n else p1 = arc[arc.length - 1];\n return i < 0 ? [p1, p0] : [p0, p1];\n }\n\n function flush(fragmentByEnd, fragmentByStart) {\n for (var k in fragmentByEnd) {\n var f = fragmentByEnd[k];\n delete fragmentByStart[f.start];\n delete f.start;\n delete f.end;\n f.forEach(function(i) { stitchedArcs[i < 0 ? ~i : i] = 1; });\n fragments.push(f);\n }\n }\n\n flush(fragmentByEnd, fragmentByStart);\n flush(fragmentByStart, fragmentByEnd);\n arcs.forEach(function(i) { if (!stitchedArcs[i < 0 ? ~i : i]) fragments.push([i]); });\n\n return fragments;\n}\n","import {object} from \"./feature.js\";\nimport stitch from \"./stitch.js\";\n\nexport default function(topology) {\n return object(topology, meshArcs.apply(this, arguments));\n}\n\nexport function meshArcs(topology, object, filter) {\n var arcs, i, n;\n if (arguments.length > 1) arcs = extractArcs(topology, object, filter);\n else for (i = 0, arcs = new Array(n = topology.arcs.length); i < n; ++i) arcs[i] = i;\n return {type: \"MultiLineString\", arcs: stitch(topology, arcs)};\n}\n\nfunction extractArcs(topology, object, filter) {\n var arcs = [],\n geomsByArc = [],\n geom;\n\n function extract0(i) {\n var j = i < 0 ? ~i : i;\n (geomsByArc[j] || (geomsByArc[j] = [])).push({i: i, g: geom});\n }\n\n function extract1(arcs) {\n arcs.forEach(extract0);\n }\n\n function extract2(arcs) {\n arcs.forEach(extract1);\n }\n\n function extract3(arcs) {\n arcs.forEach(extract2);\n }\n\n function geometry(o) {\n switch (geom = o, o.type) {\n case \"GeometryCollection\": o.geometries.forEach(geometry); break;\n case \"LineString\": extract1(o.arcs); break;\n case \"MultiLineString\": case \"Polygon\": extract2(o.arcs); break;\n case \"MultiPolygon\": extract3(o.arcs); break;\n }\n }\n\n geometry(object);\n\n geomsByArc.forEach(filter == null\n ? function(geoms) { arcs.push(geoms[0].i); }\n : function(geoms) { if (filter(geoms[0].g, geoms[geoms.length - 1].g)) arcs.push(geoms[0].i); });\n\n return arcs;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(f) {\n let delta = f;\n let compare = f;\n\n if (f.length === 1) {\n delta = (d, x) => f(d) - x;\n compare = ascendingComparator(f);\n }\n\n function left(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n }\n\n function right(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n\n function center(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction ascendingComparator(f) {\n return (d, x) => ascending(f(d), x);\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n constructor() {\n this._partials = new Float64Array(32);\n this._n = 0;\n }\n add(x) {\n const p = this._partials;\n let i = 0;\n for (let j = 0; j < this._n && j < 32; j++) {\n const y = p[j],\n hi = x + y,\n lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n if (lo) p[i++] = lo;\n x = hi;\n }\n p[i] = x;\n this._n = i + 1;\n return this;\n }\n valueOf() {\n const p = this._partials;\n let n = this._n, x, y, lo, hi = 0;\n if (n > 0) {\n hi = p[--n];\n while (n > 0) {\n x = hi;\n y = p[--n];\n hi = x + y;\n lo = y - (hi - x);\n if (lo) break;\n }\n if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n y = lo * 2;\n x = hi + y;\n if (y == x - hi) hi = x;\n }\n }\n return hi;\n }\n}\n\nexport function fsum(values, valueof) {\n const adder = new Adder();\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n adder.add(value);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n adder.add(value);\n }\n }\n }\n return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n const adder = new Adder();\n let index = -1;\n return Float64Array.from(values, valueof === undefined\n ? v => adder.add(+v || 0)\n : v => adder.add(+valueof(v, ++index, values) || 0)\n );\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n let r0 = Math.round(start / step), r1 = Math.round(stop / step);\n if (r0 * step < start) ++r0;\n if (r1 * step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n while (++i < n) ticks[i] = (r0 + i) * step;\n } else {\n step = -step;\n let r0 = Math.round(start * step), r1 = Math.round(stop * step);\n if (r0 / step < start) ++r0;\n if (r1 / step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n while (++i < n) ticks[i] = (r0 + i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","import ascending from \"./ascending.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = array.length - 1, compare = ascending) {\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","import max from \"./max.js\";\nimport min from \"./min.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","import quantile from \"./quantile.js\";\n\nexport default function(values, valueof) {\n return quantile(values, 0.5, valueof);\n}\n","function* flatten(arrays) {\n for (const array of arrays) {\n yield* array;\n }\n}\n\nexport default function merge(arrays) {\n return Array.from(flatten(arrays));\n}\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export default function sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = function(date) {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval.js\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import { array, error, hasOwnProperty, extend, peek, toSet, constant, zero, one, span } from 'vega-util';\nimport { timeDay, timeWeek, utcDay, utcWeek, timeYear, timeMonth, timeHour, timeMinute, timeSecond, timeMillisecond, utcYear, utcMonth, utcHour, utcMinute, utcSecond, utcMillisecond } from 'd3-time';\nimport { bisector, tickStep } from 'd3-array';\n\nconst YEAR = 'year';\nconst QUARTER = 'quarter';\nconst MONTH = 'month';\nconst WEEK = 'week';\nconst DATE = 'date';\nconst DAY = 'day';\nconst DAYOFYEAR = 'dayofyear';\nconst HOURS = 'hours';\nconst MINUTES = 'minutes';\nconst SECONDS = 'seconds';\nconst MILLISECONDS = 'milliseconds';\nconst TIME_UNITS = [YEAR, QUARTER, MONTH, WEEK, DATE, DAY, DAYOFYEAR, HOURS, MINUTES, SECONDS, MILLISECONDS];\nconst UNITS = TIME_UNITS.reduce((o, u, i) => (o[u] = 1 + i, o), {});\nfunction timeUnits(units) {\n const u = array(units).slice(),\n m = {}; // check validity\n\n if (!u.length) error('Missing time unit.');\n u.forEach(unit => {\n if (hasOwnProperty(UNITS, unit)) {\n m[unit] = 1;\n } else {\n error(`Invalid time unit: ${unit}.`);\n }\n });\n const numTypes = (m[WEEK] || m[DAY] ? 1 : 0) + (m[QUARTER] || m[MONTH] || m[DATE] ? 1 : 0) + (m[DAYOFYEAR] ? 1 : 0);\n\n if (numTypes > 1) {\n error(`Incompatible time units: ${units}`);\n } // ensure proper sort order\n\n\n u.sort((a, b) => UNITS[a] - UNITS[b]);\n return u;\n}\nconst defaultSpecifiers = {\n [YEAR]: '%Y ',\n [QUARTER]: 'Q%q ',\n [MONTH]: '%b ',\n [DATE]: '%d ',\n [WEEK]: 'W%U ',\n [DAY]: '%a ',\n [DAYOFYEAR]: '%j ',\n [HOURS]: '%H:00',\n [MINUTES]: '00:%M',\n [SECONDS]: ':%S',\n [MILLISECONDS]: '.%L',\n [`${YEAR}-${MONTH}`]: '%Y-%m ',\n [`${YEAR}-${MONTH}-${DATE}`]: '%Y-%m-%d ',\n [`${HOURS}-${MINUTES}`]: '%H:%M'\n};\nfunction timeUnitSpecifier(units, specifiers) {\n const s = extend({}, defaultSpecifiers, specifiers),\n u = timeUnits(units),\n n = u.length;\n let fmt = '',\n start = 0,\n end,\n key;\n\n for (start = 0; start < n;) {\n for (end = u.length; end > start; --end) {\n key = u.slice(start, end).join('-');\n\n if (s[key] != null) {\n fmt += s[key];\n start = end;\n break;\n }\n }\n }\n\n return fmt.trim();\n}\n\nconst t0 = new Date();\n\nfunction localYear(y) {\n t0.setFullYear(y);\n t0.setMonth(0);\n t0.setDate(1);\n t0.setHours(0, 0, 0, 0);\n return t0;\n}\n\nfunction dayofyear(d) {\n return localDayOfYear(new Date(d));\n}\nfunction week(d) {\n return localWeekNum(new Date(d));\n}\nfunction localDayOfYear(d) {\n return timeDay.count(localYear(d.getFullYear()) - 1, d);\n}\nfunction localWeekNum(d) {\n return timeWeek.count(localYear(d.getFullYear()) - 1, d);\n}\nfunction localFirst(y) {\n return localYear(y).getDay();\n}\nfunction localDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(-1, m, d, H, M, S, L);\n date.setFullYear(y);\n return date;\n }\n\n return new Date(y, m, d, H, M, S, L);\n}\nfunction utcdayofyear(d) {\n return utcDayOfYear(new Date(d));\n}\nfunction utcweek(d) {\n return utcWeekNum(new Date(d));\n}\nfunction utcDayOfYear(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcDay.count(y - 1, d);\n}\nfunction utcWeekNum(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcWeek.count(y - 1, d);\n}\nfunction utcFirst(y) {\n t0.setTime(Date.UTC(y, 0, 1));\n return t0.getUTCDay();\n}\nfunction utcDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(Date.UTC(-1, m, d, H, M, S, L));\n date.setUTCFullYear(d.y);\n return date;\n }\n\n return new Date(Date.UTC(y, m, d, H, M, S, L));\n}\n\nfunction floor(units, step, get, inv, newDate) {\n const s = step || 1,\n b = peek(units),\n _ = (unit, p, key) => {\n key = key || unit;\n return getUnit(get[key], inv[key], unit === b && s, p);\n };\n\n const t = new Date(),\n u = toSet(units),\n y = u[YEAR] ? _(YEAR) : constant(2012),\n m = u[MONTH] ? _(MONTH) : u[QUARTER] ? _(QUARTER) : zero,\n d = u[WEEK] && u[DAY] ? _(DAY, 1, WEEK + DAY) : u[WEEK] ? _(WEEK, 1) : u[DAY] ? _(DAY, 1) : u[DATE] ? _(DATE, 1) : u[DAYOFYEAR] ? _(DAYOFYEAR, 1) : one,\n H = u[HOURS] ? _(HOURS) : zero,\n M = u[MINUTES] ? _(MINUTES) : zero,\n S = u[SECONDS] ? _(SECONDS) : zero,\n L = u[MILLISECONDS] ? _(MILLISECONDS) : zero;\n return function (v) {\n t.setTime(+v);\n const year = y(t);\n return newDate(year, m(t), d(t, year), H(t), M(t), S(t), L(t));\n };\n}\n\nfunction getUnit(f, inv, step, phase) {\n const u = step <= 1 ? f : phase ? (d, y) => phase + step * Math.floor((f(d, y) - phase) / step) : (d, y) => step * Math.floor(f(d, y) / step);\n return inv ? (d, y) => inv(u(d, y), y) : u;\n} // returns the day of the year based on week number, day of week,\n// and the day of the week for the first day of the year\n\n\nfunction weekday(week, day, firstDay) {\n return day + week * 7 - (firstDay + 6) % 7;\n} // -- LOCAL TIME --\n\n\nconst localGet = {\n [YEAR]: d => d.getFullYear(),\n [QUARTER]: d => Math.floor(d.getMonth() / 3),\n [MONTH]: d => d.getMonth(),\n [DATE]: d => d.getDate(),\n [HOURS]: d => d.getHours(),\n [MINUTES]: d => d.getMinutes(),\n [SECONDS]: d => d.getSeconds(),\n [MILLISECONDS]: d => d.getMilliseconds(),\n [DAYOFYEAR]: d => localDayOfYear(d),\n [WEEK]: d => localWeekNum(d),\n [WEEK + DAY]: (d, y) => weekday(localWeekNum(d), d.getDay(), localFirst(y)),\n [DAY]: (d, y) => weekday(1, d.getDay(), localFirst(y))\n};\nconst localInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, localFirst(y))\n};\nfunction timeFloor(units, step) {\n return floor(units, step || 1, localGet, localInv, localDate);\n} // -- UTC TIME --\n\nconst utcGet = {\n [YEAR]: d => d.getUTCFullYear(),\n [QUARTER]: d => Math.floor(d.getUTCMonth() / 3),\n [MONTH]: d => d.getUTCMonth(),\n [DATE]: d => d.getUTCDate(),\n [HOURS]: d => d.getUTCHours(),\n [MINUTES]: d => d.getUTCMinutes(),\n [SECONDS]: d => d.getUTCSeconds(),\n [MILLISECONDS]: d => d.getUTCMilliseconds(),\n [DAYOFYEAR]: d => utcDayOfYear(d),\n [WEEK]: d => utcWeekNum(d),\n [DAY]: (d, y) => weekday(1, d.getUTCDay(), utcFirst(y)),\n [WEEK + DAY]: (d, y) => weekday(utcWeekNum(d), d.getUTCDay(), utcFirst(y))\n};\nconst utcInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, utcFirst(y))\n};\nfunction utcFloor(units, step) {\n return floor(units, step || 1, utcGet, utcInv, utcDate);\n}\n\nconst timeIntervals = {\n [YEAR]: timeYear,\n [QUARTER]: timeMonth.every(3),\n [MONTH]: timeMonth,\n [WEEK]: timeWeek,\n [DATE]: timeDay,\n [DAY]: timeDay,\n [DAYOFYEAR]: timeDay,\n [HOURS]: timeHour,\n [MINUTES]: timeMinute,\n [SECONDS]: timeSecond,\n [MILLISECONDS]: timeMillisecond\n};\nconst utcIntervals = {\n [YEAR]: utcYear,\n [QUARTER]: utcMonth.every(3),\n [MONTH]: utcMonth,\n [WEEK]: utcWeek,\n [DATE]: utcDay,\n [DAY]: utcDay,\n [DAYOFYEAR]: utcDay,\n [HOURS]: utcHour,\n [MINUTES]: utcMinute,\n [SECONDS]: utcSecond,\n [MILLISECONDS]: utcMillisecond\n};\nfunction timeInterval(unit) {\n return timeIntervals[unit];\n}\nfunction utcInterval(unit) {\n return utcIntervals[unit];\n}\n\nfunction offset(ival, date, step) {\n return ival ? ival.offset(date, step) : undefined;\n}\n\nfunction timeOffset(unit, date, step) {\n return offset(timeInterval(unit), date, step);\n}\nfunction utcOffset(unit, date, step) {\n return offset(utcInterval(unit), date, step);\n}\n\nfunction sequence(ival, start, stop, step) {\n return ival ? ival.range(start, stop, step) : undefined;\n}\n\nfunction timeSequence(unit, start, stop, step) {\n return sequence(timeInterval(unit), start, stop, step);\n}\nfunction utcSequence(unit, start, stop, step) {\n return sequence(utcInterval(unit), start, stop, step);\n}\n\nconst durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\nconst Milli = [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS],\n Seconds = Milli.slice(0, -1),\n Minutes = Seconds.slice(0, -1),\n Hours = Minutes.slice(0, -1),\n Day = Hours.slice(0, -1),\n Week = [YEAR, WEEK],\n Month = [YEAR, MONTH],\n Year = [YEAR];\nconst intervals = [[Seconds, 1, durationSecond], [Seconds, 5, 5 * durationSecond], [Seconds, 15, 15 * durationSecond], [Seconds, 30, 30 * durationSecond], [Minutes, 1, durationMinute], [Minutes, 5, 5 * durationMinute], [Minutes, 15, 15 * durationMinute], [Minutes, 30, 30 * durationMinute], [Hours, 1, durationHour], [Hours, 3, 3 * durationHour], [Hours, 6, 6 * durationHour], [Hours, 12, 12 * durationHour], [Day, 1, durationDay], [Week, 1, durationWeek], [Month, 1, durationMonth], [Month, 3, 3 * durationMonth], [Year, 1, durationYear]];\nfunction bin (opt) {\n const ext = opt.extent,\n max = opt.maxbins || 40,\n target = Math.abs(span(ext)) / max;\n let i = bisector(i => i[2]).right(intervals, target),\n units,\n step;\n\n if (i === intervals.length) {\n units = Year, step = tickStep(ext[0] / durationYear, ext[1] / durationYear, max);\n } else if (i) {\n i = intervals[target / intervals[i - 1][2] < intervals[i][2] / target ? i - 1 : i];\n units = i[0];\n step = i[1];\n } else {\n units = Milli;\n step = Math.max(tickStep(ext[0], ext[1], max), 1);\n }\n\n return {\n units,\n step\n };\n}\n\nexport { DATE, DAY, DAYOFYEAR, HOURS, MILLISECONDS, MINUTES, MONTH, QUARTER, SECONDS, TIME_UNITS, WEEK, YEAR, dayofyear, bin as timeBin, timeFloor, timeInterval, timeOffset, timeSequence, timeUnitSpecifier, timeUnits, utcFloor, utcInterval, utcOffset, utcSequence, utcdayofyear, utcweek, week };\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import { tickStep } from 'd3-array';\nimport { formatSpecifier, precisionFixed, precisionRound, precisionPrefix, formatLocale, format, formatPrefix } from 'd3-format';\nimport { SECONDS, MINUTES, HOURS, DATE, WEEK, MONTH, QUARTER, YEAR, MILLISECONDS, DAY, timeInterval, utcInterval } from 'vega-time';\nimport { isString, isObject, error, extend } from 'vega-util';\nimport { timeFormat, timeParse, utcFormat, utcParse, timeFormatLocale as timeFormatLocale$1 } from 'd3-time-format';\n\nfunction memoize (method) {\n const cache = {};\n return spec => cache[spec] || (cache[spec] = method(spec));\n}\n\nfunction trimZeroes(numberFormat, decimalChar) {\n return x => {\n const str = numberFormat(x),\n dec = str.indexOf(decimalChar);\n if (dec < 0) return str;\n let idx = rightmostDigit(str, dec);\n const end = idx < str.length ? str.slice(idx) : '';\n\n while (--idx > dec) if (str[idx] !== '0') {\n ++idx;\n break;\n }\n\n return str.slice(0, idx) + end;\n };\n}\n\nfunction rightmostDigit(str, dec) {\n let i = str.lastIndexOf('e'),\n c;\n if (i > 0) return i;\n\n for (i = str.length; --i > dec;) {\n c = str.charCodeAt(i);\n if (c >= 48 && c <= 57) return i + 1; // is digit\n }\n}\n\nfunction numberLocale(locale) {\n const format = memoize(locale.format),\n formatPrefix = locale.formatPrefix;\n return {\n format,\n formatPrefix,\n\n formatFloat(spec) {\n const s = formatSpecifier(spec || ',');\n\n if (s.precision == null) {\n s.precision = 12;\n\n switch (s.type) {\n case '%':\n s.precision -= 2;\n break;\n\n case 'e':\n s.precision -= 1;\n break;\n }\n\n return trimZeroes(format(s), // number format\n format('.1f')(1)[1] // decimal point character\n );\n } else {\n return format(s);\n }\n },\n\n formatSpan(start, stop, count, specifier) {\n specifier = formatSpecifier(specifier == null ? ',f' : specifier);\n const step = tickStep(start, stop, count),\n value = Math.max(Math.abs(start), Math.abs(stop));\n let precision;\n\n if (specifier.precision == null) {\n switch (specifier.type) {\n case 's':\n {\n if (!isNaN(precision = precisionPrefix(step, value))) {\n specifier.precision = precision;\n }\n\n return formatPrefix(specifier, value);\n }\n\n case '':\n case 'e':\n case 'g':\n case 'p':\n case 'r':\n {\n if (!isNaN(precision = precisionRound(step, value))) {\n specifier.precision = precision - (specifier.type === 'e');\n }\n\n break;\n }\n\n case 'f':\n case '%':\n {\n if (!isNaN(precision = precisionFixed(step))) {\n specifier.precision = precision - (specifier.type === '%') * 2;\n }\n\n break;\n }\n }\n }\n\n return format(specifier);\n }\n\n };\n}\n\nlet defaultNumberLocale;\nresetNumberFormatDefaultLocale();\nfunction resetNumberFormatDefaultLocale() {\n return defaultNumberLocale = numberLocale({\n format: format,\n formatPrefix: formatPrefix\n });\n}\nfunction numberFormatLocale(definition) {\n return numberLocale(formatLocale(definition));\n}\nfunction numberFormatDefaultLocale(definition) {\n return arguments.length ? defaultNumberLocale = numberFormatLocale(definition) : defaultNumberLocale;\n}\n\nfunction timeMultiFormat(format, interval, spec) {\n spec = spec || {};\n\n if (!isObject(spec)) {\n error(`Invalid time multi-format specifier: ${spec}`);\n }\n\n const second = interval(SECONDS),\n minute = interval(MINUTES),\n hour = interval(HOURS),\n day = interval(DATE),\n week = interval(WEEK),\n month = interval(MONTH),\n quarter = interval(QUARTER),\n year = interval(YEAR),\n L = format(spec[MILLISECONDS] || '.%L'),\n S = format(spec[SECONDS] || ':%S'),\n M = format(spec[MINUTES] || '%I:%M'),\n H = format(spec[HOURS] || '%I %p'),\n d = format(spec[DATE] || spec[DAY] || '%a %d'),\n w = format(spec[WEEK] || '%b %d'),\n m = format(spec[MONTH] || '%B'),\n q = format(spec[QUARTER] || '%B'),\n y = format(spec[YEAR] || '%Y');\n return date => (second(date) < date ? L : minute(date) < date ? S : hour(date) < date ? M : day(date) < date ? H : month(date) < date ? week(date) < date ? d : w : year(date) < date ? quarter(date) < date ? m : q : y)(date);\n}\n\nfunction timeLocale(locale) {\n const timeFormat = memoize(locale.format),\n utcFormat = memoize(locale.utcFormat);\n return {\n timeFormat: spec => isString(spec) ? timeFormat(spec) : timeMultiFormat(timeFormat, timeInterval, spec),\n utcFormat: spec => isString(spec) ? utcFormat(spec) : timeMultiFormat(utcFormat, utcInterval, spec),\n timeParse: memoize(locale.parse),\n utcParse: memoize(locale.utcParse)\n };\n}\n\nlet defaultTimeLocale;\nresetTimeFormatDefaultLocale();\nfunction resetTimeFormatDefaultLocale() {\n return defaultTimeLocale = timeLocale({\n format: timeFormat,\n parse: timeParse,\n utcFormat: utcFormat,\n utcParse: utcParse\n });\n}\nfunction timeFormatLocale(definition) {\n return timeLocale(timeFormatLocale$1(definition));\n}\nfunction timeFormatDefaultLocale(definition) {\n return arguments.length ? defaultTimeLocale = timeFormatLocale(definition) : defaultTimeLocale;\n}\n\nconst createLocale = (number, time) => extend({}, number, time);\n\nfunction locale(numberSpec, timeSpec) {\n const number = numberSpec ? numberFormatLocale(numberSpec) : numberFormatDefaultLocale();\n const time = timeSpec ? timeFormatLocale(timeSpec) : timeFormatDefaultLocale();\n return createLocale(number, time);\n}\nfunction defaultLocale(numberSpec, timeSpec) {\n const args = arguments.length;\n\n if (args && args !== 2) {\n error('defaultLocale expects either zero or two arguments.');\n }\n\n return args ? createLocale(numberFormatDefaultLocale(numberSpec), timeFormatDefaultLocale(timeSpec)) : createLocale(numberFormatDefaultLocale(), timeFormatDefaultLocale());\n}\nfunction resetDefaultLocale() {\n resetNumberFormatDefaultLocale();\n resetTimeFormatDefaultLocale();\n return defaultLocale();\n}\n\nexport { defaultLocale, locale, numberFormatDefaultLocale, numberFormatLocale, resetDefaultLocale, resetNumberFormatDefaultLocale, resetTimeFormatDefaultLocale, timeFormatDefaultLocale, timeFormatLocale };\n","import { extend, error, isFunction, stringValue, toBoolean, toNumber, toDate, toString, identity, field, isObject, isArray, isIterable, hasOwnProperty } from 'vega-util';\nimport { dsvFormat } from 'd3-dsv';\nimport { feature, mesh } from 'topojson-client';\nimport { timeFormatDefaultLocale } from 'vega-format';\n\n// https://... file://... //...\n\nconst protocol_re = /^([A-Za-z]+:)?\\/\\//; // Matches allowed URIs. From https://github.com/cure53/DOMPurify/blob/master/src/regexp.js with added file://\n\nconst allowed_re = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i; // eslint-disable-line no-useless-escape\n\nconst whitespace_re = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g; // eslint-disable-line no-control-regex\n// Special treatment in node.js for the file: protocol\n\nconst fileProtocol = 'file://';\n/**\n * Factory for a loader constructor that provides methods for requesting\n * files from either the network or disk, and for sanitizing request URIs.\n * @param {function} fetch - The Fetch API for HTTP network requests.\n * If null or undefined, HTTP loading will be disabled.\n * @param {object} fs - The file system interface for file loading.\n * If null or undefined, local file loading will be disabled.\n * @return {function} A loader constructor with the following signature:\n * param {object} [options] - Optional default loading options to use.\n * return {object} - A new loader instance.\n */\n\nfunction loaderFactory (fetch, fs) {\n return options => ({\n options: options || {},\n sanitize: sanitize,\n load: load,\n fileAccess: !!fs,\n file: fileLoader(fs),\n http: httpLoader(fetch)\n });\n}\n/**\n * Load an external resource, typically either from the web or from the local\n * filesystem. This function uses {@link sanitize} to first sanitize the uri,\n * then calls either {@link http} (for web requests) or {@link file} (for\n * filesystem loading).\n * @param {string} uri - The resource indicator (e.g., URL or filename).\n * @param {object} [options] - Optional loading options. These options will\n * override any existing default options.\n * @return {Promise} - A promise that resolves to the loaded content.\n */\n\nasync function load(uri, options) {\n const opt = await this.sanitize(uri, options),\n url = opt.href;\n return opt.localFile ? this.file(url) : this.http(url, options);\n}\n/**\n * URI sanitizer function.\n * @param {string} uri - The uri (url or filename) to check.\n * @param {object} options - An options hash.\n * @return {Promise} - A promise that resolves to an object containing\n * sanitized uri data, or rejects it the input uri is deemed invalid.\n * The properties of the resolved object are assumed to be\n * valid attributes for an HTML 'a' tag. The sanitized uri *must* be\n * provided by the 'href' property of the returned object.\n */\n\n\nasync function sanitize(uri, options) {\n options = extend({}, this.options, options);\n const fileAccess = this.fileAccess,\n result = {\n href: null\n };\n let isFile, loadFile, base;\n const isAllowed = allowed_re.test(uri.replace(whitespace_re, ''));\n\n if (uri == null || typeof uri !== 'string' || !isAllowed) {\n error('Sanitize failure, invalid URI: ' + stringValue(uri));\n }\n\n const hasProtocol = protocol_re.test(uri); // if relative url (no protocol/host), prepend baseURL\n\n if ((base = options.baseURL) && !hasProtocol) {\n // Ensure that there is a slash between the baseURL (e.g. hostname) and url\n if (!uri.startsWith('/') && base[base.length - 1] !== '/') {\n uri = '/' + uri;\n }\n\n uri = base + uri;\n } // should we load from file system?\n\n\n loadFile = (isFile = uri.startsWith(fileProtocol)) || options.mode === 'file' || options.mode !== 'http' && !hasProtocol && fileAccess;\n\n if (isFile) {\n // strip file protocol\n uri = uri.slice(fileProtocol.length);\n } else if (uri.startsWith('//')) {\n if (options.defaultProtocol === 'file') {\n // if is file, strip protocol and set loadFile flag\n uri = uri.slice(2);\n loadFile = true;\n } else {\n // if relative protocol (starts with '//'), prepend default protocol\n uri = (options.defaultProtocol || 'http') + ':' + uri;\n }\n } // set non-enumerable mode flag to indicate local file load\n\n\n Object.defineProperty(result, 'localFile', {\n value: !!loadFile\n }); // set uri\n\n result.href = uri; // set default result target, if specified\n\n if (options.target) {\n result.target = options.target + '';\n } // set default result rel, if specified (#1542)\n\n\n if (options.rel) {\n result.rel = options.rel + '';\n } // provide control over cross-origin image handling (#2238)\n // https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image\n\n\n if (options.context === 'image' && options.crossOrigin) {\n result.crossOrigin = options.crossOrigin + '';\n } // return\n\n\n return result;\n}\n/**\n * File system loader factory.\n * @param {object} fs - The file system interface.\n * @return {function} - A file loader with the following signature:\n * param {string} filename - The file system path to load.\n * param {string} filename - The file system path to load.\n * return {Promise} A promise that resolves to the file contents.\n */\n\n\nfunction fileLoader(fs) {\n return fs ? filename => new Promise((accept, reject) => {\n fs.readFile(filename, (error, data) => {\n if (error) reject(error);else accept(data);\n });\n }) : fileReject;\n}\n/**\n * Default file system loader that simply rejects.\n */\n\n\nasync function fileReject() {\n error('No file system access.');\n}\n/**\n * HTTP request handler factory.\n * @param {function} fetch - The Fetch API method.\n * @return {function} - An http loader with the following signature:\n * param {string} url - The url to request.\n * param {object} options - An options hash.\n * return {Promise} - A promise that resolves to the file contents.\n */\n\n\nfunction httpLoader(fetch) {\n return fetch ? async function (url, options) {\n const opt = extend({}, this.options.http, options),\n type = options && options.response,\n response = await fetch(url, opt);\n return !response.ok ? error(response.status + '' + response.statusText) : isFunction(response[type]) ? response[type]() : response.text();\n } : httpReject;\n}\n/**\n * Default http request handler that simply rejects.\n */\n\n\nasync function httpReject() {\n error('No HTTP fetch method available.');\n}\n\nconst isValid = _ => _ != null && _ === _;\n\nconst isBoolean = _ => _ === 'true' || _ === 'false' || _ === true || _ === false;\n\nconst isDate = _ => !Number.isNaN(Date.parse(_));\n\nconst isNumber = _ => !Number.isNaN(+_) && !(_ instanceof Date);\n\nconst isInteger = _ => isNumber(_) && Number.isInteger(+_);\n\nconst typeParsers = {\n boolean: toBoolean,\n integer: toNumber,\n number: toNumber,\n date: toDate,\n string: toString,\n unknown: identity\n};\nconst typeTests = [isBoolean, isInteger, isNumber, isDate];\nconst typeList = ['boolean', 'integer', 'number', 'date'];\nfunction inferType(values, field) {\n if (!values || !values.length) return 'unknown';\n const n = values.length,\n m = typeTests.length,\n a = typeTests.map((_, i) => i + 1);\n\n for (let i = 0, t = 0, j, value; i < n; ++i) {\n value = field ? values[i][field] : values[i];\n\n for (j = 0; j < m; ++j) {\n if (a[j] && isValid(value) && !typeTests[j](value)) {\n a[j] = 0;\n ++t;\n if (t === typeTests.length) return 'string';\n }\n }\n }\n\n return typeList[a.reduce((u, v) => u === 0 ? v : u, 0) - 1];\n}\nfunction inferTypes(data, fields) {\n return fields.reduce((types, field) => {\n types[field] = inferType(data, field);\n return types;\n }, {});\n}\n\nfunction delimitedFormat(delimiter) {\n const parse = function (data, format) {\n const delim = {\n delimiter: delimiter\n };\n return dsv(data, format ? extend(format, delim) : delim);\n };\n\n parse.responseType = 'text';\n return parse;\n}\nfunction dsv(data, format) {\n if (format.header) {\n data = format.header.map(stringValue).join(format.delimiter) + '\\n' + data;\n }\n\n return dsvFormat(format.delimiter).parse(data + '');\n}\ndsv.responseType = 'text';\n\nfunction isBuffer(_) {\n return typeof Buffer === 'function' && isFunction(Buffer.isBuffer) ? Buffer.isBuffer(_) : false;\n}\n\nfunction json(data, format) {\n const prop = format && format.property ? field(format.property) : identity;\n return isObject(data) && !isBuffer(data) ? parseJSON(prop(data), format) : prop(JSON.parse(data));\n}\njson.responseType = 'json';\n\nfunction parseJSON(data, format) {\n if (!isArray(data) && isIterable(data)) {\n data = [...data];\n }\n\n return format && format.copy ? JSON.parse(JSON.stringify(data)) : data;\n}\n\nconst filters = {\n interior: (a, b) => a !== b,\n exterior: (a, b) => a === b\n};\nfunction topojson(data, format) {\n let method, object, property, filter;\n data = json(data, format);\n\n if (format && format.feature) {\n method = feature;\n property = format.feature;\n } else if (format && format.mesh) {\n method = mesh;\n property = format.mesh;\n filter = filters[format.filter];\n } else {\n error('Missing TopoJSON feature or mesh parameter.');\n }\n\n object = (object = data.objects[property]) ? method(data, object, filter) : error('Invalid TopoJSON object: ' + property);\n return object && object.features || [object];\n}\ntopojson.responseType = 'json';\n\nconst format = {\n dsv: dsv,\n csv: delimitedFormat(','),\n tsv: delimitedFormat('\\t'),\n json: json,\n topojson: topojson\n};\nfunction formats(name, reader) {\n if (arguments.length > 1) {\n format[name] = reader;\n return this;\n } else {\n return hasOwnProperty(format, name) ? format[name] : null;\n }\n}\nfunction responseType(type) {\n const f = formats(type);\n return f && f.responseType || 'text';\n}\n\nfunction read (data, schema, timeParser, utcParser) {\n schema = schema || {};\n const reader = formats(schema.type || 'json');\n if (!reader) error('Unknown data format type: ' + schema.type);\n data = reader(data, schema);\n if (schema.parse) parse(data, schema.parse, timeParser, utcParser);\n if (hasOwnProperty(data, 'columns')) delete data.columns;\n return data;\n}\n\nfunction parse(data, types, timeParser, utcParser) {\n if (!data.length) return; // early exit for empty data\n\n const locale = timeFormatDefaultLocale();\n timeParser = timeParser || locale.timeParse;\n utcParser = utcParser || locale.utcParse;\n let fields = data.columns || Object.keys(data[0]),\n datum,\n field,\n i,\n j,\n n,\n m;\n if (types === 'auto') types = inferTypes(data, fields);\n fields = Object.keys(types);\n const parsers = fields.map(field => {\n const type = types[field];\n let parts, pattern;\n\n if (type && (type.startsWith('date:') || type.startsWith('utc:'))) {\n parts = type.split(/:(.+)?/, 2); // split on first :\n\n pattern = parts[1];\n\n if (pattern[0] === '\\'' && pattern[pattern.length - 1] === '\\'' || pattern[0] === '\"' && pattern[pattern.length - 1] === '\"') {\n pattern = pattern.slice(1, -1);\n }\n\n const parse = parts[0] === 'utc' ? utcParser : timeParser;\n return parse(pattern);\n }\n\n if (!typeParsers[type]) {\n throw Error('Illegal format pattern: ' + field + ':' + type);\n }\n\n return typeParsers[type];\n });\n\n for (i = 0, n = data.length, m = fields.length; i < n; ++i) {\n datum = data[i];\n\n for (j = 0; j < m; ++j) {\n field = fields[j];\n datum[field] = parsers[j](datum[field]);\n }\n }\n}\n\nconst loader = loaderFactory(typeof fetch !== 'undefined' && fetch, // use built-in fetch API\nnull // no file system access\n);\n\nexport { format, formats, inferType, inferTypes, loader, read, responseType, typeParsers };\n","import { identity, array, isFunction, constant, isArray, id, error, truthy, debounce, extend, visitArray, inherits, logger, Error, hasOwnProperty } from 'vega-util';\nimport { read, responseType, loader } from 'vega-loader';\nimport { defaultLocale } from 'vega-format';\n\nfunction UniqueList(idFunc) {\n const $ = idFunc || identity,\n list = [],\n ids = {};\n\n list.add = _ => {\n const id = $(_);\n\n if (!ids[id]) {\n ids[id] = 1;\n list.push(_);\n }\n\n return list;\n };\n\n list.remove = _ => {\n const id = $(_);\n\n if (ids[id]) {\n ids[id] = 0;\n const idx = list.indexOf(_);\n if (idx >= 0) list.splice(idx, 1);\n }\n\n return list;\n };\n\n return list;\n}\n\n/**\n * Invoke and await a potentially async callback function. If\n * an error occurs, trap it and route to Dataflow.error.\n * @param {Dataflow} df - The dataflow instance\n * @param {function} callback - A callback function to invoke\n * and then await. The dataflow will be passed as the single\n * argument to the function.\n */\nasync function asyncCallback (df, callback) {\n try {\n await callback(df);\n } catch (err) {\n df.error(err);\n }\n}\n\nconst TUPLE_ID_KEY = Symbol('vega_id');\nlet TUPLE_ID = 1;\n/**\n * Checks if an input value is a registered tuple.\n * @param {*} t - The value to check.\n * @return {boolean} True if the input is a tuple, false otherwise.\n */\n\nfunction isTuple(t) {\n return !!(t && tupleid(t));\n}\n/**\n * Returns the id of a tuple.\n * @param {object} t - The input tuple.\n * @return {*} the tuple id.\n */\n\nfunction tupleid(t) {\n return t[TUPLE_ID_KEY];\n}\n/**\n * Sets the id of a tuple.\n * @param {object} t - The input tuple.\n * @param {*} id - The id value to set.\n * @return {object} the input tuple.\n */\n\nfunction setid(t, id) {\n t[TUPLE_ID_KEY] = id;\n return t;\n}\n/**\n * Ingest an object or value as a data tuple.\n * If the input value is an object, an id field will be added to it. For\n * efficiency, the input object is modified directly. A copy is not made.\n * If the input value is a literal, it will be wrapped in a new object\n * instance, with the value accessible as the 'data' property.\n * @param datum - The value to ingest.\n * @return {object} The ingested data tuple.\n */\n\n\nfunction ingest$1(datum) {\n const t = datum === Object(datum) ? datum : {\n data: datum\n };\n return tupleid(t) ? t : setid(t, TUPLE_ID++);\n}\n/**\n * Given a source tuple, return a derived copy.\n * @param {object} t - The source tuple.\n * @return {object} The derived tuple.\n */\n\nfunction derive(t) {\n return rederive(t, ingest$1({}));\n}\n/**\n * Rederive a derived tuple by copying values from the source tuple.\n * @param {object} t - The source tuple.\n * @param {object} d - The derived tuple.\n * @return {object} The derived tuple.\n */\n\nfunction rederive(t, d) {\n for (const k in t) d[k] = t[k];\n\n return d;\n}\n/**\n * Replace an existing tuple with a new tuple.\n * @param {object} t - The existing data tuple.\n * @param {object} d - The new tuple that replaces the old.\n * @return {object} The new tuple.\n */\n\nfunction replace(t, d) {\n return setid(d, tupleid(t));\n}\n/**\n * Generate an augmented comparator function that provides stable\n * sorting by tuple id when the given comparator produces ties.\n * @param {function} cmp - The comparator to augment.\n * @param {function} [f] - Optional tuple accessor function.\n * @return {function} An augmented comparator function.\n */\n\nfunction stableCompare(cmp, f) {\n return !cmp ? null : f ? (a, b) => cmp(a, b) || tupleid(f(a)) - tupleid(f(b)) : (a, b) => cmp(a, b) || tupleid(a) - tupleid(b);\n}\n\nfunction isChangeSet(v) {\n return v && v.constructor === changeset;\n}\nfunction changeset() {\n const add = [],\n // insert tuples\n rem = [],\n // remove tuples\n mod = [],\n // modify tuples\n remp = [],\n // remove by predicate\n modp = []; // modify by predicate\n\n let clean = null,\n reflow = false;\n return {\n constructor: changeset,\n\n insert(t) {\n const d = array(t),\n n = d.length;\n\n for (let i = 0; i < n; ++i) add.push(d[i]);\n\n return this;\n },\n\n remove(t) {\n const a = isFunction(t) ? remp : rem,\n d = array(t),\n n = d.length;\n\n for (let i = 0; i < n; ++i) a.push(d[i]);\n\n return this;\n },\n\n modify(t, field, value) {\n const m = {\n field: field,\n value: constant(value)\n };\n\n if (isFunction(t)) {\n m.filter = t;\n modp.push(m);\n } else {\n m.tuple = t;\n mod.push(m);\n }\n\n return this;\n },\n\n encode(t, set) {\n if (isFunction(t)) modp.push({\n filter: t,\n field: set\n });else mod.push({\n tuple: t,\n field: set\n });\n return this;\n },\n\n clean(value) {\n clean = value;\n return this;\n },\n\n reflow() {\n reflow = true;\n return this;\n },\n\n pulse(pulse, tuples) {\n const cur = {},\n out = {};\n let i, n, m, f, t, id; // build lookup table of current tuples\n\n for (i = 0, n = tuples.length; i < n; ++i) {\n cur[tupleid(tuples[i])] = 1;\n } // process individual tuples to remove\n\n\n for (i = 0, n = rem.length; i < n; ++i) {\n t = rem[i];\n cur[tupleid(t)] = -1;\n } // process predicate-based removals\n\n\n for (i = 0, n = remp.length; i < n; ++i) {\n f = remp[i];\n tuples.forEach(t => {\n if (f(t)) cur[tupleid(t)] = -1;\n });\n } // process all add tuples\n\n\n for (i = 0, n = add.length; i < n; ++i) {\n t = add[i];\n id = tupleid(t);\n\n if (cur[id]) {\n // tuple already resides in dataset\n // if flagged for both add and remove, cancel\n cur[id] = 1;\n } else {\n // tuple does not reside in dataset, add\n pulse.add.push(ingest$1(add[i]));\n }\n } // populate pulse rem list\n\n\n for (i = 0, n = tuples.length; i < n; ++i) {\n t = tuples[i];\n if (cur[tupleid(t)] < 0) pulse.rem.push(t);\n } // modify helper method\n\n\n function modify(t, f, v) {\n if (v) {\n t[f] = v(t);\n } else {\n pulse.encode = f;\n }\n\n if (!reflow) out[tupleid(t)] = t;\n } // process individual tuples to modify\n\n\n for (i = 0, n = mod.length; i < n; ++i) {\n m = mod[i];\n t = m.tuple;\n f = m.field;\n id = cur[tupleid(t)];\n\n if (id > 0) {\n modify(t, f, m.value);\n pulse.modifies(f);\n }\n } // process predicate-based modifications\n\n\n for (i = 0, n = modp.length; i < n; ++i) {\n m = modp[i];\n f = m.filter;\n tuples.forEach(t => {\n if (f(t) && cur[tupleid(t)] > 0) {\n modify(t, m.field, m.value);\n }\n });\n pulse.modifies(m.field);\n } // upon reflow request, populate mod with all non-removed tuples\n // otherwise, populate mod with modified tuples only\n\n\n if (reflow) {\n pulse.mod = rem.length || remp.length ? tuples.filter(t => cur[tupleid(t)] > 0) : tuples.slice();\n } else {\n for (id in out) pulse.mod.push(out[id]);\n } // set pulse garbage collection request\n\n\n if (clean || clean == null && (rem.length || remp.length)) {\n pulse.clean(true);\n }\n\n return pulse;\n }\n\n };\n}\n\nconst CACHE = '_:mod:_';\n/**\n * Hash that tracks modifications to assigned values.\n * Callers *must* use the set method to update values.\n */\n\nfunction Parameters() {\n Object.defineProperty(this, CACHE, {\n writable: true,\n value: {}\n });\n}\nParameters.prototype = {\n /**\n * Set a parameter value. If the parameter value changes, the parameter\n * will be recorded as modified.\n * @param {string} name - The parameter name.\n * @param {number} index - The index into an array-value parameter. Ignored if\n * the argument is undefined, null or less than zero.\n * @param {*} value - The parameter value to set.\n * @param {boolean} [force=false] - If true, records the parameter as modified\n * even if the value is unchanged.\n * @return {Parameters} - This parameter object.\n */\n set(name, index, value, force) {\n const o = this,\n v = o[name],\n mod = o[CACHE];\n\n if (index != null && index >= 0) {\n if (v[index] !== value || force) {\n v[index] = value;\n mod[index + ':' + name] = -1;\n mod[name] = -1;\n }\n } else if (v !== value || force) {\n o[name] = value;\n mod[name] = isArray(value) ? 1 + value.length : -1;\n }\n\n return o;\n },\n\n /**\n * Tests if one or more parameters has been modified. If invoked with no\n * arguments, returns true if any parameter value has changed. If the first\n * argument is array, returns trues if any parameter name in the array has\n * changed. Otherwise, tests if the given name and optional array index has\n * changed.\n * @param {string} name - The parameter name to test.\n * @param {number} [index=undefined] - The parameter array index to test.\n * @return {boolean} - Returns true if a queried parameter was modified.\n */\n modified(name, index) {\n const mod = this[CACHE];\n\n if (!arguments.length) {\n for (const k in mod) {\n if (mod[k]) return true;\n }\n\n return false;\n } else if (isArray(name)) {\n for (let k = 0; k < name.length; ++k) {\n if (mod[name[k]]) return true;\n }\n\n return false;\n }\n\n return index != null && index >= 0 ? index + 1 < mod[name] || !!mod[index + ':' + name] : !!mod[name];\n },\n\n /**\n * Clears the modification records. After calling this method,\n * all parameters are considered unmodified.\n */\n clear() {\n this[CACHE] = {};\n return this;\n }\n\n};\n\nlet OP_ID = 0;\nconst PULSE = 'pulse',\n NO_PARAMS = new Parameters(); // Boolean Flags\n\nconst SKIP$1 = 1,\n MODIFIED = 2;\n/**\n * An Operator is a processing node in a dataflow graph.\n * Each operator stores a value and an optional value update function.\n * Operators can accept a hash of named parameters. Parameter values can\n * either be direct (JavaScript literals, arrays, objects) or indirect\n * (other operators whose values will be pulled dynamically). Operators\n * included as parameters will have this operator added as a dependency.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {function(object, Pulse)} [update] - An update function. Upon\n * evaluation of this operator, the update function will be invoked and the\n * return value will be used as the new value of this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @see parameters\n */\n\nfunction Operator(init, update, params, react) {\n this.id = ++OP_ID;\n this.value = init;\n this.stamp = -1;\n this.rank = -1;\n this.qrank = -1;\n this.flags = 0;\n\n if (update) {\n this._update = update;\n }\n\n if (params) this.parameters(params, react);\n}\n\nfunction flag(bit) {\n return function (state) {\n const f = this.flags;\n if (arguments.length === 0) return !!(f & bit);\n this.flags = state ? f | bit : f & ~bit;\n return this;\n };\n}\n\nOperator.prototype = {\n /**\n * Returns a list of target operators dependent on this operator.\n * If this list does not exist, it is created and then returned.\n * @return {UniqueList}\n */\n targets() {\n return this._targets || (this._targets = UniqueList(id));\n },\n\n /**\n * Sets the value of this operator.\n * @param {*} value - the value to set.\n * @return {Number} Returns 1 if the operator value has changed\n * according to strict equality, returns 0 otherwise.\n */\n set(value) {\n if (this.value !== value) {\n this.value = value;\n return 1;\n } else {\n return 0;\n }\n },\n\n /**\n * Indicates that operator evaluation should be skipped on the next pulse.\n * This operator will still propagate incoming pulses, but its update function\n * will not be invoked. The skip flag is reset after every pulse, so calling\n * this method will affect processing of the next pulse only.\n */\n skip: flag(SKIP$1),\n\n /**\n * Indicates that this operator's value has been modified on its most recent\n * pulse. Normally modification is checked via strict equality; however, in\n * some cases it is more efficient to update the internal state of an object.\n * In those cases, the modified flag can be used to trigger propagation. Once\n * set, the modification flag persists across pulses until unset. The flag can\n * be used with the last timestamp to test if a modification is recent.\n */\n modified: flag(MODIFIED),\n\n /**\n * Sets the parameters for this operator. The parameter values are analyzed for\n * operator instances. If found, this operator will be added as a dependency\n * of the parameterizing operator. Operator values are dynamically marshalled\n * from each operator parameter prior to evaluation. If a parameter value is\n * an array, the array will also be searched for Operator instances. However,\n * the search does not recurse into sub-arrays or object properties.\n * @param {object} params - A hash of operator parameters.\n * @param {boolean} [react=true] - A flag indicating if this operator should\n * automatically update (react) when parameter values change. In other words,\n * this flag determines if the operator registers itself as a listener on\n * any upstream operators included in the parameters.\n * @param {boolean} [initonly=false] - A flag indicating if this operator\n * should calculate an update only upon its initiatal evaluation, then\n * deregister dependencies and suppress all future update invocations.\n * @return {Operator[]} - An array of upstream dependencies.\n */\n parameters(params, react, initonly) {\n react = react !== false;\n const argval = this._argval = this._argval || new Parameters(),\n argops = this._argops = this._argops || [],\n deps = [];\n let name, value, n, i;\n\n const add = (name, index, value) => {\n if (value instanceof Operator) {\n if (value !== this) {\n if (react) value.targets().add(this);\n deps.push(value);\n }\n\n argops.push({\n op: value,\n name: name,\n index: index\n });\n } else {\n argval.set(name, index, value);\n }\n };\n\n for (name in params) {\n value = params[name];\n\n if (name === PULSE) {\n array(value).forEach(op => {\n if (!(op instanceof Operator)) {\n error('Pulse parameters must be operator instances.');\n } else if (op !== this) {\n op.targets().add(this);\n deps.push(op);\n }\n });\n this.source = value;\n } else if (isArray(value)) {\n argval.set(name, -1, Array(n = value.length));\n\n for (i = 0; i < n; ++i) add(name, i, value[i]);\n } else {\n add(name, -1, value);\n }\n }\n\n this.marshall().clear(); // initialize values\n\n if (initonly) argops.initonly = true;\n return deps;\n },\n\n /**\n * Internal method for marshalling parameter values.\n * Visits each operator dependency to pull the latest value.\n * @return {Parameters} A Parameters object to pass to the update function.\n */\n marshall(stamp) {\n const argval = this._argval || NO_PARAMS,\n argops = this._argops;\n let item, i, op, mod;\n\n if (argops) {\n const n = argops.length;\n\n for (i = 0; i < n; ++i) {\n item = argops[i];\n op = item.op;\n mod = op.modified() && op.stamp === stamp;\n argval.set(item.name, item.index, op.value, mod);\n }\n\n if (argops.initonly) {\n for (i = 0; i < n; ++i) {\n item = argops[i];\n item.op.targets().remove(this);\n }\n\n this._argops = null;\n this._update = null;\n }\n }\n\n return argval;\n },\n\n /**\n * Detach this operator from the dataflow.\n * Unregisters listeners on upstream dependencies.\n */\n detach() {\n const argops = this._argops;\n let i, n, item, op;\n\n if (argops) {\n for (i = 0, n = argops.length; i < n; ++i) {\n item = argops[i];\n op = item.op;\n\n if (op._targets) {\n op._targets.remove(this);\n }\n }\n } // remove references to the source and pulse object,\n // if present, to prevent memory leaks of old data.\n\n\n this.pulse = null;\n this.source = null;\n },\n\n /**\n * Delegate method to perform operator processing.\n * Subclasses can override this method to perform custom processing.\n * By default, it marshalls parameters and calls the update function\n * if that function is defined. If the update function does not\n * change the operator value then StopPropagation is returned.\n * If no update function is defined, this method does nothing.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return The output pulse or StopPropagation. A falsy return value\n * (including undefined) will let the input pulse pass through.\n */\n evaluate(pulse) {\n const update = this._update;\n\n if (update) {\n const params = this.marshall(pulse.stamp),\n v = update.call(this, params, pulse);\n params.clear();\n\n if (v !== this.value) {\n this.value = v;\n } else if (!this.modified()) {\n return pulse.StopPropagation;\n }\n }\n },\n\n /**\n * Run this operator for the current pulse. If this operator has already\n * been run at (or after) the pulse timestamp, returns StopPropagation.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\n run(pulse) {\n if (pulse.stamp < this.stamp) return pulse.StopPropagation;\n let rv;\n\n if (this.skip()) {\n this.skip(false);\n rv = 0;\n } else {\n rv = this.evaluate(pulse);\n }\n\n return this.pulse = rv || pulse;\n }\n\n};\n\n/**\n * Add an operator to the dataflow graph. This function accepts a\n * variety of input argument types. The basic signature supports an\n * initial value, update function and parameters. If the first parameter\n * is an Operator instance, it will be added directly. If it is a\n * constructor for an Operator subclass, a new instance will be instantiated.\n * Otherwise, if the first parameter is a function instance, it will be used\n * as the update function and a null initial value is assumed.\n * @param {*} init - One of: the operator to add, the initial value of\n * the operator, an operator class to instantiate, or an update function.\n * @param {function} [update] - The operator update function.\n * @param {object} [params] - The operator parameters.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @return {Operator} - The added operator.\n */\n\nfunction add (init, update, params, react) {\n let shift = 1,\n op;\n\n if (init instanceof Operator) {\n op = init;\n } else if (init && init.prototype instanceof Operator) {\n op = new init();\n } else if (isFunction(init)) {\n op = new Operator(null, init);\n } else {\n shift = 0;\n op = new Operator(init, update);\n }\n\n this.rank(op);\n\n if (shift) {\n react = params;\n params = update;\n }\n\n if (params) this.connect(op, op.parameters(params, react));\n this.touch(op);\n return op;\n}\n\n/**\n * Connect a target operator as a dependent of source operators.\n * If necessary, this method will rerank the target operator and its\n * dependents to ensure propagation proceeds in a topologically sorted order.\n * @param {Operator} target - The target operator.\n * @param {Array} - The source operators that should propagate\n * to the target operator.\n */\nfunction connect (target, sources) {\n const targetRank = target.rank,\n n = sources.length;\n\n for (let i = 0; i < n; ++i) {\n if (targetRank < sources[i].rank) {\n this.rerank(target);\n return;\n }\n }\n}\n\nlet STREAM_ID = 0;\n/**\n * Models an event stream.\n * @constructor\n * @param {function(Object, number): boolean} [filter] - Filter predicate.\n * Events pass through when truthy, events are suppressed when falsy.\n * @param {function(Object): *} [apply] - Applied to input events to produce\n * new event values.\n * @param {function(Object)} [receive] - Event callback function to invoke\n * upon receipt of a new event. Use to override standard event processing.\n */\n\nfunction EventStream(filter, apply, receive) {\n this.id = ++STREAM_ID;\n this.value = null;\n if (receive) this.receive = receive;\n if (filter) this._filter = filter;\n if (apply) this._apply = apply;\n}\n/**\n * Creates a new event stream instance with the provided\n * (optional) filter, apply and receive functions.\n * @param {function(Object, number): boolean} [filter] - Filter predicate.\n * Events pass through when truthy, events are suppressed when falsy.\n * @param {function(Object): *} [apply] - Applied to input events to produce\n * new event values.\n * @see EventStream\n */\n\nfunction stream(filter, apply, receive) {\n return new EventStream(filter, apply, receive);\n}\nEventStream.prototype = {\n _filter: truthy,\n _apply: identity,\n\n targets() {\n return this._targets || (this._targets = UniqueList(id));\n },\n\n consume(_) {\n if (!arguments.length) return !!this._consume;\n this._consume = !!_;\n return this;\n },\n\n receive(evt) {\n if (this._filter(evt)) {\n const val = this.value = this._apply(evt),\n trg = this._targets,\n n = trg ? trg.length : 0;\n\n for (let i = 0; i < n; ++i) trg[i].receive(val);\n\n if (this._consume) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n }\n },\n\n filter(filter) {\n const s = stream(filter);\n this.targets().add(s);\n return s;\n },\n\n apply(apply) {\n const s = stream(null, apply);\n this.targets().add(s);\n return s;\n },\n\n merge() {\n const s = stream();\n this.targets().add(s);\n\n for (let i = 0, n = arguments.length; i < n; ++i) {\n arguments[i].targets().add(s);\n }\n\n return s;\n },\n\n throttle(pause) {\n let t = -1;\n return this.filter(() => {\n const now = Date.now();\n\n if (now - t > pause) {\n t = now;\n return 1;\n } else {\n return 0;\n }\n });\n },\n\n debounce(delay) {\n const s = stream();\n this.targets().add(stream(null, null, debounce(delay, e => {\n const df = e.dataflow;\n s.receive(e);\n if (df && df.run) df.run();\n })));\n return s;\n },\n\n between(a, b) {\n let active = false;\n a.targets().add(stream(null, null, () => active = true));\n b.targets().add(stream(null, null, () => active = false));\n return this.filter(() => active);\n },\n\n detach() {\n // ensures compatibility with operators (#2753)\n // remove references to other streams and filter functions that may\n // be bound to subcontexts that need to be garbage collected.\n this._filter = truthy;\n this._targets = null;\n }\n\n};\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor. The input must\n * support the addEventListener method.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @param {function(object): *} [apply] - Event application function.\n * If provided, this function will be invoked and the result will be\n * used as the downstream event value.\n * @return {EventStream}\n */\n\nfunction events (source, type, filter, apply) {\n const df = this,\n s = stream(filter, apply),\n send = function (e) {\n e.dataflow = df;\n\n try {\n s.receive(e);\n } catch (error) {\n df.error(error);\n } finally {\n df.run();\n }\n };\n\n let sources;\n\n if (typeof source === 'string' && typeof document !== 'undefined') {\n sources = document.querySelectorAll(source);\n } else {\n sources = array(source);\n }\n\n const n = sources.length;\n\n for (let i = 0; i < n; ++i) {\n sources[i].addEventListener(type, send);\n }\n\n return s;\n}\n\nfunction parse(data, format) {\n const locale = this.locale();\n return read(data, format, locale.timeParse, locale.utcParse);\n}\n/**\n * Ingests new data into the dataflow. First parses the data using the\n * vega-loader read method, then pulses a changeset to the target operator.\n * @param {Operator} target - The Operator to target with ingested data,\n * typically a Collect transform instance.\n * @param {*} data - The input data, prior to parsing. For JSON this may\n * be a string or an object. For CSV, TSV, etc should be a string.\n * @param {object} format - The data format description for parsing\n * loaded data. This object is passed to the vega-loader read method.\n * @returns {Dataflow}\n */\n\nfunction ingest(target, data, format) {\n data = this.parse(data, format);\n return this.pulse(target, this.changeset().insert(data));\n}\n/**\n * Request data from an external source, parse it, and return a Promise.\n * @param {string} url - The URL from which to load the data. This string\n * is passed to the vega-loader load method.\n * @param {object} [format] - The data format description for parsing\n * loaded data. This object is passed to the vega-loader read method.\n * @return {Promise} A Promise that resolves upon completion of the request.\n * The resolved object contains the following properties:\n * - data: an array of parsed data (or null upon error)\n * - status: a code for success (0), load fail (-1), or parse fail (-2)\n */\n\nasync function request(url, format) {\n const df = this;\n let status = 0,\n data;\n\n try {\n data = await df.loader().load(url, {\n context: 'dataflow',\n response: responseType(format && format.type)\n });\n\n try {\n data = df.parse(data, format);\n } catch (err) {\n status = -2;\n df.warn('Data ingestion failed', url, err);\n }\n } catch (err) {\n status = -1;\n df.warn('Loading failed', url, err);\n }\n\n return {\n data,\n status\n };\n}\nasync function preload(target, url, format) {\n const df = this,\n pending = df._pending || loadPending(df);\n pending.requests += 1;\n const res = await df.request(url, format);\n df.pulse(target, df.changeset().remove(truthy).insert(res.data || []));\n pending.done();\n return res;\n}\n\nfunction loadPending(df) {\n let accept;\n const pending = new Promise(a => accept = a);\n pending.requests = 0;\n\n pending.done = () => {\n if (--pending.requests === 0) {\n df._pending = null;\n accept(df);\n }\n };\n\n return df._pending = pending;\n}\n\nconst SKIP = {\n skip: true\n};\n/**\n * Perform operator updates in response to events. Applies an\n * update function to compute a new operator value. If the update function\n * returns a {@link ChangeSet}, the operator will be pulsed with those tuple\n * changes. Otherwise, the operator value will be updated to the return value.\n * @param {EventStream|Operator} source - The event source to react to.\n * This argument can be either an EventStream or an Operator.\n * @param {Operator|function(object):Operator} target - The operator to update.\n * This argument can either be an Operator instance or (if the source\n * argument is an EventStream), a function that accepts an event object as\n * input and returns an Operator to target.\n * @param {function(Parameters,Event): *} [update] - Optional update function\n * to compute the new operator value, or a literal value to set. Update\n * functions expect to receive a parameter object and event as arguments.\n * This function can either return a new operator value or (if the source\n * argument is an EventStream) a {@link ChangeSet} instance to pulse\n * the target operator with tuple changes.\n * @param {object} [params] - The update function parameters.\n * @param {object} [options] - Additional options hash. If not overridden,\n * updated operators will be skipped by default.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @return {Dataflow}\n */\n\nfunction on (source, target, update, params, options) {\n const fn = source instanceof Operator ? onOperator : onStream;\n fn(this, source, target, update, params, options);\n return this;\n}\n\nfunction onStream(df, stream, target, update, params, options) {\n const opt = extend({}, options, SKIP);\n let func, op;\n if (!isFunction(target)) target = constant(target);\n\n if (update === undefined) {\n func = e => df.touch(target(e));\n } else if (isFunction(update)) {\n op = new Operator(null, update, params, false);\n\n func = e => {\n op.evaluate(e);\n const t = target(e),\n v = op.value;\n isChangeSet(v) ? df.pulse(t, v, options) : df.update(t, v, opt);\n };\n } else {\n func = e => df.update(target(e), update, opt);\n }\n\n stream.apply(func);\n}\n\nfunction onOperator(df, source, target, update, params, options) {\n if (update === undefined) {\n source.targets().add(target);\n } else {\n const opt = options || {},\n op = new Operator(null, updater(target, update), params, false);\n op.modified(opt.force);\n op.rank = source.rank; // immediately follow source\n\n source.targets().add(op); // add dependency\n\n if (target) {\n op.skip(true); // skip first invocation\n\n op.value = target.value; // initialize value\n\n op.targets().add(target); // chain dependencies\n\n df.connect(target, [op]); // rerank as needed, #1672\n }\n }\n}\n\nfunction updater(target, update) {\n update = isFunction(update) ? update : constant(update);\n return target ? function (_, pulse) {\n const value = update(_, pulse);\n\n if (!target.skip()) {\n target.skip(value !== this.value).value = value;\n }\n\n return value;\n } : update;\n}\n\n/**\n * Assigns a rank to an operator. Ranks are assigned in increasing order\n * by incrementing an internal rank counter.\n * @param {Operator} op - The operator to assign a rank.\n */\n\nfunction rank(op) {\n op.rank = ++this._rank;\n}\n/**\n * Re-ranks an operator and all downstream target dependencies. This\n * is necessary when upstream dependencies of higher rank are added to\n * a target operator.\n * @param {Operator} op - The operator to re-rank.\n */\n\nfunction rerank(op) {\n const queue = [op];\n let cur, list, i;\n\n while (queue.length) {\n this.rank(cur = queue.pop());\n\n if (list = cur._targets) {\n for (i = list.length; --i >= 0;) {\n queue.push(cur = list[i]);\n if (cur === op) error('Cycle detected in dataflow graph.');\n }\n }\n }\n}\n\n/**\n * Sentinel value indicating pulse propagation should stop.\n */\n\nconst StopPropagation = {}; // Pulse visit type flags\n\nconst ADD = 1 << 0,\n REM = 1 << 1,\n MOD = 1 << 2,\n ADD_REM = ADD | REM,\n ADD_MOD = ADD | MOD,\n ALL = ADD | REM | MOD,\n REFLOW = 1 << 3,\n SOURCE = 1 << 4,\n NO_SOURCE = 1 << 5,\n NO_FIELDS = 1 << 6;\n/**\n * A Pulse enables inter-operator communication during a run of the\n * dataflow graph. In addition to the current timestamp, a pulse may also\n * contain a change-set of added, removed or modified data tuples, as well as\n * a pointer to a full backing data source. Tuple change sets may not\n * be fully materialized; for example, to prevent needless array creation\n * a change set may include larger arrays and corresponding filter functions.\n * The pulse provides a {@link visit} method to enable proper and efficient\n * iteration over requested data tuples.\n *\n * In addition, each pulse can track modification flags for data tuple fields.\n * Responsible transform operators should call the {@link modifies} method to\n * indicate changes to data fields. The {@link modified} method enables\n * querying of this modification state.\n *\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The current propagation timestamp.\n * @param {string} [encode] - An optional encoding set name, which is then\n * accessible as Pulse.encode. Operators can respond to (or ignore) this\n * setting as appropriate. This parameter can be used in conjunction with\n * the Encode transform in the vega-encode module.\n */\n\nfunction Pulse(dataflow, stamp, encode) {\n this.dataflow = dataflow;\n this.stamp = stamp == null ? -1 : stamp;\n this.add = [];\n this.rem = [];\n this.mod = [];\n this.fields = null;\n this.encode = encode || null;\n}\n\nfunction materialize(data, filter) {\n const out = [];\n visitArray(data, filter, _ => out.push(_));\n return out;\n}\n\nfunction filter(pulse, flags) {\n const map = {};\n pulse.visit(flags, t => {\n map[tupleid(t)] = 1;\n });\n return t => map[tupleid(t)] ? null : t;\n}\n\nfunction addFilter(a, b) {\n return a ? (t, i) => a(t, i) && b(t, i) : b;\n}\n\nPulse.prototype = {\n /**\n * Sentinel value indicating pulse propagation should stop.\n */\n StopPropagation,\n\n /**\n * Boolean flag indicating ADD (added) tuples.\n */\n ADD,\n\n /**\n * Boolean flag indicating REM (removed) tuples.\n */\n REM,\n\n /**\n * Boolean flag indicating MOD (modified) tuples.\n */\n MOD,\n\n /**\n * Boolean flag indicating ADD (added) and REM (removed) tuples.\n */\n ADD_REM,\n\n /**\n * Boolean flag indicating ADD (added) and MOD (modified) tuples.\n */\n ADD_MOD,\n\n /**\n * Boolean flag indicating ADD, REM and MOD tuples.\n */\n ALL,\n\n /**\n * Boolean flag indicating all tuples in a data source\n * except for the ADD, REM and MOD tuples.\n */\n REFLOW,\n\n /**\n * Boolean flag indicating a 'pass-through' to a\n * backing data source, ignoring ADD, REM and MOD tuples.\n */\n SOURCE,\n\n /**\n * Boolean flag indicating that source data should be\n * suppressed when creating a forked pulse.\n */\n NO_SOURCE,\n\n /**\n * Boolean flag indicating that field modifications should be\n * suppressed when creating a forked pulse.\n */\n NO_FIELDS,\n\n /**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created.\n * @return {Pulse} - The forked pulse instance.\n * @see init\n */\n fork(flags) {\n return new Pulse(this.dataflow).init(this, flags);\n },\n\n /**\n * Creates a copy of this pulse with new materialized array\n * instances for the ADD, REM, MOD, and SOURCE arrays.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse} - The cloned pulse instance.\n * @see init\n */\n clone() {\n const p = this.fork(ALL);\n p.add = p.add.slice();\n p.rem = p.rem.slice();\n p.mod = p.mod.slice();\n if (p.source) p.source = p.source.slice();\n return p.materialize(ALL | SOURCE);\n },\n\n /**\n * Returns a pulse that adds all tuples from a backing source. This is\n * useful for cases where operators are added to a dataflow after an\n * upstream data pipeline has already been processed, ensuring that\n * new operators can observe all tuples within a stream.\n * @return {Pulse} - A pulse instance with all source tuples included\n * in the add array. If the current pulse already has all source\n * tuples in its add array, it is returned directly. If the current\n * pulse does not have a backing source, it is returned directly.\n */\n addAll() {\n let p = this;\n const reuse = !p.source || p.add === p.rem // special case for indexed set (e.g., crossfilter)\n || !p.rem.length && p.source.length === p.add.length;\n\n if (reuse) {\n return p;\n } else {\n p = new Pulse(this.dataflow).init(this);\n p.add = p.source;\n p.rem = []; // new operators can ignore rem #2769\n\n return p;\n }\n },\n\n /**\n * Initialize this pulse based on the values of another pulse. This method\n * is used internally by {@link fork} to initialize a new forked tuple.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {Pulse} src - The source pulse to copy from.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created. By default, source data arrays are copied\n * to the new pulse. Use the NO_SOURCE flag to enforce a null source.\n * @return {Pulse} - Returns this Pulse instance.\n */\n init(src, flags) {\n const p = this;\n p.stamp = src.stamp;\n p.encode = src.encode;\n\n if (src.fields && !(flags & NO_FIELDS)) {\n p.fields = src.fields;\n }\n\n if (flags & ADD) {\n p.addF = src.addF;\n p.add = src.add;\n } else {\n p.addF = null;\n p.add = [];\n }\n\n if (flags & REM) {\n p.remF = src.remF;\n p.rem = src.rem;\n } else {\n p.remF = null;\n p.rem = [];\n }\n\n if (flags & MOD) {\n p.modF = src.modF;\n p.mod = src.mod;\n } else {\n p.modF = null;\n p.mod = [];\n }\n\n if (flags & NO_SOURCE) {\n p.srcF = null;\n p.source = null;\n } else {\n p.srcF = src.srcF;\n p.source = src.source;\n if (src.cleans) p.cleans = src.cleans;\n }\n\n return p;\n },\n\n /**\n * Schedules a function to run after pulse propagation completes.\n * @param {function} func - The function to run.\n */\n runAfter(func) {\n this.dataflow.runAfter(func);\n },\n\n /**\n * Indicates if tuples have been added, removed or modified.\n * @param {number} [flags] - The tuple types (ADD, REM or MOD) to query.\n * Defaults to ALL, returning true if any tuple type has changed.\n * @return {boolean} - Returns true if one or more queried tuple types have\n * changed, false otherwise.\n */\n changed(flags) {\n const f = flags || ALL;\n return f & ADD && this.add.length || f & REM && this.rem.length || f & MOD && this.mod.length;\n },\n\n /**\n * Forces a \"reflow\" of tuple values, such that all tuples in the backing\n * source are added to the MOD set, unless already present in the ADD set.\n * @param {boolean} [fork=false] - If true, returns a forked copy of this\n * pulse, and invokes reflow on that derived pulse.\n * @return {Pulse} - The reflowed pulse instance.\n */\n reflow(fork) {\n if (fork) return this.fork(ALL).reflow();\n const len = this.add.length,\n src = this.source && this.source.length;\n\n if (src && src !== len) {\n this.mod = this.source;\n if (len) this.filter(MOD, filter(this, ADD));\n }\n\n return this;\n },\n\n /**\n * Get/set metadata to pulse requesting garbage collection\n * to reclaim currently unused resources.\n */\n clean(value) {\n if (arguments.length) {\n this.cleans = !!value;\n return this;\n } else {\n return this.cleans;\n }\n },\n\n /**\n * Marks one or more data field names as modified to assist dependency\n * tracking and incremental processing by transform operators.\n * @param {string|Array} _ - The field(s) to mark as modified.\n * @return {Pulse} - This pulse instance.\n */\n modifies(_) {\n const hash = this.fields || (this.fields = {});\n\n if (isArray(_)) {\n _.forEach(f => hash[f] = true);\n } else {\n hash[_] = true;\n }\n\n return this;\n },\n\n /**\n * Checks if one or more data fields have been modified during this pulse\n * propagation timestamp.\n * @param {string|Array} _ - The field(s) to check for modified.\n * @param {boolean} nomod - If true, will check the modified flag even if\n * no mod tuples exist. If false (default), mod tuples must be present.\n * @return {boolean} - Returns true if any of the provided fields has been\n * marked as modified, false otherwise.\n */\n modified(_, nomod) {\n const fields = this.fields;\n return !((nomod || this.mod.length) && fields) ? false : !arguments.length ? !!fields : isArray(_) ? _.some(f => fields[f]) : fields[_];\n },\n\n /**\n * Adds a filter function to one more tuple sets. Filters are applied to\n * backing tuple arrays, to determine the actual set of tuples considered\n * added, removed or modified. They can be used to delay materialization of\n * a tuple set in order to avoid expensive array copies. In addition, the\n * filter functions can serve as value transformers: unlike standard predicate\n * function (which return boolean values), Pulse filters should return the\n * actual tuple value to process. If a tuple set is already filtered, the\n * new filter function will be appended into a conjuntive ('and') query.\n * @param {number} flags - Flags indicating the tuple set(s) to filter.\n * @param {function(*):object} filter - Filter function that will be applied\n * to the tuple set array, and should return a data tuple if the value\n * should be included in the tuple set, and falsy (or null) otherwise.\n * @return {Pulse} - Returns this pulse instance.\n */\n filter(flags, filter) {\n const p = this;\n if (flags & ADD) p.addF = addFilter(p.addF, filter);\n if (flags & REM) p.remF = addFilter(p.remF, filter);\n if (flags & MOD) p.modF = addFilter(p.modF, filter);\n if (flags & SOURCE) p.srcF = addFilter(p.srcF, filter);\n return p;\n },\n\n /**\n * Materialize one or more tuple sets in this pulse. If the tuple set(s) have\n * a registered filter function, it will be applied and the tuple set(s) will\n * be replaced with materialized tuple arrays.\n * @param {number} flags - Flags indicating the tuple set(s) to materialize.\n * @return {Pulse} - Returns this pulse instance.\n */\n materialize(flags) {\n flags = flags || ALL;\n const p = this;\n\n if (flags & ADD && p.addF) {\n p.add = materialize(p.add, p.addF);\n p.addF = null;\n }\n\n if (flags & REM && p.remF) {\n p.rem = materialize(p.rem, p.remF);\n p.remF = null;\n }\n\n if (flags & MOD && p.modF) {\n p.mod = materialize(p.mod, p.modF);\n p.modF = null;\n }\n\n if (flags & SOURCE && p.srcF) {\n p.source = p.source.filter(p.srcF);\n p.srcF = null;\n }\n\n return p;\n },\n\n /**\n * Visit one or more tuple sets in this pulse.\n * @param {number} flags - Flags indicating the tuple set(s) to visit.\n * Legal values are ADD, REM, MOD and SOURCE (if a backing data source\n * has been set).\n * @param {function(object):*} - Visitor function invoked per-tuple.\n * @return {Pulse} - Returns this pulse instance.\n */\n visit(flags, visitor) {\n const p = this,\n v = visitor;\n\n if (flags & SOURCE) {\n visitArray(p.source, p.srcF, v);\n return p;\n }\n\n if (flags & ADD) visitArray(p.add, p.addF, v);\n if (flags & REM) visitArray(p.rem, p.remF, v);\n if (flags & MOD) visitArray(p.mod, p.modF, v);\n const src = p.source;\n\n if (flags & REFLOW && src) {\n const sum = p.add.length + p.mod.length;\n\n if (sum === src.length) ; else if (sum) {\n visitArray(src, filter(p, ADD_MOD), v);\n } else {\n // if no add/rem/mod tuples, visit source\n visitArray(src, p.srcF, v);\n }\n }\n\n return p;\n }\n\n};\n\n/**\n * Represents a set of multiple pulses. Used as input for operators\n * that accept multiple pulses at a time. Contained pulses are\n * accessible via the public \"pulses\" array property. This pulse doe\n * not carry added, removed or modified tuples directly. However,\n * the visit method can be used to traverse all such tuples contained\n * in sub-pulses with a timestamp matching this parent multi-pulse.\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The timestamp.\n * @param {Array} pulses - The sub-pulses for this multi-pulse.\n */\n\nfunction MultiPulse(dataflow, stamp, pulses, encode) {\n const p = this,\n n = pulses.length;\n let c = 0;\n this.dataflow = dataflow;\n this.stamp = stamp;\n this.fields = null;\n this.encode = encode || null;\n this.pulses = pulses;\n\n for (let i = 0; i < n; ++i) {\n const pulse = pulses[i];\n if (pulse.stamp !== stamp) continue;\n\n if (pulse.fields) {\n const hash = p.fields || (p.fields = {});\n\n for (const f in pulse.fields) {\n hash[f] = 1;\n }\n }\n\n if (pulse.changed(p.ADD)) c |= p.ADD;\n if (pulse.changed(p.REM)) c |= p.REM;\n if (pulse.changed(p.MOD)) c |= p.MOD;\n }\n\n this.changes = c;\n}\ninherits(MultiPulse, Pulse, {\n /**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse}\n */\n fork(flags) {\n const p = new Pulse(this.dataflow).init(this, flags & this.NO_FIELDS);\n\n if (flags !== undefined) {\n if (flags & p.ADD) this.visit(p.ADD, t => p.add.push(t));\n if (flags & p.REM) this.visit(p.REM, t => p.rem.push(t));\n if (flags & p.MOD) this.visit(p.MOD, t => p.mod.push(t));\n }\n\n return p;\n },\n\n changed(flags) {\n return this.changes & flags;\n },\n\n modified(_) {\n const p = this,\n fields = p.fields;\n return !(fields && p.changes & p.MOD) ? 0 : isArray(_) ? _.some(f => fields[f]) : fields[_];\n },\n\n filter() {\n error('MultiPulse does not support filtering.');\n },\n\n materialize() {\n error('MultiPulse does not support materialization.');\n },\n\n visit(flags, visitor) {\n const p = this,\n pulses = p.pulses,\n n = pulses.length;\n let i = 0;\n\n if (flags & p.SOURCE) {\n for (; i < n; ++i) {\n pulses[i].visit(flags, visitor);\n }\n } else {\n for (; i < n; ++i) {\n if (pulses[i].stamp === p.stamp) {\n pulses[i].visit(flags, visitor);\n }\n }\n }\n\n return p;\n }\n\n});\n\n/* eslint-disable require-atomic-updates */\n/**\n * Evaluates the dataflow and returns a Promise that resolves when pulse\n * propagation completes. This method will increment the current timestamp\n * and process all updated, pulsed and touched operators. When invoked for\n * the first time, all registered operators will be processed. This method\n * should not be invoked by third-party clients, use {@link runAsync} or\n * {@link run} instead.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode package.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Promise} - A promise that resolves to this dataflow after\n * evaluation completes.\n */\n\nasync function evaluate(encode, prerun, postrun) {\n const df = this,\n async = []; // if the pulse value is set, this is a re-entrant call\n\n if (df._pulse) return reentrant(df); // wait for pending datasets to load\n\n if (df._pending) await df._pending; // invoke prerun function, if provided\n\n if (prerun) await asyncCallback(df, prerun); // exit early if there are no updates\n\n if (!df._touched.length) {\n df.debug('Dataflow invoked, but nothing to do.');\n return df;\n } // increment timestamp clock\n\n\n const stamp = ++df._clock; // set the current pulse\n\n df._pulse = new Pulse(df, stamp, encode); // initialize priority queue, reset touched operators\n\n df._touched.forEach(op => df._enqueue(op, true));\n\n df._touched = UniqueList(id);\n let count = 0,\n op,\n next,\n error;\n\n try {\n while (df._heap.size() > 0) {\n // dequeue operator with highest priority\n op = df._heap.pop(); // re-queue if rank changed\n\n if (op.rank !== op.qrank) {\n df._enqueue(op, true);\n\n continue;\n } // otherwise, evaluate the operator\n\n\n next = op.run(df._getPulse(op, encode));\n\n if (next.then) {\n // await if operator returns a promise directly\n next = await next;\n } else if (next.async) {\n // queue parallel asynchronous execution\n async.push(next.async);\n next = StopPropagation;\n } // propagate evaluation, enqueue dependent operators\n\n\n if (next !== StopPropagation) {\n if (op._targets) op._targets.forEach(op => df._enqueue(op));\n } // increment visit counter\n\n\n ++count;\n }\n } catch (err) {\n df._heap.clear();\n\n error = err;\n } // reset pulse map\n\n\n df._input = {};\n df._pulse = null;\n df.debug(`Pulse ${stamp}: ${count} operators`);\n\n if (error) {\n df._postrun = [];\n df.error(error);\n } // invoke callbacks queued via runAfter\n\n\n if (df._postrun.length) {\n const pr = df._postrun.sort((a, b) => b.priority - a.priority);\n\n df._postrun = [];\n\n for (let i = 0; i < pr.length; ++i) {\n await asyncCallback(df, pr[i].callback);\n }\n } // invoke postrun function, if provided\n\n\n if (postrun) await asyncCallback(df, postrun); // handle non-blocking asynchronous callbacks\n\n if (async.length) {\n Promise.all(async).then(cb => df.runAsync(null, () => {\n cb.forEach(f => {\n try {\n f(df);\n } catch (err) {\n df.error(err);\n }\n });\n }));\n }\n\n return df;\n}\n/**\n * Queues dataflow evaluation to run once any other queued evaluations have\n * completed and returns a Promise that resolves when the queued pulse\n * propagation completes. If provided, a callback function will be invoked\n * immediately before evaluation commences. This method will ensure a\n * separate evaluation is invoked for each time it is called.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode package.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Promise} - A promise that resolves to this dataflow after\n * evaluation completes.\n */\n\nasync function runAsync(encode, prerun, postrun) {\n // await previously queued functions\n while (this._running) await this._running; // run dataflow, manage running promise\n\n\n const clear = () => this._running = null;\n\n (this._running = this.evaluate(encode, prerun, postrun)).then(clear, clear);\n return this._running;\n}\n/**\n * Requests dataflow evaluation and the immediately returns this dataflow\n * instance. If there are pending data loading or other asynchronous\n * operations, the dataflow will evaluate asynchronously after this method\n * has been invoked. To track when dataflow evaluation completes, use the\n * {@link runAsync} method instead. This method will raise an error if\n * invoked while the dataflow is already in the midst of evaluation.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode module.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Dataflow} - This dataflow instance.\n */\n\nfunction run(encode, prerun, postrun) {\n return this._pulse ? reentrant(this) : (this.evaluate(encode, prerun, postrun), this);\n}\n/**\n * Schedules a callback function to be invoked after the current pulse\n * propagation completes. If no propagation is currently occurring,\n * the function is invoked immediately. Callbacks scheduled via runAfter\n * are invoked immediately upon completion of the current cycle, before\n * any request queued via runAsync. This method is primarily intended for\n * internal use. Third-party callers using runAfter to schedule a callback\n * that invokes {@link run} or {@link runAsync} should not use this method,\n * but instead use {@link runAsync} with prerun or postrun arguments.\n * @param {function(Dataflow)} callback - The callback function to run.\n * The callback will be invoked with this Dataflow instance as its\n * sole argument.\n * @param {boolean} enqueue - A boolean flag indicating that the\n * callback should be queued up to run after the next propagation\n * cycle, suppressing immediate invocation when propagation is not\n * currently occurring.\n * @param {number} [priority] - A priority value used to sort registered\n * callbacks to determine execution order. This argument is intended\n * for internal Vega use only.\n */\n\nfunction runAfter(callback, enqueue, priority) {\n if (this._pulse || enqueue) {\n // pulse propagation is currently running, queue to run after\n this._postrun.push({\n priority: priority || 0,\n callback: callback\n });\n } else {\n // pulse propagation already complete, invoke immediately\n try {\n callback(this);\n } catch (err) {\n this.error(err);\n }\n }\n}\n/**\n * Raise an error for re-entrant dataflow evaluation.\n */\n\nfunction reentrant(df) {\n df.error('Dataflow already running. Use runAsync() to chain invocations.');\n return df;\n}\n/**\n * Enqueue an operator into the priority queue for evaluation. The operator\n * will be enqueued if it has no registered pulse for the current cycle, or if\n * the force argument is true. Upon enqueue, this method also sets the\n * operator's qrank to the current rank value.\n * @param {Operator} op - The operator to enqueue.\n * @param {boolean} [force] - A flag indicating if the operator should be\n * forceably added to the queue, even if it has already been previously\n * enqueued during the current pulse propagation. This is useful when the\n * dataflow graph is dynamically modified and the operator rank changes.\n */\n\n\nfunction enqueue(op, force) {\n const q = op.stamp < this._clock;\n if (q) op.stamp = this._clock;\n\n if (q || force) {\n op.qrank = op.rank;\n\n this._heap.push(op);\n }\n}\n/**\n * Provide a correct pulse for evaluating an operator. If the operator has an\n * explicit source operator, we will try to pull the pulse(s) from it.\n * If there is an array of source operators, we build a multi-pulse.\n * Otherwise, we return a current pulse with correct source data.\n * If the pulse is the pulse map has an explicit target set, we use that.\n * Else if the pulse on the upstream source operator is current, we use that.\n * Else we use the pulse from the pulse map, but copy the source tuple array.\n * @param {Operator} op - The operator for which to get an input pulse.\n * @param {string} [encode] - An (optional) encoding set name with which to\n * annotate the returned pulse. See {@link run} for more information.\n */\n\nfunction getPulse(op, encode) {\n const s = op.source,\n stamp = this._clock;\n return s && isArray(s) ? new MultiPulse(this, stamp, s.map(_ => _.pulse), encode) : this._input[op.id] || singlePulse(this._pulse, s && s.pulse);\n}\n\nfunction singlePulse(p, s) {\n if (s && s.stamp === p.stamp) {\n return s;\n }\n\n p = p.fork();\n\n if (s && s !== StopPropagation) {\n p.source = s.source;\n }\n\n return p;\n}\n\nconst NO_OPT = {\n skip: false,\n force: false\n};\n/**\n * Touches an operator, scheduling it to be evaluated. If invoked outside of\n * a pulse propagation, the operator will be evaluated the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the operator\n * will be queued for evaluation if and only if the operator has not yet been\n * evaluated on the current propagation timestamp.\n * @param {Operator} op - The operator to touch.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\n\nfunction touch(op, options) {\n const opt = options || NO_OPT;\n\n if (this._pulse) {\n // if in midst of propagation, add to priority queue\n this._enqueue(op);\n } else {\n // otherwise, queue for next propagation\n this._touched.add(op);\n }\n\n if (opt.skip) op.skip(true);\n return this;\n}\n/**\n * Updates the value of the given operator.\n * @param {Operator} op - The operator to update.\n * @param {*} value - The value to set.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\n\nfunction update(op, value, options) {\n const opt = options || NO_OPT;\n\n if (op.set(value) || opt.force) {\n this.touch(op, opt);\n }\n\n return this;\n}\n/**\n * Pulses an operator with a changeset of tuples. If invoked outside of\n * a pulse propagation, the pulse will be applied the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the pulse\n * will be added to the set of active pulses and will be applied if and\n * only if the target operator has not yet been evaluated on the current\n * propagation timestamp.\n * @param {Operator} op - The operator to pulse.\n * @param {ChangeSet} value - The tuple changeset to apply.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\n\nfunction pulse(op, changeset, options) {\n this.touch(op, options || NO_OPT);\n const p = new Pulse(this, this._clock + (this._pulse ? 0 : 1)),\n t = op.pulse && op.pulse.source || [];\n p.target = op;\n this._input[op.id] = changeset.pulse(p, t);\n return this;\n}\n\nfunction Heap(cmp) {\n let nodes = [];\n return {\n clear: () => nodes = [],\n size: () => nodes.length,\n peek: () => nodes[0],\n push: x => {\n nodes.push(x);\n return siftdown(nodes, 0, nodes.length - 1, cmp);\n },\n pop: () => {\n const last = nodes.pop();\n let item;\n\n if (nodes.length) {\n item = nodes[0];\n nodes[0] = last;\n siftup(nodes, 0, cmp);\n } else {\n item = last;\n }\n\n return item;\n }\n };\n}\n\nfunction siftdown(array, start, idx, cmp) {\n let parent, pidx;\n const item = array[idx];\n\n while (idx > start) {\n pidx = idx - 1 >> 1;\n parent = array[pidx];\n\n if (cmp(item, parent) < 0) {\n array[idx] = parent;\n idx = pidx;\n continue;\n }\n\n break;\n }\n\n return array[idx] = item;\n}\n\nfunction siftup(array, idx, cmp) {\n const start = idx,\n end = array.length,\n item = array[idx];\n let cidx = (idx << 1) + 1,\n ridx;\n\n while (cidx < end) {\n ridx = cidx + 1;\n\n if (ridx < end && cmp(array[cidx], array[ridx]) >= 0) {\n cidx = ridx;\n }\n\n array[idx] = array[cidx];\n idx = cidx;\n cidx = (idx << 1) + 1;\n }\n\n array[idx] = item;\n return siftdown(array, start, idx, cmp);\n}\n\n/**\n * A dataflow graph for reactive processing of data streams.\n * @constructor\n */\n\nfunction Dataflow() {\n this.logger(logger());\n this.logLevel(Error);\n this._clock = 0;\n this._rank = 0;\n this._locale = defaultLocale();\n\n try {\n this._loader = loader();\n } catch (e) {// do nothing if loader module is unavailable\n }\n\n this._touched = UniqueList(id);\n this._input = {};\n this._pulse = null;\n this._heap = Heap((a, b) => a.qrank - b.qrank);\n this._postrun = [];\n}\n\nfunction logMethod(method) {\n return function () {\n return this._log[method].apply(this, arguments);\n };\n}\n\nDataflow.prototype = {\n /**\n * The current timestamp of this dataflow. This value reflects the\n * timestamp of the previous dataflow run. The dataflow is initialized\n * with a stamp value of 0. The initial run of the dataflow will have\n * a timestap of 1, and so on. This value will match the\n * {@link Pulse.stamp} property.\n * @return {number} - The current timestamp value.\n */\n stamp() {\n return this._clock;\n },\n\n /**\n * Gets or sets the loader instance to use for data file loading. A\n * loader object must provide a \"load\" method for loading files and a\n * \"sanitize\" method for checking URL/filename validity. Both methods\n * should accept a URI and options hash as arguments, and return a Promise\n * that resolves to the loaded file contents (load) or a hash containing\n * sanitized URI data with the sanitized url assigned to the \"href\" property\n * (sanitize).\n * @param {object} _ - The loader instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current loader instance. Otherwise returns this Dataflow instance.\n */\n loader(_) {\n if (arguments.length) {\n this._loader = _;\n return this;\n } else {\n return this._loader;\n }\n },\n\n /**\n * Gets or sets the locale instance to use for formatting and parsing\n * string values. The locale object should be provided by the\n * vega-format library, and include methods such as format, timeFormat,\n * utcFormat, timeParse, and utcParse.\n * @param {object} _ - The locale instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current locale instance. Otherwise returns this Dataflow instance.\n */\n locale(_) {\n if (arguments.length) {\n this._locale = _;\n return this;\n } else {\n return this._locale;\n }\n },\n\n /**\n * Get or set the logger instance used to log messages. If no arguments are\n * provided, returns the current logger instance. Otherwise, sets the logger\n * and return this Dataflow instance. Provided loggers must support the full\n * API of logger objects generated by the vega-util logger method. Note that\n * by default the log level of the new logger will be used; use the logLevel\n * method to adjust the log level as needed.\n */\n logger(logger) {\n if (arguments.length) {\n this._log = logger;\n return this;\n } else {\n return this._log;\n }\n },\n\n /**\n * Logs an error message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit error messages.\n */\n error: logMethod('error'),\n\n /**\n * Logs a warning message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit warning messages.\n */\n warn: logMethod('warn'),\n\n /**\n * Logs a information message. By default, logged messages are written to\n * console output. The message will only be logged if the current log level is\n * high enough to permit information messages.\n */\n info: logMethod('info'),\n\n /**\n * Logs a debug message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit debug messages.\n */\n debug: logMethod('debug'),\n\n /**\n * Get or set the current log level. If an argument is provided, it\n * will be used as the new log level.\n * @param {number} [level] - Should be one of None, Warn, Info\n * @return {number} - The current log level.\n */\n logLevel: logMethod('level'),\n\n /**\n * Empty entry threshold for garbage cleaning. Map data structures will\n * perform cleaning once the number of empty entries exceeds this value.\n */\n cleanThreshold: 1e4,\n // OPERATOR REGISTRATION\n add,\n connect,\n rank,\n rerank,\n // OPERATOR UPDATES\n pulse,\n touch,\n update,\n changeset,\n // DATA LOADING\n ingest,\n parse,\n preload,\n request,\n // EVENT HANDLING\n events,\n on,\n // PULSE PROPAGATION\n evaluate,\n run,\n runAsync,\n runAfter,\n _enqueue: enqueue,\n _getPulse: getPulse\n};\n\n/**\n * Abstract class for operators that process data tuples.\n * Subclasses must provide a {@link transform} method for operator processing.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {Operator} [source] - The operator from which to receive pulses.\n */\n\nfunction Transform(init, params) {\n Operator.call(this, init, null, params);\n}\ninherits(Transform, Operator, {\n /**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\n run(pulse) {\n if (pulse.stamp < this.stamp) return pulse.StopPropagation;\n let rv;\n\n if (this.skip()) {\n this.skip(false);\n } else {\n rv = this.evaluate(pulse);\n }\n\n rv = rv || pulse;\n\n if (rv.then) {\n rv = rv.then(_ => this.pulse = _);\n } else if (rv !== pulse.StopPropagation) {\n this.pulse = rv;\n }\n\n return rv;\n },\n\n /**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Marshalls parameter values and then invokes {@link transform}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n value (including undefined) will let the input pulse pass through.\n */\n evaluate(pulse) {\n const params = this.marshall(pulse.stamp),\n out = this.transform(params, pulse);\n params.clear();\n return out;\n },\n\n /**\n * Process incoming pulses.\n * Subclasses should override this method to implement transforms.\n * @param {Parameters} _ - The operator parameter values.\n * @param {Pulse} pulse - The current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n * value (including undefined) will let the input pulse pass through.\n */\n transform() {}\n\n});\n\nconst transforms = {};\nfunction definition(type) {\n const t = transform(type);\n return t && t.Definition || null;\n}\nfunction transform(type) {\n type = type && type.toLowerCase();\n return hasOwnProperty(transforms, type) ? transforms[type] : null;\n}\n\nexport { Dataflow, EventStream, MultiPulse, Operator, Parameters, Pulse, Transform, UniqueList, asyncCallback, changeset, definition, derive, ingest$1 as ingest, isChangeSet, isTuple, rederive, replace, stableCompare, transform, transforms, tupleid };\n","import { ascending, quantileSorted, deviation, quantile, median } from 'd3-array';\n\nfunction* numbers (values, valueof) {\n if (valueof == null) {\n for (let value of values) {\n if (value != null && value !== '' && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n\n for (let value of values) {\n value = valueof(value, ++index, values);\n\n if (value != null && value !== '' && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n\nfunction quantiles (array, p, f) {\n const values = Float64Array.from(numbers(array, f)); // don't depend on return value from typed array sort call\n // protects against undefined sort results in Safari (vega/vega-lite#4964)\n\n values.sort(ascending);\n return p.map(_ => quantileSorted(values, _));\n}\n\nfunction quartiles (array, f) {\n return quantiles(array, [0.25, 0.50, 0.75], f);\n}\n\n// Theory, Practice, and Visualization. Wiley.\n\nfunction estimateBandwidth (array, f) {\n const n = array.length,\n d = deviation(array, f),\n q = quartiles(array, f),\n h = (q[2] - q[0]) / 1.34,\n v = Math.min(d, h) || d || Math.abs(q[0]) || 1;\n return 1.06 * v * Math.pow(n, -0.2);\n}\n\nfunction bin (_) {\n // determine range\n const maxb = _.maxbins || 20,\n base = _.base || 10,\n logb = Math.log(base),\n div = _.divide || [5, 2];\n let min = _.extent[0],\n max = _.extent[1],\n step,\n level,\n minstep,\n v,\n i,\n n;\n const span = _.span || max - min || Math.abs(min) || 1;\n\n if (_.step) {\n // if step size is explicitly given, use that\n step = _.step;\n } else if (_.steps) {\n // if provided, limit choice to acceptable step sizes\n v = span / maxb;\n\n for (i = 0, n = _.steps.length; i < n && _.steps[i] < v; ++i);\n\n step = _.steps[Math.max(0, i - 1)];\n } else {\n // else use span to determine step size\n level = Math.ceil(Math.log(maxb) / logb);\n minstep = _.minstep || 0;\n step = Math.max(minstep, Math.pow(base, Math.round(Math.log(span) / logb) - level)); // increase step size if too many bins\n\n while (Math.ceil(span / step) > maxb) {\n step *= base;\n } // decrease step size if allowed\n\n\n for (i = 0, n = div.length; i < n; ++i) {\n v = step / div[i];\n if (v >= minstep && span / v <= maxb) step = v;\n }\n } // update precision, min and max\n\n\n v = Math.log(step);\n const precision = v >= 0 ? 0 : ~~(-v / logb) + 1,\n eps = Math.pow(base, -precision - 1);\n\n if (_.nice || _.nice === undefined) {\n v = Math.floor(min / step + eps) * step;\n min = min < v ? v - step : v;\n max = Math.ceil(max / step) * step;\n }\n\n return {\n start: min,\n stop: max === min ? min + step : max,\n step: step\n };\n}\n\nvar random = Math.random;\nfunction setRandom(r) {\n random = r;\n}\n\nfunction bootstrapCI (array, samples, alpha, f) {\n if (!array.length) return [undefined, undefined];\n const values = Float64Array.from(numbers(array, f)),\n n = values.length,\n m = samples;\n let a, i, j, mu;\n\n for (j = 0, mu = Array(m); j < m; ++j) {\n for (a = 0, i = 0; i < n; ++i) {\n a += values[~~(random() * n)];\n }\n\n mu[j] = a / n;\n }\n\n mu.sort(ascending);\n return [quantile(mu, alpha / 2), quantile(mu, 1 - alpha / 2)];\n}\n\n// Dot density binning for dot plot construction.\n// Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n// https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\nfunction dotbin (array, step, smooth, f) {\n f = f || (_ => _);\n\n const n = array.length,\n v = new Float64Array(n);\n let i = 0,\n j = 1,\n a = f(array[0]),\n b = a,\n w = a + step,\n x;\n\n for (; j < n; ++j) {\n x = f(array[j]);\n\n if (x >= w) {\n b = (a + b) / 2;\n\n for (; i < j; ++i) v[i] = b;\n\n w = x + step;\n a = x;\n }\n\n b = x;\n }\n\n b = (a + b) / 2;\n\n for (; i < j; ++i) v[i] = b;\n\n return smooth ? smoothing(v, step + step / 4) : v;\n} // perform smoothing to reduce variance\n// swap points between \"adjacent\" stacks\n// Wilkinson defines adjacent as within step/4 units\n\nfunction smoothing(v, thresh) {\n const n = v.length;\n let a = 0,\n b = 1,\n c,\n d; // get left stack\n\n while (v[a] === v[b]) ++b;\n\n while (b < n) {\n // get right stack\n c = b + 1;\n\n while (v[b] === v[c]) ++c; // are stacks adjacent?\n // if so, compare sizes and swap as needed\n\n\n if (v[b] - v[b - 1] < thresh) {\n d = b + (a + c - b - b >> 1);\n\n while (d < b) v[d++] = v[b];\n\n while (d > b) v[d--] = v[a];\n } // update left stack indices\n\n\n a = b;\n b = c;\n }\n\n return v;\n}\n\nfunction lcg (seed) {\n // Random numbers using a Linear Congruential Generator with seed value\n // Uses glibc values from https://en.wikipedia.org/wiki/Linear_congruential_generator\n return function () {\n seed = (1103515245 * seed + 12345) % 2147483647;\n return seed / 2147483647;\n };\n}\n\nfunction integer (min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n\n let a, b, d;\n const dist = {\n min(_) {\n if (arguments.length) {\n a = _ || 0;\n d = b - a;\n return dist;\n } else {\n return a;\n }\n },\n\n max(_) {\n if (arguments.length) {\n b = _ || 0;\n d = b - a;\n return dist;\n } else {\n return b;\n }\n },\n\n sample() {\n return a + Math.floor(d * random());\n },\n\n pdf(x) {\n return x === Math.floor(x) && x >= a && x < b ? 1 / d : 0;\n },\n\n cdf(x) {\n const v = Math.floor(x);\n return v < a ? 0 : v >= b ? 1 : (v - a + 1) / d;\n },\n\n icdf(p) {\n return p >= 0 && p <= 1 ? a - 1 + Math.floor(p * d) : NaN;\n }\n\n };\n return dist.min(min).max(max);\n}\n\nconst SQRT2PI = Math.sqrt(2 * Math.PI);\nconst SQRT2 = Math.SQRT2;\n\nlet nextSample = NaN;\nfunction sampleNormal(mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n let x = 0,\n y = 0,\n rds,\n c;\n\n if (nextSample === nextSample) {\n x = nextSample;\n nextSample = NaN;\n } else {\n do {\n x = random() * 2 - 1;\n y = random() * 2 - 1;\n rds = x * x + y * y;\n } while (rds === 0 || rds > 1);\n\n c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform\n\n x *= c;\n nextSample = y * c;\n }\n\n return mean + x * stdev;\n}\nfunction densityNormal(value, mean, stdev) {\n stdev = stdev == null ? 1 : stdev;\n const z = (value - (mean || 0)) / stdev;\n return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI);\n} // Approximation from West (2009)\n// Better Approximations to Cumulative Normal Functions\n\nfunction cumulativeNormal(value, mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n const z = (value - mean) / stdev,\n Z = Math.abs(z);\n let cd;\n\n if (Z > 37) {\n cd = 0;\n } else {\n const exp = Math.exp(-Z * Z / 2);\n let sum;\n\n if (Z < 7.07106781186547) {\n sum = 3.52624965998911e-02 * Z + 0.700383064443688;\n sum = sum * Z + 6.37396220353165;\n sum = sum * Z + 33.912866078383;\n sum = sum * Z + 112.079291497871;\n sum = sum * Z + 221.213596169931;\n sum = sum * Z + 220.206867912376;\n cd = exp * sum;\n sum = 8.83883476483184e-02 * Z + 1.75566716318264;\n sum = sum * Z + 16.064177579207;\n sum = sum * Z + 86.7807322029461;\n sum = sum * Z + 296.564248779674;\n sum = sum * Z + 637.333633378831;\n sum = sum * Z + 793.826512519948;\n sum = sum * Z + 440.413735824752;\n cd = cd / sum;\n } else {\n sum = Z + 0.65;\n sum = Z + 4 / sum;\n sum = Z + 3 / sum;\n sum = Z + 2 / sum;\n sum = Z + 1 / sum;\n cd = exp / sum / 2.506628274631;\n }\n }\n\n return z > 0 ? 1 - cd : cd;\n} // Approximation of Probit function using inverse error function.\n\nfunction quantileNormal(p, mean, stdev) {\n if (p < 0 || p > 1) return NaN;\n return (mean || 0) + (stdev == null ? 1 : stdev) * SQRT2 * erfinv(2 * p - 1);\n} // Approximate inverse error function. Implementation from \"Approximating\n// the erfinv function\" by Mike Giles, GPU Computing Gems, volume 2, 2010.\n// Ported from Apache Commons Math, http://www.apache.org/licenses/LICENSE-2.0\n\nfunction erfinv(x) {\n // beware that the logarithm argument must be\n // commputed as (1.0 - x) * (1.0 + x),\n // it must NOT be simplified as 1.0 - x * x as this\n // would induce rounding errors near the boundaries +/-1\n let w = -Math.log((1 - x) * (1 + x)),\n p;\n\n if (w < 6.25) {\n w -= 3.125;\n p = -3.6444120640178196996e-21;\n p = -1.685059138182016589e-19 + p * w;\n p = 1.2858480715256400167e-18 + p * w;\n p = 1.115787767802518096e-17 + p * w;\n p = -1.333171662854620906e-16 + p * w;\n p = 2.0972767875968561637e-17 + p * w;\n p = 6.6376381343583238325e-15 + p * w;\n p = -4.0545662729752068639e-14 + p * w;\n p = -8.1519341976054721522e-14 + p * w;\n p = 2.6335093153082322977e-12 + p * w;\n p = -1.2975133253453532498e-11 + p * w;\n p = -5.4154120542946279317e-11 + p * w;\n p = 1.051212273321532285e-09 + p * w;\n p = -4.1126339803469836976e-09 + p * w;\n p = -2.9070369957882005086e-08 + p * w;\n p = 4.2347877827932403518e-07 + p * w;\n p = -1.3654692000834678645e-06 + p * w;\n p = -1.3882523362786468719e-05 + p * w;\n p = 0.0001867342080340571352 + p * w;\n p = -0.00074070253416626697512 + p * w;\n p = -0.0060336708714301490533 + p * w;\n p = 0.24015818242558961693 + p * w;\n p = 1.6536545626831027356 + p * w;\n } else if (w < 16.0) {\n w = Math.sqrt(w) - 3.25;\n p = 2.2137376921775787049e-09;\n p = 9.0756561938885390979e-08 + p * w;\n p = -2.7517406297064545428e-07 + p * w;\n p = 1.8239629214389227755e-08 + p * w;\n p = 1.5027403968909827627e-06 + p * w;\n p = -4.013867526981545969e-06 + p * w;\n p = 2.9234449089955446044e-06 + p * w;\n p = 1.2475304481671778723e-05 + p * w;\n p = -4.7318229009055733981e-05 + p * w;\n p = 6.8284851459573175448e-05 + p * w;\n p = 2.4031110387097893999e-05 + p * w;\n p = -0.0003550375203628474796 + p * w;\n p = 0.00095328937973738049703 + p * w;\n p = -0.0016882755560235047313 + p * w;\n p = 0.0024914420961078508066 + p * w;\n p = -0.0037512085075692412107 + p * w;\n p = 0.005370914553590063617 + p * w;\n p = 1.0052589676941592334 + p * w;\n p = 3.0838856104922207635 + p * w;\n } else if (Number.isFinite(w)) {\n w = Math.sqrt(w) - 5.0;\n p = -2.7109920616438573243e-11;\n p = -2.5556418169965252055e-10 + p * w;\n p = 1.5076572693500548083e-09 + p * w;\n p = -3.7894654401267369937e-09 + p * w;\n p = 7.6157012080783393804e-09 + p * w;\n p = -1.4960026627149240478e-08 + p * w;\n p = 2.9147953450901080826e-08 + p * w;\n p = -6.7711997758452339498e-08 + p * w;\n p = 2.2900482228026654717e-07 + p * w;\n p = -9.9298272942317002539e-07 + p * w;\n p = 4.5260625972231537039e-06 + p * w;\n p = -1.9681778105531670567e-05 + p * w;\n p = 7.5995277030017761139e-05 + p * w;\n p = -0.00021503011930044477347 + p * w;\n p = -0.00013871931833623122026 + p * w;\n p = 1.0103004648645343977 + p * w;\n p = 4.8499064014085844221 + p * w;\n } else {\n p = Infinity;\n }\n\n return p * x;\n}\n\nfunction gaussian (mean, stdev) {\n let mu, sigma;\n const dist = {\n mean(_) {\n if (arguments.length) {\n mu = _ || 0;\n return dist;\n } else {\n return mu;\n }\n },\n\n stdev(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n return dist;\n } else {\n return sigma;\n }\n },\n\n sample: () => sampleNormal(mu, sigma),\n pdf: value => densityNormal(value, mu, sigma),\n cdf: value => cumulativeNormal(value, mu, sigma),\n icdf: p => quantileNormal(p, mu, sigma)\n };\n return dist.mean(mean).stdev(stdev);\n}\n\nfunction kde (support, bandwidth) {\n const kernel = gaussian();\n let n = 0;\n const dist = {\n data(_) {\n if (arguments.length) {\n support = _;\n n = _ ? _.length : 0;\n return dist.bandwidth(bandwidth);\n } else {\n return support;\n }\n },\n\n bandwidth(_) {\n if (!arguments.length) return bandwidth;\n bandwidth = _;\n if (!bandwidth && support) bandwidth = estimateBandwidth(support);\n return dist;\n },\n\n sample() {\n return support[~~(random() * n)] + bandwidth * kernel.sample();\n },\n\n pdf(x) {\n let y = 0,\n i = 0;\n\n for (; i < n; ++i) {\n y += kernel.pdf((x - support[i]) / bandwidth);\n }\n\n return y / bandwidth / n;\n },\n\n cdf(x) {\n let y = 0,\n i = 0;\n\n for (; i < n; ++i) {\n y += kernel.cdf((x - support[i]) / bandwidth);\n }\n\n return y / n;\n },\n\n icdf() {\n throw Error('KDE icdf not supported.');\n }\n\n };\n return dist.data(support);\n}\n\nfunction sampleLogNormal(mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n return Math.exp(mean + sampleNormal() * stdev);\n}\nfunction densityLogNormal(value, mean, stdev) {\n if (value <= 0) return 0;\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n const z = (Math.log(value) - mean) / stdev;\n return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI * value);\n}\nfunction cumulativeLogNormal(value, mean, stdev) {\n return cumulativeNormal(Math.log(value), mean, stdev);\n}\nfunction quantileLogNormal(p, mean, stdev) {\n return Math.exp(quantileNormal(p, mean, stdev));\n}\nfunction lognormal (mean, stdev) {\n let mu, sigma;\n const dist = {\n mean(_) {\n if (arguments.length) {\n mu = _ || 0;\n return dist;\n } else {\n return mu;\n }\n },\n\n stdev(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n return dist;\n } else {\n return sigma;\n }\n },\n\n sample: () => sampleLogNormal(mu, sigma),\n pdf: value => densityLogNormal(value, mu, sigma),\n cdf: value => cumulativeLogNormal(value, mu, sigma),\n icdf: p => quantileLogNormal(p, mu, sigma)\n };\n return dist.mean(mean).stdev(stdev);\n}\n\nfunction mixture (dists, weights) {\n let m = 0,\n w;\n\n function normalize(x) {\n const w = [];\n let sum = 0,\n i;\n\n for (i = 0; i < m; ++i) {\n sum += w[i] = x[i] == null ? 1 : +x[i];\n }\n\n for (i = 0; i < m; ++i) {\n w[i] /= sum;\n }\n\n return w;\n }\n\n const dist = {\n weights(_) {\n if (arguments.length) {\n w = normalize(weights = _ || []);\n return dist;\n }\n\n return weights;\n },\n\n distributions(_) {\n if (arguments.length) {\n if (_) {\n m = _.length;\n dists = _;\n } else {\n m = 0;\n dists = [];\n }\n\n return dist.weights(weights);\n }\n\n return dists;\n },\n\n sample() {\n const r = random();\n let d = dists[m - 1],\n v = w[0],\n i = 0; // first select distribution\n\n for (; i < m - 1; v += w[++i]) {\n if (r < v) {\n d = dists[i];\n break;\n }\n } // then sample from it\n\n\n return d.sample();\n },\n\n pdf(x) {\n let p = 0,\n i = 0;\n\n for (; i < m; ++i) {\n p += w[i] * dists[i].pdf(x);\n }\n\n return p;\n },\n\n cdf(x) {\n let p = 0,\n i = 0;\n\n for (; i < m; ++i) {\n p += w[i] * dists[i].cdf(x);\n }\n\n return p;\n },\n\n icdf() {\n throw Error('Mixture icdf not supported.');\n }\n\n };\n return dist.distributions(dists).weights(weights);\n}\n\nfunction sampleUniform(min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return min + (max - min) * random();\n}\nfunction densityUniform(value, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return value >= min && value <= max ? 1 / (max - min) : 0;\n}\nfunction cumulativeUniform(value, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return value < min ? 0 : value > max ? 1 : (value - min) / (max - min);\n}\nfunction quantileUniform(p, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return p >= 0 && p <= 1 ? min + p * (max - min) : NaN;\n}\nfunction uniform (min, max) {\n let a, b;\n const dist = {\n min(_) {\n if (arguments.length) {\n a = _ || 0;\n return dist;\n } else {\n return a;\n }\n },\n\n max(_) {\n if (arguments.length) {\n b = _ == null ? 1 : _;\n return dist;\n } else {\n return b;\n }\n },\n\n sample: () => sampleUniform(a, b),\n pdf: value => densityUniform(value, a, b),\n cdf: value => cumulativeUniform(value, a, b),\n icdf: p => quantileUniform(p, a, b)\n };\n\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return dist.min(min).max(max);\n}\n\n// Ordinary Least Squares\nfunction ols (uX, uY, uXY, uX2) {\n const delta = uX2 - uX * uX,\n slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta,\n intercept = uY - slope * uX;\n return [intercept, slope];\n}\n\nfunction points(data, x, y, sort) {\n data = data.filter(d => {\n let u = x(d),\n v = y(d);\n return u != null && (u = +u) >= u && v != null && (v = +v) >= v;\n });\n\n if (sort) {\n data.sort((a, b) => x(a) - x(b));\n }\n\n const n = data.length,\n X = new Float64Array(n),\n Y = new Float64Array(n); // extract values, calculate means\n\n let i = 0,\n ux = 0,\n uy = 0,\n xv,\n yv,\n d;\n\n for (d of data) {\n X[i] = xv = +x(d);\n Y[i] = yv = +y(d);\n ++i;\n ux += (xv - ux) / i;\n uy += (yv - uy) / i;\n } // mean center the data\n\n\n for (i = 0; i < n; ++i) {\n X[i] -= ux;\n Y[i] -= uy;\n }\n\n return [X, Y, ux, uy];\n}\nfunction visitPoints(data, x, y, callback) {\n let i = -1,\n u,\n v;\n\n for (const d of data) {\n u = x(d);\n v = y(d);\n\n if (u != null && (u = +u) >= u && v != null && (v = +v) >= v) {\n callback(u, v, ++i);\n }\n }\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction rSquared (data, x, y, uY, predict) {\n let SSE = 0,\n SST = 0;\n visitPoints(data, x, y, (dx, dy) => {\n const sse = dy - predict(dx),\n sst = dy - uY;\n SSE += sse * sse;\n SST += sst * sst;\n });\n return 1 - SSE / SST;\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction linear (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] + coef[1] * x;\n\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction log (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n dx = Math.log(dx);\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] + coef[1] * Math.log(x);\n\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n\nfunction exp (data, x, y) {\n // eslint-disable-next-line no-unused-vars\n const [xv, yv, ux, uy] = points(data, x, y);\n let YL = 0,\n XY = 0,\n XYL = 0,\n X2Y = 0,\n n = 0,\n dx,\n ly,\n xy;\n visitPoints(data, x, y, (_, dy) => {\n dx = xv[n++];\n ly = Math.log(dy);\n xy = dx * dy;\n YL += (dy * ly - YL) / n;\n XY += (xy - XY) / n;\n XYL += (xy * ly - XYL) / n;\n X2Y += (dx * xy - X2Y) / n;\n });\n\n const [c0, c1] = ols(XY / uy, YL / uy, XYL / uy, X2Y / uy),\n predict = x => Math.exp(c0 + c1 * (x - ux));\n\n return {\n coef: [Math.exp(c0 - c1 * ux), c1],\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction pow (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n YS = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n const lx = Math.log(dx),\n ly = Math.log(dy);\n ++n;\n X += (lx - X) / n;\n Y += (ly - Y) / n;\n XY += (lx * ly - XY) / n;\n X2 += (lx * lx - X2) / n;\n YS += (dy - YS) / n;\n });\n\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] * Math.pow(x, coef[1]);\n\n coef[0] = Math.exp(coef[0]);\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, YS, predict)\n };\n}\n\nfunction quad (data, x, y) {\n const [xv, yv, ux, uy] = points(data, x, y),\n n = xv.length;\n let X2 = 0,\n X3 = 0,\n X4 = 0,\n XY = 0,\n X2Y = 0,\n i,\n dx,\n dy,\n x2;\n\n for (i = 0; i < n;) {\n dx = xv[i];\n dy = yv[i++];\n x2 = dx * dx;\n X2 += (x2 - X2) / i;\n X3 += (x2 * dx - X3) / i;\n X4 += (x2 * x2 - X4) / i;\n XY += (dx * dy - XY) / i;\n X2Y += (x2 * dy - X2Y) / i;\n }\n\n const X2X2 = X4 - X2 * X2,\n d = X2 * X2X2 - X3 * X3,\n a = (X2Y * X2 - XY * X3) / d,\n b = (XY * X2X2 - X2Y * X3) / d,\n c = -a * X2,\n predict = x => {\n x = x - ux;\n return a * x * x + b * x + c + uy;\n }; // transform coefficients back from mean-centered space\n\n\n return {\n coef: [c - b * ux + a * ux * ux + uy, b - 2 * a * ux, a],\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n// ... which was adapted from regression-js by Tom Alexander\n// Source: https://github.com/Tom-Alexander/regression-js/blob/master/src/regression.js#L246\n// License: https://github.com/Tom-Alexander/regression-js/blob/master/LICENSE\n\nfunction poly (data, x, y, order) {\n // use more efficient methods for lower orders\n if (order === 1) return linear(data, x, y);\n if (order === 2) return quad(data, x, y);\n const [xv, yv, ux, uy] = points(data, x, y),\n n = xv.length,\n lhs = [],\n rhs = [],\n k = order + 1;\n let i, j, l, v, c;\n\n for (i = 0; i < k; ++i) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i) * yv[l];\n }\n\n lhs.push(v);\n c = new Float64Array(k);\n\n for (j = 0; j < k; ++j) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i + j);\n }\n\n c[j] = v;\n }\n\n rhs.push(c);\n }\n\n rhs.push(lhs);\n\n const coef = gaussianElimination(rhs),\n predict = x => {\n x -= ux;\n let y = uy + coef[0] + coef[1] * x + coef[2] * x * x;\n\n for (i = 3; i < k; ++i) y += coef[i] * Math.pow(x, i);\n\n return y;\n };\n\n return {\n coef: uncenter(k, coef, -ux, uy),\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\nfunction uncenter(k, a, x, y) {\n const z = Array(k);\n let i, j, v, c; // initialize to zero\n\n for (i = 0; i < k; ++i) z[i] = 0; // polynomial expansion\n\n\n for (i = k - 1; i >= 0; --i) {\n v = a[i];\n c = 1;\n z[i] += v;\n\n for (j = 1; j <= i; ++j) {\n c *= (i + 1 - j) / j; // binomial coefficent\n\n z[i - j] += v * Math.pow(x, j) * c;\n }\n } // bias term\n\n\n z[0] += y;\n return z;\n} // Given an array for a two-dimensional matrix and the polynomial order,\n// solve A * x = b using Gaussian elimination.\n\n\nfunction gaussianElimination(matrix) {\n const n = matrix.length - 1,\n coef = [];\n let i, j, k, r, t;\n\n for (i = 0; i < n; ++i) {\n r = i; // max row\n\n for (j = i + 1; j < n; ++j) {\n if (Math.abs(matrix[i][j]) > Math.abs(matrix[i][r])) {\n r = j;\n }\n }\n\n for (k = i; k < n + 1; ++k) {\n t = matrix[k][i];\n matrix[k][i] = matrix[k][r];\n matrix[k][r] = t;\n }\n\n for (j = i + 1; j < n; ++j) {\n for (k = n; k >= i; k--) {\n matrix[k][j] -= matrix[k][i] * matrix[i][j] / matrix[i][i];\n }\n }\n }\n\n for (j = n - 1; j >= 0; --j) {\n t = 0;\n\n for (k = j + 1; k < n; ++k) {\n t += matrix[k][j] * coef[k];\n }\n\n coef[j] = (matrix[n][j] - t) / matrix[j][j];\n }\n\n return coef;\n}\n\nconst maxiters = 2,\n epsilon = 1e-12; // Adapted from science.js by Jason Davies\n// Source: https://github.com/jasondavies/science.js/blob/master/src/stats/loess.js\n// License: https://github.com/jasondavies/science.js/blob/master/LICENSE\n\nfunction loess (data, x, y, bandwidth) {\n const [xv, yv, ux, uy] = points(data, x, y, true),\n n = xv.length,\n bw = Math.max(2, ~~(bandwidth * n)),\n // # nearest neighbors\n yhat = new Float64Array(n),\n residuals = new Float64Array(n),\n robustWeights = new Float64Array(n).fill(1);\n\n for (let iter = -1; ++iter <= maxiters;) {\n const interval = [0, bw - 1];\n\n for (let i = 0; i < n; ++i) {\n const dx = xv[i],\n i0 = interval[0],\n i1 = interval[1],\n edge = dx - xv[i0] > xv[i1] - dx ? i0 : i1;\n let W = 0,\n X = 0,\n Y = 0,\n XY = 0,\n X2 = 0;\n const denom = 1 / Math.abs(xv[edge] - dx || 1); // avoid singularity!\n\n for (let k = i0; k <= i1; ++k) {\n const xk = xv[k],\n yk = yv[k],\n w = tricube(Math.abs(dx - xk) * denom) * robustWeights[k],\n xkw = xk * w;\n W += w;\n X += xkw;\n Y += yk * w;\n XY += yk * xkw;\n X2 += xk * xkw;\n } // linear regression fit\n\n\n const [a, b] = ols(X / W, Y / W, XY / W, X2 / W);\n yhat[i] = a + b * dx;\n residuals[i] = Math.abs(yv[i] - yhat[i]);\n updateInterval(xv, i + 1, interval);\n }\n\n if (iter === maxiters) {\n break;\n }\n\n const medianResidual = median(residuals);\n if (Math.abs(medianResidual) < epsilon) break;\n\n for (let i = 0, arg, w; i < n; ++i) {\n arg = residuals[i] / (6 * medianResidual); // default to epsilon (rather than zero) for large deviations\n // keeping weights tiny but non-zero prevents singularites\n\n robustWeights[i] = arg >= 1 ? epsilon : (w = 1 - arg * arg) * w;\n }\n }\n\n return output(xv, yhat, ux, uy);\n} // weighting kernel for local regression\n\nfunction tricube(x) {\n return (x = 1 - x * x * x) * x * x;\n} // advance sliding window interval of nearest neighbors\n\n\nfunction updateInterval(xv, i, interval) {\n const val = xv[i];\n let left = interval[0],\n right = interval[1] + 1;\n if (right >= xv.length) return; // step right if distance to new right edge is <= distance to old left edge\n // step when distance is equal to ensure movement over duplicate x values\n\n while (i > left && xv[right] - val <= val - xv[left]) {\n interval[0] = ++left;\n interval[1] = right;\n ++right;\n }\n} // generate smoothed output points\n// average points with repeated x values\n\n\nfunction output(xv, yhat, ux, uy) {\n const n = xv.length,\n out = [];\n let i = 0,\n cnt = 0,\n prev = [],\n v;\n\n for (; i < n; ++i) {\n v = xv[i] + ux;\n\n if (prev[0] === v) {\n // average output values via online update\n prev[1] += (yhat[i] - prev[1]) / ++cnt;\n } else {\n // add new output point\n cnt = 0;\n prev[1] += uy;\n prev = [v, yhat[i]];\n out.push(prev);\n }\n }\n\n prev[1] += uy;\n return out;\n}\n\n// subdivide up to accuracy of 0.1 degrees\nconst MIN_RADIANS = 0.1 * Math.PI / 180; // Adaptively sample an interpolated function over a domain extent\n\nfunction sampleCurve (f, extent, minSteps, maxSteps) {\n minSteps = minSteps || 25;\n maxSteps = Math.max(minSteps, maxSteps || 200);\n\n const point = x => [x, f(x)],\n minX = extent[0],\n maxX = extent[1],\n span = maxX - minX,\n stop = span / maxSteps,\n prev = [point(minX)],\n next = [];\n\n if (minSteps === maxSteps) {\n // no adaptation, sample uniform grid directly and return\n for (let i = 1; i < maxSteps; ++i) {\n prev.push(point(minX + i / minSteps * span));\n }\n\n prev.push(point(maxX));\n return prev;\n } else {\n // sample minimum points on uniform grid\n // then move on to perform adaptive refinement\n next.push(point(maxX));\n\n for (let i = minSteps; --i > 0;) {\n next.push(point(minX + i / minSteps * span));\n }\n }\n\n let p0 = prev[0],\n p1 = next[next.length - 1];\n\n while (p1) {\n // midpoint for potential curve subdivision\n const pm = point((p0[0] + p1[0]) / 2);\n\n if (pm[0] - p0[0] >= stop && angleDelta(p0, pm, p1) > MIN_RADIANS) {\n // maximum resolution has not yet been met, and\n // subdivision midpoint sufficiently different from endpoint\n // save subdivision, push midpoint onto the visitation stack\n next.push(pm);\n } else {\n // subdivision midpoint sufficiently similar to endpoint\n // skip subdivision, store endpoint, move to next point on the stack\n p0 = p1;\n prev.push(p1);\n next.pop();\n }\n\n p1 = next[next.length - 1];\n }\n\n return prev;\n}\n\nfunction angleDelta(p, q, r) {\n const a0 = Math.atan2(r[1] - p[1], r[0] - p[0]),\n a1 = Math.atan2(q[1] - p[1], q[0] - p[0]);\n return Math.abs(a0 - a1);\n}\n\nexport { estimateBandwidth as bandwidthNRD, bin, bootstrapCI, cumulativeLogNormal, cumulativeNormal, cumulativeUniform, densityLogNormal, densityNormal, densityUniform, dotbin, quantileLogNormal, quantileNormal, quantileUniform, quantiles, quartiles, random, integer as randomInteger, kde as randomKDE, lcg as randomLCG, lognormal as randomLogNormal, mixture as randomMixture, gaussian as randomNormal, uniform as randomUniform, exp as regressionExp, linear as regressionLinear, loess as regressionLoess, log as regressionLog, poly as regressionPoly, pow as regressionPow, quad as regressionQuad, sampleCurve, sampleLogNormal, sampleNormal, sampleUniform, setRandom };\n","import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n const v = variance(values, valueof);\n return v ? Math.sqrt(v) : v;\n}\n","export default function variance(values, valueof) {\n let count = 0;\n let delta;\n let mean = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n }\n if (count > 1) return sum / (count - 1);\n}\n","import { extend, identity, field, hasOwnProperty, extentIndex, inherits, array, accessorName, error, accessorFields, accessor, toNumber, merge, compare, truthy, extent, span, fastmap, isArray, key, ascending, peek, zero, constant } from 'vega-util';\nimport { tupleid, Transform, replace, ingest, stableCompare, Operator, derive, rederive } from 'vega-dataflow';\nimport { quartiles, bootstrapCI, bin, randomKDE, randomMixture, randomNormal, randomLogNormal, randomUniform, sampleCurve, dotbin, quantiles, random } from 'vega-statistics';\nimport { median, mean, min, max, range, bisector } from 'd3-array';\nimport { TIME_UNITS, utcInterval, timeInterval, timeBin, timeUnits, utcFloor, timeFloor } from 'vega-time';\n\nfunction multikey(f) {\n return x => {\n const n = f.length;\n let i = 1,\n k = String(f[0](x));\n\n for (; i < n; ++i) {\n k += '|' + f[i](x);\n }\n\n return k;\n };\n}\nfunction groupkey(fields) {\n return !fields || !fields.length ? function () {\n return '';\n } : fields.length === 1 ? fields[0] : multikey(fields);\n}\n\nfunction measureName(op, field, as) {\n return as || op + (!field ? '' : '_' + field);\n}\n\nconst noop = () => {};\n\nconst base_op = {\n init: noop,\n add: noop,\n rem: noop,\n idx: 0\n};\nconst AggregateOps = {\n values: {\n init: m => m.cell.store = true,\n value: m => m.cell.data.values(),\n idx: -1\n },\n count: {\n value: m => m.cell.num\n },\n __count__: {\n value: m => m.missing + m.valid\n },\n missing: {\n value: m => m.missing\n },\n valid: {\n value: m => m.valid\n },\n sum: {\n init: m => m.sum = 0,\n value: m => m.sum,\n add: (m, v) => m.sum += +v,\n rem: (m, v) => m.sum -= v\n },\n product: {\n init: m => m.product = 1,\n value: m => m.valid ? m.product : undefined,\n add: (m, v) => m.product *= v,\n rem: (m, v) => m.product /= v\n },\n mean: {\n init: m => m.mean = 0,\n value: m => m.valid ? m.mean : undefined,\n add: (m, v) => (m.mean_d = v - m.mean, m.mean += m.mean_d / m.valid),\n rem: (m, v) => (m.mean_d = v - m.mean, m.mean -= m.valid ? m.mean_d / m.valid : m.mean)\n },\n average: {\n value: m => m.valid ? m.mean : undefined,\n req: ['mean'],\n idx: 1\n },\n variance: {\n init: m => m.dev = 0,\n value: m => m.valid > 1 ? m.dev / (m.valid - 1) : undefined,\n add: (m, v) => m.dev += m.mean_d * (v - m.mean),\n rem: (m, v) => m.dev -= m.mean_d * (v - m.mean),\n req: ['mean'],\n idx: 1\n },\n variancep: {\n value: m => m.valid > 1 ? m.dev / m.valid : undefined,\n req: ['variance'],\n idx: 2\n },\n stdev: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / (m.valid - 1)) : undefined,\n req: ['variance'],\n idx: 2\n },\n stdevp: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / m.valid) : undefined,\n req: ['variance'],\n idx: 2\n },\n stderr: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / (m.valid * (m.valid - 1))) : undefined,\n req: ['variance'],\n idx: 2\n },\n distinct: {\n value: m => m.cell.data.distinct(m.get),\n req: ['values'],\n idx: 3\n },\n ci0: {\n value: m => m.cell.data.ci0(m.get),\n req: ['values'],\n idx: 3\n },\n ci1: {\n value: m => m.cell.data.ci1(m.get),\n req: ['values'],\n idx: 3\n },\n median: {\n value: m => m.cell.data.q2(m.get),\n req: ['values'],\n idx: 3\n },\n q1: {\n value: m => m.cell.data.q1(m.get),\n req: ['values'],\n idx: 3\n },\n q3: {\n value: m => m.cell.data.q3(m.get),\n req: ['values'],\n idx: 3\n },\n min: {\n init: m => m.min = undefined,\n value: m => m.min = Number.isNaN(m.min) ? m.cell.data.min(m.get) : m.min,\n add: (m, v) => {\n if (v < m.min || m.min === undefined) m.min = v;\n },\n rem: (m, v) => {\n if (v <= m.min) m.min = NaN;\n },\n req: ['values'],\n idx: 4\n },\n max: {\n init: m => m.max = undefined,\n value: m => m.max = Number.isNaN(m.max) ? m.cell.data.max(m.get) : m.max,\n add: (m, v) => {\n if (v > m.max || m.max === undefined) m.max = v;\n },\n rem: (m, v) => {\n if (v >= m.max) m.max = NaN;\n },\n req: ['values'],\n idx: 4\n },\n argmin: {\n init: m => m.argmin = undefined,\n value: m => m.argmin || m.cell.data.argmin(m.get),\n add: (m, v, t) => {\n if (v < m.min) m.argmin = t;\n },\n rem: (m, v) => {\n if (v <= m.min) m.argmin = undefined;\n },\n req: ['min', 'values'],\n idx: 3\n },\n argmax: {\n init: m => m.argmax = undefined,\n value: m => m.argmax || m.cell.data.argmax(m.get),\n add: (m, v, t) => {\n if (v > m.max) m.argmax = t;\n },\n rem: (m, v) => {\n if (v >= m.max) m.argmax = undefined;\n },\n req: ['max', 'values'],\n idx: 3\n }\n};\nconst ValidAggregateOps = Object.keys(AggregateOps);\n\nfunction measure(key, value) {\n return out => extend({\n name: key,\n out: out || key\n }, base_op, value);\n}\n\nValidAggregateOps.forEach(key => {\n AggregateOps[key] = measure(key, AggregateOps[key]);\n});\nfunction createMeasure(op, name) {\n return AggregateOps[op](name);\n}\n\nfunction compareIndex(a, b) {\n return a.idx - b.idx;\n}\n\nfunction resolve(agg) {\n const map = {};\n agg.forEach(a => map[a.name] = a);\n\n const getreqs = a => {\n if (!a.req) return;\n a.req.forEach(key => {\n if (!map[key]) getreqs(map[key] = AggregateOps[key]());\n });\n };\n\n agg.forEach(getreqs);\n return Object.values(map).sort(compareIndex);\n}\n\nfunction init() {\n this.valid = 0;\n this.missing = 0;\n\n this._ops.forEach(op => op.init(this));\n}\n\nfunction add(v, t) {\n if (v == null || v === '') {\n ++this.missing;\n return;\n }\n\n if (v !== v) return;\n ++this.valid;\n\n this._ops.forEach(op => op.add(this, v, t));\n}\n\nfunction rem(v, t) {\n if (v == null || v === '') {\n --this.missing;\n return;\n }\n\n if (v !== v) return;\n --this.valid;\n\n this._ops.forEach(op => op.rem(this, v, t));\n}\n\nfunction set(t) {\n this._out.forEach(op => t[op.out] = op.value(this));\n\n return t;\n}\n\nfunction compileMeasures(agg, field) {\n const get = field || identity,\n ops = resolve(agg),\n out = agg.slice().sort(compareIndex);\n\n function ctr(cell) {\n this._ops = ops;\n this._out = out;\n this.cell = cell;\n this.init();\n }\n\n ctr.prototype.init = init;\n ctr.prototype.add = add;\n ctr.prototype.rem = rem;\n ctr.prototype.set = set;\n ctr.prototype.get = get;\n ctr.fields = agg.map(op => op.out);\n return ctr;\n}\n\nfunction TupleStore(key) {\n this._key = key ? field(key) : tupleid;\n this.reset();\n}\nconst prototype$1 = TupleStore.prototype;\n\nprototype$1.reset = function () {\n this._add = [];\n this._rem = [];\n this._ext = null;\n this._get = null;\n this._q = null;\n};\n\nprototype$1.add = function (v) {\n this._add.push(v);\n};\n\nprototype$1.rem = function (v) {\n this._rem.push(v);\n};\n\nprototype$1.values = function () {\n this._get = null;\n if (this._rem.length === 0) return this._add;\n const a = this._add,\n r = this._rem,\n k = this._key,\n n = a.length,\n m = r.length,\n x = Array(n - m),\n map = {};\n let i, j, v; // use unique key field to clear removed values\n\n for (i = 0; i < m; ++i) {\n map[k(r[i])] = 1;\n }\n\n for (i = 0, j = 0; i < n; ++i) {\n if (map[k(v = a[i])]) {\n map[k(v)] = 0;\n } else {\n x[j++] = v;\n }\n }\n\n this._rem = [];\n return this._add = x;\n}; // memoizing statistics methods\n\n\nprototype$1.distinct = function (get) {\n const v = this.values(),\n map = {};\n let n = v.length,\n count = 0,\n s;\n\n while (--n >= 0) {\n s = get(v[n]) + '';\n\n if (!hasOwnProperty(map, s)) {\n map[s] = 1;\n ++count;\n }\n }\n\n return count;\n};\n\nprototype$1.extent = function (get) {\n if (this._get !== get || !this._ext) {\n const v = this.values(),\n i = extentIndex(v, get);\n this._ext = [v[i[0]], v[i[1]]];\n this._get = get;\n }\n\n return this._ext;\n};\n\nprototype$1.argmin = function (get) {\n return this.extent(get)[0] || {};\n};\n\nprototype$1.argmax = function (get) {\n return this.extent(get)[1] || {};\n};\n\nprototype$1.min = function (get) {\n const m = this.extent(get)[0];\n return m != null ? get(m) : undefined;\n};\n\nprototype$1.max = function (get) {\n const m = this.extent(get)[1];\n return m != null ? get(m) : undefined;\n};\n\nprototype$1.quartile = function (get) {\n if (this._get !== get || !this._q) {\n this._q = quartiles(this.values(), get);\n this._get = get;\n }\n\n return this._q;\n};\n\nprototype$1.q1 = function (get) {\n return this.quartile(get)[0];\n};\n\nprototype$1.q2 = function (get) {\n return this.quartile(get)[1];\n};\n\nprototype$1.q3 = function (get) {\n return this.quartile(get)[2];\n};\n\nprototype$1.ci = function (get) {\n if (this._get !== get || !this._ci) {\n this._ci = bootstrapCI(this.values(), 1000, 0.05, get);\n this._get = get;\n }\n\n return this._ci;\n};\n\nprototype$1.ci0 = function (get) {\n return this.ci(get)[0];\n};\n\nprototype$1.ci1 = function (get) {\n return this.ci(get)[1];\n};\n\n/**\n * Group-by aggregation operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {Array} [params.fields] - An array of accessors to aggregate.\n * @param {Array} [params.ops] - An array of strings indicating aggregation operations.\n * @param {Array} [params.as] - An array of output field names for aggregated values.\n * @param {boolean} [params.cross=false] - A flag indicating that the full\n * cross-product of groupby values should be generated, including empty cells.\n * If true, the drop parameter is ignored and empty cells are retained.\n * @param {boolean} [params.drop=true] - A flag indicating if empty cells should be removed.\n */\n\nfunction Aggregate(params) {\n Transform.call(this, null, params);\n this._adds = []; // array of added output tuples\n\n this._mods = []; // array of modified output tuples\n\n this._alen = 0; // number of active added tuples\n\n this._mlen = 0; // number of active modified tuples\n\n this._drop = true; // should empty aggregation cells be removed\n\n this._cross = false; // produce full cross-product of group-by values\n\n this._dims = []; // group-by dimension accessors\n\n this._dnames = []; // group-by dimension names\n\n this._measures = []; // collection of aggregation monoids\n\n this._countOnly = false; // flag indicating only count aggregation\n\n this._counts = null; // collection of count fields\n\n this._prev = null; // previous aggregation cells\n\n this._inputs = null; // array of dependent input tuple field names\n\n this._outputs = null; // array of output tuple field names\n}\nAggregate.Definition = {\n 'type': 'Aggregate',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidAggregateOps\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'drop',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'cross',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(Aggregate, Transform, {\n transform(_, pulse) {\n const aggr = this,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n mod = _.modified();\n\n aggr.stamp = out.stamp;\n\n if (aggr.value && (mod || pulse.modified(aggr._inputs, true))) {\n aggr._prev = aggr.value;\n aggr.value = mod ? aggr.init(_) : {};\n pulse.visit(pulse.SOURCE, t => aggr.add(t));\n } else {\n aggr.value = aggr.value || aggr.init(_);\n pulse.visit(pulse.REM, t => aggr.rem(t));\n pulse.visit(pulse.ADD, t => aggr.add(t));\n } // Indicate output fields and return aggregate tuples.\n\n\n out.modifies(aggr._outputs); // Should empty cells be dropped?\n\n aggr._drop = _.drop !== false; // If domain cross-product requested, generate empty cells as needed\n // and ensure that empty cells are not dropped\n\n if (_.cross && aggr._dims.length > 1) {\n aggr._drop = false;\n aggr.cross();\n }\n\n if (pulse.clean() && aggr._drop) {\n out.clean(true).runAfter(() => this.clean());\n }\n\n return aggr.changes(out);\n },\n\n cross() {\n const aggr = this,\n curr = aggr.value,\n dims = aggr._dnames,\n vals = dims.map(() => ({})),\n n = dims.length; // collect all group-by domain values\n\n function collect(cells) {\n let key, i, t, v;\n\n for (key in cells) {\n t = cells[key].tuple;\n\n for (i = 0; i < n; ++i) {\n vals[i][v = t[dims[i]]] = v;\n }\n }\n }\n\n collect(aggr._prev);\n collect(curr); // iterate over key cross-product, create cells as needed\n\n function generate(base, tuple, index) {\n const name = dims[index],\n v = vals[index++];\n\n for (const k in v) {\n const key = base ? base + '|' + k : k;\n tuple[name] = v[k];\n if (index < n) generate(key, tuple, index);else if (!curr[key]) aggr.cell(key, tuple);\n }\n }\n\n generate('', {}, 0);\n },\n\n init(_) {\n // initialize input and output fields\n const inputs = this._inputs = [],\n outputs = this._outputs = [],\n inputMap = {};\n\n function inputVisit(get) {\n const fields = array(accessorFields(get)),\n n = fields.length;\n let i = 0,\n f;\n\n for (; i < n; ++i) {\n if (!inputMap[f = fields[i]]) {\n inputMap[f] = 1;\n inputs.push(f);\n }\n }\n } // initialize group-by dimensions\n\n\n this._dims = array(_.groupby);\n this._dnames = this._dims.map(d => {\n const dname = accessorName(d);\n inputVisit(d);\n outputs.push(dname);\n return dname;\n });\n this.cellkey = _.key ? _.key : groupkey(this._dims); // initialize aggregate measures\n\n this._countOnly = true;\n this._counts = [];\n this._measures = [];\n const fields = _.fields || [null],\n ops = _.ops || ['count'],\n as = _.as || [],\n n = fields.length,\n map = {};\n let field, op, m, mname, outname, i;\n\n if (n !== ops.length) {\n error('Unmatched number of fields and aggregate ops.');\n }\n\n for (i = 0; i < n; ++i) {\n field = fields[i];\n op = ops[i];\n\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n\n mname = accessorName(field);\n outname = measureName(op, mname, as[i]);\n outputs.push(outname);\n\n if (op === 'count') {\n this._counts.push(outname);\n\n continue;\n }\n\n m = map[mname];\n\n if (!m) {\n inputVisit(field);\n m = map[mname] = [];\n m.field = field;\n\n this._measures.push(m);\n }\n\n if (op !== 'count') this._countOnly = false;\n m.push(createMeasure(op, outname));\n }\n\n this._measures = this._measures.map(m => compileMeasures(m, m.field));\n return {}; // aggregation cells (this.value)\n },\n\n // -- Cell Management -----\n cellkey: groupkey(),\n\n cell(key, t) {\n let cell = this.value[key];\n\n if (!cell) {\n cell = this.value[key] = this.newcell(key, t);\n this._adds[this._alen++] = cell;\n } else if (cell.num === 0 && this._drop && cell.stamp < this.stamp) {\n cell.stamp = this.stamp;\n this._adds[this._alen++] = cell;\n } else if (cell.stamp < this.stamp) {\n cell.stamp = this.stamp;\n this._mods[this._mlen++] = cell;\n }\n\n return cell;\n },\n\n newcell(key, t) {\n const cell = {\n key: key,\n num: 0,\n agg: null,\n tuple: this.newtuple(t, this._prev && this._prev[key]),\n stamp: this.stamp,\n store: false\n };\n\n if (!this._countOnly) {\n const measures = this._measures,\n n = measures.length;\n cell.agg = Array(n);\n\n for (let i = 0; i < n; ++i) {\n cell.agg[i] = new measures[i](cell);\n }\n }\n\n if (cell.store) {\n cell.data = new TupleStore();\n }\n\n return cell;\n },\n\n newtuple(t, p) {\n const names = this._dnames,\n dims = this._dims,\n n = dims.length,\n x = {};\n\n for (let i = 0; i < n; ++i) {\n x[names[i]] = dims[i](t);\n }\n\n return p ? replace(p.tuple, x) : ingest(x);\n },\n\n clean() {\n const cells = this.value;\n\n for (const key in cells) {\n if (cells[key].num === 0) {\n delete cells[key];\n }\n }\n },\n\n // -- Process Tuples -----\n add(t) {\n const key = this.cellkey(t),\n cell = this.cell(key, t);\n cell.num += 1;\n if (this._countOnly) return;\n if (cell.store) cell.data.add(t);\n const agg = cell.agg;\n\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].add(agg[i].get(t), t);\n }\n },\n\n rem(t) {\n const key = this.cellkey(t),\n cell = this.cell(key, t);\n cell.num -= 1;\n if (this._countOnly) return;\n if (cell.store) cell.data.rem(t);\n const agg = cell.agg;\n\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].rem(agg[i].get(t), t);\n }\n },\n\n celltuple(cell) {\n const tuple = cell.tuple,\n counts = this._counts; // consolidate stored values\n\n if (cell.store) {\n cell.data.values();\n } // update tuple properties\n\n\n for (let i = 0, n = counts.length; i < n; ++i) {\n tuple[counts[i]] = cell.num;\n }\n\n if (!this._countOnly) {\n const agg = cell.agg;\n\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].set(tuple);\n }\n }\n\n return tuple;\n },\n\n changes(out) {\n const adds = this._adds,\n mods = this._mods,\n prev = this._prev,\n drop = this._drop,\n add = out.add,\n rem = out.rem,\n mod = out.mod;\n let cell, key, i, n;\n if (prev) for (key in prev) {\n cell = prev[key];\n if (!drop || cell.num) rem.push(cell.tuple);\n }\n\n for (i = 0, n = this._alen; i < n; ++i) {\n add.push(this.celltuple(adds[i]));\n adds[i] = null; // for garbage collection\n }\n\n for (i = 0, n = this._mlen; i < n; ++i) {\n cell = mods[i];\n (cell.num === 0 && drop ? rem : mod).push(this.celltuple(cell));\n mods[i] = null; // for garbage collection\n }\n\n this._alen = this._mlen = 0; // reset list of active cells\n\n this._prev = null;\n return out;\n }\n\n});\n\nconst EPSILON$1 = 1e-14;\n/**\n * Generates a binning function for discretizing data.\n * @constructor\n * @param {object} params - The parameters for this operator. The\n * provided values should be valid options for the {@link bin} function.\n * @param {function(object): *} params.field - The data field to bin.\n */\n\nfunction Bin(params) {\n Transform.call(this, null, params);\n}\nBin.Definition = {\n 'type': 'Bin',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'interval',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'anchor',\n 'type': 'number'\n }, {\n 'name': 'maxbins',\n 'type': 'number',\n 'default': 20\n }, {\n 'name': 'base',\n 'type': 'number',\n 'default': 10\n }, {\n 'name': 'divide',\n 'type': 'number',\n 'array': true,\n 'default': [5, 2]\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'span',\n 'type': 'number'\n }, {\n 'name': 'step',\n 'type': 'number'\n }, {\n 'name': 'steps',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'minstep',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'name',\n 'type': 'string'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['bin0', 'bin1']\n }]\n};\ninherits(Bin, Transform, {\n transform(_, pulse) {\n const band = _.interval !== false,\n bins = this._bins(_),\n start = bins.start,\n step = bins.step,\n as = _.as || ['bin0', 'bin1'],\n b0 = as[0],\n b1 = as[1];\n\n let flag;\n\n if (_.modified()) {\n pulse = pulse.reflow(true);\n flag = pulse.SOURCE;\n } else {\n flag = pulse.modified(accessorFields(_.field)) ? pulse.ADD_MOD : pulse.ADD;\n }\n\n pulse.visit(flag, band ? t => {\n const v = bins(t); // minimum bin value (inclusive)\n\n t[b0] = v; // maximum bin value (exclusive)\n // use convoluted math for better floating point agreement\n // see https://github.com/vega/vega/issues/830\n // infinite values propagate through this formula! #2227\n\n t[b1] = v == null ? null : start + step * (1 + (v - start) / step);\n } : t => t[b0] = bins(t));\n return pulse.modifies(band ? as : b0);\n },\n\n _bins(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n\n const field = _.field,\n bins = bin(_),\n step = bins.step;\n let start = bins.start,\n stop = start + Math.ceil((bins.stop - start) / step) * step,\n a,\n d;\n\n if ((a = _.anchor) != null) {\n d = a - (start + step * Math.floor((a - start) / step));\n start += d;\n stop += d;\n }\n\n const f = function (t) {\n let v = toNumber(field(t));\n return v == null ? null : v < start ? -Infinity : v > stop ? +Infinity : (v = Math.max(start, Math.min(v, stop - step)), start + step * Math.floor(EPSILON$1 + (v - start) / step));\n };\n\n f.start = start;\n f.stop = bins.stop;\n f.step = step;\n return this.value = accessor(f, accessorFields(field), _.name || 'bin_' + accessorName(field));\n }\n\n});\n\nfunction SortedList (idFunc, source, input) {\n const $ = idFunc;\n let data = source || [],\n add = input || [],\n rem = {},\n cnt = 0;\n return {\n add: t => add.push(t),\n remove: t => rem[$(t)] = ++cnt,\n size: () => data.length,\n data: (compare, resort) => {\n if (cnt) {\n data = data.filter(t => !rem[$(t)]);\n rem = {};\n cnt = 0;\n }\n\n if (resort && compare) {\n data.sort(compare);\n }\n\n if (add.length) {\n data = compare ? merge(compare, data, add.sort(compare)) : data.concat(add);\n add = [];\n }\n\n return data;\n }\n };\n}\n\n/**\n * Collects all data tuples that pass through this operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for additionally sorting the collected tuples.\n */\n\nfunction Collect(params) {\n Transform.call(this, [], params);\n}\nCollect.Definition = {\n 'type': 'Collect',\n 'metadata': {\n 'source': true\n },\n 'params': [{\n 'name': 'sort',\n 'type': 'compare'\n }]\n};\ninherits(Collect, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.ALL),\n list = SortedList(tupleid, this.value, out.materialize(out.ADD).add),\n sort = _.sort,\n mod = pulse.changed() || sort && (_.modified('sort') || pulse.modified(sort.fields));\n out.visit(out.REM, list.remove);\n this.modified(mod);\n this.value = out.source = list.data(stableCompare(sort), mod); // propagate tree root if defined\n\n if (pulse.source && pulse.source.root) {\n this.value.root = pulse.source.root;\n }\n\n return out;\n }\n\n});\n\n/**\n * Generates a comparator function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - The fields to compare.\n * @param {Array} [params.orders] - The sort orders.\n * Each entry should be one of \"ascending\" (default) or \"descending\".\n */\n\nfunction Compare(params) {\n Operator.call(this, null, update$5, params);\n}\ninherits(Compare, Operator);\n\nfunction update$5(_) {\n return this.value && !_.modified() ? this.value : compare(_.fields, _.orders);\n}\n\n/**\n * Count regexp-defined pattern occurrences in a text field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the text field.\n * @param {string} [params.pattern] - RegExp string defining the text pattern.\n * @param {string} [params.case] - One of 'lower', 'upper' or null (mixed) case.\n * @param {string} [params.stopwords] - RegExp string of words to ignore.\n */\n\nfunction CountPattern(params) {\n Transform.call(this, null, params);\n}\nCountPattern.Definition = {\n 'type': 'CountPattern',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'case',\n 'type': 'enum',\n 'values': ['upper', 'lower', 'mixed'],\n 'default': 'mixed'\n }, {\n 'name': 'pattern',\n 'type': 'string',\n 'default': '[\\\\w\"]+'\n }, {\n 'name': 'stopwords',\n 'type': 'string',\n 'default': ''\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['text', 'count']\n }]\n};\n\nfunction tokenize(text, tcase, match) {\n switch (tcase) {\n case 'upper':\n text = text.toUpperCase();\n break;\n\n case 'lower':\n text = text.toLowerCase();\n break;\n }\n\n return text.match(match);\n}\n\ninherits(CountPattern, Transform, {\n transform(_, pulse) {\n const process = update => tuple => {\n var tokens = tokenize(get(tuple), _.case, match) || [],\n t;\n\n for (var i = 0, n = tokens.length; i < n; ++i) {\n if (!stop.test(t = tokens[i])) update(t);\n }\n };\n\n const init = this._parameterCheck(_, pulse),\n counts = this._counts,\n match = this._match,\n stop = this._stop,\n get = _.field,\n as = _.as || ['text', 'count'],\n add = process(t => counts[t] = 1 + (counts[t] || 0)),\n rem = process(t => counts[t] -= 1);\n\n if (init) {\n pulse.visit(pulse.SOURCE, add);\n } else {\n pulse.visit(pulse.ADD, add);\n pulse.visit(pulse.REM, rem);\n }\n\n return this._finish(pulse, as); // generate output tuples\n },\n\n _parameterCheck(_, pulse) {\n let init = false;\n\n if (_.modified('stopwords') || !this._stop) {\n this._stop = new RegExp('^' + (_.stopwords || '') + '$', 'i');\n init = true;\n }\n\n if (_.modified('pattern') || !this._match) {\n this._match = new RegExp(_.pattern || '[\\\\w\\']+', 'g');\n init = true;\n }\n\n if (_.modified('field') || pulse.modified(_.field.fields)) {\n init = true;\n }\n\n if (init) this._counts = {};\n return init;\n },\n\n _finish(pulse, as) {\n const counts = this._counts,\n tuples = this._tuples || (this._tuples = {}),\n text = as[0],\n count = as[1],\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n let w, t, c;\n\n for (w in counts) {\n t = tuples[w];\n c = counts[w] || 0;\n\n if (!t && c) {\n tuples[w] = t = ingest({});\n t[text] = w;\n t[count] = c;\n out.add.push(t);\n } else if (c === 0) {\n if (t) out.rem.push(t);\n counts[w] = null;\n tuples[w] = null;\n } else if (t[count] !== c) {\n t[count] = c;\n out.mod.push(t);\n }\n }\n\n return out.modifies(as);\n }\n\n});\n\n/**\n * Perform a cross-product of a tuple stream with itself.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object):boolean} [params.filter] - An optional filter\n * function for selectively including tuples in the cross product.\n * @param {Array} [params.as] - The names of the output fields.\n */\n\nfunction Cross(params) {\n Transform.call(this, null, params);\n}\nCross.Definition = {\n 'type': 'Cross',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'filter',\n 'type': 'expr'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['a', 'b']\n }]\n};\ninherits(Cross, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n as = _.as || ['a', 'b'],\n a = as[0],\n b = as[1],\n reset = !this.value || pulse.changed(pulse.ADD_REM) || _.modified('as') || _.modified('filter');\n\n let data = this.value;\n\n if (reset) {\n if (data) out.rem = data;\n data = pulse.materialize(pulse.SOURCE).source;\n out.add = this.value = cross(data, a, b, _.filter || truthy);\n } else {\n out.mod = data;\n }\n\n out.source = this.value;\n return out.modifies(as);\n }\n\n});\n\nfunction cross(input, a, b, filter) {\n var data = [],\n t = {},\n n = input.length,\n i = 0,\n j,\n left;\n\n for (; i < n; ++i) {\n t[a] = left = input[i];\n\n for (j = 0; j < n; ++j) {\n t[b] = input[j];\n\n if (filter(t)) {\n data.push(ingest(t));\n t = {};\n t[a] = left;\n }\n }\n }\n\n return data;\n}\n\nconst Distributions = {\n kde: randomKDE,\n mixture: randomMixture,\n normal: randomNormal,\n lognormal: randomLogNormal,\n uniform: randomUniform\n};\nconst DISTRIBUTIONS = 'distributions',\n FUNCTION = 'function',\n FIELD = 'field';\n/**\n * Parse a parameter object for a probability distribution.\n * @param {object} def - The distribution parameter object.\n * @param {function():Array} - A method for requesting\n * source data. Used for distributions (such as KDE) that\n * require sample data points. This method will only be\n * invoked if the 'from' parameter for a target data source\n * is not provided. Typically this method returns backing\n * source data for a Pulse object.\n * @return {object} - The output distribution object.\n */\n\nfunction parse(def, data) {\n const func = def[FUNCTION];\n\n if (!hasOwnProperty(Distributions, func)) {\n error('Unknown distribution function: ' + func);\n }\n\n const d = Distributions[func]();\n\n for (const name in def) {\n // if data field, extract values\n if (name === FIELD) {\n d.data((def.from || data()).map(def[name]));\n } // if distribution mixture, recurse to parse each definition\n else if (name === DISTRIBUTIONS) {\n d[name](def[name].map(_ => parse(_, data)));\n } // otherwise, simply set the parameter\n else if (typeof d[name] === FUNCTION) {\n d[name](def[name]);\n }\n }\n\n return d;\n}\n\n/**\n * Grid sample points for a probability density. Given a distribution and\n * a sampling extent, will generate points suitable for plotting either\n * PDF (probability density function) or CDF (cumulative distribution\n * function) curves.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.distribution - The probability distribution. This\n * is an object parameter dependent on the distribution type.\n * @param {string} [params.method='pdf'] - The distribution method to sample.\n * One of 'pdf' or 'cdf'.\n * @param {Array} [params.extent] - The [min, max] extent over which\n * to sample the distribution. This argument is required in most cases, but\n * can be omitted if the distribution (e.g., 'kde') supports a 'data' method\n * that returns numerical sample points from which the extent can be deduced.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\n\nfunction Density(params) {\n Transform.call(this, null, params);\n}\nconst distributions = [{\n 'key': {\n 'function': 'normal'\n },\n 'params': [{\n 'name': 'mean',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'stdev',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'lognormal'\n },\n 'params': [{\n 'name': 'mean',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'stdev',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'uniform'\n },\n 'params': [{\n 'name': 'min',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'max',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'kde'\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'from',\n 'type': 'data'\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0\n }]\n}];\nconst mixture = {\n 'key': {\n 'function': 'mixture'\n },\n 'params': [{\n 'name': 'distributions',\n 'type': 'param',\n 'array': true,\n 'params': distributions\n }, {\n 'name': 'weights',\n 'type': 'number',\n 'array': true\n }]\n};\nDensity.Definition = {\n 'type': 'Density',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'steps',\n 'type': 'number'\n }, {\n 'name': 'minsteps',\n 'type': 'number',\n 'default': 25\n }, {\n 'name': 'maxsteps',\n 'type': 'number',\n 'default': 200\n }, {\n 'name': 'method',\n 'type': 'string',\n 'default': 'pdf',\n 'values': ['pdf', 'cdf']\n }, {\n 'name': 'distribution',\n 'type': 'param',\n 'params': distributions.concat(mixture)\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['value', 'density']\n }]\n};\ninherits(Density, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n if (!this.value || pulse.changed() || _.modified()) {\n const dist = parse(_.distribution, source(pulse)),\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200;\n let method = _.method || 'pdf';\n\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n\n if (!_.extent && !dist.data) {\n error('Missing density extent parameter.');\n }\n\n method = dist[method];\n const as = _.as || ['value', 'density'],\n domain = _.extent || extent(dist.data()),\n values = sampleCurve(method, domain, minsteps, maxsteps).map(v => {\n const tuple = {};\n tuple[as[0]] = v[0];\n tuple[as[1]] = v[1];\n return ingest(tuple);\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n\n return out;\n }\n\n});\n\nfunction source(pulse) {\n return () => pulse.materialize(pulse.SOURCE).source;\n}\n\nfunction fieldNames(fields, as) {\n if (!fields) return null;\n return fields.map((f, i) => as[i] || accessorName(f));\n}\nfunction partition$1(data, groupby, field) {\n const groups = [],\n get = f => f(t);\n\n let map, i, n, t, k, g; // partition data points into groups\n\n if (groupby == null) {\n groups.push(data.map(field));\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n\n g.push(field(t));\n }\n }\n\n return groups;\n}\n\nconst Output = 'bin';\n/**\n * Dot density binning for dot plot construction.\n * Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n * https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to bin.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {number} [params.step] - The step size (bin width) within which dots should be\n * stacked. Defaults to 1/30 of the extent of the data *field*.\n * @param {boolean} [params.smooth=false] - A boolean flag indicating if dot density\n * stacks should be smoothed to reduce variance.\n */\n\nfunction DotBin(params) {\n Transform.call(this, null, params);\n}\nDotBin.Definition = {\n 'type': 'DotBin',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number'\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': Output\n }]\n};\n\nconst autostep = (data, field) => span(extent(data, field)) / 30;\n\ninherits(DotBin, Transform, {\n transform(_, pulse) {\n if (this.value && !(_.modified() || pulse.changed())) {\n return pulse; // early exit\n }\n\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(pulse.source, _.groupby, identity),\n smooth = _.smooth || false,\n field = _.field,\n step = _.step || autostep(source, field),\n sort = stableCompare((a, b) => field(a) - field(b)),\n as = _.as || Output,\n n = groups.length; // compute dotplot bins per group\n\n let min = Infinity,\n max = -Infinity,\n i = 0,\n j;\n\n for (; i < n; ++i) {\n const g = groups[i].sort(sort);\n j = -1;\n\n for (const v of dotbin(g, step, smooth, field)) {\n if (v < min) min = v;\n if (v > max) max = v;\n g[++j][as] = v;\n }\n }\n\n this.value = {\n start: min,\n stop: max,\n step: step\n };\n return pulse.reflow(true).modifies(as);\n }\n\n});\n\n/**\n * Wraps an expression function with access to external parameters.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function} params.expr - The expression function. The\n * function should accept both a datum and a parameter object.\n * This operator's value will be a new function that wraps the\n * expression function with access to this operator's parameters.\n */\n\nfunction Expression(params) {\n Operator.call(this, null, update$4, params);\n this.modified(true);\n}\ninherits(Expression, Operator);\n\nfunction update$4(_) {\n const expr = _.expr;\n return this.value && !_.modified('expr') ? this.value : accessor(datum => expr(datum, _), accessorFields(expr), accessorName(expr));\n}\n\n/**\n * Computes extents (min/max) for a data field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field over which to compute extends.\n */\n\nfunction Extent(params) {\n Transform.call(this, [undefined, undefined], params);\n}\nExtent.Definition = {\n 'type': 'Extent',\n 'metadata': {},\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }]\n};\ninherits(Extent, Transform, {\n transform(_, pulse) {\n const extent = this.value,\n field = _.field,\n mod = pulse.changed() || pulse.modified(field.fields) || _.modified('field');\n\n let min = extent[0],\n max = extent[1];\n\n if (mod || min == null) {\n min = +Infinity;\n max = -Infinity;\n }\n\n pulse.visit(mod ? pulse.SOURCE : pulse.ADD, t => {\n const v = toNumber(field(t));\n\n if (v != null) {\n // NaNs will fail all comparisons!\n if (v < min) min = v;\n if (v > max) max = v;\n }\n });\n\n if (!Number.isFinite(min) || !Number.isFinite(max)) {\n let name = accessorName(field);\n if (name) name = ` for field \"${name}\"`;\n pulse.dataflow.warn(`Infinite extent${name}: [${min}, ${max}]`);\n min = max = undefined;\n }\n\n this.value = [min, max];\n }\n\n});\n\n/**\n * Provides a bridge between a parent transform and a target subflow that\n * consumes only a subset of the tuples that pass through the parent.\n * @constructor\n * @param {Pulse} pulse - A pulse to use as the value of this operator.\n * @param {Transform} parent - The parent transform (typically a Facet instance).\n */\n\nfunction Subflow(pulse, parent) {\n Operator.call(this, pulse);\n this.parent = parent;\n this.count = 0;\n}\ninherits(Subflow, Operator, {\n /**\n * Routes pulses from this subflow to a target transform.\n * @param {Transform} target - A transform that receives the subflow of tuples.\n */\n connect(target) {\n this.detachSubflow = target.detachSubflow;\n this.targets().add(target);\n return target.source = this;\n },\n\n /**\n * Add an 'add' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being added.\n */\n add(t) {\n this.count += 1;\n this.value.add.push(t);\n },\n\n /**\n * Add a 'rem' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being removed.\n */\n rem(t) {\n this.count -= 1;\n this.value.rem.push(t);\n },\n\n /**\n * Add a 'mod' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being modified.\n */\n mod(t) {\n this.value.mod.push(t);\n },\n\n /**\n * Re-initialize this operator's pulse value.\n * @param {Pulse} pulse - The pulse to copy from.\n * @see Pulse.init\n */\n init(pulse) {\n this.value.init(pulse, pulse.NO_SOURCE);\n },\n\n /**\n * Evaluate this operator. This method overrides the\n * default behavior to simply return the contained pulse value.\n * @return {Pulse}\n */\n evaluate() {\n // assert: this.value.stamp === pulse.stamp\n return this.value;\n }\n\n});\n\n/**\n * Facets a dataflow into a set of subflows based on a key.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): *} params.key - The key field to facet by.\n */\n\nfunction Facet(params) {\n Transform.call(this, {}, params);\n this._keys = fastmap(); // cache previously calculated key values\n // keep track of active subflows, use as targets array for listeners\n // this allows us to limit propagation to only updated subflows\n\n const a = this._targets = [];\n a.active = 0;\n\n a.forEach = f => {\n for (let i = 0, n = a.active; i < n; ++i) {\n f(a[i], i, a);\n }\n };\n}\ninherits(Facet, Transform, {\n activate(flow) {\n this._targets[this._targets.active++] = flow;\n },\n\n // parent argument provided by PreFacet subclass\n subflow(key, flow, pulse, parent) {\n const flows = this.value;\n let sf = hasOwnProperty(flows, key) && flows[key],\n df,\n p;\n\n if (!sf) {\n p = parent || (p = this._group[key]) && p.tuple;\n df = pulse.dataflow;\n sf = new Subflow(pulse.fork(pulse.NO_SOURCE), this);\n df.add(sf).connect(flow(df, key, p));\n flows[key] = sf;\n this.activate(sf);\n } else if (sf.value.stamp < pulse.stamp) {\n sf.init(pulse);\n this.activate(sf);\n }\n\n return sf;\n },\n\n clean() {\n const flows = this.value;\n let detached = 0;\n\n for (const key in flows) {\n if (flows[key].count === 0) {\n const detach = flows[key].detachSubflow;\n if (detach) detach();\n delete flows[key];\n ++detached;\n }\n } // remove inactive targets from the active targets array\n\n\n if (detached) {\n const active = this._targets.filter(sf => sf && sf.count > 0);\n\n this.initTargets(active);\n }\n },\n\n initTargets(act) {\n const a = this._targets,\n n = a.length,\n m = act ? act.length : 0;\n let i = 0;\n\n for (; i < m; ++i) {\n a[i] = act[i];\n }\n\n for (; i < n && a[i] != null; ++i) {\n a[i] = null; // ensure old flows can be garbage collected\n }\n\n a.active = m;\n },\n\n transform(_, pulse) {\n const df = pulse.dataflow,\n key = _.key,\n flow = _.subflow,\n cache = this._keys,\n rekey = _.modified('key'),\n subflow = key => this.subflow(key, flow, pulse);\n\n this._group = _.group || {};\n this.initTargets(); // reset list of active subflows\n\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t),\n k = cache.get(id);\n\n if (k !== undefined) {\n cache.delete(id);\n subflow(k).rem(t);\n }\n });\n pulse.visit(pulse.ADD, t => {\n const k = key(t);\n cache.set(tupleid(t), k);\n subflow(k).add(t);\n });\n\n if (rekey || pulse.modified(key.fields)) {\n pulse.visit(pulse.MOD, t => {\n const id = tupleid(t),\n k0 = cache.get(id),\n k1 = key(t);\n\n if (k0 === k1) {\n subflow(k1).mod(t);\n } else {\n cache.set(id, k1);\n subflow(k0).rem(t);\n subflow(k1).add(t);\n }\n });\n } else if (pulse.changed(pulse.MOD)) {\n pulse.visit(pulse.MOD, t => {\n subflow(cache.get(tupleid(t))).mod(t);\n });\n }\n\n if (rekey) {\n pulse.visit(pulse.REFLOW, t => {\n const id = tupleid(t),\n k0 = cache.get(id),\n k1 = key(t);\n\n if (k0 !== k1) {\n cache.set(id, k1);\n subflow(k0).rem(t);\n subflow(k1).add(t);\n }\n });\n }\n\n if (pulse.clean()) {\n df.runAfter(() => {\n this.clean();\n cache.clean();\n });\n } else if (cache.empty > df.cleanThreshold) {\n df.runAfter(cache.clean);\n }\n\n return pulse;\n }\n\n});\n\n/**\n * Generates one or more field accessor functions.\n * If the 'name' parameter is an array, an array of field accessors\n * will be created and the 'as' parameter will be ignored.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.name - The field name(s) to access.\n * @param {string} params.as - The accessor function name.\n */\n\nfunction Field(params) {\n Operator.call(this, null, update$3, params);\n}\ninherits(Field, Operator);\n\nfunction update$3(_) {\n return this.value && !_.modified() ? this.value : isArray(_.name) ? array(_.name).map(f => field(f)) : field(_.name, _.as);\n}\n\n/**\n * Filters data tuples according to a predicate function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The predicate expression function\n * that determines a tuple's filter status. Truthy values pass the filter.\n */\n\nfunction Filter(params) {\n Transform.call(this, fastmap(), params);\n}\nFilter.Definition = {\n 'type': 'Filter',\n 'metadata': {\n 'changes': true\n },\n 'params': [{\n 'name': 'expr',\n 'type': 'expr',\n 'required': true\n }]\n};\ninherits(Filter, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow,\n cache = this.value,\n // cache ids of filtered tuples\n output = pulse.fork(),\n add = output.add,\n rem = output.rem,\n mod = output.mod,\n test = _.expr;\n let isMod = true;\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n if (!cache.has(id)) rem.push(t);else cache.delete(id);\n });\n pulse.visit(pulse.ADD, t => {\n if (test(t, _)) add.push(t);else cache.set(tupleid(t), 1);\n });\n\n function revisit(t) {\n const id = tupleid(t),\n b = test(t, _),\n s = cache.get(id);\n\n if (b && s) {\n cache.delete(id);\n add.push(t);\n } else if (!b && !s) {\n cache.set(id, 1);\n rem.push(t);\n } else if (isMod && b && !s) {\n mod.push(t);\n }\n }\n\n pulse.visit(pulse.MOD, revisit);\n\n if (_.modified()) {\n isMod = false;\n pulse.visit(pulse.REFLOW, revisit);\n }\n\n if (cache.empty > df.cleanThreshold) df.runAfter(cache.clean);\n return output;\n }\n\n});\n\n/**\n * Flattens array-typed field values into new data objects.\n * If multiple fields are specified, they are treated as parallel arrays,\n * with output values included for each matching index (or null if missing).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of field\n * accessors for the tuple fields that should be flattened.\n * @param {string} [params.index] - Optional output field name for index\n * value. If unspecified, no index field is included in the output.\n * @param {Array} [params.as] - Output field names for flattened\n * array fields. Any unspecified fields will use the field name provided\n * by the fields accessors.\n */\n\nfunction Flatten(params) {\n Transform.call(this, [], params);\n}\nFlatten.Definition = {\n 'type': 'Flatten',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'index',\n 'type': 'string'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Flatten, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(fields, _.as || []),\n index = _.index || null,\n m = as.length; // remove any previous results\n\n out.rem = this.value; // generate flattened tuples\n\n pulse.visit(pulse.SOURCE, t => {\n const arrays = fields.map(f => f(t)),\n maxlen = arrays.reduce((l, a) => Math.max(l, a.length), 0);\n let i = 0,\n j,\n d,\n v;\n\n for (; i < maxlen; ++i) {\n d = derive(t);\n\n for (j = 0; j < m; ++j) {\n d[as[j]] = (v = arrays[j][i]) == null ? null : v;\n }\n\n if (index) {\n d[index] = i;\n }\n\n out.add.push(d);\n }\n });\n this.value = out.source = out.add;\n if (index) out.modifies(index);\n return out.modifies(as);\n }\n\n});\n\n/**\n * Folds one more tuple fields into multiple tuples in which the field\n * name and values are available under new 'key' and 'value' fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.fields - An array of field accessors\n * for the tuple fields that should be folded.\n * @param {Array} [params.as] - Output field names for folded key\n * and value fields, defaults to ['key', 'value'].\n */\n\nfunction Fold(params) {\n Transform.call(this, [], params);\n}\nFold.Definition = {\n 'type': 'Fold',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['key', 'value']\n }]\n};\ninherits(Fold, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n fnames = fields.map(accessorName),\n as = _.as || ['key', 'value'],\n k = as[0],\n v = as[1],\n n = fields.length;\n out.rem = this.value;\n pulse.visit(pulse.SOURCE, t => {\n for (let i = 0, d; i < n; ++i) {\n d = derive(t);\n d[k] = fnames[i];\n d[v] = fields[i](t);\n out.add.push(d);\n }\n });\n this.value = out.source = out.add;\n return out.modifies(as);\n }\n\n});\n\n/**\n * Invokes a function for each data tuple and saves the results as a new field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The formula function to invoke for each tuple.\n * @param {string} params.as - The field name under which to save the result.\n * @param {boolean} [params.initonly=false] - If true, the formula is applied to\n * added tuples only, and does not update in response to modifications.\n */\n\nfunction Formula(params) {\n Transform.call(this, null, params);\n}\nFormula.Definition = {\n 'type': 'Formula',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'expr',\n 'type': 'expr',\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'required': true\n }, {\n 'name': 'initonly',\n 'type': 'boolean'\n }]\n};\ninherits(Formula, Transform, {\n transform(_, pulse) {\n const func = _.expr,\n as = _.as,\n mod = _.modified(),\n flag = _.initonly ? pulse.ADD : mod ? pulse.SOURCE : pulse.modified(func.fields) || pulse.modified(as) ? pulse.ADD_MOD : pulse.ADD;\n\n if (mod) {\n // parameters updated, need to reflow\n pulse = pulse.materialize().reflow(true);\n }\n\n if (!_.initonly) {\n pulse.modifies(as);\n }\n\n return pulse.visit(flag, t => t[as] = func(t, _));\n }\n\n});\n\n/**\n * Generates data tuples using a provided generator function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Parameters): object} params.generator - A tuple generator\n * function. This function is given the operator parameters as input.\n * Changes to any additional parameters will not trigger re-calculation\n * of previously generated tuples. Only future tuples are affected.\n * @param {number} params.size - The number of tuples to produce.\n */\n\nfunction Generate(params) {\n Transform.call(this, [], params);\n}\ninherits(Generate, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.ALL),\n gen = _.generator;\n let data = this.value,\n num = _.size - data.length,\n add,\n rem,\n t;\n\n if (num > 0) {\n // need more tuples, generate and add\n for (add = []; --num >= 0;) {\n add.push(t = ingest(gen(_)));\n data.push(t);\n }\n\n out.add = out.add.length ? out.materialize(out.ADD).add.concat(add) : add;\n } else {\n // need fewer tuples, remove\n rem = data.slice(0, -num);\n out.rem = out.rem.length ? out.materialize(out.REM).rem.concat(rem) : rem;\n data = data.slice(-num);\n }\n\n out.source = this.value = data;\n return out;\n }\n\n});\n\nconst Methods = {\n value: 'value',\n median: median,\n mean: mean,\n min: min,\n max: max\n};\nconst Empty = [];\n/**\n * Impute missing values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to impute.\n * @param {Array} [params.groupby] - An array of\n * accessors to determine series within which to perform imputation.\n * @param {function(object): *} params.key - An accessor for a key value.\n * Each key value should be unique within a group. New tuples will be\n * imputed for any key values that are not found within a group.\n * @param {Array<*>} [params.keyvals] - Optional array of required key\n * values. New tuples will be imputed for any key values that are not\n * found within a group. In addition, these values will be automatically\n * augmented with the key values observed in the input data.\n * @param {string} [method='value'] - The imputation method to use. One of\n * 'value', 'mean', 'median', 'max', 'min'.\n * @param {*} [value=0] - The constant value to use for imputation\n * when using method 'value'.\n */\n\nfunction Impute(params) {\n Transform.call(this, [], params);\n}\nImpute.Definition = {\n 'type': 'Impute',\n 'metadata': {\n 'changes': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'keyvals',\n 'array': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'value',\n 'values': ['value', 'mean', 'median', 'max', 'min']\n }, {\n 'name': 'value',\n 'default': 0\n }]\n};\n\nfunction getValue(_) {\n var m = _.method || Methods.value,\n v;\n\n if (Methods[m] == null) {\n error('Unrecognized imputation method: ' + m);\n } else if (m === Methods.value) {\n v = _.value !== undefined ? _.value : 0;\n return () => v;\n } else {\n return Methods[m];\n }\n}\n\nfunction getField(_) {\n const f = _.field;\n return t => t ? f(t) : NaN;\n}\n\ninherits(Impute, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n impute = getValue(_),\n field = getField(_),\n fName = accessorName(_.field),\n kName = accessorName(_.key),\n gNames = (_.groupby || []).map(accessorName),\n groups = partition(pulse.source, _.groupby, _.key, _.keyvals),\n curr = [],\n prev = this.value,\n m = groups.domain.length,\n group,\n value,\n gVals,\n kVal,\n g,\n i,\n j,\n l,\n n,\n t;\n\n for (g = 0, l = groups.length; g < l; ++g) {\n group = groups[g];\n gVals = group.values;\n value = NaN; // add tuples for missing values\n\n for (j = 0; j < m; ++j) {\n if (group[j] != null) continue;\n kVal = groups.domain[j];\n t = {\n _impute: true\n };\n\n for (i = 0, n = gVals.length; i < n; ++i) t[gNames[i]] = gVals[i];\n\n t[kName] = kVal;\n t[fName] = Number.isNaN(value) ? value = impute(group, field) : value;\n curr.push(ingest(t));\n }\n } // update pulse with imputed tuples\n\n\n if (curr.length) out.add = out.materialize(out.ADD).add.concat(curr);\n if (prev.length) out.rem = out.materialize(out.REM).rem.concat(prev);\n this.value = curr;\n return out;\n }\n\n});\n\nfunction partition(data, groupby, key, keyvals) {\n var get = f => f(t),\n groups = [],\n domain = keyvals ? keyvals.slice() : [],\n kMap = {},\n gMap = {},\n gVals,\n gKey,\n group,\n i,\n j,\n k,\n n,\n t;\n\n domain.forEach((k, i) => kMap[k] = i + 1);\n\n for (i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = key(t);\n j = kMap[k] || (kMap[k] = domain.push(k));\n gKey = (gVals = groupby ? groupby.map(get) : Empty) + '';\n\n if (!(group = gMap[gKey])) {\n group = gMap[gKey] = [];\n groups.push(group);\n group.values = gVals;\n }\n\n group[j - 1] = t;\n }\n\n groups.domain = domain;\n return groups;\n}\n\n/**\n * Extend input tuples with aggregate values.\n * Calcuates aggregate values and joins them with the input stream.\n * @constructor\n */\n\nfunction JoinAggregate(params) {\n Aggregate.call(this, params);\n}\nJoinAggregate.Definition = {\n 'type': 'JoinAggregate',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidAggregateOps\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(JoinAggregate, Aggregate, {\n transform(_, pulse) {\n const aggr = this,\n mod = _.modified();\n\n let cells; // process all input tuples to calculate aggregates\n\n if (aggr.value && (mod || pulse.modified(aggr._inputs, true))) {\n cells = aggr.value = mod ? aggr.init(_) : {};\n pulse.visit(pulse.SOURCE, t => aggr.add(t));\n } else {\n cells = aggr.value = aggr.value || this.init(_);\n pulse.visit(pulse.REM, t => aggr.rem(t));\n pulse.visit(pulse.ADD, t => aggr.add(t));\n } // update aggregation cells\n\n\n aggr.changes(); // write aggregate values to input tuples\n\n pulse.visit(pulse.SOURCE, t => {\n extend(t, cells[aggr.cellkey(t)].tuple);\n });\n return pulse.reflow(mod).modifies(this._outputs);\n },\n\n changes() {\n const adds = this._adds,\n mods = this._mods;\n let i, n;\n\n for (i = 0, n = this._alen; i < n; ++i) {\n this.celltuple(adds[i]);\n adds[i] = null; // for garbage collection\n }\n\n for (i = 0, n = this._mlen; i < n; ++i) {\n this.celltuple(mods[i]);\n mods[i] = null; // for garbage collection\n }\n\n this._alen = this._mlen = 0; // reset list of active cells\n }\n\n});\n\n/**\n * Compute kernel density estimates (KDE) for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {function(object): *} params.field - An accessor for the data field\n * to estimate.\n * @param {number} [params.bandwidth=0] - The KDE kernel bandwidth.\n * If zero or unspecified, the bandwidth is automatically determined.\n * @param {boolean} [params.counts=false] - A boolean flag indicating if the\n * output values should be probability estimates (false, default) or\n * smoothed counts (true).\n * @param {string} [params.cumulative=false] - A boolean flag indicating if a\n * density (false) or cumulative distribution (true) should be generated.\n * @param {Array} [params.extent] - The domain extent over which to\n * plot the density. If unspecified, the [min, max] data extent is used.\n * @param {string} [params.resolve='independent'] - Indicates how parameters for\n * multiple densities should be resolved. If \"independent\" (the default), each\n * density may have its own domain extent and dynamic number of curve sample\n * steps. If \"shared\", the KDE transform will ensure that all densities are\n * defined over a shared domain and curve steps, enabling stacking.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\n\nfunction KDE(params) {\n Transform.call(this, null, params);\n}\nKDE.Definition = {\n 'type': 'KDE',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'cumulative',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'counts',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'steps',\n 'type': 'number'\n }, {\n 'name': 'minsteps',\n 'type': 'number',\n 'default': 25\n }, {\n 'name': 'maxsteps',\n 'type': 'number',\n 'default': 200\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['value', 'density']\n }]\n};\ninherits(KDE, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(source, _.groupby, _.field),\n names = (_.groupby || []).map(accessorName),\n bandwidth = _.bandwidth,\n method = _.cumulative ? 'cdf' : 'pdf',\n as = _.as || ['value', 'density'],\n values = [];\n let domain = _.extent,\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200;\n\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n\n if (_.resolve === 'shared') {\n if (!domain) domain = extent(source, _.field);\n minsteps = maxsteps = _.steps || maxsteps;\n }\n\n groups.forEach(g => {\n const density = randomKDE(g, bandwidth)[method],\n scale = _.counts ? g.length : 1,\n local = domain || extent(g);\n sampleCurve(density, local, minsteps, maxsteps).forEach(v => {\n const t = {};\n\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n\n t[as[0]] = v[0];\n t[as[1]] = v[1] * scale;\n values.push(ingest(t));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n\n return out;\n }\n\n});\n\n/**\n * Generates a key function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - The field name(s) for the key function.\n * @param {boolean} params.flat - A boolean flag indicating if the field names\n * should be treated as flat property names, side-stepping nested field\n * lookups normally indicated by dot or bracket notation.\n */\n\nfunction Key(params) {\n Operator.call(this, null, update$2, params);\n}\ninherits(Key, Operator);\n\nfunction update$2(_) {\n return this.value && !_.modified() ? this.value : key(_.fields, _.flat);\n}\n\n/**\n * Load and parse data from an external source. Marshalls parameter\n * values and then invokes the Dataflow request method.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.url - The URL to load from.\n * @param {object} params.format - The data format options.\n */\n\nfunction Load(params) {\n Transform.call(this, [], params);\n this._pending = null;\n}\ninherits(Load, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow;\n\n if (this._pending) {\n // update state and return pulse\n return output(this, pulse, this._pending);\n }\n\n if (stop(_)) return pulse.StopPropagation;\n\n if (_.values) {\n // parse and ingest values, return output pulse\n return output(this, pulse, df.parse(_.values, _.format));\n } else if (_.async) {\n // return promise for non-blocking async loading\n const p = df.request(_.url, _.format).then(res => {\n this._pending = array(res.data);\n return df => df.touch(this);\n });\n return {\n async: p\n };\n } else {\n // return promise for synchronous loading\n return df.request(_.url, _.format).then(res => output(this, pulse, array(res.data)));\n }\n }\n\n});\n\nfunction stop(_) {\n return _.modified('async') && !(_.modified('values') || _.modified('url') || _.modified('format'));\n}\n\nfunction output(op, pulse, data) {\n data.forEach(ingest);\n const out = pulse.fork(pulse.NO_FIELDS & pulse.NO_SOURCE);\n out.rem = op.value;\n op.value = out.source = out.add = data;\n op._pending = null;\n if (out.rem.length) out.clean(true);\n return out;\n}\n\n/**\n * Extend tuples by joining them with values from a lookup table.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Map} params.index - The lookup table map.\n * @param {Array} params.as - Output field names for each lookup value.\n * @param {*} [params.default] - A default value to use if lookup fails.\n */\n\nfunction Lookup(params) {\n Transform.call(this, {}, params);\n}\nLookup.Definition = {\n 'type': 'Lookup',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'index',\n 'type': 'index',\n 'params': [{\n 'name': 'from',\n 'type': 'data',\n 'required': true\n }, {\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }]\n }, {\n 'name': 'values',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }, {\n 'name': 'default',\n 'default': null\n }]\n};\ninherits(Lookup, Transform, {\n transform(_, pulse) {\n const keys = _.fields,\n index = _.index,\n values = _.values,\n defaultValue = _.default == null ? null : _.default,\n reset = _.modified(),\n n = keys.length;\n\n let flag = reset ? pulse.SOURCE : pulse.ADD,\n out = pulse,\n as = _.as,\n set,\n m,\n mods;\n\n if (values) {\n m = values.length;\n\n if (n > 1 && !as) {\n error('Multi-field lookup requires explicit \"as\" parameter.');\n }\n\n if (as && as.length !== n * m) {\n error('The \"as\" parameter has too few output field names.');\n }\n\n as = as || values.map(accessorName);\n\n set = function (t) {\n for (var i = 0, k = 0, j, v; i < n; ++i) {\n v = index.get(keys[i](t));\n if (v == null) for (j = 0; j < m; ++j, ++k) t[as[k]] = defaultValue;else for (j = 0; j < m; ++j, ++k) t[as[k]] = values[j](v);\n }\n };\n } else {\n if (!as) {\n error('Missing output field names.');\n }\n\n set = function (t) {\n for (var i = 0, v; i < n; ++i) {\n v = index.get(keys[i](t));\n t[as[i]] = v == null ? defaultValue : v;\n }\n };\n }\n\n if (reset) {\n out = pulse.reflow(true);\n } else {\n mods = keys.some(k => pulse.modified(k.fields));\n flag |= mods ? pulse.MOD : 0;\n }\n\n pulse.visit(flag, set);\n return out.modifies(as);\n }\n\n});\n\n/**\n * Computes global min/max extents over a collection of extents.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array>} params.extents - The input extents.\n */\n\nfunction MultiExtent(params) {\n Operator.call(this, null, update$1, params);\n}\ninherits(MultiExtent, Operator);\n\nfunction update$1(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n\n const ext = _.extents,\n n = ext.length;\n let min = +Infinity,\n max = -Infinity,\n i,\n e;\n\n for (i = 0; i < n; ++i) {\n e = ext[i];\n if (e[0] < min) min = e[0];\n if (e[1] > max) max = e[1];\n }\n\n return [min, max];\n}\n\n/**\n * Merge a collection of value arrays.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array>} params.values - The input value arrrays.\n */\n\nfunction MultiValues(params) {\n Operator.call(this, null, update, params);\n}\ninherits(MultiValues, Operator);\n\nfunction update(_) {\n return this.value && !_.modified() ? this.value : _.values.reduce((data, _) => data.concat(_), []);\n}\n\n/**\n * Operator whose value is simply its parameter hash. This operator is\n * useful for enabling reactive updates to values of nested objects.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction Params(params) {\n Transform.call(this, null, params);\n}\ninherits(Params, Transform, {\n transform(_, pulse) {\n this.modified(_.modified());\n this.value = _;\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); // do not pass tuples\n }\n\n});\n\n/**\n * Aggregate and pivot selected field values to become new fields.\n * This operator is useful to construction cross-tabulations.\n * @constructor\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby. These fields act just like groupby fields of an Aggregate transform.\n * @param {function(object): *} params.field - The field to pivot on. The unique\n * values of this field become new field names in the output stream.\n * @param {function(object): *} params.value - The field to populate pivoted fields.\n * The aggregate values of this field become the values of the new pivoted fields.\n * @param {string} [params.op] - The aggregation operation for the value field,\n * applied per cell in the output stream. The default is \"sum\".\n * @param {number} [params.limit] - An optional parameter indicating the maximum\n * number of pivoted fields to generate. The pivoted field names are sorted in\n * ascending order prior to enforcing the limit.\n */\n\nfunction Pivot(params) {\n Aggregate.call(this, params);\n}\nPivot.Definition = {\n 'type': 'Pivot',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'value',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'op',\n 'type': 'enum',\n 'values': ValidAggregateOps,\n 'default': 'sum'\n }, {\n 'name': 'limit',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(Pivot, Aggregate, {\n _transform: Aggregate.prototype.transform,\n\n transform(_, pulse) {\n return this._transform(aggregateParams(_, pulse), pulse);\n }\n\n}); // Shoehorn a pivot transform into an aggregate transform!\n// First collect all unique pivot field values.\n// Then generate aggregate fields for each output pivot field.\n\nfunction aggregateParams(_, pulse) {\n const key = _.field,\n value = _.value,\n op = (_.op === 'count' ? '__count__' : _.op) || 'sum',\n fields = accessorFields(key).concat(accessorFields(value)),\n keys = pivotKeys(key, _.limit || 0, pulse); // if data stream content changes, pivot fields may change\n // flag parameter modification to ensure re-initialization\n\n if (pulse.changed()) _.set('__pivot__', null, null, true);\n return {\n key: _.key,\n groupby: _.groupby,\n ops: keys.map(() => op),\n fields: keys.map(k => get(k, key, value, fields)),\n as: keys.map(k => k + ''),\n modified: _.modified.bind(_)\n };\n} // Generate aggregate field accessor.\n// Output NaN for non-existent values; aggregator will ignore!\n\n\nfunction get(k, key, value, fields) {\n return accessor(d => key(d) === k ? value(d) : NaN, fields, k + '');\n} // Collect (and optionally limit) all unique pivot values.\n\n\nfunction pivotKeys(key, limit, pulse) {\n const map = {},\n list = [];\n pulse.visit(pulse.SOURCE, t => {\n const k = key(t);\n\n if (!map[k]) {\n map[k] = 1;\n list.push(k);\n }\n });\n list.sort(ascending);\n return limit ? list.slice(0, limit) : list;\n}\n\n/**\n * Partitions pre-faceted data into tuple subflows.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): Array} params.field - The field\n * accessor for an array of subflow tuple objects.\n */\n\nfunction PreFacet(params) {\n Facet.call(this, params);\n}\ninherits(PreFacet, Facet, {\n transform(_, pulse) {\n const flow = _.subflow,\n field = _.field,\n subflow = t => this.subflow(tupleid(t), flow, pulse, t);\n\n if (_.modified('field') || field && pulse.modified(accessorFields(field))) {\n error('PreFacet does not support field modification.');\n }\n\n this.initTargets(); // reset list of active subflows\n\n if (field) {\n pulse.visit(pulse.MOD, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.mod(_));\n });\n pulse.visit(pulse.ADD, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.add(ingest(_)));\n });\n pulse.visit(pulse.REM, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.rem(_));\n });\n } else {\n pulse.visit(pulse.MOD, t => subflow(t).mod(t));\n pulse.visit(pulse.ADD, t => subflow(t).add(t));\n pulse.visit(pulse.REM, t => subflow(t).rem(t));\n }\n\n if (pulse.clean()) {\n pulse.runAfter(() => this.clean());\n }\n\n return pulse;\n }\n\n});\n\n/**\n * Performs a relational projection, copying selected fields from source\n * tuples to a new set of derived tuples.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.as] - Output field names for each projected\n * field. Any unspecified fields will use the field name provided by\n * the field accessor.\n */\n\nfunction Project(params) {\n Transform.call(this, null, params);\n}\nProject.Definition = {\n 'type': 'Project',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }]\n};\ninherits(Project, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(_.fields, _.as || []),\n derive = fields ? (s, t) => project(s, t, fields, as) : rederive;\n let lut;\n\n if (this.value) {\n lut = this.value;\n } else {\n pulse = pulse.addAll();\n lut = this.value = {};\n }\n\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n pulse.visit(pulse.ADD, t => {\n const dt = derive(t, ingest({}));\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n pulse.visit(pulse.MOD, t => {\n out.mod.push(derive(t, lut[tupleid(t)]));\n });\n return out;\n }\n\n});\n\nfunction project(s, t, fields, as) {\n for (let i = 0, n = fields.length; i < n; ++i) {\n t[as[i]] = fields[i](s);\n }\n\n return t;\n}\n\n/**\n * Proxy the value of another operator as a pure signal value.\n * Ensures no tuples are propagated.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {*} params.value - The value to proxy, becomes the value of this operator.\n */\n\nfunction Proxy(params) {\n Transform.call(this, null, params);\n}\ninherits(Proxy, Transform, {\n transform(_, pulse) {\n this.value = _.value;\n return _.modified('value') ? pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS) : pulse.StopPropagation;\n }\n\n});\n\n/**\n * Generates sample quantile values from an input data stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the data field\n * over which to calculate quantile values.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {Array} [params.probs] - An array of probabilities in\n * the range (0, 1) for which to compute quantile values. If not specified,\n * the *step* parameter will be used.\n * @param {Array} [params.step=0.01] - A probability step size for\n * sampling quantile values. All values from one-half the step size up to\n * 1 (exclusive) will be sampled. This parameter is only used if the\n * *quantiles* parameter is not provided.\n */\n\nfunction Quantile(params) {\n Transform.call(this, null, params);\n}\nQuantile.Definition = {\n 'type': 'Quantile',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'probs',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 0.01\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['prob', 'value']\n }]\n};\nconst EPSILON = 1e-14;\ninherits(Quantile, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n as = _.as || ['prob', 'value'];\n\n if (this.value && !_.modified() && !pulse.changed()) {\n out.source = this.value;\n return out;\n }\n\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(source, _.groupby, _.field),\n names = (_.groupby || []).map(accessorName),\n values = [],\n step = _.step || 0.01,\n p = _.probs || range(step / 2, 1 - EPSILON, step),\n n = p.length;\n groups.forEach(g => {\n const q = quantiles(g, p);\n\n for (let i = 0; i < n; ++i) {\n const t = {};\n\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n\n t[as[0]] = p[i];\n t[as[1]] = q[i];\n values.push(ingest(t));\n }\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n return out;\n }\n\n});\n\n/**\n * Relays a data stream between data processing pipelines.\n * If the derive parameter is set, this transform will create derived\n * copies of observed tuples. This provides derived data streams in which\n * modifications to the tuples do not pollute an upstream data source.\n * @param {object} params - The parameters for this operator.\n * @param {number} [params.derive=false] - Boolean flag indicating if\n * the transform should make derived copies of incoming tuples.\n * @constructor\n */\n\nfunction Relay(params) {\n Transform.call(this, null, params);\n}\ninherits(Relay, Transform, {\n transform(_, pulse) {\n let out, lut;\n\n if (this.value) {\n lut = this.value;\n } else {\n out = pulse = pulse.addAll();\n lut = this.value = {};\n }\n\n if (_.derive) {\n out = pulse.fork(pulse.NO_SOURCE);\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n pulse.visit(pulse.ADD, t => {\n const dt = derive(t);\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n pulse.visit(pulse.MOD, t => {\n const dt = lut[tupleid(t)];\n\n for (const k in t) {\n dt[k] = t[k]; // down stream writes may overwrite re-derived tuples\n // conservatively mark all source fields as modified\n\n out.modifies(k);\n }\n\n out.mod.push(dt);\n });\n }\n\n return out;\n }\n\n});\n\n/**\n * Samples tuples passing through this operator.\n * Uses reservoir sampling to maintain a representative sample.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {number} [params.size=1000] - The maximum number of samples.\n */\n\nfunction Sample(params) {\n Transform.call(this, [], params);\n this.count = 0;\n}\nSample.Definition = {\n 'type': 'Sample',\n 'metadata': {},\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'default': 1000\n }]\n};\ninherits(Sample, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n mod = _.modified('size'),\n num = _.size,\n map = this.value.reduce((m, t) => (m[tupleid(t)] = 1, m), {});\n\n let res = this.value,\n cnt = this.count,\n cap = 0; // sample reservoir update function\n\n function update(t) {\n let p, idx;\n\n if (res.length < num) {\n res.push(t);\n } else {\n idx = ~~((cnt + 1) * random());\n\n if (idx < res.length && idx >= cap) {\n p = res[idx];\n if (map[tupleid(p)]) out.rem.push(p); // eviction\n\n res[idx] = t;\n }\n }\n\n ++cnt;\n }\n\n if (pulse.rem.length) {\n // find all tuples that should be removed, add to output\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n\n if (map[id]) {\n map[id] = -1;\n out.rem.push(t);\n }\n\n --cnt;\n }); // filter removed tuples out of the sample reservoir\n\n res = res.filter(t => map[tupleid(t)] !== -1);\n }\n\n if ((pulse.rem.length || mod) && res.length < num && pulse.source) {\n // replenish sample if backing data source is available\n cap = cnt = res.length;\n pulse.visit(pulse.SOURCE, t => {\n // update, but skip previously sampled tuples\n if (!map[tupleid(t)]) update(t);\n });\n cap = -1;\n }\n\n if (mod && res.length > num) {\n const n = res.length - num;\n\n for (let i = 0; i < n; ++i) {\n map[tupleid(res[i])] = -1;\n out.rem.push(res[i]);\n }\n\n res = res.slice(n);\n }\n\n if (pulse.mod.length) {\n // propagate modified tuples in the sample reservoir\n pulse.visit(pulse.MOD, t => {\n if (map[tupleid(t)]) out.mod.push(t);\n });\n }\n\n if (pulse.add.length) {\n // update sample reservoir\n pulse.visit(pulse.ADD, update);\n }\n\n if (pulse.add.length || cap < 0) {\n // output newly added tuples\n out.add = res.filter(t => !map[tupleid(t)]);\n }\n\n this.count = cnt;\n this.value = out.source = res;\n return out;\n }\n\n});\n\n/**\n * Generates data tuples for a specified sequence range of numbers.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {number} params.start - The first number in the sequence.\n * @param {number} params.stop - The last number (exclusive) in the sequence.\n * @param {number} [params.step=1] - The step size between numbers in the sequence.\n */\n\nfunction Sequence(params) {\n Transform.call(this, null, params);\n}\nSequence.Definition = {\n 'type': 'Sequence',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'start',\n 'type': 'number',\n 'required': true\n }, {\n 'name': 'stop',\n 'type': 'number',\n 'required': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'data'\n }]\n};\ninherits(Sequence, Transform, {\n transform(_, pulse) {\n if (this.value && !_.modified()) return;\n const out = pulse.materialize().fork(pulse.MOD),\n as = _.as || 'data';\n out.rem = this.value ? pulse.rem.concat(this.value) : pulse.rem;\n this.value = range(_.start, _.stop, _.step || 1).map(v => {\n const t = {};\n t[as] = v;\n return ingest(t);\n });\n out.add = pulse.add.concat(this.value);\n return out;\n }\n\n});\n\n/**\n * Propagates a new pulse without any tuples so long as the input\n * pulse contains some added, removed or modified tuples.\n * @param {object} params - The parameters for this operator.\n * @constructor\n */\n\nfunction Sieve(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\ninherits(Sieve, Transform, {\n transform(_, pulse) {\n this.value = pulse.source;\n return pulse.changed() ? pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS) : pulse.StopPropagation;\n }\n\n});\n\n/**\n * Discretize dates to specific time units.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The data field containing date/time values.\n */\n\nfunction TimeUnit(params) {\n Transform.call(this, null, params);\n}\nconst OUTPUT = ['unit0', 'unit1'];\nTimeUnit.Definition = {\n 'type': 'TimeUnit',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'interval',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'units',\n 'type': 'enum',\n 'values': TIME_UNITS,\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'maxbins',\n 'type': 'number',\n 'default': 40\n }, {\n 'name': 'extent',\n 'type': 'date',\n 'array': true\n }, {\n 'name': 'timezone',\n 'type': 'enum',\n 'default': 'local',\n 'values': ['local', 'utc']\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': OUTPUT\n }]\n};\ninherits(TimeUnit, Transform, {\n transform(_, pulse) {\n const field = _.field,\n band = _.interval !== false,\n utc = _.timezone === 'utc',\n floor = this._floor(_, pulse),\n offset = (utc ? utcInterval : timeInterval)(floor.unit).offset,\n as = _.as || OUTPUT,\n u0 = as[0],\n u1 = as[1],\n step = floor.step;\n\n let min = floor.start || Infinity,\n max = floor.stop || -Infinity,\n flag = pulse.ADD;\n\n if (_.modified() || pulse.modified(accessorFields(field))) {\n pulse = pulse.reflow(true);\n flag = pulse.SOURCE;\n min = Infinity;\n max = -Infinity;\n }\n\n pulse.visit(flag, t => {\n const v = field(t);\n let a, b;\n\n if (v == null) {\n t[u0] = null;\n if (band) t[u1] = null;\n } else {\n t[u0] = a = b = floor(v);\n if (band) t[u1] = b = offset(a, step);\n if (a < min) min = a;\n if (b > max) max = b;\n }\n });\n floor.start = min;\n floor.stop = max;\n return pulse.modifies(band ? as : u0);\n },\n\n _floor(_, pulse) {\n const utc = _.timezone === 'utc'; // get parameters\n\n const {\n units,\n step\n } = _.units ? {\n units: _.units,\n step: _.step || 1\n } : timeBin({\n extent: _.extent || extent(pulse.materialize(pulse.SOURCE).source, _.field),\n maxbins: _.maxbins\n }); // check / standardize time units\n\n const tunits = timeUnits(units),\n prev = this.value || {},\n floor = (utc ? utcFloor : timeFloor)(tunits, step);\n floor.unit = peek(tunits);\n floor.units = tunits;\n floor.step = step;\n floor.start = prev.start;\n floor.stop = prev.stop;\n return this.value = floor;\n }\n\n});\n\n/**\n * An index that maps from unique, string-coerced, field values to tuples.\n * Assumes that the field serves as a unique key with no duplicate values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field accessor to index.\n */\n\nfunction TupleIndex(params) {\n Transform.call(this, fastmap(), params);\n}\ninherits(TupleIndex, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow,\n field = _.field,\n index = this.value,\n set = t => index.set(field(t), t);\n\n let mod = true;\n\n if (_.modified('field') || pulse.modified(field.fields)) {\n index.clear();\n pulse.visit(pulse.SOURCE, set);\n } else if (pulse.changed()) {\n pulse.visit(pulse.REM, t => index.delete(field(t)));\n pulse.visit(pulse.ADD, set);\n } else {\n mod = false;\n }\n\n this.modified(mod);\n if (index.empty > df.cleanThreshold) df.runAfter(index.clean);\n return pulse.fork();\n }\n\n});\n\n/**\n * Extracts an array of values. Assumes the source data has already been\n * reduced as needed (e.g., by an upstream Aggregate transform).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The domain field to extract.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting the values. The comparator will be\n * applied to backing tuples prior to value extraction.\n */\n\nfunction Values(params) {\n Transform.call(this, null, params);\n}\ninherits(Values, Transform, {\n transform(_, pulse) {\n const run = !this.value || _.modified('field') || _.modified('sort') || pulse.changed() || _.sort && pulse.modified(_.sort.fields);\n\n if (run) {\n this.value = (_.sort ? pulse.source.slice().sort(stableCompare(_.sort)) : pulse.source).map(_.field);\n }\n }\n\n});\n\nfunction WindowOp(op, field, param, as) {\n const fn = WindowOps[op](field, param);\n return {\n init: fn.init || zero,\n update: function (w, t) {\n t[as] = fn.next(w);\n }\n };\n}\nconst WindowOps = {\n row_number: function () {\n return {\n next: w => w.index + 1\n };\n },\n rank: function () {\n let rank;\n return {\n init: () => rank = 1,\n next: w => {\n const i = w.index,\n data = w.data;\n return i && w.compare(data[i - 1], data[i]) ? rank = i + 1 : rank;\n }\n };\n },\n dense_rank: function () {\n let drank;\n return {\n init: () => drank = 1,\n next: w => {\n const i = w.index,\n d = w.data;\n return i && w.compare(d[i - 1], d[i]) ? ++drank : drank;\n }\n };\n },\n percent_rank: function () {\n const rank = WindowOps.rank(),\n next = rank.next;\n return {\n init: rank.init,\n next: w => (next(w) - 1) / (w.data.length - 1)\n };\n },\n cume_dist: function () {\n let cume;\n return {\n init: () => cume = 0,\n next: w => {\n const d = w.data,\n c = w.compare;\n let i = w.index;\n\n if (cume < i) {\n while (i + 1 < d.length && !c(d[i], d[i + 1])) ++i;\n\n cume = i;\n }\n\n return (1 + cume) / d.length;\n }\n };\n },\n ntile: function (field, num) {\n num = +num;\n if (!(num > 0)) error('ntile num must be greater than zero.');\n const cume = WindowOps.cume_dist(),\n next = cume.next;\n return {\n init: cume.init,\n next: w => Math.ceil(num * next(w))\n };\n },\n lag: function (field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n const i = w.index - offset;\n return i >= 0 ? field(w.data[i]) : null;\n }\n };\n },\n lead: function (field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n const i = w.index + offset,\n d = w.data;\n return i < d.length ? field(d[i]) : null;\n }\n };\n },\n first_value: function (field) {\n return {\n next: w => field(w.data[w.i0])\n };\n },\n last_value: function (field) {\n return {\n next: w => field(w.data[w.i1 - 1])\n };\n },\n nth_value: function (field, nth) {\n nth = +nth;\n if (!(nth > 0)) error('nth_value nth must be greater than zero.');\n return {\n next: w => {\n const i = w.i0 + (nth - 1);\n return i < w.i1 ? field(w.data[i]) : null;\n }\n };\n },\n prev_value: function (field) {\n let prev;\n return {\n init: () => prev = null,\n next: w => {\n const v = field(w.data[w.index]);\n return v != null ? prev = v : prev;\n }\n };\n },\n next_value: function (field) {\n let v, i;\n return {\n init: () => (v = null, i = -1),\n next: w => {\n const d = w.data;\n return w.index <= i ? v : (i = find(field, d, w.index)) < 0 ? (i = d.length, v = null) : v = field(d[i]);\n }\n };\n }\n};\n\nfunction find(field, data, index) {\n for (let n = data.length; index < n; ++index) {\n const v = field(data[index]);\n if (v != null) return index;\n }\n\n return -1;\n}\n\nconst ValidWindowOps = Object.keys(WindowOps);\n\nfunction WindowState(_) {\n const ops = array(_.ops),\n fields = array(_.fields),\n params = array(_.params),\n as = array(_.as),\n outputs = this.outputs = [],\n windows = this.windows = [],\n inputs = {},\n map = {},\n counts = [],\n measures = [];\n let countOnly = true;\n\n function visitInputs(f) {\n array(accessorFields(f)).forEach(_ => inputs[_] = 1);\n }\n\n visitInputs(_.sort);\n ops.forEach((op, i) => {\n const field = fields[i],\n mname = accessorName(field),\n name = measureName(op, mname, as[i]);\n visitInputs(field);\n outputs.push(name); // Window operation\n\n if (hasOwnProperty(WindowOps, op)) {\n windows.push(WindowOp(op, fields[i], params[i], name));\n } // Aggregate operation\n else {\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n\n if (op === 'count') {\n counts.push(name);\n return;\n }\n\n countOnly = false;\n let m = map[mname];\n\n if (!m) {\n m = map[mname] = [];\n m.field = field;\n measures.push(m);\n }\n\n m.push(createMeasure(op, name));\n }\n });\n\n if (counts.length || measures.length) {\n this.cell = cell(measures, counts, countOnly);\n }\n\n this.inputs = Object.keys(inputs);\n}\nconst prototype = WindowState.prototype;\n\nprototype.init = function () {\n this.windows.forEach(_ => _.init());\n if (this.cell) this.cell.init();\n};\n\nprototype.update = function (w, t) {\n const cell = this.cell,\n wind = this.windows,\n data = w.data,\n m = wind && wind.length;\n let j;\n\n if (cell) {\n for (j = w.p0; j < w.i0; ++j) cell.rem(data[j]);\n\n for (j = w.p1; j < w.i1; ++j) cell.add(data[j]);\n\n cell.set(t);\n }\n\n for (j = 0; j < m; ++j) wind[j].update(w, t);\n};\n\nfunction cell(measures, counts, countOnly) {\n measures = measures.map(m => compileMeasures(m, m.field));\n const cell = {\n num: 0,\n agg: null,\n store: false,\n count: counts\n };\n\n if (!countOnly) {\n var n = measures.length,\n a = cell.agg = Array(n),\n i = 0;\n\n for (; i < n; ++i) a[i] = new measures[i](cell);\n }\n\n if (cell.store) {\n var store = cell.data = new TupleStore();\n }\n\n cell.add = function (t) {\n cell.num += 1;\n if (countOnly) return;\n if (store) store.add(t);\n\n for (let i = 0; i < n; ++i) {\n a[i].add(a[i].get(t), t);\n }\n };\n\n cell.rem = function (t) {\n cell.num -= 1;\n if (countOnly) return;\n if (store) store.rem(t);\n\n for (let i = 0; i < n; ++i) {\n a[i].rem(a[i].get(t), t);\n }\n };\n\n cell.set = function (t) {\n let i, n; // consolidate stored values\n\n if (store) store.values(); // update tuple properties\n\n for (i = 0, n = counts.length; i < n; ++i) t[counts[i]] = cell.num;\n\n if (!countOnly) for (i = 0, n = a.length; i < n; ++i) a[i].set(t);\n };\n\n cell.init = function () {\n cell.num = 0;\n if (store) store.reset();\n\n for (let i = 0; i < n; ++i) a[i].init();\n };\n\n return cell;\n}\n\n/**\n * Perform window calculations and write results to the input stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator function for sorting tuples within a window.\n * @param {Array} [params.groupby] - An array of accessors by which to partition tuples into separate windows.\n * @param {Array} params.ops - An array of strings indicating window operations to perform.\n * @param {Array} [params.fields] - An array of accessors\n * for data fields to use as inputs to window operations.\n * @param {Array<*>} [params.params] - An array of parameter values for window operations.\n * @param {Array} [params.as] - An array of output field names for window operations.\n * @param {Array} [params.frame] - Window frame definition as two-element array.\n * @param {boolean} [params.ignorePeers=false] - If true, base window frame boundaries on row\n * number alone, ignoring peers with identical sort values. If false (default),\n * the window boundaries will be adjusted to include peer values.\n */\n\nfunction Window(params) {\n Transform.call(this, {}, params);\n this._mlen = 0;\n this._mods = [];\n}\nWindow.Definition = {\n 'type': 'Window',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidWindowOps.concat(ValidAggregateOps)\n }, {\n 'name': 'params',\n 'type': 'number',\n 'null': true,\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'frame',\n 'type': 'number',\n 'null': true,\n 'array': true,\n 'length': 2,\n 'default': [null, 0]\n }, {\n 'name': 'ignorePeers',\n 'type': 'boolean',\n 'default': false\n }]\n};\ninherits(Window, Transform, {\n transform(_, pulse) {\n this.stamp = pulse.stamp;\n\n const mod = _.modified(),\n cmp = stableCompare(_.sort),\n key = groupkey(_.groupby),\n group = t => this.group(key(t)); // initialize window state\n\n\n let state = this.state;\n\n if (!state || mod) {\n state = this.state = new WindowState(_);\n } // partition input tuples\n\n\n if (mod || pulse.modified(state.inputs)) {\n this.value = {};\n pulse.visit(pulse.SOURCE, t => group(t).add(t));\n } else {\n pulse.visit(pulse.REM, t => group(t).remove(t));\n pulse.visit(pulse.ADD, t => group(t).add(t));\n } // perform window calculations for each modified partition\n\n\n for (let i = 0, n = this._mlen; i < n; ++i) {\n processPartition(this._mods[i], state, cmp, _);\n }\n\n this._mlen = 0;\n this._mods = []; // TODO don't reflow everything?\n\n return pulse.reflow(mod).modifies(state.outputs);\n },\n\n group(key) {\n let group = this.value[key];\n\n if (!group) {\n group = this.value[key] = SortedList(tupleid);\n group.stamp = -1;\n }\n\n if (group.stamp < this.stamp) {\n group.stamp = this.stamp;\n this._mods[this._mlen++] = group;\n }\n\n return group;\n }\n\n});\n\nfunction processPartition(list, state, cmp, _) {\n const sort = _.sort,\n range = sort && !_.ignorePeers,\n frame = _.frame || [null, 0],\n data = list.data(cmp),\n // use cmp for stable sort\n n = data.length,\n b = range ? bisector(sort) : null,\n w = {\n i0: 0,\n i1: 0,\n p0: 0,\n p1: 0,\n index: 0,\n data: data,\n compare: sort || constant(-1)\n };\n state.init();\n\n for (let i = 0; i < n; ++i) {\n setWindow(w, frame, i, n);\n if (range) adjustRange(w, b);\n state.update(w, data[i]);\n }\n}\n\nfunction setWindow(w, f, i, n) {\n w.p0 = w.i0;\n w.p1 = w.i1;\n w.i0 = f[0] == null ? 0 : Math.max(0, i - Math.abs(f[0]));\n w.i1 = f[1] == null ? n : Math.min(n, i + Math.abs(f[1]) + 1);\n w.index = i;\n} // if frame type is 'range', adjust window for peer values\n\n\nfunction adjustRange(w, bisect) {\n const r0 = w.i0,\n r1 = w.i1 - 1,\n c = w.compare,\n d = w.data,\n n = d.length - 1;\n if (r0 > 0 && !c(d[r0], d[r0 - 1])) w.i0 = bisect.left(d, d[r0]);\n if (r1 < n && !c(d[r1], d[r1 + 1])) w.i1 = bisect.right(d, d[r1]);\n}\n\nexport { Aggregate as aggregate, Bin as bin, Collect as collect, Compare as compare, CountPattern as countpattern, Cross as cross, Density as density, DotBin as dotbin, Expression as expression, Extent as extent, Facet as facet, Field as field, Filter as filter, Flatten as flatten, Fold as fold, Formula as formula, Generate as generate, Impute as impute, JoinAggregate as joinaggregate, KDE as kde, Key as key, Load as load, Lookup as lookup, MultiExtent as multiextent, MultiValues as multivalues, Params as params, Pivot as pivot, PreFacet as prefacet, Project as project, Proxy as proxy, Quantile as quantile, Relay as relay, Sample as sample, Sequence as sequence, Sieve as sieve, Subflow as subflow, TimeUnit as timeunit, TupleIndex as tupleindex, Values as values, Window as window };\n","export default function mean(values, valueof) {\n let count = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n }\n if (count) return sum / count;\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n var x1 = null,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import {pi, tau} from \"../math.js\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop.js\";\nimport {point} from \"./cardinal.js\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal.js\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed.js\";\nimport noop from \"../noop.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","function domCanvas(w, h) {\n if (typeof document !== 'undefined' && document.createElement) {\n const c = document.createElement('canvas');\n\n if (c && c.getContext) {\n c.width = w;\n c.height = h;\n return c;\n }\n }\n\n return null;\n}\nconst domImage = () => typeof Image !== 'undefined' ? Image : null;\n\nexport { domCanvas as canvas, domCanvas, domImage as image };\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new Map(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new Map();\n for (const value of _) {\n const key = value + \"\";\n if (index.has(key)) continue;\n index.set(key, domain.push(value));\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return hcl2lab(this).rgb();\n }\n}));\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n if (values === undefined) values = interpolate, interpolate = value;\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n","import {hue} from \"./color.js\";\n\nexport default function(a, b) {\n var i = hue(+a, +b);\n return function(t) {\n var x = i(t);\n return x - 360 * Math.floor(x / 360);\n };\n}\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n a = color(start.a, end.a),\n b = color(start.b, end.b),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport function loggish(transform) {\n var scale = transform(transformLog, transformExp),\n domain = scale.domain,\n base = 10,\n logs,\n pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.floor(i), j = Math.ceil(j);\n if (u > 0) for (; i <= j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i <= j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n if (z.length * 2 < n) z = ticks(u, v, n);\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n return scale;\n}\n\nexport default function log() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, log()).base(scale.base());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import {bisector, tickStep} from \"d3-array\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target),\n step;\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n return interval.every(step);\n }\n\n return interval;\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1]))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n s = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1, r2;\n return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n return scale;\n };\n}\n\nexport default function diverging() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, diverging());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","import { toNumber, peek, hasOwnProperty, toSet, array, constant, isNumber, span, isObject, isString, error, isArray } from 'vega-util';\nimport { bisectRight, range, bisect } from 'd3-array';\nimport * as $ from 'd3-scale';\nimport { scaleOrdinal, tickFormat as tickFormat$1 } from 'd3-scale';\nexport { scaleImplicit } from 'd3-scale';\nimport * as $$1 from 'd3-interpolate';\nimport { timeInterval, utcInterval } from 'vega-time';\n\nfunction bandSpace (count, paddingInner, paddingOuter) {\n const space = count - paddingInner + paddingOuter * 2;\n return count ? space > 0 ? space : 1 : 0;\n}\n\nconst Identity = 'identity';\nconst Linear = 'linear';\nconst Log = 'log';\nconst Pow = 'pow';\nconst Sqrt = 'sqrt';\nconst Symlog = 'symlog';\nconst Time = 'time';\nconst UTC = 'utc';\nconst Sequential = 'sequential';\nconst Diverging = 'diverging';\nconst Quantile = 'quantile';\nconst Quantize = 'quantize';\nconst Threshold = 'threshold';\nconst Ordinal = 'ordinal';\nconst Point = 'point';\nconst Band = 'band';\nconst BinOrdinal = 'bin-ordinal'; // categories\n\nconst Continuous = 'continuous';\nconst Discrete = 'discrete';\nconst Discretizing = 'discretizing';\nconst Interpolating = 'interpolating';\nconst Temporal = 'temporal';\n\nfunction invertRange (scale) {\n return function (_) {\n let lo = _[0],\n hi = _[1],\n t;\n\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n\n return [scale.invert(lo), scale.invert(hi)];\n };\n}\n\nfunction invertRangeExtent (scale) {\n return function (_) {\n const range = scale.range();\n let lo = _[0],\n hi = _[1],\n min = -1,\n max,\n t,\n i,\n n;\n\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n\n for (i = 0, n = range.length; i < n; ++i) {\n if (range[i] >= lo && range[i] <= hi) {\n if (min < 0) min = i;\n max = i;\n }\n }\n\n if (min < 0) return undefined;\n lo = scale.invertExtent(range[min]);\n hi = scale.invertExtent(range[max]);\n return [lo[0] === undefined ? lo[1] : lo[0], hi[1] === undefined ? hi[0] : hi[1]];\n };\n}\n\nfunction band() {\n const scale = scaleOrdinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range;\n let range$1 = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n delete scale.unknown;\n\n function rescale() {\n const n = domain().length,\n reverse = range$1[1] < range$1[0],\n stop = range$1[1 - reverse],\n space = bandSpace(n, paddingInner, paddingOuter);\n let start = range$1[reverse - 0];\n step = (stop - start) / (space || 1);\n\n if (round) {\n step = Math.floor(step);\n }\n\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n\n if (round) {\n start = Math.round(start);\n bandwidth = Math.round(bandwidth);\n }\n\n const values = range(n).map(i => start + step * i);\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function (_) {\n if (arguments.length) {\n domain(_);\n return rescale();\n } else {\n return domain();\n }\n };\n\n scale.range = function (_) {\n if (arguments.length) {\n range$1 = [+_[0], +_[1]];\n return rescale();\n } else {\n return range$1.slice();\n }\n };\n\n scale.rangeRound = function (_) {\n range$1 = [+_[0], +_[1]];\n round = true;\n return rescale();\n };\n\n scale.bandwidth = function () {\n return bandwidth;\n };\n\n scale.step = function () {\n return step;\n };\n\n scale.round = function (_) {\n if (arguments.length) {\n round = !!_;\n return rescale();\n } else {\n return round;\n }\n };\n\n scale.padding = function (_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n paddingInner = paddingOuter;\n return rescale();\n } else {\n return paddingInner;\n }\n };\n\n scale.paddingInner = function (_) {\n if (arguments.length) {\n paddingInner = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingInner;\n }\n };\n\n scale.paddingOuter = function (_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingOuter;\n }\n };\n\n scale.align = function (_) {\n if (arguments.length) {\n align = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return align;\n }\n };\n\n scale.invertRange = function (_) {\n // bail if range has null or undefined values\n if (_[0] == null || _[1] == null) return;\n const reverse = range$1[1] < range$1[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1;\n let lo = +_[0],\n hi = +_[1],\n a,\n b,\n t; // bail if either range endpoint is invalid\n\n if (lo !== lo || hi !== hi) return; // order range inputs, bail if outside of scale range\n\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n\n if (hi < values[0] || lo > range$1[1 - reverse]) return; // binary search to index into scale range\n\n a = Math.max(0, bisectRight(values, lo) - 1);\n b = lo === hi ? a : bisectRight(values, hi) - 1; // increment index a if lo is within padding gap\n\n if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) {\n // map + swap\n t = a;\n a = n - b;\n b = n - t;\n }\n\n return a > b ? undefined : domain().slice(a, b + 1);\n };\n\n scale.invert = function (_) {\n const value = scale.invertRange([_, _]);\n return value ? value[0] : value;\n };\n\n scale.copy = function () {\n return band().domain(domain()).range(range$1).round(round).paddingInner(paddingInner).paddingOuter(paddingOuter).align(align);\n };\n\n return rescale();\n}\n\nfunction pointish(scale) {\n const copy = scale.copy;\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n\n scale.copy = function () {\n return pointish(copy());\n };\n\n return scale;\n}\n\nfunction point() {\n return pointish(band().paddingInner(1));\n}\n\nvar map = Array.prototype.map;\nfunction numbers(_) {\n return map.call(_, toNumber);\n}\n\nconst slice = Array.prototype.slice;\n\nfunction scaleBinOrdinal() {\n let domain = [],\n range = [];\n\n function scale(x) {\n return x == null || x !== x ? undefined : range[(bisect(domain, x) - 1) % range.length];\n }\n\n scale.domain = function (_) {\n if (arguments.length) {\n domain = numbers(_);\n return scale;\n } else {\n return domain.slice();\n }\n };\n\n scale.range = function (_) {\n if (arguments.length) {\n range = slice.call(_);\n return scale;\n } else {\n return range.slice();\n }\n };\n\n scale.tickFormat = function (count, specifier) {\n return tickFormat$1(domain[0], peek(domain), count == null ? 10 : count, specifier);\n };\n\n scale.copy = function () {\n return scaleBinOrdinal().domain(scale.domain()).range(scale.range());\n };\n\n return scale;\n}\n\nconst scales = {};\n/**\n * Augment scales with their type and needed inverse methods.\n */\n\nfunction create(type, constructor, metadata) {\n const ctr = function scale() {\n const s = constructor();\n\n if (!s.invertRange) {\n s.invertRange = s.invert ? invertRange(s) : s.invertExtent ? invertRangeExtent(s) : undefined;\n }\n\n s.type = type;\n return s;\n };\n\n ctr.metadata = toSet(array(metadata));\n return ctr;\n}\n\nfunction scale(type, scale, metadata) {\n if (arguments.length > 1) {\n scales[type] = create(type, scale, metadata);\n return this;\n } else {\n return isValidScaleType(type) ? scales[type] : undefined;\n }\n} // identity scale\n\nscale(Identity, $.scaleIdentity); // continuous scales\n\nscale(Linear, $.scaleLinear, Continuous);\nscale(Log, $.scaleLog, [Continuous, Log]);\nscale(Pow, $.scalePow, Continuous);\nscale(Sqrt, $.scaleSqrt, Continuous);\nscale(Symlog, $.scaleSymlog, Continuous);\nscale(Time, $.scaleTime, [Continuous, Temporal]);\nscale(UTC, $.scaleUtc, [Continuous, Temporal]); // sequential scales\n\nscale(Sequential, $.scaleSequential, [Continuous, Interpolating]); // backwards compat\n\nscale(`${Sequential}-${Linear}`, $.scaleSequential, [Continuous, Interpolating]);\nscale(`${Sequential}-${Log}`, $.scaleSequentialLog, [Continuous, Interpolating, Log]);\nscale(`${Sequential}-${Pow}`, $.scaleSequentialPow, [Continuous, Interpolating]);\nscale(`${Sequential}-${Sqrt}`, $.scaleSequentialSqrt, [Continuous, Interpolating]);\nscale(`${Sequential}-${Symlog}`, $.scaleSequentialSymlog, [Continuous, Interpolating]); // diverging scales\n\nscale(`${Diverging}-${Linear}`, $.scaleDiverging, [Continuous, Interpolating]);\nscale(`${Diverging}-${Log}`, $.scaleDivergingLog, [Continuous, Interpolating, Log]);\nscale(`${Diverging}-${Pow}`, $.scaleDivergingPow, [Continuous, Interpolating]);\nscale(`${Diverging}-${Sqrt}`, $.scaleDivergingSqrt, [Continuous, Interpolating]);\nscale(`${Diverging}-${Symlog}`, $.scaleDivergingSymlog, [Continuous, Interpolating]); // discretizing scales\n\nscale(Quantile, $.scaleQuantile, [Discretizing, Quantile]);\nscale(Quantize, $.scaleQuantize, Discretizing);\nscale(Threshold, $.scaleThreshold, Discretizing); // discrete scales\n\nscale(BinOrdinal, scaleBinOrdinal, [Discrete, Discretizing]);\nscale(Ordinal, $.scaleOrdinal, Discrete);\nscale(Band, band, Discrete);\nscale(Point, point, Discrete);\nfunction isValidScaleType(type) {\n return hasOwnProperty(scales, type);\n}\n\nfunction hasType(key, type) {\n const s = scales[key];\n return s && s.metadata[type];\n}\n\nfunction isContinuous(key) {\n return hasType(key, Continuous);\n}\nfunction isDiscrete(key) {\n return hasType(key, Discrete);\n}\nfunction isDiscretizing(key) {\n return hasType(key, Discretizing);\n}\nfunction isLogarithmic(key) {\n return hasType(key, Log);\n}\nfunction isTemporal(key) {\n return hasType(key, Temporal);\n}\nfunction isInterpolating(key) {\n return hasType(key, Interpolating);\n}\nfunction isQuantile(key) {\n return hasType(key, Quantile);\n}\n\nconst scaleProps = ['clamp', 'base', 'constant', 'exponent'];\nfunction interpolateRange(interpolator, range) {\n const start = range[0],\n span = peek(range) - start;\n return function (i) {\n return interpolator(start + i * span);\n };\n}\nfunction interpolateColors(colors, type, gamma) {\n return $$1.piecewise(interpolate(type || 'rgb', gamma), colors);\n}\nfunction quantizeInterpolator(interpolator, count) {\n const samples = new Array(count),\n n = count + 1;\n\n for (let i = 0; i < count;) samples[i] = interpolator(++i / n);\n\n return samples;\n}\nfunction scaleCopy(scale) {\n const t = scale.type,\n s = scale.copy();\n s.type = t;\n return s;\n}\nfunction scaleFraction(scale$1, min, max) {\n const delta = max - min;\n let i, t, s;\n\n if (!delta || !Number.isFinite(delta)) {\n return constant(0.5);\n } else {\n i = (t = scale$1.type).indexOf('-');\n t = i < 0 ? t : t.slice(i + 1);\n s = scale(t)().domain([min, max]).range([0, 1]);\n scaleProps.forEach(m => scale$1[m] ? s[m](scale$1[m]()) : 0);\n return s;\n }\n}\nfunction interpolate(type, gamma) {\n const interp = $$1[method(type)];\n return gamma != null && interp && interp.gamma ? interp.gamma(gamma) : interp;\n}\n\nfunction method(type) {\n return 'interpolate' + type.toLowerCase().split('-').map(s => s[0].toUpperCase() + s.slice(1)).join('');\n}\n\nconst continuous = {\n blues: 'cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90',\n greens: 'd3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429',\n greys: 'e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e',\n oranges: 'fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303',\n purples: 'e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c',\n reds: 'fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13',\n blueGreen: 'd5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429',\n bluePurple: 'ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71',\n greenBlue: 'd3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1',\n orangeRed: 'fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403',\n purpleBlue: 'dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281',\n purpleBlueGreen: 'dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353',\n purpleRed: 'dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a',\n redPurple: 'fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174',\n yellowGreen: 'e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034',\n yellowOrangeBrown: 'feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204',\n yellowOrangeRed: 'fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225',\n blueOrange: '134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07',\n brownBlueGreen: '704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147',\n purpleGreen: '5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29',\n purpleOrange: '4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07',\n redBlue: '8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85',\n redGrey: '8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434',\n yellowGreenBlue: 'eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185',\n redYellowBlue: 'a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695',\n redYellowGreen: 'a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837',\n pinkYellowGreen: '8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419',\n spectral: '9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2',\n viridis: '440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725',\n magma: '0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf',\n inferno: '0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4',\n plasma: '0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921',\n cividis: '00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647',\n rainbow: '6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa',\n sinebow: 'ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040',\n turbo: '23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00',\n browns: 'eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632',\n tealBlues: 'bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985',\n teals: 'bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667',\n warmGreys: 'dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e',\n goldGreen: 'f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36',\n goldOrange: 'f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26',\n goldRed: 'f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e',\n lightGreyRed: 'efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b',\n lightGreyTeal: 'e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc',\n lightMulti: 'e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c',\n lightOrange: 'f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b',\n lightTealBlue: 'e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988',\n darkBlue: '3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff',\n darkGold: '3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff',\n darkGreen: '3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa',\n darkMulti: '3737371f5287197d8c29a86995ce3fffe800ffffff',\n darkRed: '3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c'\n};\nconst discrete = {\n category10: '1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf',\n category20: '1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5',\n category20b: '393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6',\n category20c: '3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9',\n tableau10: '4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac',\n tableau20: '4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5',\n accent: '7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666',\n dark2: '1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666',\n paired: 'a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928',\n pastel1: 'fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2',\n pastel2: 'b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc',\n set1: 'e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999',\n set2: '66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3',\n set3: '8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f'\n};\n\nfunction colors(palette) {\n const n = palette.length / 6 | 0,\n c = new Array(n);\n\n for (let i = 0; i < n;) {\n c[i] = '#' + palette.slice(i * 6, ++i * 6);\n }\n\n return c;\n}\n\nfunction apply(_, f) {\n for (const k in _) scheme(k, f(_[k]));\n}\n\nconst schemes = {};\napply(discrete, colors);\napply(continuous, _ => interpolateColors(colors(_)));\nfunction scheme(name, scheme) {\n name = name && name.toLowerCase();\n\n if (arguments.length > 1) {\n schemes[name] = scheme;\n return this;\n } else {\n return schemes[name];\n }\n}\n\nconst SymbolLegend = 'symbol';\nconst DiscreteLegend = 'discrete';\nconst GradientLegend = 'gradient';\n\nconst defaultFormatter = value => isArray(value) ? value.map(v => String(v)) : String(value);\n\nconst ascending = (a, b) => a[1] - b[1];\n\nconst descending = (a, b) => b[1] - a[1];\n/**\n * Determine the tick count or interval function.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} count - The desired tick count or interval specifier.\n * @param {number} minStep - The desired minimum step between tick values.\n * @return {*} - The tick count or interval function.\n */\n\n\nfunction tickCount(scale, count, minStep) {\n let step;\n\n if (isNumber(count)) {\n if (scale.bins) {\n count = Math.max(count, scale.bins.length);\n }\n\n if (minStep != null) {\n count = Math.min(count, Math.floor(span(scale.domain()) / minStep || 1));\n }\n }\n\n if (isObject(count)) {\n step = count.step;\n count = count.interval;\n }\n\n if (isString(count)) {\n count = scale.type === Time ? timeInterval(count) : scale.type == UTC ? utcInterval(count) : error('Only time and utc scales accept interval strings.');\n if (step) count = count.every(step);\n }\n\n return count;\n}\n/**\n * Filter a set of candidate tick values, ensuring that only tick values\n * that lie within the scale range are included.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {Array<*>} ticks - The candidate tick values.\n * @param {*} count - The tick count or interval function.\n * @return {Array<*>} - The filtered tick values.\n */\n\nfunction validTicks(scale, ticks, count) {\n let range = scale.range(),\n lo = range[0],\n hi = peek(range),\n cmp = ascending;\n\n if (lo > hi) {\n range = hi;\n hi = lo;\n lo = range;\n cmp = descending;\n }\n\n lo = Math.floor(lo);\n hi = Math.ceil(hi); // filter ticks to valid values within the range\n // additionally sort ticks in range order (#2579)\n\n ticks = ticks.map(v => [v, scale(v)]).filter(_ => lo <= _[1] && _[1] <= hi).sort(cmp).map(_ => _[0]);\n\n if (count > 0 && ticks.length > 1) {\n const endpoints = [ticks[0], peek(ticks)];\n\n while (ticks.length > count && ticks.length >= 3) {\n ticks = ticks.filter((_, i) => !(i % 2));\n }\n\n if (ticks.length < 3) {\n ticks = endpoints;\n }\n }\n\n return ticks;\n}\n/**\n * Generate tick values for the given scale and approximate tick count or\n * interval value. If the scale has a 'ticks' method, it will be used to\n * generate the ticks, with the count argument passed as a parameter. If the\n * scale lacks a 'ticks' method, the full scale domain will be returned.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} [count] - The approximate number of desired ticks.\n * @return {Array<*>} - The generated tick values.\n */\n\nfunction tickValues(scale, count) {\n return scale.bins ? validTicks(scale, scale.bins) : scale.ticks ? scale.ticks(count) : scale.domain();\n}\n/**\n * Generate a label format function for a scale. If the scale has a\n * 'tickFormat' method, it will be used to generate the formatter, with the\n * count and specifier arguments passed as parameters. If the scale lacks a\n * 'tickFormat' method, the returned formatter performs simple string coercion.\n * If the input scale is a logarithmic scale and the format specifier does not\n * indicate a desired decimal precision, a special variable precision formatter\n * that automatically trims trailing zeroes will be generated.\n * @param {Scale} scale - The scale for which to generate the label formatter.\n * @param {*} [count] - The approximate number of desired ticks.\n * @param {string} [specifier] - The format specifier. Must be a legal d3\n * specifier string (see https://github.com/d3/d3-format#formatSpecifier) or\n * time multi-format specifier object.\n * @return {function(*):string} - The generated label formatter.\n */\n\nfunction tickFormat(locale, scale, count, specifier, formatType, noSkip) {\n const type = scale.type;\n let format = defaultFormatter;\n\n if (type === Time || formatType === Time) {\n format = locale.timeFormat(specifier);\n } else if (type === UTC || formatType === UTC) {\n format = locale.utcFormat(specifier);\n } else if (isLogarithmic(type)) {\n const varfmt = locale.formatFloat(specifier);\n\n if (noSkip || scale.bins) {\n format = varfmt;\n } else {\n const test = tickLog(scale, count, false);\n\n format = _ => test(_) ? varfmt(_) : '';\n }\n } else if (scale.tickFormat) {\n // if d3 scale has tickFormat, it must be continuous\n const d = scale.domain();\n format = locale.formatSpan(d[0], d[d.length - 1], count, specifier);\n } else if (specifier) {\n format = locale.format(specifier);\n }\n\n return format;\n}\nfunction tickLog(scale, count, values) {\n const ticks = tickValues(scale, count),\n base = scale.base(),\n logb = Math.log(base),\n k = Math.max(1, base * count / ticks.length); // apply d3-scale's log format filter criteria\n\n const test = d => {\n let i = d / Math.pow(base, Math.round(Math.log(d) / logb));\n if (i * base < base - 0.5) i *= base;\n return i <= k;\n };\n\n return values ? ticks.filter(test) : test;\n}\n\nconst symbols = {\n [Quantile]: 'quantiles',\n [Quantize]: 'thresholds',\n [Threshold]: 'domain'\n};\nconst formats = {\n [Quantile]: 'quantiles',\n [Quantize]: 'domain'\n};\nfunction labelValues(scale, count) {\n return scale.bins ? binValues(scale.bins) : scale.type === Log ? tickLog(scale, count, true) : symbols[scale.type] ? thresholdValues(scale[symbols[scale.type]]()) : tickValues(scale, count);\n}\nfunction thresholdFormat(locale, scale, specifier) {\n const _ = scale[formats[scale.type]](),\n n = _.length;\n\n let d = n > 1 ? _[1] - _[0] : _[0],\n i;\n\n for (i = 1; i < n; ++i) {\n d = Math.min(d, _[i] - _[i - 1]);\n } // tickCount = 3 ticks times 10 for increased resolution\n\n\n return locale.formatSpan(0, d, 3 * 10, specifier);\n}\n\nfunction thresholdValues(thresholds) {\n const values = [-Infinity].concat(thresholds);\n values.max = +Infinity;\n return values;\n}\n\nfunction binValues(bins) {\n const values = bins.slice(0, -1);\n values.max = peek(bins);\n return values;\n}\n\nconst isDiscreteRange = scale => symbols[scale.type] || scale.bins;\n\nfunction labelFormat(locale, scale, count, type, specifier, formatType, noSkip) {\n const format = formats[scale.type] && formatType !== Time && formatType !== UTC ? thresholdFormat(locale, scale, specifier) : tickFormat(locale, scale, count, specifier, formatType, noSkip);\n return type === SymbolLegend && isDiscreteRange(scale) ? formatRange(format) : type === DiscreteLegend ? formatDiscrete(format) : formatPoint(format);\n}\n\nconst formatRange = format => (value, index, array) => {\n const limit = get(array[index + 1], get(array.max, +Infinity)),\n lo = formatValue(value, format),\n hi = formatValue(limit, format);\n return lo && hi ? lo + ' \\u2013 ' + hi : hi ? '< ' + hi : '\\u2265 ' + lo;\n};\n\nconst get = (value, dflt) => value != null ? value : dflt;\n\nconst formatDiscrete = format => (value, index) => index ? format(value) : null;\n\nconst formatPoint = format => value => format(value);\n\nconst formatValue = (value, format) => Number.isFinite(value) ? format(value) : null;\n\nfunction labelFraction(scale) {\n const domain = scale.domain(),\n count = domain.length - 1;\n let lo = +domain[0],\n hi = +peek(domain),\n span = hi - lo;\n\n if (scale.type === Threshold) {\n const adjust = count ? span / count : 0.1;\n lo -= adjust;\n hi += adjust;\n span = hi - lo;\n }\n\n return value => (value - lo) / span;\n}\n\nfunction format(locale, scale, specifier, formatType) {\n const type = formatType || scale.type; // replace abbreviated time specifiers to improve screen reader experience\n\n if (isString(specifier) && isTemporal(type)) {\n specifier = specifier.replace(/%a/g, '%A').replace(/%b/g, '%B');\n }\n\n return !specifier && type === Time ? locale.timeFormat('%A, %d %B %Y, %X') : !specifier && type === UTC ? locale.utcFormat('%A, %d %B %Y, %X UTC') : labelFormat(locale, scale, 5, null, specifier, formatType, true);\n}\n\nfunction domainCaption(locale, scale, opt) {\n opt = opt || {};\n const max = Math.max(3, opt.maxlen || 7),\n fmt = format(locale, scale, opt.format, opt.formatType); // if scale breaks domain into bins, describe boundaries\n\n if (isDiscretizing(scale.type)) {\n const v = labelValues(scale).slice(1).map(fmt),\n n = v.length;\n return `${n} boundar${n === 1 ? 'y' : 'ies'}: ${v.join(', ')}`;\n } // if scale domain is discrete, list values\n else if (isDiscrete(scale.type)) {\n const d = scale.domain(),\n n = d.length,\n v = n > max ? d.slice(0, max - 2).map(fmt).join(', ') + ', ending with ' + d.slice(-1).map(fmt) : d.map(fmt).join(', ');\n return `${n} value${n === 1 ? '' : 's'}: ${v}`;\n } // if scale domain is continuous, describe value range\n else {\n const d = scale.domain();\n return `values from ${fmt(d[0])} to ${fmt(peek(d))}`;\n }\n}\n\nexport { Band, BinOrdinal, DiscreteLegend, Diverging, GradientLegend, Identity, Linear, Log, Ordinal, Point, Pow, Quantile, Quantize, Sequential, Sqrt, SymbolLegend, Symlog, Threshold, Time, UTC, bandSpace, domainCaption, interpolate, interpolateColors, interpolateRange, isContinuous, isDiscrete, isDiscretizing, isInterpolating, isLogarithmic, isQuantile, isTemporal, isValidScaleType, labelFormat, labelFraction, labelValues, quantizeInterpolator, scale, scaleCopy, scaleFraction, scheme, tickCount, tickFormat, tickValues, validTicks };\n","import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n var unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n return linearish(scale);\n}\n","import {calendar} from \"./time.js\";\nimport {utcFormat} from \"d3-time-format\";\nimport {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond} from \"d3-time\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n return initRange.apply(calendar(utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import { hasOwnProperty, isFunction, inherits, truthy, lruCache, isArray, error, toSet, array, peek, extend, isNumber, isObject } from 'vega-util';\nimport { curveBasis, curveBasisClosed, curveBasisOpen, curveBundle, curveCardinal, curveCardinalOpen, curveCardinalClosed, curveCatmullRom, curveCatmullRomClosed, curveCatmullRomOpen, curveLinear, curveLinearClosed, curveMonotoneY, curveMonotoneX, curveNatural, curveStep, curveStepAfter, curveStepBefore, arc as arc$2, area as area$2, line as line$2, symbol as symbol$2 } from 'd3-shape';\nimport { path as path$3 } from 'd3-path';\nimport { image as image$1, canvas } from 'vega-canvas';\nimport { loader } from 'vega-loader';\nimport { isDiscrete, domainCaption } from 'vega-scale';\n\nlet gradient_id = 0;\nfunction resetSVGGradientId() {\n gradient_id = 0;\n}\nconst patternPrefix = 'p_';\nfunction isGradient(value) {\n return value && value.gradient;\n}\nfunction gradientRef(g, defs, base) {\n const type = g.gradient;\n let id = g.id,\n prefix = type === 'radial' ? patternPrefix : ''; // check id, assign default values as needed\n\n if (!id) {\n id = g.id = 'gradient_' + gradient_id++;\n\n if (type === 'radial') {\n g.x1 = get(g.x1, 0.5);\n g.y1 = get(g.y1, 0.5);\n g.r1 = get(g.r1, 0);\n g.x2 = get(g.x2, 0.5);\n g.y2 = get(g.y2, 0.5);\n g.r2 = get(g.r2, 0.5);\n prefix = patternPrefix;\n } else {\n g.x1 = get(g.x1, 0);\n g.y1 = get(g.y1, 0);\n g.x2 = get(g.x2, 1);\n g.y2 = get(g.y2, 0);\n }\n } // register definition\n\n\n defs[id] = g; // return url reference\n\n return 'url(' + (base || '') + '#' + prefix + id + ')';\n}\n\nfunction get(val, def) {\n return val != null ? val : def;\n}\n\nfunction Gradient (p0, p1) {\n var stops = [],\n gradient;\n return gradient = {\n gradient: 'linear',\n x1: p0 ? p0[0] : 0,\n y1: p0 ? p0[1] : 0,\n x2: p1 ? p1[0] : 1,\n y2: p1 ? p1[1] : 0,\n stops: stops,\n stop: function (offset, color) {\n stops.push({\n offset: offset,\n color: color\n });\n return gradient;\n }\n };\n}\n\nconst lookup = {\n 'basis': {\n curve: curveBasis\n },\n 'basis-closed': {\n curve: curveBasisClosed\n },\n 'basis-open': {\n curve: curveBasisOpen\n },\n 'bundle': {\n curve: curveBundle,\n tension: 'beta',\n value: 0.85\n },\n 'cardinal': {\n curve: curveCardinal,\n tension: 'tension',\n value: 0\n },\n 'cardinal-open': {\n curve: curveCardinalOpen,\n tension: 'tension',\n value: 0\n },\n 'cardinal-closed': {\n curve: curveCardinalClosed,\n tension: 'tension',\n value: 0\n },\n 'catmull-rom': {\n curve: curveCatmullRom,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-closed': {\n curve: curveCatmullRomClosed,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-open': {\n curve: curveCatmullRomOpen,\n tension: 'alpha',\n value: 0.5\n },\n 'linear': {\n curve: curveLinear\n },\n 'linear-closed': {\n curve: curveLinearClosed\n },\n 'monotone': {\n horizontal: curveMonotoneY,\n vertical: curveMonotoneX\n },\n 'natural': {\n curve: curveNatural\n },\n 'step': {\n curve: curveStep\n },\n 'step-after': {\n curve: curveStepAfter\n },\n 'step-before': {\n curve: curveStepBefore\n }\n};\nfunction curves(type, orientation, tension) {\n var entry = hasOwnProperty(lookup, type) && lookup[type],\n curve = null;\n\n if (entry) {\n curve = entry.curve || entry[orientation || 'vertical'];\n\n if (entry.tension && tension != null) {\n curve = curve[entry.tension](tension);\n }\n }\n\n return curve;\n}\n\n// Path parsing and rendering code adapted from fabric.js -- Thanks!\nconst cmdlen = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7\n},\n regexp = [/([MLHVCSQTAZmlhvcsqtaz])/g, /###/, /(\\.\\d+)(\\.\\d)/g, /(\\d)([-+])/g, /\\s|,|###/];\nfunction pathParse (pathstr) {\n const result = [];\n let curr, chunks, parsed, param, cmd, len, i, j, n, m; // First, break path into command sequence\n\n const path = pathstr.slice().replace(regexp[0], '###$1').split(regexp[1]).slice(1); // Next, parse each command in turn\n\n for (i = 0, n = path.length; i < n; ++i) {\n curr = path[i];\n chunks = curr.slice(1).trim().replace(regexp[2], '$1###$2').replace(regexp[3], '$1###$2').split(regexp[4]);\n cmd = curr.charAt(0);\n parsed = [cmd];\n\n for (j = 0, m = chunks.length; j < m; ++j) {\n if ((param = +chunks[j]) === param) {\n // not NaN\n parsed.push(param);\n }\n }\n\n len = cmdlen[cmd.toLowerCase()];\n\n if (parsed.length - 1 > len) {\n const m = parsed.length;\n j = 1;\n result.push([cmd].concat(parsed.slice(j, j += len))); // handle implicit lineTo (#2803)\n\n cmd = cmd === 'M' ? 'L' : cmd === 'm' ? 'l' : cmd;\n\n for (; j < m; j += len) {\n result.push([cmd].concat(parsed.slice(j, j + len)));\n }\n } else {\n result.push(parsed);\n }\n }\n\n return result;\n}\n\nconst DegToRad = Math.PI / 180;\nconst Epsilon = 1e-14;\nconst HalfPi = Math.PI / 2;\nconst Tau = Math.PI * 2;\nconst HalfSqrt3 = Math.sqrt(3) / 2;\n\nvar segmentCache = {};\nvar bezierCache = {};\nvar join = [].join; // Copied from Inkscape svgtopdf, thanks!\n\nfunction segments(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\n const key = join.call(arguments);\n\n if (segmentCache[key]) {\n return segmentCache[key];\n }\n\n const th = rotateX * DegToRad;\n const sin_th = Math.sin(th);\n const cos_th = Math.cos(th);\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n const px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\n const py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\n let pl = px * px / (rx * rx) + py * py / (ry * ry);\n\n if (pl > 1) {\n pl = Math.sqrt(pl);\n rx *= pl;\n ry *= pl;\n }\n\n const a00 = cos_th / rx;\n const a01 = sin_th / rx;\n const a10 = -sin_th / ry;\n const a11 = cos_th / ry;\n const x0 = a00 * ox + a01 * oy;\n const y0 = a10 * ox + a11 * oy;\n const x1 = a00 * x + a01 * y;\n const y1 = a10 * x + a11 * y;\n const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\n let sfactor_sq = 1 / d - 0.25;\n if (sfactor_sq < 0) sfactor_sq = 0;\n let sfactor = Math.sqrt(sfactor_sq);\n if (sweep == large) sfactor = -sfactor;\n const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\n const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\n const th0 = Math.atan2(y0 - yc, x0 - xc);\n const th1 = Math.atan2(y1 - yc, x1 - xc);\n let th_arc = th1 - th0;\n\n if (th_arc < 0 && sweep === 1) {\n th_arc += Tau;\n } else if (th_arc > 0 && sweep === 0) {\n th_arc -= Tau;\n }\n\n const segs = Math.ceil(Math.abs(th_arc / (HalfPi + 0.001)));\n const result = [];\n\n for (let i = 0; i < segs; ++i) {\n const th2 = th0 + i * th_arc / segs;\n const th3 = th0 + (i + 1) * th_arc / segs;\n result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\n }\n\n return segmentCache[key] = result;\n}\nfunction bezier(params) {\n const key = join.call(params);\n\n if (bezierCache[key]) {\n return bezierCache[key];\n }\n\n var cx = params[0],\n cy = params[1],\n th0 = params[2],\n th1 = params[3],\n rx = params[4],\n ry = params[5],\n sin_th = params[6],\n cos_th = params[7];\n const a00 = cos_th * rx;\n const a01 = -sin_th * ry;\n const a10 = sin_th * rx;\n const a11 = cos_th * ry;\n const cos_th0 = Math.cos(th0);\n const sin_th0 = Math.sin(th0);\n const cos_th1 = Math.cos(th1);\n const sin_th1 = Math.sin(th1);\n const th_half = 0.5 * (th1 - th0);\n const sin_th_h2 = Math.sin(th_half * 0.5);\n const t = 8 / 3 * sin_th_h2 * sin_th_h2 / Math.sin(th_half);\n const x1 = cx + cos_th0 - t * sin_th0;\n const y1 = cy + sin_th0 + t * cos_th0;\n const x3 = cx + cos_th1;\n const y3 = cy + sin_th1;\n const x2 = x3 + t * sin_th1;\n const y2 = y3 - t * cos_th1;\n return bezierCache[key] = [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3];\n}\n\nconst temp = ['l', 0, 0, 0, 0, 0, 0, 0];\n\nfunction scale$1(current, sX, sY) {\n const c = temp[0] = current[0];\n\n if (c === 'a' || c === 'A') {\n temp[1] = sX * current[1];\n temp[2] = sY * current[2];\n temp[3] = current[3];\n temp[4] = current[4];\n temp[5] = current[5];\n temp[6] = sX * current[6];\n temp[7] = sY * current[7];\n } else if (c === 'h' || c === 'H') {\n temp[1] = sX * current[1];\n } else if (c === 'v' || c === 'V') {\n temp[1] = sY * current[1];\n } else {\n for (var i = 1, n = current.length; i < n; ++i) {\n temp[i] = (i % 2 == 1 ? sX : sY) * current[i];\n }\n }\n\n return temp;\n}\n\nfunction pathRender (context, path, l, t, sX, sY) {\n var current,\n // current instruction\n previous = null,\n x = 0,\n // current x\n y = 0,\n // current y\n controlX = 0,\n // current control point x\n controlY = 0,\n // current control point y\n tempX,\n tempY,\n tempControlX,\n tempControlY;\n if (l == null) l = 0;\n if (t == null) t = 0;\n if (sX == null) sX = 1;\n if (sY == null) sY = sX;\n if (context.beginPath) context.beginPath();\n\n for (var i = 0, len = path.length; i < len; ++i) {\n current = path[i];\n\n if (sX !== 1 || sY !== 1) {\n current = scale$1(current, sX, sY);\n }\n\n switch (current[0]) {\n // first letter\n case 'l':\n // lineto, relative\n x += current[1];\n y += current[2];\n context.lineTo(x + l, y + t);\n break;\n\n case 'L':\n // lineto, absolute\n x = current[1];\n y = current[2];\n context.lineTo(x + l, y + t);\n break;\n\n case 'h':\n // horizontal lineto, relative\n x += current[1];\n context.lineTo(x + l, y + t);\n break;\n\n case 'H':\n // horizontal lineto, absolute\n x = current[1];\n context.lineTo(x + l, y + t);\n break;\n\n case 'v':\n // vertical lineto, relative\n y += current[1];\n context.lineTo(x + l, y + t);\n break;\n\n case 'V':\n // verical lineto, absolute\n y = current[1];\n context.lineTo(x + l, y + t);\n break;\n\n case 'm':\n // moveTo, relative\n x += current[1];\n y += current[2];\n context.moveTo(x + l, y + t);\n break;\n\n case 'M':\n // moveTo, absolute\n x = current[1];\n y = current[2];\n context.moveTo(x + l, y + t);\n break;\n\n case 'c':\n // bezierCurveTo, relative\n tempX = x + current[5];\n tempY = y + current[6];\n controlX = x + current[3];\n controlY = y + current[4];\n context.bezierCurveTo(x + current[1] + l, // x1\n y + current[2] + t, // y1\n controlX + l, // x2\n controlY + t, // y2\n tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'C':\n // bezierCurveTo, absolute\n x = current[5];\n y = current[6];\n controlX = current[3];\n controlY = current[4];\n context.bezierCurveTo(current[1] + l, current[2] + t, controlX + l, controlY + t, x + l, y + t);\n break;\n\n case 's':\n // shorthand cubic bezierCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4]; // calculate reflection of previous control points\n\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.bezierCurveTo(controlX + l, controlY + t, x + current[1] + l, y + current[2] + t, tempX + l, tempY + t); // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n\n controlX = x + current[1];\n controlY = y + current[2];\n x = tempX;\n y = tempY;\n break;\n\n case 'S':\n // shorthand cubic bezierCurveTo, absolute\n tempX = current[3];\n tempY = current[4]; // calculate reflection of previous control points\n\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.bezierCurveTo(controlX + l, controlY + t, current[1] + l, current[2] + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY; // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n\n controlX = current[1];\n controlY = current[2];\n break;\n\n case 'q':\n // quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n controlX = x + current[1];\n controlY = y + current[2];\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'Q':\n // quadraticCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n context.quadraticCurveTo(current[1] + l, current[2] + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = current[1];\n controlY = current[2];\n break;\n\n case 't':\n // shorthand quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[1];\n tempY = y + current[2];\n\n if (previous[0].match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else if (previous[0] === 't') {\n // calculate reflection of previous control points for t\n controlX = 2 * x - tempControlX;\n controlY = 2 * y - tempControlY;\n } else if (previous[0] === 'q') {\n // calculate reflection of previous control points for q\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n\n tempControlX = controlX;\n tempControlY = controlY;\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = x + current[1];\n controlY = y + current[2];\n break;\n\n case 'T':\n tempX = current[1];\n tempY = current[2]; // calculate reflection of previous control points\n\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'a':\n drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + x + l, current[7] + y + t]);\n x += current[6];\n y += current[7];\n break;\n\n case 'A':\n drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + l, current[7] + t]);\n x = current[6];\n y = current[7];\n break;\n\n case 'z':\n case 'Z':\n context.closePath();\n break;\n }\n\n previous = current;\n }\n}\n\nfunction drawArc(context, x, y, coords) {\n const seg = segments(coords[5], // end x\n coords[6], // end y\n coords[0], // radius x\n coords[1], // radius y\n coords[3], // large flag\n coords[4], // sweep flag\n coords[2], // rotation\n x, y);\n\n for (let i = 0; i < seg.length; ++i) {\n const bez = bezier(seg[i]);\n context.bezierCurveTo(bez[0], bez[1], bez[2], bez[3], bez[4], bez[5]);\n }\n}\n\nconst Tan30 = 0.5773502691896257;\nconst builtins = {\n 'circle': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, Tau);\n }\n },\n 'cross': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n s = r / 2.5;\n context.moveTo(-r, -s);\n context.lineTo(-r, s);\n context.lineTo(-s, s);\n context.lineTo(-s, r);\n context.lineTo(s, r);\n context.lineTo(s, s);\n context.lineTo(r, s);\n context.lineTo(r, -s);\n context.lineTo(s, -s);\n context.lineTo(s, -r);\n context.lineTo(-s, -r);\n context.lineTo(-s, -s);\n context.closePath();\n }\n },\n 'diamond': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(-r, 0);\n context.lineTo(0, -r);\n context.lineTo(r, 0);\n context.lineTo(0, r);\n context.closePath();\n }\n },\n 'square': {\n draw: function (context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n },\n 'arrow': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n s = r / 7,\n t = r / 2.5,\n v = r / 8;\n context.moveTo(-s, r);\n context.lineTo(s, r);\n context.lineTo(s, -v);\n context.lineTo(t, -v);\n context.lineTo(0, -r);\n context.lineTo(-t, -v);\n context.lineTo(-s, -v);\n context.closePath();\n }\n },\n 'wedge': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r,\n o = h - r * Tan30,\n b = r / 4;\n context.moveTo(0, -h - o);\n context.lineTo(-b, h - o);\n context.lineTo(b, h - o);\n context.closePath();\n }\n },\n 'triangle': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r,\n o = h - r * Tan30;\n context.moveTo(0, -h - o);\n context.lineTo(-r, h - o);\n context.lineTo(r, h - o);\n context.closePath();\n }\n },\n 'triangle-up': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(0, -h);\n context.lineTo(-r, h);\n context.lineTo(r, h);\n context.closePath();\n }\n },\n 'triangle-down': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(0, h);\n context.lineTo(-r, -h);\n context.lineTo(r, -h);\n context.closePath();\n }\n },\n 'triangle-right': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(h, 0);\n context.lineTo(-h, -r);\n context.lineTo(-h, r);\n context.closePath();\n }\n },\n 'triangle-left': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(-h, 0);\n context.lineTo(h, -r);\n context.lineTo(h, r);\n context.closePath();\n }\n },\n 'stroke': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(-r, 0);\n context.lineTo(r, 0);\n }\n }\n};\nfunction symbols(_) {\n return hasOwnProperty(builtins, _) ? builtins[_] : customSymbol(_);\n}\nvar custom = {};\n\nfunction customSymbol(path) {\n if (!hasOwnProperty(custom, path)) {\n const parsed = pathParse(path);\n custom[path] = {\n draw: function (context, size) {\n pathRender(context, parsed, 0, 0, Math.sqrt(size) / 2);\n }\n };\n }\n\n return custom[path];\n}\n\nconst C = 0.448084975506; // C = 1 - c\n\nfunction rectangleX(d) {\n return d.x;\n}\n\nfunction rectangleY(d) {\n return d.y;\n}\n\nfunction rectangleWidth(d) {\n return d.width;\n}\n\nfunction rectangleHeight(d) {\n return d.height;\n}\n\nfunction number(_) {\n return typeof _ === 'function' ? _ : () => +_;\n}\n\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(value, max));\n}\n\nfunction vg_rect () {\n var x = rectangleX,\n y = rectangleY,\n width = rectangleWidth,\n height = rectangleHeight,\n crTL = number(0),\n crTR = crTL,\n crBL = crTL,\n crBR = crTL,\n context = null;\n\n function rectangle(_, x0, y0) {\n var buffer,\n x1 = x0 != null ? x0 : +x.call(this, _),\n y1 = y0 != null ? y0 : +y.call(this, _),\n w = +width.call(this, _),\n h = +height.call(this, _),\n s = Math.min(w, h) / 2,\n tl = clamp(+crTL.call(this, _), 0, s),\n tr = clamp(+crTR.call(this, _), 0, s),\n bl = clamp(+crBL.call(this, _), 0, s),\n br = clamp(+crBR.call(this, _), 0, s);\n if (!context) context = buffer = path$3();\n\n if (tl <= 0 && tr <= 0 && bl <= 0 && br <= 0) {\n context.rect(x1, y1, w, h);\n } else {\n var x2 = x1 + w,\n y2 = y1 + h;\n context.moveTo(x1 + tl, y1);\n context.lineTo(x2 - tr, y1);\n context.bezierCurveTo(x2 - C * tr, y1, x2, y1 + C * tr, x2, y1 + tr);\n context.lineTo(x2, y2 - br);\n context.bezierCurveTo(x2, y2 - C * br, x2 - C * br, y2, x2 - br, y2);\n context.lineTo(x1 + bl, y2);\n context.bezierCurveTo(x1 + C * bl, y2, x1, y2 - C * bl, x1, y2 - bl);\n context.lineTo(x1, y1 + tl);\n context.bezierCurveTo(x1, y1 + C * tl, x1 + C * tl, y1, x1 + tl, y1);\n context.closePath();\n }\n\n if (buffer) {\n context = null;\n return buffer + '' || null;\n }\n }\n\n rectangle.x = function (_) {\n if (arguments.length) {\n x = number(_);\n return rectangle;\n } else {\n return x;\n }\n };\n\n rectangle.y = function (_) {\n if (arguments.length) {\n y = number(_);\n return rectangle;\n } else {\n return y;\n }\n };\n\n rectangle.width = function (_) {\n if (arguments.length) {\n width = number(_);\n return rectangle;\n } else {\n return width;\n }\n };\n\n rectangle.height = function (_) {\n if (arguments.length) {\n height = number(_);\n return rectangle;\n } else {\n return height;\n }\n };\n\n rectangle.cornerRadius = function (tl, tr, br, bl) {\n if (arguments.length) {\n crTL = number(tl);\n crTR = tr != null ? number(tr) : crTL;\n crBR = br != null ? number(br) : crTL;\n crBL = bl != null ? number(bl) : crTR;\n return rectangle;\n } else {\n return crTL;\n }\n };\n\n rectangle.context = function (_) {\n if (arguments.length) {\n context = _ == null ? null : _;\n return rectangle;\n } else {\n return context;\n }\n };\n\n return rectangle;\n}\n\nfunction vg_trail () {\n var x,\n y,\n size,\n defined,\n context = null,\n ready,\n x1,\n y1,\n r1;\n\n function point(x2, y2, w2) {\n const r2 = w2 / 2;\n\n if (ready) {\n var ux = y1 - y2,\n uy = x2 - x1;\n\n if (ux || uy) {\n // get normal vector\n var ud = Math.sqrt(ux * ux + uy * uy),\n rx = (ux /= ud) * r1,\n ry = (uy /= ud) * r1,\n t = Math.atan2(uy, ux); // draw segment\n\n context.moveTo(x1 - rx, y1 - ry);\n context.lineTo(x2 - ux * r2, y2 - uy * r2);\n context.arc(x2, y2, r2, t - Math.PI, t);\n context.lineTo(x1 + rx, y1 + ry);\n context.arc(x1, y1, r1, t, t + Math.PI);\n } else {\n context.arc(x2, y2, r2, 0, Tau);\n }\n\n context.closePath();\n } else {\n ready = 1;\n }\n\n x1 = x2;\n y1 = y2;\n r1 = r2;\n }\n\n function trail(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n if (context == null) context = buffer = path$3();\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) ready = 0;\n }\n\n if (defined0) point(+x(d, i, data), +y(d, i, data), +size(d, i, data));\n }\n\n if (buffer) {\n context = null;\n return buffer + '' || null;\n }\n }\n\n trail.x = function (_) {\n if (arguments.length) {\n x = _;\n return trail;\n } else {\n return x;\n }\n };\n\n trail.y = function (_) {\n if (arguments.length) {\n y = _;\n return trail;\n } else {\n return y;\n }\n };\n\n trail.size = function (_) {\n if (arguments.length) {\n size = _;\n return trail;\n } else {\n return size;\n }\n };\n\n trail.defined = function (_) {\n if (arguments.length) {\n defined = _;\n return trail;\n } else {\n return defined;\n }\n };\n\n trail.context = function (_) {\n if (arguments.length) {\n if (_ == null) {\n context = null;\n } else {\n context = _;\n }\n\n return trail;\n } else {\n return context;\n }\n };\n\n return trail;\n}\n\nfunction value$1(a, b) {\n return a != null ? a : b;\n}\n\nconst x = item => item.x || 0,\n y = item => item.y || 0,\n w = item => item.width || 0,\n h = item => item.height || 0,\n xw = item => (item.x || 0) + (item.width || 0),\n yh = item => (item.y || 0) + (item.height || 0),\n sa = item => item.startAngle || 0,\n ea = item => item.endAngle || 0,\n pa = item => item.padAngle || 0,\n ir = item => item.innerRadius || 0,\n or = item => item.outerRadius || 0,\n cr = item => item.cornerRadius || 0,\n tl = item => value$1(item.cornerRadiusTopLeft, item.cornerRadius) || 0,\n tr = item => value$1(item.cornerRadiusTopRight, item.cornerRadius) || 0,\n br = item => value$1(item.cornerRadiusBottomRight, item.cornerRadius) || 0,\n bl = item => value$1(item.cornerRadiusBottomLeft, item.cornerRadius) || 0,\n sz = item => value$1(item.size, 64),\n ts = item => item.size || 1,\n def = item => !(item.defined === false),\n type = item => symbols(item.shape || 'circle');\n\nconst arcShape = arc$2().startAngle(sa).endAngle(ea).padAngle(pa).innerRadius(ir).outerRadius(or).cornerRadius(cr),\n areavShape = area$2().x(x).y1(y).y0(yh).defined(def),\n areahShape = area$2().y(y).x1(x).x0(xw).defined(def),\n lineShape = line$2().x(x).y(y).defined(def),\n rectShape = vg_rect().x(x).y(y).width(w).height(h).cornerRadius(tl, tr, br, bl),\n symbolShape = symbol$2().type(type).size(sz),\n trailShape = vg_trail().x(x).y(y).defined(def).size(ts);\nfunction hasCornerRadius(item) {\n return item.cornerRadius || item.cornerRadiusTopLeft || item.cornerRadiusTopRight || item.cornerRadiusBottomRight || item.cornerRadiusBottomLeft;\n}\nfunction arc$1(context, item) {\n return arcShape.context(context)(item);\n}\nfunction area$1(context, items) {\n const item = items[0],\n interp = item.interpolate || 'linear';\n return (item.orient === 'horizontal' ? areahShape : areavShape).curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction line$1(context, items) {\n const item = items[0],\n interp = item.interpolate || 'linear';\n return lineShape.curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction rectangle(context, item, x, y) {\n return rectShape.context(context)(item, x, y);\n}\nfunction shape$1(context, item) {\n return (item.mark.shape || item.shape).context(context)(item);\n}\nfunction symbol$1(context, item) {\n return symbolShape.context(context)(item);\n}\nfunction trail$1(context, items) {\n return trailShape.context(context)(items);\n}\n\nvar clip_id = 1;\nfunction resetSVGClipId() {\n clip_id = 1;\n}\nfunction clip$1 (renderer, item, size) {\n var clip = item.clip,\n defs = renderer._defs,\n id = item.clip_id || (item.clip_id = 'clip' + clip_id++),\n c = defs.clipping[id] || (defs.clipping[id] = {\n id: id\n });\n\n if (isFunction(clip)) {\n c.path = clip(null);\n } else if (hasCornerRadius(size)) {\n c.path = rectangle(null, size, 0, 0);\n } else {\n c.width = size.width || 0;\n c.height = size.height || 0;\n }\n\n return 'url(#' + id + ')';\n}\n\nfunction Bounds(b) {\n this.clear();\n if (b) this.union(b);\n}\nBounds.prototype = {\n clone() {\n return new Bounds(this);\n },\n\n clear() {\n this.x1 = +Number.MAX_VALUE;\n this.y1 = +Number.MAX_VALUE;\n this.x2 = -Number.MAX_VALUE;\n this.y2 = -Number.MAX_VALUE;\n return this;\n },\n\n empty() {\n return this.x1 === +Number.MAX_VALUE && this.y1 === +Number.MAX_VALUE && this.x2 === -Number.MAX_VALUE && this.y2 === -Number.MAX_VALUE;\n },\n\n equals(b) {\n return this.x1 === b.x1 && this.y1 === b.y1 && this.x2 === b.x2 && this.y2 === b.y2;\n },\n\n set(x1, y1, x2, y2) {\n if (x2 < x1) {\n this.x2 = x1;\n this.x1 = x2;\n } else {\n this.x1 = x1;\n this.x2 = x2;\n }\n\n if (y2 < y1) {\n this.y2 = y1;\n this.y1 = y2;\n } else {\n this.y1 = y1;\n this.y2 = y2;\n }\n\n return this;\n },\n\n add(x, y) {\n if (x < this.x1) this.x1 = x;\n if (y < this.y1) this.y1 = y;\n if (x > this.x2) this.x2 = x;\n if (y > this.y2) this.y2 = y;\n return this;\n },\n\n expand(d) {\n this.x1 -= d;\n this.y1 -= d;\n this.x2 += d;\n this.y2 += d;\n return this;\n },\n\n round() {\n this.x1 = Math.floor(this.x1);\n this.y1 = Math.floor(this.y1);\n this.x2 = Math.ceil(this.x2);\n this.y2 = Math.ceil(this.y2);\n return this;\n },\n\n scale(s) {\n this.x1 *= s;\n this.y1 *= s;\n this.x2 *= s;\n this.y2 *= s;\n return this;\n },\n\n translate(dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n },\n\n rotate(angle, x, y) {\n const p = this.rotatedPoints(angle, x, y);\n return this.clear().add(p[0], p[1]).add(p[2], p[3]).add(p[4], p[5]).add(p[6], p[7]);\n },\n\n rotatedPoints(angle, x, y) {\n var {\n x1,\n y1,\n x2,\n y2\n } = this,\n cos = Math.cos(angle),\n sin = Math.sin(angle),\n cx = x - x * cos + y * sin,\n cy = y - x * sin - y * cos;\n return [cos * x1 - sin * y1 + cx, sin * x1 + cos * y1 + cy, cos * x1 - sin * y2 + cx, sin * x1 + cos * y2 + cy, cos * x2 - sin * y1 + cx, sin * x2 + cos * y1 + cy, cos * x2 - sin * y2 + cx, sin * x2 + cos * y2 + cy];\n },\n\n union(b) {\n if (b.x1 < this.x1) this.x1 = b.x1;\n if (b.y1 < this.y1) this.y1 = b.y1;\n if (b.x2 > this.x2) this.x2 = b.x2;\n if (b.y2 > this.y2) this.y2 = b.y2;\n return this;\n },\n\n intersect(b) {\n if (b.x1 > this.x1) this.x1 = b.x1;\n if (b.y1 > this.y1) this.y1 = b.y1;\n if (b.x2 < this.x2) this.x2 = b.x2;\n if (b.y2 < this.y2) this.y2 = b.y2;\n return this;\n },\n\n encloses(b) {\n return b && this.x1 <= b.x1 && this.x2 >= b.x2 && this.y1 <= b.y1 && this.y2 >= b.y2;\n },\n\n alignsWith(b) {\n return b && (this.x1 == b.x1 || this.x2 == b.x2 || this.y1 == b.y1 || this.y2 == b.y2);\n },\n\n intersects(b) {\n return b && !(this.x2 < b.x1 || this.x1 > b.x2 || this.y2 < b.y1 || this.y1 > b.y2);\n },\n\n contains(x, y) {\n return !(x < this.x1 || x > this.x2 || y < this.y1 || y > this.y2);\n },\n\n width() {\n return this.x2 - this.x1;\n },\n\n height() {\n return this.y2 - this.y1;\n }\n\n};\n\nfunction Item(mark) {\n this.mark = mark;\n this.bounds = this.bounds || new Bounds();\n}\n\nfunction GroupItem(mark) {\n Item.call(this, mark);\n this.items = this.items || [];\n}\ninherits(GroupItem, Item);\n\nfunction ResourceLoader(customLoader) {\n this._pending = 0;\n this._loader = customLoader || loader();\n}\n\nfunction increment(loader) {\n loader._pending += 1;\n}\n\nfunction decrement(loader) {\n loader._pending -= 1;\n}\n\nResourceLoader.prototype = {\n pending() {\n return this._pending;\n },\n\n sanitizeURL(uri) {\n const loader = this;\n increment(loader);\n return loader._loader.sanitize(uri, {\n context: 'href'\n }).then(opt => {\n decrement(loader);\n return opt;\n }).catch(() => {\n decrement(loader);\n return null;\n });\n },\n\n loadImage(uri) {\n const loader = this,\n Image = image$1();\n increment(loader);\n return loader._loader.sanitize(uri, {\n context: 'image'\n }).then(opt => {\n const url = opt.href;\n if (!url || !Image) throw {\n url: url\n };\n const img = new Image(); // set crossOrigin only if cors is defined; empty string sets anonymous mode\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/crossOrigin\n\n const cors = hasOwnProperty(opt, 'crossOrigin') ? opt.crossOrigin : 'anonymous';\n if (cors != null) img.crossOrigin = cors; // attempt to load image resource\n\n img.onload = () => decrement(loader);\n\n img.onerror = () => decrement(loader);\n\n img.src = url;\n return img;\n }).catch(e => {\n decrement(loader);\n return {\n complete: false,\n width: 0,\n height: 0,\n src: e && e.url || ''\n };\n });\n },\n\n ready() {\n const loader = this;\n return new Promise(accept => {\n function poll(value) {\n if (!loader.pending()) accept(value);else setTimeout(() => {\n poll(true);\n }, 10);\n }\n\n poll(false);\n });\n }\n\n};\n\nfunction boundStroke (bounds, item, miter) {\n if (item.stroke && item.opacity !== 0 && item.strokeOpacity !== 0) {\n const sw = item.strokeWidth != null ? +item.strokeWidth : 1;\n bounds.expand(sw + (miter ? miterAdjustment(item, sw) : 0));\n }\n\n return bounds;\n}\n\nfunction miterAdjustment(item, strokeWidth) {\n // TODO: more sophisticated adjustment? Or miter support in boundContext?\n return item.strokeJoin && item.strokeJoin !== 'miter' ? 0 : strokeWidth;\n}\n\nconst circleThreshold = Tau - 1e-8;\nlet bounds, lx, ly, rot, ma, mb, mc, md;\n\nconst add = (x, y) => bounds.add(x, y);\n\nconst addL = (x, y) => add(lx = x, ly = y);\n\nconst addX = x => add(x, bounds.y1);\n\nconst addY = y => add(bounds.x1, y);\n\nconst px = (x, y) => ma * x + mc * y;\n\nconst py = (x, y) => mb * x + md * y;\n\nconst addp = (x, y) => add(px(x, y), py(x, y));\n\nconst addpL = (x, y) => addL(px(x, y), py(x, y));\n\nfunction boundContext (_, deg) {\n bounds = _;\n\n if (deg) {\n rot = deg * DegToRad;\n ma = md = Math.cos(rot);\n mb = Math.sin(rot);\n mc = -mb;\n } else {\n ma = md = 1;\n rot = mb = mc = 0;\n }\n\n return context$1;\n}\nconst context$1 = {\n beginPath() {},\n\n closePath() {},\n\n moveTo: addpL,\n lineTo: addpL,\n\n rect(x, y, w, h) {\n if (rot) {\n addp(x + w, y);\n addp(x + w, y + h);\n addp(x, y + h);\n addpL(x, y);\n } else {\n add(x + w, y + h);\n addL(x, y);\n }\n },\n\n quadraticCurveTo(x1, y1, x2, y2) {\n const px1 = px(x1, y1),\n py1 = py(x1, y1),\n px2 = px(x2, y2),\n py2 = py(x2, y2);\n quadExtrema(lx, px1, px2, addX);\n quadExtrema(ly, py1, py2, addY);\n addL(px2, py2);\n },\n\n bezierCurveTo(x1, y1, x2, y2, x3, y3) {\n const px1 = px(x1, y1),\n py1 = py(x1, y1),\n px2 = px(x2, y2),\n py2 = py(x2, y2),\n px3 = px(x3, y3),\n py3 = py(x3, y3);\n cubicExtrema(lx, px1, px2, px3, addX);\n cubicExtrema(ly, py1, py2, py3, addY);\n addL(px3, py3);\n },\n\n arc(cx, cy, r, sa, ea, ccw) {\n sa += rot;\n ea += rot; // store last point on path\n\n lx = r * Math.cos(ea) + cx;\n ly = r * Math.sin(ea) + cy;\n\n if (Math.abs(ea - sa) > circleThreshold) {\n // treat as full circle\n add(cx - r, cy - r);\n add(cx + r, cy + r);\n } else {\n const update = a => add(r * Math.cos(a) + cx, r * Math.sin(a) + cy);\n\n let s, i; // sample end points\n\n update(sa);\n update(ea); // sample interior points aligned with 90 degrees\n\n if (ea !== sa) {\n sa = sa % Tau;\n if (sa < 0) sa += Tau;\n ea = ea % Tau;\n if (ea < 0) ea += Tau;\n\n if (ea < sa) {\n ccw = !ccw; // flip direction\n\n s = sa;\n sa = ea;\n ea = s; // swap end-points\n }\n\n if (ccw) {\n ea -= Tau;\n s = sa - sa % HalfPi;\n\n for (i = 0; i < 4 && s > ea; ++i, s -= HalfPi) update(s);\n } else {\n s = sa - sa % HalfPi + HalfPi;\n\n for (i = 0; i < 4 && s < ea; ++i, s = s + HalfPi) update(s);\n }\n }\n }\n }\n\n};\n\nfunction quadExtrema(x0, x1, x2, cb) {\n const t = (x0 - x1) / (x0 + x2 - 2 * x1);\n if (0 < t && t < 1) cb(x0 + (x1 - x0) * t);\n}\n\nfunction cubicExtrema(x0, x1, x2, x3, cb) {\n const a = x3 - x0 + 3 * x1 - 3 * x2,\n b = x0 + x2 - 2 * x1,\n c = x0 - x1;\n let t0 = 0,\n t1 = 0,\n r; // solve for parameter t\n\n if (Math.abs(a) > Epsilon) {\n // quadratic equation\n r = b * b + c * a;\n\n if (r >= 0) {\n r = Math.sqrt(r);\n t0 = (-b + r) / a;\n t1 = (-b - r) / a;\n }\n } else {\n // linear equation\n t0 = 0.5 * c / b;\n } // calculate position\n\n\n if (0 < t0 && t0 < 1) cb(cubic(t0, x0, x1, x2, x3));\n if (0 < t1 && t1 < 1) cb(cubic(t1, x0, x1, x2, x3));\n}\n\nfunction cubic(t, x0, x1, x2, x3) {\n const s = 1 - t,\n s2 = s * s,\n t2 = t * t;\n return s2 * s * x0 + 3 * s2 * t * x1 + 3 * s * t2 * x2 + t2 * t * x3;\n}\n\nvar context = (context = canvas(1, 1)) ? context.getContext('2d') : null;\n\nconst b = new Bounds();\nfunction intersectPath(draw) {\n return function (item, brush) {\n // rely on (inaccurate) bounds intersection if no context\n if (!context) return true; // add path to offscreen graphics context\n\n draw(context, item); // get bounds intersection region\n\n b.clear().union(item.bounds).intersect(brush).round();\n const {\n x1,\n y1,\n x2,\n y2\n } = b; // iterate over intersection region\n // perform fine grained inclusion test\n\n for (let y = y1; y <= y2; ++y) {\n for (let x = x1; x <= x2; ++x) {\n if (context.isPointInPath(x, y)) {\n return true;\n }\n }\n } // false if no hits in intersection region\n\n\n return false;\n };\n}\nfunction intersectPoint(item, box) {\n return box.contains(item.x || 0, item.y || 0);\n}\nfunction intersectRect(item, box) {\n const x = item.x || 0,\n y = item.y || 0,\n w = item.width || 0,\n h = item.height || 0;\n return box.intersects(b.set(x, y, x + w, y + h));\n}\nfunction intersectRule(item, box) {\n const x = item.x || 0,\n y = item.y || 0,\n x2 = item.x2 != null ? item.x2 : x,\n y2 = item.y2 != null ? item.y2 : y;\n return intersectBoxLine(box, x, y, x2, y2);\n}\nfunction intersectBoxLine(box, x, y, u, v) {\n const {\n x1,\n y1,\n x2,\n y2\n } = box,\n dx = u - x,\n dy = v - y;\n let t0 = 0,\n t1 = 1,\n p,\n q,\n r,\n e;\n\n for (e = 0; e < 4; ++e) {\n if (e === 0) {\n p = -dx;\n q = -(x1 - x);\n }\n\n if (e === 1) {\n p = dx;\n q = x2 - x;\n }\n\n if (e === 2) {\n p = -dy;\n q = -(y1 - y);\n }\n\n if (e === 3) {\n p = dy;\n q = y2 - y;\n }\n\n if (Math.abs(p) < 1e-10 && q < 0) return false;\n r = q / p;\n\n if (p < 0) {\n if (r > t1) return false;else if (r > t0) t0 = r;\n } else if (p > 0) {\n if (r < t0) return false;else if (r < t1) t1 = r;\n }\n }\n\n return true;\n}\n\nfunction blend (context, item) {\n context.globalCompositeOperation = item.blend || 'source-over';\n}\n\nfunction value (value, dflt) {\n return value == null ? dflt : value;\n}\n\nfunction addStops(gradient, stops) {\n const n = stops.length;\n\n for (let i = 0; i < n; ++i) {\n gradient.addColorStop(stops[i].offset, stops[i].color);\n }\n\n return gradient;\n}\n\nfunction gradient (context, spec, bounds) {\n const w = bounds.width(),\n h = bounds.height();\n let gradient;\n\n if (spec.gradient === 'radial') {\n gradient = context.createRadialGradient(bounds.x1 + value(spec.x1, 0.5) * w, bounds.y1 + value(spec.y1, 0.5) * h, Math.max(w, h) * value(spec.r1, 0), bounds.x1 + value(spec.x2, 0.5) * w, bounds.y1 + value(spec.y2, 0.5) * h, Math.max(w, h) * value(spec.r2, 0.5));\n } else {\n // linear gradient\n const x1 = value(spec.x1, 0),\n y1 = value(spec.y1, 0),\n x2 = value(spec.x2, 1),\n y2 = value(spec.y2, 0);\n\n if (x1 === x2 || y1 === y2 || w === h) {\n // axis aligned: use normal gradient\n gradient = context.createLinearGradient(bounds.x1 + x1 * w, bounds.y1 + y1 * h, bounds.x1 + x2 * w, bounds.y1 + y2 * h);\n } else {\n // not axis aligned: render gradient into a pattern (#2365)\n // this allows us to use normalized bounding box coordinates\n const image = canvas(Math.ceil(w), Math.ceil(h)),\n ictx = image.getContext('2d');\n ictx.scale(w, h);\n ictx.fillStyle = addStops(ictx.createLinearGradient(x1, y1, x2, y2), spec.stops);\n ictx.fillRect(0, 0, w, h);\n return context.createPattern(image, 'no-repeat');\n }\n }\n\n return addStops(gradient, spec.stops);\n}\n\nfunction color (context, item, value) {\n return isGradient(value) ? gradient(context, value, item.bounds) : value;\n}\n\nfunction fill (context, item, opacity) {\n opacity *= item.fillOpacity == null ? 1 : item.fillOpacity;\n\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.fillStyle = color(context, item, item.fill);\n return true;\n } else {\n return false;\n }\n}\n\nvar Empty = [];\nfunction stroke (context, item, opacity) {\n var lw = (lw = item.strokeWidth) != null ? lw : 1;\n if (lw <= 0) return false;\n opacity *= item.strokeOpacity == null ? 1 : item.strokeOpacity;\n\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.strokeStyle = color(context, item, item.stroke);\n context.lineWidth = lw;\n context.lineCap = item.strokeCap || 'butt';\n context.lineJoin = item.strokeJoin || 'miter';\n context.miterLimit = item.strokeMiterLimit || 10;\n\n if (context.setLineDash) {\n context.setLineDash(item.strokeDash || Empty);\n context.lineDashOffset = item.strokeDashOffset || 0;\n }\n\n return true;\n } else {\n return false;\n }\n}\n\nfunction compare(a, b) {\n return a.zindex - b.zindex || a.index - b.index;\n}\n\nfunction zorder(scene) {\n if (!scene.zdirty) return scene.zitems;\n var items = scene.items,\n output = [],\n item,\n i,\n n;\n\n for (i = 0, n = items.length; i < n; ++i) {\n item = items[i];\n item.index = i;\n if (item.zindex) output.push(item);\n }\n\n scene.zdirty = false;\n return scene.zitems = output.sort(compare);\n}\nfunction visit(scene, visitor) {\n var items = scene.items,\n i,\n n;\n if (!items || !items.length) return;\n const zitems = zorder(scene);\n\n if (zitems && zitems.length) {\n for (i = 0, n = items.length; i < n; ++i) {\n if (!items[i].zindex) visitor(items[i]);\n }\n\n items = zitems;\n }\n\n for (i = 0, n = items.length; i < n; ++i) {\n visitor(items[i]);\n }\n}\nfunction pickVisit(scene, visitor) {\n var items = scene.items,\n hit,\n i;\n if (!items || !items.length) return null;\n const zitems = zorder(scene);\n if (zitems && zitems.length) items = zitems;\n\n for (i = items.length; --i >= 0;) {\n if (hit = visitor(items[i])) return hit;\n }\n\n if (items === zitems) {\n for (items = scene.items, i = items.length; --i >= 0;) {\n if (!items[i].zindex) {\n if (hit = visitor(items[i])) return hit;\n }\n }\n }\n\n return null;\n}\n\nfunction drawAll(path) {\n return function (context, scene, bounds) {\n visit(scene, item => {\n if (!bounds || bounds.intersects(item.bounds)) {\n drawPath(path, context, item, item);\n }\n });\n };\n}\nfunction drawOne(path) {\n return function (context, scene, bounds) {\n if (scene.items.length && (!bounds || bounds.intersects(scene.bounds))) {\n drawPath(path, context, scene.items[0], scene.items);\n }\n };\n}\n\nfunction drawPath(path, context, item, items) {\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity === 0) return;\n if (path(context, items)) return;\n blend(context, item);\n\n if (item.fill && fill(context, item, opacity)) {\n context.fill();\n }\n\n if (item.stroke && stroke(context, item, opacity)) {\n context.stroke();\n }\n}\n\nfunction pick$1(test) {\n test = test || truthy;\n return function (context, scene, x, y, gx, gy) {\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return pickVisit(scene, item => {\n const b = item.bounds; // first hit test against bounding box\n\n if (b && !b.contains(gx, gy) || !b) return; // if in bounding box, perform more careful test\n\n if (test(context, item, x, y, gx, gy)) return item;\n });\n };\n}\nfunction hitPath(path, filled) {\n return function (context, o, x, y) {\n var item = Array.isArray(o) ? o[0] : o,\n fill = filled == null ? item.fill : filled,\n stroke = item.stroke && context.isPointInStroke,\n lw,\n lc;\n\n if (stroke) {\n lw = item.strokeWidth;\n lc = item.strokeCap;\n context.lineWidth = lw != null ? lw : 1;\n context.lineCap = lc != null ? lc : 'butt';\n }\n\n return path(context, o) ? false : fill && context.isPointInPath(x, y) || stroke && context.isPointInStroke(x, y);\n };\n}\nfunction pickPath(path) {\n return pick$1(hitPath(path));\n}\n\nfunction translate(x, y) {\n return 'translate(' + x + ',' + y + ')';\n}\nfunction rotate(a) {\n return 'rotate(' + a + ')';\n}\nfunction scale(scaleX, scaleY) {\n return 'scale(' + scaleX + ',' + scaleY + ')';\n}\nfunction translateItem(item) {\n return translate(item.x || 0, item.y || 0);\n}\nfunction rotateItem(item) {\n return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '');\n}\nfunction transformItem(item) {\n return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '') + (item.scaleX || item.scaleY ? ' ' + scale(item.scaleX || 1, item.scaleY || 1) : '');\n}\n\nfunction markItemPath (type, shape, isect) {\n function attr(emit, item) {\n emit('transform', rotateItem(item));\n emit('d', shape(null, item));\n }\n\n function bound(bounds, item) {\n shape(boundContext(bounds, item.angle), item);\n return boundStroke(bounds, item).translate(item.x || 0, item.y || 0);\n }\n\n function draw(context, item) {\n var x = item.x || 0,\n y = item.y || 0,\n a = item.angle || 0;\n context.translate(x, y);\n if (a) context.rotate(a *= DegToRad);\n context.beginPath();\n shape(context, item);\n if (a) context.rotate(-a);\n context.translate(-x, -y);\n }\n\n return {\n type: type,\n tag: 'path',\n nested: false,\n attr: attr,\n bound: bound,\n draw: drawAll(draw),\n pick: pickPath(draw),\n isect: isect || intersectPath(draw)\n };\n}\n\nvar arc = markItemPath('arc', arc$1);\n\nfunction pickArea(a, p) {\n var v = a[0].orient === 'horizontal' ? p[1] : p[0],\n z = a[0].orient === 'horizontal' ? 'y' : 'x',\n i = a.length,\n min = +Infinity,\n hit,\n d;\n\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n d = Math.abs(a[i][z] - v);\n\n if (d < min) {\n min = d;\n hit = a[i];\n }\n }\n\n return hit;\n}\nfunction pickLine(a, p) {\n var t = Math.pow(a[0].strokeWidth || 1, 2),\n i = a.length,\n dx,\n dy,\n dd;\n\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n if (dd < t) return a[i];\n }\n\n return null;\n}\nfunction pickTrail(a, p) {\n var i = a.length,\n dx,\n dy,\n dd;\n\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n dx = a[i].size || 1;\n if (dd < dx * dx) return a[i];\n }\n\n return null;\n}\n\nfunction markMultiItemPath (type, shape, tip) {\n function attr(emit, item) {\n var items = item.mark.items;\n if (items.length) emit('d', shape(null, items));\n }\n\n function bound(bounds, mark) {\n var items = mark.items;\n\n if (items.length === 0) {\n return bounds;\n } else {\n shape(boundContext(bounds), items);\n return boundStroke(bounds, items[0]);\n }\n }\n\n function draw(context, items) {\n context.beginPath();\n shape(context, items);\n }\n\n const hit = hitPath(draw);\n\n function pick(context, scene, x, y, gx, gy) {\n var items = scene.items,\n b = scene.bounds;\n\n if (!items || !items.length || b && !b.contains(gx, gy)) {\n return null;\n }\n\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return hit(context, items, x, y) ? items[0] : null;\n }\n\n return {\n type: type,\n tag: 'path',\n nested: true,\n attr: attr,\n bound: bound,\n draw: drawOne(draw),\n pick: pick,\n isect: intersectPoint,\n tip: tip\n };\n}\n\nvar area = markMultiItemPath('area', area$1, pickArea);\n\nfunction clip (context, scene) {\n var clip = scene.clip;\n context.save();\n\n if (isFunction(clip)) {\n context.beginPath();\n clip(context);\n context.clip();\n } else {\n clipGroup(context, scene.group);\n }\n}\nfunction clipGroup(context, group) {\n context.beginPath();\n hasCornerRadius(group) ? rectangle(context, group, 0, 0) : context.rect(0, 0, group.width || 0, group.height || 0);\n context.clip();\n}\n\nfunction offset$1(item) {\n const sw = value(item.strokeWidth, 1);\n return item.strokeOffset != null ? item.strokeOffset : item.stroke && sw > 0.5 && sw < 1.5 ? 0.5 - Math.abs(sw - 1) : 0;\n}\n\nfunction attr$5(emit, item) {\n emit('transform', translateItem(item));\n}\n\nfunction emitRectangle(emit, item) {\n const off = offset$1(item);\n emit('d', rectangle(null, item, off, off));\n}\n\nfunction background(emit, item) {\n emit('class', 'background');\n emit('aria-hidden', true);\n emitRectangle(emit, item);\n}\n\nfunction foreground(emit, item) {\n emit('class', 'foreground');\n emit('aria-hidden', true);\n\n if (item.strokeForeground) {\n emitRectangle(emit, item);\n } else {\n emit('d', '');\n }\n}\n\nfunction content(emit, item, renderer) {\n const url = item.clip ? clip$1(renderer, item, item) : null;\n emit('clip-path', url);\n}\n\nfunction bound$5(bounds, group) {\n if (!group.clip && group.items) {\n const items = group.items,\n m = items.length;\n\n for (let j = 0; j < m; ++j) {\n bounds.union(items[j].bounds);\n }\n }\n\n if ((group.clip || group.width || group.height) && !group.noBound) {\n bounds.add(0, 0).add(group.width || 0, group.height || 0);\n }\n\n boundStroke(bounds, group);\n return bounds.translate(group.x || 0, group.y || 0);\n}\n\nfunction rectanglePath(context, group, x, y) {\n const off = offset$1(group);\n context.beginPath();\n rectangle(context, group, (x || 0) + off, (y || 0) + off);\n}\n\nconst hitBackground = hitPath(rectanglePath);\nconst hitForeground = hitPath(rectanglePath, false);\nconst hitCorner = hitPath(rectanglePath, true);\n\nfunction draw$4(context, scene, bounds) {\n visit(scene, group => {\n const gx = group.x || 0,\n gy = group.y || 0,\n fore = group.strokeForeground,\n opacity = group.opacity == null ? 1 : group.opacity; // draw group background\n\n if ((group.stroke || group.fill) && opacity) {\n rectanglePath(context, group, gx, gy);\n blend(context, group);\n\n if (group.fill && fill(context, group, opacity)) {\n context.fill();\n }\n\n if (group.stroke && !fore && stroke(context, group, opacity)) {\n context.stroke();\n }\n } // setup graphics context, set clip and bounds\n\n\n context.save();\n context.translate(gx, gy);\n if (group.clip) clipGroup(context, group);\n if (bounds) bounds.translate(-gx, -gy); // draw group contents\n\n visit(group, item => {\n this.draw(context, item, bounds);\n }); // restore graphics context\n\n if (bounds) bounds.translate(gx, gy);\n context.restore(); // draw group foreground\n\n if (fore && group.stroke && opacity) {\n rectanglePath(context, group, gx, gy);\n blend(context, group);\n\n if (stroke(context, group, opacity)) {\n context.stroke();\n }\n }\n });\n}\n\nfunction pick(context, scene, x, y, gx, gy) {\n if (scene.bounds && !scene.bounds.contains(gx, gy) || !scene.items) {\n return null;\n }\n\n const cx = x * context.pixelRatio,\n cy = y * context.pixelRatio;\n return pickVisit(scene, group => {\n let hit, dx, dy; // first hit test bounding box\n\n const b = group.bounds;\n if (b && !b.contains(gx, gy)) return; // passed bounds check, test rectangular clip\n\n dx = group.x || 0;\n dy = group.y || 0;\n const dw = dx + (group.width || 0),\n dh = dy + (group.height || 0),\n c = group.clip;\n if (c && (gx < dx || gx > dw || gy < dy || gy > dh)) return; // adjust coordinate system\n\n context.save();\n context.translate(dx, dy);\n dx = gx - dx;\n dy = gy - dy; // test background for rounded corner clip\n\n if (c && hasCornerRadius(group) && !hitCorner(context, group, cx, cy)) {\n context.restore();\n return null;\n }\n\n const fore = group.strokeForeground,\n ix = scene.interactive !== false; // hit test against group foreground\n\n if (ix && fore && group.stroke && hitForeground(context, group, cx, cy)) {\n context.restore();\n return group;\n } // hit test against contained marks\n\n\n hit = pickVisit(group, mark => pickMark(mark, dx, dy) ? this.pick(mark, x, y, dx, dy) : null); // hit test against group background\n\n if (!hit && ix && (group.fill || !fore && group.stroke) && hitBackground(context, group, cx, cy)) {\n hit = group;\n } // restore state and return\n\n\n context.restore();\n return hit || null;\n });\n}\n\nfunction pickMark(mark, x, y) {\n return (mark.interactive !== false || mark.marktype === 'group') && mark.bounds && mark.bounds.contains(x, y);\n}\n\nvar group = {\n type: 'group',\n tag: 'g',\n nested: false,\n attr: attr$5,\n bound: bound$5,\n draw: draw$4,\n pick: pick,\n isect: intersectRect,\n content: content,\n background: background,\n foreground: foreground\n};\n\nvar metadata = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'version': '1.1'\n};\n\nfunction getImage(item, renderer) {\n var image = item.image;\n\n if (!image || item.url && item.url !== image.url) {\n image = {\n complete: false,\n width: 0,\n height: 0\n };\n renderer.loadImage(item.url).then(image => {\n item.image = image;\n item.image.url = item.url;\n });\n }\n\n return image;\n}\n\nfunction imageWidth(item, image) {\n return item.width != null ? item.width : !image || !image.width ? 0 : item.aspect !== false && item.height ? item.height * image.width / image.height : image.width;\n}\n\nfunction imageHeight(item, image) {\n return item.height != null ? item.height : !image || !image.height ? 0 : item.aspect !== false && item.width ? item.width * image.height / image.width : image.height;\n}\n\nfunction imageXOffset(align, w) {\n return align === 'center' ? w / 2 : align === 'right' ? w : 0;\n}\n\nfunction imageYOffset(baseline, h) {\n return baseline === 'middle' ? h / 2 : baseline === 'bottom' ? h : 0;\n}\n\nfunction attr$4(emit, item, renderer) {\n const img = getImage(item, renderer),\n w = imageWidth(item, img),\n h = imageHeight(item, img),\n x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h),\n i = !img.src && img.toDataURL ? img.toDataURL() : img.src || '';\n emit('href', i, metadata['xmlns:xlink'], 'xlink:href');\n emit('transform', translate(x, y));\n emit('width', w);\n emit('height', h);\n emit('preserveAspectRatio', item.aspect === false ? 'none' : 'xMidYMid');\n}\n\nfunction bound$4(bounds, item) {\n const img = item.image,\n w = imageWidth(item, img),\n h = imageHeight(item, img),\n x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h);\n return bounds.set(x, y, x + w, y + h);\n}\n\nfunction draw$3(context, scene, bounds) {\n visit(scene, item => {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n const img = getImage(item, this);\n let w = imageWidth(item, img);\n let h = imageHeight(item, img);\n if (w === 0 || h === 0) return; // early exit\n\n let x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h),\n opacity,\n ar0,\n ar1,\n t;\n\n if (item.aspect !== false) {\n ar0 = img.width / img.height;\n ar1 = item.width / item.height;\n\n if (ar0 === ar0 && ar1 === ar1 && ar0 !== ar1) {\n if (ar1 < ar0) {\n t = w / ar0;\n y += (h - t) / 2;\n h = t;\n } else {\n t = h * ar0;\n x += (w - t) / 2;\n w = t;\n }\n }\n }\n\n if (img.complete || img.toDataURL) {\n blend(context, item);\n context.globalAlpha = (opacity = item.opacity) != null ? opacity : 1;\n context.imageSmoothingEnabled = item.smooth !== false;\n context.drawImage(img, x, y, w, h);\n }\n });\n}\n\nvar image = {\n type: 'image',\n tag: 'image',\n nested: false,\n attr: attr$4,\n bound: bound$4,\n draw: draw$3,\n pick: pick$1(),\n isect: truthy,\n // bounds check is sufficient\n get: getImage,\n xOffset: imageXOffset,\n yOffset: imageYOffset\n};\n\nvar line = markMultiItemPath('line', line$1, pickLine);\n\nfunction attr$3(emit, item) {\n var sx = item.scaleX || 1,\n sy = item.scaleY || 1;\n\n if (sx !== 1 || sy !== 1) {\n emit('vector-effect', 'non-scaling-stroke');\n }\n\n emit('transform', transformItem(item));\n emit('d', item.path);\n}\n\nfunction path$1(context, item) {\n var path = item.path;\n if (path == null) return true;\n var x = item.x || 0,\n y = item.y || 0,\n sx = item.scaleX || 1,\n sy = item.scaleY || 1,\n a = (item.angle || 0) * DegToRad,\n cache = item.pathCache;\n\n if (!cache || cache.path !== path) {\n (item.pathCache = cache = pathParse(path)).path = path;\n }\n\n if (a && context.rotate && context.translate) {\n context.translate(x, y);\n context.rotate(a);\n pathRender(context, cache, 0, 0, sx, sy);\n context.rotate(-a);\n context.translate(-x, -y);\n } else {\n pathRender(context, cache, x, y, sx, sy);\n }\n}\n\nfunction bound$3(bounds, item) {\n return path$1(boundContext(bounds, item.angle), item) ? bounds.set(0, 0, 0, 0) : boundStroke(bounds, item, true);\n}\n\nvar path$2 = {\n type: 'path',\n tag: 'path',\n nested: false,\n attr: attr$3,\n bound: bound$3,\n draw: drawAll(path$1),\n pick: pickPath(path$1),\n isect: intersectPath(path$1)\n};\n\nfunction attr$2(emit, item) {\n emit('d', rectangle(null, item));\n}\n\nfunction bound$2(bounds, item) {\n var x, y;\n return boundStroke(bounds.set(x = item.x || 0, y = item.y || 0, x + item.width || 0, y + item.height || 0), item);\n}\n\nfunction draw$2(context, item) {\n context.beginPath();\n rectangle(context, item);\n}\n\nvar rect = {\n type: 'rect',\n tag: 'path',\n nested: false,\n attr: attr$2,\n bound: bound$2,\n draw: drawAll(draw$2),\n pick: pickPath(draw$2),\n isect: intersectRect\n};\n\nfunction attr$1(emit, item) {\n emit('transform', translateItem(item));\n emit('x2', item.x2 != null ? item.x2 - (item.x || 0) : 0);\n emit('y2', item.y2 != null ? item.y2 - (item.y || 0) : 0);\n}\n\nfunction bound$1(bounds, item) {\n var x1, y1;\n return boundStroke(bounds.set(x1 = item.x || 0, y1 = item.y || 0, item.x2 != null ? item.x2 : x1, item.y2 != null ? item.y2 : y1), item);\n}\n\nfunction path(context, item, opacity) {\n var x1, y1, x2, y2;\n\n if (item.stroke && stroke(context, item, opacity)) {\n x1 = item.x || 0;\n y1 = item.y || 0;\n x2 = item.x2 != null ? item.x2 : x1;\n y2 = item.y2 != null ? item.y2 : y1;\n context.beginPath();\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n return true;\n }\n\n return false;\n}\n\nfunction draw$1(context, scene, bounds) {\n visit(scene, item => {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n var opacity = item.opacity == null ? 1 : item.opacity;\n\n if (opacity && path(context, item, opacity)) {\n blend(context, item);\n context.stroke();\n }\n });\n}\n\nfunction hit$1(context, item, x, y) {\n if (!context.isPointInStroke) return false;\n return path(context, item, 1) && context.isPointInStroke(x, y);\n}\n\nvar rule = {\n type: 'rule',\n tag: 'line',\n nested: false,\n attr: attr$1,\n bound: bound$1,\n draw: draw$1,\n pick: pick$1(hit$1),\n isect: intersectRule\n};\n\nvar shape = markItemPath('shape', shape$1);\n\nvar symbol = markItemPath('symbol', symbol$1, intersectPoint);\n\nconst widthCache = lruCache();\nvar textMetrics = {\n height: fontSize,\n measureWidth: measureWidth,\n estimateWidth: estimateWidth,\n width: estimateWidth,\n canvas: useCanvas\n};\nuseCanvas(true);\n\nfunction useCanvas(use) {\n textMetrics.width = use && context ? measureWidth : estimateWidth;\n} // make simple estimate if no canvas is available\n\n\nfunction estimateWidth(item, text) {\n return _estimateWidth(textValue(item, text), fontSize(item));\n}\n\nfunction _estimateWidth(text, currentFontHeight) {\n return ~~(0.8 * text.length * currentFontHeight);\n} // measure text width if canvas is available\n\n\nfunction measureWidth(item, text) {\n return fontSize(item) <= 0 || !(text = textValue(item, text)) ? 0 : _measureWidth(text, font(item));\n}\n\nfunction _measureWidth(text, currentFont) {\n const key = `(${currentFont}) ${text}`;\n let width = widthCache.get(key);\n\n if (width === undefined) {\n context.font = currentFont;\n width = context.measureText(text).width;\n widthCache.set(key, width);\n }\n\n return width;\n}\n\nfunction fontSize(item) {\n return item.fontSize != null ? +item.fontSize || 0 : 11;\n}\nfunction lineHeight(item) {\n return item.lineHeight != null ? item.lineHeight : fontSize(item) + 2;\n}\n\nfunction lineArray(_) {\n return isArray(_) ? _.length > 1 ? _ : _[0] : _;\n}\n\nfunction textLines(item) {\n return lineArray(item.lineBreak && item.text && !isArray(item.text) ? item.text.split(item.lineBreak) : item.text);\n}\nfunction multiLineOffset(item) {\n const tl = textLines(item);\n return (isArray(tl) ? tl.length - 1 : 0) * lineHeight(item);\n}\nfunction textValue(item, line) {\n const text = line == null ? '' : (line + '').trim();\n return item.limit > 0 && text.length ? truncate(item, text) : text;\n}\n\nfunction widthGetter(item) {\n if (textMetrics.width === measureWidth) {\n // we are using canvas\n const currentFont = font(item);\n return text => _measureWidth(text, currentFont);\n } else {\n // we are relying on estimates\n const currentFontHeight = fontSize(item);\n return text => _estimateWidth(text, currentFontHeight);\n }\n}\n\nfunction truncate(item, text) {\n var limit = +item.limit,\n width = widthGetter(item);\n if (width(text) < limit) return text;\n var ellipsis = item.ellipsis || '\\u2026',\n rtl = item.dir === 'rtl',\n lo = 0,\n hi = text.length,\n mid;\n limit -= width(ellipsis);\n\n if (rtl) {\n while (lo < hi) {\n mid = lo + hi >>> 1;\n if (width(text.slice(mid)) > limit) lo = mid + 1;else hi = mid;\n }\n\n return ellipsis + text.slice(lo);\n } else {\n while (lo < hi) {\n mid = 1 + (lo + hi >>> 1);\n if (width(text.slice(0, mid)) < limit) lo = mid;else hi = mid - 1;\n }\n\n return text.slice(0, lo) + ellipsis;\n }\n}\n\nfunction fontFamily(item, quote) {\n var font = item.font;\n return (quote && font ? String(font).replace(/\"/g, '\\'') : font) || 'sans-serif';\n}\nfunction font(item, quote) {\n return '' + (item.fontStyle ? item.fontStyle + ' ' : '') + (item.fontVariant ? item.fontVariant + ' ' : '') + (item.fontWeight ? item.fontWeight + ' ' : '') + fontSize(item) + 'px ' + fontFamily(item, quote);\n}\nfunction offset(item) {\n // perform our own font baseline calculation\n // why? not all browsers support SVG 1.1 'alignment-baseline' :(\n // this also ensures consistent layout across renderers\n var baseline = item.baseline,\n h = fontSize(item);\n return Math.round(baseline === 'top' ? 0.79 * h : baseline === 'middle' ? 0.30 * h : baseline === 'bottom' ? -0.21 * h : baseline === 'line-top' ? 0.29 * h + 0.5 * lineHeight(item) : baseline === 'line-bottom' ? 0.29 * h - 0.5 * lineHeight(item) : 0);\n}\n\nconst textAlign = {\n 'left': 'start',\n 'center': 'middle',\n 'right': 'end'\n};\nconst tempBounds = new Bounds();\n\nfunction anchorPoint(item) {\n var x = item.x || 0,\n y = item.y || 0,\n r = item.radius || 0,\n t;\n\n if (r) {\n t = (item.theta || 0) - HalfPi;\n x += r * Math.cos(t);\n y += r * Math.sin(t);\n }\n\n tempBounds.x1 = x;\n tempBounds.y1 = y;\n return tempBounds;\n}\n\nfunction attr(emit, item) {\n var dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item),\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n a = item.angle || 0,\n t;\n emit('text-anchor', textAlign[item.align] || 'start');\n\n if (a) {\n t = translate(x, y) + ' ' + rotate(a);\n if (dx || dy) t += ' ' + translate(dx, dy);\n } else {\n t = translate(x + dx, y + dy);\n }\n\n emit('transform', t);\n}\n\nfunction bound(bounds, item, mode) {\n var h = textMetrics.height(item),\n a = item.align,\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item) - Math.round(0.8 * h),\n // use 4/5 offset\n tl = textLines(item),\n w; // get dimensions\n\n if (isArray(tl)) {\n // multi-line text\n h += lineHeight(item) * (tl.length - 1);\n w = tl.reduce((w, t) => Math.max(w, textMetrics.width(item, t)), 0);\n } else {\n // single-line text\n w = textMetrics.width(item, tl);\n } // horizontal alignment\n\n\n if (a === 'center') {\n dx -= w / 2;\n } else if (a === 'right') {\n dx -= w;\n } else ;\n\n bounds.set(dx += x, dy += y, dx + w, dy + h);\n\n if (item.angle && !mode) {\n bounds.rotate(item.angle * DegToRad, x, y);\n } else if (mode === 2) {\n return bounds.rotatedPoints(item.angle * DegToRad, x, y);\n }\n\n return bounds;\n}\n\nfunction draw(context, scene, bounds) {\n visit(scene, item => {\n var opacity = item.opacity == null ? 1 : item.opacity,\n p,\n x,\n y,\n i,\n lh,\n tl,\n str;\n if (bounds && !bounds.intersects(item.bounds) || // bounds check\n opacity === 0 || item.fontSize <= 0 || item.text == null || item.text.length === 0) return;\n context.font = font(item);\n context.textAlign = item.align || 'left';\n p = anchorPoint(item);\n x = p.x1, y = p.y1;\n\n if (item.angle) {\n context.save();\n context.translate(x, y);\n context.rotate(item.angle * DegToRad);\n x = y = 0; // reset x, y\n }\n\n x += item.dx || 0;\n y += (item.dy || 0) + offset(item);\n tl = textLines(item);\n blend(context, item);\n\n if (isArray(tl)) {\n lh = lineHeight(item);\n\n for (i = 0; i < tl.length; ++i) {\n str = textValue(item, tl[i]);\n\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n\n y += lh;\n }\n } else {\n str = textValue(item, tl);\n\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n }\n\n if (item.angle) context.restore();\n });\n}\n\nfunction hit(context, item, x, y, gx, gy) {\n if (item.fontSize <= 0) return false;\n if (!item.angle) return true; // bounds sufficient if no rotation\n // project point into space of unrotated bounds\n\n var p = anchorPoint(item),\n ax = p.x1,\n ay = p.y1,\n b = bound(tempBounds, item, 1),\n a = -item.angle * DegToRad,\n cos = Math.cos(a),\n sin = Math.sin(a),\n px = cos * gx - sin * gy + (ax - cos * ax + sin * ay),\n py = sin * gx + cos * gy + (ay - sin * ax - cos * ay);\n return b.contains(px, py);\n}\n\nfunction intersectText(item, box) {\n const p = bound(tempBounds, item, 2);\n return intersectBoxLine(box, p[0], p[1], p[2], p[3]) || intersectBoxLine(box, p[0], p[1], p[4], p[5]) || intersectBoxLine(box, p[4], p[5], p[6], p[7]) || intersectBoxLine(box, p[2], p[3], p[6], p[7]);\n}\n\nvar text = {\n type: 'text',\n tag: 'text',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick$1(hit),\n isect: intersectText\n};\n\nvar trail = markMultiItemPath('trail', trail$1, pickTrail);\n\nvar Marks = {\n arc: arc,\n area: area,\n group: group,\n image: image,\n line: line,\n path: path$2,\n rect: rect,\n rule: rule,\n shape: shape,\n symbol: symbol,\n text: text,\n trail: trail\n};\n\nfunction boundItem (item, func, opt) {\n var type = Marks[item.mark.marktype],\n bound = func || type.bound;\n if (type.nested) item = item.mark;\n return bound(item.bounds || (item.bounds = new Bounds()), item, opt);\n}\n\nvar DUMMY = {\n mark: null\n};\nfunction boundMark (mark, bounds, opt) {\n var type = Marks[mark.marktype],\n bound = type.bound,\n items = mark.items,\n hasItems = items && items.length,\n i,\n n,\n item,\n b;\n\n if (type.nested) {\n if (hasItems) {\n item = items[0];\n } else {\n // no items, fake it\n DUMMY.mark = mark;\n item = DUMMY;\n }\n\n b = boundItem(item, bound, opt);\n bounds = bounds && bounds.union(b) || b;\n return bounds;\n }\n\n bounds = bounds || mark.bounds && mark.bounds.clear() || new Bounds();\n\n if (hasItems) {\n for (i = 0, n = items.length; i < n; ++i) {\n bounds.union(boundItem(items[i], bound, opt));\n }\n }\n\n return mark.bounds = bounds;\n}\n\nconst keys = ['marktype', 'name', 'role', 'interactive', 'clip', 'items', 'zindex', 'x', 'y', 'width', 'height', 'align', 'baseline', // layout\n'fill', 'fillOpacity', 'opacity', 'blend', // fill\n'stroke', 'strokeOpacity', 'strokeWidth', 'strokeCap', // stroke\n'strokeDash', 'strokeDashOffset', // stroke dash\n'strokeForeground', 'strokeOffset', // group\n'startAngle', 'endAngle', 'innerRadius', 'outerRadius', // arc\n'cornerRadius', 'padAngle', // arc, rect\n'cornerRadiusTopLeft', 'cornerRadiusTopRight', // rect, group\n'cornerRadiusBottomLeft', 'cornerRadiusBottomRight', 'interpolate', 'tension', 'orient', 'defined', // area, line\n'url', 'aspect', 'smooth', // image\n'path', 'scaleX', 'scaleY', // path\n'x2', 'y2', // rule\n'size', 'shape', // symbol\n'text', 'angle', 'theta', 'radius', 'dir', 'dx', 'dy', // text\n'ellipsis', 'limit', 'lineBreak', 'lineHeight', 'font', 'fontSize', 'fontWeight', 'fontStyle', 'fontVariant', // font\n'description', 'aria', 'ariaRole', 'ariaRoleDescription' // aria\n];\nfunction sceneToJSON(scene, indent) {\n return JSON.stringify(scene, keys, indent);\n}\nfunction sceneFromJSON(json) {\n const scene = typeof json === 'string' ? JSON.parse(json) : json;\n return initialize(scene);\n}\n\nfunction initialize(scene) {\n var type = scene.marktype,\n items = scene.items,\n parent,\n i,\n n;\n\n if (items) {\n for (i = 0, n = items.length; i < n; ++i) {\n parent = type ? 'mark' : 'group';\n items[i][parent] = scene;\n if (items[i].zindex) items[i][parent].zdirty = true;\n if ('group' === (type || parent)) initialize(items[i]);\n }\n }\n\n if (type) boundMark(scene);\n return scene;\n}\n\nfunction Scenegraph(scene) {\n if (arguments.length) {\n this.root = sceneFromJSON(scene);\n } else {\n this.root = createMark({\n marktype: 'group',\n name: 'root',\n role: 'frame'\n });\n this.root.items = [new GroupItem(this.root)];\n }\n}\nScenegraph.prototype = {\n toJSON(indent) {\n return sceneToJSON(this.root, indent || 0);\n },\n\n mark(markdef, group, index) {\n group = group || this.root.items[0];\n const mark = createMark(markdef, group);\n group.items[index] = mark;\n if (mark.zindex) mark.group.zdirty = true;\n return mark;\n }\n\n};\n\nfunction createMark(def, group) {\n const mark = {\n bounds: new Bounds(),\n clip: !!def.clip,\n group: group,\n interactive: def.interactive === false ? false : true,\n items: [],\n marktype: def.marktype,\n name: def.name || undefined,\n role: def.role || undefined,\n zindex: def.zindex || 0\n }; // add accessibility properties if defined\n\n if (def.aria != null) {\n mark.aria = def.aria;\n }\n\n if (def.description) {\n mark.description = def.description;\n }\n\n return mark;\n}\n\n// create a new DOM element\nfunction domCreate(doc, tag, ns) {\n if (!doc && typeof document !== 'undefined' && document.createElement) {\n doc = document;\n }\n\n return doc ? ns ? doc.createElementNS(ns, tag) : doc.createElement(tag) : null;\n} // find first child element with matching tag\n\nfunction domFind(el, tag) {\n tag = tag.toLowerCase();\n var nodes = el.childNodes,\n i = 0,\n n = nodes.length;\n\n for (; i < n; ++i) if (nodes[i].tagName.toLowerCase() === tag) {\n return nodes[i];\n }\n} // retrieve child element at given index\n// create & insert if doesn't exist or if tags do not match\n\nfunction domChild(el, index, tag, ns) {\n var a = el.childNodes[index],\n b;\n\n if (!a || a.tagName.toLowerCase() !== tag.toLowerCase()) {\n b = a || null;\n a = domCreate(el.ownerDocument, tag, ns);\n el.insertBefore(a, b);\n }\n\n return a;\n} // remove all child elements at or above the given index\n\nfunction domClear(el, index) {\n var nodes = el.childNodes,\n curr = nodes.length;\n\n while (curr > index) el.removeChild(nodes[--curr]);\n\n return el;\n} // generate css class name for mark\n\nfunction cssClass(mark) {\n return 'mark-' + mark.marktype + (mark.role ? ' role-' + mark.role : '') + (mark.name ? ' ' + mark.name : '');\n}\n\nfunction point (event, el) {\n const rect = el.getBoundingClientRect();\n return [event.clientX - rect.left - (el.clientLeft || 0), event.clientY - rect.top - (el.clientTop || 0)];\n}\n\nfunction resolveItem (item, event, el, origin) {\n var mark = item && item.mark,\n mdef,\n p;\n\n if (mark && (mdef = Marks[mark.marktype]).tip) {\n p = point(event, el);\n p[0] -= origin[0];\n p[1] -= origin[1];\n\n while (item = item.mark.group) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n }\n\n item = mdef.tip(mark.items, p);\n }\n\n return item;\n}\n\n/**\n * Create a new Handler instance.\n * @param {object} [customLoader] - Optional loader instance for\n * href URL sanitization. If not specified, a standard loader\n * instance will be generated.\n * @param {function} [customTooltip] - Optional tooltip handler\n * function for custom tooltip display.\n * @constructor\n */\n\nfunction Handler(customLoader, customTooltip) {\n this._active = null;\n this._handlers = {};\n this._loader = customLoader || loader();\n this._tooltip = customTooltip || defaultTooltip;\n} // The default tooltip display handler.\n// Sets the HTML title attribute on the visualization container.\n\nfunction defaultTooltip(handler, event, item, value) {\n handler.element().setAttribute('title', value || '');\n}\n\nHandler.prototype = {\n /**\n * Initialize a new Handler instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {object} [obj] - Optional context object that should serve as\n * the \"this\" context for event callbacks.\n * @return {Handler} - This handler instance.\n */\n initialize(el, origin, obj) {\n this._el = el;\n this._obj = obj || null;\n return this.origin(origin);\n },\n\n /**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\n element() {\n return this._el;\n },\n\n /**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\n canvas() {\n return this._el && this._el.firstChild;\n },\n\n /**\n * Get / set the origin coordinates of the visualization.\n */\n origin(origin) {\n if (arguments.length) {\n this._origin = origin || [0, 0];\n return this;\n } else {\n return this._origin.slice();\n }\n },\n\n /**\n * Get / set the scenegraph root.\n */\n scene(scene) {\n if (!arguments.length) return this._scene;\n this._scene = scene;\n return this;\n },\n\n /**\n * Add an event handler. Subclasses should override this method.\n */\n on()\n /*type, handler*/\n {},\n\n /**\n * Remove an event handler. Subclasses should override this method.\n */\n off()\n /*type, handler*/\n {},\n\n /**\n * Utility method for finding the array index of an event handler.\n * @param {Array} h - An array of registered event handlers.\n * @param {string} type - The event type.\n * @param {function} handler - The event handler instance to find.\n * @return {number} - The handler's array index or -1 if not registered.\n */\n _handlerIndex(h, type, handler) {\n for (let i = h ? h.length : 0; --i >= 0;) {\n if (h[i].type === type && (!handler || h[i].handler === handler)) {\n return i;\n }\n }\n\n return -1;\n },\n\n /**\n * Returns an array with registered event handlers.\n * @param {string} [type] - The event type to query. Any annotations\n * are ignored; for example, for the argument \"click.foo\", \".foo\" will\n * be ignored and the method returns all \"click\" handlers. If type is\n * null or unspecified, this method returns handlers for all types.\n * @return {Array} - A new array containing all registered event handlers.\n */\n handlers(type) {\n const h = this._handlers,\n a = [];\n\n if (type) {\n a.push(...h[this.eventName(type)]);\n } else {\n for (const k in h) {\n a.push(...h[k]);\n }\n }\n\n return a;\n },\n\n /**\n * Parses an event name string to return the specific event type.\n * For example, given \"click.foo\" returns \"click\"\n * @param {string} name - The input event type string.\n * @return {string} - A string with the event type only.\n */\n eventName(name) {\n const i = name.indexOf('.');\n return i < 0 ? name : name.slice(0, i);\n },\n\n /**\n * Handle hyperlink navigation in response to an item.href value.\n * @param {Event} event - The event triggering hyperlink navigation.\n * @param {Item} item - The scenegraph item.\n * @param {string} href - The URL to navigate to.\n */\n handleHref(event, item, href) {\n this._loader.sanitize(href, {\n context: 'href'\n }).then(opt => {\n const e = new MouseEvent(event.type, event),\n a = domCreate(null, 'a');\n\n for (const name in opt) a.setAttribute(name, opt[name]);\n\n a.dispatchEvent(e);\n }).catch(() => {\n /* do nothing */\n });\n },\n\n /**\n * Handle tooltip display in response to an item.tooltip value.\n * @param {Event} event - The event triggering tooltip display.\n * @param {Item} item - The scenegraph item.\n * @param {boolean} show - A boolean flag indicating whether\n * to show or hide a tooltip for the given item.\n */\n handleTooltip(event, item, show) {\n if (item && item.tooltip != null) {\n item = resolveItem(item, event, this.canvas(), this._origin);\n const value = show && item && item.tooltip || null;\n\n this._tooltip.call(this._obj, this, event, item, value);\n }\n },\n\n /**\n * Returns the size of a scenegraph item and its position relative\n * to the viewport.\n * @param {Item} item - The scenegraph item.\n * @return {object} - A bounding box object (compatible with the\n * DOMRect type) consisting of x, y, width, heigh, top, left,\n * right, and bottom properties.\n */\n getItemBoundingClientRect(item) {\n const el = this.canvas();\n if (!el) return;\n const rect = el.getBoundingClientRect(),\n origin = this._origin,\n bounds = item.bounds,\n width = bounds.width(),\n height = bounds.height();\n let x = bounds.x1 + origin[0] + rect.left,\n y = bounds.y1 + origin[1] + rect.top; // translate coordinate for each parent group\n\n while (item.mark && (item = item.mark.group)) {\n x += item.x || 0;\n y += item.y || 0;\n } // return DOMRect-compatible bounding box\n\n\n return {\n x,\n y,\n width,\n height,\n left: x,\n top: y,\n right: x + width,\n bottom: y + height\n };\n }\n\n};\n\n/**\n * Create a new Renderer instance.\n * @param {object} [loader] - Optional loader instance for\n * image and href URL sanitization. If not specified, a\n * standard loader instance will be generated.\n * @constructor\n */\n\nfunction Renderer(loader) {\n this._el = null;\n this._bgcolor = null;\n this._loader = new ResourceLoader(loader);\n}\nRenderer.prototype = {\n /**\n * Initialize a new Renderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n this._el = el;\n return this.resize(width, height, origin, scaleFactor);\n },\n\n /**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\n element() {\n return this._el;\n },\n\n /**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\n canvas() {\n return this._el && this._el.firstChild;\n },\n\n /**\n * Get / set the background color.\n */\n background(bgcolor) {\n if (arguments.length === 0) return this._bgcolor;\n this._bgcolor = bgcolor;\n return this;\n },\n\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n this._width = width;\n this._height = height;\n this._origin = origin || [0, 0];\n this._scale = scaleFactor || 1;\n return this;\n },\n\n /**\n * Report a dirty item whose bounds should be redrawn.\n * This base class method does nothing. Subclasses that perform\n * incremental should implement this method.\n * @param {Item} item - The dirty item whose bounds should be redrawn.\n */\n dirty()\n /*item*/\n {},\n\n /**\n * Render an input scenegraph, potentially with a set of dirty items.\n * This method will perform an immediate rendering with available resources.\n * The renderer may also need to perform image loading to perform a complete\n * render. This process can lead to asynchronous re-rendering of the scene\n * after this method returns. To receive notification when rendering is\n * complete, use the renderAsync method instead.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Renderer} - This renderer instance.\n */\n render(scene) {\n const r = this; // bind arguments into a render call, and cache it\n // this function may be subsequently called for async redraw\n\n r._call = function () {\n r._render(scene);\n }; // invoke the renderer\n\n\n r._call(); // clear the cached call for garbage collection\n // async redraws will stash their own copy\n\n\n r._call = null;\n return r;\n },\n\n /**\n * Internal rendering method. Renderer subclasses should override this\n * method to actually perform rendering.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\n _render()\n /*scene*/\n {// subclasses to override\n },\n\n /**\n * Asynchronous rendering method. Similar to render, but returns a Promise\n * that resolves when all rendering is completed. Sometimes a renderer must\n * perform image loading to get a complete rendering. The returned\n * Promise will not resolve until this process completes.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Promise} - A Promise that resolves when rendering is complete.\n */\n renderAsync(scene) {\n const r = this.render(scene);\n return this._ready ? this._ready.then(() => r) : Promise.resolve(r);\n },\n\n /**\n * Internal method for asynchronous resource loading.\n * Proxies method calls to the ImageLoader, and tracks loading\n * progress to invoke a re-render once complete.\n * @param {string} method - The method name to invoke on the ImageLoader.\n * @param {string} uri - The URI for the requested resource.\n * @return {Promise} - A Promise that resolves to the requested resource.\n */\n _load(method, uri) {\n var r = this,\n p = r._loader[method](uri);\n\n if (!r._ready) {\n // re-render the scene when loading completes\n const call = r._call;\n r._ready = r._loader.ready().then(redraw => {\n if (redraw) call();\n r._ready = null;\n });\n }\n\n return p;\n },\n\n /**\n * Sanitize a URL to include as a hyperlink in the rendered scene.\n * This method proxies a call to ImageLoader.sanitizeURL, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string to sanitize.\n * @return {Promise} - A Promise that resolves to the sanitized URL.\n */\n sanitizeURL(uri) {\n return this._load('sanitizeURL', uri);\n },\n\n /**\n * Requests an image to include in the rendered scene.\n * This method proxies a call to ImageLoader.loadImage, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string of the image.\n * @return {Promise} - A Promise that resolves to the loaded Image.\n */\n loadImage(uri) {\n return this._load('loadImage', uri);\n }\n\n};\n\nconst KeyDownEvent = 'keydown';\nconst KeyPressEvent = 'keypress';\nconst KeyUpEvent = 'keyup';\nconst DragEnterEvent = 'dragenter';\nconst DragLeaveEvent = 'dragleave';\nconst DragOverEvent = 'dragover';\nconst MouseDownEvent = 'mousedown';\nconst MouseUpEvent = 'mouseup';\nconst MouseMoveEvent = 'mousemove';\nconst MouseOutEvent = 'mouseout';\nconst MouseOverEvent = 'mouseover';\nconst ClickEvent = 'click';\nconst DoubleClickEvent = 'dblclick';\nconst WheelEvent = 'wheel';\nconst MouseWheelEvent = 'mousewheel';\nconst TouchStartEvent = 'touchstart';\nconst TouchMoveEvent = 'touchmove';\nconst TouchEndEvent = 'touchend';\nconst Events = [KeyDownEvent, KeyPressEvent, KeyUpEvent, DragEnterEvent, DragLeaveEvent, DragOverEvent, MouseDownEvent, MouseUpEvent, MouseMoveEvent, MouseOutEvent, MouseOverEvent, ClickEvent, DoubleClickEvent, WheelEvent, MouseWheelEvent, TouchStartEvent, TouchMoveEvent, TouchEndEvent];\nconst TooltipShowEvent = MouseMoveEvent;\nconst TooltipHideEvent = MouseOutEvent;\nconst HrefEvent = ClickEvent;\n\nfunction CanvasHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n this._down = null;\n this._touch = null;\n this._first = true;\n this._events = {};\n}\n\nconst eventBundle = type => type === TouchStartEvent || type === TouchMoveEvent || type === TouchEndEvent ? [TouchStartEvent, TouchMoveEvent, TouchEndEvent] : [type]; // lazily add listeners to the canvas as needed\n\n\nfunction eventListenerCheck(handler, type) {\n eventBundle(type).forEach(_ => addEventListener(handler, _));\n}\n\nfunction addEventListener(handler, type) {\n const canvas = handler.canvas();\n\n if (canvas && !handler._events[type]) {\n handler._events[type] = 1;\n canvas.addEventListener(type, handler[type] ? evt => handler[type](evt) : evt => handler.fire(type, evt));\n }\n}\n\nfunction move(moveEvent, overEvent, outEvent) {\n return function (evt) {\n const a = this._active,\n p = this.pickEvent(evt);\n\n if (p === a) {\n // active item and picked item are the same\n this.fire(moveEvent, evt); // fire move\n } else {\n // active item and picked item are different\n if (!a || !a.exit) {\n // fire out for prior active item\n // suppress if active item was removed from scene\n this.fire(outEvent, evt);\n }\n\n this._active = p; // set new active item\n\n this.fire(overEvent, evt); // fire over for new active item\n\n this.fire(moveEvent, evt); // fire move for new active item\n }\n };\n}\n\nfunction inactive(type) {\n return function (evt) {\n this.fire(type, evt);\n this._active = null;\n };\n}\n\ninherits(CanvasHandler, Handler, {\n initialize(el, origin, obj) {\n this._canvas = el && domFind(el, 'canvas'); // add minimal events required for proper state management\n\n [ClickEvent, MouseDownEvent, MouseMoveEvent, MouseOutEvent, DragLeaveEvent].forEach(type => eventListenerCheck(this, type));\n return Handler.prototype.initialize.call(this, el, origin, obj);\n },\n\n // return the backing canvas instance\n canvas() {\n return this._canvas;\n },\n\n // retrieve the current canvas context\n context() {\n return this._canvas.getContext('2d');\n },\n\n // supported events\n events: Events,\n\n // to keep old versions of firefox happy\n DOMMouseScroll(evt) {\n this.fire(MouseWheelEvent, evt);\n },\n\n mousemove: move(MouseMoveEvent, MouseOverEvent, MouseOutEvent),\n dragover: move(DragOverEvent, DragEnterEvent, DragLeaveEvent),\n mouseout: inactive(MouseOutEvent),\n dragleave: inactive(DragLeaveEvent),\n\n mousedown(evt) {\n this._down = this._active;\n this.fire(MouseDownEvent, evt);\n },\n\n click(evt) {\n if (this._down === this._active) {\n this.fire(ClickEvent, evt);\n this._down = null;\n }\n },\n\n touchstart(evt) {\n this._touch = this.pickEvent(evt.changedTouches[0]);\n\n if (this._first) {\n this._active = this._touch;\n this._first = false;\n }\n\n this.fire(TouchStartEvent, evt, true);\n },\n\n touchmove(evt) {\n this.fire(TouchMoveEvent, evt, true);\n },\n\n touchend(evt) {\n this.fire(TouchEndEvent, evt, true);\n this._touch = null;\n },\n\n // fire an event\n fire(type, evt, touch) {\n const a = touch ? this._touch : this._active,\n h = this._handlers[type]; // set event type relative to scenegraph items\n\n evt.vegaType = type; // handle hyperlinks and tooltips first\n\n if (type === HrefEvent && a && a.href) {\n this.handleHref(evt, a, a.href);\n } else if (type === TooltipShowEvent || type === TooltipHideEvent) {\n this.handleTooltip(evt, a, type !== TooltipHideEvent);\n } // invoke all registered handlers\n\n\n if (h) {\n for (let i = 0, len = h.length; i < len; ++i) {\n h[i].handler.call(this._obj, evt, a);\n }\n }\n },\n\n // add an event handler\n on(type, handler) {\n const name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n\n if (i < 0) {\n eventListenerCheck(this, type);\n (h[name] || (h[name] = [])).push({\n type: type,\n handler: handler\n });\n }\n\n return this;\n },\n\n // remove an event handler\n off(type, handler) {\n const name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n\n if (i >= 0) {\n h.splice(i, 1);\n }\n\n return this;\n },\n\n pickEvent(evt) {\n const p = point(evt, this._canvas),\n o = this._origin;\n return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]);\n },\n\n // find the scenegraph item at the current mouse position\n // x, y -- the absolute x, y mouse coordinates on the canvas element\n // gx, gy -- the relative coordinates within the current group\n pick(scene, x, y, gx, gy) {\n const g = this.context(),\n mark = Marks[scene.marktype];\n return mark.pick.call(this, g, scene, x, y, gx, gy);\n }\n\n});\n\nfunction devicePixelRatio() {\n return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n}\n\nvar pixelRatio = devicePixelRatio();\nfunction resize (canvas, width, height, origin, scaleFactor, opt) {\n const inDOM = typeof HTMLElement !== 'undefined' && canvas instanceof HTMLElement && canvas.parentNode != null,\n context = canvas.getContext('2d'),\n ratio = inDOM ? pixelRatio : scaleFactor;\n canvas.width = width * ratio;\n canvas.height = height * ratio;\n\n for (const key in opt) {\n context[key] = opt[key];\n }\n\n if (inDOM && ratio !== 1) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n\n context.pixelRatio = ratio;\n context.setTransform(ratio, 0, 0, ratio, ratio * origin[0], ratio * origin[1]);\n return canvas;\n}\n\nfunction CanvasRenderer(loader) {\n Renderer.call(this, loader);\n this._options = {};\n this._redraw = false;\n this._dirty = new Bounds();\n this._tempb = new Bounds();\n}\nconst base$1 = Renderer.prototype;\n\nconst viewBounds = (origin, width, height) => new Bounds().set(0, 0, width, height).translate(-origin[0], -origin[1]);\n\nfunction clipToBounds(g, b, origin) {\n // expand bounds by 1 pixel, then round to pixel boundaries\n b.expand(1).round(); // align to base pixel grid in case of non-integer scaling (#2425)\n\n if (g.pixelRatio % 1) {\n b.scale(g.pixelRatio).round().scale(1 / g.pixelRatio);\n } // to avoid artifacts translate if origin has fractional pixels\n\n\n b.translate(-(origin[0] % 1), -(origin[1] % 1)); // set clip path\n\n g.beginPath();\n g.rect(b.x1, b.y1, b.width(), b.height());\n g.clip();\n return b;\n}\n\ninherits(CanvasRenderer, Renderer, {\n initialize(el, width, height, origin, scaleFactor, options) {\n this._options = options || {};\n this._canvas = this._options.externalContext ? null : canvas(1, 1, this._options.type); // instantiate a small canvas\n\n if (el && this._canvas) {\n domClear(el, 0).appendChild(this._canvas);\n\n this._canvas.setAttribute('class', 'marks');\n } // this method will invoke resize to size the canvas appropriately\n\n\n return base$1.initialize.call(this, el, width, height, origin, scaleFactor);\n },\n\n resize(width, height, origin, scaleFactor) {\n base$1.resize.call(this, width, height, origin, scaleFactor);\n\n if (this._canvas) {\n // configure canvas size and transform\n resize(this._canvas, this._width, this._height, this._origin, this._scale, this._options.context);\n } else {\n // external context needs to be scaled and positioned to origin\n const ctx = this._options.externalContext;\n if (!ctx) error('CanvasRenderer is missing a valid canvas or context');\n ctx.scale(this._scale, this._scale);\n ctx.translate(this._origin[0], this._origin[1]);\n }\n\n this._redraw = true;\n return this;\n },\n\n canvas() {\n return this._canvas;\n },\n\n context() {\n return this._options.externalContext || (this._canvas ? this._canvas.getContext('2d') : null);\n },\n\n dirty(item) {\n const b = this._tempb.clear().union(item.bounds);\n\n let g = item.mark.group;\n\n while (g) {\n b.translate(g.x || 0, g.y || 0);\n g = g.mark.group;\n }\n\n this._dirty.union(b);\n },\n\n _render(scene) {\n const g = this.context(),\n o = this._origin,\n w = this._width,\n h = this._height,\n db = this._dirty,\n vb = viewBounds(o, w, h); // setup\n\n g.save();\n const b = this._redraw || db.empty() ? (this._redraw = false, vb.expand(1)) : clipToBounds(g, vb.intersect(db), o);\n this.clear(-o[0], -o[1], w, h); // render\n\n this.draw(g, scene, b); // takedown\n\n g.restore();\n db.clear();\n return this;\n },\n\n draw(ctx, scene, bounds) {\n const mark = Marks[scene.marktype];\n if (scene.clip) clip(ctx, scene);\n mark.draw.call(this, ctx, scene, bounds);\n if (scene.clip) ctx.restore();\n },\n\n clear(x, y, w, h) {\n const opt = this._options,\n g = this.context();\n\n if (opt.type !== 'pdf' && !opt.externalContext) {\n // calling clear rect voids vector output in pdf mode\n // and could remove external context content (#2615)\n g.clearRect(x, y, w, h);\n }\n\n if (this._bgcolor != null) {\n g.fillStyle = this._bgcolor;\n g.fillRect(x, y, w, h);\n }\n }\n\n});\n\nfunction SVGHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n const h = this;\n h._hrefHandler = listener(h, (evt, item) => {\n if (item && item.href) h.handleHref(evt, item, item.href);\n });\n h._tooltipHandler = listener(h, (evt, item) => {\n h.handleTooltip(evt, item, evt.type !== TooltipHideEvent);\n });\n} // wrap an event listener for the SVG DOM\n\nconst listener = (context, handler) => evt => {\n let item = evt.target.__data__;\n item = Array.isArray(item) ? item[0] : item;\n evt.vegaType = evt.type;\n handler.call(context._obj, evt, item);\n};\n\ninherits(SVGHandler, Handler, {\n initialize(el, origin, obj) {\n let svg = this._svg;\n\n if (svg) {\n svg.removeEventListener(HrefEvent, this._hrefHandler);\n svg.removeEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.removeEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n\n this._svg = svg = el && domFind(el, 'svg');\n\n if (svg) {\n svg.addEventListener(HrefEvent, this._hrefHandler);\n svg.addEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.addEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n\n return Handler.prototype.initialize.call(this, el, origin, obj);\n },\n\n canvas() {\n return this._svg;\n },\n\n // add an event handler\n on(type, handler) {\n const name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n\n if (i < 0) {\n const x = {\n type,\n handler,\n listener: listener(this, handler)\n };\n (h[name] || (h[name] = [])).push(x);\n\n if (this._svg) {\n this._svg.addEventListener(name, x.listener);\n }\n }\n\n return this;\n },\n\n // remove an event handler\n off(type, handler) {\n const name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n\n if (i >= 0) {\n if (this._svg) {\n this._svg.removeEventListener(name, h[i].listener);\n }\n\n h.splice(i, 1);\n }\n\n return this;\n }\n\n});\n\nconst ARIA_HIDDEN = 'aria-hidden';\nconst ARIA_LABEL = 'aria-label';\nconst ARIA_ROLE = 'role';\nconst ARIA_ROLEDESCRIPTION = 'aria-roledescription';\nconst GRAPHICS_OBJECT = 'graphics-object';\nconst GRAPHICS_SYMBOL = 'graphics-symbol';\n\nconst bundle = (role, roledesc, label) => ({\n [ARIA_ROLE]: role,\n [ARIA_ROLEDESCRIPTION]: roledesc,\n [ARIA_LABEL]: label || undefined\n}); // these roles are covered by related roles\n// we can ignore them, no need to generate attributes\n\n\nconst AriaIgnore = toSet(['axis-domain', 'axis-grid', 'axis-label', 'axis-tick', 'axis-title', 'legend-band', 'legend-entry', 'legend-gradient', 'legend-label', 'legend-title', 'legend-symbol', 'title']); // aria attribute generators for guide roles\n\nconst AriaGuides = {\n 'axis': {\n desc: 'axis',\n caption: axisCaption\n },\n 'legend': {\n desc: 'legend',\n caption: legendCaption\n },\n 'title-text': {\n desc: 'title',\n caption: item => `Title text '${titleCaption(item)}'`\n },\n 'title-subtitle': {\n desc: 'subtitle',\n caption: item => `Subtitle text '${titleCaption(item)}'`\n }\n}; // aria properties generated for mark item encoding channels\n\nconst AriaEncode = {\n ariaRole: ARIA_ROLE,\n ariaRoleDescription: ARIA_ROLEDESCRIPTION,\n description: ARIA_LABEL\n};\nfunction ariaItemAttributes(emit, item) {\n const hide = item.aria === false;\n emit(ARIA_HIDDEN, hide || undefined);\n\n if (hide || item.description == null) {\n for (const prop in AriaEncode) {\n emit(AriaEncode[prop], undefined);\n }\n } else {\n const type = item.mark.marktype;\n emit(ARIA_LABEL, item.description);\n emit(ARIA_ROLE, item.ariaRole || (type === 'group' ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL));\n emit(ARIA_ROLEDESCRIPTION, item.ariaRoleDescription || `${type} mark`);\n }\n}\nfunction ariaMarkAttributes(mark) {\n return mark.aria === false ? {\n [ARIA_HIDDEN]: true\n } : AriaIgnore[mark.role] ? null : AriaGuides[mark.role] ? ariaGuide(mark, AriaGuides[mark.role]) : ariaMark(mark);\n}\n\nfunction ariaMark(mark) {\n const type = mark.marktype;\n const recurse = type === 'group' || type === 'text' || mark.items.some(_ => _.description != null && _.aria !== false);\n return bundle(recurse ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL, `${type} mark container`, mark.description);\n}\n\nfunction ariaGuide(mark, opt) {\n try {\n const item = mark.items[0],\n caption = opt.caption || (() => '');\n\n return bundle(opt.role || GRAPHICS_SYMBOL, opt.desc, item.description || caption(item));\n } catch (err) {\n return null;\n }\n}\n\nfunction titleCaption(item) {\n return array(item.text).join(' ');\n}\n\nfunction axisCaption(item) {\n const datum = item.datum,\n orient = item.orient,\n title = datum.title ? extractTitle(item) : null,\n ctx = item.context,\n scale = ctx.scales[datum.scale].value,\n locale = ctx.dataflow.locale(),\n type = scale.type,\n xy = orient === 'left' || orient === 'right' ? 'Y' : 'X';\n return `${xy}-axis` + (title ? ` titled '${title}'` : '') + ` for a ${isDiscrete(type) ? 'discrete' : type} scale` + ` with ${domainCaption(locale, scale, item)}`;\n}\n\nfunction legendCaption(item) {\n const datum = item.datum,\n title = datum.title ? extractTitle(item) : null,\n type = `${datum.type || ''} legend`.trim(),\n scales = datum.scales,\n props = Object.keys(scales),\n ctx = item.context,\n scale = ctx.scales[scales[props[0]]].value,\n locale = ctx.dataflow.locale();\n return capitalize(type) + (title ? ` titled '${title}'` : '') + ` for ${channelCaption(props)}` + ` with ${domainCaption(locale, scale, item)}`;\n}\n\nfunction extractTitle(item) {\n try {\n return array(peek(item.items).items[0].text).join(' ');\n } catch (err) {\n return null;\n }\n}\n\nfunction channelCaption(props) {\n props = props.map(p => p + (p === 'fill' || p === 'stroke' ? ' color' : ''));\n return props.length < 2 ? props[0] : props.slice(0, -1).join(', ') + ' and ' + peek(props);\n}\n\nfunction capitalize(s) {\n return s.length ? s[0].toUpperCase() + s.slice(1) : s;\n}\n\nconst innerText = val => (val + '').replace(/&/g, '&').replace(//g, '>');\n\nconst attrText = val => innerText(val).replace(/\"/g, '"').replace(/\\t/g, ' ').replace(/\\n/g, ' ').replace(/\\r/g, ' ');\n\nfunction markup() {\n let buf = '',\n outer = '',\n inner = '';\n\n const stack = [],\n clear = () => outer = inner = '',\n push = tag => {\n if (outer) {\n buf += `${outer}>${inner}`;\n clear();\n }\n\n stack.push(tag);\n },\n attr = (name, value) => {\n if (value != null) outer += ` ${name}=\"${attrText(value)}\"`;\n return m;\n },\n m = {\n open(tag, ...attrs) {\n push(tag);\n outer = '<' + tag;\n\n for (const set of attrs) {\n for (const key in set) attr(key, set[key]);\n }\n\n return m;\n },\n\n close() {\n const tag = stack.pop();\n\n if (outer) {\n buf += outer + (inner ? `>${inner}` : '/>');\n } else {\n buf += ``;\n }\n\n clear();\n return m;\n },\n\n attr,\n text: t => (inner += innerText(t), m),\n toString: () => buf\n };\n\n return m;\n}\nconst serializeXML = node => _serialize(markup(), node) + '';\n\nfunction _serialize(m, node) {\n m.open(node.tagName);\n\n if (node.hasAttributes()) {\n const attrs = node.attributes,\n n = attrs.length;\n\n for (let i = 0; i < n; ++i) {\n m.attr(attrs[i].name, attrs[i].value);\n }\n }\n\n if (node.hasChildNodes()) {\n const children = node.childNodes,\n n = children.length;\n\n for (let i = 0; i < n; i++) {\n const child = children[i];\n child.nodeType === 3 // text node\n ? m.text(child.nodeValue) : _serialize(m, child);\n }\n }\n\n return m.close();\n}\n\nconst styles = {\n fill: 'fill',\n fillOpacity: 'fill-opacity',\n stroke: 'stroke',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n strokeCap: 'stroke-linecap',\n strokeJoin: 'stroke-linejoin',\n strokeDash: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeMiterLimit: 'stroke-miterlimit',\n opacity: 'opacity',\n blend: 'mix-blend-mode'\n}; // ensure miter limit default is consistent with canvas (#2498)\n\nconst rootAttributes = {\n 'fill': 'none',\n 'stroke-miterlimit': 10\n};\n\nconst RootIndex = 0,\n xmlns = 'http://www.w3.org/2000/xmlns/',\n svgns = metadata.xmlns;\nfunction SVGRenderer(loader) {\n Renderer.call(this, loader);\n this._dirtyID = 0;\n this._dirty = [];\n this._svg = null;\n this._root = null;\n this._defs = null;\n}\nconst base = Renderer.prototype;\ninherits(SVGRenderer, Renderer, {\n /**\n * Initialize a new SVGRenderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n // create the svg definitions cache\n this._defs = {};\n\n this._clearDefs();\n\n if (el) {\n this._svg = domChild(el, 0, 'svg', svgns);\n\n this._svg.setAttributeNS(xmlns, 'xmlns', svgns);\n\n this._svg.setAttributeNS(xmlns, 'xmlns:xlink', metadata['xmlns:xlink']);\n\n this._svg.setAttribute('version', metadata['version']);\n\n this._svg.setAttribute('class', 'marks');\n\n domClear(el, 1); // set the svg root group\n\n this._root = domChild(this._svg, RootIndex, 'g', svgns);\n setAttributes(this._root, rootAttributes); // ensure no additional child elements\n\n domClear(this._svg, RootIndex + 1);\n } // set background color if defined\n\n\n this.background(this._bgcolor);\n return base.initialize.call(this, el, width, height, origin, scaleFactor);\n },\n\n /**\n * Get / set the background color.\n */\n background(bgcolor) {\n if (arguments.length && this._svg) {\n this._svg.style.setProperty('background-color', bgcolor);\n }\n\n return base.background.apply(this, arguments);\n },\n\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n base.resize.call(this, width, height, origin, scaleFactor);\n\n if (this._svg) {\n setAttributes(this._svg, {\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: `0 0 ${this._width} ${this._height}`\n });\n\n this._root.setAttribute('transform', `translate(${this._origin})`);\n }\n\n this._dirty = [];\n return this;\n },\n\n /**\n * Returns the SVG element of the visualization.\n * @return {DOMElement} - The SVG element.\n */\n canvas() {\n return this._svg;\n },\n\n /**\n * Returns an SVG text string for the rendered content,\n * or null if this renderer is currently headless.\n */\n svg() {\n const svg = this._svg,\n bg = this._bgcolor;\n if (!svg) return null;\n let node;\n\n if (bg) {\n svg.removeAttribute('style');\n node = domChild(svg, RootIndex, 'rect', svgns);\n setAttributes(node, {\n width: this._width,\n height: this._height,\n fill: bg\n });\n }\n\n const text = serializeXML(svg);\n\n if (bg) {\n svg.removeChild(node);\n\n this._svg.style.setProperty('background-color', bg);\n }\n\n return text;\n },\n\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\n _render(scene) {\n // perform spot updates and re-render markup\n if (this._dirtyCheck()) {\n if (this._dirtyAll) this._clearDefs();\n this.mark(this._root, scene);\n domClear(this._root, 1);\n }\n\n this.defs();\n this._dirty = [];\n ++this._dirtyID;\n return this;\n },\n\n // -- Manage rendering of items marked as dirty --\n\n /**\n * Flag a mark item as dirty.\n * @param {Item} item - The mark item.\n */\n dirty(item) {\n if (item.dirty !== this._dirtyID) {\n item.dirty = this._dirtyID;\n\n this._dirty.push(item);\n }\n },\n\n /**\n * Check if a mark item is considered dirty.\n * @param {Item} item - The mark item.\n */\n isDirty(item) {\n return this._dirtyAll || !item._svg || item.dirty === this._dirtyID;\n },\n\n /**\n * Internal method to check dirty status and, if possible,\n * make targetted updates without a full rendering pass.\n */\n _dirtyCheck() {\n this._dirtyAll = true;\n const items = this._dirty;\n if (!items.length || !this._dirtyID) return true;\n const id = ++this._dirtyID;\n let item, mark, type, mdef, i, n, o;\n\n for (i = 0, n = items.length; i < n; ++i) {\n item = items[i];\n mark = item.mark;\n\n if (mark.marktype !== type) {\n // memoize mark instance lookup\n type = mark.marktype;\n mdef = Marks[type];\n }\n\n if (mark.zdirty && mark.dirty !== id) {\n this._dirtyAll = false;\n dirtyParents(item, id);\n mark.items.forEach(i => {\n i.dirty = id;\n });\n }\n\n if (mark.zdirty) continue; // handle in standard drawing pass\n\n if (item.exit) {\n // EXIT\n if (mdef.nested && mark.items.length) {\n // if nested mark with remaining points, update instead\n o = mark.items[0];\n if (o._svg) this._update(mdef, o._svg, o);\n } else if (item._svg) {\n // otherwise remove from DOM\n o = item._svg.parentNode;\n if (o) o.removeChild(item._svg);\n }\n\n item._svg = null;\n continue;\n }\n\n item = mdef.nested ? mark.items[0] : item;\n if (item._update === id) continue; // already visited\n\n if (!item._svg || !item._svg.ownerSVGElement) {\n // ENTER\n this._dirtyAll = false;\n dirtyParents(item, id);\n } else {\n // IN-PLACE UPDATE\n this._update(mdef, item._svg, item);\n }\n\n item._update = id;\n }\n\n return !this._dirtyAll;\n },\n\n // -- Construct & maintain scenegraph to SVG mapping ---\n\n /**\n * Render a set of mark items.\n * @param {SVGElement} el - The parent element in the SVG tree.\n * @param {object} scene - The mark parent to render.\n * @param {SVGElement} prev - The previous sibling in the SVG tree.\n */\n mark(el, scene, prev) {\n if (!this.isDirty(scene)) return scene._svg;\n const svg = this._svg,\n mdef = Marks[scene.marktype],\n events = scene.interactive === false ? 'none' : null,\n isGroup = mdef.tag === 'g';\n let sibling = null,\n i = 0;\n const parent = bind(scene, el, prev, 'g', svg);\n parent.setAttribute('class', cssClass(scene)); // apply aria attributes to parent container element\n\n const aria = ariaMarkAttributes(scene);\n\n for (const key in aria) setAttribute(parent, key, aria[key]);\n\n if (!isGroup) {\n setAttribute(parent, 'pointer-events', events);\n }\n\n setAttribute(parent, 'clip-path', scene.clip ? clip$1(this, scene, scene.group) : null);\n\n const process = item => {\n const dirty = this.isDirty(item),\n node = bind(item, parent, sibling, mdef.tag, svg);\n\n if (dirty) {\n this._update(mdef, node, item);\n\n if (isGroup) recurse(this, node, item);\n }\n\n sibling = node;\n ++i;\n };\n\n if (mdef.nested) {\n if (scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n }\n\n domClear(parent, i);\n return parent;\n },\n\n /**\n * Update the attributes of an SVG element for a mark item.\n * @param {object} mdef - The mark definition object\n * @param {SVGElement} el - The SVG element.\n * @param {Item} item - The mark item.\n */\n _update(mdef, el, item) {\n // set dom element and values cache\n // provides access to emit method\n element = el;\n values = el.__values__; // apply aria-specific properties\n\n ariaItemAttributes(emit, item); // apply svg attributes\n\n mdef.attr(emit, item, this); // some marks need special treatment\n\n const extra = mark_extras[mdef.type];\n if (extra) extra.call(this, mdef, el, item); // apply svg style attributes\n // note: element state may have been modified by 'extra' method\n\n if (element) this.style(element, item);\n },\n\n /**\n * Update the presentation attributes of an SVG element for a mark item.\n * @param {SVGElement} el - The SVG element.\n * @param {Item} item - The mark item.\n */\n style(el, item) {\n if (item == null) return;\n\n for (const prop in styles) {\n let value = prop === 'font' ? fontFamily(item) : item[prop];\n if (value === values[prop]) continue;\n const name = styles[prop];\n\n if (value == null) {\n el.removeAttribute(name);\n } else {\n if (isGradient(value)) {\n value = gradientRef(value, this._defs.gradient, href());\n }\n\n el.setAttribute(name, value + '');\n }\n\n values[prop] = value;\n }\n },\n\n /**\n * Render SVG defs, as needed.\n * Must be called *after* marks have been processed to ensure the\n * collected state is current and accurate.\n */\n defs() {\n const svg = this._svg,\n defs = this._defs;\n let el = defs.el,\n index = 0;\n\n for (const id in defs.gradient) {\n if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', svgns);\n index = updateGradient(el, defs.gradient[id], index);\n }\n\n for (const id in defs.clipping) {\n if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', svgns);\n index = updateClipping(el, defs.clipping[id], index);\n } // clean-up\n\n\n if (el) {\n index === 0 ? (svg.removeChild(el), defs.el = null) : domClear(el, index);\n }\n },\n\n /**\n * Clear defs caches.\n */\n _clearDefs() {\n const def = this._defs;\n def.gradient = {};\n def.clipping = {};\n }\n\n}); // mark ancestor chain with a dirty id\n\nfunction dirtyParents(item, id) {\n for (; item && item.dirty !== id; item = item.mark.group) {\n item.dirty = id;\n\n if (item.mark && item.mark.dirty !== id) {\n item.mark.dirty = id;\n } else return;\n }\n} // update gradient definitions\n\n\nfunction updateGradient(el, grad, index) {\n let i, n, stop;\n\n if (grad.gradient === 'radial') {\n // SVG radial gradients automatically transform to normalized bbox\n // coordinates, in a way that is cumbersome to replicate in canvas.\n // We wrap the radial gradient in a pattern element, allowing us to\n // maintain a circular gradient that matches what canvas provides.\n let pt = domChild(el, index++, 'pattern', svgns);\n setAttributes(pt, {\n id: patternPrefix + grad.id,\n viewBox: '0,0,1,1',\n width: '100%',\n height: '100%',\n preserveAspectRatio: 'xMidYMid slice'\n });\n pt = domChild(pt, 0, 'rect', svgns);\n setAttributes(pt, {\n width: 1,\n height: 1,\n fill: `url(${href()}#${grad.id})`\n });\n el = domChild(el, index++, 'radialGradient', svgns);\n setAttributes(el, {\n id: grad.id,\n fx: grad.x1,\n fy: grad.y1,\n fr: grad.r1,\n cx: grad.x2,\n cy: grad.y2,\n r: grad.r2\n });\n } else {\n el = domChild(el, index++, 'linearGradient', svgns);\n setAttributes(el, {\n id: grad.id,\n x1: grad.x1,\n x2: grad.x2,\n y1: grad.y1,\n y2: grad.y2\n });\n }\n\n for (i = 0, n = grad.stops.length; i < n; ++i) {\n stop = domChild(el, i, 'stop', svgns);\n stop.setAttribute('offset', grad.stops[i].offset);\n stop.setAttribute('stop-color', grad.stops[i].color);\n }\n\n domClear(el, i);\n return index;\n} // update clipping path definitions\n\n\nfunction updateClipping(el, clip, index) {\n let mask;\n el = domChild(el, index, 'clipPath', svgns);\n el.setAttribute('id', clip.id);\n\n if (clip.path) {\n mask = domChild(el, 0, 'path', svgns);\n mask.setAttribute('d', clip.path);\n } else {\n mask = domChild(el, 0, 'rect', svgns);\n setAttributes(mask, {\n x: 0,\n y: 0,\n width: clip.width,\n height: clip.height\n });\n }\n\n domClear(el, 1);\n return index + 1;\n} // Recursively process group contents.\n\n\nfunction recurse(renderer, el, group) {\n el = el.lastChild.previousSibling;\n let prev,\n idx = 0;\n visit(group, item => {\n prev = renderer.mark(el, item, prev);\n ++idx;\n }); // remove any extraneous DOM elements\n\n domClear(el, 1 + idx);\n} // Bind a scenegraph item to an SVG DOM element.\n// Create new SVG elements as needed.\n\n\nfunction bind(item, el, sibling, tag, svg) {\n let node = item._svg,\n doc; // create a new dom node if needed\n\n if (!node) {\n doc = el.ownerDocument;\n node = domCreate(doc, tag, svgns);\n item._svg = node;\n\n if (item.mark) {\n node.__data__ = item;\n node.__values__ = {\n fill: 'default'\n }; // if group, create background, content, and foreground elements\n\n if (tag === 'g') {\n const bg = domCreate(doc, 'path', svgns);\n node.appendChild(bg);\n bg.__data__ = item;\n const cg = domCreate(doc, 'g', svgns);\n node.appendChild(cg);\n cg.__data__ = item;\n const fg = domCreate(doc, 'path', svgns);\n node.appendChild(fg);\n fg.__data__ = item;\n fg.__values__ = {\n fill: 'default'\n };\n }\n }\n } // (re-)insert if (a) not contained in SVG or (b) sibling order has changed\n\n\n if (node.ownerSVGElement !== svg || siblingCheck(node, sibling)) {\n el.insertBefore(node, sibling ? sibling.nextSibling : el.firstChild);\n }\n\n return node;\n} // check if two nodes are ordered siblings\n\n\nfunction siblingCheck(node, sibling) {\n return node.parentNode && node.parentNode.childNodes.length > 1 && node.previousSibling != sibling; // treat null/undefined the same\n} // -- Set attributes & styles on SVG elements ---\n\n\nlet element = null,\n // temp var for current SVG element\nvalues = null; // temp var for current values hash\n// Extra configuration for certain mark types\n\nconst mark_extras = {\n group(mdef, el, item) {\n const fg = element = el.childNodes[2];\n values = fg.__values__;\n mdef.foreground(emit, item, this);\n values = el.__values__; // use parent's values hash\n\n element = el.childNodes[1];\n mdef.content(emit, item, this);\n const bg = element = el.childNodes[0];\n mdef.background(emit, item, this);\n const value = item.mark.interactive === false ? 'none' : null;\n\n if (value !== values.events) {\n setAttribute(fg, 'pointer-events', value);\n setAttribute(bg, 'pointer-events', value);\n values.events = value;\n }\n\n if (item.strokeForeground && item.stroke) {\n const fill = item.fill;\n setAttribute(fg, 'display', null); // set style of background\n\n this.style(bg, item);\n setAttribute(bg, 'stroke', null); // set style of foreground\n\n if (fill) item.fill = null;\n values = fg.__values__;\n this.style(fg, item);\n if (fill) item.fill = fill; // leave element null to prevent downstream styling\n\n element = null;\n } else {\n // ensure foreground is ignored\n setAttribute(fg, 'display', 'none');\n }\n },\n\n image(mdef, el, item) {\n if (item.smooth === false) {\n setStyle(el, 'image-rendering', 'optimizeSpeed');\n setStyle(el, 'image-rendering', 'pixelated');\n } else {\n setStyle(el, 'image-rendering', null);\n }\n },\n\n text(mdef, el, item) {\n const tl = textLines(item);\n let key, value, doc, lh;\n\n if (isArray(tl)) {\n // multi-line text\n value = tl.map(_ => textValue(item, _));\n key = value.join('\\n'); // content cache key\n\n if (key !== values.text) {\n domClear(el, 0);\n doc = el.ownerDocument;\n lh = lineHeight(item);\n value.forEach((t, i) => {\n const ts = domCreate(doc, 'tspan', svgns);\n ts.__data__ = item; // data binding\n\n ts.textContent = t;\n\n if (i) {\n ts.setAttribute('x', 0);\n ts.setAttribute('dy', lh);\n }\n\n el.appendChild(ts);\n });\n values.text = key;\n }\n } else {\n // single-line text\n value = textValue(item, tl);\n\n if (value !== values.text) {\n el.textContent = value;\n values.text = value;\n }\n }\n\n setAttribute(el, 'font-family', fontFamily(item));\n setAttribute(el, 'font-size', fontSize(item) + 'px');\n setAttribute(el, 'font-style', item.fontStyle);\n setAttribute(el, 'font-variant', item.fontVariant);\n setAttribute(el, 'font-weight', item.fontWeight);\n }\n\n};\n\nfunction emit(name, value, ns) {\n // early exit if value is unchanged\n if (value === values[name]) return; // use appropriate method given namespace (ns)\n\n if (ns) {\n setAttributeNS(element, name, value, ns);\n } else {\n setAttribute(element, name, value);\n } // note current value for future comparison\n\n\n values[name] = value;\n}\n\nfunction setStyle(el, name, value) {\n if (value !== values[name]) {\n if (value == null) {\n el.style.removeProperty(name);\n } else {\n el.style.setProperty(name, value + '');\n }\n\n values[name] = value;\n }\n}\n\nfunction setAttributes(el, attrs) {\n for (const key in attrs) {\n setAttribute(el, key, attrs[key]);\n }\n}\n\nfunction setAttribute(el, name, value) {\n if (value != null) {\n // if value is provided, update DOM attribute\n el.setAttribute(name, value);\n } else {\n // else remove DOM attribute\n el.removeAttribute(name);\n }\n}\n\nfunction setAttributeNS(el, name, value, ns) {\n if (value != null) {\n // if value is provided, update DOM attribute\n el.setAttributeNS(ns, name, value);\n } else {\n // else remove DOM attribute\n el.removeAttributeNS(ns, name);\n }\n}\n\nfunction href() {\n let loc;\n return typeof window === 'undefined' ? '' : (loc = window.location).hash ? loc.href.slice(0, -loc.hash.length) : loc.href;\n}\n\nfunction SVGStringRenderer(loader) {\n Renderer.call(this, loader);\n this._text = null;\n this._defs = {\n gradient: {},\n clipping: {}\n };\n}\ninherits(SVGStringRenderer, Renderer, {\n /**\n * Returns the rendered SVG text string,\n * or null if rendering has not yet occurred.\n */\n svg() {\n return this._text;\n },\n\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\n _render(scene) {\n const m = markup(); // svg tag\n\n m.open('svg', extend({}, metadata, {\n class: 'marks',\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: `0 0 ${this._width} ${this._height}`\n })); // background, if defined\n\n const bg = this._bgcolor;\n\n if (bg && bg !== 'transparent' && bg !== 'none') {\n m.open('rect', {\n width: this._width,\n height: this._height,\n fill: bg\n }).close();\n } // root content group\n\n\n m.open('g', rootAttributes, {\n transform: 'translate(' + this._origin + ')'\n });\n this.mark(m, scene);\n m.close(); // \n // defs\n\n this.defs(m); // get SVG text string\n\n this._text = m.close() + '';\n return this;\n },\n\n /**\n * Render a set of mark items.\n * @param {object} m - The markup context.\n * @param {object} scene - The mark parent to render.\n */\n mark(m, scene) {\n const mdef = Marks[scene.marktype],\n tag = mdef.tag,\n attrList = [ariaItemAttributes, mdef.attr]; // render opening group tag\n\n m.open('g', {\n 'class': cssClass(scene),\n 'clip-path': scene.clip ? clip$1(this, scene, scene.group) : null\n }, ariaMarkAttributes(scene), {\n 'pointer-events': tag !== 'g' && scene.interactive === false ? 'none' : null\n }); // render contained elements\n\n const process = item => {\n const href = this.href(item);\n if (href) m.open('a', href);\n m.open(tag, this.attr(scene, item, attrList, tag !== 'g' ? tag : null));\n\n if (tag === 'text') {\n const tl = textLines(item);\n\n if (isArray(tl)) {\n // multi-line text\n const attrs = {\n x: 0,\n dy: lineHeight(item)\n };\n\n for (let i = 0; i < tl.length; ++i) {\n m.open('tspan', i ? attrs : null).text(textValue(item, tl[i])).close();\n }\n } else {\n // single-line text\n m.text(textValue(item, tl));\n }\n } else if (tag === 'g') {\n const fore = item.strokeForeground,\n fill = item.fill,\n stroke = item.stroke;\n\n if (fore && stroke) {\n item.stroke = null;\n }\n\n m.open('path', this.attr(scene, item, mdef.background, 'bgrect')).close(); // recurse for group content\n\n m.open('g', this.attr(scene, item, mdef.content));\n visit(item, scene => this.mark(m, scene));\n m.close();\n\n if (fore && stroke) {\n if (fill) item.fill = null;\n item.stroke = stroke;\n m.open('path', this.attr(scene, item, mdef.foreground, 'bgrect')).close();\n if (fill) item.fill = fill;\n } else {\n m.open('path', this.attr(scene, item, mdef.foreground, 'bgfore')).close();\n }\n }\n\n m.close(); // \n\n if (href) m.close(); // \n };\n\n if (mdef.nested) {\n if (scene.items && scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n } // render closing group tag\n\n\n return m.close(); // \n },\n\n /**\n * Get href attributes for a hyperlinked mark item.\n * @param {Item} item - The mark item.\n */\n href(item) {\n const href = item.href;\n let attr;\n\n if (href) {\n if (attr = this._hrefs && this._hrefs[href]) {\n return attr;\n } else {\n this.sanitizeURL(href).then(attr => {\n // rewrite to use xlink namespace\n attr['xlink:href'] = attr.href;\n attr.href = null;\n (this._hrefs || (this._hrefs = {}))[href] = attr;\n });\n }\n }\n\n return null;\n },\n\n /**\n * Get an object of SVG attributes for a mark item.\n * @param {object} scene - The mark parent.\n * @param {Item} item - The mark item.\n * @param {array|function} attrs - One or more attribute emitters.\n * @param {string} tag - The tag being rendered.\n */\n attr(scene, item, attrs, tag) {\n const object = {},\n emit = (name, value, ns, prefixed) => {\n object[prefixed || name] = value;\n }; // apply mark specific attributes\n\n\n if (Array.isArray(attrs)) {\n attrs.forEach(fn => fn(emit, item, this));\n } else {\n attrs(emit, item, this);\n } // apply style attributes\n\n\n if (tag) {\n style(object, item, scene, tag, this._defs);\n }\n\n return object;\n },\n\n /**\n * Render SVG defs, as needed.\n * Must be called *after* marks have been processed to ensure the\n * collected state is current and accurate.\n * @param {object} m - The markup context.\n */\n defs(m) {\n const gradient = this._defs.gradient,\n clipping = this._defs.clipping,\n count = Object.keys(gradient).length + Object.keys(clipping).length;\n if (count === 0) return; // nothing to do\n\n m.open('defs');\n\n for (const id in gradient) {\n const def = gradient[id],\n stops = def.stops;\n\n if (def.gradient === 'radial') {\n // SVG radial gradients automatically transform to normalized bbox\n // coordinates, in a way that is cumbersome to replicate in canvas.\n // We wrap the radial gradient in a pattern element, allowing us to\n // maintain a circular gradient that matches what canvas provides.\n m.open('pattern', {\n id: patternPrefix + id,\n viewBox: '0,0,1,1',\n width: '100%',\n height: '100%',\n preserveAspectRatio: 'xMidYMid slice'\n });\n m.open('rect', {\n width: '1',\n height: '1',\n fill: 'url(#' + id + ')'\n }).close();\n m.close(); // \n\n m.open('radialGradient', {\n id: id,\n fx: def.x1,\n fy: def.y1,\n fr: def.r1,\n cx: def.x2,\n cy: def.y2,\n r: def.r2\n });\n } else {\n m.open('linearGradient', {\n id: id,\n x1: def.x1,\n x2: def.x2,\n y1: def.y1,\n y2: def.y2\n });\n }\n\n for (let i = 0; i < stops.length; ++i) {\n m.open('stop', {\n offset: stops[i].offset,\n 'stop-color': stops[i].color\n }).close();\n }\n\n m.close();\n }\n\n for (const id in clipping) {\n const def = clipping[id];\n m.open('clipPath', {\n id: id\n });\n\n if (def.path) {\n m.open('path', {\n d: def.path\n }).close();\n } else {\n m.open('rect', {\n x: 0,\n y: 0,\n width: def.width,\n height: def.height\n }).close();\n }\n\n m.close();\n }\n\n m.close();\n }\n\n}); // Helper function for attr for style presentation attributes\n\nfunction style(s, item, scene, tag, defs) {\n if (item == null) return s;\n\n if (tag === 'bgrect' && scene.interactive === false) {\n s['pointer-events'] = 'none';\n }\n\n if (tag === 'bgfore') {\n if (scene.interactive === false) {\n s['pointer-events'] = 'none';\n }\n\n s.display = 'none';\n if (item.fill !== null) return s;\n }\n\n if (tag === 'image' && item.smooth === false) {\n s.style = 'image-rendering: optimizeSpeed; image-rendering: pixelated;';\n }\n\n if (tag === 'text') {\n s['font-family'] = fontFamily(item);\n s['font-size'] = fontSize(item) + 'px';\n s['font-style'] = item.fontStyle;\n s['font-variant'] = item.fontVariant;\n s['font-weight'] = item.fontWeight;\n }\n\n for (const prop in styles) {\n let value = item[prop];\n const name = styles[prop];\n\n if (value === 'transparent' && (name === 'fill' || name === 'stroke')) ; else if (value != null) {\n if (isGradient(value)) {\n value = gradientRef(value, defs.gradient, '');\n }\n\n s[name] = value;\n }\n }\n\n return s;\n}\n\nconst Canvas = 'canvas';\nconst PNG = 'png';\nconst SVG = 'svg';\nconst None = 'none';\nconst RenderType = {\n Canvas: Canvas,\n PNG: PNG,\n SVG: SVG,\n None: None\n};\nconst modules = {};\nmodules[Canvas] = modules[PNG] = {\n renderer: CanvasRenderer,\n headless: CanvasRenderer,\n handler: CanvasHandler\n};\nmodules[SVG] = {\n renderer: SVGRenderer,\n headless: SVGStringRenderer,\n handler: SVGHandler\n};\nmodules[None] = {};\nfunction renderModule(name, _) {\n name = String(name || '').toLowerCase();\n\n if (arguments.length > 1) {\n modules[name] = _;\n return this;\n } else {\n return modules[name];\n }\n}\n\nfunction intersect(scene, bounds, filter) {\n const hits = [],\n // intersection results\n box = new Bounds().union(bounds),\n // defensive copy\n type = scene.marktype;\n return type ? intersectMark(scene, box, filter, hits) : type === 'group' ? intersectGroup(scene, box, filter, hits) : error('Intersect scene must be mark node or group item.');\n}\n\nfunction intersectMark(mark, box, filter, hits) {\n if (visitMark(mark, box, filter)) {\n const items = mark.items,\n type = mark.marktype,\n n = items.length;\n let i = 0;\n\n if (type === 'group') {\n for (; i < n; ++i) {\n intersectGroup(items[i], box, filter, hits);\n }\n } else {\n for (const test = Marks[type].isect; i < n; ++i) {\n const item = items[i];\n if (intersectItem(item, box, test)) hits.push(item);\n }\n }\n }\n\n return hits;\n}\n\nfunction visitMark(mark, box, filter) {\n // process if bounds intersect and if\n // (1) mark is a group mark (so we must recurse), or\n // (2) mark is interactive and passes filter\n return mark.bounds && box.intersects(mark.bounds) && (mark.marktype === 'group' || mark.interactive !== false && (!filter || filter(mark)));\n}\n\nfunction intersectGroup(group, box, filter, hits) {\n // test intersect against group\n // skip groups by default unless filter says otherwise\n if (filter && filter(group.mark) && intersectItem(group, box, Marks.group.isect)) {\n hits.push(group);\n } // recursively test children marks\n // translate box to group coordinate space\n\n\n const marks = group.items,\n n = marks && marks.length;\n\n if (n) {\n const x = group.x || 0,\n y = group.y || 0;\n box.translate(-x, -y);\n\n for (let i = 0; i < n; ++i) {\n intersectMark(marks[i], box, filter, hits);\n }\n\n box.translate(x, y);\n }\n\n return hits;\n}\n\nfunction intersectItem(item, box, test) {\n // test bounds enclosure, bounds intersection, then detailed test\n const bounds = item.bounds;\n return box.encloses(bounds) || box.intersects(bounds) && test(item, box);\n}\n\nconst clipBounds = new Bounds();\nfunction boundClip (mark) {\n const clip = mark.clip;\n\n if (isFunction(clip)) {\n clip(boundContext(clipBounds.clear()));\n } else if (clip) {\n clipBounds.set(0, 0, mark.group.width, mark.group.height);\n } else return;\n\n mark.bounds.intersect(clipBounds);\n}\n\nconst TOLERANCE = 1e-9;\nfunction sceneEqual(a, b, key) {\n return a === b ? true : key === 'path' ? pathEqual(a, b) : a instanceof Date && b instanceof Date ? +a === +b : isNumber(a) && isNumber(b) ? Math.abs(a - b) <= TOLERANCE : !a || !b || !isObject(a) && !isObject(b) ? a == b : objectEqual(a, b);\n}\nfunction pathEqual(a, b) {\n return sceneEqual(pathParse(a), pathParse(b));\n}\n\nfunction objectEqual(a, b) {\n var ka = Object.keys(a),\n kb = Object.keys(b),\n key,\n i;\n if (ka.length !== kb.length) return false;\n ka.sort();\n kb.sort();\n\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) return false;\n }\n\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!sceneEqual(a[key], b[key], key)) return false;\n }\n\n return typeof a === typeof b;\n}\n\nfunction resetSVGDefIds() {\n resetSVGClipId();\n resetSVGGradientId();\n}\n\nexport { Bounds, CanvasHandler, CanvasRenderer, Gradient, GroupItem, Handler, Item, Marks, RenderType, Renderer, ResourceLoader, SVGHandler, SVGRenderer, SVGStringRenderer, Scenegraph, boundClip, boundContext, boundItem, boundMark, boundStroke, domChild, domClear, domCreate, domFind, font, fontFamily, fontSize, intersect, intersectBoxLine, intersectPath, intersectPoint, intersectRule, lineHeight, markup, multiLineOffset, curves as pathCurves, pathEqual, pathParse, vg_rect as pathRectangle, pathRender, symbols as pathSymbols, vg_trail as pathTrail, point, renderModule, resetSVGClipId, resetSVGDefIds, sceneEqual, sceneFromJSON, pickVisit as scenePickVisit, sceneToJSON, visit as sceneVisit, zorder as sceneZOrder, serializeXML, textMetrics };\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport star from \"./symbol/star.js\";\nimport square from \"./symbol/square.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport wye from \"./symbol/wye.js\";\nimport constant from \"./constant.js\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function(type, size) {\n var context = null;\n type = typeof type === \"function\" ? type : constant(type || circle);\n size = typeof size === \"function\" ? size : constant(size === undefined ? 64 : +size);\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","import { Transform } from 'vega-dataflow';\nimport { Marks, boundClip, GroupItem, Item, Bounds, multiLineOffset, boundStroke } from 'vega-scenegraph';\nimport { inherits, peek, isObject } from 'vega-util';\n\nconst Top = 'top';\nconst Left = 'left';\nconst Right = 'right';\nconst Bottom = 'bottom';\nconst TopLeft = 'top-left';\nconst TopRight = 'top-right';\nconst BottomLeft = 'bottom-left';\nconst BottomRight = 'bottom-right';\nconst Start = 'start';\nconst Middle = 'middle';\nconst End = 'end';\nconst X = 'x';\nconst Y = 'y';\nconst Group = 'group';\nconst AxisRole = 'axis';\nconst TitleRole = 'title';\nconst FrameRole = 'frame';\nconst ScopeRole = 'scope';\nconst LegendRole = 'legend';\nconst RowHeader = 'row-header';\nconst RowFooter = 'row-footer';\nconst RowTitle = 'row-title';\nconst ColHeader = 'column-header';\nconst ColFooter = 'column-footer';\nconst ColTitle = 'column-title';\nconst Padding = 'padding';\nconst Symbols = 'symbol';\nconst Fit = 'fit';\nconst FitX = 'fit-x';\nconst FitY = 'fit-y';\nconst Pad = 'pad';\nconst None = 'none';\nconst All = 'all';\nconst Each = 'each';\nconst Flush = 'flush';\nconst Column = 'column';\nconst Row = 'row';\n\n/**\n * Calculate bounding boxes for scenegraph items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - The scenegraph mark instance to bound.\n */\n\nfunction Bound(params) {\n Transform.call(this, null, params);\n}\ninherits(Bound, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow,\n mark = _.mark,\n type = mark.marktype,\n entry = Marks[type],\n bound = entry.bound;\n let markBounds = mark.bounds,\n rebound;\n\n if (entry.nested) {\n // multi-item marks have a single bounds instance\n if (mark.items.length) view.dirty(mark.items[0]);\n markBounds = boundItem(mark, bound);\n mark.items.forEach(item => {\n item.bounds.clear().union(markBounds);\n });\n } else if (type === Group || _.modified()) {\n // operator parameters modified -> re-bound all items\n // updates group bounds in response to modified group content\n pulse.visit(pulse.MOD, item => view.dirty(item));\n markBounds.clear();\n mark.items.forEach(item => markBounds.union(boundItem(item, bound))); // force reflow for axes/legends/titles to propagate any layout changes\n\n switch (mark.role) {\n case AxisRole:\n case LegendRole:\n case TitleRole:\n pulse.reflow();\n }\n } else {\n // incrementally update bounds, re-bound mark as needed\n rebound = pulse.changed(pulse.REM);\n pulse.visit(pulse.ADD, item => {\n markBounds.union(boundItem(item, bound));\n });\n pulse.visit(pulse.MOD, item => {\n rebound = rebound || markBounds.alignsWith(item.bounds);\n view.dirty(item);\n markBounds.union(boundItem(item, bound));\n });\n\n if (rebound) {\n markBounds.clear();\n mark.items.forEach(item => markBounds.union(item.bounds));\n }\n } // ensure mark bounds do not exceed any clipping region\n\n\n boundClip(mark);\n return pulse.modifies('bounds');\n }\n\n});\n\nfunction boundItem(item, bound, opt) {\n return bound(item.bounds.clear(), item, opt);\n}\n\nconst COUNTER_NAME = ':vega_identifier:';\n/**\n * Adds a unique identifier to all added tuples.\n * This transform creates a new signal that serves as an id counter.\n * As a result, the id counter is shared across all instances of this\n * transform, generating unique ids across multiple data streams. In\n * addition, this signal value can be included in a snapshot of the\n * dataflow state, enabling correct resumption of id allocation.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.as - The field name for the generated identifier.\n */\n\nfunction Identifier(params) {\n Transform.call(this, 0, params);\n}\nIdentifier.Definition = {\n 'type': 'Identifier',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'as',\n 'type': 'string',\n 'required': true\n }]\n};\ninherits(Identifier, Transform, {\n transform(_, pulse) {\n const counter = getCounter(pulse.dataflow),\n as = _.as;\n let id = counter.value;\n pulse.visit(pulse.ADD, t => t[as] = t[as] || ++id);\n counter.set(this.value = id);\n return pulse;\n }\n\n});\n\nfunction getCounter(view) {\n return view._signals[COUNTER_NAME] || (view._signals[COUNTER_NAME] = view.add(0));\n}\n\n/**\n * Bind scenegraph items to a scenegraph mark instance.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.markdef - The mark definition for creating the mark.\n * This is an object of legal scenegraph mark properties which *must* include\n * the 'marktype' property.\n */\n\nfunction Mark(params) {\n Transform.call(this, null, params);\n}\ninherits(Mark, Transform, {\n transform(_, pulse) {\n let mark = this.value; // acquire mark on first invocation, bind context and group\n\n if (!mark) {\n mark = pulse.dataflow.scenegraph().mark(_.markdef, lookup$1(_), _.index);\n mark.group.context = _.context;\n if (!_.context.group) _.context.group = mark.group;\n mark.source = this.source; // point to upstream collector\n\n mark.clip = _.clip;\n mark.interactive = _.interactive;\n this.value = mark;\n } // initialize entering items\n\n\n const Init = mark.marktype === Group ? GroupItem : Item;\n pulse.visit(pulse.ADD, item => Init.call(item, mark)); // update clipping and/or interactive status\n\n if (_.modified('clip') || _.modified('interactive')) {\n mark.clip = _.clip;\n mark.interactive = !!_.interactive;\n mark.zdirty = true; // force scenegraph re-eval\n\n pulse.reflow();\n } // bind items array to scenegraph mark\n\n\n mark.items = pulse.source;\n return pulse;\n }\n\n});\n\nfunction lookup$1(_) {\n const g = _.groups,\n p = _.parent;\n return g && g.size === 1 ? g.get(Object.keys(g.object)[0]) : g && p ? g.lookup(p) : null;\n}\n\n/**\n * Analyze items for overlap, changing opacity to hide items with\n * overlapping bounding boxes. This transform will preserve at least\n * two items (e.g., first and last) even if overlap persists.\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting items.\n * @param {object} [params.method] - The overlap removal method to apply.\n * One of 'parity' (default, hide every other item until there is no\n * more overlap) or 'greedy' (sequentially scan and hide and items that\n * overlap with the last visible item).\n * @param {object} [params.boundScale] - A scale whose range should be used\n * to bound the items. Items exceeding the bounds of the scale range\n * will be treated as overlapping. If null or undefined, no bounds check\n * will be applied.\n * @param {object} [params.boundOrient] - The orientation of the scale\n * (top, bottom, left, or right) used to bound items. This parameter is\n * ignored if boundScale is null or undefined.\n * @param {object} [params.boundTolerance] - The tolerance in pixels for\n * bound inclusion testing (default 1). This specifies by how many pixels\n * an item's bounds may exceed the scale range bounds and not be culled.\n * @constructor\n */\n\nfunction Overlap(params) {\n Transform.call(this, null, params);\n}\nconst methods = {\n parity: items => items.filter((item, i) => i % 2 ? item.opacity = 0 : 1),\n greedy: (items, sep) => {\n let a;\n return items.filter((b, i) => !i || !intersect(a.bounds, b.bounds, sep) ? (a = b, 1) : b.opacity = 0);\n }\n}; // compute bounding box intersection\n// including padding pixels of separation\n\nconst intersect = (a, b, sep) => sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\n\nconst hasOverlap = (items, pad) => {\n for (var i = 1, n = items.length, a = items[0].bounds, b; i < n; a = b, ++i) {\n if (intersect(a, b = items[i].bounds, pad)) return true;\n }\n};\n\nconst hasBounds = item => {\n const b = item.bounds;\n return b.width() > 1 && b.height() > 1;\n};\n\nconst boundTest = (scale, orient, tolerance) => {\n var range = scale.range(),\n b = new Bounds();\n\n if (orient === Top || orient === Bottom) {\n b.set(range[0], -Infinity, range[1], +Infinity);\n } else {\n b.set(-Infinity, range[0], +Infinity, range[1]);\n }\n\n b.expand(tolerance || 1);\n return item => b.encloses(item.bounds);\n}; // reset all items to be fully opaque\n\n\nconst reset = source => {\n source.forEach(item => item.opacity = 1);\n return source;\n}; // add all tuples to mod, fork pulse if parameters were modified\n// fork prevents cross-stream tuple pollution (e.g., pulse from scale)\n\n\nconst reflow = (pulse, _) => pulse.reflow(_.modified()).modifies('opacity');\n\ninherits(Overlap, Transform, {\n transform(_, pulse) {\n const reduce = methods[_.method] || methods.parity,\n sep = _.separation || 0;\n let source = pulse.materialize(pulse.SOURCE).source,\n items,\n test;\n if (!source || !source.length) return;\n\n if (!_.method) {\n // early exit if method is falsy\n if (_.modified('method')) {\n reset(source);\n pulse = reflow(pulse, _);\n }\n\n return pulse;\n } // skip labels with no content\n\n\n source = source.filter(hasBounds); // early exit, nothing to do\n\n if (!source.length) return;\n\n if (_.sort) {\n source = source.slice().sort(_.sort);\n }\n\n items = reset(source);\n pulse = reflow(pulse, _);\n\n if (items.length >= 3 && hasOverlap(items, sep)) {\n do {\n items = reduce(items, sep);\n } while (items.length >= 3 && hasOverlap(items, sep));\n\n if (items.length < 3 && !peek(source).opacity) {\n if (items.length > 1) peek(items).opacity = 0;\n peek(source).opacity = 1;\n }\n }\n\n if (_.boundScale && _.boundTolerance >= 0) {\n test = boundTest(_.boundScale, _.boundOrient, +_.boundTolerance);\n source.forEach(item => {\n if (!test(item)) item.opacity = 0;\n });\n } // re-calculate mark bounds\n\n\n const bounds = items[0].mark.bounds.clear();\n source.forEach(item => {\n if (item.opacity) bounds.union(item.bounds);\n });\n return pulse;\n }\n\n});\n\n/**\n * Queue modified scenegraph items for rendering.\n * @constructor\n */\n\nfunction Render(params) {\n Transform.call(this, null, params);\n}\ninherits(Render, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow;\n pulse.visit(pulse.ALL, item => view.dirty(item)); // set z-index dirty flag as needed\n\n if (pulse.fields && pulse.fields['zindex']) {\n const item = pulse.source && pulse.source[0];\n if (item) item.mark.zdirty = true;\n }\n }\n\n});\n\nconst tempBounds = new Bounds();\nfunction set(item, property, value) {\n return item[property] === value ? 0 : (item[property] = value, 1);\n}\n\nfunction isYAxis(mark) {\n var orient = mark.items[0].orient;\n return orient === Left || orient === Right;\n}\n\nfunction axisIndices(datum) {\n let index = +datum.grid;\n return [datum.ticks ? index++ : -1, // ticks index\n datum.labels ? index++ : -1, // labels index\n index + +datum.domain // title index\n ];\n}\n\nfunction axisLayout(view, axis, width, height) {\n var item = axis.items[0],\n datum = item.datum,\n delta = item.translate != null ? item.translate : 0.5,\n orient = item.orient,\n indices = axisIndices(datum),\n range = item.range,\n offset = item.offset,\n position = item.position,\n minExtent = item.minExtent,\n maxExtent = item.maxExtent,\n title = datum.title && item.items[indices[2]].items[0],\n titlePadding = item.titlePadding,\n bounds = item.bounds,\n dl = title && multiLineOffset(title),\n x = 0,\n y = 0,\n i,\n s;\n tempBounds.clear().union(bounds);\n bounds.clear();\n if ((i = indices[0]) > -1) bounds.union(item.items[i].bounds);\n if ((i = indices[1]) > -1) bounds.union(item.items[i].bounds); // position axis group and title\n\n switch (orient) {\n case Top:\n x = position || 0;\n y = -offset;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.y1));\n bounds.add(0, -s).add(range, 0);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 0, -1, bounds);\n break;\n\n case Left:\n x = -offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.x1));\n bounds.add(-s, 0).add(0, range);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 1, -1, bounds);\n break;\n\n case Right:\n x = width + offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.x2));\n bounds.add(0, 0).add(s, range);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 1, 1, bounds);\n break;\n\n case Bottom:\n x = position || 0;\n y = height + offset;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.y2));\n bounds.add(0, 0).add(range, s);\n if (title) axisTitleLayout(view, title, s, titlePadding, 0, 0, 1, bounds);\n break;\n\n default:\n x = item.x;\n y = item.y;\n } // update bounds\n\n\n boundStroke(bounds.translate(x, y), item);\n\n if (set(item, 'x', x + delta) | set(item, 'y', y + delta)) {\n item.bounds = tempBounds;\n view.dirty(item);\n item.bounds = bounds;\n view.dirty(item);\n }\n\n return item.mark.bounds.clear().union(bounds);\n}\n\nfunction axisTitleLayout(view, title, offset, pad, dl, isYAxis, sign, bounds) {\n const b = title.bounds;\n\n if (title.auto) {\n const v = sign * (offset + dl + pad);\n let dx = 0,\n dy = 0;\n view.dirty(title);\n isYAxis ? dx = (title.x || 0) - (title.x = v) : dy = (title.y || 0) - (title.y = v);\n title.mark.bounds.clear().union(b.translate(-dx, -dy));\n view.dirty(title);\n }\n\n bounds.union(b);\n}\n\nconst min = (a, b) => Math.floor(Math.min(a, b));\n\nconst max = (a, b) => Math.ceil(Math.max(a, b));\n\nfunction gridLayoutGroups(group) {\n var groups = group.items,\n n = groups.length,\n i = 0,\n mark,\n items;\n const views = {\n marks: [],\n rowheaders: [],\n rowfooters: [],\n colheaders: [],\n colfooters: [],\n rowtitle: null,\n coltitle: null\n }; // layout axes, gather legends, collect bounds\n\n for (; i < n; ++i) {\n mark = groups[i];\n items = mark.items;\n\n if (mark.marktype === Group) {\n switch (mark.role) {\n case AxisRole:\n case LegendRole:\n case TitleRole:\n break;\n\n case RowHeader:\n views.rowheaders.push(...items);\n break;\n\n case RowFooter:\n views.rowfooters.push(...items);\n break;\n\n case ColHeader:\n views.colheaders.push(...items);\n break;\n\n case ColFooter:\n views.colfooters.push(...items);\n break;\n\n case RowTitle:\n views.rowtitle = items[0];\n break;\n\n case ColTitle:\n views.coltitle = items[0];\n break;\n\n default:\n views.marks.push(...items);\n }\n }\n }\n\n return views;\n}\n\nfunction bboxFlush(item) {\n return new Bounds().set(0, 0, item.width || 0, item.height || 0);\n}\n\nfunction bboxFull(item) {\n const b = item.bounds.clone();\n return b.empty() ? b.set(0, 0, 0, 0) : b.translate(-(item.x || 0), -(item.y || 0));\n}\n\nfunction get(opt, key, d) {\n const v = isObject(opt) ? opt[key] : opt;\n return v != null ? v : d !== undefined ? d : 0;\n}\n\nfunction offsetValue(v) {\n return v < 0 ? Math.ceil(-v) : 0;\n}\n\nfunction gridLayout(view, groups, opt) {\n var dirty = !opt.nodirty,\n bbox = opt.bounds === Flush ? bboxFlush : bboxFull,\n bounds = tempBounds.set(0, 0, 0, 0),\n alignCol = get(opt.align, Column),\n alignRow = get(opt.align, Row),\n padCol = get(opt.padding, Column),\n padRow = get(opt.padding, Row),\n ncols = opt.columns || groups.length,\n nrows = ncols <= 0 ? 1 : Math.ceil(groups.length / ncols),\n n = groups.length,\n xOffset = Array(n),\n xExtent = Array(ncols),\n xMax = 0,\n yOffset = Array(n),\n yExtent = Array(nrows),\n yMax = 0,\n dx = Array(n),\n dy = Array(n),\n boxes = Array(n),\n m,\n i,\n c,\n r,\n b,\n g,\n px,\n py,\n x,\n y,\n offset;\n\n for (i = 0; i < ncols; ++i) xExtent[i] = 0;\n\n for (i = 0; i < nrows; ++i) yExtent[i] = 0; // determine offsets for each group\n\n\n for (i = 0; i < n; ++i) {\n g = groups[i];\n b = boxes[i] = bbox(g);\n g.x = g.x || 0;\n dx[i] = 0;\n g.y = g.y || 0;\n dy[i] = 0;\n c = i % ncols;\n r = ~~(i / ncols);\n xMax = Math.max(xMax, px = Math.ceil(b.x2));\n yMax = Math.max(yMax, py = Math.ceil(b.y2));\n xExtent[c] = Math.max(xExtent[c], px);\n yExtent[r] = Math.max(yExtent[r], py);\n xOffset[i] = padCol + offsetValue(b.x1);\n yOffset[i] = padRow + offsetValue(b.y1);\n if (dirty) view.dirty(groups[i]);\n } // set initial alignment offsets\n\n\n for (i = 0; i < n; ++i) {\n if (i % ncols === 0) xOffset[i] = 0;\n if (i < ncols) yOffset[i] = 0;\n } // enforce column alignment constraints\n\n\n if (alignCol === Each) {\n for (c = 1; c < ncols; ++c) {\n for (offset = 0, i = c; i < n; i += ncols) {\n if (offset < xOffset[i]) offset = xOffset[i];\n }\n\n for (i = c; i < n; i += ncols) {\n xOffset[i] = offset + xExtent[c - 1];\n }\n }\n } else if (alignCol === All) {\n for (offset = 0, i = 0; i < n; ++i) {\n if (i % ncols && offset < xOffset[i]) offset = xOffset[i];\n }\n\n for (i = 0; i < n; ++i) {\n if (i % ncols) xOffset[i] = offset + xMax;\n }\n } else {\n for (alignCol = false, c = 1; c < ncols; ++c) {\n for (i = c; i < n; i += ncols) {\n xOffset[i] += xExtent[c - 1];\n }\n }\n } // enforce row alignment constraints\n\n\n if (alignRow === Each) {\n for (r = 1; r < nrows; ++r) {\n for (offset = 0, i = r * ncols, m = i + ncols; i < m; ++i) {\n if (offset < yOffset[i]) offset = yOffset[i];\n }\n\n for (i = r * ncols; i < m; ++i) {\n yOffset[i] = offset + yExtent[r - 1];\n }\n }\n } else if (alignRow === All) {\n for (offset = 0, i = ncols; i < n; ++i) {\n if (offset < yOffset[i]) offset = yOffset[i];\n }\n\n for (i = ncols; i < n; ++i) {\n yOffset[i] = offset + yMax;\n }\n } else {\n for (alignRow = false, r = 1; r < nrows; ++r) {\n for (i = r * ncols, m = i + ncols; i < m; ++i) {\n yOffset[i] += yExtent[r - 1];\n }\n }\n } // perform horizontal grid layout\n\n\n for (x = 0, i = 0; i < n; ++i) {\n x = xOffset[i] + (i % ncols ? x : 0);\n dx[i] += x - groups[i].x;\n } // perform vertical grid layout\n\n\n for (c = 0; c < ncols; ++c) {\n for (y = 0, i = c; i < n; i += ncols) {\n y += yOffset[i];\n dy[i] += y - groups[i].y;\n }\n } // perform horizontal centering\n\n\n if (alignCol && get(opt.center, Column) && nrows > 1) {\n for (i = 0; i < n; ++i) {\n b = alignCol === All ? xMax : xExtent[i % ncols];\n x = b - boxes[i].x2 - groups[i].x - dx[i];\n if (x > 0) dx[i] += x / 2;\n }\n } // perform vertical centering\n\n\n if (alignRow && get(opt.center, Row) && ncols !== 1) {\n for (i = 0; i < n; ++i) {\n b = alignRow === All ? yMax : yExtent[~~(i / ncols)];\n y = b - boxes[i].y2 - groups[i].y - dy[i];\n if (y > 0) dy[i] += y / 2;\n }\n } // position grid relative to anchor\n\n\n for (i = 0; i < n; ++i) {\n bounds.union(boxes[i].translate(dx[i], dy[i]));\n }\n\n x = get(opt.anchor, X);\n y = get(opt.anchor, Y);\n\n switch (get(opt.anchor, Column)) {\n case End:\n x -= bounds.width();\n break;\n\n case Middle:\n x -= bounds.width() / 2;\n }\n\n switch (get(opt.anchor, Row)) {\n case End:\n y -= bounds.height();\n break;\n\n case Middle:\n y -= bounds.height() / 2;\n }\n\n x = Math.round(x);\n y = Math.round(y); // update mark positions, bounds, dirty\n\n bounds.clear();\n\n for (i = 0; i < n; ++i) {\n groups[i].mark.bounds.clear();\n }\n\n for (i = 0; i < n; ++i) {\n g = groups[i];\n g.x += dx[i] += x;\n g.y += dy[i] += y;\n bounds.union(g.mark.bounds.union(g.bounds.translate(dx[i], dy[i])));\n if (dirty) view.dirty(g);\n }\n\n return bounds;\n}\nfunction trellisLayout(view, group, opt) {\n var views = gridLayoutGroups(group),\n groups = views.marks,\n bbox = opt.bounds === Flush ? boundFlush : boundFull,\n off = opt.offset,\n ncols = opt.columns || groups.length,\n nrows = ncols <= 0 ? 1 : Math.ceil(groups.length / ncols),\n cells = nrows * ncols,\n x,\n y,\n x2,\n y2,\n anchor,\n band,\n offset; // -- initial grid layout\n\n const bounds = gridLayout(view, groups, opt);\n if (bounds.empty()) bounds.set(0, 0, 0, 0); // empty grid\n // -- layout grid headers and footers --\n // perform row header layout\n\n if (views.rowheaders) {\n band = get(opt.headerBand, Row, null);\n x = layoutHeaders(view, views.rowheaders, groups, ncols, nrows, -get(off, 'rowHeader'), min, 0, bbox, 'x1', 0, ncols, 1, band);\n } // perform column header layout\n\n\n if (views.colheaders) {\n band = get(opt.headerBand, Column, null);\n y = layoutHeaders(view, views.colheaders, groups, ncols, ncols, -get(off, 'columnHeader'), min, 1, bbox, 'y1', 0, 1, ncols, band);\n } // perform row footer layout\n\n\n if (views.rowfooters) {\n band = get(opt.footerBand, Row, null);\n x2 = layoutHeaders(view, views.rowfooters, groups, ncols, nrows, get(off, 'rowFooter'), max, 0, bbox, 'x2', ncols - 1, ncols, 1, band);\n } // perform column footer layout\n\n\n if (views.colfooters) {\n band = get(opt.footerBand, Column, null);\n y2 = layoutHeaders(view, views.colfooters, groups, ncols, ncols, get(off, 'columnFooter'), max, 1, bbox, 'y2', cells - ncols, 1, ncols, band);\n } // perform row title layout\n\n\n if (views.rowtitle) {\n anchor = get(opt.titleAnchor, Row);\n offset = get(off, 'rowTitle');\n offset = anchor === End ? x2 + offset : x - offset;\n band = get(opt.titleBand, Row, 0.5);\n layoutTitle(view, views.rowtitle, offset, 0, bounds, band);\n } // perform column title layout\n\n\n if (views.coltitle) {\n anchor = get(opt.titleAnchor, Column);\n offset = get(off, 'columnTitle');\n offset = anchor === End ? y2 + offset : y - offset;\n band = get(opt.titleBand, Column, 0.5);\n layoutTitle(view, views.coltitle, offset, 1, bounds, band);\n }\n}\n\nfunction boundFlush(item, field) {\n return field === 'x1' ? item.x || 0 : field === 'y1' ? item.y || 0 : field === 'x2' ? (item.x || 0) + (item.width || 0) : field === 'y2' ? (item.y || 0) + (item.height || 0) : undefined;\n}\n\nfunction boundFull(item, field) {\n return item.bounds[field];\n}\n\nfunction layoutHeaders(view, headers, groups, ncols, limit, offset, agg, isX, bound, bf, start, stride, back, band) {\n var n = groups.length,\n init = 0,\n edge = 0,\n i,\n j,\n k,\n m,\n b,\n h,\n g,\n x,\n y; // if no groups, early exit and return 0\n\n if (!n) return init; // compute margin\n\n for (i = start; i < n; i += stride) {\n if (groups[i]) init = agg(init, bound(groups[i], bf));\n } // if no headers, return margin calculation\n\n\n if (!headers.length) return init; // check if number of headers exceeds number of rows or columns\n\n if (headers.length > limit) {\n view.warn('Grid headers exceed limit: ' + limit);\n headers = headers.slice(0, limit);\n } // apply offset\n\n\n init += offset; // clear mark bounds for all headers\n\n for (j = 0, m = headers.length; j < m; ++j) {\n view.dirty(headers[j]);\n headers[j].mark.bounds.clear();\n } // layout each header\n\n\n for (i = start, j = 0, m = headers.length; j < m; ++j, i += stride) {\n h = headers[j];\n b = h.mark.bounds; // search for nearest group to align to\n // necessary if table has empty cells\n\n for (k = i; k >= 0 && (g = groups[k]) == null; k -= back); // assign coordinates and update bounds\n\n\n if (isX) {\n x = band == null ? g.x : Math.round(g.bounds.x1 + band * g.bounds.width());\n y = init;\n } else {\n x = init;\n y = band == null ? g.y : Math.round(g.bounds.y1 + band * g.bounds.height());\n }\n\n b.union(h.bounds.translate(x - (h.x || 0), y - (h.y || 0)));\n h.x = x;\n h.y = y;\n view.dirty(h); // update current edge of layout bounds\n\n edge = agg(edge, b[bf]);\n }\n\n return edge;\n}\n\nfunction layoutTitle(view, g, offset, isX, bounds, band) {\n if (!g) return;\n view.dirty(g); // compute title coordinates\n\n var x = offset,\n y = offset;\n isX ? x = Math.round(bounds.x1 + band * bounds.width()) : y = Math.round(bounds.y1 + band * bounds.height()); // assign coordinates and update bounds\n\n g.bounds.translate(x - (g.x || 0), y - (g.y || 0));\n g.mark.bounds.clear().union(g.bounds);\n g.x = x;\n g.y = y; // queue title for redraw\n\n view.dirty(g);\n}\n\nfunction lookup(config, orient) {\n const opt = config[orient] || {};\n return (key, d) => opt[key] != null ? opt[key] : config[key] != null ? config[key] : d;\n} // if legends specify offset directly, use the maximum specified value\n\n\nfunction offsets(legends, value) {\n let max = -Infinity;\n legends.forEach(item => {\n if (item.offset != null) max = Math.max(max, item.offset);\n });\n return max > -Infinity ? max : value;\n}\n\nfunction legendParams(g, orient, config, xb, yb, w, h) {\n const _ = lookup(config, orient),\n offset = offsets(g, _('offset', 0)),\n anchor = _('anchor', Start),\n mult = anchor === End ? 1 : anchor === Middle ? 0.5 : 0;\n\n const p = {\n align: Each,\n bounds: _('bounds', Flush),\n columns: _('direction') === 'vertical' ? 1 : g.length,\n padding: _('margin', 8),\n center: _('center'),\n nodirty: true\n };\n\n switch (orient) {\n case Left:\n p.anchor = {\n x: Math.floor(xb.x1) - offset,\n column: End,\n y: mult * (h || xb.height() + 2 * xb.y1),\n row: anchor\n };\n break;\n\n case Right:\n p.anchor = {\n x: Math.ceil(xb.x2) + offset,\n y: mult * (h || xb.height() + 2 * xb.y1),\n row: anchor\n };\n break;\n\n case Top:\n p.anchor = {\n y: Math.floor(yb.y1) - offset,\n row: End,\n x: mult * (w || yb.width() + 2 * yb.x1),\n column: anchor\n };\n break;\n\n case Bottom:\n p.anchor = {\n y: Math.ceil(yb.y2) + offset,\n x: mult * (w || yb.width() + 2 * yb.x1),\n column: anchor\n };\n break;\n\n case TopLeft:\n p.anchor = {\n x: offset,\n y: offset\n };\n break;\n\n case TopRight:\n p.anchor = {\n x: w - offset,\n y: offset,\n column: End\n };\n break;\n\n case BottomLeft:\n p.anchor = {\n x: offset,\n y: h - offset,\n row: End\n };\n break;\n\n case BottomRight:\n p.anchor = {\n x: w - offset,\n y: h - offset,\n column: End,\n row: End\n };\n break;\n }\n\n return p;\n}\nfunction legendLayout(view, legend) {\n var item = legend.items[0],\n datum = item.datum,\n orient = item.orient,\n bounds = item.bounds,\n x = item.x,\n y = item.y,\n w,\n h; // cache current bounds for later comparison\n\n item._bounds ? item._bounds.clear().union(bounds) : item._bounds = bounds.clone();\n bounds.clear(); // adjust legend to accommodate padding and title\n\n legendGroupLayout(view, item, item.items[0].items[0]); // aggregate bounds to determine size, and include origin\n\n bounds = legendBounds(item, bounds);\n w = 2 * item.padding;\n h = 2 * item.padding;\n\n if (!bounds.empty()) {\n w = Math.ceil(bounds.width() + w);\n h = Math.ceil(bounds.height() + h);\n }\n\n if (datum.type === Symbols) {\n legendEntryLayout(item.items[0].items[0].items[0].items);\n }\n\n if (orient !== None) {\n item.x = x = 0;\n item.y = y = 0;\n }\n\n item.width = w;\n item.height = h;\n boundStroke(bounds.set(x, y, x + w, y + h), item);\n item.mark.bounds.clear().union(bounds);\n return item;\n}\n\nfunction legendBounds(item, b) {\n // aggregate item bounds\n item.items.forEach(_ => b.union(_.bounds)); // anchor to legend origin\n\n b.x1 = item.padding;\n b.y1 = item.padding;\n return b;\n}\n\nfunction legendGroupLayout(view, item, entry) {\n var pad = item.padding,\n ex = pad - entry.x,\n ey = pad - entry.y;\n\n if (!item.datum.title) {\n if (ex || ey) translate(view, entry, ex, ey);\n } else {\n var title = item.items[1].items[0],\n anchor = title.anchor,\n tpad = item.titlePadding || 0,\n tx = pad - title.x,\n ty = pad - title.y;\n\n switch (title.orient) {\n case Left:\n ex += Math.ceil(title.bounds.width()) + tpad;\n break;\n\n case Right:\n case Bottom:\n break;\n\n default:\n ey += title.bounds.height() + tpad;\n }\n\n if (ex || ey) translate(view, entry, ex, ey);\n\n switch (title.orient) {\n case Left:\n ty += legendTitleOffset(item, entry, title, anchor, 1, 1);\n break;\n\n case Right:\n tx += legendTitleOffset(item, entry, title, End, 0, 0) + tpad;\n ty += legendTitleOffset(item, entry, title, anchor, 1, 1);\n break;\n\n case Bottom:\n tx += legendTitleOffset(item, entry, title, anchor, 0, 0);\n ty += legendTitleOffset(item, entry, title, End, -1, 0, 1) + tpad;\n break;\n\n default:\n tx += legendTitleOffset(item, entry, title, anchor, 0, 0);\n }\n\n if (tx || ty) translate(view, title, tx, ty); // translate legend if title pushes into negative coordinates\n\n if ((tx = Math.round(title.bounds.x1 - pad)) < 0) {\n translate(view, entry, -tx, 0);\n translate(view, title, -tx, 0);\n }\n }\n}\n\nfunction legendTitleOffset(item, entry, title, anchor, y, lr, noBar) {\n const grad = item.datum.type !== 'symbol',\n vgrad = title.datum.vgrad,\n e = grad && (lr || !vgrad) && !noBar ? entry.items[0] : entry,\n s = e.bounds[y ? 'y2' : 'x2'] - item.padding,\n u = vgrad && lr ? s : 0,\n v = vgrad && lr ? 0 : s,\n o = y <= 0 ? 0 : multiLineOffset(title);\n return Math.round(anchor === Start ? u : anchor === End ? v - o : 0.5 * (s - o));\n}\n\nfunction translate(view, item, dx, dy) {\n item.x += dx;\n item.y += dy;\n item.bounds.translate(dx, dy);\n item.mark.bounds.translate(dx, dy);\n view.dirty(item);\n}\n\nfunction legendEntryLayout(entries) {\n // get max widths for each column\n const widths = entries.reduce((w, g) => {\n w[g.column] = Math.max(g.bounds.x2 - g.x, w[g.column] || 0);\n return w;\n }, {}); // set dimensions of legend entry groups\n\n entries.forEach(g => {\n g.width = widths[g.column];\n g.height = g.bounds.y2 - g.y;\n });\n}\n\nfunction titleLayout(view, mark, width, height, viewBounds) {\n var group = mark.items[0],\n frame = group.frame,\n orient = group.orient,\n anchor = group.anchor,\n offset = group.offset,\n padding = group.padding,\n title = group.items[0].items[0],\n subtitle = group.items[1] && group.items[1].items[0],\n end = orient === Left || orient === Right ? height : width,\n start = 0,\n x = 0,\n y = 0,\n sx = 0,\n sy = 0,\n pos;\n\n if (frame !== Group) {\n orient === Left ? (start = viewBounds.y2, end = viewBounds.y1) : orient === Right ? (start = viewBounds.y1, end = viewBounds.y2) : (start = viewBounds.x1, end = viewBounds.x2);\n } else if (orient === Left) {\n start = height, end = 0;\n }\n\n pos = anchor === Start ? start : anchor === End ? end : (start + end) / 2;\n\n if (subtitle && subtitle.text) {\n // position subtitle\n switch (orient) {\n case Top:\n case Bottom:\n sy = title.bounds.height() + padding;\n break;\n\n case Left:\n sx = title.bounds.width() + padding;\n break;\n\n case Right:\n sx = -title.bounds.width() - padding;\n break;\n }\n\n tempBounds.clear().union(subtitle.bounds);\n tempBounds.translate(sx - (subtitle.x || 0), sy - (subtitle.y || 0));\n\n if (set(subtitle, 'x', sx) | set(subtitle, 'y', sy)) {\n view.dirty(subtitle);\n subtitle.bounds.clear().union(tempBounds);\n subtitle.mark.bounds.clear().union(tempBounds);\n view.dirty(subtitle);\n }\n\n tempBounds.clear().union(subtitle.bounds);\n } else {\n tempBounds.clear();\n }\n\n tempBounds.union(title.bounds); // position title group\n\n switch (orient) {\n case Top:\n x = pos;\n y = viewBounds.y1 - tempBounds.height() - offset;\n break;\n\n case Left:\n x = viewBounds.x1 - tempBounds.width() - offset;\n y = pos;\n break;\n\n case Right:\n x = viewBounds.x2 + tempBounds.width() + offset;\n y = pos;\n break;\n\n case Bottom:\n x = pos;\n y = viewBounds.y2 + offset;\n break;\n\n default:\n x = group.x;\n y = group.y;\n }\n\n if (set(group, 'x', x) | set(group, 'y', y)) {\n tempBounds.translate(x, y);\n view.dirty(group);\n group.bounds.clear().union(tempBounds);\n mark.bounds.clear().union(tempBounds);\n view.dirty(group);\n }\n\n return group.bounds;\n}\n\n/**\n * Layout view elements such as axes and legends.\n * Also performs size adjustments.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - Scenegraph mark of groups to layout.\n */\n\nfunction ViewLayout(params) {\n Transform.call(this, null, params);\n}\ninherits(ViewLayout, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow;\n\n _.mark.items.forEach(group => {\n if (_.layout) trellisLayout(view, group, _.layout);\n layoutGroup(view, group, _);\n });\n\n return shouldReflow(_.mark.group) ? pulse.reflow() : pulse;\n }\n\n});\n\nfunction shouldReflow(group) {\n // We typically should reflow if layout is invoked (#2568), as child items\n // may have resized and reflow ensures group bounds are re-calculated.\n // However, legend entries have a special exception to avoid instability.\n // For example, if a selected legend symbol gains a stroke on hover,\n // we don't want to re-position subsequent elements in the legend.\n return group && group.mark.role !== 'legend-entry';\n}\n\nfunction layoutGroup(view, group, _) {\n var items = group.items,\n width = Math.max(0, group.width || 0),\n height = Math.max(0, group.height || 0),\n viewBounds = new Bounds().set(0, 0, width, height),\n xBounds = viewBounds.clone(),\n yBounds = viewBounds.clone(),\n legends = [],\n title,\n mark,\n orient,\n b,\n i,\n n; // layout axes, gather legends, collect bounds\n\n for (i = 0, n = items.length; i < n; ++i) {\n mark = items[i];\n\n switch (mark.role) {\n case AxisRole:\n b = isYAxis(mark) ? xBounds : yBounds;\n b.union(axisLayout(view, mark, width, height));\n break;\n\n case TitleRole:\n title = mark;\n break;\n\n case LegendRole:\n legends.push(legendLayout(view, mark));\n break;\n\n case FrameRole:\n case ScopeRole:\n case RowHeader:\n case RowFooter:\n case RowTitle:\n case ColHeader:\n case ColFooter:\n case ColTitle:\n xBounds.union(mark.bounds);\n yBounds.union(mark.bounds);\n break;\n\n default:\n viewBounds.union(mark.bounds);\n }\n } // layout legends, adjust viewBounds\n\n\n if (legends.length) {\n // group legends by orient\n const l = {};\n legends.forEach(item => {\n orient = item.orient || Right;\n if (orient !== None) (l[orient] || (l[orient] = [])).push(item);\n }); // perform grid layout for each orient group\n\n for (const orient in l) {\n const g = l[orient];\n gridLayout(view, g, legendParams(g, orient, _.legends, xBounds, yBounds, width, height));\n } // update view bounds\n\n\n legends.forEach(item => {\n const b = item.bounds;\n\n if (!b.equals(item._bounds)) {\n item.bounds = item._bounds;\n view.dirty(item); // dirty previous location\n\n item.bounds = b;\n view.dirty(item);\n }\n\n if (_.autosize && _.autosize.type === Fit) {\n // For autosize fit, incorporate the orthogonal dimension only.\n // Legends that overrun the chart area will then be clipped;\n // otherwise the chart area gets reduced to nothing!\n switch (item.orient) {\n case Left:\n case Right:\n viewBounds.add(b.x1, 0).add(b.x2, 0);\n break;\n\n case Top:\n case Bottom:\n viewBounds.add(0, b.y1).add(0, b.y2);\n }\n } else {\n viewBounds.union(b);\n }\n });\n } // combine bounding boxes\n\n\n viewBounds.union(xBounds).union(yBounds); // layout title, adjust bounds\n\n if (title) {\n viewBounds.union(titleLayout(view, title, width, height, viewBounds));\n } // override aggregated view bounds if content is clipped\n\n\n if (group.clip) {\n viewBounds.set(0, 0, group.width || 0, group.height || 0);\n } // perform size adjustment\n\n\n viewSizeLayout(view, group, viewBounds, _);\n}\n\nfunction viewSizeLayout(view, group, viewBounds, _) {\n const auto = _.autosize || {},\n type = auto.type;\n if (view._autosize < 1 || !type) return;\n let viewWidth = view._width,\n viewHeight = view._height,\n width = Math.max(0, group.width || 0),\n left = Math.max(0, Math.ceil(-viewBounds.x1)),\n height = Math.max(0, group.height || 0),\n top = Math.max(0, Math.ceil(-viewBounds.y1));\n const right = Math.max(0, Math.ceil(viewBounds.x2 - width)),\n bottom = Math.max(0, Math.ceil(viewBounds.y2 - height));\n\n if (auto.contains === Padding) {\n const padding = view.padding();\n viewWidth -= padding.left + padding.right;\n viewHeight -= padding.top + padding.bottom;\n }\n\n if (type === None) {\n left = 0;\n top = 0;\n width = viewWidth;\n height = viewHeight;\n } else if (type === Fit) {\n width = Math.max(0, viewWidth - left - right);\n height = Math.max(0, viewHeight - top - bottom);\n } else if (type === FitX) {\n width = Math.max(0, viewWidth - left - right);\n viewHeight = height + top + bottom;\n } else if (type === FitY) {\n viewWidth = width + left + right;\n height = Math.max(0, viewHeight - top - bottom);\n } else if (type === Pad) {\n viewWidth = width + left + right;\n viewHeight = height + top + bottom;\n }\n\n view._resizeView(viewWidth, viewHeight, width, height, [left, top], auto.resize);\n}\n\nexport { Bound as bound, Identifier as identifier, Mark as mark, Overlap as overlap, Render as render, ViewLayout as viewlayout };\n","import { Transform, ingest, tupleid, stableCompare } from 'vega-dataflow';\nimport { tickCount, tickFormat, validTicks, tickValues, SymbolLegend, labelFormat, labelValues, GradientLegend, scaleFraction, labelFraction, scale, isContinuous, Sequential, Linear, Time, UTC, Pow, Sqrt, Ordinal, scaleImplicit, Log, Symlog, isLogarithmic, BinOrdinal, bandSpace, isInterpolating, interpolateRange, quantizeInterpolator, interpolateColors, interpolate, Band, Point, scheme, Threshold, Quantile, Quantize, Diverging } from 'vega-scale';\nimport { inherits, isArray, error, fastmap, falsy, isFunction, constant, peek, one, toSet, isString, zoomLog, zoomPow, zoomSymlog, zoomLinear, stringValue } from 'vega-util';\nimport { sum, range } from 'd3-array';\nimport { interpolateRound, interpolate as interpolate$1 } from 'd3-interpolate';\n\n/**\n * Generates axis ticks for visualizing a spatial scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate ticks for.\n * @param {*} [params.count=10] - The approximate number of ticks, or\n * desired tick interval, to use.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {function(*):string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid d3 4.0 format specifier.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\n\nfunction AxisTicks(params) {\n Transform.call(this, null, params);\n}\ninherits(AxisTicks, Transform, {\n transform(_, pulse) {\n if (this.value && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var locale = pulse.dataflow.locale(),\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n ticks = this.value,\n scale = _.scale,\n tally = _.count == null ? _.values ? _.values.length : 10 : _.count,\n count = tickCount(scale, tally, _.minstep),\n format = _.format || tickFormat(locale, scale, count, _.formatSpecifier, _.formatType, !!_.values),\n values = _.values ? validTicks(scale, _.values, count) : tickValues(scale, count);\n if (ticks) out.rem = ticks;\n ticks = values.map((value, i) => ingest({\n index: i / (values.length - 1 || 1),\n value: value,\n label: format(value)\n }));\n\n if (_.extra && ticks.length) {\n // add an extra tick pegged to the initial domain value\n // this is used to generate axes with 'binned' domains\n ticks.push(ingest({\n index: -1,\n extra: {\n value: ticks[0].value\n },\n label: ''\n }));\n }\n\n out.source = ticks;\n out.add = ticks;\n this.value = ticks;\n return out;\n }\n\n});\n\n/**\n * Joins a set of data elements against a set of visual items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): object} [params.item] - An item generator function.\n * @param {function(object): *} [params.key] - The key field associating data and visual items.\n */\n\nfunction DataJoin(params) {\n Transform.call(this, null, params);\n}\n\nfunction defaultItemCreate() {\n return ingest({});\n}\n\nfunction newMap(key) {\n const map = fastmap().test(t => t.exit);\n\n map.lookup = t => map.get(key(t));\n\n return map;\n}\n\ninherits(DataJoin, Transform, {\n transform(_, pulse) {\n var df = pulse.dataflow,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n item = _.item || defaultItemCreate,\n key = _.key || tupleid,\n map = this.value; // prevent transient (e.g., hover) requests from\n // cascading across marks derived from marks\n\n if (isArray(out.encode)) {\n out.encode = null;\n }\n\n if (map && (_.modified('key') || pulse.modified(key))) {\n error('DataJoin does not support modified key function or fields.');\n }\n\n if (!map) {\n pulse = pulse.addAll();\n this.value = map = newMap(key);\n }\n\n pulse.visit(pulse.ADD, t => {\n const k = key(t);\n let x = map.get(k);\n\n if (x) {\n if (x.exit) {\n map.empty--;\n out.add.push(x);\n } else {\n out.mod.push(x);\n }\n } else {\n x = item(t);\n map.set(k, x);\n out.add.push(x);\n }\n\n x.datum = t;\n x.exit = false;\n });\n pulse.visit(pulse.MOD, t => {\n const k = key(t),\n x = map.get(k);\n\n if (x) {\n x.datum = t;\n out.mod.push(x);\n }\n });\n pulse.visit(pulse.REM, t => {\n const k = key(t),\n x = map.get(k);\n\n if (t === x.datum && !x.exit) {\n out.rem.push(x);\n x.exit = true;\n ++map.empty;\n }\n });\n if (pulse.changed(pulse.ADD_MOD)) out.modifies('datum');\n\n if (pulse.clean() || _.clean && map.empty > df.cleanThreshold) {\n df.runAfter(map.clean);\n }\n\n return out;\n }\n\n});\n\n/**\n * Invokes encoding functions for visual items.\n * @constructor\n * @param {object} params - The parameters to the encoding functions. This\n * parameter object will be passed through to all invoked encoding functions.\n * @param {object} [params.mod=false] - Flag indicating if tuples in the input\n * mod set that are unmodified by encoders should be included in the output.\n * @param {object} param.encoders - The encoding functions\n * @param {function(object, object): boolean} [param.encoders.update] - Update encoding set\n * @param {function(object, object): boolean} [param.encoders.enter] - Enter encoding set\n * @param {function(object, object): boolean} [param.encoders.exit] - Exit encoding set\n */\n\nfunction Encode(params) {\n Transform.call(this, null, params);\n}\ninherits(Encode, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ADD_REM),\n fmod = _.mod || false,\n encoders = _.encoders,\n encode = pulse.encode; // if an array, the encode directive includes additional sets\n // that must be defined in order for the primary set to be invoked\n // e.g., only run the update set if the hover set is defined\n\n if (isArray(encode)) {\n if (out.changed() || encode.every(e => encoders[e])) {\n encode = encode[0];\n out.encode = null; // consume targeted encode directive\n } else {\n return pulse.StopPropagation;\n }\n } // marshall encoder functions\n\n\n var reenter = encode === 'enter',\n update = encoders.update || falsy,\n enter = encoders.enter || falsy,\n exit = encoders.exit || falsy,\n set = (encode && !reenter ? encoders[encode] : update) || falsy;\n\n if (pulse.changed(pulse.ADD)) {\n pulse.visit(pulse.ADD, t => {\n enter(t, _);\n update(t, _);\n });\n out.modifies(enter.output);\n out.modifies(update.output);\n\n if (set !== falsy && set !== update) {\n pulse.visit(pulse.ADD, t => {\n set(t, _);\n });\n out.modifies(set.output);\n }\n }\n\n if (pulse.changed(pulse.REM) && exit !== falsy) {\n pulse.visit(pulse.REM, t => {\n exit(t, _);\n });\n out.modifies(exit.output);\n }\n\n if (reenter || set !== falsy) {\n const flag = pulse.MOD | (_.modified() ? pulse.REFLOW : 0);\n\n if (reenter) {\n pulse.visit(flag, t => {\n const mod = enter(t, _) || fmod;\n if (set(t, _) || mod) out.mod.push(t);\n });\n if (out.mod.length) out.modifies(enter.output);\n } else {\n pulse.visit(flag, t => {\n if (set(t, _) || fmod) out.mod.push(t);\n });\n }\n\n if (out.mod.length) out.modifies(set.output);\n }\n\n return out.changed() ? out : pulse.StopPropagation;\n }\n\n});\n\n/**\n * Generates legend entries for visualizing a scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate items for.\n * @param {*} [params.count=5] - The approximate number of items, or\n * desired tick interval, to use.\n * @param {*} [params.limit] - The maximum number of entries to\n * include in a symbol legend.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid D3 format specifier string.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\n\nfunction LegendEntries(params) {\n Transform.call(this, [], params);\n}\ninherits(LegendEntries, Transform, {\n transform(_, pulse) {\n if (this.value != null && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var locale = pulse.dataflow.locale(),\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n items = this.value,\n type = _.type || SymbolLegend,\n scale = _.scale,\n limit = +_.limit,\n count = tickCount(scale, _.count == null ? 5 : _.count, _.minstep),\n lskip = !!_.values || type === SymbolLegend,\n format = _.format || labelFormat(locale, scale, count, type, _.formatSpecifier, _.formatType, lskip),\n values = _.values || labelValues(scale, count),\n domain,\n fraction,\n size,\n offset,\n ellipsis;\n if (items) out.rem = items;\n\n if (type === SymbolLegend) {\n if (limit && values.length > limit) {\n pulse.dataflow.warn('Symbol legend count exceeds limit, filtering items.');\n items = values.slice(0, limit - 1);\n ellipsis = true;\n } else {\n items = values;\n }\n\n if (isFunction(size = _.size)) {\n // if first value maps to size zero, remove from list (vega#717)\n if (!_.values && scale(items[0]) === 0) {\n items = items.slice(1);\n } // compute size offset for legend entries\n\n\n offset = items.reduce((max, value) => Math.max(max, size(value, _)), 0);\n } else {\n size = constant(offset = size || 8);\n }\n\n items = items.map((value, index) => ingest({\n index: index,\n label: format(value, index, items),\n value: value,\n offset: offset,\n size: size(value, _)\n }));\n\n if (ellipsis) {\n ellipsis = values[items.length];\n items.push(ingest({\n index: items.length,\n label: `\\u2026${values.length - items.length} entries`,\n value: ellipsis,\n offset: offset,\n size: size(ellipsis, _)\n }));\n }\n } else if (type === GradientLegend) {\n domain = scale.domain(), fraction = scaleFraction(scale, domain[0], peek(domain)); // if automatic label generation produces 2 or fewer values,\n // use the domain end points instead (fixes vega/vega#1364)\n\n if (values.length < 3 && !_.values && domain[0] !== peek(domain)) {\n values = [domain[0], peek(domain)];\n }\n\n items = values.map((value, index) => ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: fraction(value)\n }));\n } else {\n size = values.length - 1;\n fraction = labelFraction(scale);\n items = values.map((value, index) => ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: index ? fraction(value) : 0,\n perc2: index === size ? 1 : fraction(values[index + 1])\n }));\n }\n\n out.source = items;\n out.add = items;\n this.value = items;\n return out;\n }\n\n});\n\nconst sourceX = t => t.source.x;\n\nconst sourceY = t => t.source.y;\n\nconst targetX = t => t.target.x;\n\nconst targetY = t => t.target.y;\n/**\n * Layout paths linking source and target elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\n\nfunction LinkPath(params) {\n Transform.call(this, {}, params);\n}\nLinkPath.Definition = {\n 'type': 'LinkPath',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'sourceX',\n 'type': 'field',\n 'default': 'source.x'\n }, {\n 'name': 'sourceY',\n 'type': 'field',\n 'default': 'source.y'\n }, {\n 'name': 'targetX',\n 'type': 'field',\n 'default': 'target.x'\n }, {\n 'name': 'targetY',\n 'type': 'field',\n 'default': 'target.y'\n }, {\n 'name': 'orient',\n 'type': 'enum',\n 'default': 'vertical',\n 'values': ['horizontal', 'vertical', 'radial']\n }, {\n 'name': 'shape',\n 'type': 'enum',\n 'default': 'line',\n 'values': ['line', 'arc', 'curve', 'diagonal', 'orthogonal']\n }, {\n 'name': 'require',\n 'type': 'signal'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\ninherits(LinkPath, Transform, {\n transform(_, pulse) {\n var sx = _.sourceX || sourceX,\n sy = _.sourceY || sourceY,\n tx = _.targetX || targetX,\n ty = _.targetY || targetY,\n as = _.as || 'path',\n orient = _.orient || 'vertical',\n shape = _.shape || 'line',\n path = Paths.get(shape + '-' + orient) || Paths.get(shape);\n\n if (!path) {\n error('LinkPath unsupported type: ' + _.shape + (_.orient ? '-' + _.orient : ''));\n }\n\n pulse.visit(pulse.SOURCE, t => {\n t[as] = path(sx(t), sy(t), tx(t), ty(t));\n });\n return pulse.reflow(_.modified()).modifies(as);\n }\n\n});\n\nconst line = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'L' + tx + ',' + ty;\n\nconst lineR = (sa, sr, ta, tr) => line(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\n\nconst arc = (sx, sy, tx, ty) => {\n var dx = tx - sx,\n dy = ty - sy,\n rr = Math.sqrt(dx * dx + dy * dy) / 2,\n ra = 180 * Math.atan2(dy, dx) / Math.PI;\n return 'M' + sx + ',' + sy + 'A' + rr + ',' + rr + ' ' + ra + ' 0 1' + ' ' + tx + ',' + ty;\n};\n\nconst arcR = (sa, sr, ta, tr) => arc(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\n\nconst curve = (sx, sy, tx, ty) => {\n const dx = tx - sx,\n dy = ty - sy,\n ix = 0.2 * (dx + dy),\n iy = 0.2 * (dy - dx);\n return 'M' + sx + ',' + sy + 'C' + (sx + ix) + ',' + (sy + iy) + ' ' + (tx + iy) + ',' + (ty - ix) + ' ' + tx + ',' + ty;\n};\n\nconst curveR = (sa, sr, ta, tr) => curve(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\n\nconst orthoX = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'V' + ty + 'H' + tx;\n\nconst orthoY = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'H' + tx + 'V' + ty;\n\nconst orthoR = (sa, sr, ta, tr) => {\n const sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n sf = Math.abs(ta - sa) > Math.PI ? ta <= sa : ta > sa;\n return 'M' + sr * sc + ',' + sr * ss + 'A' + sr + ',' + sr + ' 0 0,' + (sf ? 1 : 0) + ' ' + sr * tc + ',' + sr * ts + 'L' + tr * tc + ',' + tr * ts;\n};\n\nconst diagonalX = (sx, sy, tx, ty) => {\n const m = (sx + tx) / 2;\n return 'M' + sx + ',' + sy + 'C' + m + ',' + sy + ' ' + m + ',' + ty + ' ' + tx + ',' + ty;\n};\n\nconst diagonalY = (sx, sy, tx, ty) => {\n const m = (sy + ty) / 2;\n return 'M' + sx + ',' + sy + 'C' + sx + ',' + m + ' ' + tx + ',' + m + ' ' + tx + ',' + ty;\n};\n\nconst diagonalR = (sa, sr, ta, tr) => {\n const sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n mr = (sr + tr) / 2;\n return 'M' + sr * sc + ',' + sr * ss + 'C' + mr * sc + ',' + mr * ss + ' ' + mr * tc + ',' + mr * ts + ' ' + tr * tc + ',' + tr * ts;\n};\n\nconst Paths = fastmap({\n 'line': line,\n 'line-radial': lineR,\n 'arc': arc,\n 'arc-radial': arcR,\n 'curve': curve,\n 'curve-radial': curveR,\n 'orthogonal-horizontal': orthoX,\n 'orthogonal-vertical': orthoY,\n 'orthogonal-radial': orthoR,\n 'diagonal-horizontal': diagonalX,\n 'diagonal-vertical': diagonalY,\n 'diagonal-radial': diagonalR\n});\n\n/**\n * Pie and donut chart layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size pie segments.\n * @param {number} [params.startAngle=0] - The start angle (in radians) of the layout.\n * @param {number} [params.endAngle=2π] - The end angle (in radians) of the layout.\n * @param {boolean} [params.sort] - Boolean flag for sorting sectors by value.\n */\n\nfunction Pie(params) {\n Transform.call(this, null, params);\n}\nPie.Definition = {\n 'type': 'Pie',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'startAngle',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'endAngle',\n 'type': 'number',\n 'default': 6.283185307179586\n }, {\n 'name': 'sort',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['startAngle', 'endAngle']\n }]\n};\ninherits(Pie, Transform, {\n transform(_, pulse) {\n var as = _.as || ['startAngle', 'endAngle'],\n startAngle = as[0],\n endAngle = as[1],\n field = _.field || one,\n start = _.startAngle || 0,\n stop = _.endAngle != null ? _.endAngle : 2 * Math.PI,\n data = pulse.source,\n values = data.map(field),\n n = values.length,\n a = start,\n k = (stop - start) / sum(values),\n index = range(n),\n i,\n t,\n v;\n\n if (_.sort) {\n index.sort((a, b) => values[a] - values[b]);\n }\n\n for (i = 0; i < n; ++i) {\n v = values[index[i]];\n t = data[index[i]];\n t[startAngle] = a;\n t[endAngle] = a += v * k;\n }\n\n this.value = values;\n return pulse.reflow(_.modified()).modifies(as);\n }\n\n});\n\nconst DEFAULT_COUNT = 5;\n\nfunction includeZero(scale) {\n const type = scale.type;\n return !scale.bins && (type === Linear || type === Pow || type === Sqrt);\n}\n\nfunction includePad(type) {\n return isContinuous(type) && type !== Sequential;\n}\n\nconst SKIP = toSet(['set', 'modified', 'clear', 'type', 'scheme', 'schemeExtent', 'schemeCount', 'domain', 'domainMin', 'domainMid', 'domainMax', 'domainRaw', 'domainImplicit', 'nice', 'zero', 'bins', 'range', 'rangeStep', 'round', 'reverse', 'interpolate', 'interpolateGamma']);\n/**\n * Maintains a scale function mapping data values to visual channels.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction Scale(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\ninherits(Scale, Transform, {\n transform(_, pulse) {\n var df = pulse.dataflow,\n scale$1 = this.value,\n key = scaleKey(_);\n\n if (!scale$1 || key !== scale$1.type) {\n this.value = scale$1 = scale(key)();\n }\n\n for (key in _) if (!SKIP[key]) {\n // padding is a scale property for band/point but not others\n if (key === 'padding' && includePad(scale$1.type)) continue; // invoke scale property setter, raise warning if not found\n\n isFunction(scale$1[key]) ? scale$1[key](_[key]) : df.warn('Unsupported scale property: ' + key);\n }\n\n configureRange(scale$1, _, configureBins(scale$1, _, configureDomain(scale$1, _, df)));\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n }\n\n});\n\nfunction scaleKey(_) {\n var t = _.type,\n d = '',\n n; // backwards compatibility pre Vega 5.\n\n if (t === Sequential) return Sequential + '-' + Linear;\n\n if (isContinuousColor(_)) {\n n = _.rawDomain ? _.rawDomain.length : _.domain ? _.domain.length + +(_.domainMid != null) : 0;\n d = n === 2 ? Sequential + '-' : n === 3 ? Diverging + '-' : '';\n }\n\n return (d + t || Linear).toLowerCase();\n}\n\nfunction isContinuousColor(_) {\n const t = _.type;\n return isContinuous(t) && t !== Time && t !== UTC && (_.scheme || _.range && _.range.length && _.range.every(isString));\n}\n\nfunction configureDomain(scale, _, df) {\n // check raw domain, if provided use that and exit early\n const raw = rawDomain(scale, _.domainRaw, df);\n if (raw > -1) return raw;\n var domain = _.domain,\n type = scale.type,\n zero = _.zero || _.zero === undefined && includeZero(scale),\n n,\n mid;\n if (!domain) return 0; // adjust continuous domain for minimum pixel padding\n\n if (includePad(type) && _.padding && domain[0] !== peek(domain)) {\n domain = padDomain(type, domain, _.range, _.padding, _.exponent, _.constant);\n } // adjust domain based on zero, min, max settings\n\n\n if (zero || _.domainMin != null || _.domainMax != null || _.domainMid != null) {\n n = (domain = domain.slice()).length - 1 || 1;\n\n if (zero) {\n if (domain[0] > 0) domain[0] = 0;\n if (domain[n] < 0) domain[n] = 0;\n }\n\n if (_.domainMin != null) domain[0] = _.domainMin;\n if (_.domainMax != null) domain[n] = _.domainMax;\n\n if (_.domainMid != null) {\n mid = _.domainMid;\n const i = mid > domain[n] ? n + 1 : mid < domain[0] ? 0 : n;\n if (i !== n) df.warn('Scale domainMid exceeds domain min or max.', mid);\n domain.splice(i, 0, mid);\n }\n } // set the scale domain\n\n\n scale.domain(domainCheck(type, domain, df)); // if ordinal scale domain is defined, prevent implicit\n // domain construction as side-effect of scale lookup\n\n if (type === Ordinal) {\n scale.unknown(_.domainImplicit ? scaleImplicit : undefined);\n } // perform 'nice' adjustment as requested\n\n\n if (_.nice && scale.nice) {\n scale.nice(_.nice !== true && tickCount(scale, _.nice) || null);\n } // return the cardinality of the domain\n\n\n return domain.length;\n}\n\nfunction rawDomain(scale, raw, df) {\n if (raw) {\n scale.domain(domainCheck(scale.type, raw, df));\n return raw.length;\n } else {\n return -1;\n }\n}\n\nfunction padDomain(type, domain, range, pad, exponent, constant) {\n var span = Math.abs(peek(range) - range[0]),\n frac = span / (span - 2 * pad),\n d = type === Log ? zoomLog(domain, null, frac) : type === Sqrt ? zoomPow(domain, null, frac, 0.5) : type === Pow ? zoomPow(domain, null, frac, exponent || 1) : type === Symlog ? zoomSymlog(domain, null, frac, constant || 1) : zoomLinear(domain, null, frac);\n domain = domain.slice();\n domain[0] = d[0];\n domain[domain.length - 1] = d[1];\n return domain;\n}\n\nfunction domainCheck(type, domain, df) {\n if (isLogarithmic(type)) {\n // sum signs of domain values\n // if all pos or all neg, abs(sum) === domain.length\n var s = Math.abs(domain.reduce((s, v) => s + (v < 0 ? -1 : v > 0 ? 1 : 0), 0));\n\n if (s !== domain.length) {\n df.warn('Log scale domain includes zero: ' + stringValue(domain));\n }\n }\n\n return domain;\n}\n\nfunction configureBins(scale, _, count) {\n let bins = _.bins;\n\n if (bins && !isArray(bins)) {\n // generate bin boundary array\n const domain = scale.domain(),\n lo = domain[0],\n hi = peek(domain),\n step = bins.step;\n let start = bins.start == null ? lo : bins.start,\n stop = bins.stop == null ? hi : bins.stop;\n if (!step) error('Scale bins parameter missing step property.');\n if (start < lo) start = step * Math.ceil(lo / step);\n if (stop > hi) stop = step * Math.floor(hi / step);\n bins = range(start, stop + step / 2, step);\n }\n\n if (bins) {\n // assign bin boundaries to scale instance\n scale.bins = bins;\n } else if (scale.bins) {\n // no current bins, remove bins if previously set\n delete scale.bins;\n } // special handling for bin-ordinal scales\n\n\n if (scale.type === BinOrdinal) {\n if (!bins) {\n // the domain specifies the bins\n scale.bins = scale.domain();\n } else if (!_.domain && !_.domainRaw) {\n // the bins specify the domain\n scale.domain(bins);\n count = bins.length;\n }\n } // return domain cardinality\n\n\n return count;\n}\n\nfunction configureRange(scale, _, count) {\n var type = scale.type,\n round = _.round || false,\n range = _.range; // if range step specified, calculate full range extent\n\n if (_.rangeStep != null) {\n range = configureRangeStep(type, _, count);\n } // else if a range scheme is defined, use that\n else if (_.scheme) {\n range = configureScheme(type, _, count);\n\n if (isFunction(range)) {\n if (scale.interpolator) {\n return scale.interpolator(range);\n } else {\n error(`Scale type ${type} does not support interpolating color schemes.`);\n }\n }\n } // given a range array for an interpolating scale, convert to interpolator\n\n\n if (range && isInterpolating(type)) {\n return scale.interpolator(interpolateColors(flip(range, _.reverse), _.interpolate, _.interpolateGamma));\n } // configure rounding / interpolation\n\n\n if (range && _.interpolate && scale.interpolate) {\n scale.interpolate(interpolate(_.interpolate, _.interpolateGamma));\n } else if (isFunction(scale.round)) {\n scale.round(round);\n } else if (isFunction(scale.rangeRound)) {\n scale.interpolate(round ? interpolateRound : interpolate$1);\n }\n\n if (range) scale.range(flip(range, _.reverse));\n}\n\nfunction configureRangeStep(type, _, count) {\n if (type !== Band && type !== Point) {\n error('Only band and point scales support rangeStep.');\n } // calculate full range based on requested step size and padding\n\n\n var outer = (_.paddingOuter != null ? _.paddingOuter : _.padding) || 0,\n inner = type === Point ? 1 : (_.paddingInner != null ? _.paddingInner : _.padding) || 0;\n return [0, _.rangeStep * bandSpace(count, inner, outer)];\n}\n\nfunction configureScheme(type, _, count) {\n var extent = _.schemeExtent,\n name,\n scheme$1;\n\n if (isArray(_.scheme)) {\n scheme$1 = interpolateColors(_.scheme, _.interpolate, _.interpolateGamma);\n } else {\n name = _.scheme.toLowerCase();\n scheme$1 = scheme(name);\n if (!scheme$1) error(`Unrecognized scheme name: ${_.scheme}`);\n } // determine size for potential discrete range\n\n\n count = type === Threshold ? count + 1 : type === BinOrdinal ? count - 1 : type === Quantile || type === Quantize ? +_.schemeCount || DEFAULT_COUNT : count; // adjust and/or quantize scheme as appropriate\n\n return isInterpolating(type) ? adjustScheme(scheme$1, extent, _.reverse) : isFunction(scheme$1) ? quantizeInterpolator(adjustScheme(scheme$1, extent), count) : type === Ordinal ? scheme$1 : scheme$1.slice(0, count);\n}\n\nfunction adjustScheme(scheme, extent, reverse) {\n return isFunction(scheme) && (extent || reverse) ? interpolateRange(scheme, flip(extent || [0, 1], reverse)) : scheme;\n}\n\nfunction flip(array, reverse) {\n return reverse ? array.slice().reverse() : array;\n}\n\n/**\n * Sorts scenegraph items in the pulse source array.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting tuples.\n */\n\nfunction SortItems(params) {\n Transform.call(this, null, params);\n}\ninherits(SortItems, Transform, {\n transform(_, pulse) {\n const mod = _.modified('sort') || pulse.changed(pulse.ADD) || pulse.modified(_.sort.fields) || pulse.modified('datum');\n if (mod) pulse.source.sort(stableCompare(_.sort));\n this.modified(mod);\n return pulse;\n }\n\n});\n\nconst Zero = 'zero',\n Center = 'center',\n Normalize = 'normalize',\n DefOutput = ['y0', 'y1'];\n/**\n * Stack layout for visualization elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to stack.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {function(object,object): number} [params.sort] - A comparator for stack sorting.\n * @param {string} [offset='zero'] - Stack baseline offset. One of 'zero', 'center', 'normalize'.\n */\n\nfunction Stack(params) {\n Transform.call(this, null, params);\n}\nStack.Definition = {\n 'type': 'Stack',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'offset',\n 'type': 'enum',\n 'default': Zero,\n 'values': [Zero, Center, Normalize]\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': DefOutput\n }]\n};\ninherits(Stack, Transform, {\n transform(_, pulse) {\n var as = _.as || DefOutput,\n y0 = as[0],\n y1 = as[1],\n sort = stableCompare(_.sort),\n field = _.field || one,\n stack = _.offset === Center ? stackCenter : _.offset === Normalize ? stackNormalize : stackZero,\n groups,\n i,\n n,\n max; // partition, sum, and sort the stack groups\n\n groups = partition(pulse.source, _.groupby, sort, field); // compute stack layouts per group\n\n for (i = 0, n = groups.length, max = groups.max; i < n; ++i) {\n stack(groups[i], max, field, y0, y1);\n }\n\n return pulse.reflow(_.modified()).modifies(as);\n }\n\n});\n\nfunction stackCenter(group, max, field, y0, y1) {\n var last = (max - group.sum) / 2,\n m = group.length,\n j = 0,\n t;\n\n for (; j < m; ++j) {\n t = group[j];\n t[y0] = last;\n t[y1] = last += Math.abs(field(t));\n }\n}\n\nfunction stackNormalize(group, max, field, y0, y1) {\n var scale = 1 / group.sum,\n last = 0,\n m = group.length,\n j = 0,\n v = 0,\n t;\n\n for (; j < m; ++j) {\n t = group[j];\n t[y0] = last;\n t[y1] = last = scale * (v += Math.abs(field(t)));\n }\n}\n\nfunction stackZero(group, max, field, y0, y1) {\n var lastPos = 0,\n lastNeg = 0,\n m = group.length,\n j = 0,\n v,\n t;\n\n for (; j < m; ++j) {\n t = group[j];\n v = +field(t);\n\n if (v < 0) {\n t[y0] = lastNeg;\n t[y1] = lastNeg += v;\n } else {\n t[y0] = lastPos;\n t[y1] = lastPos += v;\n }\n }\n}\n\nfunction partition(data, groupby, sort, field) {\n var groups = [],\n get = f => f(t),\n map,\n i,\n n,\n m,\n t,\n k,\n g,\n s,\n max; // partition data points into stack groups\n\n\n if (groupby == null) {\n groups.push(data.slice());\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n\n if (!g) {\n map[k] = g = [];\n groups.push(g);\n }\n\n g.push(t);\n }\n } // compute sums of groups, sort groups as needed\n\n\n for (k = 0, max = 0, m = groups.length; k < m; ++k) {\n g = groups[k];\n\n for (i = 0, s = 0, n = g.length; i < n; ++i) {\n s += Math.abs(field(g[i]));\n }\n\n g.sum = s;\n if (s > max) max = s;\n if (sort) g.sort(sort);\n }\n\n groups.max = max;\n return groups;\n}\n\nexport { AxisTicks as axisticks, DataJoin as datajoin, Encode as encode, LegendEntries as legendentries, LinkPath as linkpath, Pie as pie, Scale as scale, SortItems as sortitems, Stack as stack };\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","import {Adder} from \"d3-array\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nexport var areaRingSum = new Adder();\n\n// hello?\n\nvar areaSum = new Adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum = new Adder();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum = new Adder();\n stream(object, areaStream);\n return areaSum * 2;\n}\n","import {Adder} from \"d3-array\";\nimport {areaStream, areaRingSum} from \"./area.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport {abs, degrees, epsilon, radians} from \"./math.js\";\nimport stream from \"./stream.js\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum,\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum = new Adder();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n },\n sphere: function() {\n lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import {Adder} from \"d3-array\";\nimport {asin, atan2, cos, degrees, epsilon, epsilon2, hypot, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar W0, W1,\n X0, Y0, Z0,\n X1, Y1, Z1,\n X2, Y2, Z2,\n lambda00, phi00, // first point\n x0, y0, z0; // previous point\n\nvar centroidStream = {\n sphere: noop,\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n centroidRingPoint(lambda00, phi00);\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n cx = y0 * z - z0 * y,\n cy = z0 * x - x0 * z,\n cz = x0 * y - y0 * x,\n m = hypot(cx, cy, cz),\n w = asin(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2.add(v * cx);\n Y2.add(v * cy);\n Z2.add(v * cz);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 = 0;\n X2 = new Adder();\n Y2 = new Adder();\n Z2 = new Adder();\n stream(object, centroidStream);\n\n var x = +X2,\n y = +Y2,\n z = +Z2,\n m = hypot(x, y, z);\n\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < epsilon2) {\n x = X1, y = Y1, z = Z1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n m = hypot(x, y, z);\n // If the feature still has an undefined ccentroid, then return.\n if (m < epsilon2) return [NaN, NaN];\n }\n\n return [atan2(y, x) * degrees, asin(z / m) * degrees];\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y, m) {\n line.push([x, y, m]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n if (pointEqual(p0, p1)) {\n if (!p0[2] && !p1[2]) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n // handle degenerate cases by moving the point\n p1[0] += 2 * epsilon;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n if (abs(point[0]) <= pi)\n return point[0];\n else\n return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n var lambda = longitude(point),\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n var sum = new Adder();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = longitude(point0),\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = longitude(point1),\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n point1[2] = 1;\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1], 2);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1], 3);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math.js\";\n\nfunction graticuleX(y0, y1, dy) {\n var y = range(y0, y1 - epsilon, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = range(x0, x1 - epsilon, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: \"MultiLineString\", coordinates: lines()};\n }\n\n function lines() {\n return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n return graticule()();\n}\n","import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n areaRingSum = new Adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum = new Adder();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum = new Adder();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","export default x => x;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum = new Adder();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = circle(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n var pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n return path.projection(projection).context(context);\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n function transform(x, y) {\n x *= sx; y *= sy;\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k * sx, (dy - y) / k * sy];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n x *= sx; y *= sy;\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n };\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate angle\n sx = 1, // reflectX\n sy = 1, // reflectX\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n };\n\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n","import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y,\n l = atan2(x, abs(r0y)) * sign(r0y);\n if (r0y * n < 0)\n l -= pi * sign(x) * sign(r0y);\n return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n","import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n","import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n if (k === Infinity) return [2, 0];\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\n\nfunction tany(y) {\n return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n f = cy0 * pow(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n l = atan2(x, abs(fy)) * sign(fy);\n if (fy * n < 0)\n l -= pi * sign(x) * sign(fy);\n return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n","import projection from \"./index.js\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {abs, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {equirectangularRaw} from \"./equirectangular.js\";\n\nexport function conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs(n) < epsilon) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y,\n l = atan2(x, abs(gy)) * sign(gy);\n if (gy * n < 0)\n l -= pi * sign(x) * sign(gy);\n return [l / n, g - sign(n) * sqrt(x * x + gy * gy)];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = sqrt(3) / 2,\n iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs(delta) < epsilon2) break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n asin(sin(l) / M)\n ];\n};\n\nexport default function() {\n return projection(equalEarthRaw)\n .scale(177.158);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n","import projection from \"./index.js\";\nimport {abs, epsilon} from \"../math.js\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\nexport default function() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math.js\";\nimport {mercatorProjection} from \"./mercator.js\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n","export var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var ceil = Math.ceil;\nexport var cos = Math.cos;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var pow = Math.pow;\nexport var round = Math.round;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sin = Math.sin;\nexport var tan = Math.tan;\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var sqrt1_2 = Math.SQRT1_2;\nexport var sqrt2 = sqrt(2);\nexport var sqrtPi = sqrt(pi);\nexport var tau = pi * 2;\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport function sinci(x) {\n return x ? x / Math.sin(x) : 1;\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function sqrt(x) {\n return x > 0 ? Math.sqrt(x) : 0;\n}\n\nexport function tanh(x) {\n x = exp(2 * x);\n return (x - 1) / (x + 1);\n}\n\nexport function sinh(x) {\n return (exp(x) - exp(-x)) / 2;\n}\n\nexport function cosh(x) {\n return (exp(x) + exp(-x)) / 2;\n}\n\nexport function arsinh(x) {\n return log(x + sqrt(x * x + 1));\n}\n\nexport function arcosh(x) {\n return log(x + sqrt(x * x - 1));\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, cos, epsilon, halfPi, pi, sin, sqrt2} from \"./math.js\";\n\nexport function mollweideBromleyTheta(cp, phi) {\n var cpsinPhi = cp * sin(phi), i = 30, delta;\n do phi -= delta = (phi + sin(phi) - cpsinPhi) / (1 + cos(phi));\n while (abs(delta) > epsilon && --i > 0);\n return phi / 2;\n}\n\nexport function mollweideBromleyRaw(cx, cy, cp) {\n\n function forward(lambda, phi) {\n return [cx * lambda * cos(phi = mollweideBromleyTheta(cp, phi)), cy * sin(phi)];\n }\n\n forward.invert = function(x, y) {\n return y = asin(y / cy), [x / (cx * cos(y)), asin((2 * y + sin(2 * y)) / cp)];\n };\n\n return forward;\n}\n\nexport var mollweideRaw = mollweideBromleyRaw(sqrt2 / halfPi, sqrt2, pi);\n\nexport default function() {\n return projection(mollweideRaw)\n .scale(169.529);\n}\n","import { geoPath, geoAlbers, geoAlbersUsa, geoAzimuthalEqualArea, geoAzimuthalEquidistant, geoConicConformal, geoConicEqualArea, geoConicEquidistant, geoEqualEarth, geoEquirectangular, geoGnomonic, geoIdentity, geoMercator, geoNaturalEarth1, geoOrthographic, geoStereographic, geoTransverseMercator } from 'd3-geo';\nimport { geoMollweide } from 'd3-geo-projection';\n\nconst defaultPath = geoPath();\nconst projectionProperties = [// standard properties in d3-geo\n'clipAngle', 'clipExtent', 'scale', 'translate', 'center', 'rotate', 'parallels', 'precision', 'reflectX', 'reflectY', // extended properties in d3-geo-projections\n'coefficient', 'distance', 'fraction', 'lobes', 'parallel', 'radius', 'ratio', 'spacing', 'tilt'];\n/**\n * Augment projections with their type and a copy method.\n */\n\nfunction create(type, constructor) {\n return function projection() {\n const p = constructor();\n p.type = type;\n p.path = geoPath().projection(p);\n\n p.copy = p.copy || function () {\n const c = projection();\n projectionProperties.forEach(prop => {\n if (p[prop]) c[prop](p[prop]());\n });\n c.path.pointRadius(p.path.pointRadius());\n return c;\n };\n\n return p;\n };\n}\n\nfunction projection(type, proj) {\n if (!type || typeof type !== 'string') {\n throw new Error('Projection type must be a name string.');\n }\n\n type = type.toLowerCase();\n\n if (arguments.length > 1) {\n projections[type] = create(type, proj);\n return this;\n } else {\n return projections[type] || null;\n }\n}\nfunction getProjectionPath(proj) {\n return proj && proj.path || defaultPath;\n}\nconst projections = {\n // base d3-geo projection types\n albers: geoAlbers,\n albersusa: geoAlbersUsa,\n azimuthalequalarea: geoAzimuthalEqualArea,\n azimuthalequidistant: geoAzimuthalEquidistant,\n conicconformal: geoConicConformal,\n conicequalarea: geoConicEqualArea,\n conicequidistant: geoConicEquidistant,\n equalEarth: geoEqualEarth,\n equirectangular: geoEquirectangular,\n gnomonic: geoGnomonic,\n identity: geoIdentity,\n mercator: geoMercator,\n mollweide: geoMollweide,\n naturalEarth1: geoNaturalEarth1,\n orthographic: geoOrthographic,\n stereographic: geoStereographic,\n transversemercator: geoTransverseMercator\n};\n\nfor (const key in projections) {\n projection(key, projections[key]);\n}\n\nexport { getProjectionPath, projection, projectionProperties };\n","import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n","import clipRectangle from \"../clip/rectangle.js\";\nimport identity from \"../identity.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport {cos, degrees, radians, sin} from \"../math.js\";\n\nexport default function() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\n alpha = 0, ca, sa, // angle\n x0 = null, y0, x1, y1, // clip extent\n kx = 1, ky = 1,\n transform = transformer({\n point: function(x, y) {\n var p = projection([x, y])\n this.stream.point(p[0], p[1]);\n }\n }),\n postclip = identity,\n cache,\n cacheStream;\n\n function reset() {\n kx = k * sx;\n ky = k * sy;\n cache = cacheStream = null;\n return projection;\n }\n\n function projection (p) {\n var x = p[0] * kx, y = p[1] * ky;\n if (alpha) {\n var t = y * ca - x * sa;\n x = x * ca + y * sa;\n y = t;\n } \n return [x + tx, y + ty];\n }\n projection.invert = function(p) {\n var x = p[0] - tx, y = p[1] - ty;\n if (alpha) {\n var t = y * ca + x * sa;\n x = x * ca - y * sa;\n y = t;\n }\n return [x / kx, y / ky];\n };\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n };\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n projection.scale = function(_) {\n return arguments.length ? (k = +_, reset()) : k;\n };\n projection.translate = function(_) {\n return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\n }\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;\n };\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\n };\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\n };\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n return projection;\n}\n","import { Transform, rederive, ingest, replace } from 'vega-dataflow';\nimport { error, extent, inherits, identity, isArray, isFunction, isNumber, constant, array, one, accessorName, accessorFields, field, extend, toSet, zero } from 'vega-util';\nimport { range, tickStep, max, sum } from 'd3-array';\nimport { bandwidthNRD } from 'vega-statistics';\nimport { getProjectionPath, projectionProperties, projection } from 'vega-projection';\nimport { geoGraticule } from 'd3-geo';\nimport { rgb } from 'd3-color';\nimport { canvas } from 'vega-canvas';\n\nfunction noop() {}\n\nconst cases = [[], [[[1.0, 1.5], [0.5, 1.0]]], [[[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [0.5, 1.0]]], [[[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 0.5], [1.0, 1.5]]], [[[1.0, 0.5], [0.5, 1.0]]], [[[0.5, 1.0], [1.0, 0.5]]], [[[1.0, 1.5], [1.0, 0.5]]], [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [1.0, 0.5]]], [[[0.5, 1.0], [1.5, 1.0]]], [[[1.0, 1.5], [1.5, 1.0]]], [[[0.5, 1.0], [1.0, 1.5]]], []]; // Implementation adapted from d3/d3-contour. Thanks!\n\nfunction contours () {\n var dx = 1,\n dy = 1,\n smooth = smoothLinear;\n\n function contours(values, tz) {\n return tz.map(value => contour(values, value));\n } // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n\n\n function contour(values, value) {\n var polygons = [],\n holes = [];\n isorings(values, value, ring => {\n smooth(ring, values, value);\n if (area(ring) > 0) polygons.push([ring]);else holes.push(ring);\n });\n holes.forEach(hole => {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n return {\n type: 'MultiPolygon',\n value: value,\n coordinates: polygons\n };\n } // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n\n\n function isorings(values, value, callback) {\n var fragmentByStart = new Array(),\n fragmentByEnd = new Array(),\n x,\n y,\n t0,\n t1,\n t2,\n t3; // Special case for the first row (y = -1, t2 = t3 = 0).\n\n x = y = -1;\n t1 = values[0] >= value;\n cases[t1 << 1].forEach(stitch);\n\n while (++x < dx - 1) {\n t0 = t1, t1 = values[x + 1] >= value;\n cases[t0 | t1 << 1].forEach(stitch);\n }\n\n cases[t1 << 0].forEach(stitch); // General case for the intermediate rows.\n\n while (++y < dy - 1) {\n x = -1;\n t1 = values[y * dx + dx] >= value;\n t2 = values[y * dx] >= value;\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n\n while (++x < dx - 1) {\n t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n\n cases[t1 | t2 << 3].forEach(stitch);\n } // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n\n\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n\n while (++x < dx - 1) {\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n\n cases[t2 << 3].forEach(stitch);\n\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f,\n g;\n\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {\n start: f.start,\n end: g.end,\n ring: f.ring.concat(g.ring)\n };\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {\n start: g.start,\n end: f.end,\n ring: g.ring.concat(f.ring)\n };\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {\n start: startIndex,\n end: endIndex,\n ring: [start, end]\n };\n }\n }\n }\n\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n\n function smoothLinear(ring, values, value) {\n ring.forEach(point => {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v0,\n v1 = values[yt * dx + xt];\n\n if (x > 0 && x < dx && xt === x) {\n v0 = values[yt * dx + xt - 1];\n point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n }\n\n if (y > 0 && y < dy && yt === y) {\n v0 = values[(yt - 1) * dx + xt];\n point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n }\n });\n }\n\n contours.contour = contour;\n\n contours.size = function (_) {\n if (!arguments.length) return [dx, dy];\n\n var _0 = Math.floor(_[0]),\n _1 = Math.floor(_[1]);\n\n if (!(_0 >= 0 && _1 >= 0)) error('invalid size');\n return dx = _0, dy = _1, contours;\n };\n\n contours.smooth = function (_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n };\n\n return contours;\n}\n\nfunction area(ring) {\n var i = 0,\n n = ring.length,\n area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n\n while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n\n return area;\n}\n\nfunction contains(ring, hole) {\n var i = -1,\n n = hole.length,\n c;\n\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n\n return 0;\n}\n\nfunction ringContains(ring, point) {\n var x = point[0],\n y = point[1],\n contains = -1;\n\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i],\n xi = pi[0],\n yi = pi[1],\n pj = ring[j],\n xj = pj[0],\n yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi) contains = -contains;\n }\n\n return contains;\n}\n\nfunction segmentContains(a, b, c) {\n var i;\n return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n\nfunction quantize (k, nice, zero) {\n return function (values) {\n var ex = extent(values),\n start = zero ? Math.min(ex[0], 0) : ex[0],\n stop = ex[1],\n span = stop - start,\n step = nice ? tickStep(start, stop, k) : span / (k + 1);\n return range(start + step, stop, step);\n };\n}\n\n/**\n * Generate isocontours (level sets) based on input raster grid data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} [params.field] - The field with raster grid\n * data. If unspecified, the tuple itself is interpreted as a raster grid.\n * @param {Array} [params.thresholds] - Contour threshold array. If\n * specified, the levels, nice, resolve, and zero parameters are ignored.\n * @param {number} [params.levels] - The desired number of contour levels.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified levels.\n * @param {string} [params.resolve] - The method for resolving thresholds\n * across multiple input grids. If 'independent' (the default), threshold\n * calculation will be performed separately for each grid. If 'shared', a\n * single set of threshold values will be used for all input grids.\n * @param {boolean} [params.zero] - Boolean flag indicating if the contour\n * threshold values should include zero.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n * @param {boolean} [params.scale] - Optional numerical value by which to\n * scale the output isocontour coordinates. This parameter can be useful\n * to scale the contours to match a desired output resolution.\n * @param {string} [params.as='contour'] - The output field in which to store\n * the generated isocontour data (default 'contour').\n */\n\nfunction Isocontour(params) {\n Transform.call(this, null, params);\n}\nIsocontour.Definition = {\n 'type': 'Isocontour',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'thresholds',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'levels',\n 'type': 'number'\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'zero',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'scale',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'translate',\n 'type': 'number',\n 'array': true,\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'default': 'contour'\n }]\n};\ninherits(Isocontour, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n source = pulse.materialize(pulse.SOURCE).source,\n field = _.field || identity,\n contour = contours().smooth(_.smooth !== false),\n tz = _.thresholds || levels(source, field, _),\n as = _.as === null ? null : _.as || 'contour',\n values = [];\n source.forEach(t => {\n const grid = field(t); // generate contour paths in GeoJSON format\n\n const paths = contour.size([grid.width, grid.height])(grid.values, isArray(tz) ? tz : tz(grid.values)); // adjust contour path coordinates as needed\n\n transformPaths(paths, grid, t, _); // ingest; copy source data properties to output\n\n paths.forEach(p => {\n values.push(rederive(t, ingest(as != null ? {\n [as]: p\n } : p)));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = values;\n return out;\n }\n\n});\n\nfunction levels(values, f, _) {\n const q = quantize(_.levels || 10, _.nice, _.zero !== false);\n return _.resolve !== 'shared' ? q : q(values.map(t => max(f(t).values)));\n}\n\nfunction transformPaths(paths, grid, datum, _) {\n let s = _.scale || grid.scale,\n t = _.translate || grid.translate;\n if (isFunction(s)) s = s(datum, _);\n if (isFunction(t)) t = t(datum, _);\n if ((s === 1 || s == null) && !t) return;\n const sx = (isNumber(s) ? s : s[0]) || 1,\n sy = (isNumber(s) ? s : s[1]) || 1,\n tx = t && t[0] || 0,\n ty = t && t[1] || 0;\n paths.forEach(transform(grid, sx, sy, tx, ty));\n}\n\nfunction transform(grid, sx, sy, tx, ty) {\n const x1 = grid.x1 || 0,\n y1 = grid.y1 || 0,\n flip = sx * sy < 0;\n\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n\n function transformRing(coordinates) {\n if (flip) coordinates.reverse(); // maintain winding order\n\n coordinates.forEach(transformPoint);\n }\n\n function transformPoint(coordinates) {\n coordinates[0] = (coordinates[0] - x1) * sx + tx;\n coordinates[1] = (coordinates[1] - y1) * sy + ty;\n }\n\n return function (geometry) {\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n };\n}\n\nfunction radius(bw, data, f) {\n const v = bw >= 0 ? bw : bandwidthNRD(data, f);\n return Math.round((Math.sqrt(4 * v * v + 1) - 1) / 2);\n}\n\nfunction number(_) {\n return isFunction(_) ? _ : constant(+_);\n} // Implementation adapted from d3/d3-contour. Thanks!\n\n\nfunction density2D () {\n var x = d => d[0],\n y = d => d[1],\n weight = one,\n bandwidth = [-1, -1],\n dx = 960,\n dy = 500,\n k = 2; // log2(cellSize)\n\n\n function density(data, counts) {\n const rx = radius(bandwidth[0], data, x) >> k,\n // blur x-radius\n ry = radius(bandwidth[1], data, y) >> k,\n // blur y-radius\n ox = rx ? rx + 2 : 0,\n // x-offset padding for blur\n oy = ry ? ry + 2 : 0,\n // y-offset padding for blur\n n = 2 * ox + (dx >> k),\n // grid width\n m = 2 * oy + (dy >> k),\n // grid height\n values0 = new Float32Array(n * m),\n values1 = new Float32Array(n * m);\n let values = values0;\n data.forEach(d => {\n const xi = ox + (+x(d) >> k),\n yi = oy + (+y(d) >> k);\n\n if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n values0[xi + yi * n] += +weight(d);\n }\n });\n\n if (rx > 0 && ry > 0) {\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n } else if (rx > 0) {\n blurX(n, m, values0, values1, rx);\n blurX(n, m, values1, values0, rx);\n blurX(n, m, values0, values1, rx);\n values = values1;\n } else if (ry > 0) {\n blurY(n, m, values0, values1, ry);\n blurY(n, m, values1, values0, ry);\n blurY(n, m, values0, values1, ry);\n values = values1;\n } // scale density estimates\n // density in points per square pixel or probability density\n\n\n const s = counts ? Math.pow(2, -2 * k) : 1 / sum(values);\n\n for (let i = 0, sz = n * m; i < sz; ++i) values[i] *= s;\n\n return {\n values: values,\n scale: 1 << k,\n width: n,\n height: m,\n x1: ox,\n y1: oy,\n x2: ox + (dx >> k),\n y2: oy + (dy >> k)\n };\n }\n\n density.x = function (_) {\n return arguments.length ? (x = number(_), density) : x;\n };\n\n density.y = function (_) {\n return arguments.length ? (y = number(_), density) : y;\n };\n\n density.weight = function (_) {\n return arguments.length ? (weight = number(_), density) : weight;\n };\n\n density.size = function (_) {\n if (!arguments.length) return [dx, dy];\n\n var _0 = +_[0],\n _1 = +_[1];\n\n if (!(_0 >= 0 && _1 >= 0)) error('invalid size');\n return dx = _0, dy = _1, density;\n };\n\n density.cellSize = function (_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) error('invalid cell size');\n k = Math.floor(Math.log(_) / Math.LN2);\n return density;\n };\n\n density.bandwidth = function (_) {\n if (!arguments.length) return bandwidth;\n _ = array(_);\n if (_.length === 1) _ = [+_[0], +_[0]];\n if (_.length !== 2) error('invalid bandwidth');\n return bandwidth = _, density;\n };\n\n return density;\n}\n\nfunction blurX(n, m, source, target, r) {\n const w = (r << 1) + 1;\n\n for (let j = 0; j < m; ++j) {\n for (let i = 0, sr = 0; i < n + r; ++i) {\n if (i < n) {\n sr += source[i + j * n];\n }\n\n if (i >= r) {\n if (i >= w) {\n sr -= source[i - w + j * n];\n }\n\n target[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n }\n }\n }\n}\n\nfunction blurY(n, m, source, target, r) {\n const w = (r << 1) + 1;\n\n for (let i = 0; i < n; ++i) {\n for (let j = 0, sr = 0; j < m + r; ++j) {\n if (j < m) {\n sr += source[i + j * n];\n }\n\n if (j >= r) {\n if (j >= w) {\n sr -= source[i + (j - w) * n];\n }\n\n target[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n }\n }\n }\n}\n\n/**\n * Perform 2D kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The [width, height] extent (in\n * units of input pixels) over which to perform density estimation.\n * @param {function(object): number} params.x - The x-coordinate accessor.\n * @param {function(object): number} params.y - The y-coordinate accessor.\n * @param {function(object): number} [params.weight] - The weight accessor.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * This parameter determines the level of spatial approximation. For example,\n * the default value of 4 maps to 2x reductions in both x- and y- dimensions.\n * A value of 1 will result in an output raster grid whose dimensions exactly\n * matches the size parameter.\n * @param {Array} [params.bandwidth] - The KDE kernel bandwidths,\n * in pixels. The input can be a two-element array specifying separate\n * x and y bandwidths, or a single-element array specifying both. If the\n * bandwidth is unspecified or less than zero, the bandwidth will be\n * automatically determined.\n * @param {boolean} [params.counts=false] - A boolean flag indicating if the\n * output values should be probability estimates (false, default) or\n * smoothed counts (true).\n * @param {string} [params.as='grid'] - The output field in which to store\n * the generated raster grid (default 'grid').\n */\n\nfunction KDE2D(params) {\n Transform.call(this, null, params);\n}\nKDE2D.Definition = {\n 'type': 'KDE2D',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'weight',\n 'type': 'field'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'cellSize',\n 'type': 'number'\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'counts',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'grid'\n }]\n};\nconst PARAMS = ['x', 'y', 'weight', 'size', 'cellSize', 'bandwidth'];\nfunction params(obj, _) {\n PARAMS.forEach(param => _[param] != null ? obj[param](_[param]) : 0);\n return obj;\n}\ninherits(KDE2D, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) return pulse.StopPropagation;\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n kde = params(density2D(), _),\n as = _.as || 'grid',\n values = [];\n\n function set(t, vals) {\n for (let i = 0; i < names.length; ++i) t[names[i]] = vals[i];\n\n return t;\n } // generate density raster grids\n\n\n values = groups.map(g => ingest(set({\n [as]: kde(g, _.counts)\n }, g.dims)));\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = values;\n return out;\n }\n\n});\nfunction partition(data, groupby) {\n var groups = [],\n get = f => f(t),\n map,\n i,\n n,\n t,\n k,\n g; // partition data points into groups\n\n\n if (groupby == null) {\n groups.push(data);\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n\n g.push(t);\n }\n }\n\n return groups;\n}\n\n/**\n * Generate contours based on kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The dimensions [width, height] over which to compute contours.\n * If the values parameter is provided, this must be the dimensions of the input data.\n * If density estimation is performed, this is the output view dimensions in pixels.\n * @param {Array} [params.values] - An array of numeric values representing an\n * width x height grid of values over which to compute contours. If unspecified, this\n * transform will instead attempt to compute contours for the kernel density estimate\n * using values drawn from data tuples in the input pulse.\n * @param {function(object): number} [params.x] - The pixel x-coordinate accessor for density estimation.\n * @param {function(object): number} [params.y] - The pixel y-coordinate accessor for density estimation.\n * @param {function(object): number} [params.weight] - The data point weight accessor for density estimation.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * @param {number} [params.bandwidth] - Kernel density estimation bandwidth.\n * @param {Array} [params.thresholds] - Contour threshold array. If\n * this parameter is set, the count and nice parameters will be ignored.\n * @param {number} [params.count] - The desired number of contours.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified count.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n */\n\nfunction Contour(params) {\n Transform.call(this, null, params);\n}\nContour.Definition = {\n 'type': 'Contour',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'values',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'x',\n 'type': 'field'\n }, {\n 'name': 'y',\n 'type': 'field'\n }, {\n 'name': 'weight',\n 'type': 'field'\n }, {\n 'name': 'cellSize',\n 'type': 'number'\n }, {\n 'name': 'bandwidth',\n 'type': 'number'\n }, {\n 'name': 'count',\n 'type': 'number'\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'thresholds',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': true\n }]\n};\ninherits(Contour, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n contour = contours().smooth(_.smooth !== false),\n values = _.values,\n thresh = _.thresholds || quantize(_.count || 10, _.nice, !!values),\n size = _.size,\n grid,\n post;\n\n if (!values) {\n values = pulse.materialize(pulse.SOURCE).source;\n grid = params(density2D(), _)(values, true);\n post = transform(grid, grid.scale || 1, grid.scale || 1, 0, 0);\n size = [grid.width, grid.height];\n values = grid.values;\n }\n\n thresh = isArray(thresh) ? thresh : thresh(values);\n values = contour.size(size)(values, thresh);\n if (post) values.forEach(post);\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = (values || []).map(ingest);\n return out;\n }\n\n});\n\nconst Feature = 'Feature';\nconst FeatureCollection = 'FeatureCollection';\nconst MultiPoint = 'MultiPoint';\n\n/**\n * Consolidate an array of [longitude, latitude] points or GeoJSON features\n * into a combined GeoJSON object. This transform is particularly useful for\n * combining geo data for a Projection's fit argument. The resulting GeoJSON\n * data is available as this transform's value. Input pulses are unchanged.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.fields] - A two-element array\n * of field accessors for the longitude and latitude values.\n * @param {function(object): *} params.geojson - A field accessor for\n * retrieving GeoJSON feature data.\n */\n\nfunction GeoJSON(params) {\n Transform.call(this, null, params);\n}\nGeoJSON.Definition = {\n 'type': 'GeoJSON',\n 'metadata': {},\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'geojson',\n 'type': 'field'\n }]\n};\ninherits(GeoJSON, Transform, {\n transform(_, pulse) {\n var features = this._features,\n points = this._points,\n fields = _.fields,\n lon = fields && fields[0],\n lat = fields && fields[1],\n geojson = _.geojson || !fields && identity,\n flag = pulse.ADD,\n mod;\n mod = _.modified() || pulse.changed(pulse.REM) || pulse.modified(accessorFields(geojson)) || lon && pulse.modified(accessorFields(lon)) || lat && pulse.modified(accessorFields(lat));\n\n if (!this.value || mod) {\n flag = pulse.SOURCE;\n this._features = features = [];\n this._points = points = [];\n }\n\n if (geojson) {\n pulse.visit(flag, t => features.push(geojson(t)));\n }\n\n if (lon && lat) {\n pulse.visit(flag, t => {\n var x = lon(t),\n y = lat(t);\n\n if (x != null && y != null && (x = +x) === x && (y = +y) === y) {\n points.push([x, y]);\n }\n });\n features = features.concat({\n type: Feature,\n geometry: {\n type: MultiPoint,\n coordinates: points\n }\n });\n }\n\n this.value = {\n type: FeatureCollection,\n features: features\n };\n }\n\n});\n\n/**\n * Map GeoJSON data to an SVG path string.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='path'] - The output field in which to store\n * the generated path data (default 'path').\n */\n\nfunction GeoPath(params) {\n Transform.call(this, null, params);\n}\nGeoPath.Definition = {\n 'type': 'GeoPath',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection'\n }, {\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'pointRadius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\ninherits(GeoPath, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n path = this.value,\n field = _.field || identity,\n as = _.as || 'path',\n flag = out.SOURCE;\n\n if (!path || _.modified()) {\n // parameters updated, reset and reflow\n this.value = path = getProjectionPath(_.projection);\n out.materialize().reflow();\n } else {\n flag = field === identity || pulse.modified(field.fields) ? out.ADD_MOD : out.ADD;\n }\n\n const prev = initPath(path, _.pointRadius);\n out.visit(flag, t => t[as] = path(field(t)));\n path.pointRadius(prev);\n return out.modifies(as);\n }\n\n});\n\nfunction initPath(path, pointRadius) {\n const prev = path.pointRadius();\n path.context(null);\n\n if (pointRadius != null) {\n path.pointRadius(pointRadius);\n }\n\n return prev;\n}\n\n/**\n * Geo-code a longitude/latitude point to an x/y coordinate.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {Array} params.fields - A two-element array of\n * field accessors for the longitude and latitude values.\n * @param {Array} [params.as] - A two-element array of field names\n * under which to store the result. Defaults to ['x','y'].\n */\n\nfunction GeoPoint(params) {\n Transform.call(this, null, params);\n}\nGeoPoint.Definition = {\n 'type': 'GeoPoint',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection',\n 'required': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['x', 'y']\n }]\n};\ninherits(GeoPoint, Transform, {\n transform(_, pulse) {\n var proj = _.projection,\n lon = _.fields[0],\n lat = _.fields[1],\n as = _.as || ['x', 'y'],\n x = as[0],\n y = as[1],\n mod;\n\n function set(t) {\n const xy = proj([lon(t), lat(t)]);\n\n if (xy) {\n t[x] = xy[0];\n t[y] = xy[1];\n } else {\n t[x] = undefined;\n t[y] = undefined;\n }\n }\n\n if (_.modified()) {\n // parameters updated, reflow\n pulse = pulse.materialize().reflow(true).visit(pulse.SOURCE, set);\n } else {\n mod = pulse.modified(lon.fields) || pulse.modified(lat.fields);\n pulse.visit(mod ? pulse.ADD_MOD : pulse.ADD, set);\n }\n\n return pulse.modifies(as);\n }\n\n});\n\n/**\n * Annotate items with a geopath shape generator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='shape'] - The output field in which to store\n * the generated path data (default 'shape').\n */\n\nfunction GeoShape(params) {\n Transform.call(this, null, params);\n}\nGeoShape.Definition = {\n 'type': 'GeoShape',\n 'metadata': {\n 'modifies': true,\n 'nomod': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection'\n }, {\n 'name': 'field',\n 'type': 'field',\n 'default': 'datum'\n }, {\n 'name': 'pointRadius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'shape'\n }]\n};\ninherits(GeoShape, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n shape = this.value,\n as = _.as || 'shape',\n flag = out.ADD;\n\n if (!shape || _.modified()) {\n // parameters updated, reset and reflow\n this.value = shape = shapeGenerator(getProjectionPath(_.projection), _.field || field('datum'), _.pointRadius);\n out.materialize().reflow();\n flag = out.SOURCE;\n }\n\n out.visit(flag, t => t[as] = shape);\n return out.modifies(as);\n }\n\n});\n\nfunction shapeGenerator(path, field, pointRadius) {\n const shape = pointRadius == null ? _ => path(field(_)) : _ => {\n var prev = path.pointRadius(),\n value = path.pointRadius(pointRadius)(field(_));\n path.pointRadius(prev);\n return value;\n };\n\n shape.context = _ => {\n path.context(_);\n return shape;\n };\n\n return shape;\n}\n\n/**\n * GeoJSON feature generator for creating graticules.\n * @constructor\n */\n\nfunction Graticule(params) {\n Transform.call(this, [], params);\n this.generator = geoGraticule();\n}\nGraticule.Definition = {\n 'type': 'Graticule',\n 'metadata': {\n 'changes': true,\n 'generates': true\n },\n 'params': [{\n 'name': 'extent',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'extentMajor',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'extentMinor',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'step',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'stepMajor',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'default': [90, 360]\n }, {\n 'name': 'stepMinor',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'default': [10, 10]\n }, {\n 'name': 'precision',\n 'type': 'number',\n 'default': 2.5\n }]\n};\ninherits(Graticule, Transform, {\n transform(_, pulse) {\n var src = this.value,\n gen = this.generator,\n t;\n\n if (!src.length || _.modified()) {\n for (const prop in _) {\n if (isFunction(gen[prop])) {\n gen[prop](_[prop]);\n }\n }\n }\n\n t = gen();\n\n if (src.length) {\n pulse.mod.push(replace(src[0], t));\n } else {\n pulse.add.push(ingest(t));\n }\n\n src[0] = t;\n return pulse;\n }\n\n});\n\n/**\n * Render a heatmap image for input raster grid data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} [params.field] - The field with raster grid\n * data. If unspecified, the tuple itself is interpreted as a raster grid.\n * @param {string} [params.color] - A constant color value or function for\n * individual pixel color. If a function, it will be invoked with an input\n * object that includes $x, $y, $value, and $max fields for the grid.\n * @param {number} [params.opacity] - A constant opacity value or function for\n * individual pixel opacity. If a function, it will be invoked with an input\n * object that includes $x, $y, $value, and $max fields for the grid.\n * @param {string} [params.resolve] - The method for resolving maximum values\n * across multiple input grids. If 'independent' (the default), maximum\n * calculation will be performed separately for each grid. If 'shared',\n * a single global maximum will be used for all input grids.\n * @param {string} [params.as='image'] - The output field in which to store\n * the generated bitmap canvas images (default 'image').\n */\n\nfunction Heatmap(params) {\n Transform.call(this, null, params);\n}\nHeatmap.Definition = {\n 'type': 'heatmap',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'color',\n 'type': 'string',\n 'expr': true\n }, {\n 'name': 'opacity',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'image'\n }]\n};\ninherits(Heatmap, Transform, {\n transform(_, pulse) {\n if (!pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var source = pulse.materialize(pulse.SOURCE).source,\n shared = _.resolve === 'shared',\n field = _.field || identity,\n opacity = opacity_(_.opacity, _),\n color = color_(_.color, _),\n as = _.as || 'image',\n obj = {\n $x: 0,\n $y: 0,\n $value: 0,\n $max: shared ? max(source.map(t => max(field(t).values))) : 0\n };\n source.forEach(t => {\n const v = field(t); // build proxy data object\n\n const o = extend({}, t, obj); // set maximum value if not globally shared\n\n if (!shared) o.$max = max(v.values || []); // generate canvas image\n // optimize color/opacity if not pixel-dependent\n\n t[as] = toCanvas(v, o, color.dep ? color : constant(color(o)), opacity.dep ? opacity : constant(opacity(o)));\n });\n return pulse.reflow(true).modifies(as);\n }\n\n}); // get image color function\n\nfunction color_(color, _) {\n let f;\n\n if (isFunction(color)) {\n f = obj => rgb(color(obj, _));\n\n f.dep = dependency(color);\n } else {\n // default to mid-grey\n f = constant(rgb(color || '#888'));\n }\n\n return f;\n} // get image opacity function\n\n\nfunction opacity_(opacity, _) {\n let f;\n\n if (isFunction(opacity)) {\n f = obj => opacity(obj, _);\n\n f.dep = dependency(opacity);\n } else if (opacity) {\n f = constant(opacity);\n } else {\n // default to [0, max] opacity gradient\n f = obj => obj.$value / obj.$max || 0;\n\n f.dep = true;\n }\n\n return f;\n} // check if function depends on individual pixel data\n\n\nfunction dependency(f) {\n if (!isFunction(f)) return false;\n const set = toSet(accessorFields(f));\n return set.$x || set.$y || set.$value || set.$max;\n} // render raster grid to canvas\n\n\nfunction toCanvas(grid, obj, color, opacity) {\n const n = grid.width,\n m = grid.height,\n x1 = grid.x1 || 0,\n y1 = grid.y1 || 0,\n x2 = grid.x2 || n,\n y2 = grid.y2 || m,\n val = grid.values,\n value = val ? i => val[i] : zero,\n can = canvas(x2 - x1, y2 - y1),\n ctx = can.getContext('2d'),\n img = ctx.getImageData(0, 0, x2 - x1, y2 - y1),\n pix = img.data;\n\n for (let j = y1, k = 0; j < y2; ++j) {\n obj.$y = j - y1;\n\n for (let i = x1, r = j * n; i < x2; ++i, k += 4) {\n obj.$x = i - x1;\n obj.$value = value(i + r);\n const v = color(obj);\n pix[k + 0] = v.r;\n pix[k + 1] = v.g;\n pix[k + 2] = v.b;\n pix[k + 3] = ~~(255 * opacity(obj));\n }\n }\n\n ctx.putImageData(img, 0, 0);\n return can;\n}\n\n/**\n * Maintains a cartographic projection.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction Projection(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\ninherits(Projection, Transform, {\n transform(_, pulse) {\n let proj = this.value;\n\n if (!proj || _.modified('type')) {\n this.value = proj = create(_.type);\n projectionProperties.forEach(prop => {\n if (_[prop] != null) set(proj, prop, _[prop]);\n });\n } else {\n projectionProperties.forEach(prop => {\n if (_.modified(prop)) set(proj, prop, _[prop]);\n });\n }\n\n if (_.pointRadius != null) proj.path.pointRadius(_.pointRadius);\n if (_.fit) fit(proj, _);\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n }\n\n});\n\nfunction fit(proj, _) {\n const data = collectGeoJSON(_.fit);\n _.extent ? proj.fitExtent(_.extent, data) : _.size ? proj.fitSize(_.size, data) : 0;\n}\n\nfunction create(type) {\n const constructor = projection((type || 'mercator').toLowerCase());\n if (!constructor) error('Unrecognized projection type: ' + type);\n return constructor();\n}\n\nfunction set(proj, key, value) {\n if (isFunction(proj[key])) proj[key](value);\n}\n\nfunction collectGeoJSON(data) {\n data = array(data);\n return data.length === 1 ? data[0] : {\n type: FeatureCollection,\n features: data.reduce((a, f) => a.concat(featurize(f)), [])\n };\n}\n\nfunction featurize(f) {\n return f.type === FeatureCollection ? f.features : array(f).filter(d => d != null).map(d => d.type === Feature ? d : {\n type: Feature,\n geometry: d\n });\n}\n\nexport { Contour as contour, GeoJSON as geojson, GeoPath as geopath, GeoPoint as geopoint, GeoShape as geoshape, Graticule as graticule, Heatmap as heatmap, Isocontour as isocontour, KDE2D as kde2d, Projection as projection };\n","export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n random,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n y = target.y + target.vy - source.y - source.vy || jiggle(random);\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import { Transform } from 'vega-dataflow';\nimport { inherits, array, isFunction, accessorFields, hasOwnProperty, error } from 'vega-util';\nimport { forceSimulation, forceCenter, forceCollide, forceManyBody, forceLink, forceX, forceY } from 'd3-force';\n\nconst ForceMap = {\n center: forceCenter,\n collide: forceCollide,\n nbody: forceManyBody,\n link: forceLink,\n x: forceX,\n y: forceY\n};\nconst Forces = 'forces',\n ForceParams = ['alpha', 'alphaMin', 'alphaTarget', 'velocityDecay', 'forces'],\n ForceConfig = ['static', 'iterations'],\n ForceOutput = ['x', 'y', 'vx', 'vy'];\n/**\n * Force simulation layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.forces - The forces to apply.\n */\n\nfunction Force(params) {\n Transform.call(this, null, params);\n}\nForce.Definition = {\n 'type': 'Force',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'static',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'restart',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 300\n }, {\n 'name': 'alpha',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'alphaMin',\n 'type': 'number',\n 'default': 0.001\n }, {\n 'name': 'alphaTarget',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'velocityDecay',\n 'type': 'number',\n 'default': 0.4\n }, {\n 'name': 'forces',\n 'type': 'param',\n 'array': true,\n 'params': [{\n 'key': {\n 'force': 'center'\n },\n 'params': [{\n 'name': 'x',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'y',\n 'type': 'number',\n 'default': 0\n }]\n }, {\n 'key': {\n 'force': 'collide'\n },\n 'params': [{\n 'name': 'radius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.7\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 1\n }]\n }, {\n 'key': {\n 'force': 'nbody'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': -30\n }, {\n 'name': 'theta',\n 'type': 'number',\n 'default': 0.9\n }, {\n 'name': 'distanceMin',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'distanceMax',\n 'type': 'number'\n }]\n }, {\n 'key': {\n 'force': 'link'\n },\n 'params': [{\n 'name': 'links',\n 'type': 'data'\n }, {\n 'name': 'id',\n 'type': 'field'\n }, {\n 'name': 'distance',\n 'type': 'number',\n 'default': 30,\n 'expr': true\n }, {\n 'name': 'strength',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 1\n }]\n }, {\n 'key': {\n 'force': 'x'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.1\n }, {\n 'name': 'x',\n 'type': 'field'\n }]\n }, {\n 'key': {\n 'force': 'y'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.1\n }, {\n 'name': 'y',\n 'type': 'field'\n }]\n }]\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'modify': false,\n 'default': ForceOutput\n }]\n};\ninherits(Force, Transform, {\n transform(_, pulse) {\n var sim = this.value,\n change = pulse.changed(pulse.ADD_REM),\n params = _.modified(ForceParams),\n iters = _.iterations || 300; // configure simulation\n\n\n if (!sim) {\n this.value = sim = simulation(pulse.source, _);\n sim.on('tick', rerun(pulse.dataflow, this));\n\n if (!_.static) {\n change = true;\n sim.tick(); // ensure we run on init\n }\n\n pulse.modifies('index');\n } else {\n if (change) {\n pulse.modifies('index');\n sim.nodes(pulse.source);\n }\n\n if (params || pulse.changed(pulse.MOD)) {\n setup(sim, _, 0, pulse);\n }\n } // run simulation\n\n\n if (params || change || _.modified(ForceConfig) || pulse.changed() && _.restart) {\n sim.alpha(Math.max(sim.alpha(), _.alpha || 1)).alphaDecay(1 - Math.pow(sim.alphaMin(), 1 / iters));\n\n if (_.static) {\n for (sim.stop(); --iters >= 0;) sim.tick();\n } else {\n if (sim.stopped()) sim.restart();\n if (!change) return pulse.StopPropagation; // defer to sim ticks\n }\n }\n\n return this.finish(_, pulse);\n },\n\n finish(_, pulse) {\n const dataflow = pulse.dataflow; // inspect dependencies, touch link source data\n\n for (let args = this._argops, j = 0, m = args.length, arg; j < m; ++j) {\n arg = args[j];\n\n if (arg.name !== Forces || arg.op._argval.force !== 'link') {\n continue;\n }\n\n for (var ops = arg.op._argops, i = 0, n = ops.length, op; i < n; ++i) {\n if (ops[i].name === 'links' && (op = ops[i].op.source)) {\n dataflow.pulse(op, dataflow.changeset().reflow());\n break;\n }\n }\n } // reflow all nodes\n\n\n return pulse.reflow(_.modified()).modifies(ForceOutput);\n }\n\n});\n\nfunction rerun(df, op) {\n return () => df.touch(op).run();\n}\n\nfunction simulation(nodes, _) {\n const sim = forceSimulation(nodes),\n stop = sim.stop,\n restart = sim.restart;\n let stopped = false;\n\n sim.stopped = () => stopped;\n\n sim.restart = () => (stopped = false, restart());\n\n sim.stop = () => (stopped = true, stop());\n\n return setup(sim, _, true).on('end', () => stopped = true);\n}\n\nfunction setup(sim, _, init, pulse) {\n var f = array(_.forces),\n i,\n n,\n p,\n name;\n\n for (i = 0, n = ForceParams.length; i < n; ++i) {\n p = ForceParams[i];\n if (p !== Forces && _.modified(p)) sim[p](_[p]);\n }\n\n for (i = 0, n = f.length; i < n; ++i) {\n name = Forces + i;\n p = init || _.modified(Forces, i) ? getForce(f[i]) : pulse && modified(f[i], pulse) ? sim.force(name) : null;\n if (p) sim.force(name, p);\n }\n\n for (n = sim.numForces || 0; i < n; ++i) {\n sim.force(Forces + i, null); // remove\n }\n\n sim.numForces = f.length;\n return sim;\n}\n\nfunction modified(f, pulse) {\n var k, v;\n\n for (k in f) {\n if (isFunction(v = f[k]) && pulse.modified(accessorFields(v))) return 1;\n }\n\n return 0;\n}\n\nfunction getForce(_) {\n var f, p;\n\n if (!hasOwnProperty(ForceMap, _.force)) {\n error('Unrecognized force: ' + _.force);\n }\n\n f = ForceMap[_.force]();\n\n for (p in _) {\n if (isFunction(f[p])) setForceParam(f[p], _[p], _);\n }\n\n return f;\n}\n\nfunction setForceParam(f, v, _) {\n f(isFunction(v) ? d => v(d, _) : v);\n}\n\nexport { Force as force };\n","export default function(x, y) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n node,\n random,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(y) {\n var strength = constant(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n };\n\n return force;\n}\n","function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n","import {shuffle} from \"../array.js\";\n\nexport default function(circles) {\n var i = 0, n = (circles = shuffle(Array.from(circles))).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","export default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array) {\n var m = array.length,\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","import array from \"../array.js\";\nimport enclose from \"./enclose.js\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packEnclose(circles) {\n if (!(n = (circles = array(circles)).length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packEnclose(circles);\n return circles;\n}\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","import {packEnclose} from \"./siblings.js\";\nimport {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildren(padding, 0.5))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildren(constantZero, 1))\n .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildren(padding, k) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packEnclose(children);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n","import {required} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar preroot = {depth: -1},\n ambiguous = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nexport default function() {\n var id = defaultId,\n parentId = defaultParentId;\n\n function stratify(data) {\n var nodes = Array.from(data),\n n = nodes.length,\n d,\n i,\n root,\n parent,\n node,\n nodeId,\n nodeKey,\n nodeByKey = new Map;\n\n for (i = 0; i < n; ++i) {\n d = nodes[i], node = nodes[i] = new Node(d);\n if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = node.id = nodeId;\n nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n }\n if ((nodeId = parentId(d, i, data)) != null && (nodeId += \"\")) {\n node.parent = nodeId;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (nodeId = node.parent) {\n parent = nodeByKey.get(nodeId);\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n } else {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = required(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = required(x), stratify) : parentId;\n };\n\n return stratify;\n}\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\nimport {phi, squarifyRatio} from \"./squarify.js\";\n\nexport default (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n","import { Transform, isTuple, ingest, tupleid, stableCompare } from 'vega-dataflow';\nimport { inherits, error, array, one, truthy, hasOwnProperty } from 'vega-util';\nimport { hierarchy, pack, partition, stratify, tree, cluster, treemap, treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, treemapResquarify } from 'd3-hierarchy';\n\n// Build lookup table mapping tuple keys to tree node instances\nfunction lookup (tree, key, filter) {\n const map = {};\n tree.each(node => {\n const t = node.data;\n if (filter(t)) map[key(t)] = node;\n });\n tree.lookup = map;\n return tree;\n}\n\n/**\n * Nest tuples into a tree structure, grouped by key values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.keys - The key fields to nest by, in order.\n * @param {boolean} [params.generate=false] - A boolean flag indicating if\n * non-leaf nodes generated by this transform should be included in the\n * output. The default (false) includes only the input data (leaf nodes)\n * in the data stream.\n */\n\nfunction Nest(params) {\n Transform.call(this, null, params);\n}\nNest.Definition = {\n 'type': 'Nest',\n 'metadata': {\n 'treesource': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'keys',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'generate',\n 'type': 'boolean'\n }]\n};\n\nconst children = n => n.values;\n\ninherits(Nest, Transform, {\n transform(_, pulse) {\n if (!pulse.source) {\n error('Nest transform requires an upstream data source.');\n }\n\n var gen = _.generate,\n mod = _.modified(),\n out = pulse.clone(),\n tree = this.value;\n\n if (!tree || mod || pulse.changed()) {\n // collect nodes to remove\n if (tree) {\n tree.each(node => {\n if (node.children && isTuple(node.data)) {\n out.rem.push(node.data);\n }\n });\n } // generate new tree structure\n\n\n this.value = tree = hierarchy({\n values: array(_.keys).reduce((n, k) => {\n n.key(k);\n return n;\n }, nest()).entries(out.source)\n }, children); // collect nodes to add\n\n if (gen) {\n tree.each(node => {\n if (node.children) {\n node = ingest(node.data);\n out.add.push(node);\n out.source.push(node);\n }\n });\n } // build lookup table\n\n\n lookup(tree, tupleid, tupleid);\n }\n\n out.source.root = tree;\n return out;\n }\n\n});\n\nfunction nest() {\n const keys = [],\n nest = {\n entries: array => entries(apply(array, 0), 0),\n key: d => (keys.push(d), nest)\n };\n\n function apply(array, depth) {\n if (depth >= keys.length) {\n return array;\n }\n\n const n = array.length,\n key = keys[depth++],\n valuesByKey = {},\n result = {};\n let i = -1,\n keyValue,\n value,\n values;\n\n while (++i < n) {\n keyValue = key(value = array[i]) + '';\n\n if (values = valuesByKey[keyValue]) {\n values.push(value);\n } else {\n valuesByKey[keyValue] = [value];\n }\n }\n\n for (keyValue in valuesByKey) {\n result[keyValue] = apply(valuesByKey[keyValue], depth);\n }\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n const array = [];\n\n for (const key in map) {\n array.push({\n key,\n values: entries(map[key], depth)\n });\n }\n\n return array;\n }\n\n return nest;\n}\n\n/**\n * Abstract class for tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction HierarchyLayout(params) {\n Transform.call(this, null, params);\n}\n\nconst defaultSeparation = (a, b) => a.parent === b.parent ? 1 : 2;\n\ninherits(HierarchyLayout, Transform, {\n transform(_, pulse) {\n if (!pulse.source || !pulse.source.root) {\n error(this.constructor.name + ' transform requires a backing tree data source.');\n }\n\n const layout = this.layout(_.method),\n fields = this.fields,\n root = pulse.source.root,\n as = _.as || fields;\n if (_.field) root.sum(_.field);else root.count();\n if (_.sort) root.sort(stableCompare(_.sort, d => d.data));\n setParams(layout, this.params, _);\n\n if (layout.separation) {\n layout.separation(_.separation !== false ? defaultSeparation : one);\n }\n\n try {\n this.value = layout(root);\n } catch (err) {\n error(err);\n }\n\n root.each(node => setFields(node, fields, as));\n return pulse.reflow(_.modified()).modifies(as).modifies('leaf');\n }\n\n});\n\nfunction setParams(layout, params, _) {\n for (let p, i = 0, n = params.length; i < n; ++i) {\n p = params[i];\n if (p in _) layout[p](_[p]);\n }\n}\n\nfunction setFields(node, fields, as) {\n const t = node.data,\n n = fields.length - 1;\n\n for (let i = 0; i < n; ++i) {\n t[as[i]] = node[fields[i]];\n }\n\n t[as[n]] = node.children ? node.children.length : 0;\n}\n\nconst Output$3 = ['x', 'y', 'r', 'depth', 'children'];\n/**\n * Packed circle tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\n\nfunction Pack(params) {\n HierarchyLayout.call(this, params);\n}\nPack.Definition = {\n 'type': 'Pack',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'radius',\n 'type': 'field',\n 'default': null\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$3.length,\n 'default': Output$3\n }]\n};\ninherits(Pack, HierarchyLayout, {\n layout: pack,\n params: ['radius', 'size', 'padding'],\n fields: Output$3\n});\n\nconst Output$2 = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n/**\n * Partition tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\n\nfunction Partition(params) {\n HierarchyLayout.call(this, params);\n}\nPartition.Definition = {\n 'type': 'Partition',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'round',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$2.length,\n 'default': Output$2\n }]\n};\ninherits(Partition, HierarchyLayout, {\n layout: partition,\n params: ['size', 'round', 'padding'],\n fields: Output$2\n});\n\n/**\n * Stratify a collection of tuples into a tree structure based on\n * id and parent id fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.key - Unique key field for each tuple.\n * @param {function(object): *} params.parentKey - Field with key for parent tuple.\n */\n\nfunction Stratify(params) {\n Transform.call(this, null, params);\n}\nStratify.Definition = {\n 'type': 'Stratify',\n 'metadata': {\n 'treesource': true\n },\n 'params': [{\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'parentKey',\n 'type': 'field',\n 'required': true\n }]\n};\ninherits(Stratify, Transform, {\n transform(_, pulse) {\n if (!pulse.source) {\n error('Stratify transform requires an upstream data source.');\n }\n\n let tree = this.value;\n\n const mod = _.modified(),\n out = pulse.fork(pulse.ALL).materialize(pulse.SOURCE),\n run = !tree || mod || pulse.changed(pulse.ADD_REM) || pulse.modified(_.key.fields) || pulse.modified(_.parentKey.fields); // prevent upstream source pollution\n\n\n out.source = out.source.slice();\n\n if (run) {\n tree = out.source.length ? lookup(stratify().id(_.key).parentId(_.parentKey)(out.source), _.key, truthy) : lookup(stratify()([{}]), _.key, _.key);\n }\n\n out.source.root = this.value = tree;\n return out;\n }\n\n});\n\nconst Layouts = {\n tidy: tree,\n cluster: cluster\n};\nconst Output$1 = ['x', 'y', 'depth', 'children'];\n/**\n * Tree layout. Depending on the method parameter, performs either\n * Reingold-Tilford 'tidy' layout or dendrogram 'cluster' layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction Tree(params) {\n HierarchyLayout.call(this, params);\n}\nTree.Definition = {\n 'type': 'Tree',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'tidy',\n 'values': ['tidy', 'cluster']\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'nodeSize',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'separation',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$1.length,\n 'default': Output$1\n }]\n};\ninherits(Tree, HierarchyLayout, {\n /**\n * Tree layout generator. Supports both 'tidy' and 'cluster' layouts.\n */\n layout(method) {\n const m = method || 'tidy';\n if (hasOwnProperty(Layouts, m)) return Layouts[m]();else error('Unrecognized Tree layout method: ' + m);\n },\n\n params: ['size', 'nodeSize'],\n fields: Output$1\n});\n\n/**\n * Generate tuples representing links between tree nodes.\n * The resulting tuples will contain 'source' and 'target' fields,\n * which point to parent and child node tuples, respectively.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction TreeLinks(params) {\n Transform.call(this, [], params);\n}\nTreeLinks.Definition = {\n 'type': 'TreeLinks',\n 'metadata': {\n 'tree': true,\n 'generates': true,\n 'changes': true\n },\n 'params': []\n};\ninherits(TreeLinks, Transform, {\n transform(_, pulse) {\n const links = this.value,\n tree = pulse.source && pulse.source.root,\n out = pulse.fork(pulse.NO_SOURCE),\n lut = {};\n if (!tree) error('TreeLinks transform requires a tree data source.');\n\n if (pulse.changed(pulse.ADD_REM)) {\n // remove previous links\n out.rem = links; // build lookup table of valid tuples\n\n pulse.visit(pulse.SOURCE, t => lut[tupleid(t)] = 1); // generate links for all edges incident on valid tuples\n\n tree.each(node => {\n const t = node.data,\n p = node.parent && node.parent.data;\n\n if (p && lut[tupleid(t)] && lut[tupleid(p)]) {\n out.add.push(ingest({\n source: p,\n target: t\n }));\n }\n });\n this.value = out.add;\n } else if (pulse.changed(pulse.MOD)) {\n // build lookup table of modified tuples\n pulse.visit(pulse.MOD, t => lut[tupleid(t)] = 1); // gather links incident on modified tuples\n\n links.forEach(link => {\n if (lut[tupleid(link.source)] || lut[tupleid(link.target)]) {\n out.mod.push(link);\n }\n });\n }\n\n return out;\n }\n\n});\n\nconst Tiles = {\n binary: treemapBinary,\n dice: treemapDice,\n slice: treemapSlice,\n slicedice: treemapSliceDice,\n squarify: treemapSquarify,\n resquarify: treemapResquarify\n};\nconst Output = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n/**\n * Treemap layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\n\nfunction Treemap(params) {\n HierarchyLayout.call(this, params);\n}\nTreemap.Definition = {\n 'type': 'Treemap',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'squarify',\n 'values': ['squarify', 'resquarify', 'binary', 'dice', 'slice', 'slicedice']\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingInner',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingOuter',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingTop',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingRight',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingBottom',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingLeft',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'ratio',\n 'type': 'number',\n 'default': 1.618033988749895\n }, {\n 'name': 'round',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output.length,\n 'default': Output\n }]\n};\ninherits(Treemap, HierarchyLayout, {\n /**\n * Treemap layout generator. Adds 'method' and 'ratio' parameters\n * to configure the underlying tile method.\n */\n layout() {\n const x = treemap();\n\n x.ratio = _ => {\n const t = x.tile();\n if (t.ratio) x.tile(t.ratio(_));\n };\n\n x.method = _ => {\n if (hasOwnProperty(Tiles, _)) x.tile(Tiles[_]);else error('Unrecognized Treemap layout method: ' + _);\n };\n\n return x;\n },\n\n params: ['method', 'ratio', 'size', 'round', 'padding', 'paddingInner', 'paddingOuter', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'],\n fields: Output\n});\n\nexport { Nest as nest, Pack as pack, Partition as partition, Stratify as stratify, Tree as tree, TreeLinks as treelinks, Treemap as treemap };\n","import roundNode from \"./treemap/round.js\";\nimport treemapDice from \"./treemap/dice.js\";\n\nexport default function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n","import dice from \"./dice.js\";\nimport slice from \"./slice.js\";\n\nexport default function(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","import { canvas } from 'vega-canvas';\nimport { rederive, Transform } from 'vega-dataflow';\nimport { Marks, textMetrics } from 'vega-scenegraph';\nimport { inherits, isFunction, error, array } from 'vega-util';\n\nconst ALPHA_MASK = 0xff000000; // alpha value equivalent to opacity 0.0625\n\nconst INSIDE_OPACITY_IN_ALPHA = 0x10000000;\nconst INSIDE_OPACITY = 0.0625;\nfunction baseBitmaps($, data) {\n const bitmap = $.bitmap(); // when there is no base mark but data points are to be avoided\n\n (data || []).forEach(d => bitmap.set($(d.boundary[0]), $(d.boundary[3])));\n return [bitmap, undefined];\n}\nfunction markBitmaps($, avoidMarks, labelInside, isGroupArea) {\n // create canvas\n const width = $.width,\n height = $.height,\n border = labelInside || isGroupArea,\n context = canvas(width, height).getContext('2d'); // render all marks to be avoided into canvas\n\n avoidMarks.forEach(items => draw(context, items, border)); // get canvas buffer, create bitmaps\n\n const buffer = new Uint32Array(context.getImageData(0, 0, width, height).data.buffer),\n layer1 = $.bitmap(),\n layer2 = border && $.bitmap(); // populate bitmap layers\n\n let x, y, u, v, alpha;\n\n for (y = 0; y < height; ++y) {\n for (x = 0; x < width; ++x) {\n alpha = buffer[y * width + x] & ALPHA_MASK;\n\n if (alpha) {\n u = $(x);\n v = $(y);\n if (!isGroupArea) layer1.set(u, v); // update interior bitmap\n\n if (border && alpha ^ INSIDE_OPACITY_IN_ALPHA) layer2.set(u, v); // update border bitmap\n }\n }\n }\n\n return [layer1, layer2];\n}\n\nfunction draw(context, items, interior) {\n if (!items.length) return;\n const type = items[0].mark.marktype;\n\n if (type === 'group') {\n items.forEach(group => {\n group.items.forEach(mark => draw(context, mark.items, interior));\n });\n } else {\n Marks[type].draw(context, {\n items: interior ? items.map(prepare) : items\n });\n }\n}\n/**\n * Prepare item before drawing into canvas (setting stroke and opacity)\n * @param {object} source item to be prepared\n * @returns prepared item\n */\n\n\nfunction prepare(source) {\n const item = rederive(source, {});\n\n if (item.stroke) {\n item.strokeOpacity = 1;\n }\n\n if (item.fill) {\n item.fillOpacity = INSIDE_OPACITY;\n item.stroke = '#000';\n item.strokeOpacity = 1;\n item.strokeWidth = 2;\n }\n\n return item;\n}\n\nconst DIV = 5,\n // bit shift from x, y index to bit vector array index\nMOD = 31,\n // bit mask for index lookup within a bit vector\nSIZE = 32,\n // individual bit vector size\nRIGHT0 = new Uint32Array(SIZE + 1),\n // left-anchored bit vectors, full -> 0\nRIGHT1 = new Uint32Array(SIZE + 1); // right-anchored bit vectors, 0 -> full\n\nRIGHT1[0] = 0;\nRIGHT0[0] = ~RIGHT1[0];\n\nfor (let i = 1; i <= SIZE; ++i) {\n RIGHT1[i] = RIGHT1[i - 1] << 1 | 1;\n RIGHT0[i] = ~RIGHT1[i];\n}\n\nfunction Bitmap (w, h) {\n const array = new Uint32Array(~~((w * h + SIZE) / SIZE));\n\n function _set(index, mask) {\n array[index] |= mask;\n }\n\n function _clear(index, mask) {\n array[index] &= mask;\n }\n\n return {\n array: array,\n get: (x, y) => {\n const index = y * w + x;\n return array[index >>> DIV] & 1 << (index & MOD);\n },\n set: (x, y) => {\n const index = y * w + x;\n\n _set(index >>> DIV, 1 << (index & MOD));\n },\n clear: (x, y) => {\n const index = y * w + x;\n\n _clear(index >>> DIV, ~(1 << (index & MOD)));\n },\n getRange: (x, y, x2, y2) => {\n let r = y2,\n start,\n end,\n indexStart,\n indexEnd;\n\n for (; r >= y; --r) {\n start = r * w + x;\n end = r * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n\n if (indexStart === indexEnd) {\n if (array[indexStart] & RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]) {\n return true;\n }\n } else {\n if (array[indexStart] & RIGHT0[start & MOD]) return true;\n if (array[indexEnd] & RIGHT1[(end & MOD) + 1]) return true;\n\n for (let i = indexStart + 1; i < indexEnd; ++i) {\n if (array[i]) return true;\n }\n }\n }\n\n return false;\n },\n setRange: (x, y, x2, y2) => {\n let start, end, indexStart, indexEnd, i;\n\n for (; y <= y2; ++y) {\n start = y * w + x;\n end = y * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n\n if (indexStart === indexEnd) {\n _set(indexStart, RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]);\n } else {\n _set(indexStart, RIGHT0[start & MOD]);\n\n _set(indexEnd, RIGHT1[(end & MOD) + 1]);\n\n for (i = indexStart + 1; i < indexEnd; ++i) _set(i, 0xffffffff);\n }\n }\n },\n clearRange: (x, y, x2, y2) => {\n let start, end, indexStart, indexEnd, i;\n\n for (; y <= y2; ++y) {\n start = y * w + x;\n end = y * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n\n if (indexStart === indexEnd) {\n _clear(indexStart, RIGHT1[start & MOD] | RIGHT0[(end & MOD) + 1]);\n } else {\n _clear(indexStart, RIGHT1[start & MOD]);\n\n _clear(indexEnd, RIGHT0[(end & MOD) + 1]);\n\n for (i = indexStart + 1; i < indexEnd; ++i) _clear(i, 0);\n }\n }\n },\n outOfBounds: (x, y, x2, y2) => x < 0 || y < 0 || y2 >= h || x2 >= w\n };\n}\n\nfunction scaler (width, height, padding) {\n const ratio = Math.max(1, Math.sqrt(width * height / 1e6)),\n w = ~~((width + 2 * padding + ratio) / ratio),\n h = ~~((height + 2 * padding + ratio) / ratio),\n scale = _ => ~~((_ + padding) / ratio);\n\n scale.invert = _ => _ * ratio - padding;\n\n scale.bitmap = () => Bitmap(w, h);\n\n scale.ratio = ratio;\n scale.padding = padding;\n scale.width = width;\n scale.height = height;\n return scale;\n}\n\nfunction placeAreaLabelNaive ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height; // try to place a label within an input area mark\n\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text); // label height\n\n let maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n areaWidth; // for each area sample point\n\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2;\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n\n if (areaWidth >= maxAreaWidth) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n }\n }\n\n x = textWidth / 2;\n y = textHeight / 2;\n x1 = d.x - x;\n x2 = d.x + x;\n y1 = d.y - y;\n y2 = d.y + y;\n d.align = 'center';\n\n if (x1 < 0 && x2 <= width) {\n d.align = 'left';\n } else if (0 <= x1 && width < x2) {\n d.align = 'right';\n }\n\n d.baseline = 'middle';\n\n if (y1 < 0 && y2 <= height) {\n d.baseline = 'top';\n } else if (0 <= y1 && height < y2) {\n d.baseline = 'bottom';\n }\n\n return true;\n };\n}\n\nfunction outOfBounds(x, y, textWidth, textHeight, width, height) {\n let r = textWidth / 2;\n return x - r < 0 || x + r > width || y - (r = textHeight / 2) < 0 || y + r > height;\n}\nfunction collision($, x, y, textHeight, textWidth, h, bm0, bm1) {\n const w = textWidth * h / (textHeight * 2),\n x1 = $(x - w),\n x2 = $(x + w),\n y1 = $(y - (h = h / 2)),\n y2 = $(y + h);\n return bm0.outOfBounds(x1, y1, x2, y2) || bm0.getRange(x1, y1, x2, y2) || bm1 && bm1.getRange(x1, y1, x2, y2);\n}\n\nfunction placeAreaLabelReducedSearch ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n // where labels have been placed\n bm1 = bitmaps[1]; // area outlines\n\n function tryLabel(_x, _y, maxSize, textWidth, textHeight) {\n const x = $.invert(_x),\n y = $.invert(_y);\n let lo = maxSize,\n hi = height,\n mid;\n\n if (!outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, lo, bm0, bm1) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n // if the label fits at the current sample point,\n // perform binary search to find the largest font size that fits\n while (hi - lo >= 1) {\n mid = (lo + hi) / 2;\n\n if (collision($, x, y, textHeight, textWidth, mid, bm0, bm1)) {\n hi = mid;\n } else {\n lo = mid;\n }\n } // place label if current lower bound exceeds prior max font size\n\n\n if (lo > maxSize) {\n return [x, y, lo, true];\n }\n }\n } // try to place a label within an input area mark\n\n\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text); // label height\n\n let maxSize = avoidBaseMark ? textHeight : 0,\n labelPlaced = false,\n labelPlaced2 = false,\n maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n _x,\n _y,\n _x1,\n _xMid,\n _x2,\n _y1,\n _yMid,\n _y2,\n areaWidth,\n result,\n swapTmp; // for each area sample point\n\n\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n\n if (x1 > x2) {\n swapTmp = x1;\n x1 = x2;\n x2 = swapTmp;\n }\n\n if (y1 > y2) {\n swapTmp = y1;\n y1 = y2;\n y2 = swapTmp;\n }\n\n _x1 = $(x1);\n _x2 = $(x2);\n _xMid = ~~((_x1 + _x2) / 2);\n _y1 = $(y1);\n _y2 = $(y2);\n _yMid = ~~((_y1 + _y2) / 2); // search along the line from mid point between the 2 border to lower border\n\n for (_x = _xMid; _x >= _x1; --_x) {\n for (_y = _yMid; _y >= _y1; --_y) {\n result = tryLabel(_x, _y, maxSize, textWidth, textHeight);\n\n if (result) {\n [d.x, d.y, maxSize, labelPlaced] = result;\n }\n }\n } // search along the line from mid point between the 2 border to upper border\n\n\n for (_x = _xMid; _x <= _x2; ++_x) {\n for (_y = _yMid; _y <= _y2; ++_y) {\n result = tryLabel(_x, _y, maxSize, textWidth, textHeight);\n\n if (result) {\n [d.x, d.y, maxSize, labelPlaced] = result;\n }\n }\n } // place label at slice center if not placed through other means\n // and if we're not avoiding overlap with other areas\n\n\n if (!labelPlaced && !avoidBaseMark) {\n // one span is zero, hence we can add\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2; // place label if it fits and improves the max area width\n\n if (areaWidth >= maxAreaWidth && !outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n labelPlaced2 = true;\n }\n }\n } // record current label placement information, update label bitmap\n\n\n if (labelPlaced || labelPlaced2) {\n x = textWidth / 2;\n y = textHeight / 2;\n bm0.setRange($(d.x - x), $(d.y - y), $(d.x + x), $(d.y + y));\n d.align = 'center';\n d.baseline = 'middle';\n return true;\n } else {\n return false;\n }\n };\n}\n\nconst X_DIR = [-1, -1, 1, 1];\nconst Y_DIR = [-1, 1, -1, 1];\nfunction placeAreaLabelFloodFill ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n // where labels have been placed\n bm1 = bitmaps[1],\n // area outlines\n bm2 = $.bitmap(); // flood-fill visitations\n // try to place a label within an input area mark\n\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text),\n // label height\n stack = []; // flood fill stack\n\n let maxSize = avoidBaseMark ? textHeight : 0,\n labelPlaced = false,\n labelPlaced2 = false,\n maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n _x,\n _y,\n lo,\n hi,\n mid,\n areaWidth; // for each area sample point\n\n\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2; // add scaled center point to stack\n\n stack.push([$((x1 + x2) / 2), $((y1 + y2) / 2)]); // perform flood fill, visit points\n\n while (stack.length) {\n [_x, _y] = stack.pop(); // exit if point already marked\n\n if (bm0.get(_x, _y) || bm1.get(_x, _y) || bm2.get(_x, _y)) continue; // mark point in flood fill bitmap\n // add search points for all (in bound) directions\n\n bm2.set(_x, _y);\n\n for (let j = 0; j < 4; ++j) {\n x = _x + X_DIR[j];\n y = _y + Y_DIR[j];\n if (!bm2.outOfBounds(x, y, x, y)) stack.push([x, y]);\n } // unscale point back to x, y space\n\n\n x = $.invert(_x);\n y = $.invert(_y);\n lo = maxSize;\n hi = height; // TODO: make this bound smaller\n\n if (!outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, lo, bm0, bm1) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n // if the label fits at the current sample point,\n // perform binary search to find the largest font size that fits\n while (hi - lo >= 1) {\n mid = (lo + hi) / 2;\n\n if (collision($, x, y, textHeight, textWidth, mid, bm0, bm1)) {\n hi = mid;\n } else {\n lo = mid;\n }\n } // place label if current lower bound exceeds prior max font size\n\n\n if (lo > maxSize) {\n d.x = x;\n d.y = y;\n maxSize = lo;\n labelPlaced = true;\n }\n }\n } // place label at slice center if not placed through other means\n // and if we're not avoiding overlap with other areas\n\n\n if (!labelPlaced && !avoidBaseMark) {\n // one span is zero, hence we can add\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2; // place label if it fits and improves the max area width\n\n if (areaWidth >= maxAreaWidth && !outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n labelPlaced2 = true;\n }\n }\n } // record current label placement information, update label bitmap\n\n\n if (labelPlaced || labelPlaced2) {\n x = textWidth / 2;\n y = textHeight / 2;\n bm0.setRange($(d.x - x), $(d.y - y), $(d.x + x), $(d.y + y));\n d.align = 'center';\n d.baseline = 'middle';\n return true;\n } else {\n return false;\n }\n };\n}\n\nconst Aligns = ['right', 'center', 'left'],\n Baselines = ['bottom', 'middle', 'top'];\nfunction placeMarkLabel ($, bitmaps, anchors, offsets) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n bm1 = bitmaps[1],\n n = offsets.length;\n return function (d) {\n const boundary = d.boundary,\n textHeight = d.datum.fontSize; // can not be placed if the mark is not visible in the graph bound\n\n if (boundary[2] < 0 || boundary[5] < 0 || boundary[0] > width || boundary[3] > height) {\n return false;\n }\n\n let textWidth = 0,\n dx,\n dy,\n isInside,\n sizeFactor,\n insideFactor,\n x1,\n x2,\n y1,\n y2,\n xc,\n yc,\n _x1,\n _x2,\n _y1,\n _y2; // for each anchor and offset\n\n\n for (let i = 0; i < n; ++i) {\n dx = (anchors[i] & 0x3) - 1;\n dy = (anchors[i] >>> 0x2 & 0x3) - 1;\n isInside = dx === 0 && dy === 0 || offsets[i] < 0;\n sizeFactor = dx && dy ? Math.SQRT1_2 : 1;\n insideFactor = offsets[i] < 0 ? -1 : 1;\n x1 = boundary[1 + dx] + offsets[i] * dx * sizeFactor;\n yc = boundary[4 + dy] + insideFactor * textHeight * dy / 2 + offsets[i] * dy * sizeFactor;\n y1 = yc - textHeight / 2;\n y2 = yc + textHeight / 2;\n _x1 = $(x1);\n _y1 = $(y1);\n _y2 = $(y2);\n\n if (!textWidth) {\n // to avoid finding width of text label,\n if (!test(_x1, _x1, _y1, _y2, bm0, bm1, x1, x1, y1, y2, boundary, isInside)) {\n // skip this anchor/offset option if we fail to place a label with 1px width\n continue;\n } else {\n // Otherwise, find the label width\n textWidth = textMetrics.width(d.datum, d.datum.text);\n }\n }\n\n xc = x1 + insideFactor * textWidth * dx / 2;\n x1 = xc - textWidth / 2;\n x2 = xc + textWidth / 2;\n _x1 = $(x1);\n _x2 = $(x2);\n\n if (test(_x1, _x2, _y1, _y2, bm0, bm1, x1, x2, y1, y2, boundary, isInside)) {\n // place label if the position is placeable\n d.x = !dx ? xc : dx * insideFactor < 0 ? x2 : x1;\n d.y = !dy ? yc : dy * insideFactor < 0 ? y2 : y1;\n d.align = Aligns[dx * insideFactor + 1];\n d.baseline = Baselines[dy * insideFactor + 1];\n bm0.setRange(_x1, _y1, _x2, _y2);\n return true;\n }\n }\n\n return false;\n };\n} // Test if a label with the given dimensions can be added without overlap\n\nfunction test(_x1, _x2, _y1, _y2, bm0, bm1, x1, x2, y1, y2, boundary, isInside) {\n return !(bm0.outOfBounds(_x1, _y1, _x2, _y2) || (isInside && bm1 ? bm1.getRange(_x1, _y1, _x2, _y2) || !isInMarkBound(x1, y1, x2, y2, boundary) : bm0.getRange(_x1, _y1, _x2, _y2)));\n}\n\nfunction isInMarkBound(x1, y1, x2, y2, boundary) {\n return boundary[0] <= x1 && x2 <= boundary[2] && boundary[3] <= y1 && y2 <= boundary[5];\n}\n\nconst TOP = 0x0,\n MIDDLE = 0x4,\n BOTTOM = 0x8,\n LEFT = 0x0,\n CENTER = 0x1,\n RIGHT = 0x2; // Mapping from text anchor to number representation\n\nconst anchorCode = {\n 'top-left': TOP + LEFT,\n 'top': TOP + CENTER,\n 'top-right': TOP + RIGHT,\n 'left': MIDDLE + LEFT,\n 'middle': MIDDLE + CENTER,\n 'right': MIDDLE + RIGHT,\n 'bottom-left': BOTTOM + LEFT,\n 'bottom': BOTTOM + CENTER,\n 'bottom-right': BOTTOM + RIGHT\n};\nconst placeAreaLabel = {\n 'naive': placeAreaLabelNaive,\n 'reduced-search': placeAreaLabelReducedSearch,\n 'floodfill': placeAreaLabelFloodFill\n};\nfunction labelLayout (texts, size, compare, offset, anchor, avoidMarks, avoidBaseMark, lineAnchor, markIndex, padding, method) {\n // early exit for empty data\n if (!texts.length) return texts;\n const positions = Math.max(offset.length, anchor.length),\n offsets = getOffsets(offset, positions),\n anchors = getAnchors(anchor, positions),\n marktype = markType(texts[0].datum),\n grouptype = marktype === 'group' && texts[0].datum.items[markIndex].marktype,\n isGroupArea = grouptype === 'area',\n boundary = markBoundary(marktype, grouptype, lineAnchor, markIndex),\n $ = scaler(size[0], size[1], padding),\n isNaiveGroupArea = isGroupArea && method === 'naive'; // prepare text mark data for placing\n\n const data = texts.map(d => ({\n datum: d,\n opacity: 0,\n x: undefined,\n y: undefined,\n align: undefined,\n baseline: undefined,\n boundary: boundary(d)\n }));\n let bitmaps;\n\n if (!isNaiveGroupArea) {\n // sort labels in priority order, if comparator is provided\n if (compare) {\n data.sort((a, b) => compare(a.datum, b.datum));\n } // flag indicating if label can be placed inside its base mark\n\n\n let labelInside = false;\n\n for (let i = 0; i < anchors.length && !labelInside; ++i) {\n // label inside if anchor is at center\n // label inside if offset to be inside the mark bound\n labelInside = anchors[i] === 0x5 || offsets[i] < 0;\n } // extract data information from base mark when base mark is to be avoided\n // base mark is implicitly avoided if it is a group area\n\n\n if (marktype && (avoidBaseMark || isGroupArea)) {\n avoidMarks = [texts.map(d => d.datum)].concat(avoidMarks);\n } // generate bitmaps for layout calculation\n\n\n bitmaps = avoidMarks.length ? markBitmaps($, avoidMarks, labelInside, isGroupArea) : baseBitmaps($, avoidBaseMark && data);\n } // generate label placement function\n\n\n const place = isGroupArea ? placeAreaLabel[method]($, bitmaps, avoidBaseMark, markIndex) : placeMarkLabel($, bitmaps, anchors, offsets); // place all labels\n\n data.forEach(d => d.opacity = +place(d));\n return data;\n}\n\nfunction getOffsets(_, count) {\n const offsets = new Float64Array(count),\n n = _.length;\n\n for (let i = 0; i < n; ++i) offsets[i] = _[i] || 0;\n\n for (let i = n; i < count; ++i) offsets[i] = offsets[n - 1];\n\n return offsets;\n}\n\nfunction getAnchors(_, count) {\n const anchors = new Int8Array(count),\n n = _.length;\n\n for (let i = 0; i < n; ++i) anchors[i] |= anchorCode[_[i]];\n\n for (let i = n; i < count; ++i) anchors[i] = anchors[n - 1];\n\n return anchors;\n}\n\nfunction markType(item) {\n return item && item.mark && item.mark.marktype;\n}\n/**\n * Factory function for function for getting base mark boundary, depending\n * on mark and group type. When mark type is undefined, line or area: boundary\n * is the coordinate of each data point. When base mark is grouped line,\n * boundary is either at the beginning or end of the line depending on the\n * value of lineAnchor. Otherwise, use bounds of base mark.\n */\n\n\nfunction markBoundary(marktype, grouptype, lineAnchor, markIndex) {\n const xy = d => [d.x, d.x, d.x, d.y, d.y, d.y];\n\n if (!marktype) {\n return xy; // no reactive geometry\n } else if (marktype === 'line' || marktype === 'area') {\n return d => xy(d.datum);\n } else if (grouptype === 'line') {\n return d => {\n const items = d.datum.items[markIndex].items;\n return xy(items.length ? items[lineAnchor === 'start' ? 0 : items.length - 1] : {\n x: NaN,\n y: NaN\n });\n };\n } else {\n return d => {\n const b = d.datum.bounds;\n return [b.x1, (b.x1 + b.x2) / 2, b.x2, b.y1, (b.y1 + b.y2) / 2, b.y2];\n };\n }\n}\n\nconst Output = ['x', 'y', 'opacity', 'align', 'baseline'];\nconst Anchors = ['top-left', 'left', 'bottom-left', 'top', 'bottom', 'top-right', 'right', 'bottom-right'];\n/**\n * Compute text label layout to annotate marks.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The size of the layout, provided as a [width, height] array.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting label data in priority order.\n * @param {Array} [params.anchor] - Label anchor points relative to the base mark bounding box.\n * The available options are 'top-left', 'left', 'bottom-left', 'top',\n * 'bottom', 'top-right', 'right', 'bottom-right', 'middle'.\n * @param {Array} [params.offset] - Label offsets (in pixels) from the base mark bounding box.\n * This parameter is parallel to the list of anchor points.\n * @param {number} [params.padding=0] - The amount (in pixels) that a label may exceed the layout size.\n * @param {string} [params.lineAnchor='end'] - For group line mark labels only, indicates the anchor\n * position for labels. One of 'start' or 'end'.\n * @param {string} [params.markIndex=0] - For group mark labels only, an index indicating\n * which mark within the group should be labeled.\n * @param {Array} [params.avoidMarks] - A list of additional mark names for which the label\n * layout should avoid overlap.\n * @param {boolean} [params.avoidBaseMark=true] - Boolean flag indicating if labels should avoid\n * overlap with the underlying base mark being labeled.\n * @param {string} [params.method='naive'] - For area make labels only, a method for\n * place labels. One of 'naive', 'reduced-search', or 'floodfill'.\n * @param {Array} [params.as] - The output fields written by the transform.\n * The default is ['x', 'y', 'opacity', 'align', 'baseline'].\n */\n\nfunction Label(params) {\n Transform.call(this, null, params);\n}\nLabel.Definition = {\n type: 'Label',\n metadata: {\n modifies: true\n },\n params: [{\n name: 'size',\n type: 'number',\n array: true,\n length: 2,\n required: true\n }, {\n name: 'sort',\n type: 'compare'\n }, {\n name: 'anchor',\n type: 'string',\n array: true,\n default: Anchors\n }, {\n name: 'offset',\n type: 'number',\n array: true,\n default: [1]\n }, {\n name: 'padding',\n type: 'number',\n default: 0\n }, {\n name: 'lineAnchor',\n type: 'string',\n values: ['start', 'end'],\n default: 'end'\n }, {\n name: 'markIndex',\n type: 'number',\n default: 0\n }, {\n name: 'avoidBaseMark',\n type: 'boolean',\n default: true\n }, {\n name: 'avoidMarks',\n type: 'data',\n array: true\n }, {\n name: 'method',\n type: 'string',\n default: 'naive'\n }, {\n name: 'as',\n type: 'string',\n array: true,\n length: Output.length,\n default: Output\n }]\n};\ninherits(Label, Transform, {\n transform(_, pulse) {\n function modp(param) {\n const p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n\n const mod = _.modified();\n\n if (!(mod || pulse.changed(pulse.ADD_REM) || modp('sort'))) return;\n\n if (!_.size || _.size.length !== 2) {\n error('Size parameter should be specified as a [width, height] array.');\n }\n\n const as = _.as || Output; // run label layout\n\n labelLayout(pulse.materialize(pulse.SOURCE).source || [], _.size, _.sort, array(_.offset == null ? 1 : _.offset), array(_.anchor || Anchors), _.avoidMarks || [], _.avoidBaseMark !== false, _.lineAnchor || 'end', _.markIndex || 0, _.padding || 0, _.method || 'naive').forEach(l => {\n // write layout results to data stream\n const t = l.datum;\n t[as[0]] = l.x;\n t[as[1]] = l.y;\n t[as[2]] = l.opacity;\n t[as[3]] = l.align;\n t[as[4]] = l.baseline;\n });\n return pulse.reflow(mod).modifies(as);\n }\n\n});\n\nexport { Label as label };\n","import { regressionLoess, sampleCurve, regressionLinear, regressionLog, regressionExp, regressionPow, regressionQuad, regressionPoly } from 'vega-statistics';\nimport { Transform, ingest } from 'vega-dataflow';\nimport { inherits, accessorName, hasOwnProperty, error, extent } from 'vega-util';\n\nfunction partition (data, groupby) {\n var groups = [],\n get = function (f) {\n return f(t);\n },\n map,\n i,\n n,\n t,\n k,\n g; // partition data points into stack groups\n\n\n if (groupby == null) {\n groups.push(data);\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n\n g.push(t);\n }\n }\n\n return groups;\n}\n\n/**\n * Compute locally-weighted regression fits for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.x - An accessor for the predictor data field.\n * @param {function(object): *} params.y - An accessor for the predicted data field.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {number} [params.bandwidth=0.3] - The loess bandwidth.\n */\n\nfunction Loess(params) {\n Transform.call(this, null, params);\n}\nLoess.Definition = {\n 'type': 'Loess',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0.3\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Loess, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n m = names.length,\n as = _.as || [accessorName(_.x), accessorName(_.y)],\n values = [];\n groups.forEach(g => {\n regressionLoess(g, _.x, _.y, _.bandwidth || 0.3).forEach(p => {\n const t = {};\n\n for (let i = 0; i < m; ++i) {\n t[names[i]] = g.dims[i];\n }\n\n t[as[0]] = p[0];\n t[as[1]] = p[1];\n values.push(ingest(t));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n\n return out;\n }\n\n});\n\nconst Methods = {\n linear: regressionLinear,\n log: regressionLog,\n exp: regressionExp,\n pow: regressionPow,\n quad: regressionQuad,\n poly: regressionPoly\n};\n\nconst degreesOfFreedom = (method, order) => method === 'poly' ? order : method === 'quad' ? 2 : 1;\n/**\n * Compute regression fits for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.x - An accessor for the predictor data field.\n * @param {function(object): *} params.y - An accessor for the predicted data field.\n * @param {string} [params.method='linear'] - The regression method to apply.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {Array} [params.extent] - The domain extent over which to plot the regression line.\n * @param {number} [params.order=3] - The polynomial order. Only applies to the 'poly' method.\n */\n\n\nfunction Regression(params) {\n Transform.call(this, null, params);\n}\nRegression.Definition = {\n 'type': 'Regression',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'method',\n 'type': 'string',\n 'default': 'linear',\n 'values': Object.keys(Methods)\n }, {\n 'name': 'order',\n 'type': 'number',\n 'default': 3\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'params',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Regression, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n method = _.method || 'linear',\n order = _.order || 3,\n dof = degreesOfFreedom(method, order),\n as = _.as || [accessorName(_.x), accessorName(_.y)],\n fit = Methods[method],\n values = [];\n let domain = _.extent;\n\n if (!hasOwnProperty(Methods, method)) {\n error('Invalid regression method: ' + method);\n }\n\n if (domain != null) {\n if (method === 'log' && domain[0] <= 0) {\n pulse.dataflow.warn('Ignoring extent with values <= 0 for log regression.');\n domain = null;\n }\n }\n\n groups.forEach(g => {\n const n = g.length;\n\n if (n <= dof) {\n pulse.dataflow.warn('Skipping regression with more parameters than data points.');\n return;\n }\n\n const model = fit(g, _.x, _.y, order);\n\n if (_.params) {\n // if parameter vectors requested return those\n values.push(ingest({\n keys: g.dims,\n coef: model.coef,\n rSquared: model.rSquared\n }));\n return;\n }\n\n const dom = domain || extent(g, _.x),\n add = p => {\n const t = {};\n\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n\n t[as[0]] = p[0];\n t[as[1]] = p[1];\n values.push(ingest(t));\n };\n\n if (method === 'linear') {\n // for linear regression we only need the end points\n dom.forEach(x => add([x, model.predict(x)]));\n } else {\n // otherwise return trend line sample points\n sampleCurve(model.predict, dom, 25, 200).forEach(add);\n }\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n\n return out;\n }\n\n});\n\nexport { Loess as loess, Regression as regression };\n","\nconst EPSILON = Math.pow(2, -52);\nconst EDGE_STACK = new Uint32Array(512);\n\nexport default class Delaunator {\n\n static from(points, getX = defaultGetX, getY = defaultGetY) {\n const n = points.length;\n const coords = new Float64Array(n * 2);\n\n for (let i = 0; i < n; i++) {\n const p = points[i];\n coords[2 * i] = getX(p);\n coords[2 * i + 1] = getY(p);\n }\n\n return new Delaunator(coords);\n }\n\n constructor(coords) {\n const n = coords.length >> 1;\n if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.');\n\n this.coords = coords;\n\n // arrays that will store the triangulation graph\n const maxTriangles = Math.max(2 * n - 5, 0);\n this._triangles = new Uint32Array(maxTriangles * 3);\n this._halfedges = new Int32Array(maxTriangles * 3);\n\n // temporary arrays for tracking the edges of the advancing convex hull\n this._hashSize = Math.ceil(Math.sqrt(n));\n this._hullPrev = new Uint32Array(n); // edge to prev edge\n this._hullNext = new Uint32Array(n); // edge to next edge\n this._hullTri = new Uint32Array(n); // edge to adjacent triangle\n this._hullHash = new Int32Array(this._hashSize).fill(-1); // angular edge hash\n\n // temporary arrays for sorting points\n this._ids = new Uint32Array(n);\n this._dists = new Float64Array(n);\n\n this.update();\n }\n\n update() {\n const {coords, _hullPrev: hullPrev, _hullNext: hullNext, _hullTri: hullTri, _hullHash: hullHash} = this;\n const n = coords.length >> 1;\n\n // populate an array of point indices; calculate input data bbox\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n for (let i = 0; i < n; i++) {\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n this._ids[i] = i;\n }\n const cx = (minX + maxX) / 2;\n const cy = (minY + maxY) / 2;\n\n let minDist = Infinity;\n let i0, i1, i2;\n\n // pick a seed point close to the center\n for (let i = 0; i < n; i++) {\n const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]);\n if (d < minDist) {\n i0 = i;\n minDist = d;\n }\n }\n const i0x = coords[2 * i0];\n const i0y = coords[2 * i0 + 1];\n\n minDist = Infinity;\n\n // find the point closest to the seed\n for (let i = 0; i < n; i++) {\n if (i === i0) continue;\n const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]);\n if (d < minDist && d > 0) {\n i1 = i;\n minDist = d;\n }\n }\n let i1x = coords[2 * i1];\n let i1y = coords[2 * i1 + 1];\n\n let minRadius = Infinity;\n\n // find the third point which forms the smallest circumcircle with the first two\n for (let i = 0; i < n; i++) {\n if (i === i0 || i === i1) continue;\n const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]);\n if (r < minRadius) {\n i2 = i;\n minRadius = r;\n }\n }\n let i2x = coords[2 * i2];\n let i2y = coords[2 * i2 + 1];\n\n if (minRadius === Infinity) {\n // order collinear points by dx (or dy if all x are identical)\n // and return the list as a hull\n for (let i = 0; i < n; i++) {\n this._dists[i] = (coords[2 * i] - coords[0]) || (coords[2 * i + 1] - coords[1]);\n }\n quicksort(this._ids, this._dists, 0, n - 1);\n const hull = new Uint32Array(n);\n let j = 0;\n for (let i = 0, d0 = -Infinity; i < n; i++) {\n const id = this._ids[i];\n if (this._dists[id] > d0) {\n hull[j++] = id;\n d0 = this._dists[id];\n }\n }\n this.hull = hull.subarray(0, j);\n this.triangles = new Uint32Array(0);\n this.halfedges = new Uint32Array(0);\n return;\n }\n\n // swap the order of the seed points for counter-clockwise orientation\n if (orient(i0x, i0y, i1x, i1y, i2x, i2y)) {\n const i = i1;\n const x = i1x;\n const y = i1y;\n i1 = i2;\n i1x = i2x;\n i1y = i2y;\n i2 = i;\n i2x = x;\n i2y = y;\n }\n\n const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y);\n this._cx = center.x;\n this._cy = center.y;\n\n for (let i = 0; i < n; i++) {\n this._dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y);\n }\n\n // sort the points by distance from the seed triangle circumcenter\n quicksort(this._ids, this._dists, 0, n - 1);\n\n // set up the seed triangle as the starting hull\n this._hullStart = i0;\n let hullSize = 3;\n\n hullNext[i0] = hullPrev[i2] = i1;\n hullNext[i1] = hullPrev[i0] = i2;\n hullNext[i2] = hullPrev[i1] = i0;\n\n hullTri[i0] = 0;\n hullTri[i1] = 1;\n hullTri[i2] = 2;\n\n hullHash.fill(-1);\n hullHash[this._hashKey(i0x, i0y)] = i0;\n hullHash[this._hashKey(i1x, i1y)] = i1;\n hullHash[this._hashKey(i2x, i2y)] = i2;\n\n this.trianglesLen = 0;\n this._addTriangle(i0, i1, i2, -1, -1, -1);\n\n for (let k = 0, xp, yp; k < this._ids.length; k++) {\n const i = this._ids[k];\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n\n // skip near-duplicate points\n if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue;\n xp = x;\n yp = y;\n\n // skip seed triangle points\n if (i === i0 || i === i1 || i === i2) continue;\n\n // find a visible edge on the convex hull using edge hash\n let start = 0;\n for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) {\n start = hullHash[(key + j) % this._hashSize];\n if (start !== -1 && start !== hullNext[start]) break;\n }\n\n start = hullPrev[start];\n let e = start, q;\n while (q = hullNext[e], !orient(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1])) {\n e = q;\n if (e === start) {\n e = -1;\n break;\n }\n }\n if (e === -1) continue; // likely a near-duplicate point; skip it\n\n // add the first triangle from the point\n let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]);\n\n // recursively flip triangles from the point until they satisfy the Delaunay condition\n hullTri[i] = this._legalize(t + 2);\n hullTri[e] = t; // keep track of boundary triangles on the hull\n hullSize++;\n\n // walk forward through the hull, adding more triangles and flipping recursively\n let n = hullNext[e];\n while (q = hullNext[n], orient(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1])) {\n t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]);\n hullTri[i] = this._legalize(t + 2);\n hullNext[n] = n; // mark as removed\n hullSize--;\n n = q;\n }\n\n // walk backward from the other side, adding more triangles and flipping\n if (e === start) {\n while (q = hullPrev[e], orient(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1])) {\n t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]);\n this._legalize(t + 2);\n hullTri[q] = t;\n hullNext[e] = e; // mark as removed\n hullSize--;\n e = q;\n }\n }\n\n // update the hull indices\n this._hullStart = hullPrev[i] = e;\n hullNext[e] = hullPrev[n] = i;\n hullNext[i] = n;\n\n // save the two new edges in the hash table\n hullHash[this._hashKey(x, y)] = i;\n hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e;\n }\n\n this.hull = new Uint32Array(hullSize);\n for (let i = 0, e = this._hullStart; i < hullSize; i++) {\n this.hull[i] = e;\n e = hullNext[e];\n }\n\n // trim typed triangle mesh arrays\n this.triangles = this._triangles.subarray(0, this.trianglesLen);\n this.halfedges = this._halfedges.subarray(0, this.trianglesLen);\n }\n\n _hashKey(x, y) {\n return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize;\n }\n\n _legalize(a) {\n const {_triangles: triangles, _halfedges: halfedges, coords} = this;\n\n let i = 0;\n let ar = 0;\n\n // recursion eliminated with a fixed-size stack\n while (true) {\n const b = halfedges[a];\n\n /* if the pair of triangles doesn't satisfy the Delaunay condition\n * (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n * then do the same check/flip recursively for the new pair of triangles\n *\n * pl pl\n * /||\\ / \\\n * al/ || \\bl al/ \\a\n * / || \\ / \\\n * / a||b \\ flip /___ar___\\\n * p0\\ || /p1 => p0\\---bl---/p1\n * \\ || / \\ /\n * ar\\ || /br b\\ /br\n * \\||/ \\ /\n * pr pr\n */\n const a0 = a - a % 3;\n ar = a0 + (a + 2) % 3;\n\n if (b === -1) { // convex hull edge\n if (i === 0) break;\n a = EDGE_STACK[--i];\n continue;\n }\n\n const b0 = b - b % 3;\n const al = a0 + (a + 1) % 3;\n const bl = b0 + (b + 2) % 3;\n\n const p0 = triangles[ar];\n const pr = triangles[a];\n const pl = triangles[al];\n const p1 = triangles[bl];\n\n const illegal = inCircle(\n coords[2 * p0], coords[2 * p0 + 1],\n coords[2 * pr], coords[2 * pr + 1],\n coords[2 * pl], coords[2 * pl + 1],\n coords[2 * p1], coords[2 * p1 + 1]);\n\n if (illegal) {\n triangles[a] = p1;\n triangles[b] = p0;\n\n const hbl = halfedges[bl];\n\n // edge swapped on the other side of the hull (rare); fix the halfedge reference\n if (hbl === -1) {\n let e = this._hullStart;\n do {\n if (this._hullTri[e] === bl) {\n this._hullTri[e] = a;\n break;\n }\n e = this._hullPrev[e];\n } while (e !== this._hullStart);\n }\n this._link(a, hbl);\n this._link(b, halfedges[ar]);\n this._link(ar, bl);\n\n const br = b0 + (b + 1) % 3;\n\n // don't worry about hitting the cap: it can only happen on extremely degenerate input\n if (i < EDGE_STACK.length) {\n EDGE_STACK[i++] = br;\n }\n } else {\n if (i === 0) break;\n a = EDGE_STACK[--i];\n }\n }\n\n return ar;\n }\n\n _link(a, b) {\n this._halfedges[a] = b;\n if (b !== -1) this._halfedges[b] = a;\n }\n\n // add a new triangle given vertex indices and adjacent half-edge ids\n _addTriangle(i0, i1, i2, a, b, c) {\n const t = this.trianglesLen;\n\n this._triangles[t] = i0;\n this._triangles[t + 1] = i1;\n this._triangles[t + 2] = i2;\n\n this._link(t, a);\n this._link(t + 1, b);\n this._link(t + 2, c);\n\n this.trianglesLen += 3;\n\n return t;\n }\n}\n\n// monotonically increases with real angle, but doesn't need expensive trigonometry\nfunction pseudoAngle(dx, dy) {\n const p = dx / (Math.abs(dx) + Math.abs(dy));\n return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1]\n}\n\nfunction dist(ax, ay, bx, by) {\n const dx = ax - bx;\n const dy = ay - by;\n return dx * dx + dy * dy;\n}\n\n// return 2d orientation sign if we're confident in it through J. Shewchuk's error bound check\nfunction orientIfSure(px, py, rx, ry, qx, qy) {\n const l = (ry - py) * (qx - px);\n const r = (rx - px) * (qy - py);\n return Math.abs(l - r) >= 3.3306690738754716e-16 * Math.abs(l + r) ? l - r : 0;\n}\n\n// a more robust orientation test that's stable in a given triangle (to fix robustness issues)\nfunction orient(rx, ry, qx, qy, px, py) {\n const sign = orientIfSure(px, py, rx, ry, qx, qy) ||\n orientIfSure(rx, ry, qx, qy, px, py) ||\n orientIfSure(qx, qy, px, py, rx, ry);\n return sign < 0;\n}\n\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\n const dx = ax - px;\n const dy = ay - py;\n const ex = bx - px;\n const ey = by - py;\n const fx = cx - px;\n const fy = cy - py;\n\n const ap = dx * dx + dy * dy;\n const bp = ex * ex + ey * ey;\n const cp = fx * fx + fy * fy;\n\n return dx * (ey * cp - bp * fy) -\n dy * (ex * cp - bp * fx) +\n ap * (ex * fy - ey * fx) < 0;\n}\n\nfunction circumradius(ax, ay, bx, by, cx, cy) {\n const dx = bx - ax;\n const dy = by - ay;\n const ex = cx - ax;\n const ey = cy - ay;\n\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const d = 0.5 / (dx * ey - dy * ex);\n\n const x = (ey * bl - dy * cl) * d;\n const y = (dx * cl - ex * bl) * d;\n\n return x * x + y * y;\n}\n\nfunction circumcenter(ax, ay, bx, by, cx, cy) {\n const dx = bx - ax;\n const dy = by - ay;\n const ex = cx - ax;\n const ey = cy - ay;\n\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const d = 0.5 / (dx * ey - dy * ex);\n\n const x = ax + (ey * bl - dy * cl) * d;\n const y = ay + (dx * cl - ex * bl) * d;\n\n return {x, y};\n}\n\nfunction quicksort(ids, dists, left, right) {\n if (right - left <= 20) {\n for (let i = left + 1; i <= right; i++) {\n const temp = ids[i];\n const tempDist = dists[temp];\n let j = i - 1;\n while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--];\n ids[j + 1] = temp;\n }\n } else {\n const median = (left + right) >> 1;\n let i = left + 1;\n let j = right;\n swap(ids, median, i);\n if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right);\n if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right);\n if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i);\n\n const temp = ids[i];\n const tempDist = dists[temp];\n while (true) {\n do i++; while (dists[ids[i]] < tempDist);\n do j--; while (dists[ids[j]] > tempDist);\n if (j < i) break;\n swap(ids, i, j);\n }\n ids[left + 1] = ids[j];\n ids[j] = temp;\n\n if (right - i + 1 >= j - left) {\n quicksort(ids, dists, i, right);\n quicksort(ids, dists, left, j - 1);\n } else {\n quicksort(ids, dists, left, j - 1);\n quicksort(ids, dists, i, right);\n }\n }\n}\n\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction defaultGetX(p) {\n return p[0];\n}\nfunction defaultGetY(p) {\n return p[1];\n}\n","const epsilon = 1e-6;\n\nexport default class Path {\n constructor() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n }\n moveTo(x, y) {\n this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n }\n lineTo(x, y) {\n this._ += `L${this._x1 = +x},${this._y1 = +y}`;\n }\n arc(x, y, r) {\n x = +x, y = +y, r = +r;\n const x0 = x + r;\n const y0 = y;\n if (r < 0) throw new Error(\"negative radius\");\n if (this._x1 === null) this._ += `M${x0},${y0}`;\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) this._ += \"L\" + x0 + \",\" + y0;\n if (!r) return;\n this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`;\n }\n rect(x, y, w, h) {\n this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${+w}v${+h}h${-w}Z`;\n }\n value() {\n return this._ || null;\n }\n}\n","export default class Polygon {\n constructor() {\n this._ = [];\n }\n moveTo(x, y) {\n this._.push([x, y]);\n }\n closePath() {\n this._.push(this._[0].slice());\n }\n lineTo(x, y) {\n this._.push([x, y]);\n }\n value() {\n return this._.length ? this._ : null;\n }\n}\n","import Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\n\nexport default class Voronoi {\n constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) {\n if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error(\"invalid bounds\");\n this.delaunay = delaunay;\n this._circumcenters = new Float64Array(delaunay.points.length * 2);\n this.vectors = new Float64Array(delaunay.points.length * 2);\n this.xmax = xmax, this.xmin = xmin;\n this.ymax = ymax, this.ymin = ymin;\n this._init();\n }\n update() {\n this.delaunay.update();\n this._init();\n return this;\n }\n _init() {\n const {delaunay: {points, hull, triangles}, vectors} = this;\n\n // Compute circumcenters.\n const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2);\n for (let i = 0, j = 0, n = triangles.length, x, y; i < n; i += 3, j += 2) {\n const t1 = triangles[i] * 2;\n const t2 = triangles[i + 1] * 2;\n const t3 = triangles[i + 2] * 2;\n const x1 = points[t1];\n const y1 = points[t1 + 1];\n const x2 = points[t2];\n const y2 = points[t2 + 1];\n const x3 = points[t3];\n const y3 = points[t3 + 1];\n\n const dx = x2 - x1;\n const dy = y2 - y1;\n const ex = x3 - x1;\n const ey = y3 - y1;\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const ab = (dx * ey - dy * ex) * 2;\n\n if (!ab) {\n // degenerate case (collinear diagram)\n x = (x1 + x3) / 2 - 1e8 * ey;\n y = (y1 + y3) / 2 + 1e8 * ex;\n }\n else if (Math.abs(ab) < 1e-8) {\n // almost equal points (degenerate triangle)\n x = (x1 + x3) / 2;\n y = (y1 + y3) / 2;\n } else {\n const d = 1 / ab;\n x = x1 + (ey * bl - dy * cl) * d;\n y = y1 + (dx * cl - ex * bl) * d;\n }\n circumcenters[j] = x;\n circumcenters[j + 1] = y;\n }\n\n // Compute exterior cell rays.\n let h = hull[hull.length - 1];\n let p0, p1 = h * 4;\n let x0, x1 = points[2 * h];\n let y0, y1 = points[2 * h + 1];\n vectors.fill(0);\n for (let i = 0; i < hull.length; ++i) {\n h = hull[i];\n p0 = p1, x0 = x1, y0 = y1;\n p1 = h * 4, x1 = points[2 * h], y1 = points[2 * h + 1];\n vectors[p0 + 2] = vectors[p1] = y0 - y1;\n vectors[p0 + 3] = vectors[p1 + 1] = x1 - x0;\n }\n }\n render(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {delaunay: {halfedges, inedges, hull}, circumcenters, vectors} = this;\n if (hull.length <= 1) return null;\n for (let i = 0, n = halfedges.length; i < n; ++i) {\n const j = halfedges[i];\n if (j < i) continue;\n const ti = Math.floor(i / 3) * 2;\n const tj = Math.floor(j / 3) * 2;\n const xi = circumcenters[ti];\n const yi = circumcenters[ti + 1];\n const xj = circumcenters[tj];\n const yj = circumcenters[tj + 1];\n this._renderSegment(xi, yi, xj, yj, context);\n }\n let h0, h1 = hull[hull.length - 1];\n for (let i = 0; i < hull.length; ++i) {\n h0 = h1, h1 = hull[i];\n const t = Math.floor(inedges[h1] / 3) * 2;\n const x = circumcenters[t];\n const y = circumcenters[t + 1];\n const v = h0 * 4;\n const p = this._project(x, y, vectors[v + 2], vectors[v + 3]);\n if (p) this._renderSegment(x, y, p[0], p[1], context);\n }\n return buffer && buffer.value();\n }\n renderBounds(context) {\n const buffer = context == null ? context = new Path : undefined;\n context.rect(this.xmin, this.ymin, this.xmax - this.xmin, this.ymax - this.ymin);\n return buffer && buffer.value();\n }\n renderCell(i, context) {\n const buffer = context == null ? context = new Path : undefined;\n const points = this._clip(i);\n if (points === null || !points.length) return;\n context.moveTo(points[0], points[1]);\n let n = points.length;\n while (points[0] === points[n-2] && points[1] === points[n-1] && n > 1) n -= 2;\n for (let i = 2; i < n; i += 2) {\n if (points[i] !== points[i-2] || points[i+1] !== points[i-1])\n context.lineTo(points[i], points[i + 1]);\n }\n context.closePath();\n return buffer && buffer.value();\n }\n *cellPolygons() {\n const {delaunay: {points}} = this;\n for (let i = 0, n = points.length / 2; i < n; ++i) {\n const cell = this.cellPolygon(i);\n if (cell) cell.index = i, yield cell;\n }\n }\n cellPolygon(i) {\n const polygon = new Polygon;\n this.renderCell(i, polygon);\n return polygon.value();\n }\n _renderSegment(x0, y0, x1, y1, context) {\n let S;\n const c0 = this._regioncode(x0, y0);\n const c1 = this._regioncode(x1, y1);\n if (c0 === 0 && c1 === 0) {\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n } else if (S = this._clipSegment(x0, y0, x1, y1, c0, c1)) {\n context.moveTo(S[0], S[1]);\n context.lineTo(S[2], S[3]);\n }\n }\n contains(i, x, y) {\n if ((x = +x, x !== x) || (y = +y, y !== y)) return false;\n return this.delaunay._step(i, x, y) === i;\n }\n *neighbors(i) {\n const ci = this._clip(i);\n if (ci) for (const j of this.delaunay.neighbors(i)) {\n const cj = this._clip(j);\n // find the common edge\n if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) {\n for (let aj = 0, lj = cj.length; aj < lj; aj += 2) {\n if (ci[ai] == cj[aj]\n && ci[ai + 1] == cj[aj + 1]\n && ci[(ai + 2) % li] == cj[(aj + lj - 2) % lj]\n && ci[(ai + 3) % li] == cj[(aj + lj - 1) % lj]\n ) {\n yield j;\n break loop;\n }\n }\n }\n }\n }\n _cell(i) {\n const {circumcenters, delaunay: {inedges, halfedges, triangles}} = this;\n const e0 = inedges[i];\n if (e0 === -1) return null; // coincident point\n const points = [];\n let e = e0;\n do {\n const t = Math.floor(e / 3);\n points.push(circumcenters[t * 2], circumcenters[t * 2 + 1]);\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n e = halfedges[e];\n } while (e !== e0 && e !== -1);\n return points;\n }\n _clip(i) {\n // degenerate case (1 valid point: return the box)\n if (i === 0 && this.delaunay.hull.length === 1) {\n return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n }\n const points = this._cell(i);\n if (points === null) return null;\n const {vectors: V} = this;\n const v = i * 4;\n return V[v] || V[v + 1]\n ? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3])\n : this._clipFinite(i, points);\n }\n _clipFinite(i, points) {\n const n = points.length;\n let P = null;\n let x0, y0, x1 = points[n - 2], y1 = points[n - 1];\n let c0, c1 = this._regioncode(x1, y1);\n let e0, e1;\n for (let j = 0; j < n; j += 2) {\n x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1];\n c0 = c1, c1 = this._regioncode(x1, y1);\n if (c0 === 0 && c1 === 0) {\n e0 = e1, e1 = 0;\n if (P) P.push(x1, y1);\n else P = [x1, y1];\n } else {\n let S, sx0, sy0, sx1, sy1;\n if (c0 === 0) {\n if ((S = this._clipSegment(x0, y0, x1, y1, c0, c1)) === null) continue;\n [sx0, sy0, sx1, sy1] = S;\n } else {\n if ((S = this._clipSegment(x1, y1, x0, y0, c1, c0)) === null) continue;\n [sx1, sy1, sx0, sy0] = S;\n e0 = e1, e1 = this._edgecode(sx0, sy0);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n if (P) P.push(sx0, sy0);\n else P = [sx0, sy0];\n }\n e0 = e1, e1 = this._edgecode(sx1, sy1);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n if (P) P.push(sx1, sy1);\n else P = [sx1, sy1];\n }\n }\n if (P) {\n e0 = e1, e1 = this._edgecode(P[0], P[1]);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n }\n return P;\n }\n _clipSegment(x0, y0, x1, y1, c0, c1) {\n while (true) {\n if (c0 === 0 && c1 === 0) return [x0, y0, x1, y1];\n if (c0 & c1) return null;\n let x, y, c = c0 || c1;\n if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax;\n else if (c & 0b0100) x = x0 + (x1 - x0) * (this.ymin - y0) / (y1 - y0), y = this.ymin;\n else if (c & 0b0010) y = y0 + (y1 - y0) * (this.xmax - x0) / (x1 - x0), x = this.xmax;\n else y = y0 + (y1 - y0) * (this.xmin - x0) / (x1 - x0), x = this.xmin;\n if (c0) x0 = x, y0 = y, c0 = this._regioncode(x0, y0);\n else x1 = x, y1 = y, c1 = this._regioncode(x1, y1);\n }\n }\n _clipInfinite(i, points, vx0, vy0, vxn, vyn) {\n let P = Array.from(points), p;\n if (p = this._project(P[0], P[1], vx0, vy0)) P.unshift(p[0], p[1]);\n if (p = this._project(P[P.length - 2], P[P.length - 1], vxn, vyn)) P.push(p[0], p[1]);\n if (P = this._clipFinite(i, P)) {\n for (let j = 0, n = P.length, c0, c1 = this._edgecode(P[n - 2], P[n - 1]); j < n; j += 2) {\n c0 = c1, c1 = this._edgecode(P[j], P[j + 1]);\n if (c0 && c1) j = this._edge(i, c0, c1, P, j), n = P.length;\n }\n } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n P = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax];\n }\n return P;\n }\n _edge(i, e0, e1, P, j) {\n while (e0 !== e1) {\n let x, y;\n switch (e0) {\n case 0b0101: e0 = 0b0100; continue; // top-left\n case 0b0100: e0 = 0b0110, x = this.xmax, y = this.ymin; break; // top\n case 0b0110: e0 = 0b0010; continue; // top-right\n case 0b0010: e0 = 0b1010, x = this.xmax, y = this.ymax; break; // right\n case 0b1010: e0 = 0b1000; continue; // bottom-right\n case 0b1000: e0 = 0b1001, x = this.xmin, y = this.ymax; break; // bottom\n case 0b1001: e0 = 0b0001; continue; // bottom-left\n case 0b0001: e0 = 0b0101, x = this.xmin, y = this.ymin; break; // left\n }\n if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) {\n P.splice(j, 0, x, y), j += 2;\n }\n }\n if (P.length > 4) {\n for (let i = 0; i < P.length; i+= 2) {\n const j = (i + 2) % P.length, k = (i + 4) % P.length;\n if (P[i] === P[j] && P[j] === P[k]\n || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1])\n P.splice(j, 2), i -= 2;\n }\n }\n return j;\n }\n _project(x0, y0, vx, vy) {\n let t = Infinity, c, x, y;\n if (vy < 0) { // top\n if (y0 <= this.ymin) return null;\n if ((c = (this.ymin - y0) / vy) < t) y = this.ymin, x = x0 + (t = c) * vx;\n } else if (vy > 0) { // bottom\n if (y0 >= this.ymax) return null;\n if ((c = (this.ymax - y0) / vy) < t) y = this.ymax, x = x0 + (t = c) * vx;\n }\n if (vx > 0) { // right\n if (x0 >= this.xmax) return null;\n if ((c = (this.xmax - x0) / vx) < t) x = this.xmax, y = y0 + (t = c) * vy;\n } else if (vx < 0) { // left\n if (x0 <= this.xmin) return null;\n if ((c = (this.xmin - x0) / vx) < t) x = this.xmin, y = y0 + (t = c) * vy;\n }\n return [x, y];\n }\n _edgecode(x, y) {\n return (x === this.xmin ? 0b0001\n : x === this.xmax ? 0b0010 : 0b0000)\n | (y === this.ymin ? 0b0100\n : y === this.ymax ? 0b1000 : 0b0000);\n }\n _regioncode(x, y) {\n return (x < this.xmin ? 0b0001\n : x > this.xmax ? 0b0010 : 0b0000)\n | (y < this.ymin ? 0b0100\n : y > this.ymax ? 0b1000 : 0b0000);\n }\n}\n","import Delaunator from \"delaunator\";\nimport Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\nimport Voronoi from \"./voronoi.js\";\n\nconst tau = 2 * Math.PI, pow = Math.pow;\n\nfunction pointX(p) {\n return p[0];\n}\n\nfunction pointY(p) {\n return p[1];\n}\n\n// A triangulation is collinear if all its triangles have a non-null area\nfunction collinear(d) {\n const {triangles, coords} = d;\n for (let i = 0; i < triangles.length; i += 3) {\n const a = 2 * triangles[i],\n b = 2 * triangles[i + 1],\n c = 2 * triangles[i + 2],\n cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1])\n - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]);\n if (cross > 1e-10) return false;\n }\n return true;\n}\n\nfunction jitter(x, y, r) {\n return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r];\n}\n\nexport default class Delaunay {\n static from(points, fx = pointX, fy = pointY, that) {\n return new Delaunay(\"length\" in points\n ? flatArray(points, fx, fy, that)\n : Float64Array.from(flatIterable(points, fx, fy, that)));\n }\n constructor(points) {\n this._delaunator = new Delaunator(points);\n this.inedges = new Int32Array(points.length / 2);\n this._hullIndex = new Int32Array(points.length / 2);\n this.points = this._delaunator.coords;\n this._init();\n }\n update() {\n this._delaunator.update();\n this._init();\n return this;\n }\n _init() {\n const d = this._delaunator, points = this.points;\n\n // check for collinear\n if (d.hull && d.hull.length > 2 && collinear(d)) {\n this.collinear = Int32Array.from({length: points.length/2}, (_,i) => i)\n .sort((i, j) => points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1]); // for exact neighbors\n const e = this.collinear[0], f = this.collinear[this.collinear.length - 1],\n bounds = [ points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1] ],\n r = 1e-8 * Math.hypot(bounds[3] - bounds[1], bounds[2] - bounds[0]);\n for (let i = 0, n = points.length / 2; i < n; ++i) {\n const p = jitter(points[2 * i], points[2 * i + 1], r);\n points[2 * i] = p[0];\n points[2 * i + 1] = p[1];\n }\n this._delaunator = new Delaunator(points);\n } else {\n delete this.collinear;\n }\n\n const halfedges = this.halfedges = this._delaunator.halfedges;\n const hull = this.hull = this._delaunator.hull;\n const triangles = this.triangles = this._delaunator.triangles;\n const inedges = this.inedges.fill(-1);\n const hullIndex = this._hullIndex.fill(-1);\n\n // Compute an index from each point to an (arbitrary) incoming halfedge\n // Used to give the first neighbor of each point; for this reason,\n // on the hull we give priority to exterior halfedges\n for (let e = 0, n = halfedges.length; e < n; ++e) {\n const p = triangles[e % 3 === 2 ? e - 2 : e + 1];\n if (halfedges[e] === -1 || inedges[p] === -1) inedges[p] = e;\n }\n for (let i = 0, n = hull.length; i < n; ++i) {\n hullIndex[hull[i]] = i;\n }\n\n // degenerate case: 1 or 2 (distinct) points\n if (hull.length <= 2 && hull.length > 0) {\n this.triangles = new Int32Array(3).fill(-1);\n this.halfedges = new Int32Array(3).fill(-1);\n this.triangles[0] = hull[0];\n this.triangles[1] = hull[1];\n this.triangles[2] = hull[1];\n inedges[hull[0]] = 1;\n if (hull.length === 2) inedges[hull[1]] = 0;\n }\n }\n voronoi(bounds) {\n return new Voronoi(this, bounds);\n }\n *neighbors(i) {\n const {inedges, hull, _hullIndex, halfedges, triangles, collinear} = this;\n\n // degenerate case with several collinear points\n if (collinear) {\n const l = collinear.indexOf(i);\n if (l > 0) yield collinear[l - 1];\n if (l < collinear.length - 1) yield collinear[l + 1];\n return;\n }\n\n const e0 = inedges[i];\n if (e0 === -1) return; // coincident point\n let e = e0, p0 = -1;\n do {\n yield p0 = triangles[e];\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) return; // bad triangulation\n e = halfedges[e];\n if (e === -1) {\n const p = hull[(_hullIndex[i] + 1) % hull.length];\n if (p !== p0) yield p;\n return;\n }\n } while (e !== e0);\n }\n find(x, y, i = 0) {\n if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;\n const i0 = i;\n let c;\n while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) i = c;\n return c;\n }\n _step(i, x, y) {\n const {inedges, hull, _hullIndex, halfedges, triangles, points} = this;\n if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1);\n let c = i;\n let dc = pow(x - points[i * 2], 2) + pow(y - points[i * 2 + 1], 2);\n const e0 = inedges[i];\n let e = e0;\n do {\n let t = triangles[e];\n const dt = pow(x - points[t * 2], 2) + pow(y - points[t * 2 + 1], 2);\n if (dt < dc) dc = dt, c = t;\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n e = halfedges[e];\n if (e === -1) {\n e = hull[(_hullIndex[i] + 1) % hull.length];\n if (e !== t) {\n if (pow(x - points[e * 2], 2) + pow(y - points[e * 2 + 1], 2) < dc) return e;\n }\n break;\n }\n } while (e !== e0);\n return c;\n }\n render(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {points, halfedges, triangles} = this;\n for (let i = 0, n = halfedges.length; i < n; ++i) {\n const j = halfedges[i];\n if (j < i) continue;\n const ti = triangles[i] * 2;\n const tj = triangles[j] * 2;\n context.moveTo(points[ti], points[ti + 1]);\n context.lineTo(points[tj], points[tj + 1]);\n }\n this.renderHull(context);\n return buffer && buffer.value();\n }\n renderPoints(context, r = 2) {\n const buffer = context == null ? context = new Path : undefined;\n const {points} = this;\n for (let i = 0, n = points.length; i < n; i += 2) {\n const x = points[i], y = points[i + 1];\n context.moveTo(x + r, y);\n context.arc(x, y, r, 0, tau);\n }\n return buffer && buffer.value();\n }\n renderHull(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {hull, points} = this;\n const h = hull[0] * 2, n = hull.length;\n context.moveTo(points[h], points[h + 1]);\n for (let i = 1; i < n; ++i) {\n const h = 2 * hull[i];\n context.lineTo(points[h], points[h + 1]);\n }\n context.closePath();\n return buffer && buffer.value();\n }\n hullPolygon() {\n const polygon = new Polygon;\n this.renderHull(polygon);\n return polygon.value();\n }\n renderTriangle(i, context) {\n const buffer = context == null ? context = new Path : undefined;\n const {points, triangles} = this;\n const t0 = triangles[i *= 3] * 2;\n const t1 = triangles[i + 1] * 2;\n const t2 = triangles[i + 2] * 2;\n context.moveTo(points[t0], points[t0 + 1]);\n context.lineTo(points[t1], points[t1 + 1]);\n context.lineTo(points[t2], points[t2 + 1]);\n context.closePath();\n return buffer && buffer.value();\n }\n *trianglePolygons() {\n const {triangles} = this;\n for (let i = 0, n = triangles.length / 3; i < n; ++i) {\n yield this.trianglePolygon(i);\n }\n }\n trianglePolygon(i) {\n const polygon = new Polygon;\n this.renderTriangle(i, polygon);\n return polygon.value();\n }\n}\n\nfunction flatArray(points, fx, fy, that) {\n const n = points.length;\n const array = new Float64Array(n * 2);\n for (let i = 0; i < n; ++i) {\n const p = points[i];\n array[i * 2] = fx.call(that, p, i, points);\n array[i * 2 + 1] = fy.call(that, p, i, points);\n }\n return array;\n}\n\nfunction* flatIterable(points, fx, fy, that) {\n let i = 0;\n for (const p of points) {\n yield fx.call(that, p, i, points);\n yield fy.call(that, p, i, points);\n ++i;\n }\n}\n","import { Transform } from 'vega-dataflow';\nimport { inherits } from 'vega-util';\nimport { Delaunay } from 'd3-delaunay';\n\nfunction Voronoi(params) {\n Transform.call(this, null, params);\n}\nVoronoi.Definition = {\n 'type': 'Voronoi',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'extent',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'default': [[-1e5, -1e5], [1e5, 1e5]],\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\nconst defaultExtent = [-1e5, -1e5, 1e5, 1e5];\ninherits(Voronoi, Transform, {\n transform(_, pulse) {\n const as = _.as || 'path',\n data = pulse.source; // nothing to do if no data\n\n if (!data || !data.length) return pulse; // configure and construct voronoi diagram\n\n let s = _.size;\n s = s ? [0, 0, s[0], s[1]] : (s = _.extent) ? [s[0][0], s[0][1], s[1][0], s[1][1]] : defaultExtent;\n const voronoi = this.value = Delaunay.from(data, _.x, _.y).voronoi(s); // map polygons to paths\n\n for (let i = 0, n = data.length; i < n; ++i) {\n const polygon = voronoi.cellPolygon(i);\n data[i][as] = polygon ? toPathString(polygon) : null;\n }\n\n return pulse.reflow(_.modified()).modifies(as);\n }\n\n}); // suppress duplicated end point vertices\n\nfunction toPathString(p) {\n const x = p[0][0],\n y = p[0][1];\n let n = p.length - 1;\n\n for (; p[n][0] === x && p[n][1] === y; --n);\n\n return 'M' + p.slice(0, n + 1).join('L') + 'Z';\n}\n\nexport { Voronoi as voronoi };\n","import { canvas } from 'vega-canvas';\nimport { Transform } from 'vega-dataflow';\nimport { inherits, error, isFunction, constant, extent } from 'vega-util';\nimport { scale } from 'vega-scale';\nimport { random } from 'vega-statistics';\n\n/*\nCopyright (c) 2013, Jason Davies.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * The name Jason Davies may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\nOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\nADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/\n// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf\n\nvar cloudRadians = Math.PI / 180,\n cw = 1 << 11 >> 5,\n ch = 1 << 11;\nfunction cloud () {\n var size = [256, 256],\n text,\n font,\n fontSize,\n fontStyle,\n fontWeight,\n rotate,\n padding,\n spiral = archimedeanSpiral,\n words = [],\n random = Math.random,\n cloud = {};\n\n cloud.layout = function () {\n var contextAndRatio = getContext(canvas()),\n board = zeroArray((size[0] >> 5) * size[1]),\n bounds = null,\n n = words.length,\n i = -1,\n tags = [],\n data = words.map(d => ({\n text: text(d),\n font: font(d),\n style: fontStyle(d),\n weight: fontWeight(d),\n rotate: rotate(d),\n size: ~~(fontSize(d) + 1e-14),\n padding: padding(d),\n xoff: 0,\n yoff: 0,\n x1: 0,\n y1: 0,\n x0: 0,\n y0: 0,\n hasText: false,\n sprite: null,\n datum: d\n })).sort((a, b) => b.size - a.size);\n\n while (++i < n) {\n var d = data[i];\n d.x = size[0] * (random() + .5) >> 1;\n d.y = size[1] * (random() + .5) >> 1;\n cloudSprite(contextAndRatio, d, data, i);\n\n if (d.hasText && place(board, d, bounds)) {\n tags.push(d);\n if (bounds) cloudBounds(bounds, d);else bounds = [{\n x: d.x + d.x0,\n y: d.y + d.y0\n }, {\n x: d.x + d.x1,\n y: d.y + d.y1\n }]; // Temporary hack\n\n d.x -= size[0] >> 1;\n d.y -= size[1] >> 1;\n }\n }\n\n return tags;\n };\n\n function getContext(canvas) {\n canvas.width = canvas.height = 1;\n var ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);\n canvas.width = (cw << 5) / ratio;\n canvas.height = ch / ratio;\n var context = canvas.getContext('2d');\n context.fillStyle = context.strokeStyle = 'red';\n context.textAlign = 'center';\n return {\n context: context,\n ratio: ratio\n };\n }\n\n function place(board, tag, bounds) {\n var startX = tag.x,\n startY = tag.y,\n maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]),\n s = spiral(size),\n dt = random() < .5 ? 1 : -1,\n t = -dt,\n dxdy,\n dx,\n dy;\n\n while (dxdy = s(t += dt)) {\n dx = ~~dxdy[0];\n dy = ~~dxdy[1];\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;\n tag.x = startX + dx;\n tag.y = startY + dy;\n if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue; // TODO only check for collisions within current bounds.\n\n if (!bounds || !cloudCollide(tag, board, size[0])) {\n if (!bounds || collideRects(tag, bounds)) {\n var sprite = tag.sprite,\n w = tag.width >> 5,\n sw = size[0] >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n\n for (var j = 0; j < h; j++) {\n last = 0;\n\n for (var i = 0; i <= w; i++) {\n board[x + i] |= last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n\n x += sw;\n }\n\n tag.sprite = null;\n return true;\n }\n }\n }\n\n return false;\n }\n\n cloud.words = function (_) {\n if (arguments.length) {\n words = _;\n return cloud;\n } else {\n return words;\n }\n };\n\n cloud.size = function (_) {\n if (arguments.length) {\n size = [+_[0], +_[1]];\n return cloud;\n } else {\n return size;\n }\n };\n\n cloud.font = function (_) {\n if (arguments.length) {\n font = functor(_);\n return cloud;\n } else {\n return font;\n }\n };\n\n cloud.fontStyle = function (_) {\n if (arguments.length) {\n fontStyle = functor(_);\n return cloud;\n } else {\n return fontStyle;\n }\n };\n\n cloud.fontWeight = function (_) {\n if (arguments.length) {\n fontWeight = functor(_);\n return cloud;\n } else {\n return fontWeight;\n }\n };\n\n cloud.rotate = function (_) {\n if (arguments.length) {\n rotate = functor(_);\n return cloud;\n } else {\n return rotate;\n }\n };\n\n cloud.text = function (_) {\n if (arguments.length) {\n text = functor(_);\n return cloud;\n } else {\n return text;\n }\n };\n\n cloud.spiral = function (_) {\n if (arguments.length) {\n spiral = spirals[_] || _;\n return cloud;\n } else {\n return spiral;\n }\n };\n\n cloud.fontSize = function (_) {\n if (arguments.length) {\n fontSize = functor(_);\n return cloud;\n } else {\n return fontSize;\n }\n };\n\n cloud.padding = function (_) {\n if (arguments.length) {\n padding = functor(_);\n return cloud;\n } else {\n return padding;\n }\n };\n\n cloud.random = function (_) {\n if (arguments.length) {\n random = _;\n return cloud;\n } else {\n return random;\n }\n };\n\n return cloud;\n} // Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\n\nfunction cloudSprite(contextAndRatio, d, data, di) {\n if (d.sprite) return;\n var c = contextAndRatio.context,\n ratio = contextAndRatio.ratio;\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n var x = 0,\n y = 0,\n maxh = 0,\n n = data.length,\n w,\n w32,\n h,\n i,\n j;\n --di;\n\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.style + ' ' + d.weight + ' ' + ~~((d.size + 1) / ratio) + 'px ' + d.font;\n w = c.measureText(d.text + 'm').width * ratio;\n h = d.size << 1;\n\n if (d.rotate) {\n var sr = Math.sin(d.rotate * cloudRadians),\n cr = Math.cos(d.rotate * cloudRadians),\n wcr = w * cr,\n wsr = w * sr,\n hcr = h * cr,\n hsr = h * sr;\n w = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f >> 5 << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n } else {\n w = w + 0x1f >> 5 << 5;\n }\n\n if (h > maxh) maxh = h;\n\n if (x + w >= cw << 5) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n\n if (y + h >= ch) break;\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.rotate) c.rotate(d.rotate * cloudRadians);\n c.fillText(d.text, 0, 0);\n\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n\n var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,\n sprite = [];\n\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) continue;\n w = d.width;\n w32 = w >> 5;\n h = d.y1 - d.y0; // Zero the buffer\n\n for (i = 0; i < h * w32; i++) sprite[i] = 0;\n\n x = d.xoff;\n if (x == null) return;\n y = d.yoff;\n var seen = 0,\n seenRow = -1;\n\n for (j = 0; j < h; j++) {\n for (i = 0; i < w; i++) {\n var k = w32 * j + (i >> 5),\n m = pixels[(y + j) * (cw << 5) + (x + i) << 2] ? 1 << 31 - i % 32 : 0;\n sprite[k] |= m;\n seen |= m;\n }\n\n if (seen) seenRow = j;else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n} // Use mask-based collision detection.\n\n\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n var sprite = tag.sprite,\n w = tag.width >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n\n for (var j = 0; j < h; j++) {\n last = 0;\n\n for (var i = 0; i <= w; i++) {\n if ((last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i]) return true;\n }\n\n x += sw;\n }\n\n return false;\n}\n\nfunction cloudBounds(bounds, d) {\n var b0 = bounds[0],\n b1 = bounds[1];\n if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\n\nfunction collideRects(a, b) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\n\nfunction archimedeanSpiral(size) {\n var e = size[0] / size[1];\n return function (t) {\n return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\n };\n}\n\nfunction rectangularSpiral(size) {\n var dy = 4,\n dx = dy * size[0] / size[1],\n x = 0,\n y = 0;\n return function (t) {\n var sign = t < 0 ? -1 : 1; // See triangular numbers: T_n = n * (n + 1) / 2.\n\n switch (Math.sqrt(1 + 4 * sign * t) - sign & 3) {\n case 0:\n x += dx;\n break;\n\n case 1:\n y += dy;\n break;\n\n case 2:\n x -= dx;\n break;\n\n default:\n y -= dy;\n break;\n }\n\n return [x, y];\n };\n} // TODO reuse arrays?\n\n\nfunction zeroArray(n) {\n var a = [],\n i = -1;\n\n while (++i < n) a[i] = 0;\n\n return a;\n}\n\nfunction functor(d) {\n return typeof d === 'function' ? d : function () {\n return d;\n };\n}\n\nvar spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n\nconst Output = ['x', 'y', 'font', 'fontSize', 'fontStyle', 'fontWeight', 'angle'];\nconst Params = ['text', 'font', 'rotate', 'fontSize', 'fontStyle', 'fontWeight'];\nfunction Wordcloud(params) {\n Transform.call(this, cloud(), params);\n}\nWordcloud.Definition = {\n 'type': 'Wordcloud',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'font',\n 'type': 'string',\n 'expr': true,\n 'default': 'sans-serif'\n }, {\n 'name': 'fontStyle',\n 'type': 'string',\n 'expr': true,\n 'default': 'normal'\n }, {\n 'name': 'fontWeight',\n 'type': 'string',\n 'expr': true,\n 'default': 'normal'\n }, {\n 'name': 'fontSize',\n 'type': 'number',\n 'expr': true,\n 'default': 14\n }, {\n 'name': 'fontSizeRange',\n 'type': 'number',\n 'array': 'nullable',\n 'default': [10, 50]\n }, {\n 'name': 'rotate',\n 'type': 'number',\n 'expr': true,\n 'default': 0\n }, {\n 'name': 'text',\n 'type': 'field'\n }, {\n 'name': 'spiral',\n 'type': 'string',\n 'values': ['archimedean', 'rectangular']\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 7,\n 'default': Output\n }]\n};\ninherits(Wordcloud, Transform, {\n transform(_, pulse) {\n if (_.size && !(_.size[0] && _.size[1])) {\n error('Wordcloud size dimensions must be non-zero.');\n }\n\n function modp(param) {\n const p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n\n const mod = _.modified();\n\n if (!(mod || pulse.changed(pulse.ADD_REM) || Params.some(modp))) return;\n const data = pulse.materialize(pulse.SOURCE).source,\n layout = this.value,\n as = _.as || Output;\n let fontSize = _.fontSize || 14,\n range;\n isFunction(fontSize) ? range = _.fontSizeRange : fontSize = constant(fontSize); // create font size scaling function as needed\n\n if (range) {\n const fsize = fontSize,\n sizeScale = scale('sqrt')().domain(extent(data, fsize)).range(range);\n\n fontSize = x => sizeScale(fsize(x));\n }\n\n data.forEach(t => {\n t[as[0]] = NaN;\n t[as[1]] = NaN;\n t[as[3]] = 0;\n }); // configure layout\n\n const words = layout.words(data).text(_.text).size(_.size || [500, 500]).padding(_.padding || 1).spiral(_.spiral || 'archimedean').rotate(_.rotate || 0).font(_.font || 'sans-serif').fontStyle(_.fontStyle || 'normal').fontWeight(_.fontWeight || 'normal').fontSize(fontSize).random(random).layout();\n const size = layout.size(),\n dx = size[0] >> 1,\n dy = size[1] >> 1,\n n = words.length;\n\n for (let i = 0, w, t; i < n; ++i) {\n w = words[i];\n t = w.datum;\n t[as[0]] = w.x + dx;\n t[as[1]] = w.y + dy;\n t[as[2]] = w.font;\n t[as[3]] = w.size;\n t[as[4]] = w.style;\n t[as[5]] = w.weight;\n t[as[6]] = w.rotate;\n }\n\n return pulse.reflow(mod).modifies(as);\n }\n\n});\n\nexport { Wordcloud as wordcloud };\n","import { permute, bisectLeft, bisectRight } from 'd3-array';\nimport { Transform } from 'vega-dataflow';\nimport { inherits } from 'vega-util';\n\nconst array8 = n => new Uint8Array(n);\nconst array16 = n => new Uint16Array(n);\nconst array32 = n => new Uint32Array(n);\n\n/**\n * Maintains CrossFilter state.\n */\n\nfunction Bitmaps() {\n let width = 8,\n data = [],\n seen = array32(0),\n curr = array(0, width),\n prev = array(0, width);\n return {\n data: () => data,\n seen: () => seen = lengthen(seen, data.length),\n\n add(array) {\n for (let i = 0, j = data.length, n = array.length, t; i < n; ++i) {\n t = array[i];\n t._index = j++;\n data.push(t);\n }\n },\n\n remove(num, map) {\n // map: index -> boolean (true => remove)\n const n = data.length,\n copy = Array(n - num),\n reindex = data; // reuse old data array for index map\n\n let t, i, j; // seek forward to first removal\n\n for (i = 0; !map[i] && i < n; ++i) {\n copy[i] = data[i];\n reindex[i] = i;\n } // condense arrays\n\n\n for (j = i; i < n; ++i) {\n t = data[i];\n\n if (!map[i]) {\n reindex[i] = j;\n curr[j] = curr[i];\n prev[j] = prev[i];\n copy[j] = t;\n t._index = j++;\n } else {\n reindex[i] = -1;\n }\n\n curr[i] = 0; // clear unused bits\n }\n\n data = copy;\n return reindex;\n },\n\n size: () => data.length,\n curr: () => curr,\n prev: () => prev,\n reset: k => prev[k] = curr[k],\n all: () => width < 0x101 ? 0xff : width < 0x10001 ? 0xffff : 0xffffffff,\n\n set(k, one) {\n curr[k] |= one;\n },\n\n clear(k, one) {\n curr[k] &= ~one;\n },\n\n resize(n, m) {\n const k = curr.length;\n\n if (n > k || m > width) {\n width = Math.max(m, width);\n curr = array(n, width, curr);\n prev = array(n, width);\n }\n }\n\n };\n}\n\nfunction lengthen(array, length, copy) {\n if (array.length >= length) return array;\n copy = copy || new array.constructor(length);\n copy.set(array);\n return copy;\n}\n\nfunction array(n, m, array) {\n const copy = (m < 0x101 ? array8 : m < 0x10001 ? array16 : array32)(n);\n if (array) copy.set(array);\n return copy;\n}\n\nfunction Dimension (index, i, query) {\n const bit = 1 << i;\n return {\n one: bit,\n zero: ~bit,\n range: query.slice(),\n bisect: index.bisect,\n index: index.index,\n size: index.size,\n\n onAdd(added, curr) {\n const dim = this,\n range = dim.bisect(dim.range, added.value),\n idx = added.index,\n lo = range[0],\n hi = range[1],\n n1 = idx.length;\n let i;\n\n for (i = 0; i < lo; ++i) curr[idx[i]] |= bit;\n\n for (i = hi; i < n1; ++i) curr[idx[i]] |= bit;\n\n return dim;\n }\n\n };\n}\n\n/**\n * Maintains a list of values, sorted by key.\n */\n\nfunction SortedIndex() {\n let index = array32(0),\n value = [],\n size = 0;\n\n function insert(key, data, base) {\n if (!data.length) return [];\n const n0 = size,\n n1 = data.length,\n addi = array32(n1);\n let addv = Array(n1),\n oldv,\n oldi,\n i;\n\n for (i = 0; i < n1; ++i) {\n addv[i] = key(data[i]);\n addi[i] = i;\n }\n\n addv = sort(addv, addi);\n\n if (n0) {\n oldv = value;\n oldi = index;\n value = Array(n0 + n1);\n index = array32(n0 + n1);\n merge(base, oldv, oldi, n0, addv, addi, n1, value, index);\n } else {\n if (base > 0) for (i = 0; i < n1; ++i) {\n addi[i] += base;\n }\n value = addv;\n index = addi;\n }\n\n size = n0 + n1;\n return {\n index: addi,\n value: addv\n };\n }\n\n function remove(num, map) {\n // map: index -> remove\n const n = size;\n let idx, i, j; // seek forward to first removal\n\n for (i = 0; !map[index[i]] && i < n; ++i); // condense index and value arrays\n\n\n for (j = i; i < n; ++i) {\n if (!map[idx = index[i]]) {\n index[j] = idx;\n value[j] = value[i];\n ++j;\n }\n }\n\n size = n - num;\n }\n\n function reindex(map) {\n for (let i = 0, n = size; i < n; ++i) {\n index[i] = map[index[i]];\n }\n }\n\n function bisect(range, array) {\n let n;\n\n if (array) {\n n = array.length;\n } else {\n array = value;\n n = size;\n }\n\n return [bisectLeft(array, range[0], 0, n), bisectRight(array, range[1], 0, n)];\n }\n\n return {\n insert: insert,\n remove: remove,\n bisect: bisect,\n reindex: reindex,\n index: () => index,\n size: () => size\n };\n}\n\nfunction sort(values, index) {\n values.sort.call(index, (a, b) => {\n const x = values[a],\n y = values[b];\n return x < y ? -1 : x > y ? 1 : 0;\n });\n return permute(values, index);\n}\n\nfunction merge(base, value0, index0, n0, value1, index1, n1, value, index) {\n let i0 = 0,\n i1 = 0,\n i;\n\n for (i = 0; i0 < n0 && i1 < n1; ++i) {\n if (value0[i0] < value1[i1]) {\n value[i] = value0[i0];\n index[i] = index0[i0++];\n } else {\n value[i] = value1[i1];\n index[i] = index1[i1++] + base;\n }\n }\n\n for (; i0 < n0; ++i0, ++i) {\n value[i] = value0[i0];\n index[i] = index0[i0];\n }\n\n for (; i1 < n1; ++i1, ++i) {\n value[i] = value1[i1];\n index[i] = index1[i1] + base;\n }\n}\n\n/**\n * An indexed multi-dimensional filter.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of dimension accessors to filter.\n * @param {Array} params.query - An array of per-dimension range queries.\n */\n\nfunction CrossFilter(params) {\n Transform.call(this, Bitmaps(), params);\n this._indices = null;\n this._dims = null;\n}\nCrossFilter.Definition = {\n 'type': 'CrossFilter',\n 'metadata': {},\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'query',\n 'type': 'array',\n 'array': true,\n 'required': true,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }]\n};\ninherits(CrossFilter, Transform, {\n transform(_, pulse) {\n if (!this._dims) {\n return this.init(_, pulse);\n } else {\n var init = _.modified('fields') || _.fields.some(f => pulse.modified(f.fields));\n\n return init ? this.reinit(_, pulse) : this.eval(_, pulse);\n }\n },\n\n init(_, pulse) {\n const fields = _.fields,\n query = _.query,\n indices = this._indices = {},\n dims = this._dims = [],\n m = query.length;\n let i = 0,\n key,\n index; // instantiate indices and dimensions\n\n for (; i < m; ++i) {\n key = fields[i].fname;\n index = indices[key] || (indices[key] = SortedIndex());\n dims.push(Dimension(index, i, query[i]));\n }\n\n return this.eval(_, pulse);\n },\n\n reinit(_, pulse) {\n const output = pulse.materialize().fork(),\n fields = _.fields,\n query = _.query,\n indices = this._indices,\n dims = this._dims,\n bits = this.value,\n curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(),\n out = output.rem = output.add,\n mod = output.mod,\n m = query.length,\n adds = {};\n let add, index, key, mods, remMap, modMap, i, n, f; // set prev to current state\n\n prev.set(curr); // if pulse has remove tuples, process them first\n\n if (pulse.rem.length) {\n remMap = this.remove(_, pulse, output);\n } // if pulse has added tuples, add them to state\n\n\n if (pulse.add.length) {\n bits.add(pulse.add);\n } // if pulse has modified tuples, create an index map\n\n\n if (pulse.mod.length) {\n modMap = {};\n\n for (mods = pulse.mod, i = 0, n = mods.length; i < n; ++i) {\n modMap[mods[i]._index] = 1;\n }\n } // re-initialize indices as needed, update curr bitmap\n\n\n for (i = 0; i < m; ++i) {\n f = fields[i];\n\n if (!dims[i] || _.modified('fields', i) || pulse.modified(f.fields)) {\n key = f.fname;\n\n if (!(add = adds[key])) {\n indices[key] = index = SortedIndex();\n adds[key] = add = index.insert(f, pulse.source, 0);\n }\n\n dims[i] = Dimension(index, i, query[i]).onAdd(add, curr);\n }\n } // visit each tuple\n // if filter state changed, push index to add/rem\n // else if in mod and passes a filter, push index to mod\n\n\n for (i = 0, n = bits.data().length; i < n; ++i) {\n if (remMap[i]) {\n // skip if removed tuple\n continue;\n } else if (prev[i] !== curr[i]) {\n // add if state changed\n out.push(i);\n } else if (modMap[i] && curr[i] !== all) {\n // otherwise, pass mods through\n mod.push(i);\n }\n }\n\n bits.mask = (1 << m) - 1;\n return output;\n },\n\n eval(_, pulse) {\n const output = pulse.materialize().fork(),\n m = this._dims.length;\n let mask = 0;\n\n if (pulse.rem.length) {\n this.remove(_, pulse, output);\n mask |= (1 << m) - 1;\n }\n\n if (_.modified('query') && !_.modified('fields')) {\n mask |= this.update(_, pulse, output);\n }\n\n if (pulse.add.length) {\n this.insert(_, pulse, output);\n mask |= (1 << m) - 1;\n }\n\n if (pulse.mod.length) {\n this.modify(pulse, output);\n mask |= (1 << m) - 1;\n }\n\n this.value.mask = mask;\n return output;\n },\n\n insert(_, pulse, output) {\n const tuples = pulse.add,\n bits = this.value,\n dims = this._dims,\n indices = this._indices,\n fields = _.fields,\n adds = {},\n out = output.add,\n n = bits.size() + tuples.length,\n m = dims.length;\n let k = bits.size(),\n j,\n key,\n add; // resize bitmaps and add tuples as needed\n\n bits.resize(n, m);\n bits.add(tuples);\n const curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(); // add to dimensional indices\n\n for (j = 0; j < m; ++j) {\n key = fields[j].fname;\n add = adds[key] || (adds[key] = indices[key].insert(fields[j], tuples, k));\n dims[j].onAdd(add, curr);\n } // set previous filters, output if passes at least one filter\n\n\n for (; k < n; ++k) {\n prev[k] = all;\n if (curr[k] !== all) out.push(k);\n }\n },\n\n modify(pulse, output) {\n const out = output.mod,\n bits = this.value,\n curr = bits.curr(),\n all = bits.all(),\n tuples = pulse.mod;\n let i, n, k;\n\n for (i = 0, n = tuples.length; i < n; ++i) {\n k = tuples[i]._index;\n if (curr[k] !== all) out.push(k);\n }\n },\n\n remove(_, pulse, output) {\n const indices = this._indices,\n bits = this.value,\n curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(),\n map = {},\n out = output.rem,\n tuples = pulse.rem;\n let i, n, k, f; // process tuples, output if passes at least one filter\n\n for (i = 0, n = tuples.length; i < n; ++i) {\n k = tuples[i]._index;\n map[k] = 1; // build index map\n\n prev[k] = f = curr[k];\n curr[k] = all;\n if (f !== all) out.push(k);\n } // remove from dimensional indices\n\n\n for (k in indices) {\n indices[k].remove(n, map);\n }\n\n this.reindex(pulse, n, map);\n return map;\n },\n\n // reindex filters and indices after propagation completes\n reindex(pulse, num, map) {\n const indices = this._indices,\n bits = this.value;\n pulse.runAfter(() => {\n const indexMap = bits.remove(num, map);\n\n for (const key in indices) indices[key].reindex(indexMap);\n });\n },\n\n update(_, pulse, output) {\n const dims = this._dims,\n query = _.query,\n stamp = pulse.stamp,\n m = dims.length;\n let mask = 0,\n i,\n q; // survey how many queries have changed\n\n output.filters = 0;\n\n for (q = 0; q < m; ++q) {\n if (_.modified('query', q)) {\n i = q;\n ++mask;\n }\n }\n\n if (mask === 1) {\n // only one query changed, use more efficient update\n mask = dims[i].one;\n this.incrementOne(dims[i], query[i], output.add, output.rem);\n } else {\n // multiple queries changed, perform full record keeping\n for (q = 0, mask = 0; q < m; ++q) {\n if (!_.modified('query', q)) continue;\n mask |= dims[q].one;\n this.incrementAll(dims[q], query[q], stamp, output.add);\n output.rem = output.add; // duplicate add/rem for downstream resolve\n }\n }\n\n return mask;\n },\n\n incrementAll(dim, query, stamp, out) {\n const bits = this.value,\n seen = bits.seen(),\n curr = bits.curr(),\n prev = bits.prev(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one;\n let i, j, k; // Fast incremental update based on previous lo index.\n\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n\n curr[k] ^= one;\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n\n curr[k] ^= one;\n }\n } // Fast incremental update based on previous hi index.\n\n\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n\n curr[k] ^= one;\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n\n curr[k] ^= one;\n }\n }\n\n dim.range = query.slice();\n },\n\n incrementOne(dim, query, add, rem) {\n const bits = this.value,\n curr = bits.curr(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one;\n let i, j, k; // Fast incremental update based on previous lo index.\n\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n } // Fast incremental update based on previous hi index.\n\n\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n\n dim.range = query.slice();\n }\n\n});\n\n/**\n * Selectively filters tuples by resolving against a filter bitmap.\n * Useful for processing the output of a cross-filter transform.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.ignore - A bit mask indicating which filters to ignore.\n * @param {object} params.filter - The per-tuple filter bitmaps. Typically this\n * parameter value is a reference to a {@link CrossFilter} transform.\n */\n\nfunction ResolveFilter(params) {\n Transform.call(this, null, params);\n}\nResolveFilter.Definition = {\n 'type': 'ResolveFilter',\n 'metadata': {},\n 'params': [{\n 'name': 'ignore',\n 'type': 'number',\n 'required': true,\n 'description': 'A bit mask indicating which filters to ignore.'\n }, {\n 'name': 'filter',\n 'type': 'object',\n 'required': true,\n 'description': 'Per-tuple filter bitmaps from a CrossFilter transform.'\n }]\n};\ninherits(ResolveFilter, Transform, {\n transform(_, pulse) {\n const ignore = ~(_.ignore || 0),\n // bit mask where zeros -> dims to ignore\n bitmap = _.filter,\n mask = bitmap.mask; // exit early if no relevant filter changes\n\n if ((mask & ignore) === 0) return pulse.StopPropagation;\n\n const output = pulse.fork(pulse.ALL),\n data = bitmap.data(),\n curr = bitmap.curr(),\n prev = bitmap.prev(),\n pass = k => !(curr[k] & ignore) ? data[k] : null; // propagate all mod tuples that pass the filter\n\n\n output.filter(output.MOD, pass); // determine add & rem tuples via filter functions\n // for efficiency, we do *not* populate new arrays,\n // instead we add filter functions applied downstream\n\n if (!(mask & mask - 1)) {\n // only one filter changed\n output.filter(output.ADD, pass);\n output.filter(output.REM, k => (curr[k] & ignore) === mask ? data[k] : null);\n } else {\n // multiple filters changed\n output.filter(output.ADD, k => {\n const c = curr[k] & ignore,\n f = !c && c ^ prev[k] & ignore;\n return f ? data[k] : null;\n });\n output.filter(output.REM, k => {\n const c = curr[k] & ignore,\n f = c && !(c ^ (c ^ prev[k] & ignore));\n return f ? data[k] : null;\n });\n } // add filter to source data in case of reflow...\n\n\n return output.filter(output.SOURCE, t => pass(t._index));\n }\n\n});\n\nexport { CrossFilter as crossfilter, ResolveFilter as resolvefilter };\n","export default function(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n","import { error, toSet, isFunction, isString, hasOwnProperty } from 'vega-util';\n\nconst RawCode = 'RawCode';\nconst Literal = 'Literal';\nconst Property = 'Property';\nconst Identifier = 'Identifier';\nconst ArrayExpression = 'ArrayExpression';\nconst BinaryExpression = 'BinaryExpression';\nconst CallExpression = 'CallExpression';\nconst ConditionalExpression = 'ConditionalExpression';\nconst LogicalExpression = 'LogicalExpression';\nconst MemberExpression = 'MemberExpression';\nconst ObjectExpression = 'ObjectExpression';\nconst UnaryExpression = 'UnaryExpression';\nfunction ASTNode(type) {\n this.type = type;\n}\n\nASTNode.prototype.visit = function (visitor) {\n let c, i, n;\n if (visitor(this)) return 1;\n\n for (c = children(this), i = 0, n = c.length; i < n; ++i) {\n if (c[i].visit(visitor)) return 1;\n }\n};\n\nfunction children(node) {\n switch (node.type) {\n case ArrayExpression:\n return node.elements;\n\n case BinaryExpression:\n case LogicalExpression:\n return [node.left, node.right];\n\n case CallExpression:\n return [node.callee].concat(node.arguments);\n\n case ConditionalExpression:\n return [node.test, node.consequent, node.alternate];\n\n case MemberExpression:\n return [node.object, node.property];\n\n case ObjectExpression:\n return node.properties;\n\n case Property:\n return [node.key, node.value];\n\n case UnaryExpression:\n return [node.argument];\n\n case Identifier:\n case Literal:\n case RawCode:\n default:\n return [];\n }\n}\n\n/*\n The following expression parser is based on Esprima (http://esprima.org/).\n Original header comment and license for Esprima is included here:\n\n Copyright (C) 2013 Ariya Hidayat \n Copyright (C) 2013 Thaddee Tyl \n Copyright (C) 2013 Mathias Bynens \n Copyright (C) 2012 Ariya Hidayat \n Copyright (C) 2012 Mathias Bynens \n Copyright (C) 2012 Joost-Wim Boekesteijn \n Copyright (C) 2012 Kris Kowal \n Copyright (C) 2012 Yusuke Suzuki \n Copyright (C) 2012 Arpad Borsos \n Copyright (C) 2011 Ariya Hidayat \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nvar TokenName, source, index, length, lookahead;\nvar TokenBooleanLiteral = 1,\n TokenEOF = 2,\n TokenIdentifier = 3,\n TokenKeyword = 4,\n TokenNullLiteral = 5,\n TokenNumericLiteral = 6,\n TokenPunctuator = 7,\n TokenStringLiteral = 8,\n TokenRegularExpression = 9;\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\nvar SyntaxArrayExpression = 'ArrayExpression',\n SyntaxBinaryExpression = 'BinaryExpression',\n SyntaxCallExpression = 'CallExpression',\n SyntaxConditionalExpression = 'ConditionalExpression',\n SyntaxIdentifier = 'Identifier',\n SyntaxLiteral = 'Literal',\n SyntaxLogicalExpression = 'LogicalExpression',\n SyntaxMemberExpression = 'MemberExpression',\n SyntaxObjectExpression = 'ObjectExpression',\n SyntaxProperty = 'Property',\n SyntaxUnaryExpression = 'UnaryExpression'; // Error messages should be identical to V8.\n\nvar MessageUnexpectedToken = 'Unexpected token %0',\n MessageUnexpectedNumber = 'Unexpected number',\n MessageUnexpectedString = 'Unexpected string',\n MessageUnexpectedIdentifier = 'Unexpected identifier',\n MessageUnexpectedReserved = 'Unexpected reserved word',\n MessageUnexpectedEOS = 'Unexpected end of input',\n MessageInvalidRegExp = 'Invalid regular expression',\n MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\nvar ILLEGAL = 'ILLEGAL',\n DISABLED = 'Disabled.'; // See also tools/generate-unicode-regex.py.\n\nvar RegexNonAsciiIdentifierStart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'),\n // eslint-disable-next-line no-misleading-character-class\nRegexNonAsciiIdentifierPart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'); // Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n /* istanbul ignore next */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n}\n\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 && ch <= 0x39; // 0..9\n}\n\nfunction isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\n\nfunction isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n} // 7.2 White Space\n\n\nfunction isWhiteSpace(ch) {\n return ch === 0x20 || ch === 0x09 || ch === 0x0B || ch === 0x0C || ch === 0xA0 || ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0;\n} // 7.3 Line Terminators\n\n\nfunction isLineTerminator(ch) {\n return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029;\n} // 7.6 Identifier Names and Identifiers\n\n\nfunction isIdentifierStart(ch) {\n return ch === 0x24 || ch === 0x5F || // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A || // A..Z\n ch >= 0x61 && ch <= 0x7A || // a..z\n ch === 0x5C || // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch));\n}\n\nfunction isIdentifierPart(ch) {\n return ch === 0x24 || ch === 0x5F || // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A || // A..Z\n ch >= 0x61 && ch <= 0x7A || // a..z\n ch >= 0x30 && ch <= 0x39 || // 0..9\n ch === 0x5C || // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch));\n} // 7.6.1.1 Keywords\n\n\nconst keywords = {\n 'if': 1,\n 'in': 1,\n 'do': 1,\n 'var': 1,\n 'for': 1,\n 'new': 1,\n 'try': 1,\n 'let': 1,\n 'this': 1,\n 'else': 1,\n 'case': 1,\n 'void': 1,\n 'with': 1,\n 'enum': 1,\n 'while': 1,\n 'break': 1,\n 'catch': 1,\n 'throw': 1,\n 'const': 1,\n 'yield': 1,\n 'class': 1,\n 'super': 1,\n 'return': 1,\n 'typeof': 1,\n 'delete': 1,\n 'switch': 1,\n 'export': 1,\n 'import': 1,\n 'public': 1,\n 'static': 1,\n 'default': 1,\n 'finally': 1,\n 'extends': 1,\n 'package': 1,\n 'private': 1,\n 'function': 1,\n 'continue': 1,\n 'debugger': 1,\n 'interface': 1,\n 'protected': 1,\n 'instanceof': 1,\n 'implements': 1\n};\n\nfunction skipComment() {\n while (index < length) {\n const ch = source.charCodeAt(index);\n\n if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n ++index;\n } else {\n break;\n }\n }\n}\n\nfunction scanHexEscape(prefix) {\n var i,\n len,\n ch,\n code = 0;\n len = prefix === 'u' ? 4 : 2;\n\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n return String.fromCharCode(code);\n}\n\nfunction scanUnicodeCodePointEscape() {\n var ch, code, cu1, cu2;\n ch = source[index];\n code = 0; // At least, one hex digit is required.\n\n if (ch === '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n while (index < length) {\n ch = source[index++];\n\n if (!isHexDigit(ch)) {\n break;\n }\n\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n\n if (code > 0x10FFFF || ch !== '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } // UTF-16 Encoding\n\n\n if (code <= 0xFFFF) {\n return String.fromCharCode(code);\n }\n\n cu1 = (code - 0x10000 >> 10) + 0xD800;\n cu2 = (code - 0x10000 & 1023) + 0xDC00;\n return String.fromCharCode(cu1, cu2);\n}\n\nfunction getEscapedIdentifier() {\n var ch, id;\n ch = source.charCodeAt(index++);\n id = String.fromCharCode(ch); // '\\u' (U+005C, U+0075) denotes an escaped character.\n\n if (ch === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n ++index;\n ch = scanHexEscape('u');\n\n if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n id = ch;\n }\n\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (!isIdentifierPart(ch)) {\n break;\n }\n\n ++index;\n id += String.fromCharCode(ch); // '\\u' (U+005C, U+0075) denotes an escaped character.\n\n if (ch === 0x5C) {\n id = id.substr(0, id.length - 1);\n\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n ++index;\n ch = scanHexEscape('u');\n\n if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n id += ch;\n }\n }\n\n return id;\n}\n\nfunction getIdentifier() {\n var start, ch;\n start = index++;\n\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getEscapedIdentifier();\n }\n\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n}\n\nfunction scanIdentifier() {\n var start, id, type;\n start = index; // Backslash (U+005C) starts an escaped character.\n\n id = source.charCodeAt(index) === 0x5C ? getEscapedIdentifier() : getIdentifier(); // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n\n if (id.length === 1) {\n type = TokenIdentifier;\n } else if (keywords.hasOwnProperty(id)) {\n // eslint-disable-line no-prototype-builtins\n type = TokenKeyword;\n } else if (id === 'null') {\n type = TokenNullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = TokenBooleanLiteral;\n } else {\n type = TokenIdentifier;\n }\n\n return {\n type: type,\n value: id,\n start: start,\n end: index\n };\n} // 7.7 Punctuators\n\n\nfunction scanPunctuator() {\n var start = index,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2,\n ch3,\n ch4;\n\n switch (code) {\n // Check for most common single-character punctuators.\n case 0x2E: // . dot\n\n case 0x28: // ( open bracket\n\n case 0x29: // ) close bracket\n\n case 0x3B: // ; semicolon\n\n case 0x2C: // , comma\n\n case 0x7B: // { open curly brace\n\n case 0x7D: // } close curly brace\n\n case 0x5B: // [\n\n case 0x5D: // ]\n\n case 0x3A: // :\n\n case 0x3F: // ?\n\n case 0x7E:\n // ~\n ++index;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code),\n start: start,\n end: index\n };\n\n default:\n code2 = source.charCodeAt(index + 1); // '=' (U+003D) marks an assignment or comparison operator.\n\n if (code2 === 0x3D) {\n switch (code) {\n case 0x2B: // +\n\n case 0x2D: // -\n\n case 0x2F: // /\n\n case 0x3C: // <\n\n case 0x3E: // >\n\n case 0x5E: // ^\n\n case 0x7C: // |\n\n case 0x25: // %\n\n case 0x26: // &\n\n case 0x2A:\n // *\n index += 2;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n start: start,\n end: index\n };\n\n case 0x21: // !\n\n case 0x3D:\n // =\n index += 2; // !== and ===\n\n if (source.charCodeAt(index) === 0x3D) {\n ++index;\n }\n\n return {\n type: TokenPunctuator,\n value: source.slice(start, index),\n start: start,\n end: index\n };\n }\n }\n\n } // 4-character punctuator: >>>=\n\n\n ch4 = source.substr(index, 4);\n\n if (ch4 === '>>>=') {\n index += 4;\n return {\n type: TokenPunctuator,\n value: ch4,\n start: start,\n end: index\n };\n } // 3-character punctuators: === !== >>> <<= >>=\n\n\n ch3 = ch4.substr(0, 3);\n\n if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n index += 3;\n return {\n type: TokenPunctuator,\n value: ch3,\n start: start,\n end: index\n };\n } // Other 2-character punctuators: ++ -- << >> && ||\n\n\n ch2 = ch3.substr(0, 2);\n\n if (ch1 === ch2[1] && '+-<>&|'.indexOf(ch1) >= 0 || ch2 === '=>') {\n index += 2;\n return {\n type: TokenPunctuator,\n value: ch2,\n start: start,\n end: index\n };\n }\n\n if (ch2 === '//') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } // 1-character punctuators: < > = ! + - * % & | ^ /\n\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;\n return {\n type: TokenPunctuator,\n value: ch1,\n start: start,\n end: index\n };\n }\n\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n} // 7.8.3 Numeric Literals\n\n\nfunction scanHexLiteral(start) {\n let number = '';\n\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n\n number += source[index++];\n }\n\n if (number.length === 0) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt('0x' + number, 16),\n start: start,\n end: index\n };\n}\n\nfunction scanOctalLiteral(start) {\n let number = '0' + source[index++];\n\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n\n number += source[index++];\n }\n\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt(number, 8),\n octal: true,\n start: start,\n end: index\n };\n}\n\nfunction scanNumericLiteral() {\n var number, start, ch;\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || ch === '.', 'Numeric literal must start with a decimal digit or a decimal point');\n start = index;\n number = '';\n\n if (ch !== '.') {\n number = source[index++];\n ch = source[index]; // Hex number starts with '0x'.\n // Octal number starts with '0'.\n\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n\n if (isOctalDigit(ch)) {\n return scanOctalLiteral(start);\n } // decimal number starts with '0' such as '09' is illegal.\n\n\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n ch = source[index];\n\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseFloat(number),\n start: start,\n end: index\n };\n} // 7.8.4 String Literals\n\n\nfunction scanStringLiteral() {\n var str = '',\n quote,\n start,\n ch,\n code,\n octal = false;\n quote = source[index];\n assert(quote === '\\'' || quote === '\"', 'String literal must starts with a quote');\n start = index;\n ++index;\n\n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n str += scanHexEscape(ch);\n }\n\n break;\n\n case 'n':\n str += '\\n';\n break;\n\n case 'r':\n str += '\\r';\n break;\n\n case 't':\n str += '\\t';\n break;\n\n case 'b':\n str += '\\b';\n break;\n\n case 'f':\n str += '\\f';\n break;\n\n case 'v':\n str += '\\x0B';\n break;\n\n default:\n if (isOctalDigit(ch)) {\n code = '01234567'.indexOf(ch); // \\0 is not octal escape sequence\n\n if (code !== 0) {\n octal = true;\n }\n\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]); // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n\n if ('0123'.indexOf(ch) >= 0 && index < length && isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n\n str += String.fromCharCode(code);\n } else {\n str += ch;\n }\n\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenStringLiteral,\n value: str,\n octal: octal,\n start: start,\n end: index\n };\n}\n\nfunction testRegExp(pattern, flags) {\n let tmp = pattern;\n\n if (flags.indexOf('u') >= 0) {\n // Replace each astral symbol and every Unicode code point\n // escape sequence with a single ASCII symbol to avoid throwing on\n // regular expressions that are only valid in combination with the\n // `/u` flag.\n // Note: replacing with the ASCII symbol `x` might cause false\n // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n // perfectly valid pattern that is equivalent to `[a-b]`, but it\n // would be replaced by `[x-b]` which throws an error.\n tmp = tmp.replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, ($0, $1) => {\n if (parseInt($1, 16) <= 0x10FFFF) {\n return 'x';\n }\n\n throwError({}, MessageInvalidRegExp);\n }).replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n } // First, detect invalid regular expressions.\n\n\n try {\n new RegExp(tmp);\n } catch (e) {\n throwError({}, MessageInvalidRegExp);\n } // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n\n\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n}\n\nfunction scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n classMarker = false;\n terminated = false;\n\n while (index < length) {\n ch = source[index++];\n str += ch;\n\n if (ch === '\\\\') {\n ch = source[index++]; // ECMA-262 7.8.5\n\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n }\n\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n\n if (!terminated) {\n throwError({}, MessageUnterminatedRegExp);\n } // Exclude leading and trailing slash.\n\n\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n}\n\nfunction scanRegExpFlags() {\n var ch, str, flags;\n str = '';\n flags = '';\n\n while (index < length) {\n ch = source[index];\n\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n\n ++index;\n\n if (ch === '\\\\' && index < length) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } else {\n flags += ch;\n str += ch;\n }\n }\n\n if (flags.search(/[^gimuy]/g) >= 0) {\n throwError({}, MessageInvalidRegExp, flags);\n }\n\n return {\n value: flags,\n literal: str\n };\n}\n\nfunction scanRegExp() {\n var start, body, flags, value;\n lookahead = null;\n skipComment();\n start = index;\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n}\n\nfunction isIdentifierName(token) {\n return token.type === TokenIdentifier || token.type === TokenKeyword || token.type === TokenBooleanLiteral || token.type === TokenNullLiteral;\n}\n\nfunction advance() {\n skipComment();\n\n if (index >= length) {\n return {\n type: TokenEOF,\n start: index,\n end: index\n };\n }\n\n const ch = source.charCodeAt(index);\n\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n } // Very common: ( and ) and ;\n\n\n if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n return scanPunctuator();\n } // String literal starts with single quote (U+0027) or double quote (U+0022).\n\n\n if (ch === 0x27 || ch === 0x22) {\n return scanStringLiteral();\n } // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n\n\n if (ch === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n}\n\nfunction lex() {\n const token = lookahead;\n index = token.end;\n lookahead = advance();\n index = token.end;\n return token;\n}\n\nfunction peek() {\n const pos = index;\n lookahead = advance();\n index = pos;\n}\n\nfunction finishArrayExpression(elements) {\n const node = new ASTNode(SyntaxArrayExpression);\n node.elements = elements;\n return node;\n}\n\nfunction finishBinaryExpression(operator, left, right) {\n const node = new ASTNode(operator === '||' || operator === '&&' ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n node.operator = operator;\n node.left = left;\n node.right = right;\n return node;\n}\n\nfunction finishCallExpression(callee, args) {\n const node = new ASTNode(SyntaxCallExpression);\n node.callee = callee;\n node.arguments = args;\n return node;\n}\n\nfunction finishConditionalExpression(test, consequent, alternate) {\n const node = new ASTNode(SyntaxConditionalExpression);\n node.test = test;\n node.consequent = consequent;\n node.alternate = alternate;\n return node;\n}\n\nfunction finishIdentifier(name) {\n const node = new ASTNode(SyntaxIdentifier);\n node.name = name;\n return node;\n}\n\nfunction finishLiteral(token) {\n const node = new ASTNode(SyntaxLiteral);\n node.value = token.value;\n node.raw = source.slice(token.start, token.end);\n\n if (token.regex) {\n if (node.raw === '//') {\n node.raw = '/(?:)/';\n }\n\n node.regex = token.regex;\n }\n\n return node;\n}\n\nfunction finishMemberExpression(accessor, object, property) {\n const node = new ASTNode(SyntaxMemberExpression);\n node.computed = accessor === '[';\n node.object = object;\n node.property = property;\n if (!node.computed) property.member = true;\n return node;\n}\n\nfunction finishObjectExpression(properties) {\n const node = new ASTNode(SyntaxObjectExpression);\n node.properties = properties;\n return node;\n}\n\nfunction finishProperty(kind, key, value) {\n const node = new ASTNode(SyntaxProperty);\n node.key = key;\n node.value = value;\n node.kind = kind;\n return node;\n}\n\nfunction finishUnaryExpression(operator, argument) {\n const node = new ASTNode(SyntaxUnaryExpression);\n node.operator = operator;\n node.argument = argument;\n node.prefix = true;\n return node;\n} // Throw an exception\n\n\nfunction throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(/%(\\d)/g, (whole, index) => {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n });\n error = new Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n} // Throw an exception because of the token.\n\n\nfunction throwUnexpected(token) {\n if (token.type === TokenEOF) {\n throwError(token, MessageUnexpectedEOS);\n }\n\n if (token.type === TokenNumericLiteral) {\n throwError(token, MessageUnexpectedNumber);\n }\n\n if (token.type === TokenStringLiteral) {\n throwError(token, MessageUnexpectedString);\n }\n\n if (token.type === TokenIdentifier) {\n throwError(token, MessageUnexpectedIdentifier);\n }\n\n if (token.type === TokenKeyword) {\n throwError(token, MessageUnexpectedReserved);\n } // BooleanLiteral, NullLiteral, or Punctuator.\n\n\n throwError(token, MessageUnexpectedToken, token.value);\n} // Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\n\nfunction expect(value) {\n const token = lex();\n\n if (token.type !== TokenPunctuator || token.value !== value) {\n throwUnexpected(token);\n }\n} // Return true if the next token matches the specified punctuator.\n\n\nfunction match(value) {\n return lookahead.type === TokenPunctuator && lookahead.value === value;\n} // Return true if the next token matches the specified keyword\n\n\nfunction matchKeyword(keyword) {\n return lookahead.type === TokenKeyword && lookahead.value === keyword;\n} // 11.1.4 Array Initialiser\n\n\nfunction parseArrayInitialiser() {\n const elements = [];\n index = lookahead.start;\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseConditionalExpression());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n lex();\n return finishArrayExpression(elements);\n} // 11.1.5 Object Initialiser\n\n\nfunction parseObjectPropertyKey() {\n index = lookahead.start;\n const token = lex(); // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n if (token.octal) {\n throwError(token, MessageStrictOctalLiteral);\n }\n\n return finishLiteral(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseObjectProperty() {\n var token, key, id, value;\n index = lookahead.start;\n token = lookahead;\n\n if (token.type === TokenIdentifier) {\n id = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', id, value);\n }\n\n if (token.type === TokenEOF || token.type === TokenPunctuator) {\n throwUnexpected(token);\n } else {\n key = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', key, value);\n }\n}\n\nfunction parseObjectInitialiser() {\n var properties = [],\n property,\n name,\n key,\n map = {},\n toString = String;\n index = lookahead.start;\n expect('{');\n\n while (!match('}')) {\n property = parseObjectProperty();\n\n if (property.key.type === SyntaxIdentifier) {\n name = property.key.name;\n } else {\n name = toString(property.key.value);\n }\n\n key = '$' + name;\n\n if (Object.prototype.hasOwnProperty.call(map, key)) {\n throwError({}, MessageStrictDuplicateProperty);\n } else {\n map[key] = true;\n }\n\n properties.push(property);\n\n if (!match('}')) {\n expect(',');\n }\n }\n\n expect('}');\n return finishObjectExpression(properties);\n} // 11.1.6 The Grouping Operator\n\n\nfunction parseGroupExpression() {\n expect('(');\n const expr = parseExpression();\n expect(')');\n return expr;\n} // 11.1 Primary Expressions\n\n\nconst legalKeywords = {\n 'if': 1\n};\n\nfunction parsePrimaryExpression() {\n var type, token, expr;\n\n if (match('(')) {\n return parseGroupExpression();\n }\n\n if (match('[')) {\n return parseArrayInitialiser();\n }\n\n if (match('{')) {\n return parseObjectInitialiser();\n }\n\n type = lookahead.type;\n index = lookahead.start;\n\n if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n expr = finishIdentifier(lex().value);\n } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n if (lookahead.octal) {\n throwError(lookahead, MessageStrictOctalLiteral);\n }\n\n expr = finishLiteral(lex());\n } else if (type === TokenKeyword) {\n throw new Error(DISABLED);\n } else if (type === TokenBooleanLiteral) {\n token = lex();\n token.value = token.value === 'true';\n expr = finishLiteral(token);\n } else if (type === TokenNullLiteral) {\n token = lex();\n token.value = null;\n expr = finishLiteral(token);\n } else if (match('/') || match('/=')) {\n expr = finishLiteral(scanRegExp());\n peek();\n } else {\n throwUnexpected(lex());\n }\n\n return expr;\n} // 11.2 Left-Hand-Side Expressions\n\n\nfunction parseArguments() {\n const args = [];\n expect('(');\n\n if (!match(')')) {\n while (index < length) {\n args.push(parseConditionalExpression());\n\n if (match(')')) {\n break;\n }\n\n expect(',');\n }\n }\n\n expect(')');\n return args;\n}\n\nfunction parseNonComputedProperty() {\n index = lookahead.start;\n const token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseNonComputedMember() {\n expect('.');\n return parseNonComputedProperty();\n}\n\nfunction parseComputedMember() {\n expect('[');\n const expr = parseExpression();\n expect(']');\n return expr;\n}\n\nfunction parseLeftHandSideExpressionAllowCall() {\n var expr, args, property;\n expr = parsePrimaryExpression();\n\n for (;;) {\n if (match('.')) {\n property = parseNonComputedMember();\n expr = finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = finishCallExpression(expr, args);\n } else if (match('[')) {\n property = parseComputedMember();\n expr = finishMemberExpression('[', expr, property);\n } else {\n break;\n }\n }\n\n return expr;\n} // 11.3 Postfix Expressions\n\n\nfunction parsePostfixExpression() {\n const expr = parseLeftHandSideExpressionAllowCall();\n\n if (lookahead.type === TokenPunctuator) {\n if (match('++') || match('--')) {\n throw new Error(DISABLED);\n }\n }\n\n return expr;\n} // 11.4 Unary Operators\n\n\nfunction parseUnaryExpression() {\n var token, expr;\n\n if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n throw new Error(DISABLED);\n } else if (match('+') || match('-') || match('~') || match('!')) {\n token = lex();\n expr = parseUnaryExpression();\n expr = finishUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw new Error(DISABLED);\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n}\n\nfunction binaryPrecedence(token) {\n let prec = 0;\n\n if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '|':\n prec = 3;\n break;\n\n case '^':\n prec = 4;\n break;\n\n case '&':\n prec = 5;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n case 'in':\n prec = 7;\n break;\n\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n }\n\n return prec;\n} // 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\n\nfunction parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n marker = lookahead;\n left = parseUnaryExpression();\n token = lookahead;\n prec = binaryPrecedence(token);\n\n if (prec === 0) {\n return left;\n }\n\n token.prec = prec;\n lex();\n markers = [marker, lookahead];\n right = parseUnaryExpression();\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n // Reduce: make a binary expression from the three topmost entries.\n while (stack.length > 2 && prec <= stack[stack.length - 2].prec) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = finishBinaryExpression(operator, left, right);\n stack.push(expr);\n } // Shift.\n\n\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = parseUnaryExpression();\n stack.push(expr);\n } // Final reduce to clean-up the stack.\n\n\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n\n while (i > 1) {\n markers.pop();\n expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n} // 11.12 Conditional Operator\n\n\nfunction parseConditionalExpression() {\n var expr, consequent, alternate;\n expr = parseBinaryExpression();\n\n if (match('?')) {\n lex();\n consequent = parseConditionalExpression();\n expect(':');\n alternate = parseConditionalExpression();\n expr = finishConditionalExpression(expr, consequent, alternate);\n }\n\n return expr;\n} // 11.14 Comma Operator\n\n\nfunction parseExpression() {\n const expr = parseConditionalExpression();\n\n if (match(',')) {\n throw new Error(DISABLED); // no sequence expressions\n }\n\n return expr;\n}\n\nfunction parser (code) {\n source = code;\n index = 0;\n length = source.length;\n lookahead = null;\n peek();\n const expr = parseExpression();\n\n if (lookahead.type !== TokenEOF) {\n throw new Error('Unexpect token after expression.');\n }\n\n return expr;\n}\n\nvar Constants = {\n NaN: 'NaN',\n E: 'Math.E',\n LN2: 'Math.LN2',\n LN10: 'Math.LN10',\n LOG2E: 'Math.LOG2E',\n LOG10E: 'Math.LOG10E',\n PI: 'Math.PI',\n SQRT1_2: 'Math.SQRT1_2',\n SQRT2: 'Math.SQRT2',\n MIN_VALUE: 'Number.MIN_VALUE',\n MAX_VALUE: 'Number.MAX_VALUE'\n};\n\nfunction Functions (codegen) {\n function fncall(name, args, cast, type) {\n let obj = codegen(args[0]);\n\n if (cast) {\n obj = cast + '(' + obj + ')';\n if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n }\n\n return obj + '.' + name + (type < 0 ? '' : type === 0 ? '()' : '(' + args.slice(1).map(codegen).join(',') + ')');\n }\n\n function fn(name, cast, type) {\n return args => fncall(name, args, cast, type);\n }\n\n const DATE = 'new Date',\n STRING = 'String',\n REGEXP = 'RegExp';\n return {\n // MATH functions\n isNaN: 'Number.isNaN',\n isFinite: 'Number.isFinite',\n abs: 'Math.abs',\n acos: 'Math.acos',\n asin: 'Math.asin',\n atan: 'Math.atan',\n atan2: 'Math.atan2',\n ceil: 'Math.ceil',\n cos: 'Math.cos',\n exp: 'Math.exp',\n floor: 'Math.floor',\n log: 'Math.log',\n max: 'Math.max',\n min: 'Math.min',\n pow: 'Math.pow',\n random: 'Math.random',\n round: 'Math.round',\n sin: 'Math.sin',\n sqrt: 'Math.sqrt',\n tan: 'Math.tan',\n clamp: function (args) {\n if (args.length < 3) error('Missing arguments to clamp function.');\n if (args.length > 3) error('Too many arguments to clamp function.');\n const a = args.map(codegen);\n return 'Math.max(' + a[1] + ', Math.min(' + a[2] + ',' + a[0] + '))';\n },\n // DATE functions\n now: 'Date.now',\n utc: 'Date.UTC',\n datetime: DATE,\n date: fn('getDate', DATE, 0),\n day: fn('getDay', DATE, 0),\n year: fn('getFullYear', DATE, 0),\n month: fn('getMonth', DATE, 0),\n hours: fn('getHours', DATE, 0),\n minutes: fn('getMinutes', DATE, 0),\n seconds: fn('getSeconds', DATE, 0),\n milliseconds: fn('getMilliseconds', DATE, 0),\n time: fn('getTime', DATE, 0),\n timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n utcdate: fn('getUTCDate', DATE, 0),\n utcday: fn('getUTCDay', DATE, 0),\n utcyear: fn('getUTCFullYear', DATE, 0),\n utcmonth: fn('getUTCMonth', DATE, 0),\n utchours: fn('getUTCHours', DATE, 0),\n utcminutes: fn('getUTCMinutes', DATE, 0),\n utcseconds: fn('getUTCSeconds', DATE, 0),\n utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n // sequence functions\n length: fn('length', null, -1),\n // STRING functions\n parseFloat: 'parseFloat',\n parseInt: 'parseInt',\n upper: fn('toUpperCase', STRING, 0),\n lower: fn('toLowerCase', STRING, 0),\n substring: fn('substring', STRING),\n split: fn('split', STRING),\n trim: fn('trim', STRING, 0),\n // REGEXP functions\n regexp: REGEXP,\n test: fn('test', REGEXP),\n // Control Flow functions\n if: function (args) {\n if (args.length < 3) error('Missing arguments to if function.');\n if (args.length > 3) error('Too many arguments to if function.');\n const a = args.map(codegen);\n return '(' + a[0] + '?' + a[1] + ':' + a[2] + ')';\n }\n };\n}\n\nfunction stripQuotes(s) {\n const n = s && s.length - 1;\n return n && (s[0] === '\"' && s[n] === '\"' || s[0] === '\\'' && s[n] === '\\'') ? s.slice(1, -1) : s;\n}\n\nfunction codegen (opt) {\n opt = opt || {};\n const allowed = opt.allowed ? toSet(opt.allowed) : {},\n forbidden = opt.forbidden ? toSet(opt.forbidden) : {},\n constants = opt.constants || Constants,\n functions = (opt.functions || Functions)(visit),\n globalvar = opt.globalvar,\n fieldvar = opt.fieldvar,\n outputGlobal = isFunction(globalvar) ? globalvar : id => `${globalvar}[\"${id}\"]`;\n let globals = {},\n fields = {},\n memberDepth = 0;\n\n function visit(ast) {\n if (isString(ast)) return ast;\n const generator = Generators[ast.type];\n if (generator == null) error('Unsupported type: ' + ast.type);\n return generator(ast);\n }\n\n const Generators = {\n Literal: n => n.raw,\n Identifier: n => {\n const id = n.name;\n\n if (memberDepth > 0) {\n return id;\n } else if (hasOwnProperty(forbidden, id)) {\n return error('Illegal identifier: ' + id);\n } else if (hasOwnProperty(constants, id)) {\n return constants[id];\n } else if (hasOwnProperty(allowed, id)) {\n return id;\n } else {\n globals[id] = 1;\n return outputGlobal(id);\n }\n },\n MemberExpression: n => {\n const d = !n.computed,\n o = visit(n.object);\n if (d) memberDepth += 1;\n const p = visit(n.property);\n\n if (o === fieldvar) {\n // strip quotes to sanitize field name (#1653)\n fields[stripQuotes(p)] = 1;\n }\n\n if (d) memberDepth -= 1;\n return o + (d ? '.' + p : '[' + p + ']');\n },\n CallExpression: n => {\n if (n.callee.type !== 'Identifier') {\n error('Illegal callee type: ' + n.callee.type);\n }\n\n const callee = n.callee.name,\n args = n.arguments,\n fn = hasOwnProperty(functions, callee) && functions[callee];\n if (!fn) error('Unrecognized function: ' + callee);\n return isFunction(fn) ? fn(args) : fn + '(' + args.map(visit).join(',') + ')';\n },\n ArrayExpression: n => '[' + n.elements.map(visit).join(',') + ']',\n BinaryExpression: n => '(' + visit(n.left) + ' ' + n.operator + ' ' + visit(n.right) + ')',\n UnaryExpression: n => '(' + n.operator + visit(n.argument) + ')',\n ConditionalExpression: n => '(' + visit(n.test) + '?' + visit(n.consequent) + ':' + visit(n.alternate) + ')',\n LogicalExpression: n => '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n ObjectExpression: n => '{' + n.properties.map(visit).join(',') + '}',\n Property: n => {\n memberDepth += 1;\n const k = visit(n.key);\n memberDepth -= 1;\n return k + ':' + visit(n.value);\n }\n };\n\n function codegen(ast) {\n const result = {\n code: visit(ast),\n globals: Object.keys(globals),\n fields: Object.keys(fields)\n };\n globals = {};\n fields = {};\n return result;\n }\n\n codegen.functions = functions;\n codegen.constants = constants;\n return codegen;\n}\n\nexport { ASTNode, ArrayExpression, BinaryExpression, CallExpression, ConditionalExpression, Identifier, Literal, LogicalExpression, MemberExpression, ObjectExpression, Property, RawCode, UnaryExpression, codegen, Constants as constants, Functions as functions, parser as parse };\n","import { field, isDate, toNumber, isArray, inrange, extend, array, error, peek, hasOwnProperty } from 'vega-util';\nimport { Literal } from 'vega-expression';\n\nfunction ascending (a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n\nfunction bisector (f) {\n let delta = f;\n let compare = f;\n\n if (f.length === 1) {\n delta = (d, x) => f(d) - x;\n\n compare = ascendingComparator(f);\n }\n\n function left(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n\n while (lo < hi) {\n const mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;else hi = mid;\n }\n\n return lo;\n }\n\n function right(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n\n while (lo < hi) {\n const mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;else lo = mid + 1;\n }\n\n return lo;\n }\n\n function center(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {\n left,\n center,\n right\n };\n}\n\nfunction ascendingComparator(f) {\n return (d, x) => ascending(f(d), x);\n}\n\nconst Intersect = 'intersect';\nconst Union = 'union';\nconst VlMulti = 'vlMulti';\nconst VlPoint = 'vlPoint';\nconst Or = 'or';\nconst And = 'and';\n\nconst SELECTION_ID = '_vgsid_',\n TYPE_ENUM = 'E',\n TYPE_RANGE_INC = 'R',\n TYPE_RANGE_EXC = 'R-E',\n TYPE_RANGE_LE = 'R-LE',\n TYPE_RANGE_RE = 'R-RE',\n UNIT_INDEX = 'index:unit'; // TODO: revisit date coercion?\n\nfunction testPoint(datum, entry) {\n var fields = entry.fields,\n values = entry.values,\n n = fields.length,\n i = 0,\n dval,\n f;\n\n for (; i < n; ++i) {\n f = fields[i];\n f.getter = field.getter || field(f.field);\n dval = f.getter(datum);\n if (isDate(dval)) dval = toNumber(dval);\n if (isDate(values[i])) values[i] = toNumber(values[i]);\n if (isDate(values[i][0])) values[i] = values[i].map(toNumber);\n\n if (f.type === TYPE_ENUM) {\n // Enumerated fields can either specify individual values (single/multi selections)\n // or an array of values (interval selections).\n if (isArray(values[i]) ? values[i].indexOf(dval) < 0 : dval !== values[i]) {\n return false;\n }\n } else {\n if (f.type === TYPE_RANGE_INC) {\n if (!inrange(dval, values[i])) return false;\n } else if (f.type === TYPE_RANGE_RE) {\n // Discrete selection of bins test within the range [bin_start, bin_end).\n if (!inrange(dval, values[i], true, false)) return false;\n } else if (f.type === TYPE_RANGE_EXC) {\n // 'R-E'/'R-LE' included for completeness.\n if (!inrange(dval, values[i], false, false)) return false;\n } else if (f.type === TYPE_RANGE_LE) {\n if (!inrange(dval, values[i], false, true)) return false;\n }\n }\n }\n\n return true;\n}\n/**\n * Tests if a tuple is contained within an interactive selection.\n * @param {string} name - The name of the data set representing the selection.\n * Tuples in the dataset are of the form\n * {unit: string, fields: array, values: array<*>}.\n * Fielddef is of the form\n * {field: string, channel: string, type: 'E' | 'R'} where\n * 'type' identifies whether tuples in the dataset enumerate\n * values for the field, or specify a continuous range.\n * @param {object} datum - The tuple to test for inclusion.\n * @param {string} op - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @return {boolean} - True if the datum is in the selection, false otherwise.\n */\n\n\nfunction selectionTest(name, datum, op) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === Intersect,\n n = entries.length,\n i = 0,\n entry,\n miss,\n count,\n unit,\n b;\n\n for (; i < n; ++i) {\n entry = entries[i];\n\n if (unitIdx && intersect) {\n // multi selections union within the same unit and intersect across units.\n miss = miss || {};\n count = miss[unit = entry.unit] || 0; // if we've already matched this unit, skip.\n\n if (count === -1) continue;\n b = testPoint(datum, entry);\n miss[unit] = b ? -1 : ++count; // if we match and there are no other units return true\n // if we've missed against all tuples in this unit return false\n\n if (b && unitIdx.size === 1) return true;\n if (!b && count === unitIdx.get(unit).count) return false;\n } else {\n b = testPoint(datum, entry); // if we find a miss and we do require intersection return false\n // if we find a match and we don't require intersection return true\n\n if (intersect ^ b) return b;\n }\n } // if intersecting and we made it here, then we saw no misses\n // if not intersecting, then we saw no matches\n // if no active selections, return false\n\n\n return n && intersect;\n}\nconst selectionId = field(SELECTION_ID),\n bisect = bisector(selectionId),\n bisectLeft = bisect.left,\n bisectRight = bisect.right;\nfunction selectionIdTest(name, datum, op) {\n const data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === Intersect,\n value = selectionId(datum),\n index = bisectLeft(entries, value);\n if (index === entries.length) return false;\n if (selectionId(entries[index]) !== value) return false;\n\n if (unitIdx && intersect) {\n if (unitIdx.size === 1) return true;\n if (bisectRight(entries, value) - index < unitIdx.size) return false;\n }\n\n return true;\n}\n\n/**\n * Maps an array of scene graph items to an array of selection tuples.\n * @param {string} name - The name of the dataset representing the selection.\n * @param {string} unit - The name of the unit view.\n *\n * @returns {array} An array of selection entries for the given unit.\n */\n\nfunction selectionTuples(array, base) {\n return array.map(x => extend({\n values: base.fields.map(f => (f.getter || (f.getter = field(f.field)))(x.datum))\n }, base));\n}\n\n/**\n * Resolves selection for use as a scale domain or reads via the API.\n * @param {string} name - The name of the dataset representing the selection\n * @param {string} [op='union'] - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @param {boolean} isMulti - Identifies a \"multi\" selection to perform more\n * expensive resolution computation.\n * @param {boolean} vl5 - With Vega-Lite v5, \"multi\" selections are now called \"point\"\n * selections, and thus the resolved tuple should reflect this name.\n * This parameter allows us to reflect this change without triggering\n * a major version bump for Vega.\n * @returns {object} An object of selected fields and values.\n */\n\nfunction selectionResolve(name, op, isMulti, vl5) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n resolved = {},\n multiRes = {},\n types = {},\n entry,\n fields,\n values,\n unit,\n field,\n res,\n resUnit,\n type,\n union,\n n = entries.length,\n i = 0,\n j,\n m; // First union all entries within the same unit.\n\n for (; i < n; ++i) {\n entry = entries[i];\n unit = entry.unit;\n fields = entry.fields;\n values = entry.values;\n\n for (j = 0, m = fields.length; j < m; ++j) {\n field = fields[j];\n res = resolved[field.field] || (resolved[field.field] = {});\n resUnit = res[unit] || (res[unit] = []);\n types[field.field] = type = field.type.charAt(0);\n union = ops[type + '_union'];\n res[unit] = union(resUnit, array(values[j]));\n } // If the same multi-selection is repeated over views and projected over\n // an encoding, it may operate over different fields making it especially\n // tricky to reliably resolve it. At best, we can de-dupe identical entries\n // but doing so may be more computationally expensive than it is worth.\n // Instead, for now, we simply transform our store representation into\n // a more human-friendly one.\n\n\n if (isMulti) {\n resUnit = multiRes[unit] || (multiRes[unit] = []);\n resUnit.push(array(values).reduce((obj, curr, j) => (obj[fields[j].field] = curr, obj), {}));\n }\n } // Then resolve fields across units as per the op.\n\n\n op = op || Union;\n Object.keys(resolved).forEach(field => {\n resolved[field] = Object.keys(resolved[field]).map(unit => resolved[field][unit]).reduce((acc, curr) => acc === undefined ? curr : ops[types[field] + '_' + op](acc, curr));\n });\n entries = Object.keys(multiRes);\n\n if (isMulti && entries.length) {\n const key = vl5 ? VlPoint : VlMulti;\n resolved[key] = op === Union ? {\n [Or]: entries.reduce((acc, k) => (acc.push(...multiRes[k]), acc), [])\n } : {\n [And]: entries.map(k => ({\n [Or]: multiRes[k]\n }))\n };\n }\n\n return resolved;\n}\nvar ops = {\n E_union: function (base, value) {\n if (!base.length) return value;\n var i = 0,\n n = value.length;\n\n for (; i < n; ++i) if (base.indexOf(value[i]) < 0) base.push(value[i]);\n\n return base;\n },\n E_intersect: function (base, value) {\n return !base.length ? value : base.filter(v => value.indexOf(v) >= 0);\n },\n R_union: function (base, value) {\n var lo = toNumber(value[0]),\n hi = toNumber(value[1]);\n\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n\n if (!base.length) return [lo, hi];\n if (base[0] > lo) base[0] = lo;\n if (base[1] < hi) base[1] = hi;\n return base;\n },\n R_intersect: function (base, value) {\n var lo = toNumber(value[0]),\n hi = toNumber(value[1]);\n\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n\n if (!base.length) return [lo, hi];\n\n if (hi < base[0] || base[1] < lo) {\n return [];\n } else {\n if (base[0] < lo) base[0] = lo;\n if (base[1] > hi) base[1] = hi;\n }\n\n return base;\n }\n};\n\nconst DataPrefix = ':',\n IndexPrefix = '@';\nfunction selectionVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to selection functions must be a string literal.');\n const data = args[0].value,\n op = args.length >= 2 && peek(args).value,\n field = 'unit',\n indexName = IndexPrefix + field,\n dataName = DataPrefix + data; // eslint-disable-next-line no-prototype-builtins\n\n if (op === Intersect && !hasOwnProperty(params, indexName)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n } // eslint-disable-next-line no-prototype-builtins\n\n\n if (!hasOwnProperty(params, dataName)) {\n params[dataName] = scope.getData(data).tuplesRef();\n }\n}\n\nexport { selectionIdTest, selectionResolve, selectionTest, selectionTuples, selectionVisitor };\n","import { truthy, error, hasOwnProperty, isFunction, isString, stringValue, extend, isArray, isObject, field, peek, identity, array as array$1, isBoolean, isDate, isNumber, isRegExp, toBoolean, toDate, toNumber, toString, flush, lerp, pad, span, inrange, truncate, quarter, utcquarter, extent, clampRange, panLinear, panLog, panPow, panSymlog, zoomLinear, zoomLog, zoomPow, zoomSymlog } from 'vega-util';\nimport { Literal, constants, codegen, functions, parse, CallExpression } from 'vega-expression';\nimport { geoBounds as geoBounds$1, geoCentroid as geoCentroid$1, geoArea as geoArea$1 } from 'd3-geo';\nimport { rgb, lab, hcl, hsl } from 'd3-color';\nimport { isTuple } from 'vega-dataflow';\nimport { bandSpace, scale as scale$1, scaleFraction } from 'vega-scale';\nimport { Gradient, pathRender, pathParse, Bounds, intersect as intersect$1 } from 'vega-scenegraph';\nimport { selectionVisitor, selectionTest, selectionIdTest, selectionResolve, selectionTuples } from 'vega-selections';\nimport { random, cumulativeNormal, cumulativeLogNormal, cumulativeUniform, densityNormal, densityLogNormal, densityUniform, quantileNormal, quantileLogNormal, quantileUniform, sampleNormal, sampleLogNormal, sampleUniform } from 'vega-statistics';\nimport { utcOffset, utcSequence, timeOffset, timeSequence, timeUnitSpecifier, week, utcweek, dayofyear, utcdayofyear } from 'vega-time';\nimport { range as range$1 } from 'd3-array';\n\nfunction data(name) {\n const data = this.context.data[name];\n return data ? data.values.value : [];\n}\nfunction indata(name, field, value) {\n const index = this.context.data[name]['index:' + field],\n entry = index ? index.value.get(value) : undefined;\n return entry ? entry.count : entry;\n}\nfunction setdata(name, tuples) {\n const df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input;\n df.pulse(input, df.changeset().remove(truthy).insert(tuples));\n return 1;\n}\n\nfunction encode (item, name, retval) {\n if (item) {\n const df = this.context.dataflow,\n target = item.mark.source;\n df.pulse(target, df.changeset().encode(item, name));\n }\n\n return retval !== undefined ? retval : item;\n}\n\nconst wrap = method => function (value, spec) {\n const locale = this.context.dataflow.locale();\n return locale[method](spec)(value);\n};\n\nconst format = wrap('format');\nconst timeFormat = wrap('timeFormat');\nconst utcFormat = wrap('utcFormat');\nconst timeParse = wrap('timeParse');\nconst utcParse = wrap('utcParse');\nconst dateObj = new Date(2000, 0, 1);\n\nfunction time(month, day, specifier) {\n if (!Number.isInteger(month) || !Number.isInteger(day)) return '';\n dateObj.setYear(2000);\n dateObj.setMonth(month);\n dateObj.setDate(day);\n return timeFormat.call(this, dateObj, specifier);\n}\n\nfunction monthFormat(month) {\n return time.call(this, month, 1, '%B');\n}\nfunction monthAbbrevFormat(month) {\n return time.call(this, month, 1, '%b');\n}\nfunction dayFormat(day) {\n return time.call(this, 0, 2 + day, '%A');\n}\nfunction dayAbbrevFormat(day) {\n return time.call(this, 0, 2 + day, '%a');\n}\n\nconst DataPrefix = ':';\nconst IndexPrefix = '@';\nconst ScalePrefix = '%';\nconst SignalPrefix = '$';\n\nfunction dataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) {\n error('First argument to data functions must be a string literal.');\n }\n\n const data = args[0].value,\n dataName = DataPrefix + data;\n\n if (!hasOwnProperty(dataName, params)) {\n try {\n params[dataName] = scope.getData(data).tuplesRef();\n } catch (err) {// if data set does not exist, there's nothing to track\n }\n }\n}\nfunction indataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to indata must be a string literal.');\n if (args[1].type !== Literal) error('Second argument to indata must be a string literal.');\n const data = args[0].value,\n field = args[1].value,\n indexName = IndexPrefix + field;\n\n if (!hasOwnProperty(indexName, params)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n}\nfunction scaleVisitor(name, args, scope, params) {\n if (args[0].type === Literal) {\n // add scale dependency\n addScaleDependency(scope, params, args[0].value);\n } else {\n // indirect scale lookup; add all scales as parameters\n for (name in scope.scales) {\n addScaleDependency(scope, params, name);\n }\n }\n}\n\nfunction addScaleDependency(scope, params, name) {\n const scaleName = ScalePrefix + name;\n\n if (!hasOwnProperty(params, scaleName)) {\n try {\n params[scaleName] = scope.scaleRef(name);\n } catch (err) {// TODO: error handling? warning?\n }\n }\n}\n\nfunction getScale(name, ctx) {\n let s;\n return isFunction(name) ? name : isString(name) ? (s = ctx.scales[name]) && s.value : undefined;\n}\nfunction internalScaleFunctions(codegen, fnctx, visitors) {\n // add helper method to the 'this' expression function context\n fnctx.__bandwidth = s => s && s.bandwidth ? s.bandwidth() : 0; // register AST visitors for internal scale functions\n\n\n visitors._bandwidth = scaleVisitor;\n visitors._range = scaleVisitor;\n visitors._scale = scaleVisitor; // resolve scale reference directly to the signal hash argument\n\n const ref = arg => '_[' + (arg.type === Literal ? stringValue(ScalePrefix + arg.value) : stringValue(ScalePrefix) + '+' + codegen(arg)) + ']'; // define and return internal scale function code generators\n // these internal functions are called by mark encoders\n\n\n return {\n _bandwidth: args => `this.__bandwidth(${ref(args[0])})`,\n _range: args => `${ref(args[0])}.range()`,\n _scale: args => `${ref(args[0])}(${codegen(args[1])})`\n };\n}\n\nfunction geoMethod(methodName, globalMethod) {\n return function (projection, geojson, group) {\n if (projection) {\n // projection defined, use it\n const p = getScale(projection, (group || this).context);\n return p && p.path[methodName](geojson);\n } else {\n // projection undefined, use global method\n return globalMethod(geojson);\n }\n };\n}\n\nconst geoArea = geoMethod('area', geoArea$1);\nconst geoBounds = geoMethod('bounds', geoBounds$1);\nconst geoCentroid = geoMethod('centroid', geoCentroid$1);\n\nfunction inScope (item) {\n const group = this.context.group;\n let value = false;\n if (group) while (item) {\n if (item === group) {\n value = true;\n break;\n }\n\n item = item.mark.group;\n }\n return value;\n}\n\nfunction log(df, method, args) {\n try {\n df[method].apply(df, ['EXPRESSION'].concat([].slice.call(args)));\n } catch (err) {\n df.warn(err);\n }\n\n return args[args.length - 1];\n}\n\nfunction warn() {\n return log(this.context.dataflow, 'warn', arguments);\n}\nfunction info() {\n return log(this.context.dataflow, 'info', arguments);\n}\nfunction debug() {\n return log(this.context.dataflow, 'debug', arguments);\n}\n\nfunction channel_luminance_value(channelValue) {\n const val = channelValue / 255;\n\n if (val <= 0.03928) {\n return val / 12.92;\n }\n\n return Math.pow((val + 0.055) / 1.055, 2.4);\n}\n\nfunction luminance(color) {\n const c = rgb(color),\n r = channel_luminance_value(c.r),\n g = channel_luminance_value(c.g),\n b = channel_luminance_value(c.b);\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n} // https://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n\nfunction contrast(color1, color2) {\n const lum1 = luminance(color1),\n lum2 = luminance(color2),\n lumL = Math.max(lum1, lum2),\n lumD = Math.min(lum1, lum2);\n return (lumL + 0.05) / (lumD + 0.05);\n}\n\nfunction merge () {\n const args = [].slice.call(arguments);\n args.unshift({});\n return extend(...args);\n}\n\nfunction equal(a, b) {\n return a === b || a !== a && b !== b ? true : isArray(a) ? isArray(b) && a.length === b.length ? equalArray(a, b) : false : isObject(a) && isObject(b) ? equalObject(a, b) : false;\n}\n\nfunction equalArray(a, b) {\n for (let i = 0, n = a.length; i < n; ++i) {\n if (!equal(a[i], b[i])) return false;\n }\n\n return true;\n}\n\nfunction equalObject(a, b) {\n for (const key in a) {\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n}\n\nfunction removePredicate(props) {\n return _ => equalObject(props, _);\n}\n\nfunction modify (name, insert, remove, toggle, modify, values) {\n const df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input,\n stamp = df.stamp();\n let changes = data.changes,\n predicate,\n key;\n\n if (df._trigger === false || !(input.value.length || insert || toggle)) {\n // nothing to do!\n return 0;\n }\n\n if (!changes || changes.stamp < stamp) {\n data.changes = changes = df.changeset();\n changes.stamp = stamp;\n df.runAfter(() => {\n data.modified = true;\n df.pulse(input, changes).run();\n }, true, 1);\n }\n\n if (remove) {\n predicate = remove === true ? truthy : isArray(remove) || isTuple(remove) ? remove : removePredicate(remove);\n changes.remove(predicate);\n }\n\n if (insert) {\n changes.insert(insert);\n }\n\n if (toggle) {\n predicate = removePredicate(toggle);\n\n if (input.value.some(predicate)) {\n changes.remove(predicate);\n } else {\n changes.insert(toggle);\n }\n }\n\n if (modify) {\n for (key in values) {\n changes.modify(modify, key, values[key]);\n }\n }\n\n return 1;\n}\n\nfunction pinchDistance(event) {\n const t = event.touches,\n dx = t[0].clientX - t[1].clientX,\n dy = t[0].clientY - t[1].clientY;\n return Math.sqrt(dx * dx + dy * dy);\n}\nfunction pinchAngle(event) {\n const t = event.touches;\n return Math.atan2(t[0].clientY - t[1].clientY, t[0].clientX - t[1].clientX);\n}\n\nconst accessors = {};\nfunction pluck (data, name) {\n const accessor = accessors[name] || (accessors[name] = field(name));\n return isArray(data) ? data.map(accessor) : accessor(data);\n}\n\nfunction array(seq) {\n return isArray(seq) || ArrayBuffer.isView(seq) ? seq : null;\n}\n\nfunction sequence(seq) {\n return array(seq) || (isString(seq) ? seq : null);\n}\n\nfunction join(seq, ...args) {\n return array(seq).join(...args);\n}\nfunction indexof(seq, ...args) {\n return sequence(seq).indexOf(...args);\n}\nfunction lastindexof(seq, ...args) {\n return sequence(seq).lastIndexOf(...args);\n}\nfunction slice(seq, ...args) {\n return sequence(seq).slice(...args);\n}\nfunction replace(str, pattern, repl) {\n if (isFunction(repl)) error('Function argument passed to replace.');\n return String(str).replace(pattern, repl);\n}\nfunction reverse(seq) {\n return array(seq).slice().reverse();\n}\n\nfunction bandspace(count, paddingInner, paddingOuter) {\n return bandSpace(count || 0, paddingInner || 0, paddingOuter || 0);\n}\nfunction bandwidth(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.bandwidth ? s.bandwidth() : 0;\n}\nfunction copy(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.copy() : undefined;\n}\nfunction domain(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.domain() : [];\n}\nfunction invert(name, range, group) {\n const s = getScale(name, (group || this).context);\n return !s ? undefined : isArray(range) ? (s.invertRange || s.invert)(range) : (s.invert || s.invertExtent)(range);\n}\nfunction range(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.range ? s.range() : [];\n}\nfunction scale(name, value, group) {\n const s = getScale(name, (group || this).context);\n return s ? s(value) : undefined;\n}\n\nfunction scaleGradient (scale, p0, p1, count, group) {\n scale = getScale(scale, (group || this).context);\n const gradient = Gradient(p0, p1);\n let stops = scale.domain(),\n min = stops[0],\n max = peek(stops),\n fraction = identity;\n\n if (!(max - min)) {\n // expand scale if domain has zero span, fix #1479\n scale = (scale.interpolator ? scale$1('sequential')().interpolator(scale.interpolator()) : scale$1('linear')().interpolate(scale.interpolate()).range(scale.range())).domain([min = 0, max = 1]);\n } else {\n fraction = scaleFraction(scale, min, max);\n }\n\n if (scale.ticks) {\n stops = scale.ticks(+count || 15);\n if (min !== stops[0]) stops.unshift(min);\n if (max !== peek(stops)) stops.push(max);\n }\n\n stops.forEach(_ => gradient.stop(fraction(_), scale(_)));\n return gradient;\n}\n\nfunction geoShape(projection, geojson, group) {\n const p = getScale(projection, (group || this).context);\n return function (context) {\n return p ? p.path.context(context)(geojson) : '';\n };\n}\nfunction pathShape(path) {\n let p = null;\n return function (context) {\n return context ? pathRender(context, p = p || pathParse(path)) : path;\n };\n}\n\nconst datum = d => d.data;\n\nfunction treeNodes(name, context) {\n const tree = data.call(context, name);\n return tree.root && tree.root.lookup || {};\n}\n\nfunction treePath(name, source, target) {\n const nodes = treeNodes(name, this),\n s = nodes[source],\n t = nodes[target];\n return s && t ? s.path(t).map(datum) : undefined;\n}\nfunction treeAncestors(name, node) {\n const n = treeNodes(name, this)[node];\n return n ? n.ancestors().map(datum) : undefined;\n}\n\nconst _window = () => typeof window !== 'undefined' && window || null;\n\nfunction screen() {\n const w = _window();\n\n return w ? w.screen : {};\n}\nfunction windowSize() {\n const w = _window();\n\n return w ? [w.innerWidth, w.innerHeight] : [undefined, undefined];\n}\nfunction containerSize() {\n const view = this.context.dataflow,\n el = view.container && view.container();\n return el ? [el.clientWidth, el.clientHeight] : [undefined, undefined];\n}\n\nfunction intersect (b, opt, group) {\n if (!b) return [];\n const [u, v] = b,\n box = new Bounds().set(u[0], u[1], v[0], v[1]),\n scene = group || this.context.dataflow.scenegraph().root;\n return intersect$1(scene, box, filter(opt));\n}\n\nfunction filter(opt) {\n let p = null;\n\n if (opt) {\n const types = array$1(opt.marktype),\n names = array$1(opt.markname);\n\n p = _ => (!types.length || types.some(t => _.marktype === t)) && (!names.length || names.some(s => _.name === s));\n }\n\n return p;\n}\n\nconst functionContext = {\n random() {\n return random();\n },\n\n // override default\n cumulativeNormal,\n cumulativeLogNormal,\n cumulativeUniform,\n densityNormal,\n densityLogNormal,\n densityUniform,\n quantileNormal,\n quantileLogNormal,\n quantileUniform,\n sampleNormal,\n sampleLogNormal,\n sampleUniform,\n isArray,\n isBoolean,\n isDate,\n\n isDefined(_) {\n return _ !== undefined;\n },\n\n isNumber,\n isObject,\n isRegExp,\n isString,\n isTuple,\n\n isValid(_) {\n return _ != null && _ === _;\n },\n\n toBoolean,\n toDate,\n toNumber,\n toString,\n indexof,\n join,\n lastindexof,\n replace,\n reverse,\n slice,\n flush,\n lerp,\n merge,\n pad,\n peek,\n pluck,\n span,\n inrange,\n truncate,\n rgb,\n lab,\n hcl,\n hsl,\n luminance,\n contrast,\n sequence: range$1,\n format,\n utcFormat,\n utcParse,\n utcOffset,\n utcSequence,\n timeFormat,\n timeParse,\n timeOffset,\n timeSequence,\n timeUnitSpecifier,\n monthFormat,\n monthAbbrevFormat,\n dayFormat,\n dayAbbrevFormat,\n quarter,\n utcquarter,\n week,\n utcweek,\n dayofyear,\n utcdayofyear,\n warn,\n info,\n debug,\n extent,\n inScope,\n intersect,\n clampRange,\n pinchDistance,\n pinchAngle,\n screen,\n containerSize,\n windowSize,\n bandspace,\n setdata,\n pathShape,\n panLinear,\n panLog,\n panPow,\n panSymlog,\n zoomLinear,\n zoomLog,\n zoomPow,\n zoomSymlog,\n encode,\n modify\n};\nconst eventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'],\n // event functions\neventPrefix = 'event.vega.',\n // event function prefix\nthisPrefix = 'this.',\n // function context prefix\nastVisitors = {}; // AST visitors for dependency analysis\n// export code generator parameters\n\nconst codegenParams = {\n forbidden: ['_'],\n allowed: ['datum', 'event', 'item'],\n fieldvar: 'datum',\n globalvar: id => `_[${stringValue(SignalPrefix + id)}]`,\n functions: buildFunctions,\n constants: constants,\n visitors: astVisitors\n}; // export code generator\n\nconst codeGenerator = codegen(codegenParams); // Build expression function registry\n\nfunction buildFunctions(codegen) {\n const fn = functions(codegen);\n eventFunctions.forEach(name => fn[name] = eventPrefix + name);\n\n for (const name in functionContext) {\n fn[name] = thisPrefix + name;\n }\n\n extend(fn, internalScaleFunctions(codegen, functionContext, astVisitors));\n return fn;\n} // Register an expression function\n\n\nfunction expressionFunction(name, fn, visitor) {\n if (arguments.length === 1) {\n return functionContext[name];\n } // register with the functionContext\n\n\n functionContext[name] = fn; // if there is an astVisitor register that, too\n\n if (visitor) astVisitors[name] = visitor; // if the code generator has already been initialized,\n // we need to also register the function with it\n\n if (codeGenerator) codeGenerator.functions[name] = thisPrefix + name;\n return this;\n} // register expression functions with ast visitors\n\nexpressionFunction('bandwidth', bandwidth, scaleVisitor);\nexpressionFunction('copy', copy, scaleVisitor);\nexpressionFunction('domain', domain, scaleVisitor);\nexpressionFunction('range', range, scaleVisitor);\nexpressionFunction('invert', invert, scaleVisitor);\nexpressionFunction('scale', scale, scaleVisitor);\nexpressionFunction('gradient', scaleGradient, scaleVisitor);\nexpressionFunction('geoArea', geoArea, scaleVisitor);\nexpressionFunction('geoBounds', geoBounds, scaleVisitor);\nexpressionFunction('geoCentroid', geoCentroid, scaleVisitor);\nexpressionFunction('geoShape', geoShape, scaleVisitor);\nexpressionFunction('indata', indata, indataVisitor);\nexpressionFunction('data', data, dataVisitor);\nexpressionFunction('treePath', treePath, dataVisitor);\nexpressionFunction('treeAncestors', treeAncestors, dataVisitor); // register Vega-Lite selection functions\n\nexpressionFunction('vlSelectionTest', selectionTest, selectionVisitor);\nexpressionFunction('vlSelectionIdTest', selectionIdTest, selectionVisitor);\nexpressionFunction('vlSelectionResolve', selectionResolve, selectionVisitor);\nexpressionFunction('vlSelectionTuples', selectionTuples);\n\nfunction parser (expr, scope) {\n const params = {}; // parse the expression to an abstract syntax tree (ast)\n\n let ast;\n\n try {\n expr = isString(expr) ? expr : stringValue(expr) + '';\n ast = parse(expr);\n } catch (err) {\n error('Expression parse error: ' + expr);\n } // analyze ast function calls for dependencies\n\n\n ast.visit(node => {\n if (node.type !== CallExpression) return;\n const name = node.callee.name,\n visit = codegenParams.visitors[name];\n if (visit) visit(name, node.arguments, scope, params);\n }); // perform code generation\n\n const gen = codeGenerator(ast); // collect signal dependencies\n\n gen.globals.forEach(name => {\n const signalName = SignalPrefix + name;\n\n if (!hasOwnProperty(params, signalName) && scope.getSignal(name)) {\n params[signalName] = scope.signalRef(name);\n }\n }); // return generated expression code and dependencies\n\n return {\n $expr: extend({\n code: gen.code\n }, scope.options.ast ? {\n ast\n } : null),\n $fields: gen.fields,\n $params: params\n };\n}\n\nexport { DataPrefix, IndexPrefix, ScalePrefix, SignalPrefix, bandspace, bandwidth, codeGenerator, codegenParams, containerSize, contrast, copy, data, dataVisitor, dayAbbrevFormat, dayFormat, debug, domain, encode, expressionFunction, format, functionContext, geoArea, geoBounds, geoCentroid, geoShape, inScope, indata, indataVisitor, indexof, info, invert, join, lastindexof, luminance, merge, modify, monthAbbrevFormat, monthFormat, parser as parseExpression, pathShape, pinchAngle, pinchDistance, pluck, range, replace, reverse, scale, scaleGradient, scaleVisitor, screen, setdata, slice, timeFormat, timeParse, treeAncestors, treePath, utcFormat, utcParse, warn, windowSize };\n","import { toSet, stringValue, error, isArray, isObject, hasOwnProperty, accessor, key, field, array, compare, truthy } from 'vega-util';\nimport { tupleid } from 'vega-dataflow';\n\n/**\n * Parse a serialized dataflow specification.\n */\nfunction parse (spec) {\n const ctx = this,\n operators = spec.operators || []; // parse background\n\n if (spec.background) {\n ctx.background = spec.background;\n } // parse event configuration\n\n\n if (spec.eventConfig) {\n ctx.eventConfig = spec.eventConfig;\n } // parse locale configuration\n\n\n if (spec.locale) {\n ctx.locale = spec.locale;\n } // parse operators\n\n\n operators.forEach(entry => ctx.parseOperator(entry)); // parse operator parameters\n\n operators.forEach(entry => ctx.parseOperatorParameters(entry)); // parse streams\n\n (spec.streams || []).forEach(entry => ctx.parseStream(entry)); // parse updates\n\n (spec.updates || []).forEach(entry => ctx.parseUpdate(entry));\n return ctx.resolve();\n}\n\nconst Skip = toSet(['rule']),\n Swap = toSet(['group', 'image', 'rect']);\nfunction adjustSpatial(encode, marktype) {\n let code = '';\n if (Skip[marktype]) return code;\n\n if (encode.x2) {\n if (encode.x) {\n if (Swap[marktype]) {\n code += 'if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;';\n }\n\n code += 'o.width=o.x2-o.x;';\n } else {\n code += 'o.x=o.x2-(o.width||0);';\n }\n }\n\n if (encode.xc) {\n code += 'o.x=o.xc-(o.width||0)/2;';\n }\n\n if (encode.y2) {\n if (encode.y) {\n if (Swap[marktype]) {\n code += 'if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;';\n }\n\n code += 'o.height=o.y2-o.y;';\n } else {\n code += 'o.y=o.y2-(o.height||0);';\n }\n }\n\n if (encode.yc) {\n code += 'o.y=o.yc-(o.height||0)/2;';\n }\n\n return code;\n}\nfunction canonicalType(type) {\n return (type + '').toLowerCase();\n}\nfunction isOperator(type) {\n return canonicalType(type) === 'operator';\n}\nfunction isCollect(type) {\n return canonicalType(type) === 'collect';\n}\n\nfunction expression(ctx, args, code) {\n // wrap code in return statement if expression does not terminate\n if (code[code.length - 1] !== ';') {\n code = 'return(' + code + ');';\n }\n\n const fn = Function(...args.concat(code));\n return ctx && ctx.functions ? fn.bind(ctx.functions) : fn;\n} // generate code for comparing a single field\n\n\nfunction _compare(u, v, lt, gt) {\n return `((u = ${u}) < (v = ${v}) || u == null) && v != null ? ${lt}\n : (u > v || v == null) && u != null ? ${gt}\n : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? ${lt}\n : v !== v && u === u ? ${gt} : `;\n}\n\nvar expressionCodegen = {\n /**\n * Parse an expression used to update an operator value.\n */\n operator: (ctx, expr) => expression(ctx, ['_'], expr.code),\n\n /**\n * Parse an expression provided as an operator parameter value.\n */\n parameter: (ctx, expr) => expression(ctx, ['datum', '_'], expr.code),\n\n /**\n * Parse an expression applied to an event stream.\n */\n event: (ctx, expr) => expression(ctx, ['event'], expr.code),\n\n /**\n * Parse an expression used to handle an event-driven operator update.\n */\n handler: (ctx, expr) => {\n const code = `var datum=event.item&&event.item.datum;return ${expr.code};`;\n return expression(ctx, ['_', 'event'], code);\n },\n\n /**\n * Parse an expression that performs visual encoding.\n */\n encode: (ctx, encode) => {\n const {\n marktype,\n channels\n } = encode;\n let code = 'var o=item,datum=o.datum,m=0,$;';\n\n for (const name in channels) {\n const o = 'o[' + stringValue(name) + ']';\n code += `$=${channels[name].code};if(${o}!==$)${o}=$,m=1;`;\n }\n\n code += adjustSpatial(channels, marktype);\n code += 'return m;';\n return expression(ctx, ['item', '_'], code);\n },\n\n /**\n * Optimized code generators for access and comparison.\n */\n codegen: {\n get(path) {\n const ref = `[${path.map(stringValue).join('][')}]`;\n const get = Function('_', `return _${ref};`);\n get.path = ref;\n return get;\n },\n\n comparator(fields, orders) {\n let t;\n\n const map = (f, i) => {\n const o = orders[i];\n let u, v;\n\n if (f.path) {\n u = `a${f.path}`;\n v = `b${f.path}`;\n } else {\n (t = t || {})['f' + i] = f;\n u = `this.f${i}(a)`;\n v = `this.f${i}(b)`;\n }\n\n return _compare(u, v, -o, o);\n };\n\n const fn = Function('a', 'b', 'var u, v; return ' + fields.map(map).join('') + '0;');\n return t ? fn.bind(t) : fn;\n }\n\n }\n};\n\n/**\n * Parse a dataflow operator.\n */\n\nfunction parseOperator(spec) {\n const ctx = this;\n\n if (isOperator(spec.type) || !spec.type) {\n ctx.operator(spec, spec.update ? ctx.operatorExpression(spec.update) : null);\n } else {\n ctx.transform(spec, spec.type);\n }\n}\n/**\n * Parse and assign operator parameters.\n */\n\nfunction parseOperatorParameters(spec) {\n const ctx = this;\n\n if (spec.params) {\n const op = ctx.get(spec.id);\n if (!op) error('Invalid operator id: ' + spec.id);\n ctx.dataflow.connect(op, op.parameters(ctx.parseParameters(spec.params), spec.react, spec.initonly));\n }\n}\n\n/**\n * Parse a set of operator parameters.\n */\n\nfunction parseParameters(spec, params) {\n params = params || {};\n const ctx = this;\n\n for (const key in spec) {\n const value = spec[key];\n params[key] = isArray(value) ? value.map(v => parseParameter(v, ctx, params)) : parseParameter(value, ctx, params);\n }\n\n return params;\n}\n/**\n * Parse a single parameter.\n */\n\nfunction parseParameter(spec, ctx, params) {\n if (!spec || !isObject(spec)) return spec;\n\n for (let i = 0, n = PARSERS.length, p; i < n; ++i) {\n p = PARSERS[i];\n\n if (hasOwnProperty(spec, p.key)) {\n return p.parse(spec, ctx, params);\n }\n }\n\n return spec;\n}\n/** Reference parsers. */\n\n\nvar PARSERS = [{\n key: '$ref',\n parse: getOperator\n}, {\n key: '$key',\n parse: getKey\n}, {\n key: '$expr',\n parse: getExpression\n}, {\n key: '$field',\n parse: getField\n}, {\n key: '$encode',\n parse: getEncode\n}, {\n key: '$compare',\n parse: getCompare\n}, {\n key: '$context',\n parse: getContext\n}, {\n key: '$subflow',\n parse: getSubflow\n}, {\n key: '$tupleid',\n parse: getTupleId\n}];\n/**\n * Resolve an operator reference.\n */\n\nfunction getOperator(_, ctx) {\n return ctx.get(_.$ref) || error('Operator not defined: ' + _.$ref);\n}\n/**\n * Resolve an expression reference.\n */\n\n\nfunction getExpression(_, ctx, params) {\n if (_.$params) {\n // parse expression parameters\n ctx.parseParameters(_.$params, params);\n }\n\n const k = 'e:' + _.$expr.code + '_' + _.$name;\n return ctx.fn[k] || (ctx.fn[k] = accessor(ctx.parameterExpression(_.$expr), _.$fields, _.$name));\n}\n/**\n * Resolve a key accessor reference.\n */\n\n\nfunction getKey(_, ctx) {\n const k = 'k:' + _.$key + '_' + !!_.$flat;\n return ctx.fn[k] || (ctx.fn[k] = key(_.$key, _.$flat, ctx.expr.codegen));\n}\n/**\n * Resolve a field accessor reference.\n */\n\n\nfunction getField(_, ctx) {\n if (!_.$field) return null;\n const k = 'f:' + _.$field + '_' + _.$name;\n return ctx.fn[k] || (ctx.fn[k] = field(_.$field, _.$name, ctx.expr.codegen));\n}\n/**\n * Resolve a comparator function reference.\n */\n\n\nfunction getCompare(_, ctx) {\n // As of Vega 5.5.3, $tupleid sort is no longer used.\n // Keep here for now for backwards compatibility.\n const k = 'c:' + _.$compare + '_' + _.$order,\n c = array(_.$compare).map(_ => _ && _.$tupleid ? tupleid : _);\n return ctx.fn[k] || (ctx.fn[k] = compare(c, _.$order, ctx.expr.codegen));\n}\n/**\n * Resolve an encode operator reference.\n */\n\n\nfunction getEncode(_, ctx) {\n const spec = _.$encode,\n encode = {};\n\n for (const name in spec) {\n const enc = spec[name];\n encode[name] = accessor(ctx.encodeExpression(enc.$expr), enc.$fields);\n encode[name].output = enc.$output;\n }\n\n return encode;\n}\n/**\n * Resolve a context reference.\n */\n\n\nfunction getContext(_, ctx) {\n return ctx;\n}\n/**\n * Resolve a recursive subflow specification.\n */\n\n\nfunction getSubflow(_, ctx) {\n const spec = _.$subflow;\n return function (dataflow, key, parent) {\n const subctx = ctx.fork().parse(spec),\n op = subctx.get(spec.operators[0].id),\n p = subctx.signals.parent;\n if (p) p.set(parent);\n\n op.detachSubflow = () => ctx.detach(subctx);\n\n return op;\n };\n}\n/**\n * Resolve a tuple id reference.\n */\n\n\nfunction getTupleId() {\n return tupleid;\n}\n\n/**\n * Parse an event stream specification.\n */\n\nfunction parseStream (spec) {\n var ctx = this,\n filter = spec.filter != null ? ctx.eventExpression(spec.filter) : undefined,\n stream = spec.stream != null ? ctx.get(spec.stream) : undefined,\n args;\n\n if (spec.source) {\n stream = ctx.events(spec.source, spec.type, filter);\n } else if (spec.merge) {\n args = spec.merge.map(_ => ctx.get(_));\n stream = args[0].merge.apply(args[0], args.slice(1));\n }\n\n if (spec.between) {\n args = spec.between.map(_ => ctx.get(_));\n stream = stream.between(args[0], args[1]);\n }\n\n if (spec.filter) {\n stream = stream.filter(filter);\n }\n\n if (spec.throttle != null) {\n stream = stream.throttle(+spec.throttle);\n }\n\n if (spec.debounce != null) {\n stream = stream.debounce(+spec.debounce);\n }\n\n if (stream == null) {\n error('Invalid stream definition: ' + JSON.stringify(spec));\n }\n\n if (spec.consume) stream.consume(true);\n ctx.stream(spec, stream);\n}\n\n/**\n * Parse an event-driven operator update.\n */\n\nfunction parseUpdate (spec) {\n var ctx = this,\n srcid = isObject(srcid = spec.source) ? srcid.$ref : srcid,\n source = ctx.get(srcid),\n target = null,\n update = spec.update,\n params = undefined;\n if (!source) error('Source not defined: ' + spec.source);\n target = spec.target && spec.target.$expr ? ctx.eventExpression(spec.target.$expr) : ctx.get(spec.target);\n\n if (update && update.$expr) {\n if (update.$params) {\n params = ctx.parseParameters(update.$params);\n }\n\n update = ctx.handlerExpression(update.$expr);\n }\n\n ctx.update(spec, source, target, update, params);\n}\n\nconst SKIP = {\n skip: true\n};\nfunction getState(options) {\n var ctx = this,\n state = {};\n\n if (options.signals) {\n var signals = state.signals = {};\n Object.keys(ctx.signals).forEach(key => {\n const op = ctx.signals[key];\n\n if (options.signals(key, op)) {\n signals[key] = op.value;\n }\n });\n }\n\n if (options.data) {\n var data = state.data = {};\n Object.keys(ctx.data).forEach(key => {\n const dataset = ctx.data[key];\n\n if (options.data(key, dataset)) {\n data[key] = dataset.input.value;\n }\n });\n }\n\n if (ctx.subcontext && options.recurse !== false) {\n state.subcontext = ctx.subcontext.map(ctx => ctx.getState(options));\n }\n\n return state;\n}\nfunction setState(state) {\n var ctx = this,\n df = ctx.dataflow,\n data = state.data,\n signals = state.signals;\n Object.keys(signals || {}).forEach(key => {\n df.update(ctx.signals[key], signals[key], SKIP);\n });\n Object.keys(data || {}).forEach(key => {\n df.pulse(ctx.data[key].input, df.changeset().remove(truthy).insert(data[key]));\n });\n (state.subcontext || []).forEach((substate, i) => {\n const subctx = ctx.subcontext[i];\n if (subctx) subctx.setState(substate);\n });\n}\n\n/**\n * Context objects store the current parse state.\n * Enables lookup of parsed operators, event streams, accessors, etc.\n * Provides a 'fork' method for creating child contexts for subflows.\n */\n\nfunction context (df, transforms, functions, expr) {\n return new Context(df, transforms, functions, expr);\n}\n\nfunction Context(df, transforms, functions, expr) {\n this.dataflow = df;\n this.transforms = transforms;\n this.events = df.events.bind(df);\n this.expr = expr || expressionCodegen, this.signals = {};\n this.scales = {};\n this.nodes = {};\n this.data = {};\n this.fn = {};\n\n if (functions) {\n this.functions = Object.create(functions);\n this.functions.context = this;\n }\n}\n\nfunction Subcontext(ctx) {\n this.dataflow = ctx.dataflow;\n this.transforms = ctx.transforms;\n this.events = ctx.events;\n this.expr = ctx.expr;\n this.signals = Object.create(ctx.signals);\n this.scales = Object.create(ctx.scales);\n this.nodes = Object.create(ctx.nodes);\n this.data = Object.create(ctx.data);\n this.fn = Object.create(ctx.fn);\n\n if (ctx.functions) {\n this.functions = Object.create(ctx.functions);\n this.functions.context = this;\n }\n}\n\nContext.prototype = Subcontext.prototype = {\n fork() {\n const ctx = new Subcontext(this);\n (this.subcontext || (this.subcontext = [])).push(ctx);\n return ctx;\n },\n\n detach(ctx) {\n this.subcontext = this.subcontext.filter(c => c !== ctx); // disconnect all nodes in the subcontext\n // wipe out targets first for better efficiency\n\n const keys = Object.keys(ctx.nodes);\n\n for (const key of keys) ctx.nodes[key]._targets = null;\n\n for (const key of keys) ctx.nodes[key].detach();\n\n ctx.nodes = null;\n },\n\n get(id) {\n return this.nodes[id];\n },\n\n set(id, node) {\n return this.nodes[id] = node;\n },\n\n add(spec, op) {\n const ctx = this,\n df = ctx.dataflow,\n data = spec.value;\n ctx.set(spec.id, op);\n\n if (isCollect(spec.type) && data) {\n if (data.$ingest) {\n df.ingest(op, data.$ingest, data.$format);\n } else if (data.$request) {\n df.preload(op, data.$request, data.$format);\n } else {\n df.pulse(op, df.changeset().insert(data));\n }\n }\n\n if (spec.root) {\n ctx.root = op;\n }\n\n if (spec.parent) {\n let p = ctx.get(spec.parent.$ref);\n\n if (p) {\n df.connect(p, [op]);\n op.targets().add(p);\n } else {\n (ctx.unresolved = ctx.unresolved || []).push(() => {\n p = ctx.get(spec.parent.$ref);\n df.connect(p, [op]);\n op.targets().add(p);\n });\n }\n }\n\n if (spec.signal) {\n ctx.signals[spec.signal] = op;\n }\n\n if (spec.scale) {\n ctx.scales[spec.scale] = op;\n }\n\n if (spec.data) {\n for (const name in spec.data) {\n const data = ctx.data[name] || (ctx.data[name] = {});\n spec.data[name].forEach(role => data[role] = op);\n }\n }\n },\n\n resolve() {\n (this.unresolved || []).forEach(fn => fn());\n delete this.unresolved;\n return this;\n },\n\n operator(spec, update) {\n this.add(spec, this.dataflow.add(spec.value, update));\n },\n\n transform(spec, type) {\n this.add(spec, this.dataflow.add(this.transforms[canonicalType(type)]));\n },\n\n stream(spec, stream) {\n this.set(spec.id, stream);\n },\n\n update(spec, stream, target, update, params) {\n this.dataflow.on(stream, target, update, params, spec.options);\n },\n\n // expression parsing\n operatorExpression(expr) {\n return this.expr.operator(this, expr);\n },\n\n parameterExpression(expr) {\n return this.expr.parameter(this, expr);\n },\n\n eventExpression(expr) {\n return this.expr.event(this, expr);\n },\n\n handlerExpression(expr) {\n return this.expr.handler(this, expr);\n },\n\n encodeExpression(encode) {\n return this.expr.encode(this, encode);\n },\n\n // parse methods\n parse,\n parseOperator,\n parseOperatorParameters,\n parseParameters,\n parseStream,\n parseUpdate,\n // state methods\n getState,\n setState\n};\n\nexport { context };\n","import { isString, hasOwnProperty, error, truthy, constant, extend, isArray, toSet, array, isObject, debounce, isDate, inherits, stringValue } from 'vega-util';\nimport { changeset, isChangeSet, EventStream, transforms, Dataflow, asyncCallback } from 'vega-dataflow';\nimport { point, renderModule, CanvasHandler, RenderType, Scenegraph } from 'vega-scenegraph';\nimport { tickStep } from 'd3-array';\nimport { functionContext } from 'vega-functions';\nimport { context } from 'vega-runtime';\nimport { interval } from 'd3-timer';\nimport { locale } from 'vega-format';\n\n// initialize aria role and label attributes\nfunction initializeAria(view) {\n const el = view.container();\n\n if (el) {\n el.setAttribute('role', 'graphics-document');\n el.setAttribute('aria-roleDescription', 'visualization');\n ariaLabel(el, view.description());\n }\n} // update aria-label if we have a DOM container element\n\nfunction ariaLabel(el, desc) {\n if (el) desc == null ? el.removeAttribute('aria-label') : el.setAttribute('aria-label', desc);\n}\n\nfunction background (view) {\n // respond to background signal\n view.add(null, _ => {\n view._background = _.bg;\n view._resize = 1;\n return _.bg;\n }, {\n bg: view._signals.background\n });\n}\n\nconst Default = 'default';\nfunction cursor (view) {\n // get cursor signal, add to dataflow if needed\n const cursor = view._signals.cursor || (view._signals.cursor = view.add({\n user: Default,\n item: null\n })); // evaluate cursor on each mousemove event\n\n view.on(view.events('view', 'mousemove'), cursor, (_, event) => {\n const value = cursor.value,\n user = value ? isString(value) ? value : value.user : Default,\n item = event.item && event.item.cursor || null;\n return value && user === value.user && item == value.item ? value : {\n user: user,\n item: item\n };\n }); // when cursor signal updates, set visible cursor\n\n view.add(null, function (_) {\n let user = _.cursor,\n item = this.value;\n\n if (!isString(user)) {\n item = user.item;\n user = user.user;\n }\n\n setCursor(view, user && user !== Default ? user : item || user);\n return item;\n }, {\n cursor: cursor\n });\n}\nfunction setCursor(view, cursor) {\n const el = view.globalCursor() ? typeof document !== 'undefined' && document.body : view.container();\n\n if (el) {\n return cursor == null ? el.style.removeProperty('cursor') : el.style.cursor = cursor;\n }\n}\n\nfunction dataref(view, name) {\n var data = view._runtime.data;\n\n if (!hasOwnProperty(data, name)) {\n error('Unrecognized data set: ' + name);\n }\n\n return data[name];\n}\nfunction data(name, values) {\n return arguments.length < 2 ? dataref(this, name).values.value : change.call(this, name, changeset().remove(truthy).insert(values));\n}\nfunction change(name, changes) {\n if (!isChangeSet(changes)) {\n error('Second argument to changes must be a changeset.');\n }\n\n const dataset = dataref(this, name);\n dataset.modified = true;\n return this.pulse(dataset.input, changes);\n}\nfunction insert(name, _) {\n return change.call(this, name, changeset().insert(_));\n}\nfunction remove(name, _) {\n return change.call(this, name, changeset().remove(_));\n}\n\nfunction width(view) {\n var padding = view.padding();\n return Math.max(0, view._viewWidth + padding.left + padding.right);\n}\nfunction height(view) {\n var padding = view.padding();\n return Math.max(0, view._viewHeight + padding.top + padding.bottom);\n}\nfunction offset(view) {\n var padding = view.padding(),\n origin = view._origin;\n return [padding.left + origin[0], padding.top + origin[1]];\n}\nfunction resizeRenderer(view) {\n var origin = offset(view),\n w = width(view),\n h = height(view);\n\n view._renderer.background(view.background());\n\n view._renderer.resize(w, h, origin);\n\n view._handler.origin(origin);\n\n view._resizeListeners.forEach(handler => {\n try {\n handler(w, h);\n } catch (error) {\n view.error(error);\n }\n });\n}\n\n/**\n * Extend an event with additional view-specific methods.\n * Adds a new property ('vega') to an event that provides a number\n * of methods for querying information about the current interaction.\n * The vega object provides the following methods:\n * view - Returns the backing View instance.\n * item - Returns the currently active scenegraph item (if any).\n * group - Returns the currently active scenegraph group (if any).\n * This method accepts a single string-typed argument indicating the name\n * of the desired parent group. The scenegraph will be traversed from\n * the item up towards the root to search for a matching group. If no\n * argument is provided the enclosing group for the active item is\n * returned, unless the item it itself a group, in which case it is\n * returned directly.\n * xy - Returns a two-element array containing the x and y coordinates for\n * mouse or touch events. For touch events, this is based on the first\n * elements in the changedTouches array. This method accepts a single\n * argument: either an item instance or mark name that should serve as\n * the reference coordinate system. If no argument is provided the\n * top-level view coordinate system is assumed.\n * x - Returns the current x-coordinate, accepts the same arguments as xy.\n * y - Returns the current y-coordinate, accepts the same arguments as xy.\n * @param {Event} event - The input event to extend.\n * @param {Item} item - The currently active scenegraph item (if any).\n * @return {Event} - The extended input event.\n */\n\nfunction eventExtend (view, event, item) {\n var r = view._renderer,\n el = r && r.canvas(),\n p,\n e,\n translate;\n\n if (el) {\n translate = offset(view);\n e = event.changedTouches ? event.changedTouches[0] : event;\n p = point(e, el);\n p[0] -= translate[0];\n p[1] -= translate[1];\n }\n\n event.dataflow = view;\n event.item = item;\n event.vega = extension(view, item, p);\n return event;\n}\n\nfunction extension(view, item, point) {\n const itemGroup = item ? item.mark.marktype === 'group' ? item : item.mark.group : null;\n\n function group(name) {\n var g = itemGroup,\n i;\n if (name) for (i = item; i; i = i.mark.group) {\n if (i.mark.name === name) {\n g = i;\n break;\n }\n }\n return g && g.mark && g.mark.interactive ? g : {};\n }\n\n function xy(item) {\n if (!item) return point;\n if (isString(item)) item = group(item);\n const p = point.slice();\n\n while (item) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n item = item.mark && item.mark.group;\n }\n\n return p;\n }\n\n return {\n view: constant(view),\n item: constant(item || {}),\n group: group,\n xy: xy,\n x: item => xy(item)[0],\n y: item => xy(item)[1]\n };\n}\n\nconst VIEW = 'view',\n TIMER = 'timer',\n WINDOW = 'window',\n NO_TRAP = {\n trap: false\n};\n/**\n * Initialize event handling configuration.\n * @param {object} config - The configuration settings.\n * @return {object}\n */\n\nfunction initializeEventConfig(config) {\n const events = extend({\n defaults: {}\n }, config);\n\n const unpack = (obj, keys) => {\n keys.forEach(k => {\n if (isArray(obj[k])) obj[k] = toSet(obj[k]);\n });\n };\n\n unpack(events.defaults, ['prevent', 'allow']);\n unpack(events, ['view', 'window', 'selector']);\n return events;\n}\nfunction trackEventListener(view, sources, type, handler) {\n view._eventListeners.push({\n type: type,\n sources: array(sources),\n handler: handler\n });\n}\n\nfunction prevent(view, type) {\n var def = view._eventConfig.defaults,\n prevent = def.prevent,\n allow = def.allow;\n return prevent === false || allow === true ? false : prevent === true || allow === false ? true : prevent ? prevent[type] : allow ? !allow[type] : view.preventDefault();\n}\n\nfunction permit(view, key, type) {\n const rule = view._eventConfig && view._eventConfig[key];\n\n if (rule === false || isObject(rule) && !rule[type]) {\n view.warn(`Blocked ${key} ${type} event listener.`);\n return false;\n }\n\n return true;\n}\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @return {EventStream}\n */\n\n\nfunction events(source, type, filter) {\n var view = this,\n s = new EventStream(filter),\n send = function (e, item) {\n view.runAsync(null, () => {\n if (source === VIEW && prevent(view, type)) {\n e.preventDefault();\n }\n\n s.receive(eventExtend(view, e, item));\n });\n },\n sources;\n\n if (source === TIMER) {\n if (permit(view, 'timer', type)) {\n view.timer(send, type);\n }\n } else if (source === VIEW) {\n if (permit(view, 'view', type)) {\n // send traps errors, so use {trap: false} option\n view.addEventListener(type, send, NO_TRAP);\n }\n } else {\n if (source === WINDOW) {\n if (permit(view, 'window', type) && typeof window !== 'undefined') {\n sources = [window];\n }\n } else if (typeof document !== 'undefined') {\n if (permit(view, 'selector', type)) {\n sources = document.querySelectorAll(source);\n }\n }\n\n if (!sources) {\n view.warn('Can not resolve event source: ' + source);\n } else {\n for (var i = 0, n = sources.length; i < n; ++i) {\n sources[i].addEventListener(type, send);\n }\n\n trackEventListener(view, sources, type, send);\n }\n }\n\n return s;\n}\n\nfunction itemFilter(event) {\n return event.item;\n}\n\nfunction markTarget(event) {\n // grab upstream collector feeding the mark operator\n return event.item.mark.source;\n}\n\nfunction invoke(name) {\n return function (_, event) {\n return event.vega.view().changeset().encode(event.item, name);\n };\n}\n\nfunction hover (hoverSet, leaveSet) {\n hoverSet = [hoverSet || 'hover'];\n leaveSet = [leaveSet || 'update', hoverSet[0]]; // invoke hover set upon mouseover\n\n this.on(this.events('view', 'mouseover', itemFilter), markTarget, invoke(hoverSet)); // invoke leave set upon mouseout\n\n this.on(this.events('view', 'mouseout', itemFilter), markTarget, invoke(leaveSet));\n return this;\n}\n\n/**\n * Finalize a View instance that is being removed.\n * Cancel any running timers.\n * Remove all external event listeners.\n * Remove any currently displayed tooltip.\n */\nfunction finalize () {\n var tooltip = this._tooltip,\n timers = this._timers,\n listeners = this._eventListeners,\n n,\n m,\n e;\n n = timers.length;\n\n while (--n >= 0) {\n timers[n].stop();\n }\n\n n = listeners.length;\n\n while (--n >= 0) {\n e = listeners[n];\n m = e.sources.length;\n\n while (--m >= 0) {\n e.sources[m].removeEventListener(e.type, e.handler);\n }\n }\n\n if (tooltip) {\n tooltip.call(this, this._handler, null, null, null);\n }\n\n return this;\n}\n\nfunction element (tag, attr, text) {\n const el = document.createElement(tag);\n\n for (const key in attr) el.setAttribute(key, attr[key]);\n\n if (text != null) el.textContent = text;\n return el;\n}\n\nconst BindClass = 'vega-bind',\n NameClass = 'vega-bind-name',\n RadioClass = 'vega-bind-radio';\n/**\n * Bind a signal to an external HTML input element. The resulting two-way\n * binding will propagate input changes to signals, and propagate signal\n * changes to the input element state. If this view instance has no parent\n * element, we assume the view is headless and no bindings are created.\n * @param {Element|string} el - The parent DOM element to which the input\n * element should be appended as a child. If string-valued, this argument\n * will be treated as a CSS selector. If null or undefined, the parent\n * element of this view will be used as the element.\n * @param {object} param - The binding parameters which specify the signal\n * to bind to, the input element type, and type-specific configuration.\n * @return {View} - This view instance.\n */\n\nfunction bind (view, el, binding) {\n if (!el) return;\n const param = binding.param;\n let bind = binding.state;\n\n if (!bind) {\n bind = binding.state = {\n elements: null,\n active: false,\n set: null,\n update: value => {\n if (value != view.signal(param.signal)) {\n view.runAsync(null, () => {\n bind.source = true;\n view.signal(param.signal, value);\n });\n }\n }\n };\n\n if (param.debounce) {\n bind.update = debounce(param.debounce, bind.update);\n }\n }\n\n const create = param.input == null && param.element ? target : generate;\n create(bind, el, param, view);\n\n if (!bind.active) {\n view.on(view._signals[param.signal], null, () => {\n bind.source ? bind.source = false : bind.set(view.signal(param.signal));\n });\n bind.active = true;\n }\n\n return bind;\n}\n/**\n * Bind the signal to an external EventTarget.\n */\n\nfunction target(bind, node, param, view) {\n const type = param.event || 'input';\n\n const handler = () => bind.update(node.value); // initialize signal value to external input value\n\n\n view.signal(param.signal, node.value); // listen for changes on the element\n\n node.addEventListener(type, handler); // register with view, so we can remove it upon finalization\n\n trackEventListener(view, node, type, handler); // propagate change to element\n\n bind.set = value => {\n node.value = value;\n node.dispatchEvent(event(type));\n };\n}\n\nfunction event(type) {\n return typeof Event !== 'undefined' ? new Event(type) : {\n type\n };\n}\n/**\n * Generate an HTML input form element and bind it to a signal.\n */\n\n\nfunction generate(bind, el, param, view) {\n const value = view.signal(param.signal);\n const div = element('div', {\n 'class': BindClass\n });\n const wrapper = param.input === 'radio' ? div : div.appendChild(element('label'));\n wrapper.appendChild(element('span', {\n 'class': NameClass\n }, param.name || param.signal));\n el.appendChild(div);\n let input = form;\n\n switch (param.input) {\n case 'checkbox':\n input = checkbox;\n break;\n\n case 'select':\n input = select;\n break;\n\n case 'radio':\n input = radio;\n break;\n\n case 'range':\n input = range;\n break;\n }\n\n input(bind, wrapper, param, value);\n}\n/**\n * Generates an arbitrary input form element.\n * The input type is controlled via user-provided parameters.\n */\n\n\nfunction form(bind, el, param, value) {\n const node = element('input');\n\n for (const key in param) {\n if (key !== 'signal' && key !== 'element') {\n node.setAttribute(key === 'input' ? 'type' : key, param[key]);\n }\n }\n\n node.setAttribute('name', param.signal);\n node.value = value;\n el.appendChild(node);\n node.addEventListener('input', () => bind.update(node.value));\n bind.elements = [node];\n\n bind.set = value => node.value = value;\n}\n/**\n * Generates a checkbox input element.\n */\n\n\nfunction checkbox(bind, el, param, value) {\n const attr = {\n type: 'checkbox',\n name: param.signal\n };\n if (value) attr.checked = true;\n const node = element('input', attr);\n el.appendChild(node);\n node.addEventListener('change', () => bind.update(node.checked));\n bind.elements = [node];\n\n bind.set = value => node.checked = !!value || null;\n}\n/**\n * Generates a selection list input element.\n */\n\n\nfunction select(bind, el, param, value) {\n const node = element('select', {\n name: param.signal\n }),\n labels = param.labels || [];\n param.options.forEach((option, i) => {\n const attr = {\n value: option\n };\n if (valuesEqual(option, value)) attr.selected = true;\n node.appendChild(element('option', attr, (labels[i] || option) + ''));\n });\n el.appendChild(node);\n node.addEventListener('change', () => {\n bind.update(param.options[node.selectedIndex]);\n });\n bind.elements = [node];\n\n bind.set = value => {\n for (let i = 0, n = param.options.length; i < n; ++i) {\n if (valuesEqual(param.options[i], value)) {\n node.selectedIndex = i;\n return;\n }\n }\n };\n}\n/**\n * Generates a radio button group.\n */\n\n\nfunction radio(bind, el, param, value) {\n const group = element('span', {\n 'class': RadioClass\n }),\n labels = param.labels || [];\n el.appendChild(group);\n bind.elements = param.options.map((option, i) => {\n const attr = {\n type: 'radio',\n name: param.signal,\n value: option\n };\n if (valuesEqual(option, value)) attr.checked = true;\n const input = element('input', attr);\n input.addEventListener('change', () => bind.update(option));\n const label = element('label', {}, (labels[i] || option) + '');\n label.prepend(input);\n group.appendChild(label);\n return input;\n });\n\n bind.set = value => {\n const nodes = bind.elements,\n n = nodes.length;\n\n for (let i = 0; i < n; ++i) {\n if (valuesEqual(nodes[i].value, value)) nodes[i].checked = true;\n }\n };\n}\n/**\n * Generates a slider input element.\n */\n\n\nfunction range(bind, el, param, value) {\n value = value !== undefined ? value : (+param.max + +param.min) / 2;\n const max = param.max != null ? param.max : Math.max(100, +value) || 100,\n min = param.min || Math.min(0, max, +value) || 0,\n step = param.step || tickStep(min, max, 100);\n const node = element('input', {\n type: 'range',\n name: param.signal,\n min: min,\n max: max,\n step: step\n });\n node.value = value;\n const span = element('span', {}, +value);\n el.appendChild(node);\n el.appendChild(span);\n\n const update = () => {\n span.textContent = node.value;\n bind.update(+node.value);\n }; // subscribe to both input and change\n\n\n node.addEventListener('input', update);\n node.addEventListener('change', update);\n bind.elements = [node];\n\n bind.set = value => {\n node.value = value;\n span.textContent = value;\n };\n}\n\nfunction valuesEqual(a, b) {\n return a === b || a + '' === b + '';\n}\n\nfunction initializeRenderer (view, r, el, constructor, scaleFactor, opt) {\n r = r || new constructor(view.loader());\n return r.initialize(el, width(view), height(view), offset(view), scaleFactor, opt).background(view.background());\n}\n\nfunction trap (view, fn) {\n return !fn ? null : function () {\n try {\n fn.apply(this, arguments);\n } catch (error) {\n view.error(error);\n }\n };\n}\n\nfunction initializeHandler (view, prevHandler, el, constructor) {\n // instantiate scenegraph handler\n const handler = new constructor(view.loader(), trap(view, view.tooltip())).scene(view.scenegraph().root).initialize(el, offset(view), view); // transfer event handlers\n\n if (prevHandler) {\n prevHandler.handlers().forEach(h => {\n handler.on(h.type, h.handler);\n });\n }\n\n return handler;\n}\n\nfunction initialize (el, elBind) {\n const view = this,\n type = view._renderType,\n config = view._eventConfig.bind,\n module = renderModule(type); // containing dom element\n\n el = view._el = el ? lookup(view, el, true) : null; // initialize aria attributes\n\n initializeAria(view); // select appropriate renderer & handler\n\n if (!module) view.error('Unrecognized renderer type: ' + type);\n const Handler = module.handler || CanvasHandler,\n Renderer = el ? module.renderer : module.headless; // initialize renderer and input handler\n\n view._renderer = !Renderer ? null : initializeRenderer(view, view._renderer, el, Renderer);\n view._handler = initializeHandler(view, view._handler, el, Handler);\n view._redraw = true; // initialize signal bindings\n\n if (el && config !== 'none') {\n elBind = elBind ? view._elBind = lookup(view, elBind, true) : el.appendChild(element('form', {\n 'class': 'vega-bindings'\n }));\n\n view._bind.forEach(_ => {\n if (_.param.element && config !== 'container') {\n _.element = lookup(view, _.param.element, !!_.param.input);\n }\n });\n\n view._bind.forEach(_ => {\n bind(view, _.element || elBind, _);\n });\n }\n\n return view;\n}\n\nfunction lookup(view, el, clear) {\n if (typeof el === 'string') {\n if (typeof document !== 'undefined') {\n el = document.querySelector(el);\n\n if (!el) {\n view.error('Signal bind element not found: ' + el);\n return null;\n }\n } else {\n view.error('DOM document instance not found.');\n return null;\n }\n }\n\n if (el && clear) {\n try {\n el.innerHTML = '';\n } catch (e) {\n el = null;\n view.error(e);\n }\n }\n\n return el;\n}\n\nconst number = _ => +_ || 0;\n\nconst paddingObject = _ => ({\n top: _,\n bottom: _,\n left: _,\n right: _\n});\n\nfunction padding (_) {\n return isObject(_) ? {\n top: number(_.top),\n bottom: number(_.bottom),\n left: number(_.left),\n right: number(_.right)\n } : paddingObject(number(_));\n}\n\n/**\n * Render the current scene in a headless fashion.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A Promise that resolves to a renderer.\n */\n\nasync function renderHeadless (view, type, scaleFactor, opt) {\n const module = renderModule(type),\n ctr = module && module.headless;\n if (!ctr) error('Unrecognized renderer type: ' + type);\n await view.runAsync();\n return initializeRenderer(view, null, null, ctr, scaleFactor, opt).renderAsync(view._scenegraph.root);\n}\n\n/**\n * Produce an image URL for the visualization. Depending on the type\n * parameter, the generated URL contains data for either a PNG or SVG image.\n * The URL can be used (for example) to download images of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @param {string} type - The image type. One of 'svg', 'png' or 'canvas'.\n * The 'canvas' and 'png' types are synonyms for a PNG image.\n * @return {Promise} - A promise that resolves to an image URL.\n */\n\nasync function renderToImageURL (type, scaleFactor) {\n if (type !== RenderType.Canvas && type !== RenderType.SVG && type !== RenderType.PNG) {\n error('Unrecognized image type: ' + type);\n }\n\n const r = await renderHeadless(this, type, scaleFactor);\n return type === RenderType.SVG ? toBlobURL(r.svg(), 'image/svg+xml') : r.canvas().toDataURL('image/png');\n}\n\nfunction toBlobURL(data, mime) {\n const blob = new Blob([data], {\n type: mime\n });\n return window.URL.createObjectURL(blob);\n}\n\n/**\n * Produce a Canvas instance containing a rendered visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to a Canvas instance.\n */\n\nasync function renderToCanvas (scaleFactor, opt) {\n const r = await renderHeadless(this, RenderType.Canvas, scaleFactor, opt);\n return r.canvas();\n}\n\n/**\n * Produce a rendered SVG string of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to an SVG string.\n */\n\nasync function renderToSVG (scaleFactor) {\n const r = await renderHeadless(this, RenderType.SVG, scaleFactor);\n return r.svg();\n}\n\nfunction runtime (view, spec, expr) {\n return context(view, transforms, functionContext, expr).parse(spec);\n}\n\nfunction scale(name) {\n var scales = this._runtime.scales;\n\n if (!hasOwnProperty(scales, name)) {\n error('Unrecognized scale or projection: ' + name);\n }\n\n return scales[name].value;\n}\n\nvar Width = 'width',\n Height = 'height',\n Padding = 'padding',\n Skip = {\n skip: true\n};\nfunction viewWidth(view, width) {\n var a = view.autosize(),\n p = view.padding();\n return width - (a && a.contains === Padding ? p.left + p.right : 0);\n}\nfunction viewHeight(view, height) {\n var a = view.autosize(),\n p = view.padding();\n return height - (a && a.contains === Padding ? p.top + p.bottom : 0);\n}\nfunction initializeResize(view) {\n var s = view._signals,\n w = s[Width],\n h = s[Height],\n p = s[Padding];\n\n function resetSize() {\n view._autosize = view._resize = 1;\n } // respond to width signal\n\n\n view._resizeWidth = view.add(null, _ => {\n view._width = _.size;\n view._viewWidth = viewWidth(view, _.size);\n resetSize();\n }, {\n size: w\n }); // respond to height signal\n\n view._resizeHeight = view.add(null, _ => {\n view._height = _.size;\n view._viewHeight = viewHeight(view, _.size);\n resetSize();\n }, {\n size: h\n }); // respond to padding signal\n\n const resizePadding = view.add(null, resetSize, {\n pad: p\n }); // set rank to run immediately after source signal\n\n view._resizeWidth.rank = w.rank + 1;\n view._resizeHeight.rank = h.rank + 1;\n resizePadding.rank = p.rank + 1;\n}\nfunction resizeView(viewWidth, viewHeight, width, height, origin, auto) {\n this.runAfter(view => {\n let rerun = 0; // reset autosize flag\n\n view._autosize = 0; // width value changed: update signal, skip resize op\n\n if (view.width() !== width) {\n rerun = 1;\n view.signal(Width, width, Skip); // set width, skip update calc\n\n view._resizeWidth.skip(true); // skip width resize handler\n\n } // height value changed: update signal, skip resize op\n\n\n if (view.height() !== height) {\n rerun = 1;\n view.signal(Height, height, Skip); // set height, skip update calc\n\n view._resizeHeight.skip(true); // skip height resize handler\n\n } // view width changed: update view property, set resize flag\n\n\n if (view._viewWidth !== viewWidth) {\n view._resize = 1;\n view._viewWidth = viewWidth;\n } // view height changed: update view property, set resize flag\n\n\n if (view._viewHeight !== viewHeight) {\n view._resize = 1;\n view._viewHeight = viewHeight;\n } // origin changed: update view property, set resize flag\n\n\n if (view._origin[0] !== origin[0] || view._origin[1] !== origin[1]) {\n view._resize = 1;\n view._origin = origin;\n } // run dataflow on width/height signal change\n\n\n if (rerun) view.run('enter');\n if (auto) view.runAfter(v => v.resize());\n }, false, 1);\n}\n\n/**\n * Get the current view state, consisting of signal values and/or data sets.\n * @param {object} [options] - Options flags indicating which state to export.\n * If unspecified, all signals and data sets will be exported.\n * @param {function(string, Operator):boolean} [options.signals] - Optional\n * predicate function for testing if a signal should be included in the\n * exported state. If unspecified, all signals will be included, except for\n * those named 'parent' or those which refer to a Transform value.\n * @param {function(string, object):boolean} [options.data] - Optional\n * predicate function for testing if a data set's input should be included\n * in the exported state. If unspecified, all data sets that have been\n * explicitly modified will be included.\n * @param {boolean} [options.recurse=true] - Flag indicating if the exported\n * state should recursively include state from group mark sub-contexts.\n * @return {object} - An object containing the exported state values.\n */\n\nfunction getState(options) {\n return this._runtime.getState(options || {\n data: dataTest,\n signals: signalTest,\n recurse: true\n });\n}\n\nfunction dataTest(name, data) {\n return data.modified && isArray(data.input.value) && name.indexOf('_:vega:_');\n}\n\nfunction signalTest(name, op) {\n return !(name === 'parent' || op instanceof transforms.proxy);\n}\n/**\n * Sets the current view state and updates the view by invoking run.\n * @param {object} state - A state object containing signal and/or\n * data set values, following the format used by the getState method.\n * @return {View} - This view instance.\n */\n\n\nfunction setState(state) {\n this.runAsync(null, v => {\n v._trigger = false;\n\n v._runtime.setState(state);\n }, v => {\n v._trigger = true;\n });\n return this;\n}\n\nfunction timer (callback, delay) {\n function tick(elapsed) {\n callback({\n timestamp: Date.now(),\n elapsed: elapsed\n });\n }\n\n this._timers.push(interval(tick, delay));\n}\n\nfunction defaultTooltip (handler, event, item, value) {\n const el = handler.element();\n if (el) el.setAttribute('title', formatTooltip(value));\n}\n\nfunction formatTooltip(value) {\n return value == null ? '' : isArray(value) ? formatArray(value) : isObject(value) && !isDate(value) ? formatObject(value) : value + '';\n}\n\nfunction formatObject(obj) {\n return Object.keys(obj).map(key => {\n const v = obj[key];\n return key + ': ' + (isArray(v) ? formatArray(v) : formatValue(v));\n }).join('\\n');\n}\n\nfunction formatArray(value) {\n return '[' + value.map(formatValue).join(', ') + ']';\n}\n\nfunction formatValue(value) {\n return isArray(value) ? '[\\u2026]' : isObject(value) && !isDate(value) ? '{\\u2026}' : value;\n}\n\n/**\n * Create a new View instance from a Vega dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be performed upon dataflow runs.\n * @constructor\n * @param {object} spec - The Vega dataflow runtime specification.\n */\n\nfunction View(spec, options) {\n const view = this;\n options = options || {};\n Dataflow.call(view);\n if (options.loader) view.loader(options.loader);\n if (options.logger) view.logger(options.logger);\n if (options.logLevel != null) view.logLevel(options.logLevel);\n\n if (options.locale || spec.locale) {\n const loc = extend({}, spec.locale, options.locale);\n view.locale(locale(loc.number, loc.time));\n }\n\n view._el = null;\n view._elBind = null;\n view._renderType = options.renderer || RenderType.Canvas;\n view._scenegraph = new Scenegraph();\n const root = view._scenegraph.root; // initialize renderer, handler and event management\n\n view._renderer = null;\n view._tooltip = options.tooltip || defaultTooltip, view._redraw = true;\n view._handler = new CanvasHandler().scene(root);\n view._globalCursor = false;\n view._preventDefault = false;\n view._timers = [];\n view._eventListeners = [];\n view._resizeListeners = []; // initialize event configuration\n\n view._eventConfig = initializeEventConfig(spec.eventConfig);\n view.globalCursor(view._eventConfig.globalCursor); // initialize dataflow graph\n\n const ctx = runtime(view, spec, options.expr);\n view._runtime = ctx;\n view._signals = ctx.signals;\n view._bind = (spec.bindings || []).map(_ => ({\n state: null,\n param: extend({}, _)\n })); // initialize scenegraph\n\n if (ctx.root) ctx.root.set(root);\n root.source = ctx.data.root.input;\n view.pulse(ctx.data.root.input, view.changeset().insert(root.items)); // initialize view size\n\n view._width = view.width();\n view._height = view.height();\n view._viewWidth = viewWidth(view, view._width);\n view._viewHeight = viewHeight(view, view._height);\n view._origin = [0, 0];\n view._resize = 0;\n view._autosize = 1;\n initializeResize(view); // initialize background color\n\n background(view); // initialize cursor\n\n cursor(view); // initialize view description\n\n view.description(spec.description); // initialize hover proessing, if requested\n\n if (options.hover) view.hover(); // initialize DOM container(s) and renderer\n\n if (options.container) view.initialize(options.container, options.bind);\n}\n\nfunction lookupSignal(view, name) {\n return hasOwnProperty(view._signals, name) ? view._signals[name] : error('Unrecognized signal name: ' + stringValue(name));\n}\n\nfunction findOperatorHandler(op, handler) {\n const h = (op._targets || []).filter(op => op._update && op._update.handler === handler);\n return h.length ? h[0] : null;\n}\n\nfunction addOperatorListener(view, name, op, handler) {\n let h = findOperatorHandler(op, handler);\n\n if (!h) {\n h = trap(view, () => handler(name, op.value));\n h.handler = handler;\n view.on(op, null, h);\n }\n\n return view;\n}\n\nfunction removeOperatorListener(view, op, handler) {\n const h = findOperatorHandler(op, handler);\n if (h) op._targets.remove(h);\n return view;\n}\n\ninherits(View, Dataflow, {\n // -- DATAFLOW / RENDERING ----\n async evaluate(encode, prerun, postrun) {\n // evaluate dataflow and prerun\n await Dataflow.prototype.evaluate.call(this, encode, prerun); // render as needed\n\n if (this._redraw || this._resize) {\n try {\n if (this._renderer) {\n if (this._resize) {\n this._resize = 0;\n resizeRenderer(this);\n }\n\n await this._renderer.renderAsync(this._scenegraph.root);\n }\n\n this._redraw = false;\n } catch (e) {\n this.error(e);\n }\n } // evaluate postrun\n\n\n if (postrun) asyncCallback(this, postrun);\n return this;\n },\n\n dirty(item) {\n this._redraw = true;\n this._renderer && this._renderer.dirty(item);\n },\n\n // -- GET / SET ----\n description(text) {\n if (arguments.length) {\n const desc = text != null ? text + '' : null;\n if (desc !== this._desc) ariaLabel(this._el, this._desc = desc);\n return this;\n }\n\n return this._desc;\n },\n\n container() {\n return this._el;\n },\n\n scenegraph() {\n return this._scenegraph;\n },\n\n origin() {\n return this._origin.slice();\n },\n\n signal(name, value, options) {\n const op = lookupSignal(this, name);\n return arguments.length === 1 ? op.value : this.update(op, value, options);\n },\n\n width(_) {\n return arguments.length ? this.signal('width', _) : this.signal('width');\n },\n\n height(_) {\n return arguments.length ? this.signal('height', _) : this.signal('height');\n },\n\n padding(_) {\n return arguments.length ? this.signal('padding', padding(_)) : padding(this.signal('padding'));\n },\n\n autosize(_) {\n return arguments.length ? this.signal('autosize', _) : this.signal('autosize');\n },\n\n background(_) {\n return arguments.length ? this.signal('background', _) : this.signal('background');\n },\n\n renderer(type) {\n if (!arguments.length) return this._renderType;\n if (!renderModule(type)) error('Unrecognized renderer type: ' + type);\n\n if (type !== this._renderType) {\n this._renderType = type;\n\n this._resetRenderer();\n }\n\n return this;\n },\n\n tooltip(handler) {\n if (!arguments.length) return this._tooltip;\n\n if (handler !== this._tooltip) {\n this._tooltip = handler;\n\n this._resetRenderer();\n }\n\n return this;\n },\n\n loader(loader) {\n if (!arguments.length) return this._loader;\n\n if (loader !== this._loader) {\n Dataflow.prototype.loader.call(this, loader);\n\n this._resetRenderer();\n }\n\n return this;\n },\n\n resize() {\n // set flag to perform autosize\n this._autosize = 1; // touch autosize signal to ensure top-level ViewLayout runs\n\n return this.touch(lookupSignal(this, 'autosize'));\n },\n\n _resetRenderer() {\n if (this._renderer) {\n this._renderer = null;\n this.initialize(this._el, this._elBind);\n }\n },\n\n // -- SIZING ----\n _resizeView: resizeView,\n\n // -- EVENT HANDLING ----\n addEventListener(type, handler, options) {\n let callback = handler;\n\n if (!(options && options.trap === false)) {\n // wrap callback in error handler\n callback = trap(this, handler);\n callback.raw = handler;\n }\n\n this._handler.on(type, callback);\n\n return this;\n },\n\n removeEventListener(type, handler) {\n var handlers = this._handler.handlers(type),\n i = handlers.length,\n h,\n t; // search registered handlers, remove if match found\n\n\n while (--i >= 0) {\n t = handlers[i].type;\n h = handlers[i].handler;\n\n if (type === t && (handler === h || handler === h.raw)) {\n this._handler.off(t, h);\n\n break;\n }\n }\n\n return this;\n },\n\n addResizeListener(handler) {\n const l = this._resizeListeners;\n\n if (l.indexOf(handler) < 0) {\n // add handler if it isn't already registered\n // note: error trapping handled elsewhere, so\n // no need to wrap handlers here\n l.push(handler);\n }\n\n return this;\n },\n\n removeResizeListener(handler) {\n var l = this._resizeListeners,\n i = l.indexOf(handler);\n\n if (i >= 0) {\n l.splice(i, 1);\n }\n\n return this;\n },\n\n addSignalListener(name, handler) {\n return addOperatorListener(this, name, lookupSignal(this, name), handler);\n },\n\n removeSignalListener(name, handler) {\n return removeOperatorListener(this, lookupSignal(this, name), handler);\n },\n\n addDataListener(name, handler) {\n return addOperatorListener(this, name, dataref(this, name).values, handler);\n },\n\n removeDataListener(name, handler) {\n return removeOperatorListener(this, dataref(this, name).values, handler);\n },\n\n globalCursor(_) {\n if (arguments.length) {\n if (this._globalCursor !== !!_) {\n const prev = setCursor(this, null); // clear previous cursor\n\n this._globalCursor = !!_;\n if (prev) setCursor(this, prev); // swap cursor\n }\n\n return this;\n } else {\n return this._globalCursor;\n }\n },\n\n preventDefault(_) {\n if (arguments.length) {\n this._preventDefault = _;\n return this;\n } else {\n return this._preventDefault;\n }\n },\n\n timer,\n events,\n finalize,\n hover,\n // -- DATA ----\n data,\n change,\n insert,\n remove,\n // -- SCALES --\n scale,\n // -- INITIALIZATION ----\n initialize,\n // -- HEADLESS RENDERING ----\n toImageURL: renderToImageURL,\n toCanvas: renderToCanvas,\n toSVG: renderToSVG,\n // -- SAVE / RESTORE STATE ----\n getState,\n setState\n});\n\nexport { View };\n","import {Timer, now} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer, total = delay;\n if (delay == null) return t.restart(callback, delay, time), t;\n t._restart = t.restart;\n t.restart = function(callback, delay, time) {\n delay = +delay, time = time == null ? now() : +time;\n t._restart(function tick(elapsed) {\n elapsed += total;\n t._restart(tick, total += delay, time);\n callback(elapsed);\n }, delay, time);\n }\n t.restart(callback, delay, time);\n return t;\n}\n","const VIEW = 'view',\n LBRACK = '[',\n RBRACK = ']',\n LBRACE = '{',\n RBRACE = '}',\n COLON = ':',\n COMMA = ',',\n NAME = '@',\n GT = '>',\n ILLEGAL = /[[\\]{}]/,\n DEFAULT_MARKS = {\n '*': 1,\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n};\nlet DEFAULT_SOURCE, MARKS;\n/**\n * Parse an event selector string.\n * Returns an array of event stream definitions.\n */\n\nfunction eventSelector (selector, source, marks) {\n DEFAULT_SOURCE = source || VIEW;\n MARKS = marks || DEFAULT_MARKS;\n return parseMerge(selector.trim()).map(parseSelector);\n}\n\nfunction isMarkType(type) {\n return MARKS[type];\n}\n\nfunction find(s, i, endChar, pushChar, popChar) {\n const n = s.length;\n let count = 0,\n c;\n\n for (; i < n; ++i) {\n c = s[i];\n if (!count && c === endChar) return i;else if (popChar && popChar.indexOf(c) >= 0) --count;else if (pushChar && pushChar.indexOf(c) >= 0) ++count;\n }\n\n return i;\n}\n\nfunction parseMerge(s) {\n const output = [],\n n = s.length;\n let start = 0,\n i = 0;\n\n while (i < n) {\n i = find(s, i, COMMA, LBRACK + LBRACE, RBRACK + RBRACE);\n output.push(s.substring(start, i).trim());\n start = ++i;\n }\n\n if (output.length === 0) {\n throw 'Empty event selector: ' + s;\n }\n\n return output;\n}\n\nfunction parseSelector(s) {\n return s[0] === '[' ? parseBetween(s) : parseStream(s);\n}\n\nfunction parseBetween(s) {\n const n = s.length;\n let i = 1,\n b;\n i = find(s, i, RBRACK, LBRACK, RBRACK);\n\n if (i === n) {\n throw 'Empty between selector: ' + s;\n }\n\n b = parseMerge(s.substring(1, i));\n\n if (b.length !== 2) {\n throw 'Between selector must have two elements: ' + s;\n }\n\n s = s.slice(i + 1).trim();\n\n if (s[0] !== GT) {\n throw 'Expected \\'>\\' after between selector: ' + s;\n }\n\n b = b.map(parseSelector);\n const stream = parseSelector(s.slice(1).trim());\n\n if (stream.between) {\n return {\n between: b,\n stream: stream\n };\n } else {\n stream.between = b;\n }\n\n return stream;\n}\n\nfunction parseStream(s) {\n const stream = {\n source: DEFAULT_SOURCE\n },\n source = [];\n let throttle = [0, 0],\n markname = 0,\n start = 0,\n n = s.length,\n i = 0,\n j,\n filter; // extract throttle from end\n\n if (s[n - 1] === RBRACE) {\n i = s.lastIndexOf(LBRACE);\n\n if (i >= 0) {\n try {\n throttle = parseThrottle(s.substring(i + 1, n - 1));\n } catch (e) {\n throw 'Invalid throttle specification: ' + s;\n }\n\n s = s.slice(0, i).trim();\n n = s.length;\n } else throw 'Unmatched right brace: ' + s;\n\n i = 0;\n }\n\n if (!n) throw s; // set name flag based on first char\n\n if (s[0] === NAME) markname = ++i; // extract first part of multi-part stream selector\n\n j = find(s, i, COLON);\n\n if (j < n) {\n source.push(s.substring(start, j).trim());\n start = i = ++j;\n } // extract remaining part of stream selector\n\n\n i = find(s, i, LBRACK);\n\n if (i === n) {\n source.push(s.substring(start, n).trim());\n } else {\n source.push(s.substring(start, i).trim());\n filter = [];\n start = ++i;\n if (start === n) throw 'Unmatched left bracket: ' + s;\n } // extract filters\n\n\n while (i < n) {\n i = find(s, i, RBRACK);\n if (i === n) throw 'Unmatched left bracket: ' + s;\n filter.push(s.substring(start, i).trim());\n if (i < n - 1 && s[++i] !== LBRACK) throw 'Expected left bracket: ' + s;\n start = ++i;\n } // marshall event stream specification\n\n\n if (!(n = source.length) || ILLEGAL.test(source[n - 1])) {\n throw 'Invalid event selector: ' + s;\n }\n\n if (n > 1) {\n stream.type = source[1];\n\n if (markname) {\n stream.markname = source[0].slice(1);\n } else if (isMarkType(source[0])) {\n stream.marktype = source[0];\n } else {\n stream.source = source[0];\n }\n } else {\n stream.type = source[0];\n }\n\n if (stream.type.slice(-1) === '!') {\n stream.consume = true;\n stream.type = stream.type.slice(0, -1);\n }\n\n if (filter != null) stream.filter = filter;\n if (throttle[0]) stream.throttle = throttle[0];\n if (throttle[1]) stream.debounce = throttle[1];\n return stream;\n}\n\nfunction parseThrottle(s) {\n const a = s.split(COMMA);\n if (!s.length || a.length > 2) throw s;\n return a.map(_ => {\n const x = +_;\n if (x !== x) throw s;\n return x;\n });\n}\n\nexport { eventSelector as selector };\n","import { isObject, isArray, extend, hasOwnProperty, array, stringValue, peek, isString, error, splitAccessPath, mergeConfig } from 'vega-util';\nimport { parseExpression } from 'vega-functions';\nimport { selector } from 'vega-event-selector';\nimport { isValidScaleType, isDiscrete, isQuantile, isDiscretizing, isContinuous } from 'vega-scale';\nimport { definition as definition$1 } from 'vega-dataflow';\n\nfunction parseAutosize (spec) {\n return isObject(spec) ? spec : {\n type: spec || 'pad'\n };\n}\n\nconst number = _ => +_ || 0;\n\nconst paddingObject = _ => ({\n top: _,\n bottom: _,\n left: _,\n right: _\n});\n\nfunction parsePadding (spec) {\n return !isObject(spec) ? paddingObject(number(spec)) : spec.signal ? spec : {\n top: number(spec.top),\n bottom: number(spec.bottom),\n left: number(spec.left),\n right: number(spec.right)\n };\n}\n\nconst encoder = _ => isObject(_) && !isArray(_) ? extend({}, _) : {\n value: _\n};\nfunction addEncode(object, name, value, set) {\n if (value != null) {\n const isEncoder = isObject(value) && !isArray(value) || isArray(value) && value.length && isObject(value[0]); // Always assign signal to update, even if the signal is from the enter block\n\n if (isEncoder) {\n object.update[name] = value;\n } else {\n object[set || 'enter'][name] = {\n value: value\n };\n }\n\n return 1;\n } else {\n return 0;\n }\n}\nfunction addEncoders(object, enter, update) {\n for (const name in enter) {\n addEncode(object, name, enter[name]);\n }\n\n for (const name in update) {\n addEncode(object, name, update[name], 'update');\n }\n}\nfunction extendEncode(encode, extra, skip) {\n for (const name in extra) {\n if (skip && hasOwnProperty(skip, name)) continue;\n encode[name] = extend(encode[name] || {}, extra[name]);\n }\n\n return encode;\n}\nfunction has(key, encode) {\n return encode && (encode.enter && encode.enter[key] || encode.update && encode.update[key]);\n}\n\nconst MarkRole = 'mark';\nconst FrameRole = 'frame';\nconst ScopeRole = 'scope';\nconst AxisRole = 'axis';\nconst AxisDomainRole = 'axis-domain';\nconst AxisGridRole = 'axis-grid';\nconst AxisLabelRole = 'axis-label';\nconst AxisTickRole = 'axis-tick';\nconst AxisTitleRole = 'axis-title';\nconst LegendRole = 'legend';\nconst LegendBandRole = 'legend-band';\nconst LegendEntryRole = 'legend-entry';\nconst LegendGradientRole = 'legend-gradient';\nconst LegendLabelRole = 'legend-label';\nconst LegendSymbolRole = 'legend-symbol';\nconst LegendTitleRole = 'legend-title';\nconst TitleRole = 'title';\nconst TitleTextRole = 'title-text';\nconst TitleSubtitleRole = 'title-subtitle';\n\nfunction applyDefaults (encode, type, role, style, config) {\n const defaults = {},\n enter = {};\n let update, key, skip, props; // if text mark, apply global lineBreak settings (#2370)\n\n key = 'lineBreak';\n\n if (type === 'text' && config[key] != null && !has(key, encode)) {\n applyDefault(defaults, key, config[key]);\n } // ignore legend and axis roles\n\n\n if (role == 'legend' || String(role).startsWith('axis')) {\n role = null;\n } // resolve mark config\n\n\n props = role === FrameRole ? config.group : role === MarkRole ? extend({}, config.mark, config[type]) : null;\n\n for (key in props) {\n // do not apply defaults if relevant fields are defined\n skip = has(key, encode) || (key === 'fill' || key === 'stroke') && (has('fill', encode) || has('stroke', encode));\n if (!skip) applyDefault(defaults, key, props[key]);\n } // resolve styles, apply with increasing precedence\n\n\n array(style).forEach(name => {\n const props = config.style && config.style[name];\n\n for (const key in props) {\n if (!has(key, encode)) {\n applyDefault(defaults, key, props[key]);\n }\n }\n });\n encode = extend({}, encode); // defensive copy\n\n for (key in defaults) {\n props = defaults[key];\n\n if (props.signal) {\n (update = update || {})[key] = props;\n } else {\n enter[key] = props;\n }\n }\n\n encode.enter = extend(enter, encode.enter);\n if (update) encode.update = extend(update, encode.update);\n return encode;\n}\n\nfunction applyDefault(defaults, key, value) {\n defaults[key] = value && value.signal ? {\n signal: value.signal\n } : {\n value: value\n };\n}\n\nconst scaleRef = scale => isString(scale) ? stringValue(scale) : scale.signal ? `(${scale.signal})` : field(scale);\n\nfunction entry$1(enc) {\n if (enc.gradient != null) {\n return gradient(enc);\n }\n\n let value = enc.signal ? `(${enc.signal})` : enc.color ? color(enc.color) : enc.field != null ? field(enc.field) : enc.value !== undefined ? stringValue(enc.value) : undefined;\n\n if (enc.scale != null) {\n value = scale(enc, value);\n }\n\n if (value === undefined) {\n value = null;\n }\n\n if (enc.exponent != null) {\n value = `pow(${value},${property(enc.exponent)})`;\n }\n\n if (enc.mult != null) {\n value += `*${property(enc.mult)}`;\n }\n\n if (enc.offset != null) {\n value += `+${property(enc.offset)}`;\n }\n\n if (enc.round) {\n value = `round(${value})`;\n }\n\n return value;\n}\n\nconst _color = (type, x, y, z) => `(${type}(${[x, y, z].map(entry$1).join(',')})+'')`;\n\nfunction color(enc) {\n return enc.c ? _color('hcl', enc.h, enc.c, enc.l) : enc.h || enc.s ? _color('hsl', enc.h, enc.s, enc.l) : enc.l || enc.a ? _color('lab', enc.l, enc.a, enc.b) : enc.r || enc.g || enc.b ? _color('rgb', enc.r, enc.g, enc.b) : null;\n}\n\nfunction gradient(enc) {\n // map undefined to null; expression lang does not allow undefined\n const args = [enc.start, enc.stop, enc.count].map(_ => _ == null ? null : stringValue(_)); // trim null inputs from the end\n\n while (args.length && peek(args) == null) args.pop();\n\n args.unshift(scaleRef(enc.gradient));\n return `gradient(${args.join(',')})`;\n}\n\nfunction property(property) {\n return isObject(property) ? '(' + entry$1(property) + ')' : property;\n}\n\nfunction field(ref) {\n return resolveField(isObject(ref) ? ref : {\n datum: ref\n });\n}\n\nfunction resolveField(ref) {\n let object, level, field;\n\n if (ref.signal) {\n object = 'datum';\n field = ref.signal;\n } else if (ref.group || ref.parent) {\n level = Math.max(1, ref.level || 1);\n object = 'item';\n\n while (level-- > 0) {\n object += '.mark.group';\n }\n\n if (ref.parent) {\n field = ref.parent;\n object += '.datum';\n } else {\n field = ref.group;\n }\n } else if (ref.datum) {\n object = 'datum';\n field = ref.datum;\n } else {\n error('Invalid field reference: ' + stringValue(ref));\n }\n\n if (!ref.signal) {\n field = isString(field) ? splitAccessPath(field).map(stringValue).join('][') : resolveField(field);\n }\n\n return object + '[' + field + ']';\n}\n\nfunction scale(enc, value) {\n const scale = scaleRef(enc.scale);\n\n if (enc.range != null) {\n // pull value from scale range\n value = `lerp(_range(${scale}), ${+enc.range})`;\n } else {\n // run value through scale and/or pull scale bandwidth\n if (value !== undefined) value = `_scale(${scale}, ${value})`;\n\n if (enc.band) {\n value = (value ? value + '+' : '') + `_bandwidth(${scale})` + (+enc.band === 1 ? '' : '*' + property(enc.band));\n\n if (enc.extra) {\n // include logic to handle extraneous elements\n value = `(datum.extra ? _scale(${scale}, datum.extra.value) : ${value})`;\n }\n }\n\n if (value == null) value = '0';\n }\n\n return value;\n}\n\nfunction rule (enc) {\n let code = '';\n enc.forEach(rule => {\n const value = entry$1(rule);\n code += rule.test ? `(${rule.test})?${value}:` : value;\n }); // if no else clause, terminate with null (#1366)\n\n if (peek(code) === ':') {\n code += 'null';\n }\n\n return code;\n}\n\nfunction parseEncode (encode, type, role, style, scope, params) {\n const enc = {};\n params = params || {};\n params.encoders = {\n $encode: enc\n };\n encode = applyDefaults(encode, type, role, style, scope.config);\n\n for (const key in encode) {\n enc[key] = parseBlock(encode[key], type, params, scope);\n }\n\n return params;\n}\n\nfunction parseBlock(block, marktype, params, scope) {\n const channels = {},\n fields = {};\n\n for (const name in block) {\n if (block[name] != null) {\n // skip any null entries\n channels[name] = parse$1(expr(block[name]), scope, params, fields);\n }\n }\n\n return {\n $expr: {\n marktype,\n channels\n },\n $fields: Object.keys(fields),\n $output: Object.keys(block)\n };\n}\n\nfunction expr(enc) {\n return isArray(enc) ? rule(enc) : entry$1(enc);\n}\n\nfunction parse$1(code, scope, params, fields) {\n const expr = parseExpression(code, scope);\n expr.$fields.forEach(name => fields[name] = 1);\n extend(params, expr.$params);\n return expr.$expr;\n}\n\nconst OUTER = 'outer',\n OUTER_INVALID = ['value', 'update', 'init', 'react', 'bind'];\n\nfunction outerError(prefix, name) {\n error(prefix + ' for \"outer\" push: ' + stringValue(name));\n}\n\nfunction parseSignal (signal, scope) {\n const name = signal.name;\n\n if (signal.push === OUTER) {\n // signal must already be defined, raise error if not\n if (!scope.signals[name]) outerError('No prior signal definition', name); // signal push must not use properties reserved for standard definition\n\n OUTER_INVALID.forEach(prop => {\n if (signal[prop] !== undefined) outerError('Invalid property ', prop);\n });\n } else {\n // define a new signal in the current scope\n const op = scope.addSignal(name, signal.value);\n if (signal.react === false) op.react = false;\n if (signal.bind) scope.addBinding(name, signal.bind);\n }\n}\n\nfunction Entry(type, value, params, parent) {\n this.id = -1;\n this.type = type;\n this.value = value;\n this.params = params;\n if (parent) this.parent = parent;\n}\nfunction entry(type, value, params, parent) {\n return new Entry(type, value, params, parent);\n}\nfunction operator(value, params) {\n return entry('operator', value, params);\n} // -----\n\nfunction ref(op) {\n const ref = {\n $ref: op.id\n }; // if operator not yet registered, cache ref to resolve later\n\n if (op.id < 0) (op.refs = op.refs || []).push(ref);\n return ref;\n}\nfunction fieldRef$1(field, name) {\n return name ? {\n $field: field,\n $name: name\n } : {\n $field: field\n };\n}\nconst keyFieldRef = fieldRef$1('key');\nfunction compareRef(fields, orders) {\n return {\n $compare: fields,\n $order: orders\n };\n}\nfunction keyRef(fields, flat) {\n const ref = {\n $key: fields\n };\n if (flat) ref.$flat = true;\n return ref;\n} // -----\n\nconst Ascending = 'ascending';\nconst Descending = 'descending';\nfunction sortKey(sort) {\n return !isObject(sort) ? '' : (sort.order === Descending ? '-' : '+') + aggrField(sort.op, sort.field);\n}\nfunction aggrField(op, field) {\n return (op && op.signal ? '$' + op.signal : op || '') + (op && field ? '_' : '') + (field && field.signal ? '$' + field.signal : field || '');\n} // -----\n\nconst Scope$1 = 'scope';\nconst View = 'view';\nfunction isSignal(_) {\n return _ && _.signal;\n}\nfunction isExpr$1(_) {\n return _ && _.expr;\n}\nfunction hasSignal(_) {\n if (isSignal(_)) return true;\n if (isObject(_)) for (const key in _) {\n if (hasSignal(_[key])) return true;\n }\n return false;\n}\nfunction value(specValue, defaultValue) {\n return specValue != null ? specValue : defaultValue;\n}\nfunction deref(v) {\n return v && v.signal || v;\n}\n\nconst Timer = 'timer';\nfunction parseStream(stream, scope) {\n const method = stream.merge ? mergeStream : stream.stream ? nestedStream : stream.type ? eventStream : error('Invalid stream specification: ' + stringValue(stream));\n return method(stream, scope);\n}\n\nfunction eventSource(source) {\n return source === Scope$1 ? View : source || View;\n}\n\nfunction mergeStream(stream, scope) {\n const list = stream.merge.map(s => parseStream(s, scope)),\n entry = streamParameters({\n merge: list\n }, stream, scope);\n return scope.addStream(entry).id;\n}\n\nfunction nestedStream(stream, scope) {\n const id = parseStream(stream.stream, scope),\n entry = streamParameters({\n stream: id\n }, stream, scope);\n return scope.addStream(entry).id;\n}\n\nfunction eventStream(stream, scope) {\n let id;\n\n if (stream.type === Timer) {\n id = scope.event(Timer, stream.throttle);\n stream = {\n between: stream.between,\n filter: stream.filter\n };\n } else {\n id = scope.event(eventSource(stream.source), stream.type);\n }\n\n const entry = streamParameters({\n stream: id\n }, stream, scope);\n return Object.keys(entry).length === 1 ? id : scope.addStream(entry).id;\n}\n\nfunction streamParameters(entry, stream, scope) {\n let param = stream.between;\n\n if (param) {\n if (param.length !== 2) {\n error('Stream \"between\" parameter must have 2 entries: ' + stringValue(stream));\n }\n\n entry.between = [parseStream(param[0], scope), parseStream(param[1], scope)];\n }\n\n param = stream.filter ? [].concat(stream.filter) : [];\n\n if (stream.marktype || stream.markname || stream.markrole) {\n // add filter for mark type, name and/or role\n param.push(filterMark(stream.marktype, stream.markname, stream.markrole));\n }\n\n if (stream.source === Scope$1) {\n // add filter to limit events from sub-scope only\n param.push('inScope(event.item)');\n }\n\n if (param.length) {\n entry.filter = parseExpression('(' + param.join(')&&(') + ')', scope).$expr;\n }\n\n if ((param = stream.throttle) != null) {\n entry.throttle = +param;\n }\n\n if ((param = stream.debounce) != null) {\n entry.debounce = +param;\n }\n\n if (stream.consume) {\n entry.consume = true;\n }\n\n return entry;\n}\n\nfunction filterMark(type, name, role) {\n const item = 'event.item';\n return item + (type && type !== '*' ? '&&' + item + '.mark.marktype===\\'' + type + '\\'' : '') + (role ? '&&' + item + '.mark.role===\\'' + role + '\\'' : '') + (name ? '&&' + item + '.mark.name===\\'' + name + '\\'' : '');\n}\n\nconst OP_VALUE_EXPR = {\n code: '_.$value',\n ast: {\n type: 'Identifier',\n value: 'value'\n }\n};\nfunction parseUpdate (spec, scope, target) {\n const encode = spec.encode,\n entry = {\n target: target\n };\n let events = spec.events,\n update = spec.update,\n sources = [];\n\n if (!events) {\n error('Signal update missing events specification.');\n } // interpret as an event selector string\n\n\n if (isString(events)) {\n events = selector(events, scope.isSubscope() ? Scope$1 : View);\n } // separate event streams from signal updates\n\n\n events = array(events).filter(s => s.signal || s.scale ? (sources.push(s), 0) : 1); // merge internal operator listeners\n\n if (sources.length > 1) {\n sources = [mergeSources(sources)];\n } // merge event streams, include as source\n\n\n if (events.length) {\n sources.push(events.length > 1 ? {\n merge: events\n } : events[0]);\n }\n\n if (encode != null) {\n if (update) error('Signal encode and update are mutually exclusive.');\n update = 'encode(item(),' + stringValue(encode) + ')';\n } // resolve update value\n\n\n entry.update = isString(update) ? parseExpression(update, scope) : update.expr != null ? parseExpression(update.expr, scope) : update.value != null ? update.value : update.signal != null ? {\n $expr: OP_VALUE_EXPR,\n $params: {\n $value: scope.signalRef(update.signal)\n }\n } : error('Invalid signal update specification.');\n\n if (spec.force) {\n entry.options = {\n force: true\n };\n }\n\n sources.forEach(source => scope.addUpdate(extend(streamSource(source, scope), entry)));\n}\n\nfunction streamSource(stream, scope) {\n return {\n source: stream.signal ? scope.signalRef(stream.signal) : stream.scale ? scope.scaleRef(stream.scale) : parseStream(stream, scope)\n };\n}\n\nfunction mergeSources(sources) {\n return {\n signal: '[' + sources.map(s => s.scale ? 'scale(\"' + s.scale + '\")' : s.signal) + ']'\n };\n}\n\nfunction parseSignalUpdates (signal, scope) {\n const op = scope.getSignal(signal.name);\n let expr = signal.update;\n\n if (signal.init) {\n if (expr) {\n error('Signals can not include both init and update expressions.');\n } else {\n expr = signal.init;\n op.initonly = true;\n }\n }\n\n if (expr) {\n expr = parseExpression(expr, scope);\n op.update = expr.$expr;\n op.params = expr.$params;\n }\n\n if (signal.on) {\n signal.on.forEach(_ => parseUpdate(_, scope, op.id));\n }\n}\n\nconst transform = name => (params, value, parent) => entry(name, value, params || undefined, parent);\n\nconst Aggregate = transform('aggregate');\nconst AxisTicks = transform('axisticks');\nconst Bound = transform('bound');\nconst Collect = transform('collect');\nconst Compare = transform('compare');\nconst DataJoin = transform('datajoin');\nconst Encode = transform('encode');\nconst Expression = transform('expression');\nconst Facet = transform('facet');\nconst Field = transform('field');\nconst Key = transform('key');\nconst LegendEntries = transform('legendentries');\nconst Load = transform('load');\nconst Mark = transform('mark');\nconst MultiExtent = transform('multiextent');\nconst MultiValues = transform('multivalues');\nconst Overlap = transform('overlap');\nconst Params = transform('params');\nconst PreFacet = transform('prefacet');\nconst Projection = transform('projection');\nconst Proxy = transform('proxy');\nconst Relay = transform('relay');\nconst Render = transform('render');\nconst Scale = transform('scale');\nconst Sieve = transform('sieve');\nconst SortItems = transform('sortitems');\nconst ViewLayout = transform('viewlayout');\nconst Values = transform('values');\n\nlet FIELD_REF_ID = 0;\nconst MULTIDOMAIN_SORT_OPS = {\n min: 'min',\n max: 'max',\n count: 'sum'\n};\nfunction initScale(spec, scope) {\n const type = spec.type || 'linear';\n\n if (!isValidScaleType(type)) {\n error('Unrecognized scale type: ' + stringValue(type));\n }\n\n scope.addScale(spec.name, {\n type,\n domain: undefined\n });\n}\nfunction parseScale(spec, scope) {\n const params = scope.getScale(spec.name).params;\n let key;\n params.domain = parseScaleDomain(spec.domain, spec, scope);\n\n if (spec.range != null) {\n params.range = parseScaleRange(spec, scope, params);\n }\n\n if (spec.interpolate != null) {\n parseScaleInterpolate(spec.interpolate, params);\n }\n\n if (spec.nice != null) {\n params.nice = parseScaleNice(spec.nice);\n }\n\n if (spec.bins != null) {\n params.bins = parseScaleBins(spec.bins, scope);\n }\n\n for (key in spec) {\n if (hasOwnProperty(params, key) || key === 'name') continue;\n params[key] = parseLiteral(spec[key], scope);\n }\n}\n\nfunction parseLiteral(v, scope) {\n return !isObject(v) ? v : v.signal ? scope.signalRef(v.signal) : error('Unsupported object: ' + stringValue(v));\n}\n\nfunction parseArray(v, scope) {\n return v.signal ? scope.signalRef(v.signal) : v.map(v => parseLiteral(v, scope));\n}\n\nfunction dataLookupError(name) {\n error('Can not find data set: ' + stringValue(name));\n} // -- SCALE DOMAIN ----\n\n\nfunction parseScaleDomain(domain, spec, scope) {\n if (!domain) {\n if (spec.domainMin != null || spec.domainMax != null) {\n error('No scale domain defined for domainMin/domainMax to override.');\n }\n\n return; // default domain\n }\n\n return domain.signal ? scope.signalRef(domain.signal) : (isArray(domain) ? explicitDomain : domain.fields ? multipleDomain : singularDomain)(domain, spec, scope);\n}\n\nfunction explicitDomain(domain, spec, scope) {\n return domain.map(v => parseLiteral(v, scope));\n}\n\nfunction singularDomain(domain, spec, scope) {\n const data = scope.getData(domain.data);\n if (!data) dataLookupError(domain.data);\n return isDiscrete(spec.type) ? data.valuesRef(scope, domain.field, parseSort(domain.sort, false)) : isQuantile(spec.type) ? data.domainRef(scope, domain.field) : data.extentRef(scope, domain.field);\n}\n\nfunction multipleDomain(domain, spec, scope) {\n const data = domain.data,\n fields = domain.fields.reduce((dom, d) => {\n d = isString(d) ? {\n data: data,\n field: d\n } : isArray(d) || d.signal ? fieldRef(d, scope) : d;\n dom.push(d);\n return dom;\n }, []);\n return (isDiscrete(spec.type) ? ordinalMultipleDomain : isQuantile(spec.type) ? quantileMultipleDomain : numericMultipleDomain)(domain, scope, fields);\n}\n\nfunction fieldRef(data, scope) {\n const name = '_:vega:_' + FIELD_REF_ID++,\n coll = Collect({});\n\n if (isArray(data)) {\n coll.value = {\n $ingest: data\n };\n } else if (data.signal) {\n const code = 'setdata(' + stringValue(name) + ',' + data.signal + ')';\n coll.params.input = scope.signalRef(code);\n }\n\n scope.addDataPipeline(name, [coll, Sieve({})]);\n return {\n data: name,\n field: 'data'\n };\n}\n\nfunction ordinalMultipleDomain(domain, scope, fields) {\n const sort = parseSort(domain.sort, true);\n let a, v; // get value counts for each domain field\n\n const counts = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.countsRef(scope, f.field, sort);\n }); // aggregate the results from each domain field\n\n const p = {\n groupby: keyFieldRef,\n pulse: counts\n };\n\n if (sort) {\n a = sort.op || 'count';\n v = sort.field ? aggrField(a, sort.field) : 'count';\n p.ops = [MULTIDOMAIN_SORT_OPS[a]];\n p.fields = [scope.fieldRef(v)];\n p.as = [v];\n }\n\n a = scope.add(Aggregate(p)); // collect aggregate output\n\n const c = scope.add(Collect({\n pulse: ref(a)\n })); // extract values for combined domain\n\n v = scope.add(Values({\n field: keyFieldRef,\n sort: scope.sortRef(sort),\n pulse: ref(c)\n }));\n return ref(v);\n}\n\nfunction parseSort(sort, multidomain) {\n if (sort) {\n if (!sort.field && !sort.op) {\n if (isObject(sort)) sort.field = 'key';else sort = {\n field: 'key'\n };\n } else if (!sort.field && sort.op !== 'count') {\n error('No field provided for sort aggregate op: ' + sort.op);\n } else if (multidomain && sort.field) {\n if (sort.op && !MULTIDOMAIN_SORT_OPS[sort.op]) {\n error('Multiple domain scales can not be sorted using ' + sort.op);\n }\n }\n }\n\n return sort;\n}\n\nfunction quantileMultipleDomain(domain, scope, fields) {\n // get value arrays for each domain field\n const values = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.domainRef(scope, f.field);\n }); // combine value arrays\n\n return ref(scope.add(MultiValues({\n values: values\n })));\n}\n\nfunction numericMultipleDomain(domain, scope, fields) {\n // get extents for each domain field\n const extents = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.extentRef(scope, f.field);\n }); // combine extents\n\n return ref(scope.add(MultiExtent({\n extents: extents\n })));\n} // -- SCALE BINS -----\n\n\nfunction parseScaleBins(v, scope) {\n return v.signal || isArray(v) ? parseArray(v, scope) : scope.objectProperty(v);\n} // -- SCALE NICE -----\n\n\nfunction parseScaleNice(nice) {\n return isObject(nice) ? {\n interval: parseLiteral(nice.interval),\n step: parseLiteral(nice.step)\n } : parseLiteral(nice);\n} // -- SCALE INTERPOLATION -----\n\n\nfunction parseScaleInterpolate(interpolate, params) {\n params.interpolate = parseLiteral(interpolate.type || interpolate);\n\n if (interpolate.gamma != null) {\n params.interpolateGamma = parseLiteral(interpolate.gamma);\n }\n} // -- SCALE RANGE -----\n\n\nfunction parseScaleRange(spec, scope, params) {\n const config = scope.config.range;\n let range = spec.range;\n\n if (range.signal) {\n return scope.signalRef(range.signal);\n } else if (isString(range)) {\n if (config && hasOwnProperty(config, range)) {\n spec = extend({}, spec, {\n range: config[range]\n });\n return parseScaleRange(spec, scope, params);\n } else if (range === 'width') {\n range = [0, {\n signal: 'width'\n }];\n } else if (range === 'height') {\n range = isDiscrete(spec.type) ? [0, {\n signal: 'height'\n }] : [{\n signal: 'height'\n }, 0];\n } else {\n error('Unrecognized scale range value: ' + stringValue(range));\n }\n } else if (range.scheme) {\n params.scheme = isArray(range.scheme) ? parseArray(range.scheme, scope) : parseLiteral(range.scheme, scope);\n if (range.extent) params.schemeExtent = parseArray(range.extent, scope);\n if (range.count) params.schemeCount = parseLiteral(range.count, scope);\n return;\n } else if (range.step) {\n params.rangeStep = parseLiteral(range.step, scope);\n return;\n } else if (isDiscrete(spec.type) && !isArray(range)) {\n return parseScaleDomain(range, spec, scope);\n } else if (!isArray(range)) {\n error('Unsupported range type: ' + stringValue(range));\n }\n\n return range.map(v => (isArray(v) ? parseArray : parseLiteral)(v, scope));\n}\n\nfunction parseProjection (proj, scope) {\n const config = scope.config.projection || {},\n params = {};\n\n for (const name in proj) {\n if (name === 'name') continue;\n params[name] = parseParameter$1(proj[name], name, scope);\n } // apply projection defaults from config\n\n\n for (const name in config) {\n if (params[name] == null) {\n params[name] = parseParameter$1(config[name], name, scope);\n }\n }\n\n scope.addProjection(proj.name, params);\n}\n\nfunction parseParameter$1(_, name, scope) {\n return isArray(_) ? _.map(_ => parseParameter$1(_, name, scope)) : !isObject(_) ? _ : _.signal ? scope.signalRef(_.signal) : name === 'fit' ? _ : error('Unsupported parameter object: ' + stringValue(_));\n}\n\nconst Top = 'top';\nconst Left = 'left';\nconst Right = 'right';\nconst Bottom = 'bottom';\nconst Center = 'center';\nconst Vertical = 'vertical';\nconst Start = 'start';\nconst Middle = 'middle';\nconst End = 'end';\nconst Index = 'index';\nconst Label = 'label';\nconst Offset = 'offset';\nconst Perc = 'perc';\nconst Perc2 = 'perc2';\nconst Value = 'value';\nconst GuideLabelStyle = 'guide-label';\nconst GuideTitleStyle = 'guide-title';\nconst GroupTitleStyle = 'group-title';\nconst GroupSubtitleStyle = 'group-subtitle';\nconst Symbols = 'symbol';\nconst Gradient = 'gradient';\nconst Discrete = 'discrete';\nconst Size = 'size';\nconst Shape = 'shape';\nconst Fill = 'fill';\nconst Stroke = 'stroke';\nconst StrokeWidth = 'strokeWidth';\nconst StrokeDash = 'strokeDash';\nconst Opacity = 'opacity'; // Encoding channels supported by legends\n// In priority order of 'canonical' scale\n\nconst LegendScales = [Size, Shape, Fill, Stroke, StrokeWidth, StrokeDash, Opacity];\nconst Skip = {\n name: 1,\n style: 1,\n interactive: 1\n};\nconst zero = {\n value: 0\n};\nconst one = {\n value: 1\n};\n\nconst GroupMark = 'group';\nconst RectMark = 'rect';\nconst RuleMark = 'rule';\nconst SymbolMark = 'symbol';\nconst TextMark = 'text';\n\nfunction guideGroup (mark) {\n mark.type = GroupMark;\n mark.interactive = mark.interactive || false;\n return mark;\n}\n\nfunction lookup(spec, config) {\n const _ = (name, dflt) => value(spec[name], value(config[name], dflt));\n\n _.isVertical = s => Vertical === value(spec.direction, config.direction || (s ? config.symbolDirection : config.gradientDirection));\n\n _.gradientLength = () => value(spec.gradientLength, config.gradientLength || config.gradientWidth);\n\n _.gradientThickness = () => value(spec.gradientThickness, config.gradientThickness || config.gradientHeight);\n\n _.entryColumns = () => value(spec.columns, value(config.columns, +_.isVertical(true)));\n\n return _;\n}\nfunction getEncoding(name, encode) {\n const v = encode && (encode.update && encode.update[name] || encode.enter && encode.enter[name]);\n return v && v.signal ? v : v ? v.value : null;\n}\nfunction getStyle(name, scope, style) {\n const s = scope.config.style[style];\n return s && s[name];\n}\nfunction anchorExpr(s, e, m) {\n return `item.anchor === '${Start}' ? ${s} : item.anchor === '${End}' ? ${e} : ${m}`;\n}\nconst alignExpr$1 = anchorExpr(stringValue(Left), stringValue(Right), stringValue(Center));\nfunction tickBand(_) {\n const v = _('tickBand');\n\n let offset = _('tickOffset'),\n band,\n extra;\n\n if (!v) {\n // if no tick band entry, fall back on other properties\n band = _('bandPosition');\n extra = _('tickExtra');\n } else if (v.signal) {\n // if signal, augment code to interpret values\n band = {\n signal: `(${v.signal}) === 'extent' ? 1 : 0.5`\n };\n extra = {\n signal: `(${v.signal}) === 'extent'`\n };\n\n if (!isObject(offset)) {\n offset = {\n signal: `(${v.signal}) === 'extent' ? 0 : ${offset}`\n };\n }\n } else if (v === 'extent') {\n // if constant, simply set values\n band = 1;\n extra = true;\n offset = 0;\n } else {\n band = 0.5;\n extra = false;\n }\n\n return {\n extra,\n band,\n offset\n };\n}\nfunction extendOffset(value, offset) {\n return !offset ? value : !value ? offset : !isObject(value) ? {\n value,\n offset\n } : Object.assign({}, value, {\n offset: extendOffset(value.offset, offset)\n });\n}\n\nfunction guideMark (mark, extras) {\n if (extras) {\n mark.name = extras.name;\n mark.style = extras.style || mark.style;\n mark.interactive = !!extras.interactive;\n mark.encode = extendEncode(mark.encode, extras, Skip);\n } else {\n mark.interactive = false;\n }\n\n return mark;\n}\n\nfunction legendGradient (spec, scale, config, userEncode) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = _.gradientThickness(),\n length = _.gradientLength();\n\n let enter, start, stop, width, height;\n\n if (vertical) {\n start = [0, 1];\n stop = [0, 0];\n width = thickness;\n height = length;\n } else {\n start = [0, 0];\n stop = [1, 0];\n width = length;\n height = thickness;\n }\n\n const encode = {\n enter: enter = {\n opacity: zero,\n x: zero,\n y: zero,\n width: encoder(width),\n height: encoder(height)\n },\n update: extend({}, enter, {\n opacity: one,\n fill: {\n gradient: scale,\n start: start,\n stop: stop\n }\n }),\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gradientStrokeColor'),\n strokeWidth: _('gradientStrokeWidth')\n }, {\n // update\n opacity: _('gradientOpacity')\n });\n return guideMark({\n type: RectMark,\n role: LegendGradientRole,\n encode\n }, userEncode);\n}\n\nfunction legendGradientDiscrete (spec, scale, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = _.gradientThickness(),\n length = _.gradientLength();\n\n let u,\n v,\n uu,\n vv,\n adjust = '';\n vertical ? (u = 'y', uu = 'y2', v = 'x', vv = 'width', adjust = '1-') : (u = 'x', uu = 'x2', v = 'y', vv = 'height');\n const enter = {\n opacity: zero,\n fill: {\n scale: scale,\n field: Value\n }\n };\n enter[u] = {\n signal: adjust + 'datum.' + Perc,\n mult: length\n };\n enter[v] = zero;\n enter[uu] = {\n signal: adjust + 'datum.' + Perc2,\n mult: length\n };\n enter[vv] = encoder(thickness);\n const encode = {\n enter: enter,\n update: extend({}, enter, {\n opacity: one\n }),\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gradientStrokeColor'),\n strokeWidth: _('gradientStrokeWidth')\n }, {\n // update\n opacity: _('gradientOpacity')\n });\n return guideMark({\n type: RectMark,\n role: LegendBandRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nconst alignExpr = `datum.${Perc}<=0?\"${Left}\":datum.${Perc}>=1?\"${Right}\":\"${Center}\"`,\n baselineExpr = `datum.${Perc}<=0?\"${Bottom}\":datum.${Perc}>=1?\"${Top}\":\"${Middle}\"`;\nfunction legendGradientLabels (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = encoder(_.gradientThickness()),\n length = _.gradientLength();\n\n let overlap = _('labelOverlap'),\n enter,\n update,\n u,\n v,\n adjust = '';\n\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one,\n text: {\n field: Label\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontStyle: _('labelFontStyle'),\n fontWeight: _('labelFontWeight'),\n limit: value(spec.labelLimit, config.gradientLabelLimit)\n });\n\n if (vertical) {\n enter.align = {\n value: 'left'\n };\n enter.baseline = update.baseline = {\n signal: baselineExpr\n };\n u = 'y';\n v = 'x';\n adjust = '1-';\n } else {\n enter.align = update.align = {\n signal: alignExpr\n };\n enter.baseline = {\n value: 'top'\n };\n u = 'x';\n v = 'y';\n }\n\n enter[u] = update[u] = {\n signal: adjust + 'datum.' + Perc,\n mult: length\n };\n enter[v] = update[v] = thickness;\n thickness.offset = value(spec.labelOffset, config.gradientLabelOffset) || 0;\n overlap = overlap ? {\n separation: _('labelSeparation'),\n method: overlap,\n order: 'datum.' + Index\n } : undefined; // type, role, style, key, dataRef, encode, extras\n\n return guideMark({\n type: TextMark,\n role: LegendLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: dataRef,\n encode,\n overlap\n }, userEncode);\n}\n\nfunction legendSymbolGroups (spec, config, userEncode, dataRef, columns) {\n const _ = lookup(spec, config),\n entries = userEncode.entries,\n interactive = !!(entries && entries.interactive),\n name = entries ? entries.name : undefined,\n height = _('clipHeight'),\n symbolOffset = _('symbolOffset'),\n valueRef = {\n data: 'value'\n },\n xSignal = `(${columns}) ? datum.${Offset} : datum.${Size}`,\n yEncode = height ? encoder(height) : {\n field: Size\n },\n index = `datum.${Index}`,\n ncols = `max(1, ${columns})`;\n\n let encode, enter, update, nrows, sort;\n yEncode.mult = 0.5; // -- LEGEND SYMBOLS --\n\n encode = {\n enter: enter = {\n opacity: zero,\n x: {\n signal: xSignal,\n mult: 0.5,\n offset: symbolOffset\n },\n y: yEncode\n },\n update: update = {\n opacity: one,\n x: enter.x,\n y: enter.y\n },\n exit: {\n opacity: zero\n }\n };\n let baseFill = null,\n baseStroke = null;\n\n if (!spec.fill) {\n baseFill = config.symbolBaseFillColor;\n baseStroke = config.symbolBaseStrokeColor;\n }\n\n addEncoders(encode, {\n fill: _('symbolFillColor', baseFill),\n shape: _('symbolType'),\n size: _('symbolSize'),\n stroke: _('symbolStrokeColor', baseStroke),\n strokeDash: _('symbolDash'),\n strokeDashOffset: _('symbolDashOffset'),\n strokeWidth: _('symbolStrokeWidth')\n }, {\n // update\n opacity: _('symbolOpacity')\n });\n LegendScales.forEach(scale => {\n if (spec[scale]) {\n update[scale] = enter[scale] = {\n scale: spec[scale],\n field: Value\n };\n }\n });\n const symbols = guideMark({\n type: SymbolMark,\n role: LegendSymbolRole,\n key: Value,\n from: valueRef,\n clip: height ? true : undefined,\n encode\n }, userEncode.symbols); // -- LEGEND LABELS --\n\n const labelOffset = encoder(symbolOffset);\n labelOffset.offset = _('labelOffset');\n encode = {\n enter: enter = {\n opacity: zero,\n x: {\n signal: xSignal,\n offset: labelOffset\n },\n y: yEncode\n },\n update: update = {\n opacity: one,\n text: {\n field: Label\n },\n x: enter.x,\n y: enter.y\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n align: _('labelAlign'),\n baseline: _('labelBaseline'),\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontStyle: _('labelFontStyle'),\n fontWeight: _('labelFontWeight'),\n limit: _('labelLimit')\n });\n const labels = guideMark({\n type: TextMark,\n role: LegendLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: valueRef,\n encode\n }, userEncode.labels); // -- LEGEND ENTRY GROUPS --\n\n encode = {\n enter: {\n noBound: {\n value: !height\n },\n // ignore width/height in bounds calc\n width: zero,\n height: height ? encoder(height) : zero,\n opacity: zero\n },\n exit: {\n opacity: zero\n },\n update: update = {\n opacity: one,\n row: {\n signal: null\n },\n column: {\n signal: null\n }\n }\n }; // annotate and sort groups to ensure correct ordering\n\n if (_.isVertical(true)) {\n nrows = `ceil(item.mark.items.length / ${ncols})`;\n update.row.signal = `${index}%${nrows}`;\n update.column.signal = `floor(${index} / ${nrows})`;\n sort = {\n field: ['row', index]\n };\n } else {\n update.row.signal = `floor(${index} / ${ncols})`;\n update.column.signal = `${index} % ${ncols}`;\n sort = {\n field: index\n };\n } // handle zero column case (implies infinite columns)\n\n\n update.column.signal = `(${columns})?${update.column.signal}:${index}`; // facet legend entries into sub-groups\n\n dataRef = {\n facet: {\n data: dataRef,\n name: 'value',\n groupby: Index\n }\n };\n return guideGroup({\n role: ScopeRole,\n from: dataRef,\n encode: extendEncode(encode, entries, Skip),\n marks: [symbols, labels],\n name,\n interactive,\n sort\n });\n}\nfunction legendSymbolLayout(spec, config) {\n const _ = lookup(spec, config); // layout parameters for legend entries\n\n\n return {\n align: _('gridAlign'),\n columns: _.entryColumns(),\n center: {\n row: true,\n column: false\n },\n padding: {\n row: _('rowPadding'),\n column: _('columnPadding')\n }\n };\n}\n\nconst isL = 'item.orient === \"left\"',\n isR = 'item.orient === \"right\"',\n isLR = `(${isL} || ${isR})`,\n isVG = `datum.vgrad && ${isLR}`,\n baseline = anchorExpr('\"top\"', '\"bottom\"', '\"middle\"'),\n alignFlip = anchorExpr('\"right\"', '\"left\"', '\"center\"'),\n exprAlign = `datum.vgrad && ${isR} ? (${alignFlip}) : (${isLR} && !(datum.vgrad && ${isL})) ? \"left\" : ${alignExpr$1}`,\n exprAnchor = `item._anchor || (${isLR} ? \"middle\" : \"start\")`,\n exprAngle = `${isVG} ? (${isL} ? -90 : 90) : 0`,\n exprBaseline = `${isLR} ? (datum.vgrad ? (${isR} ? \"bottom\" : \"top\") : ${baseline}) : \"top\"`;\nfunction legendTitle (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config);\n\n const encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: one,\n x: {\n field: {\n group: 'padding'\n }\n },\n y: {\n field: {\n group: 'padding'\n }\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n orient: _('titleOrient'),\n _anchor: _('titleAnchor'),\n anchor: {\n signal: exprAnchor\n },\n angle: {\n signal: exprAngle\n },\n align: {\n signal: exprAlign\n },\n baseline: {\n signal: exprBaseline\n },\n text: spec.title,\n fill: _('titleColor'),\n fillOpacity: _('titleOpacity'),\n font: _('titleFont'),\n fontSize: _('titleFontSize'),\n fontStyle: _('titleFontStyle'),\n fontWeight: _('titleFontWeight'),\n limit: _('titleLimit'),\n lineHeight: _('titleLineHeight')\n }, {\n // require update\n align: _('titleAlign'),\n baseline: _('titleBaseline')\n });\n return guideMark({\n type: TextMark,\n role: LegendTitleRole,\n style: GuideTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction clip (clip, scope) {\n let expr;\n\n if (isObject(clip)) {\n if (clip.signal) {\n expr = clip.signal;\n } else if (clip.path) {\n expr = 'pathShape(' + param(clip.path) + ')';\n } else if (clip.sphere) {\n expr = 'geoShape(' + param(clip.sphere) + ', {type: \"Sphere\"})';\n }\n }\n\n return expr ? scope.signalRef(expr) : !!clip;\n}\n\nfunction param(value) {\n return isObject(value) && value.signal ? value.signal : stringValue(value);\n}\n\nfunction getRole (spec) {\n const role = spec.role || '';\n return !role.indexOf('axis') || !role.indexOf('legend') || !role.indexOf('title') ? role : spec.type === GroupMark ? ScopeRole : role || MarkRole;\n}\n\nfunction definition (spec) {\n return {\n marktype: spec.type,\n name: spec.name || undefined,\n role: spec.role || getRole(spec),\n zindex: +spec.zindex || undefined,\n aria: spec.aria,\n description: spec.description\n };\n}\n\nfunction interactive (spec, scope) {\n return spec && spec.signal ? scope.signalRef(spec.signal) : spec === false ? false : true;\n}\n\n/**\n * Parse a data transform specification.\n */\n\nfunction parseTransform (spec, scope) {\n const def = definition$1(spec.type);\n if (!def) error('Unrecognized transform type: ' + stringValue(spec.type));\n const t = entry(def.type.toLowerCase(), null, parseParameters(def, spec, scope));\n if (spec.signal) scope.addSignal(spec.signal, scope.proxy(t));\n t.metadata = def.metadata || {};\n return t;\n}\n/**\n * Parse all parameters of a data transform.\n */\n\nfunction parseParameters(def, spec, scope) {\n const params = {},\n n = def.params.length;\n\n for (let i = 0; i < n; ++i) {\n const pdef = def.params[i];\n params[pdef.name] = parseParameter(pdef, spec, scope);\n }\n\n return params;\n}\n/**\n * Parse a data transform parameter.\n */\n\n\nfunction parseParameter(def, spec, scope) {\n const type = def.type,\n value = spec[def.name];\n\n if (type === 'index') {\n return parseIndexParameter(def, spec, scope);\n } else if (value === undefined) {\n if (def.required) {\n error('Missing required ' + stringValue(spec.type) + ' parameter: ' + stringValue(def.name));\n }\n\n return;\n } else if (type === 'param') {\n return parseSubParameters(def, spec, scope);\n } else if (type === 'projection') {\n return scope.projectionRef(spec[def.name]);\n }\n\n return def.array && !isSignal(value) ? value.map(v => parameterValue(def, v, scope)) : parameterValue(def, value, scope);\n}\n/**\n * Parse a single parameter value.\n */\n\n\nfunction parameterValue(def, value, scope) {\n const type = def.type;\n\n if (isSignal(value)) {\n return isExpr(type) ? error('Expression references can not be signals.') : isField(type) ? scope.fieldRef(value) : isCompare(type) ? scope.compareRef(value) : scope.signalRef(value.signal);\n } else {\n const expr = def.expr || isField(type);\n return expr && outerExpr(value) ? scope.exprRef(value.expr, value.as) : expr && outerField(value) ? fieldRef$1(value.field, value.as) : isExpr(type) ? parseExpression(value, scope) : isData(type) ? ref(scope.getData(value).values) : isField(type) ? fieldRef$1(value) : isCompare(type) ? scope.compareRef(value) : value;\n }\n}\n/**\n * Parse parameter for accessing an index of another data set.\n */\n\n\nfunction parseIndexParameter(def, spec, scope) {\n if (!isString(spec.from)) {\n error('Lookup \"from\" parameter must be a string literal.');\n }\n\n return scope.getData(spec.from).lookupRef(scope, spec.key);\n}\n/**\n * Parse a parameter that contains one or more sub-parameter objects.\n */\n\n\nfunction parseSubParameters(def, spec, scope) {\n const value = spec[def.name];\n\n if (def.array) {\n if (!isArray(value)) {\n // signals not allowed!\n error('Expected an array of sub-parameters. Instead: ' + stringValue(value));\n }\n\n return value.map(v => parseSubParameter(def, v, scope));\n } else {\n return parseSubParameter(def, value, scope);\n }\n}\n/**\n * Parse a sub-parameter object.\n */\n\n\nfunction parseSubParameter(def, value, scope) {\n const n = def.params.length;\n let pdef; // loop over defs to find matching key\n\n for (let i = 0; i < n; ++i) {\n pdef = def.params[i];\n\n for (const k in pdef.key) {\n if (pdef.key[k] !== value[k]) {\n pdef = null;\n break;\n }\n }\n\n if (pdef) break;\n } // raise error if matching key not found\n\n\n if (!pdef) error('Unsupported parameter: ' + stringValue(value)); // parse params, create Params transform, return ref\n\n const params = extend(parseParameters(pdef, value, scope), pdef.key);\n return ref(scope.add(Params(params)));\n} // -- Utilities -----\n\n\nconst outerExpr = _ => _ && _.expr;\nconst outerField = _ => _ && _.field;\nconst isData = _ => _ === 'data';\nconst isExpr = _ => _ === 'expr';\nconst isField = _ => _ === 'field';\nconst isCompare = _ => _ === 'compare';\n\nfunction parseData$1 (from, group, scope) {\n let facet, key, op, dataRef, parent; // if no source data, generate singleton datum\n\n if (!from) {\n dataRef = ref(scope.add(Collect(null, [{}])));\n } // if faceted, process facet specification\n else if (facet = from.facet) {\n if (!group) error('Only group marks can be faceted.'); // use pre-faceted source data, if available\n\n if (facet.field != null) {\n dataRef = parent = getDataRef(facet, scope);\n } else {\n // generate facet aggregates if no direct data specification\n if (!from.data) {\n op = parseTransform(extend({\n type: 'aggregate',\n groupby: array(facet.groupby)\n }, facet.aggregate), scope);\n op.params.key = scope.keyRef(facet.groupby);\n op.params.pulse = getDataRef(facet, scope);\n dataRef = parent = ref(scope.add(op));\n } else {\n parent = ref(scope.getData(from.data).aggregate);\n }\n\n key = scope.keyRef(facet.groupby, true);\n }\n } // if not yet defined, get source data reference\n\n\n if (!dataRef) {\n dataRef = getDataRef(from, scope);\n }\n\n return {\n key: key,\n pulse: dataRef,\n parent: parent\n };\n}\nfunction getDataRef(from, scope) {\n return from.$ref ? from : from.data && from.data.$ref ? from.data : ref(scope.getData(from.data).output);\n}\n\nfunction DataScope(scope, input, output, values, aggr) {\n this.scope = scope; // parent scope object\n\n this.input = input; // first operator in pipeline (tuple input)\n\n this.output = output; // last operator in pipeline (tuple output)\n\n this.values = values; // operator for accessing tuples (but not tuple flow)\n // last aggregate in transform pipeline\n\n this.aggregate = aggr; // lookup table of field indices\n\n this.index = {};\n}\n\nDataScope.fromEntries = function (scope, entries) {\n const n = entries.length,\n values = entries[n - 1],\n output = entries[n - 2];\n let input = entries[0],\n aggr = null,\n i = 1;\n\n if (input && input.type === 'load') {\n input = entries[1];\n } // add operator entries to this scope, wire up pulse chain\n\n\n scope.add(entries[0]);\n\n for (; i < n; ++i) {\n entries[i].params.pulse = ref(entries[i - 1]);\n scope.add(entries[i]);\n if (entries[i].type === 'aggregate') aggr = entries[i];\n }\n\n return new DataScope(scope, input, output, values, aggr);\n};\n\nfunction fieldKey(field) {\n return isString(field) ? field : null;\n}\n\nfunction addSortField(scope, p, sort) {\n const as = aggrField(sort.op, sort.field);\n let s;\n\n if (p.ops) {\n for (let i = 0, n = p.as.length; i < n; ++i) {\n if (p.as[i] === as) return;\n }\n } else {\n p.ops = ['count'];\n p.fields = [null];\n p.as = ['count'];\n }\n\n if (sort.op) {\n p.ops.push((s = sort.op.signal) ? scope.signalRef(s) : sort.op);\n p.fields.push(scope.fieldRef(sort.field));\n p.as.push(as);\n }\n}\n\nfunction cache(scope, ds, name, optype, field, counts, index) {\n const cache = ds[name] || (ds[name] = {}),\n sort = sortKey(counts);\n let k = fieldKey(field),\n v,\n op;\n\n if (k != null) {\n scope = ds.scope;\n k = k + (sort ? '|' + sort : '');\n v = cache[k];\n }\n\n if (!v) {\n const params = counts ? {\n field: keyFieldRef,\n pulse: ds.countsRef(scope, field, counts)\n } : {\n field: scope.fieldRef(field),\n pulse: ref(ds.output)\n };\n if (sort) params.sort = scope.sortRef(counts);\n op = scope.add(entry(optype, undefined, params));\n if (index) ds.index[field] = op;\n v = ref(op);\n if (k != null) cache[k] = v;\n }\n\n return v;\n}\n\nDataScope.prototype = {\n countsRef(scope, field, sort) {\n const ds = this,\n cache = ds.counts || (ds.counts = {}),\n k = fieldKey(field);\n let v, a, p;\n\n if (k != null) {\n scope = ds.scope;\n v = cache[k];\n }\n\n if (!v) {\n p = {\n groupby: scope.fieldRef(field, 'key'),\n pulse: ref(ds.output)\n };\n if (sort && sort.field) addSortField(scope, p, sort);\n a = scope.add(Aggregate(p));\n v = scope.add(Collect({\n pulse: ref(a)\n }));\n v = {\n agg: a,\n ref: ref(v)\n };\n if (k != null) cache[k] = v;\n } else if (sort && sort.field) {\n addSortField(scope, v.agg.params, sort);\n }\n\n return v.ref;\n },\n\n tuplesRef() {\n return ref(this.values);\n },\n\n extentRef(scope, field) {\n return cache(scope, this, 'extent', 'extent', field, false);\n },\n\n domainRef(scope, field) {\n return cache(scope, this, 'domain', 'values', field, false);\n },\n\n valuesRef(scope, field, sort) {\n return cache(scope, this, 'vals', 'values', field, sort || true);\n },\n\n lookupRef(scope, field) {\n return cache(scope, this, 'lookup', 'tupleindex', field, false);\n },\n\n indataRef(scope, field) {\n return cache(scope, this, 'indata', 'tupleindex', field, true, true);\n }\n\n};\n\nfunction parseFacet (spec, scope, group) {\n const facet = spec.from.facet,\n name = facet.name,\n data = getDataRef(facet, scope);\n let op;\n\n if (!facet.name) {\n error('Facet must have a name: ' + stringValue(facet));\n }\n\n if (!facet.data) {\n error('Facet must reference a data set: ' + stringValue(facet));\n }\n\n if (facet.field) {\n op = scope.add(PreFacet({\n field: scope.fieldRef(facet.field),\n pulse: data\n }));\n } else if (facet.groupby) {\n op = scope.add(Facet({\n key: scope.keyRef(facet.groupby),\n group: ref(scope.proxy(group.parent)),\n pulse: data\n }));\n } else {\n error('Facet must specify groupby or field: ' + stringValue(facet));\n } // initialize facet subscope\n\n\n const subscope = scope.fork(),\n source = subscope.add(Collect()),\n values = subscope.add(Sieve({\n pulse: ref(source)\n }));\n subscope.addData(name, new DataScope(subscope, source, source, values));\n subscope.addSignal('parent', null); // parse faceted subflow\n\n op.params.subflow = {\n $subflow: subscope.parse(spec).toRuntime()\n };\n}\n\nfunction parseSubflow (spec, scope, input) {\n const op = scope.add(PreFacet({\n pulse: input.pulse\n })),\n subscope = scope.fork();\n subscope.add(Sieve());\n subscope.addSignal('parent', null); // parse group mark subflow\n\n op.params.subflow = {\n $subflow: subscope.parse(spec).toRuntime()\n };\n}\n\nfunction parseTrigger (spec, scope, name) {\n const remove = spec.remove,\n insert = spec.insert,\n toggle = spec.toggle,\n modify = spec.modify,\n values = spec.values,\n op = scope.add(operator());\n const update = 'if(' + spec.trigger + ',modify(\"' + name + '\",' + [insert, remove, toggle, modify, values].map(_ => _ == null ? 'null' : _).join(',') + '),0)';\n const expr = parseExpression(update, scope);\n op.update = expr.$expr;\n op.params = expr.$params;\n}\n\nfunction parseMark (spec, scope) {\n const role = getRole(spec),\n group = spec.type === GroupMark,\n facet = spec.from && spec.from.facet,\n overlap = spec.overlap;\n let layout = spec.layout || role === ScopeRole || role === FrameRole,\n ops,\n op,\n store,\n enc,\n name,\n layoutRef,\n boundRef;\n const nested = role === MarkRole || layout || facet; // resolve input data\n\n const input = parseData$1(spec.from, group, scope); // data join to map tuples to visual items\n\n op = scope.add(DataJoin({\n key: input.key || (spec.key ? fieldRef$1(spec.key) : undefined),\n pulse: input.pulse,\n clean: !group\n }));\n const joinRef = ref(op); // collect visual items\n\n op = store = scope.add(Collect({\n pulse: joinRef\n })); // connect visual items to scenegraph\n\n op = scope.add(Mark({\n markdef: definition(spec),\n interactive: interactive(spec.interactive, scope),\n clip: clip(spec.clip, scope),\n context: {\n $context: true\n },\n groups: scope.lookup(),\n parent: scope.signals.parent ? scope.signalRef('parent') : null,\n index: scope.markpath(),\n pulse: ref(op)\n }));\n const markRef = ref(op); // add visual encoders\n\n op = enc = scope.add(Encode(parseEncode(spec.encode, spec.type, role, spec.style, scope, {\n mod: false,\n pulse: markRef\n }))); // monitor parent marks to propagate changes\n\n op.params.parent = scope.encode(); // add post-encoding transforms, if defined\n\n if (spec.transform) {\n spec.transform.forEach(_ => {\n const tx = parseTransform(_, scope),\n md = tx.metadata;\n\n if (md.generates || md.changes) {\n error('Mark transforms should not generate new data.');\n }\n\n if (!md.nomod) enc.params.mod = true; // update encode mod handling\n\n tx.params.pulse = ref(op);\n scope.add(op = tx);\n });\n } // if item sort specified, perform post-encoding\n\n\n if (spec.sort) {\n op = scope.add(SortItems({\n sort: scope.compareRef(spec.sort),\n pulse: ref(op)\n }));\n }\n\n const encodeRef = ref(op); // add view layout operator if needed\n\n if (facet || layout) {\n layout = scope.add(ViewLayout({\n layout: scope.objectProperty(spec.layout),\n legends: scope.legends,\n mark: markRef,\n pulse: encodeRef\n }));\n layoutRef = ref(layout);\n } // compute bounding boxes\n\n\n const bound = scope.add(Bound({\n mark: markRef,\n pulse: layoutRef || encodeRef\n }));\n boundRef = ref(bound); // if group mark, recurse to parse nested content\n\n if (group) {\n // juggle layout & bounds to ensure they run *after* any faceting transforms\n if (nested) {\n ops = scope.operators;\n ops.pop();\n if (layout) ops.pop();\n }\n\n scope.pushState(encodeRef, layoutRef || boundRef, joinRef);\n facet ? parseFacet(spec, scope, input) // explicit facet\n : nested ? parseSubflow(spec, scope, input) // standard mark group\n : scope.parse(spec); // guide group, we can avoid nested scopes\n\n scope.popState();\n\n if (nested) {\n if (layout) ops.push(layout);\n ops.push(bound);\n }\n } // if requested, add overlap removal transform\n\n\n if (overlap) {\n boundRef = parseOverlap(overlap, boundRef, scope);\n } // render / sieve items\n\n\n const render = scope.add(Render({\n pulse: boundRef\n })),\n sieve = scope.add(Sieve({\n pulse: ref(render)\n }, undefined, scope.parent())); // if mark is named, make accessible as reactive geometry\n // add trigger updates if defined\n\n if (spec.name != null) {\n name = spec.name;\n scope.addData(name, new DataScope(scope, store, render, sieve));\n if (spec.on) spec.on.forEach(on => {\n if (on.insert || on.remove || on.toggle) {\n error('Marks only support modify triggers.');\n }\n\n parseTrigger(on, scope, name);\n });\n }\n}\n\nfunction parseOverlap(overlap, source, scope) {\n const method = overlap.method,\n bound = overlap.bound,\n sep = overlap.separation;\n const params = {\n separation: isSignal(sep) ? scope.signalRef(sep.signal) : sep,\n method: isSignal(method) ? scope.signalRef(method.signal) : method,\n pulse: source\n };\n\n if (overlap.order) {\n params.sort = scope.compareRef({\n field: overlap.order\n });\n }\n\n if (bound) {\n const tol = bound.tolerance;\n params.boundTolerance = isSignal(tol) ? scope.signalRef(tol.signal) : +tol;\n params.boundScale = scope.scaleRef(bound.scale);\n params.boundOrient = bound.orient;\n }\n\n return ref(scope.add(Overlap(params)));\n}\n\nfunction parseLegend (spec, scope) {\n const config = scope.config.legend,\n encode = spec.encode || {},\n _ = lookup(spec, config),\n legendEncode = encode.legend || {},\n name = legendEncode.name || undefined,\n interactive = legendEncode.interactive,\n style = legendEncode.style,\n scales = {};\n\n let scale = 0,\n entryLayout,\n params,\n children; // resolve scales and 'canonical' scale name\n\n LegendScales.forEach(s => spec[s] ? (scales[s] = spec[s], scale = scale || spec[s]) : 0);\n if (!scale) error('Missing valid scale for legend.'); // resolve legend type (symbol, gradient, or discrete gradient)\n\n const type = legendType(spec, scope.scaleType(scale)); // single-element data source for legend group\n\n const datum = {\n title: spec.title != null,\n scales: scales,\n type: type,\n vgrad: type !== 'symbol' && _.isVertical()\n };\n const dataRef = ref(scope.add(Collect(null, [datum]))); // encoding properties for legend entry sub-group\n\n const entryEncode = {\n enter: {\n x: {\n value: 0\n },\n y: {\n value: 0\n }\n }\n }; // data source for legend values\n\n const entryRef = ref(scope.add(LegendEntries(params = {\n type: type,\n scale: scope.scaleRef(scale),\n count: scope.objectProperty(_('tickCount')),\n limit: scope.property(_('symbolLimit')),\n values: scope.objectProperty(spec.values),\n minstep: scope.property(spec.tickMinStep),\n formatType: scope.property(spec.formatType),\n formatSpecifier: scope.property(spec.format)\n }))); // continuous gradient legend\n\n if (type === Gradient) {\n children = [legendGradient(spec, scale, config, encode.gradient), legendGradientLabels(spec, config, encode.labels, entryRef)]; // adjust default tick count based on the gradient length\n\n params.count = params.count || scope.signalRef(`max(2,2*floor((${deref(_.gradientLength())})/100))`);\n } // discrete gradient legend\n else if (type === Discrete) {\n children = [legendGradientDiscrete(spec, scale, config, encode.gradient, entryRef), legendGradientLabels(spec, config, encode.labels, entryRef)];\n } // symbol legend\n else {\n // determine legend symbol group layout\n entryLayout = legendSymbolLayout(spec, config);\n children = [legendSymbolGroups(spec, config, encode, entryRef, deref(entryLayout.columns))]; // pass symbol size information to legend entry generator\n\n params.size = sizeExpression(spec, scope, children[0].marks);\n } // generate legend marks\n\n\n children = [guideGroup({\n role: LegendEntryRole,\n from: dataRef,\n encode: entryEncode,\n marks: children,\n layout: entryLayout,\n interactive\n })]; // include legend title if defined\n\n if (datum.title) {\n children.push(legendTitle(spec, config, encode.title, dataRef));\n } // parse legend specification\n\n\n return parseMark(guideGroup({\n role: LegendRole,\n from: dataRef,\n encode: extendEncode(buildLegendEncode(_, spec, config), legendEncode, Skip),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\n\nfunction legendType(spec, scaleType) {\n let type = spec.type || Symbols;\n\n if (!spec.type && scaleCount(spec) === 1 && (spec.fill || spec.stroke)) {\n type = isContinuous(scaleType) ? Gradient : isDiscretizing(scaleType) ? Discrete : Symbols;\n }\n\n return type !== Gradient ? type : isDiscretizing(scaleType) ? Discrete : Gradient;\n}\n\nfunction scaleCount(spec) {\n return LegendScales.reduce((count, type) => count + (spec[type] ? 1 : 0), 0);\n}\n\nfunction buildLegendEncode(_, spec, config) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n offset: _('offset'),\n padding: _('padding'),\n titlePadding: _('titlePadding'),\n cornerRadius: _('cornerRadius'),\n fill: _('fillColor'),\n stroke: _('strokeColor'),\n strokeWidth: config.strokeWidth,\n strokeDash: config.strokeDash,\n x: _('legendX'),\n y: _('legendY'),\n // accessibility support\n format: spec.format,\n formatType: spec.formatType\n });\n return encode;\n}\n\nfunction sizeExpression(spec, scope, marks) {\n const size = deref(getChannel('size', spec, marks)),\n strokeWidth = deref(getChannel('strokeWidth', spec, marks)),\n fontSize = deref(getFontSize(marks[1].encode, scope, GuideLabelStyle));\n return parseExpression(`max(ceil(sqrt(${size})+${strokeWidth}),${fontSize})`, scope);\n}\n\nfunction getChannel(name, spec, marks) {\n return spec[name] ? `scale(\"${spec[name]}\",datum)` : getEncoding(name, marks[0].encode);\n}\n\nfunction getFontSize(encode, scope, style) {\n return getEncoding('fontSize', encode) || getStyle('fontSize', scope, style);\n}\n\nconst angleExpr = `item.orient===\"${Left}\"?-90:item.orient===\"${Right}\"?90:0`;\nfunction parseTitle (spec, scope) {\n spec = isString(spec) ? {\n text: spec\n } : spec;\n\n const _ = lookup(spec, scope.config.title),\n encode = spec.encode || {},\n userEncode = encode.group || {},\n name = userEncode.name || undefined,\n interactive = userEncode.interactive,\n style = userEncode.style,\n children = []; // single-element data source for group title\n\n\n const datum = {},\n dataRef = ref(scope.add(Collect(null, [datum]))); // include title text\n\n children.push(buildTitle(spec, _, titleEncode(spec), dataRef)); // include subtitle text\n\n if (spec.subtitle) {\n children.push(buildSubTitle(spec, _, encode.subtitle, dataRef));\n } // parse title specification\n\n\n return parseMark(guideGroup({\n role: TitleRole,\n from: dataRef,\n encode: groupEncode(_, userEncode),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n} // provide backwards-compatibility for title custom encode;\n// the top-level encode block has been *deprecated*.\n\nfunction titleEncode(spec) {\n const encode = spec.encode;\n return encode && encode.title || extend({\n name: spec.name,\n interactive: spec.interactive,\n style: spec.style\n }, encode);\n}\n\nfunction groupEncode(_, userEncode) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n anchor: _('anchor'),\n align: {\n signal: alignExpr$1\n },\n angle: {\n signal: angleExpr\n },\n limit: _('limit'),\n frame: _('frame'),\n offset: _('offset') || 0,\n padding: _('subtitlePadding')\n });\n return extendEncode(encode, userEncode, Skip);\n}\n\nfunction buildTitle(spec, _, userEncode, dataRef) {\n const zero = {\n value: 0\n },\n text = spec.text,\n encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: {\n value: 1\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n text: text,\n align: {\n signal: 'item.mark.group.align'\n },\n angle: {\n signal: 'item.mark.group.angle'\n },\n limit: {\n signal: 'item.mark.group.limit'\n },\n baseline: 'top',\n dx: _('dx'),\n dy: _('dy'),\n fill: _('color'),\n font: _('font'),\n fontSize: _('fontSize'),\n fontStyle: _('fontStyle'),\n fontWeight: _('fontWeight'),\n lineHeight: _('lineHeight')\n }, {\n // update\n align: _('align'),\n angle: _('angle'),\n baseline: _('baseline')\n });\n return guideMark({\n type: TextMark,\n role: TitleTextRole,\n style: GroupTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction buildSubTitle(spec, _, userEncode, dataRef) {\n const zero = {\n value: 0\n },\n text = spec.subtitle,\n encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: {\n value: 1\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n text: text,\n align: {\n signal: 'item.mark.group.align'\n },\n angle: {\n signal: 'item.mark.group.angle'\n },\n limit: {\n signal: 'item.mark.group.limit'\n },\n baseline: 'top',\n dx: _('dx'),\n dy: _('dy'),\n fill: _('subtitleColor'),\n font: _('subtitleFont'),\n fontSize: _('subtitleFontSize'),\n fontStyle: _('subtitleFontStyle'),\n fontWeight: _('subtitleFontWeight'),\n lineHeight: _('subtitleLineHeight')\n }, {\n // update\n align: _('align'),\n angle: _('angle'),\n baseline: _('baseline')\n });\n return guideMark({\n type: TextMark,\n role: TitleSubtitleRole,\n style: GroupSubtitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction parseData(data, scope) {\n const transforms = [];\n\n if (data.transform) {\n data.transform.forEach(tx => {\n transforms.push(parseTransform(tx, scope));\n });\n }\n\n if (data.on) {\n data.on.forEach(on => {\n parseTrigger(on, scope, data.name);\n });\n }\n\n scope.addDataPipeline(data.name, analyze(data, scope, transforms));\n}\n/**\n * Analyze a data pipeline, add needed operators.\n */\n\nfunction analyze(data, scope, ops) {\n const output = [];\n let source = null,\n modify = false,\n generate = false,\n upstream,\n i,\n n,\n t,\n m;\n\n if (data.values) {\n // hard-wired input data set\n if (isSignal(data.values) || hasSignal(data.format)) {\n // if either values is signal or format has signal, use dynamic loader\n output.push(load(scope, data));\n output.push(source = collect());\n } else {\n // otherwise, ingest upon dataflow init\n output.push(source = collect({\n $ingest: data.values,\n $format: data.format\n }));\n }\n } else if (data.url) {\n // load data from external source\n if (hasSignal(data.url) || hasSignal(data.format)) {\n // if either url or format has signal, use dynamic loader\n output.push(load(scope, data));\n output.push(source = collect());\n } else {\n // otherwise, request load upon dataflow init\n output.push(source = collect({\n $request: data.url,\n $format: data.format\n }));\n }\n } else if (data.source) {\n // derives from one or more other data sets\n source = upstream = array(data.source).map(d => ref(scope.getData(d).output));\n output.push(null); // populate later\n } // scan data transforms, add collectors as needed\n\n\n for (i = 0, n = ops.length; i < n; ++i) {\n t = ops[i];\n m = t.metadata;\n\n if (!source && !m.source) {\n output.push(source = collect());\n }\n\n output.push(t);\n if (m.generates) generate = true;\n if (m.modifies && !generate) modify = true;\n if (m.source) source = t;else if (m.changes) source = null;\n }\n\n if (upstream) {\n n = upstream.length - 1;\n output[0] = Relay({\n derive: modify,\n pulse: n ? upstream : upstream[0]\n });\n\n if (modify || n) {\n // collect derived and multi-pulse tuples\n output.splice(1, 0, collect());\n }\n }\n\n if (!source) output.push(collect());\n output.push(Sieve({}));\n return output;\n}\n\nfunction collect(values) {\n const s = Collect({}, values);\n s.metadata = {\n source: true\n };\n return s;\n}\n\nfunction load(scope, data) {\n return Load({\n url: data.url ? scope.property(data.url) : undefined,\n async: data.async ? scope.property(data.async) : undefined,\n values: data.values ? scope.property(data.values) : undefined,\n format: scope.objectProperty(data.format)\n });\n}\n\nconst isX = orient => orient === Bottom || orient === Top; // get sign coefficient based on axis orient\n\n\nconst getSign = (orient, a, b) => isSignal(orient) ? ifLeftTopExpr(orient.signal, a, b) : orient === Left || orient === Top ? a : b; // condition on axis x-direction\n\nconst ifX = (orient, a, b) => isSignal(orient) ? ifXEnc(orient.signal, a, b) : isX(orient) ? a : b; // condition on axis y-direction\n\nconst ifY = (orient, a, b) => isSignal(orient) ? ifYEnc(orient.signal, a, b) : isX(orient) ? b : a;\nconst ifTop = (orient, a, b) => isSignal(orient) ? ifTopExpr(orient.signal, a, b) : orient === Top ? {\n value: a\n} : {\n value: b\n};\nconst ifRight = (orient, a, b) => isSignal(orient) ? ifRightExpr(orient.signal, a, b) : orient === Right ? {\n value: a\n} : {\n value: b\n};\n\nconst ifXEnc = ($orient, a, b) => ifEnc(`${$orient} === '${Top}' || ${$orient} === '${Bottom}'`, a, b);\n\nconst ifYEnc = ($orient, a, b) => ifEnc(`${$orient} !== '${Top}' && ${$orient} !== '${Bottom}'`, a, b);\n\nconst ifLeftTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Left}' || ${$orient} === '${Top}'`, a, b);\n\nconst ifTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Top}'`, a, b);\n\nconst ifRightExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Right}'`, a, b);\n\nconst ifEnc = (test, a, b) => {\n // ensure inputs are encoder objects (or null)\n a = a != null ? encoder(a) : a;\n b = b != null ? encoder(b) : b;\n\n if (isSimple(a) && isSimple(b)) {\n // if possible generate simple signal expression\n a = a ? a.signal || stringValue(a.value) : null;\n b = b ? b.signal || stringValue(b.value) : null;\n return {\n signal: `${test} ? (${a}) : (${b})`\n };\n } else {\n // otherwise generate rule set\n return [extend({\n test\n }, a)].concat(b || []);\n }\n};\n\nconst isSimple = enc => enc == null || Object.keys(enc).length === 1;\n\nconst ifExpr = (test, a, b) => ({\n signal: `${test} ? (${toExpr(a)}) : (${toExpr(b)})`\n});\n\nconst ifOrient = ($orient, t, b, l, r) => ({\n signal: (l != null ? `${$orient} === '${Left}' ? (${toExpr(l)}) : ` : '') + (b != null ? `${$orient} === '${Bottom}' ? (${toExpr(b)}) : ` : '') + (r != null ? `${$orient} === '${Right}' ? (${toExpr(r)}) : ` : '') + (t != null ? `${$orient} === '${Top}' ? (${toExpr(t)}) : ` : '') + '(null)'\n});\n\nconst toExpr = v => isSignal(v) ? v.signal : v == null ? null : stringValue(v);\n\nconst mult = (sign, value) => value === 0 ? 0 : isSignal(sign) ? {\n signal: `(${sign.signal}) * ${value}`\n} : {\n value: sign * value\n};\nconst patch = (value, base) => {\n const s = value.signal;\n return s && s.endsWith('(null)') ? {\n signal: s.slice(0, -6) + base.signal\n } : value;\n};\n\nfunction fallback(prop, config, axisConfig, style) {\n let styleProp;\n\n if (config && hasOwnProperty(config, prop)) {\n return config[prop];\n } else if (hasOwnProperty(axisConfig, prop)) {\n return axisConfig[prop];\n } else if (prop.startsWith('title')) {\n switch (prop) {\n case 'titleColor':\n styleProp = 'fill';\n break;\n\n case 'titleFont':\n case 'titleFontSize':\n case 'titleFontWeight':\n styleProp = prop[5].toLowerCase() + prop.slice(6);\n }\n\n return style[GuideTitleStyle][styleProp];\n } else if (prop.startsWith('label')) {\n switch (prop) {\n case 'labelColor':\n styleProp = 'fill';\n break;\n\n case 'labelFont':\n case 'labelFontSize':\n styleProp = prop[5].toLowerCase() + prop.slice(6);\n }\n\n return style[GuideLabelStyle][styleProp];\n }\n\n return null;\n}\n\nfunction keys(objects) {\n const map = {};\n\n for (const obj of objects) {\n if (!obj) continue;\n\n for (const key in obj) map[key] = 1;\n }\n\n return Object.keys(map);\n}\n\nfunction axisConfig (spec, scope) {\n var config = scope.config,\n style = config.style,\n axis = config.axis,\n band = scope.scaleType(spec.scale) === 'band' && config.axisBand,\n orient = spec.orient,\n xy,\n or,\n key;\n\n if (isSignal(orient)) {\n const xyKeys = keys([config.axisX, config.axisY]),\n orientKeys = keys([config.axisTop, config.axisBottom, config.axisLeft, config.axisRight]);\n xy = {};\n\n for (key of xyKeys) {\n xy[key] = ifX(orient, fallback(key, config.axisX, axis, style), fallback(key, config.axisY, axis, style));\n }\n\n or = {};\n\n for (key of orientKeys) {\n or[key] = ifOrient(orient.signal, fallback(key, config.axisTop, axis, style), fallback(key, config.axisBottom, axis, style), fallback(key, config.axisLeft, axis, style), fallback(key, config.axisRight, axis, style));\n }\n } else {\n xy = orient === Top || orient === Bottom ? config.axisX : config.axisY;\n or = config['axis' + orient[0].toUpperCase() + orient.slice(1)];\n }\n\n const result = xy || or || band ? extend({}, axis, xy, or, band) : axis;\n return result;\n}\n\nfunction axisDomain (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n orient = spec.orient;\n\n let enter, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('domainColor'),\n strokeCap: _('domainCap'),\n strokeDash: _('domainDash'),\n strokeDashOffset: _('domainDashOffset'),\n strokeWidth: _('domainWidth'),\n strokeOpacity: _('domainOpacity')\n });\n const pos0 = position(spec, 0);\n const pos1 = position(spec, 1);\n enter.x = update.x = ifX(orient, pos0, zero);\n enter.x2 = update.x2 = ifX(orient, pos1);\n enter.y = update.y = ifY(orient, pos0, zero);\n enter.y2 = update.y2 = ifY(orient, pos1);\n return guideMark({\n type: RuleMark,\n role: AxisDomainRole,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction position(spec, pos) {\n return {\n scale: spec.scale,\n range: pos\n };\n}\n\nfunction axisGrid (spec, config, userEncode, dataRef, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n vscale = spec.gridScale,\n sign = getSign(orient, 1, -1),\n offset = offsetValue(spec.offset, sign);\n\n let enter, exit, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: exit = {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gridColor'),\n strokeCap: _('gridCap'),\n strokeDash: _('gridDash'),\n strokeDashOffset: _('gridDashOffset'),\n strokeOpacity: _('gridOpacity'),\n strokeWidth: _('gridWidth')\n });\n const tickPos = {\n scale: spec.scale,\n field: Value,\n band: band.band,\n extra: band.extra,\n offset: band.offset,\n round: _('tickRound')\n };\n const sz = ifX(orient, {\n signal: 'height'\n }, {\n signal: 'width'\n });\n const gridStart = vscale ? {\n scale: vscale,\n range: 0,\n mult: sign,\n offset: offset\n } : {\n value: 0,\n offset: offset\n };\n const gridEnd = vscale ? {\n scale: vscale,\n range: 1,\n mult: sign,\n offset: offset\n } : extend(sz, {\n mult: sign,\n offset: offset\n });\n enter.x = update.x = ifX(orient, tickPos, gridStart);\n enter.y = update.y = ifY(orient, tickPos, gridStart);\n enter.x2 = update.x2 = ifY(orient, gridEnd);\n enter.y2 = update.y2 = ifX(orient, gridEnd);\n exit.x = ifX(orient, tickPos);\n exit.y = ifY(orient, tickPos);\n return guideMark({\n type: RuleMark,\n role: AxisGridRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction offsetValue(offset, sign) {\n if (sign === 1) ; else if (!isObject(offset)) {\n offset = isSignal(sign) ? {\n signal: `(${sign.signal}) * (${offset || 0})`\n } : sign * (offset || 0);\n } else {\n let entry = offset = extend({}, offset);\n\n while (entry.mult != null) {\n if (!isObject(entry.mult)) {\n entry.mult = isSignal(sign) // no offset if sign === 1\n ? {\n signal: `(${entry.mult}) * (${sign.signal})`\n } : entry.mult * sign;\n return offset;\n } else {\n entry = entry.mult = extend({}, entry.mult);\n }\n }\n\n entry.mult = sign;\n }\n\n return offset;\n}\n\nfunction axisTicks (spec, config, userEncode, dataRef, size, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n sign = getSign(orient, -1, 1);\n\n let enter, exit, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: exit = {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('tickColor'),\n strokeCap: _('tickCap'),\n strokeDash: _('tickDash'),\n strokeDashOffset: _('tickDashOffset'),\n strokeOpacity: _('tickOpacity'),\n strokeWidth: _('tickWidth')\n });\n const tickSize = encoder(size);\n tickSize.mult = sign;\n const tickPos = {\n scale: spec.scale,\n field: Value,\n band: band.band,\n extra: band.extra,\n offset: band.offset,\n round: _('tickRound')\n };\n update.y = enter.y = ifX(orient, zero, tickPos);\n update.y2 = enter.y2 = ifX(orient, tickSize);\n exit.x = ifX(orient, tickPos);\n update.x = enter.x = ifY(orient, zero, tickPos);\n update.x2 = enter.x2 = ifY(orient, tickSize);\n exit.y = ifY(orient, tickPos);\n return guideMark({\n type: RuleMark,\n role: AxisTickRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction flushExpr(scale, threshold, a, b, c) {\n return {\n signal: 'flush(range(\"' + scale + '\"), ' + 'scale(\"' + scale + '\", datum.value), ' + threshold + ',' + a + ',' + b + ',' + c + ')'\n };\n}\n\nfunction axisLabels (spec, config, userEncode, dataRef, size, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n scale = spec.scale,\n sign = getSign(orient, -1, 1),\n flush = deref(_('labelFlush')),\n flushOffset = deref(_('labelFlushOffset')),\n labelAlign = _('labelAlign'),\n labelBaseline = _('labelBaseline');\n\n let flushOn = flush === 0 || !!flush,\n update;\n const tickSize = encoder(size);\n tickSize.mult = sign;\n tickSize.offset = encoder(_('labelPadding') || 0);\n tickSize.offset.mult = sign;\n const tickPos = {\n scale: scale,\n field: Value,\n band: 0.5,\n offset: extendOffset(band.offset, _('labelOffset'))\n };\n const align = ifX(orient, flushOn ? flushExpr(scale, flush, '\"left\"', '\"right\"', '\"center\"') : {\n value: 'center'\n }, ifRight(orient, 'left', 'right'));\n const baseline = ifX(orient, ifTop(orient, 'bottom', 'top'), flushOn ? flushExpr(scale, flush, '\"top\"', '\"bottom\"', '\"middle\"') : {\n value: 'middle'\n });\n const offsetExpr = flushExpr(scale, flush, `-(${flushOffset})`, flushOffset, 0);\n flushOn = flushOn && flushOffset;\n const enter = {\n opacity: zero,\n x: ifX(orient, tickPos, tickSize),\n y: ifY(orient, tickPos, tickSize)\n };\n const encode = {\n enter: enter,\n update: update = {\n opacity: one,\n text: {\n field: Label\n },\n x: enter.x,\n y: enter.y,\n align,\n baseline\n },\n exit: {\n opacity: zero,\n x: enter.x,\n y: enter.y\n }\n };\n addEncoders(encode, {\n dx: !labelAlign && flushOn ? ifX(orient, offsetExpr) : null,\n dy: !labelBaseline && flushOn ? ifY(orient, offsetExpr) : null\n });\n addEncoders(encode, {\n angle: _('labelAngle'),\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontWeight: _('labelFontWeight'),\n fontStyle: _('labelFontStyle'),\n limit: _('labelLimit'),\n lineHeight: _('labelLineHeight')\n }, {\n align: labelAlign,\n baseline: labelBaseline\n });\n\n const bound = _('labelBound');\n\n let overlap = _('labelOverlap'); // if overlap method or bound defined, request label overlap removal\n\n\n overlap = overlap || bound ? {\n separation: _('labelSeparation'),\n method: overlap,\n order: 'datum.index',\n bound: bound ? {\n scale,\n orient,\n tolerance: bound\n } : null\n } : undefined;\n\n if (update.align !== align) {\n update.align = patch(update.align, align);\n }\n\n if (update.baseline !== baseline) {\n update.baseline = patch(update.baseline, baseline);\n }\n\n return guideMark({\n type: TextMark,\n role: AxisLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: dataRef,\n encode,\n overlap\n }, userEncode);\n}\n\nfunction axisTitle (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n sign = getSign(orient, -1, 1);\n\n let enter, update;\n const encode = {\n enter: enter = {\n opacity: zero,\n anchor: encoder(_('titleAnchor', null)),\n align: {\n signal: alignExpr$1\n }\n },\n update: update = extend({}, enter, {\n opacity: one,\n text: encoder(spec.title)\n }),\n exit: {\n opacity: zero\n }\n };\n const titlePos = {\n signal: `lerp(range(\"${spec.scale}\"), ${anchorExpr(0, 1, 0.5)})`\n };\n update.x = ifX(orient, titlePos);\n update.y = ifY(orient, titlePos);\n enter.angle = ifX(orient, zero, mult(sign, 90));\n enter.baseline = ifX(orient, ifTop(orient, Bottom, Top), {\n value: Bottom\n });\n update.angle = enter.angle;\n update.baseline = enter.baseline;\n addEncoders(encode, {\n fill: _('titleColor'),\n fillOpacity: _('titleOpacity'),\n font: _('titleFont'),\n fontSize: _('titleFontSize'),\n fontStyle: _('titleFontStyle'),\n fontWeight: _('titleFontWeight'),\n limit: _('titleLimit'),\n lineHeight: _('titleLineHeight')\n }, {\n // require update\n align: _('titleAlign'),\n angle: _('titleAngle'),\n baseline: _('titleBaseline')\n });\n autoLayout(_, orient, encode, userEncode);\n encode.update.align = patch(encode.update.align, enter.align);\n encode.update.angle = patch(encode.update.angle, enter.angle);\n encode.update.baseline = patch(encode.update.baseline, enter.baseline);\n return guideMark({\n type: TextMark,\n role: AxisTitleRole,\n style: GuideTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction autoLayout(_, orient, encode, userEncode) {\n const auto = (value, dim) => value != null ? (encode.update[dim] = patch(encoder(value), encode.update[dim]), false) : !has(dim, userEncode) ? true : false;\n\n const autoY = auto(_('titleX'), 'x'),\n autoX = auto(_('titleY'), 'y');\n encode.enter.auto = autoX === autoY ? encoder(autoX) : ifX(orient, encoder(autoX), encoder(autoY));\n}\n\nfunction parseAxis (spec, scope) {\n const config = axisConfig(spec, scope),\n encode = spec.encode || {},\n axisEncode = encode.axis || {},\n name = axisEncode.name || undefined,\n interactive = axisEncode.interactive,\n style = axisEncode.style,\n _ = lookup(spec, config),\n band = tickBand(_); // single-element data source for axis group\n\n\n const datum = {\n scale: spec.scale,\n ticks: !!_('ticks'),\n labels: !!_('labels'),\n grid: !!_('grid'),\n domain: !!_('domain'),\n title: spec.title != null\n };\n const dataRef = ref(scope.add(Collect({}, [datum]))); // data source for axis ticks\n\n const ticksRef = ref(scope.add(AxisTicks({\n scale: scope.scaleRef(spec.scale),\n extra: scope.property(band.extra),\n count: scope.objectProperty(spec.tickCount),\n values: scope.objectProperty(spec.values),\n minstep: scope.property(spec.tickMinStep),\n formatType: scope.property(spec.formatType),\n formatSpecifier: scope.property(spec.format)\n }))); // generate axis marks\n\n const children = [];\n let size; // include axis gridlines if requested\n\n if (datum.grid) {\n children.push(axisGrid(spec, config, encode.grid, ticksRef, band));\n } // include axis ticks if requested\n\n\n if (datum.ticks) {\n size = _('tickSize');\n children.push(axisTicks(spec, config, encode.ticks, ticksRef, size, band));\n } // include axis labels if requested\n\n\n if (datum.labels) {\n size = datum.ticks ? size : 0;\n children.push(axisLabels(spec, config, encode.labels, ticksRef, size, band));\n } // include axis domain path if requested\n\n\n if (datum.domain) {\n children.push(axisDomain(spec, config, encode.domain, dataRef));\n } // include axis title if defined\n\n\n if (datum.title) {\n children.push(axisTitle(spec, config, encode.title, dataRef));\n } // parse axis specification\n\n\n return parseMark(guideGroup({\n role: AxisRole,\n from: dataRef,\n encode: extendEncode(buildAxisEncode(_, spec), axisEncode, Skip),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\n\nfunction buildAxisEncode(_, spec) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n offset: _('offset') || 0,\n position: value(spec.position, 0),\n titlePadding: _('titlePadding'),\n minExtent: _('minExtent'),\n maxExtent: _('maxExtent'),\n range: {\n signal: `abs(span(range(\"${spec.scale}\")))`\n },\n translate: _('translate'),\n // accessibility support\n format: spec.format,\n formatType: spec.formatType\n });\n return encode;\n}\n\nfunction parseScope (spec, scope, preprocessed) {\n const signals = array(spec.signals),\n scales = array(spec.scales); // parse signal definitions, if not already preprocessed\n\n if (!preprocessed) signals.forEach(_ => parseSignal(_, scope)); // parse cartographic projection definitions\n\n array(spec.projections).forEach(_ => parseProjection(_, scope)); // initialize scale references\n\n scales.forEach(_ => initScale(_, scope)); // parse data sources\n\n array(spec.data).forEach(_ => parseData(_, scope)); // parse scale definitions\n\n scales.forEach(_ => parseScale(_, scope)); // parse signal updates\n\n (preprocessed || signals).forEach(_ => parseSignalUpdates(_, scope)); // parse axis definitions\n\n array(spec.axes).forEach(_ => parseAxis(_, scope)); // parse mark definitions\n\n array(spec.marks).forEach(_ => parseMark(_, scope)); // parse legend definitions\n\n array(spec.legends).forEach(_ => parseLegend(_, scope)); // parse title, if defined\n\n if (spec.title) parseTitle(spec.title, scope); // parse collected lambda (anonymous) expressions\n\n scope.parseLambdas();\n return scope;\n}\n\nconst rootEncode = spec => extendEncode({\n enter: {\n x: {\n value: 0\n },\n y: {\n value: 0\n }\n },\n update: {\n width: {\n signal: 'width'\n },\n height: {\n signal: 'height'\n }\n }\n}, spec);\n\nfunction parseView(spec, scope) {\n const config = scope.config; // add scenegraph root\n\n const root = ref(scope.root = scope.add(operator())); // parse top-level signal definitions\n\n const signals = collectSignals(spec, config);\n signals.forEach(_ => parseSignal(_, scope)); // assign description, event, legend, and locale configuration\n\n scope.description = spec.description || config.description;\n scope.eventConfig = config.events;\n scope.legends = scope.objectProperty(config.legend && config.legend.layout);\n scope.locale = config.locale; // store root group item\n\n const input = scope.add(Collect()); // encode root group item\n\n const encode = scope.add(Encode(parseEncode(rootEncode(spec.encode), GroupMark, FrameRole, spec.style, scope, {\n pulse: ref(input)\n }))); // perform view layout\n\n const parent = scope.add(ViewLayout({\n layout: scope.objectProperty(spec.layout),\n legends: scope.legends,\n autosize: scope.signalRef('autosize'),\n mark: root,\n pulse: ref(encode)\n }));\n scope.operators.pop(); // parse remainder of specification\n\n scope.pushState(ref(encode), ref(parent), null);\n parseScope(spec, scope, signals);\n scope.operators.push(parent); // bound / render / sieve root item\n\n let op = scope.add(Bound({\n mark: root,\n pulse: ref(parent)\n }));\n op = scope.add(Render({\n pulse: ref(op)\n }));\n op = scope.add(Sieve({\n pulse: ref(op)\n })); // track metadata for root item\n\n scope.addData('root', new DataScope(scope, input, input, op));\n return scope;\n}\n\nfunction signalObject(name, value) {\n return value && value.signal ? {\n name,\n update: value.signal\n } : {\n name,\n value\n };\n}\n/**\n * Collect top-level signals, merging values as needed. Signals\n * defined in the config signals arrays are added only if that\n * signal is not explicitly defined in the specification.\n * Built-in signals (autosize, background, padding, width, height)\n * receive special treatment. They are initialized using the\n * top-level spec property, or, if undefined in the spec, using\n * the corresponding top-level config property. If this property\n * is a signal reference object, the signal expression maps to the\n * signal 'update' property. If the spec's top-level signal array\n * contains an entry that matches a built-in signal, that entry\n * will be merged with the built-in specification, potentially\n * overwriting existing 'value' or 'update' properties.\n */\n\n\nfunction collectSignals(spec, config) {\n const _ = name => value(spec[name], config[name]),\n signals = [signalObject('background', _('background')), signalObject('autosize', parseAutosize(_('autosize'))), signalObject('padding', parsePadding(_('padding'))), signalObject('width', _('width') || 0), signalObject('height', _('height') || 0)],\n pre = signals.reduce((p, s) => (p[s.name] = s, p), {}),\n map = {}; // add spec signal array\n\n\n array(spec.signals).forEach(s => {\n if (hasOwnProperty(pre, s.name)) {\n // merge if built-in signal\n s = extend(pre[s.name], s);\n } else {\n // otherwise add to signal list\n signals.push(s);\n }\n\n map[s.name] = s;\n }); // add config signal array\n\n array(config.signals).forEach(s => {\n if (!hasOwnProperty(map, s.name) && !hasOwnProperty(pre, s.name)) {\n // add to signal list if not already defined\n signals.push(s);\n }\n });\n return signals;\n}\n\nfunction Scope(config, options) {\n this.config = config || {};\n this.options = options || {};\n this.bindings = [];\n this.field = {};\n this.signals = {};\n this.lambdas = {};\n this.scales = {};\n this.events = {};\n this.data = {};\n this.streams = [];\n this.updates = [];\n this.operators = [];\n this.eventConfig = null;\n this.locale = null;\n this._id = 0;\n this._subid = 0;\n this._nextsub = [0];\n this._parent = [];\n this._encode = [];\n this._lookup = [];\n this._markpath = [];\n}\n\nfunction Subscope(scope) {\n this.config = scope.config;\n this.options = scope.options;\n this.legends = scope.legends;\n this.field = Object.create(scope.field);\n this.signals = Object.create(scope.signals);\n this.lambdas = Object.create(scope.lambdas);\n this.scales = Object.create(scope.scales);\n this.events = Object.create(scope.events);\n this.data = Object.create(scope.data);\n this.streams = [];\n this.updates = [];\n this.operators = [];\n this._id = 0;\n this._subid = ++scope._nextsub[0];\n this._nextsub = scope._nextsub;\n this._parent = scope._parent.slice();\n this._encode = scope._encode.slice();\n this._lookup = scope._lookup.slice();\n this._markpath = scope._markpath;\n}\n\nScope.prototype = Subscope.prototype = {\n parse(spec) {\n return parseScope(spec, this);\n },\n\n fork() {\n return new Subscope(this);\n },\n\n isSubscope() {\n return this._subid > 0;\n },\n\n toRuntime() {\n this.finish();\n return {\n description: this.description,\n operators: this.operators,\n streams: this.streams,\n updates: this.updates,\n bindings: this.bindings,\n eventConfig: this.eventConfig,\n locale: this.locale\n };\n },\n\n id() {\n return (this._subid ? this._subid + ':' : 0) + this._id++;\n },\n\n add(op) {\n this.operators.push(op);\n op.id = this.id(); // if pre-registration references exist, resolve them now\n\n if (op.refs) {\n op.refs.forEach(ref => {\n ref.$ref = op.id;\n });\n op.refs = null;\n }\n\n return op;\n },\n\n proxy(op) {\n const vref = op instanceof Entry ? ref(op) : op;\n return this.add(Proxy({\n value: vref\n }));\n },\n\n addStream(stream) {\n this.streams.push(stream);\n stream.id = this.id();\n return stream;\n },\n\n addUpdate(update) {\n this.updates.push(update);\n return update;\n },\n\n // Apply metadata\n finish() {\n let name, ds; // annotate root\n\n if (this.root) this.root.root = true; // annotate signals\n\n for (name in this.signals) {\n this.signals[name].signal = name;\n } // annotate scales\n\n\n for (name in this.scales) {\n this.scales[name].scale = name;\n } // annotate data sets\n\n\n function annotate(op, name, type) {\n let data, list;\n\n if (op) {\n data = op.data || (op.data = {});\n list = data[name] || (data[name] = []);\n list.push(type);\n }\n }\n\n for (name in this.data) {\n ds = this.data[name];\n annotate(ds.input, name, 'input');\n annotate(ds.output, name, 'output');\n annotate(ds.values, name, 'values');\n\n for (const field in ds.index) {\n annotate(ds.index[field], name, 'index:' + field);\n }\n }\n\n return this;\n },\n\n // ----\n pushState(encode, parent, lookup) {\n this._encode.push(ref(this.add(Sieve({\n pulse: encode\n }))));\n\n this._parent.push(parent);\n\n this._lookup.push(lookup ? ref(this.proxy(lookup)) : null);\n\n this._markpath.push(-1);\n },\n\n popState() {\n this._encode.pop();\n\n this._parent.pop();\n\n this._lookup.pop();\n\n this._markpath.pop();\n },\n\n parent() {\n return peek(this._parent);\n },\n\n encode() {\n return peek(this._encode);\n },\n\n lookup() {\n return peek(this._lookup);\n },\n\n markpath() {\n const p = this._markpath;\n return ++p[p.length - 1];\n },\n\n // ----\n fieldRef(field, name) {\n if (isString(field)) return fieldRef$1(field, name);\n\n if (!field.signal) {\n error('Unsupported field reference: ' + stringValue(field));\n }\n\n const s = field.signal;\n let f = this.field[s];\n\n if (!f) {\n const params = {\n name: this.signalRef(s)\n };\n if (name) params.as = name;\n this.field[s] = f = ref(this.add(Field(params)));\n }\n\n return f;\n },\n\n compareRef(cmp) {\n let signal = false;\n\n const check = _ => isSignal(_) ? (signal = true, this.signalRef(_.signal)) : isExpr$1(_) ? (signal = true, this.exprRef(_.expr)) : _;\n\n const fields = array(cmp.field).map(check),\n orders = array(cmp.order).map(check);\n return signal ? ref(this.add(Compare({\n fields: fields,\n orders: orders\n }))) : compareRef(fields, orders);\n },\n\n keyRef(fields, flat) {\n let signal = false;\n\n const check = _ => isSignal(_) ? (signal = true, ref(sig[_.signal])) : _;\n\n const sig = this.signals;\n fields = array(fields).map(check);\n return signal ? ref(this.add(Key({\n fields: fields,\n flat: flat\n }))) : keyRef(fields, flat);\n },\n\n sortRef(sort) {\n if (!sort) return sort; // including id ensures stable sorting\n\n const a = aggrField(sort.op, sort.field),\n o = sort.order || Ascending;\n return o.signal ? ref(this.add(Compare({\n fields: a,\n orders: this.signalRef(o.signal)\n }))) : compareRef(a, o);\n },\n\n // ----\n event(source, type) {\n const key = source + ':' + type;\n\n if (!this.events[key]) {\n const id = this.id();\n this.streams.push({\n id: id,\n source: source,\n type: type\n });\n this.events[key] = id;\n }\n\n return this.events[key];\n },\n\n // ----\n hasOwnSignal(name) {\n return hasOwnProperty(this.signals, name);\n },\n\n addSignal(name, value) {\n if (this.hasOwnSignal(name)) {\n error('Duplicate signal name: ' + stringValue(name));\n }\n\n const op = value instanceof Entry ? value : this.add(operator(value));\n return this.signals[name] = op;\n },\n\n getSignal(name) {\n if (!this.signals[name]) {\n error('Unrecognized signal name: ' + stringValue(name));\n }\n\n return this.signals[name];\n },\n\n signalRef(s) {\n if (this.signals[s]) {\n return ref(this.signals[s]);\n } else if (!hasOwnProperty(this.lambdas, s)) {\n this.lambdas[s] = this.add(operator(null));\n }\n\n return ref(this.lambdas[s]);\n },\n\n parseLambdas() {\n const code = Object.keys(this.lambdas);\n\n for (let i = 0, n = code.length; i < n; ++i) {\n const s = code[i],\n e = parseExpression(s, this),\n op = this.lambdas[s];\n op.params = e.$params;\n op.update = e.$expr;\n }\n },\n\n property(spec) {\n return spec && spec.signal ? this.signalRef(spec.signal) : spec;\n },\n\n objectProperty(spec) {\n return !spec || !isObject(spec) ? spec : this.signalRef(spec.signal || propertyLambda(spec));\n },\n\n exprRef(code, name) {\n const params = {\n expr: parseExpression(code, this)\n };\n if (name) params.expr.$name = name;\n return ref(this.add(Expression(params)));\n },\n\n addBinding(name, bind) {\n if (!this.bindings) {\n error('Nested signals do not support binding: ' + stringValue(name));\n }\n\n this.bindings.push(extend({\n signal: name\n }, bind));\n },\n\n // ----\n addScaleProj(name, transform) {\n if (hasOwnProperty(this.scales, name)) {\n error('Duplicate scale or projection name: ' + stringValue(name));\n }\n\n this.scales[name] = this.add(transform);\n },\n\n addScale(name, params) {\n this.addScaleProj(name, Scale(params));\n },\n\n addProjection(name, params) {\n this.addScaleProj(name, Projection(params));\n },\n\n getScale(name) {\n if (!this.scales[name]) {\n error('Unrecognized scale name: ' + stringValue(name));\n }\n\n return this.scales[name];\n },\n\n scaleRef(name) {\n return ref(this.getScale(name));\n },\n\n scaleType(name) {\n return this.getScale(name).params.type;\n },\n\n projectionRef(name) {\n return this.scaleRef(name);\n },\n\n projectionType(name) {\n return this.scaleType(name);\n },\n\n // ----\n addData(name, dataScope) {\n if (hasOwnProperty(this.data, name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n\n return this.data[name] = dataScope;\n },\n\n getData(name) {\n if (!this.data[name]) {\n error('Undefined data set name: ' + stringValue(name));\n }\n\n return this.data[name];\n },\n\n addDataPipeline(name, entries) {\n if (hasOwnProperty(this.data, name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n\n return this.addData(name, DataScope.fromEntries(this, entries));\n }\n\n};\n\nfunction propertyLambda(spec) {\n return (isArray(spec) ? arrayLambda : objectLambda)(spec);\n}\n\nfunction arrayLambda(array) {\n const n = array.length;\n let code = '[';\n\n for (let i = 0; i < n; ++i) {\n const value = array[i];\n code += (i > 0 ? ',' : '') + (isObject(value) ? value.signal || propertyLambda(value) : stringValue(value));\n }\n\n return code + ']';\n}\n\nfunction objectLambda(obj) {\n let code = '{',\n i = 0,\n key,\n value;\n\n for (key in obj) {\n value = obj[key];\n code += (++i > 1 ? ',' : '') + stringValue(key) + ':' + (isObject(value) ? value.signal || propertyLambda(value) : stringValue(value));\n }\n\n return code + '}';\n}\n\n/**\n * Standard configuration defaults for Vega specification parsing.\n * Users can provide their own (sub-)set of these default values\n * by passing in a config object to the top-level parse method.\n */\nfunction defaults () {\n const defaultFont = 'sans-serif',\n defaultSymbolSize = 30,\n defaultStrokeWidth = 2,\n defaultColor = '#4c78a8',\n black = '#000',\n gray = '#888',\n lightGray = '#ddd';\n return {\n // default visualization description\n description: 'Vega visualization',\n // default padding around visualization\n padding: 0,\n // default for automatic sizing; options: 'none', 'pad', 'fit'\n // or provide an object (e.g., {'type': 'pad', 'resize': true})\n autosize: 'pad',\n // default view background color\n // covers the entire view component\n background: null,\n // default event handling configuration\n // preventDefault for view-sourced event types except 'wheel'\n events: {\n defaults: {\n allow: ['wheel']\n }\n },\n // defaults for top-level group marks\n // accepts mark properties (fill, stroke, etc)\n // covers the data rectangle within group width/height\n group: null,\n // defaults for basic mark types\n // each subset accepts mark properties (fill, stroke, etc)\n mark: null,\n arc: {\n fill: defaultColor\n },\n area: {\n fill: defaultColor\n },\n image: null,\n line: {\n stroke: defaultColor,\n strokeWidth: defaultStrokeWidth\n },\n path: {\n stroke: defaultColor\n },\n rect: {\n fill: defaultColor\n },\n rule: {\n stroke: black\n },\n shape: {\n stroke: defaultColor\n },\n symbol: {\n fill: defaultColor,\n size: 64\n },\n text: {\n fill: black,\n font: defaultFont,\n fontSize: 11\n },\n trail: {\n fill: defaultColor,\n size: defaultStrokeWidth\n },\n // style definitions\n style: {\n // axis & legend labels\n 'guide-label': {\n fill: black,\n font: defaultFont,\n fontSize: 10\n },\n // axis & legend titles\n 'guide-title': {\n fill: black,\n font: defaultFont,\n fontSize: 11,\n fontWeight: 'bold'\n },\n // headers, including chart title\n 'group-title': {\n fill: black,\n font: defaultFont,\n fontSize: 13,\n fontWeight: 'bold'\n },\n // chart subtitle\n 'group-subtitle': {\n fill: black,\n font: defaultFont,\n fontSize: 12\n },\n // defaults for styled point marks in Vega-Lite\n point: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'circle'\n },\n circle: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth\n },\n square: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'square'\n },\n // defaults for styled group marks in Vega-Lite\n cell: {\n fill: 'transparent',\n stroke: lightGray\n }\n },\n // defaults for title\n title: {\n orient: 'top',\n anchor: 'middle',\n offset: 4,\n subtitlePadding: 3\n },\n // defaults for axes\n axis: {\n minExtent: 0,\n maxExtent: 200,\n bandPosition: 0.5,\n domain: true,\n domainWidth: 1,\n domainColor: gray,\n grid: false,\n gridWidth: 1,\n gridColor: lightGray,\n labels: true,\n labelAngle: 0,\n labelLimit: 180,\n labelOffset: 0,\n labelPadding: 2,\n ticks: true,\n tickColor: gray,\n tickOffset: 0,\n tickRound: true,\n tickSize: 5,\n tickWidth: 1,\n titlePadding: 4\n },\n // correction for centering bias\n axisBand: {\n tickOffset: -0.5\n },\n // defaults for cartographic projection\n projection: {\n type: 'mercator'\n },\n // defaults for legends\n legend: {\n orient: 'right',\n padding: 0,\n gridAlign: 'each',\n columnPadding: 10,\n rowPadding: 2,\n symbolDirection: 'vertical',\n gradientDirection: 'vertical',\n gradientLength: 200,\n gradientThickness: 16,\n gradientStrokeColor: lightGray,\n gradientStrokeWidth: 0,\n gradientLabelOffset: 2,\n labelAlign: 'left',\n labelBaseline: 'middle',\n labelLimit: 160,\n labelOffset: 4,\n labelOverlap: true,\n symbolLimit: 30,\n symbolType: 'circle',\n symbolSize: 100,\n symbolOffset: 0,\n symbolStrokeWidth: 1.5,\n symbolBaseFillColor: 'transparent',\n symbolBaseStrokeColor: gray,\n titleLimit: 180,\n titleOrient: 'top',\n titlePadding: 5,\n layout: {\n offset: 18,\n direction: 'horizontal',\n left: {\n direction: 'vertical'\n },\n right: {\n direction: 'vertical'\n }\n }\n },\n // defaults for scale ranges\n range: {\n category: {\n scheme: 'tableau10'\n },\n ordinal: {\n scheme: 'blues'\n },\n heatmap: {\n scheme: 'yellowgreenblue'\n },\n ramp: {\n scheme: 'blues'\n },\n diverging: {\n scheme: 'blueorange',\n extent: [1, 0]\n },\n symbol: ['circle', 'square', 'triangle-up', 'cross', 'diamond', 'triangle-right', 'triangle-down', 'triangle-left']\n }\n };\n}\n\nfunction parse (spec, config, options) {\n if (!isObject(spec)) {\n error('Input Vega specification must be an object.');\n }\n\n config = mergeConfig(defaults(), config, spec.config);\n return parseView(spec, new Scope(config, options)).toRuntime();\n}\n\nexport { AxisDomainRole, AxisGridRole, AxisLabelRole, AxisRole, AxisTickRole, AxisTitleRole, DataScope, FrameRole, LegendEntryRole, LegendLabelRole, LegendRole, LegendSymbolRole, LegendTitleRole, MarkRole, Scope, ScopeRole, defaults as config, parse, parseSignal as signal, parseSignalUpdates as signalUpdates, parseStream as stream };\n","// -- Transforms -----\n\nimport pkg from './package.json';\nimport {extend} from 'vega-util';\nimport {transforms} from 'vega-dataflow';\nimport * as tx from 'vega-transforms';\nimport * as vtx from 'vega-view-transforms';\nimport * as encode from 'vega-encode';\nimport * as geo from 'vega-geo';\nimport * as force from 'vega-force';\nimport * as tree from 'vega-hierarchy';\nimport * as label from 'vega-label';\nimport * as reg from 'vega-regression';\nimport * as voronoi from 'vega-voronoi';\nimport * as wordcloud from 'vega-wordcloud';\nimport * as xf from 'vega-crossfilter';\nextend(\n transforms,\n tx, vtx, encode, geo, force, label, tree, reg, voronoi, wordcloud, xf\n);\n\n\n// -- Exports -----\n\nexport const version = pkg.version;\n\nexport * from 'vega-statistics';\n\nexport * from 'vega-time';\n\nexport * from 'vega-util';\n\nexport * from 'vega-loader';\n\nexport * from 'vega-scenegraph';\n\nexport {\n Dataflow,\n EventStream,\n Parameters,\n Pulse,\n MultiPulse,\n Operator,\n Transform,\n changeset,\n ingest,\n isTuple,\n definition,\n transform,\n transforms,\n tupleid\n} from 'vega-dataflow';\n\nexport {\n scale,\n scheme,\n interpolate,\n interpolateColors,\n interpolateRange,\n quantizeInterpolator\n} from 'vega-scale';\n\nexport {\n projection\n} from 'vega-projection';\n\nexport {\n View\n} from 'vega-view';\n\nexport {\n numberFormatDefaultLocale as formatLocale,\n timeFormatDefaultLocale as timeFormatLocale,\n locale,\n defaultLocale,\n resetDefaultLocale\n} from 'vega-format';\n\nexport {\n expressionFunction\n} from 'vega-functions';\n\nexport {\n parse\n} from 'vega-parser';\n\nexport {\n context as runtimeContext\n} from 'vega-runtime';\n\nexport {\n codegen as codegenExpression,\n parse as parseExpression\n} from 'vega-expression';\n\nexport {\n selector as parseSelector\n} from 'vega-event-selector';\n"],"names":["accessor","fn","fields","name","fname","accessorName","accessorFields","getter","path","length","get1","getN","field","obj","len","i","error","message","Error","splitAccessPath","p","n","j","c","q","b","s","push","substring","opt","get","id","identity","_","zero","one","truthy","falsy","log$1","method","level","input","args","concat","slice","call","console","apply","logger","arguments","this","warn","info","debug","isArray","Array","isObject","Object","isLegalKey","key","mergeConfig","configs","reduce","out","source","signals","mergeNamed","r","layout","writeConfig","output","value","recurse","k","o","a","map","add","forEach","peek","array","toNumber","exp","sign","x","Math","log","symlog","log1p","abs","symexp","expm1","pow","exponent","pan","domain","delta","lift","ground","d0","d1","dd","panLinear","panLog","panPow","panSymlog","constant","zoom","anchor","scale","da","zoomLinear","zoomLog","zoomPow","zoomSymlog","quarter","date","Date","getMonth","utcquarter","getUTCMonth","clampRange","range","min","max","span","lo","hi","isFunction","compare","orders","ord","fmap","gen","comparator","f","keys","ascending","u","v","compare1","compareN","order","debounce","delay","handler","tid","e","clearTimeout","setTimeout","extend","extent","extentIndex","hop","prototype","hasOwnProperty","has","object","property","NULL","fastmap","test","has$1","size","empty","undefined","set","delete","clear","clean","next","flush","threshold","left","right","center","t","l","inherits","child","parent","members","proto","create","defineProperty","writable","enumerable","configurable","inrange","r0","r1","isBoolean","isDate","toString","isIterable","Symbol","iterator","isNumber","isRegExp","isString","flat","replace","lerp","frac","lruCache","maxsize","curr","prev","update","merge","array0","array1","n0","n1","merged","constructor","i0","i1","repeat","str","reps","pad","padchar","align","ceil","$","JSON","stringify","toBoolean","defaultParser","parse","toDate","parser","toSet","truncate","ellipsis","visitArray","filter","visitor","EOL","EOF","objectConverter","columns","Function","join","inferColumns","rows","columnSet","row","column","width","formatDate","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","isNaN","year","formatYear","getUTCFullYear","getUTCDate","delimiter","reFormat","RegExp","DELIMITER","charCodeAt","parseRows","text","N","I","eof","eol","token","preformatBody","formatValue","formatRow","convert","customConverter","format","formatBody","formatRows","topology","objects","type","features","geometries","feature","bbox","properties","geometry","transformPoint","transform","x0","y0","kx","ky","dx","translate","dy","arcs","arc","points","pop","reverse","point","line","ring","polygon","coordinates","stitchedArcs","fragmentByStart","fragmentByEnd","fragments","emptyIndex","start","end","g","p1","p0","dp","ends","fg","unshift","gf","meshArcs","extractArcs","stitch","geom","geomsByArc","extract0","extract1","extract2","extract3","geoms","NaN","mid","d","ascendingComparator","ascendingBisect","bisector","bisectRight","bisectLeft","number","Adder","_partials","Float64Array","_n","y","valueOf","e10","sqrt","e5","e2","stop","count","ticks","step","tickIncrement","isFinite","round","power","floor","LN10","tickStep","step0","step1","values","valueof","index","quickselect","m","z","sd","swap","quantile","from","numbers","value0","subarray","quantileSorted","arrays","flatten","sum","formatDecimalParts","toExponential","indexOf","coefficient","prefixExponent","re","formatSpecifier","specifier","match","exec","FormatSpecifier","fill","symbol","comma","precision","trim","toFixed","toLocaleString","toPrecision","formatRounded","toUpperCase","locale","formatPrefix","prefixes","grouping","thousands","group","Number","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","String","percent","minus","nan","newFormat","formatTypes","prefix","toLowerCase","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","formatTrim","Infinity","padding","definition","formatLocale","t0","t1","newInterval","floori","offseti","interval","offset","previous","setTime","every","millisecond","durationSecond","durationMinute","durationHour","durationDay","durationWeek","second","getMilliseconds","minute","getSeconds","getMinutes","hour","getHours","day","setHours","setDate","getDate","getTimezoneOffset","weekday","getDay","sunday","monday","thursday","month","setMonth","getFullYear","setFullYear","utcMinute","setUTCSeconds","utcHour","setUTCMinutes","utcDay","setUTCHours","setUTCDate","utcWeekday","getUTCDay","utcSunday","utcMonday","utcThursday","utcMonth","setUTCMonth","utcYear","setUTCFullYear","YEAR","QUARTER","MONTH","WEEK","DATE","DAY","DAYOFYEAR","HOURS","MINUTES","SECONDS","MILLISECONDS","TIME_UNITS","UNITS","timeUnits","units","unit","sort","defaultSpecifiers","timeUnitSpecifier","specifiers","fmt","localYear","dayofyear","localDayOfYear","week","localWeekNum","timeDay","timeWeek","localFirst","localDate","H","M","S","L","utcdayofyear","utcDayOfYear","utcweek","utcWeekNum","UTC","utcWeek","utcFirst","utcDate","inv","newDate","phase","getUnit","firstDay","localGet","localInv","w","timeFloor","utcGet","utcInv","utcFloor","timeIntervals","timeYear","timeMonth","timeHour","timeMinute","timeSecond","timeMillisecond","utcIntervals","utcSecond","utcMillisecond","timeInterval","utcInterval","ival","timeOffset","utcOffset","sequence","timeSequence","utcSequence","durationMonth","durationYear","Milli","Seconds","Minutes","Hours","Day","Month","Year","intervals","bin","ext","maxbins","target","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","formatRe","periodLookup","formatLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatDayOfMonth","formatMicroseconds","formatYearISO","formatFullYearISO","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatFullYear","formatZone","formatLiteralPercent","utcFormats","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCYearISO","formatUTCFullYearISO","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parses","string","parseSpecifier","parseDayOfMonth","parseMicroseconds","parseYear","parseFullYear","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parseQuarter","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseZone","parseLiteralPercent","pads","charAt","newParse","Z","Q","V","timeMonday","W","U","X","utcFormat","utcParse","timeFormat","timeParse","numberRe","percentRe","requoteRe","requote","names","Map","timeSunday","dISO","timeThursday","dow","UTCdISO","memoize","cache","spec","numberLocale","formatFloat","numberFormat","decimalChar","dec","idx","lastIndexOf","rightmostDigit","formatSpan","precisionPrefix","precisionRound","precisionFixed","defaultNumberLocale","defaultTimeLocale","resetNumberFormatDefaultLocale","numberFormatLocale","numberFormatDefaultLocale","timeMultiFormat","timeLocale","resetTimeFormatDefaultLocale","timeFormatLocale","timeFormatLocale$1","timeFormatDefaultLocale","createLocale","numberSpec","timeSpec","defaultLocale","protocol_re","allowed_re","whitespace_re","fileProtocol","async","load","uri","options","sanitize","url","href","localFile","file","http","fileAccess","result","isFile","loadFile","base","isAllowed","stringValue","hasProtocol","baseURL","startsWith","mode","defaultProtocol","rel","context","crossOrigin","fileLoader","fs","filename","Promise","accept","reject","readFile","data","fileReject","httpLoader","fetch","response","ok","status","statusText","httpReject","typeParsers","boolean","integer","unknown","typeTests","isInteger","typeList","inferType","inferTypes","types","delimitedFormat","delim","dsv","responseType","header","dsvFormat","json","prop","Buffer","isBuffer","copy","parseJSON","filters","interior","exterior","topojson","mesh","csv","tsv","reader","read","schema","timeParser","utcParser","datum","parsers","parts","pattern","split","loader","loaderFactory","UniqueList","idFunc","list","ids","remove","splice","asyncCallback","df","callback","err","TUPLE_ID_KEY","TUPLE_ID","isTuple","tupleid","setid","ingest$1","derive","rederive","stableCompare","cmp","isChangeSet","changeset","rem","mod","remp","modp","reflow","insert","modify","tuple","encode","pulse","tuples","cur","modifies","CACHE","Parameters","force","modified","OP_ID","NO_PARAMS","Operator","init","params","react","stamp","rank","qrank","flags","_update","parameters","flag","bit","state","targets","_targets","skip","initonly","argval","_argval","argops","_argops","deps","op","marshall","item","detach","evaluate","StopPropagation","run","rv","STREAM_ID","EventStream","receive","_filter","_apply","stream","consume","_consume","evt","val","trg","preventDefault","stopPropagation","throttle","pause","now","dataflow","between","active","SKIP","onStream","func","touch","onOperator","updater","connect","Pulse","materialize","visit","addFilter","MultiPulse","pulses","hash","changed","ADD","REM","MOD","changes","reentrant","ADD_REM","ADD_MOD","ALL","REFLOW","SOURCE","NO_SOURCE","NO_FIELDS","fork","clone","addAll","src","addF","remF","modF","srcF","cleans","runAfter","nomod","some","NO_OPT","Heap","nodes","siftdown","last","ridx","cidx","siftup","pidx","Dataflow","logLevel","_clock","_rank","_locale","_loader","_touched","_input","_pulse","_heap","_postrun","logMethod","_log","Transform","cleanThreshold","shift","sources","targetRank","rerank","queue","_enqueue","ingest","preload","pending","_pending","requests","done","loadPending","res","request","send","document","querySelectorAll","addEventListener","on","prerun","postrun","_getPulse","then","pr","priority","all","cb","runAsync","_running","enqueue","singlePulse","transforms","Definition","quantiles","quartiles","estimateBandwidth","mean","variance","deviation","h","maxb","logb","div","divide","minstep","steps","eps","nice","bootstrapCI","samples","alpha","mu","random","dotbin","smooth","thresh","smoothing","SQRT2PI","PI","SQRT2","nextSample","sampleNormal","stdev","rds","densityNormal","cumulativeNormal","cd","quantileNormal","erfinv","gaussian","sigma","dist","sample","pdf","cdf","icdf","kde","support","bandwidth","kernel","sampleLogNormal","densityLogNormal","cumulativeLogNormal","quantileLogNormal","lognormal","mixture","dists","weights","normalize","distributions","sampleUniform","densityUniform","cumulativeUniform","quantileUniform","uniform","ols","uX","uY","uXY","uX2","slope","Y","xv","yv","ux","uy","visitPoints","rSquared","predict","SSE","SST","sse","sst","linear","XY","X2","coef","ly","xy","YL","XYL","X2Y","c0","c1","YS","lx","quad","x2","X3","X4","X2X2","poly","lhs","rhs","matrix","gaussianElimination","uncenter","loess","bw","yhat","residuals","robustWeights","iter","edge","denom","xk","yk","tricube","xkw","updateInterval","medianResidual","median","arg","cnt","MIN_RADIANS","sampleCurve","minSteps","maxSteps","minX","maxX","pm","angleDelta","a0","atan2","a1","groupkey","measureName","as","noop","base_op","AggregateOps","cell","store","num","__count__","missing","valid","product","mean_d","average","req","dev","variancep","stdevp","stderr","distinct","ci0","ci1","q2","q1","q3","argmin","argmax","ValidAggregateOps","createMeasure","compareIndex","_ops","_out","compileMeasures","agg","ops","getreqs","resolve","ctr","TupleStore","_key","reset","measure","prototype$1","Aggregate","_adds","_mods","_alen","_mlen","_drop","_cross","_dims","_dnames","_measures","_countOnly","_counts","_prev","_inputs","_outputs","_add","_rem","_ext","_get","_q","quartile","ci","_ci","aggr","drop","cross","dims","vals","collect","cells","generate","inputs","outputs","inputMap","inputVisit","groupby","dname","cellkey","mname","outname","newcell","newtuple","measures","celltuple","counts","adds","mods","Bin","SortedList","resort","Collect","Compare","update$5","CountPattern","Cross","band","bins","_bins","b0","b1","root","process","tokens","tcase","tokenize","case","_parameterCheck","_match","_stop","_finish","stopwords","_tuples","Distributions","randomKDE","randomMixture","normal","randomNormal","randomLogNormal","randomUniform","FUNCTION","def","Density","fieldNames","partition$1","groups","distribution","minsteps","maxsteps","DotBin","Expression","update$4","expr","Extent","Subflow","Facet","_keys","Field","update$3","Filter","Flatten","Fold","Formula","Generate","autostep","detachSubflow","activate","flow","subflow","flows","sf","_group","detached","initTargets","act","rekey","k0","k1","isMod","revisit","maxlen","fnames","generator","Methods","Empty","Impute","JoinAggregate","KDE","Key","update$2","Load","Lookup","MultiExtent","update$1","extents","MultiValues","Params","Pivot","PreFacet","Project","Proxy","Quantile","gVals","kVal","impute","getValue","getField","fName","kName","gNames","keyvals","gKey","kMap","gMap","partition","_impute","cumulative","density","defaultValue","default","_transform","limit","pivotKeys","bind","aggregateParams","project","lut","dt","Relay","Sample","Sequence","Sieve","TimeUnit","probs","cap","OUTPUT","TupleIndex","Values","utc","timezone","_floor","u0","u1","timeBin","tunits","WindowOps","row_number","dense_rank","drank","percent_rank","cume_dist","cume","ntile","lag","lead","first_value","last_value","nth_value","nth","prev_value","next_value","find","ValidWindowOps","WindowState","windows","countOnly","visitInputs","param","WindowOp","Window","processPartition","ignorePeers","frame","setWindow","adjustRange","bisect","wind","pi","tau","epsilon","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","y2","arcTo","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","tan","acos","t01","t21","ccw","cos","sin","cw","rect","halfPi","asin","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","intersect","x3","y3","x10","y10","x32","y32","cornerTangents","rc","ox","oy","x11","y11","x00","y00","d2","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","Linear","_context","defined","curve","curveLinear","buffer","defined0","lineStart","lineEnd","pointX","pointY","area","x0z","y0z","areaStart","areaEnd","arealine","lineX0","lineY0","lineY1","lineX1","_line","_point","draw","that","Basis","BasisClosed","BasisOpen","Bundle","beta","_basis","_beta","_x2","_x3","_x4","_y2","_y3","_y4","_x","_y","custom","bundle","_k","Cardinal","tension","cardinal","CardinalClosed","_x5","_y5","CardinalOpen","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","_alpha","x23","y23","catmullRom","CatmullRomClosed","CatmullRomOpen","LinearClosed","slope3","h0","h1","s0","s1","slope2","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","Step","_t","domCanvas","createElement","getContext","height","_t0","px","py","domImage","Image","initRange","initInterpolator","interpolator","implicit","ordinal","factory","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","parseInt","rgbn","Rgb","rgba","hsla","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","Hsl","hslConvert","hsl","hsl2rgb","m1","m2","define","channels","assign","displayable","formatHsl","radians","degrees","Xn","Zn","t2","labConvert","Lab","Hcl","hcl2lab","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","hcl","A","B","C","E","ED","EB","BC_DA","cubehelixConvert","Cubehelix","bl","cubehelix","basis","v0","v1","v2","v3","t3","cosh","sinh","hue","gamma","nogamma","exponential","rgbGamma","colorRgb","rgbSpline","spline","colors","rgbBasis","rgbBasisClosed","basisClosed","isNumberArray","ArrayBuffer","isView","DataView","genericArray","nb","na","reA","reB","am","bm","bs","bi","lastIndex","numberArray","svgNode","translateX","translateY","rotate","skewX","scaleX","scaleY","atan","interpolateTransform","pxComma","pxParen","degParen","xa","ya","xb","yb","interpolateTransformCss","DOMMatrix","WebKitCSSMatrix","isIdentity","decompose","interpolateTransformSvg","createElementNS","setAttribute","baseVal","consolidate","zoomRho","rho","rho2","rho4","ux0","uy0","w0","ux1","uy1","w1","coshr0","tanh","duration","_1","_2","colorHsl","hslLong","colorHcl","hclLong","cubehelixGamma","colorCubehelix","cubehelixLong","piecewise","interpolate","colorLab","bimap","polymap","clamp","transformer","untransform","interpolateValue","rescale","clamper","invert","interpolateNumber","rangeRound","interpolateRound","continuous","tickFormat","linearish","prestep","maxIter","transformLog","transformExp","transformLogn","transformExpn","pow10","reflect","loggish","logs","pows","log10","log2","logp","powp","transformSymlog","transformSymexp","symlogish","transformPow","transformSqrt","transformSquare","powish","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","tickIntervals","tickInterval","k10","sequential","sequentialPow","k21","r2","divergingPow","bandSpace","paddingInner","paddingOuter","space","Log","Pow","Sqrt","Symlog","Time","Sequential","Quantize","Threshold","Ordinal","Point","Band","BinOrdinal","Continuous","Discrete","Discretizing","Interpolating","Temporal","scaleOrdinal","ordinalRange","range$1","invertRange","pointish","scales","metadata","invertExtent","invertRangeExtent","isValidScaleType","hasType","isContinuous","isDiscrete","isDiscretizing","isLogarithmic","isInterpolating","isQuantile","sequentialLog","sequentialSymlog","diverging","divergingLog","divergingSymlog","thresholds","quantize","scaleBinOrdinal","tickFormat$1","scaleProps","interpolateRange","interpolateColors","$$1","quantizeInterpolator","scaleFraction","scale$1","interp","palette","scheme","schemes","category10","category20","category20b","category20c","tableau10","tableau20","accent","dark2","paired","pastel1","pastel2","set1","set2","set3","blues","greens","greys","oranges","purples","reds","blueGreen","bluePurple","greenBlue","orangeRed","purpleBlue","purpleBlueGreen","purpleRed","redPurple","yellowGreen","yellowOrangeBrown","yellowOrangeRed","blueOrange","brownBlueGreen","purpleGreen","purpleOrange","redBlue","redGrey","yellowGreenBlue","redYellowBlue","redYellowGreen","pinkYellowGreen","spectral","viridis","magma","inferno","plasma","cividis","rainbow","sinebow","turbo","browns","tealBlues","teals","warmGreys","goldGreen","goldOrange","goldRed","lightGreyRed","lightGreyTeal","lightMulti","lightOrange","lightTealBlue","darkBlue","darkGold","darkGreen","darkMulti","darkRed","SymbolLegend","defaultFormatter","descending","tickCount","minStep","validTicks","endpoints","tickValues","noSkip","varfmt","tickLog","symbols","labelValues","binValues","thresholdValues","labelFormat","thresholdFormat","isDiscreteRange","formatRange","formatDiscrete","formatPoint","dflt","isTemporal","domainCaption","gradient_id","patternPrefix","isGradient","gradient","gradientRef","defs","Gradient","stops","lookup","curveBundle","curveCardinal","curveCardinalOpen","curveCardinalClosed","curveCatmullRom","curveCatmullRomClosed","curveCatmullRomOpen","horizontal","vertical","curves","orientation","entry","cmdlen","regexp","pathParse","pathstr","chunks","parsed","cmd","DegToRad","HalfPi","Tau","HalfSqrt3","segmentCache","bezierCache","bezier","th0","th1","rx","ry","sin_th","cos_th","a00","a01","a10","a11","cos_th0","sin_th0","cos_th1","sin_th1","th_half","sin_th_h2","temp","current","sX","sY","pathRender","tempX","tempY","tempControlX","tempControlY","controlX","controlY","beginPath","drawArc","coords","seg","large","sweep","rotateX","th","pl","sfactor_sq","sfactor","xc","yc","th_arc","segs","th2","th3","segments","bez","Tan30","builtins","customSymbol","rectangleX","rectangleY","rectangleWidth","rectangleHeight","vg_rect","crTL","crTR","crBL","crBR","rectangle","tl","tr","br","path$3","cornerRadius","vg_trail","ready","w2","ud","trail","value$1","arcShape","padRadius","da0","da1","ap","rp","rc0","rc1","oc","ax","ay","bx","by","kc","lc","centroid","arc$2","areavShape","area$2","areahShape","lineShape","line$2","rectShape","cornerRadiusTopLeft","cornerRadiusTopRight","cornerRadiusBottomRight","cornerRadiusBottomLeft","symbolShape","circle","symbol$2","shape","trailShape","hasCornerRadius","clip_id","resetSVGClipId","clip$1","renderer","clip","_defs","clipping","Bounds","union","Item","mark","bounds","GroupItem","items","ResourceLoader","customLoader","increment","decrement","boundStroke","miter","stroke","strokeOpacity","sw","strokeWidth","expand","strokeJoin","miterAdjustment","MAX_VALUE","equals","angle","rotatedPoints","encloses","alignsWith","intersects","contains","sanitizeURL","catch","loadImage","image$1","img","cors","onload","onerror","complete","poll","circleThreshold","rot","ma","mb","mc","md","addL","addX","addY","addp","addpL","boundContext","deg","context$1","px1","py1","px2","py2","quadExtrema","px3","py3","cubicExtrema","sa","ea","cubic","s2","canvas","intersectPath","brush","isPointInPath","intersectPoint","box","intersectRect","intersectRule","intersectBoxLine","blend","globalCompositeOperation","addStops","addColorStop","createRadialGradient","image","ictx","fillStyle","createLinearGradient","fillRect","createPattern","fillOpacity","globalAlpha","lw","strokeStyle","lineWidth","lineCap","strokeCap","lineJoin","miterLimit","strokeMiterLimit","setLineDash","strokeDash","lineDashOffset","strokeDashOffset","zindex","zorder","scene","zdirty","zitems","pickVisit","hit","drawAll","drawPath","drawOne","pick$1","gx","gy","pixelRatio","hitPath","filled","isPointInStroke","pickPath","translateItem","markItemPath","isect","tag","nested","attr","emit","rotateItem","bound","pick","markMultiItemPath","tip","orient","clipGroup","offset$1","strokeOffset","emitRectangle","off","rectanglePath","hitBackground","hitForeground","hitCorner","noBound","fore","strokeForeground","save","restore","dw","dh","ix","interactive","marktype","pickMark","content","background","foreground","getImage","imageWidth","aspect","imageHeight","imageXOffset","imageYOffset","baseline","toDataURL","ar0","ar1","imageSmoothingEnabled","drawImage","xOffset","yOffset","path$1","sx","sy","pathCache","path$2","transformItem","draw$2","rule","widthCache","textMetrics","fontSize","measureWidth","estimateWidth","useCanvas","use","_estimateWidth","textValue","currentFontHeight","_measureWidth","font","currentFont","measureText","lineHeight","textLines","lineBreak","multiLineOffset","widthGetter","rtl","dir","fontFamily","quote","fontStyle","fontVariant","fontWeight","textAlign","tempBounds","anchorPoint","radius","theta","Marks","lh","fillText","strokeText","boundItem","DUMMY","boundMark","hasItems","sceneToJSON","indent","sceneFromJSON","initialize","Scenegraph","createMark","role","aria","description","domCreate","doc","ns","domFind","el","childNodes","tagName","domChild","ownerDocument","insertBefore","domClear","removeChild","cssClass","event","getBoundingClientRect","clientX","clientLeft","clientY","top","clientTop","Handler","customTooltip","_active","_handlers","_tooltip","defaultTooltip","element","Renderer","_el","_bgcolor","toJSON","markdef","origin","_obj","firstChild","_origin","_scene","_handlerIndex","handlers","eventName","handleHref","MouseEvent","dispatchEvent","handleTooltip","show","tooltip","mdef","resolveItem","getItemBoundingClientRect","bottom","scaleFactor","resize","bgcolor","_width","_height","_scale","dirty","render","_call","_render","renderAsync","_ready","_load","redraw","DragEnterEvent","DragLeaveEvent","DragOverEvent","MouseDownEvent","MouseMoveEvent","MouseOutEvent","MouseOverEvent","ClickEvent","MouseWheelEvent","TouchStartEvent","TouchMoveEvent","TouchEndEvent","TooltipShowEvent","TooltipHideEvent","HrefEvent","CanvasHandler","_down","_touch","_first","_events","eventListenerCheck","eventBundle","fire","move","moveEvent","overEvent","outEvent","pickEvent","exit","inactive","_canvas","events","DOMMouseScroll","mousemove","dragover","mouseout","dragleave","mousedown","click","touchstart","changedTouches","touchmove","touchend","vegaType","window","devicePixelRatio","CanvasRenderer","_options","_redraw","_dirty","_tempb","base$1","SVGHandler","_hrefHandler","listener","_tooltipHandler","externalContext","appendChild","inDOM","HTMLElement","parentNode","ratio","style","setTransform","ctx","db","vb","viewBounds","clipToBounds","clearRect","__data__","svg","_svg","removeEventListener","ARIA_HIDDEN","ARIA_LABEL","ARIA_ROLE","ARIA_ROLEDESCRIPTION","GRAPHICS_OBJECT","GRAPHICS_SYMBOL","roledesc","label","AriaIgnore","AriaGuides","desc","caption","title","extractTitle","props","channelCaption","titleCaption","AriaEncode","ariaRole","ariaRoleDescription","ariaItemAttributes","hide","ariaMarkAttributes","ariaGuide","ariaMark","innerText","markup","buf","outer","inner","stack","open","attrs","close","serializeXML","node","_serialize","hasAttributes","attributes","hasChildNodes","children","nodeType","nodeValue","styles","rootAttributes","xmlns","svgns","SVGRenderer","_dirtyID","_root","dirtyParents","updateGradient","grad","pt","setAttributes","viewBox","preserveAspectRatio","fx","fy","fr","updateClipping","mask","sibling","__values__","bg","cg","ownerSVGElement","previousSibling","siblingCheck","nextSibling","_clearDefs","setAttributeNS","RootIndex","setProperty","removeAttribute","_dirtyCheck","_dirtyAll","isDirty","isGroup","lastChild","extra","mark_extras","setStyle","ts","textContent","removeAttributeNS","removeProperty","loc","location","SVGStringRenderer","_text","class","attrList","_hrefs","prefixed","display","Canvas","None","RenderType","PNG","SVG","modules","renderModule","hits","intersectMark","intersectGroup","visitMark","intersectItem","marks","headless","clipBounds","boundClip","sceneEqual","pathEqual","ka","kb","objectEqual","Top","Left","Right","Bottom","Start","Middle","End","Group","AxisRole","TitleRole","FrameRole","ScopeRole","LegendRole","RowHeader","RowFooter","RowTitle","ColHeader","ColFooter","ColTitle","Padding","Fit","FitX","FitY","All","Each","Flush","Column","Row","Bound","view","rebound","markBounds","COUNTER_NAME","Identifier","Mark","Overlap","counter","_signals","scenegraph","lookup$1","Init","methods","parity","greedy","sep","hasOverlap","hasBounds","Render","separation","boundScale","boundTolerance","tolerance","boundTest","boundOrient","isYAxis","axisLayout","axis","indices","grid","labels","axisIndices","position","minExtent","maxExtent","titlePadding","dl","axisTitleLayout","auto","bboxFlush","bboxFull","offsetValue","gridLayout","nodirty","alignCol","alignRow","padCol","padRow","ncols","nrows","xExtent","xMax","yExtent","yMax","boxes","trellisLayout","views","rowheaders","rowfooters","colheaders","colfooters","rowtitle","coltitle","gridLayoutGroups","boundFlush","boundFull","headerBand","layoutHeaders","footerBand","titleAnchor","titleBand","layoutTitle","headers","isX","bf","stride","back","legendParams","config","legends","offsets","mult","legendLayout","legend","_bounds","ex","ey","tpad","tx","ty","legendTitleOffset","legendGroupLayout","legendBounds","entries","widths","legendEntryLayout","lr","noBar","vgrad","ViewLayout","xBounds","yBounds","autosize","pos","subtitle","titleLayout","_autosize","viewWidth","viewHeight","_resizeView","viewSizeLayout","layoutGroup","shouldReflow","AxisTicks","DataJoin","defaultItemCreate","Encode","LegendEntries","newMap","fmod","encoders","reenter","enter","fraction","lskip","perc","adjust","labelFraction","perc2","sourceX","sourceY","targetX","targetY","LinkPath","Paths","rr","iy","sr","ta","sc","ss","tc","mr","Pie","includePad","Scale","domainCheck","adjustScheme","flip","SortItems","isContinuousColor","rawDomain","domainMid","Diverging","scaleKey","rangeStep","configureRangeStep","scheme$1","schemeExtent","interpolateGamma","schemeCount","configureScheme","interpolate$1","configureRange","domainRaw","configureBins","raw","includeZero","padDomain","domainMin","domainMax","domainImplicit","scaleImplicit","configureDomain","Zero","Center","Normalize","DefOutput","Stack","stackCenter","stackNormalize","stackZero","lastPos","lastNeg","epsilon2","quarterPi","hypot","streamGeometry","streamGeometryType","streamObjectType","Feature","FeatureCollection","Sphere","sphere","MultiPoint","LineString","streamLine","MultiLineString","Polygon","streamPolygon","MultiPolygon","GeometryCollection","closed","coordinate","polygonStart","polygonEnd","lambda00","phi00","lambda0","cosPhi0","sinPhi0","phi0","lambda1","phi1","lambda2","deltaSum","ranges","areaRingSum","areaSum","areaStream","areaRingStart","areaRingEnd","areaRing","areaPointFirst","areaPoint","lambda","phi","dLambda","sdLambda","adLambda","cosPhi","sinPhi","spherical","cartesian","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","W0","W1","X0","Y0","Z0","X1","Y1","Z1","Y2","Z2","z0","boundsStream","boundsPoint","boundsLineStart","boundsLineEnd","boundsRingPoint","boundsRingStart","boundsRingEnd","linePoint","inflection","phii","lambdai","antimeridian","rangeCompare","rangeContains","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointCartesian","centroidLinePointFirst","centroidLinePoint","centroidRingPointFirst","centroidRingPoint","cz","compose","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","circleRadius","cosRadius","lines","rejoin","Intersection","other","compareIntersection","startInside","subject","segment","pointEqual","link","isSubject","longitude","pointVisible","clipLine","sink","ringBuffer","clipBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","winding","point0","sinPhi1","cosPhi1","point1","absDelta","intersection","phiArc","polygonContains","clipRejoin","pointLine","ringSegments","validSegment","sign0","sign1","sinLambda0Lambda1","clipAntimeridianIntersect","to","direction","cr","smallRadius","notHemisphere","visible","two","n2","n2n2","n1n2","determinant","c2","n1xn2","uu","polar","code","v00","point2","sinRadius","circleStream","clipMax","clipMin","clipRectangle","corner","comparePoint","ca","x__","y__","v__","x_","y_","v_","first","activeStream","bufferStream","clipStream","polygonInside","cleanInside","graticuleX","graticuleY","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","PathContext","_radius","pointRadius","lengthRing","lengthSum","lengthStream","lengthPointFirst","lengthPoint","PathString","_string","projection","projectionStream","contextStream","pathArea","pathMeasure","pathBounds","pathCentroid","TransformStream","fit","fitBounds","clipExtent","geoStream","fitExtent","fitSize","fitWidth","fitHeight","_circle","cosMinDistance","delta2","resampleLineTo","depth","phi2","dx2","dy2","dz","b00","c00","resampleStream","ringPoint","resample","resampleNone","transformRadians","scaleTranslateRotate","scaleTranslate","cosAlpha","sinAlpha","ai","fi","projectionMutator","projectAt","projectResample","projectTransform","projectRotateTransform","cacheStream","preclip","clipAntimeridian","postclip","recenter","transformRotate","clipAngle","clipCircle","reflectX","reflectY","conicProjection","parallels","conicEqualAreaRaw","sy0","forward","cylindricalEqualAreaRaw","r0y","conicEqualArea","azimuthalRaw","azimuthalInvert","cc","azimuthalEqualAreaRaw","cxcy","azimuthalEquidistantRaw","mercatorRaw","mercatorProjection","reclip","tany","conicConformalRaw","equirectangularRaw","conicEquidistantRaw","nx","A1","A2","A3","A4","equalEarthRaw","l2","l6","gnomonicRaw","naturalEarth1Raw","phi4","orthographicRaw","stereographicRaw","transverseMercatorRaw","sqrt2","mollweideBromleyTheta","cp","cpsinPhi","mollweideRaw","mollweideBromleyRaw","defaultPath","geoPath","projectionProperties","proj","projections","getProjectionPath","albers","geoAlbers","albersusa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","albersUsa","streams","azimuthalequalarea","azimuthalequidistant","conicconformal","conicequalarea","geoConicEqualArea","conicequidistant","equalEarth","equirectangular","gnomonic","mercator","mollweide","naturalEarth1","orthographic","stereographic","transversemercator","cases","contours","smoothLinear","tz","contour","polygons","holes","startIndex","endIndex","isorings","hole","xt","yt","_0","ringContains","xi","yi","pj","xj","yj","segmentContains","collinear","Isocontour","transformPolygon","transformRing","bandwidthNRD","density2D","weight","values0","Float32Array","values1","blurX","blurY","sz","cellSize","LN2","KDE2D","levels","paths","transformPaths","PARAMS","Contour","post","GeoJSON","GeoPath","GeoPoint","GeoShape","Graticule","DX","DY","graticule","outline","extentMajor","extentMinor","stepMajor","stepMinor","geoGraticule","Heatmap","dependency","$x","$y","$value","$max","Projection","_features","_points","lon","lat","geojson","initPath","shapeGenerator","shared","dep","opacity_","color_","can","getImageData","pix","putImageData","toCanvas","featurize","collectGeoJSON","tree","xm","ym","xp","yp","leaf","defaultX","defaultY","quadtree","Quadtree","leaf_copy","treeProto","vx","vy","nodeById","nodeId","cover","xz","yz","quads","Quad","retainer","removeAll","visitAfter","dispatch","Dispatch","parseTypenames","typenames","typename","T","taskHead","taskTail","timeout","clockLast","clockNow","clockSkew","clock","performance","setFrame","requestAnimationFrame","clearNow","Timer","_time","_next","timer","restart","wake","timerFlush","sleep","nap","poke","clearInterval","setInterval","TypeError","initialAngle","simulation","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","lcg","tick","iterations","initializeNodes","initializeForce","randomSource","closest","ForceMap","strength","collide","radii","ri","ri2","prepare","rj","jiggle","_nodes","_random","nbody","strengths","distanceMin2","distanceMax2","theta2","accumulate","distanceMin","distanceMax","links","distances","bias","distance","initializeStrength","initializeDistance","Forces","ForceParams","ForceConfig","ForceOutput","Force","setup","sim","getForce","numForces","setForceParam","change","iters","forceSimulation","stopped","static","finish","defaultSeparation","meanXReduce","maxYReduce","hierarchy","mapChildren","objectChildren","childs","Node","eachBefore","computeHeight","copyData","circles","shuffle","enclosesWeak","encloseBasis","extendBasis","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","dr","encloseBasis1","r21","r3","a2","a3","b2","b3","c3","d3","ab","place","score","packEnclose","aa","sj","sk","pack","enclose","optional","required","constantZero","defaultRadius","radiusLeaf","packChildren","translateChild","eachAfter","each","ancestor","aNodes","ancestors","bNodes","leastCommonAncestor","descendants","leaves","preroot","ambiguous","defaultId","defaultParentId","parentId","stratify","nodeKey","nodeByKey","nextLeft","nextRight","moveSubtree","wm","wp","nextAncestor","vim","TreeNode","squarifyRatio","sumValue","minValue","maxValue","newRatio","minRatio","dice","treemapDice","treemapSlice","squarify","resquarify","_squarify","Nest","nest","valuesByKey","keyValue","HierarchyLayout","setParams","setFields","Output$3","Pack","Output$2","Partition","Stratify","positionNode","roundNode","parentKey","Layouts","tidy","nodeSize","treeRoot","firstWalk","secondWalk","sizeNode","siblings","executeShifts","midpoint","vip","vop","vom","sip","sop","som","apportion","cluster","previousNode","meanX","maxY","leafLeft","leafRight","Output$1","Tree","TreeLinks","Tiles","binary","sums","valueOffset","valueTarget","valueLeft","valueRight","slicedice","treemapSquarify","treemapResquarify","Output","Treemap","tile","paddingStack","paddingTop","paddingRight","paddingBottom","paddingLeft","treemap","markBitmaps","avoidMarks","labelInside","isGroupArea","border","Uint32Array","layer1","bitmap","layer2","RIGHT0","SIZE","RIGHT1","scaler","_set","_clear","getRange","indexStart","indexEnd","setRange","clearRange","outOfBounds","Bitmap","textWidth","textHeight","collision","bm0","bm1","X_DIR","Y_DIR","Aligns","Baselines","boundary","isInside","isInMarkBound","anchorCode","TOP","MIDDLE","BOTTOM","placeAreaLabel","bitmaps","avoidBaseMark","markIndex","areaWidth","maxAreaWidth","tryLabel","maxSize","_xMid","_yMid","swapTmp","labelPlaced","labelPlaced2","bm2","labelLayout","texts","lineAnchor","positions","getOffsets","anchors","Int8Array","getAnchors","grouptype","markBoundary","isNaiveGroupArea","baseBitmaps","sizeFactor","insideFactor","SQRT1_2","placeMarkLabel","Anchors","Label","Loess","regressionLoess","regressionLinear","regressionLog","regressionExp","regressionPow","regressionQuad","regressionPoly","Regression","dof","degreesOfFreedom","model","dom","EPSILON","EDGE_STACK","Delaunator","getX","defaultGetX","getY","defaultGetY","maxTriangles","_triangles","_halfedges","Int32Array","_hashSize","_hullPrev","_hullNext","_hullTri","_hullHash","_ids","_dists","hullPrev","hullNext","hullTri","hullHash","minY","i2","minDist","i0x","i0y","i1x","i1y","minRadius","circumradius","i2x","i2y","quicksort","hull","triangles","halfedges","cl","circumcenter","_cx","_cy","_hullStart","hullSize","_hashKey","trianglesLen","_addTriangle","_legalize","pseudoAngle","ar","al","inCircle","hbl","_link","orientIfSure","qx","qy","bp","tempDist","arr","tmp","Voronoi","delaunay","xmin","ymin","xmax","ymax","_circumcenters","vectors","_init","circumcenters","inedges","ti","tj","_renderSegment","_project","renderBounds","renderCell","_clip","cellPolygon","_regioncode","_clipSegment","_step","neighbors","cj","loop","li","aj","lj","_cell","e0","_clipInfinite","_clipFinite","e1","P","sx0","sx1","sy1","_edgecode","_edge","vx0","vy0","vxn","vyn","jitter","Delaunay","flatArray","flatIterable","_delaunator","_hullIndex","hullIndex","voronoi","dc","renderHull","renderPoints","hullPolygon","renderTriangle","trianglePolygon","defaultExtent","toPathString","cloudRadians","ch","cloud","spiral","archimedeanSpiral","words","board","dxdy","startX","startY","maxDelta","cloudCollide","collideRects","sprite","msx","contextAndRatio","zeroArray","tags","xoff","yoff","hasText","cloudSprite","cloudBounds","functor","spirals","di","w32","maxh","wcr","wsr","hcr","hsr","pixels","seen","seenRow","archimedean","rectangular","Wordcloud","fontSizeRange","fsize","sizeScale","array8","Uint8Array","array16","Uint16Array","array32","Dimension","query","onAdd","added","dim","SortedIndex","addi","oldv","oldi","addv","permute","index0","value1","index1","reindex","CrossFilter","lengthen","_index","Bitmaps","_indices","ResolveFilter","reinit","eval","bits","remMap","modMap","indexMap","incrementOne","incrementAll","old","lo1","hi1","lo0","hi0","ignore","pass","RawCode","Literal","Property","ArrayExpression","BinaryExpression","CallExpression","ConditionalExpression","LogicalExpression","MemberExpression","ObjectExpression","UnaryExpression","ASTNode","TokenName","lookahead","elements","callee","consequent","alternate","argument","SyntaxIdentifier","MessageUnexpectedToken","MessageInvalidRegExp","MessageUnterminatedRegExp","MessageStrictOctalLiteral","ILLEGAL","DISABLED","RegexNonAsciiIdentifierStart","RegexNonAsciiIdentifierPart","assert","condition","isDecimalDigit","isHexDigit","isOctalDigit","isWhiteSpace","isLineTerminator","isIdentifierStart","fromCharCode","isIdentifierPart","keywords","skipComment","scanHexEscape","throwError","scanUnicodeCodePointEscape","cu1","cu2","getEscapedIdentifier","substr","scanIdentifier","getIdentifier","scanPunctuator","code2","ch2","ch3","ch4","ch1","scanNumericLiteral","scanHexLiteral","octal","scanOctalLiteral","parseFloat","scanRegExp","body","classMarker","terminated","literal","scanRegExpBody","search","scanRegExpFlags","$0","$1","exception","testRegExp","regex","advance","scanStringLiteral","lex","finishBinaryExpression","operator","finishCallExpression","finishIdentifier","finishLiteral","finishMemberExpression","computed","member","finishProperty","kind","messageFormat","msg","whole","throwUnexpected","expect","matchKeyword","keyword","parseArrayInitialiser","parseConditionalExpression","finishArrayExpression","parseObjectPropertyKey","parseObjectProperty","parseObjectInitialiser","finishObjectExpression","legalKeywords","parsePrimaryExpression","parseExpression","parseGroupExpression","parseArguments","parseNonComputedMember","isIdentifierName","parseNonComputedProperty","parseComputedMember","parsePostfixExpression","parseLeftHandSideExpressionAllowCall","parseUnaryExpression","finishUnaryExpression","binaryPrecedence","prec","marker","markers","parseBinaryExpression","finishConditionalExpression","Constants","LOG2E","LOG10E","MIN_VALUE","Functions","codegen","cast","fncall","STRING","REGEXP","datetime","timezoneoffset","utcdate","utcday","utcyear","utcmonth","utchours","utcminutes","utcseconds","utcmilliseconds","upper","lower","if","allowed","forbidden","constants","functions","globalvar","fieldvar","outputGlobal","globals","memberDepth","ast","Generators","stripQuotes","Intersect","Union","UNIT_INDEX","testPoint","dval","selectionId","E_union","E_intersect","R_union","R_intersect","selectionVisitor","scope","indexName","IndexPrefix","dataName","getData","indataRef","tuplesRef","wrap","dateObj","setYear","dataVisitor","scaleVisitor","addScaleDependency","scaleName","scaleRef","getScale","internalScaleFunctions","fnctx","visitors","__bandwidth","_bandwidth","_range","ref","geoMethod","methodName","globalMethod","geoArea","geoBounds","deltaMax","geoCentroid","channel_luminance_value","channelValue","luminance","equal","equalArray","equalObject","removePredicate","accessors","seq","treeNodes","_window","functionContext","isDefined","isValid","indexof","lastindexof","repl","pluck","contrast","color1","color2","lum1","lum2","monthFormat","monthAbbrevFormat","dayFormat","dayAbbrevFormat","inScope","intersect$1","array$1","markname","pinchDistance","touches","pinchAngle","screen","containerSize","container","clientWidth","clientHeight","windowSize","innerWidth","innerHeight","bandspace","setdata","pathShape","retval","toggle","predicate","_trigger","eventFunctions","thisPrefix","astVisitors","codegenParams","codeGenerator","expressionFunction","signalName","getSignal","signalRef","$expr","$fields","$params","miss","unitIdx","isMulti","vl5","resUnit","resolved","multiRes","acc","Skip","Swap","canonicalType","expression","expressionCodegen","parameter","adjustSpatial","lt","gt","_compare","parseParameter","PARSERS","$ref","$key","$flat","parseParameters","$name","parameterExpression","$field","$encode","enc","encodeExpression","$output","$compare","$order","$tupleid","$subflow","subctx","operators","Context","Subcontext","ariaLabel","subcontext","isCollect","$ingest","$format","$request","unresolved","signal","operatorExpression","eventExpression","handlerExpression","eventConfig","parseOperator","parseOperatorParameters","parseStream","updates","parseUpdate","isOperator","srcid","dataset","getState","substate","setState","Default","setCursor","cursor","globalCursor","dataref","_runtime","_viewWidth","_viewHeight","eventExtend","_renderer","vega","itemGroup","extension","VIEW","NO_TRAP","trap","trackEventListener","_eventListeners","permit","_eventConfig","itemFilter","markTarget","invoke","Event","wrapper","form","checkbox","select","radio","checked","option","valuesEqual","selected","selectedIndex","prepend","initializeRenderer","querySelector","innerHTML","paddingObject","renderHeadless","module","_scenegraph","Width","Height","dataTest","signalTest","proxy","formatArray","formatTooltip","View","_elBind","_renderType","_handler","_globalCursor","_preventDefault","_timers","_resizeListeners","defaults","unpack","initializeEventConfig","runtime","_bind","bindings","_resize","resetSize","_resizeWidth","_resizeHeight","resizePadding","initializeResize","_background","user","hover","lookupSignal","findOperatorHandler","addOperatorListener","removeOperatorListener","resizeRenderer","_desc","_resetRenderer","rerun","addResizeListener","removeResizeListener","addSignalListener","removeSignalListener","addDataListener","removeDataListener","total","_restart","elapsed","timestamp","prevent","allow","finalize","timers","listeners","hoverSet","leaveSet","elBind","initializeAria","prevHandler","initializeHandler","binding","toImageURL","mime","blob","Blob","URL","createObjectURL","toBlobURL","toSVG","LBRACK","RBRACK","DEFAULT_MARKS","DEFAULT_SOURCE","MARKS","eventSelector","selector","parseMerge","parseSelector","endChar","pushChar","popChar","parseBetween","parseThrottle","isMarkType","parseAutosize","parsePadding","encoder","addEncode","addEncoders","extendEncode","MarkRole","LegendLabelRole","TitleTextRole","TitleSubtitleRole","applyDefault","entry$1","_color","resolveField","parseEncode","applyDefaults","parseBlock","block","parse$1","OUTER_INVALID","outerError","parseSignal","addSignal","addBinding","Entry","refs","fieldRef$1","keyFieldRef","compareRef","aggrField","Scope$1","isSignal","hasSignal","specValue","deref","mergeStream","nestedStream","eventStream","streamParameters","addStream","eventSource","markrole","filterMark","OP_VALUE_EXPR","isSubscope","mergeSources","addUpdate","streamSource","FIELD_REF_ID","MULTIDOMAIN_SORT_OPS","parseScale","parseScaleDomain","parseScaleRange","parseLiteral","parseScaleInterpolate","parseScaleNice","parseArray","objectProperty","parseScaleBins","dataLookupError","explicitDomain","multipleDomain","singularDomain","valuesRef","parseSort","domainRef","extentRef","coll","addDataPipeline","fieldRef","ordinalMultipleDomain","quantileMultipleDomain","numericMultipleDomain","countsRef","sortRef","multidomain","parseParameter$1","Index","Perc","Value","GuideLabelStyle","GuideTitleStyle","GroupTitleStyle","GroupSubtitleStyle","Symbols","Size","LegendScales","GroupMark","RectMark","RuleMark","TextMark","guideGroup","isVertical","symbolDirection","gradientDirection","gradientLength","gradientWidth","gradientThickness","gradientHeight","entryColumns","getEncoding","anchorExpr","alignExpr$1","extendOffset","guideMark","extras","legendGradient","userEncode","thickness","legendGradientDiscrete","dataRef","vv","legendGradientLabels","overlap","labelLimit","gradientLabelLimit","labelOffset","gradientLabelOffset","legendSymbolGroups","symbolOffset","valueRef","xSignal","yEncode","baseFill","baseStroke","symbolBaseFillColor","symbolBaseStrokeColor","facet","isL","isR","isLR","isVG","exprAlign","exprAnchor","exprAngle","exprBaseline","getRole","parseTransform","definition$1","pdef","lookupRef","parseIndexParameter","parseSubParameter","parseSubParameters","projectionRef","parameterValue","isExpr","isField","isCompare","outerExpr","exprRef","outerField","isData","getDataRef","DataScope","aggregate","fieldKey","addSortField","ds","optype","sortKey","parseTrigger","trigger","parseMark","layoutRef","boundRef","keyRef","parseData$1","joinRef","$context","markpath","markRef","generates","encodeRef","pushState","subscope","addData","toRuntime","parseFacet","parseSubflow","popState","tol","parseOverlap","sieve","parseLegend","legendEncode","entryLayout","scaleType","scaleCount","legendType","entryRef","tickMinStep","legendSymbolLayout","getChannel","getStyle","getFontSize","sizeExpression","_anchor","legendTitle","buildLegendEncode","fromEntries","parseTitle","buildTitle","titleEncode","buildSubTitle","groupEncode","parseData","upstream","analyze","getSign","ifLeftTopExpr","ifX","ifXEnc","ifY","ifYEnc","ifTop","ifTopExpr","$orient","ifEnc","ifExpr","ifRightExpr","isSimple","toExpr","ifOrient","patch","endsWith","fallback","axisConfig","styleProp","axisGrid","vscale","gridScale","tickPos","gridStart","gridEnd","flushExpr","axisLabels","flushOffset","labelAlign","labelBaseline","flushOn","tickSize","ifRight","offsetExpr","axisTitle","titlePos","autoY","autoX","autoLayout","parseAxis","or","axisBand","xyKeys","axisX","axisY","orientKeys","axisTop","axisBottom","axisLeft","axisRight","axisEncode","tickBand","ticksRef","axisTicks","pos0","pos1","axisDomain","buildAxisEncode","parseScope","preprocessed","addProjection","parseProjection","addScale","initScale","parseSignalUpdates","axes","parseLambdas","parseView","signalObject","pre","collectSignals","rootEncode","Scope","lambdas","_id","_subid","_nextsub","_parent","_encode","_lookup","_markpath","Subscope","propertyLambda","arrayLambda","objectLambda","vref","annotate","check","isExpr$1","sig","hasOwnSignal","addScaleProj","projectionType","dataScope","vtx","geo","reg","wordcloud","xf","version","pkg","defaultFont","defaultColor","lightGray","square","subtitlePadding","bandPosition","domainWidth","domainColor","gridWidth","gridColor","labelAngle","labelPadding","tickColor","tickOffset","tickRound","tickWidth","gridAlign","columnPadding","rowPadding","gradientStrokeColor","gradientStrokeWidth","labelOverlap","symbolLimit","symbolType","symbolSize","symbolStrokeWidth","titleLimit","titleOrient","category","heatmap","ramp","seed"],"mappings":"2PAAA,SAASA,EAAUC,EAAIC,EAAQC,UAC7BF,EAAGC,OAASA,GAAU,GACtBD,EAAGG,MAAQD,EACJF,EAET,SAASI,EAAaJ,UACP,MAANA,EAAa,KAAOA,EAAGG,MAEhC,SAASE,EAAeL,UACT,MAANA,EAAa,KAAOA,EAAGC,OAGhC,SAASK,EAAQC,UACQ,IAAhBA,EAAKC,OAAeC,EAAKF,EAAK,IAAMG,EAAKH,GAGlD,MAAME,EAAOE,GAAS,SAAUC,UACvBA,EAAID,IAGPD,EAAOH,UACLM,EAAMN,EAAKC,cACV,SAAUI,OACV,IAAIE,EAAI,EAAGA,EAAID,IAAOC,EACzBF,EAAMA,EAAIL,EAAKO,WAGVF,IAIX,SAASG,EAAOC,SACRC,MAAMD,GAGd,SAASE,EAAiBC,SAClBZ,EAAO,GACPa,EAAID,EAAEX,WAIRM,EACAO,EACAC,EALAC,EAAI,KACJC,EAAI,EACJC,EAAI,YAMCC,IACPnB,EAAKmB,KAAKD,EAAIN,EAAEQ,UAAUb,EAAGO,IAC7BI,EAAI,GACJX,EAAIO,EAAI,MALVF,GAAQ,GAQHL,EAAIO,EAAI,EAAGA,EAAID,IAAKC,KACvBC,EAAIH,EAAEE,GAEI,OAANC,EACFG,GAAKN,EAAEQ,UAAUb,EAAGO,GACpBI,GAAKN,EAAEQ,YAAYN,IAAKA,GACxBP,EAAIO,OACC,GAAIC,IAAMC,EACfG,IACAH,EAAI,KACJC,GAAK,MACA,CAAA,GAAID,WAEAT,IAAMU,GAAW,MAANF,GAGXR,IAAMU,GAAW,MAANF,GAFpBR,EAAIO,EAAI,EACRE,EAAID,GAIW,MAANA,GAAcE,EAMR,MAANF,GACLD,EAAIP,GAAGY,IACXF,EAAIV,EAAIO,EAAI,GACG,MAANC,IACJE,GAAGT,EAAM,qCAAuCI,GACjDK,EAAI,GAAGE,IACXF,EAAI,EACJV,EAAIO,EAAI,GAZJA,EAAIP,EACNY,IAEAZ,EAAIO,EAAI,SAaVG,GAAGT,EAAM,wCAA0CI,GACnDI,GAAGR,EAAM,sCAAwCI,GAEjDE,EAAIP,IACNO,IACAK,KAGKnB,EAGT,SAASI,EAAOA,EAAOT,EAAM0B,SACrBrB,EAAOW,EAAgBP,UAC7BA,EAAwB,IAAhBJ,EAAKC,OAAeD,EAAK,GAAKI,EAC/BZ,GAAU6B,GAAOA,EAAIC,KAAOvB,GAAQC,GAAO,CAACI,GAAQT,GAAQS,SAG/DmB,EAAKnB,EAAM,MACXoB,EAAWhC,GAASiC,GAAKA,GAAG,GAAI,YAChCC,EAAOlC,GAAS,IAAM,GAAG,GAAI,QAC7BmC,EAAMnC,GAAS,IAAM,GAAG,GAAI,OAC5BoC,EAASpC,GAAS,KAAM,GAAM,GAAI,QAClCqC,EAAQrC,GAAS,KAAM,GAAO,GAAI,SAExC,SAASsC,EAAMC,EAAQC,EAAOC,SACtBC,EAAO,CAACF,GAAOG,OAAO,GAAGC,MAAMC,KAAKJ,IAC1CK,QAAQP,GAAQQ,MAAMD,QAASJ,GAQjC,SAASM,EAAQf,EAAGM,OACdC,EAAQP,GAND,QAOJ,CACLO,MAAMP,UACAgB,UAAUxC,QACZ+B,GAASP,EACFiB,MAEAV,GAIXxB,eACMwB,GAjBM,GAiBYF,EAAMC,GAAU,QAAS,QAASU,WACjDC,MAGTC,cACMX,GArBG,GAqBYF,EAAMC,GAAU,OAAQ,OAAQU,WAC5CC,MAGTE,cACMZ,GAzBG,GAyBYF,EAAMC,GAAU,MAAO,OAAQU,WAC3CC,MAGTG,eACMb,GA7BI,GA6BYF,EAAMC,GAAU,MAAO,QAASU,WAC7CC,WAMTI,EAAUC,MAAMD,QAEpB,SAASE,EAAUvB,UACVA,IAAMwB,OAAOxB,GAGtB,MAAMyB,EAAaC,GAAe,cAARA,EAE1B,SAASC,KAAeC,UACfA,EAAQC,QAAO,CAACC,EAAKC,SACrB,MAAML,KAAOK,KACJ,YAARL,EAIFI,EAAIE,QAAUC,EAAWH,EAAIE,QAASD,EAAOC,aACxC,OAKCE,EAAY,WAARR,EAAmB,CAC3BS,OAAQ,GACE,UAART,GAAyB,KAC7BU,EAAYN,EAAKJ,EAAKK,EAAOL,GAAMQ,UAIhCJ,IACN,IAEL,SAASM,EAAYC,EAAQX,EAAKY,EAAOC,OAClCd,EAAWC,GAAM,WAClBc,EAAGC,KAEHlB,EAASe,KAAWjB,EAAQiB,OAGzBE,KAFLC,EAAIlB,EAASc,EAAOX,IAAQW,EAAOX,GAAOW,EAAOX,GAAO,GAE9CY,EACJC,KAAwB,IAAZA,GAAoBA,EAAQC,IAC1CJ,EAAYK,EAAGD,EAAGF,EAAME,IACff,EAAWe,KACpBC,EAAED,GAAKF,EAAME,SAIjBH,EAAOX,GAAOY,EAIlB,SAASL,EAAWS,EAAGlD,MACZ,MAALkD,EAAW,OAAOlD,QAChBmD,EAAM,GACNb,EAAM,YAEHc,EAAI5C,GACN2C,EAAI3C,EAAE9B,QACTyE,EAAI3C,EAAE9B,MAAQ,EACd4D,EAAIpC,KAAKM,WAIbR,EAAEqD,QAAQD,GACVF,EAAEG,QAAQD,GACHd,EAGT,SAASgB,EAAMC,UACNA,EAAMA,EAAMvE,OAAS,GAG9B,SAASwE,EAAUhD,UACL,MAALA,GAAmB,KAANA,EAAW,MAAQA,EAGzC,MAAMiD,EAAMC,GAAQC,GAAKD,EAAOE,KAAKH,IAAIE,GAEnCE,EAAMH,GAAQC,GAAKC,KAAKC,IAAIH,EAAOC,GAEnCG,EAAShE,GAAK6D,GAAKC,KAAKF,KAAKC,GAAKC,KAAKG,MAAMH,KAAKI,IAAIL,EAAI7D,IAE1DmE,EAASnE,GAAK6D,GAAKC,KAAKF,KAAKC,GAAKC,KAAKM,MAAMN,KAAKI,IAAIL,IAAM7D,EAE5DqE,EAAMC,GAAYT,GAAKA,EAAI,GAAKC,KAAKO,KAAKR,EAAGS,GAAYR,KAAKO,IAAIR,EAAGS,GAE3E,SAASC,EAAIC,EAAQC,EAAOC,EAAMC,SAC1BC,EAAKF,EAAKF,EAAO,IACjBK,EAAKH,EAAKlB,EAAKgB,IACfM,GAAMD,EAAKD,GAAMH,QAChB,CAACE,EAAOC,EAAKE,GAAKH,EAAOE,EAAKC,IAGvC,SAASC,EAAUP,EAAQC,UAClBF,EAAIC,EAAQC,EAAOf,EAAUjD,GAEtC,SAASuE,EAAOR,EAAQC,OAClBb,EAAOE,KAAKF,KAAKY,EAAO,WACrBD,EAAIC,EAAQC,EAAOV,EAAIH,GAAOD,EAAIC,IAE3C,SAASqB,EAAOT,EAAQC,EAAOH,UACtBC,EAAIC,EAAQC,EAAOJ,EAAIC,GAAWD,EAAI,EAAIC,IAEnD,SAASY,EAAUV,EAAQC,EAAOU,UACzBZ,EAAIC,EAAQC,EAAOT,EAAOmB,GAAWhB,EAAOgB,IAGrD,SAASC,EAAKZ,EAAQa,EAAQC,EAAOZ,EAAMC,SACnCC,EAAKF,EAAKF,EAAO,IACjBK,EAAKH,EAAKlB,EAAKgB,IACfe,EAAe,MAAVF,EAAiBX,EAAKW,IAAWT,EAAKC,GAAM,QAChD,CAACF,EAAOY,GAAMX,EAAKW,GAAMD,GAAQX,EAAOY,GAAMV,EAAKU,GAAMD,IAGlE,SAASE,EAAWhB,EAAQa,EAAQC,UAC3BF,EAAKZ,EAAQa,EAAQC,EAAO5B,EAAUjD,GAE/C,SAASgF,EAAQjB,EAAQa,EAAQC,SACzB1B,EAAOE,KAAKF,KAAKY,EAAO,WACvBY,EAAKZ,EAAQa,EAAQC,EAAOvB,EAAIH,GAAOD,EAAIC,IAEpD,SAAS8B,EAAQlB,EAAQa,EAAQC,EAAOhB,UAC/Bc,EAAKZ,EAAQa,EAAQC,EAAOjB,EAAIC,GAAWD,EAAI,EAAIC,IAE5D,SAASqB,EAAWnB,EAAQa,EAAQC,EAAOH,UAClCC,EAAKZ,EAAQa,EAAQC,EAAOtB,EAAOmB,GAAWhB,EAAOgB,IAG9D,SAASS,EAAQC,UACR,KAAO,IAAIC,KAAKD,GAAME,WAAa,GAE5C,SAASC,EAAWH,UACX,KAAO,IAAIC,KAAKD,GAAMI,cAAgB,GAG/C,SAASxC,EAAO/C,UACF,MAALA,EAAYqB,EAAQrB,GAAKA,EAAI,CAACA,GAAK,GAU5C,SAASwF,EAAYC,EAAOC,EAAKC,OAG3BC,EAFAC,EAAKJ,EAAM,GACXK,EAAKL,EAAM,UAGXK,EAAKD,IACPD,EAAOE,EACPA,EAAKD,EACLA,EAAKD,GAGPA,EAAOE,EAAKD,EACLD,GAAQD,EAAMD,EAAM,CAACA,EAAKC,GAAO,CAACE,EAAKzC,KAAKsC,IAAItC,KAAKuC,IAAIE,EAAIH,GAAMC,EAAMC,GAAOC,EAAKD,GAG9F,SAASG,EAAY/F,SACC,mBAANA,EAIhB,SAASgG,EAAS/H,EAAQgI,EAAQrG,GAChCA,EAAMA,GAAO,GACbqG,EAASlD,EAAMkD,IAAW,SACpBC,EAAM,GACNrG,EAAM,GACNsG,EAAO,GACPC,EAAMxG,EAAIyG,YAAcA,SAC9BtD,EAAM9E,GAAQ4E,SAAQ,CAACyD,EAAGxH,KACf,MAALwH,IACJJ,EAAIxG,KAVW,eAUNuG,EAAOnH,IAAqB,EAAI,GACzCe,EAAIH,KAAK4G,EAAIP,EAAWO,GAAKA,EAAI3H,EAAM2H,EAAG,KAAM1G,KAC/CvB,EAAeiI,IAAM,IAAIzD,SAAQ7C,GAAKmG,EAAKnG,GAAK,QAE7B,IAAfH,EAAIrB,OAAe,KAAOT,EAASqI,EAAIvG,EAAKqG,GAAM1E,OAAO+E,KAAKJ,UAEjEK,EAAY,CAACC,EAAGC,KAAOD,EAAIC,GAAU,MAALD,IAAmB,MAALC,GAAa,GAAKD,EAAIC,GAAU,MAALA,IAAmB,MAALD,EAAY,GAAKC,EAAIA,aAAatB,MAAQsB,EAAIA,GAAGD,EAAIA,aAAarB,MAAQqB,EAAIA,KAAOA,GAAKC,GAAMA,GAAK,EAAIA,GAAMA,GAAKD,GAAMA,EAAI,EAAI,GAEzNJ,EAAa,CAACpI,EAAQgI,IAA6B,IAAlBhI,EAAOO,OAAemI,EAAS1I,EAAO,GAAIgI,EAAO,IAAMW,EAAS3I,EAAQgI,EAAQhI,EAAOO,QAExHmI,EAAW,CAAChI,EAAOkI,IAAU,SAAUnE,EAAGlD,UACvCgH,EAAU7H,EAAM+D,GAAI/D,EAAMa,IAAMqH,GAGnCD,EAAW,CAAC3I,EAAQgI,EAAQ7G,KAChC6G,EAAOvG,KAAK,GAEL,SAAUgD,EAAGlD,OACd8G,EACAhH,EAAI,EACJR,GAAK,OAEI,IAANQ,KAAaR,EAAIM,GACtBkH,EAAIrI,EAAOa,GACXQ,EAAIkH,EAAUF,EAAE5D,GAAI4D,EAAE9G,WAGjBF,EAAI2G,EAAOnH,KAItB,SAAS2F,EAAUzE,UACV+F,EAAW/F,GAAKA,EAAI,IAAMA,EAGnC,SAAS8G,EAAUC,EAAOC,OACpBC,SACGC,IACDD,GAAKE,aAAaF,GACtBA,EAAMG,YAAW,KAAOJ,EAAQE,GAAID,EAAM,OAAOF,IAIrD,SAASM,GAAQrH,OACV,IAAImD,EAAGX,EAAG1D,EAAI,EAAGD,EAAMmC,UAAUxC,OAAQM,EAAID,IAAOC,MAGlD0D,KAFLW,EAAInC,UAAUlC,GAEJqE,EACRnD,EAAEwC,GAAKW,EAAEX,UAINxC,EAOT,SAASsH,GAAQvE,EAAOuD,OAElBlH,EACAsH,EACAhB,EACAC,EAJA7G,EAAI,KAMJiE,IAAU3D,EAAI2D,EAAMvE,WACb,MAAL8H,EAAW,KAERI,EAAI3D,EAAMjE,GAAIA,EAAIM,IAAW,MAALsH,GAAaA,GAAMA,GAAIA,EAAI3D,IAAQjE,QAEhE4G,EAAMC,EAAMe,EAEL5H,EAAIM,IAAKN,EACd4H,EAAI3D,EAAMjE,GAED,MAAL4H,IACEA,EAAIhB,IAAKA,EAAMgB,GACfA,EAAIf,IAAKA,EAAMe,QAGlB,KAEAA,EAAIJ,EAAEvD,EAAMjE,IAAKA,EAAIM,IAAW,MAALsH,GAAaA,GAAMA,GAAIA,EAAIJ,EAAEvD,IAAQjE,SAErE4G,EAAMC,EAAMe,EAEL5H,EAAIM,IAAKN,EACd4H,EAAIJ,EAAEvD,EAAMjE,IAEH,MAAL4H,IACEA,EAAIhB,IAAKA,EAAMgB,GACfA,EAAIf,IAAKA,EAAMe,UAMpB,CAAChB,EAAKC,GAGf,SAAS4B,GAAaxE,EAAOuD,SACrBlH,EAAI2D,EAAMvE,WAEZkE,EACAlD,EACAF,EACAmH,EACAC,EALA5H,GAAK,KAOA,MAALwH,EAAW,QACJxH,EAAIM,MACXI,EAAIuD,EAAMjE,GAED,MAALU,GAAaA,GAAKA,EAAG,CACvBkD,EAAIpD,EAAIE,WAKRV,IAAMM,EAAG,MAAO,EAAE,GAAI,OAC1BqH,EAAIC,EAAI5H,IAECA,EAAIM,GACXI,EAAIuD,EAAMjE,GAED,MAALU,IACEkD,EAAIlD,IACNkD,EAAIlD,EACJiH,EAAI3H,GAGFQ,EAAIE,IACNF,EAAIE,EACJkH,EAAI5H,QAIL,QACIA,EAAIM,MACXI,EAAI8G,EAAEvD,EAAMjE,GAAIA,EAAGiE,GAEV,MAALvD,GAAaA,GAAKA,EAAG,CACvBkD,EAAIpD,EAAIE,WAKRV,IAAMM,EAAG,MAAO,EAAE,GAAI,OAC1BqH,EAAIC,EAAI5H,IAECA,EAAIM,GACXI,EAAI8G,EAAEvD,EAAMjE,GAAIA,EAAGiE,GAEV,MAALvD,IACEkD,EAAIlD,IACNkD,EAAIlD,EACJiH,EAAI3H,GAGFQ,EAAIE,IACNF,EAAIE,EACJkH,EAAI5H,UAML,CAAC2H,EAAGC,GAGb,MAAMc,GAAMhG,OAAOiG,UAAUC,eAC7B,SAASC,GAAKC,EAAQC,UACbL,GAAI5G,KAAKgH,EAAQC,GAG1B,MAAMC,GAAO,GACb,SAASC,GAASvH,OAEZwH,EADApJ,EAAM,YAGDqJ,EAAMvG,UACNiG,GAAI/I,EAAK8C,IAAQ9C,EAAI8C,KAASoG,SAGjCnF,EAAM,CACVuF,KAAM,EACNC,MAAO,EACPP,OAAQhJ,EACR+I,IAAKM,EAELpI,IAAI6B,GACKuG,EAAMvG,GAAO9C,EAAI8C,QAAO0G,EAGjCC,IAAI3G,EAAKY,UACF2F,EAAMvG,OACPiB,EAAIuF,KACFtJ,EAAI8C,KAASoG,MAAQnF,EAAIwF,OAG/BvJ,EAAI8C,GAAOY,EACJrB,MAGTqH,OAAO5G,UACDuG,EAAMvG,OACNiB,EAAIuF,OACJvF,EAAIwF,MACNvJ,EAAI8C,GAAOoG,IAGN7G,MAGTsH,QACE5F,EAAIuF,KAAOvF,EAAIwF,MAAQ,EACvBxF,EAAIiF,OAAShJ,EAAM,IAGrBoJ,KAAKhI,UACCgB,UAAUxC,QACZwJ,EAAOhI,EACA2C,GAEAqF,GAIXQ,cACQC,EAAO,OACTP,EAAO,MAEN,MAAMxG,KAAO9C,EAAK,OACf0D,EAAQ1D,EAAI8C,GAEdY,IAAUwF,IAAUE,GAASA,EAAK1F,KACpCmG,EAAK/G,GAAOY,IACV4F,GAINvF,EAAIuF,KAAOA,EACXvF,EAAIwF,MAAQ,EACZxF,EAAIiF,OAAShJ,EAAM6J,WAInBjI,GAAOgB,OAAO+E,KAAK/F,GAAOqC,SAAQnB,IACpCiB,EAAI0F,IAAI3G,EAAKlB,EAAMkB,OAEdiB,EAGT,SAAS+F,GAAOjD,EAAOnD,EAAOqG,EAAWC,EAAMC,EAAOC,OAC/CH,GAA2B,IAAdA,EAAiB,OAAOG,QACpCC,GAAKJ,MAGPK,EAFAtG,EAAI+C,EAAM,GACVjG,EAAIsD,EAAK2C,GAGTjG,EAAIkD,IACNsG,EAAItG,EACJA,EAAIlD,EACJA,EAAIwJ,GAINA,EAAI5F,KAAKI,IAAIlB,EAAQI,SACfR,EAAIkB,KAAKI,IAAIhE,EAAI8C,UAEhB0G,EAAI9G,GAAK8G,GAAKD,EAAIH,EAAO1G,GAAK6G,EAAIF,EAAQC,EAGnD,SAASG,GAAUC,EAAOC,EAAQC,SAC1BC,EAAQH,EAAMzB,UAAYjG,OAAO8H,OAAOH,EAAO1B,kBACrDjG,OAAO+H,eAAeF,EAAO,cAAe,CAC1C/G,MAAO4G,EACPM,UAAU,EACVC,YAAY,EACZC,cAAc,IAETrC,GAAOgC,EAAOD,GAQvB,SAASO,GAASrH,EAAOmD,EAAOmD,EAAMC,OAGhCE,EAFAa,EAAKnE,EAAM,GACXoE,EAAKpE,EAAMA,EAAMjH,OAAS,UAG1BoL,EAAKC,IACPd,EAAIa,EACJA,EAAKC,EACLA,EAAKd,GAIPF,OAAkBT,IAAVS,GAAuBA,IAD/BD,OAAgBR,IAATQ,GAAsBA,GAEdgB,GAAMtH,EAAQsH,EAAKtH,KAAWuG,EAAQvG,GAASuH,EAAKvH,EAAQuH,GAG7E,SAASC,GAAW9J,SACE,kBAANA,EAGhB,SAAS+J,GAAQ/J,SAC8B,kBAAtCwB,OAAOiG,UAAUuC,SAASpJ,KAAKZ,GAGxC,SAASiK,GAAYjK,UACZA,GAAK+F,EAAW/F,EAAEkK,OAAOC,WAGlC,SAASC,GAAUpK,SACG,iBAANA,EAGhB,SAASqK,GAAUrK,SAC4B,oBAAtCwB,OAAOiG,UAAUuC,SAASpJ,KAAKZ,GAGxC,SAASsK,GAAUtK,SACG,iBAANA,EAGhB,SAAS0B,GAAKzD,EAAQsM,EAAM3K,GACtB3B,IACFA,EAASsM,EAAOxH,EAAM9E,GAAQ0E,KAAI2D,GAAKA,EAAEkE,QAAQ,SAAU,QAASzH,EAAM9E,UAGtEY,EAAMZ,GAAUA,EAAOO,OACvB4H,EAAMxG,GAAOA,EAAIC,KAAOvB,EACxBqE,EAAM2D,GAAKF,EAAImE,EAAO,CAACjE,GAAKpH,EAAgBoH,QAE9CtI,KAECa,EAIE,GAAY,IAARA,EAAW,OACdgB,EAAM8C,EAAI1E,EAAO,IAEvBD,EAAK,SAAUgC,SACN,GAAKH,EAAIG,QAEb,OACCH,EAAM5B,EAAO0E,IAAIA,GAEvB3E,EAAK,SAAUgC,OACTP,EAAI,GAAKI,EAAI,GAAGG,GAChBlB,EAAI,SAECA,EAAID,GAAKY,GAAK,IAAMI,EAAIf,GAAGkB,UAE7BP,QAlBTzB,EAAK,iBACI,WAqBJD,EAASC,EAAIC,EAAQ,OAG9B,SAASwM,GAAM1H,EAAO2H,SACd7E,EAAK9C,EAAM,GACX+C,EAAKhD,EAAKC,GACVuD,GAAKoE,SACHpE,EAAe,IAANA,EAAUR,EAAKD,EAAKS,GAAKR,EAAKD,GAAnCA,EAKd,SAAS8E,GAAUC,OAEbC,EAAMC,EAAM5C,EADhB0C,GAAWA,GAHY,UAMjBrC,EAAQ,KACZsC,EAAO,GACPC,EAAO,GACP5C,EAAO,GAGH6C,EAAS,CAACrJ,EAAKY,OACb4F,EAAO0C,IACXE,EAAOD,EACPA,EAAO,GACP3C,EAAO,GAGF2C,EAAKnJ,GAAOY,UAGrBiG,IACO,CACLA,MAAAA,EACAZ,IAAKjG,GAAOiG,GAAIkD,EAAMnJ,IAAQiG,GAAImD,EAAMpJ,GACxC7B,IAAK6B,GAAOiG,GAAIkD,EAAMnJ,GAAOmJ,EAAKnJ,GAAOiG,GAAImD,EAAMpJ,GAAOqJ,EAAOrJ,EAAKoJ,EAAKpJ,SAAQ0G,EACnFC,IAAK,CAAC3G,EAAKY,IAAUqF,GAAIkD,EAAMnJ,GAAOmJ,EAAKnJ,GAAOY,EAAQyI,EAAOrJ,EAAKY,IAI1E,SAAS0I,GAAOhF,EAASiF,EAAQC,EAAQ7I,SACjC8I,EAAKF,EAAOzM,OACZ4M,EAAKF,EAAO1M,WACb4M,EAAI,OAAOH,MACXE,EAAI,OAAOD,QACVG,EAAShJ,GAAU,IAAI4I,EAAOK,YAAYH,EAAKC,OACjDG,EAAK,EACLC,EAAK,EACL1M,EAAI,OAEDyM,EAAKJ,GAAMK,EAAKJ,IAAMtM,EAC3BuM,EAAOvM,GAAKkH,EAAQiF,EAAOM,GAAKL,EAAOM,IAAO,EAAIN,EAAOM,KAAQP,EAAOM,UAGnEA,EAAKJ,IAAMI,IAAMzM,EACtBuM,EAAOvM,GAAKmM,EAAOM,QAGdC,EAAKJ,IAAMI,IAAM1M,EACtBuM,EAAOvM,GAAKoM,EAAOM,UAGdH,EAGT,SAASI,GAAQC,EAAKC,OAChBlM,EAAI,UAECkM,GAAQ,GAAGlM,GAAKiM,SAElBjM,EAGT,SAASmM,GAAKF,EAAKlN,EAAQqN,EAASC,SAC5BxM,EAAIuM,GAAW,IACfpM,EAAIiM,EAAM,GACVtM,EAAIZ,EAASiB,EAAEjB,cACdY,GAAK,EAAIK,EAAc,SAAVqM,EAAmBL,GAAOnM,EAAGF,GAAKK,EAAc,WAAVqM,EAAqBL,GAAOnM,KAAMF,EAAI,IAAMK,EAAIgM,GAAOnM,EAAG8D,KAAK2I,KAAK3M,EAAI,IAAMK,EAAIgM,GAAOnM,EAAGF,GAQxJ,SAASwG,GAAM7C,UACNA,GAASD,EAAKC,GAASA,EAAM,IAAM,EAG5C,SAASiJ,GAAE7I,UACF9B,EAAQ8B,GAAK,IAAMA,EAAER,IAAIqJ,IAAK,IAAMzK,EAAS4B,IAAMmH,GAASnH,GAEnE8I,KAAKC,UAAU/I,GAAGqH,QAAQ,SAAU,WAAWA,QAAQ,SAAU,WAAarH,EAGhF,SAASgJ,GAAWnM,UACN,MAALA,GAAmB,KAANA,EAAW,QAAQA,GAAW,UAANA,GAAuB,MAANA,MAAsBA,EAGrF,MAAMoM,GAAgBpM,GAAKoK,GAASpK,IAAS+J,GAAO/J,GAAXA,EAAoBoF,KAAKiH,MAAMrM,GAExE,SAASsM,GAAQtM,EAAGuM,UAClBA,EAASA,GAAUH,GACP,MAALpM,GAAmB,KAANA,EAAW,KAAOuM,EAAOvM,GAG/C,SAASgK,GAAUhK,UACL,MAALA,GAAmB,KAANA,EAAW,KAAOA,EAAI,GAG5C,SAASwM,GAAOxM,SACRP,EAAI,GACJL,EAAIY,EAAExB,WAEP,IAAIM,EAAI,EAAGA,EAAIM,IAAKN,EAAGW,EAAEO,EAAElB,KAAM,SAE/BW,EAGT,SAASgN,GAAUf,EAAKlN,EAAQsN,EAAOY,SAC/BxF,EAAgB,MAAZwF,EAAmBA,EAAW,IAClCjN,EAAIiM,EAAM,GACVtM,EAAIK,EAAEjB,OACNwK,EAAI5F,KAAKuC,IAAI,EAAGnH,EAAS0I,EAAE1I,eAC1BY,GAAKZ,EAASiB,EAAc,SAAVqM,EAAmB5E,EAAIzH,EAAEkB,MAAMvB,EAAI4J,GAAe,WAAV8C,EAAqBrM,EAAEkB,MAAM,EAAGyC,KAAK2I,KAAK/C,EAAI,IAAM9B,EAAIzH,EAAEkB,MAAMvB,KAAO4J,EAAI,IAAMvJ,EAAEkB,MAAM,EAAGqI,GAAK9B,EAGpK,SAASyF,GAAY5J,EAAO6J,EAAQC,MAC9B9J,KACE6J,EAAQ,OACJxN,EAAI2D,EAAMvE,WAEX,IAAIM,EAAI,EAAGA,EAAIM,IAAKN,EAAG,OACpBiK,EAAI6D,EAAO7J,EAAMjE,IACnBiK,GAAG8D,EAAQ9D,EAAGjK,EAAGiE,SAGvBA,EAAMF,QAAQgK,GCj0BpB,IAAIC,GAAM,GACNC,GAAM,GAKV,SAASC,GAAgBC,UAChB,IAAIC,SAAS,IAAK,WAAaD,EAAQtK,KAAI,SAASzE,EAAMY,UACxDmN,KAAKC,UAAUhO,GAAQ,OAASY,EAAI,aAC1CqO,KAAK,KAAO,KAWjB,SAASC,GAAaC,OAChBC,EAAY9L,OAAO8H,OAAO,MAC1B2D,EAAU,UAEdI,EAAKxK,SAAQ,SAAS0K,OACf,IAAIC,KAAUD,EACXC,KAAUF,GACdL,EAAQvN,KAAK4N,EAAUE,GAAUA,MAKhCP,EAGT,SAASrB,GAAItJ,EAAOmL,OACdhO,EAAI6C,EAAQ,GAAI9D,EAASiB,EAAEjB,cACxBA,EAASiP,EAAQ,IAAInM,MAAMmM,EAAQjP,EAAS,GAAG2O,KAAK,GAAK1N,EAAIA,EAStE,SAASiO,GAAWvI,OACdwI,EAAQxI,EAAKyI,cACbC,EAAU1I,EAAK2I,gBACfC,EAAU5I,EAAK6I,gBACfC,EAAe9I,EAAK+I,4BACjBC,MAAMhJ,GAAQ,eAXvB,SAAoBiJ,UACXA,EAAO,EAAI,IAAMxC,IAAKwC,EAAM,GAC/BA,EAAO,KAAO,IAAMxC,GAAIwC,EAAM,GAC9BxC,GAAIwC,EAAM,GASRC,CAAWlJ,EAAKmJ,kBAAuB,IAAM1C,GAAIzG,EAAKI,cAAgB,EAAG,GAAK,IAAMqG,GAAIzG,EAAKoJ,aAAc,IAC1GN,EAAe,IAAMrC,GAAI+B,EAAO,GAAK,IAAM/B,GAAIiC,EAAS,GAAK,IAAMjC,GAAImC,EAAS,GAAK,IAAMnC,GAAIqC,EAAc,GAAK,IACnHF,EAAU,IAAMnC,GAAI+B,EAAO,GAAK,IAAM/B,GAAIiC,EAAS,GAAK,IAAMjC,GAAImC,EAAS,GAAK,IAChFF,GAAWF,EAAQ,IAAM/B,GAAI+B,EAAO,GAAK,IAAM/B,GAAIiC,EAAS,GAAK,IACjE,IAGO,YAASW,OAClBC,EAAW,IAAIC,OAAO,KAAQF,EAAY,SAC1CG,EAAYH,EAAUI,WAAW,YAW5BC,EAAUC,EAAMxI,OAKnByC,EAJAsE,EAAO,GACP0B,EAAID,EAAKtQ,OACTwQ,EAAI,EACJ5P,EAAI,EAEJ6P,EAAMF,GAAK,EACXG,GAAM,WAMDC,OACHF,EAAK,OAAOlC,MACZmC,EAAK,OAAOA,GAAM,EAAOpC,OAGzBhO,EAAUQ,EAAPD,EAAI2P,KAxFL,KAyFFF,EAAKF,WAAWvP,GAAc,MACzB2P,IAAMD,GA1FT,KA0FcD,EAAKF,WAAWI,IA1F9B,KA0F8CF,EAAKF,aAAaI,YAC/DlQ,EAAIkQ,IAAMD,EAAGE,GAAM,EA1FlB,MA2FI3P,EAAIwP,EAAKF,WAAWI,MAAmBE,GAAM,EA1FlD,KA2FI5P,IAAgB4P,GAAM,EA5FzB,KA4FmCJ,EAAKF,WAAWI,MAAkBA,GACpEF,EAAKnO,MAAMtB,EAAI,EAAGP,EAAI,GAAG0L,QAAQ,MAAO,UAI1CwE,EAAID,GAAG,IAjGN,MAkGDzP,EAAIwP,EAAKF,WAAW9P,EAAIkQ,MAAmBE,GAAM,OACjD,GAlGA,KAkGI5P,EAAgB4P,GAAM,EAnGzB,KAmGmCJ,EAAKF,WAAWI,MAAkBA,OACtE,GAAI1P,IAAMqP,EAAW,gBACnBG,EAAKnO,MAAMtB,EAAGP,UAIhBmQ,GAAM,EAAMH,EAAKnO,MAAMtB,EAAG0P,OAzGzB,KA+END,EAAKF,WAAWG,EAAI,MAAkBA,EA9EjC,KA+ELD,EAAKF,WAAWG,EAAI,MAAiBA,GA4BjChG,EAAIoG,OAAapC,IAAK,SACxBQ,EAAM,GACHxE,IAAM+D,IAAO/D,IAAMgE,IAAKQ,EAAI7N,KAAKqJ,GAAIA,EAAIoG,IAC5C7I,GAA4B,OAAtBiH,EAAMjH,EAAEiH,EAAKnO,OACvBiO,EAAK3N,KAAK6N,UAGLF,WAGA+B,EAAc/B,EAAMJ,UACpBI,EAAK1K,KAAI,SAAS4K,UAChBN,EAAQtK,KAAI,SAAS6K,UACnB6B,EAAY9B,EAAIC,OACtBL,KAAKqB,eAkBHc,EAAU/B,UACVA,EAAI5K,IAAI0M,GAAalC,KAAKqB,YAG1Ba,EAAY/M,UACH,MAATA,EAAgB,GACjBA,aAAiB8C,KAAOsI,GAAWpL,GACnCmM,EAASzG,KAAK1F,GAAS,IAAM,IAAOA,EAAMkI,QAAQ,KAAM,MAAU,IAClElI,QAGD,CACL+J,eA5FayC,EAAMxI,OACfiJ,EAAStC,EAASI,EAAOwB,EAAUC,GAAM,SAASvB,EAAKzO,MACrDyQ,EAAS,OAAOA,EAAQhC,EAAKzO,EAAI,GACrCmO,EAAUM,EAAKgC,EAAUjJ,EAtD/B,SAAyB2G,EAAS3G,OAC5BsB,EAASoF,GAAgBC,UACtB,SAASM,EAAKzO,UACZwH,EAAEsB,EAAO2F,GAAMzO,EAAGmO,IAmDMuC,CAAgBjC,EAAKjH,GAAK0G,GAAgBO,aAEzEF,EAAKJ,QAAUA,GAAW,GACnBI,GAuFPwB,UAAWA,EACXY,gBA5BcpC,EAAMJ,UACL,MAAXA,IAAiBA,EAAUG,GAAaC,IACrC,CAACJ,EAAQtK,IAAI0M,GAAalC,KAAKqB,IAAY9N,OAAO0O,EAAc/B,EAAMJ,IAAUE,KAAK,OA2B5FuC,oBAxBkBrC,EAAMJ,UACT,MAAXA,IAAiBA,EAAUG,GAAaC,IACrC+B,EAAc/B,EAAMJ,GAASE,KAAK,OAuBzCwC,oBApBkBtC,UACXA,EAAK1K,IAAI2M,GAAWnC,KAAK,OAoBhCmC,UAAWA,EACXD,YAAaA,GCjKF,YAASlM,UACfA,ECEM,YAASyM,EAAUnN,SACf,iBAANA,IAAgBA,EAAImN,EAASC,QAAQpN,IAC9B,uBAAXA,EAAEqN,KACH,CAACA,KAAM,oBAAqBC,SAAUtN,EAAEuN,WAAWrN,KAAI,SAASF,UAAYwN,GAAQL,EAAUnN,OAC9FwN,GAAQL,EAAUnN,GAG1B,SAASwN,GAAQL,EAAUnN,OACrB3C,EAAK2C,EAAE3C,GACPoQ,EAAOzN,EAAEyN,KACTC,EAA6B,MAAhB1N,EAAE0N,WAAqB,GAAK1N,EAAE0N,WAC3CC,EAAWxI,GAAOgI,EAAUnN,UACnB,MAAN3C,GAAsB,MAARoQ,EAAe,CAACJ,KAAM,UAAWK,WAAYA,EAAYC,SAAUA,GAC1E,MAARF,EAAe,CAACJ,KAAM,UAAWhQ,GAAIA,EAAIqQ,WAAYA,EAAYC,SAAUA,GAC3E,CAACN,KAAM,UAAWhQ,GAAIA,EAAIoQ,KAAMA,EAAMC,WAAYA,EAAYC,SAAUA,GAGzE,SAASxI,GAAOgI,EAAUnN,OAC3B4N,ECnBS,SAASC,MACL,MAAbA,EAAmB,OAAOvQ,OAC1BwQ,EACAC,EACAC,EAAKH,EAAU1L,MAAM,GACrB8L,EAAKJ,EAAU1L,MAAM,GACrB+L,EAAKL,EAAUM,UAAU,GACzBC,EAAKP,EAAUM,UAAU,UACtB,SAASpQ,EAAO1B,GAChBA,IAAGyR,EAAKC,EAAK,OACdnR,EAAI,EAAGD,EAAIoB,EAAMhC,OAAQ6D,EAAS,IAAIf,MAAMlC,OAChDiD,EAAO,IAAMkO,GAAM/P,EAAM,IAAMiQ,EAAKE,EACpCtO,EAAO,IAAMmO,GAAMhQ,EAAM,IAAMkQ,EAAKG,EAC7BxR,EAAID,GAAGiD,EAAOhD,GAAKmB,EAAMnB,KAAMA,SAC/BgD,GDKYiO,CAAUV,EAASU,WACpCQ,EAAOlB,EAASkB,cAEXC,EAAIjS,EAAGkS,GACVA,EAAOxS,QAAQwS,EAAOC,UACrB,IAAIvO,EAAIoO,EAAKhS,EAAI,GAAKA,EAAIA,GAAI0D,EAAI,EAAGpD,EAAIsD,EAAElE,OAAQgE,EAAIpD,IAAKoD,EAC/DwO,EAAOtR,KAAK2Q,EAAe3N,EAAEF,GAAIA,IAE/B1D,EAAI,GE7BG,SAASiE,EAAO3D,WACzB2J,EAAG1J,EAAI0D,EAAMvE,OAAQM,EAAIO,EAAID,EAC1BN,IAAMO,GAAG0J,EAAIhG,EAAMjE,GAAIiE,EAAMjE,KAAOiE,EAAM1D,GAAI0D,EAAM1D,GAAK0J,EF2BnDmI,CAAQF,EAAQ5R,YAGpB+R,EAAMhS,UACNkR,EAAelR,YAGfiS,EAAKN,WACRE,EAAS,GACJlS,EAAI,EAAGM,EAAI0R,EAAKtS,OAAQM,EAAIM,IAAKN,EAAGiS,EAAID,EAAKhS,GAAIkS,UACtDA,EAAOxS,OAAS,GAAGwS,EAAOtR,KAAKsR,EAAO,IACnCA,WAGAK,EAAKP,WACRE,EAASI,EAAKN,GACXE,EAAOxS,OAAS,GAAGwS,EAAOtR,KAAKsR,EAAO,WACtCA,WAGAM,EAAQR,UACRA,EAAKnO,IAAI0O,mBAGTjB,EAAS3N,OACG8O,EAAfzB,EAAOrN,EAAEqN,YACLA,OACD,2BAA6B,CAACA,KAAMA,EAAME,WAAYvN,EAAEuN,WAAWrN,IAAIyN,QACvE,QAASmB,EAAcJ,EAAM1O,EAAE8O,uBAC/B,aAAcA,EAAc9O,EAAE8O,YAAY5O,IAAIwO,aAC9C,aAAcI,EAAcH,EAAK3O,EAAEqO,gBACnC,kBAAmBS,EAAc9O,EAAEqO,KAAKnO,IAAIyO,aAC5C,UAAWG,EAAcD,EAAQ7O,EAAEqO,gBACnC,eAAgBS,EAAc9O,EAAEqO,KAAKnO,IAAI2O,wBAC9B,WAEX,CAACxB,KAAMA,EAAMyB,YAAaA,GAG5BnB,CAAS3N,GGpEH,YAASmN,EAAUkB,OAC5BU,EAAe,GACfC,EAAkB,GAClBC,EAAgB,GAChBC,EAAY,GACZC,GAAc,WAmDTlJ,EAAMgJ,EAAeD,OACvB,IAAIjP,KAAKkP,EAAe,KACvBpL,EAAIoL,EAAclP,UACfiP,EAAgBnL,EAAEuL,cAClBvL,EAAEuL,aACFvL,EAAEwL,IACTxL,EAAEzD,SAAQ,SAAS/D,GAAK0S,EAAa1S,EAAI,GAAKA,EAAIA,GAAK,KACvD6S,EAAUjS,KAAK4G,WAvDnBwK,EAAKjO,SAAQ,SAAS/D,EAAGO,OACkB0J,EAArCgI,EAAMnB,EAASkB,KAAKhS,EAAI,GAAKA,EAAIA,GACjCiS,EAAIvS,OAAS,IAAMuS,EAAI,GAAG,KAAOA,EAAI,GAAG,KAC1ChI,EAAI+H,IAAOc,GAAad,EAAKc,GAAc9S,EAAGgS,EAAKzR,GAAK0J,MAI5D+H,EAAKjO,SAAQ,SAAS/D,OAIhBwH,EAAGyL,EAHH7K,WAiCQpI,OAC0CkT,EAAlDjB,EAAMnB,EAASkB,KAAKhS,EAAI,GAAKA,EAAIA,GAAImT,EAAKlB,EAAI,GAC9CnB,EAASU,WAAW0B,EAAK,CAAC,EAAG,GAAIjB,EAAIlO,SAAQ,SAASqP,GAAMF,EAAG,IAAME,EAAG,GAAIF,EAAG,IAAME,EAAG,OACvFF,EAAKjB,EAAIA,EAAIvS,OAAS,UACpBM,EAAI,EAAI,CAACkT,EAAIC,GAAM,CAACA,EAAID,GArCvBG,CAAKrT,GACT+S,EAAQ3K,EAAE,GACV4K,EAAM5K,EAAE,MAGRZ,EAAIoL,EAAcG,aACbH,EAAcpL,EAAEwL,KACvBxL,EAAE5G,KAAKZ,GACPwH,EAAEwL,IAAMA,EACJC,EAAIN,EAAgBK,GAAM,QACrBL,EAAgBM,EAAEF,WACrBO,EAAKL,IAAMzL,EAAIA,EAAIA,EAAE5F,OAAOqR,GAChCN,EAAgBW,EAAGP,MAAQvL,EAAEuL,OAASH,EAAcU,EAAGN,IAAMC,EAAED,KAAOM,OAEtEX,EAAgBnL,EAAEuL,OAASH,EAAcpL,EAAEwL,KAAOxL,OAE/C,GAAIA,EAAImL,EAAgBK,aACtBL,EAAgBnL,EAAEuL,OACzBvL,EAAE+L,QAAQvT,GACVwH,EAAEuL,MAAQA,EACNE,EAAIL,EAAcG,GAAQ,QACrBH,EAAcK,EAAED,SACnBQ,EAAKP,IAAMzL,EAAIA,EAAIyL,EAAErR,OAAO4F,GAChCmL,EAAgBa,EAAGT,MAAQE,EAAEF,OAASH,EAAcY,EAAGR,IAAMxL,EAAEwL,KAAOQ,OAEtEb,EAAgBnL,EAAEuL,OAASH,EAAcpL,EAAEwL,KAAOxL,OAIpDmL,GADAnL,EAAI,CAACxH,IACa+S,MAAQA,GAASH,EAAcpL,EAAEwL,IAAMA,GAAOxL,KAsBpEoC,EAAMgJ,EAAeD,GACrB/I,EAAM+I,EAAiBC,GACvBZ,EAAKjO,SAAQ,SAAS/D,GAAU0S,EAAa1S,EAAI,GAAKA,EAAIA,IAAI6S,EAAUjS,KAAK,CAACZ,OAEvE6S,ECpEM,YAAS/B,UACfhI,GAAOgI,EAAU2C,GAASzR,MAAMG,KAAMD,YAGxC,SAASuR,GAAS3C,EAAUhI,EAAQgF,OACrCkE,EAAMhS,EAAGM,KACT4B,UAAUxC,OAAS,EAAGsS,EAAO0B,GAAY5C,EAAUhI,EAAQgF,QAC1D,IAAK9N,EAAI,EAAGgS,EAAO,IAAIxP,MAAMlC,EAAIwQ,EAASkB,KAAKtS,QAASM,EAAIM,IAAKN,EAAGgS,EAAKhS,GAAKA,QAC5E,CAACgR,KAAM,kBAAmBgB,KAAM2B,GAAO7C,EAAUkB,IAG1D,SAAS0B,GAAY5C,EAAUhI,EAAQgF,OAGjC8F,EAFA5B,EAAO,GACP6B,EAAa,YAGRC,EAAS9T,OACZO,EAAIP,EAAI,GAAKA,EAAIA,GACpB6T,EAAWtT,KAAOsT,EAAWtT,GAAK,KAAKK,KAAK,CAACZ,EAAGA,EAAGiT,EAAGW,aAGhDG,EAAS/B,GAChBA,EAAKjO,QAAQ+P,YAGNE,EAAShC,GAChBA,EAAKjO,QAAQgQ,mBAONzC,EAAS3N,UACRiQ,EAAOjQ,EAAGA,EAAEqN,UACb,qBAAsBrN,EAAEuN,WAAWnN,QAAQuN,aAC3C,aAAcyC,EAASpQ,EAAEqO,gBACzB,sBAAwB,UAAWgC,EAASrQ,EAAEqO,gBAC9C,yBATSA,GAChBA,EAAKjO,QAAQiQ,GAQUC,CAAStQ,EAAEqO,OAIpCV,CAASxI,GAET+K,EAAW9P,QAAkB,MAAV+J,EACb,SAASoG,GAASlC,EAAKpR,KAAKsT,EAAM,GAAGlU,IACrC,SAASkU,GAAapG,EAAOoG,EAAM,GAAGjB,EAAGiB,EAAMA,EAAMxU,OAAS,GAAGuT,IAAIjB,EAAKpR,KAAKsT,EAAM,GAAGlU,KAEvFgS,ECnDM,YAASpO,EAAGlD,UAClBkD,EAAIlD,GAAK,EAAIkD,EAAIlD,EAAI,EAAIkD,GAAKlD,EAAI,EAAIyT,ICChC,YAAS3M,OAClBvC,EAAQuC,EACRN,EAAUM,WAOLsC,EAAKlG,EAAGS,EAAG0C,EAAIC,OACZ,MAAND,IAAYA,EAAK,GACX,MAANC,IAAYA,EAAKpD,EAAElE,QAChBqH,EAAKC,GAAI,OACRoN,EAAOrN,EAAKC,IAAQ,EACtBE,EAAQtD,EAAEwQ,GAAM/P,GAAK,EAAG0C,EAAKqN,EAAM,EAClCpN,EAAKoN,SAELrN,SAbQ,IAAbS,EAAE9H,SACJuF,EAAQ,CAACoP,EAAGhQ,IAAMmD,EAAE6M,GAAKhQ,EACzB6C,EAmCJ,SAA6BM,SACpB,CAAC6M,EAAGhQ,IAAMqD,GAAUF,EAAE6M,GAAIhQ,GApCrBiQ,CAAoB9M,IAgCzB,CAACsC,KAAAA,EAAME,gBAPEpG,EAAGS,EAAG0C,EAAIC,GACd,MAAND,IAAYA,EAAK,GACX,MAANC,IAAYA,EAAKpD,EAAElE,cACjBM,EAAI8J,EAAKlG,EAAGS,EAAG0C,EAAIC,EAAK,UACvBhH,EAAI+G,GAAM9B,EAAMrB,EAAE5D,EAAI,GAAIqE,IAAMY,EAAMrB,EAAE5D,GAAIqE,GAAKrE,EAAI,EAAIA,GAG5C+J,eAlBPnG,EAAGS,EAAG0C,EAAIC,OACb,MAAND,IAAYA,EAAK,GACX,MAANC,IAAYA,EAAKpD,EAAElE,QAChBqH,EAAKC,GAAI,OACRoN,EAAOrN,EAAKC,IAAQ,EACtBE,EAAQtD,EAAEwQ,GAAM/P,GAAK,EAAG2C,EAAKoN,EAC5BrN,EAAKqN,EAAM,SAEXrN,IC9BI,YAAS1C,UACT,OAANA,EAAa8P,KAAO9P,ECG7B,MAAMkQ,GAAkBC,GAAS9M,IACpB+M,GAAcF,GAAgBxK,MAC9B2K,GAAaH,GAAgBzK,QACL6K,IAAQ3K,OCNtC,MAAM4K,GACXpI,mBACOqI,UAAY,IAAIC,aAAa,SAC7BC,GAAK,EAEZjR,IAAIO,SACIhE,EAAI8B,KAAK0S,cACX7U,EAAI,MACH,IAAIO,EAAI,EAAGA,EAAI4B,KAAK4S,IAAMxU,EAAI,GAAIA,IAAK,OACpCyU,EAAI3U,EAAEE,GACVyG,EAAK3C,EAAI2Q,EACTjO,EAAKzC,KAAKI,IAAIL,GAAKC,KAAKI,IAAIsQ,GAAK3Q,GAAK2C,EAAKgO,GAAKA,GAAKhO,EAAK3C,GACxD0C,IAAI1G,EAAEL,KAAO+G,GACjB1C,EAAI2C,SAEN3G,EAAEL,GAAKqE,OACF0Q,GAAK/U,EAAI,EACPmC,KAET8S,gBACQ5U,EAAI8B,KAAK0S,cACExQ,EAAG2Q,EAAGjO,EAAnBzG,EAAI6B,KAAK4S,GAAc/N,EAAK,KAC5B1G,EAAI,EAAG,KACT0G,EAAK3G,IAAIC,GACFA,EAAI,IACT+D,EAAI2C,EACJgO,EAAI3U,IAAIC,GACR0G,EAAK3C,EAAI2Q,EACTjO,EAAKiO,GAAKhO,EAAK3C,IACX0C,KAEFzG,EAAI,IAAOyG,EAAK,GAAK1G,EAAEC,EAAI,GAAK,GAAOyG,EAAK,GAAK1G,EAAEC,EAAI,GAAK,KAC9D0U,EAAS,EAALjO,EACJ1C,EAAI2C,EAAKgO,EACLA,GAAK3Q,EAAI2C,IAAIA,EAAK3C,WAGnB2C,GCtCX,IAAIkO,GAAM5Q,KAAK6Q,KAAK,IAChBC,GAAK9Q,KAAK6Q,KAAK,IACfE,GAAK/Q,KAAK6Q,KAAK,GAEJ,YAASpC,EAAOuC,EAAMC,OAC/BnD,EAEA9R,EACAkV,EACAC,EAHAzV,GAAK,KAKqBuV,GAASA,GAAzBxC,GAASA,MAAvBuC,GAAQA,IACcC,EAAQ,EAAG,MAAO,CAACxC,OACrCX,EAAUkD,EAAOvC,KAAOzS,EAAIyS,EAAOA,EAAQuC,EAAMA,EAAOhV,GACT,KAA9CmV,EAAOC,GAAc3C,EAAOuC,EAAMC,MAAkBI,SAASF,GAAO,MAAO,MAE5EA,EAAO,EAAG,KACR3K,EAAKxG,KAAKsR,MAAM7C,EAAQ0C,GAAO1K,EAAKzG,KAAKsR,MAAMN,EAAOG,OACtD3K,EAAK2K,EAAO1C,KAASjI,EACrBC,EAAK0K,EAAOH,KAAQvK,EACxByK,EAAQ,IAAIhT,MAAMlC,EAAIyK,EAAKD,EAAK,KACvB9K,EAAIM,GAAGkV,EAAMxV,IAAM8K,EAAK9K,GAAKyV,MACjC,CACLA,GAAQA,MACJ3K,EAAKxG,KAAKsR,MAAM7C,EAAQ0C,GAAO1K,EAAKzG,KAAKsR,MAAMN,EAAOG,OACtD3K,EAAK2K,EAAO1C,KAASjI,EACrBC,EAAK0K,EAAOH,KAAQvK,EACxByK,EAAQ,IAAIhT,MAAMlC,EAAIyK,EAAKD,EAAK,KACvB9K,EAAIM,GAAGkV,EAAMxV,IAAM8K,EAAK9K,GAAKyV,SAGpCrD,GAASoD,EAAMpD,UAEZoD,EAGF,SAASE,GAAc3C,EAAOuC,EAAMC,OACrCE,GAAQH,EAAOvC,GAASzO,KAAKuC,IAAI,EAAG0O,GACpCM,EAAQvR,KAAKwR,MAAMxR,KAAKC,IAAIkR,GAAQnR,KAAKyR,MACzC9V,EAAQwV,EAAOnR,KAAKO,IAAI,GAAIgR,UACzBA,GAAS,GACT5V,GAASiV,GAAM,GAAKjV,GAASmV,GAAK,EAAInV,GAASoV,GAAK,EAAI,GAAK/Q,KAAKO,IAAI,GAAIgR,IAC1EvR,KAAKO,IAAI,IAAKgR,IAAU5V,GAASiV,GAAM,GAAKjV,GAASmV,GAAK,EAAInV,GAASoV,GAAK,EAAI,GAGlF,SAASW,GAASjD,EAAOuC,EAAMC,OAChCU,EAAQ3R,KAAKI,IAAI4Q,EAAOvC,GAASzO,KAAKuC,IAAI,EAAG0O,GAC7CW,EAAQ5R,KAAKO,IAAI,GAAIP,KAAKwR,MAAMxR,KAAKC,IAAI0R,GAAS3R,KAAKyR,OACvD9V,EAAQgW,EAAQC,SAChBjW,GAASiV,GAAKgB,GAAS,GAClBjW,GAASmV,GAAIc,GAAS,EACtBjW,GAASoV,KAAIa,GAAS,GACxBZ,EAAOvC,GAASmD,EAAQA,ECpDlB,SAASrP,GAAIsP,EAAQC,OAC9BvP,UACYyC,IAAZ8M,MACG,MAAM5S,KAAS2S,EACL,MAAT3S,IACIqD,EAAMrD,QAAkB8F,IAARzC,GAAqBrD,GAASA,KACpDqD,EAAMrD,OAGL,KACD6S,GAAS,MACR,IAAI7S,KAAS2S,EACiC,OAA5C3S,EAAQ4S,EAAQ5S,IAAS6S,EAAOF,MAC7BtP,EAAMrD,QAAkB8F,IAARzC,GAAqBrD,GAASA,KACpDqD,EAAMrD,UAILqD,EClBM,SAASD,GAAIuP,EAAQC,OAC9BxP,UACY0C,IAAZ8M,MACG,MAAM5S,KAAS2S,EACL,MAAT3S,IACIoD,EAAMpD,QAAkB8F,IAAR1C,GAAqBpD,GAASA,KACpDoD,EAAMpD,OAGL,KACD6S,GAAS,MACR,IAAI7S,KAAS2S,EACiC,OAA5C3S,EAAQ4S,EAAQ5S,IAAS6S,EAAOF,MAC7BvP,EAAMpD,QAAkB8F,IAAR1C,GAAqBpD,GAASA,KACpDoD,EAAMpD,UAILoD,ECdM,SAAS0P,GAAYrS,EAAOP,EAAGoG,EAAO,EAAGC,EAAQ9F,EAAMvE,OAAS,EAAGwH,EAAUQ,SACnFqC,EAAQD,GAAM,IACfC,EAAQD,EAAO,IAAK,OAChBxJ,EAAIyJ,EAAQD,EAAO,EACnByM,EAAI7S,EAAIoG,EAAO,EACf0M,EAAIlS,KAAKC,IAAIjE,GACbK,EAAI,GAAM2D,KAAKH,IAAI,EAAIqS,EAAI,GAC3BC,EAAK,GAAMnS,KAAK6Q,KAAKqB,EAAI7V,GAAKL,EAAIK,GAAKL,IAAMiW,EAAIjW,EAAI,EAAI,GAAK,EAAI,GAGxEgW,GAAYrS,EAAOP,EAFHY,KAAKuC,IAAIiD,EAAMxF,KAAKwR,MAAMpS,EAAI6S,EAAI5V,EAAIL,EAAImW,IACzCnS,KAAKsC,IAAImD,EAAOzF,KAAKwR,MAAMpS,GAAKpD,EAAIiW,GAAK5V,EAAIL,EAAImW,IACzBvP,SAGrC+C,EAAIhG,EAAMP,OACZ1D,EAAI8J,EACJvJ,EAAIwJ,MAER2M,GAAKzS,EAAO6F,EAAMpG,GACdwD,EAAQjD,EAAM8F,GAAQE,GAAK,GAAGyM,GAAKzS,EAAO6F,EAAMC,GAE7C/J,EAAIO,GAAG,KACZmW,GAAKzS,EAAOjE,EAAGO,KAAMP,IAAKO,EACnB2G,EAAQjD,EAAMjE,GAAIiK,GAAK,KAAKjK,OAC5BkH,EAAQjD,EAAM1D,GAAI0J,GAAK,KAAK1J,EAGL,IAA5B2G,EAAQjD,EAAM6F,GAAOG,GAAUyM,GAAKzS,EAAO6F,EAAMvJ,MAC9CA,EAAGmW,GAAKzS,EAAO1D,EAAGwJ,IAErBxJ,GAAKmD,IAAGoG,EAAOvJ,EAAI,GACnBmD,GAAKnD,IAAGwJ,EAAQxJ,EAAI,UAEnB0D,EAGT,SAASyS,GAAKzS,EAAOjE,EAAGO,SAChB0J,EAAIhG,EAAMjE,GAChBiE,EAAMjE,GAAKiE,EAAM1D,GACjB0D,EAAM1D,GAAK0J,ECrCE,SAAS0M,GAASR,EAAQ9V,EAAG+V,MAEpC9V,GADN6V,EAASrB,aAAa8B,KPFjB,UAAkBT,EAAQC,WACf9M,IAAZ8M,MACG,IAAI5S,KAAS2S,EACH,MAAT3S,IAAkBA,GAASA,IAAUA,UACjCA,OAGL,KACD6S,GAAS,MACR,IAAI7S,KAAS2S,EACiC,OAA5C3S,EAAQ4S,EAAQ5S,IAAS6S,EAAOF,MAAqB3S,GAASA,IAAUA,UACrEA,IOTeqT,CAAQV,EAAQC,KAC1B1W,YACZW,GAAKA,IAAM,GAAKC,EAAI,EAAG,OAAOsG,GAAIuP,MACnC9V,GAAK,EAAG,OAAOwG,GAAIsP,OACnB7V,EACAN,GAAKM,EAAI,GAAKD,EACdoM,EAAKnI,KAAKwR,MAAM9V,GAChB8W,EAASjQ,GAAIyP,GAAYH,EAAQ1J,GAAIsK,SAAS,EAAGtK,EAAK,WAEnDqK,GADMlQ,GAAIuP,EAAOY,SAAStK,EAAK,IACZqK,IAAW9W,EAAIyM,IAGpC,SAASuK,GAAeb,EAAQ9V,EAAG+V,EAAUzB,OAC5CrU,EAAI6V,EAAOzW,YACZW,GAAKA,IAAM,GAAKC,EAAI,EAAG,OAAQ8V,EAAQD,EAAO,GAAI,EAAGA,MACtD9V,GAAK,EAAG,OAAQ+V,EAAQD,EAAO7V,EAAI,GAAIA,EAAI,EAAG6V,OAC9C7V,EACAN,GAAKM,EAAI,GAAKD,EACdoM,EAAKnI,KAAKwR,MAAM9V,GAChB8W,GAAUV,EAAQD,EAAO1J,GAAKA,EAAI0J,UAE/BW,IADOV,EAAQD,EAAO1J,EAAK,GAAIA,EAAK,EAAG0J,GACpBW,IAAW9W,EAAIyM,ICzB5B,YAAS0J,EAAQC,UACvBO,GAASR,EAAQ,GAAKC,GCGhB,SAASlK,GAAM+K,UACrBzU,MAAMoU,KAPf,UAAkBK,OACX,MAAMhT,KAASgT,QACXhT,EAKSiT,CAAQD,ICPb,YAASlE,EAAOuC,EAAMG,GACnC1C,GAASA,EAAOuC,GAAQA,EAAMG,GAAQnV,EAAI4B,UAAUxC,QAAU,GAAK4V,EAAOvC,EAAOA,EAAQ,EAAG,GAAKzS,EAAI,EAAI,GAAKmV,UAE1GzV,GAAK,EACLM,EAAoD,EAAhDgE,KAAKuC,IAAI,EAAGvC,KAAK2I,MAAMqI,EAAOvC,GAAS0C,IAC3C9O,EAAQ,IAAInE,MAAMlC,KAEbN,EAAIM,GACXqG,EAAM3G,GAAK+S,EAAQ/S,EAAIyV,SAGlB9O,ECXM,SAASwQ,GAAIhB,EAAQC,OAC9Be,EAAM,UACM7N,IAAZ8M,MACG,IAAI5S,KAAS2S,GACZ3S,GAASA,KACX2T,GAAO3T,OAGN,KACD6S,GAAS,MACR,IAAI7S,KAAS2S,GACZ3S,GAAS4S,EAAQ5S,IAAS6S,EAAOF,MACnCgB,GAAO3T,UAIN2T,ECPF,SAASC,GAAmB/S,EAAGhE,OAC/BL,GAAKqE,EAAIhE,EAAIgE,EAAEgT,cAAchX,EAAI,GAAKgE,EAAEgT,iBAAiBC,QAAQ,MAAQ,EAAG,OAAO,SACpFtX,EAAGuX,EAAclT,EAAExC,MAAM,EAAG7B,SAIzB,CACLuX,EAAY7X,OAAS,EAAI6X,EAAY,GAAKA,EAAY1V,MAAM,GAAK0V,GAChElT,EAAExC,MAAM7B,EAAI,ICfF,YAASqE,UACfA,EAAI+S,GAAmB9S,KAAKI,IAAIL,KAASA,EAAE,GAAK8P,ICFzD,ICCWqD,GDDPC,GAAK,2EAEM,SAASC,GAAgBC,QAChCC,EAAQH,GAAGI,KAAKF,IAAa,MAAM,IAAIxX,MAAM,mBAAqBwX,OACpEC,SACG,IAAIE,GAAgB,CACzBC,KAAMH,EAAM,GACZ5K,MAAO4K,EAAM,GACbxT,KAAMwT,EAAM,GACZI,OAAQJ,EAAM,GACdzW,KAAMyW,EAAM,GACZjJ,MAAOiJ,EAAM,GACbK,MAAOL,EAAM,GACbM,UAAWN,EAAM,IAAMA,EAAM,GAAG/V,MAAM,GACtCsW,KAAMP,EAAM,GACZ5G,KAAM4G,EAAM,MAMT,SAASE,GAAgBH,QACzBI,UAA0BzO,IAAnBqO,EAAUI,KAAqB,IAAMJ,EAAUI,KAAO,QAC7D/K,WAA4B1D,IAApBqO,EAAU3K,MAAsB,IAAM2K,EAAU3K,MAAQ,QAChE5I,UAA0BkF,IAAnBqO,EAAUvT,KAAqB,IAAMuT,EAAUvT,KAAO,QAC7D4T,YAA8B1O,IAArBqO,EAAUK,OAAuB,GAAKL,EAAUK,OAAS,QAClE7W,OAASwW,EAAUxW,UACnBwN,WAA4BrF,IAApBqO,EAAUhJ,WAAsBrF,GAAaqO,EAAUhJ,WAC/DsJ,QAAUN,EAAUM,WACpBC,eAAoC5O,IAAxBqO,EAAUO,eAA0B5O,GAAaqO,EAAUO,eACvEC,OAASR,EAAUQ,UACnBnH,UAA0B1H,IAAnBqO,EAAU3G,KAAqB,GAAK2G,EAAU3G,KAAO,GE9BpD,YAAS3M,EAAGhE,OACrBgU,EAAI+C,GAAmB/S,EAAGhE,OACzBgU,EAAG,OAAOhQ,EAAI,OACfkT,EAAclD,EAAE,GAChBvP,EAAWuP,EAAE,UACVvP,EAAW,EAAI,KAAO,IAAItC,OAAOsC,GAAUuJ,KAAK,KAAOkJ,EACxDA,EAAY7X,OAASoF,EAAW,EAAIyS,EAAY1V,MAAM,EAAGiD,EAAW,GAAK,IAAMyS,EAAY1V,MAAMiD,EAAW,GAC5GyS,EAAc,IAAI/U,MAAMsC,EAAWyS,EAAY7X,OAAS,GAAG2O,KAAK,KFWxEqJ,GAAgB/O,UAAYmP,GAAgBnP,UAe5CmP,GAAgBnP,UAAUuC,SAAW,kBAC5B/I,KAAK4V,KACN5V,KAAK6K,MACL7K,KAAKiC,KACLjC,KAAK6V,QACJ7V,KAAKhB,KAAO,IAAM,UACHmI,IAAfnH,KAAKwM,MAAsB,GAAKrK,KAAKuC,IAAI,EAAgB,EAAb1E,KAAKwM,SACjDxM,KAAK8V,MAAQ,IAAM,UACA3O,IAAnBnH,KAAK+V,UAA0B,GAAK,IAAM5T,KAAKuC,IAAI,EAAoB,EAAjB1E,KAAK+V,aAC3D/V,KAAKgW,KAAO,IAAM,IACnBhW,KAAK6O,aGzCE,KACR,CAAC3M,EAAGhE,KAAW,IAAJgE,GAAS+T,QAAQ/X,KAC3BgE,GAAMC,KAAKsR,MAAMvR,GAAG6G,SAAS,KAC7B7G,GAAMA,EAAI,KLPH,SAASA,UACfC,KAAKI,IAAIL,EAAIC,KAAKsR,MAAMvR,KAAO,KAChCA,EAAEgU,eAAe,MAAM3M,QAAQ,KAAM,IACrCrH,EAAE6G,SAAS,OKMZ,CAAC7G,EAAGhE,IAAMgE,EAAEgT,cAAchX,KAC1B,CAACgE,EAAGhE,IAAMgE,EAAE+T,QAAQ/X,KACpB,CAACgE,EAAGhE,IAAMgE,EAAEiU,YAAYjY,KACvBgE,GAAMC,KAAKsR,MAAMvR,GAAG6G,SAAS,KAC9B,CAAC7G,EAAGhE,IAAMkY,GAAkB,IAAJlU,EAAShE,KACjCkY,KFVQ,SAASlU,EAAGhE,OACrBgU,EAAI+C,GAAmB/S,EAAGhE,OACzBgU,EAAG,OAAOhQ,EAAI,OACfkT,EAAclD,EAAE,GAChBvP,EAAWuP,EAAE,GACbrU,EAAI8E,GAAY0S,GAAuE,EAAtDlT,KAAKuC,KAAK,EAAGvC,KAAKsC,IAAI,EAAGtC,KAAKwR,MAAMhR,EAAW,MAAY,EAC5FxE,EAAIiX,EAAY7X,cACbM,IAAMM,EAAIiX,EACXvX,EAAIM,EAAIiX,EAAc,IAAI/U,MAAMxC,EAAIM,EAAI,GAAG+N,KAAK,KAChDrO,EAAI,EAAIuX,EAAY1V,MAAM,EAAG7B,GAAK,IAAMuX,EAAY1V,MAAM7B,GAC1D,KAAO,IAAIwC,MAAM,EAAIxC,GAAGqO,KAAK,KAAO+I,GAAmB/S,EAAGC,KAAKuC,IAAI,EAAGxG,EAAIL,EAAI,IAAI,MEElFqE,GAAMC,KAAKsR,MAAMvR,GAAG6G,SAAS,IAAIsN,gBACjCnU,GAAMC,KAAKsR,MAAMvR,GAAG6G,SAAS,KCjBtB,YAAS7G,UACfA,ECQT,ICPIoU,GACO9H,GACA+H,GDKP7U,GAAMrB,MAAMmG,UAAU9E,IACtB8U,GAAW,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAEhE,YAASF,OEZAG,EAAUC,EFa5BC,OAA4BxP,IAApBmP,EAAOG,eAA+CtP,IAArBmP,EAAOI,UAA0B5X,IEbxD2X,EFa+E/U,GAAI/B,KAAK2W,EAAOG,SAAUG,QEb/FF,EFawGJ,EAAOI,UAAY,GEZpJ,SAASrV,EAAOmL,WACjB3O,EAAIwD,EAAM9D,OACVuK,EAAI,GACJ1J,EAAI,EACJ0S,EAAI2F,EAAS,GACblZ,EAAS,EAENM,EAAI,GAAKiT,EAAI,IACdvT,EAASuT,EAAI,EAAItE,IAAOsE,EAAI3O,KAAKuC,IAAI,EAAG8H,EAAQjP,IACpDuK,EAAErJ,KAAK4C,EAAM3C,UAAUb,GAAKiT,EAAGjT,EAAIiT,OAC9BvT,GAAUuT,EAAI,GAAKtE,KACxBsE,EAAI2F,EAASrY,GAAKA,EAAI,GAAKqY,EAASlZ,eAG/BuK,EAAEmI,UAAU/D,KAAKwK,KFDtBG,OAAqC1P,IAApBmP,EAAOQ,SAAyB,GAAKR,EAAOQ,SAAS,GAAK,GAC3EC,OAAqC5P,IAApBmP,EAAOQ,SAAyB,GAAKR,EAAOQ,SAAS,GAAK,GAC3EE,OAA6B7P,IAAnBmP,EAAOU,QAAwB,IAAMV,EAAOU,QAAU,GAChEC,OAA+B9P,IAApBmP,EAAOW,SAAyBnY,GGjBlC,SAASmY,UACf,SAAS5V,UACPA,EAAMkI,QAAQ,UAAU,SAAS1L,UAC/BoZ,GAAUpZ,OHcqCqZ,CAAexV,GAAI/B,KAAK2W,EAAOW,SAAUE,SAC/FC,OAA6BjQ,IAAnBmP,EAAOc,QAAwB,IAAMd,EAAOc,QAAU,GAChEC,OAAyBlQ,IAAjBmP,EAAOe,MAAsB,IAAMf,EAAOe,MAAQ,GAC1DC,OAAqBnQ,IAAfmP,EAAOgB,IAAoB,MAAQhB,EAAOgB,IAAM,YAEjDC,EAAU/B,OAGbI,GAFJJ,EAAYD,GAAgBC,IAEPI,KACjB/K,EAAQ2K,EAAU3K,MAClB5I,EAAOuT,EAAUvT,KACjB4T,EAASL,EAAUK,OACnB7W,EAAOwW,EAAUxW,KACjBwN,EAAQgJ,EAAUhJ,MAClBsJ,EAAQN,EAAUM,MAClBC,EAAYP,EAAUO,UACtBC,EAAOR,EAAUQ,KACjBnH,EAAO2G,EAAU3G,KAGR,MAATA,GAAciH,GAAQ,EAAMjH,EAAO,KAG7B2I,GAAY3I,UAAqB1H,IAAd4O,IAA4BA,EAAY,IAAKC,GAAO,EAAMnH,EAAO,MAG1F7P,GAAkB,MAAT4W,GAA0B,MAAV/K,KAAgB7L,GAAO,EAAM4W,EAAO,IAAK/K,EAAQ,SAI1E4M,EAAoB,MAAX5B,EAAiBgB,EAA4B,MAAXhB,GAAkB,SAAS9O,KAAK8H,GAAQ,IAAMA,EAAK6I,cAAgB,GAC9GC,EAAoB,MAAX9B,EAAiBkB,EAAiB,OAAOhQ,KAAK8H,GAAQuI,EAAU,GAKzEQ,EAAaJ,GAAY3I,GACzBgJ,EAAc,aAAa9Q,KAAK8H,YAU3BL,EAAOnN,OAGVxD,EAAGM,EAAGE,EAFNyZ,EAAcL,EACdM,EAAcJ,KAGL,MAAT9I,EACFkJ,EAAcH,EAAWvW,GAAS0W,EAClC1W,EAAQ,OACH,KAID2W,GAHJ3W,GAASA,GAGmB,GAAK,EAAIA,EAAQ,KAG7CA,EAAQ6L,MAAM7L,GAASiW,EAAMM,EAAWzV,KAAKI,IAAIlB,GAAQ0U,GAGrDC,IAAM3U,EIjFH,SAAS7C,GACtBqC,EAAK,IAAK,IAAkC0J,EAA9BpM,EAAIK,EAAEjB,OAAQM,EAAI,EAAGyM,GAAM,EAAOzM,EAAIM,IAAKN,SAC/CW,EAAEX,QACH,IAAKyM,EAAKC,EAAK1M,YACf,IAAgB,IAAPyM,IAAUA,EAAKzM,GAAG0M,EAAK1M,qBACtBW,EAAEX,GAAI,MAAMgD,EAASyJ,EAAK,IAAGA,EAAK,UAG9CA,EAAK,EAAI9L,EAAEkB,MAAM,EAAG4K,GAAM9L,EAAEkB,MAAM6K,EAAK,GAAK/L,EJyE3ByZ,CAAW5W,IAGzB2W,GAA4B,IAAV3W,GAAwB,MAATY,IAAc+V,GAAgB,GAGnEF,GAAeE,EAA0B,MAAT/V,EAAeA,EAAOoV,EAAkB,MAATpV,GAAyB,MAATA,EAAe,GAAKA,GAAQ6V,EAC3GC,GAAwB,MAATlJ,EAAe2H,GAAS,EAAInB,GAAiB,GAAK,IAAM0C,GAAeC,GAA0B,MAAT/V,EAAe,IAAM,IAIxH4V,MACFha,GAAK,EAAGM,EAAIkD,EAAM9D,SACTM,EAAIM,MACkB,IAAzBE,EAAIgD,EAAMsM,WAAW9P,KAAcQ,EAAI,GAAI,CAC7C0Z,GAAqB,KAAN1Z,EAAW2Y,EAAU3V,EAAM3B,MAAM7B,EAAI,GAAKwD,EAAM3B,MAAM7B,IAAMka,EAC3E1W,EAAQA,EAAM3B,MAAM,EAAG7B,UAQ3BiY,IAAU9W,IAAMqC,EAAQsV,EAAMtV,EAAO6W,EAAAA,QAGrC3a,EAASua,EAAYva,OAAS8D,EAAM9D,OAASwa,EAAYxa,OACzD4a,EAAU5a,EAASiP,EAAQ,IAAInM,MAAMmM,EAAQjP,EAAS,GAAG2O,KAAK0J,GAAQ,UAGtEE,GAAS9W,IAAMqC,EAAQsV,EAAMwB,EAAU9W,EAAO8W,EAAQ5a,OAASiP,EAAQuL,EAAYxa,OAAS2a,EAAAA,GAAWC,EAAU,IAG7GtN,OACD,IAAKxJ,EAAQyW,EAAczW,EAAQ0W,EAAcI,YACjD,IAAK9W,EAAQyW,EAAcK,EAAU9W,EAAQ0W,YAC7C,IAAK1W,EAAQ8W,EAAQzY,MAAM,EAAGnC,EAAS4a,EAAQ5a,QAAU,GAAKua,EAAczW,EAAQ0W,EAAcI,EAAQzY,MAAMnC,iBAC5G8D,EAAQ8W,EAAUL,EAAczW,EAAQ0W,SAG5Cd,EAAS5V,UA/DlB0U,OAA0B5O,IAAd4O,EAA0B,EAChC,SAAShP,KAAK8H,GAAQ1M,KAAKuC,IAAI,EAAGvC,KAAKsC,IAAI,GAAIsR,IAC/C5T,KAAKuC,IAAI,EAAGvC,KAAKsC,IAAI,GAAIsR,IAgE/BvH,EAAOzF,SAAW,kBACTyM,EAAY,IAGdhH,QAaF,CACLA,OAAQ+I,EACRhB,sBAZoBf,EAAWnU,OAC3BgE,EAAIkS,IAAW/B,EAAYD,GAAgBC,IAAsB3G,KAAO,IAAK2G,IAC7EvP,EAAiE,EAA7D9D,KAAKuC,KAAK,EAAGvC,KAAKsC,IAAI,EAAGtC,KAAKwR,MAAMhR,GAAStB,GAAS,KAC1DE,EAAIY,KAAKO,IAAI,IAAKuD,GAClBwR,EAASjB,GAAS,EAAIvQ,EAAI,UACvB,SAAS5E,UACPgE,EAAE9D,EAAIF,GAASoW,KKzIb,YAASnE,UACfnR,KAAKuC,IAAI,GAAI/B,GAASR,KAAKI,IAAI+Q,KCDzB,YAASA,EAAMjS,UACrBc,KAAKuC,IAAI,EAAgE,EAA7DvC,KAAKuC,KAAK,EAAGvC,KAAKsC,IAAI,EAAGtC,KAAKwR,MAAMhR,GAAStB,GAAS,KAAWsB,GAASR,KAAKI,IAAI+Q,KCDzF,YAASA,EAAM5O,UAC5B4O,EAAOnR,KAAKI,IAAI+Q,GAAO5O,EAAMvC,KAAKI,IAAImC,GAAO4O,EACtCnR,KAAKuC,IAAI,EAAG/B,GAAS+B,GAAO/B,GAAS2Q,IAAS,GNQxC,SAAuB8E,GACpC9B,GAAS+B,GAAaD,GACtB5J,GAAS8H,GAAO9H,OAChB+H,GAAeD,GAAOC,cATV,CACZG,UAAW,IACXD,SAAU,CAAC,GACXK,SAAU,CAAC,IAAK,MOTlB,IAAIwB,GAAK,IAAInU,KACToU,GAAK,IAAIpU,KAEE,SAASqU,GAAYC,EAAQC,EAAStF,EAAO1V,YAEjDib,EAASzU,UACTuU,EAAOvU,EAA4B,IAArBnE,UAAUxC,OAAe,IAAI4G,KAAO,IAAIA,MAAMD,IAAQA,SAG7EyU,EAAShF,MAAQ,SAASzP,UACjBuU,EAAOvU,EAAO,IAAIC,MAAMD,IAAQA,GAGzCyU,EAAS7N,KAAO,SAAS5G,UAChBuU,EAAOvU,EAAO,IAAIC,KAAKD,EAAO,IAAKwU,EAAQxU,EAAM,GAAIuU,EAAOvU,GAAOA,GAG5EyU,EAASlF,MAAQ,SAASvP,OACpBjB,EAAK0V,EAASzU,GACdhB,EAAKyV,EAAS7N,KAAK5G,UAChBA,EAAOjB,EAAKC,EAAKgB,EAAOjB,EAAKC,GAGtCyV,EAASC,OAAS,SAAS1U,EAAMoP,UACxBoF,EAAQxU,EAAO,IAAIC,MAAMD,GAAe,MAARoP,EAAe,EAAInR,KAAKwR,MAAML,IAAQpP,GAG/EyU,EAASnU,MAAQ,SAASoM,EAAOuC,EAAMG,OACrBuF,EAAZrU,EAAQ,MACZoM,EAAQ+H,EAAS7N,KAAK8F,GACtB0C,EAAe,MAARA,EAAe,EAAInR,KAAKwR,MAAML,KAC/B1C,EAAQuC,GAAWG,EAAO,GAAI,OAAO9O,KACxCA,EAAM/F,KAAKoa,EAAW,IAAI1U,MAAMyM,IAAS8H,EAAQ9H,EAAO0C,GAAOmF,EAAO7H,SAClEiI,EAAWjI,GAASA,EAAQuC,UAC5B3O,GAGTmU,EAAShN,OAAS,SAAS5E,UAClByR,IAAY,SAAStU,MACtBA,GAAQA,EAAM,KAAOuU,EAAOvU,IAAQ6C,EAAK7C,IAAOA,EAAK4U,QAAQ5U,EAAO,MACvE,SAASA,EAAMoP,MACZpP,GAAQA,KACNoP,EAAO,EAAG,OAASA,GAAQ,QACtBoF,EAAQxU,GAAO,IAAK6C,EAAK7C,UAC3B,OAASoP,GAAQ,QACfoF,EAAQxU,EAAM,IAAM6C,EAAK7C,UAMpCkP,IACFuF,EAASvF,MAAQ,SAASxC,EAAOC,UAC/ByH,GAAGQ,SAASlI,GAAQ2H,GAAGO,SAASjI,GAChC4H,EAAOH,IAAKG,EAAOF,IACZpW,KAAKwR,MAAMP,EAAMkF,GAAIC,MAG9BI,EAASI,MAAQ,SAASzF,UACxBA,EAAOnR,KAAKwR,MAAML,GACVE,SAASF,IAAWA,EAAO,EAC3BA,EAAO,EACTqF,EAAShN,OAAOjO,EACZ,SAASwU,UAAYxU,EAAMwU,GAAKoB,GAAS,GACzC,SAASpB,UAAYyG,EAASvF,MAAM,EAAGlB,GAAKoB,GAAS,IAH3CqF,EADoB,OAQrCA,EClET,IAAIK,GAAcL,IAAS,eAExB,SAASzU,EAAMoP,GAChBpP,EAAK4U,SAAS5U,EAAOoP,MACpB,SAAS1C,EAAOC,UACVA,EAAMD,KAIfoI,GAAYD,MAAQ,SAASxX,UAC3BA,EAAIY,KAAKwR,MAAMpS,GACViS,SAASjS,IAAQA,EAAI,EACpBA,EAAI,EACHoX,IAAS,SAASzU,GACvBA,EAAK4U,QAAQ3W,KAAKwR,MAAMzP,EAAO3C,GAAKA,MACnC,SAAS2C,EAAMoP,GAChBpP,EAAK4U,SAAS5U,EAAOoP,EAAO/R,MAC3B,SAASqP,EAAOC,UACTA,EAAMD,GAASrP,KANJyX,GADgB,MCbhC,IAAIC,GAAiB,IACjBC,GAAiB,IACjBC,GAAe,KACfC,GAAc,MACdC,GAAe,OCDtBC,GAASX,IAAS,SAASzU,GAC7BA,EAAK4U,QAAQ5U,EAAOA,EAAKqV,sBACxB,SAASrV,EAAMoP,GAChBpP,EAAK4U,SAAS5U,EAAOoP,EAAO2F,OAC3B,SAASrI,EAAOC,UACTA,EAAMD,GAASqI,MACtB,SAAS/U,UACHA,EAAK6I,mBCPVyM,GAASb,IAAS,SAASzU,GAC7BA,EAAK4U,QAAQ5U,EAAOA,EAAKqV,kBAAoBrV,EAAKuV,aAAeR,OAChE,SAAS/U,EAAMoP,GAChBpP,EAAK4U,SAAS5U,EAAOoP,EAAO4F,OAC3B,SAAStI,EAAOC,UACTA,EAAMD,GAASsI,MACtB,SAAShV,UACHA,EAAKwV,gBCPVC,GAAOhB,IAAS,SAASzU,GAC3BA,EAAK4U,QAAQ5U,EAAOA,EAAKqV,kBAAoBrV,EAAKuV,aAAeR,GAAiB/U,EAAKwV,aAAeR,OACrG,SAAShV,EAAMoP,GAChBpP,EAAK4U,SAAS5U,EAAOoP,EAAO6F,OAC3B,SAASvI,EAAOC,UACTA,EAAMD,GAASuI,MACtB,SAASjV,UACHA,EAAK0V,cCPVC,GAAMlB,IACRzU,GAAQA,EAAK4V,SAAS,EAAG,EAAG,EAAG,KAC/B,CAAC5V,EAAMoP,IAASpP,EAAK6V,QAAQ7V,EAAK8V,UAAY1G,KAC9C,CAAC1C,EAAOC,KAASA,EAAMD,GAASC,EAAIoJ,oBAAsBrJ,EAAMqJ,qBAAuBf,IAAkBE,KACzGlV,GAAQA,EAAK8V,UAAY,ICJ3B,SAASE,GAAQrc,UACR8a,IAAS,SAASzU,GACvBA,EAAK6V,QAAQ7V,EAAK8V,WAAa9V,EAAKiW,SAAW,EAAItc,GAAK,GACxDqG,EAAK4V,SAAS,EAAG,EAAG,EAAG,MACtB,SAAS5V,EAAMoP,GAChBpP,EAAK6V,QAAQ7V,EAAK8V,UAAmB,EAAP1G,MAC7B,SAAS1C,EAAOC,UACTA,EAAMD,GAASC,EAAIoJ,oBAAsBrJ,EAAMqJ,qBAAuBf,IAAkBG,MAI7F,IAAIe,GAASF,GAAQ,GACjBG,GAASH,GAAQ,MACC,MACE,GACxB,IAAII,GAAWJ,GAAQ,MACF,MACE,GClB9B,IAAIK,GAAQ5B,IAAS,SAASzU,GAC5BA,EAAK6V,QAAQ,GACb7V,EAAK4V,SAAS,EAAG,EAAG,EAAG,MACtB,SAAS5V,EAAMoP,GAChBpP,EAAKsW,SAAStW,EAAKE,WAAakP,MAC/B,SAAS1C,EAAOC,UACVA,EAAIzM,WAAawM,EAAMxM,WAAyD,IAA3CyM,EAAI4J,cAAgB7J,EAAM6J,kBACrE,SAASvW,UACHA,EAAKE,cCRV+I,GAAOwL,IAAS,SAASzU,GAC3BA,EAAKsW,SAAS,EAAG,GACjBtW,EAAK4V,SAAS,EAAG,EAAG,EAAG,MACtB,SAAS5V,EAAMoP,GAChBpP,EAAKwW,YAAYxW,EAAKuW,cAAgBnH,MACrC,SAAS1C,EAAOC,UACVA,EAAI4J,cAAgB7J,EAAM6J,iBAChC,SAASvW,UACHA,EAAKuW,iBAIdtN,GAAK4L,MAAQ,SAASxX,UACZiS,SAASjS,EAAIY,KAAKwR,MAAMpS,KAASA,EAAI,EAAYoX,IAAS,SAASzU,GACzEA,EAAKwW,YAAYvY,KAAKwR,MAAMzP,EAAKuW,cAAgBlZ,GAAKA,GACtD2C,EAAKsW,SAAS,EAAG,GACjBtW,EAAK4V,SAAS,EAAG,EAAG,EAAG,MACtB,SAAS5V,EAAMoP,GAChBpP,EAAKwW,YAAYxW,EAAKuW,cAAgBnH,EAAO/R,MALG,MCZpD,IAAIoZ,GAAYhC,IAAS,SAASzU,GAChCA,EAAK0W,cAAc,EAAG,MACrB,SAAS1W,EAAMoP,GAChBpP,EAAK4U,SAAS5U,EAAOoP,EAAO4F,OAC3B,SAAStI,EAAOC,UACTA,EAAMD,GAASsI,MACtB,SAAShV,UACHA,EAAK2I,mBCPVgO,GAAUlC,IAAS,SAASzU,GAC9BA,EAAK4W,cAAc,EAAG,EAAG,MACxB,SAAS5W,EAAMoP,GAChBpP,EAAK4U,SAAS5U,EAAOoP,EAAO6F,OAC3B,SAASvI,EAAOC,UACTA,EAAMD,GAASuI,MACtB,SAASjV,UACHA,EAAKyI,iBCPVoO,GAASpC,IAAS,SAASzU,GAC7BA,EAAK8W,YAAY,EAAG,EAAG,EAAG,MACzB,SAAS9W,EAAMoP,GAChBpP,EAAK+W,WAAW/W,EAAKoJ,aAAegG,MACnC,SAAS1C,EAAOC,UACTA,EAAMD,GAASwI,MACtB,SAASlV,UACHA,EAAKoJ,aAAe,KCP7B,SAAS4N,GAAWrd,UACX8a,IAAS,SAASzU,GACvBA,EAAK+W,WAAW/W,EAAKoJ,cAAgBpJ,EAAKiX,YAAc,EAAItd,GAAK,GACjEqG,EAAK8W,YAAY,EAAG,EAAG,EAAG,MACzB,SAAS9W,EAAMoP,GAChBpP,EAAK+W,WAAW/W,EAAKoJ,aAAsB,EAAPgG,MACnC,SAAS1C,EAAOC,UACTA,EAAMD,GAASyI,MAIpB,IAAI+B,GAAYF,GAAW,GACvBG,GAAYH,GAAW,GACVA,GAAW,GACTA,GAAW,GAC9B,IAAII,GAAcJ,GAAW,GACbA,GAAW,GACTA,GAAW,GClBpC,IAAIK,GAAW5C,IAAS,SAASzU,GAC/BA,EAAK+W,WAAW,GAChB/W,EAAK8W,YAAY,EAAG,EAAG,EAAG,MACzB,SAAS9W,EAAMoP,GAChBpP,EAAKsX,YAAYtX,EAAKI,cAAgBgP,MACrC,SAAS1C,EAAOC,UACVA,EAAIvM,cAAgBsM,EAAMtM,cAAkE,IAAjDuM,EAAIxD,iBAAmBuD,EAAMvD,qBAC9E,SAASnJ,UACHA,EAAKI,iBCRVmX,GAAU9C,IAAS,SAASzU,GAC9BA,EAAKsX,YAAY,EAAG,GACpBtX,EAAK8W,YAAY,EAAG,EAAG,EAAG,MACzB,SAAS9W,EAAMoP,GAChBpP,EAAKwX,eAAexX,EAAKmJ,iBAAmBiG,MAC3C,SAAS1C,EAAOC,UACVA,EAAIxD,iBAAmBuD,EAAMvD,oBACnC,SAASnJ,UACHA,EAAKmJ,oBAIdoO,GAAQ1C,MAAQ,SAASxX,UACfiS,SAASjS,EAAIY,KAAKwR,MAAMpS,KAASA,EAAI,EAAYoX,IAAS,SAASzU,GACzEA,EAAKwX,eAAevZ,KAAKwR,MAAMzP,EAAKmJ,iBAAmB9L,GAAKA,GAC5D2C,EAAKsX,YAAY,EAAG,GACpBtX,EAAK8W,YAAY,EAAG,EAAG,EAAG,MACzB,SAAS9W,EAAMoP,GAChBpP,EAAKwX,eAAexX,EAAKmJ,iBAAmBiG,EAAO/R,MALH,YCX9Coa,GAAO,OACPC,GAAU,UACVC,GAAQ,QACRC,GAAO,OACPC,GAAO,OACPC,GAAM,MACNC,GAAY,YACZC,GAAQ,QACRC,GAAU,UACVC,GAAU,UACVC,GAAe,eACfC,GAAa,CAACX,GAAMC,GAASC,GAAOC,GAAMC,GAAMC,GAAKC,GAAWC,GAAOC,GAASC,GAASC,IACzFE,GAAQD,GAAW1b,QAAO,CAACY,EAAGgE,EAAG3H,KAAO2D,EAAEgE,GAAK,EAAI3H,EAAG2D,IAAI,IAChE,SAASgb,GAAUC,SACXjX,EAAI1D,EAAM2a,GAAO/c,QACjB0U,EAAI,GAEL5O,EAAEjI,QAAQO,EAAM,sBACrB0H,EAAE5D,SAAQ8a,IACJjW,GAAe8V,GAAOG,GACxBtI,EAAEsI,GAAQ,EAEV5e,EAAO,sBAAqB4e,gBAGdtI,EAAC,MAAUA,EAAC,IAAQ,EAAI,IAAMA,EAAC,SAAaA,EAAC,OAAWA,EAAC,KAAS,EAAI,IAAMA,EAAC,UAAc,EAAI,GAElG,GACbtW,EAAO,4BAA2B2e,KAIpCjX,EAAEmX,MAAK,CAAClb,EAAGlD,IAAMge,GAAM9a,GAAK8a,GAAMhe,KAC3BiH,EAET,MAAMoX,GAAoB,EACvBjB,IAAO,OACPC,IAAU,QACVC,IAAQ,OACRE,IAAO,OACPD,IAAO,QACPE,IAAM,OACNC,IAAY,OACZC,IAAQ,SACRC,IAAU,SACVC,IAAU,OACVC,IAAe,mBACM,2BACQ,4BACL,SAE3B,SAASQ,GAAkBJ,EAAOK,SAC1Bte,EAAI4H,GAAO,GAAIwW,GAAmBE,GAClCtX,EAAIgX,GAAUC,GACdte,EAAIqH,EAAEjI,WAGRsT,EACApQ,EAHAsc,EAAM,GACNnM,EAAQ,MAIPA,EAAQ,EAAGA,EAAQzS,OACjB0S,EAAMrL,EAAEjI,OAAQsT,EAAMD,IAASC,KAClCpQ,EAAM+E,EAAE9F,MAAMkR,EAAOC,GAAK3E,KAAK,KAEjB,MAAV1N,EAAEiC,GAAc,CAClBsc,GAAOve,EAAEiC,GACTmQ,EAAQC,eAMPkM,EAAI/G,OAGb,MAAMsC,GAAK,IAAInU,KAEf,SAAS6Y,GAAUnK,UACjByF,GAAGoC,YAAY7H,GACfyF,GAAGkC,SAAS,GACZlC,GAAGyB,QAAQ,GACXzB,GAAGwB,SAAS,EAAG,EAAG,EAAG,GACdxB,GAGT,SAAS2E,GAAU/K,UACVgL,GAAe,IAAI/Y,KAAK+N,IAEjC,SAASiL,GAAKjL,UACLkL,GAAa,IAAIjZ,KAAK+N,IAE/B,SAASgL,GAAehL,UACfmL,GAAQjK,MAAM4J,GAAU9K,EAAEuI,eAAiB,EAAGvI,GAEvD,SAASkL,GAAalL,UACboL,GAASlK,MAAM4J,GAAU9K,EAAEuI,eAAiB,EAAGvI,GAExD,SAASqL,GAAW1K,UACXmK,GAAUnK,GAAGsH,SAEtB,SAASqD,GAAU3K,EAAGuB,EAAGlC,EAAGuL,EAAGC,EAAGC,EAAGC,MAC/B,GAAK/K,GAAKA,EAAI,IAAK,OACf3O,EAAO,IAAIC,MAAM,EAAGiQ,EAAGlC,EAAGuL,EAAGC,EAAGC,EAAGC,UACzC1Z,EAAKwW,YAAY7H,GACV3O,SAGF,IAAIC,KAAK0O,EAAGuB,EAAGlC,EAAGuL,EAAGC,EAAGC,EAAGC,GAEpC,SAASC,GAAa3L,UACb4L,GAAa,IAAI3Z,KAAK+N,IAE/B,SAAS6L,GAAQ7L,UACR8L,GAAW,IAAI7Z,KAAK+N,IAE7B,SAAS4L,GAAa5L,SACdW,EAAI1O,KAAK8Z,IAAI/L,EAAE7E,iBAAkB,EAAG,UACnC0N,GAAO3H,MAAMP,EAAI,EAAGX,GAE7B,SAAS8L,GAAW9L,SACZW,EAAI1O,KAAK8Z,IAAI/L,EAAE7E,iBAAkB,EAAG,UACnC6Q,GAAQ9K,MAAMP,EAAI,EAAGX,GAE9B,SAASiM,GAAStL,UAChByF,GAAGQ,QAAQ3U,KAAK8Z,IAAIpL,EAAG,EAAG,IACnByF,GAAG6C,YAEZ,SAASiD,GAAQvL,EAAGuB,EAAGlC,EAAGuL,EAAGC,EAAGC,EAAGC,MAC7B,GAAK/K,GAAKA,EAAI,IAAK,OACf3O,EAAO,IAAIC,KAAKA,KAAK8Z,KAAK,EAAG7J,EAAGlC,EAAGuL,EAAGC,EAAGC,EAAGC,WAClD1Z,EAAKwX,eAAexJ,EAAEW,GACf3O,SAGF,IAAIC,KAAKA,KAAK8Z,IAAIpL,EAAGuB,EAAGlC,EAAGuL,EAAGC,EAAGC,EAAGC,IAG7C,SAASjK,GAAM8I,EAAOnJ,EAAM1U,EAAKyf,EAAKC,SAC9B9f,EAAI8U,GAAQ,EACZ/U,EAAIsD,EAAK4a,GACT1d,EAAI,CAAC2d,EAAMxe,EAAGuC,IAqBtB,SAAiB4E,EAAGgZ,EAAK/K,EAAMiL,SACvB/Y,EAAI8N,GAAQ,EAAIjO,EAAIkZ,EAAQ,CAACrM,EAAGW,IAAM0L,EAAQjL,EAAOnR,KAAKwR,OAAOtO,EAAE6M,EAAGW,GAAK0L,GAASjL,GAAQ,CAACpB,EAAGW,IAAMS,EAAOnR,KAAKwR,MAAMtO,EAAE6M,EAAGW,GAAKS,UACjI+K,EAAM,CAACnM,EAAGW,IAAMwL,EAAI7Y,EAAE0M,EAAGW,GAAIA,GAAKrN,EArBhCgZ,CAAQ5f,EADf6B,EAAMA,GAAOic,GACY2B,EAAI5d,GAAMic,IAASne,GAAKC,EAAGN,GAGhD4J,EAAI,IAAI3D,KACRqB,EAAI+F,GAAMkR,GACV5J,EAAIrN,EAAC,KAASzG,EAAE4c,IAAQnY,EAAS,MACjC4Q,EAAI5O,EAAC,MAAUzG,EAAE8c,IAASrW,EAAC,QAAYzG,EAAE6c,IAAW5c,EACpDkT,EAAI1M,EAAC,MAAUA,EAAC,IAAQzG,EAAEid,GAAK,EAAGF,GAAOE,IAAOxW,EAAC,KAASzG,EAAE+c,GAAM,GAAKtW,EAAC,IAAQzG,EAAEid,GAAK,GAAKxW,EAAC,KAASzG,EAAEgd,GAAM,GAAKvW,EAAC,UAAczG,EAAEkd,GAAW,GAAKhd,EACpJwe,EAAIjY,EAAC,MAAUzG,EAAEmd,IAASld,EAC1B0e,EAAIlY,EAAC,QAAYzG,EAAEod,IAAWnd,EAC9B2e,EAAInY,EAAC,QAAYzG,EAAEqd,IAAWpd,EAC9B4e,EAAIpY,EAAC,aAAiBzG,EAAEsd,IAAgBrd,SACvC,SAAUyG,GACfqC,EAAEgR,SAASrT,SACL0H,EAAO0F,EAAE/K,UACRwW,EAAQnR,EAAMiH,EAAEtM,GAAIoK,EAAEpK,EAAGqF,GAAOsQ,EAAE3V,GAAI4V,EAAE5V,GAAI6V,EAAE7V,GAAI8V,EAAE9V,KAW/D,SAASoS,GAAQiD,EAAMtD,EAAK4E,UACnB5E,EAAa,EAAPsD,GAAYsB,EAAW,GAAK,EAI3C,MAAMC,GAAW,EACd/C,IAAOzJ,GAAKA,EAAEuI,eACdmB,IAAU1J,GAAK/P,KAAKwR,MAAMzB,EAAE9N,WAAa,IACzCyX,IAAQ3J,GAAKA,EAAE9N,YACf2X,IAAO7J,GAAKA,EAAE8H,WACdkC,IAAQhK,GAAKA,EAAE0H,YACfuC,IAAUjK,GAAKA,EAAEwH,cACjB0C,IAAUlK,GAAKA,EAAEuH,cACjB4C,IAAenK,GAAKA,EAAEqH,mBACtB0C,IAAY/J,GAAKgL,GAAehL,IAChC4J,IAAO5J,GAAKkL,GAAalL,IACzB4J,GAAOE,IAAM,CAAC9J,EAAGW,IAAMqH,GAAQkD,GAAalL,GAAIA,EAAEiI,SAAUoD,GAAW1K,KACvEmJ,IAAM,CAAC9J,EAAGW,IAAMqH,GAAQ,EAAGhI,EAAEiI,SAAUoD,GAAW1K,KAE/C8L,GAAW,EACd/C,IAAUtd,GAAK,EAAIA,GACnBwd,IAAO,CAAC8C,EAAG/L,IAAMqH,GAAQ0E,EAAG,EAAGrB,GAAW1K,KAE7C,SAASgM,GAAUpC,EAAOnJ,UACjBK,GAAM8I,EAAOnJ,GAAQ,EAAGoL,GAAUC,GAAUnB,IAGrD,MAAMsB,GAAS,EACZnD,IAAOzJ,GAAKA,EAAE7E,kBACduO,IAAU1J,GAAK/P,KAAKwR,MAAMzB,EAAE5N,cAAgB,IAC5CuX,IAAQ3J,GAAKA,EAAE5N,eACfyX,IAAO7J,GAAKA,EAAE5E,cACd4O,IAAQhK,GAAKA,EAAEvF,eACfwP,IAAUjK,GAAKA,EAAErF,iBACjBuP,IAAUlK,GAAKA,EAAEnF,iBACjBsP,IAAenK,GAAKA,EAAEjF,sBACtBgP,IAAY/J,GAAK4L,GAAa5L,IAC9B4J,IAAO5J,GAAK8L,GAAW9L,IACvB8J,IAAM,CAAC9J,EAAGW,IAAMqH,GAAQ,EAAGhI,EAAEiJ,YAAagD,GAAStL,KACnDiJ,GAAOE,IAAM,CAAC9J,EAAGW,IAAMqH,GAAQ8D,GAAW9L,GAAIA,EAAEiJ,YAAagD,GAAStL,KAEnEkM,GAAS,EACZnD,IAAUtd,GAAK,EAAIA,GACnBwd,IAAO,CAAC8C,EAAG/L,IAAMqH,GAAQ0E,EAAG,EAAGT,GAAStL,KAE3C,SAASmM,GAASvC,EAAOnJ,UAChBK,GAAM8I,EAAOnJ,GAAQ,EAAGwL,GAAQC,GAAQX,IAGjD,MAAMa,GAAgB,EACnBtD,IAAOuD,IACPtD,IAAUuD,GAAUpG,MAAM,IAC1B8C,IAAQsD,IACRrD,IAAOwB,IACPvB,IAAOsB,IACPrB,IAAMqB,IACNpB,IAAYoB,IACZnB,IAAQkD,IACRjD,IAAUkD,IACVjD,IAAUkD,IACVjD,IAAekD,IAEZC,GAAe,EAClB7D,IAAOF,IACPG,IAAUL,GAASxC,MAAM,IACzB8C,IAAQN,IACRO,IAAOoC,IACPnC,IAAOhB,IACPiB,IAAMjB,IACNkB,IAAYlB,IACZmB,IAAQrB,IACRsB,IAAUxB,IACVyB,IAAUqD,IACVpD,IAAeqD,IAElB,SAASC,GAAajD,UACbuC,GAAcvC,GAEvB,SAASkD,GAAYlD,UACZ8C,GAAa9C,GAGtB,SAAS9D,GAAOiH,EAAM3b,EAAMoP,UACnBuM,EAAOA,EAAKjH,OAAO1U,EAAMoP,QAAQnM,EAG1C,SAAS2Y,GAAWpD,EAAMxY,EAAMoP,UACvBsF,GAAO+G,GAAajD,GAAOxY,EAAMoP,GAE1C,SAASyM,GAAUrD,EAAMxY,EAAMoP,UACtBsF,GAAOgH,GAAYlD,GAAOxY,EAAMoP,GAGzC,SAAS0M,GAASH,EAAMjP,EAAOuC,EAAMG,UAC5BuM,EAAOA,EAAKrb,MAAMoM,EAAOuC,EAAMG,QAAQnM,EAGhD,SAAS8Y,GAAavD,EAAM9L,EAAOuC,EAAMG,UAChC0M,GAASL,GAAajD,GAAO9L,EAAOuC,EAAMG,GAEnD,SAAS4M,GAAYxD,EAAM9L,EAAOuC,EAAMG,UAC/B0M,GAASJ,GAAYlD,GAAO9L,EAAOuC,EAAMG,GAGlD,MAAM2F,GAAiB,IACjBC,GAAiBD,IACjBE,GAAeD,KACfE,GAAcD,MAEdgH,GAAgB/G,OAChBgH,GAAehH,QACfiH,GAAQ,CAAC1E,GAAME,GAAOE,GAAMG,GAAOC,GAASC,GAASC,IACrDiE,GAAUD,GAAM3gB,MAAM,GAAI,GAC1B6gB,GAAUD,GAAQ5gB,MAAM,GAAI,GAC5B8gB,GAAQD,GAAQ7gB,MAAM,GAAI,GAC1B+gB,GAAMD,GAAM9gB,MAAM,GAAI,GAEtBghB,GAAQ,CAAC/E,GAAME,IACf8E,GAAO,CAAChF,IACRiF,GAAY,CAAC,CAACN,GAAS,EAAGrH,IAAiB,CAACqH,GAAS,EAAG,KAAqB,CAACA,GAAS,GAAI,MAAsB,CAACA,GAAS,GAAI,KAAsB,CAACC,GAAS,EAAGrH,IAAiB,CAACqH,GAAS,EAAG,KAAqB,CAACA,GAAS,GAAI,KAAsB,CAACA,GAAS,GAAI,MAAsB,CAACC,GAAO,EAAGrH,IAAe,CAACqH,GAAO,EAAG,OAAmB,CAACA,GAAO,EAAG,OAAmB,CAACA,GAAO,GAAI,OAAoB,CAACC,GAAK,EAAGrH,IAAc,CAHna,CAACuC,GAAMG,IAGma,EAXla1C,QAWob,CAACsH,GAAO,EAAGP,IAAgB,CAACO,GAAO,EAAG,QAAoB,CAACC,GAAM,EAAGP,KAC7gB,SAASS,GAAKliB,SACNmiB,EAAMniB,EAAI0H,OACV3B,EAAM/F,EAAIoiB,SAAW,GACrBC,EAAS7e,KAAKI,IAAIoC,GAAKmc,IAAQpc,MAEjC+X,EACAnJ,EAFAzV,EAAIwU,IAASxU,GAAKA,EAAE,KAAI+J,MAAMgZ,GAAWI,UAIzCnjB,IAAM+iB,GAAUrjB,QAClBkf,EAAQkE,GAAMrN,EAAOO,GAASiN,EAAI,GAAKV,GAAcU,EAAI,GAAKV,GAAc1b,IACnE7G,GACTA,EAAI+iB,GAAUI,EAASJ,GAAU/iB,EAAI,GAAG,GAAK+iB,GAAU/iB,GAAG,GAAKmjB,EAASnjB,EAAI,EAAIA,GAChF4e,EAAQ5e,EAAE,GACVyV,EAAOzV,EAAE,KAET4e,EAAQ4D,GACR/M,EAAOnR,KAAKuC,IAAImP,GAASiN,EAAI,GAAIA,EAAI,GAAIpc,GAAM,IAG1C,CACL+X,MAAAA,EACAnJ,KAAAA,GC5SJ,SAASkK,GAAUtL,MACb,GAAKA,EAAEW,GAAKX,EAAEW,EAAI,IAAK,KACrB3O,EAAO,IAAIC,MAAM,EAAG+N,EAAEkC,EAAGlC,EAAEA,EAAGA,EAAEuL,EAAGvL,EAAEwL,EAAGxL,EAAEyL,EAAGzL,EAAE0L,UACnD1Z,EAAKwW,YAAYxI,EAAEW,GACZ3O,SAEF,IAAIC,KAAK+N,EAAEW,EAAGX,EAAEkC,EAAGlC,EAAEA,EAAGA,EAAEuL,EAAGvL,EAAEwL,EAAGxL,EAAEyL,EAAGzL,EAAE0L,GAGlD,SAASQ,GAAQlM,MACX,GAAKA,EAAEW,GAAKX,EAAEW,EAAI,IAAK,KACrB3O,EAAO,IAAIC,KAAKA,KAAK8Z,KAAK,EAAG/L,EAAEkC,EAAGlC,EAAEA,EAAGA,EAAEuL,EAAGvL,EAAEwL,EAAGxL,EAAEyL,EAAGzL,EAAE0L,WAC5D1Z,EAAKwX,eAAexJ,EAAEW,GACf3O,SAEF,IAAIC,KAAKA,KAAK8Z,IAAI/L,EAAEW,EAAGX,EAAEkC,EAAGlC,EAAEA,EAAGA,EAAEuL,EAAGvL,EAAEwL,EAAGxL,EAAEyL,EAAGzL,EAAE0L,IAG3D,SAASU,GAAQzL,EAAGuB,EAAGlC,SACd,CAACW,EAAGA,EAAGuB,EAAGA,EAAGlC,EAAGA,EAAGuL,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,GAGlC,SAASvF,GAAa/B,OAC/B2K,EAAkB3K,EAAO4K,SACzBC,EAAc7K,EAAOpS,KACrBkd,EAAc9K,EAAO+K,KACrBC,EAAiBhL,EAAOiL,QACxBC,EAAkBlL,EAAOmL,KACzBC,EAAuBpL,EAAOqL,UAC9BC,EAAgBtL,EAAOuL,OACvBC,EAAqBxL,EAAOyL,YAE5BC,EAAWC,GAASX,GACpBY,EAAeC,GAAab,GAC5Bc,EAAYH,GAAST,GACrBa,EAAgBF,GAAaX,GAC7Bc,EAAiBL,GAASP,GAC1Ba,EAAqBJ,GAAaT,GAClCc,EAAUP,GAASL,GACnBa,EAAcN,GAAaP,GAC3Bc,EAAeT,GAASH,GACxBa,EAAmBR,GAAaL,GAEhCc,EAAU,YAmQc1Q,UACnBwP,EAAqBxP,EAAEiI,sBAGTjI,UACdsP,EAAgBtP,EAAEiI,sBAGDjI,UACjB4P,EAAmB5P,EAAE9N,wBAGT8N,UACZ0P,EAAc1P,EAAE9N,eA3QlB,OACAye,KACAA,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,cAmQepR,UACboP,IAAiBpP,EAAE0H,YAAc,iBAGnB1H,UACd,KAAOA,EAAE9N,WAAa,MArQxBmf,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACA,OACA,OACA1W,KACA2W,KACAC,OACAC,IAGHC,EAAa,YAwPchS,UACtBwP,EAAqBxP,EAAEiJ,yBAGNjJ,UACjBsP,EAAgBtP,EAAEiJ,yBAGEjJ,UACpB4P,EAAmB5P,EAAE5N,2BAGN4N,UACf0P,EAAc1P,EAAE5N,kBAhQlB,OACA6f,KACAA,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,cAwPkB1S,UAChBoP,IAAiBpP,EAAEvF,eAAiB,iBAGnBuF,UACjB,KAAOA,EAAE5N,cAAgB,MA1P3Bif,KACAC,KACAqB,KACAC,KACAC,KACAC,KACAC,KACAC,KACA,OACA,OACAC,KACAC,KACAC,OACApB,IAGHqB,EAAS,YA6JcpT,EAAGqT,EAAQ1nB,OAChCM,EAAImkB,EAAe5M,KAAK6P,EAAO7lB,MAAM7B,WAClCM,GAAK+T,EAAE0M,EAAI2D,EAAmB3jB,IAAIT,EAAE,GAAGuZ,eAAgB7Z,EAAIM,EAAE,GAAGZ,SAAW,cAG9D2U,EAAGqT,EAAQ1nB,OAC3BM,EAAIikB,EAAU1M,KAAK6P,EAAO7lB,MAAM7B,WAC7BM,GAAK+T,EAAE0M,EAAIyD,EAAczjB,IAAIT,EAAE,GAAGuZ,eAAgB7Z,EAAIM,EAAE,GAAGZ,SAAW,cAGtD2U,EAAGqT,EAAQ1nB,OAC9BM,EAAIukB,EAAahN,KAAK6P,EAAO7lB,MAAM7B,WAChCM,GAAK+T,EAAEkC,EAAIuO,EAAiB/jB,IAAIT,EAAE,GAAGuZ,eAAgB7Z,EAAIM,EAAE,GAAGZ,SAAW,cAG9D2U,EAAGqT,EAAQ1nB,OACzBM,EAAIqkB,EAAQ9M,KAAK6P,EAAO7lB,MAAM7B,WAC3BM,GAAK+T,EAAEkC,EAAIqO,EAAY7jB,IAAIT,EAAE,GAAGuZ,eAAgB7Z,EAAIM,EAAE,GAAGZ,SAAW,cAGhD2U,EAAGqT,EAAQ1nB,UAC/B2nB,EAAetT,EAAG+O,EAAiBsE,EAAQ1nB,MA5K7C4nB,KACAA,KACAC,KACAC,KACAC,KACAC,KACAA,KACAC,KACAC,KACAC,KACAC,cAwIc/T,EAAGqT,EAAQ1nB,OAC1BM,EAAI6jB,EAAStM,KAAK6P,EAAO7lB,MAAM7B,WAC5BM,GAAK+T,EAAEhU,EAAIgkB,EAAatjB,IAAIT,EAAE,GAAGuZ,eAAgB7Z,EAAIM,EAAE,GAAGZ,SAAW,KAxIvE2oB,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,cA2JkBxU,EAAGqT,EAAQ1nB,UAC3B2nB,EAAetT,EAAGiP,EAAaoE,EAAQ1nB,eAGvBqU,EAAGqT,EAAQ1nB,UAC3B2nB,EAAetT,EAAGkP,EAAamE,EAAQ1nB,MA7JzC8nB,KACAC,KACAe,OACAC,aAWErP,EAAU/B,EAAWoN,UACrB,SAAS1e,OAKV7F,EACAsM,EACA6D,EANA+W,EAAS,GACT1nB,GAAK,EACLO,EAAI,EACJD,EAAIqX,EAAUjY,WAKZ2G,aAAgBC,OAAOD,EAAO,IAAIC,MAAMD,MAErCrG,EAAIM,GACqB,KAA5BqX,EAAU7H,WAAW9P,KACvB0nB,EAAO9mB,KAAK+W,EAAU9V,MAAMtB,EAAGP,IACgB,OAA1C8M,EAAMkc,GAAKxoB,EAAImX,EAAUsR,SAASjpB,KAAcQ,EAAImX,EAAUsR,SAASjpB,GACvE8M,EAAY,MAANtM,EAAY,IAAM,KACzBmQ,EAASoU,EAAQvkB,MAAIA,EAAImQ,EAAOtK,EAAMyG,IAC1C4a,EAAO9mB,KAAKJ,GACZD,EAAIP,EAAI,UAIZ0nB,EAAO9mB,KAAK+W,EAAU9V,MAAMtB,EAAGP,IACxB0nB,EAAOrZ,KAAK,cAId6a,EAASvR,EAAWwR,UACpB,SAASzB,OAGVpI,EAAMtD,EAFN3H,EAAIoM,GAAQ,UAAMnX,EAAW,MACzBqe,EAAetT,EAAGsD,EAAW+P,GAAU,GAAI,IAE1CA,EAAOhoB,OAAQ,OAAO,QAG3B,MAAO2U,EAAG,OAAO,IAAI/N,KAAK+N,EAAE+U,MAC5B,MAAO/U,EAAG,OAAO,IAAI/N,KAAW,IAAN+N,EAAE1T,GAAY,MAAO0T,EAAIA,EAAE0L,EAAI,OAGzDoJ,KAAO,MAAO9U,KAAIA,EAAE8U,EAAI,GAGxB,MAAO9U,IAAGA,EAAEuL,EAAIvL,EAAEuL,EAAI,GAAW,GAANvL,EAAEhU,QAGrBiJ,IAAR+K,EAAEkC,IAAiBlC,EAAEkC,EAAI,MAAOlC,EAAIA,EAAE5T,EAAI,GAG1C,MAAO4T,EAAG,IACRA,EAAEgV,EAAI,GAAKhV,EAAEgV,EAAI,GAAI,OAAO,KAC1B,MAAOhV,IAAIA,EAAE0M,EAAI,GACnB,MAAO1M,GAC2B2H,GAApCsD,EAAOiB,GAAQE,GAAQpM,EAAEW,EAAG,EAAG,KAAgBsI,YAC/CgC,EAAOtD,EAAM,GAAa,IAARA,EAAYwB,GAAUvQ,KAAKqS,GAAQ9B,GAAU8B,GAC/DA,EAAOpC,GAAOnC,OAAOuE,EAAkB,GAAXjL,EAAEgV,EAAI,IAClChV,EAAEW,EAAIsK,EAAK9P,iBACX6E,EAAEkC,EAAI+I,EAAK7Y,cACX4N,EAAEA,EAAIiL,EAAK7P,cAAgB4E,EAAE0M,EAAI,GAAK,IAEA/E,GAAtCsD,EAAOK,GAAUc,GAAQpM,EAAEW,EAAG,EAAG,KAAgBsH,SACjDgD,EAAOtD,EAAM,GAAa,IAARA,EAAYsN,GAAWrc,KAAKqS,GAAQgK,GAAWhK,GACjEA,EAAOE,GAAQzE,OAAOuE,EAAkB,GAAXjL,EAAEgV,EAAI,IACnChV,EAAEW,EAAIsK,EAAK1C,cACXvI,EAAEkC,EAAI+I,EAAK/Y,WACX8N,EAAEA,EAAIiL,EAAKnD,WAAa9H,EAAE0M,EAAI,GAAK,QAE5B,MAAO1M,GAAK,MAAOA,KACtB,MAAOA,IAAIA,EAAE0M,EAAI,MAAO1M,EAAIA,EAAE1M,EAAI,EAAI,MAAO0M,EAAI,EAAI,GAC3D2H,EAAM,MAAO3H,EAAIkM,GAAQE,GAAQpM,EAAEW,EAAG,EAAG,IAAIsI,YAAcqC,GAAUc,GAAQpM,EAAEW,EAAG,EAAG,IAAIsH,SACzFjI,EAAEkC,EAAI,EACNlC,EAAEA,EAAI,MAAOA,GAAKA,EAAE0M,EAAI,GAAK,EAAU,EAAN1M,EAAEkV,GAASvN,EAAM,GAAK,EAAI3H,EAAE0M,EAAU,EAAN1M,EAAEmV,GAASxN,EAAM,GAAK,SAKrF,MAAO3H,GACTA,EAAEuL,GAAKvL,EAAE8U,EAAI,IAAM,EACnB9U,EAAEwL,GAAKxL,EAAE8U,EAAI,IACN5I,GAAQlM,IAIVsL,GAAUtL,aAIZsT,EAAetT,EAAGsD,EAAW+P,EAAQnnB,WAIxCC,EACA+M,EAJAvN,EAAI,EACJM,EAAIqX,EAAUjY,OACd6W,EAAImR,EAAOhoB,OAIRM,EAAIM,GAAG,IACRC,GAAKgW,EAAG,OAAQ,KAEV,MADV/V,EAAImX,EAAU7H,WAAW9P,UAEvBQ,EAAImX,EAAUsR,OAAOjpB,OACrBuN,EAAQka,EAAOjnB,KAAKwoB,GAAOrR,EAAUsR,OAAOjpB,KAAOQ,MACnCD,EAAIgN,EAAM8G,EAAGqT,EAAQnnB,IAAM,EAAI,OAAQ,OAClD,GAAIC,GAAKknB,EAAO5X,WAAWvP,YACxB,SAILA,SAjHTwkB,EAAQ1gB,EAAIqV,EAAU4J,EAAayB,GACnCA,EAAQ0E,EAAI/P,EAAU6J,EAAawB,GACnCA,EAAQvkB,EAAIkZ,EAAU0J,EAAiB2B,GACvCsB,EAAWhiB,EAAIqV,EAAU4J,EAAa+C,GACtCA,EAAWoD,EAAI/P,EAAU6J,EAAa8C,GACtCA,EAAW7lB,EAAIkZ,EAAU0J,EAAiBiD,GAoMnC,CACL1V,OAAQ,SAASgH,OACXnQ,EAAIkS,EAAU/B,GAAa,GAAIoN,UACnCvd,EAAE0D,SAAW,kBAAoByM,GAC1BnQ,GAET+F,MAAO,SAASoK,OACVtX,EAAI6oB,EAASvR,GAAa,IAAI,UAClCtX,EAAE6K,SAAW,kBAAoByM,GAC1BtX,GAETqpB,UAAW,SAAS/R,OACdnQ,EAAIkS,EAAU/B,GAAa,GAAI0O,UACnC7e,EAAE0D,SAAW,kBAAoByM,GAC1BnQ,GAETmiB,SAAU,SAAShS,OACbtX,EAAI6oB,EAASvR,GAAa,IAAI,UAClCtX,EAAE6K,SAAW,kBAAoByM,GAC1BtX,IAKb,ICjYIoY,GACOmR,GACAC,GACAH,GACAC,GD6XPX,GAAO,KAAM,KAAS,MAAU,KAChCc,GAAW,UACXC,GAAY,KACZC,GAAY,sBAEhB,SAASld,GAAItJ,EAAOuU,EAAMpJ,OACpBvK,EAAOZ,EAAQ,EAAI,IAAM,GACzBkkB,GAAUtjB,GAAQZ,EAAQA,GAAS,GACnC9D,EAASgoB,EAAOhoB,cACb0E,GAAQ1E,EAASiP,EAAQ,IAAInM,MAAMmM,EAAQjP,EAAS,GAAG2O,KAAK0J,GAAQ2P,EAASA,GAGtF,SAASuC,GAAQtpB,UACRA,EAAE+K,QAAQse,GAAW,QAG9B,SAAS5F,GAAS8F,UACT,IAAIta,OAAO,OAASsa,EAAMrmB,IAAIomB,IAAS5b,KAAK,KAAO,IAAK,KAGjE,SAASiW,GAAa4F,UACb,IAAIC,IAAID,EAAMrmB,KAAI,CAACzE,EAAMY,IAAM,CAACZ,EAAKya,cAAe7Z,MAG7D,SAAS4oB,GAAyBvU,EAAGqT,EAAQ1nB,OACvCM,EAAIwpB,GAASjS,KAAK6P,EAAO7lB,MAAM7B,EAAGA,EAAI,WACnCM,GAAK+T,EAAE0M,GAAKzgB,EAAE,GAAIN,EAAIM,EAAE,GAAGZ,SAAW,EAG/C,SAAS+oB,GAAyBpU,EAAGqT,EAAQ1nB,OACvCM,EAAIwpB,GAASjS,KAAK6P,EAAO7lB,MAAM7B,EAAGA,EAAI,WACnCM,GAAK+T,EAAE1M,GAAKrH,EAAE,GAAIN,EAAIM,EAAE,GAAGZ,SAAW,EAG/C,SAASgpB,GAAsBrU,EAAGqT,EAAQ1nB,OACpCM,EAAIwpB,GAASjS,KAAK6P,EAAO7lB,MAAM7B,EAAGA,EAAI,WACnCM,GAAK+T,EAAEmV,GAAKlpB,EAAE,GAAIN,EAAIM,EAAE,GAAGZ,SAAW,EAG/C,SAASipB,GAAmBtU,EAAGqT,EAAQ1nB,OACjCM,EAAIwpB,GAASjS,KAAK6P,EAAO7lB,MAAM7B,EAAGA,EAAI,WACnCM,GAAK+T,EAAEgV,GAAK/oB,EAAE,GAAIN,EAAIM,EAAE,GAAGZ,SAAW,EAG/C,SAASmpB,GAAsBxU,EAAGqT,EAAQ1nB,OACpCM,EAAIwpB,GAASjS,KAAK6P,EAAO7lB,MAAM7B,EAAGA,EAAI,WACnCM,GAAK+T,EAAEkV,GAAKjpB,EAAE,GAAIN,EAAIM,EAAE,GAAGZ,SAAW,EAG/C,SAASqoB,GAAc1T,EAAGqT,EAAQ1nB,OAC5BM,EAAIwpB,GAASjS,KAAK6P,EAAO7lB,MAAM7B,EAAGA,EAAI,WACnCM,GAAK+T,EAAEW,GAAK1U,EAAE,GAAIN,EAAIM,EAAE,GAAGZ,SAAW,EAG/C,SAASooB,GAAUzT,EAAGqT,EAAQ1nB,OACxBM,EAAIwpB,GAASjS,KAAK6P,EAAO7lB,MAAM7B,EAAGA,EAAI,WACnCM,GAAK+T,EAAEW,GAAK1U,EAAE,KAAOA,EAAE,GAAK,GAAK,KAAO,KAAON,EAAIM,EAAE,GAAGZ,SAAW,EAG5E,SAASopB,GAAUzU,EAAGqT,EAAQ1nB,OACxBM,EAAI,+BAA+BuX,KAAK6P,EAAO7lB,MAAM7B,EAAGA,EAAI,WACzDM,GAAK+T,EAAE8U,EAAI7oB,EAAE,GAAK,IAAMA,EAAE,IAAMA,EAAE,IAAM,OAAQN,EAAIM,EAAE,GAAGZ,SAAW,EAG7E,SAAS2oB,GAAahU,EAAGqT,EAAQ1nB,OAC3BM,EAAIwpB,GAASjS,KAAK6P,EAAO7lB,MAAM7B,EAAGA,EAAI,WACnCM,GAAK+T,EAAE5T,EAAW,EAAPH,EAAE,GAAS,EAAGN,EAAIM,EAAE,GAAGZ,SAAW,EAGtD,SAASyoB,GAAiB9T,EAAGqT,EAAQ1nB,OAC/BM,EAAIwpB,GAASjS,KAAK6P,EAAO7lB,MAAM7B,EAAGA,EAAI,WACnCM,GAAK+T,EAAEkC,EAAIjW,EAAE,GAAK,EAAGN,EAAIM,EAAE,GAAGZ,SAAW,EAGlD,SAASkoB,GAAgBvT,EAAGqT,EAAQ1nB,OAC9BM,EAAIwpB,GAASjS,KAAK6P,EAAO7lB,MAAM7B,EAAGA,EAAI,WACnCM,GAAK+T,EAAEA,GAAK/T,EAAE,GAAIN,EAAIM,EAAE,GAAGZ,SAAW,EAG/C,SAASuoB,GAAe5T,EAAGqT,EAAQ1nB,OAC7BM,EAAIwpB,GAASjS,KAAK6P,EAAO7lB,MAAM7B,EAAGA,EAAI,WACnCM,GAAK+T,EAAEkC,EAAI,EAAGlC,EAAEA,GAAK/T,EAAE,GAAIN,EAAIM,EAAE,GAAGZ,SAAW,EAGxD,SAASsoB,GAAY3T,EAAGqT,EAAQ1nB,OAC1BM,EAAIwpB,GAASjS,KAAK6P,EAAO7lB,MAAM7B,EAAGA,EAAI,WACnCM,GAAK+T,EAAEuL,GAAKtf,EAAE,GAAIN,EAAIM,EAAE,GAAGZ,SAAW,EAG/C,SAAS0oB,GAAa/T,EAAGqT,EAAQ1nB,OAC3BM,EAAIwpB,GAASjS,KAAK6P,EAAO7lB,MAAM7B,EAAGA,EAAI,WACnCM,GAAK+T,EAAEwL,GAAKvf,EAAE,GAAIN,EAAIM,EAAE,GAAGZ,SAAW,EAG/C,SAAS8oB,GAAanU,EAAGqT,EAAQ1nB,OAC3BM,EAAIwpB,GAASjS,KAAK6P,EAAO7lB,MAAM7B,EAAGA,EAAI,WACnCM,GAAK+T,EAAEyL,GAAKxf,EAAE,GAAIN,EAAIM,EAAE,GAAGZ,SAAW,EAG/C,SAASwoB,GAAkB7T,EAAGqT,EAAQ1nB,OAChCM,EAAIwpB,GAASjS,KAAK6P,EAAO7lB,MAAM7B,EAAGA,EAAI,WACnCM,GAAK+T,EAAE0L,GAAKzf,EAAE,GAAIN,EAAIM,EAAE,GAAGZ,SAAW,EAG/C,SAASmoB,GAAkBxT,EAAGqT,EAAQ1nB,OAChCM,EAAIwpB,GAASjS,KAAK6P,EAAO7lB,MAAM7B,EAAGA,EAAI,WACnCM,GAAK+T,EAAE0L,EAAIzb,KAAKwR,MAAMxV,EAAE,GAAK,KAAON,EAAIM,EAAE,GAAGZ,SAAW,EAGjE,SAASqpB,GAAoB1U,EAAGqT,EAAQ1nB,OAClCM,EAAIypB,GAAUlS,KAAK6P,EAAO7lB,MAAM7B,EAAGA,EAAI,WACpCM,EAAIN,EAAIM,EAAE,GAAGZ,QAAU,EAGhC,SAAS4oB,GAAmBjU,EAAGqT,EAAQ1nB,OACjCM,EAAIwpB,GAASjS,KAAK6P,EAAO7lB,MAAM7B,WAC5BM,GAAK+T,EAAE+U,GAAK9oB,EAAE,GAAIN,EAAIM,EAAE,GAAGZ,SAAW,EAG/C,SAAS6oB,GAA0BlU,EAAGqT,EAAQ1nB,OACxCM,EAAIwpB,GAASjS,KAAK6P,EAAO7lB,MAAM7B,WAC5BM,GAAK+T,EAAE1T,GAAKL,EAAE,GAAIN,EAAIM,EAAE,GAAGZ,SAAW,EAG/C,SAASslB,GAAiB3Q,EAAGhU,UACpByM,GAAIuH,EAAE8H,UAAW9b,EAAG,GAG7B,SAAS+kB,GAAa/Q,EAAGhU,UAChByM,GAAIuH,EAAE0H,WAAY1b,EAAG,GAG9B,SAASglB,GAAahR,EAAGhU,UAChByM,GAAIuH,EAAE0H,WAAa,IAAM,GAAI1b,EAAG,GAGzC,SAASilB,GAAgBjR,EAAGhU,UACnByM,GAAI,EAAI0S,GAAQjK,MAAM8L,GAAShN,GAAIA,GAAIhU,EAAG,GAGnD,SAASklB,GAAmBlR,EAAGhU,UACtByM,GAAIuH,EAAEqH,kBAAmBrb,EAAG,GAGrC,SAAS4kB,GAAmB5Q,EAAGhU,UACtBklB,GAAmBlR,EAAGhU,GAAK,MAGpC,SAASmlB,GAAkBnR,EAAGhU,UACrByM,GAAIuH,EAAE9N,WAAa,EAAGlG,EAAG,GAGlC,SAASolB,GAAcpR,EAAGhU,UACjByM,GAAIuH,EAAEwH,aAAcxb,EAAG,GAGhC,SAASulB,GAAcvR,EAAGhU,UACjByM,GAAIuH,EAAEuH,aAAcvb,EAAG,GAGhC,SAASwlB,GAA0BxR,OAC7B2H,EAAM3H,EAAEiI,gBACG,IAARN,EAAY,EAAIA,EAGzB,SAAS8J,GAAuBzR,EAAGhU,UAC1ByM,GAAIsd,GAAW7U,MAAM8L,GAAShN,GAAK,EAAGA,GAAIhU,EAAG,GAGtD,SAASgqB,GAAKhW,OACR2H,EAAM3H,EAAEiI,gBACJN,GAAO,GAAa,IAARA,EAAasO,GAAajW,GAAKiW,GAAard,KAAKoH,GAGvE,SAAS0R,GAAoB1R,EAAGhU,UAC9BgU,EAAIgW,GAAKhW,GACFvH,GAAIwd,GAAa/U,MAAM8L,GAAShN,GAAIA,IAA+B,IAAzBgN,GAAShN,GAAGiI,UAAiBjc,EAAG,GAGnF,SAAS2lB,GAA0B3R,UAC1BA,EAAEiI,SAGX,SAAS2J,GAAuB5R,EAAGhU,UAC1ByM,GAAIwc,GAAW/T,MAAM8L,GAAShN,GAAK,EAAGA,GAAIhU,EAAG,GAGtD,SAASkP,GAAW8E,EAAGhU,UACdyM,GAAIuH,EAAEuI,cAAgB,IAAKvc,EAAG,GAGvC,SAAS6kB,GAAc7Q,EAAGhU,UAEjByM,IADPuH,EAAIgW,GAAKhW,IACIuI,cAAgB,IAAKvc,EAAG,GAGvC,SAAS6lB,GAAe7R,EAAGhU,UAClByM,GAAIuH,EAAEuI,cAAgB,IAAOvc,EAAG,GAGzC,SAAS8kB,GAAkB9Q,EAAGhU,OACxB2b,EAAM3H,EAAEiI,gBAELxP,IADPuH,EAAK2H,GAAO,GAAa,IAARA,EAAasO,GAAajW,GAAKiW,GAAard,KAAKoH,IACrDuI,cAAgB,IAAOvc,EAAG,GAGzC,SAAS8lB,GAAW9R,OACdmC,EAAInC,EAAE+H,2BACF5F,EAAI,EAAI,KAAOA,IAAM,EAAG,MAC1B1J,GAAI0J,EAAI,GAAK,EAAG,IAAK,GACrB1J,GAAI0J,EAAI,GAAI,IAAK,GAGzB,SAAS8P,GAAoBjS,EAAGhU,UACvByM,GAAIuH,EAAE5E,aAAcpP,EAAG,GAGhC,SAASqmB,GAAgBrS,EAAGhU,UACnByM,GAAIuH,EAAEvF,cAAezO,EAAG,GAGjC,SAASsmB,GAAgBtS,EAAGhU,UACnByM,GAAIuH,EAAEvF,cAAgB,IAAM,GAAIzO,EAAG,GAG5C,SAASumB,GAAmBvS,EAAGhU,UACtByM,GAAI,EAAIoQ,GAAO3H,MAAMqI,GAAQvJ,GAAIA,GAAIhU,EAAG,GAGjD,SAASwmB,GAAsBxS,EAAGhU,UACzByM,GAAIuH,EAAEjF,qBAAsB/O,EAAG,GAGxC,SAASkmB,GAAsBlS,EAAGhU,UACzBwmB,GAAsBxS,EAAGhU,GAAK,MAGvC,SAASymB,GAAqBzS,EAAGhU,UACxByM,GAAIuH,EAAE5N,cAAgB,EAAGpG,EAAG,GAGrC,SAAS0mB,GAAiB1S,EAAGhU,UACpByM,GAAIuH,EAAErF,gBAAiB3O,EAAG,GAGnC,SAAS2mB,GAAiB3S,EAAGhU,UACpByM,GAAIuH,EAAEnF,gBAAiB7O,EAAG,GAGnC,SAAS4mB,GAA6B5S,OAChCkW,EAAMlW,EAAEiJ,mBACG,IAARiN,EAAY,EAAIA,EAGzB,SAASrD,GAA0B7S,EAAGhU,UAC7ByM,GAAIyQ,GAAUhI,MAAMqI,GAAQvJ,GAAK,EAAGA,GAAIhU,EAAG,GAGpD,SAASmqB,GAAQnW,OACX2H,EAAM3H,EAAEiJ,mBACJtB,GAAO,GAAa,IAARA,EAAayB,GAAYpJ,GAAKoJ,GAAYxQ,KAAKoH,GAGrE,SAAS8S,GAAuB9S,EAAGhU,UACjCgU,EAAImW,GAAQnW,GACLvH,GAAI2Q,GAAYlI,MAAMqI,GAAQvJ,GAAIA,IAAiC,IAA3BuJ,GAAQvJ,GAAGiJ,aAAoBjd,EAAG,GAGnF,SAAS+mB,GAA6B/S,UAC7BA,EAAEiJ,YAGX,SAAS+J,GAA0BhT,EAAGhU,UAC7ByM,GAAI0Q,GAAUjI,MAAMqI,GAAQvJ,GAAK,EAAGA,GAAIhU,EAAG,GAGpD,SAASinB,GAAcjT,EAAGhU,UACjByM,GAAIuH,EAAE7E,iBAAmB,IAAKnP,EAAG,GAG1C,SAASmmB,GAAiBnS,EAAGhU,UAEpByM,IADPuH,EAAImW,GAAQnW,IACC7E,iBAAmB,IAAKnP,EAAG,GAG1C,SAASknB,GAAkBlT,EAAGhU,UACrByM,GAAIuH,EAAE7E,iBAAmB,IAAOnP,EAAG,GAG5C,SAASomB,GAAqBpS,EAAGhU,OAC3B2b,EAAM3H,EAAEiJ,mBAELxQ,IADPuH,EAAK2H,GAAO,GAAa,IAARA,EAAayB,GAAYpJ,GAAKoJ,GAAYxQ,KAAKoH,IACnD7E,iBAAmB,IAAOnP,EAAG,GAG5C,SAASmnB,WACA,QAGT,SAASpB,WACA,IAGT,SAASV,GAAoBrR,UACnBA,EAGV,SAASsR,GAA2BtR,UAC3B/P,KAAKwR,OAAOzB,EAAI,KEjrBzB,SAASoW,GAASjpB,SACVkpB,EAAQ,UACPC,GAAQD,EAAMC,KAAUD,EAAMC,GAAQnpB,EAAOmpB,IA+BtD,SAASC,GAAanS,SACd9H,EAAS8Z,GAAQhS,EAAO9H,QACxB+H,EAAeD,EAAOC,mBACrB,CACL/H,OAAAA,EACA+H,aAAAA,EAEAmS,YAAYF,SACJhqB,EAAI+W,GAAgBiT,GAAQ,QAEf,MAAfhqB,EAAEuX,UAAmB,QACvBvX,EAAEuX,UAAY,GAENvX,EAAEqQ,UACH,IACHrQ,EAAEuX,WAAa,YAGZ,IACHvX,EAAEuX,WAAa,SA/CP4S,EAmDMna,EAAOhQ,GAnDCoqB,EAoD1Bpa,EAAO,MAAPA,CAAc,GAAG,GAnDhBtM,UACCuI,EAAMke,EAAazmB,GACnB2mB,EAAMpe,EAAI0K,QAAQyT,MACpBC,EAAM,EAAG,OAAOpe,MAChBqe,EAYR,SAAwBre,EAAKoe,OAEvBxqB,EADAR,EAAI4M,EAAIse,YAAY,QAEpBlrB,EAAI,EAAG,OAAOA,MAEbA,EAAI4M,EAAIlN,SAAUM,EAAIgrB,MACzBxqB,EAAIoM,EAAIkD,WAAW9P,GACfQ,GAAK,IAAMA,GAAK,GAAI,OAAOR,EAAI,EAnBzBmrB,CAAeve,EAAKoe,SACxBhY,EAAMiY,EAAMre,EAAIlN,OAASkN,EAAI/K,MAAMopB,GAAO,UAEvCA,EAAMD,MAAsB,MAAbpe,EAAIqe,GAAc,GACtCA,eAIGre,EAAI/K,MAAM,EAAGopB,GAAOjY,UA0ChBrC,EAAOhQ,GAvDtB,IAAoBmqB,EAAcC,GA2D9BK,WAAWrY,EAAOuC,EAAMC,EAAOoC,GAC7BA,EAAYD,GAA6B,MAAbC,EAAoB,KAAOA,SACjDlC,EAAOO,GAASjD,EAAOuC,EAAMC,GAC7B/R,EAAQc,KAAKuC,IAAIvC,KAAKI,IAAIqO,GAAQzO,KAAKI,IAAI4Q,QAC7C4C,KAEuB,MAAvBP,EAAUO,iBACJP,EAAU3G,UACX,WAEI3B,MAAM6I,EAAYmT,GAAgB5V,EAAMjS,MAC3CmU,EAAUO,UAAYA,GAGjBQ,EAAaf,EAAWnU,OAG9B,OACA,QACA,QACA,QACA,IAEI6L,MAAM6I,EAAYoT,GAAe7V,EAAMjS,MAC1CmU,EAAUO,UAAYA,GAAgC,MAAnBP,EAAU3G,iBAM9C,QACA,IAEI3B,MAAM6I,EAAYqT,GAAe9V,MACpCkC,EAAUO,UAAYA,EAAuC,GAAP,MAAnBP,EAAU3G,cAQhDL,EAAOgH,KAMpB,IAAI6T,GAqDAC,GAnDJ,SAASC,YACAF,GAAsBZ,GAAa,CACxCja,OAAQA,GACR+H,aAAcA,KAGlB,SAASiT,GAAmBpR,UACnBqQ,GAAapQ,GAAaD,IAEnC,SAASqR,GAA0BrR,UAC1BrY,UAAUxC,OAAS8rB,GAAsBG,GAAmBpR,GAAciR,GAGnF,SAASK,GAAgBlb,EAAQmK,EAAU6P,GAGpCloB,EAFLkoB,EAAOA,GAAQ,KAGb1qB,EAAO,wCAAuC0qB,WAG1ClP,EAASX,EAASyD,IAClB5C,EAASb,EAASwD,IAClBxC,EAAOhB,EAASuD,IAChBrC,EAAMlB,EAASoD,IACfoB,EAAOxE,EAASmD,IAChBvB,EAAQ5B,EAASkD,IACjB5X,EAAU0U,EAASiD,IACnBzO,EAAOwL,EAASgD,IAChBiC,EAAIpP,EAAOga,EAAI,cAAkB,OACjC7K,EAAInP,EAAOga,EAAI,SAAa,OAC5B9K,EAAIlP,EAAOga,EAAI,SAAa,SAC5B/K,EAAIjP,EAAOga,EAAI,OAAW,SAC1BtW,EAAI1D,EAAOga,EAAI,MAAUA,EAAI,KAAS,SACtC5J,EAAIpQ,EAAOga,EAAI,MAAU,SACzBpU,EAAI5F,EAAOga,EAAI,OAAW,MAC1BlqB,EAAIkQ,EAAOga,EAAI,SAAa,MAC5B3V,EAAIrE,EAAOga,EAAI,MAAU,aACxBtkB,IAASoV,EAAOpV,GAAQA,EAAO0Z,EAAIpE,EAAOtV,GAAQA,EAAOyZ,EAAIhE,EAAKzV,GAAQA,EAAOwZ,EAAI7D,EAAI3V,GAAQA,EAAOuZ,EAAIlD,EAAMrW,GAAQA,EAAOiZ,EAAKjZ,GAAQA,EAAOgO,EAAI0M,EAAIzR,EAAKjJ,GAAQA,EAAOD,EAAQC,GAAQA,EAAOkQ,EAAI9V,EAAIuU,GAAG3O,GAG5N,SAASylB,GAAWrT,SACZmR,EAAaa,GAAQhS,EAAO9H,QAC5B+Y,EAAYe,GAAQhS,EAAOiR,iBAC1B,CACLE,WAAYe,GAAQnf,GAASmf,GAAQf,EAAWe,GAAQkB,GAAgBjC,EAAY9H,GAAc6I,GAClGjB,UAAWiB,GAAQnf,GAASmf,GAAQjB,EAAUiB,GAAQkB,GAAgBnC,EAAW3H,GAAa4I,GAC9Fd,UAAWY,GAAQhS,EAAOlL,OAC1Boc,SAAUc,GAAQhS,EAAOkR,WAM7B,SAASoC,YACAN,GAAoBK,GAAW,CACpCnb,OAAQiZ,GACRrc,MAAOsc,GACPH,UAAWA,GACXC,SAAUA,KAGd,SAASqC,GAAiBzR,UACjBuR,GAAWG,GAAmB1R,IAEvC,SAAS2R,GAAwB3R,UACxBrY,UAAUxC,OAAS+rB,GAAoBO,GAAiBzR,GAAckR,IDtKhE,SAAuBlR,GACpC9B,GAAS+B,GAAaD,GACtBqP,GAAanR,GAAO9H,OACpBkZ,GAAYpR,GAAOlL,MACnBmc,GAAYjR,GAAOiR,UACnBC,GAAWlR,GAAOkR,UAhBN,CACZtG,SAAU,SACVhd,KAAM,aACNmd,KAAM,eACNE,QAAS,CAAC,KAAM,MAChBE,KAAM,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YACzEE,UAAW,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OACtDE,OAAQ,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YACvHE,YAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,SCuG7FwH,KAqDAK,KAgBA,MAAMI,GAAe,CAACxX,EAAQ6O,IAASjb,GAAO,GAAIoM,EAAQ6O,GAE1D,SAAS/K,GAAO2T,EAAYC,SACpB1X,EAASyX,EAAaT,GAAmBS,GAAcR,KACvDpI,EAAO6I,EAAWL,GAAiBK,GAAYH,YAC9CC,GAAaxX,EAAQ6O,GAE9B,SAAS8I,GAAcF,EAAYC,SAC3B1qB,EAAOO,UAAUxC,cAEnBiC,GAAiB,IAATA,GACV1B,EAAM,uDAGD0B,EAAOwqB,GAAaP,GAA0BQ,GAAaF,GAAwBG,IAAaF,GAAaP,KAA6BM,MCnMnJ,MAAMK,GAAc,qBAEdC,GAAa,kGAEbC,GAAgB,8DAGhBC,GAAe,UAkCrBC,eAAeC,GAAKC,EAAKC,SACjBhsB,QAAYqB,KAAK4qB,SAASF,EAAKC,GAC/BE,EAAMlsB,EAAImsB,YACTnsB,EAAIosB,UAAY/qB,KAAKgrB,KAAKH,GAAO7qB,KAAKirB,KAAKJ,EAAKF,GAczDH,eAAeI,GAASF,EAAKC,GAC3BA,EAAUvkB,GAAO,GAAIpG,KAAK2qB,QAASA,SAC7BO,EAAalrB,KAAKkrB,WAClBC,EAAS,CACbL,KAAM,UAEJM,EAAQC,EAAUC,QAChBC,EAAYlB,GAAWtjB,KAAK2jB,EAAInhB,QAAQ+gB,GAAe,KAElD,MAAPI,GAA8B,iBAARA,GAAqBa,GAC7CztB,EAAM,kCAAoC0tB,GAAYd,UAGlDe,EAAcrB,GAAYrjB,KAAK2jB,UAEhCY,EAAOX,EAAQe,WAAaD,IAE1Bf,EAAIiB,WAAW,MAAkC,MAA1BL,EAAKA,EAAK/tB,OAAS,KAC7CmtB,EAAM,IAAMA,GAGdA,EAAMY,EAAOZ,GAIfW,GAAYD,EAASV,EAAIiB,WAAWpB,MAAmC,SAAjBI,EAAQiB,MAAoC,SAAjBjB,EAAQiB,OAAoBH,GAAeP,EAExHE,EAEFV,EAAMA,EAAIhrB,MAAM6qB,GAAahtB,QACpBmtB,EAAIiB,WAAW,QACQ,SAA5BhB,EAAQkB,iBAEVnB,EAAMA,EAAIhrB,MAAM,GAChB2rB,GAAW,GAGXX,GAAOC,EAAQkB,iBAAmB,QAAU,IAAMnB,GAKtDnqB,OAAO+H,eAAe6iB,EAAQ,YAAa,CACzC9pB,QAASgqB,IAGXF,EAAOL,KAAOJ,EAEVC,EAAQ3J,SACVmK,EAAOnK,OAAS2J,EAAQ3J,OAAS,IAI/B2J,EAAQmB,MACVX,EAAOW,IAAMnB,EAAQmB,IAAM,IAKL,UAApBnB,EAAQoB,SAAuBpB,EAAQqB,cACzCb,EAAOa,YAAcrB,EAAQqB,YAAc,IAItCb,EAYT,SAASc,GAAWC,UACXA,EAAKC,GAAY,IAAIC,SAAQ,CAACC,EAAQC,KAC3CJ,EAAGK,SAASJ,GAAU,CAACruB,EAAO0uB,KACxB1uB,EAAOwuB,EAAOxuB,GAAYuuB,EAAOG,SAEpCC,GAOPjC,eAAeiC,KACb3uB,EAAM,0BAYR,SAAS4uB,GAAWC,UACXA,EAAQnC,eAAgBK,EAAKF,SAC5BhsB,EAAMyH,GAAO,GAAIpG,KAAK2qB,QAAQM,KAAMN,GACpC9b,EAAO8b,GAAWA,EAAQiC,SAC1BA,QAAiBD,EAAM9B,EAAKlsB,UAC1BiuB,EAASC,GAAyD/nB,EAAW8nB,EAAS/d,IAAS+d,EAAS/d,KAAU+d,EAAS/e,OAA7G/P,EAAM8uB,EAASE,OAAS,GAAKF,EAASG,aAC1DC,GAONxC,eAAewC,KACblvB,EAAM,mCAGR,MAMMqL,GAAWpK,KAAM6X,OAAO1J,OAAOnO,IAAQA,aAAaoF,MAIpD8oB,GAAc,CAClBC,QAAShiB,GACTiiB,QAASprB,EACTyQ,OAAQzQ,EACRmC,KAAMmH,GACNka,OAAQxc,GACRqkB,QAAStuB,GAELuuB,GAAY,CAhBAtuB,GAAW,SAANA,GAAsB,UAANA,IAAuB,IAANA,IAAoB,IAANA,EAMpDA,GAAKoK,GAASpK,IAAM6X,OAAO0W,WAAWvuB,GAUfoK,GAd1BpK,IAAM6X,OAAO1J,MAAM/I,KAAKiH,MAAMrM,KAevCwuB,GAAW,CAAC,UAAW,UAAW,SAAU,QAClD,SAASC,GAAUxZ,EAAQtW,OACpBsW,IAAWA,EAAOzW,OAAQ,MAAO,gBAChCY,EAAI6V,EAAOzW,OACX6W,EAAIiZ,GAAU9vB,OACdkE,EAAI4rB,GAAU3rB,KAAI,CAAC3C,EAAGlB,IAAMA,EAAI,QAEjC,IAAkBO,EAAGiD,EAAjBxD,EAAI,EAAGiK,EAAI,EAAajK,EAAIM,IAAKN,MACxCwD,EAAQ3D,EAAQsW,EAAOnW,GAAGH,GAASsW,EAAOnW,GAErCO,EAAI,EAAGA,EAAIgW,IAAKhW,KACfqD,EAAErD,KA9Bc,OAAVW,EA8BUsC,IA9BQtC,GAAMA,KA8BHsuB,GAAUjvB,GAAGiD,KAC1CI,EAAErD,GAAK,IACL0J,EACEA,IAAMulB,GAAU9vB,QAAQ,MAAO,SAjC3BwB,IAAAA,SAsCPwuB,GAAS9rB,EAAEb,QAAO,CAAC4E,EAAGC,IAAY,IAAND,EAAUC,EAAID,GAAG,GAAK,GAE3D,SAASioB,GAAWjB,EAAMxvB,UACjBA,EAAO4D,QAAO,CAAC8sB,EAAOhwB,KAC3BgwB,EAAMhwB,GAAS8vB,GAAUhB,EAAM9uB,GACxBgwB,IACN,IAGL,SAASC,GAAgBpgB,SACjBnC,EAAQ,SAAUohB,EAAMhe,SACtBof,EAAQ,CACZrgB,UAAWA,UAENsgB,GAAIrB,EAAMhe,EAASpI,GAAOoI,EAAQof,GAASA,WAGpDxiB,EAAM0iB,aAAe,OACd1iB,EAET,SAASyiB,GAAIrB,EAAMhe,UACbA,EAAOuf,SACTvB,EAAOhe,EAAOuf,OAAOrsB,IAAI8pB,IAAatf,KAAKsC,EAAOjB,WAAa,KAAOif,GAGjEwB,GAAUxf,EAAOjB,WAAWnC,MAAMohB,EAAO,IAQlD,SAASyB,GAAKzB,EAAMhe,SACZ0f,EAAO1f,GAAUA,EAAO5H,SAAWlJ,EAAM8Q,EAAO5H,UAAY9H,SAC3DwB,EAASksB,KANAztB,EAMmBytB,EALV,mBAAX2B,QAAyBrpB,EAAWqpB,OAAOC,WAAYD,OAAOC,SAASrvB,IAKVmvB,EAAKljB,KAAKI,MAAMohB,IAI7F,SAAmBA,EAAMhe,IAClBpO,EAAQosB,IAASxjB,GAAWwjB,KAC/BA,EAAO,IAAIA,WAGNhe,GAAUA,EAAO6f,KAAOrjB,KAAKI,MAAMJ,KAAKC,UAAUuhB,IAASA,EATvB8B,CAAUJ,EAAK1B,GAAOhe,GANnE,IAAkBzP,EAFlB8uB,GAAIC,aAAe,OAUnBG,GAAKH,aAAe,OAUpB,MAAMS,GAAU,CACdC,SAAU,CAAC/sB,EAAGlD,IAAMkD,IAAMlD,EAC1BkwB,SAAU,CAAChtB,EAAGlD,IAAMkD,IAAMlD,GAE5B,SAASmwB,GAASlC,EAAMhe,OAClBnP,EAAQsH,EAAQC,EAAU+E,SAC9B6gB,EAAOyB,GAAKzB,EAAMhe,GAEdA,GAAUA,EAAOQ,SACnB3P,EAAS2P,GACTpI,EAAW4H,EAAOQ,SACTR,GAAUA,EAAOmgB,MAC1BtvB,EAASsvB,GACT/nB,EAAW4H,EAAOmgB,KAClBhjB,EAAS4iB,GAAQ/f,EAAO7C,SAExB7N,EAAM,+CAGR6I,GAAUA,EAAS6lB,EAAK5d,QAAQhI,IAAavH,EAAOmtB,EAAM7lB,EAAQgF,GAAU7N,EAAM,4BAA8B8I,GACzGD,GAAUA,EAAOmI,UAAY,CAACnI,GAEvC+nB,GAASZ,aAAe,aAElBtf,GAAS,CACbqf,IAAKA,GACLe,IAAKjB,GAAgB,KACrBkB,IAAKlB,GAAgB,MACrBM,KAAMA,GACNS,SAAUA,IAEZ,SAAS9L,GAAQ3lB,EAAM6xB,UACjB/uB,UAAUxC,OAAS,GACrBiR,GAAOvR,GAAQ6xB,EACR9uB,MAEAyG,GAAe+H,GAAQvR,GAAQuR,GAAOvR,GAAQ,KAGzD,SAAS6wB,GAAajf,SACdxJ,EAAIud,GAAQ/T,UACXxJ,GAAKA,EAAEyoB,cAAgB,OAGhC,SAASiB,GAAMvC,EAAMwC,EAAQC,EAAYC,SAEjCJ,EAASlM,IADfoM,EAASA,GAAU,IACWngB,MAAQ,eACjCigB,GAAQhxB,EAAM,6BAA+BkxB,EAAOngB,MACzD2d,EAAOsC,EAAOtC,EAAMwC,GAChBA,EAAO5jB,OAKb,SAAeohB,EAAMkB,EAAOuB,EAAYC,OACjC1C,EAAKjvB,OAAQ,aAEZ+Y,EAASyT,KACfkF,EAAaA,GAAc3Y,EAAOoR,UAClCwH,EAAYA,GAAa5Y,EAAOkR,aAE5B2H,EACAzxB,EACAG,EACAO,EACAD,EACAiW,EANApX,EAASwvB,EAAKxgB,SAAWzL,OAAO+E,KAAKknB,EAAK,IAOhC,SAAVkB,IAAkBA,EAAQD,GAAWjB,EAAMxvB,IAC/CA,EAASuD,OAAO+E,KAAKooB,SACf0B,EAAUpyB,EAAO0E,KAAIhE,UACnBmR,EAAO6e,EAAMhwB,OACf2xB,EAAOC,KAEPzgB,IAASA,EAAK8c,WAAW,UAAY9c,EAAK8c,WAAW,SAAU,CACjE0D,EAAQxgB,EAAK0gB,MAAM,SAAU,GAE7BD,EAAUD,EAAM,IAEG,MAAfC,EAAQ,IAA+C,MAAhCA,EAAQA,EAAQ/xB,OAAS,IAA8B,MAAf+xB,EAAQ,IAA8C,MAAhCA,EAAQA,EAAQ/xB,OAAS,MAChH+xB,EAAUA,EAAQ5vB,MAAM,GAAI,WAGH,QAAb2vB,EAAM,GAAeH,EAAYD,GAClCK,OAGVrC,GAAYpe,SACT7Q,MAAM,2BAA6BN,EAAQ,IAAMmR,UAGlDoe,GAAYpe,UAGhBhR,EAAI,EAAGM,EAAIquB,EAAKjvB,OAAQ6W,EAAIpX,EAAOO,OAAQM,EAAIM,IAAKN,MACvDsxB,EAAQ3C,EAAK3uB,GAERO,EAAI,EAAGA,EAAIgW,IAAKhW,EACnBV,EAAQV,EAAOoB,GACf+wB,EAAMzxB,GAAS0xB,EAAQhxB,GAAG+wB,EAAMzxB,IAjDlB0N,CAAMohB,EAAMwC,EAAO5jB,MAAO6jB,EAAYC,GACpDzoB,GAAe+lB,EAAM,mBAAmBA,EAAKxgB,QAC1CwgB,QAoDHgD,GAxVN,SAAwB7C,EAAOT,UACtBvB,KACLA,QAASA,GAAW,GACpBC,SAAUA,GACVH,KAAMA,GACNS,aAAcgB,EACdlB,KAAMiB,GAAWC,GACjBjB,KAAMyB,GAAWC,KAiVN8C,CAA+B,oBAAV9C,OAAyBA,MAC7D,MChXA,SAAS+C,GAAWC,SACZ5kB,EAAI4kB,GAAU7wB,EACd8wB,EAAO,GACPC,EAAM,UAEZD,EAAKjuB,IAAM5C,UACHF,EAAKkM,EAAEhM,UAER8wB,EAAIhxB,KACPgxB,EAAIhxB,GAAM,EACV+wB,EAAKnxB,KAAKM,IAGL6wB,GAGTA,EAAKE,OAAS/wB,UACNF,EAAKkM,EAAEhM,MAET8wB,EAAIhxB,GAAK,CACXgxB,EAAIhxB,GAAM,QACJiqB,EAAM8G,EAAKza,QAAQpW,GACrB+pB,GAAO,GAAG8G,EAAKG,OAAOjH,EAAK,UAG1B8G,GAGFA,EAWTpF,eAAewF,GAAeC,EAAIC,aAExBA,EAASD,GACf,MAAOE,GACPF,EAAGnyB,MAAMqyB,IAIb,MAAMC,GAAennB,OAAO,WAC5B,IAAIonB,GAAW,EAOf,SAASC,GAAQxoB,YACLA,IAAKyoB,GAAQzoB,IAQzB,SAASyoB,GAAQzoB,UACRA,EAAEsoB,IASX,SAASI,GAAM1oB,EAAGjJ,UAChBiJ,EAAEsoB,IAAgBvxB,EACXiJ,EAaT,SAAS2oB,GAAStB,SACVrnB,EAAIqnB,IAAU5uB,OAAO4uB,GAASA,EAAQ,CAC1C3C,KAAM2C,UAEDoB,GAAQzoB,GAAKA,EAAI0oB,GAAM1oB,EAAGuoB,MAQnC,SAASK,GAAO5oB,UACP6oB,GAAS7oB,EAAG2oB,GAAS,KAS9B,SAASE,GAAS7oB,EAAGoK,OACd,MAAM3Q,KAAKuG,EAAGoK,EAAE3Q,GAAKuG,EAAEvG,UAErB2Q,EAST,SAAS3I,GAAQzB,EAAGoK,UACXse,GAAMte,EAAGqe,GAAQzoB,IAU1B,SAAS8oB,GAAcC,EAAKxrB,UAClBwrB,EAAaxrB,EAAI,CAAC5D,EAAGlD,IAAMsyB,EAAIpvB,EAAGlD,IAAMgyB,GAAQlrB,EAAE5D,IAAM8uB,GAAQlrB,EAAE9G,IAAM,CAACkD,EAAGlD,IAAMsyB,EAAIpvB,EAAGlD,IAAMgyB,GAAQ9uB,GAAK8uB,GAAQhyB,GAA9G,KAGhB,SAASuyB,GAAYrrB,UACZA,GAAKA,EAAE4E,cAAgB0mB,GAEhC,SAASA,WACDpvB,EAAM,GAEZqvB,EAAM,GAENC,EAAM,GAENC,EAAO,GAEPC,EAAO,OAEH5pB,EAAQ,KACR6pB,GAAS,QACN,CACL/mB,YAAa0mB,GAEbM,OAAOvpB,SACCoK,EAAIpQ,EAAMgG,GACV3J,EAAI+T,EAAE3U,WAEP,IAAIM,EAAI,EAAGA,EAAIM,IAAKN,EAAG8D,EAAIlD,KAAKyT,EAAErU,WAEhCmC,MAGT8vB,OAAOhoB,SACCrG,EAAIqD,EAAWgD,GAAKopB,EAAOF,EAC3B9e,EAAIpQ,EAAMgG,GACV3J,EAAI+T,EAAE3U,WAEP,IAAIM,EAAI,EAAGA,EAAIM,IAAKN,EAAG4D,EAAEhD,KAAKyT,EAAErU,WAE9BmC,MAGTsxB,OAAOxpB,EAAGpK,EAAO2D,SACT+S,EAAI,CACR1W,MAAOA,EACP2D,MAAOmC,EAASnC,WAGdyD,EAAWgD,IACbsM,EAAEzI,OAAS7D,EACXqpB,EAAK1yB,KAAK2V,KAEVA,EAAEmd,MAAQzpB,EACVmpB,EAAIxyB,KAAK2V,IAGJpU,MAGTwxB,OAAO1pB,EAAGV,UACJtC,EAAWgD,GAAIqpB,EAAK1yB,KAAK,CAC3BkN,OAAQ7D,EACRpK,MAAO0J,IACD6pB,EAAIxyB,KAAK,CACf8yB,MAAOzpB,EACPpK,MAAO0J,IAEFpH,MAGTuH,MAAMlG,UACJkG,EAAQlG,EACDrB,MAGToxB,gBACEA,GAAS,EACFpxB,MAGTyxB,MAAMA,EAAOC,SACLC,EAAM,GACN9wB,EAAM,OACRhD,EAAGM,EAAGiW,EAAG/O,EAAGyC,EAAGjJ,MAEdhB,EAAI,EAAGM,EAAIuzB,EAAOn0B,OAAQM,EAAIM,IAAKN,EACtC8zB,EAAIpB,GAAQmB,EAAO7zB,KAAO,MAIvBA,EAAI,EAAGM,EAAI6yB,EAAIzzB,OAAQM,EAAIM,IAAKN,EACnCiK,EAAIkpB,EAAInzB,GACR8zB,EAAIpB,GAAQzoB,KAAO,MAIhBjK,EAAI,EAAGM,EAAI+yB,EAAK3zB,OAAQM,EAAIM,IAAKN,EACpCwH,EAAI6rB,EAAKrzB,GACT6zB,EAAO9vB,SAAQkG,IACTzC,EAAEyC,KAAI6pB,EAAIpB,GAAQzoB,KAAO,UAK5BjK,EAAI,EAAGM,EAAIwD,EAAIpE,OAAQM,EAAIM,IAAKN,EACnCiK,EAAInG,EAAI9D,GACRgB,EAAK0xB,GAAQzoB,GAET6pB,EAAI9yB,GAGN8yB,EAAI9yB,GAAM,EAGV4yB,EAAM9vB,IAAIlD,KAAKgyB,GAAS9uB,EAAI9D,SAK3BA,EAAI,EAAGM,EAAIuzB,EAAOn0B,OAAQM,EAAIM,IAAKN,EACtCiK,EAAI4pB,EAAO7zB,GACP8zB,EAAIpB,GAAQzoB,IAAM,GAAG2pB,EAAMT,IAAIvyB,KAAKqJ,YAIjCwpB,EAAOxpB,EAAGzC,EAAGI,GAChBA,EACFqC,EAAEzC,GAAKI,EAAEqC,GAET2pB,EAAMD,OAASnsB,EAGZ+rB,IAAQvwB,EAAI0vB,GAAQzoB,IAAMA,OAI5BjK,EAAI,EAAGM,EAAI8yB,EAAI1zB,OAAQM,EAAIM,IAAKN,EACnCuW,EAAI6c,EAAIpzB,GACRiK,EAAIsM,EAAEmd,MACNlsB,EAAI+O,EAAE1W,MACNmB,EAAK8yB,EAAIpB,GAAQzoB,IAEbjJ,EAAK,IACPyyB,EAAOxpB,EAAGzC,EAAG+O,EAAE/S,OACfowB,EAAMG,SAASvsB,QAKdxH,EAAI,EAAGM,EAAIgzB,EAAK5zB,OAAQM,EAAIM,IAAKN,EACpCuW,EAAI+c,EAAKtzB,GACTwH,EAAI+O,EAAEzI,OACN+lB,EAAO9vB,SAAQkG,IACTzC,EAAEyC,IAAM6pB,EAAIpB,GAAQzoB,IAAM,GAC5BwpB,EAAOxpB,EAAGsM,EAAE1W,MAAO0W,EAAE/S,UAGzBowB,EAAMG,SAASxd,EAAE1W,UAKf0zB,EACFK,EAAMR,IAAMD,EAAIzzB,QAAU2zB,EAAK3zB,OAASm0B,EAAO/lB,QAAO7D,GAAK6pB,EAAIpB,GAAQzoB,IAAM,IAAK4pB,EAAOhyB,iBAEpFb,KAAMgC,EAAK4wB,EAAMR,IAAIxyB,KAAKoC,EAAIhC,WAIjC0I,GAAkB,MAATA,IAAkBypB,EAAIzzB,QAAU2zB,EAAK3zB,UAChDk0B,EAAMlqB,OAAM,GAGPkqB,IAMb,MAAMI,GAAQ,UAMd,SAASC,KACPvxB,OAAO+H,eAAetI,KAAM6xB,GAAO,CACjCtpB,UAAU,EACVlH,MAAO,KAGXywB,GAAWtrB,UAAY,CAYrBY,IAAInK,EAAMiX,EAAO7S,EAAO0wB,SAChBvwB,EAAIxB,KACJyF,EAAIjE,EAAEvE,GACNg0B,EAAMzvB,EAAEqwB,WAED,MAAT3d,GAAiBA,GAAS,GACxBzO,EAAEyO,KAAW7S,GAAS0wB,KACxBtsB,EAAEyO,GAAS7S,EACX4vB,EAAI/c,EAAQ,IAAMjX,IAAS,EAC3Bg0B,EAAIh0B,IAAS,IAENwI,IAAMpE,GAAS0wB,KACxBvwB,EAAEvE,GAAQoE,EACV4vB,EAAIh0B,GAAQmD,EAAQiB,GAAS,EAAIA,EAAM9D,QAAU,GAG5CiE,GAaTwwB,SAAS/0B,EAAMiX,SACP+c,EAAMjxB,KAAK6xB,QAEZ9xB,UAAUxC,OAAQ,KAChB,MAAMgE,KAAK0vB,KACVA,EAAI1vB,GAAI,OAAO,SAGd,EACF,GAAInB,EAAQnD,GAAO,KACnB,IAAIsE,EAAI,EAAGA,EAAItE,EAAKM,SAAUgE,KAC7B0vB,EAAIh0B,EAAKsE,IAAK,OAAO,SAGpB,SAGO,MAAT2S,GAAiBA,GAAS,EAAIA,EAAQ,EAAI+c,EAAIh0B,MAAWg0B,EAAI/c,EAAQ,IAAMjX,KAAUg0B,EAAIh0B,IAOlGqK,oBACOuqB,IAAS,GACP7xB,OAKX,IAAIiyB,GAAQ,EACZ,MACMC,GAAY,IAAIJ,GAsBtB,SAASK,GAASC,EAAMtoB,EAAQuoB,EAAQC,QACjCzzB,KAAOozB,QACP5wB,MAAQ+wB,OACRG,OAAS,OACTC,MAAQ,OACRC,OAAS,OACTC,MAAQ,EAET5oB,SACG6oB,QAAU7oB,GAGbuoB,GAAQryB,KAAK4yB,WAAWP,EAAQC,GAGtC,SAASO,GAAKC,UACL,SAAUC,SACT1tB,EAAIrF,KAAK0yB,aACU,IAArB3yB,UAAUxC,UAAwB8H,EAAIytB,SACrCJ,MAAQK,EAAQ1tB,EAAIytB,EAAMztB,GAAKytB,EAC7B9yB,OAIXmyB,GAAS3rB,UAAY,CAMnBwsB,iBACShzB,KAAKizB,WAAajzB,KAAKizB,SAAWvD,GAAW7wB,KAStDuI,IAAI/F,UACErB,KAAKqB,QAAUA,QACZA,MAAQA,EACN,GAEA,GAUX6xB,KAAML,GA3EO,GAqFbb,SAAUa,GApFK,GAuGfD,WAAWP,EAAQC,EAAOa,GACxBb,GAAkB,IAAVA,QACFc,EAASpzB,KAAKqzB,QAAUrzB,KAAKqzB,SAAW,IAAIvB,GAC5CwB,EAAStzB,KAAKuzB,QAAUvzB,KAAKuzB,SAAW,GACxCC,EAAO,OACTv2B,EAAMoE,EAAOlD,EAAGN,QAEd8D,EAAM,CAAC1E,EAAMiX,EAAO7S,KACpBA,aAAiB8wB,IACf9wB,IAAUrB,OACRsyB,GAAOjxB,EAAM2xB,UAAUrxB,IAAI3B,MAC/BwzB,EAAK/0B,KAAK4C,IAGZiyB,EAAO70B,KAAK,CACVg1B,GAAIpyB,EACJpE,KAAMA,EACNiX,MAAOA,KAGTkf,EAAOhsB,IAAInK,EAAMiX,EAAO7S,QAIvBpE,KAAQo1B,KACXhxB,EAAQgxB,EAAOp1B,GApIP,UAsIJA,EACF6E,EAAMT,GAAOO,SAAQ6xB,IACbA,aAActB,GAETsB,IAAOzzB,OAChByzB,EAAGT,UAAUrxB,IAAI3B,MACjBwzB,EAAK/0B,KAAKg1B,IAHV31B,EAAM,wDAMLgD,OAASO,OACT,GAAIjB,EAAQiB,OACjB+xB,EAAOhsB,IAAInK,GAAO,EAAGoD,MAAMlC,EAAIkD,EAAM9D,SAEhCM,EAAI,EAAGA,EAAIM,IAAKN,EAAG8D,EAAI1E,EAAMY,EAAGwD,EAAMxD,SAE3C8D,EAAI1E,GAAO,EAAGoE,eAIbqyB,WAAWpsB,QAEZ6rB,IAAUG,EAAOH,UAAW,GACzBK,GAQTE,SAASnB,SACDa,EAASpzB,KAAKqzB,SAAWnB,GACzBoB,EAAStzB,KAAKuzB,YAChBI,EAAM91B,EAAG41B,EAAIxC,KAEbqC,EAAQ,OACJn1B,EAAIm1B,EAAO/1B,WAEZM,EAAI,EAAGA,EAAIM,IAAKN,EACnB81B,EAAOL,EAAOz1B,GACd41B,EAAKE,EAAKF,GACVxC,EAAMwC,EAAGzB,YAAcyB,EAAGlB,QAAUA,EACpCa,EAAOhsB,IAAIusB,EAAK12B,KAAM02B,EAAKzf,MAAOuf,EAAGpyB,MAAO4vB,MAG1CqC,EAAOH,SAAU,KACdt1B,EAAI,EAAGA,EAAIM,IAAKN,EACnB81B,EAAOL,EAAOz1B,GACd81B,EAAKF,GAAGT,UAAUlD,OAAO9vB,WAGtBuzB,QAAU,UACVZ,QAAU,aAIZS,GAOTQ,eACQN,EAAStzB,KAAKuzB,YAChB11B,EAAGM,EAAGw1B,EAAMF,KAEZH,MACGz1B,EAAI,EAAGM,EAAIm1B,EAAO/1B,OAAQM,EAAIM,IAAKN,EACtC81B,EAAOL,EAAOz1B,GACd41B,EAAKE,EAAKF,GAENA,EAAGR,UACLQ,EAAGR,SAASnD,OAAO9vB,WAOpByxB,MAAQ,UACR3wB,OAAS,MAchB+yB,SAASpC,SACD3nB,EAAS9J,KAAK2yB,WAEhB7oB,EAAQ,OACJuoB,EAASryB,KAAK0zB,SAASjC,EAAMc,OAC7B9sB,EAAIqE,EAAOnK,KAAKK,KAAMqyB,EAAQZ,MACpCY,EAAO/qB,QAEH7B,IAAMzF,KAAKqB,WACRA,MAAQoE,OACR,IAAKzF,KAAKgyB,kBACRP,EAAMqC,kBAcnBC,IAAItC,MACEA,EAAMc,MAAQvyB,KAAKuyB,MAAO,OAAOd,EAAMqC,oBACvCE,SAEAh0B,KAAKkzB,aACFA,MAAK,GACVc,EAAK,GAELA,EAAKh0B,KAAK6zB,SAASpC,GAGdzxB,KAAKyxB,MAAQuC,GAAMvC,IAqE9B,IAAIwC,GAAY,EAYhB,SAASC,GAAYvoB,EAAQ9L,EAAOs0B,QAC7Bt1B,KAAOo1B,QACP5yB,MAAQ,KACT8yB,IAASn0B,KAAKm0B,QAAUA,GACxBxoB,IAAQ3L,KAAKo0B,QAAUzoB,GACvB9L,IAAOG,KAAKq0B,OAASx0B,GAY3B,SAASy0B,GAAO3oB,EAAQ9L,EAAOs0B,UACtB,IAAID,GAAYvoB,EAAQ9L,EAAOs0B,GAExCD,GAAY1tB,UAAY,CACtB4tB,QAASl1B,EACTm1B,OAAQv1B,EAERk0B,iBACShzB,KAAKizB,WAAajzB,KAAKizB,SAAWvD,GAAW7wB,KAGtD01B,QAAQx1B,UACDgB,UAAUxC,aACVi3B,WAAaz1B,EACXiB,QAFyBA,KAAKw0B,UAKvCL,QAAQM,MACFz0B,KAAKo0B,QAAQK,GAAM,OACfC,EAAM10B,KAAKqB,MAAQrB,KAAKq0B,OAAOI,GAC/BE,EAAM30B,KAAKizB,SACX90B,EAAIw2B,EAAMA,EAAIp3B,OAAS,MAExB,IAAIM,EAAI,EAAGA,EAAIM,IAAKN,EAAG82B,EAAI92B,GAAGs2B,QAAQO,GAEvC10B,KAAKw0B,WACPC,EAAIG,iBACJH,EAAII,qBAKVlpB,OAAOA,SACCnN,EAAI81B,GAAO3oB,eACZqnB,UAAUrxB,IAAInD,GACZA,GAGTqB,MAAMA,SACErB,EAAI81B,GAAO,KAAMz0B,eAClBmzB,UAAUrxB,IAAInD,GACZA,GAGTuL,cACQvL,EAAI81B,UACLtB,UAAUrxB,IAAInD,OAEd,IAAIX,EAAI,EAAGM,EAAI4B,UAAUxC,OAAQM,EAAIM,IAAKN,EAC7CkC,UAAUlC,GAAGm1B,UAAUrxB,IAAInD,UAGtBA,GAGTs2B,SAASC,OACHjtB,GAAK,SACF9H,KAAK2L,QAAO,WACXqpB,EAAM7wB,KAAK6wB,aAEbA,EAAMltB,EAAIitB,GACZjtB,EAAIktB,EACG,GAEA,MAKbnvB,SAASC,SACDtH,EAAI81B,iBACLtB,UAAUrxB,IAAI2yB,GAAO,KAAM,KAAMzuB,EAASC,GAAOG,UAC9CgqB,EAAKhqB,EAAEgvB,SACbz2B,EAAE21B,QAAQluB,GACNgqB,GAAMA,EAAG8D,KAAK9D,EAAG8D,WAEhBv1B,GAGT02B,QAAQzzB,EAAGlD,OACL42B,GAAS,SACb1zB,EAAEuxB,UAAUrxB,IAAI2yB,GAAO,KAAM,MAAM,IAAMa,GAAS,KAClD52B,EAAEy0B,UAAUrxB,IAAI2yB,GAAO,KAAM,MAAM,IAAMa,GAAS,KAC3Cn1B,KAAK2L,QAAO,IAAMwpB,KAG3BvB,cAIOQ,QAAUl1B,OACV+zB,SAAW,OAqIpB,MAAMmC,GAAO,CACXlC,MAAM,GAmCR,SAASmC,GAASpF,EAAIqE,EAAQtT,EAAQlX,EAAQuoB,EAAQ1H,SAC9ChsB,EAAMyH,GAAO,GAAIukB,EAASyK,QAC5BE,EAAM7B,EACL3uB,EAAWkc,KAASA,EAASxd,EAASwd,SAE5B7Z,IAAX2C,EACFwrB,EAAOrvB,GAAKgqB,EAAGsF,MAAMvU,EAAO/a,IACnBnB,EAAWgF,IACpB2pB,EAAK,IAAItB,GAAS,KAAMroB,EAAQuoB,GAAQ,GAExCiD,EAAOrvB,IACLwtB,EAAGI,SAAS5tB,SACN6B,EAAIkZ,EAAO/a,GACXR,EAAIguB,EAAGpyB,MACbyvB,GAAYrrB,GAAKwqB,EAAGwB,MAAM3pB,EAAGrC,EAAGklB,GAAWsF,EAAGnmB,OAAOhC,EAAGrC,EAAG9G,KAG7D22B,EAAOrvB,GAAKgqB,EAAGnmB,OAAOkX,EAAO/a,GAAI6D,EAAQnL,GAG3C21B,EAAOz0B,MAAMy1B,GAGf,SAASE,GAAWvF,EAAInvB,EAAQkgB,EAAQlX,EAAQuoB,EAAQ1H,WACvCxjB,IAAX2C,EACFhJ,EAAOkyB,UAAUrxB,IAAIqf,OAChB,OACCriB,EAAMgsB,GAAW,GACjB8I,EAAK,IAAItB,GAAS,KAkB5B,SAAiBnR,EAAQlX,UACvBA,EAAShF,EAAWgF,GAAUA,EAAStG,EAASsG,GACzCkX,EAAS,SAAUjiB,EAAG0yB,SACrBpwB,EAAQyI,EAAO/K,EAAG0yB,UAEnBzQ,EAAOkS,SACVlS,EAAOkS,KAAK7xB,IAAUrB,KAAKqB,OAAOA,MAAQA,GAGrCA,GACLyI,EA5B4B2rB,CAAQzU,EAAQlX,GAASuoB,GAAQ,GAC/DoB,EAAGzB,SAASrzB,EAAIozB,OAChB0B,EAAGjB,KAAO1xB,EAAO0xB,KAEjB1xB,EAAOkyB,UAAUrxB,IAAI8xB,GAEjBzS,IACFyS,EAAGP,MAAK,GAERO,EAAGpyB,MAAQ2f,EAAO3f,MAElBoyB,EAAGT,UAAUrxB,IAAIqf,GAEjBiP,EAAGyF,QAAQ1U,EAAQ,CAACyS,MAsD1B,MAAMK,GAAkB,GAoCxB,SAAS6B,GAAMV,EAAU1C,EAAOf,QACzByD,SAAWA,OACX1C,MAAiB,MAATA,GAAiB,EAAIA,OAC7B5wB,IAAM,QACNqvB,IAAM,QACNC,IAAM,QACNj0B,OAAS,UACTw0B,OAASA,GAAU,KAG1B,SAASoE,GAAYpJ,EAAM7gB,SACnB9K,EAAM,UACZ6K,GAAW8gB,EAAM7gB,GAAQ5M,GAAK8B,EAAIpC,KAAKM,KAChC8B,EAGT,SAAS8K,GAAO8lB,EAAOiB,SACfhxB,EAAM,UACZ+vB,EAAMoE,MAAMnD,GAAO5qB,IACjBpG,EAAI6uB,GAAQzoB,IAAM,KAEbA,GAAKpG,EAAI6uB,GAAQzoB,IAAM,KAAOA,EAGvC,SAASguB,GAAUr0B,EAAGlD,UACbkD,EAAI,CAACqG,EAAGjK,IAAM4D,EAAEqG,EAAGjK,IAAMU,EAAEuJ,EAAGjK,GAAKU,EAoX5C,SAASw3B,GAAWd,EAAU1C,EAAOyD,EAAQxE,SACrCtzB,EAAI8B,KACJ7B,EAAI63B,EAAOz4B,WACbc,EAAI,OACH42B,SAAWA,OACX1C,MAAQA,OACRv1B,OAAS,UACTw0B,OAASA,GAAU,UACnBwE,OAASA,MAET,IAAIn4B,EAAI,EAAGA,EAAIM,IAAKN,EAAG,OACpB4zB,EAAQuE,EAAOn4B,MACjB4zB,EAAMc,QAAUA,MAEhBd,EAAMz0B,OAAQ,OACVi5B,EAAO/3B,EAAElB,SAAWkB,EAAElB,OAAS,QAEhC,MAAMqI,KAAKosB,EAAMz0B,OACpBi5B,EAAK5wB,GAAK,EAIVosB,EAAMyE,QAAQh4B,EAAEi4B,OAAM93B,GAAKH,EAAEi4B,KAC7B1E,EAAMyE,QAAQh4B,EAAEk4B,OAAM/3B,GAAKH,EAAEk4B,KAC7B3E,EAAMyE,QAAQh4B,EAAEm4B,OAAMh4B,GAAKH,EAAEm4B,WAG9BC,QAAUj4B,EAwRjB,SAASk4B,GAAUtG,UACjBA,EAAGnyB,MAAM,kEACFmyB,EAtqBT0F,GAAMnvB,UAAY,CAIhBstB,gBAAAA,GAKAqC,IAvEU,EA4EVC,IA3EU,MACA,EAoFVI,QAnFcL,EAwFdM,QAvFcN,EA4FdO,IA3FUP,EAiGVQ,OAhGa,EAsGbC,OArGa,GA2GbC,UA1GgB,GAgHhBC,UA/GgB,GA4HhBC,KAAKrE,UACI,IAAIiD,GAAM31B,KAAKi1B,UAAU7C,KAAKpyB,KAAM0yB,IAU7CsE,cACQ94B,EAAI8B,KAAK+2B,KA5IPZ,UA6IRj4B,EAAEyD,IAAMzD,EAAEyD,IAAIjC,QACdxB,EAAE8yB,IAAM9yB,EAAE8yB,IAAItxB,QACdxB,EAAE+yB,IAAM/yB,EAAE+yB,IAAIvxB,QACVxB,EAAE4C,SAAQ5C,EAAE4C,OAAS5C,EAAE4C,OAAOpB,SAC3BxB,EAAE03B,YAAYc,KAavBO,aACM/4B,EAAI8B,YACO9B,EAAE4C,QAAU5C,EAAEyD,MAAQzD,EAAE8yB,MACnC9yB,EAAE8yB,IAAIzzB,QAAUW,EAAE4C,OAAOvD,SAAWW,EAAEyD,IAAIpE,SAK5CW,EAAI,IAAIy3B,GAAM31B,KAAKi1B,UAAU7C,KAAKpyB,MAClC9B,EAAEyD,IAAMzD,EAAE4C,OACV5C,EAAE8yB,IAAM,IAJD9yB,GAuBXk0B,KAAK8E,EAAKxE,SACFx0B,EAAI8B,YACV9B,EAAEq0B,MAAQ2E,EAAI3E,MACdr0B,EAAEszB,OAAS0F,EAAI1F,QAEX0F,EAAIl6B,QA5LM,GA4LM01B,IAClBx0B,EAAElB,OAASk6B,EAAIl6B,QAtMT,EAyMJ01B,GACFx0B,EAAEi5B,KAAOD,EAAIC,KACbj5B,EAAEyD,IAAMu1B,EAAIv1B,MAEZzD,EAAEi5B,KAAO,KACTj5B,EAAEyD,IAAM,IA7MF,EAgNJ+wB,GACFx0B,EAAEk5B,KAAOF,EAAIE,KACbl5B,EAAE8yB,IAAMkG,EAAIlG,MAEZ9yB,EAAEk5B,KAAO,KACTl5B,EAAE8yB,IAAM,IApNF,EAuNJ0B,GACFx0B,EAAEm5B,KAAOH,EAAIG,KACbn5B,EAAE+yB,IAAMiG,EAAIjG,MAEZ/yB,EAAEm5B,KAAO,KACTn5B,EAAE+yB,IAAM,IAtNI,GAyNVyB,GACFx0B,EAAEo5B,KAAO,KACTp5B,EAAE4C,OAAS,OAEX5C,EAAEo5B,KAAOJ,EAAII,KACbp5B,EAAE4C,OAASo2B,EAAIp2B,OACXo2B,EAAIK,SAAQr5B,EAAEq5B,OAASL,EAAIK,SAG1Br5B,GAOTs5B,SAASlC,QACFL,SAASuC,SAASlC,IAUzBY,QAAQxD,SACArtB,EAAIqtB,GAxPFyD,SALA,EA8PD9wB,GAAWrF,KAAK2B,IAAIpE,QA7PnB,EA6P6B8H,GAAWrF,KAAKgxB,IAAIzzB,QA5PjD,EA4P2D8H,GAAWrF,KAAKixB,IAAI1zB,QAUzF6zB,OAAO2F,MACDA,EAAM,OAAO/2B,KAAK+2B,KApQdZ,GAoQwB/E,eAC1BxzB,EAAMoC,KAAK2B,IAAIpE,OACf25B,EAAMl3B,KAAKc,QAAUd,KAAKc,OAAOvD,cAEnC25B,GAAOA,IAAQt5B,SACZqzB,IAAMjxB,KAAKc,OACZlD,GAAKoC,KAAK2L,OA7QR,EA6QoBA,GAAO3L,KA/Q3B,KAkRDA,MAOTuH,MAAMlG,UACAtB,UAAUxC,aACPg6B,SAAWl2B,EACTrB,MAEAA,KAAKu3B,QAUhB3F,SAAS7yB,SACDk3B,EAAOj2B,KAAKhD,SAAWgD,KAAKhD,OAAS,WAEvCoD,EAAQrB,GACVA,EAAE6C,SAAQyD,GAAK4wB,EAAK5wB,IAAK,IAEzB4wB,EAAKl3B,IAAK,EAGLiB,MAYTgyB,SAASjzB,EAAG04B,SACJz6B,EAASgD,KAAKhD,gBACVy6B,IAASz3B,KAAKixB,IAAI1zB,SAAWP,KAAmB+C,UAAUxC,OAAoB6C,EAAQrB,GAAKA,EAAE24B,MAAKryB,GAAKrI,EAAOqI,KAAMrI,EAAO+B,KAAtD/B,IAkBjF2O,OAAO+mB,EAAO/mB,SACNzN,EAAI8B,YAlVF,EAmVJ0yB,IAAax0B,EAAEi5B,KAAOrB,GAAU53B,EAAEi5B,KAAMxrB,IAlVpC,EAmVJ+mB,IAAax0B,EAAEk5B,KAAOtB,GAAU53B,EAAEk5B,KAAMzrB,IAlVpC,EAmVJ+mB,IAAax0B,EAAEm5B,KAAOvB,GAAU53B,EAAEm5B,KAAM1rB,IA9UjC,GA+UP+mB,IAAgBx0B,EAAEo5B,KAAOxB,GAAU53B,EAAEo5B,KAAM3rB,IACxCzN,GAUT03B,YAAYlD,SAEJx0B,EAAI8B,YAnWF,GAkWR0yB,EAAQA,GA7VAyD,IAgWWj4B,EAAEi5B,OACnBj5B,EAAEyD,IAAMi0B,GAAY13B,EAAEyD,IAAKzD,EAAEi5B,MAC7Bj5B,EAAEi5B,KAAO,MAtWH,EAyWJzE,GAAex0B,EAAEk5B,OACnBl5B,EAAE8yB,IAAM4E,GAAY13B,EAAE8yB,IAAK9yB,EAAEk5B,MAC7Bl5B,EAAEk5B,KAAO,MA1WH,EA6WJ1E,GAAex0B,EAAEm5B,OACnBn5B,EAAE+yB,IAAM2E,GAAY13B,EAAE+yB,IAAK/yB,EAAEm5B,MAC7Bn5B,EAAEm5B,KAAO,MA1WA,GA6WP3E,GAAkBx0B,EAAEo5B,OACtBp5B,EAAE4C,OAAS5C,EAAE4C,OAAO6K,OAAOzN,EAAEo5B,MAC7Bp5B,EAAEo5B,KAAO,MAGJp5B,GAWT23B,MAAMnD,EAAO9mB,SACL1N,EAAI8B,KACJyF,EAAImG,KA/XC,GAiYP8mB,SACFhnB,GAAWxN,EAAE4C,OAAQ5C,EAAEo5B,KAAM7xB,GACtBvH,EA1YD,EA6YJw0B,GAAahnB,GAAWxN,EAAEyD,IAAKzD,EAAEi5B,KAAM1xB,GA5YnC,EA6YJitB,GAAahnB,GAAWxN,EAAE8yB,IAAK9yB,EAAEk5B,KAAM3xB,GA5YnC,EA6YJitB,GAAahnB,GAAWxN,EAAE+yB,IAAK/yB,EAAEm5B,KAAM5xB,SACrCyxB,EAAMh5B,EAAE4C,UA1YH,EA4YP4xB,GAAkBwE,EAAK,OACnBliB,EAAM9W,EAAEyD,IAAIpE,OAASW,EAAE+yB,IAAI1zB,OAE7ByX,IAAQkiB,EAAI35B,QACdmO,GAAWwrB,EADsBliB,EACjBrJ,GAAOzN,EAlZfi4B,GAqZQj4B,EAAEo5B,KAHkB7xB,UAOjCvH,IA+CX8J,GAAS+tB,GAAYJ,GAAO,CAM1BoB,KAAKrE,SACGx0B,EAAI,IAAIy3B,GAAM31B,KAAKi1B,UAAU7C,KAAKpyB,KAAM0yB,EAAQ1yB,KAAK82B,uBAE7C3vB,IAAVurB,IACEA,EAAQx0B,EAAEi4B,KAAKn2B,KAAK61B,MAAM33B,EAAEi4B,KAAKruB,GAAK5J,EAAEyD,IAAIlD,KAAKqJ,KACjD4qB,EAAQx0B,EAAEk4B,KAAKp2B,KAAK61B,MAAM33B,EAAEk4B,KAAKtuB,GAAK5J,EAAE8yB,IAAIvyB,KAAKqJ,KACjD4qB,EAAQx0B,EAAEm4B,KAAKr2B,KAAK61B,MAAM33B,EAAEm4B,KAAKvuB,GAAK5J,EAAE+yB,IAAIxyB,KAAKqJ,MAGhD5J,GAGTg4B,QAAQxD,UACC1yB,KAAKs2B,QAAU5D,GAGxBV,SAASjzB,SACDb,EAAI8B,KACJhD,EAASkB,EAAElB,cACRA,GAAUkB,EAAEo4B,QAAUp4B,EAAEm4B,IAAWj2B,EAAQrB,GAAKA,EAAE24B,MAAKryB,GAAKrI,EAAOqI,KAAMrI,EAAO+B,GAAjD,GAG1C4M,SACE7N,EAAM,2CAGR83B,cACE93B,EAAM,iDAGR+3B,MAAMnD,EAAO9mB,SACL1N,EAAI8B,KACJg2B,EAAS93B,EAAE83B,OACX73B,EAAI63B,EAAOz4B,WACbM,EAAI,KAEJ60B,EAAQx0B,EAAE04B,YACL/4B,EAAIM,IAAKN,EACdm4B,EAAOn4B,GAAGg4B,MAAMnD,EAAO9mB,aAGlB/N,EAAIM,IAAKN,EACVm4B,EAAOn4B,GAAG00B,QAAUr0B,EAAEq0B,OACxByD,EAAOn4B,GAAGg4B,MAAMnD,EAAO9mB,UAKtB1N,KA4RX,MAAMy5B,GAAS,CACbzE,MAAM,EACNnB,OAAO,GA0ET,SAAS6F,GAAK/G,OACRgH,EAAQ,SACL,CACLvwB,MAAO,IAAMuwB,EAAQ,GACrB5wB,KAAM,IAAM4wB,EAAMt6B,OAClBsE,KAAM,IAAMg2B,EAAM,GAClBp5B,KAAMyD,IACJ21B,EAAMp5B,KAAKyD,GACJ41B,GAASD,EAAO,EAAGA,EAAMt6B,OAAS,EAAGszB,IAE9C7gB,IAAK,WACG+nB,EAAOF,EAAM7nB,UACf2jB,SAEAkE,EAAMt6B,QACRo2B,EAAOkE,EAAM,GACbA,EAAM,GAAKE,EA+BnB,SAAgBj2B,EAAOgnB,EAAK+H,SACpBjgB,EAAQkY,EACRjY,EAAM/O,EAAMvE,OACZo2B,EAAO7xB,EAAMgnB,OAEfkP,EADAC,EAAoB,GAAZnP,GAAO,QAGZmP,EAAOpnB,GACZmnB,EAAOC,EAAO,EAEVD,EAAOnnB,GAAOggB,EAAI/uB,EAAMm2B,GAAOn2B,EAAMk2B,KAAU,IACjDC,EAAOD,GAGTl2B,EAAMgnB,GAAOhnB,EAAMm2B,GAEnBA,EAAoB,IADpBnP,EAAMmP,IACS,GAGjBn2B,EAAMgnB,GAAO6K,EACNmE,GAASh2B,EAAO8O,EAAOkY,EAAK+H,GAlD7BqH,CAAOL,EAAO,EAAGhH,IAEjB8C,EAAOoE,EAGFpE,IAKb,SAASmE,GAASh2B,EAAO8O,EAAOkY,EAAK+H,OAC/B3oB,EAAQiwB,QACNxE,EAAO7xB,EAAMgnB,QAEZA,EAAMlY,IACXunB,EAAOrP,EAAM,GAAK,EAClB5gB,EAASpG,EAAMq2B,GAEXtH,EAAI8C,EAAMzrB,GAAU,IACtBpG,EAAMgnB,GAAO5gB,EACb4gB,EAAMqP,SAOHr2B,EAAMgnB,GAAO6K,EA+BtB,SAASyE,UACFt4B,OAAOA,UACPu4B,S1Dn6DS,Q0Do6DTC,OAAS,OACTC,MAAQ,OACRC,QAAUrO,cAGRsO,QAAUjJ,KACf,MAAOvpB,SAGJyyB,SAAWhJ,GAAW7wB,QACtB85B,OAAS,QACTC,OAAS,UACTC,MAAQjB,IAAK,CAACn2B,EAAGlD,IAAMkD,EAAEgxB,MAAQl0B,EAAEk0B,aACnCqG,SAAW,GAGlB,SAASC,GAAU15B,UACV,kBACEW,KAAKg5B,KAAK35B,GAAQQ,MAAMG,KAAMD,YAsJzC,SAASk5B,GAAU7G,EAAMC,GACvBF,GAASxyB,KAAKK,KAAMoyB,EAAM,KAAMC,GAnJlC+F,GAAS5xB,UAAY,CASnB+rB,eACSvyB,KAAKs4B,QAed9I,OAAOzwB,UACDgB,UAAUxC,aACPk7B,QAAU15B,EACRiB,MAEAA,KAAKy4B,SAahBniB,OAAOvX,UACDgB,UAAUxC,aACPi7B,QAAUz5B,EACRiB,MAEAA,KAAKw4B,SAYhB14B,OAAOA,UACDC,UAAUxC,aACPy7B,KAAOl5B,EACLE,MAEAA,KAAKg5B,MAShBl7B,MAAOi7B,GAAU,SAOjB94B,KAAM84B,GAAU,QAOhB74B,KAAM64B,GAAU,QAOhB54B,MAAO44B,GAAU,SAQjBV,SAAUU,GAAU,SAMpBG,eAAgB,QA5+ClB,SAAc9G,EAAMtoB,EAAQuoB,EAAQC,OAE9BmB,EADA0F,EAAQ,SAGR/G,aAAgBD,GAClBsB,EAAKrB,EACIA,GAAQA,EAAK5rB,qBAAqB2rB,GAC3CsB,EAAK,IAAIrB,EACAttB,EAAWstB,GACpBqB,EAAK,IAAItB,GAAS,KAAMC,IAExB+G,EAAQ,EACR1F,EAAK,IAAItB,GAASC,EAAMtoB,SAGrB0oB,KAAKiB,GAEN0F,IACF7G,EAAQD,EACRA,EAASvoB,GAGPuoB,GAAQryB,KAAK01B,QAAQjC,EAAIA,EAAGb,WAAWP,EAAQC,SAC9CiD,MAAM9B,GACJA,GAu9CPiC,QA58CF,SAAkB1U,EAAQoY,SAClBC,EAAarY,EAAOwR,KACpBr0B,EAAIi7B,EAAQ77B,WAEb,IAAIM,EAAI,EAAGA,EAAIM,IAAKN,KACnBw7B,EAAaD,EAAQv7B,GAAG20B,sBACrB8G,OAAOtY,IAu8ChBwR,KA/lCF,SAAciB,GACZA,EAAGjB,OAASxyB,KAAKu4B,OA+lCjBe,OAtlCF,SAAgB7F,SACR8F,EAAQ,CAAC9F,OACX9B,EAAK/B,EAAM/xB,OAER07B,EAAMh8B,gBACNi1B,KAAKb,EAAM4H,EAAMvpB,OAElB4f,EAAO+B,EAAIsB,aACRp1B,EAAI+xB,EAAKryB,SAAUM,GAAK,GAC3B07B,EAAM96B,KAAKkzB,EAAM/B,EAAK/xB,IAClB8zB,IAAQ8B,GAAI31B,EAAM,sCA8kC5B2zB,MAjOF,SAAegC,EAAI1C,EAAWpG,QACvB4K,MAAM9B,EAAI9I,GAAWgN,UACpBz5B,EAAI,IAAIy3B,GAAM31B,KAAMA,KAAKs4B,QAAUt4B,KAAK44B,OAAS,EAAI,IACrD9wB,EAAI2rB,EAAGhC,OAASgC,EAAGhC,MAAM3wB,QAAU,UACzC5C,EAAE8iB,OAASyS,OACNkF,OAAOlF,EAAG50B,IAAMkyB,EAAUU,MAAMvzB,EAAG4J,GACjC9H,MA4NPu1B,MApRF,SAAe9B,EAAI9I,SACXhsB,EAAMgsB,GAAWgN,UAEnB33B,KAAK44B,YAEFY,SAAS/F,QAGTiF,SAAS/2B,IAAI8xB,GAGhB90B,EAAIu0B,MAAMO,EAAGP,MAAK,GACflzB,aAcT,SAAgByzB,EAAIpyB,EAAOspB,SACnBhsB,EAAMgsB,GAAWgN,UAEnBlE,EAAGrsB,IAAI/F,IAAU1C,EAAIozB,aAClBwD,MAAM9B,EAAI90B,GAGVqB,MAqPP+wB,UAAAA,GAEA0I,OAhxCF,SAAgBzY,EAAQwL,EAAMhe,UAC5Bge,EAAOxsB,KAAKoL,MAAMohB,EAAMhe,GACjBxO,KAAKyxB,MAAMzQ,EAAQhhB,KAAK+wB,YAAYM,OAAO7E,WAlBpD,SAAeA,EAAMhe,SACb8H,EAAStW,KAAKsW,gBACbyY,GAAKvC,EAAMhe,EAAQ8H,EAAOoR,UAAWpR,EAAOkR,WAgyCnDkS,QAvuCFlP,eAAuBxJ,EAAQ6J,EAAKrc,SAC5ByhB,EAAKjwB,KACL25B,EAAU1J,EAAG2J,UAQrB,SAAqB3J,OACf5D,QACEsN,EAAU,IAAIvN,SAAQ3qB,GAAK4qB,EAAS5qB,WAC1Ck4B,EAAQE,SAAW,EAEnBF,EAAQG,KAAO,KACc,KAArBH,EAAQE,WACZ5J,EAAG2J,SAAW,KACdvN,EAAO4D,KAIJA,EAAG2J,SAAWD,EApBUI,CAAY9J,GAC3C0J,EAAQE,UAAY,QACdG,QAAY/J,EAAGgK,QAAQpP,EAAKrc,UAClCyhB,EAAGwB,MAAMzQ,EAAQiP,EAAGc,YAAYjB,OAAO5wB,GAAQmyB,OAAO2I,EAAIxN,MAAQ,KAClEmN,EAAQG,OACDE,GAiuCPC,QAnwCFzP,eAAuBK,EAAKrc,SACpByhB,EAAKjwB,SAEPwsB,EADAM,EAAS,MAIXN,QAAayD,EAAGT,SAAS/E,KAAKI,EAAK,CACjCkB,QAAS,WACTa,SAAUkB,GAAatf,GAAUA,EAAOK,YAIxC2d,EAAOyD,EAAG7kB,MAAMohB,EAAMhe,GACtB,MAAO2hB,GACPrD,GAAU,EACVmD,EAAGhwB,KAAK,wBAAyB4qB,EAAKsF,IAExC,MAAOA,GACPrD,GAAU,EACVmD,EAAGhwB,KAAK,iBAAkB4qB,EAAKsF,SAG1B,CACL3D,KAAAA,EACAM,OAAAA,WAxFJ,SAAiBhsB,EAAQ+N,EAAMlD,EAAQ9L,SAC/BowB,EAAKjwB,KACLxB,EAAI81B,GAAO3oB,EAAQ9L,GACnBq6B,EAAO,SAAUj0B,GACrBA,EAAEgvB,SAAWhF,MAGXzxB,EAAE21B,QAAQluB,GACV,MAAOnI,GACPmyB,EAAGnyB,MAAMA,WAETmyB,EAAG8D,YAIHqF,EAGFA,EADoB,iBAAXt4B,GAA2C,oBAAbq5B,SAC7BA,SAASC,iBAAiBt5B,GAE1BgB,EAAMhB,SAGZ3C,EAAIi7B,EAAQ77B,WAEb,IAAIM,EAAI,EAAGA,EAAIM,IAAKN,EACvBu7B,EAAQv7B,GAAGw8B,iBAAiBxrB,EAAMqrB,UAG7B17B,GAyyCP87B,GAprCF,SAAax5B,EAAQkgB,EAAQlX,EAAQuoB,EAAQ1H,UAChC7pB,aAAkBqxB,GAAWqD,GAAaH,IAClDr1B,KAAMc,EAAQkgB,EAAQlX,EAAQuoB,EAAQ1H,GAClC3qB,MAmrCP6zB,SAljBFrJ,eAAwBgH,EAAQ+I,EAAQC,SAChCvK,EAAKjwB,KACLwqB,EAAQ,MAEVyF,EAAG2I,OAAQ,OAAOrC,GAAUtG,MAE5BA,EAAG2J,gBAAgB3J,EAAG2J,SAEtBW,SAAcvK,GAAcC,EAAIsK,IAE/BtK,EAAGyI,SAASn7B,cACf0yB,EAAG9vB,MAAM,wCACF8vB,QAIHsC,IAAUtC,EAAGqI,OAEnBrI,EAAG2I,OAAS,IAAIjD,GAAM1F,EAAIsC,EAAOf,GAEjCvB,EAAGyI,SAAS92B,SAAQ6xB,GAAMxD,EAAGuJ,SAAS/F,GAAI,KAE1CxD,EAAGyI,SAAWhJ,GAAW7wB,OAErB40B,EACAjsB,EACA1J,EAHAsV,EAAQ,WAMH6c,EAAG4I,MAAM5xB,OAAS,GAEvBwsB,EAAKxD,EAAG4I,MAAM7oB,MAEVyjB,EAAGjB,OAASiB,EAAGhB,OAOnBjrB,EAAOisB,EAAGM,IAAI9D,EAAGwK,UAAUhH,EAAIjC,IAE3BhqB,EAAKkzB,KAEPlzB,QAAaA,EACJA,EAAKgjB,QAEdA,EAAM/rB,KAAK+I,EAAKgjB,OAChBhjB,EAAOssB,IAILtsB,IAASssB,IACPL,EAAGR,UAAUQ,EAAGR,SAASrxB,SAAQ6xB,GAAMxD,EAAGuJ,SAAS/F,OAIvDrgB,GAvBA6c,EAAGuJ,SAAS/F,GAAI,GAyBpB,MAAOtD,GACPF,EAAG4I,MAAMvxB,QAETxJ,EAAQqyB,KAIVF,EAAG0I,OAAS,GACZ1I,EAAG2I,OAAS,KACZ3I,EAAG9vB,MAAO,SAAQoyB,MAAUnf,eAExBtV,IACFmyB,EAAG6I,SAAW,GACd7I,EAAGnyB,MAAMA,IAIPmyB,EAAG6I,SAASv7B,OAAQ,OAChBo9B,EAAK1K,EAAG6I,SAASnc,MAAK,CAAClb,EAAGlD,IAAMA,EAAEq8B,SAAWn5B,EAAEm5B,WAErD3K,EAAG6I,SAAW,OAET,IAAIj7B,EAAI,EAAGA,EAAI88B,EAAGp9B,SAAUM,QACzBmyB,GAAcC,EAAI0K,EAAG98B,GAAGqyB,iBAK9BsK,SAAexK,GAAcC,EAAIuK,GAEjChQ,EAAMjtB,QACR6uB,QAAQyO,IAAIrQ,GAAOkQ,MAAKI,GAAM7K,EAAG8K,SAAS,MAAM,KAC9CD,EAAGl5B,SAAQyD,QAEPA,EAAE4qB,GACF,MAAOE,GACPF,EAAGnyB,MAAMqyB,YAMVF,GA8cP8D,IA1ZF,SAAavC,EAAQ+I,EAAQC,UACpBx6B,KAAK44B,OAASrC,GAAUv2B,OAASA,KAAK6zB,SAASrC,EAAQ+I,EAAQC,GAAUx6B,OA0ZhF+6B,SAzbFvQ,eAAwBgH,EAAQ+I,EAAQC,QAE/Bx6B,KAAKg7B,gBAAgBh7B,KAAKg7B,eAG3B1zB,EAAQ,IAAMtH,KAAKg7B,SAAW,YAEnCh7B,KAAKg7B,SAAWh7B,KAAK6zB,SAASrC,EAAQ+I,EAAQC,IAAUE,KAAKpzB,EAAOA,GAC9DtH,KAAKg7B,UAkbZxD,SApYF,SAAkBtH,EAAU+K,EAASL,MAC/B56B,KAAK44B,QAAUqC,OAEZnC,SAASr6B,KAAK,CACjBm8B,SAAUA,GAAY,EACtB1K,SAAUA,aAKVA,EAASlwB,MACT,MAAOmwB,QACFryB,MAAMqyB,KAyXfqJ,SAhWF,SAAiB/F,EAAI1B,SACbzzB,EAAIm1B,EAAGlB,MAAQvyB,KAAKs4B,OACtBh6B,IAAGm1B,EAAGlB,MAAQvyB,KAAKs4B,SAEnBh6B,GAAKyzB,KACP0B,EAAGhB,MAAQgB,EAAGjB,UAETqG,MAAMp6B,KAAKg1B,KA0VlBgH,UA1UF,SAAkBhH,EAAIjC,SACdhzB,EAAIi1B,EAAG3yB,OACPyxB,EAAQvyB,KAAKs4B,cACZ95B,GAAK4B,EAAQ5B,GAAK,IAAIu3B,GAAW/1B,KAAMuyB,EAAO/zB,EAAEkD,KAAI3C,GAAKA,EAAE0yB,QAAQD,GAAUxxB,KAAK24B,OAAOlF,EAAG50B,KAGrG,SAAqBX,EAAGM,MAClBA,GAAKA,EAAE+zB,QAAUr0B,EAAEq0B,aACd/zB,EAGTN,EAAIA,EAAE64B,OAEFv4B,GAAKA,IAAMs1B,KACb51B,EAAE4C,OAAStC,EAAEsC,eAGR5C,EAdmGg9B,CAAYl7B,KAAK44B,OAAQp6B,GAAKA,EAAEizB,SAsV5IzpB,GAASixB,GAAW9G,GAAU,CAS5B4B,IAAItC,MACEA,EAAMc,MAAQvyB,KAAKuyB,MAAO,OAAOd,EAAMqC,oBACvCE,SAEAh0B,KAAKkzB,YACFA,MAAK,GAEVc,EAAKh0B,KAAK6zB,SAASpC,GAGrBuC,EAAKA,GAAMvC,EAEPuC,EAAG0G,KACL1G,EAAKA,EAAG0G,MAAK37B,GAAKiB,KAAKyxB,MAAQ1yB,IACtBi1B,IAAOvC,EAAMqC,uBACjBrC,MAAQuC,GAGRA,GAUTH,SAASpC,SACDY,EAASryB,KAAK0zB,SAASjC,EAAMc,OAC7B1xB,EAAMb,KAAKqP,UAAUgjB,EAAQZ,UACnCY,EAAO/qB,QACAzG,GAWTwO,sBAII8rB,GAAa,GACnB,SAAS/iB,GAAWvJ,SACZ/G,EAAIuH,GAAUR,UACb/G,GAAKA,EAAEszB,YAAc,KAE9B,SAAS/rB,GAAUR,UACjBA,EAAOA,GAAQA,EAAK6I,cACbjR,GAAe00B,GAAYtsB,GAAQssB,GAAWtsB,GAAQ,KClwE/D,SAAU6F,GAASV,EAAQC,MACV,MAAXA,MACG,IAAI5S,KAAS2S,EACH,MAAT3S,GAA2B,KAAVA,IAAiBA,GAASA,IAAUA,UACjDA,OAGL,KACD6S,GAAS,MAER,IAAI7S,KAAS2S,EAChB3S,EAAQ4S,EAAQ5S,IAAS6S,EAAOF,GAEnB,MAAT3S,GAA2B,KAAVA,IAAiBA,GAASA,IAAUA,UACjDA,IAMd,SAASg6B,GAAWv5B,EAAO5D,EAAGmH,SACtB2O,EAASrB,aAAa8B,KAAKC,GAAQ5S,EAAOuD,WAGhD2O,EAAO2I,KAAKpX,IACLrH,EAAEwD,KAAI3C,GAAK8V,GAAeb,EAAQjV,KAG3C,SAASu8B,GAAWx5B,EAAOuD,UAClBg2B,GAAUv5B,EAAO,CAAC,IAAM,GAAM,KAAOuD,GAK9C,SAASk2B,GAAmBz5B,EAAOuD,SAC3BlH,EAAI2D,EAAMvE,OACV2U,ECpCO,SAAmB8B,EAAQC,SAClCxO,ECHO,SAAkBuO,EAAQC,OAEnCnR,EADAsQ,EAAQ,EAERooB,EAAO,EACPxmB,EAAM,UACM7N,IAAZ8M,MACG,IAAI5S,KAAS2S,EACH,MAAT3S,IAAkBA,GAASA,IAAUA,IACvCyB,EAAQzB,EAAQm6B,EAChBA,GAAQ14B,IAAUsQ,EAClB4B,GAAOlS,GAASzB,EAAQm6B,QAGvB,KACDtnB,GAAS,MACR,IAAI7S,KAAS2S,EACiC,OAA5C3S,EAAQ4S,EAAQ5S,IAAS6S,EAAOF,MAAqB3S,GAASA,IAAUA,IAC3EyB,EAAQzB,EAAQm6B,EAChBA,GAAQ14B,IAAUsQ,EAClB4B,GAAOlS,GAASzB,EAAQm6B,OAI1BpoB,EAAQ,EAAG,OAAO4B,GAAO5B,EAAQ,GDpB3BqoB,CAASznB,EAAQC,UACpBxO,EAAItD,KAAK6Q,KAAKvN,GAAKA,EDkChBi2B,CAAU55B,EAAOuD,GACrB/G,EAAIg9B,GAAUx5B,EAAOuD,GACrBs2B,GAAKr9B,EAAE,GAAKA,EAAE,IAAM,YAEnB,MADG6D,KAAKsC,IAAIyN,EAAGypB,IAAMzpB,GAAK/P,KAAKI,IAAIjE,EAAE,KAAO,GACjC6D,KAAKO,IAAIvE,GAAI,IAGjC,SAAS0iB,GAAK9hB,SAEN68B,EAAO78B,EAAEgiB,SAAW,GACpBuK,EAAOvsB,EAAEusB,MAAQ,GACjBuQ,EAAO15B,KAAKC,IAAIkpB,GAChBwQ,EAAM/8B,EAAEg9B,QAAU,CAAC,EAAG,OAGxBzoB,EACAhU,EACA08B,EACAv2B,EACA5H,EACAM,EAPAsG,EAAM1F,EAAEsH,OAAO,GACf3B,EAAM3F,EAAEsH,OAAO,SAOb1B,EAAO5F,EAAE4F,MAAQD,EAAMD,GAAOtC,KAAKI,IAAIkC,IAAQ,KAEjD1F,EAAEuU,KAEJA,EAAOvU,EAAEuU,UACJ,GAAIvU,EAAEk9B,MAAO,KAElBx2B,EAAId,EAAOi3B,EAEN/9B,EAAI,EAAGM,EAAIY,EAAEk9B,MAAM1+B,OAAQM,EAAIM,GAAKY,EAAEk9B,MAAMp+B,GAAK4H,IAAK5H,GAE3DyV,EAAOvU,EAAEk9B,MAAM95B,KAAKuC,IAAI,EAAG7G,EAAI,QAC1B,KAELyB,EAAQ6C,KAAK2I,KAAK3I,KAAKC,IAAIw5B,GAAQC,GACnCG,EAAUj9B,EAAEi9B,SAAW,EACvB1oB,EAAOnR,KAAKuC,IAAIs3B,EAAS75B,KAAKO,IAAI4oB,EAAMnpB,KAAKsR,MAAMtR,KAAKC,IAAIuC,GAAQk3B,GAAQv8B,IAErE6C,KAAK2I,KAAKnG,EAAO2O,GAAQsoB,GAC9BtoB,GAAQgY,MAILztB,EAAI,EAAGM,EAAI29B,EAAIv+B,OAAQM,EAAIM,IAAKN,EACnC4H,EAAI6N,EAAOwoB,EAAIj+B,GACX4H,GAAKu2B,GAAWr3B,EAAOc,GAAKm2B,IAAMtoB,EAAO7N,GAKjDA,EAAItD,KAAKC,IAAIkR,SACPyC,EAAYtQ,GAAK,EAAI,EAAoB,MAAZA,EAAIo2B,GACjCK,EAAM/5B,KAAKO,IAAI4oB,GAAOvV,EAAY,UAEpChX,EAAEo9B,WAAmBh1B,IAAXpI,EAAEo9B,QACd12B,EAAItD,KAAKwR,MAAMlP,EAAM6O,EAAO4oB,GAAO5oB,EACnC7O,EAAMA,EAAMgB,EAAIA,EAAI6N,EAAO7N,EAC3Bf,EAAMvC,KAAK2I,KAAKpG,EAAM4O,GAAQA,GAGzB,CACL1C,MAAOnM,EACP0O,KAAMzO,IAAQD,EAAMA,EAAM6O,EAAO5O,EACjC4O,KAAMA,GASV,SAAS8oB,GAAat6B,EAAOu6B,EAASC,EAAOj3B,OACtCvD,EAAMvE,OAAQ,MAAO,MAAC4J,OAAWA,SAChC6M,EAASrB,aAAa8B,KAAKC,GAAQ5S,EAAOuD,IAC1ClH,EAAI6V,EAAOzW,OACX6W,EAAIioB,MACN56B,EAAG5D,EAAGO,EAAGm+B,MAERn+B,EAAI,EAAGm+B,EAAKl8B,MAAM+T,GAAIhW,EAAIgW,IAAKhW,EAAG,KAChCqD,EAAI,EAAG5D,EAAI,EAAGA,EAAIM,IAAKN,EAC1B4D,GAAKuS,KAAUwoB,WAAWr+B,IAG5Bo+B,EAAGn+B,GAAKqD,EAAItD,SAGdo+B,EAAG5f,KAAKpX,IACD,CAACiP,GAAS+nB,EAAID,EAAQ,GAAI9nB,GAAS+nB,EAAI,EAAID,EAAQ,IAM5D,SAASG,GAAQ36B,EAAOwR,EAAMopB,EAAQr3B,GACpCA,EAAIA,IAAMtG,GAAKA,SAETZ,EAAI2D,EAAMvE,OACVkI,EAAI,IAAIkN,aAAaxU,OAMvB+D,EALArE,EAAI,EACJO,EAAI,EACJqD,EAAI4D,EAAEvD,EAAM,IACZvD,EAAIkD,EACJmd,EAAInd,EAAI6R,OAGLlV,EAAID,IAAKC,EAAG,IACjB8D,EAAImD,EAAEvD,EAAM1D,IAER8D,GAAK0c,EAAG,KACVrgB,GAAKkD,EAAIlD,GAAK,EAEPV,EAAIO,IAAKP,EAAG4H,EAAE5H,GAAKU,EAE1BqgB,EAAI1c,EAAIoR,EACR7R,EAAIS,EAGN3D,EAAI2D,MAGN3D,GAAKkD,EAAIlD,GAAK,EAEPV,EAAIO,IAAKP,EAAG4H,EAAE5H,GAAKU,SAEnBm+B,EAKT,SAAmBj3B,EAAGk3B,SACdx+B,EAAIsH,EAAElI,WAGRc,EACA6T,EAHAzQ,EAAI,EACJlD,EAAI,OAIDkH,EAAEhE,KAAOgE,EAAElH,MAAMA,OAEjBA,EAAIJ,GAAG,KAEZE,EAAIE,EAAI,EAEDkH,EAAElH,KAAOkH,EAAEpH,MAAMA,KAIpBoH,EAAElH,GAAKkH,EAAElH,EAAI,GAAKo+B,EAAQ,KAC5BzqB,EAAI3T,GAAKkD,EAAIpD,EAAIE,EAAIA,GAAK,GAEnB2T,EAAI3T,GAAGkH,EAAEyM,KAAOzM,EAAElH,QAElB2T,EAAI3T,GAAGkH,EAAEyM,KAAOzM,EAAEhE,GAI3BA,EAAIlD,EACJA,EAAIF,SAGCoH,EAnCSm3B,CAAUn3B,EAAG6N,EAAOA,EAAO,GAAK7N,WA1DrCtD,KAAKq6B,OA0JlB,MAAMK,GAAU16B,KAAK6Q,KAAK,EAAI7Q,KAAK26B,IAC7BC,GAAQ56B,KAAK46B,MAEnB,IAAIC,GAAahrB,IACjB,SAASirB,GAAazB,EAAM0B,GAC1B1B,EAAOA,GAAQ,EACf0B,EAAiB,MAATA,EAAgB,EAAIA,MAGxBC,EACA9+B,EAHA6D,EAAI,EACJ2Q,EAAI,KAIJmqB,IAAeA,GACjB96B,EAAI86B,GACJA,GAAahrB,QACR,IAEH9P,EAAe,EAAXs6B,WAAe,EACnB3pB,EAAe,EAAX2pB,WAAe,EACnBW,EAAMj7B,EAAIA,EAAI2Q,EAAIA,QACH,IAARsqB,GAAaA,EAAM,GAE5B9+B,EAAI8D,KAAK6Q,MAAM,EAAI7Q,KAAKC,IAAI+6B,GAAOA,GAEnCj7B,GAAK7D,EACL2+B,GAAanqB,EAAIxU,SAGZm9B,EAAOt5B,EAAIg7B,EAEpB,SAASE,GAAc/7B,EAAOm6B,EAAM0B,SAE5B7oB,GAAKhT,GAASm6B,GAAQ,KAD5B0B,EAAiB,MAATA,EAAgB,EAAIA,UAErB/6B,KAAKH,KAAK,GAAMqS,EAAIA,IAAM6oB,EAAQL,IAI3C,SAASQ,GAAiBh8B,EAAOm6B,EAAM0B,SAG/B7oB,GAAKhT,GAFXm6B,EAAOA,GAAQ,KACf0B,EAAiB,MAATA,EAAgB,EAAIA,GAEtBlW,EAAI7kB,KAAKI,IAAI8R,OACfipB,KAEAtW,EAAI,GACNsW,EAAK,MACA,OACCt7B,EAAMG,KAAKH,KAAKglB,EAAIA,EAAI,OAC1BhS,EAEAgS,EAAI,kBACNhS,EAAM,kBAAuBgS,EAAI,iBACjChS,EAAMA,EAAMgS,EAAI,iBAChBhS,EAAMA,EAAMgS,EAAI,gBAChBhS,EAAMA,EAAMgS,EAAI,iBAChBhS,EAAMA,EAAMgS,EAAI,iBAChBhS,EAAMA,EAAMgS,EAAI,iBAChBsW,EAAKt7B,EAAMgT,EACXA,EAAM,kBAAuBgS,EAAI,iBACjChS,EAAMA,EAAMgS,EAAI,gBAChBhS,EAAMA,EAAMgS,EAAI,iBAChBhS,EAAMA,EAAMgS,EAAI,iBAChBhS,EAAMA,EAAMgS,EAAI,iBAChBhS,EAAMA,EAAMgS,EAAI,iBAChBhS,EAAMA,EAAMgS,EAAI,iBAChBsW,GAAUtoB,IAEVA,EAAMgS,EAAI,IACVhS,EAAMgS,EAAI,EAAIhS,EACdA,EAAMgS,EAAI,EAAIhS,EACdA,EAAMgS,EAAI,EAAIhS,EACdA,EAAMgS,EAAI,EAAIhS,EACdsoB,EAAKt7B,EAAMgT,EAAM,uBAIdX,EAAI,EAAI,EAAIipB,EAAKA,EAG1B,SAASC,GAAer/B,EAAGs9B,EAAM0B,UAC3Bh/B,EAAI,GAAKA,EAAI,EAAU8T,KACnBwpB,GAAQ,IAAe,MAAT0B,EAAgB,EAAIA,GAASH,GAKrD,SAAgB76B,OAMVhE,EADA0gB,GAAKzc,KAAKC,KAAK,EAAIF,IAAM,EAAIA,IAG7B0c,EAAI,MACNA,GAAK,MACL1gB,GAAK,oBACLA,EAAgCA,EAAI0gB,EAA/B,sBACL1gB,EAAI,oBAA4BA,EAAI0gB,EACpC1gB,EAAI,sBAA2BA,EAAI0gB,EACnC1gB,EAAgCA,EAAI0gB,EAA/B,qBACL1gB,EAAI,sBAA4BA,EAAI0gB,EACpC1gB,EAAI,qBAA4BA,EAAI0gB,EACpC1gB,EAAiCA,EAAI0gB,EAAhC,qBACL1gB,EAAiCA,EAAI0gB,EAAhC,qBACL1gB,EAAI,sBAA4BA,EAAI0gB,EACpC1gB,EAAiCA,EAAI0gB,EAAhC,sBACL1gB,EAAiCA,EAAI0gB,EAAhC,qBACL1gB,EAAI,sBAA2BA,EAAI0gB,EACnC1gB,EAAiCA,EAAI0gB,EAAhC,qBACL1gB,EAAiCA,EAAI0gB,EAAhC,sBACL1gB,EAAI,sBAA4BA,EAAI0gB,EACpC1gB,EAAiCA,EAAI0gB,EAAhC,sBACL1gB,EAAiCA,EAAI0gB,EAAhC,sBACL1gB,EAAI,sBAA2BA,EAAI0gB,EACnC1gB,EAAiCA,EAAI0gB,EAAhC,oBACL1gB,EAAgCA,EAAI0gB,EAA/B,oBACL1gB,EAAI,mBAAyBA,EAAI0gB,EACjC1gB,EAAI,mBAAwBA,EAAI0gB,GACvBA,EAAI,IACbA,EAAIzc,KAAK6Q,KAAK4L,GAAK,KACnB1gB,EAAI,sBACJA,EAAI,qBAA4BA,EAAI0gB,EACpC1gB,EAAiCA,EAAI0gB,EAAhC,sBACL1gB,EAAI,sBAA4BA,EAAI0gB,EACpC1gB,EAAI,sBAA4BA,EAAI0gB,EACpC1gB,EAAgCA,EAAI0gB,EAA/B,qBACL1gB,EAAI,sBAA4BA,EAAI0gB,EACpC1gB,EAAI,sBAA4BA,EAAI0gB,EACpC1gB,EAAiCA,EAAI0gB,EAAhC,sBACL1gB,EAAI,qBAA4BA,EAAI0gB,EACpC1gB,EAAI,sBAA4BA,EAAI0gB,EACpC1gB,EAAgCA,EAAI0gB,EAA/B,qBACL1gB,EAAI,qBAA4BA,EAAI0gB,EACpC1gB,EAAgCA,EAAI0gB,EAA/B,qBACL1gB,EAAI,oBAA2BA,EAAI0gB,EACnC1gB,EAAgCA,EAAI0gB,EAA/B,oBACL1gB,EAAI,oBAA0BA,EAAI0gB,EAClC1gB,EAAI,mBAAwBA,EAAI0gB,EAChC1gB,EAAI,mBAAwBA,EAAI0gB,GACvBhI,OAAOpD,SAASoL,IACzBA,EAAIzc,KAAK6Q,KAAK4L,GAAK,EACnB1gB,GAAK,sBACLA,EAAiCA,EAAI0gB,EAAhC,sBACL1gB,EAAI,sBAA4BA,EAAI0gB,EACpC1gB,EAAiCA,EAAI0gB,EAAhC,qBACL1gB,EAAI,oBAA4BA,EAAI0gB,EACpC1gB,EAAiCA,EAAI0gB,EAAhC,qBACL1gB,EAAI,qBAA4BA,EAAI0gB,EACpC1gB,EAAiCA,EAAI0gB,EAAhC,qBACL1gB,EAAI,sBAA4BA,EAAI0gB,EACpC1gB,EAAiCA,EAAI0gB,EAAhC,mBACL1gB,EAAI,qBAA4BA,EAAI0gB,EACpC1gB,EAAiCA,EAAI0gB,EAAhC,qBACL1gB,EAAI,qBAA4BA,EAAI0gB,EACpC1gB,EAAiCA,EAAI0gB,EAAhC,sBACL1gB,EAAiCA,EAAI0gB,EAAhC,sBACL1gB,EAAI,mBAAwBA,EAAI0gB,EAChC1gB,EAAI,kBAAwBA,EAAI0gB,GAEhC1gB,EAAIga,EAAAA,SAGCha,EAAIgE,EAlFgDs7B,CAAO,EAAIt/B,EAAI,GAqF5E,SAASu/B,GAAUjC,EAAM0B,OACnBX,EAAImB,QACFC,EAAO,CACXnC,KAAKz8B,UACCgB,UAAUxC,QACZg/B,EAAKx9B,GAAK,EACH4+B,GAEApB,GAIXW,MAAMn+B,UACAgB,UAAUxC,QACZmgC,EAAa,MAAL3+B,EAAY,EAAIA,EACjB4+B,GAEAD,GAIXE,OAAQ,IAAMX,GAAaV,EAAImB,GAC/BG,IAAKx8B,GAAS+7B,GAAc/7B,EAAOk7B,EAAImB,GACvCI,IAAKz8B,GAASg8B,GAAiBh8B,EAAOk7B,EAAImB,GAC1CK,KAAM7/B,GAAKq/B,GAAer/B,EAAGq+B,EAAImB,WAE5BC,EAAKnC,KAAKA,GAAM0B,MAAMA,GAG/B,SAASc,GAAKC,EAASC,SACfC,EAASV,SACXt/B,EAAI,QACFw/B,EAAO,CACXnR,KAAKztB,UACCgB,UAAUxC,QACZ0gC,EAAUl/B,EACVZ,EAAIY,EAAIA,EAAExB,OAAS,EACZogC,EAAKO,UAAUA,IAEfD,GAIXC,UAAUn/B,UACHgB,UAAUxC,UACf2gC,EAAYn/B,IACMk/B,IAASC,EAAY3C,GAAkB0C,IAClDN,GAHuBO,GAMhCN,OAAM,IACGK,KAAWzB,WAAWr+B,IAAM+/B,EAAYC,EAAOP,SAGxDC,IAAI37B,OACE2Q,EAAI,EACJhV,EAAI,OAEDA,EAAIM,IAAKN,EACdgV,GAAKsrB,EAAON,KAAK37B,EAAI+7B,EAAQpgC,IAAMqgC,UAG9BrrB,EAAIqrB,EAAY//B,GAGzB2/B,IAAI57B,OACE2Q,EAAI,EACJhV,EAAI,OAEDA,EAAIM,IAAKN,EACdgV,GAAKsrB,EAAOL,KAAK57B,EAAI+7B,EAAQpgC,IAAMqgC,UAG9BrrB,EAAI1U,GAGb4/B,aACQ//B,MAAM,oCAIT2/B,EAAKnR,KAAKyR,GAGnB,SAASG,GAAgB5C,EAAM0B,UAC7B1B,EAAOA,GAAQ,EACf0B,EAAiB,MAATA,EAAgB,EAAIA,EACrB/6B,KAAKH,IAAIw5B,EAAOyB,KAAiBC,GAE1C,SAASmB,GAAiBh9B,EAAOm6B,EAAM0B,MACjC77B,GAAS,EAAG,OAAO,EACvBm6B,EAAOA,GAAQ,EACf0B,EAAiB,MAATA,EAAgB,EAAIA,QACtB7oB,GAAKlS,KAAKC,IAAIf,GAASm6B,GAAQ0B,SAC9B/6B,KAAKH,KAAK,GAAMqS,EAAIA,IAAM6oB,EAAQL,GAAUx7B,GAErD,SAASi9B,GAAoBj9B,EAAOm6B,EAAM0B,UACjCG,GAAiBl7B,KAAKC,IAAIf,GAAQm6B,EAAM0B,GAEjD,SAASqB,GAAkBrgC,EAAGs9B,EAAM0B,UAC3B/6B,KAAKH,IAAIu7B,GAAer/B,EAAGs9B,EAAM0B,IAE1C,SAASsB,GAAWhD,EAAM0B,OACpBX,EAAImB,QACFC,EAAO,CACXnC,KAAKz8B,UACCgB,UAAUxC,QACZg/B,EAAKx9B,GAAK,EACH4+B,GAEApB,GAIXW,MAAMn+B,UACAgB,UAAUxC,QACZmgC,EAAa,MAAL3+B,EAAY,EAAIA,EACjB4+B,GAEAD,GAIXE,OAAQ,IAAMQ,GAAgB7B,EAAImB,GAClCG,IAAKx8B,GAASg9B,GAAiBh9B,EAAOk7B,EAAImB,GAC1CI,IAAKz8B,GAASi9B,GAAoBj9B,EAAOk7B,EAAImB,GAC7CK,KAAM7/B,GAAKqgC,GAAkBrgC,EAAGq+B,EAAImB,WAE/BC,EAAKnC,KAAKA,GAAM0B,MAAMA,GAG/B,SAASuB,GAASC,EAAOC,OAEnB/f,EADAxK,EAAI,QAmBFupB,EAAO,CACXgB,QAAQ5/B,UACFgB,UAAUxC,QACZqhB,WAnBa1c,SACX0c,EAAI,OAEN/gB,EADAmX,EAAM,MAGLnX,EAAI,EAAGA,EAAIuW,IAAKvW,EACnBmX,GAAO4J,EAAE/gB,GAAa,MAARqE,EAAErE,GAAa,GAAKqE,EAAErE,OAGjCA,EAAI,EAAGA,EAAIuW,IAAKvW,EACnB+gB,EAAE/gB,IAAMmX,SAGH4J,EAMCggB,CAAUD,EAAU5/B,GAAK,IACtB4+B,GAGFgB,GAGTE,cAAc9/B,UACRgB,UAAUxC,QACRwB,GACFqV,EAAIrV,EAAExB,OACNmhC,EAAQ3/B,IAERqV,EAAI,EACJsqB,EAAQ,IAGHf,EAAKgB,QAAQA,IAGfD,GAGTd,eACQ38B,EAAIu7B,eACNtqB,EAAIwsB,EAAMtqB,EAAI,GACd3O,EAAImZ,EAAE,GACN/gB,EAAI,OAEDA,EAAIuW,EAAI,EAAG3O,GAAKmZ,IAAI/gB,MACrBoD,EAAIwE,EAAG,CACTyM,EAAIwsB,EAAM7gC,gBAMPqU,EAAE0rB,UAGXC,IAAI37B,OACEhE,EAAI,EACJL,EAAI,OAEDA,EAAIuW,IAAKvW,EACdK,GAAK0gB,EAAE/gB,GAAK6gC,EAAM7gC,GAAGggC,IAAI37B,UAGpBhE,GAGT4/B,IAAI57B,OACEhE,EAAI,EACJL,EAAI,OAEDA,EAAIuW,IAAKvW,EACdK,GAAK0gB,EAAE/gB,GAAK6gC,EAAM7gC,GAAGigC,IAAI57B,UAGpBhE,GAGT6/B,aACQ//B,MAAM,wCAIT2/B,EAAKkB,cAAcH,GAAOC,QAAQA,GAG3C,SAASG,GAAcr6B,EAAKC,UACf,MAAPA,IACFA,EAAa,MAAPD,EAAc,EAAIA,EACxBA,EAAM,GAGDA,GAAOC,EAAMD,GAAO+3B,WAE7B,SAASuC,GAAe19B,EAAOoD,EAAKC,UACvB,MAAPA,IACFA,EAAa,MAAPD,EAAc,EAAIA,EACxBA,EAAM,GAGDpD,GAASoD,GAAOpD,GAASqD,EAAM,GAAKA,EAAMD,GAAO,EAE1D,SAASu6B,GAAkB39B,EAAOoD,EAAKC,UAC1B,MAAPA,IACFA,EAAa,MAAPD,EAAc,EAAIA,EACxBA,EAAM,GAGDpD,EAAQoD,EAAM,EAAIpD,EAAQqD,EAAM,GAAKrD,EAAQoD,IAAQC,EAAMD,GAEpE,SAASw6B,GAAgB/gC,EAAGuG,EAAKC,UACpB,MAAPA,IACFA,EAAa,MAAPD,EAAc,EAAIA,EACxBA,EAAM,GAGDvG,GAAK,GAAKA,GAAK,EAAIuG,EAAMvG,GAAKwG,EAAMD,GAAOuN,IAEpD,SAASktB,GAASz6B,EAAKC,OACjBjD,EAAGlD,QACDo/B,EAAO,CACXl5B,IAAI1F,UACEgB,UAAUxC,QACZkE,EAAI1C,GAAK,EACF4+B,GAEAl8B,GAIXiD,IAAI3F,UACEgB,UAAUxC,QACZgB,EAAS,MAALQ,EAAY,EAAIA,EACb4+B,GAEAp/B,GAIXq/B,OAAQ,IAAMkB,GAAcr9B,EAAGlD,GAC/Bs/B,IAAKx8B,GAAS09B,GAAe19B,EAAOI,EAAGlD,GACvCu/B,IAAKz8B,GAAS29B,GAAkB39B,EAAOI,EAAGlD,GAC1Cw/B,KAAM7/B,GAAK+gC,GAAgB/gC,EAAGuD,EAAGlD,WAGxB,MAAPmG,IACFA,EAAa,MAAPD,EAAc,EAAIA,EACxBA,EAAM,GAGDk5B,EAAKl5B,IAAIA,GAAKC,IAAIA,GAI3B,SAASy6B,GAAKC,EAAIC,EAAIC,EAAKC,SACnBz8B,EAAQy8B,EAAMH,EAAKA,EACnBI,EAAQr9B,KAAKI,IAAIO,GAAS,MAAQ,GAAKw8B,EAAMF,EAAKC,GAAMv8B,QAEvD,CADWu8B,EAAKG,EAAQJ,EACZI,GAGrB,SAASzvB,GAAOyc,EAAMtqB,EAAG2Q,EAAG8J,GAC1B6P,EAAOA,EAAK7gB,QAAOuG,QACb1M,EAAItD,EAAEgQ,GACNzM,EAAIoN,EAAEX,UACE,MAAL1M,IAAcA,GAAKA,IAAMA,GAAU,MAALC,IAAcA,GAAKA,IAAMA,KAG5DkX,GACF6P,EAAK7P,MAAK,CAAClb,EAAGlD,IAAM2D,EAAET,GAAKS,EAAE3D,WAGzBJ,EAAIquB,EAAKjvB,OACT+pB,EAAI,IAAI3U,aAAaxU,GACrBshC,EAAI,IAAI9sB,aAAaxU,OAKvBuhC,EACAC,EACAztB,EALArU,EAAI,EACJ+hC,EAAK,EACLC,EAAK,MAKJ3tB,KAAKsa,EACRlF,EAAEzpB,GAAK6hC,GAAMx9B,EAAEgQ,GACfutB,EAAE5hC,GAAK8hC,GAAM9sB,EAAEX,KACbrU,EACF+hC,IAAOF,EAAKE,GAAM/hC,EAClBgiC,IAAOF,EAAKE,GAAMhiC,MAIfA,EAAI,EAAGA,EAAIM,IAAKN,EACnBypB,EAAEzpB,IAAM+hC,EACRH,EAAE5hC,IAAMgiC,QAGH,CAACvY,EAAGmY,EAAGG,EAAIC,GAEpB,SAASC,GAAYtT,EAAMtqB,EAAG2Q,EAAGqd,OAE3B1qB,EACAC,EAFA5H,GAAK,MAIJ,MAAMqU,KAAKsa,EACdhnB,EAAItD,EAAEgQ,GACNzM,EAAIoN,EAAEX,GAEG,MAAL1M,IAAcA,GAAKA,IAAMA,GAAU,MAALC,IAAcA,GAAKA,IAAMA,GACzDyqB,EAAS1qB,EAAGC,IAAK5H,GAOvB,SAASkiC,GAAUvT,EAAMtqB,EAAG2Q,EAAGwsB,EAAIW,OAC7BC,EAAM,EACNC,EAAM,SACVJ,GAAYtT,EAAMtqB,EAAG2Q,GAAG,CAACnD,EAAIE,WACrBuwB,EAAMvwB,EAAKowB,EAAQtwB,GACnB0wB,EAAMxwB,EAAKyvB,EACjBY,GAAOE,EAAMA,EACbD,GAAOE,EAAMA,KAER,EAAIH,EAAMC,EAKnB,SAASG,GAAQ7T,EAAMtqB,EAAG2Q,OACpByU,EAAI,EACJmY,EAAI,EACJa,EAAK,EACLC,EAAK,EACLpiC,EAAI,EACR2hC,GAAYtT,EAAMtqB,EAAG2Q,GAAG,CAACnD,EAAIE,OACzBzR,EACFmpB,IAAM5X,EAAK4X,GAAKnpB,EAChBshC,IAAM7vB,EAAK6vB,GAAKthC,EAChBmiC,IAAO5wB,EAAKE,EAAK0wB,GAAMniC,EACvBoiC,IAAO7wB,EAAKA,EAAK6wB,GAAMpiC,WAGnBqiC,EAAOrB,GAAI7X,EAAGmY,EAAGa,EAAIC,GACrBP,EAAU99B,GAAKs+B,EAAK,GAAKA,EAAK,GAAKt+B,QAElC,CACLs+B,KAAMA,EACNR,QAASA,EACTD,SAAUA,GAASvT,EAAMtqB,EAAG2Q,EAAG4sB,EAAGO,IAMtC,SAAS59B,GAAKoqB,EAAMtqB,EAAG2Q,OACjByU,EAAI,EACJmY,EAAI,EACJa,EAAK,EACLC,EAAK,EACLpiC,EAAI,EACR2hC,GAAYtT,EAAMtqB,EAAG2Q,GAAG,CAACnD,EAAIE,OACzBzR,EACFuR,EAAKvN,KAAKC,IAAIsN,GACd4X,IAAM5X,EAAK4X,GAAKnpB,EAChBshC,IAAM7vB,EAAK6vB,GAAKthC,EAChBmiC,IAAO5wB,EAAKE,EAAK0wB,GAAMniC,EACvBoiC,IAAO7wB,EAAKA,EAAK6wB,GAAMpiC,WAGnBqiC,EAAOrB,GAAI7X,EAAGmY,EAAGa,EAAIC,GACrBP,EAAU99B,GAAKs+B,EAAK,GAAKA,EAAK,GAAKr+B,KAAKC,IAAIF,SAE3C,CACLs+B,KAAMA,EACNR,QAASA,EACTD,SAAUA,GAASvT,EAAMtqB,EAAG2Q,EAAG4sB,EAAGO,IAItC,SAASh+B,GAAKwqB,EAAMtqB,EAAG2Q,SAEd6sB,EAAIC,EAAIC,EAAIC,GAAM9vB,GAAOyc,EAAMtqB,EAAG2Q,OAMrCnD,EACA+wB,EACAC,EAPAC,EAAK,EACLL,EAAK,EACLM,EAAM,EACNC,EAAM,EACN1iC,EAAI,EAIR2hC,GAAYtT,EAAMtqB,EAAG2Q,GAAG,CAAC9T,EAAG6Q,KAC1BF,EAAKgwB,EAAGvhC,KACRsiC,EAAKt+B,KAAKC,IAAIwN,GACd8wB,EAAKhxB,EAAKE,EACV+wB,IAAO/wB,EAAK6wB,EAAKE,GAAMxiC,EACvBmiC,IAAOI,EAAKJ,GAAMniC,EAClByiC,IAAQF,EAAKD,EAAKG,GAAOziC,EACzB0iC,IAAQnxB,EAAKgxB,EAAKG,GAAO1iC,WAGpB2iC,EAAIC,GAAM5B,GAAImB,EAAKT,EAAIc,EAAKd,EAAIe,EAAMf,EAAIgB,EAAMhB,GACjDG,EAAU99B,GAAKC,KAAKH,IAAI8+B,EAAKC,GAAM7+B,EAAI09B,UAEtC,CACLY,KAAM,CAACr+B,KAAKH,IAAI8+B,EAAKC,EAAKnB,GAAKmB,GAC/Bf,QAASA,EACTD,SAAUA,GAASvT,EAAMtqB,EAAG2Q,EAAGgtB,EAAIG,IAMvC,SAASt9B,GAAK8pB,EAAMtqB,EAAG2Q,OACjByU,EAAI,EACJmY,EAAI,EACJa,EAAK,EACLC,EAAK,EACLS,EAAK,EACL7iC,EAAI,EACR2hC,GAAYtT,EAAMtqB,EAAG2Q,GAAG,CAACnD,EAAIE,WACrBqxB,EAAK9+B,KAAKC,IAAIsN,GACd+wB,EAAKt+B,KAAKC,IAAIwN,KAClBzR,EACFmpB,IAAM2Z,EAAK3Z,GAAKnpB,EAChBshC,IAAMgB,EAAKhB,GAAKthC,EAChBmiC,IAAOW,EAAKR,EAAKH,GAAMniC,EACvBoiC,IAAOU,EAAKA,EAAKV,GAAMpiC,EACvB6iC,IAAOpxB,EAAKoxB,GAAM7iC,WAGdqiC,EAAOrB,GAAI7X,EAAGmY,EAAGa,EAAIC,GACrBP,EAAU99B,GAAKs+B,EAAK,GAAKr+B,KAAKO,IAAIR,EAAGs+B,EAAK,WAEhDA,EAAK,GAAKr+B,KAAKH,IAAIw+B,EAAK,IACjB,CACLA,KAAMA,EACNR,QAASA,EACTD,SAAUA,GAASvT,EAAMtqB,EAAG2Q,EAAGmuB,EAAIhB,IAIvC,SAASkB,GAAM1U,EAAMtqB,EAAG2Q,SACf6sB,EAAIC,EAAIC,EAAIC,GAAM9vB,GAAOyc,EAAMtqB,EAAG2Q,GACnC1U,EAAIuhC,EAAGniC,WAMTM,EACA6R,EACAE,EACAuxB,EARAZ,EAAK,EACLa,EAAK,EACLC,EAAK,EACLf,EAAK,EACLO,EAAM,MAMLhjC,EAAI,EAAGA,EAAIM,GACduR,EAAKgwB,EAAG7hC,GACR+R,EAAK+vB,EAAG9hC,KACRsjC,EAAKzxB,EAAKA,EACV6wB,IAAOY,EAAKZ,GAAM1iC,EAClBujC,IAAOD,EAAKzxB,EAAK0xB,GAAMvjC,EACvBwjC,IAAOF,EAAKA,EAAKE,GAAMxjC,EACvByiC,IAAO5wB,EAAKE,EAAK0wB,GAAMziC,EACvBgjC,IAAQM,EAAKvxB,EAAKixB,GAAOhjC,QAGrByjC,EAAOD,EAAKd,EAAKA,EACjBruB,EAAIquB,EAAKe,EAAOF,EAAKA,EACrB3/B,GAAKo/B,EAAMN,EAAKD,EAAKc,GAAMlvB,EAC3B3T,GAAK+hC,EAAKgB,EAAOT,EAAMO,GAAMlvB,EAC7B7T,GAAKoD,EAAI8+B,EACTP,EAAU99B,GAEPT,GADPS,GAAQ09B,GACO19B,EAAI3D,EAAI2D,EAAI7D,EAAIwhC,QAI1B,CACLW,KAAM,CAACniC,EAAIE,EAAIqhC,EAAKn+B,EAAIm+B,EAAKA,EAAKC,EAAIthC,EAAI,EAAIkD,EAAIm+B,EAAIn+B,GACtDu+B,QAASA,EACTD,SAAUA,GAASvT,EAAMtqB,EAAG2Q,EAAGgtB,EAAIG,IASvC,SAASuB,GAAM/U,EAAMtqB,EAAG2Q,EAAGjN,MAEX,IAAVA,EAAa,OAAOy6B,GAAO7T,EAAMtqB,EAAG2Q,MAC1B,IAAVjN,EAAa,OAAOs7B,GAAK1U,EAAMtqB,EAAG2Q,SAC/B6sB,EAAIC,EAAIC,EAAIC,GAAM9vB,GAAOyc,EAAMtqB,EAAG2Q,GACnC1U,EAAIuhC,EAAGniC,OACPikC,EAAM,GACNC,EAAM,GACNlgC,EAAIqE,EAAQ,MACd/H,EAAGO,EAAG2J,EAAGtC,EAAGpH,MAEXR,EAAI,EAAGA,EAAI0D,IAAK1D,EAAG,KACjBkK,EAAI,EAAGtC,EAAI,EAAGsC,EAAI5J,IAAK4J,EAC1BtC,GAAKtD,KAAKO,IAAIg9B,EAAG33B,GAAIlK,GAAK8hC,EAAG53B,OAG/By5B,EAAI/iC,KAAKgH,GACTpH,EAAI,IAAIsU,aAAapR,GAEhBnD,EAAI,EAAGA,EAAImD,IAAKnD,EAAG,KACjB2J,EAAI,EAAGtC,EAAI,EAAGsC,EAAI5J,IAAK4J,EAC1BtC,GAAKtD,KAAKO,IAAIg9B,EAAG33B,GAAIlK,EAAIO,GAG3BC,EAAED,GAAKqH,EAGTg8B,EAAIhjC,KAAKJ,GAGXojC,EAAIhjC,KAAK+iC,SAEHhB,EA2CR,SAA6BkB,SACrBvjC,EAAIujC,EAAOnkC,OAAS,EACpBijC,EAAO,OACT3iC,EAAGO,EAAGmD,EAAGN,EAAG6G,MAEXjK,EAAI,EAAGA,EAAIM,IAAKN,EAAG,KACtBoD,EAAIpD,EAECO,EAAIP,EAAI,EAAGO,EAAID,IAAKC,EACnB+D,KAAKI,IAAIm/B,EAAO7jC,GAAGO,IAAM+D,KAAKI,IAAIm/B,EAAO7jC,GAAGoD,MAC9CA,EAAI7C,OAIHmD,EAAI1D,EAAG0D,EAAIpD,EAAI,IAAKoD,EACvBuG,EAAI45B,EAAOngC,GAAG1D,GACd6jC,EAAOngC,GAAG1D,GAAK6jC,EAAOngC,GAAGN,GACzBygC,EAAOngC,GAAGN,GAAK6G,MAGZ1J,EAAIP,EAAI,EAAGO,EAAID,IAAKC,MAClBmD,EAAIpD,EAAGoD,GAAK1D,EAAG0D,IAClBmgC,EAAOngC,GAAGnD,IAAMsjC,EAAOngC,GAAG1D,GAAK6jC,EAAO7jC,GAAGO,GAAKsjC,EAAO7jC,GAAGA,OAKzDO,EAAID,EAAI,EAAGC,GAAK,IAAKA,EAAG,KAC3B0J,EAAI,EAECvG,EAAInD,EAAI,EAAGmD,EAAIpD,IAAKoD,EACvBuG,GAAK45B,EAAOngC,GAAGnD,GAAKoiC,EAAKj/B,GAG3Bi/B,EAAKpiC,IAAMsjC,EAAOvjC,GAAGC,GAAK0J,GAAK45B,EAAOtjC,GAAGA,UAGpCoiC,EAhFMmB,CAAoBF,GAC3BzB,EAAU99B,IACdA,GAAK09B,MACD/sB,EAAIgtB,EAAKW,EAAK,GAAKA,EAAK,GAAKt+B,EAAIs+B,EAAK,GAAKt+B,EAAIA,MAE9CrE,EAAI,EAAGA,EAAI0D,IAAK1D,EAAGgV,GAAK2tB,EAAK3iC,GAAKsE,KAAKO,IAAIR,EAAGrE,UAE5CgV,SAGF,CACL2tB,KAAMoB,GAASrgC,EAAGi/B,GAAOZ,EAAIC,GAC7BG,QAASA,EACTD,SAAUA,GAASvT,EAAMtqB,EAAG2Q,EAAGgtB,EAAIG,IAIvC,SAAS4B,GAASrgC,EAAGE,EAAGS,EAAG2Q,SACnBwB,EAAIhU,MAAMkB,OACZ1D,EAAGO,EAAGqH,EAAGpH,MAERR,EAAI,EAAGA,EAAI0D,IAAK1D,EAAGwW,EAAExW,GAAK,MAG1BA,EAAI0D,EAAI,EAAG1D,GAAK,IAAKA,MACxB4H,EAAIhE,EAAE5D,GACNQ,EAAI,EACJgW,EAAExW,IAAM4H,EAEHrH,EAAI,EAAGA,GAAKP,IAAKO,EACpBC,IAAMR,EAAI,EAAIO,GAAKA,EAEnBiW,EAAExW,EAAIO,IAAMqH,EAAItD,KAAKO,IAAIR,EAAG9D,GAAKC,SAKrCgW,EAAE,IAAMxB,EACDwB,EAkDT,SAASwtB,GAAOrV,EAAMtqB,EAAG2Q,EAAGqrB,SACnBwB,EAAIC,EAAIC,EAAIC,GAAM9vB,GAAOyc,EAAMtqB,EAAG2Q,GAAG,GACtC1U,EAAIuhC,EAAGniC,OACPukC,EAAK3/B,KAAKuC,IAAI,KAAMw5B,EAAY//B,IAEtC4jC,EAAO,IAAIpvB,aAAaxU,GAClB6jC,EAAY,IAAIrvB,aAAaxU,GAC7B8jC,EAAgB,IAAItvB,aAAaxU,GAAGyX,KAAK,OAE1C,IAAIssB,GAAQ,IAAKA,GAdP,GAc0B,OACjCvpB,EAAW,CAAC,EAAGmpB,EAAK,OAErB,IAAIjkC,EAAI,EAAGA,EAAIM,IAAKN,EAAG,OACpB6R,EAAKgwB,EAAG7hC,GACRyM,EAAKqO,EAAS,GACdpO,EAAKoO,EAAS,GACdwpB,EAAOzyB,EAAKgwB,EAAGp1B,GAAMo1B,EAAGn1B,GAAMmF,EAAKpF,EAAKC,MAC1C6c,EAAI,EACJE,EAAI,EACJmY,EAAI,EACJa,EAAK,EACLC,EAAK,QACH6B,EAAQ,EAAIjgC,KAAKI,IAAIm9B,EAAGyC,GAAQzyB,GAAM,OAEvC,IAAInO,EAAI+I,EAAI/I,GAAKgJ,IAAMhJ,EAAG,OACvB8gC,EAAK3C,EAAGn+B,GACR+gC,EAAK3C,EAAGp+B,GACRqd,EAAI2jB,GAAQpgC,KAAKI,IAAImN,EAAK2yB,GAAMD,GAASH,EAAc1gC,GACvDihC,EAAMH,EAAKzjB,EACjBwI,GAAKxI,EACL0I,GAAKkb,EACL/C,GAAK6C,EAAK1jB,EACV0hB,GAAMgC,EAAKE,EACXjC,GAAM8B,EAAKG,QAIN/gC,EAAGlD,GAAK4gC,GAAI7X,EAAIF,EAAGqY,EAAIrY,EAAGkZ,EAAKlZ,EAAGmZ,EAAKnZ,GAC9C2a,EAAKlkC,GAAK4D,EAAIlD,EAAImR,EAClBsyB,EAAUnkC,GAAKsE,KAAKI,IAAIo9B,EAAG9hC,GAAKkkC,EAAKlkC,IACrC4kC,GAAe/C,EAAI7hC,EAAI,EAAG8a,MA7Cf,IAgDTupB,cAIEQ,EAAiBC,GAAOX,MAC1B7/B,KAAKI,IAAImgC,GApDD,MAoD4B,UAEnC,IAAWE,EAAKhkB,EAAZ/gB,EAAI,EAAWA,EAAIM,IAAKN,EAC/B+kC,EAAMZ,EAAUnkC,IAAM,EAAI6kC,GAG1BT,EAAcpkC,GAAK+kC,GAAO,EA1DhB,OA0D+BhkB,EAAI,EAAIgkB,EAAMA,GAAOhkB,SA4BpE,SAAgB8gB,EAAIqC,EAAMnC,EAAIC,SACtB1hC,EAAIuhC,EAAGniC,OACPsD,EAAM,OAIR4E,EAHA5H,EAAI,EACJglC,EAAM,EACNh5B,EAAO,QAGJhM,EAAIM,IAAKN,EACd4H,EAAIi6B,EAAG7hC,GAAK+hC,EAER/1B,EAAK,KAAOpE,EAEdoE,EAAK,KAAOk4B,EAAKlkC,GAAKgM,EAAK,MAAQg5B,GAGnCA,EAAM,EACNh5B,EAAK,IAAMg2B,EACXh2B,EAAO,CAACpE,EAAGs8B,EAAKlkC,IAChBgD,EAAIpC,KAAKoL,WAIbA,EAAK,IAAMg2B,EACJh/B,EAhDAO,CAAOs+B,EAAIqC,EAAMnC,EAAIC,GAG9B,SAAS0C,GAAQrgC,UACPA,EAAI,EAAIA,EAAIA,EAAIA,GAAKA,EAAIA,EAInC,SAASugC,GAAe/C,EAAI7hC,EAAG8a,SACvB+b,EAAMgL,EAAG7hC,OACX8J,EAAOgR,EAAS,GAChB/Q,EAAQ+Q,EAAS,GAAK,OACtB/Q,GAAS83B,EAAGniC,aAGTM,EAAI8J,GAAQ+3B,EAAG93B,GAAS8sB,GAAOA,EAAMgL,EAAG/3B,IAC7CgR,EAAS,KAAOhR,EAChBgR,EAAS,GAAK/Q,IACZA,EAkCN,MAAMk7B,GAAc,GAAM3gC,KAAK26B,GAAK,IAEpC,SAASiG,GAAa19B,EAAGgB,EAAQ28B,EAAUC,GACzCD,EAAWA,GAAY,GACvBC,EAAW9gC,KAAKuC,IAAIs+B,EAAUC,GAAY,WAEpC/yB,EAAQhO,GAAK,CAACA,EAAGmD,EAAEnD,IACnBghC,EAAO78B,EAAO,GACd88B,EAAO98B,EAAO,GACd1B,EAAOw+B,EAAOD,EACd/vB,EAAOxO,EAAOs+B,EACdp5B,EAAO,CAACqG,EAAMgzB,IACd17B,EAAO,MAETw7B,IAAaC,EAAU,KAEpB,IAAIplC,EAAI,EAAGA,EAAIolC,IAAYplC,EAC9BgM,EAAKpL,KAAKyR,EAAMgzB,EAAOrlC,EAAImlC,EAAWr+B,WAGxCkF,EAAKpL,KAAKyR,EAAMizB,IACTt5B,EAIPrC,EAAK/I,KAAKyR,EAAMizB,QAEX,IAAItlC,EAAImlC,IAAYnlC,EAAI,GAC3B2J,EAAK/I,KAAKyR,EAAMgzB,EAAOrlC,EAAImlC,EAAWr+B,QAItCqM,EAAKnH,EAAK,GACVkH,EAAKvJ,EAAKA,EAAKjK,OAAS,QAErBwT,GAAI,OAEHqyB,EAAKlzB,GAAOc,EAAG,GAAKD,EAAG,IAAM,GAE/BqyB,EAAG,GAAKpyB,EAAG,IAAMmC,GAAQkwB,GAAWryB,EAAIoyB,EAAIryB,GAAM+xB,GAIpDt7B,EAAK/I,KAAK2kC,IAIVpyB,EAAKD,EACLlH,EAAKpL,KAAKsS,GACVvJ,EAAKwI,OAGPe,EAAKvJ,EAAKA,EAAKjK,OAAS,UAGnBsM,EAGT,SAASw5B,GAAWnlC,EAAGI,EAAG2C,SAClBqiC,EAAKnhC,KAAKohC,MAAMtiC,EAAE,GAAK/C,EAAE,GAAI+C,EAAE,GAAK/C,EAAE,IACtCslC,EAAKrhC,KAAKohC,MAAMjlC,EAAE,GAAKJ,EAAE,GAAII,EAAE,GAAKJ,EAAE,WACrCiE,KAAKI,IAAI+gC,EAAKE,GG1sCvB,SAASC,GAASzmC,UACRA,GAAWA,EAAOO,OAEJ,IAAlBP,EAAOO,OAAeP,EAAO,IAhBjBqI,EAgB+BrI,EAfxCkF,UACC/D,EAAIkH,EAAE9H,WACRM,EAAI,EACJ0D,EAAI4V,OAAO9R,EAAE,GAAGnD,SAEbrE,EAAIM,IAAKN,EACd0D,GAAK,IAAM8D,EAAExH,GAAGqE,UAGXX,IAI0B,iBAC1B,IAfX,IAAkB8D,EAmBlB,SAASq+B,GAAYjQ,EAAI/1B,EAAOimC,UACvBA,GAAMlQ,GAAO/1B,EAAa,IAAMA,EAAX,IAG9B,MAAMkmC,GAAO,OAEPC,GAAU,CACdzR,KAAMwR,GACNjiC,IAAKiiC,GACL5S,IAAK4S,GACL9a,IAAK,GAEDgb,GAAe,CACnB9vB,OAAQ,CACNoe,KAAMhe,GAAKA,EAAE2vB,KAAKC,OAAQ,EAC1B3iC,MAAO+S,GAAKA,EAAE2vB,KAAKvX,KAAKxY,SACxB8U,KAAM,GAER1V,MAAO,CACL/R,MAAO+S,GAAKA,EAAE2vB,KAAKE,KAErBC,UAAW,CACT7iC,MAAO+S,GAAKA,EAAE+vB,QAAU/vB,EAAEgwB,OAE5BD,QAAS,CACP9iC,MAAO+S,GAAKA,EAAE+vB,SAEhBC,MAAO,CACL/iC,MAAO+S,GAAKA,EAAEgwB,OAEhBpvB,IAAK,CACHod,KAAMhe,GAAKA,EAAEY,IAAM,EACnB3T,MAAO+S,GAAKA,EAAEY,IACdrT,IAAK,CAACyS,EAAG3O,IAAM2O,EAAEY,MAAQvP,EACzBurB,IAAK,CAAC5c,EAAG3O,IAAM2O,EAAEY,KAAOvP,GAE1B4+B,QAAS,CACPjS,KAAMhe,GAAKA,EAAEiwB,QAAU,EACvBhjC,MAAO+S,GAAKA,EAAEgwB,MAAQhwB,EAAEiwB,aAAUl9B,EAClCxF,IAAK,CAACyS,EAAG3O,IAAM2O,EAAEiwB,SAAW5+B,EAC5BurB,IAAK,CAAC5c,EAAG3O,IAAM2O,EAAEiwB,SAAW5+B,GAE9B+1B,KAAM,CACJpJ,KAAMhe,GAAKA,EAAEonB,KAAO,EACpBn6B,MAAO+S,GAAKA,EAAEgwB,MAAQhwB,EAAEonB,UAAOr0B,EAC/BxF,IAAK,CAACyS,EAAG3O,KAAO2O,EAAEkwB,OAAS7+B,EAAI2O,EAAEonB,KAAMpnB,EAAEonB,MAAQpnB,EAAEkwB,OAASlwB,EAAEgwB,OAC9DpT,IAAK,CAAC5c,EAAG3O,KAAO2O,EAAEkwB,OAAS7+B,EAAI2O,EAAEonB,KAAMpnB,EAAEonB,MAAQpnB,EAAEgwB,MAAQhwB,EAAEkwB,OAASlwB,EAAEgwB,MAAQhwB,EAAEonB,OAEpF+I,QAAS,CACPljC,MAAO+S,GAAKA,EAAEgwB,MAAQhwB,EAAEonB,UAAOr0B,EAC/Bq9B,IAAK,CAAC,QACN1b,IAAK,GAEP2S,SAAU,CACRrJ,KAAMhe,GAAKA,EAAEqwB,IAAM,EACnBpjC,MAAO+S,GAAKA,EAAEgwB,MAAQ,EAAIhwB,EAAEqwB,KAAOrwB,EAAEgwB,MAAQ,QAAKj9B,EAClDxF,IAAK,CAACyS,EAAG3O,IAAM2O,EAAEqwB,KAAOrwB,EAAEkwB,QAAU7+B,EAAI2O,EAAEonB,MAC1CxK,IAAK,CAAC5c,EAAG3O,IAAM2O,EAAEqwB,KAAOrwB,EAAEkwB,QAAU7+B,EAAI2O,EAAEonB,MAC1CgJ,IAAK,CAAC,QACN1b,IAAK,GAEP4b,UAAW,CACTrjC,MAAO+S,GAAKA,EAAEgwB,MAAQ,EAAIhwB,EAAEqwB,IAAMrwB,EAAEgwB,WAAQj9B,EAC5Cq9B,IAAK,CAAC,YACN1b,IAAK,GAEPoU,MAAO,CACL77B,MAAO+S,GAAKA,EAAEgwB,MAAQ,EAAIjiC,KAAK6Q,KAAKoB,EAAEqwB,KAAOrwB,EAAEgwB,MAAQ,SAAMj9B,EAC7Dq9B,IAAK,CAAC,YACN1b,IAAK,GAEP6b,OAAQ,CACNtjC,MAAO+S,GAAKA,EAAEgwB,MAAQ,EAAIjiC,KAAK6Q,KAAKoB,EAAEqwB,IAAMrwB,EAAEgwB,YAASj9B,EACvDq9B,IAAK,CAAC,YACN1b,IAAK,GAEP8b,OAAQ,CACNvjC,MAAO+S,GAAKA,EAAEgwB,MAAQ,EAAIjiC,KAAK6Q,KAAKoB,EAAEqwB,KAAOrwB,EAAEgwB,OAAShwB,EAAEgwB,MAAQ,UAAOj9B,EACzEq9B,IAAK,CAAC,YACN1b,IAAK,GAEP+b,SAAU,CACRxjC,MAAO+S,GAAKA,EAAE2vB,KAAKvX,KAAKqY,SAASzwB,EAAExV,KACnC4lC,IAAK,CAAC,UACN1b,IAAK,GAEPgc,IAAK,CACHzjC,MAAO+S,GAAKA,EAAE2vB,KAAKvX,KAAKsY,IAAI1wB,EAAExV,KAC9B4lC,IAAK,CAAC,UACN1b,IAAK,GAEPic,IAAK,CACH1jC,MAAO+S,GAAKA,EAAE2vB,KAAKvX,KAAKuY,IAAI3wB,EAAExV,KAC9B4lC,IAAK,CAAC,UACN1b,IAAK,GAEP6Z,OAAQ,CACNthC,MAAO+S,GAAKA,EAAE2vB,KAAKvX,KAAKwY,GAAG5wB,EAAExV,KAC7B4lC,IAAK,CAAC,UACN1b,IAAK,GAEPmc,GAAI,CACF5jC,MAAO+S,GAAKA,EAAE2vB,KAAKvX,KAAKyY,GAAG7wB,EAAExV,KAC7B4lC,IAAK,CAAC,UACN1b,IAAK,GAEPoc,GAAI,CACF7jC,MAAO+S,GAAKA,EAAE2vB,KAAKvX,KAAK0Y,GAAG9wB,EAAExV,KAC7B4lC,IAAK,CAAC,UACN1b,IAAK,GAEPrkB,IAAK,CACH2tB,KAAMhe,GAAKA,EAAE3P,SAAM0C,EACnB9F,MAAO+S,GAAKA,EAAE3P,IAAMmS,OAAO1J,MAAMkH,EAAE3P,KAAO2P,EAAE2vB,KAAKvX,KAAK/nB,IAAI2P,EAAExV,KAAOwV,EAAE3P,IACrE9C,IAAK,CAACyS,EAAG3O,MACHA,EAAI2O,EAAE3P,UAAiB0C,IAAViN,EAAE3P,OAAmB2P,EAAE3P,IAAMgB,IAEhDurB,IAAK,CAAC5c,EAAG3O,KACHA,GAAK2O,EAAE3P,MAAK2P,EAAE3P,IAAMuN,MAE1BwyB,IAAK,CAAC,UACN1b,IAAK,GAEPpkB,IAAK,CACH0tB,KAAMhe,GAAKA,EAAE1P,SAAMyC,EACnB9F,MAAO+S,GAAKA,EAAE1P,IAAMkS,OAAO1J,MAAMkH,EAAE1P,KAAO0P,EAAE2vB,KAAKvX,KAAK9nB,IAAI0P,EAAExV,KAAOwV,EAAE1P,IACrE/C,IAAK,CAACyS,EAAG3O,MACHA,EAAI2O,EAAE1P,UAAiByC,IAAViN,EAAE1P,OAAmB0P,EAAE1P,IAAMe,IAEhDurB,IAAK,CAAC5c,EAAG3O,KACHA,GAAK2O,EAAE1P,MAAK0P,EAAE1P,IAAMsN,MAE1BwyB,IAAK,CAAC,UACN1b,IAAK,GAEPqc,OAAQ,CACN/S,KAAMhe,GAAKA,EAAE+wB,YAASh+B,EACtB9F,MAAO+S,GAAKA,EAAE+wB,QAAU/wB,EAAE2vB,KAAKvX,KAAK2Y,OAAO/wB,EAAExV,KAC7C+C,IAAK,CAACyS,EAAG3O,EAAGqC,KACNrC,EAAI2O,EAAE3P,MAAK2P,EAAE+wB,OAASr9B,IAE5BkpB,IAAK,CAAC5c,EAAG3O,KACHA,GAAK2O,EAAE3P,MAAK2P,EAAE+wB,YAASh+B,IAE7Bq9B,IAAK,CAAC,MAAO,UACb1b,IAAK,GAEPsc,OAAQ,CACNhT,KAAMhe,GAAKA,EAAEgxB,YAASj+B,EACtB9F,MAAO+S,GAAKA,EAAEgxB,QAAUhxB,EAAE2vB,KAAKvX,KAAK4Y,OAAOhxB,EAAExV,KAC7C+C,IAAK,CAACyS,EAAG3O,EAAGqC,KACNrC,EAAI2O,EAAE1P,MAAK0P,EAAEgxB,OAASt9B,IAE5BkpB,IAAK,CAAC5c,EAAG3O,KACHA,GAAK2O,EAAE1P,MAAK0P,EAAEgxB,YAASj+B,IAE7Bq9B,IAAK,CAAC,MAAO,UACb1b,IAAK,IAGHuc,GAAoB9kC,OAAO+E,KAAKw+B,IAYtC,SAASwB,GAAc7R,EAAIx2B,UAClB6mC,GAAarQ,GAAIx2B,GAG1B,SAASsoC,GAAa9jC,EAAGlD,UAChBkD,EAAEqnB,IAAMvqB,EAAEuqB,IAkBnB,SAASsJ,UACFgS,MAAQ,OACRD,QAAU,OAEVqB,KAAK5jC,SAAQ6xB,GAAMA,EAAGrB,KAAKpyB,QAGlC,SAAS2B,GAAI8D,EAAGqC,GACL,MAALrC,GAAmB,KAANA,EAKbA,GAAMA,MACRzF,KAAKokC,WAEFoB,KAAK5jC,SAAQ6xB,GAAMA,EAAG9xB,IAAI3B,KAAMyF,EAAGqC,QAPpC9H,KAAKmkC,QAUX,SAASnT,GAAIvrB,EAAGqC,GACL,MAALrC,GAAmB,KAANA,EAKbA,GAAMA,MACRzF,KAAKokC,WAEFoB,KAAK5jC,SAAQ6xB,GAAMA,EAAGzC,IAAIhxB,KAAMyF,EAAGqC,QAPpC9H,KAAKmkC,QAUX,SAAS/8B,GAAIU,eACN29B,KAAK7jC,SAAQ6xB,GAAM3rB,EAAE2rB,EAAG5yB,KAAO4yB,EAAGpyB,MAAMrB,QAEtC8H,EAGT,SAAS49B,GAAgBC,EAAKjoC,SACtBkB,EAAMlB,GAASoB,EACf8mC,EAtDR,SAAiBD,SACTjkC,EAAM,GACZikC,EAAI/jC,SAAQH,GAAKC,EAAID,EAAExE,MAAQwE,UAEzBokC,EAAUpkC,IACTA,EAAE+iC,KACP/iC,EAAE+iC,IAAI5iC,SAAQnB,IACPiB,EAAIjB,IAAMolC,EAAQnkC,EAAIjB,GAAOqjC,GAAarjC,iBAInDklC,EAAI/jC,QAAQikC,GACLtlC,OAAOyT,OAAOtS,GAAKib,KAAK4oB,IA0CnBO,CAAQH,GACd9kC,EAAM8kC,EAAIjmC,QAAQid,KAAK4oB,aAEpBQ,EAAIhC,QACNyB,KAAOI,OACPH,KAAO5kC,OACPkjC,KAAOA,OACP3R,cAGP2T,EAAIv/B,UAAU4rB,KAAOA,GACrB2T,EAAIv/B,UAAU7E,IAAMA,GACpBokC,EAAIv/B,UAAUwqB,IAAMA,GACpB+U,EAAIv/B,UAAUY,IAAMA,GACpB2+B,EAAIv/B,UAAU5H,IAAMA,EACpBmnC,EAAI/oC,OAAS2oC,EAAIjkC,KAAI+xB,GAAMA,EAAG5yB,MACvBklC,EAGT,SAASC,GAAWvlC,QACbwlC,KAAOxlC,EAAM/C,EAAM+C,GAAO8vB,QAC1B2V,QAtFPb,GAAkBzjC,SAAQnB,IACxBqjC,GAAarjC,GARf,SAAiBA,EAAKY,UACbR,GAAOuF,GAAO,CACnBnJ,KAAMwD,EACNI,IAAKA,GAAOJ,GACXojC,GAASxiC,GAIQ8kC,CAAQ1lC,EAAKqjC,GAAarjC,OAuFhD,MAAM2lC,GAAcJ,GAAWx/B,UAmJ/B,SAAS6/B,GAAUhU,GACjB4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,QACtBiU,MAAQ,QAERC,MAAQ,QAERC,MAAQ,OAERC,MAAQ,OAERC,OAAQ,OAERC,QAAS,OAETC,MAAQ,QAERC,QAAU,QAEVC,UAAY,QAEZC,YAAa,OAEbC,QAAU,UAEVC,MAAQ,UAERC,QAAU,UAEVC,SAAW,KA7KlBf,GAAYF,MAAQ,gBACbkB,KAAO,QACPC,KAAO,QACPC,KAAO,UACPC,KAAO,UACPC,GAAK,MAGZpB,GAAYzkC,IAAM,SAAU8D,QACrB2hC,KAAK3oC,KAAKgH,IAGjB2gC,GAAYpV,IAAM,SAAUvrB,QACrB4hC,KAAK5oC,KAAKgH,IAGjB2gC,GAAYpyB,OAAS,mBACduzB,KAAO,KACa,IAArBvnC,KAAKqnC,KAAK9pC,OAAc,OAAOyC,KAAKonC,WAClC3lC,EAAIzB,KAAKonC,KACTnmC,EAAIjB,KAAKqnC,KACT9lC,EAAIvB,KAAKimC,KACT9nC,EAAIsD,EAAElE,OACN6W,EAAInT,EAAE1D,OACN2E,EAAI7B,MAAMlC,EAAIiW,GACd1S,EAAM,OACR7D,EAAGO,EAAGqH,MAEL5H,EAAI,EAAGA,EAAIuW,IAAKvW,EACnB6D,EAAIH,EAAEN,EAAEpD,KAAO,MAGZA,EAAI,EAAGO,EAAI,EAAGP,EAAIM,IAAKN,EACtB6D,EAAIH,EAAEkE,EAAIhE,EAAE5D,KACd6D,EAAIH,EAAEkE,IAAM,EAEZvD,EAAE9D,KAAOqH,cAIR4hC,KAAO,GACLrnC,KAAKonC,KAAOllC,GAIrBkkC,GAAYvB,SAAW,SAAUjmC,SACzB6G,EAAIzF,KAAKgU,SACTtS,EAAM,OAGRlD,EAFAL,EAAIsH,EAAElI,OACN6V,EAAQ,SAGHjV,GAAK,GACZK,EAAII,EAAI6G,EAAEtH,IAAM,GAEXsI,GAAe/E,EAAKlD,KACvBkD,EAAIlD,GAAK,IACP4U,UAICA,GAGTgzB,GAAY//B,OAAS,SAAUzH,MACzBoB,KAAKunC,OAAS3oC,IAAQoB,KAAKsnC,KAAM,OAC7B7hC,EAAIzF,KAAKgU,SACTnW,EAAIyI,GAAYb,EAAG7G,QACpB0oC,KAAO,CAAC7hC,EAAE5H,EAAE,IAAK4H,EAAE5H,EAAE,UACrB0pC,KAAO3oC,SAGPoB,KAAKsnC,MAGdlB,GAAYjB,OAAS,SAAUvmC,UACtBoB,KAAKqG,OAAOzH,GAAK,IAAM,IAGhCwnC,GAAYhB,OAAS,SAAUxmC,UACtBoB,KAAKqG,OAAOzH,GAAK,IAAM,IAGhCwnC,GAAY3hC,IAAM,SAAU7F,SACpBwV,EAAIpU,KAAKqG,OAAOzH,GAAK,UACf,MAALwV,EAAYxV,EAAIwV,QAAKjN,GAG9Bi/B,GAAY1hC,IAAM,SAAU9F,SACpBwV,EAAIpU,KAAKqG,OAAOzH,GAAK,UACf,MAALwV,EAAYxV,EAAIwV,QAAKjN,GAG9Bi/B,GAAYqB,SAAW,SAAU7oC,UAC3BoB,KAAKunC,OAAS3oC,GAAQoB,KAAKwnC,UACxBA,GAAKlM,GAAUt7B,KAAKgU,SAAUpV,QAC9B2oC,KAAO3oC,GAGPoB,KAAKwnC,IAGdpB,GAAYnB,GAAK,SAAUrmC,UAClBoB,KAAKynC,SAAS7oC,GAAK,IAG5BwnC,GAAYpB,GAAK,SAAUpmC,UAClBoB,KAAKynC,SAAS7oC,GAAK,IAG5BwnC,GAAYlB,GAAK,SAAUtmC,UAClBoB,KAAKynC,SAAS7oC,GAAK,IAG5BwnC,GAAYsB,GAAK,SAAU9oC,UACrBoB,KAAKunC,OAAS3oC,GAAQoB,KAAK2nC,WACxBA,IAAMvL,GAAYp8B,KAAKgU,SAAU,IAAM,IAAMpV,QAC7C2oC,KAAO3oC,GAGPoB,KAAK2nC,KAGdvB,GAAYtB,IAAM,SAAUlmC,UACnBoB,KAAK0nC,GAAG9oC,GAAK,IAGtBwnC,GAAYrB,IAAM,SAAUnmC,UACnBoB,KAAK0nC,GAAG9oC,GAAK,OA+CZw8B,WAAa,MACb,qBACI,YACG,WACF,UAEH,CAAC,MACD,eACA,eACC,GACR,MACO,WACA,cACC,SACCiK,IACT,MACO,cACA,cACA,SACC,GACR,MACO,UACA,eACA,SACC,GACR,MACO,YACA,mBACG,GACV,MACO,aACA,mBACG,GACV,MACO,WACA,WAGZr9B,GAASq+B,GAAWpN,GAAW,CAC7B5pB,UAAUtQ,EAAG0yB,SACLmW,EAAO5nC,KACPa,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,UAAYpF,EAAMqF,WACzC7F,EAAMlyB,EAAEizB,kBAEd4V,EAAKrV,MAAQ1xB,EAAI0xB,MAEbqV,EAAKvmC,QAAU4vB,GAAOQ,EAAMO,SAAS4V,EAAKV,SAAS,KACrDU,EAAKX,MAAQW,EAAKvmC,MAClBumC,EAAKvmC,MAAQ4vB,EAAM2W,EAAKxV,KAAKrzB,GAAK,GAClC0yB,EAAMoE,MAAMpE,EAAMmF,QAAQ9uB,GAAK8/B,EAAKjmC,IAAImG,OAExC8/B,EAAKvmC,MAAQumC,EAAKvmC,OAASumC,EAAKxV,KAAKrzB,GACrC0yB,EAAMoE,MAAMpE,EAAM2E,KAAKtuB,GAAK8/B,EAAK5W,IAAIlpB,KACrC2pB,EAAMoE,MAAMpE,EAAM0E,KAAKruB,GAAK8/B,EAAKjmC,IAAImG,MAIvCjH,EAAI+wB,SAASgW,EAAKT,UAElBS,EAAKlB,OAAmB,IAAX3nC,EAAE8oC,KAGX9oC,EAAE+oC,OAASF,EAAKhB,MAAMrpC,OAAS,IACjCqqC,EAAKlB,OAAQ,EACbkB,EAAKE,SAGHrW,EAAMlqB,SAAWqgC,EAAKlB,OACxB7lC,EAAI0G,OAAM,GAAMiwB,UAAS,IAAMx3B,KAAKuH,UAG/BqgC,EAAKtR,QAAQz1B,IAGtBinC,cACQF,EAAO5nC,KACP4J,EAAOg+B,EAAKvmC,MACZ0mC,EAAOH,EAAKf,QACZmB,EAAOD,EAAKrmC,KAAI,WAChBvD,EAAI4pC,EAAKxqC,gBAEN0qC,EAAQC,OACXznC,EAAK5C,EAAGiK,EAAGrC,MAEVhF,KAAOynC,MACVpgC,EAAIogC,EAAMznC,GAAK8wB,MAEV1zB,EAAI,EAAGA,EAAIM,IAAKN,EACnBmqC,EAAKnqC,GAAG4H,EAAIqC,EAAEigC,EAAKlqC,KAAO4H,EAKhCwiC,EAAQL,EAAKX,OACbgB,EAAQr+B,YAECu+B,EAAS7c,EAAMiG,EAAOrd,SACvBjX,EAAO8qC,EAAK7zB,GACZzO,EAAIuiC,EAAK9zB,SAEV,MAAM3S,KAAKkE,EAAG,OACXhF,EAAM6qB,EAAOA,EAAO,IAAM/pB,EAAIA,EACpCgwB,EAAMt0B,GAAQwI,EAAElE,GACZ2S,EAAQ/V,EAAGgqC,EAAS1nC,EAAK8wB,EAAOrd,GAAiBtK,EAAKnJ,IAAMmnC,EAAK7D,KAAKtjC,EAAK8wB,IAInF4W,CAAS,GAAI,GAAI,IAGnB/V,KAAKrzB,SAEGqpC,EAASpoC,KAAKknC,QAAU,GACxBmB,EAAUroC,KAAKmnC,SAAW,GAC1BmB,EAAW,YAERC,EAAW3pC,SACZ5B,EAAS8E,EAAM1E,EAAewB,IAC9BT,EAAInB,EAAOO,WAEb8H,EADAxH,EAAI,OAGDA,EAAIM,IAAKN,EACTyqC,EAASjjC,EAAIrI,EAAOa,MACvByqC,EAASjjC,GAAK,EACd+iC,EAAO3pC,KAAK4G,SAMbuhC,MAAQ9kC,EAAM/C,EAAEypC,cAChB3B,QAAU7mC,KAAK4mC,MAAMllC,KAAIwQ,UACtBu2B,EAAQtrC,EAAa+U,UAC3Bq2B,EAAWr2B,GACXm2B,EAAQ5pC,KAAKgqC,GACNA,UAEJC,QAAU3pC,EAAE0B,IAAM1B,EAAE0B,IAAMgjC,GAASzjC,KAAK4mC,YAExCG,YAAa,OACbC,QAAU,QACVF,UAAY,SACX9pC,EAAS+B,EAAE/B,QAAU,CAAC,MACtB4oC,EAAM7mC,EAAE6mC,KAAO,CAAC,SAChBjC,EAAK5kC,EAAE4kC,IAAM,GACbxlC,EAAInB,EAAOO,OACXmE,EAAM,OACRhE,EAAO+1B,EAAIrf,EAAGu0B,EAAOC,EAAS/qC,MAE9BM,IAAMynC,EAAIroC,QACZO,EAAM,iDAGHD,EAAI,EAAGA,EAAIM,IAAKN,EACnBH,EAAQV,EAAOa,GACf41B,EAAKmS,EAAI/nC,GAEI,MAATH,GAAwB,UAAP+1B,GACnB31B,EAAM,mCAGR6qC,EAAQxrC,EAAaO,GACrBkrC,EAAUlF,GAAYjQ,EAAIkV,EAAOhF,EAAG9lC,IACpCwqC,EAAQ5pC,KAAKmqC,GAEF,UAAPnV,GAMJrf,EAAI1S,EAAIinC,GAEHv0B,IACHm0B,EAAW7qC,GACX0W,EAAI1S,EAAIinC,GAAS,GACjBv0B,EAAE1W,MAAQA,OAELopC,UAAUroC,KAAK2V,IAGX,UAAPqf,IAAgBzzB,KAAK+mC,YAAa,GACtC3yB,EAAE3V,KAAK6mC,GAAc7R,EAAImV,UAhBlB5B,QAAQvoC,KAAKmqC,eAmBjB9B,UAAY9mC,KAAK8mC,UAAUplC,KAAI0S,GAAKsxB,GAAgBtxB,EAAGA,EAAE1W,SACvD,IAITgrC,QAASjF,KAETM,KAAKtjC,EAAKqH,OACJi8B,EAAO/jC,KAAKqB,MAAMZ,UAEjBsjC,EAGmB,IAAbA,EAAKE,KAAajkC,KAAK0mC,OAAS3C,EAAKxR,MAAQvyB,KAAKuyB,OAC3DwR,EAAKxR,MAAQvyB,KAAKuyB,WACb+T,MAAMtmC,KAAKwmC,SAAWzC,GAClBA,EAAKxR,MAAQvyB,KAAKuyB,QAC3BwR,EAAKxR,MAAQvyB,KAAKuyB,WACbgU,MAAMvmC,KAAKymC,SAAW1C,IAP3BA,EAAO/jC,KAAKqB,MAAMZ,GAAOT,KAAK6oC,QAAQpoC,EAAKqH,QACtCw+B,MAAMtmC,KAAKwmC,SAAWzC,GAStBA,GAGT8E,QAAQpoC,EAAKqH,SACLi8B,EAAO,CACXtjC,IAAKA,EACLwjC,IAAK,EACL0B,IAAK,KACLpU,MAAOvxB,KAAK8oC,SAAShhC,EAAG9H,KAAKinC,OAASjnC,KAAKinC,MAAMxmC,IACjD8xB,MAAOvyB,KAAKuyB,MACZyR,OAAO,OAGJhkC,KAAK+mC,WAAY,OACdgC,EAAW/oC,KAAK8mC,UAChB3oC,EAAI4qC,EAASxrC,OACnBwmC,EAAK4B,IAAMtlC,MAAMlC,OAEZ,IAAIN,EAAI,EAAGA,EAAIM,IAAKN,EACvBkmC,EAAK4B,IAAI9nC,GAAK,IAAIkrC,EAASlrC,GAAGkmC,UAI9BA,EAAKC,QACPD,EAAKvX,KAAO,IAAIwZ,IAGXjC,GAGT+E,SAAShhC,EAAG5J,SACJ6pB,EAAQ/nB,KAAK6mC,QACbkB,EAAO/nC,KAAK4mC,MACZzoC,EAAI4pC,EAAKxqC,OACT2E,EAAI,OAEL,IAAIrE,EAAI,EAAGA,EAAIM,IAAKN,EACvBqE,EAAE6lB,EAAMlqB,IAAMkqC,EAAKlqC,GAAGiK,UAGjB5J,EAAIqL,GAAQrL,EAAEqzB,MAAOrvB,GAAKu3B,GAAOv3B,IAG1CqF,cACQ2gC,EAAQloC,KAAKqB,UAEd,MAAMZ,KAAOynC,EACO,IAAnBA,EAAMznC,GAAKwjC,YACNiE,EAAMznC,IAMnBkB,IAAImG,SACIrH,EAAMT,KAAK0oC,QAAQ5gC,GACnBi8B,EAAO/jC,KAAK+jC,KAAKtjC,EAAKqH,MAC5Bi8B,EAAKE,KAAO,EACRjkC,KAAK+mC,WAAY,OACjBhD,EAAKC,OAAOD,EAAKvX,KAAK7qB,IAAImG,SACxB69B,EAAM5B,EAAK4B,QAEZ,IAAI9nC,EAAI,EAAGM,EAAIwnC,EAAIpoC,OAAQM,EAAIM,IAAKN,EACvC8nC,EAAI9nC,GAAG8D,IAAIgkC,EAAI9nC,GAAGe,IAAIkJ,GAAIA,IAI9BkpB,IAAIlpB,SACIrH,EAAMT,KAAK0oC,QAAQ5gC,GACnBi8B,EAAO/jC,KAAK+jC,KAAKtjC,EAAKqH,MAC5Bi8B,EAAKE,KAAO,EACRjkC,KAAK+mC,WAAY,OACjBhD,EAAKC,OAAOD,EAAKvX,KAAKwE,IAAIlpB,SACxB69B,EAAM5B,EAAK4B,QAEZ,IAAI9nC,EAAI,EAAGM,EAAIwnC,EAAIpoC,OAAQM,EAAIM,IAAKN,EACvC8nC,EAAI9nC,GAAGmzB,IAAI2U,EAAI9nC,GAAGe,IAAIkJ,GAAIA,IAI9BkhC,UAAUjF,SACFxS,EAAQwS,EAAKxS,MACb0X,EAASjpC,KAAKgnC,QAEhBjD,EAAKC,OACPD,EAAKvX,KAAKxY,aAIP,IAAInW,EAAI,EAAGM,EAAI8qC,EAAO1rC,OAAQM,EAAIM,IAAKN,EAC1C0zB,EAAM0X,EAAOprC,IAAMkmC,EAAKE,QAGrBjkC,KAAK+mC,WAAY,OACdpB,EAAM5B,EAAK4B,QAEZ,IAAI9nC,EAAI,EAAGM,EAAIwnC,EAAIpoC,OAAQM,EAAIM,IAAKN,EACvC8nC,EAAI9nC,GAAGuJ,IAAImqB,UAIRA,GAGT+E,QAAQz1B,SACAqoC,EAAOlpC,KAAKsmC,MACZ6C,EAAOnpC,KAAKumC,MACZ18B,EAAO7J,KAAKinC,MACZY,EAAO7nC,KAAK0mC,MACZ/kC,EAAMd,EAAIc,IACVqvB,EAAMnwB,EAAImwB,IACVC,EAAMpwB,EAAIowB,QACZ8S,EAAMtjC,EAAK5C,EAAGM,KACd0L,EAAM,IAAKpJ,KAAOoJ,EACpBk6B,EAAOl6B,EAAKpJ,GACPonC,IAAQ9D,EAAKE,KAAKjT,EAAIvyB,KAAKslC,EAAKxS,WAGlC1zB,EAAI,EAAGM,EAAI6B,KAAKwmC,MAAO3oC,EAAIM,IAAKN,EACnC8D,EAAIlD,KAAKuB,KAAKgpC,UAAUE,EAAKrrC,KAC7BqrC,EAAKrrC,GAAK,SAGPA,EAAI,EAAGM,EAAI6B,KAAKymC,MAAO5oC,EAAIM,IAAKN,EACnCkmC,EAAOoF,EAAKtrC,IACE,IAAbkmC,EAAKE,KAAa4D,EAAO7W,EAAMC,GAAKxyB,KAAKuB,KAAKgpC,UAAUjF,IACzDoF,EAAKtrC,GAAK,iBAGP2oC,MAAQxmC,KAAKymC,MAAQ,OAErBQ,MAAQ,KACNpmC,KAcX,SAASuoC,GAAI/W,GACX4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAkI7B,SAASgX,GAAY1Z,EAAQ7uB,EAAQvB,SAC7BwL,EAAI4kB,MACNnD,EAAO1rB,GAAU,GACjBa,EAAMpC,GAAS,GACfyxB,EAAM,GACN6R,EAAM,QACH,CACLlhC,IAAKmG,GAAKnG,EAAIlD,KAAKqJ,GACnBgoB,OAAQhoB,GAAKkpB,EAAIjmB,EAAEjD,MAAQ+6B,EAC3B57B,KAAM,IAAMulB,EAAKjvB,OACjBivB,KAAM,CAACznB,EAASukC,KACVzG,IACFrW,EAAOA,EAAK7gB,QAAO7D,IAAMkpB,EAAIjmB,EAAEjD,MAC/BkpB,EAAM,GACN6R,EAAM,GAGJyG,GAAUvkC,GACZynB,EAAK7P,KAAK5X,GAGRpD,EAAIpE,SACNivB,EAAOznB,EAAUgF,GAAMhF,EAASynB,EAAM7qB,EAAIgb,KAAK5X,IAAYynB,EAAK/sB,OAAOkC,GACvEA,EAAM,IAGD6qB,IAab,SAAS+c,GAAQlX,GACf4G,GAAUt5B,KAAKK,KAAM,GAAIqyB,GAwC3B,SAASmX,GAAQnX,GACfF,GAASxyB,KAAKK,KAAM,KAAMypC,GAAUpX,GAItC,SAASoX,GAAS1qC,UACTiB,KAAKqB,QAAUtC,EAAEizB,WAAahyB,KAAKqB,MAAQ0D,EAAQhG,EAAE/B,OAAQ+B,EAAEiG,QAaxE,SAAS0kC,GAAarX,GACpB4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GA4I7B,SAASsX,GAAMtX,GACb4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAjX7B+W,GAAIhO,WAAa,MACP,eACI,WACE,UAEJ,CAAC,MACD,aACA,kBACI,GACX,MACO,gBACA,mBACG,GACV,MACO,cACA,UACP,MACO,eACA,iBACG,IACV,MACO,YACA,iBACG,IACV,MACO,cACA,gBACC,UACE,CAAC,EAAG,IACd,MACO,cACA,gBACC,SACC,YACE,GACX,MACO,YACA,UACP,MACO,YACA,UACP,MACO,aACA,gBACC,GACR,MACO,eACA,iBACG,GACV,MACO,YACA,mBACG,GACV,MACO,YACA,UACP,MACO,UACA,gBACC,SACC,UACC,CAAC,OAAQ,WAGxBpzB,GAASohC,GAAKnQ,GAAW,CACvB5pB,UAAUtQ,EAAG0yB,SACLmY,GAAsB,IAAf7qC,EAAE4Z,SACTkxB,EAAO7pC,KAAK8pC,MAAM/qC,GAClB6R,EAAQi5B,EAAKj5B,MACb0C,EAAOu2B,EAAKv2B,KACZqwB,EAAK5kC,EAAE4kC,IAAM,CAAC,OAAQ,QACtBoG,EAAKpG,EAAG,GACRqG,EAAKrG,EAAG,OAEV9Q,SAIFA,EAFE9zB,EAAEizB,YACJP,EAAQA,EAAML,QAAO,IACRwF,OAENnF,EAAMO,SAAS50B,EAAe2B,EAAErB,QAAU+zB,EAAMgF,QAAUhF,EAAM0E,IAGzE1E,EAAMoE,MAAMhD,EAAM+W,EAAO9hC,UACjBrC,EAAIokC,EAAK/hC,GAEfA,EAAEiiC,GAAMtkC,EAKRqC,EAAEkiC,GAAW,MAALvkC,EAAY,KAAOmL,EAAQ0C,GAAQ,GAAK7N,EAAImL,GAAS0C,IAC3DxL,GAAKA,EAAEiiC,GAAMF,EAAK/hC,IACf2pB,EAAMG,SAASgY,EAAOjG,EAAKoG,IAGpCD,MAAM/qC,MACAiB,KAAKqB,QAAUtC,EAAEizB,kBACZhyB,KAAKqB,YAGR3D,EAAQqB,EAAErB,MACVmsC,EAAOhpB,GAAI9hB,GACXuU,EAAOu2B,EAAKv2B,SAGd7R,EACAyQ,EAHAtB,EAAQi5B,EAAKj5B,MACbuC,EAAOvC,EAAQzO,KAAK2I,MAAM++B,EAAK12B,KAAOvC,GAAS0C,GAAQA,EAIrC,OAAjB7R,EAAI1C,EAAE2E,UACTwO,EAAIzQ,GAAKmP,EAAQ0C,EAAOnR,KAAKwR,OAAOlS,EAAImP,GAAS0C,IACjD1C,GAASsB,EACTiB,GAAQjB,SAGJ7M,EAAI,SAAUyC,OACdrC,EAAI1D,EAASrE,EAAMoK,WACX,MAALrC,EAAY,KAAOA,EAAImL,GAASsH,EAAAA,EAAWzS,EAAI0N,EAAQ+E,EAAAA,GAAYzS,EAAItD,KAAKuC,IAAIkM,EAAOzO,KAAKsC,IAAIgB,EAAG0N,EAAOG,IAAQ1C,EAAQ0C,EAAOnR,KAAKwR,MAjIjI,OAiIoJlO,EAAImL,GAAS0C,YAG/KjO,EAAEuL,MAAQA,EACVvL,EAAE8N,KAAO02B,EAAK12B,KACd9N,EAAEiO,KAAOA,EACFtT,KAAKqB,MAAQvE,EAASuI,EAAGjI,EAAeM,GAAQqB,EAAE9B,MAAQ,OAASE,EAAaO,UA+CnF09B,WAAa,MACX,mBACI,SACA,UAEF,CAAC,MACD,YACA,aAGZpzB,GAASuhC,GAAStQ,GAAW,CAC3B5pB,UAAUtQ,EAAG0yB,SACL5wB,EAAM4wB,EAAMsF,KAAKtF,EAAMiF,KACvB9G,EAAOyZ,GAAW9Y,GAASvwB,KAAKqB,MAAOR,EAAI+0B,YAAY/0B,EAAIs1B,KAAKx0B,KAChEgb,EAAO5d,EAAE4d,KACTsU,EAAMQ,EAAMyE,WAAavZ,IAAS5d,EAAEizB,SAAS,SAAWP,EAAMO,SAASrV,EAAK3f,gBAClF6D,EAAIg1B,MAAMh1B,EAAIu1B,IAAKxG,EAAKE,aACnBkC,SAASf,QACT5vB,MAAQR,EAAIC,OAAS8uB,EAAKpD,KAAKoE,GAAcjU,GAAOsU,GAErDQ,EAAM3wB,QAAU2wB,EAAM3wB,OAAOmpC,YAC1B5oC,MAAM4oC,KAAOxY,EAAM3wB,OAAOmpC,MAG1BppC,KAiBXmH,GAASwhC,GAASrX,IAmBlBuX,GAAatO,WAAa,MAChB,wBACI,YACG,WACF,UAEH,CAAC,MACD,aACA,kBACI,GACX,MACO,YACA,cACE,CAAC,QAAS,QAAS,iBAClB,SACV,MACO,eACA,iBACG,WACV,MACO,iBACA,iBACG,IACV,MACO,UACA,gBACC,SACC,UACC,CAAC,OAAQ,YAkBxBpzB,GAAS0hC,GAAczQ,GAAW,CAChC5pB,UAAUtQ,EAAG0yB,SACLyY,EAAUpgC,GAAUynB,YAEpBzpB,EADAqiC,EAjBV,SAAkBt8B,EAAMu8B,EAAO30B,UACrB20B,OACD,QACHv8B,EAAOA,EAAKwI,wBAGT,QACHxI,EAAOA,EAAK6J,qBAIT7J,EAAK4H,MAAMA,GAMD40B,CAASzrC,EAAI2yB,GAAQxyB,EAAEurC,KAAM70B,IAAU,GAG3C5X,EAAI,EAAGM,EAAIgsC,EAAO5sC,OAAQM,EAAIM,IAAKN,EACrCsV,EAAKpM,KAAKe,EAAIqiC,EAAOtsC,KAAKiM,EAAOhC,IAIpCsqB,EAAOpyB,KAAKuqC,gBAAgBxrC,EAAG0yB,GAC/BwX,EAASjpC,KAAKgnC,QACdvxB,EAAQzV,KAAKwqC,OACbr3B,EAAOnT,KAAKyqC,MACZ7rC,EAAMG,EAAErB,MACRimC,EAAK5kC,EAAE4kC,IAAM,CAAC,OAAQ,SACtBhiC,EAAMuoC,GAAQpiC,GAAKmhC,EAAOnhC,GAAK,GAAKmhC,EAAOnhC,IAAM,KACjDkpB,EAAMkZ,GAAQpiC,GAAKmhC,EAAOnhC,IAAM,WAElCsqB,EACFX,EAAMoE,MAAMpE,EAAMmF,OAAQj1B,IAE1B8vB,EAAMoE,MAAMpE,EAAM0E,IAAKx0B,GACvB8vB,EAAMoE,MAAMpE,EAAM2E,IAAKpF,IAGlBhxB,KAAK0qC,QAAQjZ,EAAOkS,IAG7B4G,gBAAgBxrC,EAAG0yB,OACbW,GAAO,SAEPrzB,EAAEizB,SAAS,cAAiBhyB,KAAKyqC,aAC9BA,MAAQ,IAAIh9B,OAAO,KAAO1O,EAAE4rC,WAAa,IAAM,IAAK,KACzDvY,GAAO,IAGLrzB,EAAEizB,SAAS,YAAehyB,KAAKwqC,cAC5BA,OAAS,IAAI/8B,OAAO1O,EAAEuwB,SAAW,UAAY,KAClD8C,GAAO,IAGLrzB,EAAEizB,SAAS,UAAYP,EAAMO,SAASjzB,EAAErB,MAAMV,WAChDo1B,GAAO,GAGLA,IAAMpyB,KAAKgnC,QAAU,IAClB5U,GAGTsY,QAAQjZ,EAAOkS,SACPsF,EAASjpC,KAAKgnC,QACdtV,EAAS1xB,KAAK4qC,UAAY5qC,KAAK4qC,QAAU,IACzC/8B,EAAO81B,EAAG,GACVvwB,EAAQuwB,EAAG,GACX9iC,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,UAAYpF,EAAMqF,eAC3ClY,EAAG9W,EAAGzJ,MAELugB,KAAKqqB,EACRnhC,EAAI4pB,EAAO9S,GACXvgB,EAAI4qC,EAAOrqB,IAAM,GAEZ9W,GAAKzJ,GACRqzB,EAAO9S,GAAK9W,EAAI2xB,GAAO,IACvB3xB,EAAE+F,GAAQ+Q,EACV9W,EAAEsL,GAAS/U,EACXwC,EAAIc,IAAIlD,KAAKqJ,IACE,IAANzJ,GACLyJ,GAAGjH,EAAImwB,IAAIvyB,KAAKqJ,GACpBmhC,EAAOrqB,GAAK,KACZ8S,EAAO9S,GAAK,MACH9W,EAAEsL,KAAW/U,IACtByJ,EAAEsL,GAAS/U,EACXwC,EAAIowB,IAAIxyB,KAAKqJ,WAIVjH,EAAI+wB,SAAS+R,MAiBxBgG,GAAMvO,WAAa,MACT,iBACI,YACG,UAEL,CAAC,MACD,cACA,QACP,MACO,UACA,gBACC,SACC,UACC,CAAC,IAAK,QAGrBpzB,GAAS2hC,GAAO1Q,GAAW,CACzB5pB,UAAUtQ,EAAG0yB,SACL5wB,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,WACvB8M,EAAK5kC,EAAE4kC,IAAM,CAAC,IAAK,KACnBliC,EAAIkiC,EAAG,GACPplC,EAAIolC,EAAG,GACPuC,GAASlmC,KAAKqB,OAASowB,EAAMyE,QAAQzE,EAAM+E,UAAYz3B,EAAEizB,SAAS,OAASjzB,EAAEizB,SAAS,cAExFxF,EAAOxsB,KAAKqB,aAEZ6kC,GACE1Z,IAAM3rB,EAAImwB,IAAMxE,GACpBA,EAAOiF,EAAMmE,YAAYnE,EAAMmF,QAAQ91B,OACvCD,EAAIc,IAAM3B,KAAKqB,MAWrB,SAAe9B,EAAOkC,EAAGlD,EAAGoN,WAKtBvN,EACAuJ,EALA6kB,EAAO,GACP1kB,EAAI,GACJ3J,EAAIoB,EAAMhC,OACVM,EAAI,EAIDA,EAAIM,IAAKN,MACdiK,EAAErG,GAAKkG,EAAOpI,EAAM1B,GAEfO,EAAI,EAAGA,EAAID,IAAKC,EACnB0J,EAAEvJ,GAAKgB,EAAMnB,GAETuN,EAAO7D,KACT0kB,EAAK/tB,KAAKg7B,GAAO3xB,KACjBA,EAAI,IACFrG,GAAKkG,UAKN6kB,EAjCoBsb,CAAMtb,EAAM/qB,EAAGlD,EAAGQ,EAAE4M,QAAUzM,IAErD2B,EAAIowB,IAAMzE,EAGZ3rB,EAAIC,OAASd,KAAKqB,MACXR,EAAI+wB,SAAS+R,MA8BxB,MAAMkH,GAAgB,CACpB7M,IAAK8M,GACLrM,QAASsM,GACTC,OAAQC,GACRzM,UAAW0M,GACXhM,QAASiM,IAGLC,GAAW,WAcjB,SAAShgC,GAAMigC,EAAK7e,SACZ8I,EAAO+V,EAAG,SAEX5kC,GAAeokC,GAAevV,IACjCx3B,EAAM,kCAAoCw3B,SAGtCpjB,EAAI24B,GAAcvV,SAEnB,MAAMr4B,KAAQouC,EAtBP,UAwBNpuC,EACFiV,EAAEsa,MAAM6e,EAAI52B,MAAQ+X,KAAQ9qB,IAAI2pC,EAAIpuC,KA3BpB,kBA6BTA,EACLiV,EAAEjV,GAAMouC,EAAIpuC,GAAMyE,KAAI3C,GAAKqM,GAAMrM,EAAGytB,aAEtBta,EAAEjV,KAAUmuC,IACxBl5B,EAAEjV,GAAMouC,EAAIpuC,WAIbiV,EA4BT,SAASo5B,GAAQjZ,GACf4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAE7B,MAAMwM,GAAgB,CAAC,KACd,UACO,iBAEJ,CAAC,MACD,YACA,iBACG,GACV,MACO,aACA,iBACG,KAEZ,KACM,UACO,oBAEJ,CAAC,MACD,YACA,iBACG,GACV,MACO,aACA,iBACG,KAEZ,KACM,UACO,kBAEJ,CAAC,MACD,WACA,iBACG,GACV,MACO,WACA,iBACG,KAEZ,KACM,UACO,cAEJ,CAAC,MACD,aACA,kBACI,GACX,MACO,YACA,QACP,MACO,iBACA,iBACG,MAGTJ,GAAU,KACP,UACO,kBAEJ,CAAC,MACD,qBACA,eACC,SACCI,IACT,MACO,eACA,gBACC,KAgFb,SAAS0M,GAAWvuC,EAAQ2mC,UACrB3mC,EACEA,EAAO0E,KAAI,CAAC2D,EAAGxH,IAAM8lC,EAAG9lC,IAAMV,EAAakI,KAD9B,KAGtB,SAASmmC,GAAYhf,EAAMgc,EAAS9qC,SAC5B+tC,EAAS,GACT7sC,EAAMyG,GAAKA,EAAEyC,OAEfpG,EAAK7D,EAAGM,EAAG2J,EAAGvG,EAAGuP,KAEN,MAAX03B,EACFiD,EAAOhtC,KAAK+tB,EAAK9qB,IAAIhE,aAEhBgE,EAAM,GAAI7D,EAAI,EAAGM,EAAIquB,EAAKjvB,OAAQM,EAAIM,IAAKN,EAC9CiK,EAAI0kB,EAAK3uB,GACT0D,EAAIinC,EAAQ9mC,IAAI9C,GAChBkS,EAAIpP,EAAIH,GAEHuP,IACHpP,EAAIH,GAAKuP,EAAI,GACbA,EAAEi3B,KAAOxmC,EACTkqC,EAAOhtC,KAAKqS,IAGdA,EAAErS,KAAKf,EAAMoK,WAIV2jC,EAzGTH,GAAQlQ,WAAa,MACX,mBACI,YACG,UAEL,CAAC,MACD,cACA,gBACC,SACC,GACT,MACO,aACA,UACP,MACO,gBACA,iBACG,IACV,MACO,gBACA,iBACG,KACV,MACO,cACA,iBACG,aACD,CAAC,MAAO,QACjB,MACO,oBACA,eACEyD,GAAcp/B,OAAOg/B,KAC9B,MACO,UACA,gBACC,UACE,CAAC,QAAS,cAGzBz2B,GAASsjC,GAASrS,GAAW,CAC3B5pB,UAAUtQ,EAAG0yB,SACL5wB,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,UAAYpF,EAAMqF,eAE1C92B,KAAKqB,OAASowB,EAAMyE,WAAan3B,EAAEizB,WAAY,OAC5C2L,EAAOvyB,GAAMrM,EAAE2sC,aA+B3B,SAAgBja,SACP,IAAMA,EAAMmE,YAAYnE,EAAMmF,QAAQ91B,OAhCNA,CAAO2wB,IACpCka,EAAW5sC,EAAEk9B,OAASl9B,EAAE4sC,UAAY,GACpCC,EAAW7sC,EAAEk9B,OAASl9B,EAAE6sC,UAAY,QACtCvsC,EAASN,EAAEM,QAAU,MAEV,QAAXA,GAA+B,QAAXA,GACtBvB,EAAM,2BAA6BuB,GAGhCN,EAAEsH,QAAWs3B,EAAKnR,MACrB1uB,EAAM,qCAGRuB,EAASs+B,EAAKt+B,SACRskC,EAAK5kC,EAAE4kC,IAAM,CAAC,QAAS,WAEvB3vB,EAAS+uB,GAAY1jC,EADZN,EAAEsH,QAAUA,GAAOs3B,EAAKnR,QACImf,EAAUC,GAAUlqC,KAAI+D,UAC3D8rB,EAAQ,UACdA,EAAMoS,EAAG,IAAMl+B,EAAE,GACjB8rB,EAAMoS,EAAG,IAAMl+B,EAAE,GACVg0B,GAAOlI,MAEZvxB,KAAKqB,QAAOR,EAAImwB,IAAMhxB,KAAKqB,YAC1BA,MAAQR,EAAIc,IAAMd,EAAIC,OAASkT,SAG/BnT,KAuDX,SAASgrC,GAAOxZ,GACd4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAE7BwZ,GAAOzQ,WAAa,MACV,kBACI,WACE,UAEJ,CAAC,MACD,aACA,kBACI,GACX,MACO,eACA,eACC,GACR,MACO,YACA,UACP,MACO,cACA,mBACG,GACV,MACO,UACA,iBAxCG,SAkGf,SAAS0Q,GAAWzZ,GAClBF,GAASxyB,KAAKK,KAAM,KAAM+rC,GAAU1Z,QAC/BL,UAAS,GAIhB,SAAS+Z,GAAShtC,SACVitC,EAAOjtC,EAAEitC,YACRhsC,KAAKqB,QAAUtC,EAAEizB,SAAS,QAAUhyB,KAAKqB,MAAQvE,GAASqyB,GAAS6c,EAAK7c,EAAOpwB,IAAI3B,EAAe4uC,GAAO7uC,EAAa6uC,IAU/H,SAASC,GAAO5Z,GACd4G,GAAUt5B,KAAKK,KAAM,MAACmH,OAAWA,GAAYkrB,GAuD/C,SAAS6Z,GAAQza,EAAOvpB,GACtBiqB,GAASxyB,KAAKK,KAAMyxB,QACfvpB,OAASA,OACTkL,MAAQ,EAqEf,SAAS+4B,GAAM9Z,GACb4G,GAAUt5B,KAAKK,KAAM,GAAIqyB,QACpB+Z,MAAQtlC,WAIPrF,EAAIzB,KAAKizB,SAAW,GAC1BxxB,EAAE0zB,OAAS,EAEX1zB,EAAEG,QAAUyD,QACL,IAAIxH,EAAI,EAAGM,EAAIsD,EAAE0zB,OAAQt3B,EAAIM,IAAKN,EACrCwH,EAAE5D,EAAE5D,GAAIA,EAAG4D,IAyJjB,SAAS4qC,GAAMha,GACbF,GAASxyB,KAAKK,KAAM,KAAMssC,GAAUja,GAItC,SAASia,GAASvtC,UACTiB,KAAKqB,QAAUtC,EAAEizB,WAAahyB,KAAKqB,MAAQjB,EAAQrB,EAAE9B,MAAQ6E,EAAM/C,EAAE9B,MAAMyE,KAAI2D,GAAK3H,EAAM2H,KAAM3H,EAAMqB,EAAE9B,KAAM8B,EAAE4kC,IAWzH,SAAS4I,GAAOla,GACd4G,GAAUt5B,KAAKK,KAAM8G,KAAWurB,GA4ElC,SAASma,GAAQna,GACf4G,GAAUt5B,KAAKK,KAAM,GAAIqyB,GAuE3B,SAASoa,GAAKpa,GACZ4G,GAAUt5B,KAAKK,KAAM,GAAIqyB,GAsD3B,SAASqa,GAAQra,GACf4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAoD7B,SAASsa,GAASta,GAChB4G,GAAUt5B,KAAKK,KAAM,GAAIqyB,GA5nB3BrqB,GAAS6jC,GAAQ5S,GAAW,CAC1B5pB,UAAUtQ,EAAG0yB,MACPzxB,KAAKqB,QAAWtC,EAAEizB,aAAcP,EAAMyE,iBACjCzE,QAGH3wB,EAAS2wB,EAAMmE,YAAYnE,EAAMmF,QAAQ91B,OACzC2qC,EAASD,GAAY/Z,EAAM3wB,OAAQ/B,EAAEypC,QAAS1pC,GAC9C49B,EAAS39B,EAAE29B,SAAU,EACrBh/B,EAAQqB,EAAErB,MACV4V,EAAOvU,EAAEuU,MAZF,EAACkZ,EAAM9uB,IAAUiH,GAAK0B,GAAOmmB,EAAM9uB,IAAU,GAYnCkvC,CAAS9rC,EAAQpD,GAClCif,EAAOiU,IAAc,CAACnvB,EAAGlD,IAAMb,EAAM+D,GAAK/D,EAAMa,KAChDolC,EAAK5kC,EAAE4kC,IA3DF,MA4DLxlC,EAAIstC,EAAOluC,WAKba,EAHAqG,EAAMyT,EAAAA,EACNxT,GAAOwT,EAAAA,EACPra,EAAI,OAGDA,EAAIM,IAAKN,EAAG,OACXiT,EAAI26B,EAAO5tC,GAAG8e,KAAKA,GACzBve,GAAK,MAEA,MAAMqH,KAAKg3B,GAAO3rB,EAAGwC,EAAMopB,EAAQh/B,GAClC+H,EAAIhB,IAAKA,EAAMgB,GACfA,EAAIf,IAAKA,EAAMe,GACnBqL,IAAI1S,GAAGulC,GAAMl+B,cAIZpE,MAAQ,CACXuP,MAAOnM,EACP0O,KAAMzO,EACN4O,KAAMA,GAEDme,EAAML,QAAO,GAAMQ,SAAS+R,MAmBvC37B,GAAS8jC,GAAY3Z,IAiBrB8Z,GAAO7Q,WAAa,MACV,kBACI,UACF,CAAC,MACD,aACA,kBACI,KAGhBpzB,GAASikC,GAAQhT,GAAW,CAC1B5pB,UAAUtQ,EAAG0yB,SACLprB,EAASrG,KAAKqB,MACd3D,EAAQqB,EAAErB,MACVuzB,EAAMQ,EAAMyE,WAAazE,EAAMO,SAASt0B,EAAMV,SAAW+B,EAAEizB,SAAS,aAEtEvtB,EAAM4B,EAAO,GACb3B,EAAM2B,EAAO,OAEb4qB,GAAc,MAAPxsB,KACTA,EAAOyT,EAAAA,EACPxT,GAAOwT,EAAAA,GAGTuZ,EAAMoE,MAAM5E,EAAMQ,EAAMmF,OAASnF,EAAM0E,KAAKruB,UACpCrC,EAAI1D,EAASrE,EAAMoK,IAEhB,MAALrC,IAEEA,EAAIhB,IAAKA,EAAMgB,GACfA,EAAIf,IAAKA,EAAMe,QAIlBmR,OAAOpD,SAAS/O,KAASmS,OAAOpD,SAAS9O,GAAM,KAC9CzH,EAAOE,EAAaO,GACpBT,IAAMA,EAAQ,eAAcA,MAChCw0B,EAAMwD,SAASh1B,KAAM,kBAAiBhD,OAAUwH,MAAQC,MACxDD,EAAMC,OAAMyC,OAGT9F,MAAQ,CAACoD,EAAKC,MAkBvBsD,GAASkkC,GAAS/Z,GAAU,CAK1BuD,QAAQ1U,eACD6rB,cAAgB7rB,EAAO6rB,mBACvB7Z,UAAUrxB,IAAIqf,GACZA,EAAOlgB,OAASd,MAOzB2B,IAAImG,QACGsL,OAAS,OACT/R,MAAMM,IAAIlD,KAAKqJ,IAOtBkpB,IAAIlpB,QACGsL,OAAS,OACT/R,MAAM2vB,IAAIvyB,KAAKqJ,IAOtBmpB,IAAInpB,QACGzG,MAAM4vB,IAAIxyB,KAAKqJ,IAQtBsqB,KAAKX,QACEpwB,MAAM+wB,KAAKX,EAAOA,EAAMoF,YAQ/BhD,kBAES7zB,KAAKqB,SA6BhB2G,GAASmkC,GAAOlT,GAAW,CACzB6T,SAASC,QACF9Z,SAASjzB,KAAKizB,SAASkC,UAAY4X,GAI1CC,QAAQvsC,EAAKssC,EAAMtb,EAAOvpB,SAClB+kC,EAAQjtC,KAAKqB,UAEf4uB,EACA/xB,EAFAgvC,EAAKzmC,GAAewmC,EAAOxsC,IAAQwsC,EAAMxsC,UAIxCysC,EAOMA,EAAG7rC,MAAMkxB,MAAQd,EAAMc,QAChC2a,EAAG9a,KAAKX,QACHqb,SAASI,KARdhvC,EAAIgK,IAAWhK,EAAI8B,KAAKmtC,OAAO1sC,KAASvC,EAAEqzB,MAC1CtB,EAAKwB,EAAMwD,SACXiY,EAAK,IAAIhB,GAAQza,EAAMsF,KAAKtF,EAAMoF,WAAY72B,MAC9CiwB,EAAGtuB,IAAIurC,GAAIxX,QAAQqX,EAAK9c,EAAIxvB,EAAKvC,IACjC+uC,EAAMxsC,GAAOysC,OACRJ,SAASI,IAMTA,GAGT3lC,cACQ0lC,EAAQjtC,KAAKqB,UACf+rC,EAAW,MAEV,MAAM3sC,KAAOwsC,KACS,IAArBA,EAAMxsC,GAAK2S,MAAa,OACpBwgB,EAASqZ,EAAMxsC,GAAKosC,cACtBjZ,GAAQA,WACLqZ,EAAMxsC,KACX2sC,KAKFA,EAAU,OACNjY,EAASn1B,KAAKizB,SAAStnB,QAAOuhC,GAAMA,GAAMA,EAAG95B,MAAQ,SAEtDi6B,YAAYlY,KAIrBkY,YAAYC,SACJ7rC,EAAIzB,KAAKizB,SACT90B,EAAIsD,EAAElE,OACN6W,EAAIk5B,EAAMA,EAAI/vC,OAAS,MACzBM,EAAI,OAEDA,EAAIuW,IAAKvW,EACd4D,EAAE5D,GAAKyvC,EAAIzvC,QAGNA,EAAIM,GAAa,MAARsD,EAAE5D,KAAcA,EAC9B4D,EAAE5D,GAAK,KAGT4D,EAAE0zB,OAAS/gB,GAGb/E,UAAUtQ,EAAG0yB,SACLxB,EAAKwB,EAAMwD,SACXx0B,EAAM1B,EAAE0B,IACRssC,EAAOhuC,EAAEiuC,QACTzkB,EAAQvoB,KAAKosC,MACbmB,EAAQxuC,EAAEizB,SAAS,OACnBgb,EAAUvsC,GAAOT,KAAKgtC,QAAQvsC,EAAKssC,EAAMtb,eAE1C0b,OAASpuC,EAAE4X,OAAS,QACpB02B,cAEL5b,EAAMoE,MAAMpE,EAAM2E,KAAKtuB,UACfjJ,EAAK0xB,GAAQzoB,GACbvG,EAAIgnB,EAAM3pB,IAAIC,QAEVsI,IAAN5F,IACFgnB,EAAMlhB,OAAOxI,GACbmuC,EAAQzrC,GAAGyvB,IAAIlpB,OAGnB2pB,EAAMoE,MAAMpE,EAAM0E,KAAKruB,UACfvG,EAAId,EAAIqH,GACdygB,EAAMnhB,IAAImpB,GAAQzoB,GAAIvG,GACtByrC,EAAQzrC,GAAGI,IAAImG,MAGbylC,GAAS9b,EAAMO,SAASvxB,EAAIzD,QAC9By0B,EAAMoE,MAAMpE,EAAM4E,KAAKvuB,UACfjJ,EAAK0xB,GAAQzoB,GACb0lC,EAAKjlB,EAAM3pB,IAAIC,GACf4uC,EAAKhtC,EAAIqH,GAEX0lC,IAAOC,EACTT,EAAQS,GAAIxc,IAAInpB,IAEhBygB,EAAMnhB,IAAIvI,EAAI4uC,GACdT,EAAQQ,GAAIxc,IAAIlpB,GAChBklC,EAAQS,GAAI9rC,IAAImG,OAGX2pB,EAAMyE,QAAQzE,EAAM4E,MAC7B5E,EAAMoE,MAAMpE,EAAM4E,KAAKvuB,IACrBklC,EAAQzkB,EAAM3pB,IAAI2xB,GAAQzoB,KAAKmpB,IAAInpB,MAInCylC,GACF9b,EAAMoE,MAAMpE,EAAMkF,QAAQ7uB,UAClBjJ,EAAK0xB,GAAQzoB,GACb0lC,EAAKjlB,EAAM3pB,IAAIC,GACf4uC,EAAKhtC,EAAIqH,GAEX0lC,IAAOC,IACTllB,EAAMnhB,IAAIvI,EAAI4uC,GACdT,EAAQQ,GAAIxc,IAAIlpB,GAChBklC,EAAQS,GAAI9rC,IAAImG,OAKlB2pB,EAAMlqB,QACR0oB,EAAGuH,UAAS,UACLjwB,QACLghB,EAAMhhB,WAECghB,EAAMrhB,MAAQ+oB,EAAGiJ,gBAC1BjJ,EAAGuH,SAASjP,EAAMhhB,OAGbkqB,KAkBXzpB,GAASqkC,GAAOla,IAiBhBoa,GAAOnR,WAAa,MACV,kBACI,UACC,UAEH,CAAC,MACD,YACA,iBACI,KAGhBpzB,GAASukC,GAAQtT,GAAW,CAC1B5pB,UAAUtQ,EAAG0yB,SACLxB,EAAKwB,EAAMwD,SACX1M,EAAQvoB,KAAKqB,MAEnBD,EAASqwB,EAAMsF,OACTp1B,EAAMP,EAAOO,IACbqvB,EAAM5vB,EAAO4vB,IACbC,EAAM7vB,EAAO6vB,IACblqB,EAAOhI,EAAEitC,SACX0B,GAAQ,WASHC,EAAQ7lC,SACTjJ,EAAK0xB,GAAQzoB,GACbvJ,EAAIwI,EAAKe,EAAG/I,GACZP,EAAI+pB,EAAM3pB,IAAIC,GAEhBN,GAAKC,GACP+pB,EAAMlhB,OAAOxI,GACb8C,EAAIlD,KAAKqJ,IACCvJ,GAAMC,EAGPkvC,GAASnvC,IAAMC,GACxByyB,EAAIxyB,KAAKqJ,IAHTygB,EAAMnhB,IAAIvI,EAAI,GACdmyB,EAAIvyB,KAAKqJ,WAlBb2pB,EAAMoE,MAAMpE,EAAM2E,KAAKtuB,UACfjJ,EAAK0xB,GAAQzoB,GACdygB,EAAM7hB,IAAI7H,GAAsB0pB,EAAMlhB,OAAOxI,GAA9BmyB,EAAIvyB,KAAKqJ,MAE/B2pB,EAAMoE,MAAMpE,EAAM0E,KAAKruB,IACjBf,EAAKe,EAAG/I,GAAI4C,EAAIlD,KAAKqJ,GAAQygB,EAAMnhB,IAAImpB,GAAQzoB,GAAI,MAmBzD2pB,EAAMoE,MAAMpE,EAAM4E,IAAKsX,GAEnB5uC,EAAEizB,aACJ0b,GAAQ,EACRjc,EAAMoE,MAAMpE,EAAMkF,OAAQgX,IAGxBplB,EAAMrhB,MAAQ+oB,EAAGiJ,gBAAgBjJ,EAAGuH,SAASjP,EAAMhhB,OAChDnG,KAuBXorC,GAAQpR,WAAa,MACX,mBACI,YACG,UAEL,CAAC,MACD,cACA,eACC,YACG,GACX,MACO,aACA,UACP,MACO,UACA,gBACC,KAGbpzB,GAASwkC,GAASvT,GAAW,CAC3B5pB,UAAUtQ,EAAG0yB,SACL5wB,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,WACvB75B,EAAS+B,EAAE/B,OACX2mC,EAAK4H,GAAWvuC,EAAQ+B,EAAE4kC,IAAM,IAChCzvB,EAAQnV,EAAEmV,OAAS,KACnBE,EAAIuvB,EAAGpmC,cAEbsD,EAAImwB,IAAMhxB,KAAKqB,MAEfowB,EAAMoE,MAAMpE,EAAMmF,QAAQ9uB,UAClBgN,EAAS9X,EAAO0E,KAAI2D,GAAKA,EAAEyC,KAC3B8lC,EAAS94B,EAAOlU,QAAO,CAACmH,EAAGtG,IAAMU,KAAKuC,IAAIqD,EAAGtG,EAAElE,SAAS,OAE1Da,EACA8T,EACAzM,EAHA5H,EAAI,OAKDA,EAAI+vC,IAAU/vC,EAAG,KACtBqU,EAAIwe,GAAO5oB,GAEN1J,EAAI,EAAGA,EAAIgW,IAAKhW,EACnB8T,EAAEyxB,EAAGvlC,IAA4B,OAArBqH,EAAIqP,EAAO1W,GAAGP,IAAc,KAAO4H,EAG7CyO,IACFhC,EAAEgC,GAASrW,GAGbgD,EAAIc,IAAIlD,KAAKyT,YAGZ7Q,MAAQR,EAAIC,OAASD,EAAIc,IAC1BuS,GAAOrT,EAAI+wB,SAAS1d,GACjBrT,EAAI+wB,SAAS+R,MAmBxB8I,GAAKrR,WAAa,MACR,gBACI,YACG,UAEL,CAAC,MACD,cACA,eACC,YACG,GACX,MACO,UACA,gBACC,SACC,UACC,CAAC,MAAO,YAGvBpzB,GAASykC,GAAMxT,GAAW,CACxB5pB,UAAUtQ,EAAG0yB,SACL5wB,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,WACvB75B,EAAS+B,EAAE/B,OACX6wC,EAAS7wC,EAAO0E,IAAIvE,GACpBwmC,EAAK5kC,EAAE4kC,IAAM,CAAC,MAAO,SACrBpiC,EAAIoiC,EAAG,GACPl+B,EAAIk+B,EAAG,GACPxlC,EAAInB,EAAOO,cACjBsD,EAAImwB,IAAMhxB,KAAKqB,MACfowB,EAAMoE,MAAMpE,EAAMmF,QAAQ9uB,QACnB,IAAWoK,EAAPrU,EAAI,EAAMA,EAAIM,IAAKN,EAC1BqU,EAAIwe,GAAO5oB,GACXoK,EAAE3Q,GAAKssC,EAAOhwC,GACdqU,EAAEzM,GAAKzI,EAAOa,GAAGiK,GACjBjH,EAAIc,IAAIlD,KAAKyT,WAGZ7Q,MAAQR,EAAIC,OAASD,EAAIc,IACvBd,EAAI+wB,SAAS+R,MAkBxB+I,GAAQtR,WAAa,MACX,mBACI,WACE,UAEJ,CAAC,MACD,YACA,iBACI,GACX,MACO,UACA,mBACI,GACX,MACO,gBACA,aAGZpzB,GAAS0kC,GAASzT,GAAW,CAC3B5pB,UAAUtQ,EAAG0yB,SACL6D,EAAOv2B,EAAEitC,KACTrI,EAAK5kC,EAAE4kC,GACP1S,EAAMlyB,EAAEizB,WACRa,EAAO9zB,EAAEo0B,SAAW1B,EAAM0E,IAAMlF,EAAMQ,EAAMmF,OAASnF,EAAMO,SAASsD,EAAKt4B,SAAWy0B,EAAMO,SAAS2R,GAAMlS,EAAMgF,QAAUhF,EAAM0E,WAEjIlF,IAEFQ,EAAQA,EAAMmE,cAAcxE,QAAO,IAGhCryB,EAAEo0B,UACL1B,EAAMG,SAAS+R,GAGVlS,EAAMoE,MAAMhD,GAAM/qB,GAAKA,EAAE67B,GAAMrO,EAAKxtB,EAAG/I,QAmBlDiJ,GAAS2kC,GAAU1T,GAAW,CAC5B5pB,UAAUtQ,EAAG0yB,SACL5wB,EAAM4wB,EAAMsF,KAAKtF,EAAMiF,KACvBvxB,EAAMpG,EAAE+uC,cAGVnsC,EACAqvB,EACAlpB,EAJA0kB,EAAOxsB,KAAKqB,MACZ4iC,EAAMllC,EAAEkI,KAAOulB,EAAKjvB,UAKpB0mC,EAAM,EAAG,KAENtiC,EAAM,KAAMsiC,GAAO,GACtBtiC,EAAIlD,KAAKqJ,EAAI2xB,GAAOt0B,EAAIpG,KACxBytB,EAAK/tB,KAAKqJ,GAGZjH,EAAIc,IAAMd,EAAIc,IAAIpE,OAASsD,EAAI+0B,YAAY/0B,EAAIs1B,KAAKx0B,IAAIlC,OAAOkC,GAAOA,OAGtEqvB,EAAMxE,EAAK9sB,MAAM,GAAIukC,GACrBpjC,EAAImwB,IAAMnwB,EAAImwB,IAAIzzB,OAASsD,EAAI+0B,YAAY/0B,EAAIu1B,KAAKpF,IAAIvxB,OAAOuxB,GAAOA,EACtExE,EAAOA,EAAK9sB,OAAOukC,UAGrBpjC,EAAIC,OAASd,KAAKqB,MAAQmrB,EACnB3rB,KAKX,MAAMktC,GAAU,CACd1sC,MAAO,QACPshC,OAAQA,GACRnH,KChrEa,SAAcxnB,EAAQC,OAC/Bb,EAAQ,EACR4B,EAAM,UACM7N,IAAZ8M,MACG,IAAI5S,KAAS2S,EACH,MAAT3S,IAAkBA,GAASA,IAAUA,MACrC+R,EAAO4B,GAAO3T,OAGf,KACD6S,GAAS,MACR,IAAI7S,KAAS2S,EACiC,OAA5C3S,EAAQ4S,EAAQ5S,IAAS6S,EAAOF,MAAqB3S,GAASA,IAAUA,MACzE+R,EAAO4B,GAAO3T,MAIlB+R,EAAO,OAAO4B,EAAM5B,GDgqExB3O,IAAKA,GACLC,IAAKA,IAEDspC,GAAQ,GAqBd,SAASC,GAAO5b,GACd4G,GAAUt5B,KAAKK,KAAM,GAAIqyB,GAkJ3B,SAAS6b,GAAc7b,GACrBgU,GAAU1mC,KAAKK,KAAMqyB,GA4GvB,SAAS8b,GAAI9b,GACX4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAmH7B,SAAS+b,GAAI/b,GACXF,GAASxyB,KAAKK,KAAM,KAAMquC,GAAUhc,GAItC,SAASgc,GAAStvC,UACTiB,KAAKqB,QAAUtC,EAAEizB,WAAahyB,KAAKqB,MAAQZ,GAAI1B,EAAE/B,OAAQ+B,EAAEuK,MAYpE,SAASglC,GAAKjc,GACZ4G,GAAUt5B,KAAKK,KAAM,GAAIqyB,QACpBuH,SAAW,KAqClB,SAASx4B,GAAOqyB,EAAIhC,EAAOjF,GACzBA,EAAK5qB,QAAQ63B,UACP54B,EAAM4wB,EAAMsF,KAAKtF,EAAMqF,UAAYrF,EAAMoF,kBAC/Ch2B,EAAImwB,IAAMyC,EAAGpyB,MACboyB,EAAGpyB,MAAQR,EAAIC,OAASD,EAAIc,IAAM6qB,EAClCiH,EAAGmG,SAAW,KACV/4B,EAAImwB,IAAIzzB,QAAQsD,EAAI0G,OAAM,GACvB1G,EAaT,SAAS0tC,GAAOlc,GACd4G,GAAUt5B,KAAKK,KAAM,GAAIqyB,GAyG3B,SAASmc,GAAYnc,GACnBF,GAASxyB,KAAKK,KAAM,KAAMyuC,GAAUpc,GAItC,SAASoc,GAAS1vC,MACZiB,KAAKqB,QAAUtC,EAAEizB,kBACZhyB,KAAKqB,YAGRyf,EAAM/hB,EAAE2vC,QACRvwC,EAAI2iB,EAAIvjB,WAGVM,EACAoI,EAHAxB,EAAOyT,EAAAA,EACPxT,GAAOwT,EAAAA,MAINra,EAAI,EAAGA,EAAIM,IAAKN,EACnBoI,EAAI6a,EAAIjjB,GACJoI,EAAE,GAAKxB,IAAKA,EAAMwB,EAAE,IACpBA,EAAE,GAAKvB,IAAKA,EAAMuB,EAAE,UAGnB,CAACxB,EAAKC,GAUf,SAASiqC,GAAYtc,GACnBF,GAASxyB,KAAKK,KAAM,KAAM8J,GAAQuoB,GAIpC,SAASvoB,GAAO/K,UACPiB,KAAKqB,QAAUtC,EAAEizB,WAAahyB,KAAKqB,MAAQtC,EAAEiV,OAAOpT,QAAO,CAAC4rB,EAAMztB,IAAMytB,EAAK/sB,OAAOV,IAAI,IAUjG,SAAS6vC,GAAOvc,GACd4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GA4B7B,SAASwc,GAAMxc,GACbgU,GAAU1mC,KAAKK,KAAMqyB,GAgGvB,SAASyc,GAASzc,GAChB8Z,GAAMxsC,KAAKK,KAAMqyB,GAuDnB,SAAS0c,GAAQ1c,GACf4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAoE7B,SAAS2c,GAAM3c,GACb4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GA2B7B,SAAS4c,GAAS5c,GAChB4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAj3B7B4b,GAAO7S,WAAa,MACV,kBACI,UACC,UAEH,CAAC,MACD,aACA,kBACI,GACX,MACO,WACA,kBACI,GACX,MACO,iBACC,GACR,MACO,eACA,eACC,GACR,MACO,cACA,eACG,eACD,CAAC,QAAS,OAAQ,SAAU,MAAO,QAC5C,MACO,gBACG,KAuBfpzB,GAASimC,GAAQhV,GAAW,CAC1B5pB,UAAUtQ,EAAG0yB,OAWP9a,EACAtV,EACA6tC,EACAC,EACAr+B,EACAjT,EACAO,EACA2J,EACA5J,EACA2J,EAnBAjH,EAAM4wB,EAAMsF,KAAKtF,EAAMiF,KACvB0Y,EAtBR,SAAkBrwC,OAEZ0G,EADA2O,EAAIrV,EAAEM,QAAU0uC,GAAQ1sC,SAGV,MAAd0sC,GAAQ35B,GAEL,OAAIA,IAAM25B,GAAQ1sC,OACvBoE,OAAgB0B,IAAZpI,EAAEsC,MAAsBtC,EAAEsC,MAAQ,EAC/B,IAAMoE,GAENsoC,GAAQ35B,GALftW,EAAM,mCAAqCsW,GAiB9Bi7B,CAAStwC,GAClBrB,EATR,SAAkBqB,SACVsG,EAAItG,EAAErB,aACLoK,GAAKA,EAAIzC,EAAEyC,GAAKkK,IAOTs9B,CAASvwC,GACjBwwC,EAAQpyC,EAAa4B,EAAErB,OACvB8xC,EAAQryC,EAAa4B,EAAE0B,KACvBgvC,GAAU1wC,EAAEypC,SAAW,IAAI9mC,IAAIvE,GAC/BsuC,EA4CR,SAAmBjf,EAAMgc,EAAS/nC,EAAKivC,OAMjCR,EACAS,EACAh5B,EACA9Y,EACAO,EACAmD,EACApD,EACA2J,EAZAlJ,EAAMyG,GAAKA,EAAEyC,GACb2jC,EAAS,GACT5oC,EAAS6sC,EAAUA,EAAQhwC,QAAU,GACrCkwC,EAAO,GACPC,EAAO,OAUXhtC,EAAOjB,SAAQ,CAACL,EAAG1D,IAAM+xC,EAAKruC,GAAK1D,EAAI,IAElCA,EAAI,EAAGM,EAAIquB,EAAKjvB,OAAQM,EAAIM,IAAKN,EAEpC0D,EAAId,EADJqH,EAAI0kB,EAAK3uB,IAETO,EAAIwxC,EAAKruC,KAAOquC,EAAKruC,GAAKsB,EAAOpE,KAAK8C,KAGhCoV,EAAQk5B,EAFdF,GAAQT,EAAQ1G,EAAUA,EAAQ9mC,IAAI9C,GAAOovC,IAAS,OAGpDr3B,EAAQk5B,EAAKF,GAAQ,GACrBlE,EAAOhtC,KAAKkY,GACZA,EAAM3C,OAASk7B,GAGjBv4B,EAAMvY,EAAI,GAAK0J,SAGjB2jC,EAAO5oC,OAASA,EACT4oC,EA7EQqE,CAAUre,EAAM3wB,OAAQ/B,EAAEypC,QAASzpC,EAAE0B,IAAK1B,EAAE2wC,SACrD9lC,EAAO,GACPC,EAAO7J,KAAKqB,MACZ+S,EAAIq3B,EAAO5oC,OAAOtF,WAYjBuT,EAAI,EAAG/I,EAAI0jC,EAAOluC,OAAQuT,EAAI/I,IAAK+I,MAEtCo+B,GADAv4B,EAAQ80B,EAAO36B,IACDkD,OACd3S,EAAQ2Q,IAEH5T,EAAI,EAAGA,EAAIgW,IAAKhW,KACH,MAAZuY,EAAMvY,QACV+wC,EAAO1D,EAAO5oC,OAAOzE,GACrB0J,EAAI,CACFioC,SAAS,GAGNlyC,EAAI,EAAGM,EAAI+wC,EAAM3xC,OAAQM,EAAIM,IAAKN,EAAGiK,EAAE2nC,EAAO5xC,IAAMqxC,EAAMrxC,GAE/DiK,EAAE0nC,GAASL,EACXrnC,EAAEynC,GAAS34B,OAAO1J,MAAM7L,GAASA,EAAQ+tC,EAAOz4B,EAAOjZ,GAAS2D,EAChEuI,EAAKnL,KAAKg7B,GAAO3xB,WAKjB8B,EAAKrM,SAAQsD,EAAIc,IAAMd,EAAI+0B,YAAY/0B,EAAIs1B,KAAKx0B,IAAIlC,OAAOmK,IAC3DC,EAAKtM,SAAQsD,EAAImwB,IAAMnwB,EAAI+0B,YAAY/0B,EAAIu1B,KAAKpF,IAAIvxB,OAAOoK,SAC1DxI,MAAQuI,EACN/I,KAkDXqtC,GAAc9S,WAAa,MACjB,yBACI,WACE,UAEJ,CAAC,MACD,eACA,eACC,GACR,MACO,cACA,cACA,SACC,GACR,MACO,WACA,cACC,SACCiK,IACT,MACO,UACA,eACA,SACC,GACR,MACO,WACA,WAGZr9B,GAASkmC,GAAe7H,GAAW,CACjCh3B,UAAUtQ,EAAG0yB,SACLmW,EAAO5nC,KACPixB,EAAMlyB,EAAEizB,eAEVkW,SAEAN,EAAKvmC,QAAU4vB,GAAOQ,EAAMO,SAAS4V,EAAKV,SAAS,KACrDgB,EAAQN,EAAKvmC,MAAQ4vB,EAAM2W,EAAKxV,KAAKrzB,GAAK,GAC1C0yB,EAAMoE,MAAMpE,EAAMmF,QAAQ9uB,GAAK8/B,EAAKjmC,IAAImG,OAExCogC,EAAQN,EAAKvmC,MAAQumC,EAAKvmC,OAASrB,KAAKoyB,KAAKrzB,GAC7C0yB,EAAMoE,MAAMpE,EAAM2E,KAAKtuB,GAAK8/B,EAAK5W,IAAIlpB,KACrC2pB,EAAMoE,MAAMpE,EAAM0E,KAAKruB,GAAK8/B,EAAKjmC,IAAImG,MAIvC8/B,EAAKtR,UAEL7E,EAAMoE,MAAMpE,EAAMmF,QAAQ9uB,IACxB1B,GAAO0B,EAAGogC,EAAMN,EAAKc,QAAQ5gC,IAAIypB,UAE5BE,EAAML,OAAOH,GAAKW,SAAS5xB,KAAKmnC,WAGzC7Q,gBACQ4S,EAAOlpC,KAAKsmC,MACZ6C,EAAOnpC,KAAKumC,UACd1oC,EAAGM,MAEFN,EAAI,EAAGM,EAAI6B,KAAKwmC,MAAO3oC,EAAIM,IAAKN,OAC9BmrC,UAAUE,EAAKrrC,IACpBqrC,EAAKrrC,GAAK,SAGPA,EAAI,EAAGM,EAAI6B,KAAKymC,MAAO5oC,EAAIM,IAAKN,OAC9BmrC,UAAUG,EAAKtrC,IACpBsrC,EAAKtrC,GAAK,UAGP2oC,MAAQxmC,KAAKymC,MAAQ,KAwC9B0H,GAAI/S,WAAa,MACP,eACI,YACG,UAEL,CAAC,MACD,eACA,eACC,GACR,MACO,aACA,kBACI,GACX,MACO,kBACA,mBACG,GACV,MACO,cACA,mBACG,GACV,MACO,iBACA,iBACG,GACV,MACO,cACA,gBACC,SACC,GACT,MACO,eACA,cACE,CAAC,SAAU,uBACV,eACV,MACO,aACA,UACP,MACO,gBACA,iBACG,IACV,MACO,gBACA,iBACG,KACV,MACO,UACA,gBACC,UACE,CAAC,QAAS,cAGzBpzB,GAASmmC,GAAKlV,GAAW,CACvB5pB,UAAUtQ,EAAG0yB,SACL5wB,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,UAAYpF,EAAMqF,eAE1C92B,KAAKqB,OAASowB,EAAMyE,WAAan3B,EAAEizB,WAAY,OAC5ClxB,EAAS2wB,EAAMmE,YAAYnE,EAAMmF,QAAQ91B,OACzC2qC,EAASD,GAAY1qC,EAAQ/B,EAAEypC,QAASzpC,EAAErB,OAC1CqqB,GAAShpB,EAAEypC,SAAW,IAAI9mC,IAAIvE,GAC9B+gC,EAAYn/B,EAAEm/B,UACd7+B,EAASN,EAAEixC,WAAa,MAAQ,MAChCrM,EAAK5kC,EAAE4kC,IAAM,CAAC,QAAS,WACvB3vB,EAAS,OACXnR,EAAS9D,EAAEsH,OACXslC,EAAW5sC,EAAEk9B,OAASl9B,EAAE4sC,UAAY,GACpCC,EAAW7sC,EAAEk9B,OAASl9B,EAAE6sC,UAAY,IAEzB,QAAXvsC,GAA+B,QAAXA,GACtBvB,EAAM,2BAA6BuB,GAGnB,WAAdN,EAAE+mC,UACCjjC,IAAQA,EAASwD,GAAOvF,EAAQ/B,EAAErB,QACvCiuC,EAAWC,EAAW7sC,EAAEk9B,OAAS2P,GAGnCH,EAAO7pC,SAAQkP,UACPm/B,EAAUnF,GAAUh6B,EAAGotB,GAAW7+B,GAClCsE,EAAQ5E,EAAEkqC,OAASn4B,EAAEvT,OAAS,EAEpCwlC,GAAYkN,EADEptC,GAAUwD,GAAOyK,GACH66B,EAAUC,GAAUhqC,SAAQ6D,UAChDqC,EAAI,OAEL,IAAIjK,EAAI,EAAGA,EAAIkqB,EAAMxqB,SAAUM,EAClCiK,EAAEigB,EAAMlqB,IAAMiT,EAAEi3B,KAAKlqC,GAGvBiK,EAAE67B,EAAG,IAAMl+B,EAAE,GACbqC,EAAE67B,EAAG,IAAMl+B,EAAE,GAAK9B,EAClBqQ,EAAOvV,KAAKg7B,GAAO3xB,UAGnB9H,KAAKqB,QAAOR,EAAImwB,IAAMhxB,KAAKqB,YAC1BA,MAAQR,EAAIc,IAAMd,EAAIC,OAASkT,SAG/BnT,KAkBXmH,GAASomC,GAAKjc,IAmBdnqB,GAASsmC,GAAMrV,GAAW,CACxB5pB,UAAUtQ,EAAG0yB,SACLxB,EAAKwB,EAAMwD,YAEbj1B,KAAK45B,gBAEAx4B,GAAOpB,KAAMyxB,EAAOzxB,KAAK45B,aAyBtC,SAAc76B,UACLA,EAAEizB,SAAS,YAAcjzB,EAAEizB,SAAS,WAAajzB,EAAEizB,SAAS,QAAUjzB,EAAEizB,SAAS,WAvBlF7e,CAAKpU,GAAI,OAAO0yB,EAAMqC,mBAEtB/0B,EAAEiV,cAEG5S,GAAOpB,KAAMyxB,EAAOxB,EAAG7kB,MAAMrM,EAAEiV,OAAQjV,EAAEyP,SAC3C,GAAIzP,EAAEyrB,MAAO,OAMX,CACLA,MALQyF,EAAGgK,QAAQl7B,EAAE8rB,IAAK9rB,EAAEyP,QAAQksB,MAAKV,SACpCJ,SAAW93B,EAAMk4B,EAAIxN,MACnByD,GAAMA,EAAGsF,MAAMv1B,iBAOjBiwB,EAAGgK,QAAQl7B,EAAE8rB,IAAK9rB,EAAEyP,QAAQksB,MAAKV,GAAO54B,GAAOpB,KAAMyxB,EAAO3vB,EAAMk4B,EAAIxN,YAiCnF+hB,GAAOnT,WAAa,MACV,kBACI,WACE,UAEJ,CAAC,MACD,aACA,eACE,CAAC,MACD,YACA,iBACI,GACX,MACO,WACA,kBACI,KAEb,MACO,cACA,eACC,GACR,MACO,cACA,eACC,YACG,GACX,MACO,UACA,gBACC,GACR,MACO,kBACG,QAGfpzB,GAASumC,GAAQtV,GAAW,CAC1B5pB,UAAUtQ,EAAG0yB,SACLnsB,EAAOvG,EAAE/B,OACTkX,EAAQnV,EAAEmV,MACVF,EAASjV,EAAEiV,OACXk8B,EAA4B,MAAbnxC,EAAEoxC,QAAkB,KAAOpxC,EAAEoxC,QAC5CjK,EAAQnnC,EAAEizB,WACV7zB,EAAImH,EAAK/H,WAKX6J,EACAgN,EACA+0B,EALAtW,EAAOqT,EAAQzU,EAAMmF,OAASnF,EAAM0E,IACpCt1B,EAAM4wB,EACNkS,EAAK5kC,EAAE4kC,UAKP3vB,GACFI,EAAIJ,EAAOzW,OAEPY,EAAI,IAAMwlC,GACZ7lC,EAAM,wDAGJ6lC,GAAMA,EAAGpmC,SAAWY,EAAIiW,GAC1BtW,EAAM,sDAGR6lC,EAAKA,GAAM3vB,EAAOtS,IAAIvE,GAEtBiK,EAAM,SAAUU,OACT,IAAkB1J,EAAGqH,EAAjB5H,EAAI,EAAG0D,EAAI,EAAS1D,EAAIM,IAAKN,KAE3B,OADT4H,EAAIyO,EAAMtV,IAAI0G,EAAKzH,GAAGiK,KACP,IAAK1J,EAAI,EAAGA,EAAIgW,IAAKhW,IAAKmD,EAAGuG,EAAE67B,EAAGpiC,IAAM2uC,OAAkB,IAAK9xC,EAAI,EAAGA,EAAIgW,IAAKhW,IAAKmD,EAAGuG,EAAE67B,EAAGpiC,IAAMyS,EAAO5V,GAAGqH,MAI1Hk+B,GACH7lC,EAAM,+BAGRsJ,EAAM,SAAUU,OACT,IAAWrC,EAAP5H,EAAI,EAAMA,EAAIM,IAAKN,EAC1B4H,EAAIyO,EAAMtV,IAAI0G,EAAKzH,GAAGiK,IACtBA,EAAE67B,EAAG9lC,IAAW,MAAL4H,EAAYyqC,EAAezqC,IAKxCygC,EACFrlC,EAAM4wB,EAAML,QAAO,IAEnB+X,EAAO7jC,EAAKoyB,MAAKn2B,GAAKkwB,EAAMO,SAASzwB,EAAEvE,UACvC61B,GAAQsW,EAAO1X,EAAM4E,IAAM,GAG7B5E,EAAMoE,MAAMhD,EAAMzrB,GACXvG,EAAI+wB,SAAS+R,MAexB37B,GAASwmC,GAAarc,IAiCtBnqB,GAAS2mC,GAAaxc,IAgBtBnqB,GAAS4mC,GAAQ3V,GAAW,CAC1B5pB,UAAUtQ,EAAG0yB,eACNO,SAASjzB,EAAEizB,iBACX3wB,MAAQtC,EACN0yB,EAAMsF,KAAKtF,EAAMoF,UAAYpF,EAAMqF,cAyB9C+X,GAAMzT,WAAa,MACT,iBACI,YACG,WACF,UAEH,CAAC,MACD,eACA,eACC,GACR,MACO,aACA,kBACI,GACX,MACO,aACA,kBACI,GACX,MACO,UACA,cACEiK,WACC,OACV,MACO,aACA,iBACG,GACV,MACO,WACA,WAGZr9B,GAAS6mC,GAAOxI,GAAW,CACzB+J,WAAY/J,GAAU7/B,UAAU6I,UAEhCA,UAAUtQ,EAAG0yB,UACJzxB,KAAKowC,WAOhB,SAAyBrxC,EAAG0yB,SACpBhxB,EAAM1B,EAAErB,MACR2D,EAAQtC,EAAEsC,MACVoyB,GAAe,UAAT10B,EAAE00B,GAAiB,YAAc10B,EAAE00B,KAAO,MAChDz2B,EAASI,EAAeqD,GAAKhB,OAAOrC,EAAeiE,IACnDiE,EAqBR,SAAmB7E,EAAK4vC,EAAO5e,SACvB/vB,EAAM,GACNkuB,EAAO,UACb6B,EAAMoE,MAAMpE,EAAMmF,QAAQ9uB,UAClBvG,EAAId,EAAIqH,GAETpG,EAAIH,KACPG,EAAIH,GAAK,EACTquB,EAAKnxB,KAAK8C,OAGdquB,EAAKjT,KAAKpX,GACH8qC,EAAQzgB,EAAKlwB,MAAM,EAAG2wC,GAASzgB,EAjCzB0gB,CAAU7vC,EAAK1B,EAAEsxC,OAAS,EAAG5e,GAGtCA,EAAMyE,WAAWn3B,EAAEqI,IAAI,YAAa,KAAM,MAAM,SAC7C,CACL3G,IAAK1B,EAAE0B,IACP+nC,QAASzpC,EAAEypC,QACX5C,IAAKtgC,EAAK5D,KAAI,IAAM+xB,IACpBz2B,OAAQsI,EAAK5D,KAAIH,GAQrB,SAAaA,EAAGd,EAAKY,EAAOrE,UACnBF,GAASoV,GAAKzR,EAAIyR,KAAO3Q,EAAIF,EAAM6Q,GAAKF,KAAKhV,EAAQuE,EAAI,IATxC3C,CAAI2C,EAAGd,EAAKY,EAAOrE,KACzC2mC,GAAIr+B,EAAK5D,KAAIH,GAAKA,EAAI,KACtBywB,SAAUjzB,EAAEizB,SAASue,KAAKxxC,IAtBHyxC,CAAgBzxC,EAAG0yB,GAAQA,MA6DtDzpB,GAAS8mC,GAAU3C,GAAO,CACxB98B,UAAUtQ,EAAG0yB,SACLsb,EAAOhuC,EAAEiuC,QACTtvC,EAAQqB,EAAErB,MACVsvC,EAAUllC,GAAK9H,KAAKgtC,QAAQzc,GAAQzoB,GAAIilC,EAAMtb,EAAO3pB,UAEvD/I,EAAEizB,SAAS,UAAYt0B,GAAS+zB,EAAMO,SAAS50B,EAAeM,MAChEI,EAAM,sDAGHuvC,cAED3vC,GACF+zB,EAAMoE,MAAMpE,EAAM4E,KAAKvuB,UACfolC,EAAKF,EAAQllC,GACnBpK,EAAMoK,GAAGlG,SAAQ7C,GAAKmuC,EAAGjc,IAAIlyB,QAE/B0yB,EAAMoE,MAAMpE,EAAM0E,KAAKruB,UACfolC,EAAKF,EAAQllC,GACnBpK,EAAMoK,GAAGlG,SAAQ7C,GAAKmuC,EAAGvrC,IAAI83B,GAAO16B,SAEtC0yB,EAAMoE,MAAMpE,EAAM2E,KAAKtuB,UACfolC,EAAKF,EAAQllC,GACnBpK,EAAMoK,GAAGlG,SAAQ7C,GAAKmuC,EAAGlc,IAAIjyB,UAG/B0yB,EAAMoE,MAAMpE,EAAM4E,KAAKvuB,GAAKklC,EAAQllC,GAAGmpB,IAAInpB,KAC3C2pB,EAAMoE,MAAMpE,EAAM0E,KAAKruB,GAAKklC,EAAQllC,GAAGnG,IAAImG,KAC3C2pB,EAAMoE,MAAMpE,EAAM2E,KAAKtuB,GAAKklC,EAAQllC,GAAGkpB,IAAIlpB,MAGzC2pB,EAAMlqB,SACRkqB,EAAM+F,UAAS,IAAMx3B,KAAKuH,UAGrBkqB,KAqBXsd,GAAQ3T,WAAa,MACX,mBACI,YACG,WACF,UAEH,CAAC,MACD,cACA,eACC,GACR,MACO,UACA,eACA,SACC,KAGbpzB,GAAS+mC,GAAS9V,GAAW,CAC3B5pB,UAAUtQ,EAAG0yB,SACL5wB,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,WACvB75B,EAAS+B,EAAE/B,OACX2mC,EAAK4H,GAAWxsC,EAAE/B,OAAQ+B,EAAE4kC,IAAM,IAClCjT,EAAS1zB,EAAS,CAACwB,EAAGsJ,IA4BhC,SAAiBtJ,EAAGsJ,EAAG9K,EAAQ2mC,OACxB,IAAI9lC,EAAI,EAAGM,EAAInB,EAAOO,OAAQM,EAAIM,IAAKN,EAC1CiK,EAAE67B,EAAG9lC,IAAMb,EAAOa,GAAGW,UAGhBsJ,EAjC6B2oC,CAAQjyC,EAAGsJ,EAAG9K,EAAQ2mC,GAAMhT,OAC1D+f,SAEA1wC,KAAKqB,MACPqvC,EAAM1wC,KAAKqB,OAEXowB,EAAQA,EAAMwF,SACdyZ,EAAM1wC,KAAKqB,MAAQ,IAGrBowB,EAAMoE,MAAMpE,EAAM2E,KAAKtuB,UACfjJ,EAAK0xB,GAAQzoB,GACnBjH,EAAImwB,IAAIvyB,KAAKiyC,EAAI7xC,IACjB6xC,EAAI7xC,GAAM,QAEZ4yB,EAAMoE,MAAMpE,EAAM0E,KAAKruB,UACf6oC,EAAKjgB,EAAO5oB,EAAG2xB,GAAO,KAC5BiX,EAAIngB,GAAQzoB,IAAM6oC,EAClB9vC,EAAIc,IAAIlD,KAAKkyC,MAEflf,EAAMoE,MAAMpE,EAAM4E,KAAKvuB,IACrBjH,EAAIowB,IAAIxyB,KAAKiyB,EAAO5oB,EAAG4oC,EAAIngB,GAAQzoB,SAE9BjH,KAwBXmH,GAASgnC,GAAO/V,GAAW,CACzB5pB,UAAUtQ,EAAG0yB,eACNpwB,MAAQtC,EAAEsC,MACRtC,EAAEizB,SAAS,SAAWP,EAAMsF,KAAKtF,EAAMoF,UAAYpF,EAAMqF,WAAarF,EAAMqC,sBAyB9EsH,WAAa,MACZ,oBACI,YACG,WACF,UAEH,CAAC,MACD,eACA,eACC,GACR,MACO,aACA,kBACI,GACX,MACO,aACA,gBACC,GACR,MACO,YACA,iBACG,KACV,MACO,UACA,gBACC,UACE,CAAC,OAAQ,YAsDxB,SAASwV,GAAMve,GACb4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAoD7B,SAASwe,GAAOxe,GACd4G,GAAUt5B,KAAKK,KAAM,GAAIqyB,QACpBjf,MAAQ,EA+Gf,SAAS09B,GAASze,GAChB4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAkD7B,SAAS0e,GAAM1e,GACb4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,QACtBL,UAAS,GAiBhB,SAASgf,GAAS3e,GAChB4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GA/R7BrqB,GAASinC,GAAUhW,GAAW,CAC5B5pB,UAAUtQ,EAAG0yB,SACL5wB,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,UAAYpF,EAAMqF,WACzC6M,EAAK5kC,EAAE4kC,IAAM,CAAC,OAAQ,YAExB3jC,KAAKqB,QAAUtC,EAAEizB,aAAeP,EAAMyE,iBACxCr1B,EAAIC,OAASd,KAAKqB,MACXR,QAIH4qC,EAASD,GADA/Z,EAAMmE,YAAYnE,EAAMmF,QAAQ91B,OACZ/B,EAAEypC,QAASzpC,EAAErB,OAC1CqqB,GAAShpB,EAAEypC,SAAW,IAAI9mC,IAAIvE,GAC9B6W,EAAS,GACTV,EAAOvU,EAAEuU,MAAQ,IACjBpV,EAAIa,EAAEkyC,OAASzsC,GAAM8O,EAAO,EAAG,EAhBzB,MAgBsCA,GAC5CnV,EAAID,EAAEX,cACZkuC,EAAO7pC,SAAQkP,UACPxS,EAAI+8B,GAAUvqB,EAAG5S,OAElB,IAAIL,EAAI,EAAGA,EAAIM,IAAKN,EAAG,OACpBiK,EAAI,OAEL,IAAIjK,EAAI,EAAGA,EAAIkqB,EAAMxqB,SAAUM,EAClCiK,EAAEigB,EAAMlqB,IAAMiT,EAAEi3B,KAAKlqC,GAGvBiK,EAAE67B,EAAG,IAAMzlC,EAAEL,GACbiK,EAAE67B,EAAG,IAAMrlC,EAAET,GACbmW,EAAOvV,KAAKg7B,GAAO3xB,QAGnB9H,KAAKqB,QAAOR,EAAImwB,IAAMhxB,KAAKqB,YAC1BA,MAAQR,EAAIc,IAAMd,EAAIC,OAASkT,EAC7BnT,KAmBXmH,GAAS4oC,GAAO3X,GAAW,CACzB5pB,UAAUtQ,EAAG0yB,OACP5wB,EAAK6vC,SAEL1wC,KAAKqB,MACPqvC,EAAM1wC,KAAKqB,OAEXR,EAAM4wB,EAAQA,EAAMwF,SACpByZ,EAAM1wC,KAAKqB,MAAQ,IAGjBtC,EAAE2xB,SACJ7vB,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,WACvBpF,EAAMoE,MAAMpE,EAAM2E,KAAKtuB,UACfjJ,EAAK0xB,GAAQzoB,GACnBjH,EAAImwB,IAAIvyB,KAAKiyC,EAAI7xC,IACjB6xC,EAAI7xC,GAAM,QAEZ4yB,EAAMoE,MAAMpE,EAAM0E,KAAKruB,UACf6oC,EAAKjgB,GAAO5oB,GAClB4oC,EAAIngB,GAAQzoB,IAAM6oC,EAClB9vC,EAAIc,IAAIlD,KAAKkyC,MAEflf,EAAMoE,MAAMpE,EAAM4E,KAAKvuB,UACf6oC,EAAKD,EAAIngB,GAAQzoB,QAElB,MAAMvG,KAAKuG,EACd6oC,EAAGpvC,GAAKuG,EAAEvG,GAGVV,EAAI+wB,SAASrwB,GAGfV,EAAIowB,IAAIxyB,KAAKkyC,OAIV9vC,KAiBXgwC,GAAOzV,WAAa,MACV,kBACI,UACF,CAAC,MACD,YACA,iBACG,OAGfpzB,GAAS6oC,GAAQ5X,GAAW,CAC1B5pB,UAAUtQ,EAAG0yB,SACL5wB,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,WACvB5F,EAAMlyB,EAAEizB,SAAS,QACjBiS,EAAMllC,EAAEkI,KACRvF,EAAM1B,KAAKqB,MAAMT,QAAO,CAACwT,EAAGtM,KAAOsM,EAAEmc,GAAQzoB,IAAM,EAAGsM,IAAI,QAE5D4lB,EAAMh6B,KAAKqB,MACXwhC,EAAM7iC,KAAKoT,MACX89B,EAAM,WAEDpnC,EAAOhC,OACV5J,EAAG4qB,EAEHkR,EAAIz8B,OAAS0mC,EACfjK,EAAIv7B,KAAKqJ,IAETghB,MAAU+Z,EAAM,GAAKrG,YAEjB1T,EAAMkR,EAAIz8B,QAAUurB,GAAOooB,IAC7BhzC,EAAI87B,EAAIlR,GACJpnB,EAAI6uB,GAAQryB,KAAK2C,EAAImwB,IAAIvyB,KAAKP,GAElC87B,EAAIlR,GAAOhhB,MAIb+6B,KAGApR,EAAMT,IAAIzzB,SAEZk0B,EAAMoE,MAAMpE,EAAM2E,KAAKtuB,UACfjJ,EAAK0xB,GAAQzoB,GAEfpG,EAAI7C,KACN6C,EAAI7C,IAAO,EACXgC,EAAImwB,IAAIvyB,KAAKqJ,MAGb+6B,KAGJ7I,EAAMA,EAAIruB,QAAO7D,IAA0B,IAArBpG,EAAI6uB,GAAQzoB,QAG/B2pB,EAAMT,IAAIzzB,QAAU0zB,IAAQ+I,EAAIz8B,OAAS0mC,GAAOxS,EAAM3wB,SAEzDowC,EAAMrO,EAAM7I,EAAIz8B,OAChBk0B,EAAMoE,MAAMpE,EAAMmF,QAAQ9uB,IAEnBpG,EAAI6uB,GAAQzoB,KAAKgC,EAAOhC,MAE/BopC,GAAO,GAGLjgB,GAAO+I,EAAIz8B,OAAS0mC,EAAK,OACrB9lC,EAAI67B,EAAIz8B,OAAS0mC,MAElB,IAAIpmC,EAAI,EAAGA,EAAIM,IAAKN,EACvB6D,EAAI6uB,GAAQyJ,EAAIn8B,MAAQ,EACxBgD,EAAImwB,IAAIvyB,KAAKu7B,EAAIn8B,IAGnBm8B,EAAMA,EAAIt6B,MAAMvB,UAGdszB,EAAMR,IAAI1zB,QAEZk0B,EAAMoE,MAAMpE,EAAM4E,KAAKvuB,IACjBpG,EAAI6uB,GAAQzoB,KAAKjH,EAAIowB,IAAIxyB,KAAKqJ,MAIlC2pB,EAAM9vB,IAAIpE,QAEZk0B,EAAMoE,MAAMpE,EAAM0E,IAAKrsB,IAGrB2nB,EAAM9vB,IAAIpE,QAAU2zC,EAAM,KAE5BrwC,EAAIc,IAAMq4B,EAAIruB,QAAO7D,IAAMpG,EAAI6uB,GAAQzoB,YAGpCsL,MAAQyvB,OACRxhC,MAAQR,EAAIC,OAASk5B,EACnBn5B,KAiBXiwC,GAAS1V,WAAa,MACZ,oBACI,YACG,WACF,UAEH,CAAC,MACD,aACA,mBACI,GACX,MACO,YACA,mBACI,GACX,MACO,YACA,iBACG,GACV,MACO,UACA,iBACG,UAGfpzB,GAAS8oC,GAAU7X,GAAW,CAC5B5pB,UAAUtQ,EAAG0yB,MACPzxB,KAAKqB,QAAUtC,EAAEizB,WAAY,aAC3BnxB,EAAM4wB,EAAMmE,cAAcmB,KAAKtF,EAAM4E,KACrCsN,EAAK5kC,EAAE4kC,IAAM,cACnB9iC,EAAImwB,IAAMhxB,KAAKqB,MAAQowB,EAAMT,IAAIvxB,OAAOO,KAAKqB,OAASowB,EAAMT,SACvD3vB,MAAQmD,GAAMzF,EAAE6R,MAAO7R,EAAEoU,KAAMpU,EAAEuU,MAAQ,GAAG5R,KAAI+D,UAC7CqC,EAAI,UACVA,EAAE67B,GAAMl+B,EACDg0B,GAAO3xB,MAEhBjH,EAAIc,IAAM8vB,EAAM9vB,IAAIlC,OAAOO,KAAKqB,OACzBR,KAgBXmH,GAAS+oC,GAAO9X,GAAW,CACzB5pB,UAAUtQ,EAAG0yB,eACNpwB,MAAQowB,EAAM3wB,OACZ2wB,EAAMyE,UAAYzE,EAAMsF,KAAKtF,EAAMoF,UAAYpF,EAAMqF,WAAarF,EAAMqC,mBAenF,MAAMqd,GAAS,CAAC,QAAS,SAyHzB,SAASC,GAAW/e,GAClB4G,GAAUt5B,KAAKK,KAAM8G,KAAWurB,GAuClC,SAASgf,GAAOhf,GACd4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAjK7B2e,GAAS5V,WAAa,MACZ,oBACI,WACE,UAEJ,CAAC,MACD,aACA,kBACI,GACX,MACO,gBACA,mBACG,GACV,MACO,aACA,cACE9e,UACD,GACR,MACO,YACA,iBACG,GACV,MACO,eACA,iBACG,IACV,MACO,cACA,cACC,GACR,MACO,gBACA,eACG,eACD,CAAC,QAAS,QACnB,MACO,UACA,gBACC,SACC,UACC60B,MAGfnpC,GAASgpC,GAAU/X,GAAW,CAC5B5pB,UAAUtQ,EAAG0yB,SACL/zB,EAAQqB,EAAErB,MACVksC,GAAsB,IAAf7qC,EAAE4Z,SACT24B,EAAqB,QAAfvyC,EAAEwyC,SACR59B,EAAQ3T,KAAKwxC,OAAOzyC,EAAG0yB,GACvB7Y,GAAU04B,EAAM1xB,GAAcD,IAAchM,EAAM+I,MAAM9D,OACxD+qB,EAAK5kC,EAAE4kC,IAAMwN,GACbM,EAAK9N,EAAG,GACR+N,EAAK/N,EAAG,GACRrwB,EAAOK,EAAML,SAEf7O,EAAMkP,EAAM/C,OAASsH,EAAAA,EACrBxT,EAAMiP,EAAMR,OAAS+E,EAAAA,EACrB2a,EAAOpB,EAAM0E,WAEbp3B,EAAEizB,YAAcP,EAAMO,SAAS50B,EAAeM,OAEhDm1B,GADApB,EAAQA,EAAML,QAAO,IACRwF,OACbnyB,EAAMyT,EAAAA,EACNxT,GAAOwT,EAAAA,GAGTuZ,EAAMoE,MAAMhD,GAAM/qB,UACVrC,EAAI/H,EAAMoK,OACZrG,EAAGlD,EAEE,MAALkH,GACFqC,EAAE2pC,GAAM,KACJ7H,IAAM9hC,EAAE4pC,GAAM,QAElB5pC,EAAE2pC,GAAMhwC,EAAIlD,EAAIoV,EAAMlO,GAClBmkC,IAAM9hC,EAAE4pC,GAAMnzC,EAAIqa,EAAOnX,EAAG6R,IAC5B7R,EAAIgD,IAAKA,EAAMhD,GACflD,EAAImG,IAAKA,EAAMnG,OAGvBoV,EAAM/C,MAAQnM,EACdkP,EAAMR,KAAOzO,EACN+sB,EAAMG,SAASgY,EAAOjG,EAAK8N,IAGpCD,OAAOzyC,EAAG0yB,SACF6f,EAAqB,QAAfvyC,EAAEwyC,UAER90B,MACJA,EADInJ,KAEJA,GACEvU,EAAE0d,MAAQ,CACZA,MAAO1d,EAAE0d,MACTnJ,KAAMvU,EAAEuU,MAAQ,GACdq+B,GAAQ,CACVtrC,OAAQtH,EAAEsH,QAAUA,GAAOorB,EAAMmE,YAAYnE,EAAMmF,QAAQ91B,OAAQ/B,EAAErB,OACrEqjB,QAAShiB,EAAEgiB,UAGP6wB,EAASp1B,GAAUC,GACnB5S,EAAO7J,KAAKqB,OAAS,GACrBsS,GAAS29B,EAAMtyB,GAAWH,IAAW+yB,EAAQt+B,UACnDK,EAAM+I,KAAO7a,EAAK+vC,GAClBj+B,EAAM8I,MAAQm1B,EACdj+B,EAAML,KAAOA,EACbK,EAAM/C,MAAQ/G,EAAK+G,MACnB+C,EAAMR,KAAOtJ,EAAKsJ,KACXnT,KAAKqB,MAAQsS,KAgBxB3L,GAASopC,GAAYnY,GAAW,CAC9B5pB,UAAUtQ,EAAG0yB,SACLxB,EAAKwB,EAAMwD,SACXv3B,EAAQqB,EAAErB,MACVwW,EAAQlU,KAAKqB,MACb+F,EAAMU,GAAKoM,EAAM9M,IAAI1J,EAAMoK,GAAIA,OAEjCmpB,GAAM,SAENlyB,EAAEizB,SAAS,UAAYP,EAAMO,SAASt0B,EAAMV,SAC9CkX,EAAM5M,QACNmqB,EAAMoE,MAAMpE,EAAMmF,OAAQxvB,IACjBqqB,EAAMyE,WACfzE,EAAMoE,MAAMpE,EAAM2E,KAAKtuB,GAAKoM,EAAM7M,OAAO3J,EAAMoK,MAC/C2pB,EAAMoE,MAAMpE,EAAM0E,IAAK/uB,IAEvB6pB,GAAM,OAGHe,SAASf,GACV/c,EAAMhN,MAAQ+oB,EAAGiJ,gBAAgBjJ,EAAGuH,SAAStjB,EAAM3M,OAChDkqB,EAAMsF,UAmBjB/uB,GAASqpC,GAAQpY,GAAW,CAC1B5pB,UAAUtQ,EAAG0yB,KACEzxB,KAAKqB,OAAStC,EAAEizB,SAAS,UAAYjzB,EAAEizB,SAAS,SAAWP,EAAMyE,WAAan3B,EAAE4d,MAAQ8U,EAAMO,SAASjzB,EAAE4d,KAAK3f,gBAGpHqE,OAAStC,EAAE4d,KAAO8U,EAAM3wB,OAAOpB,QAAQid,KAAKiU,GAAc7xB,EAAE4d,OAAS8U,EAAM3wB,QAAQY,IAAI3C,EAAErB,WAepG,MAAMm0C,GAAY,CAChBC,WAAY,iBACH,CACLtqC,KAAMoX,GAAKA,EAAE1K,MAAQ,IAGzBse,KAAM,eACAA,QACG,CACLJ,KAAM,IAAMI,EAAO,EACnBhrB,KAAMoX,UACE/gB,EAAI+gB,EAAE1K,MACNsY,EAAO5N,EAAE4N,YACR3uB,GAAK+gB,EAAE7Z,QAAQynB,EAAK3uB,EAAI,GAAI2uB,EAAK3uB,IAAM20B,EAAO30B,EAAI,EAAI20B,KAInEuf,WAAY,eACNC,QACG,CACL5f,KAAM,IAAM4f,EAAQ,EACpBxqC,KAAMoX,UACE/gB,EAAI+gB,EAAE1K,MACNhC,EAAI0M,EAAE4N,YACL3uB,GAAK+gB,EAAE7Z,QAAQmN,EAAErU,EAAI,GAAIqU,EAAErU,MAAQm0C,EAAQA,KAIxDC,aAAc,iBACNzf,EAAOqf,GAAUrf,OACjBhrB,EAAOgrB,EAAKhrB,WACX,CACL4qB,KAAMI,EAAKJ,KACX5qB,KAAMoX,IAAMpX,EAAKoX,GAAK,IAAMA,EAAE4N,KAAKjvB,OAAS,KAGhD20C,UAAW,eACLC,QACG,CACL/f,KAAM,IAAM+f,EAAO,EACnB3qC,KAAMoX,UACE1M,EAAI0M,EAAE4N,KACNnuB,EAAIugB,EAAE7Z,YACRlH,EAAI+gB,EAAE1K,SAENi+B,EAAOt0C,EAAG,MACLA,EAAI,EAAIqU,EAAE3U,SAAWc,EAAE6T,EAAErU,GAAIqU,EAAErU,EAAI,OAAOA,EAEjDs0C,EAAOt0C,SAGD,EAAIs0C,GAAQjgC,EAAE3U,UAI5B60C,MAAO,SAAU10C,EAAOumC,IACtBA,GAAOA,GACK,GAAInmC,EAAM,8CAChBq0C,EAAON,GAAUK,YACjB1qC,EAAO2qC,EAAK3qC,WACX,CACL4qB,KAAM+f,EAAK/f,KACX5qB,KAAMoX,GAAKzc,KAAK2I,KAAKm5B,EAAMz8B,EAAKoX,MAGpCyzB,IAAK,SAAU30C,EAAOkb,UACpBA,GAAUA,GAAU,EACb,CACLpR,KAAMoX,UACE/gB,EAAI+gB,EAAE1K,MAAQ0E,SACb/a,GAAK,EAAIH,EAAMkhB,EAAE4N,KAAK3uB,IAAM,QAIzCy0C,KAAM,SAAU50C,EAAOkb,UACrBA,GAAUA,GAAU,EACb,CACLpR,KAAMoX,UACE/gB,EAAI+gB,EAAE1K,MAAQ0E,EACd1G,EAAI0M,EAAE4N,YACL3uB,EAAIqU,EAAE3U,OAASG,EAAMwU,EAAErU,IAAM,QAI1C00C,YAAa,SAAU70C,SACd,CACL8J,KAAMoX,GAAKlhB,EAAMkhB,EAAE4N,KAAK5N,EAAEtU,OAG9BkoC,WAAY,SAAU90C,SACb,CACL8J,KAAMoX,GAAKlhB,EAAMkhB,EAAE4N,KAAK5N,EAAErU,GAAK,MAGnCkoC,UAAW,SAAU/0C,EAAOg1C,UAC1BA,GAAOA,GACK,GAAI50C,EAAM,4CACf,CACL0J,KAAMoX,UACE/gB,EAAI+gB,EAAEtU,IAAMooC,EAAM,UACjB70C,EAAI+gB,EAAErU,GAAK7M,EAAMkhB,EAAE4N,KAAK3uB,IAAM,QAI3C80C,WAAY,SAAUj1C,OAChBmM,QACG,CACLuoB,KAAM,IAAMvoB,EAAO,KACnBrC,KAAMoX,UACEnZ,EAAI/H,EAAMkhB,EAAE4N,KAAK5N,EAAE1K,eACb,MAALzO,EAAYoE,EAAOpE,EAAIoE,KAIpC+oC,WAAY,SAAUl1C,OAChB+H,EAAG5H,QACA,CACLu0B,KAAM,KAAO3sB,EAAI,KAAM5H,GAAK,GAC5B2J,KAAMoX,UACE1M,EAAI0M,EAAE4N,YACL5N,EAAE1K,OAASrW,EAAI4H,GAAK5H,EAMnC,SAAcH,EAAO8uB,EAAMtY,OACpB,IAAI/V,EAAIquB,EAAKjvB,OAAQ2W,EAAQ/V,IAAK+V,EAAO,IAEnC,MADCxW,EAAM8uB,EAAKtY,IACN,OAAOA,SAGhB,EAZ6B2+B,CAAKn1C,EAAOwU,EAAG0M,EAAE1K,QAAU,GAAKrW,EAAIqU,EAAE3U,OAAQkI,EAAI,MAAQA,EAAI/H,EAAMwU,EAAErU,QAe7G,MAAMi1C,GAAiBvyC,OAAO+E,KAAKusC,IAEnC,SAASkB,GAAYh0C,SACb6mC,EAAM9jC,EAAM/C,EAAE6mC,KACd5oC,EAAS8E,EAAM/C,EAAE/B,QACjBq1B,EAASvwB,EAAM/C,EAAEszB,QACjBsR,EAAK7hC,EAAM/C,EAAE4kC,IACb0E,EAAUroC,KAAKqoC,QAAU,GACzB2K,EAAUhzC,KAAKgzC,QAAU,GACzB5K,EAAS,GACT1mC,EAAM,GACNunC,EAAS,GACTF,EAAW,OACbkK,GAAY,WAEPC,EAAY7tC,GACnBvD,EAAM1E,EAAeiI,IAAIzD,SAAQ7C,GAAKqpC,EAAOrpC,GAAK,IAGpDm0C,EAAYn0C,EAAE4d,MACdipB,EAAIhkC,SAAQ,CAAC6xB,EAAI51B,WACTH,EAAQV,EAAOa,GACf8qC,EAAQxrC,EAAaO,GACrBT,EAAOymC,GAAYjQ,EAAIkV,EAAOhF,EAAG9lC,OACvCq1C,EAAYx1C,GACZ2qC,EAAQ5pC,KAAKxB,GAETwJ,GAAeorC,GAAWpe,GAC5Buf,EAAQv0C,KA5Kd,SAAkBg1B,EAAI/1B,EAAOy1C,EAAOxP,SAC5B5mC,EAAK80C,GAAUpe,GAAI/1B,EAAOy1C,SACzB,CACL/gB,KAAMr1B,EAAGq1B,MAAQpzB,EACjB8K,OAAQ,SAAU8U,EAAG9W,GACnBA,EAAE67B,GAAM5mC,EAAGyK,KAAKoX,KAuKHw0B,CAAS3f,EAAIz2B,EAAOa,GAAIw0B,EAAOx0B,GAAIZ,QAE7C,IACY,MAATS,GAAwB,UAAP+1B,GACnB31B,EAAM,mCAGG,UAAP21B,cACFwV,EAAOxqC,KAAKxB,GAIdg2C,GAAY,MACR7+B,EAAI1S,EAAIinC,GAEPv0B,IACHA,EAAI1S,EAAIinC,GAAS,GACjBv0B,EAAE1W,MAAQA,EACVqrC,EAAStqC,KAAK2V,IAGhBA,EAAE3V,KAAK6mC,GAAc7R,EAAIx2B,SAI3BgsC,EAAO1rC,QAAUwrC,EAASxrC,eACvBwmC,KA8BT,SAAcgF,EAAUE,EAAQgK,GAC9BlK,EAAWA,EAASrnC,KAAI0S,GAAKsxB,GAAgBtxB,EAAGA,EAAE1W,eAC5CqmC,EAAO,CACXE,IAAK,EACL0B,IAAK,KACL3B,OAAO,EACP5wB,MAAO61B,OAGJgK,UACC90C,EAAI4qC,EAASxrC,OACbkE,EAAIsiC,EAAK4B,IAAMtlC,MAAMlC,GACrBN,EAAI,EAEDA,EAAIM,IAAKN,EAAG4D,EAAE5D,GAAK,IAAIkrC,EAASlrC,GAAGkmC,MAGxCA,EAAKC,UACHA,EAAQD,EAAKvX,KAAO,IAAIwZ,UAG9BjC,EAAKpiC,IAAM,SAAUmG,MACnBi8B,EAAKE,KAAO,GACRgP,GACAjP,GAAOA,EAAMriC,IAAImG,OAEhB,IAAIjK,EAAI,EAAGA,EAAIM,IAAKN,EACvB4D,EAAE5D,GAAG8D,IAAIF,EAAE5D,GAAGe,IAAIkJ,GAAIA,KAI1Bi8B,EAAK/S,IAAM,SAAUlpB,MACnBi8B,EAAKE,KAAO,GACRgP,GACAjP,GAAOA,EAAMhT,IAAIlpB,OAEhB,IAAIjK,EAAI,EAAGA,EAAIM,IAAKN,EACvB4D,EAAE5D,GAAGmzB,IAAIvvB,EAAE5D,GAAGe,IAAIkJ,GAAIA,KAI1Bi8B,EAAK38B,IAAM,SAAUU,OACfjK,EAAGM,MAEH6lC,GAAOA,EAAMhwB,SAEZnW,EAAI,EAAGM,EAAI8qC,EAAO1rC,OAAQM,EAAIM,IAAKN,EAAGiK,EAAEmhC,EAAOprC,IAAMkmC,EAAKE,QAE1DgP,EAAW,IAAKp1C,EAAI,EAAGM,EAAIsD,EAAElE,OAAQM,EAAIM,IAAKN,EAAG4D,EAAE5D,GAAGuJ,IAAIU,IAGjEi8B,EAAK3R,KAAO,WACV2R,EAAKE,IAAM,EACPD,GAAOA,EAAMkC,YAEZ,IAAIroC,EAAI,EAAGA,EAAIM,IAAKN,EAAG4D,EAAE5D,GAAGu0B,QAG5B2R,EAxFOA,CAAKgF,EAAUE,EAAQgK,SAGhC7K,OAAS7nC,OAAO+E,KAAK8iC,GAE5B,MAAM5hC,GAAYusC,GAAYvsC,UAuG9B,SAAS6sC,GAAOhhB,GACd4G,GAAUt5B,KAAKK,KAAM,GAAIqyB,QACpBoU,MAAQ,OACRF,MAAQ,GAqGf,SAAS+M,GAAiB1jB,EAAMmD,EAAOlC,EAAK9xB,SACpC4d,EAAO5d,EAAE4d,KACTnY,EAAQmY,IAAS5d,EAAEw0C,YACnBC,EAAQz0C,EAAEy0C,OAAS,CAAC,KAAM,GAC1BhnB,EAAOoD,EAAKpD,KAAKqE,GAEvB1yB,EAAIquB,EAAKjvB,OACHgB,EAAIiG,EAAQ6N,GAASsK,GAAQ,KAC7BiC,EAAI,CACRtU,GAAI,EACJC,GAAI,EACJyG,GAAI,EACJD,GAAI,EACJmD,MAAO,EACPsY,KAAMA,EACNznB,QAAS4X,GAAQnZ,GAAU,IAE7BuvB,EAAMX,WAED,IAAIv0B,EAAI,EAAGA,EAAIM,IAAKN,EACvB41C,GAAU70B,EAAG40B,EAAO31C,EAAGM,GACnBqG,GAAOkvC,GAAY90B,EAAGrgB,GAC1Bw0B,EAAMjpB,OAAO8U,EAAG4N,EAAK3uB,IAIzB,SAAS41C,GAAU70B,EAAGvZ,EAAGxH,EAAGM,GAC1BygB,EAAE5N,GAAK4N,EAAEtU,GACTsU,EAAE7N,GAAK6N,EAAErU,GACTqU,EAAEtU,GAAa,MAARjF,EAAE,GAAa,EAAIlD,KAAKuC,IAAI,EAAG7G,EAAIsE,KAAKI,IAAI8C,EAAE,KACrDuZ,EAAErU,GAAa,MAARlF,EAAE,GAAalH,EAAIgE,KAAKsC,IAAItG,EAAGN,EAAIsE,KAAKI,IAAI8C,EAAE,IAAM,GAC3DuZ,EAAE1K,MAAQrW,EAIZ,SAAS61C,GAAY90B,EAAG+0B,SAChBhrC,EAAKiW,EAAEtU,GACP1B,EAAKgW,EAAErU,GAAK,EACZlM,EAAIugB,EAAE7Z,QACNmN,EAAI0M,EAAE4N,KACNruB,EAAI+T,EAAE3U,OAAS,EACjBoL,EAAK,IAAMtK,EAAE6T,EAAEvJ,GAAKuJ,EAAEvJ,EAAK,MAAKiW,EAAEtU,GAAKqpC,EAAOhsC,KAAKuK,EAAGA,EAAEvJ,KACxDC,EAAKzK,IAAME,EAAE6T,EAAEtJ,GAAKsJ,EAAEtJ,EAAK,MAAKgW,EAAErU,GAAKopC,EAAO/rC,MAAMsK,EAAGA,EAAEtJ,KAvP/DpC,GAAU4rB,KAAO,gBACV4gB,QAAQpxC,SAAQ7C,GAAKA,EAAEqzB,SACxBpyB,KAAK+jC,MAAM/jC,KAAK+jC,KAAK3R,QAG3B5rB,GAAUsD,OAAS,SAAU8U,EAAG9W,SACxBi8B,EAAO/jC,KAAK+jC,KACZ6P,EAAO5zC,KAAKgzC,QACZxmB,EAAO5N,EAAE4N,KACTpY,EAAIw/B,GAAQA,EAAKr2C,WACnBa,KAEA2lC,EAAM,KACH3lC,EAAIwgB,EAAE5N,GAAI5S,EAAIwgB,EAAEtU,KAAMlM,EAAG2lC,EAAK/S,IAAIxE,EAAKpuB,QAEvCA,EAAIwgB,EAAE7N,GAAI3S,EAAIwgB,EAAErU,KAAMnM,EAAG2lC,EAAKpiC,IAAI6qB,EAAKpuB,IAE5C2lC,EAAK38B,IAAIU,OAGN1J,EAAI,EAAGA,EAAIgW,IAAKhW,EAAGw1C,EAAKx1C,GAAG0L,OAAO8U,EAAG9W,IAsF5CurC,GAAOjY,WAAa,MACV,kBACI,WACE,UAEJ,CAAC,MACD,YACA,WACP,MACO,eACA,eACC,GACR,MACO,WACA,cACC,SACC0X,GAAerzC,OAAO4lC,KAC/B,MACO,cACA,eACA,SACC,GACR,MACO,cACA,cACA,SACC,GACR,MACO,UACA,eACA,SACC,GACR,MACO,aACA,eACA,SACC,SACC,UACC,CAAC,KAAM,IACjB,MACO,mBACA,mBACG,KAGfr9B,GAASqrC,GAAQpa,GAAW,CAC1B5pB,UAAUtQ,EAAG0yB,QACNc,MAAQd,EAAMc,YAEbtB,EAAMlyB,EAAEizB,WACRnB,EAAMD,GAAc7xB,EAAE4d,MACtBlc,EAAMgjC,GAAS1kC,EAAEypC,SACjB7xB,EAAQ7O,GAAK9H,KAAK2W,MAAMlW,EAAIqH,QAG9BirB,EAAQ/yB,KAAK+yB,MAEZA,IAAS9B,IACZ8B,EAAQ/yB,KAAK+yB,MAAQ,IAAIggB,GAAYh0C,IAInCkyB,GAAOQ,EAAMO,SAASe,EAAMqV,cACzB/mC,MAAQ,GACbowB,EAAMoE,MAAMpE,EAAMmF,QAAQ9uB,GAAK6O,EAAM7O,GAAGnG,IAAImG,OAE5C2pB,EAAMoE,MAAMpE,EAAM2E,KAAKtuB,GAAK6O,EAAM7O,GAAGgoB,OAAOhoB,KAC5C2pB,EAAMoE,MAAMpE,EAAM0E,KAAKruB,GAAK6O,EAAM7O,GAAGnG,IAAImG,UAItC,IAAIjK,EAAI,EAAGM,EAAI6B,KAAKymC,MAAO5oC,EAAIM,IAAKN,EACvCy1C,GAAiBtzC,KAAKumC,MAAM1oC,GAAIk1B,EAAOlC,EAAK9xB,eAGzC0nC,MAAQ,OACRF,MAAQ,GAEN9U,EAAML,OAAOH,GAAKW,SAASmB,EAAMsV,UAG1C1xB,MAAMlW,OACAkW,EAAQ3W,KAAKqB,MAAMZ,UAElBkW,IACHA,EAAQ3W,KAAKqB,MAAMZ,GAAO4oC,GAAW9Y,IACrC5Z,EAAM4b,OAAS,GAGb5b,EAAM4b,MAAQvyB,KAAKuyB,QACrB5b,EAAM4b,MAAQvyB,KAAKuyB,WACdgU,MAAMvmC,KAAKymC,SAAW9vB,GAGtBA,2dEl8HX,MAAMk9B,GAAK1xC,KAAK26B,GACZgX,GAAM,EAAID,GACVE,GAAU,KACVC,GAAaF,GAAMC,GAEvB,SAASE,UACFC,IAAMl0C,KAAKm0C,SACXC,IAAMp0C,KAAKq0C,IAAM,UACjBt1C,EAAI,GAGX,SAASzB,YACA,IAAI22C,GCZE,YAAS/xC,UACf,kBACEA,MDaNsE,UAAYlJ,GAAKkJ,UAAY,CAChC6D,YAAa4pC,GACbK,OAAQ,SAASpyC,EAAG2Q,QACb9T,GAAK,KAAOiB,KAAKk0C,IAAMl0C,KAAKo0C,KAAOlyC,GAAK,KAAOlC,KAAKm0C,IAAMn0C,KAAKq0C,KAAOxhC,IAE7E0hC,UAAW,WACQ,OAAbv0C,KAAKo0C,WACFA,IAAMp0C,KAAKk0C,IAAKl0C,KAAKq0C,IAAMr0C,KAAKm0C,SAChCp1C,GAAK,MAGdy1C,OAAQ,SAAStyC,EAAG2Q,QACb9T,GAAK,KAAOiB,KAAKo0C,KAAOlyC,GAAK,KAAOlC,KAAKq0C,KAAOxhC,IAEvD4hC,iBAAkB,SAASC,EAAIC,EAAIzyC,EAAG2Q,QAC/B9T,GAAK,MAAQ21C,EAAM,MAAQC,EAAM,KAAO30C,KAAKo0C,KAAOlyC,GAAK,KAAOlC,KAAKq0C,KAAOxhC,IAEnF+hC,cAAe,SAASF,EAAIC,EAAIxT,EAAI0T,EAAI3yC,EAAG2Q,QACpC9T,GAAK,MAAQ21C,EAAM,MAAQC,EAAM,MAAQxT,EAAM,MAAQ0T,EAAM,KAAO70C,KAAKo0C,KAAOlyC,GAAK,KAAOlC,KAAKq0C,KAAOxhC,IAE/GiiC,MAAO,SAASJ,EAAIC,EAAIxT,EAAI0T,EAAI5zC,GAC9ByzC,GAAMA,EAAIC,GAAMA,EAAIxT,GAAMA,EAAI0T,GAAMA,EAAI5zC,GAAKA,MACzCqO,EAAKtP,KAAKo0C,IACV7kC,EAAKvP,KAAKq0C,IACVU,EAAM5T,EAAKuT,EACXM,EAAMH,EAAKF,EACXM,EAAM3lC,EAAKolC,EACXQ,EAAM3lC,EAAKolC,EACXQ,EAAQF,EAAMA,EAAMC,EAAMA,KAG1Bj0C,EAAI,EAAG,MAAM,IAAIjD,MAAM,oBAAsBiD,MAGhC,OAAbjB,KAAKo0C,SACFr1C,GAAK,KAAOiB,KAAKo0C,IAAMM,GAAM,KAAO10C,KAAKq0C,IAAMM,QAIjD,GAAMQ,EAAQpB,GAKd,GAAM5xC,KAAKI,IAAI2yC,EAAMH,EAAMC,EAAMC,GAAOlB,IAAa9yC,EAKrD,KACCm0C,EAAMjU,EAAK7xB,EACX+lC,EAAMR,EAAKtlC,EACX+lC,EAAQP,EAAMA,EAAMC,EAAMA,EAC1BO,EAAQH,EAAMA,EAAMC,EAAMA,EAC1BG,EAAMrzC,KAAK6Q,KAAKsiC,GAChBG,EAAMtzC,KAAK6Q,KAAKmiC,GAChBptC,EAAI9G,EAAIkB,KAAKuzC,KAAK7B,GAAK1xC,KAAKwzC,MAAML,EAAQH,EAAQI,IAAU,EAAIC,EAAMC,KAAS,GAC/EG,EAAM7tC,EAAI0tC,EACVI,EAAM9tC,EAAIytC,EAGVrzC,KAAKI,IAAIqzC,EAAM,GAAK7B,UACjBh1C,GAAK,KAAO21C,EAAKkB,EAAMX,GAAO,KAAON,EAAKiB,EAAMV,SAGlDn2C,GAAK,IAAMkC,EAAI,IAAMA,EAAI,WAAai0C,EAAME,EAAMH,EAAMI,GAAQ,KAAOr1C,KAAKo0C,IAAMM,EAAKmB,EAAMd,GAAO,KAAO/0C,KAAKq0C,IAAMM,EAAKkB,EAAMb,aApBjIj2C,GAAK,KAAOiB,KAAKo0C,IAAMM,GAAM,KAAO10C,KAAKq0C,IAAMM,UAuBxD7kC,IAAK,SAAS5N,EAAG2Q,EAAG5R,EAAGqiC,EAAIE,EAAIsS,GAC7B5zC,GAAKA,EAAG2Q,GAAKA,EAAWijC,IAAQA,MAC5BpmC,GADYzO,GAAKA,GACRkB,KAAK4zC,IAAIzS,GAClB1zB,EAAK3O,EAAIkB,KAAK6zC,IAAI1S,GAClBh0B,EAAKpN,EAAIwN,EACTH,EAAKsD,EAAIjD,EACTqmC,EAAK,EAAIH,EACTlyC,EAAKkyC,EAAMxS,EAAKE,EAAKA,EAAKF,KAG1BriC,EAAI,EAAG,MAAM,IAAIjD,MAAM,oBAAsBiD,GAGhC,OAAbjB,KAAKo0C,SACFr1C,GAAK,IAAMuQ,EAAK,IAAMC,GAIpBpN,KAAKI,IAAIvC,KAAKo0C,IAAM9kC,GAAMykC,IAAW5xC,KAAKI,IAAIvC,KAAKq0C,IAAM9kC,GAAMwkC,WACjEh1C,GAAK,IAAMuQ,EAAK,IAAMC,GAIxBtO,IAGD2C,EAAK,IAAGA,EAAKA,EAAKkwC,GAAMA,IAGxBlwC,EAAKowC,QACFj1C,GAAK,IAAMkC,EAAI,IAAMA,EAAI,QAAUg1C,EAAK,KAAO/zC,EAAIwN,GAAM,KAAOmD,EAAIjD,GAAM,IAAM3O,EAAI,IAAMA,EAAI,QAAUg1C,EAAK,KAAOj2C,KAAKo0C,IAAM9kC,GAAM,KAAOtP,KAAKq0C,IAAM9kC,GAIrJ3L,EAAKmwC,UACPh1C,GAAK,IAAMkC,EAAI,IAAMA,EAAI,SAAW2C,GAAMiwC,IAAO,IAAMoC,EAAK,KAAOj2C,KAAKo0C,IAAMlyC,EAAIjB,EAAIkB,KAAK4zC,IAAIvS,IAAO,KAAOxjC,KAAKq0C,IAAMxhC,EAAI5R,EAAIkB,KAAK6zC,IAAIxS,OAGlJ0S,KAAM,SAASh0C,EAAG2Q,EAAG+L,EAAG+c,QACjB58B,GAAK,KAAOiB,KAAKk0C,IAAMl0C,KAAKo0C,KAAOlyC,GAAK,KAAOlC,KAAKm0C,IAAMn0C,KAAKq0C,KAAOxhC,GAAK,MAAQ+L,EAAK,MAAQ+c,EAAK,KAAQ/c,EAAK,KAEzH7V,SAAU,kBACD/I,KAAKjB,IE7HT,IAAIwD,GAAMJ,KAAKI,IACXghC,GAAQphC,KAAKohC,MACbwS,GAAM5zC,KAAK4zC,IACXrxC,GAAMvC,KAAKuC,IACXD,GAAMtC,KAAKsC,IACXuxC,GAAM7zC,KAAK6zC,IACXhjC,GAAO7Q,KAAK6Q,KAEZ+gC,GAAU,MACVF,GAAK1xC,KAAK26B,GACVqZ,GAAStC,GAAK,EACdC,GAAM,EAAID,GAEd,SAAS8B,GAAKzzC,UACZA,EAAI,EAAI,EAAIA,GAAK,EAAI2xC,GAAK1xC,KAAKwzC,KAAKzzC,GAGtC,SAASk0C,GAAKl0C,UACZA,GAAK,EAAIi0C,GAASj0C,IAAM,GAAKi0C,GAASh0C,KAAKi0C,KAAKl0C,GCdzD,SAASm0C,GAAenkC,UACfA,EAAEokC,YAGX,SAASC,GAAerkC,UACfA,EAAEskC,YAGX,SAASC,GAAcvkC,UACdA,EAAEwkC,WAGX,SAASC,GAAYzkC,UACZA,EAAE0kC,SAGX,SAASC,GAAY3kC,UACZA,GAAKA,EAAE4kC,SAGhB,SAASC,GAAUznC,EAAIC,EAAImlC,EAAIC,EAAIxT,EAAI0T,EAAImC,EAAIC,OACzCC,EAAMxC,EAAKplC,EAAI6nC,EAAMxC,EAAKplC,EAC1B6nC,EAAMJ,EAAK7V,EAAIkW,EAAMJ,EAAKpC,EAC1B/sC,EAAIuvC,EAAMH,EAAME,EAAMD,OACtBrvC,EAAIA,EAAIisC,UAEL,CAACzkC,GADRxH,GAAKsvC,GAAO7nC,EAAKslC,GAAMwC,GAAO/nC,EAAK6xB,IAAOr5B,GACzBovC,EAAK3nC,EAAKzH,EAAIqvC,GAKjC,SAASG,GAAehoC,EAAIC,EAAImlC,EAAIC,EAAI/rC,EAAI2uC,EAAItB,OAC1ChB,EAAM3lC,EAAKolC,EACXQ,EAAM3lC,EAAKolC,EACX/vC,GAAMqxC,EAAKsB,GAAMA,GAAMvkC,GAAKiiC,EAAMA,EAAMC,EAAMA,GAC9CsC,EAAK5yC,EAAKswC,EACVuC,GAAM7yC,EAAKqwC,EACXyC,EAAMpoC,EAAKkoC,EACXG,EAAMpoC,EAAKkoC,EACXP,EAAMxC,EAAK8C,EACXL,EAAMxC,EAAK8C,EACXG,GAAOF,EAAMR,GAAO,EACpBW,GAAOF,EAAMR,GAAO,EACpBznC,EAAKwnC,EAAMQ,EACX9nC,EAAKunC,EAAMQ,EACXG,EAAKpoC,EAAKA,EAAKE,EAAKA,EACpB3O,EAAI2H,EAAK2uC,EACTQ,EAAIL,EAAMP,EAAMD,EAAMS,EACtBzlC,GAAKtC,EAAK,GAAK,EAAI,GAAKoD,GAAKtO,GAAI,EAAGzD,EAAIA,EAAI62C,EAAKC,EAAIA,IACrDC,GAAOD,EAAInoC,EAAKF,EAAKwC,GAAK4lC,EAC1BG,IAAQF,EAAIroC,EAAKE,EAAKsC,GAAK4lC,EAC3BI,GAAOH,EAAInoC,EAAKF,EAAKwC,GAAK4lC,EAC1BK,IAAQJ,EAAIroC,EAAKE,EAAKsC,GAAK4lC,EAC3BM,EAAMJ,EAAMJ,EACZS,EAAMJ,EAAMJ,EACZS,EAAMJ,EAAMN,EACZW,EAAMJ,EAAMN,SAIZO,EAAMA,EAAMC,EAAMA,EAAMC,EAAMA,EAAMC,EAAMA,IAAKP,EAAME,EAAKD,EAAME,GAE7D,CACLK,GAAIR,EACJS,GAAIR,EACJhD,KAAMuC,EACNtC,KAAMuC,EACNC,IAAKM,GAAOpvC,EAAK3H,EAAI,GACrB02C,IAAKM,GAAOrvC,EAAK3H,EAAI,ICtEV,YAASiB,SACF,iBAANA,GAAkB,WAAYA,EACxCA,EACA7B,MAAMoU,KAAKvS,GCLjB,SAASw2C,GAAO3sB,QACT4sB,SAAW5sB,EA2BH,YAASA,UACf,IAAI2sB,GAAO3sB,GC7Bb,SAAS7pB,GAAEhE,UACTA,EAAE,GAGJ,SAAS2U,GAAE3U,UACTA,EAAE,GCCI,YAASgE,EAAG2Q,OACrB+lC,EAAUp1C,IAAS,GACnBuoB,EAAU,KACV8sB,EAAQC,GACR13C,EAAS,cAKJ+O,EAAKqc,OACR3uB,EAEAqU,EAEA6mC,EAHA56C,GAAKquB,EAAO1qB,GAAM0qB,IAAOjvB,OAEzBy7C,GAAW,MAGA,MAAXjtB,IAAiB3qB,EAASy3C,EAAME,EAASz7C,OAExCO,EAAI,EAAGA,GAAKM,IAAKN,IACdA,EAAIM,GAAKy6C,EAAQ1mC,EAAIsa,EAAK3uB,GAAIA,EAAG2uB,MAAWwsB,KAC5CA,GAAYA,GAAU53C,EAAO63C,YAC5B73C,EAAO83C,WAEVF,GAAU53C,EAAO8O,OAAOhO,EAAEgQ,EAAGrU,EAAG2uB,IAAQ3Z,EAAEX,EAAGrU,EAAG2uB,OAGlDusB,EAAQ,OAAO33C,EAAS,KAAM23C,EAAS,IAAM,YApBnD72C,EAAiB,mBAANA,EAAmBA,OAAWiF,IAANjF,EAAmBi3C,GAAS31C,GAAStB,GACxE2Q,EAAiB,mBAANA,EAAmBA,OAAW1L,IAAN0L,EAAmBumC,GAAS51C,GAASqP,GAsBxE1C,EAAKjO,EAAI,SAASnD,UACTgB,UAAUxC,QAAU2E,EAAiB,mBAANnD,EAAmBA,EAAIyE,IAAUzE,GAAIoR,GAAQjO,GAGrFiO,EAAK0C,EAAI,SAAS9T,UACTgB,UAAUxC,QAAUsV,EAAiB,mBAAN9T,EAAmBA,EAAIyE,IAAUzE,GAAIoR,GAAQ0C,GAGrF1C,EAAKyoC,QAAU,SAAS75C,UACfgB,UAAUxC,QAAUq7C,EAAuB,mBAAN75C,EAAmBA,EAAIyE,KAAWzE,GAAIoR,GAAQyoC,GAG5FzoC,EAAK0oC,MAAQ,SAAS95C,UACbgB,UAAUxC,QAAUs7C,EAAQ95C,EAAc,MAAXgtB,IAAoB3qB,EAASy3C,EAAM9sB,IAAW5b,GAAQ0oC,GAG9F1oC,EAAK4b,QAAU,SAAShtB,UACfgB,UAAUxC,QAAe,MAALwB,EAAYgtB,EAAU3qB,EAAS,KAAOA,EAASy3C,EAAM9sB,EAAUhtB,GAAIoR,GAAQ4b,GAGjG5b,EChDM,YAASb,EAAIC,EAAIolC,OAC1BD,EAAK,KACLkE,EAAUp1C,IAAS,GACnBuoB,EAAU,KACV8sB,EAAQC,GACR13C,EAAS,cAMJi4C,EAAK7sB,OACR3uB,EACAO,EACAmD,EAEA2Q,EAEA6mC,EAHA56C,GAAKquB,EAAO1qB,GAAM0qB,IAAOjvB,OAEzBy7C,GAAW,EAEXM,EAAM,IAAIj5C,MAAMlC,GAChBo7C,EAAM,IAAIl5C,MAAMlC,OAEL,MAAX4tB,IAAiB3qB,EAASy3C,EAAME,EAASz7C,OAExCO,EAAI,EAAGA,GAAKM,IAAKN,EAAG,MACjBA,EAAIM,GAAKy6C,EAAQ1mC,EAAIsa,EAAK3uB,GAAIA,EAAG2uB,MAAWwsB,KAC5CA,GAAYA,EACd56C,EAAIP,EACJuD,EAAOo4C,YACPp4C,EAAO63C,gBACF,KACL73C,EAAO83C,UACP93C,EAAO63C,YACF13C,EAAI1D,EAAI,EAAG0D,GAAKnD,IAAKmD,EACxBH,EAAO8O,MAAMopC,EAAI/3C,GAAIg4C,EAAIh4C,IAE3BH,EAAO83C,UACP93C,EAAOq4C,UAGPT,IACFM,EAAIz7C,IAAMyR,EAAG4C,EAAGrU,EAAG2uB,GAAO+sB,EAAI17C,IAAM0R,EAAG2C,EAAGrU,EAAG2uB,GAC7CprB,EAAO8O,MAAMwkC,GAAMA,EAAGxiC,EAAGrU,EAAG2uB,GAAQ8sB,EAAIz7C,GAAI82C,GAAMA,EAAGziC,EAAGrU,EAAG2uB,GAAQ+sB,EAAI17C,QAIvEk7C,EAAQ,OAAO33C,EAAS,KAAM23C,EAAS,IAAM,cAG1CW,WACAvpC,KAAOyoC,QAAQA,GAASC,MAAMA,GAAO9sB,QAAQA,UA3CtDzc,EAAmB,mBAAPA,EAAoBA,OAAanI,IAAPmI,EAAoB6pC,GAAS31C,IAAU8L,GAC7EC,EAAmB,mBAAPA,EAAoBA,EAA0B/L,QAAb2D,IAAPoI,EAA6B,GAAeA,GAClFolC,EAAmB,mBAAPA,EAAoBA,OAAaxtC,IAAPwtC,EAAoByE,GAAS51C,IAAUmxC,GA4C7E0E,EAAKn3C,EAAI,SAASnD,UACTgB,UAAUxC,QAAU+R,EAAkB,mBAANvQ,EAAmBA,EAAIyE,IAAUzE,GAAI21C,EAAK,KAAM2E,GAAQ/pC,GAGjG+pC,EAAK/pC,GAAK,SAASvQ,UACVgB,UAAUxC,QAAU+R,EAAkB,mBAANvQ,EAAmBA,EAAIyE,IAAUzE,GAAIs6C,GAAQ/pC,GAGtF+pC,EAAK3E,GAAK,SAAS31C,UACVgB,UAAUxC,QAAUm3C,EAAU,MAAL31C,EAAY,KAAoB,mBAANA,EAAmBA,EAAIyE,IAAUzE,GAAIs6C,GAAQ3E,GAGzG2E,EAAKxmC,EAAI,SAAS9T,UACTgB,UAAUxC,QAAUgS,EAAkB,mBAANxQ,EAAmBA,EAAIyE,IAAUzE,GAAI41C,EAAK,KAAM0E,GAAQ9pC,GAGjG8pC,EAAK9pC,GAAK,SAASxQ,UACVgB,UAAUxC,QAAUgS,EAAkB,mBAANxQ,EAAmBA,EAAIyE,IAAUzE,GAAIs6C,GAAQ9pC,GAGtF8pC,EAAK1E,GAAK,SAAS51C,UACVgB,UAAUxC,QAAUo3C,EAAU,MAAL51C,EAAY,KAAoB,mBAANA,EAAmBA,EAAIyE,IAAUzE,GAAIs6C,GAAQ1E,GAGzG0E,EAAKM,OACLN,EAAKO,OAAS,kBACLF,IAAWx3C,EAAEoN,GAAIuD,EAAEtD,IAG5B8pC,EAAKQ,OAAS,kBACLH,IAAWx3C,EAAEoN,GAAIuD,EAAE8hC,IAG5B0E,EAAKS,OAAS,kBACLJ,IAAWx3C,EAAEwyC,GAAI7hC,EAAEtD,IAG5B8pC,EAAKT,QAAU,SAAS75C,UACfgB,UAAUxC,QAAUq7C,EAAuB,mBAAN75C,EAAmBA,EAAIyE,KAAWzE,GAAIs6C,GAAQT,GAG5FS,EAAKR,MAAQ,SAAS95C,UACbgB,UAAUxC,QAAUs7C,EAAQ95C,EAAc,MAAXgtB,IAAoB3qB,EAASy3C,EAAM9sB,IAAWstB,GAAQR,GAG9FQ,EAAKttB,QAAU,SAAShtB,UACfgB,UAAUxC,QAAe,MAALwB,EAAYgtB,EAAU3qB,EAAS,KAAOA,EAASy3C,EAAM9sB,EAAUhtB,GAAIs6C,GAAQttB,GAGjGstB,KHzGF7yC,UAAY,CACjBgzC,UAAW,gBACJO,MAAQ,GAEfN,QAAS,gBACFM,MAAQ/nC,KAEfinC,UAAW,gBACJe,OAAS,GAEhBd,QAAS,YACHl5C,KAAK+5C,OAAyB,IAAf/5C,KAAK+5C,OAA+B,IAAhB/5C,KAAKg6C,SAAeh6C,KAAK24C,SAASpE,iBACpEwF,MAAQ,EAAI/5C,KAAK+5C,OAExB7pC,MAAO,SAAShO,EAAG2Q,UACjB3Q,GAAKA,EAAG2Q,GAAKA,EACL7S,KAAKg6C,aACN,OAAQA,OAAS,OAAQD,MAAQ/5C,KAAK24C,SAASnE,OAAOtyC,EAAG2Q,GAAK7S,KAAK24C,SAASrE,OAAOpyC,EAAG2Q,cACtF,OAAQmnC,OAAS,eACRrB,SAASnE,OAAOtyC,EAAG2Q,aIrBxB,CACbonC,KAAM,SAASluB,EAAS9kB,OAClBhG,EAAIkB,KAAK6Q,KAAK/L,EAAO4sC,IACzB9nB,EAAQuoB,OAAOrzC,EAAG,GAClB8qB,EAAQjc,IAAI,EAAG,EAAG7O,EAAG,EAAG6yC,MCNb,eCAR,SAAS5jC,GAAMgqC,EAAMh4C,EAAG2Q,GAC7BqnC,EAAKvB,SAAS/D,eACX,EAAIsF,EAAKhG,IAAMgG,EAAK9F,KAAO,GAC3B,EAAI8F,EAAK/F,IAAM+F,EAAK7F,KAAO,GAC3B6F,EAAKhG,IAAM,EAAIgG,EAAK9F,KAAO,GAC3B8F,EAAK/F,IAAM,EAAI+F,EAAK7F,KAAO,GAC3B6F,EAAKhG,IAAM,EAAIgG,EAAK9F,IAAMlyC,GAAK,GAC/Bg4C,EAAK/F,IAAM,EAAI+F,EAAK7F,IAAMxhC,GAAK,GAI7B,SAASsnC,GAAMpuB,QACf4sB,SAAW5sB,ECTlB,SAASquB,GAAYruB,QACd4sB,SAAW5sB,ECFlB,SAASsuB,GAAUtuB,QACZ4sB,SAAW5sB,ECDlB,SAASuuB,GAAOvuB,EAASwuB,QAClBC,OAAS,IAAIL,GAAMpuB,QACnB0uB,MAAQF,EHWfJ,GAAM3zC,UAAY,CAChBgzC,UAAW,gBACJO,MAAQ,GAEfN,QAAS,gBACFM,MAAQ/nC,KAEfinC,UAAW,gBACJ/E,IAAMl0C,KAAKo0C,IAChBp0C,KAAKm0C,IAAMn0C,KAAKq0C,IAAMriC,SACjBgoC,OAAS,GAEhBd,QAAS,kBACCl5C,KAAKg6C,aACN,EAAG9pC,GAAMlQ,KAAMA,KAAKo0C,IAAKp0C,KAAKq0C,UAC9B,OAAQsE,SAASnE,OAAOx0C,KAAKo0C,IAAKp0C,KAAKq0C,MAE1Cr0C,KAAK+5C,OAAyB,IAAf/5C,KAAK+5C,OAA+B,IAAhB/5C,KAAKg6C,SAAeh6C,KAAK24C,SAASpE,iBACpEwF,MAAQ,EAAI/5C,KAAK+5C,OAExB7pC,MAAO,SAAShO,EAAG2Q,UACjB3Q,GAAKA,EAAG2Q,GAAKA,EACL7S,KAAKg6C,aACN,OAAQA,OAAS,OAAQD,MAAQ/5C,KAAK24C,SAASnE,OAAOtyC,EAAG2Q,GAAK7S,KAAK24C,SAASrE,OAAOpyC,EAAG2Q,cACtF,OAAQmnC,OAAS,aACjB,OAAQA,OAAS,OAAQrB,SAASnE,QAAQ,EAAIx0C,KAAKk0C,IAAMl0C,KAAKo0C,KAAO,GAAI,EAAIp0C,KAAKm0C,IAAMn0C,KAAKq0C,KAAO,WAChGnkC,GAAMlQ,KAAMkC,EAAG2Q,QAErBqhC,IAAMl0C,KAAKo0C,IAAKp0C,KAAKo0C,IAAMlyC,OAC3BiyC,IAAMn0C,KAAKq0C,IAAKr0C,KAAKq0C,IAAMxhC,ICrCpCunC,GAAY5zC,UAAY,CACtBgzC,UAAW5V,GACX6V,QAAS7V,GACTqV,UAAW,gBACJ/E,IAAMl0C,KAAKo0C,IAAMp0C,KAAK06C,IAAM16C,KAAK26C,IAAM36C,KAAK46C,IACjD56C,KAAKm0C,IAAMn0C,KAAKq0C,IAAMr0C,KAAK66C,IAAM76C,KAAK86C,IAAM96C,KAAK+6C,IAAM/oC,SAClDgoC,OAAS,GAEhBd,QAAS,kBACCl5C,KAAKg6C,aACN,OACErB,SAASrE,OAAOt0C,KAAK06C,IAAK16C,KAAK66C,UAC/BlC,SAASpE,uBAGX,OACEoE,SAASrE,QAAQt0C,KAAK06C,IAAM,EAAI16C,KAAK26C,KAAO,GAAI36C,KAAK66C,IAAM,EAAI76C,KAAK86C,KAAO,QAC3EnC,SAASnE,QAAQx0C,KAAK26C,IAAM,EAAI36C,KAAK06C,KAAO,GAAI16C,KAAK86C,IAAM,EAAI96C,KAAK66C,KAAO,QAC3ElC,SAASpE,uBAGX,OACErkC,MAAMlQ,KAAK06C,IAAK16C,KAAK66C,UACrB3qC,MAAMlQ,KAAK26C,IAAK36C,KAAK86C,UACrB5qC,MAAMlQ,KAAK46C,IAAK56C,KAAK+6C,OAKhC7qC,MAAO,SAAShO,EAAG2Q,UACjB3Q,GAAKA,EAAG2Q,GAAKA,EACL7S,KAAKg6C,aACN,OAAQA,OAAS,OAAQU,IAAMx4C,EAAGlC,KAAK66C,IAAMhoC,aAC7C,OAAQmnC,OAAS,OAAQW,IAAMz4C,EAAGlC,KAAK86C,IAAMjoC,aAC7C,OAAQmnC,OAAS,OAAQY,IAAM14C,EAAGlC,KAAK+6C,IAAMloC,OAAQ8lC,SAASrE,QAAQt0C,KAAKk0C,IAAM,EAAIl0C,KAAKo0C,IAAMlyC,GAAK,GAAIlC,KAAKm0C,IAAM,EAAIn0C,KAAKq0C,IAAMxhC,GAAK,iBACpI3C,GAAMlQ,KAAMkC,EAAG2Q,QAErBqhC,IAAMl0C,KAAKo0C,IAAKp0C,KAAKo0C,IAAMlyC,OAC3BiyC,IAAMn0C,KAAKq0C,IAAKr0C,KAAKq0C,IAAMxhC,ICvCpCwnC,GAAU7zC,UAAY,CACpBgzC,UAAW,gBACJO,MAAQ,GAEfN,QAAS,gBACFM,MAAQ/nC,KAEfinC,UAAW,gBACJ/E,IAAMl0C,KAAKo0C,IAChBp0C,KAAKm0C,IAAMn0C,KAAKq0C,IAAMriC,SACjBgoC,OAAS,GAEhBd,QAAS,YACHl5C,KAAK+5C,OAAyB,IAAf/5C,KAAK+5C,OAA+B,IAAhB/5C,KAAKg6C,SAAeh6C,KAAK24C,SAASpE,iBACpEwF,MAAQ,EAAI/5C,KAAK+5C,OAExB7pC,MAAO,SAAShO,EAAG2Q,UACjB3Q,GAAKA,EAAG2Q,GAAKA,EACL7S,KAAKg6C,aACN,OAAQA,OAAS,aACjB,OAAQA,OAAS,aACjB,OAAQA,OAAS,MAAO1qC,GAAMtP,KAAKk0C,IAAM,EAAIl0C,KAAKo0C,IAAMlyC,GAAK,EAAGqN,GAAMvP,KAAKm0C,IAAM,EAAIn0C,KAAKq0C,IAAMxhC,GAAK,OAAQknC,MAAQ/5C,KAAK24C,SAASnE,OAAOllC,EAAIC,GAAMvP,KAAK24C,SAASrE,OAAOhlC,EAAIC,cAC7K,OAAQyqC,OAAS,UACb9pC,GAAMlQ,KAAMkC,EAAG2Q,QAErBqhC,IAAMl0C,KAAKo0C,IAAKp0C,KAAKo0C,IAAMlyC,OAC3BiyC,IAAMn0C,KAAKq0C,IAAKr0C,KAAKq0C,IAAMxhC,ICzBpCynC,GAAO9zC,UAAY,CACjByyC,UAAW,gBACJ+B,GAAK,QACLC,GAAK,QACLT,OAAOvB,aAEdC,QAAS,eACHh3C,EAAIlC,KAAKg7C,GACTnoC,EAAI7S,KAAKi7C,GACT78C,EAAI8D,EAAE3E,OAAS,KAEfa,EAAI,UAMF0J,EALAwH,EAAKpN,EAAE,GACPqN,EAAKsD,EAAE,GACPnD,EAAKxN,EAAE9D,GAAKkR,EACZM,EAAKiD,EAAEzU,GAAKmR,EACZ1R,GAAK,IAGAA,GAAKO,GACZ0J,EAAIjK,EAAIO,OACHo8C,OAAOtqC,MACVlQ,KAAKy6C,MAAQv4C,EAAErE,IAAM,EAAImC,KAAKy6C,QAAUnrC,EAAKxH,EAAI4H,GACjD1P,KAAKy6C,MAAQ5nC,EAAEhV,IAAM,EAAImC,KAAKy6C,QAAUlrC,EAAKzH,EAAI8H,SAKlDorC,GAAKh7C,KAAKi7C,GAAK,UACfT,OAAOtB,WAEdhpC,MAAO,SAAShO,EAAG2Q,QACZmoC,GAAGv8C,MAAMyD,QACT+4C,GAAGx8C,MAAMoU,YAIH,SAAUqoC,EAAOX,YAErBY,EAAOpvB,UACE,IAATwuB,EAAa,IAAIJ,GAAMpuB,GAAW,IAAIuuB,GAAOvuB,EAASwuB,UAG/DY,EAAOZ,KAAO,SAASA,UACdW,GAAQX,IAGVY,EAVM,CAWZ,KCvDI,SAASjrC,GAAMgqC,EAAMh4C,EAAG2Q,GAC7BqnC,EAAKvB,SAAS/D,cACZsF,EAAK9F,IAAM8F,EAAKkB,IAAMlB,EAAKQ,IAAMR,EAAKhG,KACtCgG,EAAK7F,IAAM6F,EAAKkB,IAAMlB,EAAKW,IAAMX,EAAK/F,KACtC+F,EAAKQ,IAAMR,EAAKkB,IAAMlB,EAAK9F,IAAMlyC,GACjCg4C,EAAKW,IAAMX,EAAKkB,IAAMlB,EAAK7F,IAAMxhC,GACjCqnC,EAAKQ,IACLR,EAAKW,KAIF,SAASQ,GAAStvB,EAASuvB,QAC3B3C,SAAW5sB,OACXqvB,IAAM,EAAIE,GAAW,EAG5BD,GAAS70C,UAAY,CACnBgzC,UAAW,gBACJO,MAAQ,GAEfN,QAAS,gBACFM,MAAQ/nC,KAEfinC,UAAW,gBACJ/E,IAAMl0C,KAAKo0C,IAAMp0C,KAAK06C,IAC3B16C,KAAKm0C,IAAMn0C,KAAKq0C,IAAMr0C,KAAK66C,IAAM7oC,SAC5BgoC,OAAS,GAEhBd,QAAS,kBACCl5C,KAAKg6C,aACN,OAAQrB,SAASnE,OAAOx0C,KAAK06C,IAAK16C,KAAK66C,gBACvC,EAAG3qC,GAAMlQ,KAAMA,KAAKo0C,IAAKp0C,KAAKq0C,MAEjCr0C,KAAK+5C,OAAyB,IAAf/5C,KAAK+5C,OAA+B,IAAhB/5C,KAAKg6C,SAAeh6C,KAAK24C,SAASpE,iBACpEwF,MAAQ,EAAI/5C,KAAK+5C,OAExB7pC,MAAO,SAAShO,EAAG2Q,UACjB3Q,GAAKA,EAAG2Q,GAAKA,EACL7S,KAAKg6C,aACN,OAAQA,OAAS,OAAQD,MAAQ/5C,KAAK24C,SAASnE,OAAOtyC,EAAG2Q,GAAK7S,KAAK24C,SAASrE,OAAOpyC,EAAG2Q,cACtF,OAAQmnC,OAAS,OAAQ5F,IAAMlyC,EAAGlC,KAAKq0C,IAAMxhC,aAC7C,OAAQmnC,OAAS,UACb9pC,GAAMlQ,KAAMkC,EAAG2Q,QAErBqhC,IAAMl0C,KAAKo0C,IAAKp0C,KAAKo0C,IAAMp0C,KAAK06C,IAAK16C,KAAK06C,IAAMx4C,OAChDiyC,IAAMn0C,KAAKq0C,IAAKr0C,KAAKq0C,IAAMr0C,KAAK66C,IAAK76C,KAAK66C,IAAMhoC,WAI1C,SAAUqoC,EAAOI,YAErBC,EAASxvB,UACT,IAAIsvB,GAAStvB,EAASuvB,UAG/BC,EAASD,QAAU,SAASA,UACnBJ,GAAQI,IAGVC,EAVM,CAWZ,GCzDI,SAASC,GAAezvB,EAASuvB,QACjC3C,SAAW5sB,OACXqvB,IAAM,EAAIE,GAAW,EAG5BE,GAAeh1C,UAAY,CACzBgzC,UAAW5V,GACX6V,QAAS7V,GACTqV,UAAW,gBACJ/E,IAAMl0C,KAAKo0C,IAAMp0C,KAAK06C,IAAM16C,KAAK26C,IAAM36C,KAAK46C,IAAM56C,KAAKy7C,IAC5Dz7C,KAAKm0C,IAAMn0C,KAAKq0C,IAAMr0C,KAAK66C,IAAM76C,KAAK86C,IAAM96C,KAAK+6C,IAAM/6C,KAAK07C,IAAM1pC,SAC7DgoC,OAAS,GAEhBd,QAAS,kBACCl5C,KAAKg6C,aACN,OACErB,SAASrE,OAAOt0C,KAAK26C,IAAK36C,KAAK86C,UAC/BnC,SAASpE,uBAGX,OACEoE,SAASnE,OAAOx0C,KAAK26C,IAAK36C,KAAK86C,UAC/BnC,SAASpE,uBAGX,OACErkC,MAAMlQ,KAAK26C,IAAK36C,KAAK86C,UACrB5qC,MAAMlQ,KAAK46C,IAAK56C,KAAK+6C,UACrB7qC,MAAMlQ,KAAKy7C,IAAKz7C,KAAK07C,OAKhCxrC,MAAO,SAAShO,EAAG2Q,UACjB3Q,GAAKA,EAAG2Q,GAAKA,EACL7S,KAAKg6C,aACN,OAAQA,OAAS,OAAQW,IAAMz4C,EAAGlC,KAAK86C,IAAMjoC,aAC7C,OAAQmnC,OAAS,OAAQrB,SAASrE,OAAOt0C,KAAK46C,IAAM14C,EAAGlC,KAAK+6C,IAAMloC,cAClE,OAAQmnC,OAAS,OAAQyB,IAAMv5C,EAAGlC,KAAK07C,IAAM7oC,gBACzC3C,GAAMlQ,KAAMkC,EAAG2Q,QAErBqhC,IAAMl0C,KAAKo0C,IAAKp0C,KAAKo0C,IAAMp0C,KAAK06C,IAAK16C,KAAK06C,IAAMx4C,OAChDiyC,IAAMn0C,KAAKq0C,IAAKr0C,KAAKq0C,IAAMr0C,KAAK66C,IAAK76C,KAAK66C,IAAMhoC,WAI1C,SAAUqoC,EAAOI,YAErBC,EAASxvB,UACT,IAAIyvB,GAAezvB,EAASuvB,UAGrCC,EAASD,QAAU,SAASA,UACnBJ,GAAQI,IAGVC,EAVM,CAWZ,GC1DI,SAASI,GAAa5vB,EAASuvB,QAC/B3C,SAAW5sB,OACXqvB,IAAM,EAAIE,GAAW,EAG5BK,GAAan1C,UAAY,CACvBgzC,UAAW,gBACJO,MAAQ,GAEfN,QAAS,gBACFM,MAAQ/nC,KAEfinC,UAAW,gBACJ/E,IAAMl0C,KAAKo0C,IAAMp0C,KAAK06C,IAC3B16C,KAAKm0C,IAAMn0C,KAAKq0C,IAAMr0C,KAAK66C,IAAM7oC,SAC5BgoC,OAAS,GAEhBd,QAAS,YACHl5C,KAAK+5C,OAAyB,IAAf/5C,KAAK+5C,OAA+B,IAAhB/5C,KAAKg6C,SAAeh6C,KAAK24C,SAASpE,iBACpEwF,MAAQ,EAAI/5C,KAAK+5C,OAExB7pC,MAAO,SAAShO,EAAG2Q,UACjB3Q,GAAKA,EAAG2Q,GAAKA,EACL7S,KAAKg6C,aACN,OAAQA,OAAS,aACjB,OAAQA,OAAS,aACjB,OAAQA,OAAS,OAAQD,MAAQ/5C,KAAK24C,SAASnE,OAAOx0C,KAAK06C,IAAK16C,KAAK66C,KAAO76C,KAAK24C,SAASrE,OAAOt0C,KAAK06C,IAAK16C,KAAK66C,gBAChH,OAAQb,OAAS,UACb9pC,GAAMlQ,KAAMkC,EAAG2Q,QAErBqhC,IAAMl0C,KAAKo0C,IAAKp0C,KAAKo0C,IAAMp0C,KAAK06C,IAAK16C,KAAK06C,IAAMx4C,OAChDiyC,IAAMn0C,KAAKq0C,IAAKr0C,KAAKq0C,IAAMr0C,KAAK66C,IAAK76C,KAAK66C,IAAMhoC,WAI1C,SAAUqoC,EAAOI,YAErBC,EAASxvB,UACT,IAAI4vB,GAAa5vB,EAASuvB,UAGnCC,EAASD,QAAU,SAASA,UACnBJ,GAAQI,IAGVC,EAVM,CAWZ,GC7CI,SAASrrC,GAAMgqC,EAAMh4C,EAAG2Q,OACzB6hC,EAAKwF,EAAK9F,IACVO,EAAKuF,EAAK7F,IACVlT,EAAK+Y,EAAKQ,IACV7F,EAAKqF,EAAKW,OAEVX,EAAK0B,OAAS7H,GAAS,KACrBtyC,EAAI,EAAIy4C,EAAK2B,QAAU,EAAI3B,EAAK0B,OAAS1B,EAAK4B,OAAS5B,EAAK6B,QAC5D59C,EAAI,EAAI+7C,EAAK0B,QAAU1B,EAAK0B,OAAS1B,EAAK4B,QAC9CpH,GAAMA,EAAKjzC,EAAIy4C,EAAKhG,IAAMgG,EAAK6B,QAAU7B,EAAKQ,IAAMR,EAAK2B,SAAW19C,EACpEw2C,GAAMA,EAAKlzC,EAAIy4C,EAAK/F,IAAM+F,EAAK6B,QAAU7B,EAAKW,IAAMX,EAAK2B,SAAW19C,KAGlE+7C,EAAK8B,OAASjI,GAAS,KACrBx1C,EAAI,EAAI27C,EAAK+B,QAAU,EAAI/B,EAAK8B,OAAS9B,EAAK4B,OAAS5B,EAAK6B,QAC5D3nC,EAAI,EAAI8lC,EAAK8B,QAAU9B,EAAK8B,OAAS9B,EAAK4B,QAC9C3a,GAAMA,EAAK5iC,EAAI27C,EAAK9F,IAAM8F,EAAK+B,QAAU/5C,EAAIg4C,EAAK6B,SAAW3nC,EAC7DygC,GAAMA,EAAKt2C,EAAI27C,EAAK7F,IAAM6F,EAAK+B,QAAUppC,EAAIqnC,EAAK6B,SAAW3nC,EAG/D8lC,EAAKvB,SAAS/D,cAAcF,EAAIC,EAAIxT,EAAI0T,EAAIqF,EAAKQ,IAAKR,EAAKW,KAG7D,SAASqB,GAAWnwB,EAASuQ,QACtBqc,SAAW5sB,OACXowB,OAAS7f,EAGhB4f,GAAW11C,UAAY,CACrBgzC,UAAW,gBACJO,MAAQ,GAEfN,QAAS,gBACFM,MAAQ/nC,KAEfinC,UAAW,gBACJ/E,IAAMl0C,KAAKo0C,IAAMp0C,KAAK06C,IAC3B16C,KAAKm0C,IAAMn0C,KAAKq0C,IAAMr0C,KAAK66C,IAAM7oC,SAC5B4pC,OAAS57C,KAAK87C,OAAS97C,KAAKg8C,OACjCh8C,KAAK67C,QAAU77C,KAAK+7C,QAAU/7C,KAAKi8C,QACnCj8C,KAAKg6C,OAAS,GAEhBd,QAAS,kBACCl5C,KAAKg6C,aACN,OAAQrB,SAASnE,OAAOx0C,KAAK06C,IAAK16C,KAAK66C,gBACvC,OAAQ3qC,MAAMlQ,KAAK06C,IAAK16C,KAAK66C,MAEhC76C,KAAK+5C,OAAyB,IAAf/5C,KAAK+5C,OAA+B,IAAhB/5C,KAAKg6C,SAAeh6C,KAAK24C,SAASpE,iBACpEwF,MAAQ,EAAI/5C,KAAK+5C,OAExB7pC,MAAO,SAAShO,EAAG2Q,MACjB3Q,GAAKA,EAAG2Q,GAAKA,EAET7S,KAAKg6C,OAAQ,KACXoC,EAAMp8C,KAAK06C,IAAMx4C,EACjBm6C,EAAMr8C,KAAK66C,IAAMhoC,OAChBmpC,OAAS75C,KAAK6Q,KAAKhT,KAAKi8C,QAAU95C,KAAKO,IAAI05C,EAAMA,EAAMC,EAAMA,EAAKr8C,KAAKm8C,gBAGtEn8C,KAAKg6C,aACN,OAAQA,OAAS,OAAQD,MAAQ/5C,KAAK24C,SAASnE,OAAOtyC,EAAG2Q,GAAK7S,KAAK24C,SAASrE,OAAOpyC,EAAG2Q,cACtF,OAAQmnC,OAAS,aACjB,OAAQA,OAAS,UACb9pC,GAAMlQ,KAAMkC,EAAG2Q,QAGrB+oC,OAAS57C,KAAK87C,OAAQ97C,KAAK87C,OAAS97C,KAAKg8C,YACzCH,QAAU77C,KAAK+7C,QAAS/7C,KAAK+7C,QAAU/7C,KAAKi8C,aAC5C/H,IAAMl0C,KAAKo0C,IAAKp0C,KAAKo0C,IAAMp0C,KAAK06C,IAAK16C,KAAK06C,IAAMx4C,OAChDiyC,IAAMn0C,KAAKq0C,IAAKr0C,KAAKq0C,IAAMr0C,KAAK66C,IAAK76C,KAAK66C,IAAMhoC,WAI1C,SAAUqoC,EAAO5e,YAErBggB,EAAWvwB,UACXuQ,EAAQ,IAAI4f,GAAWnwB,EAASuQ,GAAS,IAAI+e,GAAStvB,EAAS,UAGxEuwB,EAAWhgB,MAAQ,SAASA,UACnB4e,GAAQ5e,IAGVggB,EAVM,CAWZ,ICnFH,SAASC,GAAiBxwB,EAASuQ,QAC5Bqc,SAAW5sB,OACXowB,OAAS7f,EAGhBigB,GAAiB/1C,UAAY,CAC3BgzC,UAAW5V,GACX6V,QAAS7V,GACTqV,UAAW,gBACJ/E,IAAMl0C,KAAKo0C,IAAMp0C,KAAK06C,IAAM16C,KAAK26C,IAAM36C,KAAK46C,IAAM56C,KAAKy7C,IAC5Dz7C,KAAKm0C,IAAMn0C,KAAKq0C,IAAMr0C,KAAK66C,IAAM76C,KAAK86C,IAAM96C,KAAK+6C,IAAM/6C,KAAK07C,IAAM1pC,SAC7D4pC,OAAS57C,KAAK87C,OAAS97C,KAAKg8C,OACjCh8C,KAAK67C,QAAU77C,KAAK+7C,QAAU/7C,KAAKi8C,QACnCj8C,KAAKg6C,OAAS,GAEhBd,QAAS,kBACCl5C,KAAKg6C,aACN,OACErB,SAASrE,OAAOt0C,KAAK26C,IAAK36C,KAAK86C,UAC/BnC,SAASpE,uBAGX,OACEoE,SAASnE,OAAOx0C,KAAK26C,IAAK36C,KAAK86C,UAC/BnC,SAASpE,uBAGX,OACErkC,MAAMlQ,KAAK26C,IAAK36C,KAAK86C,UACrB5qC,MAAMlQ,KAAK46C,IAAK56C,KAAK+6C,UACrB7qC,MAAMlQ,KAAKy7C,IAAKz7C,KAAK07C,OAKhCxrC,MAAO,SAAShO,EAAG2Q,MACjB3Q,GAAKA,EAAG2Q,GAAKA,EAET7S,KAAKg6C,OAAQ,KACXoC,EAAMp8C,KAAK06C,IAAMx4C,EACjBm6C,EAAMr8C,KAAK66C,IAAMhoC,OAChBmpC,OAAS75C,KAAK6Q,KAAKhT,KAAKi8C,QAAU95C,KAAKO,IAAI05C,EAAMA,EAAMC,EAAMA,EAAKr8C,KAAKm8C,gBAGtEn8C,KAAKg6C,aACN,OAAQA,OAAS,OAAQW,IAAMz4C,EAAGlC,KAAK86C,IAAMjoC,aAC7C,OAAQmnC,OAAS,OAAQrB,SAASrE,OAAOt0C,KAAK46C,IAAM14C,EAAGlC,KAAK+6C,IAAMloC,cAClE,OAAQmnC,OAAS,OAAQyB,IAAMv5C,EAAGlC,KAAK07C,IAAM7oC,gBACzC3C,GAAMlQ,KAAMkC,EAAG2Q,QAGrB+oC,OAAS57C,KAAK87C,OAAQ97C,KAAK87C,OAAS97C,KAAKg8C,YACzCH,QAAU77C,KAAK+7C,QAAS/7C,KAAK+7C,QAAU/7C,KAAKi8C,aAC5C/H,IAAMl0C,KAAKo0C,IAAKp0C,KAAKo0C,IAAMp0C,KAAK06C,IAAK16C,KAAK06C,IAAMx4C,OAChDiyC,IAAMn0C,KAAKq0C,IAAKr0C,KAAKq0C,IAAMr0C,KAAK66C,IAAK76C,KAAK66C,IAAMhoC,WAI1C,SAAUqoC,EAAO5e,YAErBggB,EAAWvwB,UACXuQ,EAAQ,IAAIigB,GAAiBxwB,EAASuQ,GAAS,IAAIkf,GAAezvB,EAAS,UAGpFuwB,EAAWhgB,MAAQ,SAASA,UACnB4e,GAAQ5e,IAGVggB,EAVM,CAWZ,ICtEH,SAASE,GAAezwB,EAASuQ,QAC1Bqc,SAAW5sB,OACXowB,OAAS7f,EAGhBkgB,GAAeh2C,UAAY,CACzBgzC,UAAW,gBACJO,MAAQ,GAEfN,QAAS,gBACFM,MAAQ/nC,KAEfinC,UAAW,gBACJ/E,IAAMl0C,KAAKo0C,IAAMp0C,KAAK06C,IAC3B16C,KAAKm0C,IAAMn0C,KAAKq0C,IAAMr0C,KAAK66C,IAAM7oC,SAC5B4pC,OAAS57C,KAAK87C,OAAS97C,KAAKg8C,OACjCh8C,KAAK67C,QAAU77C,KAAK+7C,QAAU/7C,KAAKi8C,QACnCj8C,KAAKg6C,OAAS,GAEhBd,QAAS,YACHl5C,KAAK+5C,OAAyB,IAAf/5C,KAAK+5C,OAA+B,IAAhB/5C,KAAKg6C,SAAeh6C,KAAK24C,SAASpE,iBACpEwF,MAAQ,EAAI/5C,KAAK+5C,OAExB7pC,MAAO,SAAShO,EAAG2Q,MACjB3Q,GAAKA,EAAG2Q,GAAKA,EAET7S,KAAKg6C,OAAQ,KACXoC,EAAMp8C,KAAK06C,IAAMx4C,EACjBm6C,EAAMr8C,KAAK66C,IAAMhoC,OAChBmpC,OAAS75C,KAAK6Q,KAAKhT,KAAKi8C,QAAU95C,KAAKO,IAAI05C,EAAMA,EAAMC,EAAMA,EAAKr8C,KAAKm8C,gBAGtEn8C,KAAKg6C,aACN,OAAQA,OAAS,aACjB,OAAQA,OAAS,aACjB,OAAQA,OAAS,OAAQD,MAAQ/5C,KAAK24C,SAASnE,OAAOx0C,KAAK06C,IAAK16C,KAAK66C,KAAO76C,KAAK24C,SAASrE,OAAOt0C,KAAK06C,IAAK16C,KAAK66C,gBAChH,OAAQb,OAAS,UACb9pC,GAAMlQ,KAAMkC,EAAG2Q,QAGrB+oC,OAAS57C,KAAK87C,OAAQ97C,KAAK87C,OAAS97C,KAAKg8C,YACzCH,QAAU77C,KAAK+7C,QAAS/7C,KAAK+7C,QAAU/7C,KAAKi8C,aAC5C/H,IAAMl0C,KAAKo0C,IAAKp0C,KAAKo0C,IAAMp0C,KAAK06C,IAAK16C,KAAK06C,IAAMx4C,OAChDiyC,IAAMn0C,KAAKq0C,IAAKr0C,KAAKq0C,IAAMr0C,KAAK66C,IAAK76C,KAAK66C,IAAMhoC,WAI1C,SAAUqoC,EAAO5e,YAErBggB,EAAWvwB,UACXuQ,EAAQ,IAAIkgB,GAAezwB,EAASuQ,GAAS,IAAIqf,GAAa5vB,EAAS,UAGhFuwB,EAAWhgB,MAAQ,SAASA,UACnB4e,GAAQ5e,IAGVggB,EAVM,CAWZ,IC3DH,SAASG,GAAa1wB,QACf4sB,SAAW5sB,ECHlB,SAAS9pB,GAAKC,UACLA,EAAI,GAAK,EAAI,EAOtB,SAASw6C,GAAOxC,EAAM/Y,EAAI0T,OACpB8H,EAAKzC,EAAK9F,IAAM8F,EAAKhG,IACrB0I,EAAKzb,EAAK+Y,EAAK9F,IACfyI,GAAM3C,EAAK7F,IAAM6F,EAAK/F,MAAQwI,GAAMC,EAAK,IAAM,GAC/CE,GAAMjI,EAAKqF,EAAK7F,MAAQuI,GAAMD,EAAK,IAAM,GACzCz+C,GAAK2+C,EAAKD,EAAKE,EAAKH,IAAOA,EAAKC,UAC5B36C,GAAK46C,GAAM56C,GAAK66C,IAAO36C,KAAKsC,IAAItC,KAAKI,IAAIs6C,GAAK16C,KAAKI,IAAIu6C,GAAK,GAAM36C,KAAKI,IAAIrE,KAAO,EAI5F,SAAS6+C,GAAO7C,EAAMpyC,OAChB6zB,EAAIue,EAAK9F,IAAM8F,EAAKhG,WACjBvY,GAAK,GAAKue,EAAK7F,IAAM6F,EAAK/F,KAAOxY,EAAI7zB,GAAK,EAAIA,EAMvD,SAASoI,GAAMgqC,EAAM5hC,EAAIC,OACnBjJ,EAAK4qC,EAAKhG,IACV3kC,EAAK2qC,EAAK/F,IACVO,EAAKwF,EAAK9F,IACVO,EAAKuF,EAAK7F,IACV3kC,GAAMglC,EAAKplC,GAAM,EACrB4qC,EAAKvB,SAAS/D,cAActlC,EAAKI,EAAIH,EAAKG,EAAK4I,EAAIo8B,EAAKhlC,EAAIilC,EAAKjlC,EAAK6I,EAAIm8B,EAAIC,GAGhF,SAASqI,GAAUjxB,QACZ4sB,SAAW5sB,EA0ClB,SAASkxB,GAAUlxB,QACZ4sB,SAAW,IAAIuE,GAAenxB,GAOrC,SAASmxB,GAAenxB,QACjB4sB,SAAW5sB,ECvFlB,SAASoxB,GAAQpxB,QACV4sB,SAAW5sB,EA2ClB,SAASqxB,GAAcl7C,OACjBrE,EAEAuW,EADAjW,EAAI+D,EAAE3E,OAAS,EAEfkE,EAAI,IAAIpB,MAAMlC,GACdI,EAAI,IAAI8B,MAAMlC,GACd8C,EAAI,IAAIZ,MAAMlC,OAClBsD,EAAE,GAAK,EAAGlD,EAAE,GAAK,EAAG0C,EAAE,GAAKiB,EAAE,GAAK,EAAIA,EAAE,GACnCrE,EAAI,EAAGA,EAAIM,EAAI,IAAKN,EAAG4D,EAAE5D,GAAK,EAAGU,EAAEV,GAAK,EAAGoD,EAAEpD,GAAK,EAAIqE,EAAErE,GAAK,EAAIqE,EAAErE,EAAI,OAC5E4D,EAAEtD,EAAI,GAAK,EAAGI,EAAEJ,EAAI,GAAK,EAAG8C,EAAE9C,EAAI,GAAK,EAAI+D,EAAE/D,EAAI,GAAK+D,EAAE/D,GACnDN,EAAI,EAAGA,EAAIM,IAAKN,EAAGuW,EAAI3S,EAAE5D,GAAKU,EAAEV,EAAI,GAAIU,EAAEV,IAAMuW,EAAGnT,EAAEpD,IAAMuW,EAAInT,EAAEpD,EAAI,OAC1E4D,EAAEtD,EAAI,GAAK8C,EAAE9C,EAAI,GAAKI,EAAEJ,EAAI,GACvBN,EAAIM,EAAI,EAAGN,GAAK,IAAKA,EAAG4D,EAAE5D,IAAMoD,EAAEpD,GAAK4D,EAAE5D,EAAI,IAAMU,EAAEV,OAC1DU,EAAEJ,EAAI,IAAM+D,EAAE/D,GAAKsD,EAAEtD,EAAI,IAAM,EAC1BN,EAAI,EAAGA,EAAIM,EAAI,IAAKN,EAAGU,EAAEV,GAAK,EAAIqE,EAAErE,EAAI,GAAK4D,EAAE5D,EAAI,SACjD,CAAC4D,EAAGlD,GC3Db,SAAS8+C,GAAKtxB,EAASjkB,QAChB6wC,SAAW5sB,OACXuxB,GAAKx1C,ECFZ,SAASy1C,GAAU3+B,EAAG+c,MACI,oBAAbxB,UAA4BA,SAASqjB,cAAe,OACvDn/C,EAAI87B,SAASqjB,cAAc,aAE7Bn/C,GAAKA,EAAEo/C,kBACTp/C,EAAEmO,MAAQoS,EACVvgB,EAAEq/C,OAAS/hB,EACJt9B,SAIJ,KJLTo+C,GAAaj2C,UAAY,CACvBgzC,UAAW5V,GACX6V,QAAS7V,GACTqV,UAAW,gBACJe,OAAS,GAEhBd,QAAS,WACHl5C,KAAKg6C,QAAQh6C,KAAK24C,SAASpE,aAEjCrkC,MAAO,SAAShO,EAAG2Q,GACjB3Q,GAAKA,EAAG2Q,GAAKA,EACT7S,KAAKg6C,OAAQh6C,KAAK24C,SAASnE,OAAOtyC,EAAG2Q,IACpC7S,KAAKg6C,OAAS,EAAGh6C,KAAK24C,SAASrE,OAAOpyC,EAAG2Q,MCqBlDmqC,GAAUx2C,UAAY,CACpBgzC,UAAW,gBACJO,MAAQ,GAEfN,QAAS,gBACFM,MAAQ/nC,KAEfinC,UAAW,gBACJ/E,IAAMl0C,KAAKo0C,IAChBp0C,KAAKm0C,IAAMn0C,KAAKq0C,IAChBr0C,KAAK29C,IAAM3rC,SACNgoC,OAAS,GAEhBd,QAAS,kBACCl5C,KAAKg6C,aACN,OAAQrB,SAASnE,OAAOx0C,KAAKo0C,IAAKp0C,KAAKq0C,gBACvC,EAAGnkC,GAAMlQ,KAAMA,KAAK29C,IAAKZ,GAAO/8C,KAAMA,KAAK29C,OAE9C39C,KAAK+5C,OAAyB,IAAf/5C,KAAK+5C,OAA+B,IAAhB/5C,KAAKg6C,SAAeh6C,KAAK24C,SAASpE,iBACpEwF,MAAQ,EAAI/5C,KAAK+5C,OAExB7pC,MAAO,SAAShO,EAAG2Q,OACb0F,EAAKvG,OAEDa,GAAKA,GAAb3Q,GAAKA,KACKlC,KAAKo0C,KAAOvhC,IAAM7S,KAAKq0C,YACzBr0C,KAAKg6C,aACN,OAAQA,OAAS,OAAQD,MAAQ/5C,KAAK24C,SAASnE,OAAOtyC,EAAG2Q,GAAK7S,KAAK24C,SAASrE,OAAOpyC,EAAG2Q,cACtF,OAAQmnC,OAAS,aACjB,OAAQA,OAAS,EAAG9pC,GAAMlQ,KAAM+8C,GAAO/8C,KAAMuY,EAAKmkC,GAAO18C,KAAMkC,EAAG2Q,IAAK0F,iBACnErI,GAAMlQ,KAAMA,KAAK29C,IAAKplC,EAAKmkC,GAAO18C,KAAMkC,EAAG2Q,SAGjDqhC,IAAMl0C,KAAKo0C,IAAKp0C,KAAKo0C,IAAMlyC,OAC3BiyC,IAAMn0C,KAAKq0C,IAAKr0C,KAAKq0C,IAAMxhC,OAC3B8qC,IAAMplC,MAQd0kC,GAAUz2C,UAAYjG,OAAO8H,OAAO20C,GAAUx2C,YAAY0J,MAAQ,SAAShO,EAAG2Q,GAC7EmqC,GAAUx2C,UAAU0J,MAAMvQ,KAAKK,KAAM6S,EAAG3Q,IAO1Cg7C,GAAe12C,UAAY,CACzB8tC,OAAQ,SAASpyC,EAAG2Q,QAAU8lC,SAASrE,OAAOzhC,EAAG3Q,IACjDqyC,UAAW,gBAAkBoE,SAASpE,aACtCC,OAAQ,SAAStyC,EAAG2Q,QAAU8lC,SAASnE,OAAO3hC,EAAG3Q,IACjD0yC,cAAe,SAASF,EAAIC,EAAIxT,EAAI0T,EAAI3yC,EAAG2Q,QAAU8lC,SAAS/D,cAAcD,EAAID,EAAIG,EAAI1T,EAAItuB,EAAG3Q,KC1FjGi7C,GAAQ32C,UAAY,CAClBgzC,UAAW,gBACJO,MAAQ,GAEfN,QAAS,gBACFM,MAAQ/nC,KAEfinC,UAAW,gBACJ+B,GAAK,QACLC,GAAK,IAEZ/B,QAAS,eACHh3C,EAAIlC,KAAKg7C,GACTnoC,EAAI7S,KAAKi7C,GACT98C,EAAI+D,EAAE3E,UAENY,UACG47C,MAAQ/5C,KAAK24C,SAASnE,OAAOtyC,EAAE,GAAI2Q,EAAE,IAAM7S,KAAK24C,SAASrE,OAAOpyC,EAAE,GAAI2Q,EAAE,IACnE,IAAN1U,OACGw6C,SAASnE,OAAOtyC,EAAE,GAAI2Q,EAAE,iBAEzB+qC,EAAKR,GAAcl7C,GACnB27C,EAAKT,GAAcvqC,GACdvI,EAAK,EAAGC,EAAK,EAAGA,EAAKpM,IAAKmM,IAAMC,OAClCouC,SAAS/D,cAAcgJ,EAAG,GAAGtzC,GAAKuzC,EAAG,GAAGvzC,GAAKszC,EAAG,GAAGtzC,GAAKuzC,EAAG,GAAGvzC,GAAKpI,EAAEqI,GAAKsI,EAAEtI,KAKnFvK,KAAK+5C,OAAyB,IAAf/5C,KAAK+5C,OAAqB,IAAN57C,IAAU6B,KAAK24C,SAASpE,iBAC1DwF,MAAQ,EAAI/5C,KAAK+5C,WACjBiB,GAAKh7C,KAAKi7C,GAAK,MAEtB/qC,MAAO,SAAShO,EAAG2Q,QACZmoC,GAAGv8C,MAAMyD,QACT+4C,GAAGx8C,MAAMoU,KClClBwqC,GAAK72C,UAAY,CACfgzC,UAAW,gBACJO,MAAQ,GAEfN,QAAS,gBACFM,MAAQ/nC,KAEfinC,UAAW,gBACJ+B,GAAKh7C,KAAKi7C,GAAKjpC,SACfgoC,OAAS,GAEhBd,QAAS,WACH,EAAIl5C,KAAKs9C,IAAMt9C,KAAKs9C,GAAK,GAAqB,IAAhBt9C,KAAKg6C,QAAch6C,KAAK24C,SAASnE,OAAOx0C,KAAKg7C,GAAIh7C,KAAKi7C,KACpFj7C,KAAK+5C,OAAyB,IAAf/5C,KAAK+5C,OAA+B,IAAhB/5C,KAAKg6C,SAAeh6C,KAAK24C,SAASpE,YACrEv0C,KAAK+5C,OAAS,IAAG/5C,KAAKs9C,GAAK,EAAIt9C,KAAKs9C,GAAIt9C,KAAK+5C,MAAQ,EAAI/5C,KAAK+5C,QAEpE7pC,MAAO,SAAShO,EAAG2Q,UACjB3Q,GAAKA,EAAG2Q,GAAKA,EACL7S,KAAKg6C,aACN,OAAQA,OAAS,OAAQD,MAAQ/5C,KAAK24C,SAASnE,OAAOtyC,EAAG2Q,GAAK7S,KAAK24C,SAASrE,OAAOpyC,EAAG2Q,cACtF,OAAQmnC,OAAS,aAEhBh6C,KAAKs9C,IAAM,OACR3E,SAASnE,OAAOx0C,KAAKg7C,GAAInoC,QACzB8lC,SAASnE,OAAOtyC,EAAG2Q,OACnB,KACD6hC,EAAK10C,KAAKg7C,IAAM,EAAIh7C,KAAKs9C,IAAMp7C,EAAIlC,KAAKs9C,QACvC3E,SAASnE,OAAOE,EAAI10C,KAAKi7C,SACzBtC,SAASnE,OAAOE,EAAI7hC,SAK1BmoC,GAAK94C,EAAGlC,KAAKi7C,GAAKpoC,ICzB3B,MAAMirC,GAAW,IAAuB,oBAAVC,MAAwBA,MAAQ,KCbvD,SAASC,GAAUn7C,EAAQ2B,UACxBzE,UAAUxC,aACX,aACA,OAAQiH,MAAM3B,sBACL2B,MAAMA,GAAO3B,OAAOA,UAE7B7C,KAGF,SAASi+C,GAAiBp7C,EAAQq7C,UAC/Bn+C,UAAUxC,aACX,aACA,EACmB,mBAAXsF,EAAuB7C,KAAKk+C,aAAar7C,GAC/C7C,KAAKwE,MAAM3B,sBAIXA,OAAOA,GACgB,mBAAjBq7C,EAA6Bl+C,KAAKk+C,aAAaA,GACrDl+C,KAAKwE,MAAM05C,UAIbl+C,KCtBF,MAAMm+C,GAAWl1C,OAAO,YAEhB,SAASm1C,SAClBlqC,EAAQ,IAAI8T,IACZnlB,EAAS,GACT2B,EAAQ,GACR4oB,EAAU+wB,YAELx6C,EAAMuO,OACTzR,EAAMyR,EAAI,GAAIrU,EAAIqW,EAAMtV,IAAI6B,OAC3B5C,EAAG,IACFuvB,IAAY+wB,GAAU,OAAO/wB,EACjClZ,EAAM9M,IAAI3G,EAAK5C,EAAIgF,EAAOpE,KAAKyT,WAE1B1N,GAAO3G,EAAI,GAAK2G,EAAMjH,eAG/BoG,EAAMd,OAAS,SAAS9D,OACjBgB,UAAUxC,OAAQ,OAAOsF,EAAOnD,QACrCmD,EAAS,GAAIqR,EAAQ,IAAI8T,QACpB,MAAM3mB,KAAStC,EAAG,OACf0B,EAAMY,EAAQ,GAChB6S,EAAMxN,IAAIjG,IACdyT,EAAM9M,IAAI3G,EAAKoC,EAAOpE,KAAK4C,WAEtBsC,GAGTA,EAAMa,MAAQ,SAASzF,UACdgB,UAAUxC,QAAUiH,EAAQnE,MAAMoU,KAAK1V,GAAI4E,GAASa,EAAM9E,SAGnEiE,EAAMypB,QAAU,SAASruB,UAChBgB,UAAUxC,QAAU6vB,EAAUruB,EAAG4E,GAASypB,GAGnDzpB,EAAM0qB,KAAO,kBACJ+vB,GAAQv7C,EAAQ2B,GAAO4oB,QAAQA,IAGxC4wB,GAAUn+C,MAAM8D,EAAO5D,WAEhB4D,EC5CM,YAAS0G,EAAag0C,EAAS73C,GAC5C6D,EAAY7D,UAAY63C,EAAQ73C,UAAYA,EAC5CA,EAAU6D,YAAcA,EAGnB,SAASjE,GAAO8B,EAAQkQ,OACzB5R,EAAYjG,OAAO8H,OAAOH,EAAO1B,eAChC,IAAI/F,KAAO2X,EAAY5R,EAAU/F,GAAO2X,EAAW3X,UACjD+F,ECNF,SAAS83C,MAET,IAAIC,GAAS,GACTC,GAAW,EAAID,GAEtBE,GAAM,sBACNC,GAAM,gDACNC,GAAM,iDACNC,GAAQ,qBACRC,GAAe,IAAIpxC,OAAO,UAAY,CAACgxC,GAAKA,GAAKA,IAAO,QACxDK,GAAe,IAAIrxC,OAAO,UAAY,CAACkxC,GAAKA,GAAKA,IAAO,QACxDI,GAAgB,IAAItxC,OAAO,WAAa,CAACgxC,GAAKA,GAAKA,GAAKC,IAAO,QAC/DM,GAAgB,IAAIvxC,OAAO,WAAa,CAACkxC,GAAKA,GAAKA,GAAKD,IAAO,QAC/DO,GAAe,IAAIxxC,OAAO,UAAY,CAACixC,GAAKC,GAAKA,IAAO,QACxDO,GAAgB,IAAIzxC,OAAO,WAAa,CAACixC,GAAKC,GAAKA,GAAKD,IAAO,QAE/DS,GAAQ,CACVC,UAAW,SACXC,aAAc,SACdC,KAAM,MACNC,WAAY,QACZC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,MAAO,EACPC,eAAgB,SAChBC,KAAM,IACNC,WAAY,QACZC,MAAO,SACPC,UAAW,SACXC,UAAW,QACXC,WAAY,QACZC,UAAW,SACXC,MAAO,SACPC,eAAgB,QAChBC,SAAU,SACVC,QAAS,SACTC,KAAM,MACNC,SAAU,IACVC,SAAU,MACVC,cAAe,SACfC,SAAU,SACVC,UAAW,MACXC,SAAU,SACVC,UAAW,SACXC,YAAa,QACbC,eAAgB,QAChBC,WAAY,SACZC,WAAY,SACZC,QAAS,QACTC,WAAY,SACZC,aAAc,QACdC,cAAe,QACfC,cAAe,QACfC,cAAe,QACfC,cAAe,MACfC,WAAY,QACZC,SAAU,SACVC,YAAa,MACbC,QAAS,QACTC,QAAS,QACTC,WAAY,QACZC,UAAW,SACXC,YAAa,SACbC,YAAa,QACbC,QAAS,SACTC,UAAW,SACXC,WAAY,SACZC,KAAM,SACNC,UAAW,SACXC,KAAM,QACNC,MAAO,MACPC,YAAa,SACbC,KAAM,QACNC,SAAU,SACVC,QAAS,SACTC,UAAW,SACXC,OAAQ,QACRC,MAAO,SACPC,MAAO,SACPC,SAAU,SACVC,cAAe,SACfC,UAAW,QACXC,aAAc,SACdC,UAAW,SACXC,WAAY,SACZC,UAAW,SACXC,qBAAsB,SACtBC,UAAW,SACXC,WAAY,QACZC,UAAW,SACXC,UAAW,SACXC,YAAa,SACbC,cAAe,QACfC,aAAc,QACdC,eAAgB,QAChBC,eAAgB,QAChBC,eAAgB,SAChBC,YAAa,SACbC,KAAM,MACNC,UAAW,QACXC,MAAO,SACPC,QAAS,SACTC,OAAQ,QACRC,iBAAkB,QAClBC,WAAY,IACZC,aAAc,SACdC,aAAc,QACdC,eAAgB,QAChBC,gBAAiB,QACjBC,kBAAmB,MACnBC,gBAAiB,QACjBC,gBAAiB,SACjBC,aAAc,QACdC,UAAW,SACXC,UAAW,SACXC,SAAU,SACVC,YAAa,SACbC,KAAM,IACNC,QAAS,SACTC,MAAO,QACPC,UAAW,QACXC,OAAQ,SACRC,UAAW,SACXC,OAAQ,SACRC,cAAe,SACfC,UAAW,SACXC,cAAe,SACfC,cAAe,SACfC,WAAY,SACZC,UAAW,SACXC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,WAAY,SACZC,OAAQ,QACRC,cAAe,QACfC,IAAK,SACLC,UAAW,SACXC,UAAW,QACXC,YAAa,QACbC,OAAQ,SACRC,WAAY,SACZC,SAAU,QACVC,SAAU,SACVC,OAAQ,SACRC,OAAQ,SACRC,QAAS,QACTC,UAAW,QACXC,UAAW,QACXC,UAAW,QACXC,KAAM,SACNC,YAAa,MACbC,UAAW,QACXlS,IAAK,SACLmS,KAAM,MACNC,QAAS,SACTC,OAAQ,SACRC,UAAW,QACXC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,WAAY,SACZC,OAAQ,SACRC,YAAa,UAiBf,SAASC,YACAvoD,KAAKwoD,MAAMC,YAOpB,SAASC,YACA1oD,KAAKwoD,MAAMG,YAGL,SAASC,GAAMp6C,OACxB4F,EAAGrM,SACPyG,GAAUA,EAAS,IAAIwH,OAAO0B,eACtBtD,EAAIwqC,GAAMlpC,KAAKlH,KAAYzG,EAAIqM,EAAE,GAAG7W,OAAQ6W,EAAIy0C,SAASz0C,EAAE,GAAI,IAAW,IAANrM,EAAU+gD,GAAK10C,GAC/E,IAANrM,EAAU,IAAIghD,GAAK30C,GAAK,EAAI,GAAQA,GAAK,EAAI,IAAQA,GAAK,EAAI,GAAY,IAAJA,GAAiB,GAAJA,IAAY,EAAU,GAAJA,EAAU,GACzG,IAANrM,EAAUihD,GAAK50C,GAAK,GAAK,IAAMA,GAAK,GAAK,IAAMA,GAAK,EAAI,KAAW,IAAJA,GAAY,KACrE,IAANrM,EAAUihD,GAAM50C,GAAK,GAAK,GAAQA,GAAK,EAAI,IAAQA,GAAK,EAAI,GAAQA,GAAK,EAAI,IAAQA,GAAK,EAAI,GAAY,IAAJA,IAAkB,GAAJA,IAAY,EAAU,GAAJA,GAAY,KAClJ,OACCA,EAAIyqC,GAAanpC,KAAKlH,IAAW,IAAIu6C,GAAI30C,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAI,IAC3DA,EAAI0qC,GAAappC,KAAKlH,IAAW,IAAIu6C,GAAW,IAAP30C,EAAE,GAAW,IAAY,IAAPA,EAAE,GAAW,IAAY,IAAPA,EAAE,GAAW,IAAK,IAC/FA,EAAI2qC,GAAcrpC,KAAKlH,IAAWw6C,GAAK50C,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,KAC3DA,EAAI4qC,GAActpC,KAAKlH,IAAWw6C,GAAY,IAAP50C,EAAE,GAAW,IAAY,IAAPA,EAAE,GAAW,IAAY,IAAPA,EAAE,GAAW,IAAKA,EAAE,KAC/FA,EAAI6qC,GAAavpC,KAAKlH,IAAWy6C,GAAK70C,EAAE,GAAIA,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAK,IACpEA,EAAI8qC,GAAcxpC,KAAKlH,IAAWy6C,GAAK70C,EAAE,GAAIA,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAKA,EAAE,IACxE+qC,GAAM14C,eAAe+H,GAAUs6C,GAAK3J,GAAM3wC,IAC/B,gBAAXA,EAA2B,IAAIu6C,GAAI/2C,IAAKA,IAAKA,IAAK,GAClD,KAGR,SAAS82C,GAAK3qD,UACL,IAAI4qD,GAAI5qD,GAAK,GAAK,IAAMA,GAAK,EAAI,IAAU,IAAJA,EAAU,GAG1D,SAAS6qD,GAAK/nD,EAAG6P,EAAGvS,EAAGkD,UACjBA,GAAK,IAAGR,EAAI6P,EAAIvS,EAAIyT,KACjB,IAAI+2C,GAAI9nD,EAAG6P,EAAGvS,EAAGkD,GAGnB,SAASynD,GAAW1nD,UACnBA,aAAa88C,KAAQ98C,EAAIonD,GAAMpnD,IAChCA,EAEE,IAAIunD,IADXvnD,EAAIA,EAAEgnD,OACWvnD,EAAGO,EAAEsP,EAAGtP,EAAEjD,EAAGiD,EAAE2nD,SAFjB,IAAIJ,GAKd,SAASP,GAAIvnD,EAAG6P,EAAGvS,EAAG4qD,UACC,IAArBppD,UAAUxC,OAAe2rD,GAAWjoD,GAAK,IAAI8nD,GAAI9nD,EAAG6P,EAAGvS,EAAc,MAAX4qD,EAAkB,EAAIA,GAGlF,SAASJ,GAAI9nD,EAAG6P,EAAGvS,EAAG4qD,QACtBloD,GAAKA,OACL6P,GAAKA,OACLvS,GAAKA,OACL4qD,SAAWA,EA2BlB,SAASC,WACA,IAAMC,GAAIrpD,KAAKiB,GAAKooD,GAAIrpD,KAAK8Q,GAAKu4C,GAAIrpD,KAAKzB,GAGpD,SAAS+qD,SACH7nD,EAAIzB,KAAKmpD,eACC,KADQ1nD,EAAIyL,MAAMzL,GAAK,EAAIU,KAAKuC,IAAI,EAAGvC,KAAKsC,IAAI,EAAGhD,KAC/C,OAAS,SACrBU,KAAKuC,IAAI,EAAGvC,KAAKsC,IAAI,IAAKtC,KAAKsR,MAAMzT,KAAKiB,IAAM,IAAM,KACtDkB,KAAKuC,IAAI,EAAGvC,KAAKsC,IAAI,IAAKtC,KAAKsR,MAAMzT,KAAK8Q,IAAM,IAAM,KACtD3O,KAAKuC,IAAI,EAAGvC,KAAKsC,IAAI,IAAKtC,KAAKsR,MAAMzT,KAAKzB,IAAM,KACzC,IAANkD,EAAU,IAAM,KAAOA,EAAI,KAGpC,SAAS4nD,GAAIhoD,WACXA,EAAQc,KAAKuC,IAAI,EAAGvC,KAAKsC,IAAI,IAAKtC,KAAKsR,MAAMpS,IAAU,KACvC,GAAK,IAAM,IAAMA,EAAM0H,SAAS,IAGlD,SAASkgD,GAAKttB,EAAGn9B,EAAGuJ,EAAGtG,UACjBA,GAAK,EAAGk6B,EAAIn9B,EAAIuJ,EAAIiK,IACfjK,GAAK,GAAKA,GAAK,EAAG4zB,EAAIn9B,EAAIwT,IAC1BxT,GAAK,IAAGm9B,EAAI3pB,KACd,IAAIu3C,GAAI5tB,EAAGn9B,EAAGuJ,EAAGtG,GAGnB,SAAS+nD,GAAWhoD,MACrBA,aAAa+nD,GAAK,OAAO,IAAIA,GAAI/nD,EAAEm6B,EAAGn6B,EAAEhD,EAAGgD,EAAEuG,EAAGvG,EAAE2nD,YAChD3nD,aAAa88C,KAAQ98C,EAAIonD,GAAMpnD,KAChCA,EAAG,OAAO,IAAI+nD,MACf/nD,aAAa+nD,GAAK,OAAO/nD,MAEzBP,GADJO,EAAIA,EAAEgnD,OACIvnD,EAAI,IACV6P,EAAItP,EAAEsP,EAAI,IACVvS,EAAIiD,EAAEjD,EAAI,IACVkG,EAAMtC,KAAKsC,IAAIxD,EAAG6P,EAAGvS,GACrBmG,EAAMvC,KAAKuC,IAAIzD,EAAG6P,EAAGvS,GACrBo9B,EAAI3pB,IACJxT,EAAIkG,EAAMD,EACVsD,GAAKrD,EAAMD,GAAO,SAClBjG,GACam9B,EAAX16B,IAAMyD,GAAUoM,EAAIvS,GAAKC,EAAc,GAATsS,EAAIvS,GAC7BuS,IAAMpM,GAAUnG,EAAI0C,GAAKzC,EAAI,GAC5ByC,EAAI6P,GAAKtS,EAAI,EACvBA,GAAKuJ,EAAI,GAAMrD,EAAMD,EAAM,EAAIC,EAAMD,EACrCk3B,GAAK,IAELn9B,EAAIuJ,EAAI,GAAKA,EAAI,EAAI,EAAI4zB,EAEpB,IAAI4tB,GAAI5tB,EAAGn9B,EAAGuJ,EAAGvG,EAAE2nD,SAGrB,SAASM,GAAI9tB,EAAGn9B,EAAGuJ,EAAGohD,UACC,IAArBppD,UAAUxC,OAAeisD,GAAW7tB,GAAK,IAAI4tB,GAAI5tB,EAAGn9B,EAAGuJ,EAAc,MAAXohD,EAAkB,EAAIA,GAGzF,SAASI,GAAI5tB,EAAGn9B,EAAGuJ,EAAGohD,QACfxtB,GAAKA,OACLn9B,GAAKA,OACLuJ,GAAKA,OACLohD,SAAWA,EAyClB,SAASO,GAAQ/tB,EAAGguB,EAAIC,UAIV,KAHJjuB,EAAI,GAAKguB,GAAMC,EAAKD,GAAMhuB,EAAI,GAChCA,EAAI,IAAMiuB,EACVjuB,EAAI,IAAMguB,GAAMC,EAAKD,IAAO,IAAMhuB,GAAK,GACvCguB,GAxMRE,GAAOvL,GAAOsK,GAAO,CACnBv6B,KAAM,SAASy7B,UACNvpD,OAAOwpD,OAAO,IAAI/pD,KAAKqK,YAAarK,KAAM8pD,IAEnDE,YAAa,kBACJhqD,KAAKwoD,MAAMwB,eAEpBX,IAAKd,GACLE,UAAWF,GACX0B,UASF,kBACST,GAAWxpD,MAAMiqD,aATxBtB,UAAWD,GACX3/C,SAAU2/C,KA6DZmB,GAAOd,GAAKP,GAAKpiD,GAAOk4C,GAAO,CAC7BE,SAAU,SAASj9C,UACjBA,EAAS,MAALA,EAAYi9C,GAAWr8C,KAAKO,IAAI87C,GAAUj9C,GACvC,IAAIwnD,GAAI/oD,KAAKiB,EAAIM,EAAGvB,KAAK8Q,EAAIvP,EAAGvB,KAAKzB,EAAIgD,EAAGvB,KAAKmpD,UAE1D5K,OAAQ,SAASh9C,UACfA,EAAS,MAALA,EAAYg9C,GAASp8C,KAAKO,IAAI67C,GAAQh9C,GACnC,IAAIwnD,GAAI/oD,KAAKiB,EAAIM,EAAGvB,KAAK8Q,EAAIvP,EAAGvB,KAAKzB,EAAIgD,EAAGvB,KAAKmpD,UAE1DX,IAAK,kBACIxoD,MAETgqD,YAAa,kBACF,IAAOhqD,KAAKiB,GAAKjB,KAAKiB,EAAI,QAC1B,IAAOjB,KAAK8Q,GAAK9Q,KAAK8Q,EAAI,QAC1B,IAAO9Q,KAAKzB,GAAKyB,KAAKzB,EAAI,OAC3B,GAAKyB,KAAKmpD,SAAWnpD,KAAKmpD,SAAW,GAE/CE,IAAKD,GACLX,UAAWW,GACXT,UAAWW,GACXvgD,SAAUugD,MAiEZO,GAAON,GAAKE,GAAKrjD,GAAOk4C,GAAO,CAC7BE,SAAU,SAASj9C,UACjBA,EAAS,MAALA,EAAYi9C,GAAWr8C,KAAKO,IAAI87C,GAAUj9C,GACvC,IAAIgoD,GAAIvpD,KAAK27B,EAAG37B,KAAKxB,EAAGwB,KAAK+H,EAAIxG,EAAGvB,KAAKmpD,UAElD5K,OAAQ,SAASh9C,UACfA,EAAS,MAALA,EAAYg9C,GAASp8C,KAAKO,IAAI67C,GAAQh9C,GACnC,IAAIgoD,GAAIvpD,KAAK27B,EAAG37B,KAAKxB,EAAGwB,KAAK+H,EAAIxG,EAAGvB,KAAKmpD,UAElDX,IAAK,eACC7sB,EAAI37B,KAAK27B,EAAI,IAAqB,KAAd37B,KAAK27B,EAAI,GAC7Bn9B,EAAI0O,MAAMyuB,IAAMzuB,MAAMlN,KAAKxB,GAAK,EAAIwB,KAAKxB,EACzCuJ,EAAI/H,KAAK+H,EACT6hD,EAAK7hD,GAAKA,EAAI,GAAMA,EAAI,EAAIA,GAAKvJ,EACjCmrD,EAAK,EAAI5hD,EAAI6hD,SACV,IAAIb,GACTW,GAAQ/tB,GAAK,IAAMA,EAAI,IAAMA,EAAI,IAAKguB,EAAIC,GAC1CF,GAAQ/tB,EAAGguB,EAAIC,GACfF,GAAQ/tB,EAAI,IAAMA,EAAI,IAAMA,EAAI,IAAKguB,EAAIC,GACzC5pD,KAAKmpD,UAGTa,YAAa,kBACH,GAAKhqD,KAAKxB,GAAKwB,KAAKxB,GAAK,GAAK0O,MAAMlN,KAAKxB,KACzC,GAAKwB,KAAK+H,GAAK/H,KAAK+H,GAAK,GACzB,GAAK/H,KAAKmpD,SAAWnpD,KAAKmpD,SAAW,GAE/Cc,UAAW,eACLxoD,EAAIzB,KAAKmpD,eACC,KADQ1nD,EAAIyL,MAAMzL,GAAK,EAAIU,KAAKuC,IAAI,EAAGvC,KAAKsC,IAAI,EAAGhD,KAC/C,OAAS,UACpBzB,KAAK27B,GAAK,GAAK,KACA,KAAf37B,KAAKxB,GAAK,GAAW,MACN,KAAfwB,KAAK+H,GAAK,GAAW,KACf,IAANtG,EAAU,IAAM,KAAOA,EAAI,SCxW/B,MAAMyoD,GAAU/nD,KAAK26B,GAAK,IACpBqtB,GAAU,IAAMhoD,KAAK26B,GCK9BstB,GAAK,OAELC,GAAK,OACL/xC,GAAK,EAAI,GACTC,GAAK,EAAI,GACT+xC,GAAK,EAAI/xC,GAAKA,GAGlB,SAASgyC,GAAW/oD,MACdA,aAAagpD,GAAK,OAAO,IAAIA,GAAIhpD,EAAEuG,EAAGvG,EAAEC,EAAGD,EAAEjD,EAAGiD,EAAE2nD,YAClD3nD,aAAaipD,GAAK,OAAOC,GAAQlpD,GAC/BA,aAAaunD,KAAMvnD,EAAI0nD,GAAW1nD,QAI+BU,EAAGmS,EAHtEpT,EAAI0pD,GAASnpD,EAAEP,GACf6P,EAAI65C,GAASnpD,EAAEsP,GACfvS,EAAIosD,GAASnpD,EAAEjD,GACfsU,EAAI+3C,IAAS,SAAY3pD,EAAI,SAAY6P,EAAI,SAAYvS,GAdtD,UAeH0C,IAAM6P,GAAKA,IAAMvS,EAAG2D,EAAImS,EAAIxB,GAC9B3Q,EAAI0oD,IAAS,SAAY3pD,EAAI,SAAY6P,EAAI,SAAYvS,GAAK6rD,IAC9D/1C,EAAIu2C,IAAS,SAAY3pD,EAAI,SAAY6P,EAAI,SAAYvS,GAAK8rD,KAEzD,IAAIG,GAAI,IAAM33C,EAAI,GAAI,KAAO3Q,EAAI2Q,GAAI,KAAOA,EAAIwB,GAAI7S,EAAE2nD,SAOhD,SAAS0B,GAAI9iD,EAAGtG,EAAGlD,EAAG4qD,UACP,IAArBppD,UAAUxC,OAAegtD,GAAWxiD,GAAK,IAAIyiD,GAAIziD,EAAGtG,EAAGlD,EAAc,MAAX4qD,EAAkB,EAAIA,GAGlF,SAASqB,GAAIziD,EAAGtG,EAAGlD,EAAG4qD,QACtBphD,GAAKA,OACLtG,GAAKA,OACLlD,GAAKA,OACL4qD,SAAWA,EA0BlB,SAASyB,GAAQ9iD,UACRA,EAxDAyQ,oBAwDSpW,KAAKO,IAAIoF,EAAG,EAAI,GAAKA,EAAIwiD,GAAKhyC,GAGhD,SAASwyC,GAAQhjD,UACRA,EAAIyQ,GAAKzQ,EAAIA,EAAIA,EAAIwiD,IAAMxiD,EAAIwQ,IAGxC,SAASyyC,GAAS7oD,UACT,KAAOA,GAAK,SAAY,MAAQA,EAAI,MAAQC,KAAKO,IAAIR,EAAG,EAAI,KAAO,MAG5E,SAASyoD,GAASzoD,UACRA,GAAK,MAAQ,OAAUA,EAAI,MAAQC,KAAKO,KAAKR,EAAI,MAAS,MAAO,KAG3E,SAAS8oD,GAAWxpD,MACdA,aAAaipD,GAAK,OAAO,IAAIA,GAAIjpD,EAAEm6B,EAAGn6B,EAAEnD,EAAGmD,EAAEuG,EAAGvG,EAAE2nD,YAChD3nD,aAAagpD,KAAMhpD,EAAI+oD,GAAW/oD,IAC5B,IAARA,EAAEC,GAAmB,IAARD,EAAEjD,EAAS,OAAO,IAAIksD,GAAIz4C,IAAK,EAAIxQ,EAAEuG,GAAKvG,EAAEuG,EAAI,IAAM,EAAIiK,IAAKxQ,EAAEuG,EAAGvG,EAAE2nD,aACnFxtB,EAAIx5B,KAAKohC,MAAM/hC,EAAEjD,EAAGiD,EAAEC,GAAK0oD,UACxB,IAAIM,GAAI9uB,EAAI,EAAIA,EAAI,IAAMA,EAAGx5B,KAAK6Q,KAAKxR,EAAEC,EAAID,EAAEC,EAAID,EAAEjD,EAAIiD,EAAEjD,GAAIiD,EAAEuG,EAAGvG,EAAE2nD,SAOxE,SAAS8B,GAAItvB,EAAGt9B,EAAG0J,EAAGohD,UACC,IAArBppD,UAAUxC,OAAeytD,GAAWrvB,GAAK,IAAI8uB,GAAI9uB,EAAGt9B,EAAG0J,EAAc,MAAXohD,EAAkB,EAAIA,GAGlF,SAASsB,GAAI9uB,EAAGt9B,EAAG0J,EAAGohD,QACtBxtB,GAAKA,OACLt9B,GAAKA,OACL0J,GAAKA,OACLohD,SAAWA,EAGlB,SAASuB,GAAQlpD,MACX0L,MAAM1L,EAAEm6B,GAAI,OAAO,IAAI6uB,GAAIhpD,EAAEuG,EAAG,EAAG,EAAGvG,EAAE2nD,aACxCxtB,EAAIn6B,EAAEm6B,EAAIuuB,UACP,IAAIM,GAAIhpD,EAAEuG,EAAG5F,KAAK4zC,IAAIpa,GAAKn6B,EAAEnD,EAAG8D,KAAK6zC,IAAIra,GAAKn6B,EAAEnD,EAAGmD,EAAE2nD,SAjE9DU,GAAOW,GAAKK,GAAKzkD,GAAOk4C,GAAO,CAC7BE,SAAU,SAASj9C,UACV,IAAIipD,GAAIxqD,KAAK+H,EAzCd,IAyC4B,MAALxG,EAAY,EAAIA,GAAIvB,KAAKyB,EAAGzB,KAAKzB,EAAGyB,KAAKmpD,UAExE5K,OAAQ,SAASh9C,UACR,IAAIipD,GAAIxqD,KAAK+H,EA5Cd,IA4C4B,MAALxG,EAAY,EAAIA,GAAIvB,KAAKyB,EAAGzB,KAAKzB,EAAGyB,KAAKmpD,UAExEX,IAAK,eACC31C,GAAK7S,KAAK+H,EAAI,IAAM,IACpB7F,EAAIgL,MAAMlN,KAAKyB,GAAKoR,EAAIA,EAAI7S,KAAKyB,EAAI,IACrC4S,EAAInH,MAAMlN,KAAKzB,GAAKsU,EAAIA,EAAI7S,KAAKzB,EAAI,WAIlC,IAAIwqD,GACTgC,GAAU,WAJZ7oD,EAAIkoD,GAAKU,GAAQ5oD,IAIW,WAH5B2Q,EAjDK,EAiDIi4C,GAAQj4C,IAG2B,UAF5CwB,EAAIg2C,GAAKS,GAAQz2C,KAGf02C,IAAU,SAAY7oD,EAAI,UAAY2Q,EAAI,QAAYwB,GACtD02C,GAAU,SAAY7oD,EAAI,SAAY2Q,EAAI,UAAYwB,GACtDrU,KAAKmpD,aAkDXU,GAAOY,GAAKQ,GAAK7kD,GAAOk4C,GAAO,CAC7BE,SAAU,SAASj9C,UACV,IAAIkpD,GAAIzqD,KAAK27B,EAAG37B,KAAK3B,EAAG2B,KAAK+H,EA7G9B,IA6G4C,MAALxG,EAAY,EAAIA,GAAIvB,KAAKmpD,UAExE5K,OAAQ,SAASh9C,UACR,IAAIkpD,GAAIzqD,KAAK27B,EAAG37B,KAAK3B,EAAG2B,KAAK+H,EAhH9B,IAgH4C,MAALxG,EAAY,EAAIA,GAAIvB,KAAKmpD,UAExEX,IAAK,kBACIkC,GAAQ1qD,MAAMwoD,UCpHzB,IAAI0C,IAAK,OACLC,GAAI,QACJC,IAAK,OACLrT,IAAK,OACLsT,GAAI,QACJC,GAAKD,GAAItT,GACTwT,GAAKF,GAAIF,GACTK,GAAQL,GAAIC,GAAIrT,GAAImT,GAExB,SAASO,GAAiBjqD,MACpBA,aAAakqD,GAAW,OAAO,IAAIA,GAAUlqD,EAAEm6B,EAAGn6B,EAAEhD,EAAGgD,EAAEuG,EAAGvG,EAAE2nD,SAC5D3nD,aAAaunD,KAAMvnD,EAAI0nD,GAAW1nD,QACpCP,EAAIO,EAAEP,EAAI,IACV6P,EAAItP,EAAEsP,EAAI,IACVvS,EAAIiD,EAAEjD,EAAI,IACVwJ,GAAKyjD,GAAQjtD,EAAI+sD,GAAKrqD,EAAIsqD,GAAKz6C,IAAM06C,GAAQF,GAAKC,IAClDI,EAAKptD,EAAIwJ,EACTxG,GAAK8pD,IAAKv6C,EAAI/I,GAAKqjD,GAAIO,GAAM5T,GAC7Bv5C,EAAI2D,KAAK6Q,KAAKzR,EAAIA,EAAIoqD,EAAKA,IAAON,GAAItjD,GAAK,EAAIA,IAC/C4zB,EAAIn9B,EAAI2D,KAAKohC,MAAMhiC,EAAGoqD,GAAMxB,GAAU,IAAMn4C,WACzC,IAAI05C,GAAU/vB,EAAI,EAAIA,EAAI,IAAMA,EAAGn9B,EAAGuJ,EAAGvG,EAAE2nD,SAGrC,SAASyC,GAAUjwB,EAAGn9B,EAAGuJ,EAAGohD,UACb,IAArBppD,UAAUxC,OAAekuD,GAAiB9vB,GAAK,IAAI+vB,GAAU/vB,EAAGn9B,EAAGuJ,EAAc,MAAXohD,EAAkB,EAAIA,GAG9F,SAASuC,GAAU/vB,EAAGn9B,EAAGuJ,EAAGohD,QAC5BxtB,GAAKA,OACLn9B,GAAKA,OACLuJ,GAAKA,OACLohD,SAAWA,ECnCX,SAAS0C,GAAMtzC,EAAIuzC,EAAIC,EAAIC,EAAIC,OAChC3B,EAAK/xC,EAAKA,EAAI2zC,EAAK5B,EAAK/xC,UACnB,EAAI,EAAIA,EAAK,EAAI+xC,EAAK4B,GAAMJ,GAC9B,EAAI,EAAIxB,EAAK,EAAI4B,GAAMH,GACvB,EAAI,EAAIxzC,EAAK,EAAI+xC,EAAK,EAAI4B,GAAMF,EACjCE,EAAKD,GAAM,EAGJ,YAASj4C,OAClB7V,EAAI6V,EAAOzW,OAAS,SACjB,SAASuK,OACVjK,EAAIiK,GAAK,EAAKA,EAAI,EAAKA,GAAK,GAAKA,EAAI,EAAG3J,EAAI,GAAKgE,KAAKwR,MAAM7L,EAAI3J,GAChE4tD,EAAK/3C,EAAOnW,GACZmuD,EAAKh4C,EAAOnW,EAAI,GAChBiuD,EAAKjuD,EAAI,EAAImW,EAAOnW,EAAI,GAAK,EAAIkuD,EAAKC,EACtCC,EAAKpuD,EAAIM,EAAI,EAAI6V,EAAOnW,EAAI,GAAK,EAAImuD,EAAKD,SACvCF,IAAO/jD,EAAIjK,EAAIM,GAAKA,EAAG2tD,EAAIC,EAAIC,EAAIC,ICd/B,YAASj4C,OAClB7V,EAAI6V,EAAOzW,cACR,SAASuK,OACVjK,EAAIsE,KAAKwR,QAAQ7L,GAAK,GAAK,IAAMA,EAAIA,GAAK3J,GAC1C2tD,EAAK93C,GAAQnW,EAAIM,EAAI,GAAKA,GAC1B4tD,EAAK/3C,EAAOnW,EAAIM,GAChB6tD,EAAKh4C,GAAQnW,EAAI,GAAKM,GACtB8tD,EAAKj4C,GAAQnW,EAAI,GAAKM,UACnB0tD,IAAO/jD,EAAIjK,EAAIM,GAAKA,EAAG2tD,EAAIC,EAAIC,EAAIC,IF4B9CpC,GAAO6B,GAAWE,GAAWxlD,GAAOk4C,GAAO,CACzCE,SAAU,SAASj9C,UACjBA,EAAS,MAALA,EAAYi9C,GAAWr8C,KAAKO,IAAI87C,GAAUj9C,GACvC,IAAImqD,GAAU1rD,KAAK27B,EAAG37B,KAAKxB,EAAGwB,KAAK+H,EAAIxG,EAAGvB,KAAKmpD,UAExD5K,OAAQ,SAASh9C,UACfA,EAAS,MAALA,EAAYg9C,GAASp8C,KAAKO,IAAI67C,GAAQh9C,GACnC,IAAImqD,GAAU1rD,KAAK27B,EAAG37B,KAAKxB,EAAGwB,KAAK+H,EAAIxG,EAAGvB,KAAKmpD,UAExDX,IAAK,eACC7sB,EAAIzuB,MAAMlN,KAAK27B,GAAK,GAAK37B,KAAK27B,EAAI,KAAOuuB,GACzCniD,GAAK/H,KAAK+H,EACVtG,EAAIyL,MAAMlN,KAAKxB,GAAK,EAAIwB,KAAKxB,EAAIuJ,GAAK,EAAIA,GAC1CokD,EAAOhqD,KAAK4zC,IAAIpa,GAChBywB,EAAOjqD,KAAK6zC,IAAIra,UACb,IAAIotB,GACT,KAAOhhD,EAAItG,GAAKypD,GAAIiB,EAAOhB,GAAIiB,IAC/B,KAAOrkD,EAAItG,GAAK2pD,GAAIe,EAAOpU,GAAIqU,IAC/B,KAAOrkD,EAAItG,GAAK4pD,GAAIc,IACpBnsD,KAAKmpD,oBGzDIjnD,GAAK,IAAMA,ECE1B,SAASm+B,GAAO5+B,EAAGyQ,UACV,SAASpK,UACPrG,EAAIqG,EAAIoK,GAUZ,SAASm6C,GAAI5qD,EAAGlD,OACjB2T,EAAI3T,EAAIkD,SACLyQ,EAAImuB,GAAO5+B,EAAGyQ,EAAI,KAAOA,GAAK,IAAMA,EAAI,IAAM/P,KAAKsR,MAAMvB,EAAI,KAAOA,GAAK1O,GAAS0J,MAAMzL,GAAKlD,EAAIkD,GAGnG,SAAS6qD,GAAMz5C,UACA,IAAZA,GAAKA,GAAW05C,GAAU,SAAS9qD,EAAGlD,UACrCA,EAAIkD,EAbf,SAAqBA,EAAGlD,EAAGsU,UAClBpR,EAAIU,KAAKO,IAAIjB,EAAGoR,GAAItU,EAAI4D,KAAKO,IAAInE,EAAGsU,GAAKpR,EAAGoR,EAAI,EAAIA,EAAG,SAAS/K,UAC9D3F,KAAKO,IAAIjB,EAAIqG,EAAIvJ,EAAGsU,IAWZ25C,CAAY/qD,EAAGlD,EAAGsU,GAAKrP,GAAS0J,MAAMzL,GAAKlD,EAAIkD,IAInD,SAAS8qD,GAAQ9qD,EAAGlD,OAC7B2T,EAAI3T,EAAIkD,SACLyQ,EAAImuB,GAAO5+B,EAAGyQ,GAAK1O,GAAS0J,MAAMzL,GAAKlD,EAAIkD,UCtBrC,SAAUgrD,EAAS55C,OAC5B+1C,EAAQ0D,GAAMz5C,YAET21C,EAAI53C,EAAOC,OACd5P,EAAI2nD,GAAOh4C,EAAQ87C,GAAS97C,IAAQ3P,GAAI4P,EAAM67C,GAAS77C,IAAM5P,GAC7D6P,EAAI83C,EAAMh4C,EAAME,EAAGD,EAAIC,GACvBvS,EAAIqqD,EAAMh4C,EAAMrS,EAAGsS,EAAItS,GACvB4qD,EAAUoD,GAAQ37C,EAAMu4C,QAASt4C,EAAIs4C,gBAClC,SAASrhD,UACd8I,EAAM3P,EAAIA,EAAE6G,GACZ8I,EAAME,EAAIA,EAAEhJ,GACZ8I,EAAMrS,EAAIA,EAAEuJ,GACZ8I,EAAMu4C,QAAUA,EAAQrhD,GACjB8I,EAAQ,WAInB43C,EAAI8D,MAAQG,EAELjE,EAnBM,CAoBZ,GAEH,SAASmE,GAAUC,UACV,SAASC,OAKVhvD,EAAG+qD,EAJHzqD,EAAI0uD,EAAOtvD,OACX0D,EAAI,IAAIZ,MAAMlC,GACd2S,EAAI,IAAIzQ,MAAMlC,GACdI,EAAI,IAAI8B,MAAMlC,OAEbN,EAAI,EAAGA,EAAIM,IAAKN,EACnB+qD,EAAQ8D,GAASG,EAAOhvD,IACxBoD,EAAEpD,GAAK+qD,EAAM3nD,GAAK,EAClB6P,EAAEjT,GAAK+qD,EAAM93C,GAAK,EAClBvS,EAAEV,GAAK+qD,EAAMrqD,GAAK,SAEpB0C,EAAI2rD,EAAO3rD,GACX6P,EAAI87C,EAAO97C,GACXvS,EAAIquD,EAAOruD,GACXqqD,EAAMO,QAAU,EACT,SAASrhD,UACd8gD,EAAM3nD,EAAIA,EAAE6G,GACZ8gD,EAAM93C,EAAIA,EAAEhJ,GACZ8gD,EAAMrqD,EAAIA,EAAEuJ,GACL8gD,EAAQ,KAKd,IAAIkE,GAAWH,GAAUd,IACrBkB,GAAiBJ,GAAUK,ICtDvB,YAASvrD,EAAGlD,GACpBA,IAAGA,EAAI,QAGRV,EAFAM,EAAIsD,EAAIU,KAAKsC,IAAIlG,EAAEhB,OAAQkE,EAAElE,QAAU,EACvCc,EAAIE,EAAEmB,eAEH,SAASoI,OACTjK,EAAI,EAAGA,EAAIM,IAAKN,EAAGQ,EAAER,GAAK4D,EAAE5D,IAAM,EAAIiK,GAAKvJ,EAAEV,GAAKiK,SAChDzJ,GAIJ,SAAS4uD,GAAc/qD,UACrBgrD,YAAYC,OAAOjrD,MAAQA,aAAakrD,UCL1C,SAASC,GAAa5rD,EAAGlD,OAK1BV,EAJAyvD,EAAK/uD,EAAIA,EAAEhB,OAAS,EACpBgwD,EAAK9rD,EAAIU,KAAKsC,IAAI6oD,EAAI7rD,EAAElE,QAAU,EAClC2E,EAAI,IAAI7B,MAAMktD,GACdlvD,EAAI,IAAIgC,MAAMitD,OAGbzvD,EAAI,EAAGA,EAAI0vD,IAAM1vD,EAAGqE,EAAErE,GAAKwD,GAAMI,EAAE5D,GAAIU,EAAEV,SACvCA,EAAIyvD,IAAMzvD,EAAGQ,EAAER,GAAKU,EAAEV,UAEtB,SAASiK,OACTjK,EAAI,EAAGA,EAAI0vD,IAAM1vD,EAAGQ,EAAER,GAAKqE,EAAErE,GAAGiK,UAC9BzJ,GCnBI,YAASoD,EAAGlD,OACrB2T,EAAI,IAAI/N,YACL1C,GAAKA,EAAGlD,GAAKA,EAAG,SAASuJ,UACvBoK,EAAE4G,QAAQrX,GAAK,EAAIqG,GAAKvJ,EAAIuJ,GAAIoK,GCH5B,YAASzQ,EAAGlD,UAClBkD,GAAKA,EAAGlD,GAAKA,EAAG,SAASuJ,UACvBrG,GAAK,EAAIqG,GAAKvJ,EAAIuJ,GCAd,YAASrG,EAAGlD,OAGrBgD,EAFA1D,EAAI,GACJQ,EAAI,OAMHkD,KAHK,OAANE,GAA2B,iBAANA,IAAgBA,EAAI,IACnC,OAANlD,GAA2B,iBAANA,IAAgBA,EAAI,IAEnCA,EACJgD,KAAKE,EACP5D,EAAE0D,GAAKF,GAAMI,EAAEF,GAAIhD,EAAEgD,IAErBlD,EAAEkD,GAAKhD,EAAEgD,UAIN,SAASuG,OACTvG,KAAK1D,EAAGQ,EAAEkD,GAAK1D,EAAE0D,GAAGuG,UAClBzJ,GClBX,IAAImvD,GAAM,8CACNC,GAAM,IAAIhgD,OAAO+/C,GAAI1sD,OAAQ,KAclB,YAASW,EAAGlD,OAErBmvD,EACAC,EACAC,EAHAC,EAAKL,GAAIM,UAAYL,GAAIK,UAAY,EAIrCjwD,GAAK,EACLW,EAAI,GACJF,EAAI,OAGRmD,GAAQ,GAAIlD,GAAQ,IAGZmvD,EAAKF,GAAI93C,KAAKjU,MACdksD,EAAKF,GAAI/3C,KAAKnX,MACfqvD,EAAKD,EAAGz5C,OAAS25C,IACpBD,EAAKrvD,EAAEmB,MAAMmuD,EAAID,GACbpvD,EAAEX,GAAIW,EAAEX,IAAM+vD,EACbpvD,IAAIX,GAAK+vD,IAEXF,EAAKA,EAAG,OAASC,EAAKA,EAAG,IACxBnvD,EAAEX,GAAIW,EAAEX,IAAM8vD,EACbnvD,IAAIX,GAAK8vD,GAEdnvD,IAAIX,GAAK,KACTS,EAAEG,KAAK,CAACZ,EAAGA,EAAGqE,EAAGsQ,GAAOk7C,EAAIC,MAE9BE,EAAKJ,GAAIK,iBAIPD,EAAKtvD,EAAEhB,SACTqwD,EAAKrvD,EAAEmB,MAAMmuD,GACTrvD,EAAEX,GAAIW,EAAEX,IAAM+vD,EACbpvD,IAAIX,GAAK+vD,GAKTpvD,EAAEjB,OAAS,EAAKe,EAAE,GA7C3B,SAAaC,UACJ,SAASuJ,UACPvJ,EAAEuJ,GAAK,IA4CV7I,CAAIX,EAAE,GAAG4D,GApDjB,SAAc3D,UACL,kBACEA,GAmDHS,CAAKT,IACJA,EAAID,EAAEf,OAAQ,SAASuK,OACjB,IAAWtG,EAAP3D,EAAI,EAAMA,EAAIU,IAAKV,EAAGW,GAAGgD,EAAIlD,EAAET,IAAIA,GAAK2D,EAAEU,EAAE4F,UAC9CtJ,EAAE0N,KAAK,MCnDT,YAASzK,EAAGlD,OACPF,EAAdyJ,SAAWvJ,SACH,MAALA,GAAmB,YAANuJ,EAAkBtE,GAASjF,IAClC,WAANuJ,EAAiB0K,GACZ,WAAN1K,GAAmBzJ,EAAIuqD,GAAMrqD,KAAOA,EAAIF,EAAGmqD,IAAOjjC,GAClDhnB,aAAaqqD,GAAQJ,GACrBjqD,aAAa4F,KAAOD,GACpB+oD,GAAc1uD,GAAKwvD,GACnB1tD,MAAMD,QAAQ7B,GAAK8uD,GACE,mBAAd9uD,EAAEuU,SAAgD,mBAAfvU,EAAEwK,UAA2BmE,MAAM3O,GAAKoI,GAClF6L,IAAQ/Q,EAAGlD,GCpBJ,YAASkD,EAAGlD,UAClBkD,GAAKA,EAAGlD,GAAKA,EAAG,SAASuJ,UACvB3F,KAAKsR,MAAMhS,GAAK,EAAIqG,GAAKvJ,EAAIuJ,ICFxC,ICEIkmD,GDFA7D,GAAU,IAAMhoD,KAAK26B,GAEdh+B,GAAW,CACpBmvD,WAAY,EACZC,WAAY,EACZC,OAAQ,EACRC,MAAO,EACPC,OAAQ,EACRC,OAAQ,GAGK,YAAS7sD,EAAGlD,EAAGF,EAAG6T,EAAGjM,EAAGZ,OACjCgpD,EAAQC,EAAQF,SAChBC,EAASlsD,KAAK6Q,KAAKvR,EAAIA,EAAIlD,EAAIA,MAAIkD,GAAK4sD,EAAQ9vD,GAAK8vD,IACrDD,EAAQ3sD,EAAIpD,EAAIE,EAAI2T,KAAG7T,GAAKoD,EAAI2sD,EAAOl8C,GAAK3T,EAAI6vD,IAChDE,EAASnsD,KAAK6Q,KAAK3U,EAAIA,EAAI6T,EAAIA,MAAI7T,GAAKiwD,EAAQp8C,GAAKo8C,EAAQF,GAASE,GACtE7sD,EAAIyQ,EAAI3T,EAAIF,IAAGoD,GAAKA,EAAGlD,GAAKA,EAAG6vD,GAASA,EAAOC,GAAUA,GACtD,CACLJ,WAAYhoD,EACZioD,WAAY7oD,EACZ8oD,OAAQhsD,KAAKohC,MAAMhlC,EAAGkD,GAAK0oD,GAC3BiE,MAAOjsD,KAAKosD,KAAKH,GAASjE,GAC1BkE,OAAQA,EACRC,OAAQA,GEpBZ,SAASE,GAAqBpjD,EAAOqjD,EAASC,EAASC,YAE5C3+C,EAAIxR,UACJA,EAAEjB,OAASiB,EAAEwR,MAAQ,IAAM,UAsC7B,SAASvO,EAAGlD,OACbC,EAAI,GACJF,EAAI,UACRmD,EAAI2J,EAAM3J,GAAIlD,EAAI6M,EAAM7M,YAtCPqwD,EAAIC,EAAIC,EAAIC,EAAIvwD,EAAGF,MAChCswD,IAAOE,GAAMD,IAAOE,EAAI,KACtBlxD,EAAIW,EAAEC,KAAK,aAAc,KAAMgwD,EAAS,KAAMC,GAClDpwD,EAAEG,KAAK,CAACZ,EAAGA,EAAI,EAAGqE,EAAGsQ,GAAOo8C,EAAIE,IAAM,CAACjxD,EAAGA,EAAI,EAAGqE,EAAGsQ,GAAOq8C,EAAIE,UACtDD,GAAMC,IACfvwD,EAAEC,KAAK,aAAeqwD,EAAKL,EAAUM,EAAKL,GAkC5C/+C,CAAUlO,EAAEwsD,WAAYxsD,EAAEysD,WAAY3vD,EAAE0vD,WAAY1vD,EAAE2vD,WAAY1vD,EAAGF,YA9BvDmD,EAAGlD,EAAGC,EAAGF,GACnBmD,IAAMlD,GACJkD,EAAIlD,EAAI,IAAKA,GAAK,IAAcA,EAAIkD,EAAI,MAAKA,GAAK,KACtDnD,EAAEG,KAAK,CAACZ,EAAGW,EAAEC,KAAKuR,EAAIxR,GAAK,UAAW,KAAMmwD,GAAY,EAAGzsD,EAAGsQ,GAAO/Q,EAAGlD,MAC/DA,GACTC,EAAEC,KAAKuR,EAAIxR,GAAK,UAAYD,EAAIowD,GA0BlCR,CAAO1sD,EAAE0sD,OAAQ5vD,EAAE4vD,OAAQ3vD,EAAGF,YAtBjBmD,EAAGlD,EAAGC,EAAGF,GAClBmD,IAAMlD,EACRD,EAAEG,KAAK,CAACZ,EAAGW,EAAEC,KAAKuR,EAAIxR,GAAK,SAAU,KAAMmwD,GAAY,EAAGzsD,EAAGsQ,GAAO/Q,EAAGlD,KAC9DA,GACTC,EAAEC,KAAKuR,EAAIxR,GAAK,SAAWD,EAAIowD,GAmBjCP,CAAM3sD,EAAE2sD,MAAO7vD,EAAE6vD,MAAO5vD,EAAGF,YAfdswD,EAAIC,EAAIC,EAAIC,EAAIvwD,EAAGF,MAC5BswD,IAAOE,GAAMD,IAAOE,EAAI,KACtBlxD,EAAIW,EAAEC,KAAKuR,EAAIxR,GAAK,SAAU,KAAM,IAAK,KAAM,KACnDF,EAAEG,KAAK,CAACZ,EAAGA,EAAI,EAAGqE,EAAGsQ,GAAOo8C,EAAIE,IAAM,CAACjxD,EAAGA,EAAI,EAAGqE,EAAGsQ,GAAOq8C,EAAIE,UAC/C,IAAPD,GAAmB,IAAPC,GACrBvwD,EAAEC,KAAKuR,EAAIxR,GAAK,SAAWswD,EAAK,IAAMC,EAAK,KAW7CprD,CAAMlC,EAAE4sD,OAAQ5sD,EAAE6sD,OAAQ/vD,EAAE8vD,OAAQ9vD,EAAE+vD,OAAQ9vD,EAAGF,GACjDmD,EAAIlD,EAAI,KACD,SAASuJ,WACYtG,EAAtB3D,GAAK,EAAGM,EAAIG,EAAEf,SACTM,EAAIM,GAAGK,GAAGgD,EAAIlD,EAAET,IAAIA,GAAK2D,EAAEU,EAAE4F,UAC/BtJ,EAAE0N,KAAK,MAKb,IAAI8iD,GAA0BR,IDxD9B,SAAkBntD,SACjB+S,EAAI,IAA0B,mBAAd66C,UAA2BA,UAAYC,iBAAiB7tD,EAAQ,WAC/E+S,EAAE+6C,WAAarwD,GAAWswD,GAAUh7C,EAAE3S,EAAG2S,EAAE7V,EAAG6V,EAAE/V,EAAG+V,EAAElC,EAAGkC,EAAEnO,EAAGmO,EAAE/O,KCsDJ,OAAQ,MAAO,QACxEgqD,GAA0Bb,IDpD9B,SAAkBntD,UACV,MAATA,EAAsBvC,IACrBkvD,KAASA,GAAU7zB,SAASm1B,gBAAgB,6BAA8B,MAC/EtB,GAAQuB,aAAa,YAAaluD,IAC5BA,EAAQ2sD,GAAQ3+C,UAAUmgD,QAAQC,eAEjCL,IADP/tD,EAAQA,EAAMqgC,QACSjgC,EAAGJ,EAAM9C,EAAG8C,EAAMhD,EAAGgD,EAAM6Q,EAAG7Q,EAAM4E,EAAG5E,EAAMgE,GAFLvG,MCgDG,KAAM,IAAK,KC5D/E,SAASqtD,GAAKjqD,WACHA,EAAIC,KAAKH,IAAIE,IAAM,EAAIA,GAAK,SAWxB,SAAUwtD,EAAQC,EAAKC,EAAMC,YAIjCpsD,EAAKuN,EAAID,OAMZlT,EACA8f,EANAmyC,EAAM9+C,EAAG,GAAI++C,EAAM/+C,EAAG,GAAIg/C,EAAKh/C,EAAG,GAClCi/C,EAAMl/C,EAAG,GAAIm/C,EAAMn/C,EAAG,GAAIo/C,EAAKp/C,EAAG,GAClCrB,EAAKugD,EAAMH,EACXlgD,EAAKsgD,EAAMH,EACXjY,EAAKpoC,EAAKA,EAAKE,EAAKA,KAKpBkoC,EA5BO,MA6BTn6B,EAAIxb,KAAKC,IAAI+tD,EAAKH,GAAML,EACxB9xD,EAAI,SAASiK,SACJ,CACLgoD,EAAMhoD,EAAI4H,EACVqgD,EAAMjoD,EAAI8H,EACVogD,EAAK7tD,KAAKH,IAAI2tD,EAAM7nD,EAAI6V,SAMzB,KACCza,EAAKf,KAAK6Q,KAAK8kC,GACf/N,GAAMomB,EAAKA,EAAKH,EAAKA,EAAKH,EAAO/X,IAAO,EAAIkY,EAAKJ,EAAO1sD,GACxD8mC,GAAMmmB,EAAKA,EAAKH,EAAKA,EAAKH,EAAO/X,IAAO,EAAIqY,EAAKP,EAAO1sD,GACxDyF,EAAKxG,KAAKC,IAAID,KAAK6Q,KAAK+2B,EAAKA,EAAK,GAAKA,GACvCnhC,EAAKzG,KAAKC,IAAID,KAAK6Q,KAAKg3B,EAAKA,EAAK,GAAKA,GAC3CrsB,GAAK/U,EAAKD,GAAMgnD,EAChB9xD,EAAI,SAASiK,OACPtJ,EAAIsJ,EAAI6V,EACRyyC,EAASjE,GAAKxjD,GACdnD,EAAIwqD,GAAMJ,EAAO1sD,IAAOktD,EAxCpC,SAAcluD,WACHA,EAAIC,KAAKH,IAAI,EAAIE,IAAM,IAAMA,EAAI,GAuCCmuD,CAAKV,EAAMnxD,EAAImK,GA5C5D,SAAczG,WACHA,EAAIC,KAAKH,IAAIE,IAAM,EAAIA,GAAK,EA2C2BkqD,CAAKzjD,UACxD,CACLmnD,EAAMtqD,EAAIkK,EACVqgD,EAAMvqD,EAAIoK,EACVogD,EAAKI,EAASjE,GAAKwD,EAAMnxD,EAAImK,YAKnC9K,EAAEyyD,SAAe,IAAJ3yC,EAAWgyC,EAAMxtD,KAAK46B,MAE5Bl/B,SAGT4F,EAAKksD,IAAM,SAAS5wD,OACdwxD,EAAKpuD,KAAKuC,IAAI,MAAO3F,GAAIyxD,EAAKD,EAAKA,SAChCb,EAAQa,EAAIC,EAD6BA,EAAKA,IAIhD/sD,EAvDM,CAwDZtB,KAAK46B,MAAO,EAAG,GCnElB,SAAS0sB,GAAI4C,UACJ,SAASz7C,EAAOC,OACjB8qB,EAAI0wB,GAAKz7C,EAAQ6/C,GAAS7/C,IAAQ+qB,GAAI9qB,EAAM4/C,GAAS5/C,IAAM8qB,GAC3Dn9B,EAAIoqD,GAAMh4C,EAAMpS,EAAGqS,EAAIrS,GACvBuJ,EAAI6gD,GAAMh4C,EAAM7I,EAAG8I,EAAI9I,GACvBohD,EAAUP,GAAMh4C,EAAMu4C,QAASt4C,EAAIs4C,gBAChC,SAASrhD,UACd8I,EAAM+qB,EAAIA,EAAE7zB,GACZ8I,EAAMpS,EAAIA,EAAEsJ,GACZ8I,EAAM7I,EAAIA,EAAED,GACZ8I,EAAMu4C,QAAUA,EAAQrhD,GACjB8I,EAAQ,YAKN64C,GAAI4C,IACRqE,GAAUjH,GAAIb,ICjBzB,SAASqC,GAAIoB,UACJ,SAASz7C,EAAOC,OACjB8qB,EAAI0wB,GAAKz7C,EAAQ+/C,GAAS//C,IAAQ+qB,GAAI9qB,EAAM8/C,GAAS9/C,IAAM8qB,GAC3Dt9B,EAAIuqD,GAAMh4C,EAAMvS,EAAGwS,EAAIxS,GACvB0J,EAAI6gD,GAAMh4C,EAAM7I,EAAG8I,EAAI9I,GACvBohD,EAAUP,GAAMh4C,EAAMu4C,QAASt4C,EAAIs4C,gBAChC,SAASrhD,UACd8I,EAAM+qB,EAAIA,EAAE7zB,GACZ8I,EAAMvS,EAAIA,EAAEyJ,GACZ8I,EAAM7I,EAAIA,EAAED,GACZ8I,EAAMu4C,QAAUA,EAAQrhD,GACjB8I,EAAQ,YAKNq6C,GAAIoB,IACRuE,GAAU3F,GAAIrC,ICjBzB,SAASgD,GAAUS,UACT,SAASwE,EAAeh+C,YAGrB+4C,EAAUh7C,EAAOC,OACpB8qB,EAAI0wB,GAAKz7C,EAAQkgD,GAAelgD,IAAQ+qB,GAAI9qB,EAAMigD,GAAejgD,IAAM8qB,GACvEn9B,EAAIoqD,GAAMh4C,EAAMpS,EAAGqS,EAAIrS,GACvBuJ,EAAI6gD,GAAMh4C,EAAM7I,EAAG8I,EAAI9I,GACvBohD,EAAUP,GAAMh4C,EAAMu4C,QAASt4C,EAAIs4C,gBAChC,SAASrhD,UACd8I,EAAM+qB,EAAIA,EAAE7zB,GACZ8I,EAAMpS,EAAIA,EAAEsJ,GACZ8I,EAAM7I,EAAIA,EAAE5F,KAAKO,IAAIoF,EAAG+K,IACxBjC,EAAMu4C,QAAUA,EAAQrhD,GACjB8I,EAAQ,WAZnBiC,GAAKA,EAgBL+4C,EAAUU,MAAQuE,EAEXjF,EAnBD,CAoBL,UAGUA,GAAUS,IACd0E,GAAgBnF,GAAUhD,IC1BtB,SAASoI,GAAUC,EAAaj9C,QAC9B7M,IAAX6M,IAAsBA,EAASi9C,EAAaA,EAAc5vD,YAC1DxD,EAAI,EAAGM,EAAI6V,EAAOzW,OAAS,EAAGkI,EAAIuO,EAAO,GAAIjG,EAAI,IAAI1N,MAAMlC,EAAI,EAAI,EAAIA,GACpEN,EAAIM,GAAG4P,EAAElQ,GAAKozD,EAAYxrD,EAAGA,EAAIuO,IAASnW,WAC1C,SAASiK,OACVjK,EAAIsE,KAAKuC,IAAI,EAAGvC,KAAKsC,IAAItG,EAAI,EAAGgE,KAAKwR,MAAM7L,GAAK3J,YAC7C4P,EAAElQ,GAAGiK,EAAIjK,yEdLL,SAAS4D,EAAGlD,UACjB0uD,GAAc1uD,GAAKwvD,GAAcV,IAAc5rD,EAAGlD,yFeJ7C,SAASiG,OAClBrG,EAAIqG,EAAMjH,cACP,SAASuK,UACPtD,EAAMrC,KAAKuC,IAAI,EAAGvC,KAAKsC,IAAItG,EAAI,EAAGgE,KAAKwR,MAAM7L,EAAI3J,uBCD7C,SAASsD,EAAGlD,OACrBV,EAAIwuD,IAAK5qD,GAAIlD,UACV,SAASuJ,OACV5F,EAAIrE,EAAEiK,UACH5F,EAAI,IAAMC,KAAKwR,MAAMzR,EAAI,0TCHrB,SAAa0O,EAAOC,OAC7B9I,EAAI6gD,IAAOh4C,EAAQsgD,GAAStgD,IAAQ7I,GAAI8I,EAAMqgD,GAASrgD,IAAM9I,GAC7DtG,EAAImnD,GAAMh4C,EAAMnP,EAAGoP,EAAIpP,GACvBlD,EAAIqqD,GAAMh4C,EAAMrS,EAAGsS,EAAItS,GACvB4qD,EAAUP,GAAMh4C,EAAMu4C,QAASt4C,EAAIs4C,gBAChC,SAASrhD,UACd8I,EAAM7I,EAAIA,EAAED,GACZ8I,EAAMnP,EAAIA,EAAEqG,GACZ8I,EAAMrS,EAAIA,EAAEuJ,GACZ8I,EAAMu4C,QAAUA,EAAQrhD,GACjB8I,EAAQ,uHCbJ,SAASstC,EAAc//C,WAChCk+B,EAAU,IAAIh8B,MAAMlC,GACfN,EAAI,EAAGA,EAAIM,IAAKN,EAAGw+B,EAAQx+B,GAAKqgD,EAAargD,GAAKM,EAAI,WACxDk+B,KCHM,SAAS7pB,GAAOtQ,UACrBA,ECIV,IAAIwa,GAAO,CAAC,EAAG,GAER,SAAS5d,GAASoD,UAChBA,EAGT,SAAS08B,GAAUn9B,EAAGlD,UACZA,GAAMkD,GAAKA,GACb,SAASS,UAAaA,EAAIT,GAAKlD,GCbxB,SAAmB2D,UACzB,kBACEA,GDYHsB,CAAS0J,MAAM3O,GAAKyT,IAAM,IAWlC,SAASm/C,GAAMtuD,EAAQ2B,EAAOysD,OACxBhuD,EAAKJ,EAAO,GAAIK,EAAKL,EAAO,GAAI8F,EAAKnE,EAAM,GAAIoE,EAAKpE,EAAM,UAC1DtB,EAAKD,GAAIA,EAAK27B,GAAU17B,EAAID,GAAK0F,EAAKsoD,EAAYroD,EAAID,KACrD1F,EAAK27B,GAAU37B,EAAIC,GAAKyF,EAAKsoD,EAAYtoD,EAAIC,IAC3C,SAAS1G,UAAYyG,EAAG1F,EAAGf,KAGpC,SAASkvD,GAAQvuD,EAAQ2B,EAAOysD,OAC1B7yD,EAAI+D,KAAKsC,IAAI5B,EAAOtF,OAAQiH,EAAMjH,QAAU,EAC5C2U,EAAI,IAAI7R,MAAMjC,GACd6C,EAAI,IAAIZ,MAAMjC,GACdP,GAAK,MAGLgF,EAAOzE,GAAKyE,EAAO,KACrBA,EAASA,EAAOnD,QAAQuQ,UACxBzL,EAAQA,EAAM9E,QAAQuQ,aAGfpS,EAAIO,GACX8T,EAAErU,GAAK+gC,GAAU/7B,EAAOhF,GAAIgF,EAAOhF,EAAI,IACvCoD,EAAEpD,GAAKozD,EAAYzsD,EAAM3G,GAAI2G,EAAM3G,EAAI,WAGlC,SAASqE,OACVrE,EAAI81C,GAAO9wC,EAAQX,EAAG,EAAG9D,GAAK,SAC3B6C,EAAEpD,GAAGqU,EAAErU,GAAGqE,KAId,SAASmsB,GAAKvtB,EAAQkgB,UACpBA,EACFne,OAAO/B,EAAO+B,UACd2B,MAAM1D,EAAO0D,SACbysD,YAAYnwD,EAAOmwD,eACnBI,MAAMvwD,EAAOuwD,SACbjkC,QAAQtsB,EAAOssB,WAGf,SAASkkC,SAIVjiD,EACAkiD,EACAnkC,EAEA4jC,EACA5vD,EACA7B,EATAsD,EAAS6Z,GACTlY,EAAQkY,GACRu0C,EAAcO,GAIdH,EAAQvyD,YAKH2yD,QACHtzD,EAAIgE,KAAKsC,IAAI5B,EAAOtF,OAAQiH,EAAMjH,eAClC8zD,IAAUvyD,KAAUuyD,EA7D5B,SAAiB5vD,EAAGlD,OACduJ,SACArG,EAAIlD,IAAGuJ,EAAIrG,EAAGA,EAAIlD,EAAGA,EAAIuJ,GACtB,SAAS5F,UAAYC,KAAKuC,IAAIjD,EAAGU,KAAKsC,IAAIlG,EAAG2D,KA0DlBwvD,CAAQ7uD,EAAO,GAAIA,EAAO1E,EAAI,KAC9D6yD,EAAY7yD,EAAI,EAAIizD,GAAUD,GAC9B/vD,EAAS7B,EAAQ,KACVoE,WAGAA,EAAMzB,UACD,MAALA,GAAagL,MAAMhL,GAAKA,GAAKkrB,GAAWhsB,IAAWA,EAAS4vD,EAAUnuD,EAAOnB,IAAI2N,GAAY7K,EAAOysD,KAAe5hD,EAAUgiD,EAAMnvD,YAG5IyB,EAAMguD,OAAS,SAAS9+C,UACfw+C,EAAME,GAAahyD,IAAUA,EAAQyxD,EAAUxsD,EAAO3B,EAAOnB,IAAI2N,GAAYuiD,MAAqB/+C,MAG3GlP,EAAMd,OAAS,SAAS9D,UACfgB,UAAUxC,QAAUsF,EAASxC,MAAMoU,KAAK1V,EAAGyT,IAASi/C,KAAa5uD,EAAOnD,SAGjFiE,EAAMa,MAAQ,SAASzF,UACdgB,UAAUxC,QAAUiH,EAAQnE,MAAMoU,KAAK1V,GAAI0yD,KAAajtD,EAAM9E,SAGvEiE,EAAMkuD,WAAa,SAAS9yD,UACnByF,EAAQnE,MAAMoU,KAAK1V,GAAIkyD,EAAca,GAAkBL,KAGhE9tD,EAAM0tD,MAAQ,SAAStyD,UACdgB,UAAUxC,QAAU8zD,IAAQtyD,GAAWD,GAAU2yD,KAAaJ,IAAUvyD,IAGjF6E,EAAMstD,YAAc,SAASlyD,UACpBgB,UAAUxC,QAAU0zD,EAAclyD,EAAG0yD,KAAaR,GAG3DttD,EAAMypB,QAAU,SAASruB,UAChBgB,UAAUxC,QAAU6vB,EAAUruB,EAAG4E,GAASypB,GAG5C,SAAStlB,EAAGtC,UACjB6J,EAAYvH,EAAGypD,EAAc/rD,EACtBisD,KAII,SAASM,YACfT,IAAAA,CAAcxyD,GAAUA,IExHlB,SAASkzD,GAAWphD,EAAOuC,EAAMC,EAAOoC,OAEjDO,EADAzC,EAAOO,GAASjD,EAAOuC,EAAMC,WAEjCoC,EAAYD,GAA6B,MAAbC,EAAoB,KAAOA,IACrC3G,UACX,QACCxN,EAAQc,KAAKuC,IAAIvC,KAAKI,IAAIqO,GAAQzO,KAAKI,IAAI4Q,WACpB,MAAvBqC,EAAUO,WAAsB7I,MAAM6I,EAAYmT,GAAgB5V,EAAMjS,MAASmU,EAAUO,UAAYA,GACpGQ,GAAaf,EAAWnU,OAE5B,OACA,QACA,QACA,QACA,IACwB,MAAvBmU,EAAUO,WAAsB7I,MAAM6I,EAAYoT,GAAe7V,EAAMnR,KAAKuC,IAAIvC,KAAKI,IAAIqO,GAAQzO,KAAKI,IAAI4Q,QAAUqC,EAAUO,UAAYA,GAAgC,MAAnBP,EAAU3G,iBAGlK,QACA,IACwB,MAAvB2G,EAAUO,WAAsB7I,MAAM6I,EAAYqT,GAAe9V,MAAQkC,EAAUO,UAAYA,EAAuC,GAAP,MAAnBP,EAAU3G,cAIvHL,GAAOgH,GCtBT,SAASy8C,GAAUtuD,OACpBd,EAASc,EAAMd,cAEnBc,EAAM0P,MAAQ,SAASD,OACjBlB,EAAIrP,WACDwQ,GAAMnB,EAAE,GAAIA,EAAEA,EAAE3U,OAAS,GAAa,MAAT6V,EAAgB,GAAKA,IAG3DzP,EAAMquD,WAAa,SAAS5+C,EAAOoC,OAC7BtD,EAAIrP,WACDmvD,GAAW9/C,EAAE,GAAIA,EAAEA,EAAE3U,OAAS,GAAa,MAAT6V,EAAgB,GAAKA,EAAOoC,IAGvE7R,EAAMw4B,KAAO,SAAS/oB,GACP,MAATA,IAAeA,EAAQ,QAOvB8+C,EACA5+C,EANApB,EAAIrP,IACJyH,EAAK,EACLC,EAAK2H,EAAE3U,OAAS,EAChBqT,EAAQsB,EAAE5H,GACV6I,EAAOjB,EAAE3H,GAGT4nD,EAAU,OAEVh/C,EAAOvC,IACT0C,EAAO1C,EAAOA,EAAQuC,EAAMA,EAAOG,EACnCA,EAAOhJ,EAAIA,EAAKC,EAAIA,EAAK+I,GAGpB6+C,KAAY,GAAG,KACpB7+C,EAAOC,GAAc3C,EAAOuC,EAAMC,MACrB8+C,SACXhgD,EAAE5H,GAAMsG,EACRsB,EAAE3H,GAAM4I,EACDtQ,EAAOqP,GACT,GAAIoB,EAAO,EAChB1C,EAAQzO,KAAKwR,MAAM/C,EAAQ0C,GAAQA,EACnCH,EAAOhR,KAAK2I,KAAKqI,EAAOG,GAAQA,MAC3B,CAAA,KAAIA,EAAO,SAChB1C,EAAQzO,KAAK2I,KAAK8F,EAAQ0C,GAAQA,EAClCH,EAAOhR,KAAKwR,MAAMR,EAAOG,GAAQA,EAInC4+C,EAAU5+C,SAGL3P,GAGFA,ECxDM,SAASw4B,GAAKt5B,EAAQ8V,OAO/B7Q,EAJAwC,EAAK,EACLC,GAHJ1H,EAASA,EAAOnD,SAGAnC,OAAS,EACrB+R,EAAKzM,EAAOyH,GACZoqC,EAAK7xC,EAAO0H,UAGZmqC,EAAKplC,IACPxH,EAAIwC,EAAIA,EAAKC,EAAIA,EAAKzC,EACtBA,EAAIwH,EAAIA,EAAKolC,EAAIA,EAAK5sC,GAGxBjF,EAAOyH,GAAMqO,EAAShF,MAAMrE,GAC5BzM,EAAO0H,GAAMoO,EAAS7N,KAAK4pC,GACpB7xC,ECVT,SAASuvD,GAAalwD,UACbC,KAAKC,IAAIF,GAGlB,SAASmwD,GAAanwD,UACbC,KAAKH,IAAIE,GAGlB,SAASowD,GAAcpwD,UACbC,KAAKC,KAAKF,GAGpB,SAASqwD,GAAcrwD,UACbC,KAAKH,KAAKE,GAGpB,SAASswD,GAAMtwD,UACNsR,SAAStR,KAAO,KAAOA,GAAKA,EAAI,EAAI,EAAIA,EAgBjD,SAASuwD,GAAQptD,UACR,SAASnD,UACNmD,GAAGnD,IAIR,SAASwwD,GAAQrjD,OAIlBsjD,EACAC,EAJAjvD,EAAQ0L,EAAU+iD,GAAcC,IAChCxvD,EAASc,EAAMd,OACfyoB,EAAO,YAIFmmC,WACPkB,EArBJ,SAAcrnC,UACLA,IAASnpB,KAAKkpD,EAAIlpD,KAAKC,IACf,KAATkpB,GAAenpB,KAAK0wD,OACV,IAATvnC,GAAcnpB,KAAK2wD,OAClBxnC,EAAOnpB,KAAKC,IAAIkpB,GAAO,SAASppB,UAAYC,KAAKC,IAAIF,GAAKopB,IAiBzDynC,CAAKznC,GAAOsnC,EA3BvB,SAActnC,UACI,KAATA,EAAcknC,GACflnC,IAASnpB,KAAKkpD,EAAIlpD,KAAKH,IACvB,SAASE,UAAYC,KAAKO,IAAI4oB,EAAMppB,IAwBd8wD,CAAK1nC,GAC3BzoB,IAAS,GAAK,GAChB8vD,EAAOF,GAAQE,GAAOC,EAAOH,GAAQG,GACrCvjD,EAAUijD,GAAeC,KAEzBljD,EAAU+iD,GAAcC,IAEnB1uD,SAGTA,EAAM2nB,KAAO,SAASvsB,UACbgB,UAAUxC,QAAU+tB,GAAQvsB,EAAG0yD,KAAanmC,GAGrD3nB,EAAMd,OAAS,SAAS9D,UACfgB,UAAUxC,QAAUsF,EAAO9D,GAAI0yD,KAAa5uD,KAGrDc,EAAM0P,MAAQ,SAASD,OAIjBnS,EAHAiR,EAAIrP,IACJ2C,EAAI0M,EAAE,GACNzM,EAAIyM,EAAEA,EAAE3U,OAAS,IAGjB0D,EAAIwE,EAAID,KAAG3H,EAAI2H,EAAGA,EAAIC,EAAGA,EAAI5H,OAI7BK,EACAqD,EACAuG,EAJAjK,EAAI80D,EAAKntD,GACTpH,EAAIu0D,EAAKltD,GAITtH,EAAa,MAATiV,EAAgB,IAAMA,EAC1BiB,EAAI,QAEFiX,EAAO,IAAMltB,EAAIP,EAAIM,EAAG,IAC5BN,EAAIsE,KAAKwR,MAAM9V,GAAIO,EAAI+D,KAAK2I,KAAK1M,GAC7BoH,EAAI,GAAG,KAAO3H,GAAKO,IAAKP,MACrB0D,EAAI,EAAGrD,EAAI00D,EAAK/0D,GAAI0D,EAAI+pB,IAAQ/pB,QACnCuG,EAAI5J,EAAIqD,GACAiE,OACJsC,EAAIrC,EAAG,MACX4O,EAAE5V,KAAKqJ,SAEJ,KAAOjK,GAAKO,IAAKP,MACjB0D,EAAI+pB,EAAO,EAAGptB,EAAI00D,EAAK/0D,GAAI0D,GAAK,IAAKA,QACxCuG,EAAI5J,EAAIqD,GACAiE,OACJsC,EAAIrC,EAAG,MACX4O,EAAE5V,KAAKqJ,GAGI,EAAXuM,EAAE9W,OAAaY,IAAGkW,EAAIhB,GAAM7N,EAAGC,EAAGtH,SAEtCkW,EAAIhB,GAAMxV,EAAGO,EAAG+D,KAAKsC,IAAIrG,EAAIP,EAAGM,IAAIuD,IAAIkxD,UAGnC3xD,EAAIoT,EAAEpE,UAAYoE,GAG3B1Q,EAAMquD,WAAa,SAAS5+C,EAAOoC,MAChB,MAAbA,IAAmBA,EAAqB,KAAT8V,EAAc,MAAQ,KAChC,mBAAd9V,IAA0BA,EAAYhH,GAAOgH,IACpDpC,IAAU8E,EAAAA,EAAU,OAAO1C,EAClB,MAATpC,IAAeA,EAAQ,QACvB7R,EAAIY,KAAKuC,IAAI,EAAG4mB,EAAOlY,EAAQzP,EAAM0P,QAAQ9V,eAC1C,SAAS2U,OACVrU,EAAIqU,EAAI0gD,EAAKzwD,KAAKsR,MAAMk/C,EAAKzgD,YAC7BrU,EAAIytB,EAAOA,EAAO,KAAKztB,GAAKytB,GACzBztB,GAAK0D,EAAIiU,EAAUtD,GAAK,KAInCvO,EAAMw4B,KAAO,kBACJt5B,EAAOs5B,GAAKt5B,IAAU,CAC3B8Q,MAAO,SAASzR,UAAY0wD,EAAKzwD,KAAKwR,MAAMg/C,EAAKzwD,MACjD4I,KAAM,SAAS5I,UAAY0wD,EAAKzwD,KAAK2I,KAAK6nD,EAAKzwD,UAI5CyB,EChIT,SAASsvD,GAAgB50D,UAChB,SAAS6D,UACPC,KAAKF,KAAKC,GAAKC,KAAKG,MAAMH,KAAKI,IAAIL,EAAI7D,KAIlD,SAAS60D,GAAgB70D,UAChB,SAAS6D,UACPC,KAAKF,KAAKC,GAAKC,KAAKM,MAAMN,KAAKI,IAAIL,IAAM7D,GAI7C,SAAS80D,GAAU9jD,OACpBhR,EAAI,EAAGsF,EAAQ0L,EAAU4jD,GAAgB50D,GAAI60D,GAAgB70D,WAEjEsF,EAAMH,SAAW,SAASzE,UACjBgB,UAAUxC,OAAS8R,EAAU4jD,GAAgB50D,GAAKU,GAAIm0D,GAAgB70D,IAAMA,GAG9E4zD,GAAUtuD,GCnBnB,SAASyvD,GAAazwD,UACb,SAAST,UACPA,EAAI,GAAKC,KAAKO,KAAKR,EAAGS,GAAYR,KAAKO,IAAIR,EAAGS,IAIzD,SAAS0wD,GAAcnxD,UACdA,EAAI,GAAKC,KAAK6Q,MAAM9Q,GAAKC,KAAK6Q,KAAK9Q,GAG5C,SAASoxD,GAAgBpxD,UAChBA,EAAI,GAAKA,EAAIA,EAAIA,EAAIA,EAGvB,SAASqxD,GAAOlkD,OACjB1L,EAAQ0L,EAAUvQ,GAAUA,IAC5B6D,EAAW,WAEN8uD,WACa,IAAb9uD,EAAiB0M,EAAUvQ,GAAUA,IACzB,KAAb6D,EAAmB0M,EAAUgkD,GAAeC,IAC5CjkD,EAAU+jD,GAAazwD,GAAWywD,GAAa,EAAIzwD,WAG3DgB,EAAMhB,SAAW,SAAS5D,UACjBgB,UAAUxC,QAAUoF,GAAY5D,EAAG0yD,KAAa9uD,GAGlDsvD,GAAUtuD,GAGJ,SAASjB,SAClBiB,EAAQ4vD,GAAOjC,aAEnB3tD,EAAM0qB,KAAO,kBACJA,GAAK1qB,EAAOjB,MAAOC,SAASgB,EAAMhB,aAG3Cq7C,GAAUn+C,MAAM8D,EAAO5D,WAEhB4D,ECrCT,IAAIsV,GAAiB,IACjBC,GAAiBD,IACjBE,GAAeD,KACfE,GAAcD,MAEdgH,GAAgB/G,OAChBgH,GAAehH,QAEnB,SAASlV,GAAK4D,UACL,IAAI3D,KAAK2D,GAGlB,SAAS0K,GAAO1K,UACPA,aAAa3D,MAAQ2D,GAAK,IAAI3D,MAAM2D,GAGtC,SAAS0rD,GAASrmD,EAAMoN,EAAO4C,EAAMtD,EAAKF,EAAMH,EAAQF,EAAQN,EAAaxK,OAC9E7K,EAAQouD,KACRJ,EAAShuD,EAAMguD,OACf9uD,EAASc,EAAMd,OAEf4wD,EAAoBjlD,EAAO,OAC3BklD,EAAellD,EAAO,OACtBmlD,EAAenlD,EAAO,SACtBolD,EAAaplD,EAAO,SACpBqlD,EAAYrlD,EAAO,SACnBslD,EAAatlD,EAAO,SACpBulD,EAAcvlD,EAAO,MACrBpB,EAAaoB,EAAO,MAEpBwlD,EAAgB,CAClB,CAAC16C,EAAS,EAAQL,IAClB,CAACK,EAAS,EAAI,KACd,CAACA,EAAQ,GAAI,MACb,CAACA,EAAQ,GAAI,KACb,CAACE,EAAS,EAAQN,IAClB,CAACM,EAAS,EAAI,KACd,CAACA,EAAQ,GAAI,KACb,CAACA,EAAQ,GAAI,MACb,CAAGG,EAAO,EAAQR,IAClB,CAAGQ,EAAO,EAAI,OACd,CAAGA,EAAO,EAAI,OACd,CAAGA,EAAM,GAAI,OACb,CAAIE,EAAM,EAAQT,IAClB,CAAIS,EAAM,EAAI,QACd,CAAGsD,EAAO,EAzCK/D,QA0Cf,CAAEmB,EAAQ,EAAQ4F,IAClB,CAAE5F,EAAQ,EAAI,QACd,CAAGpN,EAAO,EAAQiT,cAGX4xC,EAAW9tD,UACVoV,EAAOpV,GAAQA,EAAOuvD,EACxBj6C,EAAOtV,GAAQA,EAAOwvD,EACtB/5C,EAAKzV,GAAQA,EAAOyvD,EACpB95C,EAAI3V,GAAQA,EAAO0vD,EACnBr5C,EAAMrW,GAAQA,EAAQiZ,EAAKjZ,GAAQA,EAAO2vD,EAAYC,EACtD3mD,EAAKjJ,GAAQA,EAAO6vD,EACpB3mD,GAAYlJ,YAGX+vD,EAAat7C,EAAU/H,EAAOuC,MACrB,MAAZwF,IAAkBA,EAAW,IAKT,iBAAbA,EAAuB,KAG5BrF,EAFA0N,EAAS7e,KAAKI,IAAI4Q,EAAOvC,GAAS+H,EAClC9a,EAAIwU,IAAS,SAASxU,UAAYA,EAAE,MAAO+J,MAAMosD,EAAehzC,UAEhEnjB,IAAMm2D,EAAcz2D,QACtB+V,EAAOO,GAASjD,EAAQwP,GAAcjN,EAAOiN,GAAczH,GAC3DA,EAAWxL,GACFtP,GAETyV,GADAzV,EAAIm2D,EAAchzC,EAASgzC,EAAcn2D,EAAI,GAAG,GAAKm2D,EAAcn2D,GAAG,GAAKmjB,EAASnjB,EAAI,EAAIA,IACnF,GACT8a,EAAW9a,EAAE,KAEbyV,EAAOnR,KAAKuC,IAAImP,GAASjD,EAAOuC,EAAMwF,GAAW,GACjDA,EAAWK,GAENL,EAASI,MAAMzF,UAGjBqF,SAGThV,EAAMguD,OAAS,SAAS9+C,UACf,IAAI1O,KAAKwtD,EAAO9+C,KAGzBlP,EAAMd,OAAS,SAAS9D,UACfgB,UAAUxC,OAASsF,EAAOxC,MAAMoU,KAAK1V,EAAGyT,KAAW3P,IAASnB,IAAIwC,KAGzEP,EAAM0P,MAAQ,SAASsF,OAKjB7Q,EAJAoK,EAAIrP,IACJyV,EAAKpG,EAAE,GACPqG,EAAKrG,EAAEA,EAAE3U,OAAS,GAClB0D,EAAIsX,EAAKD,SAETrX,IAAG6G,EAAIwQ,EAAIA,EAAKC,EAAIA,EAAKzQ,GAE7BA,GADAA,EAAImsD,EAAat7C,EAAUL,EAAIC,IACvBzQ,EAAEtD,MAAM8T,EAAIC,EAAK,GAAK,GACvBtX,EAAI6G,EAAEmI,UAAYnI,GAG3BnE,EAAMquD,WAAa,SAAS5+C,EAAOoC,UACb,MAAbA,EAAoBw8C,EAAaxjD,EAAOgH,IAGjD7R,EAAMw4B,KAAO,SAASxjB,OAChBzG,EAAIrP,WACA8V,EAAWs7C,EAAat7C,EAAUzG,EAAE,GAAIA,EAAEA,EAAE3U,OAAS,KACvDsF,EAAOs5B,GAAKjqB,EAAGyG,IACfhV,GAGRA,EAAM0qB,KAAO,kBACJA,GAAK1qB,EAAO6vD,GAASrmD,EAAMoN,EAAO4C,EAAMtD,EAAKF,EAAMH,EAAQF,EAAQN,EAAaxK,KAGlF7K,EC1HT,SAAS2tD,SAGHh5C,EACAC,EACA27C,EACA7kD,EAGA+d,EARA9d,EAAK,EACLolC,EAAK,EAKLwJ,EAAep/C,GACfuyD,GAAQ,WAGH1tD,EAAMzB,UACD,MAALA,GAAagL,MAAMhL,GAAKA,GAAKkrB,EAAU8wB,EAAqB,IAARgW,EAAY,IAAOhyD,GAAKmN,EAAUnN,GAAKoW,GAAM47C,EAAK7C,EAAQlvD,KAAKuC,IAAI,EAAGvC,KAAKsC,IAAI,EAAGvC,IAAMA,aAe5IsC,EAAMysD,UACN,SAASlyD,OACV4J,EAAIC,SACD7I,UAAUxC,SAAWoL,EAAIC,GAAM7J,EAAGm/C,EAAe+S,EAAYtoD,EAAIC,GAAKjF,GAAS,CAACu6C,EAAa,GAAIA,EAAa,YAfzHv6C,EAAMd,OAAS,SAAS9D,UACfgB,UAAUxC,SAAW+R,EAAIolC,GAAM31C,EAAGuZ,EAAKjJ,EAAUC,GAAMA,GAAKiJ,EAAKlJ,EAAUqlC,GAAMA,GAAKwf,EAAM57C,IAAOC,EAAK,EAAI,GAAKA,EAAKD,GAAK3U,GAAS,CAAC2L,EAAIolC,IAGlJ/wC,EAAM0tD,MAAQ,SAAStyD,UACdgB,UAAUxC,QAAU8zD,IAAUtyD,EAAG4E,GAAS0tD,GAGnD1tD,EAAMu6C,aAAe,SAASn/C,UACrBgB,UAAUxC,QAAU2gD,EAAen/C,EAAG4E,GAASu6C,GAUxDv6C,EAAMa,MAAQA,EAAMysD,IAEpBttD,EAAMkuD,WAAartD,EAAMstD,IAEzBnuD,EAAMypB,QAAU,SAASruB,UAChBgB,UAAUxC,QAAU6vB,EAAUruB,EAAG4E,GAASypB,GAG5C,SAAStlB,UACduH,EAAYvH,EAAGwQ,EAAKxQ,EAAEwH,GAAKiJ,EAAKzQ,EAAE4sC,GAAKwf,EAAM57C,IAAOC,EAAK,EAAI,GAAKA,EAAKD,GAChE3U,GAIJ,SAAS0qB,GAAKvtB,EAAQkgB,UACpBA,EACFne,OAAO/B,EAAO+B,UACdq7C,aAAap9C,EAAOo9C,gBACpBmT,MAAMvwD,EAAOuwD,SACbjkC,QAAQtsB,EAAOssB,WAGP,SAAS+mC,SAClBxwD,EAAQsuD,GAAUX,IAAAA,CAAcxyD,YAEpC6E,EAAM0qB,KAAO,kBACJA,GAAK1qB,EAAOwwD,OAGdlW,GAAiBp+C,MAAM8D,EAAO5D,WAuBhC,SAASq0D,SACVzwD,EAAQ4vD,GAAOjC,aAEnB3tD,EAAM0qB,KAAO,kBACJA,GAAK1qB,EAAOywD,MAAiBzxD,SAASgB,EAAMhB,aAG9Cs7C,GAAiBp+C,MAAM8D,EAAO5D,WC5FvC,SAASuxD,SAKHh5C,EACAC,EACA+xC,EACA4J,EACAG,EAEAhlD,EAEA+d,EAZA9d,EAAK,EACLolC,EAAK,GACLvT,EAAK,EACL3iC,EAAI,EAMJ0/C,EAAep/C,GAEfuyD,GAAQ,WAGH1tD,EAAMzB,UACNgL,MAAMhL,GAAKA,GAAKkrB,GAAWlrB,EAAI,KAAQA,GAAKmN,EAAUnN,IAAMqW,IAAO/Z,EAAI0D,EAAI1D,EAAI+Z,EAAK27C,EAAMG,GAAMnW,EAAamT,EAAQlvD,KAAKuC,IAAI,EAAGvC,KAAKsC,IAAI,EAAGvC,IAAMA,aAenJsC,EAAMysD,UACN,SAASlyD,OACV4J,EAAIC,EAAI0rD,SACLv0D,UAAUxC,SAAWoL,EAAIC,EAAI0rD,GAAMv1D,EAAGm/C,EAAe8S,GAAUC,EAAa,CAACtoD,EAAIC,EAAI0rD,IAAM3wD,GAAS,CAACu6C,EAAa,GAAIA,EAAa,IAAMA,EAAa,YAfjKv6C,EAAMd,OAAS,SAAS9D,UACfgB,UAAUxC,SAAW+R,EAAIolC,EAAIvT,GAAMpiC,EAAGuZ,EAAKjJ,EAAUC,GAAMA,GAAKiJ,EAAKlJ,EAAUqlC,GAAMA,GAAK4V,EAAKj7C,EAAU8xB,GAAMA,GAAK+yB,EAAM57C,IAAOC,EAAK,EAAI,IAAOA,EAAKD,GAAK+7C,EAAM97C,IAAO+xC,EAAK,EAAI,IAAOA,EAAK/xC,GAAK/Z,EAAI+Z,EAAKD,GAAM,EAAI,EAAG3U,GAAS,CAAC2L,EAAIolC,EAAIvT,IAGnPx9B,EAAM0tD,MAAQ,SAAStyD,UACdgB,UAAUxC,QAAU8zD,IAAUtyD,EAAG4E,GAAS0tD,GAGnD1tD,EAAMu6C,aAAe,SAASn/C,UACrBgB,UAAUxC,QAAU2gD,EAAen/C,EAAG4E,GAASu6C,GAUxDv6C,EAAMa,MAAQA,EAAMysD,IAEpBttD,EAAMkuD,WAAartD,EAAMstD,IAEzBnuD,EAAMypB,QAAU,SAASruB,UAChBgB,UAAUxC,QAAU6vB,EAAUruB,EAAG4E,GAASypB,GAG5C,SAAStlB,UACduH,EAAYvH,EAAGwQ,EAAKxQ,EAAEwH,GAAKiJ,EAAKzQ,EAAE4sC,GAAK4V,EAAKxiD,EAAEq5B,GAAK+yB,EAAM57C,IAAOC,EAAK,EAAI,IAAOA,EAAKD,GAAK+7C,EAAM97C,IAAO+xC,EAAK,EAAI,IAAOA,EAAK/xC,GAAK/Z,EAAI+Z,EAAKD,GAAM,EAAI,EAC7I3U,GAkCJ,SAAS4wD,SACV5wD,EAAQ4vD,GAAOjC,aAEnB3tD,EAAM0qB,KAAO,kBACJA,GAAK1qB,EAAO4wD,MAAgB5xD,SAASgB,EAAMhB,aAG7Cs7C,GAAiBp+C,MAAM8D,EAAO5D,WC1FvC,SAASy0D,GAAWphD,EAAOqhD,EAAcC,SACjCC,EAAQvhD,EAAQqhD,EAA8B,EAAfC,SAC9BthD,EAAQuhD,EAAQ,EAAIA,EAAQ,EAAI,EAGzC,MACMjc,GAAS,SACTkc,GAAM,MACNC,GAAM,MACNC,GAAO,OACPC,GAAS,SACTC,GAAO,OACP/2C,GAAM,MACNg3C,GAAa,aAEbhmB,GAAW,WACXimB,GAAW,WACXC,GAAY,YACZC,GAAU,UACVC,GAAQ,QACRC,GAAO,OACPC,GAAa,cAEbC,GAAa,aACbC,GAAW,WACXC,GAAe,eACfC,GAAgB,gBAChBC,GAAW,WAiDjB,SAAShsB,WACDjmC,EAAQkyD,KAAezoC,aAAQjmB,GAC/BtE,EAASc,EAAMd,OACfizD,EAAenyD,EAAMa,UAEvB8O,EACA4qB,EAFA63B,EAAU,CAAC,EAAG,GAGdtiD,GAAQ,EACRghD,EAAe,EACfC,EAAe,EACf7pD,EAAQ,YAGH4mD,UACDtzD,EAAI0E,IAAStF,OACb0S,EAAU8lD,EAAQ,GAAKA,EAAQ,GAC/B5iD,EAAO4iD,EAAQ,EAAI9lD,GACnB0kD,EAAQH,GAAUr2D,EAAGs2D,EAAcC,OACrC9jD,EAAQmlD,EAAQ9lD,EAAU,GAC9BqD,GAAQH,EAAOvC,IAAU+jD,GAAS,GAE9BlhD,IACFH,EAAOnR,KAAKwR,MAAML,IAGpB1C,IAAUuC,EAAOvC,EAAQ0C,GAAQnV,EAAIs2D,IAAiB5pD,EACtDqzB,EAAY5qB,GAAQ,EAAImhD,GAEpBhhD,IACF7C,EAAQzO,KAAKsR,MAAM7C,GACnBstB,EAAY/7B,KAAKsR,MAAMyqB,UAGnBlqB,EAASxP,GAAMrG,GAAGuD,KAAI7D,GAAK+S,EAAQ0C,EAAOzV,WACzCi4D,EAAa7lD,EAAU+D,EAAO/D,UAAY+D,iBAvB5CrQ,EAAMypB,QA0BbzpB,EAAMd,OAAS,SAAU9D,UACnBgB,UAAUxC,QACZsF,EAAO9D,GACA0yD,KAEA5uD,KAIXc,EAAMa,MAAQ,SAAUzF,UAClBgB,UAAUxC,QACZw4D,EAAU,EAAEh3D,EAAE,IAAKA,EAAE,IACd0yD,KAEAsE,EAAQr2D,SAInBiE,EAAMkuD,WAAa,SAAU9yD,UAC3Bg3D,EAAU,EAAEh3D,EAAE,IAAKA,EAAE,IACrB0U,GAAQ,EACDg+C,KAGT9tD,EAAMu6B,UAAY,kBACTA,GAGTv6B,EAAM2P,KAAO,kBACJA,GAGT3P,EAAM8P,MAAQ,SAAU1U,UAClBgB,UAAUxC,QACZkW,IAAU1U,EACH0yD,KAEAh+C,GAIX9P,EAAMwU,QAAU,SAAUpZ,UACpBgB,UAAUxC,QACZm3D,EAAevyD,KAAKuC,IAAI,EAAGvC,KAAKsC,IAAI,EAAG1F,IACvC01D,EAAeC,EACRjD,KAEAgD,GAIX9wD,EAAM8wD,aAAe,SAAU11D,UACzBgB,UAAUxC,QACZk3D,EAAetyD,KAAKuC,IAAI,EAAGvC,KAAKsC,IAAI,EAAG1F,IAChC0yD,KAEAgD,GAIX9wD,EAAM+wD,aAAe,SAAU31D,UACzBgB,UAAUxC,QACZm3D,EAAevyD,KAAKuC,IAAI,EAAGvC,KAAKsC,IAAI,EAAG1F,IAChC0yD,KAEAiD,GAIX/wD,EAAMkH,MAAQ,SAAU9L,UAClBgB,UAAUxC,QACZsN,EAAQ1I,KAAKuC,IAAI,EAAGvC,KAAKsC,IAAI,EAAG1F,IACzB0yD,KAEA5mD,GAIXlH,EAAMqyD,YAAc,SAAUj3D,MAEhB,MAARA,EAAE,IAAsB,MAARA,EAAE,GAAY,aAC5BkR,EAAU8lD,EAAQ,GAAKA,EAAQ,GAC/B/hD,EAAS/D,EAAU6lD,IAAe7lD,UAAY6lD,IAC9C33D,EAAI6V,EAAOzW,OAAS,MAGtBkE,EACAlD,EACAuJ,EAJAlD,GAAM7F,EAAE,GACR8F,GAAM9F,EAAE,UAKR6F,GAAOA,GAAMC,GAAOA,IAEpBA,EAAKD,IACPkD,EAAIlD,EACJA,EAAKC,EACLA,EAAKiD,GAGHjD,EAAKmP,EAAO,IAAMpP,EAAKmxD,EAAQ,EAAI9lD,YAEvCxO,EAAIU,KAAKuC,IAAI,EAAG4N,GAAY0B,EAAQpP,GAAM,GAC1CrG,EAAIqG,IAAOC,EAAKpD,EAAI6Q,GAAY0B,EAAQnP,GAAM,EAE1CD,EAAKoP,EAAOvS,GAAKy8B,EAAY,SAASz8B,EAEtCwO,IAEFnI,EAAIrG,EACJA,EAAItD,EAAII,EACRA,EAAIJ,EAAI2J,GAGHrG,EAAIlD,OAAI4I,EAAYtE,IAASnD,MAAM+B,EAAGlD,EAAI,KAGnDoF,EAAMguD,OAAS,SAAU5yD,SACjBsC,EAAQsC,EAAMqyD,YAAY,CAACj3D,EAAGA,WAC7BsC,EAAQA,EAAM,GAAKA,GAG5BsC,EAAM0qB,KAAO,kBACJub,KAAO/mC,OAAOA,KAAU2B,MAAMuxD,GAAStiD,MAAMA,GAAOghD,aAAaA,GAAcC,aAAaA,GAAc7pD,MAAMA,IAGlH4mD,IAGT,SAASwE,GAAStyD,SACV0qB,EAAO1qB,EAAM0qB,YACnB1qB,EAAMwU,QAAUxU,EAAM+wD,oBACf/wD,EAAM8wD,aAEb9wD,EAAM0qB,KAAO,kBACJ4nC,GAAS5nC,MAGX1qB,EAOT,IAAIjC,GAAMrB,MAAMmG,UAAU9E,IAC1B,SAASgT,GAAQ3V,UACR2C,GAAI/B,KAAKZ,EAAGgD,GAGrB,MAAMrC,GAAQW,MAAMmG,UAAU9G,MAuC9B,MAAMw2D,GAAS,GAKf,SAAS7tD,GAAOwG,EAAMxE,EAAa8rD,SAC3BpwB,EAAM,iBACJvnC,EAAI6L,WAEL7L,EAAEw3D,cACLx3D,EAAEw3D,YAAcx3D,EAAEmzD,OAzRxB,SAAsBhuD,UACb,SAAU5E,OAGX+I,EAFAlD,EAAK7F,EAAE,GACP8F,EAAK9F,EAAE,UAGP8F,EAAKD,IACPkD,EAAIlD,EACJA,EAAKC,EACLA,EAAKiD,GAGA,CAACnE,EAAMguD,OAAO/sD,GAAKjB,EAAMguD,OAAO9sD,KA6QVmxD,CAAYx3D,GAAKA,EAAE43D,aAzQpD,SAA4BzyD,UACnB,SAAU5E,SACTyF,EAAQb,EAAMa,YAIhBE,EACAoD,EACAjK,EACAM,EANAyG,EAAK7F,EAAE,GACP8F,EAAK9F,EAAE,GACP0F,GAAO,MAMPI,EAAKD,IACPkD,EAAIlD,EACJA,EAAKC,EACLA,EAAKiD,GAGFjK,EAAI,EAAGM,EAAIqG,EAAMjH,OAAQM,EAAIM,IAAKN,EACjC2G,EAAM3G,IAAM+G,GAAMJ,EAAM3G,IAAMgH,IAC5BJ,EAAM,IAAGA,EAAM5G,GACnB6G,EAAM7G,QAIN4G,EAAM,UACVG,EAAKjB,EAAMyyD,aAAa5xD,EAAMC,IAC9BI,EAAKlB,EAAMyyD,aAAa5xD,EAAME,IACvB,MAAWyC,IAAVvC,EAAG,GAAmBA,EAAG,GAAKA,EAAG,QAAcuC,IAAVtC,EAAG,GAAmBA,EAAG,GAAKA,EAAG,KA8OfwxD,CAAkB73D,QAAK2I,GAGtF3I,EAAEqQ,KAAOA,EACFrQ,UAGTunC,EAAIowB,SAAW5qD,GAAMzJ,EAAMq0D,IACpBpwB,EAGT,SAASpiC,GAAMkL,EAAMlL,EAAOwyD,UACtBp2D,UAAUxC,OAAS,GACrB24D,GAAOrnD,GAAQxG,GAAOwG,EAAMlL,EAAOwyD,GAC5Bn2D,MAEAs2D,GAAiBznD,GAAQqnD,GAAOrnD,QAAQ1H,EAoCnD,SAASmvD,GAAiBznD,UACjBpI,GAAeyvD,GAAQrnD,GAGhC,SAAS0nD,GAAQ91D,EAAKoO,SACdrQ,EAAI03D,GAAOz1D,UACVjC,GAAKA,EAAE23D,SAAStnD,GAGzB,SAAS2nD,GAAa/1D,UACb81D,GAAQ91D,EAAK+0D,IAEtB,SAASiB,GAAWh2D,UACX81D,GAAQ91D,EAAKg1D,IAEtB,SAASiB,GAAej2D,UACf81D,GAAQ91D,EAAKi1D,IAEtB,SAASiB,GAAcl2D,UACd81D,GAAQ91D,EAAKm0D,IAKtB,SAASgC,GAAgBn2D,UAChB81D,GAAQ91D,EAAKk1D,IAEtB,SAASkB,GAAWp2D,UACX81D,GAAQ91D,EAAKwuC,OAjYL,YCVF,SAASnwC,EAAS+D,OAC3BuqB,WAEKzpB,EAAMzB,UACD,MAALA,GAAagL,MAAMhL,GAAKA,GAAKkrB,EAAUlrB,SAGhDyB,EAAMguD,OAAShuD,EAEfA,EAAMd,OAASc,EAAMa,MAAQ,SAASzF,UAC7BgB,UAAUxC,QAAUsF,EAASxC,MAAMoU,KAAK1V,EAAGyT,IAAS7O,GAASd,EAAOnD,SAG7EiE,EAAMypB,QAAU,SAASruB,UAChBgB,UAAUxC,QAAU6vB,EAAUruB,EAAG4E,GAASypB,GAGnDzpB,EAAM0qB,KAAO,kBACJvvB,EAAS+D,GAAQuqB,QAAQA,IAGlCvqB,EAAS9C,UAAUxC,OAAS8C,MAAMoU,KAAK5R,EAAQ2P,IAAU,CAAC,EAAG,GAEtDy/C,GAAUtuD,SD0Tb+0C,IRzRS,SAASrY,QAClB18B,EAAQouD,YAEZpuD,EAAM0qB,KAAO,kBACJA,GAAK1qB,EAAO08B,MAGrB2d,GAAUn+C,MAAM8D,EAAO5D,WAEhBkyD,GAAUtuD,KQgRU6xD,OACvBZ,IN9MS,SAASxyD,QAClBuB,EAAQ+uD,GAAQpB,MAAezuD,OAAO,CAAC,EAAG,YAE9Cc,EAAM0qB,KAAO,kBACJA,GAAK1qB,EAAOvB,KAAOkpB,KAAK3nB,EAAM2nB,SAGvC0yB,GAAUn+C,MAAM8D,EAAO5D,WAEhB4D,IMqMc,CAAC6xD,GAAYZ,QAC9BC,GAAK9pD,GAAYyqD,OACjBV,IJxSC,kBACEpyD,GAAI7C,MAAM,KAAME,WAAW4C,SAAS,MIuSpB6yD,OACnBT,IL9TS,SAAS1yD,QAClBsB,EAAQwvD,GAAU7B,aAEtB3tD,EAAM0qB,KAAO,kBACJA,GAAK1qB,EAAOtB,KAAUmB,SAASG,EAAMH,aAGvCw6C,GAAUn+C,MAAM8D,EAAO5D,aKuTHy1D,OACvBR,IHpNS,kBACNhX,GAAUn+C,MAAM2zD,GAASt0C,GAAUC,GAAW7B,GAAUD,GAAS+B,GAAUC,GAAYC,GAAYC,GAAiBkI,IAAY5kB,OAAO,CAAC,IAAIsB,KAAK,IAAM,EAAG,GAAI,IAAIA,KAAK,IAAM,EAAG,KAAMpE,aGmNtK,CAACy1D,GAAYI,QAChC33C,IErVS,kBACN+/B,GAAUn+C,MAAM2zD,GAAS/3C,GAASF,GAAU2C,GAASnD,GAAQF,GAASF,GAAW8E,GAAWC,GAAgB6H,IAAW1kB,OAAO,CAACsB,KAAK8Z,IAAI,IAAM,EAAG,GAAI9Z,KAAK8Z,IAAI,IAAM,EAAG,KAAMle,aFoV/J,CAACy1D,GAAYI,QAE9BX,GAAYlqD,GAAmB,CAACyqD,GAAYG,QAE3C,oBAA0B5qD,GAAmB,CAACyqD,GAAYG,QAC1D,kBFrRA,SAASmB,QACVnzD,EAAQ+uD,GAAQpB,MAAezuD,OAAO,CAAC,EAAG,YAE9Cc,EAAM0qB,KAAO,kBACJA,GAAK1qB,EAAOmzD,KAAiBxrC,KAAK3nB,EAAM2nB,SAG1C2yB,GAAiBp+C,MAAM8D,EAAO5D,aE8Qa,CAACy1D,GAAYG,GAAef,QACzE,iBAAuB7pD,GAAsB,CAACyqD,GAAYG,QAC1D,mBFzPA,kBACEvB,GAAcv0D,MAAM,KAAME,WAAW4C,SAAS,MEwPD,CAAC6yD,GAAYG,QAC5D,qBF9QA,SAASoB,QACVpzD,EAAQwvD,GAAU7B,aAEtB3tD,EAAM0qB,KAAO,kBACJA,GAAK1qB,EAAOozD,KAAoBvzD,SAASG,EAAMH,aAGjDy6C,GAAiBp+C,MAAM8D,EAAO5D,aEuQmB,CAACy1D,GAAYG,QAEhE,oBDvSQ,SAASqB,QAClBrzD,EAAQsuD,GAAUX,IAAAA,CAAcxyD,YAEpC6E,EAAM0qB,KAAO,kBACJA,GAAK1qB,EAAOqzD,MAGd/Y,GAAiBp+C,MAAM8D,EAAO5D,aCgSW,CAACy1D,GAAYG,QACxD,iBD9RA,SAASsB,QACVtzD,EAAQ+uD,GAAQpB,MAAezuD,OAAO,CAAC,GAAK,EAAG,YAEnDc,EAAM0qB,KAAO,kBACJA,GAAK1qB,EAAOszD,KAAgB3rC,KAAK3nB,EAAM2nB,SAGzC2yB,GAAiBp+C,MAAM8D,EAAO5D,aCuRW,CAACy1D,GAAYG,GAAef,QACvE,gBAAsB7pD,GAAqB,CAACyqD,GAAYG,QACxD,kBDlQA,kBACEpB,GAAa10D,MAAM,KAAME,WAAW4C,SAAS,MCiQF,CAAC6yD,GAAYG,QAC1D,oBDvRA,SAASuB,QACVvzD,EAAQwvD,GAAU7B,aAEtB3tD,EAAM0qB,KAAO,kBACJA,GAAK1qB,EAAOuzD,KAAmB1zD,SAASG,EAAMH,aAGhDy6C,GAAiBp+C,MAAM8D,EAAO5D,aCgRiB,CAACy1D,GAAYG,QAE/D1mB,IGvWS,SAASz6B,QAIlB4Y,EAHAvqB,EAAS,GACT2B,EAAQ,GACR2yD,EAAa,YAGR1F,QACH5zD,EAAI,EAAGM,EAAIgE,KAAKuC,IAAI,EAAGF,EAAMjH,YACjC45D,EAAa,IAAI92D,MAAMlC,EAAI,KAClBN,EAAIM,GAAGg5D,EAAWt5D,EAAI,GAAK6J,GAAU7E,EAAQhF,EAAIM,UACnDwF,WAGAA,EAAMzB,UACD,MAALA,GAAagL,MAAMhL,GAAKA,GAAKkrB,EAAU5oB,EAAMmvC,GAAOwjB,EAAYj1D,WAGzEyB,EAAMyyD,aAAe,SAASvjD,OACxBhV,EAAI2G,EAAM2Q,QAAQtC,UACfhV,EAAI,EAAI,CAACmU,IAAKA,KAAO,CAC1BnU,EAAI,EAAIs5D,EAAWt5D,EAAI,GAAKgF,EAAO,GACnChF,EAAIs5D,EAAW55D,OAAS45D,EAAWt5D,GAAKgF,EAAOA,EAAOtF,OAAS,KAInEoG,EAAMd,OAAS,SAAS9D,OACjBgB,UAAUxC,OAAQ,OAAOsF,EAAOnD,QACrCmD,EAAS,OACJ,IAAIqP,KAAKnT,EAAY,MAALmT,GAAchF,MAAMgF,GAAKA,IAAIrP,EAAOpE,KAAKyT,UAC9DrP,EAAO8Z,KAAKpX,IACLksD,KAGT9tD,EAAMa,MAAQ,SAASzF,UACdgB,UAAUxC,QAAUiH,EAAQnE,MAAMoU,KAAK1V,GAAI0yD,KAAajtD,EAAM9E,SAGvEiE,EAAMypB,QAAU,SAASruB,UAChBgB,UAAUxC,QAAU6vB,EAAUruB,EAAG4E,GAASypB,GAGnDzpB,EAAM03B,UAAY,kBACT87B,EAAWz3D,SAGpBiE,EAAM0qB,KAAO,kBACJ7Z,IACF3R,OAAOA,GACP2B,MAAMA,GACN4oB,QAAQA,IAGR4wB,GAAUn+C,MAAM8D,EAAO5D,aHmTC,CAAC21D,GAAczmB,QAC1CimB,IIvWS,SAASkC,QAMlBhqC,EALA9d,EAAK,EACLolC,EAAK,EACLv2C,EAAI,EACJ0E,EAAS,CAAC,IACV2B,EAAQ,CAAC,EAAG,YAGPb,EAAMzB,UACD,MAALA,GAAaA,GAAKA,EAAIsC,EAAMmvC,GAAO9wC,EAAQX,EAAG,EAAG/D,IAAMivB,WAGvDqkC,QACH5zD,GAAK,MACTgF,EAAS,IAAIxC,MAAMlC,KACVN,EAAIM,GAAG0E,EAAOhF,KAAOA,EAAI,GAAK62C,GAAM72C,EAAIM,GAAKmR,IAAOnR,EAAI,UAC1DwF,SAGTA,EAAMd,OAAS,SAAS9D,UACfgB,UAAUxC,SAAW+R,EAAIolC,GAAM31C,EAAGuQ,GAAMA,EAAIolC,GAAMA,EAAI+c,KAAa,CAACniD,EAAIolC,IAGjF/wC,EAAMa,MAAQ,SAASzF,UACdgB,UAAUxC,QAAUY,GAAKqG,EAAQnE,MAAMoU,KAAK1V,IAAIxB,OAAS,EAAGk0D,KAAajtD,EAAM9E,SAGxFiE,EAAMyyD,aAAe,SAASvjD,OACxBhV,EAAI2G,EAAM2Q,QAAQtC,UACfhV,EAAI,EAAI,CAACmU,IAAKA,KACfnU,EAAI,EAAI,CAACyR,EAAIzM,EAAO,IACpBhF,GAAKM,EAAI,CAAC0E,EAAO1E,EAAI,GAAIu2C,GACzB,CAAC7xC,EAAOhF,EAAI,GAAIgF,EAAOhF,KAG/B8F,EAAMypB,QAAU,SAASruB,UAChBgB,UAAUxC,QAAU6vB,EAAUruB,EAAG4E,GAASA,GAGnDA,EAAMwzD,WAAa,kBACVt0D,EAAOnD,SAGhBiE,EAAM0qB,KAAO,kBACJ+oC,IACFv0D,OAAO,CAACyM,EAAIolC,IACZlwC,MAAMA,GACN4oB,QAAQA,IAGR4wB,GAAUn+C,MAAMoyD,GAAUtuD,GAAQ5D,aJqTV21D,OAC3BP,IKzWS,SAASztD,QAGlB0lB,EAFAvqB,EAAS,CAAC,IACV2B,EAAQ,CAAC,EAAG,GAEZrG,EAAI,WAECwF,EAAMzB,UACD,MAALA,GAAaA,GAAKA,EAAIsC,EAAMmvC,GAAO9wC,EAAQX,EAAG,EAAG/D,IAAMivB,SAGhEzpB,EAAMd,OAAS,SAAS9D,UACfgB,UAAUxC,QAAUsF,EAASxC,MAAMoU,KAAK1V,GAAIZ,EAAIgE,KAAKsC,IAAI5B,EAAOtF,OAAQiH,EAAMjH,OAAS,GAAIoG,GAASd,EAAOnD,SAGpHiE,EAAMa,MAAQ,SAASzF,UACdgB,UAAUxC,QAAUiH,EAAQnE,MAAMoU,KAAK1V,GAAIZ,EAAIgE,KAAKsC,IAAI5B,EAAOtF,OAAQiH,EAAMjH,OAAS,GAAIoG,GAASa,EAAM9E,SAGlHiE,EAAMyyD,aAAe,SAASvjD,OACxBhV,EAAI2G,EAAM2Q,QAAQtC,SACf,CAAChQ,EAAOhF,EAAI,GAAIgF,EAAOhF,KAGhC8F,EAAMypB,QAAU,SAASruB,UAChBgB,UAAUxC,QAAU6vB,EAAUruB,EAAG4E,GAASypB,GAGnDzpB,EAAM0qB,KAAO,kBACJ3mB,IACF7E,OAAOA,GACP2B,MAAMA,GACN4oB,QAAQA,IAGR4wB,GAAUn+C,MAAM8D,EAAO5D,aLuUG21D,OAE7BH,IA/FN,SAAS8B,QACHx0D,EAAS,GACT2B,EAAQ,YAEHb,EAAMzB,UACD,MAALA,GAAaA,GAAMA,OAAIiF,EAAY3C,GAAOmvC,GAAO9wC,EAAQX,GAAK,GAAKsC,EAAMjH,eAGlFoG,EAAMd,OAAS,SAAU9D,UACnBgB,UAAUxC,QACZsF,EAAS6R,GAAQ3V,GACV4E,GAEAd,EAAOnD,SAIlBiE,EAAMa,MAAQ,SAAUzF,UAClBgB,UAAUxC,QACZiH,EAAQ9E,GAAMC,KAAKZ,GACZ4E,GAEAa,EAAM9E,SAIjBiE,EAAMquD,WAAa,SAAU5+C,EAAOoC,UAC3B8hD,GAAaz0D,EAAO,GAAIhB,EAAKgB,GAAkB,MAATuQ,EAAgB,GAAKA,EAAOoC,IAG3E7R,EAAM0qB,KAAO,kBACJgpC,IAAkBx0D,OAAOc,EAAMd,UAAU2B,MAAMb,EAAMa,UAGvDb,IA6D0B,CAAC8xD,GAAUC,QACxCN,GAASrqD,GAAgB0qD,OACzBH,GAAM1rB,GAAM6rB,OACZJ,IA7GN,kBACSY,GAASrsB,KAAO6qB,aAAa,MA4GlBgB,IAgCpB,MAAM8B,GAAa,CAAC,QAAS,OAAQ,WAAY,YACjD,SAASC,GAAiBtZ,EAAc15C,SAChCoM,EAAQpM,EAAM,GACdG,EAAO9C,EAAK2C,GAASoM,SACpB,SAAU/S,UACRqgD,EAAattC,EAAQ/S,EAAI8G,IAGpC,SAAS8yD,GAAkB5K,EAAQh+C,EAAMy9C,UAChCoL,GAAczG,GAAYpiD,GAAQ,MAAOy9C,GAAQO,GAE1D,SAAS8K,GAAqBzZ,EAAc9qC,SACpCipB,EAAU,IAAIh8B,MAAM+S,GACpBjV,EAAIiV,EAAQ,MAEb,IAAIvV,EAAI,EAAGA,EAAIuV,GAAQipB,EAAQx+B,GAAKqgD,IAAergD,EAAIM,UAErDk+B,EAQT,SAASu7B,GAAcC,EAASpzD,EAAKC,SAC7B5B,EAAQ4B,EAAMD,MAChB5G,EAAGiK,EAAGtJ,SAELsE,GAAU8T,OAAOpD,SAAS1Q,IAG7BjF,GAAKiK,EAAI+vD,EAAQhpD,MAAMsG,QAAQ,KAC/BrN,EAAIjK,EAAI,EAAIiK,EAAIA,EAAEpI,MAAM7B,EAAI,GAC5BW,EAAImF,GAAMmE,EAANnE,GAAWd,OAAO,CAAC4B,EAAKC,IAAMF,MAAM,CAAC,EAAG,IAC5C+yD,GAAW31D,SAAQwS,GAAKyjD,EAAQzjD,GAAK5V,EAAE4V,GAAGyjD,EAAQzjD,MAAQ,IACnD5V,GANAgF,EAAS,IASpB,SAASytD,GAAYpiD,EAAMy9C,SACnBwL,EAASJ,GAIjB,SAAgB7oD,SACP,cAAgBA,EAAK6I,cAAc6X,MAAM,KAAK7tB,KAAIlD,GAAKA,EAAE,GAAG6X,cAAgB7X,EAAEkB,MAAM,KAAIwM,KAAK,IALjF7M,CAAOwP,WACV,MAATy9C,GAAiBwL,GAAUA,EAAOxL,MAAQwL,EAAOxL,MAAMA,GAASwL,EA+EzE,SAASjL,GAAOkL,SACR55D,EAAI45D,EAAQx6D,OAAS,EAAI,EACzBc,EAAI,IAAIgC,MAAMlC,OAEf,IAAIN,EAAI,EAAGA,EAAIM,GAClBE,EAAER,GAAK,IAAMk6D,EAAQr4D,MAAU,EAAJ7B,EAAa,IAAJA,UAG/BQ,EAGT,SAASwB,GAAMd,EAAGsG,OACX,MAAM9D,KAAKxC,EAAGi5D,GAAOz2D,EAAG8D,EAAEtG,EAAEwC,KAGnC,MAAM02D,GAAU,GAGhB,SAASD,GAAO/6D,EAAM+6D,UACpB/6D,EAAOA,GAAQA,EAAKya,cAEhB3X,UAAUxC,OAAS,GACrB06D,GAAQh7D,GAAQ+6D,EACTh4D,MAEAi4D,GAAQh7D,GATnB4C,GAjCiB,CACfq4D,WAAY,+DACZC,WAAY,2HACZC,YAAa,2HACbC,YAAa,2HACbC,UAAW,+DACXC,UAAW,2HACXC,OAAQ,mDACRC,MAAO,mDACPC,OAAQ,2EACRC,QAAS,yDACTC,QAAS,mDACTC,KAAM,yDACNC,KAAM,mDACNC,KAAM,4EAmBQlM,IAChBhtD,GAzFmB,CACjBm5D,MAAO,qEACPC,OAAQ,qEACRC,MAAO,qEACPC,QAAS,qEACTC,QAAS,qEACTC,KAAM,qEACNC,UAAW,qEACXC,WAAY,qEACZC,UAAW,qEACXC,UAAW,qEACXC,WAAY,qEACZC,gBAAiB,qEACjBC,UAAW,qEACXC,UAAW,qEACXC,YAAa,qEACbC,kBAAmB,qEACnBC,gBAAiB,qEACjBC,WAAY,qEACZC,eAAgB,qEAChBC,YAAa,qEACbC,aAAc,qEACdC,QAAS,qEACTC,QAAS,qEACTC,gBAAiB,qEACjBC,cAAe,qEACfC,eAAgB,qEAChBC,gBAAiB,qEACjBC,SAAU,qEACVC,QAAS,6LACTC,MAAO,6LACPC,QAAS,6LACTC,OAAQ,6LACRC,QAAS,mYACTC,QAAS,6LACTC,QAAS,6LACTC,MAAO,mYACPC,OAAQ,qEACRC,UAAW,yDACXC,MAAO,qEACPC,UAAW,qEACXC,UAAW,qEACXC,WAAY,qEACZC,QAAS,qEACTC,aAAc,+DACdC,cAAe,+DACfC,WAAY,yDACZC,YAAa,+DACbC,cAAe,+DACfC,SAAU,+DACVC,SAAU,+DACVC,UAAW,+DACXC,UAAW,6CACXC,QAAS,2DAoCOr9D,GAAK04D,GAAkB5K,GAAO9tD,MAYhD,MAAMs9D,GAAe,SAIfC,GAAmBj7D,GAASjB,EAAQiB,GAASA,EAAMK,KAAI+D,GAAK0R,OAAO1R,KAAM0R,OAAO9V,GAEhFkE,GAAY,CAAC9D,EAAGlD,IAAMkD,EAAE,GAAKlD,EAAE,GAE/Bg+D,GAAa,CAAC96D,EAAGlD,IAAMA,EAAE,GAAKkD,EAAE,GAUtC,SAAS+6D,GAAU74D,EAAOyP,EAAOqpD,OAC3BnpD,SAEAnK,GAASiK,KACPzP,EAAMkmC,OACRz2B,EAAQjR,KAAKuC,IAAI0O,EAAOzP,EAAMkmC,KAAKtsC,SAGtB,MAAXk/D,IACFrpD,EAAQjR,KAAKsC,IAAI2O,EAAOjR,KAAKwR,MAAMhP,GAAKhB,EAAMd,UAAY45D,GAAW,MAIrEn8D,EAAS8S,KACXE,EAAOF,EAAME,KACbF,EAAQA,EAAMuF,UAGZtP,GAAS+J,KACXA,EAAQzP,EAAMkL,OAASmmD,GAAOr1C,GAAavM,GAASzP,EAAMkL,MAAQoP,GAAM2B,GAAYxM,GAAStV,EAAM,qDAC/FwV,IAAMF,EAAQA,EAAM2F,MAAMzF,KAGzBF,EAWT,SAASspD,GAAW/4D,EAAO0P,EAAOD,OAC5B5O,EAAQb,EAAMa,QACdI,EAAKJ,EAAM,GACXK,EAAKhD,EAAK2C,GACVqsB,EAAMtrB,MAENX,EAAKC,IACPL,EAAQK,EACRA,EAAKD,EACLA,EAAKJ,EACLqsB,EAAM0rC,IAGR33D,EAAKzC,KAAKwR,MAAM/O,GAChBC,EAAK1C,KAAK2I,KAAKjG,GAGfwO,EAAQA,EAAM3R,KAAI+D,GAAK,CAACA,EAAG9B,EAAM8B,MAAKkG,QAAO5M,GAAK6F,GAAM7F,EAAE,IAAMA,EAAE,IAAM8F,IAAI8X,KAAKkU,GAAKnvB,KAAI3C,GAAKA,EAAE,KAE7FqU,EAAQ,GAAKC,EAAM9V,OAAS,EAAG,OAC3Bo/D,EAAY,CAACtpD,EAAM,GAAIxR,EAAKwR,SAE3BA,EAAM9V,OAAS6V,GAASC,EAAM9V,QAAU,GAC7C8V,EAAQA,EAAM1H,QAAO,CAAC5M,EAAGlB,MAAQA,EAAI,KAGnCwV,EAAM9V,OAAS,IACjB8V,EAAQspD,UAILtpD,EAYT,SAASupD,GAAWj5D,EAAOyP,UAClBzP,EAAMkmC,KAAO6yB,GAAW/4D,EAAOA,EAAMkmC,MAAQlmC,EAAM0P,MAAQ1P,EAAM0P,MAAMD,GAASzP,EAAMd,SAkB/F,SAASmvD,GAAW17C,EAAQ3S,EAAOyP,EAAOoC,EAAWoC,EAAYilD,SACzDhuD,EAAOlL,EAAMkL,SACfL,EAAS8tD,MAETztD,IAASmmD,IAAQp9C,IAAeo9C,GAClCxmD,EAAS8H,EAAOmR,WAAWjS,QACtB,GAAI3G,IAASoP,IAAOrG,IAAeqG,GACxCzP,EAAS8H,EAAOiR,UAAU/R,QACrB,GAAImhD,GAAc9nD,GAAO,OACxBiuD,EAASxmD,EAAOoS,YAAYlT,MAE9BqnD,GAAUl5D,EAAMkmC,KAClBr7B,EAASsuD,MACJ,OACC/1D,EAAOg2D,GAAQp5D,EAAOyP,GAAO,GAEnC5E,EAASzP,GAAKgI,EAAKhI,GAAK+9D,EAAO/9D,GAAK,SAEjC,GAAI4E,EAAMquD,WAAY,OAErB9/C,EAAIvO,EAAMd,SAChB2L,EAAS8H,EAAO2S,WAAW/W,EAAE,GAAIA,EAAEA,EAAE3U,OAAS,GAAI6V,EAAOoC,QAChDA,IACThH,EAAS8H,EAAO9H,OAAOgH,WAGlBhH,EAET,SAASuuD,GAAQp5D,EAAOyP,EAAOY,SACvBX,EAAQupD,GAAWj5D,EAAOyP,GAC1BkY,EAAO3nB,EAAM2nB,OACbuQ,EAAO15B,KAAKC,IAAIkpB,GAChB/pB,EAAIY,KAAKuC,IAAI,EAAG4mB,EAAOlY,EAAQC,EAAM9V,QAErCwJ,EAAOmL,QACPrU,EAAIqU,EAAI/P,KAAKO,IAAI4oB,EAAMnpB,KAAKsR,MAAMtR,KAAKC,IAAI8P,GAAK2pB,WAChDh+B,EAAIytB,EAAOA,EAAO,KAAKztB,GAAKytB,GACzBztB,GAAK0D,UAGPyS,EAASX,EAAM1H,OAAO5E,GAAQA,EAGvC,MAAMi2D,GAAU,EACb/tB,IAAW,aACXimB,IAAW,cACXC,IAAY,UAETvyC,GAAU,EACbqsB,IAAW,aACXimB,IAAW,UAEd,SAAS+H,GAAYt5D,EAAOyP,UACnBzP,EAAMkmC,KAuBf,SAAmBA,SACX71B,EAAS61B,EAAKnqC,MAAM,GAAI,UAC9BsU,EAAOtP,IAAM7C,EAAKgoC,GACX71B,EA1BakpD,CAAUv5D,EAAMkmC,MAAQlmC,EAAMkL,OAAS+lD,GAAMmI,GAAQp5D,EAAOyP,GAAO,GAAQ4pD,GAAQr5D,EAAMkL,MAiB/G,SAAyBsoD,SACjBnjD,EAAS,EAAEkE,EAAAA,GAAUzY,OAAO03D,UAClCnjD,EAAOtP,IAAOwT,EAAAA,EACPlE,EApB8GmpD,CAAgBx5D,EAAMq5D,GAAQr5D,EAAMkL,UAAY+tD,GAAWj5D,EAAOyP,GA+BzL,SAASgqD,GAAY9mD,EAAQ3S,EAAOyP,EAAOvE,EAAM2G,EAAWoC,EAAYilD,SAChEruD,EAASoU,GAAQjf,EAAMkL,OAAS+I,IAAeo9C,IAAQp9C,IAAeqG,GA9B9E,SAAyB3H,EAAQ3S,EAAO6R,SAChCzW,EAAI4E,EAAMif,GAAQjf,EAAMkL,SACxB1Q,EAAIY,EAAExB,WAGRM,EADAqU,EAAI/T,EAAI,EAAIY,EAAE,GAAKA,EAAE,GAAKA,EAAE,OAG3BlB,EAAI,EAAGA,EAAIM,IAAKN,EACnBqU,EAAI/P,KAAKsC,IAAIyN,EAAGnT,EAAElB,GAAKkB,EAAElB,EAAI,WAIxByY,EAAO2S,WAAW,EAAG/W,EAAG,GAAQsD,GAkB2C6nD,CAAgB/mD,EAAQ3S,EAAO6R,GAAaw8C,GAAW17C,EAAQ3S,EAAOyP,EAAOoC,EAAWoC,EAAYilD,UAC/KhuD,IAASwtD,IAJM14D,CAAAA,GAASq5D,GAAQr5D,EAAMkL,OAASlL,EAAMkmC,KAI5ByzB,CAAgB35D,GAAS45D,GAAY/uD,GAvMhD,aAuM0DK,EAA0B2uD,GAAehvD,GAAUivD,GAAYjvD,GAGhJ,MAAM+uD,GAAc/uD,GAAU,CAACnN,EAAO6S,EAAOpS,WACrCuuC,EAAQzxC,GAAIkD,EAAMoS,EAAQ,GAAItV,GAAIkD,EAAM4C,IAAMwT,EAAAA,IAC9CtT,EAAKwJ,GAAY/M,EAAOmN,GACxB3J,EAAKuJ,GAAYiiC,EAAO7hC,UACvB5J,GAAMC,EAAKD,EAAK,MAAaC,EAAKA,EAAK,KAAOA,EAAK,KAAYD,GAGlEhG,GAAM,CAACyC,EAAOq8D,IAAkB,MAATr8D,EAAgBA,EAAQq8D,EAE/CF,GAAiBhvD,GAAU,CAACnN,EAAO6S,IAAUA,EAAQ1F,EAAOnN,GAAS,KAErEo8D,GAAcjvD,GAAUnN,GAASmN,EAAOnN,GAExC+M,GAAc,CAAC/M,EAAOmN,IAAWoI,OAAOpD,SAASnS,GAASmN,EAAOnN,GAAS,KAmBhF,SAASmN,GAAO8H,EAAQ3S,EAAO6R,EAAWoC,SAClC/I,EAAO+I,GAAcjU,EAAMkL,YAE7BxF,GAASmM,IA7Yf,SAAoB/U,UACX81D,GAAQ91D,EAAKm1D,IA4YO+H,CAAW9uD,KACpC2G,EAAYA,EAAUjM,QAAQ,MAAO,MAAMA,QAAQ,MAAO,OAGpDiM,GAAa3G,IAASmmD,GAAgDx/C,GAAa3G,IAASoP,GAAiDm/C,GAAY9mD,EAAQ3S,EAAO,EAAG,KAAM6R,EAAWoC,GAAY,GAAtGtB,EAAOiR,UAAU,wBAAtFjR,EAAOmR,WAAW,oBAGzD,SAASm2C,GAActnD,EAAQ3S,EAAOhF,GACpCA,EAAMA,GAAO,SACP+F,EAAMvC,KAAKuC,IAAI,EAAG/F,EAAIivC,QAAU,GAChC7wB,EAAMvO,GAAO8H,EAAQ3S,EAAOhF,EAAI6P,OAAQ7P,EAAIiZ,eAE9C8+C,GAAe/yD,EAAMkL,MAAO,OACxBpJ,EAAIw3D,GAAYt5D,GAAOjE,MAAM,GAAGgC,IAAIqb,GACpC5e,EAAIsH,EAAElI,aACJ,GAAEY,YAAkB,IAANA,EAAU,IAAM,UAAUsH,EAAEyG,KAAK,QAEpD,GAAIuqD,GAAW9yD,EAAMkL,MAAO,OACvBqD,EAAIvO,EAAMd,SACV1E,EAAI+T,EAAE3U,aAEJ,GAAEY,UAAgB,IAANA,EAAU,GAAK,QADzBA,EAAIuG,EAAMwN,EAAExS,MAAM,EAAGgF,EAAM,GAAGhD,IAAIqb,GAAK7Q,KAAK,MAAQ,iBAAmBgG,EAAExS,OAAO,GAAGgC,IAAIqb,GAAO7K,EAAExQ,IAAIqb,GAAK7Q,KAAK,QAGrH,OACKgG,EAAIvO,EAAMd,eACR,eAAcka,EAAI7K,EAAE,UAAU6K,EAAIlb,EAAKqQ,OMtyBvD,IAAI2rD,GAAc,EAIlB,MAAMC,GAAgB,KACtB,SAASC,GAAW18D,UACXA,GAASA,EAAM28D,SAExB,SAASC,GAAYntD,EAAGotD,EAAM5yC,SACtBzc,EAAOiC,EAAEktD,aACXn/D,EAAKiS,EAAEjS,GACP4Y,EAAkB,WAAT5I,EAAoBivD,GAAgB,UAE5Cj/D,IACHA,EAAKiS,EAAEjS,GAAK,YAAcg/D,KAEb,WAAThvD,GACFiC,EAAE4jC,GAAK91C,GAAIkS,EAAE4jC,GAAI,IACjB5jC,EAAE6jC,GAAK/1C,GAAIkS,EAAE6jC,GAAI,IACjB7jC,EAAElI,GAAKhK,GAAIkS,EAAElI,GAAI,GACjBkI,EAAEqwB,GAAKviC,GAAIkS,EAAEqwB,GAAI,IACjBrwB,EAAE+jC,GAAKj2C,GAAIkS,EAAE+jC,GAAI,IACjB/jC,EAAEwjD,GAAK11D,GAAIkS,EAAEwjD,GAAI,IACjB78C,EAASqmD,KAEThtD,EAAE4jC,GAAK91C,GAAIkS,EAAE4jC,GAAI,GACjB5jC,EAAE6jC,GAAK/1C,GAAIkS,EAAE6jC,GAAI,GACjB7jC,EAAEqwB,GAAKviC,GAAIkS,EAAEqwB,GAAI,GACjBrwB,EAAE+jC,GAAKj2C,GAAIkS,EAAE+jC,GAAI,KAKrBqpB,EAAKr/D,GAAMiS,EAEJ,QAAUwa,GAAQ,IAAM,IAAM7T,EAAS5Y,EAAK,IAGrD,SAASD,GAAI81B,EAAK2W,UACF,MAAP3W,EAAcA,EAAM2W,EAG7B,SAAS8yB,GAAUntD,EAAID,OAEjBitD,EADAI,EAAQ,UAELJ,EAAW,CAChBA,SAAU,SACVtpB,GAAI1jC,EAAKA,EAAG,GAAK,EACjB2jC,GAAI3jC,EAAKA,EAAG,GAAK,EACjBmwB,GAAIpwB,EAAKA,EAAG,GAAK,EACjB8jC,GAAI9jC,EAAKA,EAAG,GAAK,EACjBqtD,MAAOA,EACPjrD,KAAM,SAAUyF,EAAQgwC,UACtBwV,EAAM3/D,KAAK,CACTma,OAAQA,EACRgwC,MAAOA,IAEFoV,IAKb,MAAMK,GAAS,OACJ,CACPxlB,MjEvBW,SAAS9sB,UACf,IAAIouB,GAAMpuB,oBiEwBD,CACd8sB,MhEzBW,SAAS9sB,UACf,IAAIquB,GAAYruB,kBgE0BT,CACZ8sB,M/DzCW,SAAS9sB,UACf,IAAIsuB,GAAUtuB,Y+D0CX,CACR8sB,MAAOylB,GACPhjB,QAAS,OACTj6C,MAAO,cAEG,CACVw3C,MAAO0lB,GACPjjB,QAAS,UACTj6C,MAAO,mBAEQ,CACfw3C,MAAO2lB,GACPljB,QAAS,UACTj6C,MAAO,qBAEU,CACjBw3C,MAAO4lB,GACPnjB,QAAS,UACTj6C,MAAO,iBAEM,CACbw3C,MAAO6lB,GACPpjB,QAAS,QACTj6C,MAAO,yBAEa,CACpBw3C,MAAO8lB,GACPrjB,QAAS,QACTj6C,MAAO,uBAEW,CAClBw3C,MAAO+lB,GACPtjB,QAAS,QACTj6C,MAAO,WAEC,CACRw3C,MAAOC,oBAEQ,CACfD,MvDhGW,SAAS9sB,UACf,IAAI0wB,GAAa1wB,cuDiGZ,CACV8yC,WtDpBG,SAAmB9yC,UACjB,IAAIkxB,GAAUlxB,IsDoBnB+yC,StDzBG,SAAmB/yC,UACjB,IAAIixB,GAAUjxB,asD0BV,CACT8sB,MrD/DW,SAAS9sB,UACf,IAAIoxB,GAAQpxB,UqDgEX,CACN8sB,MpDtFW,SAAS9sB,UACf,IAAIsxB,GAAKtxB,EAAS,mBoDuFX,CACZ8sB,MpDjFG,SAAmB9sB,UACjB,IAAIsxB,GAAKtxB,EAAS,mBoDkFV,CACb8sB,MpDxFG,SAAoB9sB,UAClB,IAAIsxB,GAAKtxB,EAAS,MoD0F3B,SAASgzC,GAAOlwD,EAAMmwD,EAAa1jB,OAC7B2jB,EAAQx4D,GAAe43D,GAAQxvD,IAASwvD,GAAOxvD,GAC/CgqC,EAAQ,YAERomB,IACFpmB,EAAQomB,EAAMpmB,OAASomB,EAAMD,GAAe,YAExCC,EAAM3jB,SAAsB,MAAXA,IACnBzC,EAAQA,EAAMomB,EAAM3jB,SAASA,KAI1BzC,EAIT,MAAMqmB,GAAS,CACb9qD,EAAG,EACHrM,EAAG,EACH4zB,EAAG,EACHl2B,EAAG,EACHpH,EAAG,EACHG,EAAG,EACHF,EAAG,EACHwJ,EAAG,EACHrG,EAAG,GAEC09D,GAAS,CAAC,4BAA6B,MAAO,iBAAkB,cAAe,YACrF,SAASC,GAAWC,SACZl0C,EAAS,OACXvhB,EAAM01D,EAAQC,EAAQpsB,EAAOqsB,EAAK5hE,EAAKC,EAAGO,EAAGD,EAAGiW,QAE9C9W,EAAO+hE,EAAQ3/D,QAAQ6J,QAAQ41D,GAAO,GAAI,SAAS5vC,MAAM4vC,GAAO,IAAIz/D,MAAM,OAE3E7B,EAAI,EAAGM,EAAIb,EAAKC,OAAQM,EAAIM,IAAKN,EAAG,KACvC+L,EAAOtM,EAAKO,GACZyhE,EAAS11D,EAAKlK,MAAM,GAAGsW,OAAOzM,QAAQ41D,GAAO,GAAI,WAAW51D,QAAQ41D,GAAO,GAAI,WAAW5vC,MAAM4vC,GAAO,IACvGK,EAAM51D,EAAKkd,OAAO,GAClBy4C,EAAS,CAACC,GAELphE,EAAI,EAAGgW,EAAIkrD,EAAO/hE,OAAQa,EAAIgW,IAAKhW,GACjC+0C,GAASmsB,EAAOlhE,MAAQ+0C,GAE3BosB,EAAO9gE,KAAK00C,MAIhBv1C,EAAMshE,GAAOM,EAAI9nD,eAEb6nD,EAAOhiE,OAAS,EAAIK,EAAK,OACrBwW,EAAImrD,EAAOhiE,WACjBa,EAAI,EACJ+sB,EAAO1sB,KAAK,CAAC+gE,GAAK//D,OAAO8/D,EAAO7/D,MAAMtB,EAAGA,GAAKR,KAE9C4hE,EAAc,MAARA,EAAc,IAAc,MAARA,EAAc,IAAMA,EAEvCphE,EAAIgW,EAAGhW,GAAKR,EACjButB,EAAO1sB,KAAK,CAAC+gE,GAAK//D,OAAO8/D,EAAO7/D,MAAMtB,EAAGA,EAAIR,UAG/CutB,EAAO1sB,KAAK8gE,UAITp0C,EAGT,MAAMs0C,GAAWt9D,KAAK26B,GAAK,IAErB4iC,GAASv9D,KAAK26B,GAAK,EACnB6iC,GAAgB,EAAVx9D,KAAK26B,GACX8iC,GAAYz9D,KAAK6Q,KAAK,GAAK,EAEjC,IAAI6sD,GAAe,GACfC,GAAc,GACd5zD,GAAO,GAAGA,KA4Dd,SAAS6zD,GAAO1tC,SACR5xB,EAAMyL,GAAKvM,KAAK0yB,MAElBytC,GAAYr/D,UACPq/D,GAAYr/D,OAGjB+3C,EAAKnmB,EAAO,GACZomB,EAAKpmB,EAAO,GACZ2tC,EAAM3tC,EAAO,GACb4tC,EAAM5tC,EAAO,GACb6tC,EAAK7tC,EAAO,GACZ8tC,EAAK9tC,EAAO,GACZ+tC,EAAS/tC,EAAO,GAChBguC,EAAShuC,EAAO,SACdiuC,EAAMD,EAASH,EACfK,GAAOH,EAASD,EAChBK,EAAMJ,EAASF,EACfO,EAAMJ,EAASF,EACfO,EAAUv+D,KAAK4zC,IAAIiqB,GACnBW,EAAUx+D,KAAK6zC,IAAIgqB,GACnBY,EAAUz+D,KAAK4zC,IAAIkqB,GACnBY,EAAU1+D,KAAK6zC,IAAIiqB,GACnBa,EAAU,IAAOb,EAAMD,GACvBe,EAAY5+D,KAAK6zC,IAAc,GAAV8qB,GACrBh5D,EAAI,EAAI,EAAIi5D,EAAYA,EAAY5+D,KAAK6zC,IAAI8qB,GAC7CpsB,EAAK8D,EAAKkoB,EAAU54D,EAAI64D,EACxBhsB,EAAK8D,EAAKkoB,EAAU74D,EAAI44D,EACxB1pB,EAAKwB,EAAKooB,EACV3pB,EAAKwB,EAAKooB,EACV1/B,EAAK6V,EAAKlvC,EAAI+4D,EACdhsB,EAAKoC,EAAKnvC,EAAI84D,SACbd,GAAYr/D,GAAO,CAAC6/D,EAAM5rB,EAAK6rB,EAAM5rB,EAAI6rB,EAAM9rB,EAAK+rB,EAAM9rB,EAAI2rB,EAAMn/B,EAAKo/B,EAAM1rB,EAAI2rB,EAAMr/B,EAAKs/B,EAAM5rB,EAAIyrB,EAAMtpB,EAAKupB,EAAMtpB,EAAIupB,EAAMxpB,EAAKypB,EAAMxpB,GAGvJ,MAAM+pB,GAAO,CAAC,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAErC,SAASnJ,GAAQoJ,EAASC,EAAIC,SACtB9iE,EAAI2iE,GAAK,GAAKC,EAAQ,MAElB,MAAN5iE,GAAmB,MAANA,EACf2iE,GAAK,GAAKE,EAAKD,EAAQ,GACvBD,GAAK,GAAKG,EAAKF,EAAQ,GACvBD,GAAK,GAAKC,EAAQ,GAClBD,GAAK,GAAKC,EAAQ,GAClBD,GAAK,GAAKC,EAAQ,GAClBD,GAAK,GAAKE,EAAKD,EAAQ,GACvBD,GAAK,GAAKG,EAAKF,EAAQ,QAClB,GAAU,MAAN5iE,GAAmB,MAANA,EACtB2iE,GAAK,GAAKE,EAAKD,EAAQ,QAClB,GAAU,MAAN5iE,GAAmB,MAANA,EACtB2iE,GAAK,GAAKG,EAAKF,EAAQ,YAElB,IAAIpjE,EAAI,EAAGM,EAAI8iE,EAAQ1jE,OAAQM,EAAIM,IAAKN,EAC3CmjE,GAAKnjE,IAAMA,EAAI,GAAK,EAAIqjE,EAAKC,GAAMF,EAAQpjE,UAIxCmjE,GAGT,SAASI,GAAYr1C,EAASzuB,EAAMyK,EAAGD,EAAGo5D,EAAIC,OACxCF,EAWJI,EACIC,EACAC,EACAC,EAZJ3oD,EAAW,KACP3W,EAAI,EAER2Q,EAAI,EAEJ4uD,EAAW,EAEXC,EAAW,EAMF,MAAL35D,IAAWA,EAAI,GACV,MAALD,IAAWA,EAAI,GACT,MAANo5D,IAAYA,EAAK,GACX,MAANC,IAAYA,EAAKD,GACjBn1C,EAAQ41C,WAAW51C,EAAQ41C,gBAE1B,IAAI9jE,EAAI,EAAGD,EAAMN,EAAKC,OAAQM,EAAID,IAAOC,EAAG,QAC/CojE,EAAU3jE,EAAKO,GAEJ,IAAPqjE,GAAmB,IAAPC,IACdF,EAAUpJ,GAAQoJ,EAASC,EAAIC,IAGzBF,EAAQ,QAET,IAEH/+D,GAAK++D,EAAQ,GACbpuD,GAAKouD,EAAQ,GACbl1C,EAAQyoB,OAAOtyC,EAAI6F,EAAG8K,EAAI/K,aAGvB,IAEH5F,EAAI++D,EAAQ,GACZpuD,EAAIouD,EAAQ,GACZl1C,EAAQyoB,OAAOtyC,EAAI6F,EAAG8K,EAAI/K,aAGvB,IAEH5F,GAAK++D,EAAQ,GACbl1C,EAAQyoB,OAAOtyC,EAAI6F,EAAG8K,EAAI/K,aAGvB,IAEH5F,EAAI++D,EAAQ,GACZl1C,EAAQyoB,OAAOtyC,EAAI6F,EAAG8K,EAAI/K,aAGvB,IAEH+K,GAAKouD,EAAQ,GACbl1C,EAAQyoB,OAAOtyC,EAAI6F,EAAG8K,EAAI/K,aAGvB,IAEH+K,EAAIouD,EAAQ,GACZl1C,EAAQyoB,OAAOtyC,EAAI6F,EAAG8K,EAAI/K,aAGvB,IAEH5F,GAAK++D,EAAQ,GACbpuD,GAAKouD,EAAQ,GACbl1C,EAAQuoB,OAAOpyC,EAAI6F,EAAG8K,EAAI/K,aAGvB,IAEH5F,EAAI++D,EAAQ,GACZpuD,EAAIouD,EAAQ,GACZl1C,EAAQuoB,OAAOpyC,EAAI6F,EAAG8K,EAAI/K,aAGvB,IAEHu5D,EAAQn/D,EAAI++D,EAAQ,GACpBK,EAAQzuD,EAAIouD,EAAQ,GACpBQ,EAAWv/D,EAAI++D,EAAQ,GACvBS,EAAW7uD,EAAIouD,EAAQ,GACvBl1C,EAAQ6oB,cAAc1yC,EAAI++D,EAAQ,GAAKl5D,EACvC8K,EAAIouD,EAAQ,GAAKn5D,EACjB25D,EAAW15D,EACX25D,EAAW55D,EACXu5D,EAAQt5D,EAAGu5D,EAAQx5D,GACnB5F,EAAIm/D,EACJxuD,EAAIyuD,YAGD,IAEHp/D,EAAI++D,EAAQ,GACZpuD,EAAIouD,EAAQ,GACZQ,EAAWR,EAAQ,GACnBS,EAAWT,EAAQ,GACnBl1C,EAAQ6oB,cAAcqsB,EAAQ,GAAKl5D,EAAGk5D,EAAQ,GAAKn5D,EAAG25D,EAAW15D,EAAG25D,EAAW55D,EAAG5F,EAAI6F,EAAG8K,EAAI/K,aAG1F,IAGHu5D,EAAQn/D,EAAI++D,EAAQ,GACpBK,EAAQzuD,EAAIouD,EAAQ,GAEpBQ,EAAW,EAAIv/D,EAAIu/D,EACnBC,EAAW,EAAI7uD,EAAI6uD,EACnB31C,EAAQ6oB,cAAc6sB,EAAW15D,EAAG25D,EAAW55D,EAAG5F,EAAI++D,EAAQ,GAAKl5D,EAAG8K,EAAIouD,EAAQ,GAAKn5D,EAAGu5D,EAAQt5D,EAAGu5D,EAAQx5D,GAK7G25D,EAAWv/D,EAAI++D,EAAQ,GACvBS,EAAW7uD,EAAIouD,EAAQ,GACvB/+D,EAAIm/D,EACJxuD,EAAIyuD,YAGD,IAEHD,EAAQJ,EAAQ,GAChBK,EAAQL,EAAQ,GAEhBQ,EAAW,EAAIv/D,EAAIu/D,EACnBC,EAAW,EAAI7uD,EAAI6uD,EACnB31C,EAAQ6oB,cAAc6sB,EAAW15D,EAAG25D,EAAW55D,EAAGm5D,EAAQ,GAAKl5D,EAAGk5D,EAAQ,GAAKn5D,EAAGu5D,EAAQt5D,EAAGu5D,EAAQx5D,GACrG5F,EAAIm/D,EACJxuD,EAAIyuD,EAKJG,EAAWR,EAAQ,GACnBS,EAAWT,EAAQ,aAGhB,IAGHI,EAAQn/D,EAAI++D,EAAQ,GACpBK,EAAQzuD,EAAIouD,EAAQ,GACpBQ,EAAWv/D,EAAI++D,EAAQ,GACvBS,EAAW7uD,EAAIouD,EAAQ,GACvBl1C,EAAQ0oB,iBAAiBgtB,EAAW15D,EAAG25D,EAAW55D,EAAGu5D,EAAQt5D,EAAGu5D,EAAQx5D,GACxE5F,EAAIm/D,EACJxuD,EAAIyuD,YAGD,IAEHD,EAAQJ,EAAQ,GAChBK,EAAQL,EAAQ,GAChBl1C,EAAQ0oB,iBAAiBwsB,EAAQ,GAAKl5D,EAAGk5D,EAAQ,GAAKn5D,EAAGu5D,EAAQt5D,EAAGu5D,EAAQx5D,GAC5E5F,EAAIm/D,EACJxuD,EAAIyuD,EACJG,EAAWR,EAAQ,GACnBS,EAAWT,EAAQ,aAGhB,IAGHI,EAAQn/D,EAAI++D,EAAQ,GACpBK,EAAQzuD,EAAIouD,EAAQ,GAEgB,OAAhCpoD,EAAS,GAAGpD,MAAM,WAGpBgsD,EAAWv/D,EACXw/D,EAAW7uD,GACc,MAAhBgG,EAAS,IAElB4oD,EAAW,EAAIv/D,EAAIq/D,EACnBG,EAAW,EAAI7uD,EAAI2uD,GACM,MAAhB3oD,EAAS,KAElB4oD,EAAW,EAAIv/D,EAAIu/D,EACnBC,EAAW,EAAI7uD,EAAI6uD,GAGrBH,EAAeE,EACfD,EAAeE,EACf31C,EAAQ0oB,iBAAiBgtB,EAAW15D,EAAG25D,EAAW55D,EAAGu5D,EAAQt5D,EAAGu5D,EAAQx5D,GAExE+K,EAAIyuD,EACJG,GAFAv/D,EAAIm/D,GAEWJ,EAAQ,GACvBS,EAAW7uD,EAAIouD,EAAQ,aAGpB,IACHI,EAAQJ,EAAQ,GAChBK,EAAQL,EAAQ,GAEhBQ,EAAW,EAAIv/D,EAAIu/D,EACnBC,EAAW,EAAI7uD,EAAI6uD,EACnB31C,EAAQ0oB,iBAAiBgtB,EAAW15D,EAAG25D,EAAW55D,EAAGu5D,EAAQt5D,EAAGu5D,EAAQx5D,GACxE5F,EAAIm/D,EACJxuD,EAAIyuD,YAGD,IACHM,GAAQ71C,EAAS7pB,EAAI6F,EAAG8K,EAAI/K,EAAG,CAACm5D,EAAQ,GAAIA,EAAQ,GAAIA,EAAQ,GAAIA,EAAQ,GAAIA,EAAQ,GAAIA,EAAQ,GAAK/+D,EAAI6F,EAAGk5D,EAAQ,GAAKpuD,EAAI/K,IACjI5F,GAAK++D,EAAQ,GACbpuD,GAAKouD,EAAQ,aAGV,IACHW,GAAQ71C,EAAS7pB,EAAI6F,EAAG8K,EAAI/K,EAAG,CAACm5D,EAAQ,GAAIA,EAAQ,GAAIA,EAAQ,GAAIA,EAAQ,GAAIA,EAAQ,GAAIA,EAAQ,GAAKl5D,EAAGk5D,EAAQ,GAAKn5D,IACzH5F,EAAI++D,EAAQ,GACZpuD,EAAIouD,EAAQ,aAGT,QACA,IACHl1C,EAAQwoB,YAIZ17B,EAAWooD,GAIf,SAASW,GAAQ71C,EAAS7pB,EAAG2Q,EAAGgvD,SACxBC,EA9VR,SAAkB5/D,EAAG2Q,EAAGqtD,EAAIC,EAAI4B,EAAOC,EAAOC,EAASzqB,EAAIC,SACnDh3C,EAAMyL,GAAKvM,KAAKI,cAElB8/D,GAAap/D,UACRo/D,GAAap/D,SAGhByhE,EAAKD,EAAUxC,GACfW,EAASj+D,KAAK6zC,IAAIksB,GAClB7B,EAASl+D,KAAK4zC,IAAImsB,GAGlBtkB,EAAKyiB,GAAU7oB,EAAKt1C,GAAK,GAAMk+D,GAAU3oB,EAAK5kC,GAAK,GACnDgrC,EAAKwiB,GAAU5oB,EAAK5kC,GAAK,GAAMutD,GAAU5oB,EAAKt1C,GAAK,OACrDigE,EAAKvkB,EAAKA,IAJdsiB,EAAK/9D,KAAKI,IAAI29D,IAIWA,GAAMriB,EAAKA,IAHpCsiB,EAAKh+D,KAAKI,IAAI49D,IAGiCA,GAE3CgC,EAAK,IACPA,EAAKhgE,KAAK6Q,KAAKmvD,GACfjC,GAAMiC,EACNhC,GAAMgC,SAGF7B,EAAMD,EAASH,EACfK,EAAMH,EAASF,EACfM,GAAOJ,EAASD,EAChBM,EAAMJ,EAASF,EACf7wD,EAAKgxD,EAAM9oB,EAAK+oB,EAAM9oB,EACtBloC,EAAKixD,EAAMhpB,EAAKipB,EAAMhpB,EACtB/C,EAAK4rB,EAAMp+D,EAAIq+D,EAAM1tD,EACrB8hC,EAAK6rB,EAAMt+D,EAAIu+D,EAAM5tD,MAEvBuvD,EAAa,IADN1tB,EAAKplC,IAAOolC,EAAKplC,IAAOqlC,EAAKplC,IAAOolC,EAAKplC,IAC3B,IACrB6yD,EAAa,IAAGA,EAAa,OAC7BC,EAAUlgE,KAAK6Q,KAAKovD,GACpBJ,GAASD,IAAOM,GAAWA,SACzBC,EAAK,IAAOhzD,EAAKolC,GAAM2tB,GAAW1tB,EAAKplC,GACvCgzD,EAAK,IAAOhzD,EAAKolC,GAAM0tB,GAAW3tB,EAAKplC,GACvC0wD,EAAM79D,KAAKohC,MAAMh0B,EAAKgzD,EAAIjzD,EAAKgzD,OAEjCE,EADQrgE,KAAKohC,MAAMoR,EAAK4tB,EAAI7tB,EAAK4tB,GAClBtC,EAEfwC,EAAS,GAAe,IAAVR,EAChBQ,GAAU7C,GACD6C,EAAS,GAAe,IAAVR,IACvBQ,GAAU7C,UAGN8C,EAAOtgE,KAAK2I,KAAK3I,KAAKI,IAAIigE,GAAU9C,GAAS,QAC7Cv0C,EAAS,OAEV,IAAIttB,EAAI,EAAGA,EAAI4kE,IAAQ5kE,EAAG,OACvB6kE,EAAM1C,EAAMniE,EAAI2kE,EAASC,EACzBE,EAAM3C,GAAOniE,EAAI,GAAK2kE,EAASC,EACrCt3C,EAAOttB,GAAK,CAACykE,EAAIC,EAAIG,EAAKC,EAAKzC,EAAIC,EAAIC,EAAQC,UAG1CR,GAAap/D,GAAO0qB,EAsSfy3C,CAASf,EAAO,GAC5BA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACPA,EAAO,GACP3/D,EAAG2Q,OAEE,IAAIhV,EAAI,EAAGA,EAAIikE,EAAIvkE,SAAUM,EAAG,OAC7BglE,EAAM9C,GAAO+B,EAAIjkE,IACvBkuB,EAAQ6oB,cAAciuB,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,KAItE,MAAMC,GAAQ,kBACRC,GAAW,QACL,CACR9oB,KAAM,SAAUluB,EAAS9kB,SACjBhG,EAAIkB,KAAK6Q,KAAK/L,GAAQ,EAC5B8kB,EAAQuoB,OAAOrzC,EAAG,GAClB8qB,EAAQjc,IAAI,EAAG,EAAG7O,EAAG,EAAG0+D,YAGnB,CACP1lB,KAAM,SAAUluB,EAAS9kB,OACnBhG,EAAIkB,KAAK6Q,KAAK/L,GAAQ,EACtBzI,EAAIyC,EAAI,IACZ8qB,EAAQuoB,QAAQrzC,GAAIzC,GACpButB,EAAQyoB,QAAQvzC,EAAGzC,GACnButB,EAAQyoB,QAAQh2C,EAAGA,GACnButB,EAAQyoB,QAAQh2C,EAAGyC,GACnB8qB,EAAQyoB,OAAOh2C,EAAGyC,GAClB8qB,EAAQyoB,OAAOh2C,EAAGA,GAClButB,EAAQyoB,OAAOvzC,EAAGzC,GAClButB,EAAQyoB,OAAOvzC,GAAIzC,GACnButB,EAAQyoB,OAAOh2C,GAAIA,GACnButB,EAAQyoB,OAAOh2C,GAAIyC,GACnB8qB,EAAQyoB,QAAQh2C,GAAIyC,GACpB8qB,EAAQyoB,QAAQh2C,GAAIA,GACpButB,EAAQwoB,sBAGD,CACT0F,KAAM,SAAUluB,EAAS9kB,SACjBhG,EAAIkB,KAAK6Q,KAAK/L,GAAQ,EAC5B8kB,EAAQuoB,QAAQrzC,EAAG,GACnB8qB,EAAQyoB,OAAO,GAAIvzC,GACnB8qB,EAAQyoB,OAAOvzC,EAAG,GAClB8qB,EAAQyoB,OAAO,EAAGvzC,GAClB8qB,EAAQwoB,qBAGF,CACR0F,KAAM,SAAUluB,EAAS9kB,OACnB2X,EAAIzc,KAAK6Q,KAAK/L,GACd/E,GAAK0c,EAAI,EACbmN,EAAQmqB,KAAKh0C,EAAGA,EAAG0c,EAAGA,WAGjB,CACPq7B,KAAM,SAAUluB,EAAS9kB,OACnBhG,EAAIkB,KAAK6Q,KAAK/L,GAAQ,EACtBzI,EAAIyC,EAAI,EACR6G,EAAI7G,EAAI,IACRwE,EAAIxE,EAAI,EACZ8qB,EAAQuoB,QAAQ91C,EAAGyC,GACnB8qB,EAAQyoB,OAAOh2C,EAAGyC,GAClB8qB,EAAQyoB,OAAOh2C,GAAIiH,GACnBsmB,EAAQyoB,OAAO1sC,GAAIrC,GACnBsmB,EAAQyoB,OAAO,GAAIvzC,GACnB8qB,EAAQyoB,QAAQ1sC,GAAIrC,GACpBsmB,EAAQyoB,QAAQh2C,GAAIiH,GACpBsmB,EAAQwoB,oBAGH,CACP0F,KAAM,SAAUluB,EAAS9kB,OACnBhG,EAAIkB,KAAK6Q,KAAK/L,GAAQ,EACtB00B,EAAIikC,GAAY3+D,EAChBO,EAAIm6B,EAAI16B,EAAI6hE,GACZvkE,EAAI0C,EAAI,EACZ8qB,EAAQuoB,OAAO,GAAI3Y,EAAIn6B,GACvBuqB,EAAQyoB,QAAQj2C,EAAGo9B,EAAIn6B,GACvBuqB,EAAQyoB,OAAOj2C,EAAGo9B,EAAIn6B,GACtBuqB,EAAQwoB,uBAGA,CACV0F,KAAM,SAAUluB,EAAS9kB,OACnBhG,EAAIkB,KAAK6Q,KAAK/L,GAAQ,EACtB00B,EAAIikC,GAAY3+D,EAChBO,EAAIm6B,EAAI16B,EAAI6hE,GAChB/2C,EAAQuoB,OAAO,GAAI3Y,EAAIn6B,GACvBuqB,EAAQyoB,QAAQvzC,EAAG06B,EAAIn6B,GACvBuqB,EAAQyoB,OAAOvzC,EAAG06B,EAAIn6B,GACtBuqB,EAAQwoB,4BAGG,CACb0F,KAAM,SAAUluB,EAAS9kB,OACnBhG,EAAIkB,KAAK6Q,KAAK/L,GAAQ,EACtB00B,EAAIikC,GAAY3+D,EACpB8qB,EAAQuoB,OAAO,GAAI3Y,GACnB5P,EAAQyoB,QAAQvzC,EAAG06B,GACnB5P,EAAQyoB,OAAOvzC,EAAG06B,GAClB5P,EAAQwoB,8BAGK,CACf0F,KAAM,SAAUluB,EAAS9kB,OACnBhG,EAAIkB,KAAK6Q,KAAK/L,GAAQ,EACtB00B,EAAIikC,GAAY3+D,EACpB8qB,EAAQuoB,OAAO,EAAG3Y,GAClB5P,EAAQyoB,QAAQvzC,GAAI06B,GACpB5P,EAAQyoB,OAAOvzC,GAAI06B,GACnB5P,EAAQwoB,+BAGM,CAChB0F,KAAM,SAAUluB,EAAS9kB,OACnBhG,EAAIkB,KAAK6Q,KAAK/L,GAAQ,EACtB00B,EAAIikC,GAAY3+D,EACpB8qB,EAAQuoB,OAAO3Y,EAAG,GAClB5P,EAAQyoB,QAAQ7Y,GAAI16B,GACpB8qB,EAAQyoB,QAAQ7Y,EAAG16B,GACnB8qB,EAAQwoB,8BAGK,CACf0F,KAAM,SAAUluB,EAAS9kB,OACnBhG,EAAIkB,KAAK6Q,KAAK/L,GAAQ,EACtB00B,EAAIikC,GAAY3+D,EACpB8qB,EAAQuoB,QAAQ3Y,EAAG,GACnB5P,EAAQyoB,OAAO7Y,GAAI16B,GACnB8qB,EAAQyoB,OAAO7Y,EAAG16B,GAClB8qB,EAAQwoB,qBAGF,CACR0F,KAAM,SAAUluB,EAAS9kB,SACjBhG,EAAIkB,KAAK6Q,KAAK/L,GAAQ,EAC5B8kB,EAAQuoB,QAAQrzC,EAAG,GACnB8qB,EAAQyoB,OAAOvzC,EAAG,MAIxB,SAAS+7D,GAAQj+D,UACR0H,GAAes8D,GAAUhkE,GAAKgkE,GAAShkE,GAIhD,SAAsBzB,OACfmJ,GAAey0C,GAAQ59C,GAAO,OAC3BiiE,EAASH,GAAU9hE,GACzB49C,GAAO59C,GAAQ,CACb28C,KAAM,SAAUluB,EAAS9kB,GACvBm6D,GAAWr1C,EAASwzC,EAAQ,EAAG,EAAGp9D,KAAK6Q,KAAK/L,GAAQ,YAKnDi0C,GAAO59C,GAdqC0lE,CAAajkE,GAElE,IAAIm8C,GAAS,GAeb,MAAMkQ,GAAI,cAEV,SAAS6X,GAAW/wD,UACXA,EAAEhQ,EAGX,SAASghE,GAAWhxD,UACXA,EAAEW,EAGX,SAASswD,GAAejxD,UACfA,EAAE1F,MAGX,SAAS42D,GAAgBlxD,UAChBA,EAAEwrC,OAGX,SAASlrC,GAAOzT,SACM,mBAANA,EAAmBA,EAAI,KAAOA,EAG9C,SAASsyD,GAAMhwD,EAAOoD,EAAKC,UAClBvC,KAAKuC,IAAID,EAAKtC,KAAKsC,IAAIpD,EAAOqD,IAGvC,SAAS2+D,SACHnhE,EAAI+gE,GACJpwD,EAAIqwD,GACJ12D,EAAQ22D,GACRzlB,EAAS0lB,GACTE,EAAO9wD,GAAO,GACd+wD,EAAOD,EACPE,EAAOF,EACPG,EAAOH,EACPv3C,EAAU,cAEL23C,EAAU3kE,EAAGuQ,EAAIC,OACpBwpC,EACArE,EAAW,MAANplC,EAAaA,GAAMpN,EAAEvC,KAAKK,KAAMjB,GACrC41C,EAAW,MAANplC,EAAaA,GAAMsD,EAAElT,KAAKK,KAAMjB,GACrC6f,GAAKpS,EAAM7M,KAAKK,KAAMjB,GACtB48B,GAAK+hB,EAAO/9C,KAAKK,KAAMjB,GACvBP,EAAI2D,KAAKsC,IAAIma,EAAG+c,GAAK,EACrBgoC,EAAKtS,IAAOiS,EAAK3jE,KAAKK,KAAMjB,GAAI,EAAGP,GACnColE,EAAKvS,IAAOkS,EAAK5jE,KAAKK,KAAMjB,GAAI,EAAGP,GACnCmtD,EAAK0F,IAAOmS,EAAK7jE,KAAKK,KAAMjB,GAAI,EAAGP,GACnCqlE,EAAKxS,IAAOoS,EAAK9jE,KAAKK,KAAMjB,GAAI,EAAGP,MAClCutB,IAASA,EAAUgtB,EAAS+qB,MAE7BH,GAAM,GAAKC,GAAM,GAAKjY,GAAM,GAAKkY,GAAM,EACzC93C,EAAQmqB,KAAKxB,EAAIC,EAAI/1B,EAAG+c,OACnB,KACDwF,EAAKuT,EAAK91B,EACVi2B,EAAKF,EAAKhZ,EACd5P,EAAQuoB,OAAOI,EAAKivB,EAAIhvB,GACxB5oB,EAAQyoB,OAAOrT,EAAKyiC,EAAIjvB,GACxB5oB,EAAQ6oB,cAAczT,EAAKiqB,GAAIwY,EAAIjvB,EAAIxT,EAAIwT,EAAKyW,GAAIwY,EAAIziC,EAAIwT,EAAKivB,GACjE73C,EAAQyoB,OAAOrT,EAAI0T,EAAKgvB,GACxB93C,EAAQ6oB,cAAczT,EAAI0T,EAAKuW,GAAIyY,EAAI1iC,EAAKiqB,GAAIyY,EAAIhvB,EAAI1T,EAAK0iC,EAAIhvB,GACjE9oB,EAAQyoB,OAAOE,EAAKiX,EAAI9W,GACxB9oB,EAAQ6oB,cAAcF,EAAK0W,GAAIO,EAAI9W,EAAIH,EAAIG,EAAKuW,GAAIO,EAAIjX,EAAIG,EAAK8W,GACjE5/B,EAAQyoB,OAAOE,EAAIC,EAAKgvB,GACxB53C,EAAQ6oB,cAAcF,EAAIC,EAAKyW,GAAIuY,EAAIjvB,EAAK0W,GAAIuY,EAAIhvB,EAAID,EAAKivB,EAAIhvB,GACjE5oB,EAAQwoB,eAGNwE,SACFhtB,EAAU,KACHgtB,EAAS,IAAM,YAI1B2qB,EAAUxhE,EAAI,SAAUnD,UAClBgB,UAAUxC,QACZ2E,EAAIsQ,GAAOzT,GACJ2kE,GAEAxhE,GAIXwhE,EAAU7wD,EAAI,SAAU9T,UAClBgB,UAAUxC,QACZsV,EAAIL,GAAOzT,GACJ2kE,GAEA7wD,GAIX6wD,EAAUl3D,MAAQ,SAAUzN,UACtBgB,UAAUxC,QACZiP,EAAQgG,GAAOzT,GACR2kE,GAEAl3D,GAIXk3D,EAAUhmB,OAAS,SAAU3+C,UACvBgB,UAAUxC,QACZmgD,EAASlrC,GAAOzT,GACT2kE,GAEAhmB,GAIXgmB,EAAUK,aAAe,SAAUJ,EAAIC,EAAIC,EAAIlY,UACzC5rD,UAAUxC,QACZ+lE,EAAO9wD,GAAOmxD,GACdJ,EAAa,MAANK,EAAapxD,GAAOoxD,GAAMN,EACjCG,EAAa,MAANI,EAAarxD,GAAOqxD,GAAMP,EACjCE,EAAa,MAAN7X,EAAan5C,GAAOm5C,GAAM4X,EAC1BG,GAEAJ,GAIXI,EAAU33C,QAAU,SAAUhtB,UACxBgB,UAAUxC,QACZwuB,EAAe,MAALhtB,EAAY,KAAOA,EACtB2kE,GAEA33C,GAIJ23C,EAGT,SAASM,SACH9hE,EACA2Q,EACA5L,EACA2xC,EAEAqrB,EACAvvB,EACAC,EACA/rC,EAJAmjB,EAAU,cAML7b,EAAMixB,EAAI0T,EAAIqvB,SACf5P,EAAK4P,EAAK,KAEZD,EAAO,KACLrkC,EAAK+U,EAAKE,EACVhV,EAAKsB,EAAKuT,KAEV9U,GAAMC,EAAI,KAERskC,EAAKhiE,KAAK6Q,KAAK4sB,EAAKA,EAAKC,EAAKA,GAC9BqgC,GAAMtgC,GAAMukC,GAAMv7D,EAClBu3D,GAAMtgC,GAAMskC,GAAMv7D,EAClBd,EAAI3F,KAAKohC,MAAM1D,EAAID,GAEvB7T,EAAQuoB,OAAOI,EAAKwrB,EAAIvrB,EAAKwrB,GAC7Bp0C,EAAQyoB,OAAOrT,EAAKvB,EAAK00B,EAAIzf,EAAKhV,EAAKy0B,GACvCvoC,EAAQjc,IAAIqxB,EAAI0T,EAAIyf,EAAIxsD,EAAI3F,KAAK26B,GAAIh1B,GACrCikB,EAAQyoB,OAAOE,EAAKwrB,EAAIvrB,EAAKwrB,GAC7Bp0C,EAAQjc,IAAI4kC,EAAIC,EAAI/rC,EAAId,EAAGA,EAAI3F,KAAK26B,SAEpC/Q,EAAQjc,IAAIqxB,EAAI0T,EAAIyf,EAAI,EAAGqL,IAG7B5zC,EAAQwoB,iBAER0vB,EAAQ,EAGVvvB,EAAKvT,EACLwT,EAAKE,EACLjsC,EAAK0rD,WAGE8P,EAAM53C,OACT3uB,EAEAqU,EAEA6mC,EAHA56C,EAAIquB,EAAKjvB,OAETy7C,GAAW,MAEA,MAAXjtB,IAAiBA,EAAUgtB,EAAS+qB,MAEnCjmE,EAAI,EAAGA,GAAKM,IAAKN,IACdA,EAAIM,GAAKy6C,EAAQ1mC,EAAIsa,EAAK3uB,GAAIA,EAAG2uB,MAAWwsB,IAC5CA,GAAYA,KAAUirB,EAAQ,GAGhCjrB,GAAU9oC,GAAOhO,EAAEgQ,EAAGrU,EAAG2uB,IAAQ3Z,EAAEX,EAAGrU,EAAG2uB,IAAQvlB,EAAKiL,EAAGrU,EAAG2uB,OAG9DusB,SACFhtB,EAAU,KACHgtB,EAAS,IAAM,YAI1BqrB,EAAMliE,EAAI,SAAUnD,UACdgB,UAAUxC,QACZ2E,EAAInD,EACGqlE,GAEAliE,GAIXkiE,EAAMvxD,EAAI,SAAU9T,UACdgB,UAAUxC,QACZsV,EAAI9T,EACGqlE,GAEAvxD,GAIXuxD,EAAMn9D,KAAO,SAAUlI,UACjBgB,UAAUxC,QACZ0J,EAAOlI,EACAqlE,GAEAn9D,GAIXm9D,EAAMxrB,QAAU,SAAU75C,UACpBgB,UAAUxC,QACZq7C,EAAU75C,EACHqlE,GAEAxrB,GAIXwrB,EAAMr4C,QAAU,SAAUhtB,UACpBgB,UAAUxC,QAEVwuB,EADO,MAALhtB,EACQ,KAEAA,EAGLqlE,GAEAr4C,GAIJq4C,EAGT,SAASC,GAAQ5iE,EAAGlD,UACN,MAALkD,EAAYA,EAAIlD,EAGzB,MAAM2D,GAAIyxB,GAAQA,EAAKzxB,GAAK,EACtB2Q,GAAI8gB,GAAQA,EAAK9gB,GAAK,EAiBtBw4B,GAAM1X,MAA2B,IAAjBA,EAAKilB,SAGrB0rB,GzEl6BS,eACThuB,EAAcD,GACdG,EAAcD,GACdwtB,EAAevgE,GAAS,GACxB+gE,EAAY,KACZ7tB,EAAaD,GACbG,EAAWD,GACXG,EAAWD,GACX9qB,EAAU,cAELjc,QACHipC,EACA93C,EACA0H,GAAM2tC,EAAYz2C,MAAMG,KAAMD,WAC9B6I,GAAM4tC,EAAY32C,MAAMG,KAAMD,WAC9BujC,EAAKoT,EAAW72C,MAAMG,KAAMD,WAAao2C,GACzC3S,EAAKoT,EAAS/2C,MAAMG,KAAMD,WAAao2C,GACvCvyC,EAAKrB,GAAIihC,EAAKF,GACd2S,EAAKzS,EAAKF,KAETvX,IAASA,EAAUgtB,EAASz7C,MAG7BsL,EAAKD,IAAI1H,EAAI2H,EAAIA,EAAKD,EAAIA,EAAK1H,GAG7B2H,EAAKmrC,GAGN,GAAInwC,EAAKkwC,GAAMC,GAClBhoB,EAAQuoB,OAAO1rC,EAAKmtC,GAAIzS,GAAK16B,EAAKotC,GAAI1S,IACtCvX,EAAQjc,IAAI,EAAG,EAAGlH,EAAI06B,EAAIE,GAAKyS,GAC3BttC,EAAKorC,KACPhoB,EAAQuoB,OAAO3rC,EAAKotC,GAAIvS,GAAK76B,EAAKqtC,GAAIxS,IACtCzX,EAAQjc,IAAI,EAAG,EAAGnH,EAAI66B,EAAIF,EAAI2S,QAK7B,KAYC39B,EACAC,EAZAgoD,EAAMj9B,EACNm9B,EAAMj9B,EACN88B,EAAMh9B,EACNk9B,EAAMh9B,EACNghC,EAAM5gE,EACN6gE,EAAM7gE,EACN8gE,EAAK5tB,EAASj3C,MAAMG,KAAMD,WAAa,EACvC4kE,EAAMD,EAAK3wB,KAAawwB,GAAaA,EAAU1kE,MAAMG,KAAMD,WAAaiT,GAAKrK,EAAKA,EAAKC,EAAKA,IAC5F2uC,EAAK9yC,GAAIlC,GAAIqG,EAAKD,GAAM,GAAIo7D,EAAalkE,MAAMG,KAAMD,YACrD6kE,EAAMrtB,EACNstB,EAAMttB,KAKNotB,EAAK5wB,GAAS,KACZ/iC,EAAKolC,GAAKuuB,EAAKh8D,EAAKqtC,GAAI0uB,IACxB3zD,EAAKqlC,GAAKuuB,EAAK/7D,EAAKotC,GAAI0uB,KACvBF,GAAY,EAALxzD,GAAU+iC,IAA8BusB,GAArBtvD,GAAOilC,EAAK,GAAK,EAAeuqB,GAAOxvD,IACjEwzD,EAAM,EAAGlE,EAAME,GAAOl9B,EAAKE,GAAM,IACjCihC,GAAY,EAAL1zD,GAAUgjC,IAA8BwsB,GAArBxvD,GAAOklC,EAAK,GAAK,EAAewqB,GAAO1vD,IACjE0zD,EAAM,EAAGlE,EAAME,GAAOn9B,EAAKE,GAAM,OAGpCyR,EAAMrsC,EAAKmtC,GAAIwqB,GACfrrB,EAAMtsC,EAAKotC,GAAIuqB,GACfrpB,EAAMvuC,EAAKotC,GAAIyqB,GACfrpB,EAAMxuC,EAAKqtC,GAAIwqB,MAGfjpB,EAAKxD,GAAS,KAKZ+wB,EAJAptB,EAAM9uC,EAAKmtC,GAAI0qB,GACf9oB,EAAM/uC,EAAKotC,GAAIyqB,GACf7oB,EAAMjvC,EAAKotC,GAAIuqB,GACfzoB,EAAMlvC,EAAKqtC,GAAIsqB,MAIf18D,EAAKiwC,KAAOixB,EAAK/tB,GAAU9B,EAAKC,EAAK0C,EAAKC,EAAKH,EAAKC,EAAKT,EAAKC,IAAO,KACnE4tB,EAAK9vB,EAAM6vB,EAAG,GACdE,EAAK9vB,EAAM4vB,EAAG,GACdG,EAAKvtB,EAAMotB,EAAG,GACdI,EAAKvtB,EAAMmtB,EAAG,GACdK,EAAK,EAAInvB,GAAIL,IAAMovB,EAAKE,EAAKD,EAAKE,IAAOlyD,GAAK+xD,EAAKA,EAAKC,EAAKA,GAAMhyD,GAAKiyD,EAAKA,EAAKC,EAAKA,KAAQ,GAC/FE,EAAKpyD,GAAK8xD,EAAG,GAAKA,EAAG,GAAKA,EAAG,GAAKA,EAAG,IACzCF,EAAMngE,GAAI8yC,GAAK5uC,EAAKy8D,IAAOD,EAAK,IAChCN,EAAMpgE,GAAI8yC,GAAK3uC,EAAKw8D,IAAOD,EAAK,KAK9BV,EAAM1wB,GAGH8wB,EAAM9wB,IACbz7B,EAAKg/B,GAAeM,EAAKC,EAAK5C,EAAKC,EAAKtsC,EAAIi8D,EAAK5uB,GACjD19B,EAAK++B,GAAeI,EAAKC,EAAKT,EAAKC,EAAKvuC,EAAIi8D,EAAK5uB,GAEjDlqB,EAAQuoB,OAAOh8B,EAAGkgC,GAAKlgC,EAAG28B,IAAK38B,EAAGmgC,GAAKngC,EAAG48B,KAGtC2vB,EAAMttB,EAAIxrB,EAAQjc,IAAIwI,EAAGkgC,GAAIlgC,EAAGmgC,GAAIosB,EAAKthC,GAAMjrB,EAAG48B,IAAK58B,EAAG28B,KAAM1R,GAAMhrB,EAAG28B,IAAK38B,EAAG08B,MAAOgB,IAI1FlqB,EAAQjc,IAAIwI,EAAGkgC,GAAIlgC,EAAGmgC,GAAIosB,EAAKthC,GAAMjrB,EAAG48B,IAAK58B,EAAG28B,KAAM1R,GAAMjrB,EAAGq/B,IAAKr/B,EAAGo/B,MAAOzB,GAC9ElqB,EAAQjc,IAAI,EAAG,EAAGlH,EAAI26B,GAAMjrB,EAAGmgC,GAAKngC,EAAGq/B,IAAKr/B,EAAGkgC,GAAKlgC,EAAGo/B,KAAMnU,GAAMhrB,EAAGkgC,GAAKlgC,EAAGo/B,IAAKp/B,EAAGigC,GAAKjgC,EAAGm/B,MAAOzB,GACrGlqB,EAAQjc,IAAIyI,EAAGigC,GAAIjgC,EAAGkgC,GAAIosB,EAAKthC,GAAMhrB,EAAGo/B,IAAKp/B,EAAGm/B,KAAMnU,GAAMhrB,EAAG28B,IAAK38B,EAAG08B,MAAOgB,MAK7ElqB,EAAQuoB,OAAOW,EAAKC,GAAMnpB,EAAQjc,IAAI,EAAG,EAAGlH,EAAI23D,EAAKE,GAAMxqB,IArB1ClqB,EAAQuoB,OAAOW,EAAKC,GAyBpCvsC,EAAKorC,IAAcywB,EAAMzwB,GAGtB6wB,EAAM7wB,IACbz7B,EAAKg/B,GAAeJ,EAAKC,EAAKO,EAAKC,EAAKhvC,GAAKi8D,EAAK3uB,GAClD19B,EAAK++B,GAAerC,EAAKC,EAAK0C,EAAKC,EAAKlvC,GAAKi8D,EAAK3uB,GAElDlqB,EAAQyoB,OAAOl8B,EAAGkgC,GAAKlgC,EAAG28B,IAAK38B,EAAGmgC,GAAKngC,EAAG48B,KAGtC0vB,EAAMrtB,EAAIxrB,EAAQjc,IAAIwI,EAAGkgC,GAAIlgC,EAAGmgC,GAAImsB,EAAKrhC,GAAMjrB,EAAG48B,IAAK58B,EAAG28B,KAAM1R,GAAMhrB,EAAG28B,IAAK38B,EAAG08B,MAAOgB,IAI1FlqB,EAAQjc,IAAIwI,EAAGkgC,GAAIlgC,EAAGmgC,GAAImsB,EAAKrhC,GAAMjrB,EAAG48B,IAAK58B,EAAG28B,KAAM1R,GAAMjrB,EAAGq/B,IAAKr/B,EAAGo/B,MAAOzB,GAC9ElqB,EAAQjc,IAAI,EAAG,EAAGnH,EAAI46B,GAAMjrB,EAAGmgC,GAAKngC,EAAGq/B,IAAKr/B,EAAGkgC,GAAKlgC,EAAGo/B,KAAMnU,GAAMhrB,EAAGkgC,GAAKlgC,EAAGo/B,IAAKp/B,EAAGigC,GAAKjgC,EAAGm/B,KAAMzB,GACpGlqB,EAAQjc,IAAIyI,EAAGigC,GAAIjgC,EAAGkgC,GAAImsB,EAAKrhC,GAAMhrB,EAAGo/B,IAAKp/B,EAAGm/B,KAAMnU,GAAMhrB,EAAG28B,IAAK38B,EAAG08B,MAAOgB,KAK7ElqB,EAAQjc,IAAI,EAAG,EAAGnH,EAAI63D,EAAKF,EAAKrqB,GArBIlqB,EAAQyoB,OAAO0C,EAAKC,QA1F1CprB,EAAQuoB,OAAO,EAAG,MAkHvCvoB,EAAQwoB,YAEJwE,EAAQ,OAAOhtB,EAAU,KAAMgtB,EAAS,IAAM,YAGpDjpC,EAAIu1D,SAAW,eACTpkE,IAAMq1C,EAAYz2C,MAAMG,KAAMD,aAAcy2C,EAAY32C,MAAMG,KAAMD,YAAc,EAClF0B,IAAMi1C,EAAW72C,MAAMG,KAAMD,aAAc62C,EAAS/2C,MAAMG,KAAMD,YAAc,EAAI8zC,GAAK,QACpF,CAACkC,GAAIt0C,GAAKR,EAAG+0C,GAAIv0C,GAAKR,IAG/B6O,EAAIwmC,YAAc,SAASv3C,UAClBgB,UAAUxC,QAAU+4C,EAA2B,mBAANv3C,EAAmBA,EAAIyE,IAAUzE,GAAI+Q,GAAOwmC,GAG9FxmC,EAAI0mC,YAAc,SAASz3C,UAClBgB,UAAUxC,QAAUi5C,EAA2B,mBAANz3C,EAAmBA,EAAIyE,IAAUzE,GAAI+Q,GAAO0mC,GAG9F1mC,EAAIi0D,aAAe,SAAShlE,UACnBgB,UAAUxC,QAAUwmE,EAA4B,mBAANhlE,EAAmBA,EAAIyE,IAAUzE,GAAI+Q,GAAOi0D,GAG/Fj0D,EAAIy0D,UAAY,SAASxlE,UAChBgB,UAAUxC,QAAUgnE,EAAiB,MAALxlE,EAAY,KAAoB,mBAANA,EAAmBA,EAAIyE,IAAUzE,GAAI+Q,GAAOy0D,GAG/Gz0D,EAAI4mC,WAAa,SAAS33C,UACjBgB,UAAUxC,QAAUm5C,EAA0B,mBAAN33C,EAAmBA,EAAIyE,IAAUzE,GAAI+Q,GAAO4mC,GAG7F5mC,EAAI8mC,SAAW,SAAS73C,UACfgB,UAAUxC,QAAUq5C,EAAwB,mBAAN73C,EAAmBA,EAAIyE,IAAUzE,GAAI+Q,GAAO8mC,GAG3F9mC,EAAIgnC,SAAW,SAAS/3C,UACfgB,UAAUxC,QAAUu5C,EAAwB,mBAAN/3C,EAAmBA,EAAIyE,IAAUzE,GAAI+Q,GAAOgnC,GAG3FhnC,EAAIic,QAAU,SAAShtB,UACdgB,UAAUxC,QAAWwuB,EAAe,MAALhtB,EAAY,KAAOA,EAAI+Q,GAAOic,GAG/Djc,EyE2uBQw1D,GAAQ5uB,YAfd/iB,GAAQA,EAAK+iB,YAAc,IAeEE,UAd7BjjB,GAAQA,EAAKijB,UAAY,IAciBE,UAb1CnjB,GAAQA,EAAKmjB,UAAY,IAa8BR,aAZvD3iB,GAAQA,EAAK2iB,aAAe,IAY2CE,aAXvE7iB,GAAQA,EAAK6iB,aAAe,IAW2DutB,cAVvFpwC,GAAQA,EAAKowC,cAAgB,IAWlCwB,GAAaC,KAAStjE,EAAEA,IAAGyyC,GAAG9hC,IAAGtD,IAjB5BokB,IAASA,EAAK9gB,GAAK,IAAM8gB,EAAK+pB,QAAU,KAiBL9E,QAAQvN,IAChDo6B,GAAaD,KAAS3yD,EAAEA,IAAG6hC,GAAGxyC,IAAGoN,IAnB5BqkB,IAASA,EAAKzxB,GAAK,IAAMyxB,EAAKnnB,OAAS,KAmBJosC,QAAQvN,IAChDq6B,GAAYC,KAASzjE,EAAEA,IAAG2Q,EAAEA,IAAG+lC,QAAQvN,IACvCu6B,GAAYvC,KAAUnhE,EAAEA,IAAG2Q,EAAEA,IAAGrG,OAvB5BmnB,GAAQA,EAAKnnB,OAAS,IAuBekxC,QAtBrC/pB,GAAQA,EAAK+pB,QAAU,IAsBwBqmB,cAb9CpwC,GAAQ0wC,GAAQ1wC,EAAKkyC,oBAAqBlyC,EAAKowC,eAAiB,IAChEpwC,GAAQ0wC,GAAQ1wC,EAAKmyC,qBAAsBnyC,EAAKowC,eAAiB,IACjEpwC,GAAQ0wC,GAAQ1wC,EAAKoyC,wBAAyBpyC,EAAKowC,eAAiB,IACpEpwC,GAAQ0wC,GAAQ1wC,EAAKqyC,uBAAwBryC,EAAKowC,eAAiB,IAWxEkC,GC/9BS,SAASp3D,EAAM5H,OACxB8kB,EAAU,cAILlW,QACHkjC,KACChtB,IAASA,EAAUgtB,EAASz7C,MACjCuR,EAAKhP,MAAMG,KAAMD,WAAWk6C,KAAKluB,GAAU9kB,EAAKpH,MAAMG,KAAMD,YACxDg5C,EAAQ,OAAOhtB,EAAU,KAAMgtB,EAAS,IAAM,YAPpDlqC,EAAuB,mBAATA,EAAsBA,EAAOrL,GAASqL,GAAQq3D,IAC5Dj/D,EAAuB,mBAATA,EAAsBA,EAAOzD,QAAkB2D,IAATF,EAAqB,IAAMA,GAS/E4O,EAAOhH,KAAO,SAAS9P,UACdgB,UAAUxC,QAAUsR,EAAoB,mBAAN9P,EAAmBA,EAAIyE,GAASzE,GAAI8W,GAAUhH,GAGzFgH,EAAO5O,KAAO,SAASlI,UACdgB,UAAUxC,QAAU0J,EAAoB,mBAANlI,EAAmBA,EAAIyE,IAAUzE,GAAI8W,GAAU5O,GAG1F4O,EAAOkW,QAAU,SAAShtB,UACjBgB,UAAUxC,QAAUwuB,EAAe,MAALhtB,EAAY,KAAOA,EAAG8W,GAAUkW,GAGhElW,EDu8BWswD,GAAWt3D,MAPlB8kB,GAAQqpC,GAAQrpC,EAAKyyC,OAAS,YAODn/D,MAV/B0sB,GAAQ0wC,GAAQ1wC,EAAK1sB,KAAM,MAWhCo/D,GAAarC,KAAW9hE,EAAEA,IAAG2Q,EAAEA,IAAG+lC,QAAQvN,IAAKpkC,MAV1C0sB,GAAQA,EAAK1sB,MAAQ,IAWhC,SAASq/D,GAAgB3yC,UAChBA,EAAKowC,cAAgBpwC,EAAKkyC,qBAAuBlyC,EAAKmyC,sBAAwBnyC,EAAKoyC,yBAA2BpyC,EAAKqyC,uBAe5H,SAAStC,GAAU33C,EAAS4H,EAAMzxB,EAAG2Q,UAC5B+yD,GAAU75C,QAAQA,EAAlB65C,CAA2BjyC,EAAMzxB,EAAG2Q,GAY7C,IAAI0zD,GAAU,EACd,SAASC,KACPD,GAAU,EAEZ,SAASE,GAAQC,EAAU/yC,EAAM1sB,OAC3B0/D,EAAOhzC,EAAKgzC,KACZzI,EAAOwI,EAASE,MAChB/nE,EAAK80B,EAAK4yC,UAAY5yC,EAAK4yC,QAAU,OAASA,MAC9CloE,EAAI6/D,EAAK2I,SAAShoE,KAAQq/D,EAAK2I,SAAShoE,GAAM,CAChDA,GAAIA,WAGFiG,EAAW6hE,GACbtoE,EAAEf,KAAOqpE,EAAK,MACLL,GAAgBr/D,GACzB5I,EAAEf,KAAOomE,GAAU,KAAMz8D,EAAM,EAAG,IAElC5I,EAAEmO,MAAQvF,EAAKuF,OAAS,EACxBnO,EAAEq/C,OAASz2C,EAAKy2C,QAAU,GAGrB,QAAU7+C,EAAK,IAGxB,SAASioE,GAAOvoE,QACT+I,QACD/I,GAAGyB,KAAK+mE,MAAMxoE,GAgJpB,SAASyoE,GAAKC,QACPA,KAAOA,OACPC,OAASlnE,KAAKknE,QAAU,IAAIJ,GAGnC,SAASK,GAAUF,GACjBD,GAAKrnE,KAAKK,KAAMinE,QACXG,MAAQpnE,KAAKonE,OAAS,GAI7B,SAASC,GAAeC,QACjB1tC,SAAW,OACXnB,QAAU6uC,GAAgB93C,KAGjC,SAAS+3C,GAAU/3C,GACjBA,EAAOoK,UAAY,EAGrB,SAAS4tC,GAAUh4C,GACjBA,EAAOoK,UAAY,EAuErB,SAAS6tC,GAAaP,EAAQvzC,EAAM+zC,MAC9B/zC,EAAKg0C,QAA2B,IAAjBh0C,EAAKw1B,SAAwC,IAAvBx1B,EAAKi0C,cAAqB,OAC3DC,EAAyB,MAApBl0C,EAAKm0C,aAAuBn0C,EAAKm0C,YAAc,EAC1DZ,EAAOa,OAAOF,GAAMH,EAMxB,SAAyB/zC,EAAMm0C,UAEtBn0C,EAAKq0C,YAAkC,UAApBr0C,EAAKq0C,WAAyB,EAAIF,EAR9BG,CAAgBt0C,EAAMk0C,GAAM,WAGnDX,EAhPTJ,GAAOtgE,UAAY,CACjBwwB,eACS,IAAI8vC,GAAO9mE,OAGpBsH,oBACOotC,IAAM99B,OAAOsxD,eACbvzB,IAAM/9B,OAAOsxD,eACb/mC,IAAMvqB,OAAOsxD,eACbrzB,IAAMj+B,OAAOsxD,UACXloE,MAGTkH,eACSlH,KAAK00C,MAAQ99B,OAAOsxD,WAAaloE,KAAK20C,MAAQ/9B,OAAOsxD,WAAaloE,KAAKmhC,MAAQvqB,OAAOsxD,WAAaloE,KAAK60C,MAAQj+B,OAAOsxD,WAGhIC,OAAO5pE,UACEyB,KAAK00C,KAAOn2C,EAAEm2C,IAAM10C,KAAK20C,KAAOp2C,EAAEo2C,IAAM30C,KAAKmhC,KAAO5iC,EAAE4iC,IAAMnhC,KAAK60C,KAAOt2C,EAAEs2C,IAGnFztC,IAAIstC,EAAIC,EAAIxT,EAAI0T,UACV1T,EAAKuT,QACFvT,GAAKuT,OACLA,GAAKvT,SAELuT,GAAKA,OACLvT,GAAKA,GAGR0T,EAAKF,QACFE,GAAKF,OACLA,GAAKE,SAELF,GAAKA,OACLE,GAAKA,GAGL70C,MAGT2B,IAAIO,EAAG2Q,UACD3Q,EAAIlC,KAAK00C,KAAI10C,KAAK00C,GAAKxyC,GACvB2Q,EAAI7S,KAAK20C,KAAI30C,KAAK20C,GAAK9hC,GACvB3Q,EAAIlC,KAAKmhC,KAAInhC,KAAKmhC,GAAKj/B,GACvB2Q,EAAI7S,KAAK60C,KAAI70C,KAAK60C,GAAKhiC,GACpB7S,MAGT+nE,OAAO71D,eACAwiC,IAAMxiC,OACNyiC,IAAMziC,OACNivB,IAAMjvB,OACN2iC,IAAM3iC,EACJlS,MAGTyT,oBACOihC,GAAKvyC,KAAKwR,MAAM3T,KAAK00C,SACrBC,GAAKxyC,KAAKwR,MAAM3T,KAAK20C,SACrBxT,GAAKh/B,KAAK2I,KAAK9K,KAAKmhC,SACpB0T,GAAK1yC,KAAK2I,KAAK9K,KAAK60C,IAClB70C,MAGT2D,MAAMnF,eACCk2C,IAAMl2C,OACNm2C,IAAMn2C,OACN2iC,IAAM3iC,OACNq2C,IAAMr2C,EACJwB,MAGT2P,UAAUD,EAAIE,eACP8kC,IAAMhlC,OACNyxB,IAAMzxB,OACNilC,IAAM/kC,OACNilC,IAAMjlC,EACJ5P,MAGTmuD,OAAOia,EAAOlmE,EAAG2Q,SACT3U,EAAI8B,KAAKqoE,cAAcD,EAAOlmE,EAAG2Q,UAChC7S,KAAKsH,QAAQ3F,IAAIzD,EAAE,GAAIA,EAAE,IAAIyD,IAAIzD,EAAE,GAAIA,EAAE,IAAIyD,IAAIzD,EAAE,GAAIA,EAAE,IAAIyD,IAAIzD,EAAE,GAAIA,EAAE,KAGlFmqE,cAAcD,EAAOlmE,EAAG2Q,OAClB6hC,GACFA,EADEC,GAEFA,EAFExT,GAGFA,EAHE0T,GAIFA,GACE70C,KACA+1C,EAAM5zC,KAAK4zC,IAAIqyB,GACfpyB,EAAM7zC,KAAK6zC,IAAIoyB,GACf5vB,EAAKt2C,EAAIA,EAAI6zC,EAAMljC,EAAImjC,EACvByC,EAAK5lC,EAAI3Q,EAAI8zC,EAAMnjC,EAAIkjC,QACpB,CAACA,EAAMrB,EAAKsB,EAAMrB,EAAK6D,EAAIxC,EAAMtB,EAAKqB,EAAMpB,EAAK8D,EAAI1C,EAAMrB,EAAKsB,EAAMnB,EAAK2D,EAAIxC,EAAMtB,EAAKqB,EAAMlB,EAAK4D,EAAI1C,EAAM5U,EAAK6U,EAAMrB,EAAK6D,EAAIxC,EAAM7U,EAAK4U,EAAMpB,EAAK8D,EAAI1C,EAAM5U,EAAK6U,EAAMnB,EAAK2D,EAAIxC,EAAM7U,EAAK4U,EAAMlB,EAAK4D,IAGtNsuB,MAAMxoE,UACAA,EAAEm2C,GAAK10C,KAAK00C,KAAI10C,KAAK00C,GAAKn2C,EAAEm2C,IAC5Bn2C,EAAEo2C,GAAK30C,KAAK20C,KAAI30C,KAAK20C,GAAKp2C,EAAEo2C,IAC5Bp2C,EAAE4iC,GAAKnhC,KAAKmhC,KAAInhC,KAAKmhC,GAAK5iC,EAAE4iC,IAC5B5iC,EAAEs2C,GAAK70C,KAAK60C,KAAI70C,KAAK60C,GAAKt2C,EAAEs2C,IACzB70C,MAGT+2C,UAAUx4C,UACJA,EAAEm2C,GAAK10C,KAAK00C,KAAI10C,KAAK00C,GAAKn2C,EAAEm2C,IAC5Bn2C,EAAEo2C,GAAK30C,KAAK20C,KAAI30C,KAAK20C,GAAKp2C,EAAEo2C,IAC5Bp2C,EAAE4iC,GAAKnhC,KAAKmhC,KAAInhC,KAAKmhC,GAAK5iC,EAAE4iC,IAC5B5iC,EAAEs2C,GAAK70C,KAAK60C,KAAI70C,KAAK60C,GAAKt2C,EAAEs2C,IACzB70C,MAGTsoE,SAAS/pE,UACAA,GAAKyB,KAAK00C,IAAMn2C,EAAEm2C,IAAM10C,KAAKmhC,IAAM5iC,EAAE4iC,IAAMnhC,KAAK20C,IAAMp2C,EAAEo2C,IAAM30C,KAAK60C,IAAMt2C,EAAEs2C,IAGpF0zB,WAAWhqE,UACFA,IAAMyB,KAAK00C,IAAMn2C,EAAEm2C,IAAM10C,KAAKmhC,IAAM5iC,EAAE4iC,IAAMnhC,KAAK20C,IAAMp2C,EAAEo2C,IAAM30C,KAAK60C,IAAMt2C,EAAEs2C,KAGrF2zB,WAAWjqE,UACFA,KAAOyB,KAAKmhC,GAAK5iC,EAAEm2C,IAAM10C,KAAK00C,GAAKn2C,EAAE4iC,IAAMnhC,KAAK60C,GAAKt2C,EAAEo2C,IAAM30C,KAAK20C,GAAKp2C,EAAEs2C,KAGlF4zB,SAASvmE,EAAG2Q,WACD3Q,EAAIlC,KAAK00C,IAAMxyC,EAAIlC,KAAKmhC,IAAMtuB,EAAI7S,KAAK20C,IAAM9hC,EAAI7S,KAAK60C,KAGjEroC,eACSxM,KAAKmhC,GAAKnhC,KAAK00C,IAGxBgJ,gBACS19C,KAAK60C,GAAK70C,KAAK20C,KAc1B3sC,GAASm/D,GAAWH,IAepBK,GAAe7gE,UAAY,CACzBmzB,iBACS35B,KAAK45B,UAGd8uC,YAAYh+C,SACJ8E,EAASxvB,YACfunE,GAAU/3C,GACHA,EAAOiJ,QAAQ7N,SAASF,EAAK,CAClCqB,QAAS,SACR2O,MAAK/7B,IACN6oE,GAAUh4C,GACH7wB,KACNgqE,OAAM,KACPnB,GAAUh4C,GACH,SAIXo5C,UAAUl+C,SACF8E,EAASxvB,KACT+9C,EAAQ8qB,YACdtB,GAAU/3C,GACHA,EAAOiJ,QAAQ7N,SAASF,EAAK,CAClCqB,QAAS,UACR2O,MAAK/7B,UACAksB,EAAMlsB,EAAImsB,SACXD,IAAQkzB,EAAO,KAAM,CACxBlzB,IAAKA,SAEDi+C,EAAM,IAAI/qB,EAGVgrB,EAAOtiE,GAAe9H,EAAK,eAAiBA,EAAIqtB,YAAc,mBACxD,MAAR+8C,IAAcD,EAAI98C,YAAc+8C,GAEpCD,EAAIE,OAAS,IAAMxB,GAAUh4C,GAE7Bs5C,EAAIG,QAAU,IAAMzB,GAAUh4C,GAE9Bs5C,EAAI5xC,IAAMrM,EACHi+C,KACNH,OAAM1iE,IACPuhE,GAAUh4C,GACH,CACL05C,UAAU,EACV18D,MAAO,EACPkxC,OAAQ,EACRxmB,IAAKjxB,GAAKA,EAAE4kB,KAAO,QAKzBo5C,cACQz0C,EAASxvB,YACR,IAAIosB,SAAQC,cACR88C,EAAK9nE,GACPmuB,EAAOmK,UAA8BxzB,YAAW,KACnDgjE,GAAK,KACJ,IAFoB98C,EAAOhrB,GAKhC8nE,EAAK,QAoBX,MAAMC,GAAkBzJ,GAAM,KAC9B,IAAIuH,GAAQjmC,GAAIR,GAAI4oC,GAAKC,GAAIC,GAAIC,GAAIC,GAErC,MAAM9nE,GAAM,CAACO,EAAG2Q,IAAMq0D,GAAOvlE,IAAIO,EAAG2Q,GAE9B62D,GAAO,CAACxnE,EAAG2Q,IAAMlR,GAAIs/B,GAAK/+B,EAAGu+B,GAAK5tB,GAElC82D,GAAOznE,GAAKP,GAAIO,EAAGglE,GAAOvyB,IAE1Bi1B,GAAO/2D,GAAKlR,GAAIulE,GAAOxyB,GAAI7hC,GAE3B+qC,GAAK,CAAC17C,EAAG2Q,IAAMy2D,GAAKpnE,EAAIsnE,GAAK32D,EAE7BgrC,GAAK,CAAC37C,EAAG2Q,IAAM02D,GAAKrnE,EAAIunE,GAAK52D,EAE7Bg3D,GAAO,CAAC3nE,EAAG2Q,IAAMlR,GAAIi8C,GAAG17C,EAAG2Q,GAAIgrC,GAAG37C,EAAG2Q,IAErCi3D,GAAQ,CAAC5nE,EAAG2Q,IAAM62D,GAAK9rB,GAAG17C,EAAG2Q,GAAIgrC,GAAG37C,EAAG2Q,IAE7C,SAASk3D,GAAchrE,EAAGirE,UACxB9C,GAASnoE,EAELirE,GACFX,GAAMW,EAAMvK,GACZ6J,GAAKG,GAAKtnE,KAAK4zC,IAAIszB,IACnBE,GAAKpnE,KAAK6zC,IAAIqzB,IACdG,IAAMD,KAEND,GAAKG,GAAK,EACVJ,GAAME,GAAKC,GAAK,GAGXS,GAET,MAAMA,GAAY,CAChBtI,cAEAptB,cAEAD,OAAQw1B,GACRt1B,OAAQs1B,GAER5zB,KAAKh0C,EAAG2Q,EAAG+L,EAAG+c,GACR0tC,IACFQ,GAAK3nE,EAAI0c,EAAG/L,GACZg3D,GAAK3nE,EAAI0c,EAAG/L,EAAI8oB,GAChBkuC,GAAK3nE,EAAG2Q,EAAI8oB,GACZmuC,GAAM5nE,EAAG2Q,KAETlR,GAAIO,EAAI0c,EAAG/L,EAAI8oB,GACf+tC,GAAKxnE,EAAG2Q,KAIZ4hC,iBAAiBC,EAAIC,EAAIxT,EAAI0T,SACrBq1B,EAAMtsB,GAAGlJ,EAAIC,GACbw1B,EAAMtsB,GAAGnJ,EAAIC,GACby1B,EAAMxsB,GAAGzc,EAAI0T,GACbw1B,EAAMxsB,GAAG1c,EAAI0T,GACnBy1B,GAAYrpC,GAAIipC,EAAKE,EAAKT,IAC1BW,GAAY7pC,GAAI0pC,EAAKE,EAAKT,IAC1BF,GAAKU,EAAKC,IAGZz1B,cAAcF,EAAIC,EAAIxT,EAAI0T,EAAImC,EAAIC,SAC1BizB,EAAMtsB,GAAGlJ,EAAIC,GACbw1B,EAAMtsB,GAAGnJ,EAAIC,GACby1B,EAAMxsB,GAAGzc,EAAI0T,GACbw1B,EAAMxsB,GAAG1c,EAAI0T,GACb01B,EAAM3sB,GAAG5G,EAAIC,GACbuzB,EAAM3sB,GAAG7G,EAAIC,GACnBwzB,GAAaxpC,GAAIipC,EAAKE,EAAKG,EAAKZ,IAChCc,GAAahqC,GAAI0pC,EAAKE,EAAKG,EAAKZ,IAChCF,GAAKa,EAAKC,IAGZ16D,IAAI0oC,EAAIC,EAAIx3C,EAAGypE,EAAIC,EAAI70B,MACrB40B,GAAMrB,GACNsB,GAAMtB,GAENpoC,GAAKhgC,EAAIkB,KAAK4zC,IAAI40B,GAAMnyB,EACxB/X,GAAKx/B,EAAIkB,KAAK6zC,IAAI20B,GAAMlyB,EAEpBt2C,KAAKI,IAAIooE,EAAKD,GAAMtB,GAEtBznE,GAAI62C,EAAKv3C,EAAGw3C,EAAKx3C,GACjBU,GAAI62C,EAAKv3C,EAAGw3C,EAAKx3C,OACZ,OACC6I,EAASrI,GAAKE,GAAIV,EAAIkB,KAAK4zC,IAAIt0C,GAAK+2C,EAAIv3C,EAAIkB,KAAK6zC,IAAIv0C,GAAKg3C,OAE5Dj6C,EAAGX,KAEPiM,EAAO4gE,GACP5gE,EAAO6gE,GAEHA,IAAOD,MACTA,GAAU/K,IACD,IAAG+K,GAAM/K,KAClBgL,GAAUhL,IACD,IAAGgL,GAAMhL,IAEdgL,EAAKD,IACP50B,GAAOA,EAEPt3C,EAAIksE,EACJA,EAAKC,EACLA,EAAKnsE,GAGHs3C,MACF60B,GAAMhL,GACNnhE,EAAIksE,EAAKA,EAAKhL,GAET7hE,EAAI,EAAGA,EAAI,GAAKW,EAAImsE,IAAM9sE,EAAGW,GAAKkhE,GAAQ51D,EAAOtL,YAEtDA,EAAIksE,EAAKA,EAAKhL,GAASA,GAElB7hE,EAAI,EAAGA,EAAI,GAAKW,EAAImsE,IAAM9sE,EAAGW,GAAQkhE,GAAQ51D,EAAOtL,MAQnE,SAAS8rE,GAAYh7D,EAAIolC,EAAIvT,EAAIrG,SACzBhzB,GAAKwH,EAAKolC,IAAOplC,EAAK6xB,EAAK,EAAIuT,GACjC,EAAI5sC,GAAKA,EAAI,GAAGgzB,EAAGxrB,GAAMolC,EAAKplC,GAAMxH,GAG1C,SAAS2iE,GAAan7D,EAAIolC,EAAIvT,EAAI6V,EAAIlc,SAC9Br5B,EAAIu1C,EAAK1nC,EAAK,EAAIolC,EAAK,EAAIvT,EAC3B5iC,EAAI+Q,EAAK6xB,EAAK,EAAIuT,EAClBr2C,EAAIiR,EAAKolC,MAGXzzC,EAFAqX,EAAK,EACLC,EAAK,EAGLpW,KAAKI,IAAId,GAnuCC,OAquCZR,EAAI1C,EAAIA,EAAIF,EAAIoD,EAEZR,GAAK,IACPA,EAAIkB,KAAK6Q,KAAK/R,GACdqX,IAAO/Z,EAAI0C,GAAKQ,EAChB8W,IAAOha,EAAI0C,GAAKQ,IAIlB6W,EAAK,GAAMja,EAAIE,EAIb,EAAI+Z,GAAMA,EAAK,GAAGwiB,EAAG8vC,GAAMtyD,EAAIhJ,EAAIolC,EAAIvT,EAAI6V,IAC3C,EAAIz+B,GAAMA,EAAK,GAAGuiB,EAAG8vC,GAAMryD,EAAIjJ,EAAIolC,EAAIvT,EAAI6V,IAGjD,SAAS4zB,GAAM9iE,EAAGwH,EAAIolC,EAAIvT,EAAI6V,SACtBx4C,EAAI,EAAIsJ,EACR+iE,EAAKrsE,EAAIA,EACT8rD,EAAKxiD,EAAIA,SACR+iE,EAAKrsE,EAAI8Q,EAAK,EAAIu7D,EAAK/iE,EAAI4sC,EAAK,EAAIl2C,EAAI8rD,EAAKnpB,EAAKmpB,EAAKxiD,EAAIkvC,EAGpE,IAAIjrB,IAAWA,GAAU++C,GAAO,EAAG,IAAM/+C,GAAQ0xB,WAAW,MAAQ,KAEpE,MAAMl/C,GAAI,IAAIuoE,GACd,SAASiE,GAAc9wB,UACd,SAAUtmB,EAAMq3C,OAEhBj/C,GAAS,OAAO,EAErBkuB,EAAKluB,GAAS4H,GAEdp1B,GAAE+I,QAAQy/D,MAAMpzC,EAAKuzC,QAAQnwB,UAAUi0B,GAAOv3D,cACxCihC,GACJA,EADIC,GAEJA,EAFIxT,GAGJA,EAHI0T,GAIJA,GACEt2C,OAGC,IAAIsU,EAAI8hC,EAAI9hC,GAAKgiC,IAAMhiC,MACrB,IAAI3Q,EAAIwyC,EAAIxyC,GAAKi/B,IAAMj/B,KACtB6pB,GAAQk/C,cAAc/oE,EAAG2Q,UACpB,SAMN,GAGX,SAASq4D,GAAev3C,EAAMw3C,UACrBA,EAAI1C,SAAS90C,EAAKzxB,GAAK,EAAGyxB,EAAK9gB,GAAK,GAE7C,SAASu4D,GAAcz3C,EAAMw3C,SACrBjpE,EAAIyxB,EAAKzxB,GAAK,EACd2Q,EAAI8gB,EAAK9gB,GAAK,EACd+L,EAAI+U,EAAKnnB,OAAS,EAClBmvB,EAAIhI,EAAK+pB,QAAU,SAClBytB,EAAI3C,WAAWjqE,GAAE6I,IAAIlF,EAAG2Q,EAAG3Q,EAAI0c,EAAG/L,EAAI8oB,IAE/C,SAAS0vC,GAAc13C,EAAMw3C,SACrBjpE,EAAIyxB,EAAKzxB,GAAK,EACd2Q,EAAI8gB,EAAK9gB,GAAK,SAGby4D,GAAiBH,EAAKjpE,EAAG2Q,EAFV,MAAX8gB,EAAKwN,GAAaxN,EAAKwN,GAAKj/B,EACjB,MAAXyxB,EAAKkhB,GAAalhB,EAAKkhB,GAAKhiC,GAGzC,SAASy4D,GAAiBH,EAAKjpE,EAAG2Q,EAAGrN,EAAGC,SAChCivC,GACJA,EADIC,GAEJA,EAFIxT,GAGJA,EAHI0T,GAIJA,GACEs2B,EACEz7D,EAAKlK,EAAItD,EACT0N,EAAKnK,EAAIoN,MAGX3U,EACAI,EACA2C,EACAgF,EALAqS,EAAK,EACLC,EAAK,MAMJtS,EAAI,EAAGA,EAAI,IAAKA,EAAG,IACZ,IAANA,IACF/H,GAAKwR,EACLpR,IAAMo2C,EAAKxyC,IAGH,IAAN+D,IACF/H,EAAIwR,EACJpR,EAAI6iC,EAAKj/B,GAGD,IAAN+D,IACF/H,GAAK0R,EACLtR,IAAMq2C,EAAK9hC,IAGH,IAAN5M,IACF/H,EAAI0R,EACJtR,EAAIu2C,EAAKhiC,GAGP1Q,KAAKI,IAAIrE,GAAK,OAASI,EAAI,EAAG,OAAO,KACzC2C,EAAI3C,EAAIJ,EAEJA,EAAI,EAAG,IACL+C,EAAIsX,EAAI,OAAO,EAAetX,EAAIqX,IAAIA,EAAKrX,QAC1C,GAAI/C,EAAI,EAAG,IACZ+C,EAAIqX,EAAI,OAAO,EAAerX,EAAIsX,IAAIA,EAAKtX,WAI5C,EAGT,SAASsqE,GAAOx/C,EAAS4H,GACvB5H,EAAQy/C,yBAA2B73C,EAAK43C,OAAS,cAGnD,SAASlqE,GAAOA,EAAOq8D,UACL,MAATr8D,EAAgBq8D,EAAOr8D,EAGhC,SAASoqE,GAASzN,EAAUI,SACpBjgE,EAAIigE,EAAM7gE,WAEX,IAAIM,EAAI,EAAGA,EAAIM,IAAKN,EACvBmgE,EAAS0N,aAAatN,EAAMvgE,GAAG+a,OAAQwlD,EAAMvgE,GAAG+qD,cAG3CoV,EAmCT,SAASpV,GAAO78B,EAAS4H,EAAMtyB,UACtB08D,GAAW18D,GAjCpB,SAAmB0qB,EAASvD,EAAM0+C,SAC1BtoD,EAAIsoD,EAAO16D,QACXmvB,EAAIurC,EAAOxpB,aACbsgB,KAEkB,WAAlBx1C,EAAKw1C,SACPA,EAAWjyC,EAAQ4/C,qBAAqBzE,EAAOxyB,GAAKrzC,GAAMmnB,EAAKksB,GAAI,IAAO91B,EAAGsoD,EAAOvyB,GAAKtzC,GAAMmnB,EAAKmsB,GAAI,IAAOhZ,EAAGx5B,KAAKuC,IAAIka,EAAG+c,GAAKt6B,GAAMmnB,EAAK5f,GAAI,GAAIs+D,EAAOxyB,GAAKrzC,GAAMmnB,EAAK2Y,GAAI,IAAOviB,EAAGsoD,EAAOvyB,GAAKtzC,GAAMmnB,EAAKqsB,GAAI,IAAOlZ,EAAGx5B,KAAKuC,IAAIka,EAAG+c,GAAKt6B,GAAMmnB,EAAK8rC,GAAI,SAC3P,OAEC5f,EAAKrzC,GAAMmnB,EAAKksB,GAAI,GACpBC,EAAKtzC,GAAMmnB,EAAKmsB,GAAI,GACpBxT,EAAK9/B,GAAMmnB,EAAK2Y,GAAI,GACpB0T,EAAKxzC,GAAMmnB,EAAKqsB,GAAI,MAEtBH,IAAOvT,GAAMwT,IAAOE,GAAMj2B,IAAM+c,EAG7B,OAGCiwC,EAAQd,GAAO3oE,KAAK2I,KAAK8T,GAAIzc,KAAK2I,KAAK6wB,IACvCkwC,EAAOD,EAAMnuB,WAAW,aAC9BouB,EAAKloE,MAAMib,EAAG+c,GACdkwC,EAAKC,UAAYL,GAASI,EAAKE,qBAAqBr3B,EAAIC,EAAIxT,EAAI0T,GAAKrsB,EAAK41C,OAC1EyN,EAAKG,SAAS,EAAG,EAAGptD,EAAG+c,GAChB5P,EAAQkgD,cAAcL,EAAO,aATpC5N,EAAWjyC,EAAQggD,qBAAqB7E,EAAOxyB,GAAKA,EAAK91B,EAAGsoD,EAAOvyB,GAAKA,EAAKhZ,EAAGurC,EAAOxyB,GAAKvT,EAAKviB,EAAGsoD,EAAOvyB,GAAKE,EAAKlZ,UAalH8vC,GAASzN,EAAUx1C,EAAK41C,OAIJJ,CAASjyC,EAAS1qB,EAAOsyB,EAAKuzC,QAAU7lE,EAGrE,SAASuU,GAAMmW,EAAS4H,EAAMw1B,UAC5BA,GAA+B,MAApBx1B,EAAKu4C,YAAsB,EAAIv4C,EAAKu4C,aAEjC,IACZngD,EAAQogD,YAAchjB,EACtBp9B,EAAQ+/C,UAAYljB,GAAM78B,EAAS4H,EAAMA,EAAK/d,OACvC,GAMX,IAAIo4B,GAAQ,GACZ,SAAS25B,GAAQ57C,EAAS4H,EAAMw1B,OAC1BijB,EAAgC,OAA1BA,EAAKz4C,EAAKm0C,aAAuBsE,EAAK,UAC5CA,GAAM,MACVjjB,GAAiC,MAAtBx1B,EAAKi0C,cAAwB,EAAIj0C,EAAKi0C,eAEnC,IACZ77C,EAAQogD,YAAchjB,EACtBp9B,EAAQsgD,YAAczjB,GAAM78B,EAAS4H,EAAMA,EAAKg0C,QAChD57C,EAAQugD,UAAYF,EACpBrgD,EAAQwgD,QAAU54C,EAAK64C,WAAa,OACpCzgD,EAAQ0gD,SAAW94C,EAAKq0C,YAAc,QACtCj8C,EAAQ2gD,WAAa/4C,EAAKg5C,kBAAoB,GAE1C5gD,EAAQ6gD,cACV7gD,EAAQ6gD,YAAYj5C,EAAKk5C,YAAc7+B,IACvCjiB,EAAQ+gD,eAAiBn5C,EAAKo5C,kBAAoB,IAG7C,IAMX,SAAShoE,GAAQtD,EAAGlD,UACXkD,EAAEurE,OAASzuE,EAAEyuE,QAAUvrE,EAAEyS,MAAQ3V,EAAE2V,MAG5C,SAAS+4D,GAAOC,OACTA,EAAMC,OAAQ,OAAOD,EAAME,WAG5Bz5C,EACA91B,EACAM,EAJAipE,EAAQ8F,EAAM9F,MACdhmE,EAAS,OAKRvD,EAAI,EAAGM,EAAIipE,EAAM7pE,OAAQM,EAAIM,IAAKN,GACrC81B,EAAOyzC,EAAMvpE,IACRqW,MAAQrW,EACT81B,EAAKq5C,QAAQ5rE,EAAO3C,KAAKk1B,UAG/Bu5C,EAAMC,QAAS,EACRD,EAAME,OAAShsE,EAAOub,KAAK5X,IAEpC,SAAS8wB,GAAMq3C,EAAOthE,OAEhB/N,EACAM,EAFAipE,EAAQ8F,EAAM9F,UAGbA,IAAUA,EAAM7pE,OAAQ,aACvB6vE,EAASH,GAAOC,MAElBE,GAAUA,EAAO7vE,OAAQ,KACtBM,EAAI,EAAGM,EAAIipE,EAAM7pE,OAAQM,EAAIM,IAAKN,EAChCupE,EAAMvpE,GAAGmvE,QAAQphE,EAAQw7D,EAAMvpE,IAGtCupE,EAAQgG,MAGLvvE,EAAI,EAAGM,EAAIipE,EAAM7pE,OAAQM,EAAIM,IAAKN,EACrC+N,EAAQw7D,EAAMvpE,IAGlB,SAASwvE,GAAUH,EAAOthE,OAEpB0hE,EACAzvE,EAFAupE,EAAQ8F,EAAM9F,UAGbA,IAAUA,EAAM7pE,OAAQ,OAAO,WAC9B6vE,EAASH,GAAOC,OAClBE,GAAUA,EAAO7vE,SAAQ6pE,EAAQgG,GAEhCvvE,EAAIupE,EAAM7pE,SAAUM,GAAK,MACxByvE,EAAM1hE,EAAQw7D,EAAMvpE,IAAK,OAAOyvE,KAGlClG,IAAUgG,MACcvvE,GAArBupE,EAAQ8F,EAAM9F,OAAiB7pE,SAAUM,GAAK,OAC5CupE,EAAMvpE,GAAGmvE,SACRM,EAAM1hE,EAAQw7D,EAAMvpE,KAAK,OAAOyvE,SAKnC,KAGT,SAASC,GAAQjwE,UACR,SAAUyuB,EAASmhD,EAAOhG,GAC/BrxC,GAAMq3C,GAAOv5C,IACNuzC,IAAUA,EAAOsB,WAAW70C,EAAKuzC,SACpCsG,GAASlwE,EAAMyuB,EAAS4H,EAAMA,OAKtC,SAAS85C,GAAQnwE,UACR,SAAUyuB,EAASmhD,EAAOhG,IAC3BgG,EAAM9F,MAAM7pE,QAAY2pE,IAAUA,EAAOsB,WAAW0E,EAAMhG,SAC5DsG,GAASlwE,EAAMyuB,EAASmhD,EAAM9F,MAAM,GAAI8F,EAAM9F,QAKpD,SAASoG,GAASlwE,EAAMyuB,EAAS4H,EAAMyzC,OACjCje,EAA0B,MAAhBx1B,EAAKw1B,QAAkB,EAAIx1B,EAAKw1B,QAC9B,IAAZA,IACA7rD,EAAKyuB,EAASq7C,KAClBmE,GAAMx/C,EAAS4H,GAEXA,EAAK/d,MAAQA,GAAKmW,EAAS4H,EAAMw1B,IACnCp9B,EAAQnW,OAGN+d,EAAKg0C,QAAUA,GAAO57C,EAAS4H,EAAMw1B,IACvCp9B,EAAQ47C,WAIZ,SAAS+F,GAAO3mE,UACdA,EAAOA,GAAQ7H,EACR,SAAU6sB,EAASmhD,EAAOhrE,EAAG2Q,EAAG86D,EAAIC,UACzC1rE,GAAK6pB,EAAQ8hD,WACbh7D,GAAKkZ,EAAQ8hD,WACNR,GAAUH,GAAOv5C,UAChBp1B,EAAIo1B,EAAKuzC,YAEX3oE,GAAMA,EAAEkqE,SAASkF,EAAIC,KAAQrvE,SAE7BwI,EAAKglB,EAAS4H,EAAMzxB,EAAG2Q,EAAG86D,EAAIC,GAAYj6C,aAIpD,SAASm6C,GAAQxwE,EAAMywE,UACd,SAAUhiD,EAASvqB,EAAGU,EAAG2Q,OAI1Bu5D,EACAhH,EAJAzxC,EAAOtzB,MAAMD,QAAQoB,GAAKA,EAAE,GAAKA,EACjCoU,EAAiB,MAAVm4D,EAAiBp6C,EAAK/d,KAAOm4D,EACpCpG,EAASh0C,EAAKg0C,QAAU57C,EAAQiiD,uBAIhCrG,IACFyE,EAAKz4C,EAAKm0C,YACV1C,EAAKzxC,EAAK64C,UACVzgD,EAAQugD,UAAkB,MAANF,EAAaA,EAAK,EACtCrgD,EAAQwgD,QAAgB,MAANnH,EAAaA,EAAK,SAG/B9nE,EAAKyuB,EAASvqB,KAAaoU,GAAQmW,EAAQk/C,cAAc/oE,EAAG2Q,IAAM80D,GAAU57C,EAAQiiD,gBAAgB9rE,EAAG2Q,KAGlH,SAASo7D,GAAS3wE,UACTowE,GAAOI,GAAQxwE,IAGxB,SAASqS,GAAUzN,EAAG2Q,SACb,aAAe3Q,EAAI,IAAM2Q,EAAI,IAEtC,SAASs7C,GAAO1sD,SACP,UAAYA,EAAI,IAKzB,SAASysE,GAAcv6C,UACdhkB,GAAUgkB,EAAKzxB,GAAK,EAAGyxB,EAAK9gB,GAAK,GAS1C,SAASs7D,GAAct/D,EAAMu3D,EAAOgI,YAWzBn0B,EAAKluB,EAAS4H,OACjBzxB,EAAIyxB,EAAKzxB,GAAK,EACd2Q,EAAI8gB,EAAK9gB,GAAK,EACdpR,EAAIkyB,EAAKy0C,OAAS,EACtBr8C,EAAQpc,UAAUzN,EAAG2Q,GACjBpR,GAAGsqB,EAAQoiC,OAAO1sD,GAAKg+D,IAC3B1zC,EAAQ41C,YACRyE,EAAMr6C,EAAS4H,GACXlyB,GAAGsqB,EAAQoiC,QAAQ1sD,GACvBsqB,EAAQpc,WAAWzN,GAAI2Q,SAGlB,CACLhE,KAAMA,EACNw/D,IAAK,OACLC,QAAQ,EACRC,cA1BYC,EAAM76C,GAClB66C,EAAK,YATT,SAAoB76C,UACXhkB,GAAUgkB,EAAKzxB,GAAK,EAAGyxB,EAAK9gB,GAAK,IAAM8gB,EAAKy0C,MAAQ,IAAMja,GAAOx6B,EAAKy0C,OAAS,IAQlEqG,CAAW96C,IAC7B66C,EAAK,IAAKpI,EAAM,KAAMzyC,KAyBtB+6C,eAtBaxH,EAAQvzC,UACrByyC,EAAM2D,GAAa7C,EAAQvzC,EAAKy0C,OAAQz0C,GACjC8zC,GAAYP,EAAQvzC,GAAMhkB,UAAUgkB,EAAKzxB,GAAK,EAAGyxB,EAAK9gB,GAAK,IAqBlEonC,KAAMszB,GAAQtzB,GACd00B,KAAMV,GAASh0B,GACfm0B,MAAOA,GAASrD,GAAc9wB,IAIlC,IAAInqC,GAAMq+D,GAAa,OAx0BvB,SAAepiD,EAAS4H,UACf2wC,GAASv4C,QAAQA,EAAjBu4C,CAA0B3wC,MAg4BnC,SAASi7C,GAAmB//D,EAAMu3D,EAAOyI,YAiB9B50B,EAAKluB,EAASq7C,GACrBr7C,EAAQ41C,YACRyE,EAAMr6C,EAASq7C,SAGXkG,EAAMQ,GAAQ7zB,SAeb,CACLprC,KAAMA,EACNw/D,IAAK,OACLC,QAAQ,EACRC,cAxCYC,EAAM76C,OACdyzC,EAAQzzC,EAAKszC,KAAKG,MAClBA,EAAM7pE,QAAQixE,EAAK,IAAKpI,EAAM,KAAMgB,KAuCxCsH,eApCaxH,EAAQD,OACjBG,EAAQH,EAAKG,aAEI,IAAjBA,EAAM7pE,OACD2pE,GAEPd,EAAM2D,GAAa7C,GAASE,GACrBK,GAAYP,EAAQE,EAAM,MA8BnCntB,KAAMwzB,GAAQxzB,GACd00B,cApBY5iD,EAASmhD,EAAOhrE,EAAG2Q,EAAG86D,EAAIC,OAClCxG,EAAQ8F,EAAM9F,MACd7oE,EAAI2uE,EAAMhG,cAETE,IAAUA,EAAM7pE,QAAUgB,IAAMA,EAAEkqE,SAASkF,EAAIC,GAC3C,MAGT1rE,GAAK6pB,EAAQ8hD,WACbh7D,GAAKkZ,EAAQ8hD,WACNP,EAAIvhD,EAASq7C,EAAOllE,EAAG2Q,GAAKu0D,EAAM,GAAK,OAW9CgH,MAAOlD,GACP2D,IAAKA,GAIT,IAAIx1B,GAAOu1B,GAAkB,QAh7B7B,SAAgB7iD,EAASq7C,SACjBzzC,EAAOyzC,EAAM,GACbtP,EAASnkC,EAAKs9B,aAAe,gBACX,eAAhBt9B,EAAKm7C,OAA0BrJ,GAAaF,IAAY1sB,MAAMkmB,GAAOjH,EAAQnkC,EAAKm7C,OAAQn7C,EAAK2nB,UAAUvvB,QAAQA,EAAlH,CAA2Hq7C,MAo0BpI,SAAkB3lE,EAAGvD,WAKfovE,EACAp7D,EALAzM,EAAoB,eAAhBhE,EAAE,GAAGqtE,OAA0B5wE,EAAE,GAAKA,EAAE,GAC5CmW,EAAoB,eAAhB5S,EAAE,GAAGqtE,OAA0B,IAAM,IACzCjxE,EAAI4D,EAAElE,OACNkH,EAAOyT,EAAAA,IAIFra,GAAK,IACS,IAAjB4D,EAAE5D,GAAG+6C,UACT1mC,EAAI/P,KAAKI,IAAId,EAAE5D,GAAGwW,GAAK5O,IAEfhB,IACNA,EAAMyN,EACNo7D,EAAM7rE,EAAE5D,WAILyvE,KAqGT,SAASyB,GAAUhjD,EAASpV,GAC1BoV,EAAQ41C,YACR2E,GAAgB3vD,GAAS+sD,GAAU33C,EAASpV,EAAO,EAAG,GAAKoV,EAAQmqB,KAAK,EAAG,EAAGv/B,EAAMnK,OAAS,EAAGmK,EAAM+mC,QAAU,GAChH3xB,EAAQ46C,OAGV,SAASqI,GAASr7C,SACVk0C,EAAKxmE,GAAMsyB,EAAKm0C,YAAa,UACP,MAArBn0C,EAAKs7C,aAAuBt7C,EAAKs7C,aAAet7C,EAAKg0C,QAAUE,EAAK,IAAOA,EAAK,IAAM,GAAM1lE,KAAKI,IAAIslE,EAAK,GAAK,EAOxH,SAASqH,GAAcV,EAAM76C,SACrBw7C,EAAMH,GAASr7C,GACrB66C,EAAK,IAAK9K,GAAU,KAAM/vC,EAAMw7C,EAAKA,IA2CvC,SAASC,GAAcrjD,EAASpV,EAAOzU,EAAG2Q,SAClCs8D,EAAMH,GAASr4D,GACrBoV,EAAQ41C,YACR+B,GAAU33C,EAASpV,GAAQzU,GAAK,GAAKitE,GAAMt8D,GAAK,GAAKs8D,GAGvD,MAAME,GAAgBvB,GAAQsB,IACxBE,GAAgBxB,GAAQsB,IAAe,GACvCG,GAAYzB,GAAQsB,IAAe,GAqGzC,IAAIz4D,GAAQ,CACV9H,KAAM,QACNw/D,IAAK,IACLC,QAAQ,EACRC,KAlKF,SAAgBC,EAAM76C,GACpB66C,EAAK,YAAaN,GAAcv6C,KAkKhC+6C,MApIF,SAAiBxH,EAAQvwD,OAClBA,EAAMgwD,MAAQhwD,EAAMywD,MAAO,OACxBA,EAAQzwD,EAAMywD,MACdhzD,EAAIgzD,EAAM7pE,WAEX,IAAIa,EAAI,EAAGA,EAAIgW,IAAKhW,EACvB8oE,EAAOH,MAAMK,EAAMhpE,GAAG8oE,eAIrBvwD,EAAMgwD,MAAQhwD,EAAMnK,OAASmK,EAAM+mC,UAAY/mC,EAAM64D,SACxDtI,EAAOvlE,IAAI,EAAG,GAAGA,IAAIgV,EAAMnK,OAAS,EAAGmK,EAAM+mC,QAAU,GAGzD+pB,GAAYP,EAAQvwD,GACbuwD,EAAOv3D,UAAUgH,EAAMzU,GAAK,EAAGyU,EAAM9D,GAAK,IAsHjDonC,KAzGF,SAAgBluB,EAASmhD,EAAOhG,GAC9BrxC,GAAMq3C,GAAOv2D,UACLg3D,EAAKh3D,EAAMzU,GAAK,EAChB0rE,EAAKj3D,EAAM9D,GAAK,EAChB48D,EAAO94D,EAAM+4D,iBACbvmB,EAA2B,MAAjBxyC,EAAMwyC,QAAkB,EAAIxyC,EAAMwyC,SAE7CxyC,EAAMgxD,QAAUhxD,EAAMf,OAASuzC,IAClCimB,GAAcrjD,EAASpV,EAAOg3D,EAAIC,GAClCrC,GAAMx/C,EAASpV,GAEXA,EAAMf,MAAQA,GAAKmW,EAASpV,EAAOwyC,IACrCp9B,EAAQnW,OAGNe,EAAMgxD,SAAW8H,GAAQ9H,GAAO57C,EAASpV,EAAOwyC,IAClDp9B,EAAQ47C,UAKZ57C,EAAQ4jD,OACR5jD,EAAQpc,UAAUg+D,EAAIC,GAClBj3D,EAAMgwD,MAAMoI,GAAUhjD,EAASpV,GAC/BuwD,GAAQA,EAAOv3D,WAAWg+D,GAAKC,GAEnC/3C,GAAMlf,GAAOgd,SACNsmB,KAAKluB,EAAS4H,EAAMuzC,MAGvBA,GAAQA,EAAOv3D,UAAUg+D,EAAIC,GACjC7hD,EAAQ6jD,UAEJH,GAAQ94D,EAAMgxD,QAAUxe,IAC1BimB,GAAcrjD,EAASpV,EAAOg3D,EAAIC,GAClCrC,GAAMx/C,EAASpV,GAEXgxD,GAAO57C,EAASpV,EAAOwyC,IACzBp9B,EAAQ47C,cAoEdgH,KA9DF,SAAc5iD,EAASmhD,EAAOhrE,EAAG2Q,EAAG86D,EAAIC,MAClCV,EAAMhG,SAAWgG,EAAMhG,OAAOuB,SAASkF,EAAIC,KAAQV,EAAM9F,aACpD,WAGH5uB,EAAKt2C,EAAI6pB,EAAQ8hD,WACjBp1B,EAAK5lC,EAAIkZ,EAAQ8hD,kBAChBR,GAAUH,GAAOv2D,QAClB22D,EAAK59D,EAAIE,QAEPrR,EAAIoY,EAAMuwD,UACZ3oE,IAAMA,EAAEkqE,SAASkF,EAAIC,GAAK,OAE9Bl+D,EAAKiH,EAAMzU,GAAK,EAChB0N,EAAK+G,EAAM9D,GAAK,QACVg9D,EAAKngE,GAAMiH,EAAMnK,OAAS,GAC1BsjE,EAAKlgE,GAAM+G,EAAM+mC,QAAU,GAC3Br/C,EAAIsY,EAAMgwD,QACZtoE,IAAMsvE,EAAKj+D,GAAMi+D,EAAKkC,GAAMjC,EAAKh+D,GAAMg+D,EAAKkC,GAAK,UAErD/jD,EAAQ4jD,OACR5jD,EAAQpc,UAAUD,EAAIE,GACtBF,EAAKi+D,EAAKj+D,EACVE,EAAKg+D,EAAKh+D,EAENvR,GAAKioE,GAAgB3vD,KAAW44D,GAAUxjD,EAASpV,EAAO6hC,EAAIC,UAChE1sB,EAAQ6jD,UACD,WAGHH,EAAO94D,EAAM+4D,iBACbK,GAA2B,IAAtB7C,EAAM8C,mBAEbD,GAAMN,GAAQ94D,EAAMgxD,QAAU2H,GAAcvjD,EAASpV,EAAO6hC,EAAIC,IAClE1sB,EAAQ6jD,UACDj5D,IAIT22D,EAAMD,GAAU12D,GAAOswD,GAY3B,SAAkBA,EAAM/kE,EAAG2Q,WACI,IAArBo0D,EAAK+I,aAA2C,UAAlB/I,EAAKgJ,WAAyBhJ,EAAKC,QAAUD,EAAKC,OAAOuB,SAASvmE,EAAG2Q,GAb1Eq9D,CAASjJ,EAAMv3D,EAAIE,GAAM5P,KAAK2uE,KAAK1H,EAAM/kE,EAAG2Q,EAAGnD,EAAIE,GAAM,QAEnF09D,GAAOyC,IAAOp5D,EAAMf,OAAS65D,GAAQ94D,EAAMgxD,SAAW0H,GAActjD,EAASpV,EAAO6hC,EAAIC,KAC3F60B,EAAM32D,GAIRoV,EAAQ6jD,UACDtC,GAAO,UAgBhBc,MAAOhD,GACP+E,QA7IF,SAAiB3B,EAAM76C,EAAM+yC,GAE3B8H,EAAK,YADO76C,EAAKgzC,KAAOF,GAAOC,EAAU/yC,EAAMA,GAAQ,OA6IvDy8C,WA/JF,SAAoB5B,EAAM76C,GACxB66C,EAAK,QAAS,cACdA,EAAK,eAAe,GACpBU,GAAcV,EAAM76C,IA6JpB08C,WA1JF,SAAoB7B,EAAM76C,GACxB66C,EAAK,QAAS,cACdA,EAAK,eAAe,GAEhB76C,EAAK+7C,iBACPR,GAAcV,EAAM76C,GAEpB66C,EAAK,IAAK,MAsJVrY,GAAW,OACJ,2CACM,uCACJ,OAGb,SAASma,GAAS38C,EAAM+yC,OAClBkF,EAAQj4C,EAAKi4C,cAEZA,GAASj4C,EAAK9I,KAAO8I,EAAK9I,MAAQ+gD,EAAM/gD,OAC3C+gD,EAAQ,CACN1C,UAAU,EACV18D,MAAO,EACPkxC,OAAQ,GAEVgpB,EAASkC,UAAUj1C,EAAK9I,KAAK6P,MAAKkxC,IAChCj4C,EAAKi4C,MAAQA,EACbj4C,EAAKi4C,MAAM/gD,IAAM8I,EAAK9I,QAInB+gD,EAGT,SAAS2E,GAAW58C,EAAMi4C,UACH,MAAdj4C,EAAKnnB,MAAgBmnB,EAAKnnB,MAASo/D,GAAUA,EAAMp/D,OAA4B,IAAhBmnB,EAAK68C,QAAoB78C,EAAK+pB,OAAS/pB,EAAK+pB,OAASkuB,EAAMp/D,MAAQo/D,EAAMluB,OAASkuB,EAAMp/D,MAA5F,EAGpE,SAASikE,GAAY98C,EAAMi4C,UACH,MAAfj4C,EAAK+pB,OAAiB/pB,EAAK+pB,OAAUkuB,GAAUA,EAAMluB,QAA6B,IAAhB/pB,EAAK68C,QAAoB78C,EAAKnnB,MAAQmnB,EAAKnnB,MAAQo/D,EAAMluB,OAASkuB,EAAMp/D,MAAQo/D,EAAMluB,OAA1F,EAGvE,SAASgzB,GAAa7lE,EAAO+T,SACV,WAAV/T,EAAqB+T,EAAI,EAAc,UAAV/T,EAAoB+T,EAAI,EAG9D,SAAS+xD,GAAaC,EAAUj1C,SACV,WAAbi1C,EAAwBj1C,EAAI,EAAiB,WAAbi1C,EAAwBj1C,EAAI,EAoErE,IAAIiwC,GAAQ,CACV/8D,KAAM,QACNw/D,IAAK,QACLC,QAAQ,EACRC,KArEF,SAAgBC,EAAM76C,EAAM+yC,SACpBoC,EAAMwH,GAAS38C,EAAM+yC,GACrB9nD,EAAI2xD,GAAW58C,EAAMm1C,GACrBntC,EAAI80C,GAAY98C,EAAMm1C,GACtB5mE,GAAKyxB,EAAKzxB,GAAK,GAAKwuE,GAAa/8C,EAAK9oB,MAAO+T,GAC7C/L,GAAK8gB,EAAK9gB,GAAK,GAAK89D,GAAah9C,EAAKi9C,SAAUj1C,GAEtD6yC,EAAK,QADM1F,EAAI5xC,KAAO4xC,EAAI+H,UAAY/H,EAAI+H,YAAc/H,EAAI5xC,KAAO,GACnDi/B,GAAS,eAAgB,cACzCqY,EAAK,YAAa7+D,GAAUzN,EAAG2Q,IAC/B27D,EAAK,QAAS5vD,GACd4vD,EAAK,SAAU7yC,GACf6yC,EAAK,uBAAuC,IAAhB76C,EAAK68C,OAAmB,OAAS,aA2D7D9B,MAxDF,SAAiBxH,EAAQvzC,SACjBm1C,EAAMn1C,EAAKi4C,MACXhtD,EAAI2xD,GAAW58C,EAAMm1C,GACrBntC,EAAI80C,GAAY98C,EAAMm1C,GACtB5mE,GAAKyxB,EAAKzxB,GAAK,GAAKwuE,GAAa/8C,EAAK9oB,MAAO+T,GAC7C/L,GAAK8gB,EAAK9gB,GAAK,GAAK89D,GAAah9C,EAAKi9C,SAAUj1C,UAC/CurC,EAAO9/D,IAAIlF,EAAG2Q,EAAG3Q,EAAI0c,EAAG/L,EAAI8oB,IAmDnCse,KAhDF,SAAgBluB,EAASmhD,EAAOhG,GAC9BrxC,GAAMq3C,GAAOv5C,OACPuzC,IAAWA,EAAOsB,WAAW70C,EAAKuzC,QAAS,aAEzC4B,EAAMwH,GAAS38C,EAAM3zB,UACvB4e,EAAI2xD,GAAW58C,EAAMm1C,GACrBntC,EAAI80C,GAAY98C,EAAMm1C,MAChB,IAANlqD,GAAiB,IAAN+c,EAAS,WAIpBwtB,EACA2nB,EACAC,EACAjpE,EALA5F,GAAKyxB,EAAKzxB,GAAK,GAAKwuE,GAAa/8C,EAAK9oB,MAAO+T,GAC7C/L,GAAK8gB,EAAK9gB,GAAK,GAAK89D,GAAah9C,EAAKi9C,SAAUj1C,IAMhC,IAAhBhI,EAAK68C,SACPM,EAAMhI,EAAIt8D,MAAQs8D,EAAIprB,OACtBqzB,EAAMp9C,EAAKnnB,MAAQmnB,EAAK+pB,OAEpBozB,GAAQA,GAAOC,GAAQA,GAAOD,IAAQC,IACpCA,EAAMD,GACRhpE,EAAI8W,EAAIkyD,EACRj+D,IAAM8oB,EAAI7zB,GAAK,EACf6zB,EAAI7zB,IAEJA,EAAI6zB,EAAIm1C,EACR5uE,IAAM0c,EAAI9W,GAAK,EACf8W,EAAI9W,MAKNghE,EAAII,UAAYJ,EAAI+H,aACtBtF,GAAMx/C,EAAS4H,GACf5H,EAAQogD,YAA0C,OAA3BhjB,EAAUx1B,EAAKw1B,SAAmBA,EAAU,EACnEp9B,EAAQilD,uBAAwC,IAAhBr9C,EAAK+I,OACrC3Q,EAAQklD,UAAUnI,EAAK5mE,EAAG2Q,EAAG+L,EAAG+c,QAYpCgzC,KAAMjB,KACNU,MAAOlvE,EAEPN,IAAK0xE,GACLY,QAASR,GACTS,QAASR,IAGPxgE,GAAOy+D,GAAkB,QAxuC7B,SAAgB7iD,EAASq7C,SACjBzzC,EAAOyzC,EAAM,GACbtP,EAASnkC,EAAKs9B,aAAe,gBAC5ByU,GAAU7sB,MAAMkmB,GAAOjH,EAAQnkC,EAAKm7C,OAAQn7C,EAAK2nB,UAAUvvB,QAAQA,EAAnE25C,CAA4E0B,MAm1BrF,SAAkB3lE,EAAGvD,WAGfwR,EACAE,EAHA9H,EAAI3F,KAAKO,IAAIjB,EAAE,GAAGqmE,aAAe,EAAG,GACpCjqE,EAAI4D,EAAElE,SAKDM,GAAK,OACS,IAAjB4D,EAAE5D,GAAG+6C,UACTlpC,EAAKjO,EAAE5D,GAAGqE,EAAIhE,EAAE,IAENwR,GADVE,EAAKnO,EAAE5D,GAAGgV,EAAI3U,EAAE,IACI0R,EACX9H,EAAG,OAAOrG,EAAE5D,UAGhB,QAiZT,SAASuzE,GAAOrlD,EAAS4H,OACnBr2B,EAAOq2B,EAAKr2B,QACJ,MAARA,EAAc,OAAO,MACrB4E,EAAIyxB,EAAKzxB,GAAK,EACd2Q,EAAI8gB,EAAK9gB,GAAK,EACdw+D,EAAK19C,EAAK06B,QAAU,EACpBijB,EAAK39C,EAAK26B,QAAU,EACpB7sD,GAAKkyB,EAAKy0C,OAAS,GAAK3I,GACxBl3C,EAAQoL,EAAK49C,UAEZhpD,GAASA,EAAMjrB,OAASA,KAC1Bq2B,EAAK49C,UAAYhpD,EAAQ62C,GAAU9hE,IAAOA,KAAOA,GAGhDmE,GAAKsqB,EAAQoiC,QAAUpiC,EAAQpc,WACjCoc,EAAQpc,UAAUzN,EAAG2Q,GACrBkZ,EAAQoiC,OAAO1sD,GACf2/D,GAAWr1C,EAASxD,EAAO,EAAG,EAAG8oD,EAAIC,GACrCvlD,EAAQoiC,QAAQ1sD,GAChBsqB,EAAQpc,WAAWzN,GAAI2Q,IAEvBuuD,GAAWr1C,EAASxD,EAAOrmB,EAAG2Q,EAAGw+D,EAAIC,GAQzC,IAAIE,GAAS,CACX3iE,KAAM,OACNw/D,IAAK,OACLC,QAAQ,EACRC,KA7CF,SAAgBC,EAAM76C,OAChB09C,EAAK19C,EAAK06B,QAAU,EACpBijB,EAAK39C,EAAK26B,QAAU,EAEb,IAAP+iB,GAAmB,IAAPC,GACd9C,EAAK,gBAAiB,sBAGxBA,EAAK,YAzdP,SAAuB76C,UACdhkB,GAAUgkB,EAAKzxB,GAAK,EAAGyxB,EAAK9gB,GAAK,IAAM8gB,EAAKy0C,MAAQ,IAAMja,GAAOx6B,EAAKy0C,OAAS,KAAOz0C,EAAK06B,QAAU16B,EAAK26B,OAAS,KAV7GD,EAUyH16B,EAAK06B,QAAU,EAVhIC,EAUmI36B,EAAK26B,QAAU,EAThK,SAAWD,EAAS,IAAMC,EAAS,KASkI,IAV9K,IAAeD,EAAQC,EAkeHmjB,CAAc99C,IAChC66C,EAAK,IAAK76C,EAAKr2B,OAqCfoxE,MATF,SAAiBxH,EAAQvzC,UAChBy9C,GAAOrH,GAAa7C,EAAQvzC,EAAKy0C,OAAQz0C,GAAQuzC,EAAO9/D,IAAI,EAAG,EAAG,EAAG,GAAKqgE,GAAYP,EAAQvzC,GAAM,IAS3GsmB,KAAMszB,GAAQ6D,IACdzC,KAAMV,GAASmD,IACfhD,MAAOrD,GAAcqG,KAYvB,SAASM,GAAO3lD,EAAS4H,GACvB5H,EAAQ41C,YACR+B,GAAU33C,EAAS4H,GAGrB,IAAIuiB,GAAO,CACTrnC,KAAM,OACNw/D,IAAK,OACLC,QAAQ,EACRC,KAlBF,SAAgBC,EAAM76C,GACpB66C,EAAK,IAAK9K,GAAU,KAAM/vC,KAkB1B+6C,MAfF,SAAiBxH,EAAQvzC,OACnBzxB,EAAG2Q,SACA40D,GAAYP,EAAO9/D,IAAIlF,EAAIyxB,EAAKzxB,GAAK,EAAG2Q,EAAI8gB,EAAK9gB,GAAK,EAAG3Q,EAAIyxB,EAAKnnB,OAAS,EAAGqG,EAAI8gB,EAAK+pB,QAAU,GAAI/pB,IAc5GsmB,KAAMszB,GAAQmE,IACd/C,KAAMV,GAASyD,IACftD,MAAOhD,IAcT,SAAS9tE,GAAKyuB,EAAS4H,EAAMw1B,OACvBzU,EAAIC,EAAIxT,EAAI0T,WAEZlhB,EAAKg0C,SAAUA,GAAO57C,EAAS4H,EAAMw1B,MACvCzU,EAAK/gB,EAAKzxB,GAAK,EACfyyC,EAAKhhB,EAAK9gB,GAAK,EACfsuB,EAAgB,MAAXxN,EAAKwN,GAAaxN,EAAKwN,GAAKuT,EACjCG,EAAgB,MAAXlhB,EAAKkhB,GAAalhB,EAAKkhB,GAAKF,EACjC5oB,EAAQ41C,YACR51C,EAAQuoB,OAAOI,EAAIC,GACnB5oB,EAAQyoB,OAAOrT,EAAI0T,IACZ,GAwBX,IAAI88B,GAAO,CACT9iE,KAAM,OACNw/D,IAAK,OACLC,QAAQ,EACRC,KAlDF,SAAgBC,EAAM76C,GACpB66C,EAAK,YAAaN,GAAcv6C,IAChC66C,EAAK,KAAiB,MAAX76C,EAAKwN,GAAaxN,EAAKwN,IAAMxN,EAAKzxB,GAAK,GAAK,GACvDssE,EAAK,KAAiB,MAAX76C,EAAKkhB,GAAalhB,EAAKkhB,IAAMlhB,EAAK9gB,GAAK,GAAK,IAgDvD67D,MA7CF,SAAiBxH,EAAQvzC,OACnB+gB,EAAIC,SACD8yB,GAAYP,EAAO9/D,IAAIstC,EAAK/gB,EAAKzxB,GAAK,EAAGyyC,EAAKhhB,EAAK9gB,GAAK,EAAc,MAAX8gB,EAAKwN,GAAaxN,EAAKwN,GAAKuT,EAAe,MAAX/gB,EAAKkhB,GAAalhB,EAAKkhB,GAAKF,GAAKhhB,IA4CnIsmB,KAxBF,SAAgBluB,EAASmhD,EAAOhG,GAC9BrxC,GAAMq3C,GAAOv5C,QACPuzC,GAAWA,EAAOsB,WAAW70C,EAAKuzC,aAElC/d,EAA0B,MAAhBx1B,EAAKw1B,QAAkB,EAAIx1B,EAAKw1B,QAE1CA,GAAW7rD,GAAKyuB,EAAS4H,EAAMw1B,KACjCoiB,GAAMx/C,EAAS4H,GACf5H,EAAQ47C,eAiBZgH,KAAMjB,IAZR,SAAe3hD,EAAS4H,EAAMzxB,EAAG2Q,WAC1BkZ,EAAQiiD,kBACN1wE,GAAKyuB,EAAS4H,EAAM,IAAM5H,EAAQiiD,gBAAgB9rE,EAAG2Q,OAW5Du7D,MAAO/C,IAGLjF,GAAQ+H,GAAa,SAx2CzB,SAAiBpiD,EAAS4H,UAChBA,EAAKszC,KAAKb,OAASzyC,EAAKyyC,OAAOr6C,QAAQA,EAAxC,CAAiD4H,MAy2CtD9d,GAASs4D,GAAa,UAv2C1B,SAAkBpiD,EAAS4H,UAClBsyC,GAAYl6C,QAAQA,EAApBk6C,CAA6BtyC,KAs2CQu3C,IAE9C,MAAM0G,GAAaloE,SACfmoE,GAAc,CAChBn0B,OAAQo0B,GACRC,aAAcA,GACdC,cAAeA,GACfxlE,MAAOwlE,GACPlH,OAAQmH,IAIV,SAASA,GAAUC,GACjBL,GAAYrlE,MAAQ0lE,GAAOnmD,GAAUgmD,GAAeC,GAItD,SAASA,GAAcr+C,EAAM9lB,UACpBskE,GAAeC,GAAUz+C,EAAM9lB,GAAOikE,GAASn+C,IAGxD,SAASw+C,GAAetkE,EAAMwkE,YAClB,GAAMxkE,EAAKtQ,OAAS80E,GAIhC,SAASN,GAAap+C,EAAM9lB,UACnBikE,GAASn+C,IAAS,KAAO9lB,EAAOukE,GAAUz+C,EAAM9lB,IAAS,EAAIykE,GAAczkE,EAAM0kE,GAAK5+C,IAG/F,SAAS2+C,GAAczkE,EAAM2kE,SACrB/xE,EAAO,IAAG+xE,MAAgB3kE,QAC5BrB,EAAQolE,GAAWhzE,IAAI6B,eAEb0G,IAAVqF,IACFuf,GAAQwmD,KAAOC,EACfhmE,EAAQuf,GAAQ0mD,YAAY5kE,GAAMrB,MAClColE,GAAWxqE,IAAI3G,EAAK+L,IAGfA,EAGT,SAASslE,GAASn+C,UACQ,MAAjBA,EAAKm+C,UAAoBn+C,EAAKm+C,UAAY,EAAI,GAEvD,SAASY,GAAW/+C,UACQ,MAAnBA,EAAK++C,WAAqB/+C,EAAK++C,WAAaZ,GAASn+C,GAAQ,EAOtE,SAASg/C,GAAUh/C,UAJA50B,EAKA40B,EAAKi/C,WAAaj/C,EAAK9lB,OAASzN,EAAQuzB,EAAK9lB,MAAQ8lB,EAAK9lB,KAAK0hB,MAAMoE,EAAKi/C,WAAaj/C,EAAK9lB,KAJtGzN,EAAQrB,GAAKA,EAAExB,OAAS,EAAIwB,EAAIA,EAAE,GAAKA,EADhD,IAAmBA,EAOnB,SAAS8zE,GAAgBl/C,SACjBgwC,EAAKgP,GAAUh/C,UACbvzB,EAAQujE,GAAMA,EAAGpmE,OAAS,EAAI,GAAKm1E,GAAW/+C,GAExD,SAASy+C,GAAUz+C,EAAMxjB,SACjBtC,EAAe,MAARsC,EAAe,IAAMA,EAAO,IAAI6F,cACtC2d,EAAK0c,MAAQ,GAAKxiC,EAAKtQ,OAehC,SAAkBo2B,EAAM9lB,OAClBwiC,GAAS1c,EAAK0c,MACd7jC,EAdN,SAAqBmnB,MACfk+C,GAAYrlE,QAAUulE,GAAc,OAEhCS,EAAcD,GAAK5+C,UAClB9lB,GAAQykE,GAAczkE,EAAM2kE,GAC9B,OAECH,EAAoBP,GAASn+C,UAC5B9lB,GAAQskE,GAAetkE,EAAMwkE,IAM1BS,CAAYn/C,MACpBnnB,EAAMqB,GAAQwiC,EAAO,OAAOxiC,MAK5BoE,EAJAxG,EAAWkoB,EAAKloB,UAAY,IAC5BsnE,EAAmB,QAAbp/C,EAAKq/C,IACXpuE,EAAK,EACLC,EAAKgJ,EAAKtQ,UAEd8yC,GAAS7jC,EAAMf,GAEXsnE,EAAK,MACAnuE,EAAKC,GACVoN,EAAMrN,EAAKC,IAAO,EACd2H,EAAMqB,EAAKnO,MAAMuS,IAAQo+B,EAAOzrC,EAAKqN,EAAM,EAAOpN,EAAKoN,SAGtDxG,EAAWoC,EAAKnO,MAAMkF,QAEtBA,EAAKC,GACVoN,EAAM,GAAKrN,EAAKC,IAAO,GACnB2H,EAAMqB,EAAKnO,MAAM,EAAGuS,IAAQo+B,EAAOzrC,EAAKqN,EAASpN,EAAKoN,EAAM,SAG3DpE,EAAKnO,MAAM,EAAGkF,GAAM6G,EAvCUD,CAASmoB,EAAM9lB,GAAQA,EA2ChE,SAASolE,GAAWt/C,EAAMu/C,OACpBX,EAAO5+C,EAAK4+C,YACRW,GAASX,EAAOp7D,OAAOo7D,GAAMhpE,QAAQ,KAAM,KAAQgpE,IAAS,aAEtE,SAASA,GAAK5+C,EAAMu/C,UACLv/C,EAAKw/C,UAAYx/C,EAAKw/C,UAAY,IAAM,KAAOx/C,EAAKy/C,YAAcz/C,EAAKy/C,YAAc,IAAM,KAAOz/C,EAAK0/C,WAAa1/C,EAAK0/C,WAAa,IAAM,IAAMvB,GAASn+C,GAAQ,MAAQs/C,GAAWt/C,EAAMu/C,GAE3M,SAASt6D,GAAO+a,OAIVi9C,EAAWj9C,EAAKi9C,SAChBj1C,EAAIm2C,GAASn+C,UACVxxB,KAAKsR,MAAmB,QAAbm9D,EAAqB,IAAOj1C,EAAiB,WAAbi1C,EAAwB,GAAOj1C,EAAiB,WAAbi1C,GAAyB,IAAOj1C,EAAiB,aAAbi1C,EAA0B,IAAOj1C,EAAI,GAAM+2C,GAAW/+C,GAAqB,gBAAbi9C,EAA6B,IAAOj1C,EAAI,GAAM+2C,GAAW/+C,GAAQ,GA7G1Ps+C,IAAU,GAgHV,MAAMqB,GAAY,MACR,eACE,eACD,OAELC,GAAa,IAAIzM,GAEvB,SAAS0M,GAAY7/C,OAIf7rB,EAHA5F,EAAIyxB,EAAKzxB,GAAK,EACd2Q,EAAI8gB,EAAK9gB,GAAK,EACd5R,EAAI0yB,EAAK8/C,QAAU,SAGnBxyE,IACF6G,GAAK6rB,EAAK+/C,OAAS,GAAKhU,GACxBx9D,GAAKjB,EAAIkB,KAAK4zC,IAAIjuC,GAClB+K,GAAK5R,EAAIkB,KAAK6zC,IAAIluC,IAGpByrE,GAAW7+B,GAAKxyC,EAChBqxE,GAAW5+B,GAAK9hC,EACT0gE,GAuBT,SAAS7E,GAAMxH,EAAQvzC,EAAM/H,OAUvBhN,EATA+c,EAAIk2C,GAAYn0B,OAAO/pB,GACvBlyB,EAAIkyB,EAAK9oB,MACT3M,EAAIs1E,GAAY7/C,GAChBzxB,EAAIhE,EAAEw2C,GACN7hC,EAAI3U,EAAEy2C,GACNjlC,EAAKikB,EAAKjkB,IAAM,EAChBE,GAAM+jB,EAAK/jB,IAAM,GAAKgJ,GAAO+a,GAAQxxB,KAAKsR,MAAM,GAAMkoB,GAE1DgoC,EAAKgP,GAAUh/C,MAGXvzB,EAAQujE,IAEVhoC,GAAK+2C,GAAW/+C,IAASgwC,EAAGpmE,OAAS,GACrCqhB,EAAI+kD,EAAG/iE,QAAO,CAACge,EAAG9W,IAAM3F,KAAKuC,IAAIka,EAAGizD,GAAYrlE,MAAMmnB,EAAM7rB,KAAK,IAGjE8W,EAAIizD,GAAYrlE,MAAMmnB,EAAMgwC,GAIpB,WAANliE,EACFiO,GAAMkP,EAAI,EACK,UAANnd,IACTiO,GAAMkP,GAGRsoD,EAAO9/D,IAAIsI,GAAMxN,EAAG0N,GAAMiD,EAAGnD,EAAKkP,EAAGhP,EAAK+rB,GAEtChI,EAAKy0C,QAAUx8C,EACjBs7C,EAAO/Y,OAAOx6B,EAAKy0C,MAAQ3I,GAAUv9D,EAAG2Q,QACnC,GAAa,IAAT+Y,SACFs7C,EAAOmB,cAAc10C,EAAKy0C,MAAQ3I,GAAUv9D,EAAG2Q,UAGjDq0D,EAsFT,IAaIyM,GAAQ,CACV7jE,IAAKA,GACLupC,KAAMA,GACN1iC,MAAOA,GACPi1D,MAAOA,GACPz7D,KAAMA,GACN7S,KAAMk0E,GACNt7B,KAAMA,GACNy7B,KAAMA,GACNvL,MAAOA,GACPvwD,OAAQA,GACRhI,KAxBS,CACTgB,KAAM,OACNw/D,IAAK,OACLC,QAAQ,EACRC,KAlJF,SAAcC,EAAM76C,OAOd7rB,EANA4H,EAAKikB,EAAKjkB,IAAM,EAChBE,GAAM+jB,EAAK/jB,IAAM,GAAKgJ,GAAO+a,GAC7Bz1B,EAAIs1E,GAAY7/C,GAChBzxB,EAAIhE,EAAEw2C,GACN7hC,EAAI3U,EAAEy2C,GACNlzC,EAAIkyB,EAAKy0C,OAAS,EAEtBoG,EAAK,cAAe8E,GAAU3/C,EAAK9oB,QAAU,SAEzCpJ,GACFqG,EAAI6H,GAAUzN,EAAG2Q,GAAK,IAAMs7C,GAAO1sD,IAC/BiO,GAAME,KAAI9H,GAAK,IAAM6H,GAAUD,EAAIE,KAEvC9H,EAAI6H,GAAUzN,EAAIwN,EAAImD,EAAIjD,GAG5B4+D,EAAK,YAAa1mE,IAkIlB4mE,MAAOA,GACPz0B,KAzFF,SAAcluB,EAASmhD,EAAOhG,GAC5BrxC,GAAMq3C,GAAOv5C,QAEPz1B,EACAgE,EACA2Q,EACAhV,EACA+1E,EACAjQ,EACAl5D,EAPA0+C,EAA0B,MAAhBx1B,EAAKw1B,QAAkB,EAAIx1B,EAAKw1B,aAQ1C+d,IAAWA,EAAOsB,WAAW70C,EAAKuzC,SAC1B,IAAZ/d,GAAiBx1B,EAAKm+C,UAAY,GAAkB,MAAbn+C,EAAK9lB,MAAqC,IAArB8lB,EAAK9lB,KAAKtQ,YACtEwuB,EAAQwmD,KAAOA,GAAK5+C,GACpB5H,EAAQunD,UAAY3/C,EAAK9oB,OAAS,OAElC3I,GADAhE,EAAIs1E,GAAY7/C,IACV+gB,GAAI7hC,EAAI3U,EAAEy2C,GAEZhhB,EAAKy0C,QACPr8C,EAAQ4jD,OACR5jD,EAAQpc,UAAUzN,EAAG2Q,GACrBkZ,EAAQoiC,OAAOx6B,EAAKy0C,MAAQ3I,IAC5Bv9D,EAAI2Q,EAAI,GAGV3Q,GAAKyxB,EAAKjkB,IAAM,EAChBmD,IAAM8gB,EAAK/jB,IAAM,GAAKgJ,GAAO+a,GAC7BgwC,EAAKgP,GAAUh/C,GACf43C,GAAMx/C,EAAS4H,GAEXvzB,EAAQujE,OACViQ,EAAKlB,GAAW/+C,GAEX91B,EAAI,EAAGA,EAAI8lE,EAAGpmE,SAAUM,EAC3B4M,EAAM2nE,GAAUz+C,EAAMgwC,EAAG9lE,IAErB81B,EAAK/d,MAAQA,GAAKmW,EAAS4H,EAAMw1B,IACnCp9B,EAAQ8nD,SAASppE,EAAKvI,EAAG2Q,GAGvB8gB,EAAKg0C,QAAUA,GAAO57C,EAAS4H,EAAMw1B,IACvCp9B,EAAQ+nD,WAAWrpE,EAAKvI,EAAG2Q,GAG7BA,GAAK+gE,OAGPnpE,EAAM2nE,GAAUz+C,EAAMgwC,GAElBhwC,EAAK/d,MAAQA,GAAKmW,EAAS4H,EAAMw1B,IACnCp9B,EAAQ8nD,SAASppE,EAAKvI,EAAG2Q,GAGvB8gB,EAAKg0C,QAAUA,GAAO57C,EAAS4H,EAAMw1B,IACvCp9B,EAAQ+nD,WAAWrpE,EAAKvI,EAAG2Q,GAI3B8gB,EAAKy0C,OAAOr8C,EAAQ6jD,eAiC1BjB,KAAMjB,IA7BR,SAAa3hD,EAAS4H,EAAMzxB,EAAG2Q,EAAG86D,EAAIC,MAChCj6C,EAAKm+C,UAAY,EAAG,OAAO,MAC1Bn+C,EAAKy0C,MAAO,OAAO,MAGpBlqE,EAAIs1E,GAAY7/C,GAChBoxC,EAAK7mE,EAAEw2C,GACPswB,EAAK9mE,EAAEy2C,GACPp2C,EAAImwE,GAAM6E,GAAY5/C,EAAM,GAC5BlyB,GAAKkyB,EAAKy0C,MAAQ3I,GAClB1pB,EAAM5zC,KAAK4zC,IAAIt0C,GACfu0C,EAAM7zC,KAAK6zC,IAAIv0C,GACfm8C,EAAK7H,EAAM43B,EAAK33B,EAAM43B,GAAM7I,EAAKhvB,EAAMgvB,EAAK/uB,EAAMgvB,GAClDnnB,EAAK7H,EAAM23B,EAAK53B,EAAM63B,GAAM5I,EAAKhvB,EAAM+uB,EAAKhvB,EAAMivB,UAC/CzmE,EAAEkqE,SAAS7qB,EAAIC,MAgBtBuwB,MAbF,SAAuBz6C,EAAMw3C,SACrBjtE,EAAIwwE,GAAM6E,GAAY5/C,EAAM,UAC3B23C,GAAiBH,EAAKjtE,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,KAAOotE,GAAiBH,EAAKjtE,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,KAAOotE,GAAiBH,EAAKjtE,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,KAAOotE,GAAiBH,EAAKjtE,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,MA4BpMkmE,MAdUwK,GAAkB,SA/oD9B,SAAiB7iD,EAASq7C,UACjBf,GAAWt6C,QAAQA,EAAnBs6C,CAA4Be,MAw1BrC,SAAmB3lE,EAAGvD,WAEhBwR,EACAE,EAFA/R,EAAI4D,EAAElE,SAKDM,GAAK,OACS,IAAjB4D,EAAE5D,GAAG+6C,UACTlpC,EAAKjO,EAAE5D,GAAGqE,EAAIhE,EAAE,IAENwR,GADVE,EAAKnO,EAAE5D,GAAGgV,EAAI3U,EAAE,IACI0R,GACpBF,EAAKjO,EAAE5D,GAAGoJ,MAAQ,GACJyI,EAAI,OAAOjO,EAAE5D,UAGtB,SAwzBT,SAASk2E,GAAWpgD,EAAM2B,EAAM32B,OAC1BkQ,EAAO8kE,GAAMhgD,EAAKszC,KAAKgJ,UACvBvB,EAAQp5C,GAAQzmB,EAAK6/D,aACrB7/D,EAAKy/D,SAAQ36C,EAAOA,EAAKszC,MACtByH,EAAM/6C,EAAKuzC,SAAWvzC,EAAKuzC,OAAS,IAAIJ,IAAWnzC,EAAMh1B,GAGlE,IAAIq1E,GAAQ,CACV/M,KAAM,MAER,SAASgN,GAAWhN,EAAMC,EAAQvoE,OAK5Bd,EACAM,EACAw1B,EACAp1B,EAPAsQ,EAAO8kE,GAAM1M,EAAKgJ,UAClBvB,EAAQ7/D,EAAK6/D,MACbtH,EAAQH,EAAKG,MACb8M,EAAW9M,GAASA,EAAM7pE,UAM1BsR,EAAKy/D,cACH4F,EACFvgD,EAAOyzC,EAAM,IAGb4M,GAAM/M,KAAOA,EACbtzC,EAAOqgD,IAGTz1E,EAAIw1E,GAAUpgD,EAAM+6C,EAAO/vE,GAC3BuoE,EAASA,GAAUA,EAAOH,MAAMxoE,IAAMA,KAIxC2oE,EAASA,GAAUD,EAAKC,QAAUD,EAAKC,OAAO5/D,SAAW,IAAIw/D,GAEzDoN,MACGr2E,EAAI,EAAGM,EAAIipE,EAAM7pE,OAAQM,EAAIM,IAAKN,EACrCqpE,EAAOH,MAAMgN,GAAU3M,EAAMvpE,GAAI6wE,EAAO/vE,WAIrCsoE,EAAKC,OAASA,EAGvB,MAAM5hE,GAAO,CAAC,WAAY,OAAQ,OAAQ,cAAe,OAAQ,QAAS,SAAU,IAAK,IAAK,QAAS,SAAU,QAAS,WAC1H,OAAQ,cAAe,UAAW,QAClC,SAAU,gBAAiB,cAAe,YAC1C,aAAc,mBACd,mBAAoB,eACpB,aAAc,WAAY,cAAe,cACzC,eAAgB,WAChB,sBAAuB,uBACvB,yBAA0B,0BAA2B,cAAe,UAAW,SAAU,UACzF,MAAO,SAAU,SACjB,OAAQ,SAAU,SAClB,KAAM,KACN,OAAQ,QACR,OAAQ,QAAS,QAAS,SAAU,MAAO,KAAM,KACjD,WAAY,QAAS,YAAa,aAAc,OAAQ,WAAY,aAAc,YAAa,cAC/F,cAAe,OAAQ,WAAY,uBAEnC,SAAS6uE,GAAYjH,EAAOkH,UACnBppE,KAAKC,UAAUiiE,EAAO5nE,GAAM8uE,GAErC,SAASC,GAAcpmD,UAEdqmD,GADuB,iBAATrmD,EAAoBjjB,KAAKI,MAAM6iB,GAAQA,GAI9D,SAASqmD,GAAWpH,OAGdhlE,EACArK,EACAM,EAJA0Q,EAAOq+D,EAAM+C,SACb7I,EAAQ8F,EAAM9F,SAKdA,MACGvpE,EAAI,EAAGM,EAAIipE,EAAM7pE,OAAQM,EAAIM,IAAKN,EACrCqK,EAAS2G,EAAO,OAAS,QACzBu4D,EAAMvpE,GAAGqK,GAAUglE,EACf9F,EAAMvpE,GAAGmvE,SAAQ5F,EAAMvpE,GAAGqK,GAAQilE,QAAS,GAC3C,WAAat+D,GAAQ3G,IAASosE,GAAWlN,EAAMvpE,WAInDgR,GAAMolE,GAAU/G,GACbA,EAGT,SAASqH,GAAWrH,GACdntE,UAAUxC,YACP0sC,KAAOoqC,GAAcnH,SAErBjjC,KAAOuqC,GAAW,CACrBvE,SAAU,QACVhzE,KAAM,OACNw3E,KAAM,eAEHxqC,KAAKm9B,MAAQ,CAAC,IAAID,GAAUnnE,KAAKiqC,QAkB1C,SAASuqC,GAAWnpC,EAAK10B,SACjBswD,EAAO,CACXC,OAAQ,IAAIJ,GACZH,OAAQt7B,EAAIs7B,KACZhwD,MAAOA,EACPq5D,aAAiC,IAApB3kC,EAAI2kC,YACjB5I,MAAO,GACP6I,SAAU5kC,EAAI4kC,SACdhzE,KAAMouC,EAAIpuC,WAAQkK,EAClBstE,KAAMppC,EAAIopC,WAAQttE,EAClB6lE,OAAQ3hC,EAAI2hC,QAAU,UAGR,MAAZ3hC,EAAIqpC,OACNzN,EAAKyN,KAAOrpC,EAAIqpC,MAGdrpC,EAAIspC,cACN1N,EAAK0N,YAActpC,EAAIspC,aAGlB1N,EAIT,SAAS2N,GAAUC,EAAKxG,EAAKyG,UACtBD,GAA2B,oBAAb16C,UAA4BA,SAASqjB,gBACtDq3B,EAAM16C,UAGD06C,EAAMC,EAAKD,EAAIvlB,gBAAgBwlB,EAAIzG,GAAOwG,EAAIr3B,cAAc6wB,GAAO,KAG5E,SAAS0G,GAAQC,EAAI3G,GACnBA,EAAMA,EAAI32D,sBACNmgB,EAAQm9C,EAAGC,WACXp3E,EAAI,EACJM,EAAI05B,EAAMt6B,OAEPM,EAAIM,IAAKN,EAAG,GAAIg6B,EAAMh6B,GAAGq3E,QAAQx9D,gBAAkB22D,SACjDx2C,EAAMh6B,GAKjB,SAASs3E,GAASH,EAAI9gE,EAAOm6D,EAAKyG,OAE5Bv2E,EADAkD,EAAIuzE,EAAGC,WAAW/gE,UAGjBzS,GAAKA,EAAEyzE,QAAQx9D,gBAAkB22D,EAAI32D,gBACxCnZ,EAAIkD,GAAK,KACTA,EAAImzE,GAAUI,EAAGI,cAAe/G,EAAKyG,GACrCE,EAAGK,aAAa5zE,EAAGlD,IAGdkD,EAGT,SAAS6zE,GAASN,EAAI9gE,WAChB2jB,EAAQm9C,EAAGC,WACXrrE,EAAOiuB,EAAMt6B,OAEVqM,EAAOsK,GAAO8gE,EAAGO,YAAY19C,IAAQjuB,WAErCorE,EAGT,SAASQ,GAASvO,SACT,QAAUA,EAAKgJ,UAAYhJ,EAAKwN,KAAO,SAAWxN,EAAKwN,KAAO,KAAOxN,EAAKhqE,KAAO,IAAMgqE,EAAKhqE,KAAO,IAG5G,SAASiT,GAAOulE,EAAOT,SACf9+B,EAAO8+B,EAAGU,8BACT,CAACD,EAAME,QAAUz/B,EAAKvuC,MAAQqtE,EAAGY,YAAc,GAAIH,EAAMI,QAAU3/B,EAAK4/B,KAAOd,EAAGe,WAAa,IAkCxG,SAASC,GAAQ1O,EAAc2O,QACxBC,QAAU,UACVC,UAAY,QACZ19C,QAAU6uC,GAAgB93C,UAC1B4mD,SAAWH,GAAiBI,GAInC,SAASA,GAAetwE,EAAS0vE,EAAO9hD,EAAMtyB,GAC5C0E,EAAQuwE,UAAU/mB,aAAa,QAASluD,GAAS,IA8MnD,SAASk1E,GAAS/mD,QACXgnD,IAAM,UACNC,SAAW,UACXh+C,QAAU,IAAI4uC,GAAe73C,GApVpC+kD,GAAW/tE,UAAY,CACrBkwE,OAAOtC,UACED,GAAYn0E,KAAKiqC,KAAMmqC,GAAU,IAG1CnN,KAAK0P,EAAShgE,EAAOzC,SAEb+yD,EAAOuN,GAAWmC,EADxBhgE,EAAQA,GAAS3W,KAAKiqC,KAAKm9B,MAAM,WAEjCzwD,EAAMywD,MAAMlzD,GAAS+yD,EACjBA,EAAK+F,SAAQ/F,EAAKtwD,MAAMw2D,QAAS,GAC9BlG,IA4HX+O,GAAQxvE,UAAY,CAUlB8tE,WAAWU,EAAI4B,EAAQj5E,eAChB64E,IAAMxB,OACN6B,KAAOl5E,GAAO,KACZqC,KAAK42E,OAAOA,IAOrBN,iBACSt2E,KAAKw2E,KAQd1L,gBACS9qE,KAAKw2E,KAAOx2E,KAAKw2E,IAAIM,YAM9BF,OAAOA,UACD72E,UAAUxC,aACPw5E,QAAUH,GAAU,CAAC,EAAG,GACtB52E,MAEAA,KAAK+2E,QAAQr3E,SAOxBwtE,MAAMA,UACCntE,UAAUxC,aACVy5E,OAAS9J,EACPltE,MAFuBA,KAAKg3E,QAQrC18C,OAOA60C,QAWA8H,cAAct7C,EAAG9sB,EAAM9I,OAChB,IAAIlI,EAAI89B,EAAIA,EAAEp+B,OAAS,IAAKM,GAAK,MAChC89B,EAAE99B,GAAGgR,OAASA,KAAU9I,GAAW41B,EAAE99B,GAAGkI,UAAYA,UAC/ClI,SAIH,GAWVq5E,SAASroE,SACD8sB,EAAI37B,KAAKm2E,UACT10E,EAAI,MAENoN,EACFpN,EAAEhD,QAAQk9B,EAAE37B,KAAKm3E,UAAUtoE,cAEtB,MAAMtN,KAAKo6B,EACdl6B,EAAEhD,QAAQk9B,EAAEp6B,WAITE,GAST01E,UAAUl6E,SACFY,EAAIZ,EAAKkY,QAAQ,YAChBtX,EAAI,EAAIZ,EAAOA,EAAKyC,MAAM,EAAG7B,IAStCu5E,WAAW3B,EAAO9hD,EAAM7I,QACjB2N,QAAQ7N,SAASE,EAAM,CAC1BiB,QAAS,SACR2O,MAAK/7B,UACAsH,EAAI,IAAIoxE,WAAW5B,EAAM5mE,KAAM4mE,GAC/Bh0E,EAAImzE,GAAU,KAAM,SAErB,MAAM33E,KAAQ0B,EAAK8C,EAAE8tD,aAAatyD,EAAM0B,EAAI1B,IAEjDwE,EAAE61E,cAAcrxE,MACf0iE,OAAM,UAYX4O,cAAc9B,EAAO9hD,EAAM6jD,MACrB7jD,GAAwB,MAAhBA,EAAK8jD,QAAiB,CAChC9jD,EAhMN,SAAsBA,EAAM8hD,EAAOT,EAAI4B,OAEjCc,EACAx5E,EAFA+oE,EAAOtzC,GAAQA,EAAKszC,QAIpBA,IAASyQ,EAAO/D,GAAM1M,EAAKgJ,WAAWpB,IAAK,MAC7C3wE,EAAIgS,GAAMulE,EAAOT,IACf,IAAM4B,EAAO,GACf14E,EAAE,IAAM04E,EAAO,GAERjjD,EAAOA,EAAKszC,KAAKtwD,OACtBzY,EAAE,IAAMy1B,EAAKzxB,GAAK,EAClBhE,EAAE,IAAMy1B,EAAK9gB,GAAK,EAGpB8gB,EAAO+jD,EAAK7I,IAAI5H,EAAKG,MAAOlpE,UAGvBy1B,EA8KIgkD,CAAYhkD,EAAM8hD,EAAOz1E,KAAK8qE,SAAU9qE,KAAK+2E,eAC9C11E,EAAQm2E,GAAQ7jD,GAAQA,EAAK8jD,SAAW,UAEzCrB,SAASz2E,KAAKK,KAAK62E,KAAM72E,KAAMy1E,EAAO9hD,EAAMtyB,KAYrDu2E,0BAA0BjkD,SAClBqhD,EAAKh1E,KAAK8qE,aACXkK,EAAI,aACH9+B,EAAO8+B,EAAGU,wBACVkB,EAAS52E,KAAK+2E,QACd7P,EAASvzC,EAAKuzC,OACd16D,EAAQ06D,EAAO16D,QACfkxC,EAASwpB,EAAOxpB,aAClBx7C,EAAIglE,EAAOxyB,GAAKkiC,EAAO,GAAK1gC,EAAKvuC,KACjCkL,EAAIq0D,EAAOvyB,GAAKiiC,EAAO,GAAK1gC,EAAK4/B,SAE9BniD,EAAKszC,OAAStzC,EAAOA,EAAKszC,KAAKtwD,QACpCzU,GAAKyxB,EAAKzxB,GAAK,EACf2Q,GAAK8gB,EAAK9gB,GAAK,QAIV,CACL3Q,EAAAA,EACA2Q,EAAAA,EACArG,MAAAA,EACAkxC,OAAAA,EACA/1C,KAAMzF,EACN4zE,IAAKjjE,EACLjL,MAAO1F,EAAIsK,EACXqrE,OAAQhlE,EAAI6qC,KAmBlB64B,GAAS/vE,UAAY,CAYnB8tE,WAAWU,EAAIxoE,EAAOkxC,EAAQk5B,EAAQkB,eAC/BtB,IAAMxB,EACJh1E,KAAK+3E,OAAOvrE,EAAOkxC,EAAQk5B,EAAQkB,IAO5CxB,iBACSt2E,KAAKw2E,KAQd1L,gBACS9qE,KAAKw2E,KAAOx2E,KAAKw2E,IAAIM,YAM9B1G,WAAW4H,UACgB,IAArBj4E,UAAUxC,OAAqByC,KAAKy2E,eACnCA,SAAWuB,EACTh4E,OAaT+3E,OAAOvrE,EAAOkxC,EAAQk5B,EAAQkB,eACvBG,OAASzrE,OACT0rE,QAAUx6B,OACVq5B,QAAUH,GAAU,CAAC,EAAG,QACxBuB,OAASL,GAAe,EACtB93E,MASTo4E,UAcAC,OAAOnL,SACCjsE,EAAIjB,YAGViB,EAAEq3E,MAAQ,WACRr3E,EAAEs3E,QAAQrL,IAIZjsE,EAAEq3E,QAIFr3E,EAAEq3E,MAAQ,KACHr3E,GAQTs3E,YAaAC,YAAYtL,SACJjsE,EAAIjB,KAAKq4E,OAAOnL,UACfltE,KAAKy4E,OAASz4E,KAAKy4E,OAAO/9C,MAAK,IAAMz5B,IAAKmrB,QAAQ0Z,QAAQ7kC,IAWnEy3E,MAAMr5E,EAAQqrB,OACRzpB,EAAIjB,KACJ9B,EAAI+C,EAAEw3B,QAAQp5B,GAAQqrB,OAErBzpB,EAAEw3E,OAAQ,OAEP94E,EAAOsB,EAAEq3E,MACfr3E,EAAEw3E,OAASx3E,EAAEw3B,QAAQwrC,QAAQvpC,MAAKi+C,IAC5BA,GAAQh5E,IACZsB,EAAEw3E,OAAS,eAIRv6E,GAUTwqE,YAAYh+C,UACH1qB,KAAK04E,MAAM,cAAehuD,IAUnCk+C,UAAUl+C,UACD1qB,KAAK04E,MAAM,YAAahuD,KAKnC,MAGMkuD,GAAiB,YACjBC,GAAiB,YACjBC,GAAgB,WAChBC,GAAiB,YAEjBC,GAAiB,YACjBC,GAAgB,WAChBC,GAAiB,YACjBC,GAAa,QAGbC,GAAkB,aAClBC,GAAkB,aAClBC,GAAiB,YACjBC,GAAgB,WAEhBC,GAAmBR,GACnBS,GAAmBR,GACnBS,GAAYP,GAElB,SAASQ,GAAcnqD,EAAQioD,GAC7BzB,GAAQr2E,KAAKK,KAAMwvB,EAAQioD,QACtBmC,MAAQ,UACRC,OAAS,UACTC,QAAS,OACTC,QAAU,GAMjB,SAASC,GAAmBj0E,EAAS8I,GAHjBA,CAAAA,GAAQA,IAASwqE,IAAmBxqE,IAASyqE,IAAkBzqE,IAAS0qE,GAAgB,CAACF,GAAiBC,GAAgBC,IAAiB,CAAC1qE,GAI9JorE,CAAYprE,GAAMjN,SAAQ7C,GAG5B,SAA0BgH,EAAS8I,SAC3Bi8D,EAAS/kE,EAAQ+kE,SAEnBA,IAAW/kE,EAAQg0E,QAAQlrE,KAC7B9I,EAAQg0E,QAAQlrE,GAAQ,EACxBi8D,EAAOzwC,iBAAiBxrB,EAAM9I,EAAQ8I,GAAQ4lB,GAAO1uB,EAAQ8I,GAAM4lB,GAAOA,GAAO1uB,EAAQm0E,KAAKrrE,EAAM4lB,KARvE4F,CAAiBt0B,EAAShH,KAY3D,SAASo7E,GAAKC,EAAWC,EAAWC,UAC3B,SAAU7lD,SACThzB,EAAIzB,KAAKk2E,QACTh4E,EAAI8B,KAAKu6E,UAAU9lD,GAErBv2B,IAAMuD,IAKHA,GAAMA,EAAE+4E,WAGNN,KAAKI,EAAU7lD,QAGjByhD,QAAUh4E,OAEVg8E,KAAKG,EAAW5lD,SAXhBylD,KAAKE,EAAW3lD,IAkB3B,SAASgmD,GAAS5rE,UACT,SAAU4lB,QACVylD,KAAKrrE,EAAM4lB,QACXyhD,QAAU,MAInBluE,GAAS2xE,GAAe3D,GAAS,CAC/B1B,WAAWU,EAAI4B,EAAQj5E,eAChB+8E,QAAU1F,GAAMD,GAAQC,EAAI,WAEhCmE,GAAYJ,GAAgBC,GAAgBC,GAAeJ,IAAgBj3E,SAAQiN,GAAQmrE,GAAmBh6E,KAAM6O,KAC9GmnE,GAAQxvE,UAAU8tE,WAAW30E,KAAKK,KAAMg1E,EAAI4B,EAAQj5E,IAI7DmtE,gBACS9qE,KAAK06E,SAId3uD,iBACS/rB,KAAK06E,QAAQj9B,WAAW,OAIjCk9B,OAhFa,CAlBM,UACC,WACH,QAgBsC/B,GAAgBC,GAAgBC,GAAeC,GAXnF,UAWiHC,GAAgBC,GAAeC,GAAgBC,GAN5J,WACN,QAK4MC,GAAiBC,GAAiBC,GAAgBC,IAmF/QqB,eAAenmD,QACRylD,KAAKd,GAAiB3kD,IAG7BomD,UAAWV,GAAKnB,GAAgBE,GAAgBD,IAChD6B,SAAUX,GAAKrB,GAAeF,GAAgBC,IAC9CkC,SAAUN,GAASxB,IACnB+B,UAAWP,GAAS5B,IAEpBoC,UAAUxmD,QACHmlD,MAAQ55E,KAAKk2E,aACbgE,KAAKnB,GAAgBtkD,IAG5BymD,MAAMzmD,GACAz0B,KAAK45E,QAAU55E,KAAKk2E,eACjBgE,KAAKf,GAAY1kD,QACjBmlD,MAAQ,OAIjBuB,WAAW1mD,QACJolD,OAAS75E,KAAKu6E,UAAU9lD,EAAI2mD,eAAe,IAE5Cp7E,KAAK85E,cACF5D,QAAUl2E,KAAK65E,YACfC,QAAS,QAGXI,KAAKb,GAAiB5kD,GAAK,IAGlC4mD,UAAU5mD,QACHylD,KAAKZ,GAAgB7kD,GAAK,IAGjC6mD,SAAS7mD,QACFylD,KAAKX,GAAe9kD,GAAK,QACzBolD,OAAS,MAIhBK,KAAKrrE,EAAM4lB,EAAKc,SACR9zB,EAAI8zB,EAAQv1B,KAAK65E,OAAS75E,KAAKk2E,QAC/Bv6C,EAAI37B,KAAKm2E,UAAUtnE,MAEzB4lB,EAAI8mD,SAAW1sE,EAEXA,IAAS6qE,IAAaj4E,GAAKA,EAAEqpB,UAC1BssD,WAAW3iD,EAAKhzB,EAAGA,EAAEqpB,MACjBjc,IAAS2qE,IAAoB3qE,IAAS4qE,SAC1ClC,cAAc9iD,EAAKhzB,EAAGoN,IAAS4qE,IAIlC99C,MACG,IAAI99B,EAAI,EAAGD,EAAM+9B,EAAEp+B,OAAQM,EAAID,IAAOC,EACzC89B,EAAE99B,GAAGkI,QAAQpG,KAAKK,KAAK62E,KAAMpiD,EAAKhzB,IAMxC64B,GAAGzrB,EAAM9I,SACD9I,EAAO+C,KAAKm3E,UAAUtoE,GACtB8sB,EAAI37B,KAAKm2E,iBACLn2E,KAAKi3E,cAAct7C,EAAE1+B,GAAO4R,EAAM9I,GAEpC,IACNi0E,GAAmBh6E,KAAM6O,IACxB8sB,EAAE1+B,KAAU0+B,EAAE1+B,GAAQ,KAAKwB,KAAK,CAC/BoQ,KAAMA,EACN9I,QAASA,KAIN/F,MAITmvE,IAAItgE,EAAM9I,SACF9I,EAAO+C,KAAKm3E,UAAUtoE,GACtB8sB,EAAI37B,KAAKm2E,UAAUl5E,GACnBY,EAAImC,KAAKi3E,cAAct7C,EAAG9sB,EAAM9I,UAElClI,GAAK,GACP89B,EAAE5L,OAAOlyB,EAAG,GAGPmC,MAGTu6E,UAAU9lD,SACFv2B,EAAIgS,GAAMukB,EAAKz0B,KAAK06E,SACpBl5E,EAAIxB,KAAK+2E,eACR/2E,KAAK2uE,KAAK3uE,KAAKg3E,OAAQ94E,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAKsD,EAAE,GAAItD,EAAE,GAAKsD,EAAE,KAMlEmtE,KAAKzB,EAAOhrE,EAAG2Q,EAAG86D,EAAIC,SACd98D,EAAI9Q,KAAK+rB,iBACF4nD,GAAMzG,EAAM+C,UACbtB,KAAKhvE,KAAKK,KAAM8Q,EAAGo8D,EAAOhrE,EAAG2Q,EAAG86D,EAAIC,MASpD,IAAIC,GAHuB,oBAAX2N,QAAyBA,OAAOC,kBAAwB,EAyBxE,SAASC,GAAelsD,GACtB+mD,GAAS52E,KAAKK,KAAMwvB,QACfmsD,SAAW,QACXC,SAAU,OACVC,OAAS,IAAI/U,QACbgV,OAAS,IAAIhV,GAEpB,MAAMiV,GAASxF,GAAS/vE,UAuHxB,SAASw1E,GAAWxsD,EAAQioD,GAC1BzB,GAAQr2E,KAAKK,KAAMwvB,EAAQioD,SACrB97C,EAAI37B,KACV27B,EAAEsgD,aAAeC,GAASvgD,GAAG,CAAClH,EAAKd,KAC7BA,GAAQA,EAAK7I,MAAM6Q,EAAEy7C,WAAW3iD,EAAKd,EAAMA,EAAK7I,SAEtD6Q,EAAEwgD,gBAAkBD,GAASvgD,GAAG,CAAClH,EAAKd,KACpCgI,EAAE47C,cAAc9iD,EAAKd,EAAMc,EAAI5lB,OAAS4qE,OAzG5CzxE,GAAS0zE,GAAgBnF,GAAU,CACjCjC,WAAWU,EAAIxoE,EAAOkxC,EAAQk5B,EAAQkB,EAAantD,eAC5CgxD,SAAWhxD,GAAW,QACtB+vD,QAAU16E,KAAK27E,SAASS,gBAAkB,KAAOtR,GAAO,EAAG,EAAG9qE,KAAK27E,SAAS9sE,MAE7EmmE,GAAMh1E,KAAK06E,UACbpF,GAASN,EAAI,GAAGqH,YAAYr8E,KAAK06E,cAE5BA,QAAQnrB,aAAa,QAAS,UAI9BwsB,GAAOzH,WAAW30E,KAAKK,KAAMg1E,EAAIxoE,EAAOkxC,EAAQk5B,EAAQkB,IAGjEC,OAAOvrE,EAAOkxC,EAAQk5B,EAAQkB,MAC5BiE,GAAOhE,OAAOp4E,KAAKK,KAAMwM,EAAOkxC,EAAQk5B,EAAQkB,GAE5C93E,KAAK06E,SAnEb,SAAiB5P,EAAQt+D,EAAOkxC,EAAQk5B,EAAQkB,EAAan5E,SACrD29E,EAA+B,oBAAhBC,aAA+BzR,aAAkByR,aAAoC,MAArBzR,EAAO0R,WACtFzwD,EAAU++C,EAAOrtB,WAAW,MAC5Bg/B,EAAQH,EAAQzO,GAAaiK,EACnChN,EAAOt+D,MAAQA,EAAQiwE,EACvB3R,EAAOptB,OAASA,EAAS++B,MAEpB,MAAMh8E,KAAO9B,EAChBotB,EAAQtrB,GAAO9B,EAAI8B,GAGjB67E,GAAmB,IAAVG,IACX3R,EAAO4R,MAAMlwE,MAAQA,EAAQ,KAC7Bs+D,EAAO4R,MAAMh/B,OAASA,EAAS,MAGjC3xB,EAAQ8hD,WAAa4O,EACrB1wD,EAAQ4wD,aAAaF,EAAO,EAAG,EAAGA,EAAOA,EAAQ7F,EAAO,GAAI6F,EAAQ7F,EAAO,IAoDvEmB,CAAO/3E,KAAK06E,QAAS16E,KAAKi4E,OAAQj4E,KAAKk4E,QAASl4E,KAAK+2E,QAAS/2E,KAAKm4E,OAAQn4E,KAAK27E,SAAS5vD,aACpF,OAEC6wD,EAAM58E,KAAK27E,SAASS,gBACrBQ,GAAK9+E,EAAM,uDAChB8+E,EAAIj5E,MAAM3D,KAAKm4E,OAAQn4E,KAAKm4E,QAC5ByE,EAAIjtE,UAAU3P,KAAK+2E,QAAQ,GAAI/2E,KAAK+2E,QAAQ,gBAGzC6E,SAAU,EACR57E,MAGT8qE,gBACS9qE,KAAK06E,SAGd3uD,iBACS/rB,KAAK27E,SAASS,kBAAoBp8E,KAAK06E,QAAU16E,KAAK06E,QAAQj9B,WAAW,MAAQ,OAG1F26B,MAAMzkD,SACEp1B,EAAIyB,KAAK87E,OAAOx0E,QAAQy/D,MAAMpzC,EAAKuzC,YAErCp2D,EAAI6iB,EAAKszC,KAAKtwD,WAEX7F,GACLvS,EAAEoR,UAAUmB,EAAE5O,GAAK,EAAG4O,EAAE+B,GAAK,GAC7B/B,EAAIA,EAAEm2D,KAAKtwD,WAGRklE,OAAO9U,MAAMxoE,IAGpBg6E,QAAQrL,SACAp8D,EAAI9Q,KAAK+rB,UACTvqB,EAAIxB,KAAK+2E,QACTn4D,EAAI5e,KAAKi4E,OACTt8C,EAAI37B,KAAKk4E,QACT2E,EAAK78E,KAAK67E,OACViB,EA/ES,EAAClG,EAAQpqE,EAAOkxC,KAAW,IAAIopB,IAAS1/D,IAAI,EAAG,EAAGoF,EAAOkxC,GAAQ/tC,WAAWinE,EAAO,IAAKA,EAAO,IA+EnGmG,CAAWv7E,EAAGod,EAAG+c,GAE5B7qB,EAAE6+D,aACIpxE,EAAIyB,KAAK47E,SAAWiB,EAAG31E,SAAWlH,KAAK47E,SAAU,EAAOkB,EAAG/U,OAAO,IAhF5E,SAAsBj3D,EAAGvS,EAAGq4E,UAE1Br4E,EAAEwpE,OAAO,GAAGt0D,QAER3C,EAAE+8D,WAAa,GACjBtvE,EAAEoF,MAAMmN,EAAE+8D,YAAYp6D,QAAQ9P,MAAM,EAAImN,EAAE+8D,YAI5CtvE,EAAEoR,WAAYinE,EAAO,GAAK,GAAMA,EAAO,GAAK,GAE5C9lE,EAAE6wD,YACF7wD,EAAEolC,KAAK33C,EAAEm2C,GAAIn2C,EAAEo2C,GAAIp2C,EAAEiO,QAASjO,EAAEm/C,UAChC5sC,EAAE61D,OACKpoE,EAkEyEy+E,CAAalsE,EAAGgsE,EAAG/lC,UAAU8lC,GAAKr7E,eAC3G8F,OAAO9F,EAAE,IAAKA,EAAE,GAAIod,EAAG+c,QAEvBse,KAAKnpC,EAAGo8D,EAAO3uE,GAEpBuS,EAAE8+D,UACFiN,EAAGv1E,QACItH,MAGTi6C,KAAK2iC,EAAK1P,EAAOhG,SACTD,EAAO0M,GAAMzG,EAAM+C,UACrB/C,EAAMvG,MAzrDd,SAAe56C,EAASmhD,OAClBvG,EAAOuG,EAAMvG,KACjB56C,EAAQ4jD,OAEJ7qE,EAAW6hE,IACb56C,EAAQ41C,YACRgF,EAAK56C,GACLA,EAAQ46C,QAERoI,GAAUhjD,EAASmhD,EAAMv2D,OAgrDTgwD,CAAKiW,EAAK1P,GAC1BjG,EAAKhtB,KAAKt6C,KAAKK,KAAM48E,EAAK1P,EAAOhG,GAC7BgG,EAAMvG,MAAMiW,EAAIhN,WAGtBtoE,MAAMpF,EAAG2Q,EAAG+L,EAAG+c,SACPh9B,EAAMqB,KAAK27E,SACX7qE,EAAI9Q,KAAK+rB,UAEE,QAAbptB,EAAIkQ,MAAmBlQ,EAAIy9E,iBAG7BtrE,EAAEmsE,UAAU/6E,EAAG2Q,EAAG+L,EAAG+c,GAGF,MAAjB37B,KAAKy2E,WACP3lE,EAAEg7D,UAAY9rE,KAAKy2E,SACnB3lE,EAAEk7D,SAAS9pE,EAAG2Q,EAAG+L,EAAG+c,OAiB1B,MAAMugD,GAAW,CAACnwD,EAAShmB,IAAY0uB,QACjCd,EAAOc,EAAIzT,OAAOk8D,SACtBvpD,EAAOtzB,MAAMD,QAAQuzB,GAAQA,EAAK,GAAKA,EACvCc,EAAI8mD,SAAW9mD,EAAI5lB,KACnB9I,EAAQpG,KAAKosB,EAAQ8qD,KAAMpiD,EAAKd,IAGlC3rB,GAASg0E,GAAYhG,GAAS,CAC5B1B,WAAWU,EAAI4B,EAAQj5E,OACjBw/E,EAAMn9E,KAAKo9E,YAEXD,IACFA,EAAIE,oBAAoB3D,GAAW15E,KAAKi8E,cACxCkB,EAAIE,oBAAoB7D,GAAkBx5E,KAAKm8E,iBAC/CgB,EAAIE,oBAAoB5D,GAAkBz5E,KAAKm8E,uBAG5CiB,KAAOD,EAAMnI,GAAMD,GAAQC,EAAI,OAEhCmI,IACFA,EAAI9iD,iBAAiBq/C,GAAW15E,KAAKi8E,cACrCkB,EAAI9iD,iBAAiBm/C,GAAkBx5E,KAAKm8E,iBAC5CgB,EAAI9iD,iBAAiBo/C,GAAkBz5E,KAAKm8E,kBAGvCnG,GAAQxvE,UAAU8tE,WAAW30E,KAAKK,KAAMg1E,EAAI4B,EAAQj5E,IAG7DmtE,gBACS9qE,KAAKo9E,MAId9iD,GAAGzrB,EAAM9I,SACD9I,EAAO+C,KAAKm3E,UAAUtoE,GACtB8sB,EAAI37B,KAAKm2E,aACLn2E,KAAKi3E,cAAct7C,EAAE1+B,GAAO4R,EAAM9I,GAEpC,EAAG,OACH7D,EAAI,CACR2M,KAAAA,EACA9I,QAAAA,EACAm2E,SAAUA,GAASl8E,KAAM+F,KAE1B41B,EAAE1+B,KAAU0+B,EAAE1+B,GAAQ,KAAKwB,KAAKyD,GAE7BlC,KAAKo9E,WACFA,KAAK/iD,iBAAiBp9B,EAAMiF,EAAEg6E,iBAIhCl8E,MAITmvE,IAAItgE,EAAM9I,SACF9I,EAAO+C,KAAKm3E,UAAUtoE,GACtB8sB,EAAI37B,KAAKm2E,UAAUl5E,GACnBY,EAAImC,KAAKi3E,cAAct7C,EAAG9sB,EAAM9I,UAElClI,GAAK,IACHmC,KAAKo9E,WACFA,KAAKC,oBAAoBpgF,EAAM0+B,EAAE99B,GAAGq+E,UAG3CvgD,EAAE5L,OAAOlyB,EAAG,IAGPmC,QAKX,MAAMs9E,GAAc,cACdC,GAAa,aACbC,GAAY,OACZC,GAAuB,uBACvBC,GAAkB,kBAClBC,GAAkB,kBAElBxiC,GAAS,CAACs5B,EAAMmJ,EAAUC,OAC7BL,IAAY/I,GACZgJ,IAAuBG,GACvBL,IAAaM,QAAS12E,IAKnB22E,GAAavyE,GAAM,CAAC,cAAe,YAAa,aAAc,YAAa,aAAc,cAAe,eAAgB,kBAAmB,eAAgB,eAAgB,gBAAiB,UAE5LwyE,GAAa,MACT,CACNC,KAAM,OACNC,QA+DJ,SAAqBtqD,SACbxE,EAAQwE,EAAKxE,MACb2/C,EAASn7C,EAAKm7C,OACdoP,EAAQ/uD,EAAM+uD,MAAQC,GAAaxqD,GAAQ,KAC3CipD,EAAMjpD,EAAK5H,QACXpoB,EAAQi5E,EAAI1mB,OAAO/mC,EAAMxrB,OAAOtC,MAChCiV,EAASsmE,EAAI3nD,SAAS3e,SACtBzH,EAAOlL,EAAMkL,YACG,SAAXigE,GAAgC,UAAXA,EAAqB,IAAM,KACnD,SAAeoP,EAAS,YAAWA,KAAW,IAAO,UAASznB,GAAW5nD,GAAQ,WAAaA,UAAgB,SAAQ+uD,GAActnD,EAAQ3S,EAAOgwB,cAtEjJ,CACRqqD,KAAM,SACNC,QAuEJ,SAAuBtqD,SACfxE,EAAQwE,EAAKxE,MACb+uD,EAAQ/uD,EAAM+uD,MAAQC,GAAaxqD,GAAQ,KAC3C9kB,EAAQ,GAAEsgB,EAAMtgB,MAAQ,YAAYmH,OACpCkgD,EAAS/mC,EAAM+mC,OACfkoB,EAAQ79E,OAAO+E,KAAK4wD,GACpB0mB,EAAMjpD,EAAK5H,QACXpoB,EAAQi5E,EAAI1mB,OAAOA,EAAOkoB,EAAM,KAAK/8E,MACrCiV,EAASsmE,EAAI3nD,SAAS3e,gBAiBV9X,EAhBAqQ,GAiBXrQ,EAAEjB,OAASiB,EAAE,GAAG6X,cAAgB7X,EAAEkB,MAAM,GAAKlB,IAjBzB0/E,EAAS,YAAWA,KAAW,IAAO,QAWnE,SAAwBE,UACtBA,EAAQA,EAAM18E,KAAIxD,GAAKA,GAAW,SAANA,GAAsB,WAANA,EAAiB,SAAW,OAC3DX,OAAS,EAAI6gF,EAAM,GAAKA,EAAM1+E,MAAM,GAAI,GAAGwM,KAAK,MAAQ,QAAUrK,EAAKu8E,GAbZC,CAAeD,KAAY,SAAQxgB,GAActnD,EAAQ3S,EAAOgwB,KAgB1I,IAAoBn1B,iBA9FJ,CACZw/E,KAAM,QACNC,QAAStqD,GAAS,eAAc2qD,GAAa3qD,wBAE7B,CAChBqqD,KAAM,WACNC,QAAStqD,GAAS,kBAAiB2qD,GAAa3qD,QAI9C4qD,GAAa,CACjBC,SAAUhB,GACViB,oBAAqBhB,GACrB9I,YAAa4I,IAEf,SAASmB,GAAmBlQ,EAAM76C,SAC1BgrD,GAAqB,IAAdhrD,EAAK+gD,QAClBlG,EAAK8O,GAAaqB,QAAQx3E,GAEtBw3E,GAA4B,MAApBhrD,EAAKghD,gBACV,MAAMzmD,KAAQqwD,GACjB/P,EAAK+P,GAAWrwD,QAAO/mB,OAEpB,OACC0H,EAAO8kB,EAAKszC,KAAKgJ,SACvBzB,EAAK+O,GAAY5pD,EAAKghD,aACtBnG,EAAKgP,GAAW7pD,EAAK6qD,WAAsB,UAAT3vE,EAAmB6uE,GAAkBC,KACvEnP,EAAKiP,GAAsB9pD,EAAK8qD,qBAAwB,GAAE5vE,WAG9D,SAAS+vE,GAAmB3X,UACL,IAAdA,EAAKyN,KAAiB,EAC1B4I,KAAc,GACbQ,GAAW7W,EAAKwN,MAAQ,KAAOsJ,GAAW9W,EAAKwN,MASrD,SAAmBxN,EAAMtoE,aAEfg1B,EAAOszC,EAAKG,MAAM,GAClB6W,EAAUt/E,EAAIs/E,cAAkB,WAE/B9iC,GAAOx8C,EAAI81E,MAAQkJ,GAAiBh/E,EAAIq/E,KAAMrqD,EAAKghD,aAAesJ,EAAQtqD,IACjF,MAAOxD,UACA,MAhBkD0uD,CAAU5X,EAAM8W,GAAW9W,EAAKwN,OAG7F,SAAkBxN,SACVp4D,EAAOo4D,EAAKgJ,SACZ3uE,EAAmB,UAATuN,GAA6B,SAATA,GAAmBo4D,EAAKG,MAAM1vC,MAAK34B,GAAsB,MAAjBA,EAAE41E,cAAkC,IAAX51E,EAAE21E,cAChGv5B,GAAO75C,EAAUo8E,GAAkBC,GAAkB,GAAE9uE,mBAAuBo4D,EAAK0N,aANUmK,CAAS7X,GAoB/G,SAASqX,GAAa3qD,UACb7xB,EAAM6xB,EAAK9lB,MAAM3B,KAAK,KA2B/B,SAASiyE,GAAaxqD,cAEX7xB,EAAMD,EAAK8xB,EAAKyzC,OAAOA,MAAM,GAAGv5D,MAAM3B,KAAK,KAClD,MAAOikB,UACA,MAaX,MAAM4uD,GAAYrqD,IAAQA,EAAM,IAAInrB,QAAQ,KAAM,SAASA,QAAQ,KAAM,QAAQA,QAAQ,KAAM,QAI/F,SAASy1E,SACHC,EAAM,GACNC,EAAQ,GACRC,EAAQ,SAENC,EAAQ,GACR93E,EAAQ,IAAM43E,EAAQC,EAAQ,GAS9B5Q,EAAO,CAACtxE,EAAMoE,KAjBLqzB,IAAAA,SAkBA,MAATrzB,IAAe69E,GAAU,IAAGjiF,MAlBnBy3B,EAkBqCrzB,EAlB9B09E,GAAUrqD,GAAKnrB,QAAQ,KAAM,UAAUA,QAAQ,MAAO,SAASA,QAAQ,MAAO,SAASA,QAAQ,MAAO,aAmBnH6K,GAEHA,EAAI,CACRirE,KAAKhR,KAAQiR,GAbFjR,CAAAA,IACP6Q,IACFD,GAAQ,GAAEC,KAASC,IACnB73E,KAGF83E,EAAM3gF,KAAK4vE,IAQT5vE,CAAK4vE,GACL6Q,EAAQ,IAAM7Q,MAET,MAAMjnE,KAAOk4E,MACX,MAAM7+E,KAAO2G,EAAKmnE,EAAK9tE,EAAK2G,EAAI3G,WAGhC2T,GAGTmrE,cACQlR,EAAM+Q,EAAMpvE,aAGhBivE,GADEC,EACKA,GAASC,EAAS,IAAGA,MAAU9Q,KAAS,MAEvC,KAAIA,KAGd/mE,IACO8M,GAGTm6D,KAAAA,EACA1gE,KAAM/F,IAAMq3E,GAASJ,GAAUj3E,GAAIsM,GACnCrL,SAAU,IAAMk2E,UAGX7qE,QAEHorE,GAAeC,GAAQC,GAAWV,KAAUS,GAAQ,GAE1D,SAASC,GAAWtrE,EAAGqrE,MACrBrrE,EAAEirE,KAAKI,EAAKvK,SAERuK,EAAKE,gBAAiB,OAClBL,EAAQG,EAAKG,WACbzhF,EAAImhF,EAAM/hF,WAEX,IAAIM,EAAI,EAAGA,EAAIM,IAAKN,EACvBuW,EAAEm6D,KAAK+Q,EAAMzhF,GAAGZ,KAAMqiF,EAAMzhF,GAAGwD,UAI/Bo+E,EAAKI,gBAAiB,OAClBC,EAAWL,EAAKxK,WAChB92E,EAAI2hF,EAASviF,WAEd,IAAIM,EAAI,EAAGA,EAAIM,EAAGN,IAAK,OACpBoK,EAAQ63E,EAASjiF,GACJ,IAAnBoK,EAAM83E,SACJ3rE,EAAEvG,KAAK5F,EAAM+3E,WAAaN,GAAWtrE,EAAGnM,WAIvCmM,EAAEmrE,QAGX,MAAMU,GAAS,CACbrqE,KAAM,OACNs2D,YAAa,eACbvE,OAAQ,SACRC,cAAe,iBACfE,YAAa,eACb0E,UAAW,iBACXxE,WAAY,kBACZ6E,WAAY,mBACZE,iBAAkB,oBAClBJ,iBAAkB,oBAClBxjB,QAAS,UACToiB,MAAO,kBAGH2U,GAAiB,MACb,2BACa,IAIjBC,GAAQ,gCACRC,GAAQjqB,GAASgqB,MACvB,SAASE,GAAY7wD,GACnB+mD,GAAS52E,KAAKK,KAAMwvB,QACf8wD,SAAW,OACXzE,OAAS,QACTuB,KAAO,UACPmD,MAAQ,UACR3Z,MAAQ,KAEf,MAAMt7C,GAAOirD,GAAS/vE,UA8WtB,SAASg6E,GAAa7sD,EAAM90B,QACnB80B,GAAQA,EAAKykD,QAAUv5E,EAAI80B,EAAOA,EAAKszC,KAAKtwD,MAAO,IACxDgd,EAAKykD,MAAQv5E,GAET80B,EAAKszC,MAAQtzC,EAAKszC,KAAKmR,QAAUv5E,EAE9B,OADL80B,EAAKszC,KAAKmR,MAAQv5E,GAMxB,SAAS4hF,GAAezL,EAAI0L,EAAMxsE,OAC5BrW,EAAGM,EAAGgV,KAEY,WAAlButE,EAAK1iB,SAAuB,KAK1B2iB,EAAKxL,GAASH,EAAI9gE,IAAS,UAAWksE,IAC1CQ,GAAcD,EAAI,CAChB9hF,GAAIi/D,GAAgB4iB,EAAK7hF,GACzBgiF,QAAS,UACTr0E,MAAO,OACPkxC,OAAQ,OACRojC,oBAAqB,mBAEvBH,EAAKxL,GAASwL,EAAI,EAAG,OAAQP,IAC7BQ,GAAcD,EAAI,CAChBn0E,MAAO,EACPkxC,OAAQ,EACR9nC,KAAO,OAAMkV,QAAU41D,EAAK7hF,QAG9B+hF,GADA5L,EAAKG,GAASH,EAAI9gE,IAAS,iBAAkBksE,IAC3B,CAChBvhF,GAAI6hF,EAAK7hF,GACTkiF,GAAIL,EAAKhsC,GACTssC,GAAIN,EAAK/rC,GACTssC,GAAIP,EAAK93E,GACT4vC,GAAIkoC,EAAKv/C,GACTsX,GAAIioC,EAAK7rC,GACT5zC,EAAGy/E,EAAKpsB,UAIVssB,GADA5L,EAAKG,GAASH,EAAI9gE,IAAS,iBAAkBksE,IAC3B,CAChBvhF,GAAI6hF,EAAK7hF,GACT61C,GAAIgsC,EAAKhsC,GACTvT,GAAIu/C,EAAKv/C,GACTwT,GAAI+rC,EAAK/rC,GACTE,GAAI6rC,EAAK7rC,SAIRh3C,EAAI,EAAGM,EAAIuiF,EAAKtiB,MAAM7gE,OAAQM,EAAIM,IAAKN,EAC1CsV,EAAOgiE,GAASH,EAAIn3E,EAAG,OAAQuiF,IAC/BjtE,EAAKo8C,aAAa,SAAUmxB,EAAKtiB,MAAMvgE,GAAG+a,QAC1CzF,EAAKo8C,aAAa,aAAcmxB,EAAKtiB,MAAMvgE,GAAG+qD,cAGhD0sB,GAASN,EAAIn3E,GACNqW,EAIT,SAASgtE,GAAelM,EAAIrO,EAAMzyD,OAC5BitE,SACJnM,EAAKG,GAASH,EAAI9gE,EAAO,WAAYksE,KAClC7wB,aAAa,KAAMoX,EAAK9nE,IAEvB8nE,EAAKrpE,MACP6jF,EAAOhM,GAASH,EAAI,EAAG,OAAQoL,IAC/Be,EAAK5xB,aAAa,IAAKoX,EAAKrpE,QAE5B6jF,EAAOhM,GAASH,EAAI,EAAG,OAAQoL,IAC/BQ,GAAcO,EAAM,CAClBj/E,EAAG,EACH2Q,EAAG,EACHrG,MAAOm6D,EAAKn6D,MACZkxC,OAAQipB,EAAKjpB,UAIjB43B,GAASN,EAAI,GACN9gE,EAAQ,EAkBjB,SAASq8B,GAAK5c,EAAMqhD,EAAIoM,EAAS/S,EAAK8O,OAEhCtI,EADA4K,EAAO9rD,EAAKypD,SAGXqC,IACH5K,EAAMG,EAAGI,cACTqK,EAAO7K,GAAUC,EAAKxG,EAAK+R,IAC3BzsD,EAAKypD,KAAOqC,EAER9rD,EAAKszC,OACPwY,EAAKvC,SAAWvpD,EAChB8rD,EAAK4B,WAAa,CAChBzrE,KAAM,WAGI,MAARy4D,IAAa,OACTiT,EAAK1M,GAAUC,EAAK,OAAQuL,IAClCX,EAAKpD,YAAYiF,GACjBA,EAAGpE,SAAWvpD,QACR4tD,EAAK3M,GAAUC,EAAK,IAAKuL,IAC/BX,EAAKpD,YAAYkF,GACjBA,EAAGrE,SAAWvpD,QACRxiB,EAAKyjE,GAAUC,EAAK,OAAQuL,IAClCX,EAAKpD,YAAYlrE,GACjBA,EAAG+rE,SAAWvpD,EACdxiB,EAAGkwE,WAAa,CACdzrE,KAAM,kBAOV6pE,EAAK+B,kBAAoBrE,GAQ/B,SAAsBsC,EAAM2B,UACnB3B,EAAKjD,YAAciD,EAAKjD,WAAWvH,WAAW13E,OAAS,GAAKkiF,EAAKgC,iBAAmBL,EATvDM,CAAajC,EAAM2B,KACrDpM,EAAGK,aAAaoK,EAAM2B,EAAUA,EAAQO,YAAc3M,EAAG8B,YAGpD2I,EAxfTz3E,GAASq4E,GAAa9J,GAAU,CAY9BjC,WAAWU,EAAIxoE,EAAOkxC,EAAQk5B,EAAQkB,eAE/BlR,MAAQ,QAERgb,aAED5M,SACGoI,KAAOjI,GAASH,EAAI,EAAG,MAAOoL,SAE9BhD,KAAKyE,eAAe1B,GAAO,QAASC,SAEpChD,KAAKyE,eAAe1B,GAAO,cAAehqB,GAAS,qBAEnDinB,KAAK7tB,aAAa,UAAW4G,GAAQ,cAErCinB,KAAK7tB,aAAa,QAAS,SAEhC+lB,GAASN,EAAI,QAERuL,MAAQpL,GAASn1E,KAAKo9E,KA3Cf,EA2CgC,IAAKgD,IACjDQ,GAAc5gF,KAAKugF,MAAOL,IAE1B5K,GAASt1E,KAAKo9E,KAAM0E,SAIjB1R,WAAWpwE,KAAKy2E,UACdnrD,GAAKgpD,WAAW30E,KAAKK,KAAMg1E,EAAIxoE,EAAOkxC,EAAQk5B,EAAQkB,IAM/D1H,WAAW4H,UACLj4E,UAAUxC,QAAUyC,KAAKo9E,WACtBA,KAAKV,MAAMqF,YAAY,mBAAoB/J,GAG3C1sD,GAAK8kD,WAAWvwE,MAAMG,KAAMD,YAarCg4E,OAAOvrE,EAAOkxC,EAAQk5B,EAAQkB,UAC5BxsD,GAAKysD,OAAOp4E,KAAKK,KAAMwM,EAAOkxC,EAAQk5B,EAAQkB,GAE1C93E,KAAKo9E,OACPwD,GAAc5gF,KAAKo9E,KAAM,CACvB5wE,MAAOxM,KAAKi4E,OAASj4E,KAAKm4E,OAC1Bz6B,OAAQ19C,KAAKk4E,QAAUl4E,KAAKm4E,OAC5B0I,QAAU,OAAM7gF,KAAKi4E,UAAUj4E,KAAKk4E,iBAGjCqI,MAAMhxB,aAAa,YAAc,aAAYvvD,KAAK+2E,kBAGpD8E,OAAS,GACP77E,MAOT8qE,gBACS9qE,KAAKo9E,MAOdD,YACQA,EAAMn9E,KAAKo9E,KACXkE,EAAKthF,KAAKy2E,aACX0G,EAAK,OAAO,SACbsC,EAEA6B,IACFnE,EAAI6E,gBAAgB,SACpBvC,EAAOtK,GAASgI,EAhHJ,EAgHoB,OAAQiD,IACxCQ,GAAcnB,EAAM,CAClBjzE,MAAOxM,KAAKi4E,OACZv6B,OAAQ19C,KAAKk4E,QACbtiE,KAAM0rE,WAIJzzE,EAAO2xE,GAAarC,UAEtBmE,IACFnE,EAAI5H,YAAYkK,QAEXrC,KAAKV,MAAMqF,YAAY,mBAAoBT,IAG3CzzE,GAOT0qE,QAAQrL,UAEFltE,KAAKiiF,gBACHjiF,KAAKkiF,WAAWliF,KAAK4hF,kBACpB3a,KAAKjnE,KAAKugF,MAAOrT,GACtBoI,GAASt1E,KAAKugF,MAAO,SAGlBriB,YACA2d,OAAS,KACZ77E,KAAKsgF,SACAtgF,MASTo4E,MAAMzkD,GACAA,EAAKykD,QAAUp4E,KAAKsgF,WACtB3sD,EAAKykD,MAAQp4E,KAAKsgF,cAEbzE,OAAOp9E,KAAKk1B,KAQrBwuD,QAAQxuD,UACC3zB,KAAKkiF,YAAcvuD,EAAKypD,MAAQzpD,EAAKykD,QAAUp4E,KAAKsgF,UAO7D2B,mBACOC,WAAY,QACX9a,EAAQpnE,KAAK67E,WACdzU,EAAM7pE,SAAWyC,KAAKsgF,SAAU,OAAO,QACtCzhF,IAAOmB,KAAKsgF,aACd3sD,EAAMszC,EAAMp4D,EAAM6oE,EAAM75E,EAAGM,EAAGqD,MAE7B3D,EAAI,EAAGM,EAAIipE,EAAM7pE,OAAQM,EAAIM,IAAKN,EACrC81B,EAAOyzC,EAAMvpE,GACbopE,EAAOtzC,EAAKszC,KAERA,EAAKgJ,WAAaphE,IAEpBA,EAAOo4D,EAAKgJ,SACZyH,EAAO/D,GAAM9kE,IAGXo4D,EAAKkG,QAAUlG,EAAKmR,QAAUv5E,SAC3BqjF,WAAY,EACjB1B,GAAa7sD,EAAM90B,GACnBooE,EAAKG,MAAMxlE,SAAQ/D,IACjBA,EAAEu6E,MAAQv5E,MAIVooE,EAAKkG,SAELx5C,EAAK6mD,MAEH9C,EAAKpJ,QAAUrH,EAAKG,MAAM7pE,QAE5BiE,EAAIylE,EAAKG,MAAM,GACX5lE,EAAE47E,MAAMp9E,KAAK2yB,QAAQ+kD,EAAMl2E,EAAE47E,KAAM57E,IAC9BmyB,EAAKypD,OAEd57E,EAAImyB,EAAKypD,KAAKZ,WACVh7E,GAAGA,EAAE+zE,YAAY5hD,EAAKypD,OAG5BzpD,EAAKypD,KAAO,OAIdzpD,EAAO+jD,EAAKpJ,OAASrH,EAAKG,MAAM,GAAKzzC,EACjCA,EAAKhB,UAAY9zB,IAEhB80B,EAAKypD,MAASzpD,EAAKypD,KAAKoE,qBAMtB7uD,QAAQ+kD,EAAM/jD,EAAKypD,KAAMzpD,SAJzBuuD,WAAY,EACjB1B,GAAa7sD,EAAM90B,IAMrB80B,EAAKhB,QAAU9zB,YAGTmB,KAAKkiF,WAWfjb,KAAK+N,EAAI9H,EAAOrjE,OACT7J,KAAKmiF,QAAQjV,GAAQ,OAAOA,EAAMkQ,WACjCD,EAAMn9E,KAAKo9E,KACX1F,EAAO/D,GAAMzG,EAAM+C,UACnB0K,GAA+B,IAAtBzN,EAAM8C,YAAwB,OAAS,KAChDoS,EAAuB,MAAb1K,EAAKrJ,QACjB+S,EAAU,KACVvjF,EAAI,QACFqK,EAASqoC,GAAK28B,EAAO8H,EAAInrE,EAAM,IAAKszE,GAC1Cj1E,EAAOqnD,aAAa,QAASimB,GAAStI,UAEhCwH,EAAOkK,GAAmB1R,OAE3B,MAAMzsE,KAAOi0E,EAAMnlB,GAAarnD,EAAQzH,EAAKi0E,EAAKj0E,IAElD2hF,GACH7yB,GAAarnD,EAAQ,iBAAkByyE,GAGzCprB,GAAarnD,EAAQ,YAAaglE,EAAMvG,KAAOF,GAAOzmE,KAAMktE,EAAOA,EAAMv2D,OAAS,YAE5EuzB,EAAUvW,UACRykD,EAAQp4E,KAAKmiF,QAAQxuD,GACrB8rD,EAAOlvC,GAAK5c,EAAMzrB,EAAQk5E,EAAS1J,EAAKrJ,IAAK8O,GAE/C/E,SACGzlD,QAAQ+kD,EAAM+H,EAAM9rD,GAErByuD,GAiMZ,SAAiB1b,EAAUsO,EAAIr+D,GAC7Bq+D,EAAKA,EAAGqN,UAAUZ,oBACd53E,EACAif,EAAM,EACV+M,GAAMlf,GAAOgd,IACX9pB,EAAO68D,EAASO,KAAK+N,EAAIrhD,EAAM9pB,KAC7Bif,KAGJwsD,GAASN,EAAI,EAAIlsD,GA1MExnB,CAAQtB,KAAMy/E,EAAM9rD,IAGnCytD,EAAU3B,IACR5hF,UAGA65E,EAAKpJ,OACHpB,EAAM9F,MAAM7pE,QAAQ2sC,EAAQgjC,EAAM9F,MAAM,IAE5CvxC,GAAMq3C,EAAOhjC,GAGforC,GAASptE,EAAQrK,GACVqK,GASTyqB,QAAQ+kD,EAAM1C,EAAIrhD,GAGhB2iD,GAAUtB,EACVhhE,GAASghE,EAAGqM,WAEZ3C,GAAmBlQ,GAAM76C,GAEzB+jD,EAAKnJ,KAAKC,GAAM76C,EAAM3zB,YAEhBsiF,EAAQC,GAAY7K,EAAK7oE,MAC3ByzE,GAAOA,EAAM3iF,KAAKK,KAAM03E,EAAM1C,EAAIrhD,GAGlC2iD,IAASt2E,KAAK08E,MAAMpG,GAAS3iD,IAQnC+oD,MAAM1H,EAAIrhD,MACI,MAARA,MAEC,MAAMzF,KAAQ+xD,GAAQ,KACrB5+E,EAAiB,SAAT6sB,EAAkB+kD,GAAWt/C,GAAQA,EAAKzF,MAClD7sB,IAAU2S,GAAOka,GAAO,eACtBjxB,EAAOgjF,GAAO/xD,GAEP,MAAT7sB,EACF2zE,EAAGgN,gBAAgB/kF,IAEf8gE,GAAW18D,KACbA,EAAQ48D,GAAY58D,EAAOrB,KAAK4mE,MAAM5I,SAAUlzC,OAGlDkqD,EAAGzlB,aAAatyD,EAAMoE,EAAQ,KAGhC2S,GAAOka,GAAQ7sB,IASnB68D,aACQif,EAAMn9E,KAAKo9E,KACXlf,EAAOl+D,KAAK4mE,UACdoO,EAAK9W,EAAK8W,GACV9gE,EAAQ,MAEP,MAAMrV,KAAMq/D,EAAKF,SACfgX,IAAI9W,EAAK8W,GAAKA,EAAKG,GAASgI,EAAK2E,EAAe,OAAQ1B,KAC7DlsE,EAAQusE,GAAezL,EAAI9W,EAAKF,SAASn/D,GAAKqV,OAG3C,MAAMrV,KAAMq/D,EAAK2I,SACfmO,IAAI9W,EAAK8W,GAAKA,EAAKG,GAASgI,EAAK2E,EAAe,OAAQ1B,KAC7DlsE,EAAQgtE,GAAelM,EAAI9W,EAAK2I,SAAShoE,GAAKqV,GAI5C8gE,IACQ,IAAV9gE,GAAeipE,EAAI5H,YAAYP,GAAK9W,EAAK8W,GAAK,MAAQM,GAASN,EAAI9gE,KAOvE0tE,mBACQv2C,EAAMrrC,KAAK4mE,MACjBv7B,EAAI2yB,SAAW,GACf3yB,EAAIw7B,SAAW,MAyJnB,IAAIyP,GAAU,KAEdtiE,GAAS,KAGT,MAAMuuE,GAAc,CAClB5rE,MAAM+gE,EAAM1C,EAAIrhD,SACRxiB,EAAKmlE,GAAUtB,EAAGC,WAAW,GACnCjhE,GAAS7C,EAAGkwE,WACZ3J,EAAKrH,WAAW7B,GAAM76C,EAAM3zB,MAC5BgU,GAASghE,EAAGqM,WAEZ/K,GAAUtB,EAAGC,WAAW,GACxByC,EAAKvH,QAAQ3B,GAAM76C,EAAM3zB,YACnBshF,EAAKhL,GAAUtB,EAAGC,WAAW,GACnCyC,EAAKtH,WAAW5B,GAAM76C,EAAM3zB,YACtBqB,GAAkC,IAA1BsyB,EAAKszC,KAAK+I,YAAwB,OAAS,QAErD3uE,IAAU2S,GAAO2mE,SACnBprB,GAAap+C,EAAI,iBAAkB9P,GACnCkuD,GAAa+xB,EAAI,iBAAkBjgF,GACnC2S,GAAO2mE,OAASt5E,GAGdsyB,EAAK+7C,kBAAoB/7C,EAAKg0C,OAAQ,OAClC/xD,EAAO+d,EAAK/d,KAClB25C,GAAap+C,EAAI,UAAW,WAEvBurE,MAAM4E,EAAI3tD,GACf47B,GAAa+xB,EAAI,SAAU,MAEvB1rE,IAAM+d,EAAK/d,KAAO,MACtB5B,GAAS7C,EAAGkwE,gBACP3E,MAAMvrE,EAAIwiB,GACX/d,IAAM+d,EAAK/d,KAAOA,GAEtB0gE,GAAU,UAGV/mB,GAAap+C,EAAI,UAAW,SAIhCy6D,MAAM8L,EAAM1C,EAAIrhD,IACM,IAAhBA,EAAK+I,QACP8lD,GAASxN,EAAI,kBAAmB,iBAChCwN,GAASxN,EAAI,kBAAmB,cAEhCwN,GAASxN,EAAI,kBAAmB,OAIpCnnE,KAAK6pE,EAAM1C,EAAIrhD,SACPgwC,EAAKgP,GAAUh/C,OACjBlzB,EAAKY,EAAOwzE,EAAKjB,EAEjBxzE,EAAQujE,IAEVtiE,EAAQsiE,EAAGjiE,KAAI3C,GAAKqzE,GAAUz+C,EAAM50B,KACpC0B,EAAMY,EAAM6K,KAAK,MAEbzL,IAAQuT,GAAOnG,OACjBynE,GAASN,EAAI,GACbH,EAAMG,EAAGI,cACTxB,EAAKlB,GAAW/+C,GAChBtyB,EAAMO,SAAQ,CAACkG,EAAGjK,WACV4kF,EAAK7N,GAAUC,EAAK,QAASuL,IACnCqC,EAAGvF,SAAWvpD,EAEd8uD,EAAGC,YAAc56E,EAEbjK,IACF4kF,EAAGlzB,aAAa,IAAK,GACrBkzB,EAAGlzB,aAAa,KAAMqkB,IAGxBoB,EAAGqH,YAAYoG,MAEjBzuE,GAAOnG,KAAOpN,KAIhBY,EAAQ+wE,GAAUz+C,EAAMgwC,GAEpBtiE,IAAU2S,GAAOnG,OACnBmnE,EAAG0N,YAAcrhF,EACjB2S,GAAOnG,KAAOxM,IAIlBkuD,GAAaylB,EAAI,cAAe/B,GAAWt/C,IAC3C47B,GAAaylB,EAAI,YAAalD,GAASn+C,GAAQ,MAC/C47B,GAAaylB,EAAI,aAAcrhD,EAAKw/C,WACpC5jB,GAAaylB,EAAI,eAAgBrhD,EAAKy/C,aACtC7jB,GAAaylB,EAAI,cAAerhD,EAAK0/C,cAKzC,SAAS7E,GAAKvxE,EAAMoE,EAAOyzE,GAErBzzE,IAAU2S,GAAO/W,KAEjB63E,EAsCN,SAAwBE,EAAI/3E,EAAMoE,EAAOyzE,GAC1B,MAATzzE,EAEF2zE,EAAG6M,eAAe/M,EAAI73E,EAAMoE,GAG5B2zE,EAAG2N,kBAAkB7N,EAAI73E,GA3CzB4kF,CAAevL,GAASr5E,EAAMoE,EAAOyzE,GAErCvlB,GAAa+mB,GAASr5E,EAAMoE,GAI9B2S,GAAO/W,GAAQoE,GAGjB,SAASmhF,GAASxN,EAAI/3E,EAAMoE,GACtBA,IAAU2S,GAAO/W,KACN,MAAToE,EACF2zE,EAAG0H,MAAMkG,eAAe3lF,GAExB+3E,EAAG0H,MAAMqF,YAAY9kF,EAAMoE,EAAQ,IAGrC2S,GAAO/W,GAAQoE,GAInB,SAASu/E,GAAc5L,EAAIsK,OACpB,MAAM7+E,KAAO6+E,EAChB/vB,GAAaylB,EAAIv0E,EAAK6+E,EAAM7+E,IAIhC,SAAS8uD,GAAaylB,EAAI/3E,EAAMoE,GACjB,MAATA,EAEF2zE,EAAGzlB,aAAatyD,EAAMoE,GAGtB2zE,EAAGgN,gBAAgB/kF,GAcvB,SAAS6tB,SACH+3D,QACqB,oBAAXrH,OAAyB,IAAMqH,EAAMrH,OAAOsH,UAAU7sD,KAAO4sD,EAAI/3D,KAAKprB,MAAM,GAAImjF,EAAI5sD,KAAK14B,QAAUslF,EAAI/3D,KAGvH,SAASi4D,GAAkBvzD,GACzB+mD,GAAS52E,KAAKK,KAAMwvB,QACfwzD,MAAQ,UACRpc,MAAQ,CACX5I,SAAU,GACV6I,SAAU,IAGd7+D,GAAS+6E,GAAmBxM,GAAU,CAKpC4G,aACSn9E,KAAKgjF,OAOdzK,QAAQrL,SACA94D,EAAI4qE,KAEV5qE,EAAEirE,KAAK,MAAOj5E,GAAO,GAAI+vD,GAAU,CACjC8sB,MAAO,QACPz2E,MAAOxM,KAAKi4E,OAASj4E,KAAKm4E,OAC1Bz6B,OAAQ19C,KAAKk4E,QAAUl4E,KAAKm4E,OAC5B0I,QAAU,OAAM7gF,KAAKi4E,UAAUj4E,KAAKk4E,mBAGhCoJ,EAAKthF,KAAKy2E,gBAEZ6K,GAAa,gBAAPA,GAA+B,SAAPA,GAChCltE,EAAEirE,KAAK,OAAQ,CACb7yE,MAAOxM,KAAKi4E,OACZv6B,OAAQ19C,KAAKk4E,QACbtiE,KAAM0rE,IACL/B,QAILnrE,EAAEirE,KAAK,IAAKa,GAAgB,CAC1B7wE,UAAW,aAAerP,KAAK+2E,QAAU,WAEtC9P,KAAK7yD,EAAG84D,GACb94D,EAAEmrE,aAGGrhB,KAAK9pD,QAEL4uE,MAAQ5uE,EAAEmrE,QAAU,GAClBv/E,MAQTinE,KAAK7yD,EAAG84D,SACAwK,EAAO/D,GAAMzG,EAAM+C,UACnB5B,EAAMqJ,EAAKrJ,IACX6U,EAAW,CAACxE,GAAoBhH,EAAKnJ,MAE3Cn6D,EAAEirE,KAAK,IAAK,OACD7J,GAAStI,eACLA,EAAMvG,KAAOF,GAAOzmE,KAAMktE,EAAOA,EAAMv2D,OAAS,MAC5DioE,GAAmB1R,GAAQ,kBACF,MAARmB,IAAqC,IAAtBnB,EAAM8C,YAAwB,OAAS,aAGpE9lC,EAAUvW,UACR7I,EAAO9qB,KAAK8qB,KAAK6I,MACnB7I,GAAM1W,EAAEirE,KAAK,IAAKv0D,GACtB1W,EAAEirE,KAAKhR,EAAKruE,KAAKuuE,KAAKrB,EAAOv5C,EAAMuvD,EAAkB,MAAR7U,EAAcA,EAAM,OAErD,SAARA,EAAgB,OACZ1K,EAAKgP,GAAUh/C,MAEjBvzB,EAAQujE,GAAK,OAET2b,EAAQ,CACZp9E,EAAG,EACH0N,GAAI8iE,GAAW/+C,QAGZ,IAAI91B,EAAI,EAAGA,EAAI8lE,EAAGpmE,SAAUM,EAC/BuW,EAAEirE,KAAK,QAASxhF,EAAIyhF,EAAQ,MAAMzxE,KAAKukE,GAAUz+C,EAAMgwC,EAAG9lE,KAAK0hF,aAIjEnrE,EAAEvG,KAAKukE,GAAUz+C,EAAMgwC,SAEpB,GAAY,MAAR0K,EAAa,OAChBoB,EAAO97C,EAAK+7C,iBACZ95D,EAAO+d,EAAK/d,KACZ+xD,EAASh0C,EAAKg0C,OAEhB8H,GAAQ9H,IACVh0C,EAAKg0C,OAAS,MAGhBvzD,EAAEirE,KAAK,OAAQr/E,KAAKuuE,KAAKrB,EAAOv5C,EAAM+jD,EAAKtH,WAAY,WAAWmP,QAElEnrE,EAAEirE,KAAK,IAAKr/E,KAAKuuE,KAAKrB,EAAOv5C,EAAM+jD,EAAKvH,UACxCt6C,GAAMlC,GAAMu5C,GAASltE,KAAKinE,KAAK7yD,EAAG84D,KAClC94D,EAAEmrE,QAEE9P,GAAQ9H,GACN/xD,IAAM+d,EAAK/d,KAAO,MACtB+d,EAAKg0C,OAASA,EACdvzD,EAAEirE,KAAK,OAAQr/E,KAAKuuE,KAAKrB,EAAOv5C,EAAM+jD,EAAKrH,WAAY,WAAWkP,QAC9D3pE,IAAM+d,EAAK/d,KAAOA,IAEtBxB,EAAEirE,KAAK,OAAQr/E,KAAKuuE,KAAKrB,EAAOv5C,EAAM+jD,EAAKrH,WAAY,WAAWkP,QAItEnrE,EAAEmrE,QAEEz0D,GAAM1W,EAAEmrE,gBAGV7H,EAAKpJ,OACHpB,EAAM9F,OAAS8F,EAAM9F,MAAM7pE,QAAQ2sC,EAAQgjC,EAAM9F,MAAM,IAE3DvxC,GAAMq3C,EAAOhjC,GAIR91B,EAAEmrE,SAOXz0D,KAAK6I,SACG7I,EAAO6I,EAAK7I,SACdyjD,KAEAzjD,EAAM,IACJyjD,EAAOvuE,KAAKmjF,QAAUnjF,KAAKmjF,OAAOr4D,UAC7ByjD,OAEF7F,YAAY59C,GAAM4P,MAAK6zC,IAE1BA,EAAK,cAAgBA,EAAKzjD,KAC1ByjD,EAAKzjD,KAAO,MACX9qB,KAAKmjF,SAAWnjF,KAAKmjF,OAAS,KAAKr4D,GAAQyjD,YAK3C,MAUTA,KAAKrB,EAAOv5C,EAAM2rD,EAAOjR,SACjB1nE,EAAS,GACT6nE,EAAO,CAACvxE,EAAMoE,EAAOyzE,EAAIsO,KAC7Bz8E,EAAOy8E,GAAYnmF,GAAQoE,UAIzBhB,MAAMD,QAAQk/E,GAChBA,EAAM19E,SAAQ7E,GAAMA,EAAGyxE,EAAM76C,EAAM3zB,QAEnCs/E,EAAM9Q,EAAM76C,EAAM3zB,MAIhBquE,GAoGR,SAAe7vE,EAAGm1B,EAAMu5C,EAAOmB,EAAKnQ,MACtB,MAARvqC,EAAc,OAAOn1B,EAEb,WAAR6vE,IAA0C,IAAtBnB,EAAM8C,cAC5BxxE,EAAE,kBAAoB,WAGZ,WAAR6vE,KACwB,IAAtBnB,EAAM8C,cACRxxE,EAAE,kBAAoB,QAGxBA,EAAE6kF,QAAU,OACM,OAAd1vD,EAAK/d,MAAe,OAAOpX,EAGrB,UAAR6vE,IAAmC,IAAhB16C,EAAK+I,SAC1Bl+B,EAAEk+E,MAAQ,+DAGA,SAARrO,IACF7vE,EAAE,eAAiBy0E,GAAWt/C,GAC9Bn1B,EAAE,aAAeszE,GAASn+C,GAAQ,KAClCn1B,EAAE,cAAgBm1B,EAAKw/C,UACvB30E,EAAE,gBAAkBm1B,EAAKy/C,YACzB50E,EAAE,eAAiBm1B,EAAK0/C,gBAGrB,MAAMnlD,KAAQ+xD,GAAQ,KACrB5+E,EAAQsyB,EAAKzF,SACXjxB,EAAOgjF,GAAO/xD,IAEN,gBAAV7sB,GAAqC,SAATpE,GAA4B,WAATA,IAAwC,MAAToE,IAC5E08D,GAAW18D,KACbA,EAAQ48D,GAAY58D,EAAO68D,EAAKF,SAAU,KAG5Cx/D,EAAEvB,GAAQoE,IAxIVq7E,CAAM/1E,EAAQgtB,EAAMu5C,EAAOmB,EAAKruE,KAAK4mE,OAGhCjgE,GASTu3D,KAAK9pD,SACG4pD,EAAWh+D,KAAK4mE,MAAM5I,SACtB6I,EAAW7mE,KAAK4mE,MAAMC,YAEd,IADAtmE,OAAO+E,KAAK04D,GAAUzgE,OAASgD,OAAO+E,KAAKuhE,GAAUtpE,QAGnE6W,EAAEirE,KAAK,YAEF,MAAMxgF,KAAMm/D,EAAU,OACnB3yB,EAAM2yB,EAASn/D,GACfu/D,EAAQ/yB,EAAI+yB,MAEG,WAAjB/yB,EAAI2yB,UAKN5pD,EAAEirE,KAAK,UAAW,CAChBxgF,GAAIi/D,GAAgBj/D,EACpBgiF,QAAS,UACTr0E,MAAO,OACPkxC,OAAQ,OACRojC,oBAAqB,mBAEvB1sE,EAAEirE,KAAK,OAAQ,CACb7yE,MAAO,IACPkxC,OAAQ,IACR9nC,KAAM,QAAU/W,EAAK,MACpB0gF,QACHnrE,EAAEmrE,QAEFnrE,EAAEirE,KAAK,iBAAkB,CACvBxgF,GAAIA,EACJkiF,GAAI11C,EAAIqJ,GACRssC,GAAI31C,EAAIsJ,GACRssC,GAAI51C,EAAIziC,GACR4vC,GAAInN,EAAIlK,GACRsX,GAAIpN,EAAIwJ,GACR5zC,EAAGoqC,EAAIipB,MAGTlgD,EAAEirE,KAAK,iBAAkB,CACvBxgF,GAAIA,EACJ61C,GAAIrJ,EAAIqJ,GACRvT,GAAIkK,EAAIlK,GACRwT,GAAItJ,EAAIsJ,GACRE,GAAIxJ,EAAIwJ,SAIP,IAAIh3C,EAAI,EAAGA,EAAIugE,EAAM7gE,SAAUM,EAClCuW,EAAEirE,KAAK,OAAQ,CACbzmE,OAAQwlD,EAAMvgE,GAAG+a,oBACHwlD,EAAMvgE,GAAG+qD,QACtB22B,QAGLnrE,EAAEmrE,YAGC,MAAM1gF,KAAMgoE,EAAU,OACnBx7B,EAAMw7B,EAAShoE,GACrBuV,EAAEirE,KAAK,WAAY,CACjBxgF,GAAIA,IAGFwsC,EAAI/tC,KACN8W,EAAEirE,KAAK,OAAQ,CACbntE,EAAGm5B,EAAI/tC,OACNiiF,QAEHnrE,EAAEirE,KAAK,OAAQ,CACbn9E,EAAG,EACH2Q,EAAG,EACHrG,MAAO6+B,EAAI7+B,MACXkxC,OAAQrS,EAAIqS,SACX6hC,QAGLnrE,EAAEmrE,QAGJnrE,EAAEmrE,YAiDN,MAAM+D,GAAS,SAGTC,GAAO,OACPC,GAAa,CACjBF,OAAQA,GACRG,IALU,MAMVC,IALU,MAMVH,KAAMA,IAEFI,GAAU,GAYhB,SAASC,GAAa3mF,EAAM8B,UAC1B9B,EAAOka,OAAOla,GAAQ,IAAIya,cAEtB3X,UAAUxC,OAAS,GACrBomF,GAAQ1mF,GAAQ8B,EACTiB,MAEA2jF,GAAQ1mF,GAInB,SAAS85C,GAAUm2B,EAAOhG,EAAQv7D,SAC1Bk4E,EAAO,GAEb1Y,GAAM,IAAIrE,IAASC,MAAMG,GAEzBr4D,EAAOq+D,EAAM+C,gBACNphE,EAAOi1E,GAAc5W,EAAO/B,EAAKx/D,EAAQk4E,GAAiB,UAATh1E,EAAmBk1E,GAAe7W,EAAO/B,EAAKx/D,EAAQk4E,GAAQ/lF,EAAM,oDAG9H,SAASgmF,GAAc7c,EAAMkE,EAAKx/D,EAAQk4E,MAsB1C,SAAmB5c,EAAMkE,EAAKx/D,UAIrBs7D,EAAKC,QAAUiE,EAAI3C,WAAWvB,EAAKC,UAA8B,UAAlBD,EAAKgJ,WAA6C,IAArBhJ,EAAK+I,eAA2BrkE,GAAUA,EAAOs7D,KAzBhI+c,CAAU/c,EAAMkE,EAAKx/D,GAAS,OAC1By7D,EAAQH,EAAKG,MACbv4D,EAAOo4D,EAAKgJ,SACZ9xE,EAAIipE,EAAM7pE,WACZM,EAAI,KAEK,UAATgR,OACKhR,EAAIM,IAAKN,EACdkmF,GAAe3c,EAAMvpE,GAAIstE,EAAKx/D,EAAQk4E,YAGnC,MAAM98E,EAAO4sE,GAAM9kE,GAAMu/D,MAAOvwE,EAAIM,IAAKN,EAAG,OACzC81B,EAAOyzC,EAAMvpE,GACfomF,GAActwD,EAAMw3C,EAAKpkE,IAAO88E,EAAKplF,KAAKk1B,WAK7CkwD,EAUT,SAASE,GAAeptE,EAAOw0D,EAAKx/D,EAAQk4E,GAGtCl4E,GAAUA,EAAOgL,EAAMswD,OAASgd,GAActtE,EAAOw0D,EAAKwI,GAAMh9D,MAAMy3D,QACxEyV,EAAKplF,KAAKkY,SAKNutE,EAAQvtE,EAAMywD,MACdjpE,EAAI+lF,GAASA,EAAM3mF,UAErBY,EAAG,OACC+D,EAAIyU,EAAMzU,GAAK,EACf2Q,EAAI8D,EAAM9D,GAAK,EACrBs4D,EAAIx7D,WAAWzN,GAAI2Q,OAEd,IAAIhV,EAAI,EAAGA,EAAIM,IAAKN,EACvBimF,GAAcI,EAAMrmF,GAAIstE,EAAKx/D,EAAQk4E,GAGvC1Y,EAAIx7D,UAAUzN,EAAG2Q,UAGZgxE,EAGT,SAASI,GAActwD,EAAMw3C,EAAKpkE,SAE1BmgE,EAASvzC,EAAKuzC,cACbiE,EAAI7C,SAASpB,IAAWiE,EAAI3C,WAAWtB,IAAWngE,EAAK4sB,EAAMw3C,GA1FtEwY,GAAO,OAAWA,GAAO,IAAQ,CAC/Bjd,SAAUgV,GACVyI,SAAUzI,GACV31E,QAAS4zE,IAEXgK,GAAO,IAAQ,CACbjd,SAAU2Z,GACV8D,SAAUpB,GACVh9E,QAASi2E,IAEX2H,GAAO,KAAS,GAmFhB,MAAMS,GAAa,IAAItd,GACvB,SAASud,GAAWpd,SACZN,EAAOM,EAAKN,QAEd7hE,EAAW6hE,GACbA,EAAKoD,GAAaqa,GAAW98E,cACxB,CAAA,IAAIq/D,EAEJ,OADLyd,GAAWh9E,IAAI,EAAG,EAAG6/D,EAAKtwD,MAAMnK,MAAOy6D,EAAKtwD,MAAM+mC,QAGpDupB,EAAKC,OAAOnwB,UAAUqtC,IAIxB,SAASE,GAAW7iF,EAAGlD,EAAGkC,UACjBgB,IAAMlD,IAAmB,SAARkC,EAAiB8jF,GAAU9iF,EAAGlD,GAAKkD,aAAa0C,MAAQ5F,aAAa4F,MAAQ1C,IAAOlD,EAAI4K,GAAS1H,IAAM0H,GAAS5K,GAAK4D,KAAKI,IAAId,EAAIlD,IAF1I,KAE6JkD,GAAMlD,IAAM+B,EAASmB,IAAOnB,EAAS/B,IAMpN,SAAqBkD,EAAGlD,OAGlBkC,EACA5C,EAHA2mF,EAAKjkF,OAAO+E,KAAK7D,GACjBgjF,EAAKlkF,OAAO+E,KAAK/G,MAGjBimF,EAAGjnF,SAAWknF,EAAGlnF,OAAQ,OAAO,MACpCinF,EAAG7nE,OACH8nE,EAAG9nE,OAEE9e,EAAI2mF,EAAGjnF,OAAS,EAAGM,GAAK,EAAGA,OAC1B2mF,EAAG3mF,IAAM4mF,EAAG5mF,GAAI,OAAO,MAGxBA,EAAI2mF,EAAGjnF,OAAS,EAAGM,GAAK,EAAGA,QAEzBymF,GAAW7iF,EADhBhB,EAAM+jF,EAAG3mF,IACeU,EAAEkC,GAAMA,GAAM,OAAO,gBAGjCgB,UAAalD,EAxBqMmmF,CAAYjjF,EAAGlD,GAAxBkD,GAAKlD,GAE9N,SAASgmF,GAAU9iF,EAAGlD,UACb+lF,GAAWllB,GAAU39D,GAAI29D,GAAU7gE,IEthK5C,MAAMomF,GAAM,MACNC,GAAO,OACPC,GAAQ,QACRC,GAAS,SAKTC,GAAQ,QACRC,GAAS,SACTC,GAAM,MAGNC,GAAQ,QACRC,GAAW,OACXC,GAAY,QACZC,GAAY,QACZC,GAAY,QACZC,GAAa,SACbC,GAAY,aACZC,GAAY,aACZC,GAAW,YACXC,GAAY,gBACZC,GAAY,gBACZC,GAAW,eACXC,GAAU,UAEVC,GAAM,MACNC,GAAO,QACPC,GAAO,QAEP1C,GAAO,OACP2C,GAAM,MACNC,GAAO,OACPC,GAAQ,QACRC,GAAS,SACTC,GAAM,MASZ,SAASC,GAAMl0D,GACb4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAyD7B,SAAS0hD,GAAUpgD,EAAM+6C,EAAO/vE,UACvB+vE,EAAM/6C,EAAKuzC,OAAO5/D,QAASqsB,EAAMh1B,GAxD1CqJ,GAASu+E,GAAOttD,GAAW,CACzB5pB,UAAUtQ,EAAG0yB,SACL+0D,EAAO/0D,EAAMwD,SACbgyC,EAAOloE,EAAEkoE,KACTp4D,EAAOo4D,EAAKgJ,SACZhR,EAAQ0U,GAAM9kE,GACd6/D,EAAQzP,EAAMyP,UAEhB+X,EADAC,EAAazf,EAAKC,UAGlBjI,EAAMqP,OAEJrH,EAAKG,MAAM7pE,QAAQipF,EAAKpO,MAAMnR,EAAKG,MAAM,IAC7Csf,EAAa3S,GAAU9M,EAAMyH,GAC7BzH,EAAKG,MAAMxlE,SAAQ+xB,IACjBA,EAAKuzC,OAAO5/D,QAAQy/D,MAAM2f,WAEvB,GAAI73E,IAASq2E,IAASnmF,EAAEizB,kBAG7BP,EAAMoE,MAAMpE,EAAM4E,KAAK1C,GAAQ6yD,EAAKpO,MAAMzkD,KAC1C+yD,EAAWp/E,QACX2/D,EAAKG,MAAMxlE,SAAQ+xB,GAAQ+yD,EAAW3f,MAAMgN,GAAUpgD,EAAM+6C,MAEpDzH,EAAKwN,WACN0Q,QACAI,QACAH,GACH3zD,EAAML,cAIVq1D,EAAUh1D,EAAMyE,QAAQzE,EAAM2E,KAC9B3E,EAAMoE,MAAMpE,EAAM0E,KAAKxC,IACrB+yD,EAAW3f,MAAMgN,GAAUpgD,EAAM+6C,OAEnCj9C,EAAMoE,MAAMpE,EAAM4E,KAAK1C,IACrB8yD,EAAUA,GAAWC,EAAWne,WAAW50C,EAAKuzC,QAChDsf,EAAKpO,MAAMzkD,GACX+yD,EAAW3f,MAAMgN,GAAUpgD,EAAM+6C,OAG/B+X,IACFC,EAAWp/E,QACX2/D,EAAKG,MAAMxlE,SAAQ+xB,GAAQ+yD,EAAW3f,MAAMpzC,EAAKuzC,kBAKrDmd,GAAUpd,GACHx1C,EAAMG,SAAS,aAS1B,MAAM+0D,GAAe,oBAarB,SAASC,GAAWv0D,GAClB4G,GAAUt5B,KAAKK,KAAM,EAAGqyB,GAsC1B,SAASw0D,GAAKx0D,GACZ4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAkE7B,SAASy0D,GAAQz0D,GACf4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,MAxGlB+I,WAAa,MACd,sBACI,WACE,UAEJ,CAAC,MACD,UACA,mBACI,KAGhBpzB,GAAS4+E,GAAY3tD,GAAW,CAC9B5pB,UAAUtQ,EAAG0yB,SACLs1D,GAUUP,EAVW/0D,EAAMwD,UAWvB+xD,SAASL,MAAkBH,EAAKQ,SAASL,IAAgBH,EAAK7kF,IAAI,IAVtEgiC,EAAK5kC,EAAE4kC,GASjB,IAAoB6iD,MARZ3nF,EAAKkoF,EAAQ1lF,aACjBowB,EAAMoE,MAAMpE,EAAM0E,KAAKruB,GAAKA,EAAE67B,GAAM77B,EAAE67B,MAAS9kC,IAC/CkoF,EAAQ3/E,IAAIpH,KAAKqB,MAAQxC,GAClB4yB,KAqBXzpB,GAAS6+E,GAAM5tD,GAAW,CACxB5pB,UAAUtQ,EAAG0yB,OACPw1C,EAAOjnE,KAAKqB,MAEX4lE,IACHA,EAAOx1C,EAAMwD,SAASgyD,aAAahgB,KAAKloE,EAAE43E,QA6BhD,SAAkB53E,SACV+R,EAAI/R,EAAE0sC,OACNvtC,EAAIa,EAAEmJ,cACL4I,GAAgB,IAAXA,EAAE7J,KAAa6J,EAAElS,IAAI2B,OAAO+E,KAAKwL,EAAEnK,QAAQ,IAAMmK,GAAK5S,EAAI4S,EAAEutD,OAAOngE,GAAK,KAhC7BgpF,CAASnoF,GAAIA,EAAEmV,OAClE+yD,EAAKtwD,MAAMoV,QAAUhtB,EAAEgtB,QAClBhtB,EAAEgtB,QAAQpV,QAAO5X,EAAEgtB,QAAQpV,MAAQswD,EAAKtwD,OAC7CswD,EAAKnmE,OAASd,KAAKc,OAEnBmmE,EAAKN,KAAO5nE,EAAE4nE,KACdM,EAAK+I,YAAcjxE,EAAEixE,iBAChB3uE,MAAQ4lE,SAITkgB,EAAOlgB,EAAKgJ,WAAaiV,GAAQ/d,GAAYH,UACnDv1C,EAAMoE,MAAMpE,EAAM0E,KAAKxC,GAAQwzD,EAAKxnF,KAAKg0B,EAAMszC,MAE3CloE,EAAEizB,SAAS,SAAWjzB,EAAEizB,SAAS,kBACnCi1C,EAAKN,KAAO5nE,EAAE4nE,KACdM,EAAK+I,cAAgBjxE,EAAEixE,YACvB/I,EAAKkG,QAAS,EAEd17C,EAAML,UAIR61C,EAAKG,MAAQ31C,EAAM3wB,OACZ2wB,KAsCX,MAAM21D,GAAU,CACdC,OAAQjgB,GAASA,EAAMz7D,QAAO,CAACgoB,EAAM91B,IAAMA,EAAI,EAAI81B,EAAKw1B,QAAU,EAAI,IACtEm+B,OAAQ,CAAClgB,EAAOmgB,SACV9lF,SACG2lE,EAAMz7D,QAAO,CAACpN,EAAGV,IAAOA,GAAMk5C,GAAUt1C,EAAEylE,OAAQ3oE,EAAE2oE,OAAQqgB,GAAoBhpF,EAAE4qD,QAAU,GAAxB1nD,EAAIlD,EAAG,OAKhFw4C,GAAY,CAACt1C,EAAGlD,EAAGgpF,IAAQA,EAAMplF,KAAKuC,IAAInG,EAAEm2C,GAAKjzC,EAAE0/B,GAAI1/B,EAAEizC,GAAKn2C,EAAE4iC,GAAI5iC,EAAEo2C,GAAKlzC,EAAEozC,GAAIpzC,EAAEkzC,GAAKp2C,EAAEs2C,IAE1F2yC,GAAa,CAACpgB,EAAOz8D,SACpB,IAAkDpM,EAA9CV,EAAI,EAAGM,EAAIipE,EAAM7pE,OAAQkE,EAAI2lE,EAAM,GAAGF,OAAWrpE,EAAIM,EAAGsD,EAAIlD,IAAKV,KACpEk5C,GAAUt1C,EAAGlD,EAAI6oE,EAAMvpE,GAAGqpE,OAAQv8D,GAAM,OAAO,GAIjD88E,GAAY9zD,UACVp1B,EAAIo1B,EAAKuzC,cACR3oE,EAAEiO,QAAU,GAAKjO,EAAEm/C,SAAW,GAkBjCxX,GAAQplC,IACZA,EAAOc,SAAQ+xB,GAAQA,EAAKw1B,QAAU,IAC/BroD,GAKHswB,GAAS,CAACK,EAAO1yB,IAAM0yB,EAAML,OAAOryB,EAAEizB,YAAYJ,SAAS,WAkEjE,SAAS81D,GAAOr1D,GACd4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAjE7BrqB,GAAS8+E,GAAS7tD,GAAW,CAC3B5pB,UAAUtQ,EAAG0yB,SACL7wB,EAASwmF,GAAQroF,EAAEM,SAAW+nF,GAAQC,OACtCE,EAAMxoF,EAAE4oF,YAAc,MAExBvgB,EACArgE,EAFAjG,EAAS2wB,EAAMmE,YAAYnE,EAAMmF,QAAQ91B,WAGxCA,IAAWA,EAAOvD,OAAQ,WAE1BwB,EAAEM,cAEDN,EAAEizB,SAAS,YACbkU,GAAMplC,GACN2wB,EAAQL,GAAOK,EAAO1yB,IAGjB0yB,KAIT3wB,EAASA,EAAO6K,OAAO87E,KAElB3mF,EAAOvD,OAAQ,UAEhBwB,EAAE4d,OACJ7b,EAASA,EAAOpB,QAAQid,KAAK5d,EAAE4d,OAGjCyqD,EAAQlhC,GAAMplC,GACd2wB,EAAQL,GAAOK,EAAO1yB,GAElBqoE,EAAM7pE,QAAU,GAAKiqF,GAAWpgB,EAAOmgB,GAAM,IAE7CngB,EAAQxmE,EAAOwmE,EAAOmgB,SACfngB,EAAM7pE,QAAU,GAAKiqF,GAAWpgB,EAAOmgB,IAE5CngB,EAAM7pE,OAAS,IAAMsE,EAAKf,GAAQqoD,UAChCie,EAAM7pE,OAAS,IAAGsE,EAAKulE,GAAOje,QAAU,GAC5CtnD,EAAKf,GAAQqoD,QAAU,GAIvBpqD,EAAE6oF,YAAc7oF,EAAE8oF,gBAAkB,IACtC9gF,EAnEY,EAACpD,EAAOmrE,EAAQgZ,SAC5BtjF,EAAQb,EAAMa,QACdjG,EAAI,IAAIuoE,UAERgI,IAAW6V,IAAO7V,IAAWgW,GAC/BvmF,EAAE6I,IAAI5C,EAAM,IAAI,EAAA,EAAWA,EAAM,GAAI,EAAA,GAErCjG,EAAE6I,KAAI,EAAA,EAAW5C,EAAM,GAAI,EAAA,EAAWA,EAAM,IAG9CjG,EAAEwpE,OAAO+f,GAAa,GACfn0D,GAAQp1B,EAAE+pE,SAAS30C,EAAKuzC,SAwDpB6gB,CAAUhpF,EAAE6oF,WAAY7oF,EAAEipF,aAAcjpF,EAAE8oF,gBACjD/mF,EAAOc,SAAQ+xB,IACR5sB,EAAK4sB,KAAOA,EAAKw1B,QAAU,aAK9B+d,EAASE,EAAM,GAAGH,KAAKC,OAAO5/D,eACpCxG,EAAOc,SAAQ+xB,IACTA,EAAKw1B,SAAS+d,EAAOH,MAAMpzC,EAAKuzC,WAE/Bz1C,KAaXzpB,GAAS0/E,GAAQzuD,GAAW,CAC1B5pB,UAAUtQ,EAAG0yB,SACL+0D,EAAO/0D,EAAMwD,YACnBxD,EAAMoE,MAAMpE,EAAMiF,KAAK/C,GAAQ6yD,EAAKpO,MAAMzkD,KAEtClC,EAAMz0B,QAAUy0B,EAAMz0B,OAAN,OAAwB,OACpC22B,EAAOlC,EAAM3wB,QAAU2wB,EAAM3wB,OAAO,GACtC6yB,IAAMA,EAAKszC,KAAKkG,QAAS,OAMnC,MAAMoG,GAAa,IAAIzM,GACvB,SAAS1/D,GAAIusB,EAAM/sB,EAAUvF,UACpBsyB,EAAK/sB,KAAcvF,EAAQ,GAAKsyB,EAAK/sB,GAAYvF,EAAO,GAGjE,SAAS4mF,GAAQhhB,OACX6H,EAAS7H,EAAKG,MAAM,GAAG0H,cACpBA,IAAW8V,IAAQ9V,IAAW+V,GAWvC,SAASqD,GAAW1B,EAAM2B,EAAM37E,EAAOkxC,OAiBjC7/C,EACAW,EAjBAm1B,EAAOw0D,EAAK/gB,MAAM,GAClBj4C,EAAQwE,EAAKxE,MACbrsB,EAA0B,MAAlB6wB,EAAKhkB,UAAoBgkB,EAAKhkB,UAAY,GAClDm/D,EAASn7C,EAAKm7C,OACdsZ,EAbN,SAAqBj5D,OACfjb,GAASib,EAAMk5D,WACZ,CAACl5D,EAAM9b,MAAQa,KAAW,EACjCib,EAAMm5D,OAASp0E,KAAW,EAC1BA,IAASib,EAAMtsB,QASD0lF,CAAYp5D,GACtB3qB,EAAQmvB,EAAKnvB,MACboU,EAAS+a,EAAK/a,OACd4vE,EAAW70D,EAAK60D,SAChBC,EAAY90D,EAAK80D,UACjBC,EAAY/0D,EAAK+0D,UACjBxK,EAAQ/uD,EAAM+uD,OAASvqD,EAAKyzC,MAAMghB,EAAQ,IAAIhhB,MAAM,GACpDuhB,EAAeh1D,EAAKg1D,aACpBzhB,EAASvzC,EAAKuzC,OACd0hB,EAAK1K,GAASrL,GAAgBqL,GAC9Bh8E,EAAI,EACJ2Q,EAAI,SAGR0gE,GAAWjsE,QAAQy/D,MAAMG,GACzBA,EAAO5/D,SACFzJ,EAAIuqF,EAAQ,KAAO,GAAGlhB,EAAOH,MAAMpzC,EAAKyzC,MAAMvpE,GAAGqpE,SACjDrpE,EAAIuqF,EAAQ,KAAO,GAAGlhB,EAAOH,MAAMpzC,EAAKyzC,MAAMvpE,GAAGqpE,QAE9C4H,QACD6V,GACHziF,EAAIsmF,GAAY,EAChB31E,GAAK+F,EACLpa,EAAI2D,KAAKuC,IAAI+jF,EAAWtmF,KAAKsC,IAAIikF,GAAYxhB,EAAOvyB,KACpDuyB,EAAOvlE,IAAI,GAAInD,GAAGmD,IAAI6C,EAAO,GACzB05E,GAAO2K,GAAgBrC,EAAMtI,EAAO1/E,EAAGmqF,EAAcC,EAAI,GAAI,EAAG1hB,cAGjE0d,GACH1iF,GAAK0W,EACL/F,EAAI21E,GAAY,EAChBhqF,EAAI2D,KAAKuC,IAAI+jF,EAAWtmF,KAAKsC,IAAIikF,GAAYxhB,EAAOxyB,KACpDwyB,EAAOvlE,KAAKnD,EAAG,GAAGmD,IAAI,EAAG6C,GACrB05E,GAAO2K,GAAgBrC,EAAMtI,EAAO1/E,EAAGmqF,EAAcC,EAAI,GAAI,EAAG1hB,cAGjE2d,GACH3iF,EAAIsK,EAAQoM,EACZ/F,EAAI21E,GAAY,EAChBhqF,EAAI2D,KAAKuC,IAAI+jF,EAAWtmF,KAAKsC,IAAIikF,EAAWxhB,EAAO/lC,KACnD+lC,EAAOvlE,IAAI,EAAG,GAAGA,IAAInD,EAAGgG,GACpB05E,GAAO2K,GAAgBrC,EAAMtI,EAAO1/E,EAAGmqF,EAAcC,EAAI,EAAG,EAAG1hB,cAGhE4d,GACH5iF,EAAIsmF,GAAY,EAChB31E,EAAI6qC,EAAS9kC,EACbpa,EAAI2D,KAAKuC,IAAI+jF,EAAWtmF,KAAKsC,IAAIikF,EAAWxhB,EAAOryB,KACnDqyB,EAAOvlE,IAAI,EAAG,GAAGA,IAAI6C,EAAOhG,GACxB0/E,GAAO2K,GAAgBrC,EAAMtI,EAAO1/E,EAAGmqF,EAAc,EAAG,EAAG,EAAGzhB,iBAIlEhlE,EAAIyxB,EAAKzxB,EACT2Q,EAAI8gB,EAAK9gB,SAIb40D,GAAYP,EAAOv3D,UAAUzN,EAAG2Q,GAAI8gB,GAEhCvsB,GAAIusB,EAAM,IAAKzxB,EAAIY,GAASsE,GAAIusB,EAAM,IAAK9gB,EAAI/P,KACjD6wB,EAAKuzC,OAASqM,GACdiT,EAAKpO,MAAMzkD,GACXA,EAAKuzC,OAASA,EACdsf,EAAKpO,MAAMzkD,IAGNA,EAAKszC,KAAKC,OAAO5/D,QAAQy/D,MAAMG,GAGxC,SAAS2hB,GAAgBrC,EAAMtI,EAAOtlE,EAAQjO,EAAKi+E,EAAIX,EAAShmF,EAAMilE,SAC9D3oE,EAAI2/E,EAAMhX,UAEZgX,EAAM4K,KAAM,OACRrjF,EAAIxD,GAAQ2W,EAASgwE,EAAKj+E,OAC5B+E,EAAK,EACLE,EAAK,EACT42E,EAAKpO,MAAM8F,GACX+J,EAAUv4E,GAAMwuE,EAAMh8E,GAAK,IAAMg8E,EAAMh8E,EAAIuD,GAAKmK,GAAMsuE,EAAMrrE,GAAK,IAAMqrE,EAAMrrE,EAAIpN,GACjFy4E,EAAMjX,KAAKC,OAAO5/D,QAAQy/D,MAAMxoE,EAAEoR,WAAWD,GAAKE,IAClD42E,EAAKpO,MAAM8F,GAGbhX,EAAOH,MAAMxoE,GAGf,MAAMkG,GAAM,CAAChD,EAAGlD,IAAM4D,KAAKwR,MAAMxR,KAAKsC,IAAIhD,EAAGlD,IAEvCmG,GAAM,CAACjD,EAAGlD,IAAM4D,KAAK2I,KAAK3I,KAAKuC,IAAIjD,EAAGlD,IA8D5C,SAASwqF,GAAUp1D,UACV,IAAImzC,IAAS1/D,IAAI,EAAG,EAAGusB,EAAKnnB,OAAS,EAAGmnB,EAAK+pB,QAAU,GAGhE,SAASsrC,GAASr1D,SACVp1B,EAAIo1B,EAAKuzC,OAAOlwC,eACfz4B,EAAE2I,QAAU3I,EAAE6I,IAAI,EAAG,EAAG,EAAG,GAAK7I,EAAEoR,YAAYgkB,EAAKzxB,GAAK,KAAMyxB,EAAK9gB,GAAK,IAGjF,SAASjU,GAAID,EAAK8B,EAAKyR,SACfzM,EAAInF,EAAS3B,GAAOA,EAAI8B,GAAO9B,SACzB,MAAL8G,EAAYA,OAAU0B,IAAN+K,EAAkBA,EAAI,EAG/C,SAAS+2E,GAAYxjF,UACZA,EAAI,EAAItD,KAAK2I,MAAMrF,GAAK,EAGjC,SAASyjF,GAAW1C,EAAM/6C,EAAQ9sC,OAoB5ByV,EACAvW,EACAQ,EACA4C,EACA1C,EACAuS,EACA8sC,EACAC,EACA37C,EACA2Q,EACA+F,EA7BAw/D,GAASz5E,EAAIwqF,QACbl6E,EAAOtQ,EAAIuoE,SAAWkf,GAAQ2C,GAAYC,GAC1C9hB,EAASqM,GAAWnsE,IAAI,EAAG,EAAG,EAAG,GACjCgiF,EAAWxqF,GAAID,EAAIkM,MAAOw7E,IAC1BgD,EAAWzqF,GAAID,EAAIkM,MAAOy7E,IAC1BgD,EAAS1qF,GAAID,EAAIwZ,QAASkuE,IAC1BkD,EAAS3qF,GAAID,EAAIwZ,QAASmuE,IAC1BkD,EAAQ7qF,EAAIqN,SAAWy/B,EAAOluC,OAC9BksF,EAAQD,GAAS,EAAI,EAAIrnF,KAAK2I,KAAK2gC,EAAOluC,OAASisF,GACnDrrF,EAAIstC,EAAOluC,OACX2zE,EAAU7wE,MAAMlC,GAChBurF,EAAUrpF,MAAMmpF,GAChBG,EAAO,EACPxY,EAAU9wE,MAAMlC,GAChByrF,EAAUvpF,MAAMopF,GAChBI,EAAO,EACPn6E,EAAKrP,MAAMlC,GACXyR,EAAKvP,MAAMlC,GACX2rF,EAAQzpF,MAAMlC,OAabN,EAAI,EAAGA,EAAI2rF,IAAS3rF,EAAG6rF,EAAQ7rF,GAAK,MAEpCA,EAAI,EAAGA,EAAI4rF,IAAS5rF,EAAG+rF,EAAQ/rF,GAAK,MAGpCA,EAAI,EAAGA,EAAIM,IAAKN,EACnBiT,EAAI26B,EAAO5tC,GACXU,EAAIurF,EAAMjsF,GAAKoR,EAAK6B,GACpBA,EAAE5O,EAAI4O,EAAE5O,GAAK,EACbwN,EAAG7R,GAAK,EACRiT,EAAE+B,EAAI/B,EAAE+B,GAAK,EACbjD,EAAG/R,GAAK,EACRQ,EAAIR,EAAI2rF,EACRvoF,KAAOpD,EAAI2rF,GACXG,EAAOxnF,KAAKuC,IAAIilF,EAAM/rC,EAAKz7C,KAAK2I,KAAKvM,EAAE4iC,KACvC0oD,EAAO1nF,KAAKuC,IAAImlF,EAAMhsC,EAAK17C,KAAK2I,KAAKvM,EAAEs2C,KACvC60C,EAAQrrF,GAAK8D,KAAKuC,IAAIglF,EAAQrrF,GAAIu/C,GAClCgsC,EAAQ3oF,GAAKkB,KAAKuC,IAAIklF,EAAQ3oF,GAAI48C,GAClCqzB,EAAQrzE,GAAKyrF,EAASL,GAAY1qF,EAAEm2C,IACpCy8B,EAAQtzE,GAAK0rF,EAASN,GAAY1qF,EAAEo2C,IAChCyjC,GAAOoO,EAAKpO,MAAM3sC,EAAO5tC,QAI1BA,EAAI,EAAGA,EAAIM,IAAKN,EACfA,EAAI2rF,GAAU,IAAGtY,EAAQrzE,GAAK,GAC9BA,EAAI2rF,IAAOrY,EAAQtzE,GAAK,MAI1BurF,IAAajD,OACV9nF,EAAI,EAAGA,EAAImrF,IAASnrF,EAAG,KACrBua,EAAS,EAAG/a,EAAIQ,EAAGR,EAAIM,EAAGN,GAAK2rF,EAC9B5wE,EAASs4D,EAAQrzE,KAAI+a,EAASs4D,EAAQrzE,QAGvCA,EAAIQ,EAAGR,EAAIM,EAAGN,GAAK2rF,EACtBtY,EAAQrzE,GAAK+a,EAAS8wE,EAAQrrF,EAAI,QAGjC,GAAI+qF,IAAalD,GAAK,KACtBttE,EAAS,EAAG/a,EAAI,EAAGA,EAAIM,IAAKN,EAC3BA,EAAI2rF,GAAS5wE,EAASs4D,EAAQrzE,KAAI+a,EAASs4D,EAAQrzE,QAGpDA,EAAI,EAAGA,EAAIM,IAAKN,EACfA,EAAI2rF,IAAOtY,EAAQrzE,GAAK+a,EAAS+wE,YAGlCP,GAAW,EAAO/qF,EAAI,EAAGA,EAAImrF,IAASnrF,MACpCR,EAAIQ,EAAGR,EAAIM,EAAGN,GAAK2rF,EACtBtY,EAAQrzE,IAAM6rF,EAAQrrF,EAAI,MAM5BgrF,IAAalD,OACVllF,EAAI,EAAGA,EAAIwoF,IAASxoF,EAAG,KACrB2X,EAAS,EAAkBxE,GAAfvW,EAAIoD,EAAIuoF,GAAeA,EAAO3rF,EAAIuW,IAAKvW,EAClD+a,EAASu4D,EAAQtzE,KAAI+a,EAASu4D,EAAQtzE,QAGvCA,EAAIoD,EAAIuoF,EAAO3rF,EAAIuW,IAAKvW,EAC3BszE,EAAQtzE,GAAK+a,EAASgxE,EAAQ3oF,EAAI,QAGjC,GAAIooF,IAAanD,GAAK,KACtBttE,EAAS,EAAG/a,EAAI2rF,EAAO3rF,EAAIM,IAAKN,EAC/B+a,EAASu4D,EAAQtzE,KAAI+a,EAASu4D,EAAQtzE,QAGvCA,EAAI2rF,EAAO3rF,EAAIM,IAAKN,EACvBszE,EAAQtzE,GAAK+a,EAASixE,WAGnBR,GAAW,EAAOpoF,EAAI,EAAGA,EAAIwoF,IAASxoF,MACrBmT,GAAfvW,EAAIoD,EAAIuoF,GAAeA,EAAO3rF,EAAIuW,IAAKvW,EAC1CszE,EAAQtzE,IAAM+rF,EAAQ3oF,EAAI,OAM3BiB,EAAI,EAAGrE,EAAI,EAAGA,EAAIM,IAAKN,EAC1BqE,EAAIgvE,EAAQrzE,IAAMA,EAAI2rF,EAAQtnF,EAAI,GAClCwN,EAAG7R,IAAMqE,EAAIupC,EAAO5tC,GAAGqE,MAIpB7D,EAAI,EAAGA,EAAImrF,IAASnrF,MAClBwU,EAAI,EAAGhV,EAAIQ,EAAGR,EAAIM,EAAGN,GAAK2rF,EAC7B32E,GAAKs+D,EAAQtzE,GACb+R,EAAG/R,IAAMgV,EAAI44B,EAAO5tC,GAAGgV,KAKvBu2E,GAAYxqF,GAAID,EAAIkJ,OAAQw+E,KAAWoD,EAAQ,MAC5C5rF,EAAI,EAAGA,EAAIM,IAAKN,GAEnBqE,GADA3D,EAAI6qF,IAAalD,GAAMyD,EAAOD,EAAQ7rF,EAAI2rF,IAClCM,EAAMjsF,GAAGsjC,GAAKsK,EAAO5tC,GAAGqE,EAAIwN,EAAG7R,IAC/B,IAAG6R,EAAG7R,IAAMqE,EAAI,MAKxBmnF,GAAYzqF,GAAID,EAAIkJ,OAAQy+E,KAAkB,IAAVkD,MACjC3rF,EAAI,EAAGA,EAAIM,IAAKN,GAEnBgV,GADAtU,EAAI8qF,IAAanD,GAAM2D,EAAOD,KAAW/rF,EAAI2rF,KACrCM,EAAMjsF,GAAGg3C,GAAKpJ,EAAO5tC,GAAGgV,EAAIjD,EAAG/R,IAC/B,IAAG+R,EAAG/R,IAAMgV,EAAI,OAKvBhV,EAAI,EAAGA,EAAIM,IAAKN,EACnBqpE,EAAOH,MAAM+iB,EAAMjsF,GAAG8R,UAAUD,EAAG7R,GAAI+R,EAAG/R,YAG5CqE,EAAItD,GAAID,EAAI+E,OA/qBJ,KAgrBRmP,EAAIjU,GAAID,EAAI+E,OA/qBJ,KAirBA9E,GAAID,EAAI+E,OAAQ2iF,UACjBpB,GACH/iF,GAAKglE,EAAO16D,mBAGTw4E,GACH9iF,GAAKglE,EAAO16D,QAAU,SAGlB5N,GAAID,EAAI+E,OAAQ4iF,UACjBrB,GACHpyE,GAAKq0D,EAAOxpB,oBAGTsnC,GACHnyE,GAAKq0D,EAAOxpB,SAAW,MAG3Bx7C,EAAIC,KAAKsR,MAAMvR,GACf2Q,EAAI1Q,KAAKsR,MAAMZ,GAEfq0D,EAAO5/D,QAEFzJ,EAAI,EAAGA,EAAIM,IAAKN,EACnB4tC,EAAO5tC,GAAGopE,KAAKC,OAAO5/D,YAGnBzJ,EAAI,EAAGA,EAAIM,IAAKN,GACnBiT,EAAI26B,EAAO5tC,IACTqE,GAAKwN,EAAG7R,IAAMqE,EAChB4O,EAAE+B,GAAKjD,EAAG/R,IAAMgV,EAChBq0D,EAAOH,MAAMj2D,EAAEm2D,KAAKC,OAAOH,MAAMj2D,EAAEo2D,OAAOv3D,UAAUD,EAAG7R,GAAI+R,EAAG/R,MAC1Du6E,GAAOoO,EAAKpO,MAAMtnE,UAGjBo2D,EAET,SAAS6iB,GAAcvD,EAAM7vE,EAAOhY,OAQ9BuD,EACA2Q,EACAsuB,EACA0T,EACAnxC,EACAkmC,EACAhxB,EAbAoxE,EA/QN,SAA0BrzE,OAIpBswD,EACAG,EAJA37B,EAAS90B,EAAMywD,MACfjpE,EAAIstC,EAAOluC,OACXM,EAAI,QAGFmsF,EAAQ,CACZ9F,MAAO,GACP+F,WAAY,GACZC,WAAY,GACZC,WAAY,GACZC,WAAY,GACZC,SAAU,KACVC,SAAU,WAGLzsF,EAAIM,IAAKN,KAEdupE,GADAH,EAAOx7B,EAAO5tC,IACDupE,MAETH,EAAKgJ,WAAaiV,UACZje,EAAKwN,WACN0Q,QACAI,QACAH,cAGAI,GACHwE,EAAMC,WAAWxrF,QAAQ2oE,cAGtBqe,GACHuE,EAAME,WAAWzrF,QAAQ2oE,cAGtBue,GACHqE,EAAMG,WAAW1rF,QAAQ2oE,cAGtBwe,GACHoE,EAAMI,WAAW3rF,QAAQ2oE,cAGtBse,GACHsE,EAAMK,SAAWjjB,EAAM,cAGpBye,GACHmE,EAAMM,SAAWljB,EAAM,iBAIvB4iB,EAAM9F,MAAMzlF,QAAQ2oE,UAKrB4iB,EAsNKO,CAAiB5zE,GACzB80B,EAASu+C,EAAM9F,MACfj1E,EAAOtQ,EAAIuoE,SAAWkf,GAAQoE,GAAaC,GAC3Ctb,EAAMxwE,EAAIia,OACV4wE,EAAQ7qF,EAAIqN,SAAWy/B,EAAOluC,OAC9BksF,EAAQD,GAAS,EAAI,EAAIrnF,KAAK2I,KAAK2gC,EAAOluC,OAASisF,GACnDthD,EAAQuhD,EAAQD,QASdtiB,EAASgiB,GAAW1C,EAAM/6C,EAAQ9sC,GACpCuoE,EAAOhgE,SAASggE,EAAO9/D,IAAI,EAAG,EAAG,EAAG,GAIpC4iF,EAAMC,aACRrgD,EAAOhrC,GAAID,EAAI+rF,WAAYpE,GAAK,MAChCpkF,EAAIyoF,GAAcnE,EAAMwD,EAAMC,WAAYx+C,EAAQ+9C,EAAOC,GAAQ7qF,GAAIuwE,EAAK,aAAc1qE,GAAK,EAAGwK,EAAM,KAAM,EAAGu6E,EAAO,EAAG5/C,IAIvHogD,EAAMG,aACRvgD,EAAOhrC,GAAID,EAAI+rF,WAAYrE,GAAQ,MACnCxzE,EAAI83E,GAAcnE,EAAMwD,EAAMG,WAAY1+C,EAAQ+9C,EAAOA,GAAQ5qF,GAAIuwE,EAAK,gBAAiB1qE,GAAK,EAAGwK,EAAM,KAAM,EAAG,EAAGu6E,EAAO5/C,IAI1HogD,EAAME,aACRtgD,EAAOhrC,GAAID,EAAIisF,WAAYtE,GAAK,MAChCnlD,EAAKwpD,GAAcnE,EAAMwD,EAAME,WAAYz+C,EAAQ+9C,EAAOC,EAAO7qF,GAAIuwE,EAAK,aAAczqE,GAAK,EAAGuK,EAAM,KAAMu6E,EAAQ,EAAGA,EAAO,EAAG5/C,IAI/HogD,EAAMI,aACRxgD,EAAOhrC,GAAID,EAAIisF,WAAYvE,GAAQ,MACnCxxC,EAAK81C,GAAcnE,EAAMwD,EAAMI,WAAY3+C,EAAQ+9C,EAAOA,EAAO5qF,GAAIuwE,EAAK,gBAAiBzqE,GAAK,EAAGuK,EAAM,KAAMi5B,EAAQshD,EAAO,EAAGA,EAAO5/C,IAItIogD,EAAMK,WACR3mF,EAAS9E,GAAID,EAAIksF,YAAavE,IAC9B1tE,EAASha,GAAIuwE,EAAK,YAClBv2D,EAASlV,IAAWuhF,GAAM9jD,EAAKvoB,EAAS1W,EAAI0W,EAC5CgxB,EAAOhrC,GAAID,EAAImsF,UAAWxE,GAAK,IAC/ByE,GAAYvE,EAAMwD,EAAMK,SAAUzxE,EAAQ,EAAGsuD,EAAQt9B,IAInDogD,EAAMM,WACR5mF,EAAS9E,GAAID,EAAIksF,YAAaxE,IAC9BztE,EAASha,GAAIuwE,EAAK,eAClBv2D,EAASlV,IAAWuhF,GAAMpwC,EAAKj8B,EAAS/F,EAAI+F,EAC5CgxB,EAAOhrC,GAAID,EAAImsF,UAAWzE,GAAQ,IAClC0E,GAAYvE,EAAMwD,EAAMM,SAAU1xE,EAAQ,EAAGsuD,EAAQt9B,IAIzD,SAAS4gD,GAAW72D,EAAMj2B,SACP,OAAVA,EAAiBi2B,EAAKzxB,GAAK,EAAc,OAAVxE,EAAiBi2B,EAAK9gB,GAAK,EAAc,OAAVnV,GAAkBi2B,EAAKzxB,GAAK,IAAMyxB,EAAKnnB,OAAS,GAAe,OAAV9O,GAAkBi2B,EAAK9gB,GAAK,IAAM8gB,EAAK+pB,QAAU,QAAKv2C,EAGlL,SAASsjF,GAAU92D,EAAMj2B,UAChBi2B,EAAKuzC,OAAOxpE,GAGrB,SAASitF,GAAcnE,EAAMwE,EAASv/C,EAAQ+9C,EAAOn5C,EAAOz3B,EAAQ+sB,EAAKslD,EAAKvc,EAAOwc,EAAIt6E,EAAOu6E,EAAQC,EAAMxhD,OAIxG/rC,EACAO,EACAmD,EACA6S,EACA7V,EACAo9B,EACA7qB,EACA5O,EACA2Q,EAXA1U,EAAIstC,EAAOluC,OACX60B,EAAO,EACP+P,EAAO,MAWNhkC,EAAG,OAAOi0B,MAEVv0B,EAAI+S,EAAO/S,EAAIM,EAAGN,GAAKstF,EACtB1/C,EAAO5tC,KAAIu0B,EAAOuT,EAAIvT,EAAMs8C,EAAMjjC,EAAO5tC,GAAIqtF,SAI9CF,EAAQztF,OAAQ,OAAO60B,MAExB44D,EAAQztF,OAAS8yC,IACnBm2C,EAAKvmF,KAAK,8BAAgCowC,GAC1C26C,EAAUA,EAAQtrF,MAAM,EAAG2wC,IAI7Bje,GAAQxZ,EAEHxa,EAAI,EAAGgW,EAAI42E,EAAQztF,OAAQa,EAAIgW,IAAKhW,EACvCooF,EAAKpO,MAAM4S,EAAQ5sF,IACnB4sF,EAAQ5sF,GAAG6oE,KAAKC,OAAO5/D,YAIpBzJ,EAAI+S,EAAOxS,EAAI,EAAGgW,EAAI42E,EAAQztF,OAAQa,EAAIgW,IAAKhW,EAAGP,GAAKstF,EAAQ,KAElE5sF,GADAo9B,EAAIqvD,EAAQ5sF,IACN6oE,KAAKC,OAGN3lE,EAAI1D,EAAG0D,GAAK,GAAwB,OAAlBuP,EAAI26B,EAAOlqC,IAAaA,GAAK6pF,GAGhDH,GACF/oF,EAAY,MAAR0nC,EAAe94B,EAAE5O,EAAIC,KAAKsR,MAAM3C,EAAEo2D,OAAOxyB,GAAK9K,EAAO94B,EAAEo2D,OAAO16D,SAClEqG,EAAIuf,IAEJlwB,EAAIkwB,EACJvf,EAAY,MAAR+2B,EAAe94B,EAAE+B,EAAI1Q,KAAKsR,MAAM3C,EAAEo2D,OAAOvyB,GAAK/K,EAAO94B,EAAEo2D,OAAOxpB,WAGpEn/C,EAAEwoE,MAAMprC,EAAEurC,OAAOv3D,UAAUzN,GAAKy5B,EAAEz5B,GAAK,GAAI2Q,GAAK8oB,EAAE9oB,GAAK,KACvD8oB,EAAEz5B,EAAIA,EACNy5B,EAAE9oB,EAAIA,EACN2zE,EAAKpO,MAAMz8C,GAEXwG,EAAOwD,EAAIxD,EAAM5jC,EAAE2sF,WAGd/oD,EAGT,SAAS4oD,GAAYvE,EAAM11E,EAAG8H,EAAQqyE,EAAK/jB,EAAQt9B,MAC5C94B,GACL01E,EAAKpO,MAAMtnE,OAEP5O,EAAI0W,EACJ/F,EAAI+F,EACRqyE,EAAM/oF,EAAIC,KAAKsR,MAAMyzD,EAAOxyB,GAAK9K,EAAOs9B,EAAO16D,SAAWqG,EAAI1Q,KAAKsR,MAAMyzD,EAAOvyB,GAAK/K,EAAOs9B,EAAOxpB,UAEnG5sC,EAAEo2D,OAAOv3D,UAAUzN,GAAK4O,EAAE5O,GAAK,GAAI2Q,GAAK/B,EAAE+B,GAAK,IAC/C/B,EAAEm2D,KAAKC,OAAO5/D,QAAQy/D,MAAMj2D,EAAEo2D,QAC9Bp2D,EAAE5O,EAAIA,EACN4O,EAAE+B,EAAIA,EAEN2zE,EAAKpO,MAAMtnE,IAiBb,SAASu6E,GAAav6E,EAAGg+D,EAAQwc,EAAQx8B,EAAIC,EAAInwC,EAAG+c,SAC5C58B,EAfR,SAAgBusF,EAAQxc,SAChBnwE,EAAM2sF,EAAOxc,IAAW,SACvB,CAACruE,EAAKyR,IAAkB,MAAZvT,EAAI8B,GAAe9B,EAAI8B,GAAsB,MAAf6qF,EAAO7qF,GAAe6qF,EAAO7qF,GAAOyR,EAa3EmsD,CAAOitB,EAAQxc,GACnBl2D,EAVR,SAAiB2yE,EAASlqF,OACpBqD,GAAM,EAAA,SACV6mF,EAAQ3pF,SAAQ+xB,IACK,MAAfA,EAAK/a,SAAgBlU,EAAMvC,KAAKuC,IAAIA,EAAKivB,EAAK/a,YAE7ClU,GAAM,EAAA,EAAYA,EAAMrD,EAKhBmqF,CAAQ16E,EAAG/R,EAAE,SAAU,IAChC2E,EAAS3E,EAAE,SAAUgmF,IACrB0G,EAAO/nF,IAAWuhF,GAAM,EAAIvhF,IAAWshF,GAAS,GAAM,EAEtD9mF,EAAI,CACR2M,MAAOs7E,GACPjf,OAAQnoE,EAAE,SAAUqnF,IACpBp6E,QAA4B,aAAnBjN,EAAE,aAA8B,EAAI+R,EAAEvT,OAC/C4a,QAASpZ,EAAE,SAAU,GACrB8I,OAAQ9I,EAAE,UACVoqF,SAAS,UAGHra,QACD8V,GACH1mF,EAAEwF,OAAS,CACTxB,EAAGC,KAAKwR,MAAMm7C,EAAGpa,IAAM97B,EACvBrM,OAAQ04E,GACRpyE,EAAG44E,GAAQ9vD,GAAKmzB,EAAGpR,SAAW,EAAIoR,EAAGna,IACrCroC,IAAK5I,cAIJmhF,GACH3mF,EAAEwF,OAAS,CACTxB,EAAGC,KAAK2I,KAAKgkD,EAAG3tB,IAAMvoB,EACtB/F,EAAG44E,GAAQ9vD,GAAKmzB,EAAGpR,SAAW,EAAIoR,EAAGna,IACrCroC,IAAK5I,cAIJihF,GACHzmF,EAAEwF,OAAS,CACTmP,EAAG1Q,KAAKwR,MAAMo7C,EAAGpa,IAAM/7B,EACvBtM,IAAK24E,GACL/iF,EAAGupF,GAAQ7sE,GAAKmwC,EAAGviD,QAAU,EAAIuiD,EAAGra,IACpCnoC,OAAQ7I,cAIPohF,GACH5mF,EAAEwF,OAAS,CACTmP,EAAG1Q,KAAK2I,KAAKikD,EAAGla,IAAMj8B,EACtB1W,EAAGupF,GAAQ7sE,GAAKmwC,EAAGviD,QAAU,EAAIuiD,EAAGra,IACpCnoC,OAAQ7I,aAj7BA,WAs7BVxF,EAAEwF,OAAS,CACTxB,EAAG0W,EACH/F,EAAG+F,aAv7BM,YA47BX1a,EAAEwF,OAAS,CACTxB,EAAG0c,EAAIhG,EACP/F,EAAG+F,EACHrM,OAAQ04E,cA97BG,cAm8Bb/mF,EAAEwF,OAAS,CACTxB,EAAG0W,EACH/F,EAAG8oB,EAAI/iB,EACPtM,IAAK24E,cAr8BO,eA08Bd/mF,EAAEwF,OAAS,CACTxB,EAAG0c,EAAIhG,EACP/F,EAAG8oB,EAAI/iB,EACPrM,OAAQ04E,GACR34E,IAAK24E,WAKJ/mF,EAET,SAASwtF,GAAalF,EAAMmF,OAOtB/sE,EACA+c,EAPAhI,EAAOg4D,EAAOvkB,MAAM,GACpBj4C,EAAQwE,EAAKxE,MACb2/C,EAASn7C,EAAKm7C,OACd5H,EAASvzC,EAAKuzC,OACdhlE,EAAIyxB,EAAKzxB,EACT2Q,EAAI8gB,EAAK9gB,SAIb8gB,EAAKi4D,QAAUj4D,EAAKi4D,QAAQtkF,QAAQy/D,MAAMG,GAAUvzC,EAAKi4D,QAAU1kB,EAAOlwC,QAC1EkwC,EAAO5/D,QAsCT,SAA2Bk/E,EAAM7yD,EAAMsrC,OACjCt0D,EAAMgpB,EAAKxb,QACX0zE,EAAKlhF,EAAMs0D,EAAM/8D,EACjB4pF,EAAKnhF,EAAMs0D,EAAMpsD,KAEhB8gB,EAAKxE,MAAM+uD,MAET,KACDA,EAAQvqD,EAAKyzC,MAAM,GAAGA,MAAM,GAC5B1jE,EAASw6E,EAAMx6E,OACfqoF,EAAOp4D,EAAKg1D,cAAgB,EAC5BqD,EAAKrhF,EAAMuzE,EAAMh8E,EACjB+pF,EAAKthF,EAAMuzE,EAAMrrE,SAEbqrE,EAAMpP,aACP8V,GACHiH,GAAM1pF,KAAK2I,KAAKozE,EAAMhX,OAAO16D,SAAWu/E,aAGrClH,QACAC,iBAIHgH,GAAM5N,EAAMhX,OAAOxpB,SAAWquC,UAG9BF,GAAMC,IAAIn8E,GAAU62E,EAAMvnB,EAAO4sB,EAAIC,GAEjC5N,EAAMpP,aACP8V,GACHqH,GAAMC,GAAkBv4D,EAAMsrC,EAAOif,EAAOx6E,EAAQ,EAAG,cAGpDmhF,GACHmH,GAAME,GAAkBv4D,EAAMsrC,EAAOif,EAAO+G,GAAK,EAAG,GAAK8G,EACzDE,GAAMC,GAAkBv4D,EAAMsrC,EAAOif,EAAOx6E,EAAQ,EAAG,cAGpDohF,GACHkH,GAAME,GAAkBv4D,EAAMsrC,EAAOif,EAAOx6E,EAAQ,EAAG,GACvDuoF,GAAMC,GAAkBv4D,EAAMsrC,EAAOif,EAAO+G,IAAM,EAAG,EAAG,GAAK8G,gBAI7DC,GAAME,GAAkBv4D,EAAMsrC,EAAOif,EAAOx6E,EAAQ,EAAG,IAGvDsoF,GAAMC,IAAIt8E,GAAU62E,EAAMtI,EAAO8N,EAAIC,IAEpCD,EAAK7pF,KAAKsR,MAAMyqE,EAAMhX,OAAOxyB,GAAK/pC,IAAQ,IAC7CgF,GAAU62E,EAAMvnB,GAAQ+sB,EAAI,GAC5Br8E,GAAU62E,EAAMtI,GAAQ8N,EAAI,SA9C1BH,GAAMC,IAAIn8E,GAAU62E,EAAMvnB,EAAO4sB,EAAIC,GA1C3CK,CAAkB3F,EAAM7yD,EAAMA,EAAKyzC,MAAM,GAAGA,MAAM,IAElDF,EAyBF,SAAsBvzC,EAAMp1B,UAE1Bo1B,EAAKyzC,MAAMxlE,SAAQ7C,GAAKR,EAAEwoE,MAAMhoE,EAAEmoE,UAElC3oE,EAAEm2C,GAAK/gB,EAAKxb,QACZ5Z,EAAEo2C,GAAKhhB,EAAKxb,QACL5Z,EA/BE6tF,CAAaz4D,EAAMuzC,GAC5BtoD,EAAI,EAAI+U,EAAKxb,QACbwjB,EAAI,EAAIhI,EAAKxb,QAER+uD,EAAOhgE,UACV0X,EAAIzc,KAAK2I,KAAKo8D,EAAO16D,QAAUoS,GAC/B+c,EAAIx5B,KAAK2I,KAAKo8D,EAAOxpB,SAAW/hB,IAv9BpB,WA09BVxM,EAAMtgB,MAqGZ,SAA2Bw9E,SAEnBC,EAASD,EAAQzrF,QAAO,CAACge,EAAG9N,KAChC8N,EAAE9N,EAAEvE,QAAUpK,KAAKuC,IAAIoM,EAAEo2D,OAAO/lC,GAAKrwB,EAAE5O,EAAG0c,EAAE9N,EAAEvE,SAAW,GAClDqS,IACN,IAEHytE,EAAQzqF,SAAQkP,IACdA,EAAEtE,MAAQ8/E,EAAOx7E,EAAEvE,QACnBuE,EAAE4sC,OAAS5sC,EAAEo2D,OAAOryB,GAAK/jC,EAAE+B,KA7G3B05E,CAAkB54D,EAAKyzC,MAAM,GAAGA,MAAM,GAAGA,MAAM,GAAGA,OAGhD0H,IAAWyU,KACb5vD,EAAKzxB,EAAIA,EAAI,EACbyxB,EAAK9gB,EAAIA,EAAI,GAGf8gB,EAAKnnB,MAAQoS,EACb+U,EAAK+pB,OAAS/hB,EACd8rC,GAAYP,EAAO9/D,IAAIlF,EAAG2Q,EAAG3Q,EAAI0c,EAAG/L,EAAI8oB,GAAIhI,GAC5CA,EAAKszC,KAAKC,OAAO5/D,QAAQy/D,MAAMG,GACxBvzC,EAqET,SAASu4D,GAAkBv4D,EAAMsrC,EAAOif,EAAOx6E,EAAQmP,EAAG25E,EAAIC,SACtD/L,EAA2B,WAApB/sD,EAAKxE,MAAMtgB,KAClB69E,EAAQxO,EAAM/uD,MAAMu9D,MAEpBluF,IADIkiF,IAAS8L,GAAOE,GAAWD,EAAyBxtB,EAAjBA,EAAMmI,MAAM,IAC7CF,OAAOr0D,EAAI,KAAO,MAAQ8gB,EAAKxb,QACrC3S,EAAIknF,GAASF,EAAKhuF,EAAI,EACtBiH,EAAIinF,GAASF,EAAK,EAAIhuF,EACtBgD,EAAIqR,GAAK,EAAI,EAAIggE,GAAgBqL,UAChC/7E,KAAKsR,MAAM/P,IAAWqhF,GAAQv/E,EAAI9B,IAAWuhF,GAAMx/E,EAAIjE,EAAI,IAAOhD,EAAIgD,IAG/E,SAASmO,GAAU62E,EAAM7yD,EAAMjkB,EAAIE,GACjC+jB,EAAKzxB,GAAKwN,EACVikB,EAAK9gB,GAAKjD,EACV+jB,EAAKuzC,OAAOv3D,UAAUD,EAAIE,GAC1B+jB,EAAKszC,KAAKC,OAAOv3D,UAAUD,EAAIE,GAC/B42E,EAAKpO,MAAMzkD,GAwHb,SAASg5D,GAAWt6D,GAClB4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAE7BrqB,GAAS2kF,GAAY1zD,GAAW,CAC9B5pB,UAAUtQ,EAAG0yB,SACL+0D,EAAO/0D,EAAMwD,gBAEnBl2B,EAAEkoE,KAAKG,MAAMxlE,SAAQ+U,IACf5X,EAAEmC,QAAQ6oF,GAAcvD,EAAM7vE,EAAO5X,EAAEmC,QAkBjD,SAAqBslF,EAAM7vE,EAAO5X,OAQ5Bm/E,EACAjX,EACA6H,EAEAjxE,EACAM,EAZAipE,EAAQzwD,EAAMywD,MACd56D,EAAQrK,KAAKuC,IAAI,EAAGiS,EAAMnK,OAAS,GACnCkxC,EAASv7C,KAAKuC,IAAI,EAAGiS,EAAM+mC,QAAU,GACrCq/B,GAAa,IAAIjW,IAAS1/D,IAAI,EAAG,EAAGoF,EAAOkxC,GAC3CkvC,EAAU7P,EAAW/lD,QACrB61D,EAAU9P,EAAW/lD,QACrBu0D,EAAU,OAQT1tF,EAAI,EAAGM,EAAIipE,EAAM7pE,OAAQM,EAAIM,IAAKN,UACrCopE,EAAOG,EAAMvpE,IAEA42E,WACN0Q,IACC8C,GAAQhhB,GAAQ2lB,EAAUC,GAC5B9lB,MAAMmhB,GAAW1B,EAAMvf,EAAMz6D,EAAOkxC,eAGnC0nC,GACHlH,EAAQjX,aAGLse,GACHgG,EAAQ9sF,KAAKitF,GAAalF,EAAMvf,eAG7Boe,QACAC,QACAE,QACAC,QACAC,QACAC,QACAC,QACAC,GACH+G,EAAQ7lB,MAAME,EAAKC,QACnB2lB,EAAQ9lB,MAAME,EAAKC,sBAInB6V,EAAWhW,MAAME,EAAKC,WAKxBqkB,EAAQhuF,OAAQ,OAEZwK,EAAI,GACVwjF,EAAQ3pF,SAAQ+xB,KACdm7C,EAASn7C,EAAKm7C,QAAU+V,MACTtB,KAAOx7E,EAAE+mE,KAAY/mE,EAAE+mE,GAAU,KAAKrwE,KAAKk1B,UAGvD,MAAMm7C,KAAU/mE,EAAG,OAChB+I,EAAI/I,EAAE+mE,GACZoa,GAAW1C,EAAM11E,EAAGu6E,GAAav6E,EAAGg+D,EAAQ/vE,EAAEwsF,QAASqB,EAASC,EAASrgF,EAAOkxC,IAIlF6tC,EAAQ3pF,SAAQ+xB,UACRp1B,EAAIo1B,EAAKuzC,UAEV3oE,EAAE4pE,OAAOx0C,EAAKi4D,WACjBj4D,EAAKuzC,OAASvzC,EAAKi4D,QACnBpF,EAAKpO,MAAMzkD,GAEXA,EAAKuzC,OAAS3oE,EACdioF,EAAKpO,MAAMzkD,IAGT50B,EAAE+tF,UAAY/tF,EAAE+tF,SAASj+E,OAASk3E,UAI5BpyD,EAAKm7C,aACN8V,QACAC,GACH9H,EAAWp7E,IAAIpD,EAAEm2C,GAAI,GAAG/yC,IAAIpD,EAAE4iC,GAAI,cAG/BwjD,QACAG,GACH/H,EAAWp7E,IAAI,EAAGpD,EAAEo2C,IAAIhzC,IAAI,EAAGpD,EAAEs2C,SAGrCkoC,EAAWhW,MAAMxoE,MAMvBw+E,EAAWhW,MAAM6lB,GAAS7lB,MAAM8lB,GAE5B3O,GACFnB,EAAWhW,MArOf,SAAqByf,EAAMvf,EAAMz6D,EAAOkxC,EAAQq/B,OAe1CgQ,EAdAp2E,EAAQswD,EAAKG,MAAM,GACnB5zB,EAAQ78B,EAAM68B,MACds7B,EAASn4D,EAAMm4D,OACfprE,EAASiT,EAAMjT,OACfkV,EAASjC,EAAMiC,OACfT,EAAUxB,EAAMwB,QAChB+lE,EAAQvnE,EAAMywD,MAAM,GAAGA,MAAM,GAC7B4lB,EAAWr2E,EAAMywD,MAAM,IAAMzwD,EAAMywD,MAAM,GAAGA,MAAM,GAClDv2D,EAAMi+D,IAAW8V,IAAQ9V,IAAW+V,GAAQnnC,EAASlxC,EACrDoE,EAAQ,EACR1O,EAAI,EACJ2Q,EAAI,EACJw+D,EAAK,EACLC,EAAK,KAGL99B,IAAU0xC,GACZpW,IAAW8V,IAAQh0E,EAAQmsE,EAAWloC,GAAIhkC,EAAMksE,EAAWpoC,IAAMm6B,IAAW+V,IAASj0E,EAAQmsE,EAAWpoC,GAAI9jC,EAAMksE,EAAWloC,KAAOjkC,EAAQmsE,EAAWroC,GAAI7jC,EAAMksE,EAAW57C,IACnK2tC,IAAW8V,KACpBh0E,EAAQ8sC,EAAQ7sC,EAAM,GAGxBk8E,EAAMrpF,IAAWqhF,GAAQn0E,EAAQlN,IAAWuhF,GAAMp0E,GAAOD,EAAQC,GAAO,EAEpEm8E,GAAYA,EAASn/E,KAAM,QAErBihE,QACD6V,QACAG,GACHxT,EAAK4M,EAAMhX,OAAOxpB,SAAWvlC,aAG1BysE,GACHvT,EAAK6M,EAAMhX,OAAO16D,QAAU2L,aAGzB0sE,GACHxT,GAAM6M,EAAMhX,OAAO16D,QAAU2L,EAIjCo7D,GAAWjsE,QAAQy/D,MAAMimB,EAAS9lB,QAClCqM,GAAW5jE,UAAU0hE,GAAM2b,EAAS9qF,GAAK,GAAIovE,GAAM0b,EAASn6E,GAAK,IAE7DzL,GAAI4lF,EAAU,IAAK3b,GAAMjqE,GAAI4lF,EAAU,IAAK1b,KAC9CkV,EAAKpO,MAAM4U,GACXA,EAAS9lB,OAAO5/D,QAAQy/D,MAAMwM,IAC9ByZ,EAAS/lB,KAAKC,OAAO5/D,QAAQy/D,MAAMwM,IACnCiT,EAAKpO,MAAM4U,IAGbzZ,GAAWjsE,QAAQy/D,MAAMimB,EAAS9lB,aAElCqM,GAAWjsE,eAGbisE,GAAWxM,MAAMmX,EAAMhX,QAEf4H,QACD6V,GACHziF,EAAI6qF,EACJl6E,EAAIkqE,EAAWpoC,GAAK4+B,GAAW71B,SAAW9kC,aAGvCgsE,GACH1iF,EAAI66E,EAAWroC,GAAK6+B,GAAW/mE,QAAUoM,EACzC/F,EAAIk6E,aAGDlI,GACH3iF,EAAI66E,EAAW57C,GAAKoyC,GAAW/mE,QAAUoM,EACzC/F,EAAIk6E,aAGDjI,GACH5iF,EAAI6qF,EACJl6E,EAAIkqE,EAAWloC,GAAKj8B,gBAIpB1W,EAAIyU,EAAMzU,EACV2Q,EAAI8D,EAAM9D,SAGVzL,GAAIuP,EAAO,IAAKzU,GAAKkF,GAAIuP,EAAO,IAAK9D,KACvC0gE,GAAW5jE,UAAUzN,EAAG2Q,GACxB2zE,EAAKpO,MAAMzhE,GACXA,EAAMuwD,OAAO5/D,QAAQy/D,MAAMwM,IAC3BtM,EAAKC,OAAO5/D,QAAQy/D,MAAMwM,IAC1BiT,EAAKpO,MAAMzhE,IAGNA,EAAMuwD,OAwIM+lB,CAAYzG,EAAMtI,EAAO1xE,EAAOkxC,EAAQq/B,IAIvDpmE,EAAMgwD,MACRoW,EAAW31E,IAAI,EAAG,EAAGuP,EAAMnK,OAAS,EAAGmK,EAAM+mC,QAAU,IAO3D,SAAwB8oC,EAAM7vE,EAAOomE,EAAYh+E,SACzC+pF,EAAO/pF,EAAE+tF,UAAY,GACrBj+E,EAAOi6E,EAAKj6E,QACd23E,EAAK0G,UAAY,IAAMr+E,EAAM,WAC7Bs+E,EAAY3G,EAAKvO,OACjBmV,EAAa5G,EAAKtO,QAClB1rE,EAAQrK,KAAKuC,IAAI,EAAGiS,EAAMnK,OAAS,GACnC7E,EAAOxF,KAAKuC,IAAI,EAAGvC,KAAK2I,MAAMiyE,EAAWroC,KACzCgJ,EAASv7C,KAAKuC,IAAI,EAAGiS,EAAM+mC,QAAU,GACrCo4B,EAAM3zE,KAAKuC,IAAI,EAAGvC,KAAK2I,MAAMiyE,EAAWpoC,WACtC/sC,EAAQzF,KAAKuC,IAAI,EAAGvC,KAAK2I,KAAKiyE,EAAW57C,GAAK30B,IAC9CqrE,EAAS11E,KAAKuC,IAAI,EAAGvC,KAAK2I,KAAKiyE,EAAWloC,GAAK6I,OAEjDorC,EAAKrgB,WAAaqd,GAAS,OACvB3tE,EAAUquE,EAAKruE,UACrBg1E,GAAah1E,EAAQxQ,KAAOwQ,EAAQvQ,MACpCwlF,GAAcj1E,EAAQ29D,IAAM39D,EAAQ0/D,OAGlChpE,IAAS00E,IACX57E,EAAO,EACPmuE,EAAM,EACNtpE,EAAQ2gF,EACRzvC,EAAS0vC,GACAv+E,IAASk3E,IAClBv5E,EAAQrK,KAAKuC,IAAI,EAAGyoF,EAAYxlF,EAAOC,GACvC81C,EAASv7C,KAAKuC,IAAI,EAAG0oF,EAAatX,EAAM+B,IAC/BhpE,IAASm3E,IAClBx5E,EAAQrK,KAAKuC,IAAI,EAAGyoF,EAAYxlF,EAAOC,GACvCwlF,EAAa1vC,EAASo4B,EAAM+B,GACnBhpE,IAASo3E,IAClBkH,EAAY3gF,EAAQ7E,EAAOC,EAC3B81C,EAASv7C,KAAKuC,IAAI,EAAG0oF,EAAatX,EAAM+B,IAz1ChC,QA01CChpE,IACTs+E,EAAY3gF,EAAQ7E,EAAOC,EAC3BwlF,EAAa1vC,EAASo4B,EAAM+B,GAG9B2O,EAAK6G,YAAYF,EAAWC,EAAY5gF,EAAOkxC,EAAQ,CAAC/1C,EAAMmuE,GAAMgT,EAAK/Q,QAzCzEuV,CAAe9G,EAAM7vE,EAAOomE,EAAYh+E,GA7HpCwuF,CAAY/G,EAAM7vE,EAAO5X,MAQ/B,SAAsB4X,UAMbA,GAA6B,iBAApBA,EAAMswD,KAAKwN,KAXlB+Y,CAAazuF,EAAEkoE,KAAKtwD,OAAS8a,EAAML,SAAWK,8GCvsCzD,SAASg8D,GAAUp7D,GACjB4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAmD7B,SAASq7D,GAASr7D,GAChB4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAG7B,SAASs7D,YACAl0D,GAAO,IAgGhB,SAASm0D,GAAOv7D,GACd4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GA4F7B,SAASw7D,GAAcx7D,GACrB4G,GAAUt5B,KAAKK,KAAM,GAAIqyB,GApP3BrqB,GAASylF,GAAWx0D,GAAW,CAC7B5pB,UAAUtQ,EAAG0yB,MACPzxB,KAAKqB,QAAUtC,EAAEizB,kBACZP,EAAMqC,oBAGXxd,EAASmb,EAAMwD,SAAS3e,SACxBzV,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,UAAYpF,EAAMqF,WACzCzjB,EAAQrT,KAAKqB,MACbsC,EAAQ5E,EAAE4E,MAEVyP,EAAQopD,GAAU74D,EADC,MAAX5E,EAAEqU,MAAgBrU,EAAEiV,OAASjV,EAAEiV,OAAOzW,OAAS,GAAKwB,EAAEqU,MAC9BrU,EAAEi9B,SAClCxtB,EAASzP,EAAEyP,QAAUwjD,GAAW17C,EAAQ3S,EAAOyP,EAAOrU,EAAEwW,gBAAiBxW,EAAE6Y,aAAc7Y,EAAEiV,QAC3FA,EAASjV,EAAEiV,OAAS0oD,GAAW/4D,EAAO5E,EAAEiV,OAAQZ,GAASwpD,GAAWj5D,EAAOyP,UAC3EC,IAAOxS,EAAImwB,IAAM3d,GACrBA,EAAQW,EAAOtS,KAAI,CAACL,EAAOxD,IAAM47B,GAAO,CACtCvlB,MAAOrW,GAAKmW,EAAOzW,OAAS,GAAK,GACjC8D,MAAOA,EACPw8E,MAAOrvE,EAAOnN,OAGZtC,EAAEujF,OAASjvE,EAAM9V,QAGnB8V,EAAM5U,KAAKg7B,GAAO,CAChBvlB,OAAQ,EACRouE,MAAO,CACLjhF,MAAOgS,EAAM,GAAGhS,OAElBw8E,MAAO,MAIXh9E,EAAIC,OAASuS,EACbxS,EAAIc,IAAM0R,OACLhS,MAAQgS,EACNxS,KA6BXmH,GAAS0lF,GAAUz0D,GAAW,CAC5B5pB,UAAUtQ,EAAG0yB,OACPxB,EAAKwB,EAAMwD,SACXp0B,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,UAAYpF,EAAMqF,WACzCnD,EAAO50B,EAAE40B,MAAQg6D,GACjBltF,EAAM1B,EAAE0B,KAAO8vB,GACf7uB,EAAM1B,KAAKqB,aAGXjB,EAAQS,EAAI2wB,UACd3wB,EAAI2wB,OAAS,MAGX9vB,IAAQ3C,EAAEizB,SAAS,QAAUP,EAAMO,SAASvxB,KAC9C3C,EAAM,8DAGH4D,IACH+vB,EAAQA,EAAMwF,cACT51B,MAAQK,EA3BnB,SAAgBjB,SACRiB,EAAMoF,KAAUC,MAAKe,GAAKA,EAAE0yE,cAElC94E,EAAI28D,OAASv2D,GAAKpG,EAAI9C,IAAI6B,EAAIqH,IAEvBpG,EAsBgBosF,CAAOrtF,IAG5BgxB,EAAMoE,MAAMpE,EAAM0E,KAAKruB,UACfvG,EAAId,EAAIqH,OACV5F,EAAIR,EAAI9C,IAAI2C,GAEZW,EACEA,EAAEs4E,MACJ94E,EAAIwF,QACJrG,EAAIc,IAAIlD,KAAKyD,IAEbrB,EAAIowB,IAAIxyB,KAAKyD,IAGfA,EAAIyxB,EAAK7rB,GACTpG,EAAI0F,IAAI7F,EAAGW,GACXrB,EAAIc,IAAIlD,KAAKyD,IAGfA,EAAEitB,MAAQrnB,EACV5F,EAAEs4E,MAAO,KAEX/oD,EAAMoE,MAAMpE,EAAM4E,KAAKvuB,UACfvG,EAAId,EAAIqH,GACR5F,EAAIR,EAAI9C,IAAI2C,GAEdW,IACFA,EAAEitB,MAAQrnB,EACVjH,EAAIowB,IAAIxyB,KAAKyD,OAGjBuvB,EAAMoE,MAAMpE,EAAM2E,KAAKtuB,UACfvG,EAAId,EAAIqH,GACR5F,EAAIR,EAAI9C,IAAI2C,GAEduG,IAAM5F,EAAEitB,OAAUjtB,EAAEs4E,OACtB35E,EAAImwB,IAAIvyB,KAAKyD,GACbA,EAAEs4E,MAAO,IACP94E,EAAIwF,UAGNuqB,EAAMyE,QAAQzE,EAAMgF,UAAU51B,EAAI+wB,SAAS,UAE3CH,EAAMlqB,SAAWxI,EAAEwI,OAAS7F,EAAIwF,MAAQ+oB,EAAGiJ,iBAC7CjJ,EAAGuH,SAAS91B,EAAI6F,OAGX1G,KAqBXmH,GAAS4lF,GAAQ30D,GAAW,CAC1B5pB,UAAUtQ,EAAG0yB,OACP5wB,EAAM4wB,EAAMsF,KAAKtF,EAAM+E,SACvBu3D,EAAOhvF,EAAEkyB,MAAO,EAChB+8D,EAAWjvF,EAAEivF,SACbx8D,EAASC,EAAMD,UAIfpxB,EAAQoxB,GAAS,KACf3wB,EAAIq1B,YAAa1E,EAAOzY,OAAM9S,GAAK+nF,EAAS/nF,YAIvCwrB,EAAMqC,gBAHbtC,EAASA,EAAO,GAChB3wB,EAAI2wB,OAAS,SAOby8D,EAAqB,UAAXz8D,EACV1nB,EAASkkF,EAASlkF,QAAU3K,EAC5B+uF,EAAQF,EAASE,OAAS/uF,EAC1Bq7E,EAAOwT,EAASxT,MAAQr7E,EACxBiI,GAAOoqB,IAAWy8D,EAAUD,EAASx8D,GAAU1nB,IAAW3K,KAE1DsyB,EAAMyE,QAAQzE,EAAM0E,OACtB1E,EAAMoE,MAAMpE,EAAM0E,KAAKruB,IACrBomF,EAAMpmF,EAAG/I,GACT+K,EAAOhC,EAAG/I,MAEZ8B,EAAI+wB,SAASs8D,EAAM9sF,QACnBP,EAAI+wB,SAAS9nB,EAAO1I,QAEhBgG,IAAQjI,GAASiI,IAAQ0C,IAC3B2nB,EAAMoE,MAAMpE,EAAM0E,KAAKruB,IACrBV,EAAIU,EAAG/I,MAET8B,EAAI+wB,SAASxqB,EAAIhG,UAIjBqwB,EAAMyE,QAAQzE,EAAM2E,MAAQokD,IAASr7E,IACvCsyB,EAAMoE,MAAMpE,EAAM2E,KAAKtuB,IACrB0yE,EAAK1yE,EAAG/I,MAEV8B,EAAI+wB,SAAS4oD,EAAKp5E,SAGhB6sF,GAAW7mF,IAAQjI,EAAO,OACtB0zB,EAAOpB,EAAM4E,KAAOt3B,EAAEizB,WAAaP,EAAMkF,OAAS,GAEpDs3D,GACFx8D,EAAMoE,MAAMhD,GAAM/qB,UACVmpB,EAAMi9D,EAAMpmF,EAAG/I,IAAMgvF,GACvB3mF,EAAIU,EAAG/I,IAAMkyB,IAAKpwB,EAAIowB,IAAIxyB,KAAKqJ,MAEjCjH,EAAIowB,IAAI1zB,QAAQsD,EAAI+wB,SAASs8D,EAAM9sF,SAEvCqwB,EAAMoE,MAAMhD,GAAM/qB,KACZV,EAAIU,EAAG/I,IAAMgvF,IAAMltF,EAAIowB,IAAIxyB,KAAKqJ,MAIpCjH,EAAIowB,IAAI1zB,QAAQsD,EAAI+wB,SAASxqB,EAAIhG,eAGhCP,EAAIq1B,UAAYr1B,EAAM4wB,EAAMqC,mBA2BvC9rB,GAAS6lF,GAAe50D,GAAW,CACjC5pB,UAAUtQ,EAAG0yB,MACO,MAAdzxB,KAAKqB,QAAkBtC,EAAEizB,kBACpBP,EAAMqC,oBAaXjxB,EACAsrF,EACAlnF,EACA2R,EACAnN,EAdA6K,EAASmb,EAAMwD,SAAS3e,SACxBzV,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,UAAYpF,EAAMqF,WACzCswC,EAAQpnE,KAAKqB,MACbwN,EAAO9P,EAAE8P,MAAQwtD,GACjB14D,EAAQ5E,EAAE4E,MACV0sC,GAAStxC,EAAEsxC,MACXj9B,EAAQopD,GAAU74D,EAAkB,MAAX5E,EAAEqU,MAAgB,EAAIrU,EAAEqU,MAAOrU,EAAEi9B,SAC1DoyD,IAAUrvF,EAAEiV,QAAUnF,IAASwtD,GAC/B7tD,EAASzP,EAAEyP,QAAU4uD,GAAY9mD,EAAQ3S,EAAOyP,EAAOvE,EAAM9P,EAAEwW,gBAAiBxW,EAAE6Y,WAAYw2E,GAC9Fp6E,EAASjV,EAAEiV,QAAUipD,GAAYt5D,EAAOyP,UAMxCg0D,IAAOvmE,EAAImwB,IAAMo2C,GAEjBv4D,IAASwtD,IACPhsB,GAASr8B,EAAOzW,OAAS8yC,GAC3B5e,EAAMwD,SAASh1B,KAAK,uDACpBmnE,EAAQpzD,EAAOtU,MAAM,EAAG2wC,EAAQ,GAChC5kC,GAAW,GAEX27D,EAAQpzD,EAGNlP,EAAWmC,EAAOlI,EAAEkI,OAEjBlI,EAAEiV,QAA8B,IAApBrQ,EAAMyjE,EAAM,MAC3BA,EAAQA,EAAM1nE,MAAM,IAItBkZ,EAASwuD,EAAMxmE,QAAO,CAAC8D,EAAKrD,IAAUc,KAAKuC,IAAIA,EAAKuC,EAAK5F,EAAOtC,KAAK,IAErEkI,EAAOzD,EAASoV,EAAS3R,GAAQ,GAGnCmgE,EAAQA,EAAM1lE,KAAI,CAACL,EAAO6S,IAAUulB,GAAO,CACzCvlB,MAAOA,EACP2pE,MAAOrvE,EAAOnN,EAAO6S,EAAOkzD,GAC5B/lE,MAAOA,EACPuX,OAAQA,EACR3R,KAAMA,EAAK5F,EAAOtC,OAGhB0M,IACFA,EAAWuI,EAAOozD,EAAM7pE,QACxB6pE,EAAM3oE,KAAKg7B,GAAO,CAChBvlB,MAAOkzD,EAAM7pE,OACbsgF,MAAQ,IAAQ7pE,EAAOzW,OAAS6pE,EAAM7pE,iBACtC8D,MAAOoK,EACPmN,OAAQA,EACR3R,KAAMA,EAAKwE,EAAU1M,QT6NR,aS1NR8P,GACThM,EAASc,EAAMd,SAAUsrF,EAAWv2B,GAAcj0D,EAAOd,EAAO,GAAIhB,EAAKgB,IAGrEmR,EAAOzW,OAAS,IAAMwB,EAAEiV,QAAUnR,EAAO,KAAOhB,EAAKgB,KACvDmR,EAAS,CAACnR,EAAO,GAAIhB,EAAKgB,KAG5BukE,EAAQpzD,EAAOtS,KAAI,CAACL,EAAO6S,IAAUulB,GAAO,CAC1CvlB,MAAOA,EACP2pE,MAAOrvE,EAAOnN,EAAO6S,EAAOF,GAC5B3S,MAAOA,EACPgtF,KAAMF,EAAS9sF,SAGjB4F,EAAO+M,EAAOzW,OAAS,EACvB4wF,ETkaN,SAAuBxqF,SACfd,EAASc,EAAMd,SACfuQ,EAAQvQ,EAAOtF,OAAS,MAC1BqH,GAAM/B,EAAO,GACbgC,GAAMhD,EAAKgB,GACX8B,EAAOE,EAAKD,KAEZjB,EAAMkL,OAASsmD,GAAW,OACtBm5B,EAASl7E,EAAQzO,EAAOyO,EAAQ,GACtCxO,GAAM0pF,EACNzpF,GAAMypF,EACN3pF,EAAOE,EAAKD,SAGPvD,IAAUA,EAAQuD,GAAMD,EShbhB4pF,CAAc5qF,GACzByjE,EAAQpzD,EAAOtS,KAAI,CAACL,EAAO6S,IAAUulB,GAAO,CAC1CvlB,MAAOA,EACP2pE,MAAOrvE,EAAOnN,EAAO6S,EAAOF,GAC5B3S,MAAOA,EACPgtF,KAAMn6E,EAAQi6E,EAAS9sF,GAAS,EAChCmtF,MAAOt6E,IAAUjN,EAAO,EAAIknF,EAASn6E,EAAOE,EAAQ,SAIxDrT,EAAIC,OAASsmE,EACbvmE,EAAIc,IAAMylE,OACL/lE,MAAQ+lE,EACNvmE,KAKX,MAAM4tF,GAAU3mF,GAAKA,EAAEhH,OAAOoB,EAExBwsF,GAAU5mF,GAAKA,EAAEhH,OAAO+R,EAExB87E,GAAU7mF,GAAKA,EAAEkZ,OAAO9e,EAExB0sF,GAAU9mF,GAAKA,EAAEkZ,OAAOnO,EAQ9B,SAASg8E,GAASx8D,GAChB4G,GAAUt5B,KAAKK,KAAM,GAAIqyB,GAE3Bw8D,GAASzzD,WAAa,MACZ,oBACI,WACE,UAEJ,CAAC,MACD,eACA,gBACG,YACV,MACO,eACA,gBACG,YACV,MACO,eACA,gBACG,YACV,MACO,eACA,gBACG,YACV,MACO,cACA,eACG,kBACD,CAAC,aAAc,WAAY,WACpC,MACO,aACA,eACG,cACD,CAAC,OAAQ,MAAO,QAAS,WAAY,eAC9C,MACO,eACA,UACP,MACO,UACA,iBACG,UAGfpzB,GAAS6mF,GAAU51D,GAAW,CAC5B5pB,UAAUtQ,EAAG0yB,OACP4/C,EAAKtyE,EAAE0vF,SAAWA,GAClBnd,EAAKvyE,EAAE2vF,SAAWA,GAClB1C,EAAKjtF,EAAE4vF,SAAWA,GAClB1C,EAAKltF,EAAE6vF,SAAWA,GAClBjrD,EAAK5kC,EAAE4kC,IAAM,OACbmrC,EAAS/vE,EAAE+vE,QAAU,WACrB1I,EAAQrnE,EAAEqnE,OAAS,OACnB9oE,EAAOwxF,GAAMlwF,IAAIwnE,EAAQ,IAAM0I,IAAWggB,GAAMlwF,IAAIwnE,UAEnD9oE,GACHQ,EAAM,8BAAgCiB,EAAEqnE,OAASrnE,EAAE+vE,OAAS,IAAM/vE,EAAE+vE,OAAS,KAG/Er9C,EAAMoE,MAAMpE,EAAMmF,QAAQ9uB,IACxBA,EAAE67B,GAAMrmC,EAAK+zE,EAAGvpE,GAAIwpE,EAAGxpE,GAAIkkF,EAAGlkF,GAAImkF,EAAGnkF,OAEhC2pB,EAAML,OAAOryB,EAAEizB,YAAYJ,SAAS+R,MAK/C,MAAMxzB,GAAO,CAACkhE,EAAIC,EAAI0a,EAAIC,IAAO,IAAM5a,EAAK,IAAMC,EAAK,IAAM0a,EAAK,IAAMC,EAIlEn8E,GAAM,CAACuhE,EAAIC,EAAI0a,EAAIC,SACnBv8E,EAAKs8E,EAAK3a,EACVzhE,EAAKq8E,EAAK3a,EACVyd,EAAK5sF,KAAK6Q,KAAKtD,EAAKA,EAAKE,EAAKA,GAAM,QAEjC,IAAMyhE,EAAK,IAAMC,EAAK,IAAMyd,EAAK,IAAMA,EAAK,IAD1C,IAAM5sF,KAAKohC,MAAM3zB,EAAIF,GAAMvN,KAAK26B,GAClC,QAAsEkvD,EAAK,IAAMC,GAKpFpzC,GAAQ,CAACw4B,EAAIC,EAAI0a,EAAIC,WACnBv8E,EAAKs8E,EAAK3a,EACVzhE,EAAKq8E,EAAK3a,EACVvB,EAAK,IAAOrgE,EAAKE,GACjBo/E,EAAK,IAAOp/E,EAAKF,SAChB,IAAM2hE,EAAK,IAAMC,EAAK,KAAOD,EAAKtB,GAAM,KAAOuB,EAAK0d,GAAM,KAAOhD,EAAKgD,GAAM,KAAO/C,EAAKlc,GAAM,IAAMic,EAAK,IAAMC,GAqClH6C,GAAQhoF,GAAQ,MACZqJ,iBAvDI,CAACu6D,EAAIukB,EAAIC,EAAItrB,IAAOzzD,GAAK8+E,EAAK9sF,KAAK4zC,IAAI20B,GAAKukB,EAAK9sF,KAAK6zC,IAAI00B,GAAK9G,EAAKzhE,KAAK4zC,IAAIm5C,GAAKtrB,EAAKzhE,KAAK6zC,IAAIk5C,QAyDrGp/E,gBA/CI,CAAC46D,EAAIukB,EAAIC,EAAItrB,IAAO9zD,GAAIm/E,EAAK9sF,KAAK4zC,IAAI20B,GAAKukB,EAAK9sF,KAAK6zC,IAAI00B,GAAK9G,EAAKzhE,KAAK4zC,IAAIm5C,GAAKtrB,EAAKzhE,KAAK6zC,IAAIk5C,UAiDjGr2C,kBAvCI,CAAC6xB,EAAIukB,EAAIC,EAAItrB,IAAO/qB,GAAMo2C,EAAK9sF,KAAK4zC,IAAI20B,GAAKukB,EAAK9sF,KAAK6zC,IAAI00B,GAAK9G,EAAKzhE,KAAK4zC,IAAIm5C,GAAKtrB,EAAKzhE,KAAK6zC,IAAIk5C,4BAEjG,CAAC7d,EAAIC,EAAI0a,EAAIC,IAAO,IAAM5a,EAAK,IAAMC,EAAK,IAAM2a,EAAK,IAAMD,wBAE3D,CAAC3a,EAAIC,EAAI0a,EAAIC,IAAO,IAAM5a,EAAK,IAAMC,EAAK,IAAM0a,EAAK,IAAMC,sBAE3D,CAACvhB,EAAIukB,EAAIC,EAAItrB,WACpBurB,EAAKhtF,KAAK4zC,IAAI20B,GACd0kB,EAAKjtF,KAAK6zC,IAAI00B,GACd2kB,EAAKltF,KAAK4zC,IAAIm5C,GACdzM,EAAKtgF,KAAK6zC,IAAIk5C,SAEb,IAAMD,EAAKE,EAAK,IAAMF,EAAKG,EAAK,IAAMH,EAAK,IAAMA,EAAK,UADlD9sF,KAAKI,IAAI2sF,EAAKxkB,GAAMvoE,KAAK26B,GAAKoyD,GAAMxkB,EAAKwkB,EAAKxkB,GACoB,EAAI,GAAK,IAAMukB,EAAKI,EAAK,IAAMJ,EAAKxM,EAAK,IAAM7e,EAAKyrB,EAAK,IAAMzrB,EAAK6e,yBAGjI,CAACpR,EAAIC,EAAI0a,EAAIC,WACvB73E,GAAKi9D,EAAK2a,GAAM,QACf,IAAM3a,EAAK,IAAMC,EAAK,IAAMl9D,EAAI,IAAMk9D,EAAK,IAAMl9D,EAAI,IAAM63E,EAAK,IAAMD,EAAK,IAAMC,uBAGxE,CAAC5a,EAAIC,EAAI0a,EAAIC,WACvB73E,GAAKk9D,EAAK2a,GAAM,QACf,IAAM5a,EAAK,IAAMC,EAAK,IAAMD,EAAK,IAAMj9D,EAAI,IAAM43E,EAAK,IAAM53E,EAAI,IAAM43E,EAAK,IAAMC,qBAGxE,CAACvhB,EAAIukB,EAAIC,EAAItrB,WACvBurB,EAAKhtF,KAAK4zC,IAAI20B,GACd0kB,EAAKjtF,KAAK6zC,IAAI00B,GACd2kB,EAAKltF,KAAK4zC,IAAIm5C,GACdzM,EAAKtgF,KAAK6zC,IAAIk5C,GACdI,GAAML,EAAKrrB,GAAM,QAChB,IAAMqrB,EAAKE,EAAK,IAAMF,EAAKG,EAAK,IAAME,EAAKH,EAAK,IAAMG,EAAKF,EAAK,IAAME,EAAKD,EAAK,IAAMC,EAAK7M,EAAK,IAAM7e,EAAKyrB,EAAK,IAAMzrB,EAAK6e,KA4BpI,SAAS8M,GAAIl9D,GACX4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAE7Bk9D,GAAIn0D,WAAa,MACP,eACI,WACE,UAEJ,CAAC,MACD,aACA,SACP,MACO,kBACA,iBACG,GACV,MACO,gBACA,iBACG,mBACV,MACO,YACA,mBACG,GACV,MACO,UACA,gBACC,SACC,UACC,CAAC,aAAc,eAG9BpzB,GAASunF,GAAKt2D,GAAW,CACvB5pB,UAAUtQ,EAAG0yB,OAaP5zB,EACAiK,EACArC,EAdAk+B,EAAK5kC,EAAE4kC,IAAM,CAAC,aAAc,YAC5B+S,EAAa/S,EAAG,GAChBiT,EAAWjT,EAAG,GACdjmC,EAAQqB,EAAErB,OAASuB,EACnB2R,EAAQ7R,EAAE23C,YAAc,EACxBvjC,EAAqB,MAAdpU,EAAE63C,SAAmB73C,EAAE63C,SAAW,EAAIz0C,KAAK26B,GAClDtQ,EAAOiF,EAAM3wB,OACbkT,EAASwY,EAAK9qB,IAAIhE,GAClBS,EAAI6V,EAAOzW,OACXkE,EAAImP,EACJrP,GAAK4R,EAAOvC,GAASoE,GAAIhB,GACzBE,EAAQ1P,GAAMrG,OAKdY,EAAE4d,MACJzI,EAAMyI,MAAK,CAAClb,EAAGlD,IAAMyV,EAAOvS,GAAKuS,EAAOzV,KAGrCV,EAAI,EAAGA,EAAIM,IAAKN,EACnB4H,EAAIuO,EAAOE,EAAMrW,KACjBiK,EAAI0kB,EAAKtY,EAAMrW,KACb64C,GAAcj1C,EAChBqG,EAAE8uC,GAAYn1C,GAAKgE,EAAIlE,cAGpBF,MAAQ2S,EACNyd,EAAML,OAAOryB,EAAEizB,YAAYJ,SAAS+R,MAY/C,SAAS6rD,GAAW3gF,UACX2nD,GAAa3nD,IAASA,IAASomD,GAGxC,MAAM7/B,GAAO7pB,GAAM,CAAC,MAAO,WAAY,QAAS,OAAQ,SAAU,eAAgB,cAAe,SAAU,YAAa,YAAa,YAAa,YAAa,iBAAkB,OAAQ,OAAQ,OAAQ,QAAS,YAAa,QAAS,UAAW,cAAe,qBAOlQ,SAASkkF,GAAMp9D,GACb4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,QACtBL,UAAS,GAoHhB,SAAS09D,GAAY7gF,EAAMhM,EAAQotB,GAC7B0mC,GAAc9nD,KAGR1M,KAAKI,IAAIM,EAAOjC,QAAO,CAACpC,EAAGiH,IAAMjH,GAAKiH,EAAI,GAAK,EAAIA,EAAI,EAAI,EAAI,IAAI,MAEjE5C,EAAOtF,QACf0yB,EAAGhwB,KAAK,mCAAqCurB,GAAY3oB,YAItDA,EA+GT,SAAS8sF,GAAa33B,EAAQ3xD,EAAQ4J,UAC7BnL,EAAWkzD,KAAY3xD,GAAU4J,GAAWunD,GAAiBQ,EAAQ43B,GAAKvpF,GAAU,CAAC,EAAG,GAAI4J,IAAY+nD,EAGjH,SAAS43B,GAAK9tF,EAAOmO,UACZA,EAAUnO,EAAMpC,QAAQuQ,UAAYnO,EAW7C,SAAS+tF,GAAUx9D,GACjB4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GA7P7BrqB,GAASynF,GAAOx2D,GAAW,CACzB5pB,UAAUtQ,EAAG0yB,OACPxB,EAAKwB,EAAMwD,SACX4iC,EAAU73D,KAAKqB,MACfZ,EAmBR,SAAkB1B,OAGZZ,EAFA2J,EAAI/I,EAAE8P,KACNqD,EAAI,MAGJpK,IAAMmtD,GAAY,MAAOA,qBAU/B,SAA2Bl2D,SACnB+I,EAAI/I,EAAE8P,YACL2nD,GAAa1uD,IAAMA,IAAMktD,IAAQltD,IAAMmW,KAAQlf,EAAEi5D,QAAUj5D,EAAEyF,OAASzF,EAAEyF,MAAMjH,QAAUwB,EAAEyF,MAAMuU,MAAM1P,MAVzGymF,CAAkB/wF,KAEpBmT,EAAU,KADV/T,EAAIY,EAAEgxF,UAAYhxF,EAAEgxF,UAAUxyF,OAASwB,EAAE8D,OAAS9D,EAAE8D,OAAOtF,UAA0B,MAAfwB,EAAEixF,WAAqB,GAC/E/6B,cAAyB,IAAN92D,EAAU8xF,aAAkB,WAGvD/9E,EAAIpK,GAAK4wC,IAAQhhC,cA/Bbw4E,CAASnxF,OAMd0B,KAJAo3D,GAAWp3D,IAAQo3D,EAAQhpD,YACzBxN,MAAQw2D,EAAUl0D,GAAMlD,EAANkD,IAGb5E,EAAG,IAAKq2B,GAAK30B,GAAM,IAEjB,YAARA,GAAqB+uF,GAAW33B,EAAQhpD,MAAO,SAEnD/J,EAAW+yD,EAAQp3D,IAAQo3D,EAAQp3D,GAAK1B,EAAE0B,IAAQwvB,EAAGhwB,KAAK,+BAAiCQ,UA2JjG,SAAwBkD,EAAO5E,EAAGqU,OAC5BvE,EAAOlL,EAAMkL,KACb4E,EAAQ1U,EAAE0U,QAAS,EACnBjP,EAAQzF,EAAEyF,SAEK,MAAfzF,EAAEoxF,UACJ3rF,EA+BJ,SAA4BqK,EAAM9P,EAAGqU,GAC/BvE,IAASymD,IAAQzmD,IAASwmD,IAC5Bv3D,EAAM,qDAIJohF,GAA2B,MAAlBngF,EAAE21D,aAAuB31D,EAAE21D,aAAe31D,EAAEoZ,UAAY,EACjEgnE,EAAQtwE,IAASwmD,GAAQ,GAAuB,MAAlBt2D,EAAE01D,aAAuB11D,EAAE01D,aAAe11D,EAAEoZ,UAAY,QACnF,CAAC,EAAGpZ,EAAEoxF,UAAY37B,GAAUphD,EAAO+rE,EAAOD,IAvCvCkR,CAAmBvhF,EAAM9P,EAAGqU,QAEjC,GAAIrU,EAAEi5D,SACPxzD,EAuCN,SAAyBqK,EAAM9P,EAAGqU,OAG5Bi9E,EAFAhqF,EAAStH,EAAEuxF,aAIXlwF,EAAQrB,EAAEi5D,QACZq4B,EAAW54B,GAAkB14D,EAAEi5D,OAAQj5D,EAAEkyD,YAAalyD,EAAEwxF,mBAGxDF,EAAWr4B,GADJj5D,EAAEi5D,OAAOtgD,iBAED5Z,EAAO,6BAA4BiB,EAAEi5D,iBAItD5kD,EAAQvE,IAASsmD,GAAY/hD,EAAQ,EAAIvE,IAAS0mD,GAAaniD,EAAQ,EAAIvE,IAASogC,IAAYpgC,IAASqmD,IAAYn2D,EAAEyxF,aA7PnG,EA6PkIp9E,EAE/IwjD,GAAgB/nD,GAAQ8gF,GAAaU,EAAUhqF,EAAQtH,EAAEkR,SAAWnL,EAAWurF,GAAY14B,GAAqBg4B,GAAaU,EAAUhqF,GAAS+M,GAASvE,IAASumD,GAAUi7B,EAAWA,EAAS3wF,MAAM,EAAG0T,GAvDpMq9E,CAAgB5hF,EAAM9P,EAAGqU,GAE7BtO,EAAWN,IAAQ,IACjBb,EAAMu6C,oBACDv6C,EAAMu6C,aAAa15C,GAE1B1G,EAAO,cAAa+Q,sDAMxBrK,GAASoyD,GAAgB/nD,UACpBlL,EAAMu6C,aAAauZ,GAAkBm4B,GAAKprF,EAAOzF,EAAEkR,SAAUlR,EAAEkyD,YAAalyD,EAAEwxF,mBAInF/rF,GAASzF,EAAEkyD,aAAettD,EAAMstD,YAClCttD,EAAMstD,YAAYA,GAAYlyD,EAAEkyD,YAAalyD,EAAEwxF,mBACtCzrF,EAAWnB,EAAM8P,OAC1B9P,EAAM8P,MAAMA,GACH3O,EAAWnB,EAAMkuD,aAC1BluD,EAAMstD,YAAYx9C,EAAQq+C,GAAmB4+B,IAG3ClsF,GAAOb,EAAMa,MAAMorF,GAAKprF,EAAOzF,EAAEkR,UA1LnC0gF,CAAe94B,EAAS94D,EA+G5B,SAAuB4E,EAAO5E,EAAGqU,OAC3By2B,EAAO9qC,EAAE8qC,QAETA,IAASzpC,EAAQypC,GAAO,OAEpBhnC,EAASc,EAAMd,SACf+B,EAAK/B,EAAO,GACZgC,EAAKhD,EAAKgB,GACVyQ,EAAOu2B,EAAKv2B,SACd1C,EAAsB,MAAdi5B,EAAKj5B,MAAgBhM,EAAKilC,EAAKj5B,MACvCuC,EAAoB,MAAb02B,EAAK12B,KAAetO,EAAKglC,EAAK12B,KACpCG,GAAMxV,EAAM,+CACb8S,EAAQhM,IAAIgM,EAAQ0C,EAAOnR,KAAK2I,KAAKlG,EAAK0O,IAC1CH,EAAOtO,IAAIsO,EAAOG,EAAOnR,KAAKwR,MAAM9O,EAAKyO,IAC7Cu2B,EAAOrlC,GAAMoM,EAAOuC,EAAOG,EAAO,EAAGA,GAGnCu2B,EAEFlmC,EAAMkmC,KAAOA,EACJlmC,EAAMkmC,aAERlmC,EAAMkmC,KAIXlmC,EAAMkL,OAAS0mD,KACZ1rB,EAGO9qC,EAAE8D,QAAW9D,EAAE6xF,YAEzBjtF,EAAMd,OAAOgnC,GACbz2B,EAAQy2B,EAAKtsC,QAJboG,EAAMkmC,KAAOlmC,EAAMd,iBAShBuQ,EArJsBy9E,CAAch5B,EAAS94D,EA0BtD,SAAyB4E,EAAO5E,EAAGkxB,SAE3B6gE,EAkDR,SAAmBntF,EAAOmtF,EAAK7gE,UACzB6gE,GACFntF,EAAMd,OAAO6sF,GAAY/rF,EAAMkL,KAAMiiF,EAAK7gE,IACnC6gE,EAAIvzF,SAEH,EAvDEwyF,CAAUpsF,EAAO5E,EAAE6xF,UAAW3gE,MACtC6gE,GAAO,EAAG,OAAOA,MAIjB3yF,EACA8T,EAJApP,EAAS9D,EAAE8D,OACXgM,EAAOlL,EAAMkL,KACb7P,EAAOD,EAAEC,WAAmBmI,IAAXpI,EAAEC,MArEzB,SAAqB2E,SACbkL,EAAOlL,EAAMkL,YACXlL,EAAMkmC,OAASh7B,IAAS6pC,IAAU7pC,IAASgmD,IAAOhmD,IAASimD,IAmEtBi8B,CAAYptF,OAGpDd,EAAQ,OAAO,EAEhB2sF,GAAW3gF,IAAS9P,EAAEoZ,SAAWtV,EAAO,KAAOhB,EAAKgB,KACtDA,EAiDJ,SAAmBgM,EAAMhM,EAAQ2B,EAAOmG,EAAKhI,EAAUa,OACjDmB,EAAOxC,KAAKI,IAAIV,EAAK2C,GAASA,EAAM,IACpCiF,EAAO9E,GAAQA,EAAO,EAAIgG,GAC1BuH,EAAIrD,IAAS+lD,GAAM9wD,EAAQjB,EAAQ,KAAM4G,GAAQoF,IAASimD,GAAO/wD,EAAQlB,EAAQ,KAAM4G,EAAM,IAAOoF,IAASgmD,GAAM9wD,EAAQlB,EAAQ,KAAM4G,EAAM9G,GAAY,GAAKkM,IAASkmD,GAAS/wD,EAAWnB,EAAQ,KAAM4G,EAAMjG,GAAY,GAAKK,EAAWhB,EAAQ,KAAM4G,UAC/P5G,EAASA,EAAOnD,SACT,GAAKwS,EAAE,GACdrP,EAAOA,EAAOtF,OAAS,GAAK2U,EAAE,GACvBrP,EAxDImuF,CAAUniF,EAAMhM,EAAQ9D,EAAEyF,MAAOzF,EAAEoZ,QAASpZ,EAAE4D,SAAU5D,EAAEyE,eAIjExE,GAAuB,MAAfD,EAAEkyF,WAAoC,MAAflyF,EAAEmyF,WAAoC,MAAfnyF,EAAEixF,aAC1D7xF,GAAK0E,EAASA,EAAOnD,SAASnC,OAAS,GAAK,EAExCyB,IACE6D,EAAO,GAAK,IAAGA,EAAO,GAAK,GAC3BA,EAAO1E,GAAK,IAAG0E,EAAO1E,GAAK,IAGd,MAAfY,EAAEkyF,YAAmBpuF,EAAO,GAAK9D,EAAEkyF,WACpB,MAAflyF,EAAEmyF,YAAmBruF,EAAO1E,GAAKY,EAAEmyF,WAEpB,MAAfnyF,EAAEixF,WAAmB,OAEjBnyF,GADNoU,EAAMlT,EAAEixF,WACQntF,EAAO1E,GAAKA,EAAI,EAAI8T,EAAMpP,EAAO,GAAK,EAAI1E,EACtDN,IAAMM,GAAG8xB,EAAGhwB,KAAK,6CAA8CgS,GACnEpP,EAAOktB,OAAOlyB,EAAG,EAAGoU,GAKxBtO,EAAMd,OAAO6sF,GAAY7gF,EAAMhM,EAAQotB,IAGnCphB,IAASumD,IACXzxD,EAAMypB,QAAQruB,EAAEoyF,eAAiBC,QAAgBjqF,GAI/CpI,EAAEo9B,MAAQx4B,EAAMw4B,MAClBx4B,EAAMw4B,MAAgB,IAAXp9B,EAAEo9B,MAAiBqgC,GAAU74D,EAAO5E,EAAEo9B,OAAS,aAIrDt5B,EAAOtF,OA3EyC8zF,CAAgBx5B,EAAS94D,EAAGkxB,KAC1EwB,EAAMsF,KAAKtF,EAAMoF,UAAYpF,EAAMqF,cA6O9C9uB,GAAS6nF,GAAW52D,GAAW,CAC7B5pB,UAAUtQ,EAAG0yB,SACLR,EAAMlyB,EAAEizB,SAAS,SAAWP,EAAMyE,QAAQzE,EAAM0E,MAAQ1E,EAAMO,SAASjzB,EAAE4d,KAAK3f,SAAWy0B,EAAMO,SAAS,gBAC1Gf,GAAKQ,EAAM3wB,OAAO6b,KAAKiU,GAAc7xB,EAAE4d,YACtCqV,SAASf,GACPQ,KAKX,MAAM6/D,GAAO,OACPC,GAAS,SACTC,GAAY,YACZC,GAAY,CAAC,KAAM,MAWzB,SAASC,GAAMr/D,GACb4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAsD7B,SAASs/D,GAAYh7E,EAAOjS,EAAKhH,EAAO6R,EAAIolC,WAItC7sC,EAHAiwB,GAAQrzB,EAAMiS,EAAM3B,KAAO,EAC3BZ,EAAIuC,EAAMpZ,OACVa,EAAI,EAGDA,EAAIgW,IAAKhW,GACd0J,EAAI6O,EAAMvY,IACRmR,GAAMwoB,EACRjwB,EAAE6sC,GAAM5c,GAAQ51B,KAAKI,IAAI7E,EAAMoK,IAInC,SAAS8pF,GAAej7E,EAAOjS,EAAKhH,EAAO6R,EAAIolC,WAMzC7sC,EALAnE,EAAQ,EAAIgT,EAAM3B,IAClB+iB,EAAO,EACP3jB,EAAIuC,EAAMpZ,OACVa,EAAI,EACJqH,EAAI,EAGDrH,EAAIgW,IAAKhW,GACd0J,EAAI6O,EAAMvY,IACRmR,GAAMwoB,EACRjwB,EAAE6sC,GAAM5c,EAAOp0B,GAAS8B,GAAKtD,KAAKI,IAAI7E,EAAMoK,KAIhD,SAAS+pF,GAAUl7E,EAAOjS,EAAKhH,EAAO6R,EAAIolC,WAKpClvC,EACAqC,EALAgqF,EAAU,EACVC,EAAU,EACV39E,EAAIuC,EAAMpZ,OACVa,EAAI,EAIDA,EAAIgW,IAAKhW,GAEdqH,GAAK/H,EADLoK,EAAI6O,EAAMvY,KAGF,GACN0J,EAAEyH,GAAMwiF,EACRjqF,EAAE6sC,GAAMo9C,GAAWtsF,IAEnBqC,EAAEyH,GAAMuiF,EACRhqF,EAAE6sC,GAAMm9C,GAAWrsF,GAjGzBisF,GAAMt2D,WAAa,MACT,iBACI,WACE,UAEJ,CAAC,MACD,aACA,SACP,MACO,eACA,eACC,GACR,MACO,YACA,WACP,MACO,cACA,eACGk2D,UACD,CAACA,GAAMC,GAAQC,KACxB,MACO,UACA,gBACC,SACC,UACCC,MAGfzpF,GAAS0pF,GAAOz4D,GAAW,CACzB5pB,UAAUtQ,EAAG0yB,OAOPga,EACA5tC,EACAM,EACAuG,EATAi/B,EAAK5kC,EAAE4kC,IAAM8tD,GACbliF,EAAKo0B,EAAG,GACRgR,EAAKhR,EAAG,GACRhnB,EAAOiU,GAAc7xB,EAAE4d,MACvBjf,EAAQqB,EAAErB,OAASuB,EACnBmgF,EAAQrgF,EAAE6Z,SAAW24E,GAASI,GAAc5yF,EAAE6Z,SAAW44E,GAAYI,GAAiBC,OAM1FpmD,EA6DJ,SAAmBjf,EAAMgc,EAAS7rB,EAAMjf,OAGlCgE,EACA7D,EACAM,EACAiW,EACAtM,EACAvG,EACAuP,EACAtS,EACAkG,EAVA+mC,EAAS,GACT7sC,EAAMyG,GAAKA,EAAEyC,MAYF,MAAX0gC,EACFiD,EAAOhtC,KAAK+tB,EAAK9sB,kBAEZgC,EAAM,GAAI7D,EAAI,EAAGM,EAAIquB,EAAKjvB,OAAQM,EAAIM,IAAKN,EAC9CiK,EAAI0kB,EAAK3uB,IAETiT,EAAIpP,EADJH,EAAIinC,EAAQ9mC,IAAI9C,OAId8C,EAAIH,GAAKuP,EAAI,GACb26B,EAAOhtC,KAAKqS,IAGdA,EAAErS,KAAKqJ,OAKNvG,EAAI,EAAGmD,EAAM,EAAG0P,EAAIq3B,EAAOluC,OAAQgE,EAAI6S,IAAK7S,EAAG,KAG7C1D,EAAI,EAAGW,EAAI,EAAGL,GAFnB2S,EAAI26B,EAAOlqC,IAEchE,OAAQM,EAAIM,IAAKN,EACxCW,GAAK2D,KAAKI,IAAI7E,EAAMoT,EAAEjT,KAGxBiT,EAAEkE,IAAMxW,EACJA,EAAIkG,IAAKA,EAAMlG,GACfme,GAAM7L,EAAE6L,KAAKA,UAGnB8uB,EAAO/mC,IAAMA,EACN+mC,EA1GIqE,CAAUre,EAAM3wB,OAAQ/B,EAAEypC,QAAS7rB,EAAMjf,GAE7CG,EAAI,EAAGM,EAAIstC,EAAOluC,OAAQmH,EAAM+mC,EAAO/mC,IAAK7G,EAAIM,IAAKN,EACxDuhF,EAAM3zC,EAAO5tC,GAAI6G,EAAKhH,EAAO6R,EAAIolC,UAG5BljB,EAAML,OAAOryB,EAAEizB,YAAYJ,SAAS+R,mJCl7BpCoQ,GAAU,KACVi+C,GAAW,MACXn+C,GAAK1xC,KAAK26B,GACVqZ,GAAStC,GAAK,EACdo+C,GAAYp+C,GAAK,EACjBC,GAAW,EAALD,GAENsW,GAAU,IAAMtW,GAChBqW,GAAUrW,GAAK,IAEftxC,GAAMJ,KAAKI,IACXgsD,GAAOpsD,KAAKosD,KACZhrB,GAAQphC,KAAKohC,MACbwS,GAAM5zC,KAAK4zC,IACXjrC,GAAO3I,KAAK2I,KACZ9I,GAAMG,KAAKH,IAEXkwF,GAAQ/vF,KAAK+vF,MACb9vF,GAAMD,KAAKC,IACXM,GAAMP,KAAKO,IACXszC,GAAM7zC,KAAK6zC,IACX/zC,GAAOE,KAAKF,MAAQ,SAASC,UAAYA,EAAI,EAAI,EAAIA,EAAI,GAAK,EAAI,GAClE8Q,GAAO7Q,KAAK6Q,KACZ0iC,GAAMvzC,KAAKuzC,IAEf,SAASC,GAAKzzC,UACZA,EAAI,EAAI,EAAIA,GAAK,EAAI2xC,GAAK1xC,KAAKwzC,KAAKzzC,GAGtC,SAASk0C,GAAKl0C,UACZA,EAAI,EAAIi0C,GAASj0C,GAAK,GAAKi0C,GAASh0C,KAAKi0C,KAAKl0C,GC9BxC,SAAS0hC,MCAxB,SAASuuD,GAAehjF,EAAUmlB,GAC5BnlB,GAAYijF,GAAmB3rF,eAAe0I,EAASN,OACzDujF,GAAmBjjF,EAASN,MAAMM,EAAUmlB,GAIhD,IAAI+9D,GAAmB,CACrBC,QAAS,SAAS3rF,EAAQ2tB,GACxB69D,GAAexrF,EAAOwI,SAAUmlB,IAElCi+D,kBAAmB,SAAS5rF,EAAQ2tB,WAC9BxlB,EAAWnI,EAAOmI,SAAUjR,GAAK,EAAGM,EAAI2Q,EAASvR,SAC5CM,EAAIM,GAAGg0F,GAAerjF,EAASjR,GAAGsR,SAAUmlB,KAIrD89D,GAAqB,CACvBI,OAAQ,SAAS7rF,EAAQ2tB,GACvBA,EAAOm+D,UAETp9B,MAAO,SAAS1uD,EAAQ2tB,GACtB3tB,EAASA,EAAO2J,YAChBgkB,EAAOpkB,MAAMvJ,EAAO,GAAIA,EAAO,GAAIA,EAAO,KAE5C+rF,WAAY,SAAS/rF,EAAQ2tB,WACvBhkB,EAAc3J,EAAO2J,YAAazS,GAAK,EAAGM,EAAImS,EAAY/S,SACrDM,EAAIM,GAAGwI,EAAS2J,EAAYzS,GAAIy2B,EAAOpkB,MAAMvJ,EAAO,GAAIA,EAAO,GAAIA,EAAO,KAErFgsF,WAAY,SAAShsF,EAAQ2tB,GAC3Bs+D,GAAWjsF,EAAO2J,YAAagkB,EAAQ,IAEzCu+D,gBAAiB,SAASlsF,EAAQ2tB,WAC5BhkB,EAAc3J,EAAO2J,YAAazS,GAAK,EAAGM,EAAImS,EAAY/S,SACrDM,EAAIM,GAAGy0F,GAAWtiF,EAAYzS,GAAIy2B,EAAQ,IAErDw+D,QAAS,SAASnsF,EAAQ2tB,GACxBy+D,GAAcpsF,EAAO2J,YAAagkB,IAEpC0+D,aAAc,SAASrsF,EAAQ2tB,WACzBhkB,EAAc3J,EAAO2J,YAAazS,GAAK,EAAGM,EAAImS,EAAY/S,SACrDM,EAAIM,GAAG40F,GAAcziF,EAAYzS,GAAIy2B,IAEhD2+D,mBAAoB,SAAStsF,EAAQ2tB,WAC/BvlB,EAAapI,EAAOoI,WAAYlR,GAAK,EAAGM,EAAI4Q,EAAWxR,SAClDM,EAAIM,GAAGg0F,GAAepjF,EAAWlR,GAAIy2B,KAIlD,SAASs+D,GAAWtiF,EAAagkB,EAAQ4+D,OACMC,EAAzCt1F,GAAK,EAAGM,EAAImS,EAAY/S,OAAS21F,MACrC5+D,EAAO2kB,cACEp7C,EAAIM,GAAGg1F,EAAa7iF,EAAYzS,GAAIy2B,EAAOpkB,MAAMijF,EAAW,GAAIA,EAAW,GAAIA,EAAW,IACnG7+D,EAAO4kB,UAGT,SAAS65C,GAAcziF,EAAagkB,OAC9Bz2B,GAAK,EAAGM,EAAImS,EAAY/S,WAC5B+2B,EAAO8+D,iBACEv1F,EAAIM,GAAGy0F,GAAWtiF,EAAYzS,GAAIy2B,EAAQ,GACnDA,EAAO++D,aAGM,YAAS1sF,EAAQ2tB,GAC1B3tB,GAAU0rF,GAAiB5rF,eAAeE,EAAOkI,MACnDwjF,GAAiB1rF,EAAOkI,MAAMlI,EAAQ2tB,GAEtC69D,GAAexrF,EAAQ2tB,GC7DpB,IAKHg/D,GACAC,GACAC,GACAC,GACAC,GCRAF,GAASG,GAAMC,GAASC,GACxBC,MACUP,GACVviF,GACA+iF,GACAC,GACAxvF,GDPOyvF,GAAc,IAAIxhF,GAIzByhF,GAAU,IAAIzhF,GAOP0hF,GAAa,CACtBjkF,MAAO0zB,GACPqV,UAAWrV,GACXsV,QAAStV,GACTwvD,aAAc,WACZa,GAAc,IAAIxhF,GAClB0hF,GAAWl7C,UAAYm7C,GACvBD,GAAWj7C,QAAUm7C,IAEvBhB,WAAY,eACNiB,GAAYL,GAChBC,GAAQvyF,IAAI2yF,EAAW,EAAIxgD,GAAMwgD,EAAWA,QACvCr7C,UAAYj5C,KAAKk5C,QAAUl5C,KAAKkQ,MAAQ0zB,IAE/C6uD,OAAQ,WACNyB,GAAQvyF,IAAImyC,MAIhB,SAASsgD,KACPD,GAAWjkF,MAAQqkF,GAGrB,SAASF,KACPG,GAAUlB,GAAUC,IAGtB,SAASgB,GAAeE,EAAQC,GAC9BP,GAAWjkF,MAAQskF,GACnBlB,GAAWmB,EAAQlB,GAAQmB,EAE3BlB,GADAiB,GAAUvqC,GACQupC,GAAU19C,GAAI2+C,GADbA,GAAOxqC,IACkB,EAAI+nC,IAAYyB,GAAU19C,GAAI0+C,GAG5E,SAASF,GAAUC,EAAQC,OAOrBC,GANJF,GAAUvqC,IAMaspC,GACnBoB,EAAWD,GAAW,EAAI,GAAK,EAC/BE,EAAWD,EAAWD,EACtBG,EAAS/+C,GARb2+C,GADmBA,GAAOxqC,IACd,EAAI+nC,IASZ8C,EAAS/+C,GAAI0+C,GACbnzF,EAAImyF,GAAUqB,EACdvvF,EAAIiuF,GAAUqB,EAASvzF,EAAIw0C,GAAI8+C,GAC/BpvF,EAAIlE,EAAIqzF,EAAW5+C,GAAI6+C,GAC3BZ,GAAYtyF,IAAI4hC,GAAM99B,EAAGD,IAGzBguF,GAAUiB,EAAQhB,GAAUqB,EAAQpB,GAAUqB,EElEzC,SAASC,GAAUC,SACjB,CAAC1xD,GAAM0xD,EAAU,GAAIA,EAAU,IAAK7+C,GAAK6+C,EAAU,KAGrD,SAASA,GAAUD,OACpBP,EAASO,EAAU,GAAIN,EAAMM,EAAU,GAAIF,EAAS/+C,GAAI2+C,SACrD,CAACI,EAAS/+C,GAAI0+C,GAASK,EAAS9+C,GAAIy+C,GAASz+C,GAAI0+C,IAGnD,SAASQ,GAAazzF,EAAGlD,UACvBkD,EAAE,GAAKlD,EAAE,GAAKkD,EAAE,GAAKlD,EAAE,GAAKkD,EAAE,GAAKlD,EAAE,GAGvC,SAAS42F,GAAe1zF,EAAGlD,SACzB,CAACkD,EAAE,GAAKlD,EAAE,GAAKkD,EAAE,GAAKlD,EAAE,GAAIkD,EAAE,GAAKlD,EAAE,GAAKkD,EAAE,GAAKlD,EAAE,GAAIkD,EAAE,GAAKlD,EAAE,GAAKkD,EAAE,GAAKlD,EAAE,IAIhF,SAAS62F,GAAoB3zF,EAAGlD,GACrCkD,EAAE,IAAMlD,EAAE,GAAIkD,EAAE,IAAMlD,EAAE,GAAIkD,EAAE,IAAMlD,EAAE,GAGjC,SAAS82F,GAAeC,EAAQ/zF,SAC9B,CAAC+zF,EAAO,GAAK/zF,EAAG+zF,EAAO,GAAK/zF,EAAG+zF,EAAO,GAAK/zF,GAI7C,SAASg0F,GAA0BrjF,OACpCnK,EAAIiL,GAAKd,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAClDA,EAAE,IAAMnK,EAAGmK,EAAE,IAAMnK,EAAGmK,EAAE,IAAMnK,EDjBhC,IETIytF,GAAIC,GACJC,GAAIC,GAAIC,GACRC,GAAIC,GAAIC,GACRx1D,GAAIy1D,GAAIC,GACR3C,GAAUC,MACNhkF,GAAI2mF,GFIRC,GAAe,CACjBjmF,MAAOkmF,GACPn9C,UAAWo9C,GACXn9C,QAASo9C,GACTlD,aAAc,WACZ+C,GAAajmF,MAAQqmF,GACrBJ,GAAal9C,UAAYu9C,GACzBL,GAAaj9C,QAAUu9C,GACvB1C,GAAW,IAAIthF,GACf0hF,GAAWf,gBAEbC,WAAY,WACVc,GAAWd,aACX8C,GAAajmF,MAAQkmF,GACrBD,GAAal9C,UAAYo9C,GACzBF,GAAaj9C,QAAUo9C,GACnBrC,GAAc,GAAGT,KAAYI,GAAU,KAAMD,KAASE,GAAO,KACxDE,GAAWhgD,GAAS8/C,GAAO,GAC3BE,IAAW,OAAUJ,IAAQ,IACtCnvF,GAAM,GAAKgvF,GAAShvF,GAAM,GAAKovF,IAEjCnB,OAAQ,WACNe,KAAYI,GAAU,KAAMD,KAASE,GAAO,MAIhD,SAASuC,GAAY3B,EAAQC,GAC3BV,GAAOv1F,KAAK+F,GAAQ,CAACgvF,GAAUiB,EAAQb,GAAUa,IAC7CC,EAAMf,KAAMA,GAAOe,GACnBA,EAAMb,KAAMA,GAAOa,GAGzB,SAASgC,GAAUjC,EAAQC,OACrBx2F,EAAI+2F,GAAU,CAACR,EAASvqC,GAASwqC,EAAMxqC,QACvCl5C,GAAI,KACFg6B,EAASmqD,GAAenkF,GAAI9S,GAE5By4F,EAAaxB,GADA,CAACnqD,EAAO,IAAKA,EAAO,GAAI,GACGA,GAC5CuqD,GAA0BoB,GAC1BA,EAAa3B,GAAU2B,OAInBC,EAHA9zF,EAAQ2xF,EAASX,GACjB7xF,EAAOa,EAAQ,EAAI,GAAK,EACxB+zF,EAAUF,EAAW,GAAKxsC,GAAUloD,EAEpC60F,EAAev0F,GAAIO,GAAS,IAC5Bg0F,GAAgB70F,EAAO6xF,GAAU+C,GAAWA,EAAU50F,EAAOwyF,IAC/DmC,EAAOD,EAAW,GAAKxsC,IACZ0pC,KAAMA,GAAO+C,GACwBE,GAAgB70F,EAAO6xF,IAA9D+C,GAAWA,EAAU,KAAO,IAAM,MAAiDA,EAAU50F,EAAOwyF,IAC7GmC,GAAQD,EAAW,GAAKxsC,IACbwpC,KAAMA,GAAOiD,IAEpBlC,EAAMf,KAAMA,GAAOe,GACnBA,EAAMb,KAAMA,GAAOa,IAErBoC,EACErC,EAASX,GACP1rB,GAAMorB,GAASiB,GAAUrsB,GAAMorB,GAASI,MAAUA,GAAUa,GAE5DrsB,GAAMqsB,EAAQb,IAAWxrB,GAAMorB,GAASI,MAAUJ,GAAUiB,GAG9Db,IAAWJ,IACTiB,EAASjB,KAASA,GAAUiB,GAC5BA,EAASb,KAASA,GAAUa,IAE5BA,EAASX,GACP1rB,GAAMorB,GAASiB,GAAUrsB,GAAMorB,GAASI,MAAUA,GAAUa,GAE5DrsB,GAAMqsB,EAAQb,IAAWxrB,GAAMorB,GAASI,MAAUJ,GAAUiB,QAKtET,GAAOv1F,KAAK+F,GAAQ,CAACgvF,GAAUiB,EAAQb,GAAUa,IAE/CC,EAAMf,KAAMA,GAAOe,GACnBA,EAAMb,KAAMA,GAAOa,GACvB1jF,GAAK9S,EAAG41F,GAAUW,EAGpB,SAAS4B,KACPF,GAAajmF,MAAQwmF,GAGvB,SAASJ,KACP9xF,GAAM,GAAKgvF,GAAShvF,GAAM,GAAKovF,GAC/BuC,GAAajmF,MAAQkmF,GACrBplF,GAAK,KAGP,SAASulF,GAAgB9B,EAAQC,MAC3B1jF,GAAI,KACFlO,EAAQ2xF,EAASX,GACrBC,GAASpyF,IAAIY,GAAIO,GAAS,IAAMA,GAASA,EAAQ,EAAI,KAAO,KAAOA,QAEnEwwF,GAAWmB,EAAQlB,GAAQmB,EAE7BP,GAAWjkF,MAAMukF,EAAQC,GACzBgC,GAAUjC,EAAQC,GAGpB,SAAS8B,KACPrC,GAAWl7C,YAGb,SAASw9C,KACPF,GAAgBjD,GAAUC,IAC1BY,GAAWj7C,UACP32C,GAAIwxF,IAAYhgD,KAASy/C,KAAYI,GAAU,MACnDpvF,GAAM,GAAKgvF,GAAShvF,GAAM,GAAKovF,GAC/B5iF,GAAK,KAMP,SAASo3D,GAAMorB,EAASI,UACdA,GAAWJ,GAAW,EAAII,EAAU,IAAMA,EAGpD,SAASmD,GAAat1F,EAAGlD,UAChBkD,EAAE,GAAKlD,EAAE,GAGlB,SAASy4F,GAAcxyF,EAAOtC,UACrBsC,EAAM,IAAMA,EAAM,GAAKA,EAAM,IAAMtC,GAAKA,GAAKsC,EAAM,GAAKtC,EAAIsC,EAAM,IAAMA,EAAM,GAAKtC,EEhI5F,IAAI+0F,GAAiB,CACnBxE,OAAQ7uD,GACR1zB,MAAOgnF,GACPj+C,UAAWk+C,GACXj+C,QAASk+C,GACThE,aAAc,WACZ6D,GAAeh+C,UAAYo+C,GAC3BJ,GAAe/9C,QAAUo+C,IAE3BjE,WAAY,WACV4D,GAAeh+C,UAAYk+C,GAC3BF,GAAe/9C,QAAUk+C,KAK7B,SAASF,GAAczC,EAAQC,GAC7BD,GAAUvqC,OACN4qC,EAAS/+C,GADM2+C,GAAOxqC,IAE1BqtC,GAAuBzC,EAAS/+C,GAAI0+C,GAASK,EAAS9+C,GAAIy+C,GAASz+C,GAAI0+C,IAGzE,SAAS6C,GAAuBr1F,EAAG2Q,EAAGwB,KAClCmhF,GACFE,KAAOxzF,EAAIwzF,IAAMF,GACjBG,KAAO9iF,EAAI8iF,IAAMH,GACjBI,KAAOvhF,EAAIuhF,IAAMJ,GAGnB,SAAS2B,KACPF,GAAe/mF,MAAQsnF,GAGzB,SAASA,GAAuB/C,EAAQC,GACtCD,GAAUvqC,OACN4qC,EAAS/+C,GADM2+C,GAAOxqC,IAE1B56C,GAAKwlF,EAAS/+C,GAAI0+C,GAClBllF,GAAKulF,EAAS9+C,GAAIy+C,GAClByB,GAAKlgD,GAAI0+C,GACTuC,GAAe/mF,MAAQunF,GACvBF,GAAuBjoF,GAAIC,GAAI2mF,IAGjC,SAASuB,GAAkBhD,EAAQC,GACjCD,GAAUvqC,OACN4qC,EAAS/+C,GADM2+C,GAAOxqC,IAEtBhoD,EAAI4yF,EAAS/+C,GAAI0+C,GACjB5hF,EAAIiiF,EAAS9+C,GAAIy+C,GACjBpgF,EAAI2hC,GAAI0+C,GACR91E,EAAI2kB,GAAMvwB,IAAM4L,EAAIrP,GAAK8E,EAAI6hF,GAAKrjF,GAAK+L,GAAKA,EAAIs3E,GAAKh0F,EAAIoN,GAAK+E,GAAKuK,GAAKA,EAAItP,GAAKuD,EAAItD,GAAKrN,GAAK0c,GAAItP,GAAKpN,EAAIqN,GAAKsD,EAAIqjF,GAAK7hF,GAC9HohF,IAAM72E,EACNi3E,IAAMj3E,GAAKtP,IAAMA,GAAKpN,IACtB4zF,IAAMl3E,GAAKrP,IAAMA,GAAKsD,IACtBkjF,IAAMn3E,GAAKs3E,IAAMA,GAAK7hF,IACtBkjF,GAAuBjoF,GAAIC,GAAI2mF,IAGjC,SAASkB,KACPH,GAAe/mF,MAAQgnF,GAKzB,SAASG,KACPJ,GAAe/mF,MAAQwnF,GAGzB,SAASJ,KACPK,GAAkBrE,GAAUC,IAC5B0D,GAAe/mF,MAAQgnF,GAGzB,SAASQ,GAAuBjD,EAAQC,GACtCpB,GAAWmB,EAAQlB,GAAQmB,EAC3BD,GAAUvqC,GAASwqC,GAAOxqC,GAC1B+sC,GAAe/mF,MAAQynF,OACnB7C,EAAS/+C,GAAI2+C,GACjBplF,GAAKwlF,EAAS/+C,GAAI0+C,GAClBllF,GAAKulF,EAAS9+C,GAAIy+C,GAClByB,GAAKlgD,GAAI0+C,GACT6C,GAAuBjoF,GAAIC,GAAI2mF,IAGjC,SAASyB,GAAkBlD,EAAQC,GACjCD,GAAUvqC,OACN4qC,EAAS/+C,GADM2+C,GAAOxqC,IAEtBhoD,EAAI4yF,EAAS/+C,GAAI0+C,GACjB5hF,EAAIiiF,EAAS9+C,GAAIy+C,GACjBpgF,EAAI2hC,GAAI0+C,GACRl8C,EAAKjpC,GAAK8E,EAAI6hF,GAAKrjF,EACnB4lC,EAAKy9C,GAAKh0F,EAAIoN,GAAK+E,EACnBujF,EAAKtoF,GAAKuD,EAAItD,GAAKrN,EACnBkS,EAAI89E,GAAM15C,EAAIC,EAAIm/C,GAClBh5E,EAAIw3B,GAAKhiC,GACT3O,EAAI2O,IAAMwK,EAAIxK,EAClBmsB,GAAG5+B,IAAI8D,EAAI+yC,GACXw9C,GAAGr0F,IAAI8D,EAAIgzC,GACXw9C,GAAGt0F,IAAI8D,EAAImyF,GACXnC,IAAM72E,EACNi3E,IAAMj3E,GAAKtP,IAAMA,GAAKpN,IACtB4zF,IAAMl3E,GAAKrP,IAAMA,GAAKsD,IACtBkjF,IAAMn3E,GAAKs3E,IAAMA,GAAK7hF,IACtBkjF,GAAuBjoF,GAAIC,GAAI2mF,IClHlB,YAASz0F,EAAGlD,YAEhBs5F,EAAQ31F,EAAG2Q,UACX3Q,EAAIT,EAAES,EAAG2Q,GAAItU,EAAE2D,EAAE,GAAIA,EAAE,WAG5BT,EAAEkwD,QAAUpzD,EAAEozD,SAAQkmC,EAAQlmC,OAAS,SAASzvD,EAAG2Q,UAC9C3Q,EAAI3D,EAAEozD,OAAOzvD,EAAG2Q,KAASpR,EAAEkwD,OAAOzvD,EAAE,GAAIA,EAAE,MAG5C21F,ECPT,SAASC,GAAiBrD,EAAQC,SACzB,CAACnyF,GAAIkyF,GAAU5gD,GAAK4gD,EAAStyF,KAAKsR,OAAOghF,EAAS3gD,IAAOA,GAAM2gD,EAAQC,GAKzE,SAASqD,GAAcC,EAAaC,EAAUC,UAC3CF,GAAelkD,IAAQmkD,GAAYC,EAAaL,GAAQM,GAAeH,GAAcI,GAAiBH,EAAUC,IACpHC,GAAeH,GACdC,GAAYC,EAAaE,GAAiBH,EAAUC,GACrDJ,GAGN,SAASO,GAAsBL,UACtB,SAASvD,EAAQC,SACQ,EAAvBD,GAAUuD,GAAuBnkD,GAAK4gD,EAAS3gD,GAAM2gD,GAAU5gD,GAAK4gD,EAAS3gD,GAAM2gD,EAAQC,IAItG,SAASyD,GAAeH,OAClBM,EAAWD,GAAsBL,UACrCM,EAAS3mC,OAAS0mC,IAAuBL,GAClCM,EAGT,SAASF,GAAiBH,EAAUC,OAC9BK,EAAcxiD,GAAIkiD,GAClBO,EAAcxiD,GAAIiiD,GAClBQ,EAAgB1iD,GAAImiD,GACpBQ,EAAgB1iD,GAAIkiD,YAEfI,EAAS7D,EAAQC,OACpBI,EAAS/+C,GAAI2+C,GACbxyF,EAAI6zC,GAAI0+C,GAAUK,EAClBjiF,EAAImjC,GAAIy+C,GAAUK,EAClBzgF,EAAI2hC,GAAI0+C,GACRnzF,EAAI8S,EAAIkkF,EAAcr2F,EAAIs2F,QACvB,CACLj1D,GAAM1wB,EAAI4lF,EAAgBl3F,EAAIm3F,EAAex2F,EAAIq2F,EAAclkF,EAAImkF,GACnEpiD,GAAK70C,EAAIk3F,EAAgB5lF,EAAI6lF,WAIjCJ,EAAS3mC,OAAS,SAAS8iC,EAAQC,OAC7BI,EAAS/+C,GAAI2+C,GACbxyF,EAAI6zC,GAAI0+C,GAAUK,EAClBjiF,EAAImjC,GAAIy+C,GAAUK,EAClBzgF,EAAI2hC,GAAI0+C,GACRnzF,EAAI8S,EAAIokF,EAAgB5lF,EAAI6lF,QACzB,CACLn1D,GAAM1wB,EAAI4lF,EAAgBpkF,EAAIqkF,EAAex2F,EAAIq2F,EAAch3F,EAAIi3F,GACnEpiD,GAAK70C,EAAIg3F,EAAcr2F,EAAIs2F,KAIxBF,EChCT,SAASK,GAAaC,EAAW1oF,IAC/BA,EAAQ+kF,GAAU/kF,IAAc,IAAM0oF,EACtCrD,GAA0BrlF,OACtBujE,EAAS99B,IAAMzlC,EAAM,aACfA,EAAM,GAAK,GAAKujE,EAASA,GAAU3/B,GAAMC,IAAWD,GC5BjD,kBAET3jC,EADA0oF,EAAQ,SAEL,CACL3oF,MAAO,SAAShO,EAAG2Q,EAAGuB,GACpBjE,EAAK1R,KAAK,CAACyD,EAAG2Q,EAAGuB,KAEnB6kC,UAAW,WACT4/C,EAAMp6F,KAAK0R,EAAO,KAEpB+oC,QAAStV,GACTk1D,OAAQ,WACFD,EAAMt7F,OAAS,GAAGs7F,EAAMp6F,KAAKo6F,EAAM7oF,MAAMvQ,OAAOo5F,EAAM1/D,WAE5DhO,OAAQ,eACFA,EAAS0tE,SACbA,EAAQ,GACR1oF,EAAO,KACAgb,IClBE,YAAS1pB,EAAGlD,UAClBgE,GAAId,EAAE,GAAKlD,EAAE,IAAMw1C,IAAWxxC,GAAId,EAAE,GAAKlD,EAAE,IAAMw1C,GCA1D,SAASglD,GAAa7oF,EAAOH,EAAQipF,EAAO/5B,QACrC/8D,EAAIgO,OACJmE,EAAItE,OACJvO,EAAIw3F,OACJ/yF,EAAIg5D,OACJx5D,GAAI,OACJtH,EAAI6B,KAAK9B,EAAI,KAML,YAAS0kE,EAAUq2B,EAAqBC,EAAajoC,EAAa38B,OAG3Ez2B,EACAM,EAHAg7F,EAAU,GACVxyB,EAAO,MAIX/D,EAAShhE,SAAQ,SAASw3F,SACnBj7F,EAAIi7F,EAAQ77F,OAAS,IAAM,QAC5BY,EAAqC+D,EAAlC8O,EAAKooF,EAAQ,GAAIroF,EAAKqoF,EAAQj7F,MAEjCk7F,GAAWroF,EAAID,GAAK,KACjBC,EAAG,KAAOD,EAAG,GAAI,KACpBujB,EAAO2kB,YACFp7C,EAAI,EAAGA,EAAIM,IAAKN,EAAGy2B,EAAOpkB,OAAOc,EAAKooF,EAAQv7F,IAAI,GAAImT,EAAG,gBAC9DsjB,EAAO4kB,UAITnoC,EAAG,IAAM,KAGXooF,EAAQ16F,KAAKyD,EAAI,IAAI62F,GAAa/nF,EAAIooF,EAAS,MAAM,IACrDzyB,EAAKloE,KAAKyD,EAAEV,EAAI,IAAIu3F,GAAa/nF,EAAI,KAAM9O,GAAG,IAC9Ci3F,EAAQ16F,KAAKyD,EAAI,IAAI62F,GAAahoF,EAAIqoF,EAAS,MAAM,IACrDzyB,EAAKloE,KAAKyD,EAAEV,EAAI,IAAIu3F,GAAahoF,EAAI,KAAM7O,GAAG,QAG3Ci3F,EAAQ57F,YAEbopE,EAAKhqD,KAAKs8E,GACVK,GAAKH,GACLG,GAAK3yB,GAEA9oE,EAAI,EAAGM,EAAIwoE,EAAKppE,OAAQM,EAAIM,IAAKN,EACpC8oE,EAAK9oE,GAAGoI,EAAIizF,GAAeA,UAIzBnpF,EACAG,EAFAU,EAAQuoF,EAAQ,KAIV,SAEJl4B,EAAUrwD,EACV2oF,GAAY,EACTt4B,EAAQx7D,OAAQw7D,EAAUA,EAAQ9iE,KAAOyS,EAAO,OACvDb,EAASkxD,EAAQ5sD,EACjBigB,EAAO2kB,cACJ,IACDgoB,EAAQx7D,EAAIw7D,EAAQz/D,EAAEiE,GAAI,EACtBw7D,EAAQh7D,EAAG,IACTszF,MACG17F,EAAI,EAAGM,EAAI4R,EAAOxS,OAAQM,EAAIM,IAAKN,EAAGy2B,EAAOpkB,OAAOA,EAAQH,EAAOlS,IAAI,GAAIqS,EAAM,SAEtF+gD,EAAYgQ,EAAQ/+D,EAAG++D,EAAQ9iE,EAAE+D,EAAG,EAAGoyB,GAEzC2sC,EAAUA,EAAQ9iE,MACb,IACDo7F,MACFxpF,EAASkxD,EAAQ/iE,EAAEmW,EACdxW,EAAIkS,EAAOxS,OAAS,EAAGM,GAAK,IAAKA,EAAGy2B,EAAOpkB,OAAOA,EAAQH,EAAOlS,IAAI,GAAIqS,EAAM,SAEpF+gD,EAAYgQ,EAAQ/+D,EAAG++D,EAAQ/iE,EAAEgE,GAAI,EAAGoyB,GAE1C2sC,EAAUA,EAAQ/iE,EAGpB6R,GADAkxD,EAAUA,EAAQz/D,GACD6S,EACjBklF,GAAaA,SACLt4B,EAAQx7D,GAClB6uB,EAAO4kB,YAIX,SAASogD,GAAKx3F,MACN3D,EAAI2D,EAAMvE,gBACZY,EAGAI,EAFAV,EAAI,EACJ4D,EAAIK,EAAM,KAELjE,EAAIM,GACXsD,EAAEtD,EAAII,EAAIuD,EAAMjE,GAChBU,EAAEL,EAAIuD,EACNA,EAAIlD,EAENkD,EAAEtD,EAAII,EAAIuD,EAAM,GAChBvD,EAAEL,EAAIuD,GCjGR,SAAS+3F,GAAUtpF,UACb3N,GAAI2N,EAAM,KAAO2jC,GACZ3jC,EAAM,GAENjO,GAAKiO,EAAM,MAAQ3N,GAAI2N,EAAM,IAAM2jC,IAAMC,GAAMD,ICF3C,YAAS4lD,EAAcC,EAAUzoC,EAAargD,UACpD,SAAS+oF,OAKVtpF,EACAuyD,EACAxyD,EANAD,EAAOupF,EAASC,GAChBC,EAAaC,KACbC,EAAWJ,EAASE,GACpBG,GAAiB,EAKjBpzB,EAAO,CACTz2D,MAAOA,EACP+oC,UAAWA,EACXC,QAASA,EACTk6C,aAAc,WACZzsB,EAAKz2D,MAAQ8pF,EACbrzB,EAAK1tB,UAAYghD,EACjBtzB,EAAKztB,QAAUghD,EACft3B,EAAW,GACXvyD,EAAU,IAEZgjF,WAAY,WACV1sB,EAAKz2D,MAAQA,EACby2D,EAAK1tB,UAAYA,EACjB0tB,EAAKztB,QAAUA,EACf0pB,EAAW74D,GAAM64D,OACbs2B,EDrBG,SAAS7oF,EAASH,OAC3BukF,EAAS+E,GAAUtpF,GACnBwkF,EAAMxkF,EAAM,GACZ6kF,EAAS/+C,GAAI0+C,GACb1pD,EAAS,CAACgL,GAAIy+C,IAAU1+C,GAAI0+C,GAAS,GACrCrsB,EAAQ,EACR+xB,EAAU,EAEVnlF,EAAM,IAAIvC,GAEC,IAAXsiF,EAAcL,EAAMv+C,GAASpC,IACZ,IAAZghD,IAAeL,GAAOv+C,GAASpC,QAEnC,IAAIl2C,EAAI,EAAGM,EAAIkS,EAAQ9S,OAAQM,EAAIM,IAAKN,KACrCuW,GAAKhE,EAAOC,EAAQxS,IAAIN,eAC1B6S,EACAgE,EACAgmF,EAAShqF,EAAKgE,EAAI,GAClBo/E,EAAUgG,GAAUY,GACpBzG,EAAOyG,EAAO,GAAK,EAAInI,GACvByB,EAAU19C,GAAI29C,GACdF,EAAU19C,GAAI49C,GAETv1F,EAAI,EAAGA,EAAIgW,IAAKhW,EAAGo1F,EAAUI,EAASF,EAAU2G,EAAS5G,EAAU6G,EAASF,EAASG,EAAQ,KAChGA,EAASnqF,EAAKhS,GACdw1F,EAAU4F,GAAUe,GACpB1G,EAAO0G,EAAO,GAAK,EAAItI,GACvBoI,EAAUrkD,GAAI69C,GACdyG,EAAUvkD,GAAI89C,GACd/wF,EAAQ8wF,EAAUJ,EAClBvxF,EAAOa,GAAS,EAAI,GAAK,EACzB03F,EAAWv4F,EAAOa,EAClBg0F,EAAe0D,EAAW3mD,GAC1BtyC,EAAImyF,EAAU2G,KAElBrlF,EAAIrT,IAAI4hC,GAAMhiC,EAAIU,EAAO+zC,GAAIwkD,GAAW/G,EAAU6G,EAAU/4F,EAAIw0C,GAAIykD,KACpEpyB,GAAS0uB,EAAeh0F,EAAQb,EAAO6xC,GAAMhxC,EAIzCg0F,EAAetD,GAAWiB,EAASb,GAAWa,EAAQ,KACpD3kF,EAAMqlF,GAAeF,GAAUmF,GAASnF,GAAUsF,IACtDhF,GAA0BzlF,OACtB2qF,EAAetF,GAAenqD,EAAQl7B,GAC1CylF,GAA0BkF,OACtBC,GAAU5D,EAAeh0F,GAAS,GAAK,EAAI,GAAKszC,GAAKqkD,EAAa,KAClE/F,EAAMgG,GAAUhG,IAAQgG,IAAW5qF,EAAI,IAAMA,EAAI,OACnDqqF,GAAWrD,EAAeh0F,GAAS,EAAI,GAAK,WAiB5CslE,GAAQ,MAAYA,EAAQr0B,IAAW/+B,GAAM,OAAwB,EAAVmlF,EC3C3CQ,CAAgBtqF,EAASO,GACvCgyD,EAASrlE,QACNw8F,IAAgBJ,EAAKvG,eAAgB2G,GAAiB,GAC3Da,GAAWh4B,EAAUq2B,GAAqBC,EAAajoC,EAAa0oC,IAC3DT,IACJa,IAAgBJ,EAAKvG,eAAgB2G,GAAiB,GAC3DJ,EAAK1gD,YACLgY,EAAY,KAAM,KAAM,EAAG0oC,GAC3BA,EAAKzgD,WAEH6gD,IAAgBJ,EAAKtG,aAAc0G,GAAiB,GACxDn3B,EAAWvyD,EAAU,MAEvBoiF,OAAQ,WACNkH,EAAKvG,eACLuG,EAAK1gD,YACLgY,EAAY,KAAM,KAAM,EAAG0oC,GAC3BA,EAAKzgD,UACLygD,EAAKtG,wBAIAnjF,EAAMukF,EAAQC,GACjB+E,EAAahF,EAAQC,IAAMiF,EAAKzpF,MAAMukF,EAAQC,YAG3CmG,EAAUpG,EAAQC,GACzBvkF,EAAKD,MAAMukF,EAAQC,YAGZz7C,IACP0tB,EAAKz2D,MAAQ2qF,EACb1qF,EAAK8oC,qBAGEC,IACPytB,EAAKz2D,MAAQA,EACbC,EAAK+oC,mBAGE8gD,EAAUvF,EAAQC,GACzBtkF,EAAK3R,KAAK,CAACg2F,EAAQC,IACnBoF,EAAS5pF,MAAMukF,EAAQC,YAGhBuF,IACPH,EAAS7gD,YACT7oC,EAAO,YAGA8pF,IACPF,EAAU5pF,EAAK,GAAG,GAAIA,EAAK,GAAG,IAC9B0pF,EAAS5gD,cAILr7C,EAA4BuW,EAC5BglF,EACAlpF,EAJA3I,EAAQuyF,EAASvyF,QACjBuzF,EAAelB,EAAWzuE,SACvBhtB,EAAI28F,EAAav9F,UAIxB6S,EAAKJ,MACLK,EAAQ5R,KAAK2R,GACbA,EAAO,KAEFjS,KAGO,EAARoJ,OAEG6M,GADLglF,EAAU0B,EAAa,IACNv9F,OAAS,GAAK,EAAG,KAC3Bw8F,IAAgBJ,EAAKvG,eAAgB2G,GAAiB,GAC3DJ,EAAK1gD,YACAp7C,EAAI,EAAGA,EAAIuW,IAAKvW,EAAG87F,EAAKzpF,OAAOA,EAAQkpF,EAAQv7F,IAAI,GAAIqS,EAAM,IAClEypF,EAAKzgD,gBAOL/6C,EAAI,GAAa,EAARoJ,GAAWuzF,EAAar8F,KAAKq8F,EAAa9qF,MAAMvQ,OAAOq7F,EAAa3hE,UAEjFypC,EAASnkE,KAAKq8F,EAAanvF,OAAOovF,YAG7Bp0B,GAIX,SAASo0B,GAAa3B,UACbA,EAAQ77F,OAAS,EAK1B,SAAS07F,GAAoBx3F,EAAGlD,WACrBkD,EAAIA,EAAES,GAAG,GAAK,EAAIT,EAAE,GAAK00C,GAASpC,GAAUoC,GAAS10C,EAAE,MACvDlD,EAAIA,EAAE2D,GAAG,GAAK,EAAI3D,EAAE,GAAK43C,GAASpC,GAAUoC,GAAS53C,EAAE,IN1HlEu5F,GAAiBnmC,OAASmmC,UOJXnxB,IACb,kBAAoB,KAStB,SAA8BryC,OAIxB/sB,EAHAisF,EAAUxhF,IACV2hF,EAAO3hF,IACPgpF,EAAQhpF,UAGL,CACLinC,UAAW,WACT3kB,EAAO2kB,YACP1xC,EAAQ,GAEV2I,MAAO,SAAS0jF,EAASC,OACnBoH,EAAQrH,EAAU,EAAI//C,IAAMA,GAC5B/wC,EAAQP,GAAIqxF,EAAUJ,GACtBjxF,GAAIO,EAAQ+wC,IAAME,IACpBzf,EAAOpkB,MAAMsjF,EAASG,GAAQA,EAAOE,GAAQ,EAAI,EAAI19C,IAAUA,IAC/D7hB,EAAOpkB,MAAM8qF,EAAOrH,GACpBr/D,EAAO4kB,UACP5kB,EAAO2kB,YACP3kB,EAAOpkB,MAAM+qF,EAAOtH,GACpBr/D,EAAOpkB,MAAM0jF,EAASD,GACtBpsF,EAAQ,GACCyzF,IAAUC,GAASn4F,GAAS+wC,KACjCtxC,GAAIixF,EAAUwH,GAASjnD,KAASy/C,GAAWwH,EAAQjnD,IACnDxxC,GAAIqxF,EAAUqH,GAASlnD,KAAS6/C,GAAWqH,EAAQlnD,IACvD4/C,EAoBR,SAAmCH,EAASG,EAAMC,EAASC,OACrDJ,EACA6G,EACAY,EAAoBllD,GAAIw9C,EAAUI,UAC/BrxF,GAAI24F,GAAqBnnD,GAC1Bwa,IAAMvY,GAAI29C,IAAS2G,EAAUvkD,GAAI89C,IAAS79C,GAAI49C,GAC1C59C,GAAI69C,IAASJ,EAAU19C,GAAI49C,IAAS39C,GAAIw9C,KACvCC,EAAU6G,EAAUY,KACxBvH,EAAOE,GAAQ,EA5BTsH,CAA0B3H,EAASG,EAAMC,EAASC,GACzDv/D,EAAOpkB,MAAM8qF,EAAOrH,GACpBr/D,EAAO4kB,UACP5kB,EAAO2kB,YACP3kB,EAAOpkB,MAAM+qF,EAAOtH,GACpBpsF,EAAQ,GAEV+sB,EAAOpkB,MAAMsjF,EAAUI,EAASD,EAAOE,GACvCmH,EAAQC,GAEV/hD,QAAS,WACP5kB,EAAO4kB,UACPs6C,EAAUG,EAAO3hF,KAEnBzK,MAAO,kBACE,EAAIA,OAgBjB,SAAqCkN,EAAM2mF,EAAIC,EAAW/mE,OACpDogE,KACQ,MAARjgF,EACFigF,EAAM2G,EAAYllD,GAClB7hB,EAAOpkB,OAAO2jC,GAAI6gD,GAClBpgE,EAAOpkB,MAAM,EAAGwkF,GAChBpgE,EAAOpkB,MAAM2jC,GAAI6gD,GACjBpgE,EAAOpkB,MAAM2jC,GAAI,GACjBvf,EAAOpkB,MAAM2jC,IAAK6gD,GAClBpgE,EAAOpkB,MAAM,GAAIwkF,GACjBpgE,EAAOpkB,OAAO2jC,IAAK6gD,GACnBpgE,EAAOpkB,OAAO2jC,GAAI,GAClBvf,EAAOpkB,OAAO2jC,GAAI6gD,QACb,GAAInyF,GAAIkS,EAAK,GAAK2mF,EAAG,IAAMrnD,GAAS,KACrC0gD,EAAShgF,EAAK,GAAK2mF,EAAG,GAAKvnD,IAAMA,GACrC6gD,EAAM2G,EAAY5G,EAAS,EAC3BngE,EAAOpkB,OAAOukF,EAAQC,GACtBpgE,EAAOpkB,MAAM,EAAGwkF,GAChBpgE,EAAOpkB,MAAMukF,EAAQC,QAErBpgE,EAAOpkB,MAAMkrF,EAAG,GAAIA,EAAG,MAlFzB,EAAEvnD,IAAKsC,KCDM,YAASs9B,OAClB6nB,EAAKvlD,GAAI09B,GACT3wE,EAAQ,EAAIonD,GACZqxC,EAAcD,EAAK,EACnBE,EAAgBj5F,GAAI+4F,GAAMvnD,YAMrB0nD,EAAQhH,EAAQC,UAChB3+C,GAAI0+C,GAAU1+C,GAAI2+C,GAAO4G,WAkFzBvkD,EAAUt1C,EAAGlD,EAAGm9F,OAMnBvxF,EAAK,CAAC,EAAG,EAAG,GACZwxF,EAAKxG,GANAF,GAAUxzF,GACVwzF,GAAU12F,IAMfq9F,EAAO1G,GAAayG,EAAIA,GACxBE,EAAOF,EAAG,GACVG,EAAcF,EAAOC,EAAOA,MAG3BC,EAAa,OAAQJ,GAAOj6F,MAE7Bs/B,EAAMu6D,EAAKM,EAAOE,EAClBC,GAAMT,EAAKO,EAAOC,EAClBE,EAAQ7G,GAAehrF,EAAIwxF,GAC3BzwC,EAAImqC,GAAelrF,EAAI42B,GAE3Bq0D,GAAoBlqC,EADZmqC,GAAesG,EAAII,QAIvBv2F,EAAIw2F,EACJp9E,EAAIs2E,GAAahqC,EAAG1lD,GACpBy2F,EAAK/G,GAAa1vF,EAAGA,GACrB8kD,EAAK1rC,EAAIA,EAAIq9E,GAAM/G,GAAahqC,EAAGA,GAAK,QAExCZ,EAAK,QAELxiD,EAAIkL,GAAKs3C,GACThsD,EAAI+2F,GAAe7vF,IAAKoZ,EAAI9W,GAAKm0F,MACrC7G,GAAoB92F,EAAG4sD,GACvB5sD,EAAI02F,GAAU12F,IAETo9F,EAAK,OAAOp9F,MAOb+V,EAJAm/E,EAAU/xF,EAAE,GACZmyF,EAAUr1F,EAAE,GACZo1F,EAAOlyF,EAAE,GACToyF,EAAOt1F,EAAE,GAGTq1F,EAAUJ,IAASn/E,EAAIm/E,EAASA,EAAUI,EAASA,EAAUv/E,OAE7DvR,EAAQ8wF,EAAUJ,EAClB0I,EAAQ35F,GAAIO,EAAQ+wC,IAAME,OAGzBmoD,GAASrI,EAAOF,IAAMt/E,EAAIs/E,EAAMA,EAAOE,EAAMA,EAAOx/E,GAF1C6nF,GAASp5F,EAAQixC,GAM1BmoD,EACEvI,EAAOE,EAAO,EAAIv1F,EAAE,IAAMiE,GAAIjE,EAAE,GAAKk1F,GAAWz/C,GAAU4/C,EAAOE,GACjEF,GAAQr1F,EAAE,IAAMA,EAAE,IAAMu1F,EAC1B/wF,EAAQ+wC,IAAM2/C,GAAWl1F,EAAE,IAAMA,EAAE,IAAMs1F,GAAU,KACnD3uD,EAAKowD,GAAe7vF,IAAKoZ,EAAI9W,GAAKm0F,UACtC7G,GAAoBnwD,EAAIimB,GACjB,CAAC5sD,EAAG02F,GAAU/vD,eAMhBk3D,EAAK1H,EAAQC,OAChBzzF,EAAIs6F,EAAc9nB,EAAS5/B,GAAK4/B,EAChC0oB,EAAO,SACP1H,GAAUxzF,EAAGk7F,GAAQ,EAChB1H,EAASxzF,IAAGk7F,GAAQ,GACzBzH,GAAOzzF,EAAGk7F,GAAQ,EACbzH,EAAMzzF,IAAGk7F,GAAQ,GACnBA,SAGFx1B,GAAK80B,YAvJMnnE,OACZ8lE,EACAt5D,EACAgrB,EACAswC,EACA70F,QACG,CACL0xC,UAAW,WACTmjD,EAAMtwC,GAAK,EACXvkD,EAAQ,GAEV2I,MAAO,SAASukF,EAAQC,OAElB2H,EADA9B,EAAS,CAAC9F,EAAQC,GAElBjvF,EAAIg2F,EAAQhH,EAAQC,GACpBr2F,EAAIk9F,EACA91F,EAAI,EAAI02F,EAAK1H,EAAQC,GACrBjvF,EAAI02F,EAAK1H,GAAUA,EAAS,EAAI5gD,IAAMA,IAAK6gD,GAAO,MACrD0F,IAAWgC,EAAMtwC,EAAKrmD,IAAI6uB,EAAO2kB,YAClCxzC,IAAMqmD,MACRuwC,EAAStlD,EAAUqjD,EAAQG,KACZlB,GAAWe,EAAQiC,IAAWhD,GAAWkB,EAAQ8B,MAC9D9B,EAAO,GAAK,GAEZ90F,IAAMqmD,EACRvkD,EAAQ,EACJ9B,GAEF6uB,EAAO2kB,YACPojD,EAAStlD,EAAUwjD,EAAQH,GAC3B9lE,EAAOpkB,MAAMmsF,EAAO,GAAIA,EAAO,MAG/BA,EAAStlD,EAAUqjD,EAAQG,GAC3BjmE,EAAOpkB,MAAMmsF,EAAO,GAAIA,EAAO,GAAI,GACnC/nE,EAAO4kB,WAETkhD,EAASiC,OACJ,GAAIb,GAAiBpB,GAAUmB,EAAc91F,EAAG,KACjDqC,EAGEzJ,EAAIyiC,KAAQh5B,EAAIivC,EAAUwjD,EAAQH,GAAQ,MAC9C7yF,EAAQ,EACJg0F,GACFjnE,EAAO2kB,YACP3kB,EAAOpkB,MAAMpI,EAAE,GAAG,GAAIA,EAAE,GAAG,IAC3BwsB,EAAOpkB,MAAMpI,EAAE,GAAG,GAAIA,EAAE,GAAG,IAC3BwsB,EAAO4kB,YAEP5kB,EAAOpkB,MAAMpI,EAAE,GAAG,GAAIA,EAAE,GAAG,IAC3BwsB,EAAO4kB,UACP5kB,EAAO2kB,YACP3kB,EAAOpkB,MAAMpI,EAAE,GAAG,GAAIA,EAAE,GAAG,GAAI,MAIjCrC,GAAO20F,GAAWf,GAAWe,EAAQG,IACvCjmE,EAAOpkB,MAAMqqF,EAAO,GAAIA,EAAO,IAEjCH,EAASG,EAAQzuC,EAAKrmD,EAAGq7B,EAAKziC,GAEhC66C,QAAS,WACH4S,GAAIx3B,EAAO4kB,UACfkhD,EAAS,MAIX7yF,MAAO,kBACEA,GAAU60F,GAAOtwC,IAAO,gBAjFhBr3C,EAAM2mF,EAAIC,EAAW/mE,IPNrC,SAAsBA,EAAQm/C,EAAQ3wE,EAAOu4F,EAAW/iF,EAAIC,MAC5DzV,OACD81F,EAAY7iD,GAAI09B,GAChB6oB,EAAYtmD,GAAIy9B,GAChBngE,EAAO+nF,EAAYv4F,EACb,MAANwV,GACFA,EAAKm7D,EAAS4nB,EAAYvnD,GAC1Bv7B,EAAKk7D,EAASngE,EAAO,IAErBgF,EAAKqgF,GAAaC,EAAWtgF,GAC7BC,EAAKogF,GAAaC,EAAWrgF,IACzB8iF,EAAY,EAAI/iF,EAAKC,EAAKD,EAAKC,KAAID,GAAM+iF,EAAYvnD,SAEtD,IAAI5jC,EAAOpI,EAAIwQ,EAAI+iF,EAAY,EAAIvzF,EAAIyQ,EAAKzQ,EAAIyQ,EAAIzQ,GAAKwL,EAC5DpD,EAAQ8kF,GAAU,CAAC4D,GAAY0D,EAAYvmD,GAAIjuC,IAAKw0F,EAAYtmD,GAAIluC,KACpEwsB,EAAOpkB,MAAMA,EAAM,GAAIA,EAAM,KOR7BqsF,CAAajoE,EAAQm/C,EAAQ3wE,EAAOu4F,EAAW5mF,EAAM2mF,KAkKXG,EAAc,CAAC,GAAI9nB,GAAU,EAAE5/B,GAAI4/B,EAAS5/B,KCzK1F,IAAI2oD,GAAU,IAAKC,IAAWD,GAKf,SAASE,GAAcptF,EAAIC,EAAImlC,EAAIC,YAEvC8mD,EAAQv5F,EAAG2Q,UACXvD,GAAMpN,GAAKA,GAAKwyC,GAAMnlC,GAAMsD,GAAKA,GAAK8hC,WAGtCsc,EAAYx8C,EAAM2mF,EAAIC,EAAW/mE,OACpC7yB,EAAI,EAAG+hC,EAAK,KACJ,MAAR/uB,IACIhT,EAAIk7F,EAAOloF,EAAM4mF,OAAiB73D,EAAKm5D,EAAOvB,EAAIC,KACnDuB,EAAanoF,EAAM2mF,GAAM,EAAIC,EAAY,KAC3C/mE,EAAOpkB,MAAY,IAANzO,GAAiB,IAANA,EAAU6N,EAAKolC,EAAIjzC,EAAI,EAAIkzC,EAAKplC,UACnD9N,GAAKA,EAAI45F,EAAY,GAAK,KAAO73D,QAEzClP,EAAOpkB,MAAMkrF,EAAG,GAAIA,EAAG,aAIlBuB,EAAOz+F,EAAGm9F,UACV94F,GAAIrE,EAAE,GAAKoR,GAAMykC,GAAUsnD,EAAY,EAAI,EAAI,EAChD94F,GAAIrE,EAAE,GAAKw2C,GAAMX,GAAUsnD,EAAY,EAAI,EAAI,EAC/C94F,GAAIrE,EAAE,GAAKqR,GAAMwkC,GAAUsnD,EAAY,EAAI,EAAI,EAC/CA,EAAY,EAAI,EAAI,WAGnBpC,EAAoBx3F,EAAGlD,UACvBq+F,EAAan7F,EAAES,EAAG3D,EAAE2D,YAGpB06F,EAAan7F,EAAGlD,OACnBs+F,EAAKF,EAAOl7F,EAAG,GACfq5B,EAAK6hE,EAAOp+F,EAAG,UACZs+F,IAAO/hE,EAAK+hE,EAAK/hE,EACX,IAAP+hE,EAAWt+F,EAAE,GAAKkD,EAAE,GACb,IAAPo7F,EAAWp7F,EAAE,GAAKlD,EAAE,GACb,IAAPs+F,EAAWp7F,EAAE,GAAKlD,EAAE,GACpBA,EAAE,GAAKkD,EAAE,UAGV,SAAS6yB,OAGVsuC,EACAvyD,EACAD,EACA0sF,EAAKC,EAAKC,EACVC,EAAIC,EAAIC,EACRC,EACA71F,EARA81F,EAAe/oE,EACfgpE,EAAezD,KASf0D,EAAa,CACfrtF,MAAOA,EACP+oC,qBAiDAskD,EAAWrtF,MAAQwmF,EACfrmF,GAASA,EAAQ5R,KAAK2R,EAAO,IACjCgtF,GAAQ,EACRD,GAAK,EACLF,EAAKC,EAAKlrF,KApDVknC,mBA2DI0pB,IACF8zB,EAAUoG,EAAKC,GACXC,GAAOG,GAAIG,EAAaxE,SAC5Bl2B,EAASnkE,KAAK6+F,EAAanyE,WAE7BoyE,EAAWrtF,MAAQA,EACfitF,GAAIE,EAAankD,WAhErBk6C,wBAwBAiK,EAAeC,EAAc16B,EAAW,GAAIvyD,EAAU,GAAI9I,GAAQ,GAvBlE8rF,0BA2BI6F,qBAnBAiB,EAAU,EAELt8F,EAAI,EAAGM,EAAIkS,EAAQ9S,OAAQM,EAAIM,IAAKN,MACtC,IAAgEylC,EAAIE,EAAhEpzB,EAAOC,EAAQxS,GAAIO,EAAI,EAAGgW,EAAIhE,EAAK7S,OAAQ2S,EAAQE,EAAK,GAAY25B,EAAK75B,EAAM,GAAI85B,EAAK95B,EAAM,GAAI9R,EAAIgW,IAAKhW,EAClHklC,EAAKyG,EAAIvG,EAAKwG,EAAqBD,GAAjB75B,EAAQE,EAAKhS,IAAe,GAAI4rC,EAAK95B,EAAM,GACzDszB,GAAMmR,EAAU3K,EAAK2K,IAAO5K,EAAKzG,IAAOqR,EAAKnR,IAAOwG,EAAKxG,IAAOl0B,EAAKg0B,MAAO62D,EACrEnwD,GAAM2K,IAAO5K,EAAKzG,IAAOqR,EAAKnR,IAAOwG,EAAKxG,IAAOl0B,EAAKg0B,MAAO62D,SAIrEA,EASWqD,GACdC,EAAcl2F,GAAS2xF,EACvBuC,GAAW74B,EAAW74D,GAAM64D,IAAWrlE,QACvCkgG,GAAehC,KACjBnnE,EAAO8+D,eACHqK,IACFnpE,EAAO2kB,YACPgY,EAAY,KAAM,KAAM,EAAG38B,GAC3BA,EAAO4kB,WAELuiD,GACFb,GAAWh4B,EAAUq2B,EAAqBC,EAAajoC,EAAa38B,GAEtEA,EAAO++D,cAETgK,EAAe/oE,EAAQsuC,EAAWvyD,EAAUD,EAAO,gBAvC5CF,EAAMhO,EAAG2Q,GACZ4oF,EAAQv5F,EAAG2Q,IAAIwqF,EAAantF,MAAMhO,EAAG2Q,YA8DlC6jF,EAAUx0F,EAAG2Q,OAChBpN,EAAIg2F,EAAQv5F,EAAG2Q,MACfxC,GAASD,EAAK3R,KAAK,CAACyD,EAAG2Q,IACvBuqF,EACFN,EAAM56F,EAAG66F,EAAMlqF,EAAGmqF,EAAMv3F,EACxB23F,GAAQ,EACJ33F,IACF43F,EAAapkD,YACbokD,EAAantF,MAAMhO,EAAG2Q,YAGpBpN,GAAK03F,EAAIE,EAAantF,MAAMhO,EAAG2Q,OAC9B,KACCpR,EAAI,CAACw7F,EAAK96F,KAAKuC,IAAI+3F,GAASt6F,KAAKsC,IAAI+3F,GAASS,IAAMC,EAAK/6F,KAAKuC,IAAI+3F,GAASt6F,KAAKsC,IAAI+3F,GAASU,KAC7F3+F,EAAI,CAAC2D,EAAIC,KAAKuC,IAAI+3F,GAASt6F,KAAKsC,IAAI+3F,GAASt6F,IAAK2Q,EAAI1Q,KAAKuC,IAAI+3F,GAASt6F,KAAKsC,IAAI+3F,GAAS3pF,MClJzF,SAASpR,EAAGlD,EAAG+Q,EAAIC,EAAImlC,EAAIC,OASpC1zC,EARA8jE,EAAKtjE,EAAE,GACPujE,EAAKvjE,EAAE,GAGP6W,EAAK,EACLC,EAAK,EACL7I,EAJKnR,EAAE,GAIGwmE,EACVn1D,EAJKrR,EAAE,GAIGymE,KAGd/jE,EAAIqO,EAAKy1D,EACJr1D,KAAMzO,EAAI,OACfA,GAAKyO,EACDA,EAAK,EAAG,IACNzO,EAAIqX,EAAI,OACRrX,EAAIsX,IAAIA,EAAKtX,QACZ,GAAIyO,EAAK,EAAG,IACbzO,EAAIsX,EAAI,OACRtX,EAAIqX,IAAIA,EAAKrX,MAGnBA,EAAIyzC,EAAKqwB,EACJr1D,KAAMzO,EAAI,OACfA,GAAKyO,EACDA,EAAK,EAAG,IACNzO,EAAIsX,EAAI,OACRtX,EAAIqX,IAAIA,EAAKrX,QACZ,GAAIyO,EAAK,EAAG,IACbzO,EAAIqX,EAAI,OACRrX,EAAIsX,IAAIA,EAAKtX,MAGnBA,EAAIsO,EAAKy1D,EACJp1D,KAAM3O,EAAI,OACfA,GAAK2O,EACDA,EAAK,EAAG,IACN3O,EAAIqX,EAAI,OACRrX,EAAIsX,IAAIA,EAAKtX,QACZ,GAAI2O,EAAK,EAAG,IACb3O,EAAIsX,EAAI,OACRtX,EAAIqX,IAAIA,EAAKrX,MAGnBA,EAAI0zC,EAAKqwB,EACJp1D,KAAM3O,EAAI,OACfA,GAAK2O,EACDA,EAAK,EAAG,IACN3O,EAAIsX,EAAI,OACRtX,EAAIqX,IAAIA,EAAKrX,QACZ,GAAI2O,EAAK,EAAG,IACb3O,EAAIqX,EAAI,OACRrX,EAAIsX,IAAIA,EAAKtX,UAGfqX,EAAK,IAAG7W,EAAE,GAAKsjE,EAAKzsD,EAAK5I,EAAIjO,EAAE,GAAKujE,EAAK1sD,EAAK1I,GAC9C2I,EAAK,IAAGha,EAAE,GAAKwmE,EAAKxsD,EAAK7I,EAAInR,EAAE,GAAKymE,EAAKzsD,EAAK3I,IAC3C,MD0FK8pF,CAASj4F,EAAGlD,EAAG+Q,EAAIC,EAAImlC,EAAIC,GAQpBlvC,IACT43F,EAAapkD,YACbokD,EAAantF,MAAMhO,EAAG2Q,GACtBtL,GAAQ,IAVH41F,IACHE,EAAapkD,YACbokD,EAAantF,MAAMzO,EAAE,GAAIA,EAAE,KAE7B47F,EAAantF,MAAM3R,EAAE,GAAIA,EAAE,IACtBkH,GAAG43F,EAAankD,UACrB3xC,GAAQ,GAQd01F,EAAK/6F,EAAGg7F,EAAKrqF,EAAGsqF,EAAK13F,SAGhB83F,GElKX,SAASG,GAAWnuF,EAAIolC,EAAI/kC,OACtBiD,EAAIrO,GAAM+K,EAAIolC,EAAKZ,GAASnkC,GAAInQ,OAAOk1C,UACpC,SAASzyC,UAAY2Q,EAAEnR,KAAI,SAASmR,SAAY,CAAC3Q,EAAG2Q,OAG7D,SAAS8qF,GAAWruF,EAAIolC,EAAIhlC,OACtBxN,EAAIsC,GAAM8K,EAAIolC,EAAKX,GAASrkC,GAAIjQ,OAAOi1C,UACpC,SAAS7hC,UAAY3Q,EAAER,KAAI,SAASQ,SAAY,CAACA,EAAG2Q,WCJzD+kC,GACAC,GACAvoC,GACAC,MCTWrN,GAAKA,EDIhBgyF,GAAU,IAAIzhF,GACdwhF,GAAc,IAAIxhF,GAMlB0hF,GAAa,CACfjkF,MAAO0zB,GACPqV,UAAWrV,GACXsV,QAAStV,GACTwvD,aAAc,WACZe,GAAWl7C,UAAYm7C,GACvBD,GAAWj7C,QAAUm7C,IAEvBhB,WAAY,WACVc,GAAWl7C,UAAYk7C,GAAWj7C,QAAUi7C,GAAWjkF,MAAQ0zB,GAC/DswD,GAAQvyF,IAAIY,GAAI0xF,KAChBA,GAAc,IAAIxhF,IAEpB0Y,OAAQ,eACFkuB,EAAO66C,GAAU,SACrBA,GAAU,IAAIzhF,GACP4mC,IAIX,SAAS+6C,KACPD,GAAWjkF,MAAQqkF,GAGrB,SAASA,GAAeryF,EAAG2Q,GACzBshF,GAAWjkF,MAAQskF,GACnB58C,GAAMtoC,GAAKpN,EAAG21C,GAAMtoC,GAAKsD,EAG3B,SAAS2hF,GAAUtyF,EAAG2Q,GACpBohF,GAAYtyF,IAAI4N,GAAKrN,EAAIoN,GAAKuD,GAC9BvD,GAAKpN,EAAGqN,GAAKsD,EAGf,SAASwhF,KACPG,GAAU58C,GAAKC,IE5CjB,IAAIvoC,GAAK4I,EAAAA,EACL3I,GAAKD,GACLolC,IAAMplC,GACNqlC,GAAKD,GAELyhD,GAAe,CACjBjmF,MAYF,SAAqBhO,EAAG2Q,GAClB3Q,EAAIoN,KAAIA,GAAKpN,GACbA,EAAIwyC,KAAIA,GAAKxyC,GACb2Q,EAAItD,KAAIA,GAAKsD,GACbA,EAAI8hC,KAAIA,GAAK9hC,IAfjBomC,UAAWrV,GACXsV,QAAStV,GACTwvD,aAAcxvD,GACdyvD,WAAYzvD,GACZzY,OAAQ,eACF+7C,EAAS,CAAC,CAAC53D,GAAIC,IAAK,CAACmlC,GAAIC,YAC7BD,GAAKC,KAAOplC,GAAKD,GAAK4I,EAAAA,GACfgvD,ICZX,IASItvB,GACAC,GACAvoC,GACAC,GAZAmmF,GAAK,EACLC,GAAK,EACLC,GAAK,EACLC,GAAK,EACLC,GAAK,EACLC,GAAK,EACLx1D,GAAK,EACLy1D,GAAK,EACLC,GAAK,EAMLgB,GAAiB,CACnB/mF,MAAOgnF,GACPj+C,UAAWk+C,GACXj+C,QAASk+C,GACThE,aAAc,WACZ6D,GAAeh+C,UAAYo+C,GAC3BJ,GAAe/9C,QAAUo+C,IAE3BjE,WAAY,WACV4D,GAAe/mF,MAAQgnF,GACvBD,GAAeh+C,UAAYk+C,GAC3BF,GAAe/9C,QAAUk+C,IAE3BjsE,OAAQ,eACFk6C,EAAW4wB,GAAK,CAAC11D,GAAK01D,GAAID,GAAKC,IAC7BF,GAAK,CAACF,GAAKE,GAAID,GAAKC,IACpBH,GAAK,CAACF,GAAKE,GAAID,GAAKC,IACpB,CAAC5jF,IAAKA,YACZ0jF,GAAKC,GAAKC,GACVC,GAAKC,GAAKC,GACVx1D,GAAKy1D,GAAKC,GAAK,EACR5wB,IAIX,SAAS6xB,GAAch1F,EAAG2Q,GACxB6iF,IAAMxzF,EACNyzF,IAAM9iF,IACJ+iF,GAGJ,SAASuB,KACPF,GAAe/mF,MAAQ0tF,GAGzB,SAASA,GAAuB17F,EAAG2Q,GACjCokF,GAAe/mF,MAAQ2tF,GACvB3G,GAAc5nF,GAAKpN,EAAGqN,GAAKsD,GAG7B,SAASgrF,GAAkB37F,EAAG2Q,OACxBnD,EAAKxN,EAAIoN,GAAIM,EAAKiD,EAAItD,GAAI8E,EAAIrB,GAAKtD,EAAKA,EAAKE,EAAKA,GACtDimF,IAAMxhF,GAAK/E,GAAKpN,GAAK,EACrB4zF,IAAMzhF,GAAK9E,GAAKsD,GAAK,EACrBkjF,IAAM1hF,EACN6iF,GAAc5nF,GAAKpN,EAAGqN,GAAKsD,GAG7B,SAASukF,KACPH,GAAe/mF,MAAQgnF,GAGzB,SAASG,KACPJ,GAAe/mF,MAAQ4tF,GAGzB,SAASxG,KACPyG,GAAkBnmD,GAAKC,IAGzB,SAASimD,GAAuB57F,EAAG2Q,GACjCokF,GAAe/mF,MAAQ6tF,GACvB7G,GAAct/C,GAAMtoC,GAAKpN,EAAG21C,GAAMtoC,GAAKsD,GAGzC,SAASkrF,GAAkB77F,EAAG2Q,OACxBnD,EAAKxN,EAAIoN,GACTM,EAAKiD,EAAItD,GACT8E,EAAIrB,GAAKtD,EAAKA,EAAKE,EAAKA,GAE5BimF,IAAMxhF,GAAK/E,GAAKpN,GAAK,EACrB4zF,IAAMzhF,GAAK9E,GAAKsD,GAAK,EACrBkjF,IAAM1hF,EAGNksB,KADAlsB,EAAI9E,GAAKrN,EAAIoN,GAAKuD,IACPvD,GAAKpN,GAChB8zF,IAAM3hF,GAAK9E,GAAKsD,GAChBojF,IAAU,EAAJ5hF,EACN6iF,GAAc5nF,GAAKpN,EAAGqN,GAAKsD,GC7Fd,SAASmrF,GAAYjyE,QAC7B4sB,SAAW5sB,EAGlBiyE,GAAYx3F,UAAY,CACtBy3F,QAAS,IACTC,YAAa,SAASn/F,UACbiB,KAAKi+F,QAAUl/F,EAAGiB,MAE3BozF,aAAc,gBACPr5C,MAAQ,GAEfs5C,WAAY,gBACLt5C,MAAQ/nC,KAEfinC,UAAW,gBACJe,OAAS,GAEhBd,QAAS,WACY,IAAfl5C,KAAK+5C,OAAa/5C,KAAK24C,SAASpE,iBAC/ByF,OAAShoC,KAEhB9B,MAAO,SAAShO,EAAG2Q,UACT7S,KAAKg6C,aACN,OACErB,SAASrE,OAAOpyC,EAAG2Q,QACnBmnC,OAAS,aAGX,OACErB,SAASnE,OAAOtyC,EAAG2Q,sBAInB8lC,SAASrE,OAAOpyC,EAAIlC,KAAKi+F,QAASprF,QAClC8lC,SAAS7oC,IAAI5N,EAAG2Q,EAAG7S,KAAKi+F,QAAS,EAAGnqD,MAK/C3oB,OAAQyY,ICvCV,IACIu6D,GACAvmD,GACAC,GACAvoC,GACAC,GALA6uF,GAAY,IAAI3rF,GAOhB4rF,GAAe,CACjBnuF,MAAO0zB,GACPqV,UAAW,WACTolD,GAAanuF,MAAQouF,IAEvBplD,QAAS,WACHilD,IAAYI,GAAY3mD,GAAKC,IACjCwmD,GAAanuF,MAAQ0zB,IAEvBwvD,aAAc,WACZ+K,IAAa,GAEf9K,WAAY,WACV8K,GAAa,MAEfhzE,OAAQ,eACF5tB,GAAU6gG,UACdA,GAAY,IAAI3rF,GACTlV,IAIX,SAAS+gG,GAAiBp8F,EAAG2Q,GAC3BwrF,GAAanuF,MAAQquF,GACrB3mD,GAAMtoC,GAAKpN,EAAG21C,GAAMtoC,GAAKsD,EAG3B,SAAS0rF,GAAYr8F,EAAG2Q,GACtBvD,IAAMpN,EAAGqN,IAAMsD,EACfurF,GAAUz8F,IAAIqR,GAAK1D,GAAKA,GAAKC,GAAKA,KAClCD,GAAKpN,EAAGqN,GAAKsD,ECzCA,SAAS2rF,UACjBC,QAAU,GAoDjB,SAASv4B,GAAOuN,SACP,MAAQA,EACT,IAAMA,EAAS,IAAMA,EAAS,aAAe,EAAIA,EACjD,IAAMA,EAAS,IAAMA,EAAS,YAAc,EAAIA,EAChD,IChDO,YAASirB,EAAY3yE,OAE9B4yE,EACAC,EAFAV,EAAc,aAIT5gG,EAAKqJ,UACRA,IACyB,mBAAhBu3F,GAA4BU,EAAcV,aAAaA,EAAYr+F,MAAMG,KAAMD,YAC1Fu0B,GAAO3tB,EAAQg4F,EAAiBC,KAE3BA,EAAczzE,gBAGvB7tB,EAAK+7C,KAAO,SAAS1yC,UACnB2tB,GAAO3tB,EAAQg4F,EAAiBE,KACzBA,GAAS1zE,UAGlB7tB,EAAK6oC,QAAU,SAASx/B,UACtB2tB,GAAO3tB,EAAQg4F,EAAiBG,KACzBA,GAAY3zE,UAGrB7tB,EAAK4pE,OAAS,SAASvgE,UACrB2tB,GAAO3tB,EAAQg4F,EAAiBI,KACzBA,GAAW5zE,UAGpB7tB,EAAK+nE,SAAW,SAAS1+D,UACvB2tB,GAAO3tB,EAAQg4F,EAAiBK,KACzBA,GAAa7zE,UAGtB7tB,EAAKohG,WAAa,SAAS3/F,UAClBgB,UAAUxC,QAAUohG,EAAwB,MAAL5/F,GAAa2/F,EAAa,KAAM5/F,KAAa4/F,EAAa3/F,GAAGu1B,OAAQh3B,GAAQohG,GAG7HphG,EAAKyuB,QAAU,SAAShtB,UACjBgB,UAAUxC,QACfqhG,EAAqB,MAAL7/F,GAAagtB,EAAU,KAAM,IAAIyyE,IAAc,IAAIR,GAAYjyE,EAAUhtB,GAC9D,mBAAhBm/F,GAA4BU,EAAcV,YAAYA,GAC1D5gG,GAHuByuB,GAMhCzuB,EAAK4gG,YAAc,SAASn/F,UACrBgB,UAAUxC,QACf2gG,EAA2B,mBAANn/F,EAAmBA,GAAK6/F,EAAcV,aAAan/F,IAAKA,GACtEzB,GAFuB4gG,GAKzB5gG,EAAKohG,WAAWA,GAAY3yE,QAAQA,GCrDtC,SAASulC,GAAY81B,UACnB,SAAS9yD,OACV91B,EAAI,IAAIygG,OACP,IAAIx+F,KAAO2mF,EAAS5oF,EAAEiC,GAAO2mF,EAAQ3mF,UAC1CjC,EAAE81B,OAASA,EACJ91B,GAIX,SAASygG,MCZT,SAASC,GAAIR,EAAYS,EAAWx4F,OAC9BggE,EAAO+3B,EAAWU,YAAcV,EAAWU,oBAC/CV,EAAW/6F,MAAM,KAAKgM,UAAU,CAAC,EAAG,IACxB,MAARg3D,GAAc+3B,EAAWU,WAAW,MACxCC,GAAU14F,EAAQ+3F,EAAWpqE,OAAO6hE,KACpCgJ,EAAUhJ,GAAahrE,UACX,MAARw7C,GAAc+3B,EAAWU,WAAWz4B,GACjC+3B,EAGF,SAASY,GAAUZ,EAAYr4F,EAAQM,UACrCu4F,GAAIR,GAAY,SAASngG,OAC1BqgB,EAAIvY,EAAO,GAAG,GAAKA,EAAO,GAAG,GAC7Bs1B,EAAIt1B,EAAO,GAAG,GAAKA,EAAO,GAAG,GAC7B9E,EAAIY,KAAKsC,IAAIma,GAAKrgB,EAAE,GAAG,GAAKA,EAAE,GAAG,IAAKo9B,GAAKp9B,EAAE,GAAG,GAAKA,EAAE,GAAG,KAC1D2D,GAAKmE,EAAO,GAAG,IAAMuY,EAAIrd,GAAKhD,EAAE,GAAG,GAAKA,EAAE,GAAG,KAAO,EACpDsU,GAAKxM,EAAO,GAAG,IAAMs1B,EAAIp6B,GAAKhD,EAAE,GAAG,GAAKA,EAAE,GAAG,KAAO,EACxDmgG,EAAW/6F,MAAM,IAAMpC,GAAGoO,UAAU,CAACzN,EAAG2Q,MACvClM,GAGE,SAAS44F,GAAQb,EAAYz3F,EAAMN,UACjC24F,GAAUZ,EAAY,CAAC,CAAC,EAAG,GAAIz3F,GAAON,GAGxC,SAAS64F,GAASd,EAAYlyF,EAAO7F,UACnCu4F,GAAIR,GAAY,SAASngG,OAC1BqgB,GAAKpS,EACLjL,EAAIqd,GAAKrgB,EAAE,GAAG,GAAKA,EAAE,GAAG,IACxB2D,GAAK0c,EAAIrd,GAAKhD,EAAE,GAAG,GAAKA,EAAE,GAAG,KAAO,EACpCsU,GAAKtR,EAAIhD,EAAE,GAAG,GAClBmgG,EAAW/6F,MAAM,IAAMpC,GAAGoO,UAAU,CAACzN,EAAG2Q,MACvClM,GAGE,SAAS84F,GAAUf,EAAYhhD,EAAQ/2C,UACrCu4F,GAAIR,GAAY,SAASngG,OAC1Bo9B,GAAK+hB,EACLn8C,EAAIo6B,GAAKp9B,EAAE,GAAG,GAAKA,EAAE,GAAG,IACxB2D,GAAKX,EAAIhD,EAAE,GAAG,GACdsU,GAAK8oB,EAAIp6B,GAAKhD,EAAE,GAAG,GAAKA,EAAE,GAAG,KAAO,EACxCmgG,EAAW/6F,MAAM,IAAMpC,GAAGoO,UAAU,CAACzN,EAAG2Q,MACvClM,GHzCL63F,GAAWh4F,UAAY,CACrBy3F,QAAS,IACTyB,QAASx5B,GAAO,KAChBg4B,YAAa,SAASn/F,UACfA,GAAKA,KAAOiB,KAAKi+F,UAASj+F,KAAKi+F,QAAUl/F,EAAGiB,KAAK0/F,QAAU,MACzD1/F,MAETozF,aAAc,gBACPr5C,MAAQ,GAEfs5C,WAAY,gBACLt5C,MAAQ/nC,KAEfinC,UAAW,gBACJe,OAAS,GAEhBd,QAAS,WACY,IAAfl5C,KAAK+5C,OAAa/5C,KAAKy+F,QAAQhgG,KAAK,UACnCu7C,OAAShoC,KAEhB9B,MAAO,SAAShO,EAAG2Q,UACT7S,KAAKg6C,aACN,OACEykD,QAAQhgG,KAAK,IAAKyD,EAAG,IAAK2Q,QAC1BmnC,OAAS,aAGX,OACEykD,QAAQhgG,KAAK,IAAKyD,EAAG,IAAK2Q,iBAIX,MAAhB7S,KAAK0/F,UAAiB1/F,KAAK0/F,QAAUx5B,GAAOlmE,KAAKi+F,eAChDQ,QAAQhgG,KAAK,IAAKyD,EAAG,IAAK2Q,EAAG7S,KAAK0/F,WAK7Cv0E,OAAQ,cACFnrB,KAAKy+F,QAAQlhG,OAAQ,KACnB4tB,EAASnrB,KAAKy+F,QAAQvyF,KAAK,gBAC1BuyF,QAAU,GACRtzE,SAEA,OE/Bb8zE,GAAgBz4F,UAAY,CAC1B6D,YAAa40F,GACb/uF,MAAO,SAAShO,EAAG2Q,QAAUyhB,OAAOpkB,MAAMhO,EAAG2Q,IAC7C4/E,OAAQ,gBAAkBn+D,OAAOm+D,UACjCx5C,UAAW,gBAAkB3kB,OAAO2kB,aACpCC,QAAS,gBAAkB5kB,OAAO4kB,WAClCk6C,aAAc,gBAAkB9+D,OAAO8+D,gBACvCC,WAAY,gBAAkB/+D,OAAO++D,eEpBvC,IACIsM,GAAiB5pD,GAAI,GAAKmU,IAEf,YAASzZ,EAASmvD,UACvBA,EAYV,SAAkBnvD,EAASmvD,YAEhBC,EAAevwF,EAAIC,EAAIikF,EAASlwD,EAAIyG,EAAIjJ,EAAI4T,EAAIC,EAAIi/C,EAASpwD,EAAIwG,EAAIjJ,EAAI++D,EAAOxrE,OACnF5kB,EAAKglC,EAAKplC,EACVM,EAAK+kC,EAAKplC,EACVuoC,EAAKpoC,EAAKA,EAAKE,EAAKA,KACpBkoC,EAAK,EAAI8nD,GAAUE,IAAS,KAC1Br+F,EAAI6hC,EAAKE,EACTjlC,EAAIwrC,EAAKC,EACT3rC,EAAIyiC,EAAKC,EACT3sB,EAAIpB,GAAKvR,EAAIA,EAAIlD,EAAIA,EAAIF,EAAIA,GAC7B0hG,EAAO3pD,GAAK/3C,GAAK+V,GACjB0/E,EAAUvxF,GAAIA,GAAIlE,GAAK,GAAK01C,IAAWxxC,GAAIixF,EAAUI,GAAW7/C,IAAWy/C,EAAUI,GAAW,EAAIrwD,GAAMhlC,EAAGkD,GAC7GvD,EAAIuyC,EAAQqjD,EAASiM,GACrB5+D,EAAKjjC,EAAE,GACP22C,EAAK32C,EAAE,GACP8hG,EAAM7+D,EAAK7xB,EACX2wF,EAAMprD,EAAKtlC,EACX2wF,EAAKtwF,EAAKowF,EAAMtwF,EAAKuwF,GACrBC,EAAKA,EAAKpoD,EAAK8nD,GACZr9F,IAAKmN,EAAKswF,EAAMpwF,EAAKqwF,GAAOnoD,EAAK,IAAO,IACxCxU,EAAKE,EAAKuG,EAAKC,EAAKlJ,EAAKC,EAAK4+D,MACnCE,EAAevwF,EAAIC,EAAIikF,EAASlwD,EAAIyG,EAAIjJ,EAAIK,EAAI0T,EAAIi/C,EAASryF,GAAK2S,EAAG7V,GAAK6V,EAAG/V,EAAGyhG,EAAOxrE,GACvFA,EAAOpkB,MAAMixB,EAAI0T,GACjBgrD,EAAe1+D,EAAI0T,EAAIi/C,EAASryF,EAAGlD,EAAGF,EAAGq2C,EAAIC,EAAIi/C,EAASpwD,EAAIwG,EAAIjJ,EAAI++D,EAAOxrE,YAI5E,SAASA,OACVg/D,EAAU17C,EAAKC,EAAKyoB,EAAK6/B,EAAKC,EAC9B5M,EAASlkF,EAAIC,EAAI+zB,EAAIyG,EAAIjJ,EAEzBu/D,EAAiB,CACnBnwF,MAAOA,EACP+oC,UAAWA,EACXC,QAASA,EACTk6C,aAAc,WAAa9+D,EAAO8+D,eAAgBiN,EAAepnD,UAAYghD,GAC7E5G,WAAY,WAAa/+D,EAAO++D,aAAcgN,EAAepnD,UAAYA,aAGlE/oC,EAAMhO,EAAG2Q,GAChB3Q,EAAIuuC,EAAQvuC,EAAG2Q,GACfyhB,EAAOpkB,MAAMhO,EAAE,GAAIA,EAAE,aAGd+2C,IACP3pC,EAAK0C,IACLquF,EAAenwF,MAAQwmF,EACvBpiE,EAAO2kB,qBAGAy9C,EAAUjC,EAAQC,OACrBr2F,EAAI42F,GAAU,CAACR,EAAQC,IAAOx2F,EAAIuyC,EAAQgkD,EAAQC,GACtDmL,EAAevwF,EAAIC,EAAIikF,EAASlwD,EAAIyG,EAAIjJ,EAAIxxB,EAAKpR,EAAE,GAAIqR,EAAKrR,EAAE,GAAIs1F,EAAUiB,EAAQnxD,EAAKjlC,EAAE,GAAI0rC,EAAK1rC,EAAE,GAAIyiC,EAAKziC,EAAE,GArExG,GAqEsHi2B,GAC/HA,EAAOpkB,MAAMZ,EAAIC,YAGV2pC,IACPmnD,EAAenwF,MAAQA,EACvBokB,EAAO4kB,mBAGA+gD,IACPhhD,IACAonD,EAAenwF,MAAQowF,EACvBD,EAAennD,QAAUghD,WAGlBoG,EAAU7L,EAAQC,GACzBgC,EAAUpD,EAAWmB,EAAQC,GAAM98C,EAAMtoC,EAAIuoC,EAAMtoC,EAAI+wD,EAAMh9B,EAAI68D,EAAMp2D,EAAIq2D,EAAMt/D,EACjFu/D,EAAenwF,MAAQwmF,WAGhBwD,IACP2F,EAAevwF,EAAIC,EAAIikF,EAASlwD,EAAIyG,EAAIjJ,EAAI8W,EAAKC,EAAKy7C,EAAUhzB,EAAK6/B,EAAKC,EA1FjE,GA0FgF9rE,GACzF+rE,EAAennD,QAAUA,EACzBA,WAGKmnD,GA3FQE,CAAS9vD,EAASmvD,GAGrC,SAAsBnvD,UACb6gB,GAAY,CACjBphD,MAAO,SAAShO,EAAG2Q,GACjB3Q,EAAIuuC,EAAQvuC,EAAG2Q,QACVyhB,OAAOpkB,MAAMhO,EAAE,GAAIA,EAAE,OAPes+F,CAAa/vD,GCG5D,IAAIgwD,GAAmBnvC,GAAY,CACjCphD,MAAO,SAAShO,EAAG2Q,QACZyhB,OAAOpkB,MAAMhO,EAAIgoD,GAASr3C,EAAIq3C,OAwBvC,SAASw2C,GAAqBn/F,EAAGmO,EAAIE,EAAIyhE,EAAIC,EAAIh1C,OAC1CA,EAAO,OAZd,SAAwB/6B,EAAGmO,EAAIE,EAAIyhE,EAAIC,YAC5BjiE,EAAUnN,EAAG2Q,SAEb,CAACnD,EAAKnO,GADbW,GAAKmvE,GACezhE,EAAKrO,GADhBsR,GAAKy+D,WAGhBjiE,EAAUsiD,OAAS,SAASzvD,EAAG2Q,SACtB,EAAE3Q,EAAIwN,GAAMnO,EAAI8vE,GAAKzhE,EAAKiD,GAAKtR,EAAI+vE,IAErCjiE,EAIYsxF,CAAep/F,EAAGmO,EAAIE,EAAIyhE,EAAIC,OAC7CsvB,EAAW7qD,GAAIzZ,GACfukE,EAAW7qD,GAAI1Z,GACf76B,EAAIm/F,EAAWr/F,EACfhD,EAAIsiG,EAAWt/F,EACfu/F,EAAKF,EAAWr/F,EAChBssD,EAAKgzC,EAAWt/F,EAChBmmC,GAAMm5D,EAAWjxF,EAAKgxF,EAAWlxF,GAAMnO,EACvCw/F,GAAMF,EAAWnxF,EAAKkxF,EAAWhxF,GAAMrO,WAClC8N,EAAUnN,EAAG2Q,SAEb,CAACpR,GADRS,GAAKmvE,GACW9yE,GADPsU,GAAKy+D,GACU5hE,EAAIE,EAAKrR,EAAI2D,EAAIT,EAAIoR,UAE/CxD,EAAUsiD,OAAS,SAASzvD,EAAG2Q,SACtB,CAACw+D,GAAMyvB,EAAK5+F,EAAI2rD,EAAKh7C,EAAI60B,GAAK4pC,GAAMyvB,EAAKlzC,EAAK3rD,EAAI4+F,EAAKjuF,KAEzDxD,EAGM,SAASqvF,GAAWjuD,UAC1BuwD,IAAkB,kBAAoBvwD,IAAtCuwD,GAGF,SAASA,GAAkBC,OAC5BxwD,EAI+C0d,EAKpC5+C,EAAImlC,EAAIC,EAEnBusD,EACAC,EACAC,EACA74E,EACA84E,EAdA9/F,EAAI,IACJW,EAAI,IAAK2Q,EAAI,IACb4hF,EAAS,EAAGC,EAAM,EAClBsD,EAAc,EAAGC,EAAW,EAAGC,EAAa,EAC5C57D,EAAQ,EACR+0C,EAAK,EACLC,EAAK,EACLoC,EAAQ,KAAM4tB,EAAUC,GACxBjyF,EAAK,KAAkBkyF,EAAW1iG,GAClC8gG,EAAS,YAOJlB,EAAWxuF,UACXkxF,EAAuBlxF,EAAM,GAAKg6C,GAASh6C,EAAM,GAAKg6C,aAGtDyH,EAAOzhD,UACdA,EAAQkxF,EAAuBzvC,OAAOzhD,EAAM,GAAIA,EAAM,MACtC,CAACA,EAAM,GAAKi6C,GAASj6C,EAAM,GAAKi6C,aAuEzCs3C,QACH55F,EAAS64F,GAAqBn/F,EAAG,EAAG,EAAG8vE,EAAIC,EAAIh1C,GAAOz8B,MAAM,KAAM4wC,EAAQgkD,EAAQC,IAClFrlF,EAAYqxF,GAAqBn/F,EAAGW,EAAI2F,EAAO,GAAIgL,EAAIhL,EAAO,GAAIwpE,EAAIC,EAAIh1C,UAC9E6xB,EAAS4pC,GAAcC,EAAaC,EAAUC,GAC9CiJ,EAAmBtJ,GAAQpnD,EAASphC,GACpC+xF,EAAyBvJ,GAAQ1pC,EAAQgzC,GACzCD,EAAkBX,GAASY,EAAkBvB,GACtC15D,aAGAA,WACP3d,EAAQ84E,EAAc,KACf3C,SAhFTA,EAAWpqE,OAAS,SAASA,UACpB/L,GAAS84E,IAAgB/sE,EAAS/L,EAAQA,EAAQk4E,GAxE7D,SAAyBtyC,UAChBmD,GAAY,CACjBphD,MAAO,SAAShO,EAAG2Q,OACb5R,EAAIktD,EAAOjsD,EAAG2Q,UACX7S,KAAKs0B,OAAOpkB,MAAMjP,EAAE,GAAIA,EAAE,OAoEuCygG,CAAgBvzC,EAAhBuzC,CAAwBJ,EAAQJ,EAAgBM,EAASH,EAAc/sE,QAGnJoqE,EAAW4C,QAAU,SAASviG,UACrBgB,UAAUxC,QAAU+jG,EAAUviG,EAAG20E,OAAQvsE,EAAW++B,KAAWo7D,GAGxE5C,EAAW8C,SAAW,SAASziG,UACtBgB,UAAUxC,QAAUikG,EAAWziG,EAAGuQ,EAAKC,EAAKmlC,EAAKC,EAAK,KAAMzO,KAAWs7D,GAGhF9C,EAAWiD,UAAY,SAAS5iG,UACvBgB,UAAUxC,QAAU+jG,GAAWviG,EAAI6iG,GAAWluB,EAAQ30E,EAAImrD,KAAYwpB,EAAQ,KAAM6tB,IAAmBr7D,KAAWwtC,EAAQvpB,IAGnIu0C,EAAWU,WAAa,SAASrgG,UACxBgB,UAAUxC,QAAUikG,EAAgB,MAALziG,GAAauQ,EAAKC,EAAKmlC,EAAKC,EAAK,KAAM71C,IAAY49F,GAAcptF,GAAMvQ,EAAE,GAAG,GAAIwQ,GAAMxQ,EAAE,GAAG,GAAI21C,GAAM31C,EAAE,GAAG,GAAI41C,GAAM51C,EAAE,GAAG,IAAKmnC,KAAiB,MAAN52B,EAAa,KAAO,CAAC,CAACA,EAAIC,GAAK,CAACmlC,EAAIC,KAGrN+pD,EAAW/6F,MAAQ,SAAS5E,UACnBgB,UAAUxC,QAAUgE,GAAKxC,EAAG0iG,KAAclgG,GAGnDm9F,EAAW/uF,UAAY,SAAS5Q,UACvBgB,UAAUxC,QAAU2E,GAAKnD,EAAE,GAAI8T,GAAK9T,EAAE,GAAI0iG,KAAc,CAACv/F,EAAG2Q,IAGrE6rF,EAAW72F,OAAS,SAAS9I,UACpBgB,UAAUxC,QAAUk3F,EAAS11F,EAAE,GAAK,IAAMmrD,GAASwqC,EAAM31F,EAAE,GAAK,IAAMmrD,GAASu3C,KAAc,CAAChN,EAAStqC,GAASuqC,EAAMvqC,KAG/Hu0C,EAAWvwC,OAAS,SAASpvD,UACpBgB,UAAUxC,QAAUy6F,EAAcj5F,EAAE,GAAK,IAAMmrD,GAAS+tC,EAAWl5F,EAAE,GAAK,IAAMmrD,GAASguC,EAAan5F,EAAExB,OAAS,EAAIwB,EAAE,GAAK,IAAMmrD,GAAU,EAAGu3C,KAAc,CAACzJ,EAAc7tC,GAAS8tC,EAAW9tC,GAAS+tC,EAAa/tC,KAG/Nu0C,EAAWt2B,MAAQ,SAASrpE,UACnBgB,UAAUxC,QAAU++B,EAAQv9B,EAAI,IAAMmrD,GAASu3C,KAAcnlE,EAAQ6tB,IAG9Eu0C,EAAWmD,SAAW,SAAS9iG,UACtBgB,UAAUxC,QAAU8zE,EAAKtyE,GAAK,EAAI,EAAG0iG,KAAcpwB,EAAK,GAGjEqtB,EAAWoD,SAAW,SAAS/iG,UACtBgB,UAAUxC,QAAU+zE,EAAKvyE,GAAK,EAAI,EAAG0iG,KAAcnwB,EAAK,GAGjEotB,EAAW3oF,UAAY,SAAShX,UACvBgB,UAAUxC,QAAU2jG,EAAkBX,GAASY,EAAkBvB,EAAS7gG,EAAIA,GAAImnC,KAAWlzB,GAAK4sF,IAG3GlB,EAAWY,UAAY,SAASj5F,EAAQM,UAC/B24F,GAAUZ,EAAYr4F,EAAQM,IAGvC+3F,EAAWa,QAAU,SAASt4F,EAAMN,UAC3B44F,GAAQb,EAAYz3F,EAAMN,IAGnC+3F,EAAWc,SAAW,SAAShzF,EAAO7F,UAC7B64F,GAASd,EAAYlyF,EAAO7F,IAGrC+3F,EAAWe,UAAY,SAAS/hD,EAAQ/2C,UAC/B84F,GAAUf,EAAYhhD,EAAQ/2C,IAkBhC,kBACL8pC,EAAUwwD,EAAUphG,MAAMG,KAAMD,WAChC2+F,EAAW/sC,OAASlhB,EAAQkhB,QAAUA,EAC/B8vC,KC3KJ,SAASM,GAAgBd,OAC1BtN,EAAO,EACPE,EAAOhgD,GAAK,EACZz/B,EAAI4sF,GAAkBC,GACtB/iG,EAAIkW,EAAEu/E,EAAME,UAEhB31F,EAAE8jG,UAAY,SAASjjG,UACdgB,UAAUxC,OAAS6W,EAAEu/E,EAAO50F,EAAE,GAAKmrD,GAAS2pC,EAAO90F,EAAE,GAAKmrD,IAAW,CAACypC,EAAOxpC,GAAS0pC,EAAO1pC,KAG/FjsD,ECTF,SAAS+jG,GAAkB1yF,EAAIolC,OAChCutD,EAAMlsD,GAAIzmC,GAAKpR,GAAK+jG,EAAMlsD,GAAIrB,IAAO,KAGrCpyC,GAAIpE,GAAK41C,GAAS,OCNjB,SAAiC4/C,OAClCF,EAAU19C,GAAI49C,YAETwO,EAAQ1N,EAAQC,SAChB,CAACD,EAAShB,EAASz9C,GAAI0+C,GAAOjB,UAGvC0O,EAAQxwC,OAAS,SAASzvD,EAAG2Q,SACpB,CAAC3Q,EAAIuxF,EAASr9C,GAAKvjC,EAAI4gF,KAGzB0O,EDLsBC,CAAwB7yF,OAEjDlR,EAAI,EAAI6jG,GAAO,EAAI/jG,EAAI+jG,GAAMv5F,EAAKqK,GAAK3U,GAAKF,WAEvCsyC,EAAQvuC,EAAG2Q,OACd5R,EAAI+R,GAAK3U,EAAI,EAAIF,EAAI63C,GAAInjC,IAAM1U,QAC5B,CAAC8C,EAAI+0C,GAAI9zC,GAAK/D,GAAIwK,EAAK1H,EAAI80C,GAAI7zC,WAGxCuuC,EAAQkhB,OAAS,SAASzvD,EAAG2Q,OACvBwvF,EAAM15F,EAAKkK,EACX9K,EAAIw7B,GAAMrhC,EAAGK,GAAI8/F,IAAQpgG,GAAKogG,UAC9BA,EAAMlkG,EAAI,IACZ4J,GAAK8rC,GAAK5xC,GAAKC,GAAKD,GAAKogG,IACpB,CAACt6F,EAAI5J,EAAGi4C,IAAM/3C,GAAK6D,EAAIA,EAAImgG,EAAMA,GAAOlkG,EAAIA,IAAM,EAAIA,MAGxDsyC,EAGM,qBACNsxD,GAAgBE,IAClBt+F,MAAM,SACNkE,OAAO,CAAC,EAAG,UE7BH,qBACNy6F,KACFN,UAAU,CAAC,KAAM,OACjBr+F,MAAM,MACNgM,UAAU,CAAC,IAAK,MAChBw+C,OAAO,CAAC,GAAI,IACZtmD,OAAO,EAAE,GAAK,OCNd,SAAS06F,GAAa5+F,UACpB,SAASzB,EAAG2Q,OACb2lC,EAAKzC,GAAI7zC,GACTu2C,EAAK1C,GAAIljC,GACTtR,EAAIoC,EAAM60C,EAAKC,UACXl3C,IAAM2W,EAAAA,EAAiB,CAAC,EAAG,GAC5B,CACL3W,EAAIk3C,EAAKzC,GAAI9zC,GACbX,EAAIy0C,GAAInjC,KAKP,SAAS2vF,GAAgBp6B,UACvB,SAASlmE,EAAG2Q,OACbwB,EAAIrB,GAAK9Q,EAAIA,EAAI2Q,EAAIA,GACrBxU,EAAI+pE,EAAM/zD,GACV86E,EAAKn5C,GAAI33C,GACTokG,EAAK1sD,GAAI13C,SACN,CACLklC,GAAMrhC,EAAIitF,EAAI96E,EAAIouF,GAClBrsD,GAAK/hC,GAAKxB,EAAIs8E,EAAK96E,KCnBlB,IAAIquF,GAAwBH,IAAa,SAASI,UAChD3vF,GAAK,GAAK,EAAI2vF,OAGvBD,GAAsB/wC,OAAS6wC,IAAgB,SAASnuF,UAC/C,EAAI+hC,GAAK/hC,EAAI,MCLf,IAAIuuF,GAA0BL,IAAa,SAASlkG,UACjDA,EAAIs3C,GAAKt3C,KAAOA,EAAI23C,GAAI33C,MCD3B,SAASwkG,GAAYpO,EAAQC,SAC3B,CAACD,EAAQryF,GAAIszC,IAAKS,GAASu+C,GAAO,KAYpC,SAASoO,GAAmBryD,OAMlBlhC,EAAImlC,EAAIC,EALnBvgC,EAAIsqF,GAAWjuD,GACf5oC,EAASuM,EAAEvM,OACXlE,EAAQyQ,EAAEzQ,MACVgM,EAAYyE,EAAEzE,UACdyvF,EAAahrF,EAAEgrF,WACf9vF,EAAK,cAkBAyzF,QACHxhG,EAAIsyC,GAAKlwC,IACTmE,EAAIsM,E/BkBG,SAAS+5C,YAGbg0C,EAAQ7xF,UACfA,EAAc69C,EAAO79C,EAAY,GAAK45C,GAAS55C,EAAY,GAAK45C,KAC7C,IAAMC,GAAS75C,EAAY,IAAM65C,GAAS75C,SAJ/D69C,EAAS4pC,GAAc5pC,EAAO,GAAKjE,GAASiE,EAAO,GAAKjE,GAASiE,EAAO5wD,OAAS,EAAI4wD,EAAO,GAAKjE,GAAU,GAO3Gi4C,EAAQxwC,OAAS,SAASrhD,UACxBA,EAAc69C,EAAOwD,OAAOrhD,EAAY,GAAK45C,GAAS55C,EAAY,GAAK45C,KACpD,IAAMC,GAAS75C,EAAY,IAAM65C,GAAS75C,GAGxD6xF,E+B/BK7J,CAASlkF,EAAE+5C,UAAUwD,OAAO,CAAC,EAAG,YACnCytC,EAAiB,MAAN9vF,EACZ,CAAC,CAACxH,EAAE,GAAKvG,EAAGuG,EAAE,GAAKvG,GAAI,CAACuG,EAAE,GAAKvG,EAAGuG,EAAE,GAAKvG,IAAMkvC,IAAYoyD,GAC3D,CAAC,CAAC1gG,KAAKuC,IAAIoD,EAAE,GAAKvG,EAAG+N,GAAKC,GAAK,CAACpN,KAAKsC,IAAIqD,EAAE,GAAKvG,EAAGmzC,GAAKC,IACxD,CAAC,CAACrlC,EAAInN,KAAKuC,IAAIoD,EAAE,GAAKvG,EAAGgO,IAAM,CAACmlC,EAAIvyC,KAAKsC,IAAIqD,EAAE,GAAKvG,EAAGozC,aAtB/DvgC,EAAEzQ,MAAQ,SAAS5E,UACVgB,UAAUxC,QAAUoG,EAAM5E,GAAIgkG,KAAYp/F,KAGnDyQ,EAAEzE,UAAY,SAAS5Q,UACdgB,UAAUxC,QAAUoS,EAAU5Q,GAAIgkG,KAAYpzF,KAGvDyE,EAAEvM,OAAS,SAAS9I,UACXgB,UAAUxC,QAAUsK,EAAO9I,GAAIgkG,KAAYl7F,KAGpDuM,EAAEgrF,WAAa,SAASrgG,UACfgB,UAAUxC,QAAgB,MAALwB,EAAYuQ,EAAKC,EAAKmlC,EAAKC,EAAK,MAAQrlC,GAAMvQ,EAAE,GAAG,GAAIwQ,GAAMxQ,EAAE,GAAG,GAAI21C,GAAM31C,EAAE,GAAG,GAAI41C,GAAM51C,EAAE,GAAG,IAAMgkG,KAAkB,MAANzzF,EAAa,KAAO,CAAC,CAACA,EAAIC,GAAK,CAACmlC,EAAIC,KAY7KouD,IC9CT,SAASC,GAAKnwF,UACL6iC,IAAKS,GAAStjC,GAAK,GAGrB,SAASowF,GAAkB1zF,EAAIolC,OAChCsD,EAAMlC,GAAIxmC,GACVpR,EAAIoR,IAAOolC,EAAKqB,GAAIzmC,GAAMnN,GAAI61C,EAAMlC,GAAIpB,IAAOvyC,GAAI4gG,GAAKruD,GAAMquD,GAAKzzF,IACnElK,EAAI4yC,EAAMv1C,GAAIsgG,GAAKzzF,GAAKpR,GAAKA,MAE5BA,EAAG,OAAO0kG,YAENpyD,EAAQvuC,EAAG2Q,GACdxN,EAAI,EAASwN,GAAKsjC,GAASpC,KAASlhC,GAAKsjC,GAASpC,IAC3ClhC,EAAIsjC,GAASpC,KAASlhC,EAAIsjC,GAASpC,QAC1C9yC,EAAIoE,EAAI3C,GAAIsgG,GAAKnwF,GAAI1U,SAClB,CAAC8C,EAAI+0C,GAAI73C,EAAI+D,GAAImD,EAAIpE,EAAI80C,GAAI53C,EAAI+D,WAG1CuuC,EAAQkhB,OAAS,SAASzvD,EAAG2Q,OACvBmuE,EAAK37E,EAAIwN,EAAG5R,EAAIgB,GAAK9D,GAAK6U,GAAK9Q,EAAIA,EAAI8+E,EAAKA,GAC9Cj5E,EAAIw7B,GAAMrhC,EAAGK,GAAIy+E,IAAO/+E,GAAK++E,UAC3BA,EAAK7iF,EAAI,IACX4J,GAAK8rC,GAAK5xC,GAAKC,GAAKD,GAAK++E,IACpB,CAACj5E,EAAI5J,EAAG,EAAIowD,GAAK7rD,GAAI2C,EAAIpE,EAAG,EAAI9C,IAAMg4C,KAGxC1F,EC5BF,SAASyyD,GAAmBzO,EAAQC,SAClC,CAACD,EAAQC,GCCX,SAASyO,GAAoB5zF,EAAIolC,OAClCsD,EAAMlC,GAAIxmC,GACVpR,EAAIoR,IAAOolC,EAAKqB,GAAIzmC,IAAO0oC,EAAMlC,GAAIpB,KAAQA,EAAKplC,GAClDuB,EAAImnC,EAAM95C,EAAIoR,KAEdhN,GAAIpE,GAAK41C,GAAS,OAAOmvD,YAEpBzyD,EAAQvuC,EAAG2Q,OACd+6D,EAAK98D,EAAI+B,EAAGuwF,EAAKjlG,EAAI+D,QAClB,CAAC0rE,EAAK53B,GAAIotD,GAAKtyF,EAAI88D,EAAK73B,GAAIqtD,WAGrC3yD,EAAQkhB,OAAS,SAASzvD,EAAG2Q,OACvB+6D,EAAK98D,EAAI+B,EACT9K,EAAIw7B,GAAMrhC,EAAGK,GAAIqrE,IAAO3rE,GAAK2rE,UAC7BA,EAAKzvE,EAAI,IACX4J,GAAK8rC,GAAK5xC,GAAKC,GAAKD,GAAK2rE,IACpB,CAAC7lE,EAAI5J,EAAG2S,EAAI7O,GAAK9D,GAAK6U,GAAK9Q,EAAIA,EAAI0rE,EAAKA,KAG1Cn9B,EJhBTmyD,GAAwBjxC,OAAS6wC,IAAgB,SAASnuF,UACjDA,KCDTwuF,GAAYlxC,OAAS,SAASzvD,EAAG2Q,SACxB,CAAC3Q,EAAG,EAAIqsD,GAAKvsD,GAAI6Q,IAAMsjC,KEHhC+sD,GAAmBvxC,OAASuxC,GEH5B,IAAIG,GAAK,SACLC,IAAM,QACNC,GAAK,OACLC,GAAK,QACL9lF,GAAI1K,GAAK,GAAK,EAGX,SAASywF,GAAchP,EAAQC,OAChC3sF,EAAIquC,GAAK14B,GAAIs4B,GAAI0+C,IAAOgP,EAAK37F,EAAIA,EAAG47F,EAAKD,EAAKA,EAAKA,QAChD,CACLjP,EAAS1+C,GAAIhuC,IAAM2V,IAAK2lF,GAAK,EAAIC,GAAKI,EAAKC,GAAM,EAAIJ,GAAK,EAAIC,GAAKE,KACnE37F,GAAKs7F,GAAKC,GAAKI,EAAKC,GAAMJ,GAAKC,GAAKE,KCVjC,SAASE,GAAY1hG,EAAG2Q,OACzB4lC,EAAK1C,GAAIljC,GAAItR,EAAIw0C,GAAI7zC,GAAKu2C,QACvB,CAACA,EAAKzC,GAAI9zC,GAAKX,EAAGy0C,GAAInjC,GAAKtR,GCH7B,SAASsiG,GAAiBpP,EAAQC,OACnCqL,EAAOrL,EAAMA,EAAKoP,EAAO/D,EAAOA,QAC7B,CACLtL,GAAU,MAAS,QAAWsL,EAAO+D,GAAoBA,GAAQ,QAAW/D,EAAO,QAAW+D,GAAhD,UAC9CpP,GAAO,SAAWqL,GAAQ,QAAW+D,GAAoB,QAAW/D,EAAtB,QAA6B,QAAW+D,MCHnF,SAASC,GAAgB7hG,EAAG2Q,SAC1B,CAACkjC,GAAIljC,GAAKmjC,GAAI9zC,GAAI8zC,GAAInjC,ICDxB,SAASmxF,GAAiB9hG,EAAG2Q,OAC9B4lC,EAAK1C,GAAIljC,GAAItR,EAAI,EAAIw0C,GAAI7zC,GAAKu2C,QAC3B,CAACA,EAAKzC,GAAI9zC,GAAKX,EAAGy0C,GAAInjC,GAAKtR,GCH7B,SAAS0iG,GAAsBxP,EAAQC,SACrC,CAACtyF,GAAIszC,IAAKS,GAASu+C,GAAO,KAAMD,GLczCgP,GAAc9xC,OAAS,SAASzvD,EAAG2Q,WAEjB/P,EADZiF,EAAI8K,EAAG6wF,EAAK37F,EAAIA,EAAG47F,EAAKD,EAAKA,EAAKA,EAC7B7lG,EAAI,EAAmBA,EAZjB,KAesB8lG,GAAZD,GAAvB37F,GAAKjF,GAFAiF,GAAKs7F,GAAKC,GAAKI,EAAKC,GAAMJ,GAAKC,GAAKE,IAAO7wF,IAC1CwwF,GAAK,EAAIC,GAAKI,EAAKC,GAAM,EAAIJ,GAAK,EAAIC,GAAKE,KACjB37F,GAAa27F,EAAKA,IAC9CnhG,GAAIO,GAASkvF,OAJ+Bn0F,SAM3C,CACL6f,GAAIxb,GAAKmhG,GAAK,EAAIC,GAAKI,EAAKC,GAAM,EAAIJ,GAAK,EAAIC,GAAKE,IAAO3tD,GAAIhuC,GAC/DquC,GAAKJ,GAAIjuC,GAAK2V,MCnBlBkmF,GAAYjyC,OAAS6wC,GAAgBj0C,ICErCs1C,GAAiBlyC,OAAS,SAASzvD,EAAG2Q,OACf/P,EAAjB4xF,EAAM7hF,EAAGhV,EAAI,KACd,KACGkiG,EAAOrL,EAAMA,EAAKoP,EAAO/D,EAAOA,EACpCrL,GAAO5xF,GAAS4xF,GAAO,SAAWqL,GAAQ,QAAW+D,GAAoB,QAAW/D,EAAtB,QAA6B,QAAW+D,KAAUjxF,IAC3G,SAAWktF,GAAQ,QAAe+D,GAAwB,QAAe/D,EAA/B,QAAsC,QAAW,GAAK+D,WAC9FvhG,GAAIO,GAASixC,MAAal2C,EAAI,SAChC,CACLqE,GAAK,OAAU69F,EAAOrL,EAAMA,IAAoBqL,GAAoBA,EAAOA,EAAOA,GAAQ,QAAW,QAAWA,GAAvD,SAApB,UACrCrL,ICZJqP,GAAgBpyC,OAAS6wC,GAAgBpsD,ICCzC4tD,GAAiBryC,OAAS6wC,IAAgB,SAASnuF,UAC1C,EAAIk6C,GAAKl6C,MCHlB4vF,GAAsBtyC,OAAS,SAASzvD,EAAG2Q,SAClC,EAAEA,EAAG,EAAI07C,GAAKvsD,GAAIE,IAAMi0C,KCR1B,IAAI5zC,GAAMJ,KAAKI,IAIXwzC,GAAM5zC,KAAK4zC,IASXC,GAAM7zC,KAAK6zC,IAKXnC,GAAK1xC,KAAK26B,GACVqZ,GAAStC,GAAK,EAGdqwD,GAkBJ,SAAchiG,UACZA,EAAI,EAAIC,KAAK6Q,KAAK9Q,GAAK,EAnBb8Q,CAAK,GAUjB,SAASojC,GAAKl0C,UACZA,EAAI,EAAIi0C,GAASj0C,GAAK,GAAKi0C,GAASh0C,KAAKi0C,KAAKl0C,GC9BhD,SAASiiG,GAAsBC,EAAI1P,OACF5xF,EAAlCuhG,EAAWD,EAAKpuD,GAAI0+C,GAAM72F,EAAI,MAC/B62F,GAAO5xF,GAAS4xF,EAAM1+C,GAAI0+C,GAAO2P,IAAa,EAAItuD,GAAI2+C,UAClDnyF,GAAIO,GDUQ,QCVcjF,EAAI,UAC9B62F,EAAM,EAgBR,IAAI4P,GAbJ,SAA6B9rD,EAAIC,EAAI2rD,YAEjCjC,EAAQ1N,EAAQC,SAChB,CAACl8C,EAAKi8C,EAAS1+C,GAAI2+C,EAAMyP,GAAsBC,EAAI1P,IAAOj8C,EAAKzC,GAAI0+C,WAG5EyN,EAAQxwC,OAAS,SAASzvD,EAAG2Q,UACpBA,EAAIujC,GAAKvjC,EAAI4lC,GAAK,CAACv2C,GAAKs2C,EAAKzC,GAAIljC,IAAKujC,IAAM,EAAIvjC,EAAImjC,GAAI,EAAInjC,IAAMuxF,KAGpEjC,EAGiBoC,CAAoBL,GAAQ/tD,GAAQ+tD,GAAOrwD,ICpBrE,MAAM2wD,GAAcC,KACdC,GAAuB,CAC7B,YAAa,aAAc,QAAS,YAAa,SAAU,SAAU,YAAa,YAAa,WAAY,WAC3G,cAAe,WAAY,WAAY,QAAS,WAAY,SAAU,QAAS,UAAW,QAK1F,SAASr8F,GAAOwG,EAAMxE,UACb,SAASq0F,UACRxgG,EAAImM,WACVnM,EAAE2Q,KAAOA,EACT3Q,EAAEZ,KAAOmnG,KAAU/F,WAAWxgG,GAE9BA,EAAEmwB,KAAOnwB,EAAEmwB,MAAQ,iBACXhwB,EAAIqgG,WACVgG,GAAqB9iG,SAAQssB,IACvBhwB,EAAEgwB,IAAO7vB,EAAE6vB,GAAMhwB,EAAEgwB,SAEzB7vB,EAAEf,KAAK4gG,YAAYhgG,EAAEZ,KAAK4gG,eACnB7/F,GAGFH,GAIX,SAASwgG,GAAW7vF,EAAM81F,OACnB91F,GAAwB,iBAATA,QACZ,IAAI7Q,MAAM,iDAGlB6Q,EAAOA,EAAK6I,cAER3X,UAAUxC,OAAS,GACrBqnG,GAAY/1F,GAAQxG,GAAOwG,EAAM81F,GAC1B3kG,MAEA4kG,GAAY/1F,IAAS,KAGhC,SAASg2F,GAAkBF,UAClBA,GAAQA,EAAKrnG,MAAQknG,GAE9B,MAAMI,GAAc,CAElBE,OAAQC,GACRC,UC1Ba,eACTz8E,EACA84E,EACoB4D,EAC+DC,EACDC,EAClFj1F,EAHAk1F,EAAUN,KACVO,EAAS/C,KAAiBn0C,OAAO,CAAC,IAAK,IAAItmD,OAAO,EAAE,EAAG,OAAOm6F,UAAU,CAAC,GAAI,KAC7EsD,EAAShD,KAAiBn0C,OAAO,CAAC,IAAK,IAAItmD,OAAO,EAAE,EAAG,OAAOm6F,UAAU,CAAC,EAAG,KACrEuD,EAAc,CAACr1F,MAAO,SAAShO,EAAG2Q,GAAK3C,EAAQ,CAAChO,EAAG2Q,cAErD2yF,EAAUl1F,OACbpO,EAAIoO,EAAY,GAAIuC,EAAIvC,EAAY,UACjCJ,EAAQ,KACV+0F,EAAa/0F,MAAMhO,EAAG2Q,GAAI3C,IACvBg1F,EAAYh1F,MAAMhO,EAAG2Q,GAAI3C,KACzBi1F,EAAYj1F,MAAMhO,EAAG2Q,GAAI3C,YAmE1Bg2B,WACP3d,EAAQ84E,EAAc,KACfmE,SAlETA,EAAU7zC,OAAS,SAASrhD,OACtB/O,EAAI6jG,EAAQzhG,QACZmE,EAAIs9F,EAAQz1F,YACZzN,GAAKoO,EAAY,GAAKxI,EAAE,IAAMvG,EAC9BsR,GAAKvC,EAAY,GAAKxI,EAAE,IAAMvG,SAC1BsR,GAAK,KAASA,EAAI,MAAS3Q,IAAM,MAASA,GAAK,KAAQmjG,EACzDxyF,GAAK,MAASA,EAAI,MAAS3Q,IAAM,MAASA,GAAK,KAAQojG,EACvDF,GAASzzC,OAAOrhD,IAGxBk1F,EAAUlxE,OAAS,SAASA,UACnB/L,GAAS84E,IAAgB/sE,EAAS/L,GA5C1Bk9E,EA4CoD,CAACL,EAAQ9wE,OAAO+sE,EAAc/sE,GAAS+wE,EAAO/wE,OAAOA,GAASgxE,EAAOhxE,OAAOA,IA3C7In2B,EAAIsnG,EAAQloG,OA2CmCgrB,EA1C5C,CACLrY,MAAO,SAAShO,EAAG2Q,WAAShV,GAAK,IAAYA,EAAIM,GAAGsnG,EAAQ5nG,GAAGqS,MAAMhO,EAAG2Q,IACxE4/E,OAAQ,mBAAiB50F,GAAK,IAAYA,EAAIM,GAAGsnG,EAAQ5nG,GAAG40F,UAC5Dx5C,UAAW,mBAAiBp7C,GAAK,IAAYA,EAAIM,GAAGsnG,EAAQ5nG,GAAGo7C,aAC/DC,QAAS,mBAAiBr7C,GAAK,IAAYA,EAAIM,GAAGsnG,EAAQ5nG,GAAGq7C,WAC7Dk6C,aAAc,mBAAiBv1F,GAAK,IAAYA,EAAIM,GAAGsnG,EAAQ5nG,GAAGu1F,gBAClEC,WAAY,mBAAiBx1F,GAAK,IAAYA,EAAIM,GAAGsnG,EAAQ5nG,GAAGw1F,gBARpE,IAAmBoS,EACbtnG,GA8CJqnG,EAAUzvF,UAAY,SAAShX,UACxBgB,UAAUxC,QACf6nG,EAAQrvF,UAAUhX,GAAIsmG,EAAOtvF,UAAUhX,GAAIumG,EAAOvvF,UAAUhX,GACrDmnC,KAFuBk/D,EAAQrvF,aAKxCyvF,EAAU7hG,MAAQ,SAAS5E,UACpBgB,UAAUxC,QACf6nG,EAAQzhG,MAAM5E,GAAIsmG,EAAO1hG,MAAU,IAAJ5E,GAAWumG,EAAO3hG,MAAM5E,GAChDymG,EAAU71F,UAAUy1F,EAAQz1F,cAFLy1F,EAAQzhG,SAKxC6hG,EAAU71F,UAAY,SAAS5Q,OACxBgB,UAAUxC,OAAQ,OAAO6nG,EAAQz1F,gBAClCpO,EAAI6jG,EAAQzhG,QAASzB,GAAKnD,EAAE,GAAI8T,GAAK9T,EAAE,UAE3CkmG,EAAeG,EACVz1F,UAAU5Q,GACVqgG,WAAW,CAAC,CAACl9F,EAAI,KAAQX,EAAGsR,EAAI,KAAQtR,GAAI,CAACW,EAAI,KAAQX,EAAGsR,EAAI,KAAQtR,KACxE+yB,OAAOixE,GAEZL,EAAcG,EACT11F,UAAU,CAACzN,EAAI,KAAQX,EAAGsR,EAAI,KAAQtR,IACtC69F,WAAW,CAAC,CAACl9F,EAAI,KAAQX,EAAIwyC,GAASlhC,EAAI,IAAQtR,EAAIwyC,IAAU,CAAC7xC,EAAI,KAAQX,EAAIwyC,GAASlhC,EAAI,KAAQtR,EAAIwyC,MAC1Gzf,OAAOixE,GAEZJ,EAAcG,EACT31F,UAAU,CAACzN,EAAI,KAAQX,EAAGsR,EAAI,KAAQtR,IACtC69F,WAAW,CAAC,CAACl9F,EAAI,KAAQX,EAAIwyC,GAASlhC,EAAI,KAAQtR,EAAIwyC,IAAU,CAAC7xC,EAAI,KAAQX,EAAIwyC,GAASlhC,EAAI,KAAQtR,EAAIwyC,MAC1Gzf,OAAOixE,GAELr/D,KAGTs/D,EAAUlG,UAAY,SAASj5F,EAAQM,UAC9B24F,GAAUkG,EAAWn/F,EAAQM,IAGtC6+F,EAAUjG,QAAU,SAASt4F,EAAMN,UAC1B44F,GAAQiG,EAAWv+F,EAAMN,IAGlC6+F,EAAUhG,SAAW,SAAShzF,EAAO7F,UAC5B64F,GAASgG,EAAWh5F,EAAO7F,IAGpC6+F,EAAU/F,UAAY,SAAS/hD,EAAQ/2C,UAC9B84F,GAAU+F,EAAW9nD,EAAQ/2C,IAQ/B6+F,EAAU7hG,MAAM,OD1DvB+hG,mBdvCa,kBACNhH,GAAWgE,IACb/+F,MAAM,QACNg+F,UAAU,UcqCfgE,qBbxCa,kBACNjH,GAAWkE,IACbj/F,MAAM,SACNg+F,UAAU,UasCfiE,eXpBa,kBACN7D,GAAgBkB,IAClBt/F,MAAM,OACNq+F,UAAU,CAAC,GAAI,MWkBpB6D,eAAgBC,GAChBC,iBT5Ba,kBACNhE,GAAgBoB,IAClBx/F,MAAM,SACNkE,OAAO,CAAC,EAAG,WS0BhBm+F,WRxBa,kBACNtH,GAAW+E,IACb9/F,MAAM,UQuBXsiG,gBVjDa,kBACNvH,GAAWwE,IACbv/F,MAAM,SUgDXuiG,SP/Ca,kBACNxH,GAAWkF,IACbjgG,MAAM,SACNg+F,UAAU,KO6Cf7iG,SErDa,eAEE+9F,EAAInyB,EACJn7D,EAAImlC,EAAIC,EASnBpsB,EACA84E,EAZA9/F,EAAI,EAAGyqF,EAAK,EAAGC,EAAK,EAAG5a,EAAK,EAAGC,EAAK,EACpCh1C,EAAQ,EACRhtB,EAAK,KACLE,EAAK,EAAGC,EAAK,EACbJ,EAAYiiD,GAAY,CACtBphD,MAAO,SAAShO,EAAG2Q,OACb3U,EAAIwgG,EAAW,CAACx8F,EAAG2Q,SAClByhB,OAAOpkB,MAAMhS,EAAE,GAAIA,EAAE,OAG9BsjG,EAAW1iG,YAINonC,WACP12B,EAAKjO,EAAI8vE,EACT5hE,EAAKlO,EAAI+vE,EACT/oD,EAAQ84E,EAAc,KACf3C,WAGAA,EAAYxgG,OACfgE,EAAIhE,EAAE,GAAKsR,EAAIqD,EAAI3U,EAAE,GAAKuR,KAC1B6sB,EAAO,KACLx0B,EAAI+K,EAAIgqF,EAAK36F,EAAIwoE,EACrBxoE,EAAIA,EAAI26F,EAAKhqF,EAAI63D,EACjB73D,EAAI/K,QAEC,CAAC5F,EAAI8pF,EAAIn5E,EAAIo5E,UAEtByS,EAAW/sC,OAAS,SAASzzD,OACvBgE,EAAIhE,EAAE,GAAK8tF,EAAIn5E,EAAI3U,EAAE,GAAK+tF,KAC1B3vD,EAAO,KACLx0B,EAAI+K,EAAIgqF,EAAK36F,EAAIwoE,EACrBxoE,EAAIA,EAAI26F,EAAKhqF,EAAI63D,EACjB73D,EAAI/K,QAEC,CAAC5F,EAAIsN,EAAIqD,EAAIpD,IAEtBivF,EAAWpqE,OAAS,SAASA,UACpB/L,GAAS84E,IAAgB/sE,EAAS/L,EAAQA,EAAQlZ,EAAUmyF,EAASH,EAAc/sE,KAE5FoqE,EAAW8C,SAAW,SAASziG,UACtBgB,UAAUxC,QAAUikG,EAAWziG,EAAGuQ,EAAKC,EAAKmlC,EAAKC,EAAK,KAAMzO,KAAWs7D,GAEhF9C,EAAWU,WAAa,SAASrgG,UACxBgB,UAAUxC,QAAUikG,EAAgB,MAALziG,GAAauQ,EAAKC,EAAKmlC,EAAKC,EAAK,KAAM71C,IAAY49F,GAAcptF,GAAMvQ,EAAE,GAAG,GAAIwQ,GAAMxQ,EAAE,GAAG,GAAI21C,GAAM31C,EAAE,GAAG,GAAI41C,GAAM51C,EAAE,GAAG,IAAKmnC,KAAiB,MAAN52B,EAAa,KAAO,CAAC,CAACA,EAAIC,GAAK,CAACmlC,EAAIC,KAErN+pD,EAAW/6F,MAAQ,SAAS5E,UACnBgB,UAAUxC,QAAUgE,GAAKxC,EAAGmnC,KAAW3kC,GAEhDm9F,EAAW/uF,UAAY,SAAS5Q,UACvBgB,UAAUxC,QAAUyuF,GAAMjtF,EAAE,GAAIktF,GAAMltF,EAAE,GAAImnC,KAAW,CAAC8lD,EAAIC,IAErEyS,EAAWt2B,MAAQ,SAASrpE,UACnBgB,UAAUxC,QAAqCmtE,EAAK10B,GAAhC1Z,EAAQv9B,EAAI,IAAMmrD,IAA0B2yC,EAAK9mD,GAAIzZ,GAAQ4J,KAAW5J,EAAQ6tB,IAE7Gu0C,EAAWmD,SAAW,SAAS9iG,UACtBgB,UAAUxC,QAAU8zE,EAAKtyE,GAAK,EAAI,EAAGmnC,KAAWmrC,EAAK,GAE9DqtB,EAAWoD,SAAW,SAAS/iG,UACtBgB,UAAUxC,QAAU+zE,EAAKvyE,GAAK,EAAI,EAAGmnC,KAAWorC,EAAK,GAE9DotB,EAAWY,UAAY,SAASj5F,EAAQM,UAC/B24F,GAAUZ,EAAYr4F,EAAQM,IAEvC+3F,EAAWa,QAAU,SAASt4F,EAAMN,UAC3B44F,GAAQb,EAAYz3F,EAAMN,IAEnC+3F,EAAWc,SAAW,SAAShzF,EAAO7F,UAC7B64F,GAASd,EAAYlyF,EAAO7F,IAErC+3F,EAAWe,UAAY,SAAS/hD,EAAQ/2C,UAC/B84F,GAAUf,EAAYhhD,EAAQ/2C,IAGhC+3F,GFvBPyH,SZhDa,kBACNrD,GAAmBD,IACrBl/F,MAAM,IAAMmwC,KY+CjBsyD,UDpCa,kBACN1H,GAAW4F,IACb3gG,MAAM,UCmCX0iG,cNtCa,kBACN3H,GAAWmF,IACblgG,MAAM,UMqCX2iG,aLrDa,kBACN5H,GAAWqF,IACbpgG,MAAM,OACNg+F,UAAU,YKmDf4E,cJnDa,kBACN7H,GAAWsF,IACbrgG,MAAM,KACNg+F,UAAU,MIiDf6E,mBHtDa,eACTpyF,EAAI0uF,GAAmBmB,IACvBp8F,EAASuM,EAAEvM,OACXsmD,EAAS/5C,EAAE+5C,cAEf/5C,EAAEvM,OAAS,SAAS9I,UACXgB,UAAUxC,OAASsK,EAAO,EAAE9I,EAAE,GAAIA,EAAE,KAAsB,EAAdA,EAAI8I,KAAa,IAAK9I,EAAE,KAG7EqV,EAAE+5C,OAAS,SAASpvD,UACXgB,UAAUxC,OAAS4wD,EAAO,CAACpvD,EAAE,GAAIA,EAAE,GAAIA,EAAExB,OAAS,EAAIwB,EAAE,GAAK,GAAK,KAAsB,EAAdA,EAAIovD,KAAa,GAAIpvD,EAAE,GAAIA,EAAE,GAAK,KAG9GovD,EAAO,CAAC,EAAG,EAAG,KAChBxqD,MAAM,WG2Cb,IAAK,MAAMlD,KAAOmkG,GAChBlG,GAAWj+F,EAAKmkG,GAAYnkG,IG5D9B,SAASmjC,MAET,MAAM6iE,GAAQ,CAAC,GAAI,CAAC,CAAC,CAAC,EAAK,KAAM,CAAC,GAAK,KAAQ,CAAC,CAAC,CAAC,IAAK,GAAM,CAAC,EAAK,OAAQ,CAAC,CAAC,CAAC,IAAK,GAAM,CAAC,GAAK,KAAQ,CAAC,CAAC,CAAC,EAAK,IAAM,CAAC,IAAK,KAAQ,CAAC,CAAC,CAAC,EAAK,KAAM,CAAC,GAAK,IAAO,CAAC,CAAC,EAAK,IAAM,CAAC,IAAK,KAAQ,CAAC,CAAC,CAAC,EAAK,IAAM,CAAC,EAAK,OAAQ,CAAC,CAAC,CAAC,EAAK,IAAM,CAAC,GAAK,KAAQ,CAAC,CAAC,CAAC,GAAK,GAAM,CAAC,EAAK,MAAQ,CAAC,CAAC,CAAC,EAAK,KAAM,CAAC,EAAK,MAAQ,CAAC,CAAC,CAAC,GAAK,GAAM,CAAC,EAAK,KAAO,CAAC,CAAC,IAAK,GAAM,CAAC,EAAK,OAAQ,CAAC,CAAC,CAAC,IAAK,GAAM,CAAC,EAAK,MAAQ,CAAC,CAAC,CAAC,GAAK,GAAM,CAAC,IAAK,KAAQ,CAAC,CAAC,CAAC,EAAK,KAAM,CAAC,IAAK,KAAQ,CAAC,CAAC,CAAC,GAAK,GAAM,CAAC,EAAK,OAAQ,IAE/c,SAASC,SACHh3F,EAAK,EACLE,EAAK,EACL8sB,EAASiqE,WAEJD,EAAS1yF,EAAQ4yF,UACjBA,EAAGllG,KAAIL,GAASwlG,EAAQ7yF,EAAQ3S,cAKhCwlG,EAAQ7yF,EAAQ3S,OACnBylG,EAAW,GACXC,EAAQ,mBAsBI/yF,EAAQ3S,EAAO6uB,OAG3BhuB,EACA2Q,EACAyF,EACAC,EACA+xC,EACA4B,EAPA17C,EAAkB,IAAInQ,MACtBoQ,EAAgB,IAAIpQ,MAQxB6B,EAAI2Q,GAAK,EACT0F,EAAKvE,EAAO,IAAM3S,EAClBolG,GAAMluF,GAAM,GAAG3W,QAAQ4P,UAEdtP,EAAIwN,EAAK,GAChB4I,EAAKC,EAAIA,EAAKvE,EAAO9R,EAAI,IAAMb,EAC/BolG,GAAMnuF,EAAKC,GAAM,GAAG3W,QAAQ4P,GAG9Bi1F,GAAMluF,GAAM,GAAG3W,QAAQ4P,UAEdqB,EAAIjD,EAAK,GAAG,KACnB1N,GAAK,EACLqW,EAAKvE,EAAOnB,EAAInD,EAAKA,IAAOrO,EAC5BipD,EAAKt2C,EAAOnB,EAAInD,IAAOrO,EACvBolG,GAAMluF,GAAM,EAAI+xC,GAAM,GAAG1oD,QAAQ4P,KAExBtP,EAAIwN,EAAK,GAChB4I,EAAKC,EAAIA,EAAKvE,EAAOnB,EAAInD,EAAKA,EAAKxN,EAAI,IAAMb,EAC7C6qD,EAAK5B,EAAIA,EAAKt2C,EAAOnB,EAAInD,EAAKxN,EAAI,IAAMb,EACxColG,GAAMnuF,EAAKC,GAAM,EAAI+xC,GAAM,EAAI4B,GAAM,GAAGtqD,QAAQ4P,GAGlDi1F,GAAMluF,EAAK+xC,GAAM,GAAG1oD,QAAQ4P,GAI9BtP,GAAK,EACLooD,EAAKt2C,EAAOnB,EAAInD,IAAOrO,EACvBolG,GAAMn8C,GAAM,GAAG1oD,QAAQ4P,UAEdtP,EAAIwN,EAAK,GAChBw8C,EAAK5B,EAAIA,EAAKt2C,EAAOnB,EAAInD,EAAKxN,EAAI,IAAMb,EACxColG,GAAMn8C,GAAM,EAAI4B,GAAM,GAAGtqD,QAAQ4P,YAK1BA,EAAOrB,OAKV9K,EACAyL,EALAF,EAAQ,CAACT,EAAK,GAAG,GAAKjO,EAAGiO,EAAK,GAAG,GAAK0C,GACtChC,EAAM,CAACV,EAAK,GAAG,GAAKjO,EAAGiO,EAAK,GAAG,GAAK0C,GACpCm0F,EAAa9yF,EAAMtD,GACnBq2F,EAAW/yF,EAAMrD,IAIjBxL,EAAIoL,EAAcu2F,KAChBl2F,EAAIN,EAAgBy2F,YACfx2F,EAAcpL,EAAEwL,YAChBL,EAAgBM,EAAEF,OAErBvL,IAAMyL,GACRzL,EAAE+K,KAAK3R,KAAKoS,GACZqf,EAAS7qB,EAAE+K,OAEXI,EAAgBnL,EAAEuL,OAASH,EAAcK,EAAED,KAAO,CAChDD,MAAOvL,EAAEuL,MACTC,IAAKC,EAAED,IACPT,KAAM/K,EAAE+K,KAAK3Q,OAAOqR,EAAEV,gBAInBK,EAAcpL,EAAEwL,KACvBxL,EAAE+K,KAAK3R,KAAKoS,GACZJ,EAAcpL,EAAEwL,IAAMo2F,GAAY5hG,IAE3BA,EAAImL,EAAgBy2F,KACzBn2F,EAAIL,EAAcu2F,YACbx2F,EAAgBnL,EAAEuL,cAClBH,EAAcK,EAAED,KAEnBxL,IAAMyL,GACRzL,EAAE+K,KAAK3R,KAAKoS,GACZqf,EAAS7qB,EAAE+K,OAEXI,EAAgBM,EAAEF,OAASH,EAAcpL,EAAEwL,KAAO,CAChDD,MAAOE,EAAEF,MACTC,IAAKxL,EAAEwL,IACPT,KAAMU,EAAEV,KAAK3Q,OAAO4F,EAAE+K,gBAInBI,EAAgBnL,EAAEuL,OACzBvL,EAAE+K,KAAKgB,QAAQR,GACfJ,EAAgBnL,EAAEuL,MAAQo2F,GAAc3hG,GAG1CmL,EAAgBw2F,GAAcv2F,EAAcw2F,GAAY,CACtDr2F,MAAOo2F,EACPn2F,IAAKo2F,EACL72F,KAAM,CAACQ,EAAOC,IAtDpB41F,GAAMn8C,GAAM,GAAG1oD,QAAQ4P,GAnEvB01F,CAASlzF,EAAQ3S,GAAO+O,IACtBssB,EAAOtsB,EAAM4D,EAAQ3S,GA0K3B,SAAc+O,OACRvS,EAAI,EACJM,EAAIiS,EAAK7S,OACT87C,EAAOjpC,EAAKjS,EAAI,GAAG,GAAKiS,EAAK,GAAG,GAAKA,EAAKjS,EAAI,GAAG,GAAKiS,EAAK,GAAG,UAEzDvS,EAAIM,GAAGk7C,GAAQjpC,EAAKvS,EAAI,GAAG,GAAKuS,EAAKvS,GAAG,GAAKuS,EAAKvS,EAAI,GAAG,GAAKuS,EAAKvS,GAAG,UAExEw7C,EAhLCA,CAAKjpC,GAAQ,EAAG02F,EAASroG,KAAK,CAAC2R,IAAY22F,EAAMtoG,KAAK2R,MAE5D22F,EAAMnlG,SAAQulG,QACP,IAAgC92F,EAA5BxS,EAAI,EAAGM,EAAI2oG,EAASvpG,OAAiBM,EAAIM,IAAKN,MACD,IAAhD4qE,IAAUp4D,EAAUy2F,EAASjpG,IAAI,GAAIspG,eACvC92F,EAAQ5R,KAAK0oG,MAKZ,CACLt4F,KAAM,eACNxN,MAAOA,EACPiP,YAAaw2F,YAgHR5yF,EAAMhE,UACK,EAAXA,EAAM,GAASA,EAAM,IAAMR,EAAK,GAAK,WAGrCi3F,EAAav2F,EAAM4D,EAAQ3S,GAClC+O,EAAKxO,SAAQsO,QAKP47C,EAJA5pD,EAAIgO,EAAM,GACV2C,EAAI3C,EAAM,GACVk3F,EAAS,EAAJllG,EACLmlG,EAAS,EAAJx0F,EAELk5C,EAAK/3C,EAAOqzF,EAAK33F,EAAK03F,GAEtBllG,EAAI,GAAKA,EAAIwN,GAAM03F,IAAOllG,IAC5B4pD,EAAK93C,EAAOqzF,EAAK33F,EAAK03F,EAAK,GAC3Bl3F,EAAM,GAAKhO,GAAKb,EAAQyqD,IAAOC,EAAKD,GAAM,IAGxCj5C,EAAI,GAAKA,EAAIjD,GAAMy3F,IAAOx0F,IAC5Bi5C,EAAK93C,GAAQqzF,EAAK,GAAK33F,EAAK03F,GAC5Bl3F,EAAM,GAAK2C,GAAKxR,EAAQyqD,IAAOC,EAAKD,GAAM,cAKhD46C,EAASG,QAAUA,EAEnBH,EAASz/F,KAAO,SAAUlI,OACnBgB,UAAUxC,OAAQ,MAAO,CAACmS,EAAIE,OAE/B03F,EAAKnlG,KAAKwR,MAAM5U,EAAE,IAClBwxD,EAAKpuD,KAAKwR,MAAM5U,EAAE,WAEhBuoG,GAAM,GAAK/2C,GAAM,GAAIzyD,EAAM,gBAC1B4R,EAAK43F,EAAI13F,EAAK2gD,EAAIm2C,GAG3BA,EAAShqE,OAAS,SAAU39B,UACnBgB,UAAUxC,QAAUm/B,EAAS39B,EAAI4nG,EAAe/iE,GAAM8iE,GAAYhqE,IAAWiqE,GAG/ED,EAaT,SAASj+B,GAASr4D,EAAM+2F,WAGlB9oG,EAFAR,GAAK,EACLM,EAAIgpG,EAAK5pG,SAGJM,EAAIM,MAAOE,EAAIkpG,GAAan3F,EAAM+2F,EAAKtpG,IAAK,OAAOQ,SAErD,EAGT,SAASkpG,GAAan3F,EAAMF,WACtBhO,EAAIgO,EAAM,GACV2C,EAAI3C,EAAM,GACVu4D,GAAY,EAEP5qE,EAAI,EAAGM,EAAIiS,EAAK7S,OAAQa,EAAID,EAAI,EAAGN,EAAIM,EAAGC,EAAIP,IAAK,KACtDg2C,EAAKzjC,EAAKvS,GACV2pG,EAAK3zD,EAAG,GACR4zD,EAAK5zD,EAAG,GACR6zD,EAAKt3F,EAAKhS,GACVupG,EAAKD,EAAG,GACRE,EAAKF,EAAG,MACRG,GAAgBh0D,EAAI6zD,EAAIx3F,GAAQ,OAAO,EACvCu3F,EAAK50F,GAAM+0F,EAAK/0F,GAAK3Q,GAAKylG,EAAKH,IAAO30F,EAAI40F,IAAOG,EAAKH,GAAMD,IAAI/+B,GAAYA,UAG3EA,EAGT,SAASo/B,GAAgBpmG,EAAGlD,EAAGF,OACzBR,EAQUK,EAAGI,EAAG2C,SAJtB,SAAmBQ,EAAGlD,EAAGF,UACfE,EAAE,GAAKkD,EAAE,KAAOpD,EAAE,GAAKoD,EAAE,MAASpD,EAAE,GAAKoD,EAAE,KAAOlD,EAAE,GAAKkD,EAAE,IAJ5DqmG,CAAUrmG,EAAGlD,EAAGF,KAOTH,EAPsBuD,EAAE5D,IAAM4D,EAAE,KAAOlD,EAAE,KAOtCD,EAP4CD,EAAER,GAO3CoD,EAP+C1C,EAAEV,GAQ9DK,GAAKI,GAAKA,GAAK2C,GAAKA,GAAK3C,GAAKA,GAAKJ,GAG5C,SAASk5D,GAAU71D,EAAG46B,EAAMn9B,UACnB,SAAUgV,OACX63E,EAAKxlF,GAAO2N,GACZpD,EAAQ5R,EAAOmD,KAAKsC,IAAIonF,EAAG,GAAI,GAAKA,EAAG,GACvC14E,EAAO04E,EAAG,GACVlnF,EAAOwO,EAAOvC,EACd0C,EAAO6oB,EAAOtoB,GAASjD,EAAOuC,EAAM5R,GAAKoD,GAAQpD,EAAI,UAClDiD,GAAMoM,EAAQ0C,EAAMH,EAAMG,IAiCrC,SAASy0F,GAAW11E,GAClB4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAqG7B,SAAShjB,GAAUg5E,EAAMhX,EAAIC,EAAI0a,EAAIC,SAC7Bv3C,EAAK2zC,EAAK3zC,IAAM,EAChBC,EAAK0zC,EAAK1zC,IAAM,EAChBi7C,EAAOve,EAAKC,EAAK,WAEd02B,EAAiB13F,GACxBA,EAAY1O,QAAQqmG,YAGbA,EAAc33F,GACjBs/E,GAAMt/E,EAAYL,UAEtBK,EAAY1O,QAAQwN,YAGbA,EAAekB,GACtBA,EAAY,IAAMA,EAAY,GAAKokC,GAAM28B,EAAK2a,EAC9C17E,EAAY,IAAMA,EAAY,GAAKqkC,GAAM28B,EAAK2a,SAGzC,SAAU98E,UACfA,EAASmB,YAAY1O,QAAQomG,GACtB74F,GAIX,SAASskE,GAAO3xC,EAAItV,EAAMnnB,SAClBI,EAAIq8B,GAAM,EAAIA,EAAKomE,GAAa17E,EAAMnnB,UACrClD,KAAKsR,OAAOtR,KAAK6Q,KAAK,EAAIvN,EAAIA,EAAI,GAAK,GAAK,GAGrD,SAAS+M,GAAOzT,UACP+F,EAAW/F,GAAKA,EAAIyE,GAAUzE,GAIvC,SAASopG,SACHjmG,EAAIgQ,GAAKA,EAAE,GACXW,EAAIX,GAAKA,EAAE,GACXk2F,EAASnpG,EACTi/B,EAAY,EAAE,GAAI,GAClBxuB,EAAK,IACLE,EAAK,IACLrO,EAAI,WAGC0uC,EAAQzjB,EAAMyc,SACfi3B,EAAKuT,GAAOv1C,EAAU,GAAI1R,EAAMtqB,IAAMX,EAE5C4+D,EAAKsT,GAAOv1C,EAAU,GAAI1R,EAAM3Z,IAAMtR,EAEtCi2C,EAAK0oB,EAAKA,EAAK,EAAI,EAEnBzoB,EAAK0oB,EAAKA,EAAK,EAAI,EAEnBhiE,EAAI,EAAIq5C,GAAM9nC,GAAMnO,GAEpB6S,EAAI,EAAIqjC,GAAM7nC,GAAMrO,GAEpB8mG,EAAU,IAAIC,aAAanqG,EAAIiW,GACzBm0F,EAAU,IAAID,aAAanqG,EAAIiW,OACjCJ,EAASq0F,EACb77E,EAAK5qB,SAAQsQ,UACLs1F,EAAKhwD,IAAOt1C,EAAEgQ,IAAM3Q,GACpBkmG,EAAKhwD,IAAO5kC,EAAEX,IAAM3Q,GAEtBimG,GAAM,GAAKA,EAAKrpG,GAAKspG,GAAM,GAAKA,EAAKrzF,IACvCi0F,EAAQb,EAAKC,EAAKtpG,KAAOiqG,EAAOl2F,OAIhCguD,EAAK,GAAKC,EAAK,GACjBqoC,GAAMrqG,EAAGiW,EAAGi0F,EAASE,EAASroC,GAC9BuoC,GAAMtqG,EAAGiW,EAAGm0F,EAASF,EAASloC,GAC9BqoC,GAAMrqG,EAAGiW,EAAGi0F,EAASE,EAASroC,GAC9BuoC,GAAMtqG,EAAGiW,EAAGm0F,EAASF,EAASloC,GAC9BqoC,GAAMrqG,EAAGiW,EAAGi0F,EAASE,EAASroC,GAC9BuoC,GAAMtqG,EAAGiW,EAAGm0F,EAASF,EAASloC,IACrBD,EAAK,GACdsoC,GAAMrqG,EAAGiW,EAAGi0F,EAASE,EAASroC,GAC9BsoC,GAAMrqG,EAAGiW,EAAGm0F,EAASF,EAASnoC,GAC9BsoC,GAAMrqG,EAAGiW,EAAGi0F,EAASE,EAASroC,GAC9BlsD,EAASu0F,GACApoC,EAAK,IACdsoC,GAAMtqG,EAAGiW,EAAGi0F,EAASE,EAASpoC,GAC9BsoC,GAAMtqG,EAAGiW,EAAGm0F,EAASF,EAASloC,GAC9BsoC,GAAMtqG,EAAGiW,EAAGi0F,EAASE,EAASpoC,GAC9BnsD,EAASu0F,SAKL/pG,EAAIyqC,EAAS9mC,KAAKO,IAAI,GAAI,EAAInB,GAAK,EAAIyT,GAAIhB,OAE5C,IAAInW,EAAI,EAAG6qG,EAAKvqG,EAAIiW,EAAGvW,EAAI6qG,IAAM7qG,EAAGmW,EAAOnW,IAAMW,QAE/C,CACLwV,OAAQA,EACRrQ,MAAO,GAAKpC,EACZiL,MAAOrO,EACPu/C,OAAQtpC,EACRsgC,GAAI8C,EACJ7C,GAAI8C,EACJtW,GAAIqW,GAAM9nC,GAAMnO,GAChBszC,GAAI4C,GAAM7nC,GAAMrO,WAIpB0uC,EAAQ/tC,EAAI,SAAUnD,UACbgB,UAAUxC,QAAU2E,EAAIsQ,GAAOzT,GAAIkxC,GAAW/tC,GAGvD+tC,EAAQp9B,EAAI,SAAU9T,UACbgB,UAAUxC,QAAUsV,EAAIL,GAAOzT,GAAIkxC,GAAWp9B,GAGvDo9B,EAAQm4D,OAAS,SAAUrpG,UAClBgB,UAAUxC,QAAU6qG,EAAS51F,GAAOzT,GAAIkxC,GAAWm4D,GAG5Dn4D,EAAQhpC,KAAO,SAAUlI,OAClBgB,UAAUxC,OAAQ,MAAO,CAACmS,EAAIE,OAE/B03F,GAAMvoG,EAAE,GACRwxD,GAAMxxD,EAAE,UAENuoG,GAAM,GAAK/2C,GAAM,GAAIzyD,EAAM,gBAC1B4R,EAAK43F,EAAI13F,EAAK2gD,EAAItgB,GAG3BA,EAAQ04D,SAAW,SAAU5pG,UACtBgB,UAAUxC,SACRwB,GAAKA,IAAM,GAAIjB,EAAM,qBAC5ByD,EAAIY,KAAKwR,MAAMxR,KAAKC,IAAIrD,GAAKoD,KAAKymG,KAC3B34D,GAHuB,GAAK1uC,GAMrC0uC,EAAQ/R,UAAY,SAAUn/B,UACvBgB,UAAUxC,QAEE,KADjBwB,EAAI+C,EAAM/C,IACJxB,SAAcwB,EAAI,EAAEA,EAAE,IAAKA,EAAE,KAClB,IAAbA,EAAExB,QAAcO,EAAM,qBACnBogC,EAAYn/B,EAAGkxC,GAJQ/R,GAOzB+R,EAGT,SAASu4D,GAAMrqG,EAAGiW,EAAGtT,EAAQkgB,EAAQ/f,SAC7B2d,EAAe,GAAV3d,GAAK,OAEX,IAAI7C,EAAI,EAAGA,EAAIgW,IAAKhW,MAClB,IAAIP,EAAI,EAAGoxF,EAAK,EAAGpxF,EAAIM,EAAI8C,IAAKpD,EAC/BA,EAAIM,IACN8wF,GAAMnuF,EAAOjD,EAAIO,EAAID,IAGnBN,GAAKoD,IACHpD,GAAK+gB,IACPqwE,GAAMnuF,EAAOjD,EAAI+gB,EAAIxgB,EAAID,IAG3B6iB,EAAOnjB,EAAIoD,EAAI7C,EAAID,GAAK8wF,EAAK9sF,KAAKsC,IAAI5G,EAAI,EAAGM,EAAI,EAAIygB,EAAI/gB,EAAG+gB,IAMpE,SAAS6pF,GAAMtqG,EAAGiW,EAAGtT,EAAQkgB,EAAQ/f,SAC7B2d,EAAe,GAAV3d,GAAK,OAEX,IAAIpD,EAAI,EAAGA,EAAIM,IAAKN,MAClB,IAAIO,EAAI,EAAG6wF,EAAK,EAAG7wF,EAAIgW,EAAInT,IAAK7C,EAC/BA,EAAIgW,IACN66E,GAAMnuF,EAAOjD,EAAIO,EAAID,IAGnBC,GAAK6C,IACH7C,GAAKwgB,IACPqwE,GAAMnuF,EAAOjD,GAAKO,EAAIwgB,GAAKzgB,IAG7B6iB,EAAOnjB,GAAKO,EAAI6C,GAAK9C,GAAK8wF,EAAK9sF,KAAKsC,IAAIrG,EAAI,EAAGgW,EAAI,EAAIwK,EAAIxgB,EAAGwgB,IAkCtE,SAASiqF,GAAMx2E,GACb4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GA5T7B01E,GAAW3sE,WAAa,MACd,sBACI,YACG,UAEL,CAAC,MACD,aACA,SACP,MACO,kBACA,gBACC,GACR,MACO,cACA,UACP,MACO,YACA,mBACG,GACV,MACO,eACA,cACE,CAAC,SAAU,uBACV,eACV,MACO,YACA,mBACG,GACV,MACO,cACA,mBACG,GACV,MACO,aACA,eACA,GACP,MACO,iBACA,gBACC,QACD,GACP,MACO,UACA,eACA,UACG,aAGfpzB,GAAS+/F,GAAY9uE,GAAW,CAC9B5pB,UAAUtQ,EAAG0yB,MACPzxB,KAAKqB,QAAUowB,EAAMyE,YAAcn3B,EAAEizB,kBAChCP,EAAMqC,oBAGXjzB,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,UAAYpF,EAAMqF,WACzCh2B,EAAS2wB,EAAMmE,YAAYnE,EAAMmF,QAAQ91B,OACzCpD,EAAQqB,EAAErB,OAASoB,EACnB+nG,EAAUH,KAAWhqE,QAAoB,IAAb39B,EAAE29B,QAC9BkqE,EAAK7nG,EAAEo4D,YAuBf,SAAgBnjD,EAAQ3O,EAAGtG,SACnBT,EAAI84D,GAASr4D,EAAE+pG,QAAU,GAAI/pG,EAAEo9B,MAAiB,IAAXp9B,EAAEC,YACxB,WAAdD,EAAE+mC,QAAuBxnC,EAAIA,EAAE0V,EAAOtS,KAAIoG,GAAKpD,GAAIW,EAAEyC,GAAGkM,WAzBpC80F,CAAOhoG,EAAQpD,EAAOqB,GAC3C4kC,EAAc,OAAT5kC,EAAE4kC,GAAc,KAAO5kC,EAAE4kC,IAAM,UACpC3vB,EAAS,UACblT,EAAOc,SAAQkG,UACPugF,EAAO3qF,EAAMoK,GAEbihG,EAAQlC,EAAQ5/F,KAAK,CAACohF,EAAK77E,MAAO67E,EAAK3qC,QAA/BmpD,CAAwCxe,EAAKr0E,OAAQ5T,EAAQwmG,GAAMA,EAAKA,EAAGve,EAAKr0E,UAsBpG,SAAwB+0F,EAAO1gB,EAAMl5D,EAAOpwB,OACtCP,EAAIO,EAAE4E,OAAS0kF,EAAK1kF,MACpBmE,EAAI/I,EAAE4Q,WAAa04E,EAAK14E,UACxB7K,EAAWtG,KAAIA,EAAIA,EAAE2wB,EAAOpwB,IAC5B+F,EAAWgD,KAAIA,EAAIA,EAAEqnB,EAAOpwB,QACrB,IAANP,GAAgB,MAALA,KAAesJ,EAAG,aAC5BupE,GAAMloE,GAAS3K,GAAKA,EAAIA,EAAE,KAAO,EACjC8yE,GAAMnoE,GAAS3K,GAAKA,EAAIA,EAAE,KAAO,EACjCwtF,EAAKlkF,GAAKA,EAAE,IAAM,EAClBmkF,EAAKnkF,GAAKA,EAAE,IAAM,EACxBihG,EAAMnnG,QAAQyN,GAAUg5E,EAAMhX,EAAIC,EAAI0a,EAAIC,IA9BtC+c,CAAeD,EAAO1gB,EAAMvgF,EAAG/I,GAE/BgqG,EAAMnnG,SAAQ1D,IACZ8V,EAAOvV,KAAKkyB,GAAS7oB,EAAG2xB,GAAa,MAANkK,EAAa,EACzCA,GAAKzlC,GACJA,WAGJ8B,KAAKqB,QAAOR,EAAImwB,IAAMhxB,KAAKqB,YAC1BA,MAAQR,EAAIC,OAASD,EAAIc,IAAMqS,EAC7BnT,KAkPXgoG,GAAMztE,WAAa,MACT,iBACI,YACG,UAEL,CAAC,MACD,YACA,gBACC,SACC,YACE,GACX,MACO,SACA,kBACI,GACX,MACO,SACA,kBACI,GACX,MACO,cACA,SACP,MACO,eACA,eACC,GACR,MACO,gBACA,UACP,MACO,iBACA,gBACC,SACC,GACT,MACO,cACA,mBACG,GACV,MACO,UACA,iBACG,UAGf,MAAM6tE,GAAS,CAAC,IAAK,IAAK,SAAU,OAAQ,WAAY,aACxD,SAAS52E,GAAO10B,EAAKoB,UACnBkqG,GAAOrnG,SAAQuxC,GAAqB,MAAZp0C,EAAEo0C,GAAiBx1C,EAAIw1C,GAAOp0C,EAAEo0C,IAAU,IAC3Dx1C,EAyFT,SAASurG,GAAQ72E,GACf4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAxF7BrqB,GAAS6gG,GAAO5vE,GAAW,CACzB5pB,UAAUtQ,EAAG0yB,MACPzxB,KAAKqB,QAAUowB,EAAMyE,YAAcn3B,EAAEizB,WAAY,OAAOP,EAAMqC,oBAO9D9f,EANAnT,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,UAAYpF,EAAMqF,WAEzC2U,EAsBR,SAAmBjf,EAAMgc,OAGnB9mC,EACA7D,EACAM,EACA2J,EACAvG,EACAuP,EAPA26B,EAAS,GACT7sC,EAAMyG,GAAKA,EAAEyC,MASF,MAAX0gC,EACFiD,EAAOhtC,KAAK+tB,YAEP9qB,EAAM,GAAI7D,EAAI,EAAGM,EAAIquB,EAAKjvB,OAAQM,EAAIM,IAAKN,EAC9CiK,EAAI0kB,EAAK3uB,IAETiT,EAAIpP,EADJH,EAAIinC,EAAQ9mC,IAAI9C,OAId8C,EAAIH,GAAKuP,EAAI,GACbA,EAAEi3B,KAAOxmC,EACTkqC,EAAOhtC,KAAKqS,IAGdA,EAAErS,KAAKqJ,UAIJ2jC,EAnDQqE,CADAre,EAAMmE,YAAYnE,EAAMmF,QAAQ91B,OACd/B,EAAEypC,SAC7BzgB,GAAShpB,EAAEypC,SAAW,IAAI9mC,IAAIvE,GAC9B6gC,EAAM3L,GAAO81E,KAAappG,GAC1B4kC,EAAK5kC,EAAE4kC,IAAM,cAUjB3vB,EAASy3B,EAAO/pC,KAAIoP,GAAK2oB,YAPZ3xB,EAAGkgC,OACT,IAAInqC,EAAI,EAAGA,EAAIkqB,EAAMxqB,SAAUM,EAAGiK,EAAEigB,EAAMlqB,IAAMmqC,EAAKnqC,UAEnDiK,EAIuBV,CAAI,EACjCu8B,GAAK3F,EAAIltB,EAAG/R,EAAEkqC,SACdn4B,EAAEi3B,SACD/nC,KAAKqB,QAAOR,EAAImwB,IAAMhxB,KAAKqB,YAC1BA,MAAQR,EAAIC,OAASD,EAAIc,IAAMqS,EAC7BnT,KAmEXqoG,GAAQ9tE,WAAa,MACX,mBACI,YACG,UAEL,CAAC,MACD,YACA,gBACC,SACC,YACE,GACX,MACO,cACA,gBACC,GACR,MACO,SACA,SACP,MACO,SACA,SACP,MACO,cACA,SACP,MACO,gBACA,UACP,MACO,iBACA,UACP,MACO,aACA,UACP,MACO,YACA,mBACG,GACV,MACO,kBACA,gBACC,GACR,MACO,cACA,mBACG,KAGfpzB,GAASkhG,GAASjwE,GAAW,CAC3B5pB,UAAUtQ,EAAG0yB,MACPzxB,KAAKqB,QAAUowB,EAAMyE,YAAcn3B,EAAEizB,kBAChCP,EAAMqC,oBAQXu0D,EACA8gB,EANAtoG,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,UAAYpF,EAAMqF,WACzC+vE,EAAUH,KAAWhqE,QAAoB,IAAb39B,EAAE29B,QAC9B1oB,EAASjV,EAAEiV,OACX2oB,EAAS59B,EAAEo4D,YAAcC,GAASr4D,EAAEqU,OAAS,GAAIrU,EAAEo9B,OAAQnoB,GAC3D/M,EAAOlI,EAAEkI,YAIR+M,IACHA,EAASyd,EAAMmE,YAAYnE,EAAMmF,QAAQ91B,OAEzCqoG,EAAO95F,GADPg5E,EAAOh2D,GAAO81E,KAAappG,EAApBszB,CAAuBre,GAAQ,GACfq0E,EAAK1kF,OAAS,EAAG0kF,EAAK1kF,OAAS,EAAG,EAAG,GAC5DsD,EAAO,CAACohF,EAAK77E,MAAO67E,EAAK3qC,QACzB1pC,EAASq0E,EAAKr0E,QAGhB2oB,EAASv8B,EAAQu8B,GAAUA,EAASA,EAAO3oB,GAC3CA,EAAS6yF,EAAQ5/F,KAAKA,EAAb4/F,CAAmB7yF,EAAQ2oB,GAChCwsE,GAAMn1F,EAAOpS,QAAQunG,GACrBnpG,KAAKqB,QAAOR,EAAImwB,IAAMhxB,KAAKqB,YAC1BA,MAAQR,EAAIC,OAASD,EAAIc,KAAOqS,GAAU,IAAItS,IAAI+3B,IAChD54B,KAKX,MAAMyxF,GAAU,UACVC,GAAoB,oBAgB1B,SAAS6W,GAAQ/2E,GACf4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GA2E7B,SAASg3E,GAAQh3E,GACf4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAsE7B,SAASi3E,GAASj3E,GAChB4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAwE7B,SAASk3E,GAASl3E,GAChB4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAkE7B,SAASm3E,GAAUn3E,GACjB4G,GAAUt5B,KAAKK,KAAM,GAAIqyB,QACpByb,UnClmCQ,eACT4G,EAAIplC,EAAIumF,EAAIH,EACZ/gD,EAAIplC,EAAIumF,EAAIH,EAEZzzF,EAAG2Q,EAAGyU,EAAGmY,EADT/vB,EAAK,GAAIE,EAAKF,EAAI+5F,EAAK,GAAIC,EAAK,IAEhC3zF,EAAY,aAEP4zF,UACA,CAAC96F,KAAM,kBAAmByB,YAAauoF,cAGvCA,WACAr0F,GAAMsG,GAAK4qF,EAAK+T,GAAMA,EAAI5T,EAAI4T,GAAI/nG,IAAI4lB,GACxC7nB,OAAO+E,GAAMsG,GAAK6qF,EAAK+T,GAAMA,EAAI5T,EAAI4T,GAAIhoG,IAAI+9B,IAC7ChgC,OAAO+E,GAAMsG,GAAKwE,EAAKI,GAAMA,EAAIglC,EAAIhlC,GAAI/D,QAAO,SAASzJ,UAAYK,GAAIL,EAAIunG,GAAM11D,MAAYryC,IAAIQ,IACnGzC,OAAO+E,GAAMsG,GAAKyE,EAAKK,GAAMA,EAAI+kC,EAAI/kC,GAAIjE,QAAO,SAASkH,UAAYtQ,GAAIsQ,EAAI62F,GAAM31D,MAAYryC,IAAImR,WAG1G82F,EAAU9Q,MAAQ,kBACTA,IAAQn3F,KAAI,SAAS4O,SAAsB,CAACzB,KAAM,aAAcyB,YAAaA,OAGtFq5F,EAAUC,QAAU,iBACX,CACL/6F,KAAM,UACNyB,YAAa,CACXgX,EAAEouE,GAAIj2F,OACNggC,EAAEq2D,GAAIp2F,MAAM,GACZ4nB,EAAEuuE,GAAI5lF,UAAUvQ,MAAM,GACtB+/B,EAAEk2D,GAAI1lF,UAAUvQ,MAAM,OAK5BiqG,EAAUtjG,OAAS,SAAStH,UACrBgB,UAAUxC,OACRosG,EAAUE,YAAY9qG,GAAG+qG,YAAY/qG,GADd4qG,EAAUG,eAI1CH,EAAUE,YAAc,SAAS9qG,UAC1BgB,UAAUxC,QACfm4F,GAAM32F,EAAE,GAAG,GAAI82F,GAAM92F,EAAE,GAAG,GAC1B42F,GAAM52F,EAAE,GAAG,GAAI+2F,GAAM/2F,EAAE,GAAG,GACtB22F,EAAKG,IAAI92F,EAAI22F,EAAIA,EAAKG,EAAIA,EAAK92F,GAC/B42F,EAAKG,IAAI/2F,EAAI42F,EAAIA,EAAKG,EAAIA,EAAK/2F,GAC5B4qG,EAAU5zF,UAAUA,IALG,CAAC,CAAC2/E,EAAIC,GAAK,CAACE,EAAIC,KAQhD6T,EAAUG,YAAc,SAAS/qG,UAC1BgB,UAAUxC,QACf+R,GAAMvQ,EAAE,GAAG,GAAI21C,GAAM31C,EAAE,GAAG,GAC1BwQ,GAAMxQ,EAAE,GAAG,GAAI41C,GAAM51C,EAAE,GAAG,GACtBuQ,EAAKolC,IAAI31C,EAAIuQ,EAAIA,EAAKolC,EAAIA,EAAK31C,GAC/BwQ,EAAKolC,IAAI51C,EAAIwQ,EAAIA,EAAKolC,EAAIA,EAAK51C,GAC5B4qG,EAAU5zF,UAAUA,IALG,CAAC,CAACzG,EAAIC,GAAK,CAACmlC,EAAIC,KAQhDg1D,EAAUr2F,KAAO,SAASvU,UACnBgB,UAAUxC,OACRosG,EAAUI,UAAUhrG,GAAGirG,UAAUjrG,GADV4qG,EAAUK,aAI1CL,EAAUI,UAAY,SAAShrG,UACxBgB,UAAUxC,QACfksG,GAAM1qG,EAAE,GAAI2qG,GAAM3qG,EAAE,GACb4qG,GAFuB,CAACF,EAAIC,IAKrCC,EAAUK,UAAY,SAASjrG,UACxBgB,UAAUxC,QACfmS,GAAM3Q,EAAE,GAAI6Q,GAAM7Q,EAAE,GACb4qG,GAFuB,CAACj6F,EAAIE,IAKrC+5F,EAAU5zF,UAAY,SAAShX,UACxBgB,UAAUxC,QACfwY,GAAahX,EACbmD,EAAIw7F,GAAWnuF,EAAIolC,EAAI,IACvB9hC,EAAI8qF,GAAWruF,EAAIolC,EAAI3+B,GACvBuR,EAAIo2E,GAAW/H,EAAIG,EAAI,IACvBr2D,EAAIk+D,GAAWjI,EAAIG,EAAI9/E,GAChB4zF,GANuB5zF,GASzB4zF,EACFE,YAAY,CAAC,EAAE,KAAK,WAAgB,CAAC,IAAK,aAC1CC,YAAY,CAAC,EAAE,KAAK,WAAgB,CAAC,IAAK,amC4gC9BG,GA6GnB,SAASC,GAAQ73E,GACf4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAkG7B,SAAS83E,GAAW9kG,OACbP,EAAWO,GAAI,OAAO,QACrB+B,EAAMmE,GAAMnO,EAAeiI,WAC1B+B,EAAIgjG,IAAMhjG,EAAIijG,IAAMjjG,EAAIkjG,QAAUljG,EAAImjG,KA0C/C,SAASC,GAAWn4E,GAClB4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,QACtBL,UAAS,GAmChB,SAAS5qB,GAAIu9F,EAAMlkG,EAAKY,GAClByD,EAAW6/F,EAAKlkG,KAAOkkG,EAAKlkG,GAAKY,GAjkBvC+nG,GAAQhuE,WAAa,MACX,mBACI,UACF,CAAC,MACD,cACA,eACC,SACC,GACT,MACO,eACA,WAGZpzB,GAASohG,GAASnwE,GAAW,CAC3B5pB,UAAUtQ,EAAG0yB,OAQPR,EAPAniB,EAAW9O,KAAKyqG,UAChB16F,EAAS/P,KAAK0qG,QACd1tG,EAAS+B,EAAE/B,OACX2tG,EAAM3tG,GAAUA,EAAO,GACvB4tG,EAAM5tG,GAAUA,EAAO,GACvB6tG,EAAU9rG,EAAE8rG,UAAY7tG,GAAU8B,EAClC+zB,EAAOpB,EAAM0E,IAEjBlF,EAAMlyB,EAAEizB,YAAcP,EAAMyE,QAAQzE,EAAM2E,MAAQ3E,EAAMO,SAAS50B,EAAeytG,KAAaF,GAAOl5E,EAAMO,SAAS50B,EAAeutG,KAASC,GAAOn5E,EAAMO,SAAS50B,EAAewtG,IAE3K5qG,KAAKqB,QAAS4vB,IACjB4B,EAAOpB,EAAMmF,YACR6zE,UAAY37F,EAAW,QACvB47F,QAAU36F,EAAS,IAGtB86F,GACFp5E,EAAMoE,MAAMhD,GAAM/qB,GAAKgH,EAASrQ,KAAKosG,EAAQ/iG,MAG3C6iG,GAAOC,IACTn5E,EAAMoE,MAAMhD,GAAM/qB,QACZ5F,EAAIyoG,EAAI7iG,GACR+K,EAAI+3F,EAAI9iG,GAEH,MAAL5F,GAAkB,MAAL2Q,IAAc3Q,GAAKA,KAAOA,IAAM2Q,GAAKA,KAAOA,GAC3D9C,EAAOtR,KAAK,CAACyD,EAAG2Q,OAGpB/D,EAAWA,EAASrP,OAAO,CACzBoP,KAAMyjF,GACNnjF,SAAU,CACRN,KAjES,aAkETyB,YAAaP,WAKd1O,MAAQ,CACXwN,KAAM0jF,GACNzjF,SAAUA,MAqBhBu6F,GAAQjuE,WAAa,MACX,mBACI,WACE,UAEJ,CAAC,MACD,kBACA,cACP,MACO,aACA,SACP,MACO,mBACA,eACA,GACP,MACO,UACA,iBACG,UAGfpzB,GAASqhG,GAASpwE,GAAW,CAC3B5pB,UAAUtQ,EAAG0yB,OACP5wB,EAAM4wB,EAAMsF,KAAKtF,EAAMiF,KACvBp5B,EAAO0C,KAAKqB,MACZ3D,EAAQqB,EAAErB,OAASoB,EACnB6kC,EAAK5kC,EAAE4kC,IAAM,OACb9Q,EAAOhyB,EAAI+1B,QAEVt5B,GAAQyB,EAAEizB,iBAER3wB,MAAQ/D,EAAOunG,GAAkB9lG,EAAE2/F,YACxC79F,EAAI+0B,cAAcxE,UAElByB,EAAOn1B,IAAUoB,GAAY2yB,EAAMO,SAASt0B,EAAMV,QAAU6D,EAAI41B,QAAU51B,EAAIs1B,UAG1EtsB,EAQV,SAAkBvM,EAAM4gG,SAChBr0F,EAAOvM,EAAK4gG,cAClB5gG,EAAKyuB,QAAQ,MAEM,MAAfmyE,GACF5gG,EAAK4gG,YAAYA,UAGZr0F,EAhBQihG,CAASxtG,EAAMyB,EAAEm/F,oBAC9Br9F,EAAIg1B,MAAMhD,GAAM/qB,GAAKA,EAAE67B,GAAMrmC,EAAKI,EAAMoK,MACxCxK,EAAK4gG,YAAYr0F,GACVhJ,EAAI+wB,SAAS+R,MA+BxB2lE,GAASluE,WAAa,MACZ,oBACI,WACE,UAEJ,CAAC,MACD,kBACA,uBACI,GACX,MACO,cACA,eACC,YACG,SACF,GACT,MACO,UACA,gBACC,SACC,UACC,CAAC,IAAK,QAGrBpzB,GAASshG,GAAUrwE,GAAW,CAC5B5pB,UAAUtQ,EAAG0yB,OAOPR,EANA0zE,EAAO5lG,EAAE2/F,WACTiM,EAAM5rG,EAAE/B,OAAO,GACf4tG,EAAM7rG,EAAE/B,OAAO,GACf2mC,EAAK5kC,EAAE4kC,IAAM,CAAC,IAAK,KACnBzhC,EAAIyhC,EAAG,GACP9wB,EAAI8wB,EAAG,YAGFv8B,EAAIU,SACL44B,EAAKikE,EAAK,CAACgG,EAAI7iG,GAAI8iG,EAAI9iG,KAEzB44B,GACF54B,EAAE5F,GAAKw+B,EAAG,GACV54B,EAAE+K,GAAK6tB,EAAG,KAEV54B,EAAE5F,QAAKiF,EACPW,EAAE+K,QAAK1L,UAIPpI,EAAEizB,WAEJP,EAAQA,EAAMmE,cAAcxE,QAAO,GAAMyE,MAAMpE,EAAMmF,OAAQxvB,IAE7D6pB,EAAMQ,EAAMO,SAAS24E,EAAI3tG,SAAWy0B,EAAMO,SAAS44E,EAAI5tG,QACvDy0B,EAAMoE,MAAM5E,EAAMQ,EAAMgF,QAAUhF,EAAM0E,IAAK/uB,IAGxCqqB,EAAMG,SAAS+R,MAoB1B4lE,GAASnuE,WAAa,MACZ,oBACI,WACE,SACH,UAED,CAAC,MACD,kBACA,cACP,MACO,aACA,gBACG,SACV,MACO,mBACA,eACA,GACP,MACO,UACA,iBACG,WAGfpzB,GAASuhG,GAAUtwE,GAAW,CAC5B5pB,UAAUtQ,EAAG0yB,OACP5wB,EAAM4wB,EAAMsF,KAAKtF,EAAMiF,KACvB0vC,EAAQpmE,KAAKqB,MACbsiC,EAAK5kC,EAAE4kC,IAAM,QACb9Q,EAAOhyB,EAAIs1B,WAEViwC,IAASrnE,EAAEizB,kBAET3wB,MAAQ+kE,EAWnB,SAAwB9oE,EAAMI,EAAOwgG,SAC7B93B,EAAuB,MAAf83B,EAAsBn/F,GAAKzB,EAAKI,EAAMqB,IAAMA,QACpD8K,EAAOvM,EAAK4gG,cACZ78F,EAAQ/D,EAAK4gG,YAAYA,EAAjB5gG,CAA8BI,EAAMqB,WAChDzB,EAAK4gG,YAAYr0F,GACVxI,UAGT+kE,EAAMr6C,QAAUhtB,IACdzB,EAAKyuB,QAAQhtB,GACNqnE,GAGFA,EAxBkB2kC,CAAelG,GAAkB9lG,EAAE2/F,YAAa3/F,EAAErB,OAASA,EAAM,SAAUqB,EAAEm/F,aAClGr9F,EAAI+0B,cAAcxE,SAClByB,EAAOhyB,EAAI+1B,QAGb/1B,EAAIg1B,MAAMhD,GAAM/qB,GAAKA,EAAE67B,GAAMyiC,IACtBvlE,EAAI+wB,SAAS+R,MA8BxB6lE,GAAUpuE,WAAa,MACb,qBACI,UACC,aACE,UAEL,CAAC,MACD,cACA,eACC,SACC,UACC,MACD,gBACC,SACC,IAEX,MACO,mBACA,eACC,SACC,UACC,MACD,gBACC,SACC,IAEX,MACO,mBACA,eACC,SACC,UACC,MACD,gBACC,SACC,IAEX,MACO,YACA,gBACC,SACC,GACT,MACO,iBACA,gBACC,SACC,UACC,CAAC,GAAI,MACf,MACO,iBACA,gBACC,SACC,UACC,CAAC,GAAI,KACf,MACO,iBACA,iBACG,OAGfpzB,GAASwhG,GAAWvwE,GAAW,CAC7B5pB,UAAUtQ,EAAG0yB,OAGP3pB,EAFAovB,EAAMl3B,KAAKqB,MACX8D,EAAMnF,KAAK8tC,cAGV5W,EAAI35B,QAAUwB,EAAEizB,eACd,MAAM9D,KAAQnvB,EACb+F,EAAWK,EAAI+oB,KACjB/oB,EAAI+oB,GAAMnvB,EAAEmvB,WAKlBpmB,EAAI3C,IAEA+xB,EAAI35B,OACNk0B,EAAMR,IAAIxyB,KAAK8K,GAAQ2tB,EAAI,GAAIpvB,IAE/B2pB,EAAM9vB,IAAIlD,KAAKg7B,GAAO3xB,IAGxBovB,EAAI,GAAKpvB,EACF2pB,KA4BXy4E,GAAQ9uE,WAAa,MACX,mBACI,WACE,UAEJ,CAAC,MACD,aACA,SACP,MACO,aACA,eACA,GACP,MACO,eACA,eACA,GACP,MACO,eACA,cACE,CAAC,SAAU,uBACV,eACV,MACO,UACA,iBACG,WAGfpzB,GAASkiG,GAASjxE,GAAW,CAC3B5pB,UAAUtQ,EAAG0yB,OACNA,EAAMyE,YAAcn3B,EAAEizB,kBAClBP,EAAMqC,oBAGXhzB,EAAS2wB,EAAMmE,YAAYnE,EAAMmF,QAAQ91B,OACzCkqG,EAAuB,WAAdjsG,EAAE+mC,QACXpoC,EAAQqB,EAAErB,OAASoB,EACnBqqD,EAwCR,SAAkBA,EAASpqD,OACrBsG,EAEAP,EAAWqkD,IACb9jD,EAAI1H,GAAOwrD,EAAQxrD,EAAKoB,GAExBsG,EAAE4lG,IAAMd,GAAWhhD,IACVA,EACT9jD,EAAI7B,EAAS2lD,IAGb9jD,EAAI1H,GAAOA,EAAI2sG,OAAS3sG,EAAI4sG,MAAQ,EAEpCllG,EAAE4lG,KAAM,UAGH5lG,EAxDS6lG,CAASnsG,EAAEoqD,QAASpqD,GAC9B6pD,EAuBR,SAAgBA,EAAO7pD,OACjBsG,EAEAP,EAAW8jD,IACbvjD,EAAI1H,GAAO6qD,GAAII,EAAMjrD,EAAKoB,IAE1BsG,EAAE4lG,IAAMd,GAAWvhD,IAGnBvjD,EAAI7B,EAASglD,GAAII,GAAS,gBAGrBvjD,EAnCO8lG,CAAOpsG,EAAE6pD,MAAO7pD,GACxB4kC,EAAK5kC,EAAE4kC,IAAM,QACbhmC,EAAM,CACRysG,GAAI,EACJC,GAAI,EACJC,OAAQ,EACRC,KAAMS,EAAStmG,GAAI5D,EAAOY,KAAIoG,GAAKpD,GAAIhH,EAAMoK,GAAGkM,WAAY,UAE9DlT,EAAOc,SAAQkG,UACPrC,EAAI/H,EAAMoK,GAEVtG,EAAI4E,GAAO,GAAI0B,EAAGnK,GAEnBqtG,IAAQxpG,EAAE+oG,KAAO7lG,GAAIe,EAAEuO,QAAU,KAGtClM,EAAE67B,GAkDR,SAAkB0kD,EAAM1qF,EAAKirD,EAAOO,SAC5BhrD,EAAIkqF,EAAK77E,MACT4H,EAAIi0E,EAAK3qC,OACThJ,EAAK2zC,EAAK3zC,IAAM,EAChBC,EAAK0zC,EAAK1zC,IAAM,EAChBxT,EAAKknD,EAAKlnD,IAAMhjC,EAChB02C,EAAKwzC,EAAKxzC,IAAMzgC,EAChBsgB,EAAM2zD,EAAKr0E,OACX3S,EAAQqzB,EAAM72B,GAAK62B,EAAI72B,GAAKmB,EAC5BosG,EAAMtgC,GAAO3pC,EAAKuT,EAAIG,EAAKF,GAC3BioC,EAAMwuB,EAAI3tD,WAAW,MACrBqrB,EAAM8T,EAAIyuB,aAAa,EAAG,EAAGlqE,EAAKuT,EAAIG,EAAKF,GAC3C22D,EAAMxiC,EAAIt8C,SAEX,IAAIpuB,EAAIu2C,EAAIpzC,EAAI,EAAGnD,EAAIy2C,IAAMz2C,EAAG,CACnCT,EAAI0sG,GAAKjsG,EAAIu2C,MAER,IAAI92C,EAAI62C,EAAIzzC,EAAI7C,EAAID,EAAGN,EAAIsjC,IAAMtjC,EAAG0D,GAAK,EAAG,CAC/C5D,EAAIysG,GAAKvsG,EAAI62C,EACb/2C,EAAI2sG,OAASjpG,EAAMxD,EAAIoD,SACjBwE,EAAImjD,EAAMjrD,GAChB2tG,EAAI/pG,EAAI,GAAKkE,EAAExE,EACfqqG,EAAI/pG,EAAI,GAAKkE,EAAEqL,EACfw6F,EAAI/pG,EAAI,GAAKkE,EAAElH,EACf+sG,EAAI/pG,EAAI,MAAQ,IAAM4nD,EAAQxrD,YAIlCi/E,EAAI2uB,aAAaziC,EAAK,EAAG,GAClBsiC,EA/EKI,CAAS/lG,EAAGjE,EAAGonD,EAAMqiD,IAAMriD,EAAQplD,EAASolD,EAAMpnD,IAAK2nD,EAAQ8hD,IAAM9hD,EAAU3lD,EAAS2lD,EAAQ3nD,QAEnGiwB,EAAML,QAAO,GAAMQ,SAAS+R,MA0FvC37B,GAASwiG,GAAYvxE,GAAW,CAC9B5pB,UAAUtQ,EAAG0yB,OACPkzE,EAAO3kG,KAAKqB,aAEXsjG,GAAQ5lG,EAAEizB,SAAS,cACjB3wB,MAAQsjG,EAsBnB,SAAgB91F,SACRxE,EAAcq0F,IAAY7vF,GAAQ,YAAY6I,eAC/CrN,GAAavM,EAAM,iCAAmC+Q,UACpDxE,IAzBiBhC,CAAOtJ,EAAE8P,MAC7B61F,GAAqB9iG,SAAQssB,IACZ,MAAXnvB,EAAEmvB,IAAe9mB,GAAIu9F,EAAMz2E,EAAMnvB,EAAEmvB,QAGzCw2E,GAAqB9iG,SAAQssB,IACvBnvB,EAAEizB,SAAS9D,IAAO9mB,GAAIu9F,EAAMz2E,EAAMnvB,EAAEmvB,OAIvB,MAAjBnvB,EAAEm/F,aAAqByG,EAAKrnG,KAAK4gG,YAAYn/F,EAAEm/F,aAC/Cn/F,EAAEmgG,KAMV,SAAayF,EAAM5lG,SACXytB,EAcR,SAAwBA,UAEC,KADvBA,EAAO1qB,EAAM0qB,IACDjvB,OAAeivB,EAAK,GAAK,CACnC3d,KAAM0jF,GACNzjF,SAAU0d,EAAK5rB,QAAO,CAACa,EAAG4D,IAAM5D,EAAEhC,OAItC,SAAmB4F,UACVA,EAAEwJ,OAAS0jF,GAAoBltF,EAAEyJ,SAAWhN,EAAMuD,GAAGsG,QAAOuG,GAAU,MAALA,IAAWxQ,KAAIwQ,GAAKA,EAAErD,OAASyjF,GAAUpgF,EAAI,CACnHrD,KAAMyjF,GACNnjF,SAAU+C,KAP+Bu5F,CAAUpmG,KAAK,KAlB7CqmG,CAAe3sG,EAAEmgG,KAC9BngG,EAAEsH,OAASs+F,EAAKrF,UAAUvgG,EAAEsH,OAAQmmB,GAAQztB,EAAEkI,MAAO09F,EAAKpF,QAAQxgG,EAAEkI,KAAMulB,GAR7D0yE,CAAIyF,EAAM5lG,GACd0yB,EAAMsF,KAAKtF,EAAMoF,UAAYpF,EAAMqF,2KC33C9C,SAASn1B,GAAIgqG,EAAMzpG,EAAG2Q,EAAGX,MACnBhF,MAAMhL,IAAMgL,MAAM2F,GAAI,OAAO84F,MAE7BzjG,EAOA0jG,EACAC,EACAC,EACAC,EACAnkG,EACAiwE,EACAh6E,EACAO,EAbAqhF,EAAOksB,EAAKprB,MACZyrB,EAAO,CAACx/E,KAAMta,GACd5C,EAAKq8F,EAAKz3D,IACV3kC,EAAKo8F,EAAKx3D,IACVO,EAAKi3D,EAAKv3D,IACVO,EAAKg3D,EAAKt3D,QAWTorC,EAAM,OAAOksB,EAAKprB,MAAQyrB,EAAML,OAG9BlsB,EAAKliF,YACNqK,EAAQ1F,IAAM0pG,GAAMt8F,EAAKolC,GAAM,IAAIplC,EAAKs8F,EAASl3D,EAAKk3D,GACtD/zB,EAAShlE,IAAMg5F,GAAMt8F,EAAKolC,GAAM,IAAIplC,EAAKs8F,EAASl3D,EAAKk3D,EACvD3jG,EAASu3E,IAAQA,EAAOA,EAAK5hF,EAAIg6E,GAAU,EAAIjwE,IAAS,OAAOM,EAAOrK,GAAKmuG,EAAML,KAIvFG,GAAMH,EAAK3wD,GAAGr7C,KAAK,KAAM8/E,EAAKjzD,MAC9Bu/E,GAAMJ,EAAK1wD,GAAGt7C,KAAK,KAAM8/E,EAAKjzD,MAC1BtqB,IAAM4pG,GAAMj5F,IAAMk5F,EAAI,OAAOC,EAAKxkG,KAAOi4E,EAAMv3E,EAASA,EAAOrK,GAAKmuG,EAAOL,EAAKprB,MAAQyrB,EAAML,KAIhGzjG,EAASA,EAASA,EAAOrK,GAAK,IAAIwC,MAAM,GAAKsrG,EAAKprB,MAAQ,IAAIlgF,MAAM,IAChEuH,EAAQ1F,IAAM0pG,GAAMt8F,EAAKolC,GAAM,IAAIplC,EAAKs8F,EAASl3D,EAAKk3D,GACtD/zB,EAAShlE,IAAMg5F,GAAMt8F,EAAKolC,GAAM,IAAIplC,EAAKs8F,EAASl3D,EAAKk3D,SACnDhuG,EAAIg6E,GAAU,EAAIjwE,KAAYxJ,GAAK2tG,GAAMF,IAAO,EAAKC,GAAMF,WAC9D1jG,EAAO9J,GAAKqhF,EAAMv3E,EAAOrK,GAAKmuG,EAAML,EC9C9B,YAASlsB,EAAMnwE,EAAIC,EAAImlC,EAAIC,QACnC8qC,KAAOA,OACPnwE,GAAKA,OACLC,GAAKA,OACLmlC,GAAKA,OACLC,GAAKA,ECLL,SAASs3D,GAAS/5F,UAChBA,EAAE,GCDJ,SAASg6F,GAASh6F,UAChBA,EAAE,GCYI,SAASi6F,GAASt0E,EAAO31B,EAAG2Q,OACrC84F,EAAO,IAAIS,GAAc,MAALlqG,EAAY+pG,GAAW/pG,EAAQ,MAAL2Q,EAAYq5F,GAAWr5F,EAAGb,IAAKA,IAAKA,IAAKA,YAC3E,MAAT6lB,EAAgB8zE,EAAOA,EAAK10E,OAAOY,GAG5C,SAASu0E,GAASlqG,EAAG2Q,EAAGvD,EAAIC,EAAImlC,EAAIC,QAC7BqG,GAAK94C,OACL+4C,GAAKpoC,OACLqhC,IAAM5kC,OACN6kC,IAAM5kC,OACN6kC,IAAMM,OACNL,IAAMM,OACN4rC,WAAQp5E,EAGf,SAASklG,GAAUL,WACb39E,EAAO,CAAC7B,KAAMw/E,EAAKx/E,MAAOhlB,EAAO6mB,EAC9B29E,EAAOA,EAAKxkG,MAAMA,EAAOA,EAAKA,KAAO,CAACglB,KAAMw/E,EAAKx/E,aACjD6B,EAGT,IAAIi+E,GAAYH,GAAS3lG,UAAY4lG,GAAS5lG,UClC/B,YAAStE,UACf,kBACEA,GCFI,YAASs6B,UACI,MAAlBA,IAAW,ICGrB,SAASt6B,GAAEgQ,UACFA,EAAEhQ,EAAIgQ,EAAEq6F,GAGjB,SAAS15F,GAAEX,UACFA,EAAEW,EAAIX,EAAEs6F,GCNjB,SAASt4F,GAAMhC,UACNA,EAAEgC,MAGX,SAAS2+B,GAAK45D,EAAUC,OAClBjtB,EAAOgtB,EAAS7tG,IAAI8tG,OACnBjtB,EAAM,MAAM,IAAIzhF,MAAM,mBAAqB0uG,UACzCjtB,EJ0BT6sB,GAAUj+E,KAAO,eAGXwJ,EACA5vB,EAHAomB,EAAO,IAAI+9E,GAASpsG,KAAKg7C,GAAIh7C,KAAKi7C,GAAIj7C,KAAKk0C,IAAKl0C,KAAKm0C,IAAKn0C,KAAKo0C,IAAKp0C,KAAKq0C,KACzEorC,EAAOz/E,KAAKugF,UAIXd,EAAM,OAAOpxD,MAEboxD,EAAKliF,OAAQ,OAAO8wB,EAAKkyD,MAAQ8rB,GAAU5sB,GAAOpxD,MAEvDwJ,EAAQ,CAAC,CAAC/2B,OAAQ2+E,EAAMz+D,OAAQqN,EAAKkyD,MAAQ,IAAIlgF,MAAM,KAChDo/E,EAAO5nD,EAAM7nB,WACb,IAAInS,EAAI,EAAGA,EAAI,IAAKA,GACnBoK,EAAQw3E,EAAK3+E,OAAOjD,MAClBoK,EAAM1K,OAAQs6B,EAAMp5B,KAAK,CAACqC,OAAQmH,EAAO+Y,OAAQy+D,EAAKz+D,OAAOnjB,GAAK,IAAIwC,MAAM,KAC3Eo/E,EAAKz+D,OAAOnjB,GAAKwuG,GAAUpkG,WAK/BomB,GAGTi+E,GAAU3qG,IJ3DK,SAASuQ,SAChBhQ,GAAKlC,KAAKg7C,GAAGr7C,KAAK,KAAMuS,GAC1BW,GAAK7S,KAAKi7C,GAAGt7C,KAAK,KAAMuS,UACrBvQ,GAAI3B,KAAK2sG,MAAMzqG,EAAG2Q,GAAI3Q,EAAG2Q,EAAGX,IIyDrCo6F,GAAUr1E,OJXH,SAAgBzK,OACjBta,EAAGrU,EACHqE,EACA2Q,EAFM1U,EAAIquB,EAAKjvB,OAGfqvG,EAAK,IAAIvsG,MAAMlC,GACf0uG,EAAK,IAAIxsG,MAAMlC,GACfmR,EAAK4I,EAAAA,EACL3I,EAAK2I,EAAAA,EACLw8B,GAAMx8B,EAAAA,EACNy8B,GAAMz8B,EAAAA,MAGLra,EAAI,EAAGA,EAAIM,IAAKN,EACfqP,MAAMhL,GAAKlC,KAAKg7C,GAAGr7C,KAAK,KAAMuS,EAAIsa,EAAK3uB,MAAQqP,MAAM2F,GAAK7S,KAAKi7C,GAAGt7C,KAAK,KAAMuS,MACjF06F,EAAG/uG,GAAKqE,EACR2qG,EAAGhvG,GAAKgV,EACJ3Q,EAAIoN,IAAIA,EAAKpN,GACbA,EAAIwyC,IAAIA,EAAKxyC,GACb2Q,EAAItD,IAAIA,EAAKsD,GACbA,EAAI8hC,IAAIA,EAAK9hC,OAIfvD,EAAKolC,GAAMnlC,EAAKolC,EAAI,OAAO30C,cAG1B2sG,MAAMr9F,EAAIC,GAAIo9F,MAAMj4D,EAAIC,GAGxB92C,EAAI,EAAGA,EAAIM,IAAKN,EACnB8D,GAAI3B,KAAM4sG,EAAG/uG,GAAIgvG,EAAGhvG,GAAI2uB,EAAK3uB,WAGxBmC,MIrBTssG,GAAUK,MK7DK,SAASzqG,EAAG2Q,MACrB3F,MAAMhL,GAAKA,IAAMgL,MAAM2F,GAAKA,GAAI,OAAO7S,SAEvCsP,EAAKtP,KAAKk0C,IACV3kC,EAAKvP,KAAKm0C,IACVO,EAAK10C,KAAKo0C,IACVO,EAAK30C,KAAKq0C,OAKVnnC,MAAMoC,GACRolC,GAAMplC,EAAKnN,KAAKwR,MAAMzR,IAAM,EAC5ByyC,GAAMplC,EAAKpN,KAAKwR,MAAMd,IAAM,MAIzB,SAGC3K,EACArK,EAHAwW,EAAIqgC,EAAKplC,GAAM,EACfmwE,EAAOz/E,KAAKugF,MAITjxE,EAAKpN,GAAKA,GAAKwyC,GAAMnlC,EAAKsD,GAAKA,GAAK8hC,UACzC92C,GAAKgV,EAAItD,IAAO,EAAKrN,EAAIoN,GACzBpH,EAAS,IAAI7H,MAAM,IAAWxC,GAAK4hF,EAAMA,EAAOv3E,EAAQmM,GAAK,EACrDxW,QACD,EAAG62C,EAAKplC,EAAK+E,EAAGsgC,EAAKplC,EAAK8E,aAC1B,EAAG/E,EAAKolC,EAAKrgC,EAAGsgC,EAAKplC,EAAK8E,aAC1B,EAAGqgC,EAAKplC,EAAK+E,EAAG9E,EAAKolC,EAAKtgC,aAC1B,EAAG/E,EAAKolC,EAAKrgC,EAAG9E,EAAKolC,EAAKtgC,EAI/BrU,KAAKugF,OAASvgF,KAAKugF,MAAMhjF,SAAQyC,KAAKugF,MAAQd,eAG/CvrC,IAAM5kC,OACN6kC,IAAM5kC,OACN6kC,IAAMM,OACNL,IAAMM,EACJ30C,MLqBTssG,GAAU9/E,KM9DK,eACTA,EAAO,eACNqJ,OAAM,SAAS4pD,OACbA,EAAKliF,OAAQ,GAAGivB,EAAK/tB,KAAKghF,EAAKjzD,YAAcizD,EAAOA,EAAKj4E,SAEzDglB,GN0DT8/E,GAAUjmG,OO/DK,SAAStH,UACfgB,UAAUxC,OACXyC,KAAK2sG,OAAO5tG,EAAE,GAAG,IAAKA,EAAE,GAAG,IAAI4tG,OAAO5tG,EAAE,GAAG,IAAKA,EAAE,GAAG,IACrDmO,MAAMlN,KAAKk0C,UAAO/sC,EAAY,CAAC,CAACnH,KAAKk0C,IAAKl0C,KAAKm0C,KAAM,CAACn0C,KAAKo0C,IAAKp0C,KAAKq0C,OP6D7Ei4D,GAAUz5D,KQ9DK,SAAS3wC,EAAG2Q,EAAG4gE,OACxBjnD,EAGAkoB,EACAC,EACAxT,EACA0T,EAKAv2C,EACAT,EAXAyR,EAAKtP,KAAKk0C,IACV3kC,EAAKvP,KAAKm0C,IAKV6C,EAAKh3C,KAAKo0C,IACV6C,EAAKj3C,KAAKq0C,IACVy4D,EAAQ,GACRrtB,EAAOz/E,KAAKugF,UAIZd,GAAMqtB,EAAMruG,KAAK,IAAIsuG,GAAKttB,EAAMnwE,EAAIC,EAAIynC,EAAIC,IAClC,MAAVw8B,EAAgBA,EAASv7D,EAAAA,GAE3B5I,EAAKpN,EAAIuxE,EAAQlkE,EAAKsD,EAAI4gE,EAC1Bz8B,EAAK90C,EAAIuxE,EAAQx8B,EAAKpkC,EAAI4gE,EAC1BA,GAAUA,GAGLn1E,EAAIwuG,EAAM98F,cAGTyvE,EAAOnhF,EAAEmhF,QACP/qC,EAAKp2C,EAAEgR,IAAM0nC,IACbrC,EAAKr2C,EAAEiR,IAAM0nC,IACb9V,EAAK7iC,EAAEo2C,IAAMplC,IACbulC,EAAKv2C,EAAEq2C,IAAMplC,MAGjBkwE,EAAKliF,OAAQ,KACXquG,GAAMl3D,EAAKvT,GAAM,EACjB0qE,GAAMl3D,EAAKE,GAAM,EAErBi4D,EAAMruG,KACJ,IAAIsuG,GAAKttB,EAAK,GAAImsB,EAAIC,EAAI1qE,EAAI0T,GAC9B,IAAIk4D,GAAKttB,EAAK,GAAI/qC,EAAIm3D,EAAID,EAAI/2D,GAC9B,IAAIk4D,GAAKttB,EAAK,GAAImsB,EAAIj3D,EAAIxT,EAAI0qE,GAC9B,IAAIkB,GAAKttB,EAAK,GAAI/qC,EAAIC,EAAIi3D,EAAIC,KAI5BhuG,GAAKgV,GAAKg5F,IAAO,EAAK3pG,GAAK0pG,KAC7BttG,EAAIwuG,EAAMA,EAAMvvG,OAAS,GACzBuvG,EAAMA,EAAMvvG,OAAS,GAAKuvG,EAAMA,EAAMvvG,OAAS,EAAIM,GACnDivG,EAAMA,EAAMvvG,OAAS,EAAIM,GAAKS,OAK7B,KACCoR,EAAKxN,GAAKlC,KAAKg7C,GAAGr7C,KAAK,KAAM8/E,EAAKjzD,MAClC5c,EAAKiD,GAAK7S,KAAKi7C,GAAGt7C,KAAK,KAAM8/E,EAAKjzD,MAClCsrB,EAAKpoC,EAAKA,EAAKE,EAAKA,KACpBkoC,EAAK27B,EAAQ,KACXvhE,EAAI/P,KAAK6Q,KAAKygE,EAAS37B,GAC3BxoC,EAAKpN,EAAIgQ,EAAG3C,EAAKsD,EAAIX,EACrB8kC,EAAK90C,EAAIgQ,EAAG+kC,EAAKpkC,EAAIX,EACrBsa,EAAOizD,EAAKjzD,aAKXA,GRHT8/E,GAAUx8E,OSjEK,SAAS5d,MAClBhF,MAAMhL,GAAKlC,KAAKg7C,GAAGr7C,KAAK,KAAMuS,KAAOhF,MAAM2F,GAAK7S,KAAKi7C,GAAGt7C,KAAK,KAAMuS,IAAK,OAAOlS,SAE/EkI,EAEA8kG,EACAn0F,EACArR,EAKAtF,EACA2Q,EACA+4F,EACAC,EACAjkG,EACAiwE,EACAh6E,EACAO,EAfAqhF,EAAOz/E,KAAKugF,MAIZjxE,EAAKtP,KAAKk0C,IACV3kC,EAAKvP,KAAKm0C,IACVO,EAAK10C,KAAKo0C,IACVO,EAAK30C,KAAKq0C,QAWTorC,EAAM,OAAOz/E,QAIdy/E,EAAKliF,OAAQ,OAAa,KACxBqK,EAAQ1F,IAAM0pG,GAAMt8F,EAAKolC,GAAM,IAAIplC,EAAKs8F,EAASl3D,EAAKk3D,GACtD/zB,EAAShlE,IAAMg5F,GAAMt8F,EAAKolC,GAAM,IAAIplC,EAAKs8F,EAASl3D,EAAKk3D,EACrD3jG,EAASu3E,IAAMA,EAAOA,EAAK5hF,EAAIg6E,GAAU,EAAIjwE,IAAS,OAAO5H,SAC9Dy/E,EAAKliF,OAAQ,OACd2K,EAAQrK,EAAI,EAAK,IAAMqK,EAAQrK,EAAI,EAAK,IAAMqK,EAAQrK,EAAI,EAAK,MAAImvG,EAAW9kG,EAAQ9J,EAAIP,QAIzF4hF,EAAKjzD,OAASta,MAAS2G,EAAW4mE,IAAMA,EAAOA,EAAKj4E,MAAO,OAAOxH,YACrEwH,EAAOi4E,EAAKj4E,cAAai4E,EAAKj4E,KAG9BqR,GAAkBrR,EAAOqR,EAASrR,KAAOA,SAAcqR,EAASrR,KAAOxH,MAGtEkI,GAGLV,EAAOU,EAAOrK,GAAK2J,SAAcU,EAAOrK,IAGnC4hF,EAAOv3E,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAMA,EAAO,KACnDu3E,KAAUv3E,EAAO,IAAMA,EAAO,IAAMA,EAAO,IAAMA,EAAO,MACvDu3E,EAAKliF,SACPyvG,EAAUA,EAAS5uG,GAAKqhF,EACvBz/E,KAAKugF,MAAQd,GAGbz/E,OAbaA,KAAKugF,MAAQ/4E,EAAMxH,OTwBzCssG,GAAUW,USRH,SAAmBzgF,OACnB,IAAI3uB,EAAI,EAAGM,EAAIquB,EAAKjvB,OAAQM,EAAIM,IAAKN,EAAGmC,KAAK8vB,OAAOtD,EAAK3uB,WACvDmC,MTOTssG,GAAUriE,KUnEK,kBACNjqC,KAAKugF,OVmEd+rB,GAAUrlG,KWpEK,eACTA,EAAO,cACN4uB,OAAM,SAAS4pD,OACbA,EAAKliF,OAAQ,KAAK0J,QAAaw4E,EAAOA,EAAKj4E,SAE3CP,GXgETqlG,GAAUz2E,MYnEK,SAAS3F,OACN5xB,EAAsB2J,EAAOqH,EAAIC,EAAImlC,EAAIC,EAArDm4D,EAAQ,GAAOrtB,EAAOz/E,KAAKugF,UAC3Bd,GAAMqtB,EAAMruG,KAAK,IAAIsuG,GAAKttB,EAAMz/E,KAAKk0C,IAAKl0C,KAAKm0C,IAAKn0C,KAAKo0C,IAAKp0C,KAAKq0C,MAChE/1C,EAAIwuG,EAAM98F,WACVkgB,EAASuvD,EAAOnhF,EAAEmhF,KAAMnwE,EAAKhR,EAAEgR,GAAIC,EAAKjR,EAAEiR,GAAImlC,EAAKp2C,EAAEo2C,GAAIC,EAAKr2C,EAAEq2C,KAAO8qC,EAAKliF,OAAQ,KACnFquG,GAAMt8F,EAAKolC,GAAM,EAAGm3D,GAAMt8F,EAAKolC,GAAM,GACrC1sC,EAAQw3E,EAAK,KAAIqtB,EAAMruG,KAAK,IAAIsuG,GAAK9kG,EAAO2jG,EAAIC,EAAIn3D,EAAIC,KACxD1sC,EAAQw3E,EAAK,KAAIqtB,EAAMruG,KAAK,IAAIsuG,GAAK9kG,EAAOqH,EAAIu8F,EAAID,EAAIj3D,KACxD1sC,EAAQw3E,EAAK,KAAIqtB,EAAMruG,KAAK,IAAIsuG,GAAK9kG,EAAO2jG,EAAIr8F,EAAImlC,EAAIm3D,KACxD5jG,EAAQw3E,EAAK,KAAIqtB,EAAMruG,KAAK,IAAIsuG,GAAK9kG,EAAOqH,EAAIC,EAAIq8F,EAAIC,WAGzD7rG,MZwDTssG,GAAUY,WapEK,SAASh9E,OACK5xB,EAAvBwuG,EAAQ,GAAItlG,EAAO,OACnBxH,KAAKugF,OAAOusB,EAAMruG,KAAK,IAAIsuG,GAAK/sG,KAAKugF,MAAOvgF,KAAKk0C,IAAKl0C,KAAKm0C,IAAKn0C,KAAKo0C,IAAKp0C,KAAKq0C,MAC5E/1C,EAAIwuG,EAAM98F,OAAO,KAClByvE,EAAOnhF,EAAEmhF,QACTA,EAAKliF,OAAQ,KACX0K,EAAOqH,EAAKhR,EAAEgR,GAAIC,EAAKjR,EAAEiR,GAAImlC,EAAKp2C,EAAEo2C,GAAIC,EAAKr2C,EAAEq2C,GAAIi3D,GAAMt8F,EAAKolC,GAAM,EAAGm3D,GAAMt8F,EAAKolC,GAAM,GACxF1sC,EAAQw3E,EAAK,KAAIqtB,EAAMruG,KAAK,IAAIsuG,GAAK9kG,EAAOqH,EAAIC,EAAIq8F,EAAIC,KACxD5jG,EAAQw3E,EAAK,KAAIqtB,EAAMruG,KAAK,IAAIsuG,GAAK9kG,EAAO2jG,EAAIr8F,EAAImlC,EAAIm3D,KACxD5jG,EAAQw3E,EAAK,KAAIqtB,EAAMruG,KAAK,IAAIsuG,GAAK9kG,EAAOqH,EAAIu8F,EAAID,EAAIj3D,KACxD1sC,EAAQw3E,EAAK,KAAIqtB,EAAMruG,KAAK,IAAIsuG,GAAK9kG,EAAO2jG,EAAIC,EAAIn3D,EAAIC,IAE9DntC,EAAK/I,KAAKH,QAELA,EAAIkJ,EAAKwI,OACdkgB,EAAS5xB,EAAEmhF,KAAMnhF,EAAEgR,GAAIhR,EAAEiR,GAAIjR,EAAEo2C,GAAIp2C,EAAEq2C,WAEhC30C,MboDTssG,GAAUpqG,EFnEK,SAASnD,UACfgB,UAAUxC,QAAUyC,KAAKg7C,GAAKj8C,EAAGiB,MAAQA,KAAKg7C,IEmEvDsxD,GAAUz5F,EDpEK,SAAS9T,UACfgB,UAAUxC,QAAUyC,KAAKi7C,GAAKl8C,EAAGiB,MAAQA,KAAKi7C,IeLvD,IAAIrX,GAAO,CAACviC,MAAO,QAEnB,SAAS8rG,SACF,IAAyCrlG,EAArCjK,EAAI,EAAGM,EAAI4B,UAAUxC,OAAQwB,EAAI,GAAOlB,EAAIM,IAAKN,EAAG,MACrDiK,EAAI/H,UAAUlC,GAAK,KAAQiK,KAAK/I,GAAM,QAAQgI,KAAKe,GAAI,MAAM,IAAI9J,MAAM,iBAAmB8J,GAChG/I,EAAE+I,GAAK,UAEF,IAAIslG,GAASruG,GAGtB,SAASquG,GAASruG,QACXA,EAAIA,EAGX,SAASsuG,GAAeC,EAAW5/E,UAC1B4/E,EAAUt3F,OAAOuZ,MAAM,SAAS7tB,KAAI,SAASoG,OAC9C7K,EAAO,GAAIY,EAAIiK,EAAEqN,QAAQ,QACzBtX,GAAK,IAAGZ,EAAO6K,EAAEpI,MAAM7B,EAAI,GAAIiK,EAAIA,EAAEpI,MAAM,EAAG7B,IAC9CiK,IAAM4lB,EAAMjnB,eAAeqB,GAAI,MAAM,IAAI9J,MAAM,iBAAmB8J,SAC/D,CAAC+G,KAAM/G,EAAG7K,KAAMA,MA6C3B,SAAS2B,GAAIiQ,EAAM5R,OACZ,IAA4BoB,EAAxBR,EAAI,EAAGM,EAAI0Q,EAAKtR,OAAWM,EAAIM,IAAKN,MACtCQ,EAAIwQ,EAAKhR,IAAIZ,OAASA,SAClBoB,EAAEgD,MAKf,SAAS+F,GAAIyH,EAAM5R,EAAMizB,OAClB,IAAIryB,EAAI,EAAGM,EAAI0Q,EAAKtR,OAAQM,EAAIM,IAAKN,KACpCgR,EAAKhR,GAAGZ,OAASA,EAAM,CACzB4R,EAAKhR,GAAK+lC,GAAM/0B,EAAOA,EAAKnP,MAAM,EAAG7B,GAAG4B,OAAOoP,EAAKnP,MAAM7B,EAAI,iBAIlD,MAAZqyB,GAAkBrhB,EAAKpQ,KAAK,CAACxB,KAAMA,EAAMoE,MAAO6uB,IAC7CrhB,EAzDTu+F,GAAS5mG,UAAY2mG,GAAS3mG,UAAY,CACxC6D,YAAa+iG,GACb9yE,GAAI,SAASizE,EAAUr9E,OAGjBpoB,EAFA/I,EAAIiB,KAAKjB,EACTyuG,EAAIH,GAAeE,EAAW,GAAIxuG,GAElClB,GAAK,EACLM,EAAIqvG,EAAEjwG,YAGNwC,UAAUxC,OAAS,OAOP,MAAZ2yB,GAAwC,mBAAbA,EAAyB,MAAM,IAAIlyB,MAAM,qBAAuBkyB,UACtFryB,EAAIM,MACP2J,GAAKylG,EAAWC,EAAE3vG,IAAIgR,KAAM9P,EAAE+I,GAAKV,GAAIrI,EAAE+I,GAAIylG,EAAStwG,KAAMizB,QAC3D,GAAgB,MAAZA,EAAkB,IAAKpoB,KAAK/I,EAAGA,EAAE+I,GAAKV,GAAIrI,EAAE+I,GAAIylG,EAAStwG,KAAM,aAGnE+C,YAZInC,EAAIM,OAAQ2J,GAAKylG,EAAWC,EAAE3vG,IAAIgR,QAAU/G,EAAIlJ,GAAIG,EAAE+I,GAAIylG,EAAStwG,OAAQ,OAAO6K,GAc/FumB,KAAM,eACAA,EAAO,GAAItvB,EAAIiB,KAAKjB,MACnB,IAAI+I,KAAK/I,EAAGsvB,EAAKvmB,GAAK/I,EAAE+I,GAAGpI,eACzB,IAAI0tG,GAAS/+E,IAEtB1uB,KAAM,SAASkP,EAAMqrC,OACd/7C,EAAI4B,UAAUxC,OAAS,GAAK,EAAG,IAAK,IAAgCY,EAAG2J,EAA/BtI,EAAO,IAAIa,MAAMlC,GAAIN,EAAI,EAASA,EAAIM,IAAKN,EAAG2B,EAAK3B,GAAKkC,UAAUlC,EAAI,OAC9GmC,KAAKjB,EAAE0H,eAAeoI,GAAO,MAAM,IAAI7Q,MAAM,iBAAmB6Q,OAC9ChR,EAAI,EAAGM,GAAzB2J,EAAI9H,KAAKjB,EAAE8P,IAAoBtR,OAAQM,EAAIM,IAAKN,EAAGiK,EAAEjK,GAAGwD,MAAMxB,MAAMq6C,EAAM16C,IAEjFK,MAAO,SAASgP,EAAMqrC,EAAM16C,OACrBQ,KAAKjB,EAAE0H,eAAeoI,GAAO,MAAM,IAAI7Q,MAAM,iBAAmB6Q,OAChE,IAAI/G,EAAI9H,KAAKjB,EAAE8P,GAAOhR,EAAI,EAAGM,EAAI2J,EAAEvK,OAAQM,EAAIM,IAAKN,EAAGiK,EAAEjK,GAAGwD,MAAMxB,MAAMq6C,EAAM16C,KC5DvF,IAIIiuG,GACAC,GALAl6D,GAAQ,EACRm6D,GAAU,KACC,EAIXC,GAAY,EACZC,GAAW,EACXC,GAAY,EACZC,GAA+B,iBAAhBC,aAA4BA,YAAYh5E,IAAMg5E,YAAc7pG,KAC3E8pG,GAA6B,iBAAXzyB,QAAuBA,OAAO0yB,sBAAwB1yB,OAAO0yB,sBAAsB39D,KAAKirC,QAAU,SAASn2E,GAAKc,WAAWd,EAAG,KAE7I,SAAS2vB,YACP64E,KAAaI,GAASE,IAAWN,GAAWE,GAAM/4E,MAAQ84E,IAGnE,SAASK,KACPN,GAAW,EAGN,SAASO,UACT91B,MACLt4E,KAAKquG,MACLruG,KAAKsuG,MAAQ,KA0BR,SAASC,GAAMr+E,EAAUpqB,EAAOub,OACjCvZ,EAAI,IAAIsmG,UACZtmG,EAAE0mG,QAAQt+E,EAAUpqB,EAAOub,GACpBvZ,EAcT,SAAS2mG,KACPZ,IAAYD,GAAYG,GAAM/4E,OAAS84E,GACvCt6D,GAAQm6D,GAAU,OAbb,WACL34E,OACEwe,WACgBvtC,EAAd6B,EAAI2lG,GACD3lG,IACA7B,EAAI4nG,GAAW/lG,EAAEumG,QAAU,GAAGvmG,EAAEwwE,MAAM34E,KAAK,KAAMsG,GACtD6B,EAAIA,EAAEwmG,QAEN96D,GAOAk7D,WAEAl7D,GAAQ,EAWZ,eACMl7B,EAAmBgyC,EAAf/xC,EAAKk1F,GAAcpsF,EAAOnJ,EAAAA,OAC3BK,GACDA,EAAG+/D,OACDj3D,EAAO9I,EAAG81F,QAAOhtF,EAAO9I,EAAG81F,OAC/B/1F,EAAKC,EAAIA,EAAKA,EAAG+1F,QAEjBhkD,EAAK/xC,EAAG+1F,MAAO/1F,EAAG+1F,MAAQ,KAC1B/1F,EAAKD,EAAKA,EAAGg2F,MAAQhkD,EAAKmjD,GAAWnjD,GAGzCojD,GAAWp1F,EACXq2F,GAAMttF,GAtBJutF,GACAf,GAAW,GAIf,SAASgB,SACH75E,EAAM+4E,GAAM/4E,MAAOlvB,EAAQkvB,EAAM44E,GACjC9nG,EA7EU,MA6ESgoG,IAAahoG,EAAO8nG,GAAY54E,GAkBzD,SAAS25E,GAAMttF,GACTmyB,KACAm6D,KAASA,GAAUznG,aAAaynG,KACxBtsF,EAAOwsF,GACP,IACNxsF,EAAOnJ,EAAAA,IAAUy1F,GAAUxnG,WAAWsoG,GAAMptF,EAAO0sF,GAAM/4E,MAAQ84E,KACjEn1F,KAAUA,GAAWm2F,cAAcn2F,OAElCA,KAAUi1F,GAAYG,GAAM/4E,MAAOrc,GAAWo2F,YAAYF,GAvGnD,MAwGZr7D,GAAQ,EAAGy6D,GAASQ,SAjFlBjoG,UAAY+nG,GAAM/nG,UAAY,CAClC6D,YAAa+jG,GACbI,QAAS,SAASt+E,EAAUpqB,EAAOub,MACT,mBAAb6O,EAAyB,MAAM,IAAI8+E,UAAU,8BACxD3tF,GAAgB,MAARA,EAAe2T,MAAS3T,IAAkB,MAATvb,EAAgB,GAAKA,GACzD9F,KAAKsuG,OAASZ,KAAa1tG,OAC1B0tG,GAAUA,GAASY,MAAQtuG,KAC1BytG,GAAWztG,KAChB0tG,GAAW1tG,WAERs4E,MAAQpoD,OACRm+E,MAAQhtF,EACbstF,MAEFx7F,KAAM,WACAnT,KAAKs4E,aACFA,MAAQ,UACR+1B,MAAQn2F,EAAAA,EACby2F,QC3CN,MAEMv6F,GAAI,WCCH,SAASlS,GAAEgQ,UACTA,EAAEhQ,EAGJ,SAAS2Q,GAAEX,UACTA,EAAEW,EAGX,IACIo8F,GAAe9sG,KAAK26B,IAAM,EAAI36B,KAAK6Q,KAAK,IAE7B,YAAS6kB,OAClBq3E,EACA5yE,EAAQ,EACR6yE,EAAW,KACXC,EAAa,EAAIjtG,KAAKO,IAAIysG,EAAU,EAAI,KACxCE,EAAc,EACdC,EAAgB,GAChBC,EAAS,IAAIvnF,IACbwnF,EAAUjB,GAAMj7F,GAChBmiE,EAAQ03B,GAAS,OAAQ,OACzB3wE,EDpBS,eACTh+B,EAAI,QACD,KAAOA,GANN,QAMeA,EALf,YAKwB4V,IAAKA,GCkBxBq7F,YAIJn8F,IACPo8F,IACAj6B,EAAM91E,KAAK,OAAQuvG,GACf5yE,EAAQ6yE,IACVK,EAAQr8F,OACRsiE,EAAM91E,KAAK,MAAOuvG,aAIbQ,EAAKC,OACR9xG,EAAqB4hF,EAAlBthF,EAAI05B,EAAMt6B,YAEE4J,IAAfwoG,IAA0BA,EAAa,OAEtC,IAAIpuG,EAAI,EAAGA,EAAIouG,IAAcpuG,MAChC+6B,IAAU+yE,EAAc/yE,GAAS8yE,EAEjCG,EAAO3tG,SAAQ,SAASmwB,GACtBA,EAAMuK,MAGHz+B,EAAI,EAAGA,EAAIM,IAAKN,EAEJ,OADf4hF,EAAO5nD,EAAMh6B,IACJkjF,GAAYtB,EAAKv9E,GAAKu9E,EAAK8sB,IAAM+C,GACrC7vB,EAAKv9E,EAAIu9E,EAAKsB,GAAItB,EAAK8sB,GAAK,GAClB,MAAX9sB,EAAKuB,GAAYvB,EAAK5sE,GAAK4sE,EAAK+sB,IAAM8C,GACrC7vB,EAAK5sE,EAAI4sE,EAAKuB,GAAIvB,EAAK+sB,GAAK,UAI9B0C,WAGAU,QACF,IAA6BnwB,EAAzB5hF,EAAI,EAAGM,EAAI05B,EAAMt6B,OAAcM,EAAIM,IAAKN,EAAG,KAClD4hF,EAAO5nD,EAAMh6B,IAASqW,MAAQrW,EACf,MAAX4hF,EAAKsB,KAAYtB,EAAKv9E,EAAIu9E,EAAKsB,IACpB,MAAXtB,EAAKuB,KAAYvB,EAAK5sE,EAAI4sE,EAAKuB,IAC/B9zE,MAAMuyE,EAAKv9E,IAAMgL,MAAMuyE,EAAK5sE,GAAI,KAC9B4gE,EAxDQ,GAwDiBtxE,KAAK6Q,KAAK,GAAMnV,GAAIuqE,EAAQvqE,EAAIoxG,GAC7DxvB,EAAKv9E,EAAIuxE,EAAStxE,KAAK4zC,IAAIqyB,GAC3BqX,EAAK5sE,EAAI4gE,EAAStxE,KAAK6zC,IAAIoyB,IAEzBl7D,MAAMuyE,EAAK8sB,KAAOr/F,MAAMuyE,EAAK+sB,OAC/B/sB,EAAK8sB,GAAK9sB,EAAK+sB,GAAK,aAKjBqD,EAAgB99E,UACnBA,EAAMuiD,YAAYviD,EAAMuiD,WAAWz8C,EAAO2E,GACvCzK,SArDI,MAAT8F,IAAeA,EAAQ,IAwD3B+3E,IAEOV,EAAa,CAClBQ,KAAMA,EAENlB,QAAS,kBACAgB,EAAQhB,QAAQl7F,GAAO47F,GAGhC/7F,KAAM,kBACGq8F,EAAQr8F,OAAQ+7F,GAGzBr3E,MAAO,SAAS94B,UACPgB,UAAUxC,QAAUs6B,EAAQ94B,EAAG6wG,IAAmBL,EAAO3tG,QAAQiuG,GAAkBX,GAAcr3E,GAG1GyE,MAAO,SAASv9B,UACPgB,UAAUxC,QAAU++B,GAASv9B,EAAGmwG,GAAc5yE,GAGvD6yE,SAAU,SAASpwG,UACVgB,UAAUxC,QAAU4xG,GAAYpwG,EAAGmwG,GAAcC,GAG1DC,WAAY,SAASrwG,UACZgB,UAAUxC,QAAU6xG,GAAcrwG,EAAGmwG,IAAeE,GAG7DC,YAAa,SAAStwG,UACbgB,UAAUxC,QAAU8xG,GAAetwG,EAAGmwG,GAAcG,GAG7DC,cAAe,SAASvwG,UACfgB,UAAUxC,QAAU+xG,EAAgB,EAAIvwG,EAAGmwG,GAAc,EAAII,GAGtEQ,aAAc,SAAS/wG,UACdgB,UAAUxC,QAAUi/B,EAASz9B,EAAGwwG,EAAO3tG,QAAQiuG,GAAkBX,GAAc1yE,GAGxFzK,MAAO,SAAS90B,EAAM8B,UACbgB,UAAUxC,OAAS,GAAW,MAALwB,EAAYwwG,EAAOloG,OAAOpK,GAAQsyG,EAAOnoG,IAAInK,EAAM4yG,EAAgB9wG,IAAMmwG,GAAcK,EAAO3wG,IAAI3B,IAGpI41C,KAAM,SAAS3wC,EAAG2Q,EAAG4gE,OAGf/jE,EACAE,EACAkoC,EACA2nC,EACAswB,EANAlyG,EAAI,EACJM,EAAI05B,EAAMt6B,WAOA,MAAVk2E,EAAgBA,EAASv7D,EAAAA,EACxBu7D,GAAUA,EAEV51E,EAAI,EAAGA,EAAIM,IAAKN,GAInBi6C,GAFApoC,EAAKxN,GADLu9E,EAAO5nD,EAAMh6B,IACCqE,GAEJwN,GADVE,EAAKiD,EAAI4sE,EAAK5sE,GACMjD,GACX6jE,IAAQs8B,EAAUtwB,EAAMhM,EAAS37B,UAGrCi4D,GAGTz1E,GAAI,SAASr9B,EAAM8B,UACVgB,UAAUxC,OAAS,GAAKk4E,EAAMn7C,GAAGr9B,EAAM8B,GAAImwG,GAAcz5B,EAAMn7C,GAAGr9B,KCpJ/E,MAAM+yG,GAAW,CACfnoG,OCLa,SAAS3F,EAAG2Q,OACrBglB,EAAOo4E,EAAW,WAKbl+E,QACHl0B,EAEA4hF,EADAthF,EAAI05B,EAAMt6B,OAEV8zE,EAAK,EACLC,EAAK,MAEJzzE,EAAI,EAAGA,EAAIM,IAAKN,EACFwzE,IAAjBoO,EAAO5nD,EAAMh6B,IAAeqE,EAAGovE,GAAMmO,EAAK5sE,MAGvCw+D,GAAMA,EAAKlzE,EAAI+D,GAAK+tG,EAAU3+B,GAAMA,EAAKnzE,EAAI0U,GAAKo9F,EAAUpyG,EAAI,EAAGA,EAAIM,IAAKN,GAC/E4hF,EAAO5nD,EAAMh6B,IAASqE,GAAKmvE,EAAIoO,EAAK5sE,GAAKy+D,SAfpC,MAALpvE,IAAWA,EAAI,GACV,MAAL2Q,IAAWA,EAAI,GAkBnBkf,EAAMuiD,WAAa,SAASv1E,GAC1B84B,EAAQ94B,GAGVgzB,EAAM7vB,EAAI,SAASnD,UACVgB,UAAUxC,QAAU2E,GAAKnD,EAAGgzB,GAAS7vB,GAG9C6vB,EAAMlf,EAAI,SAAS9T,UACVgB,UAAUxC,QAAUsV,GAAK9T,EAAGgzB,GAASlf,GAG9Ckf,EAAMk+E,SAAW,SAASlxG,UACjBgB,UAAUxC,QAAU0yG,GAAYlxG,EAAGgzB,GAASk+E,GAG9Cl+E,GDhCPm+E,QfMa,SAASz8B,OAClB57C,EACAs4E,EACA3zE,EACAyzE,EAAW,EACXN,EAAa,WAIR59E,YACHl0B,EACA8tG,EACAlsB,EACA+nB,EACAC,EACA2I,EACAC,EANGlyG,EAAI05B,EAAMt6B,OAQRgE,EAAI,EAAGA,EAAIouG,IAAcpuG,MAChCoqG,EAAOQ,GAASt0E,EAAO31B,GAAG2Q,IAAGq6F,WAAWoD,GACnCzyG,EAAI,EAAGA,EAAIM,IAAKN,EACnB4hF,EAAO5nD,EAAMh6B,GACbuyG,EAAKD,EAAM1wB,EAAKvrE,OAAQm8F,EAAMD,EAAKA,EACnC5I,EAAK/nB,EAAKv9E,EAAIu9E,EAAK8sB,GACnB9E,EAAKhoB,EAAK5sE,EAAI4sE,EAAK+sB,GACnBb,EAAK91E,MAAMh2B,YAINA,EAAMqhC,EAAM5xB,EAAIC,EAAImlC,EAAIC,OAC3BnoB,EAAO0U,EAAK1U,KAAM+jF,EAAKrvE,EAAKjgC,EAAGA,EAAImvG,EAAKG,MACxC/jF,SAiBGld,EAAKk4F,EAAKvmG,GAAKyzC,EAAK8yD,EAAKvmG,GAAKsO,EAAKk4F,EAAKxmG,GAAK0zC,EAAK8yD,EAAKxmG,KAhBxDurB,EAAKtY,MAAQurE,EAAKvrE,MAAO,KACvBhS,EAAIslG,EAAKh7E,EAAKtqB,EAAIsqB,EAAK+/E,GACvB15F,EAAI40F,EAAKj7E,EAAK3Z,EAAI2Z,EAAKggF,GACvBzkG,EAAI7F,EAAIA,EAAI2Q,EAAIA,EAChB9K,EAAI9G,EAAIA,IACA,IAANiB,IAA6B6F,IAApB7F,EAAIsuG,GAAOh0E,IAAkBt6B,GAChC,IAAN2Q,IAA6B9K,IAApB8K,EAAI29F,GAAOh0E,IAAkB3pB,GAC1C9K,GAAK9G,GAAK8G,EAAI5F,KAAK6Q,KAAKjL,KAAOA,EAAIkoG,EACnCxwB,EAAK8sB,KAAOrqG,GAAK6F,IAAM9G,GAAKsvG,GAAMA,IAAOF,EAAME,IAC/C9wB,EAAK+sB,KAAO35F,GAAK9K,GAAK9G,EACtBurB,EAAK+/E,IAAMrqG,GAAKjB,EAAI,EAAIA,GACxBurB,EAAKggF,IAAM35F,EAAI5R,cAShBqvG,EAAQpvE,MACXA,EAAK1U,KAAM,OAAO0U,EAAKjgC,EAAIkvG,EAAMjvE,EAAK1U,KAAKtY,WAC1C,IAAIrW,EAAIqjC,EAAKjgC,EAAI,EAAGpD,EAAI,IAAKA,EAC5BqjC,EAAKrjC,IAAMqjC,EAAKrjC,GAAGoD,EAAIigC,EAAKjgC,IAC9BigC,EAAKjgC,EAAIigC,EAAKrjC,GAAGoD,YAKdqzE,OACFz8C,OACDh6B,EAAqB4hF,EAAlBthF,EAAI05B,EAAMt6B,WACjB4yG,EAAQ,IAAI9vG,MAAMlC,GACbN,EAAI,EAAGA,EAAIM,IAAKN,EAAG4hF,EAAO5nD,EAAMh6B,GAAIsyG,EAAM1wB,EAAKvrE,QAAUu/D,EAAOgM,EAAM5hF,EAAGg6B,UA1D1D,mBAAX47C,IAAuBA,EAASjwE,GAAmB,MAAViwE,EAAiB,GAAKA,IA6D1E1hD,EAAMuiD,WAAa,SAASm8B,EAAQC,GAClC74E,EAAQ44E,EACRj0E,EAASk0E,EACTp8B,KAGFviD,EAAM49E,WAAa,SAAS5wG,UACnBgB,UAAUxC,QAAUoyG,GAAc5wG,EAAGgzB,GAAS49E,GAGvD59E,EAAMk+E,SAAW,SAASlxG,UACjBgB,UAAUxC,QAAU0yG,GAAYlxG,EAAGgzB,GAASk+E,GAGrDl+E,EAAM0hD,OAAS,SAAS10E,UACfgB,UAAUxC,QAAUk2E,EAAsB,mBAAN10E,EAAmBA,EAAIyE,IAAUzE,GAAIu1E,IAAcviD,GAAS0hD,GAGlG1hD,Ge3FP4+E,MEFa,eACT94E,EACA4nD,EACAjjD,EACAF,EAEAs0E,EADAX,EAAWzsG,IAAU,IAErBqtG,EAAe,EACfC,EAAe54F,EAAAA,EACf64F,EAAS,aAEJh/E,EAAMhzB,OACTlB,EAAGM,EAAI05B,EAAMt6B,OAAQouG,EAAOQ,GAASt0E,EAAO31B,GAAG2Q,IAAGq6F,WAAW8D,OAC5D10E,EAAQv9B,EAAGlB,EAAI,EAAGA,EAAIM,IAAKN,EAAG4hF,EAAO5nD,EAAMh6B,GAAI8tG,EAAK91E,MAAMh2B,YAGxDy0E,OACFz8C,OACDh6B,EAAqB4hF,EAAlBthF,EAAI05B,EAAMt6B,WACjBqzG,EAAY,IAAIvwG,MAAMlC,GACjBN,EAAI,EAAGA,EAAIM,IAAKN,EAAG4hF,EAAO5nD,EAAMh6B,GAAI+yG,EAAUnxB,EAAKvrE,QAAU+7F,EAASxwB,EAAM5hF,EAAGg6B,aAG7Em5E,EAAW9vE,OACA5iC,EAAGD,EAAe6D,EAAG2Q,EAAGhV,EAAtCoyG,EAAW,EAAS7H,EAAS,KAG7BlnE,EAAK3jC,OAAQ,KACV2E,EAAI2Q,EAAIhV,EAAI,EAAGA,EAAI,IAAKA,GACtBS,EAAI4iC,EAAKrjC,MAAQQ,EAAI8D,KAAKI,IAAIjE,EAAE+C,UACnC4uG,GAAY3xG,EAAE+C,MAAO+mG,GAAU/pG,EAAG6D,GAAK7D,EAAIC,EAAE4D,EAAG2Q,GAAKxU,EAAIC,EAAEuU,GAG/DquB,EAAKh/B,EAAIA,EAAIkmG,EACblnE,EAAKruB,EAAIA,EAAIu1F,MAIV,EACH9pG,EAAI4iC,GACFh/B,EAAI5D,EAAEkuB,KAAKtqB,EACb5D,EAAEuU,EAAIvU,EAAEkuB,KAAK3Z,KACVo9F,GAAYW,EAAUtyG,EAAEkuB,KAAKtY,aACzB5V,EAAIA,EAAEkJ,MAGf05B,EAAK7/B,MAAQ4uG,WAGNpwG,EAAMqhC,EAAMwT,EAAI31C,EAAGoiC,OACrBD,EAAK7/B,MAAO,OAAO,MAEpBa,EAAIg/B,EAAKh/B,EAAIu9E,EAAKv9E,EAClB2Q,EAAIquB,EAAKruB,EAAI4sE,EAAK5sE,EAClB+L,EAAIuiB,EAAKuT,EACT3sC,EAAI7F,EAAIA,EAAI2Q,EAAIA,KAIhB+L,EAAIA,EAAImyF,EAAShpG,SACfA,EAAI+oG,IACI,IAAN5uG,IAA6B6F,IAApB7F,EAAIsuG,GAAOh0E,IAAkBt6B,GAChC,IAAN2Q,IAA6B9K,IAApB8K,EAAI29F,GAAOh0E,IAAkB3pB,GACtC9K,EAAI8oG,IAAc9oG,EAAI5F,KAAK6Q,KAAK69F,EAAe9oG,IACnD03E,EAAK8sB,IAAMrqG,EAAIg/B,EAAK7/B,MAAQi7B,EAAQv0B,EACpC03E,EAAK+sB,IAAM35F,EAAIquB,EAAK7/B,MAAQi7B,EAAQv0B,IAE/B,EAIJ,KAAIm5B,EAAK3jC,QAAUwK,GAAK+oG,GAAxB,EAGD5vE,EAAK1U,OAASizD,GAAQv+C,EAAK15B,QACnB,IAANtF,IAA6B6F,IAApB7F,EAAIsuG,GAAOh0E,IAAkBt6B,GAChC,IAAN2Q,IAA6B9K,IAApB8K,EAAI29F,GAAOh0E,IAAkB3pB,GACtC9K,EAAI8oG,IAAc9oG,EAAI5F,KAAK6Q,KAAK69F,EAAe9oG,QAG9Cm5B,EAAK1U,OAASizD,IACnB7gE,EAAIgyF,EAAU1vE,EAAK1U,KAAKtY,OAASooB,EAAQv0B,EACzC03E,EAAK8sB,IAAMrqG,EAAI0c,EACf6gE,EAAK+sB,IAAM35F,EAAI+L,SACRsiB,EAAOA,EAAK15B,cAGvBuqB,EAAMuiD,WAAa,SAASm8B,EAAQC,GAClC74E,EAAQ44E,EACRj0E,EAASk0E,EACTp8B,KAGFviD,EAAMk+E,SAAW,SAASlxG,UACjBgB,UAAUxC,QAAU0yG,EAAwB,mBAANlxG,EAAmBA,EAAIyE,IAAUzE,GAAIu1E,IAAcviD,GAASk+E,GAG3Gl+E,EAAMk/E,YAAc,SAASlyG,UACpBgB,UAAUxC,QAAUszG,EAAe9xG,EAAIA,EAAGgzB,GAAS5vB,KAAK6Q,KAAK69F,IAGtE9+E,EAAMm/E,YAAc,SAASnyG,UACpBgB,UAAUxC,QAAUuzG,EAAe/xG,EAAIA,EAAGgzB,GAAS5vB,KAAK6Q,KAAK89F,IAGtE/+E,EAAM2hD,MAAQ,SAAS30E,UACdgB,UAAUxC,QAAUwzG,EAAShyG,EAAIA,EAAGgzB,GAAS5vB,KAAK6Q,KAAK+9F,IAGzDh/E,GF1GPunE,KdKa,SAAS6X,OAGlBP,EAEAQ,EACAv5E,EACAzkB,EACAi+F,EACA70E,EARA39B,EAAKqV,GACL+7F,WAYqB3W,UAChB,EAAIn3F,KAAKsC,IAAI2O,EAAMkmF,EAAKx4F,OAAOoT,OAAQd,EAAMkmF,EAAKt4E,OAAO9M,SAX9Do9F,EAAW9tG,GAAS,IAMpBmsG,EAAa,WAQR59E,EAAMuK,OACR,IAAI/6B,EAAI,EAAGpD,EAAIgzG,EAAM5zG,OAAQgE,EAAIouG,IAAcpuG,MAC7C,IAAW+3F,EAAMx4F,EAAQkgB,EAAQ9e,EAAG2Q,EAAG9K,EAAGxJ,EAAtCV,EAAI,EAAqCA,EAAIM,IAAKN,EACxCiD,GAAjBw4F,EAAO6X,EAAMtzG,IAAkBiD,OAC/BoB,GADuC8e,EAASs4E,EAAKt4E,QAC1C9e,EAAI8e,EAAOurF,GAAKzrG,EAAOoB,EAAIpB,EAAOyrG,IAAMiE,GAAOh0E,GAC1D3pB,EAAImO,EAAOnO,EAAImO,EAAOwrF,GAAK1rG,EAAO+R,EAAI/R,EAAO0rG,IAAMgE,GAAOh0E,GAG1Dt6B,GADA6F,IADAA,EAAI5F,KAAK6Q,KAAK9Q,EAAIA,EAAI2Q,EAAIA,IACjBu+F,EAAUvzG,IAAMkK,EAAIu0B,EAAQs0E,EAAU/yG,GACvCgV,GAAK9K,EACbiZ,EAAOurF,IAAMrqG,GAAK3D,EAAI8yG,EAAKxzG,IAC3BmjB,EAAOwrF,IAAM35F,EAAItU,EACjBuC,EAAOyrG,IAAMrqG,GAAK3D,EAAI,EAAIA,GAC1BuC,EAAO0rG,IAAM35F,EAAItU,WAKd+1E,OACFz8C,OAEDh6B,EAIAy7F,EAHAn7F,EAAI05B,EAAMt6B,OACV6W,EAAI+8F,EAAM5zG,OACVkvG,EAAW,IAAIzkF,IAAI6P,EAAMn2B,KAAI,CAACwQ,EAAGrU,IAAM,CAACgB,EAAGqT,EAAGrU,EAAGg6B,GAAQ3lB,UAGxDrU,EAAI,EAAGuV,EAAQ,IAAI/S,MAAMlC,GAAIN,EAAIuW,IAAKvW,GACzCy7F,EAAO6X,EAAMtzG,IAASqW,MAAQrW,EACH,iBAAhBy7F,EAAKx4F,SAAqBw4F,EAAKx4F,OAAS+xC,GAAK45D,EAAUnT,EAAKx4F,SAC5C,iBAAhBw4F,EAAKt4E,SAAqBs4E,EAAKt4E,OAAS6xB,GAAK45D,EAAUnT,EAAKt4E,SACvE5N,EAAMkmF,EAAKx4F,OAAOoT,QAAUd,EAAMkmF,EAAKx4F,OAAOoT,QAAU,GAAK,EAC7Dd,EAAMkmF,EAAKt4E,OAAO9M,QAAUd,EAAMkmF,EAAKt4E,OAAO9M,QAAU,GAAK,MAG1DrW,EAAI,EAAGwzG,EAAO,IAAIhxG,MAAM+T,GAAIvW,EAAIuW,IAAKvW,EACxCy7F,EAAO6X,EAAMtzG,GAAIwzG,EAAKxzG,GAAKuV,EAAMkmF,EAAKx4F,OAAOoT,QAAUd,EAAMkmF,EAAKx4F,OAAOoT,OAASd,EAAMkmF,EAAKt4E,OAAO9M,QAGtG08F,EAAY,IAAIvwG,MAAM+T,GAAIm9F,IAC1BH,EAAY,IAAI/wG,MAAM+T,GAAIo9F,cAGnBD,OACF15E,MAEA,IAAIh6B,EAAI,EAAGM,EAAIgzG,EAAM5zG,OAAQM,EAAIM,IAAKN,EACzC+yG,EAAU/yG,IAAMoyG,EAASkB,EAAMtzG,GAAIA,EAAGszG,YAIjCK,OACF35E,MAEA,IAAIh6B,EAAI,EAAGM,EAAIgzG,EAAM5zG,OAAQM,EAAIM,IAAKN,EACzCuzG,EAAUvzG,IAAMyzG,EAASH,EAAMtzG,GAAIA,EAAGszG,UA5D7B,MAATA,IAAeA,EAAQ,IAgE3Bp/E,EAAMuiD,WAAa,SAASm8B,EAAQC,GAClC74E,EAAQ44E,EACRj0E,EAASk0E,EACTp8B,KAGFviD,EAAMo/E,MAAQ,SAASpyG,UACdgB,UAAUxC,QAAU4zG,EAAQpyG,EAAGu1E,IAAcviD,GAASo/E,GAG/Dp/E,EAAMlzB,GAAK,SAASE,UACXgB,UAAUxC,QAAUsB,EAAKE,EAAGgzB,GAASlzB,GAG9CkzB,EAAM49E,WAAa,SAAS5wG,UACnBgB,UAAUxC,QAAUoyG,GAAc5wG,EAAGgzB,GAAS49E,GAGvD59E,EAAMk+E,SAAW,SAASlxG,UACjBgB,UAAUxC,QAAU0yG,EAAwB,mBAANlxG,EAAmBA,EAAIyE,IAAUzE,GAAIwyG,IAAsBx/E,GAASk+E,GAGnHl+E,EAAMu/E,SAAW,SAASvyG,UACjBgB,UAAUxC,QAAU+zG,EAAwB,mBAANvyG,EAAmBA,EAAIyE,IAAUzE,GAAIyyG,IAAsBz/E,GAASu/E,GAG5Gv/E,Gc1GP7vB,EGPa,SAASA,OAElB21B,EACA+4E,EACAhE,EAHAqD,EAAWzsG,GAAS,aAOfuuB,EAAMuK,OACR,IAA6BmjD,EAAzB5hF,EAAI,EAAGM,EAAI05B,EAAMt6B,OAAcM,EAAIM,IAAKN,GAC/C4hF,EAAO5nD,EAAMh6B,IAAS0uG,KAAOK,EAAG/uG,GAAK4hF,EAAKv9E,GAAK0uG,EAAU/yG,GAAKy+B,WAIzDg4C,OACFz8C,OACDh6B,EAAGM,EAAI05B,EAAMt6B,WACjBqzG,EAAY,IAAIvwG,MAAMlC,GACtByuG,EAAK,IAAIvsG,MAAMlC,GACVN,EAAI,EAAGA,EAAIM,IAAKN,EACnB+yG,EAAU/yG,GAAKqP,MAAM0/F,EAAG/uG,IAAMqE,EAAE21B,EAAMh6B,GAAIA,EAAGg6B,IAAU,GAAKo4E,EAASp4E,EAAMh6B,GAAIA,EAAGg6B,UAdrE,mBAAN31B,IAAkBA,EAAIsB,GAAc,MAALtB,EAAY,GAAKA,IAkB3D6vB,EAAMuiD,WAAa,SAASv1E,GAC1B84B,EAAQ94B,EACRu1E,KAGFviD,EAAMk+E,SAAW,SAASlxG,UACjBgB,UAAUxC,QAAU0yG,EAAwB,mBAANlxG,EAAmBA,EAAIyE,IAAUzE,GAAIu1E,IAAcviD,GAASk+E,GAG3Gl+E,EAAM7vB,EAAI,SAASnD,UACVgB,UAAUxC,QAAU2E,EAAiB,mBAANnD,EAAmBA,EAAIyE,IAAUzE,GAAIu1E,IAAcviD,GAAS7vB,GAG7F6vB,GH7BPlf,EIRa,SAASA,OAElBglB,EACA+4E,EACA/D,EAHAoD,EAAWzsG,GAAS,aAOfuuB,EAAMuK,OACR,IAA6BmjD,EAAzB5hF,EAAI,EAAGM,EAAI05B,EAAMt6B,OAAcM,EAAIM,IAAKN,GAC/C4hF,EAAO5nD,EAAMh6B,IAAS2uG,KAAOK,EAAGhvG,GAAK4hF,EAAK5sE,GAAK+9F,EAAU/yG,GAAKy+B,WAIzDg4C,OACFz8C,OACDh6B,EAAGM,EAAI05B,EAAMt6B,WACjBqzG,EAAY,IAAIvwG,MAAMlC,GACtB0uG,EAAK,IAAIxsG,MAAMlC,GACVN,EAAI,EAAGA,EAAIM,IAAKN,EACnB+yG,EAAU/yG,GAAKqP,MAAM2/F,EAAGhvG,IAAMgV,EAAEglB,EAAMh6B,GAAIA,EAAGg6B,IAAU,GAAKo4E,EAASp4E,EAAMh6B,GAAIA,EAAGg6B,UAdrE,mBAANhlB,IAAkBA,EAAIrP,GAAc,MAALqP,EAAY,GAAKA,IAkB3Dkf,EAAMuiD,WAAa,SAASv1E,GAC1B84B,EAAQ94B,EACRu1E,KAGFviD,EAAMk+E,SAAW,SAASlxG,UACjBgB,UAAUxC,QAAU0yG,EAAwB,mBAANlxG,EAAmBA,EAAIyE,IAAUzE,GAAIu1E,IAAcviD,GAASk+E,GAG3Gl+E,EAAMlf,EAAI,SAAS9T,UACVgB,UAAUxC,QAAUsV,EAAiB,mBAAN9T,EAAmBA,EAAIyE,IAAUzE,GAAIu1E,IAAcviD,GAASlf,GAG7Fkf,IJ3BH0/E,GAAS,SACTC,GAAc,CAAC,QAAS,WAAY,cAAe,gBAAiB,UACpEC,GAAc,CAAC,SAAU,cACzBC,GAAc,CAAC,IAAK,IAAK,KAAM,MAQrC,SAASC,GAAMx/E,GACb4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAyO7B,SAASy/E,GAAMC,EAAKhzG,EAAGqzB,EAAMX,OAEvB5zB,EACAM,EACAD,EACAjB,EAJAoI,EAAIvD,EAAM/C,EAAEwwG,YAMX1xG,EAAI,EAAGM,EAAIuzG,GAAYn0G,OAAQM,EAAIM,IAAKN,GAC3CK,EAAIwzG,GAAY7zG,MACN4zG,IAAU1yG,EAAEizB,SAAS9zB,IAAI6zG,EAAI7zG,GAAGa,EAAEb,QAGzCL,EAAI,EAAGM,EAAIkH,EAAE9H,OAAQM,EAAIM,IAAKN,EACjCZ,EAAOw0G,GAAS5zG,GAChBK,EAAIk0B,GAAQrzB,EAAEizB,SAASy/E,GAAQ5zG,GAAKm0G,GAAS3sG,EAAExH,IAAM4zB,GAASO,GAAS3sB,EAAExH,GAAI4zB,GAASsgF,EAAIhgF,MAAM90B,GAAQ,OACjG80G,EAAIhgF,MAAM90B,EAAMiB,OAGpBC,EAAI4zG,EAAIE,WAAa,EAAGp0G,EAAIM,IAAKN,EACpCk0G,EAAIhgF,MAAM0/E,GAAS5zG,EAAG,aAGxBk0G,EAAIE,UAAY5sG,EAAE9H,OACXw0G,EAGT,SAAS//E,GAAS3sB,EAAGosB,OACflwB,EAAGkE,MAEFlE,KAAK8D,KACJP,EAAWW,EAAIJ,EAAE9D,KAAOkwB,EAAMO,SAAS50B,EAAeqI,IAAK,OAAO,SAGjE,EAGT,SAASusG,GAASjzG,OACZsG,EAAGnH,MAQFA,KANAuI,GAAeupG,GAAUjxG,EAAEgzB,QAC9Bj0B,EAAM,uBAAyBiB,EAAEgzB,OAGnC1sB,EAAI2qG,GAASjxG,EAAEgzB,SAELhzB,EACJ+F,EAAWO,EAAEnH,KAAKg0G,GAAc7sG,EAAEnH,GAAIa,EAAEb,GAAIa,UAG3CsG,EAGT,SAAS6sG,GAAc7sG,EAAGI,EAAG1G,GAC3BsG,EAAEP,EAAWW,GAAKyM,GAAKzM,EAAEyM,EAAGnT,GAAK0G,GA5RnCosG,GAAMz2E,WAAa,MACT,iBACI,WACE,UAEJ,CAAC,MACD,cACA,mBACG,GACV,MACO,eACA,mBACG,GACV,MACO,kBACA,iBACG,KACV,MACO,aACA,iBACG,GACV,MACO,gBACA,iBACG,MACV,MACO,mBACA,iBACG,GACV,MACO,qBACA,iBACG,IACV,MACO,cACA,eACC,SACC,CAAC,KACF,OACI,iBAED,CAAC,MACD,SACA,iBACG,GACV,MACO,SACA,iBACG,KAEZ,KACM,OACI,kBAED,CAAC,MACD,cACA,eACA,GACP,MACO,gBACA,iBACG,IACV,MACO,kBACA,iBACG,KAEZ,KACM,OACI,gBAED,CAAC,MACD,gBACA,kBACI,IACX,MACO,aACA,iBACG,IACV,MACO,mBACA,iBACG,GACV,MACO,mBACA,YAET,KACM,OACI,eAED,CAAC,MACD,aACA,QACP,MACO,UACA,SACP,MACO,gBACA,iBACG,SACH,GACP,MACO,gBACA,eACA,GACP,MACO,kBACA,iBACG,KAEZ,KACM,OACI,YAED,CAAC,MACD,gBACA,iBACG,IACV,MACO,SACA,WAET,KACM,OACI,YAED,CAAC,MACD,gBACA,iBACG,IACV,MACO,SACA,aAGX,MACO,UACA,gBACC,UACC,UACCw2E,MAGf5pG,GAAS6pG,GAAO54E,GAAW,CACzB5pB,UAAUtQ,EAAG0yB,OAmEAxB,EAAIwD,EAlEXs+E,EAAM/xG,KAAKqB,MACX8wG,EAAS1gF,EAAMyE,QAAQzE,EAAM+E,SAC7BnE,EAAStzB,EAAEizB,SAAS0/E,IACpBU,EAAQrzG,EAAE4wG,YAAc,OAGvBoC,GAWCI,IACF1gF,EAAMG,SAAS,SACfmgF,EAAIl6E,MAAMpG,EAAM3wB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"} \ No newline at end of file diff --git a/src/citationnet/static/js/vega@5.17.0.js b/src/citationnet/static/js/vega@5.17.0.js new file mode 100644 index 0000000..1b03b69 --- /dev/null +++ b/src/citationnet/static/js/vega@5.17.0.js @@ -0,0 +1,2 @@ +!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).vega={})}(this,(function(t){"use strict";function e(t,e,n){return t.fields=e||[],t.fname=n,t}function n(t){return null==t?null:t.fname}function r(t){return null==t?null:t.fields}function i(t){return 1===t.length?o(t[0]):a(t)}const o=t=>function(e){return e[t]},a=t=>{const e=t.length;return function(n){for(let r=0;rr&&c(),s=r=i+1):"]"===o&&(s||u("Access path missing open bracket: "+t),s>0&&c(),s=0,r=i+1):i>r?c():r=i+1}return s&&u("Access path missing closing bracket: "+t),a&&u("Access path missing closing quote: "+t),i>r&&(i++,c()),e}function l(t,n,r){const o=s(t);return t=1===o.length?o[0]:t,e((r&&r.get||i)(o),[t],n||t)}const c=l("id"),f=e((t=>t),[],"identity"),h=e((()=>0),[],"zero"),d=e((()=>1),[],"one"),p=e((()=>!0),[],"true"),g=e((()=>!1),[],"false");function m(t,e,n){const r=[e].concat([].slice.call(n));console[t].apply(console,r)}function y(t,e){let n=t||0;return{level(t){return arguments.length?(n=+t,this):n},error(){return n>=1&&m(e||"error","ERROR",arguments),this},warn(){return n>=2&&m(e||"warn","WARN",arguments),this},info(){return n>=3&&m(e||"log","INFO",arguments),this},debug(){return n>=4&&m(e||"log","DEBUG",arguments),this}}}var v=Array.isArray;function _(t){return t===Object(t)}const x=t=>"__proto__"!==t;function b(...t){return t.reduce(((t,e)=>{for(const n in e)if("signals"===n)t.signals=k(t.signals,e.signals);else{const r="legend"===n?{layout:1}:"style"===n||null;w(t,n,e[n],r)}return t}),{})}function w(t,e,n,r){if(!x(e))return;let i,o;if(_(n)&&!v(n))for(i in o=_(t[e])?t[e]:t[e]={},n)r&&(!0===r||r[i])?w(o,i,n[i]):x(i)&&(o[i]=n[i]);else t[e]=n}function k(t,e){if(null==t)return e;const n={},r=[];function i(t){n[t.name]||(n[t.name]=1,r.push(t))}return e.forEach(i),t.forEach(i),r}function M(t){return t[t.length-1]}function A(t){return null==t||""===t?null:+t}const E=t=>e=>t*Math.exp(e),D=t=>e=>Math.log(t*e),C=t=>e=>Math.sign(e)*Math.log1p(Math.abs(e/t)),F=t=>e=>Math.sign(e)*Math.expm1(Math.abs(e))*t,S=t=>e=>e<0?-Math.pow(-e,t):Math.pow(e,t);function B(t,e,n,r){const i=n(t[0]),o=n(M(t)),a=(o-i)*e;return[r(i-a),r(o-a)]}function T(t,e){return B(t,e,A,f)}function z(t,e){var n=Math.sign(t[0]);return B(t,e,D(n),E(n))}function N(t,e,n){return B(t,e,S(n),S(1/n))}function O(t,e,n){return B(t,e,C(n),F(n))}function R(t,e,n,r,i){const o=r(t[0]),a=r(M(t)),u=null!=e?r(e):(o+a)/2;return[i(u+(o-u)*n),i(u+(a-u)*n)]}function L(t,e,n){return R(t,e,n,A,f)}function U(t,e,n){const r=Math.sign(t[0]);return R(t,e,n,D(r),E(r))}function q(t,e,n,r){return R(t,e,n,S(r),S(1/r))}function P(t,e,n,r){return R(t,e,n,C(r),F(r))}function j(t){return 1+~~(new Date(t).getMonth()/3)}function I(t){return 1+~~(new Date(t).getUTCMonth()/3)}function $(t){return null!=t?v(t)?t:[t]:[]}function W(t,e,n){let r,i=t[0],o=t[1];return o=n-e?[e,n]:[i=Math.min(Math.max(i,e),n-r),i+r]}function H(t){return"function"==typeof t}function Y(t,n,i){i=i||{},n=$(n)||[];const o=[],a=[],u={},s=i.comparator||G;return $(t).forEach(((t,e)=>{null!=t&&(o.push("descending"===n[e]?-1:1),a.push(t=H(t)?t:l(t,null,i)),(r(t)||[]).forEach((t=>u[t]=1)))})),0===a.length?null:e(s(a,o),Object.keys(u))}const V=(t,e)=>(te||null==e)&&null!=t?1:(e=e instanceof Date?+e:e,(t=t instanceof Date?+t:t)!==t&&e==e?-1:e!=e&&t==t?1:0),G=(t,e)=>1===t.length?X(t[0],e[0]):J(t,e,t.length),X=(t,e)=>function(n,r){return V(t(n),t(r))*e},J=(t,e,n)=>(e.push(0),function(r,i){let o,a=0,u=-1;for(;0===a&&++ut}function Q(t,e){let n;return r=>{n&&clearTimeout(n),n=setTimeout((()=>(e(r),n=null)),t)}}function K(t){for(let e,n,r=1,i=arguments.length;ro&&(o=r))}else{for(r=e(t[a]);ao&&(o=r))}return[i,o]}function et(t,e){const n=t.length;let r,i,o,a,u,s=-1;if(null==e){for(;++s=i){r=o=i;break}if(s===n)return[-1,-1];for(a=u=s;++si&&(r=i,a=s),o=i){r=o=i;break}if(s===n)return[-1,-1];for(a=u=s;++si&&(r=i,a=s),or(t)?n[t]:void 0,set(t,e){return r(t)||(++i.size,n[t]===it&&--i.empty),n[t]=e,this},delete(t){return r(t)&&(--i.size,++i.empty,n[t]=it),this},clear(){i.size=i.empty=0,i.object=n={}},test(t){return arguments.length?(e=t,i):e},clean(){const t={};let r=0;for(const i in n){const o=n[i];o===it||e&&e(o)||(t[i]=o,++r)}i.size=r,i.empty=0,i.object=n=t}};return t&&Object.keys(t).forEach((e=>{i.set(e,t[e])})),i}function at(t,e,n,r,i,o){if(!n&&0!==n)return o;const a=+n;let u,s=t[0],l=M(t);la&&(i=o,o=a,a=i),r=void 0===r||r,((n=void 0===n||n)?o<=t:ot.replace(/\\(.)/g,"$1"))):$(t));const o=t&&t.length,a=r&&r.get||i,u=t=>a(n?[t]:s(t));let l;if(o)if(1===o){const e=u(t[0]);l=function(t){return""+e(t)}}else{const e=t.map(u);l=function(t){let n=""+e[0](t),r=0;for(;++r{e={},n={},r=0},o=(i,o)=>(++r>t&&(n=e,e={},r=1),e[i]=o);return i(),{clear:i,has:t=>rt(e,t)||rt(n,t),get:t=>rt(e,t)?e[t]:rt(n,t)?o(t,n[t]):void 0,set:(t,n)=>rt(e,t)?e[t]=n:o(t,n)}}function vt(t,e,n,r){const i=e.length,o=n.length;if(!o)return e;if(!i)return n;const a=r||new e.constructor(i+o);let u=0,s=0,l=0;for(;u0?n[s++]:e[u++];for(;u=0;)n+=t;return n}function xt(t,e,n,r){const i=n||" ",o=t+"",a=e-o.length;return a<=0?o:"left"===r?_t(i,a)+o:"center"===r?_t(i,~~(a/2))+o+_t(i,Math.ceil(a/2)):o+_t(i,a)}function bt(t){return t&&M(t)-t[0]||0}function wt(t){return v(t)?"["+t.map(wt)+"]":_(t)||pt(t)?JSON.stringify(t).replace("\u2028","\\u2028").replace("\u2029","\\u2029"):t}function kt(t){return null==t||""===t?null:!(!t||"false"===t||"0"===t)&&!!t}const Mt=t=>ht(t)||ct(t)?t:Date.parse(t);function At(t,e){return e=e||Mt,null==t||""===t?null:e(t)}function Et(t){return null==t||""===t?null:t+""}function Dt(t){const e={},n=t.length;for(let r=0;rnew Promise(((n,r)=>{t.readFile(e,((t,e)=>{t?r(t):n(e)}))})):Lt}async function Lt(){u("No file system access.")}function Ut(t){return t?async function(e,n){const r=K({},this.options.http,n),i=n&&n.response,o=await t(e,r);return o.ok?H(o[i])?o[i]():o.text():u(o.status+""+o.statusText)}:qt}async function qt(){u("No HTTP fetch method available.")}const Pt=t=>!(Number.isNaN(+t)||t instanceof Date),jt={boolean:kt,integer:A,number:A,date:At,string:Et,unknown:f},It=[t=>"true"===t||"false"===t||!0===t||!1===t,t=>Pt(t)&&Number.isInteger(+t),Pt,t=>!Number.isNaN(Date.parse(t))],$t=["boolean","integer","number","date"];function Wt(t,e){if(!t||!t.length)return"unknown";const n=t.length,r=It.length,i=It.map(((t,e)=>e+1));for(let a,u,s=0,l=0;s0===t?e:t),0)-1]}function Ht(t,e){return e.reduce(((e,n)=>(e[n]=Wt(t,n),e)),{})}var Yt={},Vt={};function Gt(t){return new Function("d","return {"+t.map((function(t,e){return JSON.stringify(t)+": d["+e+'] || ""'})).join(",")+"}")}function Xt(t){var e=Object.create(null),n=[];return t.forEach((function(t){for(var r in t)r in e||n.push(e[r]=r)})),n}function Jt(t,e){var n=t+"",r=n.length;return r9999?"+"+Jt(t,6):Jt(t,4)}(t.getUTCFullYear())+"-"+Jt(t.getUTCMonth()+1,2)+"-"+Jt(t.getUTCDate(),2)+(i?"T"+Jt(e,2)+":"+Jt(n,2)+":"+Jt(r,2)+"."+Jt(i,3)+"Z":r?"T"+Jt(e,2)+":"+Jt(n,2)+":"+Jt(r,2)+"Z":n||e?"T"+Jt(e,2)+":"+Jt(n,2)+"Z":"")}function Qt(t){var e=new RegExp('["'+t+"\n\r]"),n=t.charCodeAt(0);function r(t,e){var r,i=[],o=t.length,a=0,u=0,s=o<=0,l=!1;function c(){if(s)return Vt;if(l)return l=!1,Yt;var e,r,i=a;if(34===t.charCodeAt(i)){for(;a++=o?s=!0:10===(r=t.charCodeAt(a++))?l=!0:13===r&&(l=!0,10===t.charCodeAt(a)&&++a),t.slice(i+1,e-1).replace(/""/g,'"')}for(;a1)r=le(t,e,n);else for(i=0,r=new Array(o=t.arcs.length);it!==e,exterior:(t,e)=>t===e};function fe(t,e){let n,r,i,o;return t=ee(t,e),e&&e.feature?(n=re,i=e.feature):e&&e.mesh?(n=ue,i=e.mesh,o=ce[e.filter]):u("Missing TopoJSON feature or mesh parameter."),r=(r=t.objects[i])?n(t,r,o):u("Invalid TopoJSON object: "+i),r&&r.features||[r]}fe.responseType="json";const he={dsv:te,csv:Kt(","),tsv:Kt("\t"),json:ee,topojson:fe};function de(t,e){return arguments.length>1?(he[t]=e,this):rt(he,t)?he[t]:null}function pe(t){const e=de(t);return e&&e.responseType||"text"}function ge(t,e){return te?1:t>=e?0:NaN}function me(t){let e=t,n=t;function r(t,e,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;n(t[o],e)<0?r=o+1:i=o}return r}return 1===t.length&&(e=(e,n)=>t(e)-n,n=function(t){return(e,n)=>ge(t(e),n)}(t)),{left:r,center:function(t,n,i,o){null==i&&(i=0),null==o&&(o=t.length);const a=r(t,n,i,o-1);return a>i&&e(t[a-1],n)>-e(t[a],n)?a-1:a},right:function(t,e,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;n(t[o],e)>0?i=o:r=o+1}return r}}}function ye(t){return null===t?NaN:+t}const ve=me(ge),_e=ve.right,xe=ve.left;me(ye).center;class be{constructor(){this._partials=new Float64Array(32),this._n=0}add(t){const e=this._partials;let n=0;for(let r=0;r0){for(o=t[--i];i>0&&(e=o,n=t[--i],o=e+n,r=n-(o-e),!r););i>0&&(r<0&&t[i-1]<0||r>0&&t[i-1]>0)&&(n=2*r,e=o+n,n==e-o&&(o=e))}return o}}var we=Math.sqrt(50),ke=Math.sqrt(10),Me=Math.sqrt(2);function Ae(t,e,n){var r,i,o,a,u=-1;if(n=+n,(t=+t)===(e=+e)&&n>0)return[t];if((r=e0)for(t=Math.ceil(t/a),e=Math.floor(e/a),o=new Array(i=Math.ceil(e-t+1));++u=0?(o>=we?10:o>=ke?5:o>=Me?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(o>=we?10:o>=ke?5:o>=Me?2:1)}function De(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),o=r/i;return o>=we?i*=10:o>=ke?i*=5:o>=Me&&(i*=2),e=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n=i)&&(n=i)}return n}function Fe(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n>e||void 0===n&&e>=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}function Se(t,e,n=0,r=t.length-1,i=ge){for(;r>n;){if(r-n>600){const o=r-n+1,a=e-n+1,u=Math.log(o),s=.5*Math.exp(2*u/3),l=.5*Math.sqrt(u*s*(o-s)/o)*(a-o/2<0?-1:1);Se(t,e,Math.max(n,Math.floor(e-a*s/o+l)),Math.min(r,Math.floor(e+(o-a)*s/o+l)),i)}const o=t[e];let a=n,u=r;for(Be(t,n,e),i(t[r],o)>0&&Be(t,n,r);a0;)--u}0===i(t[n],o)?Be(t,n,u):(++u,Be(t,u,r)),u<=e&&(n=u+1),e<=u&&(r=u-1)}return t}function Be(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function Te(t,e,n){if(r=(t=Float64Array.from(function*(t,e){if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(yield e);else{let n=-1;for(let r of t)null!=(r=e(r,++n,t))&&(r=+r)>=r&&(yield r)}}(t,n))).length){if((e=+e)<=0||r<2)return Fe(t);if(e>=1)return Ce(t);var r,i=(r-1)*e,o=Math.floor(i),a=Ce(Se(t,o).subarray(0,o+1));return a+(Fe(t.subarray(o+1))-a)*(i-o)}}function ze(t,e,n=ye){if(r=t.length){if((e=+e)<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,o=Math.floor(i),a=+n(t[o],o,t);return a+(+n(t[o+1],o+1,t)-a)*(i-o)}}function Ne(t,e){return Te(t,.5,e)}function Oe(t){return Array.from(function*(t){for(const e of t)yield*e}(t))}function Re(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((e-t)/n)),o=new Array(i);++r1?r[0]+r.slice(2):r,+t.slice(n+1)]}function qe(t){return(t=Ue(Math.abs(t)))?t[1]:NaN}var Pe,je=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Ie(t){if(!(e=je.exec(t)))throw new Error("invalid format: "+t);var e;return new $e({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function $e(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function We(t,e){var n=Ue(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}Ie.prototype=$e.prototype,$e.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var He={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>We(100*t,e),r:We,s:function(t,e){var n=Ue(t,e);if(!n)return t+"";var r=n[0],i=n[1],o=i-(Pe=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,a=r.length;return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+Ue(t,Math.max(0,e+o-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function Ye(t){return t}var Ve,Ge,Xe,Je=Array.prototype.map,Ze=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Qe(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?Ye:(e=Je.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,o=[],a=0,u=e[0],s=0;i>0&&u>0&&(s+u+1>r&&(u=Math.max(1,r-s)),o.push(t.substring(i-=u,i+u)),!((s+=u+1)>r));)u=e[a=(a+1)%e.length];return o.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",o=void 0===t.currency?"":t.currency[1]+"",a=void 0===t.decimal?".":t.decimal+"",u=void 0===t.numerals?Ye:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(Je.call(t.numerals,String)),s=void 0===t.percent?"%":t.percent+"",l=void 0===t.minus?"−":t.minus+"",c=void 0===t.nan?"NaN":t.nan+"";function f(t){var e=(t=Ie(t)).fill,n=t.align,f=t.sign,h=t.symbol,d=t.zero,p=t.width,g=t.comma,m=t.precision,y=t.trim,v=t.type;"n"===v?(g=!0,v="g"):He[v]||(void 0===m&&(m=12),y=!0,v="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var _="$"===h?i:"#"===h&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",x="$"===h?o:/[%p]/.test(v)?s:"",b=He[v],w=/[defgprs%]/.test(v);function k(t){var i,o,s,h=_,k=x;if("c"===v)k=b(t)+k,t="";else{var M=(t=+t)<0||1/t<0;if(t=isNaN(t)?c:b(Math.abs(t),m),y&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),M&&0==+t&&"+"!==f&&(M=!1),h=(M?"("===f?f:l:"-"===f||"("===f?"":f)+h,k=("s"===v?Ze[8+Pe/3]:"")+k+(M&&"("===f?")":""),w)for(i=-1,o=t.length;++i(s=t.charCodeAt(i))||s>57){k=(46===s?a+t.slice(i+1):t.slice(i))+k,t=t.slice(0,i);break}}g&&!d&&(t=r(t,1/0));var A=h.length+t.length+k.length,E=A>1)+h+t+k+E.slice(A);break;default:t=E+h+t+k}return u(t)}return m=void 0===m?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,m)):Math.max(0,Math.min(20,m)),k.toString=function(){return t+""},k}return{format:f,formatPrefix:function(t,e){var n=f(((t=Ie(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(qe(e)/3))),i=Math.pow(10,-r),o=Ze[8+r/3];return function(t){return n(i*t)+o}}}}function Ke(t){return Math.max(0,-qe(Math.abs(t)))}function tn(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(qe(e)/3)))-qe(Math.abs(t)))}function en(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,qe(e)-qe(t))+1}!function(t){Ve=Qe(t),Ge=Ve.format,Xe=Ve.formatPrefix}({thousands:",",grouping:[3],currency:["$",""]});var nn=new Date,rn=new Date;function on(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=function(e){return t(e=new Date(+e)),e},i.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},i.round=function(t){var e=i(t),n=i.ceil(t);return t-e0))return u;do{u.push(a=new Date(+n)),e(n,o),t(n)}while(a=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(i.count=function(e,r){return nn.setTime(+e),rn.setTime(+r),t(nn),t(rn),Math.floor(n(nn,rn))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(e){return r(e)%t==0}:function(e){return i.count(0,e)%t==0}):i:null}),i}var an=on((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));an.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?on((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):an:null};var un=1e3,sn=6e4,ln=36e5,cn=864e5,fn=6048e5,hn=on((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+e*un)}),(function(t,e){return(e-t)/un}),(function(t){return t.getUTCSeconds()})),dn=on((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*un)}),(function(t,e){t.setTime(+t+e*sn)}),(function(t,e){return(e-t)/sn}),(function(t){return t.getMinutes()})),pn=on((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*un-t.getMinutes()*sn)}),(function(t,e){t.setTime(+t+e*ln)}),(function(t,e){return(e-t)/ln}),(function(t){return t.getHours()})),gn=on((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*sn)/cn),(t=>t.getDate()-1));function mn(t){return on((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*sn)/fn}))}var yn=mn(0),vn=mn(1),_n=(mn(2),mn(3),mn(4)),xn=(mn(5),mn(6),on((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()}))),bn=on((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));bn.every=function(t){return isFinite(t=Math.floor(t))&&t>0?on((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null};var wn=on((function(t){t.setUTCSeconds(0,0)}),(function(t,e){t.setTime(+t+e*sn)}),(function(t,e){return(e-t)/sn}),(function(t){return t.getUTCMinutes()})),kn=on((function(t){t.setUTCMinutes(0,0,0)}),(function(t,e){t.setTime(+t+e*ln)}),(function(t,e){return(e-t)/ln}),(function(t){return t.getUTCHours()})),Mn=on((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/cn}),(function(t){return t.getUTCDate()-1}));function An(t){return on((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/fn}))}var En=An(0),Dn=An(1),Cn=(An(2),An(3),An(4)),Fn=(An(5),An(6),on((function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCMonth(t.getUTCMonth()+e)}),(function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())}),(function(t){return t.getUTCMonth()}))),Sn=on((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));Sn.every=function(t){return isFinite(t=Math.floor(t))&&t>0?on((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};const Bn="year",Tn="quarter",zn="month",Nn="week",On="date",Rn="day",Ln="dayofyear",Un="hours",qn="minutes",Pn="seconds",jn="milliseconds",In=[Bn,Tn,zn,Nn,On,Rn,Ln,Un,qn,Pn,jn],$n=In.reduce(((t,e,n)=>(t[e]=1+n,t)),{});function Wn(t){const e=$(t).slice(),n={};e.length||u("Missing time unit."),e.forEach((t=>{rt($n,t)?n[t]=1:u("Invalid time unit: ".concat(t,"."))}));return(n.week||n.day?1:0)+(n.quarter||n.month||n.date?1:0)+(n.dayofyear?1:0)>1&&u("Incompatible time units: ".concat(t)),e.sort(((t,e)=>$n[t]-$n[e])),e}const Hn={[Bn]:"%Y ",[Tn]:"Q%q ",[zn]:"%b ",[On]:"%d ",[Nn]:"W%U ",[Rn]:"%a ",[Ln]:"%j ",[Un]:"%H:00",[qn]:"00:%M",[Pn]:":%S",[jn]:".%L",["".concat(Bn,"-").concat(zn)]:"%Y-%m ",["".concat(Bn,"-").concat(zn,"-").concat(On)]:"%Y-%m-%d ",["".concat(Un,"-").concat(qn)]:"%H:%M"};function Yn(t,e){const n=K({},Hn,e),r=Wn(t),i=r.length;let o,a,u="",s=0;for(s=0;ss;--o)if(a=r.slice(s,o).join("-"),null!=n[a]){u+=n[a],s=o;break}return u.trim()}const Vn=new Date;function Gn(t){return Vn.setFullYear(t),Vn.setMonth(0),Vn.setDate(1),Vn.setHours(0,0,0,0),Vn}function Xn(t){return Zn(new Date(t))}function Jn(t){return Qn(new Date(t))}function Zn(t){return gn.count(Gn(t.getFullYear())-1,t)}function Qn(t){return yn.count(Gn(t.getFullYear())-1,t)}function Kn(t){return Gn(t).getDay()}function tr(t,e,n,r,i,o,a){if(0<=t&&t<100){const u=new Date(-1,e,n,r,i,o,a);return u.setFullYear(t),u}return new Date(t,e,n,r,i,o,a)}function er(t){return rr(new Date(t))}function nr(t){return ir(new Date(t))}function rr(t){const e=Date.UTC(t.getUTCFullYear(),0,1);return Mn.count(e-1,t)}function ir(t){const e=Date.UTC(t.getUTCFullYear(),0,1);return En.count(e-1,t)}function or(t){return Vn.setTime(Date.UTC(t,0,1)),Vn.getUTCDay()}function ar(t,e,n,r,i,o,a){if(0<=t&&t<100){const t=new Date(Date.UTC(-1,e,n,r,i,o,a));return t.setUTCFullYear(n.y),t}return new Date(Date.UTC(t,e,n,r,i,o,a))}function ur(t,e,n,r,i){const o=e||1,a=M(t),u=(t,e,i)=>function(t,e,n,r){const i=n<=1?t:r?(e,i)=>r+n*Math.floor((t(e,i)-r)/n):(e,r)=>n*Math.floor(t(e,r)/n);return e?(t,n)=>e(i(t,n),n):i}(n[i=i||t],r[i],t===a&&o,e),s=new Date,l=Dt(t),c=l.year?u(Bn):Z(2012),f=l.month?u(zn):l.quarter?u(Tn):h,p=l.week&&l.day?u(Rn,1,Nn+Rn):l.week?u(Nn,1):l.day?u(Rn,1):l.date?u(On,1):l.dayofyear?u(Ln,1):d,g=l.hours?u(Un):h,m=l.minutes?u(qn):h,y=l.seconds?u(Pn):h,v=l.milliseconds?u(jn):h;return function(t){s.setTime(+t);const e=c(s);return i(e,f(s),p(s,e),g(s),m(s),y(s),v(s))}}function sr(t,e,n){return e+7*t-(n+6)%7}const lr={[Bn]:t=>t.getFullYear(),[Tn]:t=>Math.floor(t.getMonth()/3),[zn]:t=>t.getMonth(),[On]:t=>t.getDate(),[Un]:t=>t.getHours(),[qn]:t=>t.getMinutes(),[Pn]:t=>t.getSeconds(),[jn]:t=>t.getMilliseconds(),[Ln]:t=>Zn(t),[Nn]:t=>Qn(t),[Nn+Rn]:(t,e)=>sr(Qn(t),t.getDay(),Kn(e)),[Rn]:(t,e)=>sr(1,t.getDay(),Kn(e))},cr={[Tn]:t=>3*t,[Nn]:(t,e)=>sr(t,0,Kn(e))};function fr(t,e){return ur(t,e||1,lr,cr,tr)}const hr={[Bn]:t=>t.getUTCFullYear(),[Tn]:t=>Math.floor(t.getUTCMonth()/3),[zn]:t=>t.getUTCMonth(),[On]:t=>t.getUTCDate(),[Un]:t=>t.getUTCHours(),[qn]:t=>t.getUTCMinutes(),[Pn]:t=>t.getUTCSeconds(),[jn]:t=>t.getUTCMilliseconds(),[Ln]:t=>rr(t),[Nn]:t=>ir(t),[Rn]:(t,e)=>sr(1,t.getUTCDay(),or(e)),[Nn+Rn]:(t,e)=>sr(ir(t),t.getUTCDay(),or(e))},dr={[Tn]:t=>3*t,[Nn]:(t,e)=>sr(t,0,or(e))};function pr(t,e){return ur(t,e||1,hr,dr,ar)}const gr={[Bn]:bn,[Tn]:xn.every(3),[zn]:xn,[Nn]:yn,[On]:gn,[Rn]:gn,[Ln]:gn,[Un]:pn,[qn]:dn,[Pn]:hn,[jn]:an},mr={[Bn]:Sn,[Tn]:Fn.every(3),[zn]:Fn,[Nn]:En,[On]:Mn,[Rn]:Mn,[Ln]:Mn,[Un]:kn,[qn]:wn,[Pn]:hn,[jn]:an};function yr(t){return gr[t]}function vr(t){return mr[t]}function _r(t,e,n){return t?t.offset(e,n):void 0}function xr(t,e,n){return _r(yr(t),e,n)}function br(t,e,n){return _r(vr(t),e,n)}function wr(t,e,n,r){return t?t.range(e,n,r):void 0}function kr(t,e,n,r){return wr(yr(t),e,n,r)}function Mr(t,e,n,r){return wr(vr(t),e,n,r)}const Ar=1e3,Er=6e4,Dr=36e5,Cr=864e5,Fr=2592e6,Sr=31536e6,Br=[Bn,zn,On,Un,qn,Pn,jn],Tr=Br.slice(0,-1),zr=Tr.slice(0,-1),Nr=zr.slice(0,-1),Or=Nr.slice(0,-1),Rr=[Bn,zn],Lr=[Bn],Ur=[[Tr,1,Ar],[Tr,5,5e3],[Tr,15,15e3],[Tr,30,3e4],[zr,1,Er],[zr,5,3e5],[zr,15,9e5],[zr,30,18e5],[Nr,1,Dr],[Nr,3,108e5],[Nr,6,216e5],[Nr,12,432e5],[Or,1,Cr],[[Bn,Nn],1,6048e5],[Rr,1,Fr],[Rr,3,7776e6],[Lr,1,Sr]];function qr(t){const e=t.extent,n=t.maxbins||40,r=Math.abs(bt(e))/n;let i,o,a=me((t=>t[2])).right(Ur,r);return a===Ur.length?(i=Lr,o=De(e[0]/Sr,e[1]/Sr,n)):a?(a=Ur[r/Ur[a-1][2]=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:co,s:fo,S:Bi,u:Ti,U:zi,V:Oi,w:Ri,W:Li,x:null,X:null,y:Ui,Y:Pi,Z:Ii,"%":lo},x={a:function(t){return a[t.getUTCDay()]},A:function(t){return o[t.getUTCDay()]},b:function(t){return s[t.getUTCMonth()]},B:function(t){return u[t.getUTCMonth()]},c:null,d:$i,e:$i,f:Gi,g:oo,G:uo,H:Wi,I:Hi,j:Yi,L:Vi,m:Xi,M:Ji,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:co,s:fo,S:Zi,u:Qi,U:Ki,V:eo,w:no,W:ro,x:null,X:null,y:io,Y:ao,Z:so,"%":lo},b={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=p.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=f.exec(e.slice(n));return r?(t.w=h.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=y.exec(e.slice(n));return r?(t.m=v.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=g.exec(e.slice(n));return r?(t.m=m.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return M(t,e,n,r)},d:di,e:di,f:_i,g:li,G:si,H:gi,I:gi,j:pi,L:vi,m:hi,M:mi,p:function(t,e,n){var r=l.exec(e.slice(n));return r?(t.p=c.get(r[0].toLowerCase()),n+r[0].length):-1},q:fi,Q:bi,s:wi,S:yi,u:ii,U:oi,V:ai,w:ri,W:ui,x:function(t,e,r){return M(t,n,e,r)},X:function(t,e,n){return M(t,r,e,n)},y:li,Y:si,Z:ci,"%":xi};function w(t,e){return function(n){var r,i,o,a=[],u=-1,s=0,l=t.length;for(n instanceof Date||(n=new Date(+n));++u53)return null;"w"in o||(o.w=1),"Z"in o?(i=(r=jr(Ir(o.y,0,1))).getUTCDay(),r=i>4||0===i?Dn.ceil(r):Dn(r),r=Mn.offset(r,7*(o.V-1)),o.y=r.getUTCFullYear(),o.m=r.getUTCMonth(),o.d=r.getUTCDate()+(o.w+6)%7):(i=(r=Pr(Ir(o.y,0,1))).getDay(),r=i>4||0===i?vn.ceil(r):vn(r),r=gn.offset(r,7*(o.V-1)),o.y=r.getFullYear(),o.m=r.getMonth(),o.d=r.getDate()+(o.w+6)%7)}else("W"in o||"U"in o)&&("w"in o||(o.w="u"in o?o.u%7:"W"in o?1:0),i="Z"in o?jr(Ir(o.y,0,1)).getUTCDay():Pr(Ir(o.y,0,1)).getDay(),o.m=0,o.d="W"in o?(o.w+6)%7+7*o.W-(i+5)%7:o.w+7*o.U-(i+6)%7);return"Z"in o?(o.H+=o.Z/100|0,o.M+=o.Z%100,jr(o)):Pr(o)}}function M(t,e,n,r){for(var i,o,a=0,u=e.length,s=n.length;a=s)return-1;if(37===(i=e.charCodeAt(a++))){if(i=e.charAt(a++),!(o=b[i in Xr?e.charAt(a++):i])||(r=o(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return _.x=w(n,_),_.X=w(r,_),_.c=w(e,_),x.x=w(n,x),x.X=w(r,x),x.c=w(e,x),{format:function(t){var e=w(t+="",_);return e.toString=function(){return t},e},parse:function(t){var e=k(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=w(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=k(t+="",!0);return e.toString=function(){return t},e}}}var Wr,Hr,Yr,Vr,Gr,Xr={"-":"",_:" ",0:"0"},Jr=/^\s*\d+/,Zr=/^%/,Qr=/[\\^$*+?|[\]().{}]/g;function Kr(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o[t.toLowerCase(),e])))}function ri(t,e,n){var r=Jr.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function ii(t,e,n){var r=Jr.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function oi(t,e,n){var r=Jr.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function ai(t,e,n){var r=Jr.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function ui(t,e,n){var r=Jr.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function si(t,e,n){var r=Jr.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function li(t,e,n){var r=Jr.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function ci(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function fi(t,e,n){var r=Jr.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function hi(t,e,n){var r=Jr.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function di(t,e,n){var r=Jr.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function pi(t,e,n){var r=Jr.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function gi(t,e,n){var r=Jr.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function mi(t,e,n){var r=Jr.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function yi(t,e,n){var r=Jr.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function vi(t,e,n){var r=Jr.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function _i(t,e,n){var r=Jr.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function xi(t,e,n){var r=Zr.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function bi(t,e,n){var r=Jr.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function wi(t,e,n){var r=Jr.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function ki(t,e){return Kr(t.getDate(),e,2)}function Mi(t,e){return Kr(t.getHours(),e,2)}function Ai(t,e){return Kr(t.getHours()%12||12,e,2)}function Ei(t,e){return Kr(1+gn.count(bn(t),t),e,3)}function Di(t,e){return Kr(t.getMilliseconds(),e,3)}function Ci(t,e){return Di(t,e)+"000"}function Fi(t,e){return Kr(t.getMonth()+1,e,2)}function Si(t,e){return Kr(t.getMinutes(),e,2)}function Bi(t,e){return Kr(t.getSeconds(),e,2)}function Ti(t){var e=t.getDay();return 0===e?7:e}function zi(t,e){return Kr(yn.count(bn(t)-1,t),e,2)}function Ni(t){var e=t.getDay();return e>=4||0===e?_n(t):_n.ceil(t)}function Oi(t,e){return t=Ni(t),Kr(_n.count(bn(t),t)+(4===bn(t).getDay()),e,2)}function Ri(t){return t.getDay()}function Li(t,e){return Kr(vn.count(bn(t)-1,t),e,2)}function Ui(t,e){return Kr(t.getFullYear()%100,e,2)}function qi(t,e){return Kr((t=Ni(t)).getFullYear()%100,e,2)}function Pi(t,e){return Kr(t.getFullYear()%1e4,e,4)}function ji(t,e){var n=t.getDay();return Kr((t=n>=4||0===n?_n(t):_n.ceil(t)).getFullYear()%1e4,e,4)}function Ii(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Kr(e/60|0,"0",2)+Kr(e%60,"0",2)}function $i(t,e){return Kr(t.getUTCDate(),e,2)}function Wi(t,e){return Kr(t.getUTCHours(),e,2)}function Hi(t,e){return Kr(t.getUTCHours()%12||12,e,2)}function Yi(t,e){return Kr(1+Mn.count(Sn(t),t),e,3)}function Vi(t,e){return Kr(t.getUTCMilliseconds(),e,3)}function Gi(t,e){return Vi(t,e)+"000"}function Xi(t,e){return Kr(t.getUTCMonth()+1,e,2)}function Ji(t,e){return Kr(t.getUTCMinutes(),e,2)}function Zi(t,e){return Kr(t.getUTCSeconds(),e,2)}function Qi(t){var e=t.getUTCDay();return 0===e?7:e}function Ki(t,e){return Kr(En.count(Sn(t)-1,t),e,2)}function to(t){var e=t.getUTCDay();return e>=4||0===e?Cn(t):Cn.ceil(t)}function eo(t,e){return t=to(t),Kr(Cn.count(Sn(t),t)+(4===Sn(t).getUTCDay()),e,2)}function no(t){return t.getUTCDay()}function ro(t,e){return Kr(Dn.count(Sn(t)-1,t),e,2)}function io(t,e){return Kr(t.getUTCFullYear()%100,e,2)}function oo(t,e){return Kr((t=to(t)).getUTCFullYear()%100,e,2)}function ao(t,e){return Kr(t.getUTCFullYear()%1e4,e,4)}function uo(t,e){var n=t.getUTCDay();return Kr((t=n>=4||0===n?Cn(t):Cn.ceil(t)).getUTCFullYear()%1e4,e,4)}function so(){return"+0000"}function lo(){return"%"}function co(t){return+t}function fo(t){return Math.floor(+t/1e3)}function ho(t){const e={};return n=>e[n]||(e[n]=t(n))}function po(t){const e=ho(t.format),n=t.formatPrefix;return{format:e,formatPrefix:n,formatFloat(t){const n=Ie(t||",");if(null==n.precision){switch(n.precision=12,n.type){case"%":n.precision-=2;break;case"e":n.precision-=1}return r=e(n),i=e(".1f")(1)[1],t=>{const e=r(t),n=e.indexOf(i);if(n<0)return e;let o=function(t,e){let n,r=t.lastIndexOf("e");if(r>0)return r;for(r=t.length;--r>e;)if(n=t.charCodeAt(r),n>=48&&n<=57)return r+1}(e,n);const a=on;)if("0"!==e[o]){++o;break}return e.slice(0,o)+a}}return e(n);var r,i},formatSpan(t,r,i,o){o=Ie(null==o?",f":o);const a=De(t,r,i),u=Math.max(Math.abs(t),Math.abs(r));let s;if(null==o.precision)switch(o.type){case"s":return isNaN(s=tn(a,u))||(o.precision=s),n(o,u);case"":case"e":case"g":case"p":case"r":isNaN(s=en(a,u))||(o.precision=s-("e"===o.type));break;case"f":case"%":isNaN(s=Ke(a))||(o.precision=s-2*("%"===o.type))}return e(o)}}}let go,mo;function yo(){return go=po({format:Ge,formatPrefix:Xe})}function vo(t){return po(Qe(t))}function _o(t){return arguments.length?go=vo(t):go}function xo(t,e,n){_(n=n||{})||u("Invalid time multi-format specifier: ".concat(n));const r=e(Pn),i=e(qn),o=e(Un),a=e(On),s=e(Nn),l=e(zn),c=e(Tn),f=e(Bn),h=t(n.milliseconds||".%L"),d=t(n.seconds||":%S"),p=t(n.minutes||"%I:%M"),g=t(n.hours||"%I %p"),m=t(n.date||n.day||"%a %d"),y=t(n.week||"%b %d"),v=t(n.month||"%B"),x=t(n.quarter||"%B"),b=t(n.year||"%Y");return t=>(r(t)pt(t)?e(t):xo(e,yr,t),utcFormat:t=>pt(t)?n(t):xo(n,vr,t),timeParse:ho(t.parse),utcParse:ho(t.utcParse)}}function wo(){return mo=bo({format:Hr,parse:Yr,utcFormat:Vr,utcParse:Gr})}function ko(t){return bo($r(t))}function Mo(t){return arguments.length?mo=ko(t):mo}!function(t){Wr=$r(t),Hr=Wr.format,Yr=Wr.parse,Vr=Wr.utcFormat,Gr=Wr.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}),yo(),wo();const Ao=(t,e)=>K({},t,e);function Eo(t,e){const n=t?vo(t):_o(),r=e?ko(e):Mo();return Ao(n,r)}function Do(t,e){const n=arguments.length;return n&&2!==n&&u("defaultLocale expects either zero or two arguments."),n?Ao(_o(t),Mo(e)):Ao(_o(),Mo())}function Co(t,e,n,r){const i=de((e=e||{}).type||"json");return i||u("Unknown data format type: "+e.type),t=i(t,e),e.parse&&function(t,e,n,r){if(!t.length)return;const i=Mo();n=n||i.timeParse,r=r||i.utcParse;let o,a,u,s,l,c,f=t.columns||Object.keys(t[0]);"auto"===e&&(e=Ht(t,f));f=Object.keys(e);const h=f.map((t=>{const i=e[t];let o,a;if(i&&(i.startsWith("date:")||i.startsWith("utc:"))){o=i.split(/:(.+)?/,2),a=o[1],("'"===a[0]&&"'"===a[a.length-1]||'"'===a[0]&&'"'===a[a.length-1])&&(a=a.slice(1,-1));return("utc"===o[0]?r:n)(a)}if(!jt[i])throw Error("Illegal format pattern: "+t+":"+i);return jt[i]}));for(u=0,l=t.length,c=f.length;u({options:n||{},sanitize:Ot,load:Nt,fileAccess:!!e,file:Rt(e),http:Ut(t)})}("undefined"!=typeof fetch&&fetch,null);function So(t){const e=t||f,n=[],r={};return n.add=t=>{const i=e(t);return r[i]||(r[i]=1,n.push(t)),n},n.remove=t=>{const i=e(t);if(r[i]){r[i]=0;const e=n.indexOf(t);e>=0&&n.splice(e,1)}return n},n}async function Bo(t,e){try{await e(t)}catch(e){t.error(e)}}const To=Symbol("vega_id");let zo=1;function No(t){return!(!t||!Oo(t))}function Oo(t){return t[To]}function Ro(t,e){return t[To]=e,t}function Lo(t){const e=t===Object(t)?t:{data:t};return Oo(e)?e:Ro(e,zo++)}function Uo(t){return qo(t,Lo({}))}function qo(t,e){for(const n in t)e[n]=t[n];return e}function Po(t,e){return Ro(e,Oo(t))}function jo(t,e){return t?e?(n,r)=>t(n,r)||Oo(e(n))-Oo(e(r)):(e,n)=>t(e,n)||Oo(e)-Oo(n):null}function Io(t){return t&&t.constructor===$o}function $o(){const t=[],e=[],n=[],r=[],i=[];let o=null,a=!1;return{constructor:$o,insert(e){const n=$(e),r=n.length;for(let e=0;e{p(t)&&(l[Oo(t)]=-1)}));for(f=0,h=t.length;f0&&(y(g,p,d.value),u.modifies(p));for(f=0,h=i.length;f{p(t)&&l[Oo(t)]>0&&y(t,d.field,d.value)})),u.modifies(d.field);if(a)u.mod=e.length||r.length?s.filter((t=>l[Oo(t)]>0)):s.slice();else for(m in c)u.mod.push(c[m]);return(o||null==o&&(e.length||r.length))&&u.clean(!0),u}}}const Wo="_:mod:_";function Ho(){Object.defineProperty(this,Wo,{writable:!0,value:{}})}Ho.prototype={set(t,e,n,r){const i=this,o=i[t],a=i[Wo];return null!=e&&e>=0?(o[e]!==n||r)&&(o[e]=n,a[e+":"+t]=-1,a[t]=-1):(o!==n||r)&&(i[t]=n,a[t]=v(n)?1+n.length:-1),i},modified(t,e){const n=this[Wo];if(!arguments.length){for(const t in n)if(n[t])return!0;return!1}if(v(t)){for(let e=0;e=0?e+1{a instanceof Go?(a!==this&&(e&&a.targets().add(this),o.push(a)),i.push({op:a,name:t,index:n})):r.set(t,n,a)};for(a in t)if(s=t[a],"pulse"===a)$(s).forEach((t=>{t instanceof Go?t!==this&&(t.targets().add(this),o.push(t)):u("Pulse parameters must be operator instances.")})),this.source=s;else if(v(s))for(r.set(a,-1,Array(l=s.length)),c=0;c{const n=Date.now();return n-e>t?(e=n,1):0}))},debounce(t){const e=Qo();return this.targets().add(Qo(null,null,Q(t,(t=>{const n=t.dataflow;e.receive(t),n&&n.run&&n.run()})))),e},between(t,e){let n=!1;return t.targets().add(Qo(null,null,(()=>n=!0))),e.targets().add(Qo(null,null,(()=>n=!1))),this.filter((()=>n))},detach(){}};const Ko={skip:!0};function ta(t,e,n,r,i,o){const a=K({},o,Ko);let u,s;H(n)||(n=Z(n)),void 0===r?u=e=>t.touch(n(e)):H(r)?(s=new Go(null,r,i,!1),u=e=>{s.evaluate(e);const r=n(e),i=s.value;Io(i)?t.pulse(r,i,o):t.update(r,i,a)}):u=e=>t.update(n(e),r,a),e.apply(u)}function ea(t,e,n,r,i,o){if(void 0===r)e.targets().add(n);else{const a=o||{},u=new Go(null,function(t,e){return e=H(e)?e:Z(e),t?function(n,r){const i=e(n,r);return t.skip()||(t.skip(i!==this.value).value=i),i}:e}(n,r),i,!1);u.modified(a.force),u.rank=e.rank,e.targets().add(u),n&&(u.skip(!0),u.value=n.value,u.targets().add(n),t.connect(n,[u]))}}const na={};function ra(t,e,n){this.dataflow=t,this.stamp=null==e?-1:e,this.add=[],this.rem=[],this.mod=[],this.fields=null,this.encode=n||null}function ia(t,e){const n=[];return Ft(t,e,(t=>n.push(t))),n}function oa(t,e){const n={};return t.visit(e,(t=>{n[Oo(t)]=1})),t=>n[Oo(t)]?null:t}function aa(t,e){return t?(n,r)=>t(n,r)&&e(n,r):e}function ua(t,e,n,r){const i=this,o=n.length;let a=0;this.dataflow=t,this.stamp=e,this.fields=null,this.encode=r||null,this.pulses=n;for(let t=0;te[t]=!0)):e[t]=!0,this},modified(t,e){const n=this.fields;return!(!e&&!this.mod.length||!n)&&(arguments.length?v(t)?t.some((t=>n[t])):n[t]:!!n)},filter(t,e){const n=this;return 1&t&&(n.addF=aa(n.addF,e)),2&t&&(n.remF=aa(n.remF,e)),4&t&&(n.modF=aa(n.modF,e)),16&t&&(n.srcF=aa(n.srcF,e)),n},materialize(t){const e=this;return 1&(t=t||7)&&e.addF&&(e.add=ia(e.add,e.addF),e.addF=null),2&t&&e.remF&&(e.rem=ia(e.rem,e.remF),e.remF=null),4&t&&e.modF&&(e.mod=ia(e.mod,e.modF),e.modF=null),16&t&&e.srcF&&(e.source=e.source.filter(e.srcF),e.srcF=null),e},visit(t,e){const n=this,r=e;if(16&t)return Ft(n.source,n.srcF,r),n;1&t&&Ft(n.add,n.addF,r),2&t&&Ft(n.rem,n.remF,r),4&t&&Ft(n.mod,n.modF,r);const i=n.source;if(8&t&&i){const t=n.add.length+n.mod.length;t===i.length||Ft(i,t?oa(n,5):n.srcF,r)}return n}},ut(ua,ra,{fork(t){const e=new ra(this.dataflow).init(this,t&this.NO_FIELDS);return void 0!==t&&(t&e.ADD&&this.visit(e.ADD,(t=>e.add.push(t))),t&e.REM&&this.visit(e.REM,(t=>e.rem.push(t))),t&e.MOD&&this.visit(e.MOD,(t=>e.mod.push(t)))),e},changed(t){return this.changes&t},modified(t){const e=this,n=e.fields;return n&&e.changes&e.MOD?v(t)?t.some((t=>n[t])):n[t]:0},filter(){u("MultiPulse does not support filtering.")},materialize(){u("MultiPulse does not support materialization.")},visit(t,e){const n=this,r=n.pulses,i=r.length;let o=0;if(t&n.SOURCE)for(;oe=[],size:()=>e.length,peek:()=>e[0],push:n=>(e.push(n),fa(e,0,e.length-1,t)),pop:()=>{const n=e.pop();let r;return e.length?(r=e[0],e[0]=n,function(t,e,n){const r=e,i=t.length,o=t[e];let a,u=1+(e<<1);for(;u=0&&(u=a),t[e]=t[u],u=1+((e=u)<<1);t[e]=o,fa(t,r,e,n)}(e,0,t)):r=n,r}}}function fa(t,e,n,r){let i,o;const a=t[n];for(;n>e&&(o=n-1>>1,i=t[o],r(a,i)<0);)t[n]=i,n=o;return t[n]=a}function ha(){this.logger(y()),this.logLevel(1),this._clock=0,this._rank=0,this._locale=Do();try{this._loader=Fo()}catch(t){}this._touched=So(c),this._input={},this._pulse=null,this._heap=ca(((t,e)=>t.qrank-e.qrank)),this._postrun=[]}function da(t){return function(){return this._log[t].apply(this,arguments)}}function pa(t,e){Go.call(this,t,null,e)}ha.prototype={stamp(){return this._clock},loader(t){return arguments.length?(this._loader=t,this):this._loader},locale(t){return arguments.length?(this._locale=t,this):this._locale},logger(t){return arguments.length?(this._log=t,this):this._log},error:da("error"),warn:da("warn"),info:da("info"),debug:da("debug"),logLevel:da("level"),cleanThreshold:1e4,add:function(t,e,n,r){let i,o=1;return t instanceof Go?i=t:t&&t.prototype instanceof Go?i=new t:H(t)?i=new Go(null,t):(o=0,i=new Go(t,e)),this.rank(i),o&&(r=n,n=e),n&&this.connect(i,i.parameters(n,r)),this.touch(i),i},connect:function(t,e){const n=t.rank,r=e.length;for(let i=0;i=0;)e.push(n=r[i]),n===t&&u("Cycle detected in dataflow graph.")},pulse:function(t,e,n){this.touch(t,n||la);const r=new ra(this,this._clock+(this._pulse?0:1)),i=t.pulse&&t.pulse.source||[];return r.target=t,this._input[t.id]=e.pulse(r,i),this},touch:function(t,e){const n=e||la;return this._pulse?this._enqueue(t):this._touched.add(t),n.skip&&t.skip(!0),this},update:function(t,e,n){const r=n||la;return(t.set(e)||r.force)&&this.touch(t,r),this},changeset:$o,ingest:function(t,e,n){return e=this.parse(e,n),this.pulse(t,this.changeset().insert(e))},parse:function(t,e){const n=this.locale();return Co(t,e,n.timeParse,n.utcParse)},preload:async function(t,e,n){const r=this,i=r._pending||function(t){let e;const n=new Promise((t=>e=t));return n.requests=0,n.done=()=>{0==--n.requests&&(t._pending=null,e(t))},t._pending=n}(r);i.requests+=1;const o=await r.request(e,n);return r.pulse(t,r.changeset().remove(p).insert(o.data||[])),i.done(),o},request:async function(t,e){const n=this;let r,i=0;try{r=await n.loader().load(t,{context:"dataflow",response:pe(e&&e.type)});try{r=n.parse(r,e)}catch(e){i=-2,n.warn("Data ingestion failed",t,e)}}catch(e){i=-1,n.warn("Loading failed",t,e)}return{data:r,status:i}},events:function(t,e,n,r){const i=this,o=Qo(n,r),a=function(t){t.dataflow=i;try{o.receive(t)}catch(t){i.error(t)}finally{i.run()}};let u;u="string"==typeof t&&"undefined"!=typeof document?document.querySelectorAll(t):$(t);const s=u.length;for(let t=0;tr._enqueue(t,!0))),r._touched=So(c);let a,u,s,l=0;try{for(;r._heap.size()>0;)a=r._heap.pop(),a.rank===a.qrank?(u=a.run(r._getPulse(a,t)),u.then?u=await u:u.async&&(i.push(u.async),u=na),u!==na&&a._targets&&a._targets.forEach((t=>r._enqueue(t))),++l):r._enqueue(a,!0)}catch(t){r._heap.clear(),s=t}if(r._input={},r._pulse=null,r.debug("Pulse ".concat(o,": ").concat(l," operators")),s&&(r._postrun=[],r.error(s)),r._postrun.length){const t=r._postrun.sort(((t,e)=>e.priority-t.priority));r._postrun=[];for(let e=0;er.runAsync(null,(()=>{t.forEach((t=>{try{t(r)}catch(t){r.error(t)}}))})))),r},run:function(t,e,n){return this._pulse?sa(this):(this.evaluate(t,e,n),this)},runAsync:async function(t,e,n){for(;this._running;)await this._running;const r=()=>this._running=null;return(this._running=this.evaluate(t,e,n)).then(r,r),this._running},runAfter:function(t,e,n){if(this._pulse||e)this._postrun.push({priority:n||0,callback:t});else try{t(this)}catch(t){this.error(t)}},_enqueue:function(t,e){const n=t.stampt.pulse)),e):this._input[t.id]||function(t,e){if(e&&e.stamp===t.stamp)return e;t=t.fork(),e&&e!==na&&(t.source=e.source);return t}(this._pulse,n&&n.pulse)}},ut(pa,Go,{run(t){if(t.stampthis.pulse=t)):e!==t.StopPropagation&&(this.pulse=e),e},evaluate(t){const e=this.marshall(t.stamp),n=this.transform(e,t);return e.clear(),n},transform(){}});const ga={};function ma(t){const e=ya(t);return e&&e.Definition||null}function ya(t){return t=t&&t.toLowerCase(),rt(ga,t)?ga[t]:null}function*va(t,e){if(null==e)for(let e of t)null!=e&&""!==e&&(e=+e)>=e&&(yield e);else{let n=-1;for(let r of t)r=e(r,++n,t),null!=r&&""!==r&&(r=+r)>=r&&(yield r)}}function _a(t,e,n){const r=Float64Array.from(va(t,n));return r.sort(ge),e.map((t=>ze(r,t)))}function xa(t,e){return _a(t,[.25,.5,.75],e)}function ba(t,e){const n=t.length,r=function(t,e){const n=function(t,e){let n,r=0,i=0,o=0;if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(n=e-i,i+=n/++r,o+=n*(e-i));else{let a=-1;for(let u of t)null!=(u=e(u,++a,t))&&(u=+u)>=u&&(n=u-i,i+=n/++r,o+=n*(u-i))}if(r>1)return o/(r-1)}(t,e);return n?Math.sqrt(n):n}(t,e),i=xa(t,e),o=(i[2]-i[0])/1.34;return 1.06*(Math.min(r,o)||r||Math.abs(i[0])||1)*Math.pow(n,-.2)}function wa(t){const e=t.maxbins||20,n=t.base||10,r=Math.log(n),i=t.divide||[5,2];let o,a,u,s,l,c,f=t.extent[0],h=t.extent[1];const d=t.span||h-f||Math.abs(f)||1;if(t.step)o=t.step;else if(t.steps){for(s=d/e,l=0,c=t.steps.length;le;)o*=n;for(l=0,c=i.length;l=u&&d/s<=e&&(o=s)}s=Math.log(o);const p=s>=0?0:1+~~(-s/r),g=Math.pow(n,-p-1);return(t.nice||void 0===t.nice)&&(s=Math.floor(f/o+g)*o,f=ft);const i=t.length,o=new Float64Array(i);let a,u=0,s=1,l=r(t[0]),c=l,f=l+e;for(;s=f){for(c=(l+c)/2;u>1);ia;)t[i--]=t[o]}o=a,a=r}return t}(o,e+e/4):o}t.random=Math.random;const Aa=Math.sqrt(2*Math.PI),Ea=Math.SQRT2;let Da=NaN;function Ca(e,n){e=e||0,n=null==n?1:n;let r,i,o=0,a=0;if(Da==Da)o=Da,Da=NaN;else{do{o=2*t.random()-1,a=2*t.random()-1,r=o*o+a*a}while(0===r||r>1);i=Math.sqrt(-2*Math.log(r)/r),o*=i,Da=a*i}return e+o*n}function Fa(t,e,n){const r=(t-(e||0))/(n=null==n?1:n);return Math.exp(-.5*r*r)/(n*Aa)}function Sa(t,e,n){const r=(t-(e=e||0))/(n=null==n?1:n),i=Math.abs(r);let o;if(i>37)o=0;else{const t=Math.exp(-i*i/2);let e;i<7.07106781186547?(e=.0352624965998911*i+.700383064443688,e=e*i+6.37396220353165,e=e*i+33.912866078383,e=e*i+112.079291497871,e=e*i+221.213596169931,e=e*i+220.206867912376,o=t*e,e=.0883883476483184*i+1.75566716318264,e=e*i+16.064177579207,e=e*i+86.7807322029461,e=e*i+296.564248779674,e=e*i+637.333633378831,e=e*i+793.826512519948,e=e*i+440.413735824752,o/=e):(e=i+.65,e=i+4/e,e=i+3/e,e=i+2/e,e=i+1/e,o=t/e/2.506628274631)}return r>0?1-o:o}function Ba(t,e,n){return t<0||t>1?NaN:(e||0)+(null==n?1:n)*Ea*function(t){let e,n=-Math.log((1-t)*(1+t));n<6.25?(n-=3.125,e=-364441206401782e-35,e=e*n-16850591381820166e-35,e=128584807152564e-32+e*n,e=11157877678025181e-33+e*n,e=e*n-1333171662854621e-31,e=20972767875968562e-33+e*n,e=6637638134358324e-30+e*n,e=e*n-4054566272975207e-29,e=e*n-8151934197605472e-29,e=26335093153082323e-28+e*n,e=e*n-12975133253453532e-27,e=e*n-5415412054294628e-26,e=1.0512122733215323e-9+e*n,e=e*n-4.112633980346984e-9,e=e*n-2.9070369957882005e-8,e=4.2347877827932404e-7+e*n,e=e*n-13654692000834679e-22,e=e*n-13882523362786469e-21,e=.00018673420803405714+e*n,e=e*n-.000740702534166267,e=e*n-.006033670871430149,e=.24015818242558962+e*n,e=1.6536545626831027+e*n):n<16?(n=Math.sqrt(n)-3.25,e=2.2137376921775787e-9,e=9.075656193888539e-8+e*n,e=e*n-2.7517406297064545e-7,e=1.8239629214389228e-8+e*n,e=15027403968909828e-22+e*n,e=e*n-4013867526981546e-21,e=29234449089955446e-22+e*n,e=12475304481671779e-21+e*n,e=e*n-47318229009055734e-21,e=6828485145957318e-20+e*n,e=24031110387097894e-21+e*n,e=e*n-.0003550375203628475,e=.0009532893797373805+e*n,e=e*n-.0016882755560235047,e=.002491442096107851+e*n,e=e*n-.003751208507569241,e=.005370914553590064+e*n,e=1.0052589676941592+e*n,e=3.0838856104922208+e*n):Number.isFinite(n)?(n=Math.sqrt(n)-5,e=-27109920616438573e-27,e=e*n-2.555641816996525e-10,e=1.5076572693500548e-9+e*n,e=e*n-3.789465440126737e-9,e=7.61570120807834e-9+e*n,e=e*n-1.496002662714924e-8,e=2.914795345090108e-8+e*n,e=e*n-6.771199775845234e-8,e=2.2900482228026655e-7+e*n,e=e*n-9.9298272942317e-7,e=4526062597223154e-21+e*n,e=e*n-1968177810553167e-20,e=7599527703001776e-20+e*n,e=e*n-.00021503011930044477,e=e*n-.00013871931833623122,e=1.0103004648645344+e*n,e=4.849906401408584+e*n):e=1/0;return e*t}(2*t-1)}function Ta(t,e){let n,r;const i={mean(t){return arguments.length?(n=t||0,i):n},stdev(t){return arguments.length?(r=null==t?1:t,i):r},sample:()=>Ca(n,r),pdf:t=>Fa(t,n,r),cdf:t=>Sa(t,n,r),icdf:t=>Ba(t,n,r)};return i.mean(t).stdev(e)}function za(e,n){const r=Ta();let i=0;const o={data(t){return arguments.length?(e=t,i=t?t.length:0,o.bandwidth(n)):e},bandwidth(t){return arguments.length?(!(n=t)&&e&&(n=ba(e)),o):n},sample:()=>e[~~(t.random()*i)]+n*r.sample(),pdf(t){let o=0,a=0;for(;aNa(n,r),pdf:t=>Oa(t,n,r),cdf:t=>Ra(t,n,r),icdf:t=>La(t,n,r)};return i.mean(t).stdev(e)}function qa(e,n){let r,i=0;const o={weights(t){return arguments.length?(r=function(t){const e=[];let n,r=0;for(n=0;n=e&&t<=n?1/(n-e):0}function Ia(t,e,n){return null==n&&(n=null==e?1:e,e=0),tn?1:(t-e)/(n-e)}function $a(t,e,n){return null==n&&(n=null==e?1:e,e=0),t>=0&&t<=1?e+t*(n-e):NaN}function Wa(t,e){let n,r;const i={min(t){return arguments.length?(n=t||0,i):n},max(t){return arguments.length?(r=null==t?1:t,i):r},sample:()=>Pa(n,r),pdf:t=>ja(t,n,r),cdf:t=>Ia(t,n,r),icdf:t=>$a(t,n,r)};return null==e&&(e=null==t?1:t,t=0),i.min(t).max(e)}function Ha(t,e,n,r){const i=r-t*t,o=Math.abs(i)<1e-24?0:(n-t*e)/i;return[e-o*t,o]}function Ya(t,e,n,r){t=t.filter((t=>{let r=e(t),i=n(t);return null!=r&&(r=+r)>=r&&null!=i&&(i=+i)>=i})),r&&t.sort(((t,n)=>e(t)-e(n)));const i=t.length,o=new Float64Array(i),a=new Float64Array(i);let u,s,l,c=0,f=0,h=0;for(l of t)o[c]=u=+e(l),a[c]=s=+n(l),++c,f+=(u-f)/c,h+=(s-h)/c;for(c=0;c=i&&null!=o&&(o=+o)>=o&&r(i,o,++a)}function Ga(t,e,n,r,i){let o=0,a=0;return Va(t,e,n,((t,e)=>{const n=e-i(t),u=e-r;o+=n*n,a+=u*u})),1-o/a}function Xa(t,e,n){let r=0,i=0,o=0,a=0,u=0;Va(t,e,n,((t,e)=>{++u,r+=(t-r)/u,i+=(e-i)/u,o+=(t*e-o)/u,a+=(t*t-a)/u}));const s=Ha(r,i,o,a),l=t=>s[0]+s[1]*t;return{coef:s,predict:l,rSquared:Ga(t,e,n,i,l)}}function Ja(t,e,n){let r=0,i=0,o=0,a=0,u=0;Va(t,e,n,((t,e)=>{++u,t=Math.log(t),r+=(t-r)/u,i+=(e-i)/u,o+=(t*e-o)/u,a+=(t*t-a)/u}));const s=Ha(r,i,o,a),l=t=>s[0]+s[1]*Math.log(t);return{coef:s,predict:l,rSquared:Ga(t,e,n,i,l)}}function Za(t,e,n){const[r,i,o,a]=Ya(t,e,n);let u,s,l,c=0,f=0,h=0,d=0,p=0;Va(t,e,n,((t,e)=>{u=r[p++],s=Math.log(e),l=u*e,c+=(e*s-c)/p,f+=(l-f)/p,h+=(l*s-h)/p,d+=(u*l-d)/p}));const[g,m]=Ha(f/a,c/a,h/a,d/a),y=t=>Math.exp(g+m*(t-o));return{coef:[Math.exp(g-m*o),m],predict:y,rSquared:Ga(t,e,n,a,y)}}function Qa(t,e,n){let r=0,i=0,o=0,a=0,u=0,s=0;Va(t,e,n,((t,e)=>{const n=Math.log(t),l=Math.log(e);++s,r+=(n-r)/s,i+=(l-i)/s,o+=(n*l-o)/s,a+=(n*n-a)/s,u+=(e-u)/s}));const l=Ha(r,i,o,a),c=t=>l[0]*Math.pow(t,l[1]);return l[0]=Math.exp(l[0]),{coef:l,predict:c,rSquared:Ga(t,e,n,u,c)}}function Ka(t,e,n){const[r,i,o,a]=Ya(t,e,n),u=r.length;let s,l,c,f,h=0,d=0,p=0,g=0,m=0;for(s=0;s_*(t-=o)*t+x*t+b+a;return{coef:[b-x*o+_*o*o+a,x-2*_*o,_],predict:w,rSquared:Ga(t,e,n,a,w)}}function tu(t,e,n,r){if(1===r)return Xa(t,e,n);if(2===r)return Ka(t,e,n);const[i,o,a,u]=Ya(t,e,n),s=i.length,l=[],c=[],f=r+1;let h,d,p,g,m;for(h=0;hMath.abs(t[r][a])&&(a=i);for(o=r;o=r;o--)t[o][i]-=t[o][r]*t[r][i]/t[r][r]}for(i=e-1;i>=0;--i){for(u=0,o=i+1;o{t-=a;let e=u+y[0]+y[1]*t+y[2]*t*t;for(h=3;h=0;--o)for(u=e[o],s=1,i[o]+=u,a=1;a<=o;++a)s*=(o+1-a)/a,i[o-a]+=u*Math.pow(n,a)*s;return i[0]+=r,i}function nu(t,e,n,r){const[i,o,a,u]=Ya(t,e,n,!0),s=i.length,l=Math.max(2,~~(r*s)),c=new Float64Array(s),f=new Float64Array(s),h=new Float64Array(s).fill(1);for(let t=-1;++t<=2;){const e=[0,l-1];for(let t=0;ti[a]-n?r:a;let s=0,l=0,d=0,p=0,g=0;const m=1/Math.abs(i[u]-n||1);for(let t=r;t<=a;++t){const e=i[t],r=o[t],a=ru(Math.abs(n-e)*m)*h[t],u=e*a;s+=a,l+=u,d+=r*a,p+=r*u,g+=e*u}const[y,v]=Ha(l/s,d/s,p/s,g/s);c[t]=y+v*n,f[t]=Math.abs(o[t]-c[t]),iu(i,t+1,e)}if(2===t)break;const n=Ne(f);if(Math.abs(n)<1e-12)break;for(let t,e,r=0;r=1?1e-12:(e=1-t*t)*e}return function(t,e,n,r){const i=t.length,o=[];let a,u=0,s=0,l=[];for(;u=t.length))for(;e>i&&t[o]-r<=r-t[i];)n[0]=++i,n[1]=o,++o}const ou=.1*Math.PI/180;function au(t,e,n,r){n=n||25,r=Math.max(n,r||200);const i=e=>[e,t(e)],o=e[0],a=e[1],u=a-o,s=u/r,l=[i(o)],c=[];if(n===r){for(let t=1;t0;)c.push(i(o+t/n*u));let f=l[0],h=c[c.length-1];for(;h;){const t=i((f[0]+h[0])/2);t[0]-f[0]>=s&&uu(f,t,h)>ou?c.push(t):(f=h,l.push(h),c.pop()),h=c[c.length-1]}return l}function uu(t,e,n){const r=Math.atan2(n[1]-t[1],n[0]-t[0]),i=Math.atan2(e[1]-t[1],e[0]-t[0]);return Math.abs(r-i)}function su(t){return t&&t.length?1===t.length?t[0]:(e=t,t=>{const n=e.length;let r=1,i=String(e[0](t));for(;r{},fu={init:cu,add:cu,rem:cu,idx:0},hu={values:{init:t=>t.cell.store=!0,value:t=>t.cell.data.values(),idx:-1},count:{value:t=>t.cell.num},__count__:{value:t=>t.missing+t.valid},missing:{value:t=>t.missing},valid:{value:t=>t.valid},sum:{init:t=>t.sum=0,value:t=>t.sum,add:(t,e)=>t.sum+=+e,rem:(t,e)=>t.sum-=e},product:{init:t=>t.product=1,value:t=>t.valid?t.product:void 0,add:(t,e)=>t.product*=e,rem:(t,e)=>t.product/=e},mean:{init:t=>t.mean=0,value:t=>t.valid?t.mean:void 0,add:(t,e)=>(t.mean_d=e-t.mean,t.mean+=t.mean_d/t.valid),rem:(t,e)=>(t.mean_d=e-t.mean,t.mean-=t.valid?t.mean_d/t.valid:t.mean)},average:{value:t=>t.valid?t.mean:void 0,req:["mean"],idx:1},variance:{init:t=>t.dev=0,value:t=>t.valid>1?t.dev/(t.valid-1):void 0,add:(t,e)=>t.dev+=t.mean_d*(e-t.mean),rem:(t,e)=>t.dev-=t.mean_d*(e-t.mean),req:["mean"],idx:1},variancep:{value:t=>t.valid>1?t.dev/t.valid:void 0,req:["variance"],idx:2},stdev:{value:t=>t.valid>1?Math.sqrt(t.dev/(t.valid-1)):void 0,req:["variance"],idx:2},stdevp:{value:t=>t.valid>1?Math.sqrt(t.dev/t.valid):void 0,req:["variance"],idx:2},stderr:{value:t=>t.valid>1?Math.sqrt(t.dev/(t.valid*(t.valid-1))):void 0,req:["variance"],idx:2},distinct:{value:t=>t.cell.data.distinct(t.get),req:["values"],idx:3},ci0:{value:t=>t.cell.data.ci0(t.get),req:["values"],idx:3},ci1:{value:t=>t.cell.data.ci1(t.get),req:["values"],idx:3},median:{value:t=>t.cell.data.q2(t.get),req:["values"],idx:3},q1:{value:t=>t.cell.data.q1(t.get),req:["values"],idx:3},q3:{value:t=>t.cell.data.q3(t.get),req:["values"],idx:3},min:{init:t=>t.min=void 0,value:t=>t.min=Number.isNaN(t.min)?t.cell.data.min(t.get):t.min,add:(t,e)=>{(e{e<=t.min&&(t.min=NaN)},req:["values"],idx:4},max:{init:t=>t.max=void 0,value:t=>t.max=Number.isNaN(t.max)?t.cell.data.max(t.get):t.max,add:(t,e)=>{(e>t.max||void 0===t.max)&&(t.max=e)},rem:(t,e)=>{e>=t.max&&(t.max=NaN)},req:["values"],idx:4},argmin:{init:t=>t.argmin=void 0,value:t=>t.argmin||t.cell.data.argmin(t.get),add:(t,e,n)=>{e{e<=t.min&&(t.argmin=void 0)},req:["min","values"],idx:3},argmax:{init:t=>t.argmax=void 0,value:t=>t.argmax||t.cell.data.argmax(t.get),add:(t,e,n)=>{e>t.max&&(t.argmax=n)},rem:(t,e)=>{e>=t.max&&(t.argmax=void 0)},req:["max","values"],idx:3}},du=Object.keys(hu);function pu(t,e){return hu[t](e)}function gu(t,e){return t.idx-e.idx}function mu(){this.valid=0,this.missing=0,this._ops.forEach((t=>t.init(this)))}function yu(t,e){null!=t&&""!==t?t==t&&(++this.valid,this._ops.forEach((n=>n.add(this,t,e)))):++this.missing}function vu(t,e){null!=t&&""!==t?t==t&&(--this.valid,this._ops.forEach((n=>n.rem(this,t,e)))):--this.missing}function _u(t){return this._out.forEach((e=>t[e.out]=e.value(this))),t}function xu(t,e){const n=e||f,r=function(t){const e={};t.forEach((t=>e[t.name]=t));const n=t=>{t.req&&t.req.forEach((t=>{e[t]||n(e[t]=hu[t]())}))};return t.forEach(n),Object.values(e).sort(gu)}(t),i=t.slice().sort(gu);function o(t){this._ops=r,this._out=i,this.cell=t,this.init()}return o.prototype.init=mu,o.prototype.add=yu,o.prototype.rem=vu,o.prototype.set=_u,o.prototype.get=n,o.fields=t.map((t=>t.out)),o}function bu(t){this._key=t?l(t):Oo,this.reset()}du.forEach((t=>{hu[t]=function(t,e){return n=>K({name:t,out:n||t},fu,e)}(t,hu[t])}));const wu=bu.prototype;function ku(t){pa.call(this,null,t),this._adds=[],this._mods=[],this._alen=0,this._mlen=0,this._drop=!0,this._cross=!1,this._dims=[],this._dnames=[],this._measures=[],this._countOnly=!1,this._counts=null,this._prev=null,this._inputs=null,this._outputs=null}wu.reset=function(){this._add=[],this._rem=[],this._ext=null,this._get=null,this._q=null},wu.add=function(t){this._add.push(t)},wu.rem=function(t){this._rem.push(t)},wu.values=function(){if(this._get=null,0===this._rem.length)return this._add;const t=this._add,e=this._rem,n=this._key,r=t.length,i=e.length,o=Array(r-i),a={};let u,s,l;for(u=0;u=0;)r=t(e[i])+"",rt(n,r)||(n[r]=1,++o);return o},wu.extent=function(t){if(this._get!==t||!this._ext){const e=this.values(),n=et(e,t);this._ext=[e[n[0]],e[n[1]]],this._get=t}return this._ext},wu.argmin=function(t){return this.extent(t)[0]||{}},wu.argmax=function(t){return this.extent(t)[1]||{}},wu.min=function(t){const e=this.extent(t)[0];return null!=e?t(e):void 0},wu.max=function(t){const e=this.extent(t)[1];return null!=e?t(e):void 0},wu.quartile=function(t){return this._get===t&&this._q||(this._q=xa(this.values(),t),this._get=t),this._q},wu.q1=function(t){return this.quartile(t)[0]},wu.q2=function(t){return this.quartile(t)[1]},wu.q3=function(t){return this.quartile(t)[2]},wu.ci=function(t){return this._get===t&&this._ci||(this._ci=ka(this.values(),1e3,.05,t),this._get=t),this._ci},wu.ci0=function(t){return this.ci(t)[0]},wu.ci1=function(t){return this.ci(t)[1]},ku.Definition={type:"Aggregate",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"ops",type:"enum",array:!0,values:du},{name:"fields",type:"field",null:!0,array:!0},{name:"as",type:"string",null:!0,array:!0},{name:"drop",type:"boolean",default:!0},{name:"cross",type:"boolean",default:!1},{name:"key",type:"field"}]},ut(ku,pa,{transform(t,e){const n=this,r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=t.modified();return n.stamp=r.stamp,n.value&&(i||e.modified(n._inputs,!0))?(n._prev=n.value,n.value=i?n.init(t):{},e.visit(e.SOURCE,(t=>n.add(t)))):(n.value=n.value||n.init(t),e.visit(e.REM,(t=>n.rem(t))),e.visit(e.ADD,(t=>n.add(t)))),r.modifies(n._outputs),n._drop=!1!==t.drop,t.cross&&n._dims.length>1&&(n._drop=!1,n.cross()),e.clean()&&n._drop&&r.clean(!0).runAfter((()=>this.clean())),n.changes(r)},cross(){const t=this,e=t.value,n=t._dnames,r=n.map((()=>({}))),i=n.length;function o(t){let e,o,a,u;for(e in t)for(a=t[e].tuple,o=0;o{const e=n(t);return a(t),i.push(e),e})),this.cellkey=t.key?t.key:su(this._dims),this._countOnly=!0,this._counts=[],this._measures=[];const s=t.fields||[null],l=t.ops||["count"],c=t.as||[],f=s.length,h={};let d,p,g,m,y,v;for(f!==l.length&&u("Unmatched number of fields and aggregate ops."),v=0;vxu(t,t.field))),{}},cellkey:su(),cell(t,e){let n=this.value[t];return n?0===n.num&&this._drop&&n.stampo.push(t),remove:t=>a[r(t)]=++u,size:()=>i.length,data:(t,e)=>(u&&(i=i.filter((t=>!a[r(t)])),a={},u=0),e&&t&&i.sort(t),o.length&&(i=t?vt(t,i,o.sort(t)):i.concat(o),o=[]),i)}}function Eu(t){pa.call(this,[],t)}function Du(t){Go.call(this,null,Cu,t)}function Cu(t){return this.value&&!t.modified()?this.value:Y(t.fields,t.orders)}function Fu(t){pa.call(this,null,t)}function Su(t){pa.call(this,null,t)}Mu.Definition={type:"Bin",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"interval",type:"boolean",default:!0},{name:"anchor",type:"number"},{name:"maxbins",type:"number",default:20},{name:"base",type:"number",default:10},{name:"divide",type:"number",array:!0,default:[5,2]},{name:"extent",type:"number",array:!0,length:2,required:!0},{name:"span",type:"number"},{name:"step",type:"number"},{name:"steps",type:"number",array:!0},{name:"minstep",type:"number",default:0},{name:"nice",type:"boolean",default:!0},{name:"name",type:"string"},{name:"as",type:"string",array:!0,length:2,default:["bin0","bin1"]}]},ut(Mu,pa,{transform(t,e){const n=!1!==t.interval,i=this._bins(t),o=i.start,a=i.step,u=t.as||["bin0","bin1"],s=u[0],l=u[1];let c;return c=t.modified()?(e=e.reflow(!0)).SOURCE:e.modified(r(t.field))?e.ADD_MOD:e.ADD,e.visit(c,n?t=>{const e=i(t);t[s]=e,t[l]=null==e?null:o+a*(1+(e-o)/a)}:t=>t[s]=i(t)),e.modifies(n?u:s)},_bins(t){if(this.value&&!t.modified())return this.value;const i=t.field,o=wa(t),a=o.step;let u,s,l=o.start,c=l+Math.ceil((o.stop-l)/a)*a;null!=(u=t.anchor)&&(s=u-(l+a*Math.floor((u-l)/a)),l+=s,c+=s);const f=function(t){let e=A(i(t));return null==e?null:ec?1/0:(e=Math.max(l,Math.min(e,c-a)),l+a*Math.floor(1e-14+(e-l)/a))};return f.start=l,f.stop=o.stop,f.step=a,this.value=e(f,r(i),t.name||"bin_"+n(i))}}),Eu.Definition={type:"Collect",metadata:{source:!0},params:[{name:"sort",type:"compare"}]},ut(Eu,pa,{transform(t,e){const n=e.fork(e.ALL),r=Au(Oo,this.value,n.materialize(n.ADD).add),i=t.sort,o=e.changed()||i&&(t.modified("sort")||e.modified(i.fields));return n.visit(n.REM,r.remove),this.modified(o),this.value=n.source=r.data(jo(i),o),e.source&&e.source.root&&(this.value.root=e.source.root),n}}),ut(Du,Go),Fu.Definition={type:"CountPattern",metadata:{generates:!0,changes:!0},params:[{name:"field",type:"field",required:!0},{name:"case",type:"enum",values:["upper","lower","mixed"],default:"mixed"},{name:"pattern",type:"string",default:'[\\w"]+'},{name:"stopwords",type:"string",default:""},{name:"as",type:"string",array:!0,length:2,default:["text","count"]}]},ut(Fu,pa,{transform(t,e){const n=e=>n=>{for(var r,i=function(t,e,n){switch(e){case"upper":t=t.toUpperCase();break;case"lower":t=t.toLowerCase()}return t.match(n)}(u(n),t.case,o)||[],s=0,l=i.length;si[t]=1+(i[t]||0))),c=n((t=>i[t]-=1));return r?e.visit(e.SOURCE,l):(e.visit(e.ADD,l),e.visit(e.REM,c)),this._finish(e,s)},_parameterCheck(t,e){let n=!1;return!t.modified("stopwords")&&this._stop||(this._stop=new RegExp("^"+(t.stopwords||"")+"$","i"),n=!0),!t.modified("pattern")&&this._match||(this._match=new RegExp(t.pattern||"[\\w']+","g"),n=!0),(t.modified("field")||e.modified(t.field.fields))&&(n=!0),n&&(this._counts={}),n},_finish(t,e){const n=this._counts,r=this._tuples||(this._tuples={}),i=e[0],o=e[1],a=t.fork(t.NO_SOURCE|t.NO_FIELDS);let u,s,l;for(u in n)s=r[u],l=n[u]||0,!s&&l?(r[u]=s=Lo({}),s[i]=u,s[o]=l,a.add.push(s)):0===l?(s&&a.rem.push(s),n[u]=null,r[u]=null):s[o]!==l&&(s[o]=l,a.mod.push(s));return a.modifies(e)}}),Su.Definition={type:"Cross",metadata:{generates:!0},params:[{name:"filter",type:"expr"},{name:"as",type:"string",array:!0,length:2,default:["a","b"]}]},ut(Su,pa,{transform(t,e){const n=e.fork(e.NO_SOURCE),r=t.as||["a","b"],i=r[0],o=r[1],a=!this.value||e.changed(e.ADD_REM)||t.modified("as")||t.modified("filter");let u=this.value;return a?(u&&(n.rem=u),u=e.materialize(e.SOURCE).source,n.add=this.value=function(t,e,n,r){for(var i,o,a=[],u={},s=t.length,l=0;lzu(t,e)))):typeof r[n]===Tu&&r[n](t[n]);return r}function Nu(t){pa.call(this,null,t)}const Ou=[{key:{function:"normal"},params:[{name:"mean",type:"number",default:0},{name:"stdev",type:"number",default:1}]},{key:{function:"lognormal"},params:[{name:"mean",type:"number",default:0},{name:"stdev",type:"number",default:1}]},{key:{function:"uniform"},params:[{name:"min",type:"number",default:0},{name:"max",type:"number",default:1}]},{key:{function:"kde"},params:[{name:"field",type:"field",required:!0},{name:"from",type:"data"},{name:"bandwidth",type:"number",default:0}]}],Ru={key:{function:"mixture"},params:[{name:"distributions",type:"param",array:!0,params:Ou},{name:"weights",type:"number",array:!0}]};function Lu(t,e){return t?t.map(((t,r)=>e[r]||n(t))):null}function Uu(t,e,n){const r=[],i=t=>t(s);let o,a,u,s,l,c;if(null==e)r.push(t.map(n));else for(o={},a=0,u=t.length;at.materialize(t.SOURCE).source}(e)),i=t.steps||t.minsteps||25,o=t.steps||t.maxsteps||200;let a=t.method||"pdf";"pdf"!==a&&"cdf"!==a&&u("Invalid density method: "+a),t.extent||r.data||u("Missing density extent parameter."),a=r[a];const s=t.as||["value","density"],l=au(a,t.extent||tt(r.data()),i,o).map((t=>{const e={};return e[s[0]]=t[0],e[s[1]]=t[1],Lo(e)}));this.value&&(n.rem=this.value),this.value=n.add=n.source=l}return n}});function qu(t){pa.call(this,null,t)}qu.Definition={type:"DotBin",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"groupby",type:"field",array:!0},{name:"step",type:"number"},{name:"smooth",type:"boolean",default:!1},{name:"as",type:"string",default:"bin"}]};function Pu(t){Go.call(this,null,ju,t),this.modified(!0)}function ju(t){const i=t.expr;return this.value&&!t.modified("expr")?this.value:e((e=>i(e,t)),r(i),n(i))}function Iu(t){pa.call(this,[void 0,void 0],t)}function $u(t,e){Go.call(this,t),this.parent=e,this.count=0}function Wu(t){pa.call(this,{},t),this._keys=ot();const e=this._targets=[];e.active=0,e.forEach=t=>{for(let n=0,r=e.active;nl(t))):l(t.name,t.as)}function Vu(t){pa.call(this,ot(),t)}function Gu(t){pa.call(this,[],t)}function Xu(t){pa.call(this,[],t)}function Ju(t){pa.call(this,null,t)}function Zu(t){pa.call(this,[],t)}ut(qu,pa,{transform(t,e){if(this.value&&!t.modified()&&!e.changed())return e;const n=e.materialize(e.SOURCE).source,r=Uu(e.source,t.groupby,f),i=t.smooth||!1,o=t.field,a=t.step||((t,e)=>bt(tt(t,e))/30)(n,o),u=jo(((t,e)=>o(t)-o(e))),s=t.as||"bin",l=r.length;let c,h=1/0,d=-1/0,p=0;for(;pd&&(d=e),t[++c][s]=e}return this.value={start:h,stop:d,step:a},e.reflow(!0).modifies(s)}}),ut(Pu,Go),Iu.Definition={type:"Extent",metadata:{},params:[{name:"field",type:"field",required:!0}]},ut(Iu,pa,{transform(t,e){const r=this.value,i=t.field,o=e.changed()||e.modified(i.fields)||t.modified("field");let a=r[0],u=r[1];if((o||null==a)&&(a=1/0,u=-1/0),e.visit(o?e.SOURCE:e.ADD,(t=>{const e=A(i(t));null!=e&&(eu&&(u=e))})),!Number.isFinite(a)||!Number.isFinite(u)){let t=n(i);t&&(t=' for field "'.concat(t,'"')),e.dataflow.warn("Infinite extent".concat(t,": [").concat(a,", ").concat(u,"]")),a=u=void 0}this.value=[a,u]}}),ut($u,Go,{connect(t){return this.detachSubflow=t.detachSubflow,this.targets().add(t),t.source=this},add(t){this.count+=1,this.value.add.push(t)},rem(t){this.count-=1,this.value.rem.push(t)},mod(t){this.value.mod.push(t)},init(t){this.value.init(t,t.NO_SOURCE)},evaluate(){return this.value}}),ut(Wu,pa,{activate(t){this._targets[this._targets.active++]=t},subflow(t,e,n,r){const i=this.value;let o,a,u=rt(i,t)&&i[t];return u?u.value.stampthis.subflow(t,i,e);return this._group=t.group||{},this.initTargets(),e.visit(e.REM,(t=>{const e=Oo(t),n=o.get(e);void 0!==n&&(o.delete(e),u(n).rem(t))})),e.visit(e.ADD,(t=>{const e=r(t);o.set(Oo(t),e),u(e).add(t)})),a||e.modified(r.fields)?e.visit(e.MOD,(t=>{const e=Oo(t),n=o.get(e),i=r(t);n===i?u(i).mod(t):(o.set(e,i),u(n).rem(t),u(i).add(t))})):e.changed(e.MOD)&&e.visit(e.MOD,(t=>{u(o.get(Oo(t))).mod(t)})),a&&e.visit(e.REFLOW,(t=>{const e=Oo(t),n=o.get(e),i=r(t);n!==i&&(o.set(e,i),u(n).rem(t),u(i).add(t))})),e.clean()?n.runAfter((()=>{this.clean(),o.clean()})):o.empty>n.cleanThreshold&&n.runAfter(o.clean),e}}),ut(Hu,Go),Vu.Definition={type:"Filter",metadata:{changes:!0},params:[{name:"expr",type:"expr",required:!0}]},ut(Vu,pa,{transform(t,e){const n=e.dataflow,r=this.value,i=e.fork(),o=i.add,a=i.rem,u=i.mod,s=t.expr;let l=!0;function c(e){const n=Oo(e),i=s(e,t),c=r.get(n);i&&c?(r.delete(n),o.push(e)):i||c?l&&i&&!c&&u.push(e):(r.set(n,1),a.push(e))}return e.visit(e.REM,(t=>{const e=Oo(t);r.has(e)?r.delete(e):a.push(t)})),e.visit(e.ADD,(e=>{s(e,t)?o.push(e):r.set(Oo(e),1)})),e.visit(e.MOD,c),t.modified()&&(l=!1,e.visit(e.REFLOW,c)),r.empty>n.cleanThreshold&&n.runAfter(r.clean),i}}),Gu.Definition={type:"Flatten",metadata:{generates:!0},params:[{name:"fields",type:"field",array:!0,required:!0},{name:"index",type:"string"},{name:"as",type:"string",array:!0}]},ut(Gu,pa,{transform(t,e){const n=e.fork(e.NO_SOURCE),r=t.fields,i=Lu(r,t.as||[]),o=t.index||null,a=i.length;return n.rem=this.value,e.visit(e.SOURCE,(t=>{const e=r.map((e=>e(t))),u=e.reduce(((t,e)=>Math.max(t,e.length)),0);let s,l,c,f=0;for(;f{for(let e,n=0;ne[r]=n(e,t)))}}),ut(Zu,pa,{transform(t,e){const n=e.fork(e.ALL),r=t.generator;let i,o,a,u=this.value,s=t.size-u.length;if(s>0){for(i=[];--s>=0;)i.push(a=Lo(r(t))),u.push(a);n.add=n.add.length?n.materialize(n.ADD).add.concat(i):i}else o=u.slice(0,-s),n.rem=n.rem.length?n.materialize(n.REM).rem.concat(o):o,u=u.slice(-s);return n.source=this.value=u,n}});const Qu={value:"value",median:Ne,mean:function(t,e){let n=0,r=0;if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(++n,r+=e);else{let i=-1;for(let o of t)null!=(o=e(o,++i,t))&&(o=+o)>=o&&(++n,r+=o)}if(n)return r/n},min:Fe,max:Ce},Ku=[];function ts(t){pa.call(this,[],t)}function es(t){ku.call(this,t)}function ns(t){pa.call(this,null,t)}function rs(t){Go.call(this,null,is,t)}function is(t){return this.value&&!t.modified()?this.value:gt(t.fields,t.flat)}function os(t){pa.call(this,[],t),this._pending=null}function as(t,e,n){n.forEach(Lo);const r=e.fork(e.NO_FIELDS&e.NO_SOURCE);return r.rem=t.value,t.value=r.source=r.add=n,t._pending=null,r.rem.length&&r.clean(!0),r}function us(t){pa.call(this,{},t)}function ss(t){Go.call(this,null,ls,t)}function ls(t){if(this.value&&!t.modified())return this.value;const e=t.extents,n=e.length;let r,i,o=1/0,a=-1/0;for(r=0;ra&&(a=i[1]);return[o,a]}function cs(t){Go.call(this,null,fs,t)}function fs(t){return this.value&&!t.modified()?this.value:t.values.reduce(((t,e)=>t.concat(e)),[])}function hs(t){pa.call(this,null,t)}function ds(t){ku.call(this,t)}function ps(t){Wu.call(this,t)}function gs(t){pa.call(this,null,t)}function ms(t){pa.call(this,null,t)}function ys(t){pa.call(this,null,t)}ts.Definition={type:"Impute",metadata:{changes:!0},params:[{name:"field",type:"field",required:!0},{name:"key",type:"field",required:!0},{name:"keyvals",array:!0},{name:"groupby",type:"field",array:!0},{name:"method",type:"enum",default:"value",values:["value","mean","median","max","min"]},{name:"value",default:0}]},ut(ts,pa,{transform(t,e){var r,i,o,a,s,l,c,f,h,d,p=e.fork(e.ALL),g=function(t){var e,n=t.method||Qu.value;if(null!=Qu[n])return n===Qu.value?(e=void 0!==t.value?t.value:0,()=>e):Qu[n];u("Unrecognized imputation method: "+n)}(t),m=function(t){const e=t.field;return t=>t?e(t):NaN}(t),y=n(t.field),v=n(t.key),_=(t.groupby||[]).map(n),x=function(t,e,n,r){var i,o,a,u,s,l,c,f,h=t=>t(f),d=[],p=r?r.slice():[],g={},m={};for(p.forEach(((t,e)=>g[t]=e+1)),u=0,c=t.length;un.add(t)))):(i=n.value=n.value||this.init(t),e.visit(e.REM,(t=>n.rem(t))),e.visit(e.ADD,(t=>n.add(t)))),n.changes(),e.visit(e.SOURCE,(t=>{K(t,i[n.cellkey(t)].tuple)})),e.reflow(r).modifies(this._outputs)},changes(){const t=this._adds,e=this._mods;let n,r;for(n=0,r=this._alen;n{const n=za(e,s)[l],r=t.counts?e.length:1;au(n,h||tt(e),d,p).forEach((t=>{const n={};for(let t=0;t(this._pending=$(t.data),t=>t.touch(this))))}}return n.request(t.url,t.format).then((t=>as(this,e,$(t.data))))}}),us.Definition={type:"Lookup",metadata:{modifies:!0},params:[{name:"index",type:"index",params:[{name:"from",type:"data",required:!0},{name:"key",type:"field",required:!0}]},{name:"values",type:"field",array:!0},{name:"fields",type:"field",array:!0,required:!0},{name:"as",type:"string",array:!0},{name:"default",default:null}]},ut(us,pa,{transform(t,e){const r=t.fields,i=t.index,o=t.values,a=null==t.default?null:t.default,s=t.modified(),l=r.length;let c,f,h,d=s?e.SOURCE:e.ADD,p=e,g=t.as;return o?(f=o.length,l>1&&!g&&u('Multi-field lookup requires explicit "as" parameter.'),g&&g.length!==l*f&&u('The "as" parameter has too few output field names.'),g=g||o.map(n),c=function(t){for(var e,n,u=0,s=0;ue.modified(t.fields))),d|=h?e.MOD:0),e.visit(d,c),p.modifies(g)}}),ut(ss,Go),ut(cs,Go),ut(hs,pa,{transform(t,e){return this.modified(t.modified()),this.value=t,e.fork(e.NO_SOURCE|e.NO_FIELDS)}}),ds.Definition={type:"Pivot",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"field",type:"field",required:!0},{name:"value",type:"field",required:!0},{name:"op",type:"enum",values:du,default:"sum"},{name:"limit",type:"number",default:0},{name:"key",type:"field"}]},ut(ds,ku,{_transform:ku.prototype.transform,transform(t,n){return this._transform(function(t,n){const i=t.field,o=t.value,a=("count"===t.op?"__count__":t.op)||"sum",u=r(i).concat(r(o)),s=function(t,e,n){const r={},i=[];return n.visit(n.SOURCE,(e=>{const n=t(e);r[n]||(r[n]=1,i.push(n))})),i.sort(V),e?i.slice(0,e):i}(i,t.limit||0,n);n.changed()&&t.set("__pivot__",null,null,!0);return{key:t.key,groupby:t.groupby,ops:s.map((()=>a)),fields:s.map((t=>function(t,n,r,i){return e((e=>n(e)===t?r(e):NaN),i,t+"")}(t,i,o,u))),as:s.map((t=>t+"")),modified:t.modified.bind(t)}}(t,n),n)}}),ut(ps,Wu,{transform(t,e){const n=t.subflow,i=t.field,o=t=>this.subflow(Oo(t),n,e,t);return(t.modified("field")||i&&e.modified(r(i)))&&u("PreFacet does not support field modification."),this.initTargets(),i?(e.visit(e.MOD,(t=>{const e=o(t);i(t).forEach((t=>e.mod(t)))})),e.visit(e.ADD,(t=>{const e=o(t);i(t).forEach((t=>e.add(Lo(t))))})),e.visit(e.REM,(t=>{const e=o(t);i(t).forEach((t=>e.rem(t)))}))):(e.visit(e.MOD,(t=>o(t).mod(t))),e.visit(e.ADD,(t=>o(t).add(t))),e.visit(e.REM,(t=>o(t).rem(t)))),e.clean()&&e.runAfter((()=>this.clean())),e}}),gs.Definition={type:"Project",metadata:{generates:!0,changes:!0},params:[{name:"fields",type:"field",array:!0},{name:"as",type:"string",null:!0,array:!0}]},ut(gs,pa,{transform(t,e){const n=e.fork(e.NO_SOURCE),r=t.fields,i=Lu(t.fields,t.as||[]),o=r?(t,e)=>function(t,e,n,r){for(let i=0,o=n.length;i{const e=Oo(t);n.rem.push(a[e]),a[e]=null})),e.visit(e.ADD,(t=>{const e=o(t,Lo({}));a[Oo(t)]=e,n.add.push(e)})),e.visit(e.MOD,(t=>{n.mod.push(o(t,a[Oo(t)]))})),n}}),ut(ms,pa,{transform(t,e){return this.value=t.value,t.modified("value")?e.fork(e.NO_SOURCE|e.NO_FIELDS):e.StopPropagation}}),ys.Definition={type:"Quantile",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"field",type:"field",required:!0},{name:"probs",type:"number",array:!0},{name:"step",type:"number",default:.01},{name:"as",type:"string",array:!0,default:["prob","value"]}]};function vs(t){pa.call(this,null,t)}function _s(t){pa.call(this,[],t),this.count=0}function xs(t){pa.call(this,null,t)}function bs(t){pa.call(this,null,t),this.modified(!0)}function ws(t){pa.call(this,null,t)}ut(ys,pa,{transform(t,e){const r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=t.as||["prob","value"];if(this.value&&!t.modified()&&!e.changed())return r.source=this.value,r;const o=Uu(e.materialize(e.SOURCE).source,t.groupby,t.field),a=(t.groupby||[]).map(n),u=[],s=t.step||.01,l=t.probs||Re(s/2,1-1e-14,s),c=l.length;return o.forEach((t=>{const e=_a(t,l);for(let n=0;n{const e=Oo(t);n.rem.push(r[e]),r[e]=null})),e.visit(e.ADD,(t=>{const e=Uo(t);r[Oo(t)]=e,n.add.push(e)})),e.visit(e.MOD,(t=>{const e=r[Oo(t)];for(const r in t)e[r]=t[r],n.modifies(r);n.mod.push(e)}))),n}}),_s.Definition={type:"Sample",metadata:{},params:[{name:"size",type:"number",default:1e3}]},ut(_s,pa,{transform(e,n){const r=n.fork(n.NO_SOURCE),i=e.modified("size"),o=e.size,a=this.value.reduce(((t,e)=>(t[Oo(e)]=1,t)),{});let u=this.value,s=this.count,l=0;function c(e){let n,i;u.length=l&&(n=u[i],a[Oo(n)]&&r.rem.push(n),u[i]=e)),++s}if(n.rem.length&&(n.visit(n.REM,(t=>{const e=Oo(t);a[e]&&(a[e]=-1,r.rem.push(t)),--s})),u=u.filter((t=>-1!==a[Oo(t)]))),(n.rem.length||i)&&u.length{a[Oo(t)]||c(t)})),l=-1),i&&u.length>o){const t=u.length-o;for(let e=0;e{a[Oo(t)]&&r.mod.push(t)})),n.add.length&&n.visit(n.ADD,c),(n.add.length||l<0)&&(r.add=u.filter((t=>!a[Oo(t)]))),this.count=s,this.value=r.source=u,r}}),xs.Definition={type:"Sequence",metadata:{generates:!0,changes:!0},params:[{name:"start",type:"number",required:!0},{name:"stop",type:"number",required:!0},{name:"step",type:"number",default:1},{name:"as",type:"string",default:"data"}]},ut(xs,pa,{transform(t,e){if(this.value&&!t.modified())return;const n=e.materialize().fork(e.MOD),r=t.as||"data";return n.rem=this.value?e.rem.concat(this.value):e.rem,this.value=Re(t.start,t.stop,t.step||1).map((t=>{const e={};return e[r]=t,Lo(e)})),n.add=e.add.concat(this.value),n}}),ut(bs,pa,{transform(t,e){return this.value=e.source,e.changed()?e.fork(e.NO_SOURCE|e.NO_FIELDS):e.StopPropagation}});const ks=["unit0","unit1"];function Ms(t){pa.call(this,ot(),t)}function As(t){pa.call(this,null,t)}ws.Definition={type:"TimeUnit",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"interval",type:"boolean",default:!0},{name:"units",type:"enum",values:In,array:!0},{name:"step",type:"number",default:1},{name:"maxbins",type:"number",default:40},{name:"extent",type:"date",array:!0},{name:"timezone",type:"enum",default:"local",values:["local","utc"]},{name:"as",type:"string",array:!0,length:2,default:ks}]},ut(ws,pa,{transform(t,e){const n=t.field,i=!1!==t.interval,o="utc"===t.timezone,a=this._floor(t,e),u=(o?vr:yr)(a.unit).offset,s=t.as||ks,l=s[0],c=s[1],f=a.step;let h=a.start||1/0,d=a.stop||-1/0,p=e.ADD;return(t.modified()||e.modified(r(n)))&&(p=(e=e.reflow(!0)).SOURCE,h=1/0,d=-1/0),e.visit(p,(t=>{const e=n(t);let r,o;null==e?(t[l]=null,i&&(t[c]=null)):(t[l]=r=o=a(e),i&&(t[c]=o=u(r,f)),rd&&(d=o))})),a.start=h,a.stop=d,e.modifies(i?s:l)},_floor(t,e){const n="utc"===t.timezone,{units:r,step:i}=t.units?{units:t.units,step:t.step||1}:qr({extent:t.extent||tt(e.materialize(e.SOURCE).source,t.field),maxbins:t.maxbins}),o=Wn(r),a=this.value||{},u=(n?pr:fr)(o,i);return u.unit=M(o),u.units=o,u.step=i,u.start=a.start,u.stop=a.stop,this.value=u}}),ut(Ms,pa,{transform(t,e){const n=e.dataflow,r=t.field,i=this.value,o=t=>i.set(r(t),t);let a=!0;return t.modified("field")||e.modified(r.fields)?(i.clear(),e.visit(e.SOURCE,o)):e.changed()?(e.visit(e.REM,(t=>i.delete(r(t)))),e.visit(e.ADD,o)):a=!1,this.modified(a),i.empty>n.cleanThreshold&&n.runAfter(i.clean),e.fork()}}),ut(As,pa,{transform(t,e){(!this.value||t.modified("field")||t.modified("sort")||e.changed()||t.sort&&e.modified(t.sort.fields))&&(this.value=(t.sort?e.source.slice().sort(jo(t.sort)):e.source).map(t.field))}});const Es={row_number:function(){return{next:t=>t.index+1}},rank:function(){let t;return{init:()=>t=1,next:e=>{const n=e.index,r=e.data;return n&&e.compare(r[n-1],r[n])?t=n+1:t}}},dense_rank:function(){let t;return{init:()=>t=1,next:e=>{const n=e.index,r=e.data;return n&&e.compare(r[n-1],r[n])?++t:t}}},percent_rank:function(){const t=Es.rank(),e=t.next;return{init:t.init,next:t=>(e(t)-1)/(t.data.length-1)}},cume_dist:function(){let t;return{init:()=>t=0,next:e=>{const n=e.data,r=e.compare;let i=e.index;if(t0||u("ntile num must be greater than zero.");const n=Es.cume_dist(),r=n.next;return{init:n.init,next:t=>Math.ceil(e*r(t))}},lag:function(t,e){return e=+e||1,{next:n=>{const r=n.index-e;return r>=0?t(n.data[r]):null}}},lead:function(t,e){return e=+e||1,{next:n=>{const r=n.index+e,i=n.data;return rt(e.data[e.i0])}},last_value:function(t){return{next:e=>t(e.data[e.i1-1])}},nth_value:function(t,e){return(e=+e)>0||u("nth_value nth must be greater than zero."),{next:n=>{const r=n.i0+(e-1);return re=null,next:n=>{const r=t(n.data[n.index]);return null!=r?e=r:e}}},next_value:function(t){let e,n;return{init:()=>(e=null,n=-1),next:r=>{const i=r.data;return r.index<=n?e:(n=function(t,e,n){for(let r=e.length;nc[t]=1))}m(t.sort),e.forEach(((t,e)=>{const r=i[e],c=n(r),y=lu(t,c,a[e]);if(m(r),s.push(y),rt(Es,t))l.push(function(t,e,n,r){const i=Es[t](e,n);return{init:i.init||h,update:function(t,e){e[r]=i.next(t)}}}(t,i[e],o[e],y));else{if(null==r&&"count"!==t&&u("Null aggregate field specified."),"count"===t)return void d.push(y);g=!1;let e=f[c];e||(e=f[c]=[],e.field=r,p.push(e)),e.push(pu(t,y))}})),(d.length||p.length)&&(this.cell=function(t,e,n){t=t.map((t=>xu(t,t.field)));const r={num:0,agg:null,store:!1,count:e};if(!n)for(var i=t.length,o=r.agg=Array(i),a=0;a0&&!i(o[n],o[n-1])&&(t.i0=e.left(o,o[n])),rt.init())),this.cell&&this.cell.init()},Fs.update=function(t,e){const n=this.cell,r=this.windows,i=t.data,o=r&&r.length;let a;if(n){for(a=t.p0;athis.group(i(t));let a=this.state;a&&!n||(a=this.state=new Cs(t)),n||e.modified(a.inputs)?(this.value={},e.visit(e.SOURCE,(t=>o(t).add(t)))):(e.visit(e.REM,(t=>o(t).remove(t))),e.visit(e.ADD,(t=>o(t).add(t))));for(let e=0,n=this._mlen;eLs)if(Math.abs(c*u-s*l)>Ls&&i){var h=n-o,d=r-a,p=u*u+s*s,g=h*h+d*d,m=Math.sqrt(p),y=Math.sqrt(f),v=i*Math.tan((Os-Math.acos((p+f-g)/(2*m*y)))/2),_=v/y,x=v/m;Math.abs(_-1)>Ls&&(this._+="L"+(t+_*l)+","+(e+_*c)),this._+="A"+i+","+i+",0,0,"+ +(c*h>l*d)+","+(this._x1=t+x*u)+","+(this._y1=e+x*s)}else this._+="L"+(this._x1=t)+","+(this._y1=e);else;},arc:function(t,e,n,r,i,o){t=+t,e=+e,o=!!o;var a=(n=+n)*Math.cos(r),u=n*Math.sin(r),s=t+a,l=e+u,c=1^o,f=o?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+s+","+l:(Math.abs(this._x1-s)>Ls||Math.abs(this._y1-l)>Ls)&&(this._+="L"+s+","+l),n&&(f<0&&(f=f%Rs+Rs),f>Us?this._+="A"+n+","+n+",0,1,"+c+","+(t-a)+","+(e-u)+"A"+n+","+n+",0,1,"+c+","+(this._x1=s)+","+(this._y1=l):f>Ls&&(this._+="A"+n+","+n+",0,"+ +(f>=Os)+","+c+","+(this._x1=t+n*Math.cos(i))+","+(this._y1=e+n*Math.sin(i))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var Is=Math.abs,$s=Math.atan2,Ws=Math.cos,Hs=Math.max,Ys=Math.min,Vs=Math.sin,Gs=Math.sqrt,Xs=1e-12,Js=Math.PI,Zs=Js/2,Qs=2*Js;function Ks(t){return t>1?0:t<-1?Js:Math.acos(t)}function tl(t){return t>=1?Zs:t<=-1?-Zs:Math.asin(t)}function el(t){return t.innerRadius}function nl(t){return t.outerRadius}function rl(t){return t.startAngle}function il(t){return t.endAngle}function ol(t){return t&&t.padAngle}function al(t,e,n,r,i,o,a,u){var s=n-t,l=r-e,c=a-i,f=u-o,h=f*s-c*l;if(!(h*hS*S+B*B&&(M=E,A=D),{cx:M,cy:A,x01:-c,y01:-f,x11:M*(i/b-1),y11:A*(i/b-1)}}function sl(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function ll(t){this._context=t}function cl(t){return new ll(t)}function fl(t){return t[0]}function hl(t){return t[1]}function dl(t,e){var n=js(!0),r=null,i=cl,o=null;function a(a){var u,s,l,c=(a=sl(a)).length,f=!1;for(null==r&&(o=i(l=Ps())),u=0;u<=c;++u)!(u=c;--f)u.point(m[f],y[f]);u.lineEnd(),u.areaEnd()}g&&(m[l]=+t(h,l,s),y[l]=+e(h,l,s),u.point(r?+r(h,l,s):m[l],n?+n(h,l,s):y[l]))}if(d)return u=null,d+""||null}function l(){return dl().defined(i).curve(a).context(o)}return t="function"==typeof t?t:void 0===t?fl:js(+t),e="function"==typeof e?e:js(void 0===e?0:+e),n="function"==typeof n?n:void 0===n?hl:js(+n),s.x=function(e){return arguments.length?(t="function"==typeof e?e:js(+e),r=null,s):t},s.x0=function(e){return arguments.length?(t="function"==typeof e?e:js(+e),s):t},s.x1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:js(+t),s):r},s.y=function(t){return arguments.length?(e="function"==typeof t?t:js(+t),n=null,s):e},s.y0=function(t){return arguments.length?(e="function"==typeof t?t:js(+t),s):e},s.y1=function(t){return arguments.length?(n=null==t?null:"function"==typeof t?t:js(+t),s):n},s.lineX0=s.lineY0=function(){return l().x(t).y(e)},s.lineY1=function(){return l().x(t).y(n)},s.lineX1=function(){return l().x(r).y(e)},s.defined=function(t){return arguments.length?(i="function"==typeof t?t:js(!!t),s):i},s.curve=function(t){return arguments.length?(a=t,null!=o&&(u=a(o)),s):a},s.context=function(t){return arguments.length?(null==t?o=u=null:u=a(o=t),s):o},s}ll.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}};var gl={draw:function(t,e){var n=Math.sqrt(e/Js);t.moveTo(n,0),t.arc(0,0,n,0,Qs)}};function ml(){}function yl(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function vl(t){this._context=t}function _l(t){this._context=t}function xl(t){this._context=t}function bl(t,e){this._basis=new vl(t),this._beta=e}vl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:yl(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:yl(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},_l.prototype={areaStart:ml,areaEnd:ml,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:yl(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},xl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:yl(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},bl.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var r,i=t[0],o=e[0],a=t[n]-i,u=e[n]-o,s=-1;++s<=n;)r=s/n,this._basis.point(this._beta*t[s]+(1-this._beta)*(i+r*a),this._beta*e[s]+(1-this._beta)*(o+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var wl=function t(e){function n(t){return 1===e?new vl(t):new bl(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function kl(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function Ml(t,e){this._context=t,this._k=(1-e)/6}Ml.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:kl(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:kl(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Al=function t(e){function n(t){return new Ml(t,e)}return n.tension=function(e){return t(+e)},n}(0);function El(t,e){this._context=t,this._k=(1-e)/6}El.prototype={areaStart:ml,areaEnd:ml,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:kl(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Dl=function t(e){function n(t){return new El(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Cl(t,e){this._context=t,this._k=(1-e)/6}Cl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:kl(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Fl=function t(e){function n(t){return new Cl(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Sl(t,e,n){var r=t._x1,i=t._y1,o=t._x2,a=t._y2;if(t._l01_a>Xs){var u=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,s=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*u-t._x0*t._l12_2a+t._x2*t._l01_2a)/s,i=(i*u-t._y0*t._l12_2a+t._y2*t._l01_2a)/s}if(t._l23_a>Xs){var l=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,c=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*l+t._x1*t._l23_2a-e*t._l12_2a)/c,a=(a*l+t._y1*t._l23_2a-n*t._l12_2a)/c}t._context.bezierCurveTo(r,i,o,a,t._x2,t._y2)}function Bl(t,e){this._context=t,this._alpha=e}Bl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Sl(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Tl=function t(e){function n(t){return e?new Bl(t,e):new Ml(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function zl(t,e){this._context=t,this._alpha=e}zl.prototype={areaStart:ml,areaEnd:ml,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Sl(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Nl=function t(e){function n(t){return e?new zl(t,e):new El(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Ol(t,e){this._context=t,this._alpha=e}Ol.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Sl(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Rl=function t(e){function n(t){return e?new Ol(t,e):new Cl(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Ll(t){this._context=t}function Ul(t){return t<0?-1:1}function ql(t,e,n){var r=t._x1-t._x0,i=e-t._x1,o=(t._y1-t._y0)/(r||i<0&&-0),a=(n-t._y1)/(i||r<0&&-0),u=(o*i+a*r)/(r+i);return(Ul(o)+Ul(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(u))||0}function Pl(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function jl(t,e,n){var r=t._x0,i=t._y0,o=t._x1,a=t._y1,u=(o-r)/3;t._context.bezierCurveTo(r+u,i+u*e,o-u,a-u*n,o,a)}function Il(t){this._context=t}function $l(t){this._context=new Wl(t)}function Wl(t){this._context=t}function Hl(t){this._context=t}function Yl(t){var e,n,r=t.length-1,i=new Array(r),o=new Array(r),a=new Array(r);for(i[0]=0,o[0]=2,a[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(a[e]-i[e+1])/o[e];for(o[r-1]=(t[r]+i[r-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};const Xl=()=>"undefined"!=typeof Image?Image:null;function Jl(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}function Zl(t,e){switch(arguments.length){case 0:break;case 1:"function"==typeof t?this.interpolator(t):this.range(t);break;default:this.domain(t),"function"==typeof e?this.interpolator(e):this.range(e)}return this}const Ql=Symbol("implicit");function Kl(){var t=new Map,e=[],n=[],r=Ql;function i(i){var o=i+"",a=t.get(o);if(!a){if(r!==Ql)return r;t.set(o,a=e.push(i))}return n[(a-1)%n.length]}return i.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new Map;for(const r of n){const n=r+"";t.has(n)||t.set(n,e.push(r))}return i},i.range=function(t){return arguments.length?(n=Array.from(t),i):n.slice()},i.unknown=function(t){return arguments.length?(r=t,i):r},i.copy=function(){return Kl(e,n).unknown(r)},Jl.apply(i,arguments),i}function tc(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function ec(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function nc(){}var rc=.7,ic=1/rc,oc="\\s*([+-]?\\d+)\\s*",ac="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",uc="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",sc=/^#([0-9a-f]{3,8})$/,lc=new RegExp("^rgb\\("+[oc,oc,oc]+"\\)$"),cc=new RegExp("^rgb\\("+[uc,uc,uc]+"\\)$"),fc=new RegExp("^rgba\\("+[oc,oc,oc,ac]+"\\)$"),hc=new RegExp("^rgba\\("+[uc,uc,uc,ac]+"\\)$"),dc=new RegExp("^hsl\\("+[ac,uc,uc]+"\\)$"),pc=new RegExp("^hsla\\("+[ac,uc,uc,ac]+"\\)$"),gc={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function mc(){return this.rgb().formatHex()}function yc(){return this.rgb().formatRgb()}function vc(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=sc.exec(t))?(n=e[1].length,e=parseInt(e[1],16),6===n?_c(e):3===n?new kc(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?xc(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?xc(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=lc.exec(t))?new kc(e[1],e[2],e[3],1):(e=cc.exec(t))?new kc(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=fc.exec(t))?xc(e[1],e[2],e[3],e[4]):(e=hc.exec(t))?xc(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=dc.exec(t))?Dc(e[1],e[2]/100,e[3]/100,1):(e=pc.exec(t))?Dc(e[1],e[2]/100,e[3]/100,e[4]):gc.hasOwnProperty(t)?_c(gc[t]):"transparent"===t?new kc(NaN,NaN,NaN,0):null}function _c(t){return new kc(t>>16&255,t>>8&255,255&t,1)}function xc(t,e,n,r){return r<=0&&(t=e=n=NaN),new kc(t,e,n,r)}function bc(t){return t instanceof nc||(t=vc(t)),t?new kc((t=t.rgb()).r,t.g,t.b,t.opacity):new kc}function wc(t,e,n,r){return 1===arguments.length?bc(t):new kc(t,e,n,null==r?1:r)}function kc(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function Mc(){return"#"+Ec(this.r)+Ec(this.g)+Ec(this.b)}function Ac(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function Ec(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function Dc(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Sc(t,e,n,r)}function Cc(t){if(t instanceof Sc)return new Sc(t.h,t.s,t.l,t.opacity);if(t instanceof nc||(t=vc(t)),!t)return new Sc;if(t instanceof Sc)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),o=Math.max(e,n,r),a=NaN,u=o-i,s=(o+i)/2;return u?(a=e===o?(n-r)/u+6*(n0&&s<1?0:a,new Sc(a,u,s,t.opacity)}function Fc(t,e,n,r){return 1===arguments.length?Cc(t):new Sc(t,e,n,null==r?1:r)}function Sc(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function Bc(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}tc(nc,vc,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:mc,formatHex:mc,formatHsl:function(){return Cc(this).formatHsl()},formatRgb:yc,toString:yc}),tc(kc,wc,ec(nc,{brighter:function(t){return t=null==t?ic:Math.pow(ic,t),new kc(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?rc:Math.pow(rc,t),new kc(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Mc,formatHex:Mc,formatRgb:Ac,toString:Ac})),tc(Sc,Fc,ec(nc,{brighter:function(t){return t=null==t?ic:Math.pow(ic,t),new Sc(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?rc:Math.pow(rc,t),new Sc(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new kc(Bc(t>=240?t-240:t+120,i,r),Bc(t,i,r),Bc(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));const Tc=Math.PI/180,zc=180/Math.PI,Nc=.96422,Oc=.82521,Rc=4/29,Lc=6/29,Uc=3*Lc*Lc;function qc(t){if(t instanceof jc)return new jc(t.l,t.a,t.b,t.opacity);if(t instanceof Gc)return Xc(t);t instanceof kc||(t=bc(t));var e,n,r=Hc(t.r),i=Hc(t.g),o=Hc(t.b),a=Ic((.2225045*r+.7168786*i+.0606169*o)/1);return r===i&&i===o?e=n=a:(e=Ic((.4360747*r+.3850649*i+.1430804*o)/Nc),n=Ic((.0139322*r+.0971045*i+.7141733*o)/Oc)),new jc(116*a-16,500*(e-a),200*(a-n),t.opacity)}function Pc(t,e,n,r){return 1===arguments.length?qc(t):new jc(t,e,n,null==r?1:r)}function jc(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function Ic(t){return t>.008856451679035631?Math.pow(t,1/3):t/Uc+Rc}function $c(t){return t>Lc?t*t*t:Uc*(t-Rc)}function Wc(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Hc(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Yc(t){if(t instanceof Gc)return new Gc(t.h,t.c,t.l,t.opacity);if(t instanceof jc||(t=qc(t)),0===t.a&&0===t.b)return new Gc(NaN,0=1?(n=1,e-1):Math.floor(n*e),i=t[r],o=t[r+1],a=r>0?t[r-1]:2*i-o,u=r()=>t;function hf(t,e){return function(n){return t+n*e}}function df(t,e){var n=e-t;return n?hf(t,n>180||n<-180?n-360*Math.round(n/360):n):ff(isNaN(t)?e:t)}function pf(t){return 1==(t=+t)?gf:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):ff(isNaN(e)?n:e)}}function gf(t,e){var n=e-t;return n?hf(t,n):ff(isNaN(t)?e:t)}var mf=function t(e){var n=pf(e);function r(t,e){var r=n((t=wc(t)).r,(e=wc(e)).r),i=n(t.g,e.g),o=n(t.b,e.b),a=gf(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=o(e),t.opacity=a(e),t+""}}return r.gamma=t,r}(1);function yf(t){return function(e){var n,r,i=e.length,o=new Array(i),a=new Array(i),u=new Array(i);for(n=0;no&&(i=e.slice(o,i),u[a]?u[a]+=i:u[++a]=i),(n=n[0])===(r=r[0])?u[a]?u[a]+=r:u[++a]=r:(u[++a]=null,s.push({i:a,x:Mf(n,r)})),o=Df.lastIndex;return o180?e+=360:e-t>180&&(t+=360),o.push({i:n.push(i(n)+"rotate(",null,r)-2,x:Mf(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(o.rotate,a.rotate,u,s),function(t,e,n,o){t!==e?o.push({i:n.push(i(n)+"skewX(",null,r)-2,x:Mf(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(o.skewX,a.skewX,u,s),function(t,e,n,r,o,a){if(t!==n||e!==r){var u=o.push(i(o)+"scale(",null,",",null,")");a.push({i:u-4,x:Mf(t,n)},{i:u-2,x:Mf(e,r)})}else 1===n&&1===r||o.push(i(o)+"scale("+n+","+r+")")}(o.scaleX,o.scaleY,a.scaleX,a.scaleY,u,s),o=a=null,function(t){for(var e,n=-1,r=s.length;++ne&&(n=t,t=e,e=n),function(n){return Math.max(t,Math.min(e,n))}}(a[0],a[t-1])),r=t>2?nh:eh,i=o=null,f}function f(e){return isNaN(e=+e)?n:(i||(i=r(a.map(t),u,s)))(t(l(e)))}return f.invert=function(n){return l(e((o||(o=r(u,a.map(t),Mf)))(n)))},f.domain=function(t){return arguments.length?(a=Array.from(t,Zf),c()):a.slice()},f.range=function(t){return arguments.length?(u=Array.from(t),c()):u.slice()},f.rangeRound=function(t){return u=Array.from(t),s=Sf,c()},f.clamp=function(t){return arguments.length?(l=!!t||Kf,c()):l!==Kf},f.interpolate=function(t){return arguments.length?(s=t,c()):s},f.unknown=function(t){return arguments.length?(n=t,f):n},function(n,r){return t=n,e=r,c()}}function oh(){return ih()(Kf,Kf)}function ah(t,e,n,r){var i,o=De(t,e,n);switch((r=Ie(null==r?",f":r)).type){case"s":var a=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=tn(o,a))||(r.precision=i),Xe(r,a);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=en(o,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=Ke(o))||(r.precision=i-2*("%"===r.type))}return Ge(r)}function uh(t){var e=t.domain;return t.ticks=function(t){var n=e();return Ae(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return ah(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i,o=e(),a=0,u=o.length-1,s=o[a],l=o[u],c=10;for(l0;){if((i=Ee(s,l,n))===r)return o[a]=s,o[u]=l,e(o);if(i>0)s=Math.floor(s/i)*i,l=Math.ceil(l/i)*i;else{if(!(i<0))break;s=Math.ceil(s*i)/i,l=Math.floor(l*i)/i}r=i}return t},t}function sh(t,e){var n,r=0,i=(t=t.slice()).length-1,o=t[r],a=t[i];return a0){for(;h<=d;++h)for(c=1,l=n(h);cs)break;g.push(f)}}else for(;h<=d;++h)for(c=o-1,l=n(h);c>=1;--c)if(!((f=l*c)s)break;g.push(f)}2*g.length0?r:1:0}const Ph="linear",jh="log",Ih="pow",$h="sqrt",Wh="symlog",Hh="time",Yh="utc",Vh="sequential",Gh="diverging",Xh="quantile",Jh="quantize",Zh="threshold",Qh="ordinal",Kh="point",td="band",ed="bin-ordinal",nd="continuous",rd="discrete",id="discretizing",od="interpolating",ad="temporal";function ud(){const t=Kl().unknown(void 0),e=t.domain,n=t.range;let r,i,o=[0,1],a=!1,u=0,s=0,l=.5;function c(){const t=e().length,c=o[1]d+r*t));return n(c?p.reverse():p)}return delete t.unknown,t.domain=function(t){return arguments.length?(e(t),c()):e()},t.range=function(t){return arguments.length?(o=[+t[0],+t[1]],c()):o.slice()},t.rangeRound=function(t){return o=[+t[0],+t[1]],a=!0,c()},t.bandwidth=function(){return i},t.step=function(){return r},t.round=function(t){return arguments.length?(a=!!t,c()):a},t.padding=function(t){return arguments.length?(s=Math.max(0,Math.min(1,t)),u=s,c()):u},t.paddingInner=function(t){return arguments.length?(u=Math.max(0,Math.min(1,t)),c()):u},t.paddingOuter=function(t){return arguments.length?(s=Math.max(0,Math.min(1,t)),c()):s},t.align=function(t){return arguments.length?(l=Math.max(0,Math.min(1,t)),c()):l},t.invertRange=function(t){if(null==t[0]||null==t[1])return;const r=o[1]o[1-r])?void 0:(s=Math.max(0,_e(a,f)-1),l=f===h?s:_e(a,h)-1,f-a[s]>i+1e-10&&++s,r&&(c=s,s=u-l,l=u-c),s>l?void 0:e().slice(s,l+1))},t.invert=function(e){const n=t.invertRange([e,e]);return n?n[0]:n},t.copy=function(){return ud().domain(e()).range(o).round(a).paddingInner(u).paddingOuter(s).align(l)},c()}function sd(t){const e=t.copy;return t.padding=t.paddingOuter,delete t.paddingInner,t.copy=function(){return sd(e())},t}var ld=Array.prototype.map;function cd(t){return ld.call(t,A)}const fd=Array.prototype.slice;const hd={};function dd(t,e,n){const r=function(){const n=e();return n.invertRange||(n.invertRange=n.invert?function(t){return function(e){let n,r=e[0],i=e[1];return i=u&&n[o]<=s&&(l<0&&(l=o),r=o);if(!(l<0))return u=t.invertExtent(n[l]),s=t.invertExtent(n[r]),[void 0===u[0]?u[1]:u[0],void 0===s[1]?s[0]:s[1]]}}(n):void 0),n.type=t,n};return r.metadata=Dt($(n)),r}function pd(t,e,n){return arguments.length>1?(hd[t]=dd(t,e,n),this):gd(t)?hd[t]:void 0}function gd(t){return rt(hd,t)}function md(t,e){const n=hd[t];return n&&n.metadata[e]}function yd(t){return md(t,nd)}function vd(t){return md(t,rd)}function _d(t){return md(t,id)}function xd(t){return md(t,jh)}function bd(t){return md(t,od)}function wd(t){return md(t,Xh)}pd("identity",(function t(e){var n;function r(t){return isNaN(t=+t)?n:t}return r.invert=r,r.domain=r.range=function(t){return arguments.length?(e=Array.from(t,Zf),r):e.slice()},r.unknown=function(t){return arguments.length?(n=t,r):n},r.copy=function(){return t(e).unknown(n)},e=arguments.length?Array.from(e,Zf):[0,1],uh(r)})),pd(Ph,(function t(){var e=oh();return e.copy=function(){return rh(e,t())},Jl.apply(e,arguments),uh(e)}),nd),pd(jh,(function t(){var e=gh(ih()).domain([1,10]);return e.copy=function(){return rh(e,t()).base(e.base())},Jl.apply(e,arguments),e}),[nd,jh]),pd(Ih,kh,nd),pd($h,(function(){return kh.apply(null,arguments).exponent(.5)}),nd),pd(Wh,(function t(){var e=vh(ih());return e.copy=function(){return rh(e,t()).constant(e.constant())},Jl.apply(e,arguments)}),nd),pd(Hh,(function(){return Jl.apply(Th(bn,xn,yn,gn,pn,dn,hn,an,Hr).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}),[nd,ad]),pd(Yh,(function(){return Jl.apply(Th(Sn,Fn,En,Mn,kn,wn,hn,an,Vr).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}),[nd,ad]),pd(Vh,Oh,[nd,od]),pd("".concat(Vh,"-").concat(Ph),Oh,[nd,od]),pd("".concat(Vh,"-").concat(jh),(function t(){var e=gh(zh()).domain([1,10]);return e.copy=function(){return Nh(e,t()).base(e.base())},Zl.apply(e,arguments)}),[nd,od,jh]),pd("".concat(Vh,"-").concat(Ih),Rh,[nd,od]),pd("".concat(Vh,"-").concat($h),(function(){return Rh.apply(null,arguments).exponent(.5)}),[nd,od]),pd("".concat(Vh,"-").concat(Wh),(function t(){var e=vh(zh());return e.copy=function(){return Nh(e,t()).constant(e.constant())},Zl.apply(e,arguments)}),[nd,od]),pd("".concat(Gh,"-").concat(Ph),(function t(){var e=uh(Lh()(Kf));return e.copy=function(){return Nh(e,t())},Zl.apply(e,arguments)}),[nd,od]),pd("".concat(Gh,"-").concat(jh),(function t(){var e=gh(Lh()).domain([.1,1,10]);return e.copy=function(){return Nh(e,t()).base(e.base())},Zl.apply(e,arguments)}),[nd,od,jh]),pd("".concat(Gh,"-").concat(Ih),Uh,[nd,od]),pd("".concat(Gh,"-").concat($h),(function(){return Uh.apply(null,arguments).exponent(.5)}),[nd,od]),pd("".concat(Gh,"-").concat(Wh),(function t(){var e=vh(Lh());return e.copy=function(){return Nh(e,t()).constant(e.constant())},Zl.apply(e,arguments)}),[nd,od]),pd(Xh,(function t(){var e,n=[],r=[],i=[];function o(){var t=0,e=Math.max(1,r.length);for(i=new Array(e-1);++t0?i[e-1]:n[0],e=i?[o[i-1],r]:[o[e-1],o[e]]},u.unknown=function(t){return arguments.length?(e=t,u):u},u.thresholds=function(){return o.slice()},u.copy=function(){return t().domain([n,r]).range(a).unknown(e)},Jl.apply(uh(u),arguments)}),id),pd(Zh,(function t(){var e,n=[.5],r=[0,1],i=1;function o(t){return t<=t?r[_e(n,t,0,i)]:e}return o.domain=function(t){return arguments.length?(n=Array.from(t),i=Math.min(n.length,r.length-1),o):n.slice()},o.range=function(t){return arguments.length?(r=Array.from(t),i=Math.min(n.length,r.length-1),o):r.slice()},o.invertExtent=function(t){var e=r.indexOf(t);return[n[e-1],n[e]]},o.unknown=function(t){return arguments.length?(e=t,o):e},o.copy=function(){return t().domain(n).range(r).unknown(e)},Jl.apply(o,arguments)}),id),pd(ed,(function t(){let e=[],n=[];function r(t){return null==t||t!=t?void 0:n[(_e(e,t)-1)%n.length]}return r.domain=function(t){return arguments.length?(e=cd(t),r):e.slice()},r.range=function(t){return arguments.length?(n=fd.call(t),r):n.slice()},r.tickFormat=function(t,n){return ah(e[0],M(e),null==t?10:t,n)},r.copy=function(){return t().domain(r.domain()).range(r.range())},r}),[rd,id]),pd(Qh,Kl,rd),pd(td,ud,rd),pd(Kh,(function(){return sd(ud().paddingInner(1))}),rd);const kd=["clamp","base","constant","exponent"];function Md(t,e){const n=e[0],r=M(e)-n;return function(e){return t(n+e*r)}}function Ad(t,e,n){return Xf(Cd(e||"rgb",n),t)}function Ed(t,e){const n=new Array(e),r=e+1;for(let i=0;it[e]?a[e](t[e]()):0)),a):Z(.5)}function Cd(t,e){const n=Jf[function(t){return"interpolate"+t.toLowerCase().split("-").map((t=>t[0].toUpperCase()+t.slice(1))).join("")}(t)];return null!=e&&n&&n.gamma?n.gamma(e):n}function Fd(t){const e=t.length/6|0,n=new Array(e);for(let r=0;r1?(Bd[t]=e,this):Bd[t]}Sd({category10:"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf",category20:"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5",category20b:"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6",category20c:"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9",tableau10:"4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac",tableau20:"4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5",accent:"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666",dark2:"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666",paired:"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928",pastel1:"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2",pastel2:"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc",set1:"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999",set2:"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3",set3:"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"},Fd),Sd({blues:"cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90",greens:"d3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429",greys:"e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e",oranges:"fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303",purples:"e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c",reds:"fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13",blueGreen:"d5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429",bluePurple:"ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71",greenBlue:"d3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1",orangeRed:"fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403",purpleBlue:"dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281",purpleBlueGreen:"dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353",purpleRed:"dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a",redPurple:"fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174",yellowGreen:"e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034",yellowOrangeBrown:"feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204",yellowOrangeRed:"fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225",blueOrange:"134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07",brownBlueGreen:"704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147",purpleGreen:"5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29",purpleOrange:"4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07",redBlue:"8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85",redGrey:"8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434",yellowGreenBlue:"eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185",redYellowBlue:"a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695",redYellowGreen:"a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837",pinkYellowGreen:"8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419",spectral:"9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2",viridis:"440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725",magma:"0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf",inferno:"0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4",plasma:"0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921",cividis:"00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647",rainbow:"6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa",sinebow:"ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040",turbo:"23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00",browns:"eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632",tealBlues:"bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985",teals:"bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667",warmGreys:"dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e",goldGreen:"f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36",goldOrange:"f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26",goldRed:"f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e",lightGreyRed:"efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b",lightGreyTeal:"e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc",lightMulti:"e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c",lightOrange:"f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b",lightTealBlue:"e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988",darkBlue:"3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff",darkGold:"3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff",darkGreen:"3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa",darkMulti:"3737371f5287197d8c29a86995ce3fffe800ffffff",darkRed:"3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c"},(t=>Ad(Fd(t))));const zd="symbol",Nd=t=>v(t)?t.map((t=>String(t))):String(t),Od=(t,e)=>t[1]-e[1],Rd=(t,e)=>e[1]-t[1];function Ld(t,e,n){let r;return ht(e)&&(t.bins&&(e=Math.max(e,t.bins.length)),null!=n&&(e=Math.min(e,Math.floor(bt(t.domain())/n||1)))),_(e)&&(r=e.step,e=e.interval),pt(e)&&(e=t.type===Hh?yr(e):t.type==Yh?vr(e):u("Only time and utc scales accept interval strings."),r&&(e=e.every(r))),e}function Ud(t,e,n){let r=t.range(),i=r[0],o=M(r),a=Od;if(i>o&&(r=o,o=i,i=r,a=Rd),i=Math.floor(i),o=Math.ceil(o),e=e.map((e=>[e,t(e)])).filter((t=>i<=t[1]&&t[1]<=o)).sort(a).map((t=>t[0])),n>0&&e.length>1){const t=[e[0],M(e)];for(;e.length>n&&e.length>=3;)e=e.filter(((t,e)=>!(e%2)));e.length<3&&(e=t)}return e}function qd(t,e){return t.bins?Ud(t,t.bins):t.ticks?t.ticks(e):t.domain()}function Pd(t,e,n,r,i,o){const a=e.type;let u=Nd;if(a===Hh||i===Hh)u=t.timeFormat(r);else if(a===Yh||i===Yh)u=t.utcFormat(r);else if(xd(a)){const i=t.formatFloat(r);if(o||e.bins)u=i;else{const t=jd(e,n,!1);u=e=>t(e)?i(e):""}}else if(e.tickFormat){const i=e.domain();u=t.formatSpan(i[0],i[i.length-1],n,r)}else r&&(u=t.format(r));return u}function jd(t,e,n){const r=qd(t,e),i=t.base(),o=Math.log(i),a=Math.max(1,i*e/r.length),u=t=>{let e=t/Math.pow(i,Math.round(Math.log(t)/o));return e*i1?r[1]-r[0]:r[0];for(o=1;oId[t.type]||t.bins)(e)?Yd(u):"discrete"===r?Gd(u):Xd(u)}const Yd=t=>(e,n,r)=>{const i=Vd(r[n+1],Vd(r.max,1/0)),o=Jd(e,t),a=Jd(i,t);return o&&a?o+" – "+a:a?"< "+a:"≥ "+o},Vd=(t,e)=>null!=t?t:e,Gd=t=>(e,n)=>n?t(e):null,Xd=t=>e=>t(e),Jd=(t,e)=>Number.isFinite(t)?e(t):null;function Zd(t,e,n,r){const i=r||e.type;return pt(n)&&function(t){return md(t,ad)}(i)&&(n=n.replace(/%a/g,"%A").replace(/%b/g,"%B")),n||i!==Hh?n||i!==Yh?Hd(t,e,5,null,n,r,!0):t.utcFormat("%A, %d %B %Y, %X UTC"):t.timeFormat("%A, %d %B %Y, %X")}function Qd(t,e,n){n=n||{};const r=Math.max(3,n.maxlen||7),i=Zd(t,e,n.format,n.formatType);if(_d(e.type)){const t=Wd(e).slice(1).map(i),n=t.length;return"".concat(n," boundar").concat(1===n?"y":"ies",": ").concat(t.join(", "))}if(vd(e.type)){const t=e.domain(),n=t.length,o=n>r?t.slice(0,r-2).map(i).join(", ")+", ending with "+t.slice(-1).map(i):t.map(i).join(", ");return"".concat(n," value").concat(1===n?"":"s",": ").concat(o)}{const t=e.domain();return"values from ".concat(i(t[0])," to ").concat(i(M(t)))}}let Kd=0;const tp="p_";function ep(t){return t&&t.gradient}function np(t,e,n){const r=t.gradient;let i=t.id,o="radial"===r?tp:"";return i||(i=t.id="gradient_"+Kd++,"radial"===r?(t.x1=rp(t.x1,.5),t.y1=rp(t.y1,.5),t.r1=rp(t.r1,0),t.x2=rp(t.x2,.5),t.y2=rp(t.y2,.5),t.r2=rp(t.r2,.5),o=tp):(t.x1=rp(t.x1,0),t.y1=rp(t.y1,0),t.x2=rp(t.x2,1),t.y2=rp(t.y2,0))),e[i]=t,"url("+(n||"")+"#"+o+i+")"}function rp(t,e){return null!=t?t:e}function ip(t,e){var n,r=[];return n={gradient:"linear",x1:t?t[0]:0,y1:t?t[1]:0,x2:e?e[0]:1,y2:e?e[1]:0,stops:r,stop:function(t,e){return r.push({offset:t,color:e}),n}}}const op={basis:{curve:function(t){return new vl(t)}},"basis-closed":{curve:function(t){return new _l(t)}},"basis-open":{curve:function(t){return new xl(t)}},bundle:{curve:wl,tension:"beta",value:.85},cardinal:{curve:Al,tension:"tension",value:0},"cardinal-open":{curve:Fl,tension:"tension",value:0},"cardinal-closed":{curve:Dl,tension:"tension",value:0},"catmull-rom":{curve:Tl,tension:"alpha",value:.5},"catmull-rom-closed":{curve:Nl,tension:"alpha",value:.5},"catmull-rom-open":{curve:Rl,tension:"alpha",value:.5},linear:{curve:cl},"linear-closed":{curve:function(t){return new Ll(t)}},monotone:{horizontal:function(t){return new $l(t)},vertical:function(t){return new Il(t)}},natural:{curve:function(t){return new Hl(t)}},step:{curve:function(t){return new Vl(t,.5)}},"step-after":{curve:function(t){return new Vl(t,1)}},"step-before":{curve:function(t){return new Vl(t,0)}}};function ap(t,e,n){var r=rt(op,t)&&op[t],i=null;return r&&(i=r.curve||r[e||"vertical"],r.tension&&null!=n&&(i=i[r.tension](n))),i}const up={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},sp=[/([MLHVCSQTAZmlhvcsqtaz])/g,/###/,/(\.\d+)(\.\d)/g,/(\d)([-+])/g,/\s|,|###/];function lp(t){const e=[];let n,r,i,o,a,u,s,l,c,f;const h=t.slice().replace(sp[0],"###$1").split(sp[1]).slice(1);for(s=0,c=h.length;su){const t=i.length;for(l=1,e.push([a].concat(i.slice(l,l+=u))),a="M"===a?"L":"m"===a?"l":a;l1&&(g=Math.sqrt(g),n*=g,r*=g);const m=h/n,y=f/n,v=-f/r,_=h/r,x=m*u+y*s,b=v*u+_*s,w=m*t+y*e,k=v*t+_*e;let M=1/((w-x)*(w-x)+(k-b)*(k-b))-.25;M<0&&(M=0);let A=Math.sqrt(M);o==i&&(A=-A);const E=.5*(x+w)-A*(k-b),D=.5*(b+k)+A*(w-x),C=Math.atan2(b-D,x-E);let F=Math.atan2(k-D,w-E)-C;F<0&&1===o?F+=hp:F>0&&0===o&&(F-=hp);const S=Math.ceil(Math.abs(F/(fp+.001))),B=[];for(let t=0;t+t}function Tp(t,e,n){return Math.max(e,Math.min(t,n))}function zp(){var t=Dp,e=Cp,n=Fp,r=Sp,i=Bp(0),o=i,a=i,u=i,s=null;function l(l,c,f){var h,d=null!=c?c:+t.call(this,l),p=null!=f?f:+e.call(this,l),g=+n.call(this,l),m=+r.call(this,l),y=Math.min(g,m)/2,v=Tp(+i.call(this,l),0,y),_=Tp(+o.call(this,l),0,y),x=Tp(+a.call(this,l),0,y),b=Tp(+u.call(this,l),0,y);if(s||(s=h=Ps()),v<=0&&_<=0&&x<=0&&b<=0)s.rect(d,p,g,m);else{var w=d+g,k=p+m;s.moveTo(d+v,p),s.lineTo(w-_,p),s.bezierCurveTo(w-Ep*_,p,w,p+Ep*_,w,p+_),s.lineTo(w,k-b),s.bezierCurveTo(w,k-Ep*b,w-Ep*b,k,w-b,k),s.lineTo(d+x,k),s.bezierCurveTo(d+Ep*x,k,d,k-Ep*x,d,k-x),s.lineTo(d,p+v),s.bezierCurveTo(d,p+Ep*v,d+Ep*v,p,d+v,p),s.closePath()}if(h)return s=null,h+""||null}return l.x=function(e){return arguments.length?(t=Bp(e),l):t},l.y=function(t){return arguments.length?(e=Bp(t),l):e},l.width=function(t){return arguments.length?(n=Bp(t),l):n},l.height=function(t){return arguments.length?(r=Bp(t),l):r},l.cornerRadius=function(t,e,n,r){return arguments.length?(i=Bp(t),o=null!=e?Bp(e):i,u=null!=n?Bp(n):i,a=null!=r?Bp(r):o,l):i},l.context=function(t){return arguments.length?(s=null==t?null:t,l):s},l}function Np(){var t,e,n,r,i,o,a,u,s=null;function l(t,e,n){const r=n/2;if(i){var l=a-e,c=t-o;if(l||c){var f=Math.sqrt(l*l+c*c),h=(l/=f)*u,d=(c/=f)*u,p=Math.atan2(c,l);s.moveTo(o-h,a-d),s.lineTo(t-l*r,e-c*r),s.arc(t,e,r,p-Math.PI,p),s.lineTo(o+h,a+d),s.arc(o,a,u,p,p+Math.PI)}else s.arc(t,e,r,0,hp);s.closePath()}else i=1;o=t,a=e,u=r}function c(o){var a,u,c,f=o.length,h=!1;for(null==s&&(s=c=Ps()),a=0;a<=f;++a)!(at.x||0,Lp=t=>t.y||0,Up=t=>!(!1===t.defined),qp=function(){var t=el,e=nl,n=js(0),r=null,i=rl,o=il,a=ol,u=null;function s(){var s,l,c=+t.apply(this,arguments),f=+e.apply(this,arguments),h=i.apply(this,arguments)-Zs,d=o.apply(this,arguments)-Zs,p=Is(d-h),g=d>h;if(u||(u=s=Ps()),fXs)if(p>Qs-Xs)u.moveTo(f*Ws(h),f*Vs(h)),u.arc(0,0,f,h,d,!g),c>Xs&&(u.moveTo(c*Ws(d),c*Vs(d)),u.arc(0,0,c,d,h,g));else{var m,y,v=h,_=d,x=h,b=d,w=p,k=p,M=a.apply(this,arguments)/2,A=M>Xs&&(r?+r.apply(this,arguments):Gs(c*c+f*f)),E=Ys(Is(f-c)/2,+n.apply(this,arguments)),D=E,C=E;if(A>Xs){var F=tl(A/c*Vs(M)),S=tl(A/f*Vs(M));(w-=2*F)>Xs?(x+=F*=g?1:-1,b-=F):(w=0,x=b=(h+d)/2),(k-=2*S)>Xs?(v+=S*=g?1:-1,_-=S):(k=0,v=_=(h+d)/2)}var B=f*Ws(v),T=f*Vs(v),z=c*Ws(b),N=c*Vs(b);if(E>Xs){var O,R=f*Ws(_),L=f*Vs(_),U=c*Ws(x),q=c*Vs(x);if(pXs?C>Xs?(m=ul(U,q,B,T,f,C,g),y=ul(R,L,z,N,f,C,g),u.moveTo(m.cx+m.x01,m.cy+m.y01),CXs&&w>Xs?D>Xs?(m=ul(z,N,R,L,c,-D,g),y=ul(B,T,U,q,c,-D,g),u.lineTo(m.cx+m.x01,m.cy+m.y01),Dt.startAngle||0)).endAngle((t=>t.endAngle||0)).padAngle((t=>t.padAngle||0)).innerRadius((t=>t.innerRadius||0)).outerRadius((t=>t.outerRadius||0)).cornerRadius((t=>t.cornerRadius||0)),Pp=pl().x(Rp).y1(Lp).y0((t=>(t.y||0)+(t.height||0))).defined(Up),jp=pl().y(Lp).x1(Rp).x0((t=>(t.x||0)+(t.width||0))).defined(Up),Ip=dl().x(Rp).y(Lp).defined(Up),$p=zp().x(Rp).y(Lp).width((t=>t.width||0)).height((t=>t.height||0)).cornerRadius((t=>Op(t.cornerRadiusTopLeft,t.cornerRadius)||0),(t=>Op(t.cornerRadiusTopRight,t.cornerRadius)||0),(t=>Op(t.cornerRadiusBottomRight,t.cornerRadius)||0),(t=>Op(t.cornerRadiusBottomLeft,t.cornerRadius)||0)),Wp=function(t,e){var n=null;function r(){var r;if(n||(n=r=Ps()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),r)return n=null,r+""||null}return t="function"==typeof t?t:js(t||gl),e="function"==typeof e?e:js(void 0===e?64:+e),r.type=function(e){return arguments.length?(t="function"==typeof e?e:js(e),r):t},r.size=function(t){return arguments.length?(e="function"==typeof t?t:js(+t),r):e},r.context=function(t){return arguments.length?(n=null==t?null:t,r):n},r}().type((t=>Mp(t.shape||"circle"))).size((t=>Op(t.size,64))),Hp=Np().x(Rp).y(Lp).defined(Up).size((t=>t.size||1));function Yp(t){return t.cornerRadius||t.cornerRadiusTopLeft||t.cornerRadiusTopRight||t.cornerRadiusBottomRight||t.cornerRadiusBottomLeft}function Vp(t,e,n,r){return $p.context(t)(e,n,r)}var Gp=1;function Xp(){Gp=1}function Jp(t,e,n){var r=e.clip,i=t._defs,o=e.clip_id||(e.clip_id="clip"+Gp++),a=i.clipping[o]||(i.clipping[o]={id:o});return H(r)?a.path=r(null):Yp(n)?a.path=Vp(null,n,0,0):(a.width=n.width||0,a.height=n.height||0),"url(#"+o+")"}function Zp(t){this.clear(),t&&this.union(t)}function Qp(t){this.mark=t,this.bounds=this.bounds||new Zp}function Kp(t){Qp.call(this,t),this.items=this.items||[]}function tg(t){this._pending=0,this._loader=t||Fo()}function eg(t){t._pending+=1}function ng(t){t._pending-=1}function rg(t,e,n){if(e.stroke&&0!==e.opacity&&0!==e.strokeOpacity){const r=null!=e.strokeWidth?+e.strokeWidth:1;t.expand(r+(n?function(t,e){return t.strokeJoin&&"miter"!==t.strokeJoin?0:e}(e,r):0))}return t}Zp.prototype={clone(){return new Zp(this)},clear(){return this.x1=+Number.MAX_VALUE,this.y1=+Number.MAX_VALUE,this.x2=-Number.MAX_VALUE,this.y2=-Number.MAX_VALUE,this},empty(){return this.x1===+Number.MAX_VALUE&&this.y1===+Number.MAX_VALUE&&this.x2===-Number.MAX_VALUE&&this.y2===-Number.MAX_VALUE},equals(t){return this.x1===t.x1&&this.y1===t.y1&&this.x2===t.x2&&this.y2===t.y2},set(t,e,n,r){return nthis.x2&&(this.x2=t),e>this.y2&&(this.y2=e),this},expand(t){return this.x1-=t,this.y1-=t,this.x2+=t,this.y2+=t,this},round(){return this.x1=Math.floor(this.x1),this.y1=Math.floor(this.y1),this.x2=Math.ceil(this.x2),this.y2=Math.ceil(this.y2),this},scale(t){return this.x1*=t,this.y1*=t,this.x2*=t,this.y2*=t,this},translate(t,e){return this.x1+=t,this.x2+=t,this.y1+=e,this.y2+=e,this},rotate(t,e,n){const r=this.rotatedPoints(t,e,n);return this.clear().add(r[0],r[1]).add(r[2],r[3]).add(r[4],r[5]).add(r[6],r[7])},rotatedPoints(t,e,n){var{x1:r,y1:i,x2:o,y2:a}=this,u=Math.cos(t),s=Math.sin(t),l=e-e*u+n*s,c=n-e*s-n*u;return[u*r-s*i+l,s*r+u*i+c,u*r-s*a+l,s*r+u*a+c,u*o-s*i+l,s*o+u*i+c,u*o-s*a+l,s*o+u*a+c]},union(t){return t.x1this.x2&&(this.x2=t.x2),t.y2>this.y2&&(this.y2=t.y2),this},intersect(t){return t.x1>this.x1&&(this.x1=t.x1),t.y1>this.y1&&(this.y1=t.y1),t.x2=t.x2&&this.y1<=t.y1&&this.y2>=t.y2},alignsWith(t){return t&&(this.x1==t.x1||this.x2==t.x2||this.y1==t.y1||this.y2==t.y2)},intersects(t){return t&&!(this.x2t.x2||this.y2t.y2)},contains(t,e){return!(tthis.x2||ethis.y2)},width(){return this.x2-this.x1},height(){return this.y2-this.y1}},ut(Kp,Qp),tg.prototype={pending(){return this._pending},sanitizeURL(t){const e=this;return eg(e),e._loader.sanitize(t,{context:"href"}).then((t=>(ng(e),t))).catch((()=>(ng(e),null)))},loadImage(t){const e=this,n=Xl();return eg(e),e._loader.sanitize(t,{context:"image"}).then((t=>{const r=t.href;if(!r||!n)throw{url:r};const i=new n,o=rt(t,"crossOrigin")?t.crossOrigin:"anonymous";return null!=o&&(i.crossOrigin=o),i.onload=()=>ng(e),i.onerror=()=>ng(e),i.src=r,i})).catch((t=>(ng(e),{complete:!1,width:0,height:0,src:t&&t.url||""})))},ready(){const t=this;return new Promise((e=>{!function n(r){t.pending()?setTimeout((()=>{n(!0)}),10):e(r)}(!1)}))}};const ig=hp-1e-8;let og,ag,ug,sg,lg,cg,fg,hg;const dg=(t,e)=>og.add(t,e),pg=(t,e)=>dg(ag=t,ug=e),gg=t=>dg(t,og.y1),mg=t=>dg(og.x1,t),yg=(t,e)=>lg*t+fg*e,vg=(t,e)=>cg*t+hg*e,_g=(t,e)=>dg(yg(t,e),vg(t,e)),xg=(t,e)=>pg(yg(t,e),vg(t,e));function bg(t,e){return og=t,e?(sg=e*cp,lg=hg=Math.cos(sg),cg=Math.sin(sg),fg=-cg):(lg=hg=1,sg=cg=fg=0),wg}const wg={beginPath(){},closePath(){},moveTo:xg,lineTo:xg,rect(t,e,n,r){sg?(_g(t+n,e),_g(t+n,e+r),_g(t,e+r),xg(t,e)):(dg(t+n,e+r),pg(t,e))},quadraticCurveTo(t,e,n,r){const i=yg(t,e),o=vg(t,e),a=yg(n,r),u=vg(n,r);kg(ag,i,a,gg),kg(ug,o,u,mg),pg(a,u)},bezierCurveTo(t,e,n,r,i,o){const a=yg(t,e),u=vg(t,e),s=yg(n,r),l=vg(n,r),c=yg(i,o),f=vg(i,o);Mg(ag,a,s,c,gg),Mg(ug,u,l,f,mg),pg(c,f)},arc(t,e,n,r,i,o){if(r+=sg,i+=sg,ag=n*Math.cos(i)+t,ug=n*Math.sin(i)+e,Math.abs(i-r)>ig)dg(t-n,e-n),dg(t+n,e+n);else{const a=r=>dg(n*Math.cos(r)+t,n*Math.sin(r)+e);let u,s;if(a(r),a(i),i!==r)if((r%=hp)<0&&(r+=hp),(i%=hp)<0&&(i+=hp),ii;++s,u-=fp)a(u);else for(u=r-r%fp+fp,s=0;s<4&&u1e-14?(s=a*a+u*o,s>=0&&(s=Math.sqrt(s),l=(-a+s)/o,c=(-a-s)/o)):l=.5*u/a,0m)return!1;d>g&&(g=d)}else if(f>0){if(d0&&(t.globalAlpha=n,t.fillStyle=Rg(t,e,e.fill),!0)}var Ug=[];function qg(t,e,n){var r=null!=(r=e.strokeWidth)?r:1;return!(r<=0)&&((n*=null==e.strokeOpacity?1:e.strokeOpacity)>0&&(t.globalAlpha=n,t.strokeStyle=Rg(t,e,e.stroke),t.lineWidth=r,t.lineCap=e.strokeCap||"butt",t.lineJoin=e.strokeJoin||"miter",t.miterLimit=e.strokeMiterLimit||10,t.setLineDash&&(t.setLineDash(e.strokeDash||Ug),t.lineDashOffset=e.strokeDashOffset||0),!0))}function Pg(t,e){return t.zindex-e.zindex||t.index-e.index}function jg(t){if(!t.zdirty)return t.zitems;var e,n,r,i=t.items,o=[];for(n=0,r=i.length;n=0;)if(n=e(i[r]))return n;if(i===o)for(r=(i=t.items).length;--r>=0;)if(!i[r].zindex&&(n=e(i[r])))return n;return null}function Wg(t){return function(e,n,r){Ig(n,(n=>{r&&!r.intersects(n.bounds)||Yg(t,e,n,n)}))}}function Hg(t){return function(e,n,r){!n.items.length||r&&!r.intersects(n.bounds)||Yg(t,e,n.items[0],n.items)}}function Yg(t,e,n,r){var i=null==n.opacity?1:n.opacity;0!==i&&(t(e,r)||(zg(e,n),n.fill&&Lg(e,n,i)&&e.fill(),n.stroke&&qg(e,n,i)&&e.stroke()))}function Vg(t){return t=t||p,function(e,n,r,i,o,a){return r*=e.pixelRatio,i*=e.pixelRatio,$g(n,(n=>{const u=n.bounds;if((!u||u.contains(o,a))&&u)return t(e,n,r,i,o,a)?n:void 0}))}}function Gg(t,e){return function(n,r,i,o){var a,u,s=Array.isArray(r)?r[0]:r,l=null==e?s.fill:e,c=s.stroke&&n.isPointInStroke;return c&&(a=s.strokeWidth,u=s.strokeCap,n.lineWidth=null!=a?a:1,n.lineCap=null!=u?u:"butt"),!t(n,r)&&(l&&n.isPointInPath(i,o)||c&&n.isPointInStroke(i,o))}}function Xg(t){return Vg(Gg(t))}function Jg(t,e){return"translate("+t+","+e+")"}function Zg(t){return"rotate("+t+")"}function Qg(t){return Jg(t.x||0,t.y||0)}function Kg(t,e,n){function r(t,n){var r=n.x||0,i=n.y||0,o=n.angle||0;t.translate(r,i),o&&t.rotate(o*=cp),t.beginPath(),e(t,n),o&&t.rotate(-o),t.translate(-r,-i)}return{type:t,tag:"path",nested:!1,attr:function(t,n){t("transform",function(t){return Jg(t.x||0,t.y||0)+(t.angle?" "+Zg(t.angle):"")}(n)),t("d",e(null,n))},bound:function(t,n){return e(bg(t,n.angle),n),rg(t,n).translate(n.x||0,n.y||0)},draw:Wg(r),pick:Xg(r),isect:n||Cg(r)}}var tm=Kg("arc",(function(t,e){return qp.context(t)(e)}));function em(t,e,n){function r(t,n){t.beginPath(),e(t,n)}const i=Gg(r);return{type:t,tag:"path",nested:!0,attr:function(t,n){var r=n.mark.items;r.length&&t("d",e(null,r))},bound:function(t,n){var r=n.items;return 0===r.length?t:(e(bg(t),r),rg(t,r[0]))},draw:Hg(r),pick:function(t,e,n,r,o,a){var u=e.items,s=e.bounds;return!u||!u.length||s&&!s.contains(o,a)?null:(n*=t.pixelRatio,r*=t.pixelRatio,i(t,u,n,r)?u[0]:null)},isect:Fg,tip:n}}var nm=em("area",(function(t,e){const n=e[0],r=n.interpolate||"linear";return("horizontal"===n.orient?jp:Pp).curve(ap(r,n.orient,n.tension)).context(t)(e)}),(function(t,e){for(var n,r,i="horizontal"===t[0].orient?e[1]:e[0],o="horizontal"===t[0].orient?"y":"x",a=t.length,u=1/0;--a>=0;)!1!==t[a].defined&&(r=Math.abs(t[a][o]-i)).5&&e<1.5?.5-Math.abs(e-1):0}function om(t,e){const n=im(e);t("d",Vp(null,e,n,n))}function am(t,e,n,r){const i=im(e);t.beginPath(),Vp(t,e,(n||0)+i,(r||0)+i)}const um=Gg(am),sm=Gg(am,!1),lm=Gg(am,!0);var cm={type:"group",tag:"g",nested:!1,attr:function(t,e){t("transform",Qg(e))},bound:function(t,e){if(!e.clip&&e.items){const n=e.items,r=n.length;for(let e=0;e{const r=e.x||0,i=e.y||0,o=e.strokeForeground,a=null==e.opacity?1:e.opacity;(e.stroke||e.fill)&&a&&(am(t,e,r,i),zg(t,e),e.fill&&Lg(t,e,a)&&t.fill(),e.stroke&&!o&&qg(t,e,a)&&t.stroke()),t.save(),t.translate(r,i),e.clip&&rm(t,e),n&&n.translate(-r,-i),Ig(e,(e=>{this.draw(t,e,n)})),n&&n.translate(r,i),t.restore(),o&&e.stroke&&a&&(am(t,e,r,i),zg(t,e),qg(t,e,a)&&t.stroke())}))},pick:function(t,e,n,r,i,o){if(e.bounds&&!e.bounds.contains(i,o)||!e.items)return null;const a=n*t.pixelRatio,u=r*t.pixelRatio;return $g(e,(s=>{let l,c,f;const h=s.bounds;if(h&&!h.contains(i,o))return;c=s.x||0,f=s.y||0;const d=c+(s.width||0),p=f+(s.height||0),g=s.clip;if(g&&(id||op))return;if(t.save(),t.translate(c,f),c=i-c,f=o-f,g&&Yp(s)&&!lm(t,s,a,u))return t.restore(),null;const m=s.strokeForeground,y=!1!==e.interactive;return y&&m&&s.stroke&&sm(t,s,a,u)?(t.restore(),s):(l=$g(s,(t=>function(t,e,n){return(!1!==t.interactive||"group"===t.marktype)&&t.bounds&&t.bounds.contains(e,n)}(t,c,f)?this.pick(t,n,r,c,f):null)),!l&&y&&(s.fill||!m&&s.stroke)&&um(t,s,a,u)&&(l=s),t.restore(),l||null)}))},isect:Sg,content:function(t,e,n){t("clip-path",e.clip?Jp(n,e,e):null)},background:function(t,e){t("class","background"),t("aria-hidden",!0),om(t,e)},foreground:function(t,e){t("class","foreground"),t("aria-hidden",!0),e.strokeForeground?om(t,e):t("d","")}},fm={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",version:"1.1"};function hm(t,e){var n=t.image;return(!n||t.url&&t.url!==n.url)&&(n={complete:!1,width:0,height:0},e.loadImage(t.url).then((e=>{t.image=e,t.image.url=t.url}))),n}function dm(t,e){return null!=t.width?t.width:e&&e.width?!1!==t.aspect&&t.height?t.height*e.width/e.height:e.width:0}function pm(t,e){return null!=t.height?t.height:e&&e.height?!1!==t.aspect&&t.width?t.width*e.height/e.width:e.height:0}function gm(t,e){return"center"===t?e/2:"right"===t?e:0}function mm(t,e){return"middle"===t?e/2:"bottom"===t?e:0}var ym={type:"image",tag:"image",nested:!1,attr:function(t,e,n){const r=hm(e,n),i=dm(e,r),o=pm(e,r),a=(e.x||0)-gm(e.align,i),u=(e.y||0)-mm(e.baseline,o);t("href",!r.src&&r.toDataURL?r.toDataURL():r.src||"",fm["xmlns:xlink"],"xlink:href"),t("transform",Jg(a,u)),t("width",i),t("height",o),t("preserveAspectRatio",!1===e.aspect?"none":"xMidYMid")},bound:function(t,e){const n=e.image,r=dm(e,n),i=pm(e,n),o=(e.x||0)-gm(e.align,r),a=(e.y||0)-mm(e.baseline,i);return t.set(o,a,o+r,a+i)},draw:function(t,e,n){Ig(e,(e=>{if(n&&!n.intersects(e.bounds))return;const r=hm(e,this);let i,o,a,u,s=dm(e,r),l=pm(e,r),c=(e.x||0)-gm(e.align,s),f=(e.y||0)-mm(e.baseline,l);!1!==e.aspect&&(o=r.width/r.height,a=e.width/e.height,o==o&&a==a&&o!==a&&(a=0;)if(!1!==t[o].defined&&(n=t[o].x-e[0])*n+(r=t[o].y-e[1])*r{if(!n||n.intersects(e.bounds)){var r=null==e.opacity?1:e.opacity;r&&km(t,e,r)&&(zg(t,e),t.stroke())}}))},pick:Vg((function(t,e,n,r){return!!t.isPointInStroke&&(km(t,e,1)&&t.isPointInStroke(n,r))})),isect:Bg},Am=Kg("shape",(function(t,e){return(e.mark.shape||e.shape).context(t)(e)})),Em=Kg("symbol",(function(t,e){return Wp.context(t)(e)}),Fg);const Dm=yt();var Cm={height:Nm,measureWidth:Tm,estimateWidth:Sm,width:Sm,canvas:Fm};function Fm(t){Cm.width=t&&Eg?Tm:Sm}function Sm(t,e){return Bm(Um(t,e),Nm(t))}function Bm(t,e){return~~(.8*t.length*e)}function Tm(t,e){return Nm(t)<=0||!(e=Um(t,e))?0:zm(e,Pm(t))}function zm(t,e){const n="(".concat(e,") ").concat(t);let r=Dm.get(n);return void 0===r&&(Eg.font=e,r=Eg.measureText(t).width,Dm.set(n,r)),r}function Nm(t){return null!=t.fontSize?+t.fontSize||0:11}function Om(t){return null!=t.lineHeight?t.lineHeight:Nm(t)+2}function Rm(t){return e=t.lineBreak&&t.text&&!v(t.text)?t.text.split(t.lineBreak):t.text,v(e)?e.length>1?e:e[0]:e;var e}function Lm(t){const e=Rm(t);return(v(e)?e.length-1:0)*Om(t)}function Um(t,e){const n=null==e?"":(e+"").trim();return t.limit>0&&n.length?function(t,e){var n=+t.limit,r=function(t){if(Cm.width===Tm){const e=Pm(t);return t=>zm(t,e)}{const e=Nm(t);return t=>Bm(t,e)}}(t);if(r(e)>>1,r(e.slice(i))>n?u=i+1:s=i;return o+e.slice(u)}for(;u>>1),r(e.slice(0,i))Math.max(t,Cm.width(e,n))),0)):r=Cm.width(e,f),"center"===o?l-=r/2:"right"===o&&(l-=r),t.set(l+=u,c+=s,l+r,c+i),e.angle&&!n)t.rotate(e.angle*cp,u,s);else if(2===n)return t.rotatedPoints(e.angle*cp,u,s);return t}var Ym={arc:tm,area:nm,group:cm,image:ym,line:vm,path:xm,rect:wm,rule:Mm,shape:Am,symbol:Em,text:{type:"text",tag:"text",nested:!1,attr:function(t,e){var n,r=e.dx||0,i=(e.dy||0)+jm(e),o=Wm(e),a=o.x1,u=o.y1,s=e.angle||0;t("text-anchor",Im[e.align]||"start"),s?(n=Jg(a,u)+" "+Zg(s),(r||i)&&(n+=" "+Jg(r,i))):n=Jg(a+r,u+i),t("transform",n)},bound:Hm,draw:function(t,e,n){Ig(e,(e=>{var r,i,o,a,u,s,l,c=null==e.opacity?1:e.opacity;if(!(n&&!n.intersects(e.bounds)||0===c||e.fontSize<=0||null==e.text||0===e.text.length)){if(t.font=Pm(e),t.textAlign=e.align||"left",i=(r=Wm(e)).x1,o=r.y1,e.angle&&(t.save(),t.translate(i,o),t.rotate(e.angle*cp),i=o=0),i+=e.dx||0,o+=(e.dy||0)+jm(e),s=Rm(e),zg(t,e),v(s))for(u=Om(e),a=0;a=0;)if(!1!==t[i].defined&&(n=t[i].x-e[0])*n+(r=t[i].y-e[1])*r<(n=t[i].size||1)*n)return t[i];return null}))};function Vm(t,e,n){var r=Ym[t.mark.marktype],i=e||r.bound;return r.nested&&(t=t.mark),i(t.bounds||(t.bounds=new Zp),t,n)}var Gm={mark:null};function Xm(t,e,n){var r,i,o,a,u=Ym[t.marktype],s=u.bound,l=t.items,c=l&&l.length;if(u.nested)return c?o=l[0]:(Gm.mark=t,o=Gm),a=Vm(o,s,n),e=e&&e.union(a)||a;if(e=e||t.bounds&&t.bounds.clear()||new Zp,c)for(r=0,i=l.length;re;)t.removeChild(n[--r]);return t}function ay(t){return"mark-"+t.marktype+(t.role?" role-"+t.role:"")+(t.name?" "+t.name:"")}function uy(t,e){const n=e.getBoundingClientRect();return[t.clientX-n.left-(e.clientLeft||0),t.clientY-n.top-(e.clientTop||0)]}function sy(t,e){this._active=null,this._handlers={},this._loader=t||Fo(),this._tooltip=e||ly}function ly(t,e,n,r){t.element().setAttribute("title",r||"")}function cy(t){this._el=null,this._bgcolor=null,this._loader=new tg(t)}ty.prototype={toJSON(t){return Zm(this.root,t||0)},mark(t,e,n){const r=ey(t,e=e||this.root.items[0]);return e.items[n]=r,r.zindex&&(r.group.zdirty=!0),r}},sy.prototype={initialize(t,e,n){return this._el=t,this._obj=n||null,this.origin(e)},element(){return this._el},canvas(){return this._el&&this._el.firstChild},origin(t){return arguments.length?(this._origin=t||[0,0],this):this._origin.slice()},scene(t){return arguments.length?(this._scene=t,this):this._scene},on(){},off(){},_handlerIndex(t,e,n){for(let r=t?t.length:0;--r>=0;)if(t[r].type===e&&(!n||t[r].handler===n))return r;return-1},handlers(t){const e=this._handlers,n=[];if(t)n.push(...e[this.eventName(t)]);else for(const t in e)n.push(...e[t]);return n},eventName(t){const e=t.indexOf(".");return e<0?t:t.slice(0,e)},handleHref(t,e,n){this._loader.sanitize(n,{context:"href"}).then((e=>{const n=new MouseEvent(t.type,t),r=ny(null,"a");for(const t in e)r.setAttribute(t,e[t]);r.dispatchEvent(n)})).catch((()=>{}))},handleTooltip(t,e,n){if(e&&null!=e.tooltip){e=function(t,e,n,r){var i,o,a=t&&t.mark;if(a&&(i=Ym[a.marktype]).tip){for((o=uy(e,n))[0]-=r[0],o[1]-=r[1];t=t.mark.group;)o[0]-=t.x||0,o[1]-=t.y||0;t=i.tip(a.items,o)}return t}(e,t,this.canvas(),this._origin);const r=n&&e&&e.tooltip||null;this._tooltip.call(this._obj,this,t,e,r)}},getItemBoundingClientRect(t){const e=this.canvas();if(!e)return;const n=e.getBoundingClientRect(),r=this._origin,i=t.bounds,o=i.width(),a=i.height();let u=i.x1+r[0]+n.left,s=i.y1+r[1]+n.top;for(;t.mark&&(t=t.mark.group);)u+=t.x||0,s+=t.y||0;return{x:u,y:s,width:o,height:a,left:u,top:s,right:u+o,bottom:s+a}}},cy.prototype={initialize(t,e,n,r,i){return this._el=t,this.resize(e,n,r,i)},element(){return this._el},canvas(){return this._el&&this._el.firstChild},background(t){return 0===arguments.length?this._bgcolor:(this._bgcolor=t,this)},resize(t,e,n,r){return this._width=t,this._height=e,this._origin=n||[0,0],this._scale=r||1,this},dirty(){},render(t){const e=this;return e._call=function(){e._render(t)},e._call(),e._call=null,e},_render(){},renderAsync(t){const e=this.render(t);return this._ready?this._ready.then((()=>e)):Promise.resolve(e)},_load(t,e){var n=this,r=n._loader[t](e);if(!n._ready){const t=n._call;n._ready=n._loader.ready().then((e=>{e&&t(),n._ready=null}))}return r},sanitizeURL(t){return this._load("sanitizeURL",t)},loadImage(t){return this._load("loadImage",t)}};const fy="dragenter",hy="dragleave",dy="dragover",py="mousedown",gy="mousemove",my="mouseout",yy="mouseover",vy="click",_y="mousewheel",xy="touchstart",by="touchmove",wy="touchend",ky=gy,My=my,Ay=vy;function Ey(t,e){sy.call(this,t,e),this._down=null,this._touch=null,this._first=!0,this._events={}}function Dy(t,e){(t=>t===xy||t===by||t===wy?[xy,by,wy]:[t])(e).forEach((e=>function(t,e){const n=t.canvas();n&&!t._events[e]&&(t._events[e]=1,n.addEventListener(e,t[e]?n=>t[e](n):n=>t.fire(e,n)))}(t,e)))}function Cy(t,e,n){return function(r){const i=this._active,o=this.pickEvent(r);o===i||(i&&i.exit||this.fire(n,r),this._active=o,this.fire(e,r)),this.fire(t,r)}}function Fy(t){return function(e){this.fire(t,e),this._active=null}}ut(Ey,sy,{initialize(t,e,n){return this._canvas=t&&ry(t,"canvas"),[vy,py,gy,my,hy].forEach((t=>Dy(this,t))),sy.prototype.initialize.call(this,t,e,n)},canvas(){return this._canvas},context(){return this._canvas.getContext("2d")},events:["keydown","keypress","keyup",fy,hy,dy,py,"mouseup",gy,my,yy,vy,"dblclick","wheel",_y,xy,by,wy],DOMMouseScroll(t){this.fire(_y,t)},mousemove:Cy(gy,yy,my),dragover:Cy(dy,fy,hy),mouseout:Fy(my),dragleave:Fy(hy),mousedown(t){this._down=this._active,this.fire(py,t)},click(t){this._down===this._active&&(this.fire(vy,t),this._down=null)},touchstart(t){this._touch=this.pickEvent(t.changedTouches[0]),this._first&&(this._active=this._touch,this._first=!1),this.fire(xy,t,!0)},touchmove(t){this.fire(by,t,!0)},touchend(t){this.fire(wy,t,!0),this._touch=null},fire(t,e,n){const r=n?this._touch:this._active,i=this._handlers[t];if(e.vegaType=t,t===Ay&&r&&r.href?this.handleHref(e,r,r.href):t!==ky&&t!==My||this.handleTooltip(e,r,t!==My),i)for(let t=0,n=i.length;t=0&&r.splice(i,1),this},pickEvent(t){const e=uy(t,this._canvas),n=this._origin;return this.pick(this._scene,e[0],e[1],e[0]-n[0],e[1]-n[1])},pick(t,e,n,r,i){const o=this.context();return Ym[t.marktype].pick.call(this,o,t,e,n,r,i)}});var Sy="undefined"!=typeof window&&window.devicePixelRatio||1;function By(t){cy.call(this,t),this._options={},this._redraw=!1,this._dirty=new Zp,this._tempb=new Zp}const Ty=cy.prototype;function zy(t,e){sy.call(this,t,e);const n=this;n._hrefHandler=Ny(n,((t,e)=>{e&&e.href&&n.handleHref(t,e,e.href)})),n._tooltipHandler=Ny(n,((t,e)=>{n.handleTooltip(t,e,t.type!==My)}))}ut(By,cy,{initialize(t,e,n,r,i,o){return this._options=o||{},this._canvas=this._options.externalContext?null:Gl(1,1,this._options.type),t&&this._canvas&&(oy(t,0).appendChild(this._canvas),this._canvas.setAttribute("class","marks")),Ty.initialize.call(this,t,e,n,r,i)},resize(t,e,n,r){if(Ty.resize.call(this,t,e,n,r),this._canvas)!function(t,e,n,r,i,o){const a="undefined"!=typeof HTMLElement&&t instanceof HTMLElement&&null!=t.parentNode,u=t.getContext("2d"),s=a?Sy:i;t.width=e*s,t.height=n*s;for(const t in o)u[t]=o[t];a&&1!==s&&(t.style.width=e+"px",t.style.height=n+"px"),u.pixelRatio=s,u.setTransform(s,0,0,s,s*r[0],s*r[1])}(this._canvas,this._width,this._height,this._origin,this._scale,this._options.context);else{const t=this._options.externalContext;t||u("CanvasRenderer is missing a valid canvas or context"),t.scale(this._scale,this._scale),t.translate(this._origin[0],this._origin[1])}return this._redraw=!0,this},canvas(){return this._canvas},context(){return this._options.externalContext||(this._canvas?this._canvas.getContext("2d"):null)},dirty(t){const e=this._tempb.clear().union(t.bounds);let n=t.mark.group;for(;n;)e.translate(n.x||0,n.y||0),n=n.mark.group;this._dirty.union(e)},_render(t){const e=this.context(),n=this._origin,r=this._width,i=this._height,o=this._dirty,a=((t,e,n)=>(new Zp).set(0,0,e,n).translate(-t[0],-t[1]))(n,r,i);e.save();const u=this._redraw||o.empty()?(this._redraw=!1,a.expand(1)):function(t,e,n){return e.expand(1).round(),t.pixelRatio%1&&e.scale(t.pixelRatio).round().scale(1/t.pixelRatio),e.translate(-n[0]%1,-n[1]%1),t.beginPath(),t.rect(e.x1,e.y1,e.width(),e.height()),t.clip(),e}(e,a.intersect(o),n);return this.clear(-n[0],-n[1],r,i),this.draw(e,t,u),e.restore(),o.clear(),this},draw(t,e,n){const r=Ym[e.marktype];e.clip&&function(t,e){var n=e.clip;t.save(),H(n)?(t.beginPath(),n(t),t.clip()):rm(t,e.group)}(t,e),r.draw.call(this,t,e,n),e.clip&&t.restore()},clear(t,e,n,r){const i=this._options,o=this.context();"pdf"===i.type||i.externalContext||o.clearRect(t,e,n,r),null!=this._bgcolor&&(o.fillStyle=this._bgcolor,o.fillRect(t,e,n,r))}});const Ny=(t,e)=>n=>{let r=n.target.__data__;r=Array.isArray(r)?r[0]:r,n.vegaType=n.type,e.call(t._obj,n,r)};ut(zy,sy,{initialize(t,e,n){let r=this._svg;return r&&(r.removeEventListener(Ay,this._hrefHandler),r.removeEventListener(ky,this._tooltipHandler),r.removeEventListener(My,this._tooltipHandler)),this._svg=r=t&&ry(t,"svg"),r&&(r.addEventListener(Ay,this._hrefHandler),r.addEventListener(ky,this._tooltipHandler),r.addEventListener(My,this._tooltipHandler)),sy.prototype.initialize.call(this,t,e,n)},canvas(){return this._svg},on(t,e){const n=this.eventName(t),r=this._handlers;if(this._handlerIndex(r[n],t,e)<0){const i={type:t,handler:e,listener:Ny(this,e)};(r[n]||(r[n]=[])).push(i),this._svg&&this._svg.addEventListener(n,i.listener)}return this},off(t,e){const n=this.eventName(t),r=this._handlers[n],i=this._handlerIndex(r,t,e);return i>=0&&(this._svg&&this._svg.removeEventListener(n,r[i].listener),r.splice(i,1)),this}});const Oy="aria-hidden",Ry="aria-label",Ly="role",Uy="aria-roledescription",qy="graphics-object",Py="graphics-symbol",jy=(t,e,n)=>({[Ly]:t,[Uy]:e,[Ry]:n||void 0}),Iy=Dt(["axis-domain","axis-grid","axis-label","axis-tick","axis-title","legend-band","legend-entry","legend-gradient","legend-label","legend-title","legend-symbol","title"]),$y={axis:{desc:"axis",caption:function(t){const e=t.datum,n=t.orient,r=e.title?Gy(t):null,i=t.context,o=i.scales[e.scale].value,a=i.dataflow.locale(),u=o.type;return"".concat("left"===n||"right"===n?"Y":"X","-axis")+(r?" titled '".concat(r,"'"):"")+" for a ".concat(vd(u)?"discrete":u," scale")+" with ".concat(Qd(a,o,t))}},legend:{desc:"legend",caption:function(t){const e=t.datum,n=e.title?Gy(t):null,r="".concat(e.type||""," legend").trim(),i=e.scales,o=Object.keys(i),a=t.context,u=a.scales[i[o[0]]].value,s=a.dataflow.locale();return l=r,(l.length?l[0].toUpperCase()+l.slice(1):l)+(n?" titled '".concat(n,"'"):"")+" for ".concat(function(t){return(t=t.map((t=>t+("fill"===t||"stroke"===t?" color":"")))).length<2?t[0]:t.slice(0,-1).join(", ")+" and "+M(t)}(o))+" with ".concat(Qd(s,u,t));var l}},"title-text":{desc:"title",caption:t=>"Title text '".concat(Vy(t),"'")},"title-subtitle":{desc:"subtitle",caption:t=>"Subtitle text '".concat(Vy(t),"'")}},Wy={ariaRole:Ly,ariaRoleDescription:Uy,description:Ry};function Hy(t,e){const n=!1===e.aria;if(t(Oy,n||void 0),n||null==e.description)for(const e in Wy)t(Wy[e],void 0);else{const n=e.mark.marktype;t(Ry,e.description),t(Ly,e.ariaRole||("group"===n?qy:Py)),t(Uy,e.ariaRoleDescription||"".concat(n," mark"))}}function Yy(t){return!1===t.aria?{[Oy]:!0}:Iy[t.role]?null:$y[t.role]?function(t,e){try{const n=t.items[0],r=e.caption||(()=>"");return jy(e.role||Py,e.desc,n.description||r(n))}catch(t){return null}}(t,$y[t.role]):function(t){const e=t.marktype,n="group"===e||"text"===e||t.items.some((t=>null!=t.description&&!1!==t.aria));return jy(n?qy:Py,"".concat(e," mark container"),t.description)}(t)}function Vy(t){return $(t.text).join(" ")}function Gy(t){try{return $(M(t.items).items[0].text).join(" ")}catch(t){return null}}const Xy=t=>(t+"").replace(/&/g,"&").replace(//g,">");function Jy(){let t="",e="",n="";const r=[],i=()=>e=n="",o=(t,n)=>(null!=n&&(e+=" ".concat(t,'="').concat(Xy(n).replace(/"/g,""").replace(/\t/g," ").replace(/\n/g," ").replace(/\r/g," "),'"')),a),a={open(u,...s){(o=>{e&&(t+="".concat(e,">").concat(n),i()),r.push(o)})(u),e="<"+u;for(const t of s)for(const e in t)o(e,t[e]);return a},close(){const o=r.pop();return t+=e?e+(n?">".concat(n,""):"/>"):""),i(),a},attr:o,text:t=>(n+=Xy(t),a),toString:()=>t};return a}const Zy=t=>Qy(Jy(),t)+"";function Qy(t,e){if(t.open(e.tagName),e.hasAttributes()){const n=e.attributes,r=n.length;for(let e=0;e1&&t.previousSibling!=e}(a,n))&&e.insertBefore(a,n?n.nextSibling:e.firstChild),a}ut(nv,cy,{initialize(t,e,n,r,i){return this._defs={},this._clearDefs(),t&&(this._svg=iy(t,0,"svg",ev),dv(this._svg,fm),this._svg.setAttribute("class","marks"),oy(t,1),this._root=iy(this._svg,0,"g",ev),dv(this._root,tv),oy(this._svg,1)),this.background(this._bgcolor),rv.initialize.call(this,t,e,n,r,i)},background(t){return arguments.length&&this._svg&&this._svg.style.setProperty("background-color",t),rv.background.apply(this,arguments)},resize(t,e,n,r){return rv.resize.call(this,t,e,n,r),this._svg&&(dv(this._svg,{width:this._width*this._scale,height:this._height*this._scale,viewBox:"0 0 ".concat(this._width," ").concat(this._height)}),this._root.setAttribute("transform","translate(".concat(this._origin,")"))),this._dirty=[],this},canvas(){return this._svg},svg(){const t=this._svg,e=this._bgcolor;if(!t)return null;let n;e&&(t.removeAttribute("style"),n=iy(t,0,"rect",ev),dv(n,{width:this._width,height:this._height,fill:e}));const r=Zy(t);return e&&(t.removeChild(n),this._svg.style.setProperty("background-color",e)),r},_render(t){return this._dirtyCheck()&&(this._dirtyAll&&this._clearDefs(),this.mark(this._root,t),oy(this._root,1)),this.defs(),this._dirty=[],++this._dirtyID,this},dirty(t){t.dirty!==this._dirtyID&&(t.dirty=this._dirtyID,this._dirty.push(t))},isDirty(t){return this._dirtyAll||!t._svg||t.dirty===this._dirtyID},_dirtyCheck(){this._dirtyAll=!0;const t=this._dirty;if(!t.length||!this._dirtyID)return!0;const e=++this._dirtyID;let n,r,i,o,a,u,s;for(a=0,u=t.length;a{t.dirty=e}))),r.zdirty||(n.exit?(o.nested&&r.items.length?(s=r.items[0],s._svg&&this._update(o,s._svg,s)):n._svg&&(s=n._svg.parentNode,s&&s.removeChild(n._svg)),n._svg=null):(n=o.nested?r.items[0]:n,n._update!==e&&(n._svg&&n._svg.ownerSVGElement?this._update(o,n._svg,n):(this._dirtyAll=!1,iv(n,e)),n._update=e)));return!this._dirtyAll},mark(t,e,n){if(!this.isDirty(e))return e._svg;const r=this._svg,i=Ym[e.marktype],o=!1===e.interactive?"none":null,a="g"===i.tag;let u=null,s=0;const l=uv(e,t,n,"g",r);l.setAttribute("class",ay(e));const c=Yy(e);for(const t in c)pv(l,t,c[t]);a||pv(l,"pointer-events",o),pv(l,"clip-path",e.clip?Jp(this,e,e.group):null);const f=t=>{const e=this.isDirty(t),n=uv(t,l,u,i.tag,r);e&&(this._update(i,n,t),a&&function(t,e,n){e=e.lastChild.previousSibling;let r,i=0;Ig(n,(n=>{r=t.mark(e,n,r),++i})),oy(e,1+i)}(this,n,t)),u=n,++s};return i.nested?e.items.length&&f(e.items[0]):Ig(e,f),oy(l,s),l},_update(t,e,n){sv=e,lv=e.__values__,Hy(fv,n),t.attr(fv,n,this);const r=cv[t.type];r&&r.call(this,t,e,n),sv&&this.style(sv,n)},style(t,e){if(null!=e)for(const n in Ky){let r="font"===n?qm(e):e[n];if(r===lv[n])continue;const i=Ky[n];null==r?t.removeAttribute(i):(ep(r)&&(r=np(r,this._defs.gradient,gv())),t.setAttribute(i,r+"")),lv[n]=r}},defs(){const t=this._svg,e=this._defs;let n=e.el,r=0;for(const i in e.gradient)n||(e.el=n=iy(t,1,"defs",ev)),r=ov(n,e.gradient[i],r);for(const i in e.clipping)n||(e.el=n=iy(t,1,"defs",ev)),r=av(n,e.clipping[i],r);n&&(0===r?(t.removeChild(n),e.el=null):oy(n,r))},_clearDefs(){const t=this._defs;t.gradient={},t.clipping={}}});let sv=null,lv=null;const cv={group(t,e,n){const r=sv=e.childNodes[2];lv=r.__values__,t.foreground(fv,n,this),lv=e.__values__,sv=e.childNodes[1],t.content(fv,n,this);const i=sv=e.childNodes[0];t.background(fv,n,this);const o=!1===n.mark.interactive?"none":null;if(o!==lv.events&&(pv(r,"pointer-events",o),pv(i,"pointer-events",o),lv.events=o),n.strokeForeground&&n.stroke){const t=n.fill;pv(r,"display",null),this.style(i,n),pv(i,"stroke",null),t&&(n.fill=null),lv=r.__values__,this.style(r,n),t&&(n.fill=t),sv=null}else pv(r,"display","none")},image(t,e,n){!1===n.smooth?(hv(e,"image-rendering","optimizeSpeed"),hv(e,"image-rendering","pixelated")):hv(e,"image-rendering",null)},text(t,e,n){const r=Rm(n);let i,o,a,u;v(r)?(o=r.map((t=>Um(n,t))),i=o.join("\n"),i!==lv.text&&(oy(e,0),a=e.ownerDocument,u=Om(n),o.forEach(((t,r)=>{const i=ny(a,"tspan",ev);i.__data__=n,i.textContent=t,r&&(i.setAttribute("x",0),i.setAttribute("dy",u)),e.appendChild(i)})),lv.text=i)):(o=Um(n,r),o!==lv.text&&(e.textContent=o,lv.text=o)),pv(e,"font-family",qm(n)),pv(e,"font-size",Nm(n)+"px"),pv(e,"font-style",n.fontStyle),pv(e,"font-variant",n.fontVariant),pv(e,"font-weight",n.fontWeight)}};function fv(t,e,n){e!==lv[t]&&(n?function(t,e,n,r){null!=n?t.setAttributeNS(r,e,n):t.removeAttributeNS(r,e)}(sv,t,e,n):pv(sv,t,e),lv[t]=e)}function hv(t,e,n){n!==lv[e]&&(null==n?t.style.removeProperty(e):t.style.setProperty(e,n+""),lv[e]=n)}function dv(t,e){for(const n in e)pv(t,n,e[n])}function pv(t,e,n){null!=n?t.setAttribute(e,n):t.removeAttribute(e)}function gv(){let t;return"undefined"==typeof window?"":(t=window.location).hash?t.href.slice(0,-t.hash.length):t.href}function mv(t){cy.call(this,t),this._text=null,this._defs={gradient:{},clipping:{}}}ut(mv,cy,{svg(){return this._text},_render(t){const e=Jy();e.open("svg",K({},fm,{class:"marks",width:this._width*this._scale,height:this._height*this._scale,viewBox:"0 0 ".concat(this._width," ").concat(this._height)}));const n=this._bgcolor;return n&&"transparent"!==n&&"none"!==n&&e.open("rect",{width:this._width,height:this._height,fill:n}).close(),e.open("g",tv,{transform:"translate("+this._origin+")"}),this.mark(e,t),e.close(),this.defs(e),this._text=e.close()+"",this},mark(t,e){const n=Ym[e.marktype],r=n.tag,i=[Hy,n.attr];t.open("g",{class:ay(e),"clip-path":e.clip?Jp(this,e,e.group):null},Yy(e),{"pointer-events":"g"!==r&&!1===e.interactive?"none":null});const o=o=>{const a=this.href(o);if(a&&t.open("a",a),t.open(r,this.attr(e,o,i,"g"!==r?r:null)),"text"===r){const e=Rm(o);if(v(e)){const n={x:0,dy:Om(o)};for(let r=0;rthis.mark(t,e))),t.close(),r&&a?(i&&(o.fill=null),o.stroke=a,t.open("path",this.attr(e,o,n.foreground,"bgrect")).close(),i&&(o.fill=i)):t.open("path",this.attr(e,o,n.foreground,"bgfore")).close()}t.close(),a&&t.close()};return n.nested?e.items&&e.items.length&&o(e.items[0]):Ig(e,o),t.close()},href(t){const e=t.href;let n;if(e){if(n=this._hrefs&&this._hrefs[e])return n;this.sanitizeURL(e).then((t=>{t["xlink:href"]=t.href,t.href=null,(this._hrefs||(this._hrefs={}))[e]=t}))}return null},attr(t,e,n,r){const i={},o=(t,e,n,r)=>{i[r||t]=e};return Array.isArray(n)?n.forEach((t=>t(o,e,this))):n(o,e,this),r&&function(t,e,n,r,i){if(null==e)return t;"bgrect"===r&&!1===n.interactive&&(t["pointer-events"]="none");if("bgfore"===r&&(!1===n.interactive&&(t["pointer-events"]="none"),t.display="none",null!==e.fill))return t;"image"===r&&!1===e.smooth&&(t.style="image-rendering: optimizeSpeed; image-rendering: pixelated;");"text"===r&&(t["font-family"]=qm(e),t["font-size"]=Nm(e)+"px",t["font-style"]=e.fontStyle,t["font-variant"]=e.fontVariant,t["font-weight"]=e.fontWeight);for(const n in Ky){let r=e[n];const o=Ky[n];("transparent"!==r||"fill"!==o&&"stroke"!==o)&&null!=r&&(ep(r)&&(r=np(r,i.gradient,"")),t[o]=r)}}(i,e,t,r,this._defs),i},defs(t){const e=this._defs.gradient,n=this._defs.clipping;if(0!==Object.keys(e).length+Object.keys(n).length){t.open("defs");for(const n in e){const r=e[n],i=r.stops;"radial"===r.gradient?(t.open("pattern",{id:tp+n,viewBox:"0,0,1,1",width:"100%",height:"100%",preserveAspectRatio:"xMidYMid slice"}),t.open("rect",{width:"1",height:"1",fill:"url(#"+n+")"}).close(),t.close(),t.open("radialGradient",{id:n,fx:r.x1,fy:r.y1,fr:r.r1,cx:r.x2,cy:r.y2,r:r.r2})):t.open("linearGradient",{id:n,x1:r.x1,x2:r.x2,y1:r.y1,y2:r.y2});for(let e=0;e1?(xv[t]=e,this):xv[t]}function wv(t,e,n){const r=[],i=(new Zp).union(e),o=t.marktype;return o?kv(t,i,n,r):"group"===o?Mv(t,i,n,r):u("Intersect scene must be mark node or group item.")}function kv(t,e,n,r){if(function(t,e,n){return t.bounds&&e.intersects(t.bounds)&&("group"===t.marktype||!1!==t.interactive&&(!n||n(t)))}(t,e,n)){const i=t.items,o=t.marktype,a=i.length;let u=0;if("group"===o)for(;u=0;r--)if(i[r]!=o[r])return!1;for(r=i.length-1;r>=0;r--)if(!Cv(t[n=i[r]],e[n],n))return!1;return typeof t==typeof e}(t,e):t==e)}function Fv(t,e){return Cv(lp(t),lp(e))}const Sv="top",Bv="left",Tv="right",zv="bottom",Nv="start",Ov="middle",Rv="end",Lv="group",Uv="axis",qv="title",Pv="frame",jv="scope",Iv="legend",$v="row-header",Wv="row-footer",Hv="row-title",Yv="column-header",Vv="column-footer",Gv="column-title",Xv="padding",Jv="fit",Zv="fit-x",Qv="fit-y",Kv="none",t_="all",e_="each",n_="flush",r_="column",i_="row";function o_(t){pa.call(this,null,t)}function a_(t,e,n){return e(t.bounds.clear(),t,n)}ut(o_,pa,{transform(t,e){const n=e.dataflow,r=t.mark,i=r.marktype,o=Ym[i],a=o.bound;let u,s=r.bounds;if(o.nested)r.items.length&&n.dirty(r.items[0]),s=a_(r,a),r.items.forEach((t=>{t.bounds.clear().union(s)}));else if(i===Lv||t.modified())switch(e.visit(e.MOD,(t=>n.dirty(t))),s.clear(),r.items.forEach((t=>s.union(a_(t,a)))),r.role){case Uv:case Iv:case qv:e.reflow()}else u=e.changed(e.REM),e.visit(e.ADD,(t=>{s.union(a_(t,a))})),e.visit(e.MOD,(t=>{u=u||s.alignsWith(t.bounds),n.dirty(t),s.union(a_(t,a))})),u&&(s.clear(),r.items.forEach((t=>s.union(t.bounds))));return Dv(r),e.modifies("bounds")}});const u_=":vega_identifier:";function s_(t){pa.call(this,0,t)}function l_(t){pa.call(this,null,t)}function c_(t){pa.call(this,null,t)}s_.Definition={type:"Identifier",metadata:{modifies:!0},params:[{name:"as",type:"string",required:!0}]},ut(s_,pa,{transform(t,e){const n=(i=e.dataflow)._signals[u_]||(i._signals[u_]=i.add(0)),r=t.as;var i;let o=n.value;return e.visit(e.ADD,(t=>t[r]=t[r]||++o)),n.set(this.value=o),e}}),ut(l_,pa,{transform(t,e){let n=this.value;n||(n=e.dataflow.scenegraph().mark(t.markdef,function(t){const e=t.groups,n=t.parent;return e&&1===e.size?e.get(Object.keys(e.object)[0]):e&&n?e.lookup(n):null}(t),t.index),n.group.context=t.context,t.context.group||(t.context.group=n.group),n.source=this.source,n.clip=t.clip,n.interactive=t.interactive,this.value=n);const r=n.marktype===Lv?Kp:Qp;return e.visit(e.ADD,(t=>r.call(t,n))),(t.modified("clip")||t.modified("interactive"))&&(n.clip=t.clip,n.interactive=!!t.interactive,n.zdirty=!0,e.reflow()),n.items=e.source,e}});const f_={parity:t=>t.filter(((t,e)=>e%2?t.opacity=0:1)),greedy:(t,e)=>{let n;return t.filter(((t,r)=>r&&h_(n.bounds,t.bounds,e)?t.opacity=0:(n=t,1)))}},h_=(t,e,n)=>n>Math.max(e.x1-t.x2,t.x1-e.x2,e.y1-t.y2,t.y1-e.y2),d_=(t,e)=>{for(var n,r=1,i=t.length,o=t[0].bounds;r{const e=t.bounds;return e.width()>1&&e.height()>1},g_=t=>(t.forEach((t=>t.opacity=1)),t),m_=(t,e)=>t.reflow(e.modified()).modifies("opacity");function y_(t){pa.call(this,null,t)}ut(c_,pa,{transform(t,e){const n=f_[t.method]||f_.parity,r=t.separation||0;let i,o,a=e.materialize(e.SOURCE).source;if(!a||!a.length)return;if(!t.method)return t.modified("method")&&(g_(a),e=m_(e,t)),e;if(a=a.filter(p_),!a.length)return;if(t.sort&&(a=a.slice().sort(t.sort)),i=g_(a),e=m_(e,t),i.length>=3&&d_(i,r)){do{i=n(i,r)}while(i.length>=3&&d_(i,r));i.length<3&&!M(a).opacity&&(i.length>1&&(M(i).opacity=0),M(a).opacity=1)}t.boundScale&&t.boundTolerance>=0&&(o=((t,e,n)=>{var r=t.range(),i=new Zp;return e===Sv||e===zv?i.set(r[0],-1/0,r[1],1/0):i.set(-1/0,r[0],1/0,r[1]),i.expand(n||1),t=>i.encloses(t.bounds)})(t.boundScale,t.boundOrient,+t.boundTolerance),a.forEach((t=>{o(t)||(t.opacity=0)})));const u=i[0].mark.bounds.clear();return a.forEach((t=>{t.opacity&&u.union(t.bounds)})),e}}),ut(y_,pa,{transform(t,e){const n=e.dataflow;if(e.visit(e.ALL,(t=>n.dirty(t))),e.fields&&e.fields.zindex){const t=e.source&&e.source[0];t&&(t.mark.zdirty=!0)}}});const v_=new Zp;function __(t,e,n){return t[e]===n?0:(t[e]=n,1)}function x_(t){var e=t.items[0].orient;return e===Bv||e===Tv}function b_(t,e,n,r){var i,o,a=e.items[0],u=a.datum,s=null!=a.translate?a.translate:.5,l=a.orient,c=function(t){let e=+t.grid;return[t.ticks?e++:-1,t.labels?e++:-1,e+ +t.domain]}(u),f=a.range,h=a.offset,d=a.position,p=a.minExtent,g=a.maxExtent,m=u.title&&a.items[c[2]].items[0],y=a.titlePadding,v=a.bounds,_=m&&Lm(m),x=0,b=0;switch(v_.clear().union(v),v.clear(),(i=c[0])>-1&&v.union(a.items[i].bounds),(i=c[1])>-1&&v.union(a.items[i].bounds),l){case Sv:x=d||0,b=-h,o=Math.max(p,Math.min(g,-v.y1)),v.add(0,-o).add(f,0),m&&w_(t,m,o,y,_,0,-1,v);break;case Bv:x=-h,b=d||0,o=Math.max(p,Math.min(g,-v.x1)),v.add(-o,0).add(0,f),m&&w_(t,m,o,y,_,1,-1,v);break;case Tv:x=n+h,b=d||0,o=Math.max(p,Math.min(g,v.x2)),v.add(0,0).add(o,f),m&&w_(t,m,o,y,_,1,1,v);break;case zv:x=d||0,b=r+h,o=Math.max(p,Math.min(g,v.y2)),v.add(0,0).add(f,o),m&&w_(t,m,o,y,0,0,1,v);break;default:x=a.x,b=a.y}return rg(v.translate(x,b),a),__(a,"x",x+s)|__(a,"y",b+s)&&(a.bounds=v_,t.dirty(a),a.bounds=v,t.dirty(a)),a.mark.bounds.clear().union(v)}function w_(t,e,n,r,i,o,a,u){const s=e.bounds;if(e.auto){const u=a*(n+i+r);let l=0,c=0;t.dirty(e),o?l=(e.x||0)-(e.x=u):c=(e.y||0)-(e.y=u),e.mark.bounds.clear().union(s.translate(-l,-c)),t.dirty(e)}u.union(s)}const k_=(t,e)=>Math.floor(Math.min(t,e)),M_=(t,e)=>Math.ceil(Math.max(t,e));function A_(t){return(new Zp).set(0,0,t.width||0,t.height||0)}function E_(t){const e=t.bounds.clone();return e.empty()?e.set(0,0,0,0):e.translate(-(t.x||0),-(t.y||0))}function D_(t,e,n){const r=_(t)?t[e]:t;return null!=r?r:void 0!==n?n:0}function C_(t){return t<0?Math.ceil(-t):0}function F_(t,e,n){var r,i,o,a,u,s,l,c,f,h,d,p=!n.nodirty,g=n.bounds===n_?A_:E_,m=v_.set(0,0,0,0),y=D_(n.align,r_),v=D_(n.align,i_),_=D_(n.padding,r_),x=D_(n.padding,i_),b=n.columns||e.length,w=b<=0?1:Math.ceil(e.length/b),k=e.length,M=Array(k),A=Array(b),E=0,D=Array(k),C=Array(w),F=0,S=Array(k),B=Array(k),T=Array(k);for(i=0;i1)for(i=0;i0&&(S[i]+=f/2);if(v&&D_(n.center,i_)&&1!==b)for(i=0;i0&&(B[i]+=h/2);for(i=0;ii&&(t.warn("Grid headers exceed limit: "+i),e=e.slice(0,i)),M+=o,g=0,y=e.length;g=0&&null==(x=n[m]);m-=h);u?(b=null==d?x.x:Math.round(x.bounds.x1+d*x.bounds.width()),w=M):(b=M,w=null==d?x.y:Math.round(x.bounds.y1+d*x.bounds.height())),v.union(_.bounds.translate(b-(_.x||0),w-(_.y||0))),_.x=b,_.y=w,t.dirty(_),A=a(A,v[l])}return A}function N_(t,e,n,r,i,o){if(e){t.dirty(e);var a=n,u=n;r?a=Math.round(i.x1+o*i.width()):u=Math.round(i.y1+o*i.height()),e.bounds.translate(a-(e.x||0),u-(e.y||0)),e.mark.bounds.clear().union(e.bounds),e.x=a,e.y=u,t.dirty(e)}}function O_(t,e,n,r,i,o,a){const u=function(t,e){const n=t[e]||{};return(e,r)=>null!=n[e]?n[e]:null!=t[e]?t[e]:r}(n,e),s=function(t,e){let n=-1/0;return t.forEach((t=>{null!=t.offset&&(n=Math.max(n,t.offset))})),n>-1/0?n:e}(t,u("offset",0)),l=u("anchor",Nv),c=l===Rv?1:l===Ov?.5:0,f={align:e_,bounds:u("bounds",n_),columns:"vertical"===u("direction")?1:t.length,padding:u("margin",8),center:u("center"),nodirty:!0};switch(e){case Bv:f.anchor={x:Math.floor(r.x1)-s,column:Rv,y:c*(a||r.height()+2*r.y1),row:l};break;case Tv:f.anchor={x:Math.ceil(r.x2)+s,y:c*(a||r.height()+2*r.y1),row:l};break;case Sv:f.anchor={y:Math.floor(i.y1)-s,row:Rv,x:c*(o||i.width()+2*i.x1),column:l};break;case zv:f.anchor={y:Math.ceil(i.y2)+s,x:c*(o||i.width()+2*i.x1),column:l};break;case"top-left":f.anchor={x:s,y:s};break;case"top-right":f.anchor={x:o-s,y:s,column:Rv};break;case"bottom-left":f.anchor={x:s,y:a-s,row:Rv};break;case"bottom-right":f.anchor={x:o-s,y:a-s,column:Rv,row:Rv}}return f}function R_(t,e){var n,r,i=e.items[0],o=i.datum,a=i.orient,u=i.bounds,s=i.x,l=i.y;return i._bounds?i._bounds.clear().union(u):i._bounds=u.clone(),u.clear(),function(t,e,n){var r=e.padding,i=r-n.x,o=r-n.y;if(e.datum.title){var a=e.items[1].items[0],u=a.anchor,s=e.titlePadding||0,l=r-a.x,c=r-a.y;switch(a.orient){case Bv:i+=Math.ceil(a.bounds.width())+s;break;case Tv:case zv:break;default:o+=a.bounds.height()+s}switch((i||o)&&U_(t,n,i,o),a.orient){case Bv:c+=L_(e,n,a,u,1,1);break;case Tv:l+=L_(e,n,a,Rv,0,0)+s,c+=L_(e,n,a,u,1,1);break;case zv:l+=L_(e,n,a,u,0,0),c+=L_(e,n,a,Rv,-1,0,1)+s;break;default:l+=L_(e,n,a,u,0,0)}(l||c)&&U_(t,a,l,c),(l=Math.round(a.bounds.x1-r))<0&&(U_(t,n,-l,0),U_(t,a,-l,0))}else(i||o)&&U_(t,n,i,o)}(t,i,i.items[0].items[0]),u=function(t,e){return t.items.forEach((t=>e.union(t.bounds))),e.x1=t.padding,e.y1=t.padding,e}(i,u),n=2*i.padding,r=2*i.padding,u.empty()||(n=Math.ceil(u.width()+n),r=Math.ceil(u.height()+r)),"symbol"===o.type&&function(t){const e=t.reduce(((t,e)=>(t[e.column]=Math.max(e.bounds.x2-e.x,t[e.column]||0),t)),{});t.forEach((t=>{t.width=e[t.column],t.height=t.bounds.y2-t.y}))}(i.items[0].items[0].items[0].items),a!==Kv&&(i.x=s=0,i.y=l=0),i.width=n,i.height=r,rg(u.set(s,l,s+n,l+r),i),i.mark.bounds.clear().union(u),i}function L_(t,e,n,r,i,o,a){const u="symbol"!==t.datum.type,s=n.datum.vgrad,l=(!u||!o&&s||a?e:e.items[0]).bounds[i?"y2":"x2"]-t.padding,c=s&&o?l:0,f=s&&o?0:l,h=i<=0?0:Lm(n);return Math.round(r===Nv?c:r===Rv?f-h:.5*(l-h))}function U_(t,e,n,r){e.x+=n,e.y+=r,e.bounds.translate(n,r),e.mark.bounds.translate(n,r),t.dirty(e)}function q_(t){pa.call(this,null,t)}ut(q_,pa,{transform(t,e){const n=e.dataflow;return t.mark.items.forEach((e=>{t.layout&&S_(n,e,t.layout),function(t,e,n){var r,i,o,a,u,s=e.items,l=Math.max(0,e.width||0),c=Math.max(0,e.height||0),f=(new Zp).set(0,0,l,c),h=f.clone(),d=f.clone(),p=[];for(a=0,u=s.length;a{(o=t.orient||Tv)!==Kv&&(e[o]||(e[o]=[])).push(t)}));for(const r in e){const i=e[r];F_(t,i,O_(i,r,n.legends,h,d,l,c))}p.forEach((e=>{const r=e.bounds;if(r.equals(e._bounds)||(e.bounds=e._bounds,t.dirty(e),e.bounds=r,t.dirty(e)),n.autosize&&n.autosize.type===Jv)switch(e.orient){case Bv:case Tv:f.add(r.x1,0).add(r.x2,0);break;case Sv:case zv:f.add(0,r.y1).add(0,r.y2)}else f.union(r)}))}f.union(h).union(d),r&&f.union(function(t,e,n,r,i){var o,a=e.items[0],u=a.frame,s=a.orient,l=a.anchor,c=a.offset,f=a.padding,h=a.items[0].items[0],d=a.items[1]&&a.items[1].items[0],p=s===Bv||s===Tv?r:n,g=0,m=0,y=0,v=0,_=0;if(u!==Lv?s===Bv?(g=i.y2,p=i.y1):s===Tv?(g=i.y1,p=i.y2):(g=i.x1,p=i.x2):s===Bv&&(g=r,p=0),o=l===Nv?g:l===Rv?p:(g+p)/2,d&&d.text){switch(s){case Sv:case zv:_=h.bounds.height()+f;break;case Bv:v=h.bounds.width()+f;break;case Tv:v=-h.bounds.width()-f}v_.clear().union(d.bounds),v_.translate(v-(d.x||0),_-(d.y||0)),__(d,"x",v)|__(d,"y",_)&&(t.dirty(d),d.bounds.clear().union(v_),d.mark.bounds.clear().union(v_),t.dirty(d)),v_.clear().union(d.bounds)}else v_.clear();switch(v_.union(h.bounds),s){case Sv:m=o,y=i.y1-v_.height()-c;break;case Bv:m=i.x1-v_.width()-c,y=o;break;case Tv:m=i.x2+v_.width()+c,y=o;break;case zv:m=o,y=i.y2+c;break;default:m=a.x,y=a.y}return __(a,"x",m)|__(a,"y",y)&&(v_.translate(m,y),t.dirty(a),a.bounds.clear().union(v_),e.bounds.clear().union(v_),t.dirty(a)),a.bounds}(t,r,l,c,f));e.clip&&f.set(0,0,e.width||0,e.height||0);!function(t,e,n,r){const i=r.autosize||{},o=i.type;if(t._autosize<1||!o)return;let a=t._width,u=t._height,s=Math.max(0,e.width||0),l=Math.max(0,Math.ceil(-n.x1)),c=Math.max(0,e.height||0),f=Math.max(0,Math.ceil(-n.y1));const h=Math.max(0,Math.ceil(n.x2-s)),d=Math.max(0,Math.ceil(n.y2-c));if(i.contains===Xv){const e=t.padding();a-=e.left+e.right,u-=e.top+e.bottom}o===Kv?(l=0,f=0,s=a,c=u):o===Jv?(s=Math.max(0,a-l-h),c=Math.max(0,u-f-d)):o===Zv?(s=Math.max(0,a-l-h),u=c+f+d):o===Qv?(a=s+l+h,c=Math.max(0,u-f-d)):"pad"===o&&(a=s+l+h,u=c+f+d);t._resizeView(a,u,s,c,[l,f],i.resize)}(t,e,f,n)}(n,e,t)})),function(t){return t&&"legend-entry"!==t.mark.role}(t.mark.group)?e.reflow():e}});var P_=Object.freeze({__proto__:null,bound:o_,identifier:s_,mark:l_,overlap:c_,render:y_,viewlayout:q_});function j_(t){pa.call(this,null,t)}function I_(t){pa.call(this,null,t)}function $_(){return Lo({})}function W_(t){pa.call(this,null,t)}function H_(t){pa.call(this,[],t)}ut(j_,pa,{transform(t,e){if(this.value&&!t.modified())return e.StopPropagation;var n=e.dataflow.locale(),r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=this.value,o=t.scale,a=Ld(o,null==t.count?t.values?t.values.length:10:t.count,t.minstep),u=t.format||Pd(n,o,a,t.formatSpecifier,t.formatType,!!t.values),s=t.values?Ud(o,t.values,a):qd(o,a);return i&&(r.rem=i),i=s.map(((t,e)=>Lo({index:e/(s.length-1||1),value:t,label:u(t)}))),t.extra&&i.length&&i.push(Lo({index:-1,extra:{value:i[0].value},label:""})),r.source=i,r.add=i,this.value=i,r}}),ut(I_,pa,{transform(t,e){var n=e.dataflow,r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=t.item||$_,o=t.key||Oo,a=this.value;return v(r.encode)&&(r.encode=null),a&&(t.modified("key")||e.modified(o))&&u("DataJoin does not support modified key function or fields."),a||(e=e.addAll(),this.value=a=function(t){const e=ot().test((t=>t.exit));return e.lookup=n=>e.get(t(n)),e}(o)),e.visit(e.ADD,(t=>{const e=o(t);let n=a.get(e);n?n.exit?(a.empty--,r.add.push(n)):r.mod.push(n):(n=i(t),a.set(e,n),r.add.push(n)),n.datum=t,n.exit=!1})),e.visit(e.MOD,(t=>{const e=o(t),n=a.get(e);n&&(n.datum=t,r.mod.push(n))})),e.visit(e.REM,(t=>{const e=o(t),n=a.get(e);t!==n.datum||n.exit||(r.rem.push(n),n.exit=!0,++a.empty)})),e.changed(e.ADD_MOD)&&r.modifies("datum"),(e.clean()||t.clean&&a.empty>n.cleanThreshold)&&n.runAfter(a.clean),r}}),ut(W_,pa,{transform(t,e){var n=e.fork(e.ADD_REM),r=t.mod||!1,i=t.encoders,o=e.encode;if(v(o)){if(!n.changed()&&!o.every((t=>i[t])))return e.StopPropagation;o=o[0],n.encode=null}var a="enter"===o,u=i.update||g,s=i.enter||g,l=i.exit||g,c=(o&&!a?i[o]:u)||g;if(e.changed(e.ADD)&&(e.visit(e.ADD,(e=>{s(e,t),u(e,t)})),n.modifies(s.output),n.modifies(u.output),c!==g&&c!==u&&(e.visit(e.ADD,(e=>{c(e,t)})),n.modifies(c.output))),e.changed(e.REM)&&l!==g&&(e.visit(e.REM,(e=>{l(e,t)})),n.modifies(l.output)),a||c!==g){const i=e.MOD|(t.modified()?e.REFLOW:0);a?(e.visit(i,(e=>{const i=s(e,t)||r;(c(e,t)||i)&&n.mod.push(e)})),n.mod.length&&n.modifies(s.output)):e.visit(i,(e=>{(c(e,t)||r)&&n.mod.push(e)})),n.mod.length&&n.modifies(c.output)}return n.changed()?n:e.StopPropagation}}),ut(H_,pa,{transform(t,e){if(null!=this.value&&!t.modified())return e.StopPropagation;var n,r,i,o,a,u=e.dataflow.locale(),s=e.fork(e.NO_SOURCE|e.NO_FIELDS),l=this.value,c=t.type||zd,f=t.scale,h=+t.limit,d=Ld(f,null==t.count?5:t.count,t.minstep),p=!!t.values||c===zd,g=t.format||Hd(u,f,d,c,t.formatSpecifier,t.formatType,p),m=t.values||Wd(f,d);return l&&(s.rem=l),c===zd?(h&&m.length>h?(e.dataflow.warn("Symbol legend count exceeds limit, filtering items."),l=m.slice(0,h-1),a=!0):l=m,H(i=t.size)?(t.values||0!==f(l[0])||(l=l.slice(1)),o=l.reduce(((e,n)=>Math.max(e,i(n,t))),0)):i=Z(o=i||8),l=l.map(((e,n)=>Lo({index:n,label:g(e,n,l),value:e,offset:o,size:i(e,t)}))),a&&(a=m[l.length],l.push(Lo({index:l.length,label:"…".concat(m.length-l.length," entries"),value:a,offset:o,size:i(a,t)})))):"gradient"===c?(n=f.domain(),r=Dd(f,n[0],M(n)),m.length<3&&!t.values&&n[0]!==M(n)&&(m=[n[0],M(n)]),l=m.map(((t,e)=>Lo({index:e,label:g(t,e,m),value:t,perc:r(t)})))):(i=m.length-1,r=function(t){const e=t.domain(),n=e.length-1;let r=+e[0],i=+M(e),o=i-r;if(t.type===Zh){const t=n?o/n:.1;r-=t,i+=t,o=i-r}return t=>(t-r)/o}(f),l=m.map(((t,e)=>Lo({index:e,label:g(t,e,m),value:t,perc:e?r(t):0,perc2:e===i?1:r(m[e+1])})))),s.source=l,s.add=l,this.value=l,s}});const Y_=t=>t.source.x,V_=t=>t.source.y,G_=t=>t.target.x,X_=t=>t.target.y;function J_(t){pa.call(this,{},t)}J_.Definition={type:"LinkPath",metadata:{modifies:!0},params:[{name:"sourceX",type:"field",default:"source.x"},{name:"sourceY",type:"field",default:"source.y"},{name:"targetX",type:"field",default:"target.x"},{name:"targetY",type:"field",default:"target.y"},{name:"orient",type:"enum",default:"vertical",values:["horizontal","vertical","radial"]},{name:"shape",type:"enum",default:"line",values:["line","arc","curve","diagonal","orthogonal"]},{name:"require",type:"signal"},{name:"as",type:"string",default:"path"}]},ut(J_,pa,{transform(t,e){var n=t.sourceX||Y_,r=t.sourceY||V_,i=t.targetX||G_,o=t.targetY||X_,a=t.as||"path",s=t.orient||"vertical",l=t.shape||"line",c=tx.get(l+"-"+s)||tx.get(l);return c||u("LinkPath unsupported type: "+t.shape+(t.orient?"-"+t.orient:"")),e.visit(e.SOURCE,(t=>{t[a]=c(n(t),r(t),i(t),o(t))})),e.reflow(t.modified()).modifies(a)}});const Z_=(t,e,n,r)=>"M"+t+","+e+"L"+n+","+r,Q_=(t,e,n,r)=>{var i=n-t,o=r-e,a=Math.sqrt(i*i+o*o)/2;return"M"+t+","+e+"A"+a+","+a+" "+180*Math.atan2(o,i)/Math.PI+" 0 1 "+n+","+r},K_=(t,e,n,r)=>{const i=n-t,o=r-e,a=.2*(i+o),u=.2*(o-i);return"M"+t+","+e+"C"+(t+a)+","+(e+u)+" "+(n+u)+","+(r-a)+" "+n+","+r},tx=ot({line:Z_,"line-radial":(t,e,n,r)=>Z_(e*Math.cos(t),e*Math.sin(t),r*Math.cos(n),r*Math.sin(n)),arc:Q_,"arc-radial":(t,e,n,r)=>Q_(e*Math.cos(t),e*Math.sin(t),r*Math.cos(n),r*Math.sin(n)),curve:K_,"curve-radial":(t,e,n,r)=>K_(e*Math.cos(t),e*Math.sin(t),r*Math.cos(n),r*Math.sin(n)),"orthogonal-horizontal":(t,e,n,r)=>"M"+t+","+e+"V"+r+"H"+n,"orthogonal-vertical":(t,e,n,r)=>"M"+t+","+e+"H"+n+"V"+r,"orthogonal-radial":(t,e,n,r)=>{const i=Math.cos(t),o=Math.sin(t),a=Math.cos(n),u=Math.sin(n);return"M"+e*i+","+e*o+"A"+e+","+e+" 0 0,"+((Math.abs(n-t)>Math.PI?n<=t:n>t)?1:0)+" "+e*a+","+e*u+"L"+r*a+","+r*u},"diagonal-horizontal":(t,e,n,r)=>{const i=(t+n)/2;return"M"+t+","+e+"C"+i+","+e+" "+i+","+r+" "+n+","+r},"diagonal-vertical":(t,e,n,r)=>{const i=(e+r)/2;return"M"+t+","+e+"C"+t+","+i+" "+n+","+i+" "+n+","+r},"diagonal-radial":(t,e,n,r)=>{const i=Math.cos(t),o=Math.sin(t),a=Math.cos(n),u=Math.sin(n),s=(e+r)/2;return"M"+e*i+","+e*o+"C"+s*i+","+s*o+" "+s*a+","+s*u+" "+r*a+","+r*u}});function ex(t){pa.call(this,null,t)}ex.Definition={type:"Pie",metadata:{modifies:!0},params:[{name:"field",type:"field"},{name:"startAngle",type:"number",default:0},{name:"endAngle",type:"number",default:6.283185307179586},{name:"sort",type:"boolean",default:!1},{name:"as",type:"string",array:!0,length:2,default:["startAngle","endAngle"]}]},ut(ex,pa,{transform(t,e){var n,r,i,o=t.as||["startAngle","endAngle"],a=o[0],u=o[1],s=t.field||d,l=t.startAngle||0,c=null!=t.endAngle?t.endAngle:2*Math.PI,f=e.source,h=f.map(s),p=h.length,g=l,m=(c-l)/Le(h),y=Re(p);for(t.sort&&y.sort(((t,e)=>h[t]-h[e])),n=0;nt+(e<0?-1:e>0?1:0)),0))!==e.length&&n.warn("Log scale domain includes zero: "+wt(e)));return e}function ax(t,e,n){return H(t)&&(e||n)?Md(t,ux(e||[0,1],n)):t}function ux(t,e){return e?t.slice().reverse():t}function sx(t){pa.call(this,null,t)}ut(ix,pa,{transform(t,e){var n=e.dataflow,r=this.value,i=function(t){var e,n=t.type,r="";if(n===Vh)return"sequential-linear";(function(t){const e=t.type;return yd(e)&&e!==Hh&&e!==Yh&&(t.scheme||t.range&&t.range.length&&t.range.every(pt))})(t)&&(r=2===(e=t.rawDomain?t.rawDomain.length:t.domain?t.domain.length+ +(null!=t.domainMid):0)?"sequential-":3===e?"diverging-":"");return(r+n||Ph).toLowerCase()}(t);for(i in r&&i===r.type||(this.value=r=pd(i)()),t)if(!rx[i]){if("padding"===i&&nx(r.type))continue;H(r[i])?r[i](t[i]):n.warn("Unsupported scale property: "+i)}return function(t,e,n){var r=t.type,i=e.round||!1,o=e.range;if(null!=e.rangeStep)o=function(t,e,n){t!==td&&t!==Kh&&u("Only band and point scales support rangeStep.");var r=(null!=e.paddingOuter?e.paddingOuter:e.padding)||0,i=t===Kh?1:(null!=e.paddingInner?e.paddingInner:e.padding)||0;return[0,e.rangeStep*qh(n,i,r)]}(r,e,n);else if(e.scheme&&(o=function(t,e,n){var r,i=e.schemeExtent;v(e.scheme)?r=Ad(e.scheme,e.interpolate,e.interpolateGamma):(r=Td(e.scheme.toLowerCase()))||u("Unrecognized scheme name: ".concat(e.scheme));return n=t===Zh?n+1:t===ed?n-1:t===Xh||t===Jh?+e.schemeCount||5:n,bd(t)?ax(r,i,e.reverse):H(r)?Ed(ax(r,i),n):t===Qh?r:r.slice(0,n)}(r,e,n),H(o))){if(t.interpolator)return t.interpolator(o);u("Scale type ".concat(r," does not support interpolating color schemes."))}if(o&&bd(r))return t.interpolator(Ad(ux(o,e.reverse),e.interpolate,e.interpolateGamma));o&&e.interpolate&&t.interpolate?t.interpolate(Cd(e.interpolate,e.interpolateGamma)):H(t.round)?t.round(i):H(t.rangeRound)&&t.interpolate(i?Sf:Ff);o&&t.range(ux(o,e.reverse))}(r,t,function(t,e,n){let r=e.bins;if(r&&!v(r)){const e=t.domain(),n=e[0],i=M(e),o=r.step;let a=null==r.start?n:r.start,s=null==r.stop?i:r.stop;o||u("Scale bins parameter missing step property."),ai&&(s=o*Math.floor(i/o)),r=Re(a,s+o/2,o)}r?t.bins=r:t.bins&&delete t.bins;t.type===ed&&(r?e.domain||e.domainRaw||(t.domain(r),n=r.length):t.bins=t.domain());return n}(r,t,function(t,e,n){const r=function(t,e,n){return e?(t.domain(ox(t.type,e,n)),e.length):-1}(t,e.domainRaw,n);if(r>-1)return r;var i,o,a=e.domain,u=t.type,s=e.zero||void 0===e.zero&&function(t){const e=t.type;return!t.bins&&(e===Ph||e===Ih||e===$h)}(t);if(!a)return 0;nx(u)&&e.padding&&a[0]!==M(a)&&(a=function(t,e,n,r,i,o){var a=Math.abs(M(n)-n[0]),u=a/(a-2*r),s=t===jh?U(e,null,u):t===$h?q(e,null,u,.5):t===Ih?q(e,null,u,i||1):t===Wh?P(e,null,u,o||1):L(e,null,u);return(e=e.slice())[0]=s[0],e[e.length-1]=s[1],e}(u,a,e.range,e.padding,e.exponent,e.constant));if((s||null!=e.domainMin||null!=e.domainMax||null!=e.domainMid)&&(i=(a=a.slice()).length-1||1,s&&(a[0]>0&&(a[0]=0),a[i]<0&&(a[i]=0)),null!=e.domainMin&&(a[0]=e.domainMin),null!=e.domainMax&&(a[i]=e.domainMax),null!=e.domainMid)){const t=(o=e.domainMid)>a[i]?i+1:ot(s);if(null==e)d.push(t.slice());else for(i={},o=0,a=t.length;oh&&(h=f),n&&c.sort(n)}return d.max=h,d}(e.source,t.groupby,l,c),r=0,i=n.length,o=n.max;r0?1:t<0?-1:0},Lx=Math.sqrt,Ux=Math.tan;function qx(t){return t>1?0:t<-1?xx:Math.acos(t)}function Px(t){return t>1?bx:t<-1?-bx:Math.asin(t)}function jx(){}function Ix(t,e){t&&Wx.hasOwnProperty(t.type)&&Wx[t.type](t,e)}var $x={Feature:function(t,e){Ix(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r=0?1:-1,i=r*n,o=Fx(e=(e*=Ax)/2+wx),a=Ox(e),u=Qx*a,s=Zx*o+u*Fx(i),l=u*r*Ox(i);cb.add(Cx(l,s)),Jx=t,Zx=o,Qx=a}function yb(t){return[Cx(t[1],t[0]),Px(t[2])]}function vb(t){var e=t[0],n=t[1],r=Fx(n);return[r*Fx(e),r*Ox(e),Ox(n)]}function _b(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function xb(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function bb(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function wb(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function kb(t){var e=Lx(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}var Mb,Ab,Eb,Db,Cb,Fb,Sb,Bb,Tb,zb,Nb,Ob,Rb,Lb,Ub,qb,Pb={point:jb,lineStart:$b,lineEnd:Wb,polygonStart:function(){Pb.point=Hb,Pb.lineStart=Yb,Pb.lineEnd=Vb,ub=new be,hb.polygonStart()},polygonEnd:function(){hb.polygonEnd(),Pb.point=jb,Pb.lineStart=$b,Pb.lineEnd=Wb,cb<0?(Kx=-(eb=180),tb=-(nb=90)):ub>vx?nb=90:ub<-1e-6&&(tb=-90),lb[0]=Kx,lb[1]=eb},sphere:function(){Kx=-(eb=180),tb=-(nb=90)}};function jb(t,e){sb.push(lb=[Kx=t,eb=t]),enb&&(nb=e)}function Ib(t,e){var n=vb([t*Ax,e*Ax]);if(ab){var r=xb(ab,n),i=xb([r[1],-r[0],0],r);kb(i),i=yb(i);var o,a=t-rb,u=a>0?1:-1,s=i[0]*Mx*u,l=Ex(a)>180;l^(u*rbnb&&(nb=o):l^(u*rb<(s=(s+360)%360-180)&&snb&&(nb=e)),l?tGb(Kx,eb)&&(eb=t):Gb(t,eb)>Gb(Kx,eb)&&(Kx=t):eb>=Kx?(teb&&(eb=t)):t>rb?Gb(Kx,t)>Gb(Kx,eb)&&(eb=t):Gb(t,eb)>Gb(Kx,eb)&&(Kx=t)}else sb.push(lb=[Kx=t,eb=t]);enb&&(nb=e),ab=n,rb=t}function $b(){Pb.point=Ib}function Wb(){lb[0]=Kx,lb[1]=eb,Pb.point=jb,ab=null}function Hb(t,e){if(ab){var n=t-rb;ub.add(Ex(n)>180?n+(n>0?360:-360):n)}else ib=t,ob=e;hb.point(t,e),Ib(t,e)}function Yb(){hb.lineStart()}function Vb(){Hb(ib,ob),hb.lineEnd(),Ex(ub)>vx&&(Kx=-(eb=180)),lb[0]=Kx,lb[1]=eb,ab=null}function Gb(t,e){return(e-=t)<0?e+360:e}function Xb(t,e){return t[0]-e[0]}function Jb(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:exx?t+Math.round(-t/kx)*kx:t,e]}function cw(t,e,n){return(t%=kx)?e||n?sw(hw(t),dw(e,n)):hw(t):e||n?dw(e,n):lw}function fw(t){return function(e,n){return[(e+=t)>xx?e-kx:e<-xx?e+kx:e,n]}}function hw(t){var e=fw(t);return e.invert=fw(-t),e}function dw(t,e){var n=Fx(t),r=Ox(t),i=Fx(e),o=Ox(e);function a(t,e){var a=Fx(e),u=Fx(t)*a,s=Ox(t)*a,l=Ox(e),c=l*n+u*r;return[Cx(s*i-c*o,u*n-l*r),Px(c*i+s*o)]}return a.invert=function(t,e){var a=Fx(e),u=Fx(t)*a,s=Ox(t)*a,l=Ox(e),c=l*i-s*o;return[Cx(s*i+l*o,u*n+c*r),Px(c*n-u*r)]},a}function pw(t,e){(e=vb(e))[0]-=t,kb(e);var n=qx(-e[1]);return((-e[2]<0?-n:n)+kx-vx)%kx}function gw(){var t,e=[];return{point:function(e,n,r){t.push([e,n,r])},lineStart:function(){e.push(t=[])},lineEnd:jx,rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))},result:function(){var n=e;return e=[],t=null,n}}}function mw(t,e){return Ex(t[0]-e[0])=0;--o)i.point((c=l[o])[0],c[1]);else r(h.x,h.p.x,-1,i);h=h.p}l=(h=h.o).z,d=!d}while(!h.v);i.lineEnd()}}}function _w(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r=0?1:-1,E=A*M,D=E>xx,C=m*w;if(s.add(Cx(C*A*Ox(E),y*k+C*Fx(E))),a+=D?M+A*kx:M,D^p>=n^x>=n){var F=xb(vb(d),vb(_));kb(F);var S=xb(o,F);kb(S);var B=(D^M>=0?-1:1)*Px(S[2]);(r>B||r===B&&(F[0]||F[1]))&&(u+=D^M>=0?1:-1)}}return(a<-1e-6||a0){for(f||(i.polygonStart(),f=!0),i.lineStart(),t=0;t1&&2&s&&h.push(h.pop().concat(h.shift())),a.push(h.filter(ww))}return h}}function ww(t){return t.length>1}function kw(t,e){return((t=t.x)[0]<0?t[1]-bx-vx:bx-t[1])-((e=e.x)[0]<0?e[1]-bx-vx:bx-e[1])}lw.invert=lw;var Mw=bw((function(){return!0}),(function(t){var e,n=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(o,a){var u=o>0?xx:-xx,s=Ex(o-n);Ex(s-xx)0?bx:-bx),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(u,r),t.point(o,r),e=0):i!==u&&s>=xx&&(Ex(n-i)vx?Dx((Ox(e)*(o=Fx(r))*Ox(n)-Ox(r)*(i=Fx(e))*Ox(t))/(i*o*a)):(e+r)/2}(n,r,o,a),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(u,r),e=0),t.point(n=o,r=a),i=u},lineEnd:function(){t.lineEnd(),n=r=NaN},clean:function(){return 2-e}}}),(function(t,e,n,r){var i;if(null==t)i=n*bx,r.point(-xx,i),r.point(0,i),r.point(xx,i),r.point(xx,0),r.point(xx,-i),r.point(0,-i),r.point(-xx,-i),r.point(-xx,0),r.point(-xx,i);else if(Ex(t[0]-e[0])>vx){var o=t[0]0,i=Ex(e)>vx;function o(t,n){return Fx(t)*Fx(n)>e}function a(t,n,r){var i=[1,0,0],o=xb(vb(t),vb(n)),a=_b(o,o),u=o[0],s=a-u*u;if(!s)return!r&&t;var l=e*a/s,c=-e*u/s,f=xb(i,o),h=wb(i,l);bb(h,wb(o,c));var d=f,p=_b(h,d),g=_b(d,d),m=p*p-g*(_b(h,h)-1);if(!(m<0)){var y=Lx(m),v=wb(d,(-p-y)/g);if(bb(v,h),v=yb(v),!r)return v;var _,x=t[0],b=n[0],w=t[1],k=n[1];b0^v[1]<(Ex(v[0]-x)xx^(x<=v[0]&&v[0]<=b)){var E=wb(d,(-p+y)/g);return bb(E,h),[v,yb(E)]}}}function u(e,n){var i=r?t:xx-t,o=0;return e<-i?o|=1:e>i&&(o|=2),n<-i?o|=4:n>i&&(o|=8),o}return bw(o,(function(t){var e,n,s,l,c;return{lineStart:function(){l=s=!1,c=1},point:function(f,h){var d,p=[f,h],g=o(f,h),m=r?g?0:u(f,h):g?u(f+(f<0?xx:-xx),h):0;if(!e&&(l=s=g)&&t.lineStart(),g!==s&&(!(d=a(e,p))||mw(e,d)||mw(p,d))&&(p[2]=1),g!==s)c=0,g?(t.lineStart(),d=a(p,e),t.point(d[0],d[1])):(d=a(e,p),t.point(d[0],d[1],2),t.lineEnd()),e=d;else if(i&&e&&r^g){var y;m&n||!(y=a(p,e,!0))||(c=0,r?(t.lineStart(),t.point(y[0][0],y[0][1]),t.point(y[1][0],y[1][1]),t.lineEnd()):(t.point(y[1][0],y[1][1]),t.lineEnd(),t.lineStart(),t.point(y[0][0],y[0][1],3)))}!g||e&&mw(e,p)||t.point(p[0],p[1]),e=p,s=g,n=m},lineEnd:function(){s&&t.lineEnd(),e=null},clean:function(){return c|(l&&s)<<1}}}),(function(e,r,i,o){!function(t,e,n,r,i,o){if(n){var a=Fx(e),u=Ox(e),s=r*n;null==i?(i=e+r*kx,o=e-s/2):(i=pw(a,i),o=pw(a,o),(r>0?io)&&(i+=r*kx));for(var l,c=i;r>0?c>o:c0)do{l.point(0===c||3===c?t:n,c>1?r:e)}while((c=(c+u+4)%4)!==f);else l.point(o[0],o[1])}function a(r,i){return Ex(r[0]-t)0?0:3:Ex(r[0]-n)0?2:1:Ex(r[1]-e)0?1:0:i>0?3:2}function u(t,e){return s(t.x,e.x)}function s(t,e){var n=a(t,1),r=a(e,1);return n!==r?n-r:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(a){var s,l,c,f,h,d,p,g,m,y,v,_=a,x=gw(),b={point:w,lineStart:function(){b.point=k,l&&l.push(c=[]);y=!0,m=!1,p=g=NaN},lineEnd:function(){s&&(k(f,h),d&&m&&x.rejoin(),s.push(x.result()));b.point=w,m&&_.lineEnd()},polygonStart:function(){_=x,s=[],l=[],v=!0},polygonEnd:function(){var e=function(){for(var e=0,n=0,i=l.length;nr&&(h-o)*(r-a)>(d-a)*(t-o)&&++e:d<=r&&(h-o)*(r-a)<(d-a)*(t-o)&&--e;return e}(),n=v&&e,i=(s=Oe(s)).length;(n||i)&&(a.polygonStart(),n&&(a.lineStart(),o(null,null,1,a),a.lineEnd()),i&&vw(s,u,e,o,a),a.polygonEnd());_=a,s=l=c=null}};function w(t,e){i(t,e)&&_.point(t,e)}function k(o,a){var u=i(o,a);if(l&&c.push([o,a]),y)f=o,h=a,d=u,y=!1,u&&(_.lineStart(),_.point(o,a));else if(u&&m)_.point(o,a);else{var s=[p=Math.max(Dw,Math.min(Ew,p)),g=Math.max(Dw,Math.min(Ew,g))],x=[o=Math.max(Dw,Math.min(Ew,o)),a=Math.max(Dw,Math.min(Ew,a))];!function(t,e,n,r,i,o){var a,u=t[0],s=t[1],l=0,c=1,f=e[0]-u,h=e[1]-s;if(a=n-u,f||!(a>0)){if(a/=f,f<0){if(a0){if(a>c)return;a>l&&(l=a)}if(a=i-u,f||!(a<0)){if(a/=f,f<0){if(a>c)return;a>l&&(l=a)}else if(f>0){if(a0)){if(a/=h,h<0){if(a0){if(a>c)return;a>l&&(l=a)}if(a=o-s,h||!(a<0)){if(a/=h,h<0){if(a>c)return;a>l&&(l=a)}else if(h>0){if(a0&&(t[0]=u+l*f,t[1]=s+l*h),c<1&&(e[0]=u+c*f,e[1]=s+c*h),!0}}}}}(s,x,t,e,n,r)?u&&(_.lineStart(),_.point(o,a),v=!1):(m||(_.lineStart(),_.point(s[0],s[1])),_.point(x[0],x[1]),u||_.lineEnd(),v=!1)}p=o,g=a,m=u}return b}}function Fw(t,e,n){var r=Re(t,e-vx,n).concat(e);return function(t){return r.map((function(e){return[t,e]}))}}function Sw(t,e,n){var r=Re(t,e-vx,n).concat(e);return function(t){return r.map((function(e){return[e,t]}))}}var Bw,Tw,zw,Nw,Ow=t=>t,Rw=new be,Lw=new be,Uw={point:jx,lineStart:jx,lineEnd:jx,polygonStart:function(){Uw.lineStart=qw,Uw.lineEnd=Iw},polygonEnd:function(){Uw.lineStart=Uw.lineEnd=Uw.point=jx,Rw.add(Ex(Lw)),Lw=new be},result:function(){var t=Rw/2;return Rw=new be,t}};function qw(){Uw.point=Pw}function Pw(t,e){Uw.point=jw,Bw=zw=t,Tw=Nw=e}function jw(t,e){Lw.add(Nw*t-zw*e),zw=t,Nw=e}function Iw(){jw(Bw,Tw)}var $w=1/0,Ww=$w,Hw=-$w,Yw=Hw,Vw={point:function(t,e){t<$w&&($w=t);t>Hw&&(Hw=t);eYw&&(Yw=e)},lineStart:jx,lineEnd:jx,polygonStart:jx,polygonEnd:jx,result:function(){var t=[[$w,Ww],[Hw,Yw]];return Hw=Yw=-(Ww=$w=1/0),t}};var Gw,Xw,Jw,Zw,Qw=0,Kw=0,tk=0,ek=0,nk=0,rk=0,ik=0,ok=0,ak=0,uk={point:sk,lineStart:lk,lineEnd:hk,polygonStart:function(){uk.lineStart=dk,uk.lineEnd=pk},polygonEnd:function(){uk.point=sk,uk.lineStart=lk,uk.lineEnd=hk},result:function(){var t=ak?[ik/ak,ok/ak]:rk?[ek/rk,nk/rk]:tk?[Qw/tk,Kw/tk]:[NaN,NaN];return Qw=Kw=tk=ek=nk=rk=ik=ok=ak=0,t}};function sk(t,e){Qw+=t,Kw+=e,++tk}function lk(){uk.point=ck}function ck(t,e){uk.point=fk,sk(Jw=t,Zw=e)}function fk(t,e){var n=t-Jw,r=e-Zw,i=Lx(n*n+r*r);ek+=i*(Jw+t)/2,nk+=i*(Zw+e)/2,rk+=i,sk(Jw=t,Zw=e)}function hk(){uk.point=sk}function dk(){uk.point=gk}function pk(){mk(Gw,Xw)}function gk(t,e){uk.point=mk,sk(Gw=Jw=t,Xw=Zw=e)}function mk(t,e){var n=t-Jw,r=e-Zw,i=Lx(n*n+r*r);ek+=i*(Jw+t)/2,nk+=i*(Zw+e)/2,rk+=i,ik+=(i=Zw*t-Jw*e)*(Jw+t),ok+=i*(Zw+e),ak+=3*i,sk(Jw=t,Zw=e)}function yk(t){this._context=t}yk.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,kx)}},result:jx};var vk,_k,xk,bk,wk,kk=new be,Mk={point:jx,lineStart:function(){Mk.point=Ak},lineEnd:function(){vk&&Ek(_k,xk),Mk.point=jx},polygonStart:function(){vk=!0},polygonEnd:function(){vk=null},result:function(){var t=+kk;return kk=new be,t}};function Ak(t,e){Mk.point=Ek,_k=bk=t,xk=wk=e}function Ek(t,e){bk-=t,wk-=e,kk.add(Lx(bk*bk+wk*wk)),bk=t,wk=e}function Dk(){this._string=[]}function Ck(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function Fk(t,e){var n,r,i=4.5;function o(t){return t&&("function"==typeof i&&r.pointRadius(+i.apply(this,arguments)),Vx(t,n(r))),r.result()}return o.area=function(t){return Vx(t,n(Uw)),Uw.result()},o.measure=function(t){return Vx(t,n(Mk)),Mk.result()},o.bounds=function(t){return Vx(t,n(Vw)),Vw.result()},o.centroid=function(t){return Vx(t,n(uk)),uk.result()},o.projection=function(e){return arguments.length?(n=null==e?(t=null,Ow):(t=e).stream,o):t},o.context=function(t){return arguments.length?(r=null==t?(e=null,new Dk):new yk(e=t),"function"!=typeof i&&r.pointRadius(i),o):e},o.pointRadius=function(t){return arguments.length?(i="function"==typeof t?t:(r.pointRadius(+t),+t),o):i},o.projection(t).context(e)}function Sk(t){return function(e){var n=new Bk;for(var r in t)n[r]=t[r];return n.stream=e,n}}function Bk(){}function Tk(t,e,n){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),Vx(n,t.stream(Vw)),e(Vw.result()),null!=r&&t.clipExtent(r),t}function zk(t,e,n){return Tk(t,(function(n){var r=e[1][0]-e[0][0],i=e[1][1]-e[0][1],o=Math.min(r/(n[1][0]-n[0][0]),i/(n[1][1]-n[0][1])),a=+e[0][0]+(r-o*(n[1][0]+n[0][0]))/2,u=+e[0][1]+(i-o*(n[1][1]+n[0][1]))/2;t.scale(150*o).translate([a,u])}),n)}function Nk(t,e,n){return zk(t,[[0,0],e],n)}function Ok(t,e,n){return Tk(t,(function(n){var r=+e,i=r/(n[1][0]-n[0][0]),o=(r-i*(n[1][0]+n[0][0]))/2,a=-i*n[0][1];t.scale(150*i).translate([o,a])}),n)}function Rk(t,e,n){return Tk(t,(function(n){var r=+e,i=r/(n[1][1]-n[0][1]),o=-i*n[0][0],a=(r-i*(n[1][1]+n[0][1]))/2;t.scale(150*i).translate([o,a])}),n)}Dk.prototype={_radius:4.5,_circle:Ck(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._string.push("M",t,",",e),this._point=1;break;case 1:this._string.push("L",t,",",e);break;default:null==this._circle&&(this._circle=Ck(this._radius)),this._string.push("M",t,",",e,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}},Bk.prototype={constructor:Bk,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var Lk=Fx(30*Ax);function Uk(t,e){return+e?function(t,e){function n(r,i,o,a,u,s,l,c,f,h,d,p,g,m){var y=l-r,v=c-i,_=y*y+v*v;if(_>4*e&&g--){var x=a+h,b=u+d,w=s+p,k=Lx(x*x+b*b+w*w),M=Px(w/=k),A=Ex(Ex(w)-1)e||Ex((y*F+v*S)/_-.5)>.3||a*h+u*d+s*p2?t[2]%360*Ax:0,F()):[m*Mx,y*Mx,v*Mx]},D.angle=function(t){return arguments.length?(_=t%360*Ax,F()):_*Mx},D.reflectX=function(t){return arguments.length?(x=t?-1:1,F()):x<0},D.reflectY=function(t){return arguments.length?(b=t?-1:1,F()):b<0},D.precision=function(t){return arguments.length?(a=Uk(u,E=t*t),S()):Lx(E)},D.fitExtent=function(t,e){return zk(D,t,e)},D.fitSize=function(t,e){return Nk(D,t,e)},D.fitWidth=function(t,e){return Ok(D,t,e)},D.fitHeight=function(t,e){return Rk(D,t,e)},function(){return e=t.apply(this,arguments),D.invert=e.invert&&C,F()}}function $k(t){var e=0,n=xx/3,r=Ik(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*Ax,n=t[1]*Ax):[e*Mx,n*Mx]},i}function Wk(t,e){var n=Ox(t),r=(n+Ox(e))/2;if(Ex(r)2?t[2]*Ax:0),e.invert=function(e){return(e=t.invert(e[0]*Ax,e[1]*Ax))[0]*=Mx,e[1]*=Mx,e},e}(i.rotate()).invert([0,0]));return s(null==l?[[u[0]-o,u[1]-o],[u[0]+o,u[1]+o]]:t===Zk?[[Math.max(u[0]-o,l),e],[Math.min(u[0]+o,n),r]]:[[l,Math.max(u[1]-o,e)],[n,Math.min(u[1]+o,r)]])}return i.scale=function(t){return arguments.length?(a(t),c()):a()},i.translate=function(t){return arguments.length?(u(t),c()):u()},i.center=function(t){return arguments.length?(o(t),c()):o()},i.clipExtent=function(t){return arguments.length?(null==t?l=e=n=r=null:(l=+t[0][0],e=+t[0][1],n=+t[1][0],r=+t[1][1]),c()):null==l?null:[[l,e],[n,r]]},c()}function Kk(t){return Ux((bx+t)/2)}function tM(t,e){var n=Fx(t),r=t===e?Ox(t):zx(n/Fx(e))/zx(Kk(e)/Kk(t)),i=n*Nx(Kk(t),r)/r;if(!r)return Zk;function o(t,e){i>0?e<-bx+vx&&(e=-bx+vx):e>bx-vx&&(e=bx-vx);var n=i/Nx(Kk(e),r);return[n*Ox(r*t),i-n*Fx(r*t)]}return o.invert=function(t,e){var n=i-e,o=Rx(r)*Lx(t*t+n*n),a=Cx(t,Ex(n))*Rx(n);return n*r<0&&(a-=xx*Rx(t)*Rx(n)),[a/r,2*Dx(Nx(i/o,1/r))-bx]},o}function eM(t,e){return[t,e]}function nM(t,e){var n=Fx(t),r=t===e?Ox(t):(n-Fx(e))/(e-t),i=n/r+t;if(Ex(r)vx&&--i>0);return[t/(.8707+(o=r*r)*(o*(o*o*o*(.003971-.001529*o)-.013791)-.131979)),r]},fM.invert=Gk(Px),hM.invert=Gk((function(t){return 2*Dx(t)})),dM.invert=function(t,e){return[-e,2*Dx(Bx(t))-bx]};var pM=Math.abs,gM=Math.cos,mM=Math.sin,yM=Math.PI,vM=yM/2,_M=function(t){return t>0?Math.sqrt(t):0}(2);function xM(t){return t>1?vM:t<-1?-vM:Math.asin(t)}function bM(t,e){var n,r=t*mM(e),i=30;do{e-=n=(e+mM(e)-r)/(1+gM(e))}while(pM(n)>1e-6&&--i>0);return e/2}var wM=function(t,e,n){function r(r,i){return[t*r*gM(i=bM(n,i)),e*mM(i)]}return r.invert=function(r,i){return i=xM(i/e),[r/(t*gM(i)),xM((2*i+mM(2*i))/n)]},r}(_M/vM,_M,yM);const kM=Fk(),MM=["clipAngle","clipExtent","scale","translate","center","rotate","parallels","precision","reflectX","reflectY","coefficient","distance","fraction","lobes","parallel","radius","ratio","spacing","tilt"];function AM(t,e){return function n(){const r=e();return r.type=t,r.path=Fk().projection(r),r.copy=r.copy||function(){const t=n();return MM.forEach((e=>{r[e]&&t[e](r[e]())})),t.path.pointRadius(r.path.pointRadius()),t},r}}function EM(t,e){if(!t||"string"!=typeof t)throw new Error("Projection type must be a name string.");return t=t.toLowerCase(),arguments.length>1?(CM[t]=AM(t,e),this):CM[t]||null}function DM(t){return t&&t.path||kM}const CM={albers:Yk,albersusa:function(){var t,e,n,r,i,o,a=Yk(),u=Hk().rotate([154,0]).center([-2,58.5]).parallels([55,65]),s=Hk().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(t,e){o=[t,e]}};function c(t){var e=t[0],a=t[1];return o=null,n.point(e,a),o||(r.point(e,a),o)||(i.point(e,a),o)}function f(){return t=e=null,c}return c.invert=function(t){var e=a.scale(),n=a.translate(),r=(t[0]-n[0])/e,i=(t[1]-n[1])/e;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?u:i>=.166&&i<.234&&r>=-.214&&r<-.115?s:a).invert(t)},c.stream=function(n){return t&&e===n?t:(r=[a.stream(e=n),u.stream(n),s.stream(n)],i=r.length,t={point:function(t,e){for(var n=-1;++n2?t[2]+90:90]):[(t=n())[0],t[1],t[2]-90]},n([0,0,90]).scale(159.155)}};for(const t in CM)EM(t,CM[t]);function FM(){}const SM=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]];function BM(){var t=1,e=1,n=a;function r(t,e){return e.map((e=>i(t,e)))}function i(r,i){var a=[],u=[];return function(n,r,i){var a,u,s,l,c,f,h=new Array,d=new Array;a=u=-1,l=n[0]>=r,SM[l<<1].forEach(p);for(;++a=r,SM[s|l<<1].forEach(p);SM[l<<0].forEach(p);for(;++u=r,c=n[u*t]>=r,SM[l<<1|c<<2].forEach(p);++a=r,f=c,c=n[u*t+a+1]>=r,SM[s|l<<1|c<<2|f<<3].forEach(p);SM[l|c<<3].forEach(p)}a=-1,c=n[u*t]>=r,SM[c<<2].forEach(p);for(;++a=r,SM[c<<2|f<<3].forEach(p);function p(t){var e,n,r=[t[0][0]+a,t[0][1]+u],s=[t[1][0]+a,t[1][1]+u],l=o(r),c=o(s);(e=d[l])?(n=h[c])?(delete d[e.end],delete h[n.start],e===n?(e.ring.push(s),i(e.ring)):h[e.start]=d[n.end]={start:e.start,end:n.end,ring:e.ring.concat(n.ring)}):(delete d[e.end],e.ring.push(s),d[e.end=c]=e):(e=h[c])?(n=d[l])?(delete h[e.start],delete d[n.end],e===n?(e.ring.push(s),i(e.ring)):h[n.start]=d[e.end]={start:n.start,end:e.end,ring:n.ring.concat(e.ring)}):(delete h[e.start],e.ring.unshift(r),h[e.start=l]=e):h[l]=d[c]={start:l,end:c,ring:[r,s]}}SM[c<<3].forEach(p)}(r,i,(t=>{n(t,r,i),function(t){var e=0,n=t.length,r=t[n-1][1]*t[0][0]-t[n-1][0]*t[0][1];for(;++e0?a.push([t]):u.push(t)})),u.forEach((t=>{for(var e,n=0,r=a.length;n{var o,a=n[0],u=n[1],s=0|a,l=0|u,c=r[l*t+s];a>0&&a0&&u=0&&o>=0||u("invalid size"),t=i,e=o,r},r.smooth=function(t){return arguments.length?(n=t?a:FM,r):n===a},r}function TM(t,e){for(var n,r=-1,i=e.length;++rr!=d>r&&n<(h-l)*(r-c)/(d-c)+l&&(i=-i)}return i}function NM(t,e,n){var r,i,o,a;return function(t,e,n){return(e[0]-t[0])*(n[1]-t[1])==(n[0]-t[0])*(e[1]-t[1])}(t,e,n)&&(i=t[r=+(t[0]===e[0])],o=n[r],a=e[r],i<=o&&o<=a||a<=o&&o<=i)}function OM(t,e,n){return function(r){var i=tt(r),o=n?Math.min(i[0],0):i[0],a=i[1],u=a-o,s=e?De(o,a,t):u/(t+1);return Re(s,a,s)}}function RM(t){pa.call(this,null,t)}function LM(t,e,n,r,i){const o=t.x1||0,a=t.y1||0,u=e*n<0;function s(t){t.forEach(l)}function l(t){u&&t.reverse(),t.forEach(c)}function c(t){t[0]=(t[0]-o)*e+r,t[1]=(t[1]-a)*n+i}return function(t){return t.coordinates.forEach(s),t}}function UM(t,e,n){const r=t>=0?t:ba(e,n);return Math.round((Math.sqrt(4*r*r+1)-1)/2)}function qM(t){return H(t)?t:Z(+t)}function PM(){var t=t=>t[0],e=t=>t[1],n=d,r=[-1,-1],i=960,o=500,a=2;function s(u,s){const l=UM(r[0],u,t)>>a,c=UM(r[1],u,e)>>a,f=l?l+2:0,h=c?c+2:0,d=2*f+(i>>a),p=2*h+(o>>a),g=new Float32Array(d*p),m=new Float32Array(d*p);let y=g;u.forEach((r=>{const i=f+(+t(r)>>a),o=h+(+e(r)>>a);i>=0&&i=0&&o0&&c>0?(jM(d,p,g,m,l),IM(d,p,m,g,c),jM(d,p,g,m,l),IM(d,p,m,g,c),jM(d,p,g,m,l),IM(d,p,m,g,c)):l>0?(jM(d,p,g,m,l),jM(d,p,m,g,l),jM(d,p,g,m,l),y=m):c>0&&(IM(d,p,g,m,c),IM(d,p,m,g,c),IM(d,p,g,m,c),y=m);const v=s?Math.pow(2,-2*a):1/Le(y);for(let t=0,e=d*p;t>a),y2:h+(o>>a)}}return s.x=function(e){return arguments.length?(t=qM(e),s):t},s.y=function(t){return arguments.length?(e=qM(t),s):e},s.weight=function(t){return arguments.length?(n=qM(t),s):n},s.size=function(t){if(!arguments.length)return[i,o];var e=+t[0],n=+t[1];return e>=0&&n>=0||u("invalid size"),i=e,o=n,s},s.cellSize=function(t){return arguments.length?((t=+t)>=1||u("invalid cell size"),a=Math.floor(Math.log(t)/Math.LN2),s):1<=i&&(e>=o&&(u-=n[e-o+a*t]),r[e-i+a*t]=u/Math.min(e+1,t-1+o-e,o))}function IM(t,e,n,r,i){const o=1+(i<<1);for(let a=0;a=i&&(u>=o&&(s-=n[a+(u-o)*t]),r[a+(u-i)*t]=s/Math.min(u+1,e-1+o-u,o))}function $M(t){pa.call(this,null,t)}RM.Definition={type:"Isocontour",metadata:{generates:!0},params:[{name:"field",type:"field"},{name:"thresholds",type:"number",array:!0},{name:"levels",type:"number"},{name:"nice",type:"boolean",default:!1},{name:"resolve",type:"enum",values:["shared","independent"],default:"independent"},{name:"zero",type:"boolean",default:!0},{name:"smooth",type:"boolean",default:!0},{name:"scale",type:"number",expr:!0},{name:"translate",type:"number",array:!0,expr:!0},{name:"as",type:"string",null:!0,default:"contour"}]},ut(RM,pa,{transform(t,e){if(this.value&&!e.changed()&&!t.modified())return e.StopPropagation;var n=e.fork(e.NO_SOURCE|e.NO_FIELDS),r=e.materialize(e.SOURCE).source,i=t.field||f,o=BM().smooth(!1!==t.smooth),a=t.thresholds||function(t,e,n){const r=OM(n.levels||10,n.nice,!1!==n.zero);return"shared"!==n.resolve?r:r(t.map((t=>Ce(e(t).values))))}(r,i,t),u=null===t.as?null:t.as||"contour",s=[];return r.forEach((e=>{const n=i(e),r=o.size([n.width,n.height])(n.values,v(a)?a:a(n.values));!function(t,e,n,r){let i=r.scale||e.scale,o=r.translate||e.translate;H(i)&&(i=i(n,r));H(o)&&(o=o(n,r));if((1===i||null==i)&&!o)return;const a=(ht(i)?i:i[0])||1,u=(ht(i)?i:i[1])||1,s=o&&o[0]||0,l=o&&o[1]||0;t.forEach(LM(e,a,u,s,l))}(r,n,e,t),r.forEach((t=>{s.push(qo(e,Lo(null!=u?{[u]:t}:t)))}))})),this.value&&(n.rem=this.value),this.value=n.source=n.add=s,n}}),$M.Definition={type:"KDE2D",metadata:{generates:!0},params:[{name:"size",type:"number",array:!0,length:2,required:!0},{name:"x",type:"field",required:!0},{name:"y",type:"field",required:!0},{name:"weight",type:"field"},{name:"groupby",type:"field",array:!0},{name:"cellSize",type:"number"},{name:"bandwidth",type:"number",array:!0,length:2},{name:"counts",type:"boolean",default:!1},{name:"as",type:"string",default:"grid"}]};const WM=["x","y","weight","size","cellSize","bandwidth"];function HM(t,e){return WM.forEach((n=>null!=e[n]?t[n](e[n]):0)),t}function YM(t){pa.call(this,null,t)}ut($M,pa,{transform(t,e){if(this.value&&!e.changed()&&!t.modified())return e.StopPropagation;var r,i=e.fork(e.NO_SOURCE|e.NO_FIELDS),o=function(t,e){var n,r,i,o,a,u,s=[],l=t=>t(o);if(null==e)s.push(t);else for(n={},r=0,i=t.length;rLo(function(t,e){for(let n=0;nvx})).map(s)).concat(Re(Sx(o/d)*d,i,d).filter((function(t){return Ex(t%g)>vx})).map(l))}return y.lines=function(){return v().map((function(t){return{type:"LineString",coordinates:t}}))},y.outline=function(){return{type:"Polygon",coordinates:[c(r).concat(f(a).slice(1),c(n).reverse().slice(1),f(u).reverse().slice(1))]}},y.extent=function(t){return arguments.length?y.extentMajor(t).extentMinor(t):y.extentMinor()},y.extentMajor=function(t){return arguments.length?(r=+t[0][0],n=+t[1][0],u=+t[0][1],a=+t[1][1],r>n&&(t=r,r=n,n=t),u>a&&(t=u,u=a,a=t),y.precision(m)):[[r,u],[n,a]]},y.extentMinor=function(n){return arguments.length?(e=+n[0][0],t=+n[1][0],o=+n[0][1],i=+n[1][1],e>t&&(n=e,e=t,t=n),o>i&&(n=o,o=i,i=n),y.precision(m)):[[e,o],[t,i]]},y.step=function(t){return arguments.length?y.stepMajor(t).stepMinor(t):y.stepMinor()},y.stepMajor=function(t){return arguments.length?(p=+t[0],g=+t[1],y):[p,g]},y.stepMinor=function(t){return arguments.length?(h=+t[0],d=+t[1],y):[h,d]},y.precision=function(h){return arguments.length?(m=+h,s=Fw(o,i,90),l=Sw(e,t,m),c=Fw(u,a,90),f=Sw(r,n,m),y):m},y.extentMajor([[-180,-89.999999],[180,89.999999]]).extentMinor([[-180,-80.000001],[180,80.000001]])}()}function tA(t){pa.call(this,null,t)}function eA(t){if(!H(t))return!1;const e=Dt(r(t));return e.$x||e.$y||e.$value||e.$max}function nA(t){pa.call(this,null,t),this.modified(!0)}function rA(t,e,n){H(t[e])&&t[e](n)}XM.Definition={type:"GeoJSON",metadata:{},params:[{name:"fields",type:"field",array:!0,length:2},{name:"geojson",type:"field"}]},ut(XM,pa,{transform(t,e){var n,i=this._features,o=this._points,a=t.fields,u=a&&a[0],s=a&&a[1],l=t.geojson||!a&&f,c=e.ADD;n=t.modified()||e.changed(e.REM)||e.modified(r(l))||u&&e.modified(r(u))||s&&e.modified(r(s)),this.value&&!n||(c=e.SOURCE,this._features=i=[],this._points=o=[]),l&&e.visit(c,(t=>i.push(l(t)))),u&&s&&(e.visit(c,(t=>{var e=u(t),n=s(t);null!=e&&null!=n&&(e=+e)===e&&(n=+n)===n&&o.push([e,n])})),i=i.concat({type:VM,geometry:{type:"MultiPoint",coordinates:o}})),this.value={type:GM,features:i}}}),JM.Definition={type:"GeoPath",metadata:{modifies:!0},params:[{name:"projection",type:"projection"},{name:"field",type:"field"},{name:"pointRadius",type:"number",expr:!0},{name:"as",type:"string",default:"path"}]},ut(JM,pa,{transform(t,e){var n=e.fork(e.ALL),r=this.value,i=t.field||f,o=t.as||"path",a=n.SOURCE;!r||t.modified()?(this.value=r=DM(t.projection),n.materialize().reflow()):a=i===f||e.modified(i.fields)?n.ADD_MOD:n.ADD;const u=function(t,e){const n=t.pointRadius();t.context(null),null!=e&&t.pointRadius(e);return n}(r,t.pointRadius);return n.visit(a,(t=>t[o]=r(i(t)))),r.pointRadius(u),n.modifies(o)}}),ZM.Definition={type:"GeoPoint",metadata:{modifies:!0},params:[{name:"projection",type:"projection",required:!0},{name:"fields",type:"field",array:!0,required:!0,length:2},{name:"as",type:"string",array:!0,length:2,default:["x","y"]}]},ut(ZM,pa,{transform(t,e){var n,r=t.projection,i=t.fields[0],o=t.fields[1],a=t.as||["x","y"],u=a[0],s=a[1];function l(t){const e=r([i(t),o(t)]);e?(t[u]=e[0],t[s]=e[1]):(t[u]=void 0,t[s]=void 0)}return t.modified()?e=e.materialize().reflow(!0).visit(e.SOURCE,l):(n=e.modified(i.fields)||e.modified(o.fields),e.visit(n?e.ADD_MOD:e.ADD,l)),e.modifies(a)}}),QM.Definition={type:"GeoShape",metadata:{modifies:!0,nomod:!0},params:[{name:"projection",type:"projection"},{name:"field",type:"field",default:"datum"},{name:"pointRadius",type:"number",expr:!0},{name:"as",type:"string",default:"shape"}]},ut(QM,pa,{transform(t,e){var n=e.fork(e.ALL),r=this.value,i=t.as||"shape",o=n.ADD;return r&&!t.modified()||(this.value=r=function(t,e,n){const r=null==n?n=>t(e(n)):r=>{var i=t.pointRadius(),o=t.pointRadius(n)(e(r));return t.pointRadius(i),o};return r.context=e=>(t.context(e),r),r}(DM(t.projection),t.field||l("datum"),t.pointRadius),n.materialize().reflow(),o=n.SOURCE),n.visit(o,(t=>t[i]=r)),n.modifies(i)}}),KM.Definition={type:"Graticule",metadata:{changes:!0,generates:!0},params:[{name:"extent",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"extentMajor",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"extentMinor",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"step",type:"number",array:!0,length:2},{name:"stepMajor",type:"number",array:!0,length:2,default:[90,360]},{name:"stepMinor",type:"number",array:!0,length:2,default:[10,10]},{name:"precision",type:"number",default:2.5}]},ut(KM,pa,{transform(t,e){var n,r=this.value,i=this.generator;if(!r.length||t.modified())for(const e in t)H(i[e])&&i[e](t[e]);return n=i(),r.length?e.mod.push(Po(r[0],n)):e.add.push(Lo(n)),r[0]=n,e}}),tA.Definition={type:"heatmap",metadata:{modifies:!0},params:[{name:"field",type:"field"},{name:"color",type:"string",expr:!0},{name:"opacity",type:"number",expr:!0},{name:"resolve",type:"enum",values:["shared","independent"],default:"independent"},{name:"as",type:"string",default:"image"}]},ut(tA,pa,{transform(t,e){if(!e.changed()&&!t.modified())return e.StopPropagation;var n=e.materialize(e.SOURCE).source,r="shared"===t.resolve,i=t.field||f,o=function(t,e){let n;H(t)?(n=n=>t(n,e),n.dep=eA(t)):t?n=Z(t):(n=t=>t.$value/t.$max||0,n.dep=!0);return n}(t.opacity,t),a=function(t,e){let n;H(t)?(n=n=>wc(t(n,e)),n.dep=eA(t)):n=Z(wc(t||"#888"));return n}(t.color,t),u=t.as||"image",s={$x:0,$y:0,$value:0,$max:r?Ce(n.map((t=>Ce(i(t).values)))):0};return n.forEach((t=>{const e=i(t),n=K({},t,s);r||(n.$max=Ce(e.values||[])),t[u]=function(t,e,n,r){const i=t.width,o=t.height,a=t.x1||0,u=t.y1||0,s=t.x2||i,l=t.y2||o,c=t.values,f=c?t=>c[t]:h,d=Gl(s-a,l-u),p=d.getContext("2d"),g=p.getImageData(0,0,s-a,l-u),m=g.data;for(let t=u,o=0;t{null!=t[e]&&rA(n,e,t[e])}))):MM.forEach((e=>{t.modified(e)&&rA(n,e,t[e])})),null!=t.pointRadius&&n.path.pointRadius(t.pointRadius),t.fit&&function(t,e){const n=function(t){return 1===(t=$(t)).length?t[0]:{type:GM,features:t.reduce(((t,e)=>t.concat(function(t){return t.type===GM?t.features:$(t).filter((t=>null!=t)).map((t=>t.type===VM?t:{type:VM,geometry:t}))}(e))),[])}}(e.fit);e.extent?t.fitExtent(e.extent,n):e.size&&t.fitSize(e.size,n)}(n,t),e.fork(e.NO_SOURCE|e.NO_FIELDS)}});var iA=Object.freeze({__proto__:null,contour:YM,geojson:XM,geopath:JM,geopoint:ZM,geoshape:QM,graticule:KM,heatmap:tA,isocontour:RM,kde2d:$M,projection:nA});function oA(t,e,n,r){if(isNaN(e)||isNaN(n))return t;var i,o,a,u,s,l,c,f,h,d=t._root,p={data:r},g=t._x0,m=t._y0,y=t._x1,v=t._y1;if(!d)return t._root=p,t;for(;d.length;)if((l=e>=(o=(g+y)/2))?g=o:y=o,(c=n>=(a=(m+v)/2))?m=a:v=a,i=d,!(d=d[f=c<<1|l]))return i[f]=p,t;if(u=+t._x.call(null,d.data),s=+t._y.call(null,d.data),e===u&&n===s)return p.next=d,i?i[f]=p:t._root=p,t;do{i=i?i[f]=new Array(4):t._root=new Array(4),(l=e>=(o=(g+y)/2))?g=o:y=o,(c=n>=(a=(m+v)/2))?m=a:v=a}while((f=c<<1|l)==(h=(s>=a)<<1|u>=o));return i[h]=d,i[f]=p,t}function aA(t,e,n,r,i){this.node=t,this.x0=e,this.y0=n,this.x1=r,this.y1=i}function uA(t){return t[0]}function sA(t){return t[1]}function lA(t,e,n){var r=new cA(null==e?uA:e,null==n?sA:n,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function cA(t,e,n,r,i,o){this._x=t,this._y=e,this._x0=n,this._y0=r,this._x1=i,this._y1=o,this._root=void 0}function fA(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var hA=lA.prototype=cA.prototype;function dA(t){return function(){return t}}function pA(t){return 1e-6*(t()-.5)}function gA(t){return t.x+t.vx}function mA(t){return t.y+t.vy}function yA(t){return t.index}function vA(t,e){var n=t.get(e);if(!n)throw new Error("node not found: "+e);return n}hA.copy=function(){var t,e,n=new cA(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return n;if(!r.length)return n._root=fA(r),n;for(t=[{source:r,target:n._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(e=r.source[i])&&(e.length?t.push({source:e,target:r.target[i]=new Array(4)}):r.target[i]=fA(e));return n},hA.add=function(t){const e=+this._x.call(null,t),n=+this._y.call(null,t);return oA(this.cover(e,n),e,n,t)},hA.addAll=function(t){var e,n,r,i,o=t.length,a=new Array(o),u=new Array(o),s=1/0,l=1/0,c=-1/0,f=-1/0;for(n=0;nc&&(c=r),if&&(f=i));if(s>c||l>f)return this;for(this.cover(s,l).cover(c,f),n=0;nt||t>=i||r>e||e>=o;)switch(u=(eh||(o=s.y0)>d||(a=s.x1)=y)<<1|t>=m)&&(s=p[p.length-1],p[p.length-1]=p[p.length-1-l],p[p.length-1-l]=s)}else{var v=t-+this._x.call(null,g.data),_=e-+this._y.call(null,g.data),x=v*v+_*_;if(x=(u=(p+m)/2))?p=u:m=u,(c=a>=(s=(g+y)/2))?g=s:y=s,e=d,!(d=d[f=c<<1|l]))return this;if(!d.length)break;(e[f+1&3]||e[f+2&3]||e[f+3&3])&&(n=e,h=f)}for(;d.data!==t;)if(r=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,r?(i?r.next=i:delete r.next,this):e?(i?e[f]=i:delete e[f],(d=e[0]||e[1]||e[2]||e[3])&&d===(e[3]||e[2]||e[1]||e[0])&&!d.length&&(n?n[h]=d:this._root=d),this):(this._root=i,this)},hA.removeAll=function(t){for(var e=0,n=t.length;e{}};function xA(){for(var t,e=0,n=arguments.length,r={};e=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function kA(t,e){for(var n,r=0,i=t.length;r0)for(var n,r,i=new Array(n),o=0;o=0&&e._call.call(null,t),e=e._next;--DA}()}finally{DA=0,function(){var t,e,n=AA,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:AA=e);EA=t,jA(r)}(),BA=0}}function PA(){var t=zA.now(),e=t-SA;e>1e3&&(TA-=e,SA=t)}function jA(t){DA||(CA&&(CA=clearTimeout(CA)),t-BA>24?(t<1/0&&(CA=setTimeout(qA,t-zA.now()-TA)),FA&&(FA=clearInterval(FA))):(FA||(SA=zA.now(),FA=setInterval(PA,1e3)),DA=1,NA(qA)))}LA.prototype=UA.prototype={constructor:LA,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?OA():+n)+(null==e?0:+e),this._next||EA===this||(EA?EA._next=this:AA=this,EA=this),this._call=t,this._time=n,jA()},stop:function(){this._call&&(this._call=null,this._time=1/0,jA())}};const IA=4294967296;function $A(t){return t.x}function WA(t){return t.y}var HA=Math.PI*(3-Math.sqrt(5));function YA(t){var e,n=1,r=.001,i=1-Math.pow(r,1/300),o=0,a=.6,u=new Map,s=UA(f),l=xA("tick","end"),c=function(){let t=1;return()=>(t=(1664525*t+1013904223)%IA)/IA}();function f(){h(),l.call("tick",e),n1?(null==n?u.delete(t):u.set(t,p(n)),e):u.get(t)},find:function(e,n,r){var i,o,a,u,s,l=0,c=t.length;for(null==r?r=1/0:r*=r,l=0;l1?(l.on(t,n),e):l.on(t)}}}const VA={center:function(t,e){var n,r=1;function i(){var i,o,a=n.length,u=0,s=0;for(i=0;il+p||oc+p||as.index){var g=l-u.x-u.vx,m=c-u.y-u.vy,y=g*g+m*m;yt.r&&(t.r=t[e].r)}function s(){if(e){var r,i,o=e.length;for(n=new Array(o),r=0;r=u)){(t.data!==e||t.next)&&(0===f&&(p+=(f=pA(n))*f),0===h&&(p+=(h=pA(n))*h),p[u(t,e,r),t])));for(a=0,i=new Array(l);ae(t,n):e)}QA.Definition={type:"Force",metadata:{modifies:!0},params:[{name:"static",type:"boolean",default:!1},{name:"restart",type:"boolean",default:!1},{name:"iterations",type:"number",default:300},{name:"alpha",type:"number",default:1},{name:"alphaMin",type:"number",default:.001},{name:"alphaTarget",type:"number",default:0},{name:"velocityDecay",type:"number",default:.4},{name:"forces",type:"param",array:!0,params:[{key:{force:"center"},params:[{name:"x",type:"number",default:0},{name:"y",type:"number",default:0}]},{key:{force:"collide"},params:[{name:"radius",type:"number",expr:!0},{name:"strength",type:"number",default:.7},{name:"iterations",type:"number",default:1}]},{key:{force:"nbody"},params:[{name:"strength",type:"number",default:-30},{name:"theta",type:"number",default:.9},{name:"distanceMin",type:"number",default:1},{name:"distanceMax",type:"number"}]},{key:{force:"link"},params:[{name:"links",type:"data"},{name:"id",type:"field"},{name:"distance",type:"number",default:30,expr:!0},{name:"strength",type:"number",expr:!0},{name:"iterations",type:"number",default:1}]},{key:{force:"x"},params:[{name:"strength",type:"number",default:.1},{name:"x",type:"field"}]},{key:{force:"y"},params:[{name:"strength",type:"number",default:.1},{name:"y",type:"field"}]}]},{name:"as",type:"string",array:!0,modify:!1,default:ZA}]},ut(QA,pa,{transform(t,e){var n,r,i=this.value,o=e.changed(e.ADD_REM),a=t.modified(XA),u=t.iterations||300;if(i?(o&&(e.modifies("index"),i.nodes(e.source)),(a||e.changed(e.MOD))&&KA(i,t,0,e)):(this.value=i=function(t,e){const n=YA(t),r=n.stop,i=n.restart;let o=!1;return n.stopped=()=>o,n.restart=()=>(o=!1,i()),n.stop=()=>(o=!0,r()),KA(n,e,!0).on("end",(()=>o=!0))}(e.source,t),i.on("tick",(n=e.dataflow,r=this,()=>n.touch(r).run())),t.static||(o=!0,i.tick()),e.modifies("index")),a||o||t.modified(JA)||e.changed()&&t.restart)if(i.alpha(Math.max(i.alpha(),t.alpha||1)).alphaDecay(1-Math.pow(i.alphaMin(),1/u)),t.static)for(i.stop();--u>=0;)i.tick();else if(i.stopped()&&i.restart(),!o)return e.StopPropagation;return this.finish(t,e)},finish(t,e){const n=e.dataflow;for(let t,e=this._argops,u=0,s=e.length;u=0;)e+=n[r].value;else e=1;t.value=e}function sE(t,e){t instanceof Map?(t=[void 0,t],void 0===e&&(e=cE)):void 0===e&&(e=lE);for(var n,r,i,o,a,u=new dE(t),s=[u];n=s.pop();)if((i=e(n.data))&&(a=(i=Array.from(i)).length))for(n.children=i,o=a-1;o>=0;--o)s.push(r=i[o]=new dE(i[o])),r.parent=n,r.depth=n.depth+1;return u.eachBefore(hE)}function lE(t){return t.children}function cE(t){return Array.isArray(t)?t[1]:null}function fE(t){void 0!==t.data.value&&(t.value=t.data.value),t.data=t.data.data}function hE(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function dE(t){this.data=t,this.depth=this.height=0,this.parent=null}function pE(t){for(var e,n,r=0,i=(t=function(t){for(var e,n,r=t.length;r;)n=Math.random()*r--|0,e=t[r],t[r]=t[n],t[n]=e;return t}(Array.from(t))).length,o=[];r0&&n*n>r*r+i*i}function vE(t,e){for(var n=0;n(a*=a)?(r=(l+a-i)/(2*l),o=Math.sqrt(Math.max(0,a/l-r*r)),n.x=t.x-r*u-o*s,n.y=t.y-r*s+o*u):(r=(l+i-a)/(2*l),o=Math.sqrt(Math.max(0,i/l-r*r)),n.x=e.x+r*u-o*s,n.y=e.y+r*s+o*u)):(n.x=e.x+n.r,n.y=e.y)}function kE(t,e){var n=t.r+e.r-1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function ME(t){var e=t._,n=t.next._,r=e.r+n.r,i=(e.x*n.r+n.x*e.r)/r,o=(e.y*n.r+n.y*e.r)/r;return i*i+o*o}function AE(t){this._=t,this.next=null,this.previous=null}function EE(t){if(!(i=(t=function(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}(t)).length))return 0;var e,n,r,i,o,a,u,s,l,c,f;if((e=t[0]).x=0,e.y=0,!(i>1))return e.r;if(n=t[1],e.x=-n.r,n.x=e.r,n.y=0,!(i>2))return e.r+n.r;wE(n,e,r=t[2]),e=new AE(e),n=new AE(n),r=new AE(r),e.next=r.previous=n,n.next=e.previous=r,r.next=n.previous=e;t:for(u=3;u=0;--r)o.push(n[r]);return this},find:function(t,e){let n=-1;for(const r of this)if(t.call(e,r,++n,this))return r},sum:function(t){return this.eachAfter((function(e){for(var n=+t(e.data)||0,r=e.children,i=r&&r.length;--i>=0;)n+=r[i].value;e.value=n}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),i=null;t=n.pop(),e=r.pop();for(;t===e;)i=t,t=n.pop(),e=r.pop();return i}(e,t),r=[e];e!==n;)e=e.parent,r.push(e);for(var i=r.length;t!==n;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){return Array.from(this)},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(n){n!==t&&e.push({source:n.parent,target:n})})),e},copy:function(){return sE(this).eachBefore(fE)},[Symbol.iterator]:function*(){var t,e,n,r,i=this,o=[i];do{for(t=o.reverse(),o=[];i=t.pop();)if(yield i,e=i.children)for(n=0,r=e.length;n0)throw new Error("cycle");return o}return n.id=function(e){return arguments.length?(t=CE(e),n):t},n.parentId=function(t){return arguments.length?(e=CE(t),n):e},n}function IE(t,e){return t.parent===e.parent?1:2}function $E(t){var e=t.children;return e?e[0]:t.t}function WE(t){var e=t.children;return e?e[e.length-1]:t.t}function HE(t,e,n){var r=n/(e.i-t.i);e.c-=r,e.s+=n,t.c+=r,e.z+=n,e.m+=n}function YE(t,e,n){return t.a.parent===e.parent?t.a:n}function VE(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}function GE(t,e,n,r,i){for(var o,a=t.children,u=-1,s=a.length,l=t.value&&(i-n)/t.value;++uh&&(h=u),m=c*c*g,(d=Math.max(h/m,m/f))>p){c-=u;break}p=d}y.push(a={value:c,dice:s1?e:1)},n}(XE);var QE=function t(e){function n(t,n,r,i,o){if((a=t._squarify)&&a.ratio===e)for(var a,u,s,l,c,f=-1,h=a.length,d=t.value;++f1?e:1)},n}(XE);function KE(t,e,n){const r={};return t.each((t=>{const i=t.data;n(i)&&(r[e(i)]=t)})),t.lookup=r,t}function tD(t){pa.call(this,null,t)}tD.Definition={type:"Nest",metadata:{treesource:!0,changes:!0},params:[{name:"keys",type:"field",array:!0},{name:"generate",type:"boolean"}]};const eD=t=>t.values;function nD(){const t=[],e={entries:t=>r(n(t,0),0),key:n=>(t.push(n),e)};function n(e,r){if(r>=t.length)return e;const i=e.length,o=t[r++],a={},u={};let s,l,c,f=-1;for(;++ft.length)return e;const i=[];for(const t in e)i.push({key:t,values:r(e[t],n)});return i}return e}function rD(t){pa.call(this,null,t)}ut(tD,pa,{transform(t,e){e.source||u("Nest transform requires an upstream data source.");var n=t.generate,r=t.modified(),i=e.clone(),o=this.value;return(!o||r||e.changed())&&(o&&o.each((t=>{t.children&&No(t.data)&&i.rem.push(t.data)})),this.value=o=sE({values:$(t.keys).reduce(((t,e)=>(t.key(e),t)),nD()).entries(i.source)},eD),n&&o.each((t=>{t.children&&(t=Lo(t.data),i.add.push(t),i.source.push(t))})),KE(o,Oo,Oo)),i.source.root=o,i}});const iD=(t,e)=>t.parent===e.parent?1:2;ut(rD,pa,{transform(t,e){e.source&&e.source.root||u(this.constructor.name+" transform requires a backing tree data source.");const n=this.layout(t.method),r=this.fields,i=e.source.root,o=t.as||r;t.field?i.sum(t.field):i.count(),t.sort&&i.sort(jo(t.sort,(t=>t.data))),function(t,e,n){for(let r,i=0,o=e.length;ifunction(t,e,n){const r=t.data,i=e.length-1;for(let o=0;o=0;--i)u.push(n=e.children[i]=new VE(r[i],i)),n.parent=e;return(a.parent=new VE(null,0)).children=[a],a}(i);if(s.eachAfter(o),s.parent.m=-s.z,s.eachBefore(a),r)i.eachBefore(u);else{var l=i,c=i,f=i;i.eachBefore((function(t){t.xc.x&&(c=t),t.depth>f.depth&&(f=t)}));var h=l===c?1:t(l,c)/2,d=h-l.x,p=e/(c.x+h+d),g=n/(f.depth||1);i.eachBefore((function(t){t.x=(t.x+d)*p,t.y=t.depth*g}))}return i}function o(e){var n=e.children,r=e.parent.children,i=e.i?r[e.i-1]:null;if(n){!function(t){for(var e,n=0,r=0,i=t.children,o=i.length;--o>=0;)(e=i[o]).z+=n,e.m+=n,n+=e.s+(r+=e.c)}(e);var o=(n[0].z+n[n.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-o):e.z=o}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,n,r){if(n){for(var i,o=e,a=e,u=n,s=o.parent.children[0],l=o.m,c=a.m,f=u.m,h=s.m;u=WE(u),o=$E(o),u&&o;)s=$E(s),(a=WE(a)).a=e,(i=u.z+f-o.z-l+t(u._,o._))>0&&(HE(YE(u,e,r),e,i),l+=i,c+=i),f+=u.m,l+=o.m,h+=s.m,c+=a.m;u&&!WE(a)&&(a.t=u,a.m+=f-c),o&&!$E(s)&&(s.t=o,s.m+=l-h,r=e)}return r}(e,i,e.parent.A||r[0])}function a(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function u(t){t.x*=e,t.y=t.depth*n}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i},cluster:function(){var t=iE,e=1,n=1,r=!1;function i(i){var o,a=0;i.eachAfter((function(e){var n=e.children;n?(e.x=function(t){return t.reduce(oE,0)/t.length}(n),e.y=function(t){return 1+t.reduce(aE,0)}(n)):(e.x=o?a+=t(e,o):0,e.y=0,o=e)}));var u=function(t){for(var e;e=t.children;)t=e[0];return t}(i),s=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(i),l=u.x-t(u,s)/2,c=s.x+t(s,u)/2;return i.eachAfter(r?function(t){t.x=(t.x-i.x)*e,t.y=(i.y-t.y)*n}:function(t){t.x=(t.x-l)/(c-l)*e,t.y=(1-(i.y?t.y/i.y:1))*n})}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i}},fD=["x","y","depth","children"];function hD(t){rD.call(this,t)}function dD(t){pa.call(this,[],t)}hD.Definition={type:"Tree",metadata:{tree:!0,modifies:!0},params:[{name:"field",type:"field"},{name:"sort",type:"compare"},{name:"method",type:"enum",default:"tidy",values:["tidy","cluster"]},{name:"size",type:"number",array:!0,length:2},{name:"nodeSize",type:"number",array:!0,length:2},{name:"separation",type:"boolean",default:!0},{name:"as",type:"string",array:!0,length:fD.length,default:fD}]},ut(hD,rD,{layout(t){const e=t||"tidy";if(rt(cD,e))return cD[e]();u("Unrecognized Tree layout method: "+e)},params:["size","nodeSize"],fields:fD}),dD.Definition={type:"TreeLinks",metadata:{tree:!0,generates:!0,changes:!0},params:[]},ut(dD,pa,{transform(t,e){const n=this.value,r=e.source&&e.source.root,i=e.fork(e.NO_SOURCE),o={};return r||u("TreeLinks transform requires a tree data source."),e.changed(e.ADD_REM)?(i.rem=n,e.visit(e.SOURCE,(t=>o[Oo(t)]=1)),r.each((t=>{const e=t.data,n=t.parent&&t.parent.data;n&&o[Oo(e)]&&o[Oo(n)]&&i.add.push(Lo({source:n,target:e}))})),this.value=i.add):e.changed(e.MOD)&&(e.visit(e.MOD,(t=>o[Oo(t)]=1)),n.forEach((t=>{(o[Oo(t.source)]||o[Oo(t.target)])&&i.mod.push(t)}))),i}});const pD={binary:function(t,e,n,r,i){var o,a,u=t.children,s=u.length,l=new Array(s+1);for(l[0]=a=o=0;o=n-1){var c=u[e];return c.x0=i,c.y0=o,c.x1=a,void(c.y1=s)}var f=l[e],h=r/2+f,d=e+1,p=n-1;for(;d>>1;l[g]s-o){var v=r?(i*y+a*m)/r:a;t(e,d,m,i,o,v,s),t(d,n,y,v,o,a,s)}else{var _=r?(o*y+s*m)/r:s;t(e,d,m,i,o,a,_),t(d,n,y,i,_,a,s)}}(0,s,t.value,e,n,r,i)},dice:RE,slice:GE,slicedice:function(t,e,n,r,i){(1&t.depth?GE:RE)(t,e,n,r,i)},squarify:ZE,resquarify:QE},gD=["x0","y0","x1","y1","depth","children"];function mD(t){rD.call(this,t)}mD.Definition={type:"Treemap",metadata:{tree:!0,modifies:!0},params:[{name:"field",type:"field"},{name:"sort",type:"compare"},{name:"method",type:"enum",default:"squarify",values:["squarify","resquarify","binary","dice","slice","slicedice"]},{name:"padding",type:"number",default:0},{name:"paddingInner",type:"number",default:0},{name:"paddingOuter",type:"number",default:0},{name:"paddingTop",type:"number",default:0},{name:"paddingRight",type:"number",default:0},{name:"paddingBottom",type:"number",default:0},{name:"paddingLeft",type:"number",default:0},{name:"ratio",type:"number",default:1.618033988749895},{name:"round",type:"boolean",default:!1},{name:"size",type:"number",array:!0,length:2},{name:"as",type:"string",array:!0,length:gD.length,default:gD}]},ut(mD,rD,{layout(){const t=function(){var t=ZE,e=!1,n=1,r=1,i=[0],o=FE,a=FE,u=FE,s=FE,l=FE;function c(t){return t.x0=t.y0=0,t.x1=n,t.y1=r,t.eachBefore(f),i=[0],e&&t.eachBefore(OE),t}function f(e){var n=i[e.depth],r=e.x0+n,c=e.y0+n,f=e.x1-n,h=e.y1-n;f{const n=t.tile();n.ratio&&t.tile(n.ratio(e))},t.method=e=>{rt(pD,e)?t.tile(pD[e]):u("Unrecognized Treemap layout method: "+e)},t},params:["method","ratio","size","round","padding","paddingInner","paddingOuter","paddingTop","paddingRight","paddingBottom","paddingLeft"],fields:gD});var yD=Object.freeze({__proto__:null,nest:tD,pack:aD,partition:sD,stratify:lD,tree:hD,treelinks:dD,treemap:mD});function vD(t,e,n,r){const i=t.width,o=t.height,a=n||r,u=Gl(i,o).getContext("2d");e.forEach((t=>_D(u,t,a)));const s=new Uint32Array(u.getImageData(0,0,i,o).data.buffer),l=t.bitmap(),c=a&&t.bitmap();let f,h,d,p,g;for(h=0;h{e.items.forEach((e=>_D(t,e.items,n)))})):Ym[r].draw(t,{items:n?e.map(xD):e})}function xD(t){const e=qo(t,{});return e.stroke&&(e.strokeOpacity=1),e.fill&&(e.fillOpacity=.0625,e.stroke="#000",e.strokeOpacity=1,e.strokeWidth=2),e}const bD=31,wD=new Uint32Array(33),kD=new Uint32Array(33);kD[0]=0,wD[0]=~kD[0];for(let t=1;t<=32;++t)kD[t]=kD[t-1]<<1|1,wD[t]=~kD[t];function MD(t,e,n){const r=Math.max(1,Math.sqrt(t*e/1e6)),i=~~((t+2*n+r)/r),o=~~((e+2*n+r)/r),a=t=>~~((t+n)/r);return a.invert=t=>t*r-n,a.bitmap=()=>function(t,e){const n=new Uint32Array(~~((t*e+32)/32));function r(t,e){n[t]|=e}function i(t,e){n[t]&=e}return{array:n,get:(e,r)=>{const i=r*t+e;return n[i>>>5]&1<<(i&bD)},set:(e,n)=>{const i=n*t+e;r(i>>>5,1<<(i&bD))},clear:(e,n)=>{const r=n*t+e;i(r>>>5,~(1<<(r&bD)))},getRange:(e,r,i,o)=>{let a,u,s,l,c=o;for(;c>=r;--c)if(a=c*t+e,u=c*t+i,s=a>>>5,l=u>>>5,s===l){if(n[s]&wD[a&bD]&kD[1+(u&bD)])return!0}else{if(n[s]&wD[a&bD])return!0;if(n[l]&kD[1+(u&bD)])return!0;for(let t=s+1;t{let a,u,s,l,c;for(;n<=o;++n)if(a=n*t+e,u=n*t+i,s=a>>>5,l=u>>>5,s===l)r(s,wD[a&bD]&kD[1+(u&bD)]);else for(r(s,wD[a&bD]),r(l,kD[1+(u&bD)]),c=s+1;c{let a,u,s,l,c;for(;n<=o;++n)if(a=n*t+e,u=n*t+r,s=a>>>5,l=u>>>5,s===l)i(s,kD[a&bD]|wD[1+(u&bD)]);else for(i(s,kD[a&bD]),i(l,wD[1+(u&bD)]),c=s+1;cn<0||r<0||o>=e||i>=t}}(i,o),a.ratio=r,a.padding=n,a.width=t,a.height=e,a}function AD(t,e,n,r,i,o){let a=n/2;return t-a<0||t+a>i||e-(a=r/2)<0||e+a>o}function ED(t,e,n,r,i,o,a,u){const s=i*o/(2*r),l=t(e-s),c=t(e+s),f=t(n-(o/=2)),h=t(n+o);return a.outOfBounds(l,f,c,h)||a.getRange(l,f,c,h)||u&&u.getRange(l,f,c,h)}const DD=[-1,-1,1,1],CD=[-1,1,-1,1];const FD=["right","center","left"],SD=["bottom","middle","top"];function BD(t,e,n,r,i,o,a,u,s,l,c,f){return!(i.outOfBounds(t,n,e,r)||(f&&o?o.getRange(t,n,e,r)||!function(t,e,n,r,i){return i[0]<=t&&n<=i[2]&&i[3]<=e&&r<=i[5]}(a,s,u,l,c):i.getRange(t,n,e,r)))}const TD={"top-left":0,top:1,"top-right":2,left:4,middle:5,right:6,"bottom-left":8,bottom:9,"bottom-right":10},zD={naive:function(t,e,n,r){const i=t.width,o=t.height;return function(t){const e=t.datum.datum.items[r].items,n=e.length,a=t.datum.fontSize,u=Cm.width(t.datum,t.datum.text);let s,l,c,f,h,d,p,g=0;for(let r=0;r=g&&(g=p,t.x=h,t.y=d);return h=u/2,d=a/2,s=t.x-h,l=t.x+h,c=t.y-d,f=t.y+d,t.align="center",s<0&&l<=i?t.align="left":0<=s&&i=1;)h=(d+p)/2,ED(t,c,f,l,s,h,a,u)?p=h:d=h;if(d>r)return[c,f,d,!0]}}return function(e){const u=e.datum.datum.items[r].items,l=u.length,c=e.datum.fontSize,f=Cm.width(e.datum,e.datum.text);let h,d,p,g,m,y,v,_,x,b,w,k,M,A,E,D,C,F=n?c:0,S=!1,B=!1,T=0;for(let r=0;rd&&(C=h,h=d,d=C),p>g&&(C=p,p=g,g=C),x=t(h),w=t(d),b=~~((x+w)/2),k=t(p),A=t(g),M=~~((k+A)/2),v=b;v>=x;--v)for(_=M;_>=k;--_)D=s(v,_,F,f,c),D&&([e.x,e.y,F,S]=D);for(v=b;v<=w;++v)for(_=M;_<=A;++_)D=s(v,_,F,f,c),D&&([e.x,e.y,F,S]=D);S||n||(E=Math.abs(d-h+g-p),m=(h+d)/2,y=(p+g)/2,E>=T&&!AD(m,y,f,c,i,o)&&!ED(t,m,y,c,f,c,a,null)&&(T=E,e.x=m,e.y=y,B=!0))}return!(!S&&!B)&&(m=f/2,y=c/2,a.setRange(t(e.x-m),t(e.y-y),t(e.x+m),t(e.y+y)),e.align="center",e.baseline="middle",!0)}},floodfill:function(t,e,n,r){const i=t.width,o=t.height,a=e[0],u=e[1],s=t.bitmap();return function(e){const l=e.datum.datum.items[r].items,c=l.length,f=e.datum.fontSize,h=Cm.width(e.datum,e.datum.text),d=[];let p,g,m,y,v,_,x,b,w,k,M,A,E=n?f:0,D=!1,C=!1,F=0;for(let r=0;r=1;)M=(w+k)/2,ED(t,v,_,f,h,M,a,u)?k=M:w=M;w>E&&(e.x=v,e.y=_,E=w,D=!0)}}D||n||(A=Math.abs(g-p+y-m),v=(p+g)/2,_=(m+y)/2,A>=F&&!AD(v,_,h,f,i,o)&&!ED(t,v,_,f,h,f,a,null)&&(F=A,e.x=v,e.y=_,C=!0))}return!(!D&&!C)&&(v=h/2,_=f/2,a.setRange(t(e.x-v),t(e.y-_),t(e.x+v),t(e.y+_)),e.align="center",e.baseline="middle",!0)}}};function ND(t,e,n,r,i,o,a,u,s,l,c){if(!t.length)return t;const f=Math.max(r.length,i.length),h=function(t,e){const n=new Float64Array(e),r=t.length;for(let e=0;e[t.x,t.x,t.x,t.y,t.y,t.y];return t?"line"===t||"area"===t?t=>i(t.datum):"line"===e?t=>{const e=t.datum.items[r].items;return i(e.length?e["start"===n?0:e.length-1]:{x:NaN,y:NaN})}:t=>{const e=t.datum.bounds;return[e.x1,(e.x1+e.x2)/2,e.x2,e.y1,(e.y1+e.y2)/2,e.y2]}:i}(p,g,u,s),v=MD(e[0],e[1],l),_=m&&"naive"===c;var x;const b=t.map((t=>({datum:t,opacity:0,x:void 0,y:void 0,align:void 0,baseline:void 0,boundary:y(t)})));let w;if(!_){n&&b.sort(((t,e)=>n(t.datum,e.datum)));let e=!1;for(let t=0;tt.datum))].concat(o)),w=o.length?vD(v,o,e,m):function(t,e){const n=t.bitmap();return(e||[]).forEach((e=>n.set(t(e.boundary[0]),t(e.boundary[3])))),[n,void 0]}(v,a&&b)}const k=m?zD[c](v,w,a,s):function(t,e,n,r){const i=t.width,o=t.height,a=e[0],u=e[1],s=r.length;return function(e){const l=e.boundary,c=e.datum.fontSize;if(l[2]<0||l[5]<0||l[0]>i||l[3]>o)return!1;let f,h,d,p,g,m,y,v,_,x,b,w,k,M,A,E=0;for(let i=0;i>>2&3)-1,d=0===f&&0===h||r[i]<0,p=f&&h?Math.SQRT1_2:1,g=r[i]<0?-1:1,m=l[1+f]+r[i]*f*p,b=l[4+h]+g*c*h/2+r[i]*h*p,v=b-c/2,_=b+c/2,w=t(m),M=t(v),A=t(_),!E){if(!BD(w,w,M,A,a,u,m,m,v,_,l,d))continue;E=Cm.width(e.datum,e.datum.text)}if(x=m+g*E*f/2,m=x-E/2,y=x+E/2,w=t(m),k=t(y),BD(w,k,M,A,a,u,m,y,v,_,l,d))return e.x=f?f*g<0?y:m:x,e.y=h?h*g<0?_:v:b,e.align=FD[f*g+1],e.baseline=SD[h*g+1],a.setRange(w,M,k,A),!0}return!1}}(v,w,d,h);return b.forEach((t=>t.opacity=+k(t))),b}const OD=["x","y","opacity","align","baseline"],RD=["top-left","left","bottom-left","top","bottom","top-right","right","bottom-right"];function LD(t){pa.call(this,null,t)}LD.Definition={type:"Label",metadata:{modifies:!0},params:[{name:"size",type:"number",array:!0,length:2,required:!0},{name:"sort",type:"compare"},{name:"anchor",type:"string",array:!0,default:RD},{name:"offset",type:"number",array:!0,default:[1]},{name:"padding",type:"number",default:0},{name:"lineAnchor",type:"string",values:["start","end"],default:"end"},{name:"markIndex",type:"number",default:0},{name:"avoidBaseMark",type:"boolean",default:!0},{name:"avoidMarks",type:"data",array:!0},{name:"method",type:"string",default:"naive"},{name:"as",type:"string",array:!0,length:OD.length,default:OD}]},ut(LD,pa,{transform(t,e){const n=t.modified();if(!(n||e.changed(e.ADD_REM)||function(n){const r=t[n];return H(r)&&e.modified(r.fields)}("sort")))return;t.size&&2===t.size.length||u("Size parameter should be specified as a [width, height] array.");const r=t.as||OD;return ND(e.materialize(e.SOURCE).source,t.size,t.sort,$(t.offset||1),$(t.anchor||RD),t.avoidMarks||[],!1!==t.avoidBaseMark,t.lineAnchor||"end",t.markIndex||0,t.padding||0,t.method||"naive").forEach((t=>{const e=t.datum;e[r[0]]=t.x,e[r[1]]=t.y,e[r[2]]=t.opacity,e[r[3]]=t.align,e[r[4]]=t.baseline})),e.reflow(n).modifies(r)}});var UD=Object.freeze({__proto__:null,label:LD});function qD(t,e){var n,r,i,o,a,u,s=[],l=function(t){return t(o)};if(null==e)s.push(t);else for(n={},r=0,i=t.length;r{nu(e,t.x,t.y,t.bandwidth||.3).forEach((t=>{const n={};for(let t=0;t"poly"===t?e:"quad"===t?2:1)(a,s),c=t.as||[n(t.x),n(t.y)],f=jD[a],h=[];let d=t.extent;rt(jD,a)||u("Invalid regression method: "+a),null!=d&&"log"===a&&d[0]<=0&&(e.dataflow.warn("Ignoring extent with values <= 0 for log regression."),d=null),i.forEach((n=>{if(n.length<=l)return void e.dataflow.warn("Skipping regression with more parameters than data points.");const r=f(n,t.x,t.y,s);if(t.params)return void h.push(Lo({keys:n.dims,coef:r.coef,rSquared:r.rSquared}));const i=d||tt(n,t.x),u=t=>{const e={};for(let t=0;tu([t,r.predict(t)]))):au(r.predict,i,25,200).forEach(u)})),this.value&&(r.rem=this.value),this.value=r.add=r.source=h}return r}});var $D=Object.freeze({__proto__:null,loess:PD,regression:ID});const WD=Math.pow(2,-52),HD=new Uint32Array(512);class YD{static from(t,e=tC,n=eC){const r=t.length,i=new Float64Array(2*r);for(let o=0;o>1;if(e>0&&"number"!=typeof t[0])throw new Error("Expected coords to contain numbers.");this.coords=t;const n=Math.max(2*e-5,0);this._triangles=new Uint32Array(3*n),this._halfedges=new Int32Array(3*n),this._hashSize=Math.ceil(Math.sqrt(e)),this._hullPrev=new Uint32Array(e),this._hullNext=new Uint32Array(e),this._hullTri=new Uint32Array(e),this._hullHash=new Int32Array(this._hashSize).fill(-1),this._ids=new Uint32Array(e),this._dists=new Float64Array(e),this.update()}update(){const{coords:t,_hullPrev:e,_hullNext:n,_hullTri:r,_hullHash:i}=this,o=t.length>>1;let a=1/0,u=1/0,s=-1/0,l=-1/0;for(let e=0;es&&(s=n),r>l&&(l=r),this._ids[e]=e}const c=(a+s)/2,f=(u+l)/2;let h,d,p,g=1/0;for(let e=0;e0&&(d=e,g=n)}let v=t[2*d],_=t[2*d+1],x=1/0;for(let e=0;er&&(e[n++]=i,r=this._dists[i])}return this.hull=e.subarray(0,n),this.triangles=new Uint32Array(0),void(this.halfedges=new Uint32Array(0))}if(XD(m,y,v,_,b,w)){const t=d,e=v,n=_;d=p,v=b,_=w,p=t,b=e,w=n}const k=function(t,e,n,r,i,o){const a=n-t,u=r-e,s=i-t,l=o-e,c=a*a+u*u,f=s*s+l*l,h=.5/(a*l-u*s);return{x:t+(l*c-u*f)*h,y:e+(a*f-s*c)*h}}(m,y,v,_,b,w);this._cx=k.x,this._cy=k.y;for(let e=0;e0&&Math.abs(l-o)<=WD&&Math.abs(c-a)<=WD)continue;if(o=l,a=c,s===h||s===d||s===p)continue;let f=0;for(let t=0,e=this._hashKey(l,c);t0?3-n:1+n)/4}(t-this._cx,e-this._cy)*this._hashSize)%this._hashSize}_legalize(t){const{_triangles:e,_halfedges:n,coords:r}=this;let i=0,o=0;for(;;){const a=n[t],u=t-t%3;if(o=u+(t+2)%3,-1===a){if(0===i)break;t=HD[--i];continue}const s=a-a%3,l=u+(t+1)%3,c=s+(a+2)%3,f=e[o],h=e[t],d=e[l],p=e[c];if(JD(r[2*f],r[2*f+1],r[2*h],r[2*h+1],r[2*d],r[2*d+1],r[2*p],r[2*p+1])){e[t]=p,e[a]=f;const r=n[c];if(-1===r){let e=this._hullStart;do{if(this._hullTri[e]===c){this._hullTri[e]=t;break}e=this._hullPrev[e]}while(e!==this._hullStart)}this._link(t,r),this._link(a,n[o]),this._link(o,c);const u=s+(a+1)%3;i=33306690738754716e-32*Math.abs(a+u)?a-u:0}function XD(t,e,n,r,i,o){return(GD(i,o,t,e,n,r)||GD(t,e,n,r,i,o)||GD(n,r,i,o,t,e))<0}function JD(t,e,n,r,i,o,a,u){const s=t-a,l=e-u,c=n-a,f=r-u,h=i-a,d=o-u,p=c*c+f*f,g=h*h+d*d;return s*(f*g-p*d)-l*(c*g-p*h)+(s*s+l*l)*(c*d-f*h)<0}function ZD(t,e,n,r,i,o){const a=n-t,u=r-e,s=i-t,l=o-e,c=a*a+u*u,f=s*s+l*l,h=.5/(a*l-u*s),d=(l*c-u*f)*h,p=(a*f-s*c)*h;return d*d+p*p}function QD(t,e,n,r){if(r-n<=20)for(let i=n+1;i<=r;i++){const r=t[i],o=e[r];let a=i-1;for(;a>=n&&e[t[a]]>o;)t[a+1]=t[a--];t[a+1]=r}else{let i=n+1,o=r;KD(t,n+r>>1,i),e[t[n]]>e[t[r]]&&KD(t,n,r),e[t[i]]>e[t[r]]&&KD(t,i,r),e[t[n]]>e[t[i]]&&KD(t,n,i);const a=t[i],u=e[a];for(;;){do{i++}while(e[t[i]]u);if(o=o-n?(QD(t,e,i,r),QD(t,e,n,o-1)):(QD(t,e,n,o-1),QD(t,e,i,r))}}function KD(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function tC(t){return t[0]}function eC(t){return t[1]}const nC=1e-6;class rC{constructor(){this._x0=this._y0=this._x1=this._y1=null,this._=""}moveTo(t,e){this._+="M".concat(this._x0=this._x1=+t,",").concat(this._y0=this._y1=+e)}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")}lineTo(t,e){this._+="L".concat(this._x1=+t,",").concat(this._y1=+e)}arc(t,e,n){const r=(t=+t)+(n=+n),i=e=+e;if(n<0)throw new Error("negative radius");null===this._x1?this._+="M".concat(r,",").concat(i):(Math.abs(this._x1-r)>nC||Math.abs(this._y1-i)>nC)&&(this._+="L"+r+","+i),n&&(this._+="A".concat(n,",").concat(n,",0,1,1,").concat(t-n,",").concat(e,"A").concat(n,",").concat(n,",0,1,1,").concat(this._x1=r,",").concat(this._y1=i))}rect(t,e,n,r){this._+="M".concat(this._x0=this._x1=+t,",").concat(this._y0=this._y1=+e,"h").concat(+n,"v").concat(+r,"h").concat(-n,"Z")}value(){return this._||null}}class iC{constructor(){this._=[]}moveTo(t,e){this._.push([t,e])}closePath(){this._.push(this._[0].slice())}lineTo(t,e){this._.push([t,e])}value(){return this._.length?this._:null}}class oC{constructor(t,[e,n,r,i]=[0,0,960,500]){if(!((r=+r)>=(e=+e)&&(i=+i)>=(n=+n)))throw new Error("invalid bounds");this.delaunay=t,this._circumcenters=new Float64Array(2*t.points.length),this.vectors=new Float64Array(2*t.points.length),this.xmax=r,this.xmin=e,this.ymax=i,this.ymin=n,this._init()}update(){return this.delaunay.update(),this._init(),this}_init(){const{delaunay:{points:t,hull:e,triangles:n},vectors:r}=this,i=this.circumcenters=this._circumcenters.subarray(0,n.length/3*2);for(let e,r,o=0,a=0,u=n.length;o1;)i-=2;for(let t=2;t4)for(let t=0;t0){if(e>=this.ymax)return null;(i=(this.ymax-e)/r)0){if(t>=this.xmax)return null;(i=(this.xmax-t)/n)this.xmax?2:0)|(ethis.ymax?8:0)}}const aC=2*Math.PI,uC=Math.pow;function sC(t){return t[0]}function lC(t){return t[1]}function cC(t,e,n){return[t+Math.sin(t+e)*n,e+Math.cos(t-e)*n]}class fC{static from(t,e=sC,n=lC,r){return new fC("length"in t?function(t,e,n,r){const i=t.length,o=new Float64Array(2*i);for(let a=0;a2&&function(t){const{triangles:e,coords:n}=t;for(let t=0;t1e-10)return!1}return!0}(t)){this.collinear=Int32Array.from({length:e.length/2},((t,e)=>e)).sort(((t,n)=>e[2*t]-e[2*n]||e[2*t+1]-e[2*n+1]));const t=this.collinear[0],n=this.collinear[this.collinear.length-1],r=[e[2*t],e[2*t+1],e[2*n],e[2*n+1]],i=1e-8*Math.hypot(r[3]-r[1],r[2]-r[0]);for(let t=0,n=e.length/2;t0&&(this.triangles=new Int32Array(3).fill(-1),this.halfedges=new Int32Array(3).fill(-1),this.triangles[0]=r[0],this.triangles[1]=r[1],this.triangles[2]=r[1],o[r[0]]=1,2===r.length&&(o[r[1]]=0))}voronoi(t){return new oC(this,t)}*neighbors(t){const{inedges:e,hull:n,_hullIndex:r,halfedges:i,triangles:o,collinear:a}=this;if(a){const e=a.indexOf(t);return e>0&&(yield a[e-1]),void(e=0&&i!==n&&i!==r;)n=i;return i}_step(t,e,n){const{inedges:r,hull:i,_hullIndex:o,halfedges:a,triangles:u,points:s}=this;if(-1===r[t]||!s.length)return(t+1)%(s.length>>1);let l=t,c=uC(e-s[2*t],2)+uC(n-s[2*t+1],2);const f=r[t];let h=f;do{let r=u[h];const f=uC(e-s[2*r],2)+uC(n-s[2*r+1],2);if(f=f));)if(e.x=a+i,e.y=l+o,!(e.x+e.x0<0||e.y+e.y0<0||e.x+e.x1>u[0]||e.y+e.y1>u[1])&&(!n||!xC(e,t,u[0]))&&(!n||wC(e,n))){for(var g,m=e.sprite,y=e.width>>5,v=u[0]>>5,_=e.x-(y<<4),x=127&_,b=32-x,w=e.y1-e.y0,k=(e.y+e.y0)*v+(_>>5),M=0;M>>x:0);k+=v}return e.sprite=null,!0}return!1}return f.layout=function(){for(var s=function(t){t.width=t.height=1;var e=Math.sqrt(t.getContext("2d").getImageData(0,0,1,1).data.length>>2);t.width=2048/e,t.height=yC/e;var n=t.getContext("2d");return n.fillStyle=n.strokeStyle="red",n.textAlign="center",{context:n,ratio:e}}(Gl()),f=function(t){var e=[],n=-1;for(;++n>5)*u[1]),d=null,p=l.length,g=-1,m=[],y=l.map((u=>({text:t(u),font:e(u),style:r(u),weight:i(u),rotate:o(u),size:~~(n(u)+1e-14),padding:a(u),xoff:0,yoff:0,x1:0,y1:0,x0:0,y0:0,hasText:!1,sprite:null,datum:u}))).sort(((t,e)=>e.size-t.size));++g>1,v.y=u[1]*(c()+.5)>>1,_C(s,v,y,g),v.hasText&&h(f,v,d)&&(m.push(v),d?bC(d,v):d=[{x:v.x+v.x0,y:v.y+v.y0},{x:v.x+v.x1,y:v.y+v.y1}],v.x-=u[0]>>1,v.y-=u[1]>>1)}return m},f.words=function(t){return arguments.length?(l=t,f):l},f.size=function(t){return arguments.length?(u=[+t[0],+t[1]],f):u},f.font=function(t){return arguments.length?(e=MC(t),f):e},f.fontStyle=function(t){return arguments.length?(r=MC(t),f):r},f.fontWeight=function(t){return arguments.length?(i=MC(t),f):i},f.rotate=function(t){return arguments.length?(o=MC(t),f):o},f.text=function(e){return arguments.length?(t=MC(e),f):t},f.spiral=function(t){return arguments.length?(s=AC[t]||t,f):s},f.fontSize=function(t){return arguments.length?(n=MC(t),f):n},f.padding=function(t){return arguments.length?(a=MC(t),f):a},f.random=function(t){return arguments.length?(c=t,f):c},f}function _C(t,e,n,r){if(!e.sprite){var i=t.context,o=t.ratio;i.clearRect(0,0,2048/o,yC/o);var a,u,s,l,c,f=0,h=0,d=0,p=n.length;for(--r;++r>5<<5,s=~~Math.max(Math.abs(v+_),Math.abs(v-_))}else a=a+31>>5<<5;if(s>d&&(d=s),f+a>=2048&&(f=0,h+=d,d=0),h+s>=yC)break;i.translate((f+(a>>1))/o,(h+(s>>1))/o),e.rotate&&i.rotate(e.rotate*mC),i.fillText(e.text,0,0),e.padding&&(i.lineWidth=2*e.padding,i.strokeText(e.text,0,0)),i.restore(),e.width=a,e.height=s,e.xoff=f,e.yoff=h,e.x1=a>>1,e.y1=s>>1,e.x0=-e.x1,e.y0=-e.y1,e.hasText=!0,f+=a}for(var b=i.getImageData(0,0,2048/o,yC/o).data,w=[];--r>=0;)if((e=n[r]).hasText){for(u=(a=e.width)>>5,s=e.y1-e.y0,l=0;l>5),E=b[2048*(h+c)+(f+l)<<2]?1<<31-l%32:0;w[A]|=E,k|=E}k?M=c:(e.y0++,s--,c--,h++)}e.y1=e.y0+M,e.sprite=w.slice(0,(e.y1-e.y0)*u)}}}function xC(t,e,n){n>>=5;for(var r,i=t.sprite,o=t.width>>5,a=t.x-(o<<4),u=127&a,s=32-u,l=t.y1-t.y0,c=(t.y+t.y0)*n+(a>>5),f=0;f>>u:0))&e[c+h])return!0;c+=n}return!1}function bC(t,e){var n=t[0],r=t[1];e.x+e.x0r.x&&(r.x=e.x+e.x1),e.y+e.y1>r.y&&(r.y=e.y+e.y1)}function wC(t,e){return t.x+t.x1>e[0].x&&t.x+t.x0e[0].y&&t.y+t.y0e(t(n))}i.forEach((t=>{t[a[0]]=NaN,t[a[1]]=NaN,t[a[3]]=0}));const c=o.words(i).text(e.text).size(e.size||[500,500]).padding(e.padding||1).spiral(e.spiral||"archimedean").rotate(e.rotate||0).font(e.font||"sans-serif").fontStyle(e.fontStyle||"normal").fontWeight(e.fontWeight||"normal").fontSize(l).random(t.random).layout(),f=o.size(),h=f[0]>>1,d=f[1]>>1,p=c.length;for(let t,e,n=0;nnew Uint8Array(t),BC=t=>new Uint16Array(t),TC=t=>new Uint32Array(t);function zC(t,e,n){const r=(e<257?SC:e<65537?BC:TC)(t);return n&&r.set(n),r}function NC(t,e,n){const r=1<{const r=t[e],i=t[n];return ri?1:0})),function(t,e){return Array.from(e,(e=>t[e]))}(t,e)}(h,s),a)l=e,c=t,e=Array(a+u),t=TC(a+u),function(t,e,n,r,i,o,a,u,s){let l,c=0,f=0;for(l=0;c0)for(f=0;ft,size:()=>n}}function RC(t){pa.call(this,function(){let t=8,e=[],n=TC(0),r=zC(0,t),i=zC(0,t);return{data:()=>e,seen:()=>n=function(t,e,n){return t.length>=e?t:((n=n||new t.constructor(e)).set(t),n)}(n,e.length),add(t){for(let n,r=0,i=e.length,o=t.length;re.length,curr:()=>r,prev:()=>i,reset:t=>i[t]=r[t],all:()=>t<257?255:t<65537?65535:4294967295,set(t,e){r[t]|=e},clear(t,e){r[t]&=~e},resize(e,n){(e>r.length||n>t)&&(t=Math.max(n,t),r=zC(e,t,r),i=zC(e,t))}}}(),t),this._indices=null,this._dims=null}function LC(t){pa.call(this,null,t)}RC.Definition={type:"CrossFilter",metadata:{},params:[{name:"fields",type:"field",array:!0,required:!0},{name:"query",type:"array",array:!0,required:!0,content:{type:"number",array:!0,length:2}}]},ut(RC,pa,{transform(t,e){return this._dims?t.modified("fields")||t.fields.some((t=>e.modified(t.fields)))?this.reinit(t,e):this.eval(t,e):this.init(t,e)},init(t,e){const n=t.fields,r=t.query,i=this._indices={},o=this._dims=[],a=r.length;let u,s,l=0;for(;l{const t=i.remove(e,n);for(const e in r)r[e].reindex(t)}))},update(t,e,n){const r=this._dims,i=t.query,o=e.stamp,a=r.length;let u,s,l=0;for(n.filters=0,s=0;sd)for(m=d,y=Math.min(f,p);mp)for(m=Math.max(f,p),y=h;mc)for(d=c,p=Math.min(s,f);df)for(d=Math.max(s,f),p=l;du[t]&n?null:a[t];return o.filter(o.MOD,l),i&i-1?(o.filter(o.ADD,(t=>{const e=u[t]&n;return!e&&e^s[t]&n?a[t]:null})),o.filter(o.REM,(t=>{const e=u[t]&n;return e&&!(e^e^s[t]&n)?a[t]:null}))):(o.filter(o.ADD,l),o.filter(o.REM,(t=>(u[t]&n)===i?a[t]:null))),o.filter(o.SOURCE,(t=>l(t._index)))}});var UC=Object.freeze({__proto__:null,crossfilter:RC,resolvefilter:LC});const qC="RawCode",PC="Literal",jC="Property",IC="Identifier",$C="ArrayExpression",WC="BinaryExpression",HC="CallExpression",YC="ConditionalExpression",VC="LogicalExpression",GC="MemberExpression",XC="ObjectExpression",JC="UnaryExpression";function ZC(t){this.type=t}var QC,KC,tF,eF,nF;ZC.prototype.visit=function(t){let e,n,r;if(t(this))return 1;for(e=function(t){switch(t.type){case $C:return t.elements;case WC:case VC:return[t.left,t.right];case HC:return[t.callee].concat(t.arguments);case YC:return[t.test,t.consequent,t.alternate];case GC:return[t.object,t.property];case XC:return t.properties;case jC:return[t.key,t.value];case JC:return[t.argument];case IC:case PC:case qC:default:return[]}}(this),n=0,r=e.length;n",QC[3]="Identifier",QC[4]="Keyword",QC[5]="Null",QC[6]="Numeric",QC[7]="Punctuator",QC[8]="String",QC[9]="RegularExpression";var rF="Identifier",iF="Unexpected token %0",oF="Invalid regular expression",aF="Invalid regular expression: missing /",uF="Octal literals are not allowed in strict mode.",sF="ILLEGAL",lF="Disabled.",cF=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),fF=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]");function hF(t,e){if(!t)throw new Error("ASSERT: "+e)}function dF(t){return t>=48&&t<=57}function pF(t){return"0123456789abcdefABCDEF".indexOf(t)>=0}function gF(t){return"01234567".indexOf(t)>=0}function mF(t){return 32===t||9===t||11===t||12===t||160===t||t>=5760&&[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(t)>=0}function yF(t){return 10===t||13===t||8232===t||8233===t}function vF(t){return 36===t||95===t||t>=65&&t<=90||t>=97&&t<=122||92===t||t>=128&&cF.test(String.fromCharCode(t))}function _F(t){return 36===t||95===t||t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||92===t||t>=128&&fF.test(String.fromCharCode(t))}const xF={if:1,in:1,do:1,var:1,for:1,new:1,try:1,let:1,this:1,else:1,case:1,void:1,with:1,enum:1,while:1,break:1,catch:1,throw:1,const:1,yield:1,class:1,super:1,return:1,typeof:1,delete:1,switch:1,export:1,import:1,public:1,static:1,default:1,finally:1,extends:1,package:1,private:1,function:1,continue:1,debugger:1,interface:1,protected:1,instanceof:1,implements:1};function bF(){for(;tF1114111||"}"!==t)&&UF({},iF,sF),e<=65535?String.fromCharCode(e):(n=55296+(e-65536>>10),r=56320+(e-65536&1023),String.fromCharCode(n,r))}function MF(){var t,e;for(t=KC.charCodeAt(tF++),e=String.fromCharCode(t),92===t&&(117!==KC.charCodeAt(tF)&&UF({},iF,sF),++tF,(t=wF("u"))&&"\\"!==t&&vF(t.charCodeAt(0))||UF({},iF,sF),e=t);tF>>="===(r=KC.substr(tF,4))?{type:7,value:r,start:i,end:tF+=4}:">>>"===(n=r.substr(0,3))||"<<="===n||">>="===n?{type:7,value:n,start:i,end:tF+=3}:a===(e=n.substr(0,2))[1]&&"+-<>&|".indexOf(a)>=0||"=>"===e?{type:7,value:e,start:i,end:tF+=2}:"<>=!+-*%&|^/".indexOf(a)>=0?{type:7,value:a,start:i,end:++tF}:void UF({},iF,sF)}function DF(){var t,e,n;if(hF(dF((n=KC[tF]).charCodeAt(0))||"."===n,"Numeric literal must start with a decimal digit or a decimal point"),e=tF,t="","."!==n){if(t=KC[tF++],n=KC[tF],"0"===t){if("x"===n||"X"===n)return++tF,function(t){let e="";for(;tF=0&&UF({},oF,n),{value:n,literal:e}}(),r=function(t,e){let n=t;e.indexOf("u")>=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}/g,((t,e)=>{if(parseInt(e,16)<=1114111)return"x";UF({},oF)})).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"x"));try{new RegExp(n)}catch(t){UF({},oF)}try{return new RegExp(t,e)}catch(t){return null}}(e.value,n.value),{literal:e.literal+n.literal,value:r,regex:{pattern:e.value,flags:n.value},start:t,end:tF}}function FF(){if(bF(),tF>=eF)return{type:2,start:tF,end:tF};const t=KC.charCodeAt(tF);return vF(t)?AF():40===t||41===t||59===t?EF():39===t||34===t?function(){var t,e,n,r,i="",o=!1;for(hF("'"===(t=KC[tF])||'"'===t,"String literal must starts with a quote"),e=tF,++tF;tF=0&&tF(hF(e":case"<=":case">=":case"instanceof":case"in":e=7;break;case"<<":case">>":case">>>":e=8;break;case"+":case"-":e=9;break;case"*":case"/":case"%":e=11}return e}function eS(){var t,e;return t=function(){var t,e,n,r,i,o,a,u,s,l;if(t=nF,s=KF(),0===(i=tS(r=nF)))return s;for(r.prec=i,SF(),e=[t,nF],o=[s,r,a=KF()];(i=tS(nF))>0;){for(;o.length>2&&i<=o[o.length-2].prec;)a=o.pop(),u=o.pop().value,s=o.pop(),e.pop(),n=TF(u,s,a),o.push(n);(r=SF()).prec=i,o.push(r),e.push(nF),n=KF(),o.push(n)}for(n=o[l=o.length-1],e.pop();l>1;)e.pop(),n=TF(o[l-1].value,o[l-2],n),l-=2;return n}(),jF("?")&&(SF(),e=eS(),PF(":"),t=function(t,e,n){const r=new ZC("ConditionalExpression");return r.test=t,r.consequent=e,r.alternate=n,r}(t,e,eS())),t}function nS(){const t=eS();if(jF(","))throw new Error(lF);return t}var rS={NaN:"NaN",E:"Math.E",LN2:"Math.LN2",LN10:"Math.LN10",LOG2E:"Math.LOG2E",LOG10E:"Math.LOG10E",PI:"Math.PI",SQRT1_2:"Math.SQRT1_2",SQRT2:"Math.SQRT2",MIN_VALUE:"Number.MIN_VALUE",MAX_VALUE:"Number.MAX_VALUE"};function iS(t){function e(e,n,r){return i=>function(e,n,r,i){let o=t(n[0]);return r&&(o=r+"("+o+")",0===r.lastIndexOf("new ",0)&&(o="("+o+")")),o+"."+e+(i<0?"":0===i?"()":"("+n.slice(1).map(t).join(",")+")")}(e,i,n,r)}const n="new Date",r="String",i="RegExp";return{isNaN:"Number.isNaN",isFinite:"Number.isFinite",abs:"Math.abs",acos:"Math.acos",asin:"Math.asin",atan:"Math.atan",atan2:"Math.atan2",ceil:"Math.ceil",cos:"Math.cos",exp:"Math.exp",floor:"Math.floor",log:"Math.log",max:"Math.max",min:"Math.min",pow:"Math.pow",random:"Math.random",round:"Math.round",sin:"Math.sin",sqrt:"Math.sqrt",tan:"Math.tan",clamp:function(e){e.length<3&&u("Missing arguments to clamp function."),e.length>3&&u("Too many arguments to clamp function.");const n=e.map(t);return"Math.max("+n[1]+", Math.min("+n[2]+","+n[0]+"))"},now:"Date.now",utc:"Date.UTC",datetime:n,date:e("getDate",n,0),day:e("getDay",n,0),year:e("getFullYear",n,0),month:e("getMonth",n,0),hours:e("getHours",n,0),minutes:e("getMinutes",n,0),seconds:e("getSeconds",n,0),milliseconds:e("getMilliseconds",n,0),time:e("getTime",n,0),timezoneoffset:e("getTimezoneOffset",n,0),utcdate:e("getUTCDate",n,0),utcday:e("getUTCDay",n,0),utcyear:e("getUTCFullYear",n,0),utcmonth:e("getUTCMonth",n,0),utchours:e("getUTCHours",n,0),utcminutes:e("getUTCMinutes",n,0),utcseconds:e("getUTCSeconds",n,0),utcmilliseconds:e("getUTCMilliseconds",n,0),length:e("length",null,-1),join:e("join",null),indexof:e("indexOf",null),lastindexof:e("lastIndexOf",null),slice:e("slice",null),reverse:function(e){return"("+t(e[0])+").slice().reverse()"},parseFloat:"parseFloat",parseInt:"parseInt",upper:e("toUpperCase",r,0),lower:e("toLowerCase",r,0),substring:e("substring",r),split:e("split",r),replace:e("replace",r),trim:e("trim",r,0),regexp:i,test:e("test",i),if:function(e){e.length<3&&u("Missing arguments to if function."),e.length>3&&u("Too many arguments to if function.");const n=e.map(t);return"("+n[0]+"?"+n[1]+":"+n[2]+")"}}}const oS="intersect",aS="union";var uS="index:unit";function sS(t,e){for(var n,r,i=e.fields,o=e.values,a=i.length,u=0;ue.indexOf(t)>=0)):e},R_union:function(t,e){var n=A(e[0]),r=A(e[1]);return n>r&&(n=e[1],r=e[0]),t.length?(t[0]>n&&(t[0]=n),t[1]r&&(n=e[1],r=e[0]),t.length?rr&&(t[1]=r),t):[n,r]}};function cS(t,e,n,r){e[0].type!==PC&&u("First argument to selection functions must be a string literal.");const i=e[0].value,o="unit",a="@unit",s=":"+i;(e.length>=2&&M(e).value)!==oS||rt(r,a)||(r["@unit"]=n.getData(i).indataRef(n,o)),rt(r,s)||(r[s]=n.getData(i).tuplesRef())}function fS(t){const e=this.context.data[t];return e?e.values.value:[]}const hS=t=>function(e,n){return this.context.dataflow.locale()[t](n)(e)},dS=hS("format"),pS=hS("timeFormat"),gS=hS("utcFormat"),mS=hS("timeParse"),yS=hS("utcParse"),vS=new Date(2e3,0,1);function _S(t,e,n){return Number.isInteger(t)&&Number.isInteger(e)?(vS.setYear(2e3),vS.setMonth(t),vS.setDate(e),pS.call(this,vS,n)):""}function xS(t,e,n,r){e[0].type!==PC&&u("First argument to data functions must be a string literal.");const i=e[0].value,o=":"+i;if(!rt(o,r))try{r[o]=n.getData(i).tuplesRef()}catch(t){}}function bS(t,e,n,r){if(e[0].type===PC)wS(n,r,e[0].value);else for(t in n.scales)wS(n,r,t)}function wS(t,e,n){const r="%"+n;if(!rt(e,r))try{e[r]=t.scaleRef(n)}catch(t){}}function kS(t,e){let n;return H(t)?t:pt(t)?(n=e.scales[t])&&n.value:void 0}function MS(t,e,n){e.__bandwidth=t=>t&&t.bandwidth?t.bandwidth():0,n._bandwidth=bS,n._range=bS,n._scale=bS;const r=e=>"_["+(e.type===PC?wt("%"+e.value):wt("%")+"+"+t(e))+"]";return{_bandwidth:t=>"this.__bandwidth(".concat(r(t[0]),")"),_range:t=>"".concat(r(t[0]),".range()"),_scale:e=>"".concat(r(e[0]),"(").concat(t(e[1]),")")}}function AS(t,e){return function(n,r,i){if(n){const e=kS(n,(i||this).context);return e&&e.path[t](r)}return e(r)}}const ES=AS("area",(function(t){return fb=new be,Vx(t,hb),2*fb})),DS=AS("bounds",(function(t){var e,n,r,i,o,a,u;if(nb=eb=-(Kx=tb=1/0),sb=[],Vx(t,Pb),n=sb.length){for(sb.sort(Xb),e=1,o=[r=sb[0]];eGb(r[0],r[1])&&(r[1]=i[1]),Gb(i[0],r[1])>Gb(r[0],r[1])&&(r[0]=i[0])):o.push(r=i);for(a=-1/0,e=0,r=o[n=o.length-1];e<=n;r=i,++e)i=o[e],(u=Gb(r[1],i[0]))>a&&(a=u,Kx=i[0],eb=r[1])}return sb=lb=null,Kx===1/0||tb===1/0?[[NaN,NaN],[NaN,NaN]]:[[Kx,tb],[eb,nb]]})),CS=AS("centroid",(function(t){Mb=Ab=Eb=Db=Cb=Fb=Sb=Bb=0,Tb=new be,zb=new be,Nb=new be,Vx(t,Zb);var e=+Tb,n=+zb,r=+Nb,i=Tx(e,n,r);return i<_x&&(e=Fb,n=Sb,r=Bb,AbzS(t,e)}const OS=t=>t.data;function RS(t,e){const n=fS.call(e,t);return n.root&&n.root.lookup||{}}const LS=()=>"undefined"!=typeof window&&window||null;const US={random:()=>t.random(),cumulativeNormal:Sa,cumulativeLogNormal:Ra,cumulativeUniform:Ia,densityNormal:Fa,densityLogNormal:Oa,densityUniform:ja,quantileNormal:Ba,quantileLogNormal:La,quantileUniform:$a,sampleNormal:Ca,sampleLogNormal:Na,sampleUniform:Pa,isArray:v,isBoolean:lt,isDate:ct,isDefined:t=>void 0!==t,isNumber:ht,isObject:_,isRegExp:dt,isString:pt,isTuple:No,isValid:t=>null!=t&&t==t,toBoolean:kt,toDate:At,toNumber:A,toString:Et,flush:at,lerp:mt,merge:function(){const t=[].slice.call(arguments);return t.unshift({}),K(...t)},pad:xt,peek:M,span:bt,inrange:st,truncate:Ct,rgb:wc,lab:Pc,hcl:Vc,hsl:Fc,luminance:BS,contrast:function(t,e){const n=BS(t),r=BS(e);return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)},sequence:Re,format:dS,utcFormat:gS,utcParse:yS,utcOffset:br,utcSequence:Mr,timeFormat:pS,timeParse:mS,timeOffset:xr,timeSequence:kr,timeUnitSpecifier:Yn,monthFormat:function(t){return _S.call(this,t,1,"%B")},monthAbbrevFormat:function(t){return _S.call(this,t,1,"%b")},dayFormat:function(t){return _S.call(this,0,2+t,"%A")},dayAbbrevFormat:function(t){return _S.call(this,0,2+t,"%a")},quarter:j,utcquarter:I,week:Jn,utcweek:nr,dayofyear:Xn,utcdayofyear:er,warn:function(){return FS(this.context.dataflow,"warn",arguments)},info:function(){return FS(this.context.dataflow,"info",arguments)},debug:function(){return FS(this.context.dataflow,"debug",arguments)},extent:tt,inScope:function(t){const e=this.context.group;let n=!1;if(e)for(;t;){if(t===e){n=!0;break}t=t.mark.group}return n},intersect:function(t,e,n){if(!t)return[];const[r,i]=t,o=(new Zp).set(r[0],r[1],i[0],i[1]);return wv(n||this.context.dataflow.scenegraph().root,o,function(t){let e=null;if(t){const n=$(t.marktype),r=$(t.markname);e=t=>(!n.length||n.some((e=>t.marktype===e)))&&(!r.length||r.some((e=>t.name===e)))}return e}(e))},clampRange:W,pinchDistance:function(t){const e=t.touches,n=e[0].clientX-e[1].clientX,r=e[0].clientY-e[1].clientY;return Math.sqrt(n*n+r*r)},pinchAngle:function(t){const e=t.touches;return Math.atan2(e[0].clientY-e[1].clientY,e[0].clientX-e[1].clientX)},screen:function(){const t=LS();return t?t.screen:{}},containerSize:function(){const t=this.context.dataflow,e=t.container&&t.container();return e?[e.clientWidth,e.clientHeight]:[void 0,void 0]},windowSize:function(){const t=LS();return t?[t.innerWidth,t.innerHeight]:[void 0,void 0]},bandspace:function(t,e,n){return qh(t||0,e||0,n||0)},setdata:function(t,e){const n=this.context.dataflow,r=this.context.data[t].input;return n.pulse(r,n.changeset().remove(p).insert(e)),1},pathShape:function(t){let e=null;return function(n){return n?xp(n,e=e||lp(t)):t}},panLinear:T,panLog:z,panPow:N,panSymlog:O,zoomLinear:L,zoomLog:U,zoomPow:q,zoomSymlog:P,encode:function(t,e,n){if(t){const n=this.context.dataflow,r=t.mark.source;n.pulse(r,n.changeset().encode(t,e))}return void 0!==n?n:t},modify:function(t,e,n,r,i,o){const a=this.context.dataflow,u=this.context.data[t],s=u.input,l=a.stamp();let c,f,h=u.changes;if(!1===a._trigger||!(s.value.length||e||r))return 0;if((!h||h.stamp{u.modified=!0,a.pulse(s,h).run()}),!0,1)),n&&(c=!0===n?p:v(n)||No(n)?n:NS(n),h.remove(c)),e&&h.insert(e),r&&(c=NS(r),s.value.some(c)?h.remove(c):h.insert(r)),i)for(f in o)h.modify(i,f,o[f]);return 1}},qS=["view","item","group","xy","x","y"],PS="this.",jS={},IS={forbidden:["_"],allowed:["datum","event","item"],fieldvar:"datum",globalvar:t=>"_[".concat(wt("$"+t),"]"),functions:function(t){const e=iS(t);qS.forEach((t=>e[t]="event.vega."+t));for(const t in US)e[t]=PS+t;return K(e,MS(t,US,jS)),e},constants:rS,visitors:jS},$S=function(t){const e=(t=t||{}).allowed?Dt(t.allowed):{},n=t.forbidden?Dt(t.forbidden):{},r=t.constants||rS,i=(t.functions||iS)(h),o=t.globalvar,a=t.fieldvar,s=H(o)?o:t=>"".concat(o,'["').concat(t,'"]');let l={},c={},f=0;function h(t){if(pt(t))return t;const e=d[t.type];return null==e&&u("Unsupported type: "+t.type),e(t)}const d={Literal:t=>t.raw,Identifier:t=>{const i=t.name;return f>0?i:rt(n,i)?u("Illegal identifier: "+i):rt(r,i)?r[i]:rt(e,i)?i:(l[i]=1,s(i))},MemberExpression:t=>{const e=!t.computed,n=h(t.object);e&&(f+=1);const r=h(t.property);return n===a&&(c[function(t){const e=t&&t.length-1;return e&&('"'===t[0]&&'"'===t[e]||"'"===t[0]&&"'"===t[e])?t.slice(1,-1):t}(r)]=1),e&&(f-=1),n+(e?"."+r:"["+r+"]")},CallExpression:t=>{"Identifier"!==t.callee.type&&u("Illegal callee type: "+t.callee.type);const e=t.callee.name,n=t.arguments,r=rt(i,e)&&i[e];return r||u("Unrecognized function: "+e),H(r)?r(n):r+"("+n.map(h).join(",")+")"},ArrayExpression:t=>"["+t.elements.map(h).join(",")+"]",BinaryExpression:t=>"("+h(t.left)+t.operator+h(t.right)+")",UnaryExpression:t=>"("+t.operator+h(t.argument)+")",ConditionalExpression:t=>"("+h(t.test)+"?"+h(t.consequent)+":"+h(t.alternate)+")",LogicalExpression:t=>"("+h(t.left)+t.operator+h(t.right)+")",ObjectExpression:t=>"{"+t.properties.map(h).join(",")+"}",Property:t=>{f+=1;const e=h(t.key);return f-=1,e+":"+h(t.value)}};function p(t){const e={code:h(t),globals:Object.keys(l),fields:Object.keys(c)};return l={},c={},e}return p.functions=i,p.constants=r,p}(IS);function WS(t,e,n){return 1===arguments.length?US[t]:(US[t]=e,n&&(jS[t]=n),$S&&($S.functions[t]=PS+t),this)}function HS(t,e){const n={};let r;try{r=function(t){tF=0,eF=(KC=t).length,nF=null,BF();const e=nS();if(2!==nF.type)throw new Error("Unexpect token after expression.");return e}(t=pt(t)?t:wt(t)+"")}catch(e){u("Expression parse error: "+t)}r.visit((t=>{if(t.type!==HC)return;const r=t.callee.name,i=IS.visitors[r];i&&i(r,t.arguments,e,n)}));const i=$S(r);return i.globals.forEach((t=>{const r="$"+t;!rt(n,r)&&e.getSignal(t)&&(n[r]=e.signalRef(t))})),{$expr:K({code:i.code},e.options.ast?{ast:r}:null),$fields:i.fields,$params:n}}WS("bandwidth",(function(t,e){const n=kS(t,(e||this).context);return n&&n.bandwidth?n.bandwidth():0}),bS),WS("copy",(function(t,e){const n=kS(t,(e||this).context);return n?n.copy():void 0}),bS),WS("domain",(function(t,e){const n=kS(t,(e||this).context);return n?n.domain():[]}),bS),WS("range",(function(t,e){const n=kS(t,(e||this).context);return n&&n.range?n.range():[]}),bS),WS("invert",(function(t,e,n){const r=kS(t,(n||this).context);return r?v(e)?(r.invertRange||r.invert)(e):(r.invert||r.invertExtent)(e):void 0}),bS),WS("scale",(function(t,e,n){const r=kS(t,(n||this).context);return r?r(e):void 0}),bS),WS("gradient",(function(t,e,n,r,i){t=kS(t,(i||this).context);const o=ip(e,n);let a=t.domain(),u=a[0],s=M(a),l=f;return s-u?l=Dd(t,u,s):t=(t.interpolator?pd("sequential")().interpolator(t.interpolator()):pd("linear")().interpolate(t.interpolate()).range(t.range())).domain([u=0,s=1]),t.ticks&&(a=t.ticks(+r||15),u!==a[0]&&a.unshift(u),s!==M(a)&&a.push(s)),a.forEach((e=>o.stop(l(e),t(e)))),o}),bS),WS("geoArea",ES,bS),WS("geoBounds",DS,bS),WS("geoCentroid",CS,bS),WS("geoShape",(function(t,e,n){const r=kS(t,(n||this).context);return function(t){return r?r.path.context(t)(e):""}}),bS),WS("indata",(function(t,e,n){const r=this.context.data[t]["index:"+e],i=r?r.value.get(n):void 0;return i?i.count:i}),(function(t,e,n,r){e[0].type!==PC&&u("First argument to indata must be a string literal."),e[1].type!==PC&&u("Second argument to indata must be a string literal.");const i=e[0].value,o=e[1].value,a="@"+o;rt(a,r)||(r[a]=n.getData(i).indataRef(n,o))})),WS("data",fS,xS),WS("treePath",(function(t,e,n){const r=RS(t,this),i=r[e],o=r[n];return i&&o?i.path(o).map(OS):void 0}),xS),WS("treeAncestors",(function(t,e){const n=RS(t,this)[e];return n?n.ancestors().map(OS):void 0}),xS),WS("vlSelectionTest",(function(t,e,n){for(var r,i,o,a,u,s=this.context.data[t],l=s?s.values.value:[],c=s?s[uS]&&s[uS].value:void 0,f=n===oS,h=l.length,d=0;d(t[i[n].field]=e,t)),{}))}return e=e||aS,Object.keys(m).forEach((t=>{m[t]=Object.keys(m[t]).map((e=>m[t][e])).reduce(((n,r)=>void 0===n?r:lS[v[t]+"_"+e](n,r)))})),g=Object.keys(y),n&&g.length&&(m.vlMulti=e===aS?{or:g.reduce(((t,e)=>(t.push(...y[e]),t)),[])}:{and:g.map((t=>({or:y[t]})))}),m}),cS);const YS=Dt(["rule"]),VS=Dt(["group","image","rect"]);function GS(t){return(t+"").toLowerCase()}function XS(t,e,n){";"!==n[n.length-1]&&(n="return("+n+");");const r=Function(...e.concat(n));return t&&t.functions?r.bind(t.functions):r}var JS={operator:(t,e)=>XS(t,["_"],e.code),parameter:(t,e)=>XS(t,["datum","_"],e.code),event:(t,e)=>XS(t,["event"],e.code),handler:(t,e)=>XS(t,["_","event"],"var datum=event.item&&event.item.datum;return ".concat(e.code,";")),encode:(t,e)=>{const{marktype:n,channels:r}=e;let i="var o=item,datum=o.datum,m=0,$;";for(const t in r){const e="o["+wt(t)+"]";i+="$=".concat(r[t].code,";if(").concat(e,"!==$)").concat(e,"=$,m=1;")}return i+=function(t,e){let n="";return YS[e]||(t.x2&&(t.x?(VS[e]&&(n+="if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;"),n+="o.width=o.x2-o.x;"):n+="o.x=o.x2-(o.width||0);"),t.xc&&(n+="o.x=o.xc-(o.width||0)/2;"),t.y2&&(t.y?(VS[e]&&(n+="if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;"),n+="o.height=o.y2-o.y;"):n+="o.y=o.y2-(o.height||0);"),t.yc&&(n+="o.y=o.yc-(o.height||0)/2;")),n}(r,n),i+="return m;",XS(t,["item","_"],i)},codegen:{get(t){const e="[".concat(t.map(wt).join("]["),"]"),n=Function("_","return _".concat(e,";"));return n.path=e,n},comparator(t,e){let n;const r=Function("a","b","var u, v; return "+t.map(((t,r)=>{const i=e[r];let o,a;return t.path?(o="a".concat(t.path),a="b".concat(t.path)):((n=n||{})["f"+r]=t,o="this.f".concat(r,"(a)"),a="this.f".concat(r,"(b)")),function(t,e,n,r){return"((u = ".concat(t,") < (v = ").concat(e,") || u == null) && v != null ? ").concat(n,"\n : (u > v || v == null) && u != null ? ").concat(r,"\n : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? ").concat(n,"\n : v !== v && u === u ? ").concat(r," : ")}(o,a,-i,i)})).join("")+"0;");return n?r.bind(n):r}}};function ZS(t,e,n){if(!t||!_(t))return t;for(let r,i=0,o=QS.length;it&&t.$tupleid?Oo:t));return e.fn[n]||(e.fn[n]=Y(r,t.$order,e.expr.codegen))}},{key:"$context",parse:function(t,e){return e}},{key:"$subflow",parse:function(t,e){const n=t.$subflow;return function(t,r,i){const o=e.fork().parse(n),a=o.get(n.operators[0].id),u=o.signals.parent;return u&&u.set(i),a.detachSubflow=()=>e.detach(o),a}}},{key:"$tupleid",parse:function(){return Oo}}];const KS={skip:!0};function tB(t,e,n,r){return new eB(t,e,n,r)}function eB(t,e,n,r){this.dataflow=t,this.transforms=e,this.events=t.events.bind(t),this.expr=r||JS,this.signals={},this.scales={},this.nodes={},this.data={},this.fn={},n&&(this.functions=Object.create(n),this.functions.context=this)}function nB(t){this.dataflow=t.dataflow,this.transforms=t.transforms,this.events=t.events,this.expr=t.expr,this.signals=Object.create(t.signals),this.scales=Object.create(t.scales),this.nodes=Object.create(t.nodes),this.data=Object.create(t.data),this.fn=Object.create(t.fn),t.functions&&(this.functions=Object.create(t.functions),this.functions.context=this)}function rB(t,e){t&&(null==e?t.removeAttribute("aria-label"):t.setAttribute("aria-label",e))}eB.prototype=nB.prototype={fork(){const t=new nB(this);return(this.subcontext||(this.subcontext=[])).push(t),t},detach(t){this.subcontext=this.subcontext.filter((e=>e!==t));const e=Object.keys(t.nodes);for(const n of e)t.nodes[n]._targets=null;for(const n of e)t.nodes[n].detach();t.nodes=null},get(t){return this.nodes[t]},set(t,e){return this.nodes[t]=e},add(t,e){const n=this,r=n.dataflow,i=t.value;if(n.set(t.id,e),function(t){return"collect"===GS(t)}(t.type)&&i&&(i.$ingest?r.ingest(e,i.$ingest,i.$format):i.$request?r.preload(e,i.$request,i.$format):r.pulse(e,r.changeset().insert(i))),t.root&&(n.root=e),t.parent){let i=n.get(t.parent.$ref);i?(r.connect(i,[e]),e.targets().add(i)):(n.unresolved=n.unresolved||[]).push((()=>{i=n.get(t.parent.$ref),r.connect(i,[e]),e.targets().add(i)}))}if(t.signal&&(n.signals[t.signal]=e),t.scale&&(n.scales[t.scale]=e),t.data)for(const r in t.data){const i=n.data[r]||(n.data[r]={});t.data[r].forEach((t=>i[t]=e))}},resolve(){return(this.unresolved||[]).forEach((t=>t())),delete this.unresolved,this},operator(t,e){this.add(t,this.dataflow.add(t.value,e))},transform(t,e){this.add(t,this.dataflow.add(this.transforms[GS(e)]))},stream(t,e){this.set(t.id,e)},update(t,e,n,r,i){this.dataflow.on(e,n,r,i,t.options)},operatorExpression(t){return this.expr.operator(this,t)},parameterExpression(t){return this.expr.parameter(this,t)},eventExpression(t){return this.expr.event(this,t)},handlerExpression(t){return this.expr.handler(this,t)},encodeExpression(t){return this.expr.encode(this,t)},parse:function(t){const e=this,n=t.operators||[];return t.background&&(e.background=t.background),t.eventConfig&&(e.eventConfig=t.eventConfig),t.locale&&(e.locale=t.locale),n.forEach((t=>e.parseOperator(t))),n.forEach((t=>e.parseOperatorParameters(t))),(t.streams||[]).forEach((t=>e.parseStream(t))),(t.updates||[]).forEach((t=>e.parseUpdate(t))),e.resolve()},parseOperator:function(t){const e=this;!function(t){return"operator"===GS(t)}(t.type)&&t.type?e.transform(t,t.type):e.operator(t,t.update?e.operatorExpression(t.update):null)},parseOperatorParameters:function(t){const e=this;if(t.params){const n=e.get(t.id);n||u("Invalid operator id: "+t.id),e.dataflow.connect(n,n.parameters(e.parseParameters(t.params),t.react,t.initonly))}},parseParameters:function(t,e){e=e||{};const n=this;for(const r in t){const i=t[r];e[r]=v(i)?i.map((t=>ZS(t,n,e))):ZS(i,n,e)}return e},parseStream:function(t){var e,n=this,r=null!=t.filter?n.eventExpression(t.filter):void 0,i=null!=t.stream?n.get(t.stream):void 0;t.source?i=n.events(t.source,t.type,r):t.merge&&(i=(e=t.merge.map((t=>n.get(t))))[0].merge.apply(e[0],e.slice(1))),t.between&&(e=t.between.map((t=>n.get(t))),i=i.between(e[0],e[1])),t.filter&&(i=i.filter(r)),null!=t.throttle&&(i=i.throttle(+t.throttle)),null!=t.debounce&&(i=i.debounce(+t.debounce)),null==i&&u("Invalid stream definition: "+JSON.stringify(t)),t.consume&&i.consume(!0),n.stream(t,i)},parseUpdate:function(t){var e,n=this,r=_(r=t.source)?r.$ref:r,i=n.get(r),o=t.update,a=void 0;i||u("Source not defined: "+t.source),e=t.target&&t.target.$expr?n.eventExpression(t.target.$expr):n.get(t.target),o&&o.$expr&&(o.$params&&(a=n.parseParameters(o.$params)),o=n.handlerExpression(o.$expr)),n.update(t,i,e,o,a)},getState:function(t){var e=this,n={};if(t.signals){var r=n.signals={};Object.keys(e.signals).forEach((n=>{const i=e.signals[n];t.signals(n,i)&&(r[n]=i.value)}))}if(t.data){var i=n.data={};Object.keys(e.data).forEach((n=>{const r=e.data[n];t.data(n,r)&&(i[n]=r.input.value)}))}return e.subcontext&&!1!==t.recurse&&(n.subcontext=e.subcontext.map((e=>e.getState(t)))),n},setState:function(t){var e=this,n=e.dataflow,r=t.data,i=t.signals;Object.keys(i||{}).forEach((t=>{n.update(e.signals[t],i[t],KS)})),Object.keys(r||{}).forEach((t=>{n.pulse(e.data[t].input,n.changeset().remove(p).insert(r[t]))})),(t.subcontext||[]).forEach(((t,n)=>{const r=e.subcontext[n];r&&r.setState(t)}))}};const iB="default";function oB(t,e){const n=t.globalCursor()?"undefined"!=typeof document&&document.body:t.container();if(n)return null==e?n.style.removeProperty("cursor"):n.style.cursor=e}function aB(t,e){var n=t._runtime.data;return rt(n,e)||u("Unrecognized data set: "+e),n[e]}function uB(t,e){Io(e)||u("Second argument to changes must be a changeset.");const n=aB(this,t);return n.modified=!0,this.pulse(n.input,e)}function sB(t){var e=t.padding();return Math.max(0,t._viewWidth+e.left+e.right)}function lB(t){var e=t.padding();return Math.max(0,t._viewHeight+e.top+e.bottom)}function cB(t){var e=t.padding(),n=t._origin;return[e.left+n[0],e.top+n[1]]}function fB(t,e,n){var r,i,o=t._renderer,a=o&&o.canvas();return a&&(i=cB(t),(r=uy(e.changedTouches?e.changedTouches[0]:e,a))[0]-=i[0],r[1]-=i[1]),e.dataflow=t,e.item=n,e.vega=function(t,e,n){const r=e?"group"===e.mark.marktype?e:e.mark.group:null;function i(t){var n,i=r;if(t)for(n=e;n;n=n.mark.group)if(n.mark.name===t){i=n;break}return i&&i.mark&&i.mark.interactive?i:{}}function o(t){if(!t)return n;pt(t)&&(t=i(t));const e=n.slice();for(;t;)e[0]-=t.x||0,e[1]-=t.y||0,t=t.mark&&t.mark.group;return e}return{view:Z(t),item:Z(e||{}),group:i,xy:o,x:function(t){return o(t)[0]},y:function(t){return o(t)[1]}}}(t,n,r),e}const hB="view",dB={trap:!1};function pB(t,e,n){const r=t._eventConfig&&t._eventConfig[e];return!(!1===r||_(r)&&!r[n])||(t.warn("Blocked ".concat(e," ").concat(n," event listener.")),!1)}function gB(t){return t.item}function mB(t){return t.item.mark.source}function yB(t){return function(e,n){return n.vega.view().changeset().encode(n.item,t)}}function vB(t,e,n){const r=document.createElement(t);for(const t in e)r.setAttribute(t,e[t]);return null!=n&&(r.textContent=n),r}const _B="vega-bind",xB="vega-bind-name";function bB(t,e,n){if(!e)return;const r=n.param;let i=n.state;return i||(i=n.state={elements:null,active:!1,set:null,update:e=>{e!==t.signal(r.signal)&&t.runAsync(null,(()=>{i.source=!0,t.signal(r.signal,e)}))}},r.debounce&&(i.update=Q(r.debounce,i.update))),function(t,e,n,r){const i=vB("div",{class:_B}),o="radio"===n.input?i:i.appendChild(vB("label"));o.appendChild(vB("span",{class:xB},n.name||n.signal)),e.appendChild(i);let a=wB;switch(n.input){case"checkbox":a=kB;break;case"select":a=MB;break;case"radio":a=AB;break;case"range":a=EB}a(t,o,n,r)}(i,e,r,t.signal(r.signal)),i.active||(t.on(t._signals[r.signal],null,(()=>{i.source?i.source=!1:i.set(t.signal(r.signal))})),i.active=!0),i}function wB(t,e,n,r){const i=vB("input");for(const t in n)"signal"!==t&&"element"!==t&&i.setAttribute("input"===t?"type":t,n[t]);i.setAttribute("name",n.signal),i.value=r,e.appendChild(i),i.addEventListener("input",(()=>t.update(i.value))),t.elements=[i],t.set=t=>i.value=t}function kB(t,e,n,r){const i={type:"checkbox",name:n.signal};r&&(i.checked=!0);const o=vB("input",i);e.appendChild(o),o.addEventListener("change",(()=>t.update(o.checked))),t.elements=[o],t.set=t=>o.checked=!!t||null}function MB(t,e,n,r){const i=vB("select",{name:n.signal}),o=n.labels||[];n.options.forEach(((t,e)=>{const n={value:t};DB(t,r)&&(n.selected=!0),i.appendChild(vB("option",n,(o[e]||t)+""))})),e.appendChild(i),i.addEventListener("change",(()=>{t.update(n.options[i.selectedIndex])})),t.elements=[i],t.set=t=>{for(let e=0,r=n.options.length;e{const u={type:"radio",name:n.signal,value:e};DB(e,r)&&(u.checked=!0);const s=vB("input",u);s.addEventListener("change",(()=>t.update(e)));const l=vB("label",{},(o[a]||e)+"");return l.prepend(s),i.appendChild(l),s})),t.set=e=>{const n=t.elements,r=n.length;for(let t=0;t{s.textContent=u.value,t.update(+u.value)};u.addEventListener("input",l),u.addEventListener("change",l),t.elements=[u],t.set=t=>{u.value=t,s.textContent=t}}function DB(t,e){return t===e||t+""==e+""}function CB(t,e,n,r,i,o){return(e=e||new r(t.loader())).initialize(n,sB(t),lB(t),cB(t),i,o).background(t.background())}function FB(t,e){return e?function(){try{e.apply(this,arguments)}catch(e){t.error(e)}}:null}function SB(t,e){if("string"==typeof e){if("undefined"==typeof document)return t.error("DOM document instance not found."),null;if(!(e=document.querySelector(e)))return t.error("Signal bind element not found: "+e),null}if(e)try{e.innerHTML=""}catch(n){e=null,t.error(n)}return e}const BB=t=>+t||0;function TB(t){return _(t)?{top:BB(t.top),bottom:BB(t.bottom),left:BB(t.left),right:BB(t.right)}:(t=>({top:t,bottom:t,left:t,right:t}))(BB(t))}async function zB(t,e,n,r){const i=bv(e),o=i&&i.headless;return o||u("Unrecognized renderer type: "+e),await t.runAsync(),CB(t,null,null,o,n,r).renderAsync(t._scenegraph.root)}var NB="width",OB="height",RB="padding",LB={skip:!0};function UB(t,e){var n=t.autosize(),r=t.padding();return e-(n&&n.contains===RB?r.left+r.right:0)}function qB(t,e){var n=t.autosize(),r=t.padding();return e-(n&&n.contains===RB?r.top+r.bottom:0)}function PB(t,e){return e.modified&&v(e.input.value)&&t.indexOf("_:vega:_")}function jB(t,e){return!("parent"===t||e instanceof ga.proxy)}function IB(t,e,n,r){const i=t.element();i&&i.setAttribute("title",function(t){return null==t?"":v(t)?$B(t):_(t)&&!ct(t)?(e=t,Object.keys(e).map((t=>{const n=e[t];return t+": "+(v(n)?$B(n):WB(n))})).join("\n")):t+"";var e}(r))}function $B(t){return"["+t.map(WB).join(", ")+"]"}function WB(t){return v(t)?"[…]":_(t)&&!ct(t)?"{…}":t}function HB(t,e){const n=this;if(e=e||{},ha.call(n),e.loader&&n.loader(e.loader),e.logger&&n.logger(e.logger),null!=e.logLevel&&n.logLevel(e.logLevel),e.locale||t.locale){const r=K({},t.locale,e.locale);n.locale(Eo(r.number,r.time))}n._el=null,n._elBind=null,n._renderType=e.renderer||_v.Canvas,n._scenegraph=new ty;const r=n._scenegraph.root;n._renderer=null,n._tooltip=e.tooltip||IB,n._redraw=!0,n._handler=(new Ey).scene(r),n._globalCursor=!1,n._preventDefault=!1,n._timers=[],n._eventListeners=[],n._resizeListeners=[],n._eventConfig=function(t){const e=K({defaults:{}},t),n=(t,e)=>{e.forEach((e=>{v(t[e])&&(t[e]=Dt(t[e]))}))};return n(e.defaults,["prevent","allow"]),n(e,["view","window","selector"]),e}(t.eventConfig),n.globalCursor(n._eventConfig.globalCursor);const i=function(t,e,n){return tB(t,ga,US,n).parse(e)}(n,t,e.expr);n._runtime=i,n._signals=i.signals,n._bind=(t.bindings||[]).map((t=>({state:null,param:K({},t)}))),i.root&&i.root.set(r),r.source=i.data.root.input,n.pulse(i.data.root.input,n.changeset().insert(r.items)),n._width=n.width(),n._height=n.height(),n._viewWidth=UB(n,n._width),n._viewHeight=qB(n,n._height),n._origin=[0,0],n._resize=0,n._autosize=1,function(t){var e=t._signals,n=e.width,r=e.height,i=e.padding;function o(){t._autosize=t._resize=1}t._resizeWidth=t.add(null,(e=>{t._width=e.size,t._viewWidth=UB(t,e.size),o()}),{size:n}),t._resizeHeight=t.add(null,(e=>{t._height=e.size,t._viewHeight=qB(t,e.size),o()}),{size:r});const a=t.add(null,o,{pad:i});t._resizeWidth.rank=n.rank+1,t._resizeHeight.rank=r.rank+1,a.rank=i.rank+1}(n),function(t){t.add(null,(e=>(t._background=e.bg,t._resize=1,e.bg)),{bg:t._signals.background})}(n),function(t){const e=t._signals.cursor||(t._signals.cursor=t.add({user:iB,item:null}));t.on(t.events("view","mousemove"),e,((t,n)=>{const r=e.value,i=r?pt(r)?r:r.user:iB,o=n.item&&n.item.cursor||null;return r&&i===r.user&&o==r.item?r:{user:i,item:o}})),t.add(null,(function(e){let n=e.cursor,r=this.value;return pt(n)||(r=n.item,n=n.user),oB(t,n&&n!==iB?n:r||n),r}),{cursor:e})}(n),n.description(t.description),e.hover&&n.hover(),e.container&&n.initialize(e.container,e.bind)}function YB(t,e){return rt(t._signals,e)?t._signals[e]:u("Unrecognized signal name: "+wt(e))}function VB(t,e){const n=(t._targets||[]).filter((t=>t._update&&t._update.handler===e));return n.length?n[0]:null}function GB(t,e,n,r){let i=VB(n,r);return i||(i=FB(t,(()=>r(e,n.value))),i.handler=r,t.on(n,null,i)),t}function XB(t,e,n){const r=VB(e,n);return r&&e._targets.remove(r),t}ut(HB,ha,{async evaluate(t,e,n){if(await ha.prototype.evaluate.call(this,t,e),this._redraw||this._resize)try{this._renderer&&(this._resize&&(this._resize=0,function(t){var e=cB(t),n=sB(t),r=lB(t);t._renderer.background(t.background()),t._renderer.resize(n,r,e),t._handler.origin(e),t._resizeListeners.forEach((e=>{try{e(n,r)}catch(e){t.error(e)}}))}(this)),await this._renderer.renderAsync(this._scenegraph.root)),this._redraw=!1}catch(t){this.error(t)}return n&&Bo(this,n),this},dirty(t){this._redraw=!0,this._renderer&&this._renderer.dirty(t)},description(t){if(arguments.length){const e=null!=t?t+"":null;return e!==this._desc&&rB(this._el,this._desc=e),this}return this._desc},container(){return this._el},scenegraph(){return this._scenegraph},origin(){return this._origin.slice()},signal(t,e,n){const r=YB(this,t);return 1===arguments.length?r.value:this.update(r,e,n)},width(t){return arguments.length?this.signal("width",t):this.signal("width")},height(t){return arguments.length?this.signal("height",t):this.signal("height")},padding(t){return arguments.length?this.signal("padding",TB(t)):TB(this.signal("padding"))},autosize(t){return arguments.length?this.signal("autosize",t):this.signal("autosize")},background(t){return arguments.length?this.signal("background",t):this.signal("background")},renderer(t){return arguments.length?(bv(t)||u("Unrecognized renderer type: "+t),t!==this._renderType&&(this._renderType=t,this._resetRenderer()),this):this._renderType},tooltip(t){return arguments.length?(t!==this._tooltip&&(this._tooltip=t,this._resetRenderer()),this):this._tooltip},loader(t){return arguments.length?(t!==this._loader&&(ha.prototype.loader.call(this,t),this._resetRenderer()),this):this._loader},resize(){return this._autosize=1,this.touch(YB(this,"autosize"))},_resetRenderer(){this._renderer&&(this._renderer=null,this.initialize(this._el,this._elBind))},_resizeView:function(t,e,n,r,i,o){this.runAfter((a=>{let u=0;a._autosize=0,a.width()!==n&&(u=1,a.signal(NB,n,LB),a._resizeWidth.skip(!0)),a.height()!==r&&(u=1,a.signal(OB,r,LB),a._resizeHeight.skip(!0)),a._viewWidth!==t&&(a._resize=1,a._viewWidth=t),a._viewHeight!==e&&(a._resize=1,a._viewHeight=e),a._origin[0]===i[0]&&a._origin[1]===i[1]||(a._resize=1,a._origin=i),u&&a.run("enter"),o&&a.runAfter((t=>t.resize()))}),!1,1)},addEventListener(t,e,n){let r=e;return n&&!1===n.trap||(r=FB(this,e),r.raw=e),this._handler.on(t,r),this},removeEventListener(t,e){for(var n,r,i=this._handler.handlers(t),o=i.length;--o>=0;)if(r=i[o].type,n=i[o].handler,t===r&&(e===n||e===n.raw)){this._handler.off(r,n);break}return this},addResizeListener(t){const e=this._resizeListeners;return e.indexOf(t)<0&&e.push(t),this},removeResizeListener(t){var e=this._resizeListeners,n=e.indexOf(t);return n>=0&&e.splice(n,1),this},addSignalListener(t,e){return GB(this,t,YB(this,t),e)},removeSignalListener(t,e){return XB(this,YB(this,t),e)},addDataListener(t,e){return GB(this,t,aB(this,t).values,e)},removeDataListener(t,e){return XB(this,aB(this,t).values,e)},globalCursor(t){if(arguments.length){if(this._globalCursor!==!!t){const e=oB(this,null);this._globalCursor=!!t,e&&oB(this,e)}return this}return this._globalCursor},preventDefault(t){return arguments.length?(this._preventDefault=t,this):this._preventDefault},timer:function(t,e){this._timers.push(function(t,e,n){var r=new LA,i=e;return null==e?(r.restart(t,e,n),r):(r._restart=r.restart,r.restart=function(t,e,n){e=+e,n=null==n?OA():+n,r._restart((function o(a){a+=i,r._restart(o,i+=e,n),t(a)}),e,n)},r.restart(t,e,n),r)}((function(e){t({timestamp:Date.now(),elapsed:e})}),e))},events:function(t,e,n){var r,i=this,o=new Zo(n),a=function(n,r){i.runAsync(null,(()=>{t===hB&&function(t,e){var n=t._eventConfig.defaults,r=n.prevent,i=n.allow;return!1!==r&&!0!==i&&(!0===r||!1===i||(r?r[e]:i?!i[e]:t.preventDefault()))}(i,e)&&n.preventDefault(),o.receive(fB(i,n,r))}))};if("timer"===t)pB(i,"timer",e)&&i.timer(a,e);else if(t===hB)pB(i,"view",e)&&i.addEventListener(e,a,dB);else if("window"===t?pB(i,"window",e)&&"undefined"!=typeof window&&(r=[window]):"undefined"!=typeof document&&pB(i,"selector",e)&&(r=document.querySelectorAll(t)),r){for(var u=0,s=r.length;u=0;)i[t].stop();for(t=o.length;--t>=0;)for(e=(n=o[t]).sources.length;--e>=0;)n.sources[e].removeEventListener(n.type,n.handler);return r&&r.call(this,this._handler,null,null,null),this},hover:function(t,e){return e=[e||"update",(t=[t||"hover"])[0]],this.on(this.events("view","mouseover",gB),mB,yB(t)),this.on(this.events("view","mouseout",gB),mB,yB(e)),this},data:function(t,e){return arguments.length<2?aB(this,t).values.value:uB.call(this,t,$o().remove(p).insert(e))},change:uB,insert:function(t,e){return uB.call(this,t,$o().insert(e))},remove:function(t,e){return uB.call(this,t,$o().remove(e))},scale:function(t){var e=this._runtime.scales;return rt(e,t)||u("Unrecognized scale or projection: "+t),e[t].value},initialize:function(t,e){const n=this,r=n._renderType,i=n._eventConfig.bind,o=bv(r);t=n._el=t?SB(n,t):null,function(t){const e=t.container();e&&(e.setAttribute("role","graphics-document"),e.setAttribute("aria-roleDescription","visualization"),rB(e,t.description()))}(n),o||n.error("Unrecognized renderer type: "+r);const a=o.handler||Ey,u=t?o.renderer:o.headless;return n._renderer=u?CB(n,n._renderer,t,u):null,n._handler=function(t,e,n,r){const i=new r(t.loader(),FB(t,t.tooltip())).scene(t.scenegraph().root).initialize(n,cB(t),t);return e&&e.handlers().forEach((t=>{i.on(t.type,t.handler)})),i}(n,n._handler,t,a),n._redraw=!0,t&&"none"!==i&&(e=e?n._elBind=SB(n,e):t.appendChild(vB("form",{class:"vega-bindings"})),n._bind.forEach((t=>{t.param.element&&"container"!==i&&(t.element=SB(n,t.param.element))})),n._bind.forEach((t=>{bB(n,t.element||e,t)}))),n},toImageURL:async function(t,e){t!==_v.Canvas&&t!==_v.SVG&&t!==_v.PNG&&u("Unrecognized image type: "+t);const n=await zB(this,t,e);return t===_v.SVG?function(t,e){const n=new Blob([t],{type:e});return window.URL.createObjectURL(n)}(n.svg(),"image/svg+xml"):n.canvas().toDataURL("image/png")},toCanvas:async function(t,e){return(await zB(this,_v.Canvas,t,e)).canvas()},toSVG:async function(t){return(await zB(this,_v.SVG,t)).svg()},getState:function(t){return this._runtime.getState(t||{data:PB,signals:jB,recurse:!0})},setState:function(t){return this.runAsync(null,(e=>{e._trigger=!1,e._runtime.setState(t)}),(t=>{t._trigger=!0})),this}});const JB="[",ZB="]",QB=/[[\]{}]/,KB={"*":1,arc:1,area:1,group:1,image:1,line:1,path:1,rect:1,rule:1,shape:1,symbol:1,text:1,trail:1};let tT,eT;function nT(t,e,n,r,i){const o=t.length;let a,u=0;for(;e=0?--u:r&&r.indexOf(a)>=0&&++u}return e}function rT(t){const e=[],n=t.length;let r=0,i=0;for(;i"!==(t=t.slice(r+1).trim())[0])throw"Expected '>' after between selector: "+t;n=n.map(iT);const i=iT(t.slice(1).trim());if(i.between)return{between:n,stream:i};i.between=n;return i}(t):function(t){const e={source:tT},n=[];let r,i,o=[0,0],a=0,u=0,s=t.length,l=0;if("}"===t[s-1]){if(l=t.lastIndexOf("{"),!(l>=0))throw"Unmatched right brace: "+t;try{o=function(t){const e=t.split(",");if(!t.length||e.length>2)throw t;return e.map((e=>{const n=+e;if(n!=n)throw t;return n}))}(t.substring(l+1,s-1))}catch(e){throw"Invalid throttle specification: "+t}s=(t=t.slice(0,l).trim()).length,l=0}if(!s)throw t;"@"===t[0]&&(a=++l);r=nT(t,l,":"),r1?(e.type=n[1],a?e.markname=n[0].slice(1):!function(t){return eT[t]}(n[0])?e.source=n[0]:e.marktype=n[0]):e.type=n[0];"!"===e.type.slice(-1)&&(e.consume=!0,e.type=e.type.slice(0,-1));null!=i&&(e.filter=i);o[0]&&(e.throttle=o[0]);o[1]&&(e.debounce=o[1]);return e}(t)}function oT(t){return _(t)?t:{type:t||"pad"}}const aT=t=>+t||0;function uT(t){return _(t)?t.signal?t:{top:aT(t.top),bottom:aT(t.bottom),left:aT(t.left),right:aT(t.right)}:{top:e=aT(t),bottom:e,left:e,right:e};var e}const sT=t=>_(t)&&!v(t)?K({},t):{value:t};function lT(t,e,n,r){if(null!=n){return _(n)&&!v(n)||v(n)&&n.length&&_(n[0])?t.update[e]=n:t[r||"enter"][e]={value:n},1}return 0}function cT(t,e,n){for(const n in e)lT(t,n,e[n]);for(const e in n)lT(t,e,n[e],"update")}function fT(t,e,n){for(const r in e)n&&rt(n,r)||(t[r]=K(t[r]||{},e[r]));return t}function hT(t,e){return e&&(e.enter&&e.enter[t]||e.update&&e.update[t])}const dT="mark",pT="frame",gT="scope",mT="legend-label",yT="title-text",vT="title-subtitle";function _T(t,e,n){t[e]=n&&n.signal?{signal:n.signal}:{value:n}}const xT=t=>pt(t)?wt(t):t.signal?"(".concat(t.signal,")"):MT(t);function bT(t){if(null!=t.gradient)return function(t){const e=[t.start,t.stop,t.count].map((t=>null==t?null:wt(t)));for(;e.length&&null==M(e);)e.pop();return e.unshift(xT(t.gradient)),"gradient(".concat(e.join(","),")")}(t);let e=t.signal?"(".concat(t.signal,")"):t.color?function(t){return t.c?wT("hcl",t.h,t.c,t.l):t.h||t.s?wT("hsl",t.h,t.s,t.l):t.l||t.a?wT("lab",t.l,t.a,t.b):t.r||t.g||t.b?wT("rgb",t.r,t.g,t.b):null}(t.color):null!=t.field?MT(t.field):void 0!==t.value?wt(t.value):void 0;return null!=t.scale&&(e=function(t,e){const n=xT(t.scale);null!=t.range?e="lerp(_range(".concat(n,"), ").concat(+t.range,")"):(void 0!==e&&(e="_scale(".concat(n,", ").concat(e,")")),t.band&&(e=(e?e+"+":"")+"_bandwidth(".concat(n,")")+(1==+t.band?"":"*"+kT(t.band)),t.extra&&(e="(datum.extra ? _scale(".concat(n,", datum.extra.value) : ").concat(e,")"))),null==e&&(e="0"));return e}(t,e)),void 0===e&&(e=null),null!=t.exponent&&(e="pow(".concat(e,",").concat(kT(t.exponent),")")),null!=t.mult&&(e+="*".concat(kT(t.mult))),null!=t.offset&&(e+="+".concat(kT(t.offset))),t.round&&(e="round(".concat(e,")")),e}const wT=(t,e,n,r)=>"(".concat(t,"(").concat([e,n,r].map(bT).join(","),")+'')");function kT(t){return _(t)?"("+bT(t)+")":t}function MT(t){return AT(_(t)?t:{datum:t})}function AT(t){let e,n,r;if(t.signal)e="datum",r=t.signal;else if(t.group||t.parent){for(n=Math.max(1,t.level||1),e="item";n-- >0;)e+=".mark.group";t.parent?(r=t.parent,e+=".datum"):r=t.group}else t.datum?(e="datum",r=t.datum):u("Invalid field reference: "+wt(t));return t.signal||(r=pt(r)?s(r).map(wt).join("]["):AT(r)),e+"["+r+"]"}function ET(t,e,n,r,i,o){const a={};(o=o||{}).encoders={$encode:a},t=function(t,e,n,r,i){const o={},a={};let u,s,l,c;for(s in s="lineBreak","text"!==e||null==i[s]||hT(s,t)||_T(o,s,i[s]),("legend"==n||String(n).startsWith("axis"))&&(n=null),c=n===pT?i.group:n===dT?K({},i.mark,i[e]):null,c)l=hT(s,t)||("fill"===s||"stroke"===s)&&(hT("fill",t)||hT("stroke",t)),l||_T(o,s,c[s]);for(s in $(r).forEach((e=>{const n=i.style&&i.style[e];for(const e in n)hT(e,t)||_T(o,e,n[e])})),t=K({},t),o)c=o[s],c.signal?(u=u||{})[s]=c:a[s]=c;return t.enter=K(a,t.enter),u&&(t.update=K(u,t.update)),t}(t,e,n,r,i.config);for(const n in t)a[n]=DT(t[n],e,o,i);return o}function DT(t,e,n,r){const i={},o={};for(const e in t)null!=t[e]&&(i[e]=CT((a=t[e],v(a)?function(t){let e="";return t.forEach((t=>{const n=bT(t);e+=t.test?"(".concat(t.test,")?").concat(n,":"):n})),":"===M(e)&&(e+="null"),e}(a):bT(a)),r,n,o));var a;return{$expr:{marktype:e,channels:i},$fields:Object.keys(o),$output:Object.keys(t)}}function CT(t,e,n,r){const i=HS(t,e);return i.$fields.forEach((t=>r[t]=1)),K(n,i.$params),i.$expr}const FT=["value","update","init","react","bind"];function ST(t,e){u(t+' for "outer" push: '+wt(e))}function BT(t,e){const n=t.name;if("outer"===t.push)e.signals[n]||ST("No prior signal definition",n),FT.forEach((e=>{void 0!==t[e]&&ST("Invalid property ",e)}));else{const r=e.addSignal(n,t.value);!1===t.react&&(r.react=!1),t.bind&&e.addBinding(n,t.bind)}}function TT(t,e,n,r){this.id=-1,this.type=t,this.value=e,this.params=n,r&&(this.parent=r)}function zT(t,e,n,r){return new TT(t,e,n,r)}function NT(t,e){return zT("operator",t,e)}function OT(t){const e={$ref:t.id};return t.id<0&&(t.refs=t.refs||[]).push(e),e}function RT(t,e){return e?{$field:t,$name:e}:{$field:t}}const LT=RT("key");function UT(t,e){return{$compare:t,$order:e}}function qT(t,e){return(t&&t.signal?"$"+t.signal:t||"")+(t&&e?"_":"")+(e&&e.signal?"$"+e.signal:e||"")}const PT="scope",jT="view";function IT(t){return t&&t.signal}function $T(t){if(IT(t))return!0;if(_(t))for(const e in t)if($T(t[e]))return!0;return!1}function WT(t,e){return null!=t?t:e}function HT(t){return t&&t.signal||t}const YT="timer";function VT(t,e){return(t.merge?GT:t.stream?XT:t.type?JT:u("Invalid stream specification: "+wt(t)))(t,e)}function GT(t,e){const n=ZT({merge:t.merge.map((t=>VT(t,e)))},t,e);return e.addStream(n).id}function XT(t,e){const n=ZT({stream:VT(t.stream,e)},t,e);return e.addStream(n).id}function JT(t,e){let n;t.type===YT?(n=e.event(YT,t.throttle),t={between:t.between,filter:t.filter}):n=e.event(function(t){return t===PT?jT:t||jT}(t.source),t.type);const r=ZT({stream:n},t,e);return 1===Object.keys(r).length?n:e.addStream(r).id}function ZT(t,e,n){let r=e.between;return r&&(2!==r.length&&u('Stream "between" parameter must have 2 entries: '+wt(e)),t.between=[VT(r[0],n),VT(r[1],n)]),r=e.filter?[].concat(e.filter):[],(e.marktype||e.markname||e.markrole)&&r.push(function(t,e,n){const r="event.item";return r+(t&&"*"!==t?"&&"+r+".mark.marktype==='"+t+"'":"")+(n?"&&"+r+".mark.role==='"+n+"'":"")+(e?"&&"+r+".mark.name==='"+e+"'":"")}(e.marktype,e.markname,e.markrole)),e.source===PT&&r.push("inScope(event.item)"),r.length&&(t.filter=HS("("+r.join(")&&(")+")",n).$expr),null!=(r=e.throttle)&&(t.throttle=+r),null!=(r=e.debounce)&&(t.debounce=+r),e.consume&&(t.consume=!0),t}const QT={code:"_.$value",ast:{type:"Identifier",value:"value"}};function KT(t,e,n){const r=t.encode,i={target:n};let o=t.events,a=t.update,s=[];o||u("Signal update missing events specification."),pt(o)&&(o=function(t,e,n){return tT=e||"view",eT=n||KB,rT(t.trim()).map(iT)}(o,e.isSubscope()?PT:jT)),o=$(o).filter((t=>t.signal||t.scale?(s.push(t),0):1)),s.length>1&&(s=[tz(s)]),o.length&&s.push(o.length>1?{merge:o}:o[0]),null!=r&&(a&&u("Signal encode and update are mutually exclusive."),a="encode(item(),"+wt(r)+")"),i.update=pt(a)?HS(a,e):null!=a.expr?HS(a.expr,e):null!=a.value?a.value:null!=a.signal?{$expr:QT,$params:{$value:e.signalRef(a.signal)}}:u("Invalid signal update specification."),t.force&&(i.options={force:!0}),s.forEach((t=>e.addUpdate(K(function(t,e){return{source:t.signal?e.signalRef(t.signal):t.scale?e.scaleRef(t.scale):VT(t,e)}}(t,e),i))))}function tz(t){return{signal:"["+t.map((t=>t.scale?'scale("'+t.scale+'")':t.signal))+"]"}}const ez=t=>(e,n,r)=>zT(t,n,e||void 0,r),nz=ez("aggregate"),rz=ez("axisticks"),iz=ez("bound"),oz=ez("collect"),az=ez("compare"),uz=ez("datajoin"),sz=ez("encode"),lz=ez("expression"),cz=ez("facet"),fz=ez("field"),hz=ez("key"),dz=ez("legendentries"),pz=ez("load"),gz=ez("mark"),mz=ez("multiextent"),yz=ez("multivalues"),vz=ez("overlap"),_z=ez("params"),xz=ez("prefacet"),bz=ez("projection"),wz=ez("proxy"),kz=ez("relay"),Mz=ez("render"),Az=ez("scale"),Ez=ez("sieve"),Dz=ez("sortitems"),Cz=ez("viewlayout"),Fz=ez("values");let Sz=0;const Bz={min:"min",max:"max",count:"sum"};function Tz(t,e){const n=e.getScale(t.name).params;let r;for(r in n.domain=Rz(t.domain,t,e),null!=t.range&&(n.range=Wz(t,e,n)),null!=t.interpolate&&function(t,e){e.interpolate=zz(t.type||t),null!=t.gamma&&(e.interpolateGamma=zz(t.gamma))}(t.interpolate,n),null!=t.nice&&(n.nice=function(t){return _(t)?{interval:zz(t.interval),step:zz(t.step)}:zz(t)}(t.nice)),null!=t.bins&&(n.bins=function(t,e){return t.signal||v(t)?Nz(t,e):e.objectProperty(t)}(t.bins,e)),t)rt(n,r)||"name"===r||(n[r]=zz(t[r],e))}function zz(t,e){return _(t)?t.signal?e.signalRef(t.signal):u("Unsupported object: "+wt(t)):t}function Nz(t,e){return t.signal?e.signalRef(t.signal):t.map((t=>zz(t,e)))}function Oz(t){u("Can not find data set: "+wt(t))}function Rz(t,e,n){if(t)return t.signal?n.signalRef(t.signal):(v(t)?Lz:t.fields?qz:Uz)(t,e,n);null==e.domainMin&&null==e.domainMax||u("No scale domain defined for domainMin/domainMax to override.")}function Lz(t,e,n){return t.map((t=>zz(t,n)))}function Uz(t,e,n){const r=n.getData(t.data);return r||Oz(t.data),vd(e.type)?r.valuesRef(n,t.field,jz(t.sort,!1)):wd(e.type)?r.domainRef(n,t.field):r.extentRef(n,t.field)}function qz(t,e,n){const r=t.data,i=t.fields.reduce(((t,e)=>(e=pt(e)?{data:r,field:e}:v(e)||e.signal?function(t,e){const n="_:vega:_"+Sz++,r=oz({});if(v(t))r.value={$ingest:t};else if(t.signal){const i="setdata("+wt(n)+","+t.signal+")";r.params.input=e.signalRef(i)}return e.addDataPipeline(n,[r,Ez({})]),{data:n,field:"data"}}(e,n):e,t.push(e),t)),[]);return(vd(e.type)?Pz:wd(e.type)?Iz:$z)(t,n,i)}function Pz(t,e,n){const r=jz(t.sort,!0);let i,o;const a=n.map((t=>{const n=e.getData(t.data);return n||Oz(t.data),n.countsRef(e,t.field,r)})),u={groupby:LT,pulse:a};r&&(i=r.op||"count",o=r.field?qT(i,r.field):"count",u.ops=[Bz[i]],u.fields=[e.fieldRef(o)],u.as=[o]),i=e.add(nz(u));const s=e.add(oz({pulse:OT(i)}));return o=e.add(Fz({field:LT,sort:e.sortRef(r),pulse:OT(s)})),OT(o)}function jz(t,e){return t&&(t.field||t.op?t.field||"count"===t.op?e&&t.field&&t.op&&!Bz[t.op]&&u("Multiple domain scales can not be sorted using "+t.op):u("No field provided for sort aggregate op: "+t.op):_(t)?t.field="key":t={field:"key"}),t}function Iz(t,e,n){const r=n.map((t=>{const n=e.getData(t.data);return n||Oz(t.data),n.domainRef(e,t.field)}));return OT(e.add(yz({values:r})))}function $z(t,e,n){const r=n.map((t=>{const n=e.getData(t.data);return n||Oz(t.data),n.extentRef(e,t.field)}));return OT(e.add(mz({extents:r})))}function Wz(t,e,n){const r=e.config.range;let i=t.range;if(i.signal)return e.signalRef(i.signal);if(pt(i)){if(r&&rt(r,i))return Wz(t=K({},t,{range:r[i]}),e,n);"width"===i?i=[0,{signal:"width"}]:"height"===i?i=vd(t.type)?[0,{signal:"height"}]:[{signal:"height"},0]:u("Unrecognized scale range value: "+wt(i))}else{if(i.scheme)return n.scheme=v(i.scheme)?Nz(i.scheme,e):zz(i.scheme,e),i.extent&&(n.schemeExtent=Nz(i.extent,e)),void(i.count&&(n.schemeCount=zz(i.count,e)));if(i.step)return void(n.rangeStep=zz(i.step,e));if(vd(t.type)&&!v(i))return Rz(i,t,e);v(i)||u("Unsupported range type: "+wt(i))}return i.map((t=>(v(t)?Nz:zz)(t,e)))}function Hz(t,e,n){return v(t)?t.map((t=>Hz(t,e,n))):_(t)?t.signal?n.signalRef(t.signal):"fit"===e?t:u("Unsupported parameter object: "+wt(t)):t}const Yz="top",Vz="left",Gz="right",Xz="bottom",Jz="center",Zz="index",Qz="label",Kz="perc",tN="value",eN="guide-label",nN="guide-title",rN="group-title",iN="group-subtitle",oN="symbol",aN="gradient",uN="discrete",sN="size",lN=[sN,"shape","fill","stroke","strokeWidth","strokeDash","opacity"],cN={name:1,style:1,interactive:1},fN={value:0},hN={value:1},dN="group",pN="rect",gN="rule",mN="text";function yN(t){return t.type=dN,t.interactive=t.interactive||!1,t}function vN(t,e){const n=(n,r)=>WT(t[n],WT(e[n],r));return n.isVertical=n=>"vertical"===WT(t.direction,e.direction||(n?e.symbolDirection:e.gradientDirection)),n.gradientLength=()=>WT(t.gradientLength,e.gradientLength||e.gradientWidth),n.gradientThickness=()=>WT(t.gradientThickness,e.gradientThickness||e.gradientHeight),n.entryColumns=()=>WT(t.columns,WT(e.columns,+n.isVertical(!0))),n}function _N(t,e){const n=e&&(e.update&&e.update[t]||e.enter&&e.enter[t]);return n&&n.signal?n:n?n.value:null}function xN(t,e,n){return"item.anchor === '".concat("start","' ? ").concat(t," : item.anchor === '").concat("end","' ? ").concat(e," : ").concat(n)}const bN=xN(wt(Vz),wt(Gz),wt(Jz));function wN(t,e){return e?t?_(t)?Object.assign({},t,{offset:wN(t.offset,e)}):{value:t,offset:e}:e:t}function kN(t,e){return e?(t.name=e.name,t.style=e.style||t.style,t.interactive=!!e.interactive,t.encode=fT(t.encode,e,cN)):t.interactive=!1,t}function MN(t,e,n,r){const i=vN(t,n),o=i.isVertical(),a=i.gradientThickness(),u=i.gradientLength();let s,l,c,f,h;o?(l=[0,1],c=[0,0],f=a,h=u):(l=[0,0],c=[1,0],f=u,h=a);const d={enter:s={opacity:fN,x:fN,y:fN,width:sT(f),height:sT(h)},update:K({},s,{opacity:hN,fill:{gradient:e,start:l,stop:c}}),exit:{opacity:fN}};return cT(d,{stroke:i("gradientStrokeColor"),strokeWidth:i("gradientStrokeWidth")},{opacity:i("gradientOpacity")}),kN({type:pN,role:"legend-gradient",encode:d},r)}function AN(t,e,n,r,i){const o=vN(t,n),a=o.isVertical(),u=o.gradientThickness(),s=o.gradientLength();let l,c,f,h,d="";a?(l="y",f="y2",c="x",h="width",d="1-"):(l="x",f="x2",c="y",h="height");const p={opacity:fN,fill:{scale:e,field:tN}};p[l]={signal:d+"datum."+Kz,mult:s},p[c]=fN,p[f]={signal:d+"datum.perc2",mult:s},p[h]=sT(u);const g={enter:p,update:K({},p,{opacity:hN}),exit:{opacity:fN}};return cT(g,{stroke:o("gradientStrokeColor"),strokeWidth:o("gradientStrokeWidth")},{opacity:o("gradientOpacity")}),kN({type:pN,role:"legend-band",key:tN,from:i,encode:g},r)}const EN="datum.".concat(Kz,'<=0?"').concat(Vz,'":datum.').concat(Kz,'>=1?"').concat(Gz,'":"').concat(Jz,'"'),DN="datum.".concat(Kz,'<=0?"').concat(Xz,'":datum.').concat(Kz,'>=1?"').concat(Yz,'":"').concat("middle",'"');function CN(t,e,n,r){const i=vN(t,e),o=i.isVertical(),a=sT(i.gradientThickness()),u=i.gradientLength();let s,l,c,f,h=i("labelOverlap"),d="";const p={enter:s={opacity:fN},update:l={opacity:hN,text:{field:Qz}},exit:{opacity:fN}};return cT(p,{fill:i("labelColor"),fillOpacity:i("labelOpacity"),font:i("labelFont"),fontSize:i("labelFontSize"),fontStyle:i("labelFontStyle"),fontWeight:i("labelFontWeight"),limit:WT(t.labelLimit,e.gradientLabelLimit)}),o?(s.align={value:"left"},s.baseline=l.baseline={signal:DN},c="y",f="x",d="1-"):(s.align=l.align={signal:EN},s.baseline={value:"top"},c="x",f="y"),s[c]=l[c]={signal:d+"datum."+Kz,mult:u},s[f]=l[f]=a,a.offset=WT(t.labelOffset,e.gradientLabelOffset)||0,h=h?{separation:i("labelSeparation"),method:h,order:"datum.index"}:void 0,kN({type:mN,role:mT,style:eN,key:tN,from:r,encode:p,overlap:h},n)}function FN(t,e,n,r,i){const o=vN(t,e),a=n.entries,u=!(!a||!a.interactive),s=a?a.name:void 0,l=o("clipHeight"),c=o("symbolOffset"),f={data:"value"},h="(".concat(i,") ? datum.").concat("offset"," : datum.").concat(sN),d=l?sT(l):{field:sN},p="datum.".concat(Zz),g="max(1, ".concat(i,")");let m,y,v,_,x;d.mult=.5,m={enter:y={opacity:fN,x:{signal:h,mult:.5,offset:c},y:d},update:v={opacity:hN,x:y.x,y:y.y},exit:{opacity:fN}};let b=null,w=null;t.fill||(b=e.symbolBaseFillColor,w=e.symbolBaseStrokeColor),cT(m,{fill:o("symbolFillColor",b),shape:o("symbolType"),size:o("symbolSize"),stroke:o("symbolStrokeColor",w),strokeDash:o("symbolDash"),strokeDashOffset:o("symbolDashOffset"),strokeWidth:o("symbolStrokeWidth")},{opacity:o("symbolOpacity")}),lN.forEach((e=>{t[e]&&(v[e]=y[e]={scale:t[e],field:tN})}));const k=kN({type:"symbol",role:"legend-symbol",key:tN,from:f,clip:!!l||void 0,encode:m},n.symbols),M=sT(c);M.offset=o("labelOffset"),m={enter:y={opacity:fN,x:{signal:h,offset:M},y:d},update:v={opacity:hN,text:{field:Qz},x:y.x,y:y.y},exit:{opacity:fN}},cT(m,{align:o("labelAlign"),baseline:o("labelBaseline"),fill:o("labelColor"),fillOpacity:o("labelOpacity"),font:o("labelFont"),fontSize:o("labelFontSize"),fontStyle:o("labelFontStyle"),fontWeight:o("labelFontWeight"),limit:o("labelLimit")});const A=kN({type:mN,role:mT,style:eN,key:tN,from:f,encode:m},n.labels);return m={enter:{noBound:{value:!l},width:fN,height:l?sT(l):fN,opacity:fN},exit:{opacity:fN},update:v={opacity:hN,row:{signal:null},column:{signal:null}}},o.isVertical(!0)?(_="ceil(item.mark.items.length / ".concat(g,")"),v.row.signal="".concat(p,"%").concat(_),v.column.signal="floor(".concat(p," / ").concat(_,")"),x={field:["row",p]}):(v.row.signal="floor(".concat(p," / ").concat(g,")"),v.column.signal="".concat(p," % ").concat(g),x={field:p}),v.column.signal="(".concat(i,")?").concat(v.column.signal,":").concat(p),yN({role:gT,from:r={facet:{data:r,name:"value",groupby:Zz}},encode:fT(m,a,cN),marks:[k,A],name:s,interactive:u,sort:x})}const SN='item.orient === "left"',BN='item.orient === "right"',TN="(".concat(SN," || ").concat(BN,")"),zN="datum.vgrad && ".concat(TN),NN=xN('"top"','"bottom"','"middle"'),ON=xN('"right"','"left"','"center"'),RN="datum.vgrad && ".concat(BN," ? (").concat(ON,") : (").concat(TN," && !(datum.vgrad && ").concat(SN,')) ? "left" : ').concat(bN),LN="item._anchor || (".concat(TN,' ? "middle" : "start")'),UN="".concat(zN," ? (").concat(SN," ? -90 : 90) : 0"),qN="".concat(TN," ? (datum.vgrad ? (").concat(BN,' ? "bottom" : "top") : ').concat(NN,') : "top"');function PN(t,e){let n;return _(t)&&(t.signal?n=t.signal:t.path?n="pathShape("+jN(t.path)+")":t.sphere&&(n="geoShape("+jN(t.sphere)+', {type: "Sphere"})')),n?e.signalRef(n):!!t}function jN(t){return _(t)&&t.signal?t.signal:wt(t)}function IN(t){const e=t.role||"";return e.indexOf("axis")&&e.indexOf("legend")&&e.indexOf("title")?t.type===dN?gT:e||dT:e}function $N(t){return{marktype:t.type,name:t.name||void 0,role:t.role||IN(t),zindex:+t.zindex||void 0,aria:t.aria,description:t.description}}function WN(t,e){return t&&t.signal?e.signalRef(t.signal):!1!==t}function HN(t,e){const n=ma(t.type);n||u("Unrecognized transform type: "+wt(t.type));const r=zT(n.type.toLowerCase(),null,YN(n,t,e));return t.signal&&e.addSignal(t.signal,e.proxy(r)),r.metadata=n.metadata||{},r}function YN(t,e,n){const r={},i=t.params.length;for(let o=0;oXN(t,e,n)))):XN(t,r,n)}(t,e,n):"projection"===r?n.projectionRef(e[t.name]):t.array&&!IT(i)?i.map((e=>GN(t,e,n))):GN(t,i,n):void(t.required&&u("Missing required "+wt(e.type)+" parameter: "+wt(t.name)))}function GN(t,e,n){const r=t.type;if(IT(e))return KN(r)?u("Expression references can not be signals."):tO(r)?n.fieldRef(e):eO(r)?n.compareRef(e):n.signalRef(e.signal);{const i=t.expr||tO(r);return i&&JN(e)?n.exprRef(e.expr,e.as):i&&ZN(e)?RT(e.field,e.as):KN(r)?HS(e,n):QN(r)?OT(n.getData(e).values):tO(r)?RT(e):eO(r)?n.compareRef(e):e}}function XN(t,e,n){const r=t.params.length;let i;for(let n=0;nt&&t.expr,ZN=t=>t&&t.field,QN=t=>"data"===t,KN=t=>"expr"===t,tO=t=>"field"===t,eO=t=>"compare"===t;function nO(t,e){return t.$ref?t:t.data&&t.data.$ref?t.data:OT(e.getData(t.data).output)}function rO(t,e,n,r,i){this.scope=t,this.input=e,this.output=n,this.values=r,this.aggregate=i,this.index={}}function iO(t){return pt(t)?t:null}function oO(t,e,n){const r=qT(n.op,n.field);let i;if(e.ops){for(let t=0,n=e.as.length;tnull==t?"null":t)).join(",")+"),0)",e);s.update=l.$expr,s.params=l.$params}function sO(t,e){const n=IN(t),r=t.type===dN,i=t.from&&t.from.facet,o=t.overlap;let a,s,l,c,f,h,d,p=t.layout||n===gT||n===pT;const g=n===dT||p||i,m=function(t,e,n){let r,i,o,a,s;return t?(r=t.facet)&&(e||u("Only group marks can be faceted."),null!=r.field?a=s=nO(r,n):(t.data?s=OT(n.getData(t.data).aggregate):(o=HN(K({type:"aggregate",groupby:$(r.groupby)},r.aggregate),n),o.params.key=n.keyRef(r.groupby),o.params.pulse=nO(r,n),a=s=OT(n.add(o))),i=n.keyRef(r.groupby,!0))):a=OT(n.add(oz(null,[{}]))),a||(a=nO(t,n)),{key:i,pulse:a,parent:s}}(t.from,r,e);s=e.add(uz({key:m.key||(t.key?RT(t.key):void 0),pulse:m.pulse,clean:!r}));const y=OT(s);s=l=e.add(oz({pulse:y})),s=e.add(gz({markdef:$N(t),interactive:WN(t.interactive,e),clip:PN(t.clip,e),context:{$context:!0},groups:e.lookup(),parent:e.signals.parent?e.signalRef("parent"):null,index:e.markpath(),pulse:OT(s)}));const v=OT(s);s=c=e.add(sz(ET(t.encode,t.type,n,t.style,e,{mod:!1,pulse:v}))),s.params.parent=e.encode(),t.transform&&t.transform.forEach((t=>{const n=HN(t,e),r=n.metadata;(r.generates||r.changes)&&u("Mark transforms should not generate new data."),r.nomod||(c.params.mod=!0),n.params.pulse=OT(s),e.add(s=n)})),t.sort&&(s=e.add(Dz({sort:e.compareRef(t.sort),pulse:OT(s)})));const _=OT(s);(i||p)&&(p=e.add(Cz({layout:e.objectProperty(t.layout),legends:e.legends,mark:v,pulse:_})),h=OT(p));const x=e.add(iz({mark:v,pulse:h||_}));d=OT(x),r&&(g&&(a=e.operators,a.pop(),p&&a.pop()),e.pushState(_,h||d,y),i?function(t,e,n){const r=t.from.facet,i=r.name,o=nO(r,e);let a;r.name||u("Facet must have a name: "+wt(r)),r.data||u("Facet must reference a data set: "+wt(r)),r.field?a=e.add(xz({field:e.fieldRef(r.field),pulse:o})):r.groupby?a=e.add(cz({key:e.keyRef(r.groupby),group:OT(e.proxy(n.parent)),pulse:o})):u("Facet must specify groupby or field: "+wt(r));const s=e.fork(),l=s.add(oz()),c=s.add(Ez({pulse:OT(l)}));s.addData(i,new rO(s,l,l,c)),s.addSignal("parent",null),a.params.subflow={$subflow:s.parse(t).toRuntime()}}(t,e,m):g?function(t,e,n){const r=e.add(xz({pulse:n.pulse})),i=e.fork();i.add(Ez()),i.addSignal("parent",null),r.params.subflow={$subflow:i.parse(t).toRuntime()}}(t,e,m):e.parse(t),e.popState(),g&&(p&&a.push(p),a.push(x))),o&&(d=function(t,e,n){const r=t.method,i=t.bound,o=t.separation,a={separation:IT(o)?n.signalRef(o.signal):o,method:IT(r)?n.signalRef(r.signal):r,pulse:e};t.order&&(a.sort=n.compareRef({field:t.order}));if(i){const t=i.tolerance;a.boundTolerance=IT(t)?n.signalRef(t.signal):+t,a.boundScale=n.scaleRef(i.scale),a.boundOrient=i.orient}return OT(n.add(vz(a)))}(o,d,e));const b=e.add(Mz({pulse:d})),w=e.add(Ez({pulse:OT(b)},void 0,e.parent()));null!=t.name&&(f=t.name,e.addData(f,new rO(e,l,b,w)),t.on&&t.on.forEach((t=>{(t.insert||t.remove||t.toggle)&&u("Marks only support modify triggers."),uO(t,e,f)})))}function lO(t,e){const n=e.config.legend,r=t.encode||{},i=vN(t,n),o=r.legend||{},a=o.name||void 0,s=o.interactive,l=o.style,c={};let f,h,d,p=0;lN.forEach((e=>t[e]?(c[e]=t[e],p=p||t[e]):0)),p||u("Missing valid scale for legend.");const g=function(t,e){let n=t.type||oN;t.type||1!==function(t){return lN.reduce(((e,n)=>e+(t[n]?1:0)),0)}(t)||!t.fill&&!t.stroke||(n=yd(e)?aN:_d(e)?uN:oN);return n!==aN?n:_d(e)?uN:aN}(t,e.scaleType(p)),m={title:null!=t.title,scales:c,type:g,vgrad:"symbol"!==g&&i.isVertical()},y=OT(e.add(oz(null,[m]))),v=OT(e.add(dz(h={type:g,scale:e.scaleRef(p),count:e.objectProperty(i("tickCount")),limit:e.property(i("symbolLimit")),values:e.objectProperty(t.values),minstep:e.property(t.tickMinStep),formatType:e.property(t.formatType),formatSpecifier:e.property(t.format)})));return g===aN?(d=[MN(t,p,n,r.gradient),CN(t,n,r.labels,v)],h.count=h.count||e.signalRef("max(2,2*floor((".concat(HT(i.gradientLength()),")/100))"))):g===uN?d=[AN(t,p,n,r.gradient,v),CN(t,n,r.labels,v)]:(f=function(t,e){const n=vN(t,e);return{align:n("gridAlign"),columns:n.entryColumns(),center:{row:!0,column:!1},padding:{row:n("rowPadding"),column:n("columnPadding")}}}(t,n),d=[FN(t,n,r,v,HT(f.columns))],h.size=function(t,e,n){const r=HT(fO("size",t,n)),i=HT(fO("strokeWidth",t,n)),o=HT(function(t,e,n){return _N("fontSize",t)||function(t,e,n){const r=e.config.style[n];return r&&r[t]}("fontSize",e,n)}(n[1].encode,e,eN));return HS("max(ceil(sqrt(".concat(r,")+").concat(i,"),").concat(o,")"),e)}(t,e,d[0].marks)),d=[yN({role:"legend-entry",from:y,encode:{enter:{x:{value:0},y:{value:0}}},marks:d,layout:f,interactive:s})],m.title&&d.push(function(t,e,n,r){const i=vN(t,e),o={enter:{opacity:fN},update:{opacity:hN,x:{field:{group:"padding"}},y:{field:{group:"padding"}}},exit:{opacity:fN}};return cT(o,{orient:i("titleOrient"),_anchor:i("titleAnchor"),anchor:{signal:LN},angle:{signal:UN},align:{signal:RN},baseline:{signal:qN},text:t.title,fill:i("titleColor"),fillOpacity:i("titleOpacity"),font:i("titleFont"),fontSize:i("titleFontSize"),fontStyle:i("titleFontStyle"),fontWeight:i("titleFontWeight"),limit:i("titleLimit"),lineHeight:i("titleLineHeight")},{align:i("titleAlign"),baseline:i("titleBaseline")}),kN({type:mN,role:"legend-title",style:nN,from:r,encode:o},n)}(t,n,r.title,y)),sO(yN({role:"legend",from:y,encode:fT(cO(i,t,n),o,cN),marks:d,aria:i("aria"),description:i("description"),zindex:i("zindex"),name:a,interactive:s,style:l}),e)}function cO(t,e,n){const r={enter:{},update:{}};return cT(r,{orient:t("orient"),offset:t("offset"),padding:t("padding"),titlePadding:t("titlePadding"),cornerRadius:t("cornerRadius"),fill:t("fillColor"),stroke:t("strokeColor"),strokeWidth:n.strokeWidth,strokeDash:n.strokeDash,x:t("legendX"),y:t("legendY"),format:e.format,formatType:e.formatType}),r}function fO(t,e,n){return e[t]?'scale("'.concat(e[t],'",datum)'):_N(t,n[0].encode)}rO.fromEntries=function(t,e){const n=e.length,r=e[n-1],i=e[n-2];let o=e[0],a=null,u=1;for(o&&"load"===o.type&&(o=e[1]),t.add(e[0]);u{n.push(HN(t,e))})),t.on&&t.on.forEach((n=>{uO(n,e,t.name)})),e.addDataPipeline(t.name,function(t,e,n){const r=[];let i,o,a,u,s,l=null,c=!1,f=!1;t.values?$T(t.values)||$T(t.format)?(r.push(yO(e,t)),r.push(l=mO())):r.push(l=mO({$ingest:t.values,$format:t.format})):t.url?$T(t.url)||$T(t.format)?(r.push(yO(e,t)),r.push(l=mO())):r.push(l=mO({$request:t.url,$format:t.format})):t.source&&(l=i=$(t.source).map((t=>OT(e.getData(t).output))),r.push(null));for(o=0,a=n.length;ot===Xz||t===Yz,_O=(t,e,n)=>IT(t)?AO(t.signal,e,n):t===Vz||t===Yz?e:n,xO=(t,e,n)=>IT(t)?kO(t.signal,e,n):vO(t)?e:n,bO=(t,e,n)=>IT(t)?MO(t.signal,e,n):vO(t)?n:e,wO=(t,e,n)=>IT(t)?EO(t.signal,e,n):t===Yz?{value:e}:{value:n},kO=(t,e,n)=>CO("".concat(t," === '").concat(Yz,"' || ").concat(t," === '").concat(Xz,"'"),e,n),MO=(t,e,n)=>CO("".concat(t," !== '").concat(Yz,"' && ").concat(t," !== '").concat(Xz,"'"),e,n),AO=(t,e,n)=>SO("".concat(t," === '").concat(Vz,"' || ").concat(t," === '").concat(Yz,"'"),e,n),EO=(t,e,n)=>SO("".concat(t," === '").concat(Yz,"'"),e,n),DO=(t,e,n)=>SO("".concat(t," === '").concat(Gz,"'"),e,n),CO=(t,e,n)=>(e=null!=e?sT(e):e,n=null!=n?sT(n):n,FO(e)&&FO(n)?(e=e?e.signal||wt(e.value):null,n=n?n.signal||wt(n.value):null,{signal:"".concat(t," ? (").concat(e,") : (").concat(n,")")}):[K({test:t},e)].concat(n||[])),FO=t=>null==t||1===Object.keys(t).length,SO=(t,e,n)=>({signal:"".concat(t," ? (").concat(TO(e),") : (").concat(TO(n),")")}),BO=(t,e,n,r,i)=>({signal:(null!=r?"".concat(t," === '").concat(Vz,"' ? (").concat(TO(r),") : "):"")+(null!=n?"".concat(t," === '").concat(Xz,"' ? (").concat(TO(n),") : "):"")+(null!=i?"".concat(t," === '").concat(Gz,"' ? (").concat(TO(i),") : "):"")+(null!=e?"".concat(t," === '").concat(Yz,"' ? (").concat(TO(e),") : "):"")+"(null)"}),TO=t=>IT(t)?t.signal:null==t?null:wt(t),zO=(t,e)=>{const n=t.signal;return n&&n.endsWith("(null)")?{signal:n.slice(0,-6)+e.signal}:t};function NO(t,e,n,r){let i;if(e&&rt(e,t))return e[t];if(rt(n,t))return n[t];if(t.startsWith("title")){switch(t){case"titleColor":i="fill";break;case"titleFont":case"titleFontSize":case"titleFontWeight":i=t[5].toLowerCase()+t.slice(6)}return r["guide-title"][i]}if(t.startsWith("label")){switch(t){case"labelColor":i="fill";break;case"labelFont":case"labelFontSize":i=t[5].toLowerCase()+t.slice(6)}return r["guide-label"][i]}return null}function OO(t){const e={};for(const n of t)if(n)for(const t in n)e[t]=1;return Object.keys(e)}function RO(t,e){return{scale:t.scale,range:e}}function LO(t,e,n,r,i){const o=vN(t,e),a=t.orient,u=t.gridScale,s=_O(a,1,-1),l=function(t,e){if(1===e);else if(_(t)){let n=t=K({},t);for(;null!=n.mult;){if(!_(n.mult))return n.mult=IT(e)?{signal:"(".concat(n.mult,") * (").concat(e.signal,")")}:n.mult*e,t;n=n.mult=K({},n.mult)}n.mult=e}else t=IT(e)?{signal:"(".concat(e.signal,") * (").concat(t||0,")")}:e*(t||0);return t}(t.offset,s);let c,f,h;const d={enter:c={opacity:fN},update:h={opacity:hN},exit:f={opacity:fN}};cT(d,{stroke:o("gridColor"),strokeCap:o("gridCap"),strokeDash:o("gridDash"),strokeDashOffset:o("gridDashOffset"),strokeOpacity:o("gridOpacity"),strokeWidth:o("gridWidth")});const p={scale:t.scale,field:tN,band:i.band,extra:i.extra,offset:i.offset,round:o("tickRound")},g=xO(a,{signal:"height"},{signal:"width"}),m=u?{scale:u,range:0,mult:s,offset:l}:{value:0,offset:l},y=u?{scale:u,range:1,mult:s,offset:l}:K(g,{mult:s,offset:l});return c.x=h.x=xO(a,p,m),c.y=h.y=bO(a,p,m),c.x2=h.x2=bO(a,y),c.y2=h.y2=xO(a,y),f.x=xO(a,p),f.y=bO(a,p),kN({type:gN,role:"axis-grid",key:tN,from:r,encode:d},n)}function UO(t,e,n,r,i){return{signal:'flush(range("'+t+'"), scale("'+t+'", datum.value), '+e+","+n+","+r+","+i+")"}}function qO(t,e,n,r,i,o){const a=vN(t,e),u=t.orient,s=t.scale,l=_O(u,-1,1),c=HT(a("labelFlush")),f=HT(a("labelFlushOffset")),h=a("labelAlign"),d=a("labelBaseline");let p,g=0===c||!!c;const m=sT(i);m.mult=l,m.offset=sT(a("labelPadding")||0),m.offset.mult=l;const y={scale:s,field:tN,band:.5,offset:wN(o.offset,a("labelOffset"))},v=xO(u,g?UO(s,c,'"left"','"right"','"center"'):{value:"center"},((t,e,n)=>IT(t)?DO(t.signal,e,n):t===Gz?{value:e}:{value:n})(u,"left","right")),_=xO(u,wO(u,"bottom","top"),g?UO(s,c,'"top"','"bottom"','"middle"'):{value:"middle"}),x=UO(s,c,"-(".concat(f,")"),f,0);g=g&&f;const b={opacity:fN,x:xO(u,y,m),y:bO(u,y,m)},w={enter:b,update:p={opacity:hN,text:{field:Qz},x:b.x,y:b.y,align:v,baseline:_},exit:{opacity:fN,x:b.x,y:b.y}};cT(w,{dx:!h&&g?xO(u,x):null,dy:!d&&g?bO(u,x):null}),cT(w,{angle:a("labelAngle"),fill:a("labelColor"),fillOpacity:a("labelOpacity"),font:a("labelFont"),fontSize:a("labelFontSize"),fontWeight:a("labelFontWeight"),fontStyle:a("labelFontStyle"),limit:a("labelLimit"),lineHeight:a("labelLineHeight")},{align:h,baseline:d});const k=a("labelBound");let M=a("labelOverlap");return M=M||k?{separation:a("labelSeparation"),method:M,order:"datum.index",bound:k?{scale:s,orient:u,tolerance:k}:null}:void 0,p.align!==v&&(p.align=zO(p.align,v)),p.baseline!==_&&(p.baseline=zO(p.baseline,_)),kN({type:mN,role:"axis-label",style:eN,key:tN,from:r,encode:w,overlap:M},n)}function PO(t,e,n,r){const i=vN(t,e),o=t.orient,a=_O(o,-1,1);let u,s;const l={enter:u={opacity:fN,anchor:sT(i("titleAnchor",null)),align:{signal:bN}},update:s=K({},u,{opacity:hN,text:sT(t.title)}),exit:{opacity:fN}},c={signal:'lerp(range("'.concat(t.scale,'"), ').concat(xN(0,1,.5),")")};return s.x=xO(o,c),s.y=bO(o,c),u.angle=xO(o,fN,((t,e)=>0===e?0:IT(t)?{signal:"(".concat(t.signal,") * ").concat(e)}:{value:t*e})(a,90)),u.baseline=xO(o,wO(o,Xz,Yz),{value:Xz}),s.angle=u.angle,s.baseline=u.baseline,cT(l,{fill:i("titleColor"),fillOpacity:i("titleOpacity"),font:i("titleFont"),fontSize:i("titleFontSize"),fontStyle:i("titleFontStyle"),fontWeight:i("titleFontWeight"),limit:i("titleLimit"),lineHeight:i("titleLineHeight")},{align:i("titleAlign"),angle:i("titleAngle"),baseline:i("titleBaseline")}),function(t,e,n,r){const i=(t,e)=>null!=t?(n.update[e]=zO(sT(t),n.update[e]),!1):!hT(e,r),o=i(t("titleX"),"x"),a=i(t("titleY"),"y");n.enter.auto=a===o?sT(a):xO(e,sT(a),sT(o))}(i,o,l,n),l.update.align=zO(l.update.align,u.align),l.update.angle=zO(l.update.angle,u.angle),l.update.baseline=zO(l.update.baseline,u.baseline),kN({type:mN,role:"axis-title",style:nN,from:r,encode:l},n)}function jO(t,e){const n=function(t,e){var n,r,i,o=e.config,a=o.style,u=o.axis,s="band"===e.scaleType(t.scale)&&o.axisBand,l=t.orient;if(IT(l)){const t=OO([o.axisX,o.axisY]),e=OO([o.axisTop,o.axisBottom,o.axisLeft,o.axisRight]);for(i of(n={},t))n[i]=xO(l,NO(i,o.axisX,u,a),NO(i,o.axisY,u,a));for(i of(r={},e))r[i]=BO(l.signal,NO(i,o.axisTop,u,a),NO(i,o.axisBottom,u,a),NO(i,o.axisLeft,u,a),NO(i,o.axisRight,u,a))}else n=l===Yz||l===Xz?o.axisX:o.axisY,r=o["axis"+l[0].toUpperCase()+l.slice(1)];return n||r||s?K({},u,n,r,s):u}(t,e),r=t.encode||{},i=r.axis||{},o=i.name||void 0,a=i.interactive,u=i.style,s=vN(t,n),l=function(t){const e=t("tickBand");let n,r,i=t("tickOffset");return e?e.signal?(n={signal:"(".concat(e.signal,") === 'extent' ? 1 : 0.5")},r={signal:"(".concat(e.signal,") === 'extent'")},_(i)||(i={signal:"(".concat(e.signal,") === 'extent' ? 0 : ").concat(i)})):"extent"===e?(n=1,r=!0,i=0):(n=.5,r=!1):(n=t("bandPosition"),r=t("tickExtra")),{extra:r,band:n,offset:i}}(s),c={scale:t.scale,ticks:!!s("ticks"),labels:!!s("labels"),grid:!!s("grid"),domain:!!s("domain"),title:null!=t.title},f=OT(e.add(oz({},[c]))),h=OT(e.add(rz({scale:e.scaleRef(t.scale),extra:e.property(l.extra),count:e.objectProperty(t.tickCount),values:e.objectProperty(t.values),minstep:e.property(t.tickMinStep),formatType:e.property(t.formatType),formatSpecifier:e.property(t.format)}))),d=[];let p;return c.grid&&d.push(LO(t,n,r.grid,h,l)),c.ticks&&(p=s("tickSize"),d.push(function(t,e,n,r,i,o){const a=vN(t,e),u=t.orient,s=_O(u,-1,1);let l,c,f;const h={enter:l={opacity:fN},update:f={opacity:hN},exit:c={opacity:fN}};cT(h,{stroke:a("tickColor"),strokeCap:a("tickCap"),strokeDash:a("tickDash"),strokeDashOffset:a("tickDashOffset"),strokeOpacity:a("tickOpacity"),strokeWidth:a("tickWidth")});const d=sT(i);d.mult=s;const p={scale:t.scale,field:tN,band:o.band,extra:o.extra,offset:o.offset,round:a("tickRound")};return f.y=l.y=xO(u,fN,p),f.y2=l.y2=xO(u,d),c.x=xO(u,p),f.x=l.x=bO(u,fN,p),f.x2=l.x2=bO(u,d),c.y=bO(u,p),kN({type:gN,role:"axis-tick",key:tN,from:r,encode:h},n)}(t,n,r.ticks,h,p,l))),c.labels&&(p=c.ticks?p:0,d.push(qO(t,n,r.labels,h,p,l))),c.domain&&d.push(function(t,e,n,r){const i=vN(t,e),o=t.orient;let a,u;const s={enter:a={opacity:fN},update:u={opacity:hN},exit:{opacity:fN}};cT(s,{stroke:i("domainColor"),strokeCap:i("domainCap"),strokeDash:i("domainDash"),strokeDashOffset:i("domainDashOffset"),strokeWidth:i("domainWidth"),strokeOpacity:i("domainOpacity")});const l=RO(t,0),c=RO(t,1);return a.x=u.x=xO(o,l,fN),a.x2=u.x2=xO(o,c),a.y=u.y=bO(o,l,fN),a.y2=u.y2=bO(o,c),kN({type:gN,role:"axis-domain",from:r,encode:s},n)}(t,n,r.domain,f)),c.title&&d.push(PO(t,n,r.title,f)),sO(yN({role:"axis",from:f,encode:fT(IO(s,t),i,cN),marks:d,aria:s("aria"),description:s("description"),zindex:s("zindex"),name:o,interactive:a,style:u}),e)}function IO(t,e){const n={enter:{},update:{}};return cT(n,{orient:t("orient"),offset:t("offset")||0,position:WT(e.position,0),titlePadding:t("titlePadding"),minExtent:t("minExtent"),maxExtent:t("maxExtent"),range:{signal:'abs(span(range("'.concat(e.scale,'")))')},translate:t("translate"),format:e.format,formatType:e.formatType}),n}function $O(t,e,n){const r=$(t.signals),i=$(t.scales);return n||r.forEach((t=>BT(t,e))),$(t.projections).forEach((t=>function(t,e){const n=e.config.projection||{},r={};for(const n in t)"name"!==n&&(r[n]=Hz(t[n],n,e));for(const t in n)null==r[t]&&(r[t]=Hz(n[t],t,e));e.addProjection(t.name,r)}(t,e))),i.forEach((t=>function(t,e){const n=t.type||"linear";gd(n)||u("Unrecognized scale type: "+wt(n)),e.addScale(t.name,{type:n,domain:void 0})}(t,e))),$(t.data).forEach((t=>gO(t,e))),i.forEach((t=>Tz(t,e))),(n||r).forEach((t=>function(t,e){const n=e.getSignal(t.name);let r=t.update;t.init&&(r?u("Signals can not include both init and update expressions."):(r=t.init,n.initonly=!0)),r&&(r=HS(r,e),n.update=r.$expr,n.params=r.$params),t.on&&t.on.forEach((t=>KT(t,e,n.id)))}(t,e))),$(t.axes).forEach((t=>jO(t,e))),$(t.marks).forEach((t=>sO(t,e))),$(t.legends).forEach((t=>lO(t,e))),t.title&&dO(t.title,e),e.parseLambdas(),e}function WO(t,e){const n=e.config,r=OT(e.root=e.add(NT())),i=function(t,e){const n=n=>WT(t[n],e[n]),r=[HO("background",n("background")),HO("autosize",oT(n("autosize"))),HO("padding",uT(n("padding"))),HO("width",n("width")||0),HO("height",n("height")||0)],i=r.reduce(((t,e)=>(t[e.name]=e,t)),{}),o={};return $(t.signals).forEach((t=>{rt(i,t.name)?t=K(i[t.name],t):r.push(t),o[t.name]=t})),$(e.signals).forEach((t=>{rt(o,t.name)||rt(i,t.name)||r.push(t)})),r}(t,n);i.forEach((t=>BT(t,e))),e.description=t.description||n.description,e.eventConfig=n.events,e.legends=e.objectProperty(n.legend&&n.legend.layout),e.locale=n.locale;const o=e.add(oz()),a=e.add(sz(ET((t=>fT({enter:{x:{value:0},y:{value:0}},update:{width:{signal:"width"},height:{signal:"height"}}},t))(t.encode),dN,pT,t.style,e,{pulse:OT(o)}))),u=e.add(Cz({layout:e.objectProperty(t.layout),legends:e.legends,autosize:e.signalRef("autosize"),mark:r,pulse:OT(a)}));e.operators.pop(),e.pushState(OT(a),OT(u),null),$O(t,e,i),e.operators.push(u);let s=e.add(iz({mark:r,pulse:OT(u)}));return s=e.add(Mz({pulse:OT(s)})),s=e.add(Ez({pulse:OT(s)})),e.addData("root",new rO(e,o,o,s)),e}function HO(t,e){return e&&e.signal?{name:t,update:e.signal}:{name:t,value:e}}function YO(t,e){this.config=t||{},this.options=e||{},this.bindings=[],this.field={},this.signals={},this.lambdas={},this.scales={},this.events={},this.data={},this.streams=[],this.updates=[],this.operators=[],this.eventConfig=null,this.locale=null,this._id=0,this._subid=0,this._nextsub=[0],this._parent=[],this._encode=[],this._lookup=[],this._markpath=[]}function VO(t){this.config=t.config,this.options=t.options,this.legends=t.legends,this.field=Object.create(t.field),this.signals=Object.create(t.signals),this.lambdas=Object.create(t.lambdas),this.scales=Object.create(t.scales),this.events=Object.create(t.events),this.data=Object.create(t.data),this.streams=[],this.updates=[],this.operators=[],this._id=0,this._subid=++t._nextsub[0],this._nextsub=t._nextsub,this._parent=t._parent.slice(),this._encode=t._encode.slice(),this._lookup=t._lookup.slice(),this._markpath=t._markpath}function GO(t){return(v(t)?XO:JO)(t)}function XO(t){const e=t.length;let n="[";for(let r=0;r0?",":"")+(_(e)?e.signal||GO(e):wt(e))}return n+"]"}function JO(t){let e,n,r="{",i=0;for(e in t)n=t[e],r+=(++i>1?",":"")+wt(e)+":"+(_(n)?n.signal||GO(n):wt(n));return r+"}"}YO.prototype=VO.prototype={parse(t){return $O(t,this)},fork(){return new VO(this)},isSubscope(){return this._subid>0},toRuntime(){return this.finish(),{description:this.description,operators:this.operators,streams:this.streams,updates:this.updates,bindings:this.bindings,eventConfig:this.eventConfig,locale:this.locale}},id(){return(this._subid?this._subid+":":0)+this._id++},add(t){return this.operators.push(t),t.id=this.id(),t.refs&&(t.refs.forEach((e=>{e.$ref=t.id})),t.refs=null),t},proxy(t){const e=t instanceof TT?OT(t):t;return this.add(wz({value:e}))},addStream(t){return this.streams.push(t),t.id=this.id(),t},addUpdate(t){return this.updates.push(t),t},finish(){let t,e;for(t in this.root&&(this.root.root=!0),this.signals)this.signals[t].signal=t;for(t in this.scales)this.scales[t].scale=t;function n(t,e,n){let r,i;t&&(r=t.data||(t.data={}),i=r[e]||(r[e]=[]),i.push(n))}for(t in this.data){e=this.data[t],n(e.input,t,"input"),n(e.output,t,"output"),n(e.values,t,"values");for(const r in e.index)n(e.index[r],t,"index:"+r)}return this},pushState(t,e,n){this._encode.push(OT(this.add(Ez({pulse:t})))),this._parent.push(e),this._lookup.push(n?OT(this.proxy(n)):null),this._markpath.push(-1)},popState(){this._encode.pop(),this._parent.pop(),this._lookup.pop(),this._markpath.pop()},parent(){return M(this._parent)},encode(){return M(this._encode)},lookup(){return M(this._lookup)},markpath(){const t=this._markpath;return++t[t.length-1]},fieldRef(t,e){if(pt(t))return RT(t,e);t.signal||u("Unsupported field reference: "+wt(t));const n=t.signal;let r=this.field[n];if(!r){const t={name:this.signalRef(n)};e&&(t.as=e),this.field[n]=r=OT(this.add(fz(t)))}return r},compareRef(t){let e=!1;const n=t=>IT(t)?(e=!0,this.signalRef(t.signal)):function(t){return t&&t.expr}(t)?(e=!0,this.exprRef(t.expr)):t,r=$(t.field).map(n),i=$(t.order).map(n);return e?OT(this.add(az({fields:r,orders:i}))):UT(r,i)},keyRef(t,e){let n=!1;const r=this.signals;return t=$(t).map((t=>IT(t)?(n=!0,OT(r[t.signal])):t)),n?OT(this.add(hz({fields:t,flat:e}))):function(t,e){const n={$key:t};return e&&(n.$flat=!0),n}(t,e)},sortRef(t){if(!t)return t;const e=qT(t.op,t.field),n=t.order||"ascending";return n.signal?OT(this.add(az({fields:e,orders:this.signalRef(n.signal)}))):UT(e,n)},event(t,e){const n=t+":"+e;if(!this.events[n]){const r=this.id();this.streams.push({id:r,source:t,type:e}),this.events[n]=r}return this.events[n]},hasOwnSignal(t){return rt(this.signals,t)},addSignal(t,e){this.hasOwnSignal(t)&&u("Duplicate signal name: "+wt(t));const n=e instanceof TT?e:this.add(NT(e));return this.signals[t]=n},getSignal(t){return this.signals[t]||u("Unrecognized signal name: "+wt(t)),this.signals[t]},signalRef(t){return this.signals[t]?OT(this.signals[t]):(rt(this.lambdas,t)||(this.lambdas[t]=this.add(NT(null))),OT(this.lambdas[t]))},parseLambdas(){const t=Object.keys(this.lambdas);for(let e=0,n=t.length;er+Math.floor(o*t.random()),pdf:t=>t===Math.floor(t)&&t>=r&&t=i?1:(e-r+1)/o},icdf:t=>t>=0&&t<=1?r-1+Math.floor(t*o):NaN};return a.min(e).max(n)},t.randomKDE=za,t.randomLCG=function(t){return function(){return(t=(1103515245*t+12345)%2147483647)/2147483647}},t.randomLogNormal=Ua,t.randomMixture=qa,t.randomNormal=Ta,t.randomUniform=Wa,t.read=Co,t.regressionExp=Za,t.regressionLinear=Xa,t.regressionLoess=nu,t.regressionLog=Ja,t.regressionPoly=tu,t.regressionPow=Qa,t.regressionQuad=Ka,t.renderModule=bv,t.repeat=_t,t.resetDefaultLocale=function(){return yo(),wo(),Do()},t.resetSVGClipId=Xp,t.resetSVGDefIds=function(){Xp(),Kd=0},t.responseType=pe,t.runtimeContext=tB,t.sampleCurve=au,t.sampleLogNormal=Na,t.sampleNormal=Ca,t.sampleUniform=Pa,t.scale=pd,t.sceneEqual=Cv,t.sceneFromJSON=Qm,t.scenePickVisit=$g,t.sceneToJSON=Zm,t.sceneVisit=Ig,t.sceneZOrder=jg,t.scheme=Td,t.serializeXML=Zy,t.setRandom=function(e){t.random=e},t.span=bt,t.splitAccessPath=s,t.stringValue=wt,t.textMetrics=Cm,t.timeBin=qr,t.timeFloor=fr,t.timeFormatLocale=Mo,t.timeInterval=yr,t.timeOffset=xr,t.timeSequence=kr,t.timeUnitSpecifier=Yn,t.timeUnits=Wn,t.toBoolean=kt,t.toDate=At,t.toNumber=A,t.toSet=Dt,t.toString=Et,t.transform=ya,t.transforms=ga,t.truncate=Ct,t.truthy=p,t.tupleid=Oo,t.typeParsers=jt,t.utcFloor=pr,t.utcInterval=vr,t.utcOffset=br,t.utcSequence=Mr,t.utcdayofyear=er,t.utcquarter=I,t.utcweek=nr,t.version="5.17.0",t.visitArray=Ft,t.week=Jn,t.writeConfig=w,t.zero=h,t.zoomLinear=L,t.zoomLog=U,t.zoomPow=q,t.zoomSymlog=P,Object.defineProperty(t,"__esModule",{value:!0})})); +//# sourceMappingURL=vega.min.js.map diff --git a/src/citationnet/templates/base.html b/src/citationnet/templates/base.html new file mode 100644 index 0000000..a43ec19 --- /dev/null +++ b/src/citationnet/templates/base.html @@ -0,0 +1,17 @@ + + + + {% block head %} + + {% block title %}{% endblock %} - CitationNet + {% endblock %} + + +
{% block content %}{% endblock %}
+ + + diff --git a/src/citationnet/templates/visDynamic.html b/src/citationnet/templates/visDynamic.html index c771f34..ea00442 100644 --- a/src/citationnet/templates/visDynamic.html +++ b/src/citationnet/templates/visDynamic.html @@ -1,5 +1,4 @@ {% extends 'base.html' %} -{% load static %} {% block content %} @@ -81,4 +80,4 @@ -{% endblock %} \ No newline at end of file +{% endblock %} From 6f3718d3c1ea7ee73fd25d7f360e08465e07e884 Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Wed, 16 Mar 2022 16:12:22 +0100 Subject: [PATCH 03/23] wip add new vs --- setup.cfg | 1 + src/citationnet/__init__.py | 14 +- src/citationnet/media/data/prl.json | 48714 +++++++++++++ src/citationnet/static/3d-force-graph.js.map | 1 + src/citationnet/static/3d-force-graph.min.js | 5 + .../static/css/bootstrap.4.3.1.min.css | 7 - .../static/css/bootstrap.min.css.map | 1 - .../static/css/jquery-ui.1.12.1.css | 1311 - .../static/css/select2-bootstrap4.min.css | 1 - .../static/css/select2.4.0.13.min.css | 1 - .../static/css/select2.4.1.0.min.css | 1 - src/citationnet/static/{lib => }/d3-force.js | 0 .../static/{lib => }/force-citationNet.js | 227 +- src/citationnet/static/images/favicon.ico | Bin 318 -> 0 bytes src/citationnet/static/images/gmpg_logo.png | Bin 148695 -> 0 bytes src/citationnet/static/images/mpg_logo.png | Bin 32754 -> 0 bytes .../static/js/bootstrap.4.3.1.min.js | 7 - .../static/js/bootstrap.min.js.map | 1 - .../static/js/jquery-3.3.1.slim.min.js | 2 - .../static/js/jquery-ui.1.12.1.min.js | 13 - src/citationnet/static/js/jquery.3.5.1.min.js | 2 - .../static/js/popper.1.14.7.min.js | 5 - src/citationnet/static/js/popper.min.js.map | 1 - .../static/js/select2.4.0.13.min.js | 2 - .../static/js/select2.4.1.0.min.js | 2 - .../static/js/vega-embed.min.js.map | 1 - .../static/js/vega-embed@6.12.2.js | 27 - .../static/js/vega-lite.min.js.map | 1 - src/citationnet/static/js/vega-lite@4.17.0.js | 2 - src/citationnet/static/js/vega.min.js.map | 1 - src/citationnet/static/js/vega@5.17.0.js | 2 - .../static/lib/3d-force-graph.common.js | 588 - .../static/lib/3d-force-graph.d.ts | 82 - src/citationnet/static/lib/3d-force-graph.js | 59881 ---------------- .../static/lib/3d-force-graph.js.map | 1 - .../static/lib/3d-force-graph.min.js | 5 - .../static/lib/3d-force-graph.module.js | 579 - .../static/lib/select2-bootstrap4.min.css | 1 - src/citationnet/static/lut.js | 194 + src/citationnet/static/pieChart_vega-lite.js | 82 + src/citationnet/static/{lib => }/sidebar.css | 53 +- src/citationnet/static/{lib => }/sidebar.js | 4 +- src/citationnet/static/three.module.js | 49611 +++++++++++++ src/citationnet/templates/base.html | 4 +- src/citationnet/templates/choose.html | 244 + src/citationnet/templates/vegaDemo.html | 22 + src/citationnet/templates/visDynamic.html | 103 +- 47 files changed, 99211 insertions(+), 62596 deletions(-) create mode 100644 src/citationnet/media/data/prl.json create mode 100644 src/citationnet/static/3d-force-graph.js.map create mode 100644 src/citationnet/static/3d-force-graph.min.js delete mode 100644 src/citationnet/static/css/bootstrap.4.3.1.min.css delete mode 100644 src/citationnet/static/css/bootstrap.min.css.map delete mode 100644 src/citationnet/static/css/jquery-ui.1.12.1.css delete mode 100644 src/citationnet/static/css/select2-bootstrap4.min.css delete mode 100644 src/citationnet/static/css/select2.4.0.13.min.css delete mode 100644 src/citationnet/static/css/select2.4.1.0.min.css rename src/citationnet/static/{lib => }/d3-force.js (100%) rename src/citationnet/static/{lib => }/force-citationNet.js (61%) delete mode 100644 src/citationnet/static/images/favicon.ico delete mode 100644 src/citationnet/static/images/gmpg_logo.png delete mode 100644 src/citationnet/static/images/mpg_logo.png delete mode 100644 src/citationnet/static/js/bootstrap.4.3.1.min.js delete mode 100644 src/citationnet/static/js/bootstrap.min.js.map delete mode 100644 src/citationnet/static/js/jquery-3.3.1.slim.min.js delete mode 100644 src/citationnet/static/js/jquery-ui.1.12.1.min.js delete mode 100644 src/citationnet/static/js/jquery.3.5.1.min.js delete mode 100644 src/citationnet/static/js/popper.1.14.7.min.js delete mode 100644 src/citationnet/static/js/popper.min.js.map delete mode 100644 src/citationnet/static/js/select2.4.0.13.min.js delete mode 100644 src/citationnet/static/js/select2.4.1.0.min.js delete mode 100644 src/citationnet/static/js/vega-embed.min.js.map delete mode 100644 src/citationnet/static/js/vega-embed@6.12.2.js delete mode 100644 src/citationnet/static/js/vega-lite.min.js.map delete mode 100644 src/citationnet/static/js/vega-lite@4.17.0.js delete mode 100644 src/citationnet/static/js/vega.min.js.map delete mode 100644 src/citationnet/static/js/vega@5.17.0.js delete mode 100644 src/citationnet/static/lib/3d-force-graph.common.js delete mode 100644 src/citationnet/static/lib/3d-force-graph.d.ts delete mode 100644 src/citationnet/static/lib/3d-force-graph.js delete mode 100644 src/citationnet/static/lib/3d-force-graph.js.map delete mode 100644 src/citationnet/static/lib/3d-force-graph.min.js delete mode 100644 src/citationnet/static/lib/3d-force-graph.module.js delete mode 100644 src/citationnet/static/lib/select2-bootstrap4.min.css create mode 100644 src/citationnet/static/lut.js create mode 100644 src/citationnet/static/pieChart_vega-lite.js rename src/citationnet/static/{lib => }/sidebar.css (72%) rename src/citationnet/static/{lib => }/sidebar.js (92%) create mode 100644 src/citationnet/static/three.module.js create mode 100644 src/citationnet/templates/choose.html create mode 100644 src/citationnet/templates/vegaDemo.html diff --git a/setup.cfg b/setup.cfg index abe68bb..016aab3 100644 --- a/setup.cfg +++ b/setup.cfg @@ -37,3 +37,4 @@ where = src citationnet = templates/* static/* + media/* diff --git a/src/citationnet/__init__.py b/src/citationnet/__init__.py index dfa0ee5..d146614 100644 --- a/src/citationnet/__init__.py +++ b/src/citationnet/__init__.py @@ -3,13 +3,15 @@ from flask import Flask, render_template mainpath = os.path.dirname(os.path.abspath(__file__)) - def create_app(test_config=None): # create and configure the app app = Flask( - __name__, - instance_relative_config=True, - template_folder=f'{mainpath}/templates' + "citationnet", + # instance_relative_config=True, + template_folder=f'{mainpath}/templates', + static_url_path="/static", + static_folder='static', + root_path=mainpath ) # app.config.from_mapping( # SECRET_KEY='dev', @@ -36,6 +38,6 @@ def hello(): @app.route('/citationnet/') @app.route('/citationnet/') - def citnet(name=None): - return render_template('visDynamic.html', name=name) + def citnet(name=None, jsonDataPath=f'{mainpath}/media/data/'): + return render_template('visDynamic.html', name=name, datafolder=jsonDataPath) return app diff --git a/src/citationnet/media/data/prl.json b/src/citationnet/media/data/prl.json new file mode 100644 index 0000000..7715215 --- /dev/null +++ b/src/citationnet/media/data/prl.json @@ -0,0 +1,48714 @@ +{ + "nodes": [ + { + "id": "pub.1010926410", + "attributes": { + "title": "Quantum Criticality and Dynamical Instability in the Kicked-Top Model", + "doi": "10.1103/physrevlett.112.140408", + "nodeyear": 2014, + "ref-by-count": 48, + "is_input_DOI": true, + "category_for": "02:1.00", + "level": "ref_l1" + } + }, + { + "id": "pub.1144412825", + "attributes": { + "title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", + "doi": "10.21468/scipostphys.12.1.002", + "nodeyear": 2022, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1144210477", + "attributes": { + "title": "Impact of chaos on precursors of quantum criticality", + "doi": "10.1103/physreve.104.l062202", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1143466025", + "attributes": { + "title": "Stabilization of product states and excited-state quantum phase transitions in a coupled qubit-field system", + "doi": "10.1103/physreva.104.053722", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1144437177", + "attributes": { + "title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", + "doi": "10.21468/scipost.report.3588", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l1" + } + }, + { + "id": "pub.1141370501", + "attributes": { + "title": "Constant of Motion Identifying Excited-State Quantum Phases", + "doi": "10.1103/physrevlett.127.130602", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1141139712", + "attributes": { + "title": "Signatures of excited-state quantum phase transitions in quantum many-body systems: Phase space analysis", + "doi": "10.1103/physreve.104.034119", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1144432008", + "attributes": { + "title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", + "doi": "10.21468/scipost.report.3198", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l1" + } + }, + { + "id": "pub.1138795800", + "attributes": { + "title": "Interferometric Order Parameter for Excited-State Quantum Phase Transitions in Bose-Einstein Condensates", + "doi": "10.1103/physrevlett.126.230602", + "nodeyear": 2021, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1138581779", + "attributes": { + "title": "Continuum analogs of excited-state quantum phase transitions", + "doi": "10.1103/physreva.103.062207", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1144435924", + "attributes": { + "title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", + "doi": "10.21468/scipost.report.2932", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l1" + } + }, + { + "id": "pub.1136498164", + "attributes": { + "title": "Emergence of a Renormalized 1/N Expansion in Quenched Critical Many-Body Systems", + "doi": "10.1103/physrevlett.126.110602", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1134894421", + "attributes": { + "title": "Excited-state quantum phase transitions", + "doi": "10.1088/1751-8121/abdfe8", + "nodeyear": 2021, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1136299609", + "attributes": { + "title": "Characterizing the Lipkin-Meshkov-Glick model excited-state quantum phase transition using dynamical and statistical properties of the diagonal entropy", + "doi": "10.1103/physreve.103.032109", + "nodeyear": 2021, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1132677751", + "attributes": { + "title": "Excited state quantum phase transitions in the bending spectra of molecules", + "doi": "10.1016/j.jqsrt.2020.107436", + "nodeyear": 2021, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1129534483", + "attributes": { + "title": "Out-of-equilibrium phase transitions induced by Floquet resonances in a periodically quench-driven XY spin chain", + "doi": "10.21468/scipostphyscore.3.1.001", + "nodeyear": 2020, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1129066525", + "attributes": { + "title": "Complex Density of Continuum States in Resonant Quantum Tunneling", + "doi": "10.1103/physrevlett.125.020401", + "nodeyear": 2020, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "cite_l1" + } + }, + { + "id": "pub.1126263310", + "attributes": { + "title": "Classical and Quantum Signatures of Quantum Phase Transitions in a (Pseudo) Relativistic Many-Body System", + "doi": "10.3390/condmat5020026", + "nodeyear": 2020, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1121827528", + "attributes": { + "title": "Reversible Quantum Information Spreading in Many-Body Systems near Criticality", + "doi": "10.1103/physrevlett.123.160401", + "nodeyear": 2019, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1120642228", + "attributes": { + "title": "Manipulating transition of a two-component Bose\u2013Einstein condensate with a weak \u03b4-shaped laser*", + "doi": "10.1088/1674-1056/ab3e64", + "nodeyear": 2019, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1121123255", + "attributes": { + "title": "Digital quantum simulation, Trotter errors, and quantum chaos of the kicked top", + "doi": "10.1038/s41534-019-0192-5", + "nodeyear": 2019, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1120846773", + "attributes": { + "title": "Static vs. dynamic phases of quantum many-body systems", + "doi": "10.1063/1.5124589", + "nodeyear": 2019, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l1" + } + }, + { + "id": "pub.1120342145", + "attributes": { + "title": "Excited-state quantum phase transition and the quantum-speed-limit time", + "doi": "10.1103/physreva.100.022118", + "nodeyear": 2019, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1117411673", + "attributes": { + "title": "Excited-state quantum phase transitions in systems with two degrees of freedom. III. Interacting boson systems", + "doi": "10.1103/physrevc.99.064323", + "nodeyear": 2019, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1107951663", + "attributes": { + "title": "Floquet analysis of a fractal-spectrum-generating periodically driven quantum system", + "doi": "10.1103/physreve.98.042217", + "nodeyear": 2018, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1105752007", + "attributes": { + "title": "Quantum quench dynamics in Dicke superradiance models", + "doi": "10.1103/physreva.98.013836", + "nodeyear": 2018, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1099619049", + "attributes": { + "title": "Excited-state quantum phase transitions and their manifestations in an extended Dicke model", + "doi": "10.1063/1.5016143", + "nodeyear": 2017, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1092024589", + "attributes": { + "title": "Probing the excited-state quantum phase transition through statistics of Loschmidt echo and quantum work", + "doi": "10.1103/physreve.96.032142", + "nodeyear": 2017, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1090980852", + "attributes": { + "title": "Nonadiabatic dynamics of the excited states for the Lipkin-Meshkov-Glick model", + "doi": "10.1103/physreve.96.012153", + "nodeyear": 2017, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1090697089", + "attributes": { + "title": "From thermal to excited-state quantum phase transition: The Dicke model", + "doi": "10.1103/physreve.96.012121", + "nodeyear": 2017, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1085593414", + "attributes": { + "title": "Adiabatic perturbation theory and geometry of periodically-driven systems", + "doi": "10.1016/j.physrep.2017.05.003", + "nodeyear": 2017, + "ref-by-count": 68, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1059133328", + "attributes": { + "title": "Catastrophes in non-equilibrium many-particle wave functions: universality and critical scaling", + "doi": "10.1088/1361-6455/aa56af", + "nodeyear": 2017, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:0.60;03:0.40", + "level": "cite_l1" + } + }, + { + "id": "pub.1048482410", + "attributes": { + "title": "Dynamics and Characterization of Composite Quantum Systems", + "doi": "10.1007/978-3-319-44459-8", + "nodeyear": 2017, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1060766918", + "attributes": { + "title": "Driven Open Quantum Systems and Floquet Stroboscopic Dynamics", + "doi": "10.1103/physrevlett.117.250401", + "nodeyear": 2016, + "ref-by-count": 42, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1060750764", + "attributes": { + "title": "Excited-state quantum phase transitions in the two-spin elliptic Gaudin model", + "doi": "10.1103/physreve.94.052110", + "nodeyear": 2016, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1060516500", + "attributes": { + "title": "Excited-state quantum phase transition in the Rabi model", + "doi": "10.1103/physreva.94.023835", + "nodeyear": 2016, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1059005118", + "attributes": { + "title": "Quantum phase transitions in the collective degrees of freedom: nuclei and other many-body systems", + "doi": "10.1088/0031-8949/91/8/083006", + "nodeyear": 2016, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l1" + } + }, + { + "id": "pub.1060516111", + "attributes": { + "title": "Excited-state quantum phase transitions in many-body systems with infinite-range interaction: Localization, dynamics, and bifurcation", + "doi": "10.1103/physreva.94.012113", + "nodeyear": 2016, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1060680986", + "attributes": { + "title": "Excited-state quantum phase transitions in the interacting boson model: Spectral characteristics of 0+ states and effective order parameter", + "doi": "10.1103/physrevc.93.044302", + "nodeyear": 2016, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1060649865", + "attributes": { + "title": "Semiclassical excited-state signatures of quantum phase transitions in spin chains with variable-range interactions", + "doi": "10.1103/physrevb.93.155153", + "nodeyear": 2016, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1060514338", + "attributes": { + "title": "Structure of eigenstates and quench dynamics at an excited-state quantum phase transition", + "doi": "10.1103/physreva.92.050101", + "nodeyear": 2015, + "ref-by-count": 52, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1059004548", + "attributes": { + "title": "Excited-state quantum phase transitions in finite many-body systems", + "doi": "10.1088/0031-8949/90/11/114015", + "nodeyear": 2015, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l1" + } + }, + { + "id": "pub.1059136608", + "attributes": { + "title": "Time delayed control of excited state quantum phase transitions in the Lipkin\u2013Meshkov\u2013Glick model", + "doi": "10.1088/1367-2630/17/10/103031", + "nodeyear": 2015, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1010705109", + "attributes": { + "title": "Effective time-independent analysis for quantum kicked systems", + "doi": "10.1103/physreve.91.032923", + "nodeyear": 2015, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1032825147", + "attributes": { + "title": "Universal high-frequency behavior of periodically driven systems: from dynamical stabilization to Floquet engineering", + "doi": "10.1080/00018732.2015.1055918", + "nodeyear": 2015, + "ref-by-count": 574, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1036861519", + "attributes": { + "title": "Excited-state quantum phase transitions and periodic dynamics", + "doi": "10.1103/physreva.91.013631", + "nodeyear": 2015, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1039964510", + "attributes": { + "title": "Critical quasienergy states in driven many-body systems", + "doi": "10.1103/physreva.90.063628", + "nodeyear": 2014, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1003966050", + "attributes": { + "title": "Quantum phase transitions of atom-molecule Bose mixtures in a double-well potential", + "doi": "10.1103/physreve.90.042139", + "nodeyear": 2014, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1060512752", + "attributes": { + "title": "Nonlinear spectroscopy of trapped ions", + "doi": "10.1103/physreva.90.023603", + "nodeyear": 2014, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1145750437", + "attributes": { + "title": "Algebraic vibrational description of the symmetric isotopologues of CO2: 13 C 16 O2, 12 C 18 O2 and 12 C 17 O2", + "doi": "10.1016/j.chemphys.2022.111481", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1146014202", + "attributes": { + "title": "Dynamical relaxation of correlators in periodically driven integrable quantum systems", + "doi": "10.1103/physrevb.105.104303", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1145897843", + "attributes": { + "title": "Periodically driven perturbed CFTs: The sine-Gordon model", + "doi": "10.1016/j.nuclphysb.2022.115717", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:0.60;01:0.40", + "level": "cite_l2" + } + }, + { + "id": "pub.1145440026", + "attributes": { + "title": "Effective Gaps in Continuous Floquet Hamiltonians", + "doi": "10.1137/21m1417363", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145430770", + "attributes": { + "title": "Arnoldi-Lindblad time evolution: Faster-than-the-clock algorithm for the spectrum of time-independent and Floquet open quantum systems", + "doi": "10.22331/q-2022-02-10-649", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145506720", + "attributes": { + "title": "Identification of quantum scars via phase-space localization measures", + "doi": "10.22331/q-2022-02-08-644", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145372424", + "attributes": { + "title": "Bicircular Light Floquet Engineering of Magnetic Symmetry and Topology and Its Application to the Dirac Semimetal Cd3As2", + "doi": "10.1103/physrevlett.128.066602", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145280638", + "attributes": { + "title": "Heating Rates under Fast Periodic Driving beyond Linear Response", + "doi": "10.1103/physrevlett.128.050604", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145273436", + "attributes": { + "title": "Observation of Photonic Topological Floquet Time Crystals", + "doi": "10.1002/lpor.202100469", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145213934", + "attributes": { + "title": "Dissipative Floquet Dynamics: from Steady State to Measurement Induced Criticality in Trapped-ion Chains", + "doi": "10.22331/q-2022-02-02-638", + "nodeyear": 2022, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145849886", + "attributes": { + "title": "Inverted many-body mobility edge in a central qudit problem", + "doi": "10.1103/physrevb.105.l060303", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145849842", + "attributes": { + "title": "PT phase transition in open quantum systems with Lindblad dynamics", + "doi": "10.1103/physreva.105.022219", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145823845", + "attributes": { + "title": "Comparing the influence of Floquet dynamics in various Kitaev-Heisenberg materials", + "doi": "10.1103/physrevb.105.085144", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145788811", + "attributes": { + "title": "Harmonic dual dressing of spin-1/2 systems", + "doi": "10.1103/physreva.105.022619", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145754902", + "attributes": { + "title": "Stroboscopic Hamiltonian engineering in the low-frequency regime with a one-dimensional quantum processor", + "doi": "10.1103/physrevb.105.075140", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145754886", + "attributes": { + "title": "Driven Hubbard model on a triangular lattice: Tunable Heisenberg antiferromagnet with a chiral three-spin term", + "doi": "10.1103/physrevb.105.054423", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145754849", + "attributes": { + "title": "Relativistic meson spectra on ion-trap quantum simulators", + "doi": "10.1103/physreva.105.022616", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145754842", + "attributes": { + "title": "Dynamical localization in non-Hermitian quasicrystals", + "doi": "10.1103/physreva.105.022215", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145668053", + "attributes": { + "title": "Drive-induced nonlinearities of cavity modes coupled to a transmon ancilla", + "doi": "10.1103/physreva.105.022423", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145636450", + "attributes": { + "title": "Crosstalk analysis for simultaneously driven two-qubit gates in spin qubit arrays", + "doi": "10.1103/physrevb.105.085414", + "nodeyear": 2022, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145438375", + "attributes": { + "title": "Caustics in quantum many-body dynamics", + "doi": "10.1103/physrevresearch.4.013105", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145407409", + "attributes": { + "title": "Fermionic Chern insulator from twisted light with linear polarization", + "doi": "10.1103/physrevb.105.l081406", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145168134", + "attributes": { + "title": "Weyl nodes with higher-order topology in an optically driven nodal-line semimetal", + "doi": "10.1103/physrevb.105.l081102", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144652253", + "attributes": { + "title": "Chaos in a deformed Dicke model", + "doi": "10.1088/1751-8121/ac4b16", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145404710", + "attributes": { + "title": "Topological d -wave superconductivity in two dimensions", + "doi": "10.1016/j.physe.2022.115143", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145130056", + "attributes": { + "title": "Quantum transitions, ergodicity, and quantum scars in the coupled top model", + "doi": "10.1103/physreve.105.014130", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144504433", + "attributes": { + "title": "Floquet band engineering and topological phase transitions in 1T\u2019 transition metal dichalcogenides", + "doi": "10.1088/2053-1583/ac4957", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145011775", + "attributes": { + "title": "Strain and pseudo-magnetic fields in optical lattices from density-assisted tunneling", + "doi": "10.1038/s42005-022-00802-9", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145032383", + "attributes": { + "title": "The Classical\u2013Quantum Passage: A van der Waals Description", + "doi": "10.3390/e24020182", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144661259", + "attributes": { + "title": "Out-of-equilibrium dynamics of the XY spin chain from form factor expansion", + "doi": "10.21468/scipostphys.12.1.019", + "nodeyear": 2022, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1144431665", + "attributes": { + "title": "Crystallization of bosonic quantum Hall states in a rotating quantum gas", + "doi": "10.1038/s41586-021-04170-2", + "nodeyear": 2022, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144412825", + "attributes": { + "title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", + "doi": "10.21468/scipostphys.12.1.002", + "nodeyear": 2022, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1146014238", + "attributes": { + "title": "Absence of Heating in a Uniform Fermi Gas Created by Periodic Driving", + "doi": "10.1103/physrevx.12.011041", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145130013", + "attributes": { + "title": "Generalized model for the charge transport properties of dressed quantum Hall systems", + "doi": "10.1103/physrevb.105.035430", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145077099", + "attributes": { + "title": "Detecting light-induced Floquet band gaps of graphene via trARPES", + "doi": "10.1103/physrevresearch.4.013057", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145077057", + "attributes": { + "title": "Demonstrating Majorana non-Abelian properties using fast adiabatic charge transfer", + "doi": "10.1103/physrevb.105.045425", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145042826", + "attributes": { + "title": "Probing Many-Body Quantum Chaos with Quantum Simulators", + "doi": "10.1103/physrevx.12.011018", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145016796", + "attributes": { + "title": "Topological micromotion of Floquet quantum systems", + "doi": "10.1103/physrevb.105.045139", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1144825837", + "attributes": { + "title": "Information retrieval and eigenstate coalescence in a non-Hermitian quantum system with anti-PT symmetry", + "doi": "10.1103/physreva.105.l010204", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144625101", + "attributes": { + "title": "Enhancing energy transfer in quantum systems via periodic driving: Floquet master equations", + "doi": "10.1103/physreva.105.012208", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144504676", + "attributes": { + "title": "Analytic expression for the optical exciton transition rates in the polaron frame", + "doi": "10.1103/physrevb.105.014302", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144370522", + "attributes": { + "title": "Signatures of multifractality in a periodically driven interacting Aubry-Andr\u00e9 model", + "doi": "10.1103/physrevb.105.024301", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1144370491", + "attributes": { + "title": "Flow-equation approach to quantum systems driven by an amplitude-modulated time-periodic force", + "doi": "10.1103/physreva.105.012203", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1145001907", + "attributes": { + "title": "Nature", + "doi": "10.1038/nde/00280836/2022/601/7894", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1144437688", + "attributes": { + "title": "Nature", + "doi": "10.1038/nde/00280836/2022/601/7891", + "nodeyear": 2022, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1143938533", + "attributes": { + "title": "Assessment of weak-coupling approximations on a driven two-level system under dissipation", + "doi": "10.1088/1367-2630/ac43ee", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144267107", + "attributes": { + "title": "Quantum Simulation of Open Quantum Systems Using a Unitary Decomposition of Operators", + "doi": "10.1103/physrevlett.127.270503", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144237217", + "attributes": { + "title": "Localization and spin dynamics of spin-orbit-coupled Bose-Einstein condensates in deep optical lattices", + "doi": "10.1103/physreve.104.064215", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144210477", + "attributes": { + "title": "Impact of chaos on precursors of quantum criticality", + "doi": "10.1103/physreve.104.l062202", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144176750", + "attributes": { + "title": "Nonequilibrium steady states in the Floquet-Lindblad systems: van Vleck's high-frequency expansion approach", + "doi": "10.21468/scipostphyscore.4.4.033", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1144500315", + "attributes": { + "title": "Quantum dynamics research in India: a perspective", + "doi": "10.1088/1361-648x/ac410a", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144112210", + "attributes": { + "title": "Quantum Fisher Information from Randomized Measurements", + "doi": "10.1103/physrevlett.127.260501", + "nodeyear": 2021, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144057503", + "attributes": { + "title": "Energy diffusion and prethermalization in chaotic billiards under rapid periodic driving", + "doi": "10.1103/physreve.104.064210", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1143844860", + "attributes": { + "title": "Avoided crossings and dynamical tunneling close to excited-state quantum phase transitions", + "doi": "10.1103/physreve.104.064116", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1143777724", + "attributes": { + "title": "Gravitational caustics in an atom laser", + "doi": "10.1038/s41467-021-27555-3", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1143745319", + "attributes": { + "title": "Dynamic synthesis of Heisenberg-limited spin squeezing", + "doi": "10.1038/s41534-021-00505-z", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1143725448", + "attributes": { + "title": "Quantum thermal machines and batteries", + "doi": "10.1140/epjb/s10051-021-00235-3", + "nodeyear": 2021, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144210501", + "attributes": { + "title": "Excited-state quantum phase transitions in spin-orbit-coupled Bose gases", + "doi": "10.1103/physrevresearch.3.043215", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144115960", + "attributes": { + "title": "Bound state dynamics in the long-range spin-12 XXZ model", + "doi": "10.1103/physrevb.104.214309", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144115499", + "attributes": { + "title": "Direct driving of electronic and phononic degrees of freedom in a honeycomb bilayer with infrared light", + "doi": "10.1103/physrevb.104.245135", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1143939848", + "attributes": { + "title": "Frequency dependence of the light-induced Hall effect in dissipative graphene", + "doi": "10.1103/physrevb.104.224305", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1143844418", + "attributes": { + "title": "Engineering of topological phases in driven thin topological insulators: Structure inversion asymmetry effect", + "doi": "10.1103/physrevb.104.245121", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1143724565", + "attributes": { + "title": "Polarization-dependent magnetic properties of periodically driven \u03b1-RuCl3", + "doi": "10.1103/physrevb.104.214413", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1136420764", + "attributes": { + "title": "Low-frequency and Moir\u00e9 Floquet engineering: A review", + "doi": "10.1016/j.aop.2021.168434", + "nodeyear": 2021, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1143455107", + "attributes": { + "title": "Time-crystalline eigenstate order on a quantum processor", + "doi": "10.1038/s41586-021-04257-w", + "nodeyear": 2021, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1142733768", + "attributes": { + "title": "A thermodynamic probe of the topological phase transition in epitaxial graphene based Floquet topological insulator", + "doi": "10.1063/5.0071224", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1143320265", + "attributes": { + "title": "Instability of holographic superfluids in optical lattice", + "doi": "10.1007/jhep11(2021)190", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1142441911", + "attributes": { + "title": "Light-induced emergent phenomena in 2D materials and topological materials", + "doi": "10.1038/s42254-021-00388-1", + "nodeyear": 2021, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1142441613", + "attributes": { + "title": "Dynamical obstruction to localization in a disordered spin chain", + "doi": "10.1103/physreve.104.054105", + "nodeyear": 2021, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1142424779", + "attributes": { + "title": "Long Time Behaviour of a Local Perturbation in the Isotropic XY Chain Under Periodic Forcing", + "doi": "10.1007/s00023-021-01128-y", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1143466025", + "attributes": { + "title": "Stabilization of product states and excited-state quantum phase transitions in a coupled qubit-field system", + "doi": "10.1103/physreva.104.053722", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1143042212", + "attributes": { + "title": "Coarse-graining master equation for periodically driven systems", + "doi": "10.1103/physreva.104.052219", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1142911413", + "attributes": { + "title": "Floquet engineering and nonequilibrium topological maps in twisted trilayer graphene", + "doi": "10.1103/physrevb.104.195429", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1142728786", + "attributes": { + "title": "Time-domain Landau-Zener-St\u00fcckelberg-Majorana interference in an optical lattice clock", + "doi": "10.1103/physreva.104.053318", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1142661877", + "attributes": { + "title": "Light-induced electron pairing in two-dimensional systems", + "doi": "10.1088/1742-6596/2015/1/012062", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1142589015", + "attributes": { + "title": "Floquet graphene antidot lattices", + "doi": "10.1103/physrevb.104.174304", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1142577463", + "attributes": { + "title": "Production of 87Rb Bose-Einstein Condensate in an Asymmetric Crossed Optical Dipole TrapSupported by the Key-Area Research and Development Program of Guangdong Province, China (Grant No. 2019B030330001), the National Natural Science Foundation of China (Grant Nos. 12025509 and 11874434), the Science and Technology Program of Guangzhou, China (Grant Nos. 201904020024 and 201804010497), the Natural Science Foundation of Guangdong Province, China (Grant No. 2018A030313988), and the Fundamental Research Funds for the Central Universities (Grant No. 2021qntd28).", + "doi": "10.1088/0256-307x/38/10/103701", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1142435873", + "attributes": { + "title": "Success of digital adiabatic simulation with large Trotter step", + "doi": "10.1103/physreva.104.052603", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1142330688", + "attributes": { + "title": "Two-level systems with periodic N-step driving fields: Exact dynamics and quantum state manipulations", + "doi": "10.1103/physreva.104.053101", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140972911", + "attributes": { + "title": "Coherent and dissipative dynamics at quantum phase transitions", + "doi": "10.1016/j.physrep.2021.08.003", + "nodeyear": 2021, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1139312982", + "attributes": { + "title": "Quantum phase transitions in algebraic and collective models of nuclear structure", + "doi": "10.1016/j.ppnp.2021.103891", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1143151380", + "attributes": { + "title": "Electrodynamics of Topologically Ordered Quantum Phases in Dirac Materials", + "doi": "10.3390/nano11112914", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "09:0.50;10:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1141523252", + "attributes": { + "title": "Floquet engineering of electric polarization with two-frequency drive", + "doi": "10.1093/ptep/ptab127", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1142019154", + "attributes": { + "title": "Floquet Prethermalization with Lifetime Exceeding 90 s in a Bulk Hyperpolarized Solid", + "doi": "10.1103/physrevlett.127.170603", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141572181", + "attributes": { + "title": "Optically induced hybrid Bose-Fermi system in quantum wells with different charge carriers.", + "doi": "10.1364/ol.431079", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1142000959", + "attributes": { + "title": "Quantum-classical correspondence of a system of interacting bosons in a triple-well potential", + "doi": "10.22331/q-2021-10-19-563", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141928574", + "attributes": { + "title": "Multifractality in Quasienergy Space of Coherent States as a Signature of Quantum Chaos", + "doi": "10.3390/e23101347", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141852620", + "attributes": { + "title": "Quasiperiodic Floquet-Thouless Energy Pump", + "doi": "10.1103/physrevlett.127.166804", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141763682", + "attributes": { + "title": "Quantum Speed Limit Time of a Two-Level Atom under Homodyne-Mediated Feedback and Classical Driving", + "doi": "10.1007/s10773-021-04964-0", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144433670", + "attributes": { + "title": "Nonequilibrium steady states in the Floquet-Lindblad systems: van Vleck's high-frequency expansion approach", + "doi": "10.21468/scipost.report.3630", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1141641422", + "attributes": { + "title": "Quantum simulation of cosmic inflation", + "doi": "10.1103/physrevd.104.086013", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141277687", + "attributes": { + "title": "Optically induced Kondo effect in semiconductor quantum wells", + "doi": "10.1088/1361-648x/ac28c2", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1142252018", + "attributes": { + "title": "Ladder of Loschmidt anomalies in the deep strong-coupling regime of a qubit-oscillator system", + "doi": "10.1103/physreva.104.043712", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1142248564", + "attributes": { + "title": "Spin-wave growth via Shapiro resonances in a spinor Bose-Einstein condensate", + "doi": "10.1103/physrevresearch.3.043090", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141918917", + "attributes": { + "title": "High-frequency expansions for time-periodic Lindblad generators", + "doi": "10.1103/physrevb.104.165414", + "nodeyear": 2021, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141918911", + "attributes": { + "title": "Fermi's golden rule for heating in strongly driven Floquet systems", + "doi": "10.1103/physrevb.104.134308", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141886712", + "attributes": { + "title": "Colloquium: Nonthermal pathways to ultrafast control in quantum materials", + "doi": "10.1103/revmodphys.93.041002", + "nodeyear": 2021, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141886629", + "attributes": { + "title": "False signals of chaos from quantum probes", + "doi": "10.1103/physreva.104.043308", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141793655", + "attributes": { + "title": "Non-Abelian statistics in light-scattering processes across interacting Haldane chains", + "doi": "10.1103/physrevb.104.165118", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141423415", + "attributes": { + "title": "Optimal building block of multipartite quantum battery in the driven-dissipative charging", + "doi": "10.1088/1367-2630/ac2a5b", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144437177", + "attributes": { + "title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", + "doi": "10.21468/scipost.report.3588", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1141424092", + "attributes": { + "title": "Floquet Phases of Matter via Classical Prethermalization", + "doi": "10.1103/physrevlett.127.140603", + "nodeyear": 2021, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141081318", + "attributes": { + "title": "Global quantum discord in the Lipkin\u2013Meshkov\u2013Glick model at zero and finite temperatures", + "doi": "10.1088/1361-648x/ac2647", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141370501", + "attributes": { + "title": "Constant of Motion Identifying Excited-State Quantum Phases", + "doi": "10.1103/physrevlett.127.130602", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141198298", + "attributes": { + "title": "Bulk Photovoltaic Effect Driven by Collective Excitations in a Correlated Insulator", + "doi": "10.1103/physrevlett.127.127402", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141139712", + "attributes": { + "title": "Signatures of excited-state quantum phase transitions in quantum many-body systems: Phase space analysis", + "doi": "10.1103/physreve.104.034119", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141117728", + "attributes": { + "title": "Floquet Theory of Photoinduced Topological Phase Transitions in the Organic Salt \u03b1-(BEDT-TTF)2I3 Irradiated with Elliptically Polarized Light", + "doi": "10.7566/jpsj.90.104705", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1141039563", + "attributes": { + "title": "Optical Indistinguishability via Twinning Fields", + "doi": "10.1103/physrevlett.127.113201", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141039539", + "attributes": { + "title": "Thermalization processes induced by quantum monitoring in multilevel systems", + "doi": "10.1103/physreve.104.034114", + "nodeyear": 2021, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141007405", + "attributes": { + "title": "Reinforcement Learning for Digital Quantum Simulation", + "doi": "10.1103/physrevlett.127.110502", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140992787", + "attributes": { + "title": "Floquet prethermalization and Rabi oscillations in optically excited Hubbard clusters", + "doi": "10.1038/s41598-021-97104-x", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140946090", + "attributes": { + "title": "Fast driven quantum systems: interaction picture and boundary conditions", + "doi": "10.1088/1402-4896/ac2184", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140903868", + "attributes": { + "title": "Electronic Floquet gyro-liquid crystal", + "doi": "10.1038/s41467-021-25511-9", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144436951", + "attributes": { + "title": "Nonequilibrium steady states in the Floquet-Lindblad systems: van Vleck's high-frequency expansion approach", + "doi": "10.21468/scipost.report.3482", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1141458068", + "attributes": { + "title": "Floquet vacuum engineering: Laser-driven chiral soliton lattice in the QCD vacuum", + "doi": "10.1103/physrevd.104.054041", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141330553", + "attributes": { + "title": "Using optical conductivity to detect the underlying metallic edge state in the interacting Haldane model", + "doi": "10.1103/physrevb.104.115146", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141330548", + "attributes": { + "title": "Dynamical preparation of stripe states in spin-orbit-coupled gases", + "doi": "10.1103/physreva.104.l031305", + "nodeyear": 2021, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141082269", + "attributes": { + "title": "Emergent eigenstate solution for generalized thermalization", + "doi": "10.1103/physreva.104.l031303", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141082265", + "attributes": { + "title": "Impurity-induced quantum chaos for an ultracold bosonic ensemble in a double well", + "doi": "10.1103/physreva.104.033315", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140946998", + "attributes": { + "title": "Decoherence-free radio-frequency-dressed subspaces", + "doi": "10.1103/physreva.104.033307", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140875048", + "attributes": { + "title": "Direct and ultrafast probing of quantum many-body interactions through coherent two-dimensional spectroscopy: From weak- to strong-interaction regimes", + "doi": "10.1103/physrevb.104.115105", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140813822", + "attributes": { + "title": "Nonadiabatic evolution and thermodynamics of a time-dependent open quantum system", + "doi": "10.1103/physreva.104.032201", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1139687004", + "attributes": { + "title": "Ergodicity breaking in an incommensurate system observed by OTOCs and loschmidt echoes: From quantum diffusion to sub-diffusion", + "doi": "10.1016/j.chaos.2021.111175", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "08:0.33;01:0.33;09:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1140631120", + "attributes": { + "title": "Statistical Floquet prethermalization of the Bose-Hubbard model", + "doi": "10.21468/scipostphys.11.2.040", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1140376339", + "attributes": { + "title": "Tailoring quantum gases by Floquet engineering", + "doi": "10.1038/s41567-021-01316-x", + "nodeyear": 2021, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140327645", + "attributes": { + "title": "Flow equations for disordered Floquet systems", + "doi": "10.21468/scipostphys.11.2.028", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1140210127", + "attributes": { + "title": "Anomalous photo-thermal effects in multi-layered semi-Dirac black phosphorus", + "doi": "10.1063/5.0056116", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140251168", + "attributes": { + "title": "Analytic approaches to periodically driven closed quantum systems: methods and applications", + "doi": "10.1088/1361-648x/ac1b61", + "nodeyear": 2021, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:0.33;09:0.33;10:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1140149233", + "attributes": { + "title": "Polynomial filter diagonalization of large Floquet unitary operators", + "doi": "10.21468/scipostphys.11.2.021", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1140780393", + "attributes": { + "title": "Dynamics of fluctuation correlation in a periodically driven classical system", + "doi": "10.1103/physrevb.104.075161", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140748154", + "attributes": { + "title": "Identifying and harnessing dynamical phase transitions for quantum-enhanced sensing", + "doi": "10.1103/physrevresearch.3.033199", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140595261", + "attributes": { + "title": "Floquet engineering of topological localization transitions and mobility edges in one-dimensional non-Hermitian quasicrystals", + "doi": "10.1103/physrevresearch.3.033184", + "nodeyear": 2021, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140595176", + "attributes": { + "title": "Criticality-enhanced quantum sensor at finite temperature", + "doi": "10.1103/physreva.104.022612", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140449264", + "attributes": { + "title": "Light-matter coupling and quantum geometry in moir\u00e9 materials", + "doi": "10.1103/physrevb.104.064306", + "nodeyear": 2021, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140411348", + "attributes": { + "title": "Real-time dynamics of the photoinduced topological state in the organic conductor \u03b1-(BEDT-TTF)2I3 under continuous-wave and pulse excitations", + "doi": "10.1103/physrevb.104.085123", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140385244", + "attributes": { + "title": "Effect of chaos on the simulation of quantum critical phenomena in analog quantum simulators", + "doi": "10.1103/physrevresearch.3.033145", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140343664", + "attributes": { + "title": "Flow Equations for Disordered Floquet Systems", + "doi": "10.21468/scipost.report.3287", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1139432247", + "attributes": { + "title": "Driven quantum many-body systems and out-of-equilibrium topology.", + "doi": "10.1088/1361-648x/ac1151", + "nodeyear": 2021, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:0.33;09:0.33;10:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1139715974", + "attributes": { + "title": "The Renewed Role of Sweep Functions in Noisy Shortcuts to Adiabaticity", + "doi": "10.3390/e23070897", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1139696368", + "attributes": { + "title": "Novel characterization of dopant-based qubits", + "doi": "10.1557/s43577-021-00136-x", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "09:0.60;03:0.40", + "level": "cite_l2" + } + }, + { + "id": "pub.1139686944", + "attributes": { + "title": "Riemann zeros from Floquet engineering a trapped-ion qubit", + "doi": "10.1038/s41534-021-00446-7", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1137941137", + "attributes": { + "title": "Unsupervised machine learning of topological phase transitions from experimental data", + "doi": "10.1088/2632-2153/abffe7", + "nodeyear": 2021, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144432008", + "attributes": { + "title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", + "doi": "10.21468/scipost.report.3198", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1139359212", + "attributes": { + "title": "Non-Markovian Speedup Dynamics in Markovian and Non-Markovian Channels", + "doi": "10.1007/s10773-021-04885-y", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1141244634", + "attributes": { + "title": "Signatures of Quantum Phase Transitions after Quenches in Quantum Chaotic One-Dimensional Systems", + "doi": "10.1103/physrevx.11.031062", + "nodeyear": 2021, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140043181", + "attributes": { + "title": "Nonlinear optical processes in cavity light-matter systems", + "doi": "10.1103/physrevb.104.035209", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1139809449", + "attributes": { + "title": "Crosstalk analysis for single-qubit and two-qubit gates in spin qubit arrays", + "doi": "10.1103/physrevb.104.045420", + "nodeyear": 2021, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1139809443", + "attributes": { + "title": "From nonequilibrium Green's functions to quantum master equations for the density matrix and out-of-time-order correlators: Steady-state and adiabatic dynamics", + "doi": "10.1103/physrevb.104.035425", + "nodeyear": 2021, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1139801116", + "attributes": { + "title": "Control of superexchange interactions with DC electric fields", + "doi": "10.1103/physrevresearch.3.033066", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1139365607", + "attributes": { + "title": "Error-resilient Floquet geometric quantum computation", + "doi": "10.1103/physrevresearch.3.033010", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1139320696", + "attributes": { + "title": "Rabi Spectroscopy and Sensitivity of a Floquet Engineered Optical Lattice Clock", + "doi": "10.1088/0256-307x/38/7/073201", + "nodeyear": 2021, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1139210985", + "attributes": { + "title": "Gauge\u2010Induced Floquet Topological States in Photonic Waveguides", + "doi": "10.1002/lpor.202000584", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1139155188", + "attributes": { + "title": "Oscillating states of periodically driven anharmonic Langevin systems", + "doi": "10.1103/physreve.103.062143", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1139098613", + "attributes": { + "title": "Quantum Simulation of Three-Body Interactions in Weakly Driven Quantum Systems", + "doi": "10.1103/physrevlett.126.250504", + "nodeyear": 2021, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1138795800", + "attributes": { + "title": "Interferometric Order Parameter for Excited-State Quantum Phase Transitions in Bose-Einstein Condensates", + "doi": "10.1103/physrevlett.126.230602", + "nodeyear": 2021, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1138695988", + "attributes": { + "title": "Simulating Hydrodynamics on Noisy Intermediate-Scale Quantum Devices with Random Circuits", + "doi": "10.1103/physrevlett.126.230501", + "nodeyear": 2021, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1139212437", + "attributes": { + "title": "Floquet engineering ultracold polar molecules to simulate topological insulators", + "doi": "10.1103/physreva.103.063322", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1138955510", + "attributes": { + "title": "Quantum coherence as a signature of chaos", + "doi": "10.1103/physrevresearch.3.023214", + "nodeyear": 2021, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1138886959", + "attributes": { + "title": "Information scrambling and chaos in open quantum systems", + "doi": "10.1103/physreva.103.062214", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1138581779", + "attributes": { + "title": "Continuum analogs of excited-state quantum phase transitions", + "doi": "10.1103/physreva.103.062207", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1137877758", + "attributes": { + "title": "Avoided level crossings in quasi-exact approach", + "doi": "10.1016/j.nuclphysb.2021.115431", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1138289216", + "attributes": { + "title": "Topological Hall Effects of Magnons in Ferrimagnets", + "doi": "10.7566/jpsj.90.081004", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1141651369", + "attributes": { + "title": "One-Way Edge Modes Induced by Synthetic Magnetic Field in Time-Varying LC Circuit", + "doi": "10.1109/icee52715.2021.9544271", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1138216900", + "attributes": { + "title": "Conformal Floquet dynamics with a continuous drive protocol", + "doi": "10.1007/jhep05(2021)172", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1138186330", + "attributes": { + "title": "Quantum localization measures in phase space", + "doi": "10.1103/physreve.103.052214", + "nodeyear": 2021, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144435924", + "attributes": { + "title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", + "doi": "10.21468/scipost.report.2932", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1138114367", + "attributes": { + "title": "Nonlinear dynamics and quantum chaos of a family of kicked p-spin models", + "doi": "10.1103/physreve.103.052212", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1138249357", + "attributes": { + "title": "Mobility edge and multifractality in a periodically driven Aubry-Andr\u00e9 model", + "doi": "10.1103/physrevb.103.184309", + "nodeyear": 2021, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1138186281", + "attributes": { + "title": "Valley-selective Floquet Chern flat bands in twisted multilayer graphene", + "doi": "10.1103/physrevb.103.195146", + "nodeyear": 2021, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1138114325", + "attributes": { + "title": "Light-induced topological phases in thin films of magnetically doped topological insulators", + "doi": "10.1103/physrevb.103.205130", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1137890988", + "attributes": { + "title": "Quantum geometric tensor and quantum phase transitions in the Lipkin-Meshkov-Glick model", + "doi": "10.1103/physrevb.103.174104", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1137773392", + "attributes": { + "title": "Quantizing L\u00e9vy flights", + "doi": "10.1103/physrevb.103.174301", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1134453264", + "attributes": { + "title": "Effective Hamiltonian of the Jaynes\u2013Cummings model beyond rotating-wave approximation*", + "doi": "10.1088/1674-1056/abd930", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1137261348", + "attributes": { + "title": "Out-of-time-ordered correlators and the Loschmidt echo in the quantum kicked top: how low can we go?", + "doi": "10.1088/1361-6463/abf8f3", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1137484959", + "attributes": { + "title": "Low rank compression in the numerical solution of the nonequilibrium Dyson equation", + "doi": "10.21468/scipostphys.10.4.091", + "nodeyear": 2021, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1137437656", + "attributes": { + "title": "Isocyanic acid (HNCO) in the hot molecular core G331.512-0.103: observations and chemical modelling", + "doi": "10.1093/mnras/stab1163", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1136592478", + "attributes": { + "title": "Out of equilibrium chiral higher order topological insulator on a \u03c0 -flux square lattice", + "doi": "10.1088/1361-648x/abf0c3", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:0.33;09:0.33;10:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1137167395", + "attributes": { + "title": "Mechanism of periodic field driven self-assembly process", + "doi": "10.1063/5.0048072", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1137494538", + "attributes": { + "title": "Prethermalization and thermalization in periodically driven many-body systems away from the high-frequency limit", + "doi": "10.1103/physrevb.103.l140302", + "nodeyear": 2021, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1137491775", + "attributes": { + "title": "Thermalization and prethermalization in periodically kicked quantum spin chains", + "doi": "10.1103/physrevb.103.144307", + "nodeyear": 2021, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1137490808", + "attributes": { + "title": "Floquet engineering of continuous-time quantum walks: Toward the simulation of complex and next-nearest-neighbor couplings", + "doi": "10.1103/physreva.103.042219", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1137410827", + "attributes": { + "title": "Quantum supremacy and quantum phase transitions", + "doi": "10.1103/physrevb.103.165132", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1137311787", + "attributes": { + "title": "Quantum quench in a driven Ising chain", + "doi": "10.1103/physrevb.103.l140407", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1137235025", + "attributes": { + "title": "Quantum operator growth bounds for kicked tops and semiclassical spin chains", + "doi": "10.1103/physreva.103.042414", + "nodeyear": 2021, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1137168785", + "attributes": { + "title": "Dynamical transitions in aperiodically kicked tight-binding models", + "doi": "10.1103/physrevb.103.134303", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1137035608", + "attributes": { + "title": "Controlling directed atomic motion and second-order tunneling of a spin-orbit-coupled atom in optical lattices", + "doi": "10.1103/physreva.103.043315", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1136994042", + "attributes": { + "title": "Dynamical Freezing and Scar Points in Strongly Driven Floquet Matter: Resonance vs Emergent Conservation Laws", + "doi": "10.1103/physrevx.11.021008", + "nodeyear": 2021, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1136986948", + "attributes": { + "title": "Programmable quantum simulations of spin systems with trapped ions", + "doi": "10.1103/revmodphys.93.025001", + "nodeyear": 2021, + "ref-by-count": 70, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1136721709", + "attributes": { + "title": "Floquet Theory and Ultrafast Control of Magnetism", + "doi": "10.1007/978-3-030-62844-4_11", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1136701453", + "attributes": { + "title": "Chimera Time-Crystalline Order in Quantum Spin Networks", + "doi": "10.1103/physrevlett.126.120606", + "nodeyear": 2021, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1136666903", + "attributes": { + "title": "Work statistics and symmetry breaking in an excited-state quantum phase transition", + "doi": "10.1103/physreve.103.032145", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1134743337", + "attributes": { + "title": "Statistical analysis of the excited-state quantum phase transitions in the interacting boson model", + "doi": "10.1088/1361-6471/abdd8c", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1136498164", + "attributes": { + "title": "Emergence of a Renormalized 1/N Expansion in Quenched Critical Many-Body Systems", + "doi": "10.1103/physrevlett.126.110602", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1134894421", + "attributes": { + "title": "Excited-state quantum phase transitions", + "doi": "10.1088/1751-8121/abdfe8", + "nodeyear": 2021, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1136367994", + "attributes": { + "title": "Ergodic and Nonergodic Dual-Unitary Quantum Circuits with Arbitrary Local Hilbert Space Dimension", + "doi": "10.1103/physrevlett.126.100603", + "nodeyear": 2021, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1136299609", + "attributes": { + "title": "Characterizing the Lipkin-Meshkov-Glick model excited-state quantum phase transition using dynamical and statistical properties of the diagonal entropy", + "doi": "10.1103/physreve.103.032109", + "nodeyear": 2021, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1136655132", + "attributes": { + "title": "Tunable fragile topology in Floquet systems", + "doi": "10.1103/physrevb.103.l121115", + "nodeyear": 2021, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1136504030", + "attributes": { + "title": "Optical manipulation of domains in chiral topological superconductors", + "doi": "10.1103/physrevresearch.3.013253", + "nodeyear": 2021, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1136477967", + "attributes": { + "title": "Quasiclassical approach to quantum quench dynamics in the presence of an excited-state quantum phase transition", + "doi": "10.1103/physreva.103.032213", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1136417273", + "attributes": { + "title": "Topological Mott transition in a Weyl-Hubbard model: Dynamical mean-field theory study", + "doi": "10.1103/physrevb.103.125132", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1136414044", + "attributes": { + "title": "Floquet engineering of Mott insulators with strong spin-orbit coupling", + "doi": "10.1103/physrevb.103.l100408", + "nodeyear": 2021, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1136226159", + "attributes": { + "title": "Energy diffusion and absorption in chaotic systems with rapid periodic driving", + "doi": "10.1103/physrevresearch.3.013219", + "nodeyear": 2021, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1136043176", + "attributes": { + "title": "Saddle-point scrambling without thermalization", + "doi": "10.1103/physreva.103.033304", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1135722934", + "attributes": { + "title": "Bilinear dynamic mode decomposition for quantum control", + "doi": "10.1088/1367-2630/abe972", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1133448902", + "attributes": { + "title": "Quantum scarring in a spin-boson system: fundamental families of periodic orbits", + "doi": "10.1088/1367-2630/abd2e6", + "nodeyear": 2021, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1132677751", + "attributes": { + "title": "Excited state quantum phase transitions in the bending spectra of molecules", + "doi": "10.1016/j.jqsrt.2020.107436", + "nodeyear": 2021, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1135442248", + "attributes": { + "title": "Semiconductor qubits in practice", + "doi": "10.1038/s42254-021-00283-9", + "nodeyear": 2021, + "ref-by-count": 34, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1135329747", + "attributes": { + "title": "Controllable and shortcut-based population transfers with a composite system of a nitrogen-vacancy electron spin and microwave photons", + "doi": "10.1007/s11128-021-03005-3", + "nodeyear": 2021, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1135194875", + "attributes": { + "title": "Ubiquitous quantum scarring does not prevent ergodicity", + "doi": "10.1038/s41467-021-21123-5", + "nodeyear": 2021, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140345559", + "attributes": { + "title": "Flow Equations for Disordered Floquet Systems", + "doi": "10.21468/scipost.report.2518", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1135141218", + "attributes": { + "title": "Ground-state phase and superfluidity of tunable spin-orbit-coupled Bose-Einstein condensates", + "doi": "10.1103/physreve.103.022204", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140343596", + "attributes": { + "title": "Flow Equations for Disordered Floquet Systems", + "doi": "10.21468/scipost.report.2494", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1135773784", + "attributes": { + "title": "Population trapping in a pair of periodically driven Rydberg atoms", + "doi": "10.1103/physreva.103.023335", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1135472070", + "attributes": { + "title": "Breakdown of Markovianity by interactions in stroboscopic Floquet-Lindblad dynamics under high-frequency drive", + "doi": "10.1103/physreva.103.l020202", + "nodeyear": 2021, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1135372133", + "attributes": { + "title": "Prethermal quasiconserved observables in Floquet quantum systems", + "doi": "10.1103/physrevb.103.054305", + "nodeyear": 2021, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1135327462", + "attributes": { + "title": "Floquet engineering of edge states in the presence of staggered potential and interactions", + "doi": "10.1103/physrevb.103.085417", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1135309838", + "attributes": { + "title": "Floquet second order topological superconductor based on unconventional pairing", + "doi": "10.1103/physrevb.103.085413", + "nodeyear": 2021, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1135306894", + "attributes": { + "title": "Shortcuts to dynamic polarization", + "doi": "10.1103/physrevb.103.075118", + "nodeyear": 2021, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1135033325", + "attributes": { + "title": "Adiabatic landscape and optimal paths in ergodic systems", + "doi": "10.1103/physrevresearch.3.013102", + "nodeyear": 2021, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1132630990", + "attributes": { + "title": "Superradiant phase transition in quantum Rabi dimer with staggered couplings", + "doi": "10.1016/j.physa.2020.125534", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1130120687", + "attributes": { + "title": "Control of electronic and optical properties of a laser dressed double quantum dot molecule by lateral electric field", + "doi": "10.1016/j.physe.2020.114362", + "nodeyear": 2021, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1134736715", + "attributes": { + "title": "Liquid-crystal-based topological photonics", + "doi": "10.1073/pnas.2020525118", + "nodeyear": 2021, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1134729998", + "attributes": { + "title": "Information Scrambling over Bipartitions: Equilibration, Entropy Production, and Typicality", + "doi": "10.1103/physrevlett.126.030601", + "nodeyear": 2021, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1134295650", + "attributes": { + "title": "Floquet prethermalization in dipolar spin chains", + "doi": "10.1038/s41567-020-01120-z", + "nodeyear": 2021, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1136535762", + "attributes": { + "title": "Suppressing Dissipation in a Floquet-Hubbard System", + "doi": "10.1103/physrevx.11.011057", + "nodeyear": 2021, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1135035980", + "attributes": { + "title": "Theory of Trotter Error with Commutator Scaling", + "doi": "10.1103/physrevx.11.011020", + "nodeyear": 2021, + "ref-by-count": 47, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1134951348", + "attributes": { + "title": "Floquet engineering of topological transitions in a twisted transition metal dichalcogenide homobilayer", + "doi": "10.1103/physrevb.103.014310", + "nodeyear": 2021, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1134796271", + "attributes": { + "title": "Nonequilibrium phase transition in transport through a driven quantum point contact", + "doi": "10.1103/physrevb.103.l041405", + "nodeyear": 2021, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1134708221", + "attributes": { + "title": "Universal Landau-Zener regimes in dynamical topological phase transitions", + "doi": "10.1103/physreva.103.013314", + "nodeyear": 2021, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1133369672", + "attributes": { + "title": "A note on Jacobi-type transitions in finite nuclei", + "doi": "10.1016/j.aop.2020.168380", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1144696405", + "attributes": { + "title": "Quantum Chaos and Universal Trotterisation Performance Behaviours in Digital Quantum Simulation", + "doi": "10.1364/qim.2021.w3a.1", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1141996449", + "attributes": { + "title": "Electrical Control and Quantum Chaos with a High-Spin Nucleus in Silicon", + "doi": "10.1007/978-3-030-83473-9", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1138681817", + "attributes": { + "title": "Nonequilibrium states in quantum materials under time-period driving", + "doi": "10.7498/aps.70.20201808", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1137164603", + "attributes": { + "title": "Memory Functions, Projection Operators, and the Defect Technique, Some Tools of the Trade for the Condensed Matter Physicist", + "doi": "10.1007/978-3-030-68667-3", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1132415037", + "attributes": { + "title": "Fano resonances in optical spectra of semiconductor quantum wells dressed by circularly polarized light.", + "doi": "10.1364/ol.410091", + "nodeyear": 2020, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1133653821", + "attributes": { + "title": "Floquet engineering of molecular dynamics via infrared coupling", + "doi": "10.1063/5.0033382", + "nodeyear": 2020, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1133434712", + "attributes": { + "title": "Self-averaging in many-body quantum systems out of equilibrium: Time dependence of distributions", + "doi": "10.1103/physreve.102.062126", + "nodeyear": 2020, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1132597664", + "attributes": { + "title": "Time crystals in the driven transverse field Ising model under quasiperiodic modulation", + "doi": "10.1088/1367-2630/abc9ec", + "nodeyear": 2020, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1133361819", + "attributes": { + "title": "Fano resonances in quantum well absorption induced by electromagnetic dressing", + "doi": "10.1063/5.0032332", + "nodeyear": 2020, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1133346206", + "attributes": { + "title": "Novel Quantum Phases of Two-Component Bosons with Pair Hopping in Synthetic Dimension", + "doi": "10.1103/physrevlett.125.245301", + "nodeyear": 2020, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1133100286", + "attributes": { + "title": "Floquet Engineering of Structures Based on Gapless Semiconductors", + "doi": "10.1134/s1063782620120143", + "nodeyear": 2020, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1134158402", + "attributes": { + "title": "Homogeneous Floquet time crystal from weak ergodicity breaking", + "doi": "10.1103/physrevb.102.224309", + "nodeyear": 2020, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1134040199", + "attributes": { + "title": "Excited-state quantum phase transitions in Kerr nonlinear oscillators", + "doi": "10.1103/physreva.102.063531", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1134037611", + "attributes": { + "title": "Tuning the topology of p-wave superconductivity in an analytically solvable two-band model", + "doi": "10.1103/physrevb.102.235156", + "nodeyear": 2020, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1134035516", + "attributes": { + "title": "Dynamical transition for a class of integrable models coupled to a bath", + "doi": "10.1103/physrevb.102.235154", + "nodeyear": 2020, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1133997345", + "attributes": { + "title": "Quantum frequency locking and downconversion in a driven qubit-cavity system", + "doi": "10.1103/physrevresearch.2.043411", + "nodeyear": 2020, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1133741565", + "attributes": { + "title": "Edge mode manipulation through commensurate multifrequency driving", + "doi": "10.1103/physrevb.102.235143", + "nodeyear": 2020, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1133735060", + "attributes": { + "title": "Quantum metamorphism", + "doi": "10.1103/physrevb.102.224307", + "nodeyear": 2020, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1133499708", + "attributes": { + "title": "Topological Floquet engineering of a one-dimensional optical lattice via resonant shaking with two harmonic frequencies", + "doi": "10.1103/physreva.102.063315", + "nodeyear": 2020, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1133402404", + "attributes": { + "title": "Finite-component dynamical quantum phase transitions", + "doi": "10.1103/physrevb.102.220302", + "nodeyear": 2020, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1133344182", + "attributes": { + "title": "Bose-Hubbard physics in synthetic dimensions from interaction Trotterization", + "doi": "10.1103/physrevresearch.2.043340", + "nodeyear": 2020, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1133099711", + "attributes": { + "title": "Floquet perturbation theory for periodically driven weakly interacting fermions", + "doi": "10.1103/physrevb.102.235114", + "nodeyear": 2020, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1132237880", + "attributes": { + "title": "Quantum quenches in the Dicke model: Thermalization and failure of the generalized Gibbs ensemble*", + "doi": "10.1088/1674-1056/abc679", + "nodeyear": 2020, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1132036387", + "attributes": { + "title": "Exact rotating wave approximation", + "doi": "10.1016/j.aop.2020.168327", + "nodeyear": 2020, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1131329755", + "attributes": { + "title": "Magnetic field effect on the electronic states and the intraband optical absorption spectrum of a laser dressed double quantum dot molecule", + "doi": "10.1016/j.cjph.2020.09.028", + "nodeyear": 2020, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1133080576", + "attributes": { + "title": "Relevant out-of-time-order correlator operators: Footprints of the classical dynamics", + "doi": "10.1103/physreve.102.052133", + "nodeyear": 2020, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1133125125", + "attributes": { + "title": "Solvable Model of a Generic Driven Mixture of Trapped Bose\u2013Einstein Condensates and Properties of a Many-Boson Floquet State at the Limit of an Infinite Number of Particles", + "doi": "10.3390/e22121342", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1132781598", + "attributes": { + "title": "Manipulating Intertwined Orders in Solids with Quantum Light", + "doi": "10.1103/physrevlett.125.217402", + "nodeyear": 2020, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1132635554", + "attributes": { + "title": "Harnessing the Power of the Second Quantum Revolution", + "doi": "10.1103/prxquantum.1.020101", + "nodeyear": 2020, + "ref-by-count": 33, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1132626689", + "attributes": { + "title": "Exponential growth of out-of-time-order correlator without chaos: inverted harmonic oscillator", + "doi": "10.1007/jhep11(2020)068", + "nodeyear": 2020, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1132300850", + "attributes": { + "title": "Quantifying the Sensitivity to Errors in Analog Quantum Simulation", + "doi": "10.1103/prxquantum.1.020308", + "nodeyear": 2020, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1132266415", + "attributes": { + "title": "Anomalous Spin-Charge Separation in a Driven Hubbard System", + "doi": "10.1103/physrevlett.125.195301", + "nodeyear": 2020, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1132781568", + "attributes": { + "title": "Laser-induced topological s-wave superconductivity in bilayer transition metal dichalcogenides", + "doi": "10.1103/physrevb.102.174508", + "nodeyear": 2020, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1132682732", + "attributes": { + "title": "Time-crystalline phases and period-doubling oscillations in one-dimensional Floquet topological insulators", + "doi": "10.1103/physrevresearch.2.043239", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1132672783", + "attributes": { + "title": "Nonequilibrium non-Markovian steady states in open quantum many-body systems: Persistent oscillations in Heisenberg quantum spin chains", + "doi": "10.1103/physrevb.102.174309", + "nodeyear": 2020, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1132495853", + "attributes": { + "title": "Stark time crystals: Symmetry breaking in space and time", + "doi": "10.1103/physrevb.102.195116", + "nodeyear": 2020, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1132252119", + "attributes": { + "title": "Phase Diagrams of Periodically Driven Spin\u2013Orbit Coupled 87Rb and 23Na Bose\u2013Einstein Condensates", + "doi": "10.1002/andp.202000194", + "nodeyear": 2020, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1132060808", + "attributes": { + "title": "Unified Theory to Characterize Floquet Topological Phases by Quench Dynamics", + "doi": "10.1103/physrevlett.125.183001", + "nodeyear": 2020, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1131969118", + "attributes": { + "title": "Ergodic-Localized Junctions in a Periodically Driven Spin Chain", + "doi": "10.1103/physrevlett.125.170503", + "nodeyear": 2020, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1130243954", + "attributes": { + "title": "Floquet states in dissipative open quantum systems", + "doi": "10.1088/1361-6455/abb127", + "nodeyear": 2020, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1131841249", + "attributes": { + "title": "Simulating complex quantum networks with time crystals", + "doi": "10.1126/sciadv.aay8892", + "nodeyear": 2020, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1140347748", + "attributes": { + "title": "Flow Equations for Disordered Floquet Systems", + "doi": "10.21468/scipost.report.2082", + "nodeyear": 2020, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1132055741", + "attributes": { + "title": "Chiral Luttinger liquids in graphene tuned by irradiation", + "doi": "10.1103/physrevb.102.155428", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1131923946", + "attributes": { + "title": "\u03b7-paired superconducting hidden phase in photodoped Mott insulators", + "doi": "10.1103/physrevb.102.165136", + "nodeyear": 2020, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1131725038", + "attributes": { + "title": "Defining a well-ordered Floquet basis by the average energy", + "doi": "10.1103/physreva.102.042212", + "nodeyear": 2020, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1131633965", + "attributes": { + "title": "Dynamic renormalization group theory for open Floquet systems", + "doi": "10.1103/physrevb.102.134307", + "nodeyear": 2020, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1131535042", + "attributes": { + "title": "Geometric properties of adiabatic quantum thermal machines", + "doi": "10.1103/physrevb.102.155407", + "nodeyear": 2020, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1131497997", + "attributes": { + "title": "Speck of chaos", + "doi": "10.1103/physrevresearch.2.043034", + "nodeyear": 2020, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1131390335", + "attributes": { + "title": "Holographic Floquet states in low dimensions", + "doi": "10.1007/jhep10(2020)013", + "nodeyear": 2020, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1130765968", + "attributes": { + "title": "The 2021 quantum materials roadmap", + "doi": "10.1088/2515-7639/abb74e", + "nodeyear": 2020, + "ref-by-count": 47, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1128676541", + "attributes": { + "title": "Nuclear structure and phase transition of odd-odd Cu isotopes: A neutron-proton interacting boson-fermion-fermion model calculation", + "doi": "10.1016/j.nuclphysa.2020.121961", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1131177201", + "attributes": { + "title": "The Rabi problem with elliptical polarization", + "doi": "10.1515/zna-2020-0181", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:0.50;03:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1131131373", + "attributes": { + "title": "Chaos and Quantum Scars in Bose-Josephson Junction Coupled to a Bosonic Mode", + "doi": "10.1103/physrevlett.125.134101", + "nodeyear": 2020, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1131100748", + "attributes": { + "title": "Dynamical Order and Superconductivity in a Frustrated Many-Body System", + "doi": "10.1103/physrevlett.125.137001", + "nodeyear": 2020, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1130030918", + "attributes": { + "title": "Quantum speed limit time, non-Markovianity, and quantum phase transition of the Dicke model", + "doi": "10.1364/josab.393998", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "09:0.33;01:0.33;02:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1130753379", + "attributes": { + "title": "Statistical properties of the localization measure of chaotic eigenstates in the Dicke model", + "doi": "10.1103/physreve.102.032212", + "nodeyear": 2020, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1130315991", + "attributes": { + "title": "Inducing anisotropies in Dirac fermions by periodic driving", + "doi": "10.1088/1361-648x/abb1cc", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1130688900", + "attributes": { + "title": "Quantum chaos in a system with high degree of symmetries", + "doi": "10.1103/physreve.102.032208", + "nodeyear": 2020, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1131193925", + "attributes": { + "title": "Floquet engineering of twisted double bilayer graphene", + "doi": "10.1103/physrevresearch.2.033494", + "nodeyear": 2020, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1131193618", + "attributes": { + "title": "Driven spin chains as high-quality quantum routers", + "doi": "10.1103/physreva.102.032624", + "nodeyear": 2020, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1131100771", + "attributes": { + "title": "Floquet topological phase in a generalized PT-symmetric lattice", + "doi": "10.1103/physrevb.102.104303", + "nodeyear": 2020, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1130836894", + "attributes": { + "title": "Optomagnonic Barnett effect", + "doi": "10.1103/physrevb.102.094417", + "nodeyear": 2020, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1130756838", + "attributes": { + "title": "Bridging entanglement dynamics and chaos in semiclassical systems", + "doi": "10.1103/physreva.102.032404", + "nodeyear": 2020, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1130750198", + "attributes": { + "title": "Resonant laser excitation and time-domain imaging of chiral topological polariton edge states", + "doi": "10.1103/physrevresearch.2.033386", + "nodeyear": 2020, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1130316025", + "attributes": { + "title": "Ultrafast critical ground state preparation via bang\u2013bang protocols", + "doi": "10.1088/1367-2630/abb1df", + "nodeyear": 2020, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1124910985", + "attributes": { + "title": "Signatures of quantum chaos in the dynamics of bipartite fluctuations", + "doi": "10.1016/j.physa.2020.124321", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1130469797", + "attributes": { + "title": "Half-Integer Quantized Topological Response in Quasiperiodically Driven Quantum Systems", + "doi": "10.1103/physrevlett.125.100601", + "nodeyear": 2020, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1130394801", + "attributes": { + "title": "Harmonic Fine Tuning and Triaxial Spatial Anisotropy of Dressed Atomic Spins", + "doi": "10.1103/physrevlett.125.093203", + "nodeyear": 2020, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1130268705", + "attributes": { + "title": "Signatures of inter-band transitions on dynamical localization", + "doi": "10.1140/epjd/e2020-100489-1", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1130214677", + "attributes": { + "title": "Chaos and quantum scars in a coupled top model", + "doi": "10.1103/physreve.102.020101", + "nodeyear": 2020, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1129902361", + "attributes": { + "title": "Time Crystals Protected by Floquet Dynamical Symmetry in Hubbard Models", + "doi": "10.1103/physrevlett.125.060601", + "nodeyear": 2020, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1129855599", + "attributes": { + "title": "Construction of many-body-localized models where all the eigenstates are matrix-product-states", + "doi": "10.1088/1742-5468/aba0a9", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1130392310", + "attributes": { + "title": "Thermalization in a Bose-Hubbard dimer with modulated tunneling", + "doi": "10.1103/physreva.102.023330", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1129926643", + "attributes": { + "title": "Light-induced bound electron states in two-dimensional systems: Contribution to electron transport", + "doi": "10.1103/physrevb.102.075412", + "nodeyear": 2020, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1129685555", + "attributes": { + "title": "Entropic vibrational resonance", + "doi": "10.1103/physreve.102.012149", + "nodeyear": 2020, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1129594568", + "attributes": { + "title": "Donor Spins in Silicon for Quantum Technologies", + "doi": "10.1002/qute.202000005", + "nodeyear": 2020, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1129534483", + "attributes": { + "title": "Out-of-equilibrium phase transitions induced by Floquet resonances in a periodically quench-driven XY spin chain", + "doi": "10.21468/scipostphyscore.3.1.001", + "nodeyear": 2020, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1129384214", + "attributes": { + "title": "Emergent Hydrodynamics in Nonequilibrium Quantum Systems", + "doi": "10.1103/physrevlett.125.030601", + "nodeyear": 2020, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1129066525", + "attributes": { + "title": "Complex Density of Continuum States in Resonant Quantum Tunneling", + "doi": "10.1103/physrevlett.125.020401", + "nodeyear": 2020, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1128974254", + "attributes": { + "title": "General description for nonequilibrium steady states in periodically driven dissipative quantum systems", + "doi": "10.1126/sciadv.abb4019", + "nodeyear": 2020, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1129713716", + "attributes": { + "title": "Coherent control of dissipative dynamics in a periodically driven lattice array", + "doi": "10.1103/physreva.102.012221", + "nodeyear": 2020, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1129492912", + "attributes": { + "title": "Electromagnetic control of transport across a barrier on a topological insulator surface", + "doi": "10.1103/physrevb.102.045419", + "nodeyear": 2020, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1129063470", + "attributes": { + "title": "Quantum to classical crossover of Floquet engineering in correlated quantum systems", + "doi": "10.1103/physrevresearch.2.033033", + "nodeyear": 2020, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1128941497", + "attributes": { + "title": "Robust Dynamic Hamiltonian Engineering of Many-Body Spin Systems", + "doi": "10.1103/physrevx.10.031002", + "nodeyear": 2020, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1128912140", + "attributes": { + "title": "Floquet engineering of the Luttinger Hamiltonian", + "doi": "10.1103/physrevb.102.035301", + "nodeyear": 2020, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1128533067", + "attributes": { + "title": "Condensed matter physics in time crystals", + "doi": "10.1088/1367-2630/ab9d54", + "nodeyear": 2020, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1128836880", + "attributes": { + "title": "Power-Stroke-Driven Muscle Contraction", + "doi": "10.1007/978-3-030-45197-4_4", + "nodeyear": 2020, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1125908542", + "attributes": { + "title": "Coding closed and open quantum systems in MATLAB: applications in quantum optics and condensed matter", + "doi": "10.1088/1361-6404/ab8360", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1128827266", + "attributes": { + "title": "Realization of an anomalous Floquet topological system with ultracold atoms", + "doi": "10.1038/s41567-020-0949-y", + "nodeyear": 2020, + "ref-by-count": 60, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1128505545", + "attributes": { + "title": "Floquet spectrum for anisotropic and tilted Dirac materials under linearly polarized light at all field intensities", + "doi": "10.1063/5.0007576", + "nodeyear": 2020, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1129532989", + "attributes": { + "title": "Out-of-equilibrium phase transitions induced by Floquet resonances in a periodically quench-driven XY spin chain", + "doi": "10.21468/scipost.report.1771", + "nodeyear": 2020, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1128466326", + "attributes": { + "title": "Many Body Quantum Chaos", + "doi": "10.3390/condmat5020041", + "nodeyear": 2020, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1128416461", + "attributes": { + "title": "Universal Anti-Kibble-Zurek Scaling in Fully Connected Systems", + "doi": "10.1103/physrevlett.124.230602", + "nodeyear": 2020, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1128125903", + "attributes": { + "title": "Theoretical Methods for Ultrastrong Light\u2013Matter Interactions", + "doi": "10.1002/qute.201900140", + "nodeyear": 2020, + "ref-by-count": 26, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1128741464", + "attributes": { + "title": "Landau-Zener transitions and adiabatic impulse approximation in an array of two Rydberg atoms with time-dependent detuning", + "doi": "10.1103/physreva.101.063415", + "nodeyear": 2020, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1128303210", + "attributes": { + "title": "Entanglement measures and nonequilibrium dynamics of quantum many-body systems: A path integral approach", + "doi": "10.1103/physrevb.101.245130", + "nodeyear": 2020, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1128253343", + "attributes": { + "title": "Floquet engineering of interlayer couplings: Tuning the magic angle of twisted bilayer graphene at the exit of a waveguide", + "doi": "10.1103/physrevb.101.241408", + "nodeyear": 2020, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1128250379", + "attributes": { + "title": "Environment-controlled Floquet-state paramagnetism", + "doi": "10.1103/physrevresearch.2.023293", + "nodeyear": 2020, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1128246725", + "attributes": { + "title": "Effective Floquet Hamiltonians for periodically driven twisted bilayer graphene", + "doi": "10.1103/physrevb.101.235411", + "nodeyear": 2020, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1128224551", + "attributes": { + "title": "Anomalous levitation and annihilation in Floquet topological insulators", + "doi": "10.1103/physrevresearch.2.022048", + "nodeyear": 2020, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1128130936", + "attributes": { + "title": "Collapse and revival of quantum many-body scars via Floquet engineering", + "doi": "10.1103/physrevb.101.245107", + "nodeyear": 2020, + "ref-by-count": 48, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127296857", + "attributes": { + "title": "Quantum vs classical dynamics in a spin-boson system: manifestations of spectral correlations and scarring", + "doi": "10.1088/1367-2630/ab8ef8", + "nodeyear": 2020, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127987694", + "attributes": { + "title": "Quantum interference device for controlled two-qubit operations", + "doi": "10.1038/s41534-020-0275-3", + "nodeyear": 2020, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127977347", + "attributes": { + "title": "A quantum annealer with fully programmable all-to-all coupling via Floquet engineering", + "doi": "10.1038/s41534-020-0279-z", + "nodeyear": 2020, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127865614", + "attributes": { + "title": "Time crystallinity in open quantum systems", + "doi": "10.22331/q-2020-05-25-270", + "nodeyear": 2020, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127470058", + "attributes": { + "title": "Survival of current in a periodically driven hard-core bosonic system", + "doi": "10.1140/epjb/e2020-10133-3", + "nodeyear": 2020, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127517958", + "attributes": { + "title": "Floquet Engineering Topological Many-Body Localized Systems", + "doi": "10.1103/physrevlett.124.190601", + "nodeyear": 2020, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1127358108", + "attributes": { + "title": "Transition from quantum chaos to localization in spin chains", + "doi": "10.1103/physreve.101.052201", + "nodeyear": 2020, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127346740", + "attributes": { + "title": "Band structure engineering and non-equilibrium dynamics in Floquet topological insulators", + "doi": "10.1038/s42254-020-0170-z", + "nodeyear": 2020, + "ref-by-count": 110, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127989066", + "attributes": { + "title": "Controlling magnetic correlations in a driven Hubbard system far from half-filling", + "doi": "10.1103/physreva.101.053634", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127955024", + "attributes": { + "title": "Error bounds for constrained dynamics in gapped quantum systems: Rigorous results and generalizations", + "doi": "10.1103/physreva.101.052122", + "nodeyear": 2020, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127897454", + "attributes": { + "title": "Predicted photoinduced topological phases in organic salt \u03b1-(BEDT-TTF)2I3", + "doi": "10.1103/physrevresearch.2.023229", + "nodeyear": 2020, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127889093", + "attributes": { + "title": "Self-averaging in many-body quantum systems out of equilibrium: Chaotic systems", + "doi": "10.1103/physrevb.101.174312", + "nodeyear": 2020, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127764217", + "attributes": { + "title": "Characterization of photoexcited states in the half-filled one-dimensional extended Hubbard model assisted by machine learning", + "doi": "10.1103/physrevb.101.195136", + "nodeyear": 2020, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1127758910", + "attributes": { + "title": "Towards simulation of the dynamics of materials on quantum computers", + "doi": "10.1103/physrevb.101.184305", + "nodeyear": 2020, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127625202", + "attributes": { + "title": "Transport through a quantum critical system: A thermodynamically consistent approach", + "doi": "10.1103/physrevresearch.2.023178", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127607114", + "attributes": { + "title": "Floquet eigenspectra of a nonlinear two-mode system under periodic driving: The emergence of ring structures", + "doi": "10.1103/physreva.101.053623", + "nodeyear": 2020, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127358045", + "attributes": { + "title": "Classical and quantum chaos in a three-mode bosonic system", + "doi": "10.1103/physreva.101.053604", + "nodeyear": 2020, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1125292836", + "attributes": { + "title": "Trotterized adiabatic quantum simulation and its application to a simple all-optical system", + "doi": "10.1088/1367-2630/ab7a31", + "nodeyear": 2020, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1126383906", + "attributes": { + "title": "Dynamics and transport at the threshold of many-body localization", + "doi": "10.1016/j.physrep.2020.03.003", + "nodeyear": 2020, + "ref-by-count": 33, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1125977593", + "attributes": { + "title": "Polynomial potentials and coupled quantum dots in two and three dimensions", + "doi": "10.1016/j.aop.2020.168161", + "nodeyear": 2020, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127630356", + "attributes": { + "title": "Predicting Imperfect Echo Dynamics in Many-Body Quantum Systems", + "doi": "10.1515/zna-2019-0383", + "nodeyear": 2020, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127650081", + "attributes": { + "title": "Coherent Transport in Periodically Driven Mesoscopic Conductors: From Scattering Amplitudes to Quantum Thermodynamics", + "doi": "10.1515/zna-2020-0056", + "nodeyear": 2020, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127130950", + "attributes": { + "title": "Quantum Many-Body Scars in Optical Lattices", + "doi": "10.1103/physrevlett.124.160604", + "nodeyear": 2020, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1126727524", + "attributes": { + "title": "Many-Body Dynamical Localization in a Kicked Lieb-Liniger Gas", + "doi": "10.1103/physrevlett.124.155302", + "nodeyear": 2020, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1126480743", + "attributes": { + "title": "Periodic thermodynamics of a two spin Rabi model", + "doi": "10.1088/1742-5468/ab7812", + "nodeyear": 2020, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1126271157", + "attributes": { + "title": "Does Scrambling Equal Chaos?", + "doi": "10.1103/physrevlett.124.140602", + "nodeyear": 2020, + "ref-by-count": 41, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1126269333", + "attributes": { + "title": "Periodically driven harmonic Langevin systems", + "doi": "10.1103/physreve.101.042106", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1126263310", + "attributes": { + "title": "Classical and Quantum Signatures of Quantum Phase Transitions in a (Pseudo) Relativistic Many-Body System", + "doi": "10.3390/condmat5020026", + "nodeyear": 2020, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127947148", + "attributes": { + "title": "Floquet Prethermalization in a Bose-Hubbard System", + "doi": "10.1103/physrevx.10.021044", + "nodeyear": 2020, + "ref-by-count": 47, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1127515489", + "attributes": { + "title": "Long-Lived Interacting Phases of Matter Protected by Multiple Time-Translation Symmetries in Quasiperiodically Driven Systems", + "doi": "10.1103/physrevx.10.021032", + "nodeyear": 2020, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1126759415", + "attributes": { + "title": "Realization of a stroboscopic optical lattice for cold atoms with subwavelength spacing", + "doi": "10.1103/physreva.101.041603", + "nodeyear": 2020, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1126173583", + "attributes": { + "title": "Scaling of Loschmidt echo in a boundary-driven critical Z3 Potts model", + "doi": "10.1103/physrevb.101.144302", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1126057889", + "attributes": { + "title": "Enhancement of local pairing correlations in periodically driven Mott insulators", + "doi": "10.1103/physrevb.101.161101", + "nodeyear": 2020, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1123928512", + "attributes": { + "title": "The war on liquids: Disintegration and reaction by enhanced pulsed blasting", + "doi": "10.1016/j.ces.2019.115458", + "nodeyear": 2020, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1125920858", + "attributes": { + "title": "Non-equilibrium Dynamical Mean-Field Theory", + "doi": "10.1007/978-3-319-44677-6_1", + "nodeyear": 2020, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1125550793", + "attributes": { + "title": "Coherent electrical control of a single high-spin nucleus in silicon", + "doi": "10.1038/s41586-020-2057-7", + "nodeyear": 2020, + "ref-by-count": 39, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1126915081", + "attributes": { + "title": "Floquet engineering of 2D materials", + "doi": "10.1088/1742-6596/1461/1/012064", + "nodeyear": 2020, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1126909693", + "attributes": { + "title": "Electron-photonic topological states on the surface of a bulk semiconductor driven by a high-frequency field", + "doi": "10.1088/1742-6596/1461/1/012063", + "nodeyear": 2020, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1125953276", + "attributes": { + "title": "Tailoring metal-insulator transitions and band topology via off-resonant periodic drive in an interacting triangular lattice", + "doi": "10.1103/physrevb.101.115428", + "nodeyear": 2020, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1125497800", + "attributes": { + "title": "Controllable finite-momenta dynamical quasicondensation in the periodically driven one-dimensional Fermi-Hubbard model", + "doi": "10.1103/physreva.101.033604", + "nodeyear": 2020, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1125326068", + "attributes": { + "title": "Is there a Floquet Lindbladian?", + "doi": "10.1103/physrevb.101.100301", + "nodeyear": 2020, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1125325450", + "attributes": { + "title": "Optimal frequency window for Floquet engineering in optical lattices", + "doi": "10.1103/physrevresearch.2.013241", + "nodeyear": 2020, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1125160480", + "attributes": { + "title": "Dimensional Crossover of the Integer Quantum Hall Plateau Transition and Disordered Topological Pumping", + "doi": "10.1103/physrevlett.124.086602", + "nodeyear": 2020, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1125157056", + "attributes": { + "title": "Entanglement in coupled kicked tops with chaotic dynamics", + "doi": "10.1103/physreve.101.022221", + "nodeyear": 2020, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1124776377", + "attributes": { + "title": "Optimized three-level quantum transfers based on frequency-modulated optical excitations", + "doi": "10.1038/s41598-020-59046-8", + "nodeyear": 2020, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1125164136", + "attributes": { + "title": "Floquet-engineering of nodal rings and nodal spheres and their characterization using the quantum metric", + "doi": "10.1103/physrevresearch.2.013224", + "nodeyear": 2020, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1125161664", + "attributes": { + "title": "Tunable strong photo-mixing in Weyl semimetals", + "doi": "10.1103/physrevb.101.085307", + "nodeyear": 2020, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1125153368", + "attributes": { + "title": "Improved Lieb-Robinson bound for many-body Hamiltonians with power-law interactions", + "doi": "10.1103/physreva.101.022333", + "nodeyear": 2020, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1121624158", + "attributes": { + "title": "The transition from double to single quantum dot induced by THz laser field", + "doi": "10.1016/j.physe.2019.113758", + "nodeyear": 2020, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1124462573", + "attributes": { + "title": "Observation of Dynamical Quantum Phase Transitions with Correspondence in an Excited State Phase Diagram", + "doi": "10.1103/physrevlett.124.043001", + "nodeyear": 2020, + "ref-by-count": 40, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1124409613", + "attributes": { + "title": "Thermodynamic Geometry of Microscopic Heat Engines", + "doi": "10.1103/physrevlett.124.040602", + "nodeyear": 2020, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1123624596", + "attributes": { + "title": "Stability of topologically protected edge states in nonlinear quantum walks: additional bifurcations unique to Floquet systems", + "doi": "10.1088/1751-8121/ab6514", + "nodeyear": 2020, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1124230276", + "attributes": { + "title": "An algebraic alternative for the accurate simulation of CO2 Raman spectra", + "doi": "10.1002/jrs.5801", + "nodeyear": 2020, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1124230253", + "attributes": { + "title": "Positive quantum Lyapunov exponents in experimental systems with a regular classical limit", + "doi": "10.1103/physreve.101.010202", + "nodeyear": 2020, + "ref-by-count": 47, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1124254326", + "attributes": { + "title": "Dynamical Detection of Level Repulsion in the One-Particle Aubry-Andr\u00e9 Model", + "doi": "10.3390/condmat5010007", + "nodeyear": 2020, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1124048582", + "attributes": { + "title": "Quantum Pairing Time Orders", + "doi": "10.1002/andp.201900529", + "nodeyear": 2020, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1125053995", + "attributes": { + "title": "Long-Range Prethermal Phases of Nonequilibrium Matter", + "doi": "10.1103/physrevx.10.011043", + "nodeyear": 2020, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1124831533", + "attributes": { + "title": "Parametric Instabilities of Interacting Bosons in Periodically Driven 1D Optical Lattices", + "doi": "10.1103/physrevx.10.011030", + "nodeyear": 2020, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1124103171", + "attributes": { + "title": "Driving-assisted open quantum transport in qubit networks", + "doi": "10.1103/physreva.101.012113", + "nodeyear": 2020, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1123986522", + "attributes": { + "title": "Effective Floquet Hamiltonian in the low-frequency regime", + "doi": "10.1103/physrevb.101.024303", + "nodeyear": 2020, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1123351695", + "attributes": { + "title": "Creutz ladder in a resonantly shaken 1D optical lattice", + "doi": "10.1088/1367-2630/ab61d7", + "nodeyear": 2020, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1123673879", + "attributes": { + "title": "Divergence of the Floquet-Magnus expansion in a periodically driven one-body system with energy localization", + "doi": "10.1103/physreve.100.062138", + "nodeyear": 2019, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1123430435", + "attributes": { + "title": "Is the Trotterized UCCSD Ansatz Chemically Well-Defined?", + "doi": "10.1021/acs.jctc.9b01083", + "nodeyear": 2019, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "08:0.33;03:0.33;06:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1123097339", + "attributes": { + "title": "Topology and Broken Symmetry in Floquet Systems", + "doi": "10.1146/annurev-conmatphys-031218-013721", + "nodeyear": 2019, + "ref-by-count": 53, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1123643952", + "attributes": { + "title": "Exponentially slow heating in short and long-range interacting Floquet systems", + "doi": "10.1103/physrevresearch.1.033202", + "nodeyear": 2019, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1123446111", + "attributes": { + "title": "Emergence of singularities from decoherence: Quantum catastrophes", + "doi": "10.1103/physreva.100.063628", + "nodeyear": 2019, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1123268268", + "attributes": { + "title": "Polaron-transformed dissipative Lipkin-Meshkov-Glick model", + "doi": "10.1103/physreva.100.063815", + "nodeyear": 2019, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1123262658", + "attributes": { + "title": "Probing an excited-state quantum phase transition in a quantum many-body system via an out-of-time-order correlator", + "doi": "10.1103/physreva.100.062113", + "nodeyear": 2019, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1123187479", + "attributes": { + "title": "Non-Abelian geometric potentials and spin-orbit coupling for periodically driven systems", + "doi": "10.1103/physreva.100.063616", + "nodeyear": 2019, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1122945773", + "attributes": { + "title": "Simulating quantum many-body dynamics on a current digital quantum computer", + "doi": "10.1038/s41534-019-0217-0", + "nodeyear": 2019, + "ref-by-count": 67, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1122948207", + "attributes": { + "title": "Nonlocal random walk over Floquet states of a dissipative nonlinear oscillator", + "doi": "10.1103/physreve.100.052148", + "nodeyear": 2019, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1122908545", + "attributes": { + "title": "Floquet-state cooling", + "doi": "10.1038/s41598-019-53877-w", + "nodeyear": 2019, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1122419408", + "attributes": { + "title": "Quantum Simulation Meets Nonequilibrium Dynamical Mean-Field Theory: Exploring the Periodically Driven, Strongly Correlated Fermi-Hubbard Model", + "doi": "10.1103/physrevlett.123.193602", + "nodeyear": 2019, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1122364137", + "attributes": { + "title": "Locality and heating in periodically driven, power-law-interacting systems", + "doi": "10.1103/physreva.100.052103", + "nodeyear": 2019, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1122299651", + "attributes": { + "title": "Hybrid Dispersion Dirac Semimetal and Hybrid Weyl Phases in Luttinger Semimetals: A Dynamical Approach", + "doi": "10.1002/andp.201900336", + "nodeyear": 2019, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1122298943", + "attributes": { + "title": "Light-induced anomalous Hall effect in graphene", + "doi": "10.1038/s41567-019-0698-y", + "nodeyear": 2019, + "ref-by-count": 245, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1122260988", + "attributes": { + "title": "Revealing Correlations Between a System and an Inaccessible Environment", + "doi": "10.1007/978-3-030-31146-9_5", + "nodeyear": 2019, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1122960341", + "attributes": { + "title": "Quantum caustics and the hierarchy of light cones in quenched spin chains", + "doi": "10.1103/physrevresearch.1.033135", + "nodeyear": 2019, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1122929220", + "attributes": { + "title": "Floquet spinor Bose gases", + "doi": "10.1103/physrevresearch.1.033132", + "nodeyear": 2019, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1122682309", + "attributes": { + "title": "Floquet engineering of topological phases protected by emergent symmetries under resonant drives", + "doi": "10.1103/physreva.100.052109", + "nodeyear": 2019, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1122560614", + "attributes": { + "title": "Engineered nearest-neighbor interactions with doubly modulated optical lattices", + "doi": "10.1103/physreva.100.053610", + "nodeyear": 2019, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1122263731", + "attributes": { + "title": "Floquet second-order topological superconductor driven via ferromagnetic resonance", + "doi": "10.1103/physrevresearch.1.032013", + "nodeyear": 2019, + "ref-by-count": 31, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1122003630", + "attributes": { + "title": "Floquet engineering of optical lattices with spatial features and periodicity below the diffraction limit", + "doi": "10.1088/1367-2630/ab500f", + "nodeyear": 2019, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1122258473", + "attributes": { + "title": "Complex absorbing potentials for stark resonances", + "doi": "10.1002/qua.26067", + "nodeyear": 2019, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1122233280", + "attributes": { + "title": "Periodic thermodynamics of the Rabi model with circular polarization for arbitrary spin quantum numbers", + "doi": "10.1103/physreve.100.042141", + "nodeyear": 2019, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1122016549", + "attributes": { + "title": "Integrable Many-Body Quantum Floquet-Thouless Pumps", + "doi": "10.1103/physrevlett.123.170603", + "nodeyear": 2019, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1121972957", + "attributes": { + "title": "Collective performance of a finite-time quantum Otto cycle", + "doi": "10.1103/physreve.100.042126", + "nodeyear": 2019, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1121864026", + "attributes": { + "title": "System susceptibility and bound-states in structured reservoirs.", + "doi": "10.1364/oe.27.031504", + "nodeyear": 2019, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1121860390", + "attributes": { + "title": "Beyond Chu\u2019s Limit with Floquet Impedance Matching", + "doi": "10.1103/physrevlett.123.164102", + "nodeyear": 2019, + "ref-by-count": 26, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1121829677", + "attributes": { + "title": "Superradiance in finite quantum systems randomly coupled to continuum", + "doi": "10.1103/physreve.100.042119", + "nodeyear": 2019, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1120967654", + "attributes": { + "title": "Transport signatures of symmetry protection in 1D Floquet topological insulators", + "doi": "10.1088/1361-648x/ab4319", + "nodeyear": 2019, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:0.33;09:0.33;10:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1121574121", + "attributes": { + "title": "Calculation of Transition State Energies in the HCN\u2013HNC Isomerization with an Algebraic Model", + "doi": "10.1021/acs.jpca.9b07338", + "nodeyear": 2019, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1121497945", + "attributes": { + "title": "Behavior of Floquet Topological Quantum States in Optically Driven Semiconductors", + "doi": "10.3390/sym11101246", + "nodeyear": 2019, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1122147311", + "attributes": { + "title": "Dynamical quantum phase transitions in extended toric-code models", + "doi": "10.1103/physrevb.100.144203", + "nodeyear": 2019, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1121992405", + "attributes": { + "title": "Optical control of the current-voltage relation in stacked superconductors", + "doi": "10.1103/physrevb.100.134510", + "nodeyear": 2019, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1121860362", + "attributes": { + "title": "Floquet-engineered light-cone spreading of correlations in a driven quantum chain", + "doi": "10.1103/physrevb.100.165125", + "nodeyear": 2019, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1121691603", + "attributes": { + "title": "Ultrastrong-coupling circuit QED in the radio-frequency regime", + "doi": "10.1103/physreva.100.043815", + "nodeyear": 2019, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1121454130", + "attributes": { + "title": "Floquet time spirals and stable discrete-time quasicrystals in quasiperiodically driven quantum many-body systems", + "doi": "10.1103/physrevb.100.134302", + "nodeyear": 2019, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1121432950", + "attributes": { + "title": "Quantized Hall Conductance of a Single Atomic Wire: A Proposal Based on Synthetic Dimensions", + "doi": "10.1103/physrevx.9.041001", + "nodeyear": 2019, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1121151157", + "attributes": { + "title": "Discontinuities in Driven Spin-Boson Systems due to Coherent Destruction of Tunneling: Breakdown of the Floquet-Gibbs Distribution", + "doi": "10.1103/physrevlett.123.120602", + "nodeyear": 2019, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1121123255", + "attributes": { + "title": "Digital quantum simulation, Trotter errors, and quantum chaos of the kicked top", + "doi": "10.1038/s41534-019-0192-5", + "nodeyear": 2019, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1121045652", + "attributes": { + "title": "Evolution of Floquet topological quantum states in driven semiconductors", + "doi": "10.1140/epjb/e2019-100087-0", + "nodeyear": 2019, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1121046991", + "attributes": { + "title": "Simulation of 1D Topological Phases in Driven Quantum Dot Arrays", + "doi": "10.1103/physrevlett.123.126401", + "nodeyear": 2019, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1121007947", + "attributes": { + "title": "Floquet approach to \u21242 lattice gauge theories with ultracold atoms in optical lattices", + "doi": "10.1038/s41567-019-0649-7", + "nodeyear": 2019, + "ref-by-count": 115, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1120955481", + "attributes": { + "title": "Phases Transitions in a Cross-Cavity Quantum Rabi Model Possessing PT Symmetric Structure", + "doi": "10.3389/fphy.2019.00127", + "nodeyear": 2019, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1120846795", + "attributes": { + "title": "Van Hove singularities and excited-state quantum phase transitions in graphene-like microwave billiards", + "doi": "10.1063/1.5124611", + "nodeyear": 2019, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1120846794", + "attributes": { + "title": "Excited-state quantum phase transitions in bosonic lattice systems", + "doi": "10.1063/1.5124610", + "nodeyear": 2019, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1120846792", + "attributes": { + "title": "Two-particle transfer intensities in excited-state quantum phase transition", + "doi": "10.1063/1.5124608", + "nodeyear": 2019, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1120846778", + "attributes": { + "title": "Excited-state quantum phase transitions in systems with many interacting spins-1/2", + "doi": "10.1063/1.5124594", + "nodeyear": 2019, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1120846773", + "attributes": { + "title": "Static vs. dynamic phases of quantum many-body systems", + "doi": "10.1063/1.5124589", + "nodeyear": 2019, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1120795450", + "attributes": { + "title": "Entanglement and excited-state quantum phase transition in an extended Dicke model", + "doi": "10.1007/s11467-019-0921-4", + "nodeyear": 2019, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1121403245", + "attributes": { + "title": "Prethermal quantum many-body Kapitza phases of periodically driven spin systems", + "doi": "10.1103/physrevb.100.104306", + "nodeyear": 2019, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1121334827", + "attributes": { + "title": "Topological Floquet engineering of twisted bilayer graphene", + "doi": "10.1103/physrevresearch.1.023031", + "nodeyear": 2019, + "ref-by-count": 26, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1121155174", + "attributes": { + "title": "The antiferromagnetic phase of the Floquet-driven Hubbard model", + "doi": "10.1103/physrevb.100.121110", + "nodeyear": 2019, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1120975898", + "attributes": { + "title": "Stroboscopic painting of optical potentials for atoms with subwavelength resolution", + "doi": "10.1103/physreva.100.033610", + "nodeyear": 2019, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1120721646", + "attributes": { + "title": "Floquet-Engineering Counterdiabatic Protocols in Quantum Many-Body Systems", + "doi": "10.1103/physrevlett.123.090602", + "nodeyear": 2019, + "ref-by-count": 56, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1120701000", + "attributes": { + "title": "Level repulsion and dynamics in the finite one-dimensional Anderson model", + "doi": "10.1103/physreve.100.022142", + "nodeyear": 2019, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1120398331", + "attributes": { + "title": "Realization of density-dependent Peierls phases to engineer quantized gauge fields coupled to ultracold matter", + "doi": "10.1038/s41567-019-0615-4", + "nodeyear": 2019, + "ref-by-count": 102, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1120211774", + "attributes": { + "title": "QuSpin: a Python package for dynamics and exact diagonalisation of quantum many body systems. Part II: bosons, fermions and higher spins", + "doi": "10.21468/scipostphys.7.2.020", + "nodeyear": 2019, + "ref-by-count": 68, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1120342145", + "attributes": { + "title": "Excited-state quantum phase transition and the quantum-speed-limit time", + "doi": "10.1103/physreva.100.022118", + "nodeyear": 2019, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1120310683", + "attributes": { + "title": "Nonequilibrium susceptibility in photoinduced Floquet states", + "doi": "10.1103/physrevb.100.075127", + "nodeyear": 2019, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1120248299", + "attributes": { + "title": "Quasiparticles of a periodically driven quantum dot coupled between superconducting and normal leads", + "doi": "10.1103/physrevb.100.085414", + "nodeyear": 2019, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1120211967", + "attributes": { + "title": "Light-induced d-wave superconductivity through Floquet-engineered Fermi surfaces in cuprates", + "doi": "10.1103/physrevb.100.075115", + "nodeyear": 2019, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1120144828", + "attributes": { + "title": "Dispersion-suppressed topological Thouless pumping", + "doi": "10.1103/physrevb.100.064302", + "nodeyear": 2019, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1129971658", + "attributes": { + "title": "QuSpin: a Python Package for Dynamics and Exact Diagonalisation of Quantum Many Body Systems. Part II: bosons, fermions and higher spins", + "doi": "10.21468/scipost.report.1085", + "nodeyear": 2019, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1120021739", + "attributes": { + "title": "Dynamical signatures of quantum chaos and relaxation time scales in a spin-boson system", + "doi": "10.1103/physreve.100.012218", + "nodeyear": 2019, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1120025014", + "attributes": { + "title": "Relaxation to Gaussian and generalized Gibbs states in systems of particles with quadratic Hamiltonians", + "doi": "10.1103/physreve.100.012146", + "nodeyear": 2019, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1122873965", + "attributes": { + "title": "Can Naturally Pulsating Prefilming Slurry Atomization Be Enhanced by Artificial External Modulation?", + "doi": "10.1115/ajkfluids2019-4882", + "nodeyear": 2019, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1129960633", + "attributes": { + "title": "QuSpin: a Python Package for Dynamics and Exact Diagonalisation of Quantum Many Body Systems. Part II: bosons, fermions and higher spins", + "doi": "10.21468/scipost.report.1065", + "nodeyear": 2019, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1118043792", + "attributes": { + "title": "How to Dress Radio-Frequency Photons with Tunable Momentum", + "doi": "10.1103/physrevlett.123.033203", + "nodeyear": 2019, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1120033159", + "attributes": { + "title": "Rabi-resonant behavior of periodically driven correlated fermion systems", + "doi": "10.1103/physrevb.100.041116", + "nodeyear": 2019, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1119959099", + "attributes": { + "title": "Nonlinear optical response of the \u03b1-T3 model due to the nontrivial topology of the band dispersion", + "doi": "10.1103/physrevb.100.035440", + "nodeyear": 2019, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1119952776", + "attributes": { + "title": "Analog of Hamilton-Jacobi theory for the time-evolution operator", + "doi": "10.1103/physreva.100.012132", + "nodeyear": 2019, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1119919209", + "attributes": { + "title": "Floquet-engineered quantum state manipulation in a noisy qubit", + "doi": "10.1103/physreva.100.012341", + "nodeyear": 2019, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1119787578", + "attributes": { + "title": "Non-Abelian geometric phases in periodically driven systems", + "doi": "10.1103/physreva.100.012127", + "nodeyear": 2019, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1119784980", + "attributes": { + "title": "Swift heat transfer by fast-forward driving in open quantum systems", + "doi": "10.1103/physreva.100.012126", + "nodeyear": 2019, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1118069090", + "attributes": { + "title": "Laser control of magnonic topological phases in antiferromagnets", + "doi": "10.1103/physrevb.100.014421", + "nodeyear": 2019, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1118014967", + "attributes": { + "title": "High-frequency expansion for Floquet prethermal phases with emergent symmetries: Application to time crystals and Floquet engineering", + "doi": "10.1103/physrevb.100.020301", + "nodeyear": 2019, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1118012672", + "attributes": { + "title": "Dynamical chaotic phases and constrained quantum dynamics", + "doi": "10.1103/physreva.100.012117", + "nodeyear": 2019, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1117972269", + "attributes": { + "title": "Strong frequency dependence of transport in the driven disordered central-site model", + "doi": "10.1103/physrevb.100.014201", + "nodeyear": 2019, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1117943417", + "attributes": { + "title": "Electron pumping in the strong coupling and non-Markovian regime: A reaction coordinate mapping approach", + "doi": "10.1103/physrevb.100.035109", + "nodeyear": 2019, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1117728688", + "attributes": { + "title": "Topologically protected braiding in a single wire using Floquet Majorana modes", + "doi": "10.1103/physrevb.100.041102", + "nodeyear": 2019, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1116648359", + "attributes": { + "title": "Accessing electromagnetic properties of matter with cylindrical vector beams", + "doi": "10.1088/1367-2630/ab26d1", + "nodeyear": 2019, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1113330752", + "attributes": { + "title": "Photo-induced Floquet Weyl magnons in noncollinear antiferromagnets", + "doi": "10.1016/j.aop.2019.04.003", + "nodeyear": 2019, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1113236708", + "attributes": { + "title": "Extreme matter in electromagnetic fields and rotation", + "doi": "10.1016/j.ppnp.2019.04.001", + "nodeyear": 2019, + "ref-by-count": 26, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1112366493", + "attributes": { + "title": "State-dependent act-and-wait time-delayed feedback control algorithm", + "doi": "10.1016/j.cnsns.2019.02.018", + "nodeyear": 2019, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1117476838", + "attributes": { + "title": "Exact Evaluation of Statistical Moments in Superradiant Emission", + "doi": "10.3390/mca24020066", + "nodeyear": 2019, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1117346459", + "attributes": { + "title": "Many-Body Localization in the Presence of a Central Qudit", + "doi": "10.1103/physrevlett.122.240402", + "nodeyear": 2019, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1117411673", + "attributes": { + "title": "Excited-state quantum phase transitions in systems with two degrees of freedom. III. Interacting boson systems", + "doi": "10.1103/physrevc.99.064323", + "nodeyear": 2019, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1117307345", + "attributes": { + "title": "Layered chaos in mean-field and quantum many-body dynamics", + "doi": "10.1103/physreva.99.063609", + "nodeyear": 2019, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1117164490", + "attributes": { + "title": "Electron pairing in nanostructures driven by an oscillating field", + "doi": "10.1103/physrevb.99.235416", + "nodeyear": 2019, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1117020737", + "attributes": { + "title": "Microscopic theory for the light-induced anomalous Hall effect in graphene", + "doi": "10.1103/physrevb.99.214302", + "nodeyear": 2019, + "ref-by-count": 71, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1116850435", + "attributes": { + "title": "Topology and localization of a periodically driven Kitaev model", + "doi": "10.1103/physrevb.99.235408", + "nodeyear": 2019, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1116136000", + "attributes": { + "title": "Single-scan acquisition of multiple multidimensional spectra", + "doi": "10.1364/optica.6.000735", + "nodeyear": 2019, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "09:0.33;10:0.33;02:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1115676205", + "attributes": { + "title": "Gravitational wave driving of a gapped holographic system", + "doi": "10.1007/jhep05(2019)161", + "nodeyear": 2019, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1115666769", + "attributes": { + "title": "Observation of scalable and deterministic multi-atom Dicke states in an atomic vapor", + "doi": "10.1364/ol.44.002795", + "nodeyear": 2019, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "02:0.60;09:0.40", + "level": "cite_l2" + } + }, + { + "id": "pub.1114819653", + "attributes": { + "title": "Method for Finding the Exact Effective Hamiltonian of Time\u2010Driven Quantum Systems", + "doi": "10.1002/andp.201900035", + "nodeyear": 2019, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1114044946", + "attributes": { + "title": "Magnonic Floquet Quantum Spin Hall Insulator in Bilayer Collinear Antiferromagnets", + "doi": "10.1038/s41598-019-43702-9", + "nodeyear": 2019, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1113910487", + "attributes": { + "title": "Observation of Anomalous \u03c0 Modes in Photonic Floquet Engineering", + "doi": "10.1103/physrevlett.122.173901", + "nodeyear": 2019, + "ref-by-count": 50, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1113910476", + "attributes": { + "title": "Quantum Spin Dynamics in Fock Space Following Quenches: Caustics and Vortices", + "doi": "10.1103/physrevlett.122.170402", + "nodeyear": 2019, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1114054109", + "attributes": { + "title": "Anatomy of skin modes and topology in non-Hermitian systems", + "doi": "10.1103/physrevb.99.201103", + "nodeyear": 2019, + "ref-by-count": 253, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1114042284", + "attributes": { + "title": "Floquet spin and spin-orbital Hamiltonians and doublon-holon generations in periodically driven Mott insulators", + "doi": "10.1103/physrevb.99.205111", + "nodeyear": 2019, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1110902421", + "attributes": { + "title": "Tunneling of two interacting atoms from excited states", + "doi": "10.1016/j.physe.2018.12.026", + "nodeyear": 2019, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1113484172", + "attributes": { + "title": "Measuring topology from dynamics by obtaining the Chern number from a linking number", + "doi": "10.1038/s41467-019-09668-y", + "nodeyear": 2019, + "ref-by-count": 93, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1113409952", + "attributes": { + "title": "Quantum localization bounds Trotter errors in digital quantum simulation", + "doi": "10.1126/sciadv.aau8342", + "nodeyear": 2019, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1112781951", + "attributes": { + "title": "Emergence of photo-induced multiple topological phases on square-octagon lattice", + "doi": "10.1088/1361-648x/ab1026", + "nodeyear": 2019, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1110424594", + "attributes": { + "title": "Cavity-QED interactions of several atoms", + "doi": "10.1088/1361-6455/aaf6d7", + "nodeyear": 2019, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1115224353", + "attributes": { + "title": "Flow Equation Approach to Periodically Driven Quantum Systems", + "doi": "10.1103/physrevx.9.021037", + "nodeyear": 2019, + "ref-by-count": 42, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1114045023", + "attributes": { + "title": "Prethermalization and Thermalization in Isolated Quantum Systems", + "doi": "10.1103/physrevx.9.021027", + "nodeyear": 2019, + "ref-by-count": 69, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1113678661", + "attributes": { + "title": "Effect of noise on Bloch oscillations and Wannier-Stark localization", + "doi": "10.1103/physrevb.99.155149", + "nodeyear": 2019, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1113626564", + "attributes": { + "title": "Quantum phase transitions triggered by a four-level atomic system in dissipative environments", + "doi": "10.1103/physreva.99.043829", + "nodeyear": 2019, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1113308230", + "attributes": { + "title": "Accelerating adiabatic protocols for entangling two qubits in circuit QED", + "doi": "10.1103/physreva.99.042315", + "nodeyear": 2019, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1116854479", + "attributes": { + "title": "Exponential Bound for the Heating Rate of Periodically Driven Spin Systems", + "doi": "10.1134/s1063776119030130", + "nodeyear": 2019, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1111062357", + "attributes": { + "title": "Multipartite-entanglement tomography of a quantum simulator", + "doi": "10.1088/1367-2630/aafb8c", + "nodeyear": 2019, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1112264021", + "attributes": { + "title": "Manipulating Cooper pairs with a controllable momentum in periodically driven degenerate Fermi gases", + "doi": "10.1088/1361-6455/ab08df", + "nodeyear": 2019, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1112736421", + "attributes": { + "title": "Parametric Heating in a 2D Periodically Driven Bosonic System: Beyond the Weakly Interacting Regime", + "doi": "10.1103/physrevx.9.011047", + "nodeyear": 2019, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1112555157", + "attributes": { + "title": "Optical control of competing exchange interactions and coherent spin-charge coupling in two-orbital Mott insulators", + "doi": "10.21468/scipostphys.6.3.027", + "nodeyear": 2019, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1112989773", + "attributes": { + "title": "Topological frequency conversion in a driven dissipative quantum cavity", + "doi": "10.1103/physrevb.99.094311", + "nodeyear": 2019, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1112941993", + "attributes": { + "title": "Photonic Floquet topological insulators with fluctuations and disorders", + "doi": "10.1103/physreva.99.033844", + "nodeyear": 2019, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1112857110", + "attributes": { + "title": "Work exchange, geometric magnetization, and fluctuation-dissipation relations in a quantum dot under adiabatic magnetoelectric driving", + "doi": "10.1103/physrevb.99.115424", + "nodeyear": 2019, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1112687817", + "attributes": { + "title": "Optically induced topological states on the surface of mercury telluride", + "doi": "10.1103/physrevb.99.115411", + "nodeyear": 2019, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1112472200", + "attributes": { + "title": "Quantum simulation of multiphoton and nonlinear dissipative spin-boson models", + "doi": "10.1103/physreva.99.032303", + "nodeyear": 2019, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1112465992", + "attributes": { + "title": "Topological classification of quasiperiodically driven quantum systems", + "doi": "10.1103/physrevb.99.064306", + "nodeyear": 2019, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1112265114", + "attributes": { + "title": "Control of quantum dynamics of electron transfer in molecular loop structures: Spontaneous breaking of chiral symmetry under strong decoherence", + "doi": "10.1103/physrevb.99.064301", + "nodeyear": 2019, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1112062976", + "attributes": { + "title": "Engineering Dirac states in graphene: Coexisting type-I and type-II Floquet-Dirac fermions", + "doi": "10.1103/physrevb.99.075121", + "nodeyear": 2019, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1111443711", + "attributes": { + "title": "Integrable spin-${\\frac{1}{2}}$ Richardson\u2013Gaudin XYZ models in an arbitrary magnetic field", + "doi": "10.1088/1751-8121/aafe9b", + "nodeyear": 2019, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1111540938", + "attributes": { + "title": "Reducibility for a fast-driven linear Klein\u2013Gordon equation", + "doi": "10.1007/s10231-019-00823-2", + "nodeyear": 2019, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1111440115", + "attributes": { + "title": "Quantum and Classical Lyapunov Exponents in Atom-Field Interaction Systems", + "doi": "10.1103/physrevlett.122.024101", + "nodeyear": 2019, + "ref-by-count": 80, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1111323071", + "attributes": { + "title": "Asymptotic Prethermalization in Periodically Driven Classical Spin Chains", + "doi": "10.1103/physrevlett.122.010602", + "nodeyear": 2019, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1110719005", + "attributes": { + "title": "Reversible to irreversible transitions in periodically driven skyrmion systems", + "doi": "10.1088/1367-2630/aaf8dd", + "nodeyear": 2019, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1112988887", + "attributes": { + "title": "Topological photonics", + "doi": "10.1103/revmodphys.91.015006", + "nodeyear": 2019, + "ref-by-count": 1179, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1111668834", + "attributes": { + "title": "Fibonacci steady states in a driven integrable quantum system", + "doi": "10.1103/physrevb.99.020306", + "nodeyear": 2019, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1111666460", + "attributes": { + "title": "Optimization of quantized charge pumping using full counting statistics", + "doi": "10.1103/physrevb.99.035437", + "nodeyear": 2019, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1111515569", + "attributes": { + "title": "Floquet engineering in superconducting circuits: From arbitrary spin-spin interactions to the Kitaev honeycomb model", + "doi": "10.1103/physreva.99.012333", + "nodeyear": 2019, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1111459176", + "attributes": { + "title": "Impact of nonequilibrium fluctuations on prethermal dynamical phase transitions in long-range interacting spin chains", + "doi": "10.1103/physrevb.99.045128", + "nodeyear": 2019, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1111314608", + "attributes": { + "title": "Engineering bilinear mode coupling in circuit QED: Theory and experiment", + "doi": "10.1103/physreva.99.012314", + "nodeyear": 2019, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1111062951", + "attributes": { + "title": "Edge and bulk localization of Floquet topological superconductors", + "doi": "10.1103/physrevb.99.014301", + "nodeyear": 2019, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1110909831", + "attributes": { + "title": "Communication: Gibbs phenomenon and the emergence of the steady-state in quantum transport", + "doi": "10.1063/1.5061759", + "nodeyear": 2018, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1110787100", + "attributes": { + "title": "Bloch oscillation of Weyl metal along synthetic dimensions", + "doi": "10.1088/1674-1056/27/12/126701", + "nodeyear": 2018, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1110647887", + "attributes": { + "title": "Floquet Engineering of Quantum Materials", + "doi": "10.1146/annurev-conmatphys-031218-013423", + "nodeyear": 2018, + "ref-by-count": 240, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1110455993", + "attributes": { + "title": "Floquet Dynamics in Driven Fermi-Hubbard Systems", + "doi": "10.1103/physrevlett.121.233603", + "nodeyear": 2018, + "ref-by-count": 51, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1110379274", + "attributes": { + "title": "Floquet Mechanism for Non-Abelian Fractional Quantum Hall States", + "doi": "10.1103/physrevlett.121.237401", + "nodeyear": 2018, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1110363972", + "attributes": { + "title": "Experimental Demonstration of Dynamical Input Isolation in Nonadiabatically Modulated Photonic Cavities", + "doi": "10.1021/acsphotonics.8b01310", + "nodeyear": 2018, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1110910541", + "attributes": { + "title": "Steady states of a quasiperiodically driven integrable system", + "doi": "10.1103/physrevb.98.245144", + "nodeyear": 2018, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1110910519", + "attributes": { + "title": "Transient Floquet engineering of superconductivity", + "doi": "10.1103/physrevb.98.235149", + "nodeyear": 2018, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1110831877", + "attributes": { + "title": "Ergodic-localized junctions in periodically driven systems", + "doi": "10.1103/physrevb.98.224307", + "nodeyear": 2018, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1110708995", + "attributes": { + "title": "Reinforcement learning for autonomous preparation of Floquet-engineered states: Inverting the quantum Kapitza oscillator", + "doi": "10.1103/physrevb.98.224305", + "nodeyear": 2018, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1110396032", + "attributes": { + "title": "Photocontrol of magnetic structure in an itinerant magnet", + "doi": "10.1103/physrevb.98.214408", + "nodeyear": 2018, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1110269247", + "attributes": { + "title": "Light-Induced Coherence in an Atom-Cavity System", + "doi": "10.1103/physrevlett.121.220405", + "nodeyear": 2018, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1110275806", + "attributes": { + "title": "From Linear to Nonlinear Responses of Thermal Pure Quantum States", + "doi": "10.1103/physrevlett.121.220601", + "nodeyear": 2018, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1107970491", + "attributes": { + "title": "Relaxation, chaos, and thermalization in a three-mode model of a Bose\u2013Einstein condensate", + "doi": "10.1088/1367-2630/aaed68", + "nodeyear": 2018, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1110072642", + "attributes": { + "title": "Strong disorder RG approach \u2013 a short review of recent developments", + "doi": "10.1140/epjb/e2018-90434-8", + "nodeyear": 2018, + "ref-by-count": 39, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1111914501", + "attributes": { + "title": "Effective Schrodinger equation for one-dimensional systems with rapidly oscillating boundary conditions", + "doi": "10.1109/icumt.2018.8631204", + "nodeyear": 2018, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1110266071", + "attributes": { + "title": "Nonequilibrium selection of magnetic order in a driven triangular XY antiferromagnet", + "doi": "10.1103/physrevb.98.184432", + "nodeyear": 2018, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1109811573", + "attributes": { + "title": "Strong-disorder renormalization group for periodically driven systems", + "doi": "10.1103/physrevb.98.174203", + "nodeyear": 2018, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1109804585", + "attributes": { + "title": "Adaptive rotating-wave approximation for driven open quantum systems", + "doi": "10.1103/physreva.98.052111", + "nodeyear": 2018, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1108054136", + "attributes": { + "title": "Quantization of the Hall conductivity in the Harper-Hofstadter model", + "doi": "10.1103/physrevb.98.205112", + "nodeyear": 2018, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1108034986", + "attributes": { + "title": "Flat bands and dynamical localization of spin-orbit-coupled Bose-Einstein condensates", + "doi": "10.1103/physreva.98.053606", + "nodeyear": 2018, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1107871386", + "attributes": { + "title": "Berry Phases in Electronic Structure Theory", + "doi": "10.1017/9781316662205", + "nodeyear": 2018, + "ref-by-count": 159, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1107130576", + "attributes": { + "title": "Analytical description of the survival probability of coherent states in regular regimes", + "doi": "10.1088/1751-8121/aae2c3", + "nodeyear": 2018, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1107306817", + "attributes": { + "title": "Valley controlled spin-transfer torque in ferromagnetic graphene junctions", + "doi": "10.1088/1367-2630/aae513", + "nodeyear": 2018, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1107571622", + "attributes": { + "title": "Dynamical Control of Order in a Cavity-BEC System", + "doi": "10.1103/physrevlett.121.153001", + "nodeyear": 2018, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1107951663", + "attributes": { + "title": "Floquet analysis of a fractal-spectrum-generating periodically driven quantum system", + "doi": "10.1103/physreve.98.042217", + "nodeyear": 2018, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1107651369", + "attributes": { + "title": "Interplay of Floquet Lifshitz transitions and topological transitions in bilayer Dirac materials", + "doi": "10.1103/physrevb.98.165406", + "nodeyear": 2018, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1107651305", + "attributes": { + "title": "Detection of emitter-resonator coupling strength in the quantum Rabi model via an auxiliary resonator", + "doi": "10.1103/physreva.98.043812", + "nodeyear": 2018, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1107350062", + "attributes": { + "title": "Ab initio nonrelativistic quantum electrodynamics: Bridging quantum chemistry and quantum optics from weak to strong coupling", + "doi": "10.1103/physreva.98.043801", + "nodeyear": 2018, + "ref-by-count": 65, + "is_input_DOI": false, + "category_for": "03:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1107301894", + "attributes": { + "title": "Floquet\u2013Gibbs state in open quantum systems", + "doi": "10.1140/epjst/e2018-00087-1", + "nodeyear": 2018, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1107298680", + "attributes": { + "title": "Stabilization by dissipation and stochastic resonant activation in quantum metastable systems", + "doi": "10.1140/epjst/e2018-00121-x", + "nodeyear": 2018, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1107235090", + "attributes": { + "title": "Connecting nth order generalised quantum Rabi models: Emergence of nonlinear spin-boson coupling via spin rotations", + "doi": "10.1038/s41534-018-0096-9", + "nodeyear": 2018, + "ref-by-count": 26, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1106476468", + "attributes": { + "title": "Floquet perturbation theory: formalism and application to low-frequency limit", + "doi": "10.1088/1367-2630/aade37", + "nodeyear": 2018, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1107130953", + "attributes": { + "title": "Stability of Periodically Driven Topological Phases against Disorder", + "doi": "10.1103/physrevlett.121.126803", + "nodeyear": 2018, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1103720457", + "attributes": { + "title": "Artificial gauge fields and topology with ultracold atoms in optical lattices", + "doi": "10.1088/1361-6455/aac120", + "nodeyear": 2018, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1106352877", + "attributes": { + "title": "Floquet stroboscopic divisibility in non-Markovian dynamics", + "doi": "10.1088/1367-2630/aadcbd", + "nodeyear": 2018, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1106711291", + "attributes": { + "title": "From few- to many-body quantum systems", + "doi": "10.1088/2058-9565/aad913", + "nodeyear": 2018, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1106608664", + "attributes": { + "title": "Floquet Engineering of Multiorbital Mott Insulators: Applications to Orthorhombic Titanates", + "doi": "10.1103/physrevlett.121.107201", + "nodeyear": 2018, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1107231743", + "attributes": { + "title": "Spin-dependent Andreev reflection in spin-orbit coupled systems by breaking time-reversal symmetry", + "doi": "10.1103/physrevb.98.125424", + "nodeyear": 2018, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1106912640", + "attributes": { + "title": "Floquet prethermalization in periodically driven classical spin systems", + "doi": "10.1103/physrevb.98.104303", + "nodeyear": 2018, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1106809654", + "attributes": { + "title": "Charge density wave and charge pump of interacting fermions in circularly shaken hexagonal optical lattices", + "doi": "10.1103/physreva.98.033601", + "nodeyear": 2018, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1106602075", + "attributes": { + "title": "Floquet scattering theory based on effective Hamiltonians of driven systems", + "doi": "10.1103/physrevb.98.121101", + "nodeyear": 2018, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1106159222", + "attributes": { + "title": "Artificial gauge fields in materials and engineered systems", + "doi": "10.1016/j.crhy.2018.03.002", + "nodeyear": 2018, + "ref-by-count": 100, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1105306956", + "attributes": { + "title": "High fidelity Dicke-state generation with Lyapunov control in circuit QED system", + "doi": "10.1016/j.aop.2018.07.005", + "nodeyear": 2018, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1104255664", + "attributes": { + "title": "Driven dissipative dynamics and topology of quantum impurity systems", + "doi": "10.1016/j.crhy.2018.04.003", + "nodeyear": 2018, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1106352452", + "attributes": { + "title": "A microscopic Kapitza pendulum", + "doi": "10.1038/s41598-018-31392-8", + "nodeyear": 2018, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1106412628", + "attributes": { + "title": "Floquet quantum criticality", + "doi": "10.1073/pnas.1805796115", + "nodeyear": 2018, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1106276823", + "attributes": { + "title": "Spin Polarization through Floquet Resonances in a Driven Central Spin Model", + "doi": "10.1103/physrevlett.121.080401", + "nodeyear": 2018, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1105481744", + "attributes": { + "title": "Wiseman\u2013Milburn control for the Lipkin\u2013Meshkov\u2013Glick model", + "doi": "10.1088/1751-8121/aad2c3", + "nodeyear": 2018, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1106081003", + "attributes": { + "title": "Asymptotic Floquet states of a periodically driven spin-boson system in the nonperturbative coupling regime", + "doi": "10.1103/physreve.98.022111", + "nodeyear": 2018, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1105993631", + "attributes": { + "title": "Exploring the possibilities of dynamical quantum phase transitions in the presence of a Markovian bath", + "doi": "10.1038/s41598-018-30377-x", + "nodeyear": 2018, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1107206378", + "attributes": { + "title": "Non-equilibrium Dynamical Mean-Field Theory", + "doi": "10.1007/978-3-319-42913-7_1-1", + "nodeyear": 2018, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1105647673", + "attributes": { + "title": "Strong light-field effects driven by nearly single-cycle 7 fs light-field in correlated organic conductors", + "doi": "10.1088/1361-6455/aad40a", + "nodeyear": 2018, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1106391022", + "attributes": { + "title": "Magnus expansion for a chirped quantum two-level system", + "doi": "10.1103/physreva.98.023855", + "nodeyear": 2018, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1106258757", + "attributes": { + "title": "Fate of current, residual energy, and entanglement entropy in aperiodic driving of one-dimensional Jordan-Wigner integrable models", + "doi": "10.1103/physrevb.98.064305", + "nodeyear": 2018, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1105855817", + "attributes": { + "title": "From the Keldysh Formalism to Non-equilibrium Dynamical Mean-Field Theory", + "doi": "10.1007/978-3-319-94956-7_3", + "nodeyear": 2018, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1105571339", + "attributes": { + "title": "Generation of atypical hopping and interactions by kinetic driving", + "doi": "10.1088/1367-2630/aad376", + "nodeyear": 2018, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1105686278", + "attributes": { + "title": "Universal Fluctuations of Floquet Topological Invariants at Low Frequencies", + "doi": "10.1103/physrevlett.121.036402", + "nodeyear": 2018, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1105624464", + "attributes": { + "title": "Anomalous Thermalization in Quantum Collective Models", + "doi": "10.1103/physrevlett.121.030602", + "nodeyear": 2018, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1105577723", + "attributes": { + "title": "Violent relaxation in quantum fluids with long-range interactions", + "doi": "10.1103/physreve.98.012112", + "nodeyear": 2018, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1107278146", + "attributes": { + "title": "Reinforcement Learning in Different Phases of Quantum Control", + "doi": "10.1103/physrevx.8.031086", + "nodeyear": 2018, + "ref-by-count": 163, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1105919059", + "attributes": { + "title": "Dynamical localization-delocalization crossover in the Aubry-Andr\u00e9-Harper model", + "doi": "10.1103/physreva.98.013635", + "nodeyear": 2018, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1105752007", + "attributes": { + "title": "Quantum quench dynamics in Dicke superradiance models", + "doi": "10.1103/physreva.98.013836", + "nodeyear": 2018, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1105686214", + "attributes": { + "title": "Probing microscopic models for system-bath interactions via parametric driving", + "doi": "10.1103/physreva.98.012122", + "nodeyear": 2018, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1105672523", + "attributes": { + "title": "Overcoming dispersive spreading of quantum wave packets via periodic nonlinear kicking", + "doi": "10.1103/physreva.98.013620", + "nodeyear": 2018, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1105590292", + "attributes": { + "title": "Ground-state phase diagram of the one-dimensional t-J model with pair hopping terms", + "doi": "10.1103/physrevb.98.035116", + "nodeyear": 2018, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1105590279", + "attributes": { + "title": "Observation of Floquet bands in driven spin-orbit-coupled Fermi gases", + "doi": "10.1103/physreva.98.013615", + "nodeyear": 2018, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1105217433", + "attributes": { + "title": "Entanglement in Finite Quantum Systems Under Twisted Boundary Conditions", + "doi": "10.1007/s13538-018-0587-3", + "nodeyear": 2018, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1104382572", + "attributes": { + "title": "Strong disorder renormalization for the dynamics of many-body-localized systems: iterative elimination of the fastest degree of freedom via the Floquet expansion", + "doi": "10.1088/1751-8121/aac672", + "nodeyear": 2018, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1105237498", + "attributes": { + "title": "Solid-state magnetic traps and lattices", + "doi": "10.1103/physrevb.97.235451", + "nodeyear": 2018, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1105229539", + "attributes": { + "title": "NOON state of Bose atoms in the double-well potential via an excited-state quantum phase transition", + "doi": "10.1103/physreva.97.063624", + "nodeyear": 2018, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1105020595", + "attributes": { + "title": "Lindblad-Floquet description of finite-time quantum heat engines", + "doi": "10.1103/physreva.97.062121", + "nodeyear": 2018, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1104999161", + "attributes": { + "title": "Floquet Quantum Simulation with Superconducting Qubits", + "doi": "10.1103/physrevapplied.9.064029", + "nodeyear": 2018, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1104586548", + "attributes": { + "title": "Onset of Floquet thermalization", + "doi": "10.1103/physrevb.97.245122", + "nodeyear": 2018, + "ref-by-count": 41, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1104337736", + "attributes": { + "title": "Heating in Integrable Time-Periodic Systems", + "doi": "10.1103/physrevlett.120.220602", + "nodeyear": 2018, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1104046499", + "attributes": { + "title": "From quantum heat engines to laser cooling: Floquet theory beyond the Born\u2013Markov approximation", + "doi": "10.1088/1367-2630/aac583", + "nodeyear": 2018, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1104217963", + "attributes": { + "title": "Floquet Supersymmetry", + "doi": "10.1103/physrevlett.120.210603", + "nodeyear": 2018, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1104046048", + "attributes": { + "title": "Quantum transition probabilities during a perturbing pulse: Differences between the nonadiabatic results and Fermi\u2019s golden rule forms", + "doi": "10.1063/1.5019172", + "nodeyear": 2018, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1104174226", + "attributes": { + "title": "Replica Resummation of the Baker-Campbell-Hausdorff Series", + "doi": "10.1103/physrevlett.120.200607", + "nodeyear": 2018, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1103957661", + "attributes": { + "title": "Integrable Time-Dependent Quantum Hamiltonians", + "doi": "10.1103/physrevlett.120.190402", + "nodeyear": 2018, + "ref-by-count": 29, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1103891869", + "attributes": { + "title": "Resonant Thermalization of Periodically Driven Strongly Correlated Electrons", + "doi": "10.1103/physrevlett.120.197601", + "nodeyear": 2018, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1104244423", + "attributes": { + "title": "Exact results for the Floquet coin toss for driven integrable models", + "doi": "10.1103/physrevb.97.184308", + "nodeyear": 2018, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1104186237", + "attributes": { + "title": "Effects of quantum coherence on work statistics", + "doi": "10.1103/physreva.97.052122", + "nodeyear": 2018, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1103957640", + "attributes": { + "title": "Low-frequency phase diagram of irradiated graphene and a periodically driven spin-12 XY chain", + "doi": "10.1103/physrevb.97.205415", + "nodeyear": 2018, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1103957630", + "attributes": { + "title": "Floquet topological polaritons in semiconductor microcavities", + "doi": "10.1103/physrevb.97.195305", + "nodeyear": 2018, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1103799511", + "attributes": { + "title": "Concurrence of dynamical phase transitions at finite temperature in the fully connected transverse-field Ising model", + "doi": "10.1103/physrevb.97.174401", + "nodeyear": 2018, + "ref-by-count": 45, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1105625178", + "attributes": { + "title": "On the Effect of an Inhomogeneous Magnetic Field on High-Frequency Asymptotic Behaviors of Correlation Functions of Spin Lattices", + "doi": "10.1134/s002136401809014x", + "nodeyear": 2018, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1103354626", + "attributes": { + "title": "Topological Floquet-Thouless Energy Pump", + "doi": "10.1103/physrevlett.120.150601", + "nodeyear": 2018, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1103223307", + "attributes": { + "title": "Probing the strongly driven spin-boson model in a superconducting quantum circuit", + "doi": "10.1038/s41467-018-03626-w", + "nodeyear": 2018, + "ref-by-count": 47, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1101044952", + "attributes": { + "title": "Dynamical quantum phase transitions: a review", + "doi": "10.1088/1361-6633/aaaf9a", + "nodeyear": 2018, + "ref-by-count": 245, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1101270698", + "attributes": { + "title": "Parametric instabilities in resonantly-driven Bose\u2013Einstein condensates", + "doi": "10.1088/2058-9565/aab2b9", + "nodeyear": 2018, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1100407275", + "attributes": { + "title": "Floquet many-body engineering: topology and many-body physics in phase space lattices", + "doi": "10.1088/1367-2630/aaa7c3", + "nodeyear": 2018, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1106249535", + "attributes": { + "title": "Stabilizing effect of driving and dissipation on quantum metastable states", + "doi": "10.1103/physreva.97.042109", + "nodeyear": 2018, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1106243826", + "attributes": { + "title": "Floquet Weyl semimetals in light-irradiated type-II and hybrid line-node semimetals", + "doi": "10.1103/physrevb.97.155152", + "nodeyear": 2018, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1103695948", + "attributes": { + "title": "Semiconductor quantum well irradiated by a two-mode electromagnetic field as a terahertz emitter", + "doi": "10.1103/physreva.97.043860", + "nodeyear": 2018, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1103614809", + "attributes": { + "title": "Floquet protocols of adiabatic state flips and reallocation of exceptional points", + "doi": "10.1103/physreva.97.042119", + "nodeyear": 2018, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1103567271", + "attributes": { + "title": "Dynamical quantum phase transitions in extended transverse Ising models", + "doi": "10.1103/physrevb.97.134306", + "nodeyear": 2018, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1103567269", + "attributes": { + "title": "Floquet-Network Theory of Nonreciprocal Transport", + "doi": "10.1103/physrevapplied.9.044031", + "nodeyear": 2018, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "09:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1103567266", + "attributes": { + "title": "Nonadiabatic effects in periodically driven dissipative open quantum systems", + "doi": "10.1103/physreva.97.043851", + "nodeyear": 2018, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1103476382", + "attributes": { + "title": "At the Limits of Criticality-Based Quantum Metrology: Apparent Super-Heisenberg Scaling Revisited", + "doi": "10.1103/physrevx.8.021022", + "nodeyear": 2018, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1103285503", + "attributes": { + "title": "Vlasov dynamics of periodically driven systems", + "doi": "10.1063/1.5026159", + "nodeyear": 2018, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1101728734", + "attributes": { + "title": "Floquet Engineering in Quantum Chains", + "doi": "10.1103/physrevlett.120.127601", + "nodeyear": 2018, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1101728724", + "attributes": { + "title": "Periodically Driven Array of Single Rydberg Atoms", + "doi": "10.1103/physrevlett.120.123204", + "nodeyear": 2018, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1101699045", + "attributes": { + "title": "Well-Known Distinctive Signatures of Quantum Phase Transition in Shape Coexistence Configuration of Nuclei", + "doi": "10.1007/s13538-018-0561-0", + "nodeyear": 2018, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1101635473", + "attributes": { + "title": "Subexponentially Growing Hilbert Space and Nonconcentrating Distributions in a Constrained Spin Model", + "doi": "10.1007/s10955-018-2016-y", + "nodeyear": 2018, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1101459080", + "attributes": { + "title": "Photoinduced Topological Phase Transitions in Topological Magnon Insulators", + "doi": "10.1038/s41598-018-22779-8", + "nodeyear": 2018, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1100249419", + "attributes": { + "title": "Zero refractive index in time-Floquet acoustic metamaterials", + "doi": "10.1063/1.5006542", + "nodeyear": 2018, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1101875909", + "attributes": { + "title": "Photonic realization of a transition to a strongly driven Floquet topological phase", + "doi": "10.1103/physreva.97.031801", + "nodeyear": 2018, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1101865179", + "attributes": { + "title": "Simulating magnetic fields in Rydberg-dressed neutral atoms", + "doi": "10.1103/physreva.97.033414", + "nodeyear": 2018, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1101787426", + "attributes": { + "title": "Amplified and tunable transverse and longitudinal spin-photon coupling in hybrid circuit-QED", + "doi": "10.1103/physrevb.97.125429", + "nodeyear": 2018, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1101568086", + "attributes": { + "title": "Nonequilibrium steady states and resonant tunneling in time-periodically driven systems with interactions", + "doi": "10.1103/physrevb.97.125115", + "nodeyear": 2018, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1101270671", + "attributes": { + "title": "Floquet high Chern insulators in periodically driven chirally stacked multilayer graphene", + "doi": "10.1088/1367-2630/aab2c7", + "nodeyear": 2018, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1101203202", + "attributes": { + "title": "Realizing the Haldane Phase with Bosons in Optical Lattices", + "doi": "10.1103/physrevlett.120.085301", + "nodeyear": 2018, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1101164938", + "attributes": { + "title": "Control of Excitation Energy Transfer in Condensed Phase Molecular Systems by Floquet Engineering", + "doi": "10.1021/acs.jpclett.8b00067", + "nodeyear": 2018, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1101163815", + "attributes": { + "title": "Floquet Engineered Quadri-partite Lattice System as an Extension of the Topological Haldane Model", + "doi": "10.7566/jpsj.87.034711", + "nodeyear": 2018, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1100978693", + "attributes": { + "title": "Optical Trapping of Electrons in Graphene", + "doi": "10.1021/acsphotonics.7b01394", + "nodeyear": 2018, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:0.60;09:0.40", + "level": "cite_l2" + } + }, + { + "id": "pub.1086256884", + "attributes": { + "title": "Physics of muscle contraction", + "doi": "10.1088/1361-6633/aa7b9e", + "nodeyear": 2018, + "ref-by-count": 29, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1101132622", + "attributes": { + "title": "Statistical speed of quantum states: Generalized quantum Fisher information and Schatten speed", + "doi": "10.1103/physreva.97.022109", + "nodeyear": 2018, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1101046754", + "attributes": { + "title": "Nonlinear quantum Rabi model in trapped ions", + "doi": "10.1103/physreva.97.023624", + "nodeyear": 2018, + "ref-by-count": 29, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1100847489", + "attributes": { + "title": "Floquet topological phase transitions in a kicked Haldane-Chern insulator", + "doi": "10.1103/physrevb.97.085405", + "nodeyear": 2018, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1100847484", + "attributes": { + "title": "Symmetry breaking and the fermionic fractional Chern insulator in topologically trivial bands", + "doi": "10.1103/physrevb.97.085108", + "nodeyear": 2018, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1100693529", + "attributes": { + "title": "Isospin degree of freedom in even-even 68-76Ge and 62-70Zn isotopes", + "doi": "10.1140/epja/i2018-12448-y", + "nodeyear": 2018, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1100658085", + "attributes": { + "title": "Analogies of the classical Euler top with a rotor to spin squeezing and quantum phase transitions in a generalized Lipkin-Meshkov-Glick model", + "doi": "10.1038/s41598-018-20486-y", + "nodeyear": 2018, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1100590718", + "attributes": { + "title": "Enhancement and sign change of magnetic correlations in a driven quantum many-body system", + "doi": "10.1038/nature25135", + "nodeyear": 2018, + "ref-by-count": 87, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1100333755", + "attributes": { + "title": "Exceptional points near first- and second-order quantum phase transitions", + "doi": "10.1103/physreve.97.012112", + "nodeyear": 2018, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1100180200", + "attributes": { + "title": "Drive-induced delocalization in the Aubry-Andr\u00e9 model", + "doi": "10.1103/physreve.97.010101", + "nodeyear": 2018, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1100757504", + "attributes": { + "title": "Controllable continuous evolution of electronic states in a single quantum ring", + "doi": "10.1103/physrevb.97.041304", + "nodeyear": 2018, + "ref-by-count": 29, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1100700491", + "attributes": { + "title": "Absence of thermalization in finite isolated interacting Floquet systems", + "doi": "10.1103/physrevb.97.014311", + "nodeyear": 2018, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1100502468", + "attributes": { + "title": "Floquet band structure of a semi-Dirac system", + "doi": "10.1103/physrevb.97.035422", + "nodeyear": 2018, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1100502449", + "attributes": { + "title": "Dissipative phase transition in the open quantum Rabi model", + "doi": "10.1103/physreva.97.013825", + "nodeyear": 2018, + "ref-by-count": 46, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1101180204", + "attributes": { + "title": "A New First-Order Phase Transition for an Extended Jaynes\u2013Cummings\u2013Dicke Model with a High-Finesse Optical Cavity in the BEC System\u2020", + "doi": "10.1007/s10946-018-9686-4", + "nodeyear": 2018, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1092917025", + "attributes": { + "title": "Resonance enhancement of two photon absorption by magnetically trapped atoms in strong rf-fields", + "doi": "10.1016/j.physleta.2017.11.016", + "nodeyear": 2018, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1109707572", + "attributes": { + "title": "Statistical Benchmarks for Quantum Transport in Complex Systems, From Characterisation to Design", + "doi": "10.1007/978-3-319-93151-7", + "nodeyear": 2018, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1109706437", + "attributes": { + "title": "Equilibrium and Nonequilibrium Aspects of Phase Transitions in Quantum Physics", + "doi": "10.1007/978-3-030-00653-2", + "nodeyear": 2018, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1093034781", + "attributes": { + "title": "Special issue on addressing many-body problems with cold atoms and molecules", + "doi": "10.1088/1361-6455/aa9d13", + "nodeyear": 2017, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:0.60;03:0.40", + "level": "cite_l2" + } + }, + { + "id": "pub.1100299734", + "attributes": { + "title": "Quantum phase transition in an effective three-mode model of interacting bosons", + "doi": "10.1103/physreve.96.062146", + "nodeyear": 2017, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1099619049", + "attributes": { + "title": "Excited-state quantum phase transitions and their manifestations in an extended Dicke model", + "doi": "10.1063/1.5016143", + "nodeyear": 2017, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1099750796", + "attributes": { + "title": "Doublon-Holon Origin of the Subpeaks at the Hubbard Band Edges", + "doi": "10.1103/physrevlett.119.236402", + "nodeyear": 2017, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1101194950", + "attributes": { + "title": "Floquet prethermalization in the resonantly driven Hubbard model", + "doi": "10.1209/0295-5075/120/57001", + "nodeyear": 2017, + "ref-by-count": 31, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1099750800", + "attributes": { + "title": "Generalized Schrieffer-Wolff transformation of multiflavor Hubbard models", + "doi": "10.1103/physrevb.96.245106", + "nodeyear": 2017, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1093118725", + "attributes": { + "title": "Magnetic field fluctuations analysis for the ion trap implementation of the quantum Rabi model in the deep strong coupling regime", + "doi": "10.1080/09500340.2017.1404651", + "nodeyear": 2017, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1099862024", + "attributes": { + "title": "Collectivity and Periodic Orbits in a Chain of Interacting, Kicked Spins", + "doi": "10.12693/aphyspola.132.1661", + "nodeyear": 2017, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1093100577", + "attributes": { + "title": "Computation of the asymptotic states of modulated open quantum systems with a numerically exact realization of the quantum trajectory method", + "doi": "10.1103/physreve.96.053313", + "nodeyear": 2017, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1092756070", + "attributes": { + "title": "Experimentally simulating the dynamics of quantum light and matter at deep-strong coupling", + "doi": "10.1038/s41467-017-01061-x", + "nodeyear": 2017, + "ref-by-count": 123, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1092770968", + "attributes": { + "title": "Nonequilibrium Quantum Dynamics of Many-Body Systems", + "doi": "10.1007/978-3-319-68109-2_12", + "nodeyear": 2017, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1092687423", + "attributes": { + "title": "Increasing Performance of the Quantum Trajectory Method by Grouping Trajectories", + "doi": "10.1007/978-3-319-71255-0_11", + "nodeyear": 2017, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1092561474", + "attributes": { + "title": "Thermodynamic cost for classical counterdiabatic driving", + "doi": "10.1103/physreve.96.052107", + "nodeyear": 2017, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1092277819", + "attributes": { + "title": "Valley-selective topologically ordered states in irradiated bilayer graphene", + "doi": "10.1088/2053-1583/aa9471", + "nodeyear": 2017, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1092881230", + "attributes": { + "title": "Mixed state dynamical quantum phase transitions", + "doi": "10.1103/physrevb.96.180303", + "nodeyear": 2017, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1092718053", + "attributes": { + "title": "Topological edge-state engineering with high-frequency electromagnetic radiation", + "doi": "10.1103/physrevb.96.205127", + "nodeyear": 2017, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1092642445", + "attributes": { + "title": "Topological invariants of Floquet systems: General formulation, special properties, and Floquet topological defects", + "doi": "10.1103/physrevb.96.195303", + "nodeyear": 2017, + "ref-by-count": 86, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1092484424", + "attributes": { + "title": "Correspondence between a shaken honeycomb lattice and the Haldane model", + "doi": "10.1103/physreva.96.053603", + "nodeyear": 2017, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1092484423", + "attributes": { + "title": "Controlling the Floquet state population and observing micromotion in a periodically driven two-body quantum system", + "doi": "10.1103/physreva.96.053602", + "nodeyear": 2017, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1091324316", + "attributes": { + "title": "Canonical symplectic structure and structure-preserving geometric algorithms for Schr\u00f6dinger\u2013Maxwell systems", + "doi": "10.1016/j.jcp.2017.08.033", + "nodeyear": 2017, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1092396862", + "attributes": { + "title": "Absence of dynamical localization in interacting driven systems", + "doi": "10.21468/scipostphys.3.4.029", + "nodeyear": 2017, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1092104621", + "attributes": { + "title": "Light-Induced Anisotropic Skyrmion and Stripe Phases in a Rashba Ferromagnet", + "doi": "10.1103/physrevlett.119.147202", + "nodeyear": 2017, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1092104602", + "attributes": { + "title": "High-Temperature Nonequilibrium Bose Condensation Induced by a Hot Needle", + "doi": "10.1103/physrevlett.119.140602", + "nodeyear": 2017, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1092254361", + "attributes": { + "title": "Floquet engineering of long-range p-wave superconductivity: Beyond the high-frequency limit", + "doi": "10.1103/physrevb.96.155438", + "nodeyear": 2017, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1092218368", + "attributes": { + "title": "Periodic table for Floquet topological insulators", + "doi": "10.1103/physrevb.96.155118", + "nodeyear": 2017, + "ref-by-count": 163, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1092172298", + "attributes": { + "title": "Optically induced Lifshitz transition in bilayer graphene", + "doi": "10.1103/physrevb.96.155432", + "nodeyear": 2017, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1092104544", + "attributes": { + "title": "Phase transitions and adiabatic preparation of a fractional Chern insulator in a boson cold-atom model", + "doi": "10.1103/physrevb.96.165107", + "nodeyear": 2017, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1092104499", + "attributes": { + "title": "Asymptotic Floquet states of non-Markovian systems", + "doi": "10.1103/physreva.96.042103", + "nodeyear": 2017, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1092072911", + "attributes": { + "title": "Dynamical localization and the effects of aperiodicity in Floquet systems", + "doi": "10.1103/physrevb.96.144301", + "nodeyear": 2017, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1092072895", + "attributes": { + "title": "Oscillating potential well in the complex plane and the adiabatic theorem", + "doi": "10.1103/physreva.96.042101", + "nodeyear": 2017, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1092024589", + "attributes": { + "title": "Probing the excited-state quantum phase transition through statistics of Loschmidt echo and quantum work", + "doi": "10.1103/physreve.96.032142", + "nodeyear": 2017, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1092016824", + "attributes": { + "title": "Floquet topological magnons", + "doi": "10.1088/2399-6528/aa8843", + "nodeyear": 2017, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1091629732", + "attributes": { + "title": "Magnetic order in laser-irradiated kagome antiferromagnets", + "doi": "10.1088/2399-6528/aa8ab8", + "nodeyear": 2017, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1091511165", + "attributes": { + "title": "Evolution of Extended JC-Dicke Quantum Phase Transition with a Coupled Optical Cavity in Bose-Einstein Condensate System", + "doi": "10.1007/s10773-017-3531-3", + "nodeyear": 2017, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1092035474", + "attributes": { + "title": "Dynamical stabilization of a superfluid motion in the presence of an ac force", + "doi": "10.1103/physreva.96.033637", + "nodeyear": 2017, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1091937945", + "attributes": { + "title": "Effects of local periodic driving on transport and generation of bound states", + "doi": "10.1103/physrevb.96.104309", + "nodeyear": 2017, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1091808750", + "attributes": { + "title": "Synthetic random flux model in a periodically driven optical lattice", + "doi": "10.1103/physreva.96.033620", + "nodeyear": 2017, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1091676677", + "attributes": { + "title": "Laser-irradiated Kondo insulators: Controlling the Kondo effect and topological phases", + "doi": "10.1103/physrevb.96.115120", + "nodeyear": 2017, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1091655390", + "attributes": { + "title": "Probing the role of long-range interactions in the dynamics of a long-range Kitaev chain", + "doi": "10.1103/physrevb.96.125113", + "nodeyear": 2017, + "ref-by-count": 44, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1091256104", + "attributes": { + "title": "Asymptotic Floquet states of open quantum systems: the role of interaction", + "doi": "10.1088/1367-2630/aa7ceb", + "nodeyear": 2017, + "ref-by-count": 45, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1091261840", + "attributes": { + "title": "Adiabatic Theorem for Quantum Spin Systems", + "doi": "10.1103/physrevlett.119.060201", + "nodeyear": 2017, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1091081056", + "attributes": { + "title": "Algebraic Theory of Crystal Vibrations: Localization Properties of Wave Functions in Two-Dimensional Lattices", + "doi": "10.3390/cryst7080246", + "nodeyear": 2017, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1090692587", + "attributes": { + "title": "Equivalence of the Floquet\u2013Magnus and Fer Expansions to Investigate the Dynamics of a Spin System in the Three-Level System", + "doi": "10.1021/acs.jpca.7b01723", + "nodeyear": 2017, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1091439255", + "attributes": { + "title": "Universal nonanalytic behavior of the nonequilibrium Hall conductance in Floquet topological insulators", + "doi": "10.1103/physrevb.96.054306", + "nodeyear": 2017, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1091357776", + "attributes": { + "title": "Long-range interactions in antiferromagnetic quantum spin chains", + "doi": "10.1103/physrevb.96.054441", + "nodeyear": 2017, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1091268146", + "attributes": { + "title": "Spectral functions of a time-periodically driven Falicov-Kimball model: Real-space Floquet dynamical mean-field theory study", + "doi": "10.1103/physrevb.96.075134", + "nodeyear": 2017, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1091149741", + "attributes": { + "title": "Proposal for quantum many-body simulation and torsional matter-wave interferometry with a levitated nanodiamond", + "doi": "10.1103/physreva.96.023827", + "nodeyear": 2017, + "ref-by-count": 38, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1091132193", + "attributes": { + "title": "Topological phase transitions in finite-size periodically driven translationally invariant systems", + "doi": "10.1103/physreva.96.023610", + "nodeyear": 2017, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1091016901", + "attributes": { + "title": "Enhancement of superexchange pairing in the periodically driven Hubbard model", + "doi": "10.1103/physrevb.96.085104", + "nodeyear": 2017, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1086046359", + "attributes": { + "title": "From quantum optics to quantum technologies", + "doi": "10.1016/j.pquantelec.2017.06.002", + "nodeyear": 2017, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1091001773", + "attributes": { + "title": "Amplified Optomechanical Transduction of Virtual Radiation Pressure", + "doi": "10.1103/physrevlett.119.053601", + "nodeyear": 2017, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1090980852", + "attributes": { + "title": "Nonadiabatic dynamics of the excited states for the Lipkin-Meshkov-Glick model", + "doi": "10.1103/physreve.96.012153", + "nodeyear": 2017, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1090740511", + "attributes": { + "title": "Ultra\u2010Fast Control of Magnetic Relaxation in a Periodically Driven Hubbard Model", + "doi": "10.1002/andp.201700024", + "nodeyear": 2017, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1090697089", + "attributes": { + "title": "From thermal to excited-state quantum phase transition: The Dicke model", + "doi": "10.1103/physreve.96.012121", + "nodeyear": 2017, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1090639115", + "attributes": { + "title": "Entanglement Entropy of Eigenstates of Quadratic Fermionic Hamiltonians", + "doi": "10.1103/physrevlett.119.020601", + "nodeyear": 2017, + "ref-by-count": 61, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1090124343", + "attributes": { + "title": "Monodromy in Dicke superradiance", + "doi": "10.1088/1751-8121/aa7a95", + "nodeyear": 2017, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1090547461", + "attributes": { + "title": "Periodically driven random quantum spin chains: real-space renormalization for Floquet localized phases", + "doi": "10.1088/1742-5468/aa75dd", + "nodeyear": 2017, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1091314933", + "attributes": { + "title": "Aperiodically Driven Integrable Systems and Their Emergent Steady States", + "doi": "10.1103/physrevx.7.031034", + "nodeyear": 2017, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1090809058", + "attributes": { + "title": "Driving induced many-body localization", + "doi": "10.1103/physrevb.96.020201", + "nodeyear": 2017, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1090639004", + "attributes": { + "title": "Emergent topology and dynamical quantum phase transitions in two-dimensional closed quantum systems", + "doi": "10.1103/physrevb.96.014302", + "nodeyear": 2017, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1090537266", + "attributes": { + "title": "Probing and controlling spin chirality in Mott insulators by circularly polarized laser", + "doi": "10.1103/physrevb.96.014406", + "nodeyear": 2017, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1090432014", + "attributes": { + "title": "Floquet Dynamics of Boundary-Driven Systems at Criticality", + "doi": "10.1103/physrevlett.118.260602", + "nodeyear": 2017, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1085973336", + "attributes": { + "title": "A generalization of the quantum Rabi model: exact solution and spectral structure", + "doi": "10.1088/1751-8121/aa785a", + "nodeyear": 2017, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1090356064", + "attributes": { + "title": "A Rigorous Theory of Many-Body Prethermalization for Periodically Driven and Closed Quantum Systems", + "doi": "10.1007/s00220-017-2930-x", + "nodeyear": 2017, + "ref-by-count": 143, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1086147780", + "attributes": { + "title": "The Local Detection Method: Dynamical Detection of Quantum Discord with Local Operations", + "doi": "10.1007/978-3-319-53412-1_14", + "nodeyear": 2017, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1090727222", + "attributes": { + "title": "Integrable Floquet dynamics", + "doi": "10.21468/scipostphys.2.3.021", + "nodeyear": 2017, + "ref-by-count": 54, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1086037788", + "attributes": { + "title": "Floquet control of dipolaritons in quantum wells.", + "doi": "10.1364/ol.42.002398", + "nodeyear": 2017, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1085930196", + "attributes": { + "title": "Local probe of single phonon dynamics in warm ion crystals", + "doi": "10.1038/ncomms15712", + "nodeyear": 2017, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1085868342", + "attributes": { + "title": "Periodic Driving at High Frequencies of an Impurity in the Isotropic XY Chain", + "doi": "10.1007/s00220-017-2917-7", + "nodeyear": 2017, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "01:0.60;02:0.40", + "level": "cite_l2" + } + }, + { + "id": "pub.1102822370", + "attributes": { + "title": "Proxy-SU(3) symmetry in heavy deformed nuclei", + "doi": "10.1103/physrevc.95.064325", + "nodeyear": 2017, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1090449453", + "attributes": { + "title": "Floquet states in (LaNiO3)2/(LaAlO3)N heterostructures grown along the (111) direction", + "doi": "10.1103/physrevb.95.235309", + "nodeyear": 2017, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1085918234", + "attributes": { + "title": "Jacobi-type transitions in the interacting boson model", + "doi": "10.1103/physrevc.95.061304", + "nodeyear": 2017, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1090858939", + "attributes": { + "title": "Geometry and non-adiabatic response in quantum and classical systems", + "doi": "10.1016/j.physrep.2017.07.001", + "nodeyear": 2017, + "ref-by-count": 113, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1085784151", + "attributes": { + "title": "Direct Lattice Shaking of Bose Condensates: Finite Momentum Superfluids", + "doi": "10.1103/physrevlett.118.220401", + "nodeyear": 2017, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1084176371", + "attributes": { + "title": "Loading ultracold gases in topological Floquet bands: the fate of current and center-of-mass responses", + "doi": "10.1088/2053-1583/aa6a3b", + "nodeyear": 2017, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1085784080", + "attributes": { + "title": "Generating end modes in a superconducting wire by periodic driving of the hopping", + "doi": "10.1103/physrevb.95.174306", + "nodeyear": 2017, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1085775517", + "attributes": { + "title": "Excited-state quantum phase transitions in a two-fluid Lipkin model", + "doi": "10.1103/physrevc.95.054326", + "nodeyear": 2017, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1085775507", + "attributes": { + "title": "0-\u03c0 transitions in a Josephson junction of an irradiated Weyl semimetal", + "doi": "10.1103/physrevb.95.201115", + "nodeyear": 2017, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1085775482", + "attributes": { + "title": "Interconnections between equilibrium topology and dynamical quantum phase transitions in a linearly ramped Haldane model", + "doi": "10.1103/physrevb.95.184307", + "nodeyear": 2017, + "ref-by-count": 33, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1085524357", + "attributes": { + "title": "Quantum Floquet anomalous Hall states and quantized ratchet effect in one-dimensional dimer chain driven by two ac electric fields", + "doi": "10.1103/physrevb.95.205125", + "nodeyear": 2017, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1085524341", + "attributes": { + "title": "Preparing quasienergy states on demand: A parametric oscillator", + "doi": "10.1103/physreva.95.053841", + "nodeyear": 2017, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1085593414", + "attributes": { + "title": "Adiabatic perturbation theory and geometry of periodically-driven systems", + "doi": "10.1016/j.physrep.2017.05.003", + "nodeyear": 2017, + "ref-by-count": 68, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1085277889", + "attributes": { + "title": "High-Frequency Analysis of Effective Interactions and Bandwidth for Transient States after Monocycle Pulse Excitation of Extended Hubbard Model", + "doi": "10.7566/jpsj.86.064702", + "nodeyear": 2017, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1085120424", + "attributes": { + "title": "Equilibration and order in quantum Floquet matter", + "doi": "10.1038/nphys4106", + "nodeyear": 2017, + "ref-by-count": 148, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1085242099", + "attributes": { + "title": "Regularity and chaos in cavity QED", + "doi": "10.1088/1402-4896/aa6640", + "nodeyear": 2017, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1084868052", + "attributes": { + "title": "Semiclassical Identification of Periodic Orbits in a Quantum Many-Body System", + "doi": "10.1103/physrevlett.118.164101", + "nodeyear": 2017, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1090229831", + "attributes": { + "title": "Rapidly oscillating scatteringless non-Hermitian potentials and the absence of Kapitza stabilization", + "doi": "10.1209/0295-5075/118/20004", + "nodeyear": 2017, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1085191011", + "attributes": { + "title": "Parametric Instability Rates in Periodically Driven Band Systems", + "doi": "10.1103/physrevx.7.021015", + "nodeyear": 2017, + "ref-by-count": 42, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1084786597", + "attributes": { + "title": "Quenching in Chern insulators with satellite Dirac points: The fate of edge states", + "doi": "10.1103/physrevb.95.144304", + "nodeyear": 2017, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1084786582", + "attributes": { + "title": "Control over few-photon pulses by a time-periodic modulation of the photon emitter coupling", + "doi": "10.1103/physreva.95.043814", + "nodeyear": 2017, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1084603807", + "attributes": { + "title": "Driven Bose-Hubbard model with a parametrically modulated harmonic trap", + "doi": "10.1103/physreva.95.043604", + "nodeyear": 2017, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1084174937", + "attributes": { + "title": "Some remarks on \u2018superradiant\u2019 phase transitions in light-matter systems", + "doi": "10.1088/1751-8121/aa65dc", + "nodeyear": 2017, + "ref-by-count": 50, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1084007961", + "attributes": { + "title": "Dynamical many\u2010body localization and delocalization in periodically driven closed quantum systems", + "doi": "10.1002/andp.201600333", + "nodeyear": 2017, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1084682300", + "attributes": { + "title": "Treating Many-Body Quantum Systems by Means of Classical Mechanics", + "doi": "10.1007/978-3-319-47810-4_4", + "nodeyear": 2017, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1084174915", + "attributes": { + "title": "Adiabatic invariants for the regular region of the Dicke model", + "doi": "10.1088/1751-8121/aa6162", + "nodeyear": 2017, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1084198171", + "attributes": { + "title": "Topological flat bands in time-periodically driven uniaxial strained graphene nanoribbons", + "doi": "10.1103/physrevb.95.115440", + "nodeyear": 2017, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1084198121", + "attributes": { + "title": "Keldysh approach to periodically driven systems with a fermionic bath: Nonequilibrium steady state, proximity effect, and dissipation", + "doi": "10.1103/physrevb.95.115303", + "nodeyear": 2017, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1084197894", + "attributes": { + "title": "Sublattice dynamics and quantum state transfer of doublons in two-dimensional lattices", + "doi": "10.1103/physrevb.95.094303", + "nodeyear": 2017, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1084197582", + "attributes": { + "title": "Resolution-enhanced entanglement detection", + "doi": "10.1103/physreva.95.032326", + "nodeyear": 2017, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1084197545", + "attributes": { + "title": "Generation of robust entangled states in a non-Hermitian periodically driven two-band Bose-Hubbard system", + "doi": "10.1103/physreva.95.032125", + "nodeyear": 2017, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1084197534", + "attributes": { + "title": "Ponderomotive dynamics of waves in quasiperiodically modulated media", + "doi": "10.1103/physreva.95.032114", + "nodeyear": 2017, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1083406696", + "attributes": { + "title": "Heat capacity for systems with excited-state quantum phase transitions", + "doi": "10.1016/j.physleta.2017.01.022", + "nodeyear": 2017, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1083935671", + "attributes": { + "title": "Cavity-Assisted Single-Mode and Two-Mode Spin-Squeezed States via Phase-Locked Atom-Photon Coupling", + "doi": "10.1103/physrevlett.118.083604", + "nodeyear": 2017, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1083439843", + "attributes": { + "title": "Mean-field theory for confinement transitions and magnetization plateaux in spin ice", + "doi": "10.1088/1751-8121/aa5bc6", + "nodeyear": 2017, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1083816155", + "attributes": { + "title": "QuSpin: a Python package for dynamics and exact diagonalisation of quantum many body systems part I: spin chains", + "doi": "10.21468/scipostphys.2.1.003", + "nodeyear": 2017, + "ref-by-count": 119, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1059133328", + "attributes": { + "title": "Catastrophes in non-equilibrium many-particle wave functions: universality and critical scaling", + "doi": "10.1088/1361-6455/aa56af", + "nodeyear": 2017, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:0.60;03:0.40", + "level": "cite_l2" + } + }, + { + "id": "pub.1083935160", + "attributes": { + "title": "Floquet analysis of a quantum system with modulated periodic driving", + "doi": "10.1103/physreva.95.023615", + "nodeyear": 2017, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1083717390", + "attributes": { + "title": "Transport signatures in topological systems coupled to ac fields", + "doi": "10.1103/physrevb.95.064302", + "nodeyear": 2017, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1083643131", + "attributes": { + "title": "Unconventional fermionic pairing states in a monochromatically tilted optical lattice", + "doi": "10.1103/physreva.95.023601", + "nodeyear": 2017, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1083522251", + "attributes": { + "title": "Space-time Cooperative Symmetry in a Periodically Driven Tight Binding Model", + "doi": "10.7566/jpsj.86.024713", + "nodeyear": 2017, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1011995146", + "attributes": { + "title": "Creating stable Floquet\u2013Weyl semimetals by laser-driving of 3D Dirac materials", + "doi": "10.1038/ncomms13940", + "nodeyear": 2017, + "ref-by-count": 165, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1059164313", + "attributes": { + "title": "Delocalization properties at isolated avoided crossings in Lipkin\u2013Meshkov\u2013Glick type Hamiltonian models", + "doi": "10.1088/1742-5468/aa4e90", + "nodeyear": 2017, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1107414917", + "attributes": { + "title": "Preparing and Probing Chern Bands with Cold Atoms", + "doi": "10.1017/9781316084366.016", + "nodeyear": 2017, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "00:1", + "level": "cite_l2" + } + }, + { + "id": "pub.1084604018", + "attributes": { + "title": "Locating topological phase transitions using nonequilibrium signatures in local bulk observables", + "doi": "10.1103/physrevb.95.041105", + "nodeyear": 2017, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1084603856", + "attributes": { + "title": "Effects of interactions on periodically driven dynamically localized systems", + "doi": "10.1103/physrevb.95.014305", + "nodeyear": 2017, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1084603654", + "attributes": { + "title": "Excited-state quantum phase transitions studied from a non-Hermitian perspective", + "doi": "10.1103/physreva.95.010103", + "nodeyear": 2017, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1084199340", + "attributes": { + "title": "Colloquium: Atomic quantum gases in periodically driven optical lattices", + "doi": "10.1103/revmodphys.89.011004", + "nodeyear": 2017, + "ref-by-count": 496, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1083506581", + "attributes": { + "title": "Effective Hamiltonians, prethermalization, and slow energy absorption in periodically driven many-body systems", + "doi": "10.1103/physrevb.95.014112", + "nodeyear": 2017, + "ref-by-count": 184, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060653834", + "attributes": { + "title": "Floquet engineering of Haldane Chern insulators and chiral bosonic phase transitions", + "doi": "10.1103/physrevb.95.045102", + "nodeyear": 2017, + "ref-by-count": 29, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060517495", + "attributes": { + "title": "Boson-mediated quantum spin simulators in transverse fields: XY model and spin-boson entanglement", + "doi": "10.1103/physreva.95.013602", + "nodeyear": 2017, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1031526734", + "attributes": { + "title": "Boundary effects and gapped dispersion in rotating fermionic matter", + "doi": "10.1016/j.physletb.2016.11.010", + "nodeyear": 2017, + "ref-by-count": 46, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1048482410", + "attributes": { + "title": "Dynamics and Characterization of Composite Quantum Systems", + "doi": "10.1007/978-3-319-44459-8", + "nodeyear": 2017, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1013892465", + "attributes": { + "title": "Quantum-Enhanced Nonlinear Spectroscopy", + "doi": "10.1007/978-3-319-44397-3", + "nodeyear": 2017, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060766918", + "attributes": { + "title": "Driven Open Quantum Systems and Floquet Stroboscopic Dynamics", + "doi": "10.1103/physrevlett.117.250401", + "nodeyear": 2016, + "ref-by-count": 42, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1087286925", + "attributes": { + "title": "Approximated integrability of the Dicke model", + "doi": "10.1209/0295-5075/116/50005", + "nodeyear": 2016, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060681712", + "attributes": { + "title": "Signatures of shape phase transitions in odd-mass nuclei", + "doi": "10.1103/physrevc.94.064310", + "nodeyear": 2016, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060653553", + "attributes": { + "title": "Brillouin-Wigner theory for Floquet topological phase transitions in spin-orbit-coupled materials", + "doi": "10.1103/physrevb.94.235419", + "nodeyear": 2016, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1060653350", + "attributes": { + "title": "Dynamical Cooper pairing in nonequilibrium electron-phonon systems", + "doi": "10.1103/physrevb.94.214504", + "nodeyear": 2016, + "ref-by-count": 107, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060653304", + "attributes": { + "title": "Entanglement generation in periodically driven integrable systems: Dynamical phase transitions and steady state", + "doi": "10.1103/physrevb.94.214301", + "nodeyear": 2016, + "ref-by-count": 40, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1060766700", + "attributes": { + "title": "Floquet Realization and Signatures of One-Dimensional Anyons in an Optical Lattice", + "doi": "10.1103/physrevlett.117.205303", + "nodeyear": 2016, + "ref-by-count": 50, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060750764", + "attributes": { + "title": "Excited-state quantum phase transitions in the two-spin elliptic Gaudin model", + "doi": "10.1103/physreve.94.052110", + "nodeyear": 2016, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060517140", + "attributes": { + "title": "Extended states in disordered one-dimensional systems in the presence of the generalized N-mer correlations", + "doi": "10.1103/physreva.94.053613", + "nodeyear": 2016, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060517139", + "attributes": { + "title": "Phase transition in an Aubry-Andr\u00e9 system with a rapidly oscillating magnetic field", + "doi": "10.1103/physreva.94.053612", + "nodeyear": 2016, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060517109", + "attributes": { + "title": "Noise-induced transport in the motion of trapped ions", + "doi": "10.1103/physreva.94.053406", + "nodeyear": 2016, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1002023992", + "attributes": { + "title": "Dynamical merging of Dirac points in the periodically driven Kitaev honeycomb model", + "doi": "10.1140/epjb/e2016-70265-5", + "nodeyear": 2016, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1060652562", + "attributes": { + "title": "Signatures and conditions for phase band crossings in periodically driven integrable systems", + "doi": "10.1103/physrevb.94.155122", + "nodeyear": 2016, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1060516924", + "attributes": { + "title": "Dynamics of small trapped one-dimensional Fermi gas under oscillating magnetic fields", + "doi": "10.1103/physreva.94.043639", + "nodeyear": 2016, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060516896", + "attributes": { + "title": "Creating topological interfaces and detecting chiral edge modes in a two-dimensional optical lattice", + "doi": "10.1103/physreva.94.043611", + "nodeyear": 2016, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060516887", + "attributes": { + "title": "Tunable spin-orbit-coupled Bose-Einstein condensates in deep optical lattices", + "doi": "10.1103/physreva.94.043602", + "nodeyear": 2016, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060516756", + "attributes": { + "title": "Floquet engineering from long-range to short-range interactions", + "doi": "10.1103/physreva.94.040701", + "nodeyear": 2016, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1059164227", + "attributes": { + "title": "Thermal and quantum phase transitions in atom-field systems: a microcanonical analysis", + "doi": "10.1088/1742-5468/2016/09/093105", + "nodeyear": 2016, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1060750417", + "attributes": { + "title": "Semiclassical bifurcations and topological phase transitions in a one-dimensional lattice of coupled Lipkin-Meshkov-Glick models", + "doi": "10.1103/physreve.94.032123", + "nodeyear": 2016, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1008292555", + "attributes": { + "title": "Interband Heating Processes in a Periodically Driven Optical Lattice", + "doi": "10.1515/zna-2016-0129", + "nodeyear": 2016, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1059137701", + "attributes": { + "title": "Realization of uniform synthetic magnetic fields by periodically shaking an optical square lattice", + "doi": "10.1088/1367-2630/18/9/093013", + "nodeyear": 2016, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060652244", + "attributes": { + "title": "Abelian Floquet symmetry-protected topological phases in one dimension", + "doi": "10.1103/physrevb.94.125105", + "nodeyear": 2016, + "ref-by-count": 82, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1060652210", + "attributes": { + "title": "Type-II Weyl cone transitions in driven semimetals", + "doi": "10.1103/physrevb.94.121106", + "nodeyear": 2016, + "ref-by-count": 71, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060652116", + "attributes": { + "title": "Floquet topological phases coupled to environments and the induced photocurrent", + "doi": "10.1103/physrevb.94.115145", + "nodeyear": 2016, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060516738", + "attributes": { + "title": "Molecular spectra in collective Dicke states", + "doi": "10.1103/physreva.94.033848", + "nodeyear": 2016, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1014532593", + "attributes": { + "title": "A possible framework of the Lipkin model obeying the SU(n) algebra in arbitrary fermion number. I: The SU(2) algebras extended from the conventional fermion pair and determination of the minimum weight states", + "doi": "10.1093/ptep/ptw101", + "nodeyear": 2016, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1059174523", + "attributes": { + "title": "Particle-time duality in the kicked Ising spin chain", + "doi": "10.1088/1751-8113/49/37/375101", + "nodeyear": 2016, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1060651758", + "attributes": { + "title": "Photoinduced Chern insulating states in semi-Dirac materials", + "doi": "10.1103/physrevb.94.081103", + "nodeyear": 2016, + "ref-by-count": 33, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060516500", + "attributes": { + "title": "Excited-state quantum phase transition in the Rabi model", + "doi": "10.1103/physreva.94.023835", + "nodeyear": 2016, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060516440", + "attributes": { + "title": "String order via Floquet interactions in atomic systems", + "doi": "10.1103/physreva.94.023610", + "nodeyear": 2016, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1008230481", + "attributes": { + "title": "Classification of excited-state quantum phase transitions for arbitrary number of degrees of freedom", + "doi": "10.1016/j.physleta.2016.06.031", + "nodeyear": 2016, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060750048", + "attributes": { + "title": "Entropy, chaos, and excited-state quantum phase transitions in the Dicke model", + "doi": "10.1103/physreve.94.012140", + "nodeyear": 2016, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1052263311", + "attributes": { + "title": "Quasi-Periodically Driven Quantum Systems", + "doi": "10.1515/zna-2016-0079", + "nodeyear": 2016, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1059005118", + "attributes": { + "title": "Quantum phase transitions in the collective degrees of freedom: nuclei and other many-body systems", + "doi": "10.1088/0031-8949/91/8/083006", + "nodeyear": 2016, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1060651068", + "attributes": { + "title": "How periodic driving heats a disordered quantum spin chain", + "doi": "10.1103/physrevb.94.020201", + "nodeyear": 2016, + "ref-by-count": 29, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060516111", + "attributes": { + "title": "Excited-state quantum phase transitions in many-body systems with infinite-range interaction: Localization, dynamics, and bifurcation", + "doi": "10.1103/physreva.94.012113", + "nodeyear": 2016, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1024274677", + "attributes": { + "title": "Topological quantum matter with ultracold gases in optical lattices", + "doi": "10.1038/nphys3803", + "nodeyear": 2016, + "ref-by-count": 387, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060765840", + "attributes": { + "title": "Anomalous Topological Phases and Unpaired Dirac Cones in Photonic Floquet Topological Insulators", + "doi": "10.1103/physrevlett.117.013902", + "nodeyear": 2016, + "ref-by-count": 87, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1010802241", + "attributes": { + "title": "Effects of excited state quantum phase transitions on system dynamics", + "doi": "10.1002/prop.201600035", + "nodeyear": 2016, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060765767", + "attributes": { + "title": "Cooperative Shielding in Many-Body Systems with Long-Range Interaction", + "doi": "10.1103/physrevlett.116.250402", + "nodeyear": 2016, + "ref-by-count": 44, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1062666833", + "attributes": { + "title": "Experimental reconstruction of the Berry curvature in a Floquet Bloch band", + "doi": "10.1126/science.aad4568", + "nodeyear": 2016, + "ref-by-count": 297, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1059164050", + "attributes": { + "title": "High-frequency behavior of periodically modulated stochastic quantum system: activated escape", + "doi": "10.1088/1742-5468/2016/05/053204", + "nodeyear": 2016, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1060765582", + "attributes": { + "title": "Floquet Engineering of Correlated Tunneling in the Bose-Hubbard Model with Ultracold Atoms", + "doi": "10.1103/physrevlett.116.205301", + "nodeyear": 2016, + "ref-by-count": 109, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1059137444", + "attributes": { + "title": "Effective Floquet\u2013Gibbs states for dissipative quantum systems", + "doi": "10.1088/1367-2630/18/5/053008", + "nodeyear": 2016, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060749720", + "attributes": { + "title": "Rigidity generation by nonthermal fluctuations", + "doi": "10.1103/physreve.93.052604", + "nodeyear": 2016, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1045365832", + "attributes": { + "title": "From quantum chaos and eigenstate thermalization to statistical mechanics and thermodynamics", + "doi": "10.1080/00018732.2016.1198134", + "nodeyear": 2016, + "ref-by-count": 945, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1013025567", + "attributes": { + "title": "Quantum phase transitions with parity-symmetry breaking and hysteresis", + "doi": "10.1038/nphys3743", + "nodeyear": 2016, + "ref-by-count": 68, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060650091", + "attributes": { + "title": "Effects of periodic kicking on dispersion and wave packet dynamics in graphene", + "doi": "10.1103/physrevb.93.174301", + "nodeyear": 2016, + "ref-by-count": 33, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1059164027", + "attributes": { + "title": "Corner transfer matrices for 2D strongly coupled many-body Floquet systems", + "doi": "10.1088/1742-5468/2016/04/043305", + "nodeyear": 2016, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1065176096", + "attributes": { + "title": "Multiphoton resonant manipulation of qubits by train of pulses", + "doi": "10.1364/josab.33.000971", + "nodeyear": 2016, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "09:0.33;01:0.33;02:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1060680986", + "attributes": { + "title": "Excited-state quantum phase transitions in the interacting boson model: Spectral characteristics of 0+ states and effective order parameter", + "doi": "10.1103/physrevc.93.044302", + "nodeyear": 2016, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060649845", + "attributes": { + "title": "Heating and many-body resonances in a periodically driven two-band system", + "doi": "10.1103/physrevb.93.155132", + "nodeyear": 2016, + "ref-by-count": 67, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1060649780", + "attributes": { + "title": "Brillouin-Wigner theory for high-frequency expansion in periodically driven systems: Application to Floquet topological insulators", + "doi": "10.1103/physrevb.93.144307", + "nodeyear": 2016, + "ref-by-count": 172, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060649672", + "attributes": { + "title": "Nonequilibrium dynamics of the Ising chain in a fluctuating transverse field", + "doi": "10.1103/physrevb.93.134305", + "nodeyear": 2016, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060515586", + "attributes": { + "title": "Modified interactions in a Floquet topological system on a square lattice and their impact on a bosonic fractional Chern insulator state", + "doi": "10.1103/physreva.93.043618", + "nodeyear": 2016, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060515460", + "attributes": { + "title": "Classical-quantum correspondence in bosonic two-mode conversion systems: Polynomial algebras and Kummer shapes", + "doi": "10.1103/physreva.93.042102", + "nodeyear": 2016, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060515459", + "attributes": { + "title": "Hilbert-space localization in closed quantum systems", + "doi": "10.1103/physreva.93.042101", + "nodeyear": 2016, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1017232487", + "attributes": { + "title": "Calculating Floquet states of large quantum systems: A parallelization strategy and its cluster implementation", + "doi": "10.1016/j.cpc.2015.12.024", + "nodeyear": 2016, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1008885136", + "attributes": { + "title": "Floquet\u2013Magnus theory and generic transient dynamics in periodically driven many-body quantum systems", + "doi": "10.1016/j.aop.2016.01.012", + "nodeyear": 2016, + "ref-by-count": 250, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060765248", + "attributes": { + "title": "Schrieffer-Wolff Transformation for Periodically Driven Systems: Strongly Correlated Systems with Artificial Gauge Fields", + "doi": "10.1103/physrevlett.116.125301", + "nodeyear": 2016, + "ref-by-count": 107, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1060765225", + "attributes": { + "title": "Rigorous Bound on Energy Absorption and Generic Relaxation in Periodically Driven Quantum Systems", + "doi": "10.1103/physrevlett.116.120401", + "nodeyear": 2016, + "ref-by-count": 192, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1022845164", + "attributes": { + "title": "Long-range doublon transfer in a dimer chain induced by topology and ac fields", + "doi": "10.1038/srep22562", + "nodeyear": 2016, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060515226", + "attributes": { + "title": "Floquet theorem with open systems and its applications", + "doi": "10.1103/physreva.93.032121", + "nodeyear": 2016, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060749074", + "attributes": { + "title": "Delocalization and quantum chaos in atom-field systems", + "doi": "10.1103/physreve.93.022215", + "nodeyear": 2016, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060649137", + "attributes": { + "title": "Floquet topological system based on frequency-modulated classical coupled harmonic oscillators", + "doi": "10.1103/physrevb.93.085105", + "nodeyear": 2016, + "ref-by-count": 42, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060649072", + "attributes": { + "title": "Scattering matrix invariants of Floquet topological insulators", + "doi": "10.1103/physrevb.93.075405", + "nodeyear": 2016, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1060514903", + "attributes": { + "title": "Atom-molecule conversion in a periodically driven spin-boson model", + "doi": "10.1103/physreva.93.013616", + "nodeyear": 2016, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1049246486", + "attributes": { + "title": "Artificial Gauge Fields with Ultracold Atoms in Optical Lattices", + "doi": "10.1007/978-3-319-25829-4", + "nodeyear": 2016, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1059136734", + "attributes": { + "title": "Topological singularities and the general classification of Floquet\u2013Bloch systems", + "doi": "10.1088/1367-2630/17/12/125014", + "nodeyear": 2015, + "ref-by-count": 168, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060764674", + "attributes": { + "title": "Exponentially Slow Heating in Periodically Driven Many-Body Systems", + "doi": "10.1103/physrevlett.115.256803", + "nodeyear": 2015, + "ref-by-count": 228, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060514725", + "attributes": { + "title": "Dissipative two-mode Tavis-Cummings model with time-delayed feedback control", + "doi": "10.1103/physreva.92.063832", + "nodeyear": 2015, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060514696", + "attributes": { + "title": "Stability of a Bose-Einstein condensate in a driven optical lattice: Crossover between weak and tight transverse confinement", + "doi": "10.1103/physreva.92.063639", + "nodeyear": 2015, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1036641112", + "attributes": { + "title": "Tunable Chern insulator with optimally shaken lattices", + "doi": "10.1103/physreva.92.063615", + "nodeyear": 2015, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1064625019", + "attributes": { + "title": "Role of Correlations and Off-Diagonal Terms in Binary Disordered One-Dimensional Systems", + "doi": "10.12693/aphyspola.128.1002", + "nodeyear": 2015, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1027442816", + "attributes": { + "title": "DiracQ: A Package for Algebraic Manipulation of Non-Commuting Quantum Variables", + "doi": "10.5334/jors.cb", + "nodeyear": 2015, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060764456", + "attributes": { + "title": "Prethermal Floquet Steady States and Instabilities in the Periodically Driven, Weakly Interacting Bose-Hubbard Model", + "doi": "10.1103/physrevlett.115.205301", + "nodeyear": 2015, + "ref-by-count": 97, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060514338", + "attributes": { + "title": "Structure of eigenstates and quench dynamics at an excited-state quantum phase transition", + "doi": "10.1103/physreva.92.050101", + "nodeyear": 2015, + "ref-by-count": 52, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1034517301", + "attributes": { + "title": "Driven-dissipative Ising model: Mean-field solution", + "doi": "10.1103/physrevb.92.174418", + "nodeyear": 2015, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1059136608", + "attributes": { + "title": "Time delayed control of excited state quantum phase transitions in the Lipkin\u2013Meshkov\u2013Glick model", + "doi": "10.1088/1367-2630/17/10/103031", + "nodeyear": 2015, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060764168", + "attributes": { + "title": "Dynamic Optical Lattices of Subwavelength Spacing for Ultracold Atoms", + "doi": "10.1103/physrevlett.115.140401", + "nodeyear": 2015, + "ref-by-count": 50, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060514281", + "attributes": { + "title": "Multiphoton interband excitations of quantum gases in driven optical lattices", + "doi": "10.1103/physreva.92.043621", + "nodeyear": 2015, + "ref-by-count": 59, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1034661114", + "attributes": { + "title": "Controlled Population of Floquet-Bloch States via Coupling to Bose and Fermi Baths", + "doi": "10.1103/physrevx.5.041050", + "nodeyear": 2015, + "ref-by-count": 109, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1028219105", + "attributes": { + "title": "Dynamical preparation of Floquet Chern insulators", + "doi": "10.1038/ncomms9336", + "nodeyear": 2015, + "ref-by-count": 147, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1016473610", + "attributes": { + "title": "High-frequency approximation for periodically driven quantum systems from a Floquet-space perspective", + "doi": "10.1088/1367-2630/17/9/093039", + "nodeyear": 2015, + "ref-by-count": 290, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1046940591", + "attributes": { + "title": "Floquet analysis of pulsed Dirac systems: a way to simulate rippled graphene", + "doi": "10.1140/epjb/e2015-60356-2", + "nodeyear": 2015, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060764026", + "attributes": { + "title": "Spectroscopy of Interacting Quasiparticles in Trapped Ions", + "doi": "10.1103/physrevlett.115.100501", + "nodeyear": 2015, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060514082", + "attributes": { + "title": "Structure-dynamics relation in shaken optical lattices", + "doi": "10.1103/physreva.92.033407", + "nodeyear": 2015, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1049705098", + "attributes": { + "title": "Stroboscopic symmetry-protected topological phases", + "doi": "10.1103/physrevb.92.125107", + "nodeyear": 2015, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060763935", + "attributes": { + "title": "Creating State-Dependent Lattices for Ultracold Fermions by Magnetic Gradient Modulation", + "doi": "10.1103/physrevlett.115.073002", + "nodeyear": 2015, + "ref-by-count": 83, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1060513942", + "attributes": { + "title": "Floquet topological transitions in a driven one-dimensional topological insulator", + "doi": "10.1103/physreva.92.023624", + "nodeyear": 2015, + "ref-by-count": 86, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1020950855", + "attributes": { + "title": "Controlling disorder with periodically modulated interactions", + "doi": "10.1103/physreva.92.023606", + "nodeyear": 2015, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1002407881", + "attributes": { + "title": "Coherent quantum dynamics: What fluctuations can tell", + "doi": "10.1103/physreva.92.022108", + "nodeyear": 2015, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1032625305", + "attributes": { + "title": "Quantum ergodicity and energy flow in molecules", + "doi": "10.1080/00018732.2015.1109817", + "nodeyear": 2015, + "ref-by-count": 66, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1022791415", + "attributes": { + "title": "Probing polariton dynamics in trapped ions with phase-coherent two-dimensional spectroscopy", + "doi": "10.1063/1.4919796", + "nodeyear": 2015, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1059004792", + "attributes": { + "title": "Semiclassical dynamics of the resonant Dicke model in a strongly non-linear regime", + "doi": "10.1088/0031-8949/90/7/074044", + "nodeyear": 2015, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "cite_l2" + } + }, + { + "id": "pub.1053517731", + "attributes": { + "title": "Spin squeezing by tensor twisting and Lipkin-Meshkov-Glick dynamics in a toroidal Bose-Einstein condensate with spatially modulated nonlinearity", + "doi": "10.1103/physreva.91.053612", + "nodeyear": 2015, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1046942581", + "attributes": { + "title": "Hierarchy of Floquet gaps and edge states for driven honeycomb lattices", + "doi": "10.1103/physreva.91.043625", + "nodeyear": 2015, + "ref-by-count": 75, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;03:0.33", + "level": "cite_l2" + } + }, + { + "id": "pub.1010257037", + "attributes": { + "title": "Optimization of photon correlations by frequency filtering", + "doi": "10.1103/physreva.91.043807", + "nodeyear": 2015, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1039122836", + "attributes": { + "title": "Condition for emergence of the Floquet-Gibbs state in periodically driven open systems", + "doi": "10.1103/physreve.91.030101", + "nodeyear": 2015, + "ref-by-count": 56, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1033596012", + "attributes": { + "title": "Fate of dynamical many-body localization in the presence of disorder", + "doi": "10.1103/physrevb.91.121106", + "nodeyear": 2015, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1009958864", + "attributes": { + "title": "Long-time Behavior of Isolated Periodically Driven Interacting Lattice Systems", + "doi": "10.1103/physrevx.4.041048", + "nodeyear": 2014, + "ref-by-count": 401, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1039829503", + "attributes": { + "title": "Signatures of quantum phase transitions and excited state quantum phase transitions in the vibrational bending dynamics of triatomic molecules", + "doi": "10.1016/j.molstruc.2013.08.020", + "nodeyear": 2013, + "ref-by-count": 55, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1008158272", + "attributes": { + "title": "Excited-state quantum phase transitions in Dicke superradiance models", + "doi": "10.1103/physreve.88.032133", + "nodeyear": 2013, + "ref-by-count": 91, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1032795711", + "attributes": { + "title": "ac-driven quantum phase transition in the Lipkin-Meshkov-Glick model", + "doi": "10.1103/physreve.87.052110", + "nodeyear": 2013, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1050389361", + "attributes": { + "title": "Excited-state phase transition leading to symmetry-breaking steady states in the Dicke model", + "doi": "10.1103/physreva.87.023819", + "nodeyear": 2013, + "ref-by-count": 38, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1062466552", + "attributes": { + "title": "Roton-Type Mode Softening in a Quantum Gas with Cavity-Mediated Long-Range Interactions", + "doi": "10.1126/science.1220314", + "nodeyear": 2012, + "ref-by-count": 181, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1014751446", + "attributes": { + "title": "Metal\u2013topological insulator transition in the quantum kicked rotator with Z2 symmetry", + "doi": "10.1103/physrevb.85.165131", + "nodeyear": 2012, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060759314", + "attributes": { + "title": "Nonequilibrium Quantum Phase Transitions in the Dicke Model", + "doi": "10.1103/physrevlett.108.043003", + "nodeyear": 2012, + "ref-by-count": 127, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1039860202", + "attributes": { + "title": "Quantum spin squeezing", + "doi": "10.1016/j.physrep.2011.08.003", + "nodeyear": 2011, + "ref-by-count": 431, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1048699443", + "attributes": { + "title": "Theory of the Anderson Transition in the Quasiperiodic Kicked Rotor", + "doi": "10.1103/physrevlett.107.074101", + "nodeyear": 2011, + "ref-by-count": 31, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060741752", + "attributes": { + "title": "Excited-state phase transition and onset of chaos in quantum optical models", + "doi": "10.1103/physreve.83.046208", + "nodeyear": 2011, + "ref-by-count": 80, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1048928815", + "attributes": { + "title": "Classical Bifurcation at the Transition from Rabi to Josephson Dynamics", + "doi": "10.1103/physrevlett.105.204101", + "nodeyear": 2010, + "ref-by-count": 282, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060507439", + "attributes": { + "title": "Anharmonicity effects in the bosonic U(2)-SO(3) excited-state quantum phase transition", + "doi": "10.1103/physreva.81.050101", + "nodeyear": 2010, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1034025717", + "attributes": { + "title": "Dicke quantum phase transition with a superfluid gas in an optical cavity", + "doi": "10.1038/nature09009", + "nodeyear": 2010, + "ref-by-count": 977, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060839703", + "attributes": { + "title": "Quantum phase transitions in the shapes of atomic nuclei", + "doi": "10.1103/revmodphys.82.2155", + "nodeyear": 2010, + "ref-by-count": 364, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1045564126", + "attributes": { + "title": "Observation of Van Hove singularities in twisted graphene layers", + "doi": "10.1038/nphys1463", + "nodeyear": 2009, + "ref-by-count": 737, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1026356533", + "attributes": { + "title": "Quantum signatures of chaos in a kicked top", + "doi": "10.1038/nature08396", + "nodeyear": 2009, + "ref-by-count": 180, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1049262570", + "attributes": { + "title": "Decoherence due to an excited-state quantum phase transition in a two-level boson model", + "doi": "10.1103/physreva.80.032111", + "nodeyear": 2009, + "ref-by-count": 45, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1021560322", + "attributes": { + "title": "Decoherence as a signature of an excited-state quantum phase transition", + "doi": "10.1103/physreva.78.060102", + "nodeyear": 2008, + "ref-by-count": 50, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1032579586", + "attributes": { + "title": "Impact of quantum phase transitions on excited-level dynamics", + "doi": "10.1103/physreve.78.031130", + "nodeyear": 2008, + "ref-by-count": 59, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1025472474", + "attributes": { + "title": "Exact spectrum of the Lipkin-Meshkov-Glick model in the thermodynamic limit and finite-size corrections", + "doi": "10.1103/physreve.78.021106", + "nodeyear": 2008, + "ref-by-count": 155, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1024402227", + "attributes": { + "title": "Excited state quantum phase transitions in many-body systems", + "doi": "10.1016/j.aop.2007.06.011", + "nodeyear": 2008, + "ref-by-count": 195, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1041909998", + "attributes": { + "title": "Quantum Control of the Hyperfine Spin of a Cs Atom Ensemble", + "doi": "10.1103/physrevlett.99.163002", + "nodeyear": 2007, + "ref-by-count": 92, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059079802", + "attributes": { + "title": "Monodromy and excited-state quantum phase transitions in integrable systems: collective vibrations of nuclei", + "doi": "10.1088/0305-4470/39/31/l01", + "nodeyear": 2006, + "ref-by-count": 102, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060831320", + "attributes": { + "title": "Experimental Confirmation of Quantum Monodromy: The Millimeter Wave Spectrum of Cyanogen Isothiocyanate NCNCS", + "doi": "10.1103/physrevlett.95.243002", + "nodeyear": 2005, + "ref-by-count": 52, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1004858858", + "attributes": { + "title": "Large-N Scaling Behavior of the Lipkin-Meshkov-Glick Model", + "doi": "10.1103/physrevlett.95.050402", + "nodeyear": 2005, + "ref-by-count": 96, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1008126854", + "attributes": { + "title": "Quantum Phase Transitions in the Interacting Boson Model: Integrability, Level Repulsion, and Level Crossing", + "doi": "10.1103/physrevlett.91.162502", + "nodeyear": 2003, + "ref-by-count": 52, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1041856979", + "attributes": { + "title": "Driven quantum tunneling", + "doi": "10.1016/s0370-1573(98)00022-2", + "nodeyear": 1998, + "ref-by-count": 1206, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059076073", + "attributes": { + "title": "Quantum states in a champagne bottle", + "doi": "10.1088/0305-4470/31/2/022", + "nodeyear": 1998, + "ref-by-count": 67, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1014050295", + "attributes": { + "title": "Semiclassical Spectra from Periodic-Orbit Clusters in a Mixed Phase Space", + "doi": "10.1103/physrevlett.79.1022", + "nodeyear": 1997, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060810429", + "attributes": { + "title": "Semiclassical Spectra without Periodic Orbits for a Kicked Top", + "doi": "10.1103/physrevlett.74.1562", + "nodeyear": 1995, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1017250213", + "attributes": { + "title": "Quantum effects of periodic orbits for the kicked top", + "doi": "10.1007/bf01312181", + "nodeyear": 1993, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060485026", + "attributes": { + "title": "Quantum signatures of homoclinic tangles and separatrices", + "doi": "10.1103/physreva.45.3615", + "nodeyear": 1992, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059069780", + "attributes": { + "title": "Quantum maps, adiabatic invariance and the semiclassical limit", + "doi": "10.1088/0305-4470/21/22/016", + "nodeyear": 1988, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059070056", + "attributes": { + "title": "The Campbell-Baker-Hausdorff expansion for classical and quantum kicked dynamics", + "doi": "10.1088/0305-4470/21/9/017", + "nodeyear": 1988, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042734315", + "attributes": { + "title": "Classical and quantum chaos for a kicked top", + "doi": "10.1007/bf01303727", + "nodeyear": 1987, + "ref-by-count": 285, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060500239", + "attributes": { + "title": "Steady States and Quasienergies of a Quantum-Mechanical System in an Oscillating Field", + "doi": "10.1103/physreva.7.2203", + "nodeyear": 1973, + "ref-by-count": 856, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060430850", + "attributes": { + "title": "Solution of the Schr\u00f6dinger Equation with a Hamiltonian Periodic in Time", + "doi": "10.1103/physrev.138.b979", + "nodeyear": 1965, + "ref-by-count": 2161, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1040897292", + "attributes": { + "title": "Unpaired Floquet Majorana fermions without magnetic fields", + "doi": "10.1103/physrevb.87.115420", + "nodeyear": 2013, + "ref-by-count": 63, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1046023204", + "attributes": { + "title": "Superradiant phase transitions with three-level systems", + "doi": "10.1103/physreva.87.023813", + "nodeyear": 2013, + "ref-by-count": 29, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1022219898", + "attributes": { + "title": "Cold atoms in cavity-generated dynamical optical potentials", + "doi": "10.1103/revmodphys.85.553", + "nodeyear": 2013, + "ref-by-count": 526, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1049288392", + "attributes": { + "title": "Drude Weight, Cyclotron Resonance, and the Dicke Model of Graphene Cavity QED", + "doi": "10.1103/physrevlett.109.267404", + "nodeyear": 2012, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1039643973", + "attributes": { + "title": "Superradiant phase transition in a model of three-level-\u039b systems interacting with two bosonic modes", + "doi": "10.1103/physreva.86.063822", + "nodeyear": 2012, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1023680357", + "attributes": { + "title": "Nonequilibrium quantum phase transitions in the Ising model", + "doi": "10.1103/physreva.86.063627", + "nodeyear": 2012, + "ref-by-count": 50, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1038214559", + "attributes": { + "title": "A nontrivial bosonic representation of large spin systems at high temperatures", + "doi": "10.1088/1751-8113/45/42/425301", + "nodeyear": 2012, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1027554801", + "attributes": { + "title": "Quantum noise properties of multiphoton transitions in driven nonlinear resonators", + "doi": "10.1088/1367-2630/14/9/093024", + "nodeyear": 2012, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1010612726", + "attributes": { + "title": "Sharp Tunneling Peaks in a Parametric Oscillator: Quantum Resonances Missing in the Rotating Wave Approximation", + "doi": "10.1103/physrevlett.109.090401", + "nodeyear": 2012, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060743705", + "attributes": { + "title": "Thermal phase transitions for Dicke-type models in the ultrastrong-coupling limit", + "doi": "10.1103/physreve.86.012101", + "nodeyear": 2012, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1024129122", + "attributes": { + "title": "Optical weight transfer in excitation spectra of ultra-cold bosons in two- and three-dimensional optical lattices", + "doi": "10.1088/0953-4075/45/14/145303", + "nodeyear": 2012, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1018731307", + "attributes": { + "title": "Equilibration and macroscopic quantum fluctuations in the Dicke model", + "doi": "10.1088/1367-2630/14/7/073011", + "nodeyear": 2012, + "ref-by-count": 60, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1002860337", + "attributes": { + "title": "Equilibration of isolated macroscopic quantum systems", + "doi": "10.1088/1367-2630/14/4/043020", + "nodeyear": 2012, + "ref-by-count": 81, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1018374514", + "attributes": { + "title": "Scattering theory of topological insulators and superconductors", + "doi": "10.1103/physrevb.85.165409", + "nodeyear": 2012, + "ref-by-count": 103, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1026807511", + "attributes": { + "title": "Ultrastrong Coupling of the Cyclotron Transition of a 2D Electron Gas to a THz Metamaterial", + "doi": "10.1126/science.1216022", + "nodeyear": 2012, + "ref-by-count": 367, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1018266335", + "attributes": { + "title": "Quantum Chaos and Effective Thermalization", + "doi": "10.1103/physrevlett.108.073601", + "nodeyear": 2012, + "ref-by-count": 85, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1004826141", + "attributes": { + "title": "Finite-temperature mutual information in a simple phase transition", + "doi": "10.1088/1742-5468/2012/01/p01023", + "nodeyear": 2012, + "ref-by-count": 60, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1027689745", + "attributes": { + "title": "Dynamics of nonequilibrium Dicke models", + "doi": "10.1103/physreva.85.013817", + "nodeyear": 2012, + "ref-by-count": 134, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1007363629", + "attributes": { + "title": "Simulating Z2 topological insulators with cold atoms in a one-dimensional optical lattice", + "doi": "10.1103/physreva.85.013638", + "nodeyear": 2012, + "ref-by-count": 79, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060759233", + "attributes": { + "title": "Frustration and Glassiness in Spin Models with Cavity-Mediated Interactions", + "doi": "10.1103/physrevlett.107.277201", + "nodeyear": 2011, + "ref-by-count": 122, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1021558365", + "attributes": { + "title": "Dicke Quantum Spin Glass of Atoms and Photons", + "doi": "10.1103/physrevlett.107.277202", + "nodeyear": 2011, + "ref-by-count": 142, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1020252590", + "attributes": { + "title": "A study of quantum phase transitions and quantum monodromy in the bending motion of non-rigid molecules", + "doi": "10.1016/j.molstruc.2011.10.016", + "nodeyear": 2011, + "ref-by-count": 47, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060637445", + "attributes": { + "title": "Topological classification of adiabatic processes", + "doi": "10.1103/physrevb.84.195410", + "nodeyear": 2011, + "ref-by-count": 33, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1043279965", + "attributes": { + "title": "Protected Quantum Computation with Multiple Resonators in Ultrastrong Coupling Circuit QED", + "doi": "10.1103/physrevlett.107.190402", + "nodeyear": 2011, + "ref-by-count": 93, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1051208711", + "attributes": { + "title": "Phase transitions and dark-state physics in two-color superradiance", + "doi": "10.1103/physreva.84.053856", + "nodeyear": 2011, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060758977", + "attributes": { + "title": "Strongly Dipolar Bose-Einstein Condensate of Dysprosium", + "doi": "10.1103/physrevlett.107.190401", + "nodeyear": 2011, + "ref-by-count": 577, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1050814349", + "attributes": { + "title": "Regularity and chaos at critical points of first-order quantum phase transitions", + "doi": "10.1103/physrevc.84.041302", + "nodeyear": 2011, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1038797520", + "attributes": { + "title": "Path integral approach to the full Dicke model", + "doi": "10.1016/j.physa.2011.05.018", + "nodeyear": 2011, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1013295901", + "attributes": { + "title": "Exploring Symmetry Breaking at the Dicke Quantum Phase Transition", + "doi": "10.1103/physrevlett.107.140402", + "nodeyear": 2011, + "ref-by-count": 286, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1050856595", + "attributes": { + "title": "Quantum Hall effect in a one-dimensional dynamical system", + "doi": "10.1103/physrevb.84.115133", + "nodeyear": 2011, + "ref-by-count": 71, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1040293571", + "attributes": { + "title": "Superradiant Phase Transitions and the Standard Description of Circuit QED", + "doi": "10.1103/physrevlett.107.113602", + "nodeyear": 2011, + "ref-by-count": 128, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1057982297", + "attributes": { + "title": "Complete experimental rovibrational eigenenergies of HCN up to 6880 cm\u22121 above the ground state", + "doi": "10.1063/1.3598942", + "nodeyear": 2011, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "03:0.60;02:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1007789030", + "attributes": { + "title": "Majorana Fermions in Equilibrium and in Driven Cold-Atom Quantum Wires", + "doi": "10.1103/physrevlett.106.220402", + "nodeyear": 2011, + "ref-by-count": 530, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1025212910", + "attributes": { + "title": "Three-dimensional phase diagram of disordered HgTe/CdTe quantum spin-Hall wells", + "doi": "10.1103/physrevb.83.195119", + "nodeyear": 2011, + "ref-by-count": 56, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1018872620", + "attributes": { + "title": "Equilibration of quantum systems and subsystems", + "doi": "10.1088/1367-2630/13/5/053009", + "nodeyear": 2011, + "ref-by-count": 127, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060508644", + "attributes": { + "title": "No singularities in observables at the phase transition in the Dicke model", + "doi": "10.1103/physreva.83.051601", + "nodeyear": 2011, + "ref-by-count": 56, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1044585590", + "attributes": { + "title": "Sudden vanishing and reappearance of nonclassical effects: General occurrence of finite-time decays and periodic vanishings of nonclassicality and entanglement witnesses", + "doi": "10.1103/physreva.83.053814", + "nodeyear": 2011, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1063125329", + "attributes": { + "title": "Disorder-Induced Multiple Transition Involving Z2 Topological Insulator", + "doi": "10.1143/jpsj.80.053703", + "nodeyear": 2011, + "ref-by-count": 48, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1041781555", + "attributes": { + "title": "Floquet topological insulator in semiconductor quantum wells", + "doi": "10.1038/nphys1926", + "nodeyear": 2011, + "ref-by-count": 1104, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1029141598", + "attributes": { + "title": "Many-body coherent destruction of tunneling in photonic lattices", + "doi": "10.1103/physreva.83.034102", + "nodeyear": 2011, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1014126670", + "attributes": { + "title": "Quantum quench influenced by an excited-state phase transition", + "doi": "10.1103/physreva.83.033802", + "nodeyear": 2011, + "ref-by-count": 67, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1013320119", + "attributes": { + "title": "The Quantum Spin Hall Effect", + "doi": "10.1146/annurev-conmatphys-062910-140538", + "nodeyear": 2011, + "ref-by-count": 103, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1007431288", + "attributes": { + "title": "Qubit-oscillator system under ultrastrong coupling and extreme driving", + "doi": "10.1103/physreva.83.030301", + "nodeyear": 2011, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1005562834", + "attributes": { + "title": "Disordered topological insulators: a non-commutative geometry perspective", + "doi": "10.1088/1751-8113/44/11/113001", + "nodeyear": 2011, + "ref-by-count": 86, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1027465833", + "attributes": { + "title": "Quantum phase transitions in fully connected spin models: An entanglement perspective", + "doi": "10.1103/physreva.83.022327", + "nodeyear": 2011, + "ref-by-count": 33, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1045115933", + "attributes": { + "title": "Topological insulators and superconductors", + "doi": "10.1103/revmodphys.83.1057", + "nodeyear": 2011, + "ref-by-count": 8984, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1037152641", + "attributes": { + "title": "Colloquium: Nonequilibrium dynamics of closed interacting quantum systems", + "doi": "10.1103/revmodphys.83.863", + "nodeyear": 2011, + "ref-by-count": 1769, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1108131266", + "attributes": { + "title": "Understanding Quantum Phase Transitions", + "doi": "10.1201/b10273", + "nodeyear": 2010, + "ref-by-count": 79, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1057963818", + "attributes": { + "title": "Complete experimental rovibrational eigenenergies of HNC up to 3743cm\u22121 above the ground state", + "doi": "10.1063/1.3503508", + "nodeyear": 2010, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1052484094", + "attributes": { + "title": "Quasienergy description of the driven Jaynes-Cummings model", + "doi": "10.1103/physrevb.82.155129", + "nodeyear": 2010, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1062937215", + "attributes": { + "title": "FIDELITY APPROACH TO QUANTUM PHASE TRANSITIONS", + "doi": "10.1142/s0217979210056335", + "nodeyear": 2010, + "ref-by-count": 365, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1007437051", + "attributes": { + "title": "Entanglement and Sensitivity in Precision Measurements with States of a Fluctuating Number of Particles", + "doi": "10.1103/physrevlett.105.120501", + "nodeyear": 2010, + "ref-by-count": 79, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1035787773", + "attributes": { + "title": "No-go theorem for superradiant quantum phase transitions in cavity QED and counter-example in circuit QED", + "doi": "10.1038/ncomms1069", + "nodeyear": 2010, + "ref-by-count": 214, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1018529463", + "attributes": { + "title": "Exploring topological phases with quantum walks", + "doi": "10.1103/physreva.82.033429", + "nodeyear": 2010, + "ref-by-count": 331, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1037217818", + "attributes": { + "title": "Quantum Nondemolition Measurement of Large-Spin Ensembles by Dynamical Decoupling", + "doi": "10.1103/physrevlett.105.093602", + "nodeyear": 2010, + "ref-by-count": 59, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042729374", + "attributes": { + "title": "Critical State of the Anderson Transition: Between a Metal and an Insulator", + "doi": "10.1103/physrevlett.105.090601", + "nodeyear": 2010, + "ref-by-count": 90, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1039430067", + "attributes": { + "title": "Collective Excitations of a Dipolar Bose-Einstein Condensate", + "doi": "10.1103/physrevlett.105.040404", + "nodeyear": 2010, + "ref-by-count": 58, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1009145988", + "attributes": { + "title": "Collective Dynamics of Bose-Einstein Condensates in Optical Cavities", + "doi": "10.1103/physrevlett.105.043001", + "nodeyear": 2010, + "ref-by-count": 120, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1016989667", + "attributes": { + "title": "Testing nonclassicality in multimode fields: A unified derivation of classical inequalities", + "doi": "10.1103/physreva.82.013824", + "nodeyear": 2010, + "ref-by-count": 141, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1005408468", + "attributes": { + "title": "Adiabatic creation of atomic squeezing in dark states versus decoherences", + "doi": "10.1103/physreva.82.012112", + "nodeyear": 2010, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1021507156", + "attributes": { + "title": "Landau\u2013Zener\u2013St\u00fcckelberg interferometry", + "doi": "10.1016/j.physrep.2010.03.002", + "nodeyear": 2010, + "ref-by-count": 528, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1033015118", + "attributes": { + "title": "Photoinduced Transition between Conventional and Topological Insulators in Two-Dimensional Electronic Systems", + "doi": "10.1103/physrevlett.105.017401", + "nodeyear": 2010, + "ref-by-count": 239, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1001545329", + "attributes": { + "title": "Entanglement-assisted atomic clock beyond the projection noise limit", + "doi": "10.1088/1367-2630/12/6/065032", + "nodeyear": 2010, + "ref-by-count": 118, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1017887827", + "attributes": { + "title": "The network model for the quantum spin Hall effect: two-dimensional Dirac fermions, topological quantum numbers and corner multifractality", + "doi": "10.1088/1367-2630/12/6/065005", + "nodeyear": 2010, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1047837644", + "attributes": { + "title": "Ultrastrong coupling between a cavity resonator and the cyclotron transition of a two-dimensional electron gas in the case of an integer filling factor", + "doi": "10.1103/physrevb.81.235303", + "nodeyear": 2010, + "ref-by-count": 86, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1015483129", + "attributes": { + "title": "Circuit QED scheme for the realization of the Lipkin-Meshkov-Glick model", + "doi": "10.1209/0295-5075/90/54001", + "nodeyear": 2010, + "ref-by-count": 41, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1025519412", + "attributes": { + "title": "Three-Dimensional Roton Excitations and Supersolid Formation in Rydberg-Excited Bose-Einstein Condensates", + "doi": "10.1103/physrevlett.104.195302", + "nodeyear": 2010, + "ref-by-count": 316, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1002419553", + "attributes": { + "title": "Robust and scalable optical one-way quantum computation", + "doi": "10.1103/physreva.81.052332", + "nodeyear": 2010, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1065173408", + "attributes": { + "title": "Polarization squeezing and multipartite entanglement of triphoton states", + "doi": "10.1364/josab.27.00a105", + "nodeyear": 2010, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "09:0.33;01:0.33;02:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1035001229", + "attributes": { + "title": "Analysis of the FASSST rotational spectrum of NCNCS in view of quantum monodromy", + "doi": "10.1039/b922023b", + "nodeyear": 2010, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1031435740", + "attributes": { + "title": "Dicke-Model Phase Transition in the Quantum Motion of a Bose-Einstein Condensate in an Optical Cavity", + "doi": "10.1103/physrevlett.104.130401", + "nodeyear": 2010, + "ref-by-count": 288, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1049607631", + "attributes": { + "title": "Sub-shot-noise quantum metrology with entangled identical particles", + "doi": "10.1016/j.aop.2010.01.005", + "nodeyear": 2010, + "ref-by-count": 65, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1048839595", + "attributes": { + "title": "Quantum Noise Limited and Entanglement-Assisted Magnetometry", + "doi": "10.1103/physrevlett.104.133601", + "nodeyear": 2010, + "ref-by-count": 281, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1013441281", + "attributes": { + "title": "Nonlinear atom interferometer surpasses classical precision limit", + "doi": "10.1038/nature08919", + "nodeyear": 2010, + "ref-by-count": 651, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1004049717", + "attributes": { + "title": "Atom-chip-based generation of entanglement for quantum metrology", + "doi": "10.1038/nature08988", + "nodeyear": 2010, + "ref-by-count": 597, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060756669", + "attributes": { + "title": "Sub-Projection-Noise Sensitivity in Broadband Atomic Magnetometry", + "doi": "10.1103/physrevlett.104.093602", + "nodeyear": 2010, + "ref-by-count": 107, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060507227", + "attributes": { + "title": "Universality of the negativity in the Lipkin-Meshkov-Glick model", + "doi": "10.1103/physreva.81.032311", + "nodeyear": 2010, + "ref-by-count": 64, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060756621", + "attributes": { + "title": "States of an Ensemble of Two-Level Atoms with Reduced Quantum Uncertainty", + "doi": "10.1103/physrevlett.104.073604", + "nodeyear": 2010, + "ref-by-count": 221, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1015906101", + "attributes": { + "title": "Implementation of Cavity Squeezing of a Collective Atomic Spin", + "doi": "10.1103/physrevlett.104.073602", + "nodeyear": 2010, + "ref-by-count": 295, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1064232873", + "attributes": { + "title": "Parametric resonance and spin-charge separation in 1D fermionic systems", + "doi": "10.1209/0295-5075/89/40005", + "nodeyear": 2010, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060507174", + "attributes": { + "title": "Metastable quantum phase transitions in a periodic one-dimensional Bose gas. II. Many-body theory", + "doi": "10.1103/physreva.81.023625", + "nodeyear": 2010, + "ref-by-count": 51, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1038435541", + "attributes": { + "title": "Sudden vanishing of spin squeezing under decoherence", + "doi": "10.1103/physreva.81.022106", + "nodeyear": 2010, + "ref-by-count": 76, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1049014120", + "attributes": { + "title": "Vacuum Degeneracy of a Circuit QED System in the Ultrastrong Coupling Regime", + "doi": "10.1103/physrevlett.104.023601", + "nodeyear": 2010, + "ref-by-count": 96, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1034220073", + "attributes": { + "title": "High Bandwidth Atomic Magnetometery with Continuous Quantum Nondemolition Measurements", + "doi": "10.1103/physrevlett.104.013601", + "nodeyear": 2010, + "ref-by-count": 89, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060506993", + "attributes": { + "title": "Entanglement and parametric resonance in driven quantum systems", + "doi": "10.1103/physreva.81.012316", + "nodeyear": 2010, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042995256", + "attributes": { + "title": "Quantum interface between light and atomic ensembles", + "doi": "10.1103/revmodphys.82.1041", + "nodeyear": 2010, + "ref-by-count": 835, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1030644001", + "attributes": { + "title": "Finite-size behavior of quantum collective spin systems", + "doi": "10.1103/physreva.81.013818", + "nodeyear": 2010, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1004083979", + "attributes": { + "title": "Colloquium: Topological insulators", + "doi": "10.1103/revmodphys.82.3045", + "nodeyear": 2010, + "ref-by-count": 12556, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1057929181", + "attributes": { + "title": "State-selective spectroscopy of water up to its first dissociation limit", + "doi": "10.1063/1.3273207", + "nodeyear": 2009, + "ref-by-count": 52, + "is_input_DOI": false, + "category_for": "02:0.50;03:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1053140660", + "attributes": { + "title": "The physics of dipolar bosonic quantum gases", + "doi": "10.1088/0034-4885/72/12/126401", + "nodeyear": 2009, + "ref-by-count": 1052, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1010719555", + "attributes": { + "title": "Theory of the Topological Anderson Insulator", + "doi": "10.1103/physrevlett.103.196805", + "nodeyear": 2009, + "ref-by-count": 255, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1026487091", + "attributes": { + "title": "Extracavity quantum vacuum radiation from a single qubit", + "doi": "10.1103/physreva.80.053810", + "nodeyear": 2009, + "ref-by-count": 163, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1017394305", + "attributes": { + "title": "Optimal control of number squeezing in trapped Bose-Einstein condensates", + "doi": "10.1103/physreva.80.053625", + "nodeyear": 2009, + "ref-by-count": 55, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060756185", + "attributes": { + "title": "Magnetoroton Softening in Rb Spinor Condensates with Dipolar Interactions", + "doi": "10.1103/physrevlett.103.185301", + "nodeyear": 2009, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1007113001", + "attributes": { + "title": "Squeezing of atomic quantum projection noise", + "doi": "10.1080/09500340903033682", + "nodeyear": 2009, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1020456012", + "attributes": { + "title": "Quantum chaos and critical behavior on a chip", + "doi": "10.1103/physrevb.80.165308", + "nodeyear": 2009, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1012500209", + "attributes": { + "title": "Emergent crystallinity and frustration with Bose\u2013Einstein condensates in multimode cavities", + "doi": "10.1038/nphys1403", + "nodeyear": 2009, + "ref-by-count": 159, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1062460456", + "attributes": { + "title": "Quantum Simulators", + "doi": "10.1126/science.1177838", + "nodeyear": 2009, + "ref-by-count": 584, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1005186218", + "attributes": { + "title": "Many-Body Coherent Destruction of Tunneling", + "doi": "10.1103/physrevlett.103.133002", + "nodeyear": 2009, + "ref-by-count": 113, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1044365852", + "attributes": { + "title": "Unified description of inhomogeneities, dissipation and transport in quantum light\u2013atom interfaces", + "doi": "10.1088/0953-4075/42/19/195502", + "nodeyear": 2009, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1009071596", + "attributes": { + "title": "Spin squeezing in a generalized one-axis twisting model", + "doi": "10.1088/1367-2630/11/7/073049", + "nodeyear": 2009, + "ref-by-count": 105, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1015377513", + "attributes": { + "title": "Critical exponent for the quantum Hall transition", + "doi": "10.1103/physrevb.80.041304", + "nodeyear": 2009, + "ref-by-count": 104, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1021047010", + "attributes": { + "title": "Mesoscopic atomic entanglement for precision measurements beyond the standard quantum limit", + "doi": "10.1073/pnas.0901550106", + "nodeyear": 2009, + "ref-by-count": 287, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060506382", + "attributes": { + "title": "Fisher information and spin squeezing in the Lipkin-Meshkov-Glick model", + "doi": "10.1103/physreva.80.012318", + "nodeyear": 2009, + "ref-by-count": 102, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1047238674", + "attributes": { + "title": "Quantum entanglement of spin-1 bosons with coupled ground states in optical lattices", + "doi": "10.1088/0953-4075/42/14/145505", + "nodeyear": 2009, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1051513505", + "attributes": { + "title": "Spin squeezing and entanglement", + "doi": "10.1103/physreva.79.042334", + "nodeyear": 2009, + "ref-by-count": 139, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1030702899", + "attributes": { + "title": "Topological Anderson Insulator", + "doi": "10.1103/physrevlett.102.136806", + "nodeyear": 2009, + "ref-by-count": 324, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1017748089", + "attributes": { + "title": "Nonadiabaticity and large fluctuations in a many-particle Landau-Zener problem", + "doi": "10.1103/physreva.79.042703", + "nodeyear": 2009, + "ref-by-count": 70, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1040606488", + "attributes": { + "title": "Entanglement detection", + "doi": "10.1016/j.physrep.2009.02.004", + "nodeyear": 2009, + "ref-by-count": 1304, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1009280350", + "attributes": { + "title": "Entanglement, Nonlinear Dynamics, and the Heisenberg Limit", + "doi": "10.1103/physrevlett.102.100401", + "nodeyear": 2009, + "ref-by-count": 540, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1023112037", + "attributes": { + "title": "Sub-cycle switch-on of ultrastrong light\u2013matter interaction", + "doi": "10.1038/nature07838", + "nodeyear": 2009, + "ref-by-count": 423, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1005768866", + "attributes": { + "title": "Photovoltaic Hall effect in graphene", + "doi": "10.1103/physrevb.79.081406", + "nodeyear": 2009, + "ref-by-count": 823, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1028284777", + "attributes": { + "title": "Optimizing number squeezing when splitting a mesoscopic condensate", + "doi": "10.1103/physreva.79.021603", + "nodeyear": 2009, + "ref-by-count": 77, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1034324600", + "attributes": { + "title": "Spin squeezing in the presence of dissipation", + "doi": "10.1016/j.physleta.2008.12.040", + "nodeyear": 2009, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042003394", + "attributes": { + "title": "Spin Squeezing of a Cold Atomic Ensemble with the Nuclear Spin of One-Half", + "doi": "10.1103/physrevlett.102.033601", + "nodeyear": 2009, + "ref-by-count": 106, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1053325657", + "attributes": { + "title": "Spin squeezing in a bimodal condensate: spatial dynamics and particle losses", + "doi": "10.1140/epjb/e2008-00472-6", + "nodeyear": 2009, + "ref-by-count": 72, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1002548185", + "attributes": { + "title": "Quantum entanglement", + "doi": "10.1103/revmodphys.81.865", + "nodeyear": 2009, + "ref-by-count": 5374, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1001677407", + "attributes": { + "title": "Optics and interferometry with atoms and molecules", + "doi": "10.1103/revmodphys.81.1051", + "nodeyear": 2009, + "ref-by-count": 941, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1038056243", + "attributes": { + "title": "Quantum phase transitions and structural evolution in nuclei", + "doi": "10.1016/j.ppnp.2008.06.002", + "nodeyear": 2009, + "ref-by-count": 72, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1016014950", + "attributes": { + "title": "Quantum phase transitions in the interacting boson model", + "doi": "10.1016/j.ppnp.2008.08.001", + "nodeyear": 2009, + "ref-by-count": 159, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1098669586", + "attributes": { + "title": "Introduction to Optical Quantum Information Processing", + "doi": "10.1017/cbo9781139193658", + "nodeyear": 2009, + "ref-by-count": 201, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1009420992", + "attributes": { + "title": "Controlled Generation of Squeezed States of Microwave Radiation in a Superconducting Resonant Circuit", + "doi": "10.1103/physrevlett.101.253602", + "nodeyear": 2008, + "ref-by-count": 58, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019769175", + "attributes": { + "title": "Experimental Observation of the Anderson Metal-Insulator Transition with Atomic Matter Waves", + "doi": "10.1103/physrevlett.101.255702", + "nodeyear": 2008, + "ref-by-count": 302, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1024053463", + "attributes": { + "title": "Fully connected network of superconducting qubits in a cavity", + "doi": "10.1088/1367-2630/10/11/113020", + "nodeyear": 2008, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1039526439", + "attributes": { + "title": "Magnetic Dipolar Interaction in a Bose-Einstein Condensate Atomic Interferometer", + "doi": "10.1103/physrevlett.101.190405", + "nodeyear": 2008, + "ref-by-count": 85, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1032879437", + "attributes": { + "title": "Dynamical properties across a quantum phase transition in the Lipkin-Meshkov-Glick model", + "doi": "10.1103/physreva.78.052329", + "nodeyear": 2008, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1030131727", + "attributes": { + "title": "Backaction noise produced via cavity-aided nondemolition measurement of an atomic clock state", + "doi": "10.1103/physreva.78.051803", + "nodeyear": 2008, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1030554066", + "attributes": { + "title": "Squeezing and entanglement in a Bose\u2013Einstein condensate", + "doi": "10.1038/nature07332", + "nodeyear": 2008, + "ref-by-count": 567, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1037292429", + "attributes": { + "title": "Quantum criticality as a resource for quantum estimation", + "doi": "10.1103/physreva.78.042105", + "nodeyear": 2008, + "ref-by-count": 134, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1015752685", + "attributes": { + "title": "Formation of Ultracold Polar Molecules in the Rovibrational Ground State", + "doi": "10.1103/physrevlett.101.133004", + "nodeyear": 2008, + "ref-by-count": 497, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1062458662", + "attributes": { + "title": "A High Phase-Space-Density Gas of Polar Molecules", + "doi": "10.1126/science.1163861", + "nodeyear": 2008, + "ref-by-count": 1412, + "is_input_DOI": false, + "category_for": "03:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1000524935", + "attributes": { + "title": "Boundary criticality at the Anderson transition between a metal and a quantum spin Hall insulator in two dimensions", + "doi": "10.1103/physrevb.78.115301", + "nodeyear": 2008, + "ref-by-count": 39, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019072925", + "attributes": { + "title": "Adiabatic quantum dynamics of the Lipkin-Meshkov-Glick model", + "doi": "10.1103/physrevb.78.104426", + "nodeyear": 2008, + "ref-by-count": 70, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1018429633", + "attributes": { + "title": "Reconstruction of non-classical cavity field states with snapshots of their decoherence", + "doi": "10.1038/nature07288", + "nodeyear": 2008, + "ref-by-count": 404, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042980616", + "attributes": { + "title": "Spin squeezing in optical lattice clocks via lattice-based QND measurements", + "doi": "10.1088/1367-2630/10/7/073014", + "nodeyear": 2008, + "ref-by-count": 39, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060625484", + "attributes": { + "title": "Classical dynamics of resonantly modulated large-spin systems", + "doi": "10.1103/physrevb.78.024401", + "nodeyear": 2008, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1006613232", + "attributes": { + "title": "Computational molecular spectroscopy for X\u223c2\u0394 NiCN: Large-amplitude bending motion", + "doi": "10.1016/j.jms.2008.04.001", + "nodeyear": 2008, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1006852009", + "attributes": { + "title": "Atomic spin squeezing in an optical cavity", + "doi": "10.1103/physreva.77.063811", + "nodeyear": 2008, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1037170495", + "attributes": { + "title": "Inhomogeneous light shift effects on atomic quantum state evolution in non-destructive measurements", + "doi": "10.1088/1367-2630/10/5/053032", + "nodeyear": 2008, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1014259920", + "attributes": { + "title": "Optimum Spin Squeezing in Bose-Einstein Condensates with Particle Losses", + "doi": "10.1103/physrevlett.100.210401", + "nodeyear": 2008, + "ref-by-count": 110, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1007403980", + "attributes": { + "title": "Near infrared emission spectrum of HCN", + "doi": "10.1016/j.jms.2008.01.006", + "nodeyear": 2008, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1046531133", + "attributes": { + "title": "The squeeze goes on", + "doi": "10.1038/453045a", + "nodeyear": 2008, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1021493626", + "attributes": { + "title": "Self-organization of a Bose-Einstein condensate in an optical cavity", + "doi": "10.1140/epjd/e2008-00074-6", + "nodeyear": 2008, + "ref-by-count": 143, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1023551219", + "attributes": { + "title": "Electric-dipole-forbidden nuclear transitions driven by super-intense laser fields", + "doi": "10.1103/physrevc.77.044602", + "nodeyear": 2008, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1018345323", + "attributes": { + "title": "Collective spin systems in dispersive optical cavity QED: Quantum phase transitions and entanglement", + "doi": "10.1103/physreva.77.043810", + "nodeyear": 2008, + "ref-by-count": 53, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1009497503", + "attributes": { + "title": "A quantum-enhanced prototype gravitational-wave detector", + "doi": "10.1038/nphys920", + "nodeyear": 2008, + "ref-by-count": 238, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1045592513", + "attributes": { + "title": "The quadratic spin squeezing operators", + "doi": "10.1088/1751-8113/41/14/145302", + "nodeyear": 2008, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060504243", + "attributes": { + "title": "Algebraic approach to two-dimensional systems: Shape phase transitions, monodromy, and thermodynamic quantities", + "doi": "10.1103/physreva.77.032115", + "nodeyear": 2008, + "ref-by-count": 84, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1004419214", + "attributes": { + "title": "Entanglement and squeezing of multi-qubit systems using a two-axis countertwisting Hamiltonian with an external field", + "doi": "10.1016/j.physleta.2007.12.021", + "nodeyear": 2008, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1013094749", + "attributes": { + "title": "Stabilization of a purely dipolar quantum gas against collapse", + "doi": "10.1038/nphys887", + "nodeyear": 2008, + "ref-by-count": 328, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1007390089", + "attributes": { + "title": "Sub-Shot-Noise Magnetometry with a Correlated Spin-Relaxation Dominated Alkali-Metal Vapor", + "doi": "10.1103/physrevlett.100.073002", + "nodeyear": 2008, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1001441208", + "attributes": { + "title": "Ultracold atoms in optical lattices generated by quantized light fields", + "doi": "10.1140/epjd/e2008-00016-4", + "nodeyear": 2008, + "ref-by-count": 119, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1048347725", + "attributes": { + "title": "Dynamical Quantum Phase Transitions in the Dissipative Lipkin-Meshkov-Glick Model with Proposed Realization in Optical Cavity QED", + "doi": "10.1103/physrevlett.100.040403", + "nodeyear": 2008, + "ref-by-count": 124, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1011465158", + "attributes": { + "title": "Collective Atomic Recoil Lasing and Superradiant Rayleigh Scattering in a high\u2010Q ring cavity", + "doi": "10.1063/1.2839129", + "nodeyear": 2008, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042363867", + "attributes": { + "title": "Anderson transitions", + "doi": "10.1103/revmodphys.80.1355", + "nodeyear": 2008, + "ref-by-count": 1131, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1013088353", + "attributes": { + "title": "Many-body physics with ultracold gases", + "doi": "10.1103/revmodphys.80.885", + "nodeyear": 2008, + "ref-by-count": 5682, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1044584359", + "attributes": { + "title": "Quantum Reconstruction of an Intense Polarization Squeezed Optical State", + "doi": "10.1103/physrevlett.99.220401", + "nodeyear": 2007, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1021708856", + "attributes": { + "title": "Dynamical Control of Matter-Wave Tunneling in Periodic Potentials", + "doi": "10.1103/physrevlett.99.220403", + "nodeyear": 2007, + "ref-by-count": 478, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1050049937", + "attributes": { + "title": "Tuning phase transition between quantum spin Hall and ordinary insulating phases", + "doi": "10.1103/physrevb.76.205304", + "nodeyear": 2007, + "ref-by-count": 106, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060834776", + "attributes": { + "title": "Storage of Spin Squeezing in a Two-Component Bose-Einstein Condensate", + "doi": "10.1103/physrevlett.99.170405", + "nodeyear": 2007, + "ref-by-count": 55, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1013564949", + "attributes": { + "title": "Generalized Rotating-Wave Approximation for Arbitrarily Large Coupling", + "doi": "10.1103/physrevlett.99.173601", + "nodeyear": 2007, + "ref-by-count": 227, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1034685599", + "attributes": { + "title": "Quantum Spin Hall Insulator State in HgTe Quantum Wells", + "doi": "10.1126/science.1148047", + "nodeyear": 2007, + "ref-by-count": 4255, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1041879228", + "attributes": { + "title": "Functional methods in the generalized Dicke model", + "doi": "10.1088/1751-8113/40/39/016", + "nodeyear": 2007, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1014388554", + "attributes": { + "title": "Fidelity, dynamic structure factor, and susceptibility in critical phenomena", + "doi": "10.1103/physreve.76.022101", + "nodeyear": 2007, + "ref-by-count": 366, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1048139891", + "attributes": { + "title": "Thermodynamical Limit of the Lipkin-Meshkov-Glick Model", + "doi": "10.1103/physrevlett.99.050402", + "nodeyear": 2007, + "ref-by-count": 152, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060621943", + "attributes": { + "title": "Period-voltage-driven quantum phase transition of superconducting charge qubits", + "doi": "10.1103/physrevb.76.054512", + "nodeyear": 2007, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1037196319", + "attributes": { + "title": "Two-mode squeezed states and entangled states of two mechanical resonators", + "doi": "10.1103/physrevb.76.064305", + "nodeyear": 2007, + "ref-by-count": 78, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019211121", + "attributes": { + "title": "Two-dimensional spin-filtered chiral network model for the Z2 quantum spin-Hall effect", + "doi": "10.1103/physrevb.76.075301", + "nodeyear": 2007, + "ref-by-count": 73, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1031310290", + "attributes": { + "title": "Strong dipolar effects in a quantum ferrofluid", + "doi": "10.1038/nature06036", + "nodeyear": 2007, + "ref-by-count": 387, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1031979890", + "attributes": { + "title": "Topological insulators with inversion symmetry", + "doi": "10.1103/physrevb.76.045302", + "nodeyear": 2007, + "ref-by-count": 2860, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1032955577", + "attributes": { + "title": "Probing the superfluid\u2013Mott-insulating shell structure of cold atoms by parametric excitations", + "doi": "10.1103/physreva.75.063612", + "nodeyear": 2007, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1014943403", + "attributes": { + "title": "Two-level systems driven by large-amplitude fields", + "doi": "10.1103/physreva.75.063414", + "nodeyear": 2007, + "ref-by-count": 179, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1023231651", + "attributes": { + "title": "Study of squeezing in spin clusters", + "doi": "10.1016/j.physleta.2007.02.007", + "nodeyear": 2007, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1025338423", + "attributes": { + "title": "Atomic squeezing in assembly of two two-level atoms interacting with a single mode coherent radiation", + "doi": "10.1140/epjd/e2007-00042-8", + "nodeyear": 2007, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1022911870", + "attributes": { + "title": "Localization in a Quantum Spin Hall System", + "doi": "10.1103/physrevlett.98.076802", + "nodeyear": 2007, + "ref-by-count": 110, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060503021", + "attributes": { + "title": "Spatial dynamics and spin squeezing in Bose-Einstein condensates", + "doi": "10.1103/physreva.75.023618", + "nodeyear": 2007, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060503017", + "attributes": { + "title": "Quantum dynamics of a spin-1 condensate in a double-well potential", + "doi": "10.1103/physreva.75.023605", + "nodeyear": 2007, + "ref-by-count": 26, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1037722040", + "attributes": { + "title": "Extended Coherence Time with Atom-Number Squeezed States", + "doi": "10.1103/physrevlett.98.040402", + "nodeyear": 2007, + "ref-by-count": 59, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1023876405", + "attributes": { + "title": "Entanglement entropy in collective models", + "doi": "10.1088/1742-5468/2007/01/p01015", + "nodeyear": 2007, + "ref-by-count": 69, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1046281967", + "attributes": { + "title": "Proposed realization of the Dicke-model quantum phase transition in an optical cavity QED system", + "doi": "10.1103/physreva.75.013804", + "nodeyear": 2007, + "ref-by-count": 370, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1024518599", + "attributes": { + "title": "Decoherence and the Quantum-To-Classical Transition", + "doi": "10.1007/978-3-540-35775-9", + "nodeyear": 2007, + "ref-by-count": 103, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1030957871", + "attributes": { + "title": "Quantum Spin Hall Effect and Topological Phase Transition in HgTe Quantum Wells", + "doi": "10.1126/science.1133734", + "nodeyear": 2006, + "ref-by-count": 4665, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1017626170", + "attributes": { + "title": "Generalized spin-squeezing inequalities in N-qubit systems: Theory and experiment", + "doi": "10.1103/physreva.74.052319", + "nodeyear": 2006, + "ref-by-count": 69, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1047521083", + "attributes": { + "title": "Infrared emission spectrum of hot D2O", + "doi": "10.1016/j.jms.2006.09.007", + "nodeyear": 2006, + "ref-by-count": 41, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1029816697", + "attributes": { + "title": "Infinite-range Ising ferromagnet in a time-dependent transverse magnetic field: Quench and ac dynamics near the quantum critical point", + "doi": "10.1103/physrevb.74.144423", + "nodeyear": 2006, + "ref-by-count": 79, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1017123471", + "attributes": { + "title": "The hidden kernel of molecular quasi-linearity: Quantum monodromy", + "doi": "10.1016/j.molstruc.2006.06.036", + "nodeyear": 2006, + "ref-by-count": 64, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1030627369", + "attributes": { + "title": "Scaling behavior of the adiabatic Dicke model", + "doi": "10.1103/physreva.74.022324", + "nodeyear": 2006, + "ref-by-count": 39, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1036259707", + "attributes": { + "title": "Quantum transport phenomena in disordered electron systems with spin\u2013orbit coupling in two dimensions and below", + "doi": "10.1016/j.physe.2006.03.102", + "nodeyear": 2006, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1016510934", + "attributes": { + "title": "Spin Squeezing and Light Entanglement in Coherent Population Trapping", + "doi": "10.1103/physrevlett.97.023605", + "nodeyear": 2006, + "ref-by-count": 52, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1043762285", + "attributes": { + "title": "Concurrence in collective models", + "doi": "10.1103/physreva.73.062318", + "nodeyear": 2006, + "ref-by-count": 65, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1012449759", + "attributes": { + "title": "Tuning the Mott Transition in a Bose-Einstein Condensate by Multiple Photon Absorption", + "doi": "10.1103/physrevlett.96.210403", + "nodeyear": 2006, + "ref-by-count": 84, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1027944496", + "attributes": { + "title": "Finite-size scaling exponents in the Dicke model", + "doi": "10.1209/epl/i2006-10041-9", + "nodeyear": 2006, + "ref-by-count": 133, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060502238", + "attributes": { + "title": "Spin squeezing and entanglement in a dispersive cavity", + "doi": "10.1103/physreva.73.053817", + "nodeyear": 2006, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1044935711", + "attributes": { + "title": "Critical regime of two-dimensional Ando model: relation between critical conductance and fractal dimension of electronic eigenstates", + "doi": "10.1088/0305-4470/39/13/003", + "nodeyear": 2006, + "ref-by-count": 40, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1024394193", + "attributes": { + "title": "Spin squeezing properties in the quantum kicked top model", + "doi": "10.1088/0953-4075/39/3/009", + "nodeyear": 2006, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1017239584", + "attributes": { + "title": "Quantum Metrology", + "doi": "10.1103/physrevlett.96.010401", + "nodeyear": 2006, + "ref-by-count": 1266, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060839612", + "attributes": { + "title": "Dynamics of Bose-Einstein condensates in optical lattices", + "doi": "10.1103/revmodphys.78.179", + "nodeyear": 2006, + "ref-by-count": 1217, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060501875", + "attributes": { + "title": "Coherence dynamics of two-mode condensates in asymmetric potentials", + "doi": "10.1103/physreva.73.013602", + "nodeyear": 2006, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042812951", + "attributes": { + "title": "Generating conditional atomic entanglement by measuring photon number in a single output channel", + "doi": "10.1103/physreva.73.013801", + "nodeyear": 2006, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1043998630", + "attributes": { + "title": "Superfluid-Insulator Transition in a Periodically Driven Optical Lattice", + "doi": "10.1103/physrevlett.95.260404", + "nodeyear": 2005, + "ref-by-count": 420, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1052164705", + "attributes": { + "title": "Cold Atom Dynamics in a Quantum Optical Lattice Potential", + "doi": "10.1103/physrevlett.95.260401", + "nodeyear": 2005, + "ref-by-count": 146, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1026041336", + "attributes": { + "title": "Quantum Spin Hall Effect in Graphene", + "doi": "10.1103/physrevlett.95.226801", + "nodeyear": 2005, + "ref-by-count": 5229, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1002431819", + "attributes": { + "title": "Conditions for spin squeezing in a cold87Rb ensemble", + "doi": "10.1088/1464-4266/7/12/016", + "nodeyear": 2005, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1046878062", + "attributes": { + "title": "Spectroscopic signatures of nonrigidity: Algebraic analyses of infrared and Raman transitions in nonrigid species", + "doi": "10.1016/j.cplett.2005.07.119", + "nodeyear": 2005, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1010453004", + "attributes": { + "title": "Monodromy in the water molecule", + "doi": "10.1016/j.cplett.2005.08.028", + "nodeyear": 2005, + "ref-by-count": 70, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042249380", + "attributes": { + "title": "Z2 Topological Order and the Quantum Spin Hall Effect", + "doi": "10.1103/physrevlett.95.146802", + "nodeyear": 2005, + "ref-by-count": 4283, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1023373666", + "attributes": { + "title": "Long-Lived Quantum Memory with Nuclear Atomic Spins", + "doi": "10.1103/physrevlett.95.123002", + "nodeyear": 2005, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1032459275", + "attributes": { + "title": "Spin Squeezing Inequalities and Entanglement of N Qubit States", + "doi": "10.1103/physrevlett.95.120502", + "nodeyear": 2005, + "ref-by-count": 147, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1020459025", + "attributes": { + "title": "Dynamics of a Quantum Phase Transition", + "doi": "10.1103/physrevlett.95.105701", + "nodeyear": 2005, + "ref-by-count": 512, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1041985067", + "attributes": { + "title": "Continuous unitary transformations and finite-size scaling exponents in the Lipkin-Meshkov-Glick model", + "doi": "10.1103/physrevb.71.224420", + "nodeyear": 2005, + "ref-by-count": 187, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1015653335", + "attributes": { + "title": "Bose-Einstein Condensation of Chromium", + "doi": "10.1103/physrevlett.94.160401", + "nodeyear": 2005, + "ref-by-count": 892, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060501109", + "attributes": { + "title": "Quantum-noise-limited interferometric measurement of atomic noise: Towards spin squeezing on the Cs clock transition", + "doi": "10.1103/physreva.71.043807", + "nodeyear": 2005, + "ref-by-count": 51, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060501102", + "attributes": { + "title": "Dynamics of Bose-Einstein condensates in double-well potentials", + "doi": "10.1103/physreva.71.043603", + "nodeyear": 2005, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1034908465", + "attributes": { + "title": "Entanglement and spin-squeezing properties for three bosons in two modes", + "doi": "10.1103/physreva.71.042317", + "nodeyear": 2005, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1007520534", + "attributes": { + "title": "Atomic quantum memory: Cavity versus single-pass schemes", + "doi": "10.1103/physreva.71.043801", + "nodeyear": 2005, + "ref-by-count": 53, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1052759525", + "attributes": { + "title": "Coherent and collective quantum optical effects in mesoscopic systems", + "doi": "10.1016/j.physrep.2004.12.002", + "nodeyear": 2005, + "ref-by-count": 361, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060839596", + "attributes": { + "title": "Colloquium: Bulk Bogoliubov excitations in a Bose-Einstein condensate", + "doi": "10.1103/revmodphys.77.187", + "nodeyear": 2005, + "ref-by-count": 148, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1007053255", + "attributes": { + "title": "Limits to phase resolution in matter-wave interferometry", + "doi": "10.1103/physreva.70.063612", + "nodeyear": 2004, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1062451106", + "attributes": { + "title": "Quantum-Enhanced Measurements: Beating the Standard Quantum Limit", + "doi": "10.1126/science.1104149", + "nodeyear": 2004, + "ref-by-count": 1731, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1049164678", + "attributes": { + "title": "Atomic squeezing under collective emission", + "doi": "10.1103/physreva.70.053828", + "nodeyear": 2004, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1033004759", + "attributes": { + "title": "Spin squeezing and precision probing with light and samples of atoms in the Gaussian description", + "doi": "10.1103/physreva.70.052324", + "nodeyear": 2004, + "ref-by-count": 84, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1039525977", + "attributes": { + "title": "Numerical estimation of the \u03b2 function in two-dimensional systems with spin-orbit coupling", + "doi": "10.1103/physrevb.70.035115", + "nodeyear": 2004, + "ref-by-count": 52, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1016807636", + "attributes": { + "title": "Correlated motion of two atoms trapped in a single-mode cavity field", + "doi": "10.1103/physreva.70.013414", + "nodeyear": 2004, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1062449614", + "attributes": { + "title": "Toward Heisenberg-Limited Spectroscopy with Multiparticle Entangled States", + "doi": "10.1126/science.1097576", + "nodeyear": 2004, + "ref-by-count": 417, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060828404", + "attributes": { + "title": "Quantum Phase Transitions in Mesoscopic Systems", + "doi": "10.1103/physrevlett.92.212501", + "nodeyear": 2004, + "ref-by-count": 151, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060828378", + "attributes": { + "title": "Electromagnetically Induced Transparency with Squeezed Vacuum", + "doi": "10.1103/physrevlett.92.203602", + "nodeyear": 2004, + "ref-by-count": 78, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1039875361", + "attributes": { + "title": "Entanglement detection in optical lattices of bosonic atoms with collective measurements", + "doi": "10.1103/physreva.69.052327", + "nodeyear": 2004, + "ref-by-count": 53, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1022201659", + "attributes": { + "title": "Entanglement and the Phase Transition in Single-Mode Superradiance", + "doi": "10.1103/physrevlett.92.073602", + "nodeyear": 2004, + "ref-by-count": 353, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1045377669", + "attributes": { + "title": "Nonsymmetric Entanglement of Atomic Ensembles", + "doi": "10.1103/physrevlett.92.030407", + "nodeyear": 2004, + "ref-by-count": 31, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042239422", + "attributes": { + "title": "Spin squeezing as a measure of entanglement in a two-qubit system", + "doi": "10.1103/physreva.68.064301", + "nodeyear": 2003, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1046807340", + "attributes": { + "title": "Bose-Einstein condensates in 1D optical lattices", + "doi": "10.1140/epjd/e2003-00284-4", + "nodeyear": 2003, + "ref-by-count": 101, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019738669", + "attributes": { + "title": "EIT-assisted atomic squeezing", + "doi": "10.1140/epjd/e2003-00253-y", + "nodeyear": 2003, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1006013499", + "attributes": { + "title": "Quasi-Spin-Wave Quantum Memories with a Dynamical Symmetry", + "doi": "10.1103/physrevlett.91.147903", + "nodeyear": 2003, + "ref-by-count": 118, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1033308270", + "attributes": { + "title": "Measurement-induced spin squeezing in a cavity", + "doi": "10.1103/physreva.68.043820", + "nodeyear": 2003, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1012640711", + "attributes": { + "title": "Entanglement and spin squeezing of Bose-Einstein-condensed atoms", + "doi": "10.1103/physreva.68.043622", + "nodeyear": 2003, + "ref-by-count": 31, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060499456", + "attributes": { + "title": "Backaction-induced spin-squeezed states in a detuned quantum-nondemolition measurement", + "doi": "10.1103/physreva.68.035802", + "nodeyear": 2003, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1051173433", + "attributes": { + "title": "Optimally squeezed spin states", + "doi": "10.1103/physreva.68.013807", + "nodeyear": 2003, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1045761502", + "attributes": { + "title": "Quantum-correlated double-well tunneling of two-component Bose-Einstein condensates", + "doi": "10.1103/physreva.68.013604", + "nodeyear": 2003, + "ref-by-count": 45, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1005892928", + "attributes": { + "title": "Polarization squeezing of intense pulses with a fiber-optic Sagnac interferometer", + "doi": "10.1103/physreva.68.013815", + "nodeyear": 2003, + "ref-by-count": 54, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1009926257", + "attributes": { + "title": "A novel algebraic scheme for describing nonrigid molecules", + "doi": "10.1016/s0009-2614(03)00851-0", + "nodeyear": 2003, + "ref-by-count": 45, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1028628834", + "attributes": { + "title": "Roton-Maxon Spectrum and Stability of Trapped Dipolar Bose-Einstein Condensates", + "doi": "10.1103/physrevlett.90.250403", + "nodeyear": 2003, + "ref-by-count": 412, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1021921669", + "attributes": { + "title": "Chaos and the quantum phase transition in the Dicke model", + "doi": "10.1103/physreve.67.066203", + "nodeyear": 2003, + "ref-by-count": 517, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059137934", + "attributes": { + "title": "Quantum atom optics with Bose-Einstein condensates", + "doi": "10.1088/1367-2630/5/1/355", + "nodeyear": 2003, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1003323558", + "attributes": { + "title": "Separability criterion for separate quantum systems", + "doi": "10.1103/physreva.67.052104", + "nodeyear": 2003, + "ref-by-count": 68, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1027685238", + "attributes": { + "title": "Atomic spin squeezing in a \u039b system", + "doi": "10.1103/physreva.67.045801", + "nodeyear": 2003, + "ref-by-count": 34, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1048707800", + "attributes": { + "title": "Entanglement and spin squeezing in the two-atom Dicke model", + "doi": "10.1088/1464-4266/5/2/101", + "nodeyear": 2003, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1038116055", + "attributes": { + "title": "Rotons in Gaseous Bose-Einstein Condensates Irradiated by a Laser", + "doi": "10.1103/physrevlett.90.110402", + "nodeyear": 2003, + "ref-by-count": 139, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1034352273", + "attributes": { + "title": "Characterizing the entanglement of symmetric many-particle spin-12 systems", + "doi": "10.1103/physreva.67.022112", + "nodeyear": 2003, + "ref-by-count": 161, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1057717131", + "attributes": { + "title": "Spectroscopically determined potential energy surface of H216O up to 25 000 cm\u22121", + "doi": "10.1063/1.1532001", + "nodeyear": 2003, + "ref-by-count": 92, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1034618848", + "attributes": { + "title": "Quantum Chaos Triggered by Precursors of a Quantum Phase Transition: The Dicke Model", + "doi": "10.1103/physrevlett.90.044101", + "nodeyear": 2003, + "ref-by-count": 378, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060825740", + "attributes": { + "title": "Collective Cooling and Self-Organization of Atoms in a Cavity", + "doi": "10.1103/physrevlett.89.253003", + "nodeyear": 2002, + "ref-by-count": 296, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1036319695", + "attributes": { + "title": "Mutual coherence and spin squeezing in double-well atomic condensates", + "doi": "10.1016/s0375-9601(02)00131-7", + "nodeyear": 2002, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1048921956", + "attributes": { + "title": "Continuous quantum nondemolition feedback and unconditional atomic spin squeezing", + "doi": "10.1088/0953-4075/35/23/316", + "nodeyear": 2002, + "ref-by-count": 67, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060825411", + "attributes": { + "title": "Interferometry below the Standard Quantum Limit with Bose-Einstein Condensates", + "doi": "10.1103/physrevlett.89.150401", + "nodeyear": 2002, + "ref-by-count": 88, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1056050981", + "attributes": { + "title": "Ab Initio Potential Energy Surface and Vibrational\u2212Rotational Energy Levels of X2\u03a3+ CaOH", + "doi": "10.1021/jp026283u", + "nodeyear": 2002, + "ref-by-count": 169, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1033188547", + "attributes": { + "title": "Spin squeezing and entanglement in spinor condensates", + "doi": "10.1103/physreva.66.033611", + "nodeyear": 2002, + "ref-by-count": 41, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1032117943", + "attributes": { + "title": "Collapse and revival of the matter wave field of a Bose\u2013Einstein condensate", + "doi": "10.1038/nature00968", + "nodeyear": 2002, + "ref-by-count": 968, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1010607212", + "attributes": { + "title": "The Electronic Spectrum of NiCN in the Visible Region", + "doi": "10.1006/jmsp.2002.8608", + "nodeyear": 2002, + "ref-by-count": 33, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1003363712", + "attributes": { + "title": "Spectroscopic Description of H2O in the su(2) Vibron Model Approximation", + "doi": "10.1006/jmsp.2002.8571", + "nodeyear": 2002, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1029415952", + "attributes": { + "title": "Generation of maximum spin entanglement induced by a cavity field in quantum-dot systems", + "doi": "10.1103/physreva.65.062321", + "nodeyear": 2002, + "ref-by-count": 47, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1002222149", + "attributes": { + "title": "Spin squeezing via quantum feedback", + "doi": "10.1103/physreva.65.061801", + "nodeyear": 2002, + "ref-by-count": 106, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1041840352", + "attributes": { + "title": "Coherent Atom Interactions Mediated by Dark-State Polaritons", + "doi": "10.1103/physrevlett.88.243602", + "nodeyear": 2002, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1021091851", + "attributes": { + "title": "Mixed collective states of many spins", + "doi": "10.1103/physreva.65.062304", + "nodeyear": 2002, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1021190003", + "attributes": { + "title": "Limitations of squeezing due to collisional decoherence in Bose-Einstein condensates", + "doi": "10.1088/0953-4075/35/10/312", + "nodeyear": 2002, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1016883152", + "attributes": { + "title": "Robustness of multiparty entanglement", + "doi": "10.1103/physreva.65.052327", + "nodeyear": 2002, + "ref-by-count": 129, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060498076", + "attributes": { + "title": "Spin squeezing of atoms by the dipole interaction in virtually excited Rydberg states", + "doi": "10.1103/physreva.65.041803", + "nodeyear": 2002, + "ref-by-count": 98, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1003953015", + "attributes": { + "title": "Excitation Spectrum of a Bose-Einstein Condensate", + "doi": "10.1103/physrevlett.88.120407", + "nodeyear": 2002, + "ref-by-count": 255, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1011656566", + "attributes": { + "title": "Quantum entanglement in spinor Bose-Einstein condensates", + "doi": "10.1103/physreva.65.033619", + "nodeyear": 2002, + "ref-by-count": 75, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1040733718", + "attributes": { + "title": "Polarization Squeezing of Continuous Variable Stokes Parameters", + "doi": "10.1103/physrevlett.88.093601", + "nodeyear": 2002, + "ref-by-count": 91, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1000339972", + "attributes": { + "title": "Creating entangled atomic pairs by photodissociation", + "doi": "10.1088/0953-4075/34/24/310", + "nodeyear": 2001, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:0.60;03:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1044105212", + "attributes": { + "title": "Spin squeezing in the Ising model", + "doi": "10.1103/physreva.64.053815", + "nodeyear": 2001, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060497638", + "attributes": { + "title": "Spin squeezing and decoherence limit in Ramsey spectroscopy", + "doi": "10.1103/physreva.64.052106", + "nodeyear": 2001, + "ref-by-count": 103, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1016267052", + "attributes": { + "title": "Creating Massive Entanglement of Bose-Einstein Condensed Atoms", + "doi": "10.1103/physrevlett.87.170402", + "nodeyear": 2001, + "ref-by-count": 95, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1053673045", + "attributes": { + "title": "Positive-P simulations of spin squeezing in a two-component Bose condensate", + "doi": "10.1103/physreva.64.013616", + "nodeyear": 2001, + "ref-by-count": 66, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1048985306", + "attributes": { + "title": "Entanglement and Extreme Spin Squeezing", + "doi": "10.1103/physrevlett.86.4431", + "nodeyear": 2001, + "ref-by-count": 303, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1057699225", + "attributes": { + "title": "Experimental Energy Levels of the Water Molecule", + "doi": "10.1063/1.1364517", + "nodeyear": 2001, + "ref-by-count": 214, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1032609059", + "attributes": { + "title": "Coherent control of spin squeezing", + "doi": "10.1103/physreva.63.055601", + "nodeyear": 2001, + "ref-by-count": 88, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1062444393", + "attributes": { + "title": "Squeezed States in a Bose-Einstein Condensate", + "doi": "10.1126/science.1058149", + "nodeyear": 2001, + "ref-by-count": 697, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1025684815", + "attributes": { + "title": "Generation of arbitrary Dicke states in spinor Bose\u2013Einstein condensates", + "doi": "10.1016/s0030-4018(00)01163-9", + "nodeyear": 2001, + "ref-by-count": 66, + "is_input_DOI": false, + "category_for": "09:0.33;10:0.33;02:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060496930", + "attributes": { + "title": "Quantum states of Bose-Einstein condensates formed by molecular dissociation", + "doi": "10.1103/physreva.63.023604", + "nodeyear": 2001, + "ref-by-count": 54, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1043414338", + "attributes": { + "title": "Many-particle entanglement with Bose\u2013Einstein condensates", + "doi": "10.1038/35051038", + "nodeyear": 2001, + "ref-by-count": 739, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1011862816", + "attributes": { + "title": "Squeezing entanglement", + "doi": "10.1038/35051193", + "nodeyear": 2001, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1042326365", + "attributes": { + "title": "Atomic Quantum State Teleportation and Swapping", + "doi": "10.1103/physrevlett.85.5639", + "nodeyear": 2000, + "ref-by-count": 136, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060496772", + "attributes": { + "title": "Spin squeezing in two-level systems", + "doi": "10.1103/physreva.62.063812", + "nodeyear": 2000, + "ref-by-count": 50, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060822132", + "attributes": { + "title": "Creating Macroscopic Atomic Einstein-Podolsky-Rosen States from Bose-Einstein Condensates", + "doi": "10.1103/physrevlett.85.3987", + "nodeyear": 2000, + "ref-by-count": 174, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1050230284", + "attributes": { + "title": "Entanglement transfer from light to atoms", + "doi": "10.1080/09500340008232184", + "nodeyear": 2000, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1037329755", + "attributes": { + "title": "Iterative algorithm versus analytic solutions of the parametrically driven dissipative quantum harmonic oscillator", + "doi": "10.1103/physreve.62.5808", + "nodeyear": 2000, + "ref-by-count": 65, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060821716", + "attributes": { + "title": "Generation of Spin Squeezing via Continuous Quantum Nondemolition Measurement", + "doi": "10.1103/physrevlett.85.1594", + "nodeyear": 2000, + "ref-by-count": 382, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1032013208", + "attributes": { + "title": "Dark-State Polaritons in Electromagnetically Induced Transparency", + "doi": "10.1103/physrevlett.84.5094", + "nodeyear": 2000, + "ref-by-count": 1304, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060821199", + "attributes": { + "title": "Observation of Cavity-Mediated Long-Range Light Forces between Strongly Coupled Atoms", + "doi": "10.1103/physrevlett.84.4068", + "nodeyear": 2000, + "ref-by-count": 55, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019244542", + "attributes": { + "title": "Experimental entanglement of four particles", + "doi": "10.1038/35005011", + "nodeyear": 2000, + "ref-by-count": 1082, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019463277", + "attributes": { + "title": "Eigenvalue and Eigenfunction of n-Mode Boson Quadratic Hamiltonian", + "doi": "10.1023/a:1003600729222", + "nodeyear": 2000, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1053071617", + "attributes": { + "title": "quantum noise", + "doi": "10.1007/1-4020-0613-6_15239", + "nodeyear": 2000, + "ref-by-count": 115, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1058075670", + "attributes": { + "title": "High resolution spectroscopy of MgOH (X 2\u03a3+) in its V2 mode: Further evidence for quasilinearity", + "doi": "10.1063/1.480455", + "nodeyear": 1999, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060495708", + "attributes": { + "title": "Quantum nondemolition measurement of spin via the paramagnetic Faraday rotation", + "doi": "10.1103/physreva.60.4974", + "nodeyear": 1999, + "ref-by-count": 113, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1098909552", + "attributes": { + "title": "Quantum Dissipative Systems", + "doi": "10.1142/4239", + "nodeyear": 1999, + "ref-by-count": 1276, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1012704698", + "attributes": { + "title": "Spin-Spin Interaction and Spin Squeezing in an Optical Lattice", + "doi": "10.1103/physrevlett.83.2274", + "nodeyear": 1999, + "ref-by-count": 224, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060495457", + "attributes": { + "title": "Quantum nondemolition measurements of collective atomic spin", + "doi": "10.1103/physreva.60.2346", + "nodeyear": 1999, + "ref-by-count": 97, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1046740497", + "attributes": { + "title": "Direct measurement of the Wigner function by photon counting", + "doi": "10.1103/physreva.60.674", + "nodeyear": 1999, + "ref-by-count": 140, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1020099649", + "attributes": { + "title": "Bragg Spectroscopy of a Bose-Einstein Condensate", + "doi": "10.1103/physrevlett.82.4569", + "nodeyear": 1999, + "ref-by-count": 601, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1017192838", + "attributes": { + "title": "HDO and D2O Low Pressure, Long Path Spectra in the 600\u20133100 cm\u22121Region II. D2O Line Positions and Strengths", + "doi": "10.1006/jmsp.1999.7815", + "nodeyear": 1999, + "ref-by-count": 50, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1003804610", + "attributes": { + "title": "Analytical solutions for the LMG model", + "doi": "10.1016/s0370-2693(99)00191-4", + "nodeyear": 1999, + "ref-by-count": 64, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1005109695", + "attributes": { + "title": "Phonon squeezed states: quantum noise reduction in solids", + "doi": "10.1016/s0921-4526(98)01483-5", + "nodeyear": 1999, + "ref-by-count": 63, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1026394040", + "attributes": { + "title": "Quantum monodromy in the spectrum of H2O and other systems: new insight into the level structure of quasi-linear molecules", + "doi": "10.1080/00268979909482971", + "nodeyear": 1999, + "ref-by-count": 77, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1041161303", + "attributes": { + "title": "Twin-correlations in atoms", + "doi": "10.1007/s100530050259", + "nodeyear": 1999, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060817691", + "attributes": { + "title": "Quantum Dynamical Manifestation of Chaotic Behavior in the Process of Entanglement", + "doi": "10.1103/physrevlett.80.5524", + "nodeyear": 1998, + "ref-by-count": 177, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1064235153", + "attributes": { + "title": "Atomic quantum non-demolition measurements and squeezing", + "doi": "10.1209/epl/i1998-00277-9", + "nodeyear": 1998, + "ref-by-count": 240, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060816390", + "attributes": { + "title": "Spin Squeezing in an Ensemble of Atoms Illuminated with Squeezed Light", + "doi": "10.1103/physrevlett.79.4782", + "nodeyear": 1997, + "ref-by-count": 210, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1052013666", + "attributes": { + "title": "Phonon Squeezed States Generated by Second-Order Raman Scattering", + "doi": "10.1103/physrevlett.79.4605", + "nodeyear": 1997, + "ref-by-count": 80, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1006871668", + "attributes": { + "title": "Improvement of Frequency Standards with Quantum Entanglement", + "doi": "10.1103/physrevlett.79.3865", + "nodeyear": 1997, + "ref-by-count": 683, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1003480064", + "attributes": { + "title": "Particle propagation in a random and quasi-periodic potential", + "doi": "10.1016/s0167-2789(97)00155-3", + "nodeyear": 1997, + "ref-by-count": 26, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1098732024", + "attributes": { + "title": "Quantum Optics", + "doi": "10.1017/cbo9780511813993", + "nodeyear": 1997, + "ref-by-count": 5533, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1060492991", + "attributes": { + "title": "Atomic Schr\u00f6dinger cat states", + "doi": "10.1103/physreva.56.2249", + "nodeyear": 1997, + "ref-by-count": 163, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019387204", + "attributes": { + "title": "The calculation of the bound and quasibound vibrational states for ozone in its B 1 electronic state", + "doi": "10.1080/002689797171148", + "nodeyear": 1997, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1006289352", + "attributes": { + "title": "Pure Rotational Spectra of HNCS in the Far Infrared Region: The Three Bending Excited States", + "doi": "10.1006/jmsp.1997.7269", + "nodeyear": 1997, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1030905705", + "attributes": { + "title": "Floquet-Markovian description of the parametrically driven, dissipative harmonic quantum oscillator", + "doi": "10.1103/physreve.55.300", + "nodeyear": 1997, + "ref-by-count": 149, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1058050263", + "attributes": { + "title": "Algebraic approach to molecular spectra: Two\u2010dimensional problems", + "doi": "10.1063/1.471412", + "nodeyear": 1996, + "ref-by-count": 104, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1004092630", + "attributes": { + "title": "High Resolution Vibrational\u2013Rotational Spectrum of H2S in the Region of the \u03bd2Fundamental Band", + "doi": "10.1006/jmsp.1996.0082", + "nodeyear": 1996, + "ref-by-count": 44, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1052716647", + "attributes": { + "title": "Squeezed Phonon States: Modulating Quantum Fluctuations of Atomic Displacements", + "doi": "10.1103/physrevlett.76.2294", + "nodeyear": 1996, + "ref-by-count": 97, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060812753", + "attributes": { + "title": "Synchronous Collapses and Revivals of Atomic Dipole Fluctuations and Photon Fano Factor beyond the Standard Quantum Limit", + "doi": "10.1103/physrevlett.76.2045", + "nodeyear": 1996, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1057869519", + "attributes": { + "title": "Algebraic Theory of Molecules", + "doi": "10.1063/1.2807547", + "nodeyear": 1996, + "ref-by-count": 185, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1007741542", + "attributes": { + "title": "Semiclassics of rotation and torsion", + "doi": "10.1007/s002570050101", + "nodeyear": 1996, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042823964", + "attributes": { + "title": "Quantum phonon optics: Coherent and squeezed atomic displacements", + "doi": "10.1103/physrevb.53.2419", + "nodeyear": 1996, + "ref-by-count": 68, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060491579", + "attributes": { + "title": "Ramsey spectroscopy with nonclassical light sources", + "doi": "10.1103/physreva.53.467", + "nodeyear": 1996, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1058047895", + "attributes": { + "title": "CaOH has a second linear structure HCaO", + "doi": "10.1063/1.469909", + "nodeyear": 1995, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1035173735", + "attributes": { + "title": "New rovibrational data for MgOH and MgOD and the internuclear potential function of the ground electronic state", + "doi": "10.1016/0009-2614(95)00479-n", + "nodeyear": 1995, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060490050", + "attributes": { + "title": "Pulse matching and correlation of phase fluctuations in \u039b systems", + "doi": "10.1103/physreva.51.2430", + "nodeyear": 1995, + "ref-by-count": 67, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1058046639", + "attributes": { + "title": "High\u2010resolution analysis of the fundamental bending vibrations in the\n A\n \u0303\u2009\n 2\n \u03a0 and\n X\n \u0303\u2009\n 2\n \u03a3\n +\n states of CaOH and CaOD: Deperturbation of Renner\u2013Teller, spin\u2013orbit and\n K\n \u2010type resonance interactions", + "doi": "10.1063/1.468643", + "nodeyear": 1995, + "ref-by-count": 34, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1000086198", + "attributes": { + "title": "Pure Rotational Spectra of HNCS in the Far Infrared: Ground State Analysis", + "doi": "10.1006/jmsp.1995.1018", + "nodeyear": 1995, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1011073909", + "attributes": { + "title": "H280Se: High Resolution Study of the 3\u03bd2, \u03bd1 + \u03bd2, and \u03bd2 + \u03bd3 Bands and Determination of Equilibrium Rotational Constants and Structure", + "doi": "10.1006/jmsp.1994.1244", + "nodeyear": 1994, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1046586795", + "attributes": { + "title": "Hypersensitivity to perturbation in the quantum kicked top", + "doi": "10.1103/physreve.50.972", + "nodeyear": 1994, + "ref-by-count": 50, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060489764", + "attributes": { + "title": "Squeezed atomic states and projection noise in spectroscopy", + "doi": "10.1103/physreva.50.67", + "nodeyear": 1994, + "ref-by-count": 815, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060488659", + "attributes": { + "title": "Atomic states with spectroscopic squeezing", + "doi": "10.1103/physreva.49.4968", + "nodeyear": 1994, + "ref-by-count": 75, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060809096", + "attributes": { + "title": "Statistical distance and the geometry of quantum states", + "doi": "10.1103/physrevlett.72.3439", + "nodeyear": 1994, + "ref-by-count": 1717, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060716437", + "attributes": { + "title": "Brownian parametric oscillators", + "doi": "10.1103/physreve.49.3626", + "nodeyear": 1994, + "ref-by-count": 41, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060808815", + "attributes": { + "title": "Dynamics of a model of supersolid", + "doi": "10.1103/physrevlett.72.2426", + "nodeyear": 1994, + "ref-by-count": 101, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1045346582", + "attributes": { + "title": "Fourfold Clusters of Rovibrational Energy Levels for H2S Studied with a Potential Energy Surface Derived from Experiment", + "doi": "10.1006/jmsp.1994.1041", + "nodeyear": 1994, + "ref-by-count": 66, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1005841402", + "attributes": { + "title": "Quantum Optics", + "doi": "10.1007/978-3-642-79504-6", + "nodeyear": 1994, + "ref-by-count": 2353, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1049201712", + "attributes": { + "title": "High-Resolution Analysis of the \u03bd2, 2\u03bd2, \u03bd1, and \u03bd3 Bands of H280Se", + "doi": "10.1006/jmsp.1993.1224", + "nodeyear": 1993, + "ref-by-count": 26, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1054491307", + "attributes": { + "title": "The Potential Energy Surface for the Electronic Ground State of H2Se Derived from Experiment", + "doi": "10.1006/jmsp.1993.1155", + "nodeyear": 1993, + "ref-by-count": 44, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060487392", + "attributes": { + "title": "Squeezed spin states", + "doi": "10.1103/physreva.47.5138", + "nodeyear": 1993, + "ref-by-count": 1137, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060486851", + "attributes": { + "title": "Spin squeezing and reduced quantum noise in spectroscopy", + "doi": "10.1103/physreva.46.r6797", + "nodeyear": 1992, + "ref-by-count": 690, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1051958598", + "attributes": { + "title": "Investigation of excited vibrational levels in the X 2\u03a3+ state of CaOH and CaOD by resolved fluorescence spectroscopy", + "doi": "10.1080/00268979200102231", + "nodeyear": 1992, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1000717326", + "attributes": { + "title": "Chaos in a spin-boson system: Classical analysis", + "doi": "10.1016/0003-4916(92)90178-o", + "nodeyear": 1992, + "ref-by-count": 53, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060485219", + "attributes": { + "title": "Dynamic Stark effect for the Jaynes-Cummings system", + "doi": "10.1103/physreva.45.5135", + "nodeyear": 1992, + "ref-by-count": 113, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1006189532", + "attributes": { + "title": "Vibrational spectra of linear triatomic molecules in the vibron model", + "doi": "10.1016/0022-2852(91)90370-p", + "nodeyear": 1991, + "ref-by-count": 76, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1048482240", + "attributes": { + "title": "Overtone frequencies and intensities of bent XY2 molecules in the vibron model", + "doi": "10.1016/0022-2852(90)90293-y", + "nodeyear": 1990, + "ref-by-count": 87, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060839208", + "attributes": { + "title": "Coherent states: Theory and some applications", + "doi": "10.1103/revmodphys.62.867", + "nodeyear": 1990, + "ref-by-count": 1131, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059070435", + "attributes": { + "title": "Kicked rotator for a spin-1/2 particle", + "doi": "10.1088/0305-4470/22/19/016", + "nodeyear": 1989, + "ref-by-count": 48, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060478721", + "attributes": { + "title": "Phase-sensitive population decay: The two-atom Dicke model in a broadband squeezed vacuum", + "doi": "10.1103/physreva.39.1962", + "nodeyear": 1989, + "ref-by-count": 105, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060799033", + "attributes": { + "title": "Anderson Transition in a One-Dimensional System with Three Incommensurate Frequencies", + "doi": "10.1103/physrevlett.62.345", + "nodeyear": 1989, + "ref-by-count": 142, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1062233668", + "attributes": { + "title": "Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables", + "doi": "10.1119/1.15378", + "nodeyear": 1988, + "ref-by-count": 562, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1058031840", + "attributes": { + "title": "Fermi resonances and local modes in water, hydrogen sulfide, and hydrogen selenide", + "doi": "10.1063/1.453824", + "nodeyear": 1988, + "ref-by-count": 218, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1058032193", + "attributes": { + "title": "Semiclassical treatment of the vibrational spectroscopy of OCS", + "doi": "10.1063/1.454177", + "nodeyear": 1988, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1048120455", + "attributes": { + "title": "Theory of first-order phase transitions", + "doi": "10.1088/0034-4885/50/7/001", + "nodeyear": 1987, + "ref-by-count": 777, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060692192", + "attributes": { + "title": "Squeezed states in phase-sensing interferometers", + "doi": "10.1103/physrevd.30.2548", + "nodeyear": 1984, + "ref-by-count": 208, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1018979965", + "attributes": { + "title": "The geometrical-classical limit of algebraic Hamiltonians for molecular vibrotational spectra", + "doi": "10.1016/0009-2614(83)87025-0", + "nodeyear": 1983, + "ref-by-count": 78, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1029020774", + "attributes": { + "title": "The potential function for HCNCNH isomerization", + "doi": "10.1016/0022-2852(83)90018-8", + "nodeyear": 1983, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1030813584", + "attributes": { + "title": "Some statistical properties of simple classically stochastic quantum systems", + "doi": "10.1016/0167-2789(83)90318-4", + "nodeyear": 1983, + "ref-by-count": 142, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1043507384", + "attributes": { + "title": "The scaling theory of electrons in disordered solids: Additional numerical results", + "doi": "10.1007/bf01578242", + "nodeyear": 1983, + "ref-by-count": 639, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060787963", + "attributes": { + "title": "Chaos, Quantum Recurrences, and Anderson Localization", + "doi": "10.1103/physrevlett.49.509", + "nodeyear": 1982, + "ref-by-count": 829, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060787952", + "attributes": { + "title": "Size Scaling for Infinitely Coordinated Systems", + "doi": "10.1103/physrevlett.49.478", + "nodeyear": 1982, + "ref-by-count": 148, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060786848", + "attributes": { + "title": "Reduced Quantum Fluctuations in Resonance Fluorescence", + "doi": "10.1103/physrevlett.47.709", + "nodeyear": 1981, + "ref-by-count": 409, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060784904", + "attributes": { + "title": "Classical Limit of the Interacting-Boson Model", + "doi": "10.1103/physrevlett.44.1747", + "nodeyear": 1980, + "ref-by-count": 487, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1063137926", + "attributes": { + "title": "Spin-Orbit Interaction and Magnetoresistance in the Two Dimensional Random System", + "doi": "10.1143/ptp.63.707", + "nodeyear": 1980, + "ref-by-count": 2208, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1058101157", + "attributes": { + "title": "The classical limit of quantum nonspin systems", + "doi": "10.1063/1.524137", + "nodeyear": 1979, + "ref-by-count": 160, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060467641", + "attributes": { + "title": "No-go theorem concerning the superradiant phase transition in atomic systems", + "doi": "10.1103/physreva.19.301", + "nodeyear": 1979, + "ref-by-count": 93, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1015361753", + "attributes": { + "title": "Stochastic behavior of a quantum pendulum under a periodic perturbation", + "doi": "10.1007/bfb0021757", + "nodeyear": 1979, + "ref-by-count": 308, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1028928983", + "attributes": { + "title": "Phase transitions in nuclear matter described by pseudospin Hamiltonians", + "doi": "10.1016/0375-9474(78)90260-9", + "nodeyear": 1978, + "ref-by-count": 133, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060466899", + "attributes": { + "title": "Are super-radiant phase transitions possible?", + "doi": "10.1103/physreva.17.1454", + "nodeyear": 1978, + "ref-by-count": 53, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1035545882", + "attributes": { + "title": "Mathematical Methods of Classical Mechanics", + "doi": "10.1007/978-1-4757-1693-1", + "nodeyear": 1978, + "ref-by-count": 3208, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060465740", + "attributes": { + "title": "Two-photon coherent states of the radiation field", + "doi": "10.1103/physreva.13.2226", + "nodeyear": 1976, + "ref-by-count": 1801, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060465708", + "attributes": { + "title": "Thermodynamics of two-level atoms interacting with the continuum of electromagnetic field modes", + "doi": "10.1103/physreva.13.1967", + "nodeyear": 1976, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1109642906", + "attributes": { + "title": "Quantum Detection and Estimation Theory", + "doi": "10.1016/s0076-5392(08)x6017-5", + "nodeyear": 1976, + "ref-by-count": 229, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1060779767", + "attributes": { + "title": "Phase Transitions, Two-Level Atoms, and the A2 Term", + "doi": "10.1103/physrevlett.35.432", + "nodeyear": 1975, + "ref-by-count": 217, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060506152", + "attributes": { + "title": "Equilibrium Statistical Mechanics of Matter Interacting with the Quantized Radiation Field", + "doi": "10.1103/physreva.8.2517", + "nodeyear": 1973, + "ref-by-count": 282, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1002536646", + "attributes": { + "title": "Higher order corrections to the Dicke superradiant phase transition", + "doi": "10.1016/0375-9601(73)90679-8", + "nodeyear": 1973, + "ref-by-count": 94, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060505996", + "attributes": { + "title": "Phase Transitions in Some Generalized Dicke Models of Superradiance", + "doi": "10.1103/physreva.8.1440", + "nodeyear": 1973, + "ref-by-count": 121, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1037335968", + "attributes": { + "title": "On the superradiant phase transition for molecules in a quantized radiation field: the dicke maser model", + "doi": "10.1016/0003-4916(73)90039-0", + "nodeyear": 1973, + "ref-by-count": 721, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060500350", + "attributes": { + "title": "Phase Transition in the Dicke Model of Superradiance", + "doi": "10.1103/physreva.7.831", + "nodeyear": 1973, + "ref-by-count": 510, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060495184", + "attributes": { + "title": "Atomic Coherent States in Quantum Optics", + "doi": "10.1103/physreva.6.2211", + "nodeyear": 1972, + "ref-by-count": 1210, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1024870439", + "attributes": { + "title": "Coherent states for arbitrary Lie group", + "doi": "10.1007/bf01645091", + "nodeyear": 1972, + "ref-by-count": 1052, + "is_input_DOI": false, + "category_for": "01:0.60;02:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1036408635", + "attributes": { + "title": "The bending-rotation Hamiltonian for the triatomic molecule and application to HCN and H2O", + "doi": "10.1016/0022-2852(72)90209-3", + "nodeyear": 1972, + "ref-by-count": 145, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1033014139", + "attributes": { + "title": "New \u201cCoherent\u201d States associated with non-compact groups", + "doi": "10.1007/bf01646483", + "nodeyear": 1971, + "ref-by-count": 559, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060443588", + "attributes": { + "title": "Approximate Solutions for an N-Molecule-Radiation-Field Hamiltonian", + "doi": "10.1103/physrev.188.692", + "nodeyear": 1969, + "ref-by-count": 196, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1001765599", + "attributes": { + "title": "Group-theoretical aspects of the variable frequency oscillator problem", + "doi": "10.1007/bf01035742", + "nodeyear": 1969, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1050225995", + "attributes": { + "title": "An extension of Kakutani\u2019s theorem on infinite product measures to the tensor product of semifinite w \u2217 w^{\\ast } -algebras", + "doi": "10.1090/s0002-9947-1969-0236719-2", + "nodeyear": 1969, + "ref-by-count": 269, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060438505", + "attributes": { + "title": "Exact Solution for an N-Molecule\u2014Radiation-Field Hamiltonian", + "doi": "10.1103/physrev.170.379", + "nodeyear": 1968, + "ref-by-count": 995, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1043798191", + "attributes": { + "title": "Validity of many-body approximation methods for a solvable model (III). Diagram summations", + "doi": "10.1016/0029-5582(65)90864-3", + "nodeyear": 1965, + "ref-by-count": 237, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1017078538", + "attributes": { + "title": "Validity of many-body approximation methods for a solvable model (II). Linearization procedures", + "doi": "10.1016/0029-5582(65)90863-1", + "nodeyear": 1965, + "ref-by-count": 236, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1011658338", + "attributes": { + "title": "Validity of many-body approximation methods for a solvable model (I). Exact solutions and perturbation theory", + "doi": "10.1016/0029-5582(65)90862-x", + "nodeyear": 1965, + "ref-by-count": 1141, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1015885405", + "attributes": { + "title": "Higher vibrational levels of a bent triatomic molecule", + "doi": "10.1039/tf9646001363", + "nodeyear": 1964, + "ref-by-count": 145, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1060752377", + "attributes": { + "title": "Energy vs Momentum Relation for the Excitations in Liquid Helium", + "doi": "10.1103/physrevlett.1.9", + "nodeyear": 1958, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1004021375", + "attributes": { + "title": "The pure rotational spectrum of H2Se in the far infrared spectral region", + "doi": "10.1016/0022-2852(57)90025-5", + "nodeyear": 1957, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1030349669", + "attributes": { + "title": "Molecular Vibrations: The Theory of Infrared and Raman Vibrational Spectra", + "doi": "10.1149/1.2430134", + "nodeyear": 1955, + "ref-by-count": 3996, + "is_input_DOI": false, + "category_for": "03:0.60;09:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1060461988", + "attributes": { + "title": "Coherence in Spontaneous Radiation Processes", + "doi": "10.1103/physrev.93.99", + "nodeyear": 1954, + "ref-by-count": 5235, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060451204", + "attributes": { + "title": "Field Dependence of the Intrinsic Domain Magnetization of a Ferromagnet", + "doi": "10.1103/physrev.58.1098", + "nodeyear": 1940, + "ref-by-count": 2887, + "is_input_DOI": false, + "category_for": "18:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019976609", + "attributes": { + "title": "Natural and artificial atoms for quantum computation", + "doi": "10.1088/0034-4885/74/10/104401", + "nodeyear": 2011, + "ref-by-count": 483, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1016787662", + "attributes": { + "title": "Atomic physics and quantum optics using superconducting circuits", + "doi": "10.1038/nature10122", + "nodeyear": 2011, + "ref-by-count": 904, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1002951333", + "attributes": { + "title": "Spin squeezing and concurrence", + "doi": "10.1088/0953-4075/44/1/015501", + "nodeyear": 2010, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:0.60;03:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1031594332", + "attributes": { + "title": "Unified single-photon and single-electron counting statistics: From cavity QED to electron transport", + "doi": "10.1103/physreva.82.063840", + "nodeyear": 2010, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1065173362", + "attributes": { + "title": "Quantum phase transition of nonlinear light in the finite size Dicke Hamiltonian", + "doi": "10.1364/josab.27.002443", + "nodeyear": 2010, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "09:0.33;01:0.33;02:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1010418632", + "attributes": { + "title": "Orientation-Dependent Entanglement Lifetime in a Squeezed Atomic Clock", + "doi": "10.1103/physrevlett.104.250801", + "nodeyear": 2010, + "ref-by-count": 119, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042723630", + "attributes": { + "title": "Relation between ac Josephson effect and double-well Bose-Einstein-condensate oscillations", + "doi": "10.1103/physreva.81.063609", + "nodeyear": 2010, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1020613156", + "attributes": { + "title": "Phase transitions in the sdg interacting boson model", + "doi": "10.1016/j.nuclphysa.2010.01.247", + "nodeyear": 2010, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1016879794", + "attributes": { + "title": "Theory of localization and resonance phenomena in the quantum kicked rotor", + "doi": "10.1088/1367-2630/12/4/043043", + "nodeyear": 2010, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1041729973", + "attributes": { + "title": "Quantum-projection-noise-limited interferometry with coherent atoms in a Ramsey-type setup", + "doi": "10.1103/physreva.81.043633", + "nodeyear": 2010, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1015506698", + "attributes": { + "title": "Noise-resilient quantum interface based on quantum nondemolition interactions", + "doi": "10.1103/physreva.81.042325", + "nodeyear": 2010, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1038221147", + "attributes": { + "title": "Multilevel Holstein-Primakoff approximation and its application to atomic spin squeezing and ensemble quantum memories", + "doi": "10.1103/physreva.81.032314", + "nodeyear": 2010, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1027177091", + "attributes": { + "title": "Squeezing the collective spin of a dilute atomic ensemble by cavity feedback", + "doi": "10.1103/physreva.81.021804", + "nodeyear": 2010, + "ref-by-count": 90, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019662680", + "attributes": { + "title": "SU(3) Quasidynamical Symmetry Underlying the Alhassid-Whelan Arc of Regularity", + "doi": "10.1103/physrevlett.104.022502", + "nodeyear": 2010, + "ref-by-count": 26, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1072401833", + "attributes": { + "title": "Anderson localization and quantum chaos maps", + "doi": "10.4249/scholarpedia.9816", + "nodeyear": 2010, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1060739410", + "attributes": { + "title": "Level statistics of a pseudo-Hermitian Dicke model", + "doi": "10.1103/physreve.80.026213", + "nodeyear": 2009, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1037589088", + "attributes": { + "title": "Quantum phase transition in a pseudo-Hermitian Dicke model", + "doi": "10.1103/physreve.80.021107", + "nodeyear": 2009, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1038409804", + "attributes": { + "title": "Recent developments in no-core shell-model calculations", + "doi": "10.1088/0954-3899/36/8/083101", + "nodeyear": 2009, + "ref-by-count": 269, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060676616", + "attributes": { + "title": "Bohr model as an algebraic collective model", + "doi": "10.1103/physrevc.79.054304", + "nodeyear": 2009, + "ref-by-count": 63, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1047766368", + "attributes": { + "title": "Microscopic analysis of nuclear quantum phase transitions in the N\u224890 region", + "doi": "10.1103/physrevc.79.054301", + "nodeyear": 2009, + "ref-by-count": 129, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1022061943", + "attributes": { + "title": "Cooling and squeezing the fluctuations of a nanomechanical beam by indirect quantum feedback control", + "doi": "10.1103/physreva.79.052102", + "nodeyear": 2009, + "ref-by-count": 60, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060738859", + "attributes": { + "title": "Spin squeezing as an indicator of quantum chaos in the Dicke model", + "doi": "10.1103/physreve.79.046220", + "nodeyear": 2009, + "ref-by-count": 39, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1031855473", + "attributes": { + "title": "Quantum chaos in the nuclear collective model: Classical-quantum correspondence", + "doi": "10.1103/physreve.79.046202", + "nodeyear": 2009, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1036673130", + "attributes": { + "title": "Polarization-based light-atom quantum interface with an all-optical trap", + "doi": "10.1103/physreva.79.043815", + "nodeyear": 2009, + "ref-by-count": 55, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1041079423", + "attributes": { + "title": "Nuclear charge radii of molybdenum fission fragments", + "doi": "10.1016/j.physletb.2009.02.050", + "nodeyear": 2009, + "ref-by-count": 74, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060676547", + "attributes": { + "title": "Spectral properties of a tractable collective Hamiltonian", + "doi": "10.1103/physrevc.79.034305", + "nodeyear": 2009, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1052892694", + "attributes": { + "title": "Beyond the relativistic mean-field approximation. III. Collective Hamiltonian in five dimensions", + "doi": "10.1103/physrevc.79.034303", + "nodeyear": 2009, + "ref-by-count": 140, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1023287333", + "attributes": { + "title": "Phonon and multi-phonon excitations in rotational nuclei by exact diagonalization of the Bohr Hamiltonian", + "doi": "10.1016/j.physletb.2009.01.054", + "nodeyear": 2009, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060754866", + "attributes": { + "title": "Enhanced Sensitivity of Nuclear Binding Energies to Collective Structure", + "doi": "10.1103/physrevlett.102.082501", + "nodeyear": 2009, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060505399", + "attributes": { + "title": "Coupling strength estimation for spin chains despite restricted access", + "doi": "10.1103/physreva.79.020305", + "nodeyear": 2009, + "ref-by-count": 81, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1048283529", + "attributes": { + "title": "Spin squeezing of atomic ensembles by multicolor quantum nondemolition measurements", + "doi": "10.1103/physreva.79.023831", + "nodeyear": 2009, + "ref-by-count": 40, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1031554515", + "attributes": { + "title": "Quantum Nondemolition Measurements and State Preparation in Quantum Gases by Light Detection", + "doi": "10.1103/physrevlett.102.020403", + "nodeyear": 2009, + "ref-by-count": 56, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060676472", + "attributes": { + "title": "UBF(5) to SUBF(3) shape phase transition in odd nuclei for j=1/2, 3/2, and 5/2 orbits: The role of the odd particle at the critical point", + "doi": "10.1103/physrevc.79.014306", + "nodeyear": 2009, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1006850094", + "attributes": { + "title": "Modern theory of nuclear forces", + "doi": "10.1103/revmodphys.81.1773", + "nodeyear": 2009, + "ref-by-count": 1127, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1051499896", + "attributes": { + "title": "Squeezing and over-squeezing of triphotons", + "doi": "10.1038/nature07624", + "nodeyear": 2009, + "ref-by-count": 38, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1021978769", + "attributes": { + "title": "Relationship between spin squeezing and single-particle coherence in two-component Bose-Einstein condensates with Josephson coupling", + "doi": "10.1103/physreva.78.063620", + "nodeyear": 2008, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060676386", + "attributes": { + "title": "Deformation crossing near the first-order shape-phase transition in Gd152\u2013156", + "doi": "10.1103/physrevc.78.051303", + "nodeyear": 2008, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1028533037", + "attributes": { + "title": "Quantum phase transitions in the consistent-Q Hamiltonian of the interacting boson model", + "doi": "10.1088/0954-3899/35/12/125105", + "nodeyear": 2008, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060676334", + "attributes": { + "title": "Empirical signature for shape transitions mediated by sub-shell changes", + "doi": "10.1103/physrevc.78.041301", + "nodeyear": 2008, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1035626723", + "attributes": { + "title": "Practical schemes for the measurement of angular-momentum covariance matrices in quantum optics", + "doi": "10.1103/physreva.78.043814", + "nodeyear": 2008, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1006289465", + "attributes": { + "title": "Cavity Optomechanics with a Bose-Einstein Condensate", + "doi": "10.1126/science.1163218", + "nodeyear": 2008, + "ref-by-count": 443, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1029186926", + "attributes": { + "title": "Spin Squeezing of Atomic Ensembles via Nuclear-Electronic Spin Entanglement", + "doi": "10.1103/physrevlett.101.073601", + "nodeyear": 2008, + "ref-by-count": 106, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1031979595", + "attributes": { + "title": "Triaxiality in the interacting boson model", + "doi": "10.1016/j.nuclphysa.2008.05.007", + "nodeyear": 2008, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1027183352", + "attributes": { + "title": "Entanglement, quantum phase transition and fixed-point bifurcation in the N-atom Jaynes\u2013Cummings model with an additional symmetry breaking term", + "doi": "10.1016/j.physleta.2008.06.080", + "nodeyear": 2008, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1049572504", + "attributes": { + "title": "Quantum Metrology: Dynamics versus Entanglement", + "doi": "10.1103/physrevlett.101.040403", + "nodeyear": 2008, + "ref-by-count": 153, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1036114834", + "attributes": { + "title": "Equivalence of Critical Scaling Laws for Many-Body Entanglement in the Lipkin-Meshkov-Glick Model", + "doi": "10.1103/physrevlett.101.025701", + "nodeyear": 2008, + "ref-by-count": 134, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1038868267", + "attributes": { + "title": "Unified Description of 0+ States in a Large Class of Nuclear Collective Models", + "doi": "10.1103/physrevlett.101.022501", + "nodeyear": 2008, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1029956508", + "attributes": { + "title": "Observation of quantum-measurement backaction with an ultracold atomic gas", + "doi": "10.1038/nphys965", + "nodeyear": 2008, + "ref-by-count": 327, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1044966137", + "attributes": { + "title": "Relation between E(5) models and the interacting boson model", + "doi": "10.1103/physrevc.77.054307", + "nodeyear": 2008, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1012266401", + "attributes": { + "title": "Simple Empirical Order Parameter for a First-Order Quantum Phase Transition in Atomic Nuclei", + "doi": "10.1103/physrevlett.100.142501", + "nodeyear": 2008, + "ref-by-count": 40, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1032454787", + "attributes": { + "title": "Analytical solutions of the Bohr Hamiltonian with the Morse potential", + "doi": "10.1103/physrevc.77.044302", + "nodeyear": 2008, + "ref-by-count": 55, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1034485631", + "attributes": { + "title": "Storage and Retrieval of a Squeezed Vacuum", + "doi": "10.1103/physrevlett.100.093601", + "nodeyear": 2008, + "ref-by-count": 196, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060504144", + "attributes": { + "title": "Characterization of quantum angular-momentum fluctuations via principal components", + "doi": "10.1103/physreva.77.022105", + "nodeyear": 2008, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1045212838", + "attributes": { + "title": "Bending vibrational modes of ABBA molecules: algebraic approach and its classical limit", + "doi": "10.1080/00268970701757883", + "nodeyear": 2008, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060839663", + "attributes": { + "title": "Entanglement in many-body systems", + "doi": "10.1103/revmodphys.80.517", + "nodeyear": 2008, + "ref-by-count": 2366, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1072401415", + "attributes": { + "title": "Chirikov standard map", + "doi": "10.4249/scholarpedia.3550", + "nodeyear": 2008, + "ref-by-count": 56, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1020731266", + "attributes": { + "title": "Optimal Spin Squeezing Inequalities Detect Bound Entanglement in Spin Models", + "doi": "10.1103/physrevlett.99.250405", + "nodeyear": 2007, + "ref-by-count": 168, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1045352298", + "attributes": { + "title": "Exactly separable version of the Bohr Hamiltonian with the Davidson potential", + "doi": "10.1103/physrevc.76.064312", + "nodeyear": 2007, + "ref-by-count": 74, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1050275996", + "attributes": { + "title": "Quantum-limited measurements of atomic scattering properties", + "doi": "10.1103/physreva.76.053617", + "nodeyear": 2007, + "ref-by-count": 45, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1029202339", + "attributes": { + "title": "Cavity QED with a Bose\u2013Einstein condensate", + "doi": "10.1038/nature06120", + "nodeyear": 2007, + "ref-by-count": 439, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1044299159", + "attributes": { + "title": "Spin squeezing and maximal-squeezing time", + "doi": "10.1103/physreva.76.043621", + "nodeyear": 2007, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1027799783", + "attributes": { + "title": "The a.c. and d.c. Josephson effects in a Bose\u2013Einstein condensate", + "doi": "10.1038/nature06186", + "nodeyear": 2007, + "ref-by-count": 418, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1049766158", + "attributes": { + "title": "N=90 region: The decays of Eu152m,g to Sm152", + "doi": "10.1103/physrevc.76.034319", + "nodeyear": 2007, + "ref-by-count": 33, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1032603162", + "attributes": { + "title": "Conditional squeezing of an atomic alignment", + "doi": "10.1103/physreva.76.033830", + "nodeyear": 2007, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1032486064", + "attributes": { + "title": "Microscopic Description of Nuclear Quantum Phase Transitions", + "doi": "10.1103/physrevlett.99.092502", + "nodeyear": 2007, + "ref-by-count": 88, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060675775", + "attributes": { + "title": "Shape-phase transitions and two-particle transfer intensities", + "doi": "10.1103/physrevc.76.014316", + "nodeyear": 2007, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1021089453", + "attributes": { + "title": "Partial Dynamical Symmetry at Critical Points of Quantum Phase Transitions", + "doi": "10.1103/physrevlett.98.242502", + "nodeyear": 2007, + "ref-by-count": 53, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060675732", + "attributes": { + "title": "Shape phase transition in odd nuclei in a multi-j model: The UB(6)\u2297UF(12) case", + "doi": "10.1103/physrevc.75.064316", + "nodeyear": 2007, + "ref-by-count": 42, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1029051671", + "attributes": { + "title": "Exactly separable version of X(5) and related models", + "doi": "10.1016/j.physletb.2006.12.080", + "nodeyear": 2007, + "ref-by-count": 31, + "is_input_DOI": false, + "category_for": "02:0.60;01:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1013946646", + "attributes": { + "title": "Criticality in the configuration-mixed interacting boson model: (1) U(5)\u2013Q\u02c6(\u03c7)\u22c5Q\u02c6(\u03c7) mixing", + "doi": "10.1016/j.nuclphysa.2007.04.003", + "nodeyear": 2007, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1027287387", + "attributes": { + "title": "Collective Excitations and Instability of an Optical Lattice due to Unbalanced Pumping", + "doi": "10.1103/physrevlett.98.203008", + "nodeyear": 2007, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1016531939", + "attributes": { + "title": "High-Resolution Magnetometry with a Spinor Bose-Einstein Condensate", + "doi": "10.1103/physrevlett.98.200801", + "nodeyear": 2007, + "ref-by-count": 169, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1038008984", + "attributes": { + "title": "Quantum phase transitions and structural evolution in nuclei", + "doi": "10.1088/0954-3899/34/7/r01", + "nodeyear": 2007, + "ref-by-count": 140, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1031284085", + "attributes": { + "title": "Entanglement assisted fast reordering of atoms in an optical lattice within a cavity at T=0", + "doi": "10.1016/j.optcom.2007.01.069", + "nodeyear": 2007, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060675639", + "attributes": { + "title": "\u03b3-band staggering and E(5)-type structure: Zn64", + "doi": "10.1103/physrevc.75.044302", + "nodeyear": 2007, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1011478891", + "attributes": { + "title": "Empirical Proton-Neutron Interactions and Nuclear Density Functional Theory: Global, Regional, and Local Comparisons", + "doi": "10.1103/physrevlett.98.132502", + "nodeyear": 2007, + "ref-by-count": 53, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1046760586", + "attributes": { + "title": "Probing quantum phases of ultracold atoms in optical lattices by transmission spectra in cavity quantum electrodynamics", + "doi": "10.1038/nphys571", + "nodeyear": 2007, + "ref-by-count": 145, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1041760964", + "attributes": { + "title": "Quadrupole collective variables in the natural Cartan?Weyl basis", + "doi": "10.1088/1751-8113/40/11/009", + "nodeyear": 2007, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1007165107", + "attributes": { + "title": "Observation of High-Order Quantum Resonances in the Kicked Rotor", + "doi": "10.1103/physrevlett.98.083004", + "nodeyear": 2007, + "ref-by-count": 52, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060833498", + "attributes": { + "title": "Superradiant Rayleigh Scattering and Collective Atomic Recoil Lasing in a Ring Cavity", + "doi": "10.1103/physrevlett.98.053603", + "nodeyear": 2007, + "ref-by-count": 158, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1039655036", + "attributes": { + "title": "Long Phase Coherence Time and Number Squeezing of Two Bose-Einstein Condensates on an Atom Chip", + "doi": "10.1103/physrevlett.98.030407", + "nodeyear": 2007, + "ref-by-count": 260, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1041165280", + "attributes": { + "title": "Phase structure of interacting boson models in arbitrary dimension", + "doi": "10.1088/1751-8113/40/4/001", + "nodeyear": 2007, + "ref-by-count": 50, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1023676200", + "attributes": { + "title": "Two-level interacting boson models beyond the mean field", + "doi": "10.1103/physrevc.75.014301", + "nodeyear": 2007, + "ref-by-count": 40, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1029374432", + "attributes": { + "title": "Analytic descriptions for transitional nuclei near the critical point", + "doi": "10.1016/j.nuclphysa.2006.10.032", + "nodeyear": 2007, + "ref-by-count": 62, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1034964762", + "attributes": { + "title": "Quantum Entanglement and Teleportation of Quantum-Dot States in Microcavities", + "doi": "10.1380/ejssnt.2007.51", + "nodeyear": 2007, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1036559725", + "attributes": { + "title": "Shape phase transitions and critical-point phenomena in atomic nuclei", + "doi": "10.1038/nphys451", + "nodeyear": 2006, + "ref-by-count": 132, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1001541263", + "attributes": { + "title": "Light does matter", + "doi": "10.1038/nphys479", + "nodeyear": 2006, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1007041825", + "attributes": { + "title": "Quantum phase transitions of light", + "doi": "10.1038/nphys466", + "nodeyear": 2006, + "ref-by-count": 588, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1009364201", + "attributes": { + "title": "Symmetry breaking in symmetric and asymmetric double-well potentials", + "doi": "10.1103/physreve.74.056608", + "nodeyear": 2006, + "ref-by-count": 76, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042138928", + "attributes": { + "title": "Generation and storage of quantum states using cold atoms", + "doi": "10.1080/09500340600894048", + "nodeyear": 2006, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060675503", + "attributes": { + "title": "Crossing contours in the interacting boson approximation (IBA) symmetry triangle", + "doi": "10.1103/physrevc.74.057302", + "nodeyear": 2006, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060675476", + "attributes": { + "title": "First-order quantum phase transition in a finite system", + "doi": "10.1103/physrevc.74.051301", + "nodeyear": 2006, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1040258398", + "attributes": { + "title": "Efficient Quantum-State Estimation by Continuous Weak Measurement and Dynamical Control", + "doi": "10.1103/physrevlett.97.180403", + "nodeyear": 2006, + "ref-by-count": 61, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1022807668", + "attributes": { + "title": "Adiabatic Mach-Zehnder Interferometry on a Quantized Bose-Josephson Junction", + "doi": "10.1103/physrevlett.97.150402", + "nodeyear": 2006, + "ref-by-count": 95, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060675450", + "attributes": { + "title": "Intrinsic quadrupole tensor in the geometric interpretation of the interacting boson approximation (IBA-1)", + "doi": "10.1103/physrevc.74.044307", + "nodeyear": 2006, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060502673", + "attributes": { + "title": "Polarization squeezing and nonclassical properties of light", + "doi": "10.1103/physreva.74.043817", + "nodeyear": 2006, + "ref-by-count": 56, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1015215551", + "attributes": { + "title": "\u03b3-soft analog of the confined \u03b2-soft rotor model", + "doi": "10.1103/physrevc.74.044306", + "nodeyear": 2006, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1052615551", + "attributes": { + "title": "Connecting the X(5)-\u03b22, X(5)-\u03b24, and X(3) models to the shape/phase-transition region of the interacting boson model", + "doi": "10.1103/physrevc.74.034306", + "nodeyear": 2006, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060675387", + "attributes": { + "title": "Electromagnetic transition strengths in Dy156", + "doi": "10.1103/physrevc.74.024313", + "nodeyear": 2006, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1020454192", + "attributes": { + "title": "Many-Body Quantum Dynamics of Polarization Squeezing in Optical Fibers", + "doi": "10.1103/physrevlett.97.023606", + "nodeyear": 2006, + "ref-by-count": 63, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1017862564", + "attributes": { + "title": "Solution of the Bohr Hamiltonian for soft triaxial nuclei", + "doi": "10.1103/physrevc.74.014310", + "nodeyear": 2006, + "ref-by-count": 47, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1062971188", + "attributes": { + "title": "SHAPE EVOLUTION FOR Ce ISOTOPES IN RELATIVISTIC MEAN-FIELD THEORY", + "doi": "10.1142/s0218301306004661", + "nodeyear": 2006, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1004210259", + "attributes": { + "title": "Hybrid apparatus for Bose-Einstein condensation and cavity quantum electrodynamics: Single atom detection in quantum degenerate gases", + "doi": "10.1063/1.2216907", + "nodeyear": 2006, + "ref-by-count": 39, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1000892586", + "attributes": { + "title": "Enhanced density of low-lying 0+ states: A corroboration of shape phase transitional behavior", + "doi": "10.1016/j.physletb.2006.05.007", + "nodeyear": 2006, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1009022347", + "attributes": { + "title": "Physics at the Thomas Jefferson National Accelerator Facility", + "doi": "10.1140/epja/i2006-09-002-9", + "nodeyear": 2006, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1010496603", + "attributes": { + "title": "Quantum entanglement and classical bifurcations in a coupled two-component Bose-Einstein condensate", + "doi": "10.1140/epjd/e2006-00103-6", + "nodeyear": 2006, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1004884918", + "attributes": { + "title": "Scalar two-level boson model to study the interacting boson model phase diagram in the Casten triangle", + "doi": "10.1103/physrevc.73.054305", + "nodeyear": 2006, + "ref-by-count": 34, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060832030", + "attributes": { + "title": "Direct Empirical Correlation between Proton-Neutron Interaction Strengths and the Growth of Collectivity in Nuclei", + "doi": "10.1103/physrevlett.96.132501", + "nodeyear": 2006, + "ref-by-count": 66, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1027175597", + "attributes": { + "title": "E(5), X(5), and prolate to oblate shape phase transitions in relativistic Hartree-Bogoliubov theory", + "doi": "10.1103/physrevc.73.044310", + "nodeyear": 2006, + "ref-by-count": 72, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1064237535", + "attributes": { + "title": "Self-organization of a laser-driven cold gas in a ring cavity", + "doi": "10.1209/epl/i2005-10521-4", + "nodeyear": 2006, + "ref-by-count": 34, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1041063912", + "attributes": { + "title": "Probing Number Squeezing of Ultracold Atoms across the Superfluid-Mott Insulator Transition", + "doi": "10.1103/physrevlett.96.090401", + "nodeyear": 2006, + "ref-by-count": 89, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060675215", + "attributes": { + "title": "Lifetime measurements of yrast states in Yb162 and Hf166", + "doi": "10.1103/physrevc.73.034303", + "nodeyear": 2006, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060501981", + "attributes": { + "title": "Magnetization, squeezing, and entanglement in dipolar spin-1 condensates", + "doi": "10.1103/physreva.73.023602", + "nodeyear": 2006, + "ref-by-count": 53, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1031239487", + "attributes": { + "title": "Evolution of spectral properties along the O(6)-U(5) transition in the interacting boson model. II. Classical trajectories", + "doi": "10.1103/physrevc.73.014307", + "nodeyear": 2006, + "ref-by-count": 34, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1014034141", + "attributes": { + "title": "Evolution of spectral properties along the O(6)-U(5) transition in the interacting boson model. I. Level dynamics", + "doi": "10.1103/physrevc.73.014306", + "nodeyear": 2006, + "ref-by-count": 45, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1008903034", + "attributes": { + "title": "X(3): an exactly separable \u03b3-rigid version of the X(5) critical point symmetry", + "doi": "10.1016/j.physletb.2005.10.060", + "nodeyear": 2006, + "ref-by-count": 91, + "is_input_DOI": false, + "category_for": "02:0.60;01:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1004068287", + "attributes": { + "title": "Prolate\u2013oblate shape-phase transition in the O(6) description of nuclear rotation", + "doi": "10.1016/j.nuclphysa.2005.11.006", + "nodeyear": 2006, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060675113", + "attributes": { + "title": "Octupole collectivity in the Sm isotopes", + "doi": "10.1103/physrevc.72.064302", + "nodeyear": 2005, + "ref-by-count": 31, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059141664", + "attributes": { + "title": "Simultaneous squeezing of two orthogonal spin components", + "doi": "10.1088/1464-4266/7/12/046", + "nodeyear": 2005, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1062913555", + "attributes": { + "title": "SYSTEMATIC ANALYSIS OF CRITICAL POINT NUCLEI IN THE RARE-EARTH REGION WITH RELATIVISTIC MEAN FIELD THEORY", + "doi": "10.1142/s0217732305017883", + "nodeyear": 2005, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1039276131", + "attributes": { + "title": "An algebraic approach to problems with polynomial Hamiltonians on Euclidean spaces", + "doi": "10.1088/0305-4470/38/47/009", + "nodeyear": 2005, + "ref-by-count": 45, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1032223066", + "attributes": { + "title": "Self-organization of atoms in a cavity field: Threshold, bistability, and scaling laws", + "doi": "10.1103/physreva.72.053417", + "nodeyear": 2005, + "ref-by-count": 95, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1024370344", + "attributes": { + "title": "Effects of \u03b2-\u03b3 coupling in transitional nuclei and the validity of the approximate separation of variables", + "doi": "10.1103/physrevc.72.054323", + "nodeyear": 2005, + "ref-by-count": 76, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1016118774", + "attributes": { + "title": "A theoretical description of energy spectra and two-neutron separation energies for neutron-rich zirconium isotopes", + "doi": "10.1140/epja/i2005-10176-1", + "nodeyear": 2005, + "ref-by-count": 31, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1013722826", + "attributes": { + "title": "Superconducting Circuits and Quantum Information", + "doi": "10.1063/1.2155757", + "nodeyear": 2005, + "ref-by-count": 754, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1051841352", + "attributes": { + "title": "Solutions of the Bohr Hamiltonian, a compendium", + "doi": "10.1140/epjad/i2005-07-115-8", + "nodeyear": 2005, + "ref-by-count": 114, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1051688434", + "attributes": { + "title": "Quantum squeezing and entanglement in a two-mode Bose-Einstein condensate with time-dependent Josephson-like coupling", + "doi": "10.1103/physreva.72.033612", + "nodeyear": 2005, + "ref-by-count": 39, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1028802174", + "attributes": { + "title": "X (5) critical-point structure in a finite system", + "doi": "10.1103/physrevc.72.031305", + "nodeyear": 2005, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1003371857", + "attributes": { + "title": "Phase transitions and quasi-dynamical symmetry in nuclear collective models, III: The U(5) to SU(3) phase transition in the IBM", + "doi": "10.1016/j.nuclphysa.2005.05.144", + "nodeyear": 2005, + "ref-by-count": 57, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1022816651", + "attributes": { + "title": "Phase structure of a two-fluid bosonic system", + "doi": "10.1016/j.aop.2005.02.003", + "nodeyear": 2005, + "ref-by-count": 57, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1002091117", + "attributes": { + "title": "\u03b3-rigid solution of the Bohr Hamiltonian for \u03b3=30\u00b0 compared to the E(5) critical point symmetry", + "doi": "10.1016/j.physletb.2005.06.047", + "nodeyear": 2005, + "ref-by-count": 71, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060830663", + "attributes": { + "title": "Dynamic Supersymmetries of Differential Equations with Applications to Nuclear Spectroscopy", + "doi": "10.1103/physrevlett.95.052503", + "nodeyear": 2005, + "ref-by-count": 68, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1009628601", + "attributes": { + "title": "Phase transitions and quasidynamical symmetry in nuclear collective models. II. The spherical vibrator to gamma-soft rotor transition in an SO(5)-invariant Bohr model", + "doi": "10.1016/j.nuclphysa.2005.04.003", + "nodeyear": 2005, + "ref-by-count": 48, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1035029355", + "attributes": { + "title": "Direct Observation of Tunneling and Nonlinear Self-Trapping in a Single Bosonic Josephson Junction", + "doi": "10.1103/physrevlett.95.010402", + "nodeyear": 2005, + "ref-by-count": 1161, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1052394951", + "attributes": { + "title": "Shape evolution for Sm isotopes in relativistic mean-field theory", + "doi": "10.1140/epja/i2005-10066-6", + "nodeyear": 2005, + "ref-by-count": 67, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1039981372", + "attributes": { + "title": "Analytic description of critical-point actinides in a transition from octupole deformation to octupole vibrations", + "doi": "10.1103/physrevc.71.064309", + "nodeyear": 2005, + "ref-by-count": 46, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1049959435", + "attributes": { + "title": "Quantum phase transition in the U(3) boson system", + "doi": "10.1016/j.physleta.2005.04.086", + "nodeyear": 2005, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059141708", + "attributes": { + "title": "Classical evolution of quantum fluctuations in spin-like systems: squeezing and entanglement", + "doi": "10.1088/1464-4266/7/6/004", + "nodeyear": 2005, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060674871", + "attributes": { + "title": "Simple description of light W, Os, and Pt nuclei in the interacting boson model", + "doi": "10.1103/physrevc.71.054306", + "nodeyear": 2005, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019615542", + "attributes": { + "title": "The algebraic collective model", + "doi": "10.1016/j.nuclphysa.2005.01.032", + "nodeyear": 2005, + "ref-by-count": 71, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1012276581", + "attributes": { + "title": "Quantum entanglement and fixed-point bifurcations", + "doi": "10.1103/physreva.71.042303", + "nodeyear": 2005, + "ref-by-count": 55, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019064484", + "attributes": { + "title": "Equivalence between two-mode spin squeezed states and pure entangled states with equal spin", + "doi": "10.1088/0305-4470/38/14/l01", + "nodeyear": 2005, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060829954", + "attributes": { + "title": "Superradiant Light Scattering from Thermal Atomic Vapors", + "doi": "10.1103/physrevlett.94.083602", + "nodeyear": 2005, + "ref-by-count": 41, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060674805", + "attributes": { + "title": "Bridging the gap between X(5) and the interacting boson model", + "doi": "10.1103/physrevc.71.034309", + "nodeyear": 2005, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059052509", + "attributes": { + "title": "Spin Squeezing and Entanglement of Many-Particle Spin-Half States", + "doi": "10.1088/0256-307x/22/2/002", + "nodeyear": 2005, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060829713", + "attributes": { + "title": "Direct Observation of Dynamical Bifurcation between Two Driven Oscillation States of a Josephson Junction", + "doi": "10.1103/physrevlett.94.027005", + "nodeyear": 2005, + "ref-by-count": 133, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1006251427", + "attributes": { + "title": "Spin Squeezing via One-Axis Twisting with Coherent Light", + "doi": "10.1103/physrevlett.94.023003", + "nodeyear": 2005, + "ref-by-count": 68, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1026031618", + "attributes": { + "title": "Magnetometry with entangled atomic samples", + "doi": "10.1103/physreva.71.012312", + "nodeyear": 2005, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1028230402", + "attributes": { + "title": "Phase Structure of the Two-Fluid Proton-Neutron System", + "doi": "10.1103/physrevlett.93.242502", + "nodeyear": 2004, + "ref-by-count": 54, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060829459", + "attributes": { + "title": "Scaling Properties and Asymptotic Spectra of Finite Models of Phase Transitions as They Approach Macroscopic Limits", + "doi": "10.1103/physrevlett.93.232502", + "nodeyear": 2004, + "ref-by-count": 66, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1027890249", + "attributes": { + "title": "Can a Quantum Nondemolition Measurement Improve the Sensitivity of an Atomic Magnetometer?", + "doi": "10.1103/physrevlett.93.173002", + "nodeyear": 2004, + "ref-by-count": 92, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1038529836", + "attributes": { + "title": "Continuous Weak Measurement and Nonlinear Dynamics in a Cold Spin Ensemble", + "doi": "10.1103/physrevlett.93.163602", + "nodeyear": 2004, + "ref-by-count": 78, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1020702089", + "attributes": { + "title": "Alternative Interpretation of Sharply Rising E0 Strengths in Transitional Regions", + "doi": "10.1103/physrevlett.93.152502", + "nodeyear": 2004, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060674676", + "attributes": { + "title": "Comment on \u201cSearching for E(5) behavior in nuclei\u201d", + "doi": "10.1103/physrevc.70.049801", + "nodeyear": 2004, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1000824046", + "attributes": { + "title": "Entanglement and spin squeezing in the three-qubit transverse Ising model", + "doi": "10.1016/j.physleta.2004.08.019", + "nodeyear": 2004, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060829034", + "attributes": { + "title": "Experimental Confirmation of the Alhassid-Whelan Arc of Regularity", + "doi": "10.1103/physrevlett.93.132501", + "nodeyear": 2004, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1043619387", + "attributes": { + "title": "Weak Dynamical Localization in Periodically Kicked Cold Atomic Gases", + "doi": "10.1103/physrevlett.93.124101", + "nodeyear": 2004, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060500571", + "attributes": { + "title": "Sub-shot-noise-limited measurements with Bose-Einstein condensates", + "doi": "10.1103/physreva.70.033601", + "nodeyear": 2004, + "ref-by-count": 54, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1043354067", + "attributes": { + "title": "E(5) and X(5) critical point symmetries obtained from Davidson potentials through a variational procedure", + "doi": "10.1103/physrevc.70.024305", + "nodeyear": 2004, + "ref-by-count": 38, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1013587089", + "attributes": { + "title": "Soft triaxial rotovibrational motion in the vicinity of \u03b3=\u03c0\u22156", + "doi": "10.1103/physrevc.70.011302", + "nodeyear": 2004, + "ref-by-count": 60, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1095903609", + "attributes": { + "title": "Basic Ideas and Concepts in Nuclear Physics", + "doi": "10.1201/9781420054941", + "nodeyear": 2004, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1020207781", + "attributes": { + "title": "Stability of Atomic Clocks Based on Entangled Atoms", + "doi": "10.1103/physrevlett.92.230801", + "nodeyear": 2004, + "ref-by-count": 96, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060674224", + "attributes": { + "title": "Searching for E(5) behavior in nuclei", + "doi": "10.1103/physrevc.69.064322", + "nodeyear": 2004, + "ref-by-count": 92, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060674216", + "attributes": { + "title": "N=90 region: The decay of Eu 154 to Gd 154", + "doi": "10.1103/physrevc.69.064309", + "nodeyear": 2004, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1003628052", + "attributes": { + "title": "Collective Excitations of a Degenerate Gas at the BEC-BCS Crossover", + "doi": "10.1103/physrevlett.92.203201", + "nodeyear": 2004, + "ref-by-count": 486, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060674175", + "attributes": { + "title": "Phase transitions versus shape coexistence", + "doi": "10.1103/physrevc.69.054304", + "nodeyear": 2004, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1038988214", + "attributes": { + "title": "Phase transitions between axisymmetric and nonaxial nuclear shapes", + "doi": "10.1134/1.1755385", + "nodeyear": 2004, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1041801698", + "attributes": { + "title": "Entanglement Interferometry for Precision Measurement of Atomic Scattering Properties", + "doi": "10.1103/physrevlett.92.160406", + "nodeyear": 2004, + "ref-by-count": 104, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1051955120", + "attributes": { + "title": "Quantum-state transfer between fields and atoms in electromagnetically induced transparency", + "doi": "10.1103/physreva.69.043810", + "nodeyear": 2004, + "ref-by-count": 85, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1020674059", + "attributes": { + "title": "Condensation of Pairs of Fermionic Atoms near a Feshbach Resonance", + "doi": "10.1103/physrevlett.92.120403", + "nodeyear": 2004, + "ref-by-count": 978, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060674103", + "attributes": { + "title": "Evolving shape coexistence in the lead isotopes: The geometry of configuration mixing in nuclei", + "doi": "10.1103/physrevc.69.034323", + "nodeyear": 2004, + "ref-by-count": 52, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1024352953", + "attributes": { + "title": "Measurement of a mixed-spin-channel Feshbach resonance in Rb 87", + "doi": "10.1103/physreva.69.032705", + "nodeyear": 2004, + "ref-by-count": 63, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1021947031", + "attributes": { + "title": "Ground state bands of the E(5) and X(5) critical symmetries obtained from Davidson potentials through a variational procedure", + "doi": "10.1016/j.physletb.2004.01.018", + "nodeyear": 2004, + "ref-by-count": 71, + "is_input_DOI": false, + "category_for": "02:0.60;01:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1060674055", + "attributes": { + "title": "Low spin states in Yb 162 and the X(5) critical point symmetry", + "doi": "10.1103/physrevc.69.024308", + "nodeyear": 2004, + "ref-by-count": 31, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1008096035", + "attributes": { + "title": "Entanglement in a second-order quantum phase transition", + "doi": "10.1103/physreva.69.022107", + "nodeyear": 2004, + "ref-by-count": 241, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1016359120", + "attributes": { + "title": "Observation of Resonance Condensation of Fermionic Atom Pairs", + "doi": "10.1103/physrevlett.92.040403", + "nodeyear": 2004, + "ref-by-count": 1348, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060674011", + "attributes": { + "title": "Rotation-driven spherical-to-deformed shape transition in A\u2248100 nuclei and the cranked interacting boson model", + "doi": "10.1103/physrevc.69.011301", + "nodeyear": 2004, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1029628720", + "attributes": { + "title": "Sequence of potentials lying between the U(5) and X(5) symmetries", + "doi": "10.1103/physrevc.69.014302", + "nodeyear": 2004, + "ref-by-count": 68, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060673990", + "attributes": { + "title": "Test of X(5) for the \u03b3 degree of freedom", + "doi": "10.1103/physrevc.68.064304", + "nodeyear": 2003, + "ref-by-count": 64, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1026174138", + "attributes": { + "title": "A close look at U(5)\u2194SU(3) transitional patterns in the interacting boson model", + "doi": "10.1016/j.physletb.2003.09.098", + "nodeyear": 2003, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "02:0.60;01:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1060827495", + "attributes": { + "title": "Observation of Collective Friction Forces due to Spatial Self-Organization of Atoms: From Rayleigh to Bragg Scattering", + "doi": "10.1103/physrevlett.91.203001", + "nodeyear": 2003, + "ref-by-count": 259, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060673983", + "attributes": { + "title": "Comment on \u201cReexamination of the N=90 transitional nuclei Nd 150 and Sm 152 \u201d", + "doi": "10.1103/physrevc.68.059801", + "nodeyear": 2003, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1012415680", + "attributes": { + "title": "Systematic study of deformed nuclei at the drip lines and beyond", + "doi": "10.1103/physrevc.68.054312", + "nodeyear": 2003, + "ref-by-count": 227, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059141471", + "attributes": { + "title": "Dynamical squeezing enhancement in the off-resonant Dicke model", + "doi": "10.1088/1464-4266/6/1/006", + "nodeyear": 2003, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:0.60;03:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1041066149", + "attributes": { + "title": "U(5)-O(6) transition in the interacting boson model and the E(5) critical point symmetry", + "doi": "10.1103/physrevc.68.041302", + "nodeyear": 2003, + "ref-by-count": 71, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060827277", + "attributes": { + "title": "Phase Transitions in Angle Variables", + "doi": "10.1103/physrevlett.91.132502", + "nodeyear": 2003, + "ref-by-count": 151, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1025127614", + "attributes": { + "title": "Supersolid versus Phase Separation in Atomic Bose-Fermi Mixtures", + "doi": "10.1103/physrevlett.91.130404", + "nodeyear": 2003, + "ref-by-count": 156, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060827181", + "attributes": { + "title": "Low-Energy Coexisting Band in Gd154", + "doi": "10.1103/physrevlett.91.102501", + "nodeyear": 2003, + "ref-by-count": 39, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060673917", + "attributes": { + "title": "Searching for X(5) behavior in nuclei", + "doi": "10.1103/physrevc.68.037301", + "nodeyear": 2003, + "ref-by-count": 62, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1014640361", + "attributes": { + "title": "Relations between bosonic quadrature squeezing and atomic spin squeezing", + "doi": "10.1103/physreva.68.033821", + "nodeyear": 2003, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1013668806", + "attributes": { + "title": "Self-consistent approach to deformation of intruder states in neutron-deficient Pb and Po", + "doi": "10.1016/j.physletb.2003.07.042", + "nodeyear": 2003, + "ref-by-count": 33, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1028952543", + "attributes": { + "title": "Phase transitions and critical points in the rare-earth region", + "doi": "10.1103/physrevc.68.024307", + "nodeyear": 2003, + "ref-by-count": 42, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059051422", + "attributes": { + "title": "Description of\n 114\n Cd in the\n E\n (5) Symmetry", + "doi": "10.1088/0256-307x/20/8/313", + "nodeyear": 2003, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1003190826", + "attributes": { + "title": "Spin squeezing and pairwise entanglement for symmetric multiqubit states", + "doi": "10.1103/physreva.68.012101", + "nodeyear": 2003, + "ref-by-count": 174, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1016917732", + "attributes": { + "title": "Concepts and Methods in the Theory of Open Quantum Systems", + "doi": "10.1007/3-540-44874-8_4", + "nodeyear": 2003, + "ref-by-count": 431, + "is_input_DOI": false, + "category_for": "01:0.60;02:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1059051362", + "attributes": { + "title": "Evidence for a Possible\n E\n (5) Symmetry in\n 130\n Xe", + "doi": "10.1088/0256-307x/20/7/316", + "nodeyear": 2003, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1024862071", + "attributes": { + "title": "Faraday spectroscopy in an optical lattice: a continuous probe of atom dynamics", + "doi": "10.1088/1464-4266/5/4/301", + "nodeyear": 2003, + "ref-by-count": 42, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042658200", + "attributes": { + "title": "Spin Squeezing Criterion with Local Unitary Invariance", + "doi": "10.1023/b:qinp.0000004125.12489.f4", + "nodeyear": 2003, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "08:0.33;02:0.33;01:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1049620203", + "attributes": { + "title": "Critical-Point Symmetry in a Finite System", + "doi": "10.1103/physrevlett.90.212501", + "nodeyear": 2003, + "ref-by-count": 41, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1065170744", + "attributes": { + "title": "Mechanical effects of light in optical resonators", + "doi": "10.1364/josab.20.001098", + "nodeyear": 2003, + "ref-by-count": 151, + "is_input_DOI": false, + "category_for": "09:0.33;01:0.33;02:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1046510001", + "attributes": { + "title": "Algebraic Bethe ansatz method for the exact calculation of energy spectra and form factors: applications to models of Bose\u2013Einstein condensates and metallic nanograins", + "doi": "10.1088/0305-4470/36/19/201", + "nodeyear": 2003, + "ref-by-count": 124, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060826564", + "attributes": { + "title": "Signature for Vibrational to Rotational Evolution Along the Yrast Line", + "doi": "10.1103/physrevlett.90.152502", + "nodeyear": 2003, + "ref-by-count": 103, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060826447", + "attributes": { + "title": "Landau Theory of Shape Phase Transitions in the Cranked Interacting Boson Model", + "doi": "10.1103/physrevlett.90.112501", + "nodeyear": 2003, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1002415192", + "attributes": { + "title": "Entangling two Bose-Einstein condensates by stimulated Bragg scattering", + "doi": "10.1103/physreva.67.023603", + "nodeyear": 2003, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1010954675", + "attributes": { + "title": "The effective potential of squeezed spin states", + "doi": "10.1016/s0375-9601(02)01796-6", + "nodeyear": 2003, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1018185342", + "attributes": { + "title": "Many-particle entanglement in two-component Bose-Einstein condensates", + "doi": "10.1103/physreva.67.013607", + "nodeyear": 2003, + "ref-by-count": 202, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060673587", + "attributes": { + "title": "Low-spin structure of 156Dy through \u03b3-ray spectroscopy", + "doi": "10.1103/physrevc.66.054310", + "nodeyear": 2002, + "ref-by-count": 62, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060825499", + "attributes": { + "title": "Triple Point of Nuclear Deformations", + "doi": "10.1103/physrevlett.89.182502", + "nodeyear": 2002, + "ref-by-count": 106, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060498655", + "attributes": { + "title": "Spin squeezing in a driven Bose-Einstein condensate", + "doi": "10.1103/physreva.66.043621", + "nodeyear": 2002, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1048466090", + "attributes": { + "title": "Preparation of spin-squeezed atomic states by optical-phase-shift measurement", + "doi": "10.1103/physreva.66.043811", + "nodeyear": 2002, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1049930918", + "attributes": { + "title": "Algebraic analysis of bent-from-linear transition intensities: the vibronically resolved emission spectrum of methinophosphide (HCP)", + "doi": "10.1016/s0009-2614(02)01419-7", + "nodeyear": 2002, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060673509", + "attributes": { + "title": "Evidence of X(5) symmetry for n\u03b3=0,1,2 bands in 104Mo", + "doi": "10.1103/physrevc.66.031301", + "nodeyear": 2002, + "ref-by-count": 42, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1043952833", + "attributes": { + "title": "Entangling atoms in bad cavities", + "doi": "10.1103/physreva.66.022314", + "nodeyear": 2002, + "ref-by-count": 65, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060498428", + "attributes": { + "title": "Bifurcation effects in coupled Bose-Einstein condensates", + "doi": "10.1103/physreva.66.013602", + "nodeyear": 2002, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1052781356", + "attributes": { + "title": "Single-mode approximation in a spinor-1 atomic condensate", + "doi": "10.1103/physreva.66.011601", + "nodeyear": 2002, + "ref-by-count": 119, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1020003088", + "attributes": { + "title": "Near-optimal two-mode spin squeezing via feedback", + "doi": "10.1103/physreva.66.012313", + "nodeyear": 2002, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060673423", + "attributes": { + "title": "Lifetime and B(E2) values for the 31+ level in 152Sm", + "doi": "10.1103/physrevc.65.067305", + "nodeyear": 2002, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060824936", + "attributes": { + "title": "B(E2) Values in N150d and the Critical Point Symmetry X(5)", + "doi": "10.1103/physrevlett.88.232501", + "nodeyear": 2002, + "ref-by-count": 166, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1008334218", + "attributes": { + "title": "Atom correlations and spin squeezing near the Heisenberg limit: Finite-size effect and decoherence", + "doi": "10.1103/physreva.65.053819", + "nodeyear": 2002, + "ref-by-count": 62, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060673380", + "attributes": { + "title": "Empirical example of possible E(5) symmetry nucleus 108Pd", + "doi": "10.1103/physrevc.65.057301", + "nodeyear": 2002, + "ref-by-count": 26, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060673307", + "attributes": { + "title": "102Pd: An E(5) nucleus?", + "doi": "10.1103/physrevc.65.044325", + "nodeyear": 2002, + "ref-by-count": 74, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1043133057", + "attributes": { + "title": "Bogoliubov theory of entanglement in a Bose-Einstein condensate", + "doi": "10.1103/physreva.65.043610", + "nodeyear": 2002, + "ref-by-count": 41, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1025998679", + "attributes": { + "title": "Scaling of entanglement close to a quantum phase transition", + "doi": "10.1038/416608a", + "nodeyear": 2002, + "ref-by-count": 1446, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1034030383", + "attributes": { + "title": "Dynamically turning off interactions in a two-component condensate", + "doi": "10.1103/physreva.65.033625", + "nodeyear": 2002, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1036288955", + "attributes": { + "title": "Pairwise entanglement in symmetric multi-qubit systems", + "doi": "10.1140/epjd/e20020045", + "nodeyear": 2002, + "ref-by-count": 128, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060673232", + "attributes": { + "title": "Finite well solution for the E(5) Hamiltonian", + "doi": "10.1103/physrevc.65.031304", + "nodeyear": 2002, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1048054732", + "attributes": { + "title": "Quantum teleportation and entanglement swapping for spin systems", + "doi": "10.1088/1367-2630/4/1/308", + "nodeyear": 2002, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1003227336", + "attributes": { + "title": "Singular character of critical points in nuclei", + "doi": "10.1016/s0370-2693(02)01160-7", + "nodeyear": 2002, + "ref-by-count": 59, + "is_input_DOI": false, + "category_for": "02:0.60;01:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1006913239", + "attributes": { + "title": "Limitations of entanglement between photons and atoms coupled out from a Bose-Einstein condensate", + "doi": "10.1103/physreva.65.021605", + "nodeyear": 2002, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059141222", + "attributes": { + "title": "`Nonclassical' states in quantum optics: a `squeezed' review of the first 75 years", + "doi": "10.1088/1464-4266/4/1/201", + "nodeyear": 2002, + "ref-by-count": 632, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1052648436", + "attributes": { + "title": "Quantum phase transition from a superfluid to a Mott insulator in a gas of ultracold atoms", + "doi": "10.1038/415039a", + "nodeyear": 2002, + "ref-by-count": 4429, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1027887936", + "attributes": { + "title": "Collective atomic spin squeezing and control", + "doi": "10.1140/e10053-002-0014-7", + "nodeyear": 2002, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1029120630", + "attributes": { + "title": "Sufficient conditions for three-particle entanglement and their tests in recent experiments", + "doi": "10.1103/physreva.65.012107", + "nodeyear": 2001, + "ref-by-count": 86, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060823818", + "attributes": { + "title": "Quantum Phase Transition for \u03b3-Soft Nuclei", + "doi": "10.1103/physrevlett.87.162501", + "nodeyear": 2001, + "ref-by-count": 112, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1036937707", + "attributes": { + "title": "Exploring Phase Coherence in a 2D Lattice of Bose-Einstein Condensates", + "doi": "10.1103/physrevlett.87.160405", + "nodeyear": 2001, + "ref-by-count": 531, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1045391551", + "attributes": { + "title": "Quantum state transfer from light beams to atomic ensembles", + "doi": "10.1007/s100530170045", + "nodeyear": 2001, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1008192613", + "attributes": { + "title": "Experimental long-lived entanglement of two macroscopic objects", + "doi": "10.1038/35096524", + "nodeyear": 2001, + "ref-by-count": 882, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1050586441", + "attributes": { + "title": "Squeezed Light from Spin-Squeezed Atoms", + "doi": "10.1103/physrevlett.87.123601", + "nodeyear": 2001, + "ref-by-count": 34, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1043541010", + "attributes": { + "title": "Parameter symmetries of quantum many-body systems", + "doi": "10.1103/physrevc.64.034307", + "nodeyear": 2001, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1062445233", + "attributes": { + "title": "Josephson Junction Arrays with Bose-Einstein Condensates", + "doi": "10.1126/science.1062612", + "nodeyear": 2001, + "ref-by-count": 688, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060823477", + "attributes": { + "title": "Empirical Realization of a Critical Point Description in Atomic Nuclei", + "doi": "10.1103/physrevlett.87.052503", + "nodeyear": 2001, + "ref-by-count": 321, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060823476", + "attributes": { + "title": "Analytic Description of Critical Point Nuclei in a Spherical-Axially Deformed Shape Phase Transition", + "doi": "10.1103/physrevlett.87.052502", + "nodeyear": 2001, + "ref-by-count": 654, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060823255", + "attributes": { + "title": "Experimental Demonstration of Entanglement-Enhanced Rotation Angle Estimation Using Trapped Ions", + "doi": "10.1103/physrevlett.86.5870", + "nodeyear": 2001, + "ref-by-count": 209, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1047906658", + "attributes": { + "title": "Two-neutron separation energies, binding energies and phase transitions in the interacting boson model", + "doi": "10.1016/s0375-9474(00)00592-3", + "nodeyear": 2001, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1026831915", + "attributes": { + "title": "New Mechanism for the Enhancement of sd Dominance in Interacting Boson Models", + "doi": "10.1103/physrevlett.86.4791", + "nodeyear": 2001, + "ref-by-count": 31, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1035230987", + "attributes": { + "title": "Observation of the ideal Josephson effect in superfluid 4He", + "doi": "10.1038/35077024", + "nodeyear": 2001, + "ref-by-count": 98, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1053418337", + "attributes": { + "title": "Spin squeezing in nonlinear spin-coherent states", + "doi": "10.1088/1464-4266/3/3/304", + "nodeyear": 2001, + "ref-by-count": 29, + "is_input_DOI": false, + "category_for": "02:0.60;03:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1060726472", + "attributes": { + "title": "Decoherence and thermalization in a simple bosonic system", + "doi": "10.1103/physreve.63.036127", + "nodeyear": 2001, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060822514", + "attributes": { + "title": "Transition from Spherical to Deformed Shapes of Nuclei in the Monte Carlo Shell Model", + "doi": "10.1103/physrevlett.86.1171", + "nodeyear": 2001, + "ref-by-count": 42, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060672803", + "attributes": { + "title": "E2 transitions and quadrupole moments in the E(5) symmetry", + "doi": "10.1103/physrevc.63.034308", + "nodeyear": 2001, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059141143", + "attributes": { + "title": "Mapping a quantum state of light onto atoms", + "doi": "10.1088/1464-4266/3/1/365", + "nodeyear": 2001, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060839535", + "attributes": { + "title": "Bose-Einstein condensation in the alkali gases: Some fundamental concepts", + "doi": "10.1103/revmodphys.73.307", + "nodeyear": 2001, + "ref-by-count": 1518, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1049625672", + "attributes": { + "title": "Quantum Communication between Atomic Ensembles Using Coherent Light", + "doi": "10.1103/physrevlett.85.5643", + "nodeyear": 2000, + "ref-by-count": 255, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1006586634", + "attributes": { + "title": "Squeezing and Entanglement of Atomic Beams", + "doi": "10.1103/physrevlett.85.3991", + "nodeyear": 2000, + "ref-by-count": 183, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060822061", + "attributes": { + "title": "Evidence for a Possible E(5) Symmetry in 134Ba", + "doi": "10.1103/physrevlett.85.3584", + "nodeyear": 2000, + "ref-by-count": 252, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060822060", + "attributes": { + "title": "Dynamic Symmetries at the Critical Point", + "doi": "10.1103/physrevlett.85.3580", + "nodeyear": 2000, + "ref-by-count": 585, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060725247", + "attributes": { + "title": "Quantum phase transitions studied within the interacting boson model", + "doi": "10.1103/physreve.61.6237", + "nodeyear": 2000, + "ref-by-count": 50, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1010029009", + "attributes": { + "title": "Entanglement of Atomic Ensembles by Trapping Correlated Photon States", + "doi": "10.1103/physrevlett.84.4232", + "nodeyear": 2000, + "ref-by-count": 345, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1047063919", + "attributes": { + "title": "Distributed entanglement", + "doi": "10.1103/physreva.61.052306", + "nodeyear": 2000, + "ref-by-count": 1755, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1040444443", + "attributes": { + "title": "Peres-Horodecki Separability Criterion for Continuous Variable Systems", + "doi": "10.1103/physrevlett.84.2726", + "nodeyear": 2000, + "ref-by-count": 1497, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1014398038", + "attributes": { + "title": "Inseparability Criterion for Continuous Variable Systems", + "doi": "10.1103/physrevlett.84.2722", + "nodeyear": 2000, + "ref-by-count": 1522, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1038179687", + "attributes": { + "title": "Quadrupole shape invariants in the interacting boson model", + "doi": "10.1103/physrevc.61.021301", + "nodeyear": 2000, + "ref-by-count": 64, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060672166", + "attributes": { + "title": "Phase/shape coexistence in 152Sm in the geometric collective model", + "doi": "10.1103/physrevc.60.061304", + "nodeyear": 1999, + "ref-by-count": 26, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1098667582", + "attributes": { + "title": "Quantum Chaos", + "doi": "10.1017/cbo9780511524622", + "nodeyear": 1999, + "ref-by-count": 819, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1060672129", + "attributes": { + "title": "B(E2) values and phase coexistence in 152Sm", + "doi": "10.1103/physrevc.60.054312", + "nodeyear": 1999, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060495410", + "attributes": { + "title": "Finite Kerr medium: Macroscopic quantum superposition states and Wigner functions on the sphere", + "doi": "10.1103/physreva.60.1817", + "nodeyear": 1999, + "ref-by-count": 54, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060819856", + "attributes": { + "title": "Spin Squeezed Atoms: A Macroscopic Entangled Ensemble Created by Light", + "doi": "10.1103/physrevlett.83.1319", + "nodeyear": 1999, + "ref-by-count": 419, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1062566030", + "attributes": { + "title": "Superradiant Rayleigh Scattering from a Bose-Einstein Condensate", + "doi": "10.1126/science.285.5427.571", + "nodeyear": 1999, + "ref-by-count": 404, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1008316332", + "attributes": { + "title": "Phase Transitions in Finite Nuclei and the Integer Nucleon Number Problem", + "doi": "10.1103/physrevlett.82.5000", + "nodeyear": 1999, + "ref-by-count": 80, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1049368483", + "attributes": { + "title": "Squeezed few-photon states of the field generated from squeezed atoms", + "doi": "10.1103/physreva.59.3959", + "nodeyear": 1999, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1012911939", + "attributes": { + "title": "Particle-hole excitations in the interacting boson model (IV). The U(5)-SU(3) coupling", + "doi": "10.1016/s0375-9474(99)00124-4", + "nodeyear": 1999, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059185033", + "attributes": { + "title": "Quantum phase transitions", + "doi": "10.1088/2058-7058/12/4/23", + "nodeyear": 1999, + "ref-by-count": 585, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060494991", + "attributes": { + "title": "State-selective Rabi and Ramsey magnetic resonance line shapes", + "doi": "10.1103/physreva.59.r922", + "nodeyear": 1999, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060494914", + "attributes": { + "title": "Coherent oscillations between two weakly coupled Bose-Einstein condensates: Josephson effects, \u03c0 oscillations, and macroscopic quantum self-trapping", + "doi": "10.1103/physreva.59.620", + "nodeyear": 1999, + "ref-by-count": 763, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1029889092", + "attributes": { + "title": "Governing dynamics by squeezing in a system of cold trapped ions", + "doi": "10.1103/physreva.59.736", + "nodeyear": 1999, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1002717445", + "attributes": { + "title": "Nonlinear Josephson-type oscillations of a driven, two-component Bose-Einstein condensate", + "doi": "10.1103/physreva.59.r31", + "nodeyear": 1999, + "ref-by-count": 168, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1050841175", + "attributes": { + "title": "The Dicke model dynamics in a high detuning limit", + "doi": "10.1016/s0375-9601(98)00529-5", + "nodeyear": 1998, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060671138", + "attributes": { + "title": "Phase transition in the pairing-plus-quadrupole model", + "doi": "10.1103/physrevc.58.1539", + "nodeyear": 1998, + "ref-by-count": 41, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060817875", + "attributes": { + "title": "Phase Coexistence in Transitional Nuclei and the Interacting-Boson Model", + "doi": "10.1103/physrevlett.81.1191", + "nodeyear": 1998, + "ref-by-count": 149, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1046879659", + "attributes": { + "title": "Parameter symmetry of the interacting boson model", + "doi": "10.1016/s0370-2693(98)00791-6", + "nodeyear": 1998, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1031686744", + "attributes": { + "title": "Exactly Solvable Model of a Superconducting to Rotational Phase Transition", + "doi": "10.1103/physrevlett.80.4394", + "nodeyear": 1998, + "ref-by-count": 45, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060817288", + "attributes": { + "title": "Quantum Noise of an Atomic Spin Polarization Measurement", + "doi": "10.1103/physrevlett.80.3487", + "nodeyear": 1998, + "ref-by-count": 121, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060671065", + "attributes": { + "title": "The first excited 0+ state in 152Sm", + "doi": "10.1103/physrevc.57.r1553", + "nodeyear": 1998, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1008906037", + "attributes": { + "title": "Entanglement of Formation of an Arbitrary State of Two Qubits", + "doi": "10.1103/physrevlett.80.2245", + "nodeyear": 1998, + "ref-by-count": 5968, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1045736543", + "attributes": { + "title": "Quantum superposition states of Bose-Einstein condensates", + "doi": "10.1103/physreva.57.1208", + "nodeyear": 1998, + "ref-by-count": 346, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1028741585", + "attributes": { + "title": "Dynamical-symmetry content of transitional IBM-1 hamiltonians", + "doi": "10.1016/s0370-2693(97)01533-5", + "nodeyear": 1998, + "ref-by-count": 34, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1028901322", + "attributes": { + "title": "Josephson effect between trapped Bose-Einstein condensates", + "doi": "10.1103/physreva.57.r28", + "nodeyear": 1998, + "ref-by-count": 240, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1047509663", + "attributes": { + "title": "Quantum Coherent Atomic Tunneling between Two Trapped Bose-Einstein Condensates", + "doi": "10.1103/physrevlett.79.4950", + "nodeyear": 1997, + "ref-by-count": 1013, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1030664451", + "attributes": { + "title": "Quantum-Controlled Few-Photon State Generated by Squeezed Atoms", + "doi": "10.1103/physrevlett.79.3869", + "nodeyear": 1997, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060670774", + "attributes": { + "title": "Unified description of collective nuclei with the interacting boson model", + "doi": "10.1103/physrevc.56.829", + "nodeyear": 1997, + "ref-by-count": 33, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1013675126", + "attributes": { + "title": "Particle-hole excitations in the interacting boson model (II): The U(5)-O(6) coupling", + "doi": "10.1016/s0375-9474(97)00196-6", + "nodeyear": 1997, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1047182146", + "attributes": { + "title": "Incompleteness of Representation Theory: Hidden Symmetries and Quantum Nonintegrability", + "doi": "10.1103/physrevlett.79.537", + "nodeyear": 1997, + "ref-by-count": 34, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1044645483", + "attributes": { + "title": "Quantum oscillations between two weakly coupled reservoirs of superfluid 3He", + "doi": "10.1038/41277", + "nodeyear": 1997, + "ref-by-count": 142, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060492307", + "attributes": { + "title": "Optimal frequency measurements with maximally correlated states", + "doi": "10.1103/physreva.54.r4649", + "nodeyear": 1996, + "ref-by-count": 807, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060492164", + "attributes": { + "title": "Generation of atomic-squeezed states in an optical cavity with an injected squeezed vacuum", + "doi": "10.1103/physreva.54.5327", + "nodeyear": 1996, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1038304688", + "attributes": { + "title": "Field Theory of the Quantum Kicked Rotor", + "doi": "10.1103/physrevlett.77.4536", + "nodeyear": 1996, + "ref-by-count": 59, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1014942113", + "attributes": { + "title": "Supersymmetry for systems with unitary disorder: circular ensembles", + "doi": "10.1088/0305-4470/29/22/013", + "nodeyear": 1996, + "ref-by-count": 71, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060670095", + "attributes": { + "title": "Shapes and stability within the interacting boson model: Dynamical symmetries", + "doi": "10.1103/physrevc.54.2374", + "nodeyear": 1996, + "ref-by-count": 79, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019487999", + "attributes": { + "title": "The squeezed component of the atomic collective phase quadrature operators with respect to a two-level atomic coherent state", + "doi": "10.1016/0375-9601(96)00565-8", + "nodeyear": 1996, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1062553940", + "attributes": { + "title": "Universal Quantum Simulators", + "doi": "10.1126/science.273.5278.1073", + "nodeyear": 1996, + "ref-by-count": 1348, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1035008566", + "attributes": { + "title": "Cranking approach to the interacting boson model: the behaviour of the intrinsic state with angular momentum", + "doi": "10.1016/0375-9474(96)00121-2", + "nodeyear": 1996, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1008912168", + "attributes": { + "title": "Particle-hole excitations in the interacting boson model (I) General structure and symmetries", + "doi": "10.1016/0375-9474(96)00019-x", + "nodeyear": 1996, + "ref-by-count": 38, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060812645", + "attributes": { + "title": "Manifestation of Classical Bifurcation in the Spectrum of the Integrable Quantum Dimer", + "doi": "10.1103/physrevlett.76.1607", + "nodeyear": 1996, + "ref-by-count": 80, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1004646989", + "attributes": { + "title": "The IBM extended consistent-Q formalism across the N = 82\u2013126 shell. Empirical trends and anomalies", + "doi": "10.1016/0370-2693(95)01442-x", + "nodeyear": 1996, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:0.60;01:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1060839373", + "attributes": { + "title": "Intrinsic reflection asymmetry in atomic nuclei", + "doi": "10.1103/revmodphys.68.349", + "nodeyear": 1996, + "ref-by-count": 521, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060812343", + "attributes": { + "title": "Atom Optics Realization of the Quantum \u03b4-Kicked Rotor", + "doi": "10.1103/physrevlett.75.4598", + "nodeyear": 1995, + "ref-by-count": 508, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060812205", + "attributes": { + "title": "Bose-Einstein Condensation in a Gas of Sodium Atoms", + "doi": "10.1103/physrevlett.75.3969", + "nodeyear": 1995, + "ref-by-count": 4193, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060811945", + "attributes": { + "title": "Optimal Quantum Measurements for Phase Estimation", + "doi": "10.1103/physrevlett.75.2944", + "nodeyear": 1995, + "ref-by-count": 182, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1029418627", + "attributes": { + "title": "Observation of Bose-Einstein Condensation in a Dilute Atomic Vapor", + "doi": "10.1126/science.269.5221.198", + "nodeyear": 1995, + "ref-by-count": 5362, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1044810744", + "attributes": { + "title": "Description of octupole-deformed nuclei within the interacting boson and interacting boson-fermion models", + "doi": "10.1016/0375-9474(94)00794-n", + "nodeyear": 1995, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060810423", + "attributes": { + "title": "Closed Orbit Bifurcations in Continuum Stark Spectra", + "doi": "10.1103/physrevlett.74.1538", + "nodeyear": 1995, + "ref-by-count": 65, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1041883040", + "attributes": { + "title": "Collective atomic recoil laser (CARL) optical gain without inversion by collective atomic recoil and self-bunching of two-level atoms", + "doi": "10.1016/0168-9002(94)90382-4", + "nodeyear": 1994, + "ref-by-count": 151, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060807702", + "attributes": { + "title": "Universal anharmonic vibrator description of nuclei and critical nuclear phase transitions", + "doi": "10.1103/physrevlett.71.227", + "nodeyear": 1993, + "ref-by-count": 98, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060808347", + "attributes": { + "title": "Diagrammatic approach to Anderson localization in the quantum kicked rotator", + "doi": "10.1103/physrevlett.71.69", + "nodeyear": 1993, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060487206", + "attributes": { + "title": "Quantum projection noise: Population fluctuations in two-level systems", + "doi": "10.1103/physreva.47.3554", + "nodeyear": 1993, + "ref-by-count": 402, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1051363735", + "attributes": { + "title": "Chaotic properties of the interacting boson model", + "doi": "10.1016/0375-9474(93)90237-r", + "nodeyear": 1993, + "ref-by-count": 62, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1007846341", + "attributes": { + "title": "Variety of shapes in the mercury and lead isotopes", + "doi": "10.1016/0370-2693(93)90107-s", + "nodeyear": 1993, + "ref-by-count": 140, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060805434", + "attributes": { + "title": "Symmetry breaking and localization in quantum chaotic systems", + "doi": "10.1103/physrevlett.69.217", + "nodeyear": 1992, + "ref-by-count": 48, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060839251", + "attributes": { + "title": "Consistent interpretations of quantum mechanics", + "doi": "10.1103/revmodphys.64.339", + "nodeyear": 1992, + "ref-by-count": 450, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1039153009", + "attributes": { + "title": "Static multipole deformations in nuclei", + "doi": "10.1016/0146-6410(92)90029-2", + "nodeyear": 1992, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060803970", + "attributes": { + "title": "Chaotic properties of the interacting-boson model: A discovery of a new regular region", + "doi": "10.1103/physrevlett.67.816", + "nodeyear": 1991, + "ref-by-count": 83, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060483159", + "attributes": { + "title": "Transitional regions of finite Fermi systems and quantum chaos", + "doi": "10.1103/physreva.43.4159", + "nodeyear": 1991, + "ref-by-count": 59, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060665563", + "attributes": { + "title": "Angular momentum projection in geometric interpretation of the interacting boson model", + "doi": "10.1103/physrevc.42.2023", + "nodeyear": 1990, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060665491", + "attributes": { + "title": "Model of a superconducting phase transition", + "doi": "10.1103/physrevc.42.1422", + "nodeyear": 1990, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060665292", + "attributes": { + "title": "Systematics of nuclear ground state properties in Sr78\u2013100 by laser spectroscopy", + "doi": "10.1103/physrevc.41.2883", + "nodeyear": 1990, + "ref-by-count": 135, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060480033", + "attributes": { + "title": "Quantum dynamics of the nonlinear rotator and the effects of continual spin measurement", + "doi": "10.1103/physreva.40.2417", + "nodeyear": 1989, + "ref-by-count": 147, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1062928725", + "attributes": { + "title": "MICROSCOPIC SELF-CONSISTENT AND COLLECTIVE MODEL DESCRIPTION OF LOW-ENERGY NUCLEAR STRUCTURE", + "doi": "10.1142/s0217751x89000844", + "nodeyear": 1989, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060663748", + "attributes": { + "title": "Geometrical structure and critical phenomena in the fermion dynamical symmetry model: Sp(6)", + "doi": "10.1103/physrevc.38.1475", + "nodeyear": 1988, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1013762487", + "attributes": { + "title": "Principal squeezing of vacuum fluctuations", + "doi": "10.1016/0030-4018(88)90322-7", + "nodeyear": 1988, + "ref-by-count": 90, + "is_input_DOI": false, + "category_for": "09:0.33;10:0.33;02:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1001844408", + "attributes": { + "title": "Octupole vibrations in nuclei", + "doi": "10.1088/0034-4885/51/4/002", + "nodeyear": 1988, + "ref-by-count": 76, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060663352", + "attributes": { + "title": "Geometrical structure and critical phenomena in the fermion dynamical symmetry model: SO(8)", + "doi": "10.1103/physrevc.37.1281", + "nodeyear": 1988, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1058105068", + "attributes": { + "title": "Dynamic structure and embedded representation in physics: The group theory of the adiabatic approximation", + "doi": "10.1063/1.528049", + "nodeyear": 1988, + "ref-by-count": 57, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1016574452", + "attributes": { + "title": "1N expansion in the interacting boson model", + "doi": "10.1016/0003-4916(88)90117-0", + "nodeyear": 1988, + "ref-by-count": 63, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1004661064", + "attributes": { + "title": "Interacting boson model of collective octupole states (I). The rotational limit", + "doi": "10.1016/0375-9474(87)90220-x", + "nodeyear": 1987, + "ref-by-count": 99, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1098678954", + "attributes": { + "title": "The Interacting Boson Model", + "doi": "10.1017/cbo9780511895517", + "nodeyear": 1987, + "ref-by-count": 1832, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1060662710", + "attributes": { + "title": "Deriving an interacting boson model from the fermion SO(8) model", + "doi": "10.1103/physrevc.35.1517", + "nodeyear": 1987, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060795354", + "attributes": { + "title": "Valence p-n interactions and the development of collectivity in heavy nuclei", + "doi": "10.1103/physrevlett.58.658", + "nodeyear": 1987, + "ref-by-count": 162, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060794360", + "attributes": { + "title": "Oscillatory exchange of atoms between traps containing Bose condensates", + "doi": "10.1103/physrevlett.57.3164", + "nodeyear": 1986, + "ref-by-count": 199, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060475224", + "attributes": { + "title": "Number-phase minimum-uncertainty state with reduced number uncertainty in a Kerr nonlinear interferometer", + "doi": "10.1103/physreva.34.3974", + "nodeyear": 1986, + "ref-by-count": 339, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1025880473", + "attributes": { + "title": "A soluble \u03b3-unstable hamiltonian", + "doi": "10.1016/0370-2693(86)90362-x", + "nodeyear": 1986, + "ref-by-count": 66, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1002683374", + "attributes": { + "title": "The moment of inertia in the interacting boson model", + "doi": "10.1016/0375-9474(86)90505-1", + "nodeyear": 1986, + "ref-by-count": 34, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1005219864", + "attributes": { + "title": "Generalized Coherent States and Their Applications", + "doi": "10.1007/978-3-642-61629-7", + "nodeyear": 1986, + "ref-by-count": 1882, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1036861449", + "attributes": { + "title": "Validity of the self-consistent cranking approximation in the SU(3)-U(5) phase transition", + "doi": "10.1016/0370-2693(85)90906-2", + "nodeyear": 1985, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:0.60;01:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1046892149", + "attributes": { + "title": "Quartic anharmonicity and angular momentum effects in even-even spherical nuclei", + "doi": "10.1016/0375-9474(85)90428-2", + "nodeyear": 1985, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1018590889", + "attributes": { + "title": "A shell-model interpretation of intruder states and the onset of deformation in even-even nuclei", + "doi": "10.1016/0370-2693(85)91575-8", + "nodeyear": 1985, + "ref-by-count": 121, + "is_input_DOI": false, + "category_for": "02:0.60;01:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1060661648", + "attributes": { + "title": "Phase ambiguities in the O(6) limit of the interacting boson model", + "doi": "10.1103/physrevc.31.671", + "nodeyear": 1985, + "ref-by-count": 33, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060790516", + "attributes": { + "title": "Bound-State Eigenfunctions of Classically Chaotic Hamiltonian Systems: Scars of Periodic Orbits", + "doi": "10.1103/physrevlett.53.1515", + "nodeyear": 1984, + "ref-by-count": 1130, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1038414711", + "attributes": { + "title": "Calculations away from SU(3) symmetry by cranking the interacting boson model", + "doi": "10.1016/0370-2693(84)91463-1", + "nodeyear": 1984, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1027544400", + "attributes": { + "title": "Transition to deformed shapes as a nuclear Jahn-Teller effect", + "doi": "10.1016/0375-9474(84)90437-8", + "nodeyear": 1984, + "ref-by-count": 93, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060534420", + "attributes": { + "title": "Localization in a d-dimensional incommensurate structure", + "doi": "10.1103/physrevb.29.4272", + "nodeyear": 1984, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1047967799", + "attributes": { + "title": "Cranked Hartree approximation for systems with many interacting bosons", + "doi": "10.1016/0370-2693(83)91024-9", + "nodeyear": 1983, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060659837", + "attributes": { + "title": "Muonic x-ray measurement of the monopole and quadrupole charge parameters of Gd154-158,160", + "doi": "10.1103/physrevc.27.1772", + "nodeyear": 1983, + "ref-by-count": 33, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060788070", + "attributes": { + "title": "Localization in an Incommensurate Potential: An Exactly Solvable Model", + "doi": "10.1103/physrevlett.49.833", + "nodeyear": 1982, + "ref-by-count": 215, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1038336282", + "attributes": { + "title": "Simulating physics with computers", + "doi": "10.1007/bf02650179", + "nodeyear": 1982, + "ref-by-count": 3692, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1016849900", + "attributes": { + "title": "Quantitative description of configuration mixing in the interacting boson model", + "doi": "10.1016/0375-9474(82)90061-6", + "nodeyear": 1982, + "ref-by-count": 122, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1040675567", + "attributes": { + "title": "Catastrophe theory in physics", + "doi": "10.1088/0034-4885/45/2/002", + "nodeyear": 1982, + "ref-by-count": 56, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060659368", + "attributes": { + "title": "Interpretation of the A\u2248100 transitional region in the framework of the interacting boson model", + "doi": "10.1103/physrevc.25.650", + "nodeyear": 1982, + "ref-by-count": 119, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060659366", + "attributes": { + "title": "Phenomenological analysis of the interacting boson model", + "doi": "10.1103/physrevc.25.614", + "nodeyear": 1982, + "ref-by-count": 61, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1020356915", + "attributes": { + "title": "Enhanced sensitivity of a gravitational wave detector", + "doi": "10.1016/0375-9601(81)90238-3", + "nodeyear": 1981, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060688638", + "attributes": { + "title": "Quantum-mechanical noise in an interferometer", + "doi": "10.1103/physrevd.23.1693", + "nodeyear": 1981, + "ref-by-count": 2094, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1034371240", + "attributes": { + "title": "Configuration mixing in the interacting boson model", + "doi": "10.1016/0370-2693(81)90321-x", + "nodeyear": 1981, + "ref-by-count": 112, + "is_input_DOI": false, + "category_for": "02:0.60;01:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1060658394", + "attributes": { + "title": "Phase transitions and the geometric properties of the interacting boson model", + "doi": "10.1103/physrevc.23.1254", + "nodeyear": 1981, + "ref-by-count": 161, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1003831851", + "attributes": { + "title": "On shapes and shape phase transitions in the interacting boson model", + "doi": "10.1016/0375-9474(80)90492-3", + "nodeyear": 1980, + "ref-by-count": 149, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060784903", + "attributes": { + "title": "Relationship between the Bohr Collective Hamiltonian and the Interacting-Boson Model", + "doi": "10.1103/physrevlett.44.1744", + "nodeyear": 1980, + "ref-by-count": 349, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1058996814", + "attributes": { + "title": "Features of Nuclear Deformations Produced by the Alignment of Individual Particles or Pairs", + "doi": "10.1088/0031-8949/22/5/008", + "nodeyear": 1980, + "ref-by-count": 182, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060657707", + "attributes": { + "title": "Unified shell-model description of nuclear deformation", + "doi": "10.1103/physrevc.20.820", + "nodeyear": 1979, + "ref-by-count": 253, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1030160495", + "attributes": { + "title": "Interacting boson model of collective nuclear states III. The transition from SU(5) to SU(3)", + "doi": "10.1016/0003-4916(78)90159-8", + "nodeyear": 1978, + "ref-by-count": 411, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1023527379", + "attributes": { + "title": "Boson expansions and quantization of time-dependent self-consistent fields (II). Relation between finite and infinite boson expansions", + "doi": "10.1016/0375-9474(78)90490-6", + "nodeyear": 1978, + "ref-by-count": 44, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1047765215", + "attributes": { + "title": "Interacting boson model of collective nuclear states II. The rotational limit", + "doi": "10.1016/0003-4916(78)90228-2", + "nodeyear": 1978, + "ref-by-count": 1038, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1058100372", + "attributes": { + "title": "Group theory of the collective model of the nucleus", + "doi": "10.1063/1.523352", + "nodeyear": 1977, + "ref-by-count": 110, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1030191390", + "attributes": { + "title": "Collective nuclear states as symmetric couplings of proton and neutron excitations", + "doi": "10.1016/0370-2693(77)90860-7", + "nodeyear": 1977, + "ref-by-count": 625, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060521318", + "attributes": { + "title": "Quantum critical phenomena", + "doi": "10.1103/physrevb.14.1165", + "nodeyear": 1976, + "ref-by-count": 1679, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1008049063", + "attributes": { + "title": "Interacting boson model of collective states I. The vibrational limit", + "doi": "10.1016/0003-4916(76)90097-x", + "nodeyear": 1976, + "ref-by-count": 1354, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060779406", + "attributes": { + "title": "Collective Nuclear States as Representations of a SU(6) Group", + "doi": "10.1103/physrevlett.35.1069", + "nodeyear": 1975, + "ref-by-count": 851, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060465244", + "attributes": { + "title": "Classical-quantum correspondence for multilevel systems", + "doi": "10.1103/physreva.12.1019", + "nodeyear": 1975, + "ref-by-count": 133, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1006517975", + "attributes": { + "title": "Collective Hamiltonian derived from the pairing-plus-quadrupole model Modification and application to the transitional nuclei, 150, 152Sm\u2020\u2020Work supported in part by US National Science Foundation (contract no GP-34634) and by NORDITA", + "doi": "10.1016/0375-9474(74)90518-1", + "nodeyear": 1974, + "ref-by-count": 127, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1050463690", + "attributes": { + "title": "An algebraic treatment of the nuclear quadrupole degree of freedom", + "doi": "10.1016/0375-9474(74)90165-1", + "nodeyear": 1974, + "ref-by-count": 221, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1022248405", + "attributes": { + "title": "Geometry of symmetrized states", + "doi": "10.1016/0003-4916(72)90147-9", + "nodeyear": 1972, + "ref-by-count": 260, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060774884", + "attributes": { + "title": "Strongly Excited 0+ States Observed in (p, t) Reactions on Gadolinium Nuclei", + "doi": "10.1103/physrevlett.27.1235", + "nodeyear": 1971, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060773820", + "attributes": { + "title": "Can a Solid Be \"Superfluid\"?", + "doi": "10.1103/physrevlett.25.1543", + "nodeyear": 1970, + "ref-by-count": 560, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060467976", + "attributes": { + "title": "Speculations on Bose-Einstein Condensation and Quantum Crystals", + "doi": "10.1103/physreva.2.256", + "nodeyear": 1970, + "ref-by-count": 469, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1014048276", + "attributes": { + "title": "Low-lying octupole states of the doubly even deformed nuclei with 152 \u2266 A \u2266 190", + "doi": "10.1016/0375-9474(70)90309-x", + "nodeyear": 1970, + "ref-by-count": 225, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1010219741", + "attributes": { + "title": "A new treatment of the collective nuclear hamiltonian", + "doi": "10.1016/0370-2693(69)90469-9", + "nodeyear": 1969, + "ref-by-count": 104, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1044085245", + "attributes": { + "title": "On irreducible tensors of O5+", + "doi": "10.1016/0375-9474(68)90317-5", + "nodeyear": 1968, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060433897", + "attributes": { + "title": "(p,t) Reaction on the Isotopes of Sm and Nd, N=88 and 90", + "doi": "10.1103/physrev.151.1000", + "nodeyear": 1966, + "ref-by-count": 61, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1006382259", + "attributes": { + "title": "The (t, p) reaction with the even isotopes of Sm", + "doi": "10.1016/0029-5582(66)90297-5", + "nodeyear": 1966, + "ref-by-count": 187, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1061435768", + "attributes": { + "title": "Comparison of quantum and semiclassical radiation theories with application to the beam maser", + "doi": "10.1109/proc.1963.1664", + "nodeyear": 1963, + "ref-by-count": 3927, + "is_input_DOI": false, + "category_for": "09:0.60;08:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1050017917", + "attributes": { + "title": "Possible new effects in superconductive tunnelling", + "doi": "10.1016/0031-9163(62)91369-0", + "nodeyear": 1962, + "ref-by-count": 2878, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1003288694", + "attributes": { + "title": "Vibrational states of nuclei in the random phase approximation", + "doi": "10.1016/0029-5582(61)90364-9", + "nodeyear": 1961, + "ref-by-count": 539, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1000009137", + "attributes": { + "title": "Stability conditions and nuclear rotations in the Hartree-Fock theory", + "doi": "10.1016/0029-5582(60)90048-1", + "nodeyear": 1960, + "ref-by-count": 690, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060460944", + "attributes": { + "title": "Isotope Shift Anomalies and Nuclear Structure", + "doi": "10.1103/physrev.91.1488", + "nodeyear": 1953, + "ref-by-count": 81, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060459525", + "attributes": { + "title": "Statistical Theory of Equations of State and Phase Transitions. I. Theory of Condensation", + "doi": "10.1103/physrev.87.404", + "nodeyear": 1952, + "ref-by-count": 1506, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1050237123", + "attributes": { + "title": "Modellm\u00e4\u00dfige Deutung der ausgezeichneten Nukleonenzahlen im Kernbau", + "doi": "10.1007/bf01333077", + "nodeyear": 1950, + "ref-by-count": 145, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1000173117", + "attributes": { + "title": "Stability of polyatomic molecules in degenerate electronic states - I\u2014Orbital degeneracy", + "doi": "10.1098/rspa.1937.0142", + "nodeyear": 1937, + "ref-by-count": 2648, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1004415602", + "attributes": { + "title": "Eigenfunctions for calculating electronic vibrational intensities", + "doi": "10.1098/rspa.1932.0045", + "nodeyear": 1932, + "ref-by-count": 96, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1027226374", + "attributes": { + "title": "Beitrag zur Theorie des Ferromagnetismus", + "doi": "10.1007/bf02980577", + "nodeyear": 1925, + "ref-by-count": 2265, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1060677183", + "attributes": { + "title": "High-precision Penning-trap mass measurements of heavy xenon isotopes for nuclear structure studies", + "doi": "10.1103/physrevc.80.044323", + "nodeyear": 2009, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060677128", + "attributes": { + "title": "X(5)* model and the N=90 nuclei", + "doi": "10.1103/physrevc.80.034308", + "nodeyear": 2009, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060755819", + "attributes": { + "title": "New Features of Shape Coexistence in Sm152", + "doi": "10.1103/physrevlett.103.062501", + "nodeyear": 2009, + "ref-by-count": 50, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060677048", + "attributes": { + "title": "Transition from \u03b3-rigid to \u03b3-soft dynamics in the interacting boson model: Quasicriticality and quasidynamical symmetry", + "doi": "10.1103/physrevc.80.014319", + "nodeyear": 2009, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060677032", + "attributes": { + "title": "Unified framework for understanding pair transfer between collective states in atomic nuclei", + "doi": "10.1103/physrevc.80.011303", + "nodeyear": 2009, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1011163444", + "attributes": { + "title": "Quantum chaos in the nuclear collective model. II. Peres lattices", + "doi": "10.1103/physreve.79.066201", + "nodeyear": 2009, + "ref-by-count": 26, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1040915357", + "attributes": { + "title": "Direct Detection of Abortive RNA Transcripts in Vivo", + "doi": "10.1126/science.1169237", + "nodeyear": 2009, + "ref-by-count": 86, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1021427310", + "attributes": { + "title": "Scanning Tunneling Spectroscopy of Graphene on Graphite", + "doi": "10.1103/physrevlett.102.176804", + "nodeyear": 2009, + "ref-by-count": 396, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060755003", + "attributes": { + "title": "Discovery of Rn229 and the Structure of the Heaviest Rn and Ra Isotopes from Penning-Trap Mass Measurements", + "doi": "10.1103/physrevlett.102.112501", + "nodeyear": 2009, + "ref-by-count": 57, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1033456373", + "attributes": { + "title": "Criticality in the configuration-mixed interacting boson model: (2) Q\u02c6(\u03c71)Q\u02c6(\u03c71)\u2013Q\u02c6(\u03c72)Q\u02c6(\u03c72) mixing", + "doi": "10.1016/j.nuclphysa.2009.01.002", + "nodeyear": 2009, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1000374332", + "attributes": { + "title": "Decoherence, entanglement and irreversibility in quantum dynamical systems with few degrees of freedom", + "doi": "10.1080/00018730902831009", + "nodeyear": 2009, + "ref-by-count": 131, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1050408744", + "attributes": { + "title": "The electronic properties of graphene", + "doi": "10.1103/revmodphys.81.109", + "nodeyear": 2009, + "ref-by-count": 17809, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1025036962", + "attributes": { + "title": "Random matrices and chaos in nuclear physics: Nuclear structure", + "doi": "10.1103/revmodphys.81.539", + "nodeyear": 2009, + "ref-by-count": 224, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1040491531", + "attributes": { + "title": "Large Area, Few-Layer Graphene Films on Arbitrary Substrates by Chemical Vapor Deposition", + "doi": "10.1021/nl801827v", + "nodeyear": 2008, + "ref-by-count": 4724, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1036884583", + "attributes": { + "title": "Kohn-Luttinger superconductivity in graphene", + "doi": "10.1103/physrevb.78.205431", + "nodeyear": 2008, + "ref-by-count": 114, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1031460804", + "attributes": { + "title": "Entanglement and the generation of random states in the quantum chaotic dynamics of kicked coupled tops", + "doi": "10.1103/physreve.78.046211", + "nodeyear": 2008, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1029576577", + "attributes": { + "title": "Chaos, entanglement, and decoherence in the quantum kicked top", + "doi": "10.1103/physreva.78.042318", + "nodeyear": 2008, + "ref-by-count": 45, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060754142", + "attributes": { + "title": "Mean-Field Derivation of the Interacting Boson Model Hamiltonian and Exotic Nuclei", + "doi": "10.1103/physrevlett.101.142501", + "nodeyear": 2008, + "ref-by-count": 82, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060676303", + "attributes": { + "title": "Evolution of nuclear shapes in medium mass isotopes from a microscopic perspective", + "doi": "10.1103/physrevc.78.034314", + "nodeyear": 2008, + "ref-by-count": 62, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060676255", + "attributes": { + "title": "Shape coexistence and phase transitions in the platinum isotopes", + "doi": "10.1103/physrevc.78.024303", + "nodeyear": 2008, + "ref-by-count": 38, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1007530657", + "attributes": { + "title": "Quantum control of the hyperfine-coupled electron and nuclear spins in alkali-metal atoms", + "doi": "10.1103/physreva.78.023404", + "nodeyear": 2008, + "ref-by-count": 29, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1040606030", + "attributes": { + "title": "Approaching ballistic transport in suspended graphene", + "doi": "10.1038/nnano.2008.199", + "nodeyear": 2008, + "ref-by-count": 2437, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060676176", + "attributes": { + "title": "Spin dependence of critical point behavior for first and second order phase transitions in nuclei", + "doi": "10.1103/physrevc.77.061302", + "nodeyear": 2008, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1036352091", + "attributes": { + "title": "Search for intrinsic collective excitations in Sm152", + "doi": "10.1103/physrevc.77.061301", + "nodeyear": 2008, + "ref-by-count": 48, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1034642959", + "attributes": { + "title": "Ultrahigh electron mobility in suspended graphene", + "doi": "10.1016/j.ssc.2008.02.024", + "nodeyear": 2008, + "ref-by-count": 5837, + "is_input_DOI": false, + "category_for": "10:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1011664403", + "attributes": { + "title": "Multiparticle entanglement in the Lipkin-Meshkov-Glick model", + "doi": "10.1103/physreva.77.052105", + "nodeyear": 2008, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1047220917", + "attributes": { + "title": "A beyond mean field analysis of the shape transition in the Neodymium isotopes", + "doi": "10.1016/j.physletb.2008.03.061", + "nodeyear": 2008, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1050919469", + "attributes": { + "title": "Description of nuclear octupole and quadrupole deformation close to axial symmetry: Critical-point behavior of Ra224 and Th224", + "doi": "10.1103/physrevc.77.024320", + "nodeyear": 2008, + "ref-by-count": 33, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1025719832", + "attributes": { + "title": "Decoherence induced by a dynamic spin environment: The universal regime", + "doi": "10.1103/physreva.77.022317", + "nodeyear": 2008, + "ref-by-count": 34, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1026720084", + "attributes": { + "title": "Decoherence in a two-level system coupled to a fermion environment with phase transitions", + "doi": "10.1016/j.physleta.2007.10.001", + "nodeyear": 2008, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060676000", + "attributes": { + "title": "First experimental test of X(5) critical-point symmetry in the A~130 mass region: Low-spin states and the collective structure of Ce130", + "doi": "10.1103/physrevc.77.014307", + "nodeyear": 2008, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060835107", + "attributes": { + "title": "Enhanced Decoherence in the Vicinity of a Phase Transition", + "doi": "10.1103/physrevlett.99.267202", + "nodeyear": 2007, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1036551131", + "attributes": { + "title": "Equations of motion for a spectrum-generating algebra: Lipkin\u2013Meshkov\u2013Glick model", + "doi": "10.1088/1751-8113/41/2/025208", + "nodeyear": 2007, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1021984958", + "attributes": { + "title": "Graphene Bilayer with a Twist: Electronic Structure", + "doi": "10.1103/physrevlett.99.256802", + "nodeyear": 2007, + "ref-by-count": 943, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1025059126", + "attributes": { + "title": "Biased Bilayer Graphene: Semiconductor with a Gap Tunable by the Electric Field Effect", + "doi": "10.1103/physrevlett.99.216802", + "nodeyear": 2007, + "ref-by-count": 1533, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060675924", + "attributes": { + "title": "Nuclear shape-phase diagrams", + "doi": "10.1103/physrevc.76.054304", + "nodeyear": 2007, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060622841", + "attributes": { + "title": "Time evolution and decoherence of a spin- 12 particle coupled to a spin bath in thermal equilibrium", + "doi": "10.1103/physrevb.76.174306", + "nodeyear": 2007, + "ref-by-count": 40, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1028482838", + "attributes": { + "title": "Coulomb Analogy for Non-Hermitian Degeneracies near Quantum Phase Transitions", + "doi": "10.1103/physrevlett.99.100601", + "nodeyear": 2007, + "ref-by-count": 62, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060675760", + "attributes": { + "title": "Distinguishing a first order from a second order nuclear shape phase transition in the interacting boson model", + "doi": "10.1103/physrevc.76.011305", + "nodeyear": 2007, + "ref-by-count": 38, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1051523502", + "attributes": { + "title": "Quantum critical dynamics of a qubit coupled to an isotropic Lipkin-Meshkov-Glick bath", + "doi": "10.1103/physreva.76.012104", + "nodeyear": 2007, + "ref-by-count": 29, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1015971387", + "attributes": { + "title": "Chaos and complexity of quantum motion", + "doi": "10.1088/1751-8113/40/28/s02", + "nodeyear": 2007, + "ref-by-count": 46, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060675734", + "attributes": { + "title": "Classical and quantum properties of the semiregular arc inside the Casten triangle", + "doi": "10.1103/physrevc.75.064318", + "nodeyear": 2007, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1016958841", + "attributes": { + "title": "Decoherence induced by interacting quantum spin baths", + "doi": "10.1103/physreva.75.032333", + "nodeyear": 2007, + "ref-by-count": 163, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1007119461", + "attributes": { + "title": "Universal decoherence induced by an environmental quantum phase transition", + "doi": "10.1103/physreva.75.032337", + "nodeyear": 2007, + "ref-by-count": 79, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1052791836", + "attributes": { + "title": "The rise of graphene", + "doi": "10.1038/nmat1849", + "nodeyear": 2007, + "ref-by-count": 30719, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1031717969", + "attributes": { + "title": "Critical-Point Symmetries in Boson-Fermion Systems: The Case of Shape Transitions in Odd Nuclei in a Multiorbit Model", + "doi": "10.1103/physrevlett.98.052501", + "nodeyear": 2007, + "ref-by-count": 46, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1045387337", + "attributes": { + "title": "Loschmidt echo and Berry phase of a quantum system coupled to an XY spin chain: Proximity to a quantum phase transition", + "doi": "10.1103/physreva.75.012102", + "nodeyear": 2007, + "ref-by-count": 75, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1017238694", + "attributes": { + "title": "Unconventional quantum phase transition in the finite-size Lipkin\u2013Meshkov\u2013Glick model", + "doi": "10.1088/1367-2630/8/12/297", + "nodeyear": 2006, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1029635336", + "attributes": { + "title": "Entanglement Entropy beyond the Free Case", + "doi": "10.1103/physrevlett.97.220402", + "nodeyear": 2006, + "ref-by-count": 77, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060618645", + "attributes": { + "title": "Classical and quantum phase transitions in the Lipkin-Meshkov-Glick model", + "doi": "10.1103/physrevb.74.104118", + "nodeyear": 2006, + "ref-by-count": 61, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060675402", + "attributes": { + "title": "One-particle spectroscopic intensities as a signature of shape phase transition: The \u03b3-unstable case", + "doi": "10.1103/physrevc.74.027301", + "nodeyear": 2006, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1011784856", + "attributes": { + "title": "On the thermodynamic limit of the Lipkin model", + "doi": "10.1088/0305-4470/39/32/s10", + "nodeyear": 2006, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1057848388", + "attributes": { + "title": "Study of the validity of the phase-integral connection formula for potential barriers of arbitrary thickness", + "doi": "10.1063/1.2218979", + "nodeyear": 2006, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060675321", + "attributes": { + "title": "Phase transitions in configuration mixed models", + "doi": "10.1103/physrevc.73.061302", + "nodeyear": 2006, + "ref-by-count": 29, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060675290", + "attributes": { + "title": "First test of the E(5/4) Bose-Fermi symmetry: The structure of Ba135", + "doi": "10.1103/physrevc.73.051301", + "nodeyear": 2006, + "ref-by-count": 34, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042764696", + "attributes": { + "title": "Decay of Loschmidt Echo Enhanced by Quantum Criticality", + "doi": "10.1103/physrevlett.96.140604", + "nodeyear": 2006, + "ref-by-count": 520, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1011254661", + "attributes": { + "title": "Tensor polarizability and dispersive quantum measurement of multilevel atoms", + "doi": "10.1103/physreva.73.042112", + "nodeyear": 2006, + "ref-by-count": 65, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060502016", + "attributes": { + "title": "Control of inhomogeneous quantum ensembles", + "doi": "10.1103/physreva.73.030302", + "nodeyear": 2006, + "ref-by-count": 146, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1018025921", + "attributes": { + "title": "Shape transitions far from stability: The nucleus 58Cr", + "doi": "10.1016/j.physletb.2005.12.047", + "nodeyear": 2006, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1025311961", + "attributes": { + "title": "Lie Algebras and Applications", + "doi": "10.1007/3-540-36239-8", + "nodeyear": 2006, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1011010598", + "attributes": { + "title": "Characterization of Complex Quantum Dynamics with a Scalable NMR Information Processor", + "doi": "10.1103/physrevlett.95.250502", + "nodeyear": 2005, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042077732", + "attributes": { + "title": "Phase transitions in the interacting boson fermion model: The \u03b3-unstable case", + "doi": "10.1103/physrevc.72.061302", + "nodeyear": 2005, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1030368423", + "attributes": { + "title": "Continuous unitary transformations in two-level boson systems", + "doi": "10.1103/physrevc.72.064332", + "nodeyear": 2005, + "ref-by-count": 38, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1003660203", + "attributes": { + "title": "A review and outlook for an anomaly of scanning tunnelling microscopy (STM): superlattices on graphite", + "doi": "10.1088/0022-3727/38/21/r01", + "nodeyear": 2005, + "ref-by-count": 135, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1013665499", + "attributes": { + "title": "Test of the critical point symmetry X(5) in the mass A = 180 region", + "doi": "10.1088/0954-3899/31/10/008", + "nodeyear": 2005, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1000398384", + "attributes": { + "title": "\u03b24 potential at the U(5)\u2013O(6) critical point of the interacting boson model", + "doi": "10.1103/physrevc.72.037301", + "nodeyear": 2005, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1039984053", + "attributes": { + "title": "Quantum phase transitions in the U(5)\u2013O(6) large-N limit", + "doi": "10.1088/0954-3899/31/9/006", + "nodeyear": 2005, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060501368", + "attributes": { + "title": "Many-particle entanglement in the gaped antiferromagnetic Lipkin model", + "doi": "10.1103/physreva.72.022326", + "nodeyear": 2005, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1030114288", + "attributes": { + "title": "Quantum State Reconstruction via Continuous Measurement", + "doi": "10.1103/physrevlett.95.030402", + "nodeyear": 2005, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1043779481", + "attributes": { + "title": "Finite-size scaling exponents in the interacting boson model", + "doi": "10.1103/physrevc.72.011301", + "nodeyear": 2005, + "ref-by-count": 31, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1005494539", + "attributes": { + "title": "Elusive magic numbers", + "doi": "10.1038/435897a", + "nodeyear": 2005, + "ref-by-count": 34, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1053319957", + "attributes": { + "title": "STS Observations of Landau Levels at Graphite Surfaces", + "doi": "10.1103/physrevlett.94.226403", + "nodeyear": 2005, + "ref-by-count": 122, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060674905", + "attributes": { + "title": "Simple interpretation of shape evolution in Pt isotopes without intruder states", + "doi": "10.1103/physrevc.71.061301", + "nodeyear": 2005, + "ref-by-count": 57, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1051277230", + "attributes": { + "title": "Finite-size scaling exponents and entanglement in the two-level BCS model", + "doi": "10.1103/physreva.71.060304", + "nodeyear": 2005, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1040003395", + "attributes": { + "title": "Entanglement entropy in the Lipkin-Meshkov-Glick model", + "doi": "10.1103/physreva.71.064101", + "nodeyear": 2005, + "ref-by-count": 131, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060830365", + "attributes": { + "title": "Suppression of Spin Projection Noise in Broadband Atomic Magnetometry", + "doi": "10.1103/physrevlett.94.203002", + "nodeyear": 2005, + "ref-by-count": 46, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1018540897", + "attributes": { + "title": "Criteria for exact qudit universality", + "doi": "10.1103/physreva.71.052318", + "nodeyear": 2005, + "ref-by-count": 48, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1037993747", + "attributes": { + "title": "The use of CAAARS (Computer Aided Assignment of Asymmetric Rotor Spectra) in the analysis of rotational spectra", + "doi": "10.1016/j.molstruc.2005.01.054", + "nodeyear": 2005, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060674827", + "attributes": { + "title": "Identification of a pairing isomeric band in Sm152", + "doi": "10.1103/physrevc.71.041303", + "nodeyear": 2005, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059079470", + "attributes": { + "title": "The large N behaviour of the Lipkin model and exceptional points", + "doi": "10.1088/0305-4470/38/9/002", + "nodeyear": 2005, + "ref-by-count": 40, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1013466532", + "attributes": { + "title": "Exactly-solvable models derived from a generalized Gaudin algebra", + "doi": "10.1016/j.nuclphysb.2004.11.008", + "nodeyear": 2005, + "ref-by-count": 138, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1051459978", + "attributes": { + "title": "Thermodynamic analogy for quantum phase transitions at zero temperature", + "doi": "10.1103/physrevc.71.011304", + "nodeyear": 2005, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1035159109", + "attributes": { + "title": "How generic scale invariance influences quantum and classical phase transitions", + "doi": "10.1103/revmodphys.77.579", + "nodeyear": 2005, + "ref-by-count": 218, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1031172370", + "attributes": { + "title": "The shell model as a unified view of nuclear structure", + "doi": "10.1103/revmodphys.77.427", + "nodeyear": 2005, + "ref-by-count": 842, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1036176655", + "attributes": { + "title": "Non-perturbative flow equations from continuous unitary transformations", + "doi": "10.1088/0305-4470/38/1/015", + "nodeyear": 2004, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1047948630", + "attributes": { + "title": "Description of nuclear octupole and quadrupole deformation close to the axial symmetry and phase transitions in the octupole mode", + "doi": "10.1103/physrevc.70.064319", + "nodeyear": 2004, + "ref-by-count": 38, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019645844", + "attributes": { + "title": "Finite-Size Scaling Exponents of the Lipkin-Meshkov-Glick Model", + "doi": "10.1103/physrevlett.93.237204", + "nodeyear": 2004, + "ref-by-count": 181, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1005427122", + "attributes": { + "title": "Entanglement dynamics in the Lipkin-Meshkov-Glick model", + "doi": "10.1103/physreva.70.062304", + "nodeyear": 2004, + "ref-by-count": 110, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1050860986", + "attributes": { + "title": "The millimeter- and submillimeter-wave spectrum of the trans\u2013gauche conformer of diethyl ether", + "doi": "10.1016/j.jms.2004.06.011", + "nodeyear": 2004, + "ref-by-count": 75, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1040632454", + "attributes": { + "title": "Phase Diagram of the Proton-Neutron Interacting Boson Model", + "doi": "10.1103/physrevlett.93.212501", + "nodeyear": 2004, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1044880480", + "attributes": { + "title": "Phase transitions and quasidynamical symmetry in nuclear collective models: I. The U(5) to O(6) phase transition in the IBM", + "doi": "10.1016/j.nuclphysa.2004.09.007", + "nodeyear": 2004, + "ref-by-count": 95, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019008412", + "attributes": { + "title": "Electric Field Effect in Atomically Thin Carbon Films", + "doi": "10.1126/science.1102896", + "nodeyear": 2004, + "ref-by-count": 46759, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1039417623", + "attributes": { + "title": "Quantum Information Processing with Trapped Neutral Atoms", + "doi": "10.1007/s11128-004-9418-2", + "nodeyear": 2004, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1010220572", + "attributes": { + "title": "Physics of Nonhermitian Degeneracies", + "doi": "10.1023/b:cjop.0000044002.05657.04", + "nodeyear": 2004, + "ref-by-count": 443, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1047753851", + "attributes": { + "title": "Quasidynamical Symmetry in an Interacting Boson Model Phase Transition", + "doi": "10.1103/physrevlett.93.122502", + "nodeyear": 2004, + "ref-by-count": 80, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060674558", + "attributes": { + "title": "Shape phase transitions in odd-mass nuclei using a supersymmetric approach", + "doi": "10.1103/physrevc.70.011305", + "nodeyear": 2004, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060674557", + "attributes": { + "title": "Evolution of the \u201c\u03b2 excitation\u201d in axially symmetric transitional nuclei", + "doi": "10.1103/physrevc.70.011304", + "nodeyear": 2004, + "ref-by-count": 104, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060674213", + "attributes": { + "title": "Mapping the interacting boson approximation symmetry triangle: New trajectories of structural evolution of rare-earth nuclei", + "doi": "10.1103/physrevc.69.064306", + "nodeyear": 2004, + "ref-by-count": 80, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1015937057", + "attributes": { + "title": "Entanglement in a first-order quantum phase transition", + "doi": "10.1103/physreva.69.054101", + "nodeyear": 2004, + "ref-by-count": 128, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019411784", + "attributes": { + "title": "Z(5): critical point symmetry for the prolate to oblate nuclear shape phase transition", + "doi": "10.1016/j.physletb.2004.03.029", + "nodeyear": 2004, + "ref-by-count": 129, + "is_input_DOI": false, + "category_for": "02:0.60;01:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1011087398", + "attributes": { + "title": "A computationally tractable version of the collective model", + "doi": "10.1016/j.nuclphysa.2004.02.018", + "nodeyear": 2004, + "ref-by-count": 79, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1011902185", + "attributes": { + "title": "Consequences of wall stiffness for a \u03b2-soft potential", + "doi": "10.1103/physrevc.69.044307", + "nodeyear": 2004, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1008243844", + "attributes": { + "title": "Sequence of potentials interpolating between the U(5) and E(5) symmetries", + "doi": "10.1103/physrevc.69.044316", + "nodeyear": 2004, + "ref-by-count": 64, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1062449295", + "attributes": { + "title": "Quantum Optimally Controlled Transition Landscapes", + "doi": "10.1126/science.1093649", + "nodeyear": 2004, + "ref-by-count": 324, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060828109", + "attributes": { + "title": "Superlubricity of Graphite", + "doi": "10.1103/physrevlett.92.126101", + "nodeyear": 2004, + "ref-by-count": 953, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1020621092", + "attributes": { + "title": "New analytic solutions of the collective Bohr Hamiltonian for a \u03b2-soft, \u03b3-soft axial rotor", + "doi": "10.1088/0954-3899/30/5/006", + "nodeyear": 2004, + "ref-by-count": 57, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060674109", + "attributes": { + "title": "Transition probabilities in Gd 154 : Evidence for X(5) critical point symmetry", + "doi": "10.1103/physrevc.69.034334", + "nodeyear": 2004, + "ref-by-count": 118, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060499774", + "attributes": { + "title": "Global bending quantum number and the absence of monodromy in the HCN\u2194CNH molecule", + "doi": "10.1103/physreva.69.032504", + "nodeyear": 2004, + "ref-by-count": 46, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042098123", + "attributes": { + "title": "Quasiparticle Spectra, Charge-Density Waves, Superconductivity, and Electron-Phonon Coupling in 2H-NbSe2", + "doi": "10.1103/physrevlett.92.086401", + "nodeyear": 2004, + "ref-by-count": 138, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060674024", + "attributes": { + "title": "Extended Holstein-Primakoff mapping for the next-to-leading order of the 1\u2215N expansion at finite temperature", + "doi": "10.1103/physrevc.69.014318", + "nodeyear": 2004, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042532118", + "attributes": { + "title": "Decoherence, the measurement problem, and interpretations of quantum mechanics", + "doi": "10.1103/revmodphys.76.1267", + "nodeyear": 2004, + "ref-by-count": 703, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1008553636", + "attributes": { + "title": "NMR techniques for quantum control and computation", + "doi": "10.1103/revmodphys.76.1037", + "nodeyear": 2004, + "ref-by-count": 746, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1045744782", + "attributes": { + "title": "Universal quantum control in irreducible state-space sectors: Application to bosonic and spin-boson systems", + "doi": "10.1103/physreva.68.062320", + "nodeyear": 2003, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019531352", + "attributes": { + "title": "The Ame2003 atomic mass evaluation (II). Tables, graphs and references", + "doi": "10.1016/j.nuclphysa.2003.11.003", + "nodeyear": 2003, + "ref-by-count": 4392, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1012593191", + "attributes": { + "title": "Quantum phase transitions", + "doi": "10.1088/0034-4885/66/12/r01", + "nodeyear": 2003, + "ref-by-count": 416, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1029543778", + "attributes": { + "title": "Simplified approach to the application of the geometric collective model", + "doi": "10.1103/physrevc.68.054303", + "nodeyear": 2003, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1007803037", + "attributes": { + "title": "Invariant correlational entropy as a signature of quantum phase transitions in nuclei", + "doi": "10.1016/j.physletb.2003.08.076", + "nodeyear": 2003, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "02:0.60;01:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1059078521", + "attributes": { + "title": "The Lipkin model. Beyond mean field with generalized coherent states", + "doi": "10.1088/0305-4470/36/41/008", + "nodeyear": 2003, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060673895", + "attributes": { + "title": "Ground-state shape phase transitions in nuclei: Thermodynamic analogy and finite-N effects", + "doi": "10.1103/physrevc.68.034326", + "nodeyear": 2003, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060673873", + "attributes": { + "title": "Prolate-oblate phase transition in the Hf-Hg mass region", + "doi": "10.1103/physrevc.68.031301", + "nodeyear": 2003, + "ref-by-count": 77, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060827125", + "attributes": { + "title": "Nonperturbative Flow Equations from Running Expectation Values", + "doi": "10.1103/physrevlett.91.080602", + "nodeyear": 2003, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1057725655", + "attributes": { + "title": "Quantum Physics Under Control", + "doi": "10.1063/1.1611352", + "nodeyear": 2003, + "ref-by-count": 81, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060673750", + "attributes": { + "title": "B(E2) values and the search for the critical point symmetry X(5) in 104Mo and 106Mo", + "doi": "10.1103/physrevc.67.054315", + "nodeyear": 2003, + "ref-by-count": 53, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1006809789", + "attributes": { + "title": "Shape changes and test of the critical-point symmetry X(5) in N = 90 nuclei", + "doi": "10.1140/epja/i2002-10347-6", + "nodeyear": 2003, + "ref-by-count": 34, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1031817672", + "attributes": { + "title": "Echo Spectroscopy and Quantum Stability of Trapped Atoms", + "doi": "10.1103/physrevlett.90.023001", + "nodeyear": 2003, + "ref-by-count": 82, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060839565", + "attributes": { + "title": "Self-consistent mean-field models for nuclear structure", + "doi": "10.1103/revmodphys.75.121", + "nodeyear": 2003, + "ref-by-count": 1705, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1006328423", + "attributes": { + "title": "Decoherence, einselection, and the quantum origins of the classical", + "doi": "10.1103/revmodphys.75.715", + "nodeyear": 2003, + "ref-by-count": 2480, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1005025234", + "attributes": { + "title": "Quantum Monte Carlo calculations of A=9,10 nuclei", + "doi": "10.1103/physrevc.66.044310", + "nodeyear": 2002, + "ref-by-count": 304, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1040030659", + "attributes": { + "title": "Experimental Implementation of the Quantum Baker\u2019s Map", + "doi": "10.1103/physrevlett.89.157902", + "nodeyear": 2002, + "ref-by-count": 59, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1012581556", + "attributes": { + "title": "The origin of degeneracies and crossings in the 1d Hubbard model", + "doi": "10.1088/0305-4470/35/34/319", + "nodeyear": 2002, + "ref-by-count": 31, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060673467", + "attributes": { + "title": "Test of two-level crossing at the N=90 spherical-deformed critical point", + "doi": "10.1103/physrevc.66.021304", + "nodeyear": 2002, + "ref-by-count": 53, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060728780", + "attributes": { + "title": "Universal relationship between a quantum phase transition and instability points of classical systems", + "doi": "10.1103/physreve.66.016217", + "nodeyear": 2002, + "ref-by-count": 29, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1098707489", + "attributes": { + "title": "Physical Problems Solved by the Phase-Integral Method", + "doi": "10.1017/cbo9780511535086", + "nodeyear": 2002, + "ref-by-count": 68, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1060673300", + "attributes": { + "title": "Shape phase transitions in rotating nuclei via cranking the interacting boson model", + "doi": "10.1103/physrevc.65.044312", + "nodeyear": 2002, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1052419661", + "attributes": { + "title": "Nuclear binding energies: Global collective structure and local shell-model correlations", + "doi": "10.1016/s0375-9474(01)01270-2", + "nodeyear": 2002, + "ref-by-count": 40, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1044001354", + "attributes": { + "title": "Quantum Level Structures and Nonlinear Classical Dynamics", + "doi": "10.1006/jmsp.2001.8446", + "nodeyear": 2001, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060673164", + "attributes": { + "title": "Search for E(5) symmetry in nuclei: The Ru isotopes", + "doi": "10.1103/physrevc.65.014301", + "nodeyear": 2001, + "ref-by-count": 80, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1056046759", + "attributes": { + "title": "On the Anharmonic XCN Bending Modes of the Quasilinear Molecules BrCNO and ClCNO", + "doi": "10.1021/jp012067u", + "nodeyear": 2001, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060673113", + "attributes": { + "title": "Collective 0+ excitations and their global properties", + "doi": "10.1103/physrevc.64.057301", + "nodeyear": 2001, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1034622526", + "attributes": { + "title": "Class of Exactly Solvable Pairing Models", + "doi": "10.1103/physrevlett.87.066403", + "nodeyear": 2001, + "ref-by-count": 131, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1036871640", + "attributes": { + "title": "Observation of Chaos-Assisted Tunneling Between Islands of Stability", + "doi": "10.1126/science.1061569", + "nodeyear": 2001, + "ref-by-count": 285, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019839012", + "attributes": { + "title": "Dynamical tunnelling of ultracold atoms", + "doi": "10.1038/35083510", + "nodeyear": 2001, + "ref-by-count": 288, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1040846971", + "attributes": { + "title": "Exact solution of the nuclear pairing problem", + "doi": "10.1016/s0370-2693(01)00431-2", + "nodeyear": 2001, + "ref-by-count": 94, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1018661537", + "attributes": { + "title": "Charge Density Wave, Superconductivity, and Anomalous Metallic Behavior in 2D Transition Metal Dichalcogenides", + "doi": "10.1103/physrevlett.86.4382", + "nodeyear": 2001, + "ref-by-count": 332, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1043138933", + "attributes": { + "title": "Spectroscopy of discrete energy levels in ultrasmall metallic grains", + "doi": "10.1016/s0370-1573(00)00099-5", + "nodeyear": 2001, + "ref-by-count": 348, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1008640012", + "attributes": { + "title": "Environment-Independent Decoherence Rate in Classically Chaotic Systems", + "doi": "10.1103/physrevlett.86.2490", + "nodeyear": 2001, + "ref-by-count": 442, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1043889955", + "attributes": { + "title": "Quantum Signatures of Chaos", + "doi": "10.1007/978-3-662-04506-0", + "nodeyear": 2001, + "ref-by-count": 556, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1032081451", + "attributes": { + "title": "Continuous Quantum Measurement and the Emergence of Classical Chaos", + "doi": "10.1103/physrevlett.85.4852", + "nodeyear": 2000, + "ref-by-count": 98, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1024740024", + "attributes": { + "title": "The B(E2:4+2\u21922+2) value in 152Sm and \u03b2-softness in phase coexisting structures", + "doi": "10.1016/s0370-2693(00)01233-8", + "nodeyear": 2000, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "02:0.60;01:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1028438151", + "attributes": { + "title": "Quantum feedback control and classical control theory", + "doi": "10.1103/physreva.62.012105", + "nodeyear": 2000, + "ref-by-count": 241, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1062569382", + "attributes": { + "title": "Whither the Future of Controlling Quantum Phenomena?", + "doi": "10.1126/science.288.5467.824", + "nodeyear": 2000, + "ref-by-count": 961, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1047654315", + "attributes": { + "title": "Classification of Phase Transitions in Small Systems", + "doi": "10.1103/physrevlett.84.3511", + "nodeyear": 2000, + "ref-by-count": 108, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1016859474", + "attributes": { + "title": "The statistical theory of quantum dots", + "doi": "10.1103/revmodphys.72.895", + "nodeyear": 2000, + "ref-by-count": 525, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060820367", + "attributes": { + "title": "Dynamical Symmetry and Higher-Order Interactions", + "doi": "10.1103/physrevlett.83.4269", + "nodeyear": 1999, + "ref-by-count": 58, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060672165", + "attributes": { + "title": "Phase coexistence in the interacting boson model and 152Sm", + "doi": "10.1103/physrevc.60.061303", + "nodeyear": 1999, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1049632162", + "attributes": { + "title": "Shape coexistence and the effective nucleon-nucleon interaction", + "doi": "10.1103/physrevc.60.014316", + "nodeyear": 1999, + "ref-by-count": 284, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1036048855", + "attributes": { + "title": "Quantum Monodromy in Integrable Systems", + "doi": "10.1007/s002200050621", + "nodeyear": 1999, + "ref-by-count": 74, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1010760440", + "attributes": { + "title": "Electric monopole transitions from low energy excitations in nuclei", + "doi": "10.1016/s0375-9474(99)00143-8", + "nodeyear": 1999, + "ref-by-count": 186, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1027532833", + "attributes": { + "title": "Wave-function entropy and dynamical symmetry breaking in the interacting boson model", + "doi": "10.1103/physreve.58.387", + "nodeyear": 1998, + "ref-by-count": 39, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1034601602", + "attributes": { + "title": "Quantum-classical transition of the escape rate of a uniaxial spin system in an arbitrarily directed field", + "doi": "10.1103/physrevb.57.13639", + "nodeyear": 1998, + "ref-by-count": 103, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1016981788", + "attributes": { + "title": "New algebraic solutions for SO(6) \u2194 U(5) transitional nuclei in the interacting boson model", + "doi": "10.1016/s0375-9474(98)00207-3", + "nodeyear": 1998, + "ref-by-count": 91, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059076097", + "attributes": { + "title": "Rotation-vibrational spectra of diatomic molecules and nuclei with Davidson interactions", + "doi": "10.1088/0305-4470/31/21/011", + "nodeyear": 1998, + "ref-by-count": 70, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1035439165", + "attributes": { + "title": "Decoherence, Chaos, and the Correspondence Principle", + "doi": "10.1103/physrevlett.80.4361", + "nodeyear": 1998, + "ref-by-count": 184, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042214836", + "attributes": { + "title": "Orderly Spectra from Random Interactions", + "doi": "10.1103/physrevlett.80.2749", + "nodeyear": 1998, + "ref-by-count": 133, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1007511315", + "attributes": { + "title": "A structural triangle for the geometric collective model", + "doi": "10.1016/s0370-2693(97)00763-6", + "nodeyear": 1997, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "02:0.60;01:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1015234386", + "attributes": { + "title": "Magnetic phases near the Van Hove singularity in s- and d-band Hubbard models", + "doi": "10.1103/physrevb.56.3159", + "nodeyear": 1997, + "ref-by-count": 65, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1005256305", + "attributes": { + "title": "Particle-hole excitations in the interacting boson model (III): The O(6)-SU(3) coupling", + "doi": "10.1016/s0375-9474(97)00195-4", + "nodeyear": 1997, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1098678329", + "attributes": { + "title": "Chaos in Atomic Physics", + "doi": "10.1017/cbo9780511524509", + "nodeyear": 1997, + "ref-by-count": 102, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1043006827", + "attributes": { + "title": "Bifurcations of periodic orbits and uniform approximations", + "doi": "10.1088/0305-4470/30/13/010", + "nodeyear": 1997, + "ref-by-count": 82, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1030554440", + "attributes": { + "title": "Semiclassical interference of bifurcations", + "doi": "10.1209/epl/i1997-00262-4", + "nodeyear": 1997, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060492396", + "attributes": { + "title": "Hydrogen atom in a magnetic field: Ghost orbits, catastrophes, and uniform semiclassical approximations", + "doi": "10.1103/physreva.55.1743", + "nodeyear": 1997, + "ref-by-count": 46, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1044040016", + "attributes": { + "title": "Global Aspects of Classical Integrable Systems", + "doi": "10.1007/978-3-0348-8891-2", + "nodeyear": 1997, + "ref-by-count": 261, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1028784456", + "attributes": { + "title": "On the LambertW function", + "doi": "10.1007/bf02124750", + "nodeyear": 1996, + "ref-by-count": 3933, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1005219924", + "attributes": { + "title": "Coincidence and correlation analysis for low spin states in 128Xe", + "doi": "10.1016/0375-9474(96)00242-4", + "nodeyear": 1996, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059074985", + "attributes": { + "title": "Uniform approximation for bifurcations of periodic orbits with high repetition numbers", + "doi": "10.1088/0305-4470/29/15/034", + "nodeyear": 1996, + "ref-by-count": 47, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1045342100", + "attributes": { + "title": "Partial Dynamical Symmetry in Deformed Nuclei", + "doi": "10.1103/physrevlett.77.818", + "nodeyear": 1996, + "ref-by-count": 85, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1043048933", + "attributes": { + "title": "Secular determinants of random unitary matrices", + "doi": "10.1088/0305-4470/29/13/029", + "nodeyear": 1996, + "ref-by-count": 54, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060719599", + "attributes": { + "title": "Near-integrable systems: Resonances and semiclassical trace formulas", + "doi": "10.1103/physreve.54.136", + "nodeyear": 1996, + "ref-by-count": 55, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1024348554", + "attributes": { + "title": "Transformation brackets between U(\u03bd+1)\u2283U(\u03bd)\u2283SO(\u03bd) and U(\u03bd+1)\u2283SO(\u03bd+1)\u2283SO(\u03bd)", + "doi": "10.1063/1.531689", + "nodeyear": 1996, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060812291", + "attributes": { + "title": "Semiclassical Trace Formulas of Near-Integrable Systems: Resonances", + "doi": "10.1103/physrevlett.75.4346", + "nodeyear": 1995, + "ref-by-count": 59, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1022345746", + "attributes": { + "title": "Theory and application of the quantum phase-space distribution functions", + "doi": "10.1016/0370-1573(95)00007-4", + "nodeyear": 1995, + "ref-by-count": 570, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1018020267", + "attributes": { + "title": "Semiclassical asymptotics of perturbed cat maps", + "doi": "10.1098/rspa.1995.0063", + "nodeyear": 1995, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060490443", + "attributes": { + "title": "Controllability of molecular systems", + "doi": "10.1103/physreva.51.960", + "nodeyear": 1995, + "ref-by-count": 276, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1053030119", + "attributes": { + "title": "The pair-coupling model", + "doi": "10.1016/0375-9474(94)00472-y", + "nodeyear": 1995, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1037040727", + "attributes": { + "title": "Microscopic aspects of nuclear deformation", + "doi": "10.1016/0375-9474(94)90966-0", + "nodeyear": 1994, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1021912934", + "attributes": { + "title": "Microscopic origin of nuclear deformations", + "doi": "10.1016/0375-9474(94)90037-x", + "nodeyear": 1994, + "ref-by-count": 54, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060716812", + "attributes": { + "title": "Traces of ghost orbits in the quantum standard map", + "doi": "10.1103/physreve.49.r4767", + "nodeyear": 1994, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060488555", + "attributes": { + "title": "Wigner distribution of a general angular-momentum state: Applications to a collection of two-level atoms", + "doi": "10.1103/physreva.49.4101", + "nodeyear": 1994, + "ref-by-count": 185, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1028771859", + "attributes": { + "title": "Decoherence, chaos, and the second law", + "doi": "10.1103/physrevlett.72.2508", + "nodeyear": 1994, + "ref-by-count": 351, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059110861", + "attributes": { + "title": "Semiclassical accuracy for billiards", + "doi": "10.1088/0951-7715/7/2/010", + "nodeyear": 1994, + "ref-by-count": 54, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060716833", + "attributes": { + "title": "Long-time behavior of the semiclassical baker\u2019s map", + "doi": "10.1103/physreve.49.r963", + "nodeyear": 1994, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1020895228", + "attributes": { + "title": "\u00c9quilibre instable en r\u00e9gime semi-classique: i\u2014concentration microlocale", + "doi": "10.1080/03605309408821063", + "nodeyear": 1994, + "ref-by-count": 47, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060807676", + "attributes": { + "title": "Prebifurcation periodic ghost orbits in semiclassical quantization", + "doi": "10.1103/physrevlett.71.2167", + "nodeyear": 1993, + "ref-by-count": 116, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060565149", + "attributes": { + "title": "Site-selective imaging in scanning tunneling microscopy of graphite: The nature of site asymmetry", + "doi": "10.1103/physrevb.47.13059", + "nodeyear": 1993, + "ref-by-count": 40, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060487068", + "attributes": { + "title": "Quantum dynamics near a classical separatrix", + "doi": "10.1103/physreva.47.2496", + "nodeyear": 1993, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1098954489", + "attributes": { + "title": "Quantum Dissipative Systems", + "doi": "10.1142/1476", + "nodeyear": 1993, + "ref-by-count": 693, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1029398439", + "attributes": { + "title": "Factorization of commutators: The Wick theorem for coupled operators", + "doi": "10.1016/0375-9474(93)90357-4", + "nodeyear": 1993, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1057871482", + "attributes": { + "title": "Atom\u2010Photon Interactions: Basic Processes and Applications", + "doi": "10.1063/1.2809840", + "nodeyear": 1992, + "ref-by-count": 386, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060805930", + "attributes": { + "title": "Semiclassical propagation: How long can it last?", + "doi": "10.1103/physrevlett.69.402", + "nodeyear": 1992, + "ref-by-count": 117, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059110762", + "attributes": { + "title": "Semiclassical quantization of multidimensional systems", + "doi": "10.1088/0951-7715/5/4/001", + "nodeyear": 1992, + "ref-by-count": 220, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1005256926", + "attributes": { + "title": "New methods in the theory of quantum spin systems", + "doi": "10.1016/0370-1573(92)90158-v", + "nodeyear": 1992, + "ref-by-count": 137, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060485642", + "attributes": { + "title": "Separatrix eigenfunctions", + "doi": "10.1103/physreva.45.8501", + "nodeyear": 1992, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060804542", + "attributes": { + "title": "Distribution of roots of random polynomials", + "doi": "10.1103/physrevlett.68.2726", + "nodeyear": 1992, + "ref-by-count": 74, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1025507234", + "attributes": { + "title": "Remarks on the quasi-classical propagator of area-preserving maps", + "doi": "10.1016/0167-2789(92)90020-n", + "nodeyear": 1992, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060804211", + "attributes": { + "title": "Novel rule for quantizing chaos", + "doi": "10.1103/physrevlett.68.1629", + "nodeyear": 1992, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1026690139", + "attributes": { + "title": "The microwave spectrum and semirigid bender analysis of isocyanatoethyne, HC\ue5fcCNCO", + "doi": "10.1016/0022-2852(92)90125-8", + "nodeyear": 1992, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1057737242", + "attributes": { + "title": "Anatomy of the trace formula for the baker's map.", + "doi": "10.1063/1.165922", + "nodeyear": 1992, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060484658", + "attributes": { + "title": "Selberg\u2019s \u03b6 function and the quantization of chaos", + "doi": "10.1103/physreva.44.r7877", + "nodeyear": 1991, + "ref-by-count": 38, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1041037290", + "attributes": { + "title": "Monodromy in the champagne bottle", + "doi": "10.1007/bf00944566", + "nodeyear": 1991, + "ref-by-count": 54, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060803392", + "attributes": { + "title": "Quantum eigenvalues from classical periodic orbits", + "doi": "10.1103/physrevlett.67.2410", + "nodeyear": 1991, + "ref-by-count": 89, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1098679389", + "attributes": { + "title": "The Interacting Boson-Fermion Model", + "doi": "10.1017/cbo9780511549724", + "nodeyear": 1991, + "ref-by-count": 325, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1060803927", + "attributes": { + "title": "Semiclassical dynamics of chaotic motion: Unexpected long-time accuracy", + "doi": "10.1103/physrevlett.67.664", + "nodeyear": 1991, + "ref-by-count": 194, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059110686", + "attributes": { + "title": "The cat maps: quantum mechanics and classical motion", + "doi": "10.1088/0951-7715/4/2/006", + "nodeyear": 1991, + "ref-by-count": 126, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1030828951", + "attributes": { + "title": "The unusual nature of the quantum Baker's transformation", + "doi": "10.1016/0003-4916(91)90184-a", + "nodeyear": 1991, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060483028", + "attributes": { + "title": "Classical and quantal morphology of a piecewise-linear standard map", + "doi": "10.1103/physreva.43.3183", + "nodeyear": 1991, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042457710", + "attributes": { + "title": "Nuclear ground state properties of 99Sr by collinear laser spectroscopy with non-optical detection", + "doi": "10.1016/0370-2693(91)90664-c", + "nodeyear": 1991, + "ref-by-count": 41, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060482831", + "attributes": { + "title": "Quantum dynamics in a chaotic separatrix layer", + "doi": "10.1103/physreva.43.1783", + "nodeyear": 1991, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060839221", + "attributes": { + "title": "Boson realizations of Lie algebras with applications to nuclear physics", + "doi": "10.1103/revmodphys.63.375", + "nodeyear": 1991, + "ref-by-count": 362, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1022722372", + "attributes": { + "title": "Nuclear Shapes in Mean Field Theory", + "doi": "10.1146/annurev.ns.40.120190.002255", + "nodeyear": 1990, + "ref-by-count": 202, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059071180", + "attributes": { + "title": "A rule for quantizing chaos?", + "doi": "10.1088/0305-4470/23/21/024", + "nodeyear": 1990, + "ref-by-count": 172, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1053498585", + "attributes": { + "title": "Simple models of quantum chaos: Spectrum and eigenfunctions", + "doi": "10.1016/0370-1573(90)90067-c", + "nodeyear": 1990, + "ref-by-count": 707, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059071127", + "attributes": { + "title": "Indicators of quantum chaos based on eigenvector statistics", + "doi": "10.1088/0305-4470/23/20/005", + "nodeyear": 1990, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060801337", + "attributes": { + "title": "Role of \u2018\u2018scars\u2019\u2019 in the suppression of ionization in intense, high-frequency fields", + "doi": "10.1103/physrevlett.65.1964", + "nodeyear": 1990, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060481738", + "attributes": { + "title": "Random-matrix theory and eigenmodes of dynamical systems", + "doi": "10.1103/physreva.42.1013", + "nodeyear": 1990, + "ref-by-count": 60, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1030444683", + "attributes": { + "title": "Wigner's function and tunneling", + "doi": "10.1016/0003-4916(90)90370-4", + "nodeyear": 1990, + "ref-by-count": 75, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1022719988", + "attributes": { + "title": "Classical structures in the quantized baker transformation", + "doi": "10.1016/0003-4916(90)90367-w", + "nodeyear": 1990, + "ref-by-count": 164, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060800993", + "attributes": { + "title": "Dynamics of atomic ionization suppression and electron localization in an intense high-frequency radiation field", + "doi": "10.1103/physrevlett.64.862", + "nodeyear": 1990, + "ref-by-count": 255, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1022162692", + "attributes": { + "title": "Phase separation near the Mott transition in La2-xSrxCuO4", + "doi": "10.1088/0953-8984/2/3/015", + "nodeyear": 1990, + "ref-by-count": 107, + "is_input_DOI": false, + "category_for": "02:0.33;09:0.33;10:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060800881", + "attributes": { + "title": "Scaling behavior of localization in quantum chaos", + "doi": "10.1103/physrevlett.64.5", + "nodeyear": 1990, + "ref-by-count": 92, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1053543950", + "attributes": { + "title": "Chaos in Classical and Quantum Mechanics", + "doi": "10.1007/978-1-4612-0983-6", + "nodeyear": 1990, + "ref-by-count": 1977, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060799854", + "attributes": { + "title": "Inhibition of quantum transport due to \u2018\u2018scars\u2019\u2019 of unstable periodic orbits", + "doi": "10.1103/physrevlett.63.2771", + "nodeyear": 1989, + "ref-by-count": 100, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1073294533", + "attributes": { + "title": "Chaos and integrability in nonlinear dynamics: an introduction", + "doi": "10.5860/choice.27-2142", + "nodeyear": 1989, + "ref-by-count": 109, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1060480673", + "attributes": { + "title": "Semiclassical approximations in the coherent-state representation", + "doi": "10.1103/physreva.40.6800", + "nodeyear": 1989, + "ref-by-count": 86, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1064233019", + "attributes": { + "title": "Convergence of the Semi-Classical Periodic Orbit Expansion", + "doi": "10.1209/0295-5075/9/6/002", + "nodeyear": 1989, + "ref-by-count": 61, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1014168356", + "attributes": { + "title": "Quantum scars of classical closed orbits in phase space", + "doi": "10.1098/rspa.1989.0052", + "nodeyear": 1989, + "ref-by-count": 303, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1043750288", + "attributes": { + "title": "Uniform asymptotic smoothing of Stokes\u2019s discontinuities", + "doi": "10.1098/rspa.1989.0018", + "nodeyear": 1989, + "ref-by-count": 242, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060664355", + "attributes": { + "title": "Shape transition and dynamical symmetries in the interacting boson model", + "doi": "10.1103/physrevc.39.652", + "nodeyear": 1989, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060478681", + "attributes": { + "title": "Scaling theory for the localization length of the kicked rotor", + "doi": "10.1103/physreva.39.1628", + "nodeyear": 1989, + "ref-by-count": 48, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1049940303", + "attributes": { + "title": "The quantized Baker's transformation", + "doi": "10.1016/0003-4916(89)90259-5", + "nodeyear": 1989, + "ref-by-count": 176, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1059069771", + "attributes": { + "title": "Universality of eigenvector statistics of kicked tops of different symmetries", + "doi": "10.1088/0305-4470/21/22/006", + "nodeyear": 1988, + "ref-by-count": 59, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1058105141", + "attributes": { + "title": "Some isoscalar factors for SO\n \n N\n \n \u2287SO\n \n N\n \u22121\n \n and state expansion coefficients for SO\n \n N\n \n \u2287SO\n \n N\n \u22121\n \n in terms of SU\n \n N\n \n \u2287SU\n \n N\n \u22121\n \n \u2287SO\n \n N\n \u22121", + "doi": "10.1063/1.528122", + "nodeyear": 1988, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1008979230", + "attributes": { + "title": "OCCCS, NCNCS, NCNCO, and NCNNN as semirigid benders", + "doi": "10.1016/0022-2852(88)90059-8", + "nodeyear": 1988, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060797693", + "attributes": { + "title": "Wave Functions at the Critical Kolmogorov-Arnol'd-Moser Surface", + "doi": "10.1103/physrevlett.61.1691", + "nodeyear": 1988, + "ref-by-count": 58, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1010960717", + "attributes": { + "title": "Quasi-exactly-solvable problems andsl(2) algebra", + "doi": "10.1007/bf01466727", + "nodeyear": 1988, + "ref-by-count": 548, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060477616", + "attributes": { + "title": "Relation between quantum and classical thresholds for multiphoton ionization of excited atoms", + "doi": "10.1103/physreva.37.4702", + "nodeyear": 1988, + "ref-by-count": 94, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1025337287", + "attributes": { + "title": "Smoothed wave functions of chaotic quantum systems", + "doi": "10.1016/0167-2789(88)90075-9", + "nodeyear": 1988, + "ref-by-count": 318, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060797016", + "attributes": { + "title": "Nuclear Deformation: A Proton-Neutron Effect?", + "doi": "10.1103/physrevlett.60.2254", + "nodeyear": 1988, + "ref-by-count": 61, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1064231130", + "attributes": { + "title": "The Kicked Rotator as a Limit of the Kicked Top", + "doi": "10.1209/0295-5075/5/8/001", + "nodeyear": 1988, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1064231079", + "attributes": { + "title": "Kramers' Degeneracy and Quartic Level Repulsion", + "doi": "10.1209/0295-5075/5/5/001", + "nodeyear": 1988, + "ref-by-count": 56, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1064231011", + "attributes": { + "title": "Dynamics and Statistics of Quasi-Energy Levels for Kicked Quantum Systems", + "doi": "10.1209/0295-5075/5/1/001", + "nodeyear": 1988, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060839152", + "attributes": { + "title": "The interacting boson approximation", + "doi": "10.1103/revmodphys.60.389", + "nodeyear": 1988, + "ref-by-count": 305, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1009964863", + "attributes": { + "title": "The quantum mechanical spherical pendulum", + "doi": "10.1090/s0273-0979-1988-15705-9", + "nodeyear": 1988, + "ref-by-count": 91, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059069031", + "attributes": { + "title": "Resonant periodic orbits and the semiclassical energy spectrum", + "doi": "10.1088/0305-4470/20/17/021", + "nodeyear": 1987, + "ref-by-count": 96, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060795805", + "attributes": { + "title": "Geometrical interpretation of SO(7): A critical dynamical symmetry", + "doi": "10.1103/physrevlett.59.2032", + "nodeyear": 1987, + "ref-by-count": 34, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1045515256", + "attributes": { + "title": "Intrinsic and collective structure in the interacting boson model", + "doi": "10.1016/0003-4916(87)90136-9", + "nodeyear": 1987, + "ref-by-count": 56, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1034392770", + "attributes": { + "title": "Semi-classical quantization, adiabatic invariants and classical chaos", + "doi": "10.1098/rspa.1987.0107", + "nodeyear": 1987, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1051138084", + "attributes": { + "title": "Adiabatic invariance in the standard map", + "doi": "10.1016/0167-2789(87)90124-2", + "nodeyear": 1987, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1023341115", + "attributes": { + "title": "Landau theory of shape transitions in hot rotating nuclei", + "doi": "10.1016/0375-9474(87)90107-2", + "nodeyear": 1987, + "ref-by-count": 69, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060476171", + "attributes": { + "title": "Quantum chaos of periodically pulsed systems: Underlying complete integrability", + "doi": "10.1103/physreva.35.5294", + "nodeyear": 1987, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1039185830", + "attributes": { + "title": "Erratic behavior of invariant circles in standard-like mappings", + "doi": "10.1016/0167-2789(87)90235-1", + "nodeyear": 1987, + "ref-by-count": 39, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060794819", + "attributes": { + "title": "Connection between long-range correlations in quantum spectra and classical periodic orbits", + "doi": "10.1103/physrevlett.58.1589", + "nodeyear": 1987, + "ref-by-count": 180, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1010313486", + "attributes": { + "title": "Symmetry versus degree of level repulsion for kicked quantum systems", + "doi": "10.1007/bf01312770", + "nodeyear": 1987, + "ref-by-count": 57, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059069146", + "attributes": { + "title": "On the limitations of the Birkhoff-Gustavson normal form approach", + "doi": "10.1088/0305-4470/20/2/020", + "nodeyear": 1987, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060795235", + "attributes": { + "title": "Quantum effects in a macroscopic system", + "doi": "10.1103/physrevlett.58.292", + "nodeyear": 1987, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1049572408", + "attributes": { + "title": "Theory of Multiphoton Processes", + "doi": "10.1007/978-1-4899-1977-9", + "nodeyear": 1987, + "ref-by-count": 425, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1060794274", + "attributes": { + "title": "Kolmogorov-Arnol'd-Moser Barriers in the Quantum Dynamics of Chaotic Systems", + "doi": "10.1103/physrevlett.57.2883", + "nodeyear": 1986, + "ref-by-count": 137, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060475260", + "attributes": { + "title": "Adiabatic-invariant change due to separatrix crossing", + "doi": "10.1103/physreva.34.4256", + "nodeyear": 1986, + "ref-by-count": 239, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1059068122", + "attributes": { + "title": "Birkhoff-Gustavson normal form in classical and quantum mechanics", + "doi": "10.1088/0305-4470/19/15/020", + "nodeyear": 1986, + "ref-by-count": 56, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059068080", + "attributes": { + "title": "A note concerning quantum integrability", + "doi": "10.1088/0305-4470/19/14/004", + "nodeyear": 1986, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059086874", + "attributes": { + "title": "Random-phase approximation and broken symmetry", + "doi": "10.1088/0305-4616/12/9/006", + "nodeyear": 1986, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1036372533", + "attributes": { + "title": "Characteristic patterns in microwave spectra of quasi-symmetric top molecules of the WH3XYZ type", + "doi": "10.1016/0022-2852(86)90181-5", + "nodeyear": 1986, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060794457", + "attributes": { + "title": "Periodically pulsed spin dynamics: Scaling behavior of semiclassical wave functions", + "doi": "10.1103/physrevlett.57.5", + "nodeyear": 1986, + "ref-by-count": 54, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060475467", + "attributes": { + "title": "Evolution and exact eigenstates of a resonant quantum system", + "doi": "10.1103/physreva.34.7", + "nodeyear": 1986, + "ref-by-count": 154, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1012195559", + "attributes": { + "title": "The microwave spectrum of methyl isothiocyanate", + "doi": "10.1016/0022-2852(86)90235-3", + "nodeyear": 1986, + "ref-by-count": 33, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1043149560", + "attributes": { + "title": "Levelstatistics and stochasticity in a driven quantum system", + "doi": "10.1007/bf01303848", + "nodeyear": 1986, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1001349916", + "attributes": { + "title": "Invariant circles for the piecewise linear standard map", + "doi": "10.1007/bf01209394", + "nodeyear": 1986, + "ref-by-count": 50, + "is_input_DOI": false, + "category_for": "01:0.60;02:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1060793163", + "attributes": { + "title": "Change of the Adiabatic Invariant due to Separatrix Crossing", + "doi": "10.1103/physrevlett.56.2117", + "nodeyear": 1986, + "ref-by-count": 95, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1052561538", + "attributes": { + "title": "O(5) symmetry in IBA-1 \u2014 the O(6)\u2014U(5) transition region", + "doi": "10.1016/0370-2693(86)90824-5", + "nodeyear": 1986, + "ref-by-count": 57, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059068352", + "attributes": { + "title": "False time-reversal violation and energy level statistics: the role of anti-unitary symmetry", + "doi": "10.1088/0305-4470/19/5/020", + "nodeyear": 1986, + "ref-by-count": 143, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1022456477", + "attributes": { + "title": "The symplectic shell-model theory of collective states", + "doi": "10.1016/0375-9474(86)90308-8", + "nodeyear": 1986, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060793513", + "attributes": { + "title": "Limiting quasienergy statistics for simple quantum systems", + "doi": "10.1103/physrevlett.56.541", + "nodeyear": 1986, + "ref-by-count": 110, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1039987654", + "attributes": { + "title": "Lie Groups and Algebras with Applications to Physics, Geometry, and Mechanics", + "doi": "10.1007/978-1-4757-1910-9", + "nodeyear": 1986, + "ref-by-count": 198, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1039918636", + "attributes": { + "title": "Quasienergy integrals for the \u201cstandard mapping\u201d", + "doi": "10.1016/0375-9601(85)90333-0", + "nodeyear": 1985, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1016926995", + "attributes": { + "title": "An integrable marriage of the Euler equations with the Calogero-Moser system", + "doi": "10.1016/0375-9601(85)90432-3", + "nodeyear": 1985, + "ref-by-count": 103, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1015283490", + "attributes": { + "title": "Microwave spectrum of the quasilinear molecule, cyanogen isothiocyanate (NCNCS)", + "doi": "10.1016/0022-2852(85)90114-6", + "nodeyear": 1985, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1039179998", + "attributes": { + "title": "Interacting boson approximation and triaxial shapes", + "doi": "10.1016/0370-2693(85)91370-x", + "nodeyear": 1985, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "02:0.60;01:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1047713864", + "attributes": { + "title": "IBA consistent-Q formalism extended to the vibrational region", + "doi": "10.1016/0370-2693(85)91573-4", + "nodeyear": 1985, + "ref-by-count": 117, + "is_input_DOI": false, + "category_for": "02:0.60;01:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1060537632", + "attributes": { + "title": "Statistics of quasi-energy separations in chaotic systems", + "doi": "10.1103/physrevb.31.6852", + "nodeyear": 1985, + "ref-by-count": 57, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060791387", + "attributes": { + "title": "New Approach to the Statistical Properties of Energy Levels", + "doi": "10.1103/physrevlett.54.1883", + "nodeyear": 1985, + "ref-by-count": 182, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1098905503", + "attributes": { + "title": "Coherent States", + "doi": "10.1142/0096", + "nodeyear": 1985, + "ref-by-count": 1220, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1022161412", + "attributes": { + "title": "Quantum spectra of classically chaotic systems without time reversal invariance", + "doi": "10.1016/0375-9601(85)90287-7", + "nodeyear": 1985, + "ref-by-count": 56, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060791130", + "attributes": { + "title": "Quantization of Asymmetric Shapes in Nuclei", + "doi": "10.1103/physrevlett.54.1126", + "nodeyear": 1985, + "ref-by-count": 82, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1030634392", + "attributes": { + "title": "On the dynamics of a quantum system which is classically chaotic", + "doi": "10.1007/bf01312650", + "nodeyear": 1985, + "ref-by-count": 66, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060537812", + "attributes": { + "title": "Theory of the scanning tunneling microscope", + "doi": "10.1103/physrevb.31.805", + "nodeyear": 1985, + "ref-by-count": 3418, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060473496", + "attributes": { + "title": "Route to chaos by irregular periods: Simulations of parallel pumping in ferromagnets", + "doi": "10.1103/physreva.31.420", + "nodeyear": 1985, + "ref-by-count": 58, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1024772182", + "attributes": { + "title": "Spectral Fluctuations and Chaos in Quantum Systems", + "doi": "10.1007/978-1-4613-2443-0_7", + "nodeyear": 1985, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060472631", + "attributes": { + "title": "Stability of quantum motion in chaotic and regular systems", + "doi": "10.1103/physreva.30.1610", + "nodeyear": 1984, + "ref-by-count": 487, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060660647", + "attributes": { + "title": "Collective particle hole excitation in a deformed ground state", + "doi": "10.1103/physrevc.29.2368", + "nodeyear": 1984, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060789858", + "attributes": { + "title": "Uncovering the Transition from Regularity to Irregularity in a Quantum System", + "doi": "10.1103/physrevlett.52.1665", + "nodeyear": 1984, + "ref-by-count": 133, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1059067283", + "attributes": { + "title": "The adiabatic limit and the semiclassical limit", + "doi": "10.1088/0305-4470/17/6/018", + "nodeyear": 1984, + "ref-by-count": 75, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1052314442", + "attributes": { + "title": "Quantal phase factors accompanying adiabatic changes", + "doi": "10.1098/rspa.1984.0023", + "nodeyear": 1984, + "ref-by-count": 6354, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1027179906", + "attributes": { + "title": "Diabolical points in the spectra of triangles", + "doi": "10.1098/rspa.1984.0022", + "nodeyear": 1984, + "ref-by-count": 333, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060660456", + "attributes": { + "title": "Random phase approximation in a deformed Hartree-Fock basis", + "doi": "10.1103/physrevc.29.1113", + "nodeyear": 1984, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1004335462", + "attributes": { + "title": "Incommensurability in an exactly-soluble quantal and classical model for a kicked rotator", + "doi": "10.1016/0167-2789(84)90185-4", + "nodeyear": 1984, + "ref-by-count": 38, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1010717449", + "attributes": { + "title": "Phenomenology of shape transitions in hot nuclei", + "doi": "10.1016/0375-9474(84)90421-4", + "nodeyear": 1984, + "ref-by-count": 98, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060790099", + "attributes": { + "title": "Effective Triaxial Deformations in the Interacting-Boson Model", + "doi": "10.1103/physrevlett.52.263", + "nodeyear": 1984, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060789643", + "attributes": { + "title": "Characterization of Chaotic Quantum Spectra and Universality of Level Fluctuation Laws", + "doi": "10.1103/physrevlett.52.1", + "nodeyear": 1984, + "ref-by-count": 1914, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1020847848", + "attributes": { + "title": "Destruction of order in nuclear spectra by a residual GOE interaction", + "doi": "10.1016/0375-9474(83)90385-8", + "nodeyear": 1983, + "ref-by-count": 52, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1015453451", + "attributes": { + "title": "Coexistence in odd-mass nuclei", + "doi": "10.1016/0370-1573(83)90085-6", + "nodeyear": 1983, + "ref-by-count": 438, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060533316", + "attributes": { + "title": "Large-size critical behavior of infinitely coordinated systems", + "doi": "10.1103/physrevb.28.3955", + "nodeyear": 1983, + "ref-by-count": 145, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042659546", + "attributes": { + "title": "Invariant curves, attractors, and phase diagram of a piecewise linear map with chaos", + "doi": "10.1007/bf01009756", + "nodeyear": 1983, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060789627", + "attributes": { + "title": "Quantum Kolmogorov-Arnol'd-Moser-like Theorem: Fundamentals of Localization in Quantum Theory", + "doi": "10.1103/physrevlett.51.947", + "nodeyear": 1983, + "ref-by-count": 102, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060789626", + "attributes": { + "title": "Distribution of Energy Eigenvalues in the Irregular Spectrum", + "doi": "10.1103/physrevlett.51.943", + "nodeyear": 1983, + "ref-by-count": 341, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1058023149", + "attributes": { + "title": "Comparison of quantal, classical, and semiclassical behavior at an isolated avoided crossing", + "doi": "10.1063/1.445127", + "nodeyear": 1983, + "ref-by-count": 67, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1031813736", + "attributes": { + "title": "A semiclassical quantization of area-preserving maps", + "doi": "10.1016/0167-2789(83)90005-2", + "nodeyear": 1983, + "ref-by-count": 67, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1005432200", + "attributes": { + "title": "Regular and Stochastic Motion", + "doi": "10.1007/978-1-4757-4257-2", + "nodeyear": 1983, + "ref-by-count": 2330, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1016998557", + "attributes": { + "title": "A variational method for the calculation of vibrational levels of any triatomic molecule", + "doi": "10.1080/00268978200101082", + "nodeyear": 1982, + "ref-by-count": 122, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060531200", + "attributes": { + "title": "Scaling for first-order phase transitions in thermodynamic and finite systems", + "doi": "10.1103/physrevb.26.2507", + "nodeyear": 1982, + "ref-by-count": 416, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060659692", + "attributes": { + "title": "Microscopic structure of an interacting boson model in terms of the Dyson boson mapping", + "doi": "10.1103/physrevc.26.642", + "nodeyear": 1982, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1055659331", + "attributes": { + "title": "Semiclassical theory of intensities of vibrational fundamentals, overtones, and combination bands", + "doi": "10.1021/j100209a001", + "nodeyear": 1982, + "ref-by-count": 50, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1060787073", + "attributes": { + "title": "Revised Formulation of the Phenomenological Interacting Boson Approximation", + "doi": "10.1103/physrevlett.48.1385", + "nodeyear": 1982, + "ref-by-count": 180, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060659255", + "attributes": { + "title": "Relationship between the Bohr-Mottelson model and the interacting boson model", + "doi": "10.1103/physrevc.25.2733", + "nodeyear": 1982, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060787424", + "attributes": { + "title": "Recurrence Phenomena in Quantum Dynamics", + "doi": "10.1103/physrevlett.48.711", + "nodeyear": 1982, + "ref-by-count": 195, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060469716", + "attributes": { + "title": "Relation between atomic coherent-state representation, state multipoles, and generalized phase-space distributions", + "doi": "10.1103/physreva.24.2889", + "nodeyear": 1981, + "ref-by-count": 210, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060786505", + "attributes": { + "title": "Relation between the Z=64 Shell Closure and the Onset of Deformation at N=88-90", + "doi": "10.1103/physrevlett.47.1433", + "nodeyear": 1981, + "ref-by-count": 201, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060658984", + "attributes": { + "title": "Classical limit of the interacting boson Hamiltonian", + "doi": "10.1103/physrevc.24.684", + "nodeyear": 1981, + "ref-by-count": 121, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019398907", + "attributes": { + "title": "An intrinsic state for the interacting boson model and its relationship to the Bohr-Mottelson model", + "doi": "10.1016/0375-9474(80)90387-5", + "nodeyear": 1980, + "ref-by-count": 348, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1024622720", + "attributes": { + "title": "On global action\u2010angle coordinates", + "doi": "10.1002/cpa.3160330602", + "nodeyear": 1980, + "ref-by-count": 329, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060784758", + "attributes": { + "title": "Periodic Spontaneous Collapse and Revival in a Simple Quantum Model", + "doi": "10.1103/physrevlett.44.1323", + "nodeyear": 1980, + "ref-by-count": 1064, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1017460463", + "attributes": { + "title": "A schematic model for monopole and quadrupole pairing in nuclei", + "doi": "10.1016/0003-4916(80)90381-4", + "nodeyear": 1980, + "ref-by-count": 253, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1109710367", + "attributes": { + "title": "The Nuclear Many-Body Problem", + "doi": "10.1007/978-3-642-61852-9", + "nodeyear": 1980, + "ref-by-count": 3504, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1041047376", + "attributes": { + "title": "Thermal isomerisation of sulphur dicyanide S(CN) 2 to cyanogen isothiocyanate, NCNCS", + "doi": "10.1039/c3980000606a", + "nodeyear": 1980, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1014462654", + "attributes": { + "title": "Interacting boson model of collective nuclear states IV. The O(6) limit", + "doi": "10.1016/0003-4916(79)90347-6", + "nodeyear": 1979, + "ref-by-count": 880, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1059087853", + "attributes": { + "title": "The onset of deformation in the neutron-rich Ba isotopes", + "doi": "10.1088/0305-4616/5/10/008", + "nodeyear": 1979, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060784536", + "attributes": { + "title": "Interacting Boson-Fermion Model of Collective States in Odd-A Nuclei", + "doi": "10.1103/physrevlett.43.679", + "nodeyear": 1979, + "ref-by-count": 446, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1034195309", + "attributes": { + "title": "Quantum maps", + "doi": "10.1016/0003-4916(79)90296-3", + "nodeyear": 1979, + "ref-by-count": 392, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060783526", + "attributes": { + "title": "Spectrum and Eigenfunctions for a Hamiltonian with Stochastic Trajectories", + "doi": "10.1103/physrevlett.42.1189", + "nodeyear": 1979, + "ref-by-count": 502, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060783905", + "attributes": { + "title": "Scaling Theory of Localization: Absence of Quantum Diffusion in Two Dimensions", + "doi": "10.1103/physrevlett.42.673", + "nodeyear": 1979, + "ref-by-count": 4963, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1026471851", + "attributes": { + "title": "Microscopic study of the shape transition in the zirconium isotopes", + "doi": "10.1016/0370-2693(79)90412-x", + "nodeyear": 1979, + "ref-by-count": 112, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1000653517", + "attributes": { + "title": "Nuclear shell model and interacting bosons", + "doi": "10.1016/0375-9474(78)90532-8", + "nodeyear": 1978, + "ref-by-count": 709, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1058956513", + "attributes": { + "title": "The Anderson localisation problem II. Some detailed numerical results", + "doi": "10.1088/0022-3719/10/21/018", + "nodeyear": 1977, + "ref-by-count": 50, + "is_input_DOI": false, + "category_for": "02:0.33;09:0.33;10:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1031874509", + "attributes": { + "title": "Level clustering in the regular spectrum", + "doi": "10.1098/rspa.1977.0140", + "nodeyear": 1977, + "ref-by-count": 967, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1046578644", + "attributes": { + "title": "Towards a unified microscopic description of nuclear deformation", + "doi": "10.1016/0370-2693(77)90825-5", + "nodeyear": 1977, + "ref-by-count": 255, + "is_input_DOI": false, + "category_for": "02:0.60;01:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1058099888", + "attributes": { + "title": "Lie series and invariant functions for analytic symplectic maps", + "doi": "10.1063/1.522868", + "nodeyear": 1976, + "ref-by-count": 261, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1062129885", + "attributes": { + "title": "Table of Integrals, Series, and Products", + "doi": "10.1115/1.3452897", + "nodeyear": 1976, + "ref-by-count": 4850, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1060465772", + "attributes": { + "title": "Superradiant pulses and directed angular momentum states", + "doi": "10.1103/physreva.13.357", + "nodeyear": 1976, + "ref-by-count": 98, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060779458", + "attributes": { + "title": "New Mechanism for a Charge-Density-Wave Instability", + "doi": "10.1103/physrevlett.35.120", + "nodeyear": 1975, + "ref-by-count": 315, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1020691468", + "attributes": { + "title": "Charge-density waves and superlattices in the metallic layered transition metal dichalcogenides", + "doi": "10.1080/00018737500101391", + "nodeyear": 1975, + "ref-by-count": 1747, + "is_input_DOI": false, + "category_for": "02:0.60;01:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1057914937", + "attributes": { + "title": "Lie Groups, Lie Algebras, and Some of Their Applications", + "doi": "10.1063/1.3128987", + "nodeyear": 1974, + "ref-by-count": 582, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1017561574", + "attributes": { + "title": "The (p, t) reactions on nuclei in the rare earth region", + "doi": "10.1016/0375-9474(73)90148-6", + "nodeyear": 1973, + "ref-by-count": 124, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060677000", + "attributes": { + "title": "Study of the (p,t) Reaction on the Even Gadolinium Nuclei", + "doi": "10.1103/physrevc.8.806", + "nodeyear": 1973, + "ref-by-count": 58, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060775623", + "attributes": { + "title": "Scaling Theory for Finite-Size Effects in the Critical Region", + "doi": "10.1103/physrevlett.28.1516", + "nodeyear": 1972, + "ref-by-count": 1154, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060489120", + "attributes": { + "title": "Combined Zeeman and High-Frequency Stark Effects, with Applications to Neutral-Helium Lines Useful in Plasma Diagnostics", + "doi": "10.1103/physreva.5.490", + "nodeyear": 1972, + "ref-by-count": 52, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060838726", + "attributes": { + "title": "Aspects of Time-Dependent Perturbation Theory", + "doi": "10.1103/revmodphys.44.602", + "nodeyear": 1972, + "ref-by-count": 530, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1057743676", + "attributes": { + "title": "Periodic Orbits and Classical Quantization Conditions", + "doi": "10.1063/1.1665596", + "nodeyear": 1971, + "ref-by-count": 1223, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1025513050", + "attributes": { + "title": "Generic bifurcation of periodic points", + "doi": "10.1090/s0002-9947-1970-0259289-x", + "nodeyear": 1970, + "ref-by-count": 154, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1019460196", + "attributes": { + "title": "Quasi-periodic states of an oscillatory hamiltonian", + "doi": "10.1080/00268976900101141", + "nodeyear": 1969, + "ref-by-count": 41, + "is_input_DOI": false, + "category_for": "03:0.60;02:0.40", + "level": "ref_l2" + } + }, + { + "id": "pub.1054019943", + "attributes": { + "title": "A. Mostowski and M. Stark, Introduction to Higher Algebra (Pergamon Press, Oxford, 1964), 474 pp., 45s.", + "doi": "10.1017/s0013091500012888", + "nodeyear": 1969, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1028237179", + "attributes": { + "title": "SU(1,1) quasi-spin formalism of the many-boson system in a spherical field", + "doi": "10.1016/0003-4916(68)90184-x", + "nodeyear": 1968, + "ref-by-count": 83, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1024981283", + "attributes": { + "title": "Two-nucleon transfer and pairing phase transition", + "doi": "10.1016/0375-9474(68)90718-5", + "nodeyear": 1968, + "ref-by-count": 38, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1048074289", + "attributes": { + "title": "Temperature dependence near phase transitions in classical and quant. mech. canonical statistics", + "doi": "10.1007/bf01326224", + "nodeyear": 1967, + "ref-by-count": 61, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1062243952", + "attributes": { + "title": "Handbook of Mathematical Functions", + "doi": "10.1119/1.1972842", + "nodeyear": 1966, + "ref-by-count": 16750, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1060768363", + "attributes": { + "title": "New Mechanism for Superconductivity", + "doi": "10.1103/physrevlett.15.524", + "nodeyear": 1965, + "ref-by-count": 567, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1032128187", + "attributes": { + "title": "Expansion of the Campbell\u2010Baker\u2010Hausdorff formula by computer", + "doi": "10.1002/cpa.3160180111", + "nodeyear": 1965, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1003267521", + "attributes": { + "title": "Levels of Sm152 excited in the Sm150 (t, p) reaction", + "doi": "10.1016/0031-9163(65)91047-4", + "nodeyear": 1965, + "ref-by-count": 70, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1060429472", + "attributes": { + "title": "Observations of Transitions Between Stationary States in a Rotating Magnetic Field", + "doi": "10.1103/physrev.136.a35", + "nodeyear": 1964, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1017315055", + "attributes": { + "title": "Electron correlations in narrow energy bands", + "doi": "10.1098/rspa.1963.0204", + "nodeyear": 1963, + "ref-by-count": 5147, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060427420", + "attributes": { + "title": "Coherent and Incoherent States of the Radiation Field", + "doi": "10.1103/physrev.131.2766", + "nodeyear": 1963, + "ref-by-count": 5175, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1057900505", + "attributes": { + "title": "Nuclear Shell Theory", + "doi": "10.1063/1.3051142", + "nodeyear": 1963, + "ref-by-count": 764, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1057791192", + "attributes": { + "title": "Parameter Differentiation of Quantum\u2010Mechanical Linear Operators", + "doi": "10.1063/1.1724318", + "nodeyear": 1963, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1057796022", + "attributes": { + "title": "Some Causes of Resonant Frequency Shifts in Atomic Beam Machines. I. Shifts Due to Other Frequencies of Excitation", + "doi": "10.1063/1.1729536", + "nodeyear": 1963, + "ref-by-count": 58, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060838113", + "attributes": { + "title": "Effective Interactions and Coupling Schemes in Nuclei", + "doi": "10.1103/revmodphys.34.704", + "nodeyear": 1962, + "ref-by-count": 285, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1057773719", + "attributes": { + "title": "Statistical Theory of the Energy Levels of Complex Systems. I", + "doi": "10.1063/1.1703773", + "nodeyear": 1962, + "ref-by-count": 1428, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1002878811", + "attributes": { + "title": "Pairing forces and nuclear collective motion", + "doi": "10.1016/0003-4916(61)90008-2", + "nodeyear": 1961, + "ref-by-count": 238, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1057797824", + "attributes": { + "title": "Classical and Quantum Mechanical Hypervirial Theorems", + "doi": "10.1063/1.1731427", + "nodeyear": 1960, + "ref-by-count": 296, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1041734929", + "attributes": { + "title": "Quantum effects near a barrier maximum", + "doi": "10.1016/0003-4916(59)90025-9", + "nodeyear": 1959, + "ref-by-count": 181, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1026186494", + "attributes": { + "title": "L. D. Landau and E. M. Lifshitz, Quantum Mechanics, Non\u2010Relativistic Theory. Volume 3 of a Course of Theoretical Physics. Authorized Translation from the Russian by J. B. Sykes and J. S. Bell. XII + 515 S. m. 51 Abb. London\u2010Paris 1958. Pergamon Press. Preis geb. 80,\u2014 s", + "doi": "10.1002/zamm.19590390514", + "nodeyear": 1959, + "ref-by-count": 1752, + "is_input_DOI": false, + "category_for": "01:0.50;09:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1057789554", + "attributes": { + "title": "Geometrical Representation of the Schr\u00f6dinger Equation for Solving Maser Problems", + "doi": "10.1063/1.1722572", + "nodeyear": 1957, + "ref-by-count": 891, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1060417615", + "attributes": { + "title": "Surface Oscillations in Even-Even Nuclei", + "doi": "10.1103/physrev.102.788", + "nodeyear": 1956, + "ref-by-count": 618, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1060416616", + "attributes": { + "title": "Resonance Transitions Induced by Perturbations at Two or More Different Frequencies", + "doi": "10.1103/physrev.100.1191", + "nodeyear": 1955, + "ref-by-count": 145, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060416861", + "attributes": { + "title": "Stark Effect in Rapidly Varying Fields", + "doi": "10.1103/physrev.100.703", + "nodeyear": 1955, + "ref-by-count": 1425, + "is_input_DOI": false, + "category_for": "10:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060464038", + "attributes": { + "title": "Resonance Transitions in Molecular Beam Experiments. I. General Theory of Transitions in a Rotating Magnetic Field", + "doi": "10.1103/physrev.99.1274", + "nodeyear": 1955, + "ref-by-count": 126, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1011703040", + "attributes": { + "title": "On the exponential solution of differential equations for a linear operator", + "doi": "10.1002/cpa.3160070404", + "nodeyear": 1954, + "ref-by-count": 1594, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060837536", + "attributes": { + "title": "Use of Rotating Coordinates in Magnetic Resonance Problems", + "doi": "10.1103/revmodphys.26.167", + "nodeyear": 1954, + "ref-by-count": 331, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1057012353", + "attributes": { + "title": "Sur le probl\u00e8me des r\u00e9sonances entre plusieurs niveaux dans un ensemble d'atomes orient\u00e9s", + "doi": "10.1051/jphysrad:01954001504025100", + "nodeyear": 1954, + "ref-by-count": 38, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1060461257", + "attributes": { + "title": "Mixed Configurations in Nuclei", + "doi": "10.1103/physrev.92.1211", + "nodeyear": 1953, + "ref-by-count": 215, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060460126", + "attributes": { + "title": "The Occurrence of Singularities in the Elastic Frequency Distribution of a Crystal", + "doi": "10.1103/physrev.89.1189", + "nodeyear": 1953, + "ref-by-count": 1058, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060459526", + "attributes": { + "title": "Statistical Theory of Equations of State and Phase Transitions. II. Lattice Gas and Ising Model", + "doi": "10.1103/physrev.87.410", + "nodeyear": 1952, + "ref-by-count": 1652, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060456070", + "attributes": { + "title": "Nuclear Configurations in the Spin-Orbit Coupling Model. I. Empirical Evidence", + "doi": "10.1103/physrev.78.16", + "nodeyear": 1950, + "ref-by-count": 449, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1000891726", + "attributes": { + "title": "XXXI. The structure of an electromagnetic field in the neighbourhood of a cusp of a caustic", + "doi": "10.1080/14786444608561335", + "nodeyear": 1946, + "ref-by-count": 289, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060451198", + "attributes": { + "title": "On the Theory of the Magnetic Resonance Method of Determining Nuclear Moments", + "doi": "10.1103/physrev.58.1061", + "nodeyear": 1940, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060451040", + "attributes": { + "title": "Magnetic Resonance for Nonrotating Fields", + "doi": "10.1103/physrev.57.522", + "nodeyear": 1940, + "ref-by-count": 960, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060450736", + "attributes": { + "title": "Forces in Molecules", + "doi": "10.1103/physrev.56.340", + "nodeyear": 1939, + "ref-by-count": 2944, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1060449417", + "attributes": { + "title": "On the Connection Formulas and the Solutions of the Wave Equation", + "doi": "10.1103/physrev.51.669", + "nodeyear": 1937, + "ref-by-count": 801, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1060449414", + "attributes": { + "title": "Space Quantization in a Gyrating Magnetic Field", + "doi": "10.1103/physrev.51.652", + "nodeyear": 1937, + "ref-by-count": 1235, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1020033193", + "attributes": { + "title": "Atomi orientati in campo magnetico variabile", + "doi": "10.1007/bf02960953", + "nodeyear": 1932, + "ref-by-count": 770, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + } + ], + "edges": [ + { + "source": "pub.1010926410", + "target": "pub.1039829503", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1024402227", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1060831320", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1041909998", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1032579586", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1059076073", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1008158272", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1060741752", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1026356533", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1008126854", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1060839703", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1059079802", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1048699443", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1004858858", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1025472474", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1060810429", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1059069780", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1062233668", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1042734315", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1014751446", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1014050295", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1060500239", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1041856979", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1007741542", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1059070056", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1017250213", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1034025717", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1045564126", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1048928815", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1060507439", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1032795711", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1062466552", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1060759314", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1049262570", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1021560322", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1039860202", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1050389361", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1060485026", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1010926410", + "target": "pub.1060430850", + "attributes": { + "year": 2014, + "level": "ref_l1" + } + }, + { + "source": "pub.1144412825", + "target": "pub.1010926410", + "attributes": { + "year": 2022, + "level": "cite_l1" + } + }, + { + "source": "pub.1144210477", + "target": "pub.1010926410", + "attributes": { + "year": 2021, + "level": "cite_l1" + } + }, + { + "source": "pub.1143466025", + "target": "pub.1010926410", + "attributes": { + "year": 2021, + "level": "cite_l1" + } + }, + { + "source": "pub.1144437177", + "target": "pub.1010926410", + "attributes": { + "year": 2021, + "level": "cite_l1" + } + }, + { + "source": "pub.1141370501", + "target": "pub.1010926410", + "attributes": { + "year": 2021, + "level": "cite_l1" + } + }, + { + "source": "pub.1141139712", + "target": "pub.1010926410", + "attributes": { + "year": 2021, + "level": "cite_l1" + } + }, + { + "source": "pub.1144432008", + "target": "pub.1010926410", + "attributes": { + "year": 2021, + "level": "cite_l1" + } + }, + { + "source": "pub.1138795800", + "target": "pub.1010926410", + "attributes": { + "year": 2021, + "level": "cite_l1" + } + }, + { + "source": "pub.1138581779", + "target": "pub.1010926410", + "attributes": { + "year": 2021, + "level": "cite_l1" + } + }, + { + "source": "pub.1144435924", + "target": "pub.1010926410", + "attributes": { + "year": 2021, + "level": "cite_l1" + } + }, + { + "source": "pub.1136498164", + "target": "pub.1010926410", + "attributes": { + "year": 2021, + "level": "cite_l1" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1010926410", + "attributes": { + "year": 2021, + "level": "cite_l1" + } + }, + { + "source": "pub.1136299609", + "target": "pub.1010926410", + "attributes": { + "year": 2021, + "level": "cite_l1" + } + }, + { + "source": "pub.1132677751", + "target": "pub.1010926410", + "attributes": { + "year": 2021, + "level": "cite_l1" + } + }, + { + "source": "pub.1129534483", + "target": "pub.1010926410", + "attributes": { + "year": 2020, + "level": "cite_l1" + } + }, + { + "source": "pub.1129066525", + "target": "pub.1010926410", + "attributes": { + "year": 2020, + "level": "cite_l1" + } + }, + { + "source": "pub.1126263310", + "target": "pub.1010926410", + "attributes": { + "year": 2020, + "level": "cite_l1" + } + }, + { + "source": "pub.1121827528", + "target": "pub.1010926410", + "attributes": { + "year": 2019, + "level": "cite_l1" + } + }, + { + "source": "pub.1120642228", + "target": "pub.1010926410", + "attributes": { + "year": 2019, + "level": "cite_l1" + } + }, + { + "source": "pub.1121123255", + "target": "pub.1010926410", + "attributes": { + "year": 2019, + "level": "cite_l1" + } + }, + { + "source": "pub.1120846773", + "target": "pub.1010926410", + "attributes": { + "year": 2019, + "level": "cite_l1" + } + }, + { + "source": "pub.1120342145", + "target": "pub.1010926410", + "attributes": { + "year": 2019, + "level": "cite_l1" + } + }, + { + "source": "pub.1117411673", + "target": "pub.1010926410", + "attributes": { + "year": 2019, + "level": "cite_l1" + } + }, + { + "source": "pub.1107951663", + "target": "pub.1010926410", + "attributes": { + "year": 2018, + "level": "cite_l1" + } + }, + { + "source": "pub.1105752007", + "target": "pub.1010926410", + "attributes": { + "year": 2018, + "level": "cite_l1" + } + }, + { + "source": "pub.1099619049", + "target": "pub.1010926410", + "attributes": { + "year": 2017, + "level": "cite_l1" + } + }, + { + "source": "pub.1092024589", + "target": "pub.1010926410", + "attributes": { + "year": 2017, + "level": "cite_l1" + } + }, + { + "source": "pub.1090980852", + "target": "pub.1010926410", + "attributes": { + "year": 2017, + "level": "cite_l1" + } + }, + { + "source": "pub.1090697089", + "target": "pub.1010926410", + "attributes": { + "year": 2017, + "level": "cite_l1" + } + }, + { + "source": "pub.1085593414", + "target": "pub.1010926410", + "attributes": { + "year": 2017, + "level": "cite_l1" + } + }, + { + "source": "pub.1059133328", + "target": "pub.1010926410", + "attributes": { + "year": 2017, + "level": "cite_l1" + } + }, + { + "source": "pub.1048482410", + "target": "pub.1010926410", + "attributes": { + "year": 2017, + "level": "cite_l1" + } + }, + { + "source": "pub.1060766918", + "target": "pub.1010926410", + "attributes": { + "year": 2016, + "level": "cite_l1" + } + }, + { + "source": "pub.1060750764", + "target": "pub.1010926410", + "attributes": { + "year": 2016, + "level": "cite_l1" + } + }, + { + "source": "pub.1060516500", + "target": "pub.1010926410", + "attributes": { + "year": 2016, + "level": "cite_l1" + } + }, + { + "source": "pub.1059005118", + "target": "pub.1010926410", + "attributes": { + "year": 2016, + "level": "cite_l1" + } + }, + { + "source": "pub.1060516111", + "target": "pub.1010926410", + "attributes": { + "year": 2016, + "level": "cite_l1" + } + }, + { + "source": "pub.1060680986", + "target": "pub.1010926410", + "attributes": { + "year": 2016, + "level": "cite_l1" + } + }, + { + "source": "pub.1060649865", + "target": "pub.1010926410", + "attributes": { + "year": 2016, + "level": "cite_l1" + } + }, + { + "source": "pub.1060514338", + "target": "pub.1010926410", + "attributes": { + "year": 2015, + "level": "cite_l1" + } + }, + { + "source": "pub.1059004548", + "target": "pub.1010926410", + "attributes": { + "year": 2015, + "level": "cite_l1" + } + }, + { + "source": "pub.1059136608", + "target": "pub.1010926410", + "attributes": { + "year": 2015, + "level": "cite_l1" + } + }, + { + "source": "pub.1010705109", + "target": "pub.1010926410", + "attributes": { + "year": 2015, + "level": "cite_l1" + } + }, + { + "source": "pub.1032825147", + "target": "pub.1010926410", + "attributes": { + "year": 2015, + "level": "cite_l1" + } + }, + { + "source": "pub.1036861519", + "target": "pub.1010926410", + "attributes": { + "year": 2015, + "level": "cite_l1" + } + }, + { + "source": "pub.1039964510", + "target": "pub.1010926410", + "attributes": { + "year": 2014, + "level": "cite_l1" + } + }, + { + "source": "pub.1003966050", + "target": "pub.1010926410", + "attributes": { + "year": 2014, + "level": "cite_l1" + } + }, + { + "source": "pub.1060512752", + "target": "pub.1010926410", + "attributes": { + "year": 2014, + "level": "cite_l1" + } + }, + { + "source": "pub.1145750437", + "target": "pub.1132677751", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1146014202", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1146014202", + "target": "pub.1129534483", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145897843", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145440026", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145430770", + "target": "pub.1060766918", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145506720", + "target": "pub.1105752007", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145372424", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145280638", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145273436", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145213934", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145849886", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145849886", + "target": "pub.1085593414", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145849842", + "target": "pub.1060516500", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145823845", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145788811", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145754902", + "target": "pub.1060766918", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145754902", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145754886", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145754849", + "target": "pub.1144412825", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145754842", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145668053", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145636450", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145438375", + "target": "pub.1059133328", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145407409", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145168134", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144652253", + "target": "pub.1141370501", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144652253", + "target": "pub.1134894421", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144652253", + "target": "pub.1090697089", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144652253", + "target": "pub.1105752007", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145404710", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145130056", + "target": "pub.1090697089", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145130056", + "target": "pub.1060516111", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145130056", + "target": "pub.1060514338", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145130056", + "target": "pub.1134894421", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144504433", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145011775", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145032383", + "target": "pub.1126263310", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144661259", + "target": "pub.1129534483", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144661259", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144431665", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144412825", + "target": "pub.1036861519", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144412825", + "target": "pub.1090980852", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144412825", + "target": "pub.1092024589", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144412825", + "target": "pub.1120342145", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144412825", + "target": "pub.1090697089", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144412825", + "target": "pub.1060516111", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144412825", + "target": "pub.1138795800", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144412825", + "target": "pub.1105752007", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144412825", + "target": "pub.1132677751", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144412825", + "target": "pub.1060750764", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144412825", + "target": "pub.1134894421", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144412825", + "target": "pub.1117411673", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144412825", + "target": "pub.1060514338", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1146014238", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145130013", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145077099", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145077057", + "target": "pub.1085593414", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145042826", + "target": "pub.1121123255", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145016796", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144825837", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144625101", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144504676", + "target": "pub.1060766918", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144370522", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144370491", + "target": "pub.1060766918", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144370491", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144370491", + "target": "pub.1085593414", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1145001907", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1144437688", + "target": "pub.1032825147", + "attributes": { + "year": 2022, + "level": "cite_l2" + } + }, + { + "source": "pub.1143938533", + "target": "pub.1060766918", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144267107", + "target": "pub.1060514338", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144237217", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144210477", + "target": "pub.1134894421", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144210477", + "target": "pub.1039964510", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144210477", + "target": "pub.1120342145", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144210477", + "target": "pub.1121827528", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144210477", + "target": "pub.1117411673", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144210477", + "target": "pub.1136299609", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144210477", + "target": "pub.1138795800", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144210477", + "target": "pub.1092024589", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144210477", + "target": "pub.1105752007", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144210477", + "target": "pub.1010705109", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144176750", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144500315", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144112210", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144057503", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143844860", + "target": "pub.1141139712", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143844860", + "target": "pub.1134894421", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143844860", + "target": "pub.1036861519", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143777724", + "target": "pub.1059133328", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143745319", + "target": "pub.1121827528", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143725448", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144210501", + "target": "pub.1060516111", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144210501", + "target": "pub.1134894421", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144210501", + "target": "pub.1141370501", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144210501", + "target": "pub.1138795800", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144210501", + "target": "pub.1117411673", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144115960", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144115499", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143939848", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143844418", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143724565", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136420764", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143455107", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1142733768", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143320265", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1142441911", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1142441613", + "target": "pub.1085593414", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1142424779", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143466025", + "target": "pub.1134894421", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143466025", + "target": "pub.1121827528", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143466025", + "target": "pub.1105752007", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143466025", + "target": "pub.1138795800", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143466025", + "target": "pub.1129066525", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143466025", + "target": "pub.1060750764", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143466025", + "target": "pub.1138581779", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143466025", + "target": "pub.1060516500", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143466025", + "target": "pub.1060516111", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143466025", + "target": "pub.1117411673", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143466025", + "target": "pub.1060514338", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143466025", + "target": "pub.1120342145", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143042212", + "target": "pub.1060766918", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143042212", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1142911413", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1142728786", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1142661877", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1142589015", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1142577463", + "target": "pub.1120642228", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1142435873", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1142330688", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140972911", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1139312982", + "target": "pub.1132677751", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1139312982", + "target": "pub.1134894421", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1143151380", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141523252", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1142019154", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141572181", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1142000959", + "target": "pub.1121827528", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141928574", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141928574", + "target": "pub.1136299609", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141852620", + "target": "pub.1085593414", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141852620", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141763682", + "target": "pub.1120342145", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144433670", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141641422", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141277687", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1142252018", + "target": "pub.1060516500", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1142248564", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141918917", + "target": "pub.1060766918", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141918911", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141886712", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141886629", + "target": "pub.1121827528", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141886629", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141793655", + "target": "pub.1134894421", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141423415", + "target": "pub.1090697089", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144437177", + "target": "pub.1060514338", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144437177", + "target": "pub.1090697089", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144437177", + "target": "pub.1092024589", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144437177", + "target": "pub.1036861519", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144437177", + "target": "pub.1132677751", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144437177", + "target": "pub.1060516111", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144437177", + "target": "pub.1105752007", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144437177", + "target": "pub.1060750764", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144437177", + "target": "pub.1117411673", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144437177", + "target": "pub.1090980852", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144437177", + "target": "pub.1138795800", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141424092", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141081318", + "target": "pub.1090980852", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141370501", + "target": "pub.1132677751", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141370501", + "target": "pub.1136299609", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141370501", + "target": "pub.1138795800", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141370501", + "target": "pub.1090697089", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141370501", + "target": "pub.1059136608", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141370501", + "target": "pub.1092024589", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141370501", + "target": "pub.1003966050", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141370501", + "target": "pub.1060516500", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141370501", + "target": "pub.1134894421", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141370501", + "target": "pub.1060516111", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141370501", + "target": "pub.1060514338", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141370501", + "target": "pub.1105752007", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141370501", + "target": "pub.1121827528", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141198298", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141139712", + "target": "pub.1090697089", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141139712", + "target": "pub.1092024589", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141139712", + "target": "pub.1120342145", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141139712", + "target": "pub.1134894421", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141139712", + "target": "pub.1060514338", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141139712", + "target": "pub.1132677751", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141139712", + "target": "pub.1036861519", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141139712", + "target": "pub.1105752007", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141139712", + "target": "pub.1136299609", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141139712", + "target": "pub.1060516111", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141139712", + "target": "pub.1060516500", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141139712", + "target": "pub.1138795800", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141117728", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141039563", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141039539", + "target": "pub.1136299609", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141007405", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140992787", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140946090", + "target": "pub.1085593414", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140946090", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140903868", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144436951", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141458068", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141330553", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141330548", + "target": "pub.1134894421", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141330548", + "target": "pub.1138795800", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141082269", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141082265", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140946998", + "target": "pub.1085593414", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140875048", + "target": "pub.1060512752", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140813822", + "target": "pub.1060766918", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1139687004", + "target": "pub.1121827528", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140631120", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140376339", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140327645", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140210127", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140251168", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140149233", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140780393", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140748154", + "target": "pub.1060516111", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140595261", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140595176", + "target": "pub.1090697089", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140449264", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140411348", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140385244", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140385244", + "target": "pub.1060516111", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140343664", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1139432247", + "target": "pub.1085593414", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1139432247", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1139715974", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1139696368", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1139686944", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137941137", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144432008", + "target": "pub.1060514338", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144432008", + "target": "pub.1090697089", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144432008", + "target": "pub.1092024589", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144432008", + "target": "pub.1036861519", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144432008", + "target": "pub.1132677751", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144432008", + "target": "pub.1060516111", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144432008", + "target": "pub.1105752007", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144432008", + "target": "pub.1060750764", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144432008", + "target": "pub.1120342145", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144432008", + "target": "pub.1117411673", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144432008", + "target": "pub.1090980852", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1139359212", + "target": "pub.1120342145", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141244634", + "target": "pub.1092024589", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140043181", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1139809449", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1139809443", + "target": "pub.1085593414", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1139801116", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1139365607", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1139320696", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1139210985", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1139155188", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1139098613", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138795800", + "target": "pub.1117411673", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138795800", + "target": "pub.1036861519", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138795800", + "target": "pub.1134894421", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138795800", + "target": "pub.1060514338", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138795800", + "target": "pub.1105752007", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138695988", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1139212437", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138955510", + "target": "pub.1121827528", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138886959", + "target": "pub.1121827528", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138581779", + "target": "pub.1003966050", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138581779", + "target": "pub.1059136608", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138581779", + "target": "pub.1134894421", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138581779", + "target": "pub.1117411673", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138581779", + "target": "pub.1129066525", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138581779", + "target": "pub.1060516500", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137877758", + "target": "pub.1129066525", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137877758", + "target": "pub.1134894421", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138289216", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141651369", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138216900", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138186330", + "target": "pub.1105752007", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144435924", + "target": "pub.1060514338", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144435924", + "target": "pub.1090697089", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144435924", + "target": "pub.1092024589", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144435924", + "target": "pub.1036861519", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144435924", + "target": "pub.1132677751", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144435924", + "target": "pub.1060516111", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144435924", + "target": "pub.1105752007", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144435924", + "target": "pub.1060750764", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144435924", + "target": "pub.1120342145", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144435924", + "target": "pub.1117411673", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144435924", + "target": "pub.1090980852", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138114367", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138249357", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138186281", + "target": "pub.1085593414", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138114325", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137890988", + "target": "pub.1090980852", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137890988", + "target": "pub.1060516111", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137890988", + "target": "pub.1060514338", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137773392", + "target": "pub.1048482410", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134453264", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137261348", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137484959", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137437656", + "target": "pub.1132677751", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136592478", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137167395", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137494538", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137491775", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137490808", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137410827", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137311787", + "target": "pub.1085593414", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137235025", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137168785", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137035608", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136994042", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136986948", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136986948", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136721709", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136701453", + "target": "pub.1060766918", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136701453", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136666903", + "target": "pub.1060516500", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136666903", + "target": "pub.1060516111", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136666903", + "target": "pub.1060514338", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136666903", + "target": "pub.1092024589", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136666903", + "target": "pub.1136299609", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136666903", + "target": "pub.1134894421", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134743337", + "target": "pub.1117411673", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134743337", + "target": "pub.1060680986", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136498164", + "target": "pub.1121827528", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1092024589", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1099619049", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1120846773", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1060680986", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1010705109", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1090697089", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1090980852", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1126263310", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1036861519", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1120342145", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1117411673", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1129066525", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1060750764", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1060514338", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1121827528", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1059005118", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1132677751", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1003966050", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1039964510", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1060516111", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1105752007", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1060516500", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1059136608", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134894421", + "target": "pub.1060649865", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136367994", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136299609", + "target": "pub.1117411673", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136299609", + "target": "pub.1120342145", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136299609", + "target": "pub.1132677751", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136299609", + "target": "pub.1036861519", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136299609", + "target": "pub.1090980852", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136299609", + "target": "pub.1060750764", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136299609", + "target": "pub.1090697089", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136299609", + "target": "pub.1092024589", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136299609", + "target": "pub.1060516500", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136299609", + "target": "pub.1060516111", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136299609", + "target": "pub.1060514338", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136299609", + "target": "pub.1105752007", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136299609", + "target": "pub.1121827528", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136655132", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136504030", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136477967", + "target": "pub.1117411673", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136477967", + "target": "pub.1136498164", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136477967", + "target": "pub.1134894421", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136477967", + "target": "pub.1060516111", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136477967", + "target": "pub.1060514338", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136477967", + "target": "pub.1105752007", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136417273", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136414044", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136226159", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136043176", + "target": "pub.1121827528", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1135722934", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1133448902", + "target": "pub.1105752007", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1132677751", + "target": "pub.1120342145", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1132677751", + "target": "pub.1059136608", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1132677751", + "target": "pub.1092024589", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1132677751", + "target": "pub.1134894421", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1132677751", + "target": "pub.1060516111", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1132677751", + "target": "pub.1060514338", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1132677751", + "target": "pub.1060516500", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1132677751", + "target": "pub.1105752007", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1135442248", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1135329747", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1135194875", + "target": "pub.1121827528", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140345559", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1135141218", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1140343596", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1135773784", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1135472070", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1135372133", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1135372133", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1135327462", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1135309838", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1135306894", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1135033325", + "target": "pub.1085593414", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1135033325", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1132630990", + "target": "pub.1060750764", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1132630990", + "target": "pub.1060516500", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1130120687", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134736715", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134729998", + "target": "pub.1121827528", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134295650", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134295650", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1136535762", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1135035980", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134951348", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134796271", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134708221", + "target": "pub.1085593414", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1134708221", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1133369672", + "target": "pub.1117411673", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1133369672", + "target": "pub.1059004548", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1144696405", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1141996449", + "target": "pub.1121123255", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1138681817", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1137164603", + "target": "pub.1032825147", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1132415037", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1133653821", + "target": "pub.1060766918", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1133434712", + "target": "pub.1060516111", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1132597664", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1133361819", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1133346206", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1133100286", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1134158402", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1134040199", + "target": "pub.1090697089", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1134040199", + "target": "pub.1060516500", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1134040199", + "target": "pub.1060516111", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1134040199", + "target": "pub.1060514338", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1134037611", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1134035516", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1133997345", + "target": "pub.1085593414", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1133741565", + "target": "pub.1085593414", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1133735060", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1133735060", + "target": "pub.1060766918", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1133499708", + "target": "pub.1085593414", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1133402404", + "target": "pub.1060516500", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1133344182", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1133099711", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1132237880", + "target": "pub.1105752007", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1132036387", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1131329755", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1133080576", + "target": "pub.1121827528", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1133125125", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1132781598", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1132635554", + "target": "pub.1121123255", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1132626689", + "target": "pub.1121827528", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1132300850", + "target": "pub.1121123255", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1132300850", + "target": "pub.1060516111", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1132266415", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1132781568", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1132682732", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1132672783", + "target": "pub.1060514338", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1132495853", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1132252119", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1132060808", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1131969118", + "target": "pub.1060766918", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1130243954", + "target": "pub.1060766918", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1131841249", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1131841249", + "target": "pub.1060766918", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1140347748", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1132055741", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1131923946", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1131725038", + "target": "pub.1085593414", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1131633965", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1131535042", + "target": "pub.1085593414", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1131497997", + "target": "pub.1121827528", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1131390335", + "target": "pub.1085593414", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1131390335", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1130765968", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1128676541", + "target": "pub.1060680986", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1131177201", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1131131373", + "target": "pub.1060516111", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1131131373", + "target": "pub.1090697089", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1131100748", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1130030918", + "target": "pub.1120342145", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1130753379", + "target": "pub.1090697089", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1130753379", + "target": "pub.1105752007", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1130315991", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1130688900", + "target": "pub.1121827528", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1131193925", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1131193618", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1131100771", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1130836894", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1130756838", + "target": "pub.1121123255", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1130750198", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1130316025", + "target": "pub.1090980852", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1124910985", + "target": "pub.1121827528", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1130469797", + "target": "pub.1085593414", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1130394801", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1130268705", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1130214677", + "target": "pub.1060516111", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1130214677", + "target": "pub.1060514338", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1129902361", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1129855599", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1130392310", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1129926643", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1129685555", + "target": "pub.1060766918", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1129685555", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1129594568", + "target": "pub.1121123255", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1129534483", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1129384214", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1129066525", + "target": "pub.1117411673", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1129066525", + "target": "pub.1059136608", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1129066525", + "target": "pub.1003966050", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1129066525", + "target": "pub.1121827528", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1128974254", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1129713716", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1129492912", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1129063470", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1128941497", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1128912140", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1128533067", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1128836880", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1125908542", + "target": "pub.1120342145", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1128827266", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1128505545", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1129532989", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1128466326", + "target": "pub.1126263310", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1128416461", + "target": "pub.1060516500", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1128125903", + "target": "pub.1060766918", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1128741464", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1128303210", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1128253343", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1128250379", + "target": "pub.1060766918", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1128246725", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1128224551", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1128130936", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127296857", + "target": "pub.1121827528", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127296857", + "target": "pub.1060750764", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127296857", + "target": "pub.1105752007", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127987694", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127977347", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127865614", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127470058", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127470058", + "target": "pub.1107951663", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127470058", + "target": "pub.1010705109", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127517958", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127358108", + "target": "pub.1060649865", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127346740", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127989066", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127955024", + "target": "pub.1085593414", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127897454", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127889093", + "target": "pub.1060514338", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127764217", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127758910", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127625202", + "target": "pub.1090980852", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127625202", + "target": "pub.1039964510", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127607114", + "target": "pub.1085593414", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127607114", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127358045", + "target": "pub.1121123255", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127358045", + "target": "pub.1121827528", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1125292836", + "target": "pub.1121123255", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1126383906", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1125977593", + "target": "pub.1059133328", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127630356", + "target": "pub.1121827528", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127650081", + "target": "pub.1085593414", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127130950", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1126727524", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1126480743", + "target": "pub.1060766918", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1126271157", + "target": "pub.1121827528", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1126269333", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1126263310", + "target": "pub.1059004548", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1126263310", + "target": "pub.1121827528", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127947148", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1127515489", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1126759415", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1126173583", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1126057889", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1123928512", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1125920858", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1125550793", + "target": "pub.1121123255", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1126915081", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1126909693", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1125953276", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1125497800", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1125326068", + "target": "pub.1060766918", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1125326068", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1125325450", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1125160480", + "target": "pub.1085593414", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1125157056", + "target": "pub.1121123255", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1124776377", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1125164136", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1125161664", + "target": "pub.1060766918", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1125153368", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1121624158", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1124462573", + "target": "pub.1060514338", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1124409613", + "target": "pub.1085593414", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1123624596", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1124230276", + "target": "pub.1060514338", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1124230253", + "target": "pub.1120342145", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1124230253", + "target": "pub.1121827528", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1124230253", + "target": "pub.1060516111", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1124230253", + "target": "pub.1060514338", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1124230253", + "target": "pub.1105752007", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1124254326", + "target": "pub.1121827528", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1124254326", + "target": "pub.1060516111", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1124048582", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1125053995", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1124831533", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1124103171", + "target": "pub.1060766918", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1123986522", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1123351695", + "target": "pub.1032825147", + "attributes": { + "year": 2020, + "level": "cite_l2" + } + }, + { + "source": "pub.1123673879", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1123430435", + "target": "pub.1121123255", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1123097339", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1123643952", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1123446111", + "target": "pub.1059133328", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1123268268", + "target": "pub.1090980852", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1123268268", + "target": "pub.1059136608", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1123268268", + "target": "pub.1039964510", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1123262658", + "target": "pub.1120342145", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1123262658", + "target": "pub.1036861519", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1123262658", + "target": "pub.1090697089", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1123262658", + "target": "pub.1059136608", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1123262658", + "target": "pub.1092024589", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1123262658", + "target": "pub.1060516111", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1123262658", + "target": "pub.1060514338", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1123262658", + "target": "pub.1105752007", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1123187479", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1123187479", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122945773", + "target": "pub.1121123255", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122948207", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122908545", + "target": "pub.1060766918", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122419408", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122364137", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122299651", + "target": "pub.1010705109", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122298943", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122260988", + "target": "pub.1048482410", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122260988", + "target": "pub.1060649865", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122960341", + "target": "pub.1059133328", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122929220", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122929220", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122682309", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122560614", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122263731", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122003630", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122258473", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122233280", + "target": "pub.1060766918", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122016549", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121972957", + "target": "pub.1059004548", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121864026", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121860390", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121829677", + "target": "pub.1117411673", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120967654", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121574121", + "target": "pub.1060514338", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121574121", + "target": "pub.1060516111", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121574121", + "target": "pub.1105752007", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121497945", + "target": "pub.1060766918", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121497945", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122147311", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121992405", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121860362", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121691603", + "target": "pub.1060516500", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121454130", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121432950", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121151157", + "target": "pub.1060766918", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121123255", + "target": "pub.1010705109", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121045652", + "target": "pub.1060766918", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121045652", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121046991", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121007947", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120955481", + "target": "pub.1060516500", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120846795", + "target": "pub.1060514338", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120846795", + "target": "pub.1120846773", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120846794", + "target": "pub.1059005118", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120846794", + "target": "pub.1120846773", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120846792", + "target": "pub.1060680986", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120846778", + "target": "pub.1060514338", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120846778", + "target": "pub.1060516111", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120846773", + "target": "pub.1060680986", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120846773", + "target": "pub.1090980852", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120846773", + "target": "pub.1090697089", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120846773", + "target": "pub.1059136608", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120846773", + "target": "pub.1060516111", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120846773", + "target": "pub.1059005118", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120846773", + "target": "pub.1105752007", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120795450", + "target": "pub.1090697089", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121403245", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121334827", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1121155174", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120975898", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120721646", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120701000", + "target": "pub.1060516111", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120398331", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120211774", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120211774", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120342145", + "target": "pub.1090980852", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120342145", + "target": "pub.1036861519", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120342145", + "target": "pub.1092024589", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120342145", + "target": "pub.1060516111", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120342145", + "target": "pub.1060514338", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120342145", + "target": "pub.1090697089", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120342145", + "target": "pub.1105752007", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120310683", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120248299", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120211967", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120144828", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1129971658", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120021739", + "target": "pub.1105752007", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120025014", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1122873965", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1129960633", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1118043792", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1120033159", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1119959099", + "target": "pub.1060766918", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1119952776", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1119919209", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1119787578", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1119787578", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1119784980", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1118069090", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1118014967", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1118012672", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1117972269", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1117943417", + "target": "pub.1060766918", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1117728688", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1116648359", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1113330752", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1113236708", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1112366493", + "target": "pub.1059136608", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1117476838", + "target": "pub.1105752007", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1117346459", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1117411673", + "target": "pub.1060680986", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1117411673", + "target": "pub.1090980852", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1117411673", + "target": "pub.1060750764", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1117411673", + "target": "pub.1090697089", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1117411673", + "target": "pub.1059136608", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1117411673", + "target": "pub.1003966050", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1117411673", + "target": "pub.1060516111", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1117411673", + "target": "pub.1105752007", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1117307345", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1117164490", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1117020737", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1116850435", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1116850435", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1116136000", + "target": "pub.1060512752", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1115676205", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1115676205", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1115666769", + "target": "pub.1060512752", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1114819653", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1114044946", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1113910487", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1113910487", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1113910476", + "target": "pub.1059133328", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1114054109", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1114042284", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1110902421", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1113484172", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1113409952", + "target": "pub.1121123255", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1112781951", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1110424594", + "target": "pub.1059004548", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1110424594", + "target": "pub.1060516111", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1110424594", + "target": "pub.1060514338", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1115224353", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1114045023", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1113678661", + "target": "pub.1010705109", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1113626564", + "target": "pub.1060516500", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1113308230", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1116854479", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1111062357", + "target": "pub.1060649865", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1112264021", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1112736421", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1112736421", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1112555157", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1112555157", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1112989773", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1112941993", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1112857110", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1112687817", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1112472200", + "target": "pub.1060516500", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1112465992", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1112265114", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1112062976", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1111443711", + "target": "pub.1060750764", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1111540938", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1111440115", + "target": "pub.1105752007", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1111323071", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1111323071", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1110719005", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1112988887", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1111668834", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1111666460", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1111515569", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1111459176", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1111314608", + "target": "pub.1085593414", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1111062951", + "target": "pub.1032825147", + "attributes": { + "year": 2019, + "level": "cite_l2" + } + }, + { + "source": "pub.1110909831", + "target": "pub.1085593414", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1110787100", + "target": "pub.1060766918", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1110647887", + "target": "pub.1085593414", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1110647887", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1110455993", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1110379274", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1110363972", + "target": "pub.1060766918", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1110910541", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1110910519", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1110831877", + "target": "pub.1060766918", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1110831877", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1110708995", + "target": "pub.1085593414", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1110708995", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1110396032", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1110269247", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1110275806", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107970491", + "target": "pub.1060514338", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1110072642", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1111914501", + "target": "pub.1085593414", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1111914501", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1110266071", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1109811573", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1109804585", + "target": "pub.1060766918", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1109804585", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1108054136", + "target": "pub.1085593414", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1108034986", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107871386", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107130576", + "target": "pub.1036861519", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107130576", + "target": "pub.1092024589", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107130576", + "target": "pub.1060516111", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107130576", + "target": "pub.1105752007", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107130576", + "target": "pub.1060514338", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107306817", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107571622", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107951663", + "target": "pub.1010705109", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107951663", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107651369", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107651305", + "target": "pub.1060516500", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107350062", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107301894", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107298680", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107235090", + "target": "pub.1060516500", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1106476468", + "target": "pub.1085593414", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107130953", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1103720457", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1106352877", + "target": "pub.1060766918", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1106711291", + "target": "pub.1060516111", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1106608664", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107231743", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1106912640", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1106809654", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1106602075", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1106159222", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105306956", + "target": "pub.1060766918", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1104255664", + "target": "pub.1060766918", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1106352452", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1106412628", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1106276823", + "target": "pub.1085593414", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1106276823", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105481744", + "target": "pub.1036861519", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105481744", + "target": "pub.1090980852", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105481744", + "target": "pub.1060766918", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105481744", + "target": "pub.1060514338", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1106081003", + "target": "pub.1060766918", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105993631", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107206378", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105647673", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1106391022", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1106258757", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105855817", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105571339", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105686278", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105624464", + "target": "pub.1090697089", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105577723", + "target": "pub.1059133328", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1107278146", + "target": "pub.1085593414", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105919059", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105752007", + "target": "pub.1059136608", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105752007", + "target": "pub.1060516111", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105752007", + "target": "pub.1059005118", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105752007", + "target": "pub.1060514338", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105686214", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105672523", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105590292", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105590279", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105217433", + "target": "pub.1085593414", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1104382572", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105237498", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105229539", + "target": "pub.1003966050", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105020595", + "target": "pub.1060766918", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1104999161", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1104586548", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1104337736", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1104046499", + "target": "pub.1060766918", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1104217963", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1104046048", + "target": "pub.1085593414", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1104174226", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1103957661", + "target": "pub.1085593414", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1103891869", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1104244423", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1104186237", + "target": "pub.1092024589", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1103957640", + "target": "pub.1085593414", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1103957630", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1103799511", + "target": "pub.1092024589", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1105625178", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1103354626", + "target": "pub.1085593414", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1103354626", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1103223307", + "target": "pub.1060766918", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101044952", + "target": "pub.1060516111", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101044952", + "target": "pub.1060514338", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101270698", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1100407275", + "target": "pub.1010705109", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1100407275", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1106249535", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1106243826", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1103695948", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1103614809", + "target": "pub.1085593414", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1103567271", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1103567269", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1103567266", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1103476382", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1103285503", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101728734", + "target": "pub.1085593414", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101728734", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101728724", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101699045", + "target": "pub.1059005118", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101635473", + "target": "pub.1060516111", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101459080", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1100249419", + "target": "pub.1060766918", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101875909", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101865179", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101787426", + "target": "pub.1085593414", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101568086", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101270671", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101203202", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101164938", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101163815", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1100978693", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1086256884", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101132622", + "target": "pub.1048482410", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101046754", + "target": "pub.1060516500", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1100847489", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1100847484", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1100693529", + "target": "pub.1060680986", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1100658085", + "target": "pub.1036861519", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1100590718", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1100333755", + "target": "pub.1059005118", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1100180200", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1100757504", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1100700491", + "target": "pub.1085593414", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1100700491", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1100502468", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1100502449", + "target": "pub.1060516500", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1101180204", + "target": "pub.1059005118", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1092917025", + "target": "pub.1032825147", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1109707572", + "target": "pub.1060649865", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1109706437", + "target": "pub.1036861519", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1109706437", + "target": "pub.1003966050", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1109706437", + "target": "pub.1059136608", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1109706437", + "target": "pub.1060514338", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1109706437", + "target": "pub.1060516500", + "attributes": { + "year": 2018, + "level": "cite_l2" + } + }, + { + "source": "pub.1093034781", + "target": "pub.1059133328", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1100299734", + "target": "pub.1036861519", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1099619049", + "target": "pub.1090697089", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1099619049", + "target": "pub.1059136608", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1099619049", + "target": "pub.1060516111", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1099750796", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1101194950", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1099750800", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1093118725", + "target": "pub.1060516500", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1099862024", + "target": "pub.1060649865", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1093100577", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092756070", + "target": "pub.1060516500", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092770968", + "target": "pub.1060516111", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092770968", + "target": "pub.1060514338", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092687423", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092561474", + "target": "pub.1085593414", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092277819", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092881230", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092718053", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092642445", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092484424", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092484423", + "target": "pub.1085593414", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092484423", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091324316", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092396862", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092104621", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092104602", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092254361", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092218368", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092172298", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092104544", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092104499", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092072911", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092072895", + "target": "pub.1085593414", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092024589", + "target": "pub.1036861519", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092024589", + "target": "pub.1059136608", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092024589", + "target": "pub.1003966050", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092024589", + "target": "pub.1060516500", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092024589", + "target": "pub.1060516111", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092016824", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091629732", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091511165", + "target": "pub.1059005118", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1092035474", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091937945", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091808750", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091676677", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091655390", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091256104", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091261840", + "target": "pub.1085593414", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091081056", + "target": "pub.1060514338", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090692587", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091439255", + "target": "pub.1085593414", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091439255", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091357776", + "target": "pub.1060649865", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091268146", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091149741", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091132193", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091016901", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1086046359", + "target": "pub.1060512752", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091001773", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090980852", + "target": "pub.1036861519", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090980852", + "target": "pub.1060516111", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090980852", + "target": "pub.1060514338", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090740511", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090697089", + "target": "pub.1003966050", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090697089", + "target": "pub.1060516500", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090697089", + "target": "pub.1060516111", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090697089", + "target": "pub.1059005118", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090639115", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090124343", + "target": "pub.1060514338", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090124343", + "target": "pub.1059005118", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090547461", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1091314933", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090809058", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090639004", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090537266", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090432014", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085973336", + "target": "pub.1060516500", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090356064", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1086147780", + "target": "pub.1048482410", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1086147780", + "target": "pub.1060649865", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090727222", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090727222", + "target": "pub.1085593414", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1086037788", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085930196", + "target": "pub.1060512752", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085868342", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1102822370", + "target": "pub.1059005118", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090449453", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085918234", + "target": "pub.1060680986", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090858939", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085784151", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084176371", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085784080", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085775517", + "target": "pub.1003966050", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085775517", + "target": "pub.1060516111", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085775517", + "target": "pub.1060514338", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085775507", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085775482", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085524357", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085524341", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085593414", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085277889", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085120424", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085242099", + "target": "pub.1036861519", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085242099", + "target": "pub.1059005118", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084868052", + "target": "pub.1060649865", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1090229831", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085191011", + "target": "pub.1085593414", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1085191011", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084786597", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084786582", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084603807", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084174937", + "target": "pub.1060516500", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084007961", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084682300", + "target": "pub.1039964510", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084174915", + "target": "pub.1060516500", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084198171", + "target": "pub.1010705109", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084198121", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084197894", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084197582", + "target": "pub.1060649865", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084197545", + "target": "pub.1060766918", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084197534", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1083406696", + "target": "pub.1059004548", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1083406696", + "target": "pub.1060516111", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1083406696", + "target": "pub.1060514338", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1083935671", + "target": "pub.1036861519", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1083439843", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1083816155", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1059133328", + "target": "pub.1060516111", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1083935160", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1083717390", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1083643131", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1083522251", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1011995146", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1059164313", + "target": "pub.1036861519", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1107414917", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084604018", + "target": "pub.1060516111", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084603856", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084603654", + "target": "pub.1036861519", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084603654", + "target": "pub.1060516111", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084603654", + "target": "pub.1060514338", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1084199340", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1083506581", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1060653834", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1060517495", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1031526734", + "target": "pub.1032825147", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1048482410", + "target": "pub.1060512752", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1048482410", + "target": "pub.1060649865", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1048482410", + "target": "pub.1036861519", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1013892465", + "target": "pub.1060512752", + "attributes": { + "year": 2017, + "level": "cite_l2" + } + }, + { + "source": "pub.1060766918", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1087286925", + "target": "pub.1060516500", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060681712", + "target": "pub.1059004548", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060653553", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060653350", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060653304", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060766700", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060750764", + "target": "pub.1003966050", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060750764", + "target": "pub.1060516500", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060750764", + "target": "pub.1060516111", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060517140", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060517139", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060517109", + "target": "pub.1060512752", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1002023992", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060652562", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060516924", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060516896", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060516887", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060516756", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1059164227", + "target": "pub.1059004548", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1059164227", + "target": "pub.1060514338", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060750417", + "target": "pub.1036861519", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060750417", + "target": "pub.1060649865", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1008292555", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1059137701", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060652244", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060652210", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060652116", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060516738", + "target": "pub.1060514338", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1014532593", + "target": "pub.1036861519", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1059174523", + "target": "pub.1060649865", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060651758", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060516500", + "target": "pub.1036861519", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060516500", + "target": "pub.1059136608", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060516500", + "target": "pub.1003966050", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060516500", + "target": "pub.1060514338", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060516440", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1008230481", + "target": "pub.1060514338", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060750048", + "target": "pub.1003966050", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1052263311", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1059005118", + "target": "pub.1059004548", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060651068", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060516111", + "target": "pub.1036861519", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060516111", + "target": "pub.1060514338", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1024274677", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060765840", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1010802241", + "target": "pub.1036861519", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1010802241", + "target": "pub.1060516111", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1010802241", + "target": "pub.1060514338", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060765767", + "target": "pub.1060514338", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1062666833", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1059164050", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060765582", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1059137444", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060749720", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1045365832", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1013025567", + "target": "pub.1003966050", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060650091", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1059164027", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1065176096", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060680986", + "target": "pub.1060514338", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060649845", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060649780", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060649672", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060515586", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060515460", + "target": "pub.1003966050", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060515459", + "target": "pub.1060514338", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1017232487", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1008885136", + "target": "pub.1010705109", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1008885136", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060765248", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060765225", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1022845164", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060515226", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060749074", + "target": "pub.1036861519", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060749074", + "target": "pub.1060514338", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060649137", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060649072", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1060514903", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1049246486", + "target": "pub.1032825147", + "attributes": { + "year": 2016, + "level": "cite_l2" + } + }, + { + "source": "pub.1059136734", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1060764674", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1060514725", + "target": "pub.1036861519", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1060514696", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1036641112", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1064625019", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1027442816", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1060764456", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1060514338", + "target": "pub.1036861519", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1034517301", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1059136608", + "target": "pub.1036861519", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1059136608", + "target": "pub.1039964510", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1060764168", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1060514281", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1034661114", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1028219105", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1016473610", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1046940591", + "target": "pub.1010705109", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1060764026", + "target": "pub.1060512752", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1060514082", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1049705098", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1060763935", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1060513942", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1020950855", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1002407881", + "target": "pub.1036861519", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1032625305", + "target": "pub.1060512752", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1022791415", + "target": "pub.1060512752", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1059004792", + "target": "pub.1036861519", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1053517731", + "target": "pub.1036861519", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1046942581", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1010257037", + "target": "pub.1060512752", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1039122836", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1033596012", + "target": "pub.1032825147", + "attributes": { + "year": 2015, + "level": "cite_l2" + } + }, + { + "source": "pub.1009958864", + "target": "pub.1032825147", + "attributes": { + "year": 2014, + "level": "cite_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1003363712", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1057699225", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1057717131", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1058031840", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1024402227", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1060831320", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1048482240", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1010453004", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1006613232", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1058050263", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1060504243", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1006289352", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1010607212", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1051958598", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1058075670", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1036408635", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1011073909", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1035173735", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1060828404", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1108131266", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1060839703", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1004021375", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1045346582", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1049201712", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1060784904", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1038056243", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1029020774", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1007403980", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1017123471", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1057963818", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1035001229", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1056050981", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1058046639", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1017192838", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1006189532", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1016014950", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1057869519", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1057982297", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1019387204", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1047521083", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1058032193", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1009926257", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1018979965", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1054491307", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1058047895", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1046878062", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1015885405", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1004092630", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1020252590", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1058101157", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1000086198", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1030349669", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1026394040", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1039829503", + "target": "pub.1057929181", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1027944496", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1060506152", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1051208711", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1004826141", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1043279965", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1024402227", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1046281967", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1035787773", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1052759525", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1060443588", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1060741752", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1027689745", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1013295901", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1018731307", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1034618848", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1018266335", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1049288392", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1050389361", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1031435740", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1060500350", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1059079802", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1060743705", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1025472474", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1048139891", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1019463277", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1023876405", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1060505996", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1024129122", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1007741542", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1034025717", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1002536646", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1046023204", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1048928815", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1039643973", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1021921669", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1060507174", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1030644001", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1060508644", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1026807511", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1037335968", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1014126670", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1049262570", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1049014120", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1030627369", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1060438505", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1022219898", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1060461988", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1041879228", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1008158272", + "target": "pub.1047837644", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1007789030", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1018345323", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1051208711", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1038214559", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1043798191", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1060430850", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1041781555", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1064232873", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1029141598", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1023551219", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1011658338", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1060741752", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1021708856", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1013295901", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1026356533", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1060716437", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1034618848", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1019072925", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1048347725", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1060625484", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1020459025", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1040897292", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1014943403", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1025472474", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1032879437", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1060506382", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1062233668", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1017748089", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1060621943", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1041856979", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1010612726", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1034025717", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1027554801", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1041985067", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1021921669", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1050814349", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1052484094", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1035545882", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1005186218", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1033015118", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1037152641", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1015483129", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1060495184", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1005768866", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1029816697", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1043998630", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1032955577", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1030905705", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1060759314", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1058101157", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1028928983", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1017078538", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1014126670", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1037329755", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1039860202", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1027465833", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032795711", + "target": "pub.1023680357", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1027944496", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1060741752", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1060467641", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1013295901", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1018731307", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1034618848", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1060500350", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1060465708", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1018429633", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1060466899", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1060779767", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1060743705", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1040293571", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1018872620", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1034025717", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1002536646", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1021921669", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1046740497", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1002860337", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1037335968", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1060759314", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1014126670", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1035787773", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1050389361", + "target": "pub.1060461988", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1060756185", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1021558365", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1060758977", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1060825740", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1016807636", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1012500209", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1060759233", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1011465158", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1034025717", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1015752685", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1060752377", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1013094749", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1060839596", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1015653335", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1025519412", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1060808815", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1062458662", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1046807340", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1001441208", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1021493626", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1003953015", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1060821199", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1060839612", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1013088353", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1052164705", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1039430067", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1039526439", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1038116055", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1031310290", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1053140660", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1028628834", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1020099649", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1062466552", + "target": "pub.1031435740", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1060799033", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1034685599", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1005562834", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1063125329", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1060787963", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1043507384", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1041781555", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1004083979", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1022911870", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1015361753", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1025212910", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1059070435", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1042363867", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1030702899", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1039525977", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1050856595", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1042729374", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1048699443", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1045115933", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1018374514", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1000524935", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1019211121", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1013320119", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1003480064", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1042249380", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1030957871", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1031979890", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1007363629", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1026041336", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1019769175", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1018529463", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1063137926", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1017887827", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1050049937", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1015377513", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1044935711", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1010719555", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1060637445", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1030813584", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1014751446", + "target": "pub.1036259707", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1060506152", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1023112037", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1038797520", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1046281967", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1041781555", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1060485219", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1021708856", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1013295901", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1034618848", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1031435740", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1026487091", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1020459025", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1060461988", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1014943403", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1001765599", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1017748089", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1040293571", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1013564949", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1034025717", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1060506993", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1009145988", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1021921669", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1052484094", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1035545882", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1005186218", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1033015118", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1037152641", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1048120455", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1043998630", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1012449759", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1035787773", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1060430850", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1060759314", + "target": "pub.1007431288", + "attributes": { + "year": 2012, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1050230284", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060507227", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1051513505", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1022201659", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1025684815", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1004419214", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1016883152", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1011862816", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060834776", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1044585590", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1030131727", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060828378", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1034908465", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1000717326", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1032013208", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060501875", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1053071617", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1043414338", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1000339972", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1039875361", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060498076", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1038435541", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1004049717", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1017394305", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1009497503", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1005408468", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1001677407", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060496930", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1062937215", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060496772", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1032117943", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060692192", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1065173408", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1062449614", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1040733718", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1030554066", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1044365852", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1023876405", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060489764", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1002419553", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1007053255", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1053325657", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1013441281", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1048985306", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1007437051", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060501102", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1041840352", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1062460456", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1098732024", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1019244542", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1032459275", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1034220073", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1062451106", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1005892928", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1046586795", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060495457", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060451204", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1021091851", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1037196319", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1059137934", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1015906101", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060499456", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1019738669", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1045761502", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1023231651", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1045592513", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1021047010", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1003804610", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060465740", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060503021", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1064235153", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060812753", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1003323558", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1006013499", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1002548185", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1042812951", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1007390089", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1034324600", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060502238", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1044584359", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1024518599", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1006871668", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1109642906", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1014259920", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1011658338", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1009280350", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1042326365", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1033004759", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1062444393", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1098669586", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1049607631", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1042239422", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1001545329", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1042980616", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1029415952", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1033014139", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1005841402", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1047238674", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1007113001", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1098909552", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1002431819", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1027685238", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1021190003", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1052716647", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1034352273", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1036319695", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1049164678", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060501109", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060756621", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1025338423", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060787952", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1048839595", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1044105212", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1011656566", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1033308270", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1051173433", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1006852009", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060495708", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060486851", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1012704698", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1032609059", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1033188547", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1037722040", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060839208", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1037170495", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1041161303", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1005109695", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1042003394", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1002222149", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1053673045", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1052013666", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060492991", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1024870439", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060786848", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060478721", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1037217818", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1046531133", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1042823964", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060817691", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1037292429", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1016989667", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060490050", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060809096", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1016267052", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060825411", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1017239584", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1028284777", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060822132", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1007520534", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1016510934", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1009420992", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060487392", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1048921956", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1041909998", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1014388554", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060497638", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1040606488", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060756669", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1024053463", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1017626170", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1020456012", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1045377669", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060488659", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060816390", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1050225995", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1012640711", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1009071596", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1024394193", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1023373666", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1042995256", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060503017", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1048707800", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060821716", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1043762285", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060491579", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1021507156", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1050275996", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1039655036", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1016787662", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1014640361", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1059052509", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060504144", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1036288955", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1008192613", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1046510001", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060817288", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1005219864", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1059141664", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1059141708", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1051499896", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1049572504", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060819856", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1029120630", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1027890249", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1048283529", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060505399", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060480033", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1059141222", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1038221147", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060501981", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1029186926", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1040444443", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1022061943", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1050586441", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1050841175", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1034030383", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1031594332", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1022807668", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060487206", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1020356915", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1041063912", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1059185033", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1036673130", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060495410", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060811945", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1006251427", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1059141471", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1010029009", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060475224", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1032603162", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1030664451", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060500571", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1008906037", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1043133057", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1027177091", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1003190826", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1029889092", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1022248405", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060498655", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060790516", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1035626723", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1052781356", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1041729973", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1008096035", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1049368483", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1008334218", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1026356533", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1053418337", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1016531939", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1045736543", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1002951333", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1013722826", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1019976609", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1010418632", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1051688434", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060738859", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1019064484", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1006913239", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1040258398", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1042658200", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060823255", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060506382", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1034485631", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060494991", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1026031618", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060839663", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1020454192", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1051955120", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1019487999", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060492307", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1016917732", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1027887936", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1020003088", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1021978769", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1044299159", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1045391551", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1048054732", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1041985067", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1043952833", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1047063919", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060492164", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1059141143", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060688638", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1036114834", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1002415192", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1006586634", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1010954675", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1015506698", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060495184", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1048466090", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1000824046", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1042138928", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1020731266", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1060502673", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1014398038", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1020207781", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1049625672", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1038529836", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1024862071", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1018185342", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1034964762", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1039860202", + "target": "pub.1013762487", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1048699443", + "target": "pub.1060799033", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1048699443", + "target": "pub.1072401415", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1048699443", + "target": "pub.1014942113", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1048699443", + "target": "pub.1060787963", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1048699443", + "target": "pub.1042729374", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1048699443", + "target": "pub.1007165107", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1048699443", + "target": "pub.1043619387", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1048699443", + "target": "pub.1060805434", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1048699443", + "target": "pub.1060534420", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1048699443", + "target": "pub.1015361753", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1048699443", + "target": "pub.1016879794", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1048699443", + "target": "pub.1060788070", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1048699443", + "target": "pub.1038304688", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1048699443", + "target": "pub.1060812343", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1048699443", + "target": "pub.1019769175", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1048699443", + "target": "pub.1072401833", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1048699443", + "target": "pub.1060808347", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1098667582", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1065173362", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1014126670", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1061435768", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1031435740", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1037335968", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1034025717", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1049262570", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1060739410", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1024402227", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1060461988", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1022201659", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1021560322", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1027183352", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1037589088", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1060438505", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1060839663", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1025472474", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1034618848", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1021921669", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1007041825", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1059079802", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1048139891", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1032579586", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1060741752", + "target": "pub.1001541263", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1027799783", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1028901322", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1041801698", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1010496603", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1047509663", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1011658338", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1042723630", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1060810423", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1026356533", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1012276581", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1060812645", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1035230987", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1062445233", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1060498428", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1060839535", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1044645483", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1013441281", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1060465244", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1009364201", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1060829713", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1035029355", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1060794360", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1060494914", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1002717445", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1024352953", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1018185342", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1048928815", + "target": "pub.1050017917", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1024402227", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1060831320", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1010453004", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1058050263", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1060822060", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1060504243", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1060823477", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1014034141", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1060670095", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1060658394", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1059076073", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1008126854", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1038056243", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1098678954", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1017123471", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1060817875", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1060825499", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1016014950", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1057869519", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1009926257", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1018979965", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1049930918", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1046878062", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1058101157", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1060822061", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060507439", + "target": "pub.1060823476", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1025127614", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1027944496", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1022201659", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1001441208", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1016807636", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1046281967", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1036937707", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1060833498", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1006289465", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1064237535", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1052648436", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1041883040", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1060825740", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1060829954", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1029418627", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1004210259", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1053140660", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1046760586", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1062444393", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1032223066", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1060812205", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1031435740", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1021493626", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1062553940", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1060500350", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1029956508", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1016359120", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1065170744", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1038336282", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1060839663", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1020674059", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1027287387", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1060467976", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1060787952", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1060773820", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1025998679", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1003628052", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1060827495", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1031554515", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1031284085", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1037335968", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1029202339", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1062566030", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1012500209", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1034025717", + "target": "pub.1060461988", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1043354067", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1049766158", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1050237123", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1039981372", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060827181", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060832030", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060675503", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1027226374", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1041760964", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1012266401", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060817875", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1016014950", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1035008566", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060674224", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060671065", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060659366", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1044085245", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060673380", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060665563", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060803970", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060725247", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1009628601", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060726472", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1045352298", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060827277", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1039276131", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060459525", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060828404", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1000892586", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1003288694", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1020613156", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060675113", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1052615551", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1038414711", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1008912168", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060826447", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060676472", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060674055", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060657707", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060822061", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060774884", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1027175597", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1049959435", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1017862564", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060661648", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060673917", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1041079423", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1028741585", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060824936", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060460944", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1004068287", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1016118774", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060674175", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1013668806", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060823818", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1038988214", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1026831915", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1051363735", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1002091117", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1041066149", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060830663", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060675732", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060521318", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1001844408", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1031979595", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1058050263", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060670774", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1028533037", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060674216", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1027544400", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1031855473", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060659368", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1025880473", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1044966137", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060673423", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060663748", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1050463690", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1028802174", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060784903", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1006382259", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1028928983", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1049262570", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060823476", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1024370344", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1003371857", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1021089453", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1006850094", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060839373", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060807702", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060675476", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1038008984", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1032486064", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060673509", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060674805", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060676386", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060674103", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060784904", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060675450", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060675639", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060673307", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1019615542", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1021947031", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1020702089", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1023527379", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1095903609", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060829034", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1046892149", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060672129", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1021560322", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060663352", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1015215551", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060674011", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1030160495", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1014048276", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1022816651", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1013946646", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1059051422", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1047766368", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060672166", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060671138", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1029374432", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060676547", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1052394951", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060673587", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060673983", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1034371240", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060675387", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1023287333", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1044810744", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1058100372", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1019662680", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060662710", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1043541010", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1028952543", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060754866", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1030191390", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060673232", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1052892694", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1008903034", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1038409804", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1012415680", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060675215", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1010219741", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1012911939", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1062971188", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1031686744", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1003227336", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060674871", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1029051671", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1004661064", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060433897", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1058101157", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060839251", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1013587089", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1004646989", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1062928725", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1008049063", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1041165280", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060676616", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1000173117", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1014034141", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1016574452", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1032579586", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060779406", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060659837", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1058105068", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1028230402", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1036559725", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1059051362", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1006517975", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1013675126", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060826564", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1047765215", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1007846341", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1003831851", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1032454787", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060822060", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060829459", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1051841352", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1026174138", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060822514", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060795354", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060665292", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1016849900", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060675775", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1047182146", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060665491", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060483159", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1046879659", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1029628720", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1047906658", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1008316332", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060674676", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060676334", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1036861449", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060673990", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1031239487", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1058996814", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1002683374", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1018590889", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1039153009", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1038179687", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1004884918", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1038868267", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1049620203", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1000009137", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1011658338", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1009022347", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1011478891", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060672803", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1038056243", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1062913555", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1004415602", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1047967799", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060825499", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1023676200", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1040675567", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1045212838", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060676176", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060659255", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060674213", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1026471851", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1019411784", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060839208", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1047654315", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1059079470", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1005219924", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060675924", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060673300", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060674905", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1005494539", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1042214836", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060673467", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060673113", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060659692", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1018025921", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060787073", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060675760", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060417615", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1000653517", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060676000", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1047713864", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060839565", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060664355", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1051459978", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060823477", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1028482838", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1003267521", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1006809789", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060677000", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060786505", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1037040727", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1008126854", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060676303", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1013665499", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060674558", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1027179906", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060754142", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1040632454", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1005025234", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060674557", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1011902185", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1024740024", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1005256305", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1007511315", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1036352091", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1021912934", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060504243", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1043779481", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1015453451", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1022722372", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1004858858", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1011087398", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1019398907", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1010220572", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1014462654", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060839221", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060790099", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1033456373", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060461257", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060674109", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1047753851", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060677032", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1044880480", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060673895", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1039179998", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060839152", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1059086874", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1008243844", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1019531352", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1048074289", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060658394", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1011163444", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1029543778", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1059079802", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060677183", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1020621092", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060755819", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060531200", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1057900505", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1049632162", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1039984053", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060675402", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1098679389", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060797016", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060673750", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1059087853", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1024402227", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060755003", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1027532833", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1012593191", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1010760440", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1044040016", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1047948630", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060675734", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1042077732", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1047220917", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1059076097", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060820367", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060674827", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1046578644", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1050919469", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060676255", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1020847848", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1031717969", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060838113", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1010717449", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1045342100", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1052419661", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1030368423", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1017460463", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060670095", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1031172370", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060672165", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1042457710", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060673873", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1098678954", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060791130", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060658984", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060456070", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060675290", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060673164", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1023341115", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060784536", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060677048", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1057869519", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1000398384", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060677128", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1017561574", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1060839703", + "target": "pub.1060675321", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1021427310", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1052791836", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1021984958", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1040606030", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1018661537", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1060779458", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1042098123", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1015234386", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1060768363", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1036884583", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1022162692", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1040915357", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1053319957", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1025059126", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1060460126", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1040491531", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1050408744", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1060565149", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1034642959", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1003660203", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1020691468", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1060537812", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1060828109", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1045564126", + "target": "pub.1019008412", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1007530657", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1060472631", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1060469716", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1025036962", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1041909998", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1008640012", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1031460804", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1098678329", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1015971387", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1032081451", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1022345746", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1040258398", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1029576577", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1000374332", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1042734315", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1098667582", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1031817672", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1036871640", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1035439165", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1043889955", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1016859474", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1011010598", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1019839012", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1028771859", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1030114288", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1040030659", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1006251427", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1060817691", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026356533", + "target": "pub.1018185342", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1032579586", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1059079802", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1059079470", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1060835107", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1028482838", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1024402227", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1011784856", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1026720084", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1031239487", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1004884918", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1014034141", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1004858858", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1023676200", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1045387337", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1016958841", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1021560322", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1025719832", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1007119461", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1042532118", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1006328423", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1049262570", + "target": "pub.1016014950", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1018345323", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1016958841", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1011784856", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1024402227", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1060504243", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1004884918", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1028482838", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1014034141", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1006328423", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1048347725", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1059079802", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1012266401", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1004858858", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1023676200", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1016014950", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1042764696", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1025719832", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1046878062", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1059079470", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1031239487", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1021560322", + "target": "pub.1007119461", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1060521318", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1043798191", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1024402227", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1035159109", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1041165280", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1060504243", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1004884918", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1028482838", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1014034141", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1012593191", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1011658338", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1034618848", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1059079802", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1060784904", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1004858858", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1040675567", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1007803037", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1047753851", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1031239487", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1060795805", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1060485642", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1017078538", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1058101157", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1032579586", + "target": "pub.1028928983", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1018345323", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1017238694", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1011784856", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1043798191", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1036551131", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1013466532", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1010960717", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1020033193", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1060618645", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1051523502", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1011658338", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1008096035", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1034601602", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1060674024", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1040003395", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1059078521", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1045736543", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1048347725", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1004858858", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1048139891", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1019645844", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1046510001", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1060787952", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1011664403", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1041985067", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1005256926", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1015937057", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1060501368", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1036114834", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1005427122", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1098905503", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1060480673", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1029816697", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1059079470", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1029635336", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1017078538", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1060622841", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1060533316", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025472474", + "target": "pub.1003804610", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1011784856", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1041165280", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1060475260", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1058050263", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1060829459", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1045515256", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1028237179", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1014034141", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1012593191", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1060658394", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1059076073", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1060450736", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1011658338", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1043779481", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1024981283", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1062129885", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1060661648", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1039276131", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1022456477", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1060828404", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1098707489", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1017315055", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1059079802", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1098678954", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1060784904", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1060461988", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1060675734", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1040846971", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1062243952", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1004858858", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1057914937", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1016981788", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1023676200", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1029398439", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1060487068", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1019398907", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1053030119", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1014462654", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1041985067", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1057869519", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1060775623", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1051277230", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1002878811", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1028784456", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1060795235", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1060839208", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1025311961", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1015885405", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1046878062", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1060793163", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1041734929", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1059079470", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1060659366", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1073294533", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1044880480", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1031239487", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1028928983", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1060485642", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1003831851", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1024348554", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1043138933", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1057848388", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1060728780", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1058105141", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1024402227", + "target": "pub.1060533316", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1060488555", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1045744782", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1060502016", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1028438151", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1018540897", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1062569382", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1039417623", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1040258398", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1011254661", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1062449295", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1060489764", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1048985306", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1057725655", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1060490443", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1062451106", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1008553636", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1030114288", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1006251427", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1038529836", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1060830365", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1041909998", + "target": "pub.1018185342", + "attributes": { + "year": 2007, + "level": "ref_l2" + } + }, + { + "source": "pub.1059079802", + "target": "pub.1044040016", + "attributes": { + "year": 2006, + "level": "ref_l2" + } + }, + { + "source": "pub.1059079802", + "target": "pub.1060825499", + "attributes": { + "year": 2006, + "level": "ref_l2" + } + }, + { + "source": "pub.1059079802", + "target": "pub.1047753851", + "attributes": { + "year": 2006, + "level": "ref_l2" + } + }, + { + "source": "pub.1059079802", + "target": "pub.1036048855", + "attributes": { + "year": 2006, + "level": "ref_l2" + } + }, + { + "source": "pub.1059079802", + "target": "pub.1024622720", + "attributes": { + "year": 2006, + "level": "ref_l2" + } + }, + { + "source": "pub.1059079802", + "target": "pub.1060659366", + "attributes": { + "year": 2006, + "level": "ref_l2" + } + }, + { + "source": "pub.1059079802", + "target": "pub.1059079470", + "attributes": { + "year": 2006, + "level": "ref_l2" + } + }, + { + "source": "pub.1059079802", + "target": "pub.1044880480", + "attributes": { + "year": 2006, + "level": "ref_l2" + } + }, + { + "source": "pub.1059079802", + "target": "pub.1098678954", + "attributes": { + "year": 2006, + "level": "ref_l2" + } + }, + { + "source": "pub.1059079802", + "target": "pub.1060499774", + "attributes": { + "year": 2006, + "level": "ref_l2" + } + }, + { + "source": "pub.1059079802", + "target": "pub.1014034141", + "attributes": { + "year": 2006, + "level": "ref_l2" + } + }, + { + "source": "pub.1059079802", + "target": "pub.1052561538", + "attributes": { + "year": 2006, + "level": "ref_l2" + } + }, + { + "source": "pub.1059079802", + "target": "pub.1031239487", + "attributes": { + "year": 2006, + "level": "ref_l2" + } + }, + { + "source": "pub.1059079802", + "target": "pub.1059076073", + "attributes": { + "year": 2006, + "level": "ref_l2" + } + }, + { + "source": "pub.1059079802", + "target": "pub.1004858858", + "attributes": { + "year": 2006, + "level": "ref_l2" + } + }, + { + "source": "pub.1059079802", + "target": "pub.1060673895", + "attributes": { + "year": 2006, + "level": "ref_l2" + } + }, + { + "source": "pub.1060831320", + "target": "pub.1015283490", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1060831320", + "target": "pub.1036372533", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1060831320", + "target": "pub.1015885405", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1060831320", + "target": "pub.1050860986", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1060831320", + "target": "pub.1026690139", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1060831320", + "target": "pub.1041037290", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1060831320", + "target": "pub.1041047376", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1060831320", + "target": "pub.1008979230", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1060831320", + "target": "pub.1044001354", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1060831320", + "target": "pub.1059076073", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1060831320", + "target": "pub.1012195559", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1060831320", + "target": "pub.1037993747", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1060831320", + "target": "pub.1056046759", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1109710367", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1011658338", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1008096035", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1020895228", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1045736543", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1019645844", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1060660647", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1060483159", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1060459526", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1046510001", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1060660456", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1060787952", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1036176655", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1047654315", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1059079470", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1060827125", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1051459978", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1060728780", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1004858858", + "target": "pub.1003804610", + "attributes": { + "year": 2005, + "level": "ref_l2" + } + }, + { + "source": "pub.1008126854", + "target": "pub.1060839152", + "attributes": { + "year": 2003, + "level": "ref_l2" + } + }, + { + "source": "pub.1008126854", + "target": "pub.1060825499", + "attributes": { + "year": 2003, + "level": "ref_l2" + } + }, + { + "source": "pub.1008126854", + "target": "pub.1026831915", + "attributes": { + "year": 2003, + "level": "ref_l2" + } + }, + { + "source": "pub.1008126854", + "target": "pub.1034622526", + "attributes": { + "year": 2003, + "level": "ref_l2" + } + }, + { + "source": "pub.1008126854", + "target": "pub.1060823818", + "attributes": { + "year": 2003, + "level": "ref_l2" + } + }, + { + "source": "pub.1008126854", + "target": "pub.1060803970", + "attributes": { + "year": 2003, + "level": "ref_l2" + } + }, + { + "source": "pub.1008126854", + "target": "pub.1012581556", + "attributes": { + "year": 2003, + "level": "ref_l2" + } + }, + { + "source": "pub.1008126854", + "target": "pub.1060822060", + "attributes": { + "year": 2003, + "level": "ref_l2" + } + }, + { + "source": "pub.1008126854", + "target": "pub.1027532833", + "attributes": { + "year": 2003, + "level": "ref_l2" + } + }, + { + "source": "pub.1008126854", + "target": "pub.1098678954", + "attributes": { + "year": 2003, + "level": "ref_l2" + } + }, + { + "source": "pub.1008126854", + "target": "pub.1060784904", + "attributes": { + "year": 2003, + "level": "ref_l2" + } + }, + { + "source": "pub.1008126854", + "target": "pub.1060670095", + "attributes": { + "year": 2003, + "level": "ref_l2" + } + }, + { + "source": "pub.1008126854", + "target": "pub.1060823476", + "attributes": { + "year": 2003, + "level": "ref_l2" + } + }, + { + "source": "pub.1008126854", + "target": "pub.1060658394", + "attributes": { + "year": 2003, + "level": "ref_l2" + } + }, + { + "source": "pub.1008126854", + "target": "pub.1060673467", + "attributes": { + "year": 2003, + "level": "ref_l2" + } + }, + { + "source": "pub.1041856979", + "target": "pub.1049572408", + "attributes": { + "year": 1998, + "level": "ref_l2" + } + }, + { + "source": "pub.1041856979", + "target": "pub.1057871482", + "attributes": { + "year": 1998, + "level": "ref_l2" + } + }, + { + "source": "pub.1041856979", + "target": "pub.1098954489", + "attributes": { + "year": 1998, + "level": "ref_l2" + } + }, + { + "source": "pub.1059076073", + "target": "pub.1024622720", + "attributes": { + "year": 1998, + "level": "ref_l2" + } + }, + { + "source": "pub.1059076073", + "target": "pub.1041037290", + "attributes": { + "year": 1998, + "level": "ref_l2" + } + }, + { + "source": "pub.1059076073", + "target": "pub.1060449417", + "attributes": { + "year": 1998, + "level": "ref_l2" + } + }, + { + "source": "pub.1059076073", + "target": "pub.1009964863", + "attributes": { + "year": 1998, + "level": "ref_l2" + } + }, + { + "source": "pub.1059076073", + "target": "pub.1016998557", + "attributes": { + "year": 1998, + "level": "ref_l2" + } + }, + { + "source": "pub.1059076073", + "target": "pub.1062243952", + "attributes": { + "year": 1998, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1059074985", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1018020267", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1000891726", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1060812291", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1057743676", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1043750288", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1054019943", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1060810429", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1060804542", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1042734315", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1025513050", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1007741542", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1017250213", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1060719599", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1060492396", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1053543950", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1060807676", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1030554440", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1059069031", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1043006827", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1014050295", + "target": "pub.1043048933", + "attributes": { + "year": 1997, + "level": "ref_l2" + } + }, + { + "source": "pub.1060810429", + "target": "pub.1060805930", + "attributes": { + "year": 1995, + "level": "ref_l2" + } + }, + { + "source": "pub.1060810429", + "target": "pub.1055659331", + "attributes": { + "year": 1995, + "level": "ref_l2" + } + }, + { + "source": "pub.1060810429", + "target": "pub.1059110861", + "attributes": { + "year": 1995, + "level": "ref_l2" + } + }, + { + "source": "pub.1060810429", + "target": "pub.1060495184", + "attributes": { + "year": 1995, + "level": "ref_l2" + } + }, + { + "source": "pub.1060810429", + "target": "pub.1059110686", + "attributes": { + "year": 1995, + "level": "ref_l2" + } + }, + { + "source": "pub.1060810429", + "target": "pub.1017250213", + "attributes": { + "year": 1995, + "level": "ref_l2" + } + }, + { + "source": "pub.1060810429", + "target": "pub.1060804211", + "attributes": { + "year": 1995, + "level": "ref_l2" + } + }, + { + "source": "pub.1060810429", + "target": "pub.1060716812", + "attributes": { + "year": 1995, + "level": "ref_l2" + } + }, + { + "source": "pub.1060810429", + "target": "pub.1060716833", + "attributes": { + "year": 1995, + "level": "ref_l2" + } + }, + { + "source": "pub.1060810429", + "target": "pub.1060465772", + "attributes": { + "year": 1995, + "level": "ref_l2" + } + }, + { + "source": "pub.1060810429", + "target": "pub.1060484658", + "attributes": { + "year": 1995, + "level": "ref_l2" + } + }, + { + "source": "pub.1060810429", + "target": "pub.1053543950", + "attributes": { + "year": 1995, + "level": "ref_l2" + } + }, + { + "source": "pub.1060810429", + "target": "pub.1060807676", + "attributes": { + "year": 1995, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1010313486", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1031813736", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1031874509", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1060803392", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1057743676", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1064233019", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1059110762", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1060804542", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1064231079", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1042734315", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1057737242", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1059071127", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1025507234", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1005219864", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1060794819", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1060481738", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1035545882", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1060495184", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1059071180", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1059069771", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1030634392", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1017250213", + "target": "pub.1064231130", + "attributes": { + "year": 1993, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1060478681", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1025337287", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1060787963", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1060790516", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1060794274", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1060482831", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1059070435", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1030828951", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1053498585", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1060803927", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1060793513", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1001349916", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1060783905", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1060800881", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1042659546", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1059069780", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1014168356", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1005432200", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1060801337", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1060483028", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1060475467", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1059070056", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1039185830", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1030444683", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1022719988", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1060799854", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1060800993", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1058956513", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1053543950", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1060797693", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1049940303", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1060485026", + "target": "pub.1060477616", + "attributes": { + "year": 1992, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1059068080", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1010313486", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1058023149", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1060476171", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1060794457", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1059068352", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1039918636", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1060789626", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1064231079", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1042734315", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1034195309", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1059067283", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1059070056", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1059068122", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1060791387", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1051138084", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1043149560", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1064231011", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1016926995", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1034392770", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1064231130", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059069780", + "target": "pub.1052314442", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059070056", + "target": "pub.1034195309", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059070056", + "target": "pub.1004335462", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059070056", + "target": "pub.1060789627", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059070056", + "target": "pub.1011703040", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059070056", + "target": "pub.1039987654", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059070056", + "target": "pub.1060788070", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059070056", + "target": "pub.1059069146", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059070056", + "target": "pub.1042734315", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059070056", + "target": "pub.1032128187", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1059070056", + "target": "pub.1058099888", + "attributes": { + "year": 1988, + "level": "ref_l2" + } + }, + { + "source": "pub.1042734315", + "target": "pub.1022161412", + "attributes": { + "year": 1987, + "level": "ref_l2" + } + }, + { + "source": "pub.1042734315", + "target": "pub.1060537632", + "attributes": { + "year": 1987, + "level": "ref_l2" + } + }, + { + "source": "pub.1042734315", + "target": "pub.1060789643", + "attributes": { + "year": 1987, + "level": "ref_l2" + } + }, + { + "source": "pub.1042734315", + "target": "pub.1060789858", + "attributes": { + "year": 1987, + "level": "ref_l2" + } + }, + { + "source": "pub.1042734315", + "target": "pub.1060495184", + "attributes": { + "year": 1987, + "level": "ref_l2" + } + }, + { + "source": "pub.1042734315", + "target": "pub.1060473496", + "attributes": { + "year": 1987, + "level": "ref_l2" + } + }, + { + "source": "pub.1042734315", + "target": "pub.1024772182", + "attributes": { + "year": 1987, + "level": "ref_l2" + } + }, + { + "source": "pub.1042734315", + "target": "pub.1060783526", + "attributes": { + "year": 1987, + "level": "ref_l2" + } + }, + { + "source": "pub.1042734315", + "target": "pub.1060787424", + "attributes": { + "year": 1987, + "level": "ref_l2" + } + }, + { + "source": "pub.1042734315", + "target": "pub.1060793513", + "attributes": { + "year": 1987, + "level": "ref_l2" + } + }, + { + "source": "pub.1042734315", + "target": "pub.1060789626", + "attributes": { + "year": 1987, + "level": "ref_l2" + } + }, + { + "source": "pub.1042734315", + "target": "pub.1060784758", + "attributes": { + "year": 1987, + "level": "ref_l2" + } + }, + { + "source": "pub.1042734315", + "target": "pub.1059068352", + "attributes": { + "year": 1987, + "level": "ref_l2" + } + }, + { + "source": "pub.1042734315", + "target": "pub.1057773719", + "attributes": { + "year": 1987, + "level": "ref_l2" + } + }, + { + "source": "pub.1042734315", + "target": "pub.1030634392", + "attributes": { + "year": 1987, + "level": "ref_l2" + } + }, + { + "source": "pub.1042734315", + "target": "pub.1060465772", + "attributes": { + "year": 1987, + "level": "ref_l2" + } + }, + { + "source": "pub.1042734315", + "target": "pub.1060791387", + "attributes": { + "year": 1987, + "level": "ref_l2" + } + }, + { + "source": "pub.1042734315", + "target": "pub.1031874509", + "attributes": { + "year": 1987, + "level": "ref_l2" + } + }, + { + "source": "pub.1060500239", + "target": "pub.1060416861", + "attributes": { + "year": 1973, + "level": "ref_l2" + } + }, + { + "source": "pub.1060500239", + "target": "pub.1060838726", + "attributes": { + "year": 1973, + "level": "ref_l2" + } + }, + { + "source": "pub.1060500239", + "target": "pub.1060449414", + "attributes": { + "year": 1973, + "level": "ref_l2" + } + }, + { + "source": "pub.1060500239", + "target": "pub.1060450736", + "attributes": { + "year": 1973, + "level": "ref_l2" + } + }, + { + "source": "pub.1060500239", + "target": "pub.1057797824", + "attributes": { + "year": 1973, + "level": "ref_l2" + } + }, + { + "source": "pub.1060500239", + "target": "pub.1019460196", + "attributes": { + "year": 1973, + "level": "ref_l2" + } + }, + { + "source": "pub.1060500239", + "target": "pub.1060489120", + "attributes": { + "year": 1973, + "level": "ref_l2" + } + }, + { + "source": "pub.1060430850", + "target": "pub.1057796022", + "attributes": { + "year": 1965, + "level": "ref_l2" + } + }, + { + "source": "pub.1060430850", + "target": "pub.1057789554", + "attributes": { + "year": 1965, + "level": "ref_l2" + } + }, + { + "source": "pub.1060430850", + "target": "pub.1057791192", + "attributes": { + "year": 1965, + "level": "ref_l2" + } + }, + { + "source": "pub.1060430850", + "target": "pub.1060416616", + "attributes": { + "year": 1965, + "level": "ref_l2" + } + }, + { + "source": "pub.1060430850", + "target": "pub.1026186494", + "attributes": { + "year": 1965, + "level": "ref_l2" + } + }, + { + "source": "pub.1060430850", + "target": "pub.1060451198", + "attributes": { + "year": 1965, + "level": "ref_l2" + } + }, + { + "source": "pub.1060430850", + "target": "pub.1060416861", + "attributes": { + "year": 1965, + "level": "ref_l2" + } + }, + { + "source": "pub.1060430850", + "target": "pub.1060429472", + "attributes": { + "year": 1965, + "level": "ref_l2" + } + }, + { + "source": "pub.1060430850", + "target": "pub.1057012353", + "attributes": { + "year": 1965, + "level": "ref_l2" + } + }, + { + "source": "pub.1060430850", + "target": "pub.1060451040", + "attributes": { + "year": 1965, + "level": "ref_l2" + } + }, + { + "source": "pub.1060430850", + "target": "pub.1060427420", + "attributes": { + "year": 1965, + "level": "ref_l2" + } + }, + { + "source": "pub.1060430850", + "target": "pub.1060837536", + "attributes": { + "year": 1965, + "level": "ref_l2" + } + }, + { + "source": "pub.1060430850", + "target": "pub.1060464038", + "attributes": { + "year": 1965, + "level": "ref_l2" + } + } + ] +} \ No newline at end of file diff --git a/src/citationnet/static/3d-force-graph.js.map b/src/citationnet/static/3d-force-graph.js.map new file mode 100644 index 0000000..eba0dba --- /dev/null +++ b/src/citationnet/static/3d-force-graph.js.map @@ -0,0 +1 @@ +{"version":3,"file":"3d-force-graph.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../node_modules/three/build/three.module.js","../node_modules/three/examples/jsm/controls/DragControls.js","../../three-forcegraph/node_modules/three/build/three.module.js","../../three-forcegraph/node_modules/d3-force-3d/src/center.js","../../three-forcegraph/node_modules/d3-binarytree/src/add.js","../../three-forcegraph/node_modules/d3-binarytree/src/cover.js","../../three-forcegraph/node_modules/d3-binarytree/src/data.js","../../three-forcegraph/node_modules/d3-binarytree/src/extent.js","../../three-forcegraph/node_modules/d3-binarytree/src/half.js","../../three-forcegraph/node_modules/d3-binarytree/src/find.js","../../three-forcegraph/node_modules/d3-binarytree/src/remove.js","../../three-forcegraph/node_modules/d3-binarytree/src/root.js","../../three-forcegraph/node_modules/d3-binarytree/src/size.js","../../three-forcegraph/node_modules/d3-binarytree/src/visit.js","../../three-forcegraph/node_modules/d3-binarytree/src/visitAfter.js","../../three-forcegraph/node_modules/d3-binarytree/src/x.js","../../three-forcegraph/node_modules/d3-binarytree/src/binarytree.js","../../three-forcegraph/node_modules/d3-quadtree/src/add.js","../../three-forcegraph/node_modules/d3-quadtree/src/cover.js","../../three-forcegraph/node_modules/d3-quadtree/src/data.js","../../three-forcegraph/node_modules/d3-quadtree/src/extent.js","../../three-forcegraph/node_modules/d3-quadtree/src/quad.js","../../three-forcegraph/node_modules/d3-quadtree/src/find.js","../../three-forcegraph/node_modules/d3-quadtree/src/remove.js","../../three-forcegraph/node_modules/d3-quadtree/src/root.js","../../three-forcegraph/node_modules/d3-quadtree/src/size.js","../../three-forcegraph/node_modules/d3-quadtree/src/visit.js","../../three-forcegraph/node_modules/d3-quadtree/src/visitAfter.js","../../three-forcegraph/node_modules/d3-quadtree/src/x.js","../../three-forcegraph/node_modules/d3-quadtree/src/y.js","../../three-forcegraph/node_modules/d3-quadtree/src/quadtree.js","../../three-forcegraph/node_modules/d3-octree/src/add.js","../../three-forcegraph/node_modules/d3-octree/src/cover.js","../../three-forcegraph/node_modules/d3-octree/src/data.js","../../three-forcegraph/node_modules/d3-octree/src/extent.js","../../three-forcegraph/node_modules/d3-octree/src/octant.js","../../three-forcegraph/node_modules/d3-octree/src/find.js","../../three-forcegraph/node_modules/d3-octree/src/remove.js","../../three-forcegraph/node_modules/d3-octree/src/root.js","../../three-forcegraph/node_modules/d3-octree/src/size.js","../../three-forcegraph/node_modules/d3-octree/src/visit.js","../../three-forcegraph/node_modules/d3-octree/src/visitAfter.js","../../three-forcegraph/node_modules/d3-octree/src/x.js","../../three-forcegraph/node_modules/d3-octree/src/y.js","../../three-forcegraph/node_modules/d3-octree/src/z.js","../../three-forcegraph/node_modules/d3-octree/src/octree.js","../../three-forcegraph/node_modules/d3-force-3d/src/constant.js","../../three-forcegraph/node_modules/d3-force-3d/src/jiggle.js","../../three-forcegraph/node_modules/d3-force-3d/src/link.js","../../three-forcegraph/node_modules/d3-dispatch/src/dispatch.js","../../three-forcegraph/node_modules/d3-timer/src/timer.js","../../three-forcegraph/node_modules/d3-force-3d/src/lcg.js","../../three-forcegraph/node_modules/d3-force-3d/src/simulation.js","../../three-forcegraph/node_modules/d3-force-3d/src/manyBody.js","../../three-forcegraph/node_modules/d3-force-3d/src/radial.js","../../three-forcegraph/node_modules/ngraph.events/index.js","../../three-forcegraph/node_modules/ngraph.graph/index.js","../../three-forcegraph/node_modules/ngraph.forcelayout/lib/codeGenerators/getVariableName.js","../../three-forcegraph/node_modules/ngraph.forcelayout/lib/codeGenerators/createPatternBuilder.js","../../three-forcegraph/node_modules/ngraph.forcelayout/lib/codeGenerators/generateCreateBody.js","../../three-forcegraph/node_modules/ngraph.forcelayout/lib/codeGenerators/generateQuadTree.js","../../three-forcegraph/node_modules/ngraph.forcelayout/lib/codeGenerators/generateBounds.js","../../three-forcegraph/node_modules/ngraph.forcelayout/lib/codeGenerators/generateCreateDragForce.js","../../three-forcegraph/node_modules/ngraph.forcelayout/lib/codeGenerators/generateCreateSpringForce.js","../../three-forcegraph/node_modules/ngraph.forcelayout/lib/codeGenerators/generateIntegrator.js","../../three-forcegraph/node_modules/ngraph.forcelayout/lib/spring.js","../../three-forcegraph/node_modules/ngraph.merge/index.js","../../three-forcegraph/node_modules/ngraph.random/index.js","../../three-forcegraph/node_modules/ngraph.forcelayout/lib/createPhysicsSimulator.js","../../three-forcegraph/node_modules/ngraph.forcelayout/index.js","../../three-forcegraph/node_modules/debounce/index.js","../../three-forcegraph/node_modules/kapsule/dist/kapsule.module.js","../../three-forcegraph/node_modules/accessor-fn/dist/accessor-fn.module.js","../../three-forcegraph/node_modules/internmap/src/index.js","../../three-forcegraph/node_modules/d3-array/src/max.js","../../three-forcegraph/node_modules/d3-array/src/min.js","../../three-forcegraph/node_modules/index-array-by/dist/index-array-by.module.js","../../three-forcegraph/node_modules/data-joint/dist/data-joint.module.js","../../three-forcegraph/node_modules/d3-scale/src/init.js","../../three-forcegraph/node_modules/d3-scale/src/ordinal.js","../../three-forcegraph/node_modules/d3-scale-chromatic/src/colors.js","../../three-forcegraph/node_modules/d3-scale-chromatic/src/categorical/Paired.js","../../three-forcegraph/node_modules/tinycolor2/tinycolor.js","../../three-forcegraph/dist/three-forcegraph.module.js","../node_modules/three/examples/jsm/controls/TrackballControls.js","../node_modules/three/examples/jsm/controls/OrbitControls.js","../node_modules/three/examples/jsm/controls/FlyControls.js","../node_modules/three/examples/jsm/shaders/CopyShader.js","../node_modules/three/examples/jsm/postprocessing/Pass.js","../node_modules/three/examples/jsm/postprocessing/ShaderPass.js","../node_modules/three/examples/jsm/postprocessing/MaskPass.js","../node_modules/three/examples/jsm/postprocessing/EffectComposer.js","../node_modules/three/examples/jsm/postprocessing/RenderPass.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/esm/construct.js","../node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../node_modules/polished/dist/polished.esm.js","../node_modules/@tweenjs/tween.js/dist/tween.esm.js","../node_modules/accessor-fn/dist/accessor-fn.module.js","../node_modules/debounce/index.js","../node_modules/kapsule/dist/kapsule.module.js","../node_modules/three-render-objects/dist/three-render-objects.module.js","../src/kapsule-link.js","../src/3d-force-graph.js"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","/**\n * @license\n * Copyright 2010-2021 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nconst REVISION = '129';\nconst MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };\nconst TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };\nconst CullFaceNone = 0;\nconst CullFaceBack = 1;\nconst CullFaceFront = 2;\nconst CullFaceFrontBack = 3;\nconst BasicShadowMap = 0;\nconst PCFShadowMap = 1;\nconst PCFSoftShadowMap = 2;\nconst VSMShadowMap = 3;\nconst FrontSide = 0;\nconst BackSide = 1;\nconst DoubleSide = 2;\nconst FlatShading = 1;\nconst SmoothShading = 2;\nconst NoBlending = 0;\nconst NormalBlending = 1;\nconst AdditiveBlending = 2;\nconst SubtractiveBlending = 3;\nconst MultiplyBlending = 4;\nconst CustomBlending = 5;\nconst AddEquation = 100;\nconst SubtractEquation = 101;\nconst ReverseSubtractEquation = 102;\nconst MinEquation = 103;\nconst MaxEquation = 104;\nconst ZeroFactor = 200;\nconst OneFactor = 201;\nconst SrcColorFactor = 202;\nconst OneMinusSrcColorFactor = 203;\nconst SrcAlphaFactor = 204;\nconst OneMinusSrcAlphaFactor = 205;\nconst DstAlphaFactor = 206;\nconst OneMinusDstAlphaFactor = 207;\nconst DstColorFactor = 208;\nconst OneMinusDstColorFactor = 209;\nconst SrcAlphaSaturateFactor = 210;\nconst NeverDepth = 0;\nconst AlwaysDepth = 1;\nconst LessDepth = 2;\nconst LessEqualDepth = 3;\nconst EqualDepth = 4;\nconst GreaterEqualDepth = 5;\nconst GreaterDepth = 6;\nconst NotEqualDepth = 7;\nconst MultiplyOperation = 0;\nconst MixOperation = 1;\nconst AddOperation = 2;\nconst NoToneMapping = 0;\nconst LinearToneMapping = 1;\nconst ReinhardToneMapping = 2;\nconst CineonToneMapping = 3;\nconst ACESFilmicToneMapping = 4;\nconst CustomToneMapping = 5;\n\nconst UVMapping = 300;\nconst CubeReflectionMapping = 301;\nconst CubeRefractionMapping = 302;\nconst EquirectangularReflectionMapping = 303;\nconst EquirectangularRefractionMapping = 304;\nconst CubeUVReflectionMapping = 306;\nconst CubeUVRefractionMapping = 307;\nconst RepeatWrapping = 1000;\nconst ClampToEdgeWrapping = 1001;\nconst MirroredRepeatWrapping = 1002;\nconst NearestFilter = 1003;\nconst NearestMipmapNearestFilter = 1004;\nconst NearestMipMapNearestFilter = 1004;\nconst NearestMipmapLinearFilter = 1005;\nconst NearestMipMapLinearFilter = 1005;\nconst LinearFilter = 1006;\nconst LinearMipmapNearestFilter = 1007;\nconst LinearMipMapNearestFilter = 1007;\nconst LinearMipmapLinearFilter = 1008;\nconst LinearMipMapLinearFilter = 1008;\nconst UnsignedByteType = 1009;\nconst ByteType = 1010;\nconst ShortType = 1011;\nconst UnsignedShortType = 1012;\nconst IntType = 1013;\nconst UnsignedIntType = 1014;\nconst FloatType = 1015;\nconst HalfFloatType = 1016;\nconst UnsignedShort4444Type = 1017;\nconst UnsignedShort5551Type = 1018;\nconst UnsignedShort565Type = 1019;\nconst UnsignedInt248Type = 1020;\nconst AlphaFormat = 1021;\nconst RGBFormat = 1022;\nconst RGBAFormat = 1023;\nconst LuminanceFormat = 1024;\nconst LuminanceAlphaFormat = 1025;\nconst RGBEFormat = RGBAFormat;\nconst DepthFormat = 1026;\nconst DepthStencilFormat = 1027;\nconst RedFormat = 1028;\nconst RedIntegerFormat = 1029;\nconst RGFormat = 1030;\nconst RGIntegerFormat = 1031;\nconst RGBIntegerFormat = 1032;\nconst RGBAIntegerFormat = 1033;\n\nconst RGB_S3TC_DXT1_Format = 33776;\nconst RGBA_S3TC_DXT1_Format = 33777;\nconst RGBA_S3TC_DXT3_Format = 33778;\nconst RGBA_S3TC_DXT5_Format = 33779;\nconst RGB_PVRTC_4BPPV1_Format = 35840;\nconst RGB_PVRTC_2BPPV1_Format = 35841;\nconst RGBA_PVRTC_4BPPV1_Format = 35842;\nconst RGBA_PVRTC_2BPPV1_Format = 35843;\nconst RGB_ETC1_Format = 36196;\nconst RGB_ETC2_Format = 37492;\nconst RGBA_ETC2_EAC_Format = 37496;\nconst RGBA_ASTC_4x4_Format = 37808;\nconst RGBA_ASTC_5x4_Format = 37809;\nconst RGBA_ASTC_5x5_Format = 37810;\nconst RGBA_ASTC_6x5_Format = 37811;\nconst RGBA_ASTC_6x6_Format = 37812;\nconst RGBA_ASTC_8x5_Format = 37813;\nconst RGBA_ASTC_8x6_Format = 37814;\nconst RGBA_ASTC_8x8_Format = 37815;\nconst RGBA_ASTC_10x5_Format = 37816;\nconst RGBA_ASTC_10x6_Format = 37817;\nconst RGBA_ASTC_10x8_Format = 37818;\nconst RGBA_ASTC_10x10_Format = 37819;\nconst RGBA_ASTC_12x10_Format = 37820;\nconst RGBA_ASTC_12x12_Format = 37821;\nconst RGBA_BPTC_Format = 36492;\nconst SRGB8_ALPHA8_ASTC_4x4_Format = 37840;\nconst SRGB8_ALPHA8_ASTC_5x4_Format = 37841;\nconst SRGB8_ALPHA8_ASTC_5x5_Format = 37842;\nconst SRGB8_ALPHA8_ASTC_6x5_Format = 37843;\nconst SRGB8_ALPHA8_ASTC_6x6_Format = 37844;\nconst SRGB8_ALPHA8_ASTC_8x5_Format = 37845;\nconst SRGB8_ALPHA8_ASTC_8x6_Format = 37846;\nconst SRGB8_ALPHA8_ASTC_8x8_Format = 37847;\nconst SRGB8_ALPHA8_ASTC_10x5_Format = 37848;\nconst SRGB8_ALPHA8_ASTC_10x6_Format = 37849;\nconst SRGB8_ALPHA8_ASTC_10x8_Format = 37850;\nconst SRGB8_ALPHA8_ASTC_10x10_Format = 37851;\nconst SRGB8_ALPHA8_ASTC_12x10_Format = 37852;\nconst SRGB8_ALPHA8_ASTC_12x12_Format = 37853;\nconst LoopOnce = 2200;\nconst LoopRepeat = 2201;\nconst LoopPingPong = 2202;\nconst InterpolateDiscrete = 2300;\nconst InterpolateLinear = 2301;\nconst InterpolateSmooth = 2302;\nconst ZeroCurvatureEnding = 2400;\nconst ZeroSlopeEnding = 2401;\nconst WrapAroundEnding = 2402;\nconst NormalAnimationBlendMode = 2500;\nconst AdditiveAnimationBlendMode = 2501;\nconst TrianglesDrawMode = 0;\nconst TriangleStripDrawMode = 1;\nconst TriangleFanDrawMode = 2;\nconst LinearEncoding = 3000;\nconst sRGBEncoding = 3001;\nconst GammaEncoding = 3007;\nconst RGBEEncoding = 3002;\nconst LogLuvEncoding = 3003;\nconst RGBM7Encoding = 3004;\nconst RGBM16Encoding = 3005;\nconst RGBDEncoding = 3006;\nconst BasicDepthPacking = 3200;\nconst RGBADepthPacking = 3201;\nconst TangentSpaceNormalMap = 0;\nconst ObjectSpaceNormalMap = 1;\n\nconst ZeroStencilOp = 0;\nconst KeepStencilOp = 7680;\nconst ReplaceStencilOp = 7681;\nconst IncrementStencilOp = 7682;\nconst DecrementStencilOp = 7683;\nconst IncrementWrapStencilOp = 34055;\nconst DecrementWrapStencilOp = 34056;\nconst InvertStencilOp = 5386;\n\nconst NeverStencilFunc = 512;\nconst LessStencilFunc = 513;\nconst EqualStencilFunc = 514;\nconst LessEqualStencilFunc = 515;\nconst GreaterStencilFunc = 516;\nconst NotEqualStencilFunc = 517;\nconst GreaterEqualStencilFunc = 518;\nconst AlwaysStencilFunc = 519;\n\nconst StaticDrawUsage = 35044;\nconst DynamicDrawUsage = 35048;\nconst StreamDrawUsage = 35040;\nconst StaticReadUsage = 35045;\nconst DynamicReadUsage = 35049;\nconst StreamReadUsage = 35041;\nconst StaticCopyUsage = 35046;\nconst DynamicCopyUsage = 35050;\nconst StreamCopyUsage = 35042;\n\nconst GLSL1 = '100';\nconst GLSL3 = '300 es';\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nclass EventDispatcher {\n\n\taddEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t}\n\n\thasEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tconst listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t}\n\n\tremoveEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tconst index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t\tevent.target = null;\n\n\t\t}\n\n\t}\n\n}\n\nconst _lut = [];\n\nfor ( let i = 0; i < 256; i ++ ) {\n\n\t_lut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 );\n\n}\n\nlet _seed = 1234567;\n\n\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n\n// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\nfunction generateUUID() {\n\n\tconst d0 = Math.random() * 0xffffffff | 0;\n\tconst d1 = Math.random() * 0xffffffff | 0;\n\tconst d2 = Math.random() * 0xffffffff | 0;\n\tconst d3 = Math.random() * 0xffffffff | 0;\n\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t// .toUpperCase() here flattens concatenated strings to save heap memory space.\n\treturn uuid.toUpperCase();\n\n}\n\nfunction clamp( value, min, max ) {\n\n\treturn Math.max( min, Math.min( max, value ) );\n\n}\n\n// compute euclidian modulo of m % n\n// https://en.wikipedia.org/wiki/Modulo_operation\nfunction euclideanModulo( n, m ) {\n\n\treturn ( ( n % m ) + m ) % m;\n\n}\n\n// Linear mapping from range to range \nfunction mapLinear( x, a1, a2, b1, b2 ) {\n\n\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n}\n\n// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\nfunction inverseLerp( x, y, value ) {\n\n\tif ( x !== y ) {\n\n\t\treturn ( value - x ) / ( y - x );\n\n\t\t } else {\n\n\t\treturn 0;\n\n\t\t }\n\n}\n\n// https://en.wikipedia.org/wiki/Linear_interpolation\nfunction lerp( x, y, t ) {\n\n\treturn ( 1 - t ) * x + t * y;\n\n}\n\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nfunction damp( x, y, lambda, dt ) {\n\n\treturn lerp( x, y, 1 - Math.exp( - lambda * dt ) );\n\n}\n\n// https://www.desmos.com/calculator/vcsjnyz7x4\nfunction pingpong( x, length = 1 ) {\n\n\treturn length - Math.abs( euclideanModulo( x, length * 2 ) - length );\n\n}\n\n// http://en.wikipedia.org/wiki/Smoothstep\nfunction smoothstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * ( 3 - 2 * x );\n\n}\n\nfunction smootherstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n}\n\n// Random integer from interval\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n// Random float from interval\nfunction randFloat( low, high ) {\n\n\treturn low + Math.random() * ( high - low );\n\n}\n\n// Random float from <-range/2, range/2> interval\nfunction randFloatSpread( range ) {\n\n\treturn range * ( 0.5 - Math.random() );\n\n}\n\n// Deterministic pseudo-random float in the interval [ 0, 1 ]\nfunction seededRandom( s ) {\n\n\tif ( s !== undefined ) _seed = s % 2147483647;\n\n\t// Park-Miller algorithm\n\n\t_seed = _seed * 16807 % 2147483647;\n\n\treturn ( _seed - 1 ) / 2147483646;\n\n}\n\nfunction degToRad( degrees ) {\n\n\treturn degrees * DEG2RAD;\n\n}\n\nfunction radToDeg( radians ) {\n\n\treturn radians * RAD2DEG;\n\n}\n\nfunction isPowerOfTwo( value ) {\n\n\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n}\n\nfunction ceilPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction floorPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction setQuaternionFromProperEuler( q, a, b, c, order ) {\n\n\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t// rotations are applied to the axes in the order specified by 'order'\n\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t// angles are in radians\n\n\tconst cos = Math.cos;\n\tconst sin = Math.sin;\n\n\tconst c2 = cos( b / 2 );\n\tconst s2 = sin( b / 2 );\n\n\tconst c13 = cos( ( a + c ) / 2 );\n\tconst s13 = sin( ( a + c ) / 2 );\n\n\tconst c1_3 = cos( ( a - c ) / 2 );\n\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\tconst c3_1 = cos( ( c - a ) / 2 );\n\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\tswitch ( order ) {\n\n\t\tcase 'XYX':\n\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YZY':\n\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZXZ':\n\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'XZX':\n\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YXY':\n\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZYZ':\n\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t}\n\n}\n\nvar MathUtils = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tDEG2RAD: DEG2RAD,\n\tRAD2DEG: RAD2DEG,\n\tgenerateUUID: generateUUID,\n\tclamp: clamp,\n\teuclideanModulo: euclideanModulo,\n\tmapLinear: mapLinear,\n\tinverseLerp: inverseLerp,\n\tlerp: lerp,\n\tdamp: damp,\n\tpingpong: pingpong,\n\tsmoothstep: smoothstep,\n\tsmootherstep: smootherstep,\n\trandInt: randInt,\n\trandFloat: randFloat,\n\trandFloatSpread: randFloatSpread,\n\tseededRandom: seededRandom,\n\tdegToRad: degToRad,\n\tradToDeg: radToDeg,\n\tisPowerOfTwo: isPowerOfTwo,\n\tceilPowerOfTwo: ceilPowerOfTwo,\n\tfloorPowerOfTwo: floorPowerOfTwo,\n\tsetQuaternionFromProperEuler: setQuaternionFromProperEuler\n});\n\nclass Vector2 {\n\n\tconstructor( x = 0, y = 0 ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.x;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.x = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.y;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.y = value;\n\n\t}\n\n\tset( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tangle() {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tconst angle = Math.atan2( - this.y, - this.x ) + Math.PI;\n\n\t\treturn angle;\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t}\n\n\trotateAround( center, angle ) {\n\n\t\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tconst x = this.x - center.x;\n\t\tconst y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\n}\n\nVector2.prototype.isVector2 = true;\n\nclass Matrix3 {\n\n\tconstructor() {\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t];\n\n\t\tif ( arguments.length > 0 ) {\n\n\t\t\tconsole.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix4( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t}\n\n\tinvert() {\n\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\ttranspose() {\n\n\t\tlet tmp;\n\t\tconst m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tgetNormalMatrix( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).invert().transpose();\n\n\t}\n\n\ttransposeIntoArray( r ) {\n\n\t\tconst m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tconst c = Math.cos( rotation );\n\t\tconst s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tscale( sx, sy ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx;\n\t\tte[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy;\n\n\t\treturn this;\n\n\t}\n\n\trotate( theta ) {\n\n\t\tconst c = Math.cos( theta );\n\t\tconst s = Math.sin( theta );\n\n\t\tconst te = this.elements;\n\n\t\tconst a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];\n\t\tconst a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ];\n\n\t\tte[ 0 ] = c * a11 + s * a21;\n\t\tte[ 3 ] = c * a12 + s * a22;\n\t\tte[ 6 ] = c * a13 + s * a23;\n\n\t\tte[ 1 ] = - s * a11 + c * a21;\n\t\tte[ 4 ] = - s * a12 + c * a22;\n\t\tte[ 7 ] = - s * a13 + c * a23;\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( tx, ty ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ];\n\t\tte[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t}\n\n}\n\nMatrix3.prototype.isMatrix3 = true;\n\nlet _canvas;\n\nclass ImageUtils {\n\n\tstatic getDataURL( image ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement == 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image );\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n}\n\nlet textureId = 0;\n\nclass Texture extends EventDispatcher {\n\n\tconstructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1, encoding = LinearEncoding ) {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.image = image;\n\t\tthis.mipmaps = [];\n\n\t\tthis.mapping = mapping;\n\n\t\tthis.wrapS = wrapS;\n\t\tthis.wrapT = wrapT;\n\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\n\t\tthis.anisotropy = anisotropy;\n\n\t\tthis.format = format;\n\t\tthis.internalFormat = null;\n\t\tthis.type = type;\n\n\t\tthis.offset = new Vector2( 0, 0 );\n\t\tthis.repeat = new Vector2( 1, 1 );\n\t\tthis.center = new Vector2( 0, 0 );\n\t\tthis.rotation = 0;\n\n\t\tthis.matrixAutoUpdate = true;\n\t\tthis.matrix = new Matrix3();\n\n\t\tthis.generateMipmaps = true;\n\t\tthis.premultiplyAlpha = false;\n\t\tthis.flipY = true;\n\t\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t\t//\n\t\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\t\tthis.encoding = encoding;\n\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.image = source.image;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.internalFormat = source.internalFormat;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.encoding = source.encoding;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\tmapping: this.mapping,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\ttype: this.type,\n\t\t\tencoding: this.encoding,\n\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY,\n\n\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\n\n\t\t};\n\n\t\tif ( this.image !== undefined ) {\n\n\t\t\t// TODO: Move to THREE.Image\n\n\t\t\tconst image = this.image;\n\n\t\t\tif ( image.uuid === undefined ) {\n\n\t\t\t\timage.uuid = generateUUID(); // UGH\n\n\t\t\t}\n\n\t\t\tif ( ! isRootObject && meta.images[ image.uuid ] === undefined ) {\n\n\t\t\t\tlet url;\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\t// process array of images e.g. CubeTexture\n\n\t\t\t\t\turl = [];\n\n\t\t\t\t\tfor ( let i = 0, l = image.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t// check cube texture with data textures\n\n\t\t\t\t\t\tif ( image[ i ].isDataTexture ) {\n\n\t\t\t\t\t\t\turl.push( serializeImage( image[ i ].image ) );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\turl.push( serializeImage( image[ i ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// process single image\n\n\t\t\t\t\turl = serializeImage( image );\n\n\t\t\t\t}\n\n\t\t\t\tmeta.images[ image.uuid ] = {\n\t\t\t\t\tuuid: image.uuid,\n\t\t\t\t\turl: url\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\toutput.image = image.uuid;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\ttransformUv( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t\treturn uv;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n}\n\nTexture.DEFAULT_IMAGE = undefined;\nTexture.DEFAULT_MAPPING = UVMapping;\n\nTexture.prototype.isTexture = true;\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.prototype.slice.call( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nclass Vector4 {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.z;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.z = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.w;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.w = value;\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\t\tthis.w *= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tsetAxisAngleFromQuaternion( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tconst s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetAxisAngleFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tlet angle, x, y, z; // variables for result\n\t\tconst epsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tconst xx = ( m11 + 1 ) / 2;\n\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\tconst yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\t\t( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\t\tthis.w = Math.max( minVal, Math.min( maxVal, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\t\tthis.w = Math.random();\n\n\t\treturn this;\n\n\t}\n\n}\n\nVector4.prototype.isVector4 = true;\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nclass WebGLRenderTarget extends EventDispatcher {\n\n\tconstructor( width, height, options ) {\n\n\t\tsuper();\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.depth = 1;\n\n\t\tthis.scissor = new Vector4( 0, 0, width, height );\n\t\tthis.scissorTest = false;\n\n\t\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\t\toptions = options || {};\n\n\t\tthis.texture = new Texture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\t\tthis.texture.image = {};\n\t\tthis.texture.image.width = width;\n\t\tthis.texture.image.height = height;\n\t\tthis.texture.image.depth = 1;\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\t\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false;\n\t\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n\t}\n\n\tsetTexture( texture ) {\n\n\t\ttexture.image = {\n\t\t\twidth: this.width,\n\t\t\theight: this.height,\n\t\t\tdepth: this.depth\n\t\t};\n\n\t\tthis.texture = texture;\n\n\t}\n\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tthis.texture.image.width = width;\n\t\t\tthis.texture.image.height = height;\n\t\t\tthis.texture.image.depth = depth;\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.texture = source.texture.clone();\n\t\tthis.texture.image = { ...this.texture.image }; // See #20328.\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\t\tthis.depthTexture = source.depthTexture;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nWebGLRenderTarget.prototype.isWebGLRenderTarget = true;\n\nclass WebGLMultipleRenderTargets extends WebGLRenderTarget {\n\n\tconstructor( width, height, count ) {\n\n\t\tsuper( width, height );\n\n\t\tconst texture = this.texture;\n\n\t\tthis.texture = [];\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.texture[ i ] = texture.clone();\n\n\t\t}\n\n\t}\n\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tfor ( let i = 0, il = this.texture.length; i < il; i ++ ) {\n\n\t\t\t\tthis.texture[ i ].image.width = width;\n\t\t\t\tthis.texture[ i ].image.height = height;\n\t\t\t\tthis.texture[ i ].image.depth = depth;\n\n\t\t\t}\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.dispose();\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\n\n\t\tthis.viewport.set( 0, 0, this.width, this.height );\n\t\tthis.scissor.set( 0, 0, this.width, this.height );\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\t\tthis.depthTexture = source.depthTexture;\n\n\t\tthis.texture.length = 0;\n\n\t\tfor ( let i = 0, il = source.texture.length; i < il; i ++ ) {\n\n\t\t\tthis.texture[ i ] = source.texture[ i ].clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nWebGLMultipleRenderTargets.prototype.isWebGLMultipleRenderTargets = true;\n\nclass WebGLMultisampleRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width, height, options ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.samples = 4;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy.call( this, source );\n\n\t\tthis.samples = source.samples;\n\n\t\treturn this;\n\n\t}\n\n}\n\nWebGLMultisampleRenderTarget.prototype.isWebGLMultisampleRenderTarget = true;\n\nclass Quaternion {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\tstatic slerp( qa, qb, qm, t ) {\n\n\t\tconsole.warn( 'THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.' );\n\t\treturn qm.slerpQuaternions( qa, qb, t );\n\n\t}\n\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( t === 0 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( t === 1 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x1;\n\t\t\tdst[ dstOffset + 1 ] = y1;\n\t\t\tdst[ dstOffset + 2 ] = z1;\n\t\t\tdst[ dstOffset + 3 ] = w1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tconst sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tconst tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\tcopy( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromEuler( euler, update ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tthrow new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update !== false ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAxisAngle( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < Number.EPSILON ) {\n\n\t\t\t// vFrom and vTo point in opposite directions\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\tinvert() {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t}\n\n\tconjugate() {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t}\n\n\tnormalize() {\n\n\t\tlet l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( q, p ) {\n\n\t\tif ( p !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );\n\t\t\treturn this.multiplyQuaternions( q, p );\n\n\t\t}\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t}\n\n\tpremultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerp( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tconst x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tlet cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize();\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerpQuaternions( qa, qb, t ) {\n\n\t\tthis.copy( qa ).slerp( qb, t );\n\n\t}\n\n\tequals( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis._x = attribute.getX( index );\n\t\tthis._y = attribute.getY( index );\n\t\tthis._z = attribute.getZ( index );\n\t\tthis._w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n}\n\nQuaternion.prototype.isQuaternion = true;\n\nclass Vector3 {\n\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t}\n\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );\n\t\t\treturn this.multiplyVectors( v, w );\n\n\t\t}\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyVectors( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyEuler( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromEuler( euler ) );\n\n\t}\n\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tconst ix = qw * x + qy * z - qz * y;\n\t\tconst iy = qw * y + qz * x - qx * z;\n\t\tconst iz = qw * z + qx * y - qy * x;\n\t\tconst iw = - qx * x - qy * y - qz * z;\n\n\t\t// calculate result * inverse quat\n\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\treturn this;\n\n\t}\n\n\tproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t}\n\n\t// TODO lengthSquared?\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tcross( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );\n\t\t\treturn this.crossVectors( v, w );\n\n\t\t}\n\n\t\treturn this.crossVectors( this, v );\n\n\t}\n\n\tcrossVectors( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t}\n\n\tprojectOnVector( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector$c.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector$c );\n\n\t}\n\n\treflect( normal ) {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\treturn this.sub( _vector$c.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t}\n\n\tsetFromSpherical( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixScale( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixColumn( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n}\n\nVector3.prototype.isVector3 = true;\n\nconst _vector$c = /*@__PURE__*/ new Vector3();\nconst _quaternion$4 = /*@__PURE__*/ new Quaternion();\n\nclass Box3 {\n\n\tconstructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) {\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromArray( array ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tconst x = array[ i ];\n\t\t\tconst y = array[ i + 1 ];\n\t\t\tconst z = array[ i + 2 ];\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromBufferAttribute( attribute ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\tconst x = attribute.getX( i );\n\t\t\tconst y = attribute.getY( i );\n\t\t\tconst z = attribute.getZ( i );\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$b.copy( size ).multiplyScalar( 0.5 );\n\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getSize() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\texpandByObject( object ) {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t}\n\n\t\t\t_box$3.copy( geometry.boundingBox );\n\t\t\t_box$3.applyMatrix4( object.matrixWorld );\n\n\t\t\tthis.union( _box$3 );\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis.expandByObject( children[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getParameter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector$b );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector$b.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tlet min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t}\n\n\tintersectsTriangle( triangle ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// compute box center and extents\n\t\tthis.getCenter( _center );\n\t\t_extents.subVectors( this.max, _center );\n\n\t\t// translate triangle to aabb origin\n\t\t_v0$2.subVectors( triangle.a, _center );\n\t\t_v1$7.subVectors( triangle.b, _center );\n\t\t_v2$3.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1$7, _v0$2 );\n\t\t_f1.subVectors( _v2$3, _v1$7 );\n\t\t_f2.subVectors( _v0$2, _v2$3 );\n\n\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t// 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\n\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\tlet axes = [\n\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t];\n\t\tif ( ! satForAxes( axes, _v0$2, _v1$7, _v2$3, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// test 3 face normals from the aabb\n\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\tif ( ! satForAxes( axes, _v0$2, _v1$7, _v2$3, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// finally testing the face normal of the triangle\n\t\t// use already existing triangle edge vectors here\n\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\treturn satForAxes( axes, _v0$2, _v1$7, _v2$3, _extents );\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\tconst clampedPoint = _vector$b.copy( point ).clamp( this.min, this.max );\n\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tgetBoundingSphere( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Box3: .getBoundingSphere() target is now required' );\n\t\t\t//target = new Sphere(); // removed to avoid cyclic dependency\n\n\t\t}\n\n\t\tthis.getCenter( target.center );\n\n\t\ttarget.radius = this.getSize( _vector$b ).length() * 0.5;\n\n\t\treturn target;\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// 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.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty() ) return this;\n\n\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\tthis.setFromPoints( _points );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nBox3.prototype.isBox3 = true;\n\nconst _points = [\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3()\n];\n\nconst _vector$b = /*@__PURE__*/ new Vector3();\n\nconst _box$3 = /*@__PURE__*/ new Box3();\n\n// triangle centered vertices\n\nconst _v0$2 = /*@__PURE__*/ new Vector3();\nconst _v1$7 = /*@__PURE__*/ new Vector3();\nconst _v2$3 = /*@__PURE__*/ new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = /*@__PURE__*/ new Vector3();\nconst _f1 = /*@__PURE__*/ new Vector3();\nconst _f2 = /*@__PURE__*/ new Vector3();\n\nconst _center = /*@__PURE__*/ new Vector3();\nconst _extents = /*@__PURE__*/ new Vector3();\nconst _triangleNormal = /*@__PURE__*/ new Vector3();\nconst _testAxis = /*@__PURE__*/ new Vector3();\n\nfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t_testAxis.fromArray( axes, i );\n\t\t// project the aabb onto the seperating axis\n\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t// project all 3 vertices of the triangle onto the seperating axis\n\t\tconst p0 = v0.dot( _testAxis );\n\t\tconst p1 = v1.dot( _testAxis );\n\t\tconst p2 = v2.dot( _testAxis );\n\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t// the axis is seperating and we can exit\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nconst _box$2 = /*@__PURE__*/ new Box3();\nconst _v1$6 = /*@__PURE__*/ new Vector3();\nconst _toFarthestPoint = /*@__PURE__*/ new Vector3();\nconst _toPoint = /*@__PURE__*/ new Vector3();\n\nclass Sphere {\n\n\tconstructor( center = new Vector3(), radius = - 1 ) {\n\n\t\tthis.center = center;\n\t\tthis.radius = radius;\n\n\t}\n\n\tset( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points, optionalCenter ) {\n\n\t\tconst center = this.center;\n\n\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\tcenter.copy( optionalCenter );\n\n\t\t} else {\n\n\t\t\t_box$2.setFromPoints( points ).getCenter( center );\n\n\t\t}\n\n\t\tlet maxRadiusSq = 0;\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t}\n\n\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\treturn ( this.radius < 0 );\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.center.set( 0, 0, 0 );\n\t\tthis.radius = - 1;\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tconst deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .getBoundingBox() target is now required' );\n\t\t\ttarget = new Box3();\n\n\t\t}\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\t// Empty sphere produces empty bounding box\n\t\t\ttarget.makeEmpty();\n\t\t\treturn target;\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\t// from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L649-L671\n\n\t\t_toPoint.subVectors( point, this.center );\n\n\t\tconst lengthSq = _toPoint.lengthSq();\n\n\t\tif ( lengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\tconst length = Math.sqrt( lengthSq );\n\t\t\tconst missingRadiusHalf = ( length - this.radius ) * 0.5;\n\n\t\t\t// Nudge this sphere towards the target point. Add half the missing distance to radius,\n\t\t\t// and the other half to position. This gives a tighter enclosure, instead of if\n\t\t\t// the whole missing distance were just added to radius.\n\n\t\t\tthis.center.add( _toPoint.multiplyScalar( missingRadiusHalf / length ) );\n\t\t\tthis.radius += missingRadiusHalf;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunion( sphere ) {\n\n\t\t// from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L759-L769\n\n\t\t// To enclose another sphere into this sphere, we only need to enclose two points:\n\t\t// 1) Enclose the farthest point on the other sphere into this sphere.\n\t\t// 2) Enclose the opposite point of the farthest point into this sphere.\n\n\t\t_toFarthestPoint.subVectors( sphere.center, this.center ).normalize().multiplyScalar( sphere.radius );\n\n\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).add( _toFarthestPoint ) );\n\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).sub( _toFarthestPoint ) );\n\n\t\treturn this;\n\n\t}\n\n\tequals( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$a = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal$1 = /*@__PURE__*/ new Vector3();\n\nclass Ray {\n\n\tconstructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {\n\n\t\tthis.origin = origin;\n\t\tthis.direction = direction;\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t}\n\n\tat( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t}\n\n\tlookAt( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector$a ) );\n\n\t\treturn this;\n\n\t}\n\n\tclosestPointToPoint( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tconst directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector$a.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector$a.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\treturn _vector$a.distanceToSquared( point );\n\n\t}\n\n\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segDir ).multiplyScalar( s1 ).add( _segCenter );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t}\n\n\tintersectSphere( sphere, target ) {\n\n\t\t_vector$a.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector$a.dot( this.direction );\n\t\tconst d2 = _vector$a.dot( _vector$a ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tdistanceToPlane( plane ) {\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t}\n\n\tintersectPlane( plane, target ) {\n\n\t\tconst t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t}\n\n\tintersectBox( box, target ) {\n\n\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\t// These lines also handle the case where tmin or tmax is NaN\n\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\n\n\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\n\n\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn this.intersectBox( box, _vector$a ) !== null;\n\n\t}\n\n\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal$1.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal$1 );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = - 1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal$1 );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\n\n\t}\n\n\tapplyMatrix4( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t}\n\n\tequals( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass Matrix4 {\n\n\tconstructor() {\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t];\n\n\t\tif ( arguments.length > 0 ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tcopyPosition( m ) {\n\n\t\tconst te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix3( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 3 ], me[ 6 ], 0,\n\t\t\tme[ 1 ], me[ 4 ], me[ 7 ], 0,\n\t\t\tme[ 2 ], me[ 5 ], me[ 8 ], 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmakeBasis( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractRotation( m ) {\n\n\t\t// this method does not support reflection matrices\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tconst scaleX = 1 / _v1$5.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1$5.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1$5.setFromMatrixColumn( m, 2 ).length();\n\n\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromEuler( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tconst te = this.elements;\n\n\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromQuaternion( q ) {\n\n\t\treturn this.compose( _zero, q, _one );\n\n\t}\n\n\tlookAt( eye, target, up ) {\n\n\t\tconst te = this.elements;\n\n\t\t_z.subVectors( eye, target );\n\n\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t// eye and target are in the same position\n\n\t\t\t_z.z = 1;\n\n\t\t}\n\n\t\t_z.normalize();\n\t\t_x.crossVectors( up, _z );\n\n\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t// up and z are parallel\n\n\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t_z.x += 0.0001;\n\n\t\t\t} else {\n\n\t\t\t\t_z.z += 0.0001;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t}\n\n\t\t_x.normalize();\n\t\t_y.crossVectors( _z, _x );\n\n\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m, n ) {\n\n\t\tif ( n !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );\n\t\t\treturn this.multiplyMatrices( m, n );\n\n\t\t}\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tconst b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tconst n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t}\n\n\ttranspose() {\n\n\t\tconst te = this.elements;\n\t\tlet tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tsetPosition( x, y, z ) {\n\n\t\tconst te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tinvert() {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tconst det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\tscale( v ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxScaleOnAxis() {\n\n\t\tconst te = this.elements;\n\n\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tconst scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t}\n\n\tmakeTranslation( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, x,\n\t\t\t0, 1, 0, y,\n\t\t\t0, 0, 1, z,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationX( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationY( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationZ( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationAxis( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tconst c = Math.cos( angle );\n\t\tconst s = Math.sin( angle );\n\t\tconst t = 1 - c;\n\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\tconst tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeShear( xy, xz, yx, yz, zx, zy ) {\n\n\t\tthis.set(\n\n\t\t\t1, yx, zx, 0,\n\t\t\txy, 1, zy, 0,\n\t\t\txz, yz, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tdecompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tlet sx = _v1$5.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tconst sy = _v1$5.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tconst sz = _v1$5.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t// if determine is negative, we need to invert one scale\n\t\tconst det = this.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\tposition.x = te[ 12 ];\n\t\tposition.y = te[ 13 ];\n\t\tposition.z = te[ 14 ];\n\n\t\t// scale the rotation part\n\t\t_m1$2.copy( this );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\t_m1$2.elements[ 0 ] *= invSX;\n\t\t_m1$2.elements[ 1 ] *= invSX;\n\t\t_m1$2.elements[ 2 ] *= invSX;\n\n\t\t_m1$2.elements[ 4 ] *= invSY;\n\t\t_m1$2.elements[ 5 ] *= invSY;\n\t\t_m1$2.elements[ 6 ] *= invSY;\n\n\t\t_m1$2.elements[ 8 ] *= invSZ;\n\t\t_m1$2.elements[ 9 ] *= invSZ;\n\t\t_m1$2.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1$2 );\n\n\t\tscale.x = sx;\n\t\tscale.y = sy;\n\t\tscale.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tmakePerspective( left, right, top, bottom, near, far ) {\n\n\t\tif ( far === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' );\n\n\t\t}\n\n\t\tconst te = this.elements;\n\t\tconst x = 2 * near / ( right - left );\n\t\tconst y = 2 * near / ( top - bottom );\n\n\t\tconst a = ( right + left ) / ( right - left );\n\t\tconst b = ( top + bottom ) / ( top - bottom );\n\t\tconst c = - ( far + near ) / ( far - near );\n\t\tconst d = - 2 * far * near / ( far - near );\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t}\n\n\tmakeOrthographic( left, right, top, bottom, near, far ) {\n\n\t\tconst te = this.elements;\n\t\tconst w = 1.0 / ( right - left );\n\t\tconst h = 1.0 / ( top - bottom );\n\t\tconst p = 1.0 / ( far - near );\n\n\t\tconst x = ( right + left ) * w;\n\t\tconst y = ( top + bottom ) * h;\n\t\tconst z = ( far + near ) * p;\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nMatrix4.prototype.isMatrix4 = true;\n\nconst _v1$5 = /*@__PURE__*/ new Vector3();\nconst _m1$2 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\nconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nconst _matrix$1 = /*@__PURE__*/ new Matrix4();\nconst _quaternion$3 = /*@__PURE__*/ new Quaternion();\n\nclass Euler {\n\n\tconstructor( x = 0, y = 0, z = 0, order = Euler.DefaultOrder ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget order() {\n\n\t\treturn this._order;\n\n\t}\n\n\tset order( value ) {\n\n\t\tthis._order = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order || this._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t}\n\n\tcopy( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m, order, update ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements;\n\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\torder = order || this._order;\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update !== false ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromQuaternion( q, order, update ) {\n\n\t\t_matrix$1.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix$1, order, update );\n\n\t}\n\n\tsetFromVector3( v, order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order || this._order );\n\n\t}\n\n\treorder( newOrder ) {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t_quaternion$3.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion$3, newOrder );\n\n\t}\n\n\tequals( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t}\n\n\tfromArray( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t}\n\n\ttoVector3( optionalResult ) {\n\n\t\tif ( optionalResult ) {\n\n\t\t\treturn optionalResult.set( this._x, this._y, this._z );\n\n\t\t} else {\n\n\t\t\treturn new Vector3( this._x, this._y, this._z );\n\n\t\t}\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n}\n\nEuler.prototype.isEuler = true;\n\nEuler.DefaultOrder = 'XYZ';\nEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\nclass Layers {\n\n\tconstructor() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tset( channel ) {\n\n\t\tthis.mask = 1 << channel | 0;\n\n\t}\n\n\tenable( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t}\n\n\tenableAll() {\n\n\t\tthis.mask = 0xffffffff | 0;\n\n\t}\n\n\ttoggle( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t}\n\n\tdisable( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t}\n\n\tdisableAll() {\n\n\t\tthis.mask = 0;\n\n\t}\n\n\ttest( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n}\n\nlet _object3DId = 0;\n\nconst _v1$4 = /*@__PURE__*/ new Vector3();\nconst _q1 = /*@__PURE__*/ new Quaternion();\nconst _m1$1 = /*@__PURE__*/ new Matrix4();\nconst _target = /*@__PURE__*/ new Vector3();\n\nconst _position$3 = /*@__PURE__*/ new Vector3();\nconst _scale$2 = /*@__PURE__*/ new Vector3();\nconst _quaternion$2 = /*@__PURE__*/ new Quaternion();\n\nconst _xAxis = /*@__PURE__*/ new Vector3( 1, 0, 0 );\nconst _yAxis = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nconst _zAxis = /*@__PURE__*/ new Vector3( 0, 0, 1 );\n\nconst _addedEvent = { type: 'added' };\nconst _removedEvent = { type: 'removed' };\n\nclass Object3D extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Object3D';\n\n\t\tthis.parent = null;\n\t\tthis.children = [];\n\n\t\tthis.up = Object3D.DefaultUp.clone();\n\n\t\tconst position = new Vector3();\n\t\tconst rotation = new Euler();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3( 1, 1, 1 );\n\n\t\tfunction onRotationChange() {\n\n\t\t\tquaternion.setFromEuler( rotation, false );\n\n\t\t}\n\n\t\tfunction onQuaternionChange() {\n\n\t\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t\t}\n\n\t\trotation._onChange( onRotationChange );\n\t\tquaternion._onChange( onQuaternionChange );\n\n\t\tObject.defineProperties( this, {\n\t\t\tposition: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\tquaternion: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\tscale: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: scale\n\t\t\t},\n\t\t\tmodelViewMatrix: {\n\t\t\t\tvalue: new Matrix4()\n\t\t\t},\n\t\t\tnormalMatrix: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t} );\n\n\t\tthis.matrix = new Matrix4();\n\t\tthis.matrixWorld = new Matrix4();\n\n\t\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\tthis.layers = new Layers();\n\t\tthis.visible = true;\n\n\t\tthis.castShadow = false;\n\t\tthis.receiveShadow = false;\n\n\t\tthis.frustumCulled = true;\n\t\tthis.renderOrder = 0;\n\n\t\tthis.animations = [];\n\n\t\tthis.userData = {};\n\n\t}\n\n\tonBeforeRender() {}\n\tonAfterRender() {}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tthis.matrix.premultiply( matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t}\n\n\tsetRotationFromAxisAngle( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t}\n\n\tsetRotationFromEuler( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t}\n\n\tsetRotationFromMatrix( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t}\n\n\tsetRotationFromQuaternion( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t}\n\n\trotateOnAxis( axis, angle ) {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.multiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateOnWorldAxis( axis, angle ) {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.premultiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t}\n\n\trotateY( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t}\n\n\ttranslateOnAxis( axis, distance ) {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_v1$4.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1$4.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslateX( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t}\n\n\ttranslateY( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t}\n\n\ttranslateZ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t}\n\n\tlocalToWorld( vector ) {\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t}\n\n\tworldToLocal( vector ) {\n\n\t\treturn vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() );\n\n\t}\n\n\tlookAt( x, y, z ) {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\t_target.copy( x );\n\n\t\t} else {\n\n\t\t\t_target.set( x, y, z );\n\n\t\t}\n\n\t\tconst parent = this.parent;\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_position$3.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1$1.lookAt( _position$3, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1$1.lookAt( _target, _position$3, this.up );\n\n\t\t}\n\n\t\tthis.quaternion.setFromRotationMatrix( _m1$1 );\n\n\t\tif ( parent ) {\n\n\t\t\t_m1$1.extractRotation( parent.matrixWorld );\n\t\t\t_q1.setFromRotationMatrix( _m1$1 );\n\t\t\tthis.quaternion.premultiply( _q1.invert() );\n\n\t\t}\n\n\t}\n\n\tadd( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object can\\'t be added as a child of itself.', object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object && object.isObject3D ) {\n\n\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\tobject.parent.remove( object );\n\n\t\t\t}\n\n\t\t\tobject.parent = this;\n\t\t\tthis.children.push( object );\n\n\t\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremoveFromParent() {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tparent.remove( this );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclear() {\n\n\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\tconst object = this.children[ i ];\n\n\t\t\tobject.parent = null;\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\tthis.children.length = 0;\n\n\t\treturn this;\n\n\n\t}\n\n\tattach( object ) {\n\n\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_m1$1.copy( this.matrixWorld ).invert();\n\n\t\tif ( object.parent !== null ) {\n\n\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t_m1$1.multiply( object.parent.matrixWorld );\n\n\t\t}\n\n\t\tobject.applyMatrix4( _m1$1 );\n\n\t\tthis.add( object );\n\n\t\tobject.updateWorldMatrix( false, true );\n\n\t\treturn this;\n\n\t}\n\n\tgetObjectById( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t}\n\n\tgetObjectByName( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t}\n\n\tgetObjectByProperty( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = this.children[ i ];\n\t\t\tconst object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tgetWorldPosition( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldPosition() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t}\n\n\tgetWorldQuaternion( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldQuaternion() target is now required' );\n\t\t\ttarget = new Quaternion();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, target, _scale$2 );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldScale( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldScale() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, _quaternion$2, target );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldDirection() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t}\n\n\traycast() {}\n\n\ttraverse( callback ) {\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseVisible( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseAncestors( callback ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// update children\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].updateMatrixWorld( force );\n\n\t\t}\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.parent === null ) {\n\n\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t} else {\n\n\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t}\n\n\t\t// update children\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateWorldMatrix( false, true );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tconst output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {},\n\t\t\t\tskeletons: {},\n\t\t\t\tanimations: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tconst object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData;\n\n\t\tobject.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t// object specific properties\n\n\t\tif ( this.isInstancedMesh ) {\n\n\t\t\tobject.type = 'InstancedMesh';\n\t\t\tobject.count = this.count;\n\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\t\t\tif ( this.instanceColor !== null ) object.instanceColor = this.instanceColor.toJSON();\n\n\t\t}\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.isSkinnedMesh ) {\n\n\t\t\tobject.bindMode = this.bindMode;\n\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\tobject.skeleton = this.skeleton.uuid;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tconst uuids = [];\n\n\t\t\t\tfor ( let i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.animations.length > 0 ) {\n\n\t\t\tobject.animations = [];\n\n\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst geometries = extractFromCache( meta.geometries );\n\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst shapes = extractFromCache( meta.shapes );\n\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\tconst animations = extractFromCache( meta.animations );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\tif ( animations.length > 0 ) output.animations = animations;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t}\n\n\tclone( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t}\n\n\tcopy( source, recursive = true ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.rotation.order = source.rotation.order;\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tconst child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nObject3D.DefaultUp = new Vector3( 0, 1, 0 );\nObject3D.DefaultMatrixAutoUpdate = true;\n\nObject3D.prototype.isObject3D = true;\n\nconst _vector1 = /*@__PURE__*/ new Vector3();\nconst _vector2$1 = /*@__PURE__*/ new Vector3();\nconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\nclass Plane {\n\n\tconstructor( normal = new Vector3( 1, 0, 0 ), constant = 0 ) {\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = normal;\n\t\tthis.constant = constant;\n\n\t}\n\n\tset( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponents( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromNormalAndCoplanarPoint( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCoplanarPoints( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2$1.subVectors( a, b ) ).normalize();\n\n\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t}\n\n\tnormalize() {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tconst inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t}\n\n\tdistanceToSphere( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t}\n\n\tprojectPoint( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .projectPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point );\n\n\t}\n\n\tintersectLine( line, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .intersectLine() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tconst direction = line.delta( _vector1 );\n\n\t\tconst denominator = this.normal.dot( direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\treturn target.copy( line.start );\n\n\t\t\t}\n\n\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn target.copy( direction ).multiplyScalar( t ).add( line.start );\n\n\t}\n\n\tintersectsLine( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tconst startSign = this.distanceToPoint( line.start );\n\t\tconst endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t}\n\n\tcoplanarPoint( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .coplanarPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t}\n\n\tapplyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tequals( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nPlane.prototype.isPlane = true;\n\nconst _v0$1 = /*@__PURE__*/ new Vector3();\nconst _v1$3 = /*@__PURE__*/ new Vector3();\nconst _v2$2 = /*@__PURE__*/ new Vector3();\nconst _v3$1 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nclass Triangle {\n\n\tconstructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t}\n\n\tstatic getNormal( a, b, c, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getNormal() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0$1.subVectors( a, b );\n\t\ttarget.cross( _v0$1 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\n\n\t}\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t_v0$1.subVectors( c, a );\n\t\t_v1$3.subVectors( b, a );\n\t\t_v2$2.subVectors( point, a );\n\n\t\tconst dot00 = _v0$1.dot( _v0$1 );\n\t\tconst dot01 = _v0$1.dot( _v1$3 );\n\t\tconst dot02 = _v0$1.dot( _v2$2 );\n\t\tconst dot11 = _v1$3.dot( _v1$3 );\n\t\tconst dot12 = _v1$3.dot( _v2$2 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getBarycoord() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\t// arbitrary location outside of triangle?\n\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t}\n\n\tstatic containsPoint( point, a, b, c ) {\n\n\t\tthis.getBarycoord( point, a, b, c, _v3$1 );\n\n\t\treturn ( _v3$1.x >= 0 ) && ( _v3$1.y >= 0 ) && ( ( _v3$1.x + _v3$1.y ) <= 1 );\n\n\t}\n\n\tstatic getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) {\n\n\t\tthis.getBarycoord( point, p1, p2, p3, _v3$1 );\n\n\t\ttarget.set( 0, 0 );\n\t\ttarget.addScaledVector( uv1, _v3$1.x );\n\t\ttarget.addScaledVector( uv2, _v3$1.y );\n\t\ttarget.addScaledVector( uv3, _v3$1.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t_v0$1.subVectors( c, b );\n\t\t_v1$3.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn ( _v0$1.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;\n\n\t}\n\n\tset( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPointsAndIndices( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t}\n\n\tgetArea() {\n\n\t\t_v0$1.subVectors( this.c, this.b );\n\t\t_v1$3.subVectors( this.a, this.b );\n\n\t\treturn _v0$1.cross( _v1$3 ).length() * 0.5;\n\n\t}\n\n\tgetMidpoint( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getMidpoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t}\n\n\tgetNormal( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\tgetPlane( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getPlane() target is now required' );\n\t\t\ttarget = new Plane();\n\n\t\t}\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t}\n\n\tgetBarycoord( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\tgetUV( point, uv1, uv2, uv3, target ) {\n\n\t\treturn Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\tclosestPointToPoint( p, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t}\n\n\tequals( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n}\n\nlet materialId = 0;\n\nclass Material extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Material';\n\n\t\tthis.fog = true;\n\n\t\tthis.blending = NormalBlending;\n\t\tthis.side = FrontSide;\n\t\tthis.vertexColors = false;\n\n\t\tthis.opacity = 1;\n\t\tthis.transparent = false;\n\n\t\tthis.blendSrc = SrcAlphaFactor;\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\t\tthis.blendEquation = AddEquation;\n\t\tthis.blendSrcAlpha = null;\n\t\tthis.blendDstAlpha = null;\n\t\tthis.blendEquationAlpha = null;\n\n\t\tthis.depthFunc = LessEqualDepth;\n\t\tthis.depthTest = true;\n\t\tthis.depthWrite = true;\n\n\t\tthis.stencilWriteMask = 0xff;\n\t\tthis.stencilFunc = AlwaysStencilFunc;\n\t\tthis.stencilRef = 0;\n\t\tthis.stencilFuncMask = 0xff;\n\t\tthis.stencilFail = KeepStencilOp;\n\t\tthis.stencilZFail = KeepStencilOp;\n\t\tthis.stencilZPass = KeepStencilOp;\n\t\tthis.stencilWrite = false;\n\n\t\tthis.clippingPlanes = null;\n\t\tthis.clipIntersection = false;\n\t\tthis.clipShadows = false;\n\n\t\tthis.shadowSide = null;\n\n\t\tthis.colorWrite = true;\n\n\t\tthis.precision = null; // override the renderer's default precision for this material\n\n\t\tthis.polygonOffset = false;\n\t\tthis.polygonOffsetFactor = 0;\n\t\tthis.polygonOffsetUnits = 0;\n\n\t\tthis.dithering = false;\n\n\t\tthis.alphaTest = 0;\n\t\tthis.alphaToCoverage = false;\n\t\tthis.premultipliedAlpha = false;\n\n\t\tthis.visible = true;\n\n\t\tthis.toneMapped = true;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\n\t}\n\n\tonBuild( /* shaderobject, renderer */ ) {}\n\n\tonBeforeCompile( /* shaderobject, renderer */ ) {}\n\n\tcustomProgramCacheKey() {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t}\n\n\tsetValues( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Material: \\'' + key + '\\' parameter is undefined.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// for backward compatability if shading is set in the constructor\n\t\t\tif ( key === 'shading' ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\t\tthis.flatShading = ( newValue === FlatShading ) ? true : false;\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': \\'' + key + '\\' is not a property of this material.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRoot = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRoot ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.sheen && this.sheen.isColor ) data.sheen = this.sheen.getHex();\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;\n\t\tif ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\tif ( this.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\n\t\tif ( this.lightMap && this.lightMap.isTexture ) {\n\n\t\t\tdata.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\t\tdata.lightMapIntensity = this.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\n\t\t}\n\n\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\t\tif ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;\n\t\tif ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.transmission !== undefined ) data.transmission = this.transmission;\n\t\tif ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid;\n\t\tif ( this.thickness !== undefined ) data.thickness = this.thickness;\n\t\tif ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;\n\t\tif ( this.attenuationDistance !== undefined ) data.attenuationDistance = this.attenuationDistance;\n\t\tif ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex();\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.shadowSide !== null ) data.shadowSide = this.shadowSide;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors ) data.vertexColors = true;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\tdata.depthFunc = this.depthFunc;\n\t\tdata.depthTest = this.depthTest;\n\t\tdata.depthWrite = this.depthWrite;\n\t\tdata.colorWrite = this.colorWrite;\n\n\t\tdata.stencilWrite = this.stencilWrite;\n\t\tdata.stencilWriteMask = this.stencilWriteMask;\n\t\tdata.stencilFunc = this.stencilFunc;\n\t\tdata.stencilRef = this.stencilRef;\n\t\tdata.stencilFuncMask = this.stencilFuncMask;\n\t\tdata.stencilFail = this.stencilFail;\n\t\tdata.stencilZFail = this.stencilZFail;\n\t\tdata.stencilZPass = this.stencilZPass;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth && this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.alphaToCoverage === true ) data.alphaToCoverage = this.alphaToCoverage;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\n\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.morphTargets === true ) data.morphTargets = true;\n\t\tif ( this.morphNormals === true ) data.morphNormals = true;\n\n\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRoot ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.fog = source.fog;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.alphaToCoverage = source.alphaToCoverage;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\tthis.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n}\n\nMaterial.prototype.isMaterial = true;\n\nconst _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\n\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\nfunction SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nfunction LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n}\n\nclass Color {\n\n\tconstructor( r, g, b ) {\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\t\t\treturn this.set( r );\n\n\t\t}\n\n\t\treturn this.setRGB( r, g, b );\n\n\t}\n\n\tset( value ) {\n\n\t\tif ( value && value.isColor ) {\n\n\t\t\tthis.copy( value );\n\n\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\tthis.setHex( value );\n\n\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\tthis.setStyle( value );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetHex( hex ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\treturn this;\n\n\t}\n\n\tsetRGB( r, g, b ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\treturn this;\n\n\t}\n\n\tsetHSL( h, s, l ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = euclideanModulo( h, 1 );\n\t\ts = clamp( s, 0, 1 );\n\t\tl = clamp( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetStyle( style ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tlet m;\n\n\t\tif ( m = /^((?:rgb|hsl)a?)\\(([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\tconst h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\tconst s = parseInt( color[ 2 ], 10 ) / 100;\n\t\t\t\t\t\tconst l = parseInt( color[ 3 ], 10 ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setHSL( h, s, l );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f\\d]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tconst hex = m[ 1 ];\n\t\t\tconst size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( style && style.length > 0 ) {\n\n\t\t\treturn this.setColorName( style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetColorName( style ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style.toLowerCase() ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\tcopy( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t}\n\n\tcopyGammaToLinear( color, gammaFactor = 2.0 ) {\n\n\t\tthis.r = Math.pow( color.r, gammaFactor );\n\t\tthis.g = Math.pow( color.g, gammaFactor );\n\t\tthis.b = Math.pow( color.b, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToGamma( color, gammaFactor = 2.0 ) {\n\n\t\tconst safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0;\n\n\t\tthis.r = Math.pow( color.r, safeInverse );\n\t\tthis.g = Math.pow( color.g, safeInverse );\n\t\tthis.b = Math.pow( color.b, safeInverse );\n\n\t\treturn this;\n\n\t}\n\n\tconvertGammaToLinear( gammaFactor ) {\n\n\t\tthis.copyGammaToLinear( this, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToGamma( gammaFactor ) {\n\n\t\tthis.copyLinearToGamma( this, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tcopySRGBToLinear( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToSRGB( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tconvertSRGBToLinear() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\tgetHex() {\n\n\t\treturn ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0;\n\n\t}\n\n\tgetHexString() {\n\n\t\treturn ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 );\n\n\t}\n\n\tgetHSL( target ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Color: .getHSL() target is now required' );\n\t\t\ttarget = { h: 0, s: 0, l: 0 };\n\n\t\t}\n\n\t\tconst r = this.r, g = this.g, b = this.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tconst delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t}\n\n\tgetStyle() {\n\n\t\treturn 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';\n\n\t}\n\n\toffsetHSL( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\t_hslA.h += h; _hslA.s += s; _hslA.l += l;\n\n\t\tthis.setHSL( _hslA.h, _hslA.s, _hslA.l );\n\n\t\treturn this;\n\n\t}\n\n\tadd( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t}\n\n\taddColors( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t}\n\n\tlerp( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpColors( color1, color2, alpha ) {\n\n\t\tthis.r = color1.r + ( color2.r - color1.r ) * alpha;\n\t\tthis.g = color1.g + ( color2.g - color1.g ) * alpha;\n\t\tthis.b = color1.b + ( color2.b - color1.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\n\n\t\treturn this;\n\n\t}\n\n\tequals( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\tif ( attribute.normalized === true ) {\n\n\t\t\t// assuming Uint8Array\n\n\t\t\tthis.r /= 255;\n\t\t\tthis.g /= 255;\n\t\t\tthis.b /= 255;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.getHex();\n\n\t}\n\n}\n\nColor.NAMES = _colorKeywords;\n\nColor.prototype.isColor = true;\nColor.prototype.r = 1;\nColor.prototype.g = 1;\nColor.prototype.b = 1;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * depthTest: ,\n * depthWrite: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * morphTargets: \n * }\n */\n\nclass MeshBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // emissive\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.morphTargets = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshBasicMaterial.prototype.isMeshBasicMaterial = true;\n\nconst _vector$9 = /*@__PURE__*/ new Vector3();\nconst _vector2 = /*@__PURE__*/ new Vector2();\n\nclass BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.name = '';\n\n\t\tthis.array = array;\n\t\tthis.itemSize = itemSize;\n\t\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\t\tthis.normalized = normalized === true;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( let i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyArray( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t}\n\n\tcopyColorsArray( colors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\tlet color = colors[ i ];\n\n\t\t\tif ( color === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i );\n\t\t\t\tcolor = new Color();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = color.r;\n\t\t\tarray[ offset ++ ] = color.g;\n\t\t\tarray[ offset ++ ] = color.b;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyVector2sArray( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector2();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyVector3sArray( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector3();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyVector4sArray( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector4();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\t\t\tarray[ offset ++ ] = vector.w;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tif ( this.itemSize === 2 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector2.fromBufferAttribute( this, i );\n\t\t\t\t_vector2.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2.x, _vector2.y );\n\n\t\t\t}\n\n\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$9.fromBufferAttribute( this, i );\n\t\t\t\t_vector$9.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.x = this.getX( i );\n\t\t\t_vector$9.y = this.getY( i );\n\t\t\t_vector$9.z = this.getZ( i );\n\n\t\t\t_vector$9.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.x = this.getX( i );\n\t\t\t_vector$9.y = this.getY( i );\n\t\t\t_vector$9.z = this.getZ( i );\n\n\t\t\t_vector$9.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.x = this.getX( i );\n\t\t\t_vector$9.y = this.getY( i );\n\t\t\t_vector$9.z = this.getZ( i );\n\n\t\t\t_vector$9.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\treturn this.array[ index * this.itemSize ];\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 1 ];\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 2 ];\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 3 ];\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\titemSize: this.itemSize,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tarray: Array.prototype.slice.call( this.array ),\n\t\t\tnormalized: this.normalized\n\t\t};\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( this.usage !== StaticDrawUsage ) data.usage = this.usage;\n\t\tif ( this.updateRange.offset !== 0 || this.updateRange.count !== - 1 ) data.updateRange = this.updateRange;\n\n\t\treturn data;\n\n\t}\n\n}\n\nBufferAttribute.prototype.isBufferAttribute = true;\n\n//\n\nclass Int8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8ClampedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8ClampedArray( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nFloat16BufferAttribute.prototype.isFloat16BufferAttribute = true;\n\nclass Float32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float64BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float64Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nfunction arrayMax( array ) {\n\n\tif ( array.length === 0 ) return - Infinity;\n\n\tlet max = array[ 0 ];\n\n\tfor ( let i = 1, l = array.length; i < l; ++ i ) {\n\n\t\tif ( array[ i ] > max ) max = array[ i ];\n\n\t}\n\n\treturn max;\n\n}\n\nconst TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\tUint8ClampedArray: Uint8ClampedArray,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\nfunction getTypedArray( type, buffer ) {\n\n\treturn new TYPED_ARRAYS[ type ]( buffer );\n\n}\n\nlet _id = 0;\n\nconst _m1 = /*@__PURE__*/ new Matrix4();\nconst _obj = /*@__PURE__*/ new Object3D();\nconst _offset = /*@__PURE__*/ new Vector3();\nconst _box$1 = /*@__PURE__*/ new Box3();\nconst _boxMorphTargets = /*@__PURE__*/ new Box3();\nconst _vector$8 = /*@__PURE__*/ new Vector3();\n\nclass BufferGeometry extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'id', { value: _id ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'BufferGeometry';\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\n\t\tthis.morphAttributes = {};\n\t\tthis.morphTargetsRelative = false;\n\n\t\tthis.groups = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tthis.drawRange = { start: 0, count: Infinity };\n\n\t\tthis.userData = {};\n\n\t}\n\n\tgetIndex() {\n\n\t\treturn this.index;\n\n\t}\n\n\tsetIndex( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetAttribute( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t}\n\n\tsetAttribute( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t}\n\n\tdeleteAttribute( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t}\n\n\thasAttribute( name ) {\n\n\t\treturn this.attributes[ name ] !== undefined;\n\n\t}\n\n\taddGroup( start, count, materialIndex = 0 ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex\n\n\t\t} );\n\n\t}\n\n\tclearGroups() {\n\n\t\tthis.groups = [];\n\n\t}\n\n\tsetDrawRange( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tconst normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tconst tangent = this.attributes.tangent;\n\n\t\tif ( tangent !== undefined ) {\n\n\t\t\ttangent.transformDirection( matrix );\n\n\t\t\ttangent.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\t_m1.makeRotationFromQuaternion( q );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateY( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\tscale( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\tlookAt( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t}\n\n\tcenter() {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tconst position = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingBox.set(\n\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t);\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_box$1.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.min, _box$1.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.max, _box$1.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$1.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$1.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position ) {\n\n\t\t\t// first, find the center of the bounding sphere\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t_box$1.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$1.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box$1.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$1.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box$1.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box$1.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box$1.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_box$1.getCenter( center );\n\n\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t_vector$8.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t}\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t_vector$8.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t_vector$8.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeFaceNormals() {\n\n\t\t// backwards compatibility\n\n\t}\n\n\tcomputeTangents() {\n\n\t\tconst index = this.index;\n\t\tconst attributes = this.attributes;\n\n\t\t// based on http://www.terathon.com/code/tangent.html\n\t\t// (per vertex tangents)\n\n\t\tif ( index === null ||\n\t\t\t attributes.position === undefined ||\n\t\t\t attributes.normal === undefined ||\n\t\t\t attributes.uv === undefined ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst indices = index.array;\n\t\tconst positions = attributes.position.array;\n\t\tconst normals = attributes.normal.array;\n\t\tconst uvs = attributes.uv.array;\n\n\t\tconst nVertices = positions.length / 3;\n\n\t\tif ( attributes.tangent === undefined ) {\n\n\t\t\tthis.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * nVertices ), 4 ) );\n\n\t\t}\n\n\t\tconst tangents = attributes.tangent.array;\n\n\t\tconst tan1 = [], tan2 = [];\n\n\t\tfor ( let i = 0; i < nVertices; i ++ ) {\n\n\t\t\ttan1[ i ] = new Vector3();\n\t\t\ttan2[ i ] = new Vector3();\n\n\t\t}\n\n\t\tconst vA = new Vector3(),\n\t\t\tvB = new Vector3(),\n\t\t\tvC = new Vector3(),\n\n\t\t\tuvA = new Vector2(),\n\t\t\tuvB = new Vector2(),\n\t\t\tuvC = new Vector2(),\n\n\t\t\tsdir = new Vector3(),\n\t\t\ttdir = new Vector3();\n\n\t\tfunction handleTriangle( a, b, c ) {\n\n\t\t\tvA.fromArray( positions, a * 3 );\n\t\t\tvB.fromArray( positions, b * 3 );\n\t\t\tvC.fromArray( positions, c * 3 );\n\n\t\t\tuvA.fromArray( uvs, a * 2 );\n\t\t\tuvB.fromArray( uvs, b * 2 );\n\t\t\tuvC.fromArray( uvs, c * 2 );\n\n\t\t\tvB.sub( vA );\n\t\t\tvC.sub( vA );\n\n\t\t\tuvB.sub( uvA );\n\t\t\tuvC.sub( uvA );\n\n\t\t\tconst r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y );\n\n\t\t\t// silently ignore degenerate uv triangles having coincident or colinear vertices\n\n\t\t\tif ( ! isFinite( r ) ) return;\n\n\t\t\tsdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r );\n\t\t\ttdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r );\n\n\t\t\ttan1[ a ].add( sdir );\n\t\t\ttan1[ b ].add( sdir );\n\t\t\ttan1[ c ].add( sdir );\n\n\t\t\ttan2[ a ].add( tdir );\n\t\t\ttan2[ b ].add( tdir );\n\t\t\ttan2[ c ].add( tdir );\n\n\t\t}\n\n\t\tlet groups = this.groups;\n\n\t\tif ( groups.length === 0 ) {\n\n\t\t\tgroups = [ {\n\t\t\t\tstart: 0,\n\t\t\t\tcount: indices.length\n\t\t\t} ];\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleTriangle(\n\t\t\t\t\tindices[ j + 0 ],\n\t\t\t\t\tindices[ j + 1 ],\n\t\t\t\t\tindices[ j + 2 ]\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst tmp = new Vector3(), tmp2 = new Vector3();\n\t\tconst n = new Vector3(), n2 = new Vector3();\n\n\t\tfunction handleVertex( v ) {\n\n\t\t\tn.fromArray( normals, v * 3 );\n\t\t\tn2.copy( n );\n\n\t\t\tconst t = tan1[ v ];\n\n\t\t\t// Gram-Schmidt orthogonalize\n\n\t\t\ttmp.copy( t );\n\t\t\ttmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();\n\n\t\t\t// Calculate handedness\n\n\t\t\ttmp2.crossVectors( n2, t );\n\t\t\tconst test = tmp2.dot( tan2[ v ] );\n\t\t\tconst w = ( test < 0.0 ) ? - 1.0 : 1.0;\n\n\t\t\ttangents[ v * 4 ] = tmp.x;\n\t\t\ttangents[ v * 4 + 1 ] = tmp.y;\n\t\t\ttangents[ v * 4 + 2 ] = tmp.z;\n\t\t\ttangents[ v * 4 + 3 ] = w;\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleVertex( indices[ j + 0 ] );\n\t\t\t\thandleVertex( indices[ j + 1 ] );\n\t\t\t\thandleVertex( indices[ j + 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeVertexNormals() {\n\n\t\tconst index = this.index;\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\tnA.add( cb );\n\t\t\t\t\tnB.add( cb );\n\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tmerge( geometry, offset ) {\n\n\t\tif ( ! ( geometry && geometry.isBufferGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( offset === undefined ) {\n\n\t\t\toffset = 0;\n\n\t\t\tconsole.warn(\n\t\t\t\t'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. '\n\t\t\t\t+ 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.'\n\t\t\t);\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tif ( geometry.attributes[ key ] === undefined ) continue;\n\n\t\t\tconst attribute1 = attributes[ key ];\n\t\t\tconst attributeArray1 = attribute1.array;\n\n\t\t\tconst attribute2 = geometry.attributes[ key ];\n\t\t\tconst attributeArray2 = attribute2.array;\n\n\t\t\tconst attributeOffset = attribute2.itemSize * offset;\n\t\t\tconst length = Math.min( attributeArray2.length, attributeArray1.length - attributeOffset );\n\n\t\t\tfor ( let i = 0, j = attributeOffset; i < length; i ++, j ++ ) {\n\n\t\t\t\tattributeArray1[ j ] = attributeArray2[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tnormalizeNormals() {\n\n\t\tconst normals = this.attributes.normal;\n\n\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t_vector$8.fromBufferAttribute( normals, i );\n\n\t\t\t_vector$8.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t}\n\n\t}\n\n\ttoNonIndexed() {\n\n\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\t\t\tconst normalized = attribute.normalized;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( array2, itemSize, normalized );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tconst indices = this.index.array;\n\t\tconst attributes = this.attributes;\n\n\t\t// attributes\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = this.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst morphArray = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t}\n\n\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = this.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// for simplicity the code assumes attributes are not shared across geometries, see #15811\n\n\t\tdata.data = { attributes: {} };\n\n\t\tconst index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t};\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tdata.data.attributes[ key ] = attribute.toJSON( data.data );\n\n\t\t}\n\n\t\tconst morphAttributes = {};\n\t\tlet hasMorphAttributes = false;\n\n\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\tarray.push( attribute.toJSON( data.data ) );\n\n\t\t\t}\n\n\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\thasMorphAttributes = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphAttributes ) {\n\n\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t}\n\n\t\tconst groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t const parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t const values = [];\n\n\t\t for ( const key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t const geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new BufferGeometry().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// used for storing cloned, shared data\n\n\t\tconst data = {};\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tconst index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone( data ) );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tconst attributes = source.attributes;\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = source.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = source.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nBufferGeometry.prototype.isBufferGeometry = true;\n\nconst _inverseMatrix$2 = /*@__PURE__*/ new Matrix4();\nconst _ray$2 = /*@__PURE__*/ new Ray();\nconst _sphere$3 = /*@__PURE__*/ new Sphere();\n\nconst _vA$1 = /*@__PURE__*/ new Vector3();\nconst _vB$1 = /*@__PURE__*/ new Vector3();\nconst _vC$1 = /*@__PURE__*/ new Vector3();\n\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _tempB = /*@__PURE__*/ new Vector3();\nconst _tempC = /*@__PURE__*/ new Vector3();\n\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _morphB = /*@__PURE__*/ new Vector3();\nconst _morphC = /*@__PURE__*/ new Vector3();\n\nconst _uvA$1 = /*@__PURE__*/ new Vector2();\nconst _uvB$1 = /*@__PURE__*/ new Vector2();\nconst _uvC$1 = /*@__PURE__*/ new Vector2();\n\nconst _intersectionPoint = /*@__PURE__*/ new Vector3();\nconst _intersectionPointWorld = /*@__PURE__*/ new Vector3();\n\nclass Mesh extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Mesh';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$3.copy( geometry.boundingSphere );\n\t\t_sphere$3.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$2.copy( matrixWorld ).invert();\n\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\t// Check boundingBox before continuing\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray$2.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\tlet intersection;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\t\t\tconst uv = geometry.attributes.uv;\n\t\t\tconst uv2 = geometry.attributes.uv2;\n\t\t\tconst groups = geometry.groups;\n\t\t\tconst drawRange = geometry.drawRange;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\t// indexed buffer geometry\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\tconst end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( position !== undefined ) {\n\n\t\t\t\t// non-indexed buffer geometry\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\tconst end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\tconst a = i;\n\t\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n}\n\nMesh.prototype.isMesh = true;\n\nfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkBufferGeometryIntersection( object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ) {\n\n\t_vA$1.fromBufferAttribute( position, a );\n\t_vB$1.fromBufferAttribute( position, b );\n\t_vC$1.fromBufferAttribute( position, c );\n\n\tconst morphInfluences = object.morphTargetInfluences;\n\n\tif ( material.morphTargets && morphPosition && morphInfluences ) {\n\n\t\t_morphA.set( 0, 0, 0 );\n\t\t_morphB.set( 0, 0, 0 );\n\t\t_morphC.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\tconst influence = morphInfluences[ i ];\n\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t_tempA.fromBufferAttribute( morphAttribute, a );\n\t\t\t_tempB.fromBufferAttribute( morphAttribute, b );\n\t\t\t_tempC.fromBufferAttribute( morphAttribute, c );\n\n\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t} else {\n\n\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA$1 ), influence );\n\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB$1 ), influence );\n\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC$1 ), influence );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_vA$1.add( _morphA );\n\t\t_vB$1.add( _morphB );\n\t\t_vC$1.add( _morphC );\n\n\t}\n\n\tif ( object.isSkinnedMesh ) {\n\n\t\tobject.boneTransform( a, _vA$1 );\n\t\tobject.boneTransform( b, _vB$1 );\n\t\tobject.boneTransform( c, _vC$1 );\n\n\t}\n\n\tconst intersection = checkIntersection( object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv2 ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv2, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv2, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv2, c );\n\n\t\t\tintersection.uv2 = Triangle.getUV( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA$1, _vB$1, _vC$1, face.normal );\n\n\t\tintersection.face = face;\n\n\t}\n\n\treturn intersection;\n\n}\n\nclass BoxGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tconst scope = this;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet numberOfVertices = 0;\n\t\tlet groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tconst segmentWidth = width / gridX;\n\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\tconst widthHalf = width / 2;\n\t\t\tconst heightHalf = height / 2;\n\t\t\tconst depthHalf = depth / 2;\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tlet vertexCounter = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Uniform Utilities\n */\n\nfunction cloneUniforms( src ) {\n\n\tconst dst = {};\n\n\tfor ( const u in src ) {\n\n\t\tdst[ u ] = {};\n\n\t\tfor ( const p in src[ u ] ) {\n\n\t\t\tconst property = src[ u ][ p ];\n\n\t\t\tif ( property && ( property.isColor ||\n\t\t\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\t\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\t\t\tproperty.isTexture || property.isQuaternion ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t} else {\n\n\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction mergeUniforms( uniforms ) {\n\n\tconst merged = {};\n\n\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\tfor ( const p in tmp ) {\n\n\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t}\n\n\t}\n\n\treturn merged;\n\n}\n\n// Legacy\n\nconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\nvar default_vertex = \"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";\n\nvar default_fragment = \"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";\n\n/**\n * parameters = {\n * defines: { \"label\" : \"value\" },\n * uniforms: { \"parameter1\": { value: 1.0 }, \"parameter2\": { value2: 2 } },\n *\n * fragmentShader: ,\n * vertexShader: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * lights: ,\n *\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nclass ShaderMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ShaderMaterial';\n\n\t\tthis.defines = {};\n\t\tthis.uniforms = {};\n\n\t\tthis.vertexShader = default_vertex;\n\t\tthis.fragmentShader = default_fragment;\n\n\t\tthis.linewidth = 1;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = false; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tthis.morphTargets = false; // set to use morph targets\n\t\tthis.morphNormals = false; // set to use morph normals\n\n\t\tthis.extensions = {\n\t\t\tderivatives: false, // set to use derivatives\n\t\t\tfragDepth: false, // set to use fragment depth values\n\t\t\tdrawBuffers: false, // set to use draw buffers\n\t\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t\t};\n\n\t\t// When rendered geometry doesn't include these attributes but the material does,\n\t\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\t\tthis.defaultAttributeValues = {\n\t\t\t'color': [ 1, 1, 1 ],\n\t\t\t'uv': [ 0, 0 ],\n\t\t\t'uv2': [ 0, 0 ]\n\t\t};\n\n\t\tthis.index0AttributeName = undefined;\n\t\tthis.uniformsNeedUpdate = false;\n\n\t\tthis.glslVersion = null;\n\n\t\tif ( parameters !== undefined ) {\n\n\t\t\tif ( parameters.attributes !== undefined ) {\n\n\t\t\t\tconsole.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t\tthis.setValues( parameters );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\n\t\tthis.uniforms = cloneUniforms( source.uniforms );\n\n\t\tthis.defines = Object.assign( {}, source.defines );\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.lights = source.lights;\n\t\tthis.clipping = source.clipping;\n\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\tthis.extensions = Object.assign( {}, source.extensions );\n\n\t\tthis.glslVersion = source.glslVersion;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.glslVersion = this.glslVersion;\n\t\tdata.uniforms = {};\n\n\t\tfor ( const name in this.uniforms ) {\n\n\t\t\tconst uniform = this.uniforms[ name ];\n\t\t\tconst value = uniform.value;\n\n\t\t\tif ( value && value.isTexture ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 't',\n\t\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isColor ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'c',\n\t\t\t\t\tvalue: value.getHex()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v2',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\n\t\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\n\t\tconst extensions = {};\n\n\t\tfor ( const key in this.extensions ) {\n\n\t\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t\t}\n\n\t\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\t\treturn data;\n\n\t}\n\n}\n\nShaderMaterial.prototype.isShaderMaterial = true;\n\nclass Camera extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Camera';\n\n\t\tthis.matrixWorldInverse = new Matrix4();\n\n\t\tthis.projectionMatrix = new Matrix4();\n\t\tthis.projectionMatrixInverse = new Matrix4();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\treturn this;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Camera: .getWorldDirection() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tsuper.updateWorldMatrix( updateParents, updateChildren );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nCamera.prototype.isCamera = true;\n\nclass PerspectiveCamera extends Camera {\n\n\tconstructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PerspectiveCamera';\n\n\t\tthis.fov = fov;\n\t\tthis.zoom = 1;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.focus = 10;\n\n\t\tthis.aspect = aspect;\n\t\tthis.view = null;\n\n\t\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\t\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength( focalLength ) {\n\n\t\t/** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */\n\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength() {\n\n\t\tconst vExtentSlope = Math.tan( DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t}\n\n\tgetEffectiveFOV() {\n\n\t\treturn RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t}\n\n\tgetFilmWidth() {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t}\n\n\tgetFilmHeight() {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t}\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t * +---+---+---+\n\t * | A | B | C |\n\t * +---+---+---+\n\t * | D | E | F |\n\t * +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t * const w = 1920;\n\t * const h = 1080;\n\t * const fullWidth = w * 3;\n\t * const fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t * Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst near = this.near;\n\t\tlet top = near * Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\tlet height = 2 * top;\n\t\tlet width = this.aspect * height;\n\t\tlet left = - 0.5 * width;\n\t\tconst view = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tconst skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n}\n\nPerspectiveCamera.prototype.isPerspectiveCamera = true;\n\nconst fov = 90, aspect = 1;\n\nclass CubeCamera extends Object3D {\n\n\tconstructor( near, far, renderTarget ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubeCamera';\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget !== true ) {\n\n\t\t\tconsole.error( 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.renderTarget = renderTarget;\n\n\t\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPX.layers = this.layers;\n\t\tcameraPX.up.set( 0, - 1, 0 );\n\t\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\t\tthis.add( cameraPX );\n\n\t\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNX.layers = this.layers;\n\t\tcameraNX.up.set( 0, - 1, 0 );\n\t\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\t\tthis.add( cameraNX );\n\n\t\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPY.layers = this.layers;\n\t\tcameraPY.up.set( 0, 0, 1 );\n\t\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\t\tthis.add( cameraPY );\n\n\t\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNY.layers = this.layers;\n\t\tcameraNY.up.set( 0, 0, - 1 );\n\t\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\t\tthis.add( cameraNY );\n\n\t\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPZ.layers = this.layers;\n\t\tcameraPZ.up.set( 0, - 1, 0 );\n\t\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\t\tthis.add( cameraPZ );\n\n\t\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNZ.layers = this.layers;\n\t\tcameraNZ.up.set( 0, - 1, 0 );\n\t\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\t\tthis.add( cameraNZ );\n\n\t}\n\n\tupdate( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tconst renderTarget = this.renderTarget;\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;\n\n\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\trenderer.xr.enabled = false;\n\n\t\tconst generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderer.setRenderTarget( renderTarget, 0 );\n\t\trenderer.render( scene, cameraPX );\n\n\t\trenderer.setRenderTarget( renderTarget, 1 );\n\t\trenderer.render( scene, cameraNX );\n\n\t\trenderer.setRenderTarget( renderTarget, 2 );\n\t\trenderer.render( scene, cameraPY );\n\n\t\trenderer.setRenderTarget( renderTarget, 3 );\n\t\trenderer.render( scene, cameraNY );\n\n\t\trenderer.setRenderTarget( renderTarget, 4 );\n\t\trenderer.render( scene, cameraPZ );\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderer.setRenderTarget( renderTarget, 5 );\n\t\trenderer.render( scene, cameraNZ );\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\trenderer.xr.enabled = currentXrEnabled;\n\n\t}\n\n}\n\nclass CubeTexture extends Texture {\n\n\tconstructor( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\t\timages = images !== undefined ? images : [];\n\t\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\t\tformat = format !== undefined ? format : RGBFormat;\n\n\t\tsuper( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\t// Why CubeTexture._needsFlipEnvMap is necessary:\n\t\t//\n\t\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t\t// and the flag _needsFlipEnvMap controls this conversion. The flip is not required (and thus _needsFlipEnvMap is set to false)\n\t\t// when using WebGLCubeRenderTarget.texture as a cube texture.\n\n\t\tthis._needsFlipEnvMap = true;\n\n\t\tthis.flipY = false;\n\n\t}\n\n\tget images() {\n\n\t\treturn this.image;\n\n\t}\n\n\tset images( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n}\n\nCubeTexture.prototype.isCubeTexture = true;\n\nclass WebGLCubeRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( size, options, dummy ) {\n\n\t\tif ( Number.isInteger( options ) ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )' );\n\n\t\t\toptions = dummy;\n\n\t\t}\n\n\t\tsuper( size, size, options );\n\n\t\toptions = options || {};\n\n\t\tthis.texture = new CubeTexture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t\tthis.texture._needsFlipEnvMap = false;\n\n\t}\n\n\tfromEquirectangularTexture( renderer, texture ) {\n\n\t\tthis.texture.type = texture.type;\n\t\tthis.texture.format = RGBAFormat; // see #18859\n\t\tthis.texture.encoding = texture.encoding;\n\n\t\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\t\tthis.texture.minFilter = texture.minFilter;\n\t\tthis.texture.magFilter = texture.magFilter;\n\n\t\tconst shader = {\n\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t`\n\t\t};\n\n\t\tconst geometry = new BoxGeometry( 5, 5, 5 );\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\tname: 'CubemapFromEquirect',\n\n\t\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tblending: NoBlending\n\n\t\t} );\n\n\t\tmaterial.uniforms.tEquirect.value = texture;\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tconst currentMinFilter = texture.minFilter;\n\n\t\t// Avoid blurred poles\n\t\tif ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;\n\n\t\tconst camera = new CubeCamera( 1, 10, this );\n\t\tcamera.update( renderer, mesh );\n\n\t\ttexture.minFilter = currentMinFilter;\n\n\t\tmesh.geometry.dispose();\n\t\tmesh.material.dispose();\n\n\t\treturn this;\n\n\t}\n\n\tclear( renderer, color, depth, stencil ) {\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\trenderer.setRenderTarget( this, i );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n}\n\nWebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true;\n\nconst _sphere$2 = /*@__PURE__*/ new Sphere();\nconst _vector$7 = /*@__PURE__*/ new Vector3();\n\nclass Frustum {\n\n\tconstructor( p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane() ) {\n\n\t\tthis.planes = [ p0, p1, p2, p3, p4, p5 ];\n\n\t}\n\n\tset( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tconst planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( frustum ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromProjectionMatrix( m ) {\n\n\t\tconst planes = this.planes;\n\t\tconst me = m.elements;\n\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tconst me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\tintersectsObject( object ) {\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$2.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$2 );\n\n\t}\n\n\tintersectsSprite( sprite ) {\n\n\t\t_sphere$2.center.set( 0, 0, 0 );\n\t\t_sphere$2.radius = 0.7071067811865476;\n\t\t_sphere$2.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$2 );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst planes = this.planes;\n\t\tconst center = sphere.center;\n\t\tconst negRadius = - sphere.radius;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\n\t\t\t// corner at max distance\n\n\t\t\t_vector$7.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector$7 ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nfunction WebGLAnimation() {\n\n\tlet context = null;\n\tlet isAnimating = false;\n\tlet animationLoop = null;\n\tlet requestId = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tanimationLoop( time, frame );\n\n\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tcontext.cancelAnimationFrame( requestId );\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLAttributes( gl, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tconst buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst usage = attribute.usage;\n\n\t\tconst buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tlet type = 5126;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = 5126;\n\n\t\t} else if ( array instanceof Float64Array ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' );\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\ttype = 5131;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\ttype = 5123;\n\n\t\t\t}\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = 5122;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = 5125;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = 5124;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = 5120;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = 5121;\n\n\t\t} else if ( array instanceof Uint8ClampedArray ) {\n\n\t\t\ttype = 5121;\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst updateRange = attribute.updateRange;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( updateRange.count === - 1 ) {\n\n\t\t\t// Not using update ranges\n\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t} else {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray, updateRange.offset, updateRange.count );\n\n\t\t\t} else {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\t}\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isGLBufferAttribute ) {\n\n\t\t\tconst cached = buffers.get( attribute );\n\n\t\t\tif ( ! cached || cached.version < attribute.version ) {\n\n\t\t\t\tbuffers.set( attribute, {\n\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\tversion: attribute.version\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\nclass PlaneGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {\n\n\t\tsuper();\n\t\tthis.type = 'PlaneGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tconst width_half = width / 2;\n\t\tconst height_half = height / 2;\n\n\t\tconst gridX = Math.floor( widthSegments );\n\t\tconst gridY = Math.floor( heightSegments );\n\n\t\tconst gridX1 = gridX + 1;\n\t\tconst gridY1 = gridY + 1;\n\n\t\tconst segment_width = width / gridX;\n\t\tconst segment_height = height / gridY;\n\n\t\t//\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tconst y = iy * segment_height - height_half;\n\n\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tconst x = ix * segment_width - width_half;\n\n\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tconst a = ix + gridX1 * iy;\n\t\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tconst d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar alphatest_fragment = \"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\";\n\nvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\\n\\t#endif\\n#endif\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar begin_vertex = \"vec3 transformed = vec3( position );\";\n\nvar beginnormal_vertex = \"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\";\n\nvar bsdfs = \"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\\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\\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\\n}\\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\tif( cutoffDistance > 0.0 ) {\\n\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t}\\n\\treturn distanceFalloff;\\n#else\\n\\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n\\t}\\n\\treturn 1.0;\\n#endif\\n}\\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\\n\\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\\n}\\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\\n\\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\\n\\treturn Fr * fresnel + F0;\\n}\\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\treturn 1.0 / ( gl * gv );\\n}\\nfloat G_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}\\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( G * 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}\\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\treturn specularColor * brdf.x + brdf.y;\\n}\\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\tvec3 FssEss = F * brdf.x + brdf.y;\\n\\tfloat Ess = brdf.x + brdf.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\nfloat 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_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\\n\\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\\n}\\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\\n\\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie(float roughness, float NoH) {\\n\\tfloat invAlpha = 1.0 / roughness;\\n\\tfloat cos2h = NoH * NoH;\\n\\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\\n}\\nfloat V_Neubelt(float NoV, float NoL) {\\n\\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\\n}\\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\\n\\tvec3 N = geometry.normal;\\n\\tvec3 V = geometry.viewDir;\\n\\tvec3 H = normalize( V + L );\\n\\tfloat dotNH = saturate( dot( N, H ) );\\n\\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\\n}\\n#endif\";\n\nvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + 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 = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\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\";\n\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\";\n\nvar color_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tdiffuseColor *= vColor;\\n#elif defined( USE_COLOR )\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar 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\";\n\nvar 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\";\n\nvar 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; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\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 max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\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};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal;\\n#endif\\n};\\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}\\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\tfloat distance = dot( planeNormal, point - pointOnPlane );\\n\\treturn - distance * planeNormal + point;\\n}\\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn sign( dot( point - pointOnPlane, planeNormal ) );\\n}\\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\\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 linearToRelativeLuminance( const in vec3 color ) {\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\treturn dot( weights, color.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}\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_maxMipLevel 8.0\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_maxTileSize 256.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\\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\\n\\t\\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\\n\\t\\tvec2 f = fract( uv );\\n\\t\\tuv += 0.5 - f;\\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\\tif ( mipInt < cubeUV_maxMipLevel ) {\\n\\t\\t\\tuv.y += 2.0 * cubeUV_maxTileSize;\\n\\t\\t}\\n\\t\\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\\n\\t\\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\\n\\t\\tuv *= texelSize;\\n\\t\\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x += texelSize;\\n\\t\\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.y += texelSize;\\n\\t\\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x -= texelSize;\\n\\t\\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tvec3 tm = mix( tl, tr, f.x );\\n\\t\\tvec3 bm = mix( bl, br, f.x );\\n\\t\\treturn mix( tm, bm, f.y );\\n\\t}\\n\\t#define r0 1.0\\n\\t#define v0 0.339\\n\\t#define m0 - 2.0\\n\\t#define r1 0.8\\n\\t#define v1 0.276\\n\\t#define m1 - 1.0\\n\\t#define r4 0.4\\n\\t#define v4 0.046\\n\\t#define m4 2.0\\n\\t#define r5 0.305\\n\\t#define v5 0.016\\n\\t#define m5 3.0\\n\\t#define r6 0.21\\n\\t#define v6 0.0038\\n\\t#define m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= r1 ) {\\n\\t\\t\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\n\\t\\t} else if ( roughness >= r4 ) {\\n\\t\\t\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\n\\t\\t} else if ( roughness >= r5 ) {\\n\\t\\t\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\n\\t\\t} else if ( roughness >= r6 ) {\\n\\t\\t\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + 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 ), m0, cubeUV_maxMipLevel );\\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\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = objectNormal;\\n#ifdef USE_INSTANCING\\n\\tmat3 m = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\n\\ttransformedNormal = m * transformedNormal;\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\n#endif\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\";\n\nvar encodings_fragment = \"gl_FragColor = linearToOutputTexel( gl_FragColor );\";\n\nvar encodings_pars_fragment = \"\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\\n}\\nvec4 LinearTosRGB( 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 RGBEToLinear( in vec4 value ) {\\n\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\n\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n\\tM = ceil( M * 255.0 ) / 255.0;\\n\\treturn vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\\n\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value ) {\\n\\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\\n\\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\\n\\tvec4 vResult;\\n\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n\\tvResult.w = fract( Le );\\n\\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\\n\\treturn vResult;\\n}\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n\\tfloat Le = value.z * 255.0 + value.w;\\n\\tvec3 Xp_Y_XYZp;\\n\\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\\n\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n\\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\\n\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\n}\";\n\nvar 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, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifndef ENVMAP_TYPE_CUBE_UV\\n\\t\\tenvColor = envMapTexelToLinear( envColor );\\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\";\n\nvar envmap_common_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform int maxMipLevel;\\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\";\n\nvar envmap_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\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\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\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\";\n\nvar 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\";\n\nvar fog_vertex = \"#ifdef USE_FOG\\n\\tfogDepth = - mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float fogDepth;\\n#endif\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\";\n\nvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float fogDepth;\\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\";\n\nvar 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 texture2D( gradientMap, coord ).rgb;\\n\\t#else\\n\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t#endif\\n}\";\n\nvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n#endif\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar lights_lambert_vertex = \"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\nvIndirectFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n\\tvIndirectBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\\n#ifdef DOUBLE_SIDED\\n\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\n\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\";\n\nvar lights_pars_begin = \"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\nuniform vec3 lightProbe[ 9 ];\\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 GeometricContext geometry ) {\\n\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treturn irradiance;\\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 getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tdirectLight.color = directionalLight.color;\\n\\t\\tdirectLight.direction = directionalLight.direction;\\n\\t\\tdirectLight.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 getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tdirectLight.color = pointLight.color;\\n\\t\\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tdirectLight.visible = ( directLight.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 getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tfloat angleCos = dot( directLight.direction, spotLight.direction );\\n\\t\\tif ( angleCos > spotLight.coneCos ) {\\n\\t\\t\\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\t\\tdirectLight.color = spotLight.color;\\n\\t\\t\\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tdirectLight.visible = true;\\n\\t\\t} else {\\n\\t\\t\\tdirectLight.color = vec3( 0.0 );\\n\\t\\t\\tdirectLight.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 GeometricContext geometry ) {\\n\\t\\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tirradiance *= PI;\\n\\t\\t#endif\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\";\n\nvar envmap_physical_pars_fragment = \"#if defined( USE_ENVMAP )\\n\\t#ifdef ENVMAP_MODE_REFRACTION\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n\\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\\n\\t\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\n\\t\\t#else\\n\\t\\t\\tvec4 envMapColor = vec4( 0.0 );\\n\\t\\t#endif\\n\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t}\\n\\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\\n\\t\\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\\t\\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\\n\\t\\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\\n\\t\\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\\t}\\n\\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( -viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\\n\\t\\t#endif\\n\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\n\\t\\t#endif\\n\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t}\\n#endif\";\n\nvar lights_toon_fragment = \"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\";\n\nvar lights_toon_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\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 GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\\n#ifdef REFLECTIVITY\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), rawDiffuseColor, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), rawDiffuseColor, metalnessFactor );\\n#endif\\n#ifdef CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).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_SHEEN\\n\\tmaterial.sheenColor = sheen;\\n#endif\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularRoughness;\\n\\tvec3 specularColor;\\n#ifdef CLEARCOAT\\n\\tfloat clearcoat;\\n\\tfloat clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tvec3 sheenColor;\\n#endif\\n};\\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\\n\\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\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.specularRoughness;\\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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = ccDotNL * directLight.color;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tccIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t\\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\\n\\t\\t\\tmaterial.specularRoughness,\\n\\t\\t\\tdirectLight.direction,\\n\\t\\t\\tgeometry,\\n\\t\\t\\tmaterial.sheenColor\\n\\t\\t);\\n\\t#else\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\\n\\t#endif\\n\\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t\\tfloat ccDotNL = ccDotNV;\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\tfloat clearcoatInv = 1.0 - clearcoatDHR;\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\n\\treflectedLight.indirectSpecular += clearcoatInv * 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}\";\n\nvar lights_fragment_begin = \"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n#ifdef CLEARCOAT\\n\\tgeometry.clearcoatNormal = clearcoatNormal;\\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\\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( 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, geometry, 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\\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\\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, 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\\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( 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, geometry, 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, geometry, 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\\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\\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 ], geometry );\\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\";\n\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\\n\\t#ifdef CLEARCOAT\\n\\t\\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\\n\\t#endif\\n#endif\";\n\nvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\n#endif\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t\\tvarying float vIsPerspective;\\n\\t#else\\n\\t\\tuniform float logDepthBufFC;\\n\\t#endif\\n#endif\";\n\nvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n\\t#else\\n\\t\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\n\\t\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\t\\tgl_Position.z *= gl_Position.w;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\";\n\nvar map_particle_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\";\n\nvar map_particle_pars_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tuniform mat3 uvTransform;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\n\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\n\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\n\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\n#endif\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\tuniform float morphTargetBaseInfluence;\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\tuniform float morphTargetInfluences[ 8 ];\\n\\t#else\\n\\t\\tuniform float morphTargetInfluences[ 4 ];\\n\\t#endif\\n#endif\";\n\nvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\n\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\n\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\n\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\n\\t\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\n\\t\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\n\\t\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\n\\t#endif\\n#endif\";\n\nvar normal_fragment_begin = \"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\t#ifdef USE_TANGENT\\n\\t\\tvec3 tangent = normalize( vTangent );\\n\\t\\tvec3 bitangent = normalize( vBitangent );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\ttangent = tangent * faceDirection;\\n\\t\\t\\tbitangent = bitangent * faceDirection;\\n\\t\\t#endif\\n\\t\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\nvec3 geometryNormal = normal;\";\n\nvar normal_fragment_maps = \"#ifdef OBJECTSPACE_NORMALMAP\\n\\tnormal = texture2D( normalMap, vUv ).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( TANGENTSPACE_NORMALMAP )\\n\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tnormal = normalize( vTBN * mapN );\\n\\t#else\\n\\t\\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN, faceDirection );\\n\\t#endif\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd(), faceDirection );\\n#endif\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef OBJECTSPACE_NORMALMAP\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\\n\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.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 : faceDirection * inversesqrt( det );\\n\\t\\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\\n\\t}\\n#endif\";\n\nvar clearcoat_normal_fragment_begin = \"#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal = geometryNormal;\\n#endif\";\n\nvar clearcoat_normal_fragment_maps = \"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\n\\t#else\\n\\t\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\\n\\t#endif\\n#endif\";\n\nvar clearcoat_pars_fragment = \"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\";\n\nvar 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}\\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 linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( 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 invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\";\n\nvar project_vertex = \"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\";\n\nvar dithering_fragment = \"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\";\n\nvar 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\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar shadowmap_pars_fragment = \"#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\\tvarying vec4 vSpotShadowCoord[ 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\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn shadow;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar shadowmap_pars_vertex = \"#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\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ 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 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\";\n\nvar shadowmap_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\tvec4 shadowWorldPosition;\\n\\t#endif\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\";\n\nvar 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, vSpotShadowCoord[ 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}\";\n\nvar 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\";\n\nvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\t#ifdef BONE_TEXTURE\\n\\t\\tuniform highp sampler2D boneTexture;\\n\\t\\tuniform int boneTextureSize;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#else\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar 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\";\n\nvar 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\";\n\nvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\";\n\nvar 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 toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3( 1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108, 1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605, 1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\";\n\nvar transmission_fragment = \"#ifdef USE_TRANSMISSION\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSNMAP\\n\\t\\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\\n\\t#endif\\n\\tvec3 pos = vWorldPosition.xyz / vWorldPosition.w;\\n\\tvec3 v = normalize( cameraPosition - pos );\\n\\tvec3 viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n\\tfloat ior = ( 1.0 + 0.4 * reflectivity ) / ( 1.0 - 0.4 * reflectivity );\\n\\tvec3 f0 = vec3( pow( ior - 1.0, 2.0 ) / pow( ior + 1.0, 2.0 ) );\\n\\tvec3 f90 = vec3( 1.0 );\\n\\tvec3 f_transmission = totalTransmission * getIBLVolumeRefraction(\\n\\t\\tnormal, v, viewDir, roughnessFactor, diffuseColor.rgb, f0, f90,\\n\\t\\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\\n\\t\\tattenuationColor, attenuationDistance);\\n\\tdiffuseColor.rgb = mix( diffuseColor.rgb, f_transmission, totalTransmission );\\n#endif\";\n\nvar transmission_pars_fragment = \"#ifdef USE_TRANSMISSION\\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 vec4 vWorldPosition;\\n\\tvec3 getVolumeTransmissionRay(vec3 n, vec3 v, float thickness, float ior, 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(float roughness, float ior) {\\n\\t\\treturn roughness * clamp(ior * 2.0 - 2.0, 0.0, 1.0);\\n\\t}\\n\\tvec3 getTransmissionSample(vec2 fragCoord, float roughness, float ior) {\\n\\t\\tfloat framebufferLod = log2(transmissionSamplerSize.x) * applyIorToRoughness(roughness, ior);\\n\\t\\treturn texture2DLodEXT(transmissionSamplerMap, fragCoord.xy, framebufferLod).rgb;\\n\\t}\\n\\tvec3 applyVolumeAttenuation(vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance) {\\n\\t\\tif (attenuationDistance == 0.0) {\\n\\t\\t\\treturn radiance;\\n\\t\\t} else {\\n\\t\\t\\tvec3 attenuationCoefficient = -log(attenuationColor) / attenuationDistance;\\n\\t\\t\\tvec3 transmittance = exp(-attenuationCoefficient * transmissionDistance);\\t\\t\\treturn transmittance * radiance;\\n\\t\\t}\\n\\t}\\n\\tvec3 getIBLVolumeRefraction(vec3 n, vec3 v, vec3 viewDir, float perceptualRoughness, vec3 baseColor, vec3 f0, vec3 f90,\\n\\t\\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness, vec3 attenuationColor, float attenuationDistance) {\\n\\t\\tvec3 transmissionRay = getVolumeTransmissionRay(n, v, thickness, ior, modelMatrix);\\n\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4(refractedRayExit, 1.0);\\n\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\trefractionCoords += 1.0;\\n\\t\\trefractionCoords /= 2.0;\\n\\t\\tvec3 transmittedLight = getTransmissionSample(refractionCoords, perceptualRoughness, ior);\\n\\t\\tvec3 attenuatedColor = applyVolumeAttenuation(transmittedLight, length(transmissionRay), attenuationColor, attenuationDistance);\\n\\t\\tfloat NdotV = saturate(dot(n, viewDir));\\n\\t\\tvec2 brdf = integrateSpecularBRDF(NdotV, perceptualRoughness);\\n\\t\\tvec3 specularColor = f0 * brdf.x + f90 * brdf.y;\\n\\t\\treturn (1.0 - specularColor) * attenuatedColor * baseColor;\\n\\t}\\n#endif\";\n\nvar uv_pars_fragment = \"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\\n\\tvarying vec2 vUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#ifdef USE_UV\\n\\t#ifdef UVS_VERTEX_ONLY\\n\\t\\tvec2 vUv;\\n\\t#else\\n\\t\\tvarying vec2 vUv;\\n\\t#endif\\n\\tuniform mat3 uvTransform;\\n#endif\";\n\nvar uv_vertex = \"#ifdef USE_UV\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\";\n\nvar uv2_pars_fragment = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\";\n\nvar uv2_pars_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n\\tuniform mat3 uv2Transform;\\n#endif\";\n\nvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\";\n\nvar background_frag = \"uniform sampler2D t2D;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include \\n\\t#include \\n}\";\n\nvar background_vert = \"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}\";\n\nvar cube_frag = \"#include \\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 vReflect = vWorldDirection;\\n\\t#include \\n\\tgl_FragColor = envColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include \\n\\t#include \\n}\";\n\nvar cube_vert = \"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}\";\n\nvar depth_frag = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\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\\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}\";\n\nvar depth_vert = \"#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#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}\";\n\nvar distanceRGBA_frag = \"#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 \\nvoid main () {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\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}\";\n\nvar distanceRGBA_vert = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\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}\";\n\nvar equirect_frag = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tvec4 texColor = texture2D( tEquirect, sampleUV );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include \\n\\t#include \\n}\";\n\nvar equirect_vert = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n}\";\n\nvar linedashed_frag = \"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 \\nvoid main() {\\n\\t#include \\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar linedashed_vert = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\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}\";\n\nvar meshbasic_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshbasic_vert = \"#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#ifdef USE_ENVMAP\\n\\t#include \\n\\t#include \\n\\t#include \\n\\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 \\n}\";\n\nvar meshlambert_frag = \"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vIndirectFront;\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshlambert_vert = \"#define LAMBERT\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include \\n#include \\n#include \\n#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#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\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshmatcap_frag = \"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t\\tmatcapColor = matcapTexelToLinear( matcapColor );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshmatcap_vert = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\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#include \\n\\t#include \\n\\t#ifndef FLAT_SHADED\\n\\t\\tvNormal = normalize( transformedNormal );\\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\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\nvar meshtoon_frag = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\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\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshtoon_vert = \"#define TOON\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#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#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphong_frag = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\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\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphong_vert = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#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#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphysical_frag = \"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define REFLECTIVITY\\n\\t#define CLEARCOAT\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef USE_TRANSMISSION\\n\\tuniform float transmission;\\n\\tuniform float thickness;\\n\\tuniform vec3 attenuationColor;\\n\\tuniform float attenuationDistance;\\n#endif\\n#ifdef REFLECTIVITY\\n\\tuniform float reflectivity;\\n#endif\\n#ifdef CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheen;\\n#endif\\nvarying vec3 vViewPosition;\\n#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\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#ifdef USE_TRANSMISSION\\n\\t\\tfloat totalTransmission = transmission;\\n\\t\\tfloat thicknessFactor = thickness;\\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 \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 rawDiffuseColor = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphysical_vert = \"#define STANDARD\\nvarying vec3 vViewPosition;\\n#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\\n#ifdef USE_TRANSMISSION\\n\\tvarying vec4 vWorldPosition;\\n#endif\\n#include \\n#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#include \\n\\t#include \\n\\t#include \\n#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\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n#ifdef USE_TRANSMISSION\\n\\tvWorldPosition = worldPosition;\\n#endif\\n}\";\n\nvar normal_frag = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#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\\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\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\";\n\nvar normal_vert = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#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\\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#include \\n#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\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\";\n\nvar points_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar points_vert = \"uniform float size;\\nuniform float scale;\\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\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar shadow_frag = \"uniform vec3 color;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar shadow_vert = \"#include \\n#include \\n#include \\nvoid main() {\\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}\";\n\nvar sprite_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar sprite_vert = \"uniform float rotation;\\nuniform vec2 center;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst ShaderChunk = {\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tencodings_fragment: encodings_fragment,\n\tencodings_pars_fragment: encodings_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_common_pars_fragment: envmap_common_pars_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_fragment: lightmap_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_vertex: lights_lambert_vertex,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_toon_fragment: lights_toon_fragment,\n\tlights_toon_pars_fragment: lights_toon_pars_fragment,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\tclearcoat_pars_fragment: clearcoat_pars_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\ttransmission_fragment: transmission_fragment,\n\ttransmission_pars_fragment: transmission_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tuv2_pars_fragment: uv2_pars_fragment,\n\tuv2_pars_vertex: uv2_pars_vertex,\n\tuv2_vertex: uv2_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tbackground_frag: background_frag,\n\tbackground_vert: background_vert,\n\tcube_frag: cube_frag,\n\tcube_vert: cube_vert,\n\tdepth_frag: depth_frag,\n\tdepth_vert: depth_vert,\n\tdistanceRGBA_frag: distanceRGBA_frag,\n\tdistanceRGBA_vert: distanceRGBA_vert,\n\tequirect_frag: equirect_frag,\n\tequirect_vert: equirect_vert,\n\tlinedashed_frag: linedashed_frag,\n\tlinedashed_vert: linedashed_vert,\n\tmeshbasic_frag: meshbasic_frag,\n\tmeshbasic_vert: meshbasic_vert,\n\tmeshlambert_frag: meshlambert_frag,\n\tmeshlambert_vert: meshlambert_vert,\n\tmeshmatcap_frag: meshmatcap_frag,\n\tmeshmatcap_vert: meshmatcap_vert,\n\tmeshtoon_frag: meshtoon_frag,\n\tmeshtoon_vert: meshtoon_vert,\n\tmeshphong_frag: meshphong_frag,\n\tmeshphong_vert: meshphong_vert,\n\tmeshphysical_frag: meshphysical_frag,\n\tmeshphysical_vert: meshphysical_vert,\n\tnormal_frag: normal_frag,\n\tnormal_vert: normal_vert,\n\tpoints_frag: points_frag,\n\tpoints_vert: points_vert,\n\tshadow_frag: shadow_frag,\n\tshadow_vert: shadow_vert,\n\tsprite_frag: sprite_frag,\n\tsprite_vert: sprite_vert\n};\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nconst UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tuvTransform: { value: new Matrix3() },\n\t\tuv2Transform: { value: new Matrix3() },\n\n\t\talphaMap: { value: null },\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 },\n\t\trefractionRatio: { value: 0.98 },\n\t\tmaxMipLevel: { value: 0 }\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalScale: { value: new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tlightProbe: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {}\n\t\t} },\n\n\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {}\n\t\t} },\n\n\t\tspotLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotShadowMap: { value: [] },\n\t\tspotShadowMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {}\n\t\t} },\n\n\t\tpointLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} },\n\n\t\tltc_1: { value: null },\n\t\tltc_2: { value: null }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t}\n\n};\n\nconst ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 1.0 },\n\t\t\t\tmetalness: { value: 0.0 },\n\t\t\t\tenvMapIntensity: { value: 1 } // temporary\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\ttoon: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.normal_vert,\n\t\tfragmentShader: ShaderChunk.normal_frag\n\n\t},\n\n\tsprite: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tuvTransform: { value: new Matrix3() },\n\t\t\tt2D: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\t/* -------------------------------------------------------------------------\n\t//\tCube map shader\n\t ------------------------------------------------------------------------- */\n\n\tcube: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.envmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: mergeUniforms( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearcoat: { value: 0 },\n\t\t\tclearcoatMap: { value: null },\n\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\tclearcoatNormalScale: { value: new Vector2( 1, 1 ) },\n\t\t\tclearcoatNormalMap: { value: null },\n\t\t\tsheen: { value: new Color( 0x000000 ) },\n\t\t\ttransmission: { value: 0 },\n\t\t\ttransmissionMap: { value: null },\n\t\t\ttransmissionSamplerSize: { value: new Vector2() },\n\t\t\ttransmissionSamplerMap: { value: null },\n\t\t\tthickness: { value: 0 },\n\t\t\tthicknessMap: { value: null },\n\t\t\tattenuationDistance: { value: 0 },\n\t\t\tattenuationColor: { value: new Color( 0x000000 ) }\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\nfunction WebGLBackground( renderer, cubemaps, state, objects, premultipliedAlpha ) {\n\n\tconst clearColor = new Color( 0x000000 );\n\tlet clearAlpha = 0;\n\n\tlet planeMesh;\n\tlet boxMesh;\n\n\tlet currentBackground = null;\n\tlet currentBackgroundVersion = 0;\n\tlet currentTonemapping = null;\n\n\tfunction render( renderList, scene ) {\n\n\t\tlet forceClear = false;\n\t\tlet background = scene.isScene === true ? scene.background : null;\n\n\t\tif ( background && background.isTexture ) {\n\n\t\t\tbackground = cubemaps.get( background );\n\n\t\t}\n\n\t\t// Ignore background in AR\n\t\t// TODO: Reconsider this.\n\n\t\tconst xr = renderer.xr;\n\t\tconst session = xr.getSession && xr.getSession();\n\n\t\tif ( session && session.environmentBlendMode === 'additive' ) {\n\n\t\t\tbackground = null;\n\n\t\t}\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\tif ( background && ( background.isCubeTexture || background.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.cube.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.cube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.cube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\t// enable code injection for non-built-in material\n\t\t\t\tObject.defineProperty( boxMesh.material, 'envMap', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\tboxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background._needsFlipEnvMap ) ? - 1 : 1;\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tboxMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneGeometry( 2, 2 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.background.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tplaneMesh.geometry.deleteAttribute( 'normal' );\n\n\t\t\t\t// enable code injection for non-built-in material\n\t\t\t\tObject.defineProperty( planeMesh.material, 'map', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\n\t\t\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\tbackground.updateMatrix();\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tplaneMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tstate.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha = 1 ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render\n\n\t};\n\n}\n\nfunction WebGLBindingStates( gl, extensions, attributes, capabilities ) {\n\n\tconst maxVertexAttributes = gl.getParameter( 34921 );\n\n\tconst extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' );\n\tconst vaoAvailable = capabilities.isWebGL2 || extension !== null;\n\n\tconst bindingStates = {};\n\n\tconst defaultState = createBindingState( null );\n\tlet currentState = defaultState;\n\n\tfunction setup( object, material, program, geometry, index ) {\n\n\t\tlet updateBuffers = false;\n\n\t\tif ( vaoAvailable ) {\n\n\t\t\tconst state = getBindingState( geometry, program, material );\n\n\t\t\tif ( currentState !== state ) {\n\n\t\t\t\tcurrentState = state;\n\t\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t\t}\n\n\t\t\tupdateBuffers = needsUpdate( geometry, index );\n\n\t\t\tif ( updateBuffers ) saveCache( geometry, index );\n\n\t\t} else {\n\n\t\t\tconst wireframe = ( material.wireframe === true );\n\n\t\t\tif ( currentState.geometry !== geometry.id ||\n\t\t\t\tcurrentState.program !== program.id ||\n\t\t\t\tcurrentState.wireframe !== wireframe ) {\n\n\t\t\t\tcurrentState.geometry = geometry.id;\n\t\t\t\tcurrentState.program = program.id;\n\t\t\t\tcurrentState.wireframe = wireframe;\n\n\t\t\t\tupdateBuffers = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh === true ) {\n\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, 34963 );\n\n\t\t}\n\n\t\tif ( updateBuffers ) {\n\n\t\t\tsetupVertexAttributes( object, material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tgl.bindBuffer( 34963, attributes.get( index ).buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createVertexArrayObject() {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.createVertexArray();\n\n\t\treturn extension.createVertexArrayOES();\n\n\t}\n\n\tfunction bindVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao );\n\n\t\treturn extension.bindVertexArrayOES( vao );\n\n\t}\n\n\tfunction deleteVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao );\n\n\t\treturn extension.deleteVertexArrayOES( vao );\n\n\t}\n\n\tfunction getBindingState( geometry, program, material ) {\n\n\t\tconst wireframe = ( material.wireframe === true );\n\n\t\tlet programMap = bindingStates[ geometry.id ];\n\n\t\tif ( programMap === undefined ) {\n\n\t\t\tprogramMap = {};\n\t\t\tbindingStates[ geometry.id ] = programMap;\n\n\t\t}\n\n\t\tlet stateMap = programMap[ program.id ];\n\n\t\tif ( stateMap === undefined ) {\n\n\t\t\tstateMap = {};\n\t\t\tprogramMap[ program.id ] = stateMap;\n\n\t\t}\n\n\t\tlet state = stateMap[ wireframe ];\n\n\t\tif ( state === undefined ) {\n\n\t\t\tstate = createBindingState( createVertexArrayObject() );\n\t\t\tstateMap[ wireframe ] = state;\n\n\t\t}\n\n\t\treturn state;\n\n\t}\n\n\tfunction createBindingState( vao ) {\n\n\t\tconst newAttributes = [];\n\t\tconst enabledAttributes = [];\n\t\tconst attributeDivisors = [];\n\n\t\tfor ( let i = 0; i < maxVertexAttributes; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\t\t\tenabledAttributes[ i ] = 0;\n\t\t\tattributeDivisors[ i ] = 0;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\tgeometry: null,\n\t\t\tprogram: null,\n\t\t\twireframe: false,\n\n\t\t\tnewAttributes: newAttributes,\n\t\t\tenabledAttributes: enabledAttributes,\n\t\t\tattributeDivisors: attributeDivisors,\n\t\t\tobject: vao,\n\t\t\tattributes: {},\n\t\t\tindex: null\n\n\t\t};\n\n\t}\n\n\tfunction needsUpdate( geometry, index ) {\n\n\t\tconst cachedAttributes = currentState.attributes;\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tlet attributesNum = 0;\n\n\t\tfor ( const key in geometryAttributes ) {\n\n\t\t\tconst cachedAttribute = cachedAttributes[ key ];\n\t\t\tconst geometryAttribute = geometryAttributes[ key ];\n\n\t\t\tif ( cachedAttribute === undefined ) return true;\n\n\t\t\tif ( cachedAttribute.attribute !== geometryAttribute ) return true;\n\n\t\t\tif ( cachedAttribute.data !== geometryAttribute.data ) return true;\n\n\t\t\tattributesNum ++;\n\n\t\t}\n\n\t\tif ( currentState.attributesNum !== attributesNum ) return true;\n\n\t\tif ( currentState.index !== index ) return true;\n\n\t\treturn false;\n\n\t}\n\n\tfunction saveCache( geometry, index ) {\n\n\t\tconst cache = {};\n\t\tconst attributes = geometry.attributes;\n\t\tlet attributesNum = 0;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tconst data = {};\n\t\t\tdata.attribute = attribute;\n\n\t\t\tif ( attribute.data ) {\n\n\t\t\t\tdata.data = attribute.data;\n\n\t\t\t}\n\n\t\t\tcache[ key ] = data;\n\n\t\t\tattributesNum ++;\n\n\t\t}\n\n\t\tcurrentState.attributes = cache;\n\t\tcurrentState.attributesNum = attributesNum;\n\n\t\tcurrentState.index = index;\n\n\t}\n\n\tfunction initAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\n\t\tfor ( let i = 0, il = newAttributes.length; i < il; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\t\tconst attributeDivisors = currentState.attributeDivisors;\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tconst extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\n\t\tfor ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction vertexAttribPointer( index, size, type, normalized, stride, offset ) {\n\n\t\tif ( capabilities.isWebGL2 === true && ( type === 5124 || type === 5125 ) ) {\n\n\t\t\tgl.vertexAttribIPointer( index, size, type, stride, offset );\n\n\t\t} else {\n\n\t\t\tgl.vertexAttribPointer( index, size, type, normalized, stride, offset );\n\n\t\t}\n\n\t}\n\n\tfunction setupVertexAttributes( object, material, program, geometry ) {\n\n\t\tif ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) {\n\n\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return;\n\n\t\t}\n\n\t\tinitAttributes();\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tconst materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute >= 0 ) {\n\n\t\t\t\tconst geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tconst normalized = geometryAttribute.normalized;\n\t\t\t\t\tconst size = geometryAttribute.itemSize;\n\n\t\t\t\t\tconst attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\t\t\t\t\tconst bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst data = geometryAttribute.data;\n\t\t\t\t\t\tconst stride = data.stride;\n\t\t\t\t\t\tconst offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data && data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute, data.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tenableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\t\t\t\t\t\tvertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tenableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\t\t\t\t\t\tvertexAttribPointer( programAttribute, size, type, normalized, 0, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( name === 'instanceMatrix' ) {\n\n\t\t\t\t\tconst attribute = attributes.get( object.instanceMatrix );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 0, 1 );\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 1, 1 );\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 2, 1 );\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 3, 1 );\n\n\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 0, 4, type, false, 64, 0 );\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 1, 4, type, false, 64, 16 );\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 2, 4, type, false, 64, 32 );\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 3, 4, type, false, 64, 48 );\n\n\t\t\t\t} else if ( name === 'instanceColor' ) {\n\n\t\t\t\t\tconst attribute = attributes.get( object.instanceColor );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute, 1 );\n\n\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute, 3, type, false, 12, 0 );\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tconst value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\tgl.vertexAttrib2fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\tgl.vertexAttrib3fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\tgl.vertexAttrib4fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tgl.vertexAttrib1fv( programAttribute, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tdisableUnusedAttributes();\n\n\t}\n\n\tfunction dispose() {\n\n\t\treset();\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t}\n\n\t}\n\n\tfunction releaseStatesOfGeometry( geometry ) {\n\n\t\tif ( bindingStates[ geometry.id ] === undefined ) return;\n\n\t\tconst programMap = bindingStates[ geometry.id ];\n\n\t\tfor ( const programId in programMap ) {\n\n\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ programId ];\n\n\t\t}\n\n\t\tdelete bindingStates[ geometry.id ];\n\n\t}\n\n\tfunction releaseStatesOfProgram( program ) {\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tif ( programMap[ program.id ] === undefined ) continue;\n\n\t\t\tconst stateMap = programMap[ program.id ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ program.id ];\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\tresetDefaultState();\n\n\t\tif ( currentState === defaultState ) return;\n\n\t\tcurrentState = defaultState;\n\t\tbindVertexArrayObject( currentState.object );\n\n\t}\n\n\t// for backward-compatilibity\n\n\tfunction resetDefaultState() {\n\n\t\tdefaultState.geometry = null;\n\t\tdefaultState.program = null;\n\t\tdefaultState.wireframe = false;\n\n\t}\n\n\treturn {\n\n\t\tsetup: setup,\n\t\treset: reset,\n\t\tresetDefaultState: resetDefaultState,\n\t\tdispose: dispose,\n\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tdisableUnusedAttributes: disableUnusedAttributes\n\n\t};\n\n}\n\nfunction WebGLBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawArraysInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawArraysInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ methodName ]( mode, start, count, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\nfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\tlet maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( 35633, 36338 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36338 ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( 35633, 36337 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36337 ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\t/* eslint-disable no-undef */\n\tconst isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ) ||\n\t\t( typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext );\n\t/* eslint-enable no-undef */\n\n\tlet precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tconst maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tconst drawBuffers = isWebGL2 || extensions.has( 'WEBGL_draw_buffers' );\n\n\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tconst maxTextures = gl.getParameter( 34930 );\n\tconst maxVertexTextures = gl.getParameter( 35660 );\n\tconst maxTextureSize = gl.getParameter( 3379 );\n\tconst maxCubemapSize = gl.getParameter( 34076 );\n\n\tconst maxAttributes = gl.getParameter( 34921 );\n\tconst maxVertexUniforms = gl.getParameter( 36347 );\n\tconst maxVaryings = gl.getParameter( 36348 );\n\tconst maxFragmentUniforms = gl.getParameter( 36349 );\n\n\tconst vertexTextures = maxVertexTextures > 0;\n\tconst floatFragmentTextures = isWebGL2 || extensions.has( 'OES_texture_float' );\n\tconst floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\tconst maxSamples = isWebGL2 ? gl.getParameter( 36183 ) : 0;\n\n\treturn {\n\n\t\tisWebGL2: isWebGL2,\n\n\t\tdrawBuffers: drawBuffers,\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\tfloatVertexTextures: floatVertexTextures,\n\n\t\tmaxSamples: maxSamples\n\n\t};\n\n}\n\nfunction WebGLClipping( properties ) {\n\n\tconst scope = this;\n\n\tlet globalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false;\n\n\tconst plane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping, camera ) {\n\n\t\tconst enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\t\tresetGlobalState();\n\n\t};\n\n\tthis.setState = function ( material, camera, useCache ) {\n\n\t\tconst planes = material.clippingPlanes,\n\t\t\tclipIntersection = material.clipIntersection,\n\t\t\tclipShadows = material.clipShadows;\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4;\n\n\t\t\tlet dstArray = materialProperties.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, useCache );\n\n\t\t\tfor ( let i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tmaterialProperties.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tconst nPlanes = planes !== null ? planes.length : 0;\n\t\tlet dstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tconst flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\t\tscope.numIntersection = 0;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\nfunction WebGLCubeMaps( renderer ) {\n\n\tlet cubemaps = new WeakMap();\n\n\tfunction mapTextureMapping( texture, mapping ) {\n\n\t\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\t\ttexture.mapping = CubeReflectionMapping;\n\n\t\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\t\ttexture.mapping = CubeRefractionMapping;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\tif ( cubemaps.has( texture ) ) {\n\n\t\t\t\t\tconst cubemap = cubemaps.get( texture ).texture;\n\t\t\t\t\treturn mapTextureMapping( cubemap, texture.mapping );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( image && image.height > 0 ) {\n\n\t\t\t\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\t\t\t\tconst renderTarget = new WebGLCubeRenderTarget( image.height / 2 );\n\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\t\t\t\t\t\tcubemaps.set( texture, renderTarget );\n\n\t\t\t\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\treturn mapTextureMapping( renderTarget.texture, texture.mapping );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemap = cubemaps.get( texture );\n\n\t\tif ( cubemap !== undefined ) {\n\n\t\t\tcubemaps.delete( texture );\n\t\t\tcubemap.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubemaps = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLExtensions( gl ) {\n\n\tconst extensions = {};\n\n\tfunction getExtension( name ) {\n\n\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\treturn extensions[ name ];\n\n\t\t}\n\n\t\tlet extension;\n\n\t\tswitch ( name ) {\n\n\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\textension = gl.getExtension( name );\n\n\t\t}\n\n\t\textensions[ name ] = extension;\n\n\t\treturn extension;\n\n\t}\n\n\treturn {\n\n\t\thas: function ( name ) {\n\n\t\t\treturn getExtension( name ) !== null;\n\n\t\t},\n\n\t\tinit: function ( capabilities ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\tgetExtension( 'EXT_color_buffer_float' );\n\n\t\t\t} else {\n\n\t\t\t\tgetExtension( 'WEBGL_depth_texture' );\n\t\t\t\tgetExtension( 'OES_texture_float' );\n\t\t\t\tgetExtension( 'OES_texture_half_float' );\n\t\t\t\tgetExtension( 'OES_texture_half_float_linear' );\n\t\t\t\tgetExtension( 'OES_standard_derivatives' );\n\t\t\t\tgetExtension( 'OES_element_index_uint' );\n\t\t\t\tgetExtension( 'OES_vertex_array_object' );\n\t\t\t\tgetExtension( 'ANGLE_instanced_arrays' );\n\n\t\t\t}\n\n\t\t\tgetExtension( 'OES_texture_float_linear' );\n\t\t\tgetExtension( 'EXT_color_buffer_half_float' );\n\n\t\t},\n\n\t\tget: function ( name ) {\n\n\t\t\tconst extension = getExtension( name );\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\tconst geometries = {};\n\tconst wireframeAttributes = new WeakMap();\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tconst geometry = event.target;\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\tattributes.remove( geometry.index );\n\n\t\t}\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tattributes.remove( geometry.attributes[ name ] );\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\tconst attribute = wireframeAttributes.get( geometry );\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\twireframeAttributes.delete( geometry );\n\n\t\t}\n\n\t\tbindingStates.releaseStatesOfGeometry( geometry );\n\n\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\tdelete geometry._maxInstanceCount;\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tif ( geometries[ geometry.id ] === true ) return geometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tgeometries[ geometry.id ] = true;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\tfor ( const name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], 34962 );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateWireframeAttribute( geometry ) {\n\n\t\tconst indices = [];\n\n\t\tconst geometryIndex = geometry.index;\n\t\tconst geometryPosition = geometry.attributes.position;\n\t\tlet version = 0;\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tconst array = geometryIndex.array;\n\t\t\tversion = geometryIndex.version;\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = array[ i + 0 ];\n\t\t\t\tconst b = array[ i + 1 ];\n\t\t\t\tconst c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst array = geometryPosition.array;\n\t\t\tversion = geometryPosition.version;\n\n\t\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tconst a = i + 0;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\t\tattribute.version = version;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates\n\n\t\t//\n\n\t\tconst previousAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( previousAttribute ) attributes.remove( previousAttribute );\n\n\t\t//\n\n\t\twireframeAttributes.set( geometry, attribute );\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tconst currentAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( currentAttribute ) {\n\n\t\t\tconst geometryIndex = geometry.index;\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\t// if the attribute is obsolete, create a new one\n\n\t\t\t\tif ( currentAttribute.version < geometryIndex.version ) {\n\n\t\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t}\n\n\t\treturn wireframeAttributes.get( geometry );\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tlet type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawElementsInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawElementsInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ methodName ]( mode, count, type, start * bytesPerElement, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\nfunction WebGLInfo( gl ) {\n\n\tconst memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tconst render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase 4:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 3:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase 0:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.frame ++;\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\nfunction numericalSort( a, b ) {\n\n\treturn a[ 0 ] - b[ 0 ];\n\n}\n\nfunction absNumericalSort( a, b ) {\n\n\treturn Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );\n\n}\n\nfunction WebGLMorphtargets( gl ) {\n\n\tconst influencesList = {};\n\tconst morphInfluences = new Float32Array( 8 );\n\n\tconst workInfluences = [];\n\n\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\tworkInfluences[ i ] = [ i, 0 ];\n\n\t}\n\n\tfunction update( object, geometry, material, program ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\t// When object doesn't have morph target influences defined, we treat it as a 0-length array\n\t\t// This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences\n\n\t\tconst length = objectInfluences === undefined ? 0 : objectInfluences.length;\n\n\t\tlet influences = influencesList[ geometry.id ];\n\n\t\tif ( influences === undefined ) {\n\n\t\t\t// initialise list\n\n\t\t\tinfluences = [];\n\n\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\tinfluences[ i ] = [ i, 0 ];\n\n\t\t\t}\n\n\t\t\tinfluencesList[ geometry.id ] = influences;\n\n\t\t}\n\n\t\t// Collect influences\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst influence = influences[ i ];\n\n\t\t\tinfluence[ 0 ] = i;\n\t\t\tinfluence[ 1 ] = objectInfluences[ i ];\n\n\t\t}\n\n\t\tinfluences.sort( absNumericalSort );\n\n\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\tif ( i < length && influences[ i ][ 1 ] ) {\n\n\t\t\t\tworkInfluences[ i ][ 0 ] = influences[ i ][ 0 ];\n\t\t\t\tworkInfluences[ i ][ 1 ] = influences[ i ][ 1 ];\n\n\t\t\t} else {\n\n\t\t\t\tworkInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER;\n\t\t\t\tworkInfluences[ i ][ 1 ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tworkInfluences.sort( numericalSort );\n\n\t\tconst morphTargets = material.morphTargets && geometry.morphAttributes.position;\n\t\tconst morphNormals = material.morphNormals && geometry.morphAttributes.normal;\n\n\t\tlet morphInfluencesSum = 0;\n\n\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\tconst influence = workInfluences[ i ];\n\t\t\tconst index = influence[ 0 ];\n\t\t\tconst value = influence[ 1 ];\n\n\t\t\tif ( index !== Number.MAX_SAFE_INTEGER && value ) {\n\n\t\t\t\tif ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t}\n\n\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\tmorphInfluencesSum += value;\n\n\t\t\t} else {\n\n\t\t\t\tif ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) {\n\n\t\t\t\t\tgeometry.deleteAttribute( 'morphTarget' + i );\n\n\t\t\t\t}\n\n\t\t\t\tif ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) {\n\n\t\t\t\t\tgeometry.deleteAttribute( 'morphNormal' + i );\n\n\t\t\t\t}\n\n\t\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// GLSL shader uses formula baseinfluence * base + sum(target * influence)\n\t\t// This allows us to switch between absolute morphs and relative morphs without changing shader code\n\t\t// When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence)\n\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\nfunction WebGLObjects( gl, geometries, attributes, info ) {\n\n\tlet updateMap = new WeakMap();\n\n\tfunction update( object ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\tconst geometry = object.geometry;\n\t\tconst buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateMap.get( buffergeometry ) !== frame ) {\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateMap.set( buffergeometry, frame );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\tif ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) {\n\n\t\t\t\tobject.addEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\t\t}\n\n\t\t\tattributes.update( object.instanceMatrix, 34962 );\n\n\t\t\tif ( object.instanceColor !== null ) {\n\n\t\t\t\tattributes.update( object.instanceColor, 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateMap = new WeakMap();\n\n\t}\n\n\tfunction onInstancedMeshDispose( event ) {\n\n\t\tconst instancedMesh = event.target;\n\n\t\tinstancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\tattributes.remove( instancedMesh.instanceMatrix );\n\n\t\tif ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\nclass DataTexture2DArray extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper( null );\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nDataTexture2DArray.prototype.isDataTexture2DArray = true;\n\nclass DataTexture3D extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\t// We're going to add .setXXX() methods for setting properties later.\n\t\t// Users can still set in DataTexture3D directly.\n\t\t//\n\t\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t\t// \ttexture.anisotropy = 16;\n\t\t//\n\t\t// See #14839\n\n\t\tsuper( null );\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nDataTexture3D.prototype.isDataTexture3D = true;\n\n/**\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [textures] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'textures' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (textures factorizations):\n *\n * .upload( gl, seq, values, textures )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (textures factorizations):\n *\n * .setValue( gl, name, value, textures )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\nconst emptyTexture = new Texture();\nconst emptyTexture2dArray = new DataTexture2DArray();\nconst emptyTexture3d = new DataTexture3D();\nconst emptyCubeTexture = new CubeTexture();\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nconst arrayCacheF32 = [];\nconst arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nconst mat4array = new Float32Array( 16 );\nconst mat3array = new Float32Array( 9 );\nconst mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tconst firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tconst n = nBlocks * blockSize;\n\tlet r = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( let i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( let i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( textures, n ) {\n\n\tlet r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\tr[ i ] = textures.allocateTextureUnit();\n\n\t}\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValueV1f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValueV2f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or THREE.MatrixN)\n\nfunction setValueM2( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM3( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM4( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single integer / boolean\n\nfunction setValueV1i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single integer / boolean vector (from flat array)\n\nfunction setValueV2i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform2iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV3i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform3iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV4i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform4iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\n// Single unsigned integer\n\nfunction setValueV1ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1ui( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single unsigned integer vector (from flat array)\n\nfunction setValueV2ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform2uiv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV3ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform3uiv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV4ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform4uiv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.safeSetTexture2D( v || emptyTexture, unit );\n\n}\n\nfunction setValueT3D1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture3D( v || emptyTexture3d, unit );\n\n}\n\nfunction setValueT6( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.safeSetTextureCube( v || emptyCubeTexture, unit );\n\n}\n\nfunction setValueT2DArray1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2DArray( v || emptyTexture2dArray, unit );\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1f; // FLOAT\n\t\tcase 0x8b50: return setValueV2f; // _VEC2\n\t\tcase 0x8b51: return setValueV3f; // _VEC3\n\t\tcase 0x8b52: return setValueV4f; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2; // _MAT2\n\t\tcase 0x8b5b: return setValueM3; // _MAT3\n\t\tcase 0x8b5c: return setValueM4; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2i; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3i; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4i; // _VEC4\n\n\t\tcase 0x1405: return setValueV1ui; // UINT\n\t\tcase 0x8dc6: return setValueV2ui; // _VEC2\n\t\tcase 0x8dc7: return setValueV3ui; // _VEC3\n\t\tcase 0x8dc8: return setValueV4ui; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3D1;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArray1;\n\n\t}\n\n}\n\n\n// Array of scalars\n\nfunction setValueV1fArray( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\n\n// Array of vectors (from flat array or array of THREE.VectorN)\n\nfunction setValueV2fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 2 );\n\n\tgl.uniform2fv( this.addr, data );\n\n}\n\nfunction setValueV3fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 3 );\n\n\tgl.uniform3fv( this.addr, data );\n\n}\n\nfunction setValueV4fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniform4fv( this.addr, data );\n\n}\n\n// Array of matrices (from flat array or array of THREE.MatrixN)\n\nfunction setValueM2Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n}\n\nfunction setValueM3Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 9 );\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n}\n\nfunction setValueM4Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 16 );\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n}\n\n// Array of integer / boolean\n\nfunction setValueV1iArray( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\n// Array of integer / boolean vectors (from flat array)\n\nfunction setValueV2iArray( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValueV3iArray( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValueV4iArray( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n// Array of unsigned integer\n\nfunction setValueV1uiArray( gl, v ) {\n\n\tgl.uniform1uiv( this.addr, v );\n\n}\n\n// Array of unsigned integer vectors (from flat array)\n\nfunction setValueV2uiArray( gl, v ) {\n\n\tgl.uniform2uiv( this.addr, v );\n\n}\n\nfunction setValueV3uiArray( gl, v ) {\n\n\tgl.uniform3uiv( this.addr, v );\n\n}\n\nfunction setValueV4uiArray( gl, v ) {\n\n\tgl.uniform4uiv( this.addr, v );\n\n}\n\n\n// Array of textures (2D / Cube)\n\nfunction setValueT1Array( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.safeSetTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6Array( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.safeSetTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1fArray; // FLOAT\n\t\tcase 0x8b50: return setValueV2fArray; // _VEC2\n\t\tcase 0x8b51: return setValueV3fArray; // _VEC3\n\t\tcase 0x8b52: return setValueV4fArray; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2Array; // _MAT2\n\t\tcase 0x8b5b: return setValueM3Array; // _MAT3\n\t\tcase 0x8b5c: return setValueM4Array; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4\n\n\t\tcase 0x1405: return setValueV1uiArray; // UINT\n\t\tcase 0x8dc6: return setValueV2uiArray; // _VEC2\n\t\tcase 0x8dc7: return setValueV3uiArray; // _VEC3\n\t\tcase 0x8dc8: return setValueV4uiArray; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1Array;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6Array;\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nfunction SingleUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.cache = [];\n\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nfunction PureArrayUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.cache = [];\n\tthis.size = activeInfo.size;\n\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nPureArrayUniform.prototype.updateCache = function ( data ) {\n\n\tconst cache = this.cache;\n\n\tif ( data instanceof Float32Array && cache.length !== data.length ) {\n\n\t\tthis.cache = new Float32Array( data.length );\n\n\t}\n\n\tcopyArray( cache, data );\n\n};\n\nfunction StructuredUniform( id ) {\n\n\tthis.id = id;\n\n\tthis.seq = [];\n\tthis.map = {};\n\n}\n\nStructuredUniform.prototype.setValue = function ( gl, value, textures ) {\n\n\tconst seq = this.seq;\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ];\n\t\tu.setValue( gl, value[ u.id ], textures );\n\n\t}\n\n};\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nconst RePathPart = /(\\w+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n// - followed by an optional right bracket (found when array index)\n// - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tconst path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\twhile ( true ) {\n\n\t\tconst match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex;\n\n\t\tlet id = match[ 1 ];\n\t\tconst idIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tconst map = container.map;\n\t\t\tlet next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nfunction WebGLUniforms( gl, program ) {\n\n\tthis.seq = [];\n\tthis.map = {};\n\n\tconst n = gl.getProgramParameter( program, 35718 );\n\n\tfor ( let i = 0; i < n; ++ i ) {\n\n\t\tconst info = gl.getActiveUniform( program, i ),\n\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\tparseUniform( info, addr, this );\n\n\t}\n\n}\n\nWebGLUniforms.prototype.setValue = function ( gl, name, value, textures ) {\n\n\tconst u = this.map[ name ];\n\n\tif ( u !== undefined ) u.setValue( gl, value, textures );\n\n};\n\nWebGLUniforms.prototype.setOptional = function ( gl, object, name ) {\n\n\tconst v = object[ name ];\n\n\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n};\n\n\n// Static interface\n\nWebGLUniforms.upload = function ( gl, seq, values, textures ) {\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ],\n\t\t\tv = values[ u.id ];\n\n\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\tu.setValue( gl, v.value, textures );\n\n\t\t}\n\n\t}\n\n};\n\nWebGLUniforms.seqWithValue = function ( seq, values ) {\n\n\tconst r = [];\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ];\n\t\tif ( u.id in values ) r.push( u );\n\n\t}\n\n\treturn r;\n\n};\n\nfunction WebGLShader( gl, type, string ) {\n\n\tconst shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\treturn shader;\n\n}\n\nlet programIdCount = 0;\n\nfunction addLineNumbers( string ) {\n\n\tconst lines = string.split( '\\n' );\n\n\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\tlines[ i ] = ( i + 1 ) + ': ' + lines[ i ];\n\n\t}\n\n\treturn lines.join( '\\n' );\n\n}\n\nfunction getEncodingComponents( encoding ) {\n\n\tswitch ( encoding ) {\n\n\t\tcase LinearEncoding:\n\t\t\treturn [ 'Linear', '( value )' ];\n\t\tcase sRGBEncoding:\n\t\t\treturn [ 'sRGB', '( value )' ];\n\t\tcase RGBEEncoding:\n\t\t\treturn [ 'RGBE', '( value )' ];\n\t\tcase RGBM7Encoding:\n\t\t\treturn [ 'RGBM', '( value, 7.0 )' ];\n\t\tcase RGBM16Encoding:\n\t\t\treturn [ 'RGBM', '( value, 16.0 )' ];\n\t\tcase RGBDEncoding:\n\t\t\treturn [ 'RGBD', '( value, 256.0 )' ];\n\t\tcase GammaEncoding:\n\t\t\treturn [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ];\n\t\tcase LogLuvEncoding:\n\t\t\treturn [ 'LogLuv', '( value )' ];\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding );\n\t\t\treturn [ 'Linear', '( value )' ];\n\n\t}\n\n}\n\nfunction getShaderErrors( gl, shader, type ) {\n\n\tconst status = gl.getShaderParameter( shader, 35713 );\n\tconst log = gl.getShaderInfoLog( shader ).trim();\n\n\tif ( status && log === '' ) return '';\n\n\t// --enable-privileged-webgl-extension\n\t// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\tconst source = gl.getShaderSource( shader );\n\n\treturn 'THREE.WebGLShader: gl.getShaderInfoLog() ' + type + '\\n' + log + addLineNumbers( source );\n\n}\n\nfunction getTexelDecodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }';\n\n}\n\nfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tlet toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tcase ACESFilmicToneMapping:\n\t\t\ttoneMappingName = 'ACESFilmic';\n\t\t\tbreak;\n\n\t\tcase CustomToneMapping:\n\t\t\ttoneMappingName = 'Custom';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );\n\t\t\ttoneMappingName = 'Linear';\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nfunction generateExtensions( parameters ) {\n\n\tconst chunks = [\n\t\t( parameters.extensionDerivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t( parameters.extensionShaderTextureLOD || parameters.envMap || parameters.transmission > 0.0 ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tconst chunks = [];\n\n\tfor ( const name in defines ) {\n\n\t\tconst value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tconst attributes = {};\n\n\tconst n = gl.getProgramParameter( program, 35721 );\n\n\tfor ( let i = 0; i < n; i ++ ) {\n\n\t\tconst info = gl.getActiveAttrib( program, i );\n\t\tconst name = info.name;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = gl.getAttribLocation( program, name );\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )\n\t\t.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )\n\t\t.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\n// Resolve Includes\n\nconst includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\nfunction resolveIncludes( string ) {\n\n\treturn string.replace( includePattern, includeReplacer );\n\n}\n\nfunction includeReplacer( match, include ) {\n\n\tconst string = ShaderChunk[ include ];\n\n\tif ( string === undefined ) {\n\n\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t}\n\n\treturn resolveIncludes( string );\n\n}\n\n// Unroll Loops\n\nconst deprecatedUnrollLoopPattern = /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\nconst unrollLoopPattern = /#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;\n\nfunction unrollLoops( string ) {\n\n\treturn string\n\t\t.replace( unrollLoopPattern, loopReplacer )\n\t\t.replace( deprecatedUnrollLoopPattern, deprecatedLoopReplacer );\n\n}\n\nfunction deprecatedLoopReplacer( match, start, end, snippet ) {\n\n\tconsole.warn( 'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.' );\n\treturn loopReplacer( match, start, end, snippet );\n\n}\n\nfunction loopReplacer( match, start, end, snippet ) {\n\n\tlet string = '';\n\n\tfor ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\tstring += snippet\n\t\t\t.replace( /\\[\\s*i\\s*\\]/g, '[ ' + i + ' ]' )\n\t\t\t.replace( /UNROLLED_LOOP_INDEX/g, i );\n\n\t}\n\n\treturn string;\n\n}\n\n//\n\nfunction generatePrecision( parameters ) {\n\n\tlet precisionstring = 'precision ' + parameters.precision + ' float;\\nprecision ' + parameters.precision + ' int;';\n\n\tif ( parameters.precision === 'highp' ) {\n\n\t\tprecisionstring += '\\n#define HIGH_PRECISION';\n\n\t} else if ( parameters.precision === 'mediump' ) {\n\n\t\tprecisionstring += '\\n#define MEDIUM_PRECISION';\n\n\t} else if ( parameters.precision === 'lowp' ) {\n\n\t\tprecisionstring += '\\n#define LOW_PRECISION';\n\n\t}\n\n\treturn precisionstring;\n\n}\n\nfunction generateShadowMapTypeDefine( parameters ) {\n\n\tlet shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t} else if ( parameters.shadowMapType === VSMShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';\n\n\t}\n\n\treturn shadowMapTypeDefine;\n\n}\n\nfunction generateEnvMapTypeDefine( parameters ) {\n\n\tlet envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapTypeDefine;\n\n}\n\nfunction generateEnvMapModeDefine( parameters ) {\n\n\tlet envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeRefractionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapModeDefine;\n\n}\n\nfunction generateEnvMapBlendingDefine( parameters ) {\n\n\tlet envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapBlendingDefine;\n\n}\n\nfunction WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {\n\n\tconst gl = renderer.getContext();\n\n\tconst defines = parameters.defines;\n\n\tlet vertexShader = parameters.vertexShader;\n\tlet fragmentShader = parameters.fragmentShader;\n\n\tconst shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );\n\tconst envMapTypeDefine = generateEnvMapTypeDefine( parameters );\n\tconst envMapModeDefine = generateEnvMapModeDefine( parameters );\n\tconst envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );\n\n\n\tconst gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;\n\n\tconst customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );\n\n\tconst customDefines = generateDefines( defines );\n\n\tconst program = gl.createProgram();\n\n\tlet prefixVertex, prefixFragment;\n\tlet versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\\n' : '';\n\n\tif ( parameters.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.instancing ? '#define USE_INSTANCING' : '',\n\t\t\tparameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',\n\n\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t'#define MAX_BONES ' + parameters.maxBones,\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\t\t\tparameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '',\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\t\t\tparameters.useVertexTexture ? '#define BONE_TEXTURE' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t'#ifdef USE_INSTANCING',\n\n\t\t\t'\tattribute mat4 instanceMatrix;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_COLOR',\n\n\t\t\t'\tattribute vec3 instanceColor;',\n\n\t\t\t'#endif',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_TANGENT',\n\n\t\t\t'\tattribute vec4 tangent;',\n\n\t\t\t'#endif',\n\n\t\t\t'#if defined( USE_COLOR_ALPHA )',\n\n\t\t\t'\tattribute vec4 color;',\n\n\t\t\t'#elif defined( USE_COLOR )',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_MORPHTARGETS',\n\n\t\t\t'\tattribute vec3 morphTarget0;',\n\t\t\t'\tattribute vec3 morphTarget1;',\n\t\t\t'\tattribute vec3 morphTarget2;',\n\t\t\t'\tattribute vec3 morphTarget3;',\n\n\t\t\t'\t#ifdef USE_MORPHNORMALS',\n\n\t\t\t'\t\tattribute vec3 morphNormal0;',\n\t\t\t'\t\tattribute vec3 morphNormal1;',\n\t\t\t'\t\tattribute vec3 morphNormal2;',\n\t\t\t'\t\tattribute vec3 morphNormal3;',\n\n\t\t\t'\t#else',\n\n\t\t\t'\t\tattribute vec3 morphTarget4;',\n\t\t\t'\t\tattribute vec3 morphTarget5;',\n\t\t\t'\t\tattribute vec3 morphTarget6;',\n\t\t\t'\t\tattribute vec3 morphTarget7;',\n\n\t\t\t'\t#endif',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest + ( parameters.alphaTest % 1 ? '' : '.0' ) : '', // add '.0' if integer\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.matcap ? '#define USE_MATCAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\n\t\t\tparameters.sheen ? '#define USE_SHEEN' : '',\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t( ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ) ? '#define TEXTURE_LOD_EXT' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\n\t\t\tShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tparameters.map ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',\n\t\t\tparameters.matcap ? getTexelDecodingFunction( 'matcapTexelToLinear', parameters.matcapEncoding ) : '',\n\t\t\tparameters.envMap ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',\n\t\t\tparameters.emissiveMap ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',\n\t\t\tparameters.lightMap ? getTexelDecodingFunction( 'lightMapTexelToLinear', parameters.lightMapEncoding ) : '',\n\t\t\tgetTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ),\n\n\t\t\tparameters.depthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = resolveIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = resolveIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tif ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) {\n\n\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\n\t\tversionString = '#version 300 es\\n';\n\n\t\tprefixVertex = [\n\t\t\t'#define attribute in',\n\t\t\t'#define varying out',\n\t\t\t'#define texture2D texture'\n\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\tprefixFragment = [\n\t\t\t'#define varying in',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : 'out highp vec4 pc_fragColor;',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',\n\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t'#define texture2D texture',\n\t\t\t'#define textureCube texture',\n\t\t\t'#define texture2DProj textureProj',\n\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t}\n\n\tconst vertexGlsl = versionString + prefixVertex + vertexShader;\n\tconst fragmentGlsl = versionString + prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tconst glVertexShader = WebGLShader( gl, 35633, vertexGlsl );\n\tconst glFragmentShader = WebGLShader( gl, 35632, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( parameters.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, parameters.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\t// check for link errors\n\tif ( renderer.debug.checkShaderErrors ) {\n\n\t\tconst programLog = gl.getProgramInfoLog( program ).trim();\n\t\tconst vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\t\tconst fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\t\tlet runnable = true;\n\t\tlet haveDiagnostics = true;\n\n\t\tif ( gl.getProgramParameter( program, 35714 ) === false ) {\n\n\t\t\trunnable = false;\n\n\t\t\tconst vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\tconst fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\tconsole.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), '35715', gl.getProgramParameter( program, 35715 ), 'gl.getProgramInfoLog', programLog, vertexErrors, fragmentErrors );\n\n\t\t} else if ( programLog !== '' ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog );\n\n\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\thaveDiagnostics = false;\n\n\t\t}\n\n\t\tif ( haveDiagnostics ) {\n\n\t\t\tthis.diagnostics = {\n\n\t\t\t\trunnable: runnable,\n\n\t\t\t\tprogramLog: programLog,\n\n\t\t\t\tvertexShader: {\n\n\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t},\n\n\t\t\t\tfragmentShader: {\n\n\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\tprefix: prefixFragment\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\t// Clean up\n\n\t// Crashes in iOS9 and iOS10. #18402\n\t// gl.detachShader( program, glVertexShader );\n\t// gl.detachShader( program, glFragmentShader );\n\n\tgl.deleteShader( glVertexShader );\n\tgl.deleteShader( glFragmentShader );\n\n\t// set up caching for uniform locations\n\n\tlet cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\tcachedUniforms = new WebGLUniforms( gl, program );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tlet cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tbindingStates.releaseStatesOfProgram( this );\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t//\n\n\tthis.name = parameters.shaderName;\n\tthis.id = programIdCount ++;\n\tthis.cacheKey = cacheKey;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\nfunction WebGLPrograms( renderer, cubemaps, extensions, capabilities, bindingStates, clipping ) {\n\n\tconst programs = [];\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\tconst floatVertexTextures = capabilities.floatVertexTextures;\n\tconst maxVertexUniforms = capabilities.maxVertexUniforms;\n\tconst vertexTextures = capabilities.vertexTextures;\n\n\tlet precision = capabilities.precision;\n\n\tconst shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'toon',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tMeshMatcapMaterial: 'matcap',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow',\n\t\tSpriteMaterial: 'sprite'\n\t};\n\n\tconst parameterNames = [\n\t\t'precision', 'isWebGL2', 'supportsVertexTextures', 'outputEncoding', 'instancing', 'instancingColor',\n\t\t'map', 'mapEncoding', 'matcap', 'matcapEncoding', 'envMap', 'envMapMode', 'envMapEncoding', 'envMapCubeUV',\n\t\t'lightMap', 'lightMapEncoding', 'aoMap', 'emissiveMap', 'emissiveMapEncoding', 'bumpMap', 'normalMap', 'objectSpaceNormalMap', 'tangentSpaceNormalMap', 'clearcoatMap', 'clearcoatRoughnessMap', 'clearcoatNormalMap', 'displacementMap', 'specularMap',\n\t\t'roughnessMap', 'metalnessMap', 'gradientMap',\n\t\t'alphaMap', 'combine', 'vertexColors', 'vertexAlphas', 'vertexTangents', 'vertexUvs', 'uvsVertexOnly', 'fog', 'useFog', 'fogExp2',\n\t\t'flatShading', 'sizeAttenuation', 'logarithmicDepthBuffer', 'skinning',\n\t\t'maxBones', 'useVertexTexture', 'morphTargets', 'morphNormals', 'premultipliedAlpha',\n\t\t'numDirLights', 'numPointLights', 'numSpotLights', 'numHemiLights', 'numRectAreaLights',\n\t\t'numDirLightShadows', 'numPointLightShadows', 'numSpotLightShadows',\n\t\t'shadowMapEnabled', 'shadowMapType', 'toneMapping', 'physicallyCorrectLights',\n\t\t'alphaTest', 'doubleSided', 'flipSided', 'numClippingPlanes', 'numClipIntersection', 'depthPacking', 'dithering',\n\t\t'sheen', 'transmission', 'transmissionMap', 'thicknessMap'\n\t];\n\n\tfunction getMaxBones( object ) {\n\n\t\tconst skeleton = object.skeleton;\n\t\tconst bones = skeleton.bones;\n\n\t\tif ( floatVertexTextures ) {\n\n\t\t\treturn 1024;\n\n\t\t} else {\n\n\t\t\t// default for when object is not specified\n\t\t\t// ( for example when prebuilding shader to be used with multiple objects )\n\t\t\t//\n\t\t\t// - leave some extra space for other uniforms\n\t\t\t// - limit here is ANGLE's 254 max uniform vectors\n\t\t\t// (up to 54 should be safe)\n\n\t\t\tconst nVertexUniforms = maxVertexUniforms;\n\t\t\tconst nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );\n\n\t\t\tconst maxBones = Math.min( nVertexMatrices, bones.length );\n\n\t\t\tif ( maxBones < bones.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' );\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\treturn maxBones;\n\n\t\t}\n\n\t}\n\n\tfunction getTextureEncodingFromMap( map ) {\n\n\t\tlet encoding;\n\n\t\tif ( map && map.isTexture ) {\n\n\t\t\tencoding = map.encoding;\n\n\t\t} else if ( map && map.isWebGLRenderTarget ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLPrograms.getTextureEncodingFromMap: don\\'t use render targets as textures. Use their .texture property instead.' );\n\t\t\tencoding = map.texture.encoding;\n\n\t\t} else {\n\n\t\t\tencoding = LinearEncoding;\n\n\t\t}\n\n\t\treturn encoding;\n\n\t}\n\n\tfunction getParameters( material, lights, shadows, scene, object ) {\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\n\t\tconst envMap = cubemaps.get( material.envMap || environment );\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tconst maxBones = object.isSkinnedMesh ? getMaxBones( object ) : 0;\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet vertexShader, fragmentShader;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\n\t\t\tvertexShader = shader.vertexShader;\n\t\t\tfragmentShader = shader.fragmentShader;\n\n\t\t} else {\n\n\t\t\tvertexShader = material.vertexShader;\n\t\t\tfragmentShader = material.fragmentShader;\n\n\t\t}\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tconst parameters = {\n\n\t\t\tisWebGL2: isWebGL2,\n\n\t\t\tshaderID: shaderID,\n\t\t\tshaderName: material.type,\n\n\t\t\tvertexShader: vertexShader,\n\t\t\tfragmentShader: fragmentShader,\n\t\t\tdefines: material.defines,\n\n\t\t\tisRawShaderMaterial: material.isRawShaderMaterial === true,\n\t\t\tglslVersion: material.glslVersion,\n\n\t\t\tprecision: precision,\n\n\t\t\tinstancing: object.isInstancedMesh === true,\n\t\t\tinstancingColor: object.isInstancedMesh === true && object.instanceColor !== null,\n\n\t\t\tsupportsVertexTextures: vertexTextures,\n\t\t\toutputEncoding: ( currentRenderTarget !== null ) ? getTextureEncodingFromMap( currentRenderTarget.texture ) : renderer.outputEncoding,\n\t\t\tmap: !! material.map,\n\t\t\tmapEncoding: getTextureEncodingFromMap( material.map ),\n\t\t\tmatcap: !! material.matcap,\n\t\t\tmatcapEncoding: getTextureEncodingFromMap( material.matcap ),\n\t\t\tenvMap: !! envMap,\n\t\t\tenvMapMode: envMap && envMap.mapping,\n\t\t\tenvMapEncoding: getTextureEncodingFromMap( envMap ),\n\t\t\tenvMapCubeUV: ( !! envMap ) && ( ( envMap.mapping === CubeUVReflectionMapping ) || ( envMap.mapping === CubeUVRefractionMapping ) ),\n\t\t\tlightMap: !! material.lightMap,\n\t\t\tlightMapEncoding: getTextureEncodingFromMap( material.lightMap ),\n\t\t\taoMap: !! material.aoMap,\n\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\temissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap ),\n\t\t\tbumpMap: !! material.bumpMap,\n\t\t\tnormalMap: !! material.normalMap,\n\t\t\tobjectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap,\n\t\t\ttangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap,\n\t\t\tclearcoatMap: !! material.clearcoatMap,\n\t\t\tclearcoatRoughnessMap: !! material.clearcoatRoughnessMap,\n\t\t\tclearcoatNormalMap: !! material.clearcoatNormalMap,\n\t\t\tdisplacementMap: !! material.displacementMap,\n\t\t\troughnessMap: !! material.roughnessMap,\n\t\t\tmetalnessMap: !! material.metalnessMap,\n\t\t\tspecularMap: !! material.specularMap,\n\t\t\talphaMap: !! material.alphaMap,\n\n\t\t\tgradientMap: !! material.gradientMap,\n\n\t\t\tsheen: !! material.sheen,\n\n\t\t\ttransmission: !! material.transmission,\n\t\t\ttransmissionMap: !! material.transmissionMap,\n\t\t\tthicknessMap: !! material.thicknessMap,\n\n\t\t\tcombine: material.combine,\n\n\t\t\tvertexTangents: ( material.normalMap && material.vertexTangents ),\n\t\t\tvertexColors: material.vertexColors,\n\t\t\tvertexAlphas: material.vertexColors === true && object.geometry && object.geometry.attributes.color && object.geometry.attributes.color.itemSize === 4,\n\t\t\tvertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmission || !! material.transmissionMap || !! material.thicknessMap,\n\t\t\tuvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.transmission || !! material.transmissionMap || !! material.thicknessMap ) && !! material.displacementMap,\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog,\n\t\t\tfogExp2: ( fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: !! material.flatShading,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\tskinning: object.isSkinnedMesh === true && maxBones > 0,\n\t\t\tmaxBones: maxBones,\n\t\t\tuseVertexTexture: floatVertexTextures,\n\n\t\t\tmorphTargets: material.morphTargets,\n\t\t\tmorphNormals: material.morphNormals,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\tnumSpotLightShadows: lights.spotShadowMap.length,\n\n\t\t\tnumClippingPlanes: clipping.numPlanes,\n\t\t\tnumClipIntersection: clipping.numIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping,\n\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\talphaTest: material.alphaTest,\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tdepthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false,\n\n\t\t\tindex0AttributeName: material.index0AttributeName,\n\n\t\t\textensionDerivatives: material.extensions && material.extensions.derivatives,\n\t\t\textensionFragDepth: material.extensions && material.extensions.fragDepth,\n\t\t\textensionDrawBuffers: material.extensions && material.extensions.drawBuffers,\n\t\t\textensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD,\n\n\t\t\trendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ),\n\t\t\trendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ),\n\t\t\trendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ),\n\n\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\n\t\t};\n\n\t\treturn parameters;\n\n\t}\n\n\tfunction getProgramCacheKey( parameters ) {\n\n\t\tconst array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( parameters.fragmentShader );\n\t\t\tarray.push( parameters.vertexShader );\n\n\t\t}\n\n\t\tif ( parameters.defines !== undefined ) {\n\n\t\t\tfor ( const name in parameters.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( parameters.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.isRawShaderMaterial === false ) {\n\n\t\t\tfor ( let i = 0; i < parameterNames.length; i ++ ) {\n\n\t\t\t\tarray.push( parameters[ parameterNames[ i ] ] );\n\n\t\t\t}\n\n\t\t\tarray.push( renderer.outputEncoding );\n\t\t\tarray.push( renderer.gammaFactor );\n\n\t\t}\n\n\t\tarray.push( parameters.customProgramCacheKey );\n\n\t\treturn array.join();\n\n\t}\n\n\tfunction getUniforms( material ) {\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\t\tlet uniforms;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\t\t\tuniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t} else {\n\n\t\t\tuniforms = material.uniforms;\n\n\t\t}\n\n\t\treturn uniforms;\n\n\t}\n\n\tfunction acquireProgram( parameters, cacheKey ) {\n\n\t\tlet program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( let p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tconst preexistingProgram = programs[ p ];\n\n\t\t\tif ( preexistingProgram.cacheKey === cacheKey ) {\n\n\t\t\t\tprogram = preexistingProgram;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\tfunction releaseProgram( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tconst i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tgetParameters: getParameters,\n\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\tgetUniforms: getUniforms,\n\t\tacquireProgram: acquireProgram,\n\t\treleaseProgram: releaseProgram,\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tprograms: programs\n\t};\n\n}\n\nfunction WebGLProperties() {\n\n\tlet properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tlet map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.program !== b.program ) {\n\n\t\treturn a.program.id - b.program.id;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\n\nfunction WebGLRenderList( properties ) {\n\n\tconst renderItems = [];\n\tlet renderItemsIndex = 0;\n\n\tconst opaque = [];\n\tconst transmissive = [];\n\tconst transparent = [];\n\n\tconst defaultProgram = { id: - 1 };\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransmissive.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction getNextRenderItem( object, geometry, material, groupOrder, z, group ) {\n\n\t\tlet renderItem = renderItems[ renderItemsIndex ];\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tprogram: materialProperties.program || defaultProgram,\n\t\t\t\tgroupOrder: groupOrder,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.program = materialProperties.program || defaultProgram;\n\t\t\trenderItem.groupOrder = groupOrder;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\trenderItemsIndex ++;\n\n\t\treturn renderItem;\n\n\t}\n\n\tfunction push( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.push( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.push( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.push( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction unshift( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.unshift( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.unshift( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.unshift( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction sort( customOpaqueSort, customTransparentSort ) {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );\n\t\tif ( transmissive.length > 1 ) transmissive.sort( customTransparentSort || reversePainterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t}\n\n\tfunction finish() {\n\n\t\t// Clear references from inactive renderItems in the list\n\n\t\tfor ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {\n\n\t\t\tconst renderItem = renderItems[ i ];\n\n\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\trenderItem.id = null;\n\t\t\trenderItem.object = null;\n\t\t\trenderItem.geometry = null;\n\t\t\trenderItem.material = null;\n\t\t\trenderItem.program = null;\n\t\t\trenderItem.group = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\topaque: opaque,\n\t\ttransmissive: transmissive,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\t\tunshift: unshift,\n\t\tfinish: finish,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists( properties ) {\n\n\tlet lists = new WeakMap();\n\n\tfunction get( scene, renderCallDepth ) {\n\n\t\tlet list;\n\n\t\tif ( lists.has( scene ) === false ) {\n\n\t\t\tlist = new WebGLRenderList( properties );\n\t\t\tlists.set( scene, [ list ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= lists.get( scene ).length ) {\n\n\t\t\t\tlist = new WebGLRenderList( properties );\n\t\t\t\tlists.get( scene ).push( list );\n\n\t\t\t} else {\n\n\t\t\t\tlist = lists.get( scene )[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction UniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nfunction ShadowUniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\n\n\nlet nextVersion = 0;\n\nfunction shadowCastingLightsFirst( lightA, lightB ) {\n\n\treturn ( lightB.castShadow ? 1 : 0 ) - ( lightA.castShadow ? 1 : 0 );\n\n}\n\nfunction WebGLLights( extensions, capabilities ) {\n\n\tconst cache = new UniformsCache();\n\n\tconst shadowCache = ShadowUniformsCache();\n\n\tconst state = {\n\n\t\tversion: 0,\n\n\t\thash: {\n\t\t\tdirectionalLength: - 1,\n\t\t\tpointLength: - 1,\n\t\t\tspotLength: - 1,\n\t\t\trectAreaLength: - 1,\n\t\t\themiLength: - 1,\n\n\t\t\tnumDirectionalShadows: - 1,\n\t\t\tnumPointShadows: - 1,\n\t\t\tnumSpotShadows: - 1\n\t\t},\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tprobe: [],\n\t\tdirectional: [],\n\t\tdirectionalShadow: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotShadow: [],\n\t\tspotShadowMap: [],\n\t\tspotShadowMatrix: [],\n\t\trectArea: [],\n\t\trectAreaLTC1: null,\n\t\trectAreaLTC2: null,\n\t\tpoint: [],\n\t\tpointShadow: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: []\n\n\t};\n\n\tfor ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );\n\n\tconst vector3 = new Vector3();\n\tconst matrix4 = new Matrix4();\n\tconst matrix42 = new Matrix4();\n\n\tfunction setup( lights ) {\n\n\t\tlet r = 0, g = 0, b = 0;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tlet numDirectionalShadows = 0;\n\t\tlet numPointShadows = 0;\n\t\tlet numSpotShadows = 0;\n\n\t\tlights.sort( shadowCastingLightsFirst );\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tconst color = light.color;\n\t\t\tconst intensity = light.intensity;\n\t\t\tconst distance = light.distance;\n\n\t\t\tconst shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity;\n\t\t\t\tg += color.g * intensity;\n\t\t\t\tb += color.b * intensity;\n\n\t\t\t} else if ( light.isLightProbe ) {\n\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tstate.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );\n\n\t\t\t\t}\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.directionalShadow[ directionalLength ] = shadowUniforms;\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumDirectionalShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.spotShadow[ spotLength ] = shadowUniforms;\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\t\t\t\t\tstate.spotShadowMatrix[ spotLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumSpotShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\t// (a) intensity is the total visible light emitted\n\t\t\t\t//uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) );\n\n\t\t\t\t// (b) intensity is the brightness of the light\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tshadowUniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tshadowUniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\tstate.pointShadow[ pointLength ] = shadowUniforms;\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumPointShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( rectAreaLength > 0 ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\t// WebGL 2\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t} else {\n\n\t\t\t\t// WebGL 1\n\n\t\t\t\tif ( extensions.has( 'OES_texture_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t\t} else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tconst hash = state.hash;\n\n\t\tif ( hash.directionalLength !== directionalLength ||\n\t\t\thash.pointLength !== pointLength ||\n\t\t\thash.spotLength !== spotLength ||\n\t\t\thash.rectAreaLength !== rectAreaLength ||\n\t\t\thash.hemiLength !== hemiLength ||\n\t\t\thash.numDirectionalShadows !== numDirectionalShadows ||\n\t\t\thash.numPointShadows !== numPointShadows ||\n\t\t\thash.numSpotShadows !== numSpotShadows ) {\n\n\t\t\tstate.directional.length = directionalLength;\n\t\t\tstate.spot.length = spotLength;\n\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\tstate.point.length = pointLength;\n\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\tstate.spotShadowMatrix.length = numSpotShadows;\n\n\t\t\thash.directionalLength = directionalLength;\n\t\t\thash.pointLength = pointLength;\n\t\t\thash.spotLength = spotLength;\n\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\thash.hemiLength = hemiLength;\n\n\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\thash.numPointShadows = numPointShadows;\n\t\t\thash.numSpotShadows = numSpotShadows;\n\n\t\t\tstate.version = nextVersion ++;\n\n\t\t}\n\n\t}\n\n\tfunction setupView( lights, camera ) {\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tconst viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = state.directional[ directionalLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = state.spot[ spotLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = state.rectArea[ rectAreaLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = state.point[ pointLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = state.hemi[ hemiLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\t\t\t\tuniforms.direction.normalize();\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tsetupView: setupView,\n\t\tstate: state\n\t};\n\n}\n\nfunction WebGLRenderState( extensions, capabilities ) {\n\n\tconst lights = new WebGLLights( extensions, capabilities );\n\n\tconst lightsArray = [];\n\tconst shadowsArray = [];\n\n\tfunction init() {\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction setupLights() {\n\n\t\tlights.setup( lightsArray );\n\n\t}\n\n\tfunction setupLightsView( camera ) {\n\n\t\tlights.setupView( lightsArray, camera );\n\n\t}\n\n\tconst state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\n\t\tlights: lights\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\t\tsetupLightsView: setupLightsView,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow\n\t};\n\n}\n\nfunction WebGLRenderStates( extensions, capabilities ) {\n\n\tlet renderStates = new WeakMap();\n\n\tfunction get( scene, renderCallDepth = 0 ) {\n\n\t\tlet renderState;\n\n\t\tif ( renderStates.has( scene ) === false ) {\n\n\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\trenderStates.set( scene, [ renderState ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= renderStates.get( scene ).length ) {\n\n\t\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\t\trenderStates.get( scene ).push( renderState );\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStates.get( scene )[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * parameters = {\n *\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * wireframe: ,\n * wireframeLinewidth: \n * }\n */\n\nclass MeshDepthMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshDepthMaterial';\n\n\t\tthis.depthPacking = BasicDepthPacking;\n\n\t\tthis.morphTargets = false;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.depthPacking = source.depthPacking;\n\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshDepthMaterial.prototype.isMeshDepthMaterial = true;\n\n/**\n * parameters = {\n *\n * referencePosition: ,\n * nearDistance: ,\n * farDistance: ,\n *\n * morphTargets: ,\n *\n * map: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: \n *\n * }\n */\n\nclass MeshDistanceMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshDistanceMaterial';\n\n\t\tthis.referencePosition = new Vector3();\n\t\tthis.nearDistance = 1;\n\t\tthis.farDistance = 1000;\n\n\t\tthis.morphTargets = false;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.fog = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.referencePosition.copy( source.referencePosition );\n\t\tthis.nearDistance = source.nearDistance;\n\t\tthis.farDistance = source.farDistance;\n\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\n\nvar vsm_frag = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include \\nvoid main() {\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\\n\\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean * HALF_SAMPLE_RATE;\\n\\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\";\n\nvar vsm_vert = \"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\";\n\nfunction WebGLShadowMap( _renderer, _objects, _capabilities ) {\n\n\tlet _frustum = new Frustum();\n\n\tconst _shadowMapSize = new Vector2(),\n\t\t_viewportSize = new Vector2(),\n\n\t\t_viewport = new Vector4(),\n\n\t\t_depthMaterials = [],\n\t\t_distanceMaterials = [],\n\n\t\t_materialCache = {},\n\n\t\t_maxTextureSize = _capabilities.maxTextureSize;\n\n\tconst shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };\n\n\tconst shadowMaterialVertical = new ShaderMaterial( {\n\n\t\tdefines: {\n\t\t\tSAMPLE_RATE: 2.0 / 8.0,\n\t\t\tHALF_SAMPLE_RATE: 1.0 / 8.0\n\t\t},\n\n\t\tuniforms: {\n\t\t\tshadow_pass: { value: null },\n\t\t\tresolution: { value: new Vector2() },\n\t\t\tradius: { value: 4.0 }\n\t\t},\n\n\t\tvertexShader: vsm_vert,\n\n\t\tfragmentShader: vsm_frag\n\n\t} );\n\n\tconst shadowMaterialHorizontal = shadowMaterialVertical.clone();\n\tshadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1;\n\n\tconst fullScreenTri = new BufferGeometry();\n\tfullScreenTri.setAttribute(\n\t\t'position',\n\t\tnew BufferAttribute(\n\t\t\tnew Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ),\n\t\t\t3\n\t\t)\n\t);\n\n\tconst fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );\n\n\tconst scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\tconst currentRenderTarget = _renderer.getRenderTarget();\n\t\tconst activeCubeFace = _renderer.getActiveCubeFace();\n\t\tconst activeMipmapLevel = _renderer.getActiveMipmapLevel();\n\n\t\tconst _state = _renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.setBlending( NoBlending );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// render depth map\n\n\t\tfor ( let i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadow = light.shadow;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\n\t\t\tconst shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t_shadowMapSize.multiply( shadowFrameExtents );\n\n\t\t\t_viewportSize.copy( shadow.mapSize );\n\n\t\t\tif ( _shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\tif ( _shadowMapSize.x > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.x = Math.floor( _maxTextureSize / shadowFrameExtents.x );\n\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.y = Math.floor( _maxTextureSize / shadowFrameExtents.y );\n\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null && ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {\n\n\t\t\t\tconst pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat };\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\tshadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\tconst pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\t_renderer.setRenderTarget( shadow.map );\n\t\t\t_renderer.clear();\n\n\t\t\tconst viewportCount = shadow.getViewportCount();\n\n\t\t\tfor ( let vp = 0; vp < viewportCount; vp ++ ) {\n\n\t\t\t\tconst viewport = shadow.getViewport( vp );\n\n\t\t\t\t_viewport.set(\n\t\t\t\t\t_viewportSize.x * viewport.x,\n\t\t\t\t\t_viewportSize.y * viewport.y,\n\t\t\t\t\t_viewportSize.x * viewport.z,\n\t\t\t\t\t_viewportSize.y * viewport.w\n\t\t\t\t);\n\n\t\t\t\t_state.viewport( _viewport );\n\n\t\t\t\tshadow.updateMatrices( light, vp );\n\n\t\t\t\t_frustum = shadow.getFrustum();\n\n\t\t\t\trenderObject( scene, camera, shadow.camera, light, this.type );\n\n\t\t\t}\n\n\t\t\t// do blur pass for VSM\n\n\t\t\tif ( ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {\n\n\t\t\t\tVSMPass( shadow, camera );\n\n\t\t\t}\n\n\t\t\tshadow.needsUpdate = false;\n\n\t\t}\n\n\t\tscope.needsUpdate = false;\n\n\t\t_renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t};\n\n\tfunction VSMPass( shadow, camera ) {\n\n\t\tconst geometry = _objects.update( fullScreenMesh );\n\n\t\t// vertical pass\n\n\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;\n\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.mapPass );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );\n\n\t\t// horizontal pass\n\n\t\tshadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\tshadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialHorizontal.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.map );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );\n\n\t}\n\n\tfunction getDepthMaterialVariant( useMorphing ) {\n\n\t\tconst index = useMorphing << 0;\n\n\t\tlet material = _depthMaterials[ index ];\n\n\t\tif ( material === undefined ) {\n\n\t\t\tmaterial = new MeshDepthMaterial( {\n\n\t\t\t\tdepthPacking: RGBADepthPacking,\n\n\t\t\t\tmorphTargets: useMorphing\n\n\t\t\t} );\n\n\t\t\t_depthMaterials[ index ] = material;\n\n\t\t}\n\n\t\treturn material;\n\n\t}\n\n\tfunction getDistanceMaterialVariant( useMorphing ) {\n\n\t\tconst index = useMorphing << 0;\n\n\t\tlet material = _distanceMaterials[ index ];\n\n\t\tif ( material === undefined ) {\n\n\t\t\tmaterial = new MeshDistanceMaterial( {\n\n\t\t\t\tmorphTargets: useMorphing\n\n\t\t\t} );\n\n\t\t\t_distanceMaterials[ index ] = material;\n\n\t\t}\n\n\t\treturn material;\n\n\t}\n\n\tfunction getDepthMaterial( object, geometry, material, light, shadowCameraNear, shadowCameraFar, type ) {\n\n\t\tlet result = null;\n\n\t\tlet getMaterialVariant = getDepthMaterialVariant;\n\t\tlet customMaterial = object.customDepthMaterial;\n\n\t\tif ( light.isPointLight === true ) {\n\n\t\t\tgetMaterialVariant = getDistanceMaterialVariant;\n\t\t\tcustomMaterial = object.customDistanceMaterial;\n\n\t\t}\n\n\t\tif ( customMaterial === undefined ) {\n\n\t\t\tlet useMorphing = false;\n\n\t\t\tif ( material.morphTargets === true ) {\n\n\t\t\t\tuseMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0;\n\n\t\t\t}\n\n\t\t\tresult = getMaterialVariant( useMorphing );\n\n\t\t} else {\n\n\t\t\tresult = customMaterial;\n\n\t\t}\n\n\t\tif ( _renderer.localClippingEnabled &&\n\t\t\t\tmaterial.clipShadows === true &&\n\t\t\t\tmaterial.clippingPlanes.length !== 0 ) {\n\n\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t// appropriate state\n\n\t\t\tconst keyA = result.uuid, keyB = material.uuid;\n\n\t\t\tlet materialsForVariant = _materialCache[ keyA ];\n\n\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t}\n\n\t\t\tlet cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\n\t\t\t}\n\n\t\t\tresult = cachedMaterial;\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tif ( type === VSMShadowMap ) {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t} else {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t}\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {\n\n\t\t\tresult.referencePosition.setFromMatrixPosition( light.matrixWorld );\n\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\tresult.farDistance = shadowCameraFar;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, light, type ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tconst geometry = _objects.update( object );\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tfor ( let k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ k ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, geometry, groupMaterial, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, geometry, material, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, light, type );\n\n\t\t}\n\n\t}\n\n}\n\nfunction WebGLState( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction ColorBuffer() {\n\n\t\tlet locked = false;\n\n\t\tconst color = new Vector4();\n\t\tlet currentColorMask = null;\n\t\tconst currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentDepthMask = null;\n\t\tlet currentDepthFunc = null;\n\t\tlet currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( 2929 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( 2929 );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tif ( depthFunc ) {\n\n\t\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 512 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 519 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 513 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 514 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 518 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 516 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 517 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.depthFunc( 515 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentStencilMask = null;\n\t\tlet currentStencilFunc = null;\n\t\tlet currentStencilRef = null;\n\t\tlet currentStencilFuncMask = null;\n\t\tlet currentStencilFail = null;\n\t\tlet currentStencilZFail = null;\n\t\tlet currentStencilZPass = null;\n\t\tlet currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( ! locked ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( 2960 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( 2960 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t currentStencilRef !== stencilRef ||\n\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail !== stencilFail ||\n\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tconst colorBuffer = new ColorBuffer();\n\tconst depthBuffer = new DepthBuffer();\n\tconst stencilBuffer = new StencilBuffer();\n\n\tlet enabledCapabilities = {};\n\n\tlet xrFramebuffer = null;\n\tlet currentBoundFramebuffers = {};\n\n\tlet currentProgram = null;\n\n\tlet currentBlendingEnabled = false;\n\tlet currentBlending = null;\n\tlet currentBlendEquation = null;\n\tlet currentBlendSrc = null;\n\tlet currentBlendDst = null;\n\tlet currentBlendEquationAlpha = null;\n\tlet currentBlendSrcAlpha = null;\n\tlet currentBlendDstAlpha = null;\n\tlet currentPremultipledAlpha = false;\n\n\tlet currentFlipSided = null;\n\tlet currentCullFace = null;\n\n\tlet currentLineWidth = null;\n\n\tlet currentPolygonOffsetFactor = null;\n\tlet currentPolygonOffsetUnits = null;\n\n\tconst maxTextures = gl.getParameter( 35661 );\n\n\tlet lineWidthAvailable = false;\n\tlet version = 0;\n\tconst glVersion = gl.getParameter( 7938 );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL ES (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tlet currentTextureSlot = null;\n\tlet currentBoundTextures = {};\n\n\tconst scissorParam = gl.getParameter( 3088 );\n\tconst viewportParam = gl.getParameter( 2978 );\n\n\tconst currentScissor = new Vector4().fromArray( scissorParam );\n\tconst currentViewport = new Vector4().fromArray( viewportParam );\n\n\tfunction createTexture( type, target, count ) {\n\n\t\tconst data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tconst texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, 10241, 9728 );\n\t\tgl.texParameteri( type, 10240, 9728 );\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tgl.texImage2D( target + i, 0, 6408, 1, 1, 0, 6408, 5121, data );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tconst emptyTextures = {};\n\temptyTextures[ 3553 ] = createTexture( 3553, 3553, 1 );\n\temptyTextures[ 34067 ] = createTexture( 34067, 34069, 6 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( 2929 );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( 2884 );\n\n\tsetBlending( NoBlending );\n\n\t//\n\n\tfunction enable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction bindXRFramebuffer( framebuffer ) {\n\n\t\tif ( framebuffer !== xrFramebuffer ) {\n\n\t\t\tgl.bindFramebuffer( 36160, framebuffer );\n\n\t\t\txrFramebuffer = framebuffer;\n\n\t\t}\n\n\t}\n\n\tfunction bindFramebuffer( target, framebuffer ) {\n\n\t\tif ( framebuffer === null && xrFramebuffer !== null ) framebuffer = xrFramebuffer; // use active XR framebuffer if available\n\n\t\tif ( currentBoundFramebuffers[ target ] !== framebuffer ) {\n\n\t\t\tgl.bindFramebuffer( target, framebuffer );\n\n\t\t\tcurrentBoundFramebuffers[ target ] = framebuffer;\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t// 36009 is equivalent to 36160\n\n\t\t\t\tif ( target === 36009 ) {\n\n\t\t\t\t\tcurrentBoundFramebuffers[ 36160 ] = framebuffer;\n\n\t\t\t\t}\n\n\t\t\t\tif ( target === 36160 ) {\n\n\t\t\t\t\tcurrentBoundFramebuffers[ 36009 ] = framebuffer;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tconst equationToGL = {\n\t\t[ AddEquation ]: 32774,\n\t\t[ SubtractEquation ]: 32778,\n\t\t[ ReverseSubtractEquation ]: 32779\n\t};\n\n\tif ( isWebGL2 ) {\n\n\t\tequationToGL[ MinEquation ] = 32775;\n\t\tequationToGL[ MaxEquation ] = 32776;\n\n\t} else {\n\n\t\tconst extension = extensions.get( 'EXT_blend_minmax' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tequationToGL[ MinEquation ] = extension.MIN_EXT;\n\t\t\tequationToGL[ MaxEquation ] = extension.MAX_EXT;\n\n\t\t}\n\n\t}\n\n\tconst factorToGL = {\n\t\t[ ZeroFactor ]: 0,\n\t\t[ OneFactor ]: 1,\n\t\t[ SrcColorFactor ]: 768,\n\t\t[ SrcAlphaFactor ]: 770,\n\t\t[ SrcAlphaSaturateFactor ]: 776,\n\t\t[ DstColorFactor ]: 774,\n\t\t[ DstAlphaFactor ]: 772,\n\t\t[ OneMinusSrcColorFactor ]: 769,\n\t\t[ OneMinusSrcAlphaFactor ]: 771,\n\t\t[ OneMinusDstColorFactor ]: 775,\n\t\t[ OneMinusDstAlphaFactor ]: 773\n\t};\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( currentBlendingEnabled === true ) {\n\n\t\t\t\tdisable( 3042 );\n\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( currentBlendingEnabled === false ) {\n\n\t\t\tenable( 3042 );\n\t\t\tcurrentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( 32774 );\n\n\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 1, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 1, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 0, 769, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 768, 0, 770 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 770, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 770, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 0, 769 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 0, 768 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t\t\tcurrentBlending = blending;\n\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\tcurrentBlendDst = blendDst;\n\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = null;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( 2884 )\n\t\t\t: enable( 2884 );\n\n\t\tlet flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tconst stencilWrite = material.stencilWrite;\n\t\tstencilBuffer.setTest( stencilWrite );\n\t\tif ( stencilWrite ) {\n\n\t\t\tstencilBuffer.setMask( material.stencilWriteMask );\n\t\t\tstencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\tstencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t}\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t\tmaterial.alphaToCoverage === true\n\t\t\t? enable( 32926 )\n\t\t\t: disable( 32926 );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( 2304 );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( 2305 );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( 2884 );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( 1029 );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( 1028 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( 1032 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 2884 );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( 32823 );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 32823 );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( 3089 );\n\n\t\t} else {\n\n\t\t\tdisable( 3089 );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = 33984 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture ) {\n\n\t\tif ( currentTextureSlot === null ) {\n\n\t\t\tactiveTexture();\n\n\t\t}\n\n\t\tlet boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ currentTextureSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction unbindTexture() {\n\n\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\tboundTexture.type = undefined;\n\t\t\tboundTexture.texture = undefined;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\t// reset state\n\n\t\tgl.disable( 3042 );\n\t\tgl.disable( 2884 );\n\t\tgl.disable( 2929 );\n\t\tgl.disable( 32823 );\n\t\tgl.disable( 3089 );\n\t\tgl.disable( 2960 );\n\t\tgl.disable( 32926 );\n\n\t\tgl.blendEquation( 32774 );\n\t\tgl.blendFunc( 1, 0 );\n\t\tgl.blendFuncSeparate( 1, 0, 1, 0 );\n\n\t\tgl.colorMask( true, true, true, true );\n\t\tgl.clearColor( 0, 0, 0, 0 );\n\n\t\tgl.depthMask( true );\n\t\tgl.depthFunc( 513 );\n\t\tgl.clearDepth( 1 );\n\n\t\tgl.stencilMask( 0xffffffff );\n\t\tgl.stencilFunc( 519, 0, 0xffffffff );\n\t\tgl.stencilOp( 7680, 7680, 7680 );\n\t\tgl.clearStencil( 0 );\n\n\t\tgl.cullFace( 1029 );\n\t\tgl.frontFace( 2305 );\n\n\t\tgl.polygonOffset( 0, 0 );\n\n\t\tgl.activeTexture( 33984 );\n\n\t\tgl.bindFramebuffer( 36160, null );\n\n\t\tif ( isWebGL2 === true ) {\n\n\t\t\tgl.bindFramebuffer( 36009, null );\n\t\t\tgl.bindFramebuffer( 36008, null );\n\n\t\t}\n\n\t\tgl.useProgram( null );\n\n\t\tgl.lineWidth( 1 );\n\n\t\tgl.scissor( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tgl.viewport( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\t// reset internals\n\n\t\tenabledCapabilities = {};\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\txrFramebuffer = null;\n\t\tcurrentBoundFramebuffers = {};\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlendingEnabled = false;\n\t\tcurrentBlending = null;\n\t\tcurrentBlendEquation = null;\n\t\tcurrentBlendSrc = null;\n\t\tcurrentBlendDst = null;\n\t\tcurrentBlendEquationAlpha = null;\n\t\tcurrentBlendSrcAlpha = null;\n\t\tcurrentBlendDstAlpha = null;\n\t\tcurrentPremultipledAlpha = false;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcurrentLineWidth = null;\n\n\t\tcurrentPolygonOffsetFactor = null;\n\t\tcurrentPolygonOffsetUnits = null;\n\n\t\tcurrentScissor.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tcurrentViewport.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tenable: enable,\n\t\tdisable: disable,\n\n\t\tbindFramebuffer: bindFramebuffer,\n\t\tbindXRFramebuffer: bindXRFramebuffer,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tunbindTexture: unbindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\ttexImage2D: texImage2D,\n\t\ttexImage3D: texImage3D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst maxTextures = capabilities.maxTextures;\n\tconst maxCubemapSize = capabilities.maxCubemapSize;\n\tconst maxTextureSize = capabilities.maxTextureSize;\n\tconst maxSamples = capabilities.maxSamples;\n\n\tconst _videoTextures = new WeakMap();\n\tlet _canvas;\n\n\t// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\tlet useOffscreenCanvas = false;\n\n\ttry {\n\n\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'\n\t\t\t&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;\n\n\t} catch ( err ) {\n\n\t\t// Ignore any errors\n\n\t}\n\n\tfunction createCanvas( width, height ) {\n\n\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\n\t\treturn useOffscreenCanvas ?\n\t\t\tnew OffscreenCanvas( width, height ) :\n\t\t\tdocument.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t}\n\n\tfunction resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) {\n\n\t\tlet scale = 1;\n\n\t\t// handle case if texture exceeds max size\n\n\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\tscale = maxSize / Math.max( image.width, image.height );\n\n\t\t}\n\n\t\t// only perform resize if necessary\n\n\t\tif ( scale < 1 || needsPowerOfTwo === true ) {\n\n\t\t\t// only perform resize for certain image types\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t\tconst floor = needsPowerOfTwo ? floorPowerOfTwo : Math.floor;\n\n\t\t\t\tconst width = floor( scale * image.width );\n\t\t\t\tconst height = floor( scale * image.height );\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = createCanvas( width, height );\n\n\t\t\t\t// cube textures can't reuse the same canvas\n\n\t\t\t\tconst canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;\n\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' );\n\n\t\t\t\treturn canvas;\n\n\t\t\t} else {\n\n\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );\n\n\t\t\t\t}\n\n\t\t\t\treturn image;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction isPowerOfTwo$1( image ) {\n\n\t\treturn isPowerOfTwo( image.width ) && isPowerOfTwo( image.height );\n\n\t}\n\n\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\tif ( isWebGL2 ) return false;\n\n\t\treturn ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||\n\t\t\t( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture, supportsMips ) {\n\n\t\treturn texture.generateMipmaps && supportsMips &&\n\t\t\ttexture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t}\n\n\tfunction generateMipmap( target, texture, width, height ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\ttextureProperties.__maxMipLevel = Math.log2( Math.max( width, height ) );\n\n\t}\n\n\tfunction getInternalFormat( internalFormatName, glFormat, glType ) {\n\n\t\tif ( isWebGL2 === false ) return glFormat;\n\n\t\tif ( internalFormatName !== null ) {\n\n\t\t\tif ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t}\n\n\t\tlet internalFormat = glFormat;\n\n\t\tif ( glFormat === 6403 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 33326;\n\t\t\tif ( glType === 5131 ) internalFormat = 33325;\n\t\t\tif ( glType === 5121 ) internalFormat = 33321;\n\n\t\t}\n\n\t\tif ( glFormat === 6407 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 34837;\n\t\t\tif ( glType === 5131 ) internalFormat = 34843;\n\t\t\tif ( glType === 5121 ) internalFormat = 32849;\n\n\t\t}\n\n\t\tif ( glFormat === 6408 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 34836;\n\t\t\tif ( glType === 5131 ) internalFormat = 34842;\n\t\t\tif ( glType === 5121 ) internalFormat = 32856;\n\n\t\t}\n\n\t\tif ( internalFormat === 33325 || internalFormat === 33326 ||\n\t\t\tinternalFormat === 34842 || internalFormat === 34836 ) {\n\n\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t}\n\n\t\treturn internalFormat;\n\n\t}\n\n\t// Fallback filters for non-power-of-2 textures\n\n\tfunction filterFallback( f ) {\n\n\t\tif ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) {\n\n\t\t\treturn 9728;\n\n\t\t}\n\n\t\treturn 9729;\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\t_videoTextures.delete( texture );\n\n\t\t}\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tconst renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( ! renderTarget ) return;\n\n\t\tif ( textureProperties.__webglTexture !== undefined ) {\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t\tinfo.memory.textures --;\n\n\t\t}\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\t\t\tif ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLMultipleRenderTargets ) {\n\n\t\t\tfor ( let i = 0, il = texture.length; i < il; i ++ ) {\n\n\t\t\t\tconst attachmentProperties = properties.get( texture[ i ] );\n\n\t\t\t\tif ( attachmentProperties.__webglTexture ) {\n\n\t\t\t\t\t_gl.deleteTexture( attachmentProperties.__webglTexture );\n\n\t\t\t\t\tinfo.memory.textures --;\n\n\t\t\t\t}\n\n\t\t\t\tproperties.remove( texture[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tproperties.remove( texture );\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\tlet textureUnits = 0;\n\n\tfunction resetTextureUnits() {\n\n\t\ttextureUnits = 0;\n\n\t}\n\n\tfunction allocateTextureUnit() {\n\n\t\tconst textureUnit = textureUnits;\n\n\t\tif ( textureUnit >= maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures );\n\n\t\t}\n\n\t\ttextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\t//\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tconst image = texture.image;\n\n\t\t\tif ( image === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined' );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 3553, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture2DArray( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 35866, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture3D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 32879, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadCubeTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t}\n\n\tconst wrappingToGL = {\n\t\t[ RepeatWrapping ]: 10497,\n\t\t[ ClampToEdgeWrapping ]: 33071,\n\t\t[ MirroredRepeatWrapping ]: 33648\n\t};\n\n\tconst filterToGL = {\n\t\t[ NearestFilter ]: 9728,\n\t\t[ NearestMipmapNearestFilter ]: 9984,\n\t\t[ NearestMipmapLinearFilter ]: 9986,\n\n\t\t[ LinearFilter ]: 9729,\n\t\t[ LinearMipmapNearestFilter ]: 9985,\n\t\t[ LinearMipmapLinearFilter ]: 9987\n\t};\n\n\tfunction setTextureParameters( textureType, texture, supportsMips ) {\n\n\t\tif ( supportsMips ) {\n\n\t\t\t_gl.texParameteri( textureType, 10242, wrappingToGL[ texture.wrapS ] );\n\t\t\t_gl.texParameteri( textureType, 10243, wrappingToGL[ texture.wrapT ] );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, wrappingToGL[ texture.wrapR ] );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterToGL[ texture.magFilter ] );\n\t\t\t_gl.texParameteri( textureType, 10241, filterToGL[ texture.minFilter ] );\n\n\t\t} else {\n\n\t\t\t_gl.texParameteri( textureType, 10242, 33071 );\n\t\t\t_gl.texParameteri( textureType, 10243, 33071 );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, 33071 );\n\n\t\t\t}\n\n\t\t\tif ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterFallback( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, 10241, filterFallback( texture.minFilter ) );\n\n\t\t\tif ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension for WebGL 1 and WebGL 2\n\t\t\tif ( isWebGL2 === false && ( texture.type === HalfFloatType && extensions.has( 'OES_texture_half_float_linear' ) === false ) ) return; // verify extension for WebGL 1 only\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction initTexture( textureProperties, texture ) {\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tlet textureType = 3553;\n\n\t\tif ( texture.isDataTexture2DArray ) textureType = 35866;\n\t\tif ( texture.isDataTexture3D ) textureType = 32879;\n\n\t\tinitTexture( textureProperties, texture );\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( 37440, texture.flipY );\n\t\t_gl.pixelStorei( 37441, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, texture.unpackAlignment );\n\t\t_gl.pixelStorei( 37443, 0 );\n\n\t\tconst needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo$1( texture.image ) === false;\n\t\tconst image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );\n\n\t\tconst supportsMips = isPowerOfTwo$1( image ) || isWebGL2,\n\t\t\tglFormat = utils.convert( texture.format );\n\n\t\tlet glType = utils.convert( texture.type ),\n\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\tsetTextureParameters( textureType, texture, supportsMips );\n\n\t\tlet mipmap;\n\t\tconst mipmaps = texture.mipmaps;\n\n\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t// populate depth texture with dummy data\n\n\t\t\tglInternalFormat = 6402;\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t} else if ( texture.type === UnsignedIntType ) {\n\n\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t} else if ( texture.type === UnsignedInt248Type ) {\n\n\t\t\t\t\tglInternalFormat = 35056;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tglInternalFormat = 33189; // WebGL2 requires sized internalformat for glTexImage2D\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\tconsole.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// validation checks for WebGL 1\n\n\t\t\tif ( texture.format === DepthFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedShortType;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( texture.format === DepthStencilFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tglInternalFormat = 34041;\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedInt248Type ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedInt248Type;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\tstate.compressedTexImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t} else if ( texture.isDataTexture2DArray ) {\n\n\t\t\tstate.texImage3D( 35866, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t} else if ( texture.isDataTexture3D ) {\n\n\t\t\tstate.texImage3D( 32879, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t} else {\n\n\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, glFormat, glType, mipmap );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, glFormat, glType, image );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\tgenerateMipmap( textureType, texture, image.width, image.height );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t}\n\n\tfunction uploadCubeTexture( textureProperties, texture, slot ) {\n\n\t\tif ( texture.image.length !== 6 ) return;\n\n\t\tinitTexture( textureProperties, texture );\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( 37440, texture.flipY );\n\t\t_gl.pixelStorei( 37441, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, texture.unpackAlignment );\n\t\t_gl.pixelStorei( 37443, 0 );\n\n\t\tconst isCompressed = ( texture && ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture ) );\n\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\tconst cubeImage = [];\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize );\n\n\t\t\t} else {\n\n\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst image = cubeImage[ 0 ],\n\t\t\tsupportsMips = isPowerOfTwo$1( image ) || isWebGL2,\n\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\tglType = utils.convert( texture.type ),\n\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\tsetTextureParameters( 34067, texture, supportsMips );\n\n\t\tlet mipmaps;\n\n\t\tif ( isCompressed ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\tstate.compressedTexImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t} else {\n\n\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length;\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t// We assume images for cube map have the same size.\n\t\t\tgenerateMipmap( 34067, texture, image.width, image.height );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget ) {\n\n\t\tconst glFormat = utils.convert( texture.format );\n\t\tconst glType = utils.convert( texture.type );\n\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\tif ( textureTarget === 32879 || textureTarget === 35866 ) {\n\n\t\t\tstate.texImage3D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null );\n\n\t\t} else {\n\n\t\t\tstate.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\n\t\t}\n\n\t\tstate.bindFramebuffer( 36160, framebuffer );\n\t\t_gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( texture ).__webglTexture, 0 );\n\t\tstate.bindFramebuffer( 36160, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {\n\n\t\t_gl.bindRenderbuffer( 36161, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\tlet glInternalFormat = 33189;\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst depthTexture = renderTarget.depthTexture;\n\n\t\t\t\tif ( depthTexture && depthTexture.isDepthTexture ) {\n\n\t\t\t\t\tif ( depthTexture.type === FloatType ) {\n\n\t\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t\t} else if ( depthTexture.type === UnsignedIntType ) {\n\n\t\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 36096, 36161, renderbuffer );\n\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, 35056, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, 34041, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 33306, 36161, renderbuffer );\n\n\t\t} else {\n\n\t\t\t// Use the first texture for MRT so far\n\t\t\tconst texture = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture[ 0 ] : renderTarget.texture;\n\n\t\t\tconst glFormat = utils.convert( texture.format );\n\t\t\tconst glType = utils.convert( texture.type );\n\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tconst isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tconst webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( 36160, 36096, 3553, webglDepthTexture, 0 );\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( 36160, 33306, 3553, webglDepthTexture, 0 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( 36160, null );\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tif ( renderTarget.isWebGLMultipleRenderTargets !== true ) {\n\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\t\t\ttextureProperties.__version = texture.version;\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\tconst isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );\n\t\tconst isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true );\n\t\tconst isRenderTarget3D = texture.isDataTexture3D || texture.isDataTexture2DArray;\n\t\tconst supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2;\n\n\t\t// Handles WebGL2 RGBFormat fallback - #18858\n\n\t\tif ( isWebGL2 && texture.format === RGBFormat && ( texture.type === FloatType || texture.type === HalfFloatType ) ) {\n\n\t\t\ttexture.format = RGBAFormat;\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.' );\n\n\t\t}\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\tif ( capabilities.drawBuffers ) {\n\n\t\t\t\t\tconst textures = renderTarget.texture;\n\n\t\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst attachmentProperties = properties.get( textures[ i ] );\n\n\t\t\t\t\t\tif ( attachmentProperties.__webglTexture === undefined ) {\n\n\t\t\t\t\t\t\tattachmentProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.' );\n\n\t\t\t\t}\n\n\t\t\t} else if ( isMultisample ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer();\n\n\t\t\t\t\t_gl.bindRenderbuffer( 36161, renderTargetProperties.__webglColorRenderbuffer );\n\n\t\t\t\t\tconst glFormat = utils.convert( texture.format );\n\t\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t_gl.framebufferRenderbuffer( 36160, 36064, 36161, renderTargetProperties.__webglColorRenderbuffer );\n\t\t\t\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, null );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( 34067, texture, supportsMips );\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, 36064, 34069 + i );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( 34067, texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( 34067, null );\n\n\t\t} else if ( isMultipleRenderTargets ) {\n\n\t\t\tconst textures = renderTarget.texture;\n\n\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\tconst attachment = textures[ i ];\n\t\t\t\tconst attachmentProperties = properties.get( attachment );\n\n\t\t\t\tstate.bindTexture( 3553, attachmentProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( 3553, attachment, supportsMips );\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, 36064 + i, 3553 );\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {\n\n\t\t\t\t\tgenerateMipmap( 3553, attachment, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( 3553, null );\n\n\t\t} else {\n\n\t\t\tlet glTextureType = 3553;\n\n\t\t\tif ( isRenderTarget3D ) {\n\n\t\t\t\t// Render targets containing layers, i.e: Texture 3D and 2d arrays\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\tconst isTexture3D = texture.isDataTexture3D;\n\t\t\t\t\tglTextureType = isTexture3D ? 32879 : 35866;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( glTextureType, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( glTextureType, texture, supportsMips );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, 36064, glTextureType );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( 3553, texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( 3553, null );\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tconst supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2;\n\n\t\tconst textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ];\n\n\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\tconst texture = textures[ i ];\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tconst target = renderTarget.isWebGLCubeRenderTarget ? 34067 : 3553;\n\t\t\t\tconst webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\t\tgenerateMipmap( target, texture, renderTarget.width, renderTarget.height );\n\t\t\t\tstate.bindTexture( target, null );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateMultisampleRenderTarget( renderTarget ) {\n\n\t\tif ( renderTarget.isWebGLMultisampleRenderTarget ) {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tconst width = renderTarget.width;\n\t\t\t\tconst height = renderTarget.height;\n\t\t\t\tlet mask = 16384;\n\n\t\t\t\tif ( renderTarget.depthBuffer ) mask |= 256;\n\t\t\t\tif ( renderTarget.stencilBuffer ) mask |= 1024;\n\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\t\tstate.bindFramebuffer( 36008, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\tstate.bindFramebuffer( 36009, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, 9728 );\n\n\t\t\t\tstate.bindFramebuffer( 36008, null );\n\t\t\t\tstate.bindFramebuffer( 36009, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getRenderTargetSamples( renderTarget ) {\n\n\t\treturn ( isWebGL2 && renderTarget.isWebGLMultisampleRenderTarget ) ?\n\t\t\tMath.min( maxSamples, renderTarget.samples ) : 0;\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures.get( texture ) !== frame ) {\n\n\t\t\t_videoTextures.set( texture, frame );\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\t// backwards compatibility\n\n\tlet warnedTexture2D = false;\n\tlet warnedTextureCube = false;\n\n\tfunction safeSetTexture2D( texture, slot ) {\n\n\t\tif ( texture && texture.isWebGLRenderTarget ) {\n\n\t\t\tif ( warnedTexture2D === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLTextures.safeSetTexture2D: don\\'t use render targets as textures. Use their .texture property instead.' );\n\t\t\t\twarnedTexture2D = true;\n\n\t\t\t}\n\n\t\t\ttexture = texture.texture;\n\n\t\t}\n\n\t\tsetTexture2D( texture, slot );\n\n\t}\n\n\tfunction safeSetTextureCube( texture, slot ) {\n\n\t\tif ( texture && texture.isWebGLCubeRenderTarget ) {\n\n\t\t\tif ( warnedTextureCube === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLTextures.safeSetTextureCube: don\\'t use cube render targets as textures. Use their .texture property instead.' );\n\t\t\t\twarnedTextureCube = true;\n\n\t\t\t}\n\n\t\t\ttexture = texture.texture;\n\n\t\t}\n\n\n\t\tsetTextureCube( texture, slot );\n\n\t}\n\n\t//\n\n\tthis.allocateTextureUnit = allocateTextureUnit;\n\tthis.resetTextureUnits = resetTextureUnits;\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTexture2DArray = setTexture2DArray;\n\tthis.setTexture3D = setTexture3D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\n\tthis.safeSetTexture2D = safeSetTexture2D;\n\tthis.safeSetTextureCube = safeSetTextureCube;\n\n}\n\nfunction WebGLUtils( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction convert( p ) {\n\n\t\tlet extension;\n\n\t\tif ( p === UnsignedByteType ) return 5121;\n\t\tif ( p === UnsignedShort4444Type ) return 32819;\n\t\tif ( p === UnsignedShort5551Type ) return 32820;\n\t\tif ( p === UnsignedShort565Type ) return 33635;\n\n\t\tif ( p === ByteType ) return 5120;\n\t\tif ( p === ShortType ) return 5122;\n\t\tif ( p === UnsignedShortType ) return 5123;\n\t\tif ( p === IntType ) return 5124;\n\t\tif ( p === UnsignedIntType ) return 5125;\n\t\tif ( p === FloatType ) return 5126;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\tif ( isWebGL2 ) return 5131;\n\n\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.HALF_FLOAT_OES;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === AlphaFormat ) return 6406;\n\t\tif ( p === RGBFormat ) return 6407;\n\t\tif ( p === RGBAFormat ) return 6408;\n\t\tif ( p === LuminanceFormat ) return 6409;\n\t\tif ( p === LuminanceAlphaFormat ) return 6410;\n\t\tif ( p === DepthFormat ) return 6402;\n\t\tif ( p === DepthStencilFormat ) return 34041;\n\t\tif ( p === RedFormat ) return 6403;\n\n\t\t// WebGL2 formats.\n\n\t\tif ( p === RedIntegerFormat ) return 36244;\n\t\tif ( p === RGFormat ) return 33319;\n\t\tif ( p === RGIntegerFormat ) return 33320;\n\t\tif ( p === RGBIntegerFormat ) return 36248;\n\t\tif ( p === RGBAIntegerFormat ) return 36249;\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format ||\n\t\t\tp === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format ||\n\t\t\tp === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_ETC2_Format ) return extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return extension.COMPRESSED_RGBA8_ETC2_EAC;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_4x4_Format || p === SRGB8_ALPHA8_ASTC_5x4_Format || p === SRGB8_ALPHA8_ASTC_5x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_6x5_Format || p === SRGB8_ALPHA8_ASTC_6x6_Format || p === SRGB8_ALPHA8_ASTC_8x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_8x6_Format || p === SRGB8_ALPHA8_ASTC_8x8_Format || p === SRGB8_ALPHA8_ASTC_10x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_10x6_Format || p === SRGB8_ALPHA8_ASTC_10x8_Format || p === SRGB8_ALPHA8_ASTC_10x10_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_12x10_Format || p === SRGB8_ALPHA8_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\t// TODO Complete?\n\n\t\t\t\treturn p;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGBA_BPTC_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\t// TODO Complete?\n\n\t\t\t\treturn p;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\tif ( isWebGL2 ) return 34042;\n\n\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\nclass ArrayCamera extends PerspectiveCamera {\n\n\tconstructor( array = [] ) {\n\n\t\tsuper();\n\n\t\tthis.cameras = array;\n\n\t}\n\n}\n\nArrayCamera.prototype.isArrayCamera = true;\n\nclass Group extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Group';\n\n\t}\n\n}\n\nGroup.prototype.isGroup = true;\n\nconst _moveEvent = { type: 'move' };\n\nclass WebXRController {\n\n\tconstructor() {\n\n\t\tthis._targetRay = null;\n\t\tthis._grip = null;\n\t\tthis._hand = null;\n\n\t}\n\n\tgetHandSpace() {\n\n\t\tif ( this._hand === null ) {\n\n\t\t\tthis._hand = new Group();\n\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\tthis._hand.visible = false;\n\n\t\t\tthis._hand.joints = {};\n\t\t\tthis._hand.inputState = { pinching: false };\n\n\t\t}\n\n\t\treturn this._hand;\n\n\t}\n\n\tgetTargetRaySpace() {\n\n\t\tif ( this._targetRay === null ) {\n\n\t\t\tthis._targetRay = new Group();\n\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\tthis._targetRay.visible = false;\n\t\t\tthis._targetRay.hasLinearVelocity = false;\n\t\t\tthis._targetRay.linearVelocity = new Vector3();\n\t\t\tthis._targetRay.hasAngularVelocity = false;\n\t\t\tthis._targetRay.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._targetRay;\n\n\t}\n\n\tgetGripSpace() {\n\n\t\tif ( this._grip === null ) {\n\n\t\t\tthis._grip = new Group();\n\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\tthis._grip.visible = false;\n\t\t\tthis._grip.hasLinearVelocity = false;\n\t\t\tthis._grip.linearVelocity = new Vector3();\n\t\t\tthis._grip.hasAngularVelocity = false;\n\t\t\tthis._grip.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._grip;\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.dispatchEvent( event );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect( inputSource ) {\n\n\t\tthis.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.visible = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tupdate( inputSource, frame, referenceSpace ) {\n\n\t\tlet inputPose = null;\n\t\tlet gripPose = null;\n\t\tlet handPose = null;\n\n\t\tconst targetRay = this._targetRay;\n\t\tconst grip = this._grip;\n\t\tconst hand = this._hand;\n\n\t\tif ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {\n\n\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\n\t\t\t\t\tif ( inputPose.linearVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = true;\n\t\t\t\t\t\ttargetRay.linearVelocity.copy( inputPose.linearVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( inputPose.angularVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = true;\n\t\t\t\t\t\ttargetRay.angularVelocity.copy( inputPose.angularVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchEvent( _moveEvent );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hand && inputSource.hand ) {\n\n\t\t\t\thandPose = true;\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\tconst jointPose = frame.getJointPose( inputjoint, referenceSpace );\n\n\t\t\t\t\tif ( hand.joints[ inputjoint.jointName ] === undefined ) {\n\n\t\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\t\tconst joint = new Group();\n\t\t\t\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\t\t\t\tjoint.visible = false;\n\t\t\t\t\t\thand.joints[ inputjoint.jointName ] = joint;\n\t\t\t\t\t\t// ??\n\t\t\t\t\t\thand.add( joint );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst joint = hand.joints[ inputjoint.jointName ];\n\n\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t}\n\n\t\t\t\t// Custom events\n\n\t\t\t\t// Check pinchz\n\t\t\t\tconst indexTip = hand.joints[ 'index-finger-tip' ];\n\t\t\t\tconst thumbTip = hand.joints[ 'thumb-tip' ];\n\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchend',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchstart',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( grip !== null && inputSource.gripSpace ) {\n\n\t\t\t\t\tgripPose = frame.getPose( inputSource.gripSpace, referenceSpace );\n\n\t\t\t\t\tif ( gripPose !== null ) {\n\n\t\t\t\t\t\tgrip.matrix.fromArray( gripPose.transform.matrix );\n\t\t\t\t\t\tgrip.matrix.decompose( grip.position, grip.rotation, grip.scale );\n\n\t\t\t\t\t\tif ( gripPose.linearVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = true;\n\t\t\t\t\t\t\tgrip.linearVelocity.copy( gripPose.linearVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( gripPose.angularVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = true;\n\t\t\t\t\t\t\tgrip.angularVelocity.copy( gripPose.angularVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( targetRay !== null ) {\n\n\t\t\ttargetRay.visible = ( inputPose !== null );\n\n\t\t}\n\n\t\tif ( grip !== null ) {\n\n\t\t\tgrip.visible = ( gripPose !== null );\n\n\t\t}\n\n\t\tif ( hand !== null ) {\n\n\t\t\thand.visible = ( handPose !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass WebXRManager extends EventDispatcher {\n\n\tconstructor( renderer, gl ) {\n\n\t\tsuper();\n\n\t\tconst scope = this;\n\t\tconst state = renderer.state;\n\n\t\tlet session = null;\n\n\t\tlet framebufferScaleFactor = 1.0;\n\n\t\tlet referenceSpace = null;\n\t\tlet referenceSpaceType = 'local-floor';\n\n\t\tlet pose = null;\n\n\t\tconst controllers = [];\n\t\tconst inputSourcesMap = new Map();\n\n\t\t//\n\n\t\tconst cameraL = new PerspectiveCamera();\n\t\tcameraL.layers.enable( 1 );\n\t\tcameraL.viewport = new Vector4();\n\n\t\tconst cameraR = new PerspectiveCamera();\n\t\tcameraR.layers.enable( 2 );\n\t\tcameraR.viewport = new Vector4();\n\n\t\tconst cameras = [ cameraL, cameraR ];\n\n\t\tconst cameraVR = new ArrayCamera();\n\t\tcameraVR.layers.enable( 1 );\n\t\tcameraVR.layers.enable( 2 );\n\n\t\tlet _currentDepthNear = null;\n\t\tlet _currentDepthFar = null;\n\n\t\t//\n\n\t\tthis.cameraAutoUpdate = true;\n\t\tthis.enabled = false;\n\n\t\tthis.isPresenting = false;\n\n\t\tthis.getController = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getTargetRaySpace();\n\n\t\t};\n\n\t\tthis.getControllerGrip = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getGripSpace();\n\n\t\t};\n\n\t\tthis.getHand = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getHandSpace();\n\n\t\t};\n\n\t\t//\n\n\t\tfunction onSessionEvent( event ) {\n\n\t\t\tconst controller = inputSourcesMap.get( event.inputSource );\n\n\t\t\tif ( controller ) {\n\n\t\t\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onSessionEnd() {\n\n\t\t\tinputSourcesMap.forEach( function ( controller, inputSource ) {\n\n\t\t\t\tcontroller.disconnect( inputSource );\n\n\t\t\t} );\n\n\t\t\tinputSourcesMap.clear();\n\n\t\t\t_currentDepthNear = null;\n\t\t\t_currentDepthFar = null;\n\n\t\t\t// restore framebuffer/rendering state\n\n\t\t\tstate.bindXRFramebuffer( null );\n\t\t\trenderer.setRenderTarget( renderer.getRenderTarget() );\n\n\t\t\t//\n\n\t\t\tanimation.stop();\n\n\t\t\tscope.isPresenting = false;\n\n\t\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t\t}\n\n\t\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\t\tframebufferScaleFactor = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\t\treferenceSpaceType = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getReferenceSpace = function () {\n\n\t\t\treturn referenceSpace;\n\n\t\t};\n\n\t\tthis.getSession = function () {\n\n\t\t\treturn session;\n\n\t\t};\n\n\t\tthis.setSession = async function ( value ) {\n\n\t\t\tsession = value;\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\t\t\t\tsession.addEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\t\tconst attributes = gl.getContextAttributes();\n\n\t\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\t\tawait gl.makeXRCompatible();\n\n\t\t\t\t}\n\n\t\t\t\tconst layerInit = {\n\t\t\t\t\tantialias: attributes.antialias,\n\t\t\t\t\talpha: attributes.alpha,\n\t\t\t\t\tdepth: attributes.depth,\n\t\t\t\t\tstencil: attributes.stencil,\n\t\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t\t};\n\n\t\t\t\t// eslint-disable-next-line no-undef\n\t\t\t\tconst baseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\t\tsession.updateRenderState( { baseLayer: baseLayer } );\n\n\t\t\t\treferenceSpace = await session.requestReferenceSpace( referenceSpaceType );\n\n\t\t\t\tanimation.setContext( session );\n\t\t\t\tanimation.start();\n\n\t\t\t\tscope.isPresenting = true;\n\n\t\t\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction onInputSourcesChange( event ) {\n\n\t\t\tconst inputSources = session.inputSources;\n\n\t\t\t// Assign inputSources to available controllers\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tinputSourcesMap.set( inputSources[ i ], controllers[ i ] );\n\n\t\t\t}\n\n\t\t\t// Notify disconnected\n\n\t\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.removed[ i ];\n\t\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\t\t\t\t\tinputSourcesMap.delete( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Notify connected\n\n\t\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.added[ i ];\n\t\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst cameraLPos = new Vector3();\n\t\tconst cameraRPos = new Vector3();\n\n\t\t/**\n\t\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t\t * the cameras' projection and world matrices have already been set.\n\t\t * And that near and far planes are identical for both cameras.\n\t\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t\t */\n\t\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t\t// VR systems will have identical far and near planes, and\n\t\t\t// most likely identical top and bottom frustum extents.\n\t\t\t// Use the left camera for these values.\n\t\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\t\tconst left = near * leftFov;\n\t\t\tconst right = near * rightFov;\n\n\t\t\t// Calculate the new camera's position offset from the\n\t\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t\t// TODO: Better way to apply this offset?\n\t\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.translateX( xOffset );\n\t\t\tcamera.translateZ( zOffset );\n\t\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t\t// Find the union of the frustum values of the cameras and scale\n\t\t\t// the values so that the near plane's position does not change in world space,\n\t\t\t// although must now be relative to the new union camera.\n\t\t\tconst near2 = near + zOffset;\n\t\t\tconst far2 = far + zOffset;\n\t\t\tconst left2 = left - xOffset;\n\t\t\tconst right2 = right + ( ipd - xOffset );\n\t\t\tconst top2 = topFov * far / far2 * near2;\n\t\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\n\t\t}\n\n\t\tfunction updateCamera( camera, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t\t}\n\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t}\n\n\t\tthis.updateCamera = function ( camera ) {\n\n\t\t\tif ( session === null ) return;\n\n\t\t\tcameraVR.near = cameraR.near = cameraL.near = camera.near;\n\t\t\tcameraVR.far = cameraR.far = cameraL.far = camera.far;\n\n\t\t\tif ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) {\n\n\t\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\t\tsession.updateRenderState( {\n\t\t\t\t\tdepthNear: cameraVR.near,\n\t\t\t\t\tdepthFar: cameraVR.far\n\t\t\t\t} );\n\n\t\t\t\t_currentDepthNear = cameraVR.near;\n\t\t\t\t_currentDepthFar = cameraVR.far;\n\n\t\t\t}\n\n\t\t\tconst parent = camera.parent;\n\t\t\tconst cameras = cameraVR.cameras;\n\n\t\t\tupdateCamera( cameraVR, parent );\n\n\t\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t}\n\n\t\t\t// update camera and its children\n\n\t\t\tcamera.matrixWorld.copy( cameraVR.matrixWorld );\n\t\t\tcamera.matrix.copy( cameraVR.matrix );\n\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\n\t\t\tconst children = camera.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateMatrixWorld( true );\n\n\t\t\t}\n\n\t\t\t// update projection matrix for proper view frustum culling\n\n\t\t\tif ( cameras.length === 2 ) {\n\n\t\t\t\tsetProjectionFromUnion( cameraVR, cameraL, cameraR );\n\n\t\t\t} else {\n\n\t\t\t\t// assume single camera setup (AR)\n\n\t\t\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getCamera = function () {\n\n\t\t\treturn cameraVR;\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time, frame ) {\n\n\t\t\tpose = frame.getViewerPose( referenceSpace );\n\n\t\t\tif ( pose !== null ) {\n\n\t\t\t\tconst views = pose.views;\n\t\t\t\tconst baseLayer = session.renderState.baseLayer;\n\n\t\t\t\tstate.bindXRFramebuffer( baseLayer.framebuffer );\n\n\t\t\t\tlet cameraVRNeedsUpdate = false;\n\n\t\t\t\t// check if it's necessary to rebuild cameraVR's camera list\n\n\t\t\t\tif ( views.length !== cameraVR.cameras.length ) {\n\n\t\t\t\t\tcameraVR.cameras.length = 0;\n\t\t\t\t\tcameraVRNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\t\tconst view = views[ i ];\n\t\t\t\t\tconst viewport = baseLayer.getViewport( view );\n\n\t\t\t\t\tconst camera = cameras[ i ];\n\t\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\tcameraVR.matrix.copy( camera.matrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( cameraVRNeedsUpdate === true ) {\n\n\t\t\t\t\t\tcameraVR.cameras.push( camera );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst inputSources = session.inputSources;\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst controller = controllers[ i ];\n\t\t\t\tconst inputSource = inputSources[ i ];\n\n\t\t\t\tcontroller.update( inputSource, frame, referenceSpace );\n\n\t\t\t}\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\n\t\t};\n\n\t\tthis.dispose = function () {};\n\n\t}\n\n}\n\nfunction WebGLMaterials( properties ) {\n\n\tfunction refreshFogUniforms( uniforms, fog ) {\n\n\t\tuniforms.fogColor.value.copy( fog.color );\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshMaterialUniforms( uniforms, material, pixelRatio, height, transmissionRenderTarget ) {\n\n\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsLambert( uniforms, material );\n\n\t\t} else if ( material.isMeshToonMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsToon( uniforms, material );\n\n\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\trefreshUniformsPhysical( uniforms, material, transmissionRenderTarget );\n\n\t\t\t} else {\n\n\t\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsMatcap( uniforms, material );\n\n\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDepth( uniforms, material );\n\n\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDistance( uniforms, material );\n\n\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsNormal( uniforms, material );\n\n\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\trefreshUniformsLine( uniforms, material );\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\trefreshUniformsDash( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\trefreshUniformsPoints( uniforms, material, pixelRatio, height );\n\n\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\trefreshUniformsSprites( uniforms, material );\n\n\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\tuniforms.color.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t} else if ( material.isShaderMaterial ) {\n\n\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value.copy( material.color );\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t}\n\n\t\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\tuniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap._needsFlipEnvMap ) ? - 1 : 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\tconst maxMipLevel = properties.get( envMap ).__maxMipLevel;\n\n\t\t\tif ( maxMipLevel !== undefined ) {\n\n\t\t\t\tuniforms.maxMipLevel.value = maxMipLevel;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. specular map\n\t\t// 3. displacementMap map\n\t\t// 4. normal map\n\t\t// 5. bump map\n\t\t// 6. roughnessMap map\n\t\t// 7. metalnessMap map\n\t\t// 8. alphaMap map\n\t\t// 9. emissiveMap map\n\t\t// 10. clearcoat map\n\t\t// 11. clearcoat normal map\n\t\t// 12. clearcoat roughnessMap map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.specularMap ) {\n\n\t\t\tuvScaleMap = material.specularMap;\n\n\t\t} else if ( material.displacementMap ) {\n\n\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t} else if ( material.normalMap ) {\n\n\t\t\tuvScaleMap = material.normalMap;\n\n\t\t} else if ( material.bumpMap ) {\n\n\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t} else if ( material.roughnessMap ) {\n\n\t\t\tuvScaleMap = material.roughnessMap;\n\n\t\t} else if ( material.metalnessMap ) {\n\n\t\t\tuvScaleMap = material.metalnessMap;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t} else if ( material.emissiveMap ) {\n\n\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t} else if ( material.clearcoatMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatMap;\n\n\t\t} else if ( material.clearcoatNormalMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatNormalMap;\n\n\t\t} else if ( material.clearcoatRoughnessMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatRoughnessMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities for uv2\n\t\t// 1. ao map\n\t\t// 2. light map\n\n\t\tlet uv2ScaleMap;\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuv2ScaleMap = material.aoMap;\n\n\t\t} else if ( material.lightMap ) {\n\n\t\t\tuv2ScaleMap = material.lightMap;\n\n\t\t}\n\n\t\tif ( uv2ScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uv2ScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuv2ScaleMap = uv2ScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uv2ScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuv2ScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uv2Transform.value.copy( uv2ScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material, pixelRatio, height ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * pixelRatio;\n\t\tuniforms.scale.value = height * 0.5;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsSprites( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.rotation.value = material.rotation;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLambert( uniforms, material ) {\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value.copy( material.specular );\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.roughness.value = material.roughness;\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t}\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ) {\n\n\t\trefreshUniformsStandard( uniforms, material );\n\n\t\tuniforms.reflectivity.value = material.reflectivity; // also part of uniforms common\n\n\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\n\t\tif ( material.sheen ) uniforms.sheen.value.copy( material.sheen );\n\n\t\tif ( material.clearcoatMap ) {\n\n\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\n\t\t}\n\n\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\n\t\t}\n\n\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\tuniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );\n\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\n\t\t\t}\n\n\t\t}\n\n\t\tuniforms.transmission.value = material.transmission;\n\n\t\tif ( material.transmissionMap ) {\n\n\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\n\t\t}\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\tuniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture;\n\t\t\tuniforms.transmissionSamplerSize.value.set( transmissionRenderTarget.width, transmissionRenderTarget.height );\n\n\t\t}\n\n\t\tuniforms.thickness.value = material.thickness;\n\n\t\tif ( material.thicknessMap ) {\n\n\t\t\tuniforms.thicknessMap.value = material.thicknessMap;\n\n\t\t}\n\n\t\tuniforms.attenuationDistance.value = material.attenuationDistance;\n\t\tuniforms.attenuationColor.value.copy( material.attenuationColor );\n\n\t}\n\n\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\tif ( material.matcap ) {\n\n\t\t\tuniforms.matcap.value = material.matcap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDepth( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tuniforms.referencePosition.value.copy( material.referencePosition );\n\t\tuniforms.nearDistance.value = material.nearDistance;\n\t\tuniforms.farDistance.value = material.farDistance;\n\n\t}\n\n\tfunction refreshUniformsNormal( uniforms, material ) {\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\trefreshFogUniforms: refreshFogUniforms,\n\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t};\n\n}\n\nfunction createCanvasElement() {\n\n\tconst canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\tcanvas.style.display = 'block';\n\treturn canvas;\n\n}\n\nfunction WebGLRenderer( parameters ) {\n\n\tparameters = parameters || {};\n\n\tconst _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(),\n\t\t_context = parameters.context !== undefined ? parameters.context : null,\n\n\t\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false,\n\t\t_depth = parameters.depth !== undefined ? parameters.depth : true,\n\t\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\n\t\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\n\t\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\n\t\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,\n\t\t_powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default',\n\t\t_failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false;\n\n\tlet currentRenderList = null;\n\tlet currentRenderState = null;\n\n\t// render() can be called from within a callback triggered by another render.\n\t// We track this so that the nested render call gets its list and state isolated from the parent render call.\n\n\tconst renderListStack = [];\n\tconst renderStateStack = [];\n\n\t// public properties\n\n\tthis.domElement = _canvas;\n\n\t// Debug configuration container\n\tthis.debug = {\n\n\t\t/**\n\t\t * Enables error checking and reporting when shader programs are being compiled\n\t\t * @type {boolean}\n\t\t */\n\t\tcheckShaderErrors: true\n\t};\n\n\t// clearing\n\n\tthis.autoClear = true;\n\tthis.autoClearColor = true;\n\tthis.autoClearDepth = true;\n\tthis.autoClearStencil = true;\n\n\t// scene graph\n\n\tthis.sortObjects = true;\n\n\t// user-defined clipping\n\n\tthis.clippingPlanes = [];\n\tthis.localClippingEnabled = false;\n\n\t// physically based shading\n\n\tthis.gammaFactor = 2.0;\t// for backwards compatibility\n\tthis.outputEncoding = LinearEncoding;\n\n\t// physical lights\n\n\tthis.physicallyCorrectLights = false;\n\n\t// tone mapping\n\n\tthis.toneMapping = NoToneMapping;\n\tthis.toneMappingExposure = 1.0;\n\n\t// internal properties\n\n\tconst _this = this;\n\n\tlet _isContextLost = false;\n\n\t// internal state cache\n\n\tlet _currentActiveCubeFace = 0;\n\tlet _currentActiveMipmapLevel = 0;\n\tlet _currentRenderTarget = null;\n\tlet _currentMaterialId = - 1;\n\n\tlet _currentCamera = null;\n\n\tconst _currentViewport = new Vector4();\n\tconst _currentScissor = new Vector4();\n\tlet _currentScissorTest = null;\n\n\t//\n\n\tlet _width = _canvas.width;\n\tlet _height = _canvas.height;\n\n\tlet _pixelRatio = 1;\n\tlet _opaqueSort = null;\n\tlet _transparentSort = null;\n\n\tconst _viewport = new Vector4( 0, 0, _width, _height );\n\tconst _scissor = new Vector4( 0, 0, _width, _height );\n\tlet _scissorTest = false;\n\n\t//\n\n\tconst _currentDrawBuffers = [];\n\n\t// frustum\n\n\tconst _frustum = new Frustum();\n\n\t// clipping\n\n\tlet _clippingEnabled = false;\n\tlet _localClippingEnabled = false;\n\n\t// transmission\n\n\tlet _transmissionRenderTarget = null;\n\n\t// camera matrices cache\n\n\tconst _projScreenMatrix = new Matrix4();\n\n\tconst _vector3 = new Vector3();\n\n\tconst _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };\n\n\tfunction getTargetPixelRatio() {\n\n\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t}\n\n\t// initialize\n\n\tlet _gl = _context;\n\n\tfunction getContext( contextNames, contextAttributes ) {\n\n\t\tfor ( let i = 0; i < contextNames.length; i ++ ) {\n\n\t\t\tconst contextName = contextNames[ i ];\n\t\t\tconst context = _canvas.getContext( contextName, contextAttributes );\n\t\t\tif ( context !== null ) return context;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\ttry {\n\n\t\tconst contextAttributes = {\n\t\t\talpha: _alpha,\n\t\t\tdepth: _depth,\n\t\t\tstencil: _stencil,\n\t\t\tantialias: _antialias,\n\t\t\tpremultipliedAlpha: _premultipliedAlpha,\n\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer,\n\t\t\tpowerPreference: _powerPreference,\n\t\t\tfailIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat\n\t\t};\n\n\t\t// event listeners must be registered before WebGL context is created, see #12753\n\n\t\t_canvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\tif ( _gl === null ) {\n\n\t\t\tconst contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ];\n\n\t\t\tif ( _this.isWebGL1Renderer === true ) {\n\n\t\t\t\tcontextNames.shift();\n\n\t\t\t}\n\n\t\t\t_gl = getContext( contextNames, contextAttributes );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tif ( getContext( contextNames ) ) {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Some experimental-webgl implementations do not have getShaderPrecisionFormat\n\n\t\tif ( _gl.getShaderPrecisionFormat === undefined ) {\n\n\t\t\t_gl.getShaderPrecisionFormat = function () {\n\n\t\t\t\treturn { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };\n\n\t\t\t};\n\n\t\t}\n\n\t} catch ( error ) {\n\n\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\t\tthrow error;\n\n\t}\n\n\tlet extensions, capabilities, state, info;\n\tlet properties, textures, cubemaps, attributes, geometries, objects;\n\tlet programCache, materials, renderLists, renderStates, clipping, shadowMap;\n\n\tlet background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\tlet utils, bindingStates;\n\n\tfunction initGLContext() {\n\n\t\textensions = new WebGLExtensions( _gl );\n\n\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\textensions.init( capabilities );\n\n\t\tutils = new WebGLUtils( _gl, extensions, capabilities );\n\n\t\tstate = new WebGLState( _gl, extensions, capabilities );\n\n\t\t_currentDrawBuffers[ 0 ] = 1029;\n\n\t\tinfo = new WebGLInfo( _gl );\n\t\tproperties = new WebGLProperties();\n\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\tcubemaps = new WebGLCubeMaps( _this );\n\t\tattributes = new WebGLAttributes( _gl, capabilities );\n\t\tbindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities );\n\t\tgeometries = new WebGLGeometries( _gl, attributes, info, bindingStates );\n\t\tobjects = new WebGLObjects( _gl, geometries, attributes, info );\n\t\tmorphtargets = new WebGLMorphtargets( _gl );\n\t\tclipping = new WebGLClipping( properties );\n\t\tprogramCache = new WebGLPrograms( _this, cubemaps, extensions, capabilities, bindingStates, clipping );\n\t\tmaterials = new WebGLMaterials( properties );\n\t\trenderLists = new WebGLRenderLists( properties );\n\t\trenderStates = new WebGLRenderStates( extensions, capabilities );\n\t\tbackground = new WebGLBackground( _this, cubemaps, state, objects, _premultipliedAlpha );\n\t\tshadowMap = new WebGLShadowMap( _this, objects, capabilities );\n\n\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities );\n\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );\n\n\t\tinfo.programs = programCache.programs;\n\n\t\t_this.capabilities = capabilities;\n\t\t_this.extensions = extensions;\n\t\t_this.properties = properties;\n\t\t_this.renderLists = renderLists;\n\t\t_this.shadowMap = shadowMap;\n\t\t_this.state = state;\n\t\t_this.info = info;\n\n\t}\n\n\tinitGLContext();\n\n\t// xr\n\n\tconst xr = new WebXRManager( _this, _gl );\n\n\tthis.xr = xr;\n\n\t// API\n\n\tthis.getContext = function () {\n\n\t\treturn _gl;\n\n\t};\n\n\tthis.getContextAttributes = function () {\n\n\t\treturn _gl.getContextAttributes();\n\n\t};\n\n\tthis.forceContextLoss = function () {\n\n\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.loseContext();\n\n\t};\n\n\tthis.forceContextRestore = function () {\n\n\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.restoreContext();\n\n\t};\n\n\tthis.getPixelRatio = function () {\n\n\t\treturn _pixelRatio;\n\n\t};\n\n\tthis.setPixelRatio = function ( value ) {\n\n\t\tif ( value === undefined ) return;\n\n\t\t_pixelRatio = value;\n\n\t\tthis.setSize( _width, _height, false );\n\n\t};\n\n\tthis.getSize = function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getsize() now requires a Vector2 as an argument' );\n\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set( _width, _height );\n\n\t};\n\n\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\tif ( xr.isPresenting ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_canvas.width = Math.floor( width * _pixelRatio );\n\t\t_canvas.height = Math.floor( height * _pixelRatio );\n\n\t\tif ( updateStyle !== false ) {\n\n\t\t\t_canvas.style.width = width + 'px';\n\t\t\t_canvas.style.height = height + 'px';\n\n\t\t}\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getDrawingBufferSize = function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument' );\n\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();\n\n\t};\n\n\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_pixelRatio = pixelRatio;\n\n\t\t_canvas.width = Math.floor( width * pixelRatio );\n\t\t_canvas.height = Math.floor( height * pixelRatio );\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getCurrentViewport = function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument' );\n\n\t\t\ttarget = new Vector4();\n\n\t\t}\n\n\t\treturn target.copy( _currentViewport );\n\n\t};\n\n\tthis.getViewport = function ( target ) {\n\n\t\treturn target.copy( _viewport );\n\n\t};\n\n\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_viewport.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_viewport.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissor = function ( target ) {\n\n\t\treturn target.copy( _scissor );\n\n\t};\n\n\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_scissor.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_scissor.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissorTest = function () {\n\n\t\treturn _scissorTest;\n\n\t};\n\n\tthis.setScissorTest = function ( boolean ) {\n\n\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t};\n\n\tthis.setOpaqueSort = function ( method ) {\n\n\t\t_opaqueSort = method;\n\n\t};\n\n\tthis.setTransparentSort = function ( method ) {\n\n\t\t_transparentSort = method;\n\n\t};\n\n\t// Clearing\n\n\tthis.getClearColor = function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getClearColor() now requires a Color as an argument' );\n\n\t\t\ttarget = new Color();\n\n\t\t}\n\n\t\treturn target.copy( background.getClearColor() );\n\n\t};\n\n\tthis.setClearColor = function () {\n\n\t\tbackground.setClearColor.apply( background, arguments );\n\n\t};\n\n\tthis.getClearAlpha = function () {\n\n\t\treturn background.getClearAlpha();\n\n\t};\n\n\tthis.setClearAlpha = function () {\n\n\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t};\n\n\tthis.clear = function ( color, depth, stencil ) {\n\n\t\tlet bits = 0;\n\n\t\tif ( color === undefined || color ) bits |= 16384;\n\t\tif ( depth === undefined || depth ) bits |= 256;\n\t\tif ( stencil === undefined || stencil ) bits |= 1024;\n\n\t\t_gl.clear( bits );\n\n\t};\n\n\tthis.clearColor = function () {\n\n\t\tthis.clear( true, false, false );\n\n\t};\n\n\tthis.clearDepth = function () {\n\n\t\tthis.clear( false, true, false );\n\n\t};\n\n\tthis.clearStencil = function () {\n\n\t\tthis.clear( false, false, true );\n\n\t};\n\n\t//\n\n\tthis.dispose = function () {\n\n\t\t_canvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\trenderLists.dispose();\n\t\trenderStates.dispose();\n\t\tproperties.dispose();\n\t\tcubemaps.dispose();\n\t\tobjects.dispose();\n\t\tbindingStates.dispose();\n\n\t\txr.dispose();\n\n\t\txr.removeEventListener( 'sessionstart', onXRSessionStart );\n\t\txr.removeEventListener( 'sessionend', onXRSessionEnd );\n\n\t\tif ( _transmissionRenderTarget ) {\n\n\t\t\t_transmissionRenderTarget.dispose();\n\t\t\t_transmissionRenderTarget = null;\n\n\t\t}\n\n\t\tanimation.stop();\n\n\t};\n\n\t// Events\n\n\tfunction onContextLost( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t_isContextLost = true;\n\n\t}\n\n\tfunction onContextRestore( /* event */ ) {\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t_isContextLost = false;\n\n\t\tconst infoAutoReset = info.autoReset;\n\t\tconst shadowMapEnabled = shadowMap.enabled;\n\t\tconst shadowMapAutoUpdate = shadowMap.autoUpdate;\n\t\tconst shadowMapNeedsUpdate = shadowMap.needsUpdate;\n\t\tconst shadowMapType = shadowMap.type;\n\n\t\tinitGLContext();\n\n\t\tinfo.autoReset = infoAutoReset;\n\t\tshadowMap.enabled = shadowMapEnabled;\n\t\tshadowMap.autoUpdate = shadowMapAutoUpdate;\n\t\tshadowMap.needsUpdate = shadowMapNeedsUpdate;\n\t\tshadowMap.type = shadowMapType;\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tconst material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\tdeallocateMaterial( material );\n\n\t}\n\n\t// Buffer deallocation\n\n\tfunction deallocateMaterial( material ) {\n\n\t\treleaseMaterialProgramReferences( material );\n\n\t\tproperties.remove( material );\n\n\t}\n\n\n\tfunction releaseMaterialProgramReferences( material ) {\n\n\t\tconst programs = properties.get( material ).programs;\n\n\t\tif ( programs !== undefined ) {\n\n\t\t\tprograms.forEach( function ( program ) {\n\n\t\t\t\tprogramCache.releaseProgram( program );\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t// Buffer rendering\n\n\tfunction renderObjectImmediate( object, program ) {\n\n\t\tobject.render( function ( object ) {\n\n\t\t\t_this.renderBufferImmediate( object, program );\n\n\t\t} );\n\n\t}\n\n\tthis.renderBufferImmediate = function ( object, program ) {\n\n\t\tbindingStates.initAttributes();\n\n\t\tconst buffers = properties.get( object );\n\n\t\tif ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer();\n\t\tif ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer();\n\t\tif ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer();\n\t\tif ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer();\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tif ( object.hasPositions ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.position );\n\t\t\t_gl.bufferData( 34962, object.positionArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.position );\n\t\t\t_gl.vertexAttribPointer( programAttributes.position, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasNormals ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.normal );\n\t\t\t_gl.bufferData( 34962, object.normalArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.normal );\n\t\t\t_gl.vertexAttribPointer( programAttributes.normal, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasUvs ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.uv );\n\t\t\t_gl.bufferData( 34962, object.uvArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.uv );\n\t\t\t_gl.vertexAttribPointer( programAttributes.uv, 2, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasColors ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.color );\n\t\t\t_gl.bufferData( 34962, object.colorArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.color );\n\t\t\t_gl.vertexAttribPointer( programAttributes.color, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tbindingStates.disableUnusedAttributes();\n\n\t\t_gl.drawArrays( 4, 0, object.count );\n\n\t\tobject.count = 0;\n\n\t};\n\n\tthis.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {\n\n\t\tif ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\tconst program = setProgram( camera, scene, material, object );\n\n\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t//\n\n\t\tlet index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\n\t\t//\n\n\t\tif ( index === null ) {\n\n\t\t\tif ( position === undefined || position.count === 0 ) return;\n\n\t\t} else if ( index.count === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t//\n\n\t\tlet rangeFactor = 1;\n\n\t\tif ( material.wireframe === true ) {\n\n\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\t\t\trangeFactor = 2;\n\n\t\t}\n\n\t\tif ( material.morphTargets || material.morphNormals ) {\n\n\t\t\tmorphtargets.update( object, geometry, material, program );\n\n\t\t}\n\n\t\tbindingStates.setup( object, material, program, geometry, index );\n\n\t\tlet attribute;\n\t\tlet renderer = bufferRenderer;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattribute = attributes.get( index );\n\n\t\t\trenderer = indexedBufferRenderer;\n\t\t\trenderer.setIndex( attribute );\n\n\t\t}\n\n\t\t//\n\n\t\tconst dataCount = ( index !== null ) ? index.count : position.count;\n\n\t\tconst rangeStart = geometry.drawRange.start * rangeFactor;\n\t\tconst rangeCount = geometry.drawRange.count * rangeFactor;\n\n\t\tconst groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\tconst groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\tconst drawStart = Math.max( rangeStart, groupStart );\n\t\tconst drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\tconst drawCount = Math.max( 0, drawEnd - drawStart + 1 );\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\t//\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\trenderer.setMode( 1 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 4 );\n\n\t\t\t}\n\n\t\t} else if ( object.isLine ) {\n\n\t\t\tlet lineWidth = material.linewidth;\n\n\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\trenderer.setMode( 1 );\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\trenderer.setMode( 2 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 3 );\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\trenderer.setMode( 0 );\n\n\t\t} else if ( object.isSprite ) {\n\n\t\t\trenderer.setMode( 4 );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, object.count );\n\n\t\t} else if ( geometry.isInstancedBufferGeometry ) {\n\n\t\t\tconst instanceCount = Math.min( geometry.instanceCount, geometry._maxInstanceCount );\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, instanceCount );\n\n\t\t} else {\n\n\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t}\n\n\t};\n\n\t// Compile\n\n\tthis.compile = function ( scene, camera ) {\n\n\t\tcurrentRenderState = renderStates.get( scene );\n\t\tcurrentRenderState.init();\n\n\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tcurrentRenderState.setupLights();\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tconst material = object.material;\n\n\t\t\tif ( material ) {\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0; i < material.length; i ++ ) {\n\n\t\t\t\t\t\tconst material2 = material[ i ];\n\n\t\t\t\t\t\tgetProgram( material2, scene, object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t};\n\n\t// Animation Loop\n\n\tlet onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time ) {\n\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t}\n\n\tfunction onXRSessionStart() {\n\n\t\tanimation.stop();\n\n\t}\n\n\tfunction onXRSessionEnd() {\n\n\t\tanimation.start();\n\n\t}\n\n\tconst animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tif ( typeof window !== 'undefined' ) animation.setContext( window );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\t\txr.setAnimationLoop( callback );\n\n\t\t( callback === null ) ? animation.stop() : animation.start();\n\n\t};\n\n\txr.addEventListener( 'sessionstart', onXRSessionStart );\n\txr.addEventListener( 'sessionend', onXRSessionEnd );\n\n\t// Rendering\n\n\tthis.render = function ( scene, camera ) {\n\n\t\tif ( camera !== undefined && camera.isCamera !== true ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( _isContextLost === true ) return;\n\n\t\t// update scene graph\n\n\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t// update camera matrices and frustum\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\tif ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );\n\n\t\t\tcamera = xr.getCamera(); // use XR camera for rendering\n\n\t\t}\n\n\t\t//\n\t\tif ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget );\n\n\t\tcurrentRenderState = renderStates.get( scene, renderStateStack.length );\n\t\tcurrentRenderState.init();\n\n\t\trenderStateStack.push( currentRenderState );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t_frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled, camera );\n\n\t\tcurrentRenderList = renderLists.get( scene, renderListStack.length );\n\t\tcurrentRenderList.init();\n\n\t\trenderListStack.push( currentRenderList );\n\n\t\tprojectObject( scene, camera, 0, _this.sortObjects );\n\n\t\tcurrentRenderList.finish();\n\n\t\tif ( _this.sortObjects === true ) {\n\n\t\t\tcurrentRenderList.sort( _opaqueSort, _transparentSort );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _clippingEnabled === true ) clipping.beginShadows();\n\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\tcurrentRenderState.setupLights();\n\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\tif ( _clippingEnabled === true ) clipping.endShadows();\n\n\t\t//\n\n\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n\t\t//\n\n\t\tbackground.render( currentRenderList, scene );\n\n\t\t// render scene\n\n\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\tconst transmissiveObjects = currentRenderList.transmissive;\n\t\tconst transparentObjects = currentRenderList.transparent;\n\n\t\tif ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );\n\t\tif ( transmissiveObjects.length > 0 ) renderTransmissiveObjects( opaqueObjects, transmissiveObjects, scene, camera );\n\t\tif ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );\n\n\t\t//\n\n\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\ttextures.updateRenderTargetMipmap( _currentRenderTarget );\n\n\t\t\t// resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\ttextures.updateMultisampleRenderTarget( _currentRenderTarget );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\n\n\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\tstate.buffers.depth.setTest( true );\n\t\tstate.buffers.depth.setMask( true );\n\t\tstate.buffers.color.setMask( true );\n\n\t\tstate.setPolygonOffset( false );\n\n\t\t// _gl.finish();\n\n\t\tbindingStates.resetDefaultState();\n\t\t_currentMaterialId = - 1;\n\t\t_currentCamera = null;\n\n\t\trenderStateStack.pop();\n\n\t\tif ( renderStateStack.length > 0 ) {\n\n\t\t\tcurrentRenderState = renderStateStack[ renderStateStack.length - 1 ];\n\n\t\t} else {\n\n\t\t\tcurrentRenderState = null;\n\n\t\t}\n\n\t\trenderListStack.pop();\n\n\t\tif ( renderListStack.length > 0 ) {\n\n\t\t\tcurrentRenderList = renderListStack[ renderListStack.length - 1 ];\n\n\t\t} else {\n\n\t\t\tcurrentRenderList = null;\n\n\t\t}\n\n\t};\n\n\tfunction projectObject( object, camera, groupOrder, sortObjects ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible ) {\n\n\t\t\tif ( object.isGroup ) {\n\n\t\t\t\tgroupOrder = object.renderOrder;\n\n\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t} else if ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isImmediateRenderObject ) {\n\n\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t}\n\n\t\t\t\tcurrentRenderList.push( object, null, object.material, groupOrder, _vector3.z, null );\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\t// update skeleton only once in a frame\n\n\t\t\t\t\tif ( object.skeleton.frame !== info.render.frame ) {\n\n\t\t\t\t\t\tobject.skeleton.update();\n\t\t\t\t\t\tobject.skeleton.frame = info.render.frame;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tprojectObject( children[ i ], camera, groupOrder, sortObjects );\n\n\t\t}\n\n\t}\n\n\tfunction renderTransmissiveObjects( opaqueObjects, transmissiveObjects, scene, camera ) {\n\n\t\tif ( _transmissionRenderTarget === null ) {\n\n\t\t\t_transmissionRenderTarget = new WebGLRenderTarget( 1024, 1024, {\n\t\t\t\tgenerateMipmaps: true,\n\t\t\t\tminFilter: LinearMipmapLinearFilter,\n\t\t\t\tmagFilter: NearestFilter,\n\t\t\t\twrapS: ClampToEdgeWrapping,\n\t\t\t\twrapT: ClampToEdgeWrapping\n\t\t\t} );\n\n\t\t}\n\n\t\tconst currentRenderTarget = _this.getRenderTarget();\n\t\t_this.setRenderTarget( _transmissionRenderTarget );\n\t\t_this.clear();\n\n\t\trenderObjects( opaqueObjects, scene, camera );\n\n\t\ttextures.updateRenderTargetMipmap( _transmissionRenderTarget );\n\n\t\t_this.setRenderTarget( currentRenderTarget );\n\n\t\trenderObjects( transmissiveObjects, scene, camera );\n\n\t}\n\n\tfunction renderObjects( renderList, scene, camera ) {\n\n\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\tfor ( let i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\tconst renderItem = renderList[ i ];\n\n\t\t\tconst object = renderItem.object;\n\t\t\tconst geometry = renderItem.geometry;\n\t\t\tconst material = overrideMaterial === null ? renderItem.material : overrideMaterial;\n\t\t\tconst group = renderItem.group;\n\n\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\tconst cameras = camera.cameras;\n\n\t\t\t\tfor ( let j = 0, jl = cameras.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst camera2 = cameras[ j ];\n\n\t\t\t\t\tif ( object.layers.test( camera2.layers ) ) {\n\n\t\t\t\t\t\tstate.viewport( _currentViewport.copy( camera2.viewport ) );\n\n\t\t\t\t\t\tcurrentRenderState.setupLightsView( camera2 );\n\n\t\t\t\t\t\trenderObject( object, scene, camera2, geometry, material, group );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\n\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\tif ( object.isImmediateRenderObject ) {\n\n\t\t\tconst program = setProgram( camera, scene, material, object );\n\n\t\t\tstate.setMaterial( material );\n\n\t\t\tbindingStates.reset();\n\n\t\t\trenderObjectImmediate( object, program );\n\n\t\t} else {\n\n\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t}\n\n\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\n\t}\n\n\tfunction getProgram( material, scene, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tconst lights = currentRenderState.state.lights;\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tconst lightsStateVersion = lights.state.version;\n\n\t\tconst parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );\n\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n\t\tlet programs = materialProperties.programs;\n\n\t\t// always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change\n\n\t\tmaterialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tmaterialProperties.fog = scene.fog;\n\t\tmaterialProperties.envMap = cubemaps.get( material.envMap || materialProperties.environment );\n\n\t\tif ( programs === undefined ) {\n\n\t\t\t// new material\n\n\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\tprograms = new Map();\n\t\t\tmaterialProperties.programs = programs;\n\n\t\t}\n\n\t\tlet program = programs.get( programCacheKey );\n\n\t\tif ( program !== undefined ) {\n\n\t\t\t// early out if program and light state is identical\n\n\t\t\tif ( materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion ) {\n\n\t\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t\treturn program;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tparameters.uniforms = programCache.getUniforms( material );\n\n\t\t\tmaterial.onBuild( parameters, _this );\n\n\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\t\t\tprograms.set( programCacheKey, program );\n\n\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\n\t\t}\n\n\t\tconst uniforms = materialProperties.uniforms;\n\n\t\tif ( ( ! material.isShaderMaterial && ! material.isRawShaderMaterial ) || material.clipping === true ) {\n\n\t\t\tuniforms.clippingPlanes = clipping.uniform;\n\n\t\t}\n\n\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t// store the light setup it was created for\n\n\t\tmaterialProperties.needsLights = materialNeedsLights( material );\n\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\tuniforms.lightProbe.value = lights.state.probe;\n\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\tuniforms.directionalLightShadows.value = lights.state.directionalShadow;\n\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\tuniforms.spotLightShadows.value = lights.state.spotShadow;\n\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\tuniforms.ltc_1.value = lights.state.rectAreaLTC1;\n\t\t\tuniforms.ltc_2.value = lights.state.rectAreaLTC2;\n\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\tuniforms.pointLightShadows.value = lights.state.pointShadow;\n\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\tuniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix;\n\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t}\n\n\t\tconst progUniforms = program.getUniforms();\n\t\tconst uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n\t\tmaterialProperties.currentProgram = program;\n\t\tmaterialProperties.uniformsList = uniformsList;\n\n\t\treturn program;\n\n\t}\n\n\tfunction updateCommonMaterialProperties( material, parameters ) {\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tmaterialProperties.outputEncoding = parameters.outputEncoding;\n\t\tmaterialProperties.instancing = parameters.instancing;\n\t\tmaterialProperties.skinning = parameters.skinning;\n\t\tmaterialProperties.numClippingPlanes = parameters.numClippingPlanes;\n\t\tmaterialProperties.numIntersection = parameters.numClipIntersection;\n\t\tmaterialProperties.vertexAlphas = parameters.vertexAlphas;\n\n\t}\n\n\tfunction setProgram( camera, scene, material, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\ttextures.resetTextureUnits();\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tconst encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : _currentRenderTarget.texture.encoding;\n\t\tconst envMap = cubemaps.get( material.envMap || environment );\n\t\tconst vertexAlphas = material.vertexColors === true && object.geometry && object.geometry.attributes.color && object.geometry.attributes.color.itemSize === 4;\n\n\t\tconst materialProperties = properties.get( material );\n\t\tconst lights = currentRenderState.state.lights;\n\n\t\tif ( _clippingEnabled === true ) {\n\n\t\t\tif ( _localClippingEnabled === true || camera !== _currentCamera ) {\n\n\t\t\t\tconst useCache =\n\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t// (#8465, #8379)\n\t\t\t\tclipping.setState( material, camera, useCache );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tlet needsProgramChange = false;\n\n\t\tif ( material.version === materialProperties.__version ) {\n\n\t\t\tif ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.outputEncoding !== encoding ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancing === false ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( ! object.isInstancedMesh && materialProperties.instancing === true ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( object.isSkinnedMesh && materialProperties.skinning === false ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( ! object.isSkinnedMesh && materialProperties.skinning === true ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.envMap !== envMap ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( material.fog && materialProperties.fog !== fog ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t( materialProperties.numClippingPlanes !== clipping.numPlanes ||\n\t\t\t\tmaterialProperties.numIntersection !== clipping.numIntersection ) ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.vertexAlphas !== vertexAlphas ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tneedsProgramChange = true;\n\t\t\tmaterialProperties.__version = material.version;\n\n\t\t}\n\n\t\t//\n\n\t\tlet program = materialProperties.currentProgram;\n\n\t\tif ( needsProgramChange === true ) {\n\n\t\t\tprogram = getProgram( material, scene, object );\n\n\t\t}\n\n\t\tlet refreshProgram = false;\n\t\tlet refreshMaterial = false;\n\t\tlet refreshLights = false;\n\n\t\tconst p_uniforms = program.getUniforms(),\n\t\t\tm_uniforms = materialProperties.uniforms;\n\n\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\trefreshProgram = true;\n\t\t\trefreshMaterial = true;\n\t\t\trefreshLights = true;\n\n\t\t}\n\n\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t_currentMaterialId = material.id;\n\n\t\t\trefreshMaterial = true;\n\n\t\t}\n\n\t\tif ( refreshProgram || _currentCamera !== camera ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t}\n\n\t\t\tif ( _currentCamera !== camera ) {\n\n\t\t\t\t_currentCamera = camera;\n\n\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t}\n\n\t\t\t// load material specific uniforms\n\t\t\t// (shader material also gets them for the sake of genericity)\n\n\t\t\tif ( material.isShaderMaterial ||\n\t\t\t\tmaterial.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.envMap ) {\n\n\t\t\t\tconst uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl,\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ||\n\t\t\t\tmaterial.isShadowMaterial ||\n\t\t\t\tobject.isSkinnedMesh ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// skinning uniforms must be set even if material didn't change\n\t\t// auto-setting of texture unit for bone texture must go before other textures\n\t\t// otherwise textures used for skinning can take over texture units reserved for other material textures\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\tconst skeleton = object.skeleton;\n\n\t\t\tif ( skeleton ) {\n\n\t\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tp_uniforms.setOptional( _gl, skeleton, 'boneMatrices' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {\n\n\t\t\tmaterialProperties.receiveShadow = object.receiveShadow;\n\t\t\tp_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );\n\n\t\t}\n\n\t\tif ( refreshMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\n\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t// values\n\t\t\t\t//\n\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t// the GL state when required\n\n\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t}\n\n\t\t\t// refresh uniforms common to several materials\n\n\t\t\tif ( fog && material.fog ) {\n\n\t\t\t\tmaterials.refreshFogUniforms( m_uniforms, fog );\n\n\t\t\t}\n\n\t\t\tmaterials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, _transmissionRenderTarget );\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\n\t\t}\n\n\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\n\n\t\t}\n\n\t\t// common matrices\n\n\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\treturn program;\n\n\t}\n\n\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\tuniforms.ambientLightColor.needsUpdate = value;\n\t\tuniforms.lightProbe.needsUpdate = value;\n\n\t\tuniforms.directionalLights.needsUpdate = value;\n\t\tuniforms.directionalLightShadows.needsUpdate = value;\n\t\tuniforms.pointLights.needsUpdate = value;\n\t\tuniforms.pointLightShadows.needsUpdate = value;\n\t\tuniforms.spotLights.needsUpdate = value;\n\t\tuniforms.spotLightShadows.needsUpdate = value;\n\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t}\n\n\tfunction materialNeedsLights( material ) {\n\n\t\treturn material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||\n\t\t\tmaterial.isMeshStandardMaterial || material.isShadowMaterial ||\n\t\t\t( material.isShaderMaterial && material.lights === true );\n\n\t}\n\n\tthis.getActiveCubeFace = function () {\n\n\t\treturn _currentActiveCubeFace;\n\n\t};\n\n\tthis.getActiveMipmapLevel = function () {\n\n\t\treturn _currentActiveMipmapLevel;\n\n\t};\n\n\tthis.getRenderTarget = function () {\n\n\t\treturn _currentRenderTarget;\n\n\t};\n\n\tthis.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {\n\n\t\t_currentRenderTarget = renderTarget;\n\t\t_currentActiveCubeFace = activeCubeFace;\n\t\t_currentActiveMipmapLevel = activeMipmapLevel;\n\n\t\tif ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {\n\n\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t}\n\n\t\tlet framebuffer = null;\n\t\tlet isCube = false;\n\t\tlet isRenderTarget3D = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tconst texture = renderTarget.texture;\n\n\t\t\tif ( texture.isDataTexture3D || texture.isDataTexture2DArray ) {\n\n\t\t\t\tisRenderTarget3D = true;\n\n\t\t\t}\n\n\t\t\tconst __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ];\n\t\t\t\tisCube = true;\n\n\t\t\t} else if ( renderTarget.isWebGLMultisampleRenderTarget ) {\n\n\t\t\t\tframebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;\n\n\t\t\t} else {\n\n\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t}\n\n\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t} else {\n\n\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t}\n\n\t\tconst framebufferBound = state.bindFramebuffer( 36160, framebuffer );\n\n\t\tif ( framebufferBound && capabilities.drawBuffers ) {\n\n\t\t\tlet needsUpdate = false;\n\n\t\t\tif ( renderTarget ) {\n\n\t\t\t\tif ( renderTarget.isWebGLMultipleRenderTargets ) {\n\n\t\t\t\t\tconst textures = renderTarget.texture;\n\n\t\t\t\t\tif ( _currentDrawBuffers.length !== textures.length || _currentDrawBuffers[ 0 ] !== 36064 ) {\n\n\t\t\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\t_currentDrawBuffers[ i ] = 36064 + i;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_currentDrawBuffers.length = textures.length;\n\n\t\t\t\t\t\tneedsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( _currentDrawBuffers.length !== 1 || _currentDrawBuffers[ 0 ] !== 36064 ) {\n\n\t\t\t\t\t\t_currentDrawBuffers[ 0 ] = 36064;\n\t\t\t\t\t\t_currentDrawBuffers.length = 1;\n\n\t\t\t\t\t\tneedsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( _currentDrawBuffers.length !== 1 || _currentDrawBuffers[ 0 ] !== 1029 ) {\n\n\t\t\t\t\t_currentDrawBuffers[ 0 ] = 1029;\n\t\t\t\t\t_currentDrawBuffers.length = 1;\n\n\t\t\t\t\tneedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\t\t_gl.drawBuffers( _currentDrawBuffers );\n\n\t\t\t\t} else {\n\n\t\t\t\t\textensions.get( 'WEBGL_draw_buffers' ).drawBuffersWEBGL( _currentDrawBuffers );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport );\n\t\tstate.scissor( _currentScissor );\n\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\tif ( isCube ) {\n\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t_gl.framebufferTexture2D( 36160, 36064, 34069 + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t} else if ( isRenderTarget3D ) {\n\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\tconst layer = activeCubeFace || 0;\n\t\t\t_gl.framebufferTextureLayer( 36160, 36064, textureProperties.__webglTexture, activeMipmapLevel || 0, layer );\n\n\t\t}\n\n\t};\n\n\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t}\n\n\t\tif ( framebuffer ) {\n\n\t\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\t\ttry {\n\n\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( 35739 ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tconst halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || ( capabilities.isWebGL2 && extensions.has( 'EXT_color_buffer_float' ) ) );\n\n\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( 35738 ) && // Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.has( 'OES_texture_float' ) || extensions.has( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t! halfFloatSupportedByExt ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _gl.checkFramebufferStatus( 36160 ) === 36053 ) {\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' );\n\n\t\t\t\t}\n\n\t\t\t} finally {\n\n\t\t\t\t// restore framebuffer of current render target if necessary\n\n\t\t\t\tconst framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.copyFramebufferToTexture = function ( position, texture, level = 0 ) {\n\n\t\tconst levelScale = Math.pow( 2, - level );\n\t\tconst width = Math.floor( texture.image.width * levelScale );\n\t\tconst height = Math.floor( texture.image.height * levelScale );\n\n\t\tlet glFormat = utils.convert( texture.format );\n\n\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t// Workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=1120100\n\n\t\t\tif ( glFormat === 6407 ) glFormat = 32849;\n\t\t\tif ( glFormat === 6408 ) glFormat = 32856;\n\n\t\t}\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t_gl.copyTexImage2D( 3553, level, glFormat, position.x, position.y, width, height, 0 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) {\n\n\t\tconst width = srcTexture.image.width;\n\t\tconst height = srcTexture.image.height;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n\n\t\ttextures.setTexture2D( dstTexture, 0 );\n\n\t\t// As another texture upload may have changed pixelStorei\n\t\t// parameters, make sure they are correct for the dstTexture\n\t\t_gl.pixelStorei( 37440, dstTexture.flipY );\n\t\t_gl.pixelStorei( 37441, dstTexture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, dstTexture.unpackAlignment );\n\n\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data );\n\n\t\t} else {\n\n\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t_gl.compressedTexSubImage2D( 3553, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, glFormat, glType, srcTexture.image );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( 3553 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.copyTextureToTexture3D = function ( sourceBox, position, srcTexture, dstTexture, level = 0 ) {\n\n\t\tif ( _this.isWebGL1Renderer ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst { width, height, data } = srcTexture.image;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n\t\tlet glTarget;\n\n\t\tif ( dstTexture.isDataTexture3D ) {\n\n\t\t\ttextures.setTexture3D( dstTexture, 0 );\n\t\t\tglTarget = 32879;\n\n\t\t} else if ( dstTexture.isDataTexture2DArray ) {\n\n\t\t\ttextures.setTexture2DArray( dstTexture, 0 );\n\t\t\tglTarget = 35866;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_gl.pixelStorei( 37440, dstTexture.flipY );\n\t\t_gl.pixelStorei( 37441, dstTexture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, dstTexture.unpackAlignment );\n\n\t\tconst unpackRowLen = _gl.getParameter( 3314 );\n\t\tconst unpackImageHeight = _gl.getParameter( 32878 );\n\t\tconst unpackSkipPixels = _gl.getParameter( 3316 );\n\t\tconst unpackSkipRows = _gl.getParameter( 3315 );\n\t\tconst unpackSkipImages = _gl.getParameter( 32877 );\n\n\t\t_gl.pixelStorei( 3314, width );\n\t\t_gl.pixelStorei( 32878, height );\n\t\t_gl.pixelStorei( 3316, sourceBox.min.x );\n\t\t_gl.pixelStorei( 3315, sourceBox.min.y );\n\t\t_gl.pixelStorei( 32877, sourceBox.min.z );\n\n\t\t_gl.texSubImage3D(\n\t\t\tglTarget,\n\t\t\tlevel,\n\t\t\tposition.x,\n\t\t\tposition.y,\n\t\t\tposition.z,\n\t\t\tsourceBox.max.x - sourceBox.min.x + 1,\n\t\t\tsourceBox.max.y - sourceBox.min.y + 1,\n\t\t\tsourceBox.max.z - sourceBox.min.z + 1,\n\t\t\tglFormat,\n\t\t\tglType,\n\t\t\tdata\n\t\t);\n\n\t\t_gl.pixelStorei( 3314, unpackRowLen );\n\t\t_gl.pixelStorei( 32878, unpackImageHeight );\n\t\t_gl.pixelStorei( 3316, unpackSkipPixels );\n\t\t_gl.pixelStorei( 3315, unpackSkipRows );\n\t\t_gl.pixelStorei( 32877, unpackSkipImages );\n\n\t\t// Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( glTarget );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.initTexture = function ( texture ) {\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.resetState = function () {\n\n\t\t_currentActiveCubeFace = 0;\n\t\t_currentActiveMipmapLevel = 0;\n\t\t_currentRenderTarget = null;\n\n\t\tstate.reset();\n\t\tbindingStates.reset();\n\n\t};\n\n\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t}\n\n}\n\nclass WebGL1Renderer extends WebGLRenderer {}\n\nWebGL1Renderer.prototype.isWebGL1Renderer = true;\n\nclass FogExp2 {\n\n\tconstructor( color, density = 0.00025 ) {\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\t\tthis.density = density;\n\n\t}\n\n\tclone() {\n\n\t\treturn new FogExp2( this.color, this.density );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'FogExp2',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tdensity: this.density\n\t\t};\n\n\t}\n\n}\n\nFogExp2.prototype.isFogExp2 = true;\n\nclass Fog {\n\n\tconstructor( color, near = 1, far = 1000 ) {\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Fog( this.color, this.near, this.far );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'Fog',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tnear: this.near,\n\t\t\tfar: this.far\n\t\t};\n\n\t}\n\n}\n\nFog.prototype.isFog = true;\n\nclass Scene extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Scene';\n\n\t\tthis.background = null;\n\t\tthis.environment = null;\n\t\tthis.fog = null;\n\n\t\tthis.overrideMaterial = null;\n\n\t\tthis.autoUpdate = true; // checked by the renderer\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.environment !== null ) this.environment = source.environment.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.background !== null ) data.object.background = this.background.toJSON( meta );\n\t\tif ( this.environment !== null ) data.object.environment = this.environment.toJSON( meta );\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\nScene.prototype.isScene = true;\n\nclass InterleavedBuffer {\n\n\tconstructor( array, stride ) {\n\n\t\tthis.array = array;\n\t\tthis.stride = stride;\n\t\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t\tthis.uuid = generateUUID();\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( let i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t}\n\n\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\tconst ib = new this.constructor( array, this.stride );\n\t\tib.setUsage( this.usage );\n\n\t\treturn ib;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\t// generate UUID for array buffer if necessary\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.prototype.slice.call( new Uint32Array( this.array.buffer ) );\n\n\t\t}\n\n\t\t//\n\n\t\treturn {\n\t\t\tuuid: this.uuid,\n\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tstride: this.stride\n\t\t};\n\n\t}\n\n}\n\nInterleavedBuffer.prototype.isInterleavedBuffer = true;\n\nconst _vector$6 = /*@__PURE__*/ new Vector3();\n\nclass InterleavedBufferAttribute {\n\n\tconstructor( interleavedBuffer, itemSize, offset, normalized ) {\n\n\t\tthis.name = '';\n\n\t\tthis.data = interleavedBuffer;\n\t\tthis.itemSize = itemSize;\n\t\tthis.offset = offset;\n\n\t\tthis.normalized = normalized === true;\n\n\t}\n\n\tget count() {\n\n\t\treturn this.data.count;\n\n\t}\n\n\tget array() {\n\n\t\treturn this.data.array;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tthis.data.needsUpdate = value;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.x = this.getX( i );\n\t\t\t_vector$6.y = this.getY( i );\n\t\t\t_vector$6.z = this.getZ( i );\n\n\t\t\t_vector$6.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.x = this.getX( i );\n\t\t\t_vector$6.y = this.getY( i );\n\t\t\t_vector$6.z = this.getZ( i );\n\n\t\t\t_vector$6.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.x = this.getX( i );\n\t\t\t_vector$6.y = this.getY( i );\n\t\t\t_vector$6.z = this.getZ( i );\n\n\t\t\t_vector$6.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset ];\n\n\t}\n\n\tgetY( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t}\n\n\tgetZ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t}\n\n\tgetW( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t} else {\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t}\n\n\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t}\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// deinterleave data and save it as an ordinary buffer attribute for now\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t} else {\n\n\t\t\t// save as true interlaved attribtue\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\tdata: this.data.uuid,\n\t\t\t\toffset: this.offset,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t}\n\n}\n\nInterleavedBufferAttribute.prototype.isInterleavedBufferAttribute = true;\n\n/**\n * parameters = {\n * color: ,\n * map: new THREE.Texture( ),\n * alphaMap: new THREE.Texture( ),\n * rotation: ,\n * sizeAttenuation: \n * }\n */\n\nclass SpriteMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'SpriteMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.rotation = 0;\n\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.transparent = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\treturn this;\n\n\t}\n\n}\n\nSpriteMaterial.prototype.isSpriteMaterial = true;\n\nlet _geometry;\n\nconst _intersectPoint = /*@__PURE__*/ new Vector3();\nconst _worldScale = /*@__PURE__*/ new Vector3();\nconst _mvPosition = /*@__PURE__*/ new Vector3();\n\nconst _alignedPosition = /*@__PURE__*/ new Vector2();\nconst _rotatedPosition = /*@__PURE__*/ new Vector2();\nconst _viewWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _vA = /*@__PURE__*/ new Vector3();\nconst _vB = /*@__PURE__*/ new Vector3();\nconst _vC = /*@__PURE__*/ new Vector3();\n\nconst _uvA = /*@__PURE__*/ new Vector2();\nconst _uvB = /*@__PURE__*/ new Vector2();\nconst _uvC = /*@__PURE__*/ new Vector2();\n\nclass Sprite extends Object3D {\n\n\tconstructor( material ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Sprite';\n\n\t\tif ( _geometry === undefined ) {\n\n\t\t\t_geometry = new BufferGeometry();\n\n\t\t\tconst float32Array = new Float32Array( [\n\t\t\t\t- 0.5, - 0.5, 0, 0, 0,\n\t\t\t\t0.5, - 0.5, 0, 1, 0,\n\t\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t\t- 0.5, 0.5, 0, 0, 1\n\t\t\t] );\n\n\t\t\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\t\t\t_geometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\t\t_geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\t\t_geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t\t}\n\n\t\tthis.geometry = _geometry;\n\t\tthis.material = ( material !== undefined ) ? material : new SpriteMaterial();\n\n\t\tthis.center = new Vector2( 0.5, 0.5 );\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tif ( raycaster.camera === null ) {\n\n\t\t\tconsole.error( 'THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.' );\n\n\t\t}\n\n\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\n\t\t_viewWorldMatrix.copy( raycaster.camera.matrixWorld );\n\t\tthis.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld );\n\n\t\t_mvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\tif ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) {\n\n\t\t\t_worldScale.multiplyScalar( - _mvPosition.z );\n\n\t\t}\n\n\t\tconst rotation = this.material.rotation;\n\t\tlet sin, cos;\n\n\t\tif ( rotation !== 0 ) {\n\n\t\t\tcos = Math.cos( rotation );\n\t\t\tsin = Math.sin( rotation );\n\n\t\t}\n\n\t\tconst center = this.center;\n\n\t\ttransformVertex( _vA.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vB.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vC.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\n\t\t_uvA.set( 0, 0 );\n\t\t_uvB.set( 1, 0 );\n\t\t_uvC.set( 1, 1 );\n\n\t\t// check first triangle\n\t\tlet intersect = raycaster.ray.intersectTriangle( _vA, _vB, _vC, false, _intersectPoint );\n\n\t\tif ( intersect === null ) {\n\n\t\t\t// check second triangle\n\t\t\ttransformVertex( _vB.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\t_uvB.set( 0, 1 );\n\n\t\t\tintersect = raycaster.ray.intersectTriangle( _vA, _vC, _vB, false, _intersectPoint );\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( _intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tpoint: _intersectPoint.clone(),\n\t\t\tuv: Triangle.getUV( _intersectPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ),\n\t\t\tface: null,\n\t\t\tobject: this\n\n\t\t} );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\tthis.material = source.material;\n\n\t\treturn this;\n\n\t}\n\n}\n\nSprite.prototype.isSprite = true;\n\nfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t// compute position in camera space\n\t_alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t// to check if rotation is not zero\n\tif ( sin !== undefined ) {\n\n\t\t_rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y );\n\t\t_rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y );\n\n\t} else {\n\n\t\t_rotatedPosition.copy( _alignedPosition );\n\n\t}\n\n\n\tvertexPosition.copy( mvPosition );\n\tvertexPosition.x += _rotatedPosition.x;\n\tvertexPosition.y += _rotatedPosition.y;\n\n\t// transform to world space\n\tvertexPosition.applyMatrix4( _viewWorldMatrix );\n\n}\n\nconst _v1$2 = /*@__PURE__*/ new Vector3();\nconst _v2$1 = /*@__PURE__*/ new Vector3();\n\nclass LOD extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis._currentLevel = 0;\n\n\t\tthis.type = 'LOD';\n\n\t\tObject.defineProperties( this, {\n\t\t\tlevels: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tisLOD: {\n\t\t\t\tvalue: true,\n\t\t\t}\n\t\t} );\n\n\t\tthis.autoUpdate = true;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tconst levels = source.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance );\n\n\t\t}\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\taddLevel( object, distance = 0 ) {\n\n\t\tdistance = Math.abs( distance );\n\n\t\tconst levels = this.levels;\n\n\t\tlet l;\n\n\t\tfor ( l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, object: object } );\n\n\t\tthis.add( object );\n\n\t\treturn this;\n\n\t}\n\n\tgetCurrentLevel() {\n\n\t\treturn this._currentLevel;\n\n\t}\n\n\tgetObjectForDistance( distance ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance < levels[ i ].distance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn levels[ i - 1 ].object;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( _v1$2 );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t}\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 1 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t_v2$1.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = _v1$2.distanceTo( _v2$1 ) / camera.zoom;\n\n\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance >= levels[ i ].distance ) {\n\n\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._currentLevel = i - 1;\n\n\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.autoUpdate === false ) data.object.autoUpdate = false;\n\n\t\tdata.object.levels = [];\n\n\t\tconst levels = this.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _basePosition = /*@__PURE__*/ new Vector3();\n\nconst _skinIndex = /*@__PURE__*/ new Vector4();\nconst _skinWeight = /*@__PURE__*/ new Vector4();\n\nconst _vector$5 = /*@__PURE__*/ new Vector3();\nconst _matrix = /*@__PURE__*/ new Matrix4();\n\nclass SkinnedMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'SkinnedMesh';\n\n\t\tthis.bindMode = 'attached';\n\t\tthis.bindMatrix = new Matrix4();\n\t\tthis.bindMatrixInverse = new Matrix4();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.bindMode = source.bindMode;\n\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\tthis.skeleton = source.skeleton;\n\n\t\treturn this;\n\n\t}\n\n\tbind( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.copy( bindMatrix ).invert();\n\n\t}\n\n\tpose() {\n\n\t\tthis.skeleton.pose();\n\n\t}\n\n\tnormalizeSkinWeights() {\n\n\t\tconst vector = new Vector4();\n\n\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\tvector.x = skinWeight.getX( i );\n\t\t\tvector.y = skinWeight.getY( i );\n\t\t\tvector.z = skinWeight.getZ( i );\n\t\t\tvector.w = skinWeight.getW( i );\n\n\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t}\n\n\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\n\n\t\t}\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t}\n\n\tboneTransform( index, target ) {\n\n\t\tconst skeleton = this.skeleton;\n\t\tconst geometry = this.geometry;\n\n\t\t_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t_basePosition.fromBufferAttribute( geometry.attributes.position, index ).applyMatrix4( this.bindMatrix );\n\n\t\ttarget.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tconst weight = _skinWeight.getComponent( i );\n\n\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\tconst boneIndex = _skinIndex.getComponent( i );\n\n\t\t\t\t_matrix.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\ttarget.addScaledVector( _vector$5.copy( _basePosition ).applyMatrix4( _matrix ), weight );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn target.applyMatrix4( this.bindMatrixInverse );\n\n\t}\n\n}\n\nSkinnedMesh.prototype.isSkinnedMesh = true;\n\nclass Bone extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Bone';\n\n\t}\n\n}\n\nBone.prototype.isBone = true;\n\nclass DataTexture extends Texture {\n\n\tconstructor( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.image = { data: data || null, width: width || 1, height: height || 1 };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nDataTexture.prototype.isDataTexture = true;\n\nconst _offsetMatrix = /*@__PURE__*/ new Matrix4();\nconst _identityMatrix = /*@__PURE__*/ new Matrix4();\n\nclass Skeleton {\n\n\tconstructor( bones = [], boneInverses = [] ) {\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.bones = bones.slice( 0 );\n\t\tthis.boneInverses = boneInverses;\n\t\tthis.boneMatrices = null;\n\n\t\tthis.boneTexture = null;\n\t\tthis.boneTextureSize = 0;\n\n\t\tthis.frame = - 1;\n\n\t\tthis.init();\n\n\t}\n\n\tinit() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t// calculate inverse bone matrices if necessary\n\n\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\t// handle special case\n\n\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcalculateInverses() {\n\n\t\tthis.boneInverses.length = 0;\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t}\n\n\tpose() {\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.copy( this.boneInverses[ i ] ).invert();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\t\tconst boneMatrices = this.boneMatrices;\n\t\tconst boneTexture = this.boneTexture;\n\n\t\t// flatten bone matrices to array\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t// compute the offset between the current and the original transform\n\n\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix;\n\n\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( boneTexture !== null ) {\n\n\t\t\tboneTexture.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t}\n\n\tcomputeBoneTexture() {\n\n\t\t// layout (1 matrix = 4 pixels)\n\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\n\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\n\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\n\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\t\tlet size = Math.sqrt( this.bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\tsize = ceilPowerOfTwo( size );\n\t\tsize = Math.max( size, 4 );\n\n\t\tconst boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\tboneMatrices.set( this.boneMatrices ); // copy current values\n\n\t\tconst boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\n\t\tthis.boneMatrices = boneMatrices;\n\t\tthis.boneTexture = boneTexture;\n\t\tthis.boneTextureSize = size;\n\n\t\treturn this;\n\n\t}\n\n\tgetBoneByName( name ) {\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tdispose( ) {\n\n\t\tif ( this.boneTexture !== null ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = null;\n\n\t\t}\n\n\t}\n\n\tfromJSON( json, bones ) {\n\n\t\tthis.uuid = json.uuid;\n\n\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\tconst uuid = json.bones[ i ];\n\t\t\tlet bone = bones[ uuid ];\n\n\t\t\tif ( bone === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );\n\t\t\t\tbone = new Bone();\n\n\t\t\t}\n\n\t\t\tthis.bones.push( bone );\n\t\t\tthis.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t}\n\n\t\tthis.init();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Skeleton',\n\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t},\n\t\t\tbones: [],\n\t\t\tboneInverses: []\n\t\t};\n\n\t\tdata.uuid = this.uuid;\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _instanceLocalMatrix = /*@__PURE__*/ new Matrix4();\nconst _instanceWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _instanceIntersects = [];\n\nconst _mesh = /*@__PURE__*/ new Mesh();\n\nclass InstancedMesh extends Mesh {\n\n\tconstructor( geometry, material, count ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.instanceMatrix = new BufferAttribute( new Float32Array( count * 16 ), 16 );\n\t\tthis.instanceColor = null;\n\n\t\tthis.count = count;\n\n\t\tthis.frustumCulled = false;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\n\t\tif ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone();\n\n\t\tthis.count = source.count;\n\n\t\treturn this;\n\n\t}\n\n\tgetColorAt( index, color ) {\n\n\t\tcolor.fromArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tgetMatrixAt( index, matrix ) {\n\n\t\tmatrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst raycastTimes = this.count;\n\n\t\t_mesh.geometry = this.geometry;\n\t\t_mesh.material = this.material;\n\n\t\tif ( _mesh.material === undefined ) return;\n\n\t\tfor ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {\n\n\t\t\t// calculate the world matrix for each instance\n\n\t\t\tthis.getMatrixAt( instanceId, _instanceLocalMatrix );\n\n\t\t\t_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );\n\n\t\t\t// the mesh represents this single instance\n\n\t\t\t_mesh.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t_mesh.raycast( raycaster, _instanceIntersects );\n\n\t\t\t// process the result of raycast\n\n\t\t\tfor ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {\n\n\t\t\t\tconst intersect = _instanceIntersects[ i ];\n\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_instanceIntersects.length = 0;\n\n\t\t}\n\n\t}\n\n\tsetColorAt( index, color ) {\n\n\t\tif ( this.instanceColor === null ) {\n\n\t\t\tthis.instanceColor = new BufferAttribute( new Float32Array( this.count * 3 ), 3 );\n\n\t\t}\n\n\t\tcolor.toArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tsetMatrixAt( index, matrix ) {\n\n\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nInstancedMesh.prototype.isInstancedMesh = true;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * linewidth: ,\n * linecap: \"round\",\n * linejoin: \"round\"\n * }\n */\n\nclass LineBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.linewidth = 1;\n\t\tthis.linecap = 'round';\n\t\tthis.linejoin = 'round';\n\n\t\tthis.morphTargets = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.linewidth = source.linewidth;\n\t\tthis.linecap = source.linecap;\n\t\tthis.linejoin = source.linejoin;\n\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineBasicMaterial.prototype.isLineBasicMaterial = true;\n\nconst _start$1 = /*@__PURE__*/ new Vector3();\nconst _end$1 = /*@__PURE__*/ new Vector3();\nconst _inverseMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _ray$1 = /*@__PURE__*/ new Ray();\nconst _sphere$1 = /*@__PURE__*/ new Sphere();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t_start$1.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t_end$1.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += _start$1.distanceTo( _end$1 );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$1.copy( geometry.boundingSphere );\n\t\t_sphere$1.applyMatrix4( matrixWorld );\n\t\t_sphere$1.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$1 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$1.copy( matrixWorld ).invert();\n\t\t_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst vStart = new Vector3();\n\t\tconst vEnd = new Vector3();\n\t\tconst interSegment = new Vector3();\n\t\tconst interRay = new Vector3();\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\tconst b = index.getX( i + 1 );\n\n\t\t\t\t\tvStart.fromBufferAttribute( positionAttribute, a );\n\t\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, b );\n\n\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\t\tvStart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nLine.prototype.isLine = true;\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [];\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineSegments.prototype.isLineSegments = true;\n\nclass LineLoop extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineLoop';\n\n\t}\n\n}\n\nLineLoop.prototype.isLineLoop = true;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n * alphaMap: new THREE.Texture( ),\n *\n * size: ,\n * sizeAttenuation: \n *\n * morphTargets: \n * }\n */\n\nclass PointsMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PointsMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.size = 1;\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.morphTargets = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.size = source.size;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\treturn this;\n\n\t}\n\n}\n\nPointsMaterial.prototype.isPointsMaterial = true;\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position$2 = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\n\t\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, a );\n\n\t\t\t\t\ttestPoint( _position$2, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n\n\t\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\ttestPoint( _position$2, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nPoints.prototype.isPoints = true;\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nclass VideoTexture extends Texture {\n\n\tconstructor( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.format = format !== undefined ? format : RGBFormat;\n\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : LinearFilter;\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tconst scope = this;\n\n\t\tfunction updateVideo() {\n\n\t\t\tscope.needsUpdate = true;\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t\tif ( 'requestVideoFrameCallback' in video ) {\n\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.image ).copy( this );\n\n\t}\n\n\tupdate() {\n\n\t\tconst video = this.image;\n\t\tconst hasVideoFrameCallback = 'requestVideoFrameCallback' in video;\n\n\t\tif ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n}\n\nVideoTexture.prototype.isVideoTexture = true;\n\nclass CompressedTexture extends Texture {\n\n\tconstructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.image = { width: width, height: height };\n\t\tthis.mipmaps = mipmaps;\n\n\t\t// no flipping for cube textures\n\t\t// (also flipping doesn't work for compressed textures )\n\n\t\tthis.flipY = false;\n\n\t\t// can't generate mipmaps for compressed textures\n\t\t// mips must be embedded in DDS files\n\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n}\n\nCompressedTexture.prototype.isCompressedTexture = true;\n\nclass CanvasTexture extends Texture {\n\n\tconstructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nCanvasTexture.prototype.isCanvasTexture = true;\n\nclass DepthTexture extends Texture {\n\n\tconstructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {\n\n\t\tformat = format !== undefined ? format : DepthFormat;\n\n\t\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t\t}\n\n\t\tif ( type === undefined && format === DepthFormat ) type = UnsignedShortType;\n\t\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.image = { width: width, height: height };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.flipY = false;\n\t\tthis.generateMipmaps\t= false;\n\n\t}\n\n\n}\n\nDepthTexture.prototype.isDepthTexture = true;\n\nclass CircleGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, segments = 8, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CircleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tsegments = Math.max( 3, segments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// center point\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tnormals.push( 0, 0, 1 );\n\t\tuvs.push( 0.5, 0.5 );\n\n\t\tfor ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\tconst segment = thetaStart + s / segments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uvs\n\n\t\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tindices.push( i, i + 1, 0 );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nclass CylinderGeometry extends BufferGeometry {\n\n\tconstructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\t\tthis.type = 'CylinderGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tconst scope = this;\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet index = 0;\n\t\tconst indexArray = [];\n\t\tconst halfHeight = height / 2;\n\t\tlet groupStart = 0;\n\n\t\t// generate geometry\n\n\t\tgenerateTorso();\n\n\t\tif ( openEnded === false ) {\n\n\t\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction generateTorso() {\n\n\t\t\tconst normal = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\t// this will be used to calculate the normal\n\t\t\tconst slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\tconst indexRow = [];\n\n\t\t\t\tconst v = y / heightSegments;\n\n\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\tconst radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tconst u = x / radialSegments;\n\n\t\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\t\tconst cosTheta = Math.cos( theta );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t\t}\n\n\t\t\t\t// now save vertices of the row in our index array\n\n\t\t\t\tindexArray.push( indexRow );\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\t\tconst a = indexArray[ y ][ x ];\n\t\t\t\t\tconst b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\tconst c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\tconst d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// update group counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t\tfunction generateCap( top ) {\n\n\t\t\t// save the index of the first center vertex\n\t\t\tconst centerIndexStart = index;\n\n\t\t\tconst uv = new Vector2();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\tconst sign = ( top === true ) ? 1 : - 1;\n\n\t\t\t// first we generate the center vertex data of the cap.\n\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\tfor ( let x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// save the index of the last center vertex\n\t\t\tconst centerIndexEnd = index;\n\n\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tconst u = x / radialSegments;\n\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\tconst cosTheta = Math.cos( theta );\n\t\t\t\tconst sinTheta = Math.sin( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = halfHeight * sign;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tconst c = centerIndexStart + x;\n\t\t\t\tconst i = centerIndexEnd + x;\n\n\t\t\t\tif ( top === true ) {\n\n\t\t\t\t\t// face top\n\n\t\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// face bottom\n\n\t\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t\t}\n\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t}\n\n}\n\nclass ConeGeometry extends CylinderGeometry {\n\n\tconstructor( radius = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n}\n\nclass PolyhedronGeometry extends BufferGeometry {\n\n\tconstructor( vertices, indices, radius = 1, detail = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\t// default buffer data\n\n\t\tconst vertexBuffer = [];\n\t\tconst uvBuffer = [];\n\n\t\t// the subdivision creates the vertex buffer data\n\n\t\tsubdivide( detail );\n\n\t\t// all vertices should lie on a conceptual sphere with a given radius\n\n\t\tapplyRadius( radius );\n\n\t\t// finally, create the uv data\n\n\t\tgenerateUVs();\n\n\t\t// build non-indexed geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\t\tif ( detail === 0 ) {\n\n\t\t\tthis.computeVertexNormals(); // flat normals\n\n\t\t} else {\n\n\t\t\tthis.normalizeNormals(); // smooth normals\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction subdivide( detail ) {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\t// iterate over all faces and apply a subdivison with the given detail value\n\n\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t// get the vertices of the face\n\n\t\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t\t// perform subdivision\n\n\t\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\t\tconst cols = detail + 1;\n\n\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\tconst v = [];\n\n\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\tfor ( let i = 0; i <= cols; i ++ ) {\n\n\t\t\t\tv[ i ] = [];\n\n\t\t\t\tconst aj = a.clone().lerp( c, i / cols );\n\t\t\t\tconst bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\tconst rows = cols - i;\n\n\t\t\t\tfor ( let j = 0; j <= rows; j ++ ) {\n\n\t\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// construct all of the faces\n\n\t\t\tfor ( let i = 0; i < cols; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\tconst k = Math.floor( j / 2 );\n\n\t\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction applyRadius( radius ) {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tconst u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\tconst v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t\t}\n\n\t\t\tcorrectUVs();\n\n\t\t\tcorrectSeam();\n\n\t\t}\n\n\t\tfunction correctSeam() {\n\n\t\t\t// handle case when face straddles the seam, see #3269\n\n\t\t\tfor ( let i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t// uv data of a single face\n\n\t\t\t\tconst x0 = uvBuffer[ i + 0 ];\n\t\t\t\tconst x1 = uvBuffer[ i + 2 ];\n\t\t\t\tconst x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\tconst max = Math.max( x0, x1, x2 );\n\t\t\t\tconst min = Math.min( x0, x1, x2 );\n\n\t\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushVertex( vertex ) {\n\n\t\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tfunction getVertexByIndex( index, vertex ) {\n\n\t\t\tconst stride = index * 3;\n\n\t\t\tvertex.x = vertices[ stride + 0 ];\n\t\t\tvertex.y = vertices[ stride + 1 ];\n\t\t\tvertex.z = vertices[ stride + 2 ];\n\n\t\t}\n\n\t\tfunction correctUVs() {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\tconst centroid = new Vector3();\n\n\t\t\tconst uvA = new Vector2();\n\t\t\tconst uvB = new Vector2();\n\t\t\tconst uvC = new Vector2();\n\n\t\t\tfor ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\t\tconst azi = azimuth( centroid );\n\n\t\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t\t}\n\n\t\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\t\tfunction azimuth( vector ) {\n\n\t\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t\t}\n\n\n\t\t// Angle above the XZ plane.\n\n\t\tfunction inclination( vector ) {\n\n\t\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t\t}\n\n\t}\n\n}\n\nclass DodecahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\tconst r = 1 / t;\n\n\t\tconst vertices = [\n\n\t\t\t// (±1, ±1, ±1)\n\t\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t\t// (0, ±1/φ, ±φ)\n\t\t\t0, - r, - t, 0, - r, t,\n\t\t\t0, r, - t, 0, r, t,\n\n\t\t\t// (±1/φ, ±φ, 0)\n\t\t\t- r, - t, 0, - r, t, 0,\n\t\t\tr, - t, 0, r, t, 0,\n\n\t\t\t// (±φ, 0, ±1/φ)\n\t\t\t- t, 0, - r, t, 0, - r,\n\t\t\t- t, 0, r, t, 0, r\n\t\t];\n\n\t\tconst indices = [\n\t\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'DodecahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\nconst _v0 = new Vector3();\nconst _v1$1 = new Vector3();\nconst _normal = new Vector3();\nconst _triangle = new Triangle();\n\nclass EdgesGeometry extends BufferGeometry {\n\n\tconstructor( geometry, thresholdAngle ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EdgesGeometry';\n\n\t\tthis.parameters = {\n\t\t\tthresholdAngle: thresholdAngle\n\t\t};\n\n\t\tthresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1;\n\n\t\tif ( geometry.isGeometry === true ) {\n\n\t\t\tconsole.error( 'THREE.EdgesGeometry no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst precisionPoints = 4;\n\t\tconst precision = Math.pow( 10, precisionPoints );\n\t\tconst thresholdDot = Math.cos( DEG2RAD * thresholdAngle );\n\n\t\tconst indexAttr = geometry.getIndex();\n\t\tconst positionAttr = geometry.getAttribute( 'position' );\n\t\tconst indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\n\t\tconst indexArr = [ 0, 0, 0 ];\n\t\tconst vertKeys = [ 'a', 'b', 'c' ];\n\t\tconst hashes = new Array( 3 );\n\n\t\tconst edgeData = {};\n\t\tconst vertices = [];\n\t\tfor ( let i = 0; i < indexCount; i += 3 ) {\n\n\t\t\tif ( indexAttr ) {\n\n\t\t\t\tindexArr[ 0 ] = indexAttr.getX( i );\n\t\t\t\tindexArr[ 1 ] = indexAttr.getX( i + 1 );\n\t\t\t\tindexArr[ 2 ] = indexAttr.getX( i + 2 );\n\n\t\t\t} else {\n\n\t\t\t\tindexArr[ 0 ] = i;\n\t\t\t\tindexArr[ 1 ] = i + 1;\n\t\t\t\tindexArr[ 2 ] = i + 2;\n\n\t\t\t}\n\n\t\t\tconst { a, b, c } = _triangle;\n\t\t\ta.fromBufferAttribute( positionAttr, indexArr[ 0 ] );\n\t\t\tb.fromBufferAttribute( positionAttr, indexArr[ 1 ] );\n\t\t\tc.fromBufferAttribute( positionAttr, indexArr[ 2 ] );\n\t\t\t_triangle.getNormal( _normal );\n\n\t\t\t// create hashes for the edge from the vertices\n\t\t\thashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;\n\t\t\thashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;\n\t\t\thashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;\n\n\t\t\t// skip degenerate triangles\n\t\t\tif ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// iterate over every edge\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t// get the first and next vertex making up the edge\n\t\t\t\tconst jNext = ( j + 1 ) % 3;\n\t\t\t\tconst vecHash0 = hashes[ j ];\n\t\t\t\tconst vecHash1 = hashes[ jNext ];\n\t\t\t\tconst v0 = _triangle[ vertKeys[ j ] ];\n\t\t\t\tconst v1 = _triangle[ vertKeys[ jNext ] ];\n\n\t\t\t\tconst hash = `${ vecHash0 }_${ vecHash1 }`;\n\t\t\t\tconst reverseHash = `${ vecHash1 }_${ vecHash0 }`;\n\n\t\t\t\tif ( reverseHash in edgeData && edgeData[ reverseHash ] ) {\n\n\t\t\t\t\t// if we found a sibling edge add it into the vertex array if\n\t\t\t\t\t// it meets the angle threshold and delete the edge from the map.\n\t\t\t\t\tif ( _normal.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {\n\n\t\t\t\t\t\tvertices.push( v0.x, v0.y, v0.z );\n\t\t\t\t\t\tvertices.push( v1.x, v1.y, v1.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tedgeData[ reverseHash ] = null;\n\n\t\t\t\t} else if ( ! ( hash in edgeData ) ) {\n\n\t\t\t\t\t// if we've already got an edge here then skip adding a new one\n\t\t\t\t\tedgeData[ hash ] = {\n\n\t\t\t\t\t\tindex0: indexArr[ j ],\n\t\t\t\t\t\tindex1: indexArr[ jNext ],\n\t\t\t\t\t\tnormal: _normal.clone(),\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// iterate over all remaining, unmatched edges and add them to the vertex array\n\t\tfor ( const key in edgeData ) {\n\n\t\t\tif ( edgeData[ key ] ) {\n\n\t\t\t\tconst { index0, index1 } = edgeData[ key ];\n\t\t\t\t_v0.fromBufferAttribute( positionAttr, index0 );\n\t\t\t\t_v1$1.fromBufferAttribute( positionAttr, index1 );\n\n\t\t\t\tvertices.push( _v0.x, _v0.y, _v0.z );\n\t\t\t\tvertices.push( _v1$1.x, _v1$1.y, _v1$1.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n}\n\n/**\n * Port from https://github.com/mapbox/earcut (v2.2.2)\n */\n\nconst Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim ) {\n\n\t\tdim = dim || 2;\n\n\t\tconst hasHoles = holeIndices && holeIndices.length;\n\t\tconst outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length;\n\t\tlet outerNode = linkedList( data, 0, outerLen, dim, true );\n\t\tconst triangles = [];\n\n\t\tif ( ! outerNode || outerNode.next === outerNode.prev ) return triangles;\n\n\t\tlet minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( let i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 1 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tlet i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tlet p = start,\n\t\tagain;\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tlet stop = ear,\n\t\tprev, next;\n\n\t// iterate through ears, slicing them one by one\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim );\n\t\t\ttriangles.push( ear.i / dim );\n\t\t\ttriangles.push( next.i / dim );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertex leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( filterPoints( ear ), triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar( ear ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tlet p = ear.next.next;\n\n\twhile ( p !== ear.prev ) {\n\n\t\tif ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ),\n\t\tminTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ),\n\t\tmaxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ),\n\t\tmaxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y );\n\n\t// z-order range for the current triangle bbox;\n\tconst minZ = zOrder( minTX, minTY, minX, minY, invSize ),\n\t\tmaxZ = zOrder( maxTX, maxTY, minX, minY, invSize );\n\n\tlet p = ear.prevZ,\n\t\tn = ear.nextZ;\n\n\t// look for points inside the triangle in both directions\n\twhile ( p && p.z >= minZ && n && n.z <= maxZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\t// look for remaining points in decreasing z-order\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t}\n\n\t// look for remaining points in increasing z-order\n\twhile ( n && n.z <= maxZ ) {\n\n\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tconst a = p.prev,\n\t\t\tb = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim );\n\t\t\ttriangles.push( p.i / dim );\n\t\t\ttriangles.push( b.i / dim );\n\n\t\t\t// remove two nodes involved\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn filterPoints( p );\n\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\tlet a = start;\n\tdo {\n\n\t\tlet b = a.next.next;\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\t\t\t\tlet c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tconst queue = [];\n\tlet i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\teliminateHole( queue[ i ], outerNode );\n\t\touterNode = filterPoints( outerNode, outerNode.next );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole( hole, outerNode ) {\n\n\touterNode = findHoleBridge( hole, outerNode );\n\tif ( outerNode ) {\n\n\t\tconst b = splitPolygon( outerNode, hole );\n\n\t\t// filter collinear points around the cuts\n\t\tfilterPoints( outerNode, outerNode.next );\n\t\tfilterPoints( b, b.next );\n\n\t}\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge( hole, outerNode ) {\n\n\tlet p = outerNode;\n\tconst hx = hole.x;\n\tconst hy = hole.y;\n\tlet qx = - Infinity, m;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tconst x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\t\t\t\tif ( x === hx ) {\n\n\t\t\t\t\tif ( hy === p.y ) return p;\n\t\t\t\t\tif ( hy === p.next.y ) return p.next;\n\n\t\t\t\t}\n\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\tif ( hx === qx ) return m; // hole touches outer segment; pick leftmost endpoint\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tconst stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y;\n\tlet tanMin = Infinity, tan;\n\n\tp = m;\n\n\tdo {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== stop );\n\n\treturn m;\n\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector( m, p ) {\n\n\treturn area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0;\n\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tif ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked( list ) {\n\n\tlet i, p, q, e, tail, numMerges, pSize, qSize,\n\t\tinSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\tx = 32767 * ( x - minX ) * invSize;\n\ty = 32767 * ( y - minY ) * invSize;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost( start ) {\n\n\tlet p = start,\n\t\tleftmost = start;\n\tdo {\n\n\t\tif ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 &&\n\t\t\t( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 &&\n\t\t\t( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0;\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges\n\t\t( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible\n\t\t( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors\n\t\tequals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case\n\n}\n\n// signed area of a triangle\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tconst o1 = sign( area( p1, q1, p2 ) );\n\tconst o2 = sign( area( p1, q1, q2 ) );\n\tconst o3 = sign( area( p2, q2, p1 ) );\n\tconst o4 = sign( area( p2, q2, q1 ) );\n\n\tif ( o1 !== o2 && o3 !== o4 ) return true; // general case\n\n\tif ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n\tif ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n\tif ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n\tif ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n\treturn false;\n\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment( p, q, r ) {\n\n\treturn q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y );\n\n}\n\nfunction sign( num ) {\n\n\treturn num > 0 ? 1 : num < 0 ? - 1 : 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon( a, b ) {\n\n\tlet p = a;\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\t\tintersects( p, p.next, a, b ) ) return true;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside( a, b ) {\n\n\tlet p = a,\n\t\tinside = false;\n\tconst px = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) )\n\t\t\tinside = ! inside;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon( a, b ) {\n\n\tconst a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode( i, x, y, last ) {\n\n\tconst p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertex index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertex nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = null;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tlet sum = 0;\n\tfor ( let i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\nclass ShapeUtils {\n\n\t// calculate area of the contour polygon\n\n\tstatic area( contour ) {\n\n\t\tconst n = contour.length;\n\t\tlet a = 0.0;\n\n\t\tfor ( let p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t}\n\n\tstatic isClockWise( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t}\n\n\tstatic triangulateShape( contour, holes ) {\n\n\t\tconst vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tconst holeIndices = []; // array of hole indices\n\t\tconst faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tlet holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( let i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tconst triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( let i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n}\n\nfunction removeDupEndPts( points ) {\n\n\tconst l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( let i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline (including bevelOffset) is bevel\n * bevelOffset: , // how far from shape outline does bevel start\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // object that provides UV generator functions\n *\n * }\n */\n\nclass ExtrudeGeometry extends BufferGeometry {\n\n\tconstructor( shapes, options ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\tconst scope = this;\n\n\t\tconst verticesArray = [];\n\t\tconst uvArray = [];\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\t\t\taddShape( shape );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\t\tthis.computeVertexNormals();\n\n\t\t// functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst placeholder = [];\n\n\t\t\t// options\n\n\t\t\tconst curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\tconst steps = options.steps !== undefined ? options.steps : 1;\n\t\t\tlet depth = options.depth !== undefined ? options.depth : 100;\n\n\t\t\tlet bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\tlet bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6;\n\t\t\tlet bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2;\n\t\t\tlet bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\t\tlet bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\t\tconst extrudePath = options.extrudePath;\n\n\t\t\tconst uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t\t// deprecated options\n\n\t\t\tif ( options.amount !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' );\n\t\t\t\tdepth = options.amount;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet extrudePts, extrudeByPath = false;\n\t\t\tlet splineTube, binormal, normal, position2;\n\n\t\t\tif ( extrudePath ) {\n\n\t\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\t\textrudeByPath = true;\n\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t\t// SETUP TNB variables\n\n\t\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\tbinormal = new Vector3();\n\t\t\t\tnormal = new Vector3();\n\t\t\t\tposition2 = new Vector3();\n\n\t\t\t}\n\n\t\t\t// Safeguards if bevels are not enabled\n\n\t\t\tif ( ! bevelEnabled ) {\n\n\t\t\t\tbevelSegments = 0;\n\t\t\t\tbevelThickness = 0;\n\t\t\t\tbevelSize = 0;\n\t\t\t\tbevelOffset = 0;\n\n\t\t\t}\n\n\t\t\t// Variables initialization\n\n\t\t\tconst shapePoints = shape.extractPoints( curveSegments );\n\n\t\t\tlet vertices = shapePoints.shape;\n\t\t\tconst holes = shapePoints.holes;\n\n\t\t\tconst reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\t\tif ( reverse ) {\n\n\t\t\t\tvertices = vertices.reverse();\n\n\t\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t\t/* Vertices */\n\n\t\t\tconst contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\tvertices = vertices.concat( ahole );\n\n\t\t\t}\n\n\n\t\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\t\tif ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' );\n\n\t\t\t\treturn vec.clone().multiplyScalar( size ).add( pt );\n\n\t\t\t}\n\n\t\t\tconst vlen = vertices.length, flen = faces.length;\n\n\n\t\t\t// Find directions for point movement\n\n\n\t\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t//\n\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\t\tlet v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\tconst v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\tconst v_next_x = inNext.x - inPt.x,\n\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\t\tconst v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t\t// check for collinear edges\n\t\t\t\tconst collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not collinear\n\n\t\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\t\tconst v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\t\tconst v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\t\tconst ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\t\tconst ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\t\tconst ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\t\tconst ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\t\tconst sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t// but prevent crazy spikes\n\t\t\t\t\tconst v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\t\tlet direction_eq = false; // assumes: opposite\n\n\t\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t\t}\n\n\n\t\t\tconst contourMovements = [];\n\n\t\t\tfor ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t\t}\n\n\t\t\tconst holesMovements = [];\n\t\t\tlet oneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\toneHoleMovements = [];\n\n\t\t\t\tfor ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t\t}\n\n\t\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t\t}\n\n\n\t\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\t\tfor ( let b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst bs = bevelSize + bevelOffset;\n\n\t\t\t// Back facing vertices\n\n\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Add stepped vertices...\n\t\t\t// Including front facing vertices\n\n\t\t\tfor ( let s = 1; s <= steps; s ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// Add bevel segments planes\n\n\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\t\tfor ( let b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t/* Faces */\n\n\t\t\t// Top and bottom faces\n\n\t\t\tbuildLidFaces();\n\n\t\t\t// Sides faces\n\n\t\t\tbuildSideFaces();\n\n\n\t\t\t///// Internal functions\n\n\t\t\tfunction buildLidFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\n\t\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\t\tlet layer = 0; // steps + 1\n\t\t\t\t\tlet offset = vlen * layer;\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t\t}\n\n\t\t\t// Create faces for the z-sides of the shape\n\n\t\t\tfunction buildSideFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\t\t\t\tlet layeroffset = 0;\n\t\t\t\tsidewalls( contour, layeroffset );\n\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t\t//, true\n\t\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t\t}\n\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t\t}\n\n\t\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\t\tlet i = contour.length;\n\n\t\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\t\tconst j = i;\n\t\t\t\t\tlet k = i - 1;\n\t\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\tfor ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {\n\n\t\t\t\t\t\tconst slen1 = vlen * s;\n\t\t\t\t\t\tconst slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\t\tconst a = layeroffset + j + slen1,\n\t\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction v( x, y, z ) {\n\n\t\t\t\tplaceholder.push( x );\n\t\t\t\tplaceholder.push( y );\n\t\t\t\tplaceholder.push( z );\n\n\t\t\t}\n\n\n\t\t\tfunction f3( a, b, c ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\n\t\t\t}\n\n\t\t\tfunction f4( a, b, c, d ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( d );\n\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\t\t\t\taddVertex( d );\n\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t}\n\n\t\t\tfunction addVertex( index ) {\n\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t\t}\n\n\n\t\t\tfunction addUV( vector2 ) {\n\n\t\t\t\tuvArray.push( vector2.x );\n\t\t\t\tuvArray.push( vector2.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON$1( shapes, options, data );\n\n\t}\n\n}\n\nconst WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst a_z = vertices[ indexA * 3 + 2 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst b_z = vertices[ indexB * 3 + 2 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\t\tconst c_z = vertices[ indexC * 3 + 2 ];\n\t\tconst d_x = vertices[ indexD * 3 ];\n\t\tconst d_y = vertices[ indexD * 3 + 1 ];\n\t\tconst d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < Math.abs( a_x - b_x ) ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n\n};\n\nfunction toJSON$1( shapes, options, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\nclass IcosahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\tconst vertices = [\n\t\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t\t0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t\tt, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'IcosahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\nclass LatheGeometry extends BufferGeometry {\n\n\tconstructor( points, segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tsegments = Math.floor( segments );\n\n\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\tphiLength = clamp( phiLength, 0, Math.PI * 2 );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst inverseSegments = 1.0 / segments;\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices and uvs\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\tconst sin = Math.sin( phi );\n\t\t\tconst cos = Math.cos( phi );\n\n\t\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\t\tvertex.y = points[ j ].y;\n\t\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = i / segments;\n\t\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 0; i < segments; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\tconst base = j + i * points.length;\n\n\t\t\t\tconst a = base;\n\t\t\t\tconst b = base + points.length;\n\t\t\t\tconst c = base + points.length + 1;\n\t\t\t\tconst d = base + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// generate normals\n\n\t\tthis.computeVertexNormals();\n\n\t\t// if the geometry is closed, we need to average the normals along the seam.\n\t\t// because the corresponding vertices are identical (but still have different UVs).\n\n\t\tif ( phiLength === Math.PI * 2 ) {\n\n\t\t\tconst normals = this.attributes.normal.array;\n\t\t\tconst n1 = new Vector3();\n\t\t\tconst n2 = new Vector3();\n\t\t\tconst n = new Vector3();\n\n\t\t\t// this is the buffer offset for the last line of vertices\n\n\t\t\tconst base = segments * points.length * 3;\n\n\t\t\tfor ( let i = 0, j = 0; i < points.length; i ++, j += 3 ) {\n\n\t\t\t\t// select the normal of the vertex in the first line\n\n\t\t\t\tn1.x = normals[ j + 0 ];\n\t\t\t\tn1.y = normals[ j + 1 ];\n\t\t\t\tn1.z = normals[ j + 2 ];\n\n\t\t\t\t// select the normal of the vertex in the last line\n\n\t\t\t\tn2.x = normals[ base + j + 0 ];\n\t\t\t\tn2.y = normals[ base + j + 1 ];\n\t\t\t\tn2.z = normals[ base + j + 2 ];\n\n\t\t\t\t// average normals\n\n\t\t\t\tn.addVectors( n1, n2 ).normalize();\n\n\t\t\t\t// assign the new values to both normals\n\n\t\t\t\tnormals[ j + 0 ] = normals[ base + j + 0 ] = n.x;\n\t\t\t\tnormals[ j + 1 ] = normals[ base + j + 1 ] = n.y;\n\t\t\t\tnormals[ j + 2 ] = normals[ base + j + 2 ] = n.z;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nclass OctahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t\t1, 3, 4,\t1, 4, 2\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'OctahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\n/**\n * Parametric Surfaces Geometry\n * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html\n */\n\nclass ParametricGeometry extends BufferGeometry {\n\n\tconstructor( func, slices, stacks ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ParametricGeometry';\n\n\t\tthis.parameters = {\n\t\t\tfunc: func,\n\t\t\tslices: slices,\n\t\t\tstacks: stacks\n\t\t};\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tconst EPS = 0.00001;\n\n\t\tconst normal = new Vector3();\n\n\t\tconst p0 = new Vector3(), p1 = new Vector3();\n\t\tconst pu = new Vector3(), pv = new Vector3();\n\n\t\tif ( func.length < 3 ) {\n\n\t\t\tconsole.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' );\n\n\t\t}\n\n\t\t// generate vertices, normals and uvs\n\n\t\tconst sliceCount = slices + 1;\n\n\t\tfor ( let i = 0; i <= stacks; i ++ ) {\n\n\t\t\tconst v = i / stacks;\n\n\t\t\tfor ( let j = 0; j <= slices; j ++ ) {\n\n\t\t\t\tconst u = j / slices;\n\n\t\t\t\t// vertex\n\n\t\t\t\tfunc( u, v, p0 );\n\t\t\t\tvertices.push( p0.x, p0.y, p0.z );\n\n\t\t\t\t// normal\n\n\t\t\t\t// approximate tangent vectors via finite differences\n\n\t\t\t\tif ( u - EPS >= 0 ) {\n\n\t\t\t\t\tfunc( u - EPS, v, p1 );\n\t\t\t\t\tpu.subVectors( p0, p1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfunc( u + EPS, v, p1 );\n\t\t\t\t\tpu.subVectors( p1, p0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( v - EPS >= 0 ) {\n\n\t\t\t\t\tfunc( u, v - EPS, p1 );\n\t\t\t\t\tpv.subVectors( p0, p1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfunc( u, v + EPS, p1 );\n\t\t\t\t\tpv.subVectors( p1, p0 );\n\n\t\t\t\t}\n\n\t\t\t\t// cross product of tangent vectors returns surface normal\n\n\t\t\t\tnormal.crossVectors( pu, pv ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u, v );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let i = 0; i < stacks; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < slices; j ++ ) {\n\n\t\t\t\tconst a = i * sliceCount + j;\n\t\t\t\tconst b = i * sliceCount + j + 1;\n\t\t\t\tconst c = ( i + 1 ) * sliceCount + j + 1;\n\t\t\t\tconst d = ( i + 1 ) * sliceCount + j;\n\n\t\t\t\t// faces one and two\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nclass RingGeometry extends BufferGeometry {\n\n\tconstructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 8, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthetaSegments = Math.max( 3, thetaSegments );\n\t\tphiSegments = Math.max( 1, phiSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// some helper variables\n\n\t\tlet radius = innerRadius;\n\t\tconst radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\t\tconst segment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t\t// increase the radius for next row of vertices\n\n\t\t\tradius += radiusStep;\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let j = 0; j < phiSegments; j ++ ) {\n\n\t\t\tconst thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\tfor ( let i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\tconst segment = i + thetaSegmentLevel;\n\n\t\t\t\tconst a = segment;\n\t\t\t\tconst b = segment + thetaSegments + 1;\n\t\t\t\tconst c = segment + thetaSegments + 2;\n\t\t\t\tconst d = segment + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nclass ShapeGeometry extends BufferGeometry {\n\n\tconstructor( shapes, curveSegments = 12 ) {\n\n\t\tsuper();\n\t\tthis.type = 'ShapeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet groupStart = 0;\n\t\tlet groupCount = 0;\n\n\t\t// allow single and array values for \"shapes\" parameter\n\n\t\tif ( Array.isArray( shapes ) === false ) {\n\n\t\t\taddShape( shapes );\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < shapes.length; i ++ ) {\n\n\t\t\t\taddShape( shapes[ i ] );\n\n\t\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t\tgroupCount = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t// helper functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst indexOffset = vertices.length / 3;\n\t\t\tconst points = shape.extractPoints( curveSegments );\n\n\t\t\tlet shapeVertices = points.shape;\n\t\t\tconst shapeHoles = points.holes;\n\n\t\t\t// check direction of vertices\n\n\t\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t\t// join vertices of inner and outer paths to a single array\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\t\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t\t}\n\n\t\t\t// vertices, normals, uvs\n\n\t\t\tfor ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\tconst vertex = shapeVertices[ i ];\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\t\tnormals.push( 0, 0, 1 );\n\t\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t\t}\n\n\t\t\t// incides\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tconst a = face[ 0 ] + indexOffset;\n\t\t\t\tconst b = face[ 1 ] + indexOffset;\n\t\t\t\tconst c = face[ 2 ] + indexOffset;\n\n\t\t\t\tindices.push( a, b, c );\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON( shapes, data );\n\n\t}\n\n}\n\nfunction toJSON( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\nclass SphereGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, widthSegments = 8, heightSegments = 6, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) {\n\n\t\tsuper();\n\t\tthis.type = 'SphereGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) );\n\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) );\n\n\t\tconst thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );\n\n\t\tlet index = 0;\n\t\tconst grid = [];\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\tconst verticesRow = [];\n\n\t\t\tconst v = iy / heightSegments;\n\n\t\t\t// special case for the poles\n\n\t\t\tlet uOffset = 0;\n\n\t\t\tif ( iy == 0 && thetaStart == 0 ) {\n\n\t\t\t\tuOffset = 0.5 / widthSegments;\n\n\t\t\t} else if ( iy == heightSegments && thetaEnd == Math.PI ) {\n\n\t\t\t\tuOffset = - 0.5 / widthSegments;\n\n\t\t\t}\n\n\t\t\tfor ( let ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\tconst u = ix / widthSegments;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.copy( vertex ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u + uOffset, 1 - v );\n\n\t\t\t\tverticesRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\tgrid.push( verticesRow );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\tconst a = grid[ iy ][ ix + 1 ];\n\t\t\t\tconst b = grid[ iy ][ ix ];\n\t\t\t\tconst c = grid[ iy + 1 ][ ix ];\n\t\t\t\tconst d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nclass TetrahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'TetrahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\n/**\n * Text = 3D Text\n *\n * parameters = {\n * font: , // font\n *\n * size: , // size of the text\n * height: , // thickness to extrude text\n * curveSegments: , // number of points on the curves\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into text bevel goes\n * bevelSize: , // how far from text outline (including bevelOffset) is bevel\n * bevelOffset: // how far from text outline does bevel start\n * }\n */\n\nclass TextGeometry extends ExtrudeGeometry {\n\n\tconstructor( text, parameters = {} ) {\n\n\t\tconst font = parameters.font;\n\n\t\tif ( ! ( font && font.isFont ) ) {\n\n\t\t\tconsole.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' );\n\t\t\treturn new BufferGeometry();\n\n\t\t}\n\n\t\tconst shapes = font.generateShapes( text, parameters.size );\n\n\t\t// translate parameters to ExtrudeGeometry API\n\n\t\tparameters.depth = parameters.height !== undefined ? parameters.height : 50;\n\n\t\t// defaults\n\n\t\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\n\t\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\n\t\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\n\n\t\tsuper( shapes, parameters );\n\n\t\tthis.type = 'TextGeometry';\n\n\t}\n\n}\n\nclass TorusGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, radialSegments = 8, tubularSegments = 6, arc = Math.PI * 2 ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\ttubularSegments = Math.floor( tubularSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst center = new Vector3();\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tconst u = i / tubularSegments * arc;\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\tconst b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\tconst c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\tconst d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nclass TorusKnotGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusKnotGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\ttubularSegments = Math.floor( tubularSegments );\n\t\tradialSegments = Math.floor( radialSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tconst P1 = new Vector3();\n\t\tconst P2 = new Vector3();\n\n\t\tconst B = new Vector3();\n\t\tconst T = new Vector3();\n\t\tconst N = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segement\n\n\t\t\tconst u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t\t// calculate orthonormal basis\n\n\t\t\tT.subVectors( P2, P1 );\n\t\t\tN.addVectors( P2, P1 );\n\t\t\tB.crossVectors( T, N );\n\t\t\tN.crossVectors( B, T );\n\n\t\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\t\tB.normalize();\n\t\t\tN.normalize();\n\n\t\t\tfor ( let j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\t\t\t\tconst cx = - tube * Math.cos( v );\n\t\t\t\tconst cy = tube * Math.sin( v );\n\n\t\t\t\t// now calculate the final vertex position.\n\t\t\t\t// first we orient the extrusion with our basis vectos, then we add it to the current position on the curve\n\n\t\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// this function calculates the current position on the torus curve\n\n\t\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\t\tconst cu = Math.cos( u );\n\t\t\tconst su = Math.sin( u );\n\t\t\tconst quOverP = q / p * u;\n\t\t\tconst cs = Math.cos( quOverP );\n\n\t\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t\t}\n\n\t}\n\n}\n\nclass TubeGeometry extends BufferGeometry {\n\n\tconstructor( path, tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) {\n\n\t\tsuper();\n\t\tthis.type = 'TubeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tconst frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = frames.tangents;\n\t\tthis.normals = frames.normals;\n\t\tthis.binormals = frames.binormals;\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tlet P = new Vector3();\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\t\tconst indices = [];\n\n\t\t// create buffer data\n\n\t\tgenerateBufferData();\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// functions\n\n\t\tfunction generateBufferData() {\n\n\t\t\tfor ( let i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\t\tgenerateSegment( i );\n\n\t\t\t}\n\n\t\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t// at the regular position on the given path\n\t\t\t//\n\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t\t// uvs are generated in a separate function.\n\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\tgenerateUVs();\n\n\t\t\t// finally create faces\n\n\t\t\tgenerateIndices();\n\n\t\t}\n\n\t\tfunction generateSegment( i ) {\n\n\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t\t// retrieve corresponding normal and binormal\n\n\t\t\tconst N = frames.normals[ i ];\n\t\t\tconst B = frames.binormals[ i ];\n\n\t\t\t// generate normals and vertices for the current segment\n\n\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\tconst sin = Math.sin( v );\n\t\t\t\tconst cos = - Math.cos( v );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\t\tnormal.normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateIndices() {\n\n\t\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.path = this.parameters.path.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass WireframeGeometry extends BufferGeometry {\n\n\tconstructor( geometry ) {\n\n\t\tsuper();\n\t\tthis.type = 'WireframeGeometry';\n\n\t\tif ( geometry.isGeometry === true ) {\n\n\t\t\tconsole.error( 'THREE.WireframeGeometry no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\n\t\t// helper variables\n\n\t\tconst edge = [ 0, 0 ], edges = {};\n\n\t\tconst vertex = new Vector3();\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\t// indexed BufferGeometry\n\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst indices = geometry.index;\n\t\t\tlet groups = geometry.groups;\n\n\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t}\n\n\t\t\t// create a data structure that contains all eges without duplicates\n\n\t\t\tfor ( let o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\tconst group = groups[ o ];\n\n\t\t\t\tconst start = group.start;\n\t\t\t\tconst count = group.count;\n\n\t\t\t\tfor ( let i = start, l = ( start + count ); i < l; i += 3 ) {\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\tconst edge1 = indices.getX( i + j );\n\t\t\t\t\t\tconst edge2 = indices.getX( i + ( j + 1 ) % 3 );\n\t\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\t\tconst key = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// generate vertices\n\n\t\t\tfor ( const key in edges ) {\n\n\t\t\t\tconst e = edges[ key ];\n\n\t\t\t\tvertex.fromBufferAttribute( position, e.index1 );\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\tvertex.fromBufferAttribute( position, e.index2 );\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// non-indexed BufferGeometry\n\n\t\t\tconst position = geometry.attributes.position;\n\n\t\t\tfor ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\tconst index1 = 3 * i + j;\n\t\t\t\t\tvertex.fromBufferAttribute( position, index1 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\tconst index2 = 3 * i + ( ( j + 1 ) % 3 );\n\t\t\t\t\tvertex.fromBufferAttribute( position, index2 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n}\n\nvar Geometries = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBoxGeometry: BoxGeometry,\n\tBoxBufferGeometry: BoxGeometry,\n\tCircleGeometry: CircleGeometry,\n\tCircleBufferGeometry: CircleGeometry,\n\tConeGeometry: ConeGeometry,\n\tConeBufferGeometry: ConeGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tCylinderBufferGeometry: CylinderGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tDodecahedronBufferGeometry: DodecahedronGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tExtrudeBufferGeometry: ExtrudeGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tIcosahedronBufferGeometry: IcosahedronGeometry,\n\tLatheGeometry: LatheGeometry,\n\tLatheBufferGeometry: LatheGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tOctahedronBufferGeometry: OctahedronGeometry,\n\tParametricGeometry: ParametricGeometry,\n\tParametricBufferGeometry: ParametricGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPlaneBufferGeometry: PlaneGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tPolyhedronBufferGeometry: PolyhedronGeometry,\n\tRingGeometry: RingGeometry,\n\tRingBufferGeometry: RingGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tShapeBufferGeometry: ShapeGeometry,\n\tSphereGeometry: SphereGeometry,\n\tSphereBufferGeometry: SphereGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTetrahedronBufferGeometry: TetrahedronGeometry,\n\tTextGeometry: TextGeometry,\n\tTextBufferGeometry: TextGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusBufferGeometry: TorusGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTorusKnotBufferGeometry: TorusKnotGeometry,\n\tTubeGeometry: TubeGeometry,\n\tTubeBufferGeometry: TubeGeometry,\n\tWireframeGeometry: WireframeGeometry\n});\n\n/**\n * parameters = {\n * color: \n * }\n */\n\nclass ShadowMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ShadowMaterial';\n\n\t\tthis.color = new Color( 0x000000 );\n\t\tthis.transparent = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\treturn this;\n\n\t}\n\n}\n\nShadowMaterial.prototype.isShadowMaterial = true;\n\nclass RawShaderMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( parameters );\n\n\t\tthis.type = 'RawShaderMaterial';\n\n\t}\n\n}\n\nRawShaderMaterial.prototype.isRawShaderMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n * roughness: ,\n * metalness: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * roughnessMap: new THREE.Texture( ),\n *\n * metalnessMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * envMapIntensity: \n *\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * morphTargets: ,\n * morphNormals: ,\n *\n * flatShading: \n * }\n */\n\nclass MeshStandardMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.type = 'MeshStandardMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.roughness = 1.0;\n\t\tthis.metalness = 0.0;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.roughnessMap = null;\n\n\t\tthis.metalnessMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapIntensity = 1.0;\n\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.vertexTangents = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.color.copy( source.color );\n\t\tthis.roughness = source.roughness;\n\t\tthis.metalness = source.metalness;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.roughnessMap = source.roughnessMap;\n\n\t\tthis.metalnessMap = source.metalnessMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapIntensity = source.envMapIntensity;\n\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.vertexTangents = source.vertexTangents;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshStandardMaterial.prototype.isMeshStandardMaterial = true;\n\n/**\n * parameters = {\n * clearcoat: ,\n * clearcoatMap: new THREE.Texture( ),\n * clearcoatRoughness: ,\n * clearcoatRoughnessMap: new THREE.Texture( ),\n * clearcoatNormalScale: ,\n * clearcoatNormalMap: new THREE.Texture( ),\n *\n * reflectivity: ,\n * ior: ,\n *\n * sheen: ,\n *\n * transmission: ,\n * transmissionMap: new THREE.Texture( ),\n *\n * thickness: ,\n * thicknessMap: new THREE.Texture( ),\n * attenuationDistance: ,\n * attenuationColor: \n * }\n */\n\nclass MeshPhysicalMaterial extends MeshStandardMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.type = 'MeshPhysicalMaterial';\n\n\t\tthis.clearcoat = 0.0;\n\t\tthis.clearcoatMap = null;\n\t\tthis.clearcoatRoughness = 0.0;\n\t\tthis.clearcoatRoughnessMap = null;\n\t\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\t\tthis.clearcoatNormalMap = null;\n\n\t\tthis.reflectivity = 0.5; // maps to F0 = 0.04\n\n\t\tObject.defineProperty( this, 'ior', {\n\t\t\tget: function () {\n\n\t\t\t\treturn ( 1 + 0.4 * this.reflectivity ) / ( 1 - 0.4 * this.reflectivity );\n\n\t\t\t},\n\t\t\tset: function ( ior ) {\n\n\t\t\t\tthis.reflectivity = clamp( 2.5 * ( ior - 1 ) / ( ior + 1 ), 0, 1 );\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.sheen = null; // null will disable sheen bsdf\n\n\t\tthis.transmission = 0.0;\n\t\tthis.transmissionMap = null;\n\n\t\tthis.thickness = 0.01;\n\t\tthis.thicknessMap = null;\n\t\tthis.attenuationDistance = 0.0;\n\t\tthis.attenuationColor = new Color( 1, 1, 1 );\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.clearcoat = source.clearcoat;\n\t\tthis.clearcoatMap = source.clearcoatMap;\n\t\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\t\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\t\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\t\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\t\tthis.reflectivity = source.reflectivity;\n\n\t\tif ( source.sheen ) {\n\n\t\t\tthis.sheen = ( this.sheen || new Color() ).copy( source.sheen );\n\n\t\t} else {\n\n\t\t\tthis.sheen = null;\n\n\t\t}\n\n\t\tthis.transmission = source.transmission;\n\t\tthis.transmissionMap = source.transmissionMap;\n\n\t\tthis.thickness = source.thickness;\n\t\tthis.thicknessMap = source.thicknessMap;\n\t\tthis.attenuationDistance = source.attenuationDistance;\n\t\tthis.attenuationColor.copy( source.attenuationColor );\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n * specular: ,\n * shininess: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.MultiplyOperation,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * morphTargets: ,\n * morphNormals: ,\n *\n * flatShading: \n * }\n */\n\nclass MeshPhongMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshPhongMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.specular = new Color( 0x111111 );\n\t\tthis.shininess = 30;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.specular.copy( source.specular );\n\t\tthis.shininess = source.shininess;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshPhongMaterial.prototype.isMeshPhongMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n *\n * map: new THREE.Texture( ),\n * gradientMap: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * alphaMap: new THREE.Texture( ),\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nclass MeshToonMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = { 'TOON': '' };\n\n\t\tthis.type = 'MeshToonMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\t\tthis.gradientMap = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\t\tthis.gradientMap = source.gradientMap;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshToonMaterial.prototype.isMeshToonMaterial = true;\n\n/**\n * parameters = {\n * opacity: ,\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * wireframe: ,\n * wireframeLinewidth: \n *\n * morphTargets: ,\n * morphNormals: ,\n *\n * flatShading: \n * }\n */\n\nclass MeshNormalMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshNormalMaterial';\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false;\n\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshNormalMaterial.prototype.isMeshNormalMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nclass MeshLambertMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshLambertMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshLambertMaterial.prototype.isMeshLambertMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * matcap: new THREE.Texture( ),\n *\n * map: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * alphaMap: new THREE.Texture( ),\n *\n * morphTargets: ,\n * morphNormals: \n *\n * flatShading: \n * }\n */\n\nclass MeshMatcapMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.type = 'MeshMatcapMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.matcap = null;\n\n\t\tthis.map = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.matcap = source.matcap;\n\n\t\tthis.map = source.map;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshMatcapMaterial.prototype.isMeshMatcapMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * linewidth: ,\n *\n * scale: ,\n * dashSize: ,\n * gapSize: \n * }\n */\n\nclass LineDashedMaterial extends LineBasicMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineDashedMaterial';\n\n\t\tthis.scale = 1;\n\t\tthis.dashSize = 3;\n\t\tthis.gapSize = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.scale = source.scale;\n\t\tthis.dashSize = source.dashSize;\n\t\tthis.gapSize = source.gapSize;\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineDashedMaterial.prototype.isLineDashedMaterial = true;\n\nvar Materials = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tShadowMaterial: ShadowMaterial,\n\tSpriteMaterial: SpriteMaterial,\n\tRawShaderMaterial: RawShaderMaterial,\n\tShaderMaterial: ShaderMaterial,\n\tPointsMaterial: PointsMaterial,\n\tMeshPhysicalMaterial: MeshPhysicalMaterial,\n\tMeshStandardMaterial: MeshStandardMaterial,\n\tMeshPhongMaterial: MeshPhongMaterial,\n\tMeshToonMaterial: MeshToonMaterial,\n\tMeshNormalMaterial: MeshNormalMaterial,\n\tMeshLambertMaterial: MeshLambertMaterial,\n\tMeshDepthMaterial: MeshDepthMaterial,\n\tMeshDistanceMaterial: MeshDistanceMaterial,\n\tMeshBasicMaterial: MeshBasicMaterial,\n\tMeshMatcapMaterial: MeshMatcapMaterial,\n\tLineDashedMaterial: LineDashedMaterial,\n\tLineBasicMaterial: LineBasicMaterial,\n\tMaterial: Material\n});\n\nconst AnimationUtils = {\n\n\t// same as Array.prototype.slice, but also works on typed arrays\n\tarraySlice: function ( array, from, to ) {\n\n\t\tif ( AnimationUtils.isTypedArray( array ) ) {\n\n\t\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\t\treturn new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );\n\n\t\t}\n\n\t\treturn array.slice( from, to );\n\n\t},\n\n\t// converts an array to a specific type\n\tconvertArray: function ( array, type, forceClone ) {\n\n\t\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t\t! forceClone && array.constructor === type ) return array;\n\n\t\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\t\treturn new type( array ); // create typed array\n\n\t\t}\n\n\t\treturn Array.prototype.slice.call( array ); // create Array\n\n\t},\n\n\tisTypedArray: function ( object ) {\n\n\t\treturn ArrayBuffer.isView( object ) &&\n\t\t\t! ( object instanceof DataView );\n\n\t},\n\n\t// returns an array by which times and values can be sorted\n\tgetKeyframeOrder: function ( times ) {\n\n\t\tfunction compareTime( i, j ) {\n\n\t\t\treturn times[ i ] - times[ j ];\n\n\t\t}\n\n\t\tconst n = times.length;\n\t\tconst result = new Array( n );\n\t\tfor ( let i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\t\tresult.sort( compareTime );\n\n\t\treturn result;\n\n\t},\n\n\t// uses the array previously returned by 'getKeyframeOrder' to sort data\n\tsortedArray: function ( values, stride, order ) {\n\n\t\tconst nValues = values.length;\n\t\tconst result = new values.constructor( nValues );\n\n\t\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\t\tconst srcOffset = order[ i ] * stride;\n\n\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// function for parsing AOS keyframe formats\n\tflattenJSON: function ( jsonKeys, times, values, valuePropertyName ) {\n\n\t\tlet i = 1, key = jsonKeys[ 0 ];\n\n\t\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t}\n\n\t\tif ( key === undefined ) return; // no data\n\n\t\tlet value = key[ valuePropertyName ];\n\t\tif ( value === undefined ) return; // no data\n\n\t\tif ( Array.isArray( value ) ) {\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else if ( value.toArray !== undefined ) {\n\n\t\t\t// ...assume THREE.Math-ish\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else {\n\n\t\t\t// otherwise push as-is\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push( value );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t}\n\n\t},\n\n\tsubclip: function ( sourceClip, name, startFrame, endFrame, fps = 30 ) {\n\n\t\tconst clip = sourceClip.clone();\n\n\t\tclip.name = name;\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tconst track = clip.tracks[ i ];\n\t\t\tconst valueSize = track.getValueSize();\n\n\t\t\tconst times = [];\n\t\t\tconst values = [];\n\n\t\t\tfor ( let j = 0; j < track.times.length; ++ j ) {\n\n\t\t\t\tconst frame = track.times[ j ] * fps;\n\n\t\t\t\tif ( frame < startFrame || frame >= endFrame ) continue;\n\n\t\t\t\ttimes.push( track.times[ j ] );\n\n\t\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\t\tvalues.push( track.values[ j * valueSize + k ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( times.length === 0 ) continue;\n\n\t\t\ttrack.times = AnimationUtils.convertArray( times, track.times.constructor );\n\t\t\ttrack.values = AnimationUtils.convertArray( values, track.values.constructor );\n\n\t\t\ttracks.push( track );\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\t// find minimum .times value across all tracks in the trimmed clip\n\n\t\tlet minStartTime = Infinity;\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tif ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {\n\n\t\t\t\tminStartTime = clip.tracks[ i ].times[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// shift all tracks such that clip begins at t=0\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tclip.tracks[ i ].shift( - 1 * minStartTime );\n\n\t\t}\n\n\t\tclip.resetDuration();\n\n\t\treturn clip;\n\n\t},\n\n\tmakeClipAdditive: function ( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {\n\n\t\tif ( fps <= 0 ) fps = 30;\n\n\t\tconst numTracks = referenceClip.tracks.length;\n\t\tconst referenceTime = referenceFrame / fps;\n\n\t\t// Make each track's values relative to the values at the reference frame\n\t\tfor ( let i = 0; i < numTracks; ++ i ) {\n\n\t\t\tconst referenceTrack = referenceClip.tracks[ i ];\n\t\t\tconst referenceTrackType = referenceTrack.ValueTypeName;\n\n\t\t\t// Skip this track if it's non-numeric\n\t\t\tif ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;\n\n\t\t\t// Find the track in the target clip whose name and type matches the reference track\n\t\t\tconst targetTrack = targetClip.tracks.find( function ( track ) {\n\n\t\t\t\treturn track.name === referenceTrack.name\n\t\t\t\t\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t\t} );\n\n\t\t\tif ( targetTrack === undefined ) continue;\n\n\t\t\tlet referenceOffset = 0;\n\t\t\tconst referenceValueSize = referenceTrack.getValueSize();\n\n\t\t\tif ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\treferenceOffset = referenceValueSize / 3;\n\n\t\t\t}\n\n\t\t\tlet targetOffset = 0;\n\t\t\tconst targetValueSize = targetTrack.getValueSize();\n\n\t\t\tif ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\ttargetOffset = targetValueSize / 3;\n\n\t\t\t}\n\n\t\t\tconst lastIndex = referenceTrack.times.length - 1;\n\t\t\tlet referenceValue;\n\n\t\t\t// Find the value to subtract out of the track\n\t\t\tif ( referenceTime <= referenceTrack.times[ 0 ] ) {\n\n\t\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\t\tconst startIndex = referenceOffset;\n\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t\t} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {\n\n\t\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\t\tconst startIndex = lastIndex * referenceValueSize + referenceOffset;\n\t\t\t\tconst endIndex = startIndex + referenceValueSize - referenceOffset;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t\t} else {\n\n\t\t\t\t// Interpolate to the reference value\n\t\t\t\tconst interpolant = referenceTrack.createInterpolant();\n\t\t\t\tconst startIndex = referenceOffset;\n\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( interpolant.resultBuffer, startIndex, endIndex );\n\n\t\t\t}\n\n\t\t\t// Conjugate the quaternion\n\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\tconst referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate();\n\t\t\t\treferenceQuat.toArray( referenceValue );\n\n\t\t\t}\n\n\t\t\t// Subtract the reference value from all of the track values\n\n\t\t\tconst numTimes = targetTrack.times.length;\n\t\t\tfor ( let j = 0; j < numTimes; ++ j ) {\n\n\t\t\t\tconst valueStart = j * targetValueSize + targetOffset;\n\n\t\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\t\tQuaternion.multiplyQuaternionsFlat(\n\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\tvalueStart,\n\t\t\t\t\t\treferenceValue,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\tvalueStart\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst valueEnd = targetValueSize - targetOffset * 2;\n\n\t\t\t\t\t// Subtract each value for all other numeric track types\n\t\t\t\t\tfor ( let k = 0; k < valueEnd; ++ k ) {\n\n\t\t\t\t\t\ttargetTrack.values[ valueStart + k ] -= referenceValue[ k ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\ttargetClip.blendMode = AdditiveAnimationBlendMode;\n\n\t\treturn targetClip;\n\n\t}\n\n};\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n */\n\nclass Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tthis.parameterPositions = parameterPositions;\n\t\tthis._cachedIndex = 0;\n\n\t\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\t\tthis.sampleValues = sampleValues;\n\t\tthis.valueSize = sampleSize;\n\n\t\tthis.settings = null;\n\t\tthis.DefaultSettings_ = {};\n\n\t}\n\n\tevaluate( t ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet i1 = this._cachedIndex,\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tlet right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t, t0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tconst t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tconst mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.afterEnd_( i1 - 1, t0, t );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t}\n\n\tgetSettings_() {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t// Template methods for derived classes:\n\n\tinterpolate_( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t}\n\n\tintervalChanged_( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n}\n\n// ALIAS DEFINITIONS\n\nInterpolant.prototype.beforeStart_ = Interpolant.prototype.copySampleValue_;\nInterpolant.prototype.afterEnd_ = Interpolant.prototype.copySampleValue_;\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n */\n\nclass CubicInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis._weightPrev = - 0;\n\t\tthis._offsetPrev = - 0;\n\t\tthis._weightNext = - 0;\n\t\tthis._offsetNext = - 0;\n\n\t\tthis.DefaultSettings_ = {\n\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\n\t\t};\n\n\t}\n\n\tintervalChanged_( i1, t0, t1 ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet iPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tconst s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tconst s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nclass LinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceeding\n * the parameter.\n */\n\nclass DiscreteInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n}\n\nclass KeyframeTrack {\n\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\t\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\t\tthis.name = name;\n\n\t\tthis.times = AnimationUtils.convertArray( times, this.TimeBufferType );\n\t\tthis.values = AnimationUtils.convertArray( values, this.ValueBufferType );\n\n\t\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\t}\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\tstatic toJSON( track ) {\n\n\t\tconst trackType = track.constructor;\n\n\t\tlet json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== this.toJSON ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': AnimationUtils.convertArray( track.times, Array ),\n\t\t\t\t'values': AnimationUtils.convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tconst interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t}\n\n\tInterpolantFactoryMethodDiscrete( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodSmooth( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tsetInterpolation( interpolation ) {\n\n\t\tlet factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tconst message = 'unsupported interpolation for ' +\n\t\t\t\tthis.ValueTypeName + ' keyframe track named ' + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\n\n\t}\n\n\tgetInterpolation() {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t}\n\n\tgetValueSize() {\n\n\t\treturn this.values.length / this.times.length;\n\n\t}\n\n\t// move all keyframes either forwards or backwards in time\n\tshift( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim( startTime, endTime ) {\n\n\t\tconst times = this.times,\n\t\t\tnKeys = times.length;\n\n\t\tlet from = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) {\n\n\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\tfrom = to - 1;\n\n\t\t\t}\n\n\t\t\tconst stride = this.getValueSize();\n\t\t\tthis.times = AnimationUtils.arraySlice( times, from, to );\n\t\t\tthis.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tconst valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tconst times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tlet prevTime = null;\n\n\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tconst currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( AnimationUtils.isTypedArray( values ) ) {\n\n\t\t\t\tfor ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize() {\n\n\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\tconst times = AnimationUtils.arraySlice( this.times ),\n\t\t\tvalues = AnimationUtils.arraySlice( this.values ),\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\tlastIndex = times.length - 1;\n\n\t\tlet writeIndex = 1;\n\n\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tlet keep = false;\n\n\t\t\tconst time = times[ i ];\n\t\t\tconst timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== times[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tconst offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tconst value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tconst readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = AnimationUtils.arraySlice( times, 0, writeIndex );\n\t\t\tthis.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride );\n\n\t\t} else {\n\n\t\t\tthis.times = times;\n\t\t\tthis.values = values;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst times = AnimationUtils.arraySlice( this.times, 0 );\n\t\tconst values = AnimationUtils.arraySlice( this.values, 0 );\n\n\t\tconst TypedKeyframeTrack = this.constructor;\n\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\treturn track;\n\n\t}\n\n}\n\nKeyframeTrack.prototype.TimeBufferType = Float32Array;\nKeyframeTrack.prototype.ValueBufferType = Float32Array;\nKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\n\n/**\n * A Track of Boolean keyframe values.\n */\nclass BooleanKeyframeTrack extends KeyframeTrack {}\n\nBooleanKeyframeTrack.prototype.ValueTypeName = 'bool';\nBooleanKeyframeTrack.prototype.ValueBufferType = Array;\nBooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of keyframe values that represent color.\n */\nclass ColorKeyframeTrack extends KeyframeTrack {}\n\nColorKeyframeTrack.prototype.ValueTypeName = 'color';\n\n/**\n * A Track of numeric keyframe values.\n */\nclass NumberKeyframeTrack extends KeyframeTrack {}\n\nNumberKeyframeTrack.prototype.ValueTypeName = 'number';\n\n/**\n * Spherical linear unit quaternion interpolant.\n */\n\nclass QuaternionLinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tlet offset = i1 * stride;\n\n\t\tfor ( let end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n * A Track of quaternion keyframe values.\n */\nclass QuaternionKeyframeTrack extends KeyframeTrack {\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n}\n\nQuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion';\n// ValueBufferType is inherited\nQuaternionKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\nQuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track that interpolates Strings\n */\nclass StringKeyframeTrack extends KeyframeTrack {}\n\nStringKeyframeTrack.prototype.ValueTypeName = 'string';\nStringKeyframeTrack.prototype.ValueBufferType = Array;\nStringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of vectored keyframe values.\n */\nclass VectorKeyframeTrack extends KeyframeTrack {}\n\nVectorKeyframeTrack.prototype.ValueTypeName = 'vector';\n\nclass AnimationClip {\n\n\tconstructor( name, duration = - 1, tracks, blendMode = NormalAnimationBlendMode ) {\n\n\t\tthis.name = name;\n\t\tthis.tracks = tracks;\n\t\tthis.duration = duration;\n\t\tthis.blendMode = blendMode;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// this means it should figure out its duration by scanning the tracks\n\t\tif ( this.duration < 0 ) {\n\n\t\t\tthis.resetDuration();\n\n\t\t}\n\n\t}\n\n\n\tstatic parse( json ) {\n\n\t\tconst tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\tconst clip = new this( json.name, json.duration, tracks, json.blendMode );\n\t\tclip.uuid = json.uuid;\n\n\t\treturn clip;\n\n\t}\n\n\tstatic toJSON( clip ) {\n\n\t\tconst tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tconst json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid,\n\t\t\t'blendMode': clip.blendMode\n\n\t\t};\n\n\t\tfor ( let i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t}\n\n\tstatic CreateFromMorphTargetSequence( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tconst numMorphTargets = morphTargetSequence.length;\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tlet times = [];\n\t\t\tlet values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tconst order = AnimationUtils.getKeyframeOrder( times );\n\t\t\ttimes = AnimationUtils.sortedArray( times, 1, order );\n\t\t\tvalues = AnimationUtils.sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new this( name, - 1, tracks );\n\n\t}\n\n\tstatic findByName( objectOrClipArray, name ) {\n\n\t\tlet clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tconst o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tstatic CreateClipsFromMorphTargetSequences( morphTargets, fps, noLoop ) {\n\n\t\tconst animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tconst pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst clips = [];\n\n\t\tfor ( const name in animationToMorphTargets ) {\n\n\t\t\tclips.push( this.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t}\n\n\t// parse the animation.hierarchy format\n\tstatic parseAnimation( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst values = [];\n\n\t\t\t\tAnimationUtils.flattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tconst tracks = [];\n\n\t\tconst clipName = animation.name || 'default';\n\t\tconst fps = animation.fps || 30;\n\t\tconst blendMode = animation.blendMode;\n\n\t\t// automatic length determination in AnimationClip.\n\t\tlet duration = animation.length || - 1;\n\n\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tconst animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tconst morphTargetNames = {};\n\n\t\t\t\tlet k;\n\n\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tconst animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * ( fps || 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tconst boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst clip = new this( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n\tresetDuration() {\n\n\t\tconst tracks = this.tracks;\n\t\tlet duration = 0;\n\n\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tconst track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t\treturn this;\n\n\t}\n\n\ttrim() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\toptimize() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t}\n\n\t\treturn new this.constructor( this.name, this.duration, tracks, this.blendMode );\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.constructor.toJSON( this );\n\n\t}\n\n}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tconst times = [], values = [];\n\n\t\tAnimationUtils.flattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\nconst Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\nclass LoadingManager {\n\n\tconstructor( onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet isLoading = false;\n\t\tlet itemsLoaded = 0;\n\t\tlet itemsTotal = 0;\n\t\tlet urlModifier = undefined;\n\t\tconst handlers = [];\n\n\t\t// Refer to #5689 for the reason why we don't set .onStart\n\t\t// in the constructor\n\n\t\tthis.onStart = undefined;\n\t\tthis.onLoad = onLoad;\n\t\tthis.onProgress = onProgress;\n\t\tthis.onError = onError;\n\n\t\tthis.itemStart = function ( url ) {\n\n\t\t\titemsTotal ++;\n\n\t\t\tif ( isLoading === false ) {\n\n\t\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tisLoading = true;\n\n\t\t};\n\n\t\tthis.itemEnd = function ( url ) {\n\n\t\t\titemsLoaded ++;\n\n\t\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\t\tisLoading = false;\n\n\t\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\t\tscope.onLoad();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.itemError = function ( url ) {\n\n\t\t\tif ( scope.onError !== undefined ) {\n\n\t\t\t\tscope.onError( url );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.resolveURL = function ( url ) {\n\n\t\t\tif ( urlModifier ) {\n\n\t\t\t\treturn urlModifier( url );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t};\n\n\t\tthis.setURLModifier = function ( transform ) {\n\n\t\t\turlModifier = transform;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.addHandler = function ( regex, loader ) {\n\n\t\t\thandlers.push( regex, loader );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.removeHandler = function ( regex ) {\n\n\t\t\tconst index = handlers.indexOf( regex );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\thandlers.splice( index, 2 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.getHandler = function ( file ) {\n\n\t\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\t\tconst regex = handlers[ i ];\n\t\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\t\treturn loader;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t};\n\n\t}\n\n}\n\nconst DefaultLoadingManager = new LoadingManager();\n\nclass Loader {\n\n\tconstructor( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.withCredentials = false;\n\t\tthis.path = '';\n\t\tthis.resourcePath = '';\n\t\tthis.requestHeader = {};\n\n\t}\n\n\tload( /* url, onLoad, onProgress, onError */ ) {}\n\n\tloadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t}\n\n\tparse( /* data */ ) {}\n\n\tsetCrossOrigin( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t}\n\n\tsetWithCredentials( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t}\n\n\tsetResourcePath( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t}\n\n\tsetRequestHeader( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n}\n\nconst loading = {};\n\nclass FileLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Check for data: URI\n\t\tconst dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\t\tconst dataUriRegexResult = url.match( dataUriRegex );\n\t\tlet request;\n\n\t\t// Safari can not handle Data URIs through XMLHttpRequest so process manually\n\t\tif ( dataUriRegexResult ) {\n\n\t\t\tconst mimeType = dataUriRegexResult[ 1 ];\n\t\t\tconst isBase64 = !! dataUriRegexResult[ 2 ];\n\n\t\t\tlet data = dataUriRegexResult[ 3 ];\n\t\t\tdata = decodeURIComponent( data );\n\n\t\t\tif ( isBase64 ) data = atob( data );\n\n\t\t\ttry {\n\n\t\t\t\tlet response;\n\t\t\t\tconst responseType = ( this.responseType || '' ).toLowerCase();\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\tconst view = new Uint8Array( data.length );\n\n\t\t\t\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\t\t\t\tview[ i ] = data.charCodeAt( i );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( responseType === 'blob' ) {\n\n\t\t\t\t\t\t\tresponse = new Blob( [ view.buffer ], { type: mimeType } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tresponse = view.buffer;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\tconst parser = new DOMParser();\n\t\t\t\t\t\tresponse = parser.parseFromString( data, mimeType );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\tresponse = JSON.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault: // 'text' or other\n\n\t\t\t\t\t\tresponse = data;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( response );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Initialise array for duplicate requests\n\n\t\t\tloading[ url ] = [];\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\trequest = new XMLHttpRequest();\n\n\t\t\trequest.open( 'GET', url, true );\n\n\t\t\trequest.addEventListener( 'load', function ( event ) {\n\n\t\t\t\tconst response = this.response;\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tif ( this.status === 200 || this.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\t\tCache.add( url, response );\n\n\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'progress', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'error', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'abort', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, false );\n\n\t\t\tif ( this.responseType !== undefined ) request.responseType = this.responseType;\n\t\t\tif ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;\n\n\t\t\tif ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' );\n\n\t\t\tfor ( const header in this.requestHeader ) {\n\n\t\t\t\trequest.setRequestHeader( header, this.requestHeader[ header ] );\n\n\t\t\t}\n\n\t\t\trequest.send( null );\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\treturn request;\n\n\t}\n\n\tsetResponseType( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t}\n\n\tsetMimeType( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t}\n\n}\n\nclass AnimationLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst animations = [];\n\n\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\tconst clip = AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass CompressedTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst images = [];\n\n\t\tconst texture = new CompressedTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 ) texture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.image = images;\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tfor ( let i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tconst faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( let f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( let i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.image = images;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass ImageLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.substr( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t}\n\n}\n\nclass CubeTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass DataTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst texture = new DataTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tconst texData = scope.parse( buffer );\n\n\t\t\tif ( ! texData ) return;\n\n\t\t\tif ( texData.image !== undefined ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( texData.data !== undefined ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;\n\n\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\tif ( texData.encoding !== undefined ) {\n\n\t\t\t\ttexture.encoding = texData.encoding;\n\n\t\t\t}\n\n\t\t\tif ( texData.flipY !== undefined ) {\n\n\t\t\t\ttexture.flipY = texData.flipY;\n\n\t\t\t}\n\n\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\n\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter; // presumably...\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmapCount === 1 ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\tif ( texData.generateMipmaps !== undefined ) {\n\n\t\t\t\ttexture.generateMipmaps = texData.generateMipmaps;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass TextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new Texture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\n\t\t\t// JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB.\n\t\t\tconst isJPEG = url.search( /\\.jpe?g($|\\?)/i ) > 0 || url.search( /^data\\:image\\/jpeg/ ) === 0;\n\n\t\t\ttexture.format = isJPEG ? RGBFormat : RGBAFormat;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Extensible curve object.\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\nclass Curve {\n\n\tconstructor() {\n\n\t\tthis.type = 'Curve';\n\n\t\tthis.arcLengthDivisions = 200;\n\n\t}\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t}\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t}\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get total curve arc length\n\n\tgetLength() {\n\n\t\tconst lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t}\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths( divisions = this.arcLengthDivisions ) {\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tconst cache = [];\n\t\tlet current, last = this.getPoint( 0 );\n\t\tlet sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( let p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t}\n\n\tupdateArcLengths() {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t}\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping( u, distance ) {\n\n\t\tconst arcLengths = this.getLengths();\n\n\t\tlet i = 0;\n\t\tconst il = arcLengths.length;\n\n\t\tlet targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tlet low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tconst lengthBefore = arcLengths[ i ];\n\t\tconst lengthAfter = arcLengths[ i + 1 ];\n\n\t\tconst segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tconst segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tconst t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t}\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent( t, optionalTarget ) {\n\n\t\tconst delta = 0.0001;\n\t\tlet t1 = t - delta;\n\t\tlet t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tconst pt1 = this.getPoint( t1 );\n\t\tconst pt2 = this.getPoint( t2 );\n\n\t\tconst tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() );\n\n\t\ttangent.copy( pt2 ).sub( pt1 ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t, optionalTarget );\n\n\t}\n\n\tcomputeFrenetFrames( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tconst normal = new Vector3();\n\n\t\tconst tangents = [];\n\t\tconst normals = [];\n\t\tconst binormals = [];\n\n\t\tconst vec = new Vector3();\n\t\tconst mat = new Matrix4();\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst u = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u, new Vector3() );\n\t\t\ttangents[ i ].normalize();\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tlet min = Number.MAX_VALUE;\n\t\tconst tx = Math.abs( tangents[ 0 ].x );\n\t\tconst ty = Math.abs( tangents[ 0 ].y );\n\t\tconst tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\tconst theta = Math.acos( clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\tlet theta = Math.acos( clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass EllipseCurve extends Curve {\n\n\tconstructor( aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EllipseCurve';\n\n\t\tthis.aX = aX;\n\t\tthis.aY = aY;\n\n\t\tthis.xRadius = xRadius;\n\t\tthis.yRadius = yRadius;\n\n\t\tthis.aStartAngle = aStartAngle;\n\t\tthis.aEndAngle = aEndAngle;\n\n\t\tthis.aClockwise = aClockwise;\n\n\t\tthis.aRotation = aRotation;\n\n\t}\n\n\tgetPoint( t, optionalTarget ) {\n\n\t\tconst point = optionalTarget || new Vector2();\n\n\t\tconst twoPi = Math.PI * 2;\n\t\tlet deltaAngle = this.aEndAngle - this.aStartAngle;\n\t\tconst samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t\t// ensures that deltaAngle is 0 .. 2 PI\n\t\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\t\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\t\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\t\tif ( samePoints ) {\n\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\t\tdeltaAngle = - twoPi;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst angle = this.aStartAngle + t * deltaAngle;\n\t\tlet x = this.aX + this.xRadius * Math.cos( angle );\n\t\tlet y = this.aY + this.yRadius * Math.sin( angle );\n\n\t\tif ( this.aRotation !== 0 ) {\n\n\t\t\tconst cos = Math.cos( this.aRotation );\n\t\t\tconst sin = Math.sin( this.aRotation );\n\n\t\t\tconst tx = x - this.aX;\n\t\t\tconst ty = y - this.aY;\n\n\t\t\t// Rotate the point about the center of the ellipse.\n\t\t\tx = tx * cos - ty * sin + this.aX;\n\t\t\ty = tx * sin + ty * cos + this.aY;\n\n\t\t}\n\n\t\treturn point.set( x, y );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.aX = source.aX;\n\t\tthis.aY = source.aY;\n\n\t\tthis.xRadius = source.xRadius;\n\t\tthis.yRadius = source.yRadius;\n\n\t\tthis.aStartAngle = source.aStartAngle;\n\t\tthis.aEndAngle = source.aEndAngle;\n\n\t\tthis.aClockwise = source.aClockwise;\n\n\t\tthis.aRotation = source.aRotation;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.aX = this.aX;\n\t\tdata.aY = this.aY;\n\n\t\tdata.xRadius = this.xRadius;\n\t\tdata.yRadius = this.yRadius;\n\n\t\tdata.aStartAngle = this.aStartAngle;\n\t\tdata.aEndAngle = this.aEndAngle;\n\n\t\tdata.aClockwise = this.aClockwise;\n\n\t\tdata.aRotation = this.aRotation;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.aX = json.aX;\n\t\tthis.aY = json.aY;\n\n\t\tthis.xRadius = json.xRadius;\n\t\tthis.yRadius = json.yRadius;\n\n\t\tthis.aStartAngle = json.aStartAngle;\n\t\tthis.aEndAngle = json.aEndAngle;\n\n\t\tthis.aClockwise = json.aClockwise;\n\n\t\tthis.aRotation = json.aRotation;\n\n\t\treturn this;\n\n\t}\n\n}\n\nEllipseCurve.prototype.isEllipseCurve = true;\n\nclass ArcCurve extends EllipseCurve {\n\n\tconstructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tsuper( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\tthis.type = 'ArcCurve';\n\n\t}\n\n}\n\nArcCurve.prototype.isArcCurve = true;\n\n/**\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tlet c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t * p(0) = x0, p(1) = x1\n\t * and\n\t * p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tlet t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tlet t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tconst t2 = t * t;\n\t\t\tconst t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nconst tmp = new Vector3();\nconst px = new CubicPoly(), py = new CubicPoly(), pz = new CubicPoly();\n\nclass CatmullRomCurve3 extends Curve {\n\n\tconstructor( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CatmullRomCurve3';\n\n\t\tthis.points = points;\n\t\tthis.closed = closed;\n\t\tthis.curveType = curveType;\n\t\tthis.tension = tension;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst l = points.length;\n\n\t\tconst p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\t\tlet intPoint = Math.floor( p );\n\t\tlet weight = p - intPoint;\n\n\t\tif ( this.closed ) {\n\n\t\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\t\tintPoint = l - 2;\n\t\t\tweight = 1;\n\n\t\t}\n\n\t\tlet p0, p3; // 4 points (p1 & p2 defined below)\n\n\t\tif ( this.closed || intPoint > 0 ) {\n\n\t\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate first point\n\t\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\t\tp0 = tmp;\n\n\t\t}\n\n\t\tconst p1 = points[ intPoint % l ];\n\t\tconst p2 = points[ ( intPoint + 1 ) % l ];\n\n\t\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate last point\n\t\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\t\tp3 = tmp;\n\n\t\t}\n\n\t\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t\t// init Centripetal / Chordal Catmull-Rom\n\t\t\tconst pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\t\tlet dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\t\tlet dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\t\tlet dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t\t// safety check for repeated points\n\t\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t\t}\n\n\t\tpoint.set(\n\t\t\tpx.calc( weight ),\n\t\t\tpy.calc( weight ),\n\t\t\tpz.calc( weight )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\tthis.closed = source.closed;\n\t\tthis.curveType = source.curveType;\n\t\tthis.tension = source.tension;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\tdata.closed = this.closed;\n\t\tdata.curveType = this.curveType;\n\t\tdata.tension = this.tension;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t\t}\n\n\t\tthis.closed = json.closed;\n\t\tthis.curveType = json.curveType;\n\t\tthis.tension = json.tension;\n\n\t\treturn this;\n\n\t}\n\n}\n\nCatmullRomCurve3.prototype.isCatmullRomCurve3 = true;\n\n/**\n * Bezier Curves formulas obtained from\n * http://en.wikipedia.org/wiki/Bézier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tconst v0 = ( p2 - p0 ) * 0.5;\n\tconst v1 = ( p3 - p1 ) * 0.5;\n\tconst t2 = t * t;\n\tconst t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tconst k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\nclass CubicBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubicBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nCubicBezierCurve.prototype.isCubicBezierCurve = true;\n\nclass CubicBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubicBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nCubicBezierCurve3.prototype.isCubicBezierCurve3 = true;\n\nclass LineCurve extends Curve {\n\n\tconstructor( v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineCurve';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget ) {\n\n\t\tconst tangent = optionalTarget || new Vector2();\n\n\t\ttangent.copy( this.v2 ).sub( this.v1 ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineCurve.prototype.isLineCurve = true;\n\nclass LineCurve3 extends Curve {\n\n\tconstructor( v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineCurve3';\n\t\tthis.isLineCurve3 = true;\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass QuadraticBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'QuadraticBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nQuadraticBezierCurve.prototype.isQuadraticBezierCurve = true;\n\nclass QuadraticBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'QuadraticBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nQuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true;\n\nclass SplineCurve extends Curve {\n\n\tconstructor( points = [] ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'SplineCurve';\n\n\t\tthis.points = points;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst p = ( points.length - 1 ) * t;\n\n\t\tconst intPoint = Math.floor( p );\n\t\tconst weight = p - intPoint;\n\n\t\tconst p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\t\tconst p1 = points[ intPoint ];\n\t\tconst p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\t\tconst p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\t\tpoint.set(\n\t\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nSplineCurve.prototype.isSplineCurve = true;\n\nvar Curves = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n * curves, but retains the api of a curve\n **************************************************************/\n\nclass CurvePath extends Curve {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'CurvePath';\n\n\t\tthis.curves = [];\n\t\tthis.autoClose = false; // Automatically closes the path\n\n\t}\n\n\tadd( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t}\n\n\tclosePath() {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tconst startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tconst endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tthis.curves.push( new LineCurve( endPoint, startPoint ) );\n\n\t\t}\n\n\t}\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint( t ) {\n\n\t\tconst d = t * this.getLength();\n\t\tconst curveLengths = this.getCurveLengths();\n\t\tlet i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tconst diff = curveLengths[ i ] - d;\n\t\t\t\tconst curve = this.curves[ i ];\n\n\t\t\t\tconst segmentLength = curve.getLength();\n\t\t\t\tconst u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Path extends CurvePath {\n\n\tconstructor( points ) {\n\n\t\tsuper();\n\t\tthis.type = 'Path';\n\n\t\tthis.currentPoint = new Vector2();\n\n\t\tif ( points ) {\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t}\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( let i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tconst curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tconst curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tconst curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts /*Array of Vector*/ ) {\n\n\t\tconst npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tconst curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\treturn this;\n\n\t}\n\n\tarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tabsarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\treturn this;\n\n\t}\n\n\tabsellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tconst firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tconst lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Shape extends Path {\n\n\tconstructor( points ) {\n\n\t\tsuper( points );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.type = 'Shape';\n\n\t\tthis.holes = [];\n\n\t}\n\n\tgetPointsHoles( divisions ) {\n\n\t\tconst holesPts = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t}\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Light extends Object3D {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Light';\n\n\t\tthis.color = new Color( color );\n\t\tthis.intensity = intensity;\n\n\t}\n\n\tdispose() {\n\n\t\t// Empty here in base class; some subclasses override.\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\nLight.prototype.isLight = true;\n\nclass HemisphereLight extends Light {\n\n\tconstructor( skyColor, groundColor, intensity ) {\n\n\t\tsuper( skyColor, intensity );\n\n\t\tthis.type = 'HemisphereLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.groundColor = new Color( groundColor );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n}\n\nHemisphereLight.prototype.isHemisphereLight = true;\n\nconst _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld$1 = /*@__PURE__*/ new Vector3();\nconst _lookTarget$1 = /*@__PURE__*/ new Vector3();\n\nclass LightShadow {\n\n\tconstructor( camera ) {\n\n\t\tthis.camera = camera;\n\n\t\tthis.bias = 0;\n\t\tthis.normalBias = 0;\n\t\tthis.radius = 1;\n\n\t\tthis.mapSize = new Vector2( 512, 512 );\n\n\t\tthis.map = null;\n\t\tthis.mapPass = null;\n\t\tthis.matrix = new Matrix4();\n\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\n\t\tthis._frustum = new Frustum();\n\t\tthis._frameExtents = new Vector2( 1, 1 );\n\n\t\tthis._viewportCount = 1;\n\n\t\tthis._viewports = [\n\n\t\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t\t];\n\n\t}\n\n\tgetViewportCount() {\n\n\t\treturn this._viewportCount;\n\n\t}\n\n\tgetFrustum() {\n\n\t\treturn this._frustum;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst shadowCamera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\t_lightPositionWorld$1.setFromMatrixPosition( light.matrixWorld );\n\t\tshadowCamera.position.copy( _lightPositionWorld$1 );\n\n\t\t_lookTarget$1.setFromMatrixPosition( light.target.matrixWorld );\n\t\tshadowCamera.lookAt( _lookTarget$1 );\n\t\tshadowCamera.updateMatrixWorld();\n\n\t\t_projScreenMatrix$1.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix$1 );\n\n\t\tshadowMatrix.set(\n\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t);\n\n\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\n\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\n\n\t}\n\n\tgetViewport( viewportIndex ) {\n\n\t\treturn this._viewports[ viewportIndex ];\n\n\t}\n\n\tgetFrameExtents() {\n\n\t\treturn this._frameExtents;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.map ) {\n\n\t\t\tthis.map.dispose();\n\n\t\t}\n\n\t\tif ( this.mapPass ) {\n\n\t\t\tthis.mapPass.dispose();\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst object = {};\n\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.normalBias !== 0 ) object.normalBias = this.normalBias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n}\n\nclass SpotLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\t\tthis.focus = 1;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = RAD2DEG * 2 * light.angle * this.focus;\n\t\tconst aspect = this.mapSize.width / this.mapSize.height;\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\tsuper.updateMatrices( light );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.focus = source.focus;\n\n\t\treturn this;\n\n\t}\n\n}\n\nSpotLightShadow.prototype.isSpotLightShadow = true;\n\nclass SpotLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 1 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'SpotLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.distance = distance;\n\t\tthis.angle = angle;\n\t\tthis.penumbra = penumbra;\n\t\tthis.decay = decay; // for physically correct lights, should be 2.\n\n\t\tthis.shadow = new SpotLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// intensity = power per solid angle.\n\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\treturn this.intensity * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// intensity = power per solid angle.\n\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\tthis.intensity = power / Math.PI;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nSpotLight.prototype.isSpotLight = true;\n\nconst _projScreenMatrix = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld = /*@__PURE__*/ new Vector3();\nconst _lookTarget = /*@__PURE__*/ new Vector3();\n\nclass PointLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\t\tthis._frameExtents = new Vector2( 4, 2 );\n\n\t\tthis._viewportCount = 6;\n\n\t\tthis._viewports = [\n\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t// following orientation:\n\t\t\t//\n\t\t\t// xzXZ\n\t\t\t// y Y\n\t\t\t//\n\t\t\t// X - Positive x direction\n\t\t\t// x - Negative x direction\n\t\t\t// Y - Positive y direction\n\t\t\t// y - Negative y direction\n\t\t\t// Z - Positive z direction\n\t\t\t// z - Negative z direction\n\n\t\t\t// positive X\n\t\t\tnew Vector4( 2, 1, 1, 1 ),\n\t\t\t// negative X\n\t\t\tnew Vector4( 0, 1, 1, 1 ),\n\t\t\t// positive Z\n\t\t\tnew Vector4( 3, 1, 1, 1 ),\n\t\t\t// negative Z\n\t\t\tnew Vector4( 1, 1, 1, 1 ),\n\t\t\t// positive Y\n\t\t\tnew Vector4( 3, 0, 1, 1 ),\n\t\t\t// negative Y\n\t\t\tnew Vector4( 1, 0, 1, 1 )\n\t\t];\n\n\t\tthis._cubeDirections = [\n\t\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t\t];\n\n\t\tthis._cubeUps = [\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t\t];\n\n\t}\n\n\tupdateMatrices( light, viewportIndex = 0 ) {\n\n\t\tconst camera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( far !== camera.far ) {\n\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tcamera.position.copy( _lightPositionWorld );\n\n\t\t_lookTarget.copy( camera.position );\n\t\t_lookTarget.add( this._cubeDirections[ viewportIndex ] );\n\t\tcamera.up.copy( this._cubeUps[ viewportIndex ] );\n\t\tcamera.lookAt( _lookTarget );\n\t\tcamera.updateMatrixWorld();\n\n\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t}\n\n}\n\nPointLightShadow.prototype.isPointLightShadow = true;\n\nclass PointLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, decay = 1 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'PointLight';\n\n\t\tthis.distance = distance;\n\t\tthis.decay = decay; // for physically correct lights, should be 2.\n\n\t\tthis.shadow = new PointLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// intensity = power per solid angle.\n\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\treturn this.intensity * 4 * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// intensity = power per solid angle.\n\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nPointLight.prototype.isPointLight = true;\n\nclass OrthographicCamera extends Camera {\n\n\tconstructor( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'OrthographicCamera';\n\n\t\tthis.zoom = 1;\n\t\tthis.view = null;\n\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.top = top;\n\t\tthis.bottom = bottom;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t}\n\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tconst cx = ( this.right + this.left ) / 2;\n\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\tlet left = cx - dx;\n\t\tlet right = cx + dx;\n\t\tlet top = cy + dy;\n\t\tlet bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\tright = left + scaleW * this.view.width;\n\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n}\n\nOrthographicCamera.prototype.isOrthographicCamera = true;\n\nclass DirectionalLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n\t}\n\n}\n\nDirectionalLightShadow.prototype.isDirectionalLightShadow = true;\n\nclass DirectionalLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'DirectionalLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.shadow = new DirectionalLightShadow();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.target = source.target.clone();\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nDirectionalLight.prototype.isDirectionalLight = true;\n\nclass AmbientLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'AmbientLight';\n\n\t}\n\n}\n\nAmbientLight.prototype.isAmbientLight = true;\n\nclass RectAreaLight extends Light {\n\n\tconstructor( color, intensity, width = 10, height = 10 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'RectAreaLight';\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n}\n\nRectAreaLight.prototype.isRectAreaLight = true;\n\n/**\n * Primary reference:\n * https://graphics.stanford.edu/papers/envmap/envmap.pdf\n *\n * Secondary reference:\n * https://www.ppsloan.org/publications/StupidSH36.pdf\n */\n\n// 3-band SH defined by 9 coefficients\n\nclass SphericalHarmonics3 {\n\n\tconstructor() {\n\n\t\tthis.coefficients = [];\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients.push( new Vector3() );\n\n\t\t}\n\n\t}\n\n\tset( coefficients ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].copy( coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tzero() {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].set( 0, 0, 0 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// get the radiance in the direction of the normal\n\t// target is a Vector3\n\tgetAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 );\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 0.488603 * y );\n\t\ttarget.addScaledVector( coeff[ 2 ], 0.488603 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 0.488603 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) );\n\t\ttarget.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) );\n\t\ttarget.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) );\n\n\t\treturn target;\n\n\t}\n\n\t// get the irradiance (radiance convolved with cosine lobe) in the direction of the normal\n\t// target is a Vector3\n\t// https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\tgetIrradianceAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603\n\t\ttarget.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548\n\t\ttarget.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3\n\t\ttarget.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274\n\n\t\treturn target;\n\n\t}\n\n\tadd( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].add( sh.coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\taddScaledSH( sh, s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tscale( s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].multiplyScalar( s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tlerp( sh, alpha ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].lerp( sh.coefficients[ i ], alpha );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcopy( sh ) {\n\n\t\treturn this.set( sh.coefficients );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].fromArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].toArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n\t// evaluate the basis functions\n\t// shBasis is an Array[ 9 ]\n\tstatic getBasisAt( normal, shBasis ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t// band 0\n\t\tshBasis[ 0 ] = 0.282095;\n\n\t\t// band 1\n\t\tshBasis[ 1 ] = 0.488603 * y;\n\t\tshBasis[ 2 ] = 0.488603 * z;\n\t\tshBasis[ 3 ] = 0.488603 * x;\n\n\t\t// band 2\n\t\tshBasis[ 4 ] = 1.092548 * x * y;\n\t\tshBasis[ 5 ] = 1.092548 * y * z;\n\t\tshBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 );\n\t\tshBasis[ 7 ] = 1.092548 * x * z;\n\t\tshBasis[ 8 ] = 0.546274 * ( x * x - y * y );\n\n\t}\n\n}\n\nSphericalHarmonics3.prototype.isSphericalHarmonics3 = true;\n\nclass LightProbe extends Light {\n\n\tconstructor( sh = new SphericalHarmonics3(), intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tthis.sh = sh;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.sh.copy( source.sh );\n\n\t\treturn this;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();\n\t\tthis.sh.fromArray( json.sh );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.sh = this.sh.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\nLightProbe.prototype.isLightProbe = true;\n\nclass MaterialLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\t\tthis.textures = {};\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tconst material = new Materials[ json.type ]();\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.sheen !== undefined ) material.sheen = new Color().setHex( json.sheen );\n\t\tif ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;\n\t\tif ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;\n\t\tif ( json.transmission !== undefined ) material.transmission = json.transmission;\n\t\tif ( json.thickness !== undefined ) material.thickness = json.thickness;\n\t\tif ( json.attenuationDistance !== undefined ) material.attenuationDistance = json.attenuationDistance;\n\t\tif ( json.attenuationColor !== undefined && material.attenuationColor !== undefined ) material.attenuationColor.setHex( json.attenuationColor );\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.combine !== undefined ) material.combine = json.combine;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.shadowSide !== undefined ) material.shadowSide = json.shadowSide;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\n\t\tif ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;\n\t\tif ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;\n\t\tif ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;\n\t\tif ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;\n\t\tif ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask;\n\t\tif ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;\n\t\tif ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;\n\t\tif ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;\n\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== 1 ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets;\n\t\tif ( json.morphNormals !== undefined ) material.morphNormals = json.morphNormals;\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.alphaToCoverage !== undefined ) material.alphaToCoverage = json.alphaToCoverage;\n\t\tif ( json.premultipliedAlpha !== undefined ) material.premultipliedAlpha = json.premultipliedAlpha;\n\n\t\tif ( json.vertexTangents !== undefined ) material.vertexTangents = json.vertexTangents;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\n\t\tif ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped;\n\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\tif ( json.vertexColors !== undefined ) {\n\n\t\t\tif ( typeof json.vertexColors === 'number' ) {\n\n\t\t\t\tmaterial.vertexColors = ( json.vertexColors > 0 ) ? true : false;\n\n\t\t\t} else {\n\n\t\t\t\tmaterial.vertexColors = json.vertexColors;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Shader Material\n\n\t\tif ( json.uniforms !== undefined ) {\n\n\t\t\tfor ( const name in json.uniforms ) {\n\n\t\t\t\tconst uniform = json.uniforms[ name ];\n\n\t\t\t\tmaterial.uniforms[ name ] = {};\n\n\t\t\t\tswitch ( uniform.type ) {\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = getTexture( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Color().setHex( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector2().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = uniform.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.defines !== undefined ) material.defines = json.defines;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\n\t\tif ( json.extensions !== undefined ) {\n\n\t\t\tfor ( const key in json.extensions ) {\n\n\t\t\t\tmaterial.extensions[ key ] = json.extensions[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Deprecated\n\n\t\tif ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\t\tif ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap );\n\n\t\tif ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap );\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tlet normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\t\tif ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\t\tif ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\tif ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap );\n\t\tif ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap );\n\t\tif ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap );\n\t\tif ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale );\n\n\t\tif ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );\n\t\tif ( json.thicknessMap !== undefined ) material.thicknessMap = getTexture( json.thicknessMap );\n\n\t\treturn material;\n\n\t}\n\n\tsetTextures( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\n\n\t}\n\n}\n\nclass LoaderUtils {\n\n\tstatic decodeText( array ) {\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tlet s = '';\n\n\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\t// merges multi-byte utf-8 characters.\n\n\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t} catch ( e ) { // see #16358\n\n\t\t\treturn s;\n\n\t\t}\n\n\t}\n\n\tstatic extractUrlBase( url ) {\n\n\t\tconst index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.substr( 0, index + 1 );\n\n\t}\n\n}\n\nclass InstancedBufferGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'InstancedBufferGeometry';\n\t\tthis.instanceCount = Infinity;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.instanceCount = source.instanceCount;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON( this );\n\n\t\tdata.instanceCount = this.instanceCount;\n\n\t\tdata.isInstancedBufferGeometry = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nInstancedBufferGeometry.prototype.isInstancedBufferGeometry = true;\n\nclass InstancedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized, meshPerAttribute ) {\n\n\t\tif ( typeof ( normalized ) === 'number' ) {\n\n\t\t\tmeshPerAttribute = normalized;\n\n\t\t\tnormalized = false;\n\n\t\t\tconsole.error( 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.' );\n\n\t\t}\n\n\t\tsuper( array, itemSize, normalized );\n\n\t\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON()\t{\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\tdata.isInstancedBufferAttribute = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nInstancedBufferAttribute.prototype.isInstancedBufferAttribute = true;\n\nclass BufferGeometryLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst interleavedBufferMap = {};\n\t\tconst arrayBufferMap = {};\n\n\t\tfunction getInterleavedBuffer( json, uuid ) {\n\n\t\t\tif ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ];\n\n\t\t\tconst interleavedBuffers = json.interleavedBuffers;\n\t\t\tconst interleavedBuffer = interleavedBuffers[ uuid ];\n\n\t\t\tconst buffer = getArrayBuffer( json, interleavedBuffer.buffer );\n\n\t\t\tconst array = getTypedArray( interleavedBuffer.type, buffer );\n\t\t\tconst ib = new InterleavedBuffer( array, interleavedBuffer.stride );\n\t\t\tib.uuid = interleavedBuffer.uuid;\n\n\t\t\tinterleavedBufferMap[ uuid ] = ib;\n\n\t\t\treturn ib;\n\n\t\t}\n\n\t\tfunction getArrayBuffer( json, uuid ) {\n\n\t\t\tif ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ];\n\n\t\t\tconst arrayBuffers = json.arrayBuffers;\n\t\t\tconst arrayBuffer = arrayBuffers[ uuid ];\n\n\t\t\tconst ab = new Uint32Array( arrayBuffer ).buffer;\n\n\t\t\tarrayBufferMap[ uuid ] = ab;\n\n\t\t\treturn ab;\n\n\t\t}\n\n\t\tconst geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry();\n\n\t\tconst index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst typedArray = getTypedArray( index.type, index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tconst attributes = json.data.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\t\t\tlet bufferAttribute;\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t} else {\n\n\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\tconst bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute;\n\t\t\t\tbufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\tif ( attribute.usage !== undefined ) bufferAttribute.setUsage( attribute.usage );\n\n\t\t\tif ( attribute.updateRange !== undefined ) {\n\n\t\t\t\tbufferAttribute.updateRange.offset = attribute.updateRange.offset;\n\t\t\t\tbufferAttribute.updateRange.count = attribute.updateRange.count;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( key, bufferAttribute );\n\n\t\t}\n\n\t\tconst morphAttributes = json.data.morphAttributes;\n\n\t\tif ( morphAttributes ) {\n\n\t\t\tfor ( const key in morphAttributes ) {\n\n\t\t\t\tconst attributeArray = morphAttributes[ key ];\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attribute = attributeArray[ i ];\n\t\t\t\t\tlet bufferAttribute;\n\n\t\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\t\t\tbufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\t\t\tarray.push( bufferAttribute );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.morphAttributes[ key ] = array;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst morphTargetsRelative = json.data.morphTargetsRelative;\n\n\t\tif ( morphTargetsRelative ) {\n\n\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t}\n\n\t\tconst groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( let i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tconst center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\tif ( json.name ) geometry.name = json.name;\n\t\tif ( json.userData ) geometry.userData = json.userData;\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nclass ObjectLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json, onLoad ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\n\t\t//\n\n\t\tif ( onLoad !== undefined ) {\n\n\t\t\tlet hasImages = false;\n\n\t\t\tfor ( const uuid in images ) {\n\n\t\t\t\tif ( images[ uuid ] instanceof HTMLImageElement ) {\n\n\t\t\t\t\thasImages = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasImages === false ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tparseShapes( json ) {\n\n\t\tconst shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n\tparseSkeletons( json, object ) {\n\n\t\tconst skeletons = {};\n\t\tconst bones = {};\n\n\t\t// generate bone lookup table\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isBone ) bones[ child.uuid ] = child;\n\n\t\t} );\n\n\t\t// create skeletons\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst skeleton = new Skeleton().fromJSON( json[ i ], bones );\n\n\t\t\t\tskeletons[ skeleton.uuid ] = skeleton;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn skeletons;\n\n\t}\n\n\tparseGeometries( json, shapes ) {\n\n\t\tconst geometries = {};\n\t\tlet geometryShapes;\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tlet geometry;\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'PlaneGeometry':\n\t\t\t\t\tcase 'PlaneBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BoxGeometry':\n\t\t\t\t\tcase 'BoxBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.depth,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.depthSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CircleGeometry':\n\t\t\t\t\tcase 'CircleBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CylinderGeometry':\n\t\t\t\t\tcase 'CylinderBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radiusTop,\n\t\t\t\t\t\t\tdata.radiusBottom,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ConeGeometry':\n\t\t\t\t\tcase 'ConeBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SphereGeometry':\n\t\t\t\t\tcase 'SphereBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'DodecahedronGeometry':\n\t\t\t\t\tcase 'DodecahedronBufferGeometry':\n\t\t\t\t\tcase 'IcosahedronGeometry':\n\t\t\t\t\tcase 'IcosahedronBufferGeometry':\n\t\t\t\t\tcase 'OctahedronGeometry':\n\t\t\t\t\tcase 'OctahedronBufferGeometry':\n\t\t\t\t\tcase 'TetrahedronGeometry':\n\t\t\t\t\tcase 'TetrahedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.detail\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RingGeometry':\n\t\t\t\t\tcase 'RingBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.innerRadius,\n\t\t\t\t\t\t\tdata.outerRadius,\n\t\t\t\t\t\t\tdata.thetaSegments,\n\t\t\t\t\t\t\tdata.phiSegments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusGeometry':\n\t\t\t\t\tcase 'TorusBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.arc\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusKnotGeometry':\n\t\t\t\t\tcase 'TorusKnotBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.p,\n\t\t\t\t\t\t\tdata.q\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TubeGeometry':\n\t\t\t\t\tcase 'TubeBufferGeometry':\n\n\t\t\t\t\t\t// This only works for built-in curves (e.g. CatmullRomCurve3).\n\t\t\t\t\t\t// User defined curves or instances of CurvePath will not be deserialized.\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tnew Curves[ data.path.type ]().fromJSON( data.path ),\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.closed\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LatheGeometry':\n\t\t\t\t\tcase 'LatheBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.points,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PolyhedronGeometry':\n\t\t\t\t\tcase 'PolyhedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.vertices,\n\t\t\t\t\t\t\tdata.indices,\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.details\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ShapeGeometry':\n\t\t\t\t\tcase 'ShapeBufferGeometry':\n\n\t\t\t\t\t\tgeometryShapes = [];\n\n\t\t\t\t\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.curveSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\tcase 'ExtrudeGeometry':\n\t\t\t\t\tcase 'ExtrudeBufferGeometry':\n\n\t\t\t\t\t\tgeometryShapes = [];\n\n\t\t\t\t\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst extrudePath = data.options.extrudePath;\n\n\t\t\t\t\t\tif ( extrudePath !== undefined ) {\n\n\t\t\t\t\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.options\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BufferGeometry':\n\t\t\t\t\tcase 'InstancedBufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Geometry':\n\n\t\t\t\t\t\tconsole.error( 'THREE.ObjectLoader: Loading \"Geometry\" is not supported anymore.' );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Unsupported geometry type \"' + data.type + '\"' );\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\tif ( geometry.isBufferGeometry === true && data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t}\n\n\tparseMaterials( json, textures ) {\n\n\t\tconst cache = {}; // MultiMaterial\n\t\tconst materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.type === 'MultiMaterial' ) {\n\n\t\t\t\t\t// Deprecated\n\n\t\t\t\t\tconst array = [];\n\n\t\t\t\t\tfor ( let j = 0; j < data.materials.length; j ++ ) {\n\n\t\t\t\t\t\tconst material = data.materials[ j ];\n\n\t\t\t\t\t\tif ( cache[ material.uuid ] === undefined ) {\n\n\t\t\t\t\t\t\tcache[ material.uuid ] = loader.parse( material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tarray.push( cache[ material.uuid ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = array;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( cache[ data.uuid ] === undefined ) {\n\n\t\t\t\t\t\tcache[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = cache[ data.uuid ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\tparseAnimations( json ) {\n\n\t\tconst animations = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tconst clip = AnimationClip.parse( data );\n\n\t\t\t\tanimations[ clip.uuid ] = clip;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n\tparseImages( json, onLoad ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn loadImage( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tconst manager = new LoadingManager( onLoad );\n\n\t\t\tloader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\timages[ image.uuid ] = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = deserializeImage( image.url );\n\n\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\timages[ image.uuid ] = deserializedImage;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tparseTextures( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tconst textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tlet texture;\n\t\t\t\tconst image = images[ data.image ];\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture( image );\n\n\t\t\t\t\tif ( image.length === 6 ) texture.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( image && image.data ) {\n\n\t\t\t\t\t\ttexture = new DataTexture( image.data, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture = new Texture( image );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( image ) texture.needsUpdate = true; // textures can have undefined image data\n\n\t\t\t\t}\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\t\t\t\tif ( data.type !== undefined ) texture.type = data.type;\n\t\t\t\tif ( data.encoding !== undefined ) texture.encoding = data.encoding;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\tif ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;\n\t\t\t\tif ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t}\n\n\tparseObject( data, geometries, materials, animations ) {\n\n\t\tlet object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tlet geometry, material;\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LightProbe':\n\n\t\t\t\tobject = new LightProbe().fromJSON( data );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t \tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\tif ( data.bindMode !== undefined ) object.bindMode = data.bindMode;\n\t\t\t\tif ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix );\n\t\t\t\tif ( data.skeleton !== undefined ) object.skeleton = data.skeleton;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'InstancedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\t\t\t\tconst count = data.count;\n\t\t\t\tconst instanceMatrix = data.instanceMatrix;\n\t\t\t\tconst instanceColor = data.instanceColor;\n\n\t\t\t\tobject = new InstancedMesh( geometry, material, count );\n\t\t\t\tobject.instanceMatrix = new BufferAttribute( new Float32Array( instanceMatrix.array ), 16 );\n\t\t\t\tif ( instanceColor !== undefined ) object.instanceColor = new BufferAttribute( new Float32Array( instanceColor.array ), instanceColor.itemSize );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Bone':\n\n\t\t\t\tobject = new Bone();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials, animations ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.animations !== undefined ) {\n\n\t\t\tconst objectAnimations = data.animations;\n\n\t\t\tfor ( let i = 0; i < objectAnimations.length; i ++ ) {\n\n\t\t\t\tconst uuid = objectAnimations[ i ];\n\n\t\t\t\tobject.animations.push( animations[ uuid ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tif ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate;\n\n\t\t\tconst levels = data.levels;\n\n\t\t\tfor ( let l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tconst level = levels[ l ];\n\t\t\t\tconst child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tbindSkeletons( object, skeletons ) {\n\n\t\tif ( Object.keys( skeletons ).length === 0 ) return;\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isSkinnedMesh === true && child.skeleton !== undefined ) {\n\n\t\t\t\tconst skeleton = skeletons[ child.skeleton ];\n\n\t\t\t\tif ( skeleton === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.bind( skeleton, child.bindMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/* DEPRECATED */\n\n\tsetTexturePath( value ) {\n\n\t\tconsole.warn( 'THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().' );\n\t\treturn this.setResourcePath( value );\n\n\t}\n\n}\n\nconst TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping,\n\tCubeUVRefractionMapping: CubeUVRefractionMapping\n};\n\nconst TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nconst TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipmapNearestFilter: NearestMipmapNearestFilter,\n\tNearestMipmapLinearFilter: NearestMipmapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipmapNearestFilter: LinearMipmapNearestFilter,\n\tLinearMipmapLinearFilter: LinearMipmapLinearFilter\n};\n\nclass ImageBitmapLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t\t}\n\n\t\tif ( typeof fetch === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t\t}\n\n\t\tthis.options = { premultiplyAlpha: 'none' };\n\n\t}\n\n\tsetOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst fetchOptions = {};\n\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\t\tfetchOptions.headers = this.requestHeader;\n\n\t\tfetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, Object.assign( scope.options, { colorSpaceConversion: 'none' } ) );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} );\n\n\t\tscope.manager.itemStart( url );\n\n\t}\n\n}\n\nImageBitmapLoader.prototype.isImageBitmapLoader = true;\n\nclass ShapePath {\n\n\tconstructor() {\n\n\t\tthis.type = 'ShapePath';\n\n\t\tthis.color = new Color();\n\n\t\tthis.subPaths = [];\n\t\tthis.currentPath = null;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t\treturn this;\n\n\t}\n\n\ttoShapes( isCCW, noHoles ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tconst shapes = [];\n\n\t\t\tfor ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tconst tmpPath = inSubpaths[ i ];\n\n\t\t\t\tconst tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tconst polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tlet inside = false;\n\t\t\tfor ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tlet edgeLowPt = inPolygon[ p ];\n\t\t\t\tlet edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tlet edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tlet edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tconst isClockWise = ShapeUtils.isClockWise;\n\n\t\tconst subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tlet solid, tmpPath, tmpShape;\n\t\tconst shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tlet holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tconst betterShapeHoles = [];\n\t\tconst newShapes = [];\n\t\tlet newShapeHoles = [];\n\t\tlet mainIdx = 0;\n\t\tlet tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( let i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tlet ambiguous = false;\n\t\t\tconst toChange = [];\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tconst sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tconst ho = sho[ hIdx ];\n\t\t\t\t\tlet hole_unassigned = true;\n\n\t\t\t\t\tfor ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } );\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t// console.log(\"ambiguous: \", ambiguous);\n\n\t\t\tif ( toChange.length > 0 ) {\n\n\t\t\t\t// console.log(\"to change: \", toChange);\n\t\t\t\tif ( ! ambiguous )\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet tmpHoles;\n\n\t\tfor ( let i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n}\n\nclass Font {\n\n\tconstructor( data ) {\n\n\t\tthis.type = 'Font';\n\n\t\tthis.data = data;\n\n\t}\n\n\tgenerateShapes( text, size = 100 ) {\n\n\t\tconst shapes = [];\n\t\tconst paths = createPaths( text, size, this.data );\n\n\t\tfor ( let p = 0, pl = paths.length; p < pl; p ++ ) {\n\n\t\t\tArray.prototype.push.apply( shapes, paths[ p ].toShapes() );\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n}\n\nfunction createPaths( text, size, data ) {\n\n\tconst chars = Array.from( text );\n\tconst scale = size / data.resolution;\n\tconst line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\tconst paths = [];\n\n\tlet offsetX = 0, offsetY = 0;\n\n\tfor ( let i = 0; i < chars.length; i ++ ) {\n\n\t\tconst char = chars[ i ];\n\n\t\tif ( char === '\\n' ) {\n\n\t\t\toffsetX = 0;\n\t\t\toffsetY -= line_height;\n\n\t\t} else {\n\n\t\t\tconst ret = createPath( char, scale, offsetX, offsetY, data );\n\t\t\toffsetX += ret.offsetX;\n\t\t\tpaths.push( ret.path );\n\n\t\t}\n\n\t}\n\n\treturn paths;\n\n}\n\nfunction createPath( char, scale, offsetX, offsetY, data ) {\n\n\tconst glyph = data.glyphs[ char ] || data.glyphs[ '?' ];\n\n\tif ( ! glyph ) {\n\n\t\tconsole.error( 'THREE.Font: character \"' + char + '\" does not exists in font family ' + data.familyName + '.' );\n\n\t\treturn;\n\n\t}\n\n\tconst path = new ShapePath();\n\n\tlet x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\tif ( glyph.o ) {\n\n\t\tconst outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\tfor ( let i = 0, l = outline.length; i < l; ) {\n\n\t\t\tconst action = outline[ i ++ ];\n\n\t\t\tswitch ( action ) {\n\n\t\t\t\tcase 'm': // moveTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'l': // lineTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'q': // quadraticCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'b': // bezierCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx2 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy2 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { offsetX: glyph.ha * scale, path: path };\n\n}\n\nFont.prototype.isFont = true;\n\nclass FontLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet json;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tconsole.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' );\n\t\t\t\tjson = JSON.parse( text.substring( 65, text.length - 2 ) );\n\n\t\t\t}\n\n\t\t\tconst font = scope.parse( json );\n\n\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\treturn new Font( json );\n\n\t}\n\n}\n\nlet _context;\n\nconst AudioContext = {\n\n\tgetContext: function () {\n\n\t\tif ( _context === undefined ) {\n\n\t\t\t_context = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn _context;\n\n\t},\n\n\tsetContext: function ( value ) {\n\n\t\t_context = value;\n\n\t}\n\n};\n\nclass AudioLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\t\tconst bufferCopy = buffer.slice( 0 );\n\n\t\t\t\tconst context = AudioContext.getContext();\n\t\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t\t} );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n}\n\nclass HemisphereLightProbe extends LightProbe {\n\n\tconstructor( skyColor, groundColor, intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tconst color1 = new Color().set( skyColor );\n\t\tconst color2 = new Color().set( groundColor );\n\n\t\tconst sky = new Vector3( color1.r, color1.g, color1.b );\n\t\tconst ground = new Vector3( color2.r, color2.g, color2.b );\n\n\t\t// without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI );\n\t\tconst c0 = Math.sqrt( Math.PI );\n\t\tconst c1 = c0 * Math.sqrt( 0.75 );\n\n\t\tthis.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 );\n\t\tthis.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 );\n\n\t}\n\n}\n\nHemisphereLightProbe.prototype.isHemisphereLightProbe = true;\n\nclass AmbientLightProbe extends LightProbe {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tconst color1 = new Color().set( color );\n\n\t\t// without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI );\n\t\tthis.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) );\n\n\t}\n\n}\n\nAmbientLightProbe.prototype.isAmbientLightProbe = true;\n\nconst _eyeRight = /*@__PURE__*/ new Matrix4();\nconst _eyeLeft = /*@__PURE__*/ new Matrix4();\n\nclass StereoCamera {\n\n\tconstructor() {\n\n\t\tthis.type = 'StereoCamera';\n\n\t\tthis.aspect = 1;\n\n\t\tthis.eyeSep = 0.064;\n\n\t\tthis.cameraL = new PerspectiveCamera();\n\t\tthis.cameraL.layers.enable( 1 );\n\t\tthis.cameraL.matrixAutoUpdate = false;\n\n\t\tthis.cameraR = new PerspectiveCamera();\n\t\tthis.cameraR.layers.enable( 2 );\n\t\tthis.cameraR.matrixAutoUpdate = false;\n\n\t\tthis._cache = {\n\t\t\tfocus: null,\n\t\t\tfov: null,\n\t\t\taspect: null,\n\t\t\tnear: null,\n\t\t\tfar: null,\n\t\t\tzoom: null,\n\t\t\teyeSep: null\n\t\t};\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst cache = this._cache;\n\n\t\tconst needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov ||\n\t\t\tcache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near ||\n\t\t\tcache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tcache.focus = camera.focus;\n\t\t\tcache.fov = camera.fov;\n\t\t\tcache.aspect = camera.aspect * this.aspect;\n\t\t\tcache.near = camera.near;\n\t\t\tcache.far = camera.far;\n\t\t\tcache.zoom = camera.zoom;\n\t\t\tcache.eyeSep = this.eyeSep;\n\n\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\tconst projectionMatrix = camera.projectionMatrix.clone();\n\t\t\tconst eyeSepHalf = cache.eyeSep / 2;\n\t\t\tconst eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;\n\t\t\tconst ymax = ( cache.near * Math.tan( DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom;\n\t\t\tlet xmin, xmax;\n\n\t\t\t// translate xOffset\n\n\t\t\t_eyeLeft.elements[ 12 ] = - eyeSepHalf;\n\t\t\t_eyeRight.elements[ 12 ] = eyeSepHalf;\n\n\t\t\t// for left eye\n\n\t\t\txmin = - ymax * cache.aspect + eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect + eyeSepOnProjection;\n\n\t\t\tprojectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t// for right eye\n\n\t\t\txmin = - ymax * cache.aspect - eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect - eyeSepOnProjection;\n\n\t\t\tprojectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t}\n\n\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft );\n\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight );\n\n\t}\n\n}\n\nclass Clock {\n\n\tconstructor( autoStart = true ) {\n\n\t\tthis.autoStart = autoStart;\n\n\t\tthis.startTime = 0;\n\t\tthis.oldTime = 0;\n\t\tthis.elapsedTime = 0;\n\n\t\tthis.running = false;\n\n\t}\n\n\tstart() {\n\n\t\tthis.startTime = now();\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t}\n\n\tstop() {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t}\n\n\tgetElapsedTime() {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t}\n\n\tgetDelta() {\n\n\t\tlet diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tconst newTime = now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n}\n\nfunction now() {\n\n\treturn ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n}\n\nconst _position$1 = /*@__PURE__*/ new Vector3();\nconst _quaternion$1 = /*@__PURE__*/ new Quaternion();\nconst _scale$1 = /*@__PURE__*/ new Vector3();\nconst _orientation$1 = /*@__PURE__*/ new Vector3();\n\nclass AudioListener extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'AudioListener';\n\n\t\tthis.context = AudioContext.getContext();\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( this.context.destination );\n\n\t\tthis.filter = null;\n\n\t\tthis.timeDelta = 0;\n\n\t\t// private\n\n\t\tthis._clock = new Clock();\n\n\t}\n\n\tgetInput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tremoveFilter() {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.filter;\n\n\t}\n\n\tsetFilter( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t\treturn this;\n\n\t}\n\n\tgetMasterVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetMasterVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tconst listener = this.context.listener;\n\t\tconst up = this.up;\n\n\t\tthis.timeDelta = this._clock.getDelta();\n\n\t\tthis.matrixWorld.decompose( _position$1, _quaternion$1, _scale$1 );\n\n\t\t_orientation$1.set( 0, 0, - 1 ).applyQuaternion( _quaternion$1 );\n\n\t\tif ( listener.positionX ) {\n\n\t\t\t// code path for Chrome (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.timeDelta;\n\n\t\t\tlistener.positionX.linearRampToValueAtTime( _position$1.x, endTime );\n\t\t\tlistener.positionY.linearRampToValueAtTime( _position$1.y, endTime );\n\t\t\tlistener.positionZ.linearRampToValueAtTime( _position$1.z, endTime );\n\t\t\tlistener.forwardX.linearRampToValueAtTime( _orientation$1.x, endTime );\n\t\t\tlistener.forwardY.linearRampToValueAtTime( _orientation$1.y, endTime );\n\t\t\tlistener.forwardZ.linearRampToValueAtTime( _orientation$1.z, endTime );\n\t\t\tlistener.upX.linearRampToValueAtTime( up.x, endTime );\n\t\t\tlistener.upY.linearRampToValueAtTime( up.y, endTime );\n\t\t\tlistener.upZ.linearRampToValueAtTime( up.z, endTime );\n\n\t\t} else {\n\n\t\t\tlistener.setPosition( _position$1.x, _position$1.y, _position$1.z );\n\t\t\tlistener.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass Audio extends Object3D {\n\n\tconstructor( listener ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Audio';\n\n\t\tthis.listener = listener;\n\t\tthis.context = listener.context;\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( listener.getInput() );\n\n\t\tthis.autoplay = false;\n\n\t\tthis.buffer = null;\n\t\tthis.detune = 0;\n\t\tthis.loop = false;\n\t\tthis.loopStart = 0;\n\t\tthis.loopEnd = 0;\n\t\tthis.offset = 0;\n\t\tthis.duration = undefined;\n\t\tthis.playbackRate = 1;\n\t\tthis.isPlaying = false;\n\t\tthis.hasPlaybackControl = true;\n\t\tthis.source = null;\n\t\tthis.sourceType = 'empty';\n\n\t\tthis._startedAt = 0;\n\t\tthis._progress = 0;\n\t\tthis._connected = false;\n\n\t\tthis.filters = [];\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tsetNodeSource( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaElementSource( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaStreamSource( mediaStream ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaStreamNode';\n\t\tthis.source = this.context.createMediaStreamSource( mediaStream );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetBuffer( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t}\n\n\tplay( delay = 0 ) {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._startedAt = this.context.currentTime + delay;\n\n\t\tconst source = this.context.createBufferSource();\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.loopStart = this.loopStart;\n\t\tsource.loopEnd = this.loopEnd;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.start( this._startedAt, this._progress + this.offset, this.duration );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\tthis.setDetune( this.detune );\n\t\tthis.setPlaybackRate( this.playbackRate );\n\n\t\treturn this.connect();\n\n\t}\n\n\tpause() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\t// update current progress\n\n\t\t\tthis._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate;\n\n\t\t\tif ( this.loop === true ) {\n\n\t\t\t\t// ensure _progress does not exceed duration with looped audios\n\n\t\t\t\tthis._progress = this._progress % ( this.duration || this.buffer.duration );\n\n\t\t\t}\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._progress = 0;\n\n\t\tthis.source.stop();\n\t\tthis.source.onended = null;\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t}\n\n\tconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = true;\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = false;\n\n\t\treturn this;\n\n\t}\n\n\tgetFilters() {\n\n\t\treturn this.filters;\n\n\t}\n\n\tsetFilters( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this._connected === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value.slice();\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetDetune( value ) {\n\n\t\tthis.detune = value;\n\n\t\tif ( this.source.detune === undefined ) return; // only set detune when available\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetDetune() {\n\n\t\treturn this.detune;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t}\n\n\tsetFilter( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t}\n\n\tsetPlaybackRate( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetPlaybackRate() {\n\n\t\treturn this.playbackRate;\n\n\t}\n\n\tonEnded() {\n\n\t\tthis.isPlaying = false;\n\n\t}\n\n\tgetLoop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t}\n\n\tsetLoop( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopStart( value ) {\n\n\t\tthis.loopStart = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopEnd( value ) {\n\n\t\tthis.loopEnd = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _position = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\nconst _scale = /*@__PURE__*/ new Vector3();\nconst _orientation = /*@__PURE__*/ new Vector3();\n\nclass PositionalAudio extends Audio {\n\n\tconstructor( listener ) {\n\n\t\tsuper( listener );\n\n\t\tthis.panner = this.context.createPanner();\n\t\tthis.panner.panningModel = 'HRTF';\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.panner;\n\n\t}\n\n\tgetRefDistance() {\n\n\t\treturn this.panner.refDistance;\n\n\t}\n\n\tsetRefDistance( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetRolloffFactor() {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t}\n\n\tsetRolloffFactor( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetDistanceModel() {\n\n\t\treturn this.panner.distanceModel;\n\n\t}\n\n\tsetDistanceModel( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxDistance() {\n\n\t\treturn this.panner.maxDistance;\n\n\t}\n\n\tsetMaxDistance( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.hasPlaybackControl === true && this.isPlaying === false ) return;\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion, _scale );\n\n\t\t_orientation.set( 0, 0, 1 ).applyQuaternion( _quaternion );\n\n\t\tconst panner = this.panner;\n\n\t\tif ( panner.positionX ) {\n\n\t\t\t// code path for Chrome and Firefox (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.listener.timeDelta;\n\n\t\t\tpanner.positionX.linearRampToValueAtTime( _position.x, endTime );\n\t\t\tpanner.positionY.linearRampToValueAtTime( _position.y, endTime );\n\t\t\tpanner.positionZ.linearRampToValueAtTime( _position.z, endTime );\n\t\t\tpanner.orientationX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\tpanner.orientationY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\tpanner.orientationZ.linearRampToValueAtTime( _orientation.z, endTime );\n\n\t\t} else {\n\n\t\t\tpanner.setPosition( _position.x, _position.y, _position.z );\n\t\t\tpanner.setOrientation( _orientation.x, _orientation.y, _orientation.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass AudioAnalyser {\n\n\tconstructor( audio, fftSize = 2048 ) {\n\n\t\tthis.analyser = audio.context.createAnalyser();\n\t\tthis.analyser.fftSize = fftSize;\n\n\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\taudio.getOutput().connect( this.analyser );\n\n\t}\n\n\n\tgetFrequencyData() {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t}\n\n\tgetAverageFrequency() {\n\n\t\tlet value = 0;\n\t\tconst data = this.getFrequencyData();\n\n\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n}\n\nclass PropertyMixer {\n\n\tconstructor( binding, typeName, valueSize ) {\n\n\t\tthis.binding = binding;\n\t\tthis.valueSize = valueSize;\n\n\t\tlet mixFunction,\n\t\t\tmixFunctionAdditive,\n\t\t\tsetIdentity;\n\n\t\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t\t//\n\t\t// interpolators can use .buffer as their .result\n\t\t// the data then goes to 'incoming'\n\t\t//\n\t\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t\t// the cumulative result and are compared to detect\n\t\t// changes\n\t\t//\n\t\t// 'orig' stores the original state of the property\n\t\t//\n\t\t// 'add' is used for additive cumulative results\n\t\t//\n\t\t// 'work' is optional and is only present for quaternion types. It is used\n\t\t// to store intermediate quaternion multiplication results\n\n\t\tswitch ( typeName ) {\n\n\t\t\tcase 'quaternion':\n\t\t\t\tmixFunction = this._slerp;\n\t\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\t\tthis._workIndex = 5;\n\t\t\t\tbreak;\n\n\t\t\tcase 'string':\n\t\t\tcase 'bool':\n\t\t\t\tmixFunction = this._select;\n\n\t\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t\t// additive is not relevant for non-numeric types\n\t\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tmixFunction = this._lerp;\n\t\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t\t}\n\n\t\tthis._mixBufferRegion = mixFunction;\n\t\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\t\tthis._setIdentity = setIdentity;\n\t\tthis._origIndex = 3;\n\t\tthis._addIndex = 4;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tthis.useCount = 0;\n\t\tthis.referenceCount = 0;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'accu'\n\taccumulate( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride;\n\n\t\tlet currentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tconst mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'add'\n\taccumulateAdditive( weight ) {\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = stride * this._addIndex;\n\n\t\tif ( this.cumulativeWeightAdditive === 0 ) {\n\n\t\t\t// add = identity\n\n\t\t\tthis._setIdentity();\n\n\t\t}\n\n\t\t// add := add + incoming * weight\n\n\t\tthis._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );\n\t\tthis.cumulativeWeightAdditive += weight;\n\n\t}\n\n\t// apply the state of 'accu' to the binding when accus differ\n\tapply( accuIndex ) {\n\n\t\tconst stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tconst originalValueOffset = stride * this._origIndex;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tif ( weightAdditive > 0 ) {\n\n\t\t\t// accuN := accuN + additive accuN\n\n\t\t\tthis._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );\n\n\t\t}\n\n\t\tfor ( let i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState() {\n\n\t\tconst binding = this.binding;\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * this._origIndex;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\t// Add to identity for additive\n\t\tthis._setIdentity();\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t}\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState() {\n\n\t\tconst originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t}\n\n\t_setAdditiveIdentityNumeric() {\n\n\t\tconst startIndex = this._addIndex * this.valueSize;\n\t\tconst endIndex = startIndex + this.valueSize;\n\n\t\tfor ( let i = startIndex; i < endIndex; i ++ ) {\n\n\t\t\tthis.buffer[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\t_setAdditiveIdentityQuaternion() {\n\n\t\tthis._setAdditiveIdentityNumeric();\n\t\tthis.buffer[ this._addIndex * this.valueSize + 3 ] = 1;\n\n\t}\n\n\t_setAdditiveIdentityOther() {\n\n\t\tconst startIndex = this._origIndex * this.valueSize;\n\t\tconst targetIndex = this._addIndex * this.valueSize;\n\n\t\tfor ( let i = 0; i < this.valueSize; i ++ ) {\n\n\t\t\tthis.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];\n\n\t\t}\n\n\t}\n\n\n\t// mix functions\n\n\t_select( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_slerp( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t}\n\n\t_slerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst workOffset = this._workIndex * stride;\n\n\t\t// Store result in intermediate buffer offset\n\t\tQuaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );\n\n\t\t// Slerp to the intermediate result\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );\n\n\t}\n\n\t_lerp( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst s = 1 - t;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n\t_lerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n}\n\n// Characters [].:/ are reserved for track binding syntax.\nconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\nconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n// only latin characters, and the unicode \\p{L} is not yet supported. So\n// instead, we exclude reserved characters and match everything else.\nconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\nconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n// Parent directories, delimited by '/' or ':'. Currently unused, but must\n// be matched to parse the rest of the track name.\nconst _directoryRe = /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\nconst _nodeRe = /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n// Object on target node, and accessor. May not contain reserved\n// characters. Accessor may contain any character except closing bracket.\nconst _objectRe = /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n// Property and accessor. May not contain reserved characters. Accessor may\n// contain any non-bracket characters.\nconst _propertyRe = /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\nconst _trackRe = new RegExp( ''\n\t+ '^'\n\t+ _directoryRe\n\t+ _nodeRe\n\t+ _objectRe\n\t+ _propertyRe\n\t+ '$'\n);\n\nconst _supportedObjectNames = [ 'material', 'materials', 'bones' ];\n\nclass Composite {\n\n\tconstructor( targetGroup, path, optionalParsedPath ) {\n\n\t\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis._targetGroup = targetGroup;\n\t\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n\t}\n\n\tgetValue( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tconst firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t}\n\n\tsetValue( array, offset ) {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t}\n\n\tbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n}\n\n// Note: This class uses a State pattern on a per-method basis:\n// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n// prototype version of these methods with one that represents\n// the bound state. When the property is not found, the methods\n// become no-ops.\nclass PropertyBinding {\n\n\tconstructor( rootNode, path, parsedPath ) {\n\n\t\tthis.path = path;\n\t\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode;\n\n\t\tthis.rootNode = rootNode;\n\n\t\t// initial state of these methods that calls 'bind'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n\n\tstatic create( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tstatic sanitizeNodeName( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t}\n\n\tstatic parseTrackName( trackName ) {\n\n\t\tconst matches = _trackRe.exec( trackName );\n\n\t\tif ( ! matches ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t}\n\n\t\tconst results = {\n\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\tnodeName: matches[ 2 ],\n\t\t\tobjectName: matches[ 3 ],\n\t\t\tobjectIndex: matches[ 4 ],\n\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\tpropertyIndex: matches[ 6 ]\n\t\t};\n\n\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t// include '.' characters).\n\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\tresults.objectName = objectName;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t}\n\n\t\treturn results;\n\n\t}\n\n\tstatic findNode( root, nodeName ) {\n\n\t\tif ( ! nodeName || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tconst bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tconst childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tconst subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable() {}\n\t_setValue_unavailable() {}\n\n\t// Getters\n\n\t_getValue_direct( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.node[ this.propertyName ];\n\n\t}\n\n\t_getValue_array( buffer, offset ) {\n\n\t\tconst source = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t}\n\n\t}\n\n\t_getValue_arrayElement( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t}\n\n\t_getValue_toArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t}\n\n\t// Direct\n\n\t_setValue_direct( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// EntireArray\n\n\t_setValue_array( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t}\n\n\t_setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// ArrayElement\n\n\t_setValue_arrayElement( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// HasToFromArray\n\n\t_setValue_fromArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t}\n\n\t_setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t_getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t}\n\n\t_setValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t}\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind() {\n\n\t\tlet targetObject = this.node;\n\t\tconst parsedPath = this.parsedPath;\n\n\t\tconst objectName = parsedPath.objectName;\n\t\tconst propertyName = parsedPath.propertyName;\n\t\tlet propertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode;\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\\'t found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tlet objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( let i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tconst nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tlet versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tlet bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === 'morphTargetInfluences' ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.geometry.isBufferGeometry ) {\n\n\t\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t}\n\n\tunbind() {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n}\n\nPropertyBinding.Composite = Composite;\n\nPropertyBinding.prototype.BindingType = {\n\tDirect: 0,\n\tEntireArray: 1,\n\tArrayElement: 2,\n\tHasFromToArray: 3\n};\n\nPropertyBinding.prototype.Versioning = {\n\tNone: 0,\n\tNeedsUpdate: 1,\n\tMatrixWorldNeedsUpdate: 2\n};\n\nPropertyBinding.prototype.GetterByBindingType = [\n\n\tPropertyBinding.prototype._getValue_direct,\n\tPropertyBinding.prototype._getValue_array,\n\tPropertyBinding.prototype._getValue_arrayElement,\n\tPropertyBinding.prototype._getValue_toArray,\n\n];\n\nPropertyBinding.prototype.SetterByBindingTypeAndVersioning = [\n\n\t[\n\t\t// Direct\n\t\tPropertyBinding.prototype._setValue_direct,\n\t\tPropertyBinding.prototype._setValue_direct_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// EntireArray\n\n\t\tPropertyBinding.prototype._setValue_array,\n\t\tPropertyBinding.prototype._setValue_array_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// ArrayElement\n\t\tPropertyBinding.prototype._setValue_arrayElement,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// HasToFromArray\n\t\tPropertyBinding.prototype._setValue_fromArray,\n\t\tPropertyBinding.prototype._setValue_fromArray_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate,\n\n\t]\n\n];\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * - Add objects you would otherwise pass as 'root' to the\n * constructor or the .clipAction method of AnimationMixer.\n *\n * - Instead pass this object as 'root'.\n *\n * - You can also add and remove objects later when the mixer\n * is running.\n *\n * Note:\n *\n * Objects of this class appear as one object to the mixer,\n * so cache control of the individual objects must be done\n * on the group.\n *\n * Limitation:\n *\n * - The animated properties must be compatible among the\n * all objects in the group.\n *\n * - A single property can either be controlled through a\n * target group or directly, but not both.\n */\n\nclass AnimationObjectGroup {\n\n\tconstructor() {\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// cached objects followed by the active ones\n\t\tthis._objects = Array.prototype.slice.call( arguments );\n\n\t\tthis.nCachedObjects_ = 0; // threshold\n\t\t// note: read by PropertyBinding.Composite\n\n\t\tconst indices = {};\n\t\tthis._indicesByUUID = indices; // for bookkeeping\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t\t}\n\n\t\tthis._paths = []; // inside: string\n\t\tthis._parsedPaths = []; // inside: { we don't care, here }\n\t\tthis._bindings = []; // inside: Array< PropertyBinding >\n\t\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tobjects: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._objects.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tget bindingsPerObject() {\n\n\t\t\t\treturn scope._bindings.length;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tadd() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet knownObject = undefined,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid;\n\t\t\tlet index = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ];\n\n\t\t\t\t\tlet binding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\tremove() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tconst lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// remove & forget\n\tuncache() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_,\n\t\t\tnObjects = objects.length;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tconst lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath;\n\t\tlet index = indicesByPath[ path ];\n\t\tconst bindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tconst paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tconst object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t}\n\n\tunsubscribe_( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n}\n\nAnimationObjectGroup.prototype.isAnimationObjectGroup = true;\n\nclass AnimationAction {\n\n\tconstructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot;\n\t\tthis.blendMode = blendMode;\n\n\t\tconst tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tconst interpolantSettings = {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst interpolant = tracks[ i ].createInterpolant( null );\n\t\t\tinterpolants[ i ] = interpolant;\n\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t}\n\n\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\tthis._interpolants = interpolants; // bound by the mixer\n\n\t\t// inside: PropertyMixer (managed by the mixer)\n\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\tthis._cacheIndex = null; // for the memory manager\n\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\tthis._timeScaleInterpolant = null;\n\t\tthis._weightInterpolant = null;\n\n\t\tthis.loop = LoopRepeat;\n\t\tthis._loopCount = - 1;\n\n\t\t// global mixer time when the action is to be started\n\t\t// it's set back to 'null' upon start of the action\n\t\tthis._startTime = null;\n\n\t\t// scaled local time of the action\n\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1;\n\t\tthis._effectiveTimeScale = 1;\n\n\t\tthis.weight = 1;\n\t\tthis._effectiveWeight = 1;\n\n\t\tthis.repetitions = Infinity; // no. of repetitions when looping\n\n\t\tthis.paused = false; // true -> zero effective time scale\n\t\tthis.enabled = true; // false -> zero effective weight\n\n\t\tthis.clampWhenFinished = false;// keep feeding the last frame?\n\n\t\tthis.zeroSlopeAtStart = true;// for smooth interpolation w/o separate\n\t\tthis.zeroSlopeAtEnd = true;// clips for start, loop and end\n\n\t}\n\n\t// State & Scheduling\n\n\tplay() {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t}\n\n\treset() {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0; // restart clip\n\t\tthis._loopCount = - 1;// forget previous loops\n\t\tthis._startTime = null;// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t}\n\n\tisRunning() {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t}\n\n\t// return true when play has been called\n\tisScheduled() {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t}\n\n\tstartAt( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoop( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t}\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t}\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight() {\n\n\t\treturn this._effectiveWeight;\n\n\t}\n\n\tfadeIn( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t}\n\n\tfadeOut( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t}\n\n\tcrossFadeFrom( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tconst fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcrossFadeTo( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t}\n\n\tstopFading() {\n\n\t\tconst weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale() {\n\n\t\treturn this._effectiveTimeScale;\n\n\t}\n\n\tsetDuration( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\tsyncWith( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\thalt( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t}\n\n\twarp( startTimeScale, endTimeScale, duration ) {\n\n\t\tconst mixer = this._mixer,\n\t\t\tnow = mixer.time,\n\t\t\ttimeScale = this.timeScale;\n\n\t\tlet interpolant = this._timeScaleInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t}\n\n\tstopWarping() {\n\n\t\tconst timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Object Accessors\n\n\tgetMixer() {\n\n\t\treturn this._mixer;\n\n\t}\n\n\tgetClip() {\n\n\t\treturn this._clip;\n\n\t}\n\n\tgetRoot() {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t}\n\n\t// Interna\n\n\t_update( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tconst timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\treturn; // yet to come / don't decide when delta = 0\n\n\t\t\t}\n\n\t\t\t// start\n\n\t\t\tthis._startTime = null; // unschedule\n\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tconst clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tconst weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tconst interpolants = this._interpolants;\n\t\t\tconst propertyMixers = this._propertyBindings;\n\n\t\t\tswitch ( this.blendMode ) {\n\n\t\t\t\tcase AdditiveAnimationBlendMode:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulateAdditive( weight );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase NormalAnimationBlendMode:\n\t\t\t\tdefault:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_updateWeight( time ) {\n\n\t\tlet weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tconst interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t}\n\n\t_updateTimeScale( time ) {\n\n\t\tlet timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tconst interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t}\n\n\t_updateTime( deltaTime ) {\n\n\t\tconst duration = this._clip.duration;\n\t\tconst loop = this.loop;\n\n\t\tlet time = this.time + deltaTime;\n\t\tlet loopCount = this._loopCount;\n\n\t\tconst pingPong = ( loop === LoopPingPong );\n\n\t\tif ( deltaTime === 0 ) {\n\n\t\t\tif ( loopCount === - 1 ) return time;\n\n\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t}\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tbreak handle_stop;\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis.time = time;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tconst loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tconst pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tconst atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.time = time;\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\t_setEndings( atStart, atEnd, pingPong ) {\n\n\t\tconst settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart = ZeroSlopeEnding;\n\t\t\tsettings.endingEnd = ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_scheduleFading( duration, weightNow, weightThen ) {\n\n\t\tconst mixer = this._mixer, now = mixer.time;\n\t\tlet interpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\n\t\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AnimationMixer extends EventDispatcher {\n\n\tconstructor( root ) {\n\n\t\tsuper();\n\n\t\tthis._root = root;\n\t\tthis._initMemoryManager();\n\t\tthis._accuIndex = 0;\n\t\tthis.time = 0;\n\t\tthis.timeScale = 1.0;\n\n\t}\n\n\t_bindAction( action, prototypeAction ) {\n\n\t\tconst root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName;\n\n\t\tlet bindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst track = tracks[ i ],\n\t\t\t\ttrackName = track.name;\n\n\t\t\tlet binding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tconst path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t}\n\n\t_activateAction( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tconst rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t}\n\n\t_deactivateAction( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t}\n\n\t// Memory manager\n\n\t_initMemoryManager() {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t// \tactionByRoot: AnimationAction - lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction( action ) {\n\n\t\tconst index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t}\n\n\t_addInactiveAction( action, clipUuid, rootUuid ) {\n\n\t\tconst actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tlet actionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tconst knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t}\n\n\t_removeInactiveAction( action ) {\n\n\t\tconst actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tconst clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tconst actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t}\n\n\t_removeInactiveBindingsForAction( action ) {\n\n\t\tconst bindings = action._propertyBindings;\n\n\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tconst binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_lendAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions >| inactive actions ]\n\t\t// s a\n\t\t// <-swap->\n\t\t// a s\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t}\n\n\t_takeBackAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions |< inactive actions ]\n\t\t// a s\n\t\t// <-swap->\n\t\t// s a\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t}\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding( binding, rootUuid, trackName ) {\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindings = this._bindings;\n\n\t\tlet bindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t}\n\n\t_removeInactiveBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tif ( Object.keys( bindingByName ).length === 0 ) {\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t}\n\n\t_lendBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t}\n\n\t_takeBackBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t}\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant() {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++;\n\n\t\tlet interpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, this._controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t}\n\n\t_takeBackControlInterpolant( interpolant ) {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t}\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction( clip, optionalRoot, blendMode ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid;\n\n\t\tlet clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip;\n\n\t\tconst clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\n\t\tconst actionsForClip = this._actionsByClip[ clipUuid ];\n\t\tlet prototypeAction = null;\n\n\t\tif ( blendMode === undefined ) {\n\n\t\t\tif ( clipObject !== null ) {\n\n\t\t\t\tblendMode = clipObject.blendMode;\n\n\t\t\t} else {\n\n\t\t\t\tblendMode = NormalAnimationBlendMode;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tconst existingAction = actionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined && existingAction.blendMode === blendMode ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tconst newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t}\n\n\t// get an existing action\n\texistingAction( clip, optionalRoot ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction() {\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions;\n\n\t\tfor ( let i = nActions - 1; i >= 0; -- i ) {\n\n\t\t\tactions[ i ].stop();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// advance the time and update apply the animation\n\tupdate( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( let i = 0; i !== nActions; ++ i ) {\n\n\t\t\tconst action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tconst bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( let i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Allows you to seek to a specific time in an animation.\n\tsetTime( timeInSeconds ) {\n\n\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\t\tfor ( let i = 0; i < this._actions.length; i ++ ) {\n\n\t\t\tthis._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\n\t\t}\n\n\t\treturn this.update( timeInSeconds ); // Update used to set exact time. Returns \"this\" AnimationMixer object.\n\n\t}\n\n\t// return this mixer's root target object\n\tgetRoot() {\n\n\t\treturn this._root;\n\n\t}\n\n\t// free all resources specific to a particular clip\n\tuncacheClip( clip ) {\n\n\t\tconst actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tconst actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tconst action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tconst cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t}\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot( root ) {\n\n\t\tconst rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( const clipUuid in actionsByClip ) {\n\n\t\t\tconst actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( const trackName in bindingByName ) {\n\n\t\t\t\tconst binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remove a targeted clip from the cache\n\tuncacheAction( clip, optionalRoot ) {\n\n\t\tconst action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n}\n\nAnimationMixer.prototype._controlInterpolantsResultBuffer = new Float32Array( 1 );\n\nclass Uniform {\n\n\tconstructor( value ) {\n\n\t\tif ( typeof value === 'string' ) {\n\n\t\t\tconsole.warn( 'THREE.Uniform: Type parameter is no longer needed.' );\n\t\t\tvalue = arguments[ 1 ];\n\n\t\t}\n\n\t\tthis.value = value;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t}\n\n}\n\nclass InstancedInterleavedBuffer extends InterleavedBuffer {\n\n\tconstructor( array, stride, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, stride );\n\n\t\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tconst ib = super.clone( data );\n\n\t\tib.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn ib;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tconst json = super.toJSON( data );\n\n\t\tjson.isInstancedInterleavedBuffer = true;\n\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn json;\n\n\t}\n\n}\n\nInstancedInterleavedBuffer.prototype.isInstancedInterleavedBuffer = true;\n\nclass GLBufferAttribute {\n\n\tconstructor( buffer, type, itemSize, elementSize, count ) {\n\n\t\tthis.buffer = buffer;\n\t\tthis.type = type;\n\t\tthis.itemSize = itemSize;\n\t\tthis.elementSize = elementSize;\n\t\tthis.count = count;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetBuffer( buffer ) {\n\n\t\tthis.buffer = buffer;\n\n\t\treturn this;\n\n\t}\n\n\tsetType( type, elementSize ) {\n\n\t\tthis.type = type;\n\t\tthis.elementSize = elementSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetItemSize( itemSize ) {\n\n\t\tthis.itemSize = itemSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetCount( count ) {\n\n\t\tthis.count = count;\n\n\t\treturn this;\n\n\t}\n\n}\n\nGLBufferAttribute.prototype.isGLBufferAttribute = true;\n\nclass Raycaster {\n\n\tconstructor( origin, direction, near = 0, far = Infinity ) {\n\n\t\tthis.ray = new Ray( origin, direction );\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.camera = null;\n\t\tthis.layers = new Layers();\n\n\t\tthis.params = {\n\t\t\tMesh: {},\n\t\t\tLine: { threshold: 1 },\n\t\t\tLOD: {},\n\t\t\tPoints: { threshold: 1 },\n\t\t\tSprite: {}\n\t\t};\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t}\n\n\tsetFromCamera( coords, camera ) {\n\n\t\tif ( camera && camera.isPerspectiveCamera ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\t\t\tthis.camera = camera;\n\n\t\t} else if ( camera && camera.isOrthographicCamera ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\t\t\tthis.camera = camera;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type: ' + camera.type );\n\n\t\t}\n\n\t}\n\n\tintersectObject( object, recursive = false, intersects = [] ) {\n\n\t\tintersectObject( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n\tintersectObjects( objects, recursive = false, intersects = [] ) {\n\n\t\tfor ( let i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\tif ( object.layers.test( raycaster.layers ) ) {\n\n\t\tobject.raycast( raycaster, intersects );\n\n\t}\n\n\tif ( recursive === true ) {\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up.\n * The azimuthal angle (theta) is measured from the positive z-axis.\n */\n\nclass Spherical {\n\n\tconstructor( radius = 1, phi = 0, theta = 0 ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi; // polar angle\n\t\tthis.theta = theta; // azimuthal angle\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t}\n\n\t// restrict phi to be betwee EPS and PI-EPS\n\tmakeSafe() {\n\n\t\tconst EPS = 0.000001;\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + y * y + z * z );\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( x, z );\n\t\t\tthis.phi = Math.acos( clamp( y / this.radius, - 1, 1 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n */\n\nclass Cylindrical {\n\n\tconstructor( radius = 1, theta = 0, y = 0 ) {\n\n\t\tthis.radius = radius; // distance from the origin to a point in the x-z plane\n\t\tthis.theta = theta; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\t\tthis.y = y; // height above the x-z plane\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + z * z );\n\t\tthis.theta = Math.atan2( x, z );\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$4 = /*@__PURE__*/ new Vector2();\n\nclass Box2 {\n\n\tconstructor( min = new Vector2( + Infinity, + Infinity ), max = new Vector2( - Infinity, - Infinity ) ) {\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$4.copy( size ).multiplyScalar( 0.5 );\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getCenter() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getSize() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getParameter() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ? false : true;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\tconst clampedPoint = _vector$4.copy( point ).clamp( this.min, this.max );\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nBox2.prototype.isBox2 = true;\n\nconst _startP = /*@__PURE__*/ new Vector3();\nconst _startEnd = /*@__PURE__*/ new Vector3();\n\nclass Line3 {\n\n\tconstructor( start = new Vector3(), end = new Vector3() ) {\n\n\t\tthis.start = start;\n\t\tthis.end = end;\n\n\t}\n\n\tset( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t}\n\n\tdelta( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .delta() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t}\n\n\tdistanceSq() {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t}\n\n\tdistance() {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t}\n\n\tat( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tclosestPointToPointParameter( point, clampToLine ) {\n\n\t\t_startP.subVectors( point, this.start );\n\t\t_startEnd.subVectors( this.end, this.start );\n\n\t\tconst startEnd2 = _startEnd.dot( _startEnd );\n\t\tconst startEnd_startP = _startEnd.dot( _startP );\n\n\t\tlet t = startEnd_startP / startEnd2;\n\n\t\tif ( clampToLine ) {\n\n\t\t\tt = clamp( t, 0, 1 );\n\n\t\t}\n\n\t\treturn t;\n\n\t}\n\n\tclosestPointToPoint( point, clampToLine, target ) {\n\n\t\tconst t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t}\n\n\tequals( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass ImmediateRenderObject extends Object3D {\n\n\tconstructor( material ) {\n\n\t\tsuper();\n\n\t\tthis.material = material;\n\t\tthis.render = function ( /* renderCallback */ ) {};\n\n\t\tthis.hasPositions = false;\n\t\tthis.hasNormals = false;\n\t\tthis.hasColors = false;\n\t\tthis.hasUvs = false;\n\n\t\tthis.positionArray = null;\n\t\tthis.normalArray = null;\n\t\tthis.colorArray = null;\n\t\tthis.uvArray = null;\n\n\t\tthis.count = 0;\n\n\t}\n\n}\n\nImmediateRenderObject.prototype.isImmediateRenderObject = true;\n\nconst _vector$3 = /*@__PURE__*/ new Vector3();\n\nclass SpotLightHelper extends Object3D {\n\n\tconstructor( light, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst positions = [\n\t\t\t0, 0, 0, \t0, 0, 1,\n\t\t\t0, 0, 0, \t1, 0, 1,\n\t\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t\t0, 0, 0, \t0, 1, 1,\n\t\t\t0, 0, 0, \t0, - 1, 1\n\t\t];\n\n\t\tfor ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\tconst p1 = ( i / l ) * Math.PI * 2;\n\t\t\tconst p2 = ( j / l ) * Math.PI * 2;\n\n\t\t\tpositions.push(\n\t\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t\t);\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.cone = new LineSegments( geometry, material );\n\t\tthis.add( this.cone );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateMatrixWorld();\n\n\t\tconst coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tconst coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t_vector$3.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( _vector$3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t}\n\n}\n\nconst _vector$2 = /*@__PURE__*/ new Vector3();\nconst _boneMatrix = /*@__PURE__*/ new Matrix4();\nconst _matrixWorldInv = /*@__PURE__*/ new Matrix4();\n\n\nclass SkeletonHelper extends LineSegments {\n\n\tconstructor( object ) {\n\n\t\tconst bones = getBoneList( object );\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = new Color( 0, 0, 1 );\n\t\tconst color2 = new Color( 0, 1, 0 );\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'SkeletonHelper';\n\t\tthis.isSkeletonHelper = true;\n\n\t\tthis.root = object;\n\t\tthis.bones = bones;\n\n\t\tthis.matrix = object.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst bones = this.bones;\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t_matrixWorldInv.copy( this.root.matrixWorld ).invert();\n\n\t\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\n\nfunction getBoneList( object ) {\n\n\tconst boneList = [];\n\n\tif ( object && object.isBone ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( let i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nclass PointLightHelper extends Mesh {\n\n\tconstructor( light, sphereSize, color ) {\n\n\t\tconst geometry = new SphereGeometry( sphereSize, 4, 2 );\n\t\tconst material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'PointLightHelper';\n\n\t\tthis.matrix = this.light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\n\t\t/*\n\t// TODO: delete this comment?\n\tconst distanceGeometry = new THREE.IcosahedronBufferGeometry( 1, 2 );\n\tconst distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tconst d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\t/*\n\t\tconst d = this.light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.visible = true;\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\t\t*/\n\n\t}\n\n}\n\nconst _vector$1 = /*@__PURE__*/ new Vector3();\nconst _color1 = /*@__PURE__*/ new Color();\nconst _color2 = /*@__PURE__*/ new Color();\n\nclass HemisphereLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tconst geometry = new OctahedronGeometry( size );\n\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\t\tif ( this.color === undefined ) this.material.vertexColors = true;\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\t\tconst colors = new Float32Array( position.count * 3 );\n\n\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\t\tthis.add( new Mesh( geometry, this.material ) );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tconst mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tconst colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t_color1.copy( this.light.color );\n\t\t\t_color2.copy( this.light.groundColor );\n\n\t\t\tfor ( let i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tconst color = ( i < ( l / 2 ) ) ? _color1 : _color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tmesh.lookAt( _vector$1.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t}\n\n}\n\nclass GridHelper extends LineSegments {\n\n\tconstructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst center = divisions / 2;\n\t\tconst step = size / divisions;\n\t\tconst halfSize = size / 2;\n\n\t\tconst vertices = [], colors = [];\n\n\t\tfor ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\t\tconst color = i === center ? color1 : color2;\n\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'GridHelper';\n\n\t}\n\n}\n\nclass PolarGridHelper extends LineSegments {\n\n\tconstructor( radius = 10, radials = 16, circles = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\t// create the radials\n\n\t\tfor ( let i = 0; i <= radials; i ++ ) {\n\n\t\t\tconst v = ( i / radials ) * ( Math.PI * 2 );\n\n\t\t\tconst x = Math.sin( v ) * radius;\n\t\t\tconst z = Math.cos( v ) * radius;\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tvertices.push( x, 0, z );\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tcolors.push( color.r, color.g, color.b );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t}\n\n\t\t// create the circles\n\n\t\tfor ( let i = 0; i <= circles; i ++ ) {\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tconst r = radius - ( radius / circles * i );\n\n\t\t\tfor ( let j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t// first vertex\n\n\t\t\t\tlet v = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tlet x = Math.sin( v ) * r;\n\t\t\t\tlet z = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t// second vertex\n\n\t\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'PolarGridHelper';\n\n\t}\n\n}\n\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\nconst _v3 = /*@__PURE__*/ new Vector3();\n\nclass DirectionalLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tif ( size === undefined ) size = 1;\n\n\t\tlet geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [\n\t\t\t- size, size, 0,\n\t\t\tsize, size, 0,\n\t\t\tsize, - size, 0,\n\t\t\t- size, - size, 0,\n\t\t\t- size, size, 0\n\t\t], 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.lightPlane = new Line( geometry, material );\n\t\tthis.add( this.lightPlane );\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\t\tthis.targetLine = new Line( geometry, material );\n\t\tthis.add( this.targetLine );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.lightPlane.geometry.dispose();\n\t\tthis.lightPlane.material.dispose();\n\t\tthis.targetLine.geometry.dispose();\n\t\tthis.targetLine.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\t_v1.setFromMatrixPosition( this.light.matrixWorld );\n\t\t_v2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t_v3.subVectors( _v2, _v1 );\n\n\t\tthis.lightPlane.lookAt( _v2 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( _v2 );\n\t\tthis.targetLine.scale.z = _v3.length();\n\n\t}\n\n}\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _camera = /*@__PURE__*/ new Camera();\n\n/**\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttp://evanw.github.com/lightgl.js/tests/shadowmap.html\n */\n\nclass CameraHelper extends LineSegments {\n\n\tconstructor( camera ) {\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst pointMap = {};\n\n\t\t// colors\n\n\t\tconst colorFrustum = new Color( 0xffaa00 );\n\t\tconst colorCone = new Color( 0xff0000 );\n\t\tconst colorUp = new Color( 0x00aaff );\n\t\tconst colorTarget = new Color( 0xffffff );\n\t\tconst colorCross = new Color( 0x333333 );\n\n\t\t// near\n\n\t\taddLine( 'n1', 'n2', colorFrustum );\n\t\taddLine( 'n2', 'n4', colorFrustum );\n\t\taddLine( 'n4', 'n3', colorFrustum );\n\t\taddLine( 'n3', 'n1', colorFrustum );\n\n\t\t// far\n\n\t\taddLine( 'f1', 'f2', colorFrustum );\n\t\taddLine( 'f2', 'f4', colorFrustum );\n\t\taddLine( 'f4', 'f3', colorFrustum );\n\t\taddLine( 'f3', 'f1', colorFrustum );\n\n\t\t// sides\n\n\t\taddLine( 'n1', 'f1', colorFrustum );\n\t\taddLine( 'n2', 'f2', colorFrustum );\n\t\taddLine( 'n3', 'f3', colorFrustum );\n\t\taddLine( 'n4', 'f4', colorFrustum );\n\n\t\t// cone\n\n\t\taddLine( 'p', 'n1', colorCone );\n\t\taddLine( 'p', 'n2', colorCone );\n\t\taddLine( 'p', 'n3', colorCone );\n\t\taddLine( 'p', 'n4', colorCone );\n\n\t\t// up\n\n\t\taddLine( 'u1', 'u2', colorUp );\n\t\taddLine( 'u2', 'u3', colorUp );\n\t\taddLine( 'u3', 'u1', colorUp );\n\n\t\t// target\n\n\t\taddLine( 'c', 't', colorTarget );\n\t\taddLine( 'p', 'c', colorCross );\n\n\t\t// cross\n\n\t\taddLine( 'cn1', 'cn2', colorCross );\n\t\taddLine( 'cn3', 'cn4', colorCross );\n\n\t\taddLine( 'cf1', 'cf2', colorCross );\n\t\taddLine( 'cf3', 'cf4', colorCross );\n\n\t\tfunction addLine( a, b, color ) {\n\n\t\t\taddPoint( a, color );\n\t\t\taddPoint( b, color );\n\n\t\t}\n\n\t\tfunction addPoint( id, color ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\t\tpointMap[ id ] = [];\n\n\t\t\t}\n\n\t\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'CameraHelper';\n\n\t\tthis.camera = camera;\n\t\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\t\tthis.matrix = camera.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.pointMap = pointMap;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst pointMap = this.pointMap;\n\n\t\tconst w = 1, h = 1;\n\n\t\t// we need just camera projection matrix inverse\n\t\t// world matrix must be identity\n\n\t\t_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 );\n\t\tsetPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 );\n\t\tsetPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 );\n\t\tsetPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 );\n\t\tsetPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 );\n\t\tsetPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 );\n\t\tsetPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 );\n\t\tsetPoint( 'f4', pointMap, geometry, _camera, w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 );\n\t\tsetPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 );\n\t\tsetPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );\n\t\tsetPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );\n\n\t\tsetPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 );\n\t\tsetPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 );\n\t\tsetPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 );\n\t\tsetPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n\nfunction setPoint( point, pointMap, geometry, camera, x, y, z ) {\n\n\t_vector.set( x, y, z ).unproject( camera );\n\n\tconst points = pointMap[ point ];\n\n\tif ( points !== undefined ) {\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tposition.setXYZ( points[ i ], _vector.x, _vector.y, _vector.z );\n\n\t\t}\n\n\t}\n\n}\n\nconst _box = /*@__PURE__*/ new Box3();\n\nclass BoxHelper extends LineSegments {\n\n\tconstructor( object, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\tconst positions = new Float32Array( 8 * 3 );\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.type = 'BoxHelper';\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\t_box.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( _box.isEmpty() ) return;\n\n\t\tconst min = _box.min;\n\t\tconst max = _box.max;\n\n\t\t/*\n\t\t\t5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tconst position = this.geometry.attributes.position;\n\t\tconst array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.object = object;\n\t\tthis.update();\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tLineSegments.prototype.copy.call( this, source );\n\n\t\tthis.object = source.object;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Box3Helper extends LineSegments {\n\n\tconstructor( box, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\t\tconst positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.box = box;\n\n\t\tthis.type = 'Box3Helper';\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst box = this.box;\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tbox.getCenter( this.position );\n\n\t\tbox.getSize( this.scale );\n\n\t\tthis.scale.multiplyScalar( 0.5 );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\nclass PlaneHelper extends Line {\n\n\tconstructor( plane, size = 1, hex = 0xffff00 ) {\n\n\t\tconst color = hex;\n\n\t\tconst positions = [ 1, - 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 ];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.computeBoundingSphere();\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.type = 'PlaneHelper';\n\n\t\tthis.plane = plane;\n\n\t\tthis.size = size;\n\n\t\tconst positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ];\n\n\t\tconst geometry2 = new BufferGeometry();\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\t\tgeometry2.computeBoundingSphere();\n\n\t\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tlet scale = - this.plane.constant;\n\n\t\tif ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter\n\n\t\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, scale );\n\n\t\tthis.children[ 0 ].material.side = ( scale < 0 ) ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here\n\n\t\tthis.lookAt( this.plane.normal );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\nconst _axis = /*@__PURE__*/ new Vector3();\nlet _lineGeometry, _coneGeometry;\n\nclass ArrowHelper extends Object3D {\n\n\t// dir is assumed to be normalized\n\n\tconstructor( dir = new Vector3( 0, 0, 1 ), origin = new Vector3( 0, 0, 0 ), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ArrowHelper';\n\n\t\tif ( _lineGeometry === undefined ) {\n\n\t\t\t_lineGeometry = new BufferGeometry();\n\t\t\t_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\t_coneGeometry = new CylinderGeometry( 0, 0.5, 1, 5, 1 );\n\t\t\t_coneGeometry.translate( 0, - 0.5, 0 );\n\n\t\t}\n\n\t\tthis.position.copy( origin );\n\n\t\tthis.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add( this.line );\n\n\t\tthis.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.cone.matrixAutoUpdate = false;\n\t\tthis.add( this.cone );\n\n\t\tthis.setDirection( dir );\n\t\tthis.setLength( length, headLength, headWidth );\n\n\t}\n\n\tsetDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\t_axis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tconst radians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( _axis, radians );\n\n\t\t}\n\n\t}\n\n\tsetLength( length, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tthis.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458\n\t\tthis.line.updateMatrix();\n\n\t\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\t\tthis.cone.position.y = length;\n\t\tthis.cone.updateMatrix();\n\n\t}\n\n\tsetColor( color ) {\n\n\t\tthis.line.material.color.set( color );\n\t\tthis.cone.material.color.set( color );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tthis.line.copy( source.line );\n\t\tthis.cone.copy( source.cone );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AxesHelper extends LineSegments {\n\n\tconstructor( size = 1 ) {\n\n\t\tconst vertices = [\n\t\t\t0, 0, 0,\tsize, 0, 0,\n\t\t\t0, 0, 0,\t0, size, 0,\n\t\t\t0, 0, 0,\t0, 0, size\n\t\t];\n\n\t\tconst colors = [\n\t\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t\t0, 0, 1,\t0, 0.6, 1\n\t\t];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'AxesHelper';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nconst _floatView = new Float32Array( 1 );\nconst _int32View = new Int32Array( _floatView.buffer );\n\nclass DataUtils {\n\n\t// Converts float32 to float16 (stored as uint16 value).\n\n\tstatic toHalfFloat( val ) {\n\n\t\t// Source: http://gamedev.stackexchange.com/questions/17326/conversion-of-a-number-from-single-precision-floating-point-representation-to-a/17410#17410\n\n\t\t/* This method is faster than the OpenEXR implementation (very often\n\t\t* used, eg. in Ogre), with the additional benefit of rounding, inspired\n\t\t* by James Tursa?s half-precision code. */\n\n\t\t_floatView[ 0 ] = val;\n\t\tconst x = _int32View[ 0 ];\n\n\t\tlet bits = ( x >> 16 ) & 0x8000; /* Get the sign */\n\t\tlet m = ( x >> 12 ) & 0x07ff; /* Keep one extra bit for rounding */\n\t\tconst e = ( x >> 23 ) & 0xff; /* Using int is faster here */\n\n\t\t/* If zero, or denormal, or exponent underflows too much for a denormal\n\t\t\t* half, return signed zero. */\n\t\tif ( e < 103 ) return bits;\n\n\t\t/* If NaN, return NaN. If Inf or exponent overflow, return Inf. */\n\t\tif ( e > 142 ) {\n\n\t\t\tbits |= 0x7c00;\n\t\t\t/* If exponent was 0xff and one mantissa bit was set, it means NaN,\n\t\t\t\t\t\t* not Inf, so make sure we set one mantissa bit too. */\n\t\t\tbits |= ( ( e == 255 ) ? 0 : 1 ) && ( x & 0x007fffff );\n\t\t\treturn bits;\n\n\t\t}\n\n\t\t/* If exponent underflows but not too much, return a denormal */\n\t\tif ( e < 113 ) {\n\n\t\t\tm |= 0x0800;\n\t\t\t/* Extra rounding may overflow and set mantissa to 0 and exponent\n\t\t\t\t* to 1, which is OK. */\n\t\t\tbits |= ( m >> ( 114 - e ) ) + ( ( m >> ( 113 - e ) ) & 1 );\n\t\t\treturn bits;\n\n\t\t}\n\n\t\tbits |= ( ( e - 112 ) << 10 ) | ( m >> 1 );\n\t\t/* Extra rounding. An overflow will set mantissa to 0 and increment\n\t\t\t* the exponent, which is OK. */\n\t\tbits += m & 1;\n\t\treturn bits;\n\n\t}\n\n}\n\nconst LOD_MIN = 4;\nconst LOD_MAX = 8;\nconst SIZE_MAX = Math.pow( 2, LOD_MAX );\n\n// The standard deviations (radians) associated with the extra mips. These are\n// chosen to approximate a Trowbridge-Reitz distribution function times the\n// geometric shadowing function. These sigma values squared must match the\n// variance #defines in cube_uv_reflection_fragment.glsl.js.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\nconst TOTAL_LODS = LOD_MAX - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\nconst MAX_SAMPLES = 20;\n\nconst ENCODINGS = {\n\t[ LinearEncoding ]: 0,\n\t[ sRGBEncoding ]: 1,\n\t[ RGBEEncoding ]: 2,\n\t[ RGBM7Encoding ]: 3,\n\t[ RGBM16Encoding ]: 4,\n\t[ RGBDEncoding ]: 5,\n\t[ GammaEncoding ]: 6\n};\n\nconst backgroundMaterial = new MeshBasicMaterial( {\n\tside: BackSide,\n\tdepthWrite: false,\n\tdepthTest: false,\n} );\nconst backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );\n\nconst _flatCamera = /*@__PURE__*/ new OrthographicCamera();\nconst { _lodPlanes, _sizeLods, _sigmas } = /*@__PURE__*/ _createPlanes();\nconst _clearColor = /*@__PURE__*/ new Color();\nlet _oldTarget = null;\n\n// Golden Ratio\nconst PHI = ( 1 + Math.sqrt( 5 ) ) / 2;\nconst INV_PHI = 1 / PHI;\n\n// Vertices of a dodecahedron (except the opposites, which represent the\n// same axis), used as axis directions evenly spread on a sphere.\nconst _axisDirections = [\n\t/*@__PURE__*/ new Vector3( 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),\n\t/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ) ];\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n *\n * Paper: Fast, Accurate Image-Based Lighting\n * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view\n*/\n\nfunction convertLinearToRGBE( color ) {\n\n\tconst maxComponent = Math.max( color.r, color.g, color.b );\n\tconst fExp = Math.min( Math.max( Math.ceil( Math.log2( maxComponent ) ), - 128.0 ), 127.0 );\n\tcolor.multiplyScalar( Math.pow( 2.0, - fExp ) );\n\n\tconst alpha = ( fExp + 128.0 ) / 255.0;\n\treturn alpha;\n\n}\n\nclass PMREMGenerator {\n\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._blurMaterial = _getBlurShader( MAX_SAMPLES );\n\t\tthis._equirectShader = null;\n\t\tthis._cubemapShader = null;\n\n\t\tthis._compileMaterial( this._blurMaterial );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t * is placed at the origin).\n\t */\n\tfromScene( scene, sigma = 0, near = 0.1, far = 100 ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * (RGBFormat) or HDR (RGBEFormat). The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromEquirectangular( equirectangular ) {\n\n\t\treturn this._fromTexture( equirectangular );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * (RGBFormat) or HDR (RGBEFormat). The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromCubemap( cubemap ) {\n\n\t\treturn this._fromTexture( cubemap );\n\n\t}\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileCubemapShader() {\n\n\t\tif ( this._cubemapShader === null ) {\n\n\t\t\tthis._cubemapShader = _getCubemapShader();\n\t\t\tthis._compileMaterial( this._cubemapShader );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileEquirectangularShader() {\n\n\t\tif ( this._equirectShader === null ) {\n\n\t\t\tthis._equirectShader = _getEquirectShader();\n\t\t\tthis._compileMaterial( this._equirectShader );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose() {\n\n\t\tthis._blurMaterial.dispose();\n\n\t\tif ( this._cubemapShader !== null ) this._cubemapShader.dispose();\n\t\tif ( this._equirectShader !== null ) this._equirectShader.dispose();\n\n\t\tfor ( let i = 0; i < _lodPlanes.length; i ++ ) {\n\n\t\t\t_lodPlanes[ i ].dispose();\n\n\t\t}\n\n\t}\n\n\t// private interface\n\n\t_cleanup( outputTarget ) {\n\n\t\tthis._pingPongRenderTarget.dispose();\n\t\tthis._renderer.setRenderTarget( _oldTarget );\n\t\toutputTarget.scissorTest = false;\n\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t}\n\n\t_fromTexture( texture ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\tconst cubeUVRenderTarget = this._allocateTargets( texture );\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_allocateTargets( texture ) { // warning: null texture is valid\n\n\t\tconst params = {\n\t\t\tmagFilter: NearestFilter,\n\t\t\tminFilter: NearestFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\ttype: UnsignedByteType,\n\t\t\tformat: RGBEFormat,\n\t\t\tencoding: _isLDR( texture ) ? texture.encoding : RGBEEncoding,\n\t\t\tdepthBuffer: false\n\t\t};\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( params );\n\t\tcubeUVRenderTarget.depthBuffer = texture ? false : true;\n\t\tthis._pingPongRenderTarget = _createRenderTarget( params );\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_compileMaterial( material ) {\n\n\t\tconst tmpMesh = new Mesh( _lodPlanes[ 0 ], material );\n\t\tthis._renderer.compile( tmpMesh, _flatCamera );\n\n\t}\n\n\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {\n\n\t\tconst fov = 90;\n\t\tconst aspect = 1;\n\t\tconst cubeCamera = new PerspectiveCamera( fov, aspect, near, far );\n\t\tconst upSign = [ 1, - 1, 1, 1, 1, 1 ];\n\t\tconst forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];\n\t\tconst renderer = this._renderer;\n\n\t\tconst originalAutoClear = renderer.autoClear;\n\t\tconst outputEncoding = renderer.outputEncoding;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\trenderer.getClearColor( _clearColor );\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.outputEncoding = LinearEncoding;\n\t\trenderer.autoClear = false;\n\n\t\tlet useSolidColor = false;\n\t\tconst background = scene.background;\n\t\tif ( background ) {\n\n\t\t\tif ( background.isColor ) {\n\n\t\t\t\tbackgroundMaterial.color.copy( background ).convertSRGBToLinear();\n\t\t\t\tscene.background = null;\n\n\t\t\t\tconst alpha = convertLinearToRGBE( backgroundMaterial.color );\n\t\t\t\tbackgroundMaterial.opacity = alpha;\n\t\t\t\tuseSolidColor = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tbackgroundMaterial.color.copy( _clearColor ).convertSRGBToLinear();\n\n\t\t\tconst alpha = convertLinearToRGBE( backgroundMaterial.color );\n\t\t\tbackgroundMaterial.opacity = alpha;\n\t\t\tuseSolidColor = true;\n\n\t\t}\n\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\t\t\tif ( col == 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( forwardSign[ i ], 0, 0 );\n\n\t\t\t} else if ( col == 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.lookAt( 0, forwardSign[ i ], 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( 0, 0, forwardSign[ i ] );\n\n\t\t\t}\n\n\t\t\t_setViewport( cubeUVRenderTarget,\n\t\t\t\tcol * SIZE_MAX, i > 2 ? SIZE_MAX : 0, SIZE_MAX, SIZE_MAX );\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\n\t\t\tif ( useSolidColor ) {\n\n\t\t\t\trenderer.render( backgroundBox, cubeCamera );\n\n\t\t\t}\n\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.outputEncoding = outputEncoding;\n\t\trenderer.autoClear = originalAutoClear;\n\n\t}\n\n\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tif ( texture.isCubeTexture ) {\n\n\t\t\tif ( this._cubemapShader == null ) {\n\n\t\t\t\tthis._cubemapShader = _getCubemapShader();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( this._equirectShader == null ) {\n\n\t\t\t\tthis._equirectShader = _getEquirectShader();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = texture.isCubeTexture ? this._cubemapShader : this._equirectShader;\n\t\tconst mesh = new Mesh( _lodPlanes[ 0 ], material );\n\n\t\tconst uniforms = material.uniforms;\n\n\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\tif ( ! texture.isCubeTexture ) {\n\n\t\t\tuniforms[ 'texelSize' ].value.set( 1.0 / texture.image.width, 1.0 / texture.image.height );\n\n\t\t}\n\n\t\tuniforms[ 'inputEncoding' ].value = ENCODINGS[ texture.encoding ];\n\t\tuniforms[ 'outputEncoding' ].value = ENCODINGS[ cubeUVRenderTarget.texture.encoding ];\n\n\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * SIZE_MAX, 2 * SIZE_MAX );\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera );\n\n\t}\n\n\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tfor ( let i = 1; i < TOTAL_LODS; i ++ ) {\n\n\t\t\tconst sigma = Math.sqrt( _sigmas[ i ] * _sigmas[ i ] - _sigmas[ i - 1 ] * _sigmas[ i - 1 ] );\n\n\t\t\tconst poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];\n\n\t\t\tthis._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t}\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t */\n\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t}\n\n\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\tconsole.error(\n\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = new Mesh( _lodPlanes[ lodOut ], blurMaterial );\n\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\tconst pixels = _sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\tconsole.warn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i == 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\tblurUniforms[ 'samples' ].value = samples;\n\t\tblurUniforms[ 'weights' ].value = weights;\n\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t}\n\n\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\tblurUniforms[ 'mipInt' ].value = LOD_MAX - lodIn;\n\t\tblurUniforms[ 'inputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ];\n\t\tblurUniforms[ 'outputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ];\n\n\t\tconst outputSize = _sizeLods[ lodOut ];\n\t\tconst x = 3 * Math.max( 0, SIZE_MAX - 2 * outputSize );\n\t\tconst y = ( lodOut === 0 ? 0 : 2 * SIZE_MAX ) + 2 * outputSize * ( lodOut > LOD_MAX - LOD_MIN ? lodOut - LOD_MAX + LOD_MIN : 0 );\n\n\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera );\n\n\t}\n\n}\n\nfunction _isLDR( texture ) {\n\n\tif ( texture === undefined || texture.type !== UnsignedByteType ) return false;\n\n\treturn texture.encoding === LinearEncoding || texture.encoding === sRGBEncoding || texture.encoding === GammaEncoding;\n\n}\n\nfunction _createPlanes() {\n\n\tconst _lodPlanes = [];\n\tconst _sizeLods = [];\n\tconst _sigmas = [];\n\n\tlet lod = LOD_MAX;\n\n\tfor ( let i = 0; i < TOTAL_LODS; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\t_sizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > LOD_MAX - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - LOD_MAX + LOD_MIN - 1 ];\n\n\t\t} else if ( i == 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\t_sigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 1 );\n\t\tconst min = - texelSize / 2;\n\t\tconst max = 1 + texelSize / 2;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : - 1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t}\n\n\t\tconst planes = new BufferGeometry();\n\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\t_lodPlanes.push( planes );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { _lodPlanes, _sizeLods, _sigmas };\n\n}\n\nfunction _createRenderTarget( params ) {\n\n\tconst cubeUVRenderTarget = new WebGLRenderTarget( 3 * SIZE_MAX, 3 * SIZE_MAX, params );\n\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _setViewport( target, x, y, width, height ) {\n\n\ttarget.viewport.set( x, y, width, height );\n\ttarget.scissor.set( x, y, width, height );\n\n}\n\nfunction _getBlurShader( maxSamples ) {\n\n\tconst weights = new Float32Array( maxSamples );\n\tconst poleAxis = new Vector3( 0, 1, 0 );\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'SphericalGaussianBlur',\n\n\t\tdefines: { 'n': maxSamples },\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'samples': { value: 1 },\n\t\t\t'weights': { value: weights },\n\t\t\t'latitudinal': { value: false },\n\t\t\t'dTheta': { value: 0 },\n\t\t\t'mipInt': { value: 0 },\n\t\t\t'poleAxis': { value: poleAxis },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getEquirectShader() {\n\n\tconst texelSize = new Vector2( 1, 1 );\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'EquirectangularToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'texelSize': { value: texelSize },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getCubemapShader() {\n\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'CubemapToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getCommonVertexShader() {\n\n\treturn /* glsl */`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`;\n\n}\n\nfunction _getEncodings() {\n\n\treturn /* glsl */`\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t`;\n\n}\n\nconst LineStrip = 0;\nconst LinePieces = 1;\nconst NoColors = 0;\nconst FaceColors = 1;\nconst VertexColors = 2;\n\nfunction MeshFaceMaterial( materials ) {\n\n\tconsole.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' );\n\treturn materials;\n\n}\n\nfunction MultiMaterial( materials = [] ) {\n\n\tconsole.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' );\n\tmaterials.isMultiMaterial = true;\n\tmaterials.materials = materials;\n\tmaterials.clone = function () {\n\n\t\treturn materials.slice();\n\n\t};\n\n\treturn materials;\n\n}\n\nfunction PointCloud( geometry, material ) {\n\n\tconsole.warn( 'THREE.PointCloud has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction Particle( material ) {\n\n\tconsole.warn( 'THREE.Particle has been renamed to THREE.Sprite.' );\n\treturn new Sprite( material );\n\n}\n\nfunction ParticleSystem( geometry, material ) {\n\n\tconsole.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction PointCloudMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleBasicMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleSystemMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction Vertex( x, y, z ) {\n\n\tconsole.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' );\n\treturn new Vector3( x, y, z );\n\n}\n\n//\n\nfunction DynamicBufferAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.' );\n\treturn new BufferAttribute( array, itemSize ).setUsage( DynamicDrawUsage );\n\n}\n\nfunction Int8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' );\n\treturn new Int8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' );\n\treturn new Uint8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8ClampedAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' );\n\treturn new Uint8ClampedBufferAttribute( array, itemSize );\n\n}\n\nfunction Int16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' );\n\treturn new Int16BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' );\n\treturn new Uint16BufferAttribute( array, itemSize );\n\n}\n\nfunction Int32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' );\n\treturn new Int32BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' );\n\treturn new Uint32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' );\n\treturn new Float32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float64Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' );\n\treturn new Float64BufferAttribute( array, itemSize );\n\n}\n\n//\n\nCurve.create = function ( construct, getPoint ) {\n\n\tconsole.log( 'THREE.Curve.create() has been deprecated' );\n\n\tconstruct.prototype = Object.create( Curve.prototype );\n\tconstruct.prototype.constructor = construct;\n\tconstruct.prototype.getPoint = getPoint;\n\n\treturn construct;\n\n};\n\n//\n\nPath.prototype.fromPoints = function ( points ) {\n\n\tconsole.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' );\n\treturn this.setFromPoints( points );\n\n};\n\n//\n\nfunction AxisHelper( size ) {\n\n\tconsole.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' );\n\treturn new AxesHelper( size );\n\n}\n\nfunction BoundingBoxHelper( object, color ) {\n\n\tconsole.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' );\n\treturn new BoxHelper( object, color );\n\n}\n\nfunction EdgesHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' );\n\treturn new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\nGridHelper.prototype.setColors = function () {\n\n\tconsole.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' );\n\n};\n\nSkeletonHelper.prototype.update = function () {\n\n\tconsole.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );\n\n};\n\nfunction WireframeHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' );\n\treturn new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\n//\n\nLoader.prototype.extractUrlBase = function ( url ) {\n\n\tconsole.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' );\n\treturn LoaderUtils.extractUrlBase( url );\n\n};\n\nLoader.Handlers = {\n\n\tadd: function ( /* regex, loader */ ) {\n\n\t\tconsole.error( 'THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.' );\n\n\t},\n\n\tget: function ( /* file */ ) {\n\n\t\tconsole.error( 'THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.' );\n\n\t}\n\n};\n\nfunction XHRLoader( manager ) {\n\n\tconsole.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' );\n\treturn new FileLoader( manager );\n\n}\n\nfunction BinaryTextureLoader( manager ) {\n\n\tconsole.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' );\n\treturn new DataTextureLoader( manager );\n\n}\n\n//\n\nBox2.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\nBox2.prototype.empty = function () {\n\n\tconsole.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' );\n\treturn this.isEmpty();\n\n};\n\nBox2.prototype.isIntersectionBox = function ( box ) {\n\n\tconsole.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\treturn this.intersectsBox( box );\n\n};\n\nBox2.prototype.size = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box2: .size() has been renamed to .getSize().' );\n\treturn this.getSize( optionalTarget );\n\n};\n\n//\n\nBox3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\nBox3.prototype.empty = function () {\n\n\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\n\treturn this.isEmpty();\n\n};\n\nBox3.prototype.isIntersectionBox = function ( box ) {\n\n\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\treturn this.intersectsBox( box );\n\n};\n\nBox3.prototype.isIntersectionSphere = function ( sphere ) {\n\n\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\treturn this.intersectsSphere( sphere );\n\n};\n\nBox3.prototype.size = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box3: .size() has been renamed to .getSize().' );\n\treturn this.getSize( optionalTarget );\n\n};\n\n//\n\nSphere.prototype.empty = function () {\n\n\tconsole.warn( 'THREE.Sphere: .empty() has been renamed to .isEmpty().' );\n\treturn this.isEmpty();\n\n};\n\n//\n\nFrustum.prototype.setFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().' );\n\treturn this.setFromProjectionMatrix( m );\n\n};\n\n//\n\nLine3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\n//\n\nMatrix3.prototype.flattenToArrayOffset = function ( array, offset ) {\n\n\tconsole.warn( 'THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' );\n\treturn this.toArray( array, offset );\n\n};\n\nMatrix3.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\n\treturn vector.applyMatrix3( this );\n\n};\n\nMatrix3.prototype.multiplyVector3Array = function ( /* a */ ) {\n\n\tconsole.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' );\n\n};\n\nMatrix3.prototype.applyToBufferAttribute = function ( attribute ) {\n\n\tconsole.warn( 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.' );\n\treturn attribute.applyMatrix3( this );\n\n};\n\nMatrix3.prototype.applyToVector3Array = function ( /* array, offset, length */ ) {\n\n\tconsole.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' );\n\n};\n\nMatrix3.prototype.getInverse = function ( matrix ) {\n\n\tconsole.warn( 'THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\treturn this.copy( matrix ).invert();\n\n};\n\n//\n\nMatrix4.prototype.extractPosition = function ( m ) {\n\n\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\n\treturn this.copyPosition( m );\n\n};\n\nMatrix4.prototype.flattenToArrayOffset = function ( array, offset ) {\n\n\tconsole.warn( 'THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' );\n\treturn this.toArray( array, offset );\n\n};\n\nMatrix4.prototype.getPosition = function () {\n\n\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\treturn new Vector3().setFromMatrixColumn( this, 3 );\n\n};\n\nMatrix4.prototype.setRotationFromQuaternion = function ( q ) {\n\n\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\n\treturn this.makeRotationFromQuaternion( q );\n\n};\n\nMatrix4.prototype.multiplyToArray = function () {\n\n\tconsole.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' );\n\n};\n\nMatrix4.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\treturn vector.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.multiplyVector4 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\treturn vector.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.multiplyVector3Array = function ( /* a */ ) {\n\n\tconsole.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateAxis = function ( v ) {\n\n\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\n\tv.transformDirection( this );\n\n};\n\nMatrix4.prototype.crossVector = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\treturn vector.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.translate = function () {\n\n\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateX = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateY = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateZ = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateByAxis = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\n\n};\n\nMatrix4.prototype.applyToBufferAttribute = function ( attribute ) {\n\n\tconsole.warn( 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.' );\n\treturn attribute.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.applyToVector3Array = function ( /* array, offset, length */ ) {\n\n\tconsole.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' );\n\n};\n\nMatrix4.prototype.makeFrustum = function ( left, right, bottom, top, near, far ) {\n\n\tconsole.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' );\n\treturn this.makePerspective( left, right, top, bottom, near, far );\n\n};\n\nMatrix4.prototype.getInverse = function ( matrix ) {\n\n\tconsole.warn( 'THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\treturn this.copy( matrix ).invert();\n\n};\n\n//\n\nPlane.prototype.isIntersectionLine = function ( line ) {\n\n\tconsole.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' );\n\treturn this.intersectsLine( line );\n\n};\n\n//\n\nQuaternion.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' );\n\treturn vector.applyQuaternion( this );\n\n};\n\nQuaternion.prototype.inverse = function ( ) {\n\n\tconsole.warn( 'THREE.Quaternion: .inverse() has been renamed to invert().' );\n\treturn this.invert();\n\n};\n\n//\n\nRay.prototype.isIntersectionBox = function ( box ) {\n\n\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\treturn this.intersectsBox( box );\n\n};\n\nRay.prototype.isIntersectionPlane = function ( plane ) {\n\n\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\n\treturn this.intersectsPlane( plane );\n\n};\n\nRay.prototype.isIntersectionSphere = function ( sphere ) {\n\n\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\treturn this.intersectsSphere( sphere );\n\n};\n\n//\n\nTriangle.prototype.area = function () {\n\n\tconsole.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' );\n\treturn this.getArea();\n\n};\n\nTriangle.prototype.barycoordFromPoint = function ( point, target ) {\n\n\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\treturn this.getBarycoord( point, target );\n\n};\n\nTriangle.prototype.midpoint = function ( target ) {\n\n\tconsole.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' );\n\treturn this.getMidpoint( target );\n\n};\n\nTriangle.prototypenormal = function ( target ) {\n\n\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\treturn this.getNormal( target );\n\n};\n\nTriangle.prototype.plane = function ( target ) {\n\n\tconsole.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' );\n\treturn this.getPlane( target );\n\n};\n\nTriangle.barycoordFromPoint = function ( point, a, b, c, target ) {\n\n\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\treturn Triangle.getBarycoord( point, a, b, c, target );\n\n};\n\nTriangle.normal = function ( a, b, c, target ) {\n\n\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\treturn Triangle.getNormal( a, b, c, target );\n\n};\n\n//\n\nShape.prototype.extractAllPoints = function ( divisions ) {\n\n\tconsole.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' );\n\treturn this.extractPoints( divisions );\n\n};\n\nShape.prototype.extrude = function ( options ) {\n\n\tconsole.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' );\n\treturn new ExtrudeGeometry( this, options );\n\n};\n\nShape.prototype.makeGeometry = function ( options ) {\n\n\tconsole.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' );\n\treturn new ShapeGeometry( this, options );\n\n};\n\n//\n\nVector2.prototype.fromAttribute = function ( attribute, index, offset ) {\n\n\tconsole.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\treturn this.fromBufferAttribute( attribute, index, offset );\n\n};\n\nVector2.prototype.distanceToManhattan = function ( v ) {\n\n\tconsole.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\treturn this.manhattanDistanceTo( v );\n\n};\n\nVector2.prototype.lengthManhattan = function () {\n\n\tconsole.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' );\n\treturn this.manhattanLength();\n\n};\n\n//\n\nVector3.prototype.setEulerFromRotationMatrix = function () {\n\n\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\n\n};\n\nVector3.prototype.setEulerFromQuaternion = function () {\n\n\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\n\n};\n\nVector3.prototype.getPositionFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\n\treturn this.setFromMatrixPosition( m );\n\n};\n\nVector3.prototype.getScaleFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\n\treturn this.setFromMatrixScale( m );\n\n};\n\nVector3.prototype.getColumnFromMatrix = function ( index, matrix ) {\n\n\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\n\treturn this.setFromMatrixColumn( matrix, index );\n\n};\n\nVector3.prototype.applyProjection = function ( m ) {\n\n\tconsole.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' );\n\treturn this.applyMatrix4( m );\n\n};\n\nVector3.prototype.fromAttribute = function ( attribute, index, offset ) {\n\n\tconsole.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\treturn this.fromBufferAttribute( attribute, index, offset );\n\n};\n\nVector3.prototype.distanceToManhattan = function ( v ) {\n\n\tconsole.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\treturn this.manhattanDistanceTo( v );\n\n};\n\nVector3.prototype.lengthManhattan = function () {\n\n\tconsole.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' );\n\treturn this.manhattanLength();\n\n};\n\n//\n\nVector4.prototype.fromAttribute = function ( attribute, index, offset ) {\n\n\tconsole.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\treturn this.fromBufferAttribute( attribute, index, offset );\n\n};\n\nVector4.prototype.lengthManhattan = function () {\n\n\tconsole.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' );\n\treturn this.manhattanLength();\n\n};\n\n//\n\nObject3D.prototype.getChildByName = function ( name ) {\n\n\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\n\treturn this.getObjectByName( name );\n\n};\n\nObject3D.prototype.renderDepth = function () {\n\n\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\n\n};\n\nObject3D.prototype.translate = function ( distance, axis ) {\n\n\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\n\treturn this.translateOnAxis( axis, distance );\n\n};\n\nObject3D.prototype.getWorldRotation = function () {\n\n\tconsole.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' );\n\n};\n\nObject3D.prototype.applyMatrix = function ( matrix ) {\n\n\tconsole.warn( 'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().' );\n\treturn this.applyMatrix4( matrix );\n\n};\n\nObject.defineProperties( Object3D.prototype, {\n\n\teulerOrder: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\treturn this.rotation.order;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\tthis.rotation.order = value;\n\n\t\t}\n\t},\n\tuseQuaternion: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t}\n\t}\n\n} );\n\nMesh.prototype.setDrawMode = function () {\n\n\tconsole.error( 'THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n};\n\nObject.defineProperties( Mesh.prototype, {\n\n\tdrawMode: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.' );\n\t\t\treturn TrianglesDrawMode;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n\t\t}\n\t}\n\n} );\n\nSkinnedMesh.prototype.initBones = function () {\n\n\tconsole.error( 'THREE.SkinnedMesh: initBones() has been removed.' );\n\n};\n\n//\n\nPerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) {\n\n\tconsole.warn( 'THREE.PerspectiveCamera.setLens is deprecated. ' +\n\t\t\t'Use .setFocalLength and .filmGauge for a photographic setup.' );\n\n\tif ( filmGauge !== undefined ) this.filmGauge = filmGauge;\n\tthis.setFocalLength( focalLength );\n\n};\n\n//\n\nObject.defineProperties( Light.prototype, {\n\tonlyShadow: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .onlyShadow has been removed.' );\n\n\t\t}\n\t},\n\tshadowCameraFov: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' );\n\t\t\tthis.shadow.camera.fov = value;\n\n\t\t}\n\t},\n\tshadowCameraLeft: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' );\n\t\t\tthis.shadow.camera.left = value;\n\n\t\t}\n\t},\n\tshadowCameraRight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' );\n\t\t\tthis.shadow.camera.right = value;\n\n\t\t}\n\t},\n\tshadowCameraTop: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' );\n\t\t\tthis.shadow.camera.top = value;\n\n\t\t}\n\t},\n\tshadowCameraBottom: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' );\n\t\t\tthis.shadow.camera.bottom = value;\n\n\t\t}\n\t},\n\tshadowCameraNear: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' );\n\t\t\tthis.shadow.camera.near = value;\n\n\t\t}\n\t},\n\tshadowCameraFar: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' );\n\t\t\tthis.shadow.camera.far = value;\n\n\t\t}\n\t},\n\tshadowCameraVisible: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' );\n\n\t\t}\n\t},\n\tshadowBias: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' );\n\t\t\tthis.shadow.bias = value;\n\n\t\t}\n\t},\n\tshadowDarkness: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowDarkness has been removed.' );\n\n\t\t}\n\t},\n\tshadowMapWidth: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' );\n\t\t\tthis.shadow.mapSize.width = value;\n\n\t\t}\n\t},\n\tshadowMapHeight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' );\n\t\t\tthis.shadow.mapSize.height = value;\n\n\t\t}\n\t}\n} );\n\n//\n\nObject.defineProperties( BufferAttribute.prototype, {\n\n\tlength: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' );\n\t\t\treturn this.array.length;\n\n\t\t}\n\t},\n\tdynamic: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\treturn this.usage === DynamicDrawUsage;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\tthis.setUsage( DynamicDrawUsage );\n\n\t\t}\n\t}\n\n} );\n\nBufferAttribute.prototype.setDynamic = function ( value ) {\n\n\tconsole.warn( 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\treturn this;\n\n};\n\nBufferAttribute.prototype.copyIndicesArray = function ( /* indices */ ) {\n\n\tconsole.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' );\n\n},\n\nBufferAttribute.prototype.setArray = function ( /* array */ ) {\n\n\tconsole.error( 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n};\n\n//\n\nBufferGeometry.prototype.addIndex = function ( index ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\n\tthis.setIndex( index );\n\n};\n\nBufferGeometry.prototype.addAttribute = function ( name, attribute ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().' );\n\n\tif ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\n\n\t\treturn this.setAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\n\n\t}\n\n\tif ( name === 'index' ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' );\n\t\tthis.setIndex( attribute );\n\n\t\treturn this;\n\n\t}\n\n\treturn this.setAttribute( name, attribute );\n\n};\n\nBufferGeometry.prototype.addDrawCall = function ( start, count, indexOffset ) {\n\n\tif ( indexOffset !== undefined ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\n\n\t}\n\n\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\n\tthis.addGroup( start, count );\n\n};\n\nBufferGeometry.prototype.clearDrawCalls = function () {\n\n\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\n\tthis.clearGroups();\n\n};\n\nBufferGeometry.prototype.computeOffsets = function () {\n\n\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\n\n};\n\nBufferGeometry.prototype.removeAttribute = function ( name ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().' );\n\n\treturn this.deleteAttribute( name );\n\n};\n\nBufferGeometry.prototype.applyMatrix = function ( matrix ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\treturn this.applyMatrix4( matrix );\n\n};\n\nObject.defineProperties( BufferGeometry.prototype, {\n\n\tdrawcalls: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t},\n\toffsets: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t}\n\n} );\n\nInterleavedBuffer.prototype.setDynamic = function ( value ) {\n\n\tconsole.warn( 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\treturn this;\n\n};\n\nInterleavedBuffer.prototype.setArray = function ( /* array */ ) {\n\n\tconsole.error( 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n};\n\n//\n\nExtrudeGeometry.prototype.getArrays = function () {\n\n\tconsole.error( 'THREE.ExtrudeGeometry: .getArrays() has been removed.' );\n\n};\n\nExtrudeGeometry.prototype.addShapeList = function () {\n\n\tconsole.error( 'THREE.ExtrudeGeometry: .addShapeList() has been removed.' );\n\n};\n\nExtrudeGeometry.prototype.addShape = function () {\n\n\tconsole.error( 'THREE.ExtrudeGeometry: .addShape() has been removed.' );\n\n};\n\n//\n\nScene.prototype.dispose = function () {\n\n\tconsole.error( 'THREE.Scene: .dispose() has been removed.' );\n\n};\n\n//\n\nUniform.prototype.onUpdate = function () {\n\n\tconsole.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' );\n\treturn this;\n\n};\n\n//\n\nObject.defineProperties( Material.prototype, {\n\n\twrapAround: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t}\n\t},\n\n\toverdraw: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t}\n\t},\n\n\twrapRGB: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapRGB has been removed.' );\n\t\t\treturn new Color();\n\n\t\t}\n\t},\n\n\tshading: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\tthis.flatShading = ( value === FlatShading );\n\n\t\t}\n\t},\n\n\tstencilMask: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\treturn this.stencilFuncMask;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\tthis.stencilFuncMask = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( ShaderMaterial.prototype, {\n\n\tderivatives: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\treturn this.extensions.derivatives;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\tthis.extensions.derivatives = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nWebGLRenderer.prototype.clearTarget = function ( renderTarget, color, depth, stencil ) {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' );\n\tthis.setRenderTarget( renderTarget );\n\tthis.clear( color, depth, stencil );\n\n};\n\nWebGLRenderer.prototype.animate = function ( callback ) {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' );\n\tthis.setAnimationLoop( callback );\n\n};\n\nWebGLRenderer.prototype.getCurrentRenderTarget = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' );\n\treturn this.getRenderTarget();\n\n};\n\nWebGLRenderer.prototype.getMaxAnisotropy = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' );\n\treturn this.capabilities.getMaxAnisotropy();\n\n};\n\nWebGLRenderer.prototype.getPrecision = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' );\n\treturn this.capabilities.precision;\n\n};\n\nWebGLRenderer.prototype.resetGLState = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' );\n\treturn this.state.reset();\n\n};\n\nWebGLRenderer.prototype.supportsFloatTextures = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).' );\n\treturn this.extensions.get( 'OES_texture_float' );\n\n};\n\nWebGLRenderer.prototype.supportsHalfFloatTextures = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).' );\n\treturn this.extensions.get( 'OES_texture_half_float' );\n\n};\n\nWebGLRenderer.prototype.supportsStandardDerivatives = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).' );\n\treturn this.extensions.get( 'OES_standard_derivatives' );\n\n};\n\nWebGLRenderer.prototype.supportsCompressedTextureS3TC = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).' );\n\treturn this.extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n};\n\nWebGLRenderer.prototype.supportsCompressedTexturePVRTC = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).' );\n\treturn this.extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n};\n\nWebGLRenderer.prototype.supportsBlendMinMax = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).' );\n\treturn this.extensions.get( 'EXT_blend_minmax' );\n\n};\n\nWebGLRenderer.prototype.supportsVertexTextures = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' );\n\treturn this.capabilities.vertexTextures;\n\n};\n\nWebGLRenderer.prototype.supportsInstancedArrays = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).' );\n\treturn this.extensions.get( 'ANGLE_instanced_arrays' );\n\n};\n\nWebGLRenderer.prototype.enableScissorTest = function ( boolean ) {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );\n\tthis.setScissorTest( boolean );\n\n};\n\nWebGLRenderer.prototype.initMaterial = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.addPrePlugin = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.addPostPlugin = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.updateShadowMap = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setFaceCulling = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.allocTextureUnit = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .allocTextureUnit() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setTexture = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setTexture() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setTexture2D = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setTexture2D() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setTextureCube = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setTextureCube() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.getActiveMipMapLevel = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().' );\n\treturn this.getActiveMipmapLevel();\n\n};\n\nObject.defineProperties( WebGLRenderer.prototype, {\n\n\tshadowMapEnabled: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.enabled;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' );\n\t\t\tthis.shadowMap.enabled = value;\n\n\t\t}\n\t},\n\tshadowMapType: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' );\n\t\t\tthis.shadowMap.type = value;\n\n\t\t}\n\t},\n\tshadowMapCullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\tcontext: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' );\n\t\t\treturn this.getContext();\n\n\t\t}\n\t},\n\tvr: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .vr has been renamed to .xr' );\n\t\t\treturn this.xr;\n\n\t\t}\n\t},\n\tgammaInput: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\n\t\t}\n\t},\n\tgammaOutput: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\tthis.outputEncoding = ( value === true ) ? sRGBEncoding : LinearEncoding;\n\n\t\t}\n\t},\n\ttoneMappingWhitePoint: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\t\t\treturn 1.0;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\n\t\t}\n\t},\n\n} );\n\nObject.defineProperties( WebGLShadowMap.prototype, {\n\n\tcullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* cullFace */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderReverseSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderSingleSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t}\n\n} );\n\nfunction WebGLRenderTargetCube( width, height, options ) {\n\n\tconsole.warn( 'THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).' );\n\treturn new WebGLCubeRenderTarget( width, options );\n\n}\n\n//\n\nObject.defineProperties( WebGLRenderTarget.prototype, {\n\n\twrapS: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\treturn this.texture.wrapS;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\tthis.texture.wrapS = value;\n\n\t\t}\n\t},\n\twrapT: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\treturn this.texture.wrapT;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\tthis.texture.wrapT = value;\n\n\t\t}\n\t},\n\tmagFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\treturn this.texture.magFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\tthis.texture.magFilter = value;\n\n\t\t}\n\t},\n\tminFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\treturn this.texture.minFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\tthis.texture.minFilter = value;\n\n\t\t}\n\t},\n\tanisotropy: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\treturn this.texture.anisotropy;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\tthis.texture.anisotropy = value;\n\n\t\t}\n\t},\n\toffset: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\treturn this.texture.offset;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\tthis.texture.offset = value;\n\n\t\t}\n\t},\n\trepeat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\treturn this.texture.repeat;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\tthis.texture.repeat = value;\n\n\t\t}\n\t},\n\tformat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\treturn this.texture.format;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\tthis.texture.format = value;\n\n\t\t}\n\t},\n\ttype: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\treturn this.texture.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\tthis.texture.type = value;\n\n\t\t}\n\t},\n\tgenerateMipmaps: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\treturn this.texture.generateMipmaps;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\tthis.texture.generateMipmaps = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nAudio.prototype.load = function ( file ) {\n\n\tconsole.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' );\n\tconst scope = this;\n\tconst audioLoader = new AudioLoader();\n\taudioLoader.load( file, function ( buffer ) {\n\n\t\tscope.setBuffer( buffer );\n\n\t} );\n\treturn this;\n\n};\n\n\nAudioAnalyser.prototype.getData = function () {\n\n\tconsole.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' );\n\treturn this.getFrequencyData();\n\n};\n\n//\n\nCubeCamera.prototype.updateCubeMap = function ( renderer, scene ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' );\n\treturn this.update( renderer, scene );\n\n};\n\nCubeCamera.prototype.clear = function ( renderer, color, depth, stencil ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .clear() is now .renderTarget.clear().' );\n\treturn this.renderTarget.clear( renderer, color, depth, stencil );\n\n};\n\nImageUtils.crossOrigin = undefined;\n\nImageUtils.loadTexture = function ( url, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\n\n\tconst loader = new TextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tconst texture = loader.load( url, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\nImageUtils.loadTextureCube = function ( urls, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\n\n\tconst loader = new CubeTextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tconst texture = loader.load( urls, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\nImageUtils.loadCompressedTexture = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\nImageUtils.loadCompressedTextureCube = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\n//\n\nfunction CanvasRenderer() {\n\n\tconsole.error( 'THREE.CanvasRenderer has been removed' );\n\n}\n\n//\n\nfunction JSONLoader() {\n\n\tconsole.error( 'THREE.JSONLoader has been removed.' );\n\n}\n\n//\n\nconst SceneUtils = {\n\n\tcreateMultiMaterialObject: function ( /* geometry, materials */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t},\n\n\tdetach: function ( /* child, parent, scene */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t},\n\n\tattach: function ( /* child, scene, parent */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t}\n\n};\n\n//\n\nfunction LensFlare() {\n\n\tconsole.error( 'THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js' );\n\n}\n\nif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t/* eslint-disable no-undef */\n\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\trevision: REVISION,\n\t} } ) );\n\t/* eslint-enable no-undef */\n\n}\n\nif ( typeof window !== 'undefined' ) {\n\n\tif ( window.__THREE__ ) {\n\n\t\tconsole.warn( 'WARNING: Multiple instances of Three.js being imported.' );\n\n\t} else {\n\n\t\twindow.__THREE__ = REVISION;\n\n\t}\n\n}\n\nexport { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AlphaFormat, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AmbientLightProbe, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, AxisHelper, BackSide, BasicDepthPacking, BasicShadowMap, BinaryTextureLoader, Bone, BooleanKeyframeTrack, BoundingBoxHelper, Box2, Box3, Box3Helper, BoxGeometry as BoxBufferGeometry, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasRenderer, CanvasTexture, CatmullRomCurve3, CineonToneMapping, CircleGeometry as CircleBufferGeometry, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, CompressedTexture, CompressedTextureLoader, ConeGeometry as ConeBufferGeometry, ConeGeometry, CubeCamera, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubeUVRefractionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderGeometry as CylinderBufferGeometry, CylinderGeometry, Cylindrical, DataTexture, DataTexture2DArray, DataTexture3D, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry as DodecahedronBufferGeometry, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicBufferAttribute, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EdgesHelper, EllipseCurve, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExtrudeGeometry as ExtrudeBufferGeometry, ExtrudeGeometry, FaceColors, FileLoader, FlatShading, Float16BufferAttribute, Float32Attribute, Float32BufferAttribute, Float64Attribute, Float64BufferAttribute, FloatType, Fog, FogExp2, Font, FontLoader, FrontSide, Frustum, GLBufferAttribute, GLSL1, GLSL3, GammaEncoding, GreaterDepth, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HalfFloatType, HemisphereLight, HemisphereLightHelper, HemisphereLightProbe, IcosahedronGeometry as IcosahedronBufferGeometry, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, ImmediateRenderObject, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16Attribute, Int16BufferAttribute, Int32Attribute, Int32BufferAttribute, Int8Attribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InvertStencilOp, JSONLoader, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry as LatheBufferGeometry, LatheGeometry, Layers, LensFlare, LessDepth, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LinePieces, LineSegments, LineStrip, LinearEncoding, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearToneMapping, Loader, LoaderUtils, LoadingManager, LogLuvEncoding, LoopOnce, LoopPingPong, LoopRepeat, LuminanceAlphaFormat, LuminanceFormat, MOUSE, Material, MaterialLoader, MathUtils as Math, MathUtils, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshFaceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiMaterial, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeverDepth, NeverStencilFunc, NoBlending, NoColors, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronGeometry as OctahedronBufferGeometry, OctahedronGeometry, OneFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, ParametricGeometry as ParametricBufferGeometry, ParametricGeometry, Particle, ParticleBasicMaterial, ParticleSystem, ParticleSystemMaterial, Path, PerspectiveCamera, Plane, PlaneGeometry as PlaneBufferGeometry, PlaneGeometry, PlaneHelper, PointCloud, PointCloudMaterial, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry as PolyhedronBufferGeometry, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, REVISION, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBDEncoding, RGBEEncoding, RGBEFormat, RGBFormat, RGBIntegerFormat, RGBM16Encoding, RGBM7Encoding, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RingGeometry as RingBufferGeometry, RingGeometry, SRGB8_ALPHA8_ASTC_10x10_Format, SRGB8_ALPHA8_ASTC_10x5_Format, SRGB8_ALPHA8_ASTC_10x6_Format, SRGB8_ALPHA8_ASTC_10x8_Format, SRGB8_ALPHA8_ASTC_12x10_Format, SRGB8_ALPHA8_ASTC_12x12_Format, SRGB8_ALPHA8_ASTC_4x4_Format, SRGB8_ALPHA8_ASTC_5x4_Format, SRGB8_ALPHA8_ASTC_5x5_Format, SRGB8_ALPHA8_ASTC_6x5_Format, SRGB8_ALPHA8_ASTC_6x6_Format, SRGB8_ALPHA8_ASTC_8x5_Format, SRGB8_ALPHA8_ASTC_8x6_Format, SRGB8_ALPHA8_ASTC_8x8_Format, Scene, SceneUtils, ShaderChunk, ShaderLib, ShaderMaterial, ShadowMaterial, Shape, ShapeGeometry as ShapeBufferGeometry, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, SmoothShading, Sphere, SphereGeometry as SphereBufferGeometry, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronGeometry as TetrahedronBufferGeometry, TetrahedronGeometry, TextGeometry as TextBufferGeometry, TextGeometry, Texture, TextureLoader, TorusGeometry as TorusBufferGeometry, TorusGeometry, TorusKnotGeometry as TorusKnotBufferGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry as TubeBufferGeometry, TubeGeometry, UVMapping, Uint16Attribute, Uint16BufferAttribute, Uint32Attribute, Uint32BufferAttribute, Uint8Attribute, Uint8BufferAttribute, Uint8ClampedAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt248Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShort565Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, Vertex, VertexColors, VideoTexture, WebGL1Renderer, WebGLCubeRenderTarget, WebGLMultipleRenderTargets, WebGLMultisampleRenderTarget, WebGLRenderTarget, WebGLRenderTargetCube, WebGLRenderer, WebGLUtils, WireframeGeometry, WireframeHelper, WrapAroundEnding, XHRLoader, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, sRGBEncoding };\n","import {\n\tEventDispatcher,\n\tMatrix4,\n\tPlane,\n\tRaycaster,\n\tVector2,\n\tVector3\n} from 'three';\n\nconst _plane = new Plane();\nconst _raycaster = new Raycaster();\n\nconst _mouse = new Vector2();\nconst _offset = new Vector3();\nconst _intersection = new Vector3();\nconst _worldPosition = new Vector3();\nconst _inverseMatrix = new Matrix4();\n\nclass DragControls extends EventDispatcher {\n\n\tconstructor( _objects, _camera, _domElement ) {\n\n\t\tsuper();\n\n\t\tlet _selected = null, _hovered = null;\n\n\t\tconst _intersections = [];\n\n\t\t//\n\n\t\tconst scope = this;\n\n\t\tfunction activate() {\n\n\t\t\t_domElement.addEventListener( 'pointermove', onPointerMove );\n\t\t\t_domElement.addEventListener( 'pointerdown', onPointerDown );\n\t\t\t_domElement.addEventListener( 'pointerup', onPointerCancel );\n\t\t\t_domElement.addEventListener( 'pointerleave', onPointerCancel );\n\t\t\t_domElement.addEventListener( 'touchmove', onTouchMove, { passive: false } );\n\t\t\t_domElement.addEventListener( 'touchstart', onTouchStart, { passive: false } );\n\t\t\t_domElement.addEventListener( 'touchend', onTouchEnd );\n\n\t\t}\n\n\t\tfunction deactivate() {\n\n\t\t\t_domElement.removeEventListener( 'pointermove', onPointerMove );\n\t\t\t_domElement.removeEventListener( 'pointerdown', onPointerDown );\n\t\t\t_domElement.removeEventListener( 'pointerup', onPointerCancel );\n\t\t\t_domElement.removeEventListener( 'pointerleave', onPointerCancel );\n\t\t\t_domElement.removeEventListener( 'touchmove', onTouchMove );\n\t\t\t_domElement.removeEventListener( 'touchstart', onTouchStart );\n\t\t\t_domElement.removeEventListener( 'touchend', onTouchEnd );\n\n\t\t\t_domElement.style.cursor = '';\n\n\t\t}\n\n\t\tfunction dispose() {\n\n\t\t\tdeactivate();\n\n\t\t}\n\n\t\tfunction getObjects() {\n\n\t\t\treturn _objects;\n\n\t\t}\n\n\t\tfunction onPointerMove( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tswitch ( event.pointerType ) {\n\n\t\t\t\tcase 'mouse':\n\t\t\t\tcase 'pen':\n\t\t\t\t\tonMouseMove( event );\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO touch\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseMove( event ) {\n\n\t\t\tconst rect = _domElement.getBoundingClientRect();\n\n\t\t\t_mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;\n\t\t\t_mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;\n\n\t\t\t_raycaster.setFromCamera( _mouse, _camera );\n\n\t\t\tif ( _selected && scope.enabled ) {\n\n\t\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t\t_selected.position.copy( _intersection.sub( _offset ).applyMatrix4( _inverseMatrix ) );\n\n\t\t\t\t}\n\n\t\t\t\tscope.dispatchEvent( { type: 'drag', object: _selected } );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t_intersections.length = 0;\n\n\t\t\t_raycaster.setFromCamera( _mouse, _camera );\n\t\t\t_raycaster.intersectObjects( _objects, true, _intersections );\n\n\t\t\tif ( _intersections.length > 0 ) {\n\n\t\t\t\tconst object = _intersections[ 0 ].object;\n\n\t\t\t\t_plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( object.matrixWorld ) );\n\n\t\t\t\tif ( _hovered !== object && _hovered !== null ) {\n\n\t\t\t\t\tscope.dispatchEvent( { type: 'hoveroff', object: _hovered } );\n\n\t\t\t\t\t_domElement.style.cursor = 'auto';\n\t\t\t\t\t_hovered = null;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _hovered !== object ) {\n\n\t\t\t\t\tscope.dispatchEvent( { type: 'hoveron', object: object } );\n\n\t\t\t\t\t_domElement.style.cursor = 'pointer';\n\t\t\t\t\t_hovered = object;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( _hovered !== null ) {\n\n\t\t\t\t\tscope.dispatchEvent( { type: 'hoveroff', object: _hovered } );\n\n\t\t\t\t\t_domElement.style.cursor = 'auto';\n\t\t\t\t\t_hovered = null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onPointerDown( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tswitch ( event.pointerType ) {\n\n\t\t\t\tcase 'mouse':\n\t\t\t\tcase 'pen':\n\t\t\t\t\tonMouseDown( event );\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO touch\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseDown( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\t_intersections.length = 0;\n\n\t\t\t_raycaster.setFromCamera( _mouse, _camera );\n\t\t\t_raycaster.intersectObjects( _objects, true, _intersections );\n\n\t\t\tif ( _intersections.length > 0 ) {\n\n\t\t\t\t_selected = ( scope.transformGroup === true ) ? _objects[ 0 ] : _intersections[ 0 ].object;\n\n\t\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t\t_inverseMatrix.copy( _selected.parent.matrixWorld ).invert();\n\t\t\t\t\t_offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t\t_domElement.style.cursor = 'move';\n\n\t\t\t\tscope.dispatchEvent( { type: 'dragstart', object: _selected } );\n\n\t\t\t}\n\n\n\t\t}\n\n\t\tfunction onPointerCancel( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tswitch ( event.pointerType ) {\n\n\t\t\t\tcase 'mouse':\n\t\t\t\tcase 'pen':\n\t\t\t\t\tonMouseCancel( event );\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO touch\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseCancel( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tif ( _selected ) {\n\n\t\t\t\tscope.dispatchEvent( { type: 'dragend', object: _selected } );\n\n\t\t\t\t_selected = null;\n\n\t\t\t}\n\n\t\t\t_domElement.style.cursor = _hovered ? 'pointer' : 'auto';\n\n\t\t}\n\n\t\tfunction onTouchMove( event ) {\n\n\t\t\tevent.preventDefault();\n\t\t\tevent = event.changedTouches[ 0 ];\n\n\t\t\tconst rect = _domElement.getBoundingClientRect();\n\n\t\t\t_mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;\n\t\t\t_mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;\n\n\t\t\t_raycaster.setFromCamera( _mouse, _camera );\n\n\t\t\tif ( _selected && scope.enabled ) {\n\n\t\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t\t_selected.position.copy( _intersection.sub( _offset ).applyMatrix4( _inverseMatrix ) );\n\n\t\t\t\t}\n\n\t\t\t\tscope.dispatchEvent( { type: 'drag', object: _selected } );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onTouchStart( event ) {\n\n\t\t\tevent.preventDefault();\n\t\t\tevent = event.changedTouches[ 0 ];\n\n\t\t\tconst rect = _domElement.getBoundingClientRect();\n\n\t\t\t_mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;\n\t\t\t_mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;\n\n\t\t\t_intersections.length = 0;\n\n\t\t\t_raycaster.setFromCamera( _mouse, _camera );\n\t\t\t _raycaster.intersectObjects( _objects, true, _intersections );\n\n\t\t\tif ( _intersections.length > 0 ) {\n\n\t\t\t\t_selected = ( scope.transformGroup === true ) ? _objects[ 0 ] : _intersections[ 0 ].object;\n\n\t\t\t\t_plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );\n\n\t\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t\t_inverseMatrix.copy( _selected.parent.matrixWorld ).invert();\n\t\t\t\t\t_offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t\t_domElement.style.cursor = 'move';\n\n\t\t\t\tscope.dispatchEvent( { type: 'dragstart', object: _selected } );\n\n\t\t\t}\n\n\n\t\t}\n\n\t\tfunction onTouchEnd( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tif ( _selected ) {\n\n\t\t\t\tscope.dispatchEvent( { type: 'dragend', object: _selected } );\n\n\t\t\t\t_selected = null;\n\n\t\t\t}\n\n\t\t\t_domElement.style.cursor = 'auto';\n\n\t\t}\n\n\t\tactivate();\n\n\t\t// API\n\n\t\tthis.enabled = true;\n\t\tthis.transformGroup = false;\n\n\t\tthis.activate = activate;\n\t\tthis.deactivate = deactivate;\n\t\tthis.dispose = dispose;\n\t\tthis.getObjects = getObjects;\n\n\t}\n\n}\n\nexport { DragControls };\n","/**\n * @license\n * Copyright 2010-2021 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nconst REVISION = '134';\nconst MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };\nconst TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };\nconst CullFaceNone = 0;\nconst CullFaceBack = 1;\nconst CullFaceFront = 2;\nconst CullFaceFrontBack = 3;\nconst BasicShadowMap = 0;\nconst PCFShadowMap = 1;\nconst PCFSoftShadowMap = 2;\nconst VSMShadowMap = 3;\nconst FrontSide = 0;\nconst BackSide = 1;\nconst DoubleSide = 2;\nconst FlatShading = 1;\nconst SmoothShading = 2;\nconst NoBlending = 0;\nconst NormalBlending = 1;\nconst AdditiveBlending = 2;\nconst SubtractiveBlending = 3;\nconst MultiplyBlending = 4;\nconst CustomBlending = 5;\nconst AddEquation = 100;\nconst SubtractEquation = 101;\nconst ReverseSubtractEquation = 102;\nconst MinEquation = 103;\nconst MaxEquation = 104;\nconst ZeroFactor = 200;\nconst OneFactor = 201;\nconst SrcColorFactor = 202;\nconst OneMinusSrcColorFactor = 203;\nconst SrcAlphaFactor = 204;\nconst OneMinusSrcAlphaFactor = 205;\nconst DstAlphaFactor = 206;\nconst OneMinusDstAlphaFactor = 207;\nconst DstColorFactor = 208;\nconst OneMinusDstColorFactor = 209;\nconst SrcAlphaSaturateFactor = 210;\nconst NeverDepth = 0;\nconst AlwaysDepth = 1;\nconst LessDepth = 2;\nconst LessEqualDepth = 3;\nconst EqualDepth = 4;\nconst GreaterEqualDepth = 5;\nconst GreaterDepth = 6;\nconst NotEqualDepth = 7;\nconst MultiplyOperation = 0;\nconst MixOperation = 1;\nconst AddOperation = 2;\nconst NoToneMapping = 0;\nconst LinearToneMapping = 1;\nconst ReinhardToneMapping = 2;\nconst CineonToneMapping = 3;\nconst ACESFilmicToneMapping = 4;\nconst CustomToneMapping = 5;\n\nconst UVMapping = 300;\nconst CubeReflectionMapping = 301;\nconst CubeRefractionMapping = 302;\nconst EquirectangularReflectionMapping = 303;\nconst EquirectangularRefractionMapping = 304;\nconst CubeUVReflectionMapping = 306;\nconst CubeUVRefractionMapping = 307;\nconst RepeatWrapping = 1000;\nconst ClampToEdgeWrapping = 1001;\nconst MirroredRepeatWrapping = 1002;\nconst NearestFilter = 1003;\nconst NearestMipmapNearestFilter = 1004;\nconst NearestMipMapNearestFilter = 1004;\nconst NearestMipmapLinearFilter = 1005;\nconst NearestMipMapLinearFilter = 1005;\nconst LinearFilter = 1006;\nconst LinearMipmapNearestFilter = 1007;\nconst LinearMipMapNearestFilter = 1007;\nconst LinearMipmapLinearFilter = 1008;\nconst LinearMipMapLinearFilter = 1008;\nconst UnsignedByteType = 1009;\nconst ByteType = 1010;\nconst ShortType = 1011;\nconst UnsignedShortType = 1012;\nconst IntType = 1013;\nconst UnsignedIntType = 1014;\nconst FloatType = 1015;\nconst HalfFloatType = 1016;\nconst UnsignedShort4444Type = 1017;\nconst UnsignedShort5551Type = 1018;\nconst UnsignedShort565Type = 1019;\nconst UnsignedInt248Type = 1020;\nconst AlphaFormat = 1021;\nconst RGBFormat = 1022;\nconst RGBAFormat = 1023;\nconst LuminanceFormat = 1024;\nconst LuminanceAlphaFormat = 1025;\nconst RGBEFormat = RGBAFormat;\nconst DepthFormat = 1026;\nconst DepthStencilFormat = 1027;\nconst RedFormat = 1028;\nconst RedIntegerFormat = 1029;\nconst RGFormat = 1030;\nconst RGIntegerFormat = 1031;\nconst RGBIntegerFormat = 1032;\nconst RGBAIntegerFormat = 1033;\n\nconst RGB_S3TC_DXT1_Format = 33776;\nconst RGBA_S3TC_DXT1_Format = 33777;\nconst RGBA_S3TC_DXT3_Format = 33778;\nconst RGBA_S3TC_DXT5_Format = 33779;\nconst RGB_PVRTC_4BPPV1_Format = 35840;\nconst RGB_PVRTC_2BPPV1_Format = 35841;\nconst RGBA_PVRTC_4BPPV1_Format = 35842;\nconst RGBA_PVRTC_2BPPV1_Format = 35843;\nconst RGB_ETC1_Format = 36196;\nconst RGB_ETC2_Format = 37492;\nconst RGBA_ETC2_EAC_Format = 37496;\nconst RGBA_ASTC_4x4_Format = 37808;\nconst RGBA_ASTC_5x4_Format = 37809;\nconst RGBA_ASTC_5x5_Format = 37810;\nconst RGBA_ASTC_6x5_Format = 37811;\nconst RGBA_ASTC_6x6_Format = 37812;\nconst RGBA_ASTC_8x5_Format = 37813;\nconst RGBA_ASTC_8x6_Format = 37814;\nconst RGBA_ASTC_8x8_Format = 37815;\nconst RGBA_ASTC_10x5_Format = 37816;\nconst RGBA_ASTC_10x6_Format = 37817;\nconst RGBA_ASTC_10x8_Format = 37818;\nconst RGBA_ASTC_10x10_Format = 37819;\nconst RGBA_ASTC_12x10_Format = 37820;\nconst RGBA_ASTC_12x12_Format = 37821;\nconst RGBA_BPTC_Format = 36492;\nconst SRGB8_ALPHA8_ASTC_4x4_Format = 37840;\nconst SRGB8_ALPHA8_ASTC_5x4_Format = 37841;\nconst SRGB8_ALPHA8_ASTC_5x5_Format = 37842;\nconst SRGB8_ALPHA8_ASTC_6x5_Format = 37843;\nconst SRGB8_ALPHA8_ASTC_6x6_Format = 37844;\nconst SRGB8_ALPHA8_ASTC_8x5_Format = 37845;\nconst SRGB8_ALPHA8_ASTC_8x6_Format = 37846;\nconst SRGB8_ALPHA8_ASTC_8x8_Format = 37847;\nconst SRGB8_ALPHA8_ASTC_10x5_Format = 37848;\nconst SRGB8_ALPHA8_ASTC_10x6_Format = 37849;\nconst SRGB8_ALPHA8_ASTC_10x8_Format = 37850;\nconst SRGB8_ALPHA8_ASTC_10x10_Format = 37851;\nconst SRGB8_ALPHA8_ASTC_12x10_Format = 37852;\nconst SRGB8_ALPHA8_ASTC_12x12_Format = 37853;\nconst LoopOnce = 2200;\nconst LoopRepeat = 2201;\nconst LoopPingPong = 2202;\nconst InterpolateDiscrete = 2300;\nconst InterpolateLinear = 2301;\nconst InterpolateSmooth = 2302;\nconst ZeroCurvatureEnding = 2400;\nconst ZeroSlopeEnding = 2401;\nconst WrapAroundEnding = 2402;\nconst NormalAnimationBlendMode = 2500;\nconst AdditiveAnimationBlendMode = 2501;\nconst TrianglesDrawMode = 0;\nconst TriangleStripDrawMode = 1;\nconst TriangleFanDrawMode = 2;\nconst LinearEncoding = 3000;\nconst sRGBEncoding = 3001;\nconst GammaEncoding = 3007;\nconst RGBEEncoding = 3002;\nconst LogLuvEncoding = 3003;\nconst RGBM7Encoding = 3004;\nconst RGBM16Encoding = 3005;\nconst RGBDEncoding = 3006;\nconst BasicDepthPacking = 3200;\nconst RGBADepthPacking = 3201;\nconst TangentSpaceNormalMap = 0;\nconst ObjectSpaceNormalMap = 1;\n\nconst ZeroStencilOp = 0;\nconst KeepStencilOp = 7680;\nconst ReplaceStencilOp = 7681;\nconst IncrementStencilOp = 7682;\nconst DecrementStencilOp = 7683;\nconst IncrementWrapStencilOp = 34055;\nconst DecrementWrapStencilOp = 34056;\nconst InvertStencilOp = 5386;\n\nconst NeverStencilFunc = 512;\nconst LessStencilFunc = 513;\nconst EqualStencilFunc = 514;\nconst LessEqualStencilFunc = 515;\nconst GreaterStencilFunc = 516;\nconst NotEqualStencilFunc = 517;\nconst GreaterEqualStencilFunc = 518;\nconst AlwaysStencilFunc = 519;\n\nconst StaticDrawUsage = 35044;\nconst DynamicDrawUsage = 35048;\nconst StreamDrawUsage = 35040;\nconst StaticReadUsage = 35045;\nconst DynamicReadUsage = 35049;\nconst StreamReadUsage = 35041;\nconst StaticCopyUsage = 35046;\nconst DynamicCopyUsage = 35050;\nconst StreamCopyUsage = 35042;\n\nconst GLSL1 = '100';\nconst GLSL3 = '300 es';\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nclass EventDispatcher {\n\n\taddEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t}\n\n\thasEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tconst listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t}\n\n\tremoveEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tconst index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t\tevent.target = null;\n\n\t\t}\n\n\t}\n\n}\n\nlet _seed = 1234567;\n\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n\n//\n\nconst _lut = [];\n\nfor ( let i = 0; i < 256; i ++ ) {\n\n\t_lut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 );\n\n}\n\nconst hasRandomUUID = typeof crypto !== 'undefined' && 'randomUUID' in crypto;\n\nfunction generateUUID() {\n\n\tif ( hasRandomUUID ) {\n\n\t\treturn crypto.randomUUID().toUpperCase();\n\n\t}\n\n\t// TODO Remove this code when crypto.randomUUID() is available everywhere\n\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n\tconst d0 = Math.random() * 0xffffffff | 0;\n\tconst d1 = Math.random() * 0xffffffff | 0;\n\tconst d2 = Math.random() * 0xffffffff | 0;\n\tconst d3 = Math.random() * 0xffffffff | 0;\n\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t// .toUpperCase() here flattens concatenated strings to save heap memory space.\n\treturn uuid.toUpperCase();\n\n}\n\nfunction clamp( value, min, max ) {\n\n\treturn Math.max( min, Math.min( max, value ) );\n\n}\n\n// compute euclidian modulo of m % n\n// https://en.wikipedia.org/wiki/Modulo_operation\nfunction euclideanModulo( n, m ) {\n\n\treturn ( ( n % m ) + m ) % m;\n\n}\n\n// Linear mapping from range to range \nfunction mapLinear( x, a1, a2, b1, b2 ) {\n\n\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n}\n\n// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\nfunction inverseLerp( x, y, value ) {\n\n\tif ( x !== y ) {\n\n\t\treturn ( value - x ) / ( y - x );\n\n\t} else {\n\n\t\treturn 0;\n\n\t}\n\n}\n\n// https://en.wikipedia.org/wiki/Linear_interpolation\nfunction lerp( x, y, t ) {\n\n\treturn ( 1 - t ) * x + t * y;\n\n}\n\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nfunction damp( x, y, lambda, dt ) {\n\n\treturn lerp( x, y, 1 - Math.exp( - lambda * dt ) );\n\n}\n\n// https://www.desmos.com/calculator/vcsjnyz7x4\nfunction pingpong( x, length = 1 ) {\n\n\treturn length - Math.abs( euclideanModulo( x, length * 2 ) - length );\n\n}\n\n// http://en.wikipedia.org/wiki/Smoothstep\nfunction smoothstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * ( 3 - 2 * x );\n\n}\n\nfunction smootherstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n}\n\n// Random integer from interval\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n// Random float from interval\nfunction randFloat( low, high ) {\n\n\treturn low + Math.random() * ( high - low );\n\n}\n\n// Random float from <-range/2, range/2> interval\nfunction randFloatSpread( range ) {\n\n\treturn range * ( 0.5 - Math.random() );\n\n}\n\n// Deterministic pseudo-random float in the interval [ 0, 1 ]\nfunction seededRandom( s ) {\n\n\tif ( s !== undefined ) _seed = s % 2147483647;\n\n\t// Park-Miller algorithm\n\n\t_seed = _seed * 16807 % 2147483647;\n\n\treturn ( _seed - 1 ) / 2147483646;\n\n}\n\nfunction degToRad( degrees ) {\n\n\treturn degrees * DEG2RAD;\n\n}\n\nfunction radToDeg( radians ) {\n\n\treturn radians * RAD2DEG;\n\n}\n\nfunction isPowerOfTwo( value ) {\n\n\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n}\n\nfunction ceilPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction floorPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction setQuaternionFromProperEuler( q, a, b, c, order ) {\n\n\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t// rotations are applied to the axes in the order specified by 'order'\n\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t// angles are in radians\n\n\tconst cos = Math.cos;\n\tconst sin = Math.sin;\n\n\tconst c2 = cos( b / 2 );\n\tconst s2 = sin( b / 2 );\n\n\tconst c13 = cos( ( a + c ) / 2 );\n\tconst s13 = sin( ( a + c ) / 2 );\n\n\tconst c1_3 = cos( ( a - c ) / 2 );\n\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\tconst c3_1 = cos( ( c - a ) / 2 );\n\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\tswitch ( order ) {\n\n\t\tcase 'XYX':\n\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YZY':\n\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZXZ':\n\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'XZX':\n\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YXY':\n\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZYZ':\n\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t}\n\n}\n\nvar MathUtils = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tDEG2RAD: DEG2RAD,\n\tRAD2DEG: RAD2DEG,\n\tgenerateUUID: generateUUID,\n\tclamp: clamp,\n\teuclideanModulo: euclideanModulo,\n\tmapLinear: mapLinear,\n\tinverseLerp: inverseLerp,\n\tlerp: lerp,\n\tdamp: damp,\n\tpingpong: pingpong,\n\tsmoothstep: smoothstep,\n\tsmootherstep: smootherstep,\n\trandInt: randInt,\n\trandFloat: randFloat,\n\trandFloatSpread: randFloatSpread,\n\tseededRandom: seededRandom,\n\tdegToRad: degToRad,\n\tradToDeg: radToDeg,\n\tisPowerOfTwo: isPowerOfTwo,\n\tceilPowerOfTwo: ceilPowerOfTwo,\n\tfloorPowerOfTwo: floorPowerOfTwo,\n\tsetQuaternionFromProperEuler: setQuaternionFromProperEuler\n});\n\nclass Vector2 {\n\n\tconstructor( x = 0, y = 0 ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.x;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.x = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.y;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.y = value;\n\n\t}\n\n\tset( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tangle() {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tconst angle = Math.atan2( - this.y, - this.x ) + Math.PI;\n\n\t\treturn angle;\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t}\n\n\trotateAround( center, angle ) {\n\n\t\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tconst x = this.x - center.x;\n\t\tconst y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\n\t}\n\n}\n\nVector2.prototype.isVector2 = true;\n\nclass Matrix3 {\n\n\tconstructor() {\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t];\n\n\t\tif ( arguments.length > 0 ) {\n\n\t\t\tconsole.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix4( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t}\n\n\tinvert() {\n\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\ttranspose() {\n\n\t\tlet tmp;\n\t\tconst m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tgetNormalMatrix( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).invert().transpose();\n\n\t}\n\n\ttransposeIntoArray( r ) {\n\n\t\tconst m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tconst c = Math.cos( rotation );\n\t\tconst s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tscale( sx, sy ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx;\n\t\tte[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy;\n\n\t\treturn this;\n\n\t}\n\n\trotate( theta ) {\n\n\t\tconst c = Math.cos( theta );\n\t\tconst s = Math.sin( theta );\n\n\t\tconst te = this.elements;\n\n\t\tconst a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];\n\t\tconst a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ];\n\n\t\tte[ 0 ] = c * a11 + s * a21;\n\t\tte[ 3 ] = c * a12 + s * a22;\n\t\tte[ 6 ] = c * a13 + s * a23;\n\n\t\tte[ 1 ] = - s * a11 + c * a21;\n\t\tte[ 4 ] = - s * a12 + c * a22;\n\t\tte[ 7 ] = - s * a13 + c * a23;\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( tx, ty ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ];\n\t\tte[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t}\n\n}\n\nMatrix3.prototype.isMatrix3 = true;\n\nfunction arrayMax( array ) {\n\n\tif ( array.length === 0 ) return - Infinity;\n\n\tlet max = array[ 0 ];\n\n\tfor ( let i = 1, l = array.length; i < l; ++ i ) {\n\n\t\tif ( array[ i ] > max ) max = array[ i ];\n\n\t}\n\n\treturn max;\n\n}\n\nconst TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\tUint8ClampedArray: Uint8ClampedArray,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\nfunction getTypedArray( type, buffer ) {\n\n\treturn new TYPED_ARRAYS[ type ]( buffer );\n\n}\n\nfunction createElementNS( name ) {\n\n\treturn document.createElementNS( 'http://www.w3.org/1999/xhtml', name );\n\n}\n\n/**\n * cyrb53 hash for string from: https://stackoverflow.com/a/52171480\n *\n * Public Domain, @bryc - https://stackoverflow.com/users/815680/bryc\n *\n * It is roughly similar to the well-known MurmurHash/xxHash algorithms. It uses a combination\n * of multiplication and Xorshift to generate the hash, but not as thorough. As a result it's\n * faster than either would be in JavaScript and significantly simpler to implement. Keep in\n * mind this is not a secure algorithm, if privacy/security is a concern, this is not for you.\n *\n * @param {string} str\n * @param {number} seed, default 0\n * @returns number\n */\nfunction hashString( str, seed = 0 ) {\n\n\tlet h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;\n\n\tfor ( let i = 0, ch; i < str.length; i ++ ) {\n\n\t\tch = str.charCodeAt( i );\n\n\t\th1 = Math.imul( h1 ^ ch, 2654435761 );\n\n\t\th2 = Math.imul( h2 ^ ch, 1597334677 );\n\n\t}\n\n\th1 = Math.imul( h1 ^ ( h1 >>> 16 ), 2246822507 ) ^ Math.imul( h2 ^ ( h2 >>> 13 ), 3266489909 );\n\n\th2 = Math.imul( h2 ^ ( h2 >>> 16 ), 2246822507 ) ^ Math.imul( h1 ^ ( h1 >>> 13 ), 3266489909 );\n\n\treturn 4294967296 * ( 2097151 & h2 ) + ( h1 >>> 0 );\n\n}\n\nlet _canvas;\n\nclass ImageUtils {\n\n\tstatic getDataURL( image ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement == 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = createElementNS( 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image );\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n}\n\nlet textureId = 0;\n\nclass Texture extends EventDispatcher {\n\n\tconstructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1, encoding = LinearEncoding ) {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.image = image;\n\t\tthis.mipmaps = [];\n\n\t\tthis.mapping = mapping;\n\n\t\tthis.wrapS = wrapS;\n\t\tthis.wrapT = wrapT;\n\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\n\t\tthis.anisotropy = anisotropy;\n\n\t\tthis.format = format;\n\t\tthis.internalFormat = null;\n\t\tthis.type = type;\n\n\t\tthis.offset = new Vector2( 0, 0 );\n\t\tthis.repeat = new Vector2( 1, 1 );\n\t\tthis.center = new Vector2( 0, 0 );\n\t\tthis.rotation = 0;\n\n\t\tthis.matrixAutoUpdate = true;\n\t\tthis.matrix = new Matrix3();\n\n\t\tthis.generateMipmaps = true;\n\t\tthis.premultiplyAlpha = false;\n\t\tthis.flipY = true;\n\t\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t\t//\n\t\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\t\tthis.encoding = encoding;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\n\t\tthis.isRenderTargetTexture = false;\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.image = source.image;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.internalFormat = source.internalFormat;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.encoding = source.encoding;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\tmapping: this.mapping,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\ttype: this.type,\n\t\t\tencoding: this.encoding,\n\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY,\n\n\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\n\n\t\t};\n\n\t\tif ( this.image !== undefined ) {\n\n\t\t\t// TODO: Move to THREE.Image\n\n\t\t\tconst image = this.image;\n\n\t\t\tif ( image.uuid === undefined ) {\n\n\t\t\t\timage.uuid = generateUUID(); // UGH\n\n\t\t\t}\n\n\t\t\tif ( ! isRootObject && meta.images[ image.uuid ] === undefined ) {\n\n\t\t\t\tlet url;\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\t// process array of images e.g. CubeTexture\n\n\t\t\t\t\turl = [];\n\n\t\t\t\t\tfor ( let i = 0, l = image.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t// check cube texture with data textures\n\n\t\t\t\t\t\tif ( image[ i ].isDataTexture ) {\n\n\t\t\t\t\t\t\turl.push( serializeImage( image[ i ].image ) );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\turl.push( serializeImage( image[ i ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// process single image\n\n\t\t\t\t\turl = serializeImage( image );\n\n\t\t\t\t}\n\n\t\t\t\tmeta.images[ image.uuid ] = {\n\t\t\t\t\tuuid: image.uuid,\n\t\t\t\t\turl: url\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\toutput.image = image.uuid;\n\n\t\t}\n\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) output.userData = this.userData;\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\ttransformUv( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t\treturn uv;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n}\n\nTexture.DEFAULT_IMAGE = undefined;\nTexture.DEFAULT_MAPPING = UVMapping;\n\nTexture.prototype.isTexture = true;\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.prototype.slice.call( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nclass Vector4 {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.z;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.z = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.w;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.w = value;\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\t\tthis.w *= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tsetAxisAngleFromQuaternion( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tconst s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetAxisAngleFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tlet angle, x, y, z; // variables for result\n\t\tconst epsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tconst xx = ( m11 + 1 ) / 2;\n\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\tconst yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\t\t( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\t\tthis.w = Math.max( minVal, Math.min( maxVal, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\t\tthis.w = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\t\tyield this.w;\n\n\t}\n\n}\n\nVector4.prototype.isVector4 = true;\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nclass WebGLRenderTarget extends EventDispatcher {\n\n\tconstructor( width, height, options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.depth = 1;\n\n\t\tthis.scissor = new Vector4( 0, 0, width, height );\n\t\tthis.scissorTest = false;\n\n\t\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\t\tthis.texture = new Texture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t\tthis.texture.image = { width: width, height: height, depth: 1 };\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.internalFormat = options.internalFormat !== undefined ? options.internalFormat : null;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\t\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false;\n\t\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n\t}\n\n\tsetTexture( texture ) {\n\n\t\ttexture.image = {\n\t\t\twidth: this.width,\n\t\t\theight: this.height,\n\t\t\tdepth: this.depth\n\t\t};\n\n\t\tthis.texture = texture;\n\n\t}\n\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tthis.texture.image.width = width;\n\t\t\tthis.texture.image.height = height;\n\t\t\tthis.texture.image.depth = depth;\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.texture = source.texture.clone();\n\t\tthis.texture.image = { ...this.texture.image }; // See #20328.\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\t\tthis.depthTexture = source.depthTexture;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nWebGLRenderTarget.prototype.isWebGLRenderTarget = true;\n\nclass WebGLMultipleRenderTargets extends WebGLRenderTarget {\n\n\tconstructor( width, height, count ) {\n\n\t\tsuper( width, height );\n\n\t\tconst texture = this.texture;\n\n\t\tthis.texture = [];\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.texture[ i ] = texture.clone();\n\n\t\t}\n\n\t}\n\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tfor ( let i = 0, il = this.texture.length; i < il; i ++ ) {\n\n\t\t\t\tthis.texture[ i ].image.width = width;\n\t\t\t\tthis.texture[ i ].image.height = height;\n\t\t\t\tthis.texture[ i ].image.depth = depth;\n\n\t\t\t}\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.dispose();\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\n\n\t\tthis.viewport.set( 0, 0, this.width, this.height );\n\t\tthis.scissor.set( 0, 0, this.width, this.height );\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\t\tthis.depthTexture = source.depthTexture;\n\n\t\tthis.texture.length = 0;\n\n\t\tfor ( let i = 0, il = source.texture.length; i < il; i ++ ) {\n\n\t\t\tthis.texture[ i ] = source.texture[ i ].clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nWebGLMultipleRenderTargets.prototype.isWebGLMultipleRenderTargets = true;\n\nclass WebGLMultisampleRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width, height, options ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.samples = 4;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy.call( this, source );\n\n\t\tthis.samples = source.samples;\n\n\t\treturn this;\n\n\t}\n\n}\n\nWebGLMultisampleRenderTarget.prototype.isWebGLMultisampleRenderTarget = true;\n\nclass Quaternion {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\tstatic slerp( qa, qb, qm, t ) {\n\n\t\tconsole.warn( 'THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.' );\n\t\treturn qm.slerpQuaternions( qa, qb, t );\n\n\t}\n\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( t === 0 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( t === 1 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x1;\n\t\t\tdst[ dstOffset + 1 ] = y1;\n\t\t\tdst[ dstOffset + 2 ] = z1;\n\t\t\tdst[ dstOffset + 3 ] = w1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tconst sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tconst tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\tcopy( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromEuler( euler, update ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tthrow new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update !== false ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAxisAngle( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < Number.EPSILON ) {\n\n\t\t\t// vFrom and vTo point in opposite directions\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\tinvert() {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t}\n\n\tconjugate() {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t}\n\n\tnormalize() {\n\n\t\tlet l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( q, p ) {\n\n\t\tif ( p !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );\n\t\t\treturn this.multiplyQuaternions( q, p );\n\n\t\t}\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t}\n\n\tpremultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerp( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tconst x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tlet cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize();\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerpQuaternions( qa, qb, t ) {\n\n\t\tthis.copy( qa ).slerp( qb, t );\n\n\t}\n\n\trandom() {\n\n\t\t// Derived from http://planning.cs.uiuc.edu/node198.html\n\t\t// Note, this source uses w, x, y, z ordering,\n\t\t// so we swap the order below.\n\n\t\tconst u1 = Math.random();\n\t\tconst sqrt1u1 = Math.sqrt( 1 - u1 );\n\t\tconst sqrtu1 = Math.sqrt( u1 );\n\n\t\tconst u2 = 2 * Math.PI * Math.random();\n\n\t\tconst u3 = 2 * Math.PI * Math.random();\n\n\t\treturn this.set(\n\t\t\tsqrt1u1 * Math.cos( u2 ),\n\t\t\tsqrtu1 * Math.sin( u3 ),\n\t\t\tsqrtu1 * Math.cos( u3 ),\n\t\t\tsqrt1u1 * Math.sin( u2 ),\n\t\t);\n\n\t}\n\n\tequals( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis._x = attribute.getX( index );\n\t\tthis._y = attribute.getY( index );\n\t\tthis._z = attribute.getZ( index );\n\t\tthis._w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n}\n\nQuaternion.prototype.isQuaternion = true;\n\nclass Vector3 {\n\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t}\n\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );\n\t\t\treturn this.multiplyVectors( v, w );\n\n\t\t}\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyVectors( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyEuler( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromEuler( euler ) );\n\n\t}\n\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tconst ix = qw * x + qy * z - qz * y;\n\t\tconst iy = qw * y + qz * x - qx * z;\n\t\tconst iz = qw * z + qx * y - qy * x;\n\t\tconst iw = - qx * x - qy * y - qz * z;\n\n\t\t// calculate result * inverse quat\n\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\treturn this;\n\n\t}\n\n\tproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t}\n\n\t// TODO lengthSquared?\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tcross( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );\n\t\t\treturn this.crossVectors( v, w );\n\n\t\t}\n\n\t\treturn this.crossVectors( this, v );\n\n\t}\n\n\tcrossVectors( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t}\n\n\tprojectOnVector( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector$c.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector$c );\n\n\t}\n\n\treflect( normal ) {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\treturn this.sub( _vector$c.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t}\n\n\tsetFromSpherical( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixScale( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixColumn( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\trandomDirection() {\n\n\t\t// Derived from https://mathworld.wolfram.com/SpherePointPicking.html\n\n\t\tconst u = ( Math.random() - 0.5 ) * 2;\n\t\tconst t = Math.random() * Math.PI * 2;\n\t\tconst f = Math.sqrt( 1 - u ** 2 );\n\n\t\tthis.x = f * Math.cos( t );\n\t\tthis.y = f * Math.sin( t );\n\t\tthis.z = u;\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\n\t}\n\n}\n\nVector3.prototype.isVector3 = true;\n\nconst _vector$c = /*@__PURE__*/ new Vector3();\nconst _quaternion$4 = /*@__PURE__*/ new Quaternion();\n\nclass Box3 {\n\n\tconstructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) {\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromArray( array ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tconst x = array[ i ];\n\t\t\tconst y = array[ i + 1 ];\n\t\t\tconst z = array[ i + 2 ];\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromBufferAttribute( attribute ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\tconst x = attribute.getX( i );\n\t\t\tconst y = attribute.getY( i );\n\t\t\tconst z = attribute.getZ( i );\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$b.copy( size ).multiplyScalar( 0.5 );\n\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\texpandByObject( object ) {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t}\n\n\t\t\t_box$3.copy( geometry.boundingBox );\n\t\t\t_box$3.applyMatrix4( object.matrixWorld );\n\n\t\t\tthis.union( _box$3 );\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis.expandByObject( children[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector$b );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector$b.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tlet min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t}\n\n\tintersectsTriangle( triangle ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// compute box center and extents\n\t\tthis.getCenter( _center );\n\t\t_extents.subVectors( this.max, _center );\n\n\t\t// translate triangle to aabb origin\n\t\t_v0$2.subVectors( triangle.a, _center );\n\t\t_v1$7.subVectors( triangle.b, _center );\n\t\t_v2$3.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1$7, _v0$2 );\n\t\t_f1.subVectors( _v2$3, _v1$7 );\n\t\t_f2.subVectors( _v0$2, _v2$3 );\n\n\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t// 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\n\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\tlet axes = [\n\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t];\n\t\tif ( ! satForAxes( axes, _v0$2, _v1$7, _v2$3, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// test 3 face normals from the aabb\n\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\tif ( ! satForAxes( axes, _v0$2, _v1$7, _v2$3, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// finally testing the face normal of the triangle\n\t\t// use already existing triangle edge vectors here\n\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\treturn satForAxes( axes, _v0$2, _v1$7, _v2$3, _extents );\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\tconst clampedPoint = _vector$b.copy( point ).clamp( this.min, this.max );\n\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tgetBoundingSphere( target ) {\n\n\t\tthis.getCenter( target.center );\n\n\t\ttarget.radius = this.getSize( _vector$b ).length() * 0.5;\n\n\t\treturn target;\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// 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.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty() ) return this;\n\n\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\tthis.setFromPoints( _points );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nBox3.prototype.isBox3 = true;\n\nconst _points = [\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3()\n];\n\nconst _vector$b = /*@__PURE__*/ new Vector3();\n\nconst _box$3 = /*@__PURE__*/ new Box3();\n\n// triangle centered vertices\n\nconst _v0$2 = /*@__PURE__*/ new Vector3();\nconst _v1$7 = /*@__PURE__*/ new Vector3();\nconst _v2$3 = /*@__PURE__*/ new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = /*@__PURE__*/ new Vector3();\nconst _f1 = /*@__PURE__*/ new Vector3();\nconst _f2 = /*@__PURE__*/ new Vector3();\n\nconst _center = /*@__PURE__*/ new Vector3();\nconst _extents = /*@__PURE__*/ new Vector3();\nconst _triangleNormal = /*@__PURE__*/ new Vector3();\nconst _testAxis = /*@__PURE__*/ new Vector3();\n\nfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t_testAxis.fromArray( axes, i );\n\t\t// project the aabb onto the seperating axis\n\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t// project all 3 vertices of the triangle onto the seperating axis\n\t\tconst p0 = v0.dot( _testAxis );\n\t\tconst p1 = v1.dot( _testAxis );\n\t\tconst p2 = v2.dot( _testAxis );\n\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t// the axis is seperating and we can exit\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nconst _box$2 = /*@__PURE__*/ new Box3();\nconst _v1$6 = /*@__PURE__*/ new Vector3();\nconst _toFarthestPoint = /*@__PURE__*/ new Vector3();\nconst _toPoint = /*@__PURE__*/ new Vector3();\n\nclass Sphere {\n\n\tconstructor( center = new Vector3(), radius = - 1 ) {\n\n\t\tthis.center = center;\n\t\tthis.radius = radius;\n\n\t}\n\n\tset( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points, optionalCenter ) {\n\n\t\tconst center = this.center;\n\n\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\tcenter.copy( optionalCenter );\n\n\t\t} else {\n\n\t\t\t_box$2.setFromPoints( points ).getCenter( center );\n\n\t\t}\n\n\t\tlet maxRadiusSq = 0;\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t}\n\n\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\treturn ( this.radius < 0 );\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.center.set( 0, 0, 0 );\n\t\tthis.radius = - 1;\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tconst deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\t// Empty sphere produces empty bounding box\n\t\t\ttarget.makeEmpty();\n\t\t\treturn target;\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\t// from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L649-L671\n\n\t\t_toPoint.subVectors( point, this.center );\n\n\t\tconst lengthSq = _toPoint.lengthSq();\n\n\t\tif ( lengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\tconst length = Math.sqrt( lengthSq );\n\t\t\tconst missingRadiusHalf = ( length - this.radius ) * 0.5;\n\n\t\t\t// Nudge this sphere towards the target point. Add half the missing distance to radius,\n\t\t\t// and the other half to position. This gives a tighter enclosure, instead of if\n\t\t\t// the whole missing distance were just added to radius.\n\n\t\t\tthis.center.add( _toPoint.multiplyScalar( missingRadiusHalf / length ) );\n\t\t\tthis.radius += missingRadiusHalf;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunion( sphere ) {\n\n\t\t// from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L759-L769\n\n\t\t// To enclose another sphere into this sphere, we only need to enclose two points:\n\t\t// 1) Enclose the farthest point on the other sphere into this sphere.\n\t\t// 2) Enclose the opposite point of the farthest point into this sphere.\n\n\t\t_toFarthestPoint.subVectors( sphere.center, this.center ).normalize().multiplyScalar( sphere.radius );\n\n\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).add( _toFarthestPoint ) );\n\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).sub( _toFarthestPoint ) );\n\n\t\treturn this;\n\n\t}\n\n\tequals( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$a = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal$1 = /*@__PURE__*/ new Vector3();\n\nclass Ray {\n\n\tconstructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {\n\n\t\tthis.origin = origin;\n\t\tthis.direction = direction;\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn target.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t}\n\n\tlookAt( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector$a ) );\n\n\t\treturn this;\n\n\t}\n\n\tclosestPointToPoint( point, target ) {\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tconst directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector$a.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector$a.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\treturn _vector$a.distanceToSquared( point );\n\n\t}\n\n\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segDir ).multiplyScalar( s1 ).add( _segCenter );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t}\n\n\tintersectSphere( sphere, target ) {\n\n\t\t_vector$a.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector$a.dot( this.direction );\n\t\tconst d2 = _vector$a.dot( _vector$a ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tdistanceToPlane( plane ) {\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t}\n\n\tintersectPlane( plane, target ) {\n\n\t\tconst t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t}\n\n\tintersectBox( box, target ) {\n\n\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\t// These lines also handle the case where tmin or tmax is NaN\n\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\n\n\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\n\n\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn this.intersectBox( box, _vector$a ) !== null;\n\n\t}\n\n\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal$1.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal$1 );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = - 1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal$1 );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\n\n\t}\n\n\tapplyMatrix4( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t}\n\n\tequals( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass Matrix4 {\n\n\tconstructor() {\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t];\n\n\t\tif ( arguments.length > 0 ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tcopyPosition( m ) {\n\n\t\tconst te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix3( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 3 ], me[ 6 ], 0,\n\t\t\tme[ 1 ], me[ 4 ], me[ 7 ], 0,\n\t\t\tme[ 2 ], me[ 5 ], me[ 8 ], 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmakeBasis( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractRotation( m ) {\n\n\t\t// this method does not support reflection matrices\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tconst scaleX = 1 / _v1$5.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1$5.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1$5.setFromMatrixColumn( m, 2 ).length();\n\n\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromEuler( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tconst te = this.elements;\n\n\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromQuaternion( q ) {\n\n\t\treturn this.compose( _zero, q, _one );\n\n\t}\n\n\tlookAt( eye, target, up ) {\n\n\t\tconst te = this.elements;\n\n\t\t_z.subVectors( eye, target );\n\n\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t// eye and target are in the same position\n\n\t\t\t_z.z = 1;\n\n\t\t}\n\n\t\t_z.normalize();\n\t\t_x.crossVectors( up, _z );\n\n\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t// up and z are parallel\n\n\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t_z.x += 0.0001;\n\n\t\t\t} else {\n\n\t\t\t\t_z.z += 0.0001;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t}\n\n\t\t_x.normalize();\n\t\t_y.crossVectors( _z, _x );\n\n\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m, n ) {\n\n\t\tif ( n !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );\n\t\t\treturn this.multiplyMatrices( m, n );\n\n\t\t}\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tconst b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tconst n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t}\n\n\ttranspose() {\n\n\t\tconst te = this.elements;\n\t\tlet tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tsetPosition( x, y, z ) {\n\n\t\tconst te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tinvert() {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tconst det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\tscale( v ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxScaleOnAxis() {\n\n\t\tconst te = this.elements;\n\n\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tconst scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t}\n\n\tmakeTranslation( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, x,\n\t\t\t0, 1, 0, y,\n\t\t\t0, 0, 1, z,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationX( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationY( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationZ( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationAxis( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tconst c = Math.cos( angle );\n\t\tconst s = Math.sin( angle );\n\t\tconst t = 1 - c;\n\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\tconst tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeShear( xy, xz, yx, yz, zx, zy ) {\n\n\t\tthis.set(\n\n\t\t\t1, yx, zx, 0,\n\t\t\txy, 1, zy, 0,\n\t\t\txz, yz, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tdecompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tlet sx = _v1$5.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tconst sy = _v1$5.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tconst sz = _v1$5.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t// if determine is negative, we need to invert one scale\n\t\tconst det = this.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\tposition.x = te[ 12 ];\n\t\tposition.y = te[ 13 ];\n\t\tposition.z = te[ 14 ];\n\n\t\t// scale the rotation part\n\t\t_m1$2.copy( this );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\t_m1$2.elements[ 0 ] *= invSX;\n\t\t_m1$2.elements[ 1 ] *= invSX;\n\t\t_m1$2.elements[ 2 ] *= invSX;\n\n\t\t_m1$2.elements[ 4 ] *= invSY;\n\t\t_m1$2.elements[ 5 ] *= invSY;\n\t\t_m1$2.elements[ 6 ] *= invSY;\n\n\t\t_m1$2.elements[ 8 ] *= invSZ;\n\t\t_m1$2.elements[ 9 ] *= invSZ;\n\t\t_m1$2.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1$2 );\n\n\t\tscale.x = sx;\n\t\tscale.y = sy;\n\t\tscale.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tmakePerspective( left, right, top, bottom, near, far ) {\n\n\t\tif ( far === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' );\n\n\t\t}\n\n\t\tconst te = this.elements;\n\t\tconst x = 2 * near / ( right - left );\n\t\tconst y = 2 * near / ( top - bottom );\n\n\t\tconst a = ( right + left ) / ( right - left );\n\t\tconst b = ( top + bottom ) / ( top - bottom );\n\t\tconst c = - ( far + near ) / ( far - near );\n\t\tconst d = - 2 * far * near / ( far - near );\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t}\n\n\tmakeOrthographic( left, right, top, bottom, near, far ) {\n\n\t\tconst te = this.elements;\n\t\tconst w = 1.0 / ( right - left );\n\t\tconst h = 1.0 / ( top - bottom );\n\t\tconst p = 1.0 / ( far - near );\n\n\t\tconst x = ( right + left ) * w;\n\t\tconst y = ( top + bottom ) * h;\n\t\tconst z = ( far + near ) * p;\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nMatrix4.prototype.isMatrix4 = true;\n\nconst _v1$5 = /*@__PURE__*/ new Vector3();\nconst _m1$2 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\nconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nconst _matrix$1 = /*@__PURE__*/ new Matrix4();\nconst _quaternion$3 = /*@__PURE__*/ new Quaternion();\n\nclass Euler {\n\n\tconstructor( x = 0, y = 0, z = 0, order = Euler.DefaultOrder ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget order() {\n\n\t\treturn this._order;\n\n\t}\n\n\tset order( value ) {\n\n\t\tthis._order = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, order = this._order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t}\n\n\tcopy( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m, order = this._order, update = true ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements;\n\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromQuaternion( q, order, update ) {\n\n\t\t_matrix$1.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix$1, order, update );\n\n\t}\n\n\tsetFromVector3( v, order = this._order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order );\n\n\t}\n\n\treorder( newOrder ) {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t_quaternion$3.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion$3, newOrder );\n\n\t}\n\n\tequals( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t}\n\n\tfromArray( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t}\n\n\ttoVector3( optionalResult ) {\n\n\t\tif ( optionalResult ) {\n\n\t\t\treturn optionalResult.set( this._x, this._y, this._z );\n\n\t\t} else {\n\n\t\t\treturn new Vector3( this._x, this._y, this._z );\n\n\t\t}\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n}\n\nEuler.prototype.isEuler = true;\n\nEuler.DefaultOrder = 'XYZ';\nEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\nclass Layers {\n\n\tconstructor() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tset( channel ) {\n\n\t\tthis.mask = 1 << channel | 0;\n\n\t}\n\n\tenable( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t}\n\n\tenableAll() {\n\n\t\tthis.mask = 0xffffffff | 0;\n\n\t}\n\n\ttoggle( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t}\n\n\tdisable( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t}\n\n\tdisableAll() {\n\n\t\tthis.mask = 0;\n\n\t}\n\n\ttest( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n}\n\nlet _object3DId = 0;\n\nconst _v1$4 = /*@__PURE__*/ new Vector3();\nconst _q1 = /*@__PURE__*/ new Quaternion();\nconst _m1$1 = /*@__PURE__*/ new Matrix4();\nconst _target = /*@__PURE__*/ new Vector3();\n\nconst _position$3 = /*@__PURE__*/ new Vector3();\nconst _scale$2 = /*@__PURE__*/ new Vector3();\nconst _quaternion$2 = /*@__PURE__*/ new Quaternion();\n\nconst _xAxis = /*@__PURE__*/ new Vector3( 1, 0, 0 );\nconst _yAxis = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nconst _zAxis = /*@__PURE__*/ new Vector3( 0, 0, 1 );\n\nconst _addedEvent = { type: 'added' };\nconst _removedEvent = { type: 'removed' };\n\nclass Object3D extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Object3D';\n\n\t\tthis.parent = null;\n\t\tthis.children = [];\n\n\t\tthis.up = Object3D.DefaultUp.clone();\n\n\t\tconst position = new Vector3();\n\t\tconst rotation = new Euler();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3( 1, 1, 1 );\n\n\t\tfunction onRotationChange() {\n\n\t\t\tquaternion.setFromEuler( rotation, false );\n\n\t\t}\n\n\t\tfunction onQuaternionChange() {\n\n\t\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t\t}\n\n\t\trotation._onChange( onRotationChange );\n\t\tquaternion._onChange( onQuaternionChange );\n\n\t\tObject.defineProperties( this, {\n\t\t\tposition: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\tquaternion: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\tscale: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: scale\n\t\t\t},\n\t\t\tmodelViewMatrix: {\n\t\t\t\tvalue: new Matrix4()\n\t\t\t},\n\t\t\tnormalMatrix: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t} );\n\n\t\tthis.matrix = new Matrix4();\n\t\tthis.matrixWorld = new Matrix4();\n\n\t\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\tthis.layers = new Layers();\n\t\tthis.visible = true;\n\n\t\tthis.castShadow = false;\n\t\tthis.receiveShadow = false;\n\n\t\tthis.frustumCulled = true;\n\t\tthis.renderOrder = 0;\n\n\t\tthis.animations = [];\n\n\t\tthis.userData = {};\n\n\t}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tonAfterRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tthis.matrix.premultiply( matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t}\n\n\tsetRotationFromAxisAngle( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t}\n\n\tsetRotationFromEuler( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t}\n\n\tsetRotationFromMatrix( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t}\n\n\tsetRotationFromQuaternion( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t}\n\n\trotateOnAxis( axis, angle ) {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.multiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateOnWorldAxis( axis, angle ) {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.premultiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t}\n\n\trotateY( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t}\n\n\ttranslateOnAxis( axis, distance ) {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_v1$4.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1$4.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslateX( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t}\n\n\ttranslateY( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t}\n\n\ttranslateZ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t}\n\n\tlocalToWorld( vector ) {\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t}\n\n\tworldToLocal( vector ) {\n\n\t\treturn vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() );\n\n\t}\n\n\tlookAt( x, y, z ) {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\t_target.copy( x );\n\n\t\t} else {\n\n\t\t\t_target.set( x, y, z );\n\n\t\t}\n\n\t\tconst parent = this.parent;\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_position$3.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1$1.lookAt( _position$3, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1$1.lookAt( _target, _position$3, this.up );\n\n\t\t}\n\n\t\tthis.quaternion.setFromRotationMatrix( _m1$1 );\n\n\t\tif ( parent ) {\n\n\t\t\t_m1$1.extractRotation( parent.matrixWorld );\n\t\t\t_q1.setFromRotationMatrix( _m1$1 );\n\t\t\tthis.quaternion.premultiply( _q1.invert() );\n\n\t\t}\n\n\t}\n\n\tadd( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object can\\'t be added as a child of itself.', object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object && object.isObject3D ) {\n\n\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\tobject.parent.remove( object );\n\n\t\t\t}\n\n\t\t\tobject.parent = this;\n\t\t\tthis.children.push( object );\n\n\t\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremoveFromParent() {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tparent.remove( this );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclear() {\n\n\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\tconst object = this.children[ i ];\n\n\t\t\tobject.parent = null;\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\tthis.children.length = 0;\n\n\t\treturn this;\n\n\n\t}\n\n\tattach( object ) {\n\n\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_m1$1.copy( this.matrixWorld ).invert();\n\n\t\tif ( object.parent !== null ) {\n\n\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t_m1$1.multiply( object.parent.matrixWorld );\n\n\t\t}\n\n\t\tobject.applyMatrix4( _m1$1 );\n\n\t\tthis.add( object );\n\n\t\tobject.updateWorldMatrix( false, true );\n\n\t\treturn this;\n\n\t}\n\n\tgetObjectById( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t}\n\n\tgetObjectByName( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t}\n\n\tgetObjectByProperty( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = this.children[ i ];\n\t\t\tconst object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tgetWorldPosition( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t}\n\n\tgetWorldQuaternion( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, target, _scale$2 );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldScale( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, _quaternion$2, target );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t}\n\n\traycast() {}\n\n\ttraverse( callback ) {\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseVisible( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseAncestors( callback ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// update children\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].updateMatrixWorld( force );\n\n\t\t}\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.parent === null ) {\n\n\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t} else {\n\n\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t}\n\n\t\t// update children\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateWorldMatrix( false, true );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tconst output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {},\n\t\t\t\tskeletons: {},\n\t\t\t\tanimations: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tconst object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData;\n\n\t\tobject.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t// object specific properties\n\n\t\tif ( this.isInstancedMesh ) {\n\n\t\t\tobject.type = 'InstancedMesh';\n\t\t\tobject.count = this.count;\n\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\t\t\tif ( this.instanceColor !== null ) object.instanceColor = this.instanceColor.toJSON();\n\n\t\t}\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.isScene ) {\n\n\t\t\tif ( this.background ) {\n\n\t\t\t\tif ( this.background.isColor ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON();\n\n\t\t\t\t} else if ( this.background.isTexture ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON( meta ).uuid;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.environment && this.environment.isTexture ) {\n\n\t\t\t\tobject.environment = this.environment.toJSON( meta ).uuid;\n\n\t\t\t}\n\n\t\t} else if ( this.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.isSkinnedMesh ) {\n\n\t\t\tobject.bindMode = this.bindMode;\n\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\tobject.skeleton = this.skeleton.uuid;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tconst uuids = [];\n\n\t\t\t\tfor ( let i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.animations.length > 0 ) {\n\n\t\t\tobject.animations = [];\n\n\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst geometries = extractFromCache( meta.geometries );\n\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst shapes = extractFromCache( meta.shapes );\n\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\tconst animations = extractFromCache( meta.animations );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\tif ( animations.length > 0 ) output.animations = animations;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t}\n\n\tclone( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t}\n\n\tcopy( source, recursive = true ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.rotation.order = source.rotation.order;\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tconst child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nObject3D.DefaultUp = new Vector3( 0, 1, 0 );\nObject3D.DefaultMatrixAutoUpdate = true;\n\nObject3D.prototype.isObject3D = true;\n\nconst _v0$1 = /*@__PURE__*/ new Vector3();\nconst _v1$3 = /*@__PURE__*/ new Vector3();\nconst _v2$2 = /*@__PURE__*/ new Vector3();\nconst _v3$1 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nclass Triangle {\n\n\tconstructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t}\n\n\tstatic getNormal( a, b, c, target ) {\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0$1.subVectors( a, b );\n\t\ttarget.cross( _v0$1 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\n\n\t}\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t_v0$1.subVectors( c, a );\n\t\t_v1$3.subVectors( b, a );\n\t\t_v2$2.subVectors( point, a );\n\n\t\tconst dot00 = _v0$1.dot( _v0$1 );\n\t\tconst dot01 = _v0$1.dot( _v1$3 );\n\t\tconst dot02 = _v0$1.dot( _v2$2 );\n\t\tconst dot11 = _v1$3.dot( _v1$3 );\n\t\tconst dot12 = _v1$3.dot( _v2$2 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\t// arbitrary location outside of triangle?\n\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t}\n\n\tstatic containsPoint( point, a, b, c ) {\n\n\t\tthis.getBarycoord( point, a, b, c, _v3$1 );\n\n\t\treturn ( _v3$1.x >= 0 ) && ( _v3$1.y >= 0 ) && ( ( _v3$1.x + _v3$1.y ) <= 1 );\n\n\t}\n\n\tstatic getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) {\n\n\t\tthis.getBarycoord( point, p1, p2, p3, _v3$1 );\n\n\t\ttarget.set( 0, 0 );\n\t\ttarget.addScaledVector( uv1, _v3$1.x );\n\t\ttarget.addScaledVector( uv2, _v3$1.y );\n\t\ttarget.addScaledVector( uv3, _v3$1.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t_v0$1.subVectors( c, b );\n\t\t_v1$3.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn ( _v0$1.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;\n\n\t}\n\n\tset( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPointsAndIndices( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAttributeAndIndices( attribute, i0, i1, i2 ) {\n\n\t\tthis.a.fromBufferAttribute( attribute, i0 );\n\t\tthis.b.fromBufferAttribute( attribute, i1 );\n\t\tthis.c.fromBufferAttribute( attribute, i2 );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t}\n\n\tgetArea() {\n\n\t\t_v0$1.subVectors( this.c, this.b );\n\t\t_v1$3.subVectors( this.a, this.b );\n\n\t\treturn _v0$1.cross( _v1$3 ).length() * 0.5;\n\n\t}\n\n\tgetMidpoint( target ) {\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t}\n\n\tgetNormal( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\tgetPlane( target ) {\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t}\n\n\tgetBarycoord( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\tgetUV( point, uv1, uv2, uv3, target ) {\n\n\t\treturn Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\tclosestPointToPoint( p, target ) {\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t}\n\n\tequals( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n}\n\nlet materialId = 0;\n\nclass Material extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Material';\n\n\t\tthis.fog = true;\n\n\t\tthis.blending = NormalBlending;\n\t\tthis.side = FrontSide;\n\t\tthis.vertexColors = false;\n\n\t\tthis.opacity = 1;\n\t\tthis.format = RGBAFormat;\n\t\tthis.transparent = false;\n\n\t\tthis.blendSrc = SrcAlphaFactor;\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\t\tthis.blendEquation = AddEquation;\n\t\tthis.blendSrcAlpha = null;\n\t\tthis.blendDstAlpha = null;\n\t\tthis.blendEquationAlpha = null;\n\n\t\tthis.depthFunc = LessEqualDepth;\n\t\tthis.depthTest = true;\n\t\tthis.depthWrite = true;\n\n\t\tthis.stencilWriteMask = 0xff;\n\t\tthis.stencilFunc = AlwaysStencilFunc;\n\t\tthis.stencilRef = 0;\n\t\tthis.stencilFuncMask = 0xff;\n\t\tthis.stencilFail = KeepStencilOp;\n\t\tthis.stencilZFail = KeepStencilOp;\n\t\tthis.stencilZPass = KeepStencilOp;\n\t\tthis.stencilWrite = false;\n\n\t\tthis.clippingPlanes = null;\n\t\tthis.clipIntersection = false;\n\t\tthis.clipShadows = false;\n\n\t\tthis.shadowSide = null;\n\n\t\tthis.colorWrite = true;\n\n\t\tthis.precision = null; // override the renderer's default precision for this material\n\n\t\tthis.polygonOffset = false;\n\t\tthis.polygonOffsetFactor = 0;\n\t\tthis.polygonOffsetUnits = 0;\n\n\t\tthis.dithering = false;\n\n\t\tthis.alphaToCoverage = false;\n\t\tthis.premultipliedAlpha = false;\n\n\t\tthis.visible = true;\n\n\t\tthis.toneMapped = true;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\n\t\tthis._alphaTest = 0;\n\n\t}\n\n\tget alphaTest() {\n\n\t\treturn this._alphaTest;\n\n\t}\n\n\tset alphaTest( value ) {\n\n\t\tif ( this._alphaTest > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._alphaTest = value;\n\n\t}\n\n\tonBuild( /* shaderobject, renderer */ ) {}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {}\n\n\tonBeforeCompile( /* shaderobject, renderer */ ) {}\n\n\tcustomProgramCacheKey() {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t}\n\n\tsetValues( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Material: \\'' + key + '\\' parameter is undefined.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// for backward compatability if shading is set in the constructor\n\t\t\tif ( key === 'shading' ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\t\tthis.flatShading = ( newValue === FlatShading ) ? true : false;\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': \\'' + key + '\\' is not a property of this material.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRoot = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRoot ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.sheen !== undefined ) data.sheen = this.sheen;\n\t\tif ( this.sheenColor && this.sheenColor.isColor ) data.sheenColor = this.sheenColor.getHex();\n\t\tif ( this.sheenRoughness !== undefined ) data.sheenRoughness = this.sheenRoughness;\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.specularIntensity !== undefined ) data.specularIntensity = this.specularIntensity;\n\t\tif ( this.specularColor && this.specularColor.isColor ) data.specularColor = this.specularColor.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;\n\t\tif ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\tif ( this.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\n\t\tif ( this.lightMap && this.lightMap.isTexture ) {\n\n\t\t\tdata.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\t\tdata.lightMapIntensity = this.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\t\tif ( this.specularIntensityMap && this.specularIntensityMap.isTexture ) data.specularIntensityMap = this.specularIntensityMap.toJSON( meta ).uuid;\n\t\tif ( this.specularColorMap && this.specularColorMap.isTexture ) data.specularColorMap = this.specularColorMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\n\t\t}\n\n\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\t\tif ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;\n\t\tif ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.transmission !== undefined ) data.transmission = this.transmission;\n\t\tif ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid;\n\t\tif ( this.thickness !== undefined ) data.thickness = this.thickness;\n\t\tif ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;\n\t\tif ( this.attenuationDistance !== undefined ) data.attenuationDistance = this.attenuationDistance;\n\t\tif ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex();\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.shadowSide !== null ) data.shadowSide = this.shadowSide;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors ) data.vertexColors = true;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.format !== RGBAFormat ) data.format = this.format;\n\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\tdata.depthFunc = this.depthFunc;\n\t\tdata.depthTest = this.depthTest;\n\t\tdata.depthWrite = this.depthWrite;\n\t\tdata.colorWrite = this.colorWrite;\n\n\t\tdata.stencilWrite = this.stencilWrite;\n\t\tdata.stencilWriteMask = this.stencilWriteMask;\n\t\tdata.stencilFunc = this.stencilFunc;\n\t\tdata.stencilRef = this.stencilRef;\n\t\tdata.stencilFuncMask = this.stencilFuncMask;\n\t\tdata.stencilFail = this.stencilFail;\n\t\tdata.stencilZFail = this.stencilZFail;\n\t\tdata.stencilZPass = this.stencilZPass;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth && this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.alphaToCoverage === true ) data.alphaToCoverage = this.alphaToCoverage;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\n\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRoot ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.fog = source.fog;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.format = source.format;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.alphaToCoverage = source.alphaToCoverage;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\tthis.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n}\n\nMaterial.prototype.isMaterial = true;\n\nconst _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\n\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\nfunction SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nfunction LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n}\n\nclass Color {\n\n\tconstructor( r, g, b ) {\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\t\t\treturn this.set( r );\n\n\t\t}\n\n\t\treturn this.setRGB( r, g, b );\n\n\t}\n\n\tset( value ) {\n\n\t\tif ( value && value.isColor ) {\n\n\t\t\tthis.copy( value );\n\n\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\tthis.setHex( value );\n\n\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\tthis.setStyle( value );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetHex( hex ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\treturn this;\n\n\t}\n\n\tsetRGB( r, g, b ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\treturn this;\n\n\t}\n\n\tsetHSL( h, s, l ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = euclideanModulo( h, 1 );\n\t\ts = clamp( s, 0, 1 );\n\t\tl = clamp( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetStyle( style ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tlet m;\n\n\t\tif ( m = /^((?:rgb|hsl)a?)\\(([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\tconst h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\tconst s = parseInt( color[ 2 ], 10 ) / 100;\n\t\t\t\t\t\tconst l = parseInt( color[ 3 ], 10 ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setHSL( h, s, l );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f\\d]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tconst hex = m[ 1 ];\n\t\t\tconst size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( style && style.length > 0 ) {\n\n\t\t\treturn this.setColorName( style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetColorName( style ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style.toLowerCase() ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\tcopy( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t}\n\n\tcopyGammaToLinear( color, gammaFactor = 2.0 ) {\n\n\t\tthis.r = Math.pow( color.r, gammaFactor );\n\t\tthis.g = Math.pow( color.g, gammaFactor );\n\t\tthis.b = Math.pow( color.b, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToGamma( color, gammaFactor = 2.0 ) {\n\n\t\tconst safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0;\n\n\t\tthis.r = Math.pow( color.r, safeInverse );\n\t\tthis.g = Math.pow( color.g, safeInverse );\n\t\tthis.b = Math.pow( color.b, safeInverse );\n\n\t\treturn this;\n\n\t}\n\n\tconvertGammaToLinear( gammaFactor ) {\n\n\t\tthis.copyGammaToLinear( this, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToGamma( gammaFactor ) {\n\n\t\tthis.copyLinearToGamma( this, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tcopySRGBToLinear( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToSRGB( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tconvertSRGBToLinear() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\tgetHex() {\n\n\t\treturn ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0;\n\n\t}\n\n\tgetHexString() {\n\n\t\treturn ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 );\n\n\t}\n\n\tgetHSL( target ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tconst r = this.r, g = this.g, b = this.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tconst delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t}\n\n\tgetStyle() {\n\n\t\treturn 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';\n\n\t}\n\n\toffsetHSL( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\t_hslA.h += h; _hslA.s += s; _hslA.l += l;\n\n\t\tthis.setHSL( _hslA.h, _hslA.s, _hslA.l );\n\n\t\treturn this;\n\n\t}\n\n\tadd( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t}\n\n\taddColors( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t}\n\n\tlerp( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpColors( color1, color2, alpha ) {\n\n\t\tthis.r = color1.r + ( color2.r - color1.r ) * alpha;\n\t\tthis.g = color1.g + ( color2.g - color1.g ) * alpha;\n\t\tthis.b = color1.b + ( color2.b - color1.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\n\n\t\treturn this;\n\n\t}\n\n\tequals( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\tif ( attribute.normalized === true ) {\n\n\t\t\t// assuming Uint8Array\n\n\t\t\tthis.r /= 255;\n\t\t\tthis.g /= 255;\n\t\t\tthis.b /= 255;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.getHex();\n\n\t}\n\n}\n\nColor.NAMES = _colorKeywords;\n\nColor.prototype.isColor = true;\nColor.prototype.r = 1;\nColor.prototype.g = 1;\nColor.prototype.b = 1;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * depthTest: ,\n * depthWrite: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n * }\n */\n\nclass MeshBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // emissive\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshBasicMaterial.prototype.isMeshBasicMaterial = true;\n\nconst _vector$9 = /*@__PURE__*/ new Vector3();\nconst _vector2$1 = /*@__PURE__*/ new Vector2();\n\nclass BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.name = '';\n\n\t\tthis.array = array;\n\t\tthis.itemSize = itemSize;\n\t\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\t\tthis.normalized = normalized === true;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( let i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyArray( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t}\n\n\tcopyColorsArray( colors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\tlet color = colors[ i ];\n\n\t\t\tif ( color === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i );\n\t\t\t\tcolor = new Color();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = color.r;\n\t\t\tarray[ offset ++ ] = color.g;\n\t\t\tarray[ offset ++ ] = color.b;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyVector2sArray( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector2();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyVector3sArray( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector3();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyVector4sArray( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector4();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\t\t\tarray[ offset ++ ] = vector.w;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tif ( this.itemSize === 2 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector2$1.fromBufferAttribute( this, i );\n\t\t\t\t_vector2$1.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2$1.x, _vector2$1.y );\n\n\t\t\t}\n\n\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$9.fromBufferAttribute( this, i );\n\t\t\t\t_vector$9.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.x = this.getX( i );\n\t\t\t_vector$9.y = this.getY( i );\n\t\t\t_vector$9.z = this.getZ( i );\n\n\t\t\t_vector$9.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.x = this.getX( i );\n\t\t\t_vector$9.y = this.getY( i );\n\t\t\t_vector$9.z = this.getZ( i );\n\n\t\t\t_vector$9.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.x = this.getX( i );\n\t\t\t_vector$9.y = this.getY( i );\n\t\t\t_vector$9.z = this.getZ( i );\n\n\t\t\t_vector$9.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\treturn this.array[ index * this.itemSize ];\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 1 ];\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 2 ];\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 3 ];\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\titemSize: this.itemSize,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tarray: Array.prototype.slice.call( this.array ),\n\t\t\tnormalized: this.normalized\n\t\t};\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( this.usage !== StaticDrawUsage ) data.usage = this.usage;\n\t\tif ( this.updateRange.offset !== 0 || this.updateRange.count !== - 1 ) data.updateRange = this.updateRange;\n\n\t\treturn data;\n\n\t}\n\n}\n\nBufferAttribute.prototype.isBufferAttribute = true;\n\n//\n\nclass Int8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8ClampedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8ClampedArray( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nFloat16BufferAttribute.prototype.isFloat16BufferAttribute = true;\n\nclass Float32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float64BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float64Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nlet _id = 0;\n\nconst _m1 = /*@__PURE__*/ new Matrix4();\nconst _obj = /*@__PURE__*/ new Object3D();\nconst _offset = /*@__PURE__*/ new Vector3();\nconst _box$1 = /*@__PURE__*/ new Box3();\nconst _boxMorphTargets = /*@__PURE__*/ new Box3();\nconst _vector$8 = /*@__PURE__*/ new Vector3();\n\nclass BufferGeometry extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'id', { value: _id ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'BufferGeometry';\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\n\t\tthis.morphAttributes = {};\n\t\tthis.morphTargetsRelative = false;\n\n\t\tthis.groups = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tthis.drawRange = { start: 0, count: Infinity };\n\n\t\tthis.userData = {};\n\n\t}\n\n\tgetIndex() {\n\n\t\treturn this.index;\n\n\t}\n\n\tsetIndex( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetAttribute( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t}\n\n\tsetAttribute( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t}\n\n\tdeleteAttribute( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t}\n\n\thasAttribute( name ) {\n\n\t\treturn this.attributes[ name ] !== undefined;\n\n\t}\n\n\taddGroup( start, count, materialIndex = 0 ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex\n\n\t\t} );\n\n\t}\n\n\tclearGroups() {\n\n\t\tthis.groups = [];\n\n\t}\n\n\tsetDrawRange( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tconst normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tconst tangent = this.attributes.tangent;\n\n\t\tif ( tangent !== undefined ) {\n\n\t\t\ttangent.transformDirection( matrix );\n\n\t\t\ttangent.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\t_m1.makeRotationFromQuaternion( q );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateY( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\tscale( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\tlookAt( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t}\n\n\tcenter() {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tconst position = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingBox.set(\n\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t);\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_box$1.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.min, _box$1.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.max, _box$1.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$1.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$1.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position ) {\n\n\t\t\t// first, find the center of the bounding sphere\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t_box$1.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$1.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box$1.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$1.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box$1.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box$1.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box$1.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_box$1.getCenter( center );\n\n\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t_vector$8.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t}\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t_vector$8.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t_vector$8.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeTangents() {\n\n\t\tconst index = this.index;\n\t\tconst attributes = this.attributes;\n\n\t\t// based on http://www.terathon.com/code/tangent.html\n\t\t// (per vertex tangents)\n\n\t\tif ( index === null ||\n\t\t\t attributes.position === undefined ||\n\t\t\t attributes.normal === undefined ||\n\t\t\t attributes.uv === undefined ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst indices = index.array;\n\t\tconst positions = attributes.position.array;\n\t\tconst normals = attributes.normal.array;\n\t\tconst uvs = attributes.uv.array;\n\n\t\tconst nVertices = positions.length / 3;\n\n\t\tif ( attributes.tangent === undefined ) {\n\n\t\t\tthis.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * nVertices ), 4 ) );\n\n\t\t}\n\n\t\tconst tangents = attributes.tangent.array;\n\n\t\tconst tan1 = [], tan2 = [];\n\n\t\tfor ( let i = 0; i < nVertices; i ++ ) {\n\n\t\t\ttan1[ i ] = new Vector3();\n\t\t\ttan2[ i ] = new Vector3();\n\n\t\t}\n\n\t\tconst vA = new Vector3(),\n\t\t\tvB = new Vector3(),\n\t\t\tvC = new Vector3(),\n\n\t\t\tuvA = new Vector2(),\n\t\t\tuvB = new Vector2(),\n\t\t\tuvC = new Vector2(),\n\n\t\t\tsdir = new Vector3(),\n\t\t\ttdir = new Vector3();\n\n\t\tfunction handleTriangle( a, b, c ) {\n\n\t\t\tvA.fromArray( positions, a * 3 );\n\t\t\tvB.fromArray( positions, b * 3 );\n\t\t\tvC.fromArray( positions, c * 3 );\n\n\t\t\tuvA.fromArray( uvs, a * 2 );\n\t\t\tuvB.fromArray( uvs, b * 2 );\n\t\t\tuvC.fromArray( uvs, c * 2 );\n\n\t\t\tvB.sub( vA );\n\t\t\tvC.sub( vA );\n\n\t\t\tuvB.sub( uvA );\n\t\t\tuvC.sub( uvA );\n\n\t\t\tconst r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y );\n\n\t\t\t// silently ignore degenerate uv triangles having coincident or colinear vertices\n\n\t\t\tif ( ! isFinite( r ) ) return;\n\n\t\t\tsdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r );\n\t\t\ttdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r );\n\n\t\t\ttan1[ a ].add( sdir );\n\t\t\ttan1[ b ].add( sdir );\n\t\t\ttan1[ c ].add( sdir );\n\n\t\t\ttan2[ a ].add( tdir );\n\t\t\ttan2[ b ].add( tdir );\n\t\t\ttan2[ c ].add( tdir );\n\n\t\t}\n\n\t\tlet groups = this.groups;\n\n\t\tif ( groups.length === 0 ) {\n\n\t\t\tgroups = [ {\n\t\t\t\tstart: 0,\n\t\t\t\tcount: indices.length\n\t\t\t} ];\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleTriangle(\n\t\t\t\t\tindices[ j + 0 ],\n\t\t\t\t\tindices[ j + 1 ],\n\t\t\t\t\tindices[ j + 2 ]\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst tmp = new Vector3(), tmp2 = new Vector3();\n\t\tconst n = new Vector3(), n2 = new Vector3();\n\n\t\tfunction handleVertex( v ) {\n\n\t\t\tn.fromArray( normals, v * 3 );\n\t\t\tn2.copy( n );\n\n\t\t\tconst t = tan1[ v ];\n\n\t\t\t// Gram-Schmidt orthogonalize\n\n\t\t\ttmp.copy( t );\n\t\t\ttmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();\n\n\t\t\t// Calculate handedness\n\n\t\t\ttmp2.crossVectors( n2, t );\n\t\t\tconst test = tmp2.dot( tan2[ v ] );\n\t\t\tconst w = ( test < 0.0 ) ? - 1.0 : 1.0;\n\n\t\t\ttangents[ v * 4 ] = tmp.x;\n\t\t\ttangents[ v * 4 + 1 ] = tmp.y;\n\t\t\ttangents[ v * 4 + 2 ] = tmp.z;\n\t\t\ttangents[ v * 4 + 3 ] = w;\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleVertex( indices[ j + 0 ] );\n\t\t\t\thandleVertex( indices[ j + 1 ] );\n\t\t\t\thandleVertex( indices[ j + 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeVertexNormals() {\n\n\t\tconst index = this.index;\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\tnA.add( cb );\n\t\t\t\t\tnB.add( cb );\n\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tmerge( geometry, offset ) {\n\n\t\tif ( ! ( geometry && geometry.isBufferGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( offset === undefined ) {\n\n\t\t\toffset = 0;\n\n\t\t\tconsole.warn(\n\t\t\t\t'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. '\n\t\t\t\t+ 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.'\n\t\t\t);\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tif ( geometry.attributes[ key ] === undefined ) continue;\n\n\t\t\tconst attribute1 = attributes[ key ];\n\t\t\tconst attributeArray1 = attribute1.array;\n\n\t\t\tconst attribute2 = geometry.attributes[ key ];\n\t\t\tconst attributeArray2 = attribute2.array;\n\n\t\t\tconst attributeOffset = attribute2.itemSize * offset;\n\t\t\tconst length = Math.min( attributeArray2.length, attributeArray1.length - attributeOffset );\n\n\t\t\tfor ( let i = 0, j = attributeOffset; i < length; i ++, j ++ ) {\n\n\t\t\t\tattributeArray1[ j ] = attributeArray2[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tnormalizeNormals() {\n\n\t\tconst normals = this.attributes.normal;\n\n\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t_vector$8.fromBufferAttribute( normals, i );\n\n\t\t\t_vector$8.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t}\n\n\t}\n\n\ttoNonIndexed() {\n\n\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\t\t\tconst normalized = attribute.normalized;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\tindex = indices[ i ] * attribute.data.stride + attribute.offset;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( array2, itemSize, normalized );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tconst indices = this.index.array;\n\t\tconst attributes = this.attributes;\n\n\t\t// attributes\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = this.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst morphArray = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t}\n\n\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = this.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// for simplicity the code assumes attributes are not shared across geometries, see #15811\n\n\t\tdata.data = { attributes: {} };\n\n\t\tconst index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t};\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tdata.data.attributes[ key ] = attribute.toJSON( data.data );\n\n\t\t}\n\n\t\tconst morphAttributes = {};\n\t\tlet hasMorphAttributes = false;\n\n\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\tarray.push( attribute.toJSON( data.data ) );\n\n\t\t\t}\n\n\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\thasMorphAttributes = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphAttributes ) {\n\n\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t}\n\n\t\tconst groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\t return new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// used for storing cloned, shared data\n\n\t\tconst data = {};\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tconst index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone( data ) );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tconst attributes = source.attributes;\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = source.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = source.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\t// geometry generator parameters\n\n\t\tif ( source.parameters !== undefined ) this.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nBufferGeometry.prototype.isBufferGeometry = true;\n\nconst _inverseMatrix$2 = /*@__PURE__*/ new Matrix4();\nconst _ray$2 = /*@__PURE__*/ new Ray();\nconst _sphere$3 = /*@__PURE__*/ new Sphere();\n\nconst _vA$1 = /*@__PURE__*/ new Vector3();\nconst _vB$1 = /*@__PURE__*/ new Vector3();\nconst _vC$1 = /*@__PURE__*/ new Vector3();\n\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _tempB = /*@__PURE__*/ new Vector3();\nconst _tempC = /*@__PURE__*/ new Vector3();\n\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _morphB = /*@__PURE__*/ new Vector3();\nconst _morphC = /*@__PURE__*/ new Vector3();\n\nconst _uvA$1 = /*@__PURE__*/ new Vector2();\nconst _uvB$1 = /*@__PURE__*/ new Vector2();\nconst _uvC$1 = /*@__PURE__*/ new Vector2();\n\nconst _intersectionPoint = /*@__PURE__*/ new Vector3();\nconst _intersectionPointWorld = /*@__PURE__*/ new Vector3();\n\nclass Mesh extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Mesh';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$3.copy( geometry.boundingSphere );\n\t\t_sphere$3.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$2.copy( matrixWorld ).invert();\n\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\t// Check boundingBox before continuing\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray$2.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\tlet intersection;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\t\t\tconst uv = geometry.attributes.uv;\n\t\t\tconst uv2 = geometry.attributes.uv2;\n\t\t\tconst groups = geometry.groups;\n\t\t\tconst drawRange = geometry.drawRange;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\t// indexed buffer geometry\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\tconst end = Math.min( index.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( position !== undefined ) {\n\n\t\t\t\t// non-indexed buffer geometry\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\tconst end = Math.min( position.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\tconst a = i;\n\t\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n}\n\nMesh.prototype.isMesh = true;\n\nfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkBufferGeometryIntersection( object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ) {\n\n\t_vA$1.fromBufferAttribute( position, a );\n\t_vB$1.fromBufferAttribute( position, b );\n\t_vC$1.fromBufferAttribute( position, c );\n\n\tconst morphInfluences = object.morphTargetInfluences;\n\n\tif ( morphPosition && morphInfluences ) {\n\n\t\t_morphA.set( 0, 0, 0 );\n\t\t_morphB.set( 0, 0, 0 );\n\t\t_morphC.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\tconst influence = morphInfluences[ i ];\n\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t_tempA.fromBufferAttribute( morphAttribute, a );\n\t\t\t_tempB.fromBufferAttribute( morphAttribute, b );\n\t\t\t_tempC.fromBufferAttribute( morphAttribute, c );\n\n\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t} else {\n\n\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA$1 ), influence );\n\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB$1 ), influence );\n\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC$1 ), influence );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_vA$1.add( _morphA );\n\t\t_vB$1.add( _morphB );\n\t\t_vC$1.add( _morphC );\n\n\t}\n\n\tif ( object.isSkinnedMesh ) {\n\n\t\tobject.boneTransform( a, _vA$1 );\n\t\tobject.boneTransform( b, _vB$1 );\n\t\tobject.boneTransform( c, _vC$1 );\n\n\t}\n\n\tconst intersection = checkIntersection( object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv2 ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv2, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv2, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv2, c );\n\n\t\t\tintersection.uv2 = Triangle.getUV( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA$1, _vB$1, _vC$1, face.normal );\n\n\t\tintersection.face = face;\n\n\t}\n\n\treturn intersection;\n\n}\n\nclass BoxGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tconst scope = this;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet numberOfVertices = 0;\n\t\tlet groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tconst segmentWidth = width / gridX;\n\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\tconst widthHalf = width / 2;\n\t\t\tconst heightHalf = height / 2;\n\t\t\tconst depthHalf = depth / 2;\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tlet vertexCounter = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new BoxGeometry( data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments );\n\n\t}\n\n}\n\n/**\n * Uniform Utilities\n */\n\nfunction cloneUniforms( src ) {\n\n\tconst dst = {};\n\n\tfor ( const u in src ) {\n\n\t\tdst[ u ] = {};\n\n\t\tfor ( const p in src[ u ] ) {\n\n\t\t\tconst property = src[ u ][ p ];\n\n\t\t\tif ( property && ( property.isColor ||\n\t\t\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\t\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\t\t\tproperty.isTexture || property.isQuaternion ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t} else {\n\n\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction mergeUniforms( uniforms ) {\n\n\tconst merged = {};\n\n\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\tfor ( const p in tmp ) {\n\n\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t}\n\n\t}\n\n\treturn merged;\n\n}\n\n// Legacy\n\nconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\nvar default_vertex = \"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";\n\nvar default_fragment = \"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";\n\n/**\n * parameters = {\n * defines: { \"label\" : \"value\" },\n * uniforms: { \"parameter1\": { value: 1.0 }, \"parameter2\": { value2: 2 } },\n *\n * fragmentShader: ,\n * vertexShader: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * lights: \n * }\n */\n\nclass ShaderMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ShaderMaterial';\n\n\t\tthis.defines = {};\n\t\tthis.uniforms = {};\n\n\t\tthis.vertexShader = default_vertex;\n\t\tthis.fragmentShader = default_fragment;\n\n\t\tthis.linewidth = 1;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = false; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tthis.extensions = {\n\t\t\tderivatives: false, // set to use derivatives\n\t\t\tfragDepth: false, // set to use fragment depth values\n\t\t\tdrawBuffers: false, // set to use draw buffers\n\t\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t\t};\n\n\t\t// When rendered geometry doesn't include these attributes but the material does,\n\t\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\t\tthis.defaultAttributeValues = {\n\t\t\t'color': [ 1, 1, 1 ],\n\t\t\t'uv': [ 0, 0 ],\n\t\t\t'uv2': [ 0, 0 ]\n\t\t};\n\n\t\tthis.index0AttributeName = undefined;\n\t\tthis.uniformsNeedUpdate = false;\n\n\t\tthis.glslVersion = null;\n\n\t\tif ( parameters !== undefined ) {\n\n\t\t\tif ( parameters.attributes !== undefined ) {\n\n\t\t\t\tconsole.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t\tthis.setValues( parameters );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\n\t\tthis.uniforms = cloneUniforms( source.uniforms );\n\n\t\tthis.defines = Object.assign( {}, source.defines );\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.lights = source.lights;\n\t\tthis.clipping = source.clipping;\n\n\t\tthis.extensions = Object.assign( {}, source.extensions );\n\n\t\tthis.glslVersion = source.glslVersion;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.glslVersion = this.glslVersion;\n\t\tdata.uniforms = {};\n\n\t\tfor ( const name in this.uniforms ) {\n\n\t\t\tconst uniform = this.uniforms[ name ];\n\t\t\tconst value = uniform.value;\n\n\t\t\tif ( value && value.isTexture ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 't',\n\t\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isColor ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'c',\n\t\t\t\t\tvalue: value.getHex()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v2',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\n\t\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\n\t\tconst extensions = {};\n\n\t\tfor ( const key in this.extensions ) {\n\n\t\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t\t}\n\n\t\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\t\treturn data;\n\n\t}\n\n}\n\nShaderMaterial.prototype.isShaderMaterial = true;\n\nclass Camera extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Camera';\n\n\t\tthis.matrixWorldInverse = new Matrix4();\n\n\t\tthis.projectionMatrix = new Matrix4();\n\t\tthis.projectionMatrixInverse = new Matrix4();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\treturn this;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tsuper.updateWorldMatrix( updateParents, updateChildren );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nCamera.prototype.isCamera = true;\n\nclass PerspectiveCamera extends Camera {\n\n\tconstructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PerspectiveCamera';\n\n\t\tthis.fov = fov;\n\t\tthis.zoom = 1;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.focus = 10;\n\n\t\tthis.aspect = aspect;\n\t\tthis.view = null;\n\n\t\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\t\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength( focalLength ) {\n\n\t\t/** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */\n\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength() {\n\n\t\tconst vExtentSlope = Math.tan( DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t}\n\n\tgetEffectiveFOV() {\n\n\t\treturn RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t}\n\n\tgetFilmWidth() {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t}\n\n\tgetFilmHeight() {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t}\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t * +---+---+---+\n\t * | A | B | C |\n\t * +---+---+---+\n\t * | D | E | F |\n\t * +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t * const w = 1920;\n\t * const h = 1080;\n\t * const fullWidth = w * 3;\n\t * const fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t * Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst near = this.near;\n\t\tlet top = near * Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\tlet height = 2 * top;\n\t\tlet width = this.aspect * height;\n\t\tlet left = - 0.5 * width;\n\t\tconst view = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tconst skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n}\n\nPerspectiveCamera.prototype.isPerspectiveCamera = true;\n\nconst fov = 90, aspect = 1;\n\nclass CubeCamera extends Object3D {\n\n\tconstructor( near, far, renderTarget ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubeCamera';\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget !== true ) {\n\n\t\t\tconsole.error( 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.renderTarget = renderTarget;\n\n\t\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPX.layers = this.layers;\n\t\tcameraPX.up.set( 0, - 1, 0 );\n\t\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\t\tthis.add( cameraPX );\n\n\t\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNX.layers = this.layers;\n\t\tcameraNX.up.set( 0, - 1, 0 );\n\t\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\t\tthis.add( cameraNX );\n\n\t\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPY.layers = this.layers;\n\t\tcameraPY.up.set( 0, 0, 1 );\n\t\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\t\tthis.add( cameraPY );\n\n\t\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNY.layers = this.layers;\n\t\tcameraNY.up.set( 0, 0, - 1 );\n\t\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\t\tthis.add( cameraNY );\n\n\t\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPZ.layers = this.layers;\n\t\tcameraPZ.up.set( 0, - 1, 0 );\n\t\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\t\tthis.add( cameraPZ );\n\n\t\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNZ.layers = this.layers;\n\t\tcameraNZ.up.set( 0, - 1, 0 );\n\t\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\t\tthis.add( cameraNZ );\n\n\t}\n\n\tupdate( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tconst renderTarget = this.renderTarget;\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;\n\n\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\trenderer.xr.enabled = false;\n\n\t\tconst generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderer.setRenderTarget( renderTarget, 0 );\n\t\trenderer.render( scene, cameraPX );\n\n\t\trenderer.setRenderTarget( renderTarget, 1 );\n\t\trenderer.render( scene, cameraNX );\n\n\t\trenderer.setRenderTarget( renderTarget, 2 );\n\t\trenderer.render( scene, cameraPY );\n\n\t\trenderer.setRenderTarget( renderTarget, 3 );\n\t\trenderer.render( scene, cameraNY );\n\n\t\trenderer.setRenderTarget( renderTarget, 4 );\n\t\trenderer.render( scene, cameraPZ );\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderer.setRenderTarget( renderTarget, 5 );\n\t\trenderer.render( scene, cameraNZ );\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\trenderer.xr.enabled = currentXrEnabled;\n\n\t}\n\n}\n\nclass CubeTexture extends Texture {\n\n\tconstructor( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\t\timages = images !== undefined ? images : [];\n\t\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\n\t\tsuper( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.flipY = false;\n\n\t}\n\n\tget images() {\n\n\t\treturn this.image;\n\n\t}\n\n\tset images( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n}\n\nCubeTexture.prototype.isCubeTexture = true;\n\nclass WebGLCubeRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( size, options, dummy ) {\n\n\t\tif ( Number.isInteger( options ) ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )' );\n\n\t\t\toptions = dummy;\n\n\t\t}\n\n\t\tsuper( size, size, options );\n\n\t\toptions = options || {};\n\n\t\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t\t// and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture\n\t\t// as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).\n\n\t\tthis.texture = new CubeTexture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t\tthis.texture._needsFlipEnvMap = false;\n\n\t}\n\n\tfromEquirectangularTexture( renderer, texture ) {\n\n\t\tthis.texture.type = texture.type;\n\t\tthis.texture.format = RGBAFormat; // see #18859\n\t\tthis.texture.encoding = texture.encoding;\n\n\t\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\t\tthis.texture.minFilter = texture.minFilter;\n\t\tthis.texture.magFilter = texture.magFilter;\n\n\t\tconst shader = {\n\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t`\n\t\t};\n\n\t\tconst geometry = new BoxGeometry( 5, 5, 5 );\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\tname: 'CubemapFromEquirect',\n\n\t\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tblending: NoBlending\n\n\t\t} );\n\n\t\tmaterial.uniforms.tEquirect.value = texture;\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tconst currentMinFilter = texture.minFilter;\n\n\t\t// Avoid blurred poles\n\t\tif ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;\n\n\t\tconst camera = new CubeCamera( 1, 10, this );\n\t\tcamera.update( renderer, mesh );\n\n\t\ttexture.minFilter = currentMinFilter;\n\n\t\tmesh.geometry.dispose();\n\t\tmesh.material.dispose();\n\n\t\treturn this;\n\n\t}\n\n\tclear( renderer, color, depth, stencil ) {\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\trenderer.setRenderTarget( this, i );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n}\n\nWebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true;\n\nconst _vector1 = /*@__PURE__*/ new Vector3();\nconst _vector2 = /*@__PURE__*/ new Vector3();\nconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\nclass Plane {\n\n\tconstructor( normal = new Vector3( 1, 0, 0 ), constant = 0 ) {\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = normal;\n\t\tthis.constant = constant;\n\n\t}\n\n\tset( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponents( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromNormalAndCoplanarPoint( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCoplanarPoints( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();\n\n\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t}\n\n\tnormalize() {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tconst inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t}\n\n\tdistanceToSphere( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t}\n\n\tprojectPoint( point, target ) {\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point );\n\n\t}\n\n\tintersectLine( line, target ) {\n\n\t\tconst direction = line.delta( _vector1 );\n\n\t\tconst denominator = this.normal.dot( direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\treturn target.copy( line.start );\n\n\t\t\t}\n\n\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn target.copy( direction ).multiplyScalar( t ).add( line.start );\n\n\t}\n\n\tintersectsLine( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tconst startSign = this.distanceToPoint( line.start );\n\t\tconst endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t}\n\n\tcoplanarPoint( target ) {\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t}\n\n\tapplyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tequals( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nPlane.prototype.isPlane = true;\n\nconst _sphere$2 = /*@__PURE__*/ new Sphere();\nconst _vector$7 = /*@__PURE__*/ new Vector3();\n\nclass Frustum {\n\n\tconstructor( p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane() ) {\n\n\t\tthis.planes = [ p0, p1, p2, p3, p4, p5 ];\n\n\t}\n\n\tset( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tconst planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( frustum ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromProjectionMatrix( m ) {\n\n\t\tconst planes = this.planes;\n\t\tconst me = m.elements;\n\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tconst me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\tintersectsObject( object ) {\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$2.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$2 );\n\n\t}\n\n\tintersectsSprite( sprite ) {\n\n\t\t_sphere$2.center.set( 0, 0, 0 );\n\t\t_sphere$2.radius = 0.7071067811865476;\n\t\t_sphere$2.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$2 );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst planes = this.planes;\n\t\tconst center = sphere.center;\n\t\tconst negRadius = - sphere.radius;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\n\t\t\t// corner at max distance\n\n\t\t\t_vector$7.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector$7 ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nfunction WebGLAnimation() {\n\n\tlet context = null;\n\tlet isAnimating = false;\n\tlet animationLoop = null;\n\tlet requestId = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tanimationLoop( time, frame );\n\n\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tcontext.cancelAnimationFrame( requestId );\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLAttributes( gl, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tconst buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst usage = attribute.usage;\n\n\t\tconst buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tlet type = 5126;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = 5126;\n\n\t\t} else if ( array instanceof Float64Array ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' );\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\ttype = 5131;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\ttype = 5123;\n\n\t\t\t}\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = 5122;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = 5125;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = 5124;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = 5120;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = 5121;\n\n\t\t} else if ( array instanceof Uint8ClampedArray ) {\n\n\t\t\ttype = 5121;\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst updateRange = attribute.updateRange;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( updateRange.count === - 1 ) {\n\n\t\t\t// Not using update ranges\n\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t} else {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray, updateRange.offset, updateRange.count );\n\n\t\t\t} else {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\t}\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isGLBufferAttribute ) {\n\n\t\t\tconst cached = buffers.get( attribute );\n\n\t\t\tif ( ! cached || cached.version < attribute.version ) {\n\n\t\t\t\tbuffers.set( attribute, {\n\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\tversion: attribute.version\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\nclass PlaneGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {\n\n\t\tsuper();\n\t\tthis.type = 'PlaneGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tconst width_half = width / 2;\n\t\tconst height_half = height / 2;\n\n\t\tconst gridX = Math.floor( widthSegments );\n\t\tconst gridY = Math.floor( heightSegments );\n\n\t\tconst gridX1 = gridX + 1;\n\t\tconst gridY1 = gridY + 1;\n\n\t\tconst segment_width = width / gridX;\n\t\tconst segment_height = height / gridY;\n\n\t\t//\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tconst y = iy * segment_height - height_half;\n\n\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tconst x = ix * segment_width - width_half;\n\n\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tconst a = ix + gridX1 * iy;\n\t\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tconst d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new PlaneGeometry( data.width, data.height, data.widthSegments, data.heightSegments );\n\n\t}\n\n}\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar alphatest_fragment = \"#ifdef USE_ALPHATEST\\n\\tif ( diffuseColor.a < alphaTest ) discard;\\n#endif\";\n\nvar alphatest_pars_fragment = \"#ifdef USE_ALPHATEST\\n\\tuniform float alphaTest;\\n#endif\";\n\nvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\\n\\t#endif\\n#endif\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar begin_vertex = \"vec3 transformed = vec3( position );\";\n\nvar beginnormal_vertex = \"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\";\n\nvar bsdfs = \"vec3 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 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}\\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float 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\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\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}\\nfloat 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}\\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\";\n\nvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + 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 = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\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\";\n\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\";\n\nvar color_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tdiffuseColor *= vColor;\\n#elif defined( USE_COLOR )\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar 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\";\n\nvar 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\";\n\nvar 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; }\\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 color ) { return dot( color, vec3( 0.3333 ) ); }\\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};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n#ifdef USE_CLEARCOAT\\n\\tvec3 clearcoatNormal;\\n#endif\\n};\\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 linearToRelativeLuminance( const in vec3 color ) {\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\treturn dot( weights, color.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}\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_maxMipLevel 8.0\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_maxTileSize 256.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\\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\\n\\t\\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\\n\\t\\tvec2 f = fract( uv );\\n\\t\\tuv += 0.5 - f;\\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\\tif ( mipInt < cubeUV_maxMipLevel ) {\\n\\t\\t\\tuv.y += 2.0 * cubeUV_maxTileSize;\\n\\t\\t}\\n\\t\\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\\n\\t\\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\\n\\t\\tuv *= texelSize;\\n\\t\\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x += texelSize;\\n\\t\\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.y += texelSize;\\n\\t\\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x -= texelSize;\\n\\t\\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tvec3 tm = mix( tl, tr, f.x );\\n\\t\\tvec3 bm = mix( bl, br, f.x );\\n\\t\\treturn mix( tm, bm, f.y );\\n\\t}\\n\\t#define r0 1.0\\n\\t#define v0 0.339\\n\\t#define m0 - 2.0\\n\\t#define r1 0.8\\n\\t#define v1 0.276\\n\\t#define m1 - 1.0\\n\\t#define r4 0.4\\n\\t#define v4 0.046\\n\\t#define m4 2.0\\n\\t#define r5 0.305\\n\\t#define v5 0.016\\n\\t#define m5 3.0\\n\\t#define r6 0.21\\n\\t#define v6 0.0038\\n\\t#define m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= r1 ) {\\n\\t\\t\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\n\\t\\t} else if ( roughness >= r4 ) {\\n\\t\\t\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\n\\t\\t} else if ( roughness >= r5 ) {\\n\\t\\t\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\n\\t\\t} else if ( roughness >= r6 ) {\\n\\t\\t\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + 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 ), m0, cubeUV_maxMipLevel );\\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\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = objectNormal;\\n#ifdef USE_INSTANCING\\n\\tmat3 m = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\n\\ttransformedNormal = m * transformedNormal;\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\n#endif\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\";\n\nvar encodings_fragment = \"gl_FragColor = linearToOutputTexel( gl_FragColor );\";\n\nvar encodings_pars_fragment = \"\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\\n}\\nvec4 LinearTosRGB( 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 RGBEToLinear( in vec4 value ) {\\n\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\n\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n\\tM = ceil( M * 255.0 ) / 255.0;\\n\\treturn vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\\n\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value ) {\\n\\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\\n\\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\\n\\tvec4 vResult;\\n\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n\\tvResult.w = fract( Le );\\n\\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\\n\\treturn vResult;\\n}\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n\\tfloat Le = value.z * 255.0 + value.w;\\n\\tvec3 Xp_Y_XYZp;\\n\\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\\n\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n\\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\\n\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\n}\";\n\nvar 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, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t\\tenvColor = envMapTexelToLinear( envColor );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\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\";\n\nvar envmap_common_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform int maxMipLevel;\\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\";\n\nvar envmap_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\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\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\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\";\n\nvar 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\";\n\nvar fog_vertex = \"#ifdef USE_FOG\\n\\tvFogDepth = - mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float vFogDepth;\\n#endif\";\n\nvar 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\";\n\nvar 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\";\n\nvar 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 texture2D( gradientMap, coord ).rgb;\\n\\t#else\\n\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t#endif\\n}\";\n\nvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\n\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tlightMapIrradiance *= PI;\\n\\t#endif\\n\\treflectedLight.indirectDiffuse += lightMapIrradiance;\\n#endif\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar lights_lambert_vertex = \"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\nvIndirectFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n\\tvIndirectBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );\\n#ifdef DOUBLE_SIDED\\n\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\n\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointLightInfo( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotLightInfo( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalLightInfo( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\";\n\nvar lights_pars_begin = \"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\nuniform vec3 lightProbe[ 9 ];\\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 ( PHYSICALLY_CORRECT_LIGHTS )\\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#else\\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#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, const in GeometricContext geometry, 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 GeometricContext geometry, out IncidentLight light ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\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 GeometricContext geometry, out IncidentLight light ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\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\";\n\nvar envmap_physical_pars_fragment = \"#if defined( USE_ENVMAP )\\n\\t#ifdef ENVMAP_MODE_REFRACTION\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n\\tvec3 getIBLIrradiance( const in vec3 normal ) {\\n\\t\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\n\\t\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n\\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\\n\\t\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 reflectVec;\\n\\t\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\t\\treflectVec = reflect( - viewDir, normal );\\n\\t\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t\\t#else\\n\\t\\t\\t\\treflectVec = refract( - viewDir, normal, refractionRatio );\\n\\t\\t\\t#endif\\n\\t\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\n\\t\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar lights_toon_fragment = \"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\";\n\nvar lights_toon_pars_fragment = \"varying vec3 vViewPosition;\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, 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\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\";\n\nvar 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 GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, 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\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\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\\t#ifdef SPECULAR\\n\\t\\tfloat specularIntensityFactor = specularIntensity;\\n\\t\\tvec3 specularColorFactor = specularColor;\\n\\t\\t#ifdef USE_SPECULARINTENSITYMAP\\n\\t\\t\\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\\n\\t\\t#endif\\n\\t\\t#ifdef USE_SPECULARCOLORMAP\\n\\t\\t\\tspecularColorFactor *= specularColorMapTexelToLinear( texture2D( specularColorMap, vUv ) ).rgb;\\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( ( ior - 1.0 ) / ( 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, vUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).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_SHEEN\\n\\tmaterial.sheenColor = sheenColor;\\n\\t#ifdef USE_SHEENCOLORMAP\\n\\t\\tmaterial.sheenColor *= sheenColorMapTexelToLinear( texture2D( sheenColorMap, vUv ) ).rgb;\\n\\t#endif\\n\\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\\n\\t#ifdef USE_SHEENROUGHNESSMAP\\n\\t\\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;\\n\\t#endif\\n#endif\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat roughness;\\n\\tvec3 specularColor;\\n\\tfloat specularF90;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat clearcoat;\\n\\t\\tfloat clearcoatRoughness;\\n\\t\\tvec3 clearcoatF0;\\n\\t\\tfloat clearcoatF90;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tvec3 sheenColor;\\n\\t\\tfloat sheenRoughness;\\n\\t#endif\\n};\\nvec3 clearcoatSpecular = vec3( 0.0 );\\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}\\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\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\tvec3 FssEss = specularColor * fab.x + specularF90 * fab.y;\\n\\tfloat Ess = fab.x + fab.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = dotNLcc * directLight.color;\\n\\t\\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\treflectedLight.directSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );\\n\\t#endif\\n\\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, 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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\t#endif\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\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}\";\n\nvar lights_fragment_begin = \"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n#ifdef USE_CLEARCOAT\\n\\tgeometry.clearcoatNormal = clearcoatNormal;\\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, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( 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, geometry, 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\\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, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, 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, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( 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, geometry, 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, geometry, 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\\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\\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 ], geometry.normal );\\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\";\n\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getIBLIrradiance( geometry.normal );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\\n\\t#endif\\n#endif\";\n\nvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\n#endif\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t\\tvarying float vIsPerspective;\\n\\t#else\\n\\t\\tuniform float logDepthBufFC;\\n\\t#endif\\n#endif\";\n\nvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n\\t#else\\n\\t\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\n\\t\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\t\\tgl_Position.z *= gl_Position.w;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\";\n\nvar map_particle_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\";\n\nvar map_particle_pars_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tuniform mat3 uvTransform;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar 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, 2 ) * 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\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\tuniform float morphTargetBaseInfluence;\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\t\\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\t\\tuniform sampler2DArray morphTargetsTexture;\\n\\t\\tuniform vec2 morphTargetsTextureSize;\\n\\t\\tvec3 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset, const in int stride ) {\\n\\t\\t\\tfloat texelIndex = float( vertexIndex * stride + offset );\\n\\t\\t\\tfloat y = floor( texelIndex / morphTargetsTextureSize.x );\\n\\t\\t\\tfloat x = texelIndex - y * morphTargetsTextureSize.x;\\n\\t\\t\\tvec3 morphUV = vec3( ( x + 0.5 ) / morphTargetsTextureSize.x, y / morphTargetsTextureSize.y, morphTargetIndex );\\n\\t\\t\\treturn texture( morphTargetsTexture, morphUV ).xyz;\\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\";\n\nvar 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\\t#ifndef USE_MORPHNORMALS\\n\\t\\t\\t\\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 1 ) * morphTargetInfluences[ i ];\\n\\t\\t\\t#else\\n\\t\\t\\t\\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 2 ) * morphTargetInfluences[ i ];\\n\\t\\t\\t#endif\\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\";\n\nvar normal_fragment_begin = \"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\t#ifdef USE_TANGENT\\n\\t\\tvec3 tangent = normalize( vTangent );\\n\\t\\tvec3 bitangent = normalize( vBitangent );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\ttangent = tangent * faceDirection;\\n\\t\\t\\tbitangent = bitangent * faceDirection;\\n\\t\\t#endif\\n\\t\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\nvec3 geometryNormal = normal;\";\n\nvar normal_fragment_maps = \"#ifdef OBJECTSPACE_NORMALMAP\\n\\tnormal = texture2D( normalMap, vUv ).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( TANGENTSPACE_NORMALMAP )\\n\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tnormal = normalize( vTBN * mapN );\\n\\t#else\\n\\t\\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\\n\\t#endif\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\\n#endif\";\n\nvar 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\";\n\nvar 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\";\n\nvar 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\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef OBJECTSPACE_NORMALMAP\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\\n\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.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 : faceDirection * inversesqrt( det );\\n\\t\\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\\n\\t}\\n#endif\";\n\nvar clearcoat_normal_fragment_begin = \"#ifdef USE_CLEARCOAT\\n\\tvec3 clearcoatNormal = geometryNormal;\\n#endif\";\n\nvar clearcoat_normal_fragment_maps = \"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\n\\t#else\\n\\t\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\\n\\t#endif\\n#endif\";\n\nvar clearcoat_pars_fragment = \"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\";\n\nvar output_fragment = \"#ifdef OPAQUE\\ndiffuseColor.a = 1.0;\\n#endif\\n#ifdef USE_TRANSMISSION\\ndiffuseColor.a *= transmissionAlpha + 0.1;\\n#endif\\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\";\n\nvar 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}\\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 linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( 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 invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\";\n\nvar project_vertex = \"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\";\n\nvar dithering_fragment = \"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\";\n\nvar 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\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar shadowmap_pars_fragment = \"#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\\tvarying vec4 vSpotShadowCoord[ 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\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn shadow;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar shadowmap_pars_vertex = \"#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\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ 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 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\";\n\nvar shadowmap_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\tvec4 shadowWorldPosition;\\n\\t#endif\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\";\n\nvar 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, vSpotShadowCoord[ 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}\";\n\nvar 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\";\n\nvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\t#ifdef BONE_TEXTURE\\n\\t\\tuniform highp sampler2D boneTexture;\\n\\t\\tuniform int boneTextureSize;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#else\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar 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\";\n\nvar 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\";\n\nvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\";\n\nvar 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 toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3( 1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108, 1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605, 1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\";\n\nvar transmission_fragment = \"#ifdef USE_TRANSMISSION\\n\\tfloat transmissionAlpha = 1.0;\\n\\tfloat transmissionFactor = transmission;\\n\\tfloat thicknessFactor = thickness;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\\n\\t#endif\\n\\tvec3 pos = vWorldPosition;\\n\\tvec3 v = normalize( cameraPosition - pos );\\n\\tvec3 n = inverseTransformDirection( normal, viewMatrix );\\n\\tvec4 transmission = getIBLVolumeRefraction(\\n\\t\\tn, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,\\n\\t\\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\\n\\t\\tattenuationColor, attenuationDistance );\\n\\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, transmissionFactor );\\n\\ttransmissionAlpha = mix( transmissionAlpha, transmission.a, transmissionFactor );\\n#endif\";\n\nvar 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\\tvec3 getVolumeTransmissionRay( vec3 n, vec3 v, float thickness, float ior, 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( float roughness, float ior ) {\\n\\t\\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\\n\\t}\\n\\tvec4 getTransmissionSample( vec2 fragCoord, float roughness, float ior ) {\\n\\t\\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\\n\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\\n\\t\\t#else\\n\\t\\t\\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\\n\\t\\t#endif\\n\\t}\\n\\tvec3 applyVolumeAttenuation( vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance ) {\\n\\t\\tif ( attenuationDistance == 0.0 ) {\\n\\t\\t\\treturn radiance;\\n\\t\\t} else {\\n\\t\\t\\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\\n\\t\\t\\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\\t\\t\\treturn transmittance * radiance;\\n\\t\\t}\\n\\t}\\n\\tvec4 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 diffuseColor, vec3 specularColor, float specularF90,\\n\\t\\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness,\\n\\t\\tvec3 attenuationColor, float attenuationDistance ) {\\n\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\\n\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\trefractionCoords += 1.0;\\n\\t\\trefractionCoords /= 2.0;\\n\\t\\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\\n\\t\\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\\n\\t\\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\\n\\t\\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\\n\\t}\\n#endif\";\n\nvar uv_pars_fragment = \"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\\n\\tvarying vec2 vUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#ifdef USE_UV\\n\\t#ifdef UVS_VERTEX_ONLY\\n\\t\\tvec2 vUv;\\n\\t#else\\n\\t\\tvarying vec2 vUv;\\n\\t#endif\\n\\tuniform mat3 uvTransform;\\n#endif\";\n\nvar uv_vertex = \"#ifdef USE_UV\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\";\n\nvar uv2_pars_fragment = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\";\n\nvar uv2_pars_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n\\tuniform mat3 uv2Transform;\\n#endif\";\n\nvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\";\n\nconst vertex$g = \"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}\";\n\nconst fragment$g = \"uniform sampler2D t2D;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include \\n\\t#include \\n}\";\n\nconst 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}\";\n\nconst fragment$f = \"#include \\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 vReflect = vWorldDirection;\\n\\t#include \\n\\tgl_FragColor = envColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$e = \"#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#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}\";\n\nconst 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 \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\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\\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}\";\n\nconst vertex$d = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\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}\";\n\nconst 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 \\nvoid main () {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\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}\";\n\nconst vertex$c = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$c = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tvec4 texColor = texture2D( tEquirect, sampleUV );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$b = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\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}\";\n\nconst 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 \\nvoid main() {\\n\\t#include \\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst 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#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 \\n}\";\n\nconst fragment$a = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$9 = \"#define LAMBERT\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include \\n#include \\n#include \\n#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#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\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$9 = \"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vIndirectFront;\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$8 = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#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#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\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\nconst fragment$8 = \"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t\\tmatcapColor = matcapTexelToLinear( matcapColor );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$7 = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\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#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#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$7 = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\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\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\";\n\nconst vertex$6 = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#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#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\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$6 = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\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\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$5 = \"#define STANDARD\\nvarying vec3 vViewPosition;\\n#ifdef USE_TRANSMISSION\\n\\tvarying vec3 vWorldPosition;\\n#endif\\n#include \\n#include \\n#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#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\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n#ifdef USE_TRANSMISSION\\n\\tvWorldPosition = worldPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$5 = \"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define IOR\\n\\t#define SPECULAR\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef IOR\\n\\tuniform float ior;\\n#endif\\n#ifdef SPECULAR\\n\\tuniform float specularIntensity;\\n\\tuniform vec3 specularColor;\\n\\t#ifdef USE_SPECULARINTENSITYMAP\\n\\t\\tuniform sampler2D specularIntensityMap;\\n\\t#endif\\n\\t#ifdef USE_SPECULARCOLORMAP\\n\\t\\tuniform sampler2D specularColorMap;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheenColor;\\n\\tuniform float sheenRoughness;\\n\\t#ifdef USE_SHEENCOLORMAP\\n\\t\\tuniform sampler2D sheenColorMap;\\n\\t#endif\\n\\t#ifdef USE_SHEENROUGHNESSMAP\\n\\t\\tuniform sampler2D sheenRoughnessMap;\\n\\t#endif\\n#endif\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\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\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\\n\\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\\n\\t#include \\n\\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\n\\t\\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\\n\\t\\toutgoingLight = outgoingLight * ( 1.0 - clearcoat * Fcc ) + clearcoatSpecular * clearcoat;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$4 = \"#define TOON\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#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#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\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$4 = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\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\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$3 = \"uniform float size;\\nuniform float scale;\\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\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$3 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\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}\";\n\nconst vertex$2 = \"#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#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$2 = \"uniform vec3 color;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$1 = \"uniform float rotation;\\nuniform vec2 center;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$1 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\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}\";\n\nconst ShaderChunk = {\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\talphatest_pars_fragment: alphatest_pars_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tencodings_fragment: encodings_fragment,\n\tencodings_pars_fragment: encodings_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_common_pars_fragment: envmap_common_pars_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_fragment: lightmap_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_vertex: lights_lambert_vertex,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_toon_fragment: lights_toon_fragment,\n\tlights_toon_pars_fragment: lights_toon_pars_fragment,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormal_pars_fragment: normal_pars_fragment,\n\tnormal_pars_vertex: normal_pars_vertex,\n\tnormal_vertex: normal_vertex,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\tclearcoat_pars_fragment: clearcoat_pars_fragment,\n\toutput_fragment: output_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\ttransmission_fragment: transmission_fragment,\n\ttransmission_pars_fragment: transmission_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tuv2_pars_fragment: uv2_pars_fragment,\n\tuv2_pars_vertex: uv2_pars_vertex,\n\tuv2_vertex: uv2_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tbackground_vert: vertex$g,\n\tbackground_frag: fragment$g,\n\tcube_vert: vertex$f,\n\tcube_frag: fragment$f,\n\tdepth_vert: vertex$e,\n\tdepth_frag: fragment$e,\n\tdistanceRGBA_vert: vertex$d,\n\tdistanceRGBA_frag: fragment$d,\n\tequirect_vert: vertex$c,\n\tequirect_frag: fragment$c,\n\tlinedashed_vert: vertex$b,\n\tlinedashed_frag: fragment$b,\n\tmeshbasic_vert: vertex$a,\n\tmeshbasic_frag: fragment$a,\n\tmeshlambert_vert: vertex$9,\n\tmeshlambert_frag: fragment$9,\n\tmeshmatcap_vert: vertex$8,\n\tmeshmatcap_frag: fragment$8,\n\tmeshnormal_vert: vertex$7,\n\tmeshnormal_frag: fragment$7,\n\tmeshphong_vert: vertex$6,\n\tmeshphong_frag: fragment$6,\n\tmeshphysical_vert: vertex$5,\n\tmeshphysical_frag: fragment$5,\n\tmeshtoon_vert: vertex$4,\n\tmeshtoon_frag: fragment$4,\n\tpoints_vert: vertex$3,\n\tpoints_frag: fragment$3,\n\tshadow_vert: vertex$2,\n\tshadow_frag: fragment$2,\n\tsprite_vert: vertex$1,\n\tsprite_frag: fragment$1\n};\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nconst UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tuvTransform: { value: new Matrix3() },\n\t\tuv2Transform: { value: new Matrix3() },\n\n\t\talphaMap: { value: null },\n\t\talphaTest: { value: 0 }\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 }, // basic, lambert, phong\n\t\tior: { value: 1.5 }, // standard, physical\n\t\trefractionRatio: { value: 0.98 },\n\t\tmaxMipLevel: { value: 0 }\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalScale: { value: new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tlightProbe: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {}\n\t\t} },\n\n\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {}\n\t\t} },\n\n\t\tspotLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotShadowMap: { value: [] },\n\t\tspotShadowMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {}\n\t\t} },\n\n\t\tpointLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} },\n\n\t\tltc_1: { value: null },\n\t\tltc_2: { value: null }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\talphaTest: { value: 0 },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\talphaTest: { value: 0 },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t}\n\n};\n\nconst ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 1.0 },\n\t\t\t\tmetalness: { value: 0.0 },\n\t\t\t\tenvMapIntensity: { value: 1 } // temporary\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\ttoon: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshnormal_vert,\n\t\tfragmentShader: ShaderChunk.meshnormal_frag\n\n\t},\n\n\tsprite: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tuvTransform: { value: new Matrix3() },\n\t\t\tt2D: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\t/* -------------------------------------------------------------------------\n\t//\tCube map shader\n\t ------------------------------------------------------------------------- */\n\n\tcube: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.envmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: mergeUniforms( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearcoat: { value: 0 },\n\t\t\tclearcoatMap: { value: null },\n\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\tclearcoatNormalScale: { value: new Vector2( 1, 1 ) },\n\t\t\tclearcoatNormalMap: { value: null },\n\t\t\tsheen: { value: 0 },\n\t\t\tsheenColor: { value: new Color( 0x000000 ) },\n\t\t\tsheenColorMap: { value: null },\n\t\t\tsheenRoughness: { value: 0 },\n\t\t\tsheenRoughnessMap: { value: null },\n\t\t\ttransmission: { value: 0 },\n\t\t\ttransmissionMap: { value: null },\n\t\t\ttransmissionSamplerSize: { value: new Vector2() },\n\t\t\ttransmissionSamplerMap: { value: null },\n\t\t\tthickness: { value: 0 },\n\t\t\tthicknessMap: { value: null },\n\t\t\tattenuationDistance: { value: 0 },\n\t\t\tattenuationColor: { value: new Color( 0x000000 ) },\n\t\t\tspecularIntensity: { value: 0 },\n\t\t\tspecularIntensityMap: { value: null },\n\t\t\tspecularColor: { value: new Color( 1, 1, 1 ) },\n\t\t\tspecularColorMap: { value: null },\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\nfunction WebGLBackground( renderer, cubemaps, state, objects, premultipliedAlpha ) {\n\n\tconst clearColor = new Color( 0x000000 );\n\tlet clearAlpha = 0;\n\n\tlet planeMesh;\n\tlet boxMesh;\n\n\tlet currentBackground = null;\n\tlet currentBackgroundVersion = 0;\n\tlet currentTonemapping = null;\n\n\tfunction render( renderList, scene ) {\n\n\t\tlet forceClear = false;\n\t\tlet background = scene.isScene === true ? scene.background : null;\n\n\t\tif ( background && background.isTexture ) {\n\n\t\t\tbackground = cubemaps.get( background );\n\n\t\t}\n\n\t\t// Ignore background in AR\n\t\t// TODO: Reconsider this.\n\n\t\tconst xr = renderer.xr;\n\t\tconst session = xr.getSession && xr.getSession();\n\n\t\tif ( session && session.environmentBlendMode === 'additive' ) {\n\n\t\t\tbackground = null;\n\n\t\t}\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\tif ( background && ( background.isCubeTexture || background.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.cube.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.cube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.cube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\t// enable code injection for non-built-in material\n\t\t\t\tObject.defineProperty( boxMesh.material, 'envMap', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\tboxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tboxMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneGeometry( 2, 2 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.background.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tplaneMesh.geometry.deleteAttribute( 'normal' );\n\n\t\t\t\t// enable code injection for non-built-in material\n\t\t\t\tObject.defineProperty( planeMesh.material, 'map', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\n\t\t\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\tbackground.updateMatrix();\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tplaneMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tstate.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha = 1 ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render\n\n\t};\n\n}\n\nfunction WebGLBindingStates( gl, extensions, attributes, capabilities ) {\n\n\tconst maxVertexAttributes = gl.getParameter( 34921 );\n\n\tconst extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' );\n\tconst vaoAvailable = capabilities.isWebGL2 || extension !== null;\n\n\tconst bindingStates = {};\n\n\tconst defaultState = createBindingState( null );\n\tlet currentState = defaultState;\n\n\tfunction setup( object, material, program, geometry, index ) {\n\n\t\tlet updateBuffers = false;\n\n\t\tif ( vaoAvailable ) {\n\n\t\t\tconst state = getBindingState( geometry, program, material );\n\n\t\t\tif ( currentState !== state ) {\n\n\t\t\t\tcurrentState = state;\n\t\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t\t}\n\n\t\t\tupdateBuffers = needsUpdate( geometry, index );\n\n\t\t\tif ( updateBuffers ) saveCache( geometry, index );\n\n\t\t} else {\n\n\t\t\tconst wireframe = ( material.wireframe === true );\n\n\t\t\tif ( currentState.geometry !== geometry.id ||\n\t\t\t\tcurrentState.program !== program.id ||\n\t\t\t\tcurrentState.wireframe !== wireframe ) {\n\n\t\t\t\tcurrentState.geometry = geometry.id;\n\t\t\t\tcurrentState.program = program.id;\n\t\t\t\tcurrentState.wireframe = wireframe;\n\n\t\t\t\tupdateBuffers = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh === true ) {\n\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, 34963 );\n\n\t\t}\n\n\t\tif ( updateBuffers ) {\n\n\t\t\tsetupVertexAttributes( object, material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tgl.bindBuffer( 34963, attributes.get( index ).buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createVertexArrayObject() {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.createVertexArray();\n\n\t\treturn extension.createVertexArrayOES();\n\n\t}\n\n\tfunction bindVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao );\n\n\t\treturn extension.bindVertexArrayOES( vao );\n\n\t}\n\n\tfunction deleteVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao );\n\n\t\treturn extension.deleteVertexArrayOES( vao );\n\n\t}\n\n\tfunction getBindingState( geometry, program, material ) {\n\n\t\tconst wireframe = ( material.wireframe === true );\n\n\t\tlet programMap = bindingStates[ geometry.id ];\n\n\t\tif ( programMap === undefined ) {\n\n\t\t\tprogramMap = {};\n\t\t\tbindingStates[ geometry.id ] = programMap;\n\n\t\t}\n\n\t\tlet stateMap = programMap[ program.id ];\n\n\t\tif ( stateMap === undefined ) {\n\n\t\t\tstateMap = {};\n\t\t\tprogramMap[ program.id ] = stateMap;\n\n\t\t}\n\n\t\tlet state = stateMap[ wireframe ];\n\n\t\tif ( state === undefined ) {\n\n\t\t\tstate = createBindingState( createVertexArrayObject() );\n\t\t\tstateMap[ wireframe ] = state;\n\n\t\t}\n\n\t\treturn state;\n\n\t}\n\n\tfunction createBindingState( vao ) {\n\n\t\tconst newAttributes = [];\n\t\tconst enabledAttributes = [];\n\t\tconst attributeDivisors = [];\n\n\t\tfor ( let i = 0; i < maxVertexAttributes; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\t\t\tenabledAttributes[ i ] = 0;\n\t\t\tattributeDivisors[ i ] = 0;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\tgeometry: null,\n\t\t\tprogram: null,\n\t\t\twireframe: false,\n\n\t\t\tnewAttributes: newAttributes,\n\t\t\tenabledAttributes: enabledAttributes,\n\t\t\tattributeDivisors: attributeDivisors,\n\t\t\tobject: vao,\n\t\t\tattributes: {},\n\t\t\tindex: null\n\n\t\t};\n\n\t}\n\n\tfunction needsUpdate( geometry, index ) {\n\n\t\tconst cachedAttributes = currentState.attributes;\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tlet attributesNum = 0;\n\n\t\tfor ( const key in geometryAttributes ) {\n\n\t\t\tconst cachedAttribute = cachedAttributes[ key ];\n\t\t\tconst geometryAttribute = geometryAttributes[ key ];\n\n\t\t\tif ( cachedAttribute === undefined ) return true;\n\n\t\t\tif ( cachedAttribute.attribute !== geometryAttribute ) return true;\n\n\t\t\tif ( cachedAttribute.data !== geometryAttribute.data ) return true;\n\n\t\t\tattributesNum ++;\n\n\t\t}\n\n\t\tif ( currentState.attributesNum !== attributesNum ) return true;\n\n\t\tif ( currentState.index !== index ) return true;\n\n\t\treturn false;\n\n\t}\n\n\tfunction saveCache( geometry, index ) {\n\n\t\tconst cache = {};\n\t\tconst attributes = geometry.attributes;\n\t\tlet attributesNum = 0;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tconst data = {};\n\t\t\tdata.attribute = attribute;\n\n\t\t\tif ( attribute.data ) {\n\n\t\t\t\tdata.data = attribute.data;\n\n\t\t\t}\n\n\t\t\tcache[ key ] = data;\n\n\t\t\tattributesNum ++;\n\n\t\t}\n\n\t\tcurrentState.attributes = cache;\n\t\tcurrentState.attributesNum = attributesNum;\n\n\t\tcurrentState.index = index;\n\n\t}\n\n\tfunction initAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\n\t\tfor ( let i = 0, il = newAttributes.length; i < il; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\t\tconst attributeDivisors = currentState.attributeDivisors;\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tconst extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\n\t\tfor ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction vertexAttribPointer( index, size, type, normalized, stride, offset ) {\n\n\t\tif ( capabilities.isWebGL2 === true && ( type === 5124 || type === 5125 ) ) {\n\n\t\t\tgl.vertexAttribIPointer( index, size, type, stride, offset );\n\n\t\t} else {\n\n\t\t\tgl.vertexAttribPointer( index, size, type, normalized, stride, offset );\n\n\t\t}\n\n\t}\n\n\tfunction setupVertexAttributes( object, material, program, geometry ) {\n\n\t\tif ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) {\n\n\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return;\n\n\t\t}\n\n\t\tinitAttributes();\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tconst materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tconst normalized = geometryAttribute.normalized;\n\t\t\t\t\tconst size = geometryAttribute.itemSize;\n\n\t\t\t\t\tconst attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\t\t\t\t\tconst bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst data = geometryAttribute.data;\n\t\t\t\t\t\tconst stride = data.stride;\n\t\t\t\t\t\tconst offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data && data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, data.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tstride * bytesPerElement,\n\t\t\t\t\t\t\t\t( offset + ( size / programAttribute.locationSize ) * i ) * bytesPerElement\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tsize * bytesPerElement,\n\t\t\t\t\t\t\t\t( size / programAttribute.locationSize ) * i * bytesPerElement\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tconst value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\tgl.vertexAttrib2fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\tgl.vertexAttrib3fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\tgl.vertexAttrib4fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tgl.vertexAttrib1fv( programAttribute.location, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tdisableUnusedAttributes();\n\n\t}\n\n\tfunction dispose() {\n\n\t\treset();\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t}\n\n\t}\n\n\tfunction releaseStatesOfGeometry( geometry ) {\n\n\t\tif ( bindingStates[ geometry.id ] === undefined ) return;\n\n\t\tconst programMap = bindingStates[ geometry.id ];\n\n\t\tfor ( const programId in programMap ) {\n\n\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ programId ];\n\n\t\t}\n\n\t\tdelete bindingStates[ geometry.id ];\n\n\t}\n\n\tfunction releaseStatesOfProgram( program ) {\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tif ( programMap[ program.id ] === undefined ) continue;\n\n\t\t\tconst stateMap = programMap[ program.id ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ program.id ];\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\tresetDefaultState();\n\n\t\tif ( currentState === defaultState ) return;\n\n\t\tcurrentState = defaultState;\n\t\tbindVertexArrayObject( currentState.object );\n\n\t}\n\n\t// for backward-compatilibity\n\n\tfunction resetDefaultState() {\n\n\t\tdefaultState.geometry = null;\n\t\tdefaultState.program = null;\n\t\tdefaultState.wireframe = false;\n\n\t}\n\n\treturn {\n\n\t\tsetup: setup,\n\t\treset: reset,\n\t\tresetDefaultState: resetDefaultState,\n\t\tdispose: dispose,\n\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tdisableUnusedAttributes: disableUnusedAttributes\n\n\t};\n\n}\n\nfunction WebGLBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawArraysInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawArraysInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ methodName ]( mode, start, count, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\nfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\tlet maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( 35633, 36338 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36338 ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( 35633, 36337 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36337 ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\t/* eslint-disable no-undef */\n\tconst isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ) ||\n\t\t( typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext );\n\t/* eslint-enable no-undef */\n\n\tlet precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tconst maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tconst drawBuffers = isWebGL2 || extensions.has( 'WEBGL_draw_buffers' );\n\n\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tconst maxTextures = gl.getParameter( 34930 );\n\tconst maxVertexTextures = gl.getParameter( 35660 );\n\tconst maxTextureSize = gl.getParameter( 3379 );\n\tconst maxCubemapSize = gl.getParameter( 34076 );\n\n\tconst maxAttributes = gl.getParameter( 34921 );\n\tconst maxVertexUniforms = gl.getParameter( 36347 );\n\tconst maxVaryings = gl.getParameter( 36348 );\n\tconst maxFragmentUniforms = gl.getParameter( 36349 );\n\n\tconst vertexTextures = maxVertexTextures > 0;\n\tconst floatFragmentTextures = isWebGL2 || extensions.has( 'OES_texture_float' );\n\tconst floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\tconst maxSamples = isWebGL2 ? gl.getParameter( 36183 ) : 0;\n\n\treturn {\n\n\t\tisWebGL2: isWebGL2,\n\n\t\tdrawBuffers: drawBuffers,\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\tfloatVertexTextures: floatVertexTextures,\n\n\t\tmaxSamples: maxSamples\n\n\t};\n\n}\n\nfunction WebGLClipping( properties ) {\n\n\tconst scope = this;\n\n\tlet globalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false;\n\n\tconst plane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping, camera ) {\n\n\t\tconst enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\t\tresetGlobalState();\n\n\t};\n\n\tthis.setState = function ( material, camera, useCache ) {\n\n\t\tconst planes = material.clippingPlanes,\n\t\t\tclipIntersection = material.clipIntersection,\n\t\t\tclipShadows = material.clipShadows;\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4;\n\n\t\t\tlet dstArray = materialProperties.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, useCache );\n\n\t\t\tfor ( let i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tmaterialProperties.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tconst nPlanes = planes !== null ? planes.length : 0;\n\t\tlet dstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tconst flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\t\tscope.numIntersection = 0;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\nfunction WebGLCubeMaps( renderer ) {\n\n\tlet cubemaps = new WeakMap();\n\n\tfunction mapTextureMapping( texture, mapping ) {\n\n\t\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\t\ttexture.mapping = CubeReflectionMapping;\n\n\t\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\t\ttexture.mapping = CubeRefractionMapping;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture && texture.isRenderTargetTexture === false ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\tif ( cubemaps.has( texture ) ) {\n\n\t\t\t\t\tconst cubemap = cubemaps.get( texture ).texture;\n\t\t\t\t\treturn mapTextureMapping( cubemap, texture.mapping );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( image && image.height > 0 ) {\n\n\t\t\t\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\t\t\t\tconst renderTarget = new WebGLCubeRenderTarget( image.height / 2 );\n\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\t\t\t\t\t\tcubemaps.set( texture, renderTarget );\n\n\t\t\t\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\treturn mapTextureMapping( renderTarget.texture, texture.mapping );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemap = cubemaps.get( texture );\n\n\t\tif ( cubemap !== undefined ) {\n\n\t\t\tcubemaps.delete( texture );\n\t\t\tcubemap.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubemaps = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nclass OrthographicCamera extends Camera {\n\n\tconstructor( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'OrthographicCamera';\n\n\t\tthis.zoom = 1;\n\t\tthis.view = null;\n\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.top = top;\n\t\tthis.bottom = bottom;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t}\n\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tconst cx = ( this.right + this.left ) / 2;\n\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\tlet left = cx - dx;\n\t\tlet right = cx + dx;\n\t\tlet top = cy + dy;\n\t\tlet bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\tright = left + scaleW * this.view.width;\n\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n}\n\nOrthographicCamera.prototype.isOrthographicCamera = true;\n\nclass RawShaderMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( parameters );\n\n\t\tthis.type = 'RawShaderMaterial';\n\n\t}\n\n}\n\nRawShaderMaterial.prototype.isRawShaderMaterial = true;\n\nconst LOD_MIN = 4;\nconst LOD_MAX = 8;\nconst SIZE_MAX = Math.pow( 2, LOD_MAX );\n\n// The standard deviations (radians) associated with the extra mips. These are\n// chosen to approximate a Trowbridge-Reitz distribution function times the\n// geometric shadowing function. These sigma values squared must match the\n// variance #defines in cube_uv_reflection_fragment.glsl.js.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\nconst TOTAL_LODS = LOD_MAX - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\nconst MAX_SAMPLES = 20;\n\nconst ENCODINGS = {\n\t[ LinearEncoding ]: 0,\n\t[ sRGBEncoding ]: 1,\n\t[ RGBEEncoding ]: 2,\n\t[ RGBM7Encoding ]: 3,\n\t[ RGBM16Encoding ]: 4,\n\t[ RGBDEncoding ]: 5,\n\t[ GammaEncoding ]: 6\n};\n\nconst _flatCamera = /*@__PURE__*/ new OrthographicCamera();\nconst { _lodPlanes, _sizeLods, _sigmas } = /*@__PURE__*/ _createPlanes();\nconst _clearColor = /*@__PURE__*/ new Color();\nlet _oldTarget = null;\n\n// Golden Ratio\nconst PHI = ( 1 + Math.sqrt( 5 ) ) / 2;\nconst INV_PHI = 1 / PHI;\n\n// Vertices of a dodecahedron (except the opposites, which represent the\n// same axis), used as axis directions evenly spread on a sphere.\nconst _axisDirections = [\n\t/*@__PURE__*/ new Vector3( 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),\n\t/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ) ];\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n *\n * Paper: Fast, Accurate Image-Based Lighting\n * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view\n*/\n\nclass PMREMGenerator {\n\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._blurMaterial = _getBlurShader( MAX_SAMPLES );\n\t\tthis._equirectShader = null;\n\t\tthis._cubemapShader = null;\n\n\t\tthis._compileMaterial( this._blurMaterial );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t * is placed at the origin).\n\t */\n\tfromScene( scene, sigma = 0, near = 0.1, far = 100 ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * (RGBFormat) or HDR (RGBEFormat). The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromEquirectangular( equirectangular ) {\n\n\t\treturn this._fromTexture( equirectangular );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * (RGBFormat) or HDR (RGBEFormat). The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromCubemap( cubemap ) {\n\n\t\treturn this._fromTexture( cubemap );\n\n\t}\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileCubemapShader() {\n\n\t\tif ( this._cubemapShader === null ) {\n\n\t\t\tthis._cubemapShader = _getCubemapShader();\n\t\t\tthis._compileMaterial( this._cubemapShader );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileEquirectangularShader() {\n\n\t\tif ( this._equirectShader === null ) {\n\n\t\t\tthis._equirectShader = _getEquirectShader();\n\t\t\tthis._compileMaterial( this._equirectShader );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose() {\n\n\t\tthis._blurMaterial.dispose();\n\n\t\tif ( this._cubemapShader !== null ) this._cubemapShader.dispose();\n\t\tif ( this._equirectShader !== null ) this._equirectShader.dispose();\n\n\t\tfor ( let i = 0; i < _lodPlanes.length; i ++ ) {\n\n\t\t\t_lodPlanes[ i ].dispose();\n\n\t\t}\n\n\t}\n\n\t// private interface\n\n\t_cleanup( outputTarget ) {\n\n\t\tthis._pingPongRenderTarget.dispose();\n\t\tthis._renderer.setRenderTarget( _oldTarget );\n\t\toutputTarget.scissorTest = false;\n\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t}\n\n\t_fromTexture( texture ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\tconst cubeUVRenderTarget = this._allocateTargets( texture );\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_allocateTargets( texture ) { // warning: null texture is valid\n\n\t\tconst params = {\n\t\t\tmagFilter: NearestFilter,\n\t\t\tminFilter: NearestFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\ttype: UnsignedByteType,\n\t\t\tformat: RGBEFormat,\n\t\t\tencoding: _isLDR( texture ) ? texture.encoding : RGBEEncoding,\n\t\t\tdepthBuffer: false\n\t\t};\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( params );\n\t\tcubeUVRenderTarget.depthBuffer = texture ? false : true;\n\t\tthis._pingPongRenderTarget = _createRenderTarget( params );\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_compileMaterial( material ) {\n\n\t\tconst tmpMesh = new Mesh( _lodPlanes[ 0 ], material );\n\t\tthis._renderer.compile( tmpMesh, _flatCamera );\n\n\t}\n\n\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {\n\n\t\tconst fov = 90;\n\t\tconst aspect = 1;\n\t\tconst cubeCamera = new PerspectiveCamera( fov, aspect, near, far );\n\t\tconst upSign = [ 1, - 1, 1, 1, 1, 1 ];\n\t\tconst forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];\n\t\tconst renderer = this._renderer;\n\n\t\tconst originalAutoClear = renderer.autoClear;\n\t\tconst outputEncoding = renderer.outputEncoding;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\trenderer.getClearColor( _clearColor );\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.outputEncoding = LinearEncoding;\n\t\trenderer.autoClear = false;\n\n\t\tconst backgroundMaterial = new MeshBasicMaterial( {\n\t\t\tname: 'PMREM.Background',\n\t\t\tside: BackSide,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t} );\n\n\t\tconst backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );\n\n\t\tlet useSolidColor = false;\n\t\tconst background = scene.background;\n\n\t\tif ( background ) {\n\n\t\t\tif ( background.isColor ) {\n\n\t\t\t\tbackgroundMaterial.color.copy( background );\n\t\t\t\tscene.background = null;\n\t\t\t\tuseSolidColor = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tbackgroundMaterial.color.copy( _clearColor );\n\t\t\tuseSolidColor = true;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\t\t\tif ( col == 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( forwardSign[ i ], 0, 0 );\n\n\t\t\t} else if ( col == 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.lookAt( 0, forwardSign[ i ], 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( 0, 0, forwardSign[ i ] );\n\n\t\t\t}\n\n\t\t\t_setViewport( cubeUVRenderTarget,\n\t\t\t\tcol * SIZE_MAX, i > 2 ? SIZE_MAX : 0, SIZE_MAX, SIZE_MAX );\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\n\t\t\tif ( useSolidColor ) {\n\n\t\t\t\trenderer.render( backgroundBox, cubeCamera );\n\n\t\t\t}\n\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\tbackgroundBox.geometry.dispose();\n\t\tbackgroundBox.material.dispose();\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.outputEncoding = outputEncoding;\n\t\trenderer.autoClear = originalAutoClear;\n\t\tscene.background = background;\n\n\t}\n\n\t_setEncoding( uniform, texture ) {\n\n\t\tif ( this._renderer.capabilities.isWebGL2 === true && texture.format === RGBAFormat && texture.type === UnsignedByteType && texture.encoding === sRGBEncoding ) {\n\n\t\t\tuniform.value = ENCODINGS[ LinearEncoding ];\n\n\t\t} else {\n\n\t\t\tuniform.value = ENCODINGS[ texture.encoding ];\n\n\t\t}\n\n\t}\n\n\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tconst isCubeTexture = ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping );\n\n\t\tif ( isCubeTexture ) {\n\n\t\t\tif ( this._cubemapShader == null ) {\n\n\t\t\t\tthis._cubemapShader = _getCubemapShader();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( this._equirectShader == null ) {\n\n\t\t\t\tthis._equirectShader = _getEquirectShader();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = isCubeTexture ? this._cubemapShader : this._equirectShader;\n\t\tconst mesh = new Mesh( _lodPlanes[ 0 ], material );\n\n\t\tconst uniforms = material.uniforms;\n\n\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\tif ( ! isCubeTexture ) {\n\n\t\t\tuniforms[ 'texelSize' ].value.set( 1.0 / texture.image.width, 1.0 / texture.image.height );\n\n\t\t}\n\n\t\tthis._setEncoding( uniforms[ 'inputEncoding' ], texture );\n\t\tthis._setEncoding( uniforms[ 'outputEncoding' ], cubeUVRenderTarget.texture );\n\n\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * SIZE_MAX, 2 * SIZE_MAX );\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera );\n\n\t}\n\n\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tfor ( let i = 1; i < TOTAL_LODS; i ++ ) {\n\n\t\t\tconst sigma = Math.sqrt( _sigmas[ i ] * _sigmas[ i ] - _sigmas[ i - 1 ] * _sigmas[ i - 1 ] );\n\n\t\t\tconst poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];\n\n\t\t\tthis._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t}\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t */\n\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t}\n\n\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\tconsole.error(\n\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = new Mesh( _lodPlanes[ lodOut ], blurMaterial );\n\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\tconst pixels = _sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\tconsole.warn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i == 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\tblurUniforms[ 'samples' ].value = samples;\n\t\tblurUniforms[ 'weights' ].value = weights;\n\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t}\n\n\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\tblurUniforms[ 'mipInt' ].value = LOD_MAX - lodIn;\n\n\t\tthis._setEncoding( blurUniforms[ 'inputEncoding' ], targetIn.texture );\n\t\tthis._setEncoding( blurUniforms[ 'outputEncoding' ], targetIn.texture );\n\n\t\tconst outputSize = _sizeLods[ lodOut ];\n\t\tconst x = 3 * Math.max( 0, SIZE_MAX - 2 * outputSize );\n\t\tconst y = ( lodOut === 0 ? 0 : 2 * SIZE_MAX ) + 2 * outputSize * ( lodOut > LOD_MAX - LOD_MIN ? lodOut - LOD_MAX + LOD_MIN : 0 );\n\n\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera );\n\n\t}\n\n}\n\nfunction _isLDR( texture ) {\n\n\tif ( texture === undefined || texture.type !== UnsignedByteType ) return false;\n\n\treturn texture.encoding === LinearEncoding || texture.encoding === sRGBEncoding || texture.encoding === GammaEncoding;\n\n}\n\nfunction _createPlanes() {\n\n\tconst _lodPlanes = [];\n\tconst _sizeLods = [];\n\tconst _sigmas = [];\n\n\tlet lod = LOD_MAX;\n\n\tfor ( let i = 0; i < TOTAL_LODS; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\t_sizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > LOD_MAX - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - LOD_MAX + LOD_MIN - 1 ];\n\n\t\t} else if ( i == 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\t_sigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 1 );\n\t\tconst min = - texelSize / 2;\n\t\tconst max = 1 + texelSize / 2;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : - 1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t}\n\n\t\tconst planes = new BufferGeometry();\n\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\t_lodPlanes.push( planes );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { _lodPlanes, _sizeLods, _sigmas };\n\n}\n\nfunction _createRenderTarget( params ) {\n\n\tconst cubeUVRenderTarget = new WebGLRenderTarget( 3 * SIZE_MAX, 3 * SIZE_MAX, params );\n\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _setViewport( target, x, y, width, height ) {\n\n\ttarget.viewport.set( x, y, width, height );\n\ttarget.scissor.set( x, y, width, height );\n\n}\n\nfunction _getBlurShader( maxSamples ) {\n\n\tconst weights = new Float32Array( maxSamples );\n\tconst poleAxis = new Vector3( 0, 1, 0 );\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'SphericalGaussianBlur',\n\n\t\tdefines: { 'n': maxSamples },\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'samples': { value: 1 },\n\t\t\t'weights': { value: weights },\n\t\t\t'latitudinal': { value: false },\n\t\t\t'dTheta': { value: 0 },\n\t\t\t'mipInt': { value: 0 },\n\t\t\t'poleAxis': { value: poleAxis },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getEquirectShader() {\n\n\tconst texelSize = new Vector2( 1, 1 );\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'EquirectangularToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'texelSize': { value: texelSize },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getCubemapShader() {\n\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'CubemapToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getCommonVertexShader() {\n\n\treturn /* glsl */`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`;\n\n}\n\nfunction _getEncodings() {\n\n\treturn /* glsl */`\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t`;\n\n}\n\nfunction WebGLCubeUVMaps( renderer ) {\n\n\tlet cubeUVmaps = new WeakMap();\n\n\tlet pmremGenerator = null;\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture && texture.isRenderTargetTexture === false ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tconst isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );\n\t\t\tconst isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );\n\n\t\t\tif ( isEquirectMap || isCubeMap ) {\n\n\t\t\t\t// equirect/cube map to cubeUV conversion\n\n\t\t\t\tif ( cubeUVmaps.has( texture ) ) {\n\n\t\t\t\t\treturn cubeUVmaps.get( texture ).texture;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {\n\n\t\t\t\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\t\tconst renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );\n\t\t\t\t\t\tcubeUVmaps.set( texture, renderTarget );\n\n\t\t\t\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction isCubeTextureComplete( image ) {\n\n\t\tlet count = 0;\n\t\tconst length = 6;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tif ( image[ i ] !== undefined ) count ++;\n\n\t\t}\n\n\t\treturn count === length;\n\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemapUV = cubeUVmaps.get( texture );\n\n\t\tif ( cubemapUV !== undefined ) {\n\n\t\t\tcubeUVmaps.delete( texture );\n\t\t\tcubemapUV.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubeUVmaps = new WeakMap();\n\n\t\tif ( pmremGenerator !== null ) {\n\n\t\t\tpmremGenerator.dispose();\n\t\t\tpmremGenerator = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLExtensions( gl ) {\n\n\tconst extensions = {};\n\n\tfunction getExtension( name ) {\n\n\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\treturn extensions[ name ];\n\n\t\t}\n\n\t\tlet extension;\n\n\t\tswitch ( name ) {\n\n\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\textension = gl.getExtension( name );\n\n\t\t}\n\n\t\textensions[ name ] = extension;\n\n\t\treturn extension;\n\n\t}\n\n\treturn {\n\n\t\thas: function ( name ) {\n\n\t\t\treturn getExtension( name ) !== null;\n\n\t\t},\n\n\t\tinit: function ( capabilities ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\tgetExtension( 'EXT_color_buffer_float' );\n\n\t\t\t} else {\n\n\t\t\t\tgetExtension( 'WEBGL_depth_texture' );\n\t\t\t\tgetExtension( 'OES_texture_float' );\n\t\t\t\tgetExtension( 'OES_texture_half_float' );\n\t\t\t\tgetExtension( 'OES_texture_half_float_linear' );\n\t\t\t\tgetExtension( 'OES_standard_derivatives' );\n\t\t\t\tgetExtension( 'OES_element_index_uint' );\n\t\t\t\tgetExtension( 'OES_vertex_array_object' );\n\t\t\t\tgetExtension( 'ANGLE_instanced_arrays' );\n\n\t\t\t}\n\n\t\t\tgetExtension( 'OES_texture_float_linear' );\n\t\t\tgetExtension( 'EXT_color_buffer_half_float' );\n\n\t\t},\n\n\t\tget: function ( name ) {\n\n\t\t\tconst extension = getExtension( name );\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\tconst geometries = {};\n\tconst wireframeAttributes = new WeakMap();\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tconst geometry = event.target;\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\tattributes.remove( geometry.index );\n\n\t\t}\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tattributes.remove( geometry.attributes[ name ] );\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\tconst attribute = wireframeAttributes.get( geometry );\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\twireframeAttributes.delete( geometry );\n\n\t\t}\n\n\t\tbindingStates.releaseStatesOfGeometry( geometry );\n\n\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\tdelete geometry._maxInstanceCount;\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tif ( geometries[ geometry.id ] === true ) return geometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tgeometries[ geometry.id ] = true;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\tfor ( const name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], 34962 );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateWireframeAttribute( geometry ) {\n\n\t\tconst indices = [];\n\n\t\tconst geometryIndex = geometry.index;\n\t\tconst geometryPosition = geometry.attributes.position;\n\t\tlet version = 0;\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tconst array = geometryIndex.array;\n\t\t\tversion = geometryIndex.version;\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = array[ i + 0 ];\n\t\t\t\tconst b = array[ i + 1 ];\n\t\t\t\tconst c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst array = geometryPosition.array;\n\t\t\tversion = geometryPosition.version;\n\n\t\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tconst a = i + 0;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\t\tattribute.version = version;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates\n\n\t\t//\n\n\t\tconst previousAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( previousAttribute ) attributes.remove( previousAttribute );\n\n\t\t//\n\n\t\twireframeAttributes.set( geometry, attribute );\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tconst currentAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( currentAttribute ) {\n\n\t\t\tconst geometryIndex = geometry.index;\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\t// if the attribute is obsolete, create a new one\n\n\t\t\t\tif ( currentAttribute.version < geometryIndex.version ) {\n\n\t\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t}\n\n\t\treturn wireframeAttributes.get( geometry );\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tlet type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawElementsInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawElementsInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ methodName ]( mode, count, type, start * bytesPerElement, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\nfunction WebGLInfo( gl ) {\n\n\tconst memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tconst render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase 4:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 3:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase 0:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.frame ++;\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\nclass DataTexture2DArray extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper( null );\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nDataTexture2DArray.prototype.isDataTexture2DArray = true;\n\nfunction numericalSort( a, b ) {\n\n\treturn a[ 0 ] - b[ 0 ];\n\n}\n\nfunction absNumericalSort( a, b ) {\n\n\treturn Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );\n\n}\n\nfunction denormalize( morph, attribute ) {\n\n\tlet denominator = 1;\n\tconst array = attribute.isInterleavedBufferAttribute ? attribute.data.array : attribute.array;\n\n\tif ( array instanceof Int8Array ) denominator = 127;\n\telse if ( array instanceof Int16Array ) denominator = 32767;\n\telse if ( array instanceof Int32Array ) denominator = 2147483647;\n\telse console.error( 'THREE.WebGLMorphtargets: Unsupported morph attribute data type: ', array );\n\n\tmorph.divideScalar( denominator );\n\n}\n\nfunction WebGLMorphtargets( gl, capabilities, textures ) {\n\n\tconst influencesList = {};\n\tconst morphInfluences = new Float32Array( 8 );\n\tconst morphTextures = new WeakMap();\n\tconst morph = new Vector3();\n\n\tconst workInfluences = [];\n\n\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\tworkInfluences[ i ] = [ i, 0 ];\n\n\t}\n\n\tfunction update( object, geometry, material, program ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\tif ( capabilities.isWebGL2 === true ) {\n\n\t\t\t// instead of using attributes, the WebGL 2 code path encodes morph targets\n\t\t\t// into an array of data textures. Each layer represents a single morph target.\n\n\t\t\tconst numberOfMorphTargets = geometry.morphAttributes.position.length;\n\n\t\t\tlet entry = morphTextures.get( geometry );\n\n\t\t\tif ( entry === undefined || entry.count !== numberOfMorphTargets ) {\n\n\t\t\t\tif ( entry !== undefined ) entry.texture.dispose();\n\n\t\t\t\tconst hasMorphNormals = geometry.morphAttributes.normal !== undefined;\n\n\t\t\t\tconst morphTargets = geometry.morphAttributes.position;\n\t\t\t\tconst morphNormals = geometry.morphAttributes.normal || [];\n\n\t\t\t\tconst numberOfVertices = geometry.attributes.position.count;\n\t\t\t\tconst numberOfVertexData = ( hasMorphNormals === true ) ? 2 : 1; // (v,n) vs. (v)\n\n\t\t\t\tlet width = numberOfVertices * numberOfVertexData;\n\t\t\t\tlet height = 1;\n\n\t\t\t\tif ( width > capabilities.maxTextureSize ) {\n\n\t\t\t\t\theight = Math.ceil( width / capabilities.maxTextureSize );\n\t\t\t\t\twidth = capabilities.maxTextureSize;\n\n\t\t\t\t}\n\n\t\t\t\tconst buffer = new Float32Array( width * height * 4 * numberOfMorphTargets );\n\n\t\t\t\tconst texture = new DataTexture2DArray( buffer, width, height, numberOfMorphTargets );\n\t\t\t\ttexture.format = RGBAFormat; // using RGBA since RGB might be emulated (and is thus slower)\n\t\t\t\ttexture.type = FloatType;\n\n\t\t\t\t// fill buffer\n\n\t\t\t\tconst vertexDataStride = numberOfVertexData * 4;\n\n\t\t\t\tfor ( let i = 0; i < numberOfMorphTargets; i ++ ) {\n\n\t\t\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\t\t\tconst morphNormal = morphNormals[ i ];\n\n\t\t\t\t\tconst offset = width * height * 4 * i;\n\n\t\t\t\t\tfor ( let j = 0; j < morphTarget.count; j ++ ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphTarget, j );\n\n\t\t\t\t\t\tif ( morphTarget.normalized === true ) denormalize( morph, morphTarget );\n\n\t\t\t\t\t\tconst stride = j * vertexDataStride;\n\n\t\t\t\t\t\tbuffer[ offset + stride + 0 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 1 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 2 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 3 ] = 0;\n\n\t\t\t\t\t\tif ( hasMorphNormals === true ) {\n\n\t\t\t\t\t\t\tmorph.fromBufferAttribute( morphNormal, j );\n\n\t\t\t\t\t\t\tif ( morphNormal.normalized === true ) denormalize( morph, morphNormal );\n\n\t\t\t\t\t\t\tbuffer[ offset + stride + 4 ] = morph.x;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 5 ] = morph.y;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 6 ] = morph.z;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 7 ] = 0;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tentry = {\n\t\t\t\t\tcount: numberOfMorphTargets,\n\t\t\t\t\ttexture: texture,\n\t\t\t\t\tsize: new Vector2( width, height )\n\t\t\t\t};\n\n\t\t\t\tmorphTextures.set( geometry, entry );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet morphInfluencesSum = 0;\n\n\t\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\t\tmorphInfluencesSum += objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );\n\n\n\t\t} else {\n\n\t\t\t// When object doesn't have morph target influences defined, we treat it as a 0-length array\n\t\t\t// This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences\n\n\t\t\tconst length = objectInfluences === undefined ? 0 : objectInfluences.length;\n\n\t\t\tlet influences = influencesList[ geometry.id ];\n\n\t\t\tif ( influences === undefined || influences.length !== length ) {\n\n\t\t\t\t// initialise list\n\n\t\t\t\tinfluences = [];\n\n\t\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\t\tinfluences[ i ] = [ i, 0 ];\n\n\t\t\t\t}\n\n\t\t\t\tinfluencesList[ geometry.id ] = influences;\n\n\t\t\t}\n\n\t\t\t// Collect influences\n\n\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\tconst influence = influences[ i ];\n\n\t\t\t\tinfluence[ 0 ] = i;\n\t\t\t\tinfluence[ 1 ] = objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tinfluences.sort( absNumericalSort );\n\n\t\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\t\tif ( i < length && influences[ i ][ 1 ] ) {\n\n\t\t\t\t\tworkInfluences[ i ][ 0 ] = influences[ i ][ 0 ];\n\t\t\t\t\tworkInfluences[ i ][ 1 ] = influences[ i ][ 1 ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tworkInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER;\n\t\t\t\t\tworkInfluences[ i ][ 1 ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tworkInfluences.sort( numericalSort );\n\n\t\t\tconst morphTargets = geometry.morphAttributes.position;\n\t\t\tconst morphNormals = geometry.morphAttributes.normal;\n\n\t\t\tlet morphInfluencesSum = 0;\n\n\t\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\t\tconst influence = workInfluences[ i ];\n\t\t\t\tconst index = influence[ 0 ];\n\t\t\t\tconst value = influence[ 1 ];\n\n\t\t\t\tif ( index !== Number.MAX_SAFE_INTEGER && value ) {\n\n\t\t\t\t\tif ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) {\n\n\t\t\t\t\t\tgeometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) {\n\n\t\t\t\t\t\tgeometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\t\tmorphInfluencesSum += value;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) {\n\n\t\t\t\t\t\tgeometry.deleteAttribute( 'morphTarget' + i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) {\n\n\t\t\t\t\t\tgeometry.deleteAttribute( 'morphNormal' + i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// GLSL shader uses formula baseinfluence * base + sum(target * influence)\n\t\t\t// This allows us to switch between absolute morphs and relative morphs without changing shader code\n\t\t\t// When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence)\n\t\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\nfunction WebGLObjects( gl, geometries, attributes, info ) {\n\n\tlet updateMap = new WeakMap();\n\n\tfunction update( object ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\tconst geometry = object.geometry;\n\t\tconst buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateMap.get( buffergeometry ) !== frame ) {\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateMap.set( buffergeometry, frame );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\tif ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) {\n\n\t\t\t\tobject.addEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\t\t}\n\n\t\t\tattributes.update( object.instanceMatrix, 34962 );\n\n\t\t\tif ( object.instanceColor !== null ) {\n\n\t\t\t\tattributes.update( object.instanceColor, 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateMap = new WeakMap();\n\n\t}\n\n\tfunction onInstancedMeshDispose( event ) {\n\n\t\tconst instancedMesh = event.target;\n\n\t\tinstancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\tattributes.remove( instancedMesh.instanceMatrix );\n\n\t\tif ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\nclass DataTexture3D extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\t// We're going to add .setXXX() methods for setting properties later.\n\t\t// Users can still set in DataTexture3D directly.\n\t\t//\n\t\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t\t// \ttexture.anisotropy = 16;\n\t\t//\n\t\t// See #14839\n\n\t\tsuper( null );\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nDataTexture3D.prototype.isDataTexture3D = true;\n\n/**\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [textures] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'textures' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (textures factorizations):\n *\n * .upload( gl, seq, values, textures )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (textures factorizations):\n *\n * .setValue( gl, name, value, textures )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\nconst emptyTexture = new Texture();\nconst emptyTexture2dArray = new DataTexture2DArray();\nconst emptyTexture3d = new DataTexture3D();\nconst emptyCubeTexture = new CubeTexture();\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nconst arrayCacheF32 = [];\nconst arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nconst mat4array = new Float32Array( 16 );\nconst mat3array = new Float32Array( 9 );\nconst mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tconst firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tconst n = nBlocks * blockSize;\n\tlet r = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( let i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( let i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( textures, n ) {\n\n\tlet r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\tr[ i ] = textures.allocateTextureUnit();\n\n\t}\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValueV1f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValueV2f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or THREE.MatrixN)\n\nfunction setValueM2( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM3( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM4( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single integer / boolean\n\nfunction setValueV1i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single integer / boolean vector (from flat array)\n\nfunction setValueV2i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform2iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV3i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform3iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV4i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform4iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\n// Single unsigned integer\n\nfunction setValueV1ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1ui( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single unsigned integer vector (from flat array)\n\nfunction setValueV2ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform2uiv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV3ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform3uiv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV4ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform4uiv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.safeSetTexture2D( v || emptyTexture, unit );\n\n}\n\nfunction setValueT3D1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture3D( v || emptyTexture3d, unit );\n\n}\n\nfunction setValueT6( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.safeSetTextureCube( v || emptyCubeTexture, unit );\n\n}\n\nfunction setValueT2DArray1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2DArray( v || emptyTexture2dArray, unit );\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1f; // FLOAT\n\t\tcase 0x8b50: return setValueV2f; // _VEC2\n\t\tcase 0x8b51: return setValueV3f; // _VEC3\n\t\tcase 0x8b52: return setValueV4f; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2; // _MAT2\n\t\tcase 0x8b5b: return setValueM3; // _MAT3\n\t\tcase 0x8b5c: return setValueM4; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2i; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3i; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4i; // _VEC4\n\n\t\tcase 0x1405: return setValueV1ui; // UINT\n\t\tcase 0x8dc6: return setValueV2ui; // _VEC2\n\t\tcase 0x8dc7: return setValueV3ui; // _VEC3\n\t\tcase 0x8dc8: return setValueV4ui; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3D1;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArray1;\n\n\t}\n\n}\n\n\n// Array of scalars\n\nfunction setValueV1fArray( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\n\n// Array of vectors (from flat array or array of THREE.VectorN)\n\nfunction setValueV2fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 2 );\n\n\tgl.uniform2fv( this.addr, data );\n\n}\n\nfunction setValueV3fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 3 );\n\n\tgl.uniform3fv( this.addr, data );\n\n}\n\nfunction setValueV4fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniform4fv( this.addr, data );\n\n}\n\n// Array of matrices (from flat array or array of THREE.MatrixN)\n\nfunction setValueM2Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n}\n\nfunction setValueM3Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 9 );\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n}\n\nfunction setValueM4Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 16 );\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n}\n\n// Array of integer / boolean\n\nfunction setValueV1iArray( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\n// Array of integer / boolean vectors (from flat array)\n\nfunction setValueV2iArray( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValueV3iArray( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValueV4iArray( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n// Array of unsigned integer\n\nfunction setValueV1uiArray( gl, v ) {\n\n\tgl.uniform1uiv( this.addr, v );\n\n}\n\n// Array of unsigned integer vectors (from flat array)\n\nfunction setValueV2uiArray( gl, v ) {\n\n\tgl.uniform2uiv( this.addr, v );\n\n}\n\nfunction setValueV3uiArray( gl, v ) {\n\n\tgl.uniform3uiv( this.addr, v );\n\n}\n\nfunction setValueV4uiArray( gl, v ) {\n\n\tgl.uniform4uiv( this.addr, v );\n\n}\n\n\n// Array of textures (2D / Cube)\n\nfunction setValueT1Array( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.safeSetTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6Array( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.safeSetTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1fArray; // FLOAT\n\t\tcase 0x8b50: return setValueV2fArray; // _VEC2\n\t\tcase 0x8b51: return setValueV3fArray; // _VEC3\n\t\tcase 0x8b52: return setValueV4fArray; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2Array; // _MAT2\n\t\tcase 0x8b5b: return setValueM3Array; // _MAT3\n\t\tcase 0x8b5c: return setValueM4Array; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4\n\n\t\tcase 0x1405: return setValueV1uiArray; // UINT\n\t\tcase 0x8dc6: return setValueV2uiArray; // _VEC2\n\t\tcase 0x8dc7: return setValueV3uiArray; // _VEC3\n\t\tcase 0x8dc8: return setValueV4uiArray; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1Array;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6Array;\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nfunction SingleUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.cache = [];\n\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nfunction PureArrayUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.cache = [];\n\tthis.size = activeInfo.size;\n\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nPureArrayUniform.prototype.updateCache = function ( data ) {\n\n\tconst cache = this.cache;\n\n\tif ( data instanceof Float32Array && cache.length !== data.length ) {\n\n\t\tthis.cache = new Float32Array( data.length );\n\n\t}\n\n\tcopyArray( cache, data );\n\n};\n\nfunction StructuredUniform( id ) {\n\n\tthis.id = id;\n\n\tthis.seq = [];\n\tthis.map = {};\n\n}\n\nStructuredUniform.prototype.setValue = function ( gl, value, textures ) {\n\n\tconst seq = this.seq;\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ];\n\t\tu.setValue( gl, value[ u.id ], textures );\n\n\t}\n\n};\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nconst RePathPart = /(\\w+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n// - followed by an optional right bracket (found when array index)\n// - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tconst path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\twhile ( true ) {\n\n\t\tconst match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex;\n\n\t\tlet id = match[ 1 ];\n\t\tconst idIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tconst map = container.map;\n\t\t\tlet next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nfunction WebGLUniforms( gl, program ) {\n\n\tthis.seq = [];\n\tthis.map = {};\n\n\tconst n = gl.getProgramParameter( program, 35718 );\n\n\tfor ( let i = 0; i < n; ++ i ) {\n\n\t\tconst info = gl.getActiveUniform( program, i ),\n\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\tparseUniform( info, addr, this );\n\n\t}\n\n}\n\nWebGLUniforms.prototype.setValue = function ( gl, name, value, textures ) {\n\n\tconst u = this.map[ name ];\n\n\tif ( u !== undefined ) u.setValue( gl, value, textures );\n\n};\n\nWebGLUniforms.prototype.setOptional = function ( gl, object, name ) {\n\n\tconst v = object[ name ];\n\n\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n};\n\n\n// Static interface\n\nWebGLUniforms.upload = function ( gl, seq, values, textures ) {\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ],\n\t\t\tv = values[ u.id ];\n\n\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\tu.setValue( gl, v.value, textures );\n\n\t\t}\n\n\t}\n\n};\n\nWebGLUniforms.seqWithValue = function ( seq, values ) {\n\n\tconst r = [];\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ];\n\t\tif ( u.id in values ) r.push( u );\n\n\t}\n\n\treturn r;\n\n};\n\nfunction WebGLShader( gl, type, string ) {\n\n\tconst shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\treturn shader;\n\n}\n\nlet programIdCount = 0;\n\nfunction addLineNumbers( string ) {\n\n\tconst lines = string.split( '\\n' );\n\n\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\tlines[ i ] = ( i + 1 ) + ': ' + lines[ i ];\n\n\t}\n\n\treturn lines.join( '\\n' );\n\n}\n\nfunction getEncodingComponents( encoding ) {\n\n\tswitch ( encoding ) {\n\n\t\tcase LinearEncoding:\n\t\t\treturn [ 'Linear', '( value )' ];\n\t\tcase sRGBEncoding:\n\t\t\treturn [ 'sRGB', '( value )' ];\n\t\tcase RGBEEncoding:\n\t\t\treturn [ 'RGBE', '( value )' ];\n\t\tcase RGBM7Encoding:\n\t\t\treturn [ 'RGBM', '( value, 7.0 )' ];\n\t\tcase RGBM16Encoding:\n\t\t\treturn [ 'RGBM', '( value, 16.0 )' ];\n\t\tcase RGBDEncoding:\n\t\t\treturn [ 'RGBD', '( value, 256.0 )' ];\n\t\tcase GammaEncoding:\n\t\t\treturn [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ];\n\t\tcase LogLuvEncoding:\n\t\t\treturn [ 'LogLuv', '( value )' ];\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding );\n\t\t\treturn [ 'Linear', '( value )' ];\n\n\t}\n\n}\n\nfunction getShaderErrors( gl, shader, type ) {\n\n\tconst status = gl.getShaderParameter( shader, 35713 );\n\tconst errors = gl.getShaderInfoLog( shader ).trim();\n\n\tif ( status && errors === '' ) return '';\n\n\t// --enable-privileged-webgl-extension\n\t// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\treturn type.toUpperCase() + '\\n\\n' + errors + '\\n\\n' + addLineNumbers( gl.getShaderSource( shader ) );\n\n}\n\nfunction getTexelDecodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }';\n\n}\n\nfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tlet toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tcase ACESFilmicToneMapping:\n\t\t\ttoneMappingName = 'ACESFilmic';\n\t\t\tbreak;\n\n\t\tcase CustomToneMapping:\n\t\t\ttoneMappingName = 'Custom';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );\n\t\t\ttoneMappingName = 'Linear';\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nfunction generateExtensions( parameters ) {\n\n\tconst chunks = [\n\t\t( parameters.extensionDerivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t( parameters.extensionShaderTextureLOD || parameters.envMap || parameters.transmission ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tconst chunks = [];\n\n\tfor ( const name in defines ) {\n\n\t\tconst value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tconst attributes = {};\n\n\tconst n = gl.getProgramParameter( program, 35721 );\n\n\tfor ( let i = 0; i < n; i ++ ) {\n\n\t\tconst info = gl.getActiveAttrib( program, i );\n\t\tconst name = info.name;\n\n\t\tlet locationSize = 1;\n\t\tif ( info.type === 35674 ) locationSize = 2;\n\t\tif ( info.type === 35675 ) locationSize = 3;\n\t\tif ( info.type === 35676 ) locationSize = 4;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = {\n\t\t\ttype: info.type,\n\t\t\tlocation: gl.getAttribLocation( program, name ),\n\t\t\tlocationSize: locationSize\n\t\t};\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )\n\t\t.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )\n\t\t.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\n// Resolve Includes\n\nconst includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\nfunction resolveIncludes( string ) {\n\n\treturn string.replace( includePattern, includeReplacer );\n\n}\n\nfunction includeReplacer( match, include ) {\n\n\tconst string = ShaderChunk[ include ];\n\n\tif ( string === undefined ) {\n\n\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t}\n\n\treturn resolveIncludes( string );\n\n}\n\n// Unroll Loops\n\nconst deprecatedUnrollLoopPattern = /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\nconst unrollLoopPattern = /#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;\n\nfunction unrollLoops( string ) {\n\n\treturn string\n\t\t.replace( unrollLoopPattern, loopReplacer )\n\t\t.replace( deprecatedUnrollLoopPattern, deprecatedLoopReplacer );\n\n}\n\nfunction deprecatedLoopReplacer( match, start, end, snippet ) {\n\n\tconsole.warn( 'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.' );\n\treturn loopReplacer( match, start, end, snippet );\n\n}\n\nfunction loopReplacer( match, start, end, snippet ) {\n\n\tlet string = '';\n\n\tfor ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\tstring += snippet\n\t\t\t.replace( /\\[\\s*i\\s*\\]/g, '[ ' + i + ' ]' )\n\t\t\t.replace( /UNROLLED_LOOP_INDEX/g, i );\n\n\t}\n\n\treturn string;\n\n}\n\n//\n\nfunction generatePrecision( parameters ) {\n\n\tlet precisionstring = 'precision ' + parameters.precision + ' float;\\nprecision ' + parameters.precision + ' int;';\n\n\tif ( parameters.precision === 'highp' ) {\n\n\t\tprecisionstring += '\\n#define HIGH_PRECISION';\n\n\t} else if ( parameters.precision === 'mediump' ) {\n\n\t\tprecisionstring += '\\n#define MEDIUM_PRECISION';\n\n\t} else if ( parameters.precision === 'lowp' ) {\n\n\t\tprecisionstring += '\\n#define LOW_PRECISION';\n\n\t}\n\n\treturn precisionstring;\n\n}\n\nfunction generateShadowMapTypeDefine( parameters ) {\n\n\tlet shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t} else if ( parameters.shadowMapType === VSMShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';\n\n\t}\n\n\treturn shadowMapTypeDefine;\n\n}\n\nfunction generateEnvMapTypeDefine( parameters ) {\n\n\tlet envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapTypeDefine;\n\n}\n\nfunction generateEnvMapModeDefine( parameters ) {\n\n\tlet envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeRefractionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapModeDefine;\n\n}\n\nfunction generateEnvMapBlendingDefine( parameters ) {\n\n\tlet envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapBlendingDefine;\n\n}\n\nfunction WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {\n\n\t// TODO Send this event to Three.js DevTools\n\t// console.log( 'WebGLProgram', cacheKey );\n\n\tconst gl = renderer.getContext();\n\n\tconst defines = parameters.defines;\n\n\tlet vertexShader = parameters.vertexShader;\n\tlet fragmentShader = parameters.fragmentShader;\n\n\tconst shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );\n\tconst envMapTypeDefine = generateEnvMapTypeDefine( parameters );\n\tconst envMapModeDefine = generateEnvMapModeDefine( parameters );\n\tconst envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );\n\n\n\tconst gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;\n\n\tconst customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );\n\n\tconst customDefines = generateDefines( defines );\n\n\tconst program = gl.createProgram();\n\n\tlet prefixVertex, prefixFragment;\n\tlet versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\\n' : '';\n\n\tif ( parameters.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.instancing ? '#define USE_INSTANCING' : '',\n\t\t\tparameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',\n\n\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t'#define MAX_BONES ' + parameters.maxBones,\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULARCOLORMAP' : '',\n\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEENCOLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEENROUGHNESSMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\t\t\tparameters.useVertexTexture ? '#define BONE_TEXTURE' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\t( parameters.morphTargets && parameters.isWebGL2 ) ? '#define MORPHTARGETS_TEXTURE' : '',\n\t\t\t( parameters.morphTargets && parameters.isWebGL2 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t'#ifdef USE_INSTANCING',\n\n\t\t\t'\tattribute mat4 instanceMatrix;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_COLOR',\n\n\t\t\t'\tattribute vec3 instanceColor;',\n\n\t\t\t'#endif',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_TANGENT',\n\n\t\t\t'\tattribute vec4 tangent;',\n\n\t\t\t'#endif',\n\n\t\t\t'#if defined( USE_COLOR_ALPHA )',\n\n\t\t\t'\tattribute vec4 color;',\n\n\t\t\t'#elif defined( USE_COLOR )',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )',\n\n\t\t\t'\tattribute vec3 morphTarget0;',\n\t\t\t'\tattribute vec3 morphTarget1;',\n\t\t\t'\tattribute vec3 morphTarget2;',\n\t\t\t'\tattribute vec3 morphTarget3;',\n\n\t\t\t'\t#ifdef USE_MORPHNORMALS',\n\n\t\t\t'\t\tattribute vec3 morphNormal0;',\n\t\t\t'\t\tattribute vec3 morphNormal1;',\n\t\t\t'\t\tattribute vec3 morphNormal2;',\n\t\t\t'\t\tattribute vec3 morphNormal3;',\n\n\t\t\t'\t#else',\n\n\t\t\t'\t\tattribute vec3 morphTarget4;',\n\t\t\t'\t\tattribute vec3 morphTarget5;',\n\t\t\t'\t\tattribute vec3 morphTarget6;',\n\t\t\t'\t\tattribute vec3 morphTarget7;',\n\n\t\t\t'\t#endif',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.matcap ? '#define USE_MATCAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\n\t\t\tparameters.clearcoat ? '#define USE_CLEARCOAT' : '',\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULARCOLORMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.alphaTest ? '#define USE_ALPHATEST' : '',\n\n\t\t\tparameters.sheen ? '#define USE_SHEEN' : '',\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEENCOLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEENROUGHNESSMAP' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t( ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ) ? '#define TEXTURE_LOD_EXT' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\t\t\tparameters.format === RGBFormat ? '#define OPAQUE' : '',\n\n\t\t\tShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tparameters.map ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',\n\t\t\tparameters.matcap ? getTexelDecodingFunction( 'matcapTexelToLinear', parameters.matcapEncoding ) : '',\n\t\t\tparameters.envMap ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',\n\t\t\tparameters.emissiveMap ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',\n\t\t\tparameters.specularColorMap ? getTexelDecodingFunction( 'specularColorMapTexelToLinear', parameters.specularColorMapEncoding ) : '',\n\t\t\tparameters.sheenColorMap ? getTexelDecodingFunction( 'sheenColorMapTexelToLinear', parameters.sheenColorMapEncoding ) : '',\n\t\t\tparameters.lightMap ? getTexelDecodingFunction( 'lightMapTexelToLinear', parameters.lightMapEncoding ) : '',\n\t\t\tgetTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ),\n\n\t\t\tparameters.depthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = resolveIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = resolveIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tif ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) {\n\n\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\n\t\tversionString = '#version 300 es\\n';\n\n\t\tprefixVertex = [\n\t\t\t'precision mediump sampler2DArray;',\n\t\t\t'#define attribute in',\n\t\t\t'#define varying out',\n\t\t\t'#define texture2D texture'\n\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\tprefixFragment = [\n\t\t\t'#define varying in',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : 'out highp vec4 pc_fragColor;',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',\n\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t'#define texture2D texture',\n\t\t\t'#define textureCube texture',\n\t\t\t'#define texture2DProj textureProj',\n\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t}\n\n\tconst vertexGlsl = versionString + prefixVertex + vertexShader;\n\tconst fragmentGlsl = versionString + prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tconst glVertexShader = WebGLShader( gl, 35633, vertexGlsl );\n\tconst glFragmentShader = WebGLShader( gl, 35632, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( parameters.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, parameters.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\t// check for link errors\n\tif ( renderer.debug.checkShaderErrors ) {\n\n\t\tconst programLog = gl.getProgramInfoLog( program ).trim();\n\t\tconst vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\t\tconst fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\t\tlet runnable = true;\n\t\tlet haveDiagnostics = true;\n\n\t\tif ( gl.getProgramParameter( program, 35714 ) === false ) {\n\n\t\t\trunnable = false;\n\n\t\t\tconst vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\tconst fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\tconsole.error(\n\t\t\t\t'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +\n\t\t\t\t'VALIDATE_STATUS ' + gl.getProgramParameter( program, 35715 ) + '\\n\\n' +\n\t\t\t\t'Program Info Log: ' + programLog + '\\n' +\n\t\t\t\tvertexErrors + '\\n' +\n\t\t\t\tfragmentErrors\n\t\t\t);\n\n\t\t} else if ( programLog !== '' ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Program Info Log:', programLog );\n\n\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\thaveDiagnostics = false;\n\n\t\t}\n\n\t\tif ( haveDiagnostics ) {\n\n\t\t\tthis.diagnostics = {\n\n\t\t\t\trunnable: runnable,\n\n\t\t\t\tprogramLog: programLog,\n\n\t\t\t\tvertexShader: {\n\n\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t},\n\n\t\t\t\tfragmentShader: {\n\n\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\tprefix: prefixFragment\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\t// Clean up\n\n\t// Crashes in iOS9 and iOS10. #18402\n\t// gl.detachShader( program, glVertexShader );\n\t// gl.detachShader( program, glFragmentShader );\n\n\tgl.deleteShader( glVertexShader );\n\tgl.deleteShader( glFragmentShader );\n\n\t// set up caching for uniform locations\n\n\tlet cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\tcachedUniforms = new WebGLUniforms( gl, program );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tlet cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tbindingStates.releaseStatesOfProgram( this );\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t//\n\n\tthis.name = parameters.shaderName;\n\tthis.id = programIdCount ++;\n\tthis.cacheKey = cacheKey;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\nfunction WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ) {\n\n\tconst programs = [];\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\tconst floatVertexTextures = capabilities.floatVertexTextures;\n\tconst maxVertexUniforms = capabilities.maxVertexUniforms;\n\tconst vertexTextures = capabilities.vertexTextures;\n\n\tlet precision = capabilities.precision;\n\n\tconst shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'toon',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tMeshMatcapMaterial: 'matcap',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow',\n\t\tSpriteMaterial: 'sprite'\n\t};\n\n\tconst parameterNames = [\n\t\t'precision', 'isWebGL2', 'supportsVertexTextures', 'outputEncoding', 'instancing', 'instancingColor',\n\t\t'map', 'mapEncoding', 'matcap', 'matcapEncoding', 'envMap', 'envMapMode', 'envMapEncoding', 'envMapCubeUV',\n\t\t'lightMap', 'lightMapEncoding', 'aoMap', 'emissiveMap', 'emissiveMapEncoding', 'bumpMap', 'normalMap',\n\t\t'objectSpaceNormalMap', 'tangentSpaceNormalMap',\n\t\t'clearcoat', 'clearcoatMap', 'clearcoatRoughnessMap', 'clearcoatNormalMap',\n\t\t'displacementMap', 'specularMap', , 'roughnessMap', 'metalnessMap', 'gradientMap',\n\t\t'alphaMap', 'alphaTest', 'combine', 'vertexColors', 'vertexAlphas', 'vertexTangents', 'vertexUvs', 'uvsVertexOnly', 'fog', 'useFog', 'fogExp2',\n\t\t'flatShading', 'sizeAttenuation', 'logarithmicDepthBuffer', 'skinning',\n\t\t'maxBones', 'useVertexTexture', 'morphTargets', 'morphNormals', 'morphTargetsCount', 'premultipliedAlpha',\n\t\t'numDirLights', 'numPointLights', 'numSpotLights', 'numHemiLights', 'numRectAreaLights',\n\t\t'numDirLightShadows', 'numPointLightShadows', 'numSpotLightShadows',\n\t\t'shadowMapEnabled', 'shadowMapType', 'toneMapping', 'physicallyCorrectLights',\n\t\t'doubleSided', 'flipSided', 'numClippingPlanes', 'numClipIntersection', 'depthPacking', 'dithering', 'format',\n\t\t'specularIntensityMap', 'specularColorMap', 'specularColorMapEncoding',\n\t\t'transmission', 'transmissionMap', 'thicknessMap',\n\t\t'sheen', 'sheenColorMap', 'sheenColorMapEncoding', 'sheenRoughnessMap'\n\t];\n\n\tfunction getMaxBones( object ) {\n\n\t\tconst skeleton = object.skeleton;\n\t\tconst bones = skeleton.bones;\n\n\t\tif ( floatVertexTextures ) {\n\n\t\t\treturn 1024;\n\n\t\t} else {\n\n\t\t\t// default for when object is not specified\n\t\t\t// ( for example when prebuilding shader to be used with multiple objects )\n\t\t\t//\n\t\t\t// - leave some extra space for other uniforms\n\t\t\t// - limit here is ANGLE's 254 max uniform vectors\n\t\t\t// (up to 54 should be safe)\n\n\t\t\tconst nVertexUniforms = maxVertexUniforms;\n\t\t\tconst nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );\n\n\t\t\tconst maxBones = Math.min( nVertexMatrices, bones.length );\n\n\t\t\tif ( maxBones < bones.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' );\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\treturn maxBones;\n\n\t\t}\n\n\t}\n\n\tfunction getTextureEncodingFromMap( map ) {\n\n\t\tlet encoding;\n\n\t\tif ( map && map.isTexture ) {\n\n\t\t\tencoding = map.encoding;\n\n\t\t} else if ( map && map.isWebGLRenderTarget ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLPrograms.getTextureEncodingFromMap: don\\'t use render targets as textures. Use their .texture property instead.' );\n\t\t\tencoding = map.texture.encoding;\n\n\t\t} else {\n\n\t\t\tencoding = LinearEncoding;\n\n\t\t}\n\n\t\tif ( isWebGL2 && map && map.isTexture && map.format === RGBAFormat && map.type === UnsignedByteType && map.encoding === sRGBEncoding ) {\n\n\t\t\tencoding = LinearEncoding; // disable inline decode for sRGB textures in WebGL 2\n\n\t\t}\n\n\t\treturn encoding;\n\n\t}\n\n\tfunction getParameters( material, lights, shadows, scene, object ) {\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\n\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tconst maxBones = object.isSkinnedMesh ? getMaxBones( object ) : 0;\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet vertexShader, fragmentShader;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\n\t\t\tvertexShader = shader.vertexShader;\n\t\t\tfragmentShader = shader.fragmentShader;\n\n\t\t} else {\n\n\t\t\tvertexShader = material.vertexShader;\n\t\t\tfragmentShader = material.fragmentShader;\n\n\t\t}\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tconst useAlphaTest = material.alphaTest > 0;\n\t\tconst useClearcoat = material.clearcoat > 0;\n\n\t\tconst parameters = {\n\n\t\t\tisWebGL2: isWebGL2,\n\n\t\t\tshaderID: shaderID,\n\t\t\tshaderName: material.type,\n\n\t\t\tvertexShader: vertexShader,\n\t\t\tfragmentShader: fragmentShader,\n\t\t\tdefines: material.defines,\n\n\t\t\tisRawShaderMaterial: material.isRawShaderMaterial === true,\n\t\t\tglslVersion: material.glslVersion,\n\n\t\t\tprecision: precision,\n\n\t\t\tinstancing: object.isInstancedMesh === true,\n\t\t\tinstancingColor: object.isInstancedMesh === true && object.instanceColor !== null,\n\n\t\t\tsupportsVertexTextures: vertexTextures,\n\t\t\toutputEncoding: ( currentRenderTarget !== null ) ? getTextureEncodingFromMap( currentRenderTarget.texture ) : renderer.outputEncoding,\n\t\t\tmap: !! material.map,\n\t\t\tmapEncoding: getTextureEncodingFromMap( material.map ),\n\t\t\tmatcap: !! material.matcap,\n\t\t\tmatcapEncoding: getTextureEncodingFromMap( material.matcap ),\n\t\t\tenvMap: !! envMap,\n\t\t\tenvMapMode: envMap && envMap.mapping,\n\t\t\tenvMapEncoding: getTextureEncodingFromMap( envMap ),\n\t\t\tenvMapCubeUV: ( !! envMap ) && ( ( envMap.mapping === CubeUVReflectionMapping ) || ( envMap.mapping === CubeUVRefractionMapping ) ),\n\t\t\tlightMap: !! material.lightMap,\n\t\t\tlightMapEncoding: getTextureEncodingFromMap( material.lightMap ),\n\t\t\taoMap: !! material.aoMap,\n\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\temissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap ),\n\t\t\tbumpMap: !! material.bumpMap,\n\t\t\tnormalMap: !! material.normalMap,\n\t\t\tobjectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap,\n\t\t\ttangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap,\n\n\t\t\tclearcoat: useClearcoat,\n\t\t\tclearcoatMap: useClearcoat && !! material.clearcoatMap,\n\t\t\tclearcoatRoughnessMap: useClearcoat && !! material.clearcoatRoughnessMap,\n\t\t\tclearcoatNormalMap: useClearcoat && !! material.clearcoatNormalMap,\n\n\t\t\tdisplacementMap: !! material.displacementMap,\n\t\t\troughnessMap: !! material.roughnessMap,\n\t\t\tmetalnessMap: !! material.metalnessMap,\n\t\t\tspecularMap: !! material.specularMap,\n\t\t\tspecularIntensityMap: !! material.specularIntensityMap,\n\t\t\tspecularColorMap: !! material.specularColorMap,\n\t\t\tspecularColorMapEncoding: getTextureEncodingFromMap( material.specularColorMap ),\n\n\t\t\talphaMap: !! material.alphaMap,\n\t\t\talphaTest: useAlphaTest,\n\n\t\t\tgradientMap: !! material.gradientMap,\n\n\t\t\tsheen: material.sheen > 0,\n\t\t\tsheenColorMap: !! material.sheenColorMap,\n\t\t\tsheenColorMapEncoding: getTextureEncodingFromMap( material.sheenColorMap ),\n\t\t\tsheenRoughnessMap: !! material.sheenRoughnessMap,\n\n\t\t\ttransmission: material.transmission > 0,\n\t\t\ttransmissionMap: !! material.transmissionMap,\n\t\t\tthicknessMap: !! material.thicknessMap,\n\n\t\t\tcombine: material.combine,\n\n\t\t\tvertexTangents: ( !! material.normalMap && !! object.geometry && !! object.geometry.attributes.tangent ),\n\t\t\tvertexColors: material.vertexColors,\n\t\t\tvertexAlphas: material.vertexColors === true && !! object.geometry && !! object.geometry.attributes.color && object.geometry.attributes.color.itemSize === 4,\n\t\t\tvertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || !! material.sheenColorMap || material.sheenRoughnessMap,\n\t\t\tuvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || material.transmission > 0 || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || !! material.sheen > 0 || !! material.sheenColorMap || !! material.sheenRoughnessMap ) && !! material.displacementMap,\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog,\n\t\t\tfogExp2: ( fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: !! material.flatShading,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\tskinning: object.isSkinnedMesh === true && maxBones > 0,\n\t\t\tmaxBones: maxBones,\n\t\t\tuseVertexTexture: floatVertexTextures,\n\n\t\t\tmorphTargets: !! object.geometry && !! object.geometry.morphAttributes.position,\n\t\t\tmorphNormals: !! object.geometry && !! object.geometry.morphAttributes.normal,\n\t\t\tmorphTargetsCount: ( !! object.geometry && !! object.geometry.morphAttributes.position ) ? object.geometry.morphAttributes.position.length : 0,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\tnumSpotLightShadows: lights.spotShadowMap.length,\n\n\t\t\tnumClippingPlanes: clipping.numPlanes,\n\t\t\tnumClipIntersection: clipping.numIntersection,\n\n\t\t\tformat: material.format,\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping,\n\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tdepthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false,\n\n\t\t\tindex0AttributeName: material.index0AttributeName,\n\n\t\t\textensionDerivatives: material.extensions && material.extensions.derivatives,\n\t\t\textensionFragDepth: material.extensions && material.extensions.fragDepth,\n\t\t\textensionDrawBuffers: material.extensions && material.extensions.drawBuffers,\n\t\t\textensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD,\n\n\t\t\trendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ),\n\t\t\trendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ),\n\t\t\trendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ),\n\n\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\n\t\t};\n\n\t\treturn parameters;\n\n\t}\n\n\tfunction getProgramCacheKey( parameters ) {\n\n\t\tconst array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( hashString( parameters.fragmentShader ) );\n\t\t\tarray.push( hashString( parameters.vertexShader ) );\n\n\t\t}\n\n\t\tif ( parameters.defines !== undefined ) {\n\n\t\t\tfor ( const name in parameters.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( parameters.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.isRawShaderMaterial === false ) {\n\n\t\t\tfor ( let i = 0; i < parameterNames.length; i ++ ) {\n\n\t\t\t\tarray.push( parameters[ parameterNames[ i ] ] );\n\n\t\t\t}\n\n\t\t\tarray.push( renderer.outputEncoding );\n\t\t\tarray.push( renderer.gammaFactor );\n\n\t\t}\n\n\t\tarray.push( parameters.customProgramCacheKey );\n\n\t\treturn array.join();\n\n\t}\n\n\tfunction getUniforms( material ) {\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\t\tlet uniforms;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\t\t\tuniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t} else {\n\n\t\t\tuniforms = material.uniforms;\n\n\t\t}\n\n\t\treturn uniforms;\n\n\t}\n\n\tfunction acquireProgram( parameters, cacheKey ) {\n\n\t\tlet program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( let p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tconst preexistingProgram = programs[ p ];\n\n\t\t\tif ( preexistingProgram.cacheKey === cacheKey ) {\n\n\t\t\t\tprogram = preexistingProgram;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\tfunction releaseProgram( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tconst i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tgetParameters: getParameters,\n\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\tgetUniforms: getUniforms,\n\t\tacquireProgram: acquireProgram,\n\t\treleaseProgram: releaseProgram,\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tprograms: programs\n\t};\n\n}\n\nfunction WebGLProperties() {\n\n\tlet properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tlet map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.program !== b.program ) {\n\n\t\treturn a.program.id - b.program.id;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\n\nfunction WebGLRenderList( properties ) {\n\n\tconst renderItems = [];\n\tlet renderItemsIndex = 0;\n\n\tconst opaque = [];\n\tconst transmissive = [];\n\tconst transparent = [];\n\n\tconst defaultProgram = { id: - 1 };\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransmissive.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction getNextRenderItem( object, geometry, material, groupOrder, z, group ) {\n\n\t\tlet renderItem = renderItems[ renderItemsIndex ];\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tprogram: materialProperties.program || defaultProgram,\n\t\t\t\tgroupOrder: groupOrder,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.program = materialProperties.program || defaultProgram;\n\t\t\trenderItem.groupOrder = groupOrder;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\trenderItemsIndex ++;\n\n\t\treturn renderItem;\n\n\t}\n\n\tfunction push( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.push( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.push( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.push( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction unshift( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.unshift( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.unshift( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.unshift( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction sort( customOpaqueSort, customTransparentSort ) {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );\n\t\tif ( transmissive.length > 1 ) transmissive.sort( customTransparentSort || reversePainterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t}\n\n\tfunction finish() {\n\n\t\t// Clear references from inactive renderItems in the list\n\n\t\tfor ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {\n\n\t\t\tconst renderItem = renderItems[ i ];\n\n\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\trenderItem.id = null;\n\t\t\trenderItem.object = null;\n\t\t\trenderItem.geometry = null;\n\t\t\trenderItem.material = null;\n\t\t\trenderItem.program = null;\n\t\t\trenderItem.group = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\topaque: opaque,\n\t\ttransmissive: transmissive,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\t\tunshift: unshift,\n\t\tfinish: finish,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists( properties ) {\n\n\tlet lists = new WeakMap();\n\n\tfunction get( scene, renderCallDepth ) {\n\n\t\tlet list;\n\n\t\tif ( lists.has( scene ) === false ) {\n\n\t\t\tlist = new WebGLRenderList( properties );\n\t\t\tlists.set( scene, [ list ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= lists.get( scene ).length ) {\n\n\t\t\t\tlist = new WebGLRenderList( properties );\n\t\t\t\tlists.get( scene ).push( list );\n\n\t\t\t} else {\n\n\t\t\t\tlist = lists.get( scene )[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction UniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nfunction ShadowUniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\n\n\nlet nextVersion = 0;\n\nfunction shadowCastingLightsFirst( lightA, lightB ) {\n\n\treturn ( lightB.castShadow ? 1 : 0 ) - ( lightA.castShadow ? 1 : 0 );\n\n}\n\nfunction WebGLLights( extensions, capabilities ) {\n\n\tconst cache = new UniformsCache();\n\n\tconst shadowCache = ShadowUniformsCache();\n\n\tconst state = {\n\n\t\tversion: 0,\n\n\t\thash: {\n\t\t\tdirectionalLength: - 1,\n\t\t\tpointLength: - 1,\n\t\t\tspotLength: - 1,\n\t\t\trectAreaLength: - 1,\n\t\t\themiLength: - 1,\n\n\t\t\tnumDirectionalShadows: - 1,\n\t\t\tnumPointShadows: - 1,\n\t\t\tnumSpotShadows: - 1\n\t\t},\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tprobe: [],\n\t\tdirectional: [],\n\t\tdirectionalShadow: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotShadow: [],\n\t\tspotShadowMap: [],\n\t\tspotShadowMatrix: [],\n\t\trectArea: [],\n\t\trectAreaLTC1: null,\n\t\trectAreaLTC2: null,\n\t\tpoint: [],\n\t\tpointShadow: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: []\n\n\t};\n\n\tfor ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );\n\n\tconst vector3 = new Vector3();\n\tconst matrix4 = new Matrix4();\n\tconst matrix42 = new Matrix4();\n\n\tfunction setup( lights, physicallyCorrectLights ) {\n\n\t\tlet r = 0, g = 0, b = 0;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tlet numDirectionalShadows = 0;\n\t\tlet numPointShadows = 0;\n\t\tlet numSpotShadows = 0;\n\n\t\tlights.sort( shadowCastingLightsFirst );\n\n\t\t// artist-friendly light intensity scaling factor\n\t\tconst scaleFactor = ( physicallyCorrectLights !== true ) ? Math.PI : 1;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tconst color = light.color;\n\t\t\tconst intensity = light.intensity;\n\t\t\tconst distance = light.distance;\n\n\t\t\tconst shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity * scaleFactor;\n\t\t\t\tg += color.g * intensity * scaleFactor;\n\t\t\t\tb += color.b * intensity * scaleFactor;\n\n\t\t\t} else if ( light.isLightProbe ) {\n\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tstate.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );\n\n\t\t\t\t}\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor );\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.directionalShadow[ directionalLength ] = shadowUniforms;\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumDirectionalShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity * scaleFactor );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.spotShadow[ spotLength ] = shadowUniforms;\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\t\t\t\t\tstate.spotShadowMatrix[ spotLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumSpotShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\t// (a) intensity is the total visible light emitted\n\t\t\t\t//uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) );\n\n\t\t\t\t// (b) intensity is the brightness of the light\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tshadowUniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tshadowUniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\tstate.pointShadow[ pointLength ] = shadowUniforms;\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumPointShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity * scaleFactor );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity * scaleFactor );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( rectAreaLength > 0 ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\t// WebGL 2\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t} else {\n\n\t\t\t\t// WebGL 1\n\n\t\t\t\tif ( extensions.has( 'OES_texture_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t\t} else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tconst hash = state.hash;\n\n\t\tif ( hash.directionalLength !== directionalLength ||\n\t\t\thash.pointLength !== pointLength ||\n\t\t\thash.spotLength !== spotLength ||\n\t\t\thash.rectAreaLength !== rectAreaLength ||\n\t\t\thash.hemiLength !== hemiLength ||\n\t\t\thash.numDirectionalShadows !== numDirectionalShadows ||\n\t\t\thash.numPointShadows !== numPointShadows ||\n\t\t\thash.numSpotShadows !== numSpotShadows ) {\n\n\t\t\tstate.directional.length = directionalLength;\n\t\t\tstate.spot.length = spotLength;\n\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\tstate.point.length = pointLength;\n\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\tstate.spotShadowMatrix.length = numSpotShadows;\n\n\t\t\thash.directionalLength = directionalLength;\n\t\t\thash.pointLength = pointLength;\n\t\t\thash.spotLength = spotLength;\n\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\thash.hemiLength = hemiLength;\n\n\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\thash.numPointShadows = numPointShadows;\n\t\t\thash.numSpotShadows = numSpotShadows;\n\n\t\t\tstate.version = nextVersion ++;\n\n\t\t}\n\n\t}\n\n\tfunction setupView( lights, camera ) {\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tconst viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = state.directional[ directionalLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = state.spot[ spotLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = state.rectArea[ rectAreaLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = state.point[ pointLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = state.hemi[ hemiLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\t\t\t\tuniforms.direction.normalize();\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tsetupView: setupView,\n\t\tstate: state\n\t};\n\n}\n\nfunction WebGLRenderState( extensions, capabilities ) {\n\n\tconst lights = new WebGLLights( extensions, capabilities );\n\n\tconst lightsArray = [];\n\tconst shadowsArray = [];\n\n\tfunction init() {\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction setupLights( physicallyCorrectLights ) {\n\n\t\tlights.setup( lightsArray, physicallyCorrectLights );\n\n\t}\n\n\tfunction setupLightsView( camera ) {\n\n\t\tlights.setupView( lightsArray, camera );\n\n\t}\n\n\tconst state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\n\t\tlights: lights\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\t\tsetupLightsView: setupLightsView,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow\n\t};\n\n}\n\nfunction WebGLRenderStates( extensions, capabilities ) {\n\n\tlet renderStates = new WeakMap();\n\n\tfunction get( scene, renderCallDepth = 0 ) {\n\n\t\tlet renderState;\n\n\t\tif ( renderStates.has( scene ) === false ) {\n\n\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\trenderStates.set( scene, [ renderState ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= renderStates.get( scene ).length ) {\n\n\t\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\t\trenderStates.get( scene ).push( renderState );\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStates.get( scene )[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * parameters = {\n *\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * wireframe: ,\n * wireframeLinewidth: \n * }\n */\n\nclass MeshDepthMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshDepthMaterial';\n\n\t\tthis.depthPacking = BasicDepthPacking;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.depthPacking = source.depthPacking;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshDepthMaterial.prototype.isMeshDepthMaterial = true;\n\n/**\n * parameters = {\n *\n * referencePosition: ,\n * nearDistance: ,\n * farDistance: ,\n *\n * map: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: \n *\n * }\n */\n\nclass MeshDistanceMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshDistanceMaterial';\n\n\t\tthis.referencePosition = new Vector3();\n\t\tthis.nearDistance = 1;\n\t\tthis.farDistance = 1000;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.fog = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.referencePosition.copy( source.referencePosition );\n\t\tthis.nearDistance = source.nearDistance;\n\t\tthis.farDistance = source.farDistance;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\n\nconst vertex = \"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\";\n\nconst fragment = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include \\nvoid main() {\\n\\tconst float samples = float( VSM_SAMPLES );\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\\n\\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\\n\\tfor ( float i = 0.0; i < samples; i ++ ) {\\n\\t\\tfloat uvOffset = uvStart + i * uvStride;\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean / samples;\\n\\tsquared_mean = squared_mean / samples;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\";\n\nfunction WebGLShadowMap( _renderer, _objects, _capabilities ) {\n\n\tlet _frustum = new Frustum();\n\n\tconst _shadowMapSize = new Vector2(),\n\t\t_viewportSize = new Vector2(),\n\n\t\t_viewport = new Vector4(),\n\n\t\t_depthMaterial = new MeshDepthMaterial( { depthPacking: RGBADepthPacking } ),\n\t\t_distanceMaterial = new MeshDistanceMaterial(),\n\n\t\t_materialCache = {},\n\n\t\t_maxTextureSize = _capabilities.maxTextureSize;\n\n\tconst shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };\n\n\tconst shadowMaterialVertical = new ShaderMaterial( {\n\t\tdefines: {\n\t\t\tVSM_SAMPLES: 8\n\t\t},\n\t\tuniforms: {\n\t\t\tshadow_pass: { value: null },\n\t\t\tresolution: { value: new Vector2() },\n\t\t\tradius: { value: 4.0 }\n\t\t},\n\n\t\tvertexShader: vertex,\n\t\tfragmentShader: fragment\n\n\t} );\n\n\tconst shadowMaterialHorizontal = shadowMaterialVertical.clone();\n\tshadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1;\n\n\tconst fullScreenTri = new BufferGeometry();\n\tfullScreenTri.setAttribute(\n\t\t'position',\n\t\tnew BufferAttribute(\n\t\t\tnew Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ),\n\t\t\t3\n\t\t)\n\t);\n\n\tconst fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );\n\n\tconst scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\tconst currentRenderTarget = _renderer.getRenderTarget();\n\t\tconst activeCubeFace = _renderer.getActiveCubeFace();\n\t\tconst activeMipmapLevel = _renderer.getActiveMipmapLevel();\n\n\t\tconst _state = _renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.setBlending( NoBlending );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// render depth map\n\n\t\tfor ( let i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadow = light.shadow;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\n\t\t\tconst shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t_shadowMapSize.multiply( shadowFrameExtents );\n\n\t\t\t_viewportSize.copy( shadow.mapSize );\n\n\t\t\tif ( _shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\tif ( _shadowMapSize.x > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.x = Math.floor( _maxTextureSize / shadowFrameExtents.x );\n\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.y = Math.floor( _maxTextureSize / shadowFrameExtents.y );\n\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null && ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {\n\n\t\t\t\tconst pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat };\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\tshadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\tconst pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\t_renderer.setRenderTarget( shadow.map );\n\t\t\t_renderer.clear();\n\n\t\t\tconst viewportCount = shadow.getViewportCount();\n\n\t\t\tfor ( let vp = 0; vp < viewportCount; vp ++ ) {\n\n\t\t\t\tconst viewport = shadow.getViewport( vp );\n\n\t\t\t\t_viewport.set(\n\t\t\t\t\t_viewportSize.x * viewport.x,\n\t\t\t\t\t_viewportSize.y * viewport.y,\n\t\t\t\t\t_viewportSize.x * viewport.z,\n\t\t\t\t\t_viewportSize.y * viewport.w\n\t\t\t\t);\n\n\t\t\t\t_state.viewport( _viewport );\n\n\t\t\t\tshadow.updateMatrices( light, vp );\n\n\t\t\t\t_frustum = shadow.getFrustum();\n\n\t\t\t\trenderObject( scene, camera, shadow.camera, light, this.type );\n\n\t\t\t}\n\n\t\t\t// do blur pass for VSM\n\n\t\t\tif ( ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {\n\n\t\t\t\tVSMPass( shadow, camera );\n\n\t\t\t}\n\n\t\t\tshadow.needsUpdate = false;\n\n\t\t}\n\n\t\tscope.needsUpdate = false;\n\n\t\t_renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t};\n\n\tfunction VSMPass( shadow, camera ) {\n\n\t\tconst geometry = _objects.update( fullScreenMesh );\n\n\t\tif ( shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples ) {\n\n\t\t\tshadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples;\n\t\t\tshadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples;\n\n\t\t\tshadowMaterialVertical.needsUpdate = true;\n\t\t\tshadowMaterialHorizontal.needsUpdate = true;\n\n\t\t}\n\n\t\t// vertical pass\n\n\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;\n\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.mapPass );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );\n\n\t\t// horizontal pass\n\n\t\tshadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\tshadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialHorizontal.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.map );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );\n\n\t}\n\n\tfunction getDepthMaterial( object, geometry, material, light, shadowCameraNear, shadowCameraFar, type ) {\n\n\t\tlet result = null;\n\n\t\tconst customMaterial = ( light.isPointLight === true ) ? object.customDistanceMaterial : object.customDepthMaterial;\n\n\t\tif ( customMaterial !== undefined ) {\n\n\t\t\tresult = customMaterial;\n\n\t\t} else {\n\n\t\t\tresult = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial;\n\n\t\t}\n\n\t\tif ( ( _renderer.localClippingEnabled && material.clipShadows === true && material.clippingPlanes.length !== 0 ) ||\n\t\t\t( material.displacementMap && material.displacementScale !== 0 ) ||\n\t\t\t( material.alphaMap && material.alphaTest > 0 ) ) {\n\n\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t// appropriate state\n\n\t\t\tconst keyA = result.uuid, keyB = material.uuid;\n\n\t\t\tlet materialsForVariant = _materialCache[ keyA ];\n\n\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t}\n\n\t\t\tlet cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\n\t\t\t}\n\n\t\t\tresult = cachedMaterial;\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tif ( type === VSMShadowMap ) {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t} else {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t}\n\n\t\tresult.alphaMap = material.alphaMap;\n\t\tresult.alphaTest = material.alphaTest;\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.displacementMap = material.displacementMap;\n\t\tresult.displacementScale = material.displacementScale;\n\t\tresult.displacementBias = material.displacementBias;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {\n\n\t\t\tresult.referencePosition.setFromMatrixPosition( light.matrixWorld );\n\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\tresult.farDistance = shadowCameraFar;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, light, type ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tconst geometry = _objects.update( object );\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tfor ( let k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ k ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, geometry, groupMaterial, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, geometry, material, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, light, type );\n\n\t\t}\n\n\t}\n\n}\n\nfunction WebGLState( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction ColorBuffer() {\n\n\t\tlet locked = false;\n\n\t\tconst color = new Vector4();\n\t\tlet currentColorMask = null;\n\t\tconst currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentDepthMask = null;\n\t\tlet currentDepthFunc = null;\n\t\tlet currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( 2929 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( 2929 );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tif ( depthFunc ) {\n\n\t\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 512 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 519 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 513 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 514 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 518 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 516 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 517 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.depthFunc( 515 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentStencilMask = null;\n\t\tlet currentStencilFunc = null;\n\t\tlet currentStencilRef = null;\n\t\tlet currentStencilFuncMask = null;\n\t\tlet currentStencilFail = null;\n\t\tlet currentStencilZFail = null;\n\t\tlet currentStencilZPass = null;\n\t\tlet currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( ! locked ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( 2960 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( 2960 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t currentStencilRef !== stencilRef ||\n\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail !== stencilFail ||\n\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tconst colorBuffer = new ColorBuffer();\n\tconst depthBuffer = new DepthBuffer();\n\tconst stencilBuffer = new StencilBuffer();\n\n\tlet enabledCapabilities = {};\n\n\tlet xrFramebuffer = null;\n\tlet currentBoundFramebuffers = {};\n\n\tlet currentProgram = null;\n\n\tlet currentBlendingEnabled = false;\n\tlet currentBlending = null;\n\tlet currentBlendEquation = null;\n\tlet currentBlendSrc = null;\n\tlet currentBlendDst = null;\n\tlet currentBlendEquationAlpha = null;\n\tlet currentBlendSrcAlpha = null;\n\tlet currentBlendDstAlpha = null;\n\tlet currentPremultipledAlpha = false;\n\n\tlet currentFlipSided = null;\n\tlet currentCullFace = null;\n\n\tlet currentLineWidth = null;\n\n\tlet currentPolygonOffsetFactor = null;\n\tlet currentPolygonOffsetUnits = null;\n\n\tconst maxTextures = gl.getParameter( 35661 );\n\n\tlet lineWidthAvailable = false;\n\tlet version = 0;\n\tconst glVersion = gl.getParameter( 7938 );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL ES (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tlet currentTextureSlot = null;\n\tlet currentBoundTextures = {};\n\n\tconst scissorParam = gl.getParameter( 3088 );\n\tconst viewportParam = gl.getParameter( 2978 );\n\n\tconst currentScissor = new Vector4().fromArray( scissorParam );\n\tconst currentViewport = new Vector4().fromArray( viewportParam );\n\n\tfunction createTexture( type, target, count ) {\n\n\t\tconst data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tconst texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, 10241, 9728 );\n\t\tgl.texParameteri( type, 10240, 9728 );\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tgl.texImage2D( target + i, 0, 6408, 1, 1, 0, 6408, 5121, data );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tconst emptyTextures = {};\n\temptyTextures[ 3553 ] = createTexture( 3553, 3553, 1 );\n\temptyTextures[ 34067 ] = createTexture( 34067, 34069, 6 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( 2929 );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( 2884 );\n\n\tsetBlending( NoBlending );\n\n\t//\n\n\tfunction enable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction bindXRFramebuffer( framebuffer ) {\n\n\t\tif ( framebuffer !== xrFramebuffer ) {\n\n\t\t\tgl.bindFramebuffer( 36160, framebuffer );\n\n\t\t\txrFramebuffer = framebuffer;\n\n\t\t}\n\n\t}\n\n\tfunction bindFramebuffer( target, framebuffer ) {\n\n\t\tif ( framebuffer === null && xrFramebuffer !== null ) framebuffer = xrFramebuffer; // use active XR framebuffer if available\n\n\t\tif ( currentBoundFramebuffers[ target ] !== framebuffer ) {\n\n\t\t\tgl.bindFramebuffer( target, framebuffer );\n\n\t\t\tcurrentBoundFramebuffers[ target ] = framebuffer;\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t// 36009 is equivalent to 36160\n\n\t\t\t\tif ( target === 36009 ) {\n\n\t\t\t\t\tcurrentBoundFramebuffers[ 36160 ] = framebuffer;\n\n\t\t\t\t}\n\n\t\t\t\tif ( target === 36160 ) {\n\n\t\t\t\t\tcurrentBoundFramebuffers[ 36009 ] = framebuffer;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tconst equationToGL = {\n\t\t[ AddEquation ]: 32774,\n\t\t[ SubtractEquation ]: 32778,\n\t\t[ ReverseSubtractEquation ]: 32779\n\t};\n\n\tif ( isWebGL2 ) {\n\n\t\tequationToGL[ MinEquation ] = 32775;\n\t\tequationToGL[ MaxEquation ] = 32776;\n\n\t} else {\n\n\t\tconst extension = extensions.get( 'EXT_blend_minmax' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tequationToGL[ MinEquation ] = extension.MIN_EXT;\n\t\t\tequationToGL[ MaxEquation ] = extension.MAX_EXT;\n\n\t\t}\n\n\t}\n\n\tconst factorToGL = {\n\t\t[ ZeroFactor ]: 0,\n\t\t[ OneFactor ]: 1,\n\t\t[ SrcColorFactor ]: 768,\n\t\t[ SrcAlphaFactor ]: 770,\n\t\t[ SrcAlphaSaturateFactor ]: 776,\n\t\t[ DstColorFactor ]: 774,\n\t\t[ DstAlphaFactor ]: 772,\n\t\t[ OneMinusSrcColorFactor ]: 769,\n\t\t[ OneMinusSrcAlphaFactor ]: 771,\n\t\t[ OneMinusDstColorFactor ]: 775,\n\t\t[ OneMinusDstAlphaFactor ]: 773\n\t};\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( currentBlendingEnabled === true ) {\n\n\t\t\t\tdisable( 3042 );\n\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( currentBlendingEnabled === false ) {\n\n\t\t\tenable( 3042 );\n\t\t\tcurrentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( 32774 );\n\n\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 1, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 1, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 0, 769, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 768, 0, 770 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 770, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 770, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 0, 769 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 0, 768 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t\t\tcurrentBlending = blending;\n\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\tcurrentBlendDst = blendDst;\n\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = null;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( 2884 )\n\t\t\t: enable( 2884 );\n\n\t\tlet flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tconst stencilWrite = material.stencilWrite;\n\t\tstencilBuffer.setTest( stencilWrite );\n\t\tif ( stencilWrite ) {\n\n\t\t\tstencilBuffer.setMask( material.stencilWriteMask );\n\t\t\tstencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\tstencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t}\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t\tmaterial.alphaToCoverage === true\n\t\t\t? enable( 32926 )\n\t\t\t: disable( 32926 );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( 2304 );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( 2305 );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( 2884 );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( 1029 );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( 1028 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( 1032 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 2884 );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( 32823 );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 32823 );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( 3089 );\n\n\t\t} else {\n\n\t\t\tdisable( 3089 );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = 33984 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture ) {\n\n\t\tif ( currentTextureSlot === null ) {\n\n\t\t\tactiveTexture();\n\n\t\t}\n\n\t\tlet boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ currentTextureSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction unbindTexture() {\n\n\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\tboundTexture.type = undefined;\n\t\t\tboundTexture.texture = undefined;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\t// reset state\n\n\t\tgl.disable( 3042 );\n\t\tgl.disable( 2884 );\n\t\tgl.disable( 2929 );\n\t\tgl.disable( 32823 );\n\t\tgl.disable( 3089 );\n\t\tgl.disable( 2960 );\n\t\tgl.disable( 32926 );\n\n\t\tgl.blendEquation( 32774 );\n\t\tgl.blendFunc( 1, 0 );\n\t\tgl.blendFuncSeparate( 1, 0, 1, 0 );\n\n\t\tgl.colorMask( true, true, true, true );\n\t\tgl.clearColor( 0, 0, 0, 0 );\n\n\t\tgl.depthMask( true );\n\t\tgl.depthFunc( 513 );\n\t\tgl.clearDepth( 1 );\n\n\t\tgl.stencilMask( 0xffffffff );\n\t\tgl.stencilFunc( 519, 0, 0xffffffff );\n\t\tgl.stencilOp( 7680, 7680, 7680 );\n\t\tgl.clearStencil( 0 );\n\n\t\tgl.cullFace( 1029 );\n\t\tgl.frontFace( 2305 );\n\n\t\tgl.polygonOffset( 0, 0 );\n\n\t\tgl.activeTexture( 33984 );\n\n\t\tgl.bindFramebuffer( 36160, null );\n\n\t\tif ( isWebGL2 === true ) {\n\n\t\t\tgl.bindFramebuffer( 36009, null );\n\t\t\tgl.bindFramebuffer( 36008, null );\n\n\t\t}\n\n\t\tgl.useProgram( null );\n\n\t\tgl.lineWidth( 1 );\n\n\t\tgl.scissor( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tgl.viewport( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\t// reset internals\n\n\t\tenabledCapabilities = {};\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\txrFramebuffer = null;\n\t\tcurrentBoundFramebuffers = {};\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlendingEnabled = false;\n\t\tcurrentBlending = null;\n\t\tcurrentBlendEquation = null;\n\t\tcurrentBlendSrc = null;\n\t\tcurrentBlendDst = null;\n\t\tcurrentBlendEquationAlpha = null;\n\t\tcurrentBlendSrcAlpha = null;\n\t\tcurrentBlendDstAlpha = null;\n\t\tcurrentPremultipledAlpha = false;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcurrentLineWidth = null;\n\n\t\tcurrentPolygonOffsetFactor = null;\n\t\tcurrentPolygonOffsetUnits = null;\n\n\t\tcurrentScissor.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tcurrentViewport.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tenable: enable,\n\t\tdisable: disable,\n\n\t\tbindFramebuffer: bindFramebuffer,\n\t\tbindXRFramebuffer: bindXRFramebuffer,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tunbindTexture: unbindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\ttexImage2D: texImage2D,\n\t\ttexImage3D: texImage3D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst maxTextures = capabilities.maxTextures;\n\tconst maxCubemapSize = capabilities.maxCubemapSize;\n\tconst maxTextureSize = capabilities.maxTextureSize;\n\tconst maxSamples = capabilities.maxSamples;\n\n\tconst _videoTextures = new WeakMap();\n\tlet _canvas;\n\n\t// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\tlet useOffscreenCanvas = false;\n\n\ttry {\n\n\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'\n\t\t\t&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;\n\n\t} catch ( err ) {\n\n\t\t// Ignore any errors\n\n\t}\n\n\tfunction createCanvas( width, height ) {\n\n\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\n\t\treturn useOffscreenCanvas ?\n\t\t\tnew OffscreenCanvas( width, height ) : createElementNS( 'canvas' );\n\n\t}\n\n\tfunction resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) {\n\n\t\tlet scale = 1;\n\n\t\t// handle case if texture exceeds max size\n\n\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\tscale = maxSize / Math.max( image.width, image.height );\n\n\t\t}\n\n\t\t// only perform resize if necessary\n\n\t\tif ( scale < 1 || needsPowerOfTwo === true ) {\n\n\t\t\t// only perform resize for certain image types\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t\tconst floor = needsPowerOfTwo ? floorPowerOfTwo : Math.floor;\n\n\t\t\t\tconst width = floor( scale * image.width );\n\t\t\t\tconst height = floor( scale * image.height );\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = createCanvas( width, height );\n\n\t\t\t\t// cube textures can't reuse the same canvas\n\n\t\t\t\tconst canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;\n\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' );\n\n\t\t\t\treturn canvas;\n\n\t\t\t} else {\n\n\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );\n\n\t\t\t\t}\n\n\t\t\t\treturn image;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction isPowerOfTwo$1( image ) {\n\n\t\treturn isPowerOfTwo( image.width ) && isPowerOfTwo( image.height );\n\n\t}\n\n\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\tif ( isWebGL2 ) return false;\n\n\t\treturn ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||\n\t\t\t( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture, supportsMips ) {\n\n\t\treturn texture.generateMipmaps && supportsMips &&\n\t\t\ttexture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t}\n\n\tfunction generateMipmap( target, texture, width, height, depth = 1 ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\ttextureProperties.__maxMipLevel = Math.log2( Math.max( width, height, depth ) );\n\n\t}\n\n\tfunction getInternalFormat( internalFormatName, glFormat, glType, encoding ) {\n\n\t\tif ( isWebGL2 === false ) return glFormat;\n\n\t\tif ( internalFormatName !== null ) {\n\n\t\t\tif ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t}\n\n\t\tlet internalFormat = glFormat;\n\n\t\tif ( glFormat === 6403 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 33326;\n\t\t\tif ( glType === 5131 ) internalFormat = 33325;\n\t\t\tif ( glType === 5121 ) internalFormat = 33321;\n\n\t\t}\n\n\t\tif ( glFormat === 6407 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 34837;\n\t\t\tif ( glType === 5131 ) internalFormat = 34843;\n\t\t\tif ( glType === 5121 ) internalFormat = 32849;\n\n\t\t}\n\n\t\tif ( glFormat === 6408 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 34836;\n\t\t\tif ( glType === 5131 ) internalFormat = 34842;\n\t\t\tif ( glType === 5121 ) internalFormat = ( encoding === sRGBEncoding ) ? 35907 : 32856;\n\n\t\t}\n\n\t\tif ( internalFormat === 33325 || internalFormat === 33326 ||\n\t\t\tinternalFormat === 34842 || internalFormat === 34836 ) {\n\n\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t}\n\n\t\treturn internalFormat;\n\n\t}\n\n\t// Fallback filters for non-power-of-2 textures\n\n\tfunction filterFallback( f ) {\n\n\t\tif ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) {\n\n\t\t\treturn 9728;\n\n\t\t}\n\n\t\treturn 9729;\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\t_videoTextures.delete( texture );\n\n\t\t}\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tconst renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( ! renderTarget ) return;\n\n\t\tif ( textureProperties.__webglTexture !== undefined ) {\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t\tinfo.memory.textures --;\n\n\t\t}\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\t\t\tif ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLMultipleRenderTargets ) {\n\n\t\t\tfor ( let i = 0, il = texture.length; i < il; i ++ ) {\n\n\t\t\t\tconst attachmentProperties = properties.get( texture[ i ] );\n\n\t\t\t\tif ( attachmentProperties.__webglTexture ) {\n\n\t\t\t\t\t_gl.deleteTexture( attachmentProperties.__webglTexture );\n\n\t\t\t\t\tinfo.memory.textures --;\n\n\t\t\t\t}\n\n\t\t\t\tproperties.remove( texture[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tproperties.remove( texture );\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\tlet textureUnits = 0;\n\n\tfunction resetTextureUnits() {\n\n\t\ttextureUnits = 0;\n\n\t}\n\n\tfunction allocateTextureUnit() {\n\n\t\tconst textureUnit = textureUnits;\n\n\t\tif ( textureUnit >= maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures );\n\n\t\t}\n\n\t\ttextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\t//\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tconst image = texture.image;\n\n\t\t\tif ( image === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined' );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 3553, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture2DArray( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 35866, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture3D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 32879, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadCubeTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t}\n\n\tconst wrappingToGL = {\n\t\t[ RepeatWrapping ]: 10497,\n\t\t[ ClampToEdgeWrapping ]: 33071,\n\t\t[ MirroredRepeatWrapping ]: 33648\n\t};\n\n\tconst filterToGL = {\n\t\t[ NearestFilter ]: 9728,\n\t\t[ NearestMipmapNearestFilter ]: 9984,\n\t\t[ NearestMipmapLinearFilter ]: 9986,\n\n\t\t[ LinearFilter ]: 9729,\n\t\t[ LinearMipmapNearestFilter ]: 9985,\n\t\t[ LinearMipmapLinearFilter ]: 9987\n\t};\n\n\tfunction setTextureParameters( textureType, texture, supportsMips ) {\n\n\t\tif ( supportsMips ) {\n\n\t\t\t_gl.texParameteri( textureType, 10242, wrappingToGL[ texture.wrapS ] );\n\t\t\t_gl.texParameteri( textureType, 10243, wrappingToGL[ texture.wrapT ] );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, wrappingToGL[ texture.wrapR ] );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterToGL[ texture.magFilter ] );\n\t\t\t_gl.texParameteri( textureType, 10241, filterToGL[ texture.minFilter ] );\n\n\t\t} else {\n\n\t\t\t_gl.texParameteri( textureType, 10242, 33071 );\n\t\t\t_gl.texParameteri( textureType, 10243, 33071 );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, 33071 );\n\n\t\t\t}\n\n\t\t\tif ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterFallback( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, 10241, filterFallback( texture.minFilter ) );\n\n\t\t\tif ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension for WebGL 1 and WebGL 2\n\t\t\tif ( isWebGL2 === false && ( texture.type === HalfFloatType && extensions.has( 'OES_texture_half_float_linear' ) === false ) ) return; // verify extension for WebGL 1 only\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction initTexture( textureProperties, texture ) {\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tlet textureType = 3553;\n\n\t\tif ( texture.isDataTexture2DArray ) textureType = 35866;\n\t\tif ( texture.isDataTexture3D ) textureType = 32879;\n\n\t\tinitTexture( textureProperties, texture );\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( 37440, texture.flipY );\n\t\t_gl.pixelStorei( 37441, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, texture.unpackAlignment );\n\t\t_gl.pixelStorei( 37443, 0 );\n\n\t\tconst needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo$1( texture.image ) === false;\n\t\tconst image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );\n\n\t\tconst supportsMips = isPowerOfTwo$1( image ) || isWebGL2,\n\t\t\tglFormat = utils.convert( texture.format );\n\n\t\tlet glType = utils.convert( texture.type ),\n\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\n\t\tsetTextureParameters( textureType, texture, supportsMips );\n\n\t\tlet mipmap;\n\t\tconst mipmaps = texture.mipmaps;\n\n\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t// populate depth texture with dummy data\n\n\t\t\tglInternalFormat = 6402;\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t} else if ( texture.type === UnsignedIntType ) {\n\n\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t} else if ( texture.type === UnsignedInt248Type ) {\n\n\t\t\t\t\tglInternalFormat = 35056;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tglInternalFormat = 33189; // WebGL2 requires sized internalformat for glTexImage2D\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\tconsole.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// validation checks for WebGL 1\n\n\t\t\tif ( texture.format === DepthFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedShortType;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( texture.format === DepthStencilFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tglInternalFormat = 34041;\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedInt248Type ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedInt248Type;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\tstate.compressedTexImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t} else if ( texture.isDataTexture2DArray ) {\n\n\t\t\tstate.texImage3D( 35866, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t} else if ( texture.isDataTexture3D ) {\n\n\t\t\tstate.texImage3D( 32879, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t} else {\n\n\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, glFormat, glType, mipmap );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, glFormat, glType, image );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\tgenerateMipmap( textureType, texture, image.width, image.height );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t}\n\n\tfunction uploadCubeTexture( textureProperties, texture, slot ) {\n\n\t\tif ( texture.image.length !== 6 ) return;\n\n\t\tinitTexture( textureProperties, texture );\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( 37440, texture.flipY );\n\t\t_gl.pixelStorei( 37441, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, texture.unpackAlignment );\n\t\t_gl.pixelStorei( 37443, 0 );\n\n\t\tconst isCompressed = ( texture && ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture ) );\n\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\tconst cubeImage = [];\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize );\n\n\t\t\t} else {\n\n\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst image = cubeImage[ 0 ],\n\t\t\tsupportsMips = isPowerOfTwo$1( image ) || isWebGL2,\n\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\tglType = utils.convert( texture.type ),\n\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\n\t\tsetTextureParameters( 34067, texture, supportsMips );\n\n\t\tlet mipmaps;\n\n\t\tif ( isCompressed ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\tstate.compressedTexImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t} else {\n\n\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length;\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t// We assume images for cube map have the same size.\n\t\t\tgenerateMipmap( 34067, texture, image.width, image.height );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget ) {\n\n\t\tconst glFormat = utils.convert( texture.format );\n\t\tconst glType = utils.convert( texture.type );\n\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\n\t\tif ( textureTarget === 32879 || textureTarget === 35866 ) {\n\n\t\t\tstate.texImage3D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null );\n\n\t\t} else {\n\n\t\t\tstate.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\n\t\t}\n\n\t\tstate.bindFramebuffer( 36160, framebuffer );\n\t\t_gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( texture ).__webglTexture, 0 );\n\t\tstate.bindFramebuffer( 36160, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {\n\n\t\t_gl.bindRenderbuffer( 36161, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\tlet glInternalFormat = 33189;\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst depthTexture = renderTarget.depthTexture;\n\n\t\t\t\tif ( depthTexture && depthTexture.isDepthTexture ) {\n\n\t\t\t\t\tif ( depthTexture.type === FloatType ) {\n\n\t\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t\t} else if ( depthTexture.type === UnsignedIntType ) {\n\n\t\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 36096, 36161, renderbuffer );\n\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, 35056, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, 34041, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 33306, 36161, renderbuffer );\n\n\t\t} else {\n\n\t\t\t// Use the first texture for MRT so far\n\t\t\tconst texture = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture[ 0 ] : renderTarget.texture;\n\n\t\t\tconst glFormat = utils.convert( texture.format );\n\t\t\tconst glType = utils.convert( texture.type );\n\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tconst isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tconst webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( 36160, 36096, 3553, webglDepthTexture, 0 );\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( 36160, 33306, 3553, webglDepthTexture, 0 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( 36160, null );\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tif ( renderTarget.isWebGLMultipleRenderTargets !== true ) {\n\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\t\t\ttextureProperties.__version = texture.version;\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\tconst isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );\n\t\tconst isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true );\n\t\tconst isRenderTarget3D = texture.isDataTexture3D || texture.isDataTexture2DArray;\n\t\tconst supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2;\n\n\t\t// Handles WebGL2 RGBFormat fallback - #18858\n\n\t\tif ( isWebGL2 && texture.format === RGBFormat && ( texture.type === FloatType || texture.type === HalfFloatType ) ) {\n\n\t\t\ttexture.format = RGBAFormat;\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.' );\n\n\t\t}\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\tif ( capabilities.drawBuffers ) {\n\n\t\t\t\t\tconst textures = renderTarget.texture;\n\n\t\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst attachmentProperties = properties.get( textures[ i ] );\n\n\t\t\t\t\t\tif ( attachmentProperties.__webglTexture === undefined ) {\n\n\t\t\t\t\t\t\tattachmentProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.' );\n\n\t\t\t\t}\n\n\t\t\t} else if ( isMultisample ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer();\n\n\t\t\t\t\t_gl.bindRenderbuffer( 36161, renderTargetProperties.__webglColorRenderbuffer );\n\n\t\t\t\t\tconst glFormat = utils.convert( texture.format );\n\t\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t_gl.framebufferRenderbuffer( 36160, 36064, 36161, renderTargetProperties.__webglColorRenderbuffer );\n\t\t\t\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, null );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( 34067, texture, supportsMips );\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, 36064, 34069 + i );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( 34067, texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else if ( isMultipleRenderTargets ) {\n\n\t\t\tconst textures = renderTarget.texture;\n\n\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\tconst attachment = textures[ i ];\n\t\t\t\tconst attachmentProperties = properties.get( attachment );\n\n\t\t\t\tstate.bindTexture( 3553, attachmentProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( 3553, attachment, supportsMips );\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, 36064 + i, 3553 );\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {\n\n\t\t\t\t\tgenerateMipmap( 3553, attachment, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else {\n\n\t\t\tlet glTextureType = 3553;\n\n\t\t\tif ( isRenderTarget3D ) {\n\n\t\t\t\t// Render targets containing layers, i.e: Texture 3D and 2d arrays\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\tconst isTexture3D = texture.isDataTexture3D;\n\t\t\t\t\tglTextureType = isTexture3D ? 32879 : 35866;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( glTextureType, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( glTextureType, texture, supportsMips );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, 36064, glTextureType );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( glTextureType, texture, renderTarget.width, renderTarget.height, renderTarget.depth );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tconst supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2;\n\n\t\tconst textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ];\n\n\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\tconst texture = textures[ i ];\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tconst target = renderTarget.isWebGLCubeRenderTarget ? 34067 : 3553;\n\t\t\t\tconst webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\t\tgenerateMipmap( target, texture, renderTarget.width, renderTarget.height );\n\t\t\t\tstate.unbindTexture();\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateMultisampleRenderTarget( renderTarget ) {\n\n\t\tif ( renderTarget.isWebGLMultisampleRenderTarget ) {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tconst width = renderTarget.width;\n\t\t\t\tconst height = renderTarget.height;\n\t\t\t\tlet mask = 16384;\n\n\t\t\t\tif ( renderTarget.depthBuffer ) mask |= 256;\n\t\t\t\tif ( renderTarget.stencilBuffer ) mask |= 1024;\n\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\t\tstate.bindFramebuffer( 36008, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\tstate.bindFramebuffer( 36009, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, 9728 );\n\n\t\t\t\tstate.bindFramebuffer( 36008, null );\n\t\t\t\tstate.bindFramebuffer( 36009, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getRenderTargetSamples( renderTarget ) {\n\n\t\treturn ( isWebGL2 && renderTarget.isWebGLMultisampleRenderTarget ) ?\n\t\t\tMath.min( maxSamples, renderTarget.samples ) : 0;\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures.get( texture ) !== frame ) {\n\n\t\t\t_videoTextures.set( texture, frame );\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\t// backwards compatibility\n\n\tlet warnedTexture2D = false;\n\tlet warnedTextureCube = false;\n\n\tfunction safeSetTexture2D( texture, slot ) {\n\n\t\tif ( texture && texture.isWebGLRenderTarget ) {\n\n\t\t\tif ( warnedTexture2D === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLTextures.safeSetTexture2D: don\\'t use render targets as textures. Use their .texture property instead.' );\n\t\t\t\twarnedTexture2D = true;\n\n\t\t\t}\n\n\t\t\ttexture = texture.texture;\n\n\t\t}\n\n\t\tsetTexture2D( texture, slot );\n\n\t}\n\n\tfunction safeSetTextureCube( texture, slot ) {\n\n\t\tif ( texture && texture.isWebGLCubeRenderTarget ) {\n\n\t\t\tif ( warnedTextureCube === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLTextures.safeSetTextureCube: don\\'t use cube render targets as textures. Use their .texture property instead.' );\n\t\t\t\twarnedTextureCube = true;\n\n\t\t\t}\n\n\t\t\ttexture = texture.texture;\n\n\t\t}\n\n\n\t\tsetTextureCube( texture, slot );\n\n\t}\n\n\t//\n\n\tthis.allocateTextureUnit = allocateTextureUnit;\n\tthis.resetTextureUnits = resetTextureUnits;\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTexture2DArray = setTexture2DArray;\n\tthis.setTexture3D = setTexture3D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\n\tthis.safeSetTexture2D = safeSetTexture2D;\n\tthis.safeSetTextureCube = safeSetTextureCube;\n\n}\n\nfunction WebGLUtils( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction convert( p ) {\n\n\t\tlet extension;\n\n\t\tif ( p === UnsignedByteType ) return 5121;\n\t\tif ( p === UnsignedShort4444Type ) return 32819;\n\t\tif ( p === UnsignedShort5551Type ) return 32820;\n\t\tif ( p === UnsignedShort565Type ) return 33635;\n\n\t\tif ( p === ByteType ) return 5120;\n\t\tif ( p === ShortType ) return 5122;\n\t\tif ( p === UnsignedShortType ) return 5123;\n\t\tif ( p === IntType ) return 5124;\n\t\tif ( p === UnsignedIntType ) return 5125;\n\t\tif ( p === FloatType ) return 5126;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\tif ( isWebGL2 ) return 5131;\n\n\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.HALF_FLOAT_OES;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === AlphaFormat ) return 6406;\n\t\tif ( p === RGBFormat ) return 6407;\n\t\tif ( p === RGBAFormat ) return 6408;\n\t\tif ( p === LuminanceFormat ) return 6409;\n\t\tif ( p === LuminanceAlphaFormat ) return 6410;\n\t\tif ( p === DepthFormat ) return 6402;\n\t\tif ( p === DepthStencilFormat ) return 34041;\n\t\tif ( p === RedFormat ) return 6403;\n\n\t\t// WebGL2 formats.\n\n\t\tif ( p === RedIntegerFormat ) return 36244;\n\t\tif ( p === RGFormat ) return 33319;\n\t\tif ( p === RGIntegerFormat ) return 33320;\n\t\tif ( p === RGBIntegerFormat ) return 36248;\n\t\tif ( p === RGBAIntegerFormat ) return 36249;\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format ||\n\t\t\tp === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format ||\n\t\t\tp === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_ETC2_Format ) return extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return extension.COMPRESSED_RGBA8_ETC2_EAC;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_4x4_Format || p === SRGB8_ALPHA8_ASTC_5x4_Format || p === SRGB8_ALPHA8_ASTC_5x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_6x5_Format || p === SRGB8_ALPHA8_ASTC_6x6_Format || p === SRGB8_ALPHA8_ASTC_8x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_8x6_Format || p === SRGB8_ALPHA8_ASTC_8x8_Format || p === SRGB8_ALPHA8_ASTC_10x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_10x6_Format || p === SRGB8_ALPHA8_ASTC_10x8_Format || p === SRGB8_ALPHA8_ASTC_10x10_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_12x10_Format || p === SRGB8_ALPHA8_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\t// TODO Complete?\n\n\t\t\t\treturn p;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGBA_BPTC_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\t// TODO Complete?\n\n\t\t\t\treturn p;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\tif ( isWebGL2 ) return 34042;\n\n\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\nclass ArrayCamera extends PerspectiveCamera {\n\n\tconstructor( array = [] ) {\n\n\t\tsuper();\n\n\t\tthis.cameras = array;\n\n\t}\n\n}\n\nArrayCamera.prototype.isArrayCamera = true;\n\nclass Group extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Group';\n\n\t}\n\n}\n\nGroup.prototype.isGroup = true;\n\nconst _moveEvent = { type: 'move' };\n\nclass WebXRController {\n\n\tconstructor() {\n\n\t\tthis._targetRay = null;\n\t\tthis._grip = null;\n\t\tthis._hand = null;\n\n\t}\n\n\tgetHandSpace() {\n\n\t\tif ( this._hand === null ) {\n\n\t\t\tthis._hand = new Group();\n\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\tthis._hand.visible = false;\n\n\t\t\tthis._hand.joints = {};\n\t\t\tthis._hand.inputState = { pinching: false };\n\n\t\t}\n\n\t\treturn this._hand;\n\n\t}\n\n\tgetTargetRaySpace() {\n\n\t\tif ( this._targetRay === null ) {\n\n\t\t\tthis._targetRay = new Group();\n\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\tthis._targetRay.visible = false;\n\t\t\tthis._targetRay.hasLinearVelocity = false;\n\t\t\tthis._targetRay.linearVelocity = new Vector3();\n\t\t\tthis._targetRay.hasAngularVelocity = false;\n\t\t\tthis._targetRay.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._targetRay;\n\n\t}\n\n\tgetGripSpace() {\n\n\t\tif ( this._grip === null ) {\n\n\t\t\tthis._grip = new Group();\n\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\tthis._grip.visible = false;\n\t\t\tthis._grip.hasLinearVelocity = false;\n\t\t\tthis._grip.linearVelocity = new Vector3();\n\t\t\tthis._grip.hasAngularVelocity = false;\n\t\t\tthis._grip.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._grip;\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.dispatchEvent( event );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect( inputSource ) {\n\n\t\tthis.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.visible = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tupdate( inputSource, frame, referenceSpace ) {\n\n\t\tlet inputPose = null;\n\t\tlet gripPose = null;\n\t\tlet handPose = null;\n\n\t\tconst targetRay = this._targetRay;\n\t\tconst grip = this._grip;\n\t\tconst hand = this._hand;\n\n\t\tif ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {\n\n\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\n\t\t\t\t\tif ( inputPose.linearVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = true;\n\t\t\t\t\t\ttargetRay.linearVelocity.copy( inputPose.linearVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( inputPose.angularVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = true;\n\t\t\t\t\t\ttargetRay.angularVelocity.copy( inputPose.angularVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchEvent( _moveEvent );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hand && inputSource.hand ) {\n\n\t\t\t\thandPose = true;\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\tconst jointPose = frame.getJointPose( inputjoint, referenceSpace );\n\n\t\t\t\t\tif ( hand.joints[ inputjoint.jointName ] === undefined ) {\n\n\t\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\t\tconst joint = new Group();\n\t\t\t\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\t\t\t\tjoint.visible = false;\n\t\t\t\t\t\thand.joints[ inputjoint.jointName ] = joint;\n\t\t\t\t\t\t// ??\n\t\t\t\t\t\thand.add( joint );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst joint = hand.joints[ inputjoint.jointName ];\n\n\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t}\n\n\t\t\t\t// Custom events\n\n\t\t\t\t// Check pinchz\n\t\t\t\tconst indexTip = hand.joints[ 'index-finger-tip' ];\n\t\t\t\tconst thumbTip = hand.joints[ 'thumb-tip' ];\n\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchend',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchstart',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( grip !== null && inputSource.gripSpace ) {\n\n\t\t\t\t\tgripPose = frame.getPose( inputSource.gripSpace, referenceSpace );\n\n\t\t\t\t\tif ( gripPose !== null ) {\n\n\t\t\t\t\t\tgrip.matrix.fromArray( gripPose.transform.matrix );\n\t\t\t\t\t\tgrip.matrix.decompose( grip.position, grip.rotation, grip.scale );\n\n\t\t\t\t\t\tif ( gripPose.linearVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = true;\n\t\t\t\t\t\t\tgrip.linearVelocity.copy( gripPose.linearVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( gripPose.angularVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = true;\n\t\t\t\t\t\t\tgrip.angularVelocity.copy( gripPose.angularVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( targetRay !== null ) {\n\n\t\t\ttargetRay.visible = ( inputPose !== null );\n\n\t\t}\n\n\t\tif ( grip !== null ) {\n\n\t\t\tgrip.visible = ( gripPose !== null );\n\n\t\t}\n\n\t\tif ( hand !== null ) {\n\n\t\t\thand.visible = ( handPose !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass WebXRManager extends EventDispatcher {\n\n\tconstructor( renderer, gl ) {\n\n\t\tsuper();\n\n\t\tconst scope = this;\n\t\tconst state = renderer.state;\n\n\t\tlet session = null;\n\t\tlet framebufferScaleFactor = 1.0;\n\n\t\tlet referenceSpace = null;\n\t\tlet referenceSpaceType = 'local-floor';\n\n\t\tlet pose = null;\n\t\tlet glBinding = null;\n\t\tlet glFramebuffer = null;\n\t\tlet glProjLayer = null;\n\t\tlet glBaseLayer = null;\n\t\tlet isMultisample = false;\n\t\tlet glMultisampledFramebuffer = null;\n\t\tlet glColorRenderbuffer = null;\n\t\tlet glDepthRenderbuffer = null;\n\t\tlet xrFrame = null;\n\t\tlet depthStyle = null;\n\t\tlet clearStyle = null;\n\n\t\tconst controllers = [];\n\t\tconst inputSourcesMap = new Map();\n\n\t\t//\n\n\t\tconst cameraL = new PerspectiveCamera();\n\t\tcameraL.layers.enable( 1 );\n\t\tcameraL.viewport = new Vector4();\n\n\t\tconst cameraR = new PerspectiveCamera();\n\t\tcameraR.layers.enable( 2 );\n\t\tcameraR.viewport = new Vector4();\n\n\t\tconst cameras = [ cameraL, cameraR ];\n\n\t\tconst cameraVR = new ArrayCamera();\n\t\tcameraVR.layers.enable( 1 );\n\t\tcameraVR.layers.enable( 2 );\n\n\t\tlet _currentDepthNear = null;\n\t\tlet _currentDepthFar = null;\n\n\t\t//\n\n\t\tthis.cameraAutoUpdate = true;\n\t\tthis.enabled = false;\n\n\t\tthis.isPresenting = false;\n\n\t\tthis.getController = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getTargetRaySpace();\n\n\t\t};\n\n\t\tthis.getControllerGrip = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getGripSpace();\n\n\t\t};\n\n\t\tthis.getHand = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getHandSpace();\n\n\t\t};\n\n\t\t//\n\n\t\tfunction onSessionEvent( event ) {\n\n\t\t\tconst controller = inputSourcesMap.get( event.inputSource );\n\n\t\t\tif ( controller ) {\n\n\t\t\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onSessionEnd() {\n\n\t\t\tinputSourcesMap.forEach( function ( controller, inputSource ) {\n\n\t\t\t\tcontroller.disconnect( inputSource );\n\n\t\t\t} );\n\n\t\t\tinputSourcesMap.clear();\n\n\t\t\t_currentDepthNear = null;\n\t\t\t_currentDepthFar = null;\n\n\t\t\t// restore framebuffer/rendering state\n\n\t\t\tstate.bindXRFramebuffer( null );\n\t\t\trenderer.setRenderTarget( renderer.getRenderTarget() );\n\n\t\t\tif ( glFramebuffer ) gl.deleteFramebuffer( glFramebuffer );\n\t\t\tif ( glMultisampledFramebuffer ) gl.deleteFramebuffer( glMultisampledFramebuffer );\n\t\t\tif ( glColorRenderbuffer ) gl.deleteRenderbuffer( glColorRenderbuffer );\n\t\t\tif ( glDepthRenderbuffer ) gl.deleteRenderbuffer( glDepthRenderbuffer );\n\t\t\tglFramebuffer = null;\n\t\t\tglMultisampledFramebuffer = null;\n\t\t\tglColorRenderbuffer = null;\n\t\t\tglDepthRenderbuffer = null;\n\t\t\tglBaseLayer = null;\n\t\t\tglProjLayer = null;\n\t\t\tglBinding = null;\n\t\t\tsession = null;\n\n\t\t\t//\n\n\t\t\tanimation.stop();\n\n\t\t\tscope.isPresenting = false;\n\n\t\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t\t}\n\n\t\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\t\tframebufferScaleFactor = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\t\treferenceSpaceType = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getReferenceSpace = function () {\n\n\t\t\treturn referenceSpace;\n\n\t\t};\n\n\t\tthis.getBaseLayer = function () {\n\n\t\t\treturn glProjLayer !== null ? glProjLayer : glBaseLayer;\n\n\t\t};\n\n\t\tthis.getBinding = function () {\n\n\t\t\treturn glBinding;\n\n\t\t};\n\n\t\tthis.getFrame = function () {\n\n\t\t\treturn xrFrame;\n\n\t\t};\n\n\t\tthis.getSession = function () {\n\n\t\t\treturn session;\n\n\t\t};\n\n\t\tthis.setSession = async function ( value ) {\n\n\t\t\tsession = value;\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\t\t\t\tsession.addEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\t\tconst attributes = gl.getContextAttributes();\n\n\t\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\t\tawait gl.makeXRCompatible();\n\n\t\t\t\t}\n\n\t\t\t\tif ( session.renderState.layers === undefined ) {\n\n\t\t\t\t\tconst layerInit = {\n\t\t\t\t\t\tantialias: attributes.antialias,\n\t\t\t\t\t\talpha: attributes.alpha,\n\t\t\t\t\t\tdepth: attributes.depth,\n\t\t\t\t\t\tstencil: attributes.stencil,\n\t\t\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBaseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\t\t\tsession.updateRenderState( { baseLayer: glBaseLayer } );\n\n\t\t\t\t} else if ( gl instanceof WebGLRenderingContext ) {\n\n\t\t\t\t\t// Use old style webgl layer because we can't use MSAA\n\t\t\t\t\t// WebGL2 support.\n\n\t\t\t\t\tconst layerInit = {\n\t\t\t\t\t\tantialias: true,\n\t\t\t\t\t\talpha: attributes.alpha,\n\t\t\t\t\t\tdepth: attributes.depth,\n\t\t\t\t\t\tstencil: attributes.stencil,\n\t\t\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBaseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\t\t\tsession.updateRenderState( { layers: [ glBaseLayer ] } );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tisMultisample = attributes.antialias;\n\t\t\t\t\tlet depthFormat = null;\n\n\n\t\t\t\t\tif ( attributes.depth ) {\n\n\t\t\t\t\t\tclearStyle = 256;\n\n\t\t\t\t\t\tif ( attributes.stencil ) clearStyle |= 1024;\n\n\t\t\t\t\t\tdepthStyle = attributes.stencil ? 33306 : 36096;\n\t\t\t\t\t\tdepthFormat = attributes.stencil ? 35056 : 33190;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst projectionlayerInit = {\n\t\t\t\t\t\tcolorFormat: attributes.alpha ? 32856 : 32849,\n\t\t\t\t\t\tdepthFormat: depthFormat,\n\t\t\t\t\t\tscaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBinding = new XRWebGLBinding( session, gl );\n\n\t\t\t\t\tglProjLayer = glBinding.createProjectionLayer( projectionlayerInit );\n\n\t\t\t\t\tglFramebuffer = gl.createFramebuffer();\n\n\t\t\t\t\tsession.updateRenderState( { layers: [ glProjLayer ] } );\n\n\t\t\t\t\tif ( isMultisample ) {\n\n\t\t\t\t\t\tglMultisampledFramebuffer = gl.createFramebuffer();\n\t\t\t\t\t\tglColorRenderbuffer = gl.createRenderbuffer();\n\t\t\t\t\t\tgl.bindRenderbuffer( 36161, glColorRenderbuffer );\n\t\t\t\t\t\tgl.renderbufferStorageMultisample(\n\t\t\t\t\t\t\t36161,\n\t\t\t\t\t\t\t4,\n\t\t\t\t\t\t\t32856,\n\t\t\t\t\t\t\tglProjLayer.textureWidth,\n\t\t\t\t\t\t\tglProjLayer.textureHeight );\n\t\t\t\t\t\tstate.bindFramebuffer( 36160, glMultisampledFramebuffer );\n\t\t\t\t\t\tgl.framebufferRenderbuffer( 36160, 36064, 36161, glColorRenderbuffer );\n\t\t\t\t\t\tgl.bindRenderbuffer( 36161, null );\n\n\t\t\t\t\t\tif ( depthFormat !== null ) {\n\n\t\t\t\t\t\t\tglDepthRenderbuffer = gl.createRenderbuffer();\n\t\t\t\t\t\t\tgl.bindRenderbuffer( 36161, glDepthRenderbuffer );\n\t\t\t\t\t\t\tgl.renderbufferStorageMultisample( 36161, 4, depthFormat, glProjLayer.textureWidth, glProjLayer.textureHeight );\n\t\t\t\t\t\t\tgl.framebufferRenderbuffer( 36160, depthStyle, 36161, glDepthRenderbuffer );\n\t\t\t\t\t\t\tgl.bindRenderbuffer( 36161, null );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstate.bindFramebuffer( 36160, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treferenceSpace = await session.requestReferenceSpace( referenceSpaceType );\n\n\t\t\t\tanimation.setContext( session );\n\t\t\t\tanimation.start();\n\n\t\t\t\tscope.isPresenting = true;\n\n\t\t\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction onInputSourcesChange( event ) {\n\n\t\t\tconst inputSources = session.inputSources;\n\n\t\t\t// Assign inputSources to available controllers\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tinputSourcesMap.set( inputSources[ i ], controllers[ i ] );\n\n\t\t\t}\n\n\t\t\t// Notify disconnected\n\n\t\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.removed[ i ];\n\t\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\t\t\t\t\tinputSourcesMap.delete( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Notify connected\n\n\t\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.added[ i ];\n\t\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst cameraLPos = new Vector3();\n\t\tconst cameraRPos = new Vector3();\n\n\t\t/**\n\t\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t\t * the cameras' projection and world matrices have already been set.\n\t\t * And that near and far planes are identical for both cameras.\n\t\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t\t */\n\t\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t\t// VR systems will have identical far and near planes, and\n\t\t\t// most likely identical top and bottom frustum extents.\n\t\t\t// Use the left camera for these values.\n\t\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\t\tconst left = near * leftFov;\n\t\t\tconst right = near * rightFov;\n\n\t\t\t// Calculate the new camera's position offset from the\n\t\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t\t// TODO: Better way to apply this offset?\n\t\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.translateX( xOffset );\n\t\t\tcamera.translateZ( zOffset );\n\t\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t\t// Find the union of the frustum values of the cameras and scale\n\t\t\t// the values so that the near plane's position does not change in world space,\n\t\t\t// although must now be relative to the new union camera.\n\t\t\tconst near2 = near + zOffset;\n\t\t\tconst far2 = far + zOffset;\n\t\t\tconst left2 = left - xOffset;\n\t\t\tconst right2 = right + ( ipd - xOffset );\n\t\t\tconst top2 = topFov * far / far2 * near2;\n\t\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\n\t\t}\n\n\t\tfunction updateCamera( camera, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t\t}\n\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t}\n\n\t\tthis.updateCamera = function ( camera ) {\n\n\t\t\tif ( session === null ) return;\n\n\t\t\tcameraVR.near = cameraR.near = cameraL.near = camera.near;\n\t\t\tcameraVR.far = cameraR.far = cameraL.far = camera.far;\n\n\t\t\tif ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) {\n\n\t\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\t\tsession.updateRenderState( {\n\t\t\t\t\tdepthNear: cameraVR.near,\n\t\t\t\t\tdepthFar: cameraVR.far\n\t\t\t\t} );\n\n\t\t\t\t_currentDepthNear = cameraVR.near;\n\t\t\t\t_currentDepthFar = cameraVR.far;\n\n\t\t\t}\n\n\t\t\tconst parent = camera.parent;\n\t\t\tconst cameras = cameraVR.cameras;\n\n\t\t\tupdateCamera( cameraVR, parent );\n\n\t\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t}\n\n\t\t\tcameraVR.matrixWorld.decompose( cameraVR.position, cameraVR.quaternion, cameraVR.scale );\n\n\t\t\t// update user camera and its children\n\n\t\t\tcamera.position.copy( cameraVR.position );\n\t\t\tcamera.quaternion.copy( cameraVR.quaternion );\n\t\t\tcamera.scale.copy( cameraVR.scale );\n\t\t\tcamera.matrix.copy( cameraVR.matrix );\n\t\t\tcamera.matrixWorld.copy( cameraVR.matrixWorld );\n\n\t\t\tconst children = camera.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateMatrixWorld( true );\n\n\t\t\t}\n\n\t\t\t// update projection matrix for proper view frustum culling\n\n\t\t\tif ( cameras.length === 2 ) {\n\n\t\t\t\tsetProjectionFromUnion( cameraVR, cameraL, cameraR );\n\n\t\t\t} else {\n\n\t\t\t\t// assume single camera setup (AR)\n\n\t\t\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getCamera = function () {\n\n\t\t\treturn cameraVR;\n\n\t\t};\n\n\t\tthis.getFoveation = function () {\n\n\t\t\tif ( glProjLayer !== null ) {\n\n\t\t\t\treturn glProjLayer.fixedFoveation;\n\n\t\t\t}\n\n\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\treturn glBaseLayer.fixedFoveation;\n\n\t\t\t}\n\n\t\t\treturn undefined;\n\n\t\t};\n\n\t\tthis.setFoveation = function ( foveation ) {\n\n\t\t\t// 0 = no foveation = full resolution\n\t\t\t// 1 = maximum foveation = the edges render at lower resolution\n\n\t\t\tif ( glProjLayer !== null ) {\n\n\t\t\t\tglProjLayer.fixedFoveation = foveation;\n\n\t\t\t}\n\n\t\t\tif ( glBaseLayer !== null && glBaseLayer.fixedFoveation !== undefined ) {\n\n\t\t\t\tglBaseLayer.fixedFoveation = foveation;\n\n\t\t\t}\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time, frame ) {\n\n\t\t\tpose = frame.getViewerPose( referenceSpace );\n\t\t\txrFrame = frame;\n\n\t\t\tif ( pose !== null ) {\n\n\t\t\t\tconst views = pose.views;\n\n\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\tstate.bindXRFramebuffer( glBaseLayer.framebuffer );\n\n\t\t\t\t}\n\n\t\t\t\tlet cameraVRNeedsUpdate = false;\n\n\t\t\t\t// check if it's necessary to rebuild cameraVR's camera list\n\n\t\t\t\tif ( views.length !== cameraVR.cameras.length ) {\n\n\t\t\t\t\tcameraVR.cameras.length = 0;\n\n\t\t\t\t\tcameraVRNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\t\tconst view = views[ i ];\n\n\t\t\t\t\tlet viewport = null;\n\n\t\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\t\tviewport = glBaseLayer.getViewport( view );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst glSubImage = glBinding.getViewSubImage( glProjLayer, view );\n\n\t\t\t\t\t\tstate.bindXRFramebuffer( glFramebuffer );\n\n\t\t\t\t\t\tif ( glSubImage.depthStencilTexture !== undefined ) {\n\n\t\t\t\t\t\t\tgl.framebufferTexture2D( 36160, depthStyle, 3553, glSubImage.depthStencilTexture, 0 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.framebufferTexture2D( 36160, 36064, 3553, glSubImage.colorTexture, 0 );\n\n\t\t\t\t\t\tviewport = glSubImage.viewport;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst camera = cameras[ i ];\n\n\t\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\tcameraVR.matrix.copy( camera.matrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( cameraVRNeedsUpdate === true ) {\n\n\t\t\t\t\t\tcameraVR.cameras.push( camera );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( isMultisample ) {\n\n\t\t\t\t\tstate.bindXRFramebuffer( glMultisampledFramebuffer );\n\n\t\t\t\t\tif ( clearStyle !== null ) gl.clear( clearStyle );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst inputSources = session.inputSources;\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst controller = controllers[ i ];\n\t\t\t\tconst inputSource = inputSources[ i ];\n\n\t\t\t\tcontroller.update( inputSource, frame, referenceSpace );\n\n\t\t\t}\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst width = glProjLayer.textureWidth;\n\t\t\t\tconst height = glProjLayer.textureHeight;\n\n\t\t\t\tstate.bindFramebuffer( 36008, glMultisampledFramebuffer );\n\t\t\t\tstate.bindFramebuffer( 36009, glFramebuffer );\n\t\t\t\t// Invalidate the depth here to avoid flush of the depth data to main memory.\n\t\t\t\tgl.invalidateFramebuffer( 36008, [ depthStyle ] );\n\t\t\t\tgl.invalidateFramebuffer( 36009, [ depthStyle ] );\n\t\t\t\tgl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, 16384, 9728 );\n\t\t\t\t// Invalidate the MSAA buffer because it's not needed anymore.\n\t\t\t\tgl.invalidateFramebuffer( 36008, [ 36064 ] );\n\t\t\t\tstate.bindFramebuffer( 36008, null );\n\t\t\t\tstate.bindFramebuffer( 36009, null );\n\n\t\t\t\tstate.bindFramebuffer( 36160, glMultisampledFramebuffer );\n\n\t\t\t}\n\n\t\t\txrFrame = null;\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\n\t\t};\n\n\t\tthis.dispose = function () {};\n\n\t}\n\n}\n\nfunction WebGLMaterials( properties ) {\n\n\tfunction refreshFogUniforms( uniforms, fog ) {\n\n\t\tuniforms.fogColor.value.copy( fog.color );\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshMaterialUniforms( uniforms, material, pixelRatio, height, transmissionRenderTarget ) {\n\n\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsLambert( uniforms, material );\n\n\t\t} else if ( material.isMeshToonMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsToon( uniforms, material );\n\n\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\trefreshUniformsPhysical( uniforms, material, transmissionRenderTarget );\n\n\t\t\t} else {\n\n\t\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsMatcap( uniforms, material );\n\n\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDepth( uniforms, material );\n\n\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDistance( uniforms, material );\n\n\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsNormal( uniforms, material );\n\n\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\trefreshUniformsLine( uniforms, material );\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\trefreshUniformsDash( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\trefreshUniformsPoints( uniforms, material, pixelRatio, height );\n\n\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\trefreshUniformsSprites( uniforms, material );\n\n\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\tuniforms.color.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t} else if ( material.isShaderMaterial ) {\n\n\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value.copy( material.color );\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\tuniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.ior.value = material.ior;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\tconst maxMipLevel = properties.get( envMap ).__maxMipLevel;\n\n\t\t\tif ( maxMipLevel !== undefined ) {\n\n\t\t\t\tuniforms.maxMipLevel.value = maxMipLevel;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. specular map\n\t\t// 3. displacementMap map\n\t\t// 4. normal map\n\t\t// 5. bump map\n\t\t// 6. roughnessMap map\n\t\t// 7. metalnessMap map\n\t\t// 8. alphaMap map\n\t\t// 9. emissiveMap map\n\t\t// 10. clearcoat map\n\t\t// 11. clearcoat normal map\n\t\t// 12. clearcoat roughnessMap map\n\t\t// 13. specular intensity map\n\t\t// 14. specular tint map\n\t\t// 15. transmission map\n\t\t// 16. thickness map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.specularMap ) {\n\n\t\t\tuvScaleMap = material.specularMap;\n\n\t\t} else if ( material.displacementMap ) {\n\n\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t} else if ( material.normalMap ) {\n\n\t\t\tuvScaleMap = material.normalMap;\n\n\t\t} else if ( material.bumpMap ) {\n\n\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t} else if ( material.roughnessMap ) {\n\n\t\t\tuvScaleMap = material.roughnessMap;\n\n\t\t} else if ( material.metalnessMap ) {\n\n\t\t\tuvScaleMap = material.metalnessMap;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t} else if ( material.emissiveMap ) {\n\n\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t} else if ( material.clearcoatMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatMap;\n\n\t\t} else if ( material.clearcoatNormalMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatNormalMap;\n\n\t\t} else if ( material.clearcoatRoughnessMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatRoughnessMap;\n\n\t\t} else if ( material.specularIntensityMap ) {\n\n\t\t\tuvScaleMap = material.specularIntensityMap;\n\n\t\t} else if ( material.specularColorMap ) {\n\n\t\t\tuvScaleMap = material.specularColorMap;\n\n\t\t} else if ( material.transmissionMap ) {\n\n\t\t\tuvScaleMap = material.transmissionMap;\n\n\t\t} else if ( material.thicknessMap ) {\n\n\t\t\tuvScaleMap = material.thicknessMap;\n\n\t\t} else if ( material.sheenColorMap ) {\n\n\t\t\tuvScaleMap = material.sheenColorMap;\n\n\t\t} else if ( material.sheenRoughnessMap ) {\n\n\t\t\tuvScaleMap = material.sheenRoughnessMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities for uv2\n\t\t// 1. ao map\n\t\t// 2. light map\n\n\t\tlet uv2ScaleMap;\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuv2ScaleMap = material.aoMap;\n\n\t\t} else if ( material.lightMap ) {\n\n\t\t\tuv2ScaleMap = material.lightMap;\n\n\t\t}\n\n\t\tif ( uv2ScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uv2ScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuv2ScaleMap = uv2ScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uv2ScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuv2ScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uv2Transform.value.copy( uv2ScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material, pixelRatio, height ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * pixelRatio;\n\t\tuniforms.scale.value = height * 0.5;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsSprites( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.rotation.value = material.rotation;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLambert( uniforms, material ) {\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value.copy( material.specular );\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.roughness.value = material.roughness;\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t}\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ) {\n\n\t\trefreshUniformsStandard( uniforms, material );\n\n\t\tuniforms.ior.value = material.ior; // also part of uniforms common\n\n\t\tif ( material.sheen > 0 ) {\n\n\t\t\tuniforms.sheenColor.value.copy( material.sheenColor ).multiplyScalar( material.sheen );\n\n\t\t\tuniforms.sheenRoughness.value = material.sheenRoughness;\n\n\t\t\tif ( material.sheenColorMap ) {\n\n\t\t\t\tuniforms.sheenColorMap.value = material.sheenColorMap;\n\n\t\t\t}\n\n\t\t\tif ( material.sheenRoughnessMap ) {\n\n\t\t\t\tuniforms.sheenRoughnessMap.value = material.sheenRoughnessMap;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.clearcoat > 0 ) {\n\n\t\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\n\t\t\tif ( material.clearcoatMap ) {\n\n\t\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\t\tuniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );\n\t\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.transmission > 0 ) {\n\n\t\t\tuniforms.transmission.value = material.transmission;\n\t\t\tuniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture;\n\t\t\tuniforms.transmissionSamplerSize.value.set( transmissionRenderTarget.width, transmissionRenderTarget.height );\n\n\t\t\tif ( material.transmissionMap ) {\n\n\t\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\n\t\t\t}\n\n\t\t\tuniforms.thickness.value = material.thickness;\n\n\t\t\tif ( material.thicknessMap ) {\n\n\t\t\t\tuniforms.thicknessMap.value = material.thicknessMap;\n\n\t\t\t}\n\n\t\t\tuniforms.attenuationDistance.value = material.attenuationDistance;\n\t\t\tuniforms.attenuationColor.value.copy( material.attenuationColor );\n\n\t\t}\n\n\t\tuniforms.specularIntensity.value = material.specularIntensity;\n\t\tuniforms.specularColor.value.copy( material.specularColor );\n\n\t\tif ( material.specularIntensityMap ) {\n\n\t\t\tuniforms.specularIntensityMap.value = material.specularIntensityMap;\n\n\t\t}\n\n\t\tif ( material.specularColorMap ) {\n\n\t\t\tuniforms.specularColorMap.value = material.specularColorMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\tif ( material.matcap ) {\n\n\t\t\tuniforms.matcap.value = material.matcap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDepth( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tuniforms.referencePosition.value.copy( material.referencePosition );\n\t\tuniforms.nearDistance.value = material.nearDistance;\n\t\tuniforms.farDistance.value = material.farDistance;\n\n\t}\n\n\tfunction refreshUniformsNormal( uniforms, material ) {\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\trefreshFogUniforms: refreshFogUniforms,\n\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t};\n\n}\n\nfunction createCanvasElement() {\n\n\tconst canvas = createElementNS( 'canvas' );\n\tcanvas.style.display = 'block';\n\treturn canvas;\n\n}\n\nfunction WebGLRenderer( parameters = {} ) {\n\n\tconst _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(),\n\t\t_context = parameters.context !== undefined ? parameters.context : null,\n\n\t\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false,\n\t\t_depth = parameters.depth !== undefined ? parameters.depth : true,\n\t\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\n\t\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\n\t\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\n\t\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,\n\t\t_powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default',\n\t\t_failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false;\n\n\tlet currentRenderList = null;\n\tlet currentRenderState = null;\n\n\t// render() can be called from within a callback triggered by another render.\n\t// We track this so that the nested render call gets its list and state isolated from the parent render call.\n\n\tconst renderListStack = [];\n\tconst renderStateStack = [];\n\n\t// public properties\n\n\tthis.domElement = _canvas;\n\n\t// Debug configuration container\n\tthis.debug = {\n\n\t\t/**\n\t\t * Enables error checking and reporting when shader programs are being compiled\n\t\t * @type {boolean}\n\t\t */\n\t\tcheckShaderErrors: true\n\t};\n\n\t// clearing\n\n\tthis.autoClear = true;\n\tthis.autoClearColor = true;\n\tthis.autoClearDepth = true;\n\tthis.autoClearStencil = true;\n\n\t// scene graph\n\n\tthis.sortObjects = true;\n\n\t// user-defined clipping\n\n\tthis.clippingPlanes = [];\n\tthis.localClippingEnabled = false;\n\n\t// physically based shading\n\n\tthis.gammaFactor = 2.0;\t// for backwards compatibility\n\tthis.outputEncoding = LinearEncoding;\n\n\t// physical lights\n\n\tthis.physicallyCorrectLights = false;\n\n\t// tone mapping\n\n\tthis.toneMapping = NoToneMapping;\n\tthis.toneMappingExposure = 1.0;\n\n\t// internal properties\n\n\tconst _this = this;\n\n\tlet _isContextLost = false;\n\n\t// internal state cache\n\n\tlet _currentActiveCubeFace = 0;\n\tlet _currentActiveMipmapLevel = 0;\n\tlet _currentRenderTarget = null;\n\tlet _currentMaterialId = - 1;\n\n\tlet _currentCamera = null;\n\n\tconst _currentViewport = new Vector4();\n\tconst _currentScissor = new Vector4();\n\tlet _currentScissorTest = null;\n\n\t//\n\n\tlet _width = _canvas.width;\n\tlet _height = _canvas.height;\n\n\tlet _pixelRatio = 1;\n\tlet _opaqueSort = null;\n\tlet _transparentSort = null;\n\n\tconst _viewport = new Vector4( 0, 0, _width, _height );\n\tconst _scissor = new Vector4( 0, 0, _width, _height );\n\tlet _scissorTest = false;\n\n\t//\n\n\tconst _currentDrawBuffers = [];\n\n\t// frustum\n\n\tconst _frustum = new Frustum();\n\n\t// clipping\n\n\tlet _clippingEnabled = false;\n\tlet _localClippingEnabled = false;\n\n\t// transmission\n\n\tlet _transmissionRenderTarget = null;\n\n\t// camera matrices cache\n\n\tconst _projScreenMatrix = new Matrix4();\n\n\tconst _vector3 = new Vector3();\n\n\tconst _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };\n\n\tfunction getTargetPixelRatio() {\n\n\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t}\n\n\t// initialize\n\n\tlet _gl = _context;\n\n\tfunction getContext( contextNames, contextAttributes ) {\n\n\t\tfor ( let i = 0; i < contextNames.length; i ++ ) {\n\n\t\t\tconst contextName = contextNames[ i ];\n\t\t\tconst context = _canvas.getContext( contextName, contextAttributes );\n\t\t\tif ( context !== null ) return context;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\ttry {\n\n\t\tconst contextAttributes = {\n\t\t\talpha: _alpha,\n\t\t\tdepth: _depth,\n\t\t\tstencil: _stencil,\n\t\t\tantialias: _antialias,\n\t\t\tpremultipliedAlpha: _premultipliedAlpha,\n\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer,\n\t\t\tpowerPreference: _powerPreference,\n\t\t\tfailIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat\n\t\t};\n\n\t\t// event listeners must be registered before WebGL context is created, see #12753\n\n\t\t_canvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\tif ( _gl === null ) {\n\n\t\t\tconst contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ];\n\n\t\t\tif ( _this.isWebGL1Renderer === true ) {\n\n\t\t\t\tcontextNames.shift();\n\n\t\t\t}\n\n\t\t\t_gl = getContext( contextNames, contextAttributes );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tif ( getContext( contextNames ) ) {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Some experimental-webgl implementations do not have getShaderPrecisionFormat\n\n\t\tif ( _gl.getShaderPrecisionFormat === undefined ) {\n\n\t\t\t_gl.getShaderPrecisionFormat = function () {\n\n\t\t\t\treturn { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };\n\n\t\t\t};\n\n\t\t}\n\n\t} catch ( error ) {\n\n\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\t\tthrow error;\n\n\t}\n\n\tlet extensions, capabilities, state, info;\n\tlet properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects;\n\tlet programCache, materials, renderLists, renderStates, clipping, shadowMap;\n\n\tlet background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\tlet utils, bindingStates;\n\n\tfunction initGLContext() {\n\n\t\textensions = new WebGLExtensions( _gl );\n\n\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\textensions.init( capabilities );\n\n\t\tutils = new WebGLUtils( _gl, extensions, capabilities );\n\n\t\tstate = new WebGLState( _gl, extensions, capabilities );\n\n\t\t_currentDrawBuffers[ 0 ] = 1029;\n\n\t\tinfo = new WebGLInfo( _gl );\n\t\tproperties = new WebGLProperties();\n\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\tcubemaps = new WebGLCubeMaps( _this );\n\t\tcubeuvmaps = new WebGLCubeUVMaps( _this );\n\t\tattributes = new WebGLAttributes( _gl, capabilities );\n\t\tbindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities );\n\t\tgeometries = new WebGLGeometries( _gl, attributes, info, bindingStates );\n\t\tobjects = new WebGLObjects( _gl, geometries, attributes, info );\n\t\tmorphtargets = new WebGLMorphtargets( _gl, capabilities, textures );\n\t\tclipping = new WebGLClipping( properties );\n\t\tprogramCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );\n\t\tmaterials = new WebGLMaterials( properties );\n\t\trenderLists = new WebGLRenderLists( properties );\n\t\trenderStates = new WebGLRenderStates( extensions, capabilities );\n\t\tbackground = new WebGLBackground( _this, cubemaps, state, objects, _premultipliedAlpha );\n\t\tshadowMap = new WebGLShadowMap( _this, objects, capabilities );\n\n\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities );\n\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );\n\n\t\tinfo.programs = programCache.programs;\n\n\t\t_this.capabilities = capabilities;\n\t\t_this.extensions = extensions;\n\t\t_this.properties = properties;\n\t\t_this.renderLists = renderLists;\n\t\t_this.shadowMap = shadowMap;\n\t\t_this.state = state;\n\t\t_this.info = info;\n\n\t}\n\n\tinitGLContext();\n\n\t// xr\n\n\tconst xr = new WebXRManager( _this, _gl );\n\n\tthis.xr = xr;\n\n\t// API\n\n\tthis.getContext = function () {\n\n\t\treturn _gl;\n\n\t};\n\n\tthis.getContextAttributes = function () {\n\n\t\treturn _gl.getContextAttributes();\n\n\t};\n\n\tthis.forceContextLoss = function () {\n\n\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.loseContext();\n\n\t};\n\n\tthis.forceContextRestore = function () {\n\n\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.restoreContext();\n\n\t};\n\n\tthis.getPixelRatio = function () {\n\n\t\treturn _pixelRatio;\n\n\t};\n\n\tthis.setPixelRatio = function ( value ) {\n\n\t\tif ( value === undefined ) return;\n\n\t\t_pixelRatio = value;\n\n\t\tthis.setSize( _width, _height, false );\n\n\t};\n\n\tthis.getSize = function ( target ) {\n\n\t\treturn target.set( _width, _height );\n\n\t};\n\n\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\tif ( xr.isPresenting ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_canvas.width = Math.floor( width * _pixelRatio );\n\t\t_canvas.height = Math.floor( height * _pixelRatio );\n\n\t\tif ( updateStyle !== false ) {\n\n\t\t\t_canvas.style.width = width + 'px';\n\t\t\t_canvas.style.height = height + 'px';\n\n\t\t}\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getDrawingBufferSize = function ( target ) {\n\n\t\treturn target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();\n\n\t};\n\n\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_pixelRatio = pixelRatio;\n\n\t\t_canvas.width = Math.floor( width * pixelRatio );\n\t\t_canvas.height = Math.floor( height * pixelRatio );\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getCurrentViewport = function ( target ) {\n\n\t\treturn target.copy( _currentViewport );\n\n\t};\n\n\tthis.getViewport = function ( target ) {\n\n\t\treturn target.copy( _viewport );\n\n\t};\n\n\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_viewport.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_viewport.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissor = function ( target ) {\n\n\t\treturn target.copy( _scissor );\n\n\t};\n\n\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_scissor.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_scissor.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissorTest = function () {\n\n\t\treturn _scissorTest;\n\n\t};\n\n\tthis.setScissorTest = function ( boolean ) {\n\n\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t};\n\n\tthis.setOpaqueSort = function ( method ) {\n\n\t\t_opaqueSort = method;\n\n\t};\n\n\tthis.setTransparentSort = function ( method ) {\n\n\t\t_transparentSort = method;\n\n\t};\n\n\t// Clearing\n\n\tthis.getClearColor = function ( target ) {\n\n\t\treturn target.copy( background.getClearColor() );\n\n\t};\n\n\tthis.setClearColor = function () {\n\n\t\tbackground.setClearColor.apply( background, arguments );\n\n\t};\n\n\tthis.getClearAlpha = function () {\n\n\t\treturn background.getClearAlpha();\n\n\t};\n\n\tthis.setClearAlpha = function () {\n\n\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t};\n\n\tthis.clear = function ( color, depth, stencil ) {\n\n\t\tlet bits = 0;\n\n\t\tif ( color === undefined || color ) bits |= 16384;\n\t\tif ( depth === undefined || depth ) bits |= 256;\n\t\tif ( stencil === undefined || stencil ) bits |= 1024;\n\n\t\t_gl.clear( bits );\n\n\t};\n\n\tthis.clearColor = function () {\n\n\t\tthis.clear( true, false, false );\n\n\t};\n\n\tthis.clearDepth = function () {\n\n\t\tthis.clear( false, true, false );\n\n\t};\n\n\tthis.clearStencil = function () {\n\n\t\tthis.clear( false, false, true );\n\n\t};\n\n\t//\n\n\tthis.dispose = function () {\n\n\t\t_canvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\trenderLists.dispose();\n\t\trenderStates.dispose();\n\t\tproperties.dispose();\n\t\tcubemaps.dispose();\n\t\tcubeuvmaps.dispose();\n\t\tobjects.dispose();\n\t\tbindingStates.dispose();\n\n\t\txr.dispose();\n\n\t\txr.removeEventListener( 'sessionstart', onXRSessionStart );\n\t\txr.removeEventListener( 'sessionend', onXRSessionEnd );\n\n\t\tif ( _transmissionRenderTarget ) {\n\n\t\t\t_transmissionRenderTarget.dispose();\n\t\t\t_transmissionRenderTarget = null;\n\n\t\t}\n\n\t\tanimation.stop();\n\n\t};\n\n\t// Events\n\n\tfunction onContextLost( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t_isContextLost = true;\n\n\t}\n\n\tfunction onContextRestore( /* event */ ) {\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t_isContextLost = false;\n\n\t\tconst infoAutoReset = info.autoReset;\n\t\tconst shadowMapEnabled = shadowMap.enabled;\n\t\tconst shadowMapAutoUpdate = shadowMap.autoUpdate;\n\t\tconst shadowMapNeedsUpdate = shadowMap.needsUpdate;\n\t\tconst shadowMapType = shadowMap.type;\n\n\t\tinitGLContext();\n\n\t\tinfo.autoReset = infoAutoReset;\n\t\tshadowMap.enabled = shadowMapEnabled;\n\t\tshadowMap.autoUpdate = shadowMapAutoUpdate;\n\t\tshadowMap.needsUpdate = shadowMapNeedsUpdate;\n\t\tshadowMap.type = shadowMapType;\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tconst material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\tdeallocateMaterial( material );\n\n\t}\n\n\t// Buffer deallocation\n\n\tfunction deallocateMaterial( material ) {\n\n\t\treleaseMaterialProgramReferences( material );\n\n\t\tproperties.remove( material );\n\n\t}\n\n\n\tfunction releaseMaterialProgramReferences( material ) {\n\n\t\tconst programs = properties.get( material ).programs;\n\n\t\tif ( programs !== undefined ) {\n\n\t\t\tprograms.forEach( function ( program ) {\n\n\t\t\t\tprogramCache.releaseProgram( program );\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t// Buffer rendering\n\n\tthis.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {\n\n\t\tif ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\tconst program = setProgram( camera, scene, geometry, material, object );\n\n\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t//\n\n\t\tlet index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\n\t\t//\n\n\t\tif ( index === null ) {\n\n\t\t\tif ( position === undefined || position.count === 0 ) return;\n\n\t\t} else if ( index.count === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t//\n\n\t\tlet rangeFactor = 1;\n\n\t\tif ( material.wireframe === true ) {\n\n\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\t\t\trangeFactor = 2;\n\n\t\t}\n\n\t\tbindingStates.setup( object, material, program, geometry, index );\n\n\t\tlet attribute;\n\t\tlet renderer = bufferRenderer;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattribute = attributes.get( index );\n\n\t\t\trenderer = indexedBufferRenderer;\n\t\t\trenderer.setIndex( attribute );\n\n\t\t}\n\n\t\t//\n\n\t\tconst dataCount = ( index !== null ) ? index.count : position.count;\n\n\t\tconst rangeStart = geometry.drawRange.start * rangeFactor;\n\t\tconst rangeCount = geometry.drawRange.count * rangeFactor;\n\n\t\tconst groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\tconst groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\tconst drawStart = Math.max( rangeStart, groupStart );\n\t\tconst drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\tconst drawCount = Math.max( 0, drawEnd - drawStart + 1 );\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\t//\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\trenderer.setMode( 1 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 4 );\n\n\t\t\t}\n\n\t\t} else if ( object.isLine ) {\n\n\t\t\tlet lineWidth = material.linewidth;\n\n\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\trenderer.setMode( 1 );\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\trenderer.setMode( 2 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 3 );\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\trenderer.setMode( 0 );\n\n\t\t} else if ( object.isSprite ) {\n\n\t\t\trenderer.setMode( 4 );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, object.count );\n\n\t\t} else if ( geometry.isInstancedBufferGeometry ) {\n\n\t\t\tconst instanceCount = Math.min( geometry.instanceCount, geometry._maxInstanceCount );\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, instanceCount );\n\n\t\t} else {\n\n\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t}\n\n\t};\n\n\t// Compile\n\n\tthis.compile = function ( scene, camera ) {\n\n\t\tcurrentRenderState = renderStates.get( scene );\n\t\tcurrentRenderState.init();\n\n\t\trenderStateStack.push( currentRenderState );\n\n\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tcurrentRenderState.setupLights( _this.physicallyCorrectLights );\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tconst material = object.material;\n\n\t\t\tif ( material ) {\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0; i < material.length; i ++ ) {\n\n\t\t\t\t\t\tconst material2 = material[ i ];\n\n\t\t\t\t\t\tgetProgram( material2, scene, object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\trenderStateStack.pop();\n\t\tcurrentRenderState = null;\n\n\t};\n\n\t// Animation Loop\n\n\tlet onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time ) {\n\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t}\n\n\tfunction onXRSessionStart() {\n\n\t\tanimation.stop();\n\n\t}\n\n\tfunction onXRSessionEnd() {\n\n\t\tanimation.start();\n\n\t}\n\n\tconst animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tif ( typeof window !== 'undefined' ) animation.setContext( window );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\t\txr.setAnimationLoop( callback );\n\n\t\t( callback === null ) ? animation.stop() : animation.start();\n\n\t};\n\n\txr.addEventListener( 'sessionstart', onXRSessionStart );\n\txr.addEventListener( 'sessionend', onXRSessionEnd );\n\n\t// Rendering\n\n\tthis.render = function ( scene, camera ) {\n\n\t\tif ( camera !== undefined && camera.isCamera !== true ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( _isContextLost === true ) return;\n\n\t\t// update scene graph\n\n\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t// update camera matrices and frustum\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\tif ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );\n\n\t\t\tcamera = xr.getCamera(); // use XR camera for rendering\n\n\t\t}\n\n\t\t//\n\t\tif ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget );\n\n\t\tcurrentRenderState = renderStates.get( scene, renderStateStack.length );\n\t\tcurrentRenderState.init();\n\n\t\trenderStateStack.push( currentRenderState );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t_frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled, camera );\n\n\t\tcurrentRenderList = renderLists.get( scene, renderListStack.length );\n\t\tcurrentRenderList.init();\n\n\t\trenderListStack.push( currentRenderList );\n\n\t\tprojectObject( scene, camera, 0, _this.sortObjects );\n\n\t\tcurrentRenderList.finish();\n\n\t\tif ( _this.sortObjects === true ) {\n\n\t\t\tcurrentRenderList.sort( _opaqueSort, _transparentSort );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _clippingEnabled === true ) clipping.beginShadows();\n\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\tif ( _clippingEnabled === true ) clipping.endShadows();\n\n\t\t//\n\n\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n\t\t//\n\n\t\tbackground.render( currentRenderList, scene );\n\n\t\t// render scene\n\n\t\tcurrentRenderState.setupLights( _this.physicallyCorrectLights );\n\n\t\tif ( camera.isArrayCamera ) {\n\n\t\t\tconst cameras = camera.cameras;\n\n\t\t\tfor ( let i = 0, l = cameras.length; i < l; i ++ ) {\n\n\t\t\t\tconst camera2 = cameras[ i ];\n\n\t\t\t\trenderScene( currentRenderList, scene, camera2, camera2.viewport );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderScene( currentRenderList, scene, camera );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t// resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\ttextures.updateMultisampleRenderTarget( _currentRenderTarget );\n\n\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\ttextures.updateRenderTargetMipmap( _currentRenderTarget );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\n\n\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\tstate.buffers.depth.setTest( true );\n\t\tstate.buffers.depth.setMask( true );\n\t\tstate.buffers.color.setMask( true );\n\n\t\tstate.setPolygonOffset( false );\n\n\t\t// _gl.finish();\n\n\t\tbindingStates.resetDefaultState();\n\t\t_currentMaterialId = - 1;\n\t\t_currentCamera = null;\n\n\t\trenderStateStack.pop();\n\n\t\tif ( renderStateStack.length > 0 ) {\n\n\t\t\tcurrentRenderState = renderStateStack[ renderStateStack.length - 1 ];\n\n\t\t} else {\n\n\t\t\tcurrentRenderState = null;\n\n\t\t}\n\n\t\trenderListStack.pop();\n\n\t\tif ( renderListStack.length > 0 ) {\n\n\t\t\tcurrentRenderList = renderListStack[ renderListStack.length - 1 ];\n\n\t\t} else {\n\n\t\t\tcurrentRenderList = null;\n\n\t\t}\n\n\t};\n\n\tfunction projectObject( object, camera, groupOrder, sortObjects ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible ) {\n\n\t\t\tif ( object.isGroup ) {\n\n\t\t\t\tgroupOrder = object.renderOrder;\n\n\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t} else if ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\t// update skeleton only once in a frame\n\n\t\t\t\t\tif ( object.skeleton.frame !== info.render.frame ) {\n\n\t\t\t\t\t\tobject.skeleton.update();\n\t\t\t\t\t\tobject.skeleton.frame = info.render.frame;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tprojectObject( children[ i ], camera, groupOrder, sortObjects );\n\n\t\t}\n\n\t}\n\n\tfunction renderScene( currentRenderList, scene, camera, viewport ) {\n\n\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\tconst transmissiveObjects = currentRenderList.transmissive;\n\t\tconst transparentObjects = currentRenderList.transparent;\n\n\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\tif ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, scene, camera );\n\n\t\tif ( viewport ) state.viewport( _currentViewport.copy( viewport ) );\n\n\t\tif ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );\n\t\tif ( transmissiveObjects.length > 0 ) renderObjects( transmissiveObjects, scene, camera );\n\t\tif ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );\n\n\t}\n\n\tfunction renderTransmissionPass( opaqueObjects, scene, camera ) {\n\n\t\tif ( _transmissionRenderTarget === null ) {\n\n\t\t\tconst needsAntialias = _antialias === true && capabilities.isWebGL2 === true;\n\t\t\tconst renderTargetType = needsAntialias ? WebGLMultisampleRenderTarget : WebGLRenderTarget;\n\n\t\t\t_transmissionRenderTarget = new renderTargetType( 1024, 1024, {\n\t\t\t\tgenerateMipmaps: true,\n\t\t\t\ttype: utils.convert( HalfFloatType ) !== null ? HalfFloatType : UnsignedByteType,\n\t\t\t\tminFilter: LinearMipmapLinearFilter,\n\t\t\t\tmagFilter: NearestFilter,\n\t\t\t\twrapS: ClampToEdgeWrapping,\n\t\t\t\twrapT: ClampToEdgeWrapping\n\t\t\t} );\n\n\t\t}\n\n\t\tconst currentRenderTarget = _this.getRenderTarget();\n\t\t_this.setRenderTarget( _transmissionRenderTarget );\n\t\t_this.clear();\n\n\t\t// Turn off the features which can affect the frag color for opaque objects pass.\n\t\t// Otherwise they are applied twice in opaque objects pass and transmission objects pass.\n\t\tconst currentToneMapping = _this.toneMapping;\n\t\t_this.toneMapping = NoToneMapping;\n\n\t\trenderObjects( opaqueObjects, scene, camera );\n\n\t\t_this.toneMapping = currentToneMapping;\n\n\t\ttextures.updateMultisampleRenderTarget( _transmissionRenderTarget );\n\t\ttextures.updateRenderTargetMipmap( _transmissionRenderTarget );\n\n\t\t_this.setRenderTarget( currentRenderTarget );\n\n\t}\n\n\tfunction renderObjects( renderList, scene, camera ) {\n\n\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\tfor ( let i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\tconst renderItem = renderList[ i ];\n\n\t\t\tconst object = renderItem.object;\n\t\t\tconst geometry = renderItem.geometry;\n\t\t\tconst material = overrideMaterial === null ? renderItem.material : overrideMaterial;\n\t\t\tconst group = renderItem.group;\n\n\t\t\tif ( object.layers.test( camera.layers ) ) {\n\n\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\n\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\tmaterial.onBeforeRender( _this, scene, camera, geometry, object, group );\n\n\t\tif ( material.transparent === true && material.side === DoubleSide ) {\n\n\t\t\tmaterial.side = BackSide;\n\t\t\tmaterial.needsUpdate = true;\n\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\tmaterial.side = FrontSide;\n\t\t\tmaterial.needsUpdate = true;\n\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\tmaterial.side = DoubleSide;\n\n\t\t} else {\n\n\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t}\n\n\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\n\t}\n\n\tfunction getProgram( material, scene, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tconst lights = currentRenderState.state.lights;\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tconst lightsStateVersion = lights.state.version;\n\n\t\tconst parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );\n\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n\t\tlet programs = materialProperties.programs;\n\n\t\t// always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change\n\n\t\tmaterialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tmaterialProperties.fog = scene.fog;\n\t\tmaterialProperties.envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || materialProperties.environment );\n\n\t\tif ( programs === undefined ) {\n\n\t\t\t// new material\n\n\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\tprograms = new Map();\n\t\t\tmaterialProperties.programs = programs;\n\n\t\t}\n\n\t\tlet program = programs.get( programCacheKey );\n\n\t\tif ( program !== undefined ) {\n\n\t\t\t// early out if program and light state is identical\n\n\t\t\tif ( materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion ) {\n\n\t\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t\treturn program;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tparameters.uniforms = programCache.getUniforms( material );\n\n\t\t\tmaterial.onBuild( object, parameters, _this );\n\n\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\t\t\tprograms.set( programCacheKey, program );\n\n\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\n\t\t}\n\n\t\tconst uniforms = materialProperties.uniforms;\n\n\t\tif ( ( ! material.isShaderMaterial && ! material.isRawShaderMaterial ) || material.clipping === true ) {\n\n\t\t\tuniforms.clippingPlanes = clipping.uniform;\n\n\t\t}\n\n\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t// store the light setup it was created for\n\n\t\tmaterialProperties.needsLights = materialNeedsLights( material );\n\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\tuniforms.lightProbe.value = lights.state.probe;\n\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\tuniforms.directionalLightShadows.value = lights.state.directionalShadow;\n\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\tuniforms.spotLightShadows.value = lights.state.spotShadow;\n\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\tuniforms.ltc_1.value = lights.state.rectAreaLTC1;\n\t\t\tuniforms.ltc_2.value = lights.state.rectAreaLTC2;\n\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\tuniforms.pointLightShadows.value = lights.state.pointShadow;\n\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\tuniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix;\n\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t}\n\n\t\tconst progUniforms = program.getUniforms();\n\t\tconst uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n\t\tmaterialProperties.currentProgram = program;\n\t\tmaterialProperties.uniformsList = uniformsList;\n\n\t\treturn program;\n\n\t}\n\n\tfunction updateCommonMaterialProperties( material, parameters ) {\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tmaterialProperties.outputEncoding = parameters.outputEncoding;\n\t\tmaterialProperties.instancing = parameters.instancing;\n\t\tmaterialProperties.skinning = parameters.skinning;\n\t\tmaterialProperties.morphTargets = parameters.morphTargets;\n\t\tmaterialProperties.morphNormals = parameters.morphNormals;\n\t\tmaterialProperties.morphTargetsCount = parameters.morphTargetsCount;\n\t\tmaterialProperties.numClippingPlanes = parameters.numClippingPlanes;\n\t\tmaterialProperties.numIntersection = parameters.numClipIntersection;\n\t\tmaterialProperties.vertexAlphas = parameters.vertexAlphas;\n\t\tmaterialProperties.vertexTangents = parameters.vertexTangents;\n\n\t}\n\n\tfunction setProgram( camera, scene, geometry, material, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\ttextures.resetTextureUnits();\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tconst encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : _currentRenderTarget.texture.encoding;\n\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\t\tconst vertexAlphas = material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;\n\t\tconst vertexTangents = !! material.normalMap && !! geometry.attributes.tangent;\n\t\tconst morphTargets = !! geometry.morphAttributes.position;\n\t\tconst morphNormals = !! geometry.morphAttributes.normal;\n\t\tconst morphTargetsCount = !! geometry.morphAttributes.position ? geometry.morphAttributes.position.length : 0;\n\n\t\tconst materialProperties = properties.get( material );\n\t\tconst lights = currentRenderState.state.lights;\n\n\t\tif ( _clippingEnabled === true ) {\n\n\t\t\tif ( _localClippingEnabled === true || camera !== _currentCamera ) {\n\n\t\t\t\tconst useCache =\n\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t// (#8465, #8379)\n\t\t\t\tclipping.setState( material, camera, useCache );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tlet needsProgramChange = false;\n\n\t\tif ( material.version === materialProperties.__version ) {\n\n\t\t\tif ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.outputEncoding !== encoding ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancing === false ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( ! object.isInstancedMesh && materialProperties.instancing === true ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( object.isSkinnedMesh && materialProperties.skinning === false ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( ! object.isSkinnedMesh && materialProperties.skinning === true ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.envMap !== envMap ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( material.fog && materialProperties.fog !== fog ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t( materialProperties.numClippingPlanes !== clipping.numPlanes ||\n\t\t\t\tmaterialProperties.numIntersection !== clipping.numIntersection ) ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.vertexAlphas !== vertexAlphas ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.vertexTangents !== vertexTangents ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.morphTargets !== morphTargets ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.morphNormals !== morphNormals ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( capabilities.isWebGL2 === true && materialProperties.morphTargetsCount !== morphTargetsCount ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tneedsProgramChange = true;\n\t\t\tmaterialProperties.__version = material.version;\n\n\t\t}\n\n\t\t//\n\n\t\tlet program = materialProperties.currentProgram;\n\n\t\tif ( needsProgramChange === true ) {\n\n\t\t\tprogram = getProgram( material, scene, object );\n\n\t\t}\n\n\t\tlet refreshProgram = false;\n\t\tlet refreshMaterial = false;\n\t\tlet refreshLights = false;\n\n\t\tconst p_uniforms = program.getUniforms(),\n\t\t\tm_uniforms = materialProperties.uniforms;\n\n\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\trefreshProgram = true;\n\t\t\trefreshMaterial = true;\n\t\t\trefreshLights = true;\n\n\t\t}\n\n\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t_currentMaterialId = material.id;\n\n\t\t\trefreshMaterial = true;\n\n\t\t}\n\n\t\tif ( refreshProgram || _currentCamera !== camera ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t}\n\n\t\t\tif ( _currentCamera !== camera ) {\n\n\t\t\t\t_currentCamera = camera;\n\n\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t}\n\n\t\t\t// load material specific uniforms\n\t\t\t// (shader material also gets them for the sake of genericity)\n\n\t\t\tif ( material.isShaderMaterial ||\n\t\t\t\tmaterial.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.envMap ) {\n\n\t\t\t\tconst uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl,\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ||\n\t\t\t\tmaterial.isShadowMaterial ||\n\t\t\t\tobject.isSkinnedMesh ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// skinning and morph target uniforms must be set even if material didn't change\n\t\t// auto-setting of texture unit for bone and morph texture must go before other textures\n\t\t// otherwise textures used for skinning and morphing can take over texture units reserved for other material textures\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\tconst skeleton = object.skeleton;\n\n\t\t\tif ( skeleton ) {\n\n\t\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tp_uniforms.setOptional( _gl, skeleton, 'boneMatrices' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( !! geometry && ( geometry.morphAttributes.position !== undefined || geometry.morphAttributes.normal !== undefined ) ) {\n\n\t\t\tmorphtargets.update( object, geometry, material, program );\n\n\t\t}\n\n\n\t\tif ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {\n\n\t\t\tmaterialProperties.receiveShadow = object.receiveShadow;\n\t\t\tp_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );\n\n\t\t}\n\n\t\tif ( refreshMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\n\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t// values\n\t\t\t\t//\n\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t// the GL state when required\n\n\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t}\n\n\t\t\t// refresh uniforms common to several materials\n\n\t\t\tif ( fog && material.fog ) {\n\n\t\t\t\tmaterials.refreshFogUniforms( m_uniforms, fog );\n\n\t\t\t}\n\n\t\t\tmaterials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, _transmissionRenderTarget );\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\n\t\t}\n\n\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\n\n\t\t}\n\n\t\t// common matrices\n\n\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\treturn program;\n\n\t}\n\n\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\tuniforms.ambientLightColor.needsUpdate = value;\n\t\tuniforms.lightProbe.needsUpdate = value;\n\n\t\tuniforms.directionalLights.needsUpdate = value;\n\t\tuniforms.directionalLightShadows.needsUpdate = value;\n\t\tuniforms.pointLights.needsUpdate = value;\n\t\tuniforms.pointLightShadows.needsUpdate = value;\n\t\tuniforms.spotLights.needsUpdate = value;\n\t\tuniforms.spotLightShadows.needsUpdate = value;\n\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t}\n\n\tfunction materialNeedsLights( material ) {\n\n\t\treturn material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||\n\t\t\tmaterial.isMeshStandardMaterial || material.isShadowMaterial ||\n\t\t\t( material.isShaderMaterial && material.lights === true );\n\n\t}\n\n\tthis.getActiveCubeFace = function () {\n\n\t\treturn _currentActiveCubeFace;\n\n\t};\n\n\tthis.getActiveMipmapLevel = function () {\n\n\t\treturn _currentActiveMipmapLevel;\n\n\t};\n\n\tthis.getRenderTarget = function () {\n\n\t\treturn _currentRenderTarget;\n\n\t};\n\n\tthis.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {\n\n\t\t_currentRenderTarget = renderTarget;\n\t\t_currentActiveCubeFace = activeCubeFace;\n\t\t_currentActiveMipmapLevel = activeMipmapLevel;\n\n\t\tif ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {\n\n\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t}\n\n\t\tlet framebuffer = null;\n\t\tlet isCube = false;\n\t\tlet isRenderTarget3D = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tconst texture = renderTarget.texture;\n\n\t\t\tif ( texture.isDataTexture3D || texture.isDataTexture2DArray ) {\n\n\t\t\t\tisRenderTarget3D = true;\n\n\t\t\t}\n\n\t\t\tconst __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ];\n\t\t\t\tisCube = true;\n\n\t\t\t} else if ( renderTarget.isWebGLMultisampleRenderTarget ) {\n\n\t\t\t\tframebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;\n\n\t\t\t} else {\n\n\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t}\n\n\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t} else {\n\n\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t}\n\n\t\tconst framebufferBound = state.bindFramebuffer( 36160, framebuffer );\n\n\t\tif ( framebufferBound && capabilities.drawBuffers ) {\n\n\t\t\tlet needsUpdate = false;\n\n\t\t\tif ( renderTarget ) {\n\n\t\t\t\tif ( renderTarget.isWebGLMultipleRenderTargets ) {\n\n\t\t\t\t\tconst textures = renderTarget.texture;\n\n\t\t\t\t\tif ( _currentDrawBuffers.length !== textures.length || _currentDrawBuffers[ 0 ] !== 36064 ) {\n\n\t\t\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\t_currentDrawBuffers[ i ] = 36064 + i;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_currentDrawBuffers.length = textures.length;\n\n\t\t\t\t\t\tneedsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( _currentDrawBuffers.length !== 1 || _currentDrawBuffers[ 0 ] !== 36064 ) {\n\n\t\t\t\t\t\t_currentDrawBuffers[ 0 ] = 36064;\n\t\t\t\t\t\t_currentDrawBuffers.length = 1;\n\n\t\t\t\t\t\tneedsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( _currentDrawBuffers.length !== 1 || _currentDrawBuffers[ 0 ] !== 1029 ) {\n\n\t\t\t\t\t_currentDrawBuffers[ 0 ] = 1029;\n\t\t\t\t\t_currentDrawBuffers.length = 1;\n\n\t\t\t\t\tneedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\t\t_gl.drawBuffers( _currentDrawBuffers );\n\n\t\t\t\t} else {\n\n\t\t\t\t\textensions.get( 'WEBGL_draw_buffers' ).drawBuffersWEBGL( _currentDrawBuffers );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport );\n\t\tstate.scissor( _currentScissor );\n\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\tif ( isCube ) {\n\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t_gl.framebufferTexture2D( 36160, 36064, 34069 + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t} else if ( isRenderTarget3D ) {\n\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\tconst layer = activeCubeFace || 0;\n\t\t\t_gl.framebufferTextureLayer( 36160, 36064, textureProperties.__webglTexture, activeMipmapLevel || 0, layer );\n\n\t\t}\n\n\t\t_currentMaterialId = - 1; // reset current material to ensure correct uniform bindings\n\n\t};\n\n\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t}\n\n\t\tif ( framebuffer ) {\n\n\t\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\t\ttry {\n\n\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( 35739 ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tconst halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || ( capabilities.isWebGL2 && extensions.has( 'EXT_color_buffer_float' ) ) );\n\n\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( 35738 ) && // Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.has( 'OES_texture_float' ) || extensions.has( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t! halfFloatSupportedByExt ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _gl.checkFramebufferStatus( 36160 ) === 36053 ) {\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' );\n\n\t\t\t\t}\n\n\t\t\t} finally {\n\n\t\t\t\t// restore framebuffer of current render target if necessary\n\n\t\t\t\tconst framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.copyFramebufferToTexture = function ( position, texture, level = 0 ) {\n\n\t\tconst levelScale = Math.pow( 2, - level );\n\t\tconst width = Math.floor( texture.image.width * levelScale );\n\t\tconst height = Math.floor( texture.image.height * levelScale );\n\n\t\tlet glFormat = utils.convert( texture.format );\n\n\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t// Workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=1120100\n\t\t\t// Not needed in Chrome 93+\n\n\t\t\tif ( glFormat === 6407 ) glFormat = 32849;\n\t\t\tif ( glFormat === 6408 ) glFormat = 32856;\n\n\t\t}\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t_gl.copyTexImage2D( 3553, level, glFormat, position.x, position.y, width, height, 0 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) {\n\n\t\tconst width = srcTexture.image.width;\n\t\tconst height = srcTexture.image.height;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n\n\t\ttextures.setTexture2D( dstTexture, 0 );\n\n\t\t// As another texture upload may have changed pixelStorei\n\t\t// parameters, make sure they are correct for the dstTexture\n\t\t_gl.pixelStorei( 37440, dstTexture.flipY );\n\t\t_gl.pixelStorei( 37441, dstTexture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, dstTexture.unpackAlignment );\n\n\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data );\n\n\t\t} else {\n\n\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t_gl.compressedTexSubImage2D( 3553, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, glFormat, glType, srcTexture.image );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( 3553 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.copyTextureToTexture3D = function ( sourceBox, position, srcTexture, dstTexture, level = 0 ) {\n\n\t\tif ( _this.isWebGL1Renderer ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst width = sourceBox.max.x - sourceBox.min.x + 1;\n\t\tconst height = sourceBox.max.y - sourceBox.min.y + 1;\n\t\tconst depth = sourceBox.max.z - sourceBox.min.z + 1;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n\t\tlet glTarget;\n\n\t\tif ( dstTexture.isDataTexture3D ) {\n\n\t\t\ttextures.setTexture3D( dstTexture, 0 );\n\t\t\tglTarget = 32879;\n\n\t\t} else if ( dstTexture.isDataTexture2DArray ) {\n\n\t\t\ttextures.setTexture2DArray( dstTexture, 0 );\n\t\t\tglTarget = 35866;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_gl.pixelStorei( 37440, dstTexture.flipY );\n\t\t_gl.pixelStorei( 37441, dstTexture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, dstTexture.unpackAlignment );\n\n\t\tconst unpackRowLen = _gl.getParameter( 3314 );\n\t\tconst unpackImageHeight = _gl.getParameter( 32878 );\n\t\tconst unpackSkipPixels = _gl.getParameter( 3316 );\n\t\tconst unpackSkipRows = _gl.getParameter( 3315 );\n\t\tconst unpackSkipImages = _gl.getParameter( 32877 );\n\n\t\tconst image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ 0 ] : srcTexture.image;\n\n\t\t_gl.pixelStorei( 3314, image.width );\n\t\t_gl.pixelStorei( 32878, image.height );\n\t\t_gl.pixelStorei( 3316, sourceBox.min.x );\n\t\t_gl.pixelStorei( 3315, sourceBox.min.y );\n\t\t_gl.pixelStorei( 32877, sourceBox.min.z );\n\n\t\tif ( srcTexture.isDataTexture || srcTexture.isDataTexture3D ) {\n\n\t\t\t_gl.texSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image.data );\n\n\t\t} else {\n\n\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.' );\n\t\t\t\t_gl.compressedTexSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, image.data );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.texSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.pixelStorei( 3314, unpackRowLen );\n\t\t_gl.pixelStorei( 32878, unpackImageHeight );\n\t\t_gl.pixelStorei( 3316, unpackSkipPixels );\n\t\t_gl.pixelStorei( 3315, unpackSkipRows );\n\t\t_gl.pixelStorei( 32877, unpackSkipImages );\n\n\t\t// Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( glTarget );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.initTexture = function ( texture ) {\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.resetState = function () {\n\n\t\t_currentActiveCubeFace = 0;\n\t\t_currentActiveMipmapLevel = 0;\n\t\t_currentRenderTarget = null;\n\n\t\tstate.reset();\n\t\tbindingStates.reset();\n\n\t};\n\n\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t}\n\n}\n\nWebGLRenderer.prototype.isWebGLRenderer = true;\n\nclass WebGL1Renderer extends WebGLRenderer {}\n\nWebGL1Renderer.prototype.isWebGL1Renderer = true;\n\nclass FogExp2 {\n\n\tconstructor( color, density = 0.00025 ) {\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\t\tthis.density = density;\n\n\t}\n\n\tclone() {\n\n\t\treturn new FogExp2( this.color, this.density );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'FogExp2',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tdensity: this.density\n\t\t};\n\n\t}\n\n}\n\nFogExp2.prototype.isFogExp2 = true;\n\nclass Fog {\n\n\tconstructor( color, near = 1, far = 1000 ) {\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Fog( this.color, this.near, this.far );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'Fog',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tnear: this.near,\n\t\t\tfar: this.far\n\t\t};\n\n\t}\n\n}\n\nFog.prototype.isFog = true;\n\nclass Scene extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Scene';\n\n\t\tthis.background = null;\n\t\tthis.environment = null;\n\t\tthis.fog = null;\n\n\t\tthis.overrideMaterial = null;\n\n\t\tthis.autoUpdate = true; // checked by the renderer\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.environment !== null ) this.environment = source.environment.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\nScene.prototype.isScene = true;\n\nclass InterleavedBuffer {\n\n\tconstructor( array, stride ) {\n\n\t\tthis.array = array;\n\t\tthis.stride = stride;\n\t\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t\tthis.uuid = generateUUID();\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( let i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t}\n\n\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\tconst ib = new this.constructor( array, this.stride );\n\t\tib.setUsage( this.usage );\n\n\t\treturn ib;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\t// generate UUID for array buffer if necessary\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.prototype.slice.call( new Uint32Array( this.array.buffer ) );\n\n\t\t}\n\n\t\t//\n\n\t\treturn {\n\t\t\tuuid: this.uuid,\n\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tstride: this.stride\n\t\t};\n\n\t}\n\n}\n\nInterleavedBuffer.prototype.isInterleavedBuffer = true;\n\nconst _vector$6 = /*@__PURE__*/ new Vector3();\n\nclass InterleavedBufferAttribute {\n\n\tconstructor( interleavedBuffer, itemSize, offset, normalized = false ) {\n\n\t\tthis.name = '';\n\n\t\tthis.data = interleavedBuffer;\n\t\tthis.itemSize = itemSize;\n\t\tthis.offset = offset;\n\n\t\tthis.normalized = normalized === true;\n\n\t}\n\n\tget count() {\n\n\t\treturn this.data.count;\n\n\t}\n\n\tget array() {\n\n\t\treturn this.data.array;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tthis.data.needsUpdate = value;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.x = this.getX( i );\n\t\t\t_vector$6.y = this.getY( i );\n\t\t\t_vector$6.z = this.getZ( i );\n\n\t\t\t_vector$6.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.x = this.getX( i );\n\t\t\t_vector$6.y = this.getY( i );\n\t\t\t_vector$6.z = this.getZ( i );\n\n\t\t\t_vector$6.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.x = this.getX( i );\n\t\t\t_vector$6.y = this.getY( i );\n\t\t\t_vector$6.z = this.getZ( i );\n\n\t\t\t_vector$6.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset ];\n\n\t}\n\n\tgetY( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t}\n\n\tgetZ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t}\n\n\tgetW( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t} else {\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t}\n\n\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t}\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// deinterleave data and save it as an ordinary buffer attribute for now\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t} else {\n\n\t\t\t// save as true interlaved attribtue\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\tdata: this.data.uuid,\n\t\t\t\toffset: this.offset,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t}\n\n}\n\nInterleavedBufferAttribute.prototype.isInterleavedBufferAttribute = true;\n\n/**\n * parameters = {\n * color: ,\n * map: new THREE.Texture( ),\n * alphaMap: new THREE.Texture( ),\n * rotation: ,\n * sizeAttenuation: \n * }\n */\n\nclass SpriteMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'SpriteMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.rotation = 0;\n\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.transparent = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\treturn this;\n\n\t}\n\n}\n\nSpriteMaterial.prototype.isSpriteMaterial = true;\n\nlet _geometry;\n\nconst _intersectPoint = /*@__PURE__*/ new Vector3();\nconst _worldScale = /*@__PURE__*/ new Vector3();\nconst _mvPosition = /*@__PURE__*/ new Vector3();\n\nconst _alignedPosition = /*@__PURE__*/ new Vector2();\nconst _rotatedPosition = /*@__PURE__*/ new Vector2();\nconst _viewWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _vA = /*@__PURE__*/ new Vector3();\nconst _vB = /*@__PURE__*/ new Vector3();\nconst _vC = /*@__PURE__*/ new Vector3();\n\nconst _uvA = /*@__PURE__*/ new Vector2();\nconst _uvB = /*@__PURE__*/ new Vector2();\nconst _uvC = /*@__PURE__*/ new Vector2();\n\nclass Sprite extends Object3D {\n\n\tconstructor( material ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Sprite';\n\n\t\tif ( _geometry === undefined ) {\n\n\t\t\t_geometry = new BufferGeometry();\n\n\t\t\tconst float32Array = new Float32Array( [\n\t\t\t\t- 0.5, - 0.5, 0, 0, 0,\n\t\t\t\t0.5, - 0.5, 0, 1, 0,\n\t\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t\t- 0.5, 0.5, 0, 0, 1\n\t\t\t] );\n\n\t\t\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\t\t\t_geometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\t\t_geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\t\t_geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t\t}\n\n\t\tthis.geometry = _geometry;\n\t\tthis.material = ( material !== undefined ) ? material : new SpriteMaterial();\n\n\t\tthis.center = new Vector2( 0.5, 0.5 );\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tif ( raycaster.camera === null ) {\n\n\t\t\tconsole.error( 'THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.' );\n\n\t\t}\n\n\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\n\t\t_viewWorldMatrix.copy( raycaster.camera.matrixWorld );\n\t\tthis.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld );\n\n\t\t_mvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\tif ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) {\n\n\t\t\t_worldScale.multiplyScalar( - _mvPosition.z );\n\n\t\t}\n\n\t\tconst rotation = this.material.rotation;\n\t\tlet sin, cos;\n\n\t\tif ( rotation !== 0 ) {\n\n\t\t\tcos = Math.cos( rotation );\n\t\t\tsin = Math.sin( rotation );\n\n\t\t}\n\n\t\tconst center = this.center;\n\n\t\ttransformVertex( _vA.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vB.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vC.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\n\t\t_uvA.set( 0, 0 );\n\t\t_uvB.set( 1, 0 );\n\t\t_uvC.set( 1, 1 );\n\n\t\t// check first triangle\n\t\tlet intersect = raycaster.ray.intersectTriangle( _vA, _vB, _vC, false, _intersectPoint );\n\n\t\tif ( intersect === null ) {\n\n\t\t\t// check second triangle\n\t\t\ttransformVertex( _vB.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\t_uvB.set( 0, 1 );\n\n\t\t\tintersect = raycaster.ray.intersectTriangle( _vA, _vC, _vB, false, _intersectPoint );\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( _intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tpoint: _intersectPoint.clone(),\n\t\t\tuv: Triangle.getUV( _intersectPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ),\n\t\t\tface: null,\n\t\t\tobject: this\n\n\t\t} );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\tthis.material = source.material;\n\n\t\treturn this;\n\n\t}\n\n}\n\nSprite.prototype.isSprite = true;\n\nfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t// compute position in camera space\n\t_alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t// to check if rotation is not zero\n\tif ( sin !== undefined ) {\n\n\t\t_rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y );\n\t\t_rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y );\n\n\t} else {\n\n\t\t_rotatedPosition.copy( _alignedPosition );\n\n\t}\n\n\n\tvertexPosition.copy( mvPosition );\n\tvertexPosition.x += _rotatedPosition.x;\n\tvertexPosition.y += _rotatedPosition.y;\n\n\t// transform to world space\n\tvertexPosition.applyMatrix4( _viewWorldMatrix );\n\n}\n\nconst _v1$2 = /*@__PURE__*/ new Vector3();\nconst _v2$1 = /*@__PURE__*/ new Vector3();\n\nclass LOD extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis._currentLevel = 0;\n\n\t\tthis.type = 'LOD';\n\n\t\tObject.defineProperties( this, {\n\t\t\tlevels: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tisLOD: {\n\t\t\t\tvalue: true,\n\t\t\t}\n\t\t} );\n\n\t\tthis.autoUpdate = true;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tconst levels = source.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance );\n\n\t\t}\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\taddLevel( object, distance = 0 ) {\n\n\t\tdistance = Math.abs( distance );\n\n\t\tconst levels = this.levels;\n\n\t\tlet l;\n\n\t\tfor ( l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, object: object } );\n\n\t\tthis.add( object );\n\n\t\treturn this;\n\n\t}\n\n\tgetCurrentLevel() {\n\n\t\treturn this._currentLevel;\n\n\t}\n\n\tgetObjectForDistance( distance ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance < levels[ i ].distance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn levels[ i - 1 ].object;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( _v1$2 );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t}\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 1 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t_v2$1.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = _v1$2.distanceTo( _v2$1 ) / camera.zoom;\n\n\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance >= levels[ i ].distance ) {\n\n\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._currentLevel = i - 1;\n\n\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.autoUpdate === false ) data.object.autoUpdate = false;\n\n\t\tdata.object.levels = [];\n\n\t\tconst levels = this.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _basePosition = /*@__PURE__*/ new Vector3();\n\nconst _skinIndex = /*@__PURE__*/ new Vector4();\nconst _skinWeight = /*@__PURE__*/ new Vector4();\n\nconst _vector$5 = /*@__PURE__*/ new Vector3();\nconst _matrix = /*@__PURE__*/ new Matrix4();\n\nclass SkinnedMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'SkinnedMesh';\n\n\t\tthis.bindMode = 'attached';\n\t\tthis.bindMatrix = new Matrix4();\n\t\tthis.bindMatrixInverse = new Matrix4();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.bindMode = source.bindMode;\n\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\tthis.skeleton = source.skeleton;\n\n\t\treturn this;\n\n\t}\n\n\tbind( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.copy( bindMatrix ).invert();\n\n\t}\n\n\tpose() {\n\n\t\tthis.skeleton.pose();\n\n\t}\n\n\tnormalizeSkinWeights() {\n\n\t\tconst vector = new Vector4();\n\n\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\tvector.x = skinWeight.getX( i );\n\t\t\tvector.y = skinWeight.getY( i );\n\t\t\tvector.z = skinWeight.getZ( i );\n\t\t\tvector.w = skinWeight.getW( i );\n\n\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t}\n\n\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\n\n\t\t}\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t}\n\n\tboneTransform( index, target ) {\n\n\t\tconst skeleton = this.skeleton;\n\t\tconst geometry = this.geometry;\n\n\t\t_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t_basePosition.copy( target ).applyMatrix4( this.bindMatrix );\n\n\t\ttarget.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tconst weight = _skinWeight.getComponent( i );\n\n\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\tconst boneIndex = _skinIndex.getComponent( i );\n\n\t\t\t\t_matrix.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\ttarget.addScaledVector( _vector$5.copy( _basePosition ).applyMatrix4( _matrix ), weight );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn target.applyMatrix4( this.bindMatrixInverse );\n\n\t}\n\n}\n\nSkinnedMesh.prototype.isSkinnedMesh = true;\n\nclass Bone extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'Bone';\n\n\t}\n\n}\n\nBone.prototype.isBone = true;\n\nclass DataTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, encoding ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.image = { data: data, width: width, height: height };\n\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nDataTexture.prototype.isDataTexture = true;\n\nconst _offsetMatrix = /*@__PURE__*/ new Matrix4();\nconst _identityMatrix = /*@__PURE__*/ new Matrix4();\n\nclass Skeleton {\n\n\tconstructor( bones = [], boneInverses = [] ) {\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.bones = bones.slice( 0 );\n\t\tthis.boneInverses = boneInverses;\n\t\tthis.boneMatrices = null;\n\n\t\tthis.boneTexture = null;\n\t\tthis.boneTextureSize = 0;\n\n\t\tthis.frame = - 1;\n\n\t\tthis.init();\n\n\t}\n\n\tinit() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t// calculate inverse bone matrices if necessary\n\n\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\t// handle special case\n\n\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcalculateInverses() {\n\n\t\tthis.boneInverses.length = 0;\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t}\n\n\tpose() {\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.copy( this.boneInverses[ i ] ).invert();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\t\tconst boneMatrices = this.boneMatrices;\n\t\tconst boneTexture = this.boneTexture;\n\n\t\t// flatten bone matrices to array\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t// compute the offset between the current and the original transform\n\n\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix;\n\n\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( boneTexture !== null ) {\n\n\t\t\tboneTexture.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t}\n\n\tcomputeBoneTexture() {\n\n\t\t// layout (1 matrix = 4 pixels)\n\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\n\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\n\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\n\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\t\tlet size = Math.sqrt( this.bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\tsize = ceilPowerOfTwo( size );\n\t\tsize = Math.max( size, 4 );\n\n\t\tconst boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\tboneMatrices.set( this.boneMatrices ); // copy current values\n\n\t\tconst boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\n\t\tthis.boneMatrices = boneMatrices;\n\t\tthis.boneTexture = boneTexture;\n\t\tthis.boneTextureSize = size;\n\n\t\treturn this;\n\n\t}\n\n\tgetBoneByName( name ) {\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tdispose( ) {\n\n\t\tif ( this.boneTexture !== null ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = null;\n\n\t\t}\n\n\t}\n\n\tfromJSON( json, bones ) {\n\n\t\tthis.uuid = json.uuid;\n\n\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\tconst uuid = json.bones[ i ];\n\t\t\tlet bone = bones[ uuid ];\n\n\t\t\tif ( bone === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );\n\t\t\t\tbone = new Bone();\n\n\t\t\t}\n\n\t\t\tthis.bones.push( bone );\n\t\t\tthis.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t}\n\n\t\tthis.init();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Skeleton',\n\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t},\n\t\t\tbones: [],\n\t\t\tboneInverses: []\n\t\t};\n\n\t\tdata.uuid = this.uuid;\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass InstancedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized, meshPerAttribute = 1 ) {\n\n\t\tif ( typeof normalized === 'number' ) {\n\n\t\t\tmeshPerAttribute = normalized;\n\n\t\t\tnormalized = false;\n\n\t\t\tconsole.error( 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.' );\n\n\t\t}\n\n\t\tsuper( array, itemSize, normalized );\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\tdata.isInstancedBufferAttribute = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nInstancedBufferAttribute.prototype.isInstancedBufferAttribute = true;\n\nconst _instanceLocalMatrix = /*@__PURE__*/ new Matrix4();\nconst _instanceWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _instanceIntersects = [];\n\nconst _mesh = /*@__PURE__*/ new Mesh();\n\nclass InstancedMesh extends Mesh {\n\n\tconstructor( geometry, material, count ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.instanceMatrix = new InstancedBufferAttribute( new Float32Array( count * 16 ), 16 );\n\t\tthis.instanceColor = null;\n\n\t\tthis.count = count;\n\n\t\tthis.frustumCulled = false;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\n\t\tif ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone();\n\n\t\tthis.count = source.count;\n\n\t\treturn this;\n\n\t}\n\n\tgetColorAt( index, color ) {\n\n\t\tcolor.fromArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tgetMatrixAt( index, matrix ) {\n\n\t\tmatrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst raycastTimes = this.count;\n\n\t\t_mesh.geometry = this.geometry;\n\t\t_mesh.material = this.material;\n\n\t\tif ( _mesh.material === undefined ) return;\n\n\t\tfor ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {\n\n\t\t\t// calculate the world matrix for each instance\n\n\t\t\tthis.getMatrixAt( instanceId, _instanceLocalMatrix );\n\n\t\t\t_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );\n\n\t\t\t// the mesh represents this single instance\n\n\t\t\t_mesh.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t_mesh.raycast( raycaster, _instanceIntersects );\n\n\t\t\t// process the result of raycast\n\n\t\t\tfor ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {\n\n\t\t\t\tconst intersect = _instanceIntersects[ i ];\n\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_instanceIntersects.length = 0;\n\n\t\t}\n\n\t}\n\n\tsetColorAt( index, color ) {\n\n\t\tif ( this.instanceColor === null ) {\n\n\t\t\tthis.instanceColor = new InstancedBufferAttribute( new Float32Array( this.instanceMatrix.count * 3 ), 3 );\n\n\t\t}\n\n\t\tcolor.toArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tsetMatrixAt( index, matrix ) {\n\n\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nInstancedMesh.prototype.isInstancedMesh = true;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * linewidth: ,\n * linecap: \"round\",\n * linejoin: \"round\"\n * }\n */\n\nclass LineBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.linewidth = 1;\n\t\tthis.linecap = 'round';\n\t\tthis.linejoin = 'round';\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.linewidth = source.linewidth;\n\t\tthis.linecap = source.linecap;\n\t\tthis.linejoin = source.linejoin;\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineBasicMaterial.prototype.isLineBasicMaterial = true;\n\nconst _start$1 = /*@__PURE__*/ new Vector3();\nconst _end$1 = /*@__PURE__*/ new Vector3();\nconst _inverseMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _ray$1 = /*@__PURE__*/ new Ray();\nconst _sphere$1 = /*@__PURE__*/ new Sphere();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t_start$1.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t_end$1.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += _start$1.distanceTo( _end$1 );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$1.copy( geometry.boundingSphere );\n\t\t_sphere$1.applyMatrix4( matrixWorld );\n\t\t_sphere$1.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$1 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$1.copy( matrixWorld ).invert();\n\t\t_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst vStart = new Vector3();\n\t\tconst vEnd = new Vector3();\n\t\tconst interSegment = new Vector3();\n\t\tconst interRay = new Vector3();\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\tconst b = index.getX( i + 1 );\n\n\t\t\t\t\tvStart.fromBufferAttribute( positionAttribute, a );\n\t\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, b );\n\n\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\t\tvStart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nLine.prototype.isLine = true;\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [];\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineSegments.prototype.isLineSegments = true;\n\nclass LineLoop extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineLoop';\n\n\t}\n\n}\n\nLineLoop.prototype.isLineLoop = true;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n * alphaMap: new THREE.Texture( ),\n *\n * size: ,\n * sizeAttenuation: \n *\n * }\n */\n\nclass PointsMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PointsMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.size = 1;\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.size = source.size;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\treturn this;\n\n\t}\n\n}\n\nPointsMaterial.prototype.isPointsMaterial = true;\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position$2 = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\n\t\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, a );\n\n\t\t\t\t\ttestPoint( _position$2, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n\n\t\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\ttestPoint( _position$2, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nPoints.prototype.isPoints = true;\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nclass VideoTexture extends Texture {\n\n\tconstructor( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.format = format !== undefined ? format : RGBFormat;\n\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : LinearFilter;\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tconst scope = this;\n\n\t\tfunction updateVideo() {\n\n\t\t\tscope.needsUpdate = true;\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t\tif ( 'requestVideoFrameCallback' in video ) {\n\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.image ).copy( this );\n\n\t}\n\n\tupdate() {\n\n\t\tconst video = this.image;\n\t\tconst hasVideoFrameCallback = 'requestVideoFrameCallback' in video;\n\n\t\tif ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n}\n\nVideoTexture.prototype.isVideoTexture = true;\n\nclass CompressedTexture extends Texture {\n\n\tconstructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.image = { width: width, height: height };\n\t\tthis.mipmaps = mipmaps;\n\n\t\t// no flipping for cube textures\n\t\t// (also flipping doesn't work for compressed textures )\n\n\t\tthis.flipY = false;\n\n\t\t// can't generate mipmaps for compressed textures\n\t\t// mips must be embedded in DDS files\n\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n}\n\nCompressedTexture.prototype.isCompressedTexture = true;\n\nclass CanvasTexture extends Texture {\n\n\tconstructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nCanvasTexture.prototype.isCanvasTexture = true;\n\nclass DepthTexture extends Texture {\n\n\tconstructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {\n\n\t\tformat = format !== undefined ? format : DepthFormat;\n\n\t\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t\t}\n\n\t\tif ( type === undefined && format === DepthFormat ) type = UnsignedShortType;\n\t\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.image = { width: width, height: height };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.flipY = false;\n\t\tthis.generateMipmaps\t= false;\n\n\t}\n\n\n}\n\nDepthTexture.prototype.isDepthTexture = true;\n\nclass CircleGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, segments = 8, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CircleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tsegments = Math.max( 3, segments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// center point\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tnormals.push( 0, 0, 1 );\n\t\tuvs.push( 0.5, 0.5 );\n\n\t\tfor ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\tconst segment = thetaStart + s / segments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uvs\n\n\t\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tindices.push( i, i + 1, 0 );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CircleGeometry( data.radius, data.segments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass CylinderGeometry extends BufferGeometry {\n\n\tconstructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\t\tthis.type = 'CylinderGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tconst scope = this;\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet index = 0;\n\t\tconst indexArray = [];\n\t\tconst halfHeight = height / 2;\n\t\tlet groupStart = 0;\n\n\t\t// generate geometry\n\n\t\tgenerateTorso();\n\n\t\tif ( openEnded === false ) {\n\n\t\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction generateTorso() {\n\n\t\t\tconst normal = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\t// this will be used to calculate the normal\n\t\t\tconst slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\tconst indexRow = [];\n\n\t\t\t\tconst v = y / heightSegments;\n\n\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\tconst radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tconst u = x / radialSegments;\n\n\t\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\t\tconst cosTheta = Math.cos( theta );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t\t}\n\n\t\t\t\t// now save vertices of the row in our index array\n\n\t\t\t\tindexArray.push( indexRow );\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\t\tconst a = indexArray[ y ][ x ];\n\t\t\t\t\tconst b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\tconst c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\tconst d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// update group counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t\tfunction generateCap( top ) {\n\n\t\t\t// save the index of the first center vertex\n\t\t\tconst centerIndexStart = index;\n\n\t\t\tconst uv = new Vector2();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\tconst sign = ( top === true ) ? 1 : - 1;\n\n\t\t\t// first we generate the center vertex data of the cap.\n\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\tfor ( let x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// save the index of the last center vertex\n\t\t\tconst centerIndexEnd = index;\n\n\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tconst u = x / radialSegments;\n\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\tconst cosTheta = Math.cos( theta );\n\t\t\t\tconst sinTheta = Math.sin( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = halfHeight * sign;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tconst c = centerIndexStart + x;\n\t\t\t\tconst i = centerIndexEnd + x;\n\n\t\t\t\tif ( top === true ) {\n\n\t\t\t\t\t// face top\n\n\t\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// face bottom\n\n\t\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t\t}\n\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CylinderGeometry( data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass ConeGeometry extends CylinderGeometry {\n\n\tconstructor( radius = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new ConeGeometry( data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass PolyhedronGeometry extends BufferGeometry {\n\n\tconstructor( vertices = [], indices = [], radius = 1, detail = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\t// default buffer data\n\n\t\tconst vertexBuffer = [];\n\t\tconst uvBuffer = [];\n\n\t\t// the subdivision creates the vertex buffer data\n\n\t\tsubdivide( detail );\n\n\t\t// all vertices should lie on a conceptual sphere with a given radius\n\n\t\tapplyRadius( radius );\n\n\t\t// finally, create the uv data\n\n\t\tgenerateUVs();\n\n\t\t// build non-indexed geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\t\tif ( detail === 0 ) {\n\n\t\t\tthis.computeVertexNormals(); // flat normals\n\n\t\t} else {\n\n\t\t\tthis.normalizeNormals(); // smooth normals\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction subdivide( detail ) {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\t// iterate over all faces and apply a subdivison with the given detail value\n\n\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t// get the vertices of the face\n\n\t\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t\t// perform subdivision\n\n\t\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\t\tconst cols = detail + 1;\n\n\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\tconst v = [];\n\n\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\tfor ( let i = 0; i <= cols; i ++ ) {\n\n\t\t\t\tv[ i ] = [];\n\n\t\t\t\tconst aj = a.clone().lerp( c, i / cols );\n\t\t\t\tconst bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\tconst rows = cols - i;\n\n\t\t\t\tfor ( let j = 0; j <= rows; j ++ ) {\n\n\t\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// construct all of the faces\n\n\t\t\tfor ( let i = 0; i < cols; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\tconst k = Math.floor( j / 2 );\n\n\t\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction applyRadius( radius ) {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tconst u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\tconst v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t\t}\n\n\t\t\tcorrectUVs();\n\n\t\t\tcorrectSeam();\n\n\t\t}\n\n\t\tfunction correctSeam() {\n\n\t\t\t// handle case when face straddles the seam, see #3269\n\n\t\t\tfor ( let i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t// uv data of a single face\n\n\t\t\t\tconst x0 = uvBuffer[ i + 0 ];\n\t\t\t\tconst x1 = uvBuffer[ i + 2 ];\n\t\t\t\tconst x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\tconst max = Math.max( x0, x1, x2 );\n\t\t\t\tconst min = Math.min( x0, x1, x2 );\n\n\t\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushVertex( vertex ) {\n\n\t\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tfunction getVertexByIndex( index, vertex ) {\n\n\t\t\tconst stride = index * 3;\n\n\t\t\tvertex.x = vertices[ stride + 0 ];\n\t\t\tvertex.y = vertices[ stride + 1 ];\n\t\t\tvertex.z = vertices[ stride + 2 ];\n\n\t\t}\n\n\t\tfunction correctUVs() {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\tconst centroid = new Vector3();\n\n\t\t\tconst uvA = new Vector2();\n\t\t\tconst uvB = new Vector2();\n\t\t\tconst uvC = new Vector2();\n\n\t\t\tfor ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\t\tconst azi = azimuth( centroid );\n\n\t\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t\t}\n\n\t\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\t\tfunction azimuth( vector ) {\n\n\t\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t\t}\n\n\n\t\t// Angle above the XZ plane.\n\n\t\tfunction inclination( vector ) {\n\n\t\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t\t}\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new PolyhedronGeometry( data.vertices, data.indices, data.radius, data.details );\n\n\t}\n\n}\n\nclass DodecahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\tconst r = 1 / t;\n\n\t\tconst vertices = [\n\n\t\t\t// (±1, ±1, ±1)\n\t\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t\t// (0, ±1/φ, ±φ)\n\t\t\t0, - r, - t, 0, - r, t,\n\t\t\t0, r, - t, 0, r, t,\n\n\t\t\t// (±1/φ, ±φ, 0)\n\t\t\t- r, - t, 0, - r, t, 0,\n\t\t\tr, - t, 0, r, t, 0,\n\n\t\t\t// (±φ, 0, ±1/φ)\n\t\t\t- t, 0, - r, t, 0, - r,\n\t\t\t- t, 0, r, t, 0, r\n\t\t];\n\n\t\tconst indices = [\n\t\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'DodecahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new DodecahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nconst _v0 = new Vector3();\nconst _v1$1 = new Vector3();\nconst _normal = new Vector3();\nconst _triangle = new Triangle();\n\nclass EdgesGeometry extends BufferGeometry {\n\n\tconstructor( geometry = null, thresholdAngle = 1 ) {\n\n\t\tsuper();\n\t\tthis.type = 'EdgesGeometry';\n\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry,\n\t\t\tthresholdAngle: thresholdAngle\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\tconst precisionPoints = 4;\n\t\t\tconst precision = Math.pow( 10, precisionPoints );\n\t\t\tconst thresholdDot = Math.cos( DEG2RAD * thresholdAngle );\n\n\t\t\tconst indexAttr = geometry.getIndex();\n\t\t\tconst positionAttr = geometry.getAttribute( 'position' );\n\t\t\tconst indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\n\t\t\tconst indexArr = [ 0, 0, 0 ];\n\t\t\tconst vertKeys = [ 'a', 'b', 'c' ];\n\t\t\tconst hashes = new Array( 3 );\n\n\t\t\tconst edgeData = {};\n\t\t\tconst vertices = [];\n\t\t\tfor ( let i = 0; i < indexCount; i += 3 ) {\n\n\t\t\t\tif ( indexAttr ) {\n\n\t\t\t\t\tindexArr[ 0 ] = indexAttr.getX( i );\n\t\t\t\t\tindexArr[ 1 ] = indexAttr.getX( i + 1 );\n\t\t\t\t\tindexArr[ 2 ] = indexAttr.getX( i + 2 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindexArr[ 0 ] = i;\n\t\t\t\t\tindexArr[ 1 ] = i + 1;\n\t\t\t\t\tindexArr[ 2 ] = i + 2;\n\n\t\t\t\t}\n\n\t\t\t\tconst { a, b, c } = _triangle;\n\t\t\t\ta.fromBufferAttribute( positionAttr, indexArr[ 0 ] );\n\t\t\t\tb.fromBufferAttribute( positionAttr, indexArr[ 1 ] );\n\t\t\t\tc.fromBufferAttribute( positionAttr, indexArr[ 2 ] );\n\t\t\t\t_triangle.getNormal( _normal );\n\n\t\t\t\t// create hashes for the edge from the vertices\n\t\t\t\thashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;\n\t\t\t\thashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;\n\t\t\t\thashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;\n\n\t\t\t\t// skip degenerate triangles\n\t\t\t\tif ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// iterate over every edge\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t// get the first and next vertex making up the edge\n\t\t\t\t\tconst jNext = ( j + 1 ) % 3;\n\t\t\t\t\tconst vecHash0 = hashes[ j ];\n\t\t\t\t\tconst vecHash1 = hashes[ jNext ];\n\t\t\t\t\tconst v0 = _triangle[ vertKeys[ j ] ];\n\t\t\t\t\tconst v1 = _triangle[ vertKeys[ jNext ] ];\n\n\t\t\t\t\tconst hash = `${ vecHash0 }_${ vecHash1 }`;\n\t\t\t\t\tconst reverseHash = `${ vecHash1 }_${ vecHash0 }`;\n\n\t\t\t\t\tif ( reverseHash in edgeData && edgeData[ reverseHash ] ) {\n\n\t\t\t\t\t\t// if we found a sibling edge add it into the vertex array if\n\t\t\t\t\t\t// it meets the angle threshold and delete the edge from the map.\n\t\t\t\t\t\tif ( _normal.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {\n\n\t\t\t\t\t\t\tvertices.push( v0.x, v0.y, v0.z );\n\t\t\t\t\t\t\tvertices.push( v1.x, v1.y, v1.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tedgeData[ reverseHash ] = null;\n\n\t\t\t\t\t} else if ( ! ( hash in edgeData ) ) {\n\n\t\t\t\t\t\t// if we've already got an edge here then skip adding a new one\n\t\t\t\t\t\tedgeData[ hash ] = {\n\n\t\t\t\t\t\t\tindex0: indexArr[ j ],\n\t\t\t\t\t\t\tindex1: indexArr[ jNext ],\n\t\t\t\t\t\t\tnormal: _normal.clone(),\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// iterate over all remaining, unmatched edges and add them to the vertex array\n\t\t\tfor ( const key in edgeData ) {\n\n\t\t\t\tif ( edgeData[ key ] ) {\n\n\t\t\t\t\tconst { index0, index1 } = edgeData[ key ];\n\t\t\t\t\t_v0.fromBufferAttribute( positionAttr, index0 );\n\t\t\t\t\t_v1$1.fromBufferAttribute( positionAttr, index1 );\n\n\t\t\t\t\tvertices.push( _v0.x, _v0.y, _v0.z );\n\t\t\t\t\tvertices.push( _v1$1.x, _v1$1.y, _v1$1.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Extensible curve object.\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\nclass Curve {\n\n\tconstructor() {\n\n\t\tthis.type = 'Curve';\n\n\t\tthis.arcLengthDivisions = 200;\n\n\t}\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t}\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t}\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get total curve arc length\n\n\tgetLength() {\n\n\t\tconst lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t}\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths( divisions = this.arcLengthDivisions ) {\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tconst cache = [];\n\t\tlet current, last = this.getPoint( 0 );\n\t\tlet sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( let p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t}\n\n\tupdateArcLengths() {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t}\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping( u, distance ) {\n\n\t\tconst arcLengths = this.getLengths();\n\n\t\tlet i = 0;\n\t\tconst il = arcLengths.length;\n\n\t\tlet targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tlet low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tconst lengthBefore = arcLengths[ i ];\n\t\tconst lengthAfter = arcLengths[ i + 1 ];\n\n\t\tconst segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tconst segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tconst t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t}\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent( t, optionalTarget ) {\n\n\t\tconst delta = 0.0001;\n\t\tlet t1 = t - delta;\n\t\tlet t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tconst pt1 = this.getPoint( t1 );\n\t\tconst pt2 = this.getPoint( t2 );\n\n\t\tconst tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() );\n\n\t\ttangent.copy( pt2 ).sub( pt1 ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t, optionalTarget );\n\n\t}\n\n\tcomputeFrenetFrames( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tconst normal = new Vector3();\n\n\t\tconst tangents = [];\n\t\tconst normals = [];\n\t\tconst binormals = [];\n\n\t\tconst vec = new Vector3();\n\t\tconst mat = new Matrix4();\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst u = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u, new Vector3() );\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tlet min = Number.MAX_VALUE;\n\t\tconst tx = Math.abs( tangents[ 0 ].x );\n\t\tconst ty = Math.abs( tangents[ 0 ].y );\n\t\tconst tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\tconst theta = Math.acos( clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\tlet theta = Math.acos( clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass EllipseCurve extends Curve {\n\n\tconstructor( aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EllipseCurve';\n\n\t\tthis.aX = aX;\n\t\tthis.aY = aY;\n\n\t\tthis.xRadius = xRadius;\n\t\tthis.yRadius = yRadius;\n\n\t\tthis.aStartAngle = aStartAngle;\n\t\tthis.aEndAngle = aEndAngle;\n\n\t\tthis.aClockwise = aClockwise;\n\n\t\tthis.aRotation = aRotation;\n\n\t}\n\n\tgetPoint( t, optionalTarget ) {\n\n\t\tconst point = optionalTarget || new Vector2();\n\n\t\tconst twoPi = Math.PI * 2;\n\t\tlet deltaAngle = this.aEndAngle - this.aStartAngle;\n\t\tconst samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t\t// ensures that deltaAngle is 0 .. 2 PI\n\t\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\t\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\t\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\t\tif ( samePoints ) {\n\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\t\tdeltaAngle = - twoPi;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst angle = this.aStartAngle + t * deltaAngle;\n\t\tlet x = this.aX + this.xRadius * Math.cos( angle );\n\t\tlet y = this.aY + this.yRadius * Math.sin( angle );\n\n\t\tif ( this.aRotation !== 0 ) {\n\n\t\t\tconst cos = Math.cos( this.aRotation );\n\t\t\tconst sin = Math.sin( this.aRotation );\n\n\t\t\tconst tx = x - this.aX;\n\t\t\tconst ty = y - this.aY;\n\n\t\t\t// Rotate the point about the center of the ellipse.\n\t\t\tx = tx * cos - ty * sin + this.aX;\n\t\t\ty = tx * sin + ty * cos + this.aY;\n\n\t\t}\n\n\t\treturn point.set( x, y );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.aX = source.aX;\n\t\tthis.aY = source.aY;\n\n\t\tthis.xRadius = source.xRadius;\n\t\tthis.yRadius = source.yRadius;\n\n\t\tthis.aStartAngle = source.aStartAngle;\n\t\tthis.aEndAngle = source.aEndAngle;\n\n\t\tthis.aClockwise = source.aClockwise;\n\n\t\tthis.aRotation = source.aRotation;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.aX = this.aX;\n\t\tdata.aY = this.aY;\n\n\t\tdata.xRadius = this.xRadius;\n\t\tdata.yRadius = this.yRadius;\n\n\t\tdata.aStartAngle = this.aStartAngle;\n\t\tdata.aEndAngle = this.aEndAngle;\n\n\t\tdata.aClockwise = this.aClockwise;\n\n\t\tdata.aRotation = this.aRotation;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.aX = json.aX;\n\t\tthis.aY = json.aY;\n\n\t\tthis.xRadius = json.xRadius;\n\t\tthis.yRadius = json.yRadius;\n\n\t\tthis.aStartAngle = json.aStartAngle;\n\t\tthis.aEndAngle = json.aEndAngle;\n\n\t\tthis.aClockwise = json.aClockwise;\n\n\t\tthis.aRotation = json.aRotation;\n\n\t\treturn this;\n\n\t}\n\n}\n\nEllipseCurve.prototype.isEllipseCurve = true;\n\nclass ArcCurve extends EllipseCurve {\n\n\tconstructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tsuper( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\tthis.type = 'ArcCurve';\n\n\t}\n\n}\n\nArcCurve.prototype.isArcCurve = true;\n\n/**\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tlet c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t * p(0) = x0, p(1) = x1\n\t * and\n\t * p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tlet t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tlet t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tconst t2 = t * t;\n\t\t\tconst t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nconst tmp = new Vector3();\nconst px = new CubicPoly(), py = new CubicPoly(), pz = new CubicPoly();\n\nclass CatmullRomCurve3 extends Curve {\n\n\tconstructor( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CatmullRomCurve3';\n\n\t\tthis.points = points;\n\t\tthis.closed = closed;\n\t\tthis.curveType = curveType;\n\t\tthis.tension = tension;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst l = points.length;\n\n\t\tconst p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\t\tlet intPoint = Math.floor( p );\n\t\tlet weight = p - intPoint;\n\n\t\tif ( this.closed ) {\n\n\t\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\t\tintPoint = l - 2;\n\t\t\tweight = 1;\n\n\t\t}\n\n\t\tlet p0, p3; // 4 points (p1 & p2 defined below)\n\n\t\tif ( this.closed || intPoint > 0 ) {\n\n\t\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate first point\n\t\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\t\tp0 = tmp;\n\n\t\t}\n\n\t\tconst p1 = points[ intPoint % l ];\n\t\tconst p2 = points[ ( intPoint + 1 ) % l ];\n\n\t\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate last point\n\t\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\t\tp3 = tmp;\n\n\t\t}\n\n\t\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t\t// init Centripetal / Chordal Catmull-Rom\n\t\t\tconst pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\t\tlet dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\t\tlet dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\t\tlet dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t\t// safety check for repeated points\n\t\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t\t}\n\n\t\tpoint.set(\n\t\t\tpx.calc( weight ),\n\t\t\tpy.calc( weight ),\n\t\t\tpz.calc( weight )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\tthis.closed = source.closed;\n\t\tthis.curveType = source.curveType;\n\t\tthis.tension = source.tension;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\tdata.closed = this.closed;\n\t\tdata.curveType = this.curveType;\n\t\tdata.tension = this.tension;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t\t}\n\n\t\tthis.closed = json.closed;\n\t\tthis.curveType = json.curveType;\n\t\tthis.tension = json.tension;\n\n\t\treturn this;\n\n\t}\n\n}\n\nCatmullRomCurve3.prototype.isCatmullRomCurve3 = true;\n\n/**\n * Bezier Curves formulas obtained from\n * http://en.wikipedia.org/wiki/Bézier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tconst v0 = ( p2 - p0 ) * 0.5;\n\tconst v1 = ( p3 - p1 ) * 0.5;\n\tconst t2 = t * t;\n\tconst t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tconst k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\nclass CubicBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubicBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nCubicBezierCurve.prototype.isCubicBezierCurve = true;\n\nclass CubicBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubicBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nCubicBezierCurve3.prototype.isCubicBezierCurve3 = true;\n\nclass LineCurve extends Curve {\n\n\tconstructor( v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineCurve';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget ) {\n\n\t\tconst tangent = optionalTarget || new Vector2();\n\n\t\ttangent.copy( this.v2 ).sub( this.v1 ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineCurve.prototype.isLineCurve = true;\n\nclass LineCurve3 extends Curve {\n\n\tconstructor( v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineCurve3';\n\t\tthis.isLineCurve3 = true;\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass QuadraticBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'QuadraticBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nQuadraticBezierCurve.prototype.isQuadraticBezierCurve = true;\n\nclass QuadraticBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'QuadraticBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nQuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true;\n\nclass SplineCurve extends Curve {\n\n\tconstructor( points = [] ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'SplineCurve';\n\n\t\tthis.points = points;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst p = ( points.length - 1 ) * t;\n\n\t\tconst intPoint = Math.floor( p );\n\t\tconst weight = p - intPoint;\n\n\t\tconst p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\t\tconst p1 = points[ intPoint ];\n\t\tconst p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\t\tconst p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\t\tpoint.set(\n\t\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nSplineCurve.prototype.isSplineCurve = true;\n\nvar Curves = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n * curves, but retains the api of a curve\n **************************************************************/\n\nclass CurvePath extends Curve {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'CurvePath';\n\n\t\tthis.curves = [];\n\t\tthis.autoClose = false; // Automatically closes the path\n\n\t}\n\n\tadd( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t}\n\n\tclosePath() {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tconst startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tconst endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tthis.curves.push( new LineCurve( endPoint, startPoint ) );\n\n\t\t}\n\n\t}\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint( t, optionalTarget ) {\n\n\t\tconst d = t * this.getLength();\n\t\tconst curveLengths = this.getCurveLengths();\n\t\tlet i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tconst diff = curveLengths[ i ] - d;\n\t\t\t\tconst curve = this.curves[ i ];\n\n\t\t\t\tconst segmentLength = curve.getLength();\n\t\t\t\tconst u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u, optionalTarget );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Path extends CurvePath {\n\n\tconstructor( points ) {\n\n\t\tsuper();\n\t\tthis.type = 'Path';\n\n\t\tthis.currentPoint = new Vector2();\n\n\t\tif ( points ) {\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t}\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( let i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tconst curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tconst curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tconst curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts /*Array of Vector*/ ) {\n\n\t\tconst npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tconst curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\treturn this;\n\n\t}\n\n\tarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tabsarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\treturn this;\n\n\t}\n\n\tabsellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tconst firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tconst lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Shape extends Path {\n\n\tconstructor( points ) {\n\n\t\tsuper( points );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.type = 'Shape';\n\n\t\tthis.holes = [];\n\n\t}\n\n\tgetPointsHoles( divisions ) {\n\n\t\tconst holesPts = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t}\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Port from https://github.com/mapbox/earcut (v2.2.2)\n */\n\nconst Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim = 2 ) {\n\n\t\tconst hasHoles = holeIndices && holeIndices.length;\n\t\tconst outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length;\n\t\tlet outerNode = linkedList( data, 0, outerLen, dim, true );\n\t\tconst triangles = [];\n\n\t\tif ( ! outerNode || outerNode.next === outerNode.prev ) return triangles;\n\n\t\tlet minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( let i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 1 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tlet i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tlet p = start,\n\t\tagain;\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tlet stop = ear,\n\t\tprev, next;\n\n\t// iterate through ears, slicing them one by one\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim );\n\t\t\ttriangles.push( ear.i / dim );\n\t\t\ttriangles.push( next.i / dim );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertex leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( filterPoints( ear ), triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar( ear ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tlet p = ear.next.next;\n\n\twhile ( p !== ear.prev ) {\n\n\t\tif ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ),\n\t\tminTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ),\n\t\tmaxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ),\n\t\tmaxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y );\n\n\t// z-order range for the current triangle bbox;\n\tconst minZ = zOrder( minTX, minTY, minX, minY, invSize ),\n\t\tmaxZ = zOrder( maxTX, maxTY, minX, minY, invSize );\n\n\tlet p = ear.prevZ,\n\t\tn = ear.nextZ;\n\n\t// look for points inside the triangle in both directions\n\twhile ( p && p.z >= minZ && n && n.z <= maxZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\t// look for remaining points in decreasing z-order\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t}\n\n\t// look for remaining points in increasing z-order\n\twhile ( n && n.z <= maxZ ) {\n\n\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tconst a = p.prev,\n\t\t\tb = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim );\n\t\t\ttriangles.push( p.i / dim );\n\t\t\ttriangles.push( b.i / dim );\n\n\t\t\t// remove two nodes involved\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn filterPoints( p );\n\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\tlet a = start;\n\tdo {\n\n\t\tlet b = a.next.next;\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\t\t\t\tlet c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tconst queue = [];\n\tlet i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\teliminateHole( queue[ i ], outerNode );\n\t\touterNode = filterPoints( outerNode, outerNode.next );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole( hole, outerNode ) {\n\n\touterNode = findHoleBridge( hole, outerNode );\n\tif ( outerNode ) {\n\n\t\tconst b = splitPolygon( outerNode, hole );\n\n\t\t// filter collinear points around the cuts\n\t\tfilterPoints( outerNode, outerNode.next );\n\t\tfilterPoints( b, b.next );\n\n\t}\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge( hole, outerNode ) {\n\n\tlet p = outerNode;\n\tconst hx = hole.x;\n\tconst hy = hole.y;\n\tlet qx = - Infinity, m;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tconst x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\t\t\t\tif ( x === hx ) {\n\n\t\t\t\t\tif ( hy === p.y ) return p;\n\t\t\t\t\tif ( hy === p.next.y ) return p.next;\n\n\t\t\t\t}\n\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\tif ( hx === qx ) return m; // hole touches outer segment; pick leftmost endpoint\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tconst stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y;\n\tlet tanMin = Infinity, tan;\n\n\tp = m;\n\n\tdo {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== stop );\n\n\treturn m;\n\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector( m, p ) {\n\n\treturn area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0;\n\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tif ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked( list ) {\n\n\tlet i, p, q, e, tail, numMerges, pSize, qSize,\n\t\tinSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\tx = 32767 * ( x - minX ) * invSize;\n\ty = 32767 * ( y - minY ) * invSize;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost( start ) {\n\n\tlet p = start,\n\t\tleftmost = start;\n\tdo {\n\n\t\tif ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 &&\n\t\t\t( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 &&\n\t\t\t( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0;\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges\n\t\t( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible\n\t\t( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors\n\t\tequals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case\n\n}\n\n// signed area of a triangle\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tconst o1 = sign( area( p1, q1, p2 ) );\n\tconst o2 = sign( area( p1, q1, q2 ) );\n\tconst o3 = sign( area( p2, q2, p1 ) );\n\tconst o4 = sign( area( p2, q2, q1 ) );\n\n\tif ( o1 !== o2 && o3 !== o4 ) return true; // general case\n\n\tif ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n\tif ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n\tif ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n\tif ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n\treturn false;\n\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment( p, q, r ) {\n\n\treturn q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y );\n\n}\n\nfunction sign( num ) {\n\n\treturn num > 0 ? 1 : num < 0 ? - 1 : 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon( a, b ) {\n\n\tlet p = a;\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\t\tintersects( p, p.next, a, b ) ) return true;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside( a, b ) {\n\n\tlet p = a,\n\t\tinside = false;\n\tconst px = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) )\n\t\t\tinside = ! inside;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon( a, b ) {\n\n\tconst a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode( i, x, y, last ) {\n\n\tconst p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertex index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertex nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = null;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tlet sum = 0;\n\tfor ( let i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\nclass ShapeUtils {\n\n\t// calculate area of the contour polygon\n\n\tstatic area( contour ) {\n\n\t\tconst n = contour.length;\n\t\tlet a = 0.0;\n\n\t\tfor ( let p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t}\n\n\tstatic isClockWise( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t}\n\n\tstatic triangulateShape( contour, holes ) {\n\n\t\tconst vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tconst holeIndices = []; // array of hole indices\n\t\tconst faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tlet holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( let i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tconst triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( let i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n}\n\nfunction removeDupEndPts( points ) {\n\n\tconst l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( let i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline (including bevelOffset) is bevel\n * bevelOffset: , // how far from shape outline does bevel start\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // object that provides UV generator functions\n *\n * }\n */\n\nclass ExtrudeGeometry extends BufferGeometry {\n\n\tconstructor( shapes = new Shape( [ new Vector2( 0.5, 0.5 ), new Vector2( - 0.5, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\tconst scope = this;\n\n\t\tconst verticesArray = [];\n\t\tconst uvArray = [];\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\t\t\taddShape( shape );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\t\tthis.computeVertexNormals();\n\n\t\t// functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst placeholder = [];\n\n\t\t\t// options\n\n\t\t\tconst curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\tconst steps = options.steps !== undefined ? options.steps : 1;\n\t\t\tlet depth = options.depth !== undefined ? options.depth : 1;\n\n\t\t\tlet bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\tlet bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 0.2;\n\t\t\tlet bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 0.1;\n\t\t\tlet bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\t\tlet bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\t\tconst extrudePath = options.extrudePath;\n\n\t\t\tconst uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t\t// deprecated options\n\n\t\t\tif ( options.amount !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' );\n\t\t\t\tdepth = options.amount;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet extrudePts, extrudeByPath = false;\n\t\t\tlet splineTube, binormal, normal, position2;\n\n\t\t\tif ( extrudePath ) {\n\n\t\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\t\textrudeByPath = true;\n\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t\t// SETUP TNB variables\n\n\t\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\tbinormal = new Vector3();\n\t\t\t\tnormal = new Vector3();\n\t\t\t\tposition2 = new Vector3();\n\n\t\t\t}\n\n\t\t\t// Safeguards if bevels are not enabled\n\n\t\t\tif ( ! bevelEnabled ) {\n\n\t\t\t\tbevelSegments = 0;\n\t\t\t\tbevelThickness = 0;\n\t\t\t\tbevelSize = 0;\n\t\t\t\tbevelOffset = 0;\n\n\t\t\t}\n\n\t\t\t// Variables initialization\n\n\t\t\tconst shapePoints = shape.extractPoints( curveSegments );\n\n\t\t\tlet vertices = shapePoints.shape;\n\t\t\tconst holes = shapePoints.holes;\n\n\t\t\tconst reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\t\tif ( reverse ) {\n\n\t\t\t\tvertices = vertices.reverse();\n\n\t\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t\t/* Vertices */\n\n\t\t\tconst contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\tvertices = vertices.concat( ahole );\n\n\t\t\t}\n\n\n\t\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\t\tif ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' );\n\n\t\t\t\treturn vec.clone().multiplyScalar( size ).add( pt );\n\n\t\t\t}\n\n\t\t\tconst vlen = vertices.length, flen = faces.length;\n\n\n\t\t\t// Find directions for point movement\n\n\n\t\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t//\n\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\t\tlet v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\tconst v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\tconst v_next_x = inNext.x - inPt.x,\n\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\t\tconst v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t\t// check for collinear edges\n\t\t\t\tconst collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not collinear\n\n\t\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\t\tconst v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\t\tconst v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\t\tconst ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\t\tconst ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\t\tconst ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\t\tconst ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\t\tconst sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t// but prevent crazy spikes\n\t\t\t\t\tconst v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\t\tlet direction_eq = false; // assumes: opposite\n\n\t\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t\t}\n\n\n\t\t\tconst contourMovements = [];\n\n\t\t\tfor ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t\t}\n\n\t\t\tconst holesMovements = [];\n\t\t\tlet oneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\toneHoleMovements = [];\n\n\t\t\t\tfor ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t\t}\n\n\t\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t\t}\n\n\n\t\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\t\tfor ( let b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst bs = bevelSize + bevelOffset;\n\n\t\t\t// Back facing vertices\n\n\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Add stepped vertices...\n\t\t\t// Including front facing vertices\n\n\t\t\tfor ( let s = 1; s <= steps; s ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// Add bevel segments planes\n\n\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\t\tfor ( let b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t/* Faces */\n\n\t\t\t// Top and bottom faces\n\n\t\t\tbuildLidFaces();\n\n\t\t\t// Sides faces\n\n\t\t\tbuildSideFaces();\n\n\n\t\t\t///// Internal functions\n\n\t\t\tfunction buildLidFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\n\t\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\t\tlet layer = 0; // steps + 1\n\t\t\t\t\tlet offset = vlen * layer;\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t\t}\n\n\t\t\t// Create faces for the z-sides of the shape\n\n\t\t\tfunction buildSideFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\t\t\t\tlet layeroffset = 0;\n\t\t\t\tsidewalls( contour, layeroffset );\n\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t\t//, true\n\t\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t\t}\n\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t\t}\n\n\t\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\t\tlet i = contour.length;\n\n\t\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\t\tconst j = i;\n\t\t\t\t\tlet k = i - 1;\n\t\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\tfor ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {\n\n\t\t\t\t\t\tconst slen1 = vlen * s;\n\t\t\t\t\t\tconst slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\t\tconst a = layeroffset + j + slen1,\n\t\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction v( x, y, z ) {\n\n\t\t\t\tplaceholder.push( x );\n\t\t\t\tplaceholder.push( y );\n\t\t\t\tplaceholder.push( z );\n\n\t\t\t}\n\n\n\t\t\tfunction f3( a, b, c ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\n\t\t\t}\n\n\t\t\tfunction f4( a, b, c, d ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( d );\n\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\t\t\t\taddVertex( d );\n\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t}\n\n\t\t\tfunction addVertex( index ) {\n\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t\t}\n\n\n\t\t\tfunction addUV( vector2 ) {\n\n\t\t\t\tuvArray.push( vector2.x );\n\t\t\t\tuvArray.push( vector2.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON$1( shapes, options, data );\n\n\t}\n\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\tconst extrudePath = data.options.extrudePath;\n\n\t\tif ( extrudePath !== undefined ) {\n\n\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t}\n\n\t\treturn new ExtrudeGeometry( geometryShapes, data.options );\n\n\t}\n\n}\n\nconst WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst a_z = vertices[ indexA * 3 + 2 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst b_z = vertices[ indexB * 3 + 2 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\t\tconst c_z = vertices[ indexC * 3 + 2 ];\n\t\tconst d_x = vertices[ indexD * 3 ];\n\t\tconst d_y = vertices[ indexD * 3 + 1 ];\n\t\tconst d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < Math.abs( a_x - b_x ) ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n\n};\n\nfunction toJSON$1( shapes, options, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\nclass IcosahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\tconst vertices = [\n\t\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t\t0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t\tt, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'IcosahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new IcosahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass LatheGeometry extends BufferGeometry {\n\n\tconstructor( points = [ new Vector2( 0, 0.5 ), new Vector2( 0.5, 0 ), new Vector2( 0, - 0.5 ) ], segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tsegments = Math.floor( segments );\n\n\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\tphiLength = clamp( phiLength, 0, Math.PI * 2 );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst inverseSegments = 1.0 / segments;\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices and uvs\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\tconst sin = Math.sin( phi );\n\t\t\tconst cos = Math.cos( phi );\n\n\t\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\t\tvertex.y = points[ j ].y;\n\t\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = i / segments;\n\t\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 0; i < segments; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\tconst base = j + i * points.length;\n\n\t\t\t\tconst a = base;\n\t\t\t\tconst b = base + points.length;\n\t\t\t\tconst c = base + points.length + 1;\n\t\t\t\tconst d = base + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// generate normals\n\n\t\tthis.computeVertexNormals();\n\n\t\t// if the geometry is closed, we need to average the normals along the seam.\n\t\t// because the corresponding vertices are identical (but still have different UVs).\n\n\t\tif ( phiLength === Math.PI * 2 ) {\n\n\t\t\tconst normals = this.attributes.normal.array;\n\t\t\tconst n1 = new Vector3();\n\t\t\tconst n2 = new Vector3();\n\t\t\tconst n = new Vector3();\n\n\t\t\t// this is the buffer offset for the last line of vertices\n\n\t\t\tconst base = segments * points.length * 3;\n\n\t\t\tfor ( let i = 0, j = 0; i < points.length; i ++, j += 3 ) {\n\n\t\t\t\t// select the normal of the vertex in the first line\n\n\t\t\t\tn1.x = normals[ j + 0 ];\n\t\t\t\tn1.y = normals[ j + 1 ];\n\t\t\t\tn1.z = normals[ j + 2 ];\n\n\t\t\t\t// select the normal of the vertex in the last line\n\n\t\t\t\tn2.x = normals[ base + j + 0 ];\n\t\t\t\tn2.y = normals[ base + j + 1 ];\n\t\t\t\tn2.z = normals[ base + j + 2 ];\n\n\t\t\t\t// average normals\n\n\t\t\t\tn.addVectors( n1, n2 ).normalize();\n\n\t\t\t\t// assign the new values to both normals\n\n\t\t\t\tnormals[ j + 0 ] = normals[ base + j + 0 ] = n.x;\n\t\t\t\tnormals[ j + 1 ] = normals[ base + j + 1 ] = n.y;\n\t\t\t\tnormals[ j + 2 ] = normals[ base + j + 2 ] = n.z;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new LatheGeometry( data.points, data.segments, data.phiStart, data.phiLength );\n\n\t}\n\n}\n\nclass OctahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t\t1, 3, 4,\t1, 4, 2\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'OctahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new OctahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass RingGeometry extends BufferGeometry {\n\n\tconstructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 8, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthetaSegments = Math.max( 3, thetaSegments );\n\t\tphiSegments = Math.max( 1, phiSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// some helper variables\n\n\t\tlet radius = innerRadius;\n\t\tconst radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\t\tconst segment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t\t// increase the radius for next row of vertices\n\n\t\t\tradius += radiusStep;\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let j = 0; j < phiSegments; j ++ ) {\n\n\t\t\tconst thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\tfor ( let i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\tconst segment = i + thetaSegmentLevel;\n\n\t\t\t\tconst a = segment;\n\t\t\t\tconst b = segment + thetaSegments + 1;\n\t\t\t\tconst c = segment + thetaSegments + 2;\n\t\t\t\tconst d = segment + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new RingGeometry( data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass ShapeGeometry extends BufferGeometry {\n\n\tconstructor( shapes = new Shape( [ new Vector2( 0, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), curveSegments = 12 ) {\n\n\t\tsuper();\n\t\tthis.type = 'ShapeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet groupStart = 0;\n\t\tlet groupCount = 0;\n\n\t\t// allow single and array values for \"shapes\" parameter\n\n\t\tif ( Array.isArray( shapes ) === false ) {\n\n\t\t\taddShape( shapes );\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < shapes.length; i ++ ) {\n\n\t\t\t\taddShape( shapes[ i ] );\n\n\t\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t\tgroupCount = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t// helper functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst indexOffset = vertices.length / 3;\n\t\t\tconst points = shape.extractPoints( curveSegments );\n\n\t\t\tlet shapeVertices = points.shape;\n\t\t\tconst shapeHoles = points.holes;\n\n\t\t\t// check direction of vertices\n\n\t\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t\t// join vertices of inner and outer paths to a single array\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\t\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t\t}\n\n\t\t\t// vertices, normals, uvs\n\n\t\t\tfor ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\tconst vertex = shapeVertices[ i ];\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\t\tnormals.push( 0, 0, 1 );\n\t\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t\t}\n\n\t\t\t// incides\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tconst a = face[ 0 ] + indexOffset;\n\t\t\t\tconst b = face[ 1 ] + indexOffset;\n\t\t\t\tconst c = face[ 2 ] + indexOffset;\n\n\t\t\t\tindices.push( a, b, c );\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON( shapes, data );\n\n\t}\n\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\treturn new ShapeGeometry( geometryShapes, data.curveSegments );\n\n\t}\n\n}\n\nfunction toJSON( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\nclass SphereGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, widthSegments = 32, heightSegments = 16, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) {\n\n\t\tsuper();\n\t\tthis.type = 'SphereGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) );\n\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) );\n\n\t\tconst thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );\n\n\t\tlet index = 0;\n\t\tconst grid = [];\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\tconst verticesRow = [];\n\n\t\t\tconst v = iy / heightSegments;\n\n\t\t\t// special case for the poles\n\n\t\t\tlet uOffset = 0;\n\n\t\t\tif ( iy == 0 && thetaStart == 0 ) {\n\n\t\t\t\tuOffset = 0.5 / widthSegments;\n\n\t\t\t} else if ( iy == heightSegments && thetaEnd == Math.PI ) {\n\n\t\t\t\tuOffset = - 0.5 / widthSegments;\n\n\t\t\t}\n\n\t\t\tfor ( let ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\tconst u = ix / widthSegments;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.copy( vertex ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u + uOffset, 1 - v );\n\n\t\t\t\tverticesRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\tgrid.push( verticesRow );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\tconst a = grid[ iy ][ ix + 1 ];\n\t\t\t\tconst b = grid[ iy ][ ix ];\n\t\t\t\tconst c = grid[ iy + 1 ][ ix ];\n\t\t\t\tconst d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new SphereGeometry( data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass TetrahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'TetrahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TetrahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass TorusGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, radialSegments = 8, tubularSegments = 6, arc = Math.PI * 2 ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\ttubularSegments = Math.floor( tubularSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst center = new Vector3();\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tconst u = i / tubularSegments * arc;\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\tconst b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\tconst c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\tconst d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TorusGeometry( data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc );\n\n\t}\n\n}\n\nclass TorusKnotGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusKnotGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\ttubularSegments = Math.floor( tubularSegments );\n\t\tradialSegments = Math.floor( radialSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tconst P1 = new Vector3();\n\t\tconst P2 = new Vector3();\n\n\t\tconst B = new Vector3();\n\t\tconst T = new Vector3();\n\t\tconst N = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segement\n\n\t\t\tconst u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t\t// calculate orthonormal basis\n\n\t\t\tT.subVectors( P2, P1 );\n\t\t\tN.addVectors( P2, P1 );\n\t\t\tB.crossVectors( T, N );\n\t\t\tN.crossVectors( B, T );\n\n\t\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\t\tB.normalize();\n\t\t\tN.normalize();\n\n\t\t\tfor ( let j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\t\t\t\tconst cx = - tube * Math.cos( v );\n\t\t\t\tconst cy = tube * Math.sin( v );\n\n\t\t\t\t// now calculate the final vertex position.\n\t\t\t\t// first we orient the extrusion with our basis vectos, then we add it to the current position on the curve\n\n\t\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// this function calculates the current position on the torus curve\n\n\t\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\t\tconst cu = Math.cos( u );\n\t\t\tconst su = Math.sin( u );\n\t\t\tconst quOverP = q / p * u;\n\t\t\tconst cs = Math.cos( quOverP );\n\n\t\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t\t}\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TorusKnotGeometry( data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q );\n\n\t}\n\n}\n\nclass TubeGeometry extends BufferGeometry {\n\n\tconstructor( path = new QuadraticBezierCurve3( new Vector3( - 1, - 1, 0 ), new Vector3( - 1, 1, 0 ), new Vector3( 1, 1, 0 ) ), tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) {\n\n\t\tsuper();\n\t\tthis.type = 'TubeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tconst frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = frames.tangents;\n\t\tthis.normals = frames.normals;\n\t\tthis.binormals = frames.binormals;\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tlet P = new Vector3();\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\t\tconst indices = [];\n\n\t\t// create buffer data\n\n\t\tgenerateBufferData();\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// functions\n\n\t\tfunction generateBufferData() {\n\n\t\t\tfor ( let i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\t\tgenerateSegment( i );\n\n\t\t\t}\n\n\t\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t// at the regular position on the given path\n\t\t\t//\n\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t\t// uvs are generated in a separate function.\n\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\tgenerateUVs();\n\n\t\t\t// finally create faces\n\n\t\t\tgenerateIndices();\n\n\t\t}\n\n\t\tfunction generateSegment( i ) {\n\n\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t\t// retrieve corresponding normal and binormal\n\n\t\t\tconst N = frames.normals[ i ];\n\t\t\tconst B = frames.binormals[ i ];\n\n\t\t\t// generate normals and vertices for the current segment\n\n\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\tconst sin = Math.sin( v );\n\t\t\t\tconst cos = - Math.cos( v );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\t\tnormal.normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateIndices() {\n\n\t\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.path = this.parameters.path.toJSON();\n\n\t\treturn data;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\t// This only works for built-in curves (e.g. CatmullRomCurve3).\n\t\t// User defined curves or instances of CurvePath will not be deserialized.\n\t\treturn new TubeGeometry(\n\t\t\tnew Curves[ data.path.type ]().fromJSON( data.path ),\n\t\t\tdata.tubularSegments,\n\t\t\tdata.radius,\n\t\t\tdata.radialSegments,\n\t\t\tdata.closed\n\t\t);\n\n\t}\n\n}\n\nclass WireframeGeometry extends BufferGeometry {\n\n\tconstructor( geometry = null ) {\n\n\t\tsuper();\n\t\tthis.type = 'WireframeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\t// buffer\n\n\t\t\tconst vertices = [];\n\t\t\tconst edges = new Set();\n\n\t\t\t// helper variables\n\n\t\t\tconst start = new Vector3();\n\t\t\tconst end = new Vector3();\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t// indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\tconst indices = geometry.index;\n\t\t\t\tlet groups = geometry.groups;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t\t}\n\n\t\t\t\t// create a data structure that contains all eges without duplicates\n\n\t\t\t\tfor ( let o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\t\tconst group = groups[ o ];\n\n\t\t\t\t\tconst groupStart = group.start;\n\t\t\t\t\tconst groupCount = group.count;\n\n\t\t\t\t\tfor ( let i = groupStart, l = ( groupStart + groupCount ); i < l; i += 3 ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\tconst index1 = indices.getX( i + j );\n\t\t\t\t\t\t\tconst index2 = indices.getX( i + ( j + 1 ) % 3 );\n\n\t\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\n\t\t\t\tfor ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\t\tconst index1 = 3 * i + j;\n\t\t\t\t\t\tconst index2 = 3 * i + ( ( j + 1 ) % 3 );\n\n\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n}\n\nfunction isUniqueEdge( start, end, edges ) {\n\n\tconst hash1 = `${start.x},${start.y},${start.z}-${end.x},${end.y},${end.z}`;\n\tconst hash2 = `${end.x},${end.y},${end.z}-${start.x},${start.y},${start.z}`; // coincident edge\n\n\tif ( edges.has( hash1 ) === true || edges.has( hash2 ) === true ) {\n\n\t\treturn false;\n\n\t} else {\n\n\t\tedges.add( hash1, hash2 );\n\t\treturn true;\n\n\t}\n\n}\n\nvar Geometries = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBoxGeometry: BoxGeometry,\n\tBoxBufferGeometry: BoxGeometry,\n\tCircleGeometry: CircleGeometry,\n\tCircleBufferGeometry: CircleGeometry,\n\tConeGeometry: ConeGeometry,\n\tConeBufferGeometry: ConeGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tCylinderBufferGeometry: CylinderGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tDodecahedronBufferGeometry: DodecahedronGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tExtrudeBufferGeometry: ExtrudeGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tIcosahedronBufferGeometry: IcosahedronGeometry,\n\tLatheGeometry: LatheGeometry,\n\tLatheBufferGeometry: LatheGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tOctahedronBufferGeometry: OctahedronGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPlaneBufferGeometry: PlaneGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tPolyhedronBufferGeometry: PolyhedronGeometry,\n\tRingGeometry: RingGeometry,\n\tRingBufferGeometry: RingGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tShapeBufferGeometry: ShapeGeometry,\n\tSphereGeometry: SphereGeometry,\n\tSphereBufferGeometry: SphereGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTetrahedronBufferGeometry: TetrahedronGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusBufferGeometry: TorusGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTorusKnotBufferGeometry: TorusKnotGeometry,\n\tTubeGeometry: TubeGeometry,\n\tTubeBufferGeometry: TubeGeometry,\n\tWireframeGeometry: WireframeGeometry\n});\n\n/**\n * parameters = {\n * color: \n * }\n */\n\nclass ShadowMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ShadowMaterial';\n\n\t\tthis.color = new Color( 0x000000 );\n\t\tthis.transparent = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\treturn this;\n\n\t}\n\n}\n\nShadowMaterial.prototype.isShadowMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n * roughness: ,\n * metalness: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * roughnessMap: new THREE.Texture( ),\n *\n * metalnessMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * envMapIntensity: \n *\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * flatShading: \n * }\n */\n\nclass MeshStandardMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.type = 'MeshStandardMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.roughness = 1.0;\n\t\tthis.metalness = 0.0;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.roughnessMap = null;\n\n\t\tthis.metalnessMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapIntensity = 1.0;\n\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.color.copy( source.color );\n\t\tthis.roughness = source.roughness;\n\t\tthis.metalness = source.metalness;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.roughnessMap = source.roughnessMap;\n\n\t\tthis.metalnessMap = source.metalnessMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapIntensity = source.envMapIntensity;\n\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshStandardMaterial.prototype.isMeshStandardMaterial = true;\n\n/**\n * parameters = {\n * clearcoat: ,\n * clearcoatMap: new THREE.Texture( ),\n * clearcoatRoughness: ,\n * clearcoatRoughnessMap: new THREE.Texture( ),\n * clearcoatNormalScale: ,\n * clearcoatNormalMap: new THREE.Texture( ),\n *\n * ior: ,\n * reflectivity: ,\n *\n * sheen: ,\n * sheenColor: ,\n * sheenColorMap: new THREE.Texture( ),\n * sheenRoughness: ,\n * sheenRoughnessMap: new THREE.Texture( ),\n *\n * transmission: ,\n * transmissionMap: new THREE.Texture( ),\n *\n * thickness: ,\n * thicknessMap: new THREE.Texture( ),\n * attenuationDistance: ,\n * attenuationColor: ,\n *\n * specularIntensity: ,\n * specularIntensityMap: new THREE.Texture( ),\n * specularColor: ,\n * specularColorMap: new THREE.Texture( )\n * }\n */\n\nclass MeshPhysicalMaterial extends MeshStandardMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.type = 'MeshPhysicalMaterial';\n\n\t\tthis.clearcoatMap = null;\n\t\tthis.clearcoatRoughness = 0.0;\n\t\tthis.clearcoatRoughnessMap = null;\n\t\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\t\tthis.clearcoatNormalMap = null;\n\n\t\tthis.ior = 1.5;\n\n\t\tObject.defineProperty( this, 'reflectivity', {\n\t\t\tget: function () {\n\n\t\t\t\treturn ( clamp( 2.5 * ( this.ior - 1 ) / ( this.ior + 1 ), 0, 1 ) );\n\n\t\t\t},\n\t\t\tset: function ( reflectivity ) {\n\n\t\t\t\tthis.ior = ( 1 + 0.4 * reflectivity ) / ( 1 - 0.4 * reflectivity );\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.sheenColor = new Color( 0x000000 );\n\t\tthis.sheenColorMap = null;\n\t\tthis.sheenRoughness = 1.0;\n\t\tthis.sheenRoughnessMap = null;\n\n\t\tthis.transmissionMap = null;\n\n\t\tthis.thickness = 0.01;\n\t\tthis.thicknessMap = null;\n\t\tthis.attenuationDistance = 0.0;\n\t\tthis.attenuationColor = new Color( 1, 1, 1 );\n\n\t\tthis.specularIntensity = 1.0;\n\t\tthis.specularIntensityMap = null;\n\t\tthis.specularColor = new Color( 1, 1, 1 );\n\t\tthis.specularColorMap = null;\n\n\t\tthis._sheen = 0.0;\n\t\tthis._clearcoat = 0;\n\t\tthis._transmission = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tget sheen() {\n\n\t\treturn this._sheen;\n\n\t}\n\n\tset sheen( value ) {\n\n\t\tif ( this._sheen > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._sheen = value;\n\n\t}\n\n\tget clearcoat() {\n\n\t\treturn this._clearcoat;\n\n\t}\n\n\tset clearcoat( value ) {\n\n\t\tif ( this._clearcoat > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._clearcoat = value;\n\n\t}\n\n\tget transmission() {\n\n\t\treturn this._transmission;\n\n\t}\n\n\tset transmission( value ) {\n\n\t\tif ( this._transmission > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._transmission = value;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.clearcoat = source.clearcoat;\n\t\tthis.clearcoatMap = source.clearcoatMap;\n\t\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\t\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\t\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\t\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\t\tthis.ior = source.ior;\n\n\t\tthis.sheen = source.sheen;\n\t\tthis.sheenColor.copy( source.sheenColor );\n\t\tthis.sheenColorMap = source.sheenColorMap;\n\t\tthis.sheenRoughness = source.sheenRoughness;\n\t\tthis.sheenRoughnessMap = source.sheenRoughnessMap;\n\n\t\tthis.transmission = source.transmission;\n\t\tthis.transmissionMap = source.transmissionMap;\n\n\t\tthis.thickness = source.thickness;\n\t\tthis.thicknessMap = source.thicknessMap;\n\t\tthis.attenuationDistance = source.attenuationDistance;\n\t\tthis.attenuationColor.copy( source.attenuationColor );\n\n\t\tthis.specularIntensity = source.specularIntensity;\n\t\tthis.specularIntensityMap = source.specularIntensityMap;\n\t\tthis.specularColor.copy( source.specularColor );\n\t\tthis.specularColorMap = source.specularColorMap;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n * specular: ,\n * shininess: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.MultiplyOperation,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * flatShading: \n * }\n */\n\nclass MeshPhongMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshPhongMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.specular = new Color( 0x111111 );\n\t\tthis.shininess = 30;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.specular.copy( source.specular );\n\t\tthis.shininess = source.shininess;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshPhongMaterial.prototype.isMeshPhongMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n *\n * map: new THREE.Texture( ),\n * gradientMap: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * alphaMap: new THREE.Texture( ),\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * }\n */\n\nclass MeshToonMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = { 'TOON': '' };\n\n\t\tthis.type = 'MeshToonMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\t\tthis.gradientMap = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\t\tthis.gradientMap = source.gradientMap;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshToonMaterial.prototype.isMeshToonMaterial = true;\n\n/**\n * parameters = {\n * opacity: ,\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * wireframe: ,\n * wireframeLinewidth: \n *\n * flatShading: \n * }\n */\n\nclass MeshNormalMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshNormalMaterial';\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshNormalMaterial.prototype.isMeshNormalMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * }\n */\n\nclass MeshLambertMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'MeshLambertMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshLambertMaterial.prototype.isMeshLambertMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * matcap: new THREE.Texture( ),\n *\n * map: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * alphaMap: new THREE.Texture( ),\n *\n * flatShading: \n * }\n */\n\nclass MeshMatcapMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.type = 'MeshMatcapMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.matcap = null;\n\n\t\tthis.map = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.matcap = source.matcap;\n\n\t\tthis.map = source.map;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nMeshMatcapMaterial.prototype.isMeshMatcapMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * linewidth: ,\n *\n * scale: ,\n * dashSize: ,\n * gapSize: \n * }\n */\n\nclass LineDashedMaterial extends LineBasicMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineDashedMaterial';\n\n\t\tthis.scale = 1;\n\t\tthis.dashSize = 3;\n\t\tthis.gapSize = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.scale = source.scale;\n\t\tthis.dashSize = source.dashSize;\n\t\tthis.gapSize = source.gapSize;\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineDashedMaterial.prototype.isLineDashedMaterial = true;\n\nvar Materials = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tShadowMaterial: ShadowMaterial,\n\tSpriteMaterial: SpriteMaterial,\n\tRawShaderMaterial: RawShaderMaterial,\n\tShaderMaterial: ShaderMaterial,\n\tPointsMaterial: PointsMaterial,\n\tMeshPhysicalMaterial: MeshPhysicalMaterial,\n\tMeshStandardMaterial: MeshStandardMaterial,\n\tMeshPhongMaterial: MeshPhongMaterial,\n\tMeshToonMaterial: MeshToonMaterial,\n\tMeshNormalMaterial: MeshNormalMaterial,\n\tMeshLambertMaterial: MeshLambertMaterial,\n\tMeshDepthMaterial: MeshDepthMaterial,\n\tMeshDistanceMaterial: MeshDistanceMaterial,\n\tMeshBasicMaterial: MeshBasicMaterial,\n\tMeshMatcapMaterial: MeshMatcapMaterial,\n\tLineDashedMaterial: LineDashedMaterial,\n\tLineBasicMaterial: LineBasicMaterial,\n\tMaterial: Material\n});\n\nconst AnimationUtils = {\n\n\t// same as Array.prototype.slice, but also works on typed arrays\n\tarraySlice: function ( array, from, to ) {\n\n\t\tif ( AnimationUtils.isTypedArray( array ) ) {\n\n\t\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\t\treturn new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );\n\n\t\t}\n\n\t\treturn array.slice( from, to );\n\n\t},\n\n\t// converts an array to a specific type\n\tconvertArray: function ( array, type, forceClone ) {\n\n\t\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t\t! forceClone && array.constructor === type ) return array;\n\n\t\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\t\treturn new type( array ); // create typed array\n\n\t\t}\n\n\t\treturn Array.prototype.slice.call( array ); // create Array\n\n\t},\n\n\tisTypedArray: function ( object ) {\n\n\t\treturn ArrayBuffer.isView( object ) &&\n\t\t\t! ( object instanceof DataView );\n\n\t},\n\n\t// returns an array by which times and values can be sorted\n\tgetKeyframeOrder: function ( times ) {\n\n\t\tfunction compareTime( i, j ) {\n\n\t\t\treturn times[ i ] - times[ j ];\n\n\t\t}\n\n\t\tconst n = times.length;\n\t\tconst result = new Array( n );\n\t\tfor ( let i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\t\tresult.sort( compareTime );\n\n\t\treturn result;\n\n\t},\n\n\t// uses the array previously returned by 'getKeyframeOrder' to sort data\n\tsortedArray: function ( values, stride, order ) {\n\n\t\tconst nValues = values.length;\n\t\tconst result = new values.constructor( nValues );\n\n\t\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\t\tconst srcOffset = order[ i ] * stride;\n\n\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// function for parsing AOS keyframe formats\n\tflattenJSON: function ( jsonKeys, times, values, valuePropertyName ) {\n\n\t\tlet i = 1, key = jsonKeys[ 0 ];\n\n\t\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t}\n\n\t\tif ( key === undefined ) return; // no data\n\n\t\tlet value = key[ valuePropertyName ];\n\t\tif ( value === undefined ) return; // no data\n\n\t\tif ( Array.isArray( value ) ) {\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else if ( value.toArray !== undefined ) {\n\n\t\t\t// ...assume THREE.Math-ish\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else {\n\n\t\t\t// otherwise push as-is\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push( value );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t}\n\n\t},\n\n\tsubclip: function ( sourceClip, name, startFrame, endFrame, fps = 30 ) {\n\n\t\tconst clip = sourceClip.clone();\n\n\t\tclip.name = name;\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tconst track = clip.tracks[ i ];\n\t\t\tconst valueSize = track.getValueSize();\n\n\t\t\tconst times = [];\n\t\t\tconst values = [];\n\n\t\t\tfor ( let j = 0; j < track.times.length; ++ j ) {\n\n\t\t\t\tconst frame = track.times[ j ] * fps;\n\n\t\t\t\tif ( frame < startFrame || frame >= endFrame ) continue;\n\n\t\t\t\ttimes.push( track.times[ j ] );\n\n\t\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\t\tvalues.push( track.values[ j * valueSize + k ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( times.length === 0 ) continue;\n\n\t\t\ttrack.times = AnimationUtils.convertArray( times, track.times.constructor );\n\t\t\ttrack.values = AnimationUtils.convertArray( values, track.values.constructor );\n\n\t\t\ttracks.push( track );\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\t// find minimum .times value across all tracks in the trimmed clip\n\n\t\tlet minStartTime = Infinity;\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tif ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {\n\n\t\t\t\tminStartTime = clip.tracks[ i ].times[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// shift all tracks such that clip begins at t=0\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tclip.tracks[ i ].shift( - 1 * minStartTime );\n\n\t\t}\n\n\t\tclip.resetDuration();\n\n\t\treturn clip;\n\n\t},\n\n\tmakeClipAdditive: function ( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {\n\n\t\tif ( fps <= 0 ) fps = 30;\n\n\t\tconst numTracks = referenceClip.tracks.length;\n\t\tconst referenceTime = referenceFrame / fps;\n\n\t\t// Make each track's values relative to the values at the reference frame\n\t\tfor ( let i = 0; i < numTracks; ++ i ) {\n\n\t\t\tconst referenceTrack = referenceClip.tracks[ i ];\n\t\t\tconst referenceTrackType = referenceTrack.ValueTypeName;\n\n\t\t\t// Skip this track if it's non-numeric\n\t\t\tif ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;\n\n\t\t\t// Find the track in the target clip whose name and type matches the reference track\n\t\t\tconst targetTrack = targetClip.tracks.find( function ( track ) {\n\n\t\t\t\treturn track.name === referenceTrack.name\n\t\t\t\t\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t\t} );\n\n\t\t\tif ( targetTrack === undefined ) continue;\n\n\t\t\tlet referenceOffset = 0;\n\t\t\tconst referenceValueSize = referenceTrack.getValueSize();\n\n\t\t\tif ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\treferenceOffset = referenceValueSize / 3;\n\n\t\t\t}\n\n\t\t\tlet targetOffset = 0;\n\t\t\tconst targetValueSize = targetTrack.getValueSize();\n\n\t\t\tif ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\ttargetOffset = targetValueSize / 3;\n\n\t\t\t}\n\n\t\t\tconst lastIndex = referenceTrack.times.length - 1;\n\t\t\tlet referenceValue;\n\n\t\t\t// Find the value to subtract out of the track\n\t\t\tif ( referenceTime <= referenceTrack.times[ 0 ] ) {\n\n\t\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\t\tconst startIndex = referenceOffset;\n\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t\t} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {\n\n\t\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\t\tconst startIndex = lastIndex * referenceValueSize + referenceOffset;\n\t\t\t\tconst endIndex = startIndex + referenceValueSize - referenceOffset;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t\t} else {\n\n\t\t\t\t// Interpolate to the reference value\n\t\t\t\tconst interpolant = referenceTrack.createInterpolant();\n\t\t\t\tconst startIndex = referenceOffset;\n\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( interpolant.resultBuffer, startIndex, endIndex );\n\n\t\t\t}\n\n\t\t\t// Conjugate the quaternion\n\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\tconst referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate();\n\t\t\t\treferenceQuat.toArray( referenceValue );\n\n\t\t\t}\n\n\t\t\t// Subtract the reference value from all of the track values\n\n\t\t\tconst numTimes = targetTrack.times.length;\n\t\t\tfor ( let j = 0; j < numTimes; ++ j ) {\n\n\t\t\t\tconst valueStart = j * targetValueSize + targetOffset;\n\n\t\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\t\tQuaternion.multiplyQuaternionsFlat(\n\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\tvalueStart,\n\t\t\t\t\t\treferenceValue,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\tvalueStart\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst valueEnd = targetValueSize - targetOffset * 2;\n\n\t\t\t\t\t// Subtract each value for all other numeric track types\n\t\t\t\t\tfor ( let k = 0; k < valueEnd; ++ k ) {\n\n\t\t\t\t\t\ttargetTrack.values[ valueStart + k ] -= referenceValue[ k ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\ttargetClip.blendMode = AdditiveAnimationBlendMode;\n\n\t\treturn targetClip;\n\n\t}\n\n};\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n */\n\nclass Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tthis.parameterPositions = parameterPositions;\n\t\tthis._cachedIndex = 0;\n\n\t\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\t\tthis.sampleValues = sampleValues;\n\t\tthis.valueSize = sampleSize;\n\n\t\tthis.settings = null;\n\t\tthis.DefaultSettings_ = {};\n\n\t}\n\n\tevaluate( t ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet i1 = this._cachedIndex,\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tlet right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t, t0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tconst t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tconst mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.afterEnd_( i1 - 1, t0, t );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t}\n\n\tgetSettings_() {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t// Template methods for derived classes:\n\n\tinterpolate_( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t}\n\n\tintervalChanged_( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n}\n\n// ALIAS DEFINITIONS\n\nInterpolant.prototype.beforeStart_ = Interpolant.prototype.copySampleValue_;\nInterpolant.prototype.afterEnd_ = Interpolant.prototype.copySampleValue_;\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n */\n\nclass CubicInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis._weightPrev = - 0;\n\t\tthis._offsetPrev = - 0;\n\t\tthis._weightNext = - 0;\n\t\tthis._offsetNext = - 0;\n\n\t\tthis.DefaultSettings_ = {\n\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\n\t\t};\n\n\t}\n\n\tintervalChanged_( i1, t0, t1 ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet iPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tconst s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tconst s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nclass LinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceeding\n * the parameter.\n */\n\nclass DiscreteInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n}\n\nclass KeyframeTrack {\n\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\t\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\t\tthis.name = name;\n\n\t\tthis.times = AnimationUtils.convertArray( times, this.TimeBufferType );\n\t\tthis.values = AnimationUtils.convertArray( values, this.ValueBufferType );\n\n\t\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\t}\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\tstatic toJSON( track ) {\n\n\t\tconst trackType = track.constructor;\n\n\t\tlet json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== this.toJSON ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': AnimationUtils.convertArray( track.times, Array ),\n\t\t\t\t'values': AnimationUtils.convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tconst interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t}\n\n\tInterpolantFactoryMethodDiscrete( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodSmooth( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tsetInterpolation( interpolation ) {\n\n\t\tlet factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tconst message = 'unsupported interpolation for ' +\n\t\t\t\tthis.ValueTypeName + ' keyframe track named ' + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\n\n\t}\n\n\tgetInterpolation() {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t}\n\n\tgetValueSize() {\n\n\t\treturn this.values.length / this.times.length;\n\n\t}\n\n\t// move all keyframes either forwards or backwards in time\n\tshift( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim( startTime, endTime ) {\n\n\t\tconst times = this.times,\n\t\t\tnKeys = times.length;\n\n\t\tlet from = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) {\n\n\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\tfrom = to - 1;\n\n\t\t\t}\n\n\t\t\tconst stride = this.getValueSize();\n\t\t\tthis.times = AnimationUtils.arraySlice( times, from, to );\n\t\t\tthis.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tconst valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tconst times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tlet prevTime = null;\n\n\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tconst currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( AnimationUtils.isTypedArray( values ) ) {\n\n\t\t\t\tfor ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize() {\n\n\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\tconst times = AnimationUtils.arraySlice( this.times ),\n\t\t\tvalues = AnimationUtils.arraySlice( this.values ),\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\tlastIndex = times.length - 1;\n\n\t\tlet writeIndex = 1;\n\n\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tlet keep = false;\n\n\t\t\tconst time = times[ i ];\n\t\t\tconst timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== times[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tconst offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tconst value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tconst readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = AnimationUtils.arraySlice( times, 0, writeIndex );\n\t\t\tthis.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride );\n\n\t\t} else {\n\n\t\t\tthis.times = times;\n\t\t\tthis.values = values;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst times = AnimationUtils.arraySlice( this.times, 0 );\n\t\tconst values = AnimationUtils.arraySlice( this.values, 0 );\n\n\t\tconst TypedKeyframeTrack = this.constructor;\n\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\treturn track;\n\n\t}\n\n}\n\nKeyframeTrack.prototype.TimeBufferType = Float32Array;\nKeyframeTrack.prototype.ValueBufferType = Float32Array;\nKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\n\n/**\n * A Track of Boolean keyframe values.\n */\nclass BooleanKeyframeTrack extends KeyframeTrack {}\n\nBooleanKeyframeTrack.prototype.ValueTypeName = 'bool';\nBooleanKeyframeTrack.prototype.ValueBufferType = Array;\nBooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of keyframe values that represent color.\n */\nclass ColorKeyframeTrack extends KeyframeTrack {}\n\nColorKeyframeTrack.prototype.ValueTypeName = 'color';\n\n/**\n * A Track of numeric keyframe values.\n */\nclass NumberKeyframeTrack extends KeyframeTrack {}\n\nNumberKeyframeTrack.prototype.ValueTypeName = 'number';\n\n/**\n * Spherical linear unit quaternion interpolant.\n */\n\nclass QuaternionLinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tlet offset = i1 * stride;\n\n\t\tfor ( let end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n * A Track of quaternion keyframe values.\n */\nclass QuaternionKeyframeTrack extends KeyframeTrack {\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n}\n\nQuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion';\n// ValueBufferType is inherited\nQuaternionKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\nQuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track that interpolates Strings\n */\nclass StringKeyframeTrack extends KeyframeTrack {}\n\nStringKeyframeTrack.prototype.ValueTypeName = 'string';\nStringKeyframeTrack.prototype.ValueBufferType = Array;\nStringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of vectored keyframe values.\n */\nclass VectorKeyframeTrack extends KeyframeTrack {}\n\nVectorKeyframeTrack.prototype.ValueTypeName = 'vector';\n\nclass AnimationClip {\n\n\tconstructor( name, duration = - 1, tracks, blendMode = NormalAnimationBlendMode ) {\n\n\t\tthis.name = name;\n\t\tthis.tracks = tracks;\n\t\tthis.duration = duration;\n\t\tthis.blendMode = blendMode;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// this means it should figure out its duration by scanning the tracks\n\t\tif ( this.duration < 0 ) {\n\n\t\t\tthis.resetDuration();\n\n\t\t}\n\n\t}\n\n\n\tstatic parse( json ) {\n\n\t\tconst tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\tconst clip = new this( json.name, json.duration, tracks, json.blendMode );\n\t\tclip.uuid = json.uuid;\n\n\t\treturn clip;\n\n\t}\n\n\tstatic toJSON( clip ) {\n\n\t\tconst tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tconst json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid,\n\t\t\t'blendMode': clip.blendMode\n\n\t\t};\n\n\t\tfor ( let i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t}\n\n\tstatic CreateFromMorphTargetSequence( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tconst numMorphTargets = morphTargetSequence.length;\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tlet times = [];\n\t\t\tlet values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tconst order = AnimationUtils.getKeyframeOrder( times );\n\t\t\ttimes = AnimationUtils.sortedArray( times, 1, order );\n\t\t\tvalues = AnimationUtils.sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new this( name, - 1, tracks );\n\n\t}\n\n\tstatic findByName( objectOrClipArray, name ) {\n\n\t\tlet clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tconst o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tstatic CreateClipsFromMorphTargetSequences( morphTargets, fps, noLoop ) {\n\n\t\tconst animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tconst pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst clips = [];\n\n\t\tfor ( const name in animationToMorphTargets ) {\n\n\t\t\tclips.push( this.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t}\n\n\t// parse the animation.hierarchy format\n\tstatic parseAnimation( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst values = [];\n\n\t\t\t\tAnimationUtils.flattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tconst tracks = [];\n\n\t\tconst clipName = animation.name || 'default';\n\t\tconst fps = animation.fps || 30;\n\t\tconst blendMode = animation.blendMode;\n\n\t\t// automatic length determination in AnimationClip.\n\t\tlet duration = animation.length || - 1;\n\n\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tconst animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tconst morphTargetNames = {};\n\n\t\t\t\tlet k;\n\n\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tconst animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * ( fps || 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tconst boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst clip = new this( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n\tresetDuration() {\n\n\t\tconst tracks = this.tracks;\n\t\tlet duration = 0;\n\n\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tconst track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t\treturn this;\n\n\t}\n\n\ttrim() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\toptimize() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t}\n\n\t\treturn new this.constructor( this.name, this.duration, tracks, this.blendMode );\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.constructor.toJSON( this );\n\n\t}\n\n}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tconst times = [], values = [];\n\n\t\tAnimationUtils.flattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\nconst Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\nclass LoadingManager {\n\n\tconstructor( onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet isLoading = false;\n\t\tlet itemsLoaded = 0;\n\t\tlet itemsTotal = 0;\n\t\tlet urlModifier = undefined;\n\t\tconst handlers = [];\n\n\t\t// Refer to #5689 for the reason why we don't set .onStart\n\t\t// in the constructor\n\n\t\tthis.onStart = undefined;\n\t\tthis.onLoad = onLoad;\n\t\tthis.onProgress = onProgress;\n\t\tthis.onError = onError;\n\n\t\tthis.itemStart = function ( url ) {\n\n\t\t\titemsTotal ++;\n\n\t\t\tif ( isLoading === false ) {\n\n\t\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tisLoading = true;\n\n\t\t};\n\n\t\tthis.itemEnd = function ( url ) {\n\n\t\t\titemsLoaded ++;\n\n\t\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\t\tisLoading = false;\n\n\t\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\t\tscope.onLoad();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.itemError = function ( url ) {\n\n\t\t\tif ( scope.onError !== undefined ) {\n\n\t\t\t\tscope.onError( url );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.resolveURL = function ( url ) {\n\n\t\t\tif ( urlModifier ) {\n\n\t\t\t\treturn urlModifier( url );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t};\n\n\t\tthis.setURLModifier = function ( transform ) {\n\n\t\t\turlModifier = transform;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.addHandler = function ( regex, loader ) {\n\n\t\t\thandlers.push( regex, loader );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.removeHandler = function ( regex ) {\n\n\t\t\tconst index = handlers.indexOf( regex );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\thandlers.splice( index, 2 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.getHandler = function ( file ) {\n\n\t\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\t\tconst regex = handlers[ i ];\n\t\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\t\treturn loader;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t};\n\n\t}\n\n}\n\nconst DefaultLoadingManager = new LoadingManager();\n\nclass Loader {\n\n\tconstructor( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.withCredentials = false;\n\t\tthis.path = '';\n\t\tthis.resourcePath = '';\n\t\tthis.requestHeader = {};\n\n\t}\n\n\tload( /* url, onLoad, onProgress, onError */ ) {}\n\n\tloadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t}\n\n\tparse( /* data */ ) {}\n\n\tsetCrossOrigin( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t}\n\n\tsetWithCredentials( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t}\n\n\tsetResourcePath( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t}\n\n\tsetRequestHeader( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n}\n\nconst loading = {};\n\nclass FileLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tthis.manager.itemStart( url );\n\n\t\t\tsetTimeout( () => {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Initialise array for duplicate requests\n\t\tloading[ url ] = [];\n\n\t\tloading[ url ].push( {\n\t\t\tonLoad: onLoad,\n\t\t\tonProgress: onProgress,\n\t\t\tonError: onError,\n\t\t} );\n\n\t\t// create request\n\t\tconst req = new Request( url, {\n\t\t\theaders: new Headers( this.requestHeader ),\n\t\t\tcredentials: this.withCredentials ? 'include' : 'same-origin',\n\t\t\t// An abort controller could be added within a future PR\n\t\t} );\n\n\t\t// start the fetch\n\t\tfetch( req )\n\t\t\t.then( response => {\n\n\t\t\t\tif ( response.status === 200 || response.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( response.status === 0 ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\t\tconst reader = response.body.getReader();\n\t\t\t\t\tconst contentLength = response.headers.get( 'Content-Length' );\n\t\t\t\t\tconst total = contentLength ? parseInt( contentLength ) : 0;\n\t\t\t\t\tconst lengthComputable = total !== 0;\n\t\t\t\t\tlet loaded = 0;\n\n\t\t\t\t\t// periodically read data into the new stream tracking while download progress\n\t\t\t\t\treturn new ReadableStream( {\n\t\t\t\t\t\tstart( controller ) {\n\n\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\tfunction readData() {\n\n\t\t\t\t\t\t\t\treader.read().then( ( { done, value } ) => {\n\n\t\t\t\t\t\t\t\t\tif ( done ) {\n\n\t\t\t\t\t\t\t\t\t\tcontroller.close();\n\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\tloaded += value.byteLength;\n\n\t\t\t\t\t\t\t\t\t\tconst event = new ProgressEvent( 'progress', { lengthComputable, loaded, total } );\n\t\t\t\t\t\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\t\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tcontroller.enqueue( value );\n\t\t\t\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow Error( `fetch for \"${response.url}\" responded with ${response.status}: ${response.statusText}` );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( stream => {\n\n\t\t\t\tconst response = new Response( stream );\n\n\t\t\t\tswitch ( this.responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\n\t\t\t\t\t\treturn response.arrayBuffer();\n\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\treturn response.blob();\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\treturn response.text()\n\t\t\t\t\t\t\t.then( text => {\n\n\t\t\t\t\t\t\t\tconst parser = new DOMParser();\n\t\t\t\t\t\t\t\treturn parser.parseFromString( text, this.mimeType );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\treturn response.json();\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\treturn response.text();\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( data => {\n\n\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\tCache.add( url, data );\n\n\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( data );\n\n\t\t\t\t}\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t} )\n\t\t\t.catch( err => {\n\n\t\t\t\t// Abort errors and other errors are handled the same\n\n\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( err );\n\n\t\t\t\t}\n\n\t\t\t\tthis.manager.itemError( url );\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\tthis.manager.itemStart( url );\n\n\t}\n\n\tsetResponseType( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t}\n\n\tsetMimeType( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t}\n\n}\n\nclass AnimationLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst animations = [];\n\n\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\tconst clip = AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass CompressedTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst images = [];\n\n\t\tconst texture = new CompressedTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 ) texture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.image = images;\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tfor ( let i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tconst faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( let f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( let i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.image = images;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass ImageLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst image = createElementNS( 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction removeEventListeners() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.substr( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t}\n\n}\n\nclass CubeTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass DataTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst texture = new DataTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tconst texData = scope.parse( buffer );\n\n\t\t\tif ( ! texData ) return;\n\n\t\t\tif ( texData.image !== undefined ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( texData.data !== undefined ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;\n\n\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\tif ( texData.encoding !== undefined ) {\n\n\t\t\t\ttexture.encoding = texData.encoding;\n\n\t\t\t}\n\n\t\t\tif ( texData.flipY !== undefined ) {\n\n\t\t\t\ttexture.flipY = texData.flipY;\n\n\t\t\t}\n\n\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\n\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter; // presumably...\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmapCount === 1 ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\tif ( texData.generateMipmaps !== undefined ) {\n\n\t\t\t\ttexture.generateMipmaps = texData.generateMipmaps;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass TextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new Texture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass Light extends Object3D {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Light';\n\n\t\tthis.color = new Color( color );\n\t\tthis.intensity = intensity;\n\n\t}\n\n\tdispose() {\n\n\t\t// Empty here in base class; some subclasses override.\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\nLight.prototype.isLight = true;\n\nclass HemisphereLight extends Light {\n\n\tconstructor( skyColor, groundColor, intensity ) {\n\n\t\tsuper( skyColor, intensity );\n\n\t\tthis.type = 'HemisphereLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.groundColor = new Color( groundColor );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n}\n\nHemisphereLight.prototype.isHemisphereLight = true;\n\nconst _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld$1 = /*@__PURE__*/ new Vector3();\nconst _lookTarget$1 = /*@__PURE__*/ new Vector3();\n\nclass LightShadow {\n\n\tconstructor( camera ) {\n\n\t\tthis.camera = camera;\n\n\t\tthis.bias = 0;\n\t\tthis.normalBias = 0;\n\t\tthis.radius = 1;\n\t\tthis.blurSamples = 8;\n\n\t\tthis.mapSize = new Vector2( 512, 512 );\n\n\t\tthis.map = null;\n\t\tthis.mapPass = null;\n\t\tthis.matrix = new Matrix4();\n\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\n\t\tthis._frustum = new Frustum();\n\t\tthis._frameExtents = new Vector2( 1, 1 );\n\n\t\tthis._viewportCount = 1;\n\n\t\tthis._viewports = [\n\n\t\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t\t];\n\n\t}\n\n\tgetViewportCount() {\n\n\t\treturn this._viewportCount;\n\n\t}\n\n\tgetFrustum() {\n\n\t\treturn this._frustum;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst shadowCamera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\t_lightPositionWorld$1.setFromMatrixPosition( light.matrixWorld );\n\t\tshadowCamera.position.copy( _lightPositionWorld$1 );\n\n\t\t_lookTarget$1.setFromMatrixPosition( light.target.matrixWorld );\n\t\tshadowCamera.lookAt( _lookTarget$1 );\n\t\tshadowCamera.updateMatrixWorld();\n\n\t\t_projScreenMatrix$1.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix$1 );\n\n\t\tshadowMatrix.set(\n\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t);\n\n\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\n\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\n\n\t}\n\n\tgetViewport( viewportIndex ) {\n\n\t\treturn this._viewports[ viewportIndex ];\n\n\t}\n\n\tgetFrameExtents() {\n\n\t\treturn this._frameExtents;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.map ) {\n\n\t\t\tthis.map.dispose();\n\n\t\t}\n\n\t\tif ( this.mapPass ) {\n\n\t\t\tthis.mapPass.dispose();\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst object = {};\n\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.normalBias !== 0 ) object.normalBias = this.normalBias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n}\n\nclass SpotLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\t\tthis.focus = 1;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = RAD2DEG * 2 * light.angle * this.focus;\n\t\tconst aspect = this.mapSize.width / this.mapSize.height;\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\tsuper.updateMatrices( light );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.focus = source.focus;\n\n\t\treturn this;\n\n\t}\n\n}\n\nSpotLightShadow.prototype.isSpotLightShadow = true;\n\nclass SpotLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 1 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'SpotLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.distance = distance;\n\t\tthis.angle = angle;\n\t\tthis.penumbra = penumbra;\n\t\tthis.decay = decay; // for physically correct lights, should be 2.\n\n\t\tthis.shadow = new SpotLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// by convention for a spotlight, luminous power (lm) = π * luminous intensity (cd)\n\t\treturn this.intensity * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / Math.PI;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nSpotLight.prototype.isSpotLight = true;\n\nconst _projScreenMatrix = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld = /*@__PURE__*/ new Vector3();\nconst _lookTarget = /*@__PURE__*/ new Vector3();\n\nclass PointLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\t\tthis._frameExtents = new Vector2( 4, 2 );\n\n\t\tthis._viewportCount = 6;\n\n\t\tthis._viewports = [\n\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t// following orientation:\n\t\t\t//\n\t\t\t// xzXZ\n\t\t\t// y Y\n\t\t\t//\n\t\t\t// X - Positive x direction\n\t\t\t// x - Negative x direction\n\t\t\t// Y - Positive y direction\n\t\t\t// y - Negative y direction\n\t\t\t// Z - Positive z direction\n\t\t\t// z - Negative z direction\n\n\t\t\t// positive X\n\t\t\tnew Vector4( 2, 1, 1, 1 ),\n\t\t\t// negative X\n\t\t\tnew Vector4( 0, 1, 1, 1 ),\n\t\t\t// positive Z\n\t\t\tnew Vector4( 3, 1, 1, 1 ),\n\t\t\t// negative Z\n\t\t\tnew Vector4( 1, 1, 1, 1 ),\n\t\t\t// positive Y\n\t\t\tnew Vector4( 3, 0, 1, 1 ),\n\t\t\t// negative Y\n\t\t\tnew Vector4( 1, 0, 1, 1 )\n\t\t];\n\n\t\tthis._cubeDirections = [\n\t\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t\t];\n\n\t\tthis._cubeUps = [\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t\t];\n\n\t}\n\n\tupdateMatrices( light, viewportIndex = 0 ) {\n\n\t\tconst camera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( far !== camera.far ) {\n\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tcamera.position.copy( _lightPositionWorld );\n\n\t\t_lookTarget.copy( camera.position );\n\t\t_lookTarget.add( this._cubeDirections[ viewportIndex ] );\n\t\tcamera.up.copy( this._cubeUps[ viewportIndex ] );\n\t\tcamera.lookAt( _lookTarget );\n\t\tcamera.updateMatrixWorld();\n\n\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t}\n\n}\n\nPointLightShadow.prototype.isPointLightShadow = true;\n\nclass PointLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, decay = 1 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'PointLight';\n\n\t\tthis.distance = distance;\n\t\tthis.decay = decay; // for physically correct lights, should be 2.\n\n\t\tthis.shadow = new PointLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// for an isotropic light source, luminous power (lm) = 4 π luminous intensity (cd)\n\t\treturn this.intensity * 4 * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nPointLight.prototype.isPointLight = true;\n\nclass DirectionalLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n\t}\n\n}\n\nDirectionalLightShadow.prototype.isDirectionalLightShadow = true;\n\nclass DirectionalLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'DirectionalLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.shadow = new DirectionalLightShadow();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.target = source.target.clone();\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nDirectionalLight.prototype.isDirectionalLight = true;\n\nclass AmbientLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'AmbientLight';\n\n\t}\n\n}\n\nAmbientLight.prototype.isAmbientLight = true;\n\nclass RectAreaLight extends Light {\n\n\tconstructor( color, intensity, width = 10, height = 10 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'RectAreaLight';\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in nits)\n\t\treturn this.intensity * this.width * this.height * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in nits) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( this.width * this.height * Math.PI );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n}\n\nRectAreaLight.prototype.isRectAreaLight = true;\n\n/**\n * Primary reference:\n * https://graphics.stanford.edu/papers/envmap/envmap.pdf\n *\n * Secondary reference:\n * https://www.ppsloan.org/publications/StupidSH36.pdf\n */\n\n// 3-band SH defined by 9 coefficients\n\nclass SphericalHarmonics3 {\n\n\tconstructor() {\n\n\t\tthis.coefficients = [];\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients.push( new Vector3() );\n\n\t\t}\n\n\t}\n\n\tset( coefficients ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].copy( coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tzero() {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].set( 0, 0, 0 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// get the radiance in the direction of the normal\n\t// target is a Vector3\n\tgetAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 );\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 0.488603 * y );\n\t\ttarget.addScaledVector( coeff[ 2 ], 0.488603 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 0.488603 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) );\n\t\ttarget.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) );\n\t\ttarget.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) );\n\n\t\treturn target;\n\n\t}\n\n\t// get the irradiance (radiance convolved with cosine lobe) in the direction of the normal\n\t// target is a Vector3\n\t// https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\tgetIrradianceAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603\n\t\ttarget.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548\n\t\ttarget.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3\n\t\ttarget.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274\n\n\t\treturn target;\n\n\t}\n\n\tadd( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].add( sh.coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\taddScaledSH( sh, s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tscale( s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].multiplyScalar( s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tlerp( sh, alpha ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].lerp( sh.coefficients[ i ], alpha );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcopy( sh ) {\n\n\t\treturn this.set( sh.coefficients );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].fromArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].toArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n\t// evaluate the basis functions\n\t// shBasis is an Array[ 9 ]\n\tstatic getBasisAt( normal, shBasis ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t// band 0\n\t\tshBasis[ 0 ] = 0.282095;\n\n\t\t// band 1\n\t\tshBasis[ 1 ] = 0.488603 * y;\n\t\tshBasis[ 2 ] = 0.488603 * z;\n\t\tshBasis[ 3 ] = 0.488603 * x;\n\n\t\t// band 2\n\t\tshBasis[ 4 ] = 1.092548 * x * y;\n\t\tshBasis[ 5 ] = 1.092548 * y * z;\n\t\tshBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 );\n\t\tshBasis[ 7 ] = 1.092548 * x * z;\n\t\tshBasis[ 8 ] = 0.546274 * ( x * x - y * y );\n\n\t}\n\n}\n\nSphericalHarmonics3.prototype.isSphericalHarmonics3 = true;\n\nclass LightProbe extends Light {\n\n\tconstructor( sh = new SphericalHarmonics3(), intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tthis.sh = sh;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.sh.copy( source.sh );\n\n\t\treturn this;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();\n\t\tthis.sh.fromArray( json.sh );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.sh = this.sh.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\nLightProbe.prototype.isLightProbe = true;\n\nclass MaterialLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\t\tthis.textures = {};\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tconst material = new Materials[ json.type ]();\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.sheen !== undefined ) material.sheen = json.sheen;\n\t\tif ( json.sheenColor !== undefined ) material.sheenColor = new Color().setHex( json.sheenColor );\n\t\tif ( json.sheenRoughness !== undefined ) material.sheenRoughness = json.sheenRoughness;\n\t\tif ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.specularIntensity !== undefined ) material.specularIntensity = json.specularIntensity;\n\t\tif ( json.specularColor !== undefined && material.specularColor !== undefined ) material.specularColor.setHex( json.specularColor );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;\n\t\tif ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;\n\t\tif ( json.transmission !== undefined ) material.transmission = json.transmission;\n\t\tif ( json.thickness !== undefined ) material.thickness = json.thickness;\n\t\tif ( json.attenuationDistance !== undefined ) material.attenuationDistance = json.attenuationDistance;\n\t\tif ( json.attenuationColor !== undefined && material.attenuationColor !== undefined ) material.attenuationColor.setHex( json.attenuationColor );\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.combine !== undefined ) material.combine = json.combine;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.shadowSide !== undefined ) material.shadowSide = json.shadowSide;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.format !== undefined ) material.format = json.format;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\n\t\tif ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;\n\t\tif ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;\n\t\tif ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;\n\t\tif ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;\n\t\tif ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask;\n\t\tif ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;\n\t\tif ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;\n\t\tif ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;\n\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== 1 ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.alphaToCoverage !== undefined ) material.alphaToCoverage = json.alphaToCoverage;\n\t\tif ( json.premultipliedAlpha !== undefined ) material.premultipliedAlpha = json.premultipliedAlpha;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\n\t\tif ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped;\n\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\tif ( json.vertexColors !== undefined ) {\n\n\t\t\tif ( typeof json.vertexColors === 'number' ) {\n\n\t\t\t\tmaterial.vertexColors = ( json.vertexColors > 0 ) ? true : false;\n\n\t\t\t} else {\n\n\t\t\t\tmaterial.vertexColors = json.vertexColors;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Shader Material\n\n\t\tif ( json.uniforms !== undefined ) {\n\n\t\t\tfor ( const name in json.uniforms ) {\n\n\t\t\t\tconst uniform = json.uniforms[ name ];\n\n\t\t\t\tmaterial.uniforms[ name ] = {};\n\n\t\t\t\tswitch ( uniform.type ) {\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = getTexture( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Color().setHex( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector2().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = uniform.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.defines !== undefined ) material.defines = json.defines;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\n\t\tif ( json.extensions !== undefined ) {\n\n\t\t\tfor ( const key in json.extensions ) {\n\n\t\t\t\tmaterial.extensions[ key ] = json.extensions[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Deprecated\n\n\t\tif ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\t\tif ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap );\n\n\t\tif ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap );\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tlet normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\t\tif ( json.specularIntensityMap !== undefined ) material.specularIntensityMap = getTexture( json.specularIntensityMap );\n\t\tif ( json.specularColorMap !== undefined ) material.specularColorMap = getTexture( json.specularColorMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\t\tif ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\t\tif ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\tif ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap );\n\t\tif ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap );\n\t\tif ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap );\n\t\tif ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale );\n\n\t\tif ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );\n\t\tif ( json.thicknessMap !== undefined ) material.thicknessMap = getTexture( json.thicknessMap );\n\n\t\tif ( json.sheenColorMap !== undefined ) material.sheenColorMap = getTexture( json.sheenColorMap );\n\t\tif ( json.sheenRoughnessMap !== undefined ) material.sheenRoughnessMap = getTexture( json.sheenRoughnessMap );\n\n\t\treturn material;\n\n\t}\n\n\tsetTextures( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\n\n\t}\n\n}\n\nclass LoaderUtils {\n\n\tstatic decodeText( array ) {\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tlet s = '';\n\n\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\t// merges multi-byte utf-8 characters.\n\n\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t} catch ( e ) { // see #16358\n\n\t\t\treturn s;\n\n\t\t}\n\n\t}\n\n\tstatic extractUrlBase( url ) {\n\n\t\tconst index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.substr( 0, index + 1 );\n\n\t}\n\n\tstatic resolveURL( url, path ) {\n\n\t\t// Invalid URL\n\t\tif ( typeof url !== 'string' || url === '' ) return '';\n\n\t\t// Host Relative URL\n\t\tif ( /^https?:\\/\\//i.test( path ) && /^\\//.test( url ) ) {\n\n\t\t\tpath = path.replace( /(^https?:\\/\\/[^\\/]+).*/i, '$1' );\n\n\t\t}\n\n\t\t// Absolute URL http://,https://,//\n\t\tif ( /^(https?:)?\\/\\//i.test( url ) ) return url;\n\n\t\t// Data URI\n\t\tif ( /^data:.*,.*$/i.test( url ) ) return url;\n\n\t\t// Blob URL\n\t\tif ( /^blob:.*$/i.test( url ) ) return url;\n\n\t\t// Relative URL\n\t\treturn path + url;\n\n\t}\n\n}\n\nclass InstancedBufferGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'InstancedBufferGeometry';\n\t\tthis.instanceCount = Infinity;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.instanceCount = source.instanceCount;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON( this );\n\n\t\tdata.instanceCount = this.instanceCount;\n\n\t\tdata.isInstancedBufferGeometry = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nInstancedBufferGeometry.prototype.isInstancedBufferGeometry = true;\n\nclass BufferGeometryLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst interleavedBufferMap = {};\n\t\tconst arrayBufferMap = {};\n\n\t\tfunction getInterleavedBuffer( json, uuid ) {\n\n\t\t\tif ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ];\n\n\t\t\tconst interleavedBuffers = json.interleavedBuffers;\n\t\t\tconst interleavedBuffer = interleavedBuffers[ uuid ];\n\n\t\t\tconst buffer = getArrayBuffer( json, interleavedBuffer.buffer );\n\n\t\t\tconst array = getTypedArray( interleavedBuffer.type, buffer );\n\t\t\tconst ib = new InterleavedBuffer( array, interleavedBuffer.stride );\n\t\t\tib.uuid = interleavedBuffer.uuid;\n\n\t\t\tinterleavedBufferMap[ uuid ] = ib;\n\n\t\t\treturn ib;\n\n\t\t}\n\n\t\tfunction getArrayBuffer( json, uuid ) {\n\n\t\t\tif ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ];\n\n\t\t\tconst arrayBuffers = json.arrayBuffers;\n\t\t\tconst arrayBuffer = arrayBuffers[ uuid ];\n\n\t\t\tconst ab = new Uint32Array( arrayBuffer ).buffer;\n\n\t\t\tarrayBufferMap[ uuid ] = ab;\n\n\t\t\treturn ab;\n\n\t\t}\n\n\t\tconst geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry();\n\n\t\tconst index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst typedArray = getTypedArray( index.type, index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tconst attributes = json.data.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\t\t\tlet bufferAttribute;\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t} else {\n\n\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\tconst bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute;\n\t\t\t\tbufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\tif ( attribute.usage !== undefined ) bufferAttribute.setUsage( attribute.usage );\n\n\t\t\tif ( attribute.updateRange !== undefined ) {\n\n\t\t\t\tbufferAttribute.updateRange.offset = attribute.updateRange.offset;\n\t\t\t\tbufferAttribute.updateRange.count = attribute.updateRange.count;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( key, bufferAttribute );\n\n\t\t}\n\n\t\tconst morphAttributes = json.data.morphAttributes;\n\n\t\tif ( morphAttributes ) {\n\n\t\t\tfor ( const key in morphAttributes ) {\n\n\t\t\t\tconst attributeArray = morphAttributes[ key ];\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attribute = attributeArray[ i ];\n\t\t\t\t\tlet bufferAttribute;\n\n\t\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\t\t\tbufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\t\t\tarray.push( bufferAttribute );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.morphAttributes[ key ] = array;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst morphTargetsRelative = json.data.morphTargetsRelative;\n\n\t\tif ( morphTargetsRelative ) {\n\n\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t}\n\n\t\tconst groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( let i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tconst center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\tif ( json.name ) geometry.name = json.name;\n\t\tif ( json.userData ) geometry.userData = json.userData;\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nclass ObjectLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tasync loadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tconst text = await loader.loadAsync( url, onProgress );\n\n\t\tconst json = JSON.parse( text );\n\n\t\tconst metadata = json.metadata;\n\n\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\tthrow new Error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\n\t\t}\n\n\t\treturn await scope.parseAsync( json );\n\n\t}\n\n\tparse( json, onLoad ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\n\t\t//\n\n\t\tif ( onLoad !== undefined ) {\n\n\t\t\tlet hasImages = false;\n\n\t\t\tfor ( const uuid in images ) {\n\n\t\t\t\tif ( images[ uuid ] instanceof HTMLImageElement ) {\n\n\t\t\t\t\thasImages = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasImages === false ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tasync parseAsync( json ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = await this.parseImagesAsync( json.images );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\n\t\treturn object;\n\n\t}\n\n\tparseShapes( json ) {\n\n\t\tconst shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n\tparseSkeletons( json, object ) {\n\n\t\tconst skeletons = {};\n\t\tconst bones = {};\n\n\t\t// generate bone lookup table\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isBone ) bones[ child.uuid ] = child;\n\n\t\t} );\n\n\t\t// create skeletons\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst skeleton = new Skeleton().fromJSON( json[ i ], bones );\n\n\t\t\t\tskeletons[ skeleton.uuid ] = skeleton;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn skeletons;\n\n\t}\n\n\tparseGeometries( json, shapes ) {\n\n\t\tconst geometries = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tlet geometry;\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'BufferGeometry':\n\t\t\t\t\tcase 'InstancedBufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Geometry':\n\n\t\t\t\t\t\tconsole.error( 'THREE.ObjectLoader: The legacy Geometry type is no longer supported.' );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( data.type in Geometries ) {\n\n\t\t\t\t\t\t\tgeometry = Geometries[ data.type ].fromJSON( data, shapes );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( `THREE.ObjectLoader: Unsupported geometry type \"${ data.type }\"` );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\tif ( geometry.isBufferGeometry === true && data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t}\n\n\tparseMaterials( json, textures ) {\n\n\t\tconst cache = {}; // MultiMaterial\n\t\tconst materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.type === 'MultiMaterial' ) {\n\n\t\t\t\t\t// Deprecated\n\n\t\t\t\t\tconst array = [];\n\n\t\t\t\t\tfor ( let j = 0; j < data.materials.length; j ++ ) {\n\n\t\t\t\t\t\tconst material = data.materials[ j ];\n\n\t\t\t\t\t\tif ( cache[ material.uuid ] === undefined ) {\n\n\t\t\t\t\t\t\tcache[ material.uuid ] = loader.parse( material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tarray.push( cache[ material.uuid ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = array;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( cache[ data.uuid ] === undefined ) {\n\n\t\t\t\t\t\tcache[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = cache[ data.uuid ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\tparseAnimations( json ) {\n\n\t\tconst animations = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tconst clip = AnimationClip.parse( data );\n\n\t\t\t\tanimations[ clip.uuid ] = clip;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n\tparseImages( json, onLoad ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn loadImage( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tconst manager = new LoadingManager( onLoad );\n\n\t\t\tloader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\timages[ image.uuid ] = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = deserializeImage( image.url );\n\n\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\timages[ image.uuid ] = deserializedImage;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tasync parseImagesAsync( json ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tasync function deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn await loader.loadAsync( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tloader = new ImageLoader( this.manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\timages[ image.uuid ] = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = await deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = await deserializeImage( image.url );\n\n\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\timages[ image.uuid ] = deserializedImage;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tparseTextures( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tconst textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tlet texture;\n\t\t\t\tconst image = images[ data.image ];\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture( image );\n\n\t\t\t\t\tif ( image.length === 6 ) texture.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( image && image.data ) {\n\n\t\t\t\t\t\ttexture = new DataTexture( image.data, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture = new Texture( image );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( image ) texture.needsUpdate = true; // textures can have undefined image data\n\n\t\t\t\t}\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\t\t\t\tif ( data.type !== undefined ) texture.type = data.type;\n\t\t\t\tif ( data.encoding !== undefined ) texture.encoding = data.encoding;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\tif ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;\n\t\t\t\tif ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;\n\n\t\t\t\tif ( data.userData !== undefined ) texture.userData = data.userData;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t}\n\n\tparseObject( data, geometries, materials, textures, animations ) {\n\n\t\tlet object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tfunction getTexture( uuid ) {\n\n\t\t\tif ( textures[ uuid ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined texture', uuid );\n\n\t\t\t}\n\n\t\t\treturn textures[ uuid ];\n\n\t\t}\n\n\t\tlet geometry, material;\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tobject.background = getTexture( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.environment !== undefined ) {\n\n\t\t\t\t\tobject.environment = getTexture( data.environment );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LightProbe':\n\n\t\t\t\tobject = new LightProbe().fromJSON( data );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t \tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\tif ( data.bindMode !== undefined ) object.bindMode = data.bindMode;\n\t\t\t\tif ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix );\n\t\t\t\tif ( data.skeleton !== undefined ) object.skeleton = data.skeleton;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'InstancedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\t\t\t\tconst count = data.count;\n\t\t\t\tconst instanceMatrix = data.instanceMatrix;\n\t\t\t\tconst instanceColor = data.instanceColor;\n\n\t\t\t\tobject = new InstancedMesh( geometry, material, count );\n\t\t\t\tobject.instanceMatrix = new InstancedBufferAttribute( new Float32Array( instanceMatrix.array ), 16 );\n\t\t\t\tif ( instanceColor !== undefined ) object.instanceColor = new InstancedBufferAttribute( new Float32Array( instanceColor.array ), instanceColor.itemSize );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Bone':\n\n\t\t\t\tobject = new Bone();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials, textures, animations ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.animations !== undefined ) {\n\n\t\t\tconst objectAnimations = data.animations;\n\n\t\t\tfor ( let i = 0; i < objectAnimations.length; i ++ ) {\n\n\t\t\t\tconst uuid = objectAnimations[ i ];\n\n\t\t\t\tobject.animations.push( animations[ uuid ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tif ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate;\n\n\t\t\tconst levels = data.levels;\n\n\t\t\tfor ( let l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tconst level = levels[ l ];\n\t\t\t\tconst child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tbindSkeletons( object, skeletons ) {\n\n\t\tif ( Object.keys( skeletons ).length === 0 ) return;\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isSkinnedMesh === true && child.skeleton !== undefined ) {\n\n\t\t\t\tconst skeleton = skeletons[ child.skeleton ];\n\n\t\t\t\tif ( skeleton === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.bind( skeleton, child.bindMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/* DEPRECATED */\n\n\tsetTexturePath( value ) {\n\n\t\tconsole.warn( 'THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().' );\n\t\treturn this.setResourcePath( value );\n\n\t}\n\n}\n\nconst TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping,\n\tCubeUVRefractionMapping: CubeUVRefractionMapping\n};\n\nconst TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nconst TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipmapNearestFilter: NearestMipmapNearestFilter,\n\tNearestMipmapLinearFilter: NearestMipmapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipmapNearestFilter: LinearMipmapNearestFilter,\n\tLinearMipmapLinearFilter: LinearMipmapLinearFilter\n};\n\nclass ImageBitmapLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t\t}\n\n\t\tif ( typeof fetch === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t\t}\n\n\t\tthis.options = { premultiplyAlpha: 'none' };\n\n\t}\n\n\tsetOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst fetchOptions = {};\n\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\t\tfetchOptions.headers = this.requestHeader;\n\n\t\tfetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, Object.assign( scope.options, { colorSpaceConversion: 'none' } ) );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} );\n\n\t\tscope.manager.itemStart( url );\n\n\t}\n\n}\n\nImageBitmapLoader.prototype.isImageBitmapLoader = true;\n\nlet _context;\n\nconst AudioContext = {\n\n\tgetContext: function () {\n\n\t\tif ( _context === undefined ) {\n\n\t\t\t_context = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn _context;\n\n\t},\n\n\tsetContext: function ( value ) {\n\n\t\t_context = value;\n\n\t}\n\n};\n\nclass AudioLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\t\tconst bufferCopy = buffer.slice( 0 );\n\n\t\t\t\tconst context = AudioContext.getContext();\n\t\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t\t} );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n}\n\nclass HemisphereLightProbe extends LightProbe {\n\n\tconstructor( skyColor, groundColor, intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tconst color1 = new Color().set( skyColor );\n\t\tconst color2 = new Color().set( groundColor );\n\n\t\tconst sky = new Vector3( color1.r, color1.g, color1.b );\n\t\tconst ground = new Vector3( color2.r, color2.g, color2.b );\n\n\t\t// without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI );\n\t\tconst c0 = Math.sqrt( Math.PI );\n\t\tconst c1 = c0 * Math.sqrt( 0.75 );\n\n\t\tthis.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 );\n\t\tthis.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 );\n\n\t}\n\n}\n\nHemisphereLightProbe.prototype.isHemisphereLightProbe = true;\n\nclass AmbientLightProbe extends LightProbe {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tconst color1 = new Color().set( color );\n\n\t\t// without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI );\n\t\tthis.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) );\n\n\t}\n\n}\n\nAmbientLightProbe.prototype.isAmbientLightProbe = true;\n\nconst _eyeRight = /*@__PURE__*/ new Matrix4();\nconst _eyeLeft = /*@__PURE__*/ new Matrix4();\n\nclass StereoCamera {\n\n\tconstructor() {\n\n\t\tthis.type = 'StereoCamera';\n\n\t\tthis.aspect = 1;\n\n\t\tthis.eyeSep = 0.064;\n\n\t\tthis.cameraL = new PerspectiveCamera();\n\t\tthis.cameraL.layers.enable( 1 );\n\t\tthis.cameraL.matrixAutoUpdate = false;\n\n\t\tthis.cameraR = new PerspectiveCamera();\n\t\tthis.cameraR.layers.enable( 2 );\n\t\tthis.cameraR.matrixAutoUpdate = false;\n\n\t\tthis._cache = {\n\t\t\tfocus: null,\n\t\t\tfov: null,\n\t\t\taspect: null,\n\t\t\tnear: null,\n\t\t\tfar: null,\n\t\t\tzoom: null,\n\t\t\teyeSep: null\n\t\t};\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst cache = this._cache;\n\n\t\tconst needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov ||\n\t\t\tcache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near ||\n\t\t\tcache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tcache.focus = camera.focus;\n\t\t\tcache.fov = camera.fov;\n\t\t\tcache.aspect = camera.aspect * this.aspect;\n\t\t\tcache.near = camera.near;\n\t\t\tcache.far = camera.far;\n\t\t\tcache.zoom = camera.zoom;\n\t\t\tcache.eyeSep = this.eyeSep;\n\n\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\tconst projectionMatrix = camera.projectionMatrix.clone();\n\t\t\tconst eyeSepHalf = cache.eyeSep / 2;\n\t\t\tconst eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;\n\t\t\tconst ymax = ( cache.near * Math.tan( DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom;\n\t\t\tlet xmin, xmax;\n\n\t\t\t// translate xOffset\n\n\t\t\t_eyeLeft.elements[ 12 ] = - eyeSepHalf;\n\t\t\t_eyeRight.elements[ 12 ] = eyeSepHalf;\n\n\t\t\t// for left eye\n\n\t\t\txmin = - ymax * cache.aspect + eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect + eyeSepOnProjection;\n\n\t\t\tprojectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t// for right eye\n\n\t\t\txmin = - ymax * cache.aspect - eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect - eyeSepOnProjection;\n\n\t\t\tprojectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t}\n\n\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft );\n\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight );\n\n\t}\n\n}\n\nclass Clock {\n\n\tconstructor( autoStart = true ) {\n\n\t\tthis.autoStart = autoStart;\n\n\t\tthis.startTime = 0;\n\t\tthis.oldTime = 0;\n\t\tthis.elapsedTime = 0;\n\n\t\tthis.running = false;\n\n\t}\n\n\tstart() {\n\n\t\tthis.startTime = now();\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t}\n\n\tstop() {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t}\n\n\tgetElapsedTime() {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t}\n\n\tgetDelta() {\n\n\t\tlet diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tconst newTime = now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n}\n\nfunction now() {\n\n\treturn ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n}\n\nconst _position$1 = /*@__PURE__*/ new Vector3();\nconst _quaternion$1 = /*@__PURE__*/ new Quaternion();\nconst _scale$1 = /*@__PURE__*/ new Vector3();\nconst _orientation$1 = /*@__PURE__*/ new Vector3();\n\nclass AudioListener extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'AudioListener';\n\n\t\tthis.context = AudioContext.getContext();\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( this.context.destination );\n\n\t\tthis.filter = null;\n\n\t\tthis.timeDelta = 0;\n\n\t\t// private\n\n\t\tthis._clock = new Clock();\n\n\t}\n\n\tgetInput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tremoveFilter() {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.filter;\n\n\t}\n\n\tsetFilter( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t\treturn this;\n\n\t}\n\n\tgetMasterVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetMasterVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tconst listener = this.context.listener;\n\t\tconst up = this.up;\n\n\t\tthis.timeDelta = this._clock.getDelta();\n\n\t\tthis.matrixWorld.decompose( _position$1, _quaternion$1, _scale$1 );\n\n\t\t_orientation$1.set( 0, 0, - 1 ).applyQuaternion( _quaternion$1 );\n\n\t\tif ( listener.positionX ) {\n\n\t\t\t// code path for Chrome (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.timeDelta;\n\n\t\t\tlistener.positionX.linearRampToValueAtTime( _position$1.x, endTime );\n\t\t\tlistener.positionY.linearRampToValueAtTime( _position$1.y, endTime );\n\t\t\tlistener.positionZ.linearRampToValueAtTime( _position$1.z, endTime );\n\t\t\tlistener.forwardX.linearRampToValueAtTime( _orientation$1.x, endTime );\n\t\t\tlistener.forwardY.linearRampToValueAtTime( _orientation$1.y, endTime );\n\t\t\tlistener.forwardZ.linearRampToValueAtTime( _orientation$1.z, endTime );\n\t\t\tlistener.upX.linearRampToValueAtTime( up.x, endTime );\n\t\t\tlistener.upY.linearRampToValueAtTime( up.y, endTime );\n\t\t\tlistener.upZ.linearRampToValueAtTime( up.z, endTime );\n\n\t\t} else {\n\n\t\t\tlistener.setPosition( _position$1.x, _position$1.y, _position$1.z );\n\t\t\tlistener.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass Audio extends Object3D {\n\n\tconstructor( listener ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Audio';\n\n\t\tthis.listener = listener;\n\t\tthis.context = listener.context;\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( listener.getInput() );\n\n\t\tthis.autoplay = false;\n\n\t\tthis.buffer = null;\n\t\tthis.detune = 0;\n\t\tthis.loop = false;\n\t\tthis.loopStart = 0;\n\t\tthis.loopEnd = 0;\n\t\tthis.offset = 0;\n\t\tthis.duration = undefined;\n\t\tthis.playbackRate = 1;\n\t\tthis.isPlaying = false;\n\t\tthis.hasPlaybackControl = true;\n\t\tthis.source = null;\n\t\tthis.sourceType = 'empty';\n\n\t\tthis._startedAt = 0;\n\t\tthis._progress = 0;\n\t\tthis._connected = false;\n\n\t\tthis.filters = [];\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tsetNodeSource( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaElementSource( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaStreamSource( mediaStream ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaStreamNode';\n\t\tthis.source = this.context.createMediaStreamSource( mediaStream );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetBuffer( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t}\n\n\tplay( delay = 0 ) {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._startedAt = this.context.currentTime + delay;\n\n\t\tconst source = this.context.createBufferSource();\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.loopStart = this.loopStart;\n\t\tsource.loopEnd = this.loopEnd;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.start( this._startedAt, this._progress + this.offset, this.duration );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\tthis.setDetune( this.detune );\n\t\tthis.setPlaybackRate( this.playbackRate );\n\n\t\treturn this.connect();\n\n\t}\n\n\tpause() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\t// update current progress\n\n\t\t\tthis._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate;\n\n\t\t\tif ( this.loop === true ) {\n\n\t\t\t\t// ensure _progress does not exceed duration with looped audios\n\n\t\t\t\tthis._progress = this._progress % ( this.duration || this.buffer.duration );\n\n\t\t\t}\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._progress = 0;\n\n\t\tthis.source.stop();\n\t\tthis.source.onended = null;\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t}\n\n\tconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = true;\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = false;\n\n\t\treturn this;\n\n\t}\n\n\tgetFilters() {\n\n\t\treturn this.filters;\n\n\t}\n\n\tsetFilters( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this._connected === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value.slice();\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetDetune( value ) {\n\n\t\tthis.detune = value;\n\n\t\tif ( this.source.detune === undefined ) return; // only set detune when available\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetDetune() {\n\n\t\treturn this.detune;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t}\n\n\tsetFilter( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t}\n\n\tsetPlaybackRate( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetPlaybackRate() {\n\n\t\treturn this.playbackRate;\n\n\t}\n\n\tonEnded() {\n\n\t\tthis.isPlaying = false;\n\n\t}\n\n\tgetLoop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t}\n\n\tsetLoop( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopStart( value ) {\n\n\t\tthis.loopStart = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopEnd( value ) {\n\n\t\tthis.loopEnd = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _position = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\nconst _scale = /*@__PURE__*/ new Vector3();\nconst _orientation = /*@__PURE__*/ new Vector3();\n\nclass PositionalAudio extends Audio {\n\n\tconstructor( listener ) {\n\n\t\tsuper( listener );\n\n\t\tthis.panner = this.context.createPanner();\n\t\tthis.panner.panningModel = 'HRTF';\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.panner;\n\n\t}\n\n\tgetRefDistance() {\n\n\t\treturn this.panner.refDistance;\n\n\t}\n\n\tsetRefDistance( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetRolloffFactor() {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t}\n\n\tsetRolloffFactor( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetDistanceModel() {\n\n\t\treturn this.panner.distanceModel;\n\n\t}\n\n\tsetDistanceModel( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxDistance() {\n\n\t\treturn this.panner.maxDistance;\n\n\t}\n\n\tsetMaxDistance( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.hasPlaybackControl === true && this.isPlaying === false ) return;\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion, _scale );\n\n\t\t_orientation.set( 0, 0, 1 ).applyQuaternion( _quaternion );\n\n\t\tconst panner = this.panner;\n\n\t\tif ( panner.positionX ) {\n\n\t\t\t// code path for Chrome and Firefox (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.listener.timeDelta;\n\n\t\t\tpanner.positionX.linearRampToValueAtTime( _position.x, endTime );\n\t\t\tpanner.positionY.linearRampToValueAtTime( _position.y, endTime );\n\t\t\tpanner.positionZ.linearRampToValueAtTime( _position.z, endTime );\n\t\t\tpanner.orientationX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\tpanner.orientationY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\tpanner.orientationZ.linearRampToValueAtTime( _orientation.z, endTime );\n\n\t\t} else {\n\n\t\t\tpanner.setPosition( _position.x, _position.y, _position.z );\n\t\t\tpanner.setOrientation( _orientation.x, _orientation.y, _orientation.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass AudioAnalyser {\n\n\tconstructor( audio, fftSize = 2048 ) {\n\n\t\tthis.analyser = audio.context.createAnalyser();\n\t\tthis.analyser.fftSize = fftSize;\n\n\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\taudio.getOutput().connect( this.analyser );\n\n\t}\n\n\n\tgetFrequencyData() {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t}\n\n\tgetAverageFrequency() {\n\n\t\tlet value = 0;\n\t\tconst data = this.getFrequencyData();\n\n\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n}\n\nclass PropertyMixer {\n\n\tconstructor( binding, typeName, valueSize ) {\n\n\t\tthis.binding = binding;\n\t\tthis.valueSize = valueSize;\n\n\t\tlet mixFunction,\n\t\t\tmixFunctionAdditive,\n\t\t\tsetIdentity;\n\n\t\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t\t//\n\t\t// interpolators can use .buffer as their .result\n\t\t// the data then goes to 'incoming'\n\t\t//\n\t\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t\t// the cumulative result and are compared to detect\n\t\t// changes\n\t\t//\n\t\t// 'orig' stores the original state of the property\n\t\t//\n\t\t// 'add' is used for additive cumulative results\n\t\t//\n\t\t// 'work' is optional and is only present for quaternion types. It is used\n\t\t// to store intermediate quaternion multiplication results\n\n\t\tswitch ( typeName ) {\n\n\t\t\tcase 'quaternion':\n\t\t\t\tmixFunction = this._slerp;\n\t\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\t\tthis._workIndex = 5;\n\t\t\t\tbreak;\n\n\t\t\tcase 'string':\n\t\t\tcase 'bool':\n\t\t\t\tmixFunction = this._select;\n\n\t\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t\t// additive is not relevant for non-numeric types\n\t\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tmixFunction = this._lerp;\n\t\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t\t}\n\n\t\tthis._mixBufferRegion = mixFunction;\n\t\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\t\tthis._setIdentity = setIdentity;\n\t\tthis._origIndex = 3;\n\t\tthis._addIndex = 4;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tthis.useCount = 0;\n\t\tthis.referenceCount = 0;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'accu'\n\taccumulate( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride;\n\n\t\tlet currentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tconst mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'add'\n\taccumulateAdditive( weight ) {\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = stride * this._addIndex;\n\n\t\tif ( this.cumulativeWeightAdditive === 0 ) {\n\n\t\t\t// add = identity\n\n\t\t\tthis._setIdentity();\n\n\t\t}\n\n\t\t// add := add + incoming * weight\n\n\t\tthis._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );\n\t\tthis.cumulativeWeightAdditive += weight;\n\n\t}\n\n\t// apply the state of 'accu' to the binding when accus differ\n\tapply( accuIndex ) {\n\n\t\tconst stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tconst originalValueOffset = stride * this._origIndex;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tif ( weightAdditive > 0 ) {\n\n\t\t\t// accuN := accuN + additive accuN\n\n\t\t\tthis._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );\n\n\t\t}\n\n\t\tfor ( let i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState() {\n\n\t\tconst binding = this.binding;\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * this._origIndex;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\t// Add to identity for additive\n\t\tthis._setIdentity();\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t}\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState() {\n\n\t\tconst originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t}\n\n\t_setAdditiveIdentityNumeric() {\n\n\t\tconst startIndex = this._addIndex * this.valueSize;\n\t\tconst endIndex = startIndex + this.valueSize;\n\n\t\tfor ( let i = startIndex; i < endIndex; i ++ ) {\n\n\t\t\tthis.buffer[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\t_setAdditiveIdentityQuaternion() {\n\n\t\tthis._setAdditiveIdentityNumeric();\n\t\tthis.buffer[ this._addIndex * this.valueSize + 3 ] = 1;\n\n\t}\n\n\t_setAdditiveIdentityOther() {\n\n\t\tconst startIndex = this._origIndex * this.valueSize;\n\t\tconst targetIndex = this._addIndex * this.valueSize;\n\n\t\tfor ( let i = 0; i < this.valueSize; i ++ ) {\n\n\t\t\tthis.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];\n\n\t\t}\n\n\t}\n\n\n\t// mix functions\n\n\t_select( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_slerp( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t}\n\n\t_slerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst workOffset = this._workIndex * stride;\n\n\t\t// Store result in intermediate buffer offset\n\t\tQuaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );\n\n\t\t// Slerp to the intermediate result\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );\n\n\t}\n\n\t_lerp( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst s = 1 - t;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n\t_lerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n}\n\n// Characters [].:/ are reserved for track binding syntax.\nconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\nconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n// only latin characters, and the unicode \\p{L} is not yet supported. So\n// instead, we exclude reserved characters and match everything else.\nconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\nconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n// Parent directories, delimited by '/' or ':'. Currently unused, but must\n// be matched to parse the rest of the track name.\nconst _directoryRe = /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\nconst _nodeRe = /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n// Object on target node, and accessor. May not contain reserved\n// characters. Accessor may contain any character except closing bracket.\nconst _objectRe = /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n// Property and accessor. May not contain reserved characters. Accessor may\n// contain any non-bracket characters.\nconst _propertyRe = /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\nconst _trackRe = new RegExp( ''\n\t+ '^'\n\t+ _directoryRe\n\t+ _nodeRe\n\t+ _objectRe\n\t+ _propertyRe\n\t+ '$'\n);\n\nconst _supportedObjectNames = [ 'material', 'materials', 'bones' ];\n\nclass Composite {\n\n\tconstructor( targetGroup, path, optionalParsedPath ) {\n\n\t\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis._targetGroup = targetGroup;\n\t\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n\t}\n\n\tgetValue( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tconst firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t}\n\n\tsetValue( array, offset ) {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t}\n\n\tbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n}\n\n// Note: This class uses a State pattern on a per-method basis:\n// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n// prototype version of these methods with one that represents\n// the bound state. When the property is not found, the methods\n// become no-ops.\nclass PropertyBinding {\n\n\tconstructor( rootNode, path, parsedPath ) {\n\n\t\tthis.path = path;\n\t\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode;\n\n\t\tthis.rootNode = rootNode;\n\n\t\t// initial state of these methods that calls 'bind'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n\n\tstatic create( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tstatic sanitizeNodeName( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t}\n\n\tstatic parseTrackName( trackName ) {\n\n\t\tconst matches = _trackRe.exec( trackName );\n\n\t\tif ( ! matches ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t}\n\n\t\tconst results = {\n\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\tnodeName: matches[ 2 ],\n\t\t\tobjectName: matches[ 3 ],\n\t\t\tobjectIndex: matches[ 4 ],\n\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\tpropertyIndex: matches[ 6 ]\n\t\t};\n\n\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t// include '.' characters).\n\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\tresults.objectName = objectName;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t}\n\n\t\treturn results;\n\n\t}\n\n\tstatic findNode( root, nodeName ) {\n\n\t\tif ( ! nodeName || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tconst bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tconst childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tconst subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable() {}\n\t_setValue_unavailable() {}\n\n\t// Getters\n\n\t_getValue_direct( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.targetObject[ this.propertyName ];\n\n\t}\n\n\t_getValue_array( buffer, offset ) {\n\n\t\tconst source = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t}\n\n\t}\n\n\t_getValue_arrayElement( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t}\n\n\t_getValue_toArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t}\n\n\t// Direct\n\n\t_setValue_direct( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// EntireArray\n\n\t_setValue_array( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t}\n\n\t_setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// ArrayElement\n\n\t_setValue_arrayElement( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// HasToFromArray\n\n\t_setValue_fromArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t}\n\n\t_setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t_getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t}\n\n\t_setValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t}\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind() {\n\n\t\tlet targetObject = this.node;\n\t\tconst parsedPath = this.parsedPath;\n\n\t\tconst objectName = parsedPath.objectName;\n\t\tconst propertyName = parsedPath.propertyName;\n\t\tlet propertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode;\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\\'t found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tlet objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( let i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tconst nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tlet versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tlet bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === 'morphTargetInfluences' ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.geometry.isBufferGeometry ) {\n\n\t\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t}\n\n\tunbind() {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n}\n\nPropertyBinding.Composite = Composite;\n\nPropertyBinding.prototype.BindingType = {\n\tDirect: 0,\n\tEntireArray: 1,\n\tArrayElement: 2,\n\tHasFromToArray: 3\n};\n\nPropertyBinding.prototype.Versioning = {\n\tNone: 0,\n\tNeedsUpdate: 1,\n\tMatrixWorldNeedsUpdate: 2\n};\n\nPropertyBinding.prototype.GetterByBindingType = [\n\n\tPropertyBinding.prototype._getValue_direct,\n\tPropertyBinding.prototype._getValue_array,\n\tPropertyBinding.prototype._getValue_arrayElement,\n\tPropertyBinding.prototype._getValue_toArray,\n\n];\n\nPropertyBinding.prototype.SetterByBindingTypeAndVersioning = [\n\n\t[\n\t\t// Direct\n\t\tPropertyBinding.prototype._setValue_direct,\n\t\tPropertyBinding.prototype._setValue_direct_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// EntireArray\n\n\t\tPropertyBinding.prototype._setValue_array,\n\t\tPropertyBinding.prototype._setValue_array_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// ArrayElement\n\t\tPropertyBinding.prototype._setValue_arrayElement,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// HasToFromArray\n\t\tPropertyBinding.prototype._setValue_fromArray,\n\t\tPropertyBinding.prototype._setValue_fromArray_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate,\n\n\t]\n\n];\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * - Add objects you would otherwise pass as 'root' to the\n * constructor or the .clipAction method of AnimationMixer.\n *\n * - Instead pass this object as 'root'.\n *\n * - You can also add and remove objects later when the mixer\n * is running.\n *\n * Note:\n *\n * Objects of this class appear as one object to the mixer,\n * so cache control of the individual objects must be done\n * on the group.\n *\n * Limitation:\n *\n * - The animated properties must be compatible among the\n * all objects in the group.\n *\n * - A single property can either be controlled through a\n * target group or directly, but not both.\n */\n\nclass AnimationObjectGroup {\n\n\tconstructor() {\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// cached objects followed by the active ones\n\t\tthis._objects = Array.prototype.slice.call( arguments );\n\n\t\tthis.nCachedObjects_ = 0; // threshold\n\t\t// note: read by PropertyBinding.Composite\n\n\t\tconst indices = {};\n\t\tthis._indicesByUUID = indices; // for bookkeeping\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t\t}\n\n\t\tthis._paths = []; // inside: string\n\t\tthis._parsedPaths = []; // inside: { we don't care, here }\n\t\tthis._bindings = []; // inside: Array< PropertyBinding >\n\t\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tobjects: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._objects.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tget bindingsPerObject() {\n\n\t\t\t\treturn scope._bindings.length;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tadd() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet knownObject = undefined,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid;\n\t\t\tlet index = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ];\n\n\t\t\t\t\tlet binding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\tremove() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tconst lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// remove & forget\n\tuncache() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_,\n\t\t\tnObjects = objects.length;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tconst lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath;\n\t\tlet index = indicesByPath[ path ];\n\t\tconst bindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tconst paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tconst object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t}\n\n\tunsubscribe_( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n}\n\nAnimationObjectGroup.prototype.isAnimationObjectGroup = true;\n\nclass AnimationAction {\n\n\tconstructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot;\n\t\tthis.blendMode = blendMode;\n\n\t\tconst tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tconst interpolantSettings = {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst interpolant = tracks[ i ].createInterpolant( null );\n\t\t\tinterpolants[ i ] = interpolant;\n\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t}\n\n\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\tthis._interpolants = interpolants; // bound by the mixer\n\n\t\t// inside: PropertyMixer (managed by the mixer)\n\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\tthis._cacheIndex = null; // for the memory manager\n\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\tthis._timeScaleInterpolant = null;\n\t\tthis._weightInterpolant = null;\n\n\t\tthis.loop = LoopRepeat;\n\t\tthis._loopCount = - 1;\n\n\t\t// global mixer time when the action is to be started\n\t\t// it's set back to 'null' upon start of the action\n\t\tthis._startTime = null;\n\n\t\t// scaled local time of the action\n\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1;\n\t\tthis._effectiveTimeScale = 1;\n\n\t\tthis.weight = 1;\n\t\tthis._effectiveWeight = 1;\n\n\t\tthis.repetitions = Infinity; // no. of repetitions when looping\n\n\t\tthis.paused = false; // true -> zero effective time scale\n\t\tthis.enabled = true; // false -> zero effective weight\n\n\t\tthis.clampWhenFinished = false;// keep feeding the last frame?\n\n\t\tthis.zeroSlopeAtStart = true;// for smooth interpolation w/o separate\n\t\tthis.zeroSlopeAtEnd = true;// clips for start, loop and end\n\n\t}\n\n\t// State & Scheduling\n\n\tplay() {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t}\n\n\treset() {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0; // restart clip\n\t\tthis._loopCount = - 1;// forget previous loops\n\t\tthis._startTime = null;// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t}\n\n\tisRunning() {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t}\n\n\t// return true when play has been called\n\tisScheduled() {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t}\n\n\tstartAt( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoop( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t}\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t}\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight() {\n\n\t\treturn this._effectiveWeight;\n\n\t}\n\n\tfadeIn( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t}\n\n\tfadeOut( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t}\n\n\tcrossFadeFrom( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tconst fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcrossFadeTo( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t}\n\n\tstopFading() {\n\n\t\tconst weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale() {\n\n\t\treturn this._effectiveTimeScale;\n\n\t}\n\n\tsetDuration( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\tsyncWith( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\thalt( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t}\n\n\twarp( startTimeScale, endTimeScale, duration ) {\n\n\t\tconst mixer = this._mixer,\n\t\t\tnow = mixer.time,\n\t\t\ttimeScale = this.timeScale;\n\n\t\tlet interpolant = this._timeScaleInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t}\n\n\tstopWarping() {\n\n\t\tconst timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Object Accessors\n\n\tgetMixer() {\n\n\t\treturn this._mixer;\n\n\t}\n\n\tgetClip() {\n\n\t\treturn this._clip;\n\n\t}\n\n\tgetRoot() {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t}\n\n\t// Interna\n\n\t_update( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tconst timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\treturn; // yet to come / don't decide when delta = 0\n\n\t\t\t}\n\n\t\t\t// start\n\n\t\t\tthis._startTime = null; // unschedule\n\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tconst clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tconst weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tconst interpolants = this._interpolants;\n\t\t\tconst propertyMixers = this._propertyBindings;\n\n\t\t\tswitch ( this.blendMode ) {\n\n\t\t\t\tcase AdditiveAnimationBlendMode:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulateAdditive( weight );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase NormalAnimationBlendMode:\n\t\t\t\tdefault:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_updateWeight( time ) {\n\n\t\tlet weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tconst interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t}\n\n\t_updateTimeScale( time ) {\n\n\t\tlet timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tconst interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t}\n\n\t_updateTime( deltaTime ) {\n\n\t\tconst duration = this._clip.duration;\n\t\tconst loop = this.loop;\n\n\t\tlet time = this.time + deltaTime;\n\t\tlet loopCount = this._loopCount;\n\n\t\tconst pingPong = ( loop === LoopPingPong );\n\n\t\tif ( deltaTime === 0 ) {\n\n\t\t\tif ( loopCount === - 1 ) return time;\n\n\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t}\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tbreak handle_stop;\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis.time = time;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tconst loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tconst pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tconst atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.time = time;\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\t_setEndings( atStart, atEnd, pingPong ) {\n\n\t\tconst settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart = ZeroSlopeEnding;\n\t\t\tsettings.endingEnd = ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_scheduleFading( duration, weightNow, weightThen ) {\n\n\t\tconst mixer = this._mixer, now = mixer.time;\n\t\tlet interpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\n\t\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AnimationMixer extends EventDispatcher {\n\n\tconstructor( root ) {\n\n\t\tsuper();\n\n\t\tthis._root = root;\n\t\tthis._initMemoryManager();\n\t\tthis._accuIndex = 0;\n\t\tthis.time = 0;\n\t\tthis.timeScale = 1.0;\n\n\t}\n\n\t_bindAction( action, prototypeAction ) {\n\n\t\tconst root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName;\n\n\t\tlet bindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst track = tracks[ i ],\n\t\t\t\ttrackName = track.name;\n\n\t\t\tlet binding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tconst path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t}\n\n\t_activateAction( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tconst rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t}\n\n\t_deactivateAction( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t}\n\n\t// Memory manager\n\n\t_initMemoryManager() {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t// \tactionByRoot: AnimationAction - lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction( action ) {\n\n\t\tconst index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t}\n\n\t_addInactiveAction( action, clipUuid, rootUuid ) {\n\n\t\tconst actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tlet actionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tconst knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t}\n\n\t_removeInactiveAction( action ) {\n\n\t\tconst actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tconst clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tconst actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t}\n\n\t_removeInactiveBindingsForAction( action ) {\n\n\t\tconst bindings = action._propertyBindings;\n\n\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tconst binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_lendAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions >| inactive actions ]\n\t\t// s a\n\t\t// <-swap->\n\t\t// a s\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t}\n\n\t_takeBackAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions |< inactive actions ]\n\t\t// a s\n\t\t// <-swap->\n\t\t// s a\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t}\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding( binding, rootUuid, trackName ) {\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindings = this._bindings;\n\n\t\tlet bindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t}\n\n\t_removeInactiveBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tif ( Object.keys( bindingByName ).length === 0 ) {\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t}\n\n\t_lendBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t}\n\n\t_takeBackBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t}\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant() {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++;\n\n\t\tlet interpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, this._controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t}\n\n\t_takeBackControlInterpolant( interpolant ) {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t}\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction( clip, optionalRoot, blendMode ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid;\n\n\t\tlet clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip;\n\n\t\tconst clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\n\t\tconst actionsForClip = this._actionsByClip[ clipUuid ];\n\t\tlet prototypeAction = null;\n\n\t\tif ( blendMode === undefined ) {\n\n\t\t\tif ( clipObject !== null ) {\n\n\t\t\t\tblendMode = clipObject.blendMode;\n\n\t\t\t} else {\n\n\t\t\t\tblendMode = NormalAnimationBlendMode;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tconst existingAction = actionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined && existingAction.blendMode === blendMode ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tconst newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t}\n\n\t// get an existing action\n\texistingAction( clip, optionalRoot ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction() {\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions;\n\n\t\tfor ( let i = nActions - 1; i >= 0; -- i ) {\n\n\t\t\tactions[ i ].stop();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// advance the time and update apply the animation\n\tupdate( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( let i = 0; i !== nActions; ++ i ) {\n\n\t\t\tconst action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tconst bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( let i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Allows you to seek to a specific time in an animation.\n\tsetTime( timeInSeconds ) {\n\n\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\t\tfor ( let i = 0; i < this._actions.length; i ++ ) {\n\n\t\t\tthis._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\n\t\t}\n\n\t\treturn this.update( timeInSeconds ); // Update used to set exact time. Returns \"this\" AnimationMixer object.\n\n\t}\n\n\t// return this mixer's root target object\n\tgetRoot() {\n\n\t\treturn this._root;\n\n\t}\n\n\t// free all resources specific to a particular clip\n\tuncacheClip( clip ) {\n\n\t\tconst actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tconst actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tconst action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tconst cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t}\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot( root ) {\n\n\t\tconst rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( const clipUuid in actionsByClip ) {\n\n\t\t\tconst actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( const trackName in bindingByName ) {\n\n\t\t\t\tconst binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remove a targeted clip from the cache\n\tuncacheAction( clip, optionalRoot ) {\n\n\t\tconst action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n}\n\nAnimationMixer.prototype._controlInterpolantsResultBuffer = new Float32Array( 1 );\n\nclass Uniform {\n\n\tconstructor( value ) {\n\n\t\tif ( typeof value === 'string' ) {\n\n\t\t\tconsole.warn( 'THREE.Uniform: Type parameter is no longer needed.' );\n\t\t\tvalue = arguments[ 1 ];\n\n\t\t}\n\n\t\tthis.value = value;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t}\n\n}\n\nclass InstancedInterleavedBuffer extends InterleavedBuffer {\n\n\tconstructor( array, stride, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, stride );\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tconst ib = super.clone( data );\n\n\t\tib.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn ib;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tconst json = super.toJSON( data );\n\n\t\tjson.isInstancedInterleavedBuffer = true;\n\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn json;\n\n\t}\n\n}\n\nInstancedInterleavedBuffer.prototype.isInstancedInterleavedBuffer = true;\n\nclass GLBufferAttribute {\n\n\tconstructor( buffer, type, itemSize, elementSize, count ) {\n\n\t\tthis.buffer = buffer;\n\t\tthis.type = type;\n\t\tthis.itemSize = itemSize;\n\t\tthis.elementSize = elementSize;\n\t\tthis.count = count;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetBuffer( buffer ) {\n\n\t\tthis.buffer = buffer;\n\n\t\treturn this;\n\n\t}\n\n\tsetType( type, elementSize ) {\n\n\t\tthis.type = type;\n\t\tthis.elementSize = elementSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetItemSize( itemSize ) {\n\n\t\tthis.itemSize = itemSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetCount( count ) {\n\n\t\tthis.count = count;\n\n\t\treturn this;\n\n\t}\n\n}\n\nGLBufferAttribute.prototype.isGLBufferAttribute = true;\n\nclass Raycaster {\n\n\tconstructor( origin, direction, near = 0, far = Infinity ) {\n\n\t\tthis.ray = new Ray( origin, direction );\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.camera = null;\n\t\tthis.layers = new Layers();\n\n\t\tthis.params = {\n\t\t\tMesh: {},\n\t\t\tLine: { threshold: 1 },\n\t\t\tLOD: {},\n\t\t\tPoints: { threshold: 1 },\n\t\t\tSprite: {}\n\t\t};\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t}\n\n\tsetFromCamera( coords, camera ) {\n\n\t\tif ( camera && camera.isPerspectiveCamera ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\t\t\tthis.camera = camera;\n\n\t\t} else if ( camera && camera.isOrthographicCamera ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\t\t\tthis.camera = camera;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type: ' + camera.type );\n\n\t\t}\n\n\t}\n\n\tintersectObject( object, recursive = true, intersects = [] ) {\n\n\t\tintersectObject( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n\tintersectObjects( objects, recursive = true, intersects = [] ) {\n\n\t\tfor ( let i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\tif ( object.layers.test( raycaster.layers ) ) {\n\n\t\tobject.raycast( raycaster, intersects );\n\n\t}\n\n\tif ( recursive === true ) {\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up.\n * The azimuthal angle (theta) is measured from the positive z-axis.\n */\n\nclass Spherical {\n\n\tconstructor( radius = 1, phi = 0, theta = 0 ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi; // polar angle\n\t\tthis.theta = theta; // azimuthal angle\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t}\n\n\t// restrict phi to be betwee EPS and PI-EPS\n\tmakeSafe() {\n\n\t\tconst EPS = 0.000001;\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + y * y + z * z );\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( x, z );\n\t\t\tthis.phi = Math.acos( clamp( y / this.radius, - 1, 1 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n */\n\nclass Cylindrical {\n\n\tconstructor( radius = 1, theta = 0, y = 0 ) {\n\n\t\tthis.radius = radius; // distance from the origin to a point in the x-z plane\n\t\tthis.theta = theta; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\t\tthis.y = y; // height above the x-z plane\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + z * z );\n\t\tthis.theta = Math.atan2( x, z );\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$4 = /*@__PURE__*/ new Vector2();\n\nclass Box2 {\n\n\tconstructor( min = new Vector2( + Infinity, + Infinity ), max = new Vector2( - Infinity, - Infinity ) ) {\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$4.copy( size ).multiplyScalar( 0.5 );\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ? false : true;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\tconst clampedPoint = _vector$4.copy( point ).clamp( this.min, this.max );\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nBox2.prototype.isBox2 = true;\n\nconst _startP = /*@__PURE__*/ new Vector3();\nconst _startEnd = /*@__PURE__*/ new Vector3();\n\nclass Line3 {\n\n\tconstructor( start = new Vector3(), end = new Vector3() ) {\n\n\t\tthis.start = start;\n\t\tthis.end = end;\n\n\t}\n\n\tset( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t}\n\n\tdelta( target ) {\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t}\n\n\tdistanceSq() {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t}\n\n\tdistance() {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tclosestPointToPointParameter( point, clampToLine ) {\n\n\t\t_startP.subVectors( point, this.start );\n\t\t_startEnd.subVectors( this.end, this.start );\n\n\t\tconst startEnd2 = _startEnd.dot( _startEnd );\n\t\tconst startEnd_startP = _startEnd.dot( _startP );\n\n\t\tlet t = startEnd_startP / startEnd2;\n\n\t\tif ( clampToLine ) {\n\n\t\t\tt = clamp( t, 0, 1 );\n\n\t\t}\n\n\t\treturn t;\n\n\t}\n\n\tclosestPointToPoint( point, clampToLine, target ) {\n\n\t\tconst t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t}\n\n\tequals( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$3 = /*@__PURE__*/ new Vector3();\n\nclass SpotLightHelper extends Object3D {\n\n\tconstructor( light, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst positions = [\n\t\t\t0, 0, 0, \t0, 0, 1,\n\t\t\t0, 0, 0, \t1, 0, 1,\n\t\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t\t0, 0, 0, \t0, 1, 1,\n\t\t\t0, 0, 0, \t0, - 1, 1\n\t\t];\n\n\t\tfor ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\tconst p1 = ( i / l ) * Math.PI * 2;\n\t\t\tconst p2 = ( j / l ) * Math.PI * 2;\n\n\t\t\tpositions.push(\n\t\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t\t);\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.cone = new LineSegments( geometry, material );\n\t\tthis.add( this.cone );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateMatrixWorld();\n\n\t\tconst coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tconst coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t_vector$3.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( _vector$3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t}\n\n}\n\nconst _vector$2 = /*@__PURE__*/ new Vector3();\nconst _boneMatrix = /*@__PURE__*/ new Matrix4();\nconst _matrixWorldInv = /*@__PURE__*/ new Matrix4();\n\n\nclass SkeletonHelper extends LineSegments {\n\n\tconstructor( object ) {\n\n\t\tconst bones = getBoneList( object );\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = new Color( 0, 0, 1 );\n\t\tconst color2 = new Color( 0, 1, 0 );\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'SkeletonHelper';\n\t\tthis.isSkeletonHelper = true;\n\n\t\tthis.root = object;\n\t\tthis.bones = bones;\n\n\t\tthis.matrix = object.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst bones = this.bones;\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t_matrixWorldInv.copy( this.root.matrixWorld ).invert();\n\n\t\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\n\nfunction getBoneList( object ) {\n\n\tconst boneList = [];\n\n\tif ( object && object.isBone ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( let i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nclass PointLightHelper extends Mesh {\n\n\tconstructor( light, sphereSize, color ) {\n\n\t\tconst geometry = new SphereGeometry( sphereSize, 4, 2 );\n\t\tconst material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'PointLightHelper';\n\n\t\tthis.matrix = this.light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\n\t\t/*\n\t// TODO: delete this comment?\n\tconst distanceGeometry = new THREE.IcosahedronBufferGeometry( 1, 2 );\n\tconst distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tconst d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\t/*\n\t\tconst d = this.light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.visible = true;\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\t\t*/\n\n\t}\n\n}\n\nconst _vector$1 = /*@__PURE__*/ new Vector3();\nconst _color1 = /*@__PURE__*/ new Color();\nconst _color2 = /*@__PURE__*/ new Color();\n\nclass HemisphereLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tconst geometry = new OctahedronGeometry( size );\n\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\t\tif ( this.color === undefined ) this.material.vertexColors = true;\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\t\tconst colors = new Float32Array( position.count * 3 );\n\n\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\t\tthis.add( new Mesh( geometry, this.material ) );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tconst mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tconst colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t_color1.copy( this.light.color );\n\t\t\t_color2.copy( this.light.groundColor );\n\n\t\t\tfor ( let i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tconst color = ( i < ( l / 2 ) ) ? _color1 : _color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tmesh.lookAt( _vector$1.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t}\n\n}\n\nclass GridHelper extends LineSegments {\n\n\tconstructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst center = divisions / 2;\n\t\tconst step = size / divisions;\n\t\tconst halfSize = size / 2;\n\n\t\tconst vertices = [], colors = [];\n\n\t\tfor ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\t\tconst color = i === center ? color1 : color2;\n\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'GridHelper';\n\n\t}\n\n}\n\nclass PolarGridHelper extends LineSegments {\n\n\tconstructor( radius = 10, radials = 16, circles = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\t// create the radials\n\n\t\tfor ( let i = 0; i <= radials; i ++ ) {\n\n\t\t\tconst v = ( i / radials ) * ( Math.PI * 2 );\n\n\t\t\tconst x = Math.sin( v ) * radius;\n\t\t\tconst z = Math.cos( v ) * radius;\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tvertices.push( x, 0, z );\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tcolors.push( color.r, color.g, color.b );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t}\n\n\t\t// create the circles\n\n\t\tfor ( let i = 0; i <= circles; i ++ ) {\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tconst r = radius - ( radius / circles * i );\n\n\t\t\tfor ( let j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t// first vertex\n\n\t\t\t\tlet v = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tlet x = Math.sin( v ) * r;\n\t\t\t\tlet z = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t// second vertex\n\n\t\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'PolarGridHelper';\n\n\t}\n\n}\n\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\nconst _v3 = /*@__PURE__*/ new Vector3();\n\nclass DirectionalLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tif ( size === undefined ) size = 1;\n\n\t\tlet geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [\n\t\t\t- size, size, 0,\n\t\t\tsize, size, 0,\n\t\t\tsize, - size, 0,\n\t\t\t- size, - size, 0,\n\t\t\t- size, size, 0\n\t\t], 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.lightPlane = new Line( geometry, material );\n\t\tthis.add( this.lightPlane );\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\t\tthis.targetLine = new Line( geometry, material );\n\t\tthis.add( this.targetLine );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.lightPlane.geometry.dispose();\n\t\tthis.lightPlane.material.dispose();\n\t\tthis.targetLine.geometry.dispose();\n\t\tthis.targetLine.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\t_v1.setFromMatrixPosition( this.light.matrixWorld );\n\t\t_v2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t_v3.subVectors( _v2, _v1 );\n\n\t\tthis.lightPlane.lookAt( _v2 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( _v2 );\n\t\tthis.targetLine.scale.z = _v3.length();\n\n\t}\n\n}\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _camera = /*@__PURE__*/ new Camera();\n\n/**\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttp://evanw.github.com/lightgl.js/tests/shadowmap.html\n */\n\nclass CameraHelper extends LineSegments {\n\n\tconstructor( camera ) {\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst pointMap = {};\n\n\t\t// colors\n\n\t\tconst colorFrustum = new Color( 0xffaa00 );\n\t\tconst colorCone = new Color( 0xff0000 );\n\t\tconst colorUp = new Color( 0x00aaff );\n\t\tconst colorTarget = new Color( 0xffffff );\n\t\tconst colorCross = new Color( 0x333333 );\n\n\t\t// near\n\n\t\taddLine( 'n1', 'n2', colorFrustum );\n\t\taddLine( 'n2', 'n4', colorFrustum );\n\t\taddLine( 'n4', 'n3', colorFrustum );\n\t\taddLine( 'n3', 'n1', colorFrustum );\n\n\t\t// far\n\n\t\taddLine( 'f1', 'f2', colorFrustum );\n\t\taddLine( 'f2', 'f4', colorFrustum );\n\t\taddLine( 'f4', 'f3', colorFrustum );\n\t\taddLine( 'f3', 'f1', colorFrustum );\n\n\t\t// sides\n\n\t\taddLine( 'n1', 'f1', colorFrustum );\n\t\taddLine( 'n2', 'f2', colorFrustum );\n\t\taddLine( 'n3', 'f3', colorFrustum );\n\t\taddLine( 'n4', 'f4', colorFrustum );\n\n\t\t// cone\n\n\t\taddLine( 'p', 'n1', colorCone );\n\t\taddLine( 'p', 'n2', colorCone );\n\t\taddLine( 'p', 'n3', colorCone );\n\t\taddLine( 'p', 'n4', colorCone );\n\n\t\t// up\n\n\t\taddLine( 'u1', 'u2', colorUp );\n\t\taddLine( 'u2', 'u3', colorUp );\n\t\taddLine( 'u3', 'u1', colorUp );\n\n\t\t// target\n\n\t\taddLine( 'c', 't', colorTarget );\n\t\taddLine( 'p', 'c', colorCross );\n\n\t\t// cross\n\n\t\taddLine( 'cn1', 'cn2', colorCross );\n\t\taddLine( 'cn3', 'cn4', colorCross );\n\n\t\taddLine( 'cf1', 'cf2', colorCross );\n\t\taddLine( 'cf3', 'cf4', colorCross );\n\n\t\tfunction addLine( a, b, color ) {\n\n\t\t\taddPoint( a, color );\n\t\t\taddPoint( b, color );\n\n\t\t}\n\n\t\tfunction addPoint( id, color ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\t\tpointMap[ id ] = [];\n\n\t\t\t}\n\n\t\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'CameraHelper';\n\n\t\tthis.camera = camera;\n\t\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\t\tthis.matrix = camera.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.pointMap = pointMap;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst pointMap = this.pointMap;\n\n\t\tconst w = 1, h = 1;\n\n\t\t// we need just camera projection matrix inverse\n\t\t// world matrix must be identity\n\n\t\t_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 );\n\t\tsetPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 );\n\t\tsetPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 );\n\t\tsetPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 );\n\t\tsetPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 );\n\t\tsetPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 );\n\t\tsetPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 );\n\t\tsetPoint( 'f4', pointMap, geometry, _camera, w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 );\n\t\tsetPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 );\n\t\tsetPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );\n\t\tsetPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );\n\n\t\tsetPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 );\n\t\tsetPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 );\n\t\tsetPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 );\n\t\tsetPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n\nfunction setPoint( point, pointMap, geometry, camera, x, y, z ) {\n\n\t_vector.set( x, y, z ).unproject( camera );\n\n\tconst points = pointMap[ point ];\n\n\tif ( points !== undefined ) {\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tposition.setXYZ( points[ i ], _vector.x, _vector.y, _vector.z );\n\n\t\t}\n\n\t}\n\n}\n\nconst _box = /*@__PURE__*/ new Box3();\n\nclass BoxHelper extends LineSegments {\n\n\tconstructor( object, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\tconst positions = new Float32Array( 8 * 3 );\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.type = 'BoxHelper';\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\t_box.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( _box.isEmpty() ) return;\n\n\t\tconst min = _box.min;\n\t\tconst max = _box.max;\n\n\t\t/*\n\t\t\t5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tconst position = this.geometry.attributes.position;\n\t\tconst array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.object = object;\n\t\tthis.update();\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tLineSegments.prototype.copy.call( this, source );\n\n\t\tthis.object = source.object;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Box3Helper extends LineSegments {\n\n\tconstructor( box, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\t\tconst positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.box = box;\n\n\t\tthis.type = 'Box3Helper';\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst box = this.box;\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tbox.getCenter( this.position );\n\n\t\tbox.getSize( this.scale );\n\n\t\tthis.scale.multiplyScalar( 0.5 );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\nclass PlaneHelper extends Line {\n\n\tconstructor( plane, size = 1, hex = 0xffff00 ) {\n\n\t\tconst color = hex;\n\n\t\tconst positions = [ 1, - 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 ];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.computeBoundingSphere();\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.type = 'PlaneHelper';\n\n\t\tthis.plane = plane;\n\n\t\tthis.size = size;\n\n\t\tconst positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ];\n\n\t\tconst geometry2 = new BufferGeometry();\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\t\tgeometry2.computeBoundingSphere();\n\n\t\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tlet scale = - this.plane.constant;\n\n\t\tif ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter\n\n\t\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, scale );\n\n\t\tthis.children[ 0 ].material.side = ( scale < 0 ) ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here\n\n\t\tthis.lookAt( this.plane.normal );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\nconst _axis = /*@__PURE__*/ new Vector3();\nlet _lineGeometry, _coneGeometry;\n\nclass ArrowHelper extends Object3D {\n\n\t// dir is assumed to be normalized\n\n\tconstructor( dir = new Vector3( 0, 0, 1 ), origin = new Vector3( 0, 0, 0 ), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ArrowHelper';\n\n\t\tif ( _lineGeometry === undefined ) {\n\n\t\t\t_lineGeometry = new BufferGeometry();\n\t\t\t_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\t_coneGeometry = new CylinderGeometry( 0, 0.5, 1, 5, 1 );\n\t\t\t_coneGeometry.translate( 0, - 0.5, 0 );\n\n\t\t}\n\n\t\tthis.position.copy( origin );\n\n\t\tthis.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add( this.line );\n\n\t\tthis.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.cone.matrixAutoUpdate = false;\n\t\tthis.add( this.cone );\n\n\t\tthis.setDirection( dir );\n\t\tthis.setLength( length, headLength, headWidth );\n\n\t}\n\n\tsetDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\t_axis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tconst radians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( _axis, radians );\n\n\t\t}\n\n\t}\n\n\tsetLength( length, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tthis.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458\n\t\tthis.line.updateMatrix();\n\n\t\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\t\tthis.cone.position.y = length;\n\t\tthis.cone.updateMatrix();\n\n\t}\n\n\tsetColor( color ) {\n\n\t\tthis.line.material.color.set( color );\n\t\tthis.cone.material.color.set( color );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tthis.line.copy( source.line );\n\t\tthis.cone.copy( source.cone );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AxesHelper extends LineSegments {\n\n\tconstructor( size = 1 ) {\n\n\t\tconst vertices = [\n\t\t\t0, 0, 0,\tsize, 0, 0,\n\t\t\t0, 0, 0,\t0, size, 0,\n\t\t\t0, 0, 0,\t0, 0, size\n\t\t];\n\n\t\tconst colors = [\n\t\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t\t0, 0, 1,\t0, 0.6, 1\n\t\t];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'AxesHelper';\n\n\t}\n\n\tsetColors( xAxisColor, yAxisColor, zAxisColor ) {\n\n\t\tconst color = new Color();\n\t\tconst array = this.geometry.attributes.color.array;\n\n\t\tcolor.set( xAxisColor );\n\t\tcolor.toArray( array, 0 );\n\t\tcolor.toArray( array, 3 );\n\n\t\tcolor.set( yAxisColor );\n\t\tcolor.toArray( array, 6 );\n\t\tcolor.toArray( array, 9 );\n\n\t\tcolor.set( zAxisColor );\n\t\tcolor.toArray( array, 12 );\n\t\tcolor.toArray( array, 15 );\n\n\t\tthis.geometry.attributes.color.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass ShapePath {\n\n\tconstructor() {\n\n\t\tthis.type = 'ShapePath';\n\n\t\tthis.color = new Color();\n\n\t\tthis.subPaths = [];\n\t\tthis.currentPath = null;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t\treturn this;\n\n\t}\n\n\ttoShapes( isCCW, noHoles ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tconst shapes = [];\n\n\t\t\tfor ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tconst tmpPath = inSubpaths[ i ];\n\n\t\t\t\tconst tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tconst polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tlet inside = false;\n\t\t\tfor ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tlet edgeLowPt = inPolygon[ p ];\n\t\t\t\tlet edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tlet edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tlet edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tconst isClockWise = ShapeUtils.isClockWise;\n\n\t\tconst subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tlet solid, tmpPath, tmpShape;\n\t\tconst shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tlet holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tconst betterShapeHoles = [];\n\t\tconst newShapes = [];\n\t\tlet newShapeHoles = [];\n\t\tlet mainIdx = 0;\n\t\tlet tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( let i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tlet ambiguous = false;\n\t\t\tconst toChange = [];\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tconst sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tconst ho = sho[ hIdx ];\n\t\t\t\t\tlet hole_unassigned = true;\n\n\t\t\t\t\tfor ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } );\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t// console.log(\"ambiguous: \", ambiguous);\n\n\t\t\tif ( toChange.length > 0 ) {\n\n\t\t\t\t// console.log(\"to change: \", toChange);\n\t\t\t\tif ( ! ambiguous )\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet tmpHoles;\n\n\t\tfor ( let i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n}\n\nconst _floatView = new Float32Array( 1 );\nconst _int32View = new Int32Array( _floatView.buffer );\n\nclass DataUtils {\n\n\t// Converts float32 to float16 (stored as uint16 value).\n\n\tstatic toHalfFloat( val ) {\n\n\t\tif ( val > 65504 ) {\n\n\t\t\tconsole.warn( 'THREE.DataUtils.toHalfFloat(): value exceeds 65504.' );\n\n\t\t\tval = 65504; // maximum representable value in float16\n\n\t\t}\n\n\t\t// Source: http://gamedev.stackexchange.com/questions/17326/conversion-of-a-number-from-single-precision-floating-point-representation-to-a/17410#17410\n\n\t\t/* This method is faster than the OpenEXR implementation (very often\n\t\t* used, eg. in Ogre), with the additional benefit of rounding, inspired\n\t\t* by James Tursa?s half-precision code. */\n\n\t\t_floatView[ 0 ] = val;\n\t\tconst x = _int32View[ 0 ];\n\n\t\tlet bits = ( x >> 16 ) & 0x8000; /* Get the sign */\n\t\tlet m = ( x >> 12 ) & 0x07ff; /* Keep one extra bit for rounding */\n\t\tconst e = ( x >> 23 ) & 0xff; /* Using int is faster here */\n\n\t\t/* If zero, or denormal, or exponent underflows too much for a denormal\n\t\t\t* half, return signed zero. */\n\t\tif ( e < 103 ) return bits;\n\n\t\t/* If NaN, return NaN. If Inf or exponent overflow, return Inf. */\n\t\tif ( e > 142 ) {\n\n\t\t\tbits |= 0x7c00;\n\t\t\t/* If exponent was 0xff and one mantissa bit was set, it means NaN,\n\t\t\t\t\t\t* not Inf, so make sure we set one mantissa bit too. */\n\t\t\tbits |= ( ( e == 255 ) ? 0 : 1 ) && ( x & 0x007fffff );\n\t\t\treturn bits;\n\n\t\t}\n\n\t\t/* If exponent underflows but not too much, return a denormal */\n\t\tif ( e < 113 ) {\n\n\t\t\tm |= 0x0800;\n\t\t\t/* Extra rounding may overflow and set mantissa to 0 and exponent\n\t\t\t\t* to 1, which is OK. */\n\t\t\tbits |= ( m >> ( 114 - e ) ) + ( ( m >> ( 113 - e ) ) & 1 );\n\t\t\treturn bits;\n\n\t\t}\n\n\t\tbits |= ( ( e - 112 ) << 10 ) | ( m >> 1 );\n\t\t/* Extra rounding. An overflow will set mantissa to 0 and increment\n\t\t\t* the exponent, which is OK. */\n\t\tbits += m & 1;\n\t\treturn bits;\n\n\t}\n\n}\n\nconst LineStrip = 0;\nconst LinePieces = 1;\nconst NoColors = 0;\nconst FaceColors = 1;\nconst VertexColors = 2;\n\nfunction MeshFaceMaterial( materials ) {\n\n\tconsole.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' );\n\treturn materials;\n\n}\n\nfunction MultiMaterial( materials = [] ) {\n\n\tconsole.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' );\n\tmaterials.isMultiMaterial = true;\n\tmaterials.materials = materials;\n\tmaterials.clone = function () {\n\n\t\treturn materials.slice();\n\n\t};\n\n\treturn materials;\n\n}\n\nfunction PointCloud( geometry, material ) {\n\n\tconsole.warn( 'THREE.PointCloud has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction Particle( material ) {\n\n\tconsole.warn( 'THREE.Particle has been renamed to THREE.Sprite.' );\n\treturn new Sprite( material );\n\n}\n\nfunction ParticleSystem( geometry, material ) {\n\n\tconsole.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction PointCloudMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleBasicMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleSystemMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction Vertex( x, y, z ) {\n\n\tconsole.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' );\n\treturn new Vector3( x, y, z );\n\n}\n\n//\n\nfunction DynamicBufferAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.' );\n\treturn new BufferAttribute( array, itemSize ).setUsage( DynamicDrawUsage );\n\n}\n\nfunction Int8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' );\n\treturn new Int8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' );\n\treturn new Uint8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8ClampedAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' );\n\treturn new Uint8ClampedBufferAttribute( array, itemSize );\n\n}\n\nfunction Int16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' );\n\treturn new Int16BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' );\n\treturn new Uint16BufferAttribute( array, itemSize );\n\n}\n\nfunction Int32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' );\n\treturn new Int32BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' );\n\treturn new Uint32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' );\n\treturn new Float32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float64Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' );\n\treturn new Float64BufferAttribute( array, itemSize );\n\n}\n\n//\n\nCurve.create = function ( construct, getPoint ) {\n\n\tconsole.log( 'THREE.Curve.create() has been deprecated' );\n\n\tconstruct.prototype = Object.create( Curve.prototype );\n\tconstruct.prototype.constructor = construct;\n\tconstruct.prototype.getPoint = getPoint;\n\n\treturn construct;\n\n};\n\n//\n\nPath.prototype.fromPoints = function ( points ) {\n\n\tconsole.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' );\n\treturn this.setFromPoints( points );\n\n};\n\n//\n\nfunction AxisHelper( size ) {\n\n\tconsole.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' );\n\treturn new AxesHelper( size );\n\n}\n\nfunction BoundingBoxHelper( object, color ) {\n\n\tconsole.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' );\n\treturn new BoxHelper( object, color );\n\n}\n\nfunction EdgesHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' );\n\treturn new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\nGridHelper.prototype.setColors = function () {\n\n\tconsole.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' );\n\n};\n\nSkeletonHelper.prototype.update = function () {\n\n\tconsole.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );\n\n};\n\nfunction WireframeHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' );\n\treturn new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\n//\n\nLoader.prototype.extractUrlBase = function ( url ) {\n\n\tconsole.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' );\n\treturn LoaderUtils.extractUrlBase( url );\n\n};\n\nLoader.Handlers = {\n\n\tadd: function ( /* regex, loader */ ) {\n\n\t\tconsole.error( 'THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.' );\n\n\t},\n\n\tget: function ( /* file */ ) {\n\n\t\tconsole.error( 'THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.' );\n\n\t}\n\n};\n\nfunction XHRLoader( manager ) {\n\n\tconsole.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' );\n\treturn new FileLoader( manager );\n\n}\n\nfunction BinaryTextureLoader( manager ) {\n\n\tconsole.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' );\n\treturn new DataTextureLoader( manager );\n\n}\n\n//\n\nBox2.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\nBox2.prototype.empty = function () {\n\n\tconsole.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' );\n\treturn this.isEmpty();\n\n};\n\nBox2.prototype.isIntersectionBox = function ( box ) {\n\n\tconsole.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\treturn this.intersectsBox( box );\n\n};\n\nBox2.prototype.size = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box2: .size() has been renamed to .getSize().' );\n\treturn this.getSize( optionalTarget );\n\n};\n\n//\n\nBox3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\nBox3.prototype.empty = function () {\n\n\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\n\treturn this.isEmpty();\n\n};\n\nBox3.prototype.isIntersectionBox = function ( box ) {\n\n\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\treturn this.intersectsBox( box );\n\n};\n\nBox3.prototype.isIntersectionSphere = function ( sphere ) {\n\n\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\treturn this.intersectsSphere( sphere );\n\n};\n\nBox3.prototype.size = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box3: .size() has been renamed to .getSize().' );\n\treturn this.getSize( optionalTarget );\n\n};\n\n//\n\nSphere.prototype.empty = function () {\n\n\tconsole.warn( 'THREE.Sphere: .empty() has been renamed to .isEmpty().' );\n\treturn this.isEmpty();\n\n};\n\n//\n\nFrustum.prototype.setFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().' );\n\treturn this.setFromProjectionMatrix( m );\n\n};\n\n//\n\nLine3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\n//\n\nMatrix3.prototype.flattenToArrayOffset = function ( array, offset ) {\n\n\tconsole.warn( 'THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' );\n\treturn this.toArray( array, offset );\n\n};\n\nMatrix3.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\n\treturn vector.applyMatrix3( this );\n\n};\n\nMatrix3.prototype.multiplyVector3Array = function ( /* a */ ) {\n\n\tconsole.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' );\n\n};\n\nMatrix3.prototype.applyToBufferAttribute = function ( attribute ) {\n\n\tconsole.warn( 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.' );\n\treturn attribute.applyMatrix3( this );\n\n};\n\nMatrix3.prototype.applyToVector3Array = function ( /* array, offset, length */ ) {\n\n\tconsole.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' );\n\n};\n\nMatrix3.prototype.getInverse = function ( matrix ) {\n\n\tconsole.warn( 'THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\treturn this.copy( matrix ).invert();\n\n};\n\n//\n\nMatrix4.prototype.extractPosition = function ( m ) {\n\n\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\n\treturn this.copyPosition( m );\n\n};\n\nMatrix4.prototype.flattenToArrayOffset = function ( array, offset ) {\n\n\tconsole.warn( 'THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' );\n\treturn this.toArray( array, offset );\n\n};\n\nMatrix4.prototype.getPosition = function () {\n\n\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\treturn new Vector3().setFromMatrixColumn( this, 3 );\n\n};\n\nMatrix4.prototype.setRotationFromQuaternion = function ( q ) {\n\n\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\n\treturn this.makeRotationFromQuaternion( q );\n\n};\n\nMatrix4.prototype.multiplyToArray = function () {\n\n\tconsole.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' );\n\n};\n\nMatrix4.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\treturn vector.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.multiplyVector4 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\treturn vector.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.multiplyVector3Array = function ( /* a */ ) {\n\n\tconsole.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateAxis = function ( v ) {\n\n\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\n\tv.transformDirection( this );\n\n};\n\nMatrix4.prototype.crossVector = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\treturn vector.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.translate = function () {\n\n\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateX = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateY = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateZ = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\n\n};\n\nMatrix4.prototype.rotateByAxis = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\n\n};\n\nMatrix4.prototype.applyToBufferAttribute = function ( attribute ) {\n\n\tconsole.warn( 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.' );\n\treturn attribute.applyMatrix4( this );\n\n};\n\nMatrix4.prototype.applyToVector3Array = function ( /* array, offset, length */ ) {\n\n\tconsole.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' );\n\n};\n\nMatrix4.prototype.makeFrustum = function ( left, right, bottom, top, near, far ) {\n\n\tconsole.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' );\n\treturn this.makePerspective( left, right, top, bottom, near, far );\n\n};\n\nMatrix4.prototype.getInverse = function ( matrix ) {\n\n\tconsole.warn( 'THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\treturn this.copy( matrix ).invert();\n\n};\n\n//\n\nPlane.prototype.isIntersectionLine = function ( line ) {\n\n\tconsole.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' );\n\treturn this.intersectsLine( line );\n\n};\n\n//\n\nQuaternion.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' );\n\treturn vector.applyQuaternion( this );\n\n};\n\nQuaternion.prototype.inverse = function ( ) {\n\n\tconsole.warn( 'THREE.Quaternion: .inverse() has been renamed to invert().' );\n\treturn this.invert();\n\n};\n\n//\n\nRay.prototype.isIntersectionBox = function ( box ) {\n\n\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\treturn this.intersectsBox( box );\n\n};\n\nRay.prototype.isIntersectionPlane = function ( plane ) {\n\n\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\n\treturn this.intersectsPlane( plane );\n\n};\n\nRay.prototype.isIntersectionSphere = function ( sphere ) {\n\n\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\treturn this.intersectsSphere( sphere );\n\n};\n\n//\n\nTriangle.prototype.area = function () {\n\n\tconsole.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' );\n\treturn this.getArea();\n\n};\n\nTriangle.prototype.barycoordFromPoint = function ( point, target ) {\n\n\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\treturn this.getBarycoord( point, target );\n\n};\n\nTriangle.prototype.midpoint = function ( target ) {\n\n\tconsole.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' );\n\treturn this.getMidpoint( target );\n\n};\n\nTriangle.prototypenormal = function ( target ) {\n\n\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\treturn this.getNormal( target );\n\n};\n\nTriangle.prototype.plane = function ( target ) {\n\n\tconsole.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' );\n\treturn this.getPlane( target );\n\n};\n\nTriangle.barycoordFromPoint = function ( point, a, b, c, target ) {\n\n\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\treturn Triangle.getBarycoord( point, a, b, c, target );\n\n};\n\nTriangle.normal = function ( a, b, c, target ) {\n\n\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\treturn Triangle.getNormal( a, b, c, target );\n\n};\n\n//\n\nShape.prototype.extractAllPoints = function ( divisions ) {\n\n\tconsole.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' );\n\treturn this.extractPoints( divisions );\n\n};\n\nShape.prototype.extrude = function ( options ) {\n\n\tconsole.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' );\n\treturn new ExtrudeGeometry( this, options );\n\n};\n\nShape.prototype.makeGeometry = function ( options ) {\n\n\tconsole.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' );\n\treturn new ShapeGeometry( this, options );\n\n};\n\n//\n\nVector2.prototype.fromAttribute = function ( attribute, index, offset ) {\n\n\tconsole.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\treturn this.fromBufferAttribute( attribute, index, offset );\n\n};\n\nVector2.prototype.distanceToManhattan = function ( v ) {\n\n\tconsole.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\treturn this.manhattanDistanceTo( v );\n\n};\n\nVector2.prototype.lengthManhattan = function () {\n\n\tconsole.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' );\n\treturn this.manhattanLength();\n\n};\n\n//\n\nVector3.prototype.setEulerFromRotationMatrix = function () {\n\n\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\n\n};\n\nVector3.prototype.setEulerFromQuaternion = function () {\n\n\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\n\n};\n\nVector3.prototype.getPositionFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\n\treturn this.setFromMatrixPosition( m );\n\n};\n\nVector3.prototype.getScaleFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\n\treturn this.setFromMatrixScale( m );\n\n};\n\nVector3.prototype.getColumnFromMatrix = function ( index, matrix ) {\n\n\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\n\treturn this.setFromMatrixColumn( matrix, index );\n\n};\n\nVector3.prototype.applyProjection = function ( m ) {\n\n\tconsole.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' );\n\treturn this.applyMatrix4( m );\n\n};\n\nVector3.prototype.fromAttribute = function ( attribute, index, offset ) {\n\n\tconsole.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\treturn this.fromBufferAttribute( attribute, index, offset );\n\n};\n\nVector3.prototype.distanceToManhattan = function ( v ) {\n\n\tconsole.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\treturn this.manhattanDistanceTo( v );\n\n};\n\nVector3.prototype.lengthManhattan = function () {\n\n\tconsole.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' );\n\treturn this.manhattanLength();\n\n};\n\n//\n\nVector4.prototype.fromAttribute = function ( attribute, index, offset ) {\n\n\tconsole.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\treturn this.fromBufferAttribute( attribute, index, offset );\n\n};\n\nVector4.prototype.lengthManhattan = function () {\n\n\tconsole.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' );\n\treturn this.manhattanLength();\n\n};\n\n//\n\nObject3D.prototype.getChildByName = function ( name ) {\n\n\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\n\treturn this.getObjectByName( name );\n\n};\n\nObject3D.prototype.renderDepth = function () {\n\n\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\n\n};\n\nObject3D.prototype.translate = function ( distance, axis ) {\n\n\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\n\treturn this.translateOnAxis( axis, distance );\n\n};\n\nObject3D.prototype.getWorldRotation = function () {\n\n\tconsole.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' );\n\n};\n\nObject3D.prototype.applyMatrix = function ( matrix ) {\n\n\tconsole.warn( 'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().' );\n\treturn this.applyMatrix4( matrix );\n\n};\n\nObject.defineProperties( Object3D.prototype, {\n\n\teulerOrder: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\treturn this.rotation.order;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\tthis.rotation.order = value;\n\n\t\t}\n\t},\n\tuseQuaternion: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t}\n\t}\n\n} );\n\nMesh.prototype.setDrawMode = function () {\n\n\tconsole.error( 'THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n};\n\nObject.defineProperties( Mesh.prototype, {\n\n\tdrawMode: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.' );\n\t\t\treturn TrianglesDrawMode;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n\t\t}\n\t}\n\n} );\n\nSkinnedMesh.prototype.initBones = function () {\n\n\tconsole.error( 'THREE.SkinnedMesh: initBones() has been removed.' );\n\n};\n\n//\n\nPerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) {\n\n\tconsole.warn( 'THREE.PerspectiveCamera.setLens is deprecated. ' +\n\t\t\t'Use .setFocalLength and .filmGauge for a photographic setup.' );\n\n\tif ( filmGauge !== undefined ) this.filmGauge = filmGauge;\n\tthis.setFocalLength( focalLength );\n\n};\n\n//\n\nObject.defineProperties( Light.prototype, {\n\tonlyShadow: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .onlyShadow has been removed.' );\n\n\t\t}\n\t},\n\tshadowCameraFov: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' );\n\t\t\tthis.shadow.camera.fov = value;\n\n\t\t}\n\t},\n\tshadowCameraLeft: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' );\n\t\t\tthis.shadow.camera.left = value;\n\n\t\t}\n\t},\n\tshadowCameraRight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' );\n\t\t\tthis.shadow.camera.right = value;\n\n\t\t}\n\t},\n\tshadowCameraTop: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' );\n\t\t\tthis.shadow.camera.top = value;\n\n\t\t}\n\t},\n\tshadowCameraBottom: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' );\n\t\t\tthis.shadow.camera.bottom = value;\n\n\t\t}\n\t},\n\tshadowCameraNear: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' );\n\t\t\tthis.shadow.camera.near = value;\n\n\t\t}\n\t},\n\tshadowCameraFar: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' );\n\t\t\tthis.shadow.camera.far = value;\n\n\t\t}\n\t},\n\tshadowCameraVisible: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' );\n\n\t\t}\n\t},\n\tshadowBias: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' );\n\t\t\tthis.shadow.bias = value;\n\n\t\t}\n\t},\n\tshadowDarkness: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowDarkness has been removed.' );\n\n\t\t}\n\t},\n\tshadowMapWidth: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' );\n\t\t\tthis.shadow.mapSize.width = value;\n\n\t\t}\n\t},\n\tshadowMapHeight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' );\n\t\t\tthis.shadow.mapSize.height = value;\n\n\t\t}\n\t}\n} );\n\n//\n\nObject.defineProperties( BufferAttribute.prototype, {\n\n\tlength: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' );\n\t\t\treturn this.array.length;\n\n\t\t}\n\t},\n\tdynamic: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\treturn this.usage === DynamicDrawUsage;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\tthis.setUsage( DynamicDrawUsage );\n\n\t\t}\n\t}\n\n} );\n\nBufferAttribute.prototype.setDynamic = function ( value ) {\n\n\tconsole.warn( 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\treturn this;\n\n};\n\nBufferAttribute.prototype.copyIndicesArray = function ( /* indices */ ) {\n\n\tconsole.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' );\n\n},\n\nBufferAttribute.prototype.setArray = function ( /* array */ ) {\n\n\tconsole.error( 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n};\n\n//\n\nBufferGeometry.prototype.addIndex = function ( index ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\n\tthis.setIndex( index );\n\n};\n\nBufferGeometry.prototype.addAttribute = function ( name, attribute ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().' );\n\n\tif ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\n\n\t\treturn this.setAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\n\n\t}\n\n\tif ( name === 'index' ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' );\n\t\tthis.setIndex( attribute );\n\n\t\treturn this;\n\n\t}\n\n\treturn this.setAttribute( name, attribute );\n\n};\n\nBufferGeometry.prototype.addDrawCall = function ( start, count, indexOffset ) {\n\n\tif ( indexOffset !== undefined ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\n\n\t}\n\n\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\n\tthis.addGroup( start, count );\n\n};\n\nBufferGeometry.prototype.clearDrawCalls = function () {\n\n\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\n\tthis.clearGroups();\n\n};\n\nBufferGeometry.prototype.computeOffsets = function () {\n\n\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\n\n};\n\nBufferGeometry.prototype.removeAttribute = function ( name ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().' );\n\n\treturn this.deleteAttribute( name );\n\n};\n\nBufferGeometry.prototype.applyMatrix = function ( matrix ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\treturn this.applyMatrix4( matrix );\n\n};\n\nObject.defineProperties( BufferGeometry.prototype, {\n\n\tdrawcalls: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t},\n\toffsets: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t}\n\n} );\n\nInterleavedBuffer.prototype.setDynamic = function ( value ) {\n\n\tconsole.warn( 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\treturn this;\n\n};\n\nInterleavedBuffer.prototype.setArray = function ( /* array */ ) {\n\n\tconsole.error( 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n};\n\n//\n\nExtrudeGeometry.prototype.getArrays = function () {\n\n\tconsole.error( 'THREE.ExtrudeGeometry: .getArrays() has been removed.' );\n\n};\n\nExtrudeGeometry.prototype.addShapeList = function () {\n\n\tconsole.error( 'THREE.ExtrudeGeometry: .addShapeList() has been removed.' );\n\n};\n\nExtrudeGeometry.prototype.addShape = function () {\n\n\tconsole.error( 'THREE.ExtrudeGeometry: .addShape() has been removed.' );\n\n};\n\n//\n\nScene.prototype.dispose = function () {\n\n\tconsole.error( 'THREE.Scene: .dispose() has been removed.' );\n\n};\n\n//\n\nUniform.prototype.onUpdate = function () {\n\n\tconsole.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' );\n\treturn this;\n\n};\n\n//\n\nObject.defineProperties( Material.prototype, {\n\n\twrapAround: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t}\n\t},\n\n\toverdraw: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t}\n\t},\n\n\twrapRGB: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapRGB has been removed.' );\n\t\t\treturn new Color();\n\n\t\t}\n\t},\n\n\tshading: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\tthis.flatShading = ( value === FlatShading );\n\n\t\t}\n\t},\n\n\tstencilMask: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\treturn this.stencilFuncMask;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\tthis.stencilFuncMask = value;\n\n\t\t}\n\t},\n\n\tvertexTangents: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .vertexTangents has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .vertexTangents has been removed.' );\n\n\t\t}\n\t},\n\n} );\n\nObject.defineProperties( ShaderMaterial.prototype, {\n\n\tderivatives: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\treturn this.extensions.derivatives;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\tthis.extensions.derivatives = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nWebGLRenderer.prototype.clearTarget = function ( renderTarget, color, depth, stencil ) {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' );\n\tthis.setRenderTarget( renderTarget );\n\tthis.clear( color, depth, stencil );\n\n};\n\nWebGLRenderer.prototype.animate = function ( callback ) {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' );\n\tthis.setAnimationLoop( callback );\n\n};\n\nWebGLRenderer.prototype.getCurrentRenderTarget = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' );\n\treturn this.getRenderTarget();\n\n};\n\nWebGLRenderer.prototype.getMaxAnisotropy = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' );\n\treturn this.capabilities.getMaxAnisotropy();\n\n};\n\nWebGLRenderer.prototype.getPrecision = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' );\n\treturn this.capabilities.precision;\n\n};\n\nWebGLRenderer.prototype.resetGLState = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' );\n\treturn this.state.reset();\n\n};\n\nWebGLRenderer.prototype.supportsFloatTextures = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).' );\n\treturn this.extensions.get( 'OES_texture_float' );\n\n};\n\nWebGLRenderer.prototype.supportsHalfFloatTextures = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).' );\n\treturn this.extensions.get( 'OES_texture_half_float' );\n\n};\n\nWebGLRenderer.prototype.supportsStandardDerivatives = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).' );\n\treturn this.extensions.get( 'OES_standard_derivatives' );\n\n};\n\nWebGLRenderer.prototype.supportsCompressedTextureS3TC = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).' );\n\treturn this.extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n};\n\nWebGLRenderer.prototype.supportsCompressedTexturePVRTC = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).' );\n\treturn this.extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n};\n\nWebGLRenderer.prototype.supportsBlendMinMax = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).' );\n\treturn this.extensions.get( 'EXT_blend_minmax' );\n\n};\n\nWebGLRenderer.prototype.supportsVertexTextures = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' );\n\treturn this.capabilities.vertexTextures;\n\n};\n\nWebGLRenderer.prototype.supportsInstancedArrays = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).' );\n\treturn this.extensions.get( 'ANGLE_instanced_arrays' );\n\n};\n\nWebGLRenderer.prototype.enableScissorTest = function ( boolean ) {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );\n\tthis.setScissorTest( boolean );\n\n};\n\nWebGLRenderer.prototype.initMaterial = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.addPrePlugin = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.addPostPlugin = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.updateShadowMap = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setFaceCulling = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.allocTextureUnit = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .allocTextureUnit() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setTexture = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setTexture() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setTexture2D = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setTexture2D() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.setTextureCube = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setTextureCube() has been removed.' );\n\n};\n\nWebGLRenderer.prototype.getActiveMipMapLevel = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().' );\n\treturn this.getActiveMipmapLevel();\n\n};\n\nObject.defineProperties( WebGLRenderer.prototype, {\n\n\tshadowMapEnabled: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.enabled;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' );\n\t\t\tthis.shadowMap.enabled = value;\n\n\t\t}\n\t},\n\tshadowMapType: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' );\n\t\t\tthis.shadowMap.type = value;\n\n\t\t}\n\t},\n\tshadowMapCullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\tcontext: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' );\n\t\t\treturn this.getContext();\n\n\t\t}\n\t},\n\tvr: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .vr has been renamed to .xr' );\n\t\t\treturn this.xr;\n\n\t\t}\n\t},\n\tgammaInput: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\n\t\t}\n\t},\n\tgammaOutput: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\tthis.outputEncoding = ( value === true ) ? sRGBEncoding : LinearEncoding;\n\n\t\t}\n\t},\n\ttoneMappingWhitePoint: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\t\t\treturn 1.0;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\n\t\t}\n\t},\n\n} );\n\nObject.defineProperties( WebGLShadowMap.prototype, {\n\n\tcullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* cullFace */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderReverseSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderSingleSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t}\n\n} );\n\nfunction WebGLRenderTargetCube( width, height, options ) {\n\n\tconsole.warn( 'THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).' );\n\treturn new WebGLCubeRenderTarget( width, options );\n\n}\n\n//\n\nObject.defineProperties( WebGLRenderTarget.prototype, {\n\n\twrapS: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\treturn this.texture.wrapS;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\tthis.texture.wrapS = value;\n\n\t\t}\n\t},\n\twrapT: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\treturn this.texture.wrapT;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\tthis.texture.wrapT = value;\n\n\t\t}\n\t},\n\tmagFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\treturn this.texture.magFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\tthis.texture.magFilter = value;\n\n\t\t}\n\t},\n\tminFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\treturn this.texture.minFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\tthis.texture.minFilter = value;\n\n\t\t}\n\t},\n\tanisotropy: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\treturn this.texture.anisotropy;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\tthis.texture.anisotropy = value;\n\n\t\t}\n\t},\n\toffset: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\treturn this.texture.offset;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\tthis.texture.offset = value;\n\n\t\t}\n\t},\n\trepeat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\treturn this.texture.repeat;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\tthis.texture.repeat = value;\n\n\t\t}\n\t},\n\tformat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\treturn this.texture.format;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\tthis.texture.format = value;\n\n\t\t}\n\t},\n\ttype: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\treturn this.texture.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\tthis.texture.type = value;\n\n\t\t}\n\t},\n\tgenerateMipmaps: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\treturn this.texture.generateMipmaps;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\tthis.texture.generateMipmaps = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nAudio.prototype.load = function ( file ) {\n\n\tconsole.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' );\n\tconst scope = this;\n\tconst audioLoader = new AudioLoader();\n\taudioLoader.load( file, function ( buffer ) {\n\n\t\tscope.setBuffer( buffer );\n\n\t} );\n\treturn this;\n\n};\n\n\nAudioAnalyser.prototype.getData = function () {\n\n\tconsole.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' );\n\treturn this.getFrequencyData();\n\n};\n\n//\n\nCubeCamera.prototype.updateCubeMap = function ( renderer, scene ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' );\n\treturn this.update( renderer, scene );\n\n};\n\nCubeCamera.prototype.clear = function ( renderer, color, depth, stencil ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .clear() is now .renderTarget.clear().' );\n\treturn this.renderTarget.clear( renderer, color, depth, stencil );\n\n};\n\nImageUtils.crossOrigin = undefined;\n\nImageUtils.loadTexture = function ( url, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\n\n\tconst loader = new TextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tconst texture = loader.load( url, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\nImageUtils.loadTextureCube = function ( urls, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\n\n\tconst loader = new CubeTextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tconst texture = loader.load( urls, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\nImageUtils.loadCompressedTexture = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\nImageUtils.loadCompressedTextureCube = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\n//\n\nfunction CanvasRenderer() {\n\n\tconsole.error( 'THREE.CanvasRenderer has been removed' );\n\n}\n\n//\n\nfunction JSONLoader() {\n\n\tconsole.error( 'THREE.JSONLoader has been removed.' );\n\n}\n\n//\n\nconst SceneUtils = {\n\n\tcreateMultiMaterialObject: function ( /* geometry, materials */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t},\n\n\tdetach: function ( /* child, parent, scene */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t},\n\n\tattach: function ( /* child, scene, parent */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t}\n\n};\n\n//\n\nfunction LensFlare() {\n\n\tconsole.error( 'THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js' );\n\n}\n\n//\n\nfunction ParametricGeometry() {\n\n\tconsole.error( 'THREE.ParametricGeometry has been moved to /examples/jsm/geometries/ParametricGeometry.js' );\n\treturn new BufferGeometry();\n\n}\n\nfunction TextGeometry() {\n\n\tconsole.error( 'THREE.TextGeometry has been moved to /examples/jsm/geometries/TextGeometry.js' );\n\treturn new BufferGeometry();\n\n}\n\nfunction FontLoader() {\n\n\tconsole.error( 'THREE.FontLoader has been moved to /examples/jsm/loaders/FontLoader.js' );\n\n}\n\nfunction Font() {\n\n\tconsole.error( 'THREE.Font has been moved to /examples/jsm/loaders/FontLoader.js' );\n\n}\n\nfunction ImmediateRenderObject() {\n\n\tconsole.error( 'THREE.ImmediateRenderObject has been removed.' );\n\n}\n\nif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t/* eslint-disable no-undef */\n\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\trevision: REVISION,\n\t} } ) );\n\t/* eslint-enable no-undef */\n\n}\n\nif ( typeof window !== 'undefined' ) {\n\n\tif ( window.__THREE__ ) {\n\n\t\tconsole.warn( 'WARNING: Multiple instances of Three.js being imported.' );\n\n\t} else {\n\n\t\twindow.__THREE__ = REVISION;\n\n\t}\n\n}\n\nexport { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AlphaFormat, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AmbientLightProbe, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, AxisHelper, BackSide, BasicDepthPacking, BasicShadowMap, BinaryTextureLoader, Bone, BooleanKeyframeTrack, BoundingBoxHelper, Box2, Box3, Box3Helper, BoxGeometry as BoxBufferGeometry, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasRenderer, CanvasTexture, CatmullRomCurve3, CineonToneMapping, CircleGeometry as CircleBufferGeometry, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, CompressedTexture, CompressedTextureLoader, ConeGeometry as ConeBufferGeometry, ConeGeometry, CubeCamera, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubeUVRefractionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderGeometry as CylinderBufferGeometry, CylinderGeometry, Cylindrical, DataTexture, DataTexture2DArray, DataTexture3D, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry as DodecahedronBufferGeometry, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicBufferAttribute, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EdgesHelper, EllipseCurve, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExtrudeGeometry as ExtrudeBufferGeometry, ExtrudeGeometry, FaceColors, FileLoader, FlatShading, Float16BufferAttribute, Float32Attribute, Float32BufferAttribute, Float64Attribute, Float64BufferAttribute, FloatType, Fog, FogExp2, Font, FontLoader, FrontSide, Frustum, GLBufferAttribute, GLSL1, GLSL3, GammaEncoding, GreaterDepth, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HalfFloatType, HemisphereLight, HemisphereLightHelper, HemisphereLightProbe, IcosahedronGeometry as IcosahedronBufferGeometry, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, ImmediateRenderObject, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16Attribute, Int16BufferAttribute, Int32Attribute, Int32BufferAttribute, Int8Attribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InvertStencilOp, JSONLoader, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry as LatheBufferGeometry, LatheGeometry, Layers, LensFlare, LessDepth, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LinePieces, LineSegments, LineStrip, LinearEncoding, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearToneMapping, Loader, LoaderUtils, LoadingManager, LogLuvEncoding, LoopOnce, LoopPingPong, LoopRepeat, LuminanceAlphaFormat, LuminanceFormat, MOUSE, Material, MaterialLoader, MathUtils as Math, MathUtils, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshFaceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiMaterial, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeverDepth, NeverStencilFunc, NoBlending, NoColors, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronGeometry as OctahedronBufferGeometry, OctahedronGeometry, OneFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, ParametricGeometry, Particle, ParticleBasicMaterial, ParticleSystem, ParticleSystemMaterial, Path, PerspectiveCamera, Plane, PlaneGeometry as PlaneBufferGeometry, PlaneGeometry, PlaneHelper, PointCloud, PointCloudMaterial, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry as PolyhedronBufferGeometry, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, REVISION, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBDEncoding, RGBEEncoding, RGBEFormat, RGBFormat, RGBIntegerFormat, RGBM16Encoding, RGBM7Encoding, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RingGeometry as RingBufferGeometry, RingGeometry, SRGB8_ALPHA8_ASTC_10x10_Format, SRGB8_ALPHA8_ASTC_10x5_Format, SRGB8_ALPHA8_ASTC_10x6_Format, SRGB8_ALPHA8_ASTC_10x8_Format, SRGB8_ALPHA8_ASTC_12x10_Format, SRGB8_ALPHA8_ASTC_12x12_Format, SRGB8_ALPHA8_ASTC_4x4_Format, SRGB8_ALPHA8_ASTC_5x4_Format, SRGB8_ALPHA8_ASTC_5x5_Format, SRGB8_ALPHA8_ASTC_6x5_Format, SRGB8_ALPHA8_ASTC_6x6_Format, SRGB8_ALPHA8_ASTC_8x5_Format, SRGB8_ALPHA8_ASTC_8x6_Format, SRGB8_ALPHA8_ASTC_8x8_Format, Scene, SceneUtils, ShaderChunk, ShaderLib, ShaderMaterial, ShadowMaterial, Shape, ShapeGeometry as ShapeBufferGeometry, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, SmoothShading, Sphere, SphereGeometry as SphereBufferGeometry, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronGeometry as TetrahedronBufferGeometry, TetrahedronGeometry, TextGeometry, Texture, TextureLoader, TorusGeometry as TorusBufferGeometry, TorusGeometry, TorusKnotGeometry as TorusKnotBufferGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry as TubeBufferGeometry, TubeGeometry, UVMapping, Uint16Attribute, Uint16BufferAttribute, Uint32Attribute, Uint32BufferAttribute, Uint8Attribute, Uint8BufferAttribute, Uint8ClampedAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt248Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShort565Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, Vertex, VertexColors, VideoTexture, WebGL1Renderer, WebGLCubeRenderTarget, WebGLMultipleRenderTargets, WebGLMultisampleRenderTarget, WebGLRenderTarget, WebGLRenderTargetCube, WebGLRenderer, WebGLUtils, WireframeGeometry, WireframeHelper, WrapAroundEnding, XHRLoader, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, sRGBEncoding };\n","export default function(x, y, z) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n if (z == null) z = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0,\n sz = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x || 0, sy += node.y || 0, sz += node.z || 0;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, sz = (sz / n - z) * strength, i = 0; i < n; ++i) {\n node = nodes[i];\n if (sx) { node.x -= sx }\n if (sy) { node.y -= sy; }\n if (sz) { node.z -= sz; }\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.z = function(_) {\n return arguments.length ? (z = +_, force) : z;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n","export default function(d) {\n var x = +this._x.call(null, d);\n return add(this.cover(x), x, d);\n}\n\nfunction add(tree, x, d) {\n if (isNaN(x)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n x1 = tree._x1,\n xm,\n xp,\n right,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (parent = node, !(node = node[i = +right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n if (x === xp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(2) : tree._root = new Array(2);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n } while ((i = +right) === (j = +(xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var i, n = data.length,\n x,\n xz = new Array(n),\n x0 = Infinity,\n x1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, data[i]))) continue;\n xz[i] = x;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0).cover(x1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x) {\n if (isNaN(x = +x)) return this; // ignore invalid points\n\n var x0 = this._x0,\n x1 = this._x1;\n\n // If the binarytree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing half boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1) {\n i = +(x < x0);\n parent = new Array(2), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z; break;\n case 1: x0 = x1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._x1 = x1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0]).cover(+_[1][0])\n : isNaN(this._x0) ? undefined : [[this._x0], [this._x1]];\n}\n","export default function(node, x0, x1) {\n this.node = node;\n this.x0 = x0;\n this.x1 = x1;\n}\n","import Half from \"./half\";\n\nexport default function(x, radius) {\n var data,\n x0 = this._x0,\n x1,\n x2,\n x3 = this._x1,\n halves = [],\n node = this._root,\n q,\n i;\n\n if (node) halves.push(new Half(node, x0, x3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius;\n x3 = x + radius;\n }\n\n while (q = halves.pop()) {\n\n // Stop searching if this half can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (x2 = q.x1) < x0) continue;\n\n // Bisect the current half.\n if (node.length) {\n var xm = (x1 + x2) / 2;\n\n halves.push(\n new Half(node[1], xm, x2),\n new Half(node[0], x1, xm)\n );\n\n // Visit the closest half first.\n if (i = +(x >= xm)) {\n q = halves[halves.length - 1];\n halves[halves.length - 1] = halves[halves.length - 1 - i];\n halves[halves.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var d = Math.abs(x - +this._x.call(null, node.data));\n if (d < radius) {\n radius = d;\n x0 = x - d;\n x3 = x + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n x1 = this._x1,\n x,\n xm,\n right,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (!(parent = node, node = node[i = +right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 1]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1])\n && node === (parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Half from \"./half\";\n\nexport default function(callback) {\n var halves = [], q, node = this._root, child, x0, x1;\n if (node) halves.push(new Half(node, this._x0, this._x1));\n while (q = halves.pop()) {\n if (!callback(node = q.node, x0 = q.x0, x1 = q.x1) && node.length) {\n var xm = (x0 + x1) / 2;\n if (child = node[1]) halves.push(new Half(child, xm, x1));\n if (child = node[0]) halves.push(new Half(child, x0, xm));\n }\n }\n return this;\n}\n","import Half from \"./half\";\n\nexport default function(callback) {\n var halves = [], next = [], q;\n if (this._root) halves.push(new Half(this._root, this._x0, this._x1));\n while (q = halves.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, x1 = q.x1, xm = (x0 + x1) / 2;\n if (child = node[0]) halves.push(new Half(child, x0, xm));\n if (child = node[1]) halves.push(new Half(child, xm, x1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.x1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add\";\nimport tree_cover from \"./cover\";\nimport tree_data from \"./data\";\nimport tree_extent from \"./extent\";\nimport tree_find from \"./find\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove\";\nimport tree_root from \"./root\";\nimport tree_size from \"./size\";\nimport tree_visit from \"./visit\";\nimport tree_visitAfter from \"./visitAfter\";\nimport tree_x, {defaultX} from \"./x\";\n\nexport default function binarytree(nodes, x) {\n var tree = new Binarytree(x == null ? defaultX : x, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Binarytree(x, x0, x1) {\n this._x = x;\n this._x0 = x0;\n this._x1 = x1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = binarytree.prototype = Binarytree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Binarytree(this._x, this._x0, this._x1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(2)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 2; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(2)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;","export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(d) {\n var x = +this._x.call(null, d),\n y = +this._y.call(null, d),\n z = +this._z.call(null, d);\n return add(this.cover(x, y, z), x, y, z, d);\n}\n\nfunction add(tree, x, y, z, d) {\n if (isNaN(x) || isNaN(y) || isNaN(z)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n z0 = tree._z0,\n x1 = tree._x1,\n y1 = tree._y1,\n z1 = tree._z1,\n xm,\n ym,\n zm,\n xp,\n yp,\n zp,\n right,\n bottom,\n deep,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm; else z1 = zm;\n if (parent = node, !(node = node[i = deep << 2 | bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n zp = +tree._z.call(null, node.data);\n if (x === xp && y === yp && z === zp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(8) : tree._root = new Array(8);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm; else z1 = zm;\n } while ((i = deep << 2 | bottom << 1 | right) === (j = (zp >= zm) << 2 | (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n z,\n xz = new Array(n),\n yz = new Array(n),\n zz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n z0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity,\n z1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d)) || isNaN(z = +this._z.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n zz[i] = z;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n if (z < z0) z0 = z;\n if (z > z1) z1 = z;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1 || z0 > z1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0, z0).cover(x1, y1, z1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], zz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y, z) {\n if (isNaN(x = +x) || isNaN(y = +y) || isNaN(z = +z)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n z0 = this._z0,\n x1 = this._x1,\n y1 = this._y1,\n z1 = this._z1;\n\n // If the octree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing octant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n z1 = (z0 = Math.floor(z)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var t = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1 || z0 > z || z >= z1) {\n i = (z < z0) << 2 | (y < y0) << 1 | (x < x0);\n parent = new Array(8), parent[i] = node, node = parent, t *= 2;\n switch (i) {\n case 0: x1 = x0 + t, y1 = y0 + t, z1 = z0 + t; break;\n case 1: x0 = x1 - t, y1 = y0 + t, z1 = z0 + t; break;\n case 2: x1 = x0 + t, y0 = y1 - t, z1 = z0 + t; break;\n case 3: x0 = x1 - t, y0 = y1 - t, z1 = z0 + t; break;\n case 4: x1 = x0 + t, y1 = y0 + t, z0 = z1 - t; break;\n case 5: x0 = x1 - t, y1 = y0 + t, z0 = z1 - t; break;\n case 6: x1 = x0 + t, y0 = y1 - t, z0 = z1 - t; break;\n case 7: x0 = x1 - t, y0 = y1 - t, z0 = z1 - t; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._z0 = z0;\n this._x1 = x1;\n this._y1 = y1;\n this._z1 = z1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1], +_[0][2]).cover(+_[1][0], +_[1][1], +_[1][2])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0, this._z0], [this._x1, this._y1, this._z1]];\n}\n","export default function(node, x0, y0, z0, x1, y1, z1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.z0 = z0;\n this.x1 = x1;\n this.y1 = y1;\n this.z1 = z1;\n}\n","import Octant from \"./octant\";\n\nexport default function(x, y, z, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n z0 = this._z0,\n x1,\n y1,\n z1,\n x2,\n y2,\n z2,\n x3 = this._x1,\n y3 = this._y1,\n z3 = this._z1,\n octs = [],\n node = this._root,\n q,\n i;\n\n if (node) octs.push(new Octant(node, x0, y0, z0, x3, y3, z3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius, z0 = z - radius;\n x3 = x + radius, y3 = y + radius, z3 = z + radius;\n radius *= radius;\n }\n\n while (q = octs.pop()) {\n\n // Stop searching if this octant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (z1 = q.z0) > z3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0\n || (z2 = q.z1) < z0) continue;\n\n // Bisect the current octant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2,\n zm = (z1 + z2) / 2;\n\n octs.push(\n new Octant(node[7], xm, ym, zm, x2, y2, z2),\n new Octant(node[6], x1, ym, zm, xm, y2, z2),\n new Octant(node[5], xm, y1, zm, x2, ym, z2),\n new Octant(node[4], x1, y1, zm, xm, ym, z2),\n new Octant(node[3], xm, ym, z1, x2, y2, zm),\n new Octant(node[2], x1, ym, z1, xm, y2, zm),\n new Octant(node[1], xm, y1, z1, x2, ym, zm),\n new Octant(node[0], x1, y1, z1, xm, ym, zm)\n );\n\n // Visit the closest octant first.\n if (i = (z >= zm) << 2 | (y >= ym) << 1 | (x >= xm)) {\n q = octs[octs.length - 1];\n octs[octs.length - 1] = octs[octs.length - 1 - i];\n octs[octs.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n dz = z - +this._z.call(null, node.data),\n d2 = dx * dx + dy * dy + dz * dz;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d, z0 = z - d;\n x3 = x + d, y3 = y + d, z3 = z + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d)) || isNaN(z = +this._z.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n z0 = this._z0,\n x1 = this._x1,\n y1 = this._y1,\n z1 = this._z1,\n x,\n y,\n z,\n xm,\n ym,\n zm,\n right,\n bottom,\n deep,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm; else z1 = zm;\n if (!(parent = node, node = node[i = deep << 2 | bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 7] || parent[(i + 2) & 7] || parent[(i + 3) & 7] || parent[(i + 4) & 7] || parent[(i + 5) & 7] || parent[(i + 6) & 7] || parent[(i + 7) & 7]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3] || parent[4] || parent[5] || parent[6] || parent[7])\n && node === (parent[7] || parent[6] || parent[5] || parent[4] || parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Octant from \"./octant\";\n\nexport default function(callback) {\n var octs = [], q, node = this._root, child, x0, y0, z0, x1, y1, z1;\n if (node) octs.push(new Octant(node, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1));\n while (q = octs.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, z0 = q.z0, x1 = q.x1, y1 = q.y1, z1 = q.z1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2, zm = (z0 + z1) / 2;\n if (child = node[7]) octs.push(new Octant(child, xm, ym, zm, x1, y1, z1));\n if (child = node[6]) octs.push(new Octant(child, x0, ym, zm, xm, y1, z1));\n if (child = node[5]) octs.push(new Octant(child, xm, y0, zm, x1, ym, z1));\n if (child = node[4]) octs.push(new Octant(child, x0, y0, zm, xm, ym, z1));\n if (child = node[3]) octs.push(new Octant(child, xm, ym, z0, x1, y1, zm));\n if (child = node[2]) octs.push(new Octant(child, x0, ym, z0, xm, y1, zm));\n if (child = node[1]) octs.push(new Octant(child, xm, y0, z0, x1, ym, zm));\n if (child = node[0]) octs.push(new Octant(child, x0, y0, z0, xm, ym, zm));\n }\n }\n return this;\n}\n","import Octant from \"./octant\";\n\nexport default function(callback) {\n var octs = [], next = [], q;\n if (this._root) octs.push(new Octant(this._root, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1));\n while (q = octs.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, z0 = q.z0, x1 = q.x1, y1 = q.y1, z1 = q.z1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2, zm = (z0 + z1) / 2;\n if (child = node[0]) octs.push(new Octant(child, x0, y0, z0, xm, ym, zm));\n if (child = node[1]) octs.push(new Octant(child, xm, y0, z0, x1, ym, zm));\n if (child = node[2]) octs.push(new Octant(child, x0, ym, z0, xm, y1, zm));\n if (child = node[3]) octs.push(new Octant(child, xm, ym, z0, x1, y1, zm));\n if (child = node[4]) octs.push(new Octant(child, x0, y0, zm, xm, ym, z1));\n if (child = node[5]) octs.push(new Octant(child, xm, y0, zm, x1, ym, z1));\n if (child = node[6]) octs.push(new Octant(child, x0, ym, zm, xm, y1, z1));\n if (child = node[7]) octs.push(new Octant(child, xm, ym, zm, x1, y1, z1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.z0, q.x1, q.y1, q.z1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","export function defaultZ(d) {\n return d[2];\n}\n\nexport default function(_) {\n return arguments.length ? (this._z = _, this) : this._z;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add\";\nimport tree_cover from \"./cover\";\nimport tree_data from \"./data\";\nimport tree_extent from \"./extent\";\nimport tree_find from \"./find\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove\";\nimport tree_root from \"./root\";\nimport tree_size from \"./size\";\nimport tree_visit from \"./visit\";\nimport tree_visitAfter from \"./visitAfter\";\nimport tree_x, {defaultX} from \"./x\";\nimport tree_y, {defaultY} from \"./y\";\nimport tree_z, {defaultZ} from \"./z\";\n\nexport default function octree(nodes, x, y, z) {\n var tree = new Octree(x == null ? defaultX : x, y == null ? defaultY : y, z == null ? defaultZ : z, NaN, NaN, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Octree(x, y, z, x0, y0, z0, x1, y1, z1) {\n this._x = x;\n this._y = y;\n this._z = z;\n this._x0 = x0;\n this._y0 = y0;\n this._z0 = z0;\n this._x1 = x1;\n this._y1 = y1;\n this._z1 = z1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = octree.prototype = Octree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Octree(this._x, this._y, this._z, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(8)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 8; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(8)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\ntreeProto.z = tree_z;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n nDim,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x = 0, y = 0, z = 0, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n if (nDim > 1) { y = target.y + target.vy - source.y - source.vy || jiggle(random); }\n if (nDim > 2) { z = target.z + target.vz - source.z - source.vz || jiggle(random); }\n l = Math.sqrt(x * x + y * y + z * z);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l, z *= l;\n\n target.vx -= x * (b = bias[i]);\n if (nDim > 1) { target.vy -= y * b; }\n if (nDim > 2) { target.vz -= z * b; }\n\n source.vx += x * (b = 1 - b);\n if (nDim > 1) { source.vy += y * b; }\n if (nDim > 2) { source.vz += z * b; }\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, ...args) {\n nodes = _nodes;\n random = args.find(arg => typeof arg === 'function') || Math.random;\n nDim = args.find(arg => [1, 2, 3].includes(arg)) || 2;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nvar MAX_DIMENSIONS = 3;\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nexport function z(d) {\n return d.z;\n}\n\nvar initialRadius = 10,\n initialAngleRoll = Math.PI * (3 - Math.sqrt(5)), // Golden ratio angle\n initialAngleYaw = Math.PI * 20 / (9 + Math.sqrt(221)); // Markov irrational number\n\nexport default function(nodes, numDimensions) {\n numDimensions = numDimensions || 2;\n\n var nDim = Math.min(MAX_DIMENSIONS, Math.max(1, Math.round(numDimensions))),\n simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function (force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (nDim > 1) {\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n if (nDim > 2) {\n if (node.fz == null) node.z += node.vz *= velocityDecay;\n else node.z = node.fz, node.vz = 0;\n }\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (node.fz != null) node.z = node.fz;\n if (isNaN(node.x) || (nDim > 1 && isNaN(node.y)) || (nDim > 2 && isNaN(node.z))) {\n var radius = initialRadius * (nDim > 2 ? Math.cbrt(0.5 + i) : (nDim > 1 ? Math.sqrt(0.5 + i) : i)),\n rollAngle = i * initialAngleRoll,\n yawAngle = i * initialAngleYaw;\n\n if (nDim === 1) {\n node.x = radius;\n } else if (nDim === 2) {\n node.x = radius * Math.cos(rollAngle);\n node.y = radius * Math.sin(rollAngle);\n } else { // 3 dimensions: use spherical distribution along 2 irrational number angles\n node.x = radius * Math.sin(rollAngle) * Math.cos(yawAngle);\n node.y = radius * Math.cos(rollAngle);\n node.z = radius * Math.sin(rollAngle) * Math.sin(yawAngle);\n }\n }\n if (isNaN(node.vx) || (nDim > 1 && isNaN(node.vy)) || (nDim > 2 && isNaN(node.vz))) {\n node.vx = 0;\n if (nDim > 1) { node.vy = 0; }\n if (nDim > 2) { node.vz = 0; }\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random, nDim);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n numDimensions: function(_) {\n return arguments.length\n ? (nDim = Math.min(MAX_DIMENSIONS, Math.max(1, Math.round(_))), forces.forEach(initializeForce), simulation)\n : nDim;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function() {\n var args = Array.prototype.slice.call(arguments);\n var x = args.shift() || 0,\n y = (nDim > 1 ? args.shift() : null) || 0,\n z = (nDim > 2 ? args.shift() : null) || 0,\n radius = args.shift() || Infinity;\n\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n dz,\n d2,\n node,\n closest;\n\n radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - (node.y || 0);\n dz = z - (node.z ||0);\n d2 = dx * dx + dy * dy + dz * dz;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import {binarytree} from \"d3-binarytree\";\nimport {quadtree} from \"d3-quadtree\";\nimport {octree} from \"d3-octree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y, z} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n nDim,\n node,\n random,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i,\n n = nodes.length,\n tree =\n (nDim === 1 ? binarytree(nodes, x)\n :(nDim === 2 ? quadtree(nodes, x, y)\n :(nDim === 3 ? octree(nodes, x, y, z)\n :null\n ))).visitAfter(accumulate);\n\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(treeNode) {\n var strength = 0, q, c, weight = 0, x, y, z, i;\n var numChildren = treeNode.length;\n\n // For internal nodes, accumulate forces from children.\n if (numChildren) {\n for (x = y = z = i = 0; i < numChildren; ++i) {\n if ((q = treeNode[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * (q.x || 0), y += c * (q.y || 0), z += c * (q.z || 0);\n }\n }\n strength *= Math.sqrt(4 / numChildren); // scale accumulated strength according to number of dimensions\n\n treeNode.x = x / weight;\n if (nDim > 1) { treeNode.y = y / weight; }\n if (nDim > 2) { treeNode.z = z / weight; }\n }\n\n // For leaf nodes, accumulate forces from coincident nodes.\n else {\n q = treeNode;\n q.x = q.data.x;\n if (nDim > 1) { q.y = q.data.y; }\n if (nDim > 2) { q.z = q.data.z; }\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n treeNode.value = strength;\n }\n\n function apply(treeNode, x1, arg1, arg2, arg3) {\n if (!treeNode.value) return true;\n var x2 = [arg1, arg2, arg3][nDim-1];\n\n var x = treeNode.x - node.x,\n y = (nDim > 1 ? treeNode.y - node.y : 0),\n z = (nDim > 2 ? treeNode.z - node.z : 0),\n w = x2 - x1,\n l = x * x + y * y + z * z;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (nDim > 1 && y === 0) y = jiggle(random), l += y * y;\n if (nDim > 2 && z === 0) z = jiggle(random), l += z * z;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * treeNode.value * alpha / l;\n if (nDim > 1) { node.vy += y * treeNode.value * alpha / l; }\n if (nDim > 2) { node.vz += z * treeNode.value * alpha / l; }\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (treeNode.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (treeNode.data !== node || treeNode.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (nDim > 1 && y === 0) y = jiggle(random), l += y * y;\n if (nDim > 2 && z === 0) z = jiggle(random), l += z * z;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (treeNode.data !== node) {\n w = strengths[treeNode.data.index] * alpha / l;\n node.vx += x * w;\n if (nDim > 1) { node.vy += y * w; }\n if (nDim > 2) { node.vz += z * w; }\n } while (treeNode = treeNode.next);\n }\n\n force.initialize = function(_nodes, ...args) {\n nodes = _nodes;\n random = args.find(arg => typeof arg === 'function') || Math.random;\n nDim = args.find(arg => [1, 2, 3].includes(arg)) || 2;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(radius, x, y, z) {\n var nodes,\n nDim,\n strength = constant(0.1),\n strengths,\n radiuses;\n\n if (typeof radius !== \"function\") radius = constant(+radius);\n if (x == null) x = 0;\n if (y == null) y = 0;\n if (z == null) z = 0;\n\n function force(alpha) {\n for (var i = 0, n = nodes.length; i < n; ++i) {\n var node = nodes[i],\n dx = node.x - x || 1e-6,\n dy = (node.y || 0) - y || 1e-6,\n dz = (node.z || 0) - z || 1e-6,\n r = Math.sqrt(dx * dx + dy * dy + dz * dz),\n k = (radiuses[i] - r) * strengths[i] * alpha / r;\n node.vx += dx * k;\n if (nDim>1) { node.vy += dy * k; }\n if (nDim>2) { node.vz += dz * k; }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n radiuses = new Array(n);\n for (i = 0; i < n; ++i) {\n radiuses[i] = +radius(nodes[i], i, nodes);\n strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(initNodes, ...args) {\n nodes = initNodes;\n nDim = args.find(arg => [1, 2, 3].includes(arg)) || 2;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.z = function(_) {\n return arguments.length ? (z = +_, force) : z;\n };\n\n return force;\n}\n","module.exports = function eventify(subject) {\n validateSubject(subject);\n\n var eventsStorage = createEventsStorage(subject);\n subject.on = eventsStorage.on;\n subject.off = eventsStorage.off;\n subject.fire = eventsStorage.fire;\n return subject;\n};\n\nfunction createEventsStorage(subject) {\n // Store all event listeners to this hash. Key is event name, value is array\n // of callback records.\n //\n // A callback record consists of callback function and its optional context:\n // { 'eventName' => [{callback: function, ctx: object}] }\n var registeredEvents = Object.create(null);\n\n return {\n on: function (eventName, callback, ctx) {\n if (typeof callback !== 'function') {\n throw new Error('callback is expected to be a function');\n }\n var handlers = registeredEvents[eventName];\n if (!handlers) {\n handlers = registeredEvents[eventName] = [];\n }\n handlers.push({callback: callback, ctx: ctx});\n\n return subject;\n },\n\n off: function (eventName, callback) {\n var wantToRemoveAll = (typeof eventName === 'undefined');\n if (wantToRemoveAll) {\n // Killing old events storage should be enough in this case:\n registeredEvents = Object.create(null);\n return subject;\n }\n\n if (registeredEvents[eventName]) {\n var deleteAllCallbacksForEvent = (typeof callback !== 'function');\n if (deleteAllCallbacksForEvent) {\n delete registeredEvents[eventName];\n } else {\n var callbacks = registeredEvents[eventName];\n for (var i = 0; i < callbacks.length; ++i) {\n if (callbacks[i].callback === callback) {\n callbacks.splice(i, 1);\n }\n }\n }\n }\n\n return subject;\n },\n\n fire: function (eventName) {\n var callbacks = registeredEvents[eventName];\n if (!callbacks) {\n return subject;\n }\n\n var fireArguments;\n if (arguments.length > 1) {\n fireArguments = Array.prototype.splice.call(arguments, 1);\n }\n for(var i = 0; i < callbacks.length; ++i) {\n var callbackInfo = callbacks[i];\n callbackInfo.callback.apply(callbackInfo.ctx, fireArguments);\n }\n\n return subject;\n }\n };\n}\n\nfunction validateSubject(subject) {\n if (!subject) {\n throw new Error('Eventify cannot use falsy object as events subject');\n }\n var reservedWords = ['on', 'fire', 'off'];\n for (var i = 0; i < reservedWords.length; ++i) {\n if (subject.hasOwnProperty(reservedWords[i])) {\n throw new Error(\"Subject cannot be eventified, since it already has property '\" + reservedWords[i] + \"'\");\n }\n }\n}\n","/**\n * @fileOverview Contains definition of the core graph object.\n */\n\n// TODO: need to change storage layer:\n// 1. Be able to get all nodes O(1)\n// 2. Be able to get number of links O(1)\n\n/**\n * @example\n * var graph = require('ngraph.graph')();\n * graph.addNode(1); // graph has one node.\n * graph.addLink(2, 3); // now graph contains three nodes and one link.\n *\n */\nmodule.exports = createGraph;\n\nvar eventify = require('ngraph.events');\n\n/**\n * Creates a new graph\n */\nfunction createGraph(options) {\n // Graph structure is maintained as dictionary of nodes\n // and array of links. Each node has 'links' property which\n // hold all links related to that node. And general links\n // array is used to speed up all links enumeration. This is inefficient\n // in terms of memory, but simplifies coding.\n options = options || {};\n if ('uniqueLinkId' in options) {\n console.warn(\n 'ngraph.graph: Starting from version 0.14 `uniqueLinkId` is deprecated.\\n' +\n 'Use `multigraph` option instead\\n',\n '\\n',\n 'Note: there is also change in default behavior: From now on each graph\\n'+\n 'is considered to be not a multigraph by default (each edge is unique).'\n );\n\n options.multigraph = options.uniqueLinkId;\n }\n\n // Dear reader, the non-multigraphs do not guarantee that there is only\n // one link for a given pair of node. When this option is set to false\n // we can save some memory and CPU (18% faster for non-multigraph);\n if (options.multigraph === undefined) options.multigraph = false;\n\n if (typeof Map !== 'function') {\n // TODO: Should we polyfill it ourselves? We don't use much operations there..\n throw new Error('ngraph.graph requires `Map` to be defined. Please polyfill it before using ngraph');\n } \n\n var nodes = new Map();\n var links = [],\n // Hash of multi-edges. Used to track ids of edges between same nodes\n multiEdges = {},\n suspendEvents = 0,\n\n createLink = options.multigraph ? createUniqueLink : createSingleLink,\n\n // Our graph API provides means to listen to graph changes. Users can subscribe\n // to be notified about changes in the graph by using `on` method. However\n // in some cases they don't use it. To avoid unnecessary memory consumption\n // we will not record graph changes until we have at least one subscriber.\n // Code below supports this optimization.\n //\n // Accumulates all changes made during graph updates.\n // Each change element contains:\n // changeType - one of the strings: 'add', 'remove' or 'update';\n // node - if change is related to node this property is set to changed graph's node;\n // link - if change is related to link this property is set to changed graph's link;\n changes = [],\n recordLinkChange = noop,\n recordNodeChange = noop,\n enterModification = noop,\n exitModification = noop;\n\n // this is our public API:\n var graphPart = {\n /**\n * Adds node to the graph. If node with given id already exists in the graph\n * its data is extended with whatever comes in 'data' argument.\n *\n * @param nodeId the node's identifier. A string or number is preferred.\n * @param [data] additional data for the node being added. If node already\n * exists its data object is augmented with the new one.\n *\n * @return {node} The newly added node or node with given id if it already exists.\n */\n addNode: addNode,\n\n /**\n * Adds a link to the graph. The function always create a new\n * link between two nodes. If one of the nodes does not exists\n * a new node is created.\n *\n * @param fromId link start node id;\n * @param toId link end node id;\n * @param [data] additional data to be set on the new link;\n *\n * @return {link} The newly created link\n */\n addLink: addLink,\n\n /**\n * Removes link from the graph. If link does not exist does nothing.\n *\n * @param link - object returned by addLink() or getLinks() methods.\n *\n * @returns true if link was removed; false otherwise.\n */\n removeLink: removeLink,\n\n /**\n * Removes node with given id from the graph. If node does not exist in the graph\n * does nothing.\n *\n * @param nodeId node's identifier passed to addNode() function.\n *\n * @returns true if node was removed; false otherwise.\n */\n removeNode: removeNode,\n\n /**\n * Gets node with given identifier. If node does not exist undefined value is returned.\n *\n * @param nodeId requested node identifier;\n *\n * @return {node} in with requested identifier or undefined if no such node exists.\n */\n getNode: getNode,\n\n /**\n * Gets number of nodes in this graph.\n *\n * @return number of nodes in the graph.\n */\n getNodeCount: getNodeCount,\n\n /**\n * Gets total number of links in the graph.\n */\n getLinkCount: getLinkCount,\n\n /**\n * Synonym for `getLinkCount()`\n */\n getLinksCount: getLinkCount,\n \n /**\n * Synonym for `getNodeCount()`\n */\n getNodesCount: getNodeCount,\n\n /**\n * Gets all links (inbound and outbound) from the node with given id.\n * If node with given id is not found null is returned.\n *\n * @param nodeId requested node identifier.\n *\n * @return Array of links from and to requested node if such node exists;\n * otherwise null is returned.\n */\n getLinks: getLinks,\n\n /**\n * Invokes callback on each node of the graph.\n *\n * @param {Function(node)} callback Function to be invoked. The function\n * is passed one argument: visited node.\n */\n forEachNode: forEachNode,\n\n /**\n * Invokes callback on every linked (adjacent) node to the given one.\n *\n * @param nodeId Identifier of the requested node.\n * @param {Function(node, link)} callback Function to be called on all linked nodes.\n * The function is passed two parameters: adjacent node and link object itself.\n * @param oriented if true graph treated as oriented.\n */\n forEachLinkedNode: forEachLinkedNode,\n\n /**\n * Enumerates all links in the graph\n *\n * @param {Function(link)} callback Function to be called on all links in the graph.\n * The function is passed one parameter: graph's link object.\n *\n * Link object contains at least the following fields:\n * fromId - node id where link starts;\n * toId - node id where link ends,\n * data - additional data passed to graph.addLink() method.\n */\n forEachLink: forEachLink,\n\n /**\n * Suspend all notifications about graph changes until\n * endUpdate is called.\n */\n beginUpdate: enterModification,\n\n /**\n * Resumes all notifications about graph changes and fires\n * graph 'changed' event in case there are any pending changes.\n */\n endUpdate: exitModification,\n\n /**\n * Removes all nodes and links from the graph.\n */\n clear: clear,\n\n /**\n * Detects whether there is a link between two nodes.\n * Operation complexity is O(n) where n - number of links of a node.\n * NOTE: this function is synonim for getLink()\n *\n * @returns link if there is one. null otherwise.\n */\n hasLink: getLink,\n\n /**\n * Detects whether there is a node with given id\n * \n * Operation complexity is O(1)\n * NOTE: this function is synonim for getNode()\n *\n * @returns node if there is one; Falsy value otherwise.\n */\n hasNode: getNode,\n\n /**\n * Gets an edge between two nodes.\n * Operation complexity is O(n) where n - number of links of a node.\n *\n * @param {string} fromId link start identifier\n * @param {string} toId link end identifier\n *\n * @returns link if there is one. null otherwise.\n */\n getLink: getLink\n };\n\n // this will add `on()` and `fire()` methods.\n eventify(graphPart);\n\n monitorSubscribers();\n\n return graphPart;\n\n function monitorSubscribers() {\n var realOn = graphPart.on;\n\n // replace real `on` with our temporary on, which will trigger change\n // modification monitoring:\n graphPart.on = on;\n\n function on() {\n // now it's time to start tracking stuff:\n graphPart.beginUpdate = enterModification = enterModificationReal;\n graphPart.endUpdate = exitModification = exitModificationReal;\n recordLinkChange = recordLinkChangeReal;\n recordNodeChange = recordNodeChangeReal;\n\n // this will replace current `on` method with real pub/sub from `eventify`.\n graphPart.on = realOn;\n // delegate to real `on` handler:\n return realOn.apply(graphPart, arguments);\n }\n }\n\n function recordLinkChangeReal(link, changeType) {\n changes.push({\n link: link,\n changeType: changeType\n });\n }\n\n function recordNodeChangeReal(node, changeType) {\n changes.push({\n node: node,\n changeType: changeType\n });\n }\n\n function addNode(nodeId, data) {\n if (nodeId === undefined) {\n throw new Error('Invalid node identifier');\n }\n\n enterModification();\n\n var node = getNode(nodeId);\n if (!node) {\n node = new Node(nodeId, data);\n recordNodeChange(node, 'add');\n } else {\n node.data = data;\n recordNodeChange(node, 'update');\n }\n\n nodes.set(nodeId, node);\n\n exitModification();\n return node;\n }\n\n function getNode(nodeId) {\n return nodes.get(nodeId);\n }\n\n function removeNode(nodeId) {\n var node = getNode(nodeId);\n if (!node) {\n return false;\n }\n\n enterModification();\n\n var prevLinks = node.links;\n if (prevLinks) {\n node.links = null;\n for(var i = 0; i < prevLinks.length; ++i) {\n removeLink(prevLinks[i]);\n }\n }\n\n nodes.delete(nodeId)\n\n recordNodeChange(node, 'remove');\n\n exitModification();\n\n return true;\n }\n\n\n function addLink(fromId, toId, data) {\n enterModification();\n\n var fromNode = getNode(fromId) || addNode(fromId);\n var toNode = getNode(toId) || addNode(toId);\n\n var link = createLink(fromId, toId, data);\n\n links.push(link);\n\n // TODO: this is not cool. On large graphs potentially would consume more memory.\n addLinkToNode(fromNode, link);\n if (fromId !== toId) {\n // make sure we are not duplicating links for self-loops\n addLinkToNode(toNode, link);\n }\n\n recordLinkChange(link, 'add');\n\n exitModification();\n\n return link;\n }\n\n function createSingleLink(fromId, toId, data) {\n var linkId = makeLinkId(fromId, toId);\n return new Link(fromId, toId, data, linkId);\n }\n\n function createUniqueLink(fromId, toId, data) {\n // TODO: Get rid of this method.\n var linkId = makeLinkId(fromId, toId);\n var isMultiEdge = multiEdges.hasOwnProperty(linkId);\n if (isMultiEdge || getLink(fromId, toId)) {\n if (!isMultiEdge) {\n multiEdges[linkId] = 0;\n }\n var suffix = '@' + (++multiEdges[linkId]);\n linkId = makeLinkId(fromId + suffix, toId + suffix);\n }\n\n return new Link(fromId, toId, data, linkId);\n }\n\n function getNodeCount() {\n return nodes.size;\n }\n\n function getLinkCount() {\n return links.length;\n }\n\n function getLinks(nodeId) {\n var node = getNode(nodeId);\n return node ? node.links : null;\n }\n\n function removeLink(link) {\n if (!link) {\n return false;\n }\n var idx = indexOfElementInArray(link, links);\n if (idx < 0) {\n return false;\n }\n\n enterModification();\n\n links.splice(idx, 1);\n\n var fromNode = getNode(link.fromId);\n var toNode = getNode(link.toId);\n\n if (fromNode) {\n idx = indexOfElementInArray(link, fromNode.links);\n if (idx >= 0) {\n fromNode.links.splice(idx, 1);\n }\n }\n\n if (toNode) {\n idx = indexOfElementInArray(link, toNode.links);\n if (idx >= 0) {\n toNode.links.splice(idx, 1);\n }\n }\n\n recordLinkChange(link, 'remove');\n\n exitModification();\n\n return true;\n }\n\n function getLink(fromNodeId, toNodeId) {\n // TODO: Use sorted links to speed this up\n var node = getNode(fromNodeId),\n i;\n if (!node || !node.links) {\n return null;\n }\n\n for (i = 0; i < node.links.length; ++i) {\n var link = node.links[i];\n if (link.fromId === fromNodeId && link.toId === toNodeId) {\n return link;\n }\n }\n\n return null; // no link.\n }\n\n function clear() {\n enterModification();\n forEachNode(function(node) {\n removeNode(node.id);\n });\n exitModification();\n }\n\n function forEachLink(callback) {\n var i, length;\n if (typeof callback === 'function') {\n for (i = 0, length = links.length; i < length; ++i) {\n callback(links[i]);\n }\n }\n }\n\n function forEachLinkedNode(nodeId, callback, oriented) {\n var node = getNode(nodeId);\n\n if (node && node.links && typeof callback === 'function') {\n if (oriented) {\n return forEachOrientedLink(node.links, nodeId, callback);\n } else {\n return forEachNonOrientedLink(node.links, nodeId, callback);\n }\n }\n }\n\n function forEachNonOrientedLink(links, nodeId, callback) {\n var quitFast;\n for (var i = 0; i < links.length; ++i) {\n var link = links[i];\n var linkedNodeId = link.fromId === nodeId ? link.toId : link.fromId;\n\n quitFast = callback(nodes.get(linkedNodeId), link);\n if (quitFast) {\n return true; // Client does not need more iterations. Break now.\n }\n }\n }\n\n function forEachOrientedLink(links, nodeId, callback) {\n var quitFast;\n for (var i = 0; i < links.length; ++i) {\n var link = links[i];\n if (link.fromId === nodeId) {\n quitFast = callback(nodes.get(link.toId), link)\n if (quitFast) {\n return true; // Client does not need more iterations. Break now.\n }\n }\n }\n }\n\n // we will not fire anything until users of this library explicitly call `on()`\n // method.\n function noop() {}\n\n // Enter, Exit modification allows bulk graph updates without firing events.\n function enterModificationReal() {\n suspendEvents += 1;\n }\n\n function exitModificationReal() {\n suspendEvents -= 1;\n if (suspendEvents === 0 && changes.length > 0) {\n graphPart.fire('changed', changes);\n changes.length = 0;\n }\n }\n\n function forEachNode(callback) {\n if (typeof callback !== 'function') {\n throw new Error('Function is expected to iterate over graph nodes. You passed ' + callback);\n }\n\n var valuesIterator = nodes.values();\n var nextValue = valuesIterator.next();\n while (!nextValue.done) {\n if (callback(nextValue.value)) {\n return true; // client doesn't want to proceed. Return.\n }\n nextValue = valuesIterator.next();\n }\n }\n}\n\n// need this for old browsers. Should this be a separate module?\nfunction indexOfElementInArray(element, array) {\n if (!array) return -1;\n\n if (array.indexOf) {\n return array.indexOf(element);\n }\n\n var len = array.length,\n i;\n\n for (i = 0; i < len; i += 1) {\n if (array[i] === element) {\n return i;\n }\n }\n\n return -1;\n}\n\n/**\n * Internal structure to represent node;\n */\nfunction Node(id, data) {\n this.id = id;\n this.links = null;\n this.data = data;\n}\n\nfunction addLinkToNode(node, link) {\n if (node.links) {\n node.links.push(link);\n } else {\n node.links = [link];\n }\n}\n\n/**\n * Internal structure to represent links;\n */\nfunction Link(fromId, toId, data, id) {\n this.fromId = fromId;\n this.toId = toId;\n this.data = data;\n this.id = id;\n}\n\nfunction makeLinkId(fromId, toId) {\n return fromId.toString() + '👉 ' + toId.toString();\n}\n","module.exports = function getVariableName(index) {\n if (index === 0) return 'x';\n if (index === 1) return 'y';\n if (index === 2) return 'z';\n return 'c' + (index + 1);\n};","const getVariableName = require('./getVariableName');\n\nmodule.exports = function createPatternBuilder(dimension) {\n\n return pattern;\n \n function pattern(template, config) {\n let indent = (config && config.indent) || 0;\n let join = (config && config.join !== undefined) ? config.join : '\\n';\n let indentString = Array(indent + 1).join(' ');\n let buffer = [];\n for (let i = 0; i < dimension; ++i) {\n let variableName = getVariableName(i);\n let prefix = (i === 0) ? '' : indentString;\n buffer.push(prefix + template.replace(/{var}/g, variableName));\n }\n return buffer.join(join);\n }\n};\n","\nconst createPatternBuilder = require('./createPatternBuilder');\n\nmodule.exports = generateCreateBodyFunction;\nmodule.exports.generateCreateBodyFunctionBody = generateCreateBodyFunctionBody;\n\n// InlineTransform: getVectorCode\nmodule.exports.getVectorCode = getVectorCode;\n// InlineTransform: getBodyCode\nmodule.exports.getBodyCode = getBodyCode;\n// InlineTransformExport: module.exports = function() { return Body; }\n\nfunction generateCreateBodyFunction(dimension, debugSetters) {\n let code = generateCreateBodyFunctionBody(dimension, debugSetters);\n let {Body} = (new Function(code))();\n return Body;\n}\n\nfunction generateCreateBodyFunctionBody(dimension, debugSetters) {\n let code = `\n${getVectorCode(dimension, debugSetters)}\n${getBodyCode(dimension, debugSetters)}\nreturn {Body: Body, Vector: Vector};\n`;\n return code;\n}\n\nfunction getBodyCode(dimension) {\n let pattern = createPatternBuilder(dimension);\n let variableList = pattern('{var}', {join: ', '});\n return `\nfunction Body(${variableList}) {\n this.isPinned = false;\n this.pos = new Vector(${variableList});\n this.force = new Vector();\n this.velocity = new Vector();\n this.mass = 1;\n\n this.springCount = 0;\n this.springLength = 0;\n}\n\nBody.prototype.reset = function() {\n this.force.reset();\n this.springCount = 0;\n this.springLength = 0;\n}\n\nBody.prototype.setPosition = function (${variableList}) {\n ${pattern('this.pos.{var} = {var} || 0;', {indent: 2})}\n};`;\n}\n\nfunction getVectorCode(dimension, debugSetters) {\n let pattern = createPatternBuilder(dimension);\n let setters = '';\n if (debugSetters) {\n setters = `${pattern(\"\\n\\\n var v{var};\\n\\\nObject.defineProperty(this, '{var}', {\\n\\\n set: function(v) { \\n\\\n if (!Number.isFinite(v)) throw new Error('Cannot set non-numbers to {var}');\\n\\\n v{var} = v; \\n\\\n },\\n\\\n get: function() { return v{var}; }\\n\\\n});\")}`;\n }\n\n let variableList = pattern('{var}', {join: ', '});\n return `function Vector(${variableList}) {\n ${setters}\n if (typeof arguments[0] === 'object') {\n // could be another vector\n let v = arguments[0];\n ${pattern('if (!Number.isFinite(v.{var})) throw new Error(\"Expected value is not a finite number at Vector constructor ({var})\");', {indent: 4})}\n ${pattern('this.{var} = v.{var};', {indent: 4})}\n } else {\n ${pattern('this.{var} = typeof {var} === \"number\" ? {var} : 0;', {indent: 4})}\n }\n }\n \n Vector.prototype.reset = function () {\n ${pattern('this.{var} = ', {join: ''})}0;\n };`;\n}","const createPatternBuilder = require('./createPatternBuilder');\nconst getVariableName = require('./getVariableName');\n\nmodule.exports = generateQuadTreeFunction;\nmodule.exports.generateQuadTreeFunctionBody = generateQuadTreeFunctionBody;\n\n// These exports are for InlineTransform tool.\n// InlineTransform: getInsertStackCode\nmodule.exports.getInsertStackCode = getInsertStackCode;\n// InlineTransform: getQuadNodeCode\nmodule.exports.getQuadNodeCode = getQuadNodeCode;\n// InlineTransform: isSamePosition\nmodule.exports.isSamePosition = isSamePosition;\n// InlineTransform: getChildBodyCode\nmodule.exports.getChildBodyCode = getChildBodyCode;\n// InlineTransform: setChildBodyCode\nmodule.exports.setChildBodyCode = setChildBodyCode;\n\nfunction generateQuadTreeFunction(dimension) {\n let code = generateQuadTreeFunctionBody(dimension);\n return (new Function(code))();\n}\n\nfunction generateQuadTreeFunctionBody(dimension) {\n let pattern = createPatternBuilder(dimension);\n let quadCount = Math.pow(2, dimension);\n\n let code = `\n${getInsertStackCode()}\n${getQuadNodeCode(dimension)}\n${isSamePosition(dimension)}\n${getChildBodyCode(dimension)}\n${setChildBodyCode(dimension)}\n\nfunction createQuadTree(options, random) {\n options = options || {};\n options.gravity = typeof options.gravity === 'number' ? options.gravity : -1;\n options.theta = typeof options.theta === 'number' ? options.theta : 0.8;\n\n var gravity = options.gravity;\n var updateQueue = [];\n var insertStack = new InsertStack();\n var theta = options.theta;\n\n var nodesCache = [];\n var currentInCache = 0;\n var root = newNode();\n\n return {\n insertBodies: insertBodies,\n\n /**\n * Gets root node if it is present\n */\n getRoot: function() {\n return root;\n },\n\n updateBodyForce: update,\n\n options: function(newOptions) {\n if (newOptions) {\n if (typeof newOptions.gravity === 'number') {\n gravity = newOptions.gravity;\n }\n if (typeof newOptions.theta === 'number') {\n theta = newOptions.theta;\n }\n\n return this;\n }\n\n return {\n gravity: gravity,\n theta: theta\n };\n }\n };\n\n function newNode() {\n // To avoid pressure on GC we reuse nodes.\n var node = nodesCache[currentInCache];\n if (node) {\n${assignQuads(' node.')}\n node.body = null;\n node.mass = ${pattern('node.mass_{var} = ', {join: ''})}0;\n ${pattern('node.min_{var} = node.max_{var} = ', {join: ''})}0;\n } else {\n node = new QuadNode();\n nodesCache[currentInCache] = node;\n }\n\n ++currentInCache;\n return node;\n }\n\n function update(sourceBody) {\n var queue = updateQueue;\n var v;\n ${pattern('var d{var};', {indent: 4})}\n var r; \n ${pattern('var f{var} = 0;', {indent: 4})}\n var queueLength = 1;\n var shiftIdx = 0;\n var pushIdx = 1;\n\n queue[0] = root;\n\n while (queueLength) {\n var node = queue[shiftIdx];\n var body = node.body;\n\n queueLength -= 1;\n shiftIdx += 1;\n var differentBody = (body !== sourceBody);\n if (body && differentBody) {\n // If the current node is a leaf node (and it is not source body),\n // calculate the force exerted by the current node on body, and add this\n // amount to body's net force.\n ${pattern('d{var} = body.pos.{var} - sourceBody.pos.{var};', {indent: 8})}\n r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})});\n\n if (r === 0) {\n // Poor man's protection against zero distance.\n ${pattern('d{var} = (random.nextDouble() - 0.5) / 50;', {indent: 10})}\n r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})});\n }\n\n // This is standard gravitation force calculation but we divide\n // by r^3 to save two operations when normalizing force vector.\n v = gravity * body.mass * sourceBody.mass / (r * r * r);\n ${pattern('f{var} += v * d{var};', {indent: 8})}\n } else if (differentBody) {\n // Otherwise, calculate the ratio s / r, where s is the width of the region\n // represented by the internal node, and r is the distance between the body\n // and the node's center-of-mass\n ${pattern('d{var} = node.mass_{var} / node.mass - sourceBody.pos.{var};', {indent: 8})}\n r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})});\n\n if (r === 0) {\n // Sorry about code duplication. I don't want to create many functions\n // right away. Just want to see performance first.\n ${pattern('d{var} = (random.nextDouble() - 0.5) / 50;', {indent: 10})}\n r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})});\n }\n // If s / r < θ, treat this internal node as a single body, and calculate the\n // force it exerts on sourceBody, and add this amount to sourceBody's net force.\n if ((node.max_${getVariableName(0)} - node.min_${getVariableName(0)}) / r < theta) {\n // in the if statement above we consider node's width only\n // because the region was made into square during tree creation.\n // Thus there is no difference between using width or height.\n v = gravity * node.mass * sourceBody.mass / (r * r * r);\n ${pattern('f{var} += v * d{var};', {indent: 10})}\n } else {\n // Otherwise, run the procedure recursively on each of the current node's children.\n\n // I intentionally unfolded this loop, to save several CPU cycles.\n${runRecursiveOnChildren()}\n }\n }\n }\n\n ${pattern('sourceBody.force.{var} += f{var};', {indent: 4})}\n }\n\n function insertBodies(bodies) {\n ${pattern('var {var}min = Number.MAX_VALUE;', {indent: 4})}\n ${pattern('var {var}max = Number.MIN_VALUE;', {indent: 4})}\n var i = bodies.length;\n\n // To reduce quad tree depth we are looking for exact bounding box of all particles.\n while (i--) {\n var pos = bodies[i].pos;\n ${pattern('if (pos.{var} < {var}min) {var}min = pos.{var};', {indent: 6})}\n ${pattern('if (pos.{var} > {var}max) {var}max = pos.{var};', {indent: 6})}\n }\n\n // Makes the bounds square.\n var maxSideLength = -Infinity;\n ${pattern('if ({var}max - {var}min > maxSideLength) maxSideLength = {var}max - {var}min ;', {indent: 4})}\n\n currentInCache = 0;\n root = newNode();\n ${pattern('root.min_{var} = {var}min;', {indent: 4})}\n ${pattern('root.max_{var} = {var}min + maxSideLength;', {indent: 4})}\n\n i = bodies.length - 1;\n if (i >= 0) {\n root.body = bodies[i];\n }\n while (i--) {\n insert(bodies[i], root);\n }\n }\n\n function insert(newBody) {\n insertStack.reset();\n insertStack.push(root, newBody);\n\n while (!insertStack.isEmpty()) {\n var stackItem = insertStack.pop();\n var node = stackItem.node;\n var body = stackItem.body;\n\n if (!node.body) {\n // This is internal node. Update the total mass of the node and center-of-mass.\n ${pattern('var {var} = body.pos.{var};', {indent: 8})}\n node.mass += body.mass;\n ${pattern('node.mass_{var} += body.mass * {var};', {indent: 8})}\n\n // Recursively insert the body in the appropriate quadrant.\n // But first find the appropriate quadrant.\n var quadIdx = 0; // Assume we are in the 0's quad.\n ${pattern('var min_{var} = node.min_{var};', {indent: 8})}\n ${pattern('var max_{var} = (min_{var} + node.max_{var}) / 2;', {indent: 8})}\n\n${assignInsertionQuadIndex(8)}\n\n var child = getChild(node, quadIdx);\n\n if (!child) {\n // The node is internal but this quadrant is not taken. Add\n // subnode to it.\n child = newNode();\n ${pattern('child.min_{var} = min_{var};', {indent: 10})}\n ${pattern('child.max_{var} = max_{var};', {indent: 10})}\n child.body = body;\n\n setChild(node, quadIdx, child);\n } else {\n // continue searching in this quadrant.\n insertStack.push(child, body);\n }\n } else {\n // We are trying to add to the leaf node.\n // We have to convert current leaf into internal node\n // and continue adding two nodes.\n var oldBody = node.body;\n node.body = null; // internal nodes do not cary bodies\n\n if (isSamePosition(oldBody.pos, body.pos)) {\n // Prevent infinite subdivision by bumping one node\n // anywhere in this quadrant\n var retriesCount = 3;\n do {\n var offset = random.nextDouble();\n ${pattern('var d{var} = (node.max_{var} - node.min_{var}) * offset;', {indent: 12})}\n\n ${pattern('oldBody.pos.{var} = node.min_{var} + d{var};', {indent: 12})}\n retriesCount -= 1;\n // Make sure we don't bump it out of the box. If we do, next iteration should fix it\n } while (retriesCount > 0 && isSamePosition(oldBody.pos, body.pos));\n\n if (retriesCount === 0 && isSamePosition(oldBody.pos, body.pos)) {\n // This is very bad, we ran out of precision.\n // if we do not return from the method we'll get into\n // infinite loop here. So we sacrifice correctness of layout, and keep the app running\n // Next layout iteration should get larger bounding box in the first step and fix this\n return;\n }\n }\n // Next iteration should subdivide node further.\n insertStack.push(node, oldBody);\n insertStack.push(node, body);\n }\n }\n }\n}\nreturn createQuadTree;\n\n`;\n return code;\n\n\n function assignInsertionQuadIndex(indentCount) {\n let insertionCode = [];\n let indent = Array(indentCount + 1).join(' ');\n for (let i = 0; i < dimension; ++i) {\n insertionCode.push(indent + `if (${getVariableName(i)} > max_${getVariableName(i)}) {`);\n insertionCode.push(indent + ` quadIdx = quadIdx + ${Math.pow(2, i)};`);\n insertionCode.push(indent + ` min_${getVariableName(i)} = max_${getVariableName(i)};`);\n insertionCode.push(indent + ` max_${getVariableName(i)} = node.max_${getVariableName(i)};`);\n insertionCode.push(indent + `}`);\n }\n return insertionCode.join('\\n');\n // if (x > max_x) { // somewhere in the eastern part.\n // quadIdx = quadIdx + 1;\n // left = right;\n // right = node.right;\n // }\n }\n\n function runRecursiveOnChildren() {\n let indent = Array(11).join(' ');\n let recursiveCode = [];\n for (let i = 0; i < quadCount; ++i) {\n recursiveCode.push(indent + `if (node.quad${i}) {`);\n recursiveCode.push(indent + ` queue[pushIdx] = node.quad${i};`);\n recursiveCode.push(indent + ` queueLength += 1;`);\n recursiveCode.push(indent + ` pushIdx += 1;`);\n recursiveCode.push(indent + `}`);\n }\n return recursiveCode.join('\\n');\n // if (node.quad0) {\n // queue[pushIdx] = node.quad0;\n // queueLength += 1;\n // pushIdx += 1;\n // }\n }\n\n function assignQuads(indent) {\n // this.quad0 = null;\n // this.quad1 = null;\n // this.quad2 = null;\n // this.quad3 = null;\n let quads = [];\n for (let i = 0; i < quadCount; ++i) {\n quads.push(`${indent}quad${i} = null;`);\n }\n return quads.join('\\n');\n }\n}\n\nfunction isSamePosition(dimension) {\n let pattern = createPatternBuilder(dimension);\n return `\n function isSamePosition(point1, point2) {\n ${pattern('var d{var} = Math.abs(point1.{var} - point2.{var});', {indent: 2})}\n \n return ${pattern('d{var} < 1e-8', {join: ' && '})};\n } \n`;\n}\n\nfunction setChildBodyCode(dimension) {\n var quadCount = Math.pow(2, dimension);\n return `\nfunction setChild(node, idx, child) {\n ${setChildBody()}\n}`;\n function setChildBody() {\n let childBody = [];\n for (let i = 0; i < quadCount; ++i) {\n let prefix = (i === 0) ? ' ' : ' else ';\n childBody.push(`${prefix}if (idx === ${i}) node.quad${i} = child;`);\n }\n\n return childBody.join('\\n');\n // if (idx === 0) node.quad0 = child;\n // else if (idx === 1) node.quad1 = child;\n // else if (idx === 2) node.quad2 = child;\n // else if (idx === 3) node.quad3 = child;\n }\n}\n\nfunction getChildBodyCode(dimension) {\n return `function getChild(node, idx) {\n${getChildBody()}\n return null;\n}`;\n\n function getChildBody() {\n let childBody = [];\n let quadCount = Math.pow(2, dimension);\n for (let i = 0; i < quadCount; ++i) {\n childBody.push(` if (idx === ${i}) return node.quad${i};`);\n }\n\n return childBody.join('\\n');\n // if (idx === 0) return node.quad0;\n // if (idx === 1) return node.quad1;\n // if (idx === 2) return node.quad2;\n // if (idx === 3) return node.quad3;\n }\n}\n\nfunction getQuadNodeCode(dimension) {\n let pattern = createPatternBuilder(dimension);\n let quadCount = Math.pow(2, dimension);\n var quadNodeCode = `\nfunction QuadNode() {\n // body stored inside this node. In quad tree only leaf nodes (by construction)\n // contain bodies:\n this.body = null;\n\n // Child nodes are stored in quads. Each quad is presented by number:\n // 0 | 1\n // -----\n // 2 | 3\n${assignQuads(' this.')}\n\n // Total mass of current node\n this.mass = 0;\n\n // Center of mass coordinates\n ${pattern('this.mass_{var} = 0;', {indent: 2})}\n\n // bounding box coordinates\n ${pattern('this.min_{var} = 0;', {indent: 2})}\n ${pattern('this.max_{var} = 0;', {indent: 2})}\n}\n`;\n return quadNodeCode;\n\n function assignQuads(indent) {\n // this.quad0 = null;\n // this.quad1 = null;\n // this.quad2 = null;\n // this.quad3 = null;\n let quads = [];\n for (let i = 0; i < quadCount; ++i) {\n quads.push(`${indent}quad${i} = null;`);\n }\n return quads.join('\\n');\n }\n}\n\nfunction getInsertStackCode() {\n return `\n/**\n * Our implementation of QuadTree is non-recursive to avoid GC hit\n * This data structure represent stack of elements\n * which we are trying to insert into quad tree.\n */\nfunction InsertStack () {\n this.stack = [];\n this.popIdx = 0;\n}\n\nInsertStack.prototype = {\n isEmpty: function() {\n return this.popIdx === 0;\n },\n push: function (node, body) {\n var item = this.stack[this.popIdx];\n if (!item) {\n // we are trying to avoid memory pressure: create new element\n // only when absolutely necessary\n this.stack[this.popIdx] = new InsertStackElement(node, body);\n } else {\n item.node = node;\n item.body = body;\n }\n ++this.popIdx;\n },\n pop: function () {\n if (this.popIdx > 0) {\n return this.stack[--this.popIdx];\n }\n },\n reset: function () {\n this.popIdx = 0;\n }\n};\n\nfunction InsertStackElement(node, body) {\n this.node = node; // QuadTree node\n this.body = body; // physical body which needs to be inserted to node\n}\n`;\n}","\nmodule.exports = generateBoundsFunction;\nmodule.exports.generateFunctionBody = generateBoundsFunctionBody;\n\nconst createPatternBuilder = require('./createPatternBuilder');\n\nfunction generateBoundsFunction(dimension) {\n let code = generateBoundsFunctionBody(dimension);\n return new Function('bodies', 'settings', 'random', code);\n}\n\nfunction generateBoundsFunctionBody(dimension) {\n let pattern = createPatternBuilder(dimension);\n\n let code = `\n var boundingBox = {\n ${pattern('min_{var}: 0, max_{var}: 0,', {indent: 4})}\n };\n\n return {\n box: boundingBox,\n\n update: updateBoundingBox,\n\n reset: resetBoundingBox,\n\n getBestNewPosition: function (neighbors) {\n var ${pattern('base_{var} = 0', {join: ', '})};\n\n if (neighbors.length) {\n for (var i = 0; i < neighbors.length; ++i) {\n let neighborPos = neighbors[i].pos;\n ${pattern('base_{var} += neighborPos.{var};', {indent: 10})}\n }\n\n ${pattern('base_{var} /= neighbors.length;', {indent: 8})}\n } else {\n ${pattern('base_{var} = (boundingBox.min_{var} + boundingBox.max_{var}) / 2;', {indent: 8})}\n }\n\n var springLength = settings.springLength;\n return {\n ${pattern('{var}: base_{var} + (random.nextDouble() - 0.5) * springLength,', {indent: 8})}\n };\n }\n };\n\n function updateBoundingBox() {\n var i = bodies.length;\n if (i === 0) return; // No bodies - no borders.\n\n ${pattern('var max_{var} = -Infinity;', {indent: 4})}\n ${pattern('var min_{var} = Infinity;', {indent: 4})}\n\n while(i--) {\n // this is O(n), it could be done faster with quadtree, if we check the root node bounds\n var bodyPos = bodies[i].pos;\n ${pattern('if (bodyPos.{var} < min_{var}) min_{var} = bodyPos.{var};', {indent: 6})}\n ${pattern('if (bodyPos.{var} > max_{var}) max_{var} = bodyPos.{var};', {indent: 6})}\n }\n\n ${pattern('boundingBox.min_{var} = min_{var};', {indent: 4})}\n ${pattern('boundingBox.max_{var} = max_{var};', {indent: 4})}\n }\n\n function resetBoundingBox() {\n ${pattern('boundingBox.min_{var} = boundingBox.max_{var} = 0;', {indent: 4})}\n }\n`;\n return code;\n}\n","const createPatternBuilder = require('./createPatternBuilder');\n\nmodule.exports = generateCreateDragForceFunction;\nmodule.exports.generateCreateDragForceFunctionBody = generateCreateDragForceFunctionBody;\n\nfunction generateCreateDragForceFunction(dimension) {\n let code = generateCreateDragForceFunctionBody(dimension);\n return new Function('options', code);\n}\n\nfunction generateCreateDragForceFunctionBody(dimension) {\n let pattern = createPatternBuilder(dimension);\n let code = `\n if (!Number.isFinite(options.dragCoefficient)) throw new Error('dragCoefficient is not a finite number');\n\n return {\n update: function(body) {\n ${pattern('body.force.{var} -= options.dragCoefficient * body.velocity.{var};', {indent: 6})}\n }\n };\n`;\n return code;\n}\n","const createPatternBuilder = require('./createPatternBuilder');\n\nmodule.exports = generateCreateSpringForceFunction;\nmodule.exports.generateCreateSpringForceFunctionBody = generateCreateSpringForceFunctionBody;\n\nfunction generateCreateSpringForceFunction(dimension) {\n let code = generateCreateSpringForceFunctionBody(dimension);\n return new Function('options', 'random', code);\n}\n\nfunction generateCreateSpringForceFunctionBody(dimension) {\n let pattern = createPatternBuilder(dimension);\n let code = `\n if (!Number.isFinite(options.springCoefficient)) throw new Error('Spring coefficient is not a number');\n if (!Number.isFinite(options.springLength)) throw new Error('Spring length is not a number');\n\n return {\n /**\n * Updates forces acting on a spring\n */\n update: function (spring) {\n var body1 = spring.from;\n var body2 = spring.to;\n var length = spring.length < 0 ? options.springLength : spring.length;\n ${pattern('var d{var} = body2.pos.{var} - body1.pos.{var};', {indent: 6})}\n var r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})});\n\n if (r === 0) {\n ${pattern('d{var} = (random.nextDouble() - 0.5) / 50;', {indent: 8})}\n r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})});\n }\n\n var d = r - length;\n var coefficient = ((spring.coefficient > 0) ? spring.coefficient : options.springCoefficient) * d / r;\n\n ${pattern('body1.force.{var} += coefficient * d{var}', {indent: 6})};\n body1.springCount += 1;\n body1.springLength += r;\n\n ${pattern('body2.force.{var} -= coefficient * d{var}', {indent: 6})};\n body2.springCount += 1;\n body2.springLength += r;\n }\n };\n`;\n return code;\n}\n","const createPatternBuilder = require('./createPatternBuilder');\n\nmodule.exports = generateIntegratorFunction;\nmodule.exports.generateIntegratorFunctionBody = generateIntegratorFunctionBody;\n\nfunction generateIntegratorFunction(dimension) {\n let code = generateIntegratorFunctionBody(dimension);\n return new Function('bodies', 'timeStep', 'adaptiveTimeStepWeight', code);\n}\n\nfunction generateIntegratorFunctionBody(dimension) {\n let pattern = createPatternBuilder(dimension);\n let code = `\n var length = bodies.length;\n if (length === 0) return 0;\n\n ${pattern('var d{var} = 0, t{var} = 0;', {indent: 2})}\n\n for (var i = 0; i < length; ++i) {\n var body = bodies[i];\n if (body.isPinned) continue;\n\n if (adaptiveTimeStepWeight && body.springCount) {\n timeStep = (adaptiveTimeStepWeight * body.springLength/body.springCount);\n }\n\n var coeff = timeStep / body.mass;\n\n ${pattern('body.velocity.{var} += coeff * body.force.{var};', {indent: 4})}\n ${pattern('var v{var} = body.velocity.{var};', {indent: 4})}\n var v = Math.sqrt(${pattern('v{var} * v{var}', {join: ' + '})});\n\n if (v > 1) {\n // We normalize it so that we move within timeStep range. \n // for the case when v <= 1 - we let velocity to fade out.\n ${pattern('body.velocity.{var} = v{var} / v;', {indent: 6})}\n }\n\n ${pattern('d{var} = timeStep * body.velocity.{var};', {indent: 4})}\n\n ${pattern('body.pos.{var} += d{var};', {indent: 4})}\n\n ${pattern('t{var} += Math.abs(d{var});', {indent: 4})}\n }\n\n return (${pattern('t{var} * t{var}', {join: ' + '})})/length;\n`;\n return code;\n}\n","module.exports = Spring;\n\n/**\n * Represents a physical spring. Spring connects two bodies, has rest length\n * stiffness coefficient and optional weight\n */\nfunction Spring(fromBody, toBody, length, springCoefficient) {\n this.from = fromBody;\n this.to = toBody;\n this.length = length;\n this.coefficient = springCoefficient;\n}\n","module.exports = merge;\n\n/**\n * Augments `target` with properties in `options`. Does not override\n * target's properties if they are defined and matches expected type in \n * options\n *\n * @returns {Object} merged object\n */\nfunction merge(target, options) {\n var key;\n if (!target) { target = {}; }\n if (options) {\n for (key in options) {\n if (options.hasOwnProperty(key)) {\n var targetHasIt = target.hasOwnProperty(key),\n optionsValueType = typeof options[key],\n shouldReplace = !targetHasIt || (typeof target[key] !== optionsValueType);\n\n if (shouldReplace) {\n target[key] = options[key];\n } else if (optionsValueType === 'object') {\n // go deep, don't care about loops here, we are simple API!:\n target[key] = merge(target[key], options[key]);\n }\n }\n }\n }\n\n return target;\n}\n","module.exports = random;\n\n// TODO: Deprecate?\nmodule.exports.random = random,\nmodule.exports.randomIterator = randomIterator\n\n/**\n * Creates seeded PRNG with two methods:\n * next() and nextDouble()\n */\nfunction random(inputSeed) {\n var seed = typeof inputSeed === 'number' ? inputSeed : (+new Date());\n return new Generator(seed)\n}\n\nfunction Generator(seed) {\n this.seed = seed;\n}\n\n/**\n * Generates random integer number in the range from 0 (inclusive) to maxValue (exclusive)\n *\n * @param maxValue Number REQUIRED. Omitting this number will result in NaN values from PRNG.\n */\nGenerator.prototype.next = next;\n\n/**\n * Generates random double number in the range from 0 (inclusive) to 1 (exclusive)\n * This function is the same as Math.random() (except that it could be seeded)\n */\nGenerator.prototype.nextDouble = nextDouble;\n\n/**\n * Returns a random real number from uniform distribution in [0, 1)\n */\nGenerator.prototype.uniform = nextDouble;\n\n/**\n * Returns a random real number from a Gaussian distribution\n * with 0 as a mean, and 1 as standard deviation u ~ N(0,1)\n */\nGenerator.prototype.gaussian = gaussian;\n\nfunction gaussian() {\n // use the polar form of the Box-Muller transform\n // based on https://introcs.cs.princeton.edu/java/23recursion/StdRandom.java\n var r, x, y;\n do {\n x = this.nextDouble() * 2 - 1;\n y = this.nextDouble() * 2 - 1;\n r = x * x + y * y;\n } while (r >= 1 || r === 0);\n\n return x * Math.sqrt(-2 * Math.log(r)/r);\n}\n\n/**\n * See https://twitter.com/anvaka/status/1296182534150135808\n */\nGenerator.prototype.levy = levy;\n\nfunction levy() {\n var beta = 3 / 2;\n var sigma = Math.pow(\n gamma( 1 + beta ) * Math.sin(Math.PI * beta / 2) / \n (gamma((1 + beta) / 2) * beta * Math.pow(2, (beta - 1) / 2)),\n 1/beta\n );\n return this.gaussian() * sigma / Math.pow(Math.abs(this.gaussian()), 1/beta);\n}\n\n// gamma function approximation\nfunction gamma(z) {\n return Math.sqrt(2 * Math.PI / z) * Math.pow((1 / Math.E) * (z + 1 / (12 * z - 1 / (10 * z))), z);\n}\n\nfunction nextDouble() {\n var seed = this.seed;\n // Robert Jenkins' 32 bit integer hash function.\n seed = ((seed + 0x7ed55d16) + (seed << 12)) & 0xffffffff;\n seed = ((seed ^ 0xc761c23c) ^ (seed >>> 19)) & 0xffffffff;\n seed = ((seed + 0x165667b1) + (seed << 5)) & 0xffffffff;\n seed = ((seed + 0xd3a2646c) ^ (seed << 9)) & 0xffffffff;\n seed = ((seed + 0xfd7046c5) + (seed << 3)) & 0xffffffff;\n seed = ((seed ^ 0xb55a4f09) ^ (seed >>> 16)) & 0xffffffff;\n this.seed = seed;\n return (seed & 0xfffffff) / 0x10000000;\n}\n\nfunction next(maxValue) {\n return Math.floor(this.nextDouble() * maxValue);\n}\n\n/*\n * Creates iterator over array, which returns items of array in random order\n * Time complexity is guaranteed to be O(n);\n */\nfunction randomIterator(array, customRandom) {\n var localRandom = customRandom || random();\n if (typeof localRandom.next !== 'function') {\n throw new Error('customRandom does not match expected API: next() function is missing');\n }\n\n return {\n forEach: forEach,\n\n /**\n * Shuffles array randomly, in place.\n */\n shuffle: shuffle\n };\n\n function shuffle() {\n var i, j, t;\n for (i = array.length - 1; i > 0; --i) {\n j = localRandom.next(i + 1); // i inclusive\n t = array[j];\n array[j] = array[i];\n array[i] = t;\n }\n\n return array;\n }\n\n function forEach(callback) {\n var i, j, t;\n for (i = array.length - 1; i > 0; --i) {\n j = localRandom.next(i + 1); // i inclusive\n t = array[j];\n array[j] = array[i];\n array[i] = t;\n\n callback(t);\n }\n\n if (array.length) {\n callback(array[0]);\n }\n }\n}","/**\n * Manages a simulation of physical forces acting on bodies and springs.\n */\nmodule.exports = createPhysicsSimulator;\n\nvar generateCreateBodyFunction = require('./codeGenerators/generateCreateBody');\nvar generateQuadTreeFunction = require('./codeGenerators/generateQuadTree');\nvar generateBoundsFunction = require('./codeGenerators/generateBounds');\nvar generateCreateDragForceFunction = require('./codeGenerators/generateCreateDragForce');\nvar generateCreateSpringForceFunction = require('./codeGenerators/generateCreateSpringForce');\nvar generateIntegratorFunction = require('./codeGenerators/generateIntegrator');\n\nvar dimensionalCache = {};\n\nfunction createPhysicsSimulator(settings) {\n var Spring = require('./spring');\n var merge = require('ngraph.merge');\n var eventify = require('ngraph.events');\n if (settings) {\n // Check for names from older versions of the layout\n if (settings.springCoeff !== undefined) throw new Error('springCoeff was renamed to springCoefficient');\n if (settings.dragCoeff !== undefined) throw new Error('dragCoeff was renamed to dragCoefficient');\n }\n\n settings = merge(settings, {\n /**\n * Ideal length for links (springs in physical model).\n */\n springLength: 10,\n\n /**\n * Hook's law coefficient. 1 - solid spring.\n */\n springCoefficient: 0.8, \n\n /**\n * Coulomb's law coefficient. It's used to repel nodes thus should be negative\n * if you make it positive nodes start attract each other :).\n */\n gravity: -12,\n\n /**\n * Theta coefficient from Barnes Hut simulation. Ranged between (0, 1).\n * The closer it's to 1 the more nodes algorithm will have to go through.\n * Setting it to one makes Barnes Hut simulation no different from\n * brute-force forces calculation (each node is considered).\n */\n theta: 0.8,\n\n /**\n * Drag force coefficient. Used to slow down system, thus should be less than 1.\n * The closer it is to 0 the less tight system will be.\n */\n dragCoefficient: 0.9, // TODO: Need to rename this to something better. E.g. `dragCoefficient`\n\n /**\n * Default time step (dt) for forces integration\n */\n timeStep : 0.5,\n\n /**\n * Adaptive time step uses average spring length to compute actual time step:\n * See: https://twitter.com/anvaka/status/1293067160755957760\n */\n adaptiveTimeStepWeight: 0,\n\n /**\n * This parameter defines number of dimensions of the space where simulation\n * is performed. \n */\n dimensions: 2,\n\n /**\n * In debug mode more checks are performed, this will help you catch errors\n * quickly, however for production build it is recommended to turn off this flag\n * to speed up computation.\n */\n debug: false\n });\n\n var factory = dimensionalCache[settings.dimensions];\n if (!factory) {\n var dimensions = settings.dimensions;\n factory = {\n Body: generateCreateBodyFunction(dimensions, settings.debug),\n createQuadTree: generateQuadTreeFunction(dimensions),\n createBounds: generateBoundsFunction(dimensions),\n createDragForce: generateCreateDragForceFunction(dimensions),\n createSpringForce: generateCreateSpringForceFunction(dimensions),\n integrate: generateIntegratorFunction(dimensions),\n };\n dimensionalCache[dimensions] = factory;\n }\n\n var Body = factory.Body;\n var createQuadTree = factory.createQuadTree;\n var createBounds = factory.createBounds;\n var createDragForce = factory.createDragForce;\n var createSpringForce = factory.createSpringForce;\n var integrate = factory.integrate;\n var createBody = pos => new Body(pos);\n\n var random = require('ngraph.random').random(42);\n var bodies = []; // Bodies in this simulation.\n var springs = []; // Springs in this simulation.\n\n var quadTree = createQuadTree(settings, random);\n var bounds = createBounds(bodies, settings, random);\n var springForce = createSpringForce(settings, random);\n var dragForce = createDragForce(settings);\n\n var totalMovement = 0; // how much movement we made on last step\n var forces = [];\n var forceMap = new Map();\n var iterationNumber = 0;\n \n addForce('nbody', nbodyForce);\n addForce('spring', updateSpringForce);\n\n var publicApi = {\n /**\n * Array of bodies, registered with current simulator\n *\n * Note: To add new body, use addBody() method. This property is only\n * exposed for testing/performance purposes.\n */\n bodies: bodies,\n \n quadTree: quadTree,\n\n /**\n * Array of springs, registered with current simulator\n *\n * Note: To add new spring, use addSpring() method. This property is only\n * exposed for testing/performance purposes.\n */\n springs: springs,\n\n /**\n * Returns settings with which current simulator was initialized\n */\n settings: settings,\n\n /**\n * Adds a new force to simulation\n */\n addForce: addForce,\n \n /**\n * Removes a force from the simulation.\n */\n removeForce: removeForce,\n\n /**\n * Returns a map of all registered forces.\n */\n getForces: getForces,\n\n /**\n * Performs one step of force simulation.\n *\n * @returns {boolean} true if system is considered stable; False otherwise.\n */\n step: function () {\n for (var i = 0; i < forces.length; ++i) {\n forces[i](iterationNumber);\n }\n var movement = integrate(bodies, settings.timeStep, settings.adaptiveTimeStepWeight);\n iterationNumber += 1;\n return movement;\n },\n\n /**\n * Adds body to the system\n *\n * @param {ngraph.physics.primitives.Body} body physical body\n *\n * @returns {ngraph.physics.primitives.Body} added body\n */\n addBody: function (body) {\n if (!body) {\n throw new Error('Body is required');\n }\n bodies.push(body);\n\n return body;\n },\n\n /**\n * Adds body to the system at given position\n *\n * @param {Object} pos position of a body\n *\n * @returns {ngraph.physics.primitives.Body} added body\n */\n addBodyAt: function (pos) {\n if (!pos) {\n throw new Error('Body position is required');\n }\n var body = createBody(pos);\n bodies.push(body);\n\n return body;\n },\n\n /**\n * Removes body from the system\n *\n * @param {ngraph.physics.primitives.Body} body to remove\n *\n * @returns {Boolean} true if body found and removed. falsy otherwise;\n */\n removeBody: function (body) {\n if (!body) { return; }\n\n var idx = bodies.indexOf(body);\n if (idx < 0) { return; }\n\n bodies.splice(idx, 1);\n if (bodies.length === 0) {\n bounds.reset();\n }\n return true;\n },\n\n /**\n * Adds a spring to this simulation.\n *\n * @returns {Object} - a handle for a spring. If you want to later remove\n * spring pass it to removeSpring() method.\n */\n addSpring: function (body1, body2, springLength, springCoefficient) {\n if (!body1 || !body2) {\n throw new Error('Cannot add null spring to force simulator');\n }\n\n if (typeof springLength !== 'number') {\n springLength = -1; // assume global configuration\n }\n\n var spring = new Spring(body1, body2, springLength, springCoefficient >= 0 ? springCoefficient : -1);\n springs.push(spring);\n\n // TODO: could mark simulator as dirty.\n return spring;\n },\n\n /**\n * Returns amount of movement performed on last step() call\n */\n getTotalMovement: function () {\n return totalMovement;\n },\n\n /**\n * Removes spring from the system\n *\n * @param {Object} spring to remove. Spring is an object returned by addSpring\n *\n * @returns {Boolean} true if spring found and removed. falsy otherwise;\n */\n removeSpring: function (spring) {\n if (!spring) { return; }\n var idx = springs.indexOf(spring);\n if (idx > -1) {\n springs.splice(idx, 1);\n return true;\n }\n },\n\n getBestNewBodyPosition: function (neighbors) {\n return bounds.getBestNewPosition(neighbors);\n },\n\n /**\n * Returns bounding box which covers all bodies\n */\n getBBox: getBoundingBox, \n getBoundingBox: getBoundingBox, \n\n invalidateBBox: function () {\n console.warn('invalidateBBox() is deprecated, bounds always recomputed on `getBBox()` call');\n },\n\n // TODO: Move the force specific stuff to force\n gravity: function (value) {\n if (value !== undefined) {\n settings.gravity = value;\n quadTree.options({gravity: value});\n return this;\n } else {\n return settings.gravity;\n }\n },\n\n theta: function (value) {\n if (value !== undefined) {\n settings.theta = value;\n quadTree.options({theta: value});\n return this;\n } else {\n return settings.theta;\n }\n },\n\n /**\n * Returns pseudo-random number generator instance.\n */\n random: random\n };\n\n // allow settings modification via public API:\n expose(settings, publicApi);\n\n eventify(publicApi);\n\n return publicApi;\n\n function getBoundingBox() {\n bounds.update();\n return bounds.box;\n }\n\n function addForce(forceName, forceFunction) {\n if (forceMap.has(forceName)) throw new Error('Force ' + forceName + ' is already added');\n\n forceMap.set(forceName, forceFunction);\n forces.push(forceFunction);\n }\n\n function removeForce(forceName) {\n var forceIndex = forces.indexOf(forceMap.get(forceName));\n if (forceIndex < 0) return;\n forces.splice(forceIndex, 1);\n forceMap.delete(forceName);\n }\n\n function getForces() {\n // TODO: Should I trust them or clone the forces?\n return forceMap;\n }\n\n function nbodyForce(/* iterationUmber */) {\n if (bodies.length === 0) return;\n\n quadTree.insertBodies(bodies);\n var i = bodies.length;\n while (i--) {\n var body = bodies[i];\n if (!body.isPinned) {\n body.reset();\n quadTree.updateBodyForce(body);\n dragForce.update(body);\n }\n }\n }\n\n function updateSpringForce() {\n var i = springs.length;\n while (i--) {\n springForce.update(springs[i]);\n }\n }\n\n}\n\nfunction expose(settings, target) {\n for (var key in settings) {\n augment(settings, target, key);\n }\n}\n\nfunction augment(source, target, key) {\n if (!source.hasOwnProperty(key)) return;\n if (typeof target[key] === 'function') {\n // this accessor is already defined. Ignore it\n return;\n }\n var sourceIsNumber = Number.isFinite(source[key]);\n\n if (sourceIsNumber) {\n target[key] = function (value) {\n if (value !== undefined) {\n if (!Number.isFinite(value)) throw new Error('Value of ' + key + ' should be a valid number.');\n source[key] = value;\n return target;\n }\n return source[key];\n };\n } else {\n target[key] = function (value) {\n if (value !== undefined) {\n source[key] = value;\n return target;\n }\n return source[key];\n };\n }\n}\n","module.exports = createLayout;\nmodule.exports.simulator = require('./lib/createPhysicsSimulator');\n\nvar eventify = require('ngraph.events');\n\n/**\n * Creates force based layout for a given graph.\n *\n * @param {ngraph.graph} graph which needs to be laid out\n * @param {object} physicsSettings if you need custom settings\n * for physics simulator you can pass your own settings here. If it's not passed\n * a default one will be created.\n */\nfunction createLayout(graph, physicsSettings) {\n if (!graph) {\n throw new Error('Graph structure cannot be undefined');\n }\n\n var createSimulator = (physicsSettings && physicsSettings.createSimulator) || require('./lib/createPhysicsSimulator');\n var physicsSimulator = createSimulator(physicsSettings);\n if (Array.isArray(physicsSettings)) throw new Error('Physics settings is expected to be an object');\n\n var nodeMass = defaultNodeMass;\n if (physicsSettings && typeof physicsSettings.nodeMass === 'function') {\n nodeMass = physicsSettings.nodeMass;\n }\n\n var nodeBodies = new Map();\n var springs = {};\n var bodiesCount = 0;\n\n var springTransform = physicsSimulator.settings.springTransform || noop;\n\n // Initialize physics with what we have in the graph:\n initPhysics();\n listenToEvents();\n\n var wasStable = false;\n\n var api = {\n /**\n * Performs one step of iterative layout algorithm\n *\n * @returns {boolean} true if the system should be considered stable; False otherwise.\n * The system is stable if no further call to `step()` can improve the layout.\n */\n step: function() {\n if (bodiesCount === 0) {\n updateStableStatus(true);\n return true;\n }\n\n var lastMove = physicsSimulator.step();\n\n // Save the movement in case if someone wants to query it in the step\n // callback.\n api.lastMove = lastMove;\n\n // Allow listeners to perform low-level actions after nodes are updated.\n api.fire('step');\n\n var ratio = lastMove/bodiesCount;\n var isStableNow = ratio <= 0.01; // TODO: The number is somewhat arbitrary...\n updateStableStatus(isStableNow);\n\n\n return isStableNow;\n },\n\n /**\n * For a given `nodeId` returns position\n */\n getNodePosition: function (nodeId) {\n return getInitializedBody(nodeId).pos;\n },\n\n /**\n * Sets position of a node to a given coordinates\n * @param {string} nodeId node identifier\n * @param {number} x position of a node\n * @param {number} y position of a node\n * @param {number=} z position of node (only if applicable to body)\n */\n setNodePosition: function (nodeId) {\n var body = getInitializedBody(nodeId);\n body.setPosition.apply(body, Array.prototype.slice.call(arguments, 1));\n },\n\n /**\n * @returns {Object} Link position by link id\n * @returns {Object.from} {x, y} coordinates of link start\n * @returns {Object.to} {x, y} coordinates of link end\n */\n getLinkPosition: function (linkId) {\n var spring = springs[linkId];\n if (spring) {\n return {\n from: spring.from.pos,\n to: spring.to.pos\n };\n }\n },\n\n /**\n * @returns {Object} area required to fit in the graph. Object contains\n * `x1`, `y1` - top left coordinates\n * `x2`, `y2` - bottom right coordinates\n */\n getGraphRect: function () {\n return physicsSimulator.getBBox();\n },\n\n /**\n * Iterates over each body in the layout simulator and performs a callback(body, nodeId)\n */\n forEachBody: forEachBody,\n\n /*\n * Requests layout algorithm to pin/unpin node to its current position\n * Pinned nodes should not be affected by layout algorithm and always\n * remain at their position\n */\n pinNode: function (node, isPinned) {\n var body = getInitializedBody(node.id);\n body.isPinned = !!isPinned;\n },\n\n /**\n * Checks whether given graph's node is currently pinned\n */\n isNodePinned: function (node) {\n return getInitializedBody(node.id).isPinned;\n },\n\n /**\n * Request to release all resources\n */\n dispose: function() {\n graph.off('changed', onGraphChanged);\n api.fire('disposed');\n },\n\n /**\n * Gets physical body for a given node id. If node is not found undefined\n * value is returned.\n */\n getBody: getBody,\n\n /**\n * Gets spring for a given edge.\n *\n * @param {string} linkId link identifer. If two arguments are passed then\n * this argument is treated as formNodeId\n * @param {string=} toId when defined this parameter denotes head of the link\n * and first argument is treated as tail of the link (fromId)\n */\n getSpring: getSpring,\n\n /**\n * Returns length of cumulative force vector. The closer this to zero - the more stable the system is\n */\n getForceVectorLength: getForceVectorLength,\n\n /**\n * [Read only] Gets current physics simulator\n */\n simulator: physicsSimulator,\n\n /**\n * Gets the graph that was used for layout\n */\n graph: graph,\n\n /**\n * Gets amount of movement performed during last step operation\n */\n lastMove: 0\n };\n\n eventify(api);\n\n return api;\n\n function updateStableStatus(isStableNow) {\n if (wasStable !== isStableNow) {\n wasStable = isStableNow;\n onStableChanged(isStableNow);\n }\n }\n\n function forEachBody(cb) {\n nodeBodies.forEach(cb);\n }\n\n function getForceVectorLength() {\n var fx = 0, fy = 0;\n forEachBody(function(body) {\n fx += Math.abs(body.force.x);\n fy += Math.abs(body.force.y);\n });\n return Math.sqrt(fx * fx + fy * fy);\n }\n\n function getSpring(fromId, toId) {\n var linkId;\n if (toId === undefined) {\n if (typeof fromId !== 'object') {\n // assume fromId as a linkId:\n linkId = fromId;\n } else {\n // assume fromId to be a link object:\n linkId = fromId.id;\n }\n } else {\n // toId is defined, should grab link:\n var link = graph.hasLink(fromId, toId);\n if (!link) return;\n linkId = link.id;\n }\n\n return springs[linkId];\n }\n\n function getBody(nodeId) {\n return nodeBodies.get(nodeId);\n }\n\n function listenToEvents() {\n graph.on('changed', onGraphChanged);\n }\n\n function onStableChanged(isStable) {\n api.fire('stable', isStable);\n }\n\n function onGraphChanged(changes) {\n for (var i = 0; i < changes.length; ++i) {\n var change = changes[i];\n if (change.changeType === 'add') {\n if (change.node) {\n initBody(change.node.id);\n }\n if (change.link) {\n initLink(change.link);\n }\n } else if (change.changeType === 'remove') {\n if (change.node) {\n releaseNode(change.node);\n }\n if (change.link) {\n releaseLink(change.link);\n }\n }\n }\n bodiesCount = graph.getNodesCount();\n }\n\n function initPhysics() {\n bodiesCount = 0;\n\n graph.forEachNode(function (node) {\n initBody(node.id);\n bodiesCount += 1;\n });\n\n graph.forEachLink(initLink);\n }\n\n function initBody(nodeId) {\n var body = nodeBodies.get(nodeId);\n if (!body) {\n var node = graph.getNode(nodeId);\n if (!node) {\n throw new Error('initBody() was called with unknown node id');\n }\n\n var pos = node.position;\n if (!pos) {\n var neighbors = getNeighborBodies(node);\n pos = physicsSimulator.getBestNewBodyPosition(neighbors);\n }\n\n body = physicsSimulator.addBodyAt(pos);\n body.id = nodeId;\n\n nodeBodies.set(nodeId, body);\n updateBodyMass(nodeId);\n\n if (isNodeOriginallyPinned(node)) {\n body.isPinned = true;\n }\n }\n }\n\n function releaseNode(node) {\n var nodeId = node.id;\n var body = nodeBodies.get(nodeId);\n if (body) {\n nodeBodies.delete(nodeId);\n physicsSimulator.removeBody(body);\n }\n }\n\n function initLink(link) {\n updateBodyMass(link.fromId);\n updateBodyMass(link.toId);\n\n var fromBody = nodeBodies.get(link.fromId),\n toBody = nodeBodies.get(link.toId),\n spring = physicsSimulator.addSpring(fromBody, toBody, link.length);\n\n springTransform(link, spring);\n\n springs[link.id] = spring;\n }\n\n function releaseLink(link) {\n var spring = springs[link.id];\n if (spring) {\n var from = graph.getNode(link.fromId),\n to = graph.getNode(link.toId);\n\n if (from) updateBodyMass(from.id);\n if (to) updateBodyMass(to.id);\n\n delete springs[link.id];\n\n physicsSimulator.removeSpring(spring);\n }\n }\n\n function getNeighborBodies(node) {\n // TODO: Could probably be done better on memory\n var neighbors = [];\n if (!node.links) {\n return neighbors;\n }\n var maxNeighbors = Math.min(node.links.length, 2);\n for (var i = 0; i < maxNeighbors; ++i) {\n var link = node.links[i];\n var otherBody = link.fromId !== node.id ? nodeBodies.get(link.fromId) : nodeBodies.get(link.toId);\n if (otherBody && otherBody.pos) {\n neighbors.push(otherBody);\n }\n }\n\n return neighbors;\n }\n\n function updateBodyMass(nodeId) {\n var body = nodeBodies.get(nodeId);\n body.mass = nodeMass(nodeId);\n if (Number.isNaN(body.mass)) {\n throw new Error('Node mass should be a number');\n }\n }\n\n /**\n * Checks whether graph node has in its settings pinned attribute,\n * which means layout algorithm cannot move it. Node can be marked\n * as pinned, if it has \"isPinned\" attribute, or when node.data has it.\n *\n * @param {Object} node a graph node to check\n * @return {Boolean} true if node should be treated as pinned; false otherwise.\n */\n function isNodeOriginallyPinned(node) {\n return (node && (node.isPinned || (node.data && node.data.isPinned)));\n }\n\n function getInitializedBody(nodeId) {\n var body = nodeBodies.get(nodeId);\n if (!body) {\n initBody(nodeId);\n body = nodeBodies.get(nodeId);\n }\n return body;\n }\n\n /**\n * Calculates mass of a body, which corresponds to node with given id.\n *\n * @param {String|Number} nodeId identifier of a node, for which body mass needs to be calculated\n * @returns {Number} recommended mass of the body;\n */\n function defaultNodeMass(nodeId) {\n var links = graph.getLinks(nodeId);\n if (!links) return 1;\n return 1 + links.length / 3.0;\n }\n}\n\nfunction noop() { }\n","/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n };\n\n var debounced = function(){\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n \n debounced.flush = function() {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n \n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n","import debounce from 'debounce';\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr && (typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]);\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar Prop = function Prop(name, _ref) {\n var _ref$default = _ref[\"default\"],\n defaultVal = _ref$default === void 0 ? null : _ref$default,\n _ref$triggerUpdate = _ref.triggerUpdate,\n triggerUpdate = _ref$triggerUpdate === void 0 ? true : _ref$triggerUpdate,\n _ref$onChange = _ref.onChange,\n onChange = _ref$onChange === void 0 ? function (newVal, state) {} : _ref$onChange;\n\n _classCallCheck(this, Prop);\n\n this.name = name;\n this.defaultVal = defaultVal;\n this.triggerUpdate = triggerUpdate;\n this.onChange = onChange;\n};\n\nfunction index (_ref2) {\n var _ref2$stateInit = _ref2.stateInit,\n stateInit = _ref2$stateInit === void 0 ? function () {\n return {};\n } : _ref2$stateInit,\n _ref2$props = _ref2.props,\n rawProps = _ref2$props === void 0 ? {} : _ref2$props,\n _ref2$methods = _ref2.methods,\n methods = _ref2$methods === void 0 ? {} : _ref2$methods,\n _ref2$aliases = _ref2.aliases,\n aliases = _ref2$aliases === void 0 ? {} : _ref2$aliases,\n _ref2$init = _ref2.init,\n initFn = _ref2$init === void 0 ? function () {} : _ref2$init,\n _ref2$update = _ref2.update,\n updateFn = _ref2$update === void 0 ? function () {} : _ref2$update;\n // Parse props into Prop instances\n var props = Object.keys(rawProps).map(function (propName) {\n return new Prop(propName, rawProps[propName]);\n });\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // Holds component state\n var state = Object.assign({}, stateInit instanceof Function ? stateInit(options) : stateInit, // Support plain objects for backwards compatibility\n {\n initialised: false\n }); // keeps track of which props triggered an update\n\n var changedProps = {}; // Component constructor\n\n function comp(nodeElement) {\n initStatic(nodeElement, options);\n digest();\n return comp;\n }\n\n var initStatic = function initStatic(nodeElement, options) {\n initFn.call(comp, nodeElement, state, options);\n state.initialised = true;\n };\n\n var digest = debounce(function () {\n if (!state.initialised) {\n return;\n }\n\n updateFn.call(comp, state, changedProps);\n changedProps = {};\n }, 1); // Getter/setter methods\n\n props.forEach(function (prop) {\n comp[prop.name] = getSetProp(prop);\n\n function getSetProp(_ref3) {\n var prop = _ref3.name,\n _ref3$triggerUpdate = _ref3.triggerUpdate,\n redigest = _ref3$triggerUpdate === void 0 ? false : _ref3$triggerUpdate,\n _ref3$onChange = _ref3.onChange,\n onChange = _ref3$onChange === void 0 ? function (newVal, state) {} : _ref3$onChange,\n _ref3$defaultVal = _ref3.defaultVal,\n defaultVal = _ref3$defaultVal === void 0 ? null : _ref3$defaultVal;\n return function (_) {\n var curVal = state[prop];\n\n if (!arguments.length) {\n return curVal;\n } // Getter mode\n\n\n var val = _ === undefined ? defaultVal : _; // pick default if value passed is undefined\n\n state[prop] = val;\n onChange.call(comp, val, state, curVal); // track changed props\n\n !changedProps.hasOwnProperty(prop) && (changedProps[prop] = curVal);\n\n if (redigest) {\n digest();\n }\n\n return comp;\n };\n }\n }); // Other methods\n\n Object.keys(methods).forEach(function (methodName) {\n comp[methodName] = function () {\n var _methods$methodName;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return (_methods$methodName = methods[methodName]).call.apply(_methods$methodName, [comp, state].concat(args));\n };\n }); // Link aliases\n\n Object.entries(aliases).forEach(function (_ref4) {\n var _ref5 = _slicedToArray(_ref4, 2),\n alias = _ref5[0],\n target = _ref5[1];\n\n return comp[alias] = comp[target];\n }); // Reset all component props to their default value\n\n comp.resetProps = function () {\n props.forEach(function (prop) {\n comp[prop.name](prop.defaultVal);\n });\n return comp;\n }; //\n\n\n comp.resetProps(); // Apply all prop defaults\n\n state._rerender = digest; // Expose digest method\n\n return comp;\n };\n}\n\nexport default index;\n","var index = (function (p) {\n return p instanceof Function ? p // fn\n : typeof p === 'string' ? function (obj) {\n return obj[p];\n } // property name\n : function (obj) {\n return p;\n };\n}); // constant\n\nexport default index;\n","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(value);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr && (typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]);\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n\n return (hint === \"string\" ? String : Number)(input);\n}\n\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n\n return typeof key === \"symbol\" ? key : String(key);\n}\n\nvar index = (function () {\n var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var keyAccessors = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var multiItem = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var flattenKeys = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var keys = (keyAccessors instanceof Array ? keyAccessors.length ? keyAccessors : [undefined] : [keyAccessors]).map(function (key) {\n return {\n keyAccessor: key,\n isProp: !(key instanceof Function)\n };\n });\n var indexedResult = list.reduce(function (res, item) {\n var iterObj = res;\n var itemVal = item;\n keys.forEach(function (_ref, idx) {\n var keyAccessor = _ref.keyAccessor,\n isProp = _ref.isProp;\n var key;\n\n if (isProp) {\n var _itemVal = itemVal,\n propVal = _itemVal[keyAccessor],\n rest = _objectWithoutProperties(_itemVal, [keyAccessor].map(_toPropertyKey));\n\n key = propVal;\n itemVal = rest;\n } else {\n key = keyAccessor(itemVal, idx);\n }\n\n if (idx + 1 < keys.length) {\n if (!iterObj.hasOwnProperty(key)) {\n iterObj[key] = {};\n }\n\n iterObj = iterObj[key];\n } else {\n // Leaf key\n if (multiItem) {\n if (!iterObj.hasOwnProperty(key)) {\n iterObj[key] = [];\n }\n\n iterObj[key].push(itemVal);\n } else {\n iterObj[key] = itemVal;\n }\n }\n });\n return res;\n }, {});\n\n if (multiItem instanceof Function) {\n // Reduce leaf multiple values\n (function reduce(node) {\n var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n if (level === keys.length) {\n Object.keys(node).forEach(function (k) {\n return node[k] = multiItem(node[k]);\n });\n } else {\n Object.values(node).forEach(function (child) {\n return reduce(child, level + 1);\n });\n }\n })(indexedResult); // IIFE\n\n }\n\n var result = indexedResult;\n\n if (flattenKeys) {\n // flatten into array\n result = [];\n\n (function flatten(node) {\n var accKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n if (accKeys.length === keys.length) {\n result.push({\n keys: accKeys,\n vals: node\n });\n } else {\n Object.entries(node).forEach(function (_ref2) {\n var _ref3 = _slicedToArray(_ref2, 2),\n key = _ref3[0],\n val = _ref3[1];\n\n return flatten(val, [].concat(_toConsumableArray(accKeys), [key]));\n });\n }\n })(indexedResult); //IIFE\n\n\n if (keyAccessors instanceof Array && keyAccessors.length === 0 && result.length === 1) {\n // clear keys if there's no key accessors (single result)\n result[0].keys = [];\n }\n }\n\n return result;\n});\n\nexport default index;\n","import indexBy from 'index-array-by';\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr && (typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]);\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction diffArrays(prev, next, idAccessor) {\n var result = {\n enter: [],\n update: [],\n exit: []\n };\n\n if (!idAccessor) {\n // use object references for comparison\n var prevSet = new Set(prev);\n var nextSet = new Set(next);\n new Set([].concat(_toConsumableArray(prevSet), _toConsumableArray(nextSet))).forEach(function (item) {\n var type = !prevSet.has(item) ? 'enter' : !nextSet.has(item) ? 'exit' : 'update';\n result[type].push(type === 'update' ? [item, item] : item);\n });\n } else {\n // compare by id (duplicate keys are ignored)\n var prevById = indexBy(prev, idAccessor, false);\n var nextById = indexBy(next, idAccessor, false);\n var byId = Object.assign({}, prevById, nextById);\n Object.entries(byId).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n id = _ref2[0],\n item = _ref2[1];\n\n var type = !prevById.hasOwnProperty(id) ? 'enter' : !nextById.hasOwnProperty(id) ? 'exit' : 'update';\n result[type].push(type === 'update' ? [prevById[id], nextById[id]] : item);\n });\n }\n\n return result;\n}\n\nfunction dataBindDiff(data, existingObjs, _ref3) {\n var _ref3$objBindAttr = _ref3.objBindAttr,\n objBindAttr = _ref3$objBindAttr === void 0 ? '__obj' : _ref3$objBindAttr,\n _ref3$dataBindAttr = _ref3.dataBindAttr,\n dataBindAttr = _ref3$dataBindAttr === void 0 ? '__data' : _ref3$dataBindAttr,\n idAccessor = _ref3.idAccessor,\n _ref3$purge = _ref3.purge,\n purge = _ref3$purge === void 0 ? false : _ref3$purge;\n\n var isObjValid = function isObjValid(obj) {\n return obj.hasOwnProperty(dataBindAttr);\n };\n\n var removeObjs = existingObjs.filter(function (obj) {\n return !isObjValid(obj);\n });\n var prevD = existingObjs.filter(isObjValid).map(function (obj) {\n return obj[dataBindAttr];\n });\n var nextD = data;\n var diff = purge ? {\n enter: nextD,\n exit: prevD,\n update: []\n } // don't diff data in purge mode\n : diffArrays(prevD, nextD, idAccessor);\n diff.update = diff.update.map(function (_ref4) {\n var _ref5 = _slicedToArray(_ref4, 2),\n prevD = _ref5[0],\n nextD = _ref5[1];\n\n if (prevD !== nextD) {\n // transfer obj to new data point (if different)\n nextD[objBindAttr] = prevD[objBindAttr];\n nextD[objBindAttr][dataBindAttr] = nextD;\n }\n\n return nextD;\n });\n diff.exit = diff.exit.concat(removeObjs.map(function (obj) {\n return _defineProperty({}, objBindAttr, obj);\n }));\n return diff;\n}\n\nfunction viewDigest(data, existingObjs, // list\nappendObj, // item => {...} function\nremoveObj, // item => {...} function\n_ref7) {\n var _ref7$createObj = _ref7.createObj,\n createObj = _ref7$createObj === void 0 ? function (d) {\n return {};\n } : _ref7$createObj,\n _ref7$updateObj = _ref7.updateObj,\n updateObj = _ref7$updateObj === void 0 ? function (obj, d) {} : _ref7$updateObj,\n _ref7$exitObj = _ref7.exitObj,\n exitObj = _ref7$exitObj === void 0 ? function (obj) {} : _ref7$exitObj,\n _ref7$objBindAttr = _ref7.objBindAttr,\n objBindAttr = _ref7$objBindAttr === void 0 ? '__obj' : _ref7$objBindAttr,\n _ref7$dataBindAttr = _ref7.dataBindAttr,\n dataBindAttr = _ref7$dataBindAttr === void 0 ? '__data' : _ref7$dataBindAttr,\n dataDiffOptions = _objectWithoutProperties(_ref7, [\"createObj\", \"updateObj\", \"exitObj\", \"objBindAttr\", \"dataBindAttr\"]);\n\n var _dataBindDiff = dataBindDiff(data, existingObjs, _objectSpread2({\n objBindAttr: objBindAttr,\n dataBindAttr: dataBindAttr\n }, dataDiffOptions)),\n enter = _dataBindDiff.enter,\n update = _dataBindDiff.update,\n exit = _dataBindDiff.exit; // Remove exiting points\n\n\n exit.forEach(function (d) {\n var obj = d[objBindAttr];\n delete d[objBindAttr]; // unbind obj\n\n exitObj(obj);\n removeObj(obj);\n });\n var newObjs = createObjs(enter);\n var pointsData = [].concat(_toConsumableArray(enter), _toConsumableArray(update));\n updateObjs(pointsData); // Add new points\n\n newObjs.forEach(appendObj); //\n\n function createObjs(data) {\n var newObjs = [];\n data.forEach(function (d) {\n var obj = createObj(d);\n\n if (obj) {\n obj[dataBindAttr] = d;\n d[objBindAttr] = obj;\n newObjs.push(obj);\n }\n });\n return newObjs;\n }\n\n function updateObjs(data) {\n data.forEach(function (d) {\n var obj = d[objBindAttr];\n\n if (obj) {\n obj[dataBindAttr] = d;\n updateObj(obj, d);\n }\n });\n }\n}\n\nexport default viewDigest;\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","// TinyColor v1.4.2\n// https://github.com/bgrins/TinyColor\n// Brian Grinstead, MIT License\n\n(function(Math) {\n\nvar trimLeft = /^\\s+/,\n trimRight = /\\s+$/,\n tinyCounter = 0,\n mathRound = Math.round,\n mathMin = Math.min,\n mathMax = Math.max,\n mathRandom = Math.random;\n\nfunction tinycolor (color, opts) {\n\n color = (color) ? color : '';\n opts = opts || { };\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n\n var rgb = inputToRGB(color);\n this._originalInput = color,\n this._r = rgb.r,\n this._g = rgb.g,\n this._b = rgb.b,\n this._a = rgb.a,\n this._roundA = mathRound(100*this._a) / 100,\n this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this._r < 1) { this._r = mathRound(this._r); }\n if (this._g < 1) { this._g = mathRound(this._g); }\n if (this._b < 1) { this._b = mathRound(this._b); }\n\n this._ok = rgb.ok;\n this._tc_id = tinyCounter++;\n}\n\ntinycolor.prototype = {\n isDark: function() {\n return this.getBrightness() < 128;\n },\n isLight: function() {\n return !this.isDark();\n },\n isValid: function() {\n return this._ok;\n },\n getOriginalInput: function() {\n return this._originalInput;\n },\n getFormat: function() {\n return this._format;\n },\n getAlpha: function() {\n return this._a;\n },\n getBrightness: function() {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function() {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r/255;\n GsRGB = rgb.g/255;\n BsRGB = rgb.b/255;\n\n if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);}\n if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);}\n if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);}\n return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);\n },\n setAlpha: function(value) {\n this._a = boundAlpha(value);\n this._roundA = mathRound(100*this._a) / 100;\n return this;\n },\n toHsv: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };\n },\n toHsvString: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);\n return (this._a == 1) ?\n \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" :\n \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \"+ this._roundA + \")\";\n },\n toHsl: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };\n },\n toHslString: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);\n return (this._a == 1) ?\n \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" :\n \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \"+ this._roundA + \")\";\n },\n toHex: function(allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function(allow3Char) {\n return '#' + this.toHex(allow3Char);\n },\n toHex8: function(allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function(allow4Char) {\n return '#' + this.toHex8(allow4Char);\n },\n toRgb: function() {\n return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };\n },\n toRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \")\" :\n \"rgba(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function() {\n return { r: mathRound(bound01(this._r, 255) * 100) + \"%\", g: mathRound(bound01(this._g, 255) * 100) + \"%\", b: mathRound(bound01(this._b, 255) * 100) + \"%\", a: this._a };\n },\n toPercentageRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%)\" :\n \"rgba(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function() {\n if (this._a === 0) {\n return \"transparent\";\n }\n\n if (this._a < 1) {\n return false;\n }\n\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function(secondColor) {\n var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n\n return \"progid:DXImageTransform.Microsoft.gradient(\"+gradientType+\"startColorstr=\"+hex8String+\",endColorstr=\"+secondHex8String+\")\";\n },\n toString: function(format) {\n var formatSet = !!format;\n format = format || this._format;\n\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n\n return formattedString || this.toHexString();\n },\n clone: function() {\n return tinycolor(this.toString());\n },\n\n _applyModification: function(fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function() {\n return this._applyModification(lighten, arguments);\n },\n brighten: function() {\n return this._applyModification(brighten, arguments);\n },\n darken: function() {\n return this._applyModification(darken, arguments);\n },\n desaturate: function() {\n return this._applyModification(desaturate, arguments);\n },\n saturate: function() {\n return this._applyModification(saturate, arguments);\n },\n greyscale: function() {\n return this._applyModification(greyscale, arguments);\n },\n spin: function() {\n return this._applyModification(spin, arguments);\n },\n\n _applyCombination: function(fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function() {\n return this._applyCombination(analogous, arguments);\n },\n complement: function() {\n return this._applyCombination(complement, arguments);\n },\n monochromatic: function() {\n return this._applyCombination(monochromatic, arguments);\n },\n splitcomplement: function() {\n return this._applyCombination(splitcomplement, arguments);\n },\n triad: function() {\n return this._applyCombination(triad, arguments);\n },\n tetrad: function() {\n return this._applyCombination(tetrad, arguments);\n }\n};\n\n// If input is an object, force 1 into \"1.0\" to handle ratios properly\n// String input requires \"1.0\" as input, so 1 will be treated as 1\ntinycolor.fromRatio = function(color, opts) {\n if (typeof color == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n }\n else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n\n return tinycolor(color, opts);\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n// \"red\"\n// \"#f00\" or \"f00\"\n// \"#ff0000\" or \"ff0000\"\n// \"#ff000000\" or \"ff000000\"\n// \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n// \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n// \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n// \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n// \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n// \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n// \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n\n var rgb = { r: 0, g: 0, b: 0 };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n\n if (typeof color == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n\n a = boundAlpha(a);\n\n return {\n ok: ok,\n format: color.format || format,\n r: mathMin(255, mathMax(rgb.r, 0)),\n g: mathMin(255, mathMax(rgb.g, 0)),\n b: mathMin(255, mathMax(rgb.b, 0)),\n a: a\n };\n}\n\n\n// Conversion Functions\n// --------------------\n\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// \n\n// `rgbToRgb`\n// Handle bounds / percentage checking to conform to CSS color spec\n// \n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b){\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n}\n\n// `rgbToHsl`\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, l = (max + min) / 2;\n\n if(max == min) {\n h = s = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n\n h /= 6;\n }\n\n return { h: h, s: s, l: l };\n}\n\n// `hslToRgb`\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n var r, g, b;\n\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n\n function hue2rgb(p, q, t) {\n if(t < 0) t += 1;\n if(t > 1) t -= 1;\n if(t < 1/6) return p + (q - p) * 6 * t;\n if(t < 1/2) return q;\n if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n return p;\n }\n\n if(s === 0) {\n r = g = b = l; // achromatic\n }\n else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nfunction rgbToHsv(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, v = max;\n\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n\n if(max == min) {\n h = 0; // achromatic\n }\n else {\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h /= 6;\n }\n return { h: h, s: s, v: v };\n}\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\n function hsvToRgb(h, s, v) {\n\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHex`\n// Converts an RGB color to hex\n// Assumes r, g, and b are contained in the set [0, 255]\n// Returns a 3 or 6 character hex\nfunction rgbToHex(r, g, b, allow3Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// `rgbaToHex`\n// Converts an RGBA color plus alpha transparency to hex\n// Assumes r, g, b are contained in the set [0, 255] and\n// a in [0, 1]. Returns a 4 or 8 character rgba hex\nfunction rgbaToHex(r, g, b, a, allow4Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16)),\n pad2(convertDecimalToHex(a))\n ];\n\n // Return a 4 character hex if possible\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// `rgbaToArgbHex`\n// Converts an RGBA color to an ARGB Hex8 string\n// Rarely used, but required for \"toFilter()\"\nfunction rgbaToArgbHex(r, g, b, a) {\n\n var hex = [\n pad2(convertDecimalToHex(a)),\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n return hex.join(\"\");\n}\n\n// `equals`\n// Can be called with any tinycolor input\ntinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) { return false; }\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n};\n\ntinycolor.random = function() {\n return tinycolor.fromRatio({\n r: mathRandom(),\n g: mathRandom(),\n b: mathRandom()\n });\n};\n\n\n// Modification Functions\n// ----------------------\n// Thanks to less.js for some of the basics here\n// \n\nfunction desaturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction saturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction greyscale(color) {\n return tinycolor(color).desaturate(100);\n}\n\nfunction lighten (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\nfunction brighten(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var rgb = tinycolor(color).toRgb();\n rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));\n rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));\n rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));\n return tinycolor(rgb);\n}\n\nfunction darken (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\n// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n// Values outside of this range will be wrapped into this range.\nfunction spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n}\n\n// Combination Functions\n// ---------------------\n// Thanks to jQuery xColor for some of the ideas behind these\n// \n\nfunction complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n}\n\nfunction triad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction tetrad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),\n tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})\n ];\n}\n\nfunction analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n\n for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n}\n\nfunction monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h, s = hsv.s, v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n\n while (results--) {\n ret.push(tinycolor({ h: h, s: s, v: v}));\n v = (v + modification) % 1;\n }\n\n return ret;\n}\n\n// Utility Functions\n// ---------------------\n\ntinycolor.mix = function(color1, color2, amount) {\n amount = (amount === 0) ? 0 : (amount || 50);\n\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n\n var p = amount / 100;\n\n var rgba = {\n r: ((rgb2.r - rgb1.r) * p) + rgb1.r,\n g: ((rgb2.g - rgb1.g) * p) + rgb1.g,\n b: ((rgb2.b - rgb1.b) * p) + rgb1.b,\n a: ((rgb2.a - rgb1.a) * p) + rgb1.a\n };\n\n return tinycolor(rgba);\n};\n\n\n// Readability Functions\n// ---------------------\n// false\n// tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\ntinycolor.isReadable = function(color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n\n out = false;\n\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n\n};\n\n// `mostReadable`\n// Given a base color and a list of possible foreground or background\n// colors for that base, returns the most readable color.\n// Optionally returns Black or White if the most readable color is unreadable.\n// *Example*\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\ntinycolor.mostReadable = function(baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size ;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors ;\n level = args.level;\n size = args.size;\n\n for (var i= 0; i < colorList.length ; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n\n if (tinycolor.isReadable(baseColor, bestColor, {\"level\":level,\"size\":size}) || !includeFallbackColors) {\n return bestColor;\n }\n else {\n args.includeFallbackColors=false;\n return tinycolor.mostReadable(baseColor,[\"#fff\", \"#000\"],args);\n }\n};\n\n\n// Big List of Colors\n// ------------------\n// \nvar names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n};\n\n// Make it easy to access colors via `hexNames[hex]`\nvar hexNames = tinycolor.hexNames = flip(names);\n\n\n// Utilities\n// ---------\n\n// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\nfunction flip(o) {\n var flipped = { };\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n}\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n a = parseFloat(a);\n\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n\n return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n if (isOnePointZero(n)) { n = \"100%\"; }\n\n var processPercent = isPercentage(n);\n n = mathMin(max, mathMax(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if ((Math.abs(n - max) < 0.000001)) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return (n % max) / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n return mathMin(1, mathMax(0, val));\n}\n\n// Parse a base-16 hex value into a base-10 integer\nfunction parseIntFromHex(val) {\n return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// \nfunction isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n return typeof n === \"string\" && n.indexOf('%') != -1;\n}\n\n// Force a hex value to have 2 characters\nfunction pad2(c) {\n return c.length == 1 ? '0' + c : '' + c;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n if (n <= 1) {\n n = (n * 100) + \"%\";\n }\n\n return n;\n}\n\n// Converts a decimal to a hex value\nfunction convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n// Converts a hex value to a decimal\nfunction convertHexToDecimal(h) {\n return (parseIntFromHex(h) / 255);\n}\n\nvar matchers = (function() {\n\n // \n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // \n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n})();\n\n// `isValidCSSUnit`\n// Take in a single string / number and check to see if it looks like a CSS unit\n// (see `matchers` above for definition).\nfunction isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n}\n\n// `stringInputToObject`\n// Permissive string parsing. Take in a number of formats, and output an object\n// based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\nfunction stringInputToObject(color) {\n\n color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n }\n else if (color == 'transparent') {\n return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if ((match = matchers.rgb.exec(color))) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n if ((match = matchers.rgba.exec(color))) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n if ((match = matchers.hsl.exec(color))) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n if ((match = matchers.hsla.exec(color))) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n if ((match = matchers.hsv.exec(color))) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n if ((match = matchers.hsva.exec(color))) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n if ((match = matchers.hex8.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex6.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if ((match = matchers.hex4.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n a: convertHexToDecimal(match[4] + '' + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex3.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n\n return false;\n}\n\nfunction validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\"level\":\"AA\", \"size\":\"small\"};\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return {\"level\":level, \"size\":size};\n}\n\n// Node: Export function\nif (typeof module !== \"undefined\" && module.exports) {\n module.exports = tinycolor;\n}\n// AMD/requirejs: Define the module\nelse if (typeof define === 'function' && define.amd) {\n define(function () {return tinycolor;});\n}\n// Browser: Expose to window\nelse {\n window.tinycolor = tinycolor;\n}\n\n})(Math);\n","import { Group, Mesh, MeshLambertMaterial, Color, BufferGeometry, BufferAttribute, Matrix4, Vector3, SphereBufferGeometry, CylinderBufferGeometry, TubeBufferGeometry, ConeBufferGeometry, Line, LineBasicMaterial, QuadraticBezierCurve3, CubicBezierCurve3, Box3 } from 'three';\nimport { forceSimulation, forceLink, forceManyBody, forceCenter, forceRadial } from 'd3-force-3d';\nimport graph from 'ngraph.graph';\nimport forcelayout from 'ngraph.forcelayout';\nimport Kapsule from 'kapsule';\nimport accessorFn from 'accessor-fn';\nimport { min, max } from 'd3-array';\nimport dataJoint from 'data-joint';\nimport { scaleOrdinal } from 'd3-scale';\nimport { schemePaired } from 'd3-scale-chromatic';\nimport tinyColor from 'tinycolor2';\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar materialDispose = function materialDispose(material) {\n if (material instanceof Array) {\n material.forEach(materialDispose);\n } else {\n if (material.map) {\n material.map.dispose();\n }\n\n material.dispose();\n }\n};\n\nvar deallocate = function deallocate(obj) {\n if (obj.geometry) {\n obj.geometry.dispose();\n }\n\n if (obj.material) {\n materialDispose(obj.material);\n }\n\n if (obj.texture) {\n obj.texture.dispose();\n }\n\n if (obj.children) {\n obj.children.forEach(deallocate);\n }\n};\n\nvar emptyObject = function emptyObject(obj) {\n while (obj.children.length) {\n var childObj = obj.children[0];\n obj.remove(childObj);\n deallocate(childObj);\n }\n};\n\nvar _excluded = [\"objFilter\"];\n\nfunction threeDigest(data, scene) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n var _ref$objFilter = _ref.objFilter,\n objFilter = _ref$objFilter === void 0 ? function () {\n return true;\n } : _ref$objFilter,\n options = _objectWithoutProperties(_ref, _excluded);\n\n return dataJoint(data, scene.children.filter(objFilter), function (obj) {\n return scene.add(obj);\n }, function (obj) {\n scene.remove(obj);\n emptyObject(obj);\n }, _objectSpread2({\n objBindAttr: '__threeObj'\n }, options));\n}\n\nvar colorStr2Hex = function colorStr2Hex(str) {\n return isNaN(str) ? parseInt(tinyColor(str).toHex(), 16) : str;\n};\n\nvar colorAlpha = function colorAlpha(str) {\n return isNaN(str) ? tinyColor(str).getAlpha() : 1;\n};\n\nvar autoColorScale = scaleOrdinal(schemePaired); // Autoset attribute colorField by colorByAccessor property\n// If an object has already a color, don't set it\n// Objects can be nodes or links\n\nfunction autoColorObjects(objects, colorByAccessor, colorField) {\n if (!colorByAccessor || typeof colorField !== 'string') return;\n objects.filter(function (obj) {\n return !obj[colorField];\n }).forEach(function (obj) {\n obj[colorField] = autoColorScale(colorByAccessor(obj));\n });\n}\n\nfunction getDagDepths (_ref, idAccessor) {\n var nodes = _ref.nodes,\n links = _ref.links;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$nodeFilter = _ref2.nodeFilter,\n nodeFilter = _ref2$nodeFilter === void 0 ? function () {\n return true;\n } : _ref2$nodeFilter,\n _ref2$onLoopError = _ref2.onLoopError,\n onLoopError = _ref2$onLoopError === void 0 ? function (loopIds) {\n throw \"Invalid DAG structure! Found cycle in node path: \".concat(loopIds.join(' -> '), \".\");\n } : _ref2$onLoopError;\n\n // linked graph\n var graph = {};\n nodes.forEach(function (node) {\n return graph[idAccessor(node)] = {\n data: node,\n out: [],\n depth: -1,\n skip: !nodeFilter(node)\n };\n });\n links.forEach(function (_ref3) {\n var source = _ref3.source,\n target = _ref3.target;\n var sourceId = getNodeId(source);\n var targetId = getNodeId(target);\n if (!graph.hasOwnProperty(sourceId)) throw \"Missing source node with id: \".concat(sourceId);\n if (!graph.hasOwnProperty(targetId)) throw \"Missing target node with id: \".concat(targetId);\n var sourceNode = graph[sourceId];\n var targetNode = graph[targetId];\n sourceNode.out.push(targetNode);\n\n function getNodeId(node) {\n return _typeof(node) === 'object' ? idAccessor(node) : node;\n }\n });\n var foundLoops = [];\n traverse(Object.values(graph));\n var nodeDepths = Object.assign.apply(Object, [{}].concat(_toConsumableArray(Object.entries(graph).filter(function (_ref4) {\n var _ref5 = _slicedToArray(_ref4, 2),\n node = _ref5[1];\n\n return !node.skip;\n }).map(function (_ref6) {\n var _ref7 = _slicedToArray(_ref6, 2),\n id = _ref7[0],\n node = _ref7[1];\n\n return _defineProperty({}, id, node.depth);\n }))));\n return nodeDepths;\n\n function traverse(nodes) {\n var nodeStack = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var currentDepth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n for (var i = 0, l = nodes.length; i < l; i++) {\n var node = nodes[i];\n\n if (nodeStack.indexOf(node) !== -1) {\n var _ret = function () {\n var loop = [].concat(_toConsumableArray(nodeStack.slice(nodeStack.indexOf(node))), [node]).map(function (d) {\n return idAccessor(d.data);\n });\n\n if (!foundLoops.some(function (foundLoop) {\n return foundLoop.length === loop.length && foundLoop.every(function (id, idx) {\n return id === loop[idx];\n });\n })) {\n foundLoops.push(loop);\n onLoopError(loop);\n }\n\n return \"continue\";\n }();\n\n if (_ret === \"continue\") continue;\n }\n\n if (currentDepth > node.depth) {\n // Don't unnecessarily revisit chunks of the graph\n node.depth = currentDepth;\n traverse(node.out, [].concat(_toConsumableArray(nodeStack), [node]), currentDepth + (node.skip ? 0 : 1));\n }\n }\n }\n}\n\nvar three$1 = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n Group: Group,\n Mesh: Mesh,\n MeshLambertMaterial: MeshLambertMaterial,\n Color: Color,\n BufferGeometry: BufferGeometry,\n BufferAttribute: BufferAttribute,\n Matrix4: Matrix4,\n Vector3: Vector3,\n SphereBufferGeometry: SphereBufferGeometry,\n CylinderBufferGeometry: CylinderBufferGeometry,\n TubeBufferGeometry: TubeBufferGeometry,\n ConeBufferGeometry: ConeBufferGeometry,\n Line: Line,\n LineBasicMaterial: LineBasicMaterial,\n QuadraticBezierCurve3: QuadraticBezierCurve3,\n CubicBezierCurve3: CubicBezierCurve3,\n Box3: Box3\n};\nvar ngraph = {\n graph: graph,\n forcelayout: forcelayout\n};\n\nvar DAG_LEVEL_NODE_RATIO = 2; // support multiple method names for backwards threejs compatibility\n\nvar setAttributeFn = new three$1.BufferGeometry().setAttribute ? 'setAttribute' : 'addAttribute';\nvar applyMatrix4Fn = new three$1.BufferGeometry().applyMatrix4 ? 'applyMatrix4' : 'applyMatrix';\nvar ForceGraph = Kapsule({\n props: {\n jsonUrl: {\n onChange: function onChange(jsonUrl, state) {\n var _this = this;\n\n if (jsonUrl && !state.fetchingJson) {\n // Load data asynchronously\n state.fetchingJson = true;\n state.onLoading();\n fetch(jsonUrl).then(function (r) {\n return r.json();\n }).then(function (json) {\n state.fetchingJson = false;\n state.onFinishLoading(json);\n\n _this.graphData(json);\n });\n }\n },\n triggerUpdate: false\n },\n graphData: {\n \"default\": {\n nodes: [],\n links: []\n },\n onChange: function onChange(graphData, state) {\n state.engineRunning = false; // Pause simulation immediately\n }\n },\n numDimensions: {\n \"default\": 3,\n onChange: function onChange(numDim, state) {\n var chargeForce = state.d3ForceLayout.force('charge'); // Increase repulsion on 3D mode for improved spatial separation\n\n if (chargeForce) {\n chargeForce.strength(numDim > 2 ? -60 : -30);\n }\n\n if (numDim < 3) {\n eraseDimension(state.graphData.nodes, 'z');\n }\n\n if (numDim < 2) {\n eraseDimension(state.graphData.nodes, 'y');\n }\n\n function eraseDimension(nodes, dim) {\n nodes.forEach(function (d) {\n delete d[dim]; // position\n\n delete d[\"v\".concat(dim)]; // velocity\n });\n }\n }\n },\n dagMode: {\n onChange: function onChange(dagMode, state) {\n // td, bu, lr, rl, zin, zout, radialin, radialout\n !dagMode && state.forceEngine === 'd3' && (state.graphData.nodes || []).forEach(function (n) {\n return n.fx = n.fy = n.fz = undefined;\n }); // unfix nodes when disabling dag mode\n }\n },\n dagLevelDistance: {},\n dagNodeFilter: {\n \"default\": function _default(node) {\n return true;\n }\n },\n onDagError: {\n triggerUpdate: false\n },\n nodeRelSize: {\n \"default\": 4\n },\n // volume per val unit\n nodeId: {\n \"default\": 'id'\n },\n nodeVal: {\n \"default\": 'val'\n },\n nodeResolution: {\n \"default\": 8\n },\n // how many slice segments in the sphere's circumference\n nodeColor: {\n \"default\": 'color'\n },\n nodeAutoColorBy: {},\n nodeOpacity: {\n \"default\": 0.75\n },\n nodeVisibility: {\n \"default\": true\n },\n nodeThreeObject: {},\n nodeThreeObjectExtend: {\n \"default\": false\n },\n linkSource: {\n \"default\": 'source'\n },\n linkTarget: {\n \"default\": 'target'\n },\n linkVisibility: {\n \"default\": true\n },\n linkColor: {\n \"default\": 'color'\n },\n linkAutoColorBy: {},\n linkOpacity: {\n \"default\": 0.2\n },\n linkWidth: {},\n // Rounded to nearest decimal. For falsy values use dimensionless line with 1px regardless of distance.\n linkResolution: {\n \"default\": 6\n },\n // how many radial segments in each line tube's geometry\n linkCurvature: {\n \"default\": 0,\n triggerUpdate: false\n },\n // line curvature radius (0: straight, 1: semi-circle)\n linkCurveRotation: {\n \"default\": 0,\n triggerUpdate: false\n },\n // line curve rotation along the line axis (0: interection with XY plane, PI: upside down)\n linkMaterial: {},\n linkThreeObject: {},\n linkThreeObjectExtend: {\n \"default\": false\n },\n linkPositionUpdate: {\n triggerUpdate: false\n },\n // custom function to call for updating the link's position. Signature: (threeObj, { start: { x, y, z}, end: { x, y, z }}, link). If the function returns a truthy value, the regular link position update will not run.\n linkDirectionalArrowLength: {\n \"default\": 0\n },\n linkDirectionalArrowColor: {},\n linkDirectionalArrowRelPos: {\n \"default\": 0.5,\n triggerUpdate: false\n },\n // value between 0<>1 indicating the relative pos along the (exposed) line\n linkDirectionalArrowResolution: {\n \"default\": 8\n },\n // how many slice segments in the arrow's conic circumference\n linkDirectionalParticles: {\n \"default\": 0\n },\n // animate photons travelling in the link direction\n linkDirectionalParticleSpeed: {\n \"default\": 0.01,\n triggerUpdate: false\n },\n // in link length ratio per frame\n linkDirectionalParticleWidth: {\n \"default\": 0.5\n },\n linkDirectionalParticleColor: {},\n linkDirectionalParticleResolution: {\n \"default\": 4\n },\n // how many slice segments in the particle sphere's circumference\n forceEngine: {\n \"default\": 'd3'\n },\n // d3 or ngraph\n d3AlphaMin: {\n \"default\": 0\n },\n d3AlphaDecay: {\n \"default\": 0.0228,\n triggerUpdate: false,\n onChange: function onChange(alphaDecay, state) {\n state.d3ForceLayout.alphaDecay(alphaDecay);\n }\n },\n d3AlphaTarget: {\n \"default\": 0,\n triggerUpdate: false,\n onChange: function onChange(alphaTarget, state) {\n state.d3ForceLayout.alphaTarget(alphaTarget);\n }\n },\n d3VelocityDecay: {\n \"default\": 0.4,\n triggerUpdate: false,\n onChange: function onChange(velocityDecay, state) {\n state.d3ForceLayout.velocityDecay(velocityDecay);\n }\n },\n ngraphPhysics: {\n \"default\": {\n // defaults from https://github.com/anvaka/ngraph.physics.simulator/blob/master/index.js\n timeStep: 20,\n gravity: -1.2,\n theta: 0.8,\n springLength: 30,\n springCoefficient: 0.0008,\n dragCoefficient: 0.02\n }\n },\n warmupTicks: {\n \"default\": 0,\n triggerUpdate: false\n },\n // how many times to tick the force engine at init before starting to render\n cooldownTicks: {\n \"default\": Infinity,\n triggerUpdate: false\n },\n cooldownTime: {\n \"default\": 15000,\n triggerUpdate: false\n },\n // ms\n onLoading: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onFinishLoading: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onUpdate: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onFinishUpdate: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onEngineTick: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onEngineStop: {\n \"default\": function _default() {},\n triggerUpdate: false\n }\n },\n methods: {\n refresh: function refresh(state) {\n state._flushObjects = true;\n\n state._rerender();\n\n return this;\n },\n // Expose d3 forces for external manipulation\n d3Force: function d3Force(state, forceName, forceFn) {\n if (forceFn === undefined) {\n return state.d3ForceLayout.force(forceName); // Force getter\n }\n\n state.d3ForceLayout.force(forceName, forceFn); // Force setter\n\n return this;\n },\n d3ForceLayout: function d3ForceLayout(state, _d3ForceLayout) {\n if (_d3ForceLayout === undefined) {\n return state.d3ForceLayout; // d3ForceLayout getter\n } // state.d3ForceLayout = d3ForceLayout; // d3ForceLayout setter\n\n\n console.log('d3ForceLayout setter deactivated');\n return this;\n },\n d3ReheatSimulation: function d3ReheatSimulation(state) {\n state.d3ForceLayout.alpha(1);\n this.resetCountdown();\n return this;\n },\n simulationEngineRunning: function simulationEngineRunning(state) {\n return state.engineRunning;\n },\n // reset cooldown state\n resetCountdown: function resetCountdown(state) {\n state.cntTicks = 0;\n state.startTickTime = new Date();\n state.engineRunning = true;\n return this;\n },\n tickFrame: function tickFrame(state) {\n var isD3Sim = state.forceEngine !== 'ngraph';\n\n if (state.engineRunning) {\n layoutTick();\n }\n\n updateArrows();\n updatePhotons();\n return this; //\n\n function layoutTick() {\n if (++state.cntTicks > state.cooldownTicks || new Date() - state.startTickTime > state.cooldownTime || isD3Sim && state.d3AlphaMin > 0 && state.d3ForceLayout.alpha() < state.d3AlphaMin) {\n state.engineRunning = false; // Stop ticking graph\n\n state.onEngineStop();\n } else {\n state.layout[isD3Sim ? 'tick' : 'step'](); // Tick it\n\n state.onEngineTick();\n } // Update nodes position\n\n\n state.graphData.nodes.forEach(function (node) {\n var obj = node.__threeObj;\n if (!obj) return;\n var pos = isD3Sim ? node : state.layout.getNodePosition(node[state.nodeId]);\n obj.position.x = pos.x;\n obj.position.y = pos.y || 0;\n obj.position.z = pos.z || 0;\n }); // Update links position\n\n var linkWidthAccessor = accessorFn(state.linkWidth);\n var linkCurvatureAccessor = accessorFn(state.linkCurvature);\n var linkCurveRotationAccessor = accessorFn(state.linkCurveRotation);\n var linkThreeObjectExtendAccessor = accessorFn(state.linkThreeObjectExtend);\n state.graphData.links.forEach(function (link) {\n var lineObj = link.__lineObj;\n if (!lineObj) return;\n var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id);\n var start = pos[isD3Sim ? 'source' : 'from'];\n var end = pos[isD3Sim ? 'target' : 'to'];\n if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link\n\n calcLinkCurve(link); // calculate link curve for all links, including custom replaced, so it can be used in directional functionality\n\n var extendedObj = linkThreeObjectExtendAccessor(link);\n\n if (state.linkPositionUpdate && state.linkPositionUpdate(extendedObj ? lineObj.children[1] : lineObj, // pass child custom object if extending the default\n {\n start: {\n x: start.x,\n y: start.y,\n z: start.z\n },\n end: {\n x: end.x,\n y: end.y,\n z: end.z\n }\n }, link) && !extendedObj) {\n // exit if successfully custom updated position of non-extended obj\n return;\n }\n\n var curveResolution = 30; // # line segments\n\n var curve = link.__curve; // select default line obj if it's an extended group\n\n var line = lineObj.children.length ? lineObj.children[0] : lineObj;\n\n if (line.type === 'Line') {\n // Update line geometry\n if (!curve) {\n // straight line\n var linePos = line.geometry.getAttribute('position');\n\n if (!linePos || !linePos.array || linePos.array.length !== 6) {\n line.geometry[setAttributeFn]('position', linePos = new three$1.BufferAttribute(new Float32Array(2 * 3), 3));\n }\n\n linePos.array[0] = start.x;\n linePos.array[1] = start.y || 0;\n linePos.array[2] = start.z || 0;\n linePos.array[3] = end.x;\n linePos.array[4] = end.y || 0;\n linePos.array[5] = end.z || 0;\n linePos.needsUpdate = true;\n } else {\n // bezier curve line\n line.geometry.setFromPoints(curve.getPoints(curveResolution));\n }\n\n line.geometry.computeBoundingSphere();\n } else if (line.type === 'Mesh') {\n // Update cylinder geometry\n if (!curve) {\n // straight tube\n if (!line.geometry.type.match(/^Cylinder(Buffer)?Geometry$/)) {\n var linkWidth = Math.ceil(linkWidthAccessor(link) * 10) / 10;\n var r = linkWidth / 2;\n var geometry = new three$1.CylinderBufferGeometry(r, r, 1, state.linkResolution, 1, false);\n geometry[applyMatrix4Fn](new three$1.Matrix4().makeTranslation(0, 1 / 2, 0));\n geometry[applyMatrix4Fn](new three$1.Matrix4().makeRotationX(Math.PI / 2));\n line.geometry.dispose();\n line.geometry = geometry;\n }\n\n var vStart = new three$1.Vector3(start.x, start.y || 0, start.z || 0);\n var vEnd = new three$1.Vector3(end.x, end.y || 0, end.z || 0);\n var distance = vStart.distanceTo(vEnd);\n line.position.x = vStart.x;\n line.position.y = vStart.y;\n line.position.z = vStart.z;\n line.scale.z = distance;\n line.parent.localToWorld(vEnd); // lookAt requires world coords\n\n line.lookAt(vEnd);\n } else {\n // curved tube\n if (!line.geometry.type.match(/^Tube(Buffer)?Geometry$/)) {\n // reset object positioning\n line.position.set(0, 0, 0);\n line.rotation.set(0, 0, 0);\n line.scale.set(1, 1, 1);\n }\n\n var _linkWidth = Math.ceil(linkWidthAccessor(link) * 10) / 10;\n\n var _r = _linkWidth / 2;\n\n var _geometry = new three$1.TubeBufferGeometry(curve, curveResolution, _r, state.linkResolution, false);\n\n line.geometry.dispose();\n line.geometry = _geometry;\n }\n }\n }); //\n\n function calcLinkCurve(link) {\n var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id);\n var start = pos[isD3Sim ? 'source' : 'from'];\n var end = pos[isD3Sim ? 'target' : 'to'];\n if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link\n\n var curvature = linkCurvatureAccessor(link);\n\n if (!curvature) {\n link.__curve = null; // Straight line\n } else {\n // bezier curve line (only for line types)\n var vStart = new three$1.Vector3(start.x, start.y || 0, start.z || 0);\n var vEnd = new three$1.Vector3(end.x, end.y || 0, end.z || 0);\n var l = vStart.distanceTo(vEnd); // line length\n\n var curve;\n var curveRotation = linkCurveRotationAccessor(link);\n\n if (l > 0) {\n var dx = end.x - start.x;\n var dy = end.y - start.y || 0;\n var vLine = new three$1.Vector3().subVectors(vEnd, vStart);\n var cp = vLine.clone().multiplyScalar(curvature).cross(dx !== 0 || dy !== 0 ? new three$1.Vector3(0, 0, 1) : new three$1.Vector3(0, 1, 0)) // avoid cross-product of parallel vectors (prefer Z, fallback to Y)\n .applyAxisAngle(vLine.normalize(), curveRotation) // rotate along line axis according to linkCurveRotation\n .add(new three$1.Vector3().addVectors(vStart, vEnd).divideScalar(2));\n curve = new three$1.QuadraticBezierCurve3(vStart, cp, vEnd);\n } else {\n // Same point, draw a loop\n var d = curvature * 70;\n var endAngle = -curveRotation; // Rotate clockwise (from Z angle perspective)\n\n var startAngle = endAngle + Math.PI / 2;\n curve = new three$1.CubicBezierCurve3(vStart, new three$1.Vector3(d * Math.cos(startAngle), d * Math.sin(startAngle), 0).add(vStart), new three$1.Vector3(d * Math.cos(endAngle), d * Math.sin(endAngle), 0).add(vStart), vEnd);\n }\n\n link.__curve = curve;\n }\n }\n }\n\n function updateArrows() {\n // update link arrow position\n var arrowRelPosAccessor = accessorFn(state.linkDirectionalArrowRelPos);\n var arrowLengthAccessor = accessorFn(state.linkDirectionalArrowLength);\n var nodeValAccessor = accessorFn(state.nodeVal);\n state.graphData.links.forEach(function (link) {\n var arrowObj = link.__arrowObj;\n if (!arrowObj) return;\n var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id);\n var start = pos[isD3Sim ? 'source' : 'from'];\n var end = pos[isD3Sim ? 'target' : 'to'];\n if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link\n\n var startR = Math.sqrt(Math.max(0, nodeValAccessor(start) || 1)) * state.nodeRelSize;\n var endR = Math.sqrt(Math.max(0, nodeValAccessor(end) || 1)) * state.nodeRelSize;\n var arrowLength = arrowLengthAccessor(link);\n var arrowRelPos = arrowRelPosAccessor(link);\n var getPosAlongLine = link.__curve ? function (t) {\n return link.__curve.getPoint(t);\n } // interpolate along bezier curve\n : function (t) {\n // straight line: interpolate linearly\n var iplt = function iplt(dim, start, end, t) {\n return start[dim] + (end[dim] - start[dim]) * t || 0;\n };\n\n return {\n x: iplt('x', start, end, t),\n y: iplt('y', start, end, t),\n z: iplt('z', start, end, t)\n };\n };\n var lineLen = link.__curve ? link.__curve.getLength() : Math.sqrt(['x', 'y', 'z'].map(function (dim) {\n return Math.pow((end[dim] || 0) - (start[dim] || 0), 2);\n }).reduce(function (acc, v) {\n return acc + v;\n }, 0));\n var posAlongLine = startR + arrowLength + (lineLen - startR - endR - arrowLength) * arrowRelPos;\n var arrowHead = getPosAlongLine(posAlongLine / lineLen);\n var arrowTail = getPosAlongLine((posAlongLine - arrowLength) / lineLen);\n ['x', 'y', 'z'].forEach(function (dim) {\n return arrowObj.position[dim] = arrowTail[dim];\n });\n\n var headVec = _construct(three$1.Vector3, _toConsumableArray(['x', 'y', 'z'].map(function (c) {\n return arrowHead[c];\n })));\n\n arrowObj.parent.localToWorld(headVec); // lookAt requires world coords\n\n arrowObj.lookAt(headVec);\n });\n }\n\n function updatePhotons() {\n // update link particle positions\n var particleSpeedAccessor = accessorFn(state.linkDirectionalParticleSpeed);\n state.graphData.links.forEach(function (link) {\n var cyclePhotons = link.__photonsObj && link.__photonsObj.children;\n var singleHopPhotons = link.__singleHopPhotonsObj && link.__singleHopPhotonsObj.children;\n if ((!singleHopPhotons || !singleHopPhotons.length) && (!cyclePhotons || !cyclePhotons.length)) return;\n var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id);\n var start = pos[isD3Sim ? 'source' : 'from'];\n var end = pos[isD3Sim ? 'target' : 'to'];\n if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link\n\n var particleSpeed = particleSpeedAccessor(link);\n var getPhotonPos = link.__curve ? function (t) {\n return link.__curve.getPoint(t);\n } // interpolate along bezier curve\n : function (t) {\n // straight line: interpolate linearly\n var iplt = function iplt(dim, start, end, t) {\n return start[dim] + (end[dim] - start[dim]) * t || 0;\n };\n\n return {\n x: iplt('x', start, end, t),\n y: iplt('y', start, end, t),\n z: iplt('z', start, end, t)\n };\n };\n var photons = [].concat(_toConsumableArray(cyclePhotons || []), _toConsumableArray(singleHopPhotons || []));\n photons.forEach(function (photon, idx) {\n var singleHop = photon.parent.__linkThreeObjType === 'singleHopPhotons';\n\n if (!photon.hasOwnProperty('__progressRatio')) {\n photon.__progressRatio = singleHop ? 0 : idx / cyclePhotons.length;\n }\n\n photon.__progressRatio += particleSpeed;\n\n if (photon.__progressRatio >= 1) {\n if (!singleHop) {\n photon.__progressRatio = photon.__progressRatio % 1;\n } else {\n // remove particle\n photon.parent.remove(photon);\n emptyObject(photon);\n return;\n }\n }\n\n var photonPosRatio = photon.__progressRatio;\n var pos = getPhotonPos(photonPosRatio);\n ['x', 'y', 'z'].forEach(function (dim) {\n return photon.position[dim] = pos[dim];\n });\n });\n });\n }\n },\n emitParticle: function emitParticle(state, link) {\n if (link) {\n if (!link.__singleHopPhotonsObj) {\n var obj = new three$1.Group();\n obj.__linkThreeObjType = 'singleHopPhotons';\n link.__singleHopPhotonsObj = obj;\n state.graphScene.add(obj);\n }\n\n var particleWidthAccessor = accessorFn(state.linkDirectionalParticleWidth);\n var photonR = Math.ceil(particleWidthAccessor(link) * 10) / 10 / 2;\n var numSegments = state.linkDirectionalParticleResolution;\n var particleGeometry = new three$1.SphereBufferGeometry(photonR, numSegments, numSegments);\n var linkColorAccessor = accessorFn(state.linkColor);\n var particleColorAccessor = accessorFn(state.linkDirectionalParticleColor);\n var photonColor = particleColorAccessor(link) || linkColorAccessor(link) || '#f0f0f0';\n var materialColor = new three$1.Color(colorStr2Hex(photonColor));\n var opacity = state.linkOpacity * 3;\n var particleMaterial = new three$1.MeshLambertMaterial({\n color: materialColor,\n transparent: true,\n opacity: opacity\n }); // add a single hop particle\n\n link.__singleHopPhotonsObj.add(new three$1.Mesh(particleGeometry, particleMaterial));\n }\n\n return this;\n },\n getGraphBbox: function getGraphBbox(state) {\n var nodeFilter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {\n return true;\n };\n if (!state.initialised) return null; // recursively collect all nested geometries bboxes\n\n var bboxes = function getBboxes(obj) {\n var bboxes = [];\n\n if (obj.geometry) {\n obj.geometry.computeBoundingBox();\n var box = new three$1.Box3();\n box.copy(obj.geometry.boundingBox).applyMatrix4(obj.matrixWorld);\n bboxes.push(box);\n }\n\n return bboxes.concat.apply(bboxes, _toConsumableArray((obj.children || []).filter(function (obj) {\n return !obj.hasOwnProperty('__graphObjType') || obj.__graphObjType === 'node' && nodeFilter(obj.__data);\n } // exclude filtered out nodes\n ).map(getBboxes)));\n }(state.graphScene);\n\n if (!bboxes.length) return null; // extract global x,y,z min/max\n\n return Object.assign.apply(Object, _toConsumableArray(['x', 'y', 'z'].map(function (c) {\n return _defineProperty({}, c, [min(bboxes, function (bb) {\n return bb.min[c];\n }), max(bboxes, function (bb) {\n return bb.max[c];\n })]);\n })));\n }\n },\n stateInit: function stateInit() {\n return {\n d3ForceLayout: forceSimulation().force('link', forceLink()).force('charge', forceManyBody()).force('center', forceCenter()).force('dagRadial', null).stop(),\n engineRunning: false\n };\n },\n init: function init(threeObj, state) {\n // Main three object to manipulate\n state.graphScene = threeObj;\n },\n update: function update(state, changedProps) {\n var hasAnyPropChanged = function hasAnyPropChanged(propList) {\n return propList.some(function (p) {\n return changedProps.hasOwnProperty(p);\n });\n };\n\n state.engineRunning = false; // pause simulation\n\n state.onUpdate();\n\n if (state.nodeAutoColorBy !== null && hasAnyPropChanged(['nodeAutoColorBy', 'graphData', 'nodeColor'])) {\n // Auto add color to uncolored nodes\n autoColorObjects(state.graphData.nodes, accessorFn(state.nodeAutoColorBy), state.nodeColor);\n }\n\n if (state.linkAutoColorBy !== null && hasAnyPropChanged(['linkAutoColorBy', 'graphData', 'linkColor'])) {\n // Auto add color to uncolored links\n autoColorObjects(state.graphData.links, accessorFn(state.linkAutoColorBy), state.linkColor);\n } // Digest nodes WebGL objects\n\n\n if (state._flushObjects || hasAnyPropChanged(['graphData', 'nodeThreeObject', 'nodeThreeObjectExtend', 'nodeVal', 'nodeColor', 'nodeVisibility', 'nodeRelSize', 'nodeResolution', 'nodeOpacity'])) {\n var customObjectAccessor = accessorFn(state.nodeThreeObject);\n var customObjectExtendAccessor = accessorFn(state.nodeThreeObjectExtend);\n var valAccessor = accessorFn(state.nodeVal);\n var colorAccessor = accessorFn(state.nodeColor);\n var visibilityAccessor = accessorFn(state.nodeVisibility);\n var sphereGeometries = {}; // indexed by node value\n\n var sphereMaterials = {}; // indexed by color\n\n threeDigest(state.graphData.nodes.filter(visibilityAccessor), state.graphScene, {\n purge: state._flushObjects || hasAnyPropChanged([// recreate objects if any of these props have changed\n 'nodeThreeObject', 'nodeThreeObjectExtend']),\n objFilter: function objFilter(obj) {\n return obj.__graphObjType === 'node';\n },\n createObj: function createObj(node) {\n var customObj = customObjectAccessor(node);\n var extendObj = customObjectExtendAccessor(node);\n\n if (customObj && state.nodeThreeObject === customObj) {\n // clone object if it's a shared object among all nodes\n customObj = customObj.clone();\n }\n\n var obj;\n\n if (customObj && !extendObj) {\n obj = customObj;\n } else {\n // Add default object (sphere mesh)\n obj = new three$1.Mesh();\n obj.__graphDefaultObj = true;\n\n if (customObj && extendObj) {\n obj.add(customObj); // extend default with custom\n }\n }\n\n obj.__graphObjType = 'node'; // Add object type\n\n return obj;\n },\n updateObj: function updateObj(obj, node) {\n if (obj.__graphDefaultObj) {\n // bypass internal updates for custom node objects\n var val = valAccessor(node) || 1;\n var radius = Math.cbrt(val) * state.nodeRelSize;\n var numSegments = state.nodeResolution;\n\n if (!obj.geometry.type.match(/^Sphere(Buffer)?Geometry$/) || obj.geometry.parameters.radius !== radius || obj.geometry.parameters.widthSegments !== numSegments) {\n if (!sphereGeometries.hasOwnProperty(val)) {\n sphereGeometries[val] = new three$1.SphereBufferGeometry(radius, numSegments, numSegments);\n }\n\n obj.geometry.dispose();\n obj.geometry = sphereGeometries[val];\n }\n\n var color = colorAccessor(node);\n var materialColor = new three$1.Color(colorStr2Hex(color || '#ffffaa'));\n var opacity = state.nodeOpacity * colorAlpha(color);\n\n if (obj.material.type !== 'MeshLambertMaterial' || !obj.material.color.equals(materialColor) || obj.material.opacity !== opacity) {\n if (!sphereMaterials.hasOwnProperty(color)) {\n sphereMaterials[color] = new three$1.MeshLambertMaterial({\n color: materialColor,\n transparent: true,\n opacity: opacity\n });\n }\n\n obj.material.dispose();\n obj.material = sphereMaterials[color];\n }\n }\n }\n });\n } // Digest links WebGL objects\n\n\n if (state._flushObjects || hasAnyPropChanged(['graphData', 'linkThreeObject', 'linkThreeObjectExtend', 'linkMaterial', 'linkColor', 'linkWidth', 'linkVisibility', 'linkResolution', 'linkOpacity', 'linkDirectionalArrowLength', 'linkDirectionalArrowColor', 'linkDirectionalArrowResolution', 'linkDirectionalParticles', 'linkDirectionalParticleWidth', 'linkDirectionalParticleColor', 'linkDirectionalParticleResolution'])) {\n var _customObjectAccessor = accessorFn(state.linkThreeObject);\n\n var _customObjectExtendAccessor = accessorFn(state.linkThreeObjectExtend);\n\n var customMaterialAccessor = accessorFn(state.linkMaterial);\n\n var _visibilityAccessor = accessorFn(state.linkVisibility);\n\n var _colorAccessor = accessorFn(state.linkColor);\n\n var widthAccessor = accessorFn(state.linkWidth);\n var cylinderGeometries = {}; // indexed by link width\n\n var lambertLineMaterials = {}; // for cylinder objects, indexed by link color\n\n var basicLineMaterials = {}; // for line objects, indexed by link color\n\n var visibleLinks = state.graphData.links.filter(_visibilityAccessor); // lines digest cycle\n\n threeDigest(visibleLinks, state.graphScene, {\n objBindAttr: '__lineObj',\n purge: state._flushObjects || hasAnyPropChanged([// recreate objects if any of these props have changed\n 'linkThreeObject', 'linkThreeObjectExtend', 'linkWidth']),\n objFilter: function objFilter(obj) {\n return obj.__graphObjType === 'link';\n },\n createObj: function createObj(link) {\n var customObj = _customObjectAccessor(link);\n\n var extendObj = _customObjectExtendAccessor(link);\n\n if (customObj && state.linkThreeObject === customObj) {\n // clone object if it's a shared object among all links\n customObj = customObj.clone();\n }\n\n var defaultObj;\n\n if (!customObj || extendObj) {\n // construct default line obj\n var useCylinder = !!widthAccessor(link);\n\n if (useCylinder) {\n defaultObj = new three$1.Mesh();\n } else {\n // Use plain line (constant width)\n var lineGeometry = new three$1.BufferGeometry();\n lineGeometry[setAttributeFn]('position', new three$1.BufferAttribute(new Float32Array(2 * 3), 3));\n defaultObj = new three$1.Line(lineGeometry);\n }\n }\n\n var obj;\n\n if (!customObj) {\n obj = defaultObj;\n obj.__graphDefaultObj = true;\n } else {\n if (!extendObj) {\n // use custom object\n obj = customObj;\n } else {\n // extend default with custom in a group\n obj = new three$1.Group();\n obj.__graphDefaultObj = true;\n obj.add(defaultObj);\n obj.add(customObj);\n }\n }\n\n obj.renderOrder = 10; // Prevent visual glitches of dark lines on top of nodes by rendering them last\n\n obj.__graphObjType = 'link'; // Add object type\n\n return obj;\n },\n updateObj: function updateObj(updObj, link) {\n if (updObj.__graphDefaultObj) {\n // bypass internal updates for custom link objects\n // select default object if it's an extended group\n var obj = updObj.children.length ? updObj.children[0] : updObj;\n var linkWidth = Math.ceil(widthAccessor(link) * 10) / 10;\n var useCylinder = !!linkWidth;\n\n if (useCylinder) {\n var r = linkWidth / 2;\n var numSegments = state.linkResolution;\n\n if (!obj.geometry.type.match(/^Cylinder(Buffer)?Geometry$/) || obj.geometry.parameters.radiusTop !== r || obj.geometry.parameters.radialSegments !== numSegments) {\n if (!cylinderGeometries.hasOwnProperty(linkWidth)) {\n var geometry = new three$1.CylinderBufferGeometry(r, r, 1, numSegments, 1, false);\n geometry[applyMatrix4Fn](new three$1.Matrix4().makeTranslation(0, 1 / 2, 0));\n geometry[applyMatrix4Fn](new three$1.Matrix4().makeRotationX(Math.PI / 2));\n cylinderGeometries[linkWidth] = geometry;\n }\n\n obj.geometry.dispose();\n obj.geometry = cylinderGeometries[linkWidth];\n }\n }\n\n var customMaterial = customMaterialAccessor(link);\n\n if (customMaterial) {\n obj.material = customMaterial;\n } else {\n var color = _colorAccessor(link);\n\n var materialColor = new three$1.Color(colorStr2Hex(color || '#f0f0f0'));\n var opacity = state.linkOpacity * colorAlpha(color);\n var materialType = useCylinder ? 'MeshLambertMaterial' : 'LineBasicMaterial';\n\n if (obj.material.type !== materialType || !obj.material.color.equals(materialColor) || obj.material.opacity !== opacity) {\n var lineMaterials = useCylinder ? lambertLineMaterials : basicLineMaterials;\n\n if (!lineMaterials.hasOwnProperty(color)) {\n lineMaterials[color] = new three$1[materialType]({\n color: materialColor,\n transparent: opacity < 1,\n opacity: opacity,\n depthWrite: opacity >= 1 // Prevent transparency issues\n\n });\n }\n\n obj.material.dispose();\n obj.material = lineMaterials[color];\n }\n }\n }\n }\n }); // Arrows digest cycle\n\n if (state.linkDirectionalArrowLength || changedProps.hasOwnProperty('linkDirectionalArrowLength')) {\n var arrowLengthAccessor = accessorFn(state.linkDirectionalArrowLength);\n var arrowColorAccessor = accessorFn(state.linkDirectionalArrowColor);\n threeDigest(visibleLinks.filter(arrowLengthAccessor), state.graphScene, {\n objBindAttr: '__arrowObj',\n objFilter: function objFilter(obj) {\n return obj.__linkThreeObjType === 'arrow';\n },\n createObj: function createObj() {\n var obj = new three$1.Mesh(undefined, new three$1.MeshLambertMaterial({\n transparent: true\n }));\n obj.__linkThreeObjType = 'arrow'; // Add object type\n\n return obj;\n },\n updateObj: function updateObj(obj, link) {\n var arrowLength = arrowLengthAccessor(link);\n var numSegments = state.linkDirectionalArrowResolution;\n\n if (!obj.geometry.type.match(/^Cone(Buffer)?Geometry$/) || obj.geometry.parameters.height !== arrowLength || obj.geometry.parameters.radialSegments !== numSegments) {\n var coneGeometry = new three$1.ConeBufferGeometry(arrowLength * 0.25, arrowLength, numSegments); // Correct orientation\n\n coneGeometry.translate(0, arrowLength / 2, 0);\n coneGeometry.rotateX(Math.PI / 2);\n obj.geometry.dispose();\n obj.geometry = coneGeometry;\n }\n\n obj.material.color = new three$1.Color(arrowColorAccessor(link) || _colorAccessor(link) || '#f0f0f0');\n obj.material.opacity = state.linkOpacity * 3;\n }\n });\n } // Photon particles digest cycle\n\n\n if (state.linkDirectionalParticles || changedProps.hasOwnProperty('linkDirectionalParticles')) {\n var particlesAccessor = accessorFn(state.linkDirectionalParticles);\n var particleWidthAccessor = accessorFn(state.linkDirectionalParticleWidth);\n var particleColorAccessor = accessorFn(state.linkDirectionalParticleColor);\n var particleMaterials = {}; // indexed by link color\n\n var particleGeometries = {}; // indexed by particle width\n\n threeDigest(visibleLinks.filter(particlesAccessor), state.graphScene, {\n objBindAttr: '__photonsObj',\n objFilter: function objFilter(obj) {\n return obj.__linkThreeObjType === 'photons';\n },\n createObj: function createObj() {\n var obj = new three$1.Group();\n obj.__linkThreeObjType = 'photons'; // Add object type\n\n return obj;\n },\n updateObj: function updateObj(obj, link) {\n var numPhotons = Math.round(Math.abs(particlesAccessor(link)));\n var curPhoton = !!obj.children.length && obj.children[0];\n var photonR = Math.ceil(particleWidthAccessor(link) * 10) / 10 / 2;\n var numSegments = state.linkDirectionalParticleResolution;\n var particleGeometry;\n\n if (curPhoton && curPhoton.geometry.parameters.radius === photonR && curPhoton.geometry.parameters.widthSegments === numSegments) {\n particleGeometry = curPhoton.geometry;\n } else {\n if (!particleGeometries.hasOwnProperty(photonR)) {\n particleGeometries[photonR] = new three$1.SphereBufferGeometry(photonR, numSegments, numSegments);\n }\n\n particleGeometry = particleGeometries[photonR];\n curPhoton && curPhoton.geometry.dispose();\n }\n\n var photonColor = particleColorAccessor(link) || _colorAccessor(link) || '#f0f0f0';\n var materialColor = new three$1.Color(colorStr2Hex(photonColor));\n var opacity = state.linkOpacity * 3;\n var particleMaterial;\n\n if (curPhoton && curPhoton.material.color.equals(materialColor) && curPhoton.material.opacity === opacity) {\n particleMaterial = curPhoton.material;\n } else {\n if (!particleMaterials.hasOwnProperty(photonColor)) {\n particleMaterials[photonColor] = new three$1.MeshLambertMaterial({\n color: materialColor,\n transparent: true,\n opacity: opacity\n });\n }\n\n particleMaterial = particleMaterials[photonColor];\n curPhoton && curPhoton.material.dispose();\n } // digest cycle for each photon\n\n\n threeDigest(_toConsumableArray(new Array(numPhotons)).map(function (_, idx) {\n return {\n idx: idx\n };\n }), obj, {\n idAccessor: function idAccessor(d) {\n return d.idx;\n },\n createObj: function createObj() {\n return new three$1.Mesh(particleGeometry, particleMaterial);\n },\n updateObj: function updateObj(obj) {\n obj.geometry = particleGeometry;\n obj.material = particleMaterial;\n }\n });\n }\n });\n }\n }\n\n state._flushObjects = false; // reset objects refresh flag\n // simulation engine\n\n if (hasAnyPropChanged(['graphData', 'nodeId', 'linkSource', 'linkTarget', 'numDimensions', 'forceEngine', 'dagMode', 'dagNodeFilter', 'dagLevelDistance'])) {\n state.engineRunning = false; // Pause simulation\n // parse links\n\n state.graphData.links.forEach(function (link) {\n link.source = link[state.linkSource];\n link.target = link[state.linkTarget];\n }); // Feed data to force-directed layout\n\n var isD3Sim = state.forceEngine !== 'ngraph';\n var layout;\n\n if (isD3Sim) {\n // D3-force\n (layout = state.d3ForceLayout).stop().alpha(1) // re-heat the simulation\n .numDimensions(state.numDimensions).nodes(state.graphData.nodes); // add links (if link force is still active)\n\n var linkForce = state.d3ForceLayout.force('link');\n\n if (linkForce) {\n linkForce.id(function (d) {\n return d[state.nodeId];\n }).links(state.graphData.links);\n } // setup dag force constraints\n\n\n var nodeDepths = state.dagMode && getDagDepths(state.graphData, function (node) {\n return node[state.nodeId];\n }, {\n nodeFilter: state.dagNodeFilter,\n onLoopError: state.onDagError || undefined\n });\n var maxDepth = Math.max.apply(Math, _toConsumableArray(Object.values(nodeDepths || [])));\n var dagLevelDistance = state.dagLevelDistance || state.graphData.nodes.length / (maxDepth || 1) * DAG_LEVEL_NODE_RATIO * (['radialin', 'radialout'].indexOf(state.dagMode) !== -1 ? 0.7 : 1); // Fix nodes to x,y,z for dag mode\n\n if (state.dagMode) {\n var getFFn = function getFFn(fix, invert) {\n return function (node) {\n return !fix ? undefined : (nodeDepths[node[state.nodeId]] - maxDepth / 2) * dagLevelDistance * (invert ? -1 : 1);\n };\n };\n\n var fxFn = getFFn(['lr', 'rl'].indexOf(state.dagMode) !== -1, state.dagMode === 'rl');\n var fyFn = getFFn(['td', 'bu'].indexOf(state.dagMode) !== -1, state.dagMode === 'td');\n var fzFn = getFFn(['zin', 'zout'].indexOf(state.dagMode) !== -1, state.dagMode === 'zout');\n state.graphData.nodes.filter(state.dagNodeFilter).forEach(function (node) {\n node.fx = fxFn(node);\n node.fy = fyFn(node);\n node.fz = fzFn(node);\n });\n } // Use radial force for radial dags\n\n\n state.d3ForceLayout.force('dagRadial', ['radialin', 'radialout'].indexOf(state.dagMode) !== -1 ? forceRadial(function (node) {\n var nodeDepth = nodeDepths[node[state.nodeId]] || -1;\n return (state.dagMode === 'radialin' ? maxDepth - nodeDepth : nodeDepth) * dagLevelDistance;\n }).strength(function (node) {\n return state.dagNodeFilter(node) ? 1 : 0;\n }) : null);\n } else {\n // ngraph\n var _graph = ngraph.graph();\n\n state.graphData.nodes.forEach(function (node) {\n _graph.addNode(node[state.nodeId]);\n });\n state.graphData.links.forEach(function (link) {\n _graph.addLink(link.source, link.target);\n });\n layout = ngraph.forcelayout(_graph, _objectSpread2({\n dimensions: state.numDimensions\n }, state.ngraphPhysics));\n layout.graph = _graph; // Attach graph reference to layout\n }\n\n for (var i = 0; i < state.warmupTicks && !(isD3Sim && state.d3AlphaMin > 0 && state.d3ForceLayout.alpha() < state.d3AlphaMin); i++) {\n layout[isD3Sim ? \"tick\" : \"step\"]();\n } // Initial ticks before starting to render\n\n\n state.layout = layout;\n this.resetCountdown();\n }\n\n state.engineRunning = true; // resume simulation\n\n state.onFinishUpdate();\n }\n});\n\nfunction fromKapsule (kapsule) {\n var baseClass = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Object;\n var initKapsuleWithSelf = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var FromKapsule = /*#__PURE__*/function (_baseClass) {\n _inherits(FromKapsule, _baseClass);\n\n var _super = _createSuper(FromKapsule);\n\n function FromKapsule() {\n var _this;\n\n _classCallCheck(this, FromKapsule);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n _this.__kapsuleInstance = kapsule().apply(void 0, [].concat(_toConsumableArray(initKapsuleWithSelf ? [_assertThisInitialized(_this)] : []), args));\n return _this;\n }\n\n return FromKapsule;\n }(baseClass); // attach kapsule props/methods to class prototype\n\n\n Object.keys(kapsule()).forEach(function (m) {\n return FromKapsule.prototype[m] = function () {\n var _this$__kapsuleInstan;\n\n var returnVal = (_this$__kapsuleInstan = this.__kapsuleInstance)[m].apply(_this$__kapsuleInstan, arguments);\n\n return returnVal === this.__kapsuleInstance ? this // chain based on this class, not the kapsule obj\n : returnVal;\n };\n });\n return FromKapsule;\n}\n\nvar three = window.THREE ? window.THREE : {\n Group: Group\n}; // Prefer consumption from global THREE, if exists\nvar threeForcegraph = fromKapsule(ForceGraph, three.Group, true);\n\nexport default threeForcegraph;\n","import {\n\tEventDispatcher,\n\tMOUSE,\n\tQuaternion,\n\tVector2,\n\tVector3\n} from 'three';\n\nconst _changeEvent = { type: 'change' };\nconst _startEvent = { type: 'start' };\nconst _endEvent = { type: 'end' };\n\nclass TrackballControls extends EventDispatcher {\n\n\tconstructor( object, domElement ) {\n\n\t\tsuper();\n\n\t\tif ( domElement === undefined ) console.warn( 'THREE.TrackballControls: The second parameter \"domElement\" is now mandatory.' );\n\t\tif ( domElement === document ) console.error( 'THREE.TrackballControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.' );\n\n\t\tconst scope = this;\n\t\tconst STATE = { NONE: - 1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4 };\n\n\t\tthis.object = object;\n\t\tthis.domElement = domElement;\n\n\t\t// API\n\n\t\tthis.enabled = true;\n\n\t\tthis.screen = { left: 0, top: 0, width: 0, height: 0 };\n\n\t\tthis.rotateSpeed = 1.0;\n\t\tthis.zoomSpeed = 1.2;\n\t\tthis.panSpeed = 0.3;\n\n\t\tthis.noRotate = false;\n\t\tthis.noZoom = false;\n\t\tthis.noPan = false;\n\n\t\tthis.staticMoving = false;\n\t\tthis.dynamicDampingFactor = 0.2;\n\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\n\t\tthis.keys = [ 'KeyA' /*A*/, 'KeyS' /*S*/, 'KeyD' /*D*/ ];\n\n\t\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n\t\t// internals\n\n\t\tthis.target = new Vector3();\n\n\t\tconst EPS = 0.000001;\n\n\t\tconst lastPosition = new Vector3();\n\t\tlet lastZoom = 1;\n\n\t\tlet _state = STATE.NONE,\n\t\t\t_keyState = STATE.NONE,\n\n\t\t\t_touchZoomDistanceStart = 0,\n\t\t\t_touchZoomDistanceEnd = 0,\n\n\t\t\t_lastAngle = 0;\n\n\t\tconst _eye = new Vector3(),\n\n\t\t\t_movePrev = new Vector2(),\n\t\t\t_moveCurr = new Vector2(),\n\n\t\t\t_lastAxis = new Vector3(),\n\n\t\t\t_zoomStart = new Vector2(),\n\t\t\t_zoomEnd = new Vector2(),\n\n\t\t\t_panStart = new Vector2(),\n\t\t\t_panEnd = new Vector2();\n\n\t\t// for reset\n\n\t\tthis.target0 = this.target.clone();\n\t\tthis.position0 = this.object.position.clone();\n\t\tthis.up0 = this.object.up.clone();\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t// methods\n\n\t\tthis.handleResize = function () {\n\n\t\t\tconst box = scope.domElement.getBoundingClientRect();\n\t\t\t// adjustments come from similar code in the jquery offset() function\n\t\t\tconst d = scope.domElement.ownerDocument.documentElement;\n\t\t\tscope.screen.left = box.left + window.pageXOffset - d.clientLeft;\n\t\t\tscope.screen.top = box.top + window.pageYOffset - d.clientTop;\n\t\t\tscope.screen.width = box.width;\n\t\t\tscope.screen.height = box.height;\n\n\t\t};\n\n\t\tconst getMouseOnScreen = ( function () {\n\n\t\t\tconst vector = new Vector2();\n\n\t\t\treturn function getMouseOnScreen( pageX, pageY ) {\n\n\t\t\t\tvector.set(\n\t\t\t\t\t( pageX - scope.screen.left ) / scope.screen.width,\n\t\t\t\t\t( pageY - scope.screen.top ) / scope.screen.height\n\t\t\t\t);\n\n\t\t\t\treturn vector;\n\n\t\t\t};\n\n\t\t}() );\n\n\t\tconst getMouseOnCircle = ( function () {\n\n\t\t\tconst vector = new Vector2();\n\n\t\t\treturn function getMouseOnCircle( pageX, pageY ) {\n\n\t\t\t\tvector.set(\n\t\t\t\t\t( ( pageX - scope.screen.width * 0.5 - scope.screen.left ) / ( scope.screen.width * 0.5 ) ),\n\t\t\t\t\t( ( scope.screen.height + 2 * ( scope.screen.top - pageY ) ) / scope.screen.width ) // screen.width intentional\n\t\t\t\t);\n\n\t\t\t\treturn vector;\n\n\t\t\t};\n\n\t\t}() );\n\n\t\tthis.rotateCamera = ( function () {\n\n\t\t\tconst axis = new Vector3(),\n\t\t\t\tquaternion = new Quaternion(),\n\t\t\t\teyeDirection = new Vector3(),\n\t\t\t\tobjectUpDirection = new Vector3(),\n\t\t\t\tobjectSidewaysDirection = new Vector3(),\n\t\t\t\tmoveDirection = new Vector3();\n\n\t\t\treturn function rotateCamera() {\n\n\t\t\t\tmoveDirection.set( _moveCurr.x - _movePrev.x, _moveCurr.y - _movePrev.y, 0 );\n\t\t\t\tlet angle = moveDirection.length();\n\n\t\t\t\tif ( angle ) {\n\n\t\t\t\t\t_eye.copy( scope.object.position ).sub( scope.target );\n\n\t\t\t\t\teyeDirection.copy( _eye ).normalize();\n\t\t\t\t\tobjectUpDirection.copy( scope.object.up ).normalize();\n\t\t\t\t\tobjectSidewaysDirection.crossVectors( objectUpDirection, eyeDirection ).normalize();\n\n\t\t\t\t\tobjectUpDirection.setLength( _moveCurr.y - _movePrev.y );\n\t\t\t\t\tobjectSidewaysDirection.setLength( _moveCurr.x - _movePrev.x );\n\n\t\t\t\t\tmoveDirection.copy( objectUpDirection.add( objectSidewaysDirection ) );\n\n\t\t\t\t\taxis.crossVectors( moveDirection, _eye ).normalize();\n\n\t\t\t\t\tangle *= scope.rotateSpeed;\n\t\t\t\t\tquaternion.setFromAxisAngle( axis, angle );\n\n\t\t\t\t\t_eye.applyQuaternion( quaternion );\n\t\t\t\t\tscope.object.up.applyQuaternion( quaternion );\n\n\t\t\t\t\t_lastAxis.copy( axis );\n\t\t\t\t\t_lastAngle = angle;\n\n\t\t\t\t} else if ( ! scope.staticMoving && _lastAngle ) {\n\n\t\t\t\t\t_lastAngle *= Math.sqrt( 1.0 - scope.dynamicDampingFactor );\n\t\t\t\t\t_eye.copy( scope.object.position ).sub( scope.target );\n\t\t\t\t\tquaternion.setFromAxisAngle( _lastAxis, _lastAngle );\n\t\t\t\t\t_eye.applyQuaternion( quaternion );\n\t\t\t\t\tscope.object.up.applyQuaternion( quaternion );\n\n\t\t\t\t}\n\n\t\t\t\t_movePrev.copy( _moveCurr );\n\n\t\t\t};\n\n\t\t}() );\n\n\n\t\tthis.zoomCamera = function () {\n\n\t\t\tlet factor;\n\n\t\t\tif ( _state === STATE.TOUCH_ZOOM_PAN ) {\n\n\t\t\t\tfactor = _touchZoomDistanceStart / _touchZoomDistanceEnd;\n\t\t\t\t_touchZoomDistanceStart = _touchZoomDistanceEnd;\n\n\t\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t\t_eye.multiplyScalar( factor );\n\n\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\tscope.object.zoom *= factor;\n\t\t\t\t\tscope.object.updateProjectionMatrix();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfactor = 1.0 + ( _zoomEnd.y - _zoomStart.y ) * scope.zoomSpeed;\n\n\t\t\t\tif ( factor !== 1.0 && factor > 0.0 ) {\n\n\t\t\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t\t\t_eye.multiplyScalar( factor );\n\n\t\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\t\tscope.object.zoom /= factor;\n\t\t\t\t\t\tscope.object.updateProjectionMatrix();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( scope.staticMoving ) {\n\n\t\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_zoomStart.y += ( _zoomEnd.y - _zoomStart.y ) * this.dynamicDampingFactor;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.panCamera = ( function () {\n\n\t\t\tconst mouseChange = new Vector2(),\n\t\t\t\tobjectUp = new Vector3(),\n\t\t\t\tpan = new Vector3();\n\n\t\t\treturn function panCamera() {\n\n\t\t\t\tmouseChange.copy( _panEnd ).sub( _panStart );\n\n\t\t\t\tif ( mouseChange.lengthSq() ) {\n\n\t\t\t\t\tif ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\t\tconst scale_x = ( scope.object.right - scope.object.left ) / scope.object.zoom / scope.domElement.clientWidth;\n\t\t\t\t\t\tconst scale_y = ( scope.object.top - scope.object.bottom ) / scope.object.zoom / scope.domElement.clientWidth;\n\n\t\t\t\t\t\tmouseChange.x *= scale_x;\n\t\t\t\t\t\tmouseChange.y *= scale_y;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmouseChange.multiplyScalar( _eye.length() * scope.panSpeed );\n\n\t\t\t\t\tpan.copy( _eye ).cross( scope.object.up ).setLength( mouseChange.x );\n\t\t\t\t\tpan.add( objectUp.copy( scope.object.up ).setLength( mouseChange.y ) );\n\n\t\t\t\t\tscope.object.position.add( pan );\n\t\t\t\t\tscope.target.add( pan );\n\n\t\t\t\t\tif ( scope.staticMoving ) {\n\n\t\t\t\t\t\t_panStart.copy( _panEnd );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_panStart.add( mouseChange.subVectors( _panEnd, _panStart ).multiplyScalar( scope.dynamicDampingFactor ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}() );\n\n\t\tthis.checkDistances = function () {\n\n\t\t\tif ( ! scope.noZoom || ! scope.noPan ) {\n\n\t\t\t\tif ( _eye.lengthSq() > scope.maxDistance * scope.maxDistance ) {\n\n\t\t\t\t\tscope.object.position.addVectors( scope.target, _eye.setLength( scope.maxDistance ) );\n\t\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t\t}\n\n\t\t\t\tif ( _eye.lengthSq() < scope.minDistance * scope.minDistance ) {\n\n\t\t\t\t\tscope.object.position.addVectors( scope.target, _eye.setLength( scope.minDistance ) );\n\t\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.update = function () {\n\n\t\t\t_eye.subVectors( scope.object.position, scope.target );\n\n\t\t\tif ( ! scope.noRotate ) {\n\n\t\t\t\tscope.rotateCamera();\n\n\t\t\t}\n\n\t\t\tif ( ! scope.noZoom ) {\n\n\t\t\t\tscope.zoomCamera();\n\n\t\t\t}\n\n\t\t\tif ( ! scope.noPan ) {\n\n\t\t\t\tscope.panCamera();\n\n\t\t\t}\n\n\t\t\tscope.object.position.addVectors( scope.target, _eye );\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\tscope.checkDistances();\n\n\t\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\t\tif ( lastPosition.distanceToSquared( scope.object.position ) > EPS ) {\n\n\t\t\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\t\t\tlastPosition.copy( scope.object.position );\n\n\t\t\t\t}\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\t\tif ( lastPosition.distanceToSquared( scope.object.position ) > EPS || lastZoom !== scope.object.zoom ) {\n\n\t\t\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\t\tlastZoom = scope.object.zoom;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.reset = function () {\n\n\t\t\t_state = STATE.NONE;\n\t\t\t_keyState = STATE.NONE;\n\n\t\t\tscope.target.copy( scope.target0 );\n\t\t\tscope.object.position.copy( scope.position0 );\n\t\t\tscope.object.up.copy( scope.up0 );\n\t\t\tscope.object.zoom = scope.zoom0;\n\n\t\t\tscope.object.updateProjectionMatrix();\n\n\t\t\t_eye.subVectors( scope.object.position, scope.target );\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\tlastPosition.copy( scope.object.position );\n\t\t\tlastZoom = scope.object.zoom;\n\n\t\t};\n\n\t\t// listeners\n\n\t\tfunction onPointerDown( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tswitch ( event.pointerType ) {\n\n\t\t\t\tcase 'mouse':\n\t\t\t\tcase 'pen':\n\t\t\t\t\tonMouseDown( event );\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO touch\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onPointerMove( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tswitch ( event.pointerType ) {\n\n\t\t\t\tcase 'mouse':\n\t\t\t\tcase 'pen':\n\t\t\t\t\tonMouseMove( event );\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO touch\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onPointerUp( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tswitch ( event.pointerType ) {\n\n\t\t\t\tcase 'mouse':\n\t\t\t\tcase 'pen':\n\t\t\t\t\tonMouseUp( event );\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO touch\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction keydown( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\twindow.removeEventListener( 'keydown', keydown );\n\n\t\t\tif ( _keyState !== STATE.NONE ) {\n\n\t\t\t\treturn;\n\n\t\t\t} else if ( event.code === scope.keys[ STATE.ROTATE ] && ! scope.noRotate ) {\n\n\t\t\t\t_keyState = STATE.ROTATE;\n\n\t\t\t} else if ( event.code === scope.keys[ STATE.ZOOM ] && ! scope.noZoom ) {\n\n\t\t\t\t_keyState = STATE.ZOOM;\n\n\t\t\t} else if ( event.code === scope.keys[ STATE.PAN ] && ! scope.noPan ) {\n\n\t\t\t\t_keyState = STATE.PAN;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction keyup() {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\t_keyState = STATE.NONE;\n\n\t\t\twindow.addEventListener( 'keydown', keydown );\n\n\t\t}\n\n\t\tfunction onMouseDown( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tif ( _state === STATE.NONE ) {\n\n\t\t\t\tswitch ( event.button ) {\n\n\t\t\t\t\tcase scope.mouseButtons.LEFT:\n\t\t\t\t\t\t_state = STATE.ROTATE;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase scope.mouseButtons.MIDDLE:\n\t\t\t\t\t\t_state = STATE.ZOOM;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase scope.mouseButtons.RIGHT:\n\t\t\t\t\t\t_state = STATE.PAN;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t_state = STATE.NONE;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst state = ( _keyState !== STATE.NONE ) ? _keyState : _state;\n\n\t\t\tif ( state === STATE.ROTATE && ! scope.noRotate ) {\n\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\t\t\t\t_movePrev.copy( _moveCurr );\n\n\t\t\t} else if ( state === STATE.ZOOM && ! scope.noZoom ) {\n\n\t\t\t\t_zoomStart.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\t\t\t\t_zoomEnd.copy( _zoomStart );\n\n\t\t\t} else if ( state === STATE.PAN && ! scope.noPan ) {\n\n\t\t\t\t_panStart.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\t\t\t\t_panEnd.copy( _panStart );\n\n\t\t\t}\n\n\t\t\tscope.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove );\n\t\t\tscope.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp );\n\n\t\t\tscope.dispatchEvent( _startEvent );\n\n\t\t}\n\n\t\tfunction onMouseMove( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t\tconst state = ( _keyState !== STATE.NONE ) ? _keyState : _state;\n\n\t\t\tif ( state === STATE.ROTATE && ! scope.noRotate ) {\n\n\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\n\t\t\t} else if ( state === STATE.ZOOM && ! scope.noZoom ) {\n\n\t\t\t\t_zoomEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t\t\t} else if ( state === STATE.PAN && ! scope.noPan ) {\n\n\t\t\t\t_panEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseUp( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t\t_state = STATE.NONE;\n\n\t\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove );\n\t\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp );\n\n\t\t\tscope.dispatchEvent( _endEvent );\n\n\t\t}\n\n\t\tfunction mousewheel( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tif ( scope.noZoom === true ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t\tswitch ( event.deltaMode ) {\n\n\t\t\t\tcase 2:\n\t\t\t\t\t// Zoom in pages\n\t\t\t\t\t_zoomStart.y -= event.deltaY * 0.025;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\t\t\t\t\t// Zoom in lines\n\t\t\t\t\t_zoomStart.y -= event.deltaY * 0.01;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t// undefined, 0, assume pixels\n\t\t\t\t\t_zoomStart.y -= event.deltaY * 0.00025;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tscope.dispatchEvent( _startEvent );\n\t\t\tscope.dispatchEvent( _endEvent );\n\n\t\t}\n\n\t\tfunction touchstart( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t\tswitch ( event.touches.length ) {\n\n\t\t\t\tcase 1:\n\t\t\t\t\t_state = STATE.TOUCH_ROTATE;\n\t\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) );\n\t\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // 2 or more\n\t\t\t\t\t_state = STATE.TOUCH_ZOOM_PAN;\n\t\t\t\t\tconst dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\t\t\tconst dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\t\t\t\t\t_touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\t\t\tconst x = ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ) / 2;\n\t\t\t\t\tconst y = ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ) / 2;\n\t\t\t\t\t_panStart.copy( getMouseOnScreen( x, y ) );\n\t\t\t\t\t_panEnd.copy( _panStart );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tscope.dispatchEvent( _startEvent );\n\n\t\t}\n\n\t\tfunction touchmove( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t\tswitch ( event.touches.length ) {\n\n\t\t\t\tcase 1:\n\t\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // 2 or more\n\t\t\t\t\tconst dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\t\t\tconst dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\t\t\t\t\t_touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\t\t\tconst x = ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ) / 2;\n\t\t\t\t\tconst y = ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ) / 2;\n\t\t\t\t\t_panEnd.copy( getMouseOnScreen( x, y ) );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction touchend( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tswitch ( event.touches.length ) {\n\n\t\t\t\tcase 0:\n\t\t\t\t\t_state = STATE.NONE;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\t\t\t\t\t_state = STATE.TOUCH_ROTATE;\n\t\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) );\n\t\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tscope.dispatchEvent( _endEvent );\n\n\t\t}\n\n\t\tfunction contextmenu( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t}\n\n\t\tthis.dispose = function () {\n\n\t\t\tscope.domElement.removeEventListener( 'contextmenu', contextmenu );\n\n\t\t\tscope.domElement.removeEventListener( 'pointerdown', onPointerDown );\n\t\t\tscope.domElement.removeEventListener( 'wheel', mousewheel );\n\n\t\t\tscope.domElement.removeEventListener( 'touchstart', touchstart );\n\t\t\tscope.domElement.removeEventListener( 'touchend', touchend );\n\t\t\tscope.domElement.removeEventListener( 'touchmove', touchmove );\n\n\t\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove );\n\t\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp );\n\n\t\t\twindow.removeEventListener( 'keydown', keydown );\n\t\t\twindow.removeEventListener( 'keyup', keyup );\n\n\t\t};\n\n\t\tthis.domElement.addEventListener( 'contextmenu', contextmenu );\n\n\t\tthis.domElement.addEventListener( 'pointerdown', onPointerDown );\n\t\tthis.domElement.addEventListener( 'wheel', mousewheel, { passive: false } );\n\n\t\tthis.domElement.addEventListener( 'touchstart', touchstart, { passive: false } );\n\t\tthis.domElement.addEventListener( 'touchend', touchend );\n\t\tthis.domElement.addEventListener( 'touchmove', touchmove, { passive: false } );\n\n\t\tthis.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove );\n\t\tthis.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp );\n\n\t\twindow.addEventListener( 'keydown', keydown );\n\t\twindow.addEventListener( 'keyup', keyup );\n\n\t\tthis.handleResize();\n\n\t\t// force an update at start\n\t\tthis.update();\n\n\t}\n\n}\n\nexport { TrackballControls };\n","import {\n\tEventDispatcher,\n\tMOUSE,\n\tQuaternion,\n\tSpherical,\n\tTOUCH,\n\tVector2,\n\tVector3\n} from 'three';\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n// Orbit - left mouse / touch: one-finger move\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n\nconst _changeEvent = { type: 'change' };\nconst _startEvent = { type: 'start' };\nconst _endEvent = { type: 'end' };\n\nclass OrbitControls extends EventDispatcher {\n\n\tconstructor( object, domElement ) {\n\n\t\tsuper();\n\n\t\tif ( domElement === undefined ) console.warn( 'THREE.OrbitControls: The second parameter \"domElement\" is now mandatory.' );\n\t\tif ( domElement === document ) console.error( 'THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.' );\n\n\t\tthis.object = object;\n\t\tthis.domElement = domElement;\n\n\t\t// Set to false to disable this control\n\t\tthis.enabled = true;\n\n\t\t// \"target\" sets the location of focus, where the object orbits around\n\t\tthis.target = new Vector3();\n\n\t\t// How far you can dolly in and out ( PerspectiveCamera only )\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\n\t\t// How far you can zoom in and out ( OrthographicCamera only )\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\t// How far you can orbit vertically, upper and lower limits.\n\t\t// Range is 0 to Math.PI radians.\n\t\tthis.minPolarAngle = 0; // radians\n\t\tthis.maxPolarAngle = Math.PI; // radians\n\n\t\t// How far you can orbit horizontally, upper and lower limits.\n\t\t// If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI )\n\t\tthis.minAzimuthAngle = - Infinity; // radians\n\t\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t\t// Set to true to enable damping (inertia)\n\t\t// If damping is enabled, you must call controls.update() in your animation loop\n\t\tthis.enableDamping = false;\n\t\tthis.dampingFactor = 0.05;\n\n\t\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t\t// Set to false to disable zooming\n\t\tthis.enableZoom = true;\n\t\tthis.zoomSpeed = 1.0;\n\n\t\t// Set to false to disable rotating\n\t\tthis.enableRotate = true;\n\t\tthis.rotateSpeed = 1.0;\n\n\t\t// Set to false to disable panning\n\t\tthis.enablePan = true;\n\t\tthis.panSpeed = 1.0;\n\t\tthis.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up\n\t\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\n\t\t// Set to true to automatically rotate around the target\n\t\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\t\tthis.autoRotate = false;\n\t\tthis.autoRotateSpeed = 2.0; // 30 seconds per orbit when fps is 60\n\n\t\t// The four arrow keys\n\t\tthis.keys = { LEFT: 'ArrowLeft', UP: 'ArrowUp', RIGHT: 'ArrowRight', BOTTOM: 'ArrowDown' };\n\n\t\t// Mouse buttons\n\t\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n\t\t// Touch fingers\n\t\tthis.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };\n\n\t\t// for reset\n\t\tthis.target0 = this.target.clone();\n\t\tthis.position0 = this.object.position.clone();\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t// the target DOM element for key events\n\t\tthis._domElementKeyEvents = null;\n\n\t\t//\n\t\t// public methods\n\t\t//\n\n\t\tthis.getPolarAngle = function () {\n\n\t\t\treturn spherical.phi;\n\n\t\t};\n\n\t\tthis.getAzimuthalAngle = function () {\n\n\t\t\treturn spherical.theta;\n\n\t\t};\n\n\t\tthis.listenToKeyEvents = function ( domElement ) {\n\n\t\t\tdomElement.addEventListener( 'keydown', onKeyDown );\n\t\t\tthis._domElementKeyEvents = domElement;\n\n\t\t};\n\n\t\tthis.saveState = function () {\n\n\t\t\tscope.target0.copy( scope.target );\n\t\t\tscope.position0.copy( scope.object.position );\n\t\t\tscope.zoom0 = scope.object.zoom;\n\n\t\t};\n\n\t\tthis.reset = function () {\n\n\t\t\tscope.target.copy( scope.target0 );\n\t\t\tscope.object.position.copy( scope.position0 );\n\t\t\tscope.object.zoom = scope.zoom0;\n\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\tscope.update();\n\n\t\t\tstate = STATE.NONE;\n\n\t\t};\n\n\t\t// this method is exposed, but perhaps it would be better if we can make it private...\n\t\tthis.update = function () {\n\n\t\t\tconst offset = new Vector3();\n\n\t\t\t// so camera.up is the orbit axis\n\t\t\tconst quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );\n\t\t\tconst quatInverse = quat.clone().invert();\n\n\t\t\tconst lastPosition = new Vector3();\n\t\t\tconst lastQuaternion = new Quaternion();\n\n\t\t\tconst twoPI = 2 * Math.PI;\n\n\t\t\treturn function update() {\n\n\t\t\t\tconst position = scope.object.position;\n\n\t\t\t\toffset.copy( position ).sub( scope.target );\n\n\t\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\t\toffset.applyQuaternion( quat );\n\n\t\t\t\t// angle from z-axis around y-axis\n\t\t\t\tspherical.setFromVector3( offset );\n\n\t\t\t\tif ( scope.autoRotate && state === STATE.NONE ) {\n\n\t\t\t\t\trotateLeft( getAutoRotationAngle() );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scope.enableDamping ) {\n\n\t\t\t\t\tspherical.theta += sphericalDelta.theta * scope.dampingFactor;\n\t\t\t\t\tspherical.phi += sphericalDelta.phi * scope.dampingFactor;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\t\t\tspherical.phi += sphericalDelta.phi;\n\n\t\t\t\t}\n\n\t\t\t\t// restrict theta to be between desired limits\n\n\t\t\t\tlet min = scope.minAzimuthAngle;\n\t\t\t\tlet max = scope.maxAzimuthAngle;\n\n\t\t\t\tif ( isFinite( min ) && isFinite( max ) ) {\n\n\t\t\t\t\tif ( min < - Math.PI ) min += twoPI; else if ( min > Math.PI ) min -= twoPI;\n\n\t\t\t\t\tif ( max < - Math.PI ) max += twoPI; else if ( max > Math.PI ) max -= twoPI;\n\n\t\t\t\t\tif ( min <= max ) {\n\n\t\t\t\t\t\tspherical.theta = Math.max( min, Math.min( max, spherical.theta ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tspherical.theta = ( spherical.theta > ( min + max ) / 2 ) ?\n\t\t\t\t\t\t\tMath.max( min, spherical.theta ) :\n\t\t\t\t\t\t\tMath.min( max, spherical.theta );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// restrict phi to be between desired limits\n\t\t\t\tspherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\n\n\t\t\t\tspherical.makeSafe();\n\n\n\t\t\t\tspherical.radius *= scale;\n\n\t\t\t\t// restrict radius to be between desired limits\n\t\t\t\tspherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) );\n\n\t\t\t\t// move target to panned location\n\n\t\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\t\tscope.target.addScaledVector( panOffset, scope.dampingFactor );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tscope.target.add( panOffset );\n\n\t\t\t\t}\n\n\t\t\t\toffset.setFromSpherical( spherical );\n\n\t\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\t\toffset.applyQuaternion( quatInverse );\n\n\t\t\t\tposition.copy( scope.target ).add( offset );\n\n\t\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\t\tsphericalDelta.theta *= ( 1 - scope.dampingFactor );\n\t\t\t\t\tsphericalDelta.phi *= ( 1 - scope.dampingFactor );\n\n\t\t\t\t\tpanOffset.multiplyScalar( 1 - scope.dampingFactor );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsphericalDelta.set( 0, 0, 0 );\n\n\t\t\t\t\tpanOffset.set( 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t\tscale = 1;\n\n\t\t\t\t// update condition is:\n\t\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\t\t\tif ( zoomChanged ||\n\t\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {\n\n\t\t\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\t\tzoomChanged = false;\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t};\n\n\t\t}();\n\n\t\tthis.dispose = function () {\n\n\t\t\tscope.domElement.removeEventListener( 'contextmenu', onContextMenu );\n\n\t\t\tscope.domElement.removeEventListener( 'pointerdown', onPointerDown );\n\t\t\tscope.domElement.removeEventListener( 'wheel', onMouseWheel );\n\n\t\t\tscope.domElement.removeEventListener( 'touchstart', onTouchStart );\n\t\t\tscope.domElement.removeEventListener( 'touchend', onTouchEnd );\n\t\t\tscope.domElement.removeEventListener( 'touchmove', onTouchMove );\n\n\t\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove );\n\t\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp );\n\n\n\t\t\tif ( scope._domElementKeyEvents !== null ) {\n\n\t\t\t\tscope._domElementKeyEvents.removeEventListener( 'keydown', onKeyDown );\n\n\t\t\t}\n\n\t\t\t//scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n\n\t\t};\n\n\t\t//\n\t\t// internals\n\t\t//\n\n\t\tconst scope = this;\n\n\t\tconst STATE = {\n\t\t\tNONE: - 1,\n\t\t\tROTATE: 0,\n\t\t\tDOLLY: 1,\n\t\t\tPAN: 2,\n\t\t\tTOUCH_ROTATE: 3,\n\t\t\tTOUCH_PAN: 4,\n\t\t\tTOUCH_DOLLY_PAN: 5,\n\t\t\tTOUCH_DOLLY_ROTATE: 6\n\t\t};\n\n\t\tlet state = STATE.NONE;\n\n\t\tconst EPS = 0.000001;\n\n\t\t// current position in spherical coordinates\n\t\tconst spherical = new Spherical();\n\t\tconst sphericalDelta = new Spherical();\n\n\t\tlet scale = 1;\n\t\tconst panOffset = new Vector3();\n\t\tlet zoomChanged = false;\n\n\t\tconst rotateStart = new Vector2();\n\t\tconst rotateEnd = new Vector2();\n\t\tconst rotateDelta = new Vector2();\n\n\t\tconst panStart = new Vector2();\n\t\tconst panEnd = new Vector2();\n\t\tconst panDelta = new Vector2();\n\n\t\tconst dollyStart = new Vector2();\n\t\tconst dollyEnd = new Vector2();\n\t\tconst dollyDelta = new Vector2();\n\n\t\tfunction getAutoRotationAngle() {\n\n\t\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n\t\t}\n\n\t\tfunction getZoomScale() {\n\n\t\t\treturn Math.pow( 0.95, scope.zoomSpeed );\n\n\t\t}\n\n\t\tfunction rotateLeft( angle ) {\n\n\t\t\tsphericalDelta.theta -= angle;\n\n\t\t}\n\n\t\tfunction rotateUp( angle ) {\n\n\t\t\tsphericalDelta.phi -= angle;\n\n\t\t}\n\n\t\tconst panLeft = function () {\n\n\t\t\tconst v = new Vector3();\n\n\t\t\treturn function panLeft( distance, objectMatrix ) {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t\t\tv.multiplyScalar( - distance );\n\n\t\t\t\tpanOffset.add( v );\n\n\t\t\t};\n\n\t\t}();\n\n\t\tconst panUp = function () {\n\n\t\t\tconst v = new Vector3();\n\n\t\t\treturn function panUp( distance, objectMatrix ) {\n\n\t\t\t\tif ( scope.screenSpacePanning === true ) {\n\n\t\t\t\t\tv.setFromMatrixColumn( objectMatrix, 1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 );\n\t\t\t\t\tv.crossVectors( scope.object.up, v );\n\n\t\t\t\t}\n\n\t\t\t\tv.multiplyScalar( distance );\n\n\t\t\t\tpanOffset.add( v );\n\n\t\t\t};\n\n\t\t}();\n\n\t\t// deltaX and deltaY are in pixels; right and down are positive\n\t\tconst pan = function () {\n\n\t\t\tconst offset = new Vector3();\n\n\t\t\treturn function pan( deltaX, deltaY ) {\n\n\t\t\t\tconst element = scope.domElement;\n\n\t\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t\t// perspective\n\t\t\t\t\tconst position = scope.object.position;\n\t\t\t\t\toffset.copy( position ).sub( scope.target );\n\t\t\t\t\tlet targetDistance = offset.length();\n\n\t\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\t\ttargetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\t\t\tpanLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n\t\t\t\t\tpanUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n\n\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\t// orthographic\n\t\t\t\t\tpanLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );\n\t\t\t\t\tpanUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\t\t\tscope.enablePan = false;\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}();\n\n\t\tfunction dollyOut( dollyScale ) {\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\tscale /= dollyScale;\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) );\n\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\t\tscope.enableZoom = false;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction dollyIn( dollyScale ) {\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\tscale *= dollyScale;\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) );\n\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\t\tscope.enableZoom = false;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\t\t// event callbacks - update the object state\n\t\t//\n\n\t\tfunction handleMouseDownRotate( event ) {\n\n\t\t\trotateStart.set( event.clientX, event.clientY );\n\n\t\t}\n\n\t\tfunction handleMouseDownDolly( event ) {\n\n\t\t\tdollyStart.set( event.clientX, event.clientY );\n\n\t\t}\n\n\t\tfunction handleMouseDownPan( event ) {\n\n\t\t\tpanStart.set( event.clientX, event.clientY );\n\n\t\t}\n\n\t\tfunction handleMouseMoveRotate( event ) {\n\n\t\t\trotateEnd.set( event.clientX, event.clientY );\n\n\t\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\t\tconst element = scope.domElement;\n\n\t\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\t\trotateStart.copy( rotateEnd );\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleMouseMoveDolly( event ) {\n\n\t\t\tdollyEnd.set( event.clientX, event.clientY );\n\n\t\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\n\n\t\t\tif ( dollyDelta.y > 0 ) {\n\n\t\t\t\tdollyOut( getZoomScale() );\n\n\t\t\t} else if ( dollyDelta.y < 0 ) {\n\n\t\t\t\tdollyIn( getZoomScale() );\n\n\t\t\t}\n\n\t\t\tdollyStart.copy( dollyEnd );\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleMouseMovePan( event ) {\n\n\t\t\tpanEnd.set( event.clientX, event.clientY );\n\n\t\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\t\tpan( panDelta.x, panDelta.y );\n\n\t\t\tpanStart.copy( panEnd );\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleMouseUp( /*event*/ ) {\n\n\t\t\t// no-op\n\n\t\t}\n\n\t\tfunction handleMouseWheel( event ) {\n\n\t\t\tif ( event.deltaY < 0 ) {\n\n\t\t\t\tdollyIn( getZoomScale() );\n\n\t\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\t\tdollyOut( getZoomScale() );\n\n\t\t\t}\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleKeyDown( event ) {\n\n\t\t\tlet needsUpdate = false;\n\n\t\t\tswitch ( event.code ) {\n\n\t\t\t\tcase scope.keys.UP:\n\t\t\t\t\tpan( 0, scope.keyPanSpeed );\n\t\t\t\t\tneedsUpdate = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\t\tpan( 0, - scope.keyPanSpeed );\n\t\t\t\t\tneedsUpdate = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.keys.LEFT:\n\t\t\t\t\tpan( scope.keyPanSpeed, 0 );\n\t\t\t\t\tneedsUpdate = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.keys.RIGHT:\n\t\t\t\t\tpan( - scope.keyPanSpeed, 0 );\n\t\t\t\t\tneedsUpdate = true;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\t// prevent the browser from scrolling on cursor keys\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tscope.update();\n\n\t\t\t}\n\n\n\t\t}\n\n\t\tfunction handleTouchStartRotate( event ) {\n\n\t\t\tif ( event.touches.length == 1 ) {\n\n\t\t\t\trotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t\t} else {\n\n\t\t\t\tconst x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\t\tconst y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\t\trotateStart.set( x, y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction handleTouchStartPan( event ) {\n\n\t\t\tif ( event.touches.length == 1 ) {\n\n\t\t\t\tpanStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t\t} else {\n\n\t\t\t\tconst x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\t\tconst y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\t\tpanStart.set( x, y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction handleTouchStartDolly( event ) {\n\n\t\t\tconst dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\tconst dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tdollyStart.set( 0, distance );\n\n\t\t}\n\n\t\tfunction handleTouchStartDollyPan( event ) {\n\n\t\t\tif ( scope.enableZoom ) handleTouchStartDolly( event );\n\n\t\t\tif ( scope.enablePan ) handleTouchStartPan( event );\n\n\t\t}\n\n\t\tfunction handleTouchStartDollyRotate( event ) {\n\n\t\t\tif ( scope.enableZoom ) handleTouchStartDolly( event );\n\n\t\t\tif ( scope.enableRotate ) handleTouchStartRotate( event );\n\n\t\t}\n\n\t\tfunction handleTouchMoveRotate( event ) {\n\n\t\t\tif ( event.touches.length == 1 ) {\n\n\t\t\t\trotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t\t} else {\n\n\t\t\t\tconst x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\t\tconst y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\t\trotateEnd.set( x, y );\n\n\t\t\t}\n\n\t\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\t\tconst element = scope.domElement;\n\n\t\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\t\trotateStart.copy( rotateEnd );\n\n\t\t}\n\n\t\tfunction handleTouchMovePan( event ) {\n\n\t\t\tif ( event.touches.length == 1 ) {\n\n\t\t\t\tpanEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t\t} else {\n\n\t\t\t\tconst x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\t\tconst y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\t\tpanEnd.set( x, y );\n\n\t\t\t}\n\n\t\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\t\tpan( panDelta.x, panDelta.y );\n\n\t\t\tpanStart.copy( panEnd );\n\n\t\t}\n\n\t\tfunction handleTouchMoveDolly( event ) {\n\n\t\t\tconst dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\tconst dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tdollyEnd.set( 0, distance );\n\n\t\t\tdollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );\n\n\t\t\tdollyOut( dollyDelta.y );\n\n\t\t\tdollyStart.copy( dollyEnd );\n\n\t\t}\n\n\t\tfunction handleTouchMoveDollyPan( event ) {\n\n\t\t\tif ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n\t\t\tif ( scope.enablePan ) handleTouchMovePan( event );\n\n\t\t}\n\n\t\tfunction handleTouchMoveDollyRotate( event ) {\n\n\t\t\tif ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n\t\t\tif ( scope.enableRotate ) handleTouchMoveRotate( event );\n\n\t\t}\n\n\t\tfunction handleTouchEnd( /*event*/ ) {\n\n\t\t\t// no-op\n\n\t\t}\n\n\t\t//\n\t\t// event handlers - FSM: listen for events and reset state\n\t\t//\n\n\t\tfunction onPointerDown( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tswitch ( event.pointerType ) {\n\n\t\t\t\tcase 'mouse':\n\t\t\t\tcase 'pen':\n\t\t\t\t\tonMouseDown( event );\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO touch\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onPointerMove( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tswitch ( event.pointerType ) {\n\n\t\t\t\tcase 'mouse':\n\t\t\t\tcase 'pen':\n\t\t\t\t\tonMouseMove( event );\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO touch\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onPointerUp( event ) {\n\n\t\t\tswitch ( event.pointerType ) {\n\n\t\t\t\tcase 'mouse':\n\t\t\t\tcase 'pen':\n\t\t\t\t\tonMouseUp( event );\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO touch\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseDown( event ) {\n\n\t\t\t// Prevent the browser from scrolling.\n\t\t\tevent.preventDefault();\n\n\t\t\t// Manually set the focus since calling preventDefault above\n\t\t\t// prevents the browser from setting it automatically.\n\n\t\t\tscope.domElement.focus ? scope.domElement.focus() : window.focus();\n\n\t\t\tlet mouseAction;\n\n\t\t\tswitch ( event.button ) {\n\n\t\t\t\tcase 0:\n\n\t\t\t\t\tmouseAction = scope.mouseButtons.LEFT;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\n\t\t\t\t\tmouseAction = scope.mouseButtons.MIDDLE;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\n\t\t\t\t\tmouseAction = scope.mouseButtons.RIGHT;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tmouseAction = - 1;\n\n\t\t\t}\n\n\t\t\tswitch ( mouseAction ) {\n\n\t\t\t\tcase MOUSE.DOLLY:\n\n\t\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\t\thandleMouseDownDolly( event );\n\n\t\t\t\t\tstate = STATE.DOLLY;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MOUSE.ROTATE:\n\n\t\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MOUSE.PAN:\n\n\t\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t}\n\n\t\t\tif ( state !== STATE.NONE ) {\n\n\t\t\t\tscope.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove );\n\t\t\t\tscope.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp );\n\n\t\t\t\tscope.dispatchEvent( _startEvent );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseMove( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t\tswitch ( state ) {\n\n\t\t\t\tcase STATE.ROTATE:\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleMouseMoveRotate( event );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.DOLLY:\n\n\t\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\t\thandleMouseMoveDolly( event );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.PAN:\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\thandleMouseMovePan( event );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseUp( event ) {\n\n\t\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove );\n\t\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp );\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\thandleMouseUp( event );\n\n\t\t\tscope.dispatchEvent( _endEvent );\n\n\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t\tfunction onMouseWheel( event ) {\n\n\t\t\tif ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t\tscope.dispatchEvent( _startEvent );\n\n\t\t\thandleMouseWheel( event );\n\n\t\t\tscope.dispatchEvent( _endEvent );\n\n\t\t}\n\n\t\tfunction onKeyDown( event ) {\n\n\t\t\tif ( scope.enabled === false || scope.enablePan === false ) return;\n\n\t\t\thandleKeyDown( event );\n\n\t\t}\n\n\t\tfunction onTouchStart( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tevent.preventDefault(); // prevent scrolling\n\n\t\t\tswitch ( event.touches.length ) {\n\n\t\t\t\tcase 1:\n\n\t\t\t\t\tswitch ( scope.touches.ONE ) {\n\n\t\t\t\t\t\tcase TOUCH.ROTATE:\n\n\t\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\t\thandleTouchStartRotate( event );\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TOUCH.PAN:\n\n\t\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\t\thandleTouchStartPan( event );\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_PAN;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\n\t\t\t\t\tswitch ( scope.touches.TWO ) {\n\n\t\t\t\t\t\tcase TOUCH.DOLLY_PAN:\n\n\t\t\t\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\t\t\t\thandleTouchStartDollyPan( event );\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TOUCH.DOLLY_ROTATE:\n\n\t\t\t\t\t\t\tif ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n\t\t\t\t\t\t\thandleTouchStartDollyRotate( event );\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_ROTATE;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t}\n\n\t\t\tif ( state !== STATE.NONE ) {\n\n\t\t\t\tscope.dispatchEvent( _startEvent );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onTouchMove( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tevent.preventDefault(); // prevent scrolling\n\n\t\t\tswitch ( state ) {\n\n\t\t\t\tcase STATE.TOUCH_ROTATE:\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleTouchMoveRotate( event );\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.TOUCH_PAN:\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\thandleTouchMovePan( event );\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.TOUCH_DOLLY_PAN:\n\n\t\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\t\thandleTouchMoveDollyPan( event );\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.TOUCH_DOLLY_ROTATE:\n\n\t\t\t\t\tif ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleTouchMoveDollyRotate( event );\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onTouchEnd( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\thandleTouchEnd( event );\n\n\t\t\tscope.dispatchEvent( _endEvent );\n\n\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t\tfunction onContextMenu( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t}\n\n\t\t//\n\n\t\tscope.domElement.addEventListener( 'contextmenu', onContextMenu );\n\n\t\tscope.domElement.addEventListener( 'pointerdown', onPointerDown );\n\t\tscope.domElement.addEventListener( 'wheel', onMouseWheel, { passive: false } );\n\n\t\tscope.domElement.addEventListener( 'touchstart', onTouchStart, { passive: false } );\n\t\tscope.domElement.addEventListener( 'touchend', onTouchEnd );\n\t\tscope.domElement.addEventListener( 'touchmove', onTouchMove, { passive: false } );\n\n\t\t// force an update at start\n\n\t\tthis.update();\n\n\t}\n\n}\n\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n// This is very similar to OrbitControls, another set of touch behavior\n//\n// Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - left mouse, or arrow keys / touch: one-finger move\n\nclass MapControls extends OrbitControls {\n\n\tconstructor( object, domElement ) {\n\n\t\tsuper( object, domElement );\n\n\t\tthis.screenSpacePanning = false; // pan orthogonal to world-space direction camera.up\n\n\t\tthis.mouseButtons.LEFT = MOUSE.PAN;\n\t\tthis.mouseButtons.RIGHT = MOUSE.ROTATE;\n\n\t\tthis.touches.ONE = TOUCH.PAN;\n\t\tthis.touches.TWO = TOUCH.DOLLY_ROTATE;\n\n\t}\n\n}\n\nexport { OrbitControls, MapControls };\n","import {\n\tEventDispatcher,\n\tQuaternion,\n\tVector3\n} from 'three';\n\nconst _changeEvent = { type: 'change' };\n\nclass FlyControls extends EventDispatcher {\n\n\tconstructor( object, domElement ) {\n\n\t\tsuper();\n\n\t\tif ( domElement === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.FlyControls: The second parameter \"domElement\" is now mandatory.' );\n\t\t\tdomElement = document;\n\n\t\t}\n\n\t\tthis.object = object;\n\t\tthis.domElement = domElement;\n\n\t\t// API\n\n\t\tthis.movementSpeed = 1.0;\n\t\tthis.rollSpeed = 0.005;\n\n\t\tthis.dragToLook = false;\n\t\tthis.autoForward = false;\n\n\t\t// disable default target object behavior\n\n\t\t// internals\n\n\t\tconst scope = this;\n\n\t\tconst EPS = 0.000001;\n\n\t\tconst lastQuaternion = new Quaternion();\n\t\tconst lastPosition = new Vector3();\n\n\t\tthis.tmpQuaternion = new Quaternion();\n\n\t\tthis.mouseStatus = 0;\n\n\t\tthis.moveState = { up: 0, down: 0, left: 0, right: 0, forward: 0, back: 0, pitchUp: 0, pitchDown: 0, yawLeft: 0, yawRight: 0, rollLeft: 0, rollRight: 0 };\n\t\tthis.moveVector = new Vector3( 0, 0, 0 );\n\t\tthis.rotationVector = new Vector3( 0, 0, 0 );\n\n\t\tthis.keydown = function ( event ) {\n\n\t\t\tif ( event.altKey ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t//event.preventDefault();\n\n\t\t\tswitch ( event.code ) {\n\n\t\t\t\tcase 'ShiftLeft':\n\t\t\t\tcase 'ShiftRight': this.movementSpeedMultiplier = .1; break;\n\n\t\t\t\tcase 'KeyW': this.moveState.forward = 1; break;\n\t\t\t\tcase 'KeyS': this.moveState.back = 1; break;\n\n\t\t\t\tcase 'KeyA': this.moveState.left = 1; break;\n\t\t\t\tcase 'KeyD': this.moveState.right = 1; break;\n\n\t\t\t\tcase 'KeyR': this.moveState.up = 1; break;\n\t\t\t\tcase 'KeyF': this.moveState.down = 1; break;\n\n\t\t\t\tcase 'ArrowUp': this.moveState.pitchUp = 1; break;\n\t\t\t\tcase 'ArrowDown': this.moveState.pitchDown = 1; break;\n\n\t\t\t\tcase 'ArrowLeft': this.moveState.yawLeft = 1; break;\n\t\t\t\tcase 'ArrowRight': this.moveState.yawRight = 1; break;\n\n\t\t\t\tcase 'KeyQ': this.moveState.rollLeft = 1; break;\n\t\t\t\tcase 'KeyE': this.moveState.rollRight = 1; break;\n\n\t\t\t}\n\n\t\t\tthis.updateMovementVector();\n\t\t\tthis.updateRotationVector();\n\n\t\t};\n\n\t\tthis.keyup = function ( event ) {\n\n\t\t\tswitch ( event.code ) {\n\n\t\t\t\tcase 'ShiftLeft':\n\t\t\t\tcase 'ShiftRight': this.movementSpeedMultiplier = 1; break;\n\n\t\t\t\tcase 'KeyW': this.moveState.forward = 0; break;\n\t\t\t\tcase 'KeyS': this.moveState.back = 0; break;\n\n\t\t\t\tcase 'KeyA': this.moveState.left = 0; break;\n\t\t\t\tcase 'KeyD': this.moveState.right = 0; break;\n\n\t\t\t\tcase 'KeyR': this.moveState.up = 0; break;\n\t\t\t\tcase 'KeyF': this.moveState.down = 0; break;\n\n\t\t\t\tcase 'ArrowUp': this.moveState.pitchUp = 0; break;\n\t\t\t\tcase 'ArrowDown': this.moveState.pitchDown = 0; break;\n\n\t\t\t\tcase 'ArrowLeft': this.moveState.yawLeft = 0; break;\n\t\t\t\tcase 'ArrowRight': this.moveState.yawRight = 0; break;\n\n\t\t\t\tcase 'KeyQ': this.moveState.rollLeft = 0; break;\n\t\t\t\tcase 'KeyE': this.moveState.rollRight = 0; break;\n\n\t\t\t}\n\n\t\t\tthis.updateMovementVector();\n\t\t\tthis.updateRotationVector();\n\n\t\t};\n\n\t\tthis.mousedown = function ( event ) {\n\n\t\t\tif ( this.domElement !== document ) {\n\n\t\t\t\tthis.domElement.focus();\n\n\t\t\t}\n\n\t\t\tevent.preventDefault();\n\n\t\t\tif ( this.dragToLook ) {\n\n\t\t\t\tthis.mouseStatus ++;\n\n\t\t\t} else {\n\n\t\t\t\tswitch ( event.button ) {\n\n\t\t\t\t\tcase 0: this.moveState.forward = 1; break;\n\t\t\t\t\tcase 2: this.moveState.back = 1; break;\n\n\t\t\t\t}\n\n\t\t\t\tthis.updateMovementVector();\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.mousemove = function ( event ) {\n\n\t\t\tif ( ! this.dragToLook || this.mouseStatus > 0 ) {\n\n\t\t\t\tconst container = this.getContainerDimensions();\n\t\t\t\tconst halfWidth = container.size[ 0 ] / 2;\n\t\t\t\tconst halfHeight = container.size[ 1 ] / 2;\n\n\t\t\t\tthis.moveState.yawLeft = - ( ( event.pageX - container.offset[ 0 ] ) - halfWidth ) / halfWidth;\n\t\t\t\tthis.moveState.pitchDown = ( ( event.pageY - container.offset[ 1 ] ) - halfHeight ) / halfHeight;\n\n\t\t\t\tthis.updateRotationVector();\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.mouseup = function ( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tif ( this.dragToLook ) {\n\n\t\t\t\tthis.mouseStatus --;\n\n\t\t\t\tthis.moveState.yawLeft = this.moveState.pitchDown = 0;\n\n\t\t\t} else {\n\n\t\t\t\tswitch ( event.button ) {\n\n\t\t\t\t\tcase 0: this.moveState.forward = 0; break;\n\t\t\t\t\tcase 2: this.moveState.back = 0; break;\n\n\t\t\t\t}\n\n\t\t\t\tthis.updateMovementVector();\n\n\t\t\t}\n\n\t\t\tthis.updateRotationVector();\n\n\t\t};\n\n\t\tthis.update = function ( delta ) {\n\n\t\t\tconst moveMult = delta * scope.movementSpeed;\n\t\t\tconst rotMult = delta * scope.rollSpeed;\n\n\t\t\tscope.object.translateX( scope.moveVector.x * moveMult );\n\t\t\tscope.object.translateY( scope.moveVector.y * moveMult );\n\t\t\tscope.object.translateZ( scope.moveVector.z * moveMult );\n\n\t\t\tscope.tmpQuaternion.set( scope.rotationVector.x * rotMult, scope.rotationVector.y * rotMult, scope.rotationVector.z * rotMult, 1 ).normalize();\n\t\t\tscope.object.quaternion.multiply( scope.tmpQuaternion );\n\n\t\t\tif (\n\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS\n\t\t\t) {\n\n\t\t\t\tscope.dispatchEvent( _changeEvent );\n\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\tlastPosition.copy( scope.object.position );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.updateMovementVector = function () {\n\n\t\t\tconst forward = ( this.moveState.forward || ( this.autoForward && ! this.moveState.back ) ) ? 1 : 0;\n\n\t\t\tthis.moveVector.x = ( - this.moveState.left + this.moveState.right );\n\t\t\tthis.moveVector.y = ( - this.moveState.down + this.moveState.up );\n\t\t\tthis.moveVector.z = ( - forward + this.moveState.back );\n\n\t\t\t//console.log( 'move:', [ this.moveVector.x, this.moveVector.y, this.moveVector.z ] );\n\n\t\t};\n\n\t\tthis.updateRotationVector = function () {\n\n\t\t\tthis.rotationVector.x = ( - this.moveState.pitchDown + this.moveState.pitchUp );\n\t\t\tthis.rotationVector.y = ( - this.moveState.yawRight + this.moveState.yawLeft );\n\t\t\tthis.rotationVector.z = ( - this.moveState.rollRight + this.moveState.rollLeft );\n\n\t\t\t//console.log( 'rotate:', [ this.rotationVector.x, this.rotationVector.y, this.rotationVector.z ] );\n\n\t\t};\n\n\t\tthis.getContainerDimensions = function () {\n\n\t\t\tif ( this.domElement != document ) {\n\n\t\t\t\treturn {\n\t\t\t\t\tsize: [ this.domElement.offsetWidth, this.domElement.offsetHeight ],\n\t\t\t\t\toffset: [ this.domElement.offsetLeft, this.domElement.offsetTop ]\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\treturn {\n\t\t\t\t\tsize: [ window.innerWidth, window.innerHeight ],\n\t\t\t\t\toffset: [ 0, 0 ]\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\tthis.domElement.removeEventListener( 'contextmenu', contextmenu );\n\t\t\tthis.domElement.removeEventListener( 'mousedown', _mousedown );\n\t\t\tthis.domElement.removeEventListener( 'mousemove', _mousemove );\n\t\t\tthis.domElement.removeEventListener( 'mouseup', _mouseup );\n\n\t\t\twindow.removeEventListener( 'keydown', _keydown );\n\t\t\twindow.removeEventListener( 'keyup', _keyup );\n\n\t\t};\n\n\t\tconst _mousemove = this.mousemove.bind( this );\n\t\tconst _mousedown = this.mousedown.bind( this );\n\t\tconst _mouseup = this.mouseup.bind( this );\n\t\tconst _keydown = this.keydown.bind( this );\n\t\tconst _keyup = this.keyup.bind( this );\n\n\t\tthis.domElement.addEventListener( 'contextmenu', contextmenu );\n\n\t\tthis.domElement.addEventListener( 'mousemove', _mousemove );\n\t\tthis.domElement.addEventListener( 'mousedown', _mousedown );\n\t\tthis.domElement.addEventListener( 'mouseup', _mouseup );\n\n\t\twindow.addEventListener( 'keydown', _keydown );\n\t\twindow.addEventListener( 'keyup', _keyup );\n\n\t\tthis.updateMovementVector();\n\t\tthis.updateRotationVector();\n\n\t}\n\n}\n\nfunction contextmenu( event ) {\n\n\tevent.preventDefault();\n\n}\n\nexport { FlyControls };\n","/**\n * Full-screen textured quad shader\n */\n\nvar CopyShader = {\n\n\tuniforms: {\n\n\t\t'tDiffuse': { value: null },\n\t\t'opacity': { value: 1.0 }\n\n\t},\n\n\tvertexShader: /* glsl */`\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\n\t\tuniform float opacity;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor = opacity * texel;\n\n\t\t}`\n\n};\n\nexport { CopyShader };\n","import {\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tOrthographicCamera,\n\tMesh\n} from 'three';\n\nclass Pass {\n\n\tconstructor() {\n\n\t\t// if set to true, the pass is processed by the composer\n\t\tthis.enabled = true;\n\n\t\t// if set to true, the pass indicates to swap read and write buffer after rendering\n\t\tthis.needsSwap = true;\n\n\t\t// if set to true, the pass clears its buffer before rendering\n\t\tthis.clear = false;\n\n\t\t// if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.\n\t\tthis.renderToScreen = false;\n\n\t}\n\n\tsetSize( /* width, height */ ) {}\n\n\trender( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\tconsole.error( 'THREE.Pass: .render() must be implemented in derived pass.' );\n\n\t}\n\n}\n\n// Helper for passes that need to fill the viewport with a single quad.\n\nconst _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n// https://github.com/mrdoob/three.js/pull/21358\n\nconst _geometry = new BufferGeometry();\n_geometry.setAttribute( 'position', new Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );\n_geometry.setAttribute( 'uv', new Float32BufferAttribute( [ 0, 2, 0, 0, 2, 0 ], 2 ) );\n\nclass FullScreenQuad {\n\n\tconstructor( material ) {\n\n\t\tthis._mesh = new Mesh( _geometry, material );\n\n\t}\n\n\tdispose() {\n\n\t\tthis._mesh.geometry.dispose();\n\n\t}\n\n\trender( renderer ) {\n\n\t\trenderer.render( this._mesh, _camera );\n\n\t}\n\n\tget material() {\n\n\t\treturn this._mesh.material;\n\n\t}\n\n\tset material( value ) {\n\n\t\tthis._mesh.material = value;\n\n\t}\n\n}\n\nexport { Pass, FullScreenQuad };\n","import {\n\tShaderMaterial,\n\tUniformsUtils\n} from 'three';\nimport { Pass, FullScreenQuad } from '../postprocessing/Pass.js';\n\nclass ShaderPass extends Pass {\n\n\tconstructor( shader, textureID ) {\n\n\t\tsuper();\n\n\t\tthis.textureID = ( textureID !== undefined ) ? textureID : 'tDiffuse';\n\n\t\tif ( shader instanceof ShaderMaterial ) {\n\n\t\t\tthis.uniforms = shader.uniforms;\n\n\t\t\tthis.material = shader;\n\n\t\t} else if ( shader ) {\n\n\t\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t\tthis.material = new ShaderMaterial( {\n\n\t\t\t\tdefines: Object.assign( {}, shader.defines ),\n\t\t\t\tuniforms: this.uniforms,\n\t\t\t\tvertexShader: shader.vertexShader,\n\t\t\t\tfragmentShader: shader.fragmentShader\n\n\t\t\t} );\n\n\t\t}\n\n\t\tthis.fsQuad = new FullScreenQuad( this.material );\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tif ( this.uniforms[ this.textureID ] ) {\n\n\t\t\tthis.uniforms[ this.textureID ].value = readBuffer.texture;\n\n\t\t}\n\n\t\tthis.fsQuad.material = this.material;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\t// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n\t\t\tif ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n}\n\nexport { ShaderPass };\n","import { Pass } from '../postprocessing/Pass.js';\n\nclass MaskPass extends Pass {\n\n\tconstructor( scene, camera ) {\n\n\t\tsuper();\n\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tthis.clear = true;\n\t\tthis.needsSwap = false;\n\n\t\tthis.inverse = false;\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tconst context = renderer.getContext();\n\t\tconst state = renderer.state;\n\n\t\t// don't update color or depth\n\n\t\tstate.buffers.color.setMask( false );\n\t\tstate.buffers.depth.setMask( false );\n\n\t\t// lock buffers\n\n\t\tstate.buffers.color.setLocked( true );\n\t\tstate.buffers.depth.setLocked( true );\n\n\t\t// set up stencil\n\n\t\tlet writeValue, clearValue;\n\n\t\tif ( this.inverse ) {\n\n\t\t\twriteValue = 0;\n\t\t\tclearValue = 1;\n\n\t\t} else {\n\n\t\t\twriteValue = 1;\n\t\t\tclearValue = 0;\n\n\t\t}\n\n\t\tstate.buffers.stencil.setTest( true );\n\t\tstate.buffers.stencil.setOp( context.REPLACE, context.REPLACE, context.REPLACE );\n\t\tstate.buffers.stencil.setFunc( context.ALWAYS, writeValue, 0xffffffff );\n\t\tstate.buffers.stencil.setClear( clearValue );\n\t\tstate.buffers.stencil.setLocked( true );\n\n\t\t// draw into the stencil buffer\n\n\t\trenderer.setRenderTarget( readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\trenderer.setRenderTarget( writeBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\t// unlock color and depth buffer for subsequent rendering\n\n\t\tstate.buffers.color.setLocked( false );\n\t\tstate.buffers.depth.setLocked( false );\n\n\t\t// only render where stencil is set to 1\n\n\t\tstate.buffers.stencil.setLocked( false );\n\t\tstate.buffers.stencil.setFunc( context.EQUAL, 1, 0xffffffff ); // draw if == 1\n\t\tstate.buffers.stencil.setOp( context.KEEP, context.KEEP, context.KEEP );\n\t\tstate.buffers.stencil.setLocked( true );\n\n\t}\n\n}\n\nclass ClearMaskPass extends Pass {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.needsSwap = false;\n\n\t}\n\n\trender( renderer /*, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\trenderer.state.buffers.stencil.setLocked( false );\n\t\trenderer.state.buffers.stencil.setTest( false );\n\n\t}\n\n}\n\nexport { MaskPass, ClearMaskPass };\n","import {\n\tBufferGeometry,\n\tClock,\n\tFloat32BufferAttribute,\n\tLinearFilter,\n\tMesh,\n\tOrthographicCamera,\n\tRGBAFormat,\n\tVector2,\n\tWebGLRenderTarget\n} from 'three';\nimport { CopyShader } from '../shaders/CopyShader.js';\nimport { ShaderPass } from '../postprocessing/ShaderPass.js';\nimport { MaskPass } from '../postprocessing/MaskPass.js';\nimport { ClearMaskPass } from '../postprocessing/MaskPass.js';\n\nclass EffectComposer {\n\n\tconstructor( renderer, renderTarget ) {\n\n\t\tthis.renderer = renderer;\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\tconst parameters = {\n\t\t\t\tminFilter: LinearFilter,\n\t\t\t\tmagFilter: LinearFilter,\n\t\t\t\tformat: RGBAFormat\n\t\t\t};\n\n\t\t\tconst size = renderer.getSize( new Vector2() );\n\t\t\tthis._pixelRatio = renderer.getPixelRatio();\n\t\t\tthis._width = size.width;\n\t\t\tthis._height = size.height;\n\n\t\t\trenderTarget = new WebGLRenderTarget( this._width * this._pixelRatio, this._height * this._pixelRatio, parameters );\n\t\t\trenderTarget.texture.name = 'EffectComposer.rt1';\n\n\t\t} else {\n\n\t\t\tthis._pixelRatio = 1;\n\t\t\tthis._width = renderTarget.width;\n\t\t\tthis._height = renderTarget.height;\n\n\t\t}\n\n\t\tthis.renderTarget1 = renderTarget;\n\t\tthis.renderTarget2 = renderTarget.clone();\n\t\tthis.renderTarget2.texture.name = 'EffectComposer.rt2';\n\n\t\tthis.writeBuffer = this.renderTarget1;\n\t\tthis.readBuffer = this.renderTarget2;\n\n\t\tthis.renderToScreen = true;\n\n\t\tthis.passes = [];\n\n\t\t// dependencies\n\n\t\tif ( CopyShader === undefined ) {\n\n\t\t\tconsole.error( 'THREE.EffectComposer relies on CopyShader' );\n\n\t\t}\n\n\t\tif ( ShaderPass === undefined ) {\n\n\t\t\tconsole.error( 'THREE.EffectComposer relies on ShaderPass' );\n\n\t\t}\n\n\t\tthis.copyPass = new ShaderPass( CopyShader );\n\n\t\tthis.clock = new Clock();\n\n\t}\n\n\tswapBuffers() {\n\n\t\tconst tmp = this.readBuffer;\n\t\tthis.readBuffer = this.writeBuffer;\n\t\tthis.writeBuffer = tmp;\n\n\t}\n\n\taddPass( pass ) {\n\n\t\tthis.passes.push( pass );\n\t\tpass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t}\n\n\tinsertPass( pass, index ) {\n\n\t\tthis.passes.splice( index, 0, pass );\n\t\tpass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t}\n\n\tremovePass( pass ) {\n\n\t\tconst index = this.passes.indexOf( pass );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tthis.passes.splice( index, 1 );\n\n\t\t}\n\n\t}\n\n\tisLastEnabledPass( passIndex ) {\n\n\t\tfor ( let i = passIndex + 1; i < this.passes.length; i ++ ) {\n\n\t\t\tif ( this.passes[ i ].enabled ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\trender( deltaTime ) {\n\n\t\t// deltaTime value is in seconds\n\n\t\tif ( deltaTime === undefined ) {\n\n\t\t\tdeltaTime = this.clock.getDelta();\n\n\t\t}\n\n\t\tconst currentRenderTarget = this.renderer.getRenderTarget();\n\n\t\tlet maskActive = false;\n\n\t\tfor ( let i = 0, il = this.passes.length; i < il; i ++ ) {\n\n\t\t\tconst pass = this.passes[ i ];\n\n\t\t\tif ( pass.enabled === false ) continue;\n\n\t\t\tpass.renderToScreen = ( this.renderToScreen && this.isLastEnabledPass( i ) );\n\t\t\tpass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive );\n\n\t\t\tif ( pass.needsSwap ) {\n\n\t\t\t\tif ( maskActive ) {\n\n\t\t\t\t\tconst context = this.renderer.getContext();\n\t\t\t\t\tconst stencil = this.renderer.state.buffers.stencil;\n\n\t\t\t\t\t//context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );\n\t\t\t\t\tstencil.setFunc( context.NOTEQUAL, 1, 0xffffffff );\n\n\t\t\t\t\tthis.copyPass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime );\n\n\t\t\t\t\t//context.stencilFunc( context.EQUAL, 1, 0xffffffff );\n\t\t\t\t\tstencil.setFunc( context.EQUAL, 1, 0xffffffff );\n\n\t\t\t\t}\n\n\t\t\t\tthis.swapBuffers();\n\n\t\t\t}\n\n\t\t\tif ( MaskPass !== undefined ) {\n\n\t\t\t\tif ( pass instanceof MaskPass ) {\n\n\t\t\t\t\tmaskActive = true;\n\n\t\t\t\t} else if ( pass instanceof ClearMaskPass ) {\n\n\t\t\t\t\tmaskActive = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.renderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n\treset( renderTarget ) {\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\tconst size = this.renderer.getSize( new Vector2() );\n\t\t\tthis._pixelRatio = this.renderer.getPixelRatio();\n\t\t\tthis._width = size.width;\n\t\t\tthis._height = size.height;\n\n\t\t\trenderTarget = this.renderTarget1.clone();\n\t\t\trenderTarget.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t\t}\n\n\t\tthis.renderTarget1.dispose();\n\t\tthis.renderTarget2.dispose();\n\t\tthis.renderTarget1 = renderTarget;\n\t\tthis.renderTarget2 = renderTarget.clone();\n\n\t\tthis.writeBuffer = this.renderTarget1;\n\t\tthis.readBuffer = this.renderTarget2;\n\n\t}\n\n\tsetSize( width, height ) {\n\n\t\tthis._width = width;\n\t\tthis._height = height;\n\n\t\tconst effectiveWidth = this._width * this._pixelRatio;\n\t\tconst effectiveHeight = this._height * this._pixelRatio;\n\n\t\tthis.renderTarget1.setSize( effectiveWidth, effectiveHeight );\n\t\tthis.renderTarget2.setSize( effectiveWidth, effectiveHeight );\n\n\t\tfor ( let i = 0; i < this.passes.length; i ++ ) {\n\n\t\t\tthis.passes[ i ].setSize( effectiveWidth, effectiveHeight );\n\n\t\t}\n\n\t}\n\n\tsetPixelRatio( pixelRatio ) {\n\n\t\tthis._pixelRatio = pixelRatio;\n\n\t\tthis.setSize( this._width, this._height );\n\n\t}\n\n}\n\n\nclass Pass {\n\n\tconstructor() {\n\n\t\t// if set to true, the pass is processed by the composer\n\t\tthis.enabled = true;\n\n\t\t// if set to true, the pass indicates to swap read and write buffer after rendering\n\t\tthis.needsSwap = true;\n\n\t\t// if set to true, the pass clears its buffer before rendering\n\t\tthis.clear = false;\n\n\t\t// if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.\n\t\tthis.renderToScreen = false;\n\n\t}\n\n\tsetSize( /* width, height */ ) {}\n\n\trender( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\tconsole.error( 'THREE.Pass: .render() must be implemented in derived pass.' );\n\n\t}\n\n}\n\n// Helper for passes that need to fill the viewport with a single quad.\n\nconst _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n// https://github.com/mrdoob/three.js/pull/21358\n\nconst _geometry = new BufferGeometry();\n_geometry.setAttribute( 'position', new Float32BufferAttribute( [ - 1, 3, 0, - 1, - 1, 0, 3, - 1, 0 ], 3 ) );\n_geometry.setAttribute( 'uv', new Float32BufferAttribute( [ 0, 2, 0, 0, 2, 0 ], 2 ) );\n\nclass FullScreenQuad {\n\n\tconstructor( material ) {\n\n\t\tthis._mesh = new Mesh( _geometry, material );\n\n\t}\n\n\tdispose() {\n\n\t\tthis._mesh.geometry.dispose();\n\n\t}\n\n\trender( renderer ) {\n\n\t\trenderer.render( this._mesh, _camera );\n\n\t}\n\n\tget material() {\n\n\t\treturn this._mesh.material;\n\n\t}\n\n\tset material( value ) {\n\n\t\tthis._mesh.material = value;\n\n\t}\n\n}\n\nexport { EffectComposer, Pass, FullScreenQuad };\n","import {\n\tColor\n} from 'three';\nimport { Pass } from '../postprocessing/Pass.js';\n\nclass RenderPass extends Pass {\n\n\tconstructor( scene, camera, overrideMaterial, clearColor, clearAlpha ) {\n\n\t\tsuper();\n\n\t\tthis.scene = scene;\n\t\tthis.camera = camera;\n\n\t\tthis.overrideMaterial = overrideMaterial;\n\n\t\tthis.clearColor = clearColor;\n\t\tthis.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0;\n\n\t\tthis.clear = true;\n\t\tthis.clearDepth = false;\n\t\tthis.needsSwap = false;\n\t\tthis._oldClearColor = new Color();\n\n\t}\n\n\trender( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tconst oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tlet oldClearAlpha, oldOverrideMaterial;\n\n\t\tif ( this.overrideMaterial !== undefined ) {\n\n\t\t\toldOverrideMaterial = this.scene.overrideMaterial;\n\n\t\t\tthis.scene.overrideMaterial = this.overrideMaterial;\n\n\t\t}\n\n\t\tif ( this.clearColor ) {\n\n\t\t\trenderer.getClearColor( this._oldClearColor );\n\t\t\toldClearAlpha = renderer.getClearAlpha();\n\n\t\t\trenderer.setClearColor( this.clearColor, this.clearAlpha );\n\n\t\t}\n\n\t\tif ( this.clearDepth ) {\n\n\t\t\trenderer.clearDepth();\n\n\t\t}\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\n\t\t// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n\t\tif ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\t\trenderer.render( this.scene, this.camera );\n\n\t\tif ( this.clearColor ) {\n\n\t\t\trenderer.setClearColor( this._oldClearColor, oldClearAlpha );\n\n\t\t}\n\n\t\tif ( this.overrideMaterial !== undefined ) {\n\n\t\t\tthis.scene.overrideMaterial = oldOverrideMaterial;\n\n\t\t}\n\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n}\n\nexport { RenderPass };\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport _wrapNativeSuper from '@babel/runtime/helpers/esm/wrapNativeSuper';\nimport _taggedTemplateLiteralLoose from '@babel/runtime/helpers/esm/taggedTemplateLiteralLoose';\n\nfunction last() {\n var _ref;\n\n return _ref = arguments.length - 1, _ref < 0 || arguments.length <= _ref ? undefined : arguments[_ref];\n}\n\nfunction negation(a) {\n return -a;\n}\n\nfunction addition(a, b) {\n return a + b;\n}\n\nfunction subtraction(a, b) {\n return a - b;\n}\n\nfunction multiplication(a, b) {\n return a * b;\n}\n\nfunction division(a, b) {\n return a / b;\n}\n\nfunction max() {\n return Math.max.apply(Math, arguments);\n}\n\nfunction min() {\n return Math.min.apply(Math, arguments);\n}\n\nfunction comma() {\n return Array.of.apply(Array, arguments);\n}\n\nvar defaultSymbols = {\n symbols: {\n '*': {\n infix: {\n symbol: '*',\n f: multiplication,\n notation: 'infix',\n precedence: 4,\n rightToLeft: 0,\n argCount: 2\n },\n symbol: '*',\n regSymbol: '\\\\*'\n },\n '/': {\n infix: {\n symbol: '/',\n f: division,\n notation: 'infix',\n precedence: 4,\n rightToLeft: 0,\n argCount: 2\n },\n symbol: '/',\n regSymbol: '/'\n },\n '+': {\n infix: {\n symbol: '+',\n f: addition,\n notation: 'infix',\n precedence: 2,\n rightToLeft: 0,\n argCount: 2\n },\n prefix: {\n symbol: '+',\n f: last,\n notation: 'prefix',\n precedence: 3,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: '+',\n regSymbol: '\\\\+'\n },\n '-': {\n infix: {\n symbol: '-',\n f: subtraction,\n notation: 'infix',\n precedence: 2,\n rightToLeft: 0,\n argCount: 2\n },\n prefix: {\n symbol: '-',\n f: negation,\n notation: 'prefix',\n precedence: 3,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: '-',\n regSymbol: '-'\n },\n ',': {\n infix: {\n symbol: ',',\n f: comma,\n notation: 'infix',\n precedence: 1,\n rightToLeft: 0,\n argCount: 2\n },\n symbol: ',',\n regSymbol: ','\n },\n '(': {\n prefix: {\n symbol: '(',\n f: last,\n notation: 'prefix',\n precedence: 0,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: '(',\n regSymbol: '\\\\('\n },\n ')': {\n postfix: {\n symbol: ')',\n f: undefined,\n notation: 'postfix',\n precedence: 0,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: ')',\n regSymbol: '\\\\)'\n },\n min: {\n func: {\n symbol: 'min',\n f: min,\n notation: 'func',\n precedence: 0,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: 'min',\n regSymbol: 'min\\\\b'\n },\n max: {\n func: {\n symbol: 'max',\n f: max,\n notation: 'func',\n precedence: 0,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: 'max',\n regSymbol: 'max\\\\b'\n }\n }\n};\n\n// based on https://github.com/styled-components/styled-components/blob/fcf6f3804c57a14dd7984dfab7bc06ee2edca044/src/utils/error.js\n\n/**\n * Parse errors.md and turn it into a simple hash of code: message\n * @private\n */\nvar ERRORS = {\n \"1\": \"Passed invalid arguments to hsl, please pass multiple numbers e.g. hsl(360, 0.75, 0.4) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75 }).\\n\\n\",\n \"2\": \"Passed invalid arguments to hsla, please pass multiple numbers e.g. hsla(360, 0.75, 0.4, 0.7) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75, alpha: 0.7 }).\\n\\n\",\n \"3\": \"Passed an incorrect argument to a color function, please pass a string representation of a color.\\n\\n\",\n \"4\": \"Couldn't generate valid rgb string from %s, it returned %s.\\n\\n\",\n \"5\": \"Couldn't parse the color string. Please provide the color as a string in hex, rgb, rgba, hsl or hsla notation.\\n\\n\",\n \"6\": \"Passed invalid arguments to rgb, please pass multiple numbers e.g. rgb(255, 205, 100) or an object e.g. rgb({ red: 255, green: 205, blue: 100 }).\\n\\n\",\n \"7\": \"Passed invalid arguments to rgba, please pass multiple numbers e.g. rgb(255, 205, 100, 0.75) or an object e.g. rgb({ red: 255, green: 205, blue: 100, alpha: 0.75 }).\\n\\n\",\n \"8\": \"Passed invalid argument to toColorString, please pass a RgbColor, RgbaColor, HslColor or HslaColor object.\\n\\n\",\n \"9\": \"Please provide a number of steps to the modularScale helper.\\n\\n\",\n \"10\": \"Please pass a number or one of the predefined scales to the modularScale helper as the ratio.\\n\\n\",\n \"11\": \"Invalid value passed as base to modularScale, expected number or em string but got \\\"%s\\\"\\n\\n\",\n \"12\": \"Expected a string ending in \\\"px\\\" or a number passed as the first argument to %s(), got \\\"%s\\\" instead.\\n\\n\",\n \"13\": \"Expected a string ending in \\\"px\\\" or a number passed as the second argument to %s(), got \\\"%s\\\" instead.\\n\\n\",\n \"14\": \"Passed invalid pixel value (\\\"%s\\\") to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n \"15\": \"Passed invalid base value (\\\"%s\\\") to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n \"16\": \"You must provide a template to this method.\\n\\n\",\n \"17\": \"You passed an unsupported selector state to this method.\\n\\n\",\n \"18\": \"minScreen and maxScreen must be provided as stringified numbers with the same units.\\n\\n\",\n \"19\": \"fromSize and toSize must be provided as stringified numbers with the same units.\\n\\n\",\n \"20\": \"expects either an array of objects or a single object with the properties prop, fromSize, and toSize.\\n\\n\",\n \"21\": \"expects the objects in the first argument array to have the properties `prop`, `fromSize`, and `toSize`.\\n\\n\",\n \"22\": \"expects the first argument object to have the properties `prop`, `fromSize`, and `toSize`.\\n\\n\",\n \"23\": \"fontFace expects a name of a font-family.\\n\\n\",\n \"24\": \"fontFace expects either the path to the font file(s) or a name of a local copy.\\n\\n\",\n \"25\": \"fontFace expects localFonts to be an array.\\n\\n\",\n \"26\": \"fontFace expects fileFormats to be an array.\\n\\n\",\n \"27\": \"radialGradient requries at least 2 color-stops to properly render.\\n\\n\",\n \"28\": \"Please supply a filename to retinaImage() as the first argument.\\n\\n\",\n \"29\": \"Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.\\n\\n\",\n \"30\": \"Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\\n\\n\",\n \"31\": \"The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation\\n\\n\",\n \"32\": \"To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])\\nTo pass a single animation please supply them in simple values, e.g. animation('rotate', '2s')\\n\\n\",\n \"33\": \"The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation\\n\\n\",\n \"34\": \"borderRadius expects a radius value as a string or number as the second argument.\\n\\n\",\n \"35\": \"borderRadius expects one of \\\"top\\\", \\\"bottom\\\", \\\"left\\\" or \\\"right\\\" as the first argument.\\n\\n\",\n \"36\": \"Property must be a string value.\\n\\n\",\n \"37\": \"Syntax Error at %s.\\n\\n\",\n \"38\": \"Formula contains a function that needs parentheses at %s.\\n\\n\",\n \"39\": \"Formula is missing closing parenthesis at %s.\\n\\n\",\n \"40\": \"Formula has too many closing parentheses at %s.\\n\\n\",\n \"41\": \"All values in a formula must have the same unit or be unitless.\\n\\n\",\n \"42\": \"Please provide a number of steps to the modularScale helper.\\n\\n\",\n \"43\": \"Please pass a number or one of the predefined scales to the modularScale helper as the ratio.\\n\\n\",\n \"44\": \"Invalid value passed as base to modularScale, expected number or em/rem string but got %s.\\n\\n\",\n \"45\": \"Passed invalid argument to hslToColorString, please pass a HslColor or HslaColor object.\\n\\n\",\n \"46\": \"Passed invalid argument to rgbToColorString, please pass a RgbColor or RgbaColor object.\\n\\n\",\n \"47\": \"minScreen and maxScreen must be provided as stringified numbers with the same units.\\n\\n\",\n \"48\": \"fromSize and toSize must be provided as stringified numbers with the same units.\\n\\n\",\n \"49\": \"Expects either an array of objects or a single object with the properties prop, fromSize, and toSize.\\n\\n\",\n \"50\": \"Expects the objects in the first argument array to have the properties prop, fromSize, and toSize.\\n\\n\",\n \"51\": \"Expects the first argument object to have the properties prop, fromSize, and toSize.\\n\\n\",\n \"52\": \"fontFace expects either the path to the font file(s) or a name of a local copy.\\n\\n\",\n \"53\": \"fontFace expects localFonts to be an array.\\n\\n\",\n \"54\": \"fontFace expects fileFormats to be an array.\\n\\n\",\n \"55\": \"fontFace expects a name of a font-family.\\n\\n\",\n \"56\": \"linearGradient requries at least 2 color-stops to properly render.\\n\\n\",\n \"57\": \"radialGradient requries at least 2 color-stops to properly render.\\n\\n\",\n \"58\": \"Please supply a filename to retinaImage() as the first argument.\\n\\n\",\n \"59\": \"Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.\\n\\n\",\n \"60\": \"Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\\n\\n\",\n \"61\": \"Property must be a string value.\\n\\n\",\n \"62\": \"borderRadius expects a radius value as a string or number as the second argument.\\n\\n\",\n \"63\": \"borderRadius expects one of \\\"top\\\", \\\"bottom\\\", \\\"left\\\" or \\\"right\\\" as the first argument.\\n\\n\",\n \"64\": \"The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation.\\n\\n\",\n \"65\": \"To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])\\\\nTo pass a single animation please supply them in simple values, e.g. animation('rotate', '2s').\\n\\n\",\n \"66\": \"The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation.\\n\\n\",\n \"67\": \"You must provide a template to this method.\\n\\n\",\n \"68\": \"You passed an unsupported selector state to this method.\\n\\n\",\n \"69\": \"Expected a string ending in \\\"px\\\" or a number passed as the first argument to %s(), got %s instead.\\n\\n\",\n \"70\": \"Expected a string ending in \\\"px\\\" or a number passed as the second argument to %s(), got %s instead.\\n\\n\",\n \"71\": \"Passed invalid pixel value %s to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n \"72\": \"Passed invalid base value %s to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n \"73\": \"Please provide a valid CSS variable.\\n\\n\",\n \"74\": \"CSS variable not found and no default was provided.\\n\\n\",\n \"75\": \"important requires a valid style object, got a %s instead.\\n\\n\",\n \"76\": \"fromSize and toSize must be provided as stringified numbers with the same units as minScreen and maxScreen.\\n\\n\",\n \"77\": \"remToPx expects a value in \\\"rem\\\" but you provided it in \\\"%s\\\".\\n\\n\",\n \"78\": \"base must be set in \\\"px\\\" or \\\"%\\\" but you set it in \\\"%s\\\".\\n\"\n};\n/**\n * super basic version of sprintf\n * @private\n */\n\nfunction format() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var a = args[0];\n var b = [];\n var c;\n\n for (c = 1; c < args.length; c += 1) {\n b.push(args[c]);\n }\n\n b.forEach(function (d) {\n a = a.replace(/%[a-z]/, d);\n });\n return a;\n}\n/**\n * Create an error file out of errors.md for development and a simple web link to the full errors\n * in production mode.\n * @private\n */\n\n\nvar PolishedError = /*#__PURE__*/function (_Error) {\n _inheritsLoose(PolishedError, _Error);\n\n function PolishedError(code) {\n var _this;\n\n if (process.env.NODE_ENV === 'production') {\n _this = _Error.call(this, \"An error occurred. See https://github.com/styled-components/polished/blob/main/src/internalHelpers/errors.md#\" + code + \" for more information.\") || this;\n } else {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n _this = _Error.call(this, format.apply(void 0, [ERRORS[code]].concat(args))) || this;\n }\n\n return _assertThisInitialized(_this);\n }\n\n return PolishedError;\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n\nvar unitRegExp = /((?!\\w)a|na|hc|mc|dg|me[r]?|xe|ni(?![a-zA-Z])|mm|cp|tp|xp|q(?!s)|hv|xamv|nimv|wv|sm|s(?!\\D|$)|ged|darg?|nrut)/g; // Merges additional math functionality into the defaults.\n\nfunction mergeSymbolMaps(additionalSymbols) {\n var symbolMap = {};\n symbolMap.symbols = additionalSymbols ? _extends({}, defaultSymbols.symbols, additionalSymbols.symbols) : _extends({}, defaultSymbols.symbols);\n return symbolMap;\n}\n\nfunction exec(operators, values) {\n var _ref;\n\n var op = operators.pop();\n values.push(op.f.apply(op, (_ref = []).concat.apply(_ref, values.splice(-op.argCount))));\n return op.precedence;\n}\n\nfunction calculate(expression, additionalSymbols) {\n var symbolMap = mergeSymbolMaps(additionalSymbols);\n var match;\n var operators = [symbolMap.symbols['('].prefix];\n var values = [];\n var pattern = new RegExp( // Pattern for numbers\n \"\\\\d+(?:\\\\.\\\\d+)?|\" + // ...and patterns for individual operators/function names\n Object.keys(symbolMap.symbols).map(function (key) {\n return symbolMap.symbols[key];\n }) // longer symbols should be listed first\n // $FlowFixMe\n .sort(function (a, b) {\n return b.symbol.length - a.symbol.length;\n }) // $FlowFixMe\n .map(function (val) {\n return val.regSymbol;\n }).join('|') + \"|(\\\\S)\", 'g');\n pattern.lastIndex = 0; // Reset regular expression object\n\n var afterValue = false;\n\n do {\n match = pattern.exec(expression);\n\n var _ref2 = match || [')', undefined],\n token = _ref2[0],\n bad = _ref2[1];\n\n var notNumber = symbolMap.symbols[token];\n var notNewValue = notNumber && !notNumber.prefix && !notNumber.func;\n var notAfterValue = !notNumber || !notNumber.postfix && !notNumber.infix; // Check for syntax errors:\n\n if (bad || (afterValue ? notAfterValue : notNewValue)) {\n throw new PolishedError(37, match ? match.index : expression.length, expression);\n }\n\n if (afterValue) {\n // We either have an infix or postfix operator (they should be mutually exclusive)\n var curr = notNumber.postfix || notNumber.infix;\n\n do {\n var prev = operators[operators.length - 1];\n if ((curr.precedence - prev.precedence || prev.rightToLeft) > 0) break; // Apply previous operator, since it has precedence over current one\n } while (exec(operators, values)); // Exit loop after executing an opening parenthesis or function\n\n\n afterValue = curr.notation === 'postfix';\n\n if (curr.symbol !== ')') {\n operators.push(curr); // Postfix always has precedence over any operator that follows after it\n\n if (afterValue) exec(operators, values);\n }\n } else if (notNumber) {\n // prefix operator or function\n operators.push(notNumber.prefix || notNumber.func);\n\n if (notNumber.func) {\n // Require an opening parenthesis\n match = pattern.exec(expression);\n\n if (!match || match[0] !== '(') {\n throw new PolishedError(38, match ? match.index : expression.length, expression);\n }\n }\n } else {\n // number\n values.push(+token);\n afterValue = true;\n }\n } while (match && operators.length);\n\n if (operators.length) {\n throw new PolishedError(39, match ? match.index : expression.length, expression);\n } else if (match) {\n throw new PolishedError(40, match ? match.index : expression.length, expression);\n } else {\n return values.pop();\n }\n}\n\nfunction reverseString(str) {\n return str.split('').reverse().join('');\n}\n/**\n * Helper for doing math with CSS Units. Accepts a formula as a string. All values in the formula must have the same unit (or be unitless). Supports complex formulas utliziing addition, subtraction, multiplication, division, square root, powers, factorial, min, max, as well as parentheses for order of operation.\n *\n *In cases where you need to do calculations with mixed units where one unit is a [relative length unit](https://developer.mozilla.org/en-US/docs/Web/CSS/length#Relative_length_units), you will want to use [CSS Calc](https://developer.mozilla.org/en-US/docs/Web/CSS/calc).\n *\n * *warning* While we've done everything possible to ensure math safely evalutes formulas expressed as strings, you should always use extreme caution when passing `math` user provided values.\n * @example\n * // Styles as object usage\n * const styles = {\n * fontSize: math('12rem + 8rem'),\n * fontSize: math('(12px + 2px) * 3'),\n * fontSize: math('3px^2 + sqrt(4)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * fontSize: ${math('12rem + 8rem')};\n * fontSize: ${math('(12px + 2px) * 3')};\n * fontSize: ${math('3px^2 + sqrt(4)')};\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * fontSize: '20rem',\n * fontSize: '42px',\n * fontSize: '11px',\n * }\n */\n\n\nfunction math(formula, additionalSymbols) {\n var reversedFormula = reverseString(formula);\n var formulaMatch = reversedFormula.match(unitRegExp); // Check that all units are the same\n\n if (formulaMatch && !formulaMatch.every(function (unit) {\n return unit === formulaMatch[0];\n })) {\n throw new PolishedError(41);\n }\n\n var cleanFormula = reverseString(reversedFormula.replace(unitRegExp, ''));\n return \"\" + calculate(cleanFormula, additionalSymbols) + (formulaMatch ? reverseString(formulaMatch[0]) : '');\n}\n\nvar cssVariableRegex = /--[\\S]*/g;\n/**\n * Fetches the value of a passed CSS Variable in the :root scope, or otherwise returns a defaultValue if provided.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'background': cssVar('--background-color'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${cssVar('--background-color')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'background': 'red'\n * }\n */\n\nfunction cssVar(cssVariable, defaultValue) {\n if (!cssVariable || !cssVariable.match(cssVariableRegex)) {\n throw new PolishedError(73);\n }\n\n var variableValue;\n /* eslint-disable */\n\n /* istanbul ignore next */\n\n if (typeof document !== 'undefined' && document.documentElement !== null) {\n variableValue = getComputedStyle(document.documentElement).getPropertyValue(cssVariable);\n }\n /* eslint-enable */\n\n\n if (variableValue) {\n return variableValue.trim();\n } else if (defaultValue) {\n return defaultValue;\n }\n\n throw new PolishedError(74);\n}\n\n// @private\nfunction capitalizeString(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nvar positionMap$1 = ['Top', 'Right', 'Bottom', 'Left'];\n\nfunction generateProperty(property, position) {\n if (!property) return position.toLowerCase();\n var splitProperty = property.split('-');\n\n if (splitProperty.length > 1) {\n splitProperty.splice(1, 0, position);\n return splitProperty.reduce(function (acc, val) {\n return \"\" + acc + capitalizeString(val);\n });\n }\n\n var joinedProperty = property.replace(/([a-z])([A-Z])/g, \"$1\" + position + \"$2\");\n return property === joinedProperty ? \"\" + property + position : joinedProperty;\n}\n\nfunction generateStyles(property, valuesWithDefaults) {\n var styles = {};\n\n for (var i = 0; i < valuesWithDefaults.length; i += 1) {\n if (valuesWithDefaults[i] || valuesWithDefaults[i] === 0) {\n styles[generateProperty(property, positionMap$1[i])] = valuesWithDefaults[i];\n }\n }\n\n return styles;\n}\n/**\n * Enables shorthand for direction-based properties. It accepts a property (hyphenated or camelCased) and up to four values that map to top, right, bottom, and left, respectively. You can optionally pass an empty string to get only the directional values as properties. You can also optionally pass a null argument for a directional value to ignore it.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...directionalProperty('padding', '12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${directionalProperty('padding', '12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'paddingTop': '12px',\n * 'paddingRight': '24px',\n * 'paddingBottom': '36px',\n * 'paddingLeft': '48px'\n * }\n */\n\n\nfunction directionalProperty(property) {\n for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n values[_key - 1] = arguments[_key];\n }\n\n // prettier-ignore\n var firstValue = values[0],\n _values$ = values[1],\n secondValue = _values$ === void 0 ? firstValue : _values$,\n _values$2 = values[2],\n thirdValue = _values$2 === void 0 ? firstValue : _values$2,\n _values$3 = values[3],\n fourthValue = _values$3 === void 0 ? secondValue : _values$3;\n var valuesWithDefaults = [firstValue, secondValue, thirdValue, fourthValue];\n return generateStyles(property, valuesWithDefaults);\n}\n\n/**\n * Check if a string ends with something\n * @private\n */\nfunction endsWith(string, suffix) {\n return string.substr(-suffix.length) === suffix;\n}\n\nvar cssRegex$1 = /^([+-]?(?:\\d+|\\d*\\.\\d+))([a-z]*|%)$/;\n/**\n * Returns a given CSS value minus its unit of measure.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * '--dimension': stripUnit('100px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * --dimension: ${stripUnit('100px')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * '--dimension': 100\n * }\n */\n\nfunction stripUnit(value) {\n if (typeof value !== 'string') return value;\n var matchedValue = value.match(cssRegex$1);\n return matchedValue ? parseFloat(value) : value;\n}\n\n/**\n * Factory function that creates pixel-to-x converters\n * @private\n */\n\nvar pxtoFactory = function pxtoFactory(to) {\n return function (pxval, base) {\n if (base === void 0) {\n base = '16px';\n }\n\n var newPxval = pxval;\n var newBase = base;\n\n if (typeof pxval === 'string') {\n if (!endsWith(pxval, 'px')) {\n throw new PolishedError(69, to, pxval);\n }\n\n newPxval = stripUnit(pxval);\n }\n\n if (typeof base === 'string') {\n if (!endsWith(base, 'px')) {\n throw new PolishedError(70, to, base);\n }\n\n newBase = stripUnit(base);\n }\n\n if (typeof newPxval === 'string') {\n throw new PolishedError(71, pxval, to);\n }\n\n if (typeof newBase === 'string') {\n throw new PolishedError(72, base, to);\n }\n\n return \"\" + newPxval / newBase + to;\n };\n};\n\n/**\n * Convert pixel value to ems. The default base value is 16px, but can be changed by passing a\n * second argument to the function.\n * @function\n * @param {string|number} pxval\n * @param {string|number} [base='16px']\n * @example\n * // Styles as object usage\n * const styles = {\n * 'height': em('16px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * height: ${em('16px')}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'height': '1em'\n * }\n */\n\nvar em = /*#__PURE__*/pxtoFactory('em');\n\nvar cssRegex = /^([+-]?(?:\\d+|\\d*\\.\\d+))([a-z]*|%)$/;\n/**\n * Returns a given CSS value and its unit as elements of an array.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * '--dimension': getValueAndUnit('100px')[0],\n * '--unit': getValueAndUnit('100px')[1],\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * --dimension: ${getValueAndUnit('100px')[0]};\n * --unit: ${getValueAndUnit('100px')[1]};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * '--dimension': 100,\n * '--unit': 'px',\n * }\n */\n\nfunction getValueAndUnit(value) {\n if (typeof value !== 'string') return [value, ''];\n var matchedValue = value.match(cssRegex);\n if (matchedValue) return [parseFloat(value), matchedValue[2]];\n return [value, undefined];\n}\n\n/**\n * Helper for targeting rules in a style block generated by polished modules that need !important-level specificity. Can optionally specify a rule (or rules) to target specific rules.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...important(cover())\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${important(cover())}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * 'position': 'absolute !important',\n * 'top': '0 !important',\n * 'right: '0 !important',\n * 'bottom': '0 !important',\n * 'left: '0 !important'\n * }\n */\n\nfunction important(styleBlock, rules) {\n if (typeof styleBlock !== 'object' || styleBlock === null) {\n throw new PolishedError(75, typeof styleBlock);\n }\n\n var newStyleBlock = {};\n Object.keys(styleBlock).forEach(function (key) {\n if (typeof styleBlock[key] === 'object' && styleBlock[key] !== null) {\n newStyleBlock[key] = important(styleBlock[key], rules);\n } else if (!rules || rules && (rules === key || rules.indexOf(key) >= 0)) {\n newStyleBlock[key] = styleBlock[key] + \" !important\";\n } else {\n newStyleBlock[key] = styleBlock[key];\n }\n });\n return newStyleBlock;\n}\n\nvar ratioNames = {\n minorSecond: 1.067,\n majorSecond: 1.125,\n minorThird: 1.2,\n majorThird: 1.25,\n perfectFourth: 1.333,\n augFourth: 1.414,\n perfectFifth: 1.5,\n minorSixth: 1.6,\n goldenSection: 1.618,\n majorSixth: 1.667,\n minorSeventh: 1.778,\n majorSeventh: 1.875,\n octave: 2,\n majorTenth: 2.5,\n majorEleventh: 2.667,\n majorTwelfth: 3,\n doubleOctave: 4\n};\n\nfunction getRatio(ratioName) {\n return ratioNames[ratioName];\n}\n/**\n * Establish consistent measurements and spacial relationships throughout your projects by incrementing an em or rem value up or down a defined scale. We provide a list of commonly used scales as pre-defined variables.\n * @example\n * // Styles as object usage\n * const styles = {\n * // Increment two steps up the default scale\n * 'fontSize': modularScale(2)\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * // Increment two steps up the default scale\n * fontSize: ${modularScale(2)}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'fontSize': '1.77689em'\n * }\n */\n\n\nfunction modularScale(steps, base, ratio) {\n if (base === void 0) {\n base = '1em';\n }\n\n if (ratio === void 0) {\n ratio = 1.333;\n }\n\n if (typeof steps !== 'number') {\n throw new PolishedError(42);\n }\n\n if (typeof ratio === 'string' && !ratioNames[ratio]) {\n throw new PolishedError(43);\n }\n\n var _ref = typeof base === 'string' ? getValueAndUnit(base) : [base, ''],\n realBase = _ref[0],\n unit = _ref[1];\n\n var realRatio = typeof ratio === 'string' ? getRatio(ratio) : ratio;\n\n if (typeof realBase === 'string') {\n throw new PolishedError(44, base);\n }\n\n return \"\" + realBase * Math.pow(realRatio, steps) + (unit || '');\n}\n\n/**\n * Convert pixel value to rems. The default base value is 16px, but can be changed by passing a\n * second argument to the function.\n * @function\n * @param {string|number} pxval\n * @param {string|number} [base='16px']\n * @example\n * // Styles as object usage\n * const styles = {\n * 'height': rem('16px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * height: ${rem('16px')}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'height': '1rem'\n * }\n */\n\nvar rem = /*#__PURE__*/pxtoFactory('rem');\n\nvar defaultFontSize = 16;\n\nfunction convertBase(base) {\n var deconstructedValue = getValueAndUnit(base);\n\n if (deconstructedValue[1] === 'px') {\n return parseFloat(base);\n }\n\n if (deconstructedValue[1] === '%') {\n return parseFloat(base) / 100 * defaultFontSize;\n }\n\n throw new PolishedError(78, deconstructedValue[1]);\n}\n\nfunction getBaseFromDoc() {\n /* eslint-disable */\n\n /* istanbul ignore next */\n if (typeof document !== 'undefined' && document.documentElement !== null) {\n var rootFontSize = getComputedStyle(document.documentElement).fontSize;\n return rootFontSize ? convertBase(rootFontSize) : defaultFontSize;\n }\n /* eslint-enable */\n\n /* istanbul ignore next */\n\n\n return defaultFontSize;\n}\n/**\n * Convert rem values to px. By default, the base value is pulled from the font-size property on the root element (if it is set in % or px). It defaults to 16px if not found on the root. You can also override the base value by providing your own base in % or px.\n * @example\n * // Styles as object usage\n * const styles = {\n * 'height': remToPx('1.6rem')\n * 'height': remToPx('1.6rem', '10px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * height: ${remToPx('1.6rem')}\n * height: ${remToPx('1.6rem', '10px')}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'height': '25.6px',\n * 'height': '16px',\n * }\n */\n\n\nfunction remToPx(value, base) {\n var deconstructedValue = getValueAndUnit(value);\n\n if (deconstructedValue[1] !== 'rem' && deconstructedValue[1] !== '') {\n throw new PolishedError(77, deconstructedValue[1]);\n }\n\n var newBase = base ? convertBase(base) : getBaseFromDoc();\n return deconstructedValue[0] * newBase + \"px\";\n}\n\nvar functionsMap$3 = {\n back: 'cubic-bezier(0.600, -0.280, 0.735, 0.045)',\n circ: 'cubic-bezier(0.600, 0.040, 0.980, 0.335)',\n cubic: 'cubic-bezier(0.550, 0.055, 0.675, 0.190)',\n expo: 'cubic-bezier(0.950, 0.050, 0.795, 0.035)',\n quad: 'cubic-bezier(0.550, 0.085, 0.680, 0.530)',\n quart: 'cubic-bezier(0.895, 0.030, 0.685, 0.220)',\n quint: 'cubic-bezier(0.755, 0.050, 0.855, 0.060)',\n sine: 'cubic-bezier(0.470, 0.000, 0.745, 0.715)'\n};\n/**\n * String to represent common easing functions as demonstrated here: (github.com/jaukia/easie).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'transitionTimingFunction': easeIn('quad')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * transitionTimingFunction: ${easeIn('quad')};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'transitionTimingFunction': 'cubic-bezier(0.550, 0.085, 0.680, 0.530)',\n * }\n */\n\nfunction easeIn(functionName) {\n return functionsMap$3[functionName.toLowerCase().trim()];\n}\n\nvar functionsMap$2 = {\n back: 'cubic-bezier(0.680, -0.550, 0.265, 1.550)',\n circ: 'cubic-bezier(0.785, 0.135, 0.150, 0.860)',\n cubic: 'cubic-bezier(0.645, 0.045, 0.355, 1.000)',\n expo: 'cubic-bezier(1.000, 0.000, 0.000, 1.000)',\n quad: 'cubic-bezier(0.455, 0.030, 0.515, 0.955)',\n quart: 'cubic-bezier(0.770, 0.000, 0.175, 1.000)',\n quint: 'cubic-bezier(0.860, 0.000, 0.070, 1.000)',\n sine: 'cubic-bezier(0.445, 0.050, 0.550, 0.950)'\n};\n/**\n * String to represent common easing functions as demonstrated here: (github.com/jaukia/easie).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'transitionTimingFunction': easeInOut('quad')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * transitionTimingFunction: ${easeInOut('quad')};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'transitionTimingFunction': 'cubic-bezier(0.455, 0.030, 0.515, 0.955)',\n * }\n */\n\nfunction easeInOut(functionName) {\n return functionsMap$2[functionName.toLowerCase().trim()];\n}\n\nvar functionsMap$1 = {\n back: 'cubic-bezier(0.175, 0.885, 0.320, 1.275)',\n cubic: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)',\n circ: 'cubic-bezier(0.075, 0.820, 0.165, 1.000)',\n expo: 'cubic-bezier(0.190, 1.000, 0.220, 1.000)',\n quad: 'cubic-bezier(0.250, 0.460, 0.450, 0.940)',\n quart: 'cubic-bezier(0.165, 0.840, 0.440, 1.000)',\n quint: 'cubic-bezier(0.230, 1.000, 0.320, 1.000)',\n sine: 'cubic-bezier(0.390, 0.575, 0.565, 1.000)'\n};\n/**\n * String to represent common easing functions as demonstrated here: (github.com/jaukia/easie).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'transitionTimingFunction': easeOut('quad')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * transitionTimingFunction: ${easeOut('quad')};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'transitionTimingFunction': 'cubic-bezier(0.250, 0.460, 0.450, 0.940)',\n * }\n */\n\nfunction easeOut(functionName) {\n return functionsMap$1[functionName.toLowerCase().trim()];\n}\n\n/**\n * Returns a CSS calc formula for linear interpolation of a property between two values. Accepts optional minScreen (defaults to '320px') and maxScreen (defaults to '1200px').\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * fontSize: between('20px', '100px', '400px', '1000px'),\n * fontSize: between('20px', '100px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * fontSize: ${between('20px', '100px', '400px', '1000px')};\n * fontSize: ${between('20px', '100px')}\n * `\n *\n * // CSS as JS Output\n *\n * h1: {\n * 'fontSize': 'calc(-33.33333333333334px + 13.333333333333334vw)',\n * 'fontSize': 'calc(-9.090909090909093px + 9.090909090909092vw)'\n * }\n */\n\nfunction between(fromSize, toSize, minScreen, maxScreen) {\n if (minScreen === void 0) {\n minScreen = '320px';\n }\n\n if (maxScreen === void 0) {\n maxScreen = '1200px';\n }\n\n var _getValueAndUnit = getValueAndUnit(fromSize),\n unitlessFromSize = _getValueAndUnit[0],\n fromSizeUnit = _getValueAndUnit[1];\n\n var _getValueAndUnit2 = getValueAndUnit(toSize),\n unitlessToSize = _getValueAndUnit2[0],\n toSizeUnit = _getValueAndUnit2[1];\n\n var _getValueAndUnit3 = getValueAndUnit(minScreen),\n unitlessMinScreen = _getValueAndUnit3[0],\n minScreenUnit = _getValueAndUnit3[1];\n\n var _getValueAndUnit4 = getValueAndUnit(maxScreen),\n unitlessMaxScreen = _getValueAndUnit4[0],\n maxScreenUnit = _getValueAndUnit4[1];\n\n if (typeof unitlessMinScreen !== 'number' || typeof unitlessMaxScreen !== 'number' || !minScreenUnit || !maxScreenUnit || minScreenUnit !== maxScreenUnit) {\n throw new PolishedError(47);\n }\n\n if (typeof unitlessFromSize !== 'number' || typeof unitlessToSize !== 'number' || fromSizeUnit !== toSizeUnit) {\n throw new PolishedError(48);\n }\n\n if (fromSizeUnit !== minScreenUnit || toSizeUnit !== maxScreenUnit) {\n throw new PolishedError(76);\n }\n\n var slope = (unitlessFromSize - unitlessToSize) / (unitlessMinScreen - unitlessMaxScreen);\n var base = unitlessToSize - slope * unitlessMaxScreen;\n return \"calc(\" + base.toFixed(2) + (fromSizeUnit || '') + \" + \" + (100 * slope).toFixed(2) + \"vw)\";\n}\n\n/**\n * CSS to contain a float (credit to CSSMojo).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...clearFix(),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${clearFix()}\n * `\n *\n * // CSS as JS Output\n *\n * '&::after': {\n * 'clear': 'both',\n * 'content': '\"\"',\n * 'display': 'table'\n * }\n */\nfunction clearFix(parent) {\n var _ref;\n\n if (parent === void 0) {\n parent = '&';\n }\n\n var pseudoSelector = parent + \"::after\";\n return _ref = {}, _ref[pseudoSelector] = {\n clear: 'both',\n content: '\"\"',\n display: 'table'\n }, _ref;\n}\n\n/**\n * CSS to fully cover an area. Can optionally be passed an offset to act as a \"padding\".\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...cover()\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${cover()}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * 'position': 'absolute',\n * 'top': '0',\n * 'right: '0',\n * 'bottom': '0',\n * 'left: '0'\n * }\n */\nfunction cover(offset) {\n if (offset === void 0) {\n offset = 0;\n }\n\n return {\n position: 'absolute',\n top: offset,\n right: offset,\n bottom: offset,\n left: offset\n };\n}\n\n/**\n * CSS to represent truncated text with an ellipsis. You can optionally pass a max-width and number of lines before truncating.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...ellipsis('250px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${ellipsis('250px')}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * 'display': 'inline-block',\n * 'maxWidth': '250px',\n * 'overflow': 'hidden',\n * 'textOverflow': 'ellipsis',\n * 'whiteSpace': 'nowrap',\n * 'wordWrap': 'normal'\n * }\n */\nfunction ellipsis(width, lines) {\n if (lines === void 0) {\n lines = 1;\n }\n\n var styles = {\n display: 'inline-block',\n maxWidth: width || '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n wordWrap: 'normal'\n };\n return lines > 1 ? _extends({}, styles, {\n WebkitBoxOrient: 'vertical',\n WebkitLineClamp: lines,\n display: '-webkit-box',\n whiteSpace: 'normal'\n }) : styles;\n}\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/**\n * Returns a set of media queries that resizes a property (or set of properties) between a provided fromSize and toSize. Accepts optional minScreen (defaults to '320px') and maxScreen (defaults to '1200px') to constrain the interpolation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...fluidRange(\n * {\n * prop: 'padding',\n * fromSize: '20px',\n * toSize: '100px',\n * },\n * '400px',\n * '1000px',\n * )\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${fluidRange(\n * {\n * prop: 'padding',\n * fromSize: '20px',\n * toSize: '100px',\n * },\n * '400px',\n * '1000px',\n * )}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * \"@media (min-width: 1000px)\": Object {\n * \"padding\": \"100px\",\n * },\n * \"@media (min-width: 400px)\": Object {\n * \"padding\": \"calc(-33.33333333333334px + 13.333333333333334vw)\",\n * },\n * \"padding\": \"20px\",\n * }\n */\nfunction fluidRange(cssProp, minScreen, maxScreen) {\n if (minScreen === void 0) {\n minScreen = '320px';\n }\n\n if (maxScreen === void 0) {\n maxScreen = '1200px';\n }\n\n if (!Array.isArray(cssProp) && typeof cssProp !== 'object' || cssProp === null) {\n throw new PolishedError(49);\n }\n\n if (Array.isArray(cssProp)) {\n var mediaQueries = {};\n var fallbacks = {};\n\n for (var _iterator = _createForOfIteratorHelperLoose(cssProp), _step; !(_step = _iterator()).done;) {\n var _extends2, _extends3;\n\n var obj = _step.value;\n\n if (!obj.prop || !obj.fromSize || !obj.toSize) {\n throw new PolishedError(50);\n }\n\n fallbacks[obj.prop] = obj.fromSize;\n mediaQueries[\"@media (min-width: \" + minScreen + \")\"] = _extends({}, mediaQueries[\"@media (min-width: \" + minScreen + \")\"], (_extends2 = {}, _extends2[obj.prop] = between(obj.fromSize, obj.toSize, minScreen, maxScreen), _extends2));\n mediaQueries[\"@media (min-width: \" + maxScreen + \")\"] = _extends({}, mediaQueries[\"@media (min-width: \" + maxScreen + \")\"], (_extends3 = {}, _extends3[obj.prop] = obj.toSize, _extends3));\n }\n\n return _extends({}, fallbacks, mediaQueries);\n } else {\n var _ref, _ref2, _ref3;\n\n if (!cssProp.prop || !cssProp.fromSize || !cssProp.toSize) {\n throw new PolishedError(51);\n }\n\n return _ref3 = {}, _ref3[cssProp.prop] = cssProp.fromSize, _ref3[\"@media (min-width: \" + minScreen + \")\"] = (_ref = {}, _ref[cssProp.prop] = between(cssProp.fromSize, cssProp.toSize, minScreen, maxScreen), _ref), _ref3[\"@media (min-width: \" + maxScreen + \")\"] = (_ref2 = {}, _ref2[cssProp.prop] = cssProp.toSize, _ref2), _ref3;\n }\n}\n\nvar dataURIRegex = /^\\s*data:([a-z]+\\/[a-z-]+(;[a-z-]+=[a-z-]+)?)?(;charset=[a-z0-9-]+)?(;base64)?,[a-z0-9!$&',()*+,;=\\-._~:@/?%\\s]*\\s*$/i;\nvar formatHintMap = {\n woff: 'woff',\n woff2: 'woff2',\n ttf: 'truetype',\n otf: 'opentype',\n eot: 'embedded-opentype',\n svg: 'svg',\n svgz: 'svg'\n};\n\nfunction generateFormatHint(format, formatHint) {\n if (!formatHint) return '';\n return \" format(\\\"\" + formatHintMap[format] + \"\\\")\";\n}\n\nfunction isDataURI(fontFilePath) {\n return !!fontFilePath.replace(/\\s+/g, ' ').match(dataURIRegex);\n}\n\nfunction generateFileReferences(fontFilePath, fileFormats, formatHint) {\n if (isDataURI(fontFilePath)) {\n return \"url(\\\"\" + fontFilePath + \"\\\")\" + generateFormatHint(fileFormats[0], formatHint);\n }\n\n var fileFontReferences = fileFormats.map(function (format) {\n return \"url(\\\"\" + fontFilePath + \".\" + format + \"\\\")\" + generateFormatHint(format, formatHint);\n });\n return fileFontReferences.join(', ');\n}\n\nfunction generateLocalReferences(localFonts) {\n var localFontReferences = localFonts.map(function (font) {\n return \"local(\\\"\" + font + \"\\\")\";\n });\n return localFontReferences.join(', ');\n}\n\nfunction generateSources(fontFilePath, localFonts, fileFormats, formatHint) {\n var fontReferences = [];\n if (localFonts) fontReferences.push(generateLocalReferences(localFonts));\n\n if (fontFilePath) {\n fontReferences.push(generateFileReferences(fontFilePath, fileFormats, formatHint));\n }\n\n return fontReferences.join(', ');\n}\n/**\n * CSS for a @font-face declaration. Defaults to check for local copies of the font on the user's machine. You can disable this by passing `null` to localFonts.\n *\n * @example\n * // Styles as object basic usage\n * const styles = {\n * ...fontFace({\n * 'fontFamily': 'Sans-Pro',\n * 'fontFilePath': 'path/to/file'\n * })\n * }\n *\n * // styled-components basic usage\n * const GlobalStyle = createGlobalStyle`${\n * fontFace({\n * 'fontFamily': 'Sans-Pro',\n * 'fontFilePath': 'path/to/file'\n * }\n * )}`\n *\n * // CSS as JS Output\n *\n * '@font-face': {\n * 'fontFamily': 'Sans-Pro',\n * 'src': 'url(\"path/to/file.eot\"), url(\"path/to/file.woff2\"), url(\"path/to/file.woff\"), url(\"path/to/file.ttf\"), url(\"path/to/file.svg\")',\n * }\n */\n\n\nfunction fontFace(_ref) {\n var fontFamily = _ref.fontFamily,\n fontFilePath = _ref.fontFilePath,\n fontStretch = _ref.fontStretch,\n fontStyle = _ref.fontStyle,\n fontVariant = _ref.fontVariant,\n fontWeight = _ref.fontWeight,\n _ref$fileFormats = _ref.fileFormats,\n fileFormats = _ref$fileFormats === void 0 ? ['eot', 'woff2', 'woff', 'ttf', 'svg'] : _ref$fileFormats,\n _ref$formatHint = _ref.formatHint,\n formatHint = _ref$formatHint === void 0 ? false : _ref$formatHint,\n _ref$localFonts = _ref.localFonts,\n localFonts = _ref$localFonts === void 0 ? [fontFamily] : _ref$localFonts,\n unicodeRange = _ref.unicodeRange,\n fontDisplay = _ref.fontDisplay,\n fontVariationSettings = _ref.fontVariationSettings,\n fontFeatureSettings = _ref.fontFeatureSettings;\n // Error Handling\n if (!fontFamily) throw new PolishedError(55);\n\n if (!fontFilePath && !localFonts) {\n throw new PolishedError(52);\n }\n\n if (localFonts && !Array.isArray(localFonts)) {\n throw new PolishedError(53);\n }\n\n if (!Array.isArray(fileFormats)) {\n throw new PolishedError(54);\n }\n\n var fontFaceDeclaration = {\n '@font-face': {\n fontFamily: fontFamily,\n src: generateSources(fontFilePath, localFonts, fileFormats, formatHint),\n unicodeRange: unicodeRange,\n fontStretch: fontStretch,\n fontStyle: fontStyle,\n fontVariant: fontVariant,\n fontWeight: fontWeight,\n fontDisplay: fontDisplay,\n fontVariationSettings: fontVariationSettings,\n fontFeatureSettings: fontFeatureSettings\n }\n }; // Removes undefined fields for cleaner css object.\n\n return JSON.parse(JSON.stringify(fontFaceDeclaration));\n}\n\n/**\n * CSS to hide text to show a background image in a SEO-friendly way.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'backgroundImage': 'url(logo.png)',\n * ...hideText(),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * backgroundImage: url(logo.png);\n * ${hideText()};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'backgroundImage': 'url(logo.png)',\n * 'textIndent': '101%',\n * 'overflow': 'hidden',\n * 'whiteSpace': 'nowrap',\n * }\n */\nfunction hideText() {\n return {\n textIndent: '101%',\n overflow: 'hidden',\n whiteSpace: 'nowrap'\n };\n}\n\n/**\n * CSS to hide content visually but remain accessible to screen readers.\n * from [HTML5 Boilerplate](https://github.com/h5bp/html5-boilerplate/blob/9a176f57af1cfe8ec70300da4621fb9b07e5fa31/src/css/main.css#L121)\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...hideVisually(),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${hideVisually()};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'border': '0',\n * 'clip': 'rect(0 0 0 0)',\n * 'height': '1px',\n * 'margin': '-1px',\n * 'overflow': 'hidden',\n * 'padding': '0',\n * 'position': 'absolute',\n * 'whiteSpace': 'nowrap',\n * 'width': '1px',\n * }\n */\nfunction hideVisually() {\n return {\n border: '0',\n clip: 'rect(0 0 0 0)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n padding: '0',\n position: 'absolute',\n whiteSpace: 'nowrap',\n width: '1px'\n };\n}\n\n/**\n * Generates a media query to target HiDPI devices.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * [hiDPI(1.5)]: {\n * width: 200px;\n * }\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${hiDPI(1.5)} {\n * width: 200px;\n * }\n * `\n *\n * // CSS as JS Output\n *\n * '@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n * only screen and (min--moz-device-pixel-ratio: 1.5),\n * only screen and (-o-min-device-pixel-ratio: 1.5/1),\n * only screen and (min-resolution: 144dpi),\n * only screen and (min-resolution: 1.5dppx)': {\n * 'width': '200px',\n * }\n */\nfunction hiDPI(ratio) {\n if (ratio === void 0) {\n ratio = 1.3;\n }\n\n return \"\\n @media only screen and (-webkit-min-device-pixel-ratio: \" + ratio + \"),\\n only screen and (min--moz-device-pixel-ratio: \" + ratio + \"),\\n only screen and (-o-min-device-pixel-ratio: \" + ratio + \"/1),\\n only screen and (min-resolution: \" + Math.round(ratio * 96) + \"dpi),\\n only screen and (min-resolution: \" + ratio + \"dppx)\\n \";\n}\n\nfunction constructGradientValue(literals) {\n var template = '';\n\n for (var _len = arguments.length, substitutions = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n substitutions[_key - 1] = arguments[_key];\n }\n\n for (var i = 0; i < literals.length; i += 1) {\n template += literals[i];\n\n if (i === substitutions.length - 1 && substitutions[i]) {\n var definedValues = substitutions.filter(function (substitute) {\n return !!substitute;\n }); // Adds leading coma if properties preceed color-stops\n\n if (definedValues.length > 1) {\n template = template.slice(0, -1);\n template += \", \" + substitutions[i]; // No trailing space if color-stops is the only param provided\n } else if (definedValues.length === 1) {\n template += \"\" + substitutions[i];\n }\n } else if (substitutions[i]) {\n template += substitutions[i] + \" \";\n }\n }\n\n return template.trim();\n}\n\nvar _templateObject$1;\n\n/**\n * CSS for declaring a linear gradient, including a fallback background-color. The fallback is either the first color-stop or an explicitly passed fallback color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...linearGradient({\n colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n toDirection: 'to top right',\n fallback: '#FFF',\n })\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${linearGradient({\n colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n toDirection: 'to top right',\n fallback: '#FFF',\n })}\n *`\n *\n * // CSS as JS Output\n *\n * div: {\n * 'backgroundColor': '#FFF',\n * 'backgroundImage': 'linear-gradient(to top right, #00FFFF 0%, rgba(0, 0, 255, 0) 50%, #0000FF 95%)',\n * }\n */\nfunction linearGradient(_ref) {\n var colorStops = _ref.colorStops,\n fallback = _ref.fallback,\n _ref$toDirection = _ref.toDirection,\n toDirection = _ref$toDirection === void 0 ? '' : _ref$toDirection;\n\n if (!colorStops || colorStops.length < 2) {\n throw new PolishedError(56);\n }\n\n return {\n backgroundColor: fallback || colorStops[0].replace(/,\\s+/g, ',').split(' ')[0].replace(/,(?=\\S)/g, ', '),\n backgroundImage: constructGradientValue(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteralLoose([\"linear-gradient(\", \"\", \")\"])), toDirection, colorStops.join(', ').replace(/,(?=\\S)/g, ', '))\n };\n}\n\n/**\n * CSS to normalize abnormalities across browsers (normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css)\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...normalize(),\n * }\n *\n * // styled-components usage\n * const GlobalStyle = createGlobalStyle`${normalize()}`\n *\n * // CSS as JS Output\n *\n * html {\n * lineHeight: 1.15,\n * textSizeAdjust: 100%,\n * } ...\n */\nfunction normalize() {\n var _ref;\n\n return [(_ref = {\n html: {\n lineHeight: '1.15',\n textSizeAdjust: '100%'\n },\n body: {\n margin: '0'\n },\n main: {\n display: 'block'\n },\n h1: {\n fontSize: '2em',\n margin: '0.67em 0'\n },\n hr: {\n boxSizing: 'content-box',\n height: '0',\n overflow: 'visible'\n },\n pre: {\n fontFamily: 'monospace, monospace',\n fontSize: '1em'\n },\n a: {\n backgroundColor: 'transparent'\n },\n 'abbr[title]': {\n borderBottom: 'none',\n textDecoration: 'underline'\n }\n }, _ref[\"b,\\n strong\"] = {\n fontWeight: 'bolder'\n }, _ref[\"code,\\n kbd,\\n samp\"] = {\n fontFamily: 'monospace, monospace',\n fontSize: '1em'\n }, _ref.small = {\n fontSize: '80%'\n }, _ref[\"sub,\\n sup\"] = {\n fontSize: '75%',\n lineHeight: '0',\n position: 'relative',\n verticalAlign: 'baseline'\n }, _ref.sub = {\n bottom: '-0.25em'\n }, _ref.sup = {\n top: '-0.5em'\n }, _ref.img = {\n borderStyle: 'none'\n }, _ref[\"button,\\n input,\\n optgroup,\\n select,\\n textarea\"] = {\n fontFamily: 'inherit',\n fontSize: '100%',\n lineHeight: '1.15',\n margin: '0'\n }, _ref[\"button,\\n input\"] = {\n overflow: 'visible'\n }, _ref[\"button,\\n select\"] = {\n textTransform: 'none'\n }, _ref[\"button,\\n html [type=\\\"button\\\"],\\n [type=\\\"reset\\\"],\\n [type=\\\"submit\\\"]\"] = {\n WebkitAppearance: 'button'\n }, _ref[\"button::-moz-focus-inner,\\n [type=\\\"button\\\"]::-moz-focus-inner,\\n [type=\\\"reset\\\"]::-moz-focus-inner,\\n [type=\\\"submit\\\"]::-moz-focus-inner\"] = {\n borderStyle: 'none',\n padding: '0'\n }, _ref[\"button:-moz-focusring,\\n [type=\\\"button\\\"]:-moz-focusring,\\n [type=\\\"reset\\\"]:-moz-focusring,\\n [type=\\\"submit\\\"]:-moz-focusring\"] = {\n outline: '1px dotted ButtonText'\n }, _ref.fieldset = {\n padding: '0.35em 0.625em 0.75em'\n }, _ref.legend = {\n boxSizing: 'border-box',\n color: 'inherit',\n display: 'table',\n maxWidth: '100%',\n padding: '0',\n whiteSpace: 'normal'\n }, _ref.progress = {\n verticalAlign: 'baseline'\n }, _ref.textarea = {\n overflow: 'auto'\n }, _ref[\"[type=\\\"checkbox\\\"],\\n [type=\\\"radio\\\"]\"] = {\n boxSizing: 'border-box',\n padding: '0'\n }, _ref[\"[type=\\\"number\\\"]::-webkit-inner-spin-button,\\n [type=\\\"number\\\"]::-webkit-outer-spin-button\"] = {\n height: 'auto'\n }, _ref['[type=\"search\"]'] = {\n WebkitAppearance: 'textfield',\n outlineOffset: '-2px'\n }, _ref['[type=\"search\"]::-webkit-search-decoration'] = {\n WebkitAppearance: 'none'\n }, _ref['::-webkit-file-upload-button'] = {\n WebkitAppearance: 'button',\n font: 'inherit'\n }, _ref.details = {\n display: 'block'\n }, _ref.summary = {\n display: 'list-item'\n }, _ref.template = {\n display: 'none'\n }, _ref['[hidden]'] = {\n display: 'none'\n }, _ref), {\n 'abbr[title]': {\n textDecoration: 'underline dotted'\n }\n }];\n}\n\nvar _templateObject;\n\n/**\n * CSS for declaring a radial gradient, including a fallback background-color. The fallback is either the first color-stop or an explicitly passed fallback color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...radialGradient({\n * colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n * extent: 'farthest-corner at 45px 45px',\n * position: 'center',\n * shape: 'ellipse',\n * })\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${radialGradient({\n * colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n * extent: 'farthest-corner at 45px 45px',\n * position: 'center',\n * shape: 'ellipse',\n * })}\n *`\n *\n * // CSS as JS Output\n *\n * div: {\n * 'backgroundColor': '#00FFFF',\n * 'backgroundImage': 'radial-gradient(center ellipse farthest-corner at 45px 45px, #00FFFF 0%, rgba(0, 0, 255, 0) 50%, #0000FF 95%)',\n * }\n */\nfunction radialGradient(_ref) {\n var colorStops = _ref.colorStops,\n _ref$extent = _ref.extent,\n extent = _ref$extent === void 0 ? '' : _ref$extent,\n fallback = _ref.fallback,\n _ref$position = _ref.position,\n position = _ref$position === void 0 ? '' : _ref$position,\n _ref$shape = _ref.shape,\n shape = _ref$shape === void 0 ? '' : _ref$shape;\n\n if (!colorStops || colorStops.length < 2) {\n throw new PolishedError(57);\n }\n\n return {\n backgroundColor: fallback || colorStops[0].split(' ')[0],\n backgroundImage: constructGradientValue(_templateObject || (_templateObject = _taggedTemplateLiteralLoose([\"radial-gradient(\", \"\", \"\", \"\", \")\"])), position, shape, extent, colorStops.join(', '))\n };\n}\n\n/**\n * A helper to generate a retina background image and non-retina\n * background image. The retina background image will output to a HiDPI media query. The mixin uses\n * a _2x.png filename suffix by default.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...retinaImage('my-img')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${retinaImage('my-img')}\n * `\n *\n * // CSS as JS Output\n * div {\n * backgroundImage: 'url(my-img.png)',\n * '@media only screen and (-webkit-min-device-pixel-ratio: 1.3),\n * only screen and (min--moz-device-pixel-ratio: 1.3),\n * only screen and (-o-min-device-pixel-ratio: 1.3/1),\n * only screen and (min-resolution: 144dpi),\n * only screen and (min-resolution: 1.5dppx)': {\n * backgroundImage: 'url(my-img_2x.png)',\n * }\n * }\n */\nfunction retinaImage(filename, backgroundSize, extension, retinaFilename, retinaSuffix) {\n var _ref;\n\n if (extension === void 0) {\n extension = 'png';\n }\n\n if (retinaSuffix === void 0) {\n retinaSuffix = '_2x';\n }\n\n if (!filename) {\n throw new PolishedError(58);\n } // Replace the dot at the beginning of the passed extension if one exists\n\n\n var ext = extension.replace(/^\\./, '');\n var rFilename = retinaFilename ? retinaFilename + \".\" + ext : \"\" + filename + retinaSuffix + \".\" + ext;\n return _ref = {\n backgroundImage: \"url(\" + filename + \".\" + ext + \")\"\n }, _ref[hiDPI()] = _extends({\n backgroundImage: \"url(\" + rFilename + \")\"\n }, backgroundSize ? {\n backgroundSize: backgroundSize\n } : {}), _ref;\n}\n\n/* eslint-disable key-spacing */\nvar functionsMap = {\n easeInBack: 'cubic-bezier(0.600, -0.280, 0.735, 0.045)',\n easeInCirc: 'cubic-bezier(0.600, 0.040, 0.980, 0.335)',\n easeInCubic: 'cubic-bezier(0.550, 0.055, 0.675, 0.190)',\n easeInExpo: 'cubic-bezier(0.950, 0.050, 0.795, 0.035)',\n easeInQuad: 'cubic-bezier(0.550, 0.085, 0.680, 0.530)',\n easeInQuart: 'cubic-bezier(0.895, 0.030, 0.685, 0.220)',\n easeInQuint: 'cubic-bezier(0.755, 0.050, 0.855, 0.060)',\n easeInSine: 'cubic-bezier(0.470, 0.000, 0.745, 0.715)',\n easeOutBack: 'cubic-bezier(0.175, 0.885, 0.320, 1.275)',\n easeOutCubic: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)',\n easeOutCirc: 'cubic-bezier(0.075, 0.820, 0.165, 1.000)',\n easeOutExpo: 'cubic-bezier(0.190, 1.000, 0.220, 1.000)',\n easeOutQuad: 'cubic-bezier(0.250, 0.460, 0.450, 0.940)',\n easeOutQuart: 'cubic-bezier(0.165, 0.840, 0.440, 1.000)',\n easeOutQuint: 'cubic-bezier(0.230, 1.000, 0.320, 1.000)',\n easeOutSine: 'cubic-bezier(0.390, 0.575, 0.565, 1.000)',\n easeInOutBack: 'cubic-bezier(0.680, -0.550, 0.265, 1.550)',\n easeInOutCirc: 'cubic-bezier(0.785, 0.135, 0.150, 0.860)',\n easeInOutCubic: 'cubic-bezier(0.645, 0.045, 0.355, 1.000)',\n easeInOutExpo: 'cubic-bezier(1.000, 0.000, 0.000, 1.000)',\n easeInOutQuad: 'cubic-bezier(0.455, 0.030, 0.515, 0.955)',\n easeInOutQuart: 'cubic-bezier(0.770, 0.000, 0.175, 1.000)',\n easeInOutQuint: 'cubic-bezier(0.860, 0.000, 0.070, 1.000)',\n easeInOutSine: 'cubic-bezier(0.445, 0.050, 0.550, 0.950)'\n};\n/* eslint-enable key-spacing */\n\nfunction getTimingFunction(functionName) {\n return functionsMap[functionName];\n}\n/**\n * String to represent common easing functions as demonstrated here: (github.com/jaukia/easie).\n *\n * @deprecated - This will be deprecated in v5 in favor of `easeIn`, `easeOut`, `easeInOut`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'transitionTimingFunction': timingFunctions('easeInQuad')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * transitionTimingFunction: ${timingFunctions('easeInQuad')};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'transitionTimingFunction': 'cubic-bezier(0.550, 0.085, 0.680, 0.530)',\n * }\n */\n\n\nfunction timingFunctions(timingFunction) {\n return getTimingFunction(timingFunction);\n}\n\nvar getBorderWidth = function getBorderWidth(pointingDirection, height, width) {\n var fullWidth = \"\" + width[0] + (width[1] || '');\n var halfWidth = \"\" + width[0] / 2 + (width[1] || '');\n var fullHeight = \"\" + height[0] + (height[1] || '');\n var halfHeight = \"\" + height[0] / 2 + (height[1] || '');\n\n switch (pointingDirection) {\n case 'top':\n return \"0 \" + halfWidth + \" \" + fullHeight + \" \" + halfWidth;\n\n case 'topLeft':\n return fullWidth + \" \" + fullHeight + \" 0 0\";\n\n case 'left':\n return halfHeight + \" \" + fullWidth + \" \" + halfHeight + \" 0\";\n\n case 'bottomLeft':\n return fullWidth + \" 0 0 \" + fullHeight;\n\n case 'bottom':\n return fullHeight + \" \" + halfWidth + \" 0 \" + halfWidth;\n\n case 'bottomRight':\n return \"0 0 \" + fullWidth + \" \" + fullHeight;\n\n case 'right':\n return halfHeight + \" 0 \" + halfHeight + \" \" + fullWidth;\n\n case 'topRight':\n default:\n return \"0 \" + fullWidth + \" \" + fullHeight + \" 0\";\n }\n};\n\nvar getBorderColor = function getBorderColor(pointingDirection, foregroundColor) {\n switch (pointingDirection) {\n case 'top':\n case 'bottomRight':\n return {\n borderBottomColor: foregroundColor\n };\n\n case 'right':\n case 'bottomLeft':\n return {\n borderLeftColor: foregroundColor\n };\n\n case 'bottom':\n case 'topLeft':\n return {\n borderTopColor: foregroundColor\n };\n\n case 'left':\n case 'topRight':\n return {\n borderRightColor: foregroundColor\n };\n\n default:\n throw new PolishedError(59);\n }\n};\n/**\n * CSS to represent triangle with any pointing direction with an optional background color.\n *\n * @example\n * // Styles as object usage\n *\n * const styles = {\n * ...triangle({ pointingDirection: 'right', width: '100px', height: '100px', foregroundColor: 'red' })\n * }\n *\n *\n * // styled-components usage\n * const div = styled.div`\n * ${triangle({ pointingDirection: 'right', width: '100px', height: '100px', foregroundColor: 'red' })}\n *\n *\n * // CSS as JS Output\n *\n * div: {\n * 'borderColor': 'transparent transparent transparent red',\n * 'borderStyle': 'solid',\n * 'borderWidth': '50px 0 50px 100px',\n * 'height': '0',\n * 'width': '0',\n * }\n */\n\n\nfunction triangle(_ref) {\n var pointingDirection = _ref.pointingDirection,\n height = _ref.height,\n width = _ref.width,\n foregroundColor = _ref.foregroundColor,\n _ref$backgroundColor = _ref.backgroundColor,\n backgroundColor = _ref$backgroundColor === void 0 ? 'transparent' : _ref$backgroundColor;\n var widthAndUnit = getValueAndUnit(width);\n var heightAndUnit = getValueAndUnit(height);\n\n if (isNaN(heightAndUnit[0]) || isNaN(widthAndUnit[0])) {\n throw new PolishedError(60);\n }\n\n return _extends({\n width: '0',\n height: '0',\n borderColor: backgroundColor\n }, getBorderColor(pointingDirection, foregroundColor), {\n borderStyle: 'solid',\n borderWidth: getBorderWidth(pointingDirection, heightAndUnit, widthAndUnit)\n });\n}\n\n/**\n * Provides an easy way to change the `wordWrap` property.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...wordWrap('break-word')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${wordWrap('break-word')}\n * `\n *\n * // CSS as JS Output\n *\n * const styles = {\n * overflowWrap: 'break-word',\n * wordWrap: 'break-word',\n * wordBreak: 'break-all',\n * }\n */\nfunction wordWrap(wrap) {\n if (wrap === void 0) {\n wrap = 'break-word';\n }\n\n var wordBreak = wrap === 'break-word' ? 'break-all' : wrap;\n return {\n overflowWrap: wrap,\n wordWrap: wrap,\n wordBreak: wordBreak\n };\n}\n\nfunction colorToInt(color) {\n return Math.round(color * 255);\n}\n\nfunction convertToInt(red, green, blue) {\n return colorToInt(red) + \",\" + colorToInt(green) + \",\" + colorToInt(blue);\n}\n\nfunction hslToRgb(hue, saturation, lightness, convert) {\n if (convert === void 0) {\n convert = convertToInt;\n }\n\n if (saturation === 0) {\n // achromatic\n return convert(lightness, lightness, lightness);\n } // formulae from https://en.wikipedia.org/wiki/HSL_and_HSV\n\n\n var huePrime = (hue % 360 + 360) % 360 / 60;\n var chroma = (1 - Math.abs(2 * lightness - 1)) * saturation;\n var secondComponent = chroma * (1 - Math.abs(huePrime % 2 - 1));\n var red = 0;\n var green = 0;\n var blue = 0;\n\n if (huePrime >= 0 && huePrime < 1) {\n red = chroma;\n green = secondComponent;\n } else if (huePrime >= 1 && huePrime < 2) {\n red = secondComponent;\n green = chroma;\n } else if (huePrime >= 2 && huePrime < 3) {\n green = chroma;\n blue = secondComponent;\n } else if (huePrime >= 3 && huePrime < 4) {\n green = secondComponent;\n blue = chroma;\n } else if (huePrime >= 4 && huePrime < 5) {\n red = secondComponent;\n blue = chroma;\n } else if (huePrime >= 5 && huePrime < 6) {\n red = chroma;\n blue = secondComponent;\n }\n\n var lightnessModification = lightness - chroma / 2;\n var finalRed = red + lightnessModification;\n var finalGreen = green + lightnessModification;\n var finalBlue = blue + lightnessModification;\n return convert(finalRed, finalGreen, finalBlue);\n}\n\nvar namedColorMap = {\n aliceblue: 'f0f8ff',\n antiquewhite: 'faebd7',\n aqua: '00ffff',\n aquamarine: '7fffd4',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '000',\n blanchedalmond: 'ffebcd',\n blue: '0000ff',\n blueviolet: '8a2be2',\n brown: 'a52a2a',\n burlywood: 'deb887',\n cadetblue: '5f9ea0',\n chartreuse: '7fff00',\n chocolate: 'd2691e',\n coral: 'ff7f50',\n cornflowerblue: '6495ed',\n cornsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgoldenrod: 'b8860b',\n darkgray: 'a9a9a9',\n darkgreen: '006400',\n darkgrey: 'a9a9a9',\n darkkhaki: 'bdb76b',\n darkmagenta: '8b008b',\n darkolivegreen: '556b2f',\n darkorange: 'ff8c00',\n darkorchid: '9932cc',\n darkred: '8b0000',\n darksalmon: 'e9967a',\n darkseagreen: '8fbc8f',\n darkslateblue: '483d8b',\n darkslategray: '2f4f4f',\n darkslategrey: '2f4f4f',\n darkturquoise: '00ced1',\n darkviolet: '9400d3',\n deeppink: 'ff1493',\n deepskyblue: '00bfff',\n dimgray: '696969',\n dimgrey: '696969',\n dodgerblue: '1e90ff',\n firebrick: 'b22222',\n floralwhite: 'fffaf0',\n forestgreen: '228b22',\n fuchsia: 'ff00ff',\n gainsboro: 'dcdcdc',\n ghostwhite: 'f8f8ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n grey: '808080',\n honeydew: 'f0fff0',\n hotpink: 'ff69b4',\n indianred: 'cd5c5c',\n indigo: '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lavender: 'e6e6fa',\n lavenderblush: 'fff0f5',\n lawngreen: '7cfc00',\n lemonchiffon: 'fffacd',\n lightblue: 'add8e6',\n lightcoral: 'f08080',\n lightcyan: 'e0ffff',\n lightgoldenrodyellow: 'fafad2',\n lightgray: 'd3d3d3',\n lightgreen: '90ee90',\n lightgrey: 'd3d3d3',\n lightpink: 'ffb6c1',\n lightsalmon: 'ffa07a',\n lightseagreen: '20b2aa',\n lightskyblue: '87cefa',\n lightslategray: '789',\n lightslategrey: '789',\n lightsteelblue: 'b0c4de',\n lightyellow: 'ffffe0',\n lime: '0f0',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'f0f',\n maroon: '800000',\n mediumaquamarine: '66cdaa',\n mediumblue: '0000cd',\n mediumorchid: 'ba55d3',\n mediumpurple: '9370db',\n mediumseagreen: '3cb371',\n mediumslateblue: '7b68ee',\n mediumspringgreen: '00fa9a',\n mediumturquoise: '48d1cc',\n mediumvioletred: 'c71585',\n midnightblue: '191970',\n mintcream: 'f5fffa',\n mistyrose: 'ffe4e1',\n moccasin: 'ffe4b5',\n navajowhite: 'ffdead',\n navy: '000080',\n oldlace: 'fdf5e6',\n olive: '808000',\n olivedrab: '6b8e23',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n palegoldenrod: 'eee8aa',\n palegreen: '98fb98',\n paleturquoise: 'afeeee',\n palevioletred: 'db7093',\n papayawhip: 'ffefd5',\n peachpuff: 'ffdab9',\n peru: 'cd853f',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n powderblue: 'b0e0e6',\n purple: '800080',\n rebeccapurple: '639',\n red: 'f00',\n rosybrown: 'bc8f8f',\n royalblue: '4169e1',\n saddlebrown: '8b4513',\n salmon: 'fa8072',\n sandybrown: 'f4a460',\n seagreen: '2e8b57',\n seashell: 'fff5ee',\n sienna: 'a0522d',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n slategrey: '708090',\n snow: 'fffafa',\n springgreen: '00ff7f',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n thistle: 'd8bfd8',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n wheat: 'f5deb3',\n white: 'fff',\n whitesmoke: 'f5f5f5',\n yellow: 'ff0',\n yellowgreen: '9acd32'\n};\n/**\n * Checks if a string is a CSS named color and returns its equivalent hex value, otherwise returns the original color.\n * @private\n */\n\nfunction nameToHex(color) {\n if (typeof color !== 'string') return color;\n var normalizedColorName = color.toLowerCase();\n return namedColorMap[normalizedColorName] ? \"#\" + namedColorMap[normalizedColorName] : color;\n}\n\nvar hexRegex = /^#[a-fA-F0-9]{6}$/;\nvar hexRgbaRegex = /^#[a-fA-F0-9]{8}$/;\nvar reducedHexRegex = /^#[a-fA-F0-9]{3}$/;\nvar reducedRgbaHexRegex = /^#[a-fA-F0-9]{4}$/;\nvar rgbRegex = /^rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/i;\nvar rgbaRegex = /^rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*([-+]?[0-9]*[.]?[0-9]+)\\s*\\)$/i;\nvar hslRegex = /^hsl\\(\\s*(\\d{0,3}[.]?[0-9]+)\\s*,\\s*(\\d{1,3}[.]?[0-9]?)%\\s*,\\s*(\\d{1,3}[.]?[0-9]?)%\\s*\\)$/i;\nvar hslaRegex = /^hsla\\(\\s*(\\d{0,3}[.]?[0-9]+)\\s*,\\s*(\\d{1,3}[.]?[0-9]?)%\\s*,\\s*(\\d{1,3}[.]?[0-9]?)%\\s*,\\s*([-+]?[0-9]*[.]?[0-9]+)\\s*\\)$/i;\n/**\n * Returns an RgbColor or RgbaColor object. This utility function is only useful\n * if want to extract a color component. With the color util `toColorString` you\n * can convert a RgbColor or RgbaColor object back to a string.\n *\n * @example\n * // Assigns `{ red: 255, green: 0, blue: 0 }` to color1\n * const color1 = parseToRgb('rgb(255, 0, 0)');\n * // Assigns `{ red: 92, green: 102, blue: 112, alpha: 0.75 }` to color2\n * const color2 = parseToRgb('hsla(210, 10%, 40%, 0.75)');\n */\n\nfunction parseToRgb(color) {\n if (typeof color !== 'string') {\n throw new PolishedError(3);\n }\n\n var normalizedColor = nameToHex(color);\n\n if (normalizedColor.match(hexRegex)) {\n return {\n red: parseInt(\"\" + normalizedColor[1] + normalizedColor[2], 16),\n green: parseInt(\"\" + normalizedColor[3] + normalizedColor[4], 16),\n blue: parseInt(\"\" + normalizedColor[5] + normalizedColor[6], 16)\n };\n }\n\n if (normalizedColor.match(hexRgbaRegex)) {\n var alpha = parseFloat((parseInt(\"\" + normalizedColor[7] + normalizedColor[8], 16) / 255).toFixed(2));\n return {\n red: parseInt(\"\" + normalizedColor[1] + normalizedColor[2], 16),\n green: parseInt(\"\" + normalizedColor[3] + normalizedColor[4], 16),\n blue: parseInt(\"\" + normalizedColor[5] + normalizedColor[6], 16),\n alpha: alpha\n };\n }\n\n if (normalizedColor.match(reducedHexRegex)) {\n return {\n red: parseInt(\"\" + normalizedColor[1] + normalizedColor[1], 16),\n green: parseInt(\"\" + normalizedColor[2] + normalizedColor[2], 16),\n blue: parseInt(\"\" + normalizedColor[3] + normalizedColor[3], 16)\n };\n }\n\n if (normalizedColor.match(reducedRgbaHexRegex)) {\n var _alpha = parseFloat((parseInt(\"\" + normalizedColor[4] + normalizedColor[4], 16) / 255).toFixed(2));\n\n return {\n red: parseInt(\"\" + normalizedColor[1] + normalizedColor[1], 16),\n green: parseInt(\"\" + normalizedColor[2] + normalizedColor[2], 16),\n blue: parseInt(\"\" + normalizedColor[3] + normalizedColor[3], 16),\n alpha: _alpha\n };\n }\n\n var rgbMatched = rgbRegex.exec(normalizedColor);\n\n if (rgbMatched) {\n return {\n red: parseInt(\"\" + rgbMatched[1], 10),\n green: parseInt(\"\" + rgbMatched[2], 10),\n blue: parseInt(\"\" + rgbMatched[3], 10)\n };\n }\n\n var rgbaMatched = rgbaRegex.exec(normalizedColor.substring(0, 50));\n\n if (rgbaMatched) {\n return {\n red: parseInt(\"\" + rgbaMatched[1], 10),\n green: parseInt(\"\" + rgbaMatched[2], 10),\n blue: parseInt(\"\" + rgbaMatched[3], 10),\n alpha: parseFloat(\"\" + rgbaMatched[4])\n };\n }\n\n var hslMatched = hslRegex.exec(normalizedColor);\n\n if (hslMatched) {\n var hue = parseInt(\"\" + hslMatched[1], 10);\n var saturation = parseInt(\"\" + hslMatched[2], 10) / 100;\n var lightness = parseInt(\"\" + hslMatched[3], 10) / 100;\n var rgbColorString = \"rgb(\" + hslToRgb(hue, saturation, lightness) + \")\";\n var hslRgbMatched = rgbRegex.exec(rgbColorString);\n\n if (!hslRgbMatched) {\n throw new PolishedError(4, normalizedColor, rgbColorString);\n }\n\n return {\n red: parseInt(\"\" + hslRgbMatched[1], 10),\n green: parseInt(\"\" + hslRgbMatched[2], 10),\n blue: parseInt(\"\" + hslRgbMatched[3], 10)\n };\n }\n\n var hslaMatched = hslaRegex.exec(normalizedColor.substring(0, 50));\n\n if (hslaMatched) {\n var _hue = parseInt(\"\" + hslaMatched[1], 10);\n\n var _saturation = parseInt(\"\" + hslaMatched[2], 10) / 100;\n\n var _lightness = parseInt(\"\" + hslaMatched[3], 10) / 100;\n\n var _rgbColorString = \"rgb(\" + hslToRgb(_hue, _saturation, _lightness) + \")\";\n\n var _hslRgbMatched = rgbRegex.exec(_rgbColorString);\n\n if (!_hslRgbMatched) {\n throw new PolishedError(4, normalizedColor, _rgbColorString);\n }\n\n return {\n red: parseInt(\"\" + _hslRgbMatched[1], 10),\n green: parseInt(\"\" + _hslRgbMatched[2], 10),\n blue: parseInt(\"\" + _hslRgbMatched[3], 10),\n alpha: parseFloat(\"\" + hslaMatched[4])\n };\n }\n\n throw new PolishedError(5);\n}\n\nfunction rgbToHsl(color) {\n // make sure rgb are contained in a set of [0, 255]\n var red = color.red / 255;\n var green = color.green / 255;\n var blue = color.blue / 255;\n var max = Math.max(red, green, blue);\n var min = Math.min(red, green, blue);\n var lightness = (max + min) / 2;\n\n if (max === min) {\n // achromatic\n if (color.alpha !== undefined) {\n return {\n hue: 0,\n saturation: 0,\n lightness: lightness,\n alpha: color.alpha\n };\n } else {\n return {\n hue: 0,\n saturation: 0,\n lightness: lightness\n };\n }\n }\n\n var hue;\n var delta = max - min;\n var saturation = lightness > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n\n switch (max) {\n case red:\n hue = (green - blue) / delta + (green < blue ? 6 : 0);\n break;\n\n case green:\n hue = (blue - red) / delta + 2;\n break;\n\n default:\n // blue case\n hue = (red - green) / delta + 4;\n break;\n }\n\n hue *= 60;\n\n if (color.alpha !== undefined) {\n return {\n hue: hue,\n saturation: saturation,\n lightness: lightness,\n alpha: color.alpha\n };\n }\n\n return {\n hue: hue,\n saturation: saturation,\n lightness: lightness\n };\n}\n\n/**\n * Returns an HslColor or HslaColor object. This utility function is only useful\n * if want to extract a color component. With the color util `toColorString` you\n * can convert a HslColor or HslaColor object back to a string.\n *\n * @example\n * // Assigns `{ hue: 0, saturation: 1, lightness: 0.5 }` to color1\n * const color1 = parseToHsl('rgb(255, 0, 0)');\n * // Assigns `{ hue: 128, saturation: 1, lightness: 0.5, alpha: 0.75 }` to color2\n * const color2 = parseToHsl('hsla(128, 100%, 50%, 0.75)');\n */\nfunction parseToHsl(color) {\n // Note: At a later stage we can optimize this function as right now a hsl\n // color would be parsed converted to rgb values and converted back to hsl.\n return rgbToHsl(parseToRgb(color));\n}\n\n/**\n * Reduces hex values if possible e.g. #ff8866 to #f86\n * @private\n */\nvar reduceHexValue = function reduceHexValue(value) {\n if (value.length === 7 && value[1] === value[2] && value[3] === value[4] && value[5] === value[6]) {\n return \"#\" + value[1] + value[3] + value[5];\n }\n\n return value;\n};\n\nfunction numberToHex(value) {\n var hex = value.toString(16);\n return hex.length === 1 ? \"0\" + hex : hex;\n}\n\nfunction colorToHex(color) {\n return numberToHex(Math.round(color * 255));\n}\n\nfunction convertToHex(red, green, blue) {\n return reduceHexValue(\"#\" + colorToHex(red) + colorToHex(green) + colorToHex(blue));\n}\n\nfunction hslToHex(hue, saturation, lightness) {\n return hslToRgb(hue, saturation, lightness, convertToHex);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible hex notation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: hsl(359, 0.75, 0.4),\n * background: hsl({ hue: 360, saturation: 0.75, lightness: 0.4 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${hsl(359, 0.75, 0.4)};\n * background: ${hsl({ hue: 360, saturation: 0.75, lightness: 0.4 })};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#b3191c\";\n * background: \"#b3191c\";\n * }\n */\nfunction hsl(value, saturation, lightness) {\n if (typeof value === 'number' && typeof saturation === 'number' && typeof lightness === 'number') {\n return hslToHex(value, saturation, lightness);\n } else if (typeof value === 'object' && saturation === undefined && lightness === undefined) {\n return hslToHex(value.hue, value.saturation, value.lightness);\n }\n\n throw new PolishedError(1);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible rgba or hex notation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: hsla(359, 0.75, 0.4, 0.7),\n * background: hsla({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0,7 }),\n * background: hsla(359, 0.75, 0.4, 1),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${hsla(359, 0.75, 0.4, 0.7)};\n * background: ${hsla({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0,7 })};\n * background: ${hsla(359, 0.75, 0.4, 1)};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"rgba(179,25,28,0.7)\";\n * background: \"rgba(179,25,28,0.7)\";\n * background: \"#b3191c\";\n * }\n */\nfunction hsla(value, saturation, lightness, alpha) {\n if (typeof value === 'number' && typeof saturation === 'number' && typeof lightness === 'number' && typeof alpha === 'number') {\n return alpha >= 1 ? hslToHex(value, saturation, lightness) : \"rgba(\" + hslToRgb(value, saturation, lightness) + \",\" + alpha + \")\";\n } else if (typeof value === 'object' && saturation === undefined && lightness === undefined && alpha === undefined) {\n return value.alpha >= 1 ? hslToHex(value.hue, value.saturation, value.lightness) : \"rgba(\" + hslToRgb(value.hue, value.saturation, value.lightness) + \",\" + value.alpha + \")\";\n }\n\n throw new PolishedError(2);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible hex notation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: rgb(255, 205, 100),\n * background: rgb({ red: 255, green: 205, blue: 100 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${rgb(255, 205, 100)};\n * background: ${rgb({ red: 255, green: 205, blue: 100 })};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#ffcd64\";\n * background: \"#ffcd64\";\n * }\n */\nfunction rgb(value, green, blue) {\n if (typeof value === 'number' && typeof green === 'number' && typeof blue === 'number') {\n return reduceHexValue(\"#\" + numberToHex(value) + numberToHex(green) + numberToHex(blue));\n } else if (typeof value === 'object' && green === undefined && blue === undefined) {\n return reduceHexValue(\"#\" + numberToHex(value.red) + numberToHex(value.green) + numberToHex(value.blue));\n }\n\n throw new PolishedError(6);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible rgba or hex notation.\n *\n * Can also be used to fade a color by passing a hex value or named CSS color along with an alpha value.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: rgba(255, 205, 100, 0.7),\n * background: rgba({ red: 255, green: 205, blue: 100, alpha: 0.7 }),\n * background: rgba(255, 205, 100, 1),\n * background: rgba('#ffffff', 0.4),\n * background: rgba('black', 0.7),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${rgba(255, 205, 100, 0.7)};\n * background: ${rgba({ red: 255, green: 205, blue: 100, alpha: 0.7 })};\n * background: ${rgba(255, 205, 100, 1)};\n * background: ${rgba('#ffffff', 0.4)};\n * background: ${rgba('black', 0.7)};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"rgba(255,205,100,0.7)\";\n * background: \"rgba(255,205,100,0.7)\";\n * background: \"#ffcd64\";\n * background: \"rgba(255,255,255,0.4)\";\n * background: \"rgba(0,0,0,0.7)\";\n * }\n */\nfunction rgba(firstValue, secondValue, thirdValue, fourthValue) {\n if (typeof firstValue === 'string' && typeof secondValue === 'number') {\n var rgbValue = parseToRgb(firstValue);\n return \"rgba(\" + rgbValue.red + \",\" + rgbValue.green + \",\" + rgbValue.blue + \",\" + secondValue + \")\";\n } else if (typeof firstValue === 'number' && typeof secondValue === 'number' && typeof thirdValue === 'number' && typeof fourthValue === 'number') {\n return fourthValue >= 1 ? rgb(firstValue, secondValue, thirdValue) : \"rgba(\" + firstValue + \",\" + secondValue + \",\" + thirdValue + \",\" + fourthValue + \")\";\n } else if (typeof firstValue === 'object' && secondValue === undefined && thirdValue === undefined && fourthValue === undefined) {\n return firstValue.alpha >= 1 ? rgb(firstValue.red, firstValue.green, firstValue.blue) : \"rgba(\" + firstValue.red + \",\" + firstValue.green + \",\" + firstValue.blue + \",\" + firstValue.alpha + \")\";\n }\n\n throw new PolishedError(7);\n}\n\nvar isRgb = function isRgb(color) {\n return typeof color.red === 'number' && typeof color.green === 'number' && typeof color.blue === 'number' && (typeof color.alpha !== 'number' || typeof color.alpha === 'undefined');\n};\n\nvar isRgba = function isRgba(color) {\n return typeof color.red === 'number' && typeof color.green === 'number' && typeof color.blue === 'number' && typeof color.alpha === 'number';\n};\n\nvar isHsl = function isHsl(color) {\n return typeof color.hue === 'number' && typeof color.saturation === 'number' && typeof color.lightness === 'number' && (typeof color.alpha !== 'number' || typeof color.alpha === 'undefined');\n};\n\nvar isHsla = function isHsla(color) {\n return typeof color.hue === 'number' && typeof color.saturation === 'number' && typeof color.lightness === 'number' && typeof color.alpha === 'number';\n};\n/**\n * Converts a RgbColor, RgbaColor, HslColor or HslaColor object to a color string.\n * This util is useful in case you only know on runtime which color object is\n * used. Otherwise we recommend to rely on `rgb`, `rgba`, `hsl` or `hsla`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: toColorString({ red: 255, green: 205, blue: 100 }),\n * background: toColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 }),\n * background: toColorString({ hue: 240, saturation: 1, lightness: 0.5 }),\n * background: toColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${toColorString({ red: 255, green: 205, blue: 100 })};\n * background: ${toColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 })};\n * background: ${toColorString({ hue: 240, saturation: 1, lightness: 0.5 })};\n * background: ${toColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 })};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#ffcd64\";\n * background: \"rgba(255,205,100,0.72)\";\n * background: \"#00f\";\n * background: \"rgba(179,25,25,0.72)\";\n * }\n */\n\n\nfunction toColorString(color) {\n if (typeof color !== 'object') throw new PolishedError(8);\n if (isRgba(color)) return rgba(color);\n if (isRgb(color)) return rgb(color);\n if (isHsla(color)) return hsla(color);\n if (isHsl(color)) return hsl(color);\n throw new PolishedError(8);\n}\n\n// Type definitions taken from https://github.com/gcanti/flow-static-land/blob/master/src/Fun.js\n// eslint-disable-next-line no-unused-vars\n// eslint-disable-next-line no-unused-vars\n// eslint-disable-next-line no-redeclare\nfunction curried(f, length, acc) {\n return function fn() {\n // eslint-disable-next-line prefer-rest-params\n var combined = acc.concat(Array.prototype.slice.call(arguments));\n return combined.length >= length ? f.apply(this, combined) : curried(f, length, combined);\n };\n} // eslint-disable-next-line no-redeclare\n\n\nfunction curry(f) {\n // eslint-disable-line no-redeclare\n return curried(f, f.length, []);\n}\n\n/**\n * Changes the hue of the color. Hue is a number between 0 to 360. The first\n * argument for adjustHue is the amount of degrees the color is rotated around\n * the color wheel, always producing a positive hue value.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: adjustHue(180, '#448'),\n * background: adjustHue('180', 'rgba(101,100,205,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${adjustHue(180, '#448')};\n * background: ${adjustHue('180', 'rgba(101,100,205,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#888844\";\n * background: \"rgba(136,136,68,0.7)\";\n * }\n */\n\nfunction adjustHue(degree, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n hue: hslColor.hue + parseFloat(degree)\n }));\n} // prettier-ignore\n\n\nvar curriedAdjustHue = /*#__PURE__*/curry\n/* :: */\n(adjustHue);\n\n/**\n * Returns the complement of the provided color. This is identical to adjustHue(180, ).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: complement('#448'),\n * background: complement('rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${complement('#448')};\n * background: ${complement('rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#884\";\n * background: \"rgba(153,153,153,0.7)\";\n * }\n */\n\nfunction complement(color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n hue: (hslColor.hue + 180) % 360\n }));\n}\n\nfunction guard(lowerBoundary, upperBoundary, value) {\n return Math.max(lowerBoundary, Math.min(upperBoundary, value));\n}\n\n/**\n * Returns a string value for the darkened color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: darken(0.2, '#FFCD64'),\n * background: darken('0.2', 'rgba(255,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${darken(0.2, '#FFCD64')};\n * background: ${darken('0.2', 'rgba(255,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#ffbd31\";\n * background: \"rgba(255,189,49,0.7)\";\n * }\n */\n\nfunction darken(amount, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n lightness: guard(0, 1, hslColor.lightness - parseFloat(amount))\n }));\n} // prettier-ignore\n\n\nvar curriedDarken = /*#__PURE__*/curry\n/* :: */\n(darken);\n\n/**\n * Decreases the intensity of a color. Its range is between 0 to 1. The first\n * argument of the desaturate function is the amount by how much the color\n * intensity should be decreased.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: desaturate(0.2, '#CCCD64'),\n * background: desaturate('0.2', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${desaturate(0.2, '#CCCD64')};\n * background: ${desaturate('0.2', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#b8b979\";\n * background: \"rgba(184,185,121,0.7)\";\n * }\n */\n\nfunction desaturate(amount, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n saturation: guard(0, 1, hslColor.saturation - parseFloat(amount))\n }));\n} // prettier-ignore\n\n\nvar curriedDesaturate = /*#__PURE__*/curry\n/* :: */\n(desaturate);\n\n/**\n * Returns a number (float) representing the luminance of a color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: getLuminance('#CCCD64') >= getLuminance('#0000ff') ? '#CCCD64' : '#0000ff',\n * background: getLuminance('rgba(58, 133, 255, 1)') >= getLuminance('rgba(255, 57, 149, 1)') ?\n * 'rgba(58, 133, 255, 1)' :\n * 'rgba(255, 57, 149, 1)',\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${getLuminance('#CCCD64') >= getLuminance('#0000ff') ? '#CCCD64' : '#0000ff'};\n * background: ${getLuminance('rgba(58, 133, 255, 1)') >= getLuminance('rgba(255, 57, 149, 1)') ?\n * 'rgba(58, 133, 255, 1)' :\n * 'rgba(255, 57, 149, 1)'};\n *\n * // CSS in JS Output\n *\n * div {\n * background: \"#CCCD64\";\n * background: \"rgba(58, 133, 255, 1)\";\n * }\n */\n\nfunction getLuminance(color) {\n if (color === 'transparent') return 0;\n var rgbColor = parseToRgb(color);\n\n var _Object$keys$map = Object.keys(rgbColor).map(function (key) {\n var channel = rgbColor[key] / 255;\n return channel <= 0.03928 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4);\n }),\n r = _Object$keys$map[0],\n g = _Object$keys$map[1],\n b = _Object$keys$map[2];\n\n return parseFloat((0.2126 * r + 0.7152 * g + 0.0722 * b).toFixed(3));\n}\n\n/**\n * Returns the contrast ratio between two colors based on\n * [W3's recommended equation for calculating contrast](http://www.w3.org/TR/WCAG20/#contrast-ratiodef).\n *\n * @example\n * const contrastRatio = getContrast('#444', '#fff');\n */\n\nfunction getContrast(color1, color2) {\n var luminance1 = getLuminance(color1);\n var luminance2 = getLuminance(color2);\n return parseFloat((luminance1 > luminance2 ? (luminance1 + 0.05) / (luminance2 + 0.05) : (luminance2 + 0.05) / (luminance1 + 0.05)).toFixed(2));\n}\n\n/**\n * Converts the color to a grayscale, by reducing its saturation to 0.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: grayscale('#CCCD64'),\n * background: grayscale('rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${grayscale('#CCCD64')};\n * background: ${grayscale('rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#999\";\n * background: \"rgba(153,153,153,0.7)\";\n * }\n */\n\nfunction grayscale(color) {\n if (color === 'transparent') return color;\n return toColorString(_extends({}, parseToHsl(color), {\n saturation: 0\n }));\n}\n\n/**\n * Converts a HslColor or HslaColor object to a color string.\n * This util is useful in case you only know on runtime which color object is\n * used. Otherwise we recommend to rely on `hsl` or `hsla`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: hslToColorString({ hue: 240, saturation: 1, lightness: 0.5 }),\n * background: hslToColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${hslToColorString({ hue: 240, saturation: 1, lightness: 0.5 })};\n * background: ${hslToColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 })};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#00f\";\n * background: \"rgba(179,25,25,0.72)\";\n * }\n */\nfunction hslToColorString(color) {\n if (typeof color === 'object' && typeof color.hue === 'number' && typeof color.saturation === 'number' && typeof color.lightness === 'number') {\n if (color.alpha && typeof color.alpha === 'number') {\n return hsla({\n hue: color.hue,\n saturation: color.saturation,\n lightness: color.lightness,\n alpha: color.alpha\n });\n }\n\n return hsl({\n hue: color.hue,\n saturation: color.saturation,\n lightness: color.lightness\n });\n }\n\n throw new PolishedError(45);\n}\n\n/**\n * Inverts the red, green and blue values of a color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: invert('#CCCD64'),\n * background: invert('rgba(101,100,205,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${invert('#CCCD64')};\n * background: ${invert('rgba(101,100,205,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#33329b\";\n * background: \"rgba(154,155,50,0.7)\";\n * }\n */\n\nfunction invert(color) {\n if (color === 'transparent') return color; // parse color string to rgb\n\n var value = parseToRgb(color);\n return toColorString(_extends({}, value, {\n red: 255 - value.red,\n green: 255 - value.green,\n blue: 255 - value.blue\n }));\n}\n\n/**\n * Returns a string value for the lightened color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: lighten(0.2, '#CCCD64'),\n * background: lighten('0.2', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${lighten(0.2, '#FFCD64')};\n * background: ${lighten('0.2', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#e5e6b1\";\n * background: \"rgba(229,230,177,0.7)\";\n * }\n */\n\nfunction lighten(amount, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n lightness: guard(0, 1, hslColor.lightness + parseFloat(amount))\n }));\n} // prettier-ignore\n\n\nvar curriedLighten = /*#__PURE__*/curry\n/* :: */\n(lighten);\n\n/**\n * Determines which contrast guidelines have been met for two colors.\n * Based on the [contrast calculations recommended by W3](https://www.w3.org/WAI/WCAG21/Understanding/contrast-enhanced.html).\n *\n * @example\n * const scores = meetsContrastGuidelines('#444', '#fff');\n */\nfunction meetsContrastGuidelines(color1, color2) {\n var contrastRatio = getContrast(color1, color2);\n return {\n AA: contrastRatio >= 4.5,\n AALarge: contrastRatio >= 3,\n AAA: contrastRatio >= 7,\n AAALarge: contrastRatio >= 4.5\n };\n}\n\n/**\n * Mixes the two provided colors together by calculating the average of each of the RGB components weighted to the first color by the provided weight.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: mix(0.5, '#f00', '#00f')\n * background: mix(0.25, '#f00', '#00f')\n * background: mix('0.5', 'rgba(255, 0, 0, 0.5)', '#00f')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${mix(0.5, '#f00', '#00f')};\n * background: ${mix(0.25, '#f00', '#00f')};\n * background: ${mix('0.5', 'rgba(255, 0, 0, 0.5)', '#00f')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#7f007f\";\n * background: \"#3f00bf\";\n * background: \"rgba(63, 0, 191, 0.75)\";\n * }\n */\n\nfunction mix(weight, color, otherColor) {\n if (color === 'transparent') return otherColor;\n if (otherColor === 'transparent') return color;\n if (weight === 0) return otherColor;\n var parsedColor1 = parseToRgb(color);\n\n var color1 = _extends({}, parsedColor1, {\n alpha: typeof parsedColor1.alpha === 'number' ? parsedColor1.alpha : 1\n });\n\n var parsedColor2 = parseToRgb(otherColor);\n\n var color2 = _extends({}, parsedColor2, {\n alpha: typeof parsedColor2.alpha === 'number' ? parsedColor2.alpha : 1\n }); // The formula is copied from the original Sass implementation:\n // http://sass-lang.com/documentation/Sass/Script/Functions.html#mix-instance_method\n\n\n var alphaDelta = color1.alpha - color2.alpha;\n var x = parseFloat(weight) * 2 - 1;\n var y = x * alphaDelta === -1 ? x : x + alphaDelta;\n var z = 1 + x * alphaDelta;\n var weight1 = (y / z + 1) / 2.0;\n var weight2 = 1 - weight1;\n var mixedColor = {\n red: Math.floor(color1.red * weight1 + color2.red * weight2),\n green: Math.floor(color1.green * weight1 + color2.green * weight2),\n blue: Math.floor(color1.blue * weight1 + color2.blue * weight2),\n alpha: color1.alpha * (parseFloat(weight) / 1.0) + color2.alpha * (1 - parseFloat(weight) / 1.0)\n };\n return rgba(mixedColor);\n} // prettier-ignore\n\n\nvar curriedMix = /*#__PURE__*/curry\n/* :: */\n(mix);\n\n/**\n * Increases the opacity of a color. Its range for the amount is between 0 to 1.\n *\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: opacify(0.1, 'rgba(255, 255, 255, 0.9)');\n * background: opacify(0.2, 'hsla(0, 0%, 100%, 0.5)'),\n * background: opacify('0.5', 'rgba(255, 0, 0, 0.2)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${opacify(0.1, 'rgba(255, 255, 255, 0.9)')};\n * background: ${opacify(0.2, 'hsla(0, 0%, 100%, 0.5)')},\n * background: ${opacify('0.5', 'rgba(255, 0, 0, 0.2)')},\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#fff\";\n * background: \"rgba(255,255,255,0.7)\";\n * background: \"rgba(255,0,0,0.7)\";\n * }\n */\n\nfunction opacify(amount, color) {\n if (color === 'transparent') return color;\n var parsedColor = parseToRgb(color);\n var alpha = typeof parsedColor.alpha === 'number' ? parsedColor.alpha : 1;\n\n var colorWithAlpha = _extends({}, parsedColor, {\n alpha: guard(0, 1, (alpha * 100 + parseFloat(amount) * 100) / 100)\n });\n\n return rgba(colorWithAlpha);\n} // prettier-ignore\n\n\nvar curriedOpacify = /*#__PURE__*/curry\n/* :: */\n(opacify);\n\nvar defaultReturnIfLightColor = '#000';\nvar defaultReturnIfDarkColor = '#fff';\n/**\n * Returns black or white (or optional passed colors) for best\n * contrast depending on the luminosity of the given color.\n * When passing custom return colors, strict mode ensures that the\n * return color always meets or exceeds WCAG level AA or greater. If this test\n * fails, the default return color (black or white) is returned in place of the\n * custom return color. You can optionally turn off strict mode.\n *\n * Follows [W3C specs for readability](https://www.w3.org/TR/WCAG20-TECHS/G18.html).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * color: readableColor('#000'),\n * color: readableColor('black', '#001', '#ff8'),\n * color: readableColor('white', '#001', '#ff8'),\n * color: readableColor('red', '#333', '#ddd', true)\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * color: ${readableColor('#000')};\n * color: ${readableColor('black', '#001', '#ff8')};\n * color: ${readableColor('white', '#001', '#ff8')};\n * color: ${readableColor('red', '#333', '#ddd', true)};\n * `\n *\n * // CSS in JS Output\n * element {\n * color: \"#fff\";\n * color: \"#ff8\";\n * color: \"#001\";\n * color: \"#000\";\n * }\n */\n\nfunction readableColor(color, returnIfLightColor, returnIfDarkColor, strict) {\n if (returnIfLightColor === void 0) {\n returnIfLightColor = defaultReturnIfLightColor;\n }\n\n if (returnIfDarkColor === void 0) {\n returnIfDarkColor = defaultReturnIfDarkColor;\n }\n\n if (strict === void 0) {\n strict = true;\n }\n\n var isColorLight = getLuminance(color) > 0.179;\n var preferredReturnColor = isColorLight ? returnIfLightColor : returnIfDarkColor;\n\n if (!strict || getContrast(color, preferredReturnColor) >= 4.5) {\n return preferredReturnColor;\n }\n\n return isColorLight ? defaultReturnIfLightColor : defaultReturnIfDarkColor;\n}\n\n/**\n * Converts a RgbColor or RgbaColor object to a color string.\n * This util is useful in case you only know on runtime which color object is\n * used. Otherwise we recommend to rely on `rgb` or `rgba`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: rgbToColorString({ red: 255, green: 205, blue: 100 }),\n * background: rgbToColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${rgbToColorString({ red: 255, green: 205, blue: 100 })};\n * background: ${rgbToColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 })};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#ffcd64\";\n * background: \"rgba(255,205,100,0.72)\";\n * }\n */\nfunction rgbToColorString(color) {\n if (typeof color === 'object' && typeof color.red === 'number' && typeof color.green === 'number' && typeof color.blue === 'number') {\n if (typeof color.alpha === 'number') {\n return rgba({\n red: color.red,\n green: color.green,\n blue: color.blue,\n alpha: color.alpha\n });\n }\n\n return rgb({\n red: color.red,\n green: color.green,\n blue: color.blue\n });\n }\n\n throw new PolishedError(46);\n}\n\n/**\n * Increases the intensity of a color. Its range is between 0 to 1. The first\n * argument of the saturate function is the amount by how much the color\n * intensity should be increased.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: saturate(0.2, '#CCCD64'),\n * background: saturate('0.2', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${saturate(0.2, '#FFCD64')};\n * background: ${saturate('0.2', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#e0e250\";\n * background: \"rgba(224,226,80,0.7)\";\n * }\n */\n\nfunction saturate(amount, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n saturation: guard(0, 1, hslColor.saturation + parseFloat(amount))\n }));\n} // prettier-ignore\n\n\nvar curriedSaturate = /*#__PURE__*/curry\n/* :: */\n(saturate);\n\n/**\n * Sets the hue of a color to the provided value. The hue range can be\n * from 0 and 359.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: setHue(42, '#CCCD64'),\n * background: setHue('244', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${setHue(42, '#CCCD64')};\n * background: ${setHue('244', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#cdae64\";\n * background: \"rgba(107,100,205,0.7)\";\n * }\n */\n\nfunction setHue(hue, color) {\n if (color === 'transparent') return color;\n return toColorString(_extends({}, parseToHsl(color), {\n hue: parseFloat(hue)\n }));\n} // prettier-ignore\n\n\nvar curriedSetHue = /*#__PURE__*/curry\n/* :: */\n(setHue);\n\n/**\n * Sets the lightness of a color to the provided value. The lightness range can be\n * from 0 and 1.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: setLightness(0.2, '#CCCD64'),\n * background: setLightness('0.75', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${setLightness(0.2, '#CCCD64')};\n * background: ${setLightness('0.75', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#4d4d19\";\n * background: \"rgba(223,224,159,0.7)\";\n * }\n */\n\nfunction setLightness(lightness, color) {\n if (color === 'transparent') return color;\n return toColorString(_extends({}, parseToHsl(color), {\n lightness: parseFloat(lightness)\n }));\n} // prettier-ignore\n\n\nvar curriedSetLightness = /*#__PURE__*/curry\n/* :: */\n(setLightness);\n\n/**\n * Sets the saturation of a color to the provided value. The saturation range can be\n * from 0 and 1.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: setSaturation(0.2, '#CCCD64'),\n * background: setSaturation('0.75', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${setSaturation(0.2, '#CCCD64')};\n * background: ${setSaturation('0.75', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#adad84\";\n * background: \"rgba(228,229,76,0.7)\";\n * }\n */\n\nfunction setSaturation(saturation, color) {\n if (color === 'transparent') return color;\n return toColorString(_extends({}, parseToHsl(color), {\n saturation: parseFloat(saturation)\n }));\n} // prettier-ignore\n\n\nvar curriedSetSaturation = /*#__PURE__*/curry\n/* :: */\n(setSaturation);\n\n/**\n * Shades a color by mixing it with black. `shade` can produce\n * hue shifts, where as `darken` manipulates the luminance channel and therefore\n * doesn't produce hue shifts.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: shade(0.25, '#00f')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${shade(0.25, '#00f')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#00003f\";\n * }\n */\n\nfunction shade(percentage, color) {\n if (color === 'transparent') return color;\n return curriedMix(parseFloat(percentage), 'rgb(0, 0, 0)', color);\n} // prettier-ignore\n\n\nvar curriedShade = /*#__PURE__*/curry\n/* :: */\n(shade);\n\n/**\n * Tints a color by mixing it with white. `tint` can produce\n * hue shifts, where as `lighten` manipulates the luminance channel and therefore\n * doesn't produce hue shifts.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: tint(0.25, '#00f')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${tint(0.25, '#00f')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#bfbfff\";\n * }\n */\n\nfunction tint(percentage, color) {\n if (color === 'transparent') return color;\n return curriedMix(parseFloat(percentage), 'rgb(255, 255, 255)', color);\n} // prettier-ignore\n\n\nvar curriedTint = /*#__PURE__*/curry\n/* :: */\n(tint);\n\n/**\n * Decreases the opacity of a color. Its range for the amount is between 0 to 1.\n *\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: transparentize(0.1, '#fff');\n * background: transparentize(0.2, 'hsl(0, 0%, 100%)'),\n * background: transparentize('0.5', 'rgba(255, 0, 0, 0.8)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${transparentize(0.1, '#fff')};\n * background: ${transparentize(0.2, 'hsl(0, 0%, 100%)')},\n * background: ${transparentize('0.5', 'rgba(255, 0, 0, 0.8)')},\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"rgba(255,255,255,0.9)\";\n * background: \"rgba(255,255,255,0.8)\";\n * background: \"rgba(255,0,0,0.3)\";\n * }\n */\n\nfunction transparentize(amount, color) {\n if (color === 'transparent') return color;\n var parsedColor = parseToRgb(color);\n var alpha = typeof parsedColor.alpha === 'number' ? parsedColor.alpha : 1;\n\n var colorWithAlpha = _extends({}, parsedColor, {\n alpha: guard(0, 1, +(alpha * 100 - parseFloat(amount) * 100).toFixed(2) / 100)\n });\n\n return rgba(colorWithAlpha);\n} // prettier-ignore\n\n\nvar curriedTransparentize = /*#__PURE__*/curry\n/* :: */\n(transparentize);\n\n/**\n * Shorthand for easily setting the animation property. Allows either multiple arrays with animations\n * or a single animation spread over the arguments.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...animation(['rotate', '1s', 'ease-in-out'], ['colorchange', '2s'])\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${animation(['rotate', '1s', 'ease-in-out'], ['colorchange', '2s'])}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'animation': 'rotate 1s ease-in-out, colorchange 2s'\n * }\n * @example\n * // Styles as object usage\n * const styles = {\n * ...animation('rotate', '1s', 'ease-in-out')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${animation('rotate', '1s', 'ease-in-out')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'animation': 'rotate 1s ease-in-out'\n * }\n */\nfunction animation() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n // Allow single or multiple animations passed\n var multiMode = Array.isArray(args[0]);\n\n if (!multiMode && args.length > 8) {\n throw new PolishedError(64);\n }\n\n var code = args.map(function (arg) {\n if (multiMode && !Array.isArray(arg) || !multiMode && Array.isArray(arg)) {\n throw new PolishedError(65);\n }\n\n if (Array.isArray(arg) && arg.length > 8) {\n throw new PolishedError(66);\n }\n\n return Array.isArray(arg) ? arg.join(' ') : arg;\n }).join(', ');\n return {\n animation: code\n };\n}\n\n/**\n * Shorthand that accepts any number of backgroundImage values as parameters for creating a single background statement.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...backgroundImages('url(\"/image/background.jpg\")', 'linear-gradient(red, green)')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${backgroundImages('url(\"/image/background.jpg\")', 'linear-gradient(red, green)')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'backgroundImage': 'url(\"/image/background.jpg\"), linear-gradient(red, green)'\n * }\n */\nfunction backgroundImages() {\n for (var _len = arguments.length, properties = new Array(_len), _key = 0; _key < _len; _key++) {\n properties[_key] = arguments[_key];\n }\n\n return {\n backgroundImage: properties.join(', ')\n };\n}\n\n/**\n * Shorthand that accepts any number of background values as parameters for creating a single background statement.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...backgrounds('url(\"/image/background.jpg\")', 'linear-gradient(red, green)', 'center no-repeat')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${backgrounds('url(\"/image/background.jpg\")', 'linear-gradient(red, green)', 'center no-repeat')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'background': 'url(\"/image/background.jpg\"), linear-gradient(red, green), center no-repeat'\n * }\n */\nfunction backgrounds() {\n for (var _len = arguments.length, properties = new Array(_len), _key = 0; _key < _len; _key++) {\n properties[_key] = arguments[_key];\n }\n\n return {\n background: properties.join(', ')\n };\n}\n\nvar sideMap = ['top', 'right', 'bottom', 'left'];\n/**\n * Shorthand for the border property that splits out individual properties for use with tools like Fela and Styletron. A side keyword can optionally be passed to target only one side's border properties.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...border('1px', 'solid', 'red')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${border('1px', 'solid', 'red')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderColor': 'red',\n * 'borderStyle': 'solid',\n * 'borderWidth': `1px`,\n * }\n *\n * // Styles as object usage\n * const styles = {\n * ...border('top', '1px', 'solid', 'red')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${border('top', '1px', 'solid', 'red')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopColor': 'red',\n * 'borderTopStyle': 'solid',\n * 'borderTopWidth': `1px`,\n * }\n */\n\nfunction border(sideKeyword) {\n for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n values[_key - 1] = arguments[_key];\n }\n\n if (typeof sideKeyword === 'string' && sideMap.indexOf(sideKeyword) >= 0) {\n var _ref;\n\n return _ref = {}, _ref[\"border\" + capitalizeString(sideKeyword) + \"Width\"] = values[0], _ref[\"border\" + capitalizeString(sideKeyword) + \"Style\"] = values[1], _ref[\"border\" + capitalizeString(sideKeyword) + \"Color\"] = values[2], _ref;\n } else {\n values.unshift(sideKeyword);\n return {\n borderWidth: values[0],\n borderStyle: values[1],\n borderColor: values[2]\n };\n }\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...borderColor('red', 'green', 'blue', 'yellow')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${borderColor('red', 'green', 'blue', 'yellow')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopColor': 'red',\n * 'borderRightColor': 'green',\n * 'borderBottomColor': 'blue',\n * 'borderLeftColor': 'yellow'\n * }\n */\nfunction borderColor() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['borderColor'].concat(values));\n}\n\n/**\n * Shorthand that accepts a value for side and a value for radius and applies the radius value to both corners of the side.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...borderRadius('top', '5px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${borderRadius('top', '5px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopRightRadius': '5px',\n * 'borderTopLeftRadius': '5px',\n * }\n */\nfunction borderRadius(side, radius) {\n var uppercaseSide = capitalizeString(side);\n\n if (!radius && radius !== 0) {\n throw new PolishedError(62);\n }\n\n if (uppercaseSide === 'Top' || uppercaseSide === 'Bottom') {\n var _ref;\n\n return _ref = {}, _ref[\"border\" + uppercaseSide + \"RightRadius\"] = radius, _ref[\"border\" + uppercaseSide + \"LeftRadius\"] = radius, _ref;\n }\n\n if (uppercaseSide === 'Left' || uppercaseSide === 'Right') {\n var _ref2;\n\n return _ref2 = {}, _ref2[\"borderTop\" + uppercaseSide + \"Radius\"] = radius, _ref2[\"borderBottom\" + uppercaseSide + \"Radius\"] = radius, _ref2;\n }\n\n throw new PolishedError(63);\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...borderStyle('solid', 'dashed', 'dotted', 'double')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${borderStyle('solid', 'dashed', 'dotted', 'double')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopStyle': 'solid',\n * 'borderRightStyle': 'dashed',\n * 'borderBottomStyle': 'dotted',\n * 'borderLeftStyle': 'double'\n * }\n */\nfunction borderStyle() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['borderStyle'].concat(values));\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...borderWidth('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${borderWidth('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopWidth': '12px',\n * 'borderRightWidth': '24px',\n * 'borderBottomWidth': '36px',\n * 'borderLeftWidth': '48px'\n * }\n */\nfunction borderWidth() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['borderWidth'].concat(values));\n}\n\nfunction generateSelectors(template, state) {\n var stateSuffix = state ? \":\" + state : '';\n return template(stateSuffix);\n}\n/**\n * Function helper that adds an array of states to a template of selectors. Used in textInputs and buttons.\n * @private\n */\n\n\nfunction statefulSelectors(states, template, stateMap) {\n if (!template) throw new PolishedError(67);\n if (states.length === 0) return generateSelectors(template, null);\n var selectors = [];\n\n for (var i = 0; i < states.length; i += 1) {\n if (stateMap && stateMap.indexOf(states[i]) < 0) {\n throw new PolishedError(68);\n }\n\n selectors.push(generateSelectors(template, states[i]));\n }\n\n selectors = selectors.join(',');\n return selectors;\n}\n\nvar stateMap$1 = [undefined, null, 'active', 'focus', 'hover'];\n\nfunction template$1(state) {\n return \"button\" + state + \",\\n input[type=\\\"button\\\"]\" + state + \",\\n input[type=\\\"reset\\\"]\" + state + \",\\n input[type=\\\"submit\\\"]\" + state;\n}\n/**\n * Populates selectors that target all buttons. You can pass optional states to append to the selectors.\n * @example\n * // Styles as object usage\n * const styles = {\n * [buttons('active')]: {\n * 'border': 'none'\n * }\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * > ${buttons('active')} {\n * border: none;\n * }\n * `\n *\n * // CSS in JS Output\n *\n * 'button:active,\n * 'input[type=\"button\"]:active,\n * 'input[type=\\\"reset\\\"]:active,\n * 'input[type=\\\"submit\\\"]:active: {\n * 'border': 'none'\n * }\n */\n\n\nfunction buttons() {\n for (var _len = arguments.length, states = new Array(_len), _key = 0; _key < _len; _key++) {\n states[_key] = arguments[_key];\n }\n\n return statefulSelectors(states, template$1, stateMap$1);\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...margin('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${margin('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'marginTop': '12px',\n * 'marginRight': '24px',\n * 'marginBottom': '36px',\n * 'marginLeft': '48px'\n * }\n */\nfunction margin() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['margin'].concat(values));\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...padding('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${padding('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'paddingTop': '12px',\n * 'paddingRight': '24px',\n * 'paddingBottom': '36px',\n * 'paddingLeft': '48px'\n * }\n */\nfunction padding() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['padding'].concat(values));\n}\n\nvar positionMap = ['absolute', 'fixed', 'relative', 'static', 'sticky'];\n/**\n * Shorthand accepts up to five values, including null to skip a value, and maps them to their respective directions. The first value can optionally be a position keyword.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...position('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${position('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'top': '12px',\n * 'right': '24px',\n * 'bottom': '36px',\n * 'left': '48px'\n * }\n *\n * // Styles as object usage\n * const styles = {\n * ...position('absolute', '12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${position('absolute', '12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'position': 'absolute',\n * 'top': '12px',\n * 'right': '24px',\n * 'bottom': '36px',\n * 'left': '48px'\n * }\n */\n\nfunction position(firstValue) {\n for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n values[_key - 1] = arguments[_key];\n }\n\n if (positionMap.indexOf(firstValue) >= 0 && firstValue) {\n return _extends({}, directionalProperty.apply(void 0, [''].concat(values)), {\n position: firstValue\n });\n } else {\n return directionalProperty.apply(void 0, ['', firstValue].concat(values));\n }\n}\n\n/**\n * Shorthand to set the height and width properties in a single statement.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...size('300px', '250px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${size('300px', '250px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'height': '300px',\n * 'width': '250px',\n * }\n */\nfunction size(height, width) {\n if (width === void 0) {\n width = height;\n }\n\n return {\n height: height,\n width: width\n };\n}\n\nvar stateMap = [undefined, null, 'active', 'focus', 'hover'];\n\nfunction template(state) {\n return \"input[type=\\\"color\\\"]\" + state + \",\\n input[type=\\\"date\\\"]\" + state + \",\\n input[type=\\\"datetime\\\"]\" + state + \",\\n input[type=\\\"datetime-local\\\"]\" + state + \",\\n input[type=\\\"email\\\"]\" + state + \",\\n input[type=\\\"month\\\"]\" + state + \",\\n input[type=\\\"number\\\"]\" + state + \",\\n input[type=\\\"password\\\"]\" + state + \",\\n input[type=\\\"search\\\"]\" + state + \",\\n input[type=\\\"tel\\\"]\" + state + \",\\n input[type=\\\"text\\\"]\" + state + \",\\n input[type=\\\"time\\\"]\" + state + \",\\n input[type=\\\"url\\\"]\" + state + \",\\n input[type=\\\"week\\\"]\" + state + \",\\n input:not([type])\" + state + \",\\n textarea\" + state;\n}\n/**\n * Populates selectors that target all text inputs. You can pass optional states to append to the selectors.\n * @example\n * // Styles as object usage\n * const styles = {\n * [textInputs('active')]: {\n * 'border': 'none'\n * }\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * > ${textInputs('active')} {\n * border: none;\n * }\n * `\n *\n * // CSS in JS Output\n *\n * 'input[type=\"color\"]:active,\n * input[type=\"date\"]:active,\n * input[type=\"datetime\"]:active,\n * input[type=\"datetime-local\"]:active,\n * input[type=\"email\"]:active,\n * input[type=\"month\"]:active,\n * input[type=\"number\"]:active,\n * input[type=\"password\"]:active,\n * input[type=\"search\"]:active,\n * input[type=\"tel\"]:active,\n * input[type=\"text\"]:active,\n * input[type=\"time\"]:active,\n * input[type=\"url\"]:active,\n * input[type=\"week\"]:active,\n * input:not([type]):active,\n * textarea:active': {\n * 'border': 'none'\n * }\n */\n\n\nfunction textInputs() {\n for (var _len = arguments.length, states = new Array(_len), _key = 0; _key < _len; _key++) {\n states[_key] = arguments[_key];\n }\n\n return statefulSelectors(states, template, stateMap);\n}\n\n/**\n * Accepts any number of transition values as parameters for creating a single transition statement. You may also pass an array of properties as the first parameter that you would like to apply the same transition values to (second parameter).\n * @example\n * // Styles as object usage\n * const styles = {\n * ...transitions('opacity 1.0s ease-in 0s', 'width 2.0s ease-in 2s'),\n * ...transitions(['color', 'background-color'], '2.0s ease-in 2s')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${transitions('opacity 1.0s ease-in 0s', 'width 2.0s ease-in 2s')};\n * ${transitions(['color', 'background-color'], '2.0s ease-in 2s'),};\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'transition': 'opacity 1.0s ease-in 0s, width 2.0s ease-in 2s'\n * 'transition': 'color 2.0s ease-in 2s, background-color 2.0s ease-in 2s',\n * }\n */\n\nfunction transitions() {\n for (var _len = arguments.length, properties = new Array(_len), _key = 0; _key < _len; _key++) {\n properties[_key] = arguments[_key];\n }\n\n if (Array.isArray(properties[0]) && properties.length === 2) {\n var value = properties[1];\n\n if (typeof value !== 'string') {\n throw new PolishedError(61);\n }\n\n var transitionsString = properties[0].map(function (property) {\n return property + \" \" + value;\n }).join(', ');\n return {\n transition: transitionsString\n };\n } else {\n return {\n transition: properties.join(', ')\n };\n }\n}\n\nexport { curriedAdjustHue as adjustHue, animation, backgroundImages, backgrounds, between, border, borderColor, borderRadius, borderStyle, borderWidth, buttons, clearFix, complement, cover, cssVar, curriedDarken as darken, curriedDesaturate as desaturate, directionalProperty, easeIn, easeInOut, easeOut, ellipsis, em, fluidRange, fontFace, getContrast, getLuminance, getValueAndUnit, grayscale, hiDPI, hideText, hideVisually, hsl, hslToColorString, hsla, important, invert, curriedLighten as lighten, linearGradient, margin, math, meetsContrastGuidelines, curriedMix as mix, modularScale, normalize, curriedOpacify as opacify, padding, parseToHsl, parseToRgb, position, radialGradient, readableColor, rem, remToPx, retinaImage, rgb, rgbToColorString, rgba, curriedSaturate as saturate, curriedSetHue as setHue, curriedSetLightness as setLightness, curriedSetSaturation as setSaturation, curriedShade as shade, size, stripUnit, textInputs, timingFunctions, curriedTint as tint, toColorString, transitions, curriedTransparentize as transparentize, triangle, wordWrap };\n","/**\n * The Ease class provides a collection of easing functions for use with tween.js.\n */\nvar Easing = {\n Linear: {\n None: function (amount) {\n return amount;\n },\n },\n Quadratic: {\n In: function (amount) {\n return amount * amount;\n },\n Out: function (amount) {\n return amount * (2 - amount);\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount;\n }\n return -0.5 * (--amount * (amount - 2) - 1);\n },\n },\n Cubic: {\n In: function (amount) {\n return amount * amount * amount;\n },\n Out: function (amount) {\n return --amount * amount * amount + 1;\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount * amount;\n }\n return 0.5 * ((amount -= 2) * amount * amount + 2);\n },\n },\n Quartic: {\n In: function (amount) {\n return amount * amount * amount * amount;\n },\n Out: function (amount) {\n return 1 - --amount * amount * amount * amount;\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount * amount * amount;\n }\n return -0.5 * ((amount -= 2) * amount * amount * amount - 2);\n },\n },\n Quintic: {\n In: function (amount) {\n return amount * amount * amount * amount * amount;\n },\n Out: function (amount) {\n return --amount * amount * amount * amount * amount + 1;\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount * amount * amount * amount;\n }\n return 0.5 * ((amount -= 2) * amount * amount * amount * amount + 2);\n },\n },\n Sinusoidal: {\n In: function (amount) {\n return 1 - Math.cos((amount * Math.PI) / 2);\n },\n Out: function (amount) {\n return Math.sin((amount * Math.PI) / 2);\n },\n InOut: function (amount) {\n return 0.5 * (1 - Math.cos(Math.PI * amount));\n },\n },\n Exponential: {\n In: function (amount) {\n return amount === 0 ? 0 : Math.pow(1024, amount - 1);\n },\n Out: function (amount) {\n return amount === 1 ? 1 : 1 - Math.pow(2, -10 * amount);\n },\n InOut: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n if ((amount *= 2) < 1) {\n return 0.5 * Math.pow(1024, amount - 1);\n }\n return 0.5 * (-Math.pow(2, -10 * (amount - 1)) + 2);\n },\n },\n Circular: {\n In: function (amount) {\n return 1 - Math.sqrt(1 - amount * amount);\n },\n Out: function (amount) {\n return Math.sqrt(1 - --amount * amount);\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return -0.5 * (Math.sqrt(1 - amount * amount) - 1);\n }\n return 0.5 * (Math.sqrt(1 - (amount -= 2) * amount) + 1);\n },\n },\n Elastic: {\n In: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n return -Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI);\n },\n Out: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n return Math.pow(2, -10 * amount) * Math.sin((amount - 0.1) * 5 * Math.PI) + 1;\n },\n InOut: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n amount *= 2;\n if (amount < 1) {\n return -0.5 * Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI);\n }\n return 0.5 * Math.pow(2, -10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI) + 1;\n },\n },\n Back: {\n In: function (amount) {\n var s = 1.70158;\n return amount * amount * ((s + 1) * amount - s);\n },\n Out: function (amount) {\n var s = 1.70158;\n return --amount * amount * ((s + 1) * amount + s) + 1;\n },\n InOut: function (amount) {\n var s = 1.70158 * 1.525;\n if ((amount *= 2) < 1) {\n return 0.5 * (amount * amount * ((s + 1) * amount - s));\n }\n return 0.5 * ((amount -= 2) * amount * ((s + 1) * amount + s) + 2);\n },\n },\n Bounce: {\n In: function (amount) {\n return 1 - Easing.Bounce.Out(1 - amount);\n },\n Out: function (amount) {\n if (amount < 1 / 2.75) {\n return 7.5625 * amount * amount;\n }\n else if (amount < 2 / 2.75) {\n return 7.5625 * (amount -= 1.5 / 2.75) * amount + 0.75;\n }\n else if (amount < 2.5 / 2.75) {\n return 7.5625 * (amount -= 2.25 / 2.75) * amount + 0.9375;\n }\n else {\n return 7.5625 * (amount -= 2.625 / 2.75) * amount + 0.984375;\n }\n },\n InOut: function (amount) {\n if (amount < 0.5) {\n return Easing.Bounce.In(amount * 2) * 0.5;\n }\n return Easing.Bounce.Out(amount * 2 - 1) * 0.5 + 0.5;\n },\n },\n};\n\nvar now;\n// Include a performance.now polyfill.\n// In node.js, use process.hrtime.\n// eslint-disable-next-line\n// @ts-ignore\nif (typeof self === 'undefined' && typeof process !== 'undefined' && process.hrtime) {\n now = function () {\n // eslint-disable-next-line\n // @ts-ignore\n var time = process.hrtime();\n // Convert [seconds, nanoseconds] to milliseconds.\n return time[0] * 1000 + time[1] / 1000000;\n };\n}\n// In a browser, use self.performance.now if it is available.\nelse if (typeof self !== 'undefined' && self.performance !== undefined && self.performance.now !== undefined) {\n // This must be bound, because directly assigning this function\n // leads to an invocation exception in Chrome.\n now = self.performance.now.bind(self.performance);\n}\n// Use Date.now if it is available.\nelse if (Date.now !== undefined) {\n now = Date.now;\n}\n// Otherwise, use 'new Date().getTime()'.\nelse {\n now = function () {\n return new Date().getTime();\n };\n}\nvar now$1 = now;\n\n/**\n * Controlling groups of tweens\n *\n * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.\n * In these cases, you may want to create your own smaller groups of tween\n */\nvar Group = /** @class */ (function () {\n function Group() {\n this._tweens = {};\n this._tweensAddedDuringUpdate = {};\n }\n Group.prototype.getAll = function () {\n var _this = this;\n return Object.keys(this._tweens).map(function (tweenId) {\n return _this._tweens[tweenId];\n });\n };\n Group.prototype.removeAll = function () {\n this._tweens = {};\n };\n Group.prototype.add = function (tween) {\n this._tweens[tween.getId()] = tween;\n this._tweensAddedDuringUpdate[tween.getId()] = tween;\n };\n Group.prototype.remove = function (tween) {\n delete this._tweens[tween.getId()];\n delete this._tweensAddedDuringUpdate[tween.getId()];\n };\n Group.prototype.update = function (time, preserve) {\n if (time === void 0) { time = now$1(); }\n if (preserve === void 0) { preserve = false; }\n var tweenIds = Object.keys(this._tweens);\n if (tweenIds.length === 0) {\n return false;\n }\n // Tweens are updated in \"batches\". If you add a new tween during an\n // update, then the new tween will be updated in the next batch.\n // If you remove a tween during an update, it may or may not be updated.\n // However, if the removed tween was added during the current batch,\n // then it will not be updated.\n while (tweenIds.length > 0) {\n this._tweensAddedDuringUpdate = {};\n for (var i = 0; i < tweenIds.length; i++) {\n var tween = this._tweens[tweenIds[i]];\n var autoStart = !preserve;\n if (tween && tween.update(time, autoStart) === false && !preserve) {\n delete this._tweens[tweenIds[i]];\n }\n }\n tweenIds = Object.keys(this._tweensAddedDuringUpdate);\n }\n return true;\n };\n return Group;\n}());\n\n/**\n *\n */\nvar Interpolation = {\n Linear: function (v, k) {\n var m = v.length - 1;\n var f = m * k;\n var i = Math.floor(f);\n var fn = Interpolation.Utils.Linear;\n if (k < 0) {\n return fn(v[0], v[1], f);\n }\n if (k > 1) {\n return fn(v[m], v[m - 1], m - f);\n }\n return fn(v[i], v[i + 1 > m ? m : i + 1], f - i);\n },\n Bezier: function (v, k) {\n var b = 0;\n var n = v.length - 1;\n var pw = Math.pow;\n var bn = Interpolation.Utils.Bernstein;\n for (var i = 0; i <= n; i++) {\n b += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);\n }\n return b;\n },\n CatmullRom: function (v, k) {\n var m = v.length - 1;\n var f = m * k;\n var i = Math.floor(f);\n var fn = Interpolation.Utils.CatmullRom;\n if (v[0] === v[m]) {\n if (k < 0) {\n i = Math.floor((f = m * (1 + k)));\n }\n return fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);\n }\n else {\n if (k < 0) {\n return v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);\n }\n if (k > 1) {\n return v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);\n }\n return fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);\n }\n },\n Utils: {\n Linear: function (p0, p1, t) {\n return (p1 - p0) * t + p0;\n },\n Bernstein: function (n, i) {\n var fc = Interpolation.Utils.Factorial;\n return fc(n) / fc(i) / fc(n - i);\n },\n Factorial: (function () {\n var a = [1];\n return function (n) {\n var s = 1;\n if (a[n]) {\n return a[n];\n }\n for (var i = n; i > 1; i--) {\n s *= i;\n }\n a[n] = s;\n return s;\n };\n })(),\n CatmullRom: function (p0, p1, p2, p3, t) {\n var v0 = (p2 - p0) * 0.5;\n var v1 = (p3 - p1) * 0.5;\n var t2 = t * t;\n var t3 = t * t2;\n return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\n },\n },\n};\n\n/**\n * Utils\n */\nvar Sequence = /** @class */ (function () {\n function Sequence() {\n }\n Sequence.nextId = function () {\n return Sequence._nextId++;\n };\n Sequence._nextId = 0;\n return Sequence;\n}());\n\nvar mainGroup = new Group();\n\n/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\nvar Tween = /** @class */ (function () {\n function Tween(_object, _group) {\n if (_group === void 0) { _group = mainGroup; }\n this._object = _object;\n this._group = _group;\n this._isPaused = false;\n this._pauseStart = 0;\n this._valuesStart = {};\n this._valuesEnd = {};\n this._valuesStartRepeat = {};\n this._duration = 1000;\n this._initialRepeat = 0;\n this._repeat = 0;\n this._yoyo = false;\n this._isPlaying = false;\n this._reversed = false;\n this._delayTime = 0;\n this._startTime = 0;\n this._easingFunction = Easing.Linear.None;\n this._interpolationFunction = Interpolation.Linear;\n this._chainedTweens = [];\n this._onStartCallbackFired = false;\n this._id = Sequence.nextId();\n this._isChainStopped = false;\n this._goToEnd = false;\n }\n Tween.prototype.getId = function () {\n return this._id;\n };\n Tween.prototype.isPlaying = function () {\n return this._isPlaying;\n };\n Tween.prototype.isPaused = function () {\n return this._isPaused;\n };\n Tween.prototype.to = function (properties, duration) {\n // TODO? restore this, then update the 07_dynamic_to example to set fox\n // tween's to on each update. That way the behavior is opt-in (there's\n // currently no opt-out).\n // for (const prop in properties) this._valuesEnd[prop] = properties[prop]\n this._valuesEnd = Object.create(properties);\n if (duration !== undefined) {\n this._duration = duration;\n }\n return this;\n };\n Tween.prototype.duration = function (d) {\n this._duration = d;\n return this;\n };\n Tween.prototype.start = function (time) {\n if (this._isPlaying) {\n return this;\n }\n // eslint-disable-next-line\n this._group && this._group.add(this);\n this._repeat = this._initialRepeat;\n if (this._reversed) {\n // If we were reversed (f.e. using the yoyo feature) then we need to\n // flip the tween direction back to forward.\n this._reversed = false;\n for (var property in this._valuesStartRepeat) {\n this._swapEndStartRepeatValues(property);\n this._valuesStart[property] = this._valuesStartRepeat[property];\n }\n }\n this._isPlaying = true;\n this._isPaused = false;\n this._onStartCallbackFired = false;\n this._isChainStopped = false;\n this._startTime = time !== undefined ? (typeof time === 'string' ? now$1() + parseFloat(time) : time) : now$1();\n this._startTime += this._delayTime;\n this._setupProperties(this._object, this._valuesStart, this._valuesEnd, this._valuesStartRepeat);\n return this;\n };\n Tween.prototype._setupProperties = function (_object, _valuesStart, _valuesEnd, _valuesStartRepeat) {\n for (var property in _valuesEnd) {\n var startValue = _object[property];\n var startValueIsArray = Array.isArray(startValue);\n var propType = startValueIsArray ? 'array' : typeof startValue;\n var isInterpolationList = !startValueIsArray && Array.isArray(_valuesEnd[property]);\n // If `to()` specifies a property that doesn't exist in the source object,\n // we should not set that property in the object\n if (propType === 'undefined' || propType === 'function') {\n continue;\n }\n // Check if an Array was provided as property value\n if (isInterpolationList) {\n var endValues = _valuesEnd[property];\n if (endValues.length === 0) {\n continue;\n }\n // handle an array of relative values\n endValues = endValues.map(this._handleRelativeValue.bind(this, startValue));\n // Create a local copy of the Array with the start value at the front\n _valuesEnd[property] = [startValue].concat(endValues);\n }\n // handle the deepness of the values\n if ((propType === 'object' || startValueIsArray) && startValue && !isInterpolationList) {\n _valuesStart[property] = startValueIsArray ? [] : {};\n // eslint-disable-next-line\n for (var prop in startValue) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _valuesStart[property][prop] = startValue[prop];\n }\n _valuesStartRepeat[property] = startValueIsArray ? [] : {}; // TODO? repeat nested values? And yoyo? And array values?\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n this._setupProperties(startValue, _valuesStart[property], _valuesEnd[property], _valuesStartRepeat[property]);\n }\n else {\n // Save the starting value, but only once.\n if (typeof _valuesStart[property] === 'undefined') {\n _valuesStart[property] = startValue;\n }\n if (!startValueIsArray) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings\n }\n if (isInterpolationList) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _valuesStartRepeat[property] = _valuesEnd[property].slice().reverse();\n }\n else {\n _valuesStartRepeat[property] = _valuesStart[property] || 0;\n }\n }\n }\n };\n Tween.prototype.stop = function () {\n if (!this._isChainStopped) {\n this._isChainStopped = true;\n this.stopChainedTweens();\n }\n if (!this._isPlaying) {\n return this;\n }\n // eslint-disable-next-line\n this._group && this._group.remove(this);\n this._isPlaying = false;\n this._isPaused = false;\n if (this._onStopCallback) {\n this._onStopCallback(this._object);\n }\n return this;\n };\n Tween.prototype.end = function () {\n this._goToEnd = true;\n this.update(Infinity);\n return this;\n };\n Tween.prototype.pause = function (time) {\n if (time === void 0) { time = now$1(); }\n if (this._isPaused || !this._isPlaying) {\n return this;\n }\n this._isPaused = true;\n this._pauseStart = time;\n // eslint-disable-next-line\n this._group && this._group.remove(this);\n return this;\n };\n Tween.prototype.resume = function (time) {\n if (time === void 0) { time = now$1(); }\n if (!this._isPaused || !this._isPlaying) {\n return this;\n }\n this._isPaused = false;\n this._startTime += time - this._pauseStart;\n this._pauseStart = 0;\n // eslint-disable-next-line\n this._group && this._group.add(this);\n return this;\n };\n Tween.prototype.stopChainedTweens = function () {\n for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n this._chainedTweens[i].stop();\n }\n return this;\n };\n Tween.prototype.group = function (group) {\n this._group = group;\n return this;\n };\n Tween.prototype.delay = function (amount) {\n this._delayTime = amount;\n return this;\n };\n Tween.prototype.repeat = function (times) {\n this._initialRepeat = times;\n this._repeat = times;\n return this;\n };\n Tween.prototype.repeatDelay = function (amount) {\n this._repeatDelayTime = amount;\n return this;\n };\n Tween.prototype.yoyo = function (yoyo) {\n this._yoyo = yoyo;\n return this;\n };\n Tween.prototype.easing = function (easingFunction) {\n this._easingFunction = easingFunction;\n return this;\n };\n Tween.prototype.interpolation = function (interpolationFunction) {\n this._interpolationFunction = interpolationFunction;\n return this;\n };\n Tween.prototype.chain = function () {\n var tweens = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n tweens[_i] = arguments[_i];\n }\n this._chainedTweens = tweens;\n return this;\n };\n Tween.prototype.onStart = function (callback) {\n this._onStartCallback = callback;\n return this;\n };\n Tween.prototype.onUpdate = function (callback) {\n this._onUpdateCallback = callback;\n return this;\n };\n Tween.prototype.onRepeat = function (callback) {\n this._onRepeatCallback = callback;\n return this;\n };\n Tween.prototype.onComplete = function (callback) {\n this._onCompleteCallback = callback;\n return this;\n };\n Tween.prototype.onStop = function (callback) {\n this._onStopCallback = callback;\n return this;\n };\n /**\n * @returns true if the tween is still playing after the update, false\n * otherwise (calling update on a paused tween still returns true because\n * it is still playing, just paused).\n */\n Tween.prototype.update = function (time, autoStart) {\n if (time === void 0) { time = now$1(); }\n if (autoStart === void 0) { autoStart = true; }\n if (this._isPaused)\n return true;\n var property;\n var elapsed;\n var endTime = this._startTime + this._duration;\n if (!this._goToEnd && !this._isPlaying) {\n if (time > endTime)\n return false;\n if (autoStart)\n this.start(time);\n }\n this._goToEnd = false;\n if (time < this._startTime) {\n return true;\n }\n if (this._onStartCallbackFired === false) {\n if (this._onStartCallback) {\n this._onStartCallback(this._object);\n }\n this._onStartCallbackFired = true;\n }\n elapsed = (time - this._startTime) / this._duration;\n elapsed = this._duration === 0 || elapsed > 1 ? 1 : elapsed;\n var value = this._easingFunction(elapsed);\n // properties transformations\n this._updateProperties(this._object, this._valuesStart, this._valuesEnd, value);\n if (this._onUpdateCallback) {\n this._onUpdateCallback(this._object, elapsed);\n }\n if (elapsed === 1) {\n if (this._repeat > 0) {\n if (isFinite(this._repeat)) {\n this._repeat--;\n }\n // Reassign starting values, restart by making startTime = now\n for (property in this._valuesStartRepeat) {\n if (!this._yoyo && typeof this._valuesEnd[property] === 'string') {\n this._valuesStartRepeat[property] =\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n this._valuesStartRepeat[property] + parseFloat(this._valuesEnd[property]);\n }\n if (this._yoyo) {\n this._swapEndStartRepeatValues(property);\n }\n this._valuesStart[property] = this._valuesStartRepeat[property];\n }\n if (this._yoyo) {\n this._reversed = !this._reversed;\n }\n if (this._repeatDelayTime !== undefined) {\n this._startTime = time + this._repeatDelayTime;\n }\n else {\n this._startTime = time + this._delayTime;\n }\n if (this._onRepeatCallback) {\n this._onRepeatCallback(this._object);\n }\n return true;\n }\n else {\n if (this._onCompleteCallback) {\n this._onCompleteCallback(this._object);\n }\n for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n // Make the chained tweens start exactly at the time they should,\n // even if the `update()` method was called way past the duration of the tween\n this._chainedTweens[i].start(this._startTime + this._duration);\n }\n this._isPlaying = false;\n return false;\n }\n }\n return true;\n };\n Tween.prototype._updateProperties = function (_object, _valuesStart, _valuesEnd, value) {\n for (var property in _valuesEnd) {\n // Don't update properties that do not exist in the source object\n if (_valuesStart[property] === undefined) {\n continue;\n }\n var start = _valuesStart[property] || 0;\n var end = _valuesEnd[property];\n var startIsArray = Array.isArray(_object[property]);\n var endIsArray = Array.isArray(end);\n var isInterpolationList = !startIsArray && endIsArray;\n if (isInterpolationList) {\n _object[property] = this._interpolationFunction(end, value);\n }\n else if (typeof end === 'object' && end) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n this._updateProperties(_object[property], start, end, value);\n }\n else {\n // Parses relative end values with start as base (e.g.: +10, -3)\n end = this._handleRelativeValue(start, end);\n // Protect against non numeric properties.\n if (typeof end === 'number') {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _object[property] = start + (end - start) * value;\n }\n }\n }\n };\n Tween.prototype._handleRelativeValue = function (start, end) {\n if (typeof end !== 'string') {\n return end;\n }\n if (end.charAt(0) === '+' || end.charAt(0) === '-') {\n return start + parseFloat(end);\n }\n else {\n return parseFloat(end);\n }\n };\n Tween.prototype._swapEndStartRepeatValues = function (property) {\n var tmp = this._valuesStartRepeat[property];\n var endValue = this._valuesEnd[property];\n if (typeof endValue === 'string') {\n this._valuesStartRepeat[property] = this._valuesStartRepeat[property] + parseFloat(endValue);\n }\n else {\n this._valuesStartRepeat[property] = this._valuesEnd[property];\n }\n this._valuesEnd[property] = tmp;\n };\n return Tween;\n}());\n\nvar VERSION = '18.6.4';\n\n/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\nvar nextId = Sequence.nextId;\n/**\n * Controlling groups of tweens\n *\n * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.\n * In these cases, you may want to create your own smaller groups of tweens.\n */\nvar TWEEN = mainGroup;\n// This is the best way to export things in a way that's compatible with both ES\n// Modules and CommonJS, without build hacks, and so as not to break the\n// existing API.\n// https://github.com/rollup/rollup/issues/1961#issuecomment-423037881\nvar getAll = TWEEN.getAll.bind(TWEEN);\nvar removeAll = TWEEN.removeAll.bind(TWEEN);\nvar add = TWEEN.add.bind(TWEEN);\nvar remove = TWEEN.remove.bind(TWEEN);\nvar update = TWEEN.update.bind(TWEEN);\nvar exports = {\n Easing: Easing,\n Group: Group,\n Interpolation: Interpolation,\n now: now$1,\n Sequence: Sequence,\n nextId: nextId,\n Tween: Tween,\n VERSION: VERSION,\n getAll: getAll,\n removeAll: removeAll,\n add: add,\n remove: remove,\n update: update,\n};\n\nexport default exports;\nexport { Easing, Group, Interpolation, Sequence, Tween, VERSION, add, getAll, nextId, now$1 as now, remove, removeAll, update };\n","var index = (function (p) {\n return p instanceof Function ? p // fn\n : typeof p === 'string' ? function (obj) {\n return obj[p];\n } // property name\n : function (obj) {\n return p;\n };\n}); // constant\n\nexport default index;\n","/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n };\n\n var debounced = function(){\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n \n debounced.flush = function() {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n \n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n","import debounce from 'debounce';\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr && (typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]);\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar Prop = function Prop(name, _ref) {\n var _ref$default = _ref[\"default\"],\n defaultVal = _ref$default === void 0 ? null : _ref$default,\n _ref$triggerUpdate = _ref.triggerUpdate,\n triggerUpdate = _ref$triggerUpdate === void 0 ? true : _ref$triggerUpdate,\n _ref$onChange = _ref.onChange,\n onChange = _ref$onChange === void 0 ? function (newVal, state) {} : _ref$onChange;\n\n _classCallCheck(this, Prop);\n\n this.name = name;\n this.defaultVal = defaultVal;\n this.triggerUpdate = triggerUpdate;\n this.onChange = onChange;\n};\n\nfunction index (_ref2) {\n var _ref2$stateInit = _ref2.stateInit,\n stateInit = _ref2$stateInit === void 0 ? function () {\n return {};\n } : _ref2$stateInit,\n _ref2$props = _ref2.props,\n rawProps = _ref2$props === void 0 ? {} : _ref2$props,\n _ref2$methods = _ref2.methods,\n methods = _ref2$methods === void 0 ? {} : _ref2$methods,\n _ref2$aliases = _ref2.aliases,\n aliases = _ref2$aliases === void 0 ? {} : _ref2$aliases,\n _ref2$init = _ref2.init,\n initFn = _ref2$init === void 0 ? function () {} : _ref2$init,\n _ref2$update = _ref2.update,\n updateFn = _ref2$update === void 0 ? function () {} : _ref2$update;\n // Parse props into Prop instances\n var props = Object.keys(rawProps).map(function (propName) {\n return new Prop(propName, rawProps[propName]);\n });\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // Holds component state\n var state = Object.assign({}, stateInit instanceof Function ? stateInit(options) : stateInit, // Support plain objects for backwards compatibility\n {\n initialised: false\n }); // keeps track of which props triggered an update\n\n var changedProps = {}; // Component constructor\n\n function comp(nodeElement) {\n initStatic(nodeElement, options);\n digest();\n return comp;\n }\n\n var initStatic = function initStatic(nodeElement, options) {\n initFn.call(comp, nodeElement, state, options);\n state.initialised = true;\n };\n\n var digest = debounce(function () {\n if (!state.initialised) {\n return;\n }\n\n updateFn.call(comp, state, changedProps);\n changedProps = {};\n }, 1); // Getter/setter methods\n\n props.forEach(function (prop) {\n comp[prop.name] = getSetProp(prop);\n\n function getSetProp(_ref3) {\n var prop = _ref3.name,\n _ref3$triggerUpdate = _ref3.triggerUpdate,\n redigest = _ref3$triggerUpdate === void 0 ? false : _ref3$triggerUpdate,\n _ref3$onChange = _ref3.onChange,\n onChange = _ref3$onChange === void 0 ? function (newVal, state) {} : _ref3$onChange,\n _ref3$defaultVal = _ref3.defaultVal,\n defaultVal = _ref3$defaultVal === void 0 ? null : _ref3$defaultVal;\n return function (_) {\n var curVal = state[prop];\n\n if (!arguments.length) {\n return curVal;\n } // Getter mode\n\n\n var val = _ === undefined ? defaultVal : _; // pick default if value passed is undefined\n\n state[prop] = val;\n onChange.call(comp, val, state, curVal); // track changed props\n\n !changedProps.hasOwnProperty(prop) && (changedProps[prop] = curVal);\n\n if (redigest) {\n digest();\n }\n\n return comp;\n };\n }\n }); // Other methods\n\n Object.keys(methods).forEach(function (methodName) {\n comp[methodName] = function () {\n var _methods$methodName;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return (_methods$methodName = methods[methodName]).call.apply(_methods$methodName, [comp, state].concat(args));\n };\n }); // Link aliases\n\n Object.entries(aliases).forEach(function (_ref4) {\n var _ref5 = _slicedToArray(_ref4, 2),\n alias = _ref5[0],\n target = _ref5[1];\n\n return comp[alias] = comp[target];\n }); // Reset all component props to their default value\n\n comp.resetProps = function () {\n props.forEach(function (prop) {\n comp[prop.name](prop.defaultVal);\n });\n return comp;\n }; //\n\n\n comp.resetProps(); // Apply all prop defaults\n\n state._rerender = digest; // Expose digest method\n\n return comp;\n };\n}\n\nexport default index;\n","import { WebGLRenderer, Scene, OrthographicCamera, Raycaster, TextureLoader, Vector2, Vector3, Box3, Color, Mesh, SphereGeometry, MeshBasicMaterial, BackSide, EventDispatcher, MOUSE, Quaternion, Spherical, Clock } from 'three';\nimport { TrackballControls } from 'three/examples/jsm/controls/TrackballControls.js';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\nimport { FlyControls } from 'three/examples/jsm/controls/FlyControls.js';\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';\nimport { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';\nimport { parseToRgb, opacify } from 'polished';\nimport TWEEN from '@tweenjs/tween.js';\nimport accessorFn from 'accessor-fn';\nimport Kapsule from 'kapsule';\n\nfunction styleInject(css, ref) {\n if (ref === void 0) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') {\n return;\n }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar css_248z = \".scene-nav-info {\\n bottom: 5px;\\n width: 100%;\\n text-align: center;\\n color: slategrey;\\n opacity: 0.7;\\n font-size: 10px;\\n}\\n\\n.scene-tooltip {\\n color: lavender;\\n font-size: 15px;\\n}\\n\\n.scene-nav-info, .scene-tooltip {\\n position: absolute;\\n font-family: sans-serif;\\n pointer-events: none;\\n}\\n\\n.scene-container canvas:focus {\\n outline: none;\\n}\";\nstyleInject(css_248z);\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar three = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n WebGLRenderer: WebGLRenderer,\n Scene: Scene,\n // PerspectiveCamera,\n OrthographicCamera: OrthographicCamera,\n Raycaster: Raycaster,\n TextureLoader: TextureLoader,\n Vector2: Vector2,\n Vector3: Vector3,\n Box3: Box3,\n Color: Color,\n Mesh: Mesh,\n SphereGeometry: SphereGeometry,\n MeshBasicMaterial: MeshBasicMaterial,\n BackSide: BackSide,\n EventDispatcher: EventDispatcher,\n MOUSE: MOUSE,\n Quaternion: Quaternion,\n Spherical: Spherical,\n Clock: Clock\n};\nvar threeRenderObjects = Kapsule({\n props: {\n width: {\n \"default\": window.innerWidth,\n onChange: function onChange(width, state, prevWidth) {\n isNaN(width) && (state.width = prevWidth);\n }\n },\n height: {\n \"default\": window.innerHeight,\n onChange: function onChange(height, state, prevHeight) {\n isNaN(height) && (state.height = prevHeight);\n }\n },\n backgroundColor: {\n \"default\": '#000011'\n },\n backgroundImageUrl: {},\n onBackgroundImageLoaded: {},\n showNavInfo: {\n \"default\": true\n },\n skyRadius: {\n \"default\": 50000\n },\n objects: {\n \"default\": []\n },\n enablePointerInteraction: {\n \"default\": true,\n onChange: function onChange(_, state) {\n // Reset hover state\n state.hoverObj = null;\n if (state.toolTipElem) state.toolTipElem.innerHTML = '';\n },\n triggerUpdate: false\n },\n lineHoverPrecision: {\n \"default\": 1,\n triggerUpdate: false\n },\n hoverOrderComparator: {\n \"default\": function _default() {\n return -1;\n },\n triggerUpdate: false\n },\n // keep existing order by default\n hoverFilter: {\n \"default\": function _default() {\n return true;\n },\n triggerUpdate: false\n },\n // exclude objects from interaction\n tooltipContent: {\n triggerUpdate: false\n },\n hoverDuringDrag: {\n \"default\": false,\n triggerUpdate: false\n },\n clickAfterDrag: {\n \"default\": false,\n triggerUpdate: false\n },\n onHover: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onClick: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onRightClick: {\n triggerUpdate: false\n }\n },\n methods: {\n tick: function tick(state) {\n if (state.initialised) {\n state.controls.update && state.controls.update(state.clock.getDelta()); // timedelta is required for fly controls\n\n state.postProcessingComposer ? state.postProcessingComposer.render() // if using postprocessing, switch the output to it\n : state.renderer.render(state.scene, state.camera);\n state.extraRenderers.forEach(function (r) {\n return r.render(state.scene, state.camera);\n });\n\n if (state.enablePointerInteraction) {\n // Update tooltip and trigger onHover events\n var topObject = null;\n\n if (state.hoverDuringDrag || !state.isPointerDragging) {\n var intersects = this.intersectingObjects(state.pointerPos.x, state.pointerPos.y).filter(function (d) {\n return state.hoverFilter(d.object);\n }).sort(function (a, b) {\n return state.hoverOrderComparator(a.object, b.object);\n });\n var topIntersect = intersects.length ? intersects[0] : null;\n topObject = topIntersect ? topIntersect.object : null;\n state.intersectionPoint = topIntersect ? topIntersect.point : null;\n }\n\n if (topObject !== state.hoverObj) {\n state.onHover(topObject, state.hoverObj);\n state.toolTipElem.innerHTML = topObject ? accessorFn(state.tooltipContent)(topObject) || '' : '';\n state.hoverObj = topObject;\n }\n }\n\n TWEEN.update(); // update camera animation tweens\n }\n\n return this;\n },\n getPointerPos: function getPointerPos(state) {\n var _state$pointerPos = state.pointerPos,\n x = _state$pointerPos.x,\n y = _state$pointerPos.y;\n return {\n x: x,\n y: y\n };\n },\n cameraPosition: function cameraPosition(state, position, lookAt, transitionDuration) {\n var camera = state.camera; // Setter\n\n if (position && state.initialised) {\n var finalPos = position;\n var finalLookAt = lookAt || {\n x: 0,\n y: 0,\n z: 0\n };\n\n if (!transitionDuration) {\n // no animation\n setCameraPos(finalPos);\n setLookAt(finalLookAt);\n } else {\n var camPos = Object.assign({}, camera.position);\n var camLookAt = getLookAt();\n new TWEEN.Tween(camPos).to(finalPos, transitionDuration).easing(TWEEN.Easing.Quadratic.Out).onUpdate(setCameraPos).start(); // Face direction in 1/3rd of time\n\n new TWEEN.Tween(camLookAt).to(finalLookAt, transitionDuration / 3).easing(TWEEN.Easing.Quadratic.Out).onUpdate(setLookAt).start();\n }\n\n return this;\n } // Getter\n\n\n return Object.assign({}, camera.position, {\n lookAt: getLookAt()\n }); //\n\n function setCameraPos(pos) {\n var x = pos.x,\n y = pos.y,\n z = pos.z;\n if (x !== undefined) camera.position.x = x;\n if (y !== undefined) camera.position.y = y;\n if (z !== undefined) camera.position.z = z;\n }\n\n function setLookAt(lookAt) {\n state.controls.target = new three.Vector3(lookAt.x, lookAt.y, lookAt.z);\n }\n\n function getLookAt() {\n return Object.assign(new three.Vector3(0, 0, -1000).applyQuaternion(camera.quaternion).add(camera.position));\n }\n },\n zoomToFit: function zoomToFit(state) {\n var transitionDuration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var padding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;\n\n for (var _len = arguments.length, bboxArgs = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n bboxArgs[_key - 3] = arguments[_key];\n }\n\n return this.fitToBbox(this.getBbox.apply(this, bboxArgs), transitionDuration, padding);\n },\n fitToBbox: function fitToBbox(state, bbox) {\n var transitionDuration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var padding = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;\n // based on https://discourse.threejs.org/t/camera-zoom-to-fit-object/936/24\n var camera = state.camera;\n\n if (bbox) {\n var center = new three.Vector3(0, 0, 0); // reset camera aim to center\n\n var maxBoxSide = Math.max.apply(Math, _toConsumableArray(Object.entries(bbox).map(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n coordType = _ref2[0],\n coords = _ref2[1];\n\n return Math.max.apply(Math, _toConsumableArray(coords.map(function (c) {\n return Math.abs(center[coordType] - c);\n })));\n }))) * 2; // find distance that fits whole bbox within padded fov\n\n var paddedFov = (1 - padding * 2 / state.height) * camera.fov;\n var fitHeightDistance = maxBoxSide / Math.atan(paddedFov * Math.PI / 180);\n var fitWidthDistance = fitHeightDistance / camera.aspect;\n var distance = Math.max(fitHeightDistance, fitWidthDistance);\n\n if (distance > 0) {\n var newCameraPosition = center.clone().sub(camera.position).normalize().multiplyScalar(-distance);\n this.cameraPosition(newCameraPosition, center, transitionDuration);\n }\n }\n\n return this;\n },\n getBbox: function getBbox(state) {\n var objFilter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {\n return true;\n };\n var box = new three.Box3(new three.Vector3(0, 0, 0), new three.Vector3(0, 0, 0));\n var objs = state.objects.filter(objFilter);\n if (!objs.length) return null;\n objs.forEach(function (obj) {\n return box.expandByObject(obj);\n }); // extract global x,y,z min/max\n\n return Object.assign.apply(Object, _toConsumableArray(['x', 'y', 'z'].map(function (c) {\n return _defineProperty({}, c, [box.min[c], box.max[c]]);\n })));\n },\n getScreenCoords: function getScreenCoords(state, x, y, z) {\n var vec = new three.Vector3(x, y, z);\n vec.project(this.camera()); // project to the camera plane\n\n return {\n // align relative pos to canvas dimensions\n x: (vec.x + 1) * state.width / 2,\n y: -(vec.y - 1) * state.height / 2\n };\n },\n getSceneCoords: function getSceneCoords(state, screenX, screenY) {\n var distance = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var relCoords = new three.Vector2(screenX / state.width * 2 - 1, -(screenY / state.height) * 2 + 1);\n var raycaster = new three.Raycaster();\n raycaster.setFromCamera(relCoords, state.camera);\n return Object.assign({}, raycaster.ray.at(distance, new three.Vector3()));\n },\n intersectingObjects: function intersectingObjects(state, x, y) {\n var relCoords = new three.Vector2(x / state.width * 2 - 1, -(y / state.height) * 2 + 1);\n var raycaster = new three.Raycaster();\n raycaster.params.Line.threshold = state.lineHoverPrecision; // set linePrecision\n\n raycaster.setFromCamera(relCoords, state.camera);\n return raycaster.intersectObjects(state.objects, true);\n },\n renderer: function renderer(state) {\n return state.renderer;\n },\n scene: function scene(state) {\n return state.scene;\n },\n camera: function camera(state) {\n return state.camera;\n },\n postProcessingComposer: function postProcessingComposer(state) {\n return state.postProcessingComposer;\n },\n controls: function controls(state) {\n return state.controls;\n },\n tbControls: function tbControls(state) {\n return state.controls;\n } // to be deprecated\n\n },\n stateInit: function stateInit() {\n return {\n scene: new three.Scene(),\n camera: new three.OrthographicCamera(),\n clock: new three.Clock()\n };\n },\n init: function init(domNode, state) {\n var _ref4 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref4$controlType = _ref4.controlType,\n controlType = _ref4$controlType === void 0 ? 'trackball' : _ref4$controlType,\n _ref4$rendererConfig = _ref4.rendererConfig,\n rendererConfig = _ref4$rendererConfig === void 0 ? {} : _ref4$rendererConfig,\n _ref4$extraRenderers = _ref4.extraRenderers,\n extraRenderers = _ref4$extraRenderers === void 0 ? [] : _ref4$extraRenderers,\n _ref4$waitForLoadComp = _ref4.waitForLoadComplete,\n waitForLoadComplete = _ref4$waitForLoadComp === void 0 ? true : _ref4$waitForLoadComp;\n\n // Wipe DOM\n domNode.innerHTML = ''; // Add relative container\n\n domNode.appendChild(state.container = document.createElement('div'));\n state.container.className = 'scene-container';\n state.container.style.position = 'relative'; // Add nav info section\n\n state.container.appendChild(state.navInfo = document.createElement('div'));\n state.navInfo.className = 'scene-nav-info';\n state.navInfo.textContent = {\n orbit: 'Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan',\n trackball: 'Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan',\n fly: 'WASD: move, R|F: up | down, Q|E: roll, up|down: pitch, left|right: yaw'\n }[controlType] || '';\n state.navInfo.style.display = state.showNavInfo ? null : 'none'; // Setup tooltip\n\n state.toolTipElem = document.createElement('div');\n state.toolTipElem.classList.add('scene-tooltip');\n state.container.appendChild(state.toolTipElem); // Capture pointer coords on move or touchstart\n\n state.pointerPos = new three.Vector2();\n state.pointerPos.x = -2; // Initialize off canvas\n\n state.pointerPos.y = -2;\n ['pointermove', 'pointerdown'].forEach(function (evType) {\n return state.container.addEventListener(evType, function (ev) {\n // track click state\n evType === 'pointerdown' && (state.isPointerPressed = true); // detect point drag\n\n !state.isPointerDragging && ev.type === 'pointermove' && (ev.pressure > 0 || state.isPointerPressed) // ev.pressure always 0 on Safari, so we used the isPointerPressed tracker\n && (ev.pointerType !== 'touch' || ev.movementX === undefined || [ev.movementX, ev.movementY].some(function (m) {\n return Math.abs(m) > 1;\n })) // relax drag trigger sensitivity on touch events\n && (state.isPointerDragging = true);\n\n if (state.enablePointerInteraction) {\n // update the pointer pos\n var offset = getOffset(state.container);\n state.pointerPos.x = ev.pageX - offset.left;\n state.pointerPos.y = ev.pageY - offset.top; // Move tooltip\n\n state.toolTipElem.style.top = \"\".concat(state.pointerPos.y, \"px\");\n state.toolTipElem.style.left = \"\".concat(state.pointerPos.x, \"px\");\n state.toolTipElem.style.transform = \"translate(-\".concat(state.pointerPos.x / state.width * 100, \"%, 21px)\"); // adjust horizontal position to not exceed canvas boundaries\n }\n\n function getOffset(el) {\n var rect = el.getBoundingClientRect(),\n scrollLeft = window.pageXOffset || document.documentElement.scrollLeft,\n scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n return {\n top: rect.top + scrollTop,\n left: rect.left + scrollLeft\n };\n }\n }, {\n passive: true\n });\n }); // Handle click events on objs\n\n state.container.addEventListener('pointerup', function (ev) {\n state.isPointerPressed = false;\n\n if (state.isPointerDragging) {\n state.isPointerDragging = false;\n if (!state.clickAfterDrag) return; // don't trigger onClick after pointer drag (camera motion via controls)\n }\n\n requestAnimationFrame(function () {\n // trigger click events asynchronously, to allow hoverObj to be set (on frame)\n if (ev.button === 0) {\n // left-click\n state.onClick(state.hoverObj || null, ev, state.intersectionPoint); // trigger background clicks with null\n }\n\n if (ev.button === 2 && state.onRightClick) {\n // right-click\n state.onRightClick(state.hoverObj || null, ev, state.intersectionPoint);\n }\n });\n }, {\n passive: true,\n capture: true\n }); // use capture phase to prevent propagation blocking from controls (specifically for fly)\n\n state.container.addEventListener('contextmenu', function (ev) {\n if (state.onRightClick) ev.preventDefault(); // prevent default contextmenu behavior and allow pointerup to fire instead\n }); // Setup renderer, camera and controls\n\n state.renderer = new three.WebGLRenderer(Object.assign({\n antialias: true,\n alpha: true\n }, rendererConfig));\n state.renderer.setPixelRatio(Math.min(2, window.devicePixelRatio)); // clamp device pixel ratio\n\n state.container.appendChild(state.renderer.domElement); // Setup extra renderers\n\n state.extraRenderers = extraRenderers;\n state.extraRenderers.forEach(function (r) {\n // overlay them on top of main renderer\n r.domElement.style.position = 'absolute';\n r.domElement.style.top = '0px';\n r.domElement.style.pointerEvents = 'none';\n state.container.appendChild(r.domElement);\n }); // configure post-processing composer\n\n state.postProcessingComposer = new EffectComposer(state.renderer);\n state.postProcessingComposer.addPass(new RenderPass(state.scene, state.camera)); // render scene as first pass\n // configure controls\n\n state.controls = new {\n trackball: TrackballControls,\n orbit: OrbitControls,\n fly: FlyControls\n }[controlType](state.camera, state.renderer.domElement);\n\n if (controlType === 'fly') {\n state.controls.movementSpeed = 300;\n state.controls.rollSpeed = Math.PI / 6;\n state.controls.dragToLook = true;\n }\n\n if (controlType === 'trackball' || controlType === 'orbit') {\n state.controls.minDistance = 0.1;\n state.controls.maxDistance = state.skyRadius;\n state.controls.addEventListener('start', function () {\n state.controlsEngaged = true;\n });\n state.controls.addEventListener('change', function () {\n if (state.controlsEngaged) {\n state.controlsDragging = true;\n }\n });\n state.controls.addEventListener('end', function () {\n state.controlsEngaged = false;\n state.controlsDragging = false;\n });\n }\n\n [state.renderer, state.postProcessingComposer].concat(_toConsumableArray(state.extraRenderers)).forEach(function (r) {\n return r.setSize(state.width, state.height);\n });\n state.renderer.setSize(state.width, state.height);\n state.postProcessingComposer.setSize(state.width, state.height); // state.camera.aspect = state.width/state.height;\n // state.camera.updateProjectionMatrix();\n // state.camera.position.z = 1000;\n // add sky\n\n state.scene.add(state.skysphere = new three.Mesh());\n state.skysphere.visible = false;\n state.loadComplete = state.scene.visible = !waitForLoadComplete;\n window.scene = state.scene;\n },\n update: function update(state, changedProps) {\n // resize canvas\n if (state.width && state.height && (changedProps.hasOwnProperty('width') || changedProps.hasOwnProperty('height'))) {\n state.container.style.width = state.width;\n state.container.style.height = state.height;\n [state.renderer, state.postProcessingComposer].concat(_toConsumableArray(state.extraRenderers)).forEach(function (r) {\n return r.setSize(state.width, state.height);\n });\n state.camera.aspect = state.width / state.height;\n state.camera.updateProjectionMatrix();\n }\n\n if (changedProps.hasOwnProperty('skyRadius') && state.skyRadius) {\n state.controls.hasOwnProperty('maxDistance') && changedProps.skyRadius && (state.controls.maxDistance = state.skyRadius);\n state.camera.far = state.skyRadius * 2.5;\n state.camera.updateProjectionMatrix();\n state.skysphere.geometry = new three.SphereGeometry(state.skyRadius);\n }\n\n if (changedProps.hasOwnProperty('backgroundColor')) {\n var alpha = parseToRgb(state.backgroundColor).alpha;\n if (alpha === undefined) alpha = 1;\n state.renderer.setClearColor(new three.Color(opacify(1, state.backgroundColor)), alpha);\n }\n\n if (changedProps.hasOwnProperty('backgroundImageUrl')) {\n if (!state.backgroundImageUrl) {\n state.skysphere.visible = false;\n state.skysphere.material.map = null;\n !state.loadComplete && finishLoad();\n } else {\n new three.TextureLoader().load(state.backgroundImageUrl, function (texture) {\n state.skysphere.material = new three.MeshBasicMaterial({\n map: texture,\n side: three.BackSide\n });\n state.skysphere.visible = true; // triggered when background image finishes loading (asynchronously to allow 1 frame to load texture)\n\n state.onBackgroundImageLoaded && setTimeout(state.onBackgroundImageLoaded);\n !state.loadComplete && finishLoad();\n });\n }\n }\n\n changedProps.hasOwnProperty('showNavInfo') && (state.navInfo.style.display = state.showNavInfo ? null : 'none');\n\n if (changedProps.hasOwnProperty('objects')) {\n (changedProps.objects || []).forEach(function (obj) {\n return state.scene.remove(obj);\n }); // Clear the place\n\n state.objects.forEach(function (obj) {\n return state.scene.add(obj);\n }); // Add to scene\n } //\n\n\n function finishLoad() {\n state.loadComplete = state.scene.visible = true;\n }\n }\n});\n\nexport default threeRenderObjects;\n","export default function(kapsulePropName, kapsuleType) {\n\n const dummyK = new kapsuleType(); // To extract defaults\n\n return {\n linkProp: function(prop) { // link property config\n return {\n default: dummyK[prop](),\n onChange(v, state) { state[kapsulePropName][prop](v) },\n triggerUpdate: false\n }\n },\n linkMethod: function(method) { // link method pass-through\n return function(state, ...args) {\n const kapsuleInstance = state[kapsulePropName];\n const returnVal = kapsuleInstance[method](...args);\n\n return returnVal === kapsuleInstance\n ? this // chain based on the parent object, not the inner kapsule\n : returnVal;\n }\n }\n }\n\n}","import { AmbientLight, DirectionalLight, Vector3 } from 'three';\n\nconst three = window.THREE\n ? window.THREE // Prefer consumption from global THREE, if exists\n : { AmbientLight, DirectionalLight, Vector3 };\n\nimport { DragControls as ThreeDragControls } from 'three/examples/jsm/controls/DragControls.js';\n\nimport ThreeForceGraph from 'three-forcegraph';\nimport ThreeRenderObjects from 'three-render-objects';\n\nimport accessorFn from 'accessor-fn';\nimport Kapsule from 'kapsule';\n\nimport linkKapsule from './kapsule-link.js';\n\n//\n\nconst CAMERA_DISTANCE2NODES_FACTOR = 170;\n\n//\n\n// Expose config from forceGraph\nconst bindFG = linkKapsule('forceGraph', ThreeForceGraph);\nconst linkedFGProps = Object.assign(...[\n 'jsonUrl',\n 'graphData',\n 'numDimensions',\n 'dagMode',\n 'dagLevelDistance',\n 'dagNodeFilter',\n 'onDagError',\n 'nodeRelSize',\n 'nodeId',\n 'nodeVal',\n 'nodeResolution',\n 'nodeColor',\n 'nodeAutoColorBy',\n 'nodeOpacity',\n 'nodeVisibility',\n 'nodeThreeObject',\n 'nodeThreeObjectExtend',\n 'linkSource',\n 'linkTarget',\n 'linkVisibility',\n 'linkColor',\n 'linkAutoColorBy',\n 'linkOpacity',\n 'linkWidth',\n 'linkResolution',\n 'linkCurvature',\n 'linkCurveRotation',\n 'linkMaterial',\n 'linkThreeObject',\n 'linkThreeObjectExtend',\n 'linkPositionUpdate',\n 'linkDirectionalArrowLength',\n 'linkDirectionalArrowColor',\n 'linkDirectionalArrowRelPos',\n 'linkDirectionalArrowResolution',\n 'linkDirectionalParticles',\n 'linkDirectionalParticleSpeed',\n 'linkDirectionalParticleWidth',\n 'linkDirectionalParticleColor',\n 'linkDirectionalParticleResolution',\n 'forceEngine',\n 'd3AlphaDecay',\n 'd3VelocityDecay',\n 'd3AlphaMin',\n 'ngraphPhysics',\n 'warmupTicks',\n 'cooldownTicks',\n 'cooldownTime',\n 'onEngineTick',\n 'onEngineStop'\n].map(p => ({ [p]: bindFG.linkProp(p) })));\nconst linkedFGMethods = Object.assign(...[\n 'refresh',\n 'getGraphBbox',\n 'd3Force',\n 'd3ReheatSimulation',\n 'emitParticle'\n].map(p => ({ [p]: bindFG.linkMethod(p) })));\n\n// Expose config from renderObjs\nconst bindRenderObjs = linkKapsule('renderObjs', ThreeRenderObjects);\nconst linkedRenderObjsProps = Object.assign(...[\n 'width',\n 'height',\n 'backgroundColor',\n 'showNavInfo',\n 'enablePointerInteraction'\n].map(p => ({ [p]: bindRenderObjs.linkProp(p) })));\nconst linkedRenderObjsMethods = Object.assign(\n ...[\n 'cameraPosition',\n 'postProcessingComposer'\n ].map(p => ({ [p]: bindRenderObjs.linkMethod(p) })),\n {\n graph2ScreenCoords: bindRenderObjs.linkMethod('getScreenCoords'),\n screen2GraphCoords: bindRenderObjs.linkMethod('getSceneCoords')\n }\n);\n\n//\n\nexport default Kapsule({\n\n props: {\n nodeLabel: { default: 'name', triggerUpdate: false },\n linkLabel: { default: 'name', triggerUpdate: false },\n linkHoverPrecision: { default: 1, onChange: (p, state) => state.renderObjs.lineHoverPrecision(p), triggerUpdate: false },\n enableNavigationControls: {\n default: true,\n onChange(enable, state) {\n const controls = state.renderObjs.controls();\n if (controls) {\n controls.enabled = enable;\n }\n },\n triggerUpdate: false\n },\n enableNodeDrag: { default: true, triggerUpdate: false },\n onNodeDrag: { default: () => { }, triggerUpdate: false },\n onNodeDragEnd: { default: () => { }, triggerUpdate: false },\n onNodeClick: { triggerUpdate: false },\n onNodeRightClick: { triggerUpdate: false },\n onNodeHover: { triggerUpdate: false },\n onLinkClick: { triggerUpdate: false },\n onLinkRightClick: { triggerUpdate: false },\n onLinkHover: { triggerUpdate: false },\n onBackgroundClick: { triggerUpdate: false },\n onBackgroundRightClick: { triggerUpdate: false },\n ...linkedFGProps,\n ...linkedRenderObjsProps\n },\n\n methods: {\n zoomToFit: function (state, transitionDuration, padding, ...bboxArgs) {\n state.renderObjs.fitToBbox(\n state.forceGraph.getGraphBbox(...bboxArgs),\n transitionDuration,\n padding\n );\n return this;\n },\n pauseAnimation: function (state) {\n if (state.animationFrameRequestId !== null) {\n cancelAnimationFrame(state.animationFrameRequestId);\n state.animationFrameRequestId = null;\n }\n return this;\n },\n\n resumeAnimation: function (state) {\n if (state.animationFrameRequestId === null) {\n this._animationCycle();\n }\n return this;\n },\n _animationCycle(state) {\n if (state.enablePointerInteraction) {\n // reset canvas cursor (override dragControls cursor)\n this.renderer().domElement.style.cursor = null;\n }\n\n // Frame cycle\n state.forceGraph.tickFrame();\n state.renderObjs.tick();\n state.animationFrameRequestId = requestAnimationFrame(this._animationCycle);\n },\n scene: state => state.renderObjs.scene(), // Expose scene\n camera: state => state.renderObjs.camera(), // Expose camera\n renderer: state => state.renderObjs.renderer(), // Expose renderer\n renderObjs: state => { return state.renderObjs; },\n controls: state => state.renderObjs.controls(), // Expose controls\n tbControls: state => state.renderObjs.tbControls(), // To be deprecated\n _destructor: function () {\n this.pauseAnimation();\n this.graphData({ nodes: [], links: [] });\n },\n ...linkedFGMethods,\n ...linkedRenderObjsMethods\n },\n\n stateInit: ({ controlType, rendererConfig, extraRenderers }) => ({\n forceGraph: new ThreeForceGraph(),\n renderObjs: ThreeRenderObjects({ controlType, rendererConfig, extraRenderers })\n }),\n\n init: function (domNode, state) {\n // Wipe DOM\n domNode.innerHTML = '';\n\n // Add relative container\n domNode.appendChild(state.container = document.createElement('div'));\n state.container.style.position = 'relative';\n\n // Add renderObjs\n const roDomNode = document.createElement('div');\n state.container.appendChild(roDomNode);\n state.renderObjs(roDomNode);\n const camera = state.renderObjs.camera();\n const renderer = state.renderObjs.renderer();\n const controls = state.renderObjs.controls();\n controls.enabled = !!state.enableNavigationControls;\n state.lastSetCameraZ = camera.position.z;\n\n // Add info space\n let infoElem;\n state.container.appendChild(infoElem = document.createElement('div'));\n infoElem.className = 'graph-info-msg';\n infoElem.textContent = '';\n\n // config forcegraph\n state.forceGraph\n .onLoading(() => { infoElem.textContent = 'Loading...' })\n .onFinishLoading(() => { infoElem.textContent = '' })\n .onUpdate(() => {\n // sync graph data structures\n state.graphData = state.forceGraph.graphData();\n\n // re-aim camera, if still in default position (not user modified)\n if (camera.position.x === 0 && camera.position.y === 0 && camera.position.z === state.lastSetCameraZ && state.graphData.nodes.length) {\n camera.lookAt(state.forceGraph.position);\n state.lastSetCameraZ = camera.position.z = Math.cbrt(state.graphData.nodes.length) * CAMERA_DISTANCE2NODES_FACTOR;\n }\n })\n .onFinishUpdate(() => {\n // Setup node drag interaction\n if (state._dragControls) {\n const curNodeDrag = state.graphData.nodes.find(node => node.__initialFixedPos && !node.__disposeControlsAfterDrag); // detect if there's a node being dragged using the existing drag controls\n if (curNodeDrag) {\n curNodeDrag.__disposeControlsAfterDrag = true; // postpone previous controls disposal until drag ends\n } else {\n state._dragControls.dispose(); // cancel previous drag controls\n }\n\n state._dragControls = undefined;\n }\n\n if (state.enableNodeDrag && state.enablePointerInteraction && state.forceEngine === 'd3') { // Can't access node positions programatically in ngraph\n const dragControls = state._dragControls = new ThreeDragControls(\n state.graphData.nodes.map(node => node.__threeObj).filter(obj => obj),\n camera,\n renderer.domElement\n );\n\n dragControls.addEventListener('dragstart', function (event) {\n controls.enabled = false; // Disable controls while dragging\n\n // track drag object movement\n event.object.__initialPos = event.object.position.clone();\n event.object.__prevPos = event.object.position.clone();\n\n const node = getGraphObj(event.object).__data;\n !node.__initialFixedPos && (node.__initialFixedPos = { fx: node.fx, fy: node.fy, fz: node.fz });\n !node.__initialPos && (node.__initialPos = { x: node.x, y: node.y, z: node.z });\n\n // lock node\n ['x', 'y', 'z'].forEach(c => node[`f${c}`] = node[c]);\n\n // drag cursor\n renderer.domElement.classList.add('grabbable');\n });\n\n dragControls.addEventListener('drag', function (event) {\n const nodeObj = getGraphObj(event.object);\n\n if (!event.object.hasOwnProperty('__graphObjType')) {\n // If dragging a child of the node, update the node object instead\n const initPos = event.object.__initialPos;\n const prevPos = event.object.__prevPos;\n const newPos = event.object.position;\n\n nodeObj.position.add(newPos.clone().sub(prevPos)); // translate node object by the motion delta\n prevPos.copy(newPos);\n newPos.copy(initPos); // reset child back to its initial position\n }\n\n const node = nodeObj.__data;\n const newPos = nodeObj.position;\n const translate = { x: newPos.x - node.x, y: newPos.y - node.y, z: newPos.z - node.z };\n // Move fx/fy/fz (and x/y/z) of nodes based on object new position\n ['x', 'y', 'z'].forEach(c => node[`f${c}`] = node[c] = newPos[c]);\n\n state.forceGraph\n .d3AlphaTarget(0.3) // keep engine running at low intensity throughout drag\n .resetCountdown(); // prevent freeze while dragging\n\n node.__dragged = true;\n state.onNodeDrag(node, translate);\n });\n\n dragControls.addEventListener('dragend', function (event) {\n delete (event.object.__initialPos); // remove tracking attributes\n delete (event.object.__prevPos);\n\n const node = getGraphObj(event.object).__data;\n\n // dispose previous controls if needed\n if (node.__disposeControlsAfterDrag) {\n dragControls.dispose();\n delete (node.__disposeControlsAfterDrag);\n }\n\n const initFixedPos = node.__initialFixedPos;\n const initPos = node.__initialPos;\n const translate = { x: initPos.x - node.x, y: initPos.y - node.y, z: initPos.z - node.z };\n if (initFixedPos) {\n ['x', 'y', 'z'].forEach(c => {\n const fc = `f${c}`;\n if (initFixedPos[fc] === undefined) {\n delete (node[fc])\n }\n });\n delete (node.__initialFixedPos);\n delete (node.__initialPos);\n if (node.__dragged) {\n delete (node.__dragged);\n state.onNodeDragEnd(node, translate);\n }\n }\n\n state.forceGraph\n .d3AlphaTarget(0) // release engine low intensity\n .resetCountdown(); // let the engine readjust after releasing fixed nodes\n\n if (state.enableNavigationControls) {\n controls.enabled = true; // Re-enable controls\n controls.domElement && controls.domElement.ownerDocument && controls.domElement.ownerDocument.dispatchEvent(\n // simulate mouseup to ensure the controls don't take over after dragend\n new PointerEvent('pointerup', { pointerType: 'mouse' })\n );\n }\n\n // clear cursor\n renderer.domElement.classList.remove('grabbable');\n });\n }\n });\n\n // config renderObjs\n state.renderObjs\n .objects([ // Populate scene\n new three.AmbientLight(0xbbbbbb),\n new three.DirectionalLight(0xffffff, 0.6),\n state.forceGraph\n ])\n .hoverOrderComparator((a, b) => {\n // Prioritize graph objects\n const aObj = getGraphObj(a);\n if (!aObj) return 1;\n const bObj = getGraphObj(b);\n if (!bObj) return -1;\n\n // Prioritize nodes over links\n const isNode = o => o.__graphObjType === 'node';\n return isNode(bObj) - isNode(aObj);\n })\n .tooltipContent(obj => {\n const graphObj = getGraphObj(obj);\n return graphObj ? accessorFn(state[`${graphObj.__graphObjType}Label`])(graphObj.__data) || '' : '';\n })\n .hoverDuringDrag(false)\n .onHover(obj => {\n // Update tooltip and trigger onHover events\n const hoverObj = getGraphObj(obj);\n\n if (hoverObj !== state.hoverObj) {\n const prevObjType = state.hoverObj ? state.hoverObj.__graphObjType : null;\n const prevObjData = state.hoverObj ? state.hoverObj.__data : null;\n const objType = hoverObj ? hoverObj.__graphObjType : null;\n const objData = hoverObj ? hoverObj.__data : null;\n if (prevObjType && prevObjType !== objType) {\n // Hover out\n const fn = state[`on${prevObjType === 'node' ? 'Node' : 'Link'}Hover`];\n fn && fn(null, prevObjData);\n }\n if (objType) {\n // Hover in\n const fn = state[`on${objType === 'node' ? 'Node' : 'Link'}Hover`];\n fn && fn(objData, prevObjType === objType ? prevObjData : null);\n }\n\n // set pointer if hovered object is clickable\n renderer.domElement.classList[\n ((hoverObj && state[`on${objType === 'node' ? 'Node' : 'Link'}Click`]) || (!hoverObj && state.onBackgroundClick)) ? 'add' : 'remove'\n ]('clickable');\n\n state.hoverObj = hoverObj;\n }\n })\n .clickAfterDrag(false)\n .onClick((obj, ev) => {\n const graphObj = getGraphObj(obj);\n if (graphObj) {\n const fn = state[`on${graphObj.__graphObjType === 'node' ? 'Node' : 'Link'}Click`];\n fn && fn(graphObj.__data, ev);\n } else {\n state.onBackgroundClick && state.onBackgroundClick(ev);\n }\n })\n .onRightClick((obj, ev) => {\n // Handle right-click events\n const graphObj = getGraphObj(obj);\n if (graphObj) {\n const fn = state[`on${graphObj.__graphObjType === 'node' ? 'Node' : 'Link'}RightClick`];\n fn && fn(graphObj.__data, ev);\n } else {\n state.onBackgroundRightClick && state.onBackgroundRightClick(ev);\n }\n });\n\n //\n\n // Kick-off renderer\n this._animationCycle();\n }\n});\n\n//\n\nfunction getGraphObj(object) {\n let obj = object;\n // recurse up object chain until finding the graph object\n while (obj && !obj.hasOwnProperty('__graphObjType')) {\n obj = obj.parent;\n }\n return obj;\n}\n"],"names":["styleInject","REVISION","CullFaceNone","CullFaceBack","CullFaceFront","PCFShadowMap","PCFSoftShadowMap","VSMShadowMap","FrontSide","BackSide","DoubleSide","FlatShading","NoBlending","NormalBlending","AdditiveBlending","SubtractiveBlending","MultiplyBlending","CustomBlending","AddEquation","SubtractEquation","ReverseSubtractEquation","MinEquation","MaxEquation","ZeroFactor","OneFactor","SrcColorFactor","OneMinusSrcColorFactor","SrcAlphaFactor","OneMinusSrcAlphaFactor","DstAlphaFactor","OneMinusDstAlphaFactor","DstColorFactor","OneMinusDstColorFactor","SrcAlphaSaturateFactor","NeverDepth","AlwaysDepth","LessDepth","LessEqualDepth","EqualDepth","GreaterEqualDepth","GreaterDepth","NotEqualDepth","MultiplyOperation","MixOperation","AddOperation","NoToneMapping","LinearToneMapping","ReinhardToneMapping","CineonToneMapping","ACESFilmicToneMapping","CustomToneMapping","UVMapping","CubeReflectionMapping","CubeRefractionMapping","EquirectangularReflectionMapping","EquirectangularRefractionMapping","CubeUVReflectionMapping","CubeUVRefractionMapping","RepeatWrapping","ClampToEdgeWrapping","MirroredRepeatWrapping","NearestFilter","NearestMipmapNearestFilter","NearestMipmapLinearFilter","LinearFilter","LinearMipmapNearestFilter","LinearMipmapLinearFilter","UnsignedByteType","ByteType","ShortType","UnsignedShortType","IntType","UnsignedIntType","FloatType","HalfFloatType","UnsignedShort4444Type","UnsignedShort5551Type","UnsignedShort565Type","UnsignedInt248Type","AlphaFormat","RGBFormat","RGBAFormat","LuminanceFormat","LuminanceAlphaFormat","DepthFormat","DepthStencilFormat","RedFormat","RedIntegerFormat","RGFormat","RGIntegerFormat","RGBIntegerFormat","RGBAIntegerFormat","RGB_S3TC_DXT1_Format","RGBA_S3TC_DXT1_Format","RGBA_S3TC_DXT3_Format","RGBA_S3TC_DXT5_Format","RGB_PVRTC_4BPPV1_Format","RGB_PVRTC_2BPPV1_Format","RGBA_PVRTC_4BPPV1_Format","RGBA_PVRTC_2BPPV1_Format","RGB_ETC1_Format","RGB_ETC2_Format","RGBA_ETC2_EAC_Format","RGBA_ASTC_4x4_Format","RGBA_ASTC_5x4_Format","RGBA_ASTC_5x5_Format","RGBA_ASTC_6x5_Format","RGBA_ASTC_6x6_Format","RGBA_ASTC_8x5_Format","RGBA_ASTC_8x6_Format","RGBA_ASTC_8x8_Format","RGBA_ASTC_10x5_Format","RGBA_ASTC_10x6_Format","RGBA_ASTC_10x8_Format","RGBA_ASTC_10x10_Format","RGBA_ASTC_12x10_Format","RGBA_ASTC_12x12_Format","RGBA_BPTC_Format","SRGB8_ALPHA8_ASTC_4x4_Format","SRGB8_ALPHA8_ASTC_5x4_Format","SRGB8_ALPHA8_ASTC_5x5_Format","SRGB8_ALPHA8_ASTC_6x5_Format","SRGB8_ALPHA8_ASTC_6x6_Format","SRGB8_ALPHA8_ASTC_8x5_Format","SRGB8_ALPHA8_ASTC_8x6_Format","SRGB8_ALPHA8_ASTC_8x8_Format","SRGB8_ALPHA8_ASTC_10x5_Format","SRGB8_ALPHA8_ASTC_10x6_Format","SRGB8_ALPHA8_ASTC_10x8_Format","SRGB8_ALPHA8_ASTC_10x10_Format","SRGB8_ALPHA8_ASTC_12x10_Format","SRGB8_ALPHA8_ASTC_12x12_Format","LoopOnce","LoopRepeat","LoopPingPong","InterpolateDiscrete","InterpolateLinear","InterpolateSmooth","ZeroCurvatureEnding","ZeroSlopeEnding","WrapAroundEnding","NormalAnimationBlendMode","AdditiveAnimationBlendMode","TrianglesDrawMode","LinearEncoding","sRGBEncoding","GammaEncoding","RGBEEncoding","LogLuvEncoding","RGBM7Encoding","RGBM16Encoding","RGBDEncoding","BasicDepthPacking","RGBADepthPacking","TangentSpaceNormalMap","ObjectSpaceNormalMap","KeepStencilOp","AlwaysStencilFunc","StaticDrawUsage","DynamicDrawUsage","GLSL3","EventDispatcher","_lut","DEG2RAD","RAD2DEG","generateUUID","clamp","euclideanModulo","lerp","isPowerOfTwo","floorPowerOfTwo","Vector2","Matrix3","_canvas","ImageUtils","textureId","Texture","serializeImage","Vector4","WebGLRenderTarget","WebGLMultipleRenderTargets","WebGLMultisampleRenderTarget","Quaternion","Vector3","_quaternion$4","_vector$c","Box3","_vector$b","_box$3","_center","_extents","_v0$2","_v1$7","_v2$3","_f0","_f1","_f2","satForAxes","_triangleNormal","_points","_testAxis","_box$2","_v1$6","_toFarthestPoint","_toPoint","Sphere","_vector$a","_segCenter","_segDir","_diff","_edge1","_edge2","_normal$1","Ray","Matrix4","_v1$5","_zero","_one","_z","_x","_y","_m1$2","_matrix$1","_quaternion$3","Euler","Layers","_object3DId","_v1$4","_q1","_m1$1","_target","_position$3","_scale$2","_quaternion$2","_xAxis","_yAxis","_zAxis","_addedEvent","_removedEvent","Object3D","_vector1","_vector2$1","_normalMatrix","Plane","_v0$1","_v1$3","_v2$2","_v3$1","_vab","_vac","_vbc","_vap","_vbp","_vcp","Triangle","materialId","Material","_colorKeywords","_hslA","_hslB","hue2rgb","SRGBToLinear","LinearToSRGB","Color","MeshBasicMaterial","_vector$9","_vector2","BufferAttribute","Uint16BufferAttribute","Uint32BufferAttribute","Float16BufferAttribute","Float32BufferAttribute","arrayMax","_id","_m1","_obj","_offset","_box$1","_boxMorphTargets","_vector$8","BufferGeometry","_inverseMatrix$2","_ray$2","_sphere$3","_vA$1","_vB$1","_vC$1","_tempA","_tempB","_tempC","_morphA","_morphB","_morphC","_uvA$1","_uvB$1","_uvC$1","_intersectionPoint","_intersectionPointWorld","Mesh","checkBufferGeometryIntersection","checkIntersection","BoxGeometry","cloneUniforms","mergeUniforms","UniformsUtils","default_vertex","default_fragment","ShaderMaterial","Camera","PerspectiveCamera","fov","aspect","CubeCamera","CubeTexture","WebGLCubeRenderTarget","_sphere$2","_vector$7","Frustum","WebGLAnimation","WebGLAttributes","PlaneGeometry","alphamap_fragment","alphamap_pars_fragment","alphatest_fragment","aomap_fragment","aomap_pars_fragment","begin_vertex","beginnormal_vertex","bsdfs","bumpmap_pars_fragment","clipping_planes_fragment","clipping_planes_pars_fragment","clipping_planes_pars_vertex","clipping_planes_vertex","color_fragment","color_pars_fragment","color_pars_vertex","color_vertex","common","cube_uv_reflection_fragment","defaultnormal_vertex","displacementmap_pars_vertex","displacementmap_vertex","emissivemap_fragment","emissivemap_pars_fragment","encodings_fragment","encodings_pars_fragment","envmap_fragment","envmap_common_pars_fragment","envmap_pars_fragment","envmap_pars_vertex","envmap_vertex","fog_vertex","fog_pars_vertex","fog_fragment","fog_pars_fragment","gradientmap_pars_fragment","lightmap_fragment","lightmap_pars_fragment","lights_lambert_vertex","lights_pars_begin","envmap_physical_pars_fragment","lights_toon_fragment","lights_toon_pars_fragment","lights_phong_fragment","lights_phong_pars_fragment","lights_physical_fragment","lights_physical_pars_fragment","lights_fragment_begin","lights_fragment_maps","lights_fragment_end","logdepthbuf_fragment","logdepthbuf_pars_fragment","logdepthbuf_pars_vertex","logdepthbuf_vertex","map_fragment","map_pars_fragment","map_particle_fragment","map_particle_pars_fragment","metalnessmap_fragment","metalnessmap_pars_fragment","morphnormal_vertex","morphtarget_pars_vertex","morphtarget_vertex","normal_fragment_begin","normal_fragment_maps","normalmap_pars_fragment","clearcoat_normal_fragment_begin","clearcoat_normal_fragment_maps","clearcoat_pars_fragment","packing","premultiplied_alpha_fragment","project_vertex","dithering_fragment","dithering_pars_fragment","roughnessmap_fragment","roughnessmap_pars_fragment","shadowmap_pars_fragment","shadowmap_pars_vertex","shadowmap_vertex","shadowmask_pars_fragment","skinbase_vertex","skinning_pars_vertex","skinning_vertex","skinnormal_vertex","specularmap_fragment","specularmap_pars_fragment","tonemapping_fragment","tonemapping_pars_fragment","transmission_fragment","transmission_pars_fragment","uv_pars_fragment","uv_pars_vertex","uv_vertex","uv2_pars_fragment","uv2_pars_vertex","uv2_vertex","worldpos_vertex","ShaderChunk","UniformsLib","ShaderLib","WebGLBackground","WebGLBindingStates","WebGLBufferRenderer","WebGLCapabilities","WebGLClipping","WebGLCubeMaps","WebGLExtensions","WebGLGeometries","WebGLIndexedBufferRenderer","WebGLInfo","numericalSort","absNumericalSort","WebGLMorphtargets","WebGLObjects","DataTexture2DArray","DataTexture3D","emptyTexture","emptyTexture2dArray","emptyTexture3d","emptyCubeTexture","arrayCacheF32","arrayCacheI32","mat4array","mat3array","mat2array","flatten","arraysEqual","copyArray","allocTexUnits","setValueV1f","setValueV2f","setValueV3f","setValueV4f","setValueM2","setValueM3","setValueM4","setValueV1i","setValueV2i","setValueV3i","setValueV4i","setValueV1ui","setValueV2ui","setValueV3ui","setValueV4ui","setValueT1","setValueT3D1","setValueT6","setValueT2DArray1","getSingularSetter","setValueV1fArray","setValueV2fArray","setValueV3fArray","setValueV4fArray","setValueM2Array","setValueM3Array","setValueM4Array","setValueV1iArray","setValueV2iArray","setValueV3iArray","setValueV4iArray","setValueV1uiArray","setValueV2uiArray","setValueV3uiArray","setValueV4uiArray","setValueT1Array","setValueT6Array","getPureArraySetter","SingleUniform","PureArrayUniform","StructuredUniform","RePathPart","addUniform","parseUniform","WebGLUniforms","WebGLShader","programIdCount","addLineNumbers","getEncodingComponents","getShaderErrors","getTexelDecodingFunction","getTexelEncodingFunction","getToneMappingFunction","generateExtensions","filterEmptyLine","generateDefines","fetchAttributeLocations","replaceLightNums","replaceClippingPlaneNums","includePattern","resolveIncludes","includeReplacer","deprecatedUnrollLoopPattern","unrollLoopPattern","unrollLoops","loopReplacer","deprecatedLoopReplacer","generatePrecision","generateShadowMapTypeDefine","generateEnvMapTypeDefine","generateEnvMapModeDefine","generateEnvMapBlendingDefine","WebGLProgram","WebGLPrograms","WebGLProperties","painterSortStable","reversePainterSortStable","WebGLRenderList","WebGLRenderLists","UniformsCache","ShadowUniformsCache","nextVersion","shadowCastingLightsFirst","WebGLLights","WebGLRenderState","WebGLRenderStates","MeshDepthMaterial","MeshDistanceMaterial","WebGLShadowMap","WebGLState","WebGLTextures","isPowerOfTwo$1","WebGLUtils","ArrayCamera","Group","_moveEvent","WebXRController","WebXRManager","WebGLMaterials","createCanvasElement","WebGLRenderer","WebGL1Renderer","Scene","InterleavedBuffer","_vector$6","InterleavedBufferAttribute","SpriteMaterial","_geometry","_intersectPoint","_worldScale","_mvPosition","_alignedPosition","_rotatedPosition","_viewWorldMatrix","_vA","_vB","_vC","_uvA","_uvB","_uvC","Sprite","transformVertex","_basePosition","_skinIndex","_skinWeight","_vector$5","_matrix","SkinnedMesh","Bone","DataTexture","_instanceLocalMatrix","_instanceWorldMatrix","_instanceIntersects","_mesh","InstancedMesh","LineBasicMaterial","_start$1","_end$1","_inverseMatrix$1","_ray$1","_sphere$1","Line","_start","_end","LineSegments","LineLoop","PointsMaterial","_inverseMatrix","_ray","_sphere","_position$2","Points","testPoint","VideoTexture","CompressedTexture","CanvasTexture","DepthTexture","Earcut","linkedList","eliminateHoles","earcutLinked","signedArea","insertNode","equals","removeNode","filterPoints","area","indexCurve","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangle","zOrder","intersects","locallyInside","isValidDiagonal","splitPolygon","getLeftmost","compareX","eliminateHole","findHoleBridge","sectorContainsSector","sortLinked","intersectsPolygon","middleInside","sign","onSegment","Node","ShapeUtils","removeDupEndPts","addContour","ExtrudeGeometry","WorldUVGenerator","toJSON$1","ShapeGeometry","toJSON","SphereGeometry","ShadowMaterial","RawShaderMaterial","MeshStandardMaterial","MeshPhysicalMaterial","MeshPhongMaterial","MeshToonMaterial","MeshNormalMaterial","MeshLambertMaterial","MeshMatcapMaterial","LineDashedMaterial","AnimationUtils","Interpolant","CubicInterpolant","LinearInterpolant","DiscreteInterpolant","KeyframeTrack","BooleanKeyframeTrack","ColorKeyframeTrack","NumberKeyframeTrack","QuaternionLinearInterpolant","QuaternionKeyframeTrack","StringKeyframeTrack","VectorKeyframeTrack","AnimationClip","parseKeyframeTrack","getTrackTypeForValueTypeName","Cache","LoadingManager","DefaultLoadingManager","Loader","loading","FileLoader","ImageLoader","CubeTextureLoader","TextureLoader","Curve","EllipseCurve","ArcCurve","CubicPoly","tmp","px","py","pz","CatmullRomCurve3","CatmullRom","QuadraticBezierP0","QuadraticBezierP1","QuadraticBezierP2","QuadraticBezier","CubicBezierP0","CubicBezierP1","CubicBezierP2","CubicBezierP3","CubicBezier","CubicBezierCurve","CubicBezierCurve3","LineCurve","LineCurve3","QuadraticBezierCurve","QuadraticBezierCurve3","SplineCurve","Curves","CurvePath","Path","Shape","Light","HemisphereLight","_projScreenMatrix$1","_lightPositionWorld$1","_lookTarget$1","LightShadow","SpotLightShadow","SpotLight","_projScreenMatrix","_lightPositionWorld","_lookTarget","PointLightShadow","PointLight","OrthographicCamera","DirectionalLightShadow","DirectionalLight","AmbientLight","RectAreaLight","SphericalHarmonics3","LightProbe","LoaderUtils","InstancedBufferGeometry","InstancedBufferAttribute","ImageBitmapLoader","_context","AudioContext","AudioLoader","HemisphereLightProbe","AmbientLightProbe","now","Audio","PropertyMixer","_RESERVED_CHARS_RE","_reservedRe","_wordChar","_wordCharOrDot","_directoryRe","_nodeRe","_objectRe","_propertyRe","_trackRe","_supportedObjectNames","Composite","PropertyBinding","AnimationAction","AnimationMixer","InstancedInterleavedBuffer","_vector$2","_boneMatrix","_matrixWorldInv","SkeletonHelper","getBoneList","GridHelper","_floatView","RGBEFormat","addEventListener","type","listener","_listeners","undefined","listeners","indexOf","push","hasEventListener","removeEventListener","listenerArray","index","splice","dispatchEvent","event","target","array","slice","i","l","length","call","Math","PI","toString","hasRandomUUID","crypto","randomUUID","toUpperCase","d0","random","d1","d2","d3","uuid","value","min","max","n","m","x","y","t","pow","floor","log","LN2","constructor","width","height","set","setScalar","scalar","setX","setY","setComponent","Error","getComponent","clone","copy","v","add","w","console","warn","addVectors","addScalar","s","a","b","addScaledVector","sub","subVectors","subScalar","multiply","multiplyScalar","divide","divideScalar","applyMatrix3","e","elements","clampScalar","minVal","maxVal","clampLength","ceil","round","roundToZero","negate","dot","cross","lengthSq","sqrt","manhattanLength","abs","normalize","angle","atan2","distanceTo","distanceToSquared","dx","dy","manhattanDistanceTo","setLength","alpha","lerpVectors","v1","v2","fromArray","offset","toArray","fromBufferAttribute","attribute","getX","getY","rotateAround","center","c","cos","sin","Symbol","iterator","prototype","isVector2","arguments","error","n11","n12","n13","n21","n22","n23","n31","n32","n33","te","identity","me","extractBasis","xAxis","yAxis","zAxis","setFromMatrix3Column","setFromMatrix4","multiplyMatrices","premultiply","ae","be","a11","a12","a13","a21","a22","a23","a31","a32","a33","b11","b12","b13","b21","b22","b23","b31","b32","b33","determinant","d","f","g","h","invert","t11","t12","t13","det","detInv","transpose","getNormalMatrix","matrix4","transposeIntoArray","r","setUvTransform","tx","ty","sx","sy","rotation","cx","cy","scale","rotate","theta","translate","matrix","isMatrix3","Infinity","createElementNS","name","document","hashString","str","seed","h1","h2","ch","charCodeAt","imul","getDataURL","image","test","src","HTMLCanvasElement","canvas","context","getContext","ImageData","putImageData","drawImage","toDataURL","DEFAULT_IMAGE","mapping","DEFAULT_MAPPING","wrapS","wrapT","magFilter","minFilter","format","anisotropy","encoding","Object","defineProperty","mipmaps","internalFormat","repeat","matrixAutoUpdate","generateMipmaps","premultiplyAlpha","flipY","unpackAlignment","userData","version","onUpdate","isRenderTargetTexture","updateMatrix","source","JSON","parse","stringify","meta","isRootObject","textures","output","metadata","generator","wrap","images","url","Array","isArray","isDataTexture","dispose","transformUv","uv","needsUpdate","isTexture","HTMLImageElement","ImageBitmap","data","z","setZ","setW","applyMatrix4","setAxisAngleFromQuaternion","q","acos","setAxisAngleFromRotationMatrix","epsilon","epsilon2","m11","m12","m13","m21","m22","m23","m31","m32","m33","xx","yy","zz","xy","xz","yz","getZ","getW","isVector4","options","depth","scissor","scissorTest","viewport","texture","depthBuffer","stencilBuffer","depthTexture","setTexture","setSize","isWebGLRenderTarget","count","il","isWebGLMultipleRenderTargets","samples","isWebGLMultisampleRenderTarget","_w","slerp","qa","qb","qm","slerpQuaternions","slerpFlat","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","x1","y1","z1","w1","dir","sqrSin","Number","EPSILON","len","tDir","multiplyQuaternionsFlat","_onChangeCallback","quaternion","setFromEuler","euler","update","isEuler","order","_order","c1","c2","c3","s1","s2","s3","setFromAxisAngle","axis","halfAngle","setFromRotationMatrix","trace","setFromUnitVectors","vFrom","vTo","angleTo","rotateTowards","step","conjugate","p","multiplyQuaternions","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","cosHalfTheta","sqrSinHalfTheta","sinHalfTheta","halfTheta","ratioA","ratioB","u1","sqrt1u1","sqrtu1","u2","u3","_onChange","callback","isQuaternion","multiplyVectors","applyEuler","applyQuaternion","applyAxisAngle","applyNormalMatrix","qx","qy","qz","qw","ix","iy","iz","iw","project","camera","matrixWorldInverse","projectionMatrix","unproject","projectionMatrixInverse","matrixWorld","transformDirection","crossVectors","ax","ay","az","bx","by","bz","projectOnVector","denominator","projectOnPlane","planeNormal","reflect","normal","dz","setFromSpherical","setFromSphericalCoords","radius","phi","sinPhiRadius","setFromCylindrical","setFromCylindricalCoords","setFromMatrixPosition","setFromMatrixScale","setFromMatrixColumn","sz","randomDirection","u","isVector3","setFromArray","minX","minY","minZ","maxX","maxY","maxZ","setFromBufferAttribute","setFromPoints","points","makeEmpty","expandByPoint","setFromCenterAndSize","size","halfSize","setFromObject","object","expandByObject","box","isEmpty","getCenter","getSize","point","expandByVector","vector","expandByScalar","updateWorldMatrix","geometry","boundingBox","computeBoundingBox","union","children","containsPoint","containsBox","getParameter","intersectsBox","intersectsSphere","sphere","clampPoint","intersectsPlane","plane","constant","intersectsTriangle","triangle","axes","distanceToPoint","clampedPoint","getBoundingSphere","intersect","isBox3","v0","extents","j","p0","p1","p2","optionalCenter","maxRadiusSq","radiusSum","deltaLengthSq","getBoundingBox","getMaxScaleOnAxis","missingRadiusHalf","origin","direction","ray","at","lookAt","recast","closestPointToPoint","directionDistance","distanceSqToPoint","distanceSqToSegment","optionalPointOnRay","optionalPointOnSegment","segExtent","a01","b0","b1","s0","sqrDist","extDet","invDet","intersectSphere","tca","radius2","thc","t0","t1","distanceToPlane","intersectPlane","distToPoint","intersectBox","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","intersectTriangle","backfaceCulling","DdN","DdQxE2","DdE1xQ","QdN","n14","n24","n34","n41","n42","n43","n44","copyPosition","setFromMatrix3","makeBasis","extractRotation","scaleX","scaleY","scaleZ","makeRotationFromEuler","af","bf","ce","cf","de","df","ac","ad","bc","bd","makeRotationFromQuaternion","compose","eye","up","a14","a24","a34","a41","a42","a43","a44","b14","b24","b34","b41","b42","b43","b44","setPosition","t14","scaleXSq","scaleYSq","scaleZSq","makeTranslation","makeRotationX","makeRotationY","makeRotationZ","makeRotationAxis","makeScale","makeShear","yx","zx","zy","position","x2","y2","z2","wx","wy","wz","decompose","invSX","invSY","invSZ","makePerspective","left","right","top","bottom","near","far","makeOrthographic","isMatrix4","DefaultOrder","asin","setFromQuaternion","setFromVector3","reorder","newOrder","toVector3","optionalResult","RotationOrders","mask","channel","enable","enableAll","toggle","disable","disableAll","layers","parent","DefaultUp","onRotationChange","onQuaternionChange","defineProperties","configurable","enumerable","modelViewMatrix","normalMatrix","DefaultMatrixAutoUpdate","matrixWorldNeedsUpdate","visible","castShadow","receiveShadow","frustumCulled","renderOrder","animations","onBeforeRender","onAfterRender","setRotationFromAxisAngle","setRotationFromEuler","setRotationFromMatrix","setRotationFromQuaternion","rotateOnAxis","rotateOnWorldAxis","rotateX","rotateY","rotateZ","translateOnAxis","distance","translateX","translateY","translateZ","localToWorld","worldToLocal","isCamera","isLight","isObject3D","remove","removeFromParent","clear","attach","getObjectById","id","getObjectByProperty","getObjectByName","child","getWorldPosition","getWorldQuaternion","getWorldScale","getWorldDirection","raycast","traverse","traverseVisible","traverseAncestors","updateMatrixWorld","force","updateParents","updateChildren","geometries","materials","shapes","skeletons","isInstancedMesh","instanceMatrix","instanceColor","serialize","library","element","isScene","background","isColor","environment","isMesh","isLine","isPoints","parameters","shape","isSkinnedMesh","bindMode","bindMatrix","skeleton","material","uuids","animation","extractFromCache","cache","values","key","recursive","getNormal","targetLengthSq","getBarycoord","dot00","dot01","dot02","dot11","dot12","denom","invDenom","getUV","p3","uv1","uv2","uv3","isFrontFacing","setFromPointsAndIndices","i0","i1","i2","setFromAttributeAndIndices","getArea","getMidpoint","getPlane","setFromCoplanarPoints","d4","vc","d5","d6","vb","va","fog","blending","side","vertexColors","opacity","transparent","blendSrc","blendDst","blendEquation","blendSrcAlpha","blendDstAlpha","blendEquationAlpha","depthFunc","depthTest","depthWrite","stencilWriteMask","stencilFunc","stencilRef","stencilFuncMask","stencilFail","stencilZFail","stencilZPass","stencilWrite","clippingPlanes","clipIntersection","clipShadows","shadowSide","colorWrite","precision","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","dithering","alphaToCoverage","premultipliedAlpha","toneMapped","_alphaTest","alphaTest","onBuild","onBeforeCompile","customProgramCacheKey","setValues","newValue","flatShading","currentValue","isRoot","color","getHex","roughness","metalness","sheen","sheenColor","sheenRoughness","emissive","emissiveIntensity","specular","specularIntensity","specularColor","shininess","clearcoat","clearcoatRoughness","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","clearcoatNormalScale","map","matcap","alphaMap","lightMap","lightMapIntensity","aoMap","aoMapIntensity","bumpMap","bumpScale","normalMap","normalMapType","normalScale","displacementMap","displacementScale","displacementBias","roughnessMap","metalnessMap","emissiveMap","specularMap","specularIntensityMap","specularColorMap","envMap","combine","envMapIntensity","reflectivity","refractionRatio","gradientMap","transmission","transmissionMap","thickness","thicknessMap","attenuationDistance","attenuationColor","sizeAttenuation","linewidth","dashSize","gapSize","wireframe","wireframeLinewidth","wireframeLinecap","wireframeLinejoin","srcPlanes","dstPlanes","isMaterial","setRGB","setHex","setStyle","hex","setHSL","style","handleAlpha","string","parseFloat","exec","components","parseInt","charAt","setColorName","toLowerCase","copyGammaToLinear","gammaFactor","copyLinearToGamma","safeInverse","convertGammaToLinear","convertLinearToGamma","copySRGBToLinear","copyLinearToSRGB","convertSRGBToLinear","convertLinearToSRGB","getHexString","getHSL","hue","saturation","lightness","delta","getStyle","offsetHSL","addColors","color1","color2","lerpColors","lerpHSL","normalized","NAMES","isMeshBasicMaterial","itemSize","TypeError","usage","updateRange","onUploadCallback","setUsage","copyAt","index1","index2","copyColorsArray","colors","copyVector2sArray","vectors","copyVector3sArray","copyVector4sArray","setXY","setXYZ","setXYZW","onUpload","isBufferAttribute","Uint16Array","Uint32Array","isFloat16BufferAttribute","Float32Array","attributes","morphAttributes","morphTargetsRelative","groups","boundingSphere","drawRange","start","getIndex","setIndex","getAttribute","setAttribute","deleteAttribute","hasAttribute","addGroup","materialIndex","clearGroups","setDrawRange","tangent","computeBoundingSphere","morphAttributesPosition","isGLBufferAttribute","morphAttribute","isNaN","jl","computeTangents","indices","positions","normals","uvs","nVertices","tangents","tan1","tan2","vA","vB","vC","uvA","uvB","uvC","sdir","tdir","handleTriangle","isFinite","group","tmp2","n2","handleVertex","computeVertexNormals","positionAttribute","normalAttribute","pA","pB","pC","nA","nB","nC","cb","ab","normalizeNormals","merge","isBufferGeometry","attribute1","attributeArray1","attribute2","attributeArray2","attributeOffset","toNonIndexed","convertBufferAttribute","array2","isInterleavedBufferAttribute","stride","geometry2","newAttribute","morphArray","keys","hasMorphAttributes","attributeArray","assign","updateMorphTargets","morphTargetInfluences","morphTargetDictionary","ml","String","morphTargets","raycaster","intersection","morphPosition","groupMaterial","end","faceIndex","face","isGeometry","morphInfluences","influence","boneTransform","widthSegments","heightSegments","depthSegments","scope","vertices","numberOfVertices","groupStart","buildPlane","udir","vdir","gridX","gridY","segmentWidth","segmentHeight","widthHalf","heightHalf","depthHalf","gridX1","gridY1","vertexCounter","groupCount","fromJSON","property","uniforms","merged","defines","vertexShader","fragmentShader","lights","clipping","extensions","derivatives","fragDepth","drawBuffers","shaderTextureLOD","defaultAttributeValues","index0AttributeName","uniformsNeedUpdate","glslVersion","uniform","isShaderMaterial","zoom","focus","view","filmGauge","filmOffset","updateProjectionMatrix","setFocalLength","focalLength","vExtentSlope","getFilmHeight","atan","getFocalLength","tan","getEffectiveFOV","getFilmWidth","setViewOffset","fullWidth","fullHeight","enabled","offsetX","offsetY","clearViewOffset","skew","isPerspectiveCamera","renderTarget","isWebGLCubeRenderTarget","cameraPX","cameraNX","cameraPY","cameraNY","cameraPZ","cameraNZ","renderer","scene","currentXrEnabled","xr","currentRenderTarget","getRenderTarget","setRenderTarget","render","isCubeTexture","dummy","isInteger","_needsFlipEnvMap","fromEquirectangularTexture","shader","tEquirect","mesh","currentMinFilter","stencil","setComponents","setFromNormalAndCoplanarPoint","inverseNormalLength","distanceToSphere","projectPoint","intersectLine","line","intersectsLine","startSign","endSign","coplanarPoint","optionalNormalMatrix","referencePoint","isPlane","p4","p5","planes","frustum","setFromProjectionMatrix","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","intersectsObject","intersectsSprite","sprite","negRadius","isAnimating","animationLoop","requestId","onAnimationFrame","time","frame","requestAnimationFrame","stop","cancelAnimationFrame","setAnimationLoop","setContext","gl","capabilities","isWebGL2","buffers","WeakMap","createBuffer","bufferType","buffer","bindBuffer","bufferData","Float64Array","Int16Array","Int32Array","Int8Array","Uint8Array","Uint8ClampedArray","bytesPerElement","BYTES_PER_ELEMENT","updateBuffer","bufferSubData","subarray","get","deleteBuffer","delete","cached","elementSize","width_half","height_half","segment_width","segment_height","alphatest_pars_fragment","normal_pars_fragment","normal_pars_vertex","normal_vertex","output_fragment","vertex$g","fragment$g","vertex$f","fragment$f","vertex$e","fragment$e","vertex$d","fragment$d","vertex$c","fragment$c","vertex$b","fragment$b","vertex$a","fragment$a","vertex$9","fragment$9","vertex$8","fragment$8","vertex$7","fragment$7","vertex$6","fragment$6","vertex$5","fragment$5","vertex$4","fragment$4","vertex$3","fragment$3","vertex$2","fragment$2","vertex$1","fragment$1","background_vert","background_frag","cube_vert","cube_frag","depth_vert","depth_frag","distanceRGBA_vert","distanceRGBA_frag","equirect_vert","equirect_frag","linedashed_vert","linedashed_frag","meshbasic_vert","meshbasic_frag","meshlambert_vert","meshlambert_frag","meshmatcap_vert","meshmatcap_frag","meshnormal_vert","meshnormal_frag","meshphong_vert","meshphong_frag","meshphysical_vert","meshphysical_frag","meshtoon_vert","meshtoon_frag","points_vert","points_frag","shadow_vert","shadow_frag","sprite_vert","sprite_frag","diffuse","uvTransform","uv2Transform","specularmap","envmap","flipEnvMap","ior","maxMipLevel","aomap","lightmap","emissivemap","bumpmap","normalmap","displacementmap","roughnessmap","metalnessmap","gradientmap","fogDensity","fogNear","fogFar","fogColor","ambientLightColor","lightProbe","directionalLights","properties","directionalLightShadows","shadowBias","shadowNormalBias","shadowRadius","shadowMapSize","directionalShadowMap","directionalShadowMatrix","spotLights","coneCos","penumbraCos","decay","spotLightShadows","spotShadowMap","spotShadowMatrix","pointLights","pointLightShadows","shadowCameraNear","shadowCameraFar","pointShadowMap","pointShadowMatrix","hemisphereLights","skyColor","groundColor","rectAreaLights","ltc_1","ltc_2","basic","lambert","phong","standard","toon","dashed","totalSize","t2D","cube","equirect","distanceRGBA","referencePosition","nearDistance","farDistance","shadow","physical","sheenColorMap","sheenRoughnessMap","transmissionSamplerSize","transmissionSamplerMap","cubemaps","state","objects","clearColor","clearAlpha","planeMesh","boxMesh","currentBackground","currentBackgroundVersion","currentTonemapping","renderList","forceClear","session","getSession","environmentBlendMode","setClear","autoClear","autoClearColor","autoClearDepth","autoClearStencil","toneMapping","unshift","getClearColor","setClearColor","getClearAlpha","setClearAlpha","maxVertexAttributes","extension","vaoAvailable","bindingStates","defaultState","createBindingState","currentState","setup","program","updateBuffers","getBindingState","bindVertexArrayObject","saveCache","setupVertexAttributes","createVertexArrayObject","createVertexArray","createVertexArrayOES","vao","bindVertexArray","bindVertexArrayOES","deleteVertexArrayObject","deleteVertexArray","deleteVertexArrayOES","programMap","stateMap","newAttributes","enabledAttributes","attributeDivisors","cachedAttributes","geometryAttributes","attributesNum","cachedAttribute","geometryAttribute","initAttributes","enableAttribute","enableAttributeAndDivisor","meshPerAttribute","enableVertexAttribArray","disableUnusedAttributes","disableVertexAttribArray","vertexAttribPointer","vertexAttribIPointer","isInstancedBufferGeometry","programAttributes","getAttributes","materialDefaultAttributeValues","programAttribute","location","isInstancedInterleavedBuffer","locationSize","_maxInstanceCount","isInstancedBufferAttribute","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttrib1fv","reset","geometryId","programId","releaseStatesOfGeometry","releaseStatesOfProgram","resetDefaultState","info","mode","setMode","drawArrays","renderInstances","primcount","methodName","maxAnisotropy","getMaxAnisotropy","has","MAX_TEXTURE_MAX_ANISOTROPY_EXT","getMaxPrecision","getShaderPrecisionFormat","WebGL2RenderingContext","WebGL2ComputeRenderingContext","maxPrecision","logarithmicDepthBuffer","maxTextures","maxVertexTextures","maxTextureSize","maxCubemapSize","maxAttributes","maxVertexUniforms","maxVaryings","maxFragmentUniforms","vertexTextures","floatFragmentTextures","floatVertexTextures","maxSamples","globalState","numGlobalPlanes","localClippingEnabled","renderingShadows","viewNormalMatrix","numPlanes","numIntersection","init","enableLocalClipping","projectPlanes","beginShadows","endShadows","resetGlobalState","setState","useCache","materialProperties","nGlobal","lGlobal","dstArray","clippingState","skipTransform","nPlanes","flatSize","viewMatrix","i4","mapTextureMapping","cubemap","onTextureDispose","scaleW","scaleH","isOrthographicCamera","isRawShaderMaterial","LOD_MIN","LOD_MAX","SIZE_MAX","EXTRA_LOD_SIGMA","TOTAL_LODS","MAX_SAMPLES","ENCODINGS","_flatCamera","_lodPlanes","_sizeLods","_sigmas","_createPlanes","_clearColor","_oldTarget","PHI","INV_PHI","_axisDirections","PMREMGenerator","_renderer","_pingPongRenderTarget","_blurMaterial","_getBlurShader","_equirectShader","_cubemapShader","_compileMaterial","fromScene","sigma","cubeUVRenderTarget","_allocateTargets","_sceneToCubeUV","_blur","_applyPMREM","_cleanup","fromEquirectangular","equirectangular","_fromTexture","fromCubemap","compileCubemapShader","_getCubemapShader","compileEquirectangularShader","_getEquirectShader","outputTarget","_setViewport","_textureToCubeUV","params","_isLDR","_createRenderTarget","tmpMesh","compile","cubeCamera","upSign","forwardSign","originalAutoClear","outputEncoding","backgroundMaterial","backgroundBox","useSolidColor","col","_setEncoding","poleAxis","lodIn","lodOut","pingPongRenderTarget","_halfBlur","targetIn","targetOut","sigmaRadians","blurMaterial","STANDARD_DEVIATIONS","blurMesh","blurUniforms","pixels","radiansPerPixel","sigmaPixels","weights","sum","weight","exp","outputSize","lod","sizeLod","texelSize","cubeFaces","positionSize","uvSize","faceIndexSize","coordinates","fill","shaderMaterial","_getCommonVertexShader","_getEncodings","WebGLCubeUVMaps","cubeUVmaps","pmremGenerator","isEquirectMap","isCubeMap","isCubeTextureComplete","cubemapUV","getExtension","wireframeAttributes","onGeometryDispose","memory","updateWireframeAttribute","geometryIndex","geometryPosition","previousAttribute","getWireframeAttribute","currentAttribute","drawElements","calls","triangles","lines","instanceCount","programs","autoReset","wrapR","isDataTexture2DArray","denormalize","morph","influencesList","morphTextures","workInfluences","objectInfluences","numberOfMorphTargets","entry","hasMorphNormals","morphNormals","numberOfVertexData","vertexDataStride","morphTarget","morphNormal","morphInfluencesSum","morphBaseInfluence","getUniforms","setValue","influences","sort","MAX_SAFE_INTEGER","updateMap","buffergeometry","onInstancedMeshDispose","instancedMesh","isDataTexture3D","nBlocks","blockSize","firstElem","allocateTextureUnit","uniform1f","addr","uniform2f","uniform2fv","uniform3f","uniform3fv","uniform4f","uniform4fv","uniformMatrix2fv","uniformMatrix3fv","uniformMatrix4fv","uniform1i","uniform2iv","uniform3iv","uniform4iv","uniform1ui","uniform2uiv","uniform3uiv","uniform4uiv","unit","safeSetTexture2D","setTexture3D","safeSetTextureCube","setTexture2DArray","uniform1fv","uniform1iv","uniform1uiv","units","activeInfo","updateCache","seq","container","uniformObject","path","pathLength","lastIndex","match","matchEnd","idIsIndex","subscript","next","getProgramParameter","getActiveUniform","getUniformLocation","setOptional","upload","seqWithValue","createShader","shaderSource","compileShader","split","join","status","getShaderParameter","errors","getShaderInfoLog","trim","getShaderSource","functionName","toneMappingName","chunks","extensionDerivatives","envMapCubeUV","tangentSpaceNormalMap","shaderID","extensionFragDepth","rendererExtensionFragDepth","extensionDrawBuffers","rendererExtensionDrawBuffers","extensionShaderTextureLOD","rendererExtensionShaderTextureLod","filter","getActiveAttrib","getAttribLocation","replace","numDirLights","numSpotLights","numRectAreaLights","numPointLights","numHemiLights","numDirLightShadows","numSpotLightShadows","numPointLightShadows","numClippingPlanes","numClipIntersection","include","snippet","precisionstring","shadowMapTypeDefine","shadowMapType","envMapTypeDefine","envMapMode","envMapModeDefine","envMapBlendingDefine","cacheKey","gammaFactorDefine","customExtensions","customDefines","createProgram","prefixVertex","prefixFragment","versionString","shaderName","instancing","instancingColor","supportsVertexTextures","maxBones","useFog","fogExp2","objectSpaceNormalMap","vertexTangents","vertexAlphas","vertexUvs","uvsVertexOnly","skinning","useVertexTexture","morphTargetsCount","doubleSided","flipSided","shadowMapEnabled","physicallyCorrectLights","mapEncoding","matcapEncoding","envMapEncoding","emissiveMapEncoding","specularColorMapEncoding","sheenColorMapEncoding","lightMapEncoding","depthPacking","vertexGlsl","fragmentGlsl","glVertexShader","glFragmentShader","attachShader","bindAttribLocation","linkProgram","debug","checkShaderErrors","programLog","getProgramInfoLog","vertexLog","fragmentLog","runnable","haveDiagnostics","vertexErrors","fragmentErrors","getError","diagnostics","prefix","deleteShader","cachedUniforms","destroy","deleteProgram","usedTimes","cubeuvmaps","shaderIDs","parameterNames","getMaxBones","bones","nVertexUniforms","nVertexMatrices","getTextureEncodingFromMap","getParameters","shadows","isMeshStandardMaterial","useAlphaTest","useClearcoat","isFogExp2","directional","spot","rectArea","hemi","shadowMap","getProgramCacheKey","acquireProgram","pl","preexistingProgram","releaseProgram","pop","groupOrder","renderItems","renderItemsIndex","opaque","transmissive","defaultProgram","getNextRenderItem","renderItem","customOpaqueSort","customTransparentSort","finish","lists","renderCallDepth","list","light","halfWidth","halfHeight","lightA","lightB","shadowCache","hash","directionalLength","pointLength","spotLength","rectAreaLength","hemiLength","numDirectionalShadows","numPointShadows","numSpotShadows","ambient","probe","directionalShadow","spotShadow","rectAreaLTC1","rectAreaLTC2","pointShadow","vector3","matrix42","scaleFactor","intensity","isAmbientLight","isLightProbe","sh","coefficients","isDirectionalLight","shadowUniforms","bias","normalBias","mapSize","isSpotLight","penumbra","isRectAreaLight","isPointLight","isHemisphereLight","LTC_FLOAT_1","LTC_FLOAT_2","LTC_HALF_1","LTC_HALF_2","setupView","lightsArray","shadowsArray","pushLight","pushShadow","shadowLight","setupLights","setupLightsView","renderStates","renderState","isMeshDepthMaterial","isMeshDistanceMaterial","vertex","fragment","_objects","_capabilities","_frustum","_shadowMapSize","_viewportSize","_viewport","_depthMaterial","_distanceMaterial","_materialCache","_maxTextureSize","shadowMaterialVertical","VSM_SAMPLES","shadow_pass","resolution","shadowMaterialHorizontal","HORIZONTAL_PASS","fullScreenTri","fullScreenMesh","autoUpdate","activeCubeFace","getActiveCubeFace","activeMipmapLevel","getActiveMipmapLevel","_state","setBlending","setTest","setScissorTest","shadowFrameExtents","getFrameExtents","isPointLightShadow","pars","mapPass","viewportCount","getViewportCount","vp","getViewport","updateMatrices","getFrustum","renderObject","VSMPass","blurSamples","renderBufferDirect","getDepthMaterial","result","customMaterial","customDistanceMaterial","customDepthMaterial","keyA","keyB","materialsForVariant","cachedMaterial","shadowCamera","k","kl","depthMaterial","ColorBuffer","locked","currentColorMask","currentColorClear","setMask","colorMask","setLocked","lock","DepthBuffer","currentDepthMask","currentDepthFunc","currentDepthClear","depthMask","setFunc","clearDepth","StencilBuffer","currentStencilMask","currentStencilFunc","currentStencilRef","currentStencilFuncMask","currentStencilFail","currentStencilZFail","currentStencilZPass","currentStencilClear","stencilTest","stencilMask","setOp","stencilOp","clearStencil","colorBuffer","enabledCapabilities","xrFramebuffer","currentBoundFramebuffers","currentProgram","currentBlendingEnabled","currentBlending","currentBlendEquation","currentBlendSrc","currentBlendDst","currentBlendEquationAlpha","currentBlendSrcAlpha","currentBlendDstAlpha","currentPremultipledAlpha","currentFlipSided","currentCullFace","currentLineWidth","currentPolygonOffsetFactor","currentPolygonOffsetUnits","lineWidthAvailable","glVersion","currentTextureSlot","currentBoundTextures","scissorParam","viewportParam","currentScissor","currentViewport","createTexture","bindTexture","texParameteri","texImage2D","emptyTextures","setFlipSided","setCullFace","bindXRFramebuffer","framebuffer","bindFramebuffer","useProgram","equationToGL","MIN_EXT","MAX_EXT","factorToGL","blendFuncSeparate","blendFunc","blendEquationSeparate","setMaterial","frontFaceCW","setPolygonOffset","frontFace","cullFace","setLineWidth","lineWidth","factor","activeTexture","webglSlot","webglType","webglTexture","boundTexture","unbindTexture","compressedTexImage2D","apply","texImage3D","_gl","utils","_videoTextures","useOffscreenCanvas","OffscreenCanvas","err","createCanvas","resizeImage","needsPowerOfTwo","needsNewCanvas","maxSize","textureNeedsPowerOfTwo","textureNeedsGenerateMipmaps","supportsMips","generateMipmap","textureProperties","__maxMipLevel","log2","getInternalFormat","internalFormatName","glFormat","glType","filterFallback","deallocateTexture","isVideoTexture","onRenderTargetDispose","deallocateRenderTarget","__webglInit","deleteTexture","__webglTexture","renderTargetProperties","deleteFramebuffer","__webglFramebuffer","__webglDepthbuffer","deleteRenderbuffer","__webglMultisampledFramebuffer","__webglColorRenderbuffer","__webglDepthRenderbuffer","attachmentProperties","textureUnits","resetTextureUnits","textureUnit","setTexture2D","slot","updateVideoTexture","__version","complete","uploadTexture","setTextureCube","uploadCubeTexture","wrappingToGL","filterToGL","setTextureParameters","textureType","__currentAnisotropy","texParameterf","TEXTURE_MAX_ANISOTROPY_EXT","initTexture","pixelStorei","convert","glInternalFormat","mipmap","isDepthTexture","isCompressedTexture","isCompressed","cubeImage","mipmapImage","setupFrameBufferTexture","attachment","textureTarget","framebufferTexture2D","setupRenderBufferStorage","renderbuffer","isMultisample","bindRenderbuffer","getRenderTargetSamples","renderbufferStorageMultisample","renderbufferStorage","framebufferRenderbuffer","setupDepthTexture","isCube","webglDepthTexture","setupDepthRenderbuffer","createRenderbuffer","setupRenderTarget","isMultipleRenderTargets","isRenderTarget3D","createFramebuffer","glTextureType","isTexture3D","updateRenderTargetMipmap","updateMultisampleRenderTarget","blitFramebuffer","warnedTexture2D","warnedTextureCube","HALF_FLOAT_OES","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","COMPRESSED_RGB_ETC1_WEBGL","COMPRESSED_RGB8_ETC2","COMPRESSED_RGBA8_ETC2_EAC","UNSIGNED_INT_24_8_WEBGL","cameras","isArrayCamera","isGroup","_targetRay","_grip","_hand","getHandSpace","joints","inputState","pinching","getTargetRaySpace","hasLinearVelocity","linearVelocity","hasAngularVelocity","angularVelocity","getGripSpace","disconnect","inputSource","referenceSpace","inputPose","gripPose","handPose","targetRay","grip","hand","visibilityState","getPose","targetRaySpace","transform","inputjoint","jointPose","getJointPose","jointName","joint","jointRadius","indexTip","thumbTip","distanceToPinch","threshold","handedness","gripSpace","framebufferScaleFactor","referenceSpaceType","pose","glBinding","glFramebuffer","glProjLayer","glBaseLayer","glMultisampledFramebuffer","glColorRenderbuffer","glDepthRenderbuffer","xrFrame","depthStyle","clearStyle","controllers","inputSourcesMap","Map","cameraL","cameraR","cameraVR","_currentDepthNear","_currentDepthFar","cameraAutoUpdate","isPresenting","getController","controller","getControllerGrip","getHand","onSessionEvent","onSessionEnd","forEach","setFramebufferScaleFactor","setReferenceSpaceType","getReferenceSpace","getBaseLayer","getBinding","getFrame","setSession","onInputSourcesChange","getContextAttributes","xrCompatible","makeXRCompatible","layerInit","antialias","XRWebGLLayer","updateRenderState","baseLayer","WebGLRenderingContext","depthFormat","projectionlayerInit","colorFormat","XRWebGLBinding","createProjectionLayer","textureWidth","textureHeight","requestReferenceSpace","inputSources","removed","added","cameraLPos","cameraRPos","setProjectionFromUnion","ipd","projL","projR","topFov","bottomFov","leftFov","rightFov","zOffset","xOffset","near2","far2","left2","right2","top2","bottom2","updateCamera","depthNear","depthFar","getCamera","getFoveation","fixedFoveation","setFoveation","foveation","onAnimationFrameCallback","getViewerPose","views","cameraVRNeedsUpdate","glSubImage","getViewSubImage","depthStencilTexture","colorTexture","invalidateFramebuffer","refreshFogUniforms","isFog","density","refreshMaterialUniforms","pixelRatio","transmissionRenderTarget","refreshUniformsCommon","isMeshLambertMaterial","refreshUniformsLambert","isMeshToonMaterial","refreshUniformsToon","isMeshPhongMaterial","refreshUniformsPhong","isMeshPhysicalMaterial","refreshUniformsPhysical","refreshUniformsStandard","isMeshMatcapMaterial","refreshUniformsMatcap","refreshUniformsDepth","refreshUniformsDistance","isMeshNormalMaterial","refreshUniformsNormal","isLineBasicMaterial","refreshUniformsLine","isLineDashedMaterial","refreshUniformsDash","isPointsMaterial","refreshUniformsPoints","isSpriteMaterial","refreshUniformsSprites","isShadowMaterial","uvScaleMap","uv2ScaleMap","display","_alpha","_depth","_stencil","_antialias","_premultipliedAlpha","_preserveDrawingBuffer","preserveDrawingBuffer","_powerPreference","powerPreference","_failIfMajorPerformanceCaveat","failIfMajorPerformanceCaveat","currentRenderList","currentRenderState","renderListStack","renderStateStack","domElement","sortObjects","toneMappingExposure","_this","_isContextLost","_currentActiveCubeFace","_currentActiveMipmapLevel","_currentRenderTarget","_currentMaterialId","_currentCamera","_currentViewport","_currentScissor","_currentScissorTest","_width","_height","_pixelRatio","_opaqueSort","_transparentSort","_scissor","_scissorTest","_currentDrawBuffers","_clippingEnabled","_localClippingEnabled","_transmissionRenderTarget","_vector3","_emptyScene","overrideMaterial","getTargetPixelRatio","contextNames","contextAttributes","contextName","onContextLost","onContextRestore","isWebGL1Renderer","shift","message","programCache","renderLists","morphtargets","bufferRenderer","indexedBufferRenderer","initGLContext","forceContextLoss","loseContext","forceContextRestore","restoreContext","getPixelRatio","setPixelRatio","updateStyle","setViewport","getDrawingBufferSize","setDrawingBufferSize","getCurrentViewport","getScissor","setScissor","getScissorTest","boolean","setOpaqueSort","method","setTransparentSort","bits","onXRSessionStart","onXRSessionEnd","preventDefault","infoAutoReset","shadowMapAutoUpdate","shadowMapNeedsUpdate","onMaterialDispose","deallocateMaterial","releaseMaterialProgramReferences","setProgram","rangeFactor","dataCount","rangeStart","rangeCount","drawStart","drawEnd","drawCount","isLineSegments","isLineLoop","isSprite","material2","getProgram","window","projectObject","camera2","renderScene","isLOD","opaqueObjects","transmissiveObjects","transparentObjects","renderTransmissionPass","renderObjects","needsAntialias","renderTargetType","currentToneMapping","lightsStateVersion","programCacheKey","updateCommonMaterialProperties","needsLights","materialNeedsLights","progUniforms","uniformsList","needsProgramChange","refreshProgram","refreshMaterial","refreshLights","p_uniforms","m_uniforms","uCamPos","cameraPosition","boneTexture","computeBoneTexture","boneTextureSize","markUniformsLightsNeedsUpdate","framebufferBound","drawBuffersWEBGL","layer","framebufferTextureLayer","readRenderTargetPixels","activeCubeFaceIndex","textureFormat","halfFloatSupportedByExt","checkFramebufferStatus","readPixels","copyFramebufferToTexture","level","levelScale","copyTexImage2D","copyTextureToTexture","srcTexture","dstTexture","texSubImage2D","compressedTexSubImage2D","copyTextureToTexture3D","sourceBox","glTarget","unpackRowLen","unpackImageHeight","unpackSkipPixels","unpackSkipRows","unpackSkipImages","texSubImage3D","compressedTexSubImage3D","resetState","__THREE_DEVTOOLS__","CustomEvent","detail","isWebGLRenderer","arrayBuffers","_uuid","ib","isInterleavedBuffer","interleavedBuffer","interleavedBuffers","float32Array","vertexPosition","mvPosition","bindMatrixInverse","bind","calculateInverses","normalizeSkinWeights","skinWeight","skinIndex","boneIndex","boneInverses","isBone","getColorAt","getMatrixAt","raycastTimes","instanceId","setColorAt","setMatrixAt","linecap","linejoin","computeLineDistances","lineDistances","localThreshold","localThresholdSq","vStart","vEnd","interSegment","interRay","distSq","rayPointDistanceSq","intersectPoint","distanceToRay","video","updateVideo","requestVideoFrameCallback","hasVideoFrameCallback","readyState","HAVE_CURRENT_DATA","isCanvasTexture","CylinderGeometry","radiusTop","radiusBottom","radialSegments","openEnded","thetaStart","thetaLength","indexArray","generateTorso","generateCap","slope","indexRow","sinTheta","cosTheta","centerIndexStart","centerIndexEnd","ConeGeometry","arcLengthDivisions","getPoint","getPointAt","optionalTarget","getUtoTmapping","getPoints","divisions","getSpacedPoints","getLength","lengths","getLengths","cacheArcLengths","current","last","updateArcLengths","arcLengths","targetArcLength","low","high","comparison","lengthBefore","lengthAfter","segmentLength","segmentFraction","getTangent","t2","pt1","pt2","getTangentAt","computeFrenetFrames","segments","closed","binormals","vec","mat","MAX_VALUE","tz","json","aX","aY","xRadius","yRadius","aStartAngle","aEndAngle","aClockwise","aRotation","twoPi","deltaAngle","samePoints","isEllipseCurve","aRadius","isArcCurve","c0","initCatmullRom","x3","tension","initNonuniformCatmullRom","dt0","dt1","dt2","calc","t3","curveType","intPoint","isCatmullRomCurve3","v3","isCubicBezierCurve","isCubicBezierCurve3","isLineCurve","isLineCurve3","isQuadraticBezierCurve","isQuadraticBezierCurve3","isSplineCurve","freeze","__proto__","curves","autoClose","curve","closePath","startPoint","endPoint","curveLengths","getCurveLengths","diff","lens","cacheLengths","sums","pts","currentPoint","moveTo","lineTo","quadraticCurveTo","aCPx","aCPy","bezierCurveTo","aCP1x","aCP1y","aCP2x","aCP2y","splineThru","npts","concat","arc","absarc","absellipse","ellipse","firstPoint","lastPoint","holes","getPointsHoles","holesPts","extractPoints","hole","triangulate","holeIndices","dim","hasHoles","outerLen","outerNode","prev","invSize","clockwise","again","steiner","ear","pass","minTX","minTY","maxTX","maxTY","prevZ","nextZ","queue","hx","hy","mx","my","tanMin","tail","numMerges","pSize","qSize","inSize","leftmost","q1","q2","o1","o2","o3","o4","num","inside","a2","b2","an","bp","contour","isClockWise","triangulateShape","faces","holeIndex","verticesArray","uvArray","addShape","placeholder","curveSegments","steps","bevelEnabled","bevelThickness","bevelSize","bevelOffset","bevelSegments","extrudePath","uvgen","UVGenerator","amount","extrudePts","extrudeByPath","splineTube","binormal","position2","shapePoints","reverse","hl","ahole","scalePt2","pt","vlen","flen","getBevelVec","inPt","inPrev","inNext","v_trans_x","v_trans_y","shrink_by","v_prev_x","v_prev_y","v_next_x","v_next_y","v_prev_lensq","collinear0","v_prev_len","v_next_len","ptPrevShift_x","ptPrevShift_y","ptNextShift_x","ptNextShift_y","sf","v_trans_lensq","direction_eq","contourMovements","holesMovements","oneHoleMovements","verticesMovements","bs","vert","buildLidFaces","buildSideFaces","f3","layeroffset","sidewalls","sl","slen1","slen2","f4","addVertex","nextIndex","generateTopUV","addUV","generateSideWallUV","vector2","geometryShapes","indexA","indexB","indexC","a_x","a_y","b_x","b_y","c_x","c_y","indexD","a_z","b_z","c_z","d_x","d_y","d_z","indexOffset","shapeVertices","shapeHoles","shapeHole","phiStart","phiLength","thetaEnd","grid","verticesRow","uOffset","TubeGeometry","tubularSegments","frames","P","generateBufferData","generateSegment","generateUVs","generateIndices","N","B","_sheen","_clearcoat","_transmission","arraySlice","from","to","isTypedArray","convertArray","forceClone","ArrayBuffer","isView","DataView","getKeyframeOrder","times","compareTime","sortedArray","nValues","srcOffset","flattenJSON","jsonKeys","valuePropertyName","subclip","sourceClip","startFrame","endFrame","fps","clip","tracks","track","valueSize","getValueSize","minStartTime","resetDuration","makeClipAdditive","targetClip","referenceFrame","referenceClip","numTracks","referenceTime","referenceTrack","referenceTrackType","ValueTypeName","targetTrack","find","referenceOffset","referenceValueSize","createInterpolant","isInterpolantFactoryMethodGLTFCubicSpline","targetOffset","targetValueSize","referenceValue","startIndex","endIndex","interpolant","evaluate","resultBuffer","referenceQuat","numTimes","valueStart","valueEnd","blendMode","parameterPositions","sampleValues","sampleSize","_cachedIndex","settings","DefaultSettings_","pp","validate_interval","seek","linear_scan","forward_scan","giveUpAt","afterEnd_","t1global","beforeStart_","mid","intervalChanged_","interpolate_","getSettings_","copySampleValue_","_weightPrev","_offsetPrev","_weightNext","_offsetNext","endingStart","endingEnd","iPrev","iNext","tPrev","tNext","halfDt","o0","oP","oN","wP","wN","ppp","sP","sN","offset1","offset0","weight1","weight0","interpolation","TimeBufferType","ValueBufferType","setInterpolation","DefaultInterpolation","trackType","getInterpolation","InterpolantFactoryMethodDiscrete","InterpolantFactoryMethodLinear","InterpolantFactoryMethodSmooth","factoryMethod","timeOffset","timeScale","startTime","endTime","nKeys","validate","valid","prevTime","currTime","optimize","smoothInterpolation","writeIndex","keep","timeNext","offsetP","offsetN","readOffset","writeOffset","TypedKeyframeTrack","duration","jsonTracks","frameTime","clipTracks","CreateFromMorphTargetSequence","morphTargetSequence","noLoop","numMorphTargets","findByName","objectOrClipArray","clipArray","o","CreateClipsFromMorphTargetSequences","animationToMorphTargets","pattern","parts","animationMorphTargets","clips","parseAnimation","addNonemptyTrack","trackName","animationKeys","propertyName","destTracks","clipName","hierarchyTracks","hierarchy","morphTargetNames","morphTargetName","animationKey","boneName","typeName","files","file","onLoad","onProgress","onError","isLoading","itemsLoaded","itemsTotal","urlModifier","handlers","onStart","itemStart","itemEnd","itemError","resolveURL","setURLModifier","addHandler","regex","loader","removeHandler","getHandler","global","manager","crossOrigin","withCredentials","resourcePath","requestHeader","load","loadAsync","Promise","resolve","reject","setCrossOrigin","setWithCredentials","setPath","setResourcePath","setRequestHeader","setTimeout","req","Request","headers","Headers","credentials","fetch","then","response","callbacks","reader","body","getReader","contentLength","total","lengthComputable","loaded","ReadableStream","readData","read","done","close","byteLength","ProgressEvent","enqueue","statusText","stream","Response","responseType","arrayBuffer","blob","text","parser","DOMParser","parseFromString","mimeType","catch","setResponseType","setMimeType","onImageLoad","removeEventListeners","onImageError","substr","urls","loadTexture","_frameExtents","_viewportCount","_viewports","shadowMatrix","viewportIndex","isSpotLightShadow","power","_cubeDirections","_cubeUps","isDirectionalLightShadow","zero","getAt","coeff","getIrradianceAt","addScaledSH","getBasisAt","shBasis","isSphericalHarmonics3","decodeText","TextDecoder","decode","fromCharCode","decodeURIComponent","escape","extractUrlBase","lastIndexOf","createImageBitmap","setOptions","fetchOptions","res","colorSpaceConversion","imageBitmap","isImageBitmapLoader","webkitAudioContext","bufferCopy","decodeAudioData","audioBuffer","sky","ground","isHemisphereLightProbe","isAmbientLightProbe","gain","createGain","connect","getInput","autoplay","detune","loop","loopStart","loopEnd","playbackRate","isPlaying","hasPlaybackControl","sourceType","_startedAt","_progress","_connected","filters","getOutput","setNodeSource","audioNode","setMediaElementSource","mediaElement","createMediaElementSource","setMediaStreamSource","mediaStream","createMediaStreamSource","setBuffer","play","delay","currentTime","createBufferSource","onended","onEnded","setDetune","setPlaybackRate","pause","getFilters","setFilters","setTargetAtTime","getDetune","getFilter","setFilter","getPlaybackRate","getLoop","setLoop","setLoopStart","setLoopEnd","getVolume","setVolume","binding","mixFunction","mixFunctionAdditive","setIdentity","_slerp","_slerpAdditive","_setAdditiveIdentityQuaternion","_workIndex","_select","_setAdditiveIdentityOther","_lerp","_lerpAdditive","_setAdditiveIdentityNumeric","_mixBufferRegion","_mixBufferRegionAdditive","_setIdentity","_origIndex","_addIndex","cumulativeWeight","cumulativeWeightAdditive","useCount","referenceCount","accumulate","accuIndex","currentWeight","mix","accumulateAdditive","weightAdditive","originalValueOffset","saveOriginalState","getValue","restoreOriginalState","targetIndex","workOffset","RegExp","targetGroup","optionalParsedPath","parsedPath","parseTrackName","_targetGroup","_bindings","subscribe_","firstValidIndex","nCachedObjects_","bindings","unbind","rootNode","node","findNode","nodeName","_getValue_unbound","_setValue_unbound","create","root","isAnimationObjectGroup","sanitizeNodeName","matches","results","objectName","objectIndex","propertyIndex","lastDot","substring","bone","getBoneByName","searchNodeSubtree","childNode","subTreeNode","_getValue_unavailable","_setValue_unavailable","_getValue_direct","targetObject","_getValue_array","resolvedProperty","_getValue_arrayElement","_getValue_toArray","_setValue_direct","_setValue_direct_setNeedsUpdate","_setValue_direct_setMatrixWorldNeedsUpdate","_setValue_array","dest","_setValue_array_setNeedsUpdate","_setValue_array_setMatrixWorldNeedsUpdate","_setValue_arrayElement","_setValue_arrayElement_setNeedsUpdate","_setValue_arrayElement_setMatrixWorldNeedsUpdate","_setValue_fromArray","_setValue_fromArray_setNeedsUpdate","_setValue_fromArray_setMatrixWorldNeedsUpdate","targetArray","sourceArray","nodeProperty","versioning","Versioning","None","NeedsUpdate","MatrixWorldNeedsUpdate","bindingType","BindingType","Direct","ArrayElement","HasFromToArray","EntireArray","GetterByBindingType","SetterByBindingTypeAndVersioning","mixer","localRoot","_mixer","_clip","_localRoot","nTracks","interpolants","interpolantSettings","_interpolantSettings","_interpolants","_propertyBindings","_cacheIndex","_byClipCacheIndex","_timeScaleInterpolant","_weightInterpolant","_loopCount","_startTime","_effectiveTimeScale","_effectiveWeight","repetitions","paused","clampWhenFinished","zeroSlopeAtStart","zeroSlopeAtEnd","_activateAction","_deactivateAction","stopFading","stopWarping","isRunning","_isActiveAction","isScheduled","startAt","setEffectiveWeight","getEffectiveWeight","fadeIn","_scheduleFading","fadeOut","crossFadeFrom","fadeOutAction","warp","fadeInDuration","fadeOutDuration","startEndRatio","endStartRatio","crossFadeTo","fadeInAction","weightInterpolant","_takeBackControlInterpolant","setEffectiveTimeScale","getEffectiveTimeScale","setDuration","syncWith","action","halt","startTimeScale","endTimeScale","_lendControlInterpolant","timeScaleInterpolant","getMixer","getClip","getRoot","_root","_update","deltaTime","timeDirection","_updateWeight","timeRunning","_updateTimeScale","clipTime","_updateTime","propertyMixers","interpolantValue","loopCount","pingPong","_setEndings","handle_stop","loopDelta","pending","atStart","atEnd","weightNow","weightThen","_initMemoryManager","_accuIndex","_bindAction","prototypeAction","rootUuid","bindingsByRoot","_bindingsByRootAndName","bindingsByName","_addInactiveBinding","clipUuid","actionsForClip","_actionsByClip","knownActions","_addInactiveAction","_lendBinding","_lendAction","_takeBackBinding","_takeBackAction","_actions","_nActiveActions","_nActiveBindings","_controlInterpolants","_nActiveControlInterpolants","stats","actions","inUse","controlInterpolants","actionsByClip","actionByRoot","_removeInactiveAction","lastInactiveAction","cacheIndex","knownActionsForClip","lastKnownAction","byClipCacheIndex","_removeInactiveBindingsForAction","_removeInactiveBinding","prevIndex","lastActiveIndex","firstInactiveAction","firstInactiveIndex","lastActiveAction","bindingByName","propBinding","lastInactiveBinding","firstInactiveBinding","lastActiveBinding","_controlInterpolantsResultBuffer","__cacheIndex","lastActiveInterpolant","clipAction","optionalRoot","clipObject","existingAction","newAction","stopAllAction","nActions","nBindings","setTime","timeInSeconds","uncacheClip","actionsToRemove","uncacheRoot","uncacheAction","isSkeletonHelper","boneList","construct","fromPoints","setColors","Handlers","empty","isIntersectionBox","isIntersectionSphere","setFromMatrix","flattenToArrayOffset","multiplyVector3","multiplyVector3Array","applyToBufferAttribute","applyToVector3Array","getInverse","extractPosition","getPosition","multiplyToArray","multiplyVector4","rotateAxis","crossVector","rotateByAxis","makeFrustum","isIntersectionLine","inverse","isIntersectionPlane","barycoordFromPoint","midpoint","prototypenormal","extractAllPoints","extrude","makeGeometry","fromAttribute","distanceToManhattan","lengthManhattan","setEulerFromRotationMatrix","setEulerFromQuaternion","getPositionFromMatrix","getScaleFromMatrix","getColumnFromMatrix","applyProjection","getChildByName","renderDepth","getWorldRotation","applyMatrix","eulerOrder","useQuaternion","setDrawMode","drawMode","initBones","setLens","onlyShadow","shadowCameraFov","shadowCameraLeft","shadowCameraRight","shadowCameraTop","shadowCameraBottom","shadowCameraVisible","shadowDarkness","shadowMapWidth","shadowMapHeight","dynamic","setDynamic","copyIndicesArray","setArray","addIndex","addAttribute","addDrawCall","clearDrawCalls","computeOffsets","removeAttribute","drawcalls","offsets","getArrays","addShapeList","wrapAround","overdraw","wrapRGB","shading","clearTarget","animate","getCurrentRenderTarget","getPrecision","resetGLState","supportsFloatTextures","supportsHalfFloatTextures","supportsStandardDerivatives","supportsCompressedTextureS3TC","supportsCompressedTexturePVRTC","supportsBlendMinMax","supportsInstancedArrays","enableScissorTest","initMaterial","addPrePlugin","addPostPlugin","updateShadowMap","setFaceCulling","allocTextureUnit","getActiveMipMapLevel","shadowMapCullFace","vr","gammaInput","gammaOutput","toneMappingWhitePoint","renderReverseSided","renderSingleSided","audioLoader","updateCubeMap","loadTextureCube","loadCompressedTexture","loadCompressedTextureCube","revision","__THREE__","nodes","strength","initialize","_","cover","tree","leaf","_x0","_x1","xm","xp","addAll","visit","halves","Half","retainer","previous","removeAll","defaultX","binarytree","Binarytree","NaN","leaf_copy","treeProto","tree_add","tree_addAll","tree_cover","tree_data","extent","tree_extent","tree_find","tree_remove","tree_removeAll","tree_root","tree_size","tree_visit","visitAfter","tree_visitAfter","tree_x","_y0","_y1","ym","yp","y3","quads","Quad","defaultY","quadtree","Quadtree","tree_y","_z0","_z1","zm","zp","deep","z3","octs","Octant","defaultZ","octree","Octree","tree_z","nodeById","nodeId","links","defaultStrength","strengths","distances","nDim","iterations","link","vx","jiggle","vy","vz","initializeStrength","initializeDistance","_nodes","args","arg","includes","noop","dispatch","Dispatch","parseTypenames","typenames","types","hasOwnProperty","on","typename","T","that","timeout","interval","pokeDelay","taskHead","taskTail","clockLast","clockNow","clockSkew","clock","performance","Date","setFrame","clearNow","Timer","_call","_time","_next","timer","restart","sleep","timerFlush","wake","nap","poke","clearTimeout","clearInterval","setInterval","MAX_DIMENSIONS","initialRadius","initialAngleRoll","initialAngleYaw","numDimensions","simulation","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","lcg","tick","fx","fy","fz","initializeNodes","cbrt","rollAngle","yawAngle","initializeForce","randomSource","closest","distanceMin2","distanceMax2","theta2","treeNode","numChildren","arg1","arg2","arg3","distanceMin","distanceMax","radiuses","initNodes","module","eventify","subject","validateSubject","eventsStorage","createEventsStorage","off","fire","registeredEvents","eventName","ctx","wantToRemoveAll","deleteAllCallbacksForEvent","fireArguments","callbackInfo","reservedWords","createGraph","require","multigraph","uniqueLinkId","multiEdges","suspendEvents","createLink","createUniqueLink","createSingleLink","changes","recordLinkChange","recordNodeChange","enterModification","exitModification","graphPart","addNode","addLink","removeLink","getNode","getNodeCount","getLinkCount","getLinksCount","getNodesCount","getLinks","forEachNode","forEachLinkedNode","forEachLink","beginUpdate","endUpdate","hasLink","getLink","hasNode","monitorSubscribers","realOn","enterModificationReal","exitModificationReal","recordLinkChangeReal","recordNodeChangeReal","changeType","prevLinks","fromId","toId","fromNode","toNode","addLinkToNode","linkId","makeLinkId","Link","isMultiEdge","suffix","idx","indexOfElementInArray","fromNodeId","toNodeId","oriented","forEachOrientedLink","forEachNonOrientedLink","quitFast","linkedNodeId","valuesIterator","nextValue","getVariableName","createPatternBuilder","dimension","template","config","indent","indentString","variableName","generateCreateBodyFunction","generateCreateBodyFunctionBody","getVectorCode","getBodyCode","debugSetters","code","Body","Function","variableList","setters","generateQuadTreeFunction","generateQuadTreeFunctionBody","getInsertStackCode","getQuadNodeCode","isSamePosition","getChildBodyCode","setChildBodyCode","quadCount","assignQuads","runRecursiveOnChildren","assignInsertionQuadIndex","indentCount","insertionCode","recursiveCode","setChildBody","childBody","getChildBody","quadNodeCode","generateBoundsFunction","generateBoundsFunctionBody","generateCreateDragForceFunction","generateCreateDragForceFunctionBody","generateCreateSpringForceFunction","generateCreateSpringForceFunctionBody","generateIntegratorFunction","generateIntegratorFunctionBody","Spring","fromBody","toBody","springCoefficient","coefficient","targetHasIt","optionsValueType","shouldReplace","randomIterator","inputSeed","Generator","nextDouble","gaussian","levy","beta","gamma","E","maxValue","customRandom","localRandom","shuffle","createPhysicsSimulator","dimensionalCache","springCoeff","dragCoeff","springLength","gravity","dragCoefficient","timeStep","adaptiveTimeStepWeight","dimensions","factory","createQuadTree","createBounds","createDragForce","createSpringForce","integrate","createBody","pos","bodies","springs","quadTree","bounds","springForce","dragForce","totalMovement","forceMap","iterationNumber","addForce","nbodyForce","updateSpringForce","publicApi","removeForce","getForces","movement","addBody","addBodyAt","removeBody","addSpring","body1","body2","spring","getTotalMovement","removeSpring","getBestNewBodyPosition","neighbors","getBestNewPosition","getBBox","invalidateBBox","expose","forceName","forceFunction","forceIndex","insertBodies","isPinned","updateBodyForce","augment","sourceIsNumber","createLayout","graph","physicsSettings","createSimulator","physicsSimulator","nodeMass","defaultNodeMass","nodeBodies","bodiesCount","springTransform","initPhysics","listenToEvents","wasStable","api","updateStableStatus","lastMove","ratio","isStableNow","getNodePosition","getInitializedBody","setNodePosition","getLinkPosition","getGraphRect","forEachBody","pinNode","isNodePinned","onGraphChanged","getBody","getSpring","getForceVectorLength","simulator","onStableChanged","isStable","change","initBody","initLink","releaseNode","releaseLink","getNeighborBodies","updateBodyMass","isNodeOriginallyPinned","maxNeighbors","otherBody","mass","debounce","func","wait","immediate","timestamp","later","debounced","callNow","flush","_classCallCheck","instance","Constructor","_slicedToArray","arr","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_i","_arr","_n","_d","_s","_e","minLen","_arrayLikeToArray","arr2","Prop","_ref","_ref$default","defaultVal","_ref$triggerUpdate","triggerUpdate","_ref$onChange","onChange","newVal","_ref2","_ref2$stateInit","stateInit","_ref2$props","props","rawProps","_ref2$methods","methods","_ref2$aliases","aliases","_ref2$init","initFn","_ref2$update","updateFn","propName","initialised","changedProps","comp","nodeElement","initStatic","digest","prop","getSetProp","_ref3","_ref3$triggerUpdate","redigest","_ref3$onChange","_ref3$defaultVal","curVal","val","_methods$methodName","_len","_key","entries","_ref4","_ref5","alias","resetProps","_rerender","obj","InternMap","keyof","_intern","intern_get","intern_set","intern_delete","valueOf","valueof","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","iter","_toPrimitive","input","hint","prim","toPrimitive","_toPropertyKey","keyAccessors","multiItem","flattenKeys","keyAccessor","isProp","indexedResult","reduce","item","iterObj","itemVal","_itemVal","propVal","rest","accKeys","vals","ownKeys","enumerableOnly","symbols","sym","getOwnPropertyDescriptor","_objectSpread2","_defineProperty","getOwnPropertyDescriptors","writable","diffArrays","idAccessor","enter","exit","prevSet","Set","nextSet","prevById","indexBy","nextById","byId","dataBindDiff","existingObjs","_ref3$objBindAttr","objBindAttr","_ref3$dataBindAttr","dataBindAttr","_ref3$purge","purge","isObjValid","removeObjs","prevD","nextD","viewDigest","appendObj","removeObj","_ref7","_ref7$createObj","createObj","_ref7$updateObj","updateObj","_ref7$exitObj","exitObj","_ref7$objBindAttr","_ref7$dataBindAttr","dataDiffOptions","_dataBindDiff","newObjs","createObjs","pointsData","updateObjs","initRange","domain","range","implicit","ordinal","unknown","specifier","trimLeft","trimRight","tinyCounter","mathRound","mathMin","mathMax","mathRandom","tinycolor","opts","rgb","inputToRGB","_originalInput","_r","_g","_b","_a","_roundA","_format","_gradientType","gradientType","_ok","ok","_tc_id","isDark","getBrightness","isValid","getOriginalInput","getFormat","getAlpha","toRgb","getLuminance","RsRGB","GsRGB","BsRGB","R","G","setAlpha","boundAlpha","toHsv","hsv","rgbToHsv","toHsvString","toHsl","hsl","rgbToHsl","toHslString","toHex","allow3Char","rgbToHex","toHexString","toHex8","allow4Char","rgbaToHex","toHex8String","toRgbString","toPercentageRgb","bound01","toPercentageRgbString","toName","hexNames","toFilter","secondColor","hex8String","rgbaToArgbHex","secondHex8String","formatSet","formattedString","hasAlpha","needsAlphaFormat","_applyModification","fn","lighten","brighten","darken","desaturate","saturate","greyscale","spin","_applyCombination","analogous","complement","monochromatic","splitcomplement","triad","tetrad","fromRatio","newColor","convertToPercentage","stringInputToObject","isValidCSSUnit","rgbToRgb","hsvToRgb","hslToRgb","mod","pad2","convertDecimalToHex","clamp01","slices","part","ret","modification","rgb1","rgb2","rgba","readability","isReadable","wcag2","wcag2Parms","out","validateWCAG2Parms","mostReadable","baseColor","colorList","bestColor","bestScore","includeFallbackColors","names","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","burntsienna","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","flip","flipped","isOnePointZero","processPercent","isPercentage","parseIntFromHex","convertHexToDecimal","matchers","CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","hsla","hsva","hex3","hex6","hex4","hex8","named","parms","exports","_typeof","_inherits","subClass","superClass","_setPrototypeOf","_getPrototypeOf","setPrototypeOf","getPrototypeOf","_isNativeReflectConstruct","Reflect","sham","Proxy","Boolean","_construct","Parent","Class","_assertThisInitialized","self","ReferenceError","_possibleConstructorReturn","_createSuper","Derived","hasNativeReflectConstruct","_createSuperInternal","Super","NewTarget","materialDispose","deallocate","emptyObject","childObj","_excluded","threeDigest","_ref$objFilter","objFilter","dataJoint","colorStr2Hex","tinyColor","colorAlpha","autoColorScale","scaleOrdinal","schemePaired","autoColorObjects","colorByAccessor","colorField","getDagDepths","_ref2$nodeFilter","nodeFilter","_ref2$onLoopError","onLoopError","loopIds","skip","sourceId","getNodeId","targetId","sourceNode","targetNode","foundLoops","nodeDepths","_ref6","nodeStack","currentDepth","_ret","some","foundLoop","every","three$1","THREE","SphereBufferGeometry","CylinderBufferGeometry","TubeBufferGeometry","ConeBufferGeometry","ngraph","forcelayout","DAG_LEVEL_NODE_RATIO","setAttributeFn","applyMatrix4Fn","ForceGraph","Kapsule","jsonUrl","fetchingJson","onLoading","onFinishLoading","graphData","engineRunning","numDim","chargeForce","d3ForceLayout","eraseDimension","dagMode","forceEngine","dagLevelDistance","dagNodeFilter","_default","onDagError","nodeRelSize","nodeVal","nodeResolution","nodeColor","nodeAutoColorBy","nodeOpacity","nodeVisibility","nodeThreeObject","nodeThreeObjectExtend","linkSource","linkTarget","linkVisibility","linkColor","linkAutoColorBy","linkOpacity","linkWidth","linkResolution","linkCurvature","linkCurveRotation","linkMaterial","linkThreeObject","linkThreeObjectExtend","linkPositionUpdate","linkDirectionalArrowLength","linkDirectionalArrowColor","linkDirectionalArrowRelPos","linkDirectionalArrowResolution","linkDirectionalParticles","linkDirectionalParticleSpeed","linkDirectionalParticleWidth","linkDirectionalParticleColor","linkDirectionalParticleResolution","d3AlphaMin","d3AlphaDecay","d3AlphaTarget","d3VelocityDecay","ngraphPhysics","warmupTicks","cooldownTicks","cooldownTime","onFinishUpdate","onEngineTick","onEngineStop","refresh","_flushObjects","d3Force","forceFn","_d3ForceLayout","d3ReheatSimulation","resetCountdown","simulationEngineRunning","cntTicks","startTickTime","tickFrame","isD3Sim","layoutTick","updateArrows","updatePhotons","layout","__threeObj","linkWidthAccessor","accessorFn","linkCurvatureAccessor","linkCurveRotationAccessor","linkThreeObjectExtendAccessor","lineObj","__lineObj","calcLinkCurve","extendedObj","curveResolution","__curve","linePos","_linkWidth","curvature","curveRotation","vLine","cp","endAngle","startAngle","arrowRelPosAccessor","arrowLengthAccessor","nodeValAccessor","arrowObj","__arrowObj","startR","endR","arrowLength","arrowRelPos","getPosAlongLine","iplt","lineLen","acc","posAlongLine","arrowHead","arrowTail","headVec","particleSpeedAccessor","cyclePhotons","__photonsObj","singleHopPhotons","__singleHopPhotonsObj","particleSpeed","getPhotonPos","photons","photon","singleHop","__linkThreeObjType","__progressRatio","photonPosRatio","emitParticle","graphScene","particleWidthAccessor","photonR","numSegments","particleGeometry","linkColorAccessor","particleColorAccessor","photonColor","materialColor","particleMaterial","getGraphBbox","bboxes","getBboxes","__graphObjType","__data","bb","forceSimulation","forceLink","forceManyBody","forceCenter","threeObj","hasAnyPropChanged","propList","customObjectAccessor","customObjectExtendAccessor","valAccessor","colorAccessor","visibilityAccessor","sphereGeometries","sphereMaterials","customObj","extendObj","__graphDefaultObj","_customObjectAccessor","_customObjectExtendAccessor","customMaterialAccessor","_visibilityAccessor","_colorAccessor","widthAccessor","cylinderGeometries","lambertLineMaterials","basicLineMaterials","visibleLinks","defaultObj","useCylinder","lineGeometry","updObj","materialType","lineMaterials","arrowColorAccessor","coneGeometry","particlesAccessor","particleMaterials","particleGeometries","numPhotons","curPhoton","linkForce","maxDepth","getFFn","fix","fxFn","fyFn","fzFn","forceRadial","nodeDepth","_graph","fromKapsule","kapsule","baseClass","initKapsuleWithSelf","FromKapsule","_baseClass","_super","__kapsuleInstance","_this$__kapsuleInstan","returnVal","three","threeForcegraph","_changeEvent","_startEvent","_endEvent","isNativeReflectConstruct","isNativeFunction","TWEEN","opacify","kapsulePropName","kapsuleType","dummyK","linkProp","linkMethod","kapsuleInstance","CAMERA_DISTANCE2NODES_FACTOR","bindFG","linkKapsule","ThreeForceGraph","linkedFGProps","linkedFGMethods","bindRenderObjs","ThreeRenderObjects","linkedRenderObjsProps","linkedRenderObjsMethods","graph2ScreenCoords","screen2GraphCoords","nodeLabel","linkLabel","linkHoverPrecision","renderObjs","lineHoverPrecision","enableNavigationControls","controls","enableNodeDrag","onNodeDrag","onNodeDragEnd","onNodeClick","onNodeRightClick","onNodeHover","onLinkClick","onLinkRightClick","onLinkHover","onBackgroundClick","onBackgroundRightClick","zoomToFit","transitionDuration","padding","bboxArgs","fitToBbox","forceGraph","pauseAnimation","animationFrameRequestId","resumeAnimation","_animationCycle","enablePointerInteraction","cursor","tbControls","_destructor","controlType","rendererConfig","extraRenderers","domNode","innerHTML","appendChild","createElement","roDomNode","lastSetCameraZ","infoElem","className","textContent","_dragControls","curNodeDrag","__initialFixedPos","__disposeControlsAfterDrag","dragControls","ThreeDragControls","__initialPos","__prevPos","getGraphObj","classList","nodeObj","initPos","prevPos","newPos","__dragged","initFixedPos","fc","ownerDocument","PointerEvent","pointerType","hoverOrderComparator","aObj","bObj","isNode","tooltipContent","graphObj","hoverDuringDrag","onHover","hoverObj","prevObjType","prevObjData","objType","objData","clickAfterDrag","onClick","ev","onRightClick"],"mappings":"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G,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;EACpE,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;EACpE,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;EACrE,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AACrE;EACA,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;EACpE,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;EACpE,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;EACrE,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AACrE;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,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G,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,MAAM,CAAC;AACnI;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,CAAC;EACzB,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,MAAM,CAAC;EACnI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,MAAM,CAAC;EACnI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,MAAM,CAAC;AACnI;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,CAAC;EACzB,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GA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ACT,SAAU,CAAE9/B,KAAK,CAAE,IAAT,CADD,CAET,gBAAiB,CAAEA,KAAK,CAAEy7C,SAAS,CAAE5kE,cAAF,CAAlB,CAFR,CAGT,iBAAkB,CAAEmpB,KAAK,CAAEy7C,SAAS,CAAE5kE,cAAF,CAAlB,CAHT,CAJmC,CAU7CopD,YAAY,CAAE2gB,sBAAsB,EAVS,CAY7C1gB,cAAc,WAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAM2gB,aAAa,EAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GA9B+C,CAgC7ClzB,QAAQ,CAAEl/C,UAhCmC,CAiC7C8/C,SAAS,CAAE,KAjCkC,CAkC7CC,UAAU,CAAE,KAlCiC,CAAvB,CAAvB,CAsCA,OAAOmyB,cAAP,CAEA,CAED,SAASC,sBAAT,EAAkC,CAEjC,iBAAkB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAzDC,EA2DA,CAED,SAASC,aAAT,EAAyB,CAExB,iBAAkB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAhFC,EAkFA,CAED,SAASC,eAAT,CAA0B9d,QAA1B,CAAqC,CAEpC,IAAI+d,UAAU,CAAG,IAAIvZ,OAAJ,EAAjB,CAEA,IAAIwZ,cAAc,CAAG,IAArB,CAEA,SAASvY,GAAT,CAAc93B,OAAd,CAAwB,CAEvB,GAAKA,OAAO,EAAIA,OAAO,CAACrC,SAAnB,EAAgCqC,OAAO,CAAC3D,qBAAR,GAAkC,KAAvE,CAA+E,CAE9E,MAAMtB,OAAO,CAAGiF,OAAO,CAACjF,OAAxB,CAEA,MAAMu1C,aAAa,CAAKv1C,OAAO,GAAKv6B,gCAAZ,EAAgDu6B,OAAO,GAAKt6B,gCAApF,CACA,MAAM8vE,SAAS,CAAKx1C,OAAO,GAAKz6B,qBAAZ,EAAqCy6B,OAAO,GAAKx6B,qBAArE,CAEA,GAAK+vE,aAAa,EAAIC,SAAtB,CAAkC;EAIjC,GAAKH,UAAU,CAAChJ,GAAX,CAAgBpnC,OAAhB,CAAL,CAAiC,CAEhC,OAAOowC,UAAU,CAACtY,GAAX,CAAgB93B,OAAhB,EAA0BA,OAAjC,CAEA,CAJD,KAIO,CAEN,MAAM7F,KAAK,CAAG6F,OAAO,CAAC7F,KAAtB,CAEA,GAAOm2C,aAAa,EAAIn2C,KAAjB,EAA0BA,KAAK,CAAChK,MAAN,CAAe,CAA3C,EAAoDogD,SAAS,EAAIp2C,KAAb,EAAsBq2C,qBAAqB,CAAEr2C,KAAF,CAApG,CAAkH,CAEjH,MAAMs4B,mBAAmB,CAAGJ,QAAQ,CAACK,eAAT,EAA5B,CAEA,GAAK2d,cAAc,GAAK,IAAxB,CAA+BA,cAAc,CAAG,IAAI5E,cAAJ,CAAoBpZ,QAApB,CAAjB,CAE/B,MAAMR,YAAY,CAAGye,aAAa,CAAGD,cAAc,CAAC5D,mBAAf,CAAoCzsC,OAApC,CAAH,CAAmDqwC,cAAc,CAACzD,WAAf,CAA4B5sC,OAA5B,CAArF,CACAowC,UAAU,CAAChgD,GAAX,CAAgB4P,OAAhB,CAAyB6xB,YAAzB,EAEAQ,QAAQ,CAACM,eAAT,CAA0BF,mBAA1B,EAEAzyB,OAAO,CAAC9S,gBAAR,CAA0B,SAA1B,CAAqCi9C,gBAArC,EAEA,OAAOtY,YAAY,CAAC7xB,OAApB,CAEA,CAfD,KAeO;EAIN,WAAA,CAEA,CAED,CAED,CAED,CAED,OAAOA,OAAP,CAEA,CAED,SAASwwC,qBAAT,CAAgCr2C,KAAhC,CAAwC,CAEvC,IAAIoG,KAAK,CAAG,CAAZ,CACA,MAAMjS,MAAM,CAAG,CAAf,CAEA,IAAM,IAAIF,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGE,MAArB,CAA6BF,CAAC,EAA9B,CAAoC,CAEnC,GAAK+L,KAAK,CAAE/L,CAAF,CAAL,GAAed,SAApB,CAAgCiT,KAAK,GAErC,CAED,OAAOA,KAAK,GAAKjS,MAAjB,CAGA,CAED,SAAS67C,gBAAT,CAA2Bn8C,KAA3B,CAAmC,CAElC,MAAMgS,OAAO,CAAGhS,KAAK,CAACC,MAAtB,CAEA+R,OAAO,CAACrS,mBAAR,CAA6B,SAA7B,CAAwCw8C,gBAAxC,EAEA,MAAMsG,SAAS,CAAGL,UAAU,CAACtY,GAAX,CAAgB93B,OAAhB,CAAlB,CAEA,GAAKywC,SAAS,GAAKnjD,SAAnB,CAA+B,CAE9B8iD,UAAU,CAACpY,MAAX,CAAmBh4B,OAAnB,EACAywC,SAAS,CAAClzC,OAAV,GAEA,CAED,CAED,SAASA,OAAT,EAAmB,CAElB6yC,UAAU,CAAG,IAAIvZ,OAAJ,EAAb,CAEA,GAAKwZ,cAAc,GAAK,IAAxB,CAA+B,CAE9BA,cAAc,CAAC9yC,OAAf,GACA8yC,cAAc,CAAG,IAAjB,CAEA,CAED,CAED,OAAO,CACNvY,GAAG,CAAEA,GADC,CAENv6B,OAAO,CAAEA,OAFH,CAAP,CAKA,CAED,SAAS1lB,eAAT,CAA0B4+C,EAA1B,CAA+B,CAE9B,MAAM/G,UAAU,CAAG,EAAnB,CAEA,SAASghB,YAAT,CAAuBl3C,IAAvB,CAA8B,CAE7B,GAAKk2B,UAAU,CAAEl2B,IAAF,CAAV,GAAuBlM,SAA5B,CAAwC,CAEvC,OAAOoiC,UAAU,CAAEl2B,IAAF,CAAjB,CAEA,CAED,IAAIspC,SAAJ,CAEA,OAAStpC,IAAT,EAEC,IAAK,qBAAL,CACCspC,SAAS,CAAGrM,EAAE,CAACia,YAAH,CAAiB,qBAAjB,GAA4Cja,EAAE,CAACia,YAAH,CAAiB,yBAAjB,CAA5C,EAA4Fja,EAAE,CAACia,YAAH,CAAiB,4BAAjB,CAAxG,CACA,MAED,IAAK,gCAAL,CACC5N,SAAS,CAAGrM,EAAE,CAACia,YAAH,CAAiB,gCAAjB,GAAuDja,EAAE,CAACia,YAAH,CAAiB,oCAAjB,CAAvD,EAAkHja,EAAE,CAACia,YAAH,CAAiB,uCAAjB,CAA9H,CACA,MAED,IAAK,+BAAL,CACC5N,SAAS,CAAGrM,EAAE,CAACia,YAAH,CAAiB,+BAAjB,GAAsDja,EAAE,CAACia,YAAH,CAAiB,mCAAjB,CAAtD,EAAgHja,EAAE,CAACia,YAAH,CAAiB,sCAAjB,CAA5H,CACA,MAED,IAAK,gCAAL,CACC5N,SAAS,CAAGrM,EAAE,CAACia,YAAH,CAAiB,gCAAjB,GAAuDja,EAAE,CAACia,YAAH,CAAiB,uCAAjB,CAAnE,CACA,MAED,QACC5N,SAAS,CAAGrM,EAAE,CAACia,YAAH,CAAiBl3C,IAAjB,CAAZ,CAnBF,CAuBAk2B,UAAU,CAAEl2B,IAAF,CAAV,CAAqBspC,SAArB,CAEA,OAAOA,SAAP,CAEA,CAED,OAAO,CAENsE,GAAG,CAAE,SAAW5tC,IAAX,CAAkB,CAEtB,OAAOk3C,YAAY,CAAEl3C,IAAF,CAAZ,GAAyB,IAAhC,CAEA,CANK,CAQNuvC,IAAI,CAAE,SAAWrS,YAAX,CAA0B,CAE/B,GAAKA,YAAY,CAACC,QAAlB,CAA6B,CAE5B+Z,YAAY,CAAE,wBAAF,CAAZ,CAEA,CAJD,KAIO,CAENA,YAAY,CAAE,qBAAF,CAAZ,CACAA,YAAY,CAAE,mBAAF,CAAZ,CACAA,YAAY,CAAE,wBAAF,CAAZ,CACAA,YAAY,CAAE,+BAAF,CAAZ,CACAA,YAAY,CAAE,0BAAF,CAAZ,CACAA,YAAY,CAAE,wBAAF,CAAZ,CACAA,YAAY,CAAE,yBAAF,CAAZ,CACAA,YAAY,CAAE,wBAAF,CAAZ,CAEA,CAEDA,YAAY,CAAE,0BAAF,CAAZ,CACAA,YAAY,CAAE,6BAAF,CAAZ,CAEA,CA9BK,CAgCN5Y,GAAG,CAAE,SAAWt+B,IAAX,CAAkB,CAEtB,MAAMspC,SAAS,CAAG4N,YAAY,CAAEl3C,IAAF,CAA9B,CAEA,GAAKspC,SAAS,GAAK,IAAnB,CAA0B,CAEzB7xC,OAAO,CAACC,IAAR,CAAc,wBAA0BsI,IAA1B,CAAiC,2BAA/C,EAEA,CAED,OAAOspC,SAAP,CAEA,CA5CK,CAAP,CAgDA,CAED,SAAShrD,eAAT,CAA0B2+C,EAA1B,CAA8B5O,UAA9B,CAA0C8e,IAA1C,CAAgD3D,aAAhD,CAAgE,CAE/D,MAAM/pB,UAAU,CAAG,EAAnB,CACA,MAAM03B,mBAAmB,CAAG,IAAI9Z,OAAJ,EAA5B,CAEA,SAAS+Z,iBAAT,CAA4B5iD,KAA5B,CAAoC,CAEnC,MAAMsc,QAAQ,CAAGtc,KAAK,CAACC,MAAvB,CAEA,GAAKqc,QAAQ,CAACzc,KAAT,GAAmB,IAAxB,CAA+B,CAE9Bg6B,UAAU,CAACjQ,MAAX,CAAmBtN,QAAQ,CAACzc,KAA5B,EAEA,CAED,IAAM,MAAM2L,IAAZ,IAAoB8Q,QAAQ,CAACud,UAA7B,CAA0C,CAEzCA,UAAU,CAACjQ,MAAX,CAAmBtN,QAAQ,CAACud,UAAT,CAAqBruB,IAArB,CAAnB,EAEA,CAED8Q,QAAQ,CAAC3c,mBAAT,CAA8B,SAA9B,CAAyCijD,iBAAzC,EAEA,OAAO33B,UAAU,CAAE3O,QAAQ,CAAC2N,EAAX,CAAjB,CAEA,MAAM/jB,SAAS,CAAGy8C,mBAAmB,CAAC7Y,GAApB,CAAyBxtB,QAAzB,CAAlB,CAEA,GAAKpW,SAAL,CAAiB,CAEhB2zB,UAAU,CAACjQ,MAAX,CAAmB1jB,SAAnB,EACAy8C,mBAAmB,CAAC3Y,MAApB,CAA4B1tB,QAA5B,EAEA,CAED04B,aAAa,CAACwD,uBAAd,CAAuCl8B,QAAvC,EAEA,GAAKA,QAAQ,CAACi7B,yBAAT,GAAuC,IAA5C,CAAmD,CAElD,OAAOj7B,QAAQ,CAACy7B,iBAAhB,CAEA,CAED;EAEAY,IAAI,CAACkK,MAAL,CAAY53B,UAAZ,GAEA,CAED,SAAS6e,GAAT,CAAcnuB,MAAd,CAAsBW,QAAtB,CAAiC,CAEhC,GAAK2O,UAAU,CAAE3O,QAAQ,CAAC2N,EAAX,CAAV,GAA8B,IAAnC,CAA0C,OAAO3N,QAAP,CAE1CA,QAAQ,CAACpd,gBAAT,CAA2B,SAA3B,CAAsC0jD,iBAAtC,EAEA33B,UAAU,CAAE3O,QAAQ,CAAC2N,EAAX,CAAV,CAA4B,IAA5B,CAEA0uB,IAAI,CAACkK,MAAL,CAAY53B,UAAZ,GAEA,OAAO3O,QAAP,CAEA,CAED,SAAS1H,MAAT,CAAiB0H,QAAjB,CAA4B,CAE3B,MAAMo6B,kBAAkB,CAAGp6B,QAAQ,CAACud,UAApC,CAEA;EAEA,IAAM,MAAMruB,IAAZ,IAAoBkrC,kBAApB,CAAyC,CAExC7c,UAAU,CAACjlB,MAAX,CAAmB8hC,kBAAkB,CAAElrC,IAAF,CAArC,CAA+C,KAA/C,EAEA,CAED;EAEA,MAAMsuB,eAAe,CAAGxd,QAAQ,CAACwd,eAAjC,CAEA,IAAM,MAAMtuB,IAAZ,IAAoBsuB,eAApB,CAAsC,CAErC,MAAM55B,KAAK,CAAG45B,eAAe,CAAEtuB,IAAF,CAA7B,CAEA,IAAM,IAAIpL,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGH,KAAK,CAACI,MAA3B,CAAmCF,CAAC,CAAGC,CAAvC,CAA0CD,CAAC,EAA3C,CAAiD,CAEhDy5B,UAAU,CAACjlB,MAAX,CAAmB1U,KAAK,CAAEE,CAAF,CAAxB,CAA+B,KAA/B,EAEA,CAED,CAED,CAED,SAAS0iD,wBAAT,CAAmCxmC,QAAnC,CAA8C,CAE7C,MAAMgf,OAAO,CAAG,EAAhB,CAEA,MAAMynB,aAAa,CAAGzmC,QAAQ,CAACzc,KAA/B,CACA,MAAMmjD,gBAAgB,CAAG1mC,QAAQ,CAACud,UAAT,CAAoB5U,QAA7C,CACA,IAAI9W,OAAO,CAAG,CAAd,CAEA,GAAK40C,aAAa,GAAK,IAAvB,CAA8B,CAE7B,MAAM7iD,KAAK,CAAG6iD,aAAa,CAAC7iD,KAA5B,CACAiO,OAAO,CAAG40C,aAAa,CAAC50C,OAAxB,CAEA,IAAM,IAAI/N,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGH,KAAK,CAACI,MAA3B,CAAmCF,CAAC,CAAGC,CAAvC,CAA0CD,CAAC,EAAI,CAA/C,CAAmD,CAElD,MAAMkD,CAAC,CAAGpD,KAAK,CAAEE,CAAC,CAAG,CAAN,CAAf,CACA,MAAMmD,CAAC,CAAGrD,KAAK,CAAEE,CAAC,CAAG,CAAN,CAAf,CACA,MAAMmG,CAAC,CAAGrG,KAAK,CAAEE,CAAC,CAAG,CAAN,CAAf,CAEAk7B,OAAO,CAAC77B,IAAR,CAAc6D,CAAd,CAAiBC,CAAjB,CAAoBA,CAApB,CAAuBgD,CAAvB,CAA0BA,CAA1B,CAA6BjD,CAA7B,EAEA,CAED,CAfD,KAeO,CAEN,MAAMpD,KAAK,CAAG8iD,gBAAgB,CAAC9iD,KAA/B,CACAiO,OAAO,CAAG60C,gBAAgB,CAAC70C,OAA3B,CAEA,IAAM,IAAI/N,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAKH,KAAK,CAACI,MAAN,CAAe,CAAjB,CAAuB,CAA5C,CAA+CF,CAAC,CAAGC,CAAnD,CAAsDD,CAAC,EAAI,CAA3D,CAA+D,CAE9D,MAAMkD,CAAC,CAAGlD,CAAC,CAAG,CAAd,CACA,MAAMmD,CAAC,CAAGnD,CAAC,CAAG,CAAd,CACA,MAAMmG,CAAC,CAAGnG,CAAC,CAAG,CAAd,CAEAk7B,OAAO,CAAC77B,IAAR,CAAc6D,CAAd,CAAiBC,CAAjB,CAAoBA,CAApB,CAAuBgD,CAAvB,CAA0BA,CAA1B,CAA6BjD,CAA7B,EAEA,CAED,CAED,MAAM4C,SAAS,CAAG,IAAMhmB,QAAQ,CAAEo7C,OAAF,CAAR,CAAsB,KAAtB,CAA8Bv7C,qBAA9B,CAAsDD,qBAA5D,EAAqFw7C,OAArF,CAA8F,CAA9F,CAAlB,CACAp1B,SAAS,CAACiI,OAAV,CAAoBA,OAApB,CAEA;EAEA;EAEA,MAAM80C,iBAAiB,CAAGN,mBAAmB,CAAC7Y,GAApB,CAAyBxtB,QAAzB,CAA1B,CAEA,GAAK2mC,iBAAL,CAAyBppB,UAAU,CAACjQ,MAAX,CAAmBq5B,iBAAnB,EAEzB;EAEAN,mBAAmB,CAACvgD,GAApB,CAAyBka,QAAzB,CAAmCpW,SAAnC,EAEA,CAED,SAASg9C,qBAAT,CAAgC5mC,QAAhC,CAA2C,CAE1C,MAAM6mC,gBAAgB,CAAGR,mBAAmB,CAAC7Y,GAApB,CAAyBxtB,QAAzB,CAAzB,CAEA,GAAK6mC,gBAAL,CAAwB,CAEvB,MAAMJ,aAAa,CAAGzmC,QAAQ,CAACzc,KAA/B,CAEA,GAAKkjD,aAAa,GAAK,IAAvB,CAA8B;EAI7B,GAAKI,gBAAgB,CAACh1C,OAAjB,CAA2B40C,aAAa,CAAC50C,OAA9C,CAAwD,CAEvD20C,wBAAwB,CAAExmC,QAAF,CAAxB,CAEA,CAED,CAED,CAhBD,KAgBO,CAENwmC,wBAAwB,CAAExmC,QAAF,CAAxB,CAEA,CAED,OAAOqmC,mBAAmB,CAAC7Y,GAApB,CAAyBxtB,QAAzB,CAAP,CAEA,CAED,OAAO,CAENwtB,GAAG,CAAEA,GAFC,CAGNl1B,MAAM,CAAEA,MAHF,CAKNsuC,qBAAqB,CAAEA,qBALjB,CAAP,CASA,CAED,SAASn5D,0BAAT,CAAqC0+C,EAArC,CAAyC/G,UAAzC,CAAqDiX,IAArD,CAA2DjQ,YAA3D,CAA0E,CAEzE,MAAMC,QAAQ,CAAGD,YAAY,CAACC,QAA9B,CAEA,IAAIiQ,IAAJ,CAEA,SAASC,OAAT,CAAkBx3C,KAAlB,CAA0B,CAEzBu3C,IAAI,CAAGv3C,KAAP,CAEA,CAED,IAAIlC,IAAJ,CAAUsqC,eAAV,CAEA,SAASpP,QAAT,CAAmBh5B,KAAnB,CAA2B,CAE1BlC,IAAI,CAAGkC,KAAK,CAAClC,IAAb,CACAsqC,eAAe,CAAGpoC,KAAK,CAACooC,eAAxB,CAEA,CAED,SAAS7E,MAAT,CAAiBzK,KAAjB,CAAwB5nB,KAAxB,CAAgC,CAE/Bk2B,EAAE,CAAC2a,YAAH,CAAiBxK,IAAjB,CAAuBrmC,KAAvB,CAA8BpT,IAA9B,CAAoCg7B,KAAK,CAAGsP,eAA5C,EAEAkP,IAAI,CAAC/jC,MAAL,CAAarC,KAAb,CAAoBqmC,IAApB,CAA0B,CAA1B,EAEA,CAED,SAASG,eAAT,CAA0B5e,KAA1B,CAAiC5nB,KAAjC,CAAwCymC,SAAxC,CAAoD,CAEnD,GAAKA,SAAS,GAAK,CAAnB,CAAuB,OAEvB,IAAIlE,SAAJ,CAAemE,UAAf,CAEA,GAAKtQ,QAAL,CAAgB,CAEfmM,SAAS,CAAGrM,EAAZ,CACAwQ,UAAU,CAAG,uBAAb,CAEA,CALD,KAKO,CAENnE,SAAS,CAAGpT,UAAU,CAACoI,GAAX,CAAgB,wBAAhB,CAAZ,CACAmP,UAAU,CAAG,4BAAb,CAEA,GAAKnE,SAAS,GAAK,IAAnB,CAA0B,CAEzB7xC,OAAO,CAAC8D,KAAR,CAAe,uIAAf,EACA,OAEA,CAED,CAED+tC,SAAS,CAAEmE,UAAF,CAAT,CAAyBL,IAAzB,CAA+BrmC,KAA/B,CAAsCpT,IAAtC,CAA4Cg7B,KAAK,CAAGsP,eAApD,CAAqEuP,SAArE,EAEAL,IAAI,CAAC/jC,MAAL,CAAarC,KAAb,CAAoBqmC,IAApB,CAA0BI,SAA1B,EAEA,CAED;EAEA,KAAKH,OAAL,CAAeA,OAAf,CACA,KAAKxe,QAAL,CAAgBA,QAAhB,CACA,KAAKuK,MAAL,CAAcA,MAAd,CACA,KAAKmU,eAAL,CAAuBA,eAAvB,CAEA,CAED,SAAS/uD,SAAT,CAAoBy+C,EAApB,CAAyB,CAExB,MAAMoa,MAAM,CAAG,CACd53B,UAAU,CAAE,CADE,CAEdpc,QAAQ,CAAE,CAFI,CAAf,CAKA,MAAM+1B,MAAM,CAAG,CACduD,KAAK,CAAE,CADO,CAEdkb,KAAK,CAAE,CAFO,CAGdC,SAAS,CAAE,CAHG,CAIdloC,MAAM,CAAE,CAJM,CAKdmoC,KAAK,CAAE,CALO,CAAf,CAQA,SAAS3uC,MAAT,CAAiBrC,KAAjB,CAAwBqmC,IAAxB,CAA8B4K,aAA9B,CAA8C,CAE7C5e,MAAM,CAACye,KAAP,GAEA,OAASzK,IAAT,EAEC,MAAA,CACChU,MAAM,CAAC0e,SAAP,EAAoBE,aAAa,EAAKjxC,KAAK,CAAG,CAAb,CAAjC,CACA,MAED,MAAA,CACCqyB,MAAM,CAAC2e,KAAP,EAAgBC,aAAa,EAAKjxC,KAAK,CAAG,CAAb,CAA7B,CACA,MAED,MAAA,CACCqyB,MAAM,CAAC2e,KAAP,EAAgBC,aAAa,EAAKjxC,KAAK,CAAG,CAAb,CAA7B,CACA,MAED,MAAA,CACCqyB,MAAM,CAAC2e,KAAP,EAAgBC,aAAa,CAAGjxC,KAAhC,CACA,MAED,MAAA,CACCqyB,MAAM,CAACxpB,MAAP,EAAiBooC,aAAa,CAAGjxC,KAAjC,CACA,MAED,QACCtP,OAAO,CAAC8D,KAAR,CAAe,qCAAf,CAAsD6xC,IAAtD,EACA,MAxBF,CA4BA,CAED,SAASP,KAAT,EAAiB,CAEhBzT,MAAM,CAACuD,KAAP,GACAvD,MAAM,CAACye,KAAP,CAAe,CAAf,CACAze,MAAM,CAAC0e,SAAP,CAAmB,CAAnB,CACA1e,MAAM,CAACxpB,MAAP,CAAgB,CAAhB,CACAwpB,MAAM,CAAC2e,KAAP,CAAe,CAAf,CAEA,CAED,OAAO,CACNV,MAAM,CAAEA,MADF,CAENje,MAAM,CAAEA,MAFF,CAGN6e,QAAQ,CAAE,IAHJ,CAINC,SAAS,CAAE,IAJL,CAKNrL,KAAK,CAAEA,KALD,CAMNzjC,MAAM,CAAEA,MANF,CAAP,CASA,CAED,MAAMvqB,kBAAN,SAAiCnQ,OAAQ,CAExC+nB,WAAW,CAAE6N,IAAI,CAAG,IAAT,CAAe5N,KAAK,CAAG,CAAvB,CAA0BC,MAAM,CAAG,CAAnC,CAAsCyP,KAAK,CAAG,CAA9C,CAAkD,CAE5D,MAAO,IAAP,EAEA,KAAKzF,KAAL,CAAa,CAAE2D,IAAF,CAAQ5N,KAAR,CAAeC,MAAf,CAAuByP,KAAvB,CAAb,CAEA,KAAKzE,SAAL,CAAiBp6B,aAAjB,CACA,KAAKq6B,SAAL,CAAiBr6B,aAAjB,CAEA,KAAK4wE,KAAL,CAAa9wE,mBAAb,CAEA,KAAKi7B,eAAL,CAAuB,KAAvB,CACA,KAAKE,KAAL,CAAa,KAAb,CACA,KAAKC,eAAL,CAAuB,CAAvB,CAEA,KAAKyB,WAAL,CAAmB,IAAnB,CAEA,CAnBuC,CAuBzCrlB,kBAAkB,CAACuc,SAAnB,CAA6Bg9C,oBAA7B,CAAoD,IAApD,CAEA,SAAS35D,aAAT,CAAwBqZ,CAAxB,CAA2BC,CAA3B,CAA+B,CAE9B,OAAOD,CAAC,CAAE,CAAF,CAAD,CAASC,CAAC,CAAE,CAAF,CAAjB,CAEA,CAED,SAASrZ,gBAAT,CAA2BoZ,CAA3B,CAA8BC,CAA9B,CAAkC,CAEjC,OAAO/C,IAAI,CAACwE,GAAL,CAAUzB,CAAC,CAAE,CAAF,CAAX,EAAqB/C,IAAI,CAACwE,GAAL,CAAU1B,CAAC,CAAE,CAAF,CAAX,CAA5B,CAEA,CAED,SAASugD,WAAT,CAAsBC,KAAtB,CAA6B59C,SAA7B,CAAyC,CAExC,IAAIqT,WAAW,CAAG,CAAlB,CACA,MAAMrZ,KAAK,CAAGgG,SAAS,CAACg4B,4BAAV,CAAyCh4B,SAAS,CAAC4J,IAAV,CAAe5P,KAAxD,CAAgEgG,SAAS,CAAChG,KAAxF,CAEA,GAAKA,KAAK,YAAYopC,SAAtB,CAAkC/vB,WAAW,CAAG,GAAd,CAAlC,QACUrZ,KAAK,YAAYkpC,UAAtB,CAAmC7vB,WAAW,CAAG,KAAd,CAAnC,QACKrZ,KAAK,YAAYmpC,UAAtB,CAAmC9vB,WAAW,CAAG,UAAd,CAAnC,KACAtW,OAAO,CAAC8D,KAAR,CAAe,kEAAf,CAAmF7G,KAAnF,EAEL4jD,KAAK,CAAC//C,YAAN,CAAoBwV,WAApB,EAEA,CAED,SAASpvB,iBAAT,CAA4Bs+C,EAA5B,CAAgCC,YAAhC,CAA8C75B,QAA9C,CAAyD,CAExD,MAAMk1C,cAAc,CAAG,EAAvB,CACA,MAAMtkB,eAAe,CAAG,IAAI7F,YAAJ,CAAkB,CAAlB,CAAxB,CACA,MAAMoqB,aAAa,CAAG,IAAInb,OAAJ,EAAtB,CACA,MAAMib,KAAK,CAAG,IAAIrpE,OAAJ,EAAd,CAEA,MAAMwpE,cAAc,CAAG,EAAvB,CAEA,IAAM,IAAI7jD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9B6jD,cAAc,CAAE7jD,CAAF,CAAd,CAAsB,CAAEA,CAAF,CAAK,CAAL,CAAtB,CAEA,CAED,SAASwU,MAAT,CAAiB+G,MAAjB,CAAyBW,QAAzB,CAAmCkQ,QAAnC,CAA6C6oB,OAA7C,CAAuD,CAEtD,MAAM6O,gBAAgB,CAAGvoC,MAAM,CAACijB,qBAAhC,CAEA,GAAK8J,YAAY,CAACC,QAAb,GAA0B,IAA/B,CAAsC;EAGrC;EAEA,MAAMwb,oBAAoB,CAAG7nC,QAAQ,CAACwd,eAAT,CAAyB7U,QAAzB,CAAkC3kB,MAA/D,CAEA,IAAI8jD,KAAK,CAAGJ,aAAa,CAACla,GAAd,CAAmBxtB,QAAnB,CAAZ,CAEA,GAAK8nC,KAAK,GAAK9kD,SAAV,EAAuB8kD,KAAK,CAAC7xC,KAAN,GAAgB4xC,oBAA5C,CAAmE,CAElE,GAAKC,KAAK,GAAK9kD,SAAf,CAA2B8kD,KAAK,CAACpyC,OAAN,CAAczC,OAAd,GAE3B,MAAM80C,eAAe,CAAG/nC,QAAQ,CAACwd,eAAT,CAAyBngB,MAAzB,GAAoCra,SAA5D,CAEA,MAAM0/B,YAAY,CAAG1iB,QAAQ,CAACwd,eAAT,CAAyB7U,QAA9C,CACA,MAAMq/B,YAAY,CAAGhoC,QAAQ,CAACwd,eAAT,CAAyBngB,MAAzB,EAAmC,EAAxD,CAEA,MAAMsmB,gBAAgB,CAAG3jB,QAAQ,CAACud,UAAT,CAAoB5U,QAApB,CAA6B1S,KAAtD,CACA,MAAMgyC,kBAAkB,CAAKF,eAAe,GAAK,IAAtB,CAA+B,CAA/B,CAAmC,CAA9D,CAAiE;EAEjE,IAAIniD,KAAK,CAAG+9B,gBAAgB,CAAGskB,kBAA/B,CACA,IAAIpiD,MAAM,CAAG,CAAb,CAEA,GAAKD,KAAK,CAAGwmC,YAAY,CAACoR,cAA1B,CAA2C,CAE1C33C,MAAM,CAAG3B,IAAI,CAAC+D,IAAL,CAAWrC,KAAK,CAAGwmC,YAAY,CAACoR,cAAhC,CAAT,CACA53C,KAAK,CAAGwmC,YAAY,CAACoR,cAArB,CAEA,CAED,MAAM9Q,MAAM,CAAG,IAAIpP,YAAJ,CAAkB13B,KAAK,CAAGC,MAAR,CAAiB,CAAjB,CAAqBgiD,oBAAvC,CAAf,CAEA,MAAMnyC,OAAO,CAAG,IAAI3nB,kBAAJ,CAAwB2+C,MAAxB,CAAgC9mC,KAAhC,CAAuCC,MAAvC,CAA+CgiD,oBAA/C,CAAhB,CACAnyC,OAAO,CAAC3E,MAAR,CAAiBl5B,UAAjB,CAA6B;EAC7B69B,OAAO,CAAC7S,IAAR,CAAexrB,SAAf,CAEA;EAEA,MAAM6wE,gBAAgB,CAAGD,kBAAkB,CAAG,CAA9C,CAEA,IAAM,IAAInkD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG+jD,oBAArB,CAA2C/jD,CAAC,EAA5C,CAAkD,CAEjD,MAAMqkD,WAAW,CAAGzlB,YAAY,CAAE5+B,CAAF,CAAhC,CACA,MAAMskD,WAAW,CAAGJ,YAAY,CAAElkD,CAAF,CAAhC,CAEA,MAAM2F,MAAM,CAAG7D,KAAK,CAAGC,MAAR,CAAiB,CAAjB,CAAqB/B,CAApC,CAEA,IAAM,IAAI2d,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG0mC,WAAW,CAAClyC,KAAjC,CAAwCwL,CAAC,EAAzC,CAA+C,CAE9C+lC,KAAK,CAAC79C,mBAAN,CAA2Bw+C,WAA3B,CAAwC1mC,CAAxC,EAEA,GAAK0mC,WAAW,CAACvsB,UAAZ,GAA2B,IAAhC,CAAuC2rB,WAAW,CAAEC,KAAF,CAASW,WAAT,CAAX,CAEvC,MAAMtmB,MAAM,CAAGpgB,CAAC,CAAGymC,gBAAnB,CAEAxb,MAAM,CAAEjjC,MAAM,CAAGo4B,MAAT,CAAkB,CAApB,CAAN,CAAgC2lB,KAAK,CAACpiD,CAAtC,CACAsnC,MAAM,CAAEjjC,MAAM,CAAGo4B,MAAT,CAAkB,CAApB,CAAN,CAAgC2lB,KAAK,CAACniD,CAAtC,CACAqnC,MAAM,CAAEjjC,MAAM,CAAGo4B,MAAT,CAAkB,CAApB,CAAN,CAAgC2lB,KAAK,CAAC/zC,CAAtC,CACAi5B,MAAM,CAAEjjC,MAAM,CAAGo4B,MAAT,CAAkB,CAApB,CAAN,CAAgC,CAAhC,CAEA,GAAKkmB,eAAe,GAAK,IAAzB,CAAgC,CAE/BP,KAAK,CAAC79C,mBAAN,CAA2By+C,WAA3B,CAAwC3mC,CAAxC,EAEA,GAAK2mC,WAAW,CAACxsB,UAAZ,GAA2B,IAAhC,CAAuC2rB,WAAW,CAAEC,KAAF,CAASY,WAAT,CAAX,CAEvC1b,MAAM,CAAEjjC,MAAM,CAAGo4B,MAAT,CAAkB,CAApB,CAAN,CAAgC2lB,KAAK,CAACpiD,CAAtC,CACAsnC,MAAM,CAAEjjC,MAAM,CAAGo4B,MAAT,CAAkB,CAApB,CAAN,CAAgC2lB,KAAK,CAACniD,CAAtC,CACAqnC,MAAM,CAAEjjC,MAAM,CAAGo4B,MAAT,CAAkB,CAApB,CAAN,CAAgC2lB,KAAK,CAAC/zC,CAAtC,CACAi5B,MAAM,CAAEjjC,MAAM,CAAGo4B,MAAT,CAAkB,CAApB,CAAN,CAAgC,CAAhC,CAEA,CAED,CAED,CAEDimB,KAAK,CAAG,CACP7xC,KAAK,CAAE4xC,oBADA,CAEPnyC,OAAO,CAAEA,OAFF,CAGPwJ,IAAI,CAAE,IAAI3hC,OAAJ,CAAaqoB,KAAb,CAAoBC,MAApB,CAHC,CAAR,CAMA6hD,aAAa,CAAC5hD,GAAd,CAAmBka,QAAnB,CAA6B8nC,KAA7B,EAEA,CAED;EAEA,IAAIO,kBAAkB,CAAG,CAAzB,CAEA,IAAM,IAAIvkD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG8jD,gBAAgB,CAAC5jD,MAAtC,CAA8CF,CAAC,EAA/C,CAAqD,CAEpDukD,kBAAkB,EAAIT,gBAAgB,CAAE9jD,CAAF,CAAtC,CAEA,CAED,MAAMwkD,kBAAkB,CAAGtoC,QAAQ,CAACyd,oBAAT,CAAgC,CAAhC,CAAoC,EAAI4qB,kBAAnE,CAEAtP,OAAO,CAACwP,WAAR,GAAsBC,QAAtB,CAAgCrc,EAAhC,CAAoC,0BAApC,CAAgEmc,kBAAhE,EACAvP,OAAO,CAACwP,WAAR,GAAsBC,QAAtB,CAAgCrc,EAAhC,CAAoC,uBAApC,CAA6Dyb,gBAA7D,EAEA7O,OAAO,CAACwP,WAAR,GAAsBC,QAAtB,CAAgCrc,EAAhC,CAAoC,qBAApC,CAA2D2b,KAAK,CAACpyC,OAAjE,CAA0EnD,QAA1E,EACAwmC,OAAO,CAACwP,WAAR,GAAsBC,QAAtB,CAAgCrc,EAAhC,CAAoC,yBAApC,CAA+D2b,KAAK,CAAC5oC,IAArE,EAGA,CA3GD,KA2GO;EAGN;EAEA,MAAMlb,MAAM,CAAG4jD,gBAAgB,GAAK5kD,SAArB,CAAiC,CAAjC,CAAqC4kD,gBAAgB,CAAC5jD,MAArE,CAEA,IAAIykD,UAAU,CAAGhB,cAAc,CAAEznC,QAAQ,CAAC2N,EAAX,CAA/B,CAEA,GAAK86B,UAAU,GAAKzlD,SAAf,EAA4BylD,UAAU,CAACzkD,MAAX,GAAsBA,MAAvD,CAAgE;EAI/DykD,UAAU,CAAG,EAAb,CAEA,IAAM,IAAI3kD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGE,MAArB,CAA6BF,CAAC,EAA9B,CAAoC,CAEnC2kD,UAAU,CAAE3kD,CAAF,CAAV,CAAkB,CAAEA,CAAF,CAAK,CAAL,CAAlB,CAEA,CAED2jD,cAAc,CAAEznC,QAAQ,CAAC2N,EAAX,CAAd,CAAgC86B,UAAhC,CAEA,CAED;EAEA,IAAM,IAAI3kD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGE,MAArB,CAA6BF,CAAC,EAA9B,CAAoC,CAEnC,MAAMs/B,SAAS,CAAGqlB,UAAU,CAAE3kD,CAAF,CAA5B,CAEAs/B,SAAS,CAAE,CAAF,CAAT,CAAiBt/B,CAAjB,CACAs/B,SAAS,CAAE,CAAF,CAAT,CAAiBwkB,gBAAgB,CAAE9jD,CAAF,CAAjC,CAEA,CAED2kD,UAAU,CAACC,IAAX,CAAiB96D,gBAAjB,EAEA,IAAM,IAAIkW,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9B,GAAKA,CAAC,CAAGE,MAAJ,EAAcykD,UAAU,CAAE3kD,CAAF,CAAV,CAAiB,CAAjB,CAAnB,CAA0C,CAEzC6jD,cAAc,CAAE7jD,CAAF,CAAd,CAAqB,CAArB,EAA2B2kD,UAAU,CAAE3kD,CAAF,CAAV,CAAiB,CAAjB,CAA3B,CACA6jD,cAAc,CAAE7jD,CAAF,CAAd,CAAqB,CAArB,EAA2B2kD,UAAU,CAAE3kD,CAAF,CAAV,CAAiB,CAAjB,CAA3B,CAEA,CALD,KAKO,CAEN6jD,cAAc,CAAE7jD,CAAF,CAAd,CAAqB,CAArB,EAA2B+T,MAAM,CAAC8wC,gBAAlC,CACAhB,cAAc,CAAE7jD,CAAF,CAAd,CAAqB,CAArB,EAA2B,CAA3B,CAEA,CAED,CAED6jD,cAAc,CAACe,IAAf,CAAqB/6D,aAArB,EAEA,MAAM+0C,YAAY,CAAG1iB,QAAQ,CAACwd,eAAT,CAAyB7U,QAA9C,CACA,MAAMq/B,YAAY,CAAGhoC,QAAQ,CAACwd,eAAT,CAAyBngB,MAA9C,CAEA,IAAIgrC,kBAAkB,CAAG,CAAzB,CAEA,IAAM,IAAIvkD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9B,MAAMs/B,SAAS,CAAGukB,cAAc,CAAE7jD,CAAF,CAAhC,CACA,MAAMP,KAAK,CAAG6/B,SAAS,CAAE,CAAF,CAAvB,CACA,MAAMr+B,KAAK,CAAGq+B,SAAS,CAAE,CAAF,CAAvB,CAEA,GAAK7/B,KAAK,GAAKsU,MAAM,CAAC8wC,gBAAjB,EAAqC5jD,KAA1C,CAAkD,CAEjD,GAAK29B,YAAY,EAAI1iB,QAAQ,CAACge,YAAT,CAAuB,cAAgBl6B,CAAvC,IAA+C4+B,YAAY,CAAEn/B,KAAF,CAAhF,CAA4F,CAE3Fyc,QAAQ,CAACie,YAAT,CAAuB,cAAgBn6B,CAAvC,CAA0C4+B,YAAY,CAAEn/B,KAAF,CAAtD,EAEA,CAED,GAAKykD,YAAY,EAAIhoC,QAAQ,CAACge,YAAT,CAAuB,cAAgBl6B,CAAvC,IAA+CkkD,YAAY,CAAEzkD,KAAF,CAAhF,CAA4F,CAE3Fyc,QAAQ,CAACie,YAAT,CAAuB,cAAgBn6B,CAAvC,CAA0CkkD,YAAY,CAAEzkD,KAAF,CAAtD,EAEA,CAED4/B,eAAe,CAAEr/B,CAAF,CAAf,CAAuBiB,KAAvB,CACAsjD,kBAAkB,EAAItjD,KAAtB,CAEA,CAjBD,KAiBO,CAEN,GAAK29B,YAAY,EAAI1iB,QAAQ,CAACme,YAAT,CAAuB,cAAgBr6B,CAAvC,IAA+C,IAApE,CAA2E,CAE1Ekc,QAAQ,CAACke,eAAT,CAA0B,cAAgBp6B,CAA1C,EAEA,CAED,GAAKkkD,YAAY,EAAIhoC,QAAQ,CAACme,YAAT,CAAuB,cAAgBr6B,CAAvC,IAA+C,IAApE,CAA2E,CAE1Ekc,QAAQ,CAACke,eAAT,CAA0B,cAAgBp6B,CAA1C,EAEA,CAEDq/B,eAAe,CAAEr/B,CAAF,CAAf,CAAuB,CAAvB,CAEA,CAED,CAED;EACA;EACA;EACA,MAAMwkD,kBAAkB,CAAGtoC,QAAQ,CAACyd,oBAAT,CAAgC,CAAhC,CAAoC,EAAI4qB,kBAAnE,CAEAtP,OAAO,CAACwP,WAAR,GAAsBC,QAAtB,CAAgCrc,EAAhC,CAAoC,0BAApC,CAAgEmc,kBAAhE,EACAvP,OAAO,CAACwP,WAAR,GAAsBC,QAAtB,CAAgCrc,EAAhC,CAAoC,uBAApC,CAA6DhJ,eAA7D,EAEA,CAED,CAED,OAAO,CAEN7qB,MAAM,CAAEA,MAFF,CAAP,CAMA,CAED,SAASxqB,YAAT,CAAuBq+C,EAAvB,CAA2Bxd,UAA3B,CAAuC4O,UAAvC,CAAmD8e,IAAnD,CAA0D,CAEzD,IAAIuM,SAAS,CAAG,IAAIrc,OAAJ,EAAhB,CAEA,SAASj0B,MAAT,CAAiB+G,MAAjB,CAA0B,CAEzB,MAAMwsB,KAAK,CAAGwQ,IAAI,CAAC/T,MAAL,CAAYuD,KAA1B,CAEA,MAAM7rB,QAAQ,CAAGX,MAAM,CAACW,QAAxB,CACA,MAAM6oC,cAAc,CAAGl6B,UAAU,CAAC6e,GAAX,CAAgBnuB,MAAhB,CAAwBW,QAAxB,CAAvB,CAEA;EAEA,GAAK4oC,SAAS,CAACpb,GAAV,CAAeqb,cAAf,IAAoChd,KAAzC,CAAiD,CAEhDld,UAAU,CAACrW,MAAX,CAAmBuwC,cAAnB,EAEAD,SAAS,CAAC9iD,GAAV,CAAe+iD,cAAf,CAA+Bhd,KAA/B,EAEA,CAED,GAAKxsB,MAAM,CAAC0P,eAAZ,CAA8B,CAE7B,GAAK1P,MAAM,CAACjc,gBAAP,CAAyB,SAAzB,CAAoC0lD,sBAApC,IAAiE,KAAtE,CAA8E,CAE7EzpC,MAAM,CAACzc,gBAAP,CAAyB,SAAzB,CAAoCkmD,sBAApC,EAEA,CAEDvrB,UAAU,CAACjlB,MAAX,CAAmB+G,MAAM,CAAC2P,cAA1B,CAA0C,KAA1C,EAEA,GAAK3P,MAAM,CAAC4P,aAAP,GAAyB,IAA9B,CAAqC,CAEpCsO,UAAU,CAACjlB,MAAX,CAAmB+G,MAAM,CAAC4P,aAA1B,CAAyC,KAAzC,EAEA,CAED,CAED,OAAO45B,cAAP,CAEA,CAED,SAAS51C,OAAT,EAAmB,CAElB21C,SAAS,CAAG,IAAIrc,OAAJ,EAAZ,CAEA,CAED,SAASuc,sBAAT,CAAiCplD,KAAjC,CAAyC,CAExC,MAAMqlD,aAAa,CAAGrlD,KAAK,CAACC,MAA5B,CAEAolD,aAAa,CAAC1lD,mBAAd,CAAmC,SAAnC,CAA8CylD,sBAA9C,EAEAvrB,UAAU,CAACjQ,MAAX,CAAmBy7B,aAAa,CAAC/5B,cAAjC,EAEA,GAAK+5B,aAAa,CAAC95B,aAAd,GAAgC,IAArC,CAA4CsO,UAAU,CAACjQ,MAAX,CAAmBy7B,aAAa,CAAC95B,aAAjC,EAE5C,CAED,OAAO,CAEN3W,MAAM,CAAEA,MAFF,CAGNrF,OAAO,CAAEA,OAHH,CAAP,CAOA,CAED,MAAMjlB,aAAN,SAA4BpQ,OAAQ,CAEnC+nB,WAAW,CAAE6N,IAAI,CAAG,IAAT,CAAe5N,KAAK,CAAG,CAAvB,CAA0BC,MAAM,CAAG,CAAnC,CAAsCyP,KAAK,CAAG,CAA9C,CAAkD;EAG5D;EACA;EACA;EACA;EACA;EACA;EAEA,MAAO,IAAP,EAEA,KAAKzF,KAAL,CAAa,CAAE2D,IAAF,CAAQ5N,KAAR,CAAeC,MAAf,CAAuByP,KAAvB,CAAb,CAEA,KAAKzE,SAAL,CAAiBp6B,aAAjB,CACA,KAAKq6B,SAAL,CAAiBr6B,aAAjB,CAEA,KAAK4wE,KAAL,CAAa9wE,mBAAb,CAEA,KAAKi7B,eAAL,CAAuB,KAAvB,CACA,KAAKE,KAAL,CAAa,KAAb,CACA,KAAKC,eAAL,CAAuB,CAAvB,CAEA,KAAKyB,WAAL,CAAmB,IAAnB,CAEA,CA3BkC,CA+BpCplB,aAAa,CAACsc,SAAd,CAAwB0+C,eAAxB,CAA0C,IAA1C,CAEA;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,GAEA,MAAM/6D,YAAY,CAAG,IAAIrQ,OAAJ,EAArB,CACA,MAAMsQ,mBAAmB,CAAG,IAAIH,kBAAJ,EAA5B,CACA,MAAMI,cAAc,CAAG,IAAIH,aAAJ,EAAvB,CACA,MAAMI,gBAAgB,CAAG,IAAI/H,WAAJ,EAAzB,CAEA;EAEA;EAEA,MAAMgI,aAAa,CAAG,EAAtB,CACA,MAAMC,aAAa,CAAG,EAAtB,CAEA;EAEA,MAAMC,SAAS,CAAG,IAAI+uC,YAAJ,CAAkB,EAAlB,CAAlB,CACA,MAAM9uC,SAAS,CAAG,IAAI8uC,YAAJ,CAAkB,CAAlB,CAAlB,CACA,MAAM7uC,SAAS,CAAG,IAAI6uC,YAAJ,CAAkB,CAAlB,CAAlB,CAEA;EAEA,SAAS5uC,OAAT,CAAkBkV,KAAlB,CAAyBqlD,OAAzB,CAAkCC,SAAlC,CAA8C,CAE7C,MAAMC,SAAS,CAAGvlD,KAAK,CAAE,CAAF,CAAvB,CAEA,GAAKulD,SAAS,EAAI,CAAb,EAAkBA,SAAS,CAAG,CAAnC,CAAuC,OAAOvlD,KAAP,CACvC;EACA;EAEA,MAAMsB,CAAC,CAAG+jD,OAAO,CAAGC,SAApB,CACA,IAAIj7C,CAAC,CAAG5f,aAAa,CAAE6W,CAAF,CAArB,CAEA,GAAK+I,CAAC,GAAKjL,SAAX,CAAuB,CAEtBiL,CAAC,CAAG,IAAIqvB,YAAJ,CAAkBp4B,CAAlB,CAAJ,CACA7W,aAAa,CAAE6W,CAAF,CAAb,CAAqB+I,CAArB,CAEA,CAED,GAAKg7C,OAAO,GAAK,CAAjB,CAAqB,CAEpBE,SAAS,CAACz/C,OAAV,CAAmBuE,CAAnB,CAAsB,CAAtB,EAEA,IAAM,IAAInK,CAAC,CAAG,CAAR,CAAW2F,MAAM,CAAG,CAA1B,CAA6B3F,CAAC,GAAKmlD,OAAnC,CAA4C,EAAGnlD,CAA/C,CAAmD,CAElD2F,MAAM,EAAIy/C,SAAV,CACAtlD,KAAK,CAAEE,CAAF,CAAL,CAAW4F,OAAX,CAAoBuE,CAApB,CAAuBxE,MAAvB,EAEA,CAED,CAED,OAAOwE,CAAP,CAEA,CAED,SAAStf,WAAT,CAAsBqY,CAAtB,CAAyBC,CAAzB,CAA6B,CAE5B,GAAKD,CAAC,CAAChD,MAAF,GAAaiD,CAAC,CAACjD,MAApB,CAA6B,YAAA,CAE7B,IAAM,IAAIF,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGiD,CAAC,CAAChD,MAAvB,CAA+BF,CAAC,CAAGC,CAAnC,CAAsCD,CAAC,EAAvC,CAA6C,CAE5C,GAAKkD,CAAC,CAAElD,CAAF,CAAD,GAAWmD,CAAC,CAAEnD,CAAF,CAAjB,CAAyB,YAAA,CAEzB,CAED,WAAA,CAEA,CAED,SAASlV,SAAT,CAAoBoY,CAApB,CAAuBC,CAAvB,CAA2B,CAE1B,IAAM,IAAInD,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGkD,CAAC,CAACjD,MAAvB,CAA+BF,CAAC,CAAGC,CAAnC,CAAsCD,CAAC,EAAvC,CAA6C,CAE5CkD,CAAC,CAAElD,CAAF,CAAD,CAASmD,CAAC,CAAEnD,CAAF,CAAV,CAEA,CAED,CAED;EAEA,SAASjV,aAAT,CAAwB0jB,QAAxB,CAAkCrN,CAAlC,CAAsC,CAErC,IAAI+I,CAAC,CAAG3f,aAAa,CAAE4W,CAAF,CAArB,CAEA,GAAK+I,CAAC,GAAKjL,SAAX,CAAuB,CAEtBiL,CAAC,CAAG,IAAI8+B,UAAJ,CAAgB7nC,CAAhB,CAAJ,CACA5W,aAAa,CAAE4W,CAAF,CAAb,CAAqB+I,CAArB,CAEA,CAED,IAAM,IAAInK,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAKoB,CAAvB,CAA0B,EAAGpB,CAA7B,CAAiC,CAEhCmK,CAAC,CAAEnK,CAAF,CAAD,CAASyO,QAAQ,CAAC62C,mBAAT,EAAT,CAEA,CAED,OAAOn7C,CAAP,CAEA,CAED;EAEA;EACA;EAEA;EAEA,SAASnf,WAAT,CAAsBq9C,EAAtB,CAA0B3lC,CAA1B,CAA8B,CAE7B,MAAM8pB,KAAK,CAAG,KAAKA,KAAnB,CAEA,GAAKA,KAAK,CAAE,CAAF,CAAL,GAAe9pB,CAApB,CAAwB,OAExB2lC,EAAE,CAACkd,SAAH,CAAc,KAAKC,IAAnB,CAAyB9iD,CAAzB,EAEA8pB,KAAK,CAAE,CAAF,CAAL,CAAa9pB,CAAb,CAEA,CAED;EAEA,SAASzX,WAAT,CAAsBo9C,EAAtB,CAA0B3lC,CAA1B,CAA8B,CAE7B,MAAM8pB,KAAK,CAAG,KAAKA,KAAnB,CAEA,GAAK9pB,CAAC,CAACpB,CAAF,GAAQpC,SAAb,CAAyB,CAExB,GAAKstB,KAAK,CAAE,CAAF,CAAL,GAAe9pB,CAAC,CAACpB,CAAjB,EAAsBkrB,KAAK,CAAE,CAAF,CAAL,GAAe9pB,CAAC,CAACnB,CAA5C,CAAgD,CAE/C8mC,EAAE,CAACod,SAAH,CAAc,KAAKD,IAAnB,CAAyB9iD,CAAC,CAACpB,CAA3B,CAA8BoB,CAAC,CAACnB,CAAhC,EAEAirB,KAAK,CAAE,CAAF,CAAL,CAAa9pB,CAAC,CAACpB,CAAf,CACAkrB,KAAK,CAAE,CAAF,CAAL,CAAa9pB,CAAC,CAACnB,CAAf,CAEA,CAED,CAXD,KAWO,CAEN,GAAK1W,WAAW,CAAE2hC,KAAF,CAAS9pB,CAAT,CAAhB,CAA+B,OAE/B2lC,EAAE,CAACqd,UAAH,CAAe,KAAKF,IAApB,CAA0B9iD,CAA1B,EAEA5X,SAAS,CAAE0hC,KAAF,CAAS9pB,CAAT,CAAT,CAEA,CAED,CAED,SAASxX,WAAT,CAAsBm9C,EAAtB,CAA0B3lC,CAA1B,CAA8B,CAE7B,MAAM8pB,KAAK,CAAG,KAAKA,KAAnB,CAEA,GAAK9pB,CAAC,CAACpB,CAAF,GAAQpC,SAAb,CAAyB,CAExB,GAAKstB,KAAK,CAAE,CAAF,CAAL,GAAe9pB,CAAC,CAACpB,CAAjB,EAAsBkrB,KAAK,CAAE,CAAF,CAAL,GAAe9pB,CAAC,CAACnB,CAAvC,EAA4CirB,KAAK,CAAE,CAAF,CAAL,GAAe9pB,CAAC,CAACiN,CAAlE,CAAsE,CAErE04B,EAAE,CAACsd,SAAH,CAAc,KAAKH,IAAnB,CAAyB9iD,CAAC,CAACpB,CAA3B,CAA8BoB,CAAC,CAACnB,CAAhC,CAAmCmB,CAAC,CAACiN,CAArC,EAEA6c,KAAK,CAAE,CAAF,CAAL,CAAa9pB,CAAC,CAACpB,CAAf,CACAkrB,KAAK,CAAE,CAAF,CAAL,CAAa9pB,CAAC,CAACnB,CAAf,CACAirB,KAAK,CAAE,CAAF,CAAL,CAAa9pB,CAAC,CAACiN,CAAf,CAEA,CAED,CAZD,QAYYjN,CAAC,CAACyH,CAAF,GAAQjL,SAAb,CAAyB,CAE/B,GAAKstB,KAAK,CAAE,CAAF,CAAL,GAAe9pB,CAAC,CAACyH,CAAjB,EAAsBqiB,KAAK,CAAE,CAAF,CAAL,GAAe9pB,CAAC,CAAC6G,CAAvC,EAA4CijB,KAAK,CAAE,CAAF,CAAL,GAAe9pB,CAAC,CAACS,CAAlE,CAAsE,CAErEklC,EAAE,CAACsd,SAAH,CAAc,KAAKH,IAAnB,CAAyB9iD,CAAC,CAACyH,CAA3B,CAA8BzH,CAAC,CAAC6G,CAAhC,CAAmC7G,CAAC,CAACS,CAArC,EAEAqpB,KAAK,CAAE,CAAF,CAAL,CAAa9pB,CAAC,CAACyH,CAAf,CACAqiB,KAAK,CAAE,CAAF,CAAL,CAAa9pB,CAAC,CAAC6G,CAAf,CACAijB,KAAK,CAAE,CAAF,CAAL,CAAa9pB,CAAC,CAACS,CAAf,CAEA,CAED,CAZM,KAYA,CAEN,GAAKtY,WAAW,CAAE2hC,KAAF,CAAS9pB,CAAT,CAAhB,CAA+B,OAE/B2lC,EAAE,CAACud,UAAH,CAAe,KAAKJ,IAApB,CAA0B9iD,CAA1B,EAEA5X,SAAS,CAAE0hC,KAAF,CAAS9pB,CAAT,CAAT,CAEA,CAED,CAED,SAASvX,WAAT,CAAsBk9C,EAAtB,CAA0B3lC,CAA1B,CAA8B,CAE7B,MAAM8pB,KAAK,CAAG,KAAKA,KAAnB,CAEA,GAAK9pB,CAAC,CAACpB,CAAF,GAAQpC,SAAb,CAAyB,CAExB,GAAKstB,KAAK,CAAE,CAAF,CAAL,GAAe9pB,CAAC,CAACpB,CAAjB,EAAsBkrB,KAAK,CAAE,CAAF,CAAL,GAAe9pB,CAAC,CAACnB,CAAvC,EAA4CirB,KAAK,CAAE,CAAF,CAAL,GAAe9pB,CAAC,CAACiN,CAA7D,EAAkE6c,KAAK,CAAE,CAAF,CAAL,GAAe9pB,CAAC,CAACE,CAAxF,CAA4F,CAE3FylC,EAAE,CAACwd,SAAH,CAAc,KAAKL,IAAnB,CAAyB9iD,CAAC,CAACpB,CAA3B,CAA8BoB,CAAC,CAACnB,CAAhC,CAAmCmB,CAAC,CAACiN,CAArC,CAAwCjN,CAAC,CAACE,CAA1C,EAEA4pB,KAAK,CAAE,CAAF,CAAL,CAAa9pB,CAAC,CAACpB,CAAf,CACAkrB,KAAK,CAAE,CAAF,CAAL,CAAa9pB,CAAC,CAACnB,CAAf,CACAirB,KAAK,CAAE,CAAF,CAAL,CAAa9pB,CAAC,CAACiN,CAAf,CACA6c,KAAK,CAAE,CAAF,CAAL,CAAa9pB,CAAC,CAACE,CAAf,CAEA,CAED,CAbD,KAaO,CAEN,GAAK/X,WAAW,CAAE2hC,KAAF,CAAS9pB,CAAT,CAAhB,CAA+B,OAE/B2lC,EAAE,CAACyd,UAAH,CAAe,KAAKN,IAApB,CAA0B9iD,CAA1B,EAEA5X,SAAS,CAAE0hC,KAAF,CAAS9pB,CAAT,CAAT,CAEA,CAED,CAED;EAEA,SAAStX,UAAT,CAAqBi9C,EAArB,CAAyB3lC,CAAzB,CAA6B,CAE5B,MAAM8pB,KAAK,CAAG,KAAKA,KAAnB,CACA,MAAM1oB,QAAQ,CAAGpB,CAAC,CAACoB,QAAnB,CAEA,GAAKA,QAAQ,GAAK5E,SAAlB,CAA8B,CAE7B,GAAKrU,WAAW,CAAE2hC,KAAF,CAAS9pB,CAAT,CAAhB,CAA+B,OAE/B2lC,EAAE,CAAC0d,gBAAH,CAAqB,KAAKP,IAA1B,CAAgC,KAAhC,CAAuC9iD,CAAvC,EAEA5X,SAAS,CAAE0hC,KAAF,CAAS9pB,CAAT,CAAT,CAEA,CARD,KAQO,CAEN,GAAK7X,WAAW,CAAE2hC,KAAF,CAAS1oB,QAAT,CAAhB,CAAsC,OAEtCnZ,SAAS,CAACqX,GAAV,CAAe8B,QAAf,EAEAukC,EAAE,CAAC0d,gBAAH,CAAqB,KAAKP,IAA1B,CAAgC,KAAhC,CAAuC76D,SAAvC,EAEAG,SAAS,CAAE0hC,KAAF,CAAS1oB,QAAT,CAAT,CAEA,CAED,CAED,SAASzY,UAAT,CAAqBg9C,EAArB,CAAyB3lC,CAAzB,CAA6B,CAE5B,MAAM8pB,KAAK,CAAG,KAAKA,KAAnB,CACA,MAAM1oB,QAAQ,CAAGpB,CAAC,CAACoB,QAAnB,CAEA,GAAKA,QAAQ,GAAK5E,SAAlB,CAA8B,CAE7B,GAAKrU,WAAW,CAAE2hC,KAAF,CAAS9pB,CAAT,CAAhB,CAA+B,OAE/B2lC,EAAE,CAAC2d,gBAAH,CAAqB,KAAKR,IAA1B,CAAgC,KAAhC,CAAuC9iD,CAAvC,EAEA5X,SAAS,CAAE0hC,KAAF,CAAS9pB,CAAT,CAAT,CAEA,CARD,KAQO,CAEN,GAAK7X,WAAW,CAAE2hC,KAAF,CAAS1oB,QAAT,CAAhB,CAAsC,OAEtCpZ,SAAS,CAACsX,GAAV,CAAe8B,QAAf,EAEAukC,EAAE,CAAC2d,gBAAH,CAAqB,KAAKR,IAA1B,CAAgC,KAAhC,CAAuC96D,SAAvC,EAEAI,SAAS,CAAE0hC,KAAF,CAAS1oB,QAAT,CAAT,CAEA,CAED,CAED,SAASxY,UAAT,CAAqB+8C,EAArB,CAAyB3lC,CAAzB,CAA6B,CAE5B,MAAM8pB,KAAK,CAAG,KAAKA,KAAnB,CACA,MAAM1oB,QAAQ,CAAGpB,CAAC,CAACoB,QAAnB,CAEA,GAAKA,QAAQ,GAAK5E,SAAlB,CAA8B,CAE7B,GAAKrU,WAAW,CAAE2hC,KAAF,CAAS9pB,CAAT,CAAhB,CAA+B,OAE/B2lC,EAAE,CAAC4d,gBAAH,CAAqB,KAAKT,IAA1B,CAAgC,KAAhC,CAAuC9iD,CAAvC,EAEA5X,SAAS,CAAE0hC,KAAF,CAAS9pB,CAAT,CAAT,CAEA,CARD,KAQO,CAEN,GAAK7X,WAAW,CAAE2hC,KAAF,CAAS1oB,QAAT,CAAhB,CAAsC,OAEtCrZ,SAAS,CAACuX,GAAV,CAAe8B,QAAf,EAEAukC,EAAE,CAAC4d,gBAAH,CAAqB,KAAKT,IAA1B,CAAgC,KAAhC,CAAuC/6D,SAAvC,EAEAK,SAAS,CAAE0hC,KAAF,CAAS1oB,QAAT,CAAT,CAEA,CAED,CAED;EAEA,SAASvY,WAAT,CAAsB88C,EAAtB,CAA0B3lC,CAA1B,CAA8B,CAE7B,MAAM8pB,KAAK,CAAG,KAAKA,KAAnB,CAEA,GAAKA,KAAK,CAAE,CAAF,CAAL,GAAe9pB,CAApB,CAAwB,OAExB2lC,EAAE,CAAC6d,SAAH,CAAc,KAAKV,IAAnB,CAAyB9iD,CAAzB,EAEA8pB,KAAK,CAAE,CAAF,CAAL,CAAa9pB,CAAb,CAEA,CAED;EAEA,SAASlX,WAAT,CAAsB68C,EAAtB,CAA0B3lC,CAA1B,CAA8B,CAE7B,MAAM8pB,KAAK,CAAG,KAAKA,KAAnB,CAEA,GAAK3hC,WAAW,CAAE2hC,KAAF,CAAS9pB,CAAT,CAAhB,CAA+B,OAE/B2lC,EAAE,CAAC8d,UAAH,CAAe,KAAKX,IAApB,CAA0B9iD,CAA1B,EAEA5X,SAAS,CAAE0hC,KAAF,CAAS9pB,CAAT,CAAT,CAEA,CAED,SAASjX,WAAT,CAAsB48C,EAAtB,CAA0B3lC,CAA1B,CAA8B,CAE7B,MAAM8pB,KAAK,CAAG,KAAKA,KAAnB,CAEA,GAAK3hC,WAAW,CAAE2hC,KAAF,CAAS9pB,CAAT,CAAhB,CAA+B,OAE/B2lC,EAAE,CAAC+d,UAAH,CAAe,KAAKZ,IAApB,CAA0B9iD,CAA1B,EAEA5X,SAAS,CAAE0hC,KAAF,CAAS9pB,CAAT,CAAT,CAEA,CAED,SAAShX,WAAT,CAAsB28C,EAAtB,CAA0B3lC,CAA1B,CAA8B,CAE7B,MAAM8pB,KAAK,CAAG,KAAKA,KAAnB,CAEA,GAAK3hC,WAAW,CAAE2hC,KAAF,CAAS9pB,CAAT,CAAhB,CAA+B,OAE/B2lC,EAAE,CAACge,UAAH,CAAe,KAAKb,IAApB,CAA0B9iD,CAA1B,EAEA5X,SAAS,CAAE0hC,KAAF,CAAS9pB,CAAT,CAAT,CAEA,CAED;EAEA,SAAS/W,YAAT,CAAuB08C,EAAvB,CAA2B3lC,CAA3B,CAA+B,CAE9B,MAAM8pB,KAAK,CAAG,KAAKA,KAAnB,CAEA,GAAKA,KAAK,CAAE,CAAF,CAAL,GAAe9pB,CAApB,CAAwB,OAExB2lC,EAAE,CAACie,UAAH,CAAe,KAAKd,IAApB,CAA0B9iD,CAA1B,EAEA8pB,KAAK,CAAE,CAAF,CAAL,CAAa9pB,CAAb,CAEA,CAED;EAEA,SAAS9W,YAAT,CAAuBy8C,EAAvB,CAA2B3lC,CAA3B,CAA+B,CAE9B,MAAM8pB,KAAK,CAAG,KAAKA,KAAnB,CAEA,GAAK3hC,WAAW,CAAE2hC,KAAF,CAAS9pB,CAAT,CAAhB,CAA+B,OAE/B2lC,EAAE,CAACke,WAAH,CAAgB,KAAKf,IAArB,CAA2B9iD,CAA3B,EAEA5X,SAAS,CAAE0hC,KAAF,CAAS9pB,CAAT,CAAT,CAEA,CAED,SAAS7W,YAAT,CAAuBw8C,EAAvB,CAA2B3lC,CAA3B,CAA+B,CAE9B,MAAM8pB,KAAK,CAAG,KAAKA,KAAnB,CAEA,GAAK3hC,WAAW,CAAE2hC,KAAF,CAAS9pB,CAAT,CAAhB,CAA+B,OAE/B2lC,EAAE,CAACme,WAAH,CAAgB,KAAKhB,IAArB,CAA2B9iD,CAA3B,EAEA5X,SAAS,CAAE0hC,KAAF,CAAS9pB,CAAT,CAAT,CAEA,CAED,SAAS5W,YAAT,CAAuBu8C,EAAvB,CAA2B3lC,CAA3B,CAA+B,CAE9B,MAAM8pB,KAAK,CAAG,KAAKA,KAAnB,CAEA,GAAK3hC,WAAW,CAAE2hC,KAAF,CAAS9pB,CAAT,CAAhB,CAA+B,OAE/B2lC,EAAE,CAACoe,WAAH,CAAgB,KAAKjB,IAArB,CAA2B9iD,CAA3B,EAEA5X,SAAS,CAAE0hC,KAAF,CAAS9pB,CAAT,CAAT,CAEA,CAGD;EAEA,SAAS3W,UAAT,CAAqBs8C,EAArB,CAAyB3lC,CAAzB,CAA4B+L,QAA5B,CAAuC,CAEtC,MAAM+d,KAAK,CAAG,KAAKA,KAAnB,CACA,MAAMk6B,IAAI,CAAGj4C,QAAQ,CAAC62C,mBAAT,EAAb,CAEA,GAAK94B,KAAK,CAAE,CAAF,CAAL,GAAek6B,IAApB,CAA2B,CAE1Bre,EAAE,CAAC6d,SAAH,CAAc,KAAKV,IAAnB,CAAyBkB,IAAzB,EACAl6B,KAAK,CAAE,CAAF,CAAL,CAAak6B,IAAb,CAEA,CAEDj4C,QAAQ,CAACk4C,gBAAT,CAA2BjkD,CAAC,EAAIvY,YAAhC,CAA8Cu8D,IAA9C,EAEA,CAED,SAAS16D,YAAT,CAAuBq8C,EAAvB,CAA2B3lC,CAA3B,CAA8B+L,QAA9B,CAAyC,CAExC,MAAM+d,KAAK,CAAG,KAAKA,KAAnB,CACA,MAAMk6B,IAAI,CAAGj4C,QAAQ,CAAC62C,mBAAT,EAAb,CAEA,GAAK94B,KAAK,CAAE,CAAF,CAAL,GAAek6B,IAApB,CAA2B,CAE1Bre,EAAE,CAAC6d,SAAH,CAAc,KAAKV,IAAnB,CAAyBkB,IAAzB,EACAl6B,KAAK,CAAE,CAAF,CAAL,CAAak6B,IAAb,CAEA,CAEDj4C,QAAQ,CAACm4C,YAAT,CAAuBlkD,CAAC,EAAIrY,cAA5B,CAA4Cq8D,IAA5C,EAEA,CAED,SAASz6D,UAAT,CAAqBo8C,EAArB,CAAyB3lC,CAAzB,CAA4B+L,QAA5B,CAAuC,CAEtC,MAAM+d,KAAK,CAAG,KAAKA,KAAnB,CACA,MAAMk6B,IAAI,CAAGj4C,QAAQ,CAAC62C,mBAAT,EAAb,CAEA,GAAK94B,KAAK,CAAE,CAAF,CAAL,GAAek6B,IAApB,CAA2B,CAE1Bre,EAAE,CAAC6d,SAAH,CAAc,KAAKV,IAAnB,CAAyBkB,IAAzB,EACAl6B,KAAK,CAAE,CAAF,CAAL,CAAak6B,IAAb,CAEA,CAEDj4C,QAAQ,CAACo4C,kBAAT,CAA6BnkD,CAAC,EAAIpY,gBAAlC,CAAoDo8D,IAApD,EAEA,CAED,SAASx6D,iBAAT,CAA4Bm8C,EAA5B,CAAgC3lC,CAAhC,CAAmC+L,QAAnC,CAA8C,CAE7C,MAAM+d,KAAK,CAAG,KAAKA,KAAnB,CACA,MAAMk6B,IAAI,CAAGj4C,QAAQ,CAAC62C,mBAAT,EAAb,CAEA,GAAK94B,KAAK,CAAE,CAAF,CAAL,GAAek6B,IAApB,CAA2B,CAE1Bre,EAAE,CAAC6d,SAAH,CAAc,KAAKV,IAAnB,CAAyBkB,IAAzB,EACAl6B,KAAK,CAAE,CAAF,CAAL,CAAak6B,IAAb,CAEA,CAEDj4C,QAAQ,CAACq4C,iBAAT,CAA4BpkD,CAAC,EAAItY,mBAAjC,CAAsDs8D,IAAtD,EAEA,CAED;EAEA,SAASv6D,iBAAT,CAA4B4S,IAA5B,CAAmC,CAElC,OAASA,IAAT,EAEC,WAAA,CAAa,OAAO/T,WAAP,CAAoB;EACjC,WAAA,CAAa,OAAOC,WAAP,CAAoB;EACjC,WAAA,CAAa,OAAOC,WAAP,CAAoB;EACjC,WAAA,CAAa,OAAOC,WAAP,CAAoB;EAEjC,WAAA,CAAa,OAAOC,UAAP,CAAmB;EAChC,WAAA,CAAa,OAAOC,UAAP,CAAmB;EAChC,WAAA,CAAa,OAAOC,UAAP,CAAmB;EAEhC,WAAA,CAAa,WAAA,CAAa,OAAOC,WAAP,CAAoB;EAC9C,WAAA,CAAa,WAAA,CAAa,OAAOC,WAAP,CAAoB;EAC9C,WAAA,CAAa,WAAA,CAAa,OAAOC,WAAP,CAAoB;EAC9C,WAAA,CAAa,WAAA,CAAa,OAAOC,WAAP,CAAoB;EAE9C,WAAA,CAAa,OAAOC,YAAP,CAAqB;EAClC,WAAA,CAAa,OAAOC,YAAP,CAAqB;EAClC,WAAA,CAAa,OAAOC,YAAP,CAAqB;EAClC,WAAA,CAAa,OAAOC,YAAP,CAAqB;EAElC,WAAA,CAAa;EACb,WAAA,CAAa;EACb,WAAA,CAAa;EACb,WAAA,CAAa;EACb,WAAA;EACC,OAAOC,UAAP,CAED,WAAA,CAAa;EACb,WAAA,CAAa;EACb,WAAA;EACC,OAAOC,YAAP,CAED,WAAA,CAAa;EACb,WAAA,CAAa;EACb,WAAA,CAAa;EACb,WAAA;EACC,OAAOC,UAAP,CAED,WAAA,CAAa;EACb,WAAA,CAAa;EACb,WAAA,CAAa;EACb,WAAA;EACC,OAAOC,iBAAP,CA3CF,CA+CA,CAGD;EAEA,SAASE,gBAAT,CAA2Bi8C,EAA3B,CAA+B3lC,CAA/B,CAAmC,CAElC2lC,EAAE,CAAC0e,UAAH,CAAe,KAAKvB,IAApB,CAA0B9iD,CAA1B,EAEA,CAED;EAEA,SAASrW,gBAAT,CAA2Bg8C,EAA3B,CAA+B3lC,CAA/B,CAAmC,CAElC,MAAMgN,IAAI,CAAG9kB,OAAO,CAAE8X,CAAF,CAAK,KAAK0Y,IAAV,CAAgB,CAAhB,CAApB,CAEAitB,EAAE,CAACqd,UAAH,CAAe,KAAKF,IAApB,CAA0B91C,IAA1B,EAEA,CAED,SAASpjB,gBAAT,CAA2B+7C,EAA3B,CAA+B3lC,CAA/B,CAAmC,CAElC,MAAMgN,IAAI,CAAG9kB,OAAO,CAAE8X,CAAF,CAAK,KAAK0Y,IAAV,CAAgB,CAAhB,CAApB,CAEAitB,EAAE,CAACud,UAAH,CAAe,KAAKJ,IAApB,CAA0B91C,IAA1B,EAEA,CAED,SAASnjB,gBAAT,CAA2B87C,EAA3B,CAA+B3lC,CAA/B,CAAmC,CAElC,MAAMgN,IAAI,CAAG9kB,OAAO,CAAE8X,CAAF,CAAK,KAAK0Y,IAAV,CAAgB,CAAhB,CAApB,CAEAitB,EAAE,CAACyd,UAAH,CAAe,KAAKN,IAApB,CAA0B91C,IAA1B,EAEA,CAED;EAEA,SAASljB,eAAT,CAA0B67C,EAA1B,CAA8B3lC,CAA9B,CAAkC,CAEjC,MAAMgN,IAAI,CAAG9kB,OAAO,CAAE8X,CAAF,CAAK,KAAK0Y,IAAV,CAAgB,CAAhB,CAApB,CAEAitB,EAAE,CAAC0d,gBAAH,CAAqB,KAAKP,IAA1B,CAAgC,KAAhC,CAAuC91C,IAAvC,EAEA,CAED,SAASjjB,eAAT,CAA0B47C,EAA1B,CAA8B3lC,CAA9B,CAAkC,CAEjC,MAAMgN,IAAI,CAAG9kB,OAAO,CAAE8X,CAAF,CAAK,KAAK0Y,IAAV,CAAgB,CAAhB,CAApB,CAEAitB,EAAE,CAAC2d,gBAAH,CAAqB,KAAKR,IAA1B,CAAgC,KAAhC,CAAuC91C,IAAvC,EAEA,CAED,SAAShjB,eAAT,CAA0B27C,EAA1B,CAA8B3lC,CAA9B,CAAkC,CAEjC,MAAMgN,IAAI,CAAG9kB,OAAO,CAAE8X,CAAF,CAAK,KAAK0Y,IAAV,CAAgB,EAAhB,CAApB,CAEAitB,EAAE,CAAC4d,gBAAH,CAAqB,KAAKT,IAA1B,CAAgC,KAAhC,CAAuC91C,IAAvC,EAEA,CAED;EAEA,SAAS/iB,gBAAT,CAA2B07C,EAA3B,CAA+B3lC,CAA/B,CAAmC,CAElC2lC,EAAE,CAAC2e,UAAH,CAAe,KAAKxB,IAApB,CAA0B9iD,CAA1B,EAEA,CAED;EAEA,SAAS9V,gBAAT,CAA2By7C,EAA3B,CAA+B3lC,CAA/B,CAAmC,CAElC2lC,EAAE,CAAC8d,UAAH,CAAe,KAAKX,IAApB,CAA0B9iD,CAA1B,EAEA,CAED,SAAS7V,gBAAT,CAA2Bw7C,EAA3B,CAA+B3lC,CAA/B,CAAmC,CAElC2lC,EAAE,CAAC+d,UAAH,CAAe,KAAKZ,IAApB,CAA0B9iD,CAA1B,EAEA,CAED,SAAS5V,gBAAT,CAA2Bu7C,EAA3B,CAA+B3lC,CAA/B,CAAmC,CAElC2lC,EAAE,CAACge,UAAH,CAAe,KAAKb,IAApB,CAA0B9iD,CAA1B,EAEA,CAED;EAEA,SAAS3V,iBAAT,CAA4Bs7C,EAA5B,CAAgC3lC,CAAhC,CAAoC,CAEnC2lC,EAAE,CAAC4e,WAAH,CAAgB,KAAKzB,IAArB,CAA2B9iD,CAA3B,EAEA,CAED;EAEA,SAAS1V,iBAAT,CAA4Bq7C,EAA5B,CAAgC3lC,CAAhC,CAAoC,CAEnC2lC,EAAE,CAACke,WAAH,CAAgB,KAAKf,IAArB,CAA2B9iD,CAA3B,EAEA,CAED,SAASzV,iBAAT,CAA4Bo7C,EAA5B,CAAgC3lC,CAAhC,CAAoC,CAEnC2lC,EAAE,CAACme,WAAH,CAAgB,KAAKhB,IAArB,CAA2B9iD,CAA3B,EAEA,CAED,SAASxV,iBAAT,CAA4Bm7C,EAA5B,CAAgC3lC,CAAhC,CAAoC,CAEnC2lC,EAAE,CAACoe,WAAH,CAAgB,KAAKjB,IAArB,CAA2B9iD,CAA3B,EAEA,CAGD;EAEA,SAASvV,eAAT,CAA0Bk7C,EAA1B,CAA8B3lC,CAA9B,CAAiC+L,QAAjC,CAA4C,CAE3C,MAAMrN,CAAC,CAAGsB,CAAC,CAACxC,MAAZ,CAEA,MAAMgnD,KAAK,CAAGn8D,aAAa,CAAE0jB,QAAF,CAAYrN,CAAZ,CAA3B,CAEAinC,EAAE,CAAC2e,UAAH,CAAe,KAAKxB,IAApB,CAA0B0B,KAA1B,EAEA,IAAM,IAAIlnD,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAKoB,CAAvB,CAA0B,EAAGpB,CAA7B,CAAiC,CAEhCyO,QAAQ,CAACk4C,gBAAT,CAA2BjkD,CAAC,CAAE1C,CAAF,CAAD,EAAU7V,YAArC,CAAmD+8D,KAAK,CAAElnD,CAAF,CAAxD,EAEA,CAED,CAED,SAAS5S,eAAT,CAA0Bi7C,EAA1B,CAA8B3lC,CAA9B,CAAiC+L,QAAjC,CAA4C,CAE3C,MAAMrN,CAAC,CAAGsB,CAAC,CAACxC,MAAZ,CAEA,MAAMgnD,KAAK,CAAGn8D,aAAa,CAAE0jB,QAAF,CAAYrN,CAAZ,CAA3B,CAEAinC,EAAE,CAAC2e,UAAH,CAAe,KAAKxB,IAApB,CAA0B0B,KAA1B,EAEA,IAAM,IAAIlnD,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAKoB,CAAvB,CAA0B,EAAGpB,CAA7B,CAAiC,CAEhCyO,QAAQ,CAACo4C,kBAAT,CAA6BnkD,CAAC,CAAE1C,CAAF,CAAD,EAAU1V,gBAAvC,CAAyD48D,KAAK,CAAElnD,CAAF,CAA9D,EAEA,CAED,CAED;EAEA,SAAS3S,kBAAT,CAA6B0R,IAA7B,CAAoC,CAEnC,OAASA,IAAT,EAEC,WAAA,CAAa,OAAO3S,gBAAP,CAAyB;EACtC,WAAA,CAAa,OAAOC,gBAAP,CAAyB;EACtC,WAAA,CAAa,OAAOC,gBAAP,CAAyB;EACtC,WAAA,CAAa,OAAOC,gBAAP,CAAyB;EAEtC,WAAA,CAAa,OAAOC,eAAP,CAAwB;EACrC,WAAA,CAAa,OAAOC,eAAP,CAAwB;EACrC,WAAA,CAAa,OAAOC,eAAP,CAAwB;EAErC,WAAA,CAAa,WAAA,CAAa,OAAOC,gBAAP,CAAyB;EACnD,WAAA,CAAa,WAAA,CAAa,OAAOC,gBAAP,CAAyB;EACnD,WAAA,CAAa,WAAA,CAAa,OAAOC,gBAAP,CAAyB;EACnD,WAAA,CAAa,WAAA,CAAa,OAAOC,gBAAP,CAAyB;EAEnD,WAAA,CAAa,OAAOC,iBAAP,CAA0B;EACvC,WAAA,CAAa,OAAOC,iBAAP,CAA0B;EACvC,WAAA,CAAa,OAAOC,iBAAP,CAA0B;EACvC,WAAA,CAAa,OAAOC,iBAAP,CAA0B;EAEvC,WAAA,CAAa;EACb,WAAA,CAAa;EACb,WAAA,CAAa;EACb,WAAA,CAAa;EACb,WAAA;EACC,OAAOC,eAAP,CAED,WAAA,CAAa;EACb,WAAA,CAAa;EACb,WAAA,CAAa;EACb,WAAA;EACC,OAAOC,eAAP,CAhCF,CAoCA,CAED;EAEA,SAASE,aAAT,CAAwBu8B,EAAxB,CAA4Bs9B,UAA5B,CAAwC3B,IAAxC,CAA+C,CAE9C,KAAK37B,EAAL,CAAUA,EAAV,CACA,KAAK27B,IAAL,CAAYA,IAAZ,CACA,KAAKh5B,KAAL,CAAa,EAAb,CACA,KAAKk4B,QAAL,CAAgBv4D,iBAAiB,CAAEg7D,UAAU,CAACpoD,IAAb,CAAjC,CAEA;EAEA,CAED,SAASxR,gBAAT,CAA2Bs8B,EAA3B,CAA+Bs9B,UAA/B,CAA2C3B,IAA3C,CAAkD,CAEjD,KAAK37B,EAAL,CAAUA,EAAV,CACA,KAAK27B,IAAL,CAAYA,IAAZ,CACA,KAAKh5B,KAAL,CAAa,EAAb,CACA,KAAKpR,IAAL,CAAY+rC,UAAU,CAAC/rC,IAAvB,CACA,KAAKspC,QAAL,CAAgBr3D,kBAAkB,CAAE85D,UAAU,CAACpoD,IAAb,CAAlC,CAEA;EAEA,CAEDxR,gBAAgB,CAACiZ,SAAjB,CAA2B4gD,WAA3B,CAAyC,SAAW13C,IAAX,CAAkB,CAE1D,MAAM8c,KAAK,CAAG,KAAKA,KAAnB,CAEA,GAAK9c,IAAI,YAAY8pB,YAAhB,EAAgChN,KAAK,CAACtsB,MAAN,GAAiBwP,IAAI,CAACxP,MAA3D,CAAoE,CAEnE,KAAKssB,KAAL,CAAa,IAAIgN,YAAJ,CAAkB9pB,IAAI,CAACxP,MAAvB,CAAb,CAEA,CAEDpV,SAAS,CAAE0hC,KAAF,CAAS9c,IAAT,CAAT,CAEA,CAZD,CAcA,SAASliB,iBAAT,CAA4Bq8B,EAA5B,CAAiC,CAEhC,KAAKA,EAAL,CAAUA,EAAV,CAEA,KAAKw9B,GAAL,CAAW,EAAX,CACA,KAAKz0B,GAAL,CAAW,EAAX,CAEA,CAEDplC,iBAAiB,CAACgZ,SAAlB,CAA4Bk+C,QAA5B,CAAuC,SAAWrc,EAAX,CAAepnC,KAAf,CAAsBwN,QAAtB,CAAiC,CAEvE,MAAM44C,GAAG,CAAG,KAAKA,GAAjB,CAEA,IAAM,IAAIrnD,CAAC,CAAG,CAAR,CAAWoB,CAAC,CAAGimD,GAAG,CAACnnD,MAAzB,CAAiCF,CAAC,GAAKoB,CAAvC,CAA0C,EAAGpB,CAA7C,CAAiD,CAEhD,MAAMqa,CAAC,CAAGgtC,GAAG,CAAErnD,CAAF,CAAb,CACAqa,CAAC,CAACqqC,QAAF,CAAYrc,EAAZ,CAAgBpnC,KAAK,CAAEoZ,CAAC,CAACwP,EAAJ,CAArB,CAA+Bpb,QAA/B,EAEA,CAED,CAXD,CAaA;EAEA;EAEA,MAAMhhB,UAAU,CAAG,qBAAnB,CAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,SAASC,UAAT,CAAqB45D,SAArB,CAAgCC,aAAhC,CAAgD,CAE/CD,SAAS,CAACD,GAAV,CAAchoD,IAAd,CAAoBkoD,aAApB,EACAD,SAAS,CAAC10B,GAAV,CAAe20B,aAAa,CAAC19B,EAA7B,EAAoC09B,aAApC,CAEA,CAED,SAAS55D,YAAT,CAAuBw5D,UAAvB,CAAmC3B,IAAnC,CAAyC8B,SAAzC,CAAqD,CAEpD,MAAME,IAAI,CAAGL,UAAU,CAAC/7C,IAAxB,CACCq8C,UAAU,CAAGD,IAAI,CAACtnD,MADnB,CAGA;EACAzS,UAAU,CAACi6D,SAAX,CAAuB,CAAvB,CAEA,MAAQ,IAAR,CAAe,CAEd,MAAMC,KAAK,CAAGl6D,UAAU,CAACwoC,IAAX,CAAiBuxB,IAAjB,CAAd,CACCI,QAAQ,CAAGn6D,UAAU,CAACi6D,SADvB,CAGA,IAAI79B,EAAE,CAAG89B,KAAK,CAAE,CAAF,CAAd,CACA,MAAME,SAAS,CAAGF,KAAK,CAAE,CAAF,CAAL,GAAe,GAAjC,CACCG,SAAS,CAAGH,KAAK,CAAE,CAAF,CADlB,CAGA,GAAKE,SAAL,CAAiBh+B,EAAE,CAAGA,EAAE,CAAG,CAAV,CAAa;EAE9B,GAAKi+B,SAAS,GAAK5oD,SAAd,EAA2B4oD,SAAS,GAAK,GAAd,EAAqBF,QAAQ,CAAG,CAAX,GAAiBH,UAAtE,CAAmF;EAIlF/5D,UAAU,CAAE45D,SAAF,CAAaQ,SAAS,GAAK5oD,SAAd,CACtB,IAAI5R,aAAJ,CAAmBu8B,EAAnB,CAAuBs9B,UAAvB,CAAmC3B,IAAnC,CADsB,CAEtB,IAAIj4D,gBAAJ,CAAsBs8B,EAAtB,CAA0Bs9B,UAA1B,CAAsC3B,IAAtC,CAFS,CAAV,CAIA,MAEA,CAVD,KAUO;EAIN,MAAM5yB,GAAG,CAAG00B,SAAS,CAAC10B,GAAtB,CACA,IAAIm1B,IAAI,CAAGn1B,GAAG,CAAE/I,EAAF,CAAd,CAEA,GAAKk+B,IAAI,GAAK7oD,SAAd,CAA0B,CAEzB6oD,IAAI,CAAG,IAAIv6D,iBAAJ,CAAuBq8B,EAAvB,CAAP,CACAn8B,UAAU,CAAE45D,SAAF,CAAaS,IAAb,CAAV,CAEA,CAEDT,SAAS,CAAGS,IAAZ,CAEA,CAED,CAED,CAED;EAEA,SAASn6D,aAAT,CAAwBy6C,EAAxB,CAA4B4M,OAA5B,CAAsC,CAErC,KAAKoS,GAAL,CAAW,EAAX,CACA,KAAKz0B,GAAL,CAAW,EAAX,CAEA,MAAMxxB,CAAC,CAAGinC,EAAE,CAAC2f,mBAAH,CAAwB/S,OAAxB,CAAiC,KAAjC,CAAV,CAEA,IAAM,IAAIj1C,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGoB,CAArB,CAAwB,EAAGpB,CAA3B,CAA+B,CAE9B,MAAMu4C,IAAI,CAAGlQ,EAAE,CAAC4f,gBAAH,CAAqBhT,OAArB,CAA8Bj1C,CAA9B,CAAb,CACCwlD,IAAI,CAAGnd,EAAE,CAAC6f,kBAAH,CAAuBjT,OAAvB,CAAgCsD,IAAI,CAACntC,IAArC,CADR,CAGAzd,YAAY,CAAE4qD,IAAF,CAAQiN,IAAR,CAAc,IAAd,CAAZ,CAEA,CAED,CAED53D,aAAa,CAAC4Y,SAAd,CAAwBk+C,QAAxB,CAAmC,SAAWrc,EAAX,CAAej9B,IAAf,CAAqBnK,KAArB,CAA4BwN,QAA5B,CAAuC,CAEzE,MAAM4L,CAAC,CAAG,KAAKuY,GAAL,CAAUxnB,IAAV,CAAV,CAEA,GAAKiP,CAAC,GAAKnb,SAAX,CAAuBmb,CAAC,CAACqqC,QAAF,CAAYrc,EAAZ,CAAgBpnC,KAAhB,CAAuBwN,QAAvB,EAEvB,CAND,CAQA7gB,aAAa,CAAC4Y,SAAd,CAAwB2hD,WAAxB,CAAsC,SAAW9f,EAAX,CAAe9sB,MAAf,CAAuBnQ,IAAvB,CAA8B,CAEnE,MAAM1I,CAAC,CAAG6Y,MAAM,CAAEnQ,IAAF,CAAhB,CAEA,GAAK1I,CAAC,GAAKxD,SAAX,CAAuB,KAAKwlD,QAAL,CAAerc,EAAf,CAAmBj9B,IAAnB,CAAyB1I,CAAzB,EAEvB,CAND,CASA;EAEA9U,aAAa,CAACw6D,MAAd,CAAuB,SAAW/f,EAAX,CAAegf,GAAf,CAAoB56B,MAApB,CAA4Bhe,QAA5B,CAAuC,CAE7D,IAAM,IAAIzO,CAAC,CAAG,CAAR,CAAWoB,CAAC,CAAGimD,GAAG,CAACnnD,MAAzB,CAAiCF,CAAC,GAAKoB,CAAvC,CAA0C,EAAGpB,CAA7C,CAAiD,CAEhD,MAAMqa,CAAC,CAAGgtC,GAAG,CAAErnD,CAAF,CAAb,CACC0C,CAAC,CAAG+pB,MAAM,CAAEpS,CAAC,CAACwP,EAAJ,CADX,CAGA,GAAKnnB,CAAC,CAAC4M,WAAF,GAAkB,KAAvB,CAA+B;EAG9B+K,CAAC,CAACqqC,QAAF,CAAYrc,EAAZ,CAAgB3lC,CAAC,CAACzB,KAAlB,CAAyBwN,QAAzB,EAEA,CAED,CAED,CAhBD,CAkBA7gB,aAAa,CAACy6D,YAAd,CAA6B,SAAWhB,GAAX,CAAgB56B,MAAhB,CAAyB,CAErD,MAAMtiB,CAAC,CAAG,EAAV,CAEA,IAAM,IAAInK,CAAC,CAAG,CAAR,CAAWoB,CAAC,CAAGimD,GAAG,CAACnnD,MAAzB,CAAiCF,CAAC,GAAKoB,CAAvC,CAA0C,EAAGpB,CAA7C,CAAiD,CAEhD,MAAMqa,CAAC,CAAGgtC,GAAG,CAAErnD,CAAF,CAAb,CACA,GAAKqa,CAAC,CAACwP,EAAF,IAAQ4C,MAAb,CAAsBtiB,CAAC,CAAC9K,IAAF,CAAQgb,CAAR,EAEtB,CAED,OAAOlQ,CAAP,CAEA,CAbD,CAeA,SAAStc,WAAT,CAAsBw6C,EAAtB,CAA0BtpC,IAA1B,CAAgCg3B,MAAhC,CAAyC,CAExC,MAAM+O,MAAM,CAAGuD,EAAE,CAACigB,YAAH,CAAiBvpD,IAAjB,CAAf,CAEAspC,EAAE,CAACkgB,YAAH,CAAiBzjB,MAAjB,CAAyB/O,MAAzB,EACAsS,EAAE,CAACmgB,aAAH,CAAkB1jB,MAAlB,EAEA,OAAOA,MAAP,CAEA,CAED,IAAIh3C,cAAc,CAAG,CAArB,CAEA,SAASC,cAAT,CAAyBgoC,MAAzB,CAAkC,CAEjC,MAAMotB,KAAK,CAAGptB,MAAM,CAAC0yB,KAAP,CAAc,IAAd,CAAd,CAEA,IAAM,IAAIzoD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGmjD,KAAK,CAACjjD,MAA3B,CAAmCF,CAAC,EAApC,CAA0C,CAEzCmjD,KAAK,CAAEnjD,CAAF,CAAL,CAAeA,CAAC,CAAG,CAAN,CAAY,IAAZ,CAAmBmjD,KAAK,CAAEnjD,CAAF,CAArC,CAEA,CAED,OAAOmjD,KAAK,CAACuF,IAAN,CAAY,IAAZ,CAAP,CAEA,CAED,SAAS16D,qBAAT,CAAgCmf,QAAhC,CAA2C,CAE1C,OAASA,QAAT,EAEC,KAAKr1B,cAAL,CACC,OAAO,CAAE,QAAF,CAAY,WAAZ,CAAP,CACD,KAAKC,YAAL,CACC,OAAO,CAAE,MAAF,CAAU,WAAV,CAAP,CACD,KAAKE,YAAL,CACC,OAAO,CAAE,MAAF,CAAU,WAAV,CAAP,CACD,KAAKE,aAAL,CACC,OAAO,CAAE,MAAF,CAAU,gBAAV,CAAP,CACD,KAAKC,cAAL,CACC,OAAO,CAAE,MAAF,CAAU,iBAAV,CAAP,CACD,KAAKC,YAAL,CACC,OAAO,CAAE,MAAF,CAAU,kBAAV,CAAP,CACD,KAAKL,aAAL,CACC,OAAO,CAAE,OAAF,CAAW,kCAAX,CAAP,CACD,KAAKE,cAAL,CACC,OAAO,CAAE,QAAF,CAAY,WAAZ,CAAP,CACD,QACC2qB,OAAO,CAACC,IAAR,CAAc,2CAAd,CAA2DqK,QAA3D,EACA,OAAO,CAAE,QAAF,CAAY,WAAZ,CAAP,CApBF,CAwBA,CAED,SAASlf,eAAT,CAA0Bo6C,EAA1B,CAA8BvD,MAA9B,CAAsC/lC,IAAtC,CAA6C,CAE5C,MAAM4pD,MAAM,CAAGtgB,EAAE,CAACugB,kBAAH,CAAuB9jB,MAAvB,CAA+B,KAA/B,CAAf,CACA,MAAM+jB,MAAM,CAAGxgB,EAAE,CAACygB,gBAAH,CAAqBhkB,MAArB,EAA8BikB,IAA9B,EAAf,CAEA,GAAKJ,MAAM,EAAIE,MAAM,GAAK,EAA1B,CAA+B,OAAO,EAAP,CAE/B;EACA;EAEA,OAAO9pD,IAAI,CAAC2B,WAAL,GAAqB,MAArB,CAA8BmoD,MAA9B,CAAuC,MAAvC,CAAgD96D,cAAc,CAAEs6C,EAAE,CAAC2gB,eAAH,CAAoBlkB,MAApB,CAAF,CAArE,CAEA,CAED,SAAS52C,wBAAT,CAAmC+6D,YAAnC,CAAiD97C,QAAjD,CAA4D,CAE3D,MAAM+oB,UAAU,CAAGloC,qBAAqB,CAAEmf,QAAF,CAAxC,CACA,OAAO,QAAU87C,YAAV,CAAyB,0BAAzB,CAAsD/yB,UAAU,CAAE,CAAF,CAAhE,CAAwE,UAAxE,CAAqFA,UAAU,CAAE,CAAF,CAA/F,CAAuG,KAA9G,CAEA,CAED,SAAS/nC,wBAAT,CAAmC86D,YAAnC,CAAiD97C,QAAjD,CAA4D,CAE3D,MAAM+oB,UAAU,CAAGloC,qBAAqB,CAAEmf,QAAF,CAAxC,CACA,OAAO,QAAU87C,YAAV,CAAyB,kCAAzB,CAA8D/yB,UAAU,CAAE,CAAF,CAAxE,CAAgFA,UAAU,CAAE,CAAF,CAA1F,CAAkG,KAAzG,CAEA,CAED,SAAS9nC,sBAAT,CAAiC66D,YAAjC,CAA+C9U,WAA/C,CAA6D,CAE5D,IAAI+U,eAAJ,CAEA,OAAS/U,WAAT,EAEC,KAAKviE,iBAAL,CACCs3E,eAAe,CAAG,QAAlB,CACA,MAED,KAAKr3E,mBAAL,CACCq3E,eAAe,CAAG,UAAlB,CACA,MAED,KAAKp3E,iBAAL,CACCo3E,eAAe,CAAG,iBAAlB,CACA,MAED,KAAKn3E,qBAAL,CACCm3E,eAAe,CAAG,YAAlB,CACA,MAED,KAAKl3E,iBAAL,CACCk3E,eAAe,CAAG,QAAlB,CACA,MAED,QACCrmD,OAAO,CAACC,IAAR,CAAc,8CAAd,CAA8DqxC,WAA9D,EACA+U,eAAe,CAAG,QAAlB,CAxBF,CA4BA,OAAO,QAAUD,YAAV,CAAyB,0BAAzB,CAAsDC,eAAtD,CAAwE,yBAA/E,CAEA,CAED,SAAS76D,kBAAT,CAA6By9B,UAA7B,CAA0C,CAEzC,MAAMq9B,MAAM,CAAG,CACZr9B,UAAU,CAACs9B,oBAAX,EAAmCt9B,UAAU,CAACu9B,YAA9C,EAA8Dv9B,UAAU,CAACqH,OAAzE,EAAoFrH,UAAU,CAACw9B,qBAA/F,EAAwHx9B,UAAU,CAAC4G,kBAAnI,EAAyJ5G,UAAU,CAACwF,WAApK,EAAmLxF,UAAU,CAACy9B,QAAX,GAAwB,UAA7M,CAA4N,iDAA5N,CAAgR,EADlQ,CAEd,CAAEz9B,UAAU,CAAC09B,kBAAX,EAAiC19B,UAAU,CAACytB,sBAA9C,GAA0EztB,UAAU,CAAC29B,0BAArF,CAAkH,uCAAlH,CAA4J,EAF9I,CAGZ39B,UAAU,CAAC49B,oBAAX,EAAmC59B,UAAU,CAAC69B,4BAAhD,CAAiF,0CAAjF,CAA8H,EAHhH,CAId,CAAE79B,UAAU,CAAC89B,yBAAX,EAAwC99B,UAAU,CAACmI,MAAnD,EAA6DnI,UAAU,CAACyI,YAA1E,GAA4FzI,UAAU,CAAC+9B,iCAAvG,CAA2I,+CAA3I,CAA6L,EAJ/K,CAAf,CAOA,OAAOV,MAAM,CAACW,MAAP,CAAex7D,eAAf,EAAiCo6D,IAAjC,CAAuC,IAAvC,CAAP,CAEA,CAED,SAASn6D,eAAT,CAA0B0yC,OAA1B,CAAoC,CAEnC,MAAMkoB,MAAM,CAAG,EAAf,CAEA,IAAM,MAAM/9C,IAAZ,IAAoB61B,OAApB,CAA8B,CAE7B,MAAMhgC,KAAK,CAAGggC,OAAO,CAAE71B,IAAF,CAArB,CAEA,GAAKnK,KAAK,GAAK,KAAf,CAAuB,SAEvBkoD,MAAM,CAAC9pD,IAAP,CAAa,WAAa+L,IAAb,CAAoB,GAApB,CAA0BnK,KAAvC,EAEA,CAED,OAAOkoD,MAAM,CAACT,IAAP,CAAa,IAAb,CAAP,CAEA,CAED,SAASl6D,uBAAT,CAAkC65C,EAAlC,CAAsC4M,OAAtC,CAAgD,CAE/C,MAAMxb,UAAU,CAAG,EAAnB,CAEA,MAAMr4B,CAAC,CAAGinC,EAAE,CAAC2f,mBAAH,CAAwB/S,OAAxB,CAAiC,KAAjC,CAAV,CAEA,IAAM,IAAIj1C,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGoB,CAArB,CAAwBpB,CAAC,EAAzB,CAA+B,CAE9B,MAAMu4C,IAAI,CAAGlQ,EAAE,CAAC0hB,eAAH,CAAoB9U,OAApB,CAA6Bj1C,CAA7B,CAAb,CACA,MAAMoL,IAAI,CAAGmtC,IAAI,CAACntC,IAAlB,CAEA,IAAIssC,YAAY,CAAG,CAAnB,CACA,GAAKa,IAAI,CAACx5C,IAAL,GAAc,KAAnB,CAA2B24C,YAAY,CAAG,CAAf,CAC3B,GAAKa,IAAI,CAACx5C,IAAL,GAAc,KAAnB,CAA2B24C,YAAY,CAAG,CAAf,CAC3B,GAAKa,IAAI,CAACx5C,IAAL,GAAc,KAAnB,CAA2B24C,YAAY,CAAG,CAAf,CAE3B;EAEAje,UAAU,CAAEruB,IAAF,CAAV,CAAqB,CACpBrM,IAAI,CAAEw5C,IAAI,CAACx5C,IADS,CAEpBy4C,QAAQ,CAAEnP,EAAE,CAAC2hB,iBAAH,CAAsB/U,OAAtB,CAA+B7pC,IAA/B,CAFU,CAGpBssC,YAAY,CAAEA,YAHM,CAArB,CAMA,CAED,OAAOje,UAAP,CAEA,CAED,SAASnrC,eAAT,CAA0BynC,MAA1B,CAAmC,CAElC,OAAOA,MAAM,GAAK,EAAlB,CAEA,CAED,SAAStnC,gBAAT,CAA2BsnC,MAA3B,CAAmCjK,UAAnC,CAAgD,CAE/C,OAAOiK,MAAM,CACXk0B,OADK,CACI,iBADJ,CACuBn+B,UAAU,CAACo+B,YADlC,EAELD,OAFK,CAEI,kBAFJ,CAEwBn+B,UAAU,CAACq+B,aAFnC,EAGLF,OAHK,CAGI,uBAHJ,CAG6Bn+B,UAAU,CAACs+B,iBAHxC,EAILH,OAJK,CAII,mBAJJ,CAIyBn+B,UAAU,CAACu+B,cAJpC,EAKLJ,OALK,CAKI,kBALJ,CAKwBn+B,UAAU,CAACw+B,aALnC,EAMLL,OANK,CAMI,wBANJ,CAM8Bn+B,UAAU,CAACy+B,kBANzC,EAOLN,OAPK,CAOI,yBAPJ,CAO+Bn+B,UAAU,CAAC0+B,mBAP1C,EAQLP,OARK,CAQI,0BARJ,CAQgCn+B,UAAU,CAAC2+B,oBAR3C,CAAP,CAUA,CAED,SAAS/7D,wBAAT,CAAmCqnC,MAAnC,CAA2CjK,UAA3C,CAAwD,CAEvD,OAAOiK,MAAM,CACXk0B,OADK,CACI,sBADJ,CAC4Bn+B,UAAU,CAAC4+B,iBADvC,EAELT,OAFK,CAEI,wBAFJ,CAEgCn+B,UAAU,CAAC4+B,iBAAX,CAA+B5+B,UAAU,CAAC6+B,mBAF1E,CAAP,CAIA,CAED;EAEA,MAAMh8D,cAAc,CAAG,kCAAvB,CAEA,SAASC,eAAT,CAA0BmnC,MAA1B,CAAmC,CAElC,OAAOA,MAAM,CAACk0B,OAAP,CAAgBt7D,cAAhB,CAAgCE,eAAhC,CAAP,CAEA,CAED,SAASA,eAAT,CAA0B84D,KAA1B,CAAiCiD,OAAjC,CAA2C,CAE1C,MAAM70B,MAAM,CAAG/sC,WAAW,CAAE4hE,OAAF,CAA1B,CAEA,GAAK70B,MAAM,GAAK72B,SAAhB,CAA4B,CAE3B,UAAUoD,KAAJ,CAAW,6BAA+BsoD,OAA/B,CAAyC,GAApD,CAAN,CAEA,CAED,OAAOh8D,eAAe,CAAEmnC,MAAF,CAAtB,CAEA,CAED;EAEA,MAAMjnC,2BAA2B,CAAG,8FAApC,CACA,MAAMC,iBAAiB,CAAG,8IAA1B,CAEA,SAASC,WAAT,CAAsB+mC,MAAtB,CAA+B,CAE9B,OAAOA,MAAM,CACXk0B,OADK,CACIl7D,iBADJ,CACuBE,YADvB,EAELg7D,OAFK,CAEIn7D,2BAFJ,CAEiCI,sBAFjC,CAAP,CAIA,CAED,SAASA,sBAAT,CAAiCy4D,KAAjC,CAAwC5tB,KAAxC,CAA+CkF,GAA/C,CAAoD4rB,OAApD,CAA8D,CAE7DhoD,OAAO,CAACC,IAAR,CAAc,qHAAd,EACA,OAAO7T,YAAY,CAAE04D,KAAF,CAAS5tB,KAAT,CAAgBkF,GAAhB,CAAqB4rB,OAArB,CAAnB,CAEA,CAED,SAAS57D,YAAT,CAAuB04D,KAAvB,CAA8B5tB,KAA9B,CAAqCkF,GAArC,CAA0C4rB,OAA1C,CAAoD,CAEnD,IAAI90B,MAAM,CAAG,EAAb,CAEA,IAAM,IAAI/1B,CAAC,CAAGm2B,QAAQ,CAAE4D,KAAF,CAAtB,CAAiC/5B,CAAC,CAAGm2B,QAAQ,CAAE8I,GAAF,CAA7C,CAAsDj/B,CAAC,EAAvD,CAA6D,CAE5D+1B,MAAM,EAAI80B,OAAO,CACfZ,OADQ,CACC,cADD,CACiB,KAAOjqD,CAAP,CAAW,IAD5B,EAERiqD,OAFQ,CAEC,sBAFD,CAEyBjqD,CAFzB,CAAV,CAIA,CAED,OAAO+1B,MAAP,CAEA,CAED;EAEA,SAAS5mC,iBAAT,CAA4B28B,UAA5B,CAAyC,CAExC,IAAIg/B,eAAe,CAAG,aAAeh/B,UAAU,CAACyE,SAA1B,CAAsC,qBAAtC,CAA8DzE,UAAU,CAACyE,SAAzE,CAAqF,OAA3G,CAEA,GAAKzE,UAAU,CAACyE,SAAX,GAAyB,OAA9B,CAAwC,CAEvCu6B,eAAe,EAAI,0BAAnB,CAEA,CAJD,QAIYh/B,UAAU,CAACyE,SAAX,GAAyB,SAA9B,CAA0C,CAEhDu6B,eAAe,EAAI,4BAAnB,CAEA,CAJM,QAIKh/B,UAAU,CAACyE,SAAX,GAAyB,MAA9B,CAAuC,CAE7Cu6B,eAAe,EAAI,yBAAnB,CAEA,CAED,OAAOA,eAAP,CAEA,CAED,SAAS17D,2BAAT,CAAsC08B,UAAtC,CAAmD,CAElD,IAAIi/B,mBAAmB,CAAG,sBAA1B,CAEA,GAAKj/B,UAAU,CAACk/B,aAAX,GAA6B77E,YAAlC,CAAiD,CAEhD47E,mBAAmB,CAAG,oBAAtB,CAEA,CAJD,QAIYj/B,UAAU,CAACk/B,aAAX,GAA6B57E,gBAAlC,CAAqD,CAE3D27E,mBAAmB,CAAG,yBAAtB,CAEA,CAJM,QAIKj/B,UAAU,CAACk/B,aAAX,GAA6B37E,YAAlC,CAAiD,CAEvD07E,mBAAmB,CAAG,oBAAtB,CAEA,CAED,OAAOA,mBAAP,CAEA,CAED,SAAS17D,wBAAT,CAAmCy8B,UAAnC,CAAgD,CAE/C,IAAIm/B,gBAAgB,CAAG,kBAAvB,CAEA,GAAKn/B,UAAU,CAACmI,MAAhB,CAAyB,CAExB,OAASnI,UAAU,CAACo/B,UAApB,EAEC,KAAKh5E,qBAAL,CACA,KAAKC,qBAAL,CACC84E,gBAAgB,CAAG,kBAAnB,CACA,MAED,KAAK34E,uBAAL,CACA,KAAKC,uBAAL,CACC04E,gBAAgB,CAAG,qBAAnB,CACA,MAVF,CAcA,CAED,OAAOA,gBAAP,CAEA,CAED,SAAS37D,wBAAT,CAAmCw8B,UAAnC,CAAgD,CAE/C,IAAIq/B,gBAAgB,CAAG,wBAAvB,CAEA,GAAKr/B,UAAU,CAACmI,MAAhB,CAAyB,CAExB,OAASnI,UAAU,CAACo/B,UAApB,EAEC,KAAK/4E,qBAAL,CACA,KAAKI,uBAAL,CAEC44E,gBAAgB,CAAG,wBAAnB,CACA,MANF,CAUA,CAED,OAAOA,gBAAP,CAEA,CAED,SAAS57D,4BAAT,CAAuCu8B,UAAvC,CAAoD,CAEnD,IAAIs/B,oBAAoB,CAAG,sBAA3B,CAEA,GAAKt/B,UAAU,CAACmI,MAAhB,CAAyB,CAExB,OAASnI,UAAU,CAACoI,OAApB,EAEC,KAAK1iD,iBAAL,CACC45E,oBAAoB,CAAG,0BAAvB,CACA,MAED,KAAK35E,YAAL,CACC25E,oBAAoB,CAAG,qBAAvB,CACA,MAED,KAAK15E,YAAL,CACC05E,oBAAoB,CAAG,qBAAvB,CACA,MAZF,CAgBA,CAED,OAAOA,oBAAP,CAEA,CAED,SAAS57D,YAAT,CAAuBy0C,QAAvB,CAAiConB,QAAjC,CAA2Cv/B,UAA3C,CAAuD8oB,aAAvD,CAAuE;EAGtE;EAEA,MAAMvM,EAAE,CAAGpE,QAAQ,CAAC53B,UAAT,EAAX,CAEA,MAAM40B,OAAO,CAAGnV,UAAU,CAACmV,OAA3B,CAEA,IAAIC,YAAY,CAAGpV,UAAU,CAACoV,YAA9B,CACA,IAAIC,cAAc,CAAGrV,UAAU,CAACqV,cAAhC,CAEA,MAAM4pB,mBAAmB,CAAG37D,2BAA2B,CAAE08B,UAAF,CAAvD,CACA,MAAMm/B,gBAAgB,CAAG57D,wBAAwB,CAAEy8B,UAAF,CAAjD,CACA,MAAMq/B,gBAAgB,CAAG77D,wBAAwB,CAAEw8B,UAAF,CAAjD,CACA,MAAMs/B,oBAAoB,CAAG77D,4BAA4B,CAAEu8B,UAAF,CAAzD,CAGA,MAAMw/B,iBAAiB,CAAKrnB,QAAQ,CAACzN,WAAT,CAAuB,CAAzB,CAA+ByN,QAAQ,CAACzN,WAAxC,CAAsD,GAAhF,CAEA,MAAM+0B,gBAAgB,CAAGz/B,UAAU,CAACyc,QAAX,CAAsB,EAAtB,CAA2Bl6C,kBAAkB,CAAEy9B,UAAF,CAAtE,CAEA,MAAM0/B,aAAa,CAAGj9D,eAAe,CAAE0yC,OAAF,CAArC,CAEA,MAAMgU,OAAO,CAAG5M,EAAE,CAACojB,aAAH,EAAhB,CAEA,IAAIC,YAAJ,CAAkBC,cAAlB,CACA,IAAIC,aAAa,CAAG9/B,UAAU,CAACgW,WAAX,CAAyB,YAAchW,UAAU,CAACgW,WAAzB,CAAuC,IAAhE,CAAuE,EAA3F,CAEA,GAAKhW,UAAU,CAACqwB,mBAAhB,CAAsC,CAErCuP,YAAY,CAAG,CAEdF,aAFc,EAIb1B,MAJa,CAILx7D,eAJK,EAIao6D,IAJb,CAImB,IAJnB,CAAf,CAMA,GAAKgD,YAAY,CAACxrD,MAAb,CAAsB,CAA3B,CAA+B,CAE9BwrD,YAAY,EAAI,IAAhB,CAEA,CAEDC,cAAc,CAAG,CAEhBJ,gBAFgB,CAGhBC,aAHgB,EAKf1B,MALe,CAKPx7D,eALO,EAKWo6D,IALX,CAKiB,IALjB,CAAjB,CAOA,GAAKiD,cAAc,CAACzrD,MAAf,CAAwB,CAA7B,CAAiC,CAEhCyrD,cAAc,EAAI,IAAlB,CAEA,CAED,CA3BD,KA2BO,CAEND,YAAY,CAAG,CAEdv8D,iBAAiB,CAAE28B,UAAF,CAFH,CAId,uBAAyBA,UAAU,CAAC+/B,UAJtB,CAMdL,aANc,CAQd1/B,UAAU,CAACggC,UAAX,CAAwB,wBAAxB,CAAmD,EARrC,CASdhgC,UAAU,CAACigC,eAAX,CAA6B,8BAA7B,CAA8D,EAThD,CAWdjgC,UAAU,CAACkgC,sBAAX,CAAoC,yBAApC,CAAgE,EAXlD,CAad,wBAA0BV,iBAbZ,CAed,qBAAuBx/B,UAAU,CAACmgC,QAfpB,CAgBZngC,UAAU,CAACogC,MAAX,EAAqBpgC,UAAU,CAAC6C,GAAlC,CAA0C,iBAA1C,CAA8D,EAhBhD,CAiBZ7C,UAAU,CAACogC,MAAX,EAAqBpgC,UAAU,CAACqgC,OAAlC,CAA8C,kBAA9C,CAAmE,EAjBrD,CAmBdrgC,UAAU,CAAC8G,GAAX,CAAiB,iBAAjB,CAAqC,EAnBvB,CAoBd9G,UAAU,CAACmI,MAAX,CAAoB,oBAApB,CAA2C,EApB7B,CAqBdnI,UAAU,CAACmI,MAAX,CAAoB,WAAak3B,gBAAjC,CAAoD,EArBtC,CAsBdr/B,UAAU,CAACiH,QAAX,CAAsB,sBAAtB,CAA+C,EAtBjC,CAuBdjH,UAAU,CAACmH,KAAX,CAAmB,mBAAnB,CAAyC,EAvB3B,CAwBdnH,UAAU,CAAC+H,WAAX,CAAyB,yBAAzB,CAAqD,EAxBvC,CAyBd/H,UAAU,CAACqH,OAAX,CAAqB,qBAArB,CAA6C,EAzB/B,CA0BdrH,UAAU,CAACuH,SAAX,CAAuB,uBAAvB,CAAiD,EA1BnC,CA2BZvH,UAAU,CAACuH,SAAX,EAAwBvH,UAAU,CAACsgC,oBAArC,CAA8D,+BAA9D,CAAgG,EA3BlF,CA4BZtgC,UAAU,CAACuH,SAAX,EAAwBvH,UAAU,CAACw9B,qBAArC,CAA+D,gCAA/D,CAAkG,EA5BpF,CA8Bdx9B,UAAU,CAAC0G,YAAX,CAA0B,0BAA1B,CAAuD,EA9BzC,CA+Bd1G,UAAU,CAAC2G,qBAAX,CAAmC,oCAAnC,CAA0E,EA/B5D,CAgCd3G,UAAU,CAAC4G,kBAAX,CAAgC,iCAAhC,CAAoE,EAhCtD,CAkCd5G,UAAU,CAAC0H,eAAX,EAA8B1H,UAAU,CAACkgC,sBAAzC,CAAkE,6BAAlE,CAAkG,EAlCpF,CAoCdlgC,UAAU,CAACgI,WAAX,CAAyB,yBAAzB,CAAqD,EApCvC,CAqCdhI,UAAU,CAACiI,oBAAX,CAAkC,kCAAlC,CAAuE,EArCzD,CAsCdjI,UAAU,CAACkI,gBAAX,CAA8B,8BAA9B,CAA+D,EAtCjD,CAwCdlI,UAAU,CAAC6H,YAAX,CAA0B,0BAA1B,CAAuD,EAxCzC,CAyCd7H,UAAU,CAAC8H,YAAX,CAA0B,0BAA1B,CAAuD,EAzCzC,CA0Cd9H,UAAU,CAACgH,QAAX,CAAsB,sBAAtB,CAA+C,EA1CjC,CA4CdhH,UAAU,CAACyI,YAAX,CAA0B,0BAA1B,CAAuD,EA5CzC,CA6CdzI,UAAU,CAAC0I,eAAX,CAA6B,6BAA7B,CAA6D,EA7C/C,CA8Cd1I,UAAU,CAAC4I,YAAX,CAA0B,0BAA1B,CAAuD,EA9CzC,CAgDd5I,UAAU,CAAC6mB,aAAX,CAA2B,2BAA3B,CAAyD,EAhD3C,CAiDd7mB,UAAU,CAAC8mB,iBAAX,CAA+B,+BAA/B,CAAiE,EAjDnD,CAmDd9mB,UAAU,CAACugC,cAAX,CAA4B,qBAA5B,CAAoD,EAnDtC,CAoDdvgC,UAAU,CAACgD,YAAX,CAA0B,mBAA1B,CAAgD,EApDlC,CAqDdhD,UAAU,CAACwgC,YAAX,CAA0B,yBAA1B,CAAsD,EArDxC,CAsDdxgC,UAAU,CAACygC,SAAX,CAAuB,gBAAvB,CAA0C,EAtD5B,CAuDdzgC,UAAU,CAAC0gC,aAAX,CAA2B,yBAA3B,CAAuD,EAvDzC,CAyDd1gC,UAAU,CAACwF,WAAX,CAAyB,qBAAzB,CAAiD,EAzDnC,CA2DdxF,UAAU,CAAC2gC,QAAX,CAAsB,sBAAtB,CAA+C,EA3DjC,CA4Dd3gC,UAAU,CAAC4gC,gBAAX,CAA8B,sBAA9B,CAAuD,EA5DzC,CA8Dd5gC,UAAU,CAAC8S,YAAX,CAA0B,0BAA1B,CAAuD,EA9DzC,CA+Dd9S,UAAU,CAACo4B,YAAX,EAA2Bp4B,UAAU,CAACwF,WAAX,GAA2B,KAAtD,CAA8D,0BAA9D,CAA2F,EA/D7E,CAgEZxF,UAAU,CAAC8S,YAAX,EAA2B9S,UAAU,CAACyc,QAAxC,CAAqD,8BAArD,CAAsF,EAhExE,CAiEZzc,UAAU,CAAC8S,YAAX,EAA2B9S,UAAU,CAACyc,QAAxC,CAAqD,8BAAgCzc,UAAU,CAAC6gC,iBAAhG,CAAoH,EAjEtG,CAkEd7gC,UAAU,CAAC8gC,WAAX,CAAyB,sBAAzB,CAAkD,EAlEpC,CAmEd9gC,UAAU,CAAC+gC,SAAX,CAAuB,oBAAvB,CAA8C,EAnEhC,CAqEd/gC,UAAU,CAACghC,gBAAX,CAA8B,uBAA9B,CAAwD,EArE1C,CAsEdhhC,UAAU,CAACghC,gBAAX,CAA8B,WAAa/B,mBAA3C,CAAiE,EAtEnD,CAwEdj/B,UAAU,CAAC+I,eAAX,CAA6B,6BAA7B,CAA6D,EAxE/C,CA0Ed/I,UAAU,CAACytB,sBAAX,CAAoC,yBAApC,CAAgE,EA1ElD,CA2EZztB,UAAU,CAACytB,sBAAX,EAAqCztB,UAAU,CAAC29B,0BAAlD,CAAiF,6BAAjF,CAAiH,EA3EnG,CA6Ed,2BA7Ec,CA8Ed,+BA9Ec,CA+Ed,gCA/Ec,CAgFd,0BAhFc,CAiFd,4BAjFc,CAkFd,8BAlFc,CAmFd,8BAnFc,CAqFd,uBArFc,CAuFd,iCAvFc,CAyFd,QAzFc,CA2Fd,6BA3Fc,CA6Fd,gCA7Fc,CA+Fd,QA/Fc,CAiGd,0BAjGc,CAkGd,wBAlGc,CAmGd,oBAnGc,CAqGd,oBArGc,CAuGd,0BAvGc,CAyGd,QAzGc,CA2Gd,gCA3Gc,CA6Gd,wBA7Gc,CA+Gd,4BA/Gc,CAiHd,wBAjHc,CAmHd,QAnHc,CAqHd,0EArHc,CAuHd,+BAvHc,CAwHd,+BAxHc,CAyHd,+BAzHc,CA0Hd,+BA1Hc,CA4Hd,0BA5Hc,CA8Hd,gCA9Hc,CA+Hd,gCA/Hc,CAgId,gCAhIc,CAiId,gCAjIc,CAmId,QAnIc,CAqId,gCArIc,CAsId,gCAtIc,CAuId,gCAvIc,CAwId,gCAxIc,CA0Id,SA1Ic,CA4Id,QA5Ic,CA8Id,qBA9Ic,CAgJd,4BAhJc,CAiJd,6BAjJc,CAmJd,QAnJc,CAqJd,IArJc,EAuJbK,MAvJa,CAuJLx7D,eAvJK,EAuJao6D,IAvJb,CAuJmB,IAvJnB,CAAf,CAyJAiD,cAAc,CAAG,CAEhBJ,gBAFgB,CAIhBp8D,iBAAiB,CAAE28B,UAAF,CAJD,CAMhB,uBAAyBA,UAAU,CAAC+/B,UANpB,CAQhBL,aARgB,CAUhB,wBAA0BF,iBAVV,CAYdx/B,UAAU,CAACogC,MAAX,EAAqBpgC,UAAU,CAAC6C,GAAlC,CAA0C,iBAA1C,CAA8D,EAZ9C,CAad7C,UAAU,CAACogC,MAAX,EAAqBpgC,UAAU,CAACqgC,OAAlC,CAA8C,kBAA9C,CAAmE,EAbnD,CAehBrgC,UAAU,CAAC8G,GAAX,CAAiB,iBAAjB,CAAqC,EAfrB,CAgBhB9G,UAAU,CAAC+G,MAAX,CAAoB,oBAApB,CAA2C,EAhB3B,CAiBhB/G,UAAU,CAACmI,MAAX,CAAoB,oBAApB,CAA2C,EAjB3B,CAkBhBnI,UAAU,CAACmI,MAAX,CAAoB,WAAag3B,gBAAjC,CAAoD,EAlBpC,CAmBhBn/B,UAAU,CAACmI,MAAX,CAAoB,WAAak3B,gBAAjC,CAAoD,EAnBpC,CAoBhBr/B,UAAU,CAACmI,MAAX,CAAoB,WAAam3B,oBAAjC,CAAwD,EApBxC,CAqBhBt/B,UAAU,CAACiH,QAAX,CAAsB,sBAAtB,CAA+C,EArB/B,CAsBhBjH,UAAU,CAACmH,KAAX,CAAmB,mBAAnB,CAAyC,EAtBzB,CAuBhBnH,UAAU,CAAC+H,WAAX,CAAyB,yBAAzB,CAAqD,EAvBrC,CAwBhB/H,UAAU,CAACqH,OAAX,CAAqB,qBAArB,CAA6C,EAxB7B,CAyBhBrH,UAAU,CAACuH,SAAX,CAAuB,uBAAvB,CAAiD,EAzBjC,CA0BdvH,UAAU,CAACuH,SAAX,EAAwBvH,UAAU,CAACsgC,oBAArC,CAA8D,+BAA9D,CAAgG,EA1BhF,CA2BdtgC,UAAU,CAACuH,SAAX,EAAwBvH,UAAU,CAACw9B,qBAArC,CAA+D,gCAA/D,CAAkG,EA3BlF,CA6BhBx9B,UAAU,CAACwG,SAAX,CAAuB,uBAAvB,CAAiD,EA7BjC,CA8BhBxG,UAAU,CAAC0G,YAAX,CAA0B,0BAA1B,CAAuD,EA9BvC,CA+BhB1G,UAAU,CAAC2G,qBAAX,CAAmC,oCAAnC,CAA0E,EA/B1D,CAgChB3G,UAAU,CAAC4G,kBAAX,CAAgC,iCAAhC,CAAoE,EAhCpD,CAkChB5G,UAAU,CAACgI,WAAX,CAAyB,yBAAzB,CAAqD,EAlCrC,CAmChBhI,UAAU,CAACiI,oBAAX,CAAkC,kCAAlC,CAAuE,EAnCvD,CAoChBjI,UAAU,CAACkI,gBAAX,CAA8B,8BAA9B,CAA+D,EApC/C,CAqChBlI,UAAU,CAAC6H,YAAX,CAA0B,0BAA1B,CAAuD,EArCvC,CAsChB7H,UAAU,CAAC8H,YAAX,CAA0B,0BAA1B,CAAuD,EAtCvC,CAwChB9H,UAAU,CAACgH,QAAX,CAAsB,sBAAtB,CAA+C,EAxC/B,CAyChBhH,UAAU,CAACkF,SAAX,CAAuB,uBAAvB,CAAiD,EAzCjC,CA2ChBlF,UAAU,CAAC+F,KAAX,CAAmB,mBAAnB,CAAyC,EA3CzB,CA4ChB/F,UAAU,CAAC6mB,aAAX,CAA2B,2BAA3B,CAAyD,EA5CzC,CA6ChB7mB,UAAU,CAAC8mB,iBAAX,CAA+B,+BAA/B,CAAiE,EA7CjD,CA+ChB9mB,UAAU,CAACyI,YAAX,CAA0B,0BAA1B,CAAuD,EA/CvC,CAgDhBzI,UAAU,CAAC0I,eAAX,CAA6B,6BAA7B,CAA6D,EAhD7C,CAiDhB1I,UAAU,CAAC4I,YAAX,CAA0B,0BAA1B,CAAuD,EAjDvC,CAmDhB5I,UAAU,CAACugC,cAAX,CAA4B,qBAA5B,CAAoD,EAnDpC,CAoDhBvgC,UAAU,CAACgD,YAAX,EAA2BhD,UAAU,CAACigC,eAAtC,CAAwD,mBAAxD,CAA8E,EApD9D,CAqDhBjgC,UAAU,CAACwgC,YAAX,CAA0B,yBAA1B,CAAsD,EArDtC,CAsDhBxgC,UAAU,CAACygC,SAAX,CAAuB,gBAAvB,CAA0C,EAtD1B,CAuDhBzgC,UAAU,CAAC0gC,aAAX,CAA2B,yBAA3B,CAAuD,EAvDvC,CAyDhB1gC,UAAU,CAACwI,WAAX,CAAyB,yBAAzB,CAAqD,EAzDrC,CA2DhBxI,UAAU,CAACwF,WAAX,CAAyB,qBAAzB,CAAiD,EA3DjC,CA6DhBxF,UAAU,CAAC8gC,WAAX,CAAyB,sBAAzB,CAAkD,EA7DlC,CA8DhB9gC,UAAU,CAAC+gC,SAAX,CAAuB,oBAAvB,CAA8C,EA9D9B,CAgEhB/gC,UAAU,CAACghC,gBAAX,CAA8B,uBAA9B,CAAwD,EAhExC,CAiEhBhhC,UAAU,CAACghC,gBAAX,CAA8B,WAAa/B,mBAA3C,CAAiE,EAjEjD,CAmEhBj/B,UAAU,CAAC+E,kBAAX,CAAgC,6BAAhC,CAAgE,EAnEhD,CAqEhB/E,UAAU,CAACihC,uBAAX,CAAqC,mCAArC,CAA2E,EArE3D,CAuEhBjhC,UAAU,CAACytB,sBAAX,CAAoC,yBAApC,CAAgE,EAvEhD,CAwEdztB,UAAU,CAACytB,sBAAX,EAAqCztB,UAAU,CAAC29B,0BAAlD,CAAiF,6BAAjF,CAAiH,EAxEjG,CA0Ed,CAAE39B,UAAU,CAAC89B,yBAAX,EAAwC99B,UAAU,CAACmI,MAArD,GAAiEnI,UAAU,CAAC+9B,iCAA9E,CAAoH,yBAApH,CAAgJ,EA1EhI,CA4EhB,0BA5EgB,CA6EhB,8BA7EgB,CA8EhB,8BA9EgB,CAgFd/9B,UAAU,CAACqoB,WAAX,GAA2BxiE,aAA7B,CAA+C,sBAA/C,CAAwE,EAhFxD,CAiFdm6C,UAAU,CAACqoB,WAAX,GAA2BxiE,aAA7B,CAA+CqX,WAAW,CAAE,2BAAF,CAA1D,CAA4F,EAjF5E;EAkFd8iC,UAAU,CAACqoB,WAAX,GAA2BxiE,aAA7B,CAA+Cyc,sBAAsB,CAAE,aAAF,CAAiB09B,UAAU,CAACqoB,WAA5B,CAArE,CAAiH,EAlFjG,CAoFhBroB,UAAU,CAAC6E,SAAX,CAAuB,mBAAvB,CAA6C,EApF7B,CAqFhB7E,UAAU,CAAC7e,MAAX,GAAsBn5B,SAAtB,CAAkC,gBAAlC,CAAqD,EArFrC,CAuFhBkV,WAAW,CAAE,yBAAF,CAvFK;EAwFhB8iC,UAAU,CAAC8G,GAAX,CAAiB1kC,wBAAwB,CAAE,kBAAF,CAAsB49B,UAAU,CAACkhC,WAAjC,CAAzC,CAA0F,EAxF1E,CAyFhBlhC,UAAU,CAAC+G,MAAX,CAAoB3kC,wBAAwB,CAAE,qBAAF,CAAyB49B,UAAU,CAACmhC,cAApC,CAA5C,CAAmG,EAzFnF,CA0FhBnhC,UAAU,CAACmI,MAAX,CAAoB/lC,wBAAwB,CAAE,qBAAF,CAAyB49B,UAAU,CAACohC,cAApC,CAA5C,CAAmG,EA1FnF,CA2FhBphC,UAAU,CAAC+H,WAAX,CAAyB3lC,wBAAwB,CAAE,0BAAF,CAA8B49B,UAAU,CAACqhC,mBAAzC,CAAjD,CAAkH,EA3FlG,CA4FhBrhC,UAAU,CAACkI,gBAAX,CAA8B9lC,wBAAwB,CAAE,+BAAF,CAAmC49B,UAAU,CAACshC,wBAA9C,CAAtD,CAAiI,EA5FjH,CA6FhBthC,UAAU,CAAC6mB,aAAX,CAA2BzkD,wBAAwB,CAAE,4BAAF,CAAgC49B,UAAU,CAACuhC,qBAA3C,CAAnD,CAAwH,EA7FxG,CA8FhBvhC,UAAU,CAACiH,QAAX,CAAsB7kC,wBAAwB,CAAE,uBAAF,CAA2B49B,UAAU,CAACwhC,gBAAtC,CAA9C,CAAyG,EA9FzF,CA+FhBn/D,wBAAwB,CAAE,qBAAF,CAAyB29B,UAAU,CAAC2zB,cAApC,CA/FR,CAiGhB3zB,UAAU,CAACyhC,YAAX,CAA0B,yBAA2BzhC,UAAU,CAACyhC,YAAhE,CAA+E,EAjG/D,CAmGhB,IAnGgB,EAqGfzD,MArGe,CAqGPx7D,eArGO,EAqGWo6D,IArGX,CAqGiB,IArGjB,CAAjB,CAuGA,CAEDxnB,YAAY,CAAGtyC,eAAe,CAAEsyC,YAAF,CAA9B,CACAA,YAAY,CAAGzyC,gBAAgB,CAAEyyC,YAAF,CAAgBpV,UAAhB,CAA/B,CACAoV,YAAY,CAAGxyC,wBAAwB,CAAEwyC,YAAF,CAAgBpV,UAAhB,CAAvC,CAEAqV,cAAc,CAAGvyC,eAAe,CAAEuyC,cAAF,CAAhC,CACAA,cAAc,CAAG1yC,gBAAgB,CAAE0yC,cAAF,CAAkBrV,UAAlB,CAAjC,CACAqV,cAAc,CAAGzyC,wBAAwB,CAAEyyC,cAAF,CAAkBrV,UAAlB,CAAzC,CAEAoV,YAAY,CAAGlyC,WAAW,CAAEkyC,YAAF,CAA1B,CACAC,cAAc,CAAGnyC,WAAW,CAAEmyC,cAAF,CAA5B,CAEA,GAAKrV,UAAU,CAACyc,QAAX,EAAuBzc,UAAU,CAACqwB,mBAAX,GAAmC,IAA/D,CAAsE;EAIrEyP,aAAa,CAAG,mBAAhB,CAEAF,YAAY,CAAG,CACd,mCADc,CAEd,sBAFc,CAGd,qBAHc,CAId,2BAJc,EAKbhD,IALa,CAKP,IALO,EAKE,IALF,CAKSgD,YALxB,CAOAC,cAAc,CAAG,CAChB,oBADgB,CAEd7/B,UAAU,CAACgW,WAAX,GAA2BhpD,KAA7B,CAAuC,EAAvC,CAA4C,8BAF5B,CAGdgzC,UAAU,CAACgW,WAAX,GAA2BhpD,KAA7B,CAAuC,EAAvC,CAA4C,mCAH5B,CAIhB,sCAJgB,CAKhB,2BALgB,CAMhB,6BANgB,CAOhB,mCAPgB,CAQhB,oCARgB,CAShB,4CATgB,CAUhB,sCAVgB,CAWhB,sCAXgB,CAYhB,8CAZgB,CAahB,wCAbgB,EAcf4vE,IAde,CAcT,IAdS,EAcA,IAdA,CAcOiD,cAdxB,CAgBA,CAED,MAAM6B,UAAU,CAAG5B,aAAa,CAAGF,YAAhB,CAA+BxqB,YAAlD,CACA,MAAMusB,YAAY,CAAG7B,aAAa,CAAGD,cAAhB,CAAiCxqB,cAAtD,CAEA;EACA;EAEA,MAAMusB,cAAc,CAAG7/D,WAAW,CAAEw6C,EAAF,CAAM,KAAN,CAAamlB,UAAb,CAAlC,CACA,MAAMG,gBAAgB,CAAG9/D,WAAW,CAAEw6C,EAAF,CAAM,KAAN,CAAaolB,YAAb,CAApC,CAEAplB,EAAE,CAACulB,YAAH,CAAiB3Y,OAAjB,CAA0ByY,cAA1B,EACArlB,EAAE,CAACulB,YAAH,CAAiB3Y,OAAjB,CAA0B0Y,gBAA1B,EAEA;EAEA,GAAK7hC,UAAU,CAAC8V,mBAAX,GAAmC1iC,SAAxC,CAAoD,CAEnDmpC,EAAE,CAACwlB,kBAAH,CAAuB5Y,OAAvB,CAAgC,CAAhC,CAAmCnpB,UAAU,CAAC8V,mBAA9C,EAEA,CAJD,QAIY9V,UAAU,CAAC8S,YAAX,GAA4B,IAAjC,CAAwC;EAG9CyJ,EAAE,CAACwlB,kBAAH,CAAuB5Y,OAAvB,CAAgC,CAAhC,CAAmC,UAAnC,EAEA,CAED5M,EAAE,CAACylB,WAAH,CAAgB7Y,OAAhB,EAEA;EACA,GAAKhR,QAAQ,CAAC8pB,KAAT,CAAeC,iBAApB,CAAwC,CAEvC,MAAMC,UAAU,CAAG5lB,EAAE,CAAC6lB,iBAAH,CAAsBjZ,OAAtB,EAAgC8T,IAAhC,EAAnB,CACA,MAAMoF,SAAS,CAAG9lB,EAAE,CAACygB,gBAAH,CAAqB4E,cAArB,EAAsC3E,IAAtC,EAAlB,CACA,MAAMqF,WAAW,CAAG/lB,EAAE,CAACygB,gBAAH,CAAqB6E,gBAArB,EAAwC5E,IAAxC,EAApB,CAEA,IAAIsF,QAAQ,CAAG,IAAf,CACA,IAAIC,eAAe,CAAG,IAAtB,CAEA,GAAKjmB,EAAE,CAAC2f,mBAAH,CAAwB/S,OAAxB,CAAiC,KAAjC,IAA6C,KAAlD,CAA0D,CAEzDoZ,QAAQ,CAAG,KAAX,CAEA,MAAME,YAAY,CAAGtgE,eAAe,CAAEo6C,EAAF,CAAMqlB,cAAN,CAAsB,QAAtB,CAApC,CACA,MAAMc,cAAc,CAAGvgE,eAAe,CAAEo6C,EAAF,CAAMslB,gBAAN,CAAwB,UAAxB,CAAtC,CAEA9qD,OAAO,CAAC8D,KAAR,CACC,oCAAsC0hC,EAAE,CAAComB,QAAH,EAAtC,CAAsD,KAAtD,CACA,kBADA,CACqBpmB,EAAE,CAAC2f,mBAAH,CAAwB/S,OAAxB,CAAiC,KAAjC,CADrB,CACgE,MADhE,CAEA,oBAFA,CAEuBgZ,UAFvB,CAEoC,IAFpC,CAGAM,YAHA,CAGe,IAHf,CAIAC,cALD,EAQA,CAfD,QAeYP,UAAU,GAAK,EAApB,CAAyB,CAE/BprD,OAAO,CAACC,IAAR,CAAc,uCAAd,CAAuDmrD,UAAvD,EAEA,CAJM,QAIKE,SAAS,GAAK,EAAd,EAAoBC,WAAW,GAAK,EAAzC,CAA8C,CAEpDE,eAAe,CAAG,KAAlB,CAEA,CAED,GAAKA,eAAL,CAAuB,CAEtB,KAAKI,WAAL,CAAmB,CAElBL,QAAQ,CAAEA,QAFQ,CAIlBJ,UAAU,CAAEA,UAJM,CAMlB/sB,YAAY,CAAE,CAEbv/B,GAAG,CAAEwsD,SAFQ,CAGbQ,MAAM,CAAEjD,YAHK,CANI,CAalBvqB,cAAc,CAAE,CAEfx/B,GAAG,CAAEysD,WAFU,CAGfO,MAAM,CAAEhD,cAHO,CAbE,CAAnB,CAsBA,CAED,CAED;EAEA;EACA;EACA;EAEAtjB,EAAE,CAACumB,YAAH,CAAiBlB,cAAjB,EACArlB,EAAE,CAACumB,YAAH,CAAiBjB,gBAAjB,EAEA;EAEA,IAAIkB,cAAJ,CAEA,KAAKpK,WAAL,CAAmB,UAAY,CAE9B,GAAKoK,cAAc,GAAK3vD,SAAxB,CAAoC,CAEnC2vD,cAAc,CAAG,IAAIjhE,aAAJ,CAAmBy6C,EAAnB,CAAuB4M,OAAvB,CAAjB,CAEA,CAED,OAAO4Z,cAAP,CAEA,CAVD,CAYA;EAEA,IAAIxY,gBAAJ,CAEA,KAAKgB,aAAL,CAAqB,UAAY,CAEhC,GAAKhB,gBAAgB,GAAKn3C,SAA1B,CAAsC,CAErCm3C,gBAAgB,CAAG7nD,uBAAuB,CAAE65C,EAAF,CAAM4M,OAAN,CAA1C,CAEA,CAED,OAAOoB,gBAAP,CAEA,CAVD,CAYA;EAEA,KAAKyY,OAAL,CAAe,UAAY,CAE1Bla,aAAa,CAACyD,sBAAd,CAAsC,IAAtC,EAEAhQ,EAAE,CAAC0mB,aAAH,CAAkB9Z,OAAlB,EACA,KAAKA,OAAL,CAAe/1C,SAAf,CAEA,CAPD,CASA;EAEA,KAAKkM,IAAL,CAAY0gB,UAAU,CAAC+/B,UAAvB,CACA,KAAKhiC,EAAL,CAAU/7B,cAAc,EAAxB,CACA,KAAKu9D,QAAL,CAAgBA,QAAhB,CACA,KAAK2D,SAAL,CAAiB,CAAjB,CACA,KAAK/Z,OAAL,CAAeA,OAAf,CACA,KAAK/T,YAAL,CAAoBwsB,cAApB,CACA,KAAKvsB,cAAL,CAAsBwsB,gBAAtB,CAEA,WAAA,CAEA,CAED,SAASl+D,aAAT,CAAwBw0C,QAAxB,CAAkC8O,QAAlC,CAA4Ckc,UAA5C,CAAwD3tB,UAAxD,CAAoEgH,YAApE,CAAkFsM,aAAlF,CAAiGvT,QAAjG,CAA4G,CAE3G,MAAMgiB,QAAQ,CAAG,EAAjB,CAEA,MAAM9a,QAAQ,CAAGD,YAAY,CAACC,QAA9B,CACA,MAAMgR,sBAAsB,CAAGjR,YAAY,CAACiR,sBAA5C,CACA,MAAMW,mBAAmB,CAAG5R,YAAY,CAAC4R,mBAAzC,CACA,MAAML,iBAAiB,CAAGvR,YAAY,CAACuR,iBAAvC,CACA,MAAMG,cAAc,CAAG1R,YAAY,CAAC0R,cAApC,CAEA,IAAIzpB,SAAS,CAAG+X,YAAY,CAAC/X,SAA7B,CAEA,MAAM2+B,SAAS,CAAG,CACjB5+D,iBAAiB,CAAE,OADF,CAEjBC,oBAAoB,CAAE,cAFL,CAGjBqH,kBAAkB,CAAE,QAHH,CAIjBtY,iBAAiB,CAAE,OAJF,CAKjBuY,mBAAmB,CAAE,SALJ,CAMjBH,iBAAiB,CAAE,OANF,CAOjBC,gBAAgB,CAAE,MAPD,CAQjBH,oBAAoB,CAAE,UARL,CASjBC,oBAAoB,CAAE,UATL,CAUjBK,kBAAkB,CAAE,QAVH,CAWjBvE,iBAAiB,CAAE,OAXF,CAYjBwE,kBAAkB,CAAE,QAZH,CAajB7D,cAAc,CAAE,QAbC,CAcjBoD,cAAc,CAAE,QAdC,CAejB5F,cAAc,CAAE,QAfC,CAAlB,CAkBA,MAAMy9D,cAAc,CAAG,CACtB,WADsB,CACT,UADS,CACG,wBADH,CAC6B,gBAD7B,CAC+C,YAD/C,CAC6D,iBAD7D,CAEtB,KAFsB,CAEf,aAFe,CAEA,QAFA,CAEU,gBAFV,CAE4B,QAF5B,CAEsC,YAFtC,CAEoD,gBAFpD,CAEsE,cAFtE,CAGtB,UAHsB,CAGV,kBAHU,CAGU,OAHV,CAGmB,aAHnB,CAGkC,qBAHlC,CAGyD,SAHzD,CAGoE,WAHpE,CAItB,sBAJsB,CAIE,uBAJF,CAKtB,WALsB,CAKT,cALS,CAKO,uBALP,CAKgC,oBALhC,CAMtB,iBANsB,CAMH,aANG,EAMc,cANd,CAM8B,cAN9B,CAM8C,aAN9C,CAOtB,UAPsB,CAOV,WAPU,CAOG,SAPH,CAOc,cAPd,CAO8B,cAP9B,CAO8C,gBAP9C,CAOgE,WAPhE,CAO6E,eAP7E,CAO8F,KAP9F,CAOqG,QAPrG,CAO+G,SAP/G,CAQtB,aARsB,CAQP,iBARO,CAQY,wBARZ,CAQsC,UARtC,CAStB,UATsB,CASV,kBATU,CASU,cATV,CAS0B,cAT1B,CAS0C,mBAT1C,CAS+D,oBAT/D,CAUtB,cAVsB,CAUN,gBAVM,CAUY,eAVZ,CAU6B,eAV7B,CAU8C,mBAV9C,CAWtB,oBAXsB,CAWA,sBAXA,CAWwB,qBAXxB,CAYtB,kBAZsB,CAYF,eAZE,CAYe,aAZf,CAY8B,yBAZ9B,CAatB,aAbsB,CAaP,WAbO,CAaM,mBAbN,CAa2B,qBAb3B,CAakD,cAblD,CAakE,WAblE,CAa+E,QAb/E,CActB,sBAdsB,CAcE,kBAdF,CAcsB,0BAdtB,CAetB,cAfsB,CAeN,iBAfM,CAea,cAfb,CAgBtB,OAhBsB,CAgBb,eAhBa,CAgBI,uBAhBJ,CAgB6B,mBAhB7B,CAAvB,CAmBA,SAASC,WAAT,CAAsB7zC,MAAtB,CAA+B,CAE9B,MAAM4Q,QAAQ,CAAG5Q,MAAM,CAAC4Q,QAAxB,CACA,MAAMkjC,KAAK,CAAGljC,QAAQ,CAACkjC,KAAvB,CAEA,GAAKnV,mBAAL,CAA2B,CAE1B,WAAA,CAEA,CAJD,KAIO;EAGN;EACA;EACA;EACA;EACA;EAEA,MAAMoV,eAAe,CAAGzV,iBAAxB,CACA,MAAM0V,eAAe,CAAGnvD,IAAI,CAACsB,KAAL,CAAY,CAAE4tD,eAAe,CAAG,EAApB,EAA2B,CAAvC,CAAxB,CAEA,MAAMrD,QAAQ,CAAG7rD,IAAI,CAACc,GAAL,CAAUquD,eAAV,CAA2BF,KAAK,CAACnvD,MAAjC,CAAjB,CAEA,GAAK+rD,QAAQ,CAAGoD,KAAK,CAACnvD,MAAtB,CAA+B,CAE9B2C,OAAO,CAACC,IAAR,CAAc,qCAAuCusD,KAAK,CAACnvD,MAA7C,CAAsD,4BAAtD,CAAqF+rD,QAArF,CAAgG,GAA9G,EACA,QAAA,CAEA,CAED,OAAOA,QAAP,CAEA,CAED,CAED,SAASuD,yBAAT,CAAoC58B,GAApC,CAA0C,CAEzC,IAAIzlB,QAAJ,CAEA,GAAKylB,GAAG,EAAIA,GAAG,CAACrjB,SAAhB,CAA4B,CAE3BpC,QAAQ,CAAGylB,GAAG,CAACzlB,QAAf,CAEA,CAJD,QAIYylB,GAAG,EAAIA,GAAG,CAAC1gB,mBAAhB,CAAsC,CAE5CrP,OAAO,CAACC,IAAR,CAAc,4HAAd,EACAqK,QAAQ,CAAGylB,GAAG,CAAChhB,OAAJ,CAAYzE,QAAvB,CAEA,CALM,KAKA,CAENA,QAAQ,CAAGr1B,cAAX,CAEA,CAED,GAAKywD,QAAQ,EAAI3V,GAAZ,EAAmBA,GAAG,CAACrjB,SAAvB,EAAoCqjB,GAAG,CAAC3lB,MAAJ,GAAel5B,UAAnD,EAAiE6+C,GAAG,CAAC7zB,IAAJ,GAAa9rB,gBAA9E,EAAkG2/C,GAAG,CAACzlB,QAAJ,GAAiBp1B,YAAxH,CAAuI,CAEtIo1B,QAAQ,CAAGr1B,cAAX,CAA2B;EAE3B,CAED,OAAOq1B,QAAP,CAEA,CAED,SAASsiD,aAAT,CAAwBrjC,QAAxB,CAAkCgV,MAAlC,CAA0CsuB,OAA1C,CAAmDxrB,KAAnD,CAA0D3oB,MAA1D,CAAmE,CAElE,MAAMoT,GAAG,CAAGuV,KAAK,CAACvV,GAAlB,CACA,MAAMjD,WAAW,CAAGU,QAAQ,CAACujC,sBAAT,CAAkCzrB,KAAK,CAACxY,WAAxC,CAAsD,IAA1E,CAEA,MAAMuI,MAAM,CAAG,CAAE7H,QAAQ,CAACujC,sBAAT,CAAkCV,UAAlC,CAA+Clc,QAAjD,EAA4DrJ,GAA5D,CAAiEtd,QAAQ,CAAC6H,MAAT,EAAmBvI,WAApF,CAAf,CAEA,MAAM69B,QAAQ,CAAG2F,SAAS,CAAE9iC,QAAQ,CAACrtB,IAAX,CAA1B,CAEA;EACA;EAEA,MAAMktD,QAAQ,CAAG1wC,MAAM,CAACyQ,aAAP,CAAuBojC,WAAW,CAAE7zC,MAAF,CAAlC,CAA+C,CAAhE,CAEA,GAAK6Q,QAAQ,CAACmE,SAAT,GAAuB,IAA5B,CAAmC,CAElCA,SAAS,CAAG+X,YAAY,CAAC4Q,eAAb,CAA8B9sB,QAAQ,CAACmE,SAAvC,CAAZ,CAEA,GAAKA,SAAS,GAAKnE,QAAQ,CAACmE,SAA5B,CAAwC,CAEvC1tB,OAAO,CAACC,IAAR,CAAc,mCAAd,CAAmDspB,QAAQ,CAACmE,SAA5D,CAAuE,sBAAvE,CAA+FA,SAA/F,CAA0G,UAA1G,EAEA,CAED,CAED,IAAI2Q,YAAJ,CAAkBC,cAAlB,CAEA,GAAKooB,QAAL,CAAgB,CAEf,MAAMzkB,MAAM,CAAG57C,SAAS,CAAEqgE,QAAF,CAAxB,CAEAroB,YAAY,CAAG4D,MAAM,CAAC5D,YAAtB,CACAC,cAAc,CAAG2D,MAAM,CAAC3D,cAAxB,CAEA,CAPD,KAOO,CAEND,YAAY,CAAG9U,QAAQ,CAAC8U,YAAxB,CACAC,cAAc,CAAG/U,QAAQ,CAAC+U,cAA1B,CAEA,CAED,MAAMkD,mBAAmB,CAAGJ,QAAQ,CAACK,eAAT,EAA5B,CAEA,MAAMsrB,YAAY,CAAGxjC,QAAQ,CAAC4E,SAAT,CAAqB,CAA1C,CACA,MAAM6+B,YAAY,CAAGzjC,QAAQ,CAACkG,SAAT,CAAqB,CAA1C,CAEA,MAAMxG,UAAU,CAAG,CAElByc,QAAQ,CAAEA,QAFQ,CAIlBghB,QAAQ,CAAEA,QAJQ,CAKlBsC,UAAU,CAAEz/B,QAAQ,CAACrtB,IALH,CAOlBmiC,YAAY,CAAEA,YAPI,CAQlBC,cAAc,CAAEA,cARE,CASlBF,OAAO,CAAE7U,QAAQ,CAAC6U,OATA,CAWlBkb,mBAAmB,CAAE/vB,QAAQ,CAAC+vB,mBAAT,GAAiC,IAXpC,CAYlBra,WAAW,CAAE1V,QAAQ,CAAC0V,WAZJ,CAclBvR,SAAS,CAAEA,SAdO,CAgBlBu7B,UAAU,CAAEvwC,MAAM,CAAC0P,eAAP,GAA2B,IAhBrB,CAiBlB8gC,eAAe,CAAExwC,MAAM,CAAC0P,eAAP,GAA2B,IAA3B,EAAmC1P,MAAM,CAAC4P,aAAP,GAAyB,IAjB3D,CAmBlB6gC,sBAAsB,CAAEhS,cAnBN,CAoBlByF,cAAc,CAAIpb,mBAAmB,GAAK,IAA1B,CAAmCmrB,yBAAyB,CAAEnrB,mBAAmB,CAACzyB,OAAtB,CAA5D,CAA8FqyB,QAAQ,CAACwb,cApBrG,CAqBlB7sB,GAAG,CAAE,CAAC,CAAExG,QAAQ,CAACwG,GArBC,CAsBlBo6B,WAAW,CAAEwC,yBAAyB,CAAEpjC,QAAQ,CAACwG,GAAX,CAtBpB,CAuBlBC,MAAM,CAAE,CAAC,CAAEzG,QAAQ,CAACyG,MAvBF,CAwBlBo6B,cAAc,CAAEuC,yBAAyB,CAAEpjC,QAAQ,CAACyG,MAAX,CAxBvB,CAyBlBoB,MAAM,CAAE,CAAC,CAAEA,MAzBO,CA0BlBi3B,UAAU,CAAEj3B,MAAM,EAAIA,MAAM,CAACtnB,OA1BX,CA2BlBugD,cAAc,CAAEsC,yBAAyB,CAAEv7B,MAAF,CA3BvB,CA4BlBo1B,YAAY,CAAI,CAAC,CAAEp1B,MAAL,GAAqBA,MAAM,CAACtnB,OAAP,GAAmBr6B,uBAArB,EAAoD2hD,MAAM,CAACtnB,OAAP,GAAmBp6B,uBAA1F,CA5BI,CA6BlBwgD,QAAQ,CAAE,CAAC,CAAE3G,QAAQ,CAAC2G,QA7BJ,CA8BlBu6B,gBAAgB,CAAEkC,yBAAyB,CAAEpjC,QAAQ,CAAC2G,QAAX,CA9BzB,CA+BlBE,KAAK,CAAE,CAAC,CAAE7G,QAAQ,CAAC6G,KA/BD,CAgClBY,WAAW,CAAE,CAAC,CAAEzH,QAAQ,CAACyH,WAhCP,CAiClBs5B,mBAAmB,CAAEqC,yBAAyB,CAAEpjC,QAAQ,CAACyH,WAAX,CAjC5B,CAkClBV,OAAO,CAAE,CAAC,CAAE/G,QAAQ,CAAC+G,OAlCH,CAmClBE,SAAS,CAAE,CAAC,CAAEjH,QAAQ,CAACiH,SAnCL,CAoClB+4B,oBAAoB,CAAEhgC,QAAQ,CAACkH,aAAT,GAA2B76C,oBApC/B,CAqClB6wE,qBAAqB,CAAEl9B,QAAQ,CAACkH,aAAT,GAA2B96C,qBArChC,CAuClB85C,SAAS,CAAEu9B,YAvCO,CAwClBr9B,YAAY,CAAEq9B,YAAY,EAAI,CAAC,CAAEzjC,QAAQ,CAACoG,YAxCxB,CAyClBC,qBAAqB,CAAEo9B,YAAY,EAAI,CAAC,CAAEzjC,QAAQ,CAACqG,qBAzCjC,CA0ClBC,kBAAkB,CAAEm9B,YAAY,EAAI,CAAC,CAAEzjC,QAAQ,CAACsG,kBA1C9B,CA4ClBc,eAAe,CAAE,CAAC,CAAEpH,QAAQ,CAACoH,eA5CX,CA6ClBG,YAAY,CAAE,CAAC,CAAEvH,QAAQ,CAACuH,YA7CR,CA8ClBC,YAAY,CAAE,CAAC,CAAExH,QAAQ,CAACwH,YA9CR,CA+ClBE,WAAW,CAAE,CAAC,CAAE1H,QAAQ,CAAC0H,WA/CP,CAgDlBC,oBAAoB,CAAE,CAAC,CAAE3H,QAAQ,CAAC2H,oBAhDhB,CAiDlBC,gBAAgB,CAAE,CAAC,CAAE5H,QAAQ,CAAC4H,gBAjDZ,CAkDlBo5B,wBAAwB,CAAEoC,yBAAyB,CAAEpjC,QAAQ,CAAC4H,gBAAX,CAlDjC,CAoDlBlB,QAAQ,CAAE,CAAC,CAAE1G,QAAQ,CAAC0G,QApDJ,CAqDlB9B,SAAS,CAAE4+B,YArDO,CAuDlBt7B,WAAW,CAAE,CAAC,CAAElI,QAAQ,CAACkI,WAvDP,CAyDlBzC,KAAK,CAAEzF,QAAQ,CAACyF,KAAT,CAAiB,CAzDN,CA0DlB8gB,aAAa,CAAE,CAAC,CAAEvmB,QAAQ,CAACumB,aA1DT,CA2DlB0a,qBAAqB,CAAEmC,yBAAyB,CAAEpjC,QAAQ,CAACumB,aAAX,CA3D9B,CA4DlBC,iBAAiB,CAAE,CAAC,CAAExmB,QAAQ,CAACwmB,iBA5Db,CA8DlBre,YAAY,CAAEnI,QAAQ,CAACmI,YAAT,CAAwB,CA9DpB,CA+DlBC,eAAe,CAAE,CAAC,CAAEpI,QAAQ,CAACoI,eA/DX,CAgElBE,YAAY,CAAE,CAAC,CAAEtI,QAAQ,CAACsI,YAhER,CAkElBR,OAAO,CAAE9H,QAAQ,CAAC8H,OAlEA,CAoElBm4B,cAAc,CAAI,CAAC,CAAEjgC,QAAQ,CAACiH,SAAZ,EAAyB,CAAC,CAAE9X,MAAM,CAACW,QAAnC,EAA+C,CAAC,CAAEX,MAAM,CAACW,QAAP,CAAgBud,UAAhB,CAA2BiB,OApE7E,CAqElB5L,YAAY,CAAE1C,QAAQ,CAAC0C,YArEL,CAsElBw9B,YAAY,CAAElgC,QAAQ,CAAC0C,YAAT,GAA0B,IAA1B,EAAkC,CAAC,CAAEvT,MAAM,CAACW,QAA5C,EAAwD,CAAC,CAAEX,MAAM,CAACW,QAAP,CAAgBud,UAAhB,CAA2BhI,KAAtF,EAA+FlW,MAAM,CAACW,QAAP,CAAgBud,UAAhB,CAA2BhI,KAA3B,CAAiCwG,QAAjC,GAA8C,CAtEzI,CAuElBs0B,SAAS,CAAE,CAAC,CAAEngC,QAAQ,CAACwG,GAAZ,EAAmB,CAAC,CAAExG,QAAQ,CAAC+G,OAA/B,EAA0C,CAAC,CAAE/G,QAAQ,CAACiH,SAAtD,EAAmE,CAAC,CAAEjH,QAAQ,CAAC0H,WAA/E,EAA8F,CAAC,CAAE1H,QAAQ,CAAC0G,QAA1G,EAAsH,CAAC,CAAE1G,QAAQ,CAACyH,WAAlI,EAAiJ,CAAC,CAAEzH,QAAQ,CAACuH,YAA7J,EAA6K,CAAC,CAAEvH,QAAQ,CAACwH,YAAzL,EAAyM,CAAC,CAAExH,QAAQ,CAACoG,YAArN,EAAqO,CAAC,CAAEpG,QAAQ,CAACqG,qBAAjP,EAA0Q,CAAC,CAAErG,QAAQ,CAACsG,kBAAtR,EAA4S,CAAC,CAAEtG,QAAQ,CAACoH,eAAxT,EAA2U,CAAC,CAAEpH,QAAQ,CAACoI,eAAvV,EAA0W,CAAC,CAAEpI,QAAQ,CAACsI,YAAtX,EAAsY,CAAC,CAAEtI,QAAQ,CAAC2H,oBAAlZ,EAA0a,CAAC,CAAE3H,QAAQ,CAAC4H,gBAAtb,EAA0c,CAAC,CAAE5H,QAAQ,CAACumB,aAAtd,EAAuevmB,QAAQ,CAACwmB,iBAvEze,CAwElB4Z,aAAa,CAAE,EAAI,CAAC,CAAEpgC,QAAQ,CAACwG,GAAZ,EAAmB,CAAC,CAAExG,QAAQ,CAAC+G,OAA/B,EAA0C,CAAC,CAAE/G,QAAQ,CAACiH,SAAtD,EAAmE,CAAC,CAAEjH,QAAQ,CAAC0H,WAA/E,EAA8F,CAAC,CAAE1H,QAAQ,CAAC0G,QAA1G,EAAsH,CAAC,CAAE1G,QAAQ,CAACyH,WAAlI,EAAiJ,CAAC,CAAEzH,QAAQ,CAACuH,YAA7J,EAA6K,CAAC,CAAEvH,QAAQ,CAACwH,YAAzL,EAAyM,CAAC,CAAExH,QAAQ,CAACsG,kBAArN,EAA2OtG,QAAQ,CAACmI,YAAT,CAAwB,CAAnQ,EAAwQ,CAAC,CAAEnI,QAAQ,CAACoI,eAApR,EAAuS,CAAC,CAAEpI,QAAQ,CAACsI,YAAnT,EAAmU,CAAC,CAAEtI,QAAQ,CAAC2H,oBAA/U,EAAuW,CAAC,CAAE3H,QAAQ,CAAC4H,gBAAnX,EAAuY,CAAC,CAAE5H,QAAQ,CAACyF,KAAZ,CAAoB,CAA3Z,EAAga,CAAC,CAAEzF,QAAQ,CAACumB,aAA5a,EAA6b,CAAC,CAAEvmB,QAAQ,CAACwmB,iBAA7c,GAAoe,CAAC,CAAExmB,QAAQ,CAACoH,eAxE7e,CA0ElB7E,GAAG,CAAE,CAAC,CAAEA,GA1EU,CA2ElBu9B,MAAM,CAAE9/B,QAAQ,CAACuC,GA3EC,CA4ElBw9B,OAAO,CAAIx9B,GAAG,EAAIA,GAAG,CAACmhC,SA5EJ,CA8ElBx+B,WAAW,CAAE,CAAC,CAAElF,QAAQ,CAACkF,WA9EP,CAgFlBuD,eAAe,CAAEzI,QAAQ,CAACyI,eAhFR,CAiFlB0kB,sBAAsB,CAAEA,sBAjFN,CAmFlBkT,QAAQ,CAAElxC,MAAM,CAACyQ,aAAP,GAAyB,IAAzB,EAAiCigC,QAAQ,CAAG,CAnFpC,CAoFlBA,QAAQ,CAAEA,QApFQ,CAqFlBS,gBAAgB,CAAExS,mBArFA,CAuFlBtb,YAAY,CAAE,CAAC,CAAErjB,MAAM,CAACW,QAAV,EAAsB,CAAC,CAAEX,MAAM,CAACW,QAAP,CAAgBwd,eAAhB,CAAgC7U,QAvFrD,CAwFlBq/B,YAAY,CAAE,CAAC,CAAE3oC,MAAM,CAACW,QAAV,EAAsB,CAAC,CAAEX,MAAM,CAACW,QAAP,CAAgBwd,eAAhB,CAAgCngB,MAxFrD,CAyFlBozC,iBAAiB,CAAI,CAAC,CAAEpxC,MAAM,CAACW,QAAV,EAAsB,CAAC,CAAEX,MAAM,CAACW,QAAP,CAAgBwd,eAAhB,CAAgC7U,QAA3D,CAAwEtJ,MAAM,CAACW,QAAP,CAAgBwd,eAAhB,CAAgC7U,QAAhC,CAAyC3kB,MAAjH,CAA0H,CAzF3H,CA2FlBgqD,YAAY,CAAE9oB,MAAM,CAAC2uB,WAAP,CAAmB7vD,MA3Ff,CA4FlBmqD,cAAc,CAAEjpB,MAAM,CAACvlB,KAAP,CAAa3b,MA5FX,CA6FlBiqD,aAAa,CAAE/oB,MAAM,CAAC4uB,IAAP,CAAY9vD,MA7FT,CA8FlBkqD,iBAAiB,CAAEhpB,MAAM,CAAC6uB,QAAP,CAAgB/vD,MA9FjB,CA+FlBoqD,aAAa,CAAElpB,MAAM,CAAC8uB,IAAP,CAAYhwD,MA/FT,CAiGlBqqD,kBAAkB,CAAEnpB,MAAM,CAACkP,oBAAP,CAA4BpwC,MAjG9B,CAkGlBuqD,oBAAoB,CAAErpB,MAAM,CAAC+P,cAAP,CAAsBjxC,MAlG1B,CAmGlBsqD,mBAAmB,CAAEppB,MAAM,CAACyP,aAAP,CAAqB3wC,MAnGxB,CAqGlBwqD,iBAAiB,CAAErpB,QAAQ,CAACoZ,SArGV,CAsGlBkQ,mBAAmB,CAAEtpB,QAAQ,CAACqZ,eAtGZ,CAwGlBztC,MAAM,CAAEmf,QAAQ,CAACnf,MAxGC,CAyGlB0jB,SAAS,CAAEvE,QAAQ,CAACuE,SAzGF,CA2GlBm8B,gBAAgB,CAAE7oB,QAAQ,CAACksB,SAAT,CAAmBhtB,OAAnB,EAA8BusB,OAAO,CAACxvD,MAAR,CAAiB,CA3G/C,CA4GlB8qD,aAAa,CAAE/mB,QAAQ,CAACksB,SAAT,CAAmBpxD,IA5GhB,CA8GlBo1C,WAAW,CAAE/nB,QAAQ,CAAC0E,UAAT,CAAsBmT,QAAQ,CAACkQ,WAA/B,CAA6CxiE,aA9GxC,CA+GlBo7E,uBAAuB,CAAE9oB,QAAQ,CAAC8oB,uBA/GhB,CAiHlBl8B,kBAAkB,CAAEzE,QAAQ,CAACyE,kBAjHX,CAmHlB+7B,WAAW,CAAExgC,QAAQ,CAACyC,IAAT,GAAkBr/C,UAnHb,CAoHlBq9E,SAAS,CAAEzgC,QAAQ,CAACyC,IAAT,GAAkBt/C,QApHX,CAsHlBg+E,YAAY,CAAInhC,QAAQ,CAACmhC,YAAT,GAA0BruD,SAA5B,CAA0CktB,QAAQ,CAACmhC,YAAnD,CAAkE,KAtH9D,CAwHlB3rB,mBAAmB,CAAExV,QAAQ,CAACwV,mBAxHZ,CA0HlBwnB,oBAAoB,CAAEh9B,QAAQ,CAACkV,UAAT,EAAuBlV,QAAQ,CAACkV,UAAT,CAAoBC,WA1H/C,CA2HlBioB,kBAAkB,CAAEp9B,QAAQ,CAACkV,UAAT,EAAuBlV,QAAQ,CAACkV,UAAT,CAAoBE,SA3H7C,CA4HlBkoB,oBAAoB,CAAEt9B,QAAQ,CAACkV,UAAT,EAAuBlV,QAAQ,CAACkV,UAAT,CAAoBG,WA5H/C,CA6HlBmoB,yBAAyB,CAAEx9B,QAAQ,CAACkV,UAAT,EAAuBlV,QAAQ,CAACkV,UAAT,CAAoBI,gBA7HpD,CA+HlB+nB,0BAA0B,CAAElhB,QAAQ,EAAIjH,UAAU,CAAC0X,GAAX,CAAgB,gBAAhB,CA/HtB,CAgIlB2Q,4BAA4B,CAAEphB,QAAQ,EAAIjH,UAAU,CAAC0X,GAAX,CAAgB,oBAAhB,CAhIxB,CAiIlB6Q,iCAAiC,CAAEthB,QAAQ,EAAIjH,UAAU,CAAC0X,GAAX,CAAgB,wBAAhB,CAjI7B,CAmIlB7nB,qBAAqB,CAAE/E,QAAQ,CAAC+E,qBAAT,EAnIL,CAAnB,CAuIA,OAAOrF,UAAP,CAEA,CAED,SAASskC,kBAAT,CAA6BtkC,UAA7B,CAA0C,CAEzC,MAAMhsB,KAAK,CAAG,EAAd,CAEA,GAAKgsB,UAAU,CAACy9B,QAAhB,CAA2B,CAE1BzpD,KAAK,CAACT,IAAN,CAAYysB,UAAU,CAACy9B,QAAvB,EAEA,CAJD,KAIO,CAENzpD,KAAK,CAACT,IAAN,CAAYiM,UAAU,CAAEwgB,UAAU,CAACqV,cAAb,CAAtB,EACArhC,KAAK,CAACT,IAAN,CAAYiM,UAAU,CAAEwgB,UAAU,CAACoV,YAAb,CAAtB,EAEA,CAED,GAAKpV,UAAU,CAACmV,OAAX,GAAuB/hC,SAA5B,CAAwC,CAEvC,IAAM,MAAMkM,IAAZ,IAAoB0gB,UAAU,CAACmV,OAA/B,CAAyC,CAExCnhC,KAAK,CAACT,IAAN,CAAY+L,IAAZ,EACAtL,KAAK,CAACT,IAAN,CAAYysB,UAAU,CAACmV,OAAX,CAAoB71B,IAApB,CAAZ,EAEA,CAED,CAED,GAAK0gB,UAAU,CAACqwB,mBAAX,GAAmC,KAAxC,CAAgD,CAE/C,IAAM,IAAIn8C,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGmvD,cAAc,CAACjvD,MAApC,CAA4CF,CAAC,EAA7C,CAAmD,CAElDF,KAAK,CAACT,IAAN,CAAYysB,UAAU,CAAEqjC,cAAc,CAAEnvD,CAAF,CAAhB,CAAtB,EAEA,CAEDF,KAAK,CAACT,IAAN,CAAY4kC,QAAQ,CAACwb,cAArB,EACA3/C,KAAK,CAACT,IAAN,CAAY4kC,QAAQ,CAACzN,WAArB,EAEA,CAED12B,KAAK,CAACT,IAAN,CAAYysB,UAAU,CAACqF,qBAAvB,EAEA,OAAOrxB,KAAK,CAAC4oD,IAAN,EAAP,CAEA,CAED,SAASjE,WAAT,CAAsBr4B,QAAtB,CAAiC,CAEhC,MAAMm9B,QAAQ,CAAG2F,SAAS,CAAE9iC,QAAQ,CAACrtB,IAAX,CAA1B,CACA,IAAIgiC,QAAJ,CAEA,GAAKwoB,QAAL,CAAgB,CAEf,MAAMzkB,MAAM,CAAG57C,SAAS,CAAEqgE,QAAF,CAAxB,CACAxoB,QAAQ,CAAGj/C,aAAa,CAAC0gB,KAAd,CAAqBsiC,MAAM,CAAC/D,QAA5B,CAAX,CAEA,CALD,KAKO,CAENA,QAAQ,CAAG3U,QAAQ,CAAC2U,QAApB,CAEA,CAED,OAAOA,QAAP,CAEA,CAED,SAASsvB,cAAT,CAAyBvkC,UAAzB,CAAqCu/B,QAArC,CAAgD,CAE/C,IAAIpW,OAAJ,CAEA;EACA,IAAM,IAAIn/B,CAAC,CAAG,CAAR,CAAWw6C,EAAE,CAAGjN,QAAQ,CAACnjD,MAA/B,CAAuC4V,CAAC,CAAGw6C,EAA3C,CAA+Cx6C,CAAC,EAAhD,CAAsD,CAErD,MAAMy6C,kBAAkB,CAAGlN,QAAQ,CAAEvtC,CAAF,CAAnC,CAEA,GAAKy6C,kBAAkB,CAAClF,QAAnB,GAAgCA,QAArC,CAAgD,CAE/CpW,OAAO,CAAGsb,kBAAV,CACA,EAAGtb,OAAO,CAAC+Z,SAAX,CAEA,MAEA,CAED,CAED,GAAK/Z,OAAO,GAAK/1C,SAAjB,CAA6B,CAE5B+1C,OAAO,CAAG,IAAIzlD,YAAJ,CAAkBy0C,QAAlB,CAA4BonB,QAA5B,CAAsCv/B,UAAtC,CAAkD8oB,aAAlD,CAAV,CACAyO,QAAQ,CAAChkD,IAAT,CAAe41C,OAAf,EAEA,CAED,OAAOA,OAAP,CAEA,CAED,SAASub,cAAT,CAAyBvb,OAAzB,CAAmC,CAElC,GAAK,EAAGA,OAAO,CAAC+Z,SAAX,GAAyB,CAA9B,CAAkC;EAGjC,MAAMhvD,CAAC,CAAGqjD,QAAQ,CAACjkD,OAAT,CAAkB61C,OAAlB,CAAV,CACAoO,QAAQ,CAAErjD,CAAF,CAAR,CAAgBqjD,QAAQ,CAAEA,QAAQ,CAACnjD,MAAT,CAAkB,CAApB,CAAxB,CACAmjD,QAAQ,CAACoN,GAAT,GAEA;EACAxb,OAAO,CAAC6Z,OAAR,GAEA,CAED,CAED,OAAO,CACNW,aAAa,CAAEA,aADT,CAENW,kBAAkB,CAAEA,kBAFd,CAGN3L,WAAW,CAAEA,WAHP,CAIN4L,cAAc,CAAEA,cAJV,CAKNG,cAAc,CAAEA,cALV;EAONnN,QAAQ,CAAEA,QAPJ,CAAP,CAUA,CAED,SAAS3zD,eAAT,EAA2B,CAE1B,IAAIsgD,UAAU,CAAG,IAAIvH,OAAJ,EAAjB,CAEA,SAASiB,GAAT,CAAcnuB,MAAd,CAAuB,CAEtB,IAAIqX,GAAG,CAAGod,UAAU,CAACtG,GAAX,CAAgBnuB,MAAhB,CAAV,CAEA,GAAKqX,GAAG,GAAK1zB,SAAb,CAAyB,CAExB0zB,GAAG,CAAG,EAAN,CACAod,UAAU,CAAChuC,GAAX,CAAgBuZ,MAAhB,CAAwBqX,GAAxB,EAEA,CAED,OAAOA,GAAP,CAEA,CAED,SAASpJ,MAAT,CAAiBjO,MAAjB,CAA0B,CAEzBy0B,UAAU,CAACpG,MAAX,CAAmBruB,MAAnB,EAEA,CAED,SAAS/G,MAAT,CAAiB+G,MAAjB,CAAyBmR,GAAzB,CAA8BzrB,KAA9B,CAAsC,CAErC+uC,UAAU,CAACtG,GAAX,CAAgBnuB,MAAhB,EAA0BmR,GAA1B,EAAkCzrB,KAAlC,CAEA,CAED,SAASkO,OAAT,EAAmB,CAElB6gC,UAAU,CAAG,IAAIvH,OAAJ,EAAb,CAEA,CAED,OAAO,CACNiB,GAAG,CAAEA,GADC,CAENlgB,MAAM,CAAEA,MAFF,CAGNhV,MAAM,CAAEA,MAHF,CAINrF,OAAO,CAAEA,OAJH,CAAP,CAOA,CAED,SAASxf,iBAAT,CAA4BuT,CAA5B,CAA+BC,CAA/B,CAAmC,CAElC,GAAKD,CAAC,CAACwtD,UAAF,GAAiBvtD,CAAC,CAACutD,UAAxB,CAAqC,CAEpC,OAAOxtD,CAAC,CAACwtD,UAAF,CAAevtD,CAAC,CAACutD,UAAxB,CAEA,CAJD,QAIYxtD,CAAC,CAAC+kB,WAAF,GAAkB9kB,CAAC,CAAC8kB,WAAzB,CAAuC,CAE7C,OAAO/kB,CAAC,CAAC+kB,WAAF,CAAgB9kB,CAAC,CAAC8kB,WAAzB,CAEA,CAJM,QAIK/kB,CAAC,CAAC+xC,OAAF,GAAc9xC,CAAC,CAAC8xC,OAArB,CAA+B,CAErC,OAAO/xC,CAAC,CAAC+xC,OAAF,CAAUprB,EAAV,CAAe1mB,CAAC,CAAC8xC,OAAF,CAAUprB,EAAhC,CAEA,CAJM,QAIK3mB,CAAC,CAACkpB,QAAF,CAAWvC,EAAX,GAAkB1mB,CAAC,CAACipB,QAAF,CAAWvC,EAAlC,CAAuC,CAE7C,OAAO3mB,CAAC,CAACkpB,QAAF,CAAWvC,EAAX,CAAgB1mB,CAAC,CAACipB,QAAF,CAAWvC,EAAlC,CAEA,CAJM,QAIK3mB,CAAC,CAACyM,CAAF,GAAQxM,CAAC,CAACwM,CAAf,CAAmB,CAEzB,OAAOzM,CAAC,CAACyM,CAAF,CAAMxM,CAAC,CAACwM,CAAf,CAEA,CAJM,KAIA,CAEN,OAAOzM,CAAC,CAAC2mB,EAAF,CAAO1mB,CAAC,CAAC0mB,EAAhB,CAEA,CAED,CAED,SAASj6B,wBAAT,CAAmCsT,CAAnC,CAAsCC,CAAtC,CAA0C,CAEzC,GAAKD,CAAC,CAACwtD,UAAF,GAAiBvtD,CAAC,CAACutD,UAAxB,CAAqC,CAEpC,OAAOxtD,CAAC,CAACwtD,UAAF,CAAevtD,CAAC,CAACutD,UAAxB,CAEA,CAJD,QAIYxtD,CAAC,CAAC+kB,WAAF,GAAkB9kB,CAAC,CAAC8kB,WAAzB,CAAuC,CAE7C,OAAO/kB,CAAC,CAAC+kB,WAAF,CAAgB9kB,CAAC,CAAC8kB,WAAzB,CAEA,CAJM,QAIK/kB,CAAC,CAACyM,CAAF,GAAQxM,CAAC,CAACwM,CAAf,CAAmB,CAEzB,OAAOxM,CAAC,CAACwM,CAAF,CAAMzM,CAAC,CAACyM,CAAf,CAEA,CAJM,KAIA,CAEN,OAAOzM,CAAC,CAAC2mB,EAAF,CAAO1mB,CAAC,CAAC0mB,EAAhB,CAEA,CAED,CAGD,SAASh6B,eAAT,CAA0BmgD,UAA1B,CAAuC,CAEtC,MAAM2gB,WAAW,CAAG,EAApB,CACA,IAAIC,gBAAgB,CAAG,CAAvB,CAEA,MAAMC,MAAM,CAAG,EAAf,CACA,MAAMC,YAAY,CAAG,EAArB,CACA,MAAM9hC,WAAW,CAAG,EAApB,CAEA,MAAM+hC,cAAc,CAAG,CAAElnC,EAAE,CAAE,CAAE,CAAR,CAAvB,CAEA,SAAS8wB,IAAT,EAAgB,CAEfiW,gBAAgB,CAAG,CAAnB,CAEAC,MAAM,CAAC3wD,MAAP,CAAgB,CAAhB,CACA4wD,YAAY,CAAC5wD,MAAb,CAAsB,CAAtB,CACA8uB,WAAW,CAAC9uB,MAAZ,CAAqB,CAArB,CAEA,CAED,SAAS8wD,iBAAT,CAA4Bz1C,MAA5B,CAAoCW,QAApC,CAA8CkQ,QAA9C,CAAwDskC,UAAxD,CAAoE/gD,CAApE,CAAuEysB,KAAvE,CAA+E,CAE9E,IAAI60B,UAAU,CAAGN,WAAW,CAAEC,gBAAF,CAA5B,CACA,MAAMzV,kBAAkB,CAAGnL,UAAU,CAACtG,GAAX,CAAgBtd,QAAhB,CAA3B,CAEA,GAAK6kC,UAAU,GAAK/xD,SAApB,CAAgC,CAE/B+xD,UAAU,CAAG,CACZpnC,EAAE,CAAEtO,MAAM,CAACsO,EADC,CAEZtO,MAAM,CAAEA,MAFI,CAGZW,QAAQ,CAAEA,QAHE,CAIZkQ,QAAQ,CAAEA,QAJE,CAKZ6oB,OAAO,CAAEkG,kBAAkB,CAAClG,OAAnB,EAA8B8b,cAL3B,CAMZL,UAAU,CAAEA,UANA,CAOZzoC,WAAW,CAAE1M,MAAM,CAAC0M,WAPR,CAQZtY,CAAC,CAAEA,CARS,CASZysB,KAAK,CAAEA,KATK,CAAb,CAYAu0B,WAAW,CAAEC,gBAAF,CAAX,CAAkCK,UAAlC,CAEA,CAhBD,KAgBO,CAENA,UAAU,CAACpnC,EAAX,CAAgBtO,MAAM,CAACsO,EAAvB,CACAonC,UAAU,CAAC11C,MAAX,CAAoBA,MAApB,CACA01C,UAAU,CAAC/0C,QAAX,CAAsBA,QAAtB,CACA+0C,UAAU,CAAC7kC,QAAX,CAAsBA,QAAtB,CACA6kC,UAAU,CAAChc,OAAX,CAAqBkG,kBAAkB,CAAClG,OAAnB,EAA8B8b,cAAnD,CACAE,UAAU,CAACP,UAAX,CAAwBA,UAAxB,CACAO,UAAU,CAAChpC,WAAX,CAAyB1M,MAAM,CAAC0M,WAAhC,CACAgpC,UAAU,CAACthD,CAAX,CAAeA,CAAf,CACAshD,UAAU,CAAC70B,KAAX,CAAmBA,KAAnB,CAEA,CAEDw0B,gBAAgB,GAEhB,OAAOK,UAAP,CAEA,CAED,SAAS5xD,IAAT,CAAekc,MAAf,CAAuBW,QAAvB,CAAiCkQ,QAAjC,CAA2CskC,UAA3C,CAAuD/gD,CAAvD,CAA0DysB,KAA1D,CAAkE,CAEjE,MAAM60B,UAAU,CAAGD,iBAAiB,CAAEz1C,MAAF,CAAUW,QAAV,CAAoBkQ,QAApB,CAA8BskC,UAA9B,CAA0C/gD,CAA1C,CAA6CysB,KAA7C,CAApC,CAEA,GAAKhQ,QAAQ,CAACmI,YAAT,CAAwB,GAA7B,CAAmC,CAElCu8B,YAAY,CAACzxD,IAAb,CAAmB4xD,UAAnB,EAEA,CAJD,QAIY7kC,QAAQ,CAAC4C,WAAT,GAAyB,IAA9B,CAAqC,CAE3CA,WAAW,CAAC3vB,IAAZ,CAAkB4xD,UAAlB,EAEA,CAJM,KAIA,CAENJ,MAAM,CAACxxD,IAAP,CAAa4xD,UAAb,EAEA,CAED,CAED,SAAS7c,OAAT,CAAkB74B,MAAlB,CAA0BW,QAA1B,CAAoCkQ,QAApC,CAA8CskC,UAA9C,CAA0D/gD,CAA1D,CAA6DysB,KAA7D,CAAqE,CAEpE,MAAM60B,UAAU,CAAGD,iBAAiB,CAAEz1C,MAAF,CAAUW,QAAV,CAAoBkQ,QAApB,CAA8BskC,UAA9B,CAA0C/gD,CAA1C,CAA6CysB,KAA7C,CAApC,CAEA,GAAKhQ,QAAQ,CAACmI,YAAT,CAAwB,GAA7B,CAAmC,CAElCu8B,YAAY,CAAC1c,OAAb,CAAsB6c,UAAtB,EAEA,CAJD,QAIY7kC,QAAQ,CAAC4C,WAAT,GAAyB,IAA9B,CAAqC,CAE3CA,WAAW,CAAColB,OAAZ,CAAqB6c,UAArB,EAEA,CAJM,KAIA,CAENJ,MAAM,CAACzc,OAAP,CAAgB6c,UAAhB,EAEA,CAED,CAED,SAASrM,IAAT,CAAesM,gBAAf,CAAiCC,qBAAjC,CAAyD,CAExD,GAAKN,MAAM,CAAC3wD,MAAP,CAAgB,CAArB,CAAyB2wD,MAAM,CAACjM,IAAP,CAAasM,gBAAgB,EAAIvhE,iBAAjC,EACzB,GAAKmhE,YAAY,CAAC5wD,MAAb,CAAsB,CAA3B,CAA+B4wD,YAAY,CAAClM,IAAb,CAAmBuM,qBAAqB,EAAIvhE,wBAA5C,EAC/B,GAAKo/B,WAAW,CAAC9uB,MAAZ,CAAqB,CAA1B,CAA8B8uB,WAAW,CAAC41B,IAAZ,CAAkBuM,qBAAqB,EAAIvhE,wBAA3C,EAE9B,CAED,SAASwhE,MAAT,EAAkB;EAIjB,IAAM,IAAIpxD,CAAC,CAAG4wD,gBAAR,CAA0Bx+C,EAAE,CAAGu+C,WAAW,CAACzwD,MAAjD,CAAyDF,CAAC,CAAGoS,EAA7D,CAAiEpS,CAAC,EAAlE,CAAwE,CAEvE,MAAMixD,UAAU,CAAGN,WAAW,CAAE3wD,CAAF,CAA9B,CAEA,GAAKixD,UAAU,CAACpnC,EAAX,GAAkB,IAAvB,CAA8B,MAE9BonC,UAAU,CAACpnC,EAAX,CAAgB,IAAhB,CACAonC,UAAU,CAAC11C,MAAX,CAAoB,IAApB,CACA01C,UAAU,CAAC/0C,QAAX,CAAsB,IAAtB,CACA+0C,UAAU,CAAC7kC,QAAX,CAAsB,IAAtB,CACA6kC,UAAU,CAAChc,OAAX,CAAqB,IAArB,CACAgc,UAAU,CAAC70B,KAAX,CAAmB,IAAnB,CAEA,CAED,CAED,OAAO,CAENy0B,MAAM,CAAEA,MAFF,CAGNC,YAAY,CAAEA,YAHR,CAIN9hC,WAAW,CAAEA,WAJP,CAMN2rB,IAAI,CAAEA,IANA,CAONt7C,IAAI,CAAEA,IAPA,CAQN+0C,OAAO,CAAEA,OARH,CASNgd,MAAM,CAAEA,MATF,CAWNxM,IAAI,CAAEA,IAXA,CAAP,CAcA,CAED,SAAS90D,gBAAT,CAA2BkgD,UAA3B,CAAwC,CAEvC,IAAIqhB,KAAK,CAAG,IAAI5oB,OAAJ,EAAZ,CAEA,SAASiB,GAAT,CAAcxF,KAAd,CAAqBotB,eAArB,CAAuC,CAEtC,IAAIC,IAAJ,CAEA,GAAKF,KAAK,CAACrY,GAAN,CAAW9U,KAAX,IAAuB,KAA5B,CAAoC,CAEnCqtB,IAAI,CAAG,IAAI1hE,eAAJ,CAAqBmgD,UAArB,CAAP,CACAqhB,KAAK,CAACrvD,GAAN,CAAWkiC,KAAX,CAAkB,CAAEqtB,IAAF,CAAlB,EAEA,CALD,KAKO,CAEN,GAAKD,eAAe,EAAID,KAAK,CAAC3nB,GAAN,CAAWxF,KAAX,EAAmBhkC,MAA3C,CAAoD,CAEnDqxD,IAAI,CAAG,IAAI1hE,eAAJ,CAAqBmgD,UAArB,CAAP,CACAqhB,KAAK,CAAC3nB,GAAN,CAAWxF,KAAX,EAAmB7kC,IAAnB,CAAyBkyD,IAAzB,EAEA,CALD,KAKO,CAENA,IAAI,CAAGF,KAAK,CAAC3nB,GAAN,CAAWxF,KAAX,EAAoBotB,eAApB,CAAP,CAEA,CAED,CAED,OAAOC,IAAP,CAEA,CAED,SAASpiD,OAAT,EAAmB,CAElBkiD,KAAK,CAAG,IAAI5oB,OAAJ,EAAR,CAEA,CAED,OAAO,CACNiB,GAAG,CAAEA,GADC,CAENv6B,OAAO,CAAEA,OAFH,CAAP,CAKA,CAED,SAASpf,aAAT,EAAyB,CAExB,MAAMqxC,MAAM,CAAG,EAAf,CAEA,OAAO,CAENsI,GAAG,CAAE,SAAW8nB,KAAX,CAAmB,CAEvB,GAAKpwB,MAAM,CAAEowB,KAAK,CAAC3nC,EAAR,CAAN,GAAuB3qB,SAA5B,CAAwC,CAEvC,OAAOkiC,MAAM,CAAEowB,KAAK,CAAC3nC,EAAR,CAAb,CAEA,CAED,IAAIkX,QAAJ,CAEA,OAASywB,KAAK,CAACzyD,IAAf,EAEC,IAAK,kBAAL,CACCgiC,QAAQ,CAAG,CACVxiB,SAAS,CAAE,IAAIlkC,OAAJ,EADD,CAEVo3C,KAAK,CAAE,IAAIpyC,KAAJ,EAFG,CAAX,CAIA,MAED,IAAK,WAAL,CACC0hD,QAAQ,CAAG,CACVlc,QAAQ,CAAE,IAAIxqC,OAAJ,EADA,CAEVkkC,SAAS,CAAE,IAAIlkC,OAAJ,EAFD,CAGVo3C,KAAK,CAAE,IAAIpyC,KAAJ,EAHG,CAIV0pC,QAAQ,CAAE,CAJA,CAKV0nB,OAAO,CAAE,CALC,CAMVC,WAAW,CAAE,CANH,CAOVC,KAAK,CAAE,CAPG,CAAX,CASA,MAED,IAAK,YAAL,CACC5P,QAAQ,CAAG,CACVlc,QAAQ,CAAE,IAAIxqC,OAAJ,EADA,CAEVo3C,KAAK,CAAE,IAAIpyC,KAAJ,EAFG,CAGV0pC,QAAQ,CAAE,CAHA,CAIV4nB,KAAK,CAAE,CAJG,CAAX,CAMA,MAED,IAAK,iBAAL,CACC5P,QAAQ,CAAG,CACVxiB,SAAS,CAAE,IAAIlkC,OAAJ,EADD,CAEVi3D,QAAQ,CAAE,IAAIjyD,KAAJ,EAFA,CAGVkyD,WAAW,CAAE,IAAIlyD,KAAJ,EAHH,CAAX,CAKA,MAED,IAAK,eAAL,CACC0hD,QAAQ,CAAG,CACVtP,KAAK,CAAE,IAAIpyC,KAAJ,EADG,CAEVwlC,QAAQ,CAAE,IAAIxqC,OAAJ,EAFA,CAGVo3E,SAAS,CAAE,IAAIp3E,OAAJ,EAHD,CAIVq3E,UAAU,CAAE,IAAIr3E,OAAJ,EAJF,CAAX,CAMA,MA7CF,CAiDA+mD,MAAM,CAAEowB,KAAK,CAAC3nC,EAAR,CAAN,CAAqBkX,QAArB,CAEA,OAAOA,QAAP,CAEA,CAjEK,CAAP,CAqEA,CAED,SAAS/wC,mBAAT,EAA+B,CAE9B,MAAMoxC,MAAM,CAAG,EAAf,CAEA,OAAO,CAENsI,GAAG,CAAE,SAAW8nB,KAAX,CAAmB,CAEvB,GAAKpwB,MAAM,CAAEowB,KAAK,CAAC3nC,EAAR,CAAN,GAAuB3qB,SAA5B,CAAwC,CAEvC,OAAOkiC,MAAM,CAAEowB,KAAK,CAAC3nC,EAAR,CAAb,CAEA,CAED,IAAIkX,QAAJ,CAEA,OAASywB,KAAK,CAACzyD,IAAf,EAEC,IAAK,kBAAL,CACCgiC,QAAQ,CAAG,CACVmP,UAAU,CAAE,CADF,CAEVC,gBAAgB,CAAE,CAFR,CAGVC,YAAY,CAAE,CAHJ,CAIVC,aAAa,CAAE,IAAI52D,OAAJ,EAJL,CAAX,CAMA,MAED,IAAK,WAAL,CACCsnD,QAAQ,CAAG,CACVmP,UAAU,CAAE,CADF,CAEVC,gBAAgB,CAAE,CAFR,CAGVC,YAAY,CAAE,CAHJ,CAIVC,aAAa,CAAE,IAAI52D,OAAJ,EAJL,CAAX,CAMA,MAED,IAAK,YAAL,CACCsnD,QAAQ,CAAG,CACVmP,UAAU,CAAE,CADF,CAEVC,gBAAgB,CAAE,CAFR,CAGVC,YAAY,CAAE,CAHJ,CAIVC,aAAa,CAAE,IAAI52D,OAAJ,EAJL,CAKVw3D,gBAAgB,CAAE,CALR,CAMVC,eAAe,CAAE,IANP,CAAX,CAQA,MAED;EA/BD,CAmCA9P,MAAM,CAAEowB,KAAK,CAAC3nC,EAAR,CAAN,CAAqBkX,QAArB,CAEA,OAAOA,QAAP,CAEA,CAnDK,CAAP,CAuDA,CAID,IAAI9wC,WAAW,CAAG,CAAlB,CAEA,SAASC,wBAAT,CAAmCyhE,MAAnC,CAA2CC,MAA3C,CAAoD,CAEnD,OAAO,CAAEA,MAAM,CAAC9pC,UAAP,CAAoB,CAApB,CAAwB,CAA1B,GAAkC6pC,MAAM,CAAC7pC,UAAP,CAAoB,CAApB,CAAwB,CAA1D,CAAP,CAEA,CAED,SAAS33B,WAAT,CAAsBmxC,UAAtB,CAAkCgH,YAAlC,CAAiD,CAEhD,MAAM9b,KAAK,CAAG,IAAIz8B,aAAJ,EAAd,CAEA,MAAM8hE,WAAW,CAAG7hE,mBAAmB,EAAvC,CAEA,MAAMgjD,KAAK,CAAG,CAEbjlC,OAAO,CAAE,CAFI,CAIb+jD,IAAI,CAAE,CACLC,iBAAiB,CAAE,CAAE,CADhB,CAELC,WAAW,CAAE,CAAE,CAFV,CAGLC,UAAU,CAAE,CAAE,CAHT,CAILC,cAAc,CAAE,CAAE,CAJb,CAKLC,UAAU,CAAE,CAAE,CALT,CAOLC,qBAAqB,CAAE,CAAE,CAPpB,CAQLC,eAAe,CAAE,CAAE,CARd,CASLC,cAAc,CAAE,CAAE,CATb,CAJO,CAgBbC,OAAO,CAAE,CAAE,CAAF,CAAK,CAAL,CAAQ,CAAR,CAhBI,CAiBbC,KAAK,CAAE,EAjBM,CAkBbzC,WAAW,CAAE,EAlBA,CAmBb0C,iBAAiB,CAAE,EAnBN,CAoBbniB,oBAAoB,CAAE,EApBT,CAqBbC,uBAAuB,CAAE,EArBZ,CAsBbyf,IAAI,CAAE,EAtBO,CAuBb0C,UAAU,CAAE,EAvBC,CAwBb7hB,aAAa,CAAE,EAxBF,CAyBbC,gBAAgB,CAAE,EAzBL,CA0Bbmf,QAAQ,CAAE,EA1BG,CA2Bb0C,YAAY,CAAE,IA3BD,CA4BbC,YAAY,CAAE,IA5BD,CA6Bb/2C,KAAK,CAAE,EA7BM,CA8Bbg3C,WAAW,CAAE,EA9BA,CA+Bb1hB,cAAc,CAAE,EA/BH,CAgCbC,iBAAiB,CAAE,EAhCN,CAiCb8e,IAAI,CAAE,EAjCO,CAAd,CAqCA,IAAM,IAAIlwD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+BgzC,KAAK,CAACwf,KAAN,CAAYnzD,IAAZ,CAAkB,IAAIhlB,OAAJ,EAAlB,EAE/B,MAAMy4E,OAAO,CAAG,IAAIz4E,OAAJ,EAAhB,CACA,MAAM4vB,OAAO,CAAG,IAAI7tB,OAAJ,EAAhB,CACA,MAAM22E,QAAQ,CAAG,IAAI32E,OAAJ,EAAjB,CAEA,SAAS44D,KAAT,CAAgB5T,MAAhB,CAAwB2rB,uBAAxB,CAAkD,CAEjD,IAAI5iD,CAAC,CAAG,CAAR,CAAWZ,CAAC,CAAG,CAAf,CAAkBpG,CAAC,CAAG,CAAtB,CAEA,IAAM,IAAInD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+BgzC,KAAK,CAACwf,KAAN,CAAaxyD,CAAb,EAAiBgC,GAAjB,CAAsB,CAAtB,CAAyB,CAAzB,CAA4B,CAA5B,EAE/B,IAAI+vD,iBAAiB,CAAG,CAAxB,CACA,IAAIC,WAAW,CAAG,CAAlB,CACA,IAAIC,UAAU,CAAG,CAAjB,CACA,IAAIC,cAAc,CAAG,CAArB,CACA,IAAIC,UAAU,CAAG,CAAjB,CAEA,IAAIC,qBAAqB,CAAG,CAA5B,CACA,IAAIC,eAAe,CAAG,CAAtB,CACA,IAAIC,cAAc,CAAG,CAArB,CAEAlxB,MAAM,CAACwjB,IAAP,CAAa10D,wBAAb,EAEA;EACA,MAAM8iE,WAAW,CAAKjG,uBAAuB,GAAK,IAA9B,CAAuC3sD,IAAI,CAACC,EAA5C,CAAiD,CAArE,CAEA,IAAM,IAAIL,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGmhC,MAAM,CAAClhC,MAA5B,CAAoCF,CAAC,CAAGC,CAAxC,CAA2CD,CAAC,EAA5C,CAAkD,CAEjD,MAAMwxD,KAAK,CAAGpwB,MAAM,CAAEphC,CAAF,CAApB,CAEA,MAAMyxB,KAAK,CAAG+/B,KAAK,CAAC//B,KAApB,CACA,MAAMwhC,SAAS,CAAGzB,KAAK,CAACyB,SAAxB,CACA,MAAMlqC,QAAQ,CAAGyoC,KAAK,CAACzoC,QAAvB,CAEA,MAAMonC,SAAS,CAAKqB,KAAK,CAAC/e,MAAN,EAAgB+e,KAAK,CAAC/e,MAAN,CAAa7f,GAA/B,CAAuC4+B,KAAK,CAAC/e,MAAN,CAAa7f,GAAb,CAAiBhhB,OAAxD,CAAkE,IAApF,CAEA,GAAK4/C,KAAK,CAAC0B,cAAX,CAA4B,CAE3B/oD,CAAC,EAAIsnB,KAAK,CAACtnB,CAAN,CAAU8oD,SAAV,CAAsBD,WAA3B,CACAzpD,CAAC,EAAIkoB,KAAK,CAACloB,CAAN,CAAU0pD,SAAV,CAAsBD,WAA3B,CACA7vD,CAAC,EAAIsuB,KAAK,CAACtuB,CAAN,CAAU8vD,SAAV,CAAsBD,WAA3B,CAEA,CAND,QAMYxB,KAAK,CAAC2B,YAAX,CAA0B,CAEhC,IAAM,IAAIx1C,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9Bq1B,KAAK,CAACwf,KAAN,CAAa70C,CAAb,EAAiBva,eAAjB,CAAkCouD,KAAK,CAAC4B,EAAN,CAASC,YAAT,CAAuB11C,CAAvB,CAAlC,CAA8Ds1C,SAA9D,EAEA,CAED,CARM,QAQKzB,KAAK,CAAC8B,kBAAX,CAAgC,CAEtC,MAAMvyB,QAAQ,CAAGvU,KAAK,CAACkd,GAAN,CAAW8nB,KAAX,CAAjB,CAEAzwB,QAAQ,CAACtP,KAAT,CAAehvB,IAAf,CAAqB+uD,KAAK,CAAC//B,KAA3B,EAAmChuB,cAAnC,CAAmD+tD,KAAK,CAACyB,SAAN,CAAkBD,WAArE,EAEA,GAAKxB,KAAK,CAAC1pC,UAAX,CAAwB,CAEvB,MAAM2qB,MAAM,CAAG+e,KAAK,CAAC/e,MAArB,CAEA,MAAM8gB,cAAc,CAAG1B,WAAW,CAACnoB,GAAZ,CAAiB8nB,KAAjB,CAAvB,CAEA+B,cAAc,CAACrjB,UAAf,CAA4BuC,MAAM,CAAC+gB,IAAnC,CACAD,cAAc,CAACpjB,gBAAf,CAAkCsC,MAAM,CAACghB,UAAzC,CACAF,cAAc,CAACnjB,YAAf,CAA8BqC,MAAM,CAAC94B,MAArC,CACA45C,cAAc,CAACljB,aAAf,CAA+BoC,MAAM,CAACihB,OAAtC,CAEA1gB,KAAK,CAACyf,iBAAN,CAAyBV,iBAAzB,EAA+CwB,cAA/C,CACAvgB,KAAK,CAAC1C,oBAAN,CAA4ByhB,iBAA5B,EAAkD5B,SAAlD,CACAnd,KAAK,CAACzC,uBAAN,CAA+BwhB,iBAA/B,EAAqDP,KAAK,CAAC/e,MAAN,CAAaznC,MAAlE,CAEAonD,qBAAqB,GAErB,CAEDpf,KAAK,CAAC+c,WAAN,CAAmBgC,iBAAnB,EAAyChxB,QAAzC,CAEAgxB,iBAAiB,GAEjB,CA7BM,QA6BKP,KAAK,CAACmC,WAAX,CAAyB,CAE/B,MAAM5yB,QAAQ,CAAGvU,KAAK,CAACkd,GAAN,CAAW8nB,KAAX,CAAjB,CAEAzwB,QAAQ,CAAClc,QAAT,CAAkB7K,qBAAlB,CAAyCw3C,KAAK,CAAC/4C,WAA/C,EAEAsoB,QAAQ,CAACtP,KAAT,CAAehvB,IAAf,CAAqBgvB,KAArB,EAA6BhuB,cAA7B,CAA6CwvD,SAAS,CAAGD,WAAzD,EACAjyB,QAAQ,CAAChY,QAAT,CAAoBA,QAApB,CAEAgY,QAAQ,CAAC0P,OAAT,CAAmBrwC,IAAI,CAACgG,GAAL,CAAUorD,KAAK,CAAC1sD,KAAhB,CAAnB,CACAi8B,QAAQ,CAAC2P,WAAT,CAAuBtwC,IAAI,CAACgG,GAAL,CAAUorD,KAAK,CAAC1sD,KAAN,EAAgB,EAAI0sD,KAAK,CAACoC,QAA1B,CAAV,CAAvB,CACA7yB,QAAQ,CAAC4P,KAAT,CAAiB6gB,KAAK,CAAC7gB,KAAvB,CAEA,GAAK6gB,KAAK,CAAC1pC,UAAX,CAAwB,CAEvB,MAAM2qB,MAAM,CAAG+e,KAAK,CAAC/e,MAArB,CAEA,MAAM8gB,cAAc,CAAG1B,WAAW,CAACnoB,GAAZ,CAAiB8nB,KAAjB,CAAvB,CAEA+B,cAAc,CAACrjB,UAAf,CAA4BuC,MAAM,CAAC+gB,IAAnC,CACAD,cAAc,CAACpjB,gBAAf,CAAkCsC,MAAM,CAACghB,UAAzC,CACAF,cAAc,CAACnjB,YAAf,CAA8BqC,MAAM,CAAC94B,MAArC,CACA45C,cAAc,CAACljB,aAAf,CAA+BoC,MAAM,CAACihB,OAAtC,CAEA1gB,KAAK,CAAC0f,UAAN,CAAkBT,UAAlB,EAAiCsB,cAAjC,CACAvgB,KAAK,CAACnC,aAAN,CAAqBohB,UAArB,EAAoC9B,SAApC,CACAnd,KAAK,CAAClC,gBAAN,CAAwBmhB,UAAxB,EAAuCT,KAAK,CAAC/e,MAAN,CAAaznC,MAApD,CAEAsnD,cAAc,GAEd,CAEDtf,KAAK,CAACgd,IAAN,CAAYiC,UAAZ,EAA2BlxB,QAA3B,CAEAkxB,UAAU,GAEV,CApCM,QAoCKT,KAAK,CAACqC,eAAX,CAA6B,CAEnC,MAAM9yB,QAAQ,CAAGvU,KAAK,CAACkd,GAAN,CAAW8nB,KAAX,CAAjB,CAEA;EACA;EAEA;EACAzwB,QAAQ,CAACtP,KAAT,CAAehvB,IAAf,CAAqBgvB,KAArB,EAA6BhuB,cAA7B,CAA6CwvD,SAA7C,EAEAlyB,QAAQ,CAAC0wB,SAAT,CAAmBzvD,GAAnB,CAAwBwvD,KAAK,CAAC1vD,KAAN,CAAc,GAAtC,CAA2C,GAA3C,CAAgD,GAAhD,EACAi/B,QAAQ,CAAC2wB,UAAT,CAAoB1vD,GAApB,CAAyB,GAAzB,CAA8BwvD,KAAK,CAACzvD,MAAN,CAAe,GAA7C,CAAkD,GAAlD,EAEAixC,KAAK,CAACid,QAAN,CAAgBiC,cAAhB,EAAmCnxB,QAAnC,CAEAmxB,cAAc,GAEd,CAjBM,QAiBKV,KAAK,CAACsC,YAAX,CAA0B,CAEhC,MAAM/yB,QAAQ,CAAGvU,KAAK,CAACkd,GAAN,CAAW8nB,KAAX,CAAjB,CAEAzwB,QAAQ,CAACtP,KAAT,CAAehvB,IAAf,CAAqB+uD,KAAK,CAAC//B,KAA3B,EAAmChuB,cAAnC,CAAmD+tD,KAAK,CAACyB,SAAN,CAAkBD,WAArE,EACAjyB,QAAQ,CAAChY,QAAT,CAAoByoC,KAAK,CAACzoC,QAA1B,CACAgY,QAAQ,CAAC4P,KAAT,CAAiB6gB,KAAK,CAAC7gB,KAAvB,CAEA,GAAK6gB,KAAK,CAAC1pC,UAAX,CAAwB,CAEvB,MAAM2qB,MAAM,CAAG+e,KAAK,CAAC/e,MAArB,CAEA,MAAM8gB,cAAc,CAAG1B,WAAW,CAACnoB,GAAZ,CAAiB8nB,KAAjB,CAAvB,CAEA+B,cAAc,CAACrjB,UAAf,CAA4BuC,MAAM,CAAC+gB,IAAnC,CACAD,cAAc,CAACpjB,gBAAf,CAAkCsC,MAAM,CAACghB,UAAzC,CACAF,cAAc,CAACnjB,YAAf,CAA8BqC,MAAM,CAAC94B,MAArC,CACA45C,cAAc,CAACljB,aAAf,CAA+BoC,MAAM,CAACihB,OAAtC,CACAH,cAAc,CAACtiB,gBAAf,CAAkCwB,MAAM,CAACr6B,MAAP,CAAcyN,IAAhD,CACA0tC,cAAc,CAACriB,eAAf,CAAiCuB,MAAM,CAACr6B,MAAP,CAAc0N,GAA/C,CAEAktB,KAAK,CAAC6f,WAAN,CAAmBb,WAAnB,EAAmCuB,cAAnC,CACAvgB,KAAK,CAAC7B,cAAN,CAAsB6gB,WAAtB,EAAsC7B,SAAtC,CACAnd,KAAK,CAAC5B,iBAAN,CAAyB4gB,WAAzB,EAAyCR,KAAK,CAAC/e,MAAN,CAAaznC,MAAtD,CAEAqnD,eAAe,GAEf,CAEDrf,KAAK,CAACn3B,KAAN,CAAam2C,WAAb,EAA6BjxB,QAA7B,CAEAixB,WAAW,GAEX,CAjCM,QAiCKR,KAAK,CAACuC,iBAAX,CAA+B,CAErC,MAAMhzB,QAAQ,CAAGvU,KAAK,CAACkd,GAAN,CAAW8nB,KAAX,CAAjB,CAEAzwB,QAAQ,CAACuQ,QAAT,CAAkB7uC,IAAlB,CAAwB+uD,KAAK,CAAC//B,KAA9B,EAAsChuB,cAAtC,CAAsDwvD,SAAS,CAAGD,WAAlE,EACAjyB,QAAQ,CAACwQ,WAAT,CAAqB9uC,IAArB,CAA2B+uD,KAAK,CAACjgB,WAAjC,EAA+C9tC,cAA/C,CAA+DwvD,SAAS,CAAGD,WAA3E,EAEAhgB,KAAK,CAACkd,IAAN,CAAYiC,UAAZ,EAA2BpxB,QAA3B,CAEAoxB,UAAU,GAEV,CAED,CAED,GAAKD,cAAc,CAAG,CAAtB,CAA0B,CAEzB,GAAK5pB,YAAY,CAACC,QAAlB,CAA6B;EAI5ByK,KAAK,CAAC2f,YAAN,CAAqB1pE,WAAW,CAAC+qE,WAAjC,CACAhhB,KAAK,CAAC4f,YAAN,CAAqB3pE,WAAW,CAACgrE,WAAjC,CAEA,CAPD,KAOO;EAIN,GAAK3yB,UAAU,CAAC0X,GAAX,CAAgB,0BAAhB,IAAiD,IAAtD,CAA6D,CAE5DhG,KAAK,CAAC2f,YAAN,CAAqB1pE,WAAW,CAAC+qE,WAAjC,CACAhhB,KAAK,CAAC4f,YAAN,CAAqB3pE,WAAW,CAACgrE,WAAjC,CAEA,CALD,QAKY3yB,UAAU,CAAC0X,GAAX,CAAgB,+BAAhB,IAAsD,IAA3D,CAAkE,CAExEhG,KAAK,CAAC2f,YAAN,CAAqB1pE,WAAW,CAACirE,UAAjC,CACAlhB,KAAK,CAAC4f,YAAN,CAAqB3pE,WAAW,CAACkrE,UAAjC,CAEA,CALM,KAKA,CAENtxD,OAAO,CAAC8D,KAAR,CAAe,6EAAf,EAEA,CAED,CAED,CAEDqsC,KAAK,CAACuf,OAAN,CAAe,CAAf,EAAqBpoD,CAArB,CACA6oC,KAAK,CAACuf,OAAN,CAAe,CAAf,EAAqBhpD,CAArB,CACAypC,KAAK,CAACuf,OAAN,CAAe,CAAf,EAAqBpvD,CAArB,CAEA,MAAM2uD,IAAI,CAAG9e,KAAK,CAAC8e,IAAnB,CAEA,GAAKA,IAAI,CAACC,iBAAL,GAA2BA,iBAA3B,EACJD,IAAI,CAACE,WAAL,GAAqBA,WADjB,EAEJF,IAAI,CAACG,UAAL,GAAoBA,UAFhB,EAGJH,IAAI,CAACI,cAAL,GAAwBA,cAHpB,EAIJJ,IAAI,CAACK,UAAL,GAAoBA,UAJhB,EAKJL,IAAI,CAACM,qBAAL,GAA+BA,qBAL3B,EAMJN,IAAI,CAACO,eAAL,GAAyBA,eANrB,EAOJP,IAAI,CAACQ,cAAL,GAAwBA,cAPzB,CAO0C,CAEzCtf,KAAK,CAAC+c,WAAN,CAAkB7vD,MAAlB,CAA2B6xD,iBAA3B,CACA/e,KAAK,CAACgd,IAAN,CAAW9vD,MAAX,CAAoB+xD,UAApB,CACAjf,KAAK,CAACid,QAAN,CAAe/vD,MAAf,CAAwBgyD,cAAxB,CACAlf,KAAK,CAACn3B,KAAN,CAAY3b,MAAZ,CAAqB8xD,WAArB,CACAhf,KAAK,CAACkd,IAAN,CAAWhwD,MAAX,CAAoBiyD,UAApB,CAEAnf,KAAK,CAACyf,iBAAN,CAAwBvyD,MAAxB,CAAiCkyD,qBAAjC,CACApf,KAAK,CAAC1C,oBAAN,CAA2BpwC,MAA3B,CAAoCkyD,qBAApC,CACApf,KAAK,CAAC6f,WAAN,CAAkB3yD,MAAlB,CAA2BmyD,eAA3B,CACArf,KAAK,CAAC7B,cAAN,CAAqBjxC,MAArB,CAA8BmyD,eAA9B,CACArf,KAAK,CAAC0f,UAAN,CAAiBxyD,MAAjB,CAA0BoyD,cAA1B,CACAtf,KAAK,CAACnC,aAAN,CAAoB3wC,MAApB,CAA6BoyD,cAA7B,CACAtf,KAAK,CAACzC,uBAAN,CAA8BrwC,MAA9B,CAAuCkyD,qBAAvC,CACApf,KAAK,CAAC5B,iBAAN,CAAwBlxC,MAAxB,CAAiCmyD,eAAjC,CACArf,KAAK,CAAClC,gBAAN,CAAuB5wC,MAAvB,CAAgCoyD,cAAhC,CAEAR,IAAI,CAACC,iBAAL,CAAyBA,iBAAzB,CACAD,IAAI,CAACE,WAAL,CAAmBA,WAAnB,CACAF,IAAI,CAACG,UAAL,CAAkBA,UAAlB,CACAH,IAAI,CAACI,cAAL,CAAsBA,cAAtB,CACAJ,IAAI,CAACK,UAAL,CAAkBA,UAAlB,CAEAL,IAAI,CAACM,qBAAL,CAA6BA,qBAA7B,CACAN,IAAI,CAACO,eAAL,CAAuBA,eAAvB,CACAP,IAAI,CAACQ,cAAL,CAAsBA,cAAtB,CAEAtf,KAAK,CAACjlC,OAAN,CAAgB9d,WAAW,EAA3B,CAEA,CAED,CAED,SAASmkE,SAAT,CAAoBhzB,MAApB,CAA4BhpB,MAA5B,CAAqC,CAEpC,IAAI25C,iBAAiB,CAAG,CAAxB,CACA,IAAIC,WAAW,CAAG,CAAlB,CACA,IAAIC,UAAU,CAAG,CAAjB,CACA,IAAIC,cAAc,CAAG,CAArB,CACA,IAAIC,UAAU,CAAG,CAAjB,CAEA,MAAMxW,UAAU,CAAGvjC,MAAM,CAACC,kBAA1B,CAEA,IAAM,IAAIrY,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGmhC,MAAM,CAAClhC,MAA5B,CAAoCF,CAAC,CAAGC,CAAxC,CAA2CD,CAAC,EAA5C,CAAkD,CAEjD,MAAMwxD,KAAK,CAAGpwB,MAAM,CAAEphC,CAAF,CAApB,CAEA,GAAKwxD,KAAK,CAAC8B,kBAAX,CAAgC,CAE/B,MAAMvyB,QAAQ,CAAGiS,KAAK,CAAC+c,WAAN,CAAmBgC,iBAAnB,CAAjB,CAEAhxB,QAAQ,CAACxiB,SAAT,CAAmBvE,qBAAnB,CAA0Cw3C,KAAK,CAAC/4C,WAAhD,EACAq6C,OAAO,CAAC94C,qBAAR,CAA+Bw3C,KAAK,CAAC3xD,MAAN,CAAa4Y,WAA5C,EACAsoB,QAAQ,CAACxiB,SAAT,CAAmBlb,GAAnB,CAAwByvD,OAAxB,EACA/xB,QAAQ,CAACxiB,SAAT,CAAmB7F,kBAAnB,CAAuCijC,UAAvC,EAEAoW,iBAAiB,GAEjB,CAXD,QAWYP,KAAK,CAACmC,WAAX,CAAyB,CAE/B,MAAM5yB,QAAQ,CAAGiS,KAAK,CAACgd,IAAN,CAAYiC,UAAZ,CAAjB,CAEAlxB,QAAQ,CAAClc,QAAT,CAAkB7K,qBAAlB,CAAyCw3C,KAAK,CAAC/4C,WAA/C,EACAsoB,QAAQ,CAAClc,QAAT,CAAkB/U,YAAlB,CAAgC6rC,UAAhC,EAEA5a,QAAQ,CAACxiB,SAAT,CAAmBvE,qBAAnB,CAA0Cw3C,KAAK,CAAC/4C,WAAhD,EACAq6C,OAAO,CAAC94C,qBAAR,CAA+Bw3C,KAAK,CAAC3xD,MAAN,CAAa4Y,WAA5C,EACAsoB,QAAQ,CAACxiB,SAAT,CAAmBlb,GAAnB,CAAwByvD,OAAxB,EACA/xB,QAAQ,CAACxiB,SAAT,CAAmB7F,kBAAnB,CAAuCijC,UAAvC,EAEAsW,UAAU,GAEV,CAdM,QAcKT,KAAK,CAACqC,eAAX,CAA6B,CAEnC,MAAM9yB,QAAQ,CAAGiS,KAAK,CAACid,QAAN,CAAgBiC,cAAhB,CAAjB,CAEAnxB,QAAQ,CAAClc,QAAT,CAAkB7K,qBAAlB,CAAyCw3C,KAAK,CAAC/4C,WAA/C,EACAsoB,QAAQ,CAAClc,QAAT,CAAkB/U,YAAlB,CAAgC6rC,UAAhC,EAEA;EACAoX,QAAQ,CAACzrD,QAAT,GACA2C,OAAO,CAACxH,IAAR,CAAc+uD,KAAK,CAAC/4C,WAApB,EACAxO,OAAO,CAAClC,WAAR,CAAqB4zC,UAArB,EACAoX,QAAQ,CAAClxC,eAAT,CAA0B5X,OAA1B,EAEA82B,QAAQ,CAAC0wB,SAAT,CAAmBzvD,GAAnB,CAAwBwvD,KAAK,CAAC1vD,KAAN,CAAc,GAAtC,CAA2C,GAA3C,CAAgD,GAAhD,EACAi/B,QAAQ,CAAC2wB,UAAT,CAAoB1vD,GAApB,CAAyB,GAAzB,CAA8BwvD,KAAK,CAACzvD,MAAN,CAAe,GAA7C,CAAkD,GAAlD,EAEAg/B,QAAQ,CAAC0wB,SAAT,CAAmB3hD,YAAnB,CAAiCijD,QAAjC,EACAhyB,QAAQ,CAAC2wB,UAAT,CAAoB5hD,YAApB,CAAkCijD,QAAlC,EAEAb,cAAc,GAEd,CArBM,QAqBKV,KAAK,CAACsC,YAAX,CAA0B,CAEhC,MAAM/yB,QAAQ,CAAGiS,KAAK,CAACn3B,KAAN,CAAam2C,WAAb,CAAjB,CAEAjxB,QAAQ,CAAClc,QAAT,CAAkB7K,qBAAlB,CAAyCw3C,KAAK,CAAC/4C,WAA/C,EACAsoB,QAAQ,CAAClc,QAAT,CAAkB/U,YAAlB,CAAgC6rC,UAAhC,EAEAqW,WAAW,GAEX,CATM,QASKR,KAAK,CAACuC,iBAAX,CAA+B,CAErC,MAAMhzB,QAAQ,CAAGiS,KAAK,CAACkd,IAAN,CAAYiC,UAAZ,CAAjB,CAEApxB,QAAQ,CAACxiB,SAAT,CAAmBvE,qBAAnB,CAA0Cw3C,KAAK,CAAC/4C,WAAhD,EACAsoB,QAAQ,CAACxiB,SAAT,CAAmB7F,kBAAnB,CAAuCijC,UAAvC,EACA5a,QAAQ,CAACxiB,SAAT,CAAmB1Z,SAAnB,GAEAstD,UAAU,GAEV,CAED,CAED,CAED,OAAO,CACNnd,KAAK,CAAEA,KADD,CAENof,SAAS,CAAEA,SAFL,CAGNphB,KAAK,CAAEA,KAHD,CAAP,CAMA,CAED,SAAS5iD,gBAAT,CAA2BkxC,UAA3B,CAAuCgH,YAAvC,CAAsD,CAErD,MAAMlH,MAAM,CAAG,IAAIjxC,WAAJ,CAAiBmxC,UAAjB,CAA6BgH,YAA7B,CAAf,CAEA,MAAM+rB,WAAW,CAAG,EAApB,CACA,MAAMC,YAAY,CAAG,EAArB,CAEA,SAAS3Z,IAAT,EAAgB,CAEf0Z,WAAW,CAACn0D,MAAZ,CAAqB,CAArB,CACAo0D,YAAY,CAACp0D,MAAb,CAAsB,CAAtB,CAEA,CAED,SAASq0D,SAAT,CAAoB/C,KAApB,CAA4B,CAE3B6C,WAAW,CAACh1D,IAAZ,CAAkBmyD,KAAlB,EAEA,CAED,SAASgD,UAAT,CAAqBC,WAArB,CAAmC,CAElCH,YAAY,CAACj1D,IAAb,CAAmBo1D,WAAnB,EAEA,CAED,SAASC,WAAT,CAAsB3H,uBAAtB,CAAgD,CAE/C3rB,MAAM,CAAC4T,KAAP,CAAcqf,WAAd,CAA2BtH,uBAA3B,EAEA,CAED,SAAS4H,eAAT,CAA0Bv8C,MAA1B,CAAmC,CAElCgpB,MAAM,CAACgzB,SAAP,CAAkBC,WAAlB,CAA+Bj8C,MAA/B,EAEA,CAED,MAAM46B,KAAK,CAAG,CACbqhB,WAAW,CAAEA,WADA,CAEbC,YAAY,CAAEA,YAFD,CAIblzB,MAAM,CAAEA,MAJK,CAAd,CAOA,OAAO,CACNuZ,IAAI,CAAEA,IADA,CAEN3H,KAAK,CAAEA,KAFD,CAGN0hB,WAAW,CAAEA,WAHP,CAINC,eAAe,CAAEA,eAJX,CAMNJ,SAAS,CAAEA,SANL,CAONC,UAAU,CAAEA,UAPN,CAAP,CAUA,CAED,SAASnkE,iBAAT,CAA4BixC,UAA5B,CAAwCgH,YAAxC,CAAuD,CAEtD,IAAIssB,YAAY,CAAG,IAAInsB,OAAJ,EAAnB,CAEA,SAASiB,GAAT,CAAcxF,KAAd,CAAqBotB,eAAe,CAAG,CAAvC,CAA2C,CAE1C,IAAIuD,WAAJ,CAEA,GAAKD,YAAY,CAAC5b,GAAb,CAAkB9U,KAAlB,IAA8B,KAAnC,CAA2C,CAE1C2wB,WAAW,CAAG,IAAIzkE,gBAAJ,CAAsBkxC,UAAtB,CAAkCgH,YAAlC,CAAd,CACAssB,YAAY,CAAC5yD,GAAb,CAAkBkiC,KAAlB,CAAyB,CAAE2wB,WAAF,CAAzB,EAEA,CALD,KAKO,CAEN,GAAKvD,eAAe,EAAIsD,YAAY,CAAClrB,GAAb,CAAkBxF,KAAlB,EAA0BhkC,MAAlD,CAA2D,CAE1D20D,WAAW,CAAG,IAAIzkE,gBAAJ,CAAsBkxC,UAAtB,CAAkCgH,YAAlC,CAAd,CACAssB,YAAY,CAAClrB,GAAb,CAAkBxF,KAAlB,EAA0B7kC,IAA1B,CAAgCw1D,WAAhC,EAEA,CALD,KAKO,CAENA,WAAW,CAAGD,YAAY,CAAClrB,GAAb,CAAkBxF,KAAlB,EAA2BotB,eAA3B,CAAd,CAEA,CAED,CAED,OAAOuD,WAAP,CAEA,CAED,SAAS1lD,OAAT,EAAmB,CAElBylD,YAAY,CAAG,IAAInsB,OAAJ,EAAf,CAEA,CAED,OAAO,CACNiB,GAAG,CAAEA,GADC,CAENv6B,OAAO,CAAEA,OAFH,CAAP,CAKA,CAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAEA,MAAM7e,iBAAN,SAAgCxR,QAAS,CAExC+iB,WAAW,CAAEiqB,UAAF,CAAe,CAEzB,QAEA,KAAK/sB,IAAL,CAAY,mBAAZ,CAEA,KAAKwuD,YAAL,CAAoBj1E,iBAApB,CAEA,KAAKs6C,GAAL,CAAW,IAAX,CAEA,KAAKE,QAAL,CAAgB,IAAhB,CAEA,KAAKU,eAAL,CAAuB,IAAvB,CACA,KAAKC,iBAAL,CAAyB,CAAzB,CACA,KAAKC,gBAAL,CAAwB,CAAxB,CAEA,KAAKuB,SAAL,CAAiB,KAAjB,CACA,KAAKC,kBAAL,CAA0B,CAA1B,CAEA,KAAKvG,GAAL,CAAW,KAAX,CAEA,KAAKyC,SAAL,CAAgBtF,UAAhB,EAEA,CAEDrpB,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKo/C,YAAL,CAAoBp/C,MAAM,CAACo/C,YAA3B,CAEA,KAAK36B,GAAL,CAAWzkB,MAAM,CAACykB,GAAlB,CAEA,KAAKE,QAAL,CAAgB3kB,MAAM,CAAC2kB,QAAvB,CAEA,KAAKU,eAAL,CAAuBrlB,MAAM,CAACqlB,eAA9B,CACA,KAAKC,iBAAL,CAAyBtlB,MAAM,CAACslB,iBAAhC,CACA,KAAKC,gBAAL,CAAwBvlB,MAAM,CAACulB,gBAA/B,CAEA,KAAKuB,SAAL,CAAiB9mB,MAAM,CAAC8mB,SAAxB,CACA,KAAKC,kBAAL,CAA0B/mB,MAAM,CAAC+mB,kBAAjC,CAEA,WAAA,CAEA,CA9CuC,CAkDzC5kC,iBAAiB,CAACkW,SAAlB,CAA4BsuD,mBAA5B,CAAkD,IAAlD,CAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAEA,MAAMvkE,oBAAN,SAAmCzR,QAAS,CAE3C+iB,WAAW,CAAEiqB,UAAF,CAAe,CAEzB,QAEA,KAAK/sB,IAAL,CAAY,sBAAZ,CAEA,KAAKuzC,iBAAL,CAAyB,IAAIj4D,OAAJ,EAAzB,CACA,KAAKk4D,YAAL,CAAoB,CAApB,CACA,KAAKC,WAAL,CAAmB,IAAnB,CAEA,KAAK5f,GAAL,CAAW,IAAX,CAEA,KAAKE,QAAL,CAAgB,IAAhB,CAEA,KAAKU,eAAL,CAAuB,IAAvB,CACA,KAAKC,iBAAL,CAAyB,CAAzB,CACA,KAAKC,gBAAL,CAAwB,CAAxB,CAEA,KAAK/E,GAAL,CAAW,KAAX,CAEA,KAAKyC,SAAL,CAAgBtF,UAAhB,EAEA,CAEDrpB,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKmkC,iBAAL,CAAuB7vC,IAAvB,CAA6B0L,MAAM,CAACmkC,iBAApC,EACA,KAAKC,YAAL,CAAoBpkC,MAAM,CAACokC,YAA3B,CACA,KAAKC,WAAL,CAAmBrkC,MAAM,CAACqkC,WAA1B,CAEA,KAAK5f,GAAL,CAAWzkB,MAAM,CAACykB,GAAlB,CAEA,KAAKE,QAAL,CAAgB3kB,MAAM,CAAC2kB,QAAvB,CAEA,KAAKU,eAAL,CAAuBrlB,MAAM,CAACqlB,eAA9B,CACA,KAAKC,iBAAL,CAAyBtlB,MAAM,CAACslB,iBAAhC,CACA,KAAKC,gBAAL,CAAwBvlB,MAAM,CAACulB,gBAA/B,CAEA,WAAA,CAEA,CA5C0C,CAgD5CnjC,oBAAoB,CAACiW,SAArB,CAA+BuuD,sBAA/B,CAAwD,IAAxD,CAEA,MAAMC,MAAM,CAAG,0DAAf,CAEA,MAAMC,QAAQ,CAAG,imCAAjB,CAEA,SAASzkE,cAAT,CAAyB8sD,SAAzB,CAAoC4X,QAApC,CAA8CC,aAA9C,CAA8D,CAE7D,IAAIC,QAAQ,CAAG,IAAIzyE,OAAJ,EAAf,CAEA,MAAM0yE,cAAc,CAAG,IAAI57E,OAAJ,EAAvB,CACC67E,aAAa,CAAG,IAAI77E,OAAJ,EADjB,CAGC87E,SAAS,CAAG,IAAIv7E,OAAJ,EAHb,CAKCw7E,cAAc,CAAG,IAAIllE,iBAAJ,CAAuB,CAAEi9D,YAAY,CAAEh1E,gBAAhB,CAAvB,CALlB,CAMCk9E,iBAAiB,CAAG,IAAIllE,oBAAJ,EANrB,CAQCmlE,cAAc,CAAG,EARlB,CAUCC,eAAe,CAAGR,aAAa,CAACzb,cAVjC,CAYA,MAAMrpB,UAAU,CAAG,CAAE,EAAG9gD,QAAL,CAAe,EAAGD,SAAlB,CAA6B,EAAGE,UAAhC,CAAnB,CAEA,MAAMomF,sBAAsB,CAAG,IAAI3zE,cAAJ,CAAoB,CAClDg/C,OAAO,CAAE,CACR40B,WAAW,CAAE,CADL,CADyC,CAIlD90B,QAAQ,CAAE,CACT+0B,WAAW,CAAE,CAAE70D,KAAK,CAAE,IAAT,CADJ,CAET80D,UAAU,CAAE,CAAE90D,KAAK,CAAE,IAAIxnB,OAAJ,EAAT,CAFH,CAGTkgC,MAAM,CAAE,CAAE1Y,KAAK,CAAE,GAAT,CAHC,CAJwC,CAUlDigC,YAAY,CAAE8zB,MAVoC,CAWlD7zB,cAAc,CAAE8zB,QAXkC,CAApB,CAA/B,CAeA,MAAMe,wBAAwB,CAAGJ,sBAAsB,CAACpzD,KAAvB,EAAjC,CACAwzD,wBAAwB,CAAC/0B,OAAzB,CAAiCg1B,eAAjC,CAAmD,CAAnD,CAEA,MAAMC,aAAa,CAAG,IAAI51E,cAAJ,EAAtB,CACA41E,aAAa,CAAC/7B,YAAd,CACC,UADD,CAEC,IAAI16C,eAAJ,CACC,IAAI+5C,YAAJ,CAAkB,CAAE,CAAE,CAAJ,CAAO,CAAE,CAAT,CAAY,GAAZ,CAAiB,CAAjB,CAAoB,CAAE,CAAtB,CAAyB,GAAzB,CAA8B,CAAE,CAAhC,CAAmC,CAAnC,CAAsC,GAAtC,CAAlB,CADD,CAEC,CAFD,CAFD,EAQA,MAAM28B,cAAc,CAAG,IAAI30E,IAAJ,CAAU00E,aAAV,CAAyBN,sBAAzB,CAAvB,CAEA,MAAMj2B,KAAK,CAAG,IAAd,CAEA,KAAKwD,OAAL,CAAe,KAAf,CAEA,KAAKizB,UAAL,CAAkB,IAAlB,CACA,KAAK9mD,WAAL,CAAmB,KAAnB,CAEA,KAAKvQ,IAAL,CAAY5vB,YAAZ,CAEA,KAAKq1D,MAAL,CAAc,SAAWpD,MAAX,CAAmB8C,KAAnB,CAA0B9rB,MAA1B,CAAmC,CAEhD,GAAKunB,KAAK,CAACwD,OAAN,GAAkB,KAAvB,CAA+B,OAC/B,GAAKxD,KAAK,CAACy2B,UAAN,GAAqB,KAArB,EAA8Bz2B,KAAK,CAACrwB,WAAN,GAAsB,KAAzD,CAAiE,OAEjE,GAAK8xB,MAAM,CAAClhC,MAAP,GAAkB,CAAvB,CAA2B,OAE3B,MAAMmkC,mBAAmB,CAAGiZ,SAAS,CAAChZ,eAAV,EAA5B,CACA,MAAM+xB,cAAc,CAAG/Y,SAAS,CAACgZ,iBAAV,EAAvB,CACA,MAAMC,iBAAiB,CAAGjZ,SAAS,CAACkZ,oBAAV,EAA1B,CAEA,MAAMC,MAAM,CAAGnZ,SAAS,CAACtK,KAAzB,CAEA;EACAyjB,MAAM,CAACC,WAAP,CAAoBhnF,UAApB,EACA+mF,MAAM,CAACjuB,OAAP,CAAe/W,KAAf,CAAqBqiB,QAArB,CAA+B,CAA/B,CAAkC,CAAlC,CAAqC,CAArC,CAAwC,CAAxC,EACA2iB,MAAM,CAACjuB,OAAP,CAAeh3B,KAAf,CAAqBmlD,OAArB,CAA8B,IAA9B,EACAF,MAAM,CAACG,cAAP,CAAuB,KAAvB,EAEA;EAEA,IAAM,IAAI52D,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAGgvB,MAAM,CAAClhC,MAA7B,CAAqCF,CAAC,CAAGoS,EAAzC,CAA6CpS,CAAC,EAA9C,CAAoD,CAEnD,MAAMwxD,KAAK,CAAGpwB,MAAM,CAAEphC,CAAF,CAApB,CACA,MAAMyyC,MAAM,CAAG+e,KAAK,CAAC/e,MAArB,CAEA,GAAKA,MAAM,GAAKvzC,SAAhB,CAA4B,CAE3B2D,OAAO,CAACC,IAAR,CAAc,uBAAd,CAAuC0uD,KAAvC,CAA8C,gBAA9C,EACA,SAEA,CAED,GAAK/e,MAAM,CAAC2jB,UAAP,GAAsB,KAAtB,EAA+B3jB,MAAM,CAACnjC,WAAP,GAAuB,KAA3D,CAAmE,SAEnE+lD,cAAc,CAAC5yD,IAAf,CAAqBgwC,MAAM,CAACihB,OAA5B,EAEA,MAAMmD,kBAAkB,CAAGpkB,MAAM,CAACqkB,eAAP,EAA3B,CAEAzB,cAAc,CAAC7xD,QAAf,CAAyBqzD,kBAAzB,EAEAvB,aAAa,CAAC7yD,IAAd,CAAoBgwC,MAAM,CAACihB,OAA3B,EAEA,GAAK2B,cAAc,CAAC/zD,CAAf,CAAmBq0D,eAAnB,EAAsCN,cAAc,CAAC9zD,CAAf,CAAmBo0D,eAA9D,CAAgF,CAE/E,GAAKN,cAAc,CAAC/zD,CAAf,CAAmBq0D,eAAxB,CAA0C,CAEzCL,aAAa,CAACh0D,CAAd,CAAkBlB,IAAI,CAACsB,KAAL,CAAYi0D,eAAe,CAAGkB,kBAAkB,CAACv1D,CAAjD,CAAlB,CACA+zD,cAAc,CAAC/zD,CAAf,CAAmBg0D,aAAa,CAACh0D,CAAd,CAAkBu1D,kBAAkB,CAACv1D,CAAxD,CACAmxC,MAAM,CAACihB,OAAP,CAAepyD,CAAf,CAAmBg0D,aAAa,CAACh0D,CAAjC,CAEA,CAED,GAAK+zD,cAAc,CAAC9zD,CAAf,CAAmBo0D,eAAxB,CAA0C,CAEzCL,aAAa,CAAC/zD,CAAd,CAAkBnB,IAAI,CAACsB,KAAL,CAAYi0D,eAAe,CAAGkB,kBAAkB,CAACt1D,CAAjD,CAAlB,CACA8zD,cAAc,CAAC9zD,CAAf,CAAmB+zD,aAAa,CAAC/zD,CAAd,CAAkBs1D,kBAAkB,CAACt1D,CAAxD,CACAkxC,MAAM,CAACihB,OAAP,CAAenyD,CAAf,CAAmB+zD,aAAa,CAAC/zD,CAAjC,CAEA,CAED,CAED,GAAKkxC,MAAM,CAAC7f,GAAP,GAAe,IAAf,EAAuB,CAAE6f,MAAM,CAACskB,kBAAhC,EAAsD,KAAKh4D,IAAL,GAAc1vB,YAAzE,CAAwF,CAEvF,MAAM2nF,IAAI,CAAG,CAAEhqD,SAAS,CAAEl6B,YAAb,CAA2Bi6B,SAAS,CAAEj6B,YAAtC,CAAoDm6B,MAAM,CAAEl5B,UAA5D,CAAb,CAEA0+D,MAAM,CAAC7f,GAAP,CAAa,IAAI34C,iBAAJ,CAAuBo7E,cAAc,CAAC/zD,CAAtC,CAAyC+zD,cAAc,CAAC9zD,CAAxD,CAA2Dy1D,IAA3D,CAAb,CACAvkB,MAAM,CAAC7f,GAAP,CAAWhhB,OAAX,CAAmBxG,IAAnB,CAA0BomD,KAAK,CAACpmD,IAAN,CAAa,YAAvC,CAEAqnC,MAAM,CAACwkB,OAAP,CAAiB,IAAIh9E,iBAAJ,CAAuBo7E,cAAc,CAAC/zD,CAAtC,CAAyC+zD,cAAc,CAAC9zD,CAAxD,CAA2Dy1D,IAA3D,CAAjB,CAEAvkB,MAAM,CAACr6B,MAAP,CAAckqB,sBAAd,GAEA,CAED,GAAKmQ,MAAM,CAAC7f,GAAP,GAAe,IAApB,CAA2B,CAE1B,MAAMokC,IAAI,CAAG,CAAEhqD,SAAS,CAAEr6B,aAAb,CAA4Bo6B,SAAS,CAAEp6B,aAAvC,CAAsDs6B,MAAM,CAAEl5B,UAA9D,CAAb,CAEA0+D,MAAM,CAAC7f,GAAP,CAAa,IAAI34C,iBAAJ,CAAuBo7E,cAAc,CAAC/zD,CAAtC,CAAyC+zD,cAAc,CAAC9zD,CAAxD,CAA2Dy1D,IAA3D,CAAb,CACAvkB,MAAM,CAAC7f,GAAP,CAAWhhB,OAAX,CAAmBxG,IAAnB,CAA0BomD,KAAK,CAACpmD,IAAN,CAAa,YAAvC,CAEAqnC,MAAM,CAACr6B,MAAP,CAAckqB,sBAAd,GAEA,CAEDgb,SAAS,CAAC/Y,eAAV,CAA2BkO,MAAM,CAAC7f,GAAlC,EACA0qB,SAAS,CAAC5zB,KAAV,GAEA,MAAMwtC,aAAa,CAAGzkB,MAAM,CAAC0kB,gBAAP,EAAtB,CAEA,IAAM,IAAIC,EAAE,CAAG,CAAf,CAAkBA,EAAE,CAAGF,aAAvB,CAAsCE,EAAE,EAAxC,CAA8C,CAE7C,MAAMzlD,QAAQ,CAAG8gC,MAAM,CAAC4kB,WAAP,CAAoBD,EAApB,CAAjB,CAEA7B,SAAS,CAACvzD,GAAV,CACCszD,aAAa,CAACh0D,CAAd,CAAkBqQ,QAAQ,CAACrQ,CAD5B,CAECg0D,aAAa,CAAC/zD,CAAd,CAAkBoQ,QAAQ,CAACpQ,CAF5B,CAGC+zD,aAAa,CAACh0D,CAAd,CAAkBqQ,QAAQ,CAAChC,CAH5B,CAIC2lD,aAAa,CAAC/zD,CAAd,CAAkBoQ,QAAQ,CAAC/O,CAJ5B,EAOA6zD,MAAM,CAAC9kD,QAAP,CAAiB4jD,SAAjB,EAEA9iB,MAAM,CAAC6kB,cAAP,CAAuB9F,KAAvB,CAA8B4F,EAA9B,EAEAhC,QAAQ,CAAG3iB,MAAM,CAAC8kB,UAAP,EAAX,CAEAC,YAAY,CAAEtzB,KAAF,CAAS9rB,MAAT,CAAiBq6B,MAAM,CAACr6B,MAAxB,CAAgCo5C,KAAhC,CAAuC,KAAKzyD,IAA5C,CAAZ,CAEA,CAED;EAEA,GAAK,CAAE0zC,MAAM,CAACskB,kBAAT,EAA+B,KAAKh4D,IAAL,GAAc1vB,YAAlD,CAAiE,CAEhEooF,OAAO,CAAEhlB,MAAF,CAAUr6B,MAAV,CAAP,CAEA,CAEDq6B,MAAM,CAACnjC,WAAP,CAAqB,KAArB,CAEA,CAEDqwB,KAAK,CAACrwB,WAAN,CAAoB,KAApB,CAEAguC,SAAS,CAAC/Y,eAAV,CAA2BF,mBAA3B,CAAgDgyB,cAAhD,CAAgEE,iBAAhE,EAEA,CAjID,CAmIA,SAASkB,OAAT,CAAkBhlB,MAAlB,CAA0Br6B,MAA1B,CAAmC,CAElC,MAAM8D,QAAQ,CAAGg5C,QAAQ,CAAC1gD,MAAT,CAAiB2hD,cAAjB,CAAjB,CAEA,GAAKP,sBAAsB,CAAC30B,OAAvB,CAA+B40B,WAA/B,GAA+CpjB,MAAM,CAACilB,WAA3D,CAAyE,CAExE9B,sBAAsB,CAAC30B,OAAvB,CAA+B40B,WAA/B,CAA6CpjB,MAAM,CAACilB,WAApD,CACA1B,wBAAwB,CAAC/0B,OAAzB,CAAiC40B,WAAjC,CAA+CpjB,MAAM,CAACilB,WAAtD,CAEA9B,sBAAsB,CAACtmD,WAAvB,CAAqC,IAArC,CACA0mD,wBAAwB,CAAC1mD,WAAzB,CAAuC,IAAvC,CAEA,CAED;EAEAsmD,sBAAsB,CAAC70B,QAAvB,CAAgC+0B,WAAhC,CAA4C70D,KAA5C,CAAoDwxC,MAAM,CAAC7f,GAAP,CAAWhhB,OAA/D,CACAgkD,sBAAsB,CAAC70B,QAAvB,CAAgCg1B,UAAhC,CAA2C90D,KAA3C,CAAmDwxC,MAAM,CAACihB,OAA1D,CACAkC,sBAAsB,CAAC70B,QAAvB,CAAgCpnB,MAAhC,CAAuC1Y,KAAvC,CAA+CwxC,MAAM,CAAC94B,MAAtD,CACA2jC,SAAS,CAAC/Y,eAAV,CAA2BkO,MAAM,CAACwkB,OAAlC,EACA3Z,SAAS,CAAC5zB,KAAV,GACA4zB,SAAS,CAACqa,kBAAV,CAA8Bv/C,MAA9B,CAAsC,IAAtC,CAA4C8D,QAA5C,CAAsD05C,sBAAtD,CAA8EO,cAA9E,CAA8F,IAA9F,EAEA;EAEAH,wBAAwB,CAACj1B,QAAzB,CAAkC+0B,WAAlC,CAA8C70D,KAA9C,CAAsDwxC,MAAM,CAACwkB,OAAP,CAAerlD,OAArE,CACAokD,wBAAwB,CAACj1B,QAAzB,CAAkCg1B,UAAlC,CAA6C90D,KAA7C,CAAqDwxC,MAAM,CAACihB,OAA5D,CACAsC,wBAAwB,CAACj1B,QAAzB,CAAkCpnB,MAAlC,CAAyC1Y,KAAzC,CAAiDwxC,MAAM,CAAC94B,MAAxD,CACA2jC,SAAS,CAAC/Y,eAAV,CAA2BkO,MAAM,CAAC7f,GAAlC,EACA0qB,SAAS,CAAC5zB,KAAV,GACA4zB,SAAS,CAACqa,kBAAV,CAA8Bv/C,MAA9B,CAAsC,IAAtC,CAA4C8D,QAA5C,CAAsD85C,wBAAtD,CAAgFG,cAAhF,CAAgG,IAAhG,EAEA,CAED,SAASyB,gBAAT,CAA2Br8C,MAA3B,CAAmCW,QAAnC,CAA6CkQ,QAA7C,CAAuDolC,KAAvD,CAA8DvgB,gBAA9D,CAAgFC,eAAhF,CAAiGnyC,IAAjG,CAAwG,CAEvG,IAAI84D,MAAM,CAAG,IAAb,CAEA,MAAMC,cAAc,CAAKtG,KAAK,CAACsC,YAAN,GAAuB,IAAzB,CAAkCv4C,MAAM,CAACw8C,sBAAzC,CAAkEx8C,MAAM,CAACy8C,mBAAhG,CAEA,GAAKF,cAAc,GAAK54D,SAAxB,CAAoC,CAEnC24D,MAAM,CAAGC,cAAT,CAEA,CAJD,KAIO,CAEND,MAAM,CAAKrG,KAAK,CAACsC,YAAN,GAAuB,IAAzB,CAAkC2B,iBAAlC,CAAsDD,cAA/D,CAEA,CAED,GAAOlY,SAAS,CAAChD,oBAAV,EAAkCluB,QAAQ,CAACgE,WAAT,GAAyB,IAA3D,EAAmEhE,QAAQ,CAAC8D,cAAT,CAAwBhwB,MAAxB,GAAmC,CAAxG,EACFksB,QAAQ,CAACoH,eAAT,EAA4BpH,QAAQ,CAACqH,iBAAT,GAA+B,CADzD,EAEFrH,QAAQ,CAAC0G,QAAT,EAAqB1G,QAAQ,CAAC4E,SAAT,CAAqB,CAF7C,CAEmD;EAGlD;EAEA,MAAMinC,IAAI,CAAGJ,MAAM,CAAC72D,IAApB,CAA0Bk3D,IAAI,CAAG9rC,QAAQ,CAACprB,IAA1C,CAEA,IAAIm3D,mBAAmB,CAAGzC,cAAc,CAAEuC,IAAF,CAAxC,CAEA,GAAKE,mBAAmB,GAAKj5D,SAA7B,CAAyC,CAExCi5D,mBAAmB,CAAG,EAAtB,CACAzC,cAAc,CAAEuC,IAAF,CAAd,CAAyBE,mBAAzB,CAEA,CAED,IAAIC,cAAc,CAAGD,mBAAmB,CAAED,IAAF,CAAxC,CAEA,GAAKE,cAAc,GAAKl5D,SAAxB,CAAoC,CAEnCk5D,cAAc,CAAGP,MAAM,CAACr1D,KAAP,EAAjB,CACA21D,mBAAmB,CAAED,IAAF,CAAnB,CAA8BE,cAA9B,CAEA,CAEDP,MAAM,CAAGO,cAAT,CAEA,CAEDP,MAAM,CAAChwC,OAAP,CAAiBuE,QAAQ,CAACvE,OAA1B,CACAgwC,MAAM,CAAC5iC,SAAP,CAAmB7I,QAAQ,CAAC6I,SAA5B,CAEA,GAAKl2B,IAAI,GAAK1vB,YAAd,CAA6B,CAE5BwoF,MAAM,CAAChpC,IAAP,CAAgBzC,QAAQ,CAACiE,UAAT,GAAwB,IAA1B,CAAmCjE,QAAQ,CAACiE,UAA5C,CAAyDjE,QAAQ,CAACyC,IAAhF,CAEA,CAJD,KAIO,CAENgpC,MAAM,CAAChpC,IAAP,CAAgBzC,QAAQ,CAACiE,UAAT,GAAwB,IAA1B,CAAmCjE,QAAQ,CAACiE,UAA5C,CAAyDA,UAAU,CAAEjE,QAAQ,CAACyC,IAAX,CAAjF,CAEA,CAEDgpC,MAAM,CAAC/kC,QAAP,CAAkB1G,QAAQ,CAAC0G,QAA3B,CACA+kC,MAAM,CAAC7mC,SAAP,CAAmB5E,QAAQ,CAAC4E,SAA5B,CAEA6mC,MAAM,CAACznC,WAAP,CAAqBhE,QAAQ,CAACgE,WAA9B,CACAynC,MAAM,CAAC3nC,cAAP,CAAwB9D,QAAQ,CAAC8D,cAAjC,CACA2nC,MAAM,CAAC1nC,gBAAP,CAA0B/D,QAAQ,CAAC+D,gBAAnC,CAEA0nC,MAAM,CAACrkC,eAAP,CAAyBpH,QAAQ,CAACoH,eAAlC,CACAqkC,MAAM,CAACpkC,iBAAP,CAA2BrH,QAAQ,CAACqH,iBAApC,CACAokC,MAAM,CAACnkC,gBAAP,CAA0BtH,QAAQ,CAACsH,gBAAnC,CAEAmkC,MAAM,CAAC3iC,kBAAP,CAA4B9I,QAAQ,CAAC8I,kBAArC,CACA2iC,MAAM,CAAC/iC,SAAP,CAAmB1I,QAAQ,CAAC0I,SAA5B,CAEA,GAAK08B,KAAK,CAACsC,YAAN,GAAuB,IAAvB,EAA+B+D,MAAM,CAAC9C,sBAAP,GAAkC,IAAtE,CAA6E,CAE5E8C,MAAM,CAACvlB,iBAAP,CAAyBt4B,qBAAzB,CAAgDw3C,KAAK,CAAC/4C,WAAtD,EACAo/C,MAAM,CAACtlB,YAAP,CAAsBtB,gBAAtB,CACA4mB,MAAM,CAACrlB,WAAP,CAAqBtB,eAArB,CAEA,CAED,OAAO2mB,MAAP,CAEA,CAED,SAASL,YAAT,CAAuBj8C,MAAvB,CAA+BnD,MAA/B,CAAuCigD,YAAvC,CAAqD7G,KAArD,CAA4DzyD,IAA5D,CAAmE,CAElE,GAAKwc,MAAM,CAACsM,OAAP,GAAmB,KAAxB,CAAgC,OAEhC,MAAMA,OAAO,CAAGtM,MAAM,CAAC0L,MAAP,CAAcjb,IAAd,CAAoBoM,MAAM,CAAC6O,MAA3B,CAAhB,CAEA,GAAKY,OAAO,GAAMtM,MAAM,CAACoQ,MAAP,EAAiBpQ,MAAM,CAACqQ,MAAxB,EAAkCrQ,MAAM,CAACsQ,QAA/C,CAAZ,CAAwE,CAEvE,GAAK,CAAEtQ,MAAM,CAACuM,UAAP,EAAuBvM,MAAM,CAACwM,aAAP,EAAwBhpB,IAAI,GAAK1vB,YAA1D,IAAgF,CAAEksC,MAAM,CAACyM,aAAT,EAA0BotC,QAAQ,CAAC9tB,gBAAT,CAA2B/rB,MAA3B,CAA1G,CAAL,CAAuJ,CAEtJA,MAAM,CAACkM,eAAP,CAAuB3f,gBAAvB,CAAyCuwD,YAAY,CAAChgD,kBAAtD,CAA0EkD,MAAM,CAAC9C,WAAjF,EAEA,MAAMyD,QAAQ,CAAGg5C,QAAQ,CAAC1gD,MAAT,CAAiB+G,MAAjB,CAAjB,CACA,MAAM6Q,QAAQ,CAAG7Q,MAAM,CAAC6Q,QAAxB,CAEA,GAAKpd,KAAK,CAACC,OAAN,CAAemd,QAAf,CAAL,CAAiC,CAEhC,MAAMwN,MAAM,CAAG1d,QAAQ,CAAC0d,MAAxB,CAEA,IAAM,IAAI0+B,CAAC,CAAG,CAAR,CAAWC,EAAE,CAAG3+B,MAAM,CAAC15B,MAA7B,CAAqCo4D,CAAC,CAAGC,EAAzC,CAA6CD,CAAC,EAA9C,CAAoD,CAEnD,MAAMl8B,KAAK,CAAGxC,MAAM,CAAE0+B,CAAF,CAApB,CACA,MAAMt5B,aAAa,CAAG5S,QAAQ,CAAEgQ,KAAK,CAAC7B,aAAR,CAA9B,CAEA,GAAKyE,aAAa,EAAIA,aAAa,CAACnX,OAApC,CAA8C,CAE7C,MAAM2wC,aAAa,CAAGZ,gBAAgB,CAAEr8C,MAAF,CAAUW,QAAV,CAAoB8iB,aAApB,CAAmCwyB,KAAnC,CAA0C6G,YAAY,CAACxyC,IAAvD,CAA6DwyC,YAAY,CAACvyC,GAA1E,CAA+E/mB,IAA/E,CAAtC,CAEAu+C,SAAS,CAACqa,kBAAV,CAA8BU,YAA9B,CAA4C,IAA5C,CAAkDn8C,QAAlD,CAA4Ds8C,aAA5D,CAA2Ej9C,MAA3E,CAAmF6gB,KAAnF,EAEA,CAED,CAED,CAnBD,QAmBYhQ,QAAQ,CAACvE,OAAd,CAAwB,CAE9B,MAAM2wC,aAAa,CAAGZ,gBAAgB,CAAEr8C,MAAF,CAAUW,QAAV,CAAoBkQ,QAApB,CAA8BolC,KAA9B,CAAqC6G,YAAY,CAACxyC,IAAlD,CAAwDwyC,YAAY,CAACvyC,GAArE,CAA0E/mB,IAA1E,CAAtC,CAEAu+C,SAAS,CAACqa,kBAAV,CAA8BU,YAA9B,CAA4C,IAA5C,CAAkDn8C,QAAlD,CAA4Ds8C,aAA5D,CAA2Ej9C,MAA3E,CAAmF,IAAnF,EAEA,CAED,CAED,CAED,MAAMe,QAAQ,CAAGf,MAAM,CAACe,QAAxB,CAEA,IAAM,IAAItc,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGqc,QAAQ,CAACpc,MAA9B,CAAsCF,CAAC,CAAGC,CAA1C,CAA6CD,CAAC,EAA9C,CAAoD,CAEnDw3D,YAAY,CAAEl7C,QAAQ,CAAEtc,CAAF,CAAV,CAAiBoY,MAAjB,CAAyBigD,YAAzB,CAAuC7G,KAAvC,CAA8CzyD,IAA9C,CAAZ,CAEA,CAED,CAED,CAED,SAAStO,UAAT,CAAqB43C,EAArB,CAAyB/G,UAAzB,CAAqCgH,YAArC,CAAoD,CAEnD,MAAMC,QAAQ,CAAGD,YAAY,CAACC,QAA9B,CAEA,SAASkwB,WAAT,EAAuB,CAEtB,IAAIC,MAAM,CAAG,KAAb,CAEA,MAAMjnC,KAAK,CAAG,IAAIz3C,OAAJ,EAAd,CACA,IAAI2+E,gBAAgB,CAAG,IAAvB,CACA,MAAMC,iBAAiB,CAAG,IAAI5+E,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CAAsB,CAAtB,CAA1B,CAEA,OAAO,CAEN6+E,OAAO,CAAE,SAAWC,SAAX,CAAuB,CAE/B,GAAKH,gBAAgB,GAAKG,SAArB,EAAkC,CAAEJ,MAAzC,CAAkD,CAEjDrwB,EAAE,CAACywB,SAAH,CAAcA,SAAd,CAAyBA,SAAzB,CAAoCA,SAApC,CAA+CA,SAA/C,EACAH,gBAAgB,CAAGG,SAAnB,CAEA,CAED,CAXK,CAaNC,SAAS,CAAE,SAAWC,IAAX,CAAkB,CAE5BN,MAAM,CAAGM,IAAT,CAEA,CAjBK,CAmBNllB,QAAQ,CAAE,SAAW3pC,CAAX,CAAcZ,CAAd,CAAiBpG,CAAjB,CAAoBD,CAApB,CAAuB2tB,kBAAvB,CAA4C,CAErD,GAAKA,kBAAkB,GAAK,IAA5B,CAAmC,CAElC1mB,CAAC,EAAIjH,CAAL,CAAQqG,CAAC,EAAIrG,CAAL,CAAQC,CAAC,EAAID,CAAL,CAEhB,CAEDuuB,KAAK,CAACzvB,GAAN,CAAWmI,CAAX,CAAcZ,CAAd,CAAiBpG,CAAjB,CAAoBD,CAApB,EAEA,GAAK01D,iBAAiB,CAACzjE,MAAlB,CAA0Bs8B,KAA1B,IAAsC,KAA3C,CAAmD,CAElD4W,EAAE,CAAC6K,UAAH,CAAe/oC,CAAf,CAAkBZ,CAAlB,CAAqBpG,CAArB,CAAwBD,CAAxB,EACA01D,iBAAiB,CAACn2D,IAAlB,CAAwBgvB,KAAxB,EAEA,CAED,CApCK,CAsCNwmB,KAAK,CAAE,UAAY,CAElBygB,MAAM,CAAG,KAAT,CAEAC,gBAAgB,CAAG,IAAnB,CACAC,iBAAiB,CAAC52D,GAAlB,CAAuB,CAAE,CAAzB,CAA4B,CAA5B,CAA+B,CAA/B,CAAkC,CAAlC,EAAuC;EAEvC,CA7CK,CAAP,CAiDA,CAED,SAASi3D,WAAT,EAAuB,CAEtB,IAAIP,MAAM,CAAG,KAAb,CAEA,IAAIQ,gBAAgB,CAAG,IAAvB,CACA,IAAIC,gBAAgB,CAAG,IAAvB,CACA,IAAIC,iBAAiB,CAAG,IAAxB,CAEA,OAAO,CAENzC,OAAO,CAAE,SAAWnnC,SAAX,CAAuB,CAE/B,GAAKA,SAAL,CAAiB,CAEhB5I,MAAM,CAAE,IAAF,CAAN,CAEA,CAJD,KAIO,CAENG,OAAO,CAAE,IAAF,CAAP,CAEA,CAED,CAdK,CAgBN8xC,OAAO,CAAE,SAAWQ,SAAX,CAAuB,CAE/B,GAAKH,gBAAgB,GAAKG,SAArB,EAAkC,CAAEX,MAAzC,CAAkD,CAEjDrwB,EAAE,CAACgxB,SAAH,CAAcA,SAAd,EACAH,gBAAgB,CAAGG,SAAnB,CAEA,CAED,CAzBK,CA2BNC,OAAO,CAAE,SAAW/pC,SAAX,CAAuB,CAE/B,GAAK4pC,gBAAgB,GAAK5pC,SAA1B,CAAsC,CAErC,GAAKA,SAAL,CAAiB,CAEhB,OAASA,SAAT,EAEC,KAAKv+C,UAAL,CAECq3D,EAAE,CAAC9Y,SAAH,CAAc,GAAd,EACA,MAED,KAAKt+C,WAAL,CAECo3D,EAAE,CAAC9Y,SAAH,CAAc,GAAd,EACA,MAED,KAAKr+C,SAAL,CAECm3D,EAAE,CAAC9Y,SAAH,CAAc,GAAd,EACA,MAED,KAAKp+C,cAAL,CAECk3D,EAAE,CAAC9Y,SAAH,CAAc,GAAd,EACA,MAED,KAAKn+C,UAAL,CAECi3D,EAAE,CAAC9Y,SAAH,CAAc,GAAd,EACA,MAED,KAAKl+C,iBAAL,CAECg3D,EAAE,CAAC9Y,SAAH,CAAc,GAAd,EACA,MAED,KAAKj+C,YAAL,CAEC+2D,EAAE,CAAC9Y,SAAH,CAAc,GAAd,EACA,MAED,KAAKh+C,aAAL,CAEC82D,EAAE,CAAC9Y,SAAH,CAAc,GAAd,EACA,MAED,QAEC8Y,EAAE,CAAC9Y,SAAH,CAAc,GAAd,EA5CF,CAgDA,CAlDD,KAkDO,CAEN8Y,EAAE,CAAC9Y,SAAH,CAAc,GAAd,EAEA,CAED4pC,gBAAgB,CAAG5pC,SAAnB,CAEA,CAED,CA3FK,CA6FNwpC,SAAS,CAAE,SAAWC,IAAX,CAAkB,CAE5BN,MAAM,CAAGM,IAAT,CAEA,CAjGK,CAmGNllB,QAAQ,CAAE,SAAWtiC,KAAX,CAAmB,CAE5B,GAAK4nD,iBAAiB,GAAK5nD,KAA3B,CAAmC,CAElC62B,EAAE,CAACkxB,UAAH,CAAe/nD,KAAf,EACA4nD,iBAAiB,CAAG5nD,KAApB,CAEA,CAED,CA5GK,CA8GNymC,KAAK,CAAE,UAAY,CAElBygB,MAAM,CAAG,KAAT,CAEAQ,gBAAgB,CAAG,IAAnB,CACAC,gBAAgB,CAAG,IAAnB,CACAC,iBAAiB,CAAG,IAApB,CAEA,CAtHK,CAAP,CA0HA,CAED,SAASI,aAAT,EAAyB,CAExB,IAAId,MAAM,CAAG,KAAb,CAEA,IAAIe,kBAAkB,CAAG,IAAzB,CACA,IAAIC,kBAAkB,CAAG,IAAzB,CACA,IAAIC,iBAAiB,CAAG,IAAxB,CACA,IAAIC,sBAAsB,CAAG,IAA7B,CACA,IAAIC,kBAAkB,CAAG,IAAzB,CACA,IAAIC,mBAAmB,CAAG,IAA1B,CACA,IAAIC,mBAAmB,CAAG,IAA1B,CACA,IAAIC,mBAAmB,CAAG,IAA1B,CAEA,OAAO,CAENrD,OAAO,CAAE,SAAWsD,WAAX,CAAyB,CAEjC,GAAK,CAAEvB,MAAP,CAAgB,CAEf,GAAKuB,WAAL,CAAmB,CAElBrzC,MAAM,CAAE,IAAF,CAAN,CAEA,CAJD,KAIO,CAENG,OAAO,CAAE,IAAF,CAAP,CAEA,CAED,CAED,CAlBK,CAoBN8xC,OAAO,CAAE,SAAWqB,WAAX,CAAyB,CAEjC,GAAKT,kBAAkB,GAAKS,WAAvB,EAAsC,CAAExB,MAA7C,CAAsD,CAErDrwB,EAAE,CAAC6xB,WAAH,CAAgBA,WAAhB,EACAT,kBAAkB,CAAGS,WAArB,CAEA,CAED,CA7BK,CA+BNZ,OAAO,CAAE,SAAW3pC,WAAX,CAAwBC,UAAxB,CAAoCsqC,WAApC,CAAkD,CAE1D,GAAKR,kBAAkB,GAAK/pC,WAAvB,EACAgqC,iBAAiB,GAAK/pC,UADtB,EAEAgqC,sBAAsB,GAAKM,WAFhC,CAE8C,CAE7C7xB,EAAE,CAAC1Y,WAAH,CAAgBA,WAAhB,CAA6BC,UAA7B,CAAyCsqC,WAAzC,EAEAR,kBAAkB,CAAG/pC,WAArB,CACAgqC,iBAAiB,CAAG/pC,UAApB,CACAgqC,sBAAsB,CAAGM,WAAzB,CAEA,CAED,CA7CK,CA+CNC,KAAK,CAAE,SAAWrqC,WAAX,CAAwBC,YAAxB,CAAsCC,YAAtC,CAAqD,CAE3D,GAAK6pC,kBAAkB,GAAK/pC,WAAvB,EACAgqC,mBAAmB,GAAK/pC,YADxB,EAEAgqC,mBAAmB,GAAK/pC,YAF7B,CAE4C,CAE3CqY,EAAE,CAAC+xB,SAAH,CAActqC,WAAd,CAA2BC,YAA3B,CAAyCC,YAAzC,EAEA6pC,kBAAkB,CAAG/pC,WAArB,CACAgqC,mBAAmB,CAAG/pC,YAAtB,CACAgqC,mBAAmB,CAAG/pC,YAAtB,CAEA,CAED,CA7DK,CA+DN+oC,SAAS,CAAE,SAAWC,IAAX,CAAkB,CAE5BN,MAAM,CAAGM,IAAT,CAEA,CAnEK,CAqENllB,QAAQ,CAAE,SAAW5O,OAAX,CAAqB,CAE9B,GAAK80B,mBAAmB,GAAK90B,OAA7B,CAAuC,CAEtCmD,EAAE,CAACgyB,YAAH,CAAiBn1B,OAAjB,EACA80B,mBAAmB,CAAG90B,OAAtB,CAEA,CAED,CA9EK,CAgFN+S,KAAK,CAAE,UAAY,CAElBygB,MAAM,CAAG,KAAT,CAEAe,kBAAkB,CAAG,IAArB,CACAC,kBAAkB,CAAG,IAArB,CACAC,iBAAiB,CAAG,IAApB,CACAC,sBAAsB,CAAG,IAAzB,CACAC,kBAAkB,CAAG,IAArB,CACAC,mBAAmB,CAAG,IAAtB,CACAC,mBAAmB,CAAG,IAAtB,CACAC,mBAAmB,CAAG,IAAtB,CAEA,CA7FK,CAAP,CAiGA,CAED;EAEA,MAAMM,WAAW,CAAG,IAAI7B,WAAJ,EAApB,CACA,MAAM5mD,WAAW,CAAG,IAAIonD,WAAJ,EAApB,CACA,MAAMnnD,aAAa,CAAG,IAAI0nD,aAAJ,EAAtB,CAEA,IAAIe,mBAAmB,CAAG,EAA1B,CAEA,IAAIC,aAAa,CAAG,IAApB,CACA,IAAIC,wBAAwB,CAAG,EAA/B,CAEA,IAAIC,cAAc,CAAG,IAArB,CAEA,IAAIC,sBAAsB,CAAG,KAA7B,CACA,IAAIC,eAAe,CAAG,IAAtB,CACA,IAAIC,oBAAoB,CAAG,IAA3B,CACA,IAAIC,eAAe,CAAG,IAAtB,CACA,IAAIC,eAAe,CAAG,IAAtB,CACA,IAAIC,yBAAyB,CAAG,IAAhC,CACA,IAAIC,oBAAoB,CAAG,IAA3B,CACA,IAAIC,oBAAoB,CAAG,IAA3B,CACA,IAAIC,wBAAwB,CAAG,KAA/B,CAEA,IAAIC,gBAAgB,CAAG,IAAvB,CACA,IAAIC,eAAe,CAAG,IAAtB,CAEA,IAAIC,gBAAgB,CAAG,IAAvB,CAEA,IAAIC,0BAA0B,CAAG,IAAjC,CACA,IAAIC,yBAAyB,CAAG,IAAhC,CAEA,MAAMhiB,WAAW,CAAGnR,EAAE,CAAC5rB,YAAH,CAAiB,KAAjB,CAApB,CAEA,IAAIg/C,kBAAkB,CAAG,KAAzB,CACA,IAAI1tD,OAAO,CAAG,CAAd,CACA,MAAM2tD,SAAS,CAAGrzB,EAAE,CAAC5rB,YAAH,CAAiB,IAAjB,CAAlB,CAEA,GAAKi/C,SAAS,CAACt8D,OAAV,CAAmB,OAAnB,IAAiC,CAAE,CAAxC,CAA4C,CAE3C2O,OAAO,CAAGioB,UAAU,CAAE,cAAcC,IAAd,CAAoBylC,SAApB,EAAiC,CAAjC,CAAF,CAApB,CACAD,kBAAkB,CAAK1tD,OAAO,EAAI,GAAlC,CAEA,CALD,QAKY2tD,SAAS,CAACt8D,OAAV,CAAmB,WAAnB,IAAqC,CAAE,CAA5C,CAAgD,CAEtD2O,OAAO,CAAGioB,UAAU,CAAE,kBAAkBC,IAAlB,CAAwBylC,SAAxB,EAAqC,CAArC,CAAF,CAApB,CACAD,kBAAkB,CAAK1tD,OAAO,EAAI,GAAlC,CAEA,CAED,IAAI4tD,kBAAkB,CAAG,IAAzB,CACA,IAAIC,oBAAoB,CAAG,EAA3B,CAEA,MAAMC,YAAY,CAAGxzB,EAAE,CAAC5rB,YAAH,CAAiB,IAAjB,CAArB,CACA,MAAMq/C,aAAa,CAAGzzB,EAAE,CAAC5rB,YAAH,CAAiB,IAAjB,CAAtB,CAEA,MAAMs/C,cAAc,CAAG,IAAI/hF,OAAJ,GAAc0rB,SAAd,CAAyBm2D,YAAzB,CAAvB,CACA,MAAMG,eAAe,CAAG,IAAIhiF,OAAJ,GAAc0rB,SAAd,CAAyBo2D,aAAzB,CAAxB,CAEA,SAASG,aAAT,CAAwBl9D,IAAxB,CAA8Bc,MAA9B,CAAsCsS,KAAtC,CAA8C,CAE7C,MAAMzC,IAAI,CAAG,IAAIy5B,UAAJ,CAAgB,CAAhB,CAAb,CAAkC;EAClC,MAAMv3B,OAAO,CAAGy2B,EAAE,CAAC4zB,aAAH,EAAhB,CAEA5zB,EAAE,CAAC6zB,WAAH,CAAgBn9D,IAAhB,CAAsB6S,OAAtB,EACAy2B,EAAE,CAAC8zB,aAAH,CAAkBp9D,IAAlB,CAAwB,KAAxB,CAA+B,IAA/B,EACAspC,EAAE,CAAC8zB,aAAH,CAAkBp9D,IAAlB,CAAwB,KAAxB,CAA+B,IAA/B,EAEA,IAAM,IAAIiB,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGmS,KAArB,CAA4BnS,CAAC,EAA7B,CAAmC,CAElCqoC,EAAE,CAAC+zB,UAAH,CAAev8D,MAAM,CAAGG,CAAxB,CAA2B,CAA3B,CAA8B,IAA9B,CAAoC,CAApC,CAAuC,CAAvC,CAA0C,CAA1C,CAA6C,IAA7C,CAAmD,IAAnD,CAAyD0P,IAAzD,EAEA,CAED,OAAOkC,OAAP,CAEA,CAED,MAAMyqD,aAAa,CAAG,EAAtB,CACAA,aAAa,CAAE,IAAF,CAAb,CAAwBJ,aAAa,CAAE,IAAF,CAAQ,IAAR,CAAc,CAAd,CAArC,CACAI,aAAa,CAAE,KAAF,CAAb,CAAyBJ,aAAa,CAAE,KAAF,CAAS,KAAT,CAAgB,CAAhB,CAAtC,CAEA;EAEA3B,WAAW,CAACxmB,QAAZ,CAAsB,CAAtB,CAAyB,CAAzB,CAA4B,CAA5B,CAA+B,CAA/B,EACAjiC,WAAW,CAACiiC,QAAZ,CAAsB,CAAtB,EACAhiC,aAAa,CAACgiC,QAAd,CAAwB,CAAxB,EAEAltB,MAAM,CAAE,IAAF,CAAN,CACA/U,WAAW,CAACynD,OAAZ,CAAqBnoF,cAArB,EAEAmrF,YAAY,CAAE,KAAF,CAAZ,CACAC,WAAW,CAAEttF,YAAF,CAAX,CACA23C,MAAM,CAAE,IAAF,CAAN,CAEA8vC,WAAW,CAAEhnF,UAAF,CAAX,CAEA;EAEA,SAASk3C,MAAT,CAAiBiD,EAAjB,CAAsB,CAErB,GAAK0wC,mBAAmB,CAAE1wC,EAAF,CAAnB,GAA8B,IAAnC,CAA0C,CAEzCwe,EAAE,CAACzhB,MAAH,CAAWiD,EAAX,EACA0wC,mBAAmB,CAAE1wC,EAAF,CAAnB,CAA4B,IAA5B,CAEA,CAED,CAED,SAAS9C,OAAT,CAAkB8C,EAAlB,CAAuB,CAEtB,GAAK0wC,mBAAmB,CAAE1wC,EAAF,CAAnB,GAA8B,KAAnC,CAA2C,CAE1Cwe,EAAE,CAACthB,OAAH,CAAY8C,EAAZ,EACA0wC,mBAAmB,CAAE1wC,EAAF,CAAnB,CAA4B,KAA5B,CAEA,CAED,CAED,SAAS2yC,iBAAT,CAA4BC,WAA5B,CAA0C,CAEzC,GAAKA,WAAW,GAAKjC,aAArB,CAAqC,CAEpCnyB,EAAE,CAACq0B,eAAH,CAAoB,KAApB,CAA2BD,WAA3B,EAEAjC,aAAa,CAAGiC,WAAhB,CAEA,CAED,CAED,SAASC,eAAT,CAA0B78D,MAA1B,CAAkC48D,WAAlC,CAAgD,CAE/C,GAAKA,WAAW,GAAK,IAAhB,EAAwBjC,aAAa,GAAK,IAA/C,CAAsDiC,WAAW,CAAGjC,aAAd,CAA6B;EAEnF,GAAKC,wBAAwB,CAAE56D,MAAF,CAAxB,GAAuC48D,WAA5C,CAA0D,CAEzDp0B,EAAE,CAACq0B,eAAH,CAAoB78D,MAApB,CAA4B48D,WAA5B,EAEAhC,wBAAwB,CAAE56D,MAAF,CAAxB,CAAqC48D,WAArC,CAEA,GAAKl0B,QAAL,CAAgB;EAIf,GAAK1oC,MAAM,GAAK,KAAhB,CAAwB,CAEvB46D,wBAAwB,CAAE,KAAF,CAAxB,CAAoCgC,WAApC,CAEA,CAED,GAAK58D,MAAM,GAAK,KAAhB,CAAwB,CAEvB46D,wBAAwB,CAAE,KAAF,CAAxB,CAAoCgC,WAApC,CAEA,CAED,CAED,WAAA,CAEA,CAED,YAAA,CAEA,CAED,SAASE,UAAT,CAAqB1nB,OAArB,CAA+B,CAE9B,GAAKylB,cAAc,GAAKzlB,OAAxB,CAAkC,CAEjC5M,EAAE,CAACs0B,UAAH,CAAe1nB,OAAf,EAEAylB,cAAc,CAAGzlB,OAAjB,CAEA,WAAA,CAEA,CAED,YAAA,CAEA,CAED,MAAM2nB,YAAY,CAAG,CACpB,CAAE5sF,WAAF,EAAiB,KADG,CAEpB,CAAEC,gBAAF,EAAsB,KAFF,CAGpB,CAAEC,uBAAF,EAA6B,KAHT,CAArB,CAMA,GAAKq4D,QAAL,CAAgB,CAEfq0B,YAAY,CAAEzsF,WAAF,CAAZ,CAA8B,KAA9B,CACAysF,YAAY,CAAExsF,WAAF,CAAZ,CAA8B,KAA9B,CAEA,CALD,KAKO,CAEN,MAAMskE,SAAS,CAAGpT,UAAU,CAACoI,GAAX,CAAgB,kBAAhB,CAAlB,CAEA,GAAKgL,SAAS,GAAK,IAAnB,CAA0B,CAEzBkoB,YAAY,CAAEzsF,WAAF,CAAZ,CAA8BukE,SAAS,CAACmoB,OAAxC,CACAD,YAAY,CAAExsF,WAAF,CAAZ,CAA8BskE,SAAS,CAACooB,OAAxC,CAEA,CAED,CAED,MAAMC,UAAU,CAAG,CAClB,CAAE1sF,UAAF,EAAgB,CADE,CAElB,CAAEC,SAAF,EAAe,CAFG,CAGlB,CAAEC,cAAF,EAAoB,GAHF,CAIlB,CAAEE,cAAF,EAAoB,GAJF,CAKlB,CAAEM,sBAAF,EAA4B,GALV,CAMlB,CAAEF,cAAF,EAAoB,GANF,CAOlB,CAAEF,cAAF,EAAoB,GAPF,CAQlB,CAAEH,sBAAF,EAA4B,GARV,CASlB,CAAEE,sBAAF,EAA4B,GATV,CAUlB,CAAEI,sBAAF,EAA4B,GAVV,CAWlB,CAAEF,sBAAF,EAA4B,GAXV,CAAnB,CAcA,SAAS8lF,WAAT,CAAsB9nC,QAAtB,CAAgCO,aAAhC,CAA+CF,QAA/C,CAAyDC,QAAzD,CAAmEI,kBAAnE,CAAuFF,aAAvF,CAAsGC,aAAtG,CAAqHwB,kBAArH,CAA0I,CAEzI,GAAKjC,QAAQ,GAAKl/C,UAAlB,CAA+B,CAE9B,GAAKirF,sBAAsB,GAAK,IAAhC,CAAuC,CAEtC5zC,OAAO,CAAE,IAAF,CAAP,CACA4zC,sBAAsB,CAAG,KAAzB,CAEA,CAED,OAEA,CAED,GAAKA,sBAAsB,GAAK,KAAhC,CAAwC,CAEvC/zC,MAAM,CAAE,IAAF,CAAN,CACA+zC,sBAAsB,CAAG,IAAzB,CAEA,CAED,GAAK/rC,QAAQ,GAAK7+C,cAAlB,CAAmC,CAElC,GAAK6+C,QAAQ,GAAKgsC,eAAb,EAAgC/pC,kBAAkB,GAAKsqC,wBAA5D,CAAuF,CAEtF,GAAKN,oBAAoB,GAAK7qF,WAAzB,EAAwCgrF,yBAAyB,GAAKhrF,WAA3E,CAAyF,CAExFq4D,EAAE,CAAClZ,aAAH,CAAkB,KAAlB,EAEA0rC,oBAAoB,CAAG7qF,WAAvB,CACAgrF,yBAAyB,CAAGhrF,WAA5B,CAEA,CAED,GAAK6gD,kBAAL,CAA0B,CAEzB,OAASjC,QAAT,EAEC,KAAKj/C,cAAL,CACC04D,EAAE,CAAC20B,iBAAH,CAAsB,CAAtB,CAAyB,GAAzB,CAA8B,CAA9B,CAAiC,GAAjC,EACA,MAED,KAAKptF,gBAAL,CACCy4D,EAAE,CAAC40B,SAAH,CAAc,CAAd,CAAiB,CAAjB,EACA,MAED,KAAKptF,mBAAL,CACCw4D,EAAE,CAAC20B,iBAAH,CAAsB,CAAtB,CAAyB,CAAzB,CAA4B,GAA5B,CAAiC,GAAjC,EACA,MAED,KAAKltF,gBAAL,CACCu4D,EAAE,CAAC20B,iBAAH,CAAsB,CAAtB,CAAyB,GAAzB,CAA8B,CAA9B,CAAiC,GAAjC,EACA,MAED,QACCn6D,OAAO,CAAC8D,KAAR,CAAe,sCAAf,CAAuDioB,QAAvD,EACA,MApBF,CAwBA,CA1BD,KA0BO,CAEN,OAASA,QAAT,EAEC,KAAKj/C,cAAL,CACC04D,EAAE,CAAC20B,iBAAH,CAAsB,GAAtB,CAA2B,GAA3B,CAAgC,CAAhC,CAAmC,GAAnC,EACA,MAED,KAAKptF,gBAAL,CACCy4D,EAAE,CAAC40B,SAAH,CAAc,GAAd,CAAmB,CAAnB,EACA,MAED,KAAKptF,mBAAL,CACCw4D,EAAE,CAAC40B,SAAH,CAAc,CAAd,CAAiB,GAAjB,EACA,MAED,KAAKntF,gBAAL,CACCu4D,EAAE,CAAC40B,SAAH,CAAc,CAAd,CAAiB,GAAjB,EACA,MAED,QACCp6D,OAAO,CAAC8D,KAAR,CAAe,sCAAf,CAAuDioB,QAAvD,EACA,MApBF,CAwBA,CAEDksC,eAAe,CAAG,IAAlB,CACAC,eAAe,CAAG,IAAlB,CACAE,oBAAoB,CAAG,IAAvB,CACAC,oBAAoB,CAAG,IAAvB,CAEAN,eAAe,CAAGhsC,QAAlB,CACAusC,wBAAwB,CAAGtqC,kBAA3B,CAEA,CAED,OAEA,CAED;EAEAvB,kBAAkB,CAAGA,kBAAkB,EAAIH,aAA3C,CACAC,aAAa,CAAGA,aAAa,EAAIH,QAAjC,CACAI,aAAa,CAAGA,aAAa,EAAIH,QAAjC,CAEA,GAAKC,aAAa,GAAK0rC,oBAAlB,EAA0CvrC,kBAAkB,GAAK0rC,yBAAtE,CAAkG,CAEjG3yB,EAAE,CAAC60B,qBAAH,CAA0BN,YAAY,CAAEztC,aAAF,CAAtC,CAAyDytC,YAAY,CAAEttC,kBAAF,CAArE,EAEAurC,oBAAoB,CAAG1rC,aAAvB,CACA6rC,yBAAyB,CAAG1rC,kBAA5B,CAEA,CAED,GAAKL,QAAQ,GAAK6rC,eAAb,EAAgC5rC,QAAQ,GAAK6rC,eAA7C,EAAgE3rC,aAAa,GAAK6rC,oBAAlF,EAA0G5rC,aAAa,GAAK6rC,oBAAjI,CAAwJ,CAEvJ7yB,EAAE,CAAC20B,iBAAH,CAAsBD,UAAU,CAAE9tC,QAAF,CAAhC,CAA8C8tC,UAAU,CAAE7tC,QAAF,CAAxD,CAAsE6tC,UAAU,CAAE3tC,aAAF,CAAhF,CAAmG2tC,UAAU,CAAE1tC,aAAF,CAA7G,EAEAyrC,eAAe,CAAG7rC,QAAlB,CACA8rC,eAAe,CAAG7rC,QAAlB,CACA+rC,oBAAoB,CAAG7rC,aAAvB,CACA8rC,oBAAoB,CAAG7rC,aAAvB,CAEA,CAEDurC,eAAe,CAAGhsC,QAAlB,CACAusC,wBAAwB,CAAG,IAA3B,CAEA,CAED,SAASgC,WAAT,CAAsB/wC,QAAtB,CAAgCgxC,WAAhC,CAA8C,CAE7ChxC,QAAQ,CAACyC,IAAT,GAAkBr/C,UAAlB,CACGu3C,OAAO,CAAE,IAAF,CADV,CAEGH,MAAM,CAAE,IAAF,CAFT,CAIA,IAAIimC,SAAS,CAAKzgC,QAAQ,CAACyC,IAAT,GAAkBt/C,QAApC,CACA,GAAK6tF,WAAL,CAAmBvQ,SAAS,CAAG,CAAEA,SAAd,CAEnByP,YAAY,CAAEzP,SAAF,CAAZ,CAEEzgC,QAAQ,CAACwC,QAAT,GAAsBj/C,cAAtB,EAAwCy8C,QAAQ,CAAC4C,WAAT,GAAyB,KAAnE,CACG0nC,WAAW,CAAEhnF,UAAF,CADd,CAEGgnF,WAAW,CAAEtqC,QAAQ,CAACwC,QAAX,CAAqBxC,QAAQ,CAAC+C,aAA9B,CAA6C/C,QAAQ,CAAC6C,QAAtD,CAAgE7C,QAAQ,CAAC8C,QAAzE,CAAmF9C,QAAQ,CAACkD,kBAA5F,CAAgHlD,QAAQ,CAACgD,aAAzH,CAAwIhD,QAAQ,CAACiD,aAAjJ,CAAgKjD,QAAQ,CAACyE,kBAAzK,CAFd,CAIAhf,WAAW,CAACynD,OAAZ,CAAqBltC,QAAQ,CAACmD,SAA9B,EACA1d,WAAW,CAAC8kD,OAAZ,CAAqBvqC,QAAQ,CAACoD,SAA9B,EACA3d,WAAW,CAACgnD,OAAZ,CAAqBzsC,QAAQ,CAACqD,UAA9B,EACA6qC,WAAW,CAACzB,OAAZ,CAAqBzsC,QAAQ,CAACkE,UAA9B,EAEA,MAAML,YAAY,CAAG7D,QAAQ,CAAC6D,YAA9B,CACAne,aAAa,CAAC6kD,OAAd,CAAuB1mC,YAAvB,EACA,GAAKA,YAAL,CAAoB,CAEnBne,aAAa,CAAC+mD,OAAd,CAAuBzsC,QAAQ,CAACsD,gBAAhC,EACA5d,aAAa,CAACwnD,OAAd,CAAuBltC,QAAQ,CAACuD,WAAhC,CAA6CvD,QAAQ,CAACwD,UAAtD,CAAkExD,QAAQ,CAACyD,eAA3E,EACA/d,aAAa,CAACqoD,KAAd,CAAqB/tC,QAAQ,CAAC0D,WAA9B,CAA2C1D,QAAQ,CAAC2D,YAApD,CAAkE3D,QAAQ,CAAC4D,YAA3E,EAEA,CAEDqtC,gBAAgB,CAAEjxC,QAAQ,CAACoE,aAAX,CAA0BpE,QAAQ,CAACqE,mBAAnC,CAAwDrE,QAAQ,CAACsE,kBAAjE,CAAhB,CAEAtE,QAAQ,CAACwE,eAAT,GAA6B,IAA7B,CACGhK,MAAM,CAAE,KAAF,CADT,CAEGG,OAAO,CAAE,KAAF,CAFV,CAIA,CAED;EAEA,SAASu1C,YAAT,CAAuBzP,SAAvB,CAAmC,CAElC,GAAKuO,gBAAgB,GAAKvO,SAA1B,CAAsC,CAErC,GAAKA,SAAL,CAAiB,CAEhBxkB,EAAE,CAACi1B,SAAH,CAAc,IAAd,EAEA,CAJD,KAIO,CAENj1B,EAAE,CAACi1B,SAAH,CAAc,IAAd,EAEA,CAEDlC,gBAAgB,CAAGvO,SAAnB,CAEA,CAED,CAED,SAAS0P,WAAT,CAAsBgB,QAAtB,CAAiC,CAEhC,GAAKA,QAAQ,GAAKvuF,YAAlB,CAAiC,CAEhC43C,MAAM,CAAE,IAAF,CAAN,CAEA,GAAK22C,QAAQ,GAAKlC,eAAlB,CAAoC,CAEnC,GAAKkC,QAAQ,GAAKtuF,YAAlB,CAAiC,CAEhCo5D,EAAE,CAACk1B,QAAH,CAAa,IAAb,EAEA,CAJD,QAIYA,QAAQ,GAAKruF,aAAlB,CAAkC,CAExCm5D,EAAE,CAACk1B,QAAH,CAAa,IAAb,EAEA,CAJM,KAIA,CAENl1B,EAAE,CAACk1B,QAAH,CAAa,IAAb,EAEA,CAED,CAED,CAtBD,KAsBO,CAENx2C,OAAO,CAAE,IAAF,CAAP,CAEA,CAEDs0C,eAAe,CAAGkC,QAAlB,CAEA,CAED,SAASC,YAAT,CAAuB17D,KAAvB,CAA+B,CAE9B,GAAKA,KAAK,GAAKw5D,gBAAf,CAAkC,CAEjC,GAAKG,kBAAL,CAA0BpzB,EAAE,CAACo1B,SAAH,CAAc37D,KAAd,EAE1Bw5D,gBAAgB,CAAGx5D,KAAnB,CAEA,CAED,CAED,SAASu7D,gBAAT,CAA2B7sC,aAA3B,CAA0CktC,MAA1C,CAAkDxW,KAAlD,CAA0D,CAEzD,GAAK12B,aAAL,CAAqB,CAEpB5J,MAAM,CAAE,KAAF,CAAN,CAEA,GAAK20C,0BAA0B,GAAKmC,MAA/B,EAAyClC,yBAAyB,GAAKtU,KAA5E,CAAoF,CAEnF7e,EAAE,CAAC7X,aAAH,CAAkBktC,MAAlB,CAA0BxW,KAA1B,EAEAqU,0BAA0B,CAAGmC,MAA7B,CACAlC,yBAAyB,CAAGtU,KAA5B,CAEA,CAED,CAbD,KAaO,CAENngC,OAAO,CAAE,KAAF,CAAP,CAEA,CAED,CAED,SAAS6vC,cAAT,CAAyBllD,WAAzB,CAAuC,CAEtC,GAAKA,WAAL,CAAmB,CAElBkV,MAAM,CAAE,IAAF,CAAN,CAEA,CAJD,KAIO,CAENG,OAAO,CAAE,IAAF,CAAP,CAEA,CAED,CAED;EAEA,SAAS42C,aAAT,CAAwBC,SAAxB,CAAoC,CAEnC,GAAKA,SAAS,GAAK1+D,SAAnB,CAA+B0+D,SAAS,CAAG,MAAQpkB,WAAR,CAAsB,CAAlC,CAE/B,GAAKmiB,kBAAkB,GAAKiC,SAA5B,CAAwC,CAEvCv1B,EAAE,CAACs1B,aAAH,CAAkBC,SAAlB,EACAjC,kBAAkB,CAAGiC,SAArB,CAEA,CAED,CAED,SAAS1B,WAAT,CAAsB2B,SAAtB,CAAiCC,YAAjC,CAAgD,CAE/C,GAAKnC,kBAAkB,GAAK,IAA5B,CAAmC,CAElCgC,aAAa,GAEb,CAED,IAAII,YAAY,CAAGnC,oBAAoB,CAAED,kBAAF,CAAvC,CAEA,GAAKoC,YAAY,GAAK7+D,SAAtB,CAAkC,CAEjC6+D,YAAY,CAAG,CAAEh/D,IAAI,CAAEG,SAAR,CAAmB0S,OAAO,CAAE1S,SAA5B,CAAf,CACA08D,oBAAoB,CAAED,kBAAF,CAApB,CAA6CoC,YAA7C,CAEA,CAED,GAAKA,YAAY,CAACh/D,IAAb,GAAsB8+D,SAAtB,EAAmCE,YAAY,CAACnsD,OAAb,GAAyBksD,YAAjE,CAAgF,CAE/Ez1B,EAAE,CAAC6zB,WAAH,CAAgB2B,SAAhB,CAA2BC,YAAY,EAAIzB,aAAa,CAAEwB,SAAF,CAAxD,EAEAE,YAAY,CAACh/D,IAAb,CAAoB8+D,SAApB,CACAE,YAAY,CAACnsD,OAAb,CAAuBksD,YAAvB,CAEA,CAED,CAED,SAASE,aAAT,EAAyB,CAExB,MAAMD,YAAY,CAAGnC,oBAAoB,CAAED,kBAAF,CAAzC,CAEA,GAAKoC,YAAY,GAAK7+D,SAAjB,EAA8B6+D,YAAY,CAACh/D,IAAb,GAAsBG,SAAzD,CAAqE,CAEpEmpC,EAAE,CAAC6zB,WAAH,CAAgB6B,YAAY,CAACh/D,IAA7B,CAAmC,IAAnC,EAEAg/D,YAAY,CAACh/D,IAAb,CAAoBG,SAApB,CACA6+D,YAAY,CAACnsD,OAAb,CAAuB1S,SAAvB,CAEA,CAED,CAED,SAAS++D,oBAAT,EAAgC,CAE/B,GAAI,CAEH51B,EAAE,CAAC41B,oBAAH,CAAwBC,KAAxB,CAA+B71B,EAA/B,CAAmC3hC,SAAnC,EAEA,CAAC,MAAQC,KAAR,CAAgB,CAEjB9D,OAAO,CAAC8D,KAAR,CAAe,mBAAf,CAAoCA,KAApC,EAEA,CAED,CAED,SAASy1D,UAAT,EAAsB,CAErB,GAAI,CAEH/zB,EAAE,CAAC+zB,UAAH,CAAc8B,KAAd,CAAqB71B,EAArB,CAAyB3hC,SAAzB,EAEA,CAAC,MAAQC,KAAR,CAAgB,CAEjB9D,OAAO,CAAC8D,KAAR,CAAe,mBAAf,CAAoCA,KAApC,EAEA,CAED,CAED,SAASw3D,UAAT,EAAsB,CAErB,GAAI,CAEH91B,EAAE,CAAC81B,UAAH,CAAcD,KAAd,CAAqB71B,EAArB,CAAyB3hC,SAAzB,EAEA,CAAC,MAAQC,KAAR,CAAgB,CAEjB9D,OAAO,CAAC8D,KAAR,CAAe,mBAAf,CAAoCA,KAApC,EAEA,CAED,CAED;EAEA,SAAS8K,OAAT,CAAkBA,OAAlB,CAA4B,CAE3B,GAAKsqD,cAAc,CAAC5mE,MAAf,CAAuBsc,OAAvB,IAAqC,KAA1C,CAAkD,CAEjD42B,EAAE,CAAC52B,OAAH,CAAYA,OAAO,CAACnQ,CAApB,CAAuBmQ,OAAO,CAAClQ,CAA/B,CAAkCkQ,OAAO,CAAC9B,CAA1C,CAA6C8B,OAAO,CAAC7O,CAArD,EACAm5D,cAAc,CAACt5D,IAAf,CAAqBgP,OAArB,EAEA,CAED,CAED,SAASE,QAAT,CAAmBA,QAAnB,CAA8B,CAE7B,GAAKqqD,eAAe,CAAC7mE,MAAhB,CAAwBwc,QAAxB,IAAuC,KAA5C,CAAoD,CAEnD02B,EAAE,CAAC12B,QAAH,CAAaA,QAAQ,CAACrQ,CAAtB,CAAyBqQ,QAAQ,CAACpQ,CAAlC,CAAqCoQ,QAAQ,CAAChC,CAA9C,CAAiDgC,QAAQ,CAAC/O,CAA1D,EACAo5D,eAAe,CAACv5D,IAAhB,CAAsBkP,QAAtB,EAEA,CAED,CAED;EAEA,SAASsmC,KAAT,EAAiB;EAIhB5P,EAAE,CAACthB,OAAH,CAAY,IAAZ,EACAshB,EAAE,CAACthB,OAAH,CAAY,IAAZ,EACAshB,EAAE,CAACthB,OAAH,CAAY,IAAZ,EACAshB,EAAE,CAACthB,OAAH,CAAY,KAAZ,EACAshB,EAAE,CAACthB,OAAH,CAAY,IAAZ,EACAshB,EAAE,CAACthB,OAAH,CAAY,IAAZ,EACAshB,EAAE,CAACthB,OAAH,CAAY,KAAZ,EAEAshB,EAAE,CAAClZ,aAAH,CAAkB,KAAlB,EACAkZ,EAAE,CAAC40B,SAAH,CAAc,CAAd,CAAiB,CAAjB,EACA50B,EAAE,CAAC20B,iBAAH,CAAsB,CAAtB,CAAyB,CAAzB,CAA4B,CAA5B,CAA+B,CAA/B,EAEA30B,EAAE,CAACywB,SAAH,CAAc,IAAd,CAAoB,IAApB,CAA0B,IAA1B,CAAgC,IAAhC,EACAzwB,EAAE,CAAC6K,UAAH,CAAe,CAAf,CAAkB,CAAlB,CAAqB,CAArB,CAAwB,CAAxB,EAEA7K,EAAE,CAACgxB,SAAH,CAAc,IAAd,EACAhxB,EAAE,CAAC9Y,SAAH,CAAc,GAAd,EACA8Y,EAAE,CAACkxB,UAAH,CAAe,CAAf,EAEAlxB,EAAE,CAAC6xB,WAAH,CAAgB,UAAhB,EACA7xB,EAAE,CAAC1Y,WAAH,CAAgB,GAAhB,CAAqB,CAArB,CAAwB,UAAxB,EACA0Y,EAAE,CAAC+xB,SAAH,CAAc,IAAd,CAAoB,IAApB,CAA0B,IAA1B,EACA/xB,EAAE,CAACgyB,YAAH,CAAiB,CAAjB,EAEAhyB,EAAE,CAACk1B,QAAH,CAAa,IAAb,EACAl1B,EAAE,CAACi1B,SAAH,CAAc,IAAd,EAEAj1B,EAAE,CAAC7X,aAAH,CAAkB,CAAlB,CAAqB,CAArB,EAEA6X,EAAE,CAACs1B,aAAH,CAAkB,KAAlB,EAEAt1B,EAAE,CAACq0B,eAAH,CAAoB,KAApB,CAA2B,IAA3B,EAEA,GAAKn0B,QAAQ,GAAK,IAAlB,CAAyB,CAExBF,EAAE,CAACq0B,eAAH,CAAoB,KAApB,CAA2B,IAA3B,EACAr0B,EAAE,CAACq0B,eAAH,CAAoB,KAApB,CAA2B,IAA3B,EAEA,CAEDr0B,EAAE,CAACs0B,UAAH,CAAe,IAAf,EAEAt0B,EAAE,CAACo1B,SAAH,CAAc,CAAd,EAEAp1B,EAAE,CAAC52B,OAAH,CAAY,CAAZ,CAAe,CAAf,CAAkB42B,EAAE,CAACl8B,MAAH,CAAUrK,KAA5B,CAAmCumC,EAAE,CAACl8B,MAAH,CAAUpK,MAA7C,EACAsmC,EAAE,CAAC12B,QAAH,CAAa,CAAb,CAAgB,CAAhB,CAAmB02B,EAAE,CAACl8B,MAAH,CAAUrK,KAA7B,CAAoCumC,EAAE,CAACl8B,MAAH,CAAUpK,MAA9C,EAEA;EAEAw4D,mBAAmB,CAAG,EAAtB,CAEAoB,kBAAkB,CAAG,IAArB,CACAC,oBAAoB,CAAG,EAAvB,CAEApB,aAAa,CAAG,IAAhB,CACAC,wBAAwB,CAAG,EAA3B,CAEAC,cAAc,CAAG,IAAjB,CAEAC,sBAAsB,CAAG,KAAzB,CACAC,eAAe,CAAG,IAAlB,CACAC,oBAAoB,CAAG,IAAvB,CACAC,eAAe,CAAG,IAAlB,CACAC,eAAe,CAAG,IAAlB,CACAC,yBAAyB,CAAG,IAA5B,CACAC,oBAAoB,CAAG,IAAvB,CACAC,oBAAoB,CAAG,IAAvB,CACAC,wBAAwB,CAAG,KAA3B,CAEAC,gBAAgB,CAAG,IAAnB,CACAC,eAAe,CAAG,IAAlB,CAEAC,gBAAgB,CAAG,IAAnB,CAEAC,0BAA0B,CAAG,IAA7B,CACAC,yBAAyB,CAAG,IAA5B,CAEAO,cAAc,CAAC/5D,GAAf,CAAoB,CAApB,CAAuB,CAAvB,CAA0BqmC,EAAE,CAACl8B,MAAH,CAAUrK,KAApC,CAA2CumC,EAAE,CAACl8B,MAAH,CAAUpK,MAArD,EACAi6D,eAAe,CAACh6D,GAAhB,CAAqB,CAArB,CAAwB,CAAxB,CAA2BqmC,EAAE,CAACl8B,MAAH,CAAUrK,KAArC,CAA4CumC,EAAE,CAACl8B,MAAH,CAAUpK,MAAtD,EAEAu4D,WAAW,CAACriB,KAAZ,GACApmC,WAAW,CAAComC,KAAZ,GACAnmC,aAAa,CAACmmC,KAAd,GAEA,CAED,OAAO,CAENzP,OAAO,CAAE,CACR/W,KAAK,CAAE6oC,WADC,CAER9oD,KAAK,CAAEK,WAFC,CAGRqzB,OAAO,CAAEpzB,aAHD,CAFH,CAQN8U,MAAM,CAAEA,MARF,CASNG,OAAO,CAAEA,OATH,CAWN21C,eAAe,CAAEA,eAXX,CAYNF,iBAAiB,CAAEA,iBAZb,CAcNG,UAAU,CAAEA,UAdN,CAgBNjG,WAAW,CAAEA,WAhBP,CAiBNyG,WAAW,CAAEA,WAjBP,CAmBNb,YAAY,CAAEA,YAnBR,CAoBNC,WAAW,CAAEA,WApBP,CAsBNiB,YAAY,CAAEA,YAtBR,CAuBNH,gBAAgB,CAAEA,gBAvBZ,CAyBNzG,cAAc,CAAEA,cAzBV,CA2BN+G,aAAa,CAAEA,aA3BT,CA4BNzB,WAAW,CAAEA,WA5BP,CA6BN8B,aAAa,CAAEA,aA7BT,CA8BNC,oBAAoB,CAAEA,oBA9BhB,CA+BN7B,UAAU,CAAEA,UA/BN,CAgCN+B,UAAU,CAAEA,UAhCN,CAkCN1sD,OAAO,CAAEA,OAlCH,CAmCNE,QAAQ,CAAEA,QAnCJ,CAqCNsmC,KAAK,CAAEA,KArCD,CAAP,CAyCA,CAED,SAASvnD,aAAT,CAAwB0tE,GAAxB,CAA6B98B,UAA7B,CAAyC0R,KAAzC,CAAgDhD,UAAhD,CAA4D1H,YAA5D,CAA0E+1B,KAA1E,CAAiF9lB,IAAjF,CAAwF,CAEvF,MAAMhQ,QAAQ,CAAGD,YAAY,CAACC,QAA9B,CACA,MAAMiR,WAAW,CAAGlR,YAAY,CAACkR,WAAjC,CACA,MAAMG,cAAc,CAAGrR,YAAY,CAACqR,cAApC,CACA,MAAMD,cAAc,CAAGpR,YAAY,CAACoR,cAApC,CACA,MAAMS,UAAU,CAAG7R,YAAY,CAAC6R,UAAhC,CAEA,MAAMmkB,cAAc,CAAG,IAAI71B,OAAJ,EAAvB,CACA,IAAI9uD,OAAJ,CAEA;EACA;EACA;EAEA,IAAI4kF,kBAAkB,CAAG,KAAzB,CAEA,GAAI,CAEHA,kBAAkB,CAAG,OAAOC,eAAP,GAA2B,WAA3B,EACf,IAAIA,eAAJ,CAAqB,CAArB,CAAwB,CAAxB,EAA4BnyD,UAA5B,CAAwC,IAAxC,CAAF,GAAuD,IAD3D,CAGA,CAAC,MAAQoyD,GAAR,CAAc;EAIf,CAED,SAASC,YAAT,CAAuB58D,KAAvB,CAA8BC,MAA9B,CAAuC;EAItC,OAAOw8D,kBAAkB,CACxB,IAAIC,eAAJ,CAAqB18D,KAArB,CAA4BC,MAA5B,CADwB,CACeoJ,eAAe,CAAE,QAAF,CADvD,CAGA,CAED,SAASwzD,WAAT,CAAsB5yD,KAAtB,CAA6B6yD,eAA7B,CAA8CC,cAA9C,CAA8DC,OAA9D,CAAwE,CAEvE,IAAIl0D,KAAK,CAAG,CAAZ,CAEA;EAEA,GAAKmB,KAAK,CAACjK,KAAN,CAAcg9D,OAAd,EAAyB/yD,KAAK,CAAChK,MAAN,CAAe+8D,OAA7C,CAAuD,CAEtDl0D,KAAK,CAAGk0D,OAAO,CAAG1+D,IAAI,CAACe,GAAL,CAAU4K,KAAK,CAACjK,KAAhB,CAAuBiK,KAAK,CAAChK,MAA7B,CAAlB,CAEA,CAED;EAEA,GAAK6I,KAAK,CAAG,CAAR,EAAag0D,eAAe,GAAK,IAAtC,CAA6C;EAI5C,GAAO,OAAOpvD,gBAAP,GAA4B,WAA5B,EAA2CzD,KAAK,YAAYyD,gBAA9D,EACF,OAAOtD,iBAAP,GAA6B,WAA7B,EAA4CH,KAAK,YAAYG,iBAD3D,EAEF,OAAOuD,WAAP,GAAuB,WAAvB,EAAsC1D,KAAK,YAAY0D,WAF1D,CAE0E,CAEzE,MAAM/N,KAAK,CAAGk9D,eAAe,CAAGplF,eAAH,CAAqB4mB,IAAI,CAACsB,KAAvD,CAEA,MAAMI,KAAK,CAAGJ,KAAK,CAAEkJ,KAAK,CAAGmB,KAAK,CAACjK,KAAhB,CAAnB,CACA,MAAMC,MAAM,CAAGL,KAAK,CAAEkJ,KAAK,CAAGmB,KAAK,CAAChK,MAAhB,CAApB,CAEA,GAAKpoB,OAAO,GAAKulB,SAAjB,CAA6BvlB,OAAO,CAAG+kF,YAAY,CAAE58D,KAAF,CAASC,MAAT,CAAtB,CAE7B;EAEA,MAAMoK,MAAM,CAAG0yD,cAAc,CAAGH,YAAY,CAAE58D,KAAF,CAASC,MAAT,CAAf,CAAmCpoB,OAAhE,CAEAwyB,MAAM,CAACrK,KAAP,CAAeA,KAAf,CACAqK,MAAM,CAACpK,MAAP,CAAgBA,MAAhB,CAEA,MAAMqK,OAAO,CAAGD,MAAM,CAACE,UAAP,CAAmB,IAAnB,CAAhB,CACAD,OAAO,CAACI,SAAR,CAAmBT,KAAnB,CAA0B,CAA1B,CAA6B,CAA7B,CAAgCjK,KAAhC,CAAuCC,MAAvC,EAEAc,OAAO,CAACC,IAAR,CAAc,uDAAyDiJ,KAAK,CAACjK,KAA/D,CAAuE,GAAvE,CAA6EiK,KAAK,CAAChK,MAAnF,CAA4F,QAA5F,CAAuGD,KAAvG,CAA+G,GAA/G,CAAqHC,MAArH,CAA8H,IAA5I,EAEA,OAAOoK,MAAP,CAEA,CAzBD,KAyBO,CAEN,GAAK,SAAUJ,KAAf,CAAuB,CAEtBlJ,OAAO,CAACC,IAAR,CAAc,yDAA2DiJ,KAAK,CAACjK,KAAjE,CAAyE,GAAzE,CAA+EiK,KAAK,CAAChK,MAArF,CAA8F,IAA5G,EAEA,CAED,OAAOgK,KAAP,CAEA,CAED,CAED,OAAOA,KAAP,CAEA,CAED,SAASpb,cAAT,CAAyBob,KAAzB,CAAiC,CAEhC,OAAOxyB,YAAY,CAAEwyB,KAAK,CAACjK,KAAR,CAAZ,EAA+BvoB,YAAY,CAAEwyB,KAAK,CAAChK,MAAR,CAAlD,CAEA,CAED,SAASg9D,sBAAT,CAAiCntD,OAAjC,CAA2C,CAE1C,GAAK22B,QAAL,CAAgB,YAAA,CAEhB,OAAS32B,OAAO,CAAC/E,KAAR,GAAkBp6B,mBAAlB,EAAyCm/B,OAAO,CAAC9E,KAAR,GAAkBr6B,mBAA7D,EACJm/B,OAAO,CAAC5E,SAAR,GAAsBr6B,aAAtB,EAAuCi/B,OAAO,CAAC5E,SAAR,GAAsBl6B,YADhE,CAGA,CAED,SAASksF,2BAAT,CAAsCptD,OAAtC,CAA+CqtD,YAA/C,CAA8D,CAE7D,OAAOrtD,OAAO,CAAClE,eAAR,EAA2BuxD,YAA3B,EACNrtD,OAAO,CAAC5E,SAAR,GAAsBr6B,aADhB,EACiCi/B,OAAO,CAAC5E,SAAR,GAAsBl6B,YAD9D,CAGA,CAED,SAASosF,cAAT,CAAyBr/D,MAAzB,CAAiC+R,OAAjC,CAA0C9P,KAA1C,CAAiDC,MAAjD,CAAyDyP,KAAK,CAAG,CAAjE,CAAqE,CAEpE4sD,GAAG,CAACc,cAAJ,CAAoBr/D,MAApB,EAEA,MAAMs/D,iBAAiB,CAAGnvB,UAAU,CAACtG,GAAX,CAAgB93B,OAAhB,CAA1B,CAEAutD,iBAAiB,CAACC,aAAlB,CAAkCh/D,IAAI,CAACi/D,IAAL,CAAWj/D,IAAI,CAACe,GAAL,CAAUW,KAAV,CAAiBC,MAAjB,CAAyByP,KAAzB,CAAX,CAAlC,CAEA,CAED,SAAS8tD,iBAAT,CAA4BC,kBAA5B,CAAgDC,QAAhD,CAA0DC,MAA1D,CAAkEtyD,QAAlE,CAA6E,CAE5E,GAAKo7B,QAAQ,GAAK,KAAlB,CAA0B,OAAOi3B,QAAP,CAE1B,GAAKD,kBAAkB,GAAK,IAA5B,CAAmC,CAElC,GAAKnB,GAAG,CAAEmB,kBAAF,CAAH,GAA8BrgE,SAAnC,CAA+C,OAAOk/D,GAAG,CAAEmB,kBAAF,CAAV,CAE/C18D,OAAO,CAACC,IAAR,CAAc,4EAA8Ey8D,kBAA9E,CAAmG,IAAjH,EAEA,CAED,IAAIhyD,cAAc,CAAGiyD,QAArB,CAEA,GAAKA,QAAQ,GAAK,IAAlB,CAAyB,CAExB,GAAKC,MAAM,GAAK,IAAhB,CAAuBlyD,cAAc,CAAG,KAAjB,CACvB,GAAKkyD,MAAM,GAAK,IAAhB,CAAuBlyD,cAAc,CAAG,KAAjB,CACvB,GAAKkyD,MAAM,GAAK,IAAhB,CAAuBlyD,cAAc,CAAG,KAAjB,CAEvB,CAED,GAAKiyD,QAAQ,GAAK,IAAlB,CAAyB,CAExB,GAAKC,MAAM,GAAK,IAAhB,CAAuBlyD,cAAc,CAAG,KAAjB,CACvB,GAAKkyD,MAAM,GAAK,IAAhB,CAAuBlyD,cAAc,CAAG,KAAjB,CACvB,GAAKkyD,MAAM,GAAK,IAAhB,CAAuBlyD,cAAc,CAAG,KAAjB,CAEvB,CAED,GAAKiyD,QAAQ,GAAK,IAAlB,CAAyB,CAExB,GAAKC,MAAM,GAAK,IAAhB,CAAuBlyD,cAAc,CAAG,KAAjB,CACvB,GAAKkyD,MAAM,GAAK,IAAhB,CAAuBlyD,cAAc,CAAG,KAAjB,CACvB,GAAKkyD,MAAM,GAAK,IAAhB,CAAuBlyD,cAAc,CAAKJ,QAAQ,GAAKp1B,YAAf,CAAgC,KAAhC,CAAwC,KAAzD,CAEvB,CAED,GAAKw1B,cAAc,GAAK,KAAnB,EAA4BA,cAAc,GAAK,KAA/C,EACJA,cAAc,GAAK,KADf,EACwBA,cAAc,GAAK,KADhD,CACwD,CAEvD+zB,UAAU,CAACoI,GAAX,CAAgB,wBAAhB,EAEA,CAED,OAAOn8B,cAAP,CAEA,CAED;EAEA,SAASmyD,cAAT,CAAyBp2D,CAAzB,CAA6B,CAE5B,GAAKA,CAAC,GAAK32B,aAAN,EAAuB22B,CAAC,GAAK12B,0BAA7B,EAA2D02B,CAAC,GAAKz2B,yBAAtE,CAAkG,CAEjG,WAAA,CAEA,CAED,WAAA,CAEA,CAED;EAEA,SAASkpE,gBAAT,CAA2Bn8C,KAA3B,CAAmC,CAElC,MAAMgS,OAAO,CAAGhS,KAAK,CAACC,MAAtB,CAEA+R,OAAO,CAACrS,mBAAR,CAA6B,SAA7B,CAAwCw8C,gBAAxC,EAEA4jB,iBAAiB,CAAE/tD,OAAF,CAAjB,CAEA,GAAKA,OAAO,CAACguD,cAAb,CAA8B,CAE7BtB,cAAc,CAAC10B,MAAf,CAAuBh4B,OAAvB,EAEA,CAED2mC,IAAI,CAACkK,MAAL,CAAYh0C,QAAZ,GAEA,CAED,SAASoxD,qBAAT,CAAgCjgE,KAAhC,CAAwC,CAEvC,MAAM6jC,YAAY,CAAG7jC,KAAK,CAACC,MAA3B,CAEA4jC,YAAY,CAAClkC,mBAAb,CAAkC,SAAlC,CAA6CsgE,qBAA7C,EAEAC,sBAAsB,CAAEr8B,YAAF,CAAtB,CAEA,CAED;EAEA,SAASk8B,iBAAT,CAA4B/tD,OAA5B,CAAsC,CAErC,MAAMutD,iBAAiB,CAAGnvB,UAAU,CAACtG,GAAX,CAAgB93B,OAAhB,CAA1B,CAEA,GAAKutD,iBAAiB,CAACY,WAAlB,GAAkC7gE,SAAvC,CAAmD,OAEnDk/D,GAAG,CAAC4B,aAAJ,CAAmBb,iBAAiB,CAACc,cAArC,EAEAjwB,UAAU,CAACxmB,MAAX,CAAmB5X,OAAnB,EAEA,CAED,SAASkuD,sBAAT,CAAiCr8B,YAAjC,CAAgD,CAE/C,MAAM7xB,OAAO,CAAG6xB,YAAY,CAAC7xB,OAA7B,CAEA,MAAMsuD,sBAAsB,CAAGlwB,UAAU,CAACtG,GAAX,CAAgBjG,YAAhB,CAA/B,CACA,MAAM07B,iBAAiB,CAAGnvB,UAAU,CAACtG,GAAX,CAAgB93B,OAAhB,CAA1B,CAEA,GAAK,CAAE6xB,YAAP,CAAsB,OAEtB,GAAK07B,iBAAiB,CAACc,cAAlB,GAAqC/gE,SAA1C,CAAsD,CAErDk/D,GAAG,CAAC4B,aAAJ,CAAmBb,iBAAiB,CAACc,cAArC,EAEA1nB,IAAI,CAACkK,MAAL,CAAYh0C,QAAZ,GAEA,CAED,GAAKg1B,YAAY,CAAC1xB,YAAlB,CAAiC,CAEhC0xB,YAAY,CAAC1xB,YAAb,CAA0B5C,OAA1B,GAEA,CAED,GAAKs0B,YAAY,CAACC,uBAAlB,CAA4C,CAE3C,IAAM,IAAI1jC,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9Bo+D,GAAG,CAAC+B,iBAAJ,CAAuBD,sBAAsB,CAACE,kBAAvB,CAA2CpgE,CAA3C,CAAvB,EACA,GAAKkgE,sBAAsB,CAACG,kBAA5B,CAAiDjC,GAAG,CAACkC,kBAAJ,CAAwBJ,sBAAsB,CAACG,kBAAvB,CAA2CrgE,CAA3C,CAAxB,EAEjD,CAED,CATD,KASO,CAENo+D,GAAG,CAAC+B,iBAAJ,CAAuBD,sBAAsB,CAACE,kBAA9C,EACA,GAAKF,sBAAsB,CAACG,kBAA5B,CAAiDjC,GAAG,CAACkC,kBAAJ,CAAwBJ,sBAAsB,CAACG,kBAA/C,EACjD,GAAKH,sBAAsB,CAACK,8BAA5B,CAA6DnC,GAAG,CAAC+B,iBAAJ,CAAuBD,sBAAsB,CAACK,8BAA9C,EAC7D,GAAKL,sBAAsB,CAACM,wBAA5B,CAAuDpC,GAAG,CAACkC,kBAAJ,CAAwBJ,sBAAsB,CAACM,wBAA/C,EACvD,GAAKN,sBAAsB,CAACO,wBAA5B,CAAuDrC,GAAG,CAACkC,kBAAJ,CAAwBJ,sBAAsB,CAACO,wBAA/C,EAEvD,CAED,GAAKh9B,YAAY,CAACpxB,4BAAlB,CAAiD,CAEhD,IAAM,IAAIrS,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAGR,OAAO,CAAC1R,MAA9B,CAAsCF,CAAC,CAAGoS,EAA1C,CAA8CpS,CAAC,EAA/C,CAAqD,CAEpD,MAAM0gE,oBAAoB,CAAG1wB,UAAU,CAACtG,GAAX,CAAgB93B,OAAO,CAAE5R,CAAF,CAAvB,CAA7B,CAEA,GAAK0gE,oBAAoB,CAACT,cAA1B,CAA2C,CAE1C7B,GAAG,CAAC4B,aAAJ,CAAmBU,oBAAoB,CAACT,cAAxC,EAEA1nB,IAAI,CAACkK,MAAL,CAAYh0C,QAAZ,GAEA,CAEDuhC,UAAU,CAACxmB,MAAX,CAAmB5X,OAAO,CAAE5R,CAAF,CAA1B,EAEA,CAED,CAEDgwC,UAAU,CAACxmB,MAAX,CAAmB5X,OAAnB,EACAo+B,UAAU,CAACxmB,MAAX,CAAmBia,YAAnB,EAEA,CAED;EAEA,IAAIk9B,YAAY,CAAG,CAAnB,CAEA,SAASC,iBAAT,EAA6B,CAE5BD,YAAY,CAAG,CAAf,CAEA,CAED,SAASrb,mBAAT,EAA+B,CAE9B,MAAMub,WAAW,CAAGF,YAApB,CAEA,GAAKE,WAAW,EAAIrnB,WAApB,CAAkC,CAEjC32C,OAAO,CAACC,IAAR,CAAc,sCAAwC+9D,WAAxC,CAAsD,8CAAtD,CAAuGrnB,WAArH,EAEA,CAEDmnB,YAAY,EAAI,CAAhB,CAEA,OAAOE,WAAP,CAEA,CAED;EAEA,SAASC,YAAT,CAAuBlvD,OAAvB,CAAgCmvD,IAAhC,CAAuC,CAEtC,MAAM5B,iBAAiB,CAAGnvB,UAAU,CAACtG,GAAX,CAAgB93B,OAAhB,CAA1B,CAEA,GAAKA,OAAO,CAACguD,cAAb,CAA8BoB,kBAAkB,CAAEpvD,OAAF,CAAlB,CAE9B,GAAKA,OAAO,CAAC7D,OAAR,CAAkB,CAAlB,EAAuBoxD,iBAAiB,CAAC8B,SAAlB,GAAgCrvD,OAAO,CAAC7D,OAApE,CAA8E,CAE7E,MAAMhC,KAAK,CAAG6F,OAAO,CAAC7F,KAAtB,CAEA,GAAKA,KAAK,GAAK7M,SAAf,CAA2B,CAE1B2D,OAAO,CAACC,IAAR,CAAc,uEAAd,EAEA,CAJD,QAIYiJ,KAAK,CAACm1D,QAAN,GAAmB,KAAxB,CAAgC,CAEtCr+D,OAAO,CAACC,IAAR,CAAc,wEAAd,EAEA,CAJM,KAIA,CAENq+D,aAAa,CAAEhC,iBAAF,CAAqBvtD,OAArB,CAA8BmvD,IAA9B,CAAb,CACA,OAEA,CAED,CAED/tB,KAAK,CAAC2qB,aAAN,CAAqB,MAAQoD,IAA7B,EACA/tB,KAAK,CAACkpB,WAAN,CAAmB,IAAnB,CAAyBiD,iBAAiB,CAACc,cAA3C,EAEA,CAED,SAASnZ,iBAAT,CAA4Bl1C,OAA5B,CAAqCmvD,IAArC,CAA4C,CAE3C,MAAM5B,iBAAiB,CAAGnvB,UAAU,CAACtG,GAAX,CAAgB93B,OAAhB,CAA1B,CAEA,GAAKA,OAAO,CAAC7D,OAAR,CAAkB,CAAlB,EAAuBoxD,iBAAiB,CAAC8B,SAAlB,GAAgCrvD,OAAO,CAAC7D,OAApE,CAA8E,CAE7EozD,aAAa,CAAEhC,iBAAF,CAAqBvtD,OAArB,CAA8BmvD,IAA9B,CAAb,CACA,OAEA,CAED/tB,KAAK,CAAC2qB,aAAN,CAAqB,MAAQoD,IAA7B,EACA/tB,KAAK,CAACkpB,WAAN,CAAmB,KAAnB,CAA0BiD,iBAAiB,CAACc,cAA5C,EAEA,CAED,SAASrZ,YAAT,CAAuBh1C,OAAvB,CAAgCmvD,IAAhC,CAAuC,CAEtC,MAAM5B,iBAAiB,CAAGnvB,UAAU,CAACtG,GAAX,CAAgB93B,OAAhB,CAA1B,CAEA,GAAKA,OAAO,CAAC7D,OAAR,CAAkB,CAAlB,EAAuBoxD,iBAAiB,CAAC8B,SAAlB,GAAgCrvD,OAAO,CAAC7D,OAApE,CAA8E,CAE7EozD,aAAa,CAAEhC,iBAAF,CAAqBvtD,OAArB,CAA8BmvD,IAA9B,CAAb,CACA,OAEA,CAED/tB,KAAK,CAAC2qB,aAAN,CAAqB,MAAQoD,IAA7B,EACA/tB,KAAK,CAACkpB,WAAN,CAAmB,KAAnB,CAA0BiD,iBAAiB,CAACc,cAA5C,EAEA,CAED,SAASmB,cAAT,CAAyBxvD,OAAzB,CAAkCmvD,IAAlC,CAAyC,CAExC,MAAM5B,iBAAiB,CAAGnvB,UAAU,CAACtG,GAAX,CAAgB93B,OAAhB,CAA1B,CAEA,GAAKA,OAAO,CAAC7D,OAAR,CAAkB,CAAlB,EAAuBoxD,iBAAiB,CAAC8B,SAAlB,GAAgCrvD,OAAO,CAAC7D,OAApE,CAA8E,CAE7EszD,iBAAiB,CAAElC,iBAAF,CAAqBvtD,OAArB,CAA8BmvD,IAA9B,CAAjB,CACA,OAEA,CAED/tB,KAAK,CAAC2qB,aAAN,CAAqB,MAAQoD,IAA7B,EACA/tB,KAAK,CAACkpB,WAAN,CAAmB,KAAnB,CAA0BiD,iBAAiB,CAACc,cAA5C,EAEA,CAED,MAAMqB,YAAY,CAAG,CACpB,CAAE9uF,cAAF,EAAoB,KADA,CAEpB,CAAEC,mBAAF,EAAyB,KAFL,CAGpB,CAAEC,sBAAF,EAA4B,KAHR,CAArB,CAMA,MAAM6uF,UAAU,CAAG,CAClB,CAAE5uF,aAAF,EAAmB,IADD,CAElB,CAAEC,0BAAF,EAAgC,IAFd,CAGlB,CAAEC,yBAAF,EAA+B,IAHb,CAKlB,CAAEC,YAAF,EAAkB,IALA,CAMlB,CAAEC,yBAAF,EAA+B,IANb,CAOlB,CAAEC,wBAAF,EAA8B,IAPZ,CAAnB,CAUA,SAASwuF,oBAAT,CAA+BC,WAA/B,CAA4C7vD,OAA5C,CAAqDqtD,YAArD,CAAoE,CAEnE,GAAKA,YAAL,CAAoB,CAEnBb,GAAG,CAACjC,aAAJ,CAAmBsF,WAAnB,CAAgC,KAAhC,CAAuCH,YAAY,CAAE1vD,OAAO,CAAC/E,KAAV,CAAnD,EACAuxD,GAAG,CAACjC,aAAJ,CAAmBsF,WAAnB,CAAgC,KAAhC,CAAuCH,YAAY,CAAE1vD,OAAO,CAAC9E,KAAV,CAAnD,EAEA,GAAK20D,WAAW,GAAK,KAAhB,EAAyBA,WAAW,GAAK,KAA9C,CAAsD,CAErDrD,GAAG,CAACjC,aAAJ,CAAmBsF,WAAnB,CAAgC,KAAhC,CAAuCH,YAAY,CAAE1vD,OAAO,CAAC2xC,KAAV,CAAnD,EAEA,CAED6a,GAAG,CAACjC,aAAJ,CAAmBsF,WAAnB,CAAgC,KAAhC,CAAuCF,UAAU,CAAE3vD,OAAO,CAAC7E,SAAV,CAAjD,EACAqxD,GAAG,CAACjC,aAAJ,CAAmBsF,WAAnB,CAAgC,KAAhC,CAAuCF,UAAU,CAAE3vD,OAAO,CAAC5E,SAAV,CAAjD,EAEA,CAdD,KAcO,CAENoxD,GAAG,CAACjC,aAAJ,CAAmBsF,WAAnB,CAAgC,KAAhC,CAAuC,KAAvC,EACArD,GAAG,CAACjC,aAAJ,CAAmBsF,WAAnB,CAAgC,KAAhC,CAAuC,KAAvC,EAEA,GAAKA,WAAW,GAAK,KAAhB,EAAyBA,WAAW,GAAK,KAA9C,CAAsD,CAErDrD,GAAG,CAACjC,aAAJ,CAAmBsF,WAAnB,CAAgC,KAAhC,CAAuC,KAAvC,EAEA,CAED,GAAK7vD,OAAO,CAAC/E,KAAR,GAAkBp6B,mBAAlB,EAAyCm/B,OAAO,CAAC9E,KAAR,GAAkBr6B,mBAAhE,CAAsF,CAErFowB,OAAO,CAACC,IAAR,CAAc,+HAAd,EAEA,CAEDs7D,GAAG,CAACjC,aAAJ,CAAmBsF,WAAnB,CAAgC,KAAhC,CAAuC/B,cAAc,CAAE9tD,OAAO,CAAC7E,SAAV,CAArD,EACAqxD,GAAG,CAACjC,aAAJ,CAAmBsF,WAAnB,CAAgC,KAAhC,CAAuC/B,cAAc,CAAE9tD,OAAO,CAAC5E,SAAV,CAArD,EAEA,GAAK4E,OAAO,CAAC5E,SAAR,GAAsBr6B,aAAtB,EAAuCi/B,OAAO,CAAC5E,SAAR,GAAsBl6B,YAAlE,CAAiF,CAEhF+vB,OAAO,CAACC,IAAR,CAAc,iIAAd,EAEA,CAED,CAED,GAAKw+B,UAAU,CAAC0X,GAAX,CAAgB,gCAAhB,IAAuD,IAA5D,CAAmE,CAElE,MAAMtE,SAAS,CAAGpT,UAAU,CAACoI,GAAX,CAAgB,gCAAhB,CAAlB,CAEA,GAAK93B,OAAO,CAAC7S,IAAR,GAAiBxrB,SAAjB,EAA8B+tD,UAAU,CAAC0X,GAAX,CAAgB,0BAAhB,IAAiD,KAApF,CAA4F,OAAQ;EACpG,GAAKzQ,QAAQ,GAAK,KAAb,EAAwB32B,OAAO,CAAC7S,IAAR,GAAiBvrB,aAAjB,EAAkC8tD,UAAU,CAAC0X,GAAX,CAAgB,+BAAhB,IAAsD,KAArH,CAA+H,OAAQ;EAEvI,GAAKpnC,OAAO,CAAC1E,UAAR,CAAqB,CAArB,EAA0B8iC,UAAU,CAACtG,GAAX,CAAgB93B,OAAhB,EAA0B8vD,mBAAzD,CAA+E,CAE9EtD,GAAG,CAACuD,aAAJ,CAAmBF,WAAnB,CAAgC/sB,SAAS,CAACktB,0BAA1C,CAAsExhE,IAAI,CAACc,GAAL,CAAU0Q,OAAO,CAAC1E,UAAlB,CAA8Bo7B,YAAY,CAACyQ,gBAAb,EAA9B,CAAtE,EACA/I,UAAU,CAACtG,GAAX,CAAgB93B,OAAhB,EAA0B8vD,mBAA1B,CAAgD9vD,OAAO,CAAC1E,UAAxD,CAEA,CAED,CAED,CAED,SAAS20D,WAAT,CAAsB1C,iBAAtB,CAAyCvtD,OAAzC,CAAmD,CAElD,GAAKutD,iBAAiB,CAACY,WAAlB,GAAkC7gE,SAAvC,CAAmD,CAElDigE,iBAAiB,CAACY,WAAlB,CAAgC,IAAhC,CAEAnuD,OAAO,CAAC9S,gBAAR,CAA0B,SAA1B,CAAqCi9C,gBAArC,EAEAojB,iBAAiB,CAACc,cAAlB,CAAmC7B,GAAG,CAACnC,aAAJ,EAAnC,CAEA1jB,IAAI,CAACkK,MAAL,CAAYh0C,QAAZ,GAEA,CAED,CAED,SAAS0yD,aAAT,CAAwBhC,iBAAxB,CAA2CvtD,OAA3C,CAAoDmvD,IAApD,CAA2D,CAE1D,IAAIU,WAAW,CAAG,IAAlB,CAEA,GAAK7vD,OAAO,CAAC4xC,oBAAb,CAAoCie,WAAW,CAAG,KAAd,CACpC,GAAK7vD,OAAO,CAACszC,eAAb,CAA+Buc,WAAW,CAAG,KAAd,CAE/BI,WAAW,CAAE1C,iBAAF,CAAqBvtD,OAArB,CAAX,CAEAohC,KAAK,CAAC2qB,aAAN,CAAqB,MAAQoD,IAA7B,EACA/tB,KAAK,CAACkpB,WAAN,CAAmBuF,WAAnB,CAAgCtC,iBAAiB,CAACc,cAAlD,EAEA7B,GAAG,CAAC0D,WAAJ,CAAiB,KAAjB,CAAwBlwD,OAAO,CAAChE,KAAhC,EACAwwD,GAAG,CAAC0D,WAAJ,CAAiB,KAAjB,CAAwBlwD,OAAO,CAACjE,gBAAhC,EACAywD,GAAG,CAAC0D,WAAJ,CAAiB,IAAjB,CAAuBlwD,OAAO,CAAC/D,eAA/B,EACAuwD,GAAG,CAAC0D,WAAJ,CAAiB,KAAjB,CAAwB,CAAxB,EAEA,MAAMlD,eAAe,CAAGG,sBAAsB,CAAEntD,OAAF,CAAtB,EAAqCjhB,cAAc,CAAEihB,OAAO,CAAC7F,KAAV,CAAd,GAAoC,KAAjG,CACA,MAAMA,KAAK,CAAG4yD,WAAW,CAAE/sD,OAAO,CAAC7F,KAAV,CAAiB6yD,eAAjB,CAAkC,KAAlC,CAAyCllB,cAAzC,CAAzB,CAEA,MAAMulB,YAAY,CAAGtuE,cAAc,CAAEob,KAAF,CAAd,EAA2Bw8B,QAAhD,CACCi3B,QAAQ,CAAGnB,KAAK,CAAC0D,OAAN,CAAenwD,OAAO,CAAC3E,MAAvB,CADZ,CAGA,IAAIwyD,MAAM,CAAGpB,KAAK,CAAC0D,OAAN,CAAenwD,OAAO,CAAC7S,IAAvB,CAAb,CACCijE,gBAAgB,CAAG1C,iBAAiB,CAAE1tD,OAAO,CAACrE,cAAV,CAA0BiyD,QAA1B,CAAoCC,MAApC,CAA4C7tD,OAAO,CAACzE,QAApD,CADrC,CAGAq0D,oBAAoB,CAAEC,WAAF,CAAe7vD,OAAf,CAAwBqtD,YAAxB,CAApB,CAEA,IAAIgD,MAAJ,CACA,MAAM30D,OAAO,CAAGsE,OAAO,CAACtE,OAAxB,CAEA,GAAKsE,OAAO,CAACswD,cAAb,CAA8B;EAI7BF,gBAAgB,CAAG,IAAnB,CAEA,GAAKz5B,QAAL,CAAgB,CAEf,GAAK32B,OAAO,CAAC7S,IAAR,GAAiBxrB,SAAtB,CAAkC,CAEjCyuF,gBAAgB,CAAG,KAAnB,CAEA,CAJD,QAIYpwD,OAAO,CAAC7S,IAAR,GAAiBzrB,eAAtB,CAAwC,CAE9C0uF,gBAAgB,CAAG,KAAnB,CAEA,CAJM,QAIKpwD,OAAO,CAAC7S,IAAR,GAAiBnrB,kBAAtB,CAA2C,CAEjDouF,gBAAgB,CAAG,KAAnB,CAEA,CAJM,KAIA,CAENA,gBAAgB,CAAG,KAAnB,CAA0B;EAE1B,CAED,CApBD,KAoBO,CAEN,GAAKpwD,OAAO,CAAC7S,IAAR,GAAiBxrB,SAAtB,CAAkC,CAEjCsvB,OAAO,CAAC8D,KAAR,CAAe,8DAAf,EAEA,CAED,CAED;EAEA,GAAKiL,OAAO,CAAC3E,MAAR,GAAmB/4B,WAAnB,EAAkC8tF,gBAAgB,GAAK,IAA5D,CAAmE;EAGlE;EACA;EACA,GAAKpwD,OAAO,CAAC7S,IAAR,GAAiB3rB,iBAAjB,EAAsCw+B,OAAO,CAAC7S,IAAR,GAAiBzrB,eAA5D,CAA8E,CAE7EuvB,OAAO,CAACC,IAAR,CAAc,6FAAd,EAEA8O,OAAO,CAAC7S,IAAR,CAAe3rB,iBAAf,CACAqsF,MAAM,CAAGpB,KAAK,CAAC0D,OAAN,CAAenwD,OAAO,CAAC7S,IAAvB,CAAT,CAEA,CAED,CAED,GAAK6S,OAAO,CAAC3E,MAAR,GAAmB94B,kBAAnB,EAAyC6tF,gBAAgB,GAAK,IAAnE,CAA0E;EAGzE;EACAA,gBAAgB,CAAG,KAAnB,CAEA;EACA;EACA;EACA,GAAKpwD,OAAO,CAAC7S,IAAR,GAAiBnrB,kBAAtB,CAA2C,CAE1CivB,OAAO,CAACC,IAAR,CAAc,kFAAd,EAEA8O,OAAO,CAAC7S,IAAR,CAAenrB,kBAAf,CACA6rF,MAAM,CAAGpB,KAAK,CAAC0D,OAAN,CAAenwD,OAAO,CAAC7S,IAAvB,CAAT,CAEA,CAED,CAED;EAEAi0C,KAAK,CAACopB,UAAN,CAAkB,IAAlB,CAAwB,CAAxB,CAA2B4F,gBAA3B,CAA6Cj2D,KAAK,CAACjK,KAAnD,CAA0DiK,KAAK,CAAChK,MAAhE,CAAwE,CAAxE,CAA2Ey9D,QAA3E,CAAqFC,MAArF,CAA6F,IAA7F,EAEA,CA9ED,QA8EY7tD,OAAO,CAAC1C,aAAb,CAA6B;EAGnC;EACA;EAEA,GAAK5B,OAAO,CAACpN,MAAR,CAAiB,CAAjB,EAAsB++D,YAA3B,CAA0C,CAEzC,IAAM,IAAIj/D,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAG9E,OAAO,CAACpN,MAA9B,CAAsCF,CAAC,CAAGoS,EAA1C,CAA8CpS,CAAC,EAA/C,CAAqD,CAEpDiiE,MAAM,CAAG30D,OAAO,CAAEtN,CAAF,CAAhB,CACAgzC,KAAK,CAACopB,UAAN,CAAkB,IAAlB,CAAwBp8D,CAAxB,CAA2BgiE,gBAA3B,CAA6CC,MAAM,CAACngE,KAApD,CAA2DmgE,MAAM,CAAClgE,MAAlE,CAA0E,CAA1E,CAA6Ey9D,QAA7E,CAAuFC,MAAvF,CAA+FwC,MAAM,CAACvyD,IAAtG,EAEA,CAEDkC,OAAO,CAAClE,eAAR,CAA0B,KAA1B,CACAyxD,iBAAiB,CAACC,aAAlB,CAAkC9xD,OAAO,CAACpN,MAAR,CAAiB,CAAnD,CAEA,CAZD,KAYO,CAEN8yC,KAAK,CAACopB,UAAN,CAAkB,IAAlB,CAAwB,CAAxB,CAA2B4F,gBAA3B,CAA6Cj2D,KAAK,CAACjK,KAAnD,CAA0DiK,KAAK,CAAChK,MAAhE,CAAwE,CAAxE,CAA2Ey9D,QAA3E,CAAqFC,MAArF,CAA6F1zD,KAAK,CAAC2D,IAAnG,EACAyvD,iBAAiB,CAACC,aAAlB,CAAkC,CAAlC,CAEA,CAED,CAzBM,QAyBKxtD,OAAO,CAACuwD,mBAAb,CAAmC,CAEzC,IAAM,IAAIniE,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAG9E,OAAO,CAACpN,MAA9B,CAAsCF,CAAC,CAAGoS,EAA1C,CAA8CpS,CAAC,EAA/C,CAAqD,CAEpDiiE,MAAM,CAAG30D,OAAO,CAAEtN,CAAF,CAAhB,CAEA,GAAK4R,OAAO,CAAC3E,MAAR,GAAmBl5B,UAAnB,EAAiC69B,OAAO,CAAC3E,MAAR,GAAmBn5B,SAAzD,CAAqE,CAEpE,GAAK0rF,QAAQ,GAAK,IAAlB,CAAyB,CAExBxsB,KAAK,CAACirB,oBAAN,CAA4B,IAA5B,CAAkCj+D,CAAlC,CAAqCgiE,gBAArC,CAAuDC,MAAM,CAACngE,KAA9D,CAAqEmgE,MAAM,CAAClgE,MAA5E,CAAoF,CAApF,CAAuFkgE,MAAM,CAACvyD,IAA9F,EAEA,CAJD,KAIO,CAEN7M,OAAO,CAACC,IAAR,CAAc,gGAAd,EAEA,CAED,CAZD,KAYO,CAENkwC,KAAK,CAACopB,UAAN,CAAkB,IAAlB,CAAwBp8D,CAAxB,CAA2BgiE,gBAA3B,CAA6CC,MAAM,CAACngE,KAApD,CAA2DmgE,MAAM,CAAClgE,MAAlE,CAA0E,CAA1E,CAA6Ey9D,QAA7E,CAAuFC,MAAvF,CAA+FwC,MAAM,CAACvyD,IAAtG,EAEA,CAED,CAEDyvD,iBAAiB,CAACC,aAAlB,CAAkC9xD,OAAO,CAACpN,MAAR,CAAiB,CAAnD,CAEA,CA5BM,QA4BK0R,OAAO,CAAC4xC,oBAAb,CAAoC,CAE1CxQ,KAAK,CAACmrB,UAAN,CAAkB,KAAlB,CAAyB,CAAzB,CAA4B6D,gBAA5B,CAA8Cj2D,KAAK,CAACjK,KAApD,CAA2DiK,KAAK,CAAChK,MAAjE,CAAyEgK,KAAK,CAACyF,KAA/E,CAAsF,CAAtF,CAAyFguD,QAAzF,CAAmGC,MAAnG,CAA2G1zD,KAAK,CAAC2D,IAAjH,EACAyvD,iBAAiB,CAACC,aAAlB,CAAkC,CAAlC,CAEA,CALM,QAKKxtD,OAAO,CAACszC,eAAb,CAA+B,CAErClS,KAAK,CAACmrB,UAAN,CAAkB,KAAlB,CAAyB,CAAzB,CAA4B6D,gBAA5B,CAA8Cj2D,KAAK,CAACjK,KAApD,CAA2DiK,KAAK,CAAChK,MAAjE,CAAyEgK,KAAK,CAACyF,KAA/E,CAAsF,CAAtF,CAAyFguD,QAAzF,CAAmGC,MAAnG,CAA2G1zD,KAAK,CAAC2D,IAAjH,EACAyvD,iBAAiB,CAACC,aAAlB,CAAkC,CAAlC,CAEA,CALM,KAKA;EAIN;EACA;EACA;EAEA,GAAK9xD,OAAO,CAACpN,MAAR,CAAiB,CAAjB,EAAsB++D,YAA3B,CAA0C,CAEzC,IAAM,IAAIj/D,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAG9E,OAAO,CAACpN,MAA9B,CAAsCF,CAAC,CAAGoS,EAA1C,CAA8CpS,CAAC,EAA/C,CAAqD,CAEpDiiE,MAAM,CAAG30D,OAAO,CAAEtN,CAAF,CAAhB,CACAgzC,KAAK,CAACopB,UAAN,CAAkB,IAAlB,CAAwBp8D,CAAxB,CAA2BgiE,gBAA3B,CAA6CxC,QAA7C,CAAuDC,MAAvD,CAA+DwC,MAA/D,EAEA,CAEDrwD,OAAO,CAAClE,eAAR,CAA0B,KAA1B,CACAyxD,iBAAiB,CAACC,aAAlB,CAAkC9xD,OAAO,CAACpN,MAAR,CAAiB,CAAnD,CAEA,CAZD,KAYO,CAEN8yC,KAAK,CAACopB,UAAN,CAAkB,IAAlB,CAAwB,CAAxB,CAA2B4F,gBAA3B,CAA6CxC,QAA7C,CAAuDC,MAAvD,CAA+D1zD,KAA/D,EACAozD,iBAAiB,CAACC,aAAlB,CAAkC,CAAlC,CAEA,CAED,CAED,GAAKJ,2BAA2B,CAAEptD,OAAF,CAAWqtD,YAAX,CAAhC,CAA4D,CAE3DC,cAAc,CAAEuC,WAAF,CAAe7vD,OAAf,CAAwB7F,KAAK,CAACjK,KAA9B,CAAqCiK,KAAK,CAAChK,MAA3C,CAAd,CAEA,CAEDo9D,iBAAiB,CAAC8B,SAAlB,CAA8BrvD,OAAO,CAAC7D,OAAtC,CAEA,GAAK6D,OAAO,CAAC5D,QAAb,CAAwB4D,OAAO,CAAC5D,QAAR,CAAkB4D,OAAlB,EAExB,CAED,SAASyvD,iBAAT,CAA4BlC,iBAA5B,CAA+CvtD,OAA/C,CAAwDmvD,IAAxD,CAA+D,CAE9D,GAAKnvD,OAAO,CAAC7F,KAAR,CAAc7L,MAAd,GAAyB,CAA9B,CAAkC,OAElC2hE,WAAW,CAAE1C,iBAAF,CAAqBvtD,OAArB,CAAX,CAEAohC,KAAK,CAAC2qB,aAAN,CAAqB,MAAQoD,IAA7B,EACA/tB,KAAK,CAACkpB,WAAN,CAAmB,KAAnB,CAA0BiD,iBAAiB,CAACc,cAA5C,EAEA7B,GAAG,CAAC0D,WAAJ,CAAiB,KAAjB,CAAwBlwD,OAAO,CAAChE,KAAhC,EACAwwD,GAAG,CAAC0D,WAAJ,CAAiB,KAAjB,CAAwBlwD,OAAO,CAACjE,gBAAhC,EACAywD,GAAG,CAAC0D,WAAJ,CAAiB,IAAjB,CAAuBlwD,OAAO,CAAC/D,eAA/B,EACAuwD,GAAG,CAAC0D,WAAJ,CAAiB,KAAjB,CAAwB,CAAxB,EAEA,MAAMM,YAAY,CAAKxwD,OAAO,GAAMA,OAAO,CAACuwD,mBAAR,EAA+BvwD,OAAO,CAAC7F,KAAR,CAAe,CAAf,EAAmBo2D,mBAAxD,CAA9B,CACA,MAAMjzD,aAAa,CAAK0C,OAAO,CAAC7F,KAAR,CAAe,CAAf,GAAsB6F,OAAO,CAAC7F,KAAR,CAAe,CAAf,EAAmBmD,aAAjE,CAEA,MAAMmzD,SAAS,CAAG,EAAlB,CAEA,IAAM,IAAIriE,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9B,GAAK,CAAEoiE,YAAF,EAAkB,CAAElzD,aAAzB,CAAyC,CAExCmzD,SAAS,CAAEriE,CAAF,CAAT,CAAiB2+D,WAAW,CAAE/sD,OAAO,CAAC7F,KAAR,CAAe/L,CAAf,CAAF,CAAsB,KAAtB,CAA6B,IAA7B,CAAmC25C,cAAnC,CAA5B,CAEA,CAJD,KAIO,CAEN0oB,SAAS,CAAEriE,CAAF,CAAT,CAAiBkP,aAAa,CAAG0C,OAAO,CAAC7F,KAAR,CAAe/L,CAAf,EAAmB+L,KAAtB,CAA8B6F,OAAO,CAAC7F,KAAR,CAAe/L,CAAf,CAA5D,CAEA,CAED,CAED,MAAM+L,KAAK,CAAGs2D,SAAS,CAAE,CAAF,CAAvB,CACCpD,YAAY,CAAGtuE,cAAc,CAAEob,KAAF,CAAd,EAA2Bw8B,QAD3C,CAECi3B,QAAQ,CAAGnB,KAAK,CAAC0D,OAAN,CAAenwD,OAAO,CAAC3E,MAAvB,CAFZ,CAGCwyD,MAAM,CAAGpB,KAAK,CAAC0D,OAAN,CAAenwD,OAAO,CAAC7S,IAAvB,CAHV,CAICijE,gBAAgB,CAAG1C,iBAAiB,CAAE1tD,OAAO,CAACrE,cAAV,CAA0BiyD,QAA1B,CAAoCC,MAApC,CAA4C7tD,OAAO,CAACzE,QAApD,CAJrC,CAMAq0D,oBAAoB,CAAE,KAAF,CAAS5vD,OAAT,CAAkBqtD,YAAlB,CAApB,CAEA,IAAI3xD,OAAJ,CAEA,GAAK80D,YAAL,CAAoB,CAEnB,IAAM,IAAIpiE,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9BsN,OAAO,CAAG+0D,SAAS,CAAEriE,CAAF,CAAT,CAAesN,OAAzB,CAEA,IAAM,IAAIqQ,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGrQ,OAAO,CAACpN,MAA7B,CAAqCyd,CAAC,EAAtC,CAA4C,CAE3C,MAAMskD,MAAM,CAAG30D,OAAO,CAAEqQ,CAAF,CAAtB,CAEA,GAAK/L,OAAO,CAAC3E,MAAR,GAAmBl5B,UAAnB,EAAiC69B,OAAO,CAAC3E,MAAR,GAAmBn5B,SAAzD,CAAqE,CAEpE,GAAK0rF,QAAQ,GAAK,IAAlB,CAAyB,CAExBxsB,KAAK,CAACirB,oBAAN,CAA4B,MAAQj+D,CAApC,CAAuC2d,CAAvC,CAA0CqkD,gBAA1C,CAA4DC,MAAM,CAACngE,KAAnE,CAA0EmgE,MAAM,CAAClgE,MAAjF,CAAyF,CAAzF,CAA4FkgE,MAAM,CAACvyD,IAAnG,EAEA,CAJD,KAIO,CAEN7M,OAAO,CAACC,IAAR,CAAc,iGAAd,EAEA,CAED,CAZD,KAYO,CAENkwC,KAAK,CAACopB,UAAN,CAAkB,MAAQp8D,CAA1B,CAA6B2d,CAA7B,CAAgCqkD,gBAAhC,CAAkDC,MAAM,CAACngE,KAAzD,CAAgEmgE,MAAM,CAAClgE,MAAvE,CAA+E,CAA/E,CAAkFy9D,QAAlF,CAA4FC,MAA5F,CAAoGwC,MAAM,CAACvyD,IAA3G,EAEA,CAED,CAED,CAEDyvD,iBAAiB,CAACC,aAAlB,CAAkC9xD,OAAO,CAACpN,MAAR,CAAiB,CAAnD,CAEA,CAlCD,KAkCO,CAENoN,OAAO,CAAGsE,OAAO,CAACtE,OAAlB,CAEA,IAAM,IAAItN,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9B,GAAKkP,aAAL,CAAqB,CAEpB8jC,KAAK,CAACopB,UAAN,CAAkB,MAAQp8D,CAA1B,CAA6B,CAA7B,CAAgCgiE,gBAAhC,CAAkDK,SAAS,CAAEriE,CAAF,CAAT,CAAe8B,KAAjE,CAAwEugE,SAAS,CAAEriE,CAAF,CAAT,CAAe+B,MAAvF,CAA+F,CAA/F,CAAkGy9D,QAAlG,CAA4GC,MAA5G,CAAoH4C,SAAS,CAAEriE,CAAF,CAAT,CAAe0P,IAAnI,EAEA,IAAM,IAAIiO,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGrQ,OAAO,CAACpN,MAA7B,CAAqCyd,CAAC,EAAtC,CAA4C,CAE3C,MAAMskD,MAAM,CAAG30D,OAAO,CAAEqQ,CAAF,CAAtB,CACA,MAAM2kD,WAAW,CAAGL,MAAM,CAACl2D,KAAP,CAAc/L,CAAd,EAAkB+L,KAAtC,CAEAinC,KAAK,CAACopB,UAAN,CAAkB,MAAQp8D,CAA1B,CAA6B2d,CAAC,CAAG,CAAjC,CAAoCqkD,gBAApC,CAAsDM,WAAW,CAACxgE,KAAlE,CAAyEwgE,WAAW,CAACvgE,MAArF,CAA6F,CAA7F,CAAgGy9D,QAAhG,CAA0GC,MAA1G,CAAkH6C,WAAW,CAAC5yD,IAA9H,EAEA,CAED,CAbD,KAaO,CAENsjC,KAAK,CAACopB,UAAN,CAAkB,MAAQp8D,CAA1B,CAA6B,CAA7B,CAAgCgiE,gBAAhC,CAAkDxC,QAAlD,CAA4DC,MAA5D,CAAoE4C,SAAS,CAAEriE,CAAF,CAA7E,EAEA,IAAM,IAAI2d,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGrQ,OAAO,CAACpN,MAA7B,CAAqCyd,CAAC,EAAtC,CAA4C,CAE3C,MAAMskD,MAAM,CAAG30D,OAAO,CAAEqQ,CAAF,CAAtB,CAEAq1B,KAAK,CAACopB,UAAN,CAAkB,MAAQp8D,CAA1B,CAA6B2d,CAAC,CAAG,CAAjC,CAAoCqkD,gBAApC,CAAsDxC,QAAtD,CAAgEC,MAAhE,CAAwEwC,MAAM,CAACl2D,KAAP,CAAc/L,CAAd,CAAxE,EAEA,CAED,CAED,CAEDm/D,iBAAiB,CAACC,aAAlB,CAAkC9xD,OAAO,CAACpN,MAA1C,CAEA,CAED,GAAK8+D,2BAA2B,CAAEptD,OAAF,CAAWqtD,YAAX,CAAhC,CAA4D;EAG3DC,cAAc,CAAE,KAAF,CAASttD,OAAT,CAAkB7F,KAAK,CAACjK,KAAxB,CAA+BiK,KAAK,CAAChK,MAArC,CAAd,CAEA,CAEDo9D,iBAAiB,CAAC8B,SAAlB,CAA8BrvD,OAAO,CAAC7D,OAAtC,CAEA,GAAK6D,OAAO,CAAC5D,QAAb,CAAwB4D,OAAO,CAAC5D,QAAR,CAAkB4D,OAAlB,EAExB,CAED;EAEA;EACA,SAAS2wD,uBAAT,CAAkC9F,WAAlC,CAA+Ch5B,YAA/C,CAA6D7xB,OAA7D,CAAsE4wD,UAAtE,CAAkFC,aAAlF,CAAkG,CAEjG,MAAMjD,QAAQ,CAAGnB,KAAK,CAAC0D,OAAN,CAAenwD,OAAO,CAAC3E,MAAvB,CAAjB,CACA,MAAMwyD,MAAM,CAAGpB,KAAK,CAAC0D,OAAN,CAAenwD,OAAO,CAAC7S,IAAvB,CAAf,CACA,MAAMijE,gBAAgB,CAAG1C,iBAAiB,CAAE1tD,OAAO,CAACrE,cAAV,CAA0BiyD,QAA1B,CAAoCC,MAApC,CAA4C7tD,OAAO,CAACzE,QAApD,CAA1C,CAEA,GAAKs1D,aAAa,GAAK,KAAlB,EAA2BA,aAAa,GAAK,KAAlD,CAA0D,CAEzDzvB,KAAK,CAACmrB,UAAN,CAAkBsE,aAAlB,CAAiC,CAAjC,CAAoCT,gBAApC,CAAsDv+B,YAAY,CAAC3hC,KAAnE,CAA0E2hC,YAAY,CAAC1hC,MAAvF,CAA+F0hC,YAAY,CAACjyB,KAA5G,CAAmH,CAAnH,CAAsHguD,QAAtH,CAAgIC,MAAhI,CAAwI,IAAxI,EAEA,CAJD,KAIO,CAENzsB,KAAK,CAACopB,UAAN,CAAkBqG,aAAlB,CAAiC,CAAjC,CAAoCT,gBAApC,CAAsDv+B,YAAY,CAAC3hC,KAAnE,CAA0E2hC,YAAY,CAAC1hC,MAAvF,CAA+F,CAA/F,CAAkGy9D,QAAlG,CAA4GC,MAA5G,CAAoH,IAApH,EAEA,CAEDzsB,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8BD,WAA9B,EACA2B,GAAG,CAACsE,oBAAJ,CAA0B,KAA1B,CAAiCF,UAAjC,CAA6CC,aAA7C,CAA4DzyB,UAAU,CAACtG,GAAX,CAAgB93B,OAAhB,EAA0BquD,cAAtF,CAAsG,CAAtG,EACAjtB,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8B,IAA9B,EAEA,CAED;EACA,SAASiG,wBAAT,CAAmCC,YAAnC,CAAiDn/B,YAAjD,CAA+Do/B,aAA/D,CAA+E,CAE9EzE,GAAG,CAAC0E,gBAAJ,CAAsB,KAAtB,CAA6BF,YAA7B,EAEA,GAAKn/B,YAAY,CAAC5xB,WAAb,EAA4B,CAAE4xB,YAAY,CAAC3xB,aAAhD,CAAgE,CAE/D,IAAIkwD,gBAAgB,CAAG,KAAvB,CAEA,GAAKa,aAAL,CAAqB,CAEpB,MAAM9wD,YAAY,CAAG0xB,YAAY,CAAC1xB,YAAlC,CAEA,GAAKA,YAAY,EAAIA,YAAY,CAACmwD,cAAlC,CAAmD,CAElD,GAAKnwD,YAAY,CAAChT,IAAb,GAAsBxrB,SAA3B,CAAuC,CAEtCyuF,gBAAgB,CAAG,KAAnB,CAEA,CAJD,QAIYjwD,YAAY,CAAChT,IAAb,GAAsBzrB,eAA3B,CAA6C,CAEnD0uF,gBAAgB,CAAG,KAAnB,CAEA,CAED,CAED,MAAM1vD,OAAO,CAAGywD,sBAAsB,CAAEt/B,YAAF,CAAtC,CAEA26B,GAAG,CAAC4E,8BAAJ,CAAoC,KAApC,CAA2C1wD,OAA3C,CAAoD0vD,gBAApD,CAAsEv+B,YAAY,CAAC3hC,KAAnF,CAA0F2hC,YAAY,CAAC1hC,MAAvG,EAEA,CAtBD,KAsBO,CAENq8D,GAAG,CAAC6E,mBAAJ,CAAyB,KAAzB,CAAgCjB,gBAAhC,CAAkDv+B,YAAY,CAAC3hC,KAA/D,CAAsE2hC,YAAY,CAAC1hC,MAAnF,EAEA,CAEDq8D,GAAG,CAAC8E,uBAAJ,CAA6B,KAA7B,CAAoC,KAApC,CAA2C,KAA3C,CAAkDN,YAAlD,EAEA,CAlCD,QAkCYn/B,YAAY,CAAC5xB,WAAb,EAA4B4xB,YAAY,CAAC3xB,aAA9C,CAA8D,CAEpE,GAAK+wD,aAAL,CAAqB,CAEpB,MAAMvwD,OAAO,CAAGywD,sBAAsB,CAAEt/B,YAAF,CAAtC,CAEA26B,GAAG,CAAC4E,8BAAJ,CAAoC,KAApC,CAA2C1wD,OAA3C,CAAoD,KAApD,CAA2DmxB,YAAY,CAAC3hC,KAAxE,CAA+E2hC,YAAY,CAAC1hC,MAA5F,EAEA,CAND,KAMO,CAENq8D,GAAG,CAAC6E,mBAAJ,CAAyB,KAAzB,CAAgC,KAAhC,CAAuCx/B,YAAY,CAAC3hC,KAApD,CAA2D2hC,YAAY,CAAC1hC,MAAxE,EAEA,CAGDq8D,GAAG,CAAC8E,uBAAJ,CAA6B,KAA7B,CAAoC,KAApC,CAA2C,KAA3C,CAAkDN,YAAlD,EAEA,CAjBM,KAiBA;EAGN,MAAMhxD,OAAO,CAAG6xB,YAAY,CAACpxB,4BAAb,GAA8C,IAA9C,CAAqDoxB,YAAY,CAAC7xB,OAAb,CAAsB,CAAtB,CAArD,CAAiF6xB,YAAY,CAAC7xB,OAA9G,CAEA,MAAM4tD,QAAQ,CAAGnB,KAAK,CAAC0D,OAAN,CAAenwD,OAAO,CAAC3E,MAAvB,CAAjB,CACA,MAAMwyD,MAAM,CAAGpB,KAAK,CAAC0D,OAAN,CAAenwD,OAAO,CAAC7S,IAAvB,CAAf,CACA,MAAMijE,gBAAgB,CAAG1C,iBAAiB,CAAE1tD,OAAO,CAACrE,cAAV,CAA0BiyD,QAA1B,CAAoCC,MAApC,CAA4C7tD,OAAO,CAACzE,QAApD,CAA1C,CAEA,GAAK01D,aAAL,CAAqB,CAEpB,MAAMvwD,OAAO,CAAGywD,sBAAsB,CAAEt/B,YAAF,CAAtC,CAEA26B,GAAG,CAAC4E,8BAAJ,CAAoC,KAApC,CAA2C1wD,OAA3C,CAAoD0vD,gBAApD,CAAsEv+B,YAAY,CAAC3hC,KAAnF,CAA0F2hC,YAAY,CAAC1hC,MAAvG,EAEA,CAND,KAMO,CAENq8D,GAAG,CAAC6E,mBAAJ,CAAyB,KAAzB,CAAgCjB,gBAAhC,CAAkDv+B,YAAY,CAAC3hC,KAA/D,CAAsE2hC,YAAY,CAAC1hC,MAAnF,EAEA,CAED,CAEDq8D,GAAG,CAAC0E,gBAAJ,CAAsB,KAAtB,CAA6B,IAA7B,EAEA,CAED;EACA,SAASK,iBAAT,CAA4B1G,WAA5B,CAAyCh5B,YAAzC,CAAwD,CAEvD,MAAM2/B,MAAM,CAAK3/B,YAAY,EAAIA,YAAY,CAACC,uBAA9C,CACA,GAAK0/B,MAAL,CAAc,UAAU9gE,KAAJ,CAAW,yDAAX,CAAN,CAEd0wC,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8BD,WAA9B,EAEA,GAAK,EAAIh5B,YAAY,CAAC1xB,YAAb,EAA6B0xB,YAAY,CAAC1xB,YAAb,CAA0BmwD,cAA3D,CAAL,CAAmF,CAElF,UAAU5/D,KAAJ,CAAW,qEAAX,CAAN,CAEA,CAED;EACA,GAAK,CAAE0tC,UAAU,CAACtG,GAAX,CAAgBjG,YAAY,CAAC1xB,YAA7B,EAA4CkuD,cAA9C,EACHx8B,YAAY,CAAC1xB,YAAb,CAA0BhG,KAA1B,CAAgCjK,KAAhC,GAA0C2hC,YAAY,CAAC3hC,KADpD,EAEH2hC,YAAY,CAAC1xB,YAAb,CAA0BhG,KAA1B,CAAgChK,MAAhC,GAA2C0hC,YAAY,CAAC1hC,MAF1D,CAEmE,CAElE0hC,YAAY,CAAC1xB,YAAb,CAA0BhG,KAA1B,CAAgCjK,KAAhC,CAAwC2hC,YAAY,CAAC3hC,KAArD,CACA2hC,YAAY,CAAC1xB,YAAb,CAA0BhG,KAA1B,CAAgChK,MAAhC,CAAyC0hC,YAAY,CAAC1hC,MAAtD,CACA0hC,YAAY,CAAC1xB,YAAb,CAA0BzC,WAA1B,CAAwC,IAAxC,CAEA,CAEDwxD,YAAY,CAAEr9B,YAAY,CAAC1xB,YAAf,CAA6B,CAA7B,CAAZ,CAEA,MAAMsxD,iBAAiB,CAAGrzB,UAAU,CAACtG,GAAX,CAAgBjG,YAAY,CAAC1xB,YAA7B,EAA4CkuD,cAAtE,CAEA,GAAKx8B,YAAY,CAAC1xB,YAAb,CAA0B9E,MAA1B,GAAqC/4B,WAA1C,CAAwD,CAEvDkqF,GAAG,CAACsE,oBAAJ,CAA0B,KAA1B,CAAiC,KAAjC,CAAwC,IAAxC,CAA8CW,iBAA9C,CAAiE,CAAjE,EAEA,CAJD,QAIY5/B,YAAY,CAAC1xB,YAAb,CAA0B9E,MAA1B,GAAqC94B,kBAA1C,CAA+D,CAErEiqF,GAAG,CAACsE,oBAAJ,CAA0B,KAA1B,CAAiC,KAAjC,CAAwC,IAAxC,CAA8CW,iBAA9C,CAAiE,CAAjE,EAEA,CAJM,KAIA,CAEN,UAAU/gE,KAAJ,CAAW,6BAAX,CAAN,CAEA,CAED,CAED;EACA,SAASghE,sBAAT,CAAiC7/B,YAAjC,CAAgD,CAE/C,MAAMy8B,sBAAsB,CAAGlwB,UAAU,CAACtG,GAAX,CAAgBjG,YAAhB,CAA/B,CAEA,MAAM2/B,MAAM,CAAK3/B,YAAY,CAACC,uBAAb,GAAyC,IAA1D,CAEA,GAAKD,YAAY,CAAC1xB,YAAlB,CAAiC,CAEhC,GAAKqxD,MAAL,CAAc,UAAU9gE,KAAJ,CAAW,0DAAX,CAAN,CAEd6gE,iBAAiB,CAAEjD,sBAAsB,CAACE,kBAAzB,CAA6C38B,YAA7C,CAAjB,CAEA,CAND,KAMO,CAEN,GAAK2/B,MAAL,CAAc,CAEblD,sBAAsB,CAACG,kBAAvB,CAA4C,EAA5C,CAEA,IAAM,IAAIrgE,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9BgzC,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8BwD,sBAAsB,CAACE,kBAAvB,CAA2CpgE,CAA3C,CAA9B,EACAkgE,sBAAsB,CAACG,kBAAvB,CAA2CrgE,CAA3C,EAAiDo+D,GAAG,CAACmF,kBAAJ,EAAjD,CACAZ,wBAAwB,CAAEzC,sBAAsB,CAACG,kBAAvB,CAA2CrgE,CAA3C,CAAF,CAAkDyjC,YAAlD,CAAgE,KAAhE,CAAxB,CAEA,CAED,CAZD,KAYO,CAENuP,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8BwD,sBAAsB,CAACE,kBAArD,EACAF,sBAAsB,CAACG,kBAAvB,CAA4CjC,GAAG,CAACmF,kBAAJ,EAA5C,CACAZ,wBAAwB,CAAEzC,sBAAsB,CAACG,kBAAzB,CAA6C58B,YAA7C,CAA2D,KAA3D,CAAxB,CAEA,CAED,CAEDuP,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8B,IAA9B,EAEA,CAED;EACA,SAAS8G,iBAAT,CAA4B//B,YAA5B,CAA2C,CAE1C,MAAM7xB,OAAO,CAAG6xB,YAAY,CAAC7xB,OAA7B,CAEA,MAAMsuD,sBAAsB,CAAGlwB,UAAU,CAACtG,GAAX,CAAgBjG,YAAhB,CAA/B,CACA,MAAM07B,iBAAiB,CAAGnvB,UAAU,CAACtG,GAAX,CAAgB93B,OAAhB,CAA1B,CAEA6xB,YAAY,CAAC3kC,gBAAb,CAA+B,SAA/B,CAA0C+gE,qBAA1C,EAEA,GAAKp8B,YAAY,CAACpxB,4BAAb,GAA8C,IAAnD,CAA0D,CAEzD8sD,iBAAiB,CAACc,cAAlB,CAAmC7B,GAAG,CAACnC,aAAJ,EAAnC,CACAkD,iBAAiB,CAAC8B,SAAlB,CAA8BrvD,OAAO,CAAC7D,OAAtC,CACAwqC,IAAI,CAACkK,MAAL,CAAYh0C,QAAZ,GAEA,CAED,MAAM20D,MAAM,CAAK3/B,YAAY,CAACC,uBAAb,GAAyC,IAA1D,CACA,MAAM+/B,uBAAuB,CAAKhgC,YAAY,CAACpxB,4BAAb,GAA8C,IAAhF,CACA,MAAMwwD,aAAa,CAAKp/B,YAAY,CAAClxB,8BAAb,GAAgD,IAAxE,CACA,MAAMmxD,gBAAgB,CAAG9xD,OAAO,CAACszC,eAAR,EAA2BtzC,OAAO,CAAC4xC,oBAA5D,CACA,MAAMyb,YAAY,CAAGtuE,cAAc,CAAE8yC,YAAF,CAAd,EAAkC8E,QAAvD,CAEA;EAEA,GAAKA,QAAQ,EAAI32B,OAAO,CAAC3E,MAAR,GAAmBn5B,SAA/B,GAA8C89B,OAAO,CAAC7S,IAAR,GAAiBxrB,SAAjB,EAA8Bq+B,OAAO,CAAC7S,IAAR,GAAiBvrB,aAA7F,CAAL,CAAoH,CAEnHo+B,OAAO,CAAC3E,MAAR,CAAiBl5B,UAAjB,CAEA8uB,OAAO,CAACC,IAAR,CAAc,yGAAd,EAEA,CAED;EAEA,GAAKsgE,MAAL,CAAc,CAEblD,sBAAsB,CAACE,kBAAvB,CAA4C,EAA5C,CAEA,IAAM,IAAIpgE,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9BkgE,sBAAsB,CAACE,kBAAvB,CAA2CpgE,CAA3C,EAAiDo+D,GAAG,CAACuF,iBAAJ,EAAjD,CAEA,CAED,CAVD,KAUO,CAENzD,sBAAsB,CAACE,kBAAvB,CAA4ChC,GAAG,CAACuF,iBAAJ,EAA5C,CAEA,GAAKF,uBAAL,CAA+B,CAE9B,GAAKn7B,YAAY,CAAC7G,WAAlB,CAAgC,CAE/B,MAAMhzB,QAAQ,CAAGg1B,YAAY,CAAC7xB,OAA9B,CAEA,IAAM,IAAI5R,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAG3D,QAAQ,CAACvO,MAA/B,CAAuCF,CAAC,CAAGoS,EAA3C,CAA+CpS,CAAC,EAAhD,CAAsD,CAErD,MAAM0gE,oBAAoB,CAAG1wB,UAAU,CAACtG,GAAX,CAAgBj7B,QAAQ,CAAEzO,CAAF,CAAxB,CAA7B,CAEA,GAAK0gE,oBAAoB,CAACT,cAArB,GAAwC/gE,SAA7C,CAAyD,CAExDwhE,oBAAoB,CAACT,cAArB,CAAsC7B,GAAG,CAACnC,aAAJ,EAAtC,CAEA1jB,IAAI,CAACkK,MAAL,CAAYh0C,QAAZ,GAEA,CAED,CAED,CAlBD,KAkBO,CAEN5L,OAAO,CAACC,IAAR,CAAc,+GAAd,EAEA,CAED,CA1BD,QA0BY+/D,aAAL,CAAqB,CAE3B,GAAKt6B,QAAL,CAAgB,CAEf23B,sBAAsB,CAACK,8BAAvB,CAAwDnC,GAAG,CAACuF,iBAAJ,EAAxD,CACAzD,sBAAsB,CAACM,wBAAvB,CAAkDpC,GAAG,CAACmF,kBAAJ,EAAlD,CAEAnF,GAAG,CAAC0E,gBAAJ,CAAsB,KAAtB,CAA6B5C,sBAAsB,CAACM,wBAApD,EAEA,MAAMhB,QAAQ,CAAGnB,KAAK,CAAC0D,OAAN,CAAenwD,OAAO,CAAC3E,MAAvB,CAAjB,CACA,MAAMwyD,MAAM,CAAGpB,KAAK,CAAC0D,OAAN,CAAenwD,OAAO,CAAC7S,IAAvB,CAAf,CACA,MAAMijE,gBAAgB,CAAG1C,iBAAiB,CAAE1tD,OAAO,CAACrE,cAAV,CAA0BiyD,QAA1B,CAAoCC,MAApC,CAA4C7tD,OAAO,CAACzE,QAApD,CAA1C,CACA,MAAMmF,OAAO,CAAGywD,sBAAsB,CAAEt/B,YAAF,CAAtC,CACA26B,GAAG,CAAC4E,8BAAJ,CAAoC,KAApC,CAA2C1wD,OAA3C,CAAoD0vD,gBAApD,CAAsEv+B,YAAY,CAAC3hC,KAAnF,CAA0F2hC,YAAY,CAAC1hC,MAAvG,EAEAixC,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8BwD,sBAAsB,CAACK,8BAArD,EACAnC,GAAG,CAAC8E,uBAAJ,CAA6B,KAA7B,CAAoC,KAApC,CAA2C,KAA3C,CAAkDhD,sBAAsB,CAACM,wBAAzE,EACApC,GAAG,CAAC0E,gBAAJ,CAAsB,KAAtB,CAA6B,IAA7B,EAEA,GAAKr/B,YAAY,CAAC5xB,WAAlB,CAAgC,CAE/BquD,sBAAsB,CAACO,wBAAvB,CAAkDrC,GAAG,CAACmF,kBAAJ,EAAlD,CACAZ,wBAAwB,CAAEzC,sBAAsB,CAACO,wBAAzB,CAAmDh9B,YAAnD,CAAiE,IAAjE,CAAxB,CAEA,CAEDuP,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8B,IAA9B,EAGA,CA3BD,KA2BO,CAEN75D,OAAO,CAACC,IAAR,CAAc,iFAAd,EAEA,CAED,CAED,CAED;EAEA,GAAKsgE,MAAL,CAAc,CAEbpwB,KAAK,CAACkpB,WAAN,CAAmB,KAAnB,CAA0BiD,iBAAiB,CAACc,cAA5C,EACAuB,oBAAoB,CAAE,KAAF,CAAS5vD,OAAT,CAAkBqtD,YAAlB,CAApB,CAEA,IAAM,IAAIj/D,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9BuiE,uBAAuB,CAAErC,sBAAsB,CAACE,kBAAvB,CAA2CpgE,CAA3C,CAAF,CAAkDyjC,YAAlD,CAAgE7xB,OAAhE,CAAyE,KAAzE,CAAgF,MAAQ5R,CAAxF,CAAvB,CAEA,CAED,GAAKg/D,2BAA2B,CAAEptD,OAAF,CAAWqtD,YAAX,CAAhC,CAA4D,CAE3DC,cAAc,CAAE,KAAF,CAASttD,OAAT,CAAkB6xB,YAAY,CAAC3hC,KAA/B,CAAsC2hC,YAAY,CAAC1hC,MAAnD,CAAd,CAEA,CAEDixC,KAAK,CAACgrB,aAAN,GAEA,CAnBD,QAmBYyF,uBAAL,CAA+B,CAErC,MAAMh1D,QAAQ,CAAGg1B,YAAY,CAAC7xB,OAA9B,CAEA,IAAM,IAAI5R,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAG3D,QAAQ,CAACvO,MAA/B,CAAuCF,CAAC,CAAGoS,EAA3C,CAA+CpS,CAAC,EAAhD,CAAsD,CAErD,MAAMwiE,UAAU,CAAG/zD,QAAQ,CAAEzO,CAAF,CAA3B,CACA,MAAM0gE,oBAAoB,CAAG1wB,UAAU,CAACtG,GAAX,CAAgB84B,UAAhB,CAA7B,CAEAxvB,KAAK,CAACkpB,WAAN,CAAmB,IAAnB,CAAyBwE,oBAAoB,CAACT,cAA9C,EACAuB,oBAAoB,CAAE,IAAF,CAAQgB,UAAR,CAAoBvD,YAApB,CAApB,CACAsD,uBAAuB,CAAErC,sBAAsB,CAACE,kBAAzB,CAA6C38B,YAA7C,CAA2D++B,UAA3D,CAAuE,MAAQxiE,CAA/E,CAAkF,IAAlF,CAAvB,CAEA,GAAKg/D,2BAA2B,CAAEwD,UAAF,CAAcvD,YAAd,CAAhC,CAA+D,CAE9DC,cAAc,CAAE,IAAF,CAAQsD,UAAR,CAAoB/+B,YAAY,CAAC3hC,KAAjC,CAAwC2hC,YAAY,CAAC1hC,MAArD,CAAd,CAEA,CAED,CAEDixC,KAAK,CAACgrB,aAAN,GAEA,CAvBM,KAuBA,CAEN,IAAI4F,aAAa,CAAG,IAApB,CAEA,GAAKF,gBAAL,CAAwB;EAIvB,GAAKn7B,QAAL,CAAgB,CAEf,MAAMs7B,WAAW,CAAGjyD,OAAO,CAACszC,eAA5B,CACA0e,aAAa,CAAGC,WAAW,CAAG,KAAH,CAAW,KAAtC,CAEA,CALD,KAKO,CAENhhE,OAAO,CAACC,IAAR,CAAc,8EAAd,EAEA,CAED,CAEDkwC,KAAK,CAACkpB,WAAN,CAAmB0H,aAAnB,CAAkCzE,iBAAiB,CAACc,cAApD,EACAuB,oBAAoB,CAAEoC,aAAF,CAAiBhyD,OAAjB,CAA0BqtD,YAA1B,CAApB,CACAsD,uBAAuB,CAAErC,sBAAsB,CAACE,kBAAzB,CAA6C38B,YAA7C,CAA2D7xB,OAA3D,CAAoE,KAApE,CAA2EgyD,aAA3E,CAAvB,CAEA,GAAK5E,2BAA2B,CAAEptD,OAAF,CAAWqtD,YAAX,CAAhC,CAA4D,CAE3DC,cAAc,CAAE0E,aAAF,CAAiBhyD,OAAjB,CAA0B6xB,YAAY,CAAC3hC,KAAvC,CAA8C2hC,YAAY,CAAC1hC,MAA3D,CAAmE0hC,YAAY,CAACjyB,KAAhF,CAAd,CAEA,CAEDwhC,KAAK,CAACgrB,aAAN,GAEA,CAED;EAEA,GAAKv6B,YAAY,CAAC5xB,WAAlB,CAAgC,CAE/ByxD,sBAAsB,CAAE7/B,YAAF,CAAtB,CAEA,CAED,CAED,SAASqgC,wBAAT,CAAmCrgC,YAAnC,CAAkD,CAEjD,MAAMw7B,YAAY,CAAGtuE,cAAc,CAAE8yC,YAAF,CAAd,EAAkC8E,QAAvD,CAEA,MAAM95B,QAAQ,CAAGg1B,YAAY,CAACpxB,4BAAb,GAA8C,IAA9C,CAAqDoxB,YAAY,CAAC7xB,OAAlE,CAA4E,CAAE6xB,YAAY,CAAC7xB,OAAf,CAA7F,CAEA,IAAM,IAAI5R,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAG3D,QAAQ,CAACvO,MAA/B,CAAuCF,CAAC,CAAGoS,EAA3C,CAA+CpS,CAAC,EAAhD,CAAsD,CAErD,MAAM4R,OAAO,CAAGnD,QAAQ,CAAEzO,CAAF,CAAxB,CAEA,GAAKg/D,2BAA2B,CAAEptD,OAAF,CAAWqtD,YAAX,CAAhC,CAA4D,CAE3D,MAAMp/D,MAAM,CAAG4jC,YAAY,CAACC,uBAAb,CAAuC,KAAvC,CAA+C,IAA9D,CACA,MAAMo6B,YAAY,CAAG9tB,UAAU,CAACtG,GAAX,CAAgB93B,OAAhB,EAA0BquD,cAA/C,CAEAjtB,KAAK,CAACkpB,WAAN,CAAmBr8D,MAAnB,CAA2Bi+D,YAA3B,EACAoB,cAAc,CAAEr/D,MAAF,CAAU+R,OAAV,CAAmB6xB,YAAY,CAAC3hC,KAAhC,CAAuC2hC,YAAY,CAAC1hC,MAApD,CAAd,CACAixC,KAAK,CAACgrB,aAAN,GAEA,CAED,CAED,CAED,SAAS+F,6BAAT,CAAwCtgC,YAAxC,CAAuD,CAEtD,GAAKA,YAAY,CAAClxB,8BAAlB,CAAmD,CAElD,GAAKg2B,QAAL,CAAgB,CAEf,MAAMzmC,KAAK,CAAG2hC,YAAY,CAAC3hC,KAA3B,CACA,MAAMC,MAAM,CAAG0hC,YAAY,CAAC1hC,MAA5B,CACA,IAAI2kB,IAAI,CAAG,KAAX,CAEA,GAAK+c,YAAY,CAAC5xB,WAAlB,CAAgC6U,IAAI,EAAI,GAAR,CAChC,GAAK+c,YAAY,CAAC3xB,aAAlB,CAAkC4U,IAAI,EAAI,IAAR,CAElC,MAAMw5C,sBAAsB,CAAGlwB,UAAU,CAACtG,GAAX,CAAgBjG,YAAhB,CAA/B,CAEAuP,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8BwD,sBAAsB,CAACK,8BAArD,EACAvtB,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8BwD,sBAAsB,CAACE,kBAArD,EAEAhC,GAAG,CAAC4F,eAAJ,CAAqB,CAArB,CAAwB,CAAxB,CAA2BliE,KAA3B,CAAkCC,MAAlC,CAA0C,CAA1C,CAA6C,CAA7C,CAAgDD,KAAhD,CAAuDC,MAAvD,CAA+D2kB,IAA/D,CAAqE,IAArE,EAEAssB,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8B,IAA9B,EACA1pB,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8BwD,sBAAsB,CAACK,8BAArD,EAEA,CAnBD,KAmBO,CAEN19D,OAAO,CAACC,IAAR,CAAc,iFAAd,EAEA,CAED,CAED,CAED,SAASigE,sBAAT,CAAiCt/B,YAAjC,CAAgD,CAE/C,OAAS8E,QAAQ,EAAI9E,YAAY,CAAClxB,8BAA3B,CACNnS,IAAI,CAACc,GAAL,CAAUi5C,UAAV,CAAsB1W,YAAY,CAACnxB,OAAnC,CADM,CACyC,CADhD,CAGA,CAED,SAAS0uD,kBAAT,CAA6BpvD,OAA7B,CAAuC,CAEtC,MAAMm2B,KAAK,CAAGwQ,IAAI,CAAC/T,MAAL,CAAYuD,KAA1B,CAEA;EAEA,GAAKu2B,cAAc,CAAC50B,GAAf,CAAoB93B,OAApB,IAAkCm2B,KAAvC,CAA+C,CAE9Cu2B,cAAc,CAACt8D,GAAf,CAAoB4P,OAApB,CAA6Bm2B,KAA7B,EACAn2B,OAAO,CAAC4C,MAAR,GAEA,CAED,CAED;EAEA,IAAIyvD,eAAe,CAAG,KAAtB,CACA,IAAIC,iBAAiB,CAAG,KAAxB,CAEA,SAASvd,gBAAT,CAA2B/0C,OAA3B,CAAoCmvD,IAApC,CAA2C,CAE1C,GAAKnvD,OAAO,EAAIA,OAAO,CAACM,mBAAxB,CAA8C,CAE7C,GAAK+xD,eAAe,GAAK,KAAzB,CAAiC,CAEhCphE,OAAO,CAACC,IAAR,CAAc,mHAAd,EACAmhE,eAAe,CAAG,IAAlB,CAEA,CAEDryD,OAAO,CAAGA,OAAO,CAACA,OAAlB,CAEA,CAEDkvD,YAAY,CAAElvD,OAAF,CAAWmvD,IAAX,CAAZ,CAEA,CAED,SAASla,kBAAT,CAA6Bj1C,OAA7B,CAAsCmvD,IAAtC,CAA6C,CAE5C,GAAKnvD,OAAO,EAAIA,OAAO,CAAC8xB,uBAAxB,CAAkD,CAEjD,GAAKwgC,iBAAiB,GAAK,KAA3B,CAAmC,CAElCrhE,OAAO,CAACC,IAAR,CAAc,0HAAd,EACAohE,iBAAiB,CAAG,IAApB,CAEA,CAEDtyD,OAAO,CAAGA,OAAO,CAACA,OAAlB,CAEA,CAGDwvD,cAAc,CAAExvD,OAAF,CAAWmvD,IAAX,CAAd,CAEA,CAED;EAEA,KAAKzb,mBAAL,CAA2BA,mBAA3B,CACA,KAAKsb,iBAAL,CAAyBA,iBAAzB,CAEA,KAAKE,YAAL,CAAoBA,YAApB,CACA,KAAKha,iBAAL,CAAyBA,iBAAzB,CACA,KAAKF,YAAL,CAAoBA,YAApB,CACA,KAAKwa,cAAL,CAAsBA,cAAtB,CACA,KAAKoC,iBAAL,CAAyBA,iBAAzB,CACA,KAAKM,wBAAL,CAAgCA,wBAAhC,CACA,KAAKC,6BAAL,CAAqCA,6BAArC,CAEA,KAAKpd,gBAAL,CAAwBA,gBAAxB,CACA,KAAKE,kBAAL,CAA0BA,kBAA1B,CAEA,CAED,SAASj2D,UAAT,CAAqBy3C,EAArB,CAAyB/G,UAAzB,CAAqCgH,YAArC,CAAoD,CAEnD,MAAMC,QAAQ,CAAGD,YAAY,CAACC,QAA9B,CAEA,SAASw5B,OAAT,CAAkBjsD,CAAlB,CAAsB,CAErB,IAAI4+B,SAAJ,CAEA,GAAK5+B,CAAC,GAAK7iC,gBAAX,CAA8B,WAAA,CAC9B,GAAK6iC,CAAC,GAAKriC,qBAAX,CAAmC,YAAA,CACnC,GAAKqiC,CAAC,GAAKpiC,qBAAX,CAAmC,YAAA,CACnC,GAAKoiC,CAAC,GAAKniC,oBAAX,CAAkC,YAAA,CAElC,GAAKmiC,CAAC,GAAK5iC,QAAX,CAAsB,WAAA,CACtB,GAAK4iC,CAAC,GAAK3iC,SAAX,CAAuB,WAAA,CACvB,GAAK2iC,CAAC,GAAK1iC,iBAAX,CAA+B,WAAA,CAC/B,GAAK0iC,CAAC,GAAKziC,OAAX,CAAqB,WAAA,CACrB,GAAKyiC,CAAC,GAAKxiC,eAAX,CAA6B,WAAA,CAC7B,GAAKwiC,CAAC,GAAKviC,SAAX,CAAuB,WAAA,CAEvB,GAAKuiC,CAAC,GAAKtiC,aAAX,CAA2B,CAE1B,GAAK+0D,QAAL,CAAgB,WAAA,CAEhBmM,SAAS,CAAGpT,UAAU,CAACoI,GAAX,CAAgB,wBAAhB,CAAZ,CAEA,GAAKgL,SAAS,GAAK,IAAnB,CAA0B,CAEzB,OAAOA,SAAS,CAACyvB,cAAjB,CAEA,CAJD,KAIO,CAEN,WAAA,CAEA,CAED,CAED,GAAKruD,CAAC,GAAKjiC,WAAX,CAAyB,WAAA,CACzB,GAAKiiC,CAAC,GAAKhiC,SAAX,CAAuB,WAAA,CACvB,GAAKgiC,CAAC,GAAK/hC,UAAX,CAAwB,WAAA,CACxB,GAAK+hC,CAAC,GAAK9hC,eAAX,CAA6B,WAAA,CAC7B,GAAK8hC,CAAC,GAAK7hC,oBAAX,CAAkC,WAAA,CAClC,GAAK6hC,CAAC,GAAK5hC,WAAX,CAAyB,WAAA,CACzB,GAAK4hC,CAAC,GAAK3hC,kBAAX,CAAgC,YAAA,CAChC,GAAK2hC,CAAC,GAAK1hC,SAAX,CAAuB,WAAA,CAEvB;EAEA,GAAK0hC,CAAC,GAAKzhC,gBAAX,CAA8B,YAAA,CAC9B,GAAKyhC,CAAC,GAAKxhC,QAAX,CAAsB,YAAA,CACtB,GAAKwhC,CAAC,GAAKvhC,eAAX,CAA6B,YAAA,CAC7B,GAAKuhC,CAAC,GAAKthC,gBAAX,CAA8B,YAAA,CAC9B,GAAKshC,CAAC,GAAKrhC,iBAAX,CAA+B,YAAA,CAE/B,GAAKqhC,CAAC,GAAKphC,oBAAN,EAA8BohC,CAAC,GAAKnhC,qBAApC,EACJmhC,CAAC,GAAKlhC,qBADF,EAC2BkhC,CAAC,GAAKjhC,qBADtC,CAC8D,CAE7D6/D,SAAS,CAAGpT,UAAU,CAACoI,GAAX,CAAgB,+BAAhB,CAAZ,CAEA,GAAKgL,SAAS,GAAK,IAAnB,CAA0B,CAEzB,GAAK5+B,CAAC,GAAKphC,oBAAX,CAAkC,OAAOggE,SAAS,CAAC0vB,4BAAjB,CAClC,GAAKtuD,CAAC,GAAKnhC,qBAAX,CAAmC,OAAO+/D,SAAS,CAAC2vB,6BAAjB,CACnC,GAAKvuD,CAAC,GAAKlhC,qBAAX,CAAmC,OAAO8/D,SAAS,CAAC4vB,6BAAjB,CACnC,GAAKxuD,CAAC,GAAKjhC,qBAAX,CAAmC,OAAO6/D,SAAS,CAAC6vB,6BAAjB,CAEnC,CAPD,KAOO,CAEN,WAAA,CAEA,CAED,CAED,GAAKzuD,CAAC,GAAKhhC,uBAAN,EAAiCghC,CAAC,GAAK/gC,uBAAvC,EACJ+gC,CAAC,GAAK9gC,wBADF,EAC8B8gC,CAAC,GAAK7gC,wBADzC,CACoE,CAEnEy/D,SAAS,CAAGpT,UAAU,CAACoI,GAAX,CAAgB,gCAAhB,CAAZ,CAEA,GAAKgL,SAAS,GAAK,IAAnB,CAA0B,CAEzB,GAAK5+B,CAAC,GAAKhhC,uBAAX,CAAqC,OAAO4/D,SAAS,CAAC8vB,+BAAjB,CACrC,GAAK1uD,CAAC,GAAK/gC,uBAAX,CAAqC,OAAO2/D,SAAS,CAAC+vB,+BAAjB,CACrC,GAAK3uD,CAAC,GAAK9gC,wBAAX,CAAsC,OAAO0/D,SAAS,CAACgwB,gCAAjB,CACtC,GAAK5uD,CAAC,GAAK7gC,wBAAX,CAAsC,OAAOy/D,SAAS,CAACiwB,gCAAjB,CAEtC,CAPD,KAOO,CAEN,WAAA,CAEA,CAED,CAED,GAAK7uD,CAAC,GAAK5gC,eAAX,CAA6B,CAE5Bw/D,SAAS,CAAGpT,UAAU,CAACoI,GAAX,CAAgB,+BAAhB,CAAZ,CAEA,GAAKgL,SAAS,GAAK,IAAnB,CAA0B,CAEzB,OAAOA,SAAS,CAACkwB,yBAAjB,CAEA,CAJD,KAIO,CAEN,WAAA,CAEA,CAED,CAED,GAAK9uD,CAAC,GAAK3gC,eAAN,EAAyB2gC,CAAC,GAAK1gC,oBAApC,CAA2D,CAE1Ds/D,SAAS,CAAGpT,UAAU,CAACoI,GAAX,CAAgB,8BAAhB,CAAZ,CAEA,GAAKgL,SAAS,GAAK,IAAnB,CAA0B,CAEzB,GAAK5+B,CAAC,GAAK3gC,eAAX,CAA6B,OAAOu/D,SAAS,CAACmwB,oBAAjB,CAC7B,GAAK/uD,CAAC,GAAK1gC,oBAAX,CAAkC,OAAOs/D,SAAS,CAACowB,yBAAjB,CAElC,CAED,CAED,GAAKhvD,CAAC,GAAKzgC,oBAAN,EAA8BygC,CAAC,GAAKxgC,oBAApC,EAA4DwgC,CAAC,GAAKvgC,oBAAlE,EACJugC,CAAC,GAAKtgC,oBADF,EAC0BsgC,CAAC,GAAKrgC,oBADhC,EACwDqgC,CAAC,GAAKpgC,oBAD9D,EAEJogC,CAAC,GAAKngC,oBAFF,EAE0BmgC,CAAC,GAAKlgC,oBAFhC,EAEwDkgC,CAAC,GAAKjgC,qBAF9D,EAGJigC,CAAC,GAAKhgC,qBAHF,EAG2BggC,CAAC,GAAK//B,qBAHjC,EAG0D+/B,CAAC,GAAK9/B,sBAHhE,EAIJ8/B,CAAC,GAAK7/B,sBAJF,EAI4B6/B,CAAC,GAAK5/B,sBAJlC,EAKJ4/B,CAAC,GAAK1/B,4BALF,EAKkC0/B,CAAC,GAAKz/B,4BALxC,EAKwEy/B,CAAC,GAAKx/B,4BAL9E,EAMJw/B,CAAC,GAAKv/B,4BANF,EAMkCu/B,CAAC,GAAKt/B,4BANxC,EAMwEs/B,CAAC,GAAKr/B,4BAN9E,EAOJq/B,CAAC,GAAKp/B,4BAPF,EAOkCo/B,CAAC,GAAKn/B,4BAPxC,EAOwEm/B,CAAC,GAAKl/B,6BAP9E,EAQJk/B,CAAC,GAAKj/B,6BARF,EAQmCi/B,CAAC,GAAKh/B,6BARzC,EAQ0Eg/B,CAAC,GAAK/+B,8BARhF,EASJ++B,CAAC,GAAK9+B,8BATF,EASoC8+B,CAAC,GAAK7+B,8BAT/C,CASgF,CAE/Ey9D,SAAS,CAAGpT,UAAU,CAACoI,GAAX,CAAgB,+BAAhB,CAAZ,CAEA,GAAKgL,SAAS,GAAK,IAAnB,CAA0B;EAIzB,OAAO5+B,CAAP,CAEA,CAND,KAMO,CAEN,WAAA,CAEA,CAED,CAED,GAAKA,CAAC,GAAK3/B,gBAAX,CAA8B,CAE7Bu+D,SAAS,CAAGpT,UAAU,CAACoI,GAAX,CAAgB,8BAAhB,CAAZ,CAEA,GAAKgL,SAAS,GAAK,IAAnB,CAA0B;EAIzB,OAAO5+B,CAAP,CAEA,CAND,KAMO,CAEN,WAAA,CAEA,CAED,CAED,GAAKA,CAAC,GAAKliC,kBAAX,CAAgC,CAE/B,GAAK20D,QAAL,CAAgB,YAAA,CAEhBmM,SAAS,CAAGpT,UAAU,CAACoI,GAAX,CAAgB,qBAAhB,CAAZ,CAEA,GAAKgL,SAAS,GAAK,IAAnB,CAA0B,CAEzB,OAAOA,SAAS,CAACqwB,uBAAjB,CAEA,CAJD,KAIO,CAEN,WAAA,CAEA,CAED,CAED,CAED,OAAO,CAAEhD,OAAO,CAAEA,OAAX,CAAP,CAEA,CAED,MAAMlxE,WAAN,SAA0B1O,iBAAkB,CAE3C0f,WAAW,CAAE/B,KAAK,CAAG,EAAV,CAAe,CAEzB,QAEA,KAAKklE,OAAL,CAAellE,KAAf,CAEA,CAR0C,CAY5CjP,WAAW,CAAC2V,SAAZ,CAAsBy+D,aAAtB,CAAsC,IAAtC,CAEA,MAAMn0E,OAAN,SAAoBjT,QAAS,CAE5BgkB,WAAW,EAAG,CAEb,QAEA,KAAK9C,IAAL,CAAY,OAAZ,CAEA,CAR2B,CAY7BjO,OAAK,CAAC0V,SAAN,CAAgB0+D,OAAhB,CAA0B,IAA1B,CAEA,MAAMn0E,UAAU,CAAG,CAAEgO,IAAI,CAAE,MAAR,CAAnB,CAEA,MAAM/N,eAAgB,CAErB6Q,WAAW,EAAG,CAEb,KAAKsjE,UAAL,CAAkB,IAAlB,CACA,KAAKC,KAAL,CAAa,IAAb,CACA,KAAKC,KAAL,CAAa,IAAb,CAEA,CAEDC,YAAY,EAAG,CAEd,GAAK,KAAKD,KAAL,GAAe,IAApB,CAA2B,CAE1B,KAAKA,KAAL,CAAa,IAAIv0E,OAAJ,EAAb,CACA,KAAKu0E,KAAL,CAAW53D,gBAAX,CAA8B,KAA9B,CACA,KAAK43D,KAAL,CAAWx9C,OAAX,CAAqB,KAArB,CAEA,KAAKw9C,KAAL,CAAWE,MAAX,CAAoB,EAApB,CACA,KAAKF,KAAL,CAAWG,UAAX,CAAwB,CAAEC,QAAQ,CAAE,KAAZ,CAAxB,CAEA,CAED,YAAYJ,KAAZ,CAEA,CAEDK,iBAAiB,EAAG,CAEnB,GAAK,KAAKP,UAAL,GAAoB,IAAzB,CAAgC,CAE/B,KAAKA,UAAL,CAAkB,IAAIr0E,OAAJ,EAAlB,CACA,KAAKq0E,UAAL,CAAgB13D,gBAAhB,CAAmC,KAAnC,CACA,KAAK03D,UAAL,CAAgBt9C,OAAhB,CAA0B,KAA1B,CACA,KAAKs9C,UAAL,CAAgBQ,iBAAhB,CAAoC,KAApC,CACA,KAAKR,UAAL,CAAgBS,cAAhB,CAAiC,IAAIvrF,OAAJ,EAAjC,CACA,KAAK8qF,UAAL,CAAgBU,kBAAhB,CAAqC,KAArC,CACA,KAAKV,UAAL,CAAgBW,eAAhB,CAAkC,IAAIzrF,OAAJ,EAAlC,CAEA,CAED,YAAY8qF,UAAZ,CAEA,CAEDY,YAAY,EAAG,CAEd,GAAK,KAAKX,KAAL,GAAe,IAApB,CAA2B,CAE1B,KAAKA,KAAL,CAAa,IAAIt0E,OAAJ,EAAb,CACA,KAAKs0E,KAAL,CAAW33D,gBAAX,CAA8B,KAA9B,CACA,KAAK23D,KAAL,CAAWv9C,OAAX,CAAqB,KAArB,CACA,KAAKu9C,KAAL,CAAWO,iBAAX,CAA+B,KAA/B,CACA,KAAKP,KAAL,CAAWQ,cAAX,CAA4B,IAAIvrF,OAAJ,EAA5B,CACA,KAAK+qF,KAAL,CAAWS,kBAAX,CAAgC,KAAhC,CACA,KAAKT,KAAL,CAAWU,eAAX,CAA6B,IAAIzrF,OAAJ,EAA7B,CAEA,CAED,YAAY+qF,KAAZ,CAEA,CAEDzlE,aAAa,CAAEC,KAAF,CAAU,CAEtB,GAAK,KAAKulE,UAAL,GAAoB,IAAzB,CAAgC,CAE/B,KAAKA,UAAL,CAAgBxlE,aAAhB,CAA+BC,KAA/B,EAEA,CAED,GAAK,KAAKwlE,KAAL,GAAe,IAApB,CAA2B,CAE1B,KAAKA,KAAL,CAAWzlE,aAAX,CAA0BC,KAA1B,EAEA,CAED,GAAK,KAAKylE,KAAL,GAAe,IAApB,CAA2B,CAE1B,KAAKA,KAAL,CAAW1lE,aAAX,CAA0BC,KAA1B,EAEA,CAED,WAAA,CAEA,CAEDomE,UAAU,CAAEC,WAAF,CAAgB,CAEzB,KAAKtmE,aAAL,CAAoB,CAAEZ,IAAI,CAAE,cAAR,CAAwB2Q,IAAI,CAAEu2D,WAA9B,CAApB,EAEA,GAAK,KAAKd,UAAL,GAAoB,IAAzB,CAAgC,CAE/B,KAAKA,UAAL,CAAgBt9C,OAAhB,CAA0B,KAA1B,CAEA,CAED,GAAK,KAAKu9C,KAAL,GAAe,IAApB,CAA2B,CAE1B,KAAKA,KAAL,CAAWv9C,OAAX,CAAqB,KAArB,CAEA,CAED,GAAK,KAAKw9C,KAAL,GAAe,IAApB,CAA2B,CAE1B,KAAKA,KAAL,CAAWx9C,OAAX,CAAqB,KAArB,CAEA,CAED,WAAA,CAEA,CAEDrT,MAAM,CAAEyxD,WAAF,CAAel+B,KAAf,CAAsBm+B,cAAtB,CAAuC,CAE5C,IAAIC,SAAS,CAAG,IAAhB,CACA,IAAIC,QAAQ,CAAG,IAAf,CACA,IAAIC,QAAQ,CAAG,IAAf,CAEA,MAAMC,SAAS,CAAG,KAAKnB,UAAvB,CACA,MAAMoB,IAAI,CAAG,KAAKnB,KAAlB,CACA,MAAMoB,IAAI,CAAG,KAAKnB,KAAlB,CAEA,GAAKY,WAAW,EAAIl+B,KAAK,CAAC4L,OAAN,CAAc8yB,eAAd,GAAkC,iBAAtD,CAA0E,CAEzE,GAAKH,SAAS,GAAK,IAAnB,CAA0B,CAEzBH,SAAS,CAAGp+B,KAAK,CAAC2+B,OAAN,CAAeT,WAAW,CAACU,cAA3B,CAA2CT,cAA3C,CAAZ,CAEA,GAAKC,SAAS,GAAK,IAAnB,CAA0B,CAEzBG,SAAS,CAACt7D,MAAV,CAAiBtF,SAAjB,CAA4BygE,SAAS,CAACS,SAAV,CAAoB57D,MAAhD,EACAs7D,SAAS,CAACt7D,MAAV,CAAiBoa,SAAjB,CAA4BkhD,SAAS,CAACzhD,QAAtC,CAAgDyhD,SAAS,CAAC77D,QAA1D,CAAoE67D,SAAS,CAAC17D,KAA9E,EAEA,GAAKu7D,SAAS,CAACP,cAAf,CAAgC,CAE/BU,SAAS,CAACX,iBAAV,CAA8B,IAA9B,CACAW,SAAS,CAACV,cAAV,CAAyBnjE,IAAzB,CAA+B0jE,SAAS,CAACP,cAAzC,EAEA,CALD,KAKO,CAENU,SAAS,CAACX,iBAAV,CAA8B,KAA9B,CAEA,CAED,GAAKQ,SAAS,CAACL,eAAf,CAAiC,CAEhCQ,SAAS,CAACT,kBAAV,CAA+B,IAA/B,CACAS,SAAS,CAACR,eAAV,CAA0BrjE,IAA1B,CAAgC0jE,SAAS,CAACL,eAA1C,EAEA,CALD,KAKO,CAENQ,SAAS,CAACT,kBAAV,CAA+B,KAA/B,CAEA,CAED,KAAKlmE,aAAL,CAAoB5O,UAApB,EAEA,CAED,CAED,GAAKy1E,IAAI,EAAIP,WAAW,CAACO,IAAzB,CAAgC,CAE/BH,QAAQ,CAAG,IAAX,CAEA,IAAM,MAAMQ,UAAZ,IAA0BZ,WAAW,CAACO,IAAZ,CAAiB/5C,MAAjB,EAA1B,CAAsD;EAGrD,MAAMq6C,SAAS,CAAG/+B,KAAK,CAACg/B,YAAN,CAAoBF,UAApB,CAAgCX,cAAhC,CAAlB,CAEA,GAAKM,IAAI,CAACjB,MAAL,CAAasB,UAAU,CAACG,SAAxB,IAAwC9nE,SAA7C,CAAyD;EAGxD,MAAM+nE,KAAK,CAAG,IAAIn2E,OAAJ,EAAd,CACAm2E,KAAK,CAACx5D,gBAAN,CAAyB,KAAzB,CACAw5D,KAAK,CAACp/C,OAAN,CAAgB,KAAhB,CACA2+C,IAAI,CAACjB,MAAL,CAAasB,UAAU,CAACG,SAAxB,EAAsCC,KAAtC,CACA;EACAT,IAAI,CAAC7jE,GAAL,CAAUskE,KAAV,EAEA,CAED,MAAMA,KAAK,CAAGT,IAAI,CAACjB,MAAL,CAAasB,UAAU,CAACG,SAAxB,CAAd,CAEA,GAAKF,SAAS,GAAK,IAAnB,CAA0B,CAEzBG,KAAK,CAACj8D,MAAN,CAAatF,SAAb,CAAwBohE,SAAS,CAACF,SAAV,CAAoB57D,MAA5C,EACAi8D,KAAK,CAACj8D,MAAN,CAAaoa,SAAb,CAAwB6hD,KAAK,CAACpiD,QAA9B,CAAwCoiD,KAAK,CAACx8D,QAA9C,CAAwDw8D,KAAK,CAACr8D,KAA9D,EACAq8D,KAAK,CAACC,WAAN,CAAoBJ,SAAS,CAACntD,MAA9B,CAEA,CAEDstD,KAAK,CAACp/C,OAAN,CAAgBi/C,SAAS,GAAK,IAA9B,CAEA,CAED;EAEA;EACA,MAAMK,QAAQ,CAAGX,IAAI,CAACjB,MAAL,CAAa,kBAAb,CAAjB,CACA,MAAM6B,QAAQ,CAAGZ,IAAI,CAACjB,MAAL,CAAa,WAAb,CAAjB,CACA,MAAMx8C,QAAQ,CAAGo+C,QAAQ,CAACtiD,QAAT,CAAkB7f,UAAlB,CAA8BoiE,QAAQ,CAACviD,QAAvC,CAAjB,CAEA,MAAMwiD,eAAe,CAAG,IAAxB,CACA,MAAMC,SAAS,CAAG,KAAlB,CAEA,GAAKd,IAAI,CAAChB,UAAL,CAAgBC,QAAhB,EAA4B18C,QAAQ,CAAGs+C,eAAe,CAAGC,SAA9D,CAA0E,CAEzEd,IAAI,CAAChB,UAAL,CAAgBC,QAAhB,CAA2B,KAA3B,CACA,KAAK9lE,aAAL,CAAoB,CACnBZ,IAAI,CAAE,UADa,CAEnBwoE,UAAU,CAAEtB,WAAW,CAACsB,UAFL,CAGnB1nE,MAAM,CAAE,IAHW,CAApB,EAMA,CATD,QASY,CAAE2mE,IAAI,CAAChB,UAAL,CAAgBC,QAAlB,EAA8B18C,QAAQ,EAAIs+C,eAAe,CAAGC,SAAjE,CAA6E,CAEnFd,IAAI,CAAChB,UAAL,CAAgBC,QAAhB,CAA2B,IAA3B,CACA,KAAK9lE,aAAL,CAAoB,CACnBZ,IAAI,CAAE,YADa,CAEnBwoE,UAAU,CAAEtB,WAAW,CAACsB,UAFL,CAGnB1nE,MAAM,CAAE,IAHW,CAApB,EAMA,CAED,CAjED,KAiEO,CAEN,GAAK0mE,IAAI,GAAK,IAAT,EAAiBN,WAAW,CAACuB,SAAlC,CAA8C,CAE7CpB,QAAQ,CAAGr+B,KAAK,CAAC2+B,OAAN,CAAeT,WAAW,CAACuB,SAA3B,CAAsCtB,cAAtC,CAAX,CAEA,GAAKE,QAAQ,GAAK,IAAlB,CAAyB,CAExBG,IAAI,CAACv7D,MAAL,CAAYtF,SAAZ,CAAuB0gE,QAAQ,CAACQ,SAAT,CAAmB57D,MAA1C,EACAu7D,IAAI,CAACv7D,MAAL,CAAYoa,SAAZ,CAAuBmhD,IAAI,CAAC1hD,QAA5B,CAAsC0hD,IAAI,CAAC97D,QAA3C,CAAqD87D,IAAI,CAAC37D,KAA1D,EAEA,GAAKw7D,QAAQ,CAACR,cAAd,CAA+B,CAE9BW,IAAI,CAACZ,iBAAL,CAAyB,IAAzB,CACAY,IAAI,CAACX,cAAL,CAAoBnjE,IAApB,CAA0B2jE,QAAQ,CAACR,cAAnC,EAEA,CALD,KAKO,CAENW,IAAI,CAACZ,iBAAL,CAAyB,KAAzB,CAEA,CAED,GAAKS,QAAQ,CAACN,eAAd,CAAgC,CAE/BS,IAAI,CAACV,kBAAL,CAA0B,IAA1B,CACAU,IAAI,CAACT,eAAL,CAAqBrjE,IAArB,CAA2B2jE,QAAQ,CAACN,eAApC,EAEA,CALD,KAKO,CAENS,IAAI,CAACV,kBAAL,CAA0B,KAA1B,CAEA,CAED,CAED,CAED,CAED,CAED,GAAKS,SAAS,GAAK,IAAnB,CAA0B,CAEzBA,SAAS,CAACz+C,OAAV,CAAsBs+C,SAAS,GAAK,IAApC,CAEA,CAED,GAAKI,IAAI,GAAK,IAAd,CAAqB,CAEpBA,IAAI,CAAC1+C,OAAL,CAAiBu+C,QAAQ,GAAK,IAA9B,CAEA,CAED,GAAKI,IAAI,GAAK,IAAd,CAAqB,CAEpBA,IAAI,CAAC3+C,OAAL,CAAiBw+C,QAAQ,GAAK,IAA9B,CAEA,CAED,WAAA,CAEA,CAhSoB,CAoStB,MAAMp1E,YAAN,SAA2BlY,eAAgB,CAE1C8oB,WAAW,CAAEoiC,QAAF,CAAYoE,EAAZ,CAAiB,CAE3B,QAEA,MAAM1I,KAAK,CAAG,IAAd,CACA,MAAMqT,KAAK,CAAG/O,QAAQ,CAAC+O,KAAvB,CAEA,IAAIW,OAAO,CAAG,IAAd,CACA,IAAI8zB,sBAAsB,CAAG,GAA7B,CAEA,IAAIvB,cAAc,CAAG,IAArB,CACA,IAAIwB,kBAAkB,CAAG,aAAzB,CAEA,IAAIC,IAAI,CAAG,IAAX,CACA,IAAIC,SAAS,CAAG,IAAhB,CACA,IAAIC,aAAa,CAAG,IAApB,CACA,IAAIC,WAAW,CAAG,IAAlB,CACA,IAAIC,WAAW,CAAG,IAAlB,CACA,IAAIlF,aAAa,CAAG,KAApB,CACA,IAAImF,yBAAyB,CAAG,IAAhC,CACA,IAAIC,mBAAmB,CAAG,IAA1B,CACA,IAAIC,mBAAmB,CAAG,IAA1B,CACA,IAAIC,OAAO,CAAG,IAAd,CACA,IAAIC,UAAU,CAAG,IAAjB,CACA,IAAIC,UAAU,CAAG,IAAjB,CAEA,MAAMC,WAAW,CAAG,EAApB,CACA,MAAMC,eAAe,CAAG,IAAIC,GAAJ,EAAxB,CAEA;EAEA,MAAMC,OAAO,CAAG,IAAItmF,iBAAJ,EAAhB,CACAsmF,OAAO,CAACxhD,MAAR,CAAeL,MAAf,CAAuB,CAAvB,EACA6hD,OAAO,CAAC92D,QAAR,CAAmB,IAAI33B,OAAJ,EAAnB,CAEA,MAAM0uF,OAAO,CAAG,IAAIvmF,iBAAJ,EAAhB,CACAumF,OAAO,CAACzhD,MAAR,CAAeL,MAAf,CAAuB,CAAvB,EACA8hD,OAAO,CAAC/2D,QAAR,CAAmB,IAAI33B,OAAJ,EAAnB,CAEA,MAAMgrF,OAAO,CAAG,CAAEyD,OAAF,CAAWC,OAAX,CAAhB,CAEA,MAAMC,QAAQ,CAAG,IAAI93E,WAAJ,EAAjB,CACA83E,QAAQ,CAAC1hD,MAAT,CAAgBL,MAAhB,CAAwB,CAAxB,EACA+hD,QAAQ,CAAC1hD,MAAT,CAAgBL,MAAhB,CAAwB,CAAxB,EAEA,IAAIgiD,iBAAiB,CAAG,IAAxB,CACA,IAAIC,gBAAgB,CAAG,IAAvB,CAEA;EAEA,KAAKC,gBAAL,CAAwB,IAAxB,CACA,KAAK3lC,OAAL,CAAe,KAAf,CAEA,KAAK4lC,YAAL,CAAoB,KAApB,CAEA,KAAKC,aAAL,CAAqB,SAAWvpE,KAAX,CAAmB,CAEvC,IAAIwpE,UAAU,CAAGX,WAAW,CAAE7oE,KAAF,CAA5B,CAEA,GAAKwpE,UAAU,GAAK/pE,SAApB,CAAgC,CAE/B+pE,UAAU,CAAG,IAAIj4E,eAAJ,EAAb,CACAs3E,WAAW,CAAE7oE,KAAF,CAAX,CAAuBwpE,UAAvB,CAEA,CAED,OAAOA,UAAU,CAACvD,iBAAX,EAAP,CAEA,CAbD,CAeA,KAAKwD,iBAAL,CAAyB,SAAWzpE,KAAX,CAAmB,CAE3C,IAAIwpE,UAAU,CAAGX,WAAW,CAAE7oE,KAAF,CAA5B,CAEA,GAAKwpE,UAAU,GAAK/pE,SAApB,CAAgC,CAE/B+pE,UAAU,CAAG,IAAIj4E,eAAJ,EAAb,CACAs3E,WAAW,CAAE7oE,KAAF,CAAX,CAAuBwpE,UAAvB,CAEA,CAED,OAAOA,UAAU,CAAClD,YAAX,EAAP,CAEA,CAbD,CAeA,KAAKoD,OAAL,CAAe,SAAW1pE,KAAX,CAAmB,CAEjC,IAAIwpE,UAAU,CAAGX,WAAW,CAAE7oE,KAAF,CAA5B,CAEA,GAAKwpE,UAAU,GAAK/pE,SAApB,CAAgC,CAE/B+pE,UAAU,CAAG,IAAIj4E,eAAJ,EAAb,CACAs3E,WAAW,CAAE7oE,KAAF,CAAX,CAAuBwpE,UAAvB,CAEA,CAED,OAAOA,UAAU,CAAC3D,YAAX,EAAP,CAEA,CAbD,CAeA;EAEA,SAAS8D,cAAT,CAAyBxpE,KAAzB,CAAiC,CAEhC,MAAMqpE,UAAU,CAAGV,eAAe,CAAC7+B,GAAhB,CAAqB9pC,KAAK,CAACqmE,WAA3B,CAAnB,CAEA,GAAKgD,UAAL,CAAkB,CAEjBA,UAAU,CAACtpE,aAAX,CAA0B,CAAEZ,IAAI,CAAEa,KAAK,CAACb,IAAd,CAAoB2Q,IAAI,CAAE9P,KAAK,CAACqmE,WAAhC,CAA1B,EAEA,CAED,CAED,SAASoD,YAAT,EAAwB,CAEvBd,eAAe,CAACe,OAAhB,CAAyB,SAAWL,UAAX,CAAuBhD,WAAvB,CAAqC,CAE7DgD,UAAU,CAACjD,UAAX,CAAuBC,WAAvB,EAEA,CAJD,EAMAsC,eAAe,CAAC7+C,KAAhB,GAEAk/C,iBAAiB,CAAG,IAApB,CACAC,gBAAgB,CAAG,IAAnB,CAEA;EAEA71B,KAAK,CAACwpB,iBAAN,CAAyB,IAAzB,EACAv4B,QAAQ,CAACM,eAAT,CAA0BN,QAAQ,CAACK,eAAT,EAA1B,EAEA,GAAKujC,aAAL,CAAqBx/B,EAAE,CAAC83B,iBAAH,CAAsB0H,aAAtB,EACrB,GAAKG,yBAAL,CAAiC3/B,EAAE,CAAC83B,iBAAH,CAAsB6H,yBAAtB,EACjC,GAAKC,mBAAL,CAA2B5/B,EAAE,CAACi4B,kBAAH,CAAuB2H,mBAAvB,EAC3B,GAAKC,mBAAL,CAA2B7/B,EAAE,CAACi4B,kBAAH,CAAuB4H,mBAAvB,EAC3BL,aAAa,CAAG,IAAhB,CACAG,yBAAyB,CAAG,IAA5B,CACAC,mBAAmB,CAAG,IAAtB,CACAC,mBAAmB,CAAG,IAAtB,CACAH,WAAW,CAAG,IAAd,CACAD,WAAW,CAAG,IAAd,CACAF,SAAS,CAAG,IAAZ,CACAj0B,OAAO,CAAG,IAAV,CAEA;EAEArnB,SAAS,CAAC2b,IAAV,GAEAtI,KAAK,CAACopC,YAAN,CAAqB,KAArB,CAEAppC,KAAK,CAAChgC,aAAN,CAAqB,CAAEZ,IAAI,CAAE,YAAR,CAArB,EAEA,CAED,KAAKwqE,yBAAL,CAAiC,SAAWtoE,KAAX,CAAmB,CAEnDwmE,sBAAsB,CAAGxmE,KAAzB,CAEA,GAAK0+B,KAAK,CAACopC,YAAN,GAAuB,IAA5B,CAAmC,CAElClmE,OAAO,CAACC,IAAR,CAAc,uEAAd,EAEA,CAED,CAVD,CAYA,KAAK0mE,qBAAL,CAA6B,SAAWvoE,KAAX,CAAmB,CAE/CymE,kBAAkB,CAAGzmE,KAArB,CAEA,GAAK0+B,KAAK,CAACopC,YAAN,GAAuB,IAA5B,CAAmC,CAElClmE,OAAO,CAACC,IAAR,CAAc,0EAAd,EAEA,CAED,CAVD,CAYA,KAAK2mE,iBAAL,CAAyB,UAAY,CAEpC,OAAOvD,cAAP,CAEA,CAJD,CAMA,KAAKwD,YAAL,CAAoB,UAAY,CAE/B,OAAO5B,WAAW,GAAK,IAAhB,CAAuBA,WAAvB,CAAqCC,WAA5C,CAEA,CAJD,CAMA,KAAK4B,UAAL,CAAkB,UAAY,CAE7B,OAAO/B,SAAP,CAEA,CAJD,CAMA,KAAKgC,QAAL,CAAgB,UAAY,CAE3B,OAAOzB,OAAP,CAEA,CAJD,CAMA,KAAKv0B,UAAL,CAAkB,UAAY,CAE7B,OAAOD,OAAP,CAEA,CAJD,CAMA,KAAKk2B,UAAL,CAAkB,eAAiB5oE,KAAjB,CAAyB,CAE1C0yC,OAAO,CAAG1yC,KAAV,CAEA,GAAK0yC,OAAO,GAAK,IAAjB,CAAwB,CAEvBA,OAAO,CAAC70C,gBAAR,CAA0B,QAA1B,CAAoCsqE,cAApC,EACAz1B,OAAO,CAAC70C,gBAAR,CAA0B,aAA1B,CAAyCsqE,cAAzC,EACAz1B,OAAO,CAAC70C,gBAAR,CAA0B,WAA1B,CAAuCsqE,cAAvC,EACAz1B,OAAO,CAAC70C,gBAAR,CAA0B,SAA1B,CAAqCsqE,cAArC,EACAz1B,OAAO,CAAC70C,gBAAR,CAA0B,cAA1B,CAA0CsqE,cAA1C,EACAz1B,OAAO,CAAC70C,gBAAR,CAA0B,YAA1B,CAAwCsqE,cAAxC,EACAz1B,OAAO,CAAC70C,gBAAR,CAA0B,KAA1B,CAAiCuqE,YAAjC,EACA11B,OAAO,CAAC70C,gBAAR,CAA0B,oBAA1B,CAAgDgrE,oBAAhD,EAEA,MAAMrwC,UAAU,CAAG4O,EAAE,CAAC0hC,oBAAH,EAAnB,CAEA,GAAKtwC,UAAU,CAACuwC,YAAX,GAA4B,IAAjC,CAAwC,CAEvC,MAAM3hC,EAAE,CAAC4hC,gBAAH,EAAN,CAEA,CAED,GAAKt2B,OAAO,CAACkhB,WAAR,CAAoB5tC,MAApB,GAA+B/nB,SAApC,CAAgD,CAE/C,MAAMgrE,SAAS,CAAG,CACjBC,SAAS,CAAE1wC,UAAU,CAAC0wC,SADL,CAEjB7kE,KAAK,CAAEm0B,UAAU,CAACn0B,KAFD,CAGjBkM,KAAK,CAAEioB,UAAU,CAACjoB,KAHD,CAIjB0zB,OAAO,CAAEzL,UAAU,CAACyL,OAJH,CAKjBuiC,sBAAsB,CAAEA,sBALP,CAAlB,CAQAM,WAAW,CAAG,IAAIqC,YAAJ,CAAkBz2B,OAAlB,CAA2BtL,EAA3B,CAA+B6hC,SAA/B,CAAd,CAEAv2B,OAAO,CAAC02B,iBAAR,CAA2B,CAAEC,SAAS,CAAEvC,WAAb,CAA3B,EAEA,CAdD,QAcY1/B,EAAE,YAAYkiC,qBAAnB,CAA2C;EAGjD;EAEA,MAAML,SAAS,CAAG,CACjBC,SAAS,CAAE,IADM,CAEjB7kE,KAAK,CAAEm0B,UAAU,CAACn0B,KAFD,CAGjBkM,KAAK,CAAEioB,UAAU,CAACjoB,KAHD,CAIjB0zB,OAAO,CAAEzL,UAAU,CAACyL,OAJH,CAKjBuiC,sBAAsB,CAAEA,sBALP,CAAlB,CAQAM,WAAW,CAAG,IAAIqC,YAAJ,CAAkBz2B,OAAlB,CAA2BtL,EAA3B,CAA+B6hC,SAA/B,CAAd,CAEAv2B,OAAO,CAAC02B,iBAAR,CAA2B,CAAEpjD,MAAM,CAAE,CAAE8gD,WAAF,CAAV,CAA3B,EAEA,CAjBM,KAiBA,CAENlF,aAAa,CAAGppC,UAAU,CAAC0wC,SAA3B,CACA,IAAIK,WAAW,CAAG,IAAlB,CAGA,GAAK/wC,UAAU,CAACjoB,KAAhB,CAAwB,CAEvB62D,UAAU,CAAG,GAAb,CAEA,GAAK5uC,UAAU,CAACyL,OAAhB,CAA0BmjC,UAAU,EAAI,IAAd,CAE1BD,UAAU,CAAG3uC,UAAU,CAACyL,OAAX,CAAqB,KAArB,CAA6B,KAA1C,CACAslC,WAAW,CAAG/wC,UAAU,CAACyL,OAAX,CAAqB,KAArB,CAA6B,KAA3C,CAEA,CAED,MAAMulC,mBAAmB,CAAG,CAC3BC,WAAW,CAAEjxC,UAAU,CAACn0B,KAAX,CAAmB,KAAnB,CAA2B,KADb,CAE3BklE,WAAW,CAAEA,WAFc,CAG3BxX,WAAW,CAAEyU,sBAHc,CAA5B,CAMAG,SAAS,CAAG,IAAI+C,cAAJ,CAAoBh3B,OAApB,CAA6BtL,EAA7B,CAAZ,CAEAy/B,WAAW,CAAGF,SAAS,CAACgD,qBAAV,CAAiCH,mBAAjC,CAAd,CAEA5C,aAAa,CAAGx/B,EAAE,CAACs7B,iBAAH,EAAhB,CAEAhwB,OAAO,CAAC02B,iBAAR,CAA2B,CAAEpjD,MAAM,CAAE,CAAE6gD,WAAF,CAAV,CAA3B,EAEA,GAAKjF,aAAL,CAAqB,CAEpBmF,yBAAyB,CAAG3/B,EAAE,CAACs7B,iBAAH,EAA5B,CACAsE,mBAAmB,CAAG5/B,EAAE,CAACk7B,kBAAH,EAAtB,CACAl7B,EAAE,CAACy6B,gBAAH,CAAqB,KAArB,CAA4BmF,mBAA5B,EACA5/B,EAAE,CAAC26B,8BAAH,CACC,KADD,CAEC,CAFD,CAGC,KAHD,CAIC8E,WAAW,CAAC+C,YAJb,CAKC/C,WAAW,CAACgD,aALb,EAMA93B,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8BsL,yBAA9B,EACA3/B,EAAE,CAAC66B,uBAAH,CAA4B,KAA5B,CAAmC,KAAnC,CAA0C,KAA1C,CAAiD+E,mBAAjD,EACA5/B,EAAE,CAACy6B,gBAAH,CAAqB,KAArB,CAA4B,IAA5B,EAEA,GAAK0H,WAAW,GAAK,IAArB,CAA4B,CAE3BtC,mBAAmB,CAAG7/B,EAAE,CAACk7B,kBAAH,EAAtB,CACAl7B,EAAE,CAACy6B,gBAAH,CAAqB,KAArB,CAA4BoF,mBAA5B,EACA7/B,EAAE,CAAC26B,8BAAH,CAAmC,KAAnC,CAA0C,CAA1C,CAA6CwH,WAA7C,CAA0D1C,WAAW,CAAC+C,YAAtE,CAAoF/C,WAAW,CAACgD,aAAhG,EACAziC,EAAE,CAAC66B,uBAAH,CAA4B,KAA5B,CAAmCkF,UAAnC,CAA+C,KAA/C,CAAsDF,mBAAtD,EACA7/B,EAAE,CAACy6B,gBAAH,CAAqB,KAArB,CAA4B,IAA5B,EAEA,CAED9vB,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8B,IAA9B,EAEA,CAED,CAEDwJ,cAAc,CAAG,MAAMvyB,OAAO,CAACo3B,qBAAR,CAA+BrD,kBAA/B,CAAvB,CAEAp7C,SAAS,CAAC8b,UAAV,CAAsBuL,OAAtB,EACArnB,SAAS,CAACyN,KAAV,GAEA4F,KAAK,CAACopC,YAAN,CAAqB,IAArB,CAEAppC,KAAK,CAAChgC,aAAN,CAAqB,CAAEZ,IAAI,CAAE,cAAR,CAArB,EAEA,CAED,CA/HD,CAiIA,SAAS+qE,oBAAT,CAA+BlqE,KAA/B,CAAuC,CAEtC,MAAMorE,YAAY,CAAGr3B,OAAO,CAACq3B,YAA7B,CAEA;EAEA,IAAM,IAAIhrE,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGsoE,WAAW,CAACpoE,MAAjC,CAAyCF,CAAC,EAA1C,CAAgD,CAE/CuoE,eAAe,CAACvmE,GAAhB,CAAqBgpE,YAAY,CAAEhrE,CAAF,CAAjC,CAAwCsoE,WAAW,CAAEtoE,CAAF,CAAnD,EAEA,CAED;EAEA,IAAM,IAAIA,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGJ,KAAK,CAACqrE,OAAN,CAAc/qE,MAAnC,CAA2CF,CAAC,EAA5C,CAAkD,CAEjD,MAAMimE,WAAW,CAAGrmE,KAAK,CAACqrE,OAAN,CAAejrE,CAAf,CAApB,CACA,MAAMipE,UAAU,CAAGV,eAAe,CAAC7+B,GAAhB,CAAqBu8B,WAArB,CAAnB,CAEA,GAAKgD,UAAL,CAAkB,CAEjBA,UAAU,CAACtpE,aAAX,CAA0B,CAAEZ,IAAI,CAAE,cAAR,CAAwB2Q,IAAI,CAAEu2D,WAA9B,CAA1B,EACAsC,eAAe,CAAC3+B,MAAhB,CAAwBq8B,WAAxB,EAEA,CAED,CAED;EAEA,IAAM,IAAIjmE,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGJ,KAAK,CAACsrE,KAAN,CAAYhrE,MAAjC,CAAyCF,CAAC,EAA1C,CAAgD,CAE/C,MAAMimE,WAAW,CAAGrmE,KAAK,CAACsrE,KAAN,CAAalrE,CAAb,CAApB,CACA,MAAMipE,UAAU,CAAGV,eAAe,CAAC7+B,GAAhB,CAAqBu8B,WAArB,CAAnB,CAEA,GAAKgD,UAAL,CAAkB,CAEjBA,UAAU,CAACtpE,aAAX,CAA0B,CAAEZ,IAAI,CAAE,WAAR,CAAqB2Q,IAAI,CAAEu2D,WAA3B,CAA1B,EAEA,CAED,CAED,CAED;EAEA,MAAMkF,UAAU,CAAG,IAAI9wF,OAAJ,EAAnB,CACA,MAAM+wF,UAAU,CAAG,IAAI/wF,OAAJ,EAAnB,CAEA;EACF;EACA;EACA;EACA;EACA,KACE,SAASgxF,sBAAT,CAAiCjzD,MAAjC,CAAyCqwD,OAAzC,CAAkDC,OAAlD,CAA4D,CAE3DyC,UAAU,CAACnxD,qBAAX,CAAkCyuD,OAAO,CAAChwD,WAA1C,EACA2yD,UAAU,CAACpxD,qBAAX,CAAkC0uD,OAAO,CAACjwD,WAA1C,EAEA,MAAM6yD,GAAG,CAAGH,UAAU,CAACnmE,UAAX,CAAuBomE,UAAvB,CAAZ,CAEA,MAAMG,KAAK,CAAG9C,OAAO,CAACnwD,gBAAR,CAAyBxU,QAAvC,CACA,MAAM0nE,KAAK,CAAG9C,OAAO,CAACpwD,gBAAR,CAAyBxU,QAAvC,CAEA;EACA;EACA;EACA,MAAM+hB,IAAI,CAAG0lD,KAAK,CAAE,EAAF,CAAL,EAAgBA,KAAK,CAAE,EAAF,CAAL,CAAc,CAA9B,CAAb,CACA,MAAMzlD,GAAG,CAAGylD,KAAK,CAAE,EAAF,CAAL,EAAgBA,KAAK,CAAE,EAAF,CAAL,CAAc,CAA9B,CAAZ,CACA,MAAME,MAAM,CAAG,CAAEF,KAAK,CAAE,CAAF,CAAL,CAAa,CAAf,EAAqBA,KAAK,CAAE,CAAF,CAAzC,CACA,MAAMG,SAAS,CAAG,CAAEH,KAAK,CAAE,CAAF,CAAL,CAAa,CAAf,EAAqBA,KAAK,CAAE,CAAF,CAA5C,CAEA,MAAMI,OAAO,CAAG,CAAEJ,KAAK,CAAE,CAAF,CAAL,CAAa,CAAf,EAAqBA,KAAK,CAAE,CAAF,CAA1C,CACA,MAAMK,QAAQ,CAAG,CAAEJ,KAAK,CAAE,CAAF,CAAL,CAAa,CAAf,EAAqBA,KAAK,CAAE,CAAF,CAA3C,CACA,MAAM/lD,IAAI,CAAGI,IAAI,CAAG8lD,OAApB,CACA,MAAMjmD,KAAK,CAAGG,IAAI,CAAG+lD,QAArB,CAEA;EACA;EACA,MAAMC,OAAO,CAAGP,GAAG,EAAK,CAAEK,OAAF,CAAYC,QAAjB,CAAnB,CACA,MAAME,OAAO,CAAGD,OAAO,CAAG,CAAEF,OAA5B,CAEA;EACAlD,OAAO,CAAChwD,WAAR,CAAoB2M,SAApB,CAA+BhN,MAAM,CAACyM,QAAtC,CAAgDzM,MAAM,CAAC/D,UAAvD,CAAmE+D,MAAM,CAACxN,KAA1E,EACAwN,MAAM,CAAC4Q,UAAP,CAAmB8iD,OAAnB,EACA1zD,MAAM,CAAC8Q,UAAP,CAAmB2iD,OAAnB,EACAzzD,MAAM,CAACK,WAAP,CAAmBoK,OAAnB,CAA4BzK,MAAM,CAACyM,QAAnC,CAA6CzM,MAAM,CAAC/D,UAApD,CAAgE+D,MAAM,CAACxN,KAAvE,EACAwN,MAAM,CAACC,kBAAP,CAA0B5V,IAA1B,CAAgC2V,MAAM,CAACK,WAAvC,EAAqDhP,MAArD,GAEA;EACA;EACA;EACA,MAAMsiE,KAAK,CAAGlmD,IAAI,CAAGgmD,OAArB,CACA,MAAMG,IAAI,CAAGlmD,GAAG,CAAG+lD,OAAnB,CACA,MAAMI,KAAK,CAAGxmD,IAAI,CAAGqmD,OAArB,CACA,MAAMI,MAAM,CAAGxmD,KAAK,EAAK4lD,GAAG,CAAGQ,OAAX,CAApB,CACA,MAAMK,IAAI,CAAGV,MAAM,CAAG3lD,GAAT,CAAekmD,IAAf,CAAsBD,KAAnC,CACA,MAAMK,OAAO,CAAGV,SAAS,CAAG5lD,GAAZ,CAAkBkmD,IAAlB,CAAyBD,KAAzC,CAEA3zD,MAAM,CAACE,gBAAP,CAAwBkN,eAAxB,CAAyCymD,KAAzC,CAAgDC,MAAhD,CAAwDC,IAAxD,CAA8DC,OAA9D,CAAuEL,KAAvE,CAA8EC,IAA9E,EAEA,CAED,SAASK,YAAT,CAAuBj0D,MAAvB,CAA+B8O,MAA/B,CAAwC,CAEvC,GAAKA,MAAM,GAAK,IAAhB,CAAuB,CAEtB9O,MAAM,CAACK,WAAP,CAAmBhW,IAAnB,CAAyB2V,MAAM,CAACpN,MAAhC,EAEA,CAJD,KAIO,CAENoN,MAAM,CAACK,WAAP,CAAmB3Q,gBAAnB,CAAqCof,MAAM,CAACzO,WAA5C,CAAyDL,MAAM,CAACpN,MAAhE,EAEA,CAEDoN,MAAM,CAACC,kBAAP,CAA0B5V,IAA1B,CAAgC2V,MAAM,CAACK,WAAvC,EAAqDhP,MAArD,GAEA,CAED,KAAK4iE,YAAL,CAAoB,SAAWj0D,MAAX,CAAoB,CAEvC,GAAKu7B,OAAO,GAAK,IAAjB,CAAwB,OAExBg1B,QAAQ,CAAC9iD,IAAT,CAAgB6iD,OAAO,CAAC7iD,IAAR,CAAe4iD,OAAO,CAAC5iD,IAAR,CAAezN,MAAM,CAACyN,IAArD,CACA8iD,QAAQ,CAAC7iD,GAAT,CAAe4iD,OAAO,CAAC5iD,GAAR,CAAc2iD,OAAO,CAAC3iD,GAAR,CAAc1N,MAAM,CAAC0N,GAAlD,CAEA,GAAK8iD,iBAAiB,GAAKD,QAAQ,CAAC9iD,IAA/B,EAAuCgjD,gBAAgB,GAAKF,QAAQ,CAAC7iD,GAA1E,CAAgF;EAI/E6tB,OAAO,CAAC02B,iBAAR,CAA2B,CAC1BiC,SAAS,CAAE3D,QAAQ,CAAC9iD,IADM,CAE1B0mD,QAAQ,CAAE5D,QAAQ,CAAC7iD,GAFO,CAA3B,EAKA8iD,iBAAiB,CAAGD,QAAQ,CAAC9iD,IAA7B,CACAgjD,gBAAgB,CAAGF,QAAQ,CAAC7iD,GAA5B,CAEA,CAED,MAAMoB,MAAM,CAAG9O,MAAM,CAAC8O,MAAtB,CACA,MAAM89C,OAAO,CAAG2D,QAAQ,CAAC3D,OAAzB,CAEAqH,YAAY,CAAE1D,QAAF,CAAYzhD,MAAZ,CAAZ,CAEA,IAAM,IAAIlnB,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGglE,OAAO,CAAC9kE,MAA7B,CAAqCF,CAAC,EAAtC,CAA4C,CAE3CqsE,YAAY,CAAErH,OAAO,CAAEhlE,CAAF,CAAT,CAAgBknB,MAAhB,CAAZ,CAEA,CAEDyhD,QAAQ,CAAClwD,WAAT,CAAqB2M,SAArB,CAAgCujD,QAAQ,CAAC9jD,QAAzC,CAAmD8jD,QAAQ,CAACt0D,UAA5D,CAAwEs0D,QAAQ,CAAC/9D,KAAjF,EAEA;EAEAwN,MAAM,CAACyM,QAAP,CAAgBpiB,IAAhB,CAAsBkmE,QAAQ,CAAC9jD,QAA/B,EACAzM,MAAM,CAAC/D,UAAP,CAAkB5R,IAAlB,CAAwBkmE,QAAQ,CAACt0D,UAAjC,EACA+D,MAAM,CAACxN,KAAP,CAAanI,IAAb,CAAmBkmE,QAAQ,CAAC/9D,KAA5B,EACAwN,MAAM,CAACpN,MAAP,CAAcvI,IAAd,CAAoBkmE,QAAQ,CAAC39D,MAA7B,EACAoN,MAAM,CAACK,WAAP,CAAmBhW,IAAnB,CAAyBkmE,QAAQ,CAAClwD,WAAlC,EAEA,MAAM6D,QAAQ,CAAGlE,MAAM,CAACkE,QAAxB,CAEA,IAAM,IAAItc,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGqc,QAAQ,CAACpc,MAA9B,CAAsCF,CAAC,CAAGC,CAA1C,CAA6CD,CAAC,EAA9C,CAAoD,CAEnDsc,QAAQ,CAAEtc,CAAF,CAAR,CAAcyqB,iBAAd,CAAiC,IAAjC,EAEA,CAED;EAEA,GAAKu6C,OAAO,CAAC9kE,MAAR,GAAmB,CAAxB,CAA4B,CAE3BmrE,sBAAsB,CAAE1C,QAAF,CAAYF,OAAZ,CAAqBC,OAArB,CAAtB,CAEA,CAJD,KAIO;EAINC,QAAQ,CAACrwD,gBAAT,CAA0B7V,IAA1B,CAAgCgmE,OAAO,CAACnwD,gBAAxC,EAEA,CAED,CAhED,CAkEA,KAAKk0D,SAAL,CAAiB,UAAY,CAE5B,OAAO7D,QAAP,CAEA,CAJD,CAMA,KAAK8D,YAAL,CAAoB,UAAY,CAE/B,GAAK3E,WAAW,GAAK,IAArB,CAA4B,CAE3B,OAAOA,WAAW,CAAC4E,cAAnB,CAEA,CAED,GAAK3E,WAAW,GAAK,IAArB,CAA4B,CAE3B,OAAOA,WAAW,CAAC2E,cAAnB,CAEA,CAED,OAAOxtE,SAAP,CAEA,CAhBD,CAkBA,KAAKytE,YAAL,CAAoB,SAAWC,SAAX,CAAuB;EAG1C;EAEA,GAAK9E,WAAW,GAAK,IAArB,CAA4B,CAE3BA,WAAW,CAAC4E,cAAZ,CAA6BE,SAA7B,CAEA,CAED,GAAK7E,WAAW,GAAK,IAAhB,EAAwBA,WAAW,CAAC2E,cAAZ,GAA+BxtE,SAA5D,CAAwE,CAEvE6oE,WAAW,CAAC2E,cAAZ,CAA6BE,SAA7B,CAEA,CAED,CAjBD,CAmBA;EAEA,IAAIC,wBAAwB,CAAG,IAA/B,CAEA,SAAShlC,gBAAT,CAA2BC,IAA3B,CAAiCC,KAAjC,CAAyC,CAExC4/B,IAAI,CAAG5/B,KAAK,CAAC+kC,aAAN,CAAqB5G,cAArB,CAAP,CACAiC,OAAO,CAAGpgC,KAAV,CAEA,GAAK4/B,IAAI,GAAK,IAAd,CAAqB,CAEpB,MAAMoF,KAAK,CAAGpF,IAAI,CAACoF,KAAnB,CAEA,GAAKhF,WAAW,GAAK,IAArB,CAA4B,CAE3B/0B,KAAK,CAACwpB,iBAAN,CAAyBuL,WAAW,CAACtL,WAArC,EAEA,CAED,IAAIuQ,mBAAmB,CAAG,KAA1B,CAEA;EAEA,GAAKD,KAAK,CAAC7sE,MAAN,GAAiByoE,QAAQ,CAAC3D,OAAT,CAAiB9kE,MAAvC,CAAgD,CAE/CyoE,QAAQ,CAAC3D,OAAT,CAAiB9kE,MAAjB,CAA0B,CAA1B,CAEA8sE,mBAAmB,CAAG,IAAtB,CAEA,CAED,IAAM,IAAIhtE,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG+sE,KAAK,CAAC7sE,MAA3B,CAAmCF,CAAC,EAApC,CAA0C,CAEzC,MAAMmiC,IAAI,CAAG4qC,KAAK,CAAE/sE,CAAF,CAAlB,CAEA,IAAI2R,QAAQ,CAAG,IAAf,CAEA,GAAKo2D,WAAW,GAAK,IAArB,CAA4B,CAE3Bp2D,QAAQ,CAAGo2D,WAAW,CAAC1Q,WAAZ,CAAyBl1B,IAAzB,CAAX,CAEA,CAJD,KAIO,CAEN,MAAM8qC,UAAU,CAAGrF,SAAS,CAACsF,eAAV,CAA2BpF,WAA3B,CAAwC3lC,IAAxC,CAAnB,CAEA6Q,KAAK,CAACwpB,iBAAN,CAAyBqL,aAAzB,EAEA,GAAKoF,UAAU,CAACE,mBAAX,GAAmCjuE,SAAxC,CAAoD,CAEnDmpC,EAAE,CAACq6B,oBAAH,CAAyB,KAAzB,CAAgC0F,UAAhC,CAA4C,IAA5C,CAAkD6E,UAAU,CAACE,mBAA7D,CAAkF,CAAlF,EAEA,CAED9kC,EAAE,CAACq6B,oBAAH,CAAyB,KAAzB,CAAgC,KAAhC,CAAuC,IAAvC,CAA6CuK,UAAU,CAACG,YAAxD,CAAsE,CAAtE,EAEAz7D,QAAQ,CAAGs7D,UAAU,CAACt7D,QAAtB,CAEA,CAED,MAAMyG,MAAM,CAAG4sD,OAAO,CAAEhlE,CAAF,CAAtB,CAEAoY,MAAM,CAACpN,MAAP,CAActF,SAAd,CAAyBy8B,IAAI,CAACykC,SAAL,CAAe57D,MAAxC,EACAoN,MAAM,CAACE,gBAAP,CAAwB5S,SAAxB,CAAmCy8B,IAAI,CAAC7pB,gBAAxC,EACAF,MAAM,CAACzG,QAAP,CAAgB3P,GAAhB,CAAqB2P,QAAQ,CAACrQ,CAA9B,CAAiCqQ,QAAQ,CAACpQ,CAA1C,CAA6CoQ,QAAQ,CAAC7P,KAAtD,CAA6D6P,QAAQ,CAAC5P,MAAtE,EAEA,GAAK/B,CAAC,GAAK,CAAX,CAAe,CAEd2oE,QAAQ,CAAC39D,MAAT,CAAgBvI,IAAhB,CAAsB2V,MAAM,CAACpN,MAA7B,EAEA,CAED,GAAKgiE,mBAAmB,GAAK,IAA7B,CAAoC,CAEnCrE,QAAQ,CAAC3D,OAAT,CAAiB3lE,IAAjB,CAAuB+Y,MAAvB,EAEA,CAED,CAED,GAAKyqD,aAAL,CAAqB,CAEpB7vB,KAAK,CAACwpB,iBAAN,CAAyBwL,yBAAzB,EAEA,GAAKK,UAAU,GAAK,IAApB,CAA2BhgC,EAAE,CAAC3e,KAAH,CAAU2+C,UAAV,EAE3B,CAED,CAED;EAEA,MAAM2C,YAAY,CAAGr3B,OAAO,CAACq3B,YAA7B,CAEA,IAAM,IAAIhrE,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGsoE,WAAW,CAACpoE,MAAjC,CAAyCF,CAAC,EAA1C,CAAgD,CAE/C,MAAMipE,UAAU,CAAGX,WAAW,CAAEtoE,CAAF,CAA9B,CACA,MAAMimE,WAAW,CAAG+E,YAAY,CAAEhrE,CAAF,CAAhC,CAEAipE,UAAU,CAACz0D,MAAX,CAAmByxD,WAAnB,CAAgCl+B,KAAhC,CAAuCm+B,cAAvC,EAEA,CAED,GAAK2G,wBAAL,CAAgCA,wBAAwB,CAAE/kC,IAAF,CAAQC,KAAR,CAAxB,CAEhC,GAAK86B,aAAL,CAAqB,CAEpB,MAAM/gE,KAAK,CAAGgmE,WAAW,CAAC+C,YAA1B,CACA,MAAM9oE,MAAM,CAAG+lE,WAAW,CAACgD,aAA3B,CAEA93B,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8BsL,yBAA9B,EACAh1B,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8BmL,aAA9B,EACA;EACAx/B,EAAE,CAACglC,qBAAH,CAA0B,KAA1B,CAAiC,CAAEjF,UAAF,CAAjC,EACA//B,EAAE,CAACglC,qBAAH,CAA0B,KAA1B,CAAiC,CAAEjF,UAAF,CAAjC,EACA//B,EAAE,CAAC27B,eAAH,CAAoB,CAApB,CAAuB,CAAvB,CAA0BliE,KAA1B,CAAiCC,MAAjC,CAAyC,CAAzC,CAA4C,CAA5C,CAA+CD,KAA/C,CAAsDC,MAAtD,CAA8D,KAA9D,CAAqE,IAArE,EACA;EACAsmC,EAAE,CAACglC,qBAAH,CAA0B,KAA1B,CAAiC,CAAE,KAAF,CAAjC,EACAr6B,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8B,IAA9B,EACA1pB,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8B,IAA9B,EAEA1pB,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8BsL,yBAA9B,EAEA,CAEDG,OAAO,CAAG,IAAV,CAEA,CAED,MAAM77C,SAAS,CAAG,IAAI1pC,cAAJ,EAAlB,CAEA0pC,SAAS,CAAC6b,gBAAV,CAA4BN,gBAA5B,EAEA,KAAKM,gBAAL,CAAwB,SAAW/wB,QAAX,CAAsB,CAE7Cy1D,wBAAwB,CAAGz1D,QAA3B,CAEA,CAJD,CAMA,KAAKjI,OAAL,CAAe,UAAY,EAA3B,CAEA,CAtsByC,CA0sB3C,SAASje,cAAT,CAAyB8+C,UAAzB,CAAsC,CAErC,SAASs9B,kBAAT,CAA6BvsC,QAA7B,CAAuCpS,GAAvC,CAA6C,CAE5CoS,QAAQ,CAAC6O,QAAT,CAAkB3uC,KAAlB,CAAwBwB,IAAxB,CAA8BksB,GAAG,CAAC8C,KAAlC,EAEA,GAAK9C,GAAG,CAAC4+C,KAAT,CAAiB,CAEhBxsC,QAAQ,CAAC2O,OAAT,CAAiBzuC,KAAjB,CAAyB0tB,GAAG,CAAC9I,IAA7B,CACAkb,QAAQ,CAAC4O,MAAT,CAAgB1uC,KAAhB,CAAwB0tB,GAAG,CAAC7I,GAA5B,CAEA,CALD,QAKY6I,GAAG,CAACmhC,SAAT,CAAqB,CAE3B/uB,QAAQ,CAAC0O,UAAT,CAAoBxuC,KAApB,CAA4B0tB,GAAG,CAAC6+C,OAAhC,CAEA,CAED,CAED,SAASC,uBAAT,CAAkC1sC,QAAlC,CAA4C3U,QAA5C,CAAsDshD,UAAtD,CAAkE3rE,MAAlE,CAA0E4rE,wBAA1E,CAAqG,CAEpG,GAAKvhD,QAAQ,CAAC4L,mBAAd,CAAoC,CAEnC41C,qBAAqB,CAAE7sC,QAAF,CAAY3U,QAAZ,CAArB,CAEA,CAJD,QAIYA,QAAQ,CAACyhD,qBAAd,CAAsC,CAE5CD,qBAAqB,CAAE7sC,QAAF,CAAY3U,QAAZ,CAArB,CACA0hD,sBAAsB,CAAE/sC,QAAF,CAAY3U,QAAZ,CAAtB,CAEA,CALM,QAKKA,QAAQ,CAAC2hD,kBAAd,CAAmC,CAEzCH,qBAAqB,CAAE7sC,QAAF,CAAY3U,QAAZ,CAArB,CACA4hD,mBAAmB,CAAEjtC,QAAF,CAAY3U,QAAZ,CAAnB,CAEA,CALM,QAKKA,QAAQ,CAAC6hD,mBAAd,CAAoC,CAE1CL,qBAAqB,CAAE7sC,QAAF,CAAY3U,QAAZ,CAArB,CACA8hD,oBAAoB,CAAEntC,QAAF,CAAY3U,QAAZ,CAApB,CAEA,CALM,QAKKA,QAAQ,CAACujC,sBAAd,CAAuC,CAE7Cie,qBAAqB,CAAE7sC,QAAF,CAAY3U,QAAZ,CAArB,CAEA,GAAKA,QAAQ,CAAC+hD,sBAAd,CAAuC,CAEtCC,uBAAuB,CAAErtC,QAAF,CAAY3U,QAAZ,CAAsBuhD,wBAAtB,CAAvB,CAEA,CAJD,KAIO,CAENU,uBAAuB,CAAEttC,QAAF,CAAY3U,QAAZ,CAAvB,CAEA,CAED,CAdM,QAcKA,QAAQ,CAACkiD,oBAAd,CAAqC,CAE3CV,qBAAqB,CAAE7sC,QAAF,CAAY3U,QAAZ,CAArB,CACAmiD,qBAAqB,CAAExtC,QAAF,CAAY3U,QAAZ,CAArB,CAEA,CALM,QAKKA,QAAQ,CAAC0oC,mBAAd,CAAoC,CAE1C8Y,qBAAqB,CAAE7sC,QAAF,CAAY3U,QAAZ,CAArB,CACAoiD,oBAAoB,CAAEztC,QAAF,CAAY3U,QAAZ,CAApB,CAEA,CALM,QAKKA,QAAQ,CAAC2oC,sBAAd,CAAuC,CAE7C6Y,qBAAqB,CAAE7sC,QAAF,CAAY3U,QAAZ,CAArB,CACAqiD,uBAAuB,CAAE1tC,QAAF,CAAY3U,QAAZ,CAAvB,CAEA,CALM,QAKKA,QAAQ,CAACsiD,oBAAd,CAAqC,CAE3Cd,qBAAqB,CAAE7sC,QAAF,CAAY3U,QAAZ,CAArB,CACAuiD,qBAAqB,CAAE5tC,QAAF,CAAY3U,QAAZ,CAArB,CAEA,CALM,QAKKA,QAAQ,CAACwiD,mBAAd,CAAoC,CAE1CC,mBAAmB,CAAE9tC,QAAF,CAAY3U,QAAZ,CAAnB,CAEA,GAAKA,QAAQ,CAAC0iD,oBAAd,CAAqC,CAEpCC,mBAAmB,CAAEhuC,QAAF,CAAY3U,QAAZ,CAAnB,CAEA,CAED,CAVM,QAUKA,QAAQ,CAAC4iD,gBAAd,CAAiC,CAEvCC,qBAAqB,CAAEluC,QAAF,CAAY3U,QAAZ,CAAsBshD,UAAtB,CAAkC3rE,MAAlC,CAArB,CAEA,CAJM,QAIKqqB,QAAQ,CAAC8iD,gBAAd,CAAiC,CAEvCC,sBAAsB,CAAEpuC,QAAF,CAAY3U,QAAZ,CAAtB,CAEA,CAJM,QAIKA,QAAQ,CAACgjD,gBAAd,CAAiC,CAEvCruC,QAAQ,CAACtP,KAAT,CAAexwB,KAAf,CAAqBwB,IAArB,CAA2B2pB,QAAQ,CAACqF,KAApC,EACAsP,QAAQ,CAAChS,OAAT,CAAiB9tB,KAAjB,CAAyBmrB,QAAQ,CAAC2C,OAAlC,CAEA,CALM,QAKK3C,QAAQ,CAAC4V,gBAAd,CAAiC,CAEvC5V,QAAQ,CAACyV,kBAAT,CAA8B,KAA9B,CAAqC;EAErC,CAED,CAED,SAAS+rC,qBAAT,CAAgC7sC,QAAhC,CAA0C3U,QAA1C,CAAqD,CAEpD2U,QAAQ,CAAChS,OAAT,CAAiB9tB,KAAjB,CAAyBmrB,QAAQ,CAAC2C,OAAlC,CAEA,GAAK3C,QAAQ,CAACqF,KAAd,CAAsB,CAErBsP,QAAQ,CAACyN,OAAT,CAAiBvtC,KAAjB,CAAuBwB,IAAvB,CAA6B2pB,QAAQ,CAACqF,KAAtC,EAEA,CAED,GAAKrF,QAAQ,CAAC4F,QAAd,CAAyB,CAExB+O,QAAQ,CAAC/O,QAAT,CAAkB/wB,KAAlB,CAAwBwB,IAAxB,CAA8B2pB,QAAQ,CAAC4F,QAAvC,EAAkDvuB,cAAlD,CAAkE2oB,QAAQ,CAAC6F,iBAA3E,EAEA,CAED,GAAK7F,QAAQ,CAACwG,GAAd,CAAoB,CAEnBmO,QAAQ,CAACnO,GAAT,CAAa3xB,KAAb,CAAqBmrB,QAAQ,CAACwG,GAA9B,CAEA,CAED,GAAKxG,QAAQ,CAAC0G,QAAd,CAAyB,CAExBiO,QAAQ,CAACjO,QAAT,CAAkB7xB,KAAlB,CAA0BmrB,QAAQ,CAAC0G,QAAnC,CAEA,CAED,GAAK1G,QAAQ,CAAC0H,WAAd,CAA4B,CAE3BiN,QAAQ,CAACjN,WAAT,CAAqB7yB,KAArB,CAA6BmrB,QAAQ,CAAC0H,WAAtC,CAEA,CAED,GAAK1H,QAAQ,CAAC4E,SAAT,CAAqB,CAA1B,CAA8B,CAE7B+P,QAAQ,CAAC/P,SAAT,CAAmB/vB,KAAnB,CAA2BmrB,QAAQ,CAAC4E,SAApC,CAEA,CAED,MAAMiD,MAAM,CAAG+b,UAAU,CAACtG,GAAX,CAAgBtd,QAAhB,EAA2B6H,MAA1C,CAEA,GAAKA,MAAL,CAAc,CAEb8M,QAAQ,CAAC9M,MAAT,CAAgBhzB,KAAhB,CAAwBgzB,MAAxB,CAEA8M,QAAQ,CAAC8N,UAAT,CAAoB5tC,KAApB,CAA8BgzB,MAAM,CAACwQ,aAAP,EAAwBxQ,MAAM,CAAChmB,qBAAP,GAAiC,KAA3D,CAAqE,CAAE,CAAvE,CAA2E,CAAvG,CAEA8yB,QAAQ,CAAC3M,YAAT,CAAsBnzB,KAAtB,CAA8BmrB,QAAQ,CAACgI,YAAvC,CACA2M,QAAQ,CAAC+N,GAAT,CAAa7tC,KAAb,CAAqBmrB,QAAQ,CAAC0iB,GAA9B,CACA/N,QAAQ,CAAC1M,eAAT,CAAyBpzB,KAAzB,CAAiCmrB,QAAQ,CAACiI,eAA1C,CAEA,MAAM0a,WAAW,CAAGiB,UAAU,CAACtG,GAAX,CAAgBzV,MAAhB,EAAyBmrC,aAA7C,CAEA,GAAKrwB,WAAW,GAAK7vC,SAArB,CAAiC,CAEhC6hC,QAAQ,CAACgO,WAAT,CAAqB9tC,KAArB,CAA6B8tC,WAA7B,CAEA,CAED,CAED,GAAK3iB,QAAQ,CAAC2G,QAAd,CAAyB,CAExBgO,QAAQ,CAAChO,QAAT,CAAkB9xB,KAAlB,CAA0BmrB,QAAQ,CAAC2G,QAAnC,CACAgO,QAAQ,CAAC/N,iBAAT,CAA2B/xB,KAA3B,CAAmCmrB,QAAQ,CAAC4G,iBAA5C,CAEA,CAED,GAAK5G,QAAQ,CAAC6G,KAAd,CAAsB,CAErB8N,QAAQ,CAAC9N,KAAT,CAAehyB,KAAf,CAAuBmrB,QAAQ,CAAC6G,KAAhC,CACA8N,QAAQ,CAAC7N,cAAT,CAAwBjyB,KAAxB,CAAgCmrB,QAAQ,CAAC8G,cAAzC,CAEA,CAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,IAAIm8C,UAAJ,CAEA,GAAKjjD,QAAQ,CAACwG,GAAd,CAAoB,CAEnBy8C,UAAU,CAAGjjD,QAAQ,CAACwG,GAAtB,CAEA,CAJD,QAIYxG,QAAQ,CAAC0H,WAAd,CAA4B,CAElCu7C,UAAU,CAAGjjD,QAAQ,CAAC0H,WAAtB,CAEA,CAJM,QAIK1H,QAAQ,CAACoH,eAAd,CAAgC,CAEtC67C,UAAU,CAAGjjD,QAAQ,CAACoH,eAAtB,CAEA,CAJM,QAIKpH,QAAQ,CAACiH,SAAd,CAA0B,CAEhCg8C,UAAU,CAAGjjD,QAAQ,CAACiH,SAAtB,CAEA,CAJM,QAIKjH,QAAQ,CAAC+G,OAAd,CAAwB,CAE9Bk8C,UAAU,CAAGjjD,QAAQ,CAAC+G,OAAtB,CAEA,CAJM,QAIK/G,QAAQ,CAACuH,YAAd,CAA6B,CAEnC07C,UAAU,CAAGjjD,QAAQ,CAACuH,YAAtB,CAEA,CAJM,QAIKvH,QAAQ,CAACwH,YAAd,CAA6B,CAEnCy7C,UAAU,CAAGjjD,QAAQ,CAACwH,YAAtB,CAEA,CAJM,QAIKxH,QAAQ,CAAC0G,QAAd,CAAyB,CAE/Bu8C,UAAU,CAAGjjD,QAAQ,CAAC0G,QAAtB,CAEA,CAJM,QAIK1G,QAAQ,CAACyH,WAAd,CAA4B,CAElCw7C,UAAU,CAAGjjD,QAAQ,CAACyH,WAAtB,CAEA,CAJM,QAIKzH,QAAQ,CAACoG,YAAd,CAA6B,CAEnC68C,UAAU,CAAGjjD,QAAQ,CAACoG,YAAtB,CAEA,CAJM,QAIKpG,QAAQ,CAACsG,kBAAd,CAAmC,CAEzC28C,UAAU,CAAGjjD,QAAQ,CAACsG,kBAAtB,CAEA,CAJM,QAIKtG,QAAQ,CAACqG,qBAAd,CAAsC,CAE5C48C,UAAU,CAAGjjD,QAAQ,CAACqG,qBAAtB,CAEA,CAJM,QAIKrG,QAAQ,CAAC2H,oBAAd,CAAqC,CAE3Cs7C,UAAU,CAAGjjD,QAAQ,CAAC2H,oBAAtB,CAEA,CAJM,QAIK3H,QAAQ,CAAC4H,gBAAd,CAAiC,CAEvCq7C,UAAU,CAAGjjD,QAAQ,CAAC4H,gBAAtB,CAEA,CAJM,QAIK5H,QAAQ,CAACoI,eAAd,CAAgC,CAEtC66C,UAAU,CAAGjjD,QAAQ,CAACoI,eAAtB,CAEA,CAJM,QAIKpI,QAAQ,CAACsI,YAAd,CAA6B,CAEnC26C,UAAU,CAAGjjD,QAAQ,CAACsI,YAAtB,CAEA,CAJM,QAIKtI,QAAQ,CAACumB,aAAd,CAA8B,CAEpC08B,UAAU,CAAGjjD,QAAQ,CAACumB,aAAtB,CAEA,CAJM,QAIKvmB,QAAQ,CAACwmB,iBAAd,CAAkC,CAExCy8B,UAAU,CAAGjjD,QAAQ,CAACwmB,iBAAtB,CAEA,CAED,GAAKy8B,UAAU,GAAKnwE,SAApB,CAAgC;EAG/B,GAAKmwE,UAAU,CAACn9D,mBAAhB,CAAsC,CAErCm9D,UAAU,CAAGA,UAAU,CAACz9D,OAAxB,CAEA,CAED,GAAKy9D,UAAU,CAAC5hE,gBAAX,GAAgC,IAArC,CAA4C,CAE3C4hE,UAAU,CAACnhE,YAAX,GAEA,CAED6yB,QAAQ,CAAC0N,WAAT,CAAqBxtC,KAArB,CAA2BwB,IAA3B,CAAiC4sE,UAAU,CAACrkE,MAA5C,EAEA,CAED;EACA;EACA;EAEA,IAAIskE,WAAJ,CAEA,GAAKljD,QAAQ,CAAC6G,KAAd,CAAsB,CAErBq8C,WAAW,CAAGljD,QAAQ,CAAC6G,KAAvB,CAEA,CAJD,QAIY7G,QAAQ,CAAC2G,QAAd,CAAyB,CAE/Bu8C,WAAW,CAAGljD,QAAQ,CAAC2G,QAAvB,CAEA,CAED,GAAKu8C,WAAW,GAAKpwE,SAArB,CAAiC;EAGhC,GAAKowE,WAAW,CAACp9D,mBAAjB,CAAuC,CAEtCo9D,WAAW,CAAGA,WAAW,CAAC19D,OAA1B,CAEA,CAED,GAAK09D,WAAW,CAAC7hE,gBAAZ,GAAiC,IAAtC,CAA6C,CAE5C6hE,WAAW,CAACphE,YAAZ,GAEA,CAED6yB,QAAQ,CAAC2N,YAAT,CAAsBztC,KAAtB,CAA4BwB,IAA5B,CAAkC6sE,WAAW,CAACtkE,MAA9C,EAEA,CAED,CAED,SAAS6jE,mBAAT,CAA8B9tC,QAA9B,CAAwC3U,QAAxC,CAAmD,CAElD2U,QAAQ,CAACyN,OAAT,CAAiBvtC,KAAjB,CAAuBwB,IAAvB,CAA6B2pB,QAAQ,CAACqF,KAAtC,EACAsP,QAAQ,CAAChS,OAAT,CAAiB9tB,KAAjB,CAAyBmrB,QAAQ,CAAC2C,OAAlC,CAEA,CAED,SAASggD,mBAAT,CAA8BhuC,QAA9B,CAAwC3U,QAAxC,CAAmD,CAElD2U,QAAQ,CAAChM,QAAT,CAAkB9zB,KAAlB,CAA0BmrB,QAAQ,CAAC2I,QAAnC,CACAgM,QAAQ,CAACkR,SAAT,CAAmBhxC,KAAnB,CAA2BmrB,QAAQ,CAAC2I,QAAT,CAAoB3I,QAAQ,CAAC4I,OAAxD,CACA+L,QAAQ,CAACn2B,KAAT,CAAe3J,KAAf,CAAuBmrB,QAAQ,CAACxhB,KAAhC,CAEA,CAED,SAASqkE,qBAAT,CAAgCluC,QAAhC,CAA0C3U,QAA1C,CAAoDshD,UAApD,CAAgE3rE,MAAhE,CAAyE,CAExEg/B,QAAQ,CAACyN,OAAT,CAAiBvtC,KAAjB,CAAuBwB,IAAvB,CAA6B2pB,QAAQ,CAACqF,KAAtC,EACAsP,QAAQ,CAAChS,OAAT,CAAiB9tB,KAAjB,CAAyBmrB,QAAQ,CAAC2C,OAAlC,CACAgS,QAAQ,CAAC3lB,IAAT,CAAcna,KAAd,CAAsBmrB,QAAQ,CAAChR,IAAT,CAAgBsyD,UAAtC,CACA3sC,QAAQ,CAACn2B,KAAT,CAAe3J,KAAf,CAAuBc,MAAM,CAAG,GAAhC,CAEA,GAAKqqB,QAAQ,CAACwG,GAAd,CAAoB,CAEnBmO,QAAQ,CAACnO,GAAT,CAAa3xB,KAAb,CAAqBmrB,QAAQ,CAACwG,GAA9B,CAEA,CAED,GAAKxG,QAAQ,CAAC0G,QAAd,CAAyB,CAExBiO,QAAQ,CAACjO,QAAT,CAAkB7xB,KAAlB,CAA0BmrB,QAAQ,CAAC0G,QAAnC,CAEA,CAED,GAAK1G,QAAQ,CAAC4E,SAAT,CAAqB,CAA1B,CAA8B,CAE7B+P,QAAQ,CAAC/P,SAAT,CAAmB/vB,KAAnB,CAA2BmrB,QAAQ,CAAC4E,SAApC,CAEA,CAED;EACA;EACA;EAEA,IAAIq+C,UAAJ,CAEA,GAAKjjD,QAAQ,CAACwG,GAAd,CAAoB,CAEnBy8C,UAAU,CAAGjjD,QAAQ,CAACwG,GAAtB,CAEA,CAJD,QAIYxG,QAAQ,CAAC0G,QAAd,CAAyB,CAE/Bu8C,UAAU,CAAGjjD,QAAQ,CAAC0G,QAAtB,CAEA,CAED,GAAKu8C,UAAU,GAAKnwE,SAApB,CAAgC,CAE/B,GAAKmwE,UAAU,CAAC5hE,gBAAX,GAAgC,IAArC,CAA4C,CAE3C4hE,UAAU,CAACnhE,YAAX,GAEA,CAED6yB,QAAQ,CAAC0N,WAAT,CAAqBxtC,KAArB,CAA2BwB,IAA3B,CAAiC4sE,UAAU,CAACrkE,MAA5C,EAEA,CAED,CAED,SAASmkE,sBAAT,CAAiCpuC,QAAjC,CAA2C3U,QAA3C,CAAsD,CAErD2U,QAAQ,CAACyN,OAAT,CAAiBvtC,KAAjB,CAAuBwB,IAAvB,CAA6B2pB,QAAQ,CAACqF,KAAtC,EACAsP,QAAQ,CAAChS,OAAT,CAAiB9tB,KAAjB,CAAyBmrB,QAAQ,CAAC2C,OAAlC,CACAgS,QAAQ,CAACt2B,QAAT,CAAkBxJ,KAAlB,CAA0BmrB,QAAQ,CAAC3hB,QAAnC,CAEA,GAAK2hB,QAAQ,CAACwG,GAAd,CAAoB,CAEnBmO,QAAQ,CAACnO,GAAT,CAAa3xB,KAAb,CAAqBmrB,QAAQ,CAACwG,GAA9B,CAEA,CAED,GAAKxG,QAAQ,CAAC0G,QAAd,CAAyB,CAExBiO,QAAQ,CAACjO,QAAT,CAAkB7xB,KAAlB,CAA0BmrB,QAAQ,CAAC0G,QAAnC,CAEA,CAED,GAAK1G,QAAQ,CAAC4E,SAAT,CAAqB,CAA1B,CAA8B,CAE7B+P,QAAQ,CAAC/P,SAAT,CAAmB/vB,KAAnB,CAA2BmrB,QAAQ,CAAC4E,SAApC,CAEA,CAED;EACA;EACA;EAEA,IAAIq+C,UAAJ,CAEA,GAAKjjD,QAAQ,CAACwG,GAAd,CAAoB,CAEnBy8C,UAAU,CAAGjjD,QAAQ,CAACwG,GAAtB,CAEA,CAJD,QAIYxG,QAAQ,CAAC0G,QAAd,CAAyB,CAE/Bu8C,UAAU,CAAGjjD,QAAQ,CAAC0G,QAAtB,CAEA,CAED,GAAKu8C,UAAU,GAAKnwE,SAApB,CAAgC,CAE/B,GAAKmwE,UAAU,CAAC5hE,gBAAX,GAAgC,IAArC,CAA4C,CAE3C4hE,UAAU,CAACnhE,YAAX,GAEA,CAED6yB,QAAQ,CAAC0N,WAAT,CAAqBxtC,KAArB,CAA2BwB,IAA3B,CAAiC4sE,UAAU,CAACrkE,MAA5C,EAEA,CAED,CAED,SAAS8iE,sBAAT,CAAiC/sC,QAAjC,CAA2C3U,QAA3C,CAAsD,CAErD,GAAKA,QAAQ,CAACyH,WAAd,CAA4B,CAE3BkN,QAAQ,CAAClN,WAAT,CAAqB5yB,KAArB,CAA6BmrB,QAAQ,CAACyH,WAAtC,CAEA,CAED,CAED,SAASq6C,oBAAT,CAA+BntC,QAA/B,CAAyC3U,QAAzC,CAAoD,CAEnD2U,QAAQ,CAAC7O,QAAT,CAAkBjxB,KAAlB,CAAwBwB,IAAxB,CAA8B2pB,QAAQ,CAAC8F,QAAvC,EACA6O,QAAQ,CAAC1O,SAAT,CAAmBpxB,KAAnB,CAA2Bb,IAAI,CAACe,GAAL,CAAUirB,QAAQ,CAACiG,SAAnB,CAA8B,IAA9B,CAA3B,CAAiE;EAEjE,GAAKjG,QAAQ,CAACyH,WAAd,CAA4B,CAE3BkN,QAAQ,CAAClN,WAAT,CAAqB5yB,KAArB,CAA6BmrB,QAAQ,CAACyH,WAAtC,CAEA,CAED,GAAKzH,QAAQ,CAAC+G,OAAd,CAAwB,CAEvB4N,QAAQ,CAAC5N,OAAT,CAAiBlyB,KAAjB,CAAyBmrB,QAAQ,CAAC+G,OAAlC,CACA4N,QAAQ,CAAC3N,SAAT,CAAmBnyB,KAAnB,CAA2BmrB,QAAQ,CAACgH,SAApC,CACA,GAAKhH,QAAQ,CAACyC,IAAT,GAAkBt/C,QAAvB,CAAkCwxD,QAAQ,CAAC3N,SAAT,CAAmBnyB,KAAnB,EAA4B,CAAE,CAA9B,CAElC,CAED,GAAKmrB,QAAQ,CAACiH,SAAd,CAA0B,CAEzB0N,QAAQ,CAAC1N,SAAT,CAAmBpyB,KAAnB,CAA2BmrB,QAAQ,CAACiH,SAApC,CACA0N,QAAQ,CAACxN,WAAT,CAAqBtyB,KAArB,CAA2BwB,IAA3B,CAAiC2pB,QAAQ,CAACmH,WAA1C,EACA,GAAKnH,QAAQ,CAACyC,IAAT,GAAkBt/C,QAAvB,CAAkCwxD,QAAQ,CAACxN,WAAT,CAAqBtyB,KAArB,CAA2BqD,MAA3B,GAElC,CAED,GAAK8nB,QAAQ,CAACoH,eAAd,CAAgC,CAE/BuN,QAAQ,CAACvN,eAAT,CAAyBvyB,KAAzB,CAAiCmrB,QAAQ,CAACoH,eAA1C,CACAuN,QAAQ,CAACtN,iBAAT,CAA2BxyB,KAA3B,CAAmCmrB,QAAQ,CAACqH,iBAA5C,CACAsN,QAAQ,CAACrN,gBAAT,CAA0BzyB,KAA1B,CAAkCmrB,QAAQ,CAACsH,gBAA3C,CAEA,CAED,CAED,SAASs6C,mBAAT,CAA8BjtC,QAA9B,CAAwC3U,QAAxC,CAAmD,CAElD,GAAKA,QAAQ,CAACkI,WAAd,CAA4B,CAE3ByM,QAAQ,CAACzM,WAAT,CAAqBrzB,KAArB,CAA6BmrB,QAAQ,CAACkI,WAAtC,CAEA,CAED,GAAKlI,QAAQ,CAACyH,WAAd,CAA4B,CAE3BkN,QAAQ,CAAClN,WAAT,CAAqB5yB,KAArB,CAA6BmrB,QAAQ,CAACyH,WAAtC,CAEA,CAED,GAAKzH,QAAQ,CAAC+G,OAAd,CAAwB,CAEvB4N,QAAQ,CAAC5N,OAAT,CAAiBlyB,KAAjB,CAAyBmrB,QAAQ,CAAC+G,OAAlC,CACA4N,QAAQ,CAAC3N,SAAT,CAAmBnyB,KAAnB,CAA2BmrB,QAAQ,CAACgH,SAApC,CACA,GAAKhH,QAAQ,CAACyC,IAAT,GAAkBt/C,QAAvB,CAAkCwxD,QAAQ,CAAC3N,SAAT,CAAmBnyB,KAAnB,EAA4B,CAAE,CAA9B,CAElC,CAED,GAAKmrB,QAAQ,CAACiH,SAAd,CAA0B,CAEzB0N,QAAQ,CAAC1N,SAAT,CAAmBpyB,KAAnB,CAA2BmrB,QAAQ,CAACiH,SAApC,CACA0N,QAAQ,CAACxN,WAAT,CAAqBtyB,KAArB,CAA2BwB,IAA3B,CAAiC2pB,QAAQ,CAACmH,WAA1C,EACA,GAAKnH,QAAQ,CAACyC,IAAT,GAAkBt/C,QAAvB,CAAkCwxD,QAAQ,CAACxN,WAAT,CAAqBtyB,KAArB,CAA2BqD,MAA3B,GAElC,CAED,GAAK8nB,QAAQ,CAACoH,eAAd,CAAgC,CAE/BuN,QAAQ,CAACvN,eAAT,CAAyBvyB,KAAzB,CAAiCmrB,QAAQ,CAACoH,eAA1C,CACAuN,QAAQ,CAACtN,iBAAT,CAA2BxyB,KAA3B,CAAmCmrB,QAAQ,CAACqH,iBAA5C,CACAsN,QAAQ,CAACrN,gBAAT,CAA0BzyB,KAA1B,CAAkCmrB,QAAQ,CAACsH,gBAA3C,CAEA,CAED,CAED,SAAS26C,uBAAT,CAAkCttC,QAAlC,CAA4C3U,QAA5C,CAAuD,CAEtD2U,QAAQ,CAACpP,SAAT,CAAmB1wB,KAAnB,CAA2BmrB,QAAQ,CAACuF,SAApC,CACAoP,QAAQ,CAACnP,SAAT,CAAmB3wB,KAAnB,CAA2BmrB,QAAQ,CAACwF,SAApC,CAEA,GAAKxF,QAAQ,CAACuH,YAAd,CAA6B,CAE5BoN,QAAQ,CAACpN,YAAT,CAAsB1yB,KAAtB,CAA8BmrB,QAAQ,CAACuH,YAAvC,CAEA,CAED,GAAKvH,QAAQ,CAACwH,YAAd,CAA6B,CAE5BmN,QAAQ,CAACnN,YAAT,CAAsB3yB,KAAtB,CAA8BmrB,QAAQ,CAACwH,YAAvC,CAEA,CAED,GAAKxH,QAAQ,CAACyH,WAAd,CAA4B,CAE3BkN,QAAQ,CAAClN,WAAT,CAAqB5yB,KAArB,CAA6BmrB,QAAQ,CAACyH,WAAtC,CAEA,CAED,GAAKzH,QAAQ,CAAC+G,OAAd,CAAwB,CAEvB4N,QAAQ,CAAC5N,OAAT,CAAiBlyB,KAAjB,CAAyBmrB,QAAQ,CAAC+G,OAAlC,CACA4N,QAAQ,CAAC3N,SAAT,CAAmBnyB,KAAnB,CAA2BmrB,QAAQ,CAACgH,SAApC,CACA,GAAKhH,QAAQ,CAACyC,IAAT,GAAkBt/C,QAAvB,CAAkCwxD,QAAQ,CAAC3N,SAAT,CAAmBnyB,KAAnB,EAA4B,CAAE,CAA9B,CAElC,CAED,GAAKmrB,QAAQ,CAACiH,SAAd,CAA0B,CAEzB0N,QAAQ,CAAC1N,SAAT,CAAmBpyB,KAAnB,CAA2BmrB,QAAQ,CAACiH,SAApC,CACA0N,QAAQ,CAACxN,WAAT,CAAqBtyB,KAArB,CAA2BwB,IAA3B,CAAiC2pB,QAAQ,CAACmH,WAA1C,EACA,GAAKnH,QAAQ,CAACyC,IAAT,GAAkBt/C,QAAvB,CAAkCwxD,QAAQ,CAACxN,WAAT,CAAqBtyB,KAArB,CAA2BqD,MAA3B,GAElC,CAED,GAAK8nB,QAAQ,CAACoH,eAAd,CAAgC,CAE/BuN,QAAQ,CAACvN,eAAT,CAAyBvyB,KAAzB,CAAiCmrB,QAAQ,CAACoH,eAA1C,CACAuN,QAAQ,CAACtN,iBAAT,CAA2BxyB,KAA3B,CAAmCmrB,QAAQ,CAACqH,iBAA5C,CACAsN,QAAQ,CAACrN,gBAAT,CAA0BzyB,KAA1B,CAAkCmrB,QAAQ,CAACsH,gBAA3C,CAEA,CAED,MAAMO,MAAM,CAAG+b,UAAU,CAACtG,GAAX,CAAgBtd,QAAhB,EAA2B6H,MAA1C,CAEA,GAAKA,MAAL,CAAc;EAGb8M,QAAQ,CAAC5M,eAAT,CAAyBlzB,KAAzB,CAAiCmrB,QAAQ,CAAC+H,eAA1C,CAEA,CAED,CAED,SAASi6C,uBAAT,CAAkCrtC,QAAlC,CAA4C3U,QAA5C,CAAsDuhD,wBAAtD,CAAiF,CAEhFU,uBAAuB,CAAEttC,QAAF,CAAY3U,QAAZ,CAAvB,CAEA2U,QAAQ,CAAC+N,GAAT,CAAa7tC,KAAb,CAAqBmrB,QAAQ,CAAC0iB,GAA9B,CAAmC;EAEnC,GAAK1iB,QAAQ,CAACyF,KAAT,CAAiB,CAAtB,CAA0B,CAEzBkP,QAAQ,CAACjP,UAAT,CAAoB7wB,KAApB,CAA0BwB,IAA1B,CAAgC2pB,QAAQ,CAAC0F,UAAzC,EAAsDruB,cAAtD,CAAsE2oB,QAAQ,CAACyF,KAA/E,EAEAkP,QAAQ,CAAChP,cAAT,CAAwB9wB,KAAxB,CAAgCmrB,QAAQ,CAAC2F,cAAzC,CAEA,GAAK3F,QAAQ,CAACumB,aAAd,CAA8B,CAE7B5R,QAAQ,CAAC4R,aAAT,CAAuB1xC,KAAvB,CAA+BmrB,QAAQ,CAACumB,aAAxC,CAEA,CAED,GAAKvmB,QAAQ,CAACwmB,iBAAd,CAAkC,CAEjC7R,QAAQ,CAAC6R,iBAAT,CAA2B3xC,KAA3B,CAAmCmrB,QAAQ,CAACwmB,iBAA5C,CAEA,CAED,CAED,GAAKxmB,QAAQ,CAACkG,SAAT,CAAqB,CAA1B,CAA8B,CAE7ByO,QAAQ,CAACzO,SAAT,CAAmBrxB,KAAnB,CAA2BmrB,QAAQ,CAACkG,SAApC,CACAyO,QAAQ,CAACxO,kBAAT,CAA4BtxB,KAA5B,CAAoCmrB,QAAQ,CAACmG,kBAA7C,CAEA,GAAKnG,QAAQ,CAACoG,YAAd,CAA6B,CAE5BuO,QAAQ,CAACvO,YAAT,CAAsBvxB,KAAtB,CAA8BmrB,QAAQ,CAACoG,YAAvC,CAEA,CAED,GAAKpG,QAAQ,CAACqG,qBAAd,CAAsC,CAErCsO,QAAQ,CAACtO,qBAAT,CAA+BxxB,KAA/B,CAAuCmrB,QAAQ,CAACqG,qBAAhD,CAEA,CAED,GAAKrG,QAAQ,CAACsG,kBAAd,CAAmC,CAElCqO,QAAQ,CAACpO,oBAAT,CAA8B1xB,KAA9B,CAAoCwB,IAApC,CAA0C2pB,QAAQ,CAACuG,oBAAnD,EACAoO,QAAQ,CAACrO,kBAAT,CAA4BzxB,KAA5B,CAAoCmrB,QAAQ,CAACsG,kBAA7C,CAEA,GAAKtG,QAAQ,CAACyC,IAAT,GAAkBt/C,QAAvB,CAAkC,CAEjCwxD,QAAQ,CAACpO,oBAAT,CAA8B1xB,KAA9B,CAAoCqD,MAApC,GAEA,CAED,CAED,CAED,GAAK8nB,QAAQ,CAACmI,YAAT,CAAwB,CAA7B,CAAiC,CAEhCwM,QAAQ,CAACxM,YAAT,CAAsBtzB,KAAtB,CAA8BmrB,QAAQ,CAACmI,YAAvC,CACAwM,QAAQ,CAAC+R,sBAAT,CAAgC7xC,KAAhC,CAAwC0sE,wBAAwB,CAAC/7D,OAAjE,CACAmvB,QAAQ,CAAC8R,uBAAT,CAAiC5xC,KAAjC,CAAuCe,GAAvC,CAA4C2rE,wBAAwB,CAAC7rE,KAArE,CAA4E6rE,wBAAwB,CAAC5rE,MAArG,EAEA,GAAKqqB,QAAQ,CAACoI,eAAd,CAAgC,CAE/BuM,QAAQ,CAACvM,eAAT,CAAyBvzB,KAAzB,CAAiCmrB,QAAQ,CAACoI,eAA1C,CAEA,CAEDuM,QAAQ,CAACtM,SAAT,CAAmBxzB,KAAnB,CAA2BmrB,QAAQ,CAACqI,SAApC,CAEA,GAAKrI,QAAQ,CAACsI,YAAd,CAA6B,CAE5BqM,QAAQ,CAACrM,YAAT,CAAsBzzB,KAAtB,CAA8BmrB,QAAQ,CAACsI,YAAvC,CAEA,CAEDqM,QAAQ,CAACpM,mBAAT,CAA6B1zB,KAA7B,CAAqCmrB,QAAQ,CAACuI,mBAA9C,CACAoM,QAAQ,CAACnM,gBAAT,CAA0B3zB,KAA1B,CAAgCwB,IAAhC,CAAsC2pB,QAAQ,CAACwI,gBAA/C,EAEA,CAEDmM,QAAQ,CAAC5O,iBAAT,CAA2BlxB,KAA3B,CAAmCmrB,QAAQ,CAAC+F,iBAA5C,CACA4O,QAAQ,CAAC3O,aAAT,CAAuBnxB,KAAvB,CAA6BwB,IAA7B,CAAmC2pB,QAAQ,CAACgG,aAA5C,EAEA,GAAKhG,QAAQ,CAAC2H,oBAAd,CAAqC,CAEpCgN,QAAQ,CAAChN,oBAAT,CAA8B9yB,KAA9B,CAAsCmrB,QAAQ,CAAC2H,oBAA/C,CAEA,CAED,GAAK3H,QAAQ,CAAC4H,gBAAd,CAAiC,CAEhC+M,QAAQ,CAAC/M,gBAAT,CAA0B/yB,KAA1B,CAAkCmrB,QAAQ,CAAC4H,gBAA3C,CAEA,CAED,CAED,SAASu6C,qBAAT,CAAgCxtC,QAAhC,CAA0C3U,QAA1C,CAAqD,CAEpD,GAAKA,QAAQ,CAACyG,MAAd,CAAuB,CAEtBkO,QAAQ,CAAClO,MAAT,CAAgB5xB,KAAhB,CAAwBmrB,QAAQ,CAACyG,MAAjC,CAEA,CAED,GAAKzG,QAAQ,CAAC+G,OAAd,CAAwB,CAEvB4N,QAAQ,CAAC5N,OAAT,CAAiBlyB,KAAjB,CAAyBmrB,QAAQ,CAAC+G,OAAlC,CACA4N,QAAQ,CAAC3N,SAAT,CAAmBnyB,KAAnB,CAA2BmrB,QAAQ,CAACgH,SAApC,CACA,GAAKhH,QAAQ,CAACyC,IAAT,GAAkBt/C,QAAvB,CAAkCwxD,QAAQ,CAAC3N,SAAT,CAAmBnyB,KAAnB,EAA4B,CAAE,CAA9B,CAElC,CAED,GAAKmrB,QAAQ,CAACiH,SAAd,CAA0B,CAEzB0N,QAAQ,CAAC1N,SAAT,CAAmBpyB,KAAnB,CAA2BmrB,QAAQ,CAACiH,SAApC,CACA0N,QAAQ,CAACxN,WAAT,CAAqBtyB,KAArB,CAA2BwB,IAA3B,CAAiC2pB,QAAQ,CAACmH,WAA1C,EACA,GAAKnH,QAAQ,CAACyC,IAAT,GAAkBt/C,QAAvB,CAAkCwxD,QAAQ,CAACxN,WAAT,CAAqBtyB,KAArB,CAA2BqD,MAA3B,GAElC,CAED,GAAK8nB,QAAQ,CAACoH,eAAd,CAAgC,CAE/BuN,QAAQ,CAACvN,eAAT,CAAyBvyB,KAAzB,CAAiCmrB,QAAQ,CAACoH,eAA1C,CACAuN,QAAQ,CAACtN,iBAAT,CAA2BxyB,KAA3B,CAAmCmrB,QAAQ,CAACqH,iBAA5C,CACAsN,QAAQ,CAACrN,gBAAT,CAA0BzyB,KAA1B,CAAkCmrB,QAAQ,CAACsH,gBAA3C,CAEA,CAED,CAED,SAAS86C,oBAAT,CAA+BztC,QAA/B,CAAyC3U,QAAzC,CAAoD,CAEnD,GAAKA,QAAQ,CAACoH,eAAd,CAAgC,CAE/BuN,QAAQ,CAACvN,eAAT,CAAyBvyB,KAAzB,CAAiCmrB,QAAQ,CAACoH,eAA1C,CACAuN,QAAQ,CAACtN,iBAAT,CAA2BxyB,KAA3B,CAAmCmrB,QAAQ,CAACqH,iBAA5C,CACAsN,QAAQ,CAACrN,gBAAT,CAA0BzyB,KAA1B,CAAkCmrB,QAAQ,CAACsH,gBAA3C,CAEA,CAED,CAED,SAAS+6C,uBAAT,CAAkC1tC,QAAlC,CAA4C3U,QAA5C,CAAuD,CAEtD,GAAKA,QAAQ,CAACoH,eAAd,CAAgC,CAE/BuN,QAAQ,CAACvN,eAAT,CAAyBvyB,KAAzB,CAAiCmrB,QAAQ,CAACoH,eAA1C,CACAuN,QAAQ,CAACtN,iBAAT,CAA2BxyB,KAA3B,CAAmCmrB,QAAQ,CAACqH,iBAA5C,CACAsN,QAAQ,CAACrN,gBAAT,CAA0BzyB,KAA1B,CAAkCmrB,QAAQ,CAACsH,gBAA3C,CAEA,CAEDqN,QAAQ,CAACuR,iBAAT,CAA2BrxC,KAA3B,CAAiCwB,IAAjC,CAAuC2pB,QAAQ,CAACkmB,iBAAhD,EACAvR,QAAQ,CAACwR,YAAT,CAAsBtxC,KAAtB,CAA8BmrB,QAAQ,CAACmmB,YAAvC,CACAxR,QAAQ,CAACyR,WAAT,CAAqBvxC,KAArB,CAA6BmrB,QAAQ,CAAComB,WAAtC,CAEA,CAED,SAASm8B,qBAAT,CAAgC5tC,QAAhC,CAA0C3U,QAA1C,CAAqD,CAEpD,GAAKA,QAAQ,CAAC+G,OAAd,CAAwB,CAEvB4N,QAAQ,CAAC5N,OAAT,CAAiBlyB,KAAjB,CAAyBmrB,QAAQ,CAAC+G,OAAlC,CACA4N,QAAQ,CAAC3N,SAAT,CAAmBnyB,KAAnB,CAA2BmrB,QAAQ,CAACgH,SAApC,CACA,GAAKhH,QAAQ,CAACyC,IAAT,GAAkBt/C,QAAvB,CAAkCwxD,QAAQ,CAAC3N,SAAT,CAAmBnyB,KAAnB,EAA4B,CAAE,CAA9B,CAElC,CAED,GAAKmrB,QAAQ,CAACiH,SAAd,CAA0B,CAEzB0N,QAAQ,CAAC1N,SAAT,CAAmBpyB,KAAnB,CAA2BmrB,QAAQ,CAACiH,SAApC,CACA0N,QAAQ,CAACxN,WAAT,CAAqBtyB,KAArB,CAA2BwB,IAA3B,CAAiC2pB,QAAQ,CAACmH,WAA1C,EACA,GAAKnH,QAAQ,CAACyC,IAAT,GAAkBt/C,QAAvB,CAAkCwxD,QAAQ,CAACxN,WAAT,CAAqBtyB,KAArB,CAA2BqD,MAA3B,GAElC,CAED,GAAK8nB,QAAQ,CAACoH,eAAd,CAAgC,CAE/BuN,QAAQ,CAACvN,eAAT,CAAyBvyB,KAAzB,CAAiCmrB,QAAQ,CAACoH,eAA1C,CACAuN,QAAQ,CAACtN,iBAAT,CAA2BxyB,KAA3B,CAAmCmrB,QAAQ,CAACqH,iBAA5C,CACAsN,QAAQ,CAACrN,gBAAT,CAA0BzyB,KAA1B,CAAkCmrB,QAAQ,CAACsH,gBAA3C,CAEA,CAED,CAED,OAAO,CACN45C,kBAAkB,CAAEA,kBADd,CAENG,uBAAuB,CAAEA,uBAFnB,CAAP,CAKA,CAED,SAASt8E,mBAAT,EAA+B,CAE9B,MAAMgb,MAAM,CAAGhB,eAAe,CAAE,QAAF,CAA9B,CACAgB,MAAM,CAAC0pB,KAAP,CAAa05C,OAAb,CAAuB,OAAvB,CACA,OAAOpjE,MAAP,CAEA,CAED,SAAS/a,aAAT,CAAwB06B,UAAU,CAAG,EAArC,CAA0C,CAEzC,MAAMnyC,OAAO,CAAGmyC,UAAU,CAAC3f,MAAX,GAAsBjN,SAAtB,CAAkC4sB,UAAU,CAAC3f,MAA7C,CAAsDhb,mBAAmB,EAAzF,CACC4L,QAAQ,CAAG+uB,UAAU,CAAC1f,OAAX,GAAuBlN,SAAvB,CAAmC4sB,UAAU,CAAC1f,OAA9C,CAAwD,IADpE,CAGCojE,MAAM,CAAG1jD,UAAU,CAACxmB,KAAX,GAAqBpG,SAArB,CAAiC4sB,UAAU,CAACxmB,KAA5C,CAAoD,KAH9D,CAICmqE,MAAM,CAAG3jD,UAAU,CAACta,KAAX,GAAqBtS,SAArB,CAAiC4sB,UAAU,CAACta,KAA5C,CAAoD,IAJ9D,CAKCk+D,QAAQ,CAAG5jD,UAAU,CAACoZ,OAAX,GAAuBhmC,SAAvB,CAAmC4sB,UAAU,CAACoZ,OAA9C,CAAwD,IALpE,CAMCyqC,UAAU,CAAG7jD,UAAU,CAACq+C,SAAX,GAAyBjrE,SAAzB,CAAqC4sB,UAAU,CAACq+C,SAAhD,CAA4D,KAN1E,CAOCyF,mBAAmB,CAAG9jD,UAAU,CAAC+E,kBAAX,GAAkC3xB,SAAlC,CAA8C4sB,UAAU,CAAC+E,kBAAzD,CAA8E,IAPrG,CAQCg/C,sBAAsB,CAAG/jD,UAAU,CAACgkD,qBAAX,GAAqC5wE,SAArC,CAAiD4sB,UAAU,CAACgkD,qBAA5D,CAAoF,KAR9G,CASCC,gBAAgB,CAAGjkD,UAAU,CAACkkD,eAAX,GAA+B9wE,SAA/B,CAA2C4sB,UAAU,CAACkkD,eAAtD,CAAwE,SAT5F,CAUCC,6BAA6B,CAAGnkD,UAAU,CAACokD,4BAAX,GAA4ChxE,SAA5C,CAAwD4sB,UAAU,CAACokD,4BAAnE,CAAkG,KAVnI,CAYA,IAAIC,iBAAiB,CAAG,IAAxB,CACA,IAAIC,kBAAkB,CAAG,IAAzB,CAEA;EACA;EAEA,MAAMC,eAAe,CAAG,EAAxB,CACA,MAAMC,gBAAgB,CAAG,EAAzB,CAEA;EAEA,KAAKC,UAAL,CAAkB52F,OAAlB,CAEA;EACA,KAAKo0E,KAAL,CAAa;EAGd;EACA;EACA,KACEC,iBAAiB,CAAE,IANP,CAAb,CASA;EAEA,KAAKja,SAAL,CAAiB,IAAjB,CACA,KAAKC,cAAL,CAAsB,IAAtB,CACA,KAAKC,cAAL,CAAsB,IAAtB,CACA,KAAKC,gBAAL,CAAwB,IAAxB,CAEA;EAEA,KAAKs8B,WAAL,CAAmB,IAAnB,CAEA;EAEA,KAAKtgD,cAAL,CAAsB,EAAtB,CACA,KAAKoqB,oBAAL,CAA4B,KAA5B,CAEA;EAEA,KAAK9jB,WAAL,CAAmB,GAAnB,CAAwB;EACxB,KAAKipB,cAAL,CAAsB3nE,cAAtB,CAEA;EAEA,KAAKi1E,uBAAL,CAA+B,KAA/B,CAEA;EAEA,KAAK5Y,WAAL,CAAmBxiE,aAAnB,CACA,KAAK8+F,mBAAL,CAA2B,GAA3B,CAEA;EAEA,MAAMC,KAAK,CAAG,IAAd,CAEA,IAAIC,cAAc,CAAG,KAArB,CAEA;EAEA,IAAIC,sBAAsB,CAAG,CAA7B,CACA,IAAIC,yBAAyB,CAAG,CAAhC,CACA,IAAIC,oBAAoB,CAAG,IAA3B,CACA,IAAIC,kBAAkB,CAAG,CAAE,CAA3B,CAEA,IAAIC,cAAc,CAAG,IAArB,CAEA,MAAMC,gBAAgB,CAAG,IAAIj3F,OAAJ,EAAzB,CACA,MAAMk3F,eAAe,CAAG,IAAIl3F,OAAJ,EAAxB,CACA,IAAIm3F,mBAAmB,CAAG,IAA1B,CAEA;EAEA,IAAIC,MAAM,CAAGz3F,OAAO,CAACmoB,KAArB,CACA,IAAIuvE,OAAO,CAAG13F,OAAO,CAACooB,MAAtB,CAEA,IAAIuvE,WAAW,CAAG,CAAlB,CACA,IAAIC,WAAW,CAAG,IAAlB,CACA,IAAIC,gBAAgB,CAAG,IAAvB,CAEA,MAAMjc,SAAS,CAAG,IAAIv7E,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmBo3F,MAAnB,CAA2BC,OAA3B,CAAlB,CACA,MAAMI,QAAQ,CAAG,IAAIz3F,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmBo3F,MAAnB,CAA2BC,OAA3B,CAAjB,CACA,IAAIK,YAAY,CAAG,KAAnB,CAEA;EAEA,MAAMC,mBAAmB,CAAG,EAA5B,CAEA;EAEA,MAAMvc,QAAQ,CAAG,IAAIzyE,OAAJ,EAAjB,CAEA;EAEA,IAAIivF,gBAAgB,CAAG,KAAvB,CACA,IAAIC,qBAAqB,CAAG,KAA5B,CAEA;EAEA,IAAIC,yBAAyB,CAAG,IAAhC,CAEA;EAEA,MAAM/1E,iBAAiB,CAAG,IAAI3f,OAAJ,EAA1B,CAEA,MAAM21F,QAAQ,CAAG,IAAI13F,OAAJ,EAAjB,CAEA,MAAM23F,WAAW,CAAG,CAAExmD,UAAU,CAAE,IAAd,CAAoBmD,GAAG,CAAE,IAAzB,CAA+BjD,WAAW,CAAE,IAA5C,CAAkDumD,gBAAgB,CAAE,IAApE,CAA0E1mD,OAAO,CAAE,IAAnF,CAApB,CAEA,SAAS2mD,mBAAT,EAA+B,CAE9B,OAAOpB,oBAAoB,GAAK,IAAzB,CAAgCQ,WAAhC,CAA8C,CAArD,CAEA,CAED;EAEA,IAAIlT,GAAG,CAAGrhE,QAAV,CAEA,SAASsP,UAAT,CAAqB8lE,YAArB,CAAmCC,iBAAnC,CAAuD,CAEtD,IAAM,IAAIpyE,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGmyE,YAAY,CAACjyE,MAAlC,CAA0CF,CAAC,EAA3C,CAAiD,CAEhD,MAAMqyE,WAAW,CAAGF,YAAY,CAAEnyE,CAAF,CAAhC,CACA,MAAMoM,OAAO,CAAGzyB,OAAO,CAAC0yB,UAAR,CAAoBgmE,WAApB,CAAiCD,iBAAjC,CAAhB,CACA,GAAKhmE,OAAO,GAAK,IAAjB,CAAwB,OAAOA,OAAP,CAExB,CAED,WAAA,CAEA,CAED,GAAI,CAEH,MAAMgmE,iBAAiB,CAAG,CACzB9sE,KAAK,CAAEkqE,MADkB,CAEzBh+D,KAAK,CAAEi+D,MAFkB,CAGzBvqC,OAAO,CAAEwqC,QAHgB,CAIzBvF,SAAS,CAAEwF,UAJc,CAKzB9+C,kBAAkB,CAAE++C,mBALK,CAMzBE,qBAAqB,CAAED,sBANE,CAOzBG,eAAe,CAAED,gBAPQ,CAQzBG,4BAA4B,CAAED,6BARL,CAA1B,CAWA;EAEAt2F,OAAO,CAACmlB,gBAAR,CAA0B,kBAA1B,CAA8CwzE,aAA9C,CAA6D,KAA7D,EACA34F,OAAO,CAACmlB,gBAAR,CAA0B,sBAA1B,CAAkDyzE,gBAAlD,CAAoE,KAApE,EAEA,GAAKnU,GAAG,GAAK,IAAb,CAAoB,CAEnB,MAAM+T,YAAY,CAAG,CAAE,QAAF,CAAY,OAAZ,CAAqB,oBAArB,CAArB,CAEA,GAAKzB,KAAK,CAAC8B,gBAAN,GAA2B,IAAhC,CAAuC,CAEtCL,YAAY,CAACM,KAAb,GAEA,CAEDrU,GAAG,CAAG/xD,UAAU,CAAE8lE,YAAF,CAAgBC,iBAAhB,CAAhB,CAEA,GAAKhU,GAAG,GAAK,IAAb,CAAoB,CAEnB,GAAK/xD,UAAU,CAAE8lE,YAAF,CAAf,CAAkC,CAEjC,UAAU7vE,KAAJ,CAAW,6DAAX,CAAN,CAEA,CAJD,KAIO,CAEN,UAAUA,KAAJ,CAAW,+BAAX,CAAN,CAEA,CAED,CAED,CAED;EAEA,GAAK87D,GAAG,CAACjlB,wBAAJ,GAAiCj6C,SAAtC,CAAkD,CAEjDk/D,GAAG,CAACjlB,wBAAJ,CAA+B,UAAY,CAE1C,OAAO,CAAE,WAAY,CAAd,CAAiB,WAAY,CAA7B,CAAgC,YAAa,CAA7C,CAAP,CAEA,CAJD,CAMA,CAED,CAAC,MAAQxyC,KAAR,CAAgB,CAEjB9D,OAAO,CAAC8D,KAAR,CAAe,wBAA0BA,KAAK,CAAC+rE,OAA/C,EACA,MAAM/rE,KAAN,CAEA,CAED,IAAI26B,UAAJ,CAAgBgH,YAAhB,CAA8B0K,KAA9B,CAAqCuF,IAArC,CACA,IAAIvI,UAAJ,CAAgBvhC,QAAhB,CAA0BskC,QAA1B,CAAoCkc,UAApC,CAAgDx1B,UAAhD,CAA4D5O,UAA5D,CAAwEooB,OAAxE,CACA,IAAI0/B,YAAJ,CAAkB7nD,SAAlB,CAA6B8nD,WAA7B,CAA0Che,YAA1C,CAAwDvzB,QAAxD,CAAkE8uB,SAAlE,CAEA,IAAI3kC,UAAJ,CAAgBqnD,YAAhB,CAA8BC,cAA9B,CAA8CC,qBAA9C,CAEA,IAAI1U,KAAJ,CAAWzpB,aAAX,CAEA,SAASo+B,aAAT,EAAyB,CAExB1xC,UAAU,CAAG,IAAI73C,eAAJ,CAAqB20E,GAArB,CAAb,CAEA91B,YAAY,CAAG,IAAIh/C,iBAAJ,CAAuB80E,GAAvB,CAA4B98B,UAA5B,CAAwCxV,UAAxC,CAAf,CAEAwV,UAAU,CAACqZ,IAAX,CAAiBrS,YAAjB,EAEA+1B,KAAK,CAAG,IAAIztE,UAAJ,CAAgBwtE,GAAhB,CAAqB98B,UAArB,CAAiCgH,YAAjC,CAAR,CAEA0K,KAAK,CAAG,IAAIviD,UAAJ,CAAgB2tE,GAAhB,CAAqB98B,UAArB,CAAiCgH,YAAjC,CAAR,CAEAqpC,mBAAmB,CAAE,CAAF,CAAnB,CAA2B,IAA3B,CAEAp5B,IAAI,CAAG,IAAI3uD,SAAJ,CAAew0E,GAAf,CAAP,CACApuB,UAAU,CAAG,IAAItgD,eAAJ,EAAb,CACA+e,QAAQ,CAAG,IAAI/d,aAAJ,CAAmB0tE,GAAnB,CAAwB98B,UAAxB,CAAoC0R,KAApC,CAA2ChD,UAA3C,CAAuD1H,YAAvD,CAAqE+1B,KAArE,CAA4E9lB,IAA5E,CAAX,CACAxF,QAAQ,CAAG,IAAIvpD,aAAJ,CAAmBknF,KAAnB,CAAX,CACAzhB,UAAU,CAAG,IAAIlN,eAAJ,CAAqB2uB,KAArB,CAAb,CACAj3C,UAAU,CAAG,IAAI52C,eAAJ,CAAqBu7E,GAArB,CAA0B91B,YAA1B,CAAb,CACAsM,aAAa,CAAG,IAAIxrD,kBAAJ,CAAwBg1E,GAAxB,CAA6B98B,UAA7B,CAAyC7H,UAAzC,CAAqD6O,YAArD,CAAhB,CACAzd,UAAU,CAAG,IAAInhC,eAAJ,CAAqB00E,GAArB,CAA0B3kC,UAA1B,CAAsC8e,IAAtC,CAA4C3D,aAA5C,CAAb,CACA3B,OAAO,CAAG,IAAIjpD,YAAJ,CAAkBo0E,GAAlB,CAAuBvzC,UAAvB,CAAmC4O,UAAnC,CAA+C8e,IAA/C,CAAV,CACAs6B,YAAY,CAAG,IAAI9oF,iBAAJ,CAAuBq0E,GAAvB,CAA4B91B,YAA5B,CAA0C75B,QAA1C,CAAf,CACA4yB,QAAQ,CAAG,IAAI93C,aAAJ,CAAmBymD,UAAnB,CAAX,CACA2iC,YAAY,CAAG,IAAIljF,aAAJ,CAAmBihF,KAAnB,CAA0B39B,QAA1B,CAAoCkc,UAApC,CAAgD3tB,UAAhD,CAA4DgH,YAA5D,CAA0EsM,aAA1E,CAAyFvT,QAAzF,CAAf,CACAvW,SAAS,CAAG,IAAI55B,cAAJ,CAAoB8+C,UAApB,CAAZ,CACA4iC,WAAW,CAAG,IAAI9iF,gBAAJ,CAAsBkgD,UAAtB,CAAd,CACA4kB,YAAY,CAAG,IAAIvkE,iBAAJ,CAAuBixC,UAAvB,CAAmCgH,YAAnC,CAAf,CACA9c,UAAU,CAAG,IAAIriC,eAAJ,CAAqBunF,KAArB,CAA4B39B,QAA5B,CAAsCC,KAAtC,CAA6CC,OAA7C,CAAsD28B,mBAAtD,CAAb,CACAzf,SAAS,CAAG,IAAI3/D,cAAJ,CAAoBkgF,KAApB,CAA2Bz9B,OAA3B,CAAoC3K,YAApC,CAAZ,CAEAwqC,cAAc,CAAG,IAAIzpF,mBAAJ,CAAyB+0E,GAAzB,CAA8B98B,UAA9B,CAA0CiX,IAA1C,CAAgDjQ,YAAhD,CAAjB,CACAyqC,qBAAqB,CAAG,IAAIppF,0BAAJ,CAAgCy0E,GAAhC,CAAqC98B,UAArC,CAAiDiX,IAAjD,CAAuDjQ,YAAvD,CAAxB,CAEAiQ,IAAI,CAAC8K,QAAL,CAAgBsvB,YAAY,CAACtvB,QAA7B,CAEAqtB,KAAK,CAACpoC,YAAN,CAAqBA,YAArB,CACAooC,KAAK,CAACpvC,UAAN,CAAmBA,UAAnB,CACAovC,KAAK,CAAC1gC,UAAN,CAAmBA,UAAnB,CACA0gC,KAAK,CAACkC,WAAN,CAAoBA,WAApB,CACAlC,KAAK,CAACvgB,SAAN,CAAkBA,SAAlB,CACAugB,KAAK,CAAC19B,KAAN,CAAcA,KAAd,CACA09B,KAAK,CAACn4B,IAAN,CAAaA,IAAb,CAEA,CAEDy6B,aAAa,GAEb;EAEA,MAAM5uC,EAAE,CAAG,IAAInzC,YAAJ,CAAkBy/E,KAAlB,CAAyBtS,GAAzB,CAAX,CAEA,KAAKh6B,EAAL,CAAUA,EAAV,CAEA;EAEA,KAAK/3B,UAAL,CAAkB,UAAY,CAE7B,OAAO+xD,GAAP,CAEA,CAJD,CAMA,KAAK2L,oBAAL,CAA4B,UAAY,CAEvC,OAAO3L,GAAG,CAAC2L,oBAAJ,EAAP,CAEA,CAJD,CAMA,KAAKkJ,gBAAL,CAAwB,UAAY,CAEnC,MAAMv+B,SAAS,CAAGpT,UAAU,CAACoI,GAAX,CAAgB,oBAAhB,CAAlB,CACA,GAAKgL,SAAL,CAAiBA,SAAS,CAACw+B,WAAV,GAEjB,CALD,CAOA,KAAKC,mBAAL,CAA2B,UAAY,CAEtC,MAAMz+B,SAAS,CAAGpT,UAAU,CAACoI,GAAX,CAAgB,oBAAhB,CAAlB,CACA,GAAKgL,SAAL,CAAiBA,SAAS,CAAC0+B,cAAV,GAEjB,CALD,CAOA,KAAKC,aAAL,CAAqB,UAAY,CAEhC,OAAO/B,WAAP,CAEA,CAJD,CAMA,KAAKgC,aAAL,CAAqB,SAAWryE,KAAX,CAAmB,CAEvC,GAAKA,KAAK,GAAK/B,SAAf,CAA2B,OAE3BoyE,WAAW,CAAGrwE,KAAd,CAEA,KAAKgR,OAAL,CAAcm/D,MAAd,CAAsBC,OAAtB,CAA+B,KAA/B,EAEA,CARD,CAUA,KAAKz1D,OAAL,CAAe,SAAW/b,MAAX,CAAoB,CAElC,OAAOA,MAAM,CAACmC,GAAP,CAAYovE,MAAZ,CAAoBC,OAApB,CAAP,CAEA,CAJD,CAMA,KAAKp/D,OAAL,CAAe,SAAWnQ,KAAX,CAAkBC,MAAlB,CAA0BwxE,WAA1B,CAAwC,CAEtD,GAAKnvC,EAAE,CAAC2kC,YAAR,CAAuB,CAEtBlmE,OAAO,CAACC,IAAR,CAAc,wEAAd,EACA,OAEA,CAEDsuE,MAAM,CAAGtvE,KAAT,CACAuvE,OAAO,CAAGtvE,MAAV,CAEApoB,OAAO,CAACmoB,KAAR,CAAgB1B,IAAI,CAACsB,KAAL,CAAYI,KAAK,CAAGwvE,WAApB,CAAhB,CACA33F,OAAO,CAACooB,MAAR,CAAiB3B,IAAI,CAACsB,KAAL,CAAYK,MAAM,CAAGuvE,WAArB,CAAjB,CAEA,GAAKiC,WAAW,GAAK,KAArB,CAA6B,CAE5B55F,OAAO,CAACk8C,KAAR,CAAc/zB,KAAd,CAAsBA,KAAK,CAAG,IAA9B,CACAnoB,OAAO,CAACk8C,KAAR,CAAc9zB,MAAd,CAAuBA,MAAM,CAAG,IAAhC,CAEA,CAED,KAAKyxE,WAAL,CAAkB,CAAlB,CAAqB,CAArB,CAAwB1xE,KAAxB,CAA+BC,MAA/B,EAEA,CAxBD,CA0BA,KAAK0xE,oBAAL,CAA4B,SAAW5zE,MAAX,CAAoB,CAE/C,OAAOA,MAAM,CAACmC,GAAP,CAAYovE,MAAM,CAAGE,WAArB,CAAkCD,OAAO,CAAGC,WAA5C,EAA0D5vE,KAA1D,EAAP,CAEA,CAJD,CAMA,KAAKgyE,oBAAL,CAA4B,SAAW5xE,KAAX,CAAkBC,MAAlB,CAA0B2rE,UAA1B,CAAuC,CAElE0D,MAAM,CAAGtvE,KAAT,CACAuvE,OAAO,CAAGtvE,MAAV,CAEAuvE,WAAW,CAAG5D,UAAd,CAEA/zF,OAAO,CAACmoB,KAAR,CAAgB1B,IAAI,CAACsB,KAAL,CAAYI,KAAK,CAAG4rE,UAApB,CAAhB,CACA/zF,OAAO,CAACooB,MAAR,CAAiB3B,IAAI,CAACsB,KAAL,CAAYK,MAAM,CAAG2rE,UAArB,CAAjB,CAEA,KAAK8F,WAAL,CAAkB,CAAlB,CAAqB,CAArB,CAAwB1xE,KAAxB,CAA+BC,MAA/B,EAEA,CAZD,CAcA,KAAK4xE,kBAAL,CAA0B,SAAW9zE,MAAX,CAAoB,CAE7C,OAAOA,MAAM,CAAC4C,IAAP,CAAawuE,gBAAb,CAAP,CAEA,CAJD,CAMA,KAAK5Z,WAAL,CAAmB,SAAWx3D,MAAX,CAAoB,CAEtC,OAAOA,MAAM,CAAC4C,IAAP,CAAa8yD,SAAb,CAAP,CAEA,CAJD,CAMA,KAAKie,WAAL,CAAmB,SAAWlyE,CAAX,CAAcC,CAAd,CAAiBO,KAAjB,CAAwBC,MAAxB,CAAiC,CAEnD,GAAKT,CAAC,CAACgQ,SAAP,CAAmB,CAElBikD,SAAS,CAACvzD,GAAV,CAAeV,CAAC,CAACA,CAAjB,CAAoBA,CAAC,CAACC,CAAtB,CAAyBD,CAAC,CAACqO,CAA3B,CAA8BrO,CAAC,CAACsB,CAAhC,EAEA,CAJD,KAIO,CAEN2yD,SAAS,CAACvzD,GAAV,CAAeV,CAAf,CAAkBC,CAAlB,CAAqBO,KAArB,CAA4BC,MAA5B,EAEA,CAEDixC,KAAK,CAACrhC,QAAN,CAAgBs/D,gBAAgB,CAACxuE,IAAjB,CAAuB8yD,SAAvB,EAAmC9xD,cAAnC,CAAmD6tE,WAAnD,EAAiE5vE,KAAjE,EAAhB,EAEA,CAdD,CAgBA,KAAKkyE,UAAL,CAAkB,SAAW/zE,MAAX,CAAoB,CAErC,OAAOA,MAAM,CAAC4C,IAAP,CAAagvE,QAAb,CAAP,CAEA,CAJD,CAMA,KAAKoC,UAAL,CAAkB,SAAWvyE,CAAX,CAAcC,CAAd,CAAiBO,KAAjB,CAAwBC,MAAxB,CAAiC,CAElD,GAAKT,CAAC,CAACgQ,SAAP,CAAmB,CAElBmgE,QAAQ,CAACzvE,GAAT,CAAcV,CAAC,CAACA,CAAhB,CAAmBA,CAAC,CAACC,CAArB,CAAwBD,CAAC,CAACqO,CAA1B,CAA6BrO,CAAC,CAACsB,CAA/B,EAEA,CAJD,KAIO,CAEN6uE,QAAQ,CAACzvE,GAAT,CAAcV,CAAd,CAAiBC,CAAjB,CAAoBO,KAApB,CAA2BC,MAA3B,EAEA,CAEDixC,KAAK,CAACvhC,OAAN,CAAey/D,eAAe,CAACzuE,IAAhB,CAAsBgvE,QAAtB,EAAiChuE,cAAjC,CAAiD6tE,WAAjD,EAA+D5vE,KAA/D,EAAf,EAEA,CAdD,CAgBA,KAAKoyE,cAAL,CAAsB,UAAY,CAEjC,OAAOpC,YAAP,CAEA,CAJD,CAMA,KAAK9a,cAAL,CAAsB,SAAWmd,OAAX,CAAqB,CAE1C/gC,KAAK,CAAC4jB,cAAN,CAAsB8a,YAAY,CAAGqC,OAArC,EAEA,CAJD,CAMA,KAAKC,aAAL,CAAqB,SAAWC,MAAX,CAAoB,CAExC1C,WAAW,CAAG0C,MAAd,CAEA,CAJD,CAMA,KAAKC,kBAAL,CAA0B,SAAWD,MAAX,CAAoB,CAE7CzC,gBAAgB,CAAGyC,MAAnB,CAEA,CAJD,CAMA;EAEA,KAAK5/B,aAAL,CAAqB,SAAWx0C,MAAX,CAAoB,CAExC,OAAOA,MAAM,CAAC4C,IAAP,CAAa+oB,UAAU,CAAC6oB,aAAX,EAAb,CAAP,CAEA,CAJD,CAMA,KAAKC,aAAL,CAAqB,UAAY,CAEhC9oB,UAAU,CAAC8oB,aAAX,CAAyB4pB,KAAzB,CAAgC1yC,UAAhC,CAA4C9kB,SAA5C,EAEA,CAJD,CAMA,KAAK6tC,aAAL,CAAqB,UAAY,CAEhC,OAAO/oB,UAAU,CAAC+oB,aAAX,EAAP,CAEA,CAJD,CAMA,KAAKC,aAAL,CAAqB,UAAY,CAEhChpB,UAAU,CAACgpB,aAAX,CAAyB0pB,KAAzB,CAAgC1yC,UAAhC,CAA4C9kB,SAA5C,EAEA,CAJD,CAMA,KAAKgjB,KAAL,CAAa,SAAW+H,KAAX,CAAkBjgB,KAAlB,CAAyB0zB,OAAzB,CAAmC,CAE/C,IAAIivC,IAAI,CAAG,CAAX,CAEA,GAAK1iD,KAAK,GAAKvyB,SAAV,EAAuBuyB,KAA5B,CAAoC0iD,IAAI,EAAI,KAAR,CACpC,GAAK3iE,KAAK,GAAKtS,SAAV,EAAuBsS,KAA5B,CAAoC2iE,IAAI,EAAI,GAAR,CACpC,GAAKjvC,OAAO,GAAKhmC,SAAZ,EAAyBgmC,OAA9B,CAAwCivC,IAAI,EAAI,IAAR,CAExC/V,GAAG,CAAC10C,KAAJ,CAAWyqD,IAAX,EAEA,CAVD,CAYA,KAAKjhC,UAAL,CAAkB,UAAY,CAE7B,KAAKxpB,KAAL,CAAY,IAAZ,CAAkB,KAAlB,CAAyB,KAAzB,EAEA,CAJD,CAMA,KAAK6vC,UAAL,CAAkB,UAAY,CAE7B,KAAK7vC,KAAL,CAAY,KAAZ,CAAmB,IAAnB,CAAyB,KAAzB,EAEA,CAJD,CAMA,KAAK2wC,YAAL,CAAoB,UAAY,CAE/B,KAAK3wC,KAAL,CAAY,KAAZ,CAAmB,KAAnB,CAA0B,IAA1B,EAEA,CAJD,CAMA;EAEA,KAAKva,OAAL,CAAe,UAAY,CAE1Bx1B,OAAO,CAAC4lB,mBAAR,CAA6B,kBAA7B,CAAiD+yE,aAAjD,CAAgE,KAAhE,EACA34F,OAAO,CAAC4lB,mBAAR,CAA6B,sBAA7B,CAAqDgzE,gBAArD,CAAuE,KAAvE,EAEAK,WAAW,CAACzjE,OAAZ,GACAylD,YAAY,CAACzlD,OAAb,GACA6gC,UAAU,CAAC7gC,OAAX,GACA4jC,QAAQ,CAAC5jC,OAAT,GACA8/C,UAAU,CAAC9/C,OAAX,GACA8jC,OAAO,CAAC9jC,OAAR,GACAylC,aAAa,CAACzlC,OAAd,GAEAi1B,EAAE,CAACj1B,OAAH,GAEAi1B,EAAE,CAAC7kC,mBAAH,CAAwB,cAAxB,CAAwC60E,gBAAxC,EACAhwC,EAAE,CAAC7kC,mBAAH,CAAwB,YAAxB,CAAsC80E,cAAtC,EAEA,GAAKvC,yBAAL,CAAiC,CAEhCA,yBAAyB,CAAC3iE,OAA1B,GACA2iE,yBAAyB,CAAG,IAA5B,CAEA,CAEDxlD,SAAS,CAAC2b,IAAV,GAEA,CA3BD,CA6BA;EAEA,SAASqqC,aAAT,CAAwB1yE,KAAxB,CAAgC,CAE/BA,KAAK,CAAC00E,cAAN,GAEAzxE,OAAO,CAAClB,GAAR,CAAa,oCAAb,EAEAgvE,cAAc,CAAG,IAAjB,CAEA,CAED,SAAS4B,gBAAT,aAAyC,CAExC1vE,OAAO,CAAClB,GAAR,CAAa,wCAAb,EAEAgvE,cAAc,CAAG,KAAjB,CAEA,MAAM4D,aAAa,CAAGh8B,IAAI,CAAC+K,SAA3B,CACA,MAAMwJ,gBAAgB,CAAGqD,SAAS,CAAChtB,OAAnC,CACA,MAAMqxC,mBAAmB,CAAGrkB,SAAS,CAACiG,UAAtC,CACA,MAAMqe,oBAAoB,CAAGtkB,SAAS,CAAC7gD,WAAvC,CACA,MAAM07C,aAAa,CAAGmF,SAAS,CAACpxD,IAAhC,CAEAi0E,aAAa,GAEbz6B,IAAI,CAAC+K,SAAL,CAAiBixB,aAAjB,CACApkB,SAAS,CAAChtB,OAAV,CAAoB2pB,gBAApB,CACAqD,SAAS,CAACiG,UAAV,CAAuBoe,mBAAvB,CACArkB,SAAS,CAAC7gD,WAAV,CAAwBmlE,oBAAxB,CACAtkB,SAAS,CAACpxD,IAAV,CAAiBisD,aAAjB,CAEA,CAED,SAAS0pB,iBAAT,CAA4B90E,KAA5B,CAAoC,CAEnC,MAAMwsB,QAAQ,CAAGxsB,KAAK,CAACC,MAAvB,CAEAusB,QAAQ,CAAC7sB,mBAAT,CAA8B,SAA9B,CAAyCm1E,iBAAzC,EAEAC,kBAAkB,CAAEvoD,QAAF,CAAlB,CAEA,CAED;EAEA,SAASuoD,kBAAT,CAA6BvoD,QAA7B,CAAwC,CAEvCwoD,gCAAgC,CAAExoD,QAAF,CAAhC,CAEA4jB,UAAU,CAACxmB,MAAX,CAAmB4C,QAAnB,EAEA,CAGD,SAASwoD,gCAAT,CAA2CxoD,QAA3C,CAAsD,CAErD,MAAMi3B,QAAQ,CAAGrT,UAAU,CAACtG,GAAX,CAAgBtd,QAAhB,EAA2Bi3B,QAA5C,CAEA,GAAKA,QAAQ,GAAKnkD,SAAlB,CAA8B,CAE7BmkD,QAAQ,CAACimB,OAAT,CAAkB,SAAWr0B,OAAX,CAAqB,CAEtC09B,YAAY,CAACniB,cAAb,CAA6Bvb,OAA7B,EAEA,CAJD,EAMA,CAED,CAED;EAEA,KAAK0iB,kBAAL,CAA0B,SAAWv/C,MAAX,CAAmB8rB,KAAnB,CAA0BhoB,QAA1B,CAAoCkQ,QAApC,CAA8C7Q,MAA9C,CAAsD6gB,KAAtD,CAA8D,CAEvF,GAAK8H,KAAK,GAAK,IAAf,CAAsBA,KAAK,CAAG8tC,WAAR,CAAqB;EAE3C,MAAM5U,WAAW,CAAK7hD,MAAM,CAACoQ,MAAP,EAAiBpQ,MAAM,CAAC9C,WAAP,CAAmBrP,WAAnB,GAAmC,CAA1E,CAEA,MAAM6rC,OAAO,CAAG4/B,UAAU,CAAEz8D,MAAF,CAAU8rB,KAAV,CAAiBhoB,QAAjB,CAA2BkQ,QAA3B,CAAqC7Q,MAArC,CAA1B,CAEAy3B,KAAK,CAACmqB,WAAN,CAAmB/wC,QAAnB,CAA6BgxC,WAA7B,EAEA;EAEA,IAAI39D,KAAK,CAAGyc,QAAQ,CAACzc,KAArB,CACA,MAAMolB,QAAQ,CAAG3I,QAAQ,CAACud,UAAT,CAAoB5U,QAArC,CAEA;EAEA,GAAKplB,KAAK,GAAK,IAAf,CAAsB,CAErB,GAAKolB,QAAQ,GAAK3lB,SAAb,EAA0B2lB,QAAQ,CAAC1S,KAAT,GAAmB,CAAlD,CAAsD,OAEtD,CAJD,QAIY1S,KAAK,CAAC0S,KAAN,GAAgB,CAArB,CAAyB,CAE/B,OAEA,CAED;EAEA,IAAI2iE,WAAW,CAAG,CAAlB,CAEA,GAAK1oD,QAAQ,CAAC6I,SAAT,GAAuB,IAA5B,CAAmC,CAElCx1B,KAAK,CAAGorB,UAAU,CAACi4B,qBAAX,CAAkC5mC,QAAlC,CAAR,CACA44D,WAAW,CAAG,CAAd,CAEA,CAEDlgC,aAAa,CAACI,KAAd,CAAqBz5B,MAArB,CAA6B6Q,QAA7B,CAAuC6oB,OAAvC,CAAgD/4B,QAAhD,CAA0Dzc,KAA1D,EAEA,IAAIqG,SAAJ,CACA,IAAIm+B,QAAQ,CAAG6uC,cAAf,CAEA,GAAKrzE,KAAK,GAAK,IAAf,CAAsB,CAErBqG,SAAS,CAAG2zB,UAAU,CAACiQ,GAAX,CAAgBjqC,KAAhB,CAAZ,CAEAwkC,QAAQ,CAAG8uC,qBAAX,CACA9uC,QAAQ,CAAChK,QAAT,CAAmBn0B,SAAnB,EAEA,CAED;EAEA,MAAMivE,SAAS,CAAKt1E,KAAK,GAAK,IAAZ,CAAqBA,KAAK,CAAC0S,KAA3B,CAAmC0S,QAAQ,CAAC1S,KAA9D,CAEA,MAAM6iE,UAAU,CAAG94D,QAAQ,CAAC4d,SAAT,CAAmBC,KAAnB,CAA2B+6C,WAA9C,CACA,MAAMG,UAAU,CAAG/4D,QAAQ,CAAC4d,SAAT,CAAmB3nB,KAAnB,CAA2B2iE,WAA9C,CAEA,MAAMh1C,UAAU,CAAG1D,KAAK,GAAK,IAAV,CAAiBA,KAAK,CAACrC,KAAN,CAAc+6C,WAA/B,CAA6C,CAAhE,CACA,MAAMl0C,UAAU,CAAGxE,KAAK,GAAK,IAAV,CAAiBA,KAAK,CAACjqB,KAAN,CAAc2iE,WAA/B,CAA6C5pE,QAAhE,CAEA,MAAMgqE,SAAS,CAAG90E,IAAI,CAACe,GAAL,CAAU6zE,UAAV,CAAsBl1C,UAAtB,CAAlB,CACA,MAAMq1C,OAAO,CAAG/0E,IAAI,CAACc,GAAL,CAAU6zE,SAAV,CAAqBC,UAAU,CAAGC,UAAlC,CAA8Cn1C,UAAU,CAAGc,UAA3D,EAA0E,CAA1F,CAEA,MAAMw0C,SAAS,CAAGh1E,IAAI,CAACe,GAAL,CAAU,CAAV,CAAag0E,OAAO,CAAGD,SAAV,CAAsB,CAAnC,CAAlB,CAEA,GAAKE,SAAS,GAAK,CAAnB,CAAuB,OAEvB;EAEA,GAAK75D,MAAM,CAACoQ,MAAZ,CAAqB,CAEpB,GAAKS,QAAQ,CAAC6I,SAAT,GAAuB,IAA5B,CAAmC,CAElC+d,KAAK,CAACwqB,YAAN,CAAoBpxC,QAAQ,CAAC8I,kBAAT,CAA8Bg9C,mBAAmB,EAArE,EACAjuC,QAAQ,CAACwU,OAAT,CAAkB,CAAlB,EAEA,CALD,KAKO,CAENxU,QAAQ,CAACwU,OAAT,CAAkB,CAAlB,EAEA,CAED,CAbD,QAaYl9B,MAAM,CAACqQ,MAAZ,CAAqB,CAE3B,IAAI6xC,SAAS,CAAGrxC,QAAQ,CAAC0I,SAAzB,CAEA,GAAK2oC,SAAS,GAAKv+D,SAAnB,CAA+Bu+D,SAAS,CAAG,CAAZ,CAAe;EAE9CzqB,KAAK,CAACwqB,YAAN,CAAoBC,SAAS,CAAGyU,mBAAmB,EAAnD,EAEA,GAAK32D,MAAM,CAAC85D,cAAZ,CAA6B,CAE5BpxC,QAAQ,CAACwU,OAAT,CAAkB,CAAlB,EAEA,CAJD,QAIYl9B,MAAM,CAAC+5D,UAAZ,CAAyB,CAE/BrxC,QAAQ,CAACwU,OAAT,CAAkB,CAAlB,EAEA,CAJM,KAIA,CAENxU,QAAQ,CAACwU,OAAT,CAAkB,CAAlB,EAEA,CAED,CAtBM,QAsBKl9B,MAAM,CAACsQ,QAAZ,CAAuB,CAE7BoY,QAAQ,CAACwU,OAAT,CAAkB,CAAlB,EAEA,CAJM,QAIKl9B,MAAM,CAACg6D,QAAZ,CAAuB,CAE7BtxC,QAAQ,CAACwU,OAAT,CAAkB,CAAlB,EAEA,CAED,GAAKl9B,MAAM,CAAC0P,eAAZ,CAA8B,CAE7BgZ,QAAQ,CAAC0U,eAAT,CAA0Bu8B,SAA1B,CAAqCE,SAArC,CAAgD75D,MAAM,CAACpJ,KAAvD,EAEA,CAJD,QAIY+J,QAAQ,CAACi7B,yBAAd,CAA0C,CAEhD,MAAMiM,aAAa,CAAGhjD,IAAI,CAACc,GAAL,CAAUgb,QAAQ,CAACknC,aAAnB,CAAkClnC,QAAQ,CAACy7B,iBAA3C,CAAtB,CAEA1T,QAAQ,CAAC0U,eAAT,CAA0Bu8B,SAA1B,CAAqCE,SAArC,CAAgDhyB,aAAhD,EAEA,CANM,KAMA,CAENnf,QAAQ,CAACO,MAAT,CAAiB0wC,SAAjB,CAA4BE,SAA5B,EAEA,CAED,CApID,CAsIA;EAEA,KAAKh2B,OAAL,CAAe,SAAWlb,KAAX,CAAkB9rB,MAAlB,CAA2B,CAEzCg4D,kBAAkB,CAAGxb,YAAY,CAAClrB,GAAb,CAAkBxF,KAAlB,CAArB,CACAksC,kBAAkB,CAACz1B,IAAnB,GAEA21B,gBAAgB,CAACjxE,IAAjB,CAAuB+wE,kBAAvB,EAEAlsC,KAAK,CAAC3Z,eAAN,CAAuB,SAAWhP,MAAX,CAAoB,CAE1C,GAAKA,MAAM,CAAC+N,OAAP,EAAkB/N,MAAM,CAAC0L,MAAP,CAAcjb,IAAd,CAAoBoM,MAAM,CAAC6O,MAA3B,CAAvB,CAA6D,CAE5DmpD,kBAAkB,CAAC7b,SAAnB,CAA8Bh5C,MAA9B,EAEA,GAAKA,MAAM,CAACuM,UAAZ,CAAyB,CAExBsoD,kBAAkB,CAAC5b,UAAnB,CAA+Bj5C,MAA/B,EAEA,CAED,CAED,CAdD,EAgBA60D,kBAAkB,CAAC1b,WAAnB,CAAgCgc,KAAK,CAAC3jB,uBAAtC,EAEA7oB,KAAK,CAAC5Z,QAAN,CAAgB,SAAW/O,MAAX,CAAoB,CAEnC,MAAM6Q,QAAQ,CAAG7Q,MAAM,CAAC6Q,QAAxB,CAEA,GAAKA,QAAL,CAAgB,CAEf,GAAKpd,KAAK,CAACC,OAAN,CAAemd,QAAf,CAAL,CAAiC,CAEhC,IAAM,IAAIpsB,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGosB,QAAQ,CAAClsB,MAA9B,CAAsCF,CAAC,EAAvC,CAA6C,CAE5C,MAAMw1E,SAAS,CAAGppD,QAAQ,CAAEpsB,CAAF,CAA1B,CAEAy1E,UAAU,CAAED,SAAF,CAAatxC,KAAb,CAAoB3oB,MAApB,CAAV,CAEA,CAED,CAVD,KAUO,CAENk6D,UAAU,CAAErpD,QAAF,CAAY8X,KAAZ,CAAmB3oB,MAAnB,CAAV,CAEA,CAED,CAED,CAxBD,EA0BA+0D,gBAAgB,CAAC7f,GAAjB,GACA2f,kBAAkB,CAAG,IAArB,CAEA,CAtDD,CAwDA;EAEA,IAAIvD,wBAAwB,CAAG,IAA/B,CAEA,SAAShlC,gBAAT,CAA2BC,IAA3B,CAAkC,CAEjC,GAAK+kC,wBAAL,CAAgCA,wBAAwB,CAAE/kC,IAAF,CAAxB,CAEhC,CAED,SAASssC,gBAAT,EAA4B,CAE3B9nD,SAAS,CAAC2b,IAAV,GAEA,CAED,SAASosC,cAAT,EAA0B,CAEzB/nD,SAAS,CAACyN,KAAV,GAEA,CAED,MAAMzN,SAAS,CAAG,IAAI1pC,cAAJ,EAAlB,CACA0pC,SAAS,CAAC6b,gBAAV,CAA4BN,gBAA5B,EAEA,GAAK,OAAO6tC,MAAP,GAAkB,WAAvB,CAAqCppD,SAAS,CAAC8b,UAAV,CAAsBstC,MAAtB,EAErC,KAAKvtC,gBAAL,CAAwB,SAAW/wB,QAAX,CAAsB,CAE7Cy1D,wBAAwB,CAAGz1D,QAA3B,CACAgtB,EAAE,CAAC+D,gBAAH,CAAqB/wB,QAArB,EAEEA,QAAQ,GAAK,IAAf,CAAwBkV,SAAS,CAAC2b,IAAV,EAAxB,CAA2C3b,SAAS,CAACyN,KAAV,EAA3C,CAEA,CAPD,CASAqK,EAAE,CAACtlC,gBAAH,CAAqB,cAArB,CAAqCs1E,gBAArC,EACAhwC,EAAE,CAACtlC,gBAAH,CAAqB,YAArB,CAAmCu1E,cAAnC,EAEA;EAEA,KAAK7vC,MAAL,CAAc,SAAWN,KAAX,CAAkB9rB,MAAlB,CAA2B,CAExC,GAAKA,MAAM,GAAKlZ,SAAX,EAAwBkZ,MAAM,CAACiR,QAAP,GAAoB,IAAjD,CAAwD,CAEvDxmB,OAAO,CAAC8D,KAAR,CAAe,wEAAf,EACA,OAEA,CAED,GAAKgqE,cAAc,GAAK,IAAxB,CAA+B,OAE/B;EAEA,GAAKzsC,KAAK,CAACkyB,UAAN,GAAqB,IAA1B,CAAiClyB,KAAK,CAACzZ,iBAAN,GAEjC;EAEA,GAAKrS,MAAM,CAAC8O,MAAP,GAAkB,IAAvB,CAA8B9O,MAAM,CAACqS,iBAAP,GAE9B,GAAK2Z,EAAE,CAACjB,OAAH,GAAe,IAAf,EAAuBiB,EAAE,CAAC2kC,YAAH,GAAoB,IAAhD,CAAuD,CAEtD,GAAK3kC,EAAE,CAAC0kC,gBAAH,GAAwB,IAA7B,CAAoC1kC,EAAE,CAACioC,YAAH,CAAiBj0D,MAAjB,EAEpCA,MAAM,CAAGgsB,EAAE,CAACooC,SAAH,EAAT,CAAyB;EAEzB,CAED;EACA,GAAKtoC,KAAK,CAAC3Y,OAAN,GAAkB,IAAvB,CAA8B2Y,KAAK,CAAC/b,cAAN,CAAsBuoD,KAAtB,CAA6BxsC,KAA7B,CAAoC9rB,MAApC,CAA4C04D,oBAA5C,EAE9BV,kBAAkB,CAAGxb,YAAY,CAAClrB,GAAb,CAAkBxF,KAAlB,CAAyBosC,gBAAgB,CAACpwE,MAA1C,CAArB,CACAkwE,kBAAkB,CAACz1B,IAAnB,GAEA21B,gBAAgB,CAACjxE,IAAjB,CAAuB+wE,kBAAvB,EAEAr0E,iBAAiB,CAAC+L,gBAAlB,CAAoCsQ,MAAM,CAACE,gBAA3C,CAA6DF,MAAM,CAACC,kBAApE,EACA+8C,QAAQ,CAAC/uB,uBAAT,CAAkCtqC,iBAAlC,EAEA81E,qBAAqB,CAAG,KAAKv3B,oBAA7B,CACAs3B,gBAAgB,CAAGvwC,QAAQ,CAACsZ,IAAT,CAAe,KAAKzqB,cAApB,CAAoC2hD,qBAApC,CAA2Dz5D,MAA3D,CAAnB,CAEA+3D,iBAAiB,CAAGyC,WAAW,CAAClpC,GAAZ,CAAiBxF,KAAjB,CAAwBmsC,eAAe,CAACnwE,MAAxC,CAApB,CACAiwE,iBAAiB,CAACx1B,IAAlB,GAEA01B,eAAe,CAAChxE,IAAhB,CAAsB8wE,iBAAtB,EAEAwF,aAAa,CAAEzxC,KAAF,CAAS9rB,MAAT,CAAiB,CAAjB,CAAoBs4D,KAAK,CAACF,WAA1B,CAAb,CAEAL,iBAAiB,CAAC/e,MAAlB,GAEA,GAAKsf,KAAK,CAACF,WAAN,GAAsB,IAA3B,CAAkC,CAEjCL,iBAAiB,CAACvrB,IAAlB,CAAwB2sB,WAAxB,CAAqCC,gBAArC,EAEA,CAED;EAEA,GAAKI,gBAAgB,GAAK,IAA1B,CAAiCvwC,QAAQ,CAACyZ,YAAT,GAEjC,MAAMwZ,YAAY,CAAG8b,kBAAkB,CAACp9B,KAAnB,CAAyBshB,YAA9C,CAEAnE,SAAS,CAAC3rB,MAAV,CAAkB8vB,YAAlB,CAAgCpwB,KAAhC,CAAuC9rB,MAAvC,EAEA,GAAKw5D,gBAAgB,GAAK,IAA1B,CAAiCvwC,QAAQ,CAAC0Z,UAAT,GAEjC;EAEA,GAAK,KAAKxC,IAAL,CAAU+K,SAAV,GAAwB,IAA7B,CAAoC,KAAK/K,IAAL,CAAUN,KAAV,GAEpC;EAEAzsB,UAAU,CAACgZ,MAAX,CAAmB2rC,iBAAnB,CAAsCjsC,KAAtC,EAEA;EAEAksC,kBAAkB,CAAC1b,WAAnB,CAAgCgc,KAAK,CAAC3jB,uBAAtC,EAEA,GAAK30C,MAAM,CAAC6sD,aAAZ,CAA4B,CAE3B,MAAMD,OAAO,CAAG5sD,MAAM,CAAC4sD,OAAvB,CAEA,IAAM,IAAIhlE,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG+kE,OAAO,CAAC9kE,MAA7B,CAAqCF,CAAC,CAAGC,CAAzC,CAA4CD,CAAC,EAA7C,CAAmD,CAElD,MAAM41E,OAAO,CAAG5Q,OAAO,CAAEhlE,CAAF,CAAvB,CAEA61E,WAAW,CAAE1F,iBAAF,CAAqBjsC,KAArB,CAA4B0xC,OAA5B,CAAqCA,OAAO,CAACjkE,QAA7C,CAAX,CAEA,CAED,CAZD,KAYO,CAENkkE,WAAW,CAAE1F,iBAAF,CAAqBjsC,KAArB,CAA4B9rB,MAA5B,CAAX,CAEA,CAED;EAEA,GAAK04D,oBAAoB,GAAK,IAA9B,CAAqC;EAIpCriE,QAAQ,CAACs1D,6BAAT,CAAwC+M,oBAAxC,EAEA;EAEAriE,QAAQ,CAACq1D,wBAAT,CAAmCgN,oBAAnC,EAEA,CAED;EAEA,GAAK5sC,KAAK,CAAC3Y,OAAN,GAAkB,IAAvB,CAA8B2Y,KAAK,CAAC9b,aAAN,CAAqBsoD,KAArB,CAA4BxsC,KAA5B,CAAmC9rB,MAAnC,EAE9B;EAEA46B,KAAK,CAACxK,OAAN,CAAch3B,KAAd,CAAoBmlD,OAApB,CAA6B,IAA7B,EACA3jB,KAAK,CAACxK,OAAN,CAAch3B,KAAd,CAAoBqnD,OAApB,CAA6B,IAA7B,EACA7lB,KAAK,CAACxK,OAAN,CAAc/W,KAAd,CAAoBonC,OAApB,CAA6B,IAA7B,EAEA7lB,KAAK,CAACqqB,gBAAN,CAAwB,KAAxB,EAEA;EAEAzoB,aAAa,CAAC0D,iBAAd,GACAy4B,kBAAkB,CAAG,CAAE,CAAvB,CACAC,cAAc,CAAG,IAAjB,CAEAV,gBAAgB,CAAC7f,GAAjB,GAEA,GAAK6f,gBAAgB,CAACpwE,MAAjB,CAA0B,CAA/B,CAAmC,CAElCkwE,kBAAkB,CAAGE,gBAAgB,CAAEA,gBAAgB,CAACpwE,MAAjB,CAA0B,CAA5B,CAArC,CAEA,CAJD,KAIO,CAENkwE,kBAAkB,CAAG,IAArB,CAEA,CAEDC,eAAe,CAAC5f,GAAhB,GAEA,GAAK4f,eAAe,CAACnwE,MAAhB,CAAyB,CAA9B,CAAkC,CAEjCiwE,iBAAiB,CAAGE,eAAe,CAAEA,eAAe,CAACnwE,MAAhB,CAAyB,CAA3B,CAAnC,CAEA,CAJD,KAIO,CAENiwE,iBAAiB,CAAG,IAApB,CAEA,CAED,CAxJD,CA0JA,SAASwF,aAAT,CAAwBp6D,MAAxB,CAAgCnD,MAAhC,CAAwCs4C,UAAxC,CAAoD8f,WAApD,CAAkE,CAEjE,GAAKj1D,MAAM,CAACsM,OAAP,GAAmB,KAAxB,CAAgC,OAEhC,MAAMA,OAAO,CAAGtM,MAAM,CAAC0L,MAAP,CAAcjb,IAAd,CAAoBoM,MAAM,CAAC6O,MAA3B,CAAhB,CAEA,GAAKY,OAAL,CAAe,CAEd,GAAKtM,MAAM,CAAC2pD,OAAZ,CAAsB,CAErBxU,UAAU,CAAGn1C,MAAM,CAAC0M,WAApB,CAEA,CAJD,QAIY1M,MAAM,CAACu6D,KAAZ,CAAoB,CAE1B,GAAKv6D,MAAM,CAAC66C,UAAP,GAAsB,IAA3B,CAAkC76C,MAAM,CAAC/G,MAAP,CAAe4D,MAAf,EAElC,CAJM,QAIKmD,MAAM,CAAC+N,OAAZ,CAAsB,CAE5B8mD,kBAAkB,CAAC7b,SAAnB,CAA8Bh5C,MAA9B,EAEA,GAAKA,MAAM,CAACuM,UAAZ,CAAyB,CAExBsoD,kBAAkB,CAAC5b,UAAnB,CAA+Bj5C,MAA/B,EAEA,CAED,CAVM,QAUKA,MAAM,CAACg6D,QAAZ,CAAuB,CAE7B,GAAK,CAAEh6D,MAAM,CAACyM,aAAT,EAA0BotC,QAAQ,CAAC7tB,gBAAT,CAA2BhsB,MAA3B,CAA/B,CAAqE,CAEpE,GAAKi1D,WAAL,CAAmB,CAElBuB,QAAQ,CAAC/3D,qBAAT,CAAgCuB,MAAM,CAAC9C,WAAvC,EACE3I,YADF,CACgB/T,iBADhB,EAGA,CAED,MAAMmgB,QAAQ,CAAG+2B,OAAO,CAACz+B,MAAR,CAAgB+G,MAAhB,CAAjB,CACA,MAAM6Q,QAAQ,CAAG7Q,MAAM,CAAC6Q,QAAxB,CAEA,GAAKA,QAAQ,CAACvE,OAAd,CAAwB,CAEvBsoD,iBAAiB,CAAC9wE,IAAlB,CAAwBkc,MAAxB,CAAgCW,QAAhC,CAA0CkQ,QAA1C,CAAoDskC,UAApD,CAAgEqhB,QAAQ,CAACpiE,CAAzE,CAA4E,IAA5E,EAEA,CAED,CAED,CAtBM,QAsBK4L,MAAM,CAACoQ,MAAP,EAAiBpQ,MAAM,CAACqQ,MAAxB,EAAkCrQ,MAAM,CAACsQ,QAA9C,CAAyD,CAE/D,GAAKtQ,MAAM,CAACyQ,aAAZ,CAA4B;EAI3B,GAAKzQ,MAAM,CAAC4Q,QAAP,CAAgB4b,KAAhB,GAA0BwQ,IAAI,CAAC/T,MAAL,CAAYuD,KAA3C,CAAmD,CAElDxsB,MAAM,CAAC4Q,QAAP,CAAgB3X,MAAhB,GACA+G,MAAM,CAAC4Q,QAAP,CAAgB4b,KAAhB,CAAwBwQ,IAAI,CAAC/T,MAAL,CAAYuD,KAApC,CAEA,CAED,CAED,GAAK,CAAExsB,MAAM,CAACyM,aAAT,EAA0BotC,QAAQ,CAAC9tB,gBAAT,CAA2B/rB,MAA3B,CAA/B,CAAqE,CAEpE,GAAKi1D,WAAL,CAAmB,CAElBuB,QAAQ,CAAC/3D,qBAAT,CAAgCuB,MAAM,CAAC9C,WAAvC,EACE3I,YADF,CACgB/T,iBADhB,EAGA,CAED,MAAMmgB,QAAQ,CAAG+2B,OAAO,CAACz+B,MAAR,CAAgB+G,MAAhB,CAAjB,CACA,MAAM6Q,QAAQ,CAAG7Q,MAAM,CAAC6Q,QAAxB,CAEA,GAAKpd,KAAK,CAACC,OAAN,CAAemd,QAAf,CAAL,CAAiC,CAEhC,MAAMwN,MAAM,CAAG1d,QAAQ,CAAC0d,MAAxB,CAEA,IAAM,IAAI55B,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG25B,MAAM,CAAC15B,MAA5B,CAAoCF,CAAC,CAAGC,CAAxC,CAA2CD,CAAC,EAA5C,CAAkD,CAEjD,MAAMo8B,KAAK,CAAGxC,MAAM,CAAE55B,CAAF,CAApB,CACA,MAAMg/B,aAAa,CAAG5S,QAAQ,CAAEgQ,KAAK,CAAC7B,aAAR,CAA9B,CAEA,GAAKyE,aAAa,EAAIA,aAAa,CAACnX,OAApC,CAA8C,CAE7CsoD,iBAAiB,CAAC9wE,IAAlB,CAAwBkc,MAAxB,CAAgCW,QAAhC,CAA0C8iB,aAA1C,CAAyD0xB,UAAzD,CAAqEqhB,QAAQ,CAACpiE,CAA9E,CAAiFysB,KAAjF,EAEA,CAED,CAED,CAjBD,QAiBYhQ,QAAQ,CAACvE,OAAd,CAAwB,CAE9BsoD,iBAAiB,CAAC9wE,IAAlB,CAAwBkc,MAAxB,CAAgCW,QAAhC,CAA0CkQ,QAA1C,CAAoDskC,UAApD,CAAgEqhB,QAAQ,CAACpiE,CAAzE,CAA4E,IAA5E,EAEA,CAED,CAED,CAED,CAED,MAAM2M,QAAQ,CAAGf,MAAM,CAACe,QAAxB,CAEA,IAAM,IAAItc,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGqc,QAAQ,CAACpc,MAA9B,CAAsCF,CAAC,CAAGC,CAA1C,CAA6CD,CAAC,EAA9C,CAAoD,CAEnD21E,aAAa,CAAEr5D,QAAQ,CAAEtc,CAAF,CAAV,CAAiBoY,MAAjB,CAAyBs4C,UAAzB,CAAqC8f,WAArC,CAAb,CAEA,CAED,CAED,SAASqF,WAAT,CAAsB1F,iBAAtB,CAAyCjsC,KAAzC,CAAgD9rB,MAAhD,CAAwDzG,QAAxD,CAAmE,CAElE,MAAMokE,aAAa,CAAG5F,iBAAiB,CAACtf,MAAxC,CACA,MAAMmlB,mBAAmB,CAAG7F,iBAAiB,CAACrf,YAA9C,CACA,MAAMmlB,kBAAkB,CAAG9F,iBAAiB,CAACnhD,WAA7C,CAEAohD,kBAAkB,CAACzb,eAAnB,CAAoCv8C,MAApC,EAEA,GAAK49D,mBAAmB,CAAC91E,MAApB,CAA6B,CAAlC,CAAsCg2E,sBAAsB,CAAEH,aAAF,CAAiB7xC,KAAjB,CAAwB9rB,MAAxB,CAAtB,CAEtC,GAAKzG,QAAL,CAAgBqhC,KAAK,CAACrhC,QAAN,CAAgBs/D,gBAAgB,CAACxuE,IAAjB,CAAuBkP,QAAvB,CAAhB,EAEhB,GAAKokE,aAAa,CAAC71E,MAAd,CAAuB,CAA5B,CAAgCi2E,aAAa,CAAEJ,aAAF,CAAiB7xC,KAAjB,CAAwB9rB,MAAxB,CAAb,CAChC,GAAK49D,mBAAmB,CAAC91E,MAApB,CAA6B,CAAlC,CAAsCi2E,aAAa,CAAEH,mBAAF,CAAuB9xC,KAAvB,CAA8B9rB,MAA9B,CAAb,CACtC,GAAK69D,kBAAkB,CAAC/1E,MAAnB,CAA4B,CAAjC,CAAqCi2E,aAAa,CAAEF,kBAAF,CAAsB/xC,KAAtB,CAA6B9rB,MAA7B,CAAb,CAErC,CAED,SAAS89D,sBAAT,CAAiCH,aAAjC,CAAgD7xC,KAAhD,CAAuD9rB,MAAvD,CAAgE,CAE/D,GAAK05D,yBAAyB,GAAK,IAAnC,CAA0C,CAEzC,MAAMsE,cAAc,CAAGzG,UAAU,GAAK,IAAf,EAAuBrnC,YAAY,CAACC,QAAb,GAA0B,IAAxE,CACA,MAAM8tC,gBAAgB,CAAGD,cAAc,CAAGj8F,4BAAH,CAAkCF,iBAAzE,CAEA63F,yBAAyB,CAAG,IAAIuE,gBAAJ,CAAsB,IAAtB,CAA4B,IAA5B,CAAkC,CAC7D3oE,eAAe,CAAE,IAD4C,CAE7D3O,IAAI,CAAEs/D,KAAK,CAAC0D,OAAN,CAAevuF,aAAf,IAAmC,IAAnC,CAA0CA,aAA1C,CAA0DP,gBAFH,CAG7D+5B,SAAS,CAAEh6B,wBAHkD,CAI7D+5B,SAAS,CAAEp6B,aAJkD,CAK7Dk6B,KAAK,CAAEp6B,mBALsD,CAM7Dq6B,KAAK,CAAEr6B,mBANsD,CAAlC,CAA5B,CASA,CAED,MAAM4xD,mBAAmB,CAAGqsC,KAAK,CAACpsC,eAAN,EAA5B,CACAosC,KAAK,CAACnsC,eAAN,CAAuButC,yBAAvB,EACApB,KAAK,CAAChnD,KAAN,GAEA;EACA;EACA,MAAM4sD,kBAAkB,CAAG5F,KAAK,CAACv8B,WAAjC,CACAu8B,KAAK,CAACv8B,WAAN,CAAoBxiE,aAApB,CAEAwkG,aAAa,CAAEJ,aAAF,CAAiB7xC,KAAjB,CAAwB9rB,MAAxB,CAAb,CAEAs4D,KAAK,CAACv8B,WAAN,CAAoBmiC,kBAApB,CAEA7nE,QAAQ,CAACs1D,6BAAT,CAAwC+N,yBAAxC,EACArjE,QAAQ,CAACq1D,wBAAT,CAAmCgO,yBAAnC,EAEApB,KAAK,CAACnsC,eAAN,CAAuBF,mBAAvB,EAEA,CAED,SAAS8xC,aAAT,CAAwB1iC,UAAxB,CAAoCvP,KAApC,CAA2C9rB,MAA3C,CAAoD,CAEnD,MAAM65D,gBAAgB,CAAG/tC,KAAK,CAAC3Y,OAAN,GAAkB,IAAlB,CAAyB2Y,KAAK,CAAC+tC,gBAA/B,CAAkD,IAA3E,CAEA,IAAM,IAAIjyE,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGwzC,UAAU,CAACvzC,MAAhC,CAAwCF,CAAC,CAAGC,CAA5C,CAA+CD,CAAC,EAAhD,CAAsD,CAErD,MAAMixD,UAAU,CAAGxd,UAAU,CAAEzzC,CAAF,CAA7B,CAEA,MAAMub,MAAM,CAAG01C,UAAU,CAAC11C,MAA1B,CACA,MAAMW,QAAQ,CAAG+0C,UAAU,CAAC/0C,QAA5B,CACA,MAAMkQ,QAAQ,CAAG6lD,gBAAgB,GAAK,IAArB,CAA4BhhB,UAAU,CAAC7kC,QAAvC,CAAkD6lD,gBAAnE,CACA,MAAM71C,KAAK,CAAG60B,UAAU,CAAC70B,KAAzB,CAEA,GAAK7gB,MAAM,CAAC0L,MAAP,CAAcjb,IAAd,CAAoBoM,MAAM,CAAC6O,MAA3B,CAAL,CAA2C,CAE1CuwC,YAAY,CAAEj8C,MAAF,CAAU2oB,KAAV,CAAiB9rB,MAAjB,CAAyB8D,QAAzB,CAAmCkQ,QAAnC,CAA6CgQ,KAA7C,CAAZ,CAEA,CAED,CAED,CAED,SAASo7B,YAAT,CAAuBj8C,MAAvB,CAA+B2oB,KAA/B,CAAsC9rB,MAAtC,CAA8C8D,QAA9C,CAAwDkQ,QAAxD,CAAkEgQ,KAAlE,CAA0E,CAEzE7gB,MAAM,CAAC4M,cAAP,CAAuBuoD,KAAvB,CAA8BxsC,KAA9B,CAAqC9rB,MAArC,CAA6C8D,QAA7C,CAAuDkQ,QAAvD,CAAiEgQ,KAAjE,EAEA7gB,MAAM,CAACkM,eAAP,CAAuB3f,gBAAvB,CAAyCsQ,MAAM,CAACC,kBAAhD,CAAoEkD,MAAM,CAAC9C,WAA3E,EACA8C,MAAM,CAACmM,YAAP,CAAoB1d,eAApB,CAAqCuR,MAAM,CAACkM,eAA5C,EAEA2E,QAAQ,CAACjE,cAAT,CAAyBuoD,KAAzB,CAAgCxsC,KAAhC,CAAuC9rB,MAAvC,CAA+C8D,QAA/C,CAAyDX,MAAzD,CAAiE6gB,KAAjE,EAEA,GAAKhQ,QAAQ,CAAC4C,WAAT,GAAyB,IAAzB,EAAiC5C,QAAQ,CAACyC,IAAT,GAAkBr/C,UAAxD,CAAqE,CAEpE48C,QAAQ,CAACyC,IAAT,CAAgBt/C,QAAhB,CACA68C,QAAQ,CAAC9c,WAAT,CAAuB,IAAvB,CACAohE,KAAK,CAAC/Y,kBAAN,CAA0Bv/C,MAA1B,CAAkC8rB,KAAlC,CAAyChoB,QAAzC,CAAmDkQ,QAAnD,CAA6D7Q,MAA7D,CAAqE6gB,KAArE,EAEAhQ,QAAQ,CAACyC,IAAT,CAAgBv/C,SAAhB,CACA88C,QAAQ,CAAC9c,WAAT,CAAuB,IAAvB,CACAohE,KAAK,CAAC/Y,kBAAN,CAA0Bv/C,MAA1B,CAAkC8rB,KAAlC,CAAyChoB,QAAzC,CAAmDkQ,QAAnD,CAA6D7Q,MAA7D,CAAqE6gB,KAArE,EAEAhQ,QAAQ,CAACyC,IAAT,CAAgBr/C,UAAhB,CAEA,CAZD,KAYO,CAENkhG,KAAK,CAAC/Y,kBAAN,CAA0Bv/C,MAA1B,CAAkC8rB,KAAlC,CAAyChoB,QAAzC,CAAmDkQ,QAAnD,CAA6D7Q,MAA7D,CAAqE6gB,KAArE,EAEA,CAED7gB,MAAM,CAAC6M,aAAP,CAAsBsoD,KAAtB,CAA6BxsC,KAA7B,CAAoC9rB,MAApC,CAA4C8D,QAA5C,CAAsDkQ,QAAtD,CAAgEgQ,KAAhE,EAEA,CAED,SAASq5C,UAAT,CAAqBrpD,QAArB,CAA+B8X,KAA/B,CAAsC3oB,MAAtC,CAA+C,CAE9C,GAAK2oB,KAAK,CAAC3Y,OAAN,GAAkB,IAAvB,CAA8B2Y,KAAK,CAAG8tC,WAAR,CAAqB;EAEnD,MAAM72B,kBAAkB,CAAGnL,UAAU,CAACtG,GAAX,CAAgBtd,QAAhB,CAA3B,CAEA,MAAMgV,MAAM,CAAGgvC,kBAAkB,CAACp9B,KAAnB,CAAyB5R,MAAxC,CACA,MAAMkzB,YAAY,CAAG8b,kBAAkB,CAACp9B,KAAnB,CAAyBshB,YAA9C,CAEA,MAAMiiB,kBAAkB,CAAGn1C,MAAM,CAAC4R,KAAP,CAAajlC,OAAxC,CAEA,MAAM+d,UAAU,CAAG6mD,YAAY,CAACljB,aAAb,CAA4BrjC,QAA5B,CAAsCgV,MAAM,CAAC4R,KAA7C,CAAoDshB,YAApD,CAAkEpwB,KAAlE,CAAyE3oB,MAAzE,CAAnB,CACA,MAAMi7D,eAAe,CAAG7D,YAAY,CAACviB,kBAAb,CAAiCtkC,UAAjC,CAAxB,CAEA,IAAIu3B,QAAQ,CAAGlI,kBAAkB,CAACkI,QAAlC,CAEA;EAEAlI,kBAAkB,CAACzvB,WAAnB,CAAiCU,QAAQ,CAACujC,sBAAT,CAAkCzrB,KAAK,CAACxY,WAAxC,CAAsD,IAAvF,CACAyvB,kBAAkB,CAACxsB,GAAnB,CAAyBuV,KAAK,CAACvV,GAA/B,CACAwsB,kBAAkB,CAAClnB,MAAnB,CAA4B,CAAE7H,QAAQ,CAACujC,sBAAT,CAAkCV,UAAlC,CAA+Clc,QAAjD,EAA4DrJ,GAA5D,CAAiEtd,QAAQ,CAAC6H,MAAT,EAAmBknB,kBAAkB,CAACzvB,WAAvG,CAA5B,CAEA,GAAK23B,QAAQ,GAAKnkD,SAAlB,CAA8B;EAI7BktB,QAAQ,CAACttB,gBAAT,CAA2B,SAA3B,CAAsC41E,iBAAtC,EAEArxB,QAAQ,CAAG,IAAImlB,GAAJ,EAAX,CACArtB,kBAAkB,CAACkI,QAAnB,CAA8BA,QAA9B,CAEA,CAED,IAAIpO,OAAO,CAAGoO,QAAQ,CAAC3Z,GAAT,CAAc8sC,eAAd,CAAd,CAEA,GAAKvhC,OAAO,GAAK/1C,SAAjB,CAA6B;EAI5B,GAAKi8C,kBAAkB,CAACuf,cAAnB,GAAsCzlB,OAAtC,EAAiDkG,kBAAkB,CAACo7B,kBAAnB,GAA0CA,kBAAhG,CAAqH,CAEpHE,8BAA8B,CAAErqD,QAAF,CAAYN,UAAZ,CAA9B,CAEA,OAAOmpB,OAAP,CAEA,CAED,CAZD,KAYO,CAENnpB,UAAU,CAACiV,QAAX,CAAsB4xC,YAAY,CAACluB,WAAb,CAA0Br4B,QAA1B,CAAtB,CAEAA,QAAQ,CAAC6E,OAAT,CAAkB1V,MAAlB,CAA0BuQ,UAA1B,CAAsC4kD,KAAtC,EAEAtkD,QAAQ,CAAC8E,eAAT,CAA0BpF,UAA1B,CAAsC4kD,KAAtC,EAEAz7B,OAAO,CAAG09B,YAAY,CAACtiB,cAAb,CAA6BvkC,UAA7B,CAAyC0qD,eAAzC,CAAV,CACAnzB,QAAQ,CAACrhD,GAAT,CAAcw0E,eAAd,CAA+BvhC,OAA/B,EAEAkG,kBAAkB,CAACpa,QAAnB,CAA8BjV,UAAU,CAACiV,QAAzC,CAEA,CAED,MAAMA,QAAQ,CAAGoa,kBAAkB,CAACpa,QAApC,CAEA,GAAO,CAAE3U,QAAQ,CAAC4V,gBAAX,EAA+B,CAAE5V,QAAQ,CAAC+vB,mBAA5C,EAAqE/vB,QAAQ,CAACiV,QAAT,GAAsB,IAAhG,CAAuG,CAEtGN,QAAQ,CAAC7Q,cAAT,CAA0BmR,QAAQ,CAACU,OAAnC,CAEA,CAED00C,8BAA8B,CAAErqD,QAAF,CAAYN,UAAZ,CAA9B,CAEA;EAEAqvB,kBAAkB,CAACu7B,WAAnB,CAAiCC,mBAAmB,CAAEvqD,QAAF,CAApD,CACA+uB,kBAAkB,CAACo7B,kBAAnB,CAAwCA,kBAAxC,CAEA,GAAKp7B,kBAAkB,CAACu7B,WAAxB,CAAsC;EAIrC31C,QAAQ,CAAC8O,iBAAT,CAA2B5uC,KAA3B,CAAmCmgC,MAAM,CAAC4R,KAAP,CAAauf,OAAhD,CACAxxB,QAAQ,CAAC+O,UAAT,CAAoB7uC,KAApB,CAA4BmgC,MAAM,CAAC4R,KAAP,CAAawf,KAAzC,CACAzxB,QAAQ,CAACgP,iBAAT,CAA2B9uC,KAA3B,CAAmCmgC,MAAM,CAAC4R,KAAP,CAAa+c,WAAhD,CACAhvB,QAAQ,CAACkP,uBAAT,CAAiChvC,KAAjC,CAAyCmgC,MAAM,CAAC4R,KAAP,CAAayf,iBAAtD,CACA1xB,QAAQ,CAACyP,UAAT,CAAoBvvC,KAApB,CAA4BmgC,MAAM,CAAC4R,KAAP,CAAagd,IAAzC,CACAjvB,QAAQ,CAAC6P,gBAAT,CAA0B3vC,KAA1B,CAAkCmgC,MAAM,CAAC4R,KAAP,CAAa0f,UAA/C,CACA3xB,QAAQ,CAACyQ,cAAT,CAAwBvwC,KAAxB,CAAgCmgC,MAAM,CAAC4R,KAAP,CAAaid,QAA7C,CACAlvB,QAAQ,CAAC0Q,KAAT,CAAexwC,KAAf,CAAuBmgC,MAAM,CAAC4R,KAAP,CAAa2f,YAApC,CACA5xB,QAAQ,CAAC2Q,KAAT,CAAezwC,KAAf,CAAuBmgC,MAAM,CAAC4R,KAAP,CAAa4f,YAApC,CACA7xB,QAAQ,CAACgQ,WAAT,CAAqB9vC,KAArB,CAA6BmgC,MAAM,CAAC4R,KAAP,CAAan3B,KAA1C,CACAklB,QAAQ,CAACiQ,iBAAT,CAA2B/vC,KAA3B,CAAmCmgC,MAAM,CAAC4R,KAAP,CAAa6f,WAAhD,CACA9xB,QAAQ,CAACsQ,gBAAT,CAA0BpwC,KAA1B,CAAkCmgC,MAAM,CAAC4R,KAAP,CAAakd,IAA/C,CAEAnvB,QAAQ,CAACuP,oBAAT,CAA8BrvC,KAA9B,CAAsCmgC,MAAM,CAAC4R,KAAP,CAAa1C,oBAAnD,CACAvP,QAAQ,CAACwP,uBAAT,CAAiCtvC,KAAjC,CAAyCmgC,MAAM,CAAC4R,KAAP,CAAazC,uBAAtD,CACAxP,QAAQ,CAAC8P,aAAT,CAAuB5vC,KAAvB,CAA+BmgC,MAAM,CAAC4R,KAAP,CAAanC,aAA5C,CACA9P,QAAQ,CAAC+P,gBAAT,CAA0B7vC,KAA1B,CAAkCmgC,MAAM,CAAC4R,KAAP,CAAalC,gBAA/C,CACA/P,QAAQ,CAACoQ,cAAT,CAAwBlwC,KAAxB,CAAgCmgC,MAAM,CAAC4R,KAAP,CAAa7B,cAA7C,CACApQ,QAAQ,CAACqQ,iBAAT,CAA2BnwC,KAA3B,CAAmCmgC,MAAM,CAAC4R,KAAP,CAAa5B,iBAAhD,CACA;EAEA,CAED,MAAMwlC,YAAY,CAAG3hC,OAAO,CAACwP,WAAR,EAArB,CACA,MAAMoyB,YAAY,CAAGjpF,aAAa,CAACy6D,YAAd,CAA4BuuB,YAAY,CAACvvB,GAAzC,CAA8CtmB,QAA9C,CAArB,CAEAoa,kBAAkB,CAACuf,cAAnB,CAAoCzlB,OAApC,CACAkG,kBAAkB,CAAC07B,YAAnB,CAAkCA,YAAlC,CAEA,OAAO5hC,OAAP,CAEA,CAED,SAASwhC,8BAAT,CAAyCrqD,QAAzC,CAAmDN,UAAnD,CAAgE,CAE/D,MAAMqvB,kBAAkB,CAAGnL,UAAU,CAACtG,GAAX,CAAgBtd,QAAhB,CAA3B,CAEA+uB,kBAAkB,CAACsE,cAAnB,CAAoC3zB,UAAU,CAAC2zB,cAA/C,CACAtE,kBAAkB,CAAC2Q,UAAnB,CAAgChgC,UAAU,CAACggC,UAA3C,CACA3Q,kBAAkB,CAACsR,QAAnB,CAA8B3gC,UAAU,CAAC2gC,QAAzC,CACAtR,kBAAkB,CAACvc,YAAnB,CAAkC9S,UAAU,CAAC8S,YAA7C,CACAuc,kBAAkB,CAAC+I,YAAnB,CAAkCp4B,UAAU,CAACo4B,YAA7C,CACA/I,kBAAkB,CAACwR,iBAAnB,CAAuC7gC,UAAU,CAAC6gC,iBAAlD,CACAxR,kBAAkB,CAACuP,iBAAnB,CAAuC5+B,UAAU,CAAC4+B,iBAAlD,CACAvP,kBAAkB,CAACT,eAAnB,CAAqC5uB,UAAU,CAAC6+B,mBAAhD,CACAxP,kBAAkB,CAACmR,YAAnB,CAAkCxgC,UAAU,CAACwgC,YAA7C,CACAnR,kBAAkB,CAACkR,cAAnB,CAAoCvgC,UAAU,CAACugC,cAA/C,CAEA,CAED,SAASwoB,UAAT,CAAqBz8D,MAArB,CAA6B8rB,KAA7B,CAAoChoB,QAApC,CAA8CkQ,QAA9C,CAAwD7Q,MAAxD,CAAiE,CAEhE,GAAK2oB,KAAK,CAAC3Y,OAAN,GAAkB,IAAvB,CAA8B2Y,KAAK,CAAG8tC,WAAR,CAAqB;EAEnDvjE,QAAQ,CAACmyD,iBAAT,GAEA,MAAMjyC,GAAG,CAAGuV,KAAK,CAACvV,GAAlB,CACA,MAAMjD,WAAW,CAAGU,QAAQ,CAACujC,sBAAT,CAAkCzrB,KAAK,CAACxY,WAAxC,CAAsD,IAA1E,CACA,MAAMve,QAAQ,CAAK2jE,oBAAoB,GAAK,IAA3B,CAAoCJ,KAAK,CAACjxB,cAA1C,CAA2DqxB,oBAAoB,CAACl/D,OAArB,CAA6BzE,QAAzG,CACA,MAAM8mB,MAAM,CAAG,CAAE7H,QAAQ,CAACujC,sBAAT,CAAkCV,UAAlC,CAA+Clc,QAAjD,EAA4DrJ,GAA5D,CAAiEtd,QAAQ,CAAC6H,MAAT,EAAmBvI,WAApF,CAAf,CACA,MAAM4gC,YAAY,CAAGlgC,QAAQ,CAAC0C,YAAT,GAA0B,IAA1B,EAAkC,CAAC,CAAE5S,QAAQ,CAACud,UAAT,CAAoBhI,KAAzD,EAAkEvV,QAAQ,CAACud,UAAT,CAAoBhI,KAApB,CAA0BwG,QAA1B,GAAuC,CAA9H,CACA,MAAMo0B,cAAc,CAAG,CAAC,CAAEjgC,QAAQ,CAACiH,SAAZ,EAAyB,CAAC,CAAEnX,QAAQ,CAACud,UAAT,CAAoBiB,OAAvE,CACA,MAAMkE,YAAY,CAAG,CAAC,CAAE1iB,QAAQ,CAACwd,eAAT,CAAyB7U,QAAjD,CACA,MAAMq/B,YAAY,CAAG,CAAC,CAAEhoC,QAAQ,CAACwd,eAAT,CAAyBngB,MAAjD,CACA,MAAMozC,iBAAiB,CAAG,CAAC,CAAEzwC,QAAQ,CAACwd,eAAT,CAAyB7U,QAA5B,CAAuC3I,QAAQ,CAACwd,eAAT,CAAyB7U,QAAzB,CAAkC3kB,MAAzE,CAAkF,CAA5G,CAEA,MAAMi7C,kBAAkB,CAAGnL,UAAU,CAACtG,GAAX,CAAgBtd,QAAhB,CAA3B,CACA,MAAMgV,MAAM,CAAGgvC,kBAAkB,CAACp9B,KAAnB,CAAyB5R,MAAxC,CAEA,GAAKwwC,gBAAgB,GAAK,IAA1B,CAAiC,CAEhC,GAAKC,qBAAqB,GAAK,IAA1B,EAAkCz5D,MAAM,GAAK44D,cAAlD,CAAmE,CAElE,MAAM91B,QAAQ,CACb9iC,MAAM,GAAK44D,cAAX,EACA5kD,QAAQ,CAACvC,EAAT,GAAgBknD,kBAFjB,CAIA;EACA;EACA;EACA1vC,QAAQ,CAAC4Z,QAAT,CAAmB7uB,QAAnB,CAA6BhU,MAA7B,CAAqC8iC,QAArC,EAEA,CAED,CAED;EAEA,IAAI47B,kBAAkB,CAAG,KAAzB,CAEA,GAAK1qD,QAAQ,CAACre,OAAT,GAAqBotC,kBAAkB,CAAC8lB,SAA7C,CAAyD,CAExD,GAAK9lB,kBAAkB,CAACu7B,WAAnB,EAAoCv7B,kBAAkB,CAACo7B,kBAAnB,GAA0Cn1C,MAAM,CAAC4R,KAAP,CAAajlC,OAAhG,CAA4G,CAE3G+oE,kBAAkB,CAAG,IAArB,CAEA,CAJD,QAIY37B,kBAAkB,CAACsE,cAAnB,GAAsCtyC,QAA3C,CAAsD,CAE5D2pE,kBAAkB,CAAG,IAArB,CAEA,CAJM,QAIKv7D,MAAM,CAAC0P,eAAP,EAA0BkwB,kBAAkB,CAAC2Q,UAAnB,GAAkC,KAAjE,CAAyE,CAE/EgrB,kBAAkB,CAAG,IAArB,CAEA,CAJM,QAIK,CAAEv7D,MAAM,CAAC0P,eAAT,EAA4BkwB,kBAAkB,CAAC2Q,UAAnB,GAAkC,IAAnE,CAA0E,CAEhFgrB,kBAAkB,CAAG,IAArB,CAEA,CAJM,QAIKv7D,MAAM,CAACyQ,aAAP,EAAwBmvB,kBAAkB,CAACsR,QAAnB,GAAgC,KAA7D,CAAqE,CAE3EqqB,kBAAkB,CAAG,IAArB,CAEA,CAJM,QAIK,CAAEv7D,MAAM,CAACyQ,aAAT,EAA0BmvB,kBAAkB,CAACsR,QAAnB,GAAgC,IAA/D,CAAsE,CAE5EqqB,kBAAkB,CAAG,IAArB,CAEA,CAJM,QAIK37B,kBAAkB,CAAClnB,MAAnB,GAA8BA,MAAnC,CAA4C,CAElD6iD,kBAAkB,CAAG,IAArB,CAEA,CAJM,QAIK1qD,QAAQ,CAACuC,GAAT,EAAgBwsB,kBAAkB,CAACxsB,GAAnB,GAA2BA,GAAhD,CAAsD,CAE5DmoD,kBAAkB,CAAG,IAArB,CAEA,CAJM,QAIK37B,kBAAkB,CAACuP,iBAAnB,GAAyCxrD,SAAzC,GACTi8C,kBAAkB,CAACuP,iBAAnB,GAAyCrpB,QAAQ,CAACoZ,SAAlD,EACFU,kBAAkB,CAACT,eAAnB,GAAuCrZ,QAAQ,CAACqZ,eAFrC,CAAL,CAE8D,CAEpEo8B,kBAAkB,CAAG,IAArB,CAEA,CANM,QAMK37B,kBAAkB,CAACmR,YAAnB,GAAoCA,YAAzC,CAAwD,CAE9DwqB,kBAAkB,CAAG,IAArB,CAEA,CAJM,QAIK37B,kBAAkB,CAACkR,cAAnB,GAAsCA,cAA3C,CAA4D,CAElEyqB,kBAAkB,CAAG,IAArB,CAEA,CAJM,QAIK37B,kBAAkB,CAACvc,YAAnB,GAAoCA,YAAzC,CAAwD,CAE9Dk4C,kBAAkB,CAAG,IAArB,CAEA,CAJM,QAIK37B,kBAAkB,CAAC+I,YAAnB,GAAoCA,YAAzC,CAAwD,CAE9D4yB,kBAAkB,CAAG,IAArB,CAEA,CAJM,QAIKxuC,YAAY,CAACC,QAAb,GAA0B,IAA1B,EAAkC4S,kBAAkB,CAACwR,iBAAnB,GAAyCA,iBAAhF,CAAoG,CAE1GmqB,kBAAkB,CAAG,IAArB,CAEA,CAED,CA9DD,KA8DO,CAENA,kBAAkB,CAAG,IAArB,CACA37B,kBAAkB,CAAC8lB,SAAnB,CAA+B70C,QAAQ,CAACre,OAAxC,CAEA,CAED;EAEA,IAAIknC,OAAO,CAAGkG,kBAAkB,CAACuf,cAAjC,CAEA,GAAKoc,kBAAkB,GAAK,IAA5B,CAAmC,CAElC7hC,OAAO,CAAGwgC,UAAU,CAAErpD,QAAF,CAAY8X,KAAZ,CAAmB3oB,MAAnB,CAApB,CAEA,CAED,IAAIw7D,cAAc,CAAG,KAArB,CACA,IAAIC,eAAe,CAAG,KAAtB,CACA,IAAIC,aAAa,CAAG,KAApB,CAEA,MAAMC,UAAU,CAAGjiC,OAAO,CAACwP,WAAR,EAAnB,CACC0yB,UAAU,CAAGh8B,kBAAkB,CAACpa,QADjC,CAGA,GAAKiS,KAAK,CAAC2pB,UAAN,CAAkB1nB,OAAO,CAACA,OAA1B,CAAL,CAA2C,CAE1C8hC,cAAc,CAAG,IAAjB,CACAC,eAAe,CAAG,IAAlB,CACAC,aAAa,CAAG,IAAhB,CAEA,CAED,GAAK7qD,QAAQ,CAACvC,EAAT,GAAgBknD,kBAArB,CAA0C,CAEzCA,kBAAkB,CAAG3kD,QAAQ,CAACvC,EAA9B,CAEAmtD,eAAe,CAAG,IAAlB,CAEA,CAED,GAAKD,cAAc,EAAI/F,cAAc,GAAK54D,MAA1C,CAAmD,CAElD8+D,UAAU,CAACxyB,QAAX,CAAqB0Z,GAArB,CAA0B,kBAA1B,CAA8ChmD,MAAM,CAACE,gBAArD,EAEA,GAAKgwB,YAAY,CAACiR,sBAAlB,CAA2C,CAE1C29B,UAAU,CAACxyB,QAAX,CAAqB0Z,GAArB,CAA0B,eAA1B,CACC,KAAQh+D,IAAI,CAACuB,GAAL,CAAUyW,MAAM,CAAC0N,GAAP,CAAa,GAAvB,EAA+B1lB,IAAI,CAACwB,GAA5C,CADD,EAGA,CAED,GAAKovE,cAAc,GAAK54D,MAAxB,CAAiC,CAEhC44D,cAAc,CAAG54D,MAAjB,CAEA;EACA;EACA;EAEA4+D,eAAe,CAAG,IAAlB,CAAyB;EACzBC,aAAa,CAAG,IAAhB,CAAuB;EAEvB,CAED;EACA;EAEA,GAAK7qD,QAAQ,CAAC4V,gBAAT,EACJ5V,QAAQ,CAAC6hD,mBADL,EAEJ7hD,QAAQ,CAAC2hD,kBAFL,EAGJ3hD,QAAQ,CAACujC,sBAHL,EAIJvjC,QAAQ,CAAC6H,MAJV,CAImB,CAElB,MAAMmjD,OAAO,CAAGF,UAAU,CAACtkD,GAAX,CAAeykD,cAA/B,CAEA,GAAKD,OAAO,GAAKl4E,SAAjB,CAA6B,CAE5Bk4E,OAAO,CAAC1yB,QAAR,CAAkB0Z,GAAlB,CACC2T,QAAQ,CAAC/3D,qBAAT,CAAgC5B,MAAM,CAACK,WAAvC,CADD,EAGA,CAED,CAED,GAAK2T,QAAQ,CAAC6hD,mBAAT,EACJ7hD,QAAQ,CAAC2hD,kBADL,EAEJ3hD,QAAQ,CAACyhD,qBAFL,EAGJzhD,QAAQ,CAAC4L,mBAHL,EAIJ5L,QAAQ,CAACujC,sBAJL,EAKJvjC,QAAQ,CAAC4V,gBALV,CAK6B,CAE5Bk1C,UAAU,CAACxyB,QAAX,CAAqB0Z,GAArB,CAA0B,gBAA1B,CAA4ChmD,MAAM,CAAC8jC,oBAAP,GAAgC,IAA5E,EAEA,CAED,GAAK9vB,QAAQ,CAAC6hD,mBAAT,EACJ7hD,QAAQ,CAAC2hD,kBADL,EAEJ3hD,QAAQ,CAACyhD,qBAFL,EAGJzhD,QAAQ,CAAC4L,mBAHL,EAIJ5L,QAAQ,CAACujC,sBAJL,EAKJvjC,QAAQ,CAAC4V,gBALL,EAMJ5V,QAAQ,CAACgjD,gBANL,EAOJ7zD,MAAM,CAACyQ,aAPR,CAOwB,CAEvBkrD,UAAU,CAACxyB,QAAX,CAAqB0Z,GAArB,CAA0B,YAA1B,CAAwChmD,MAAM,CAACC,kBAA/C,EAEA,CAED,CAED;EACA;EACA;EAEA,GAAKkD,MAAM,CAACyQ,aAAZ,CAA4B,CAE3BkrD,UAAU,CAAC/uB,WAAX,CAAwBiW,GAAxB,CAA6B7iD,MAA7B,CAAqC,YAArC,EACA27D,UAAU,CAAC/uB,WAAX,CAAwBiW,GAAxB,CAA6B7iD,MAA7B,CAAqC,mBAArC,EAEA,MAAM4Q,QAAQ,CAAG5Q,MAAM,CAAC4Q,QAAxB,CAEA,GAAKA,QAAL,CAAgB,CAEf,GAAKmc,YAAY,CAAC4R,mBAAlB,CAAwC,CAEvC,GAAK/tB,QAAQ,CAACmrD,WAAT,GAAyB,IAA9B,CAAqCnrD,QAAQ,CAACorD,kBAAT,GAErCL,UAAU,CAACxyB,QAAX,CAAqB0Z,GAArB,CAA0B,aAA1B,CAAyCjyC,QAAQ,CAACmrD,WAAlD,CAA+D7oE,QAA/D,EACAyoE,UAAU,CAACxyB,QAAX,CAAqB0Z,GAArB,CAA0B,iBAA1B,CAA6CjyC,QAAQ,CAACqrD,eAAtD,EAEA,CAPD,KAOO,CAENN,UAAU,CAAC/uB,WAAX,CAAwBiW,GAAxB,CAA6BjyC,QAA7B,CAAuC,cAAvC,EAEA,CAED,CAED,CAED,GAAK,CAAC,CAAEjQ,QAAH,GAAiBA,QAAQ,CAACwd,eAAT,CAAyB7U,QAAzB,GAAsC3lB,SAAtC,EAAmDgd,QAAQ,CAACwd,eAAT,CAAyBngB,MAAzB,GAAoCra,SAAxG,CAAL,CAA2H,CAE1H2zE,YAAY,CAACr+D,MAAb,CAAqB+G,MAArB,CAA6BW,QAA7B,CAAuCkQ,QAAvC,CAAiD6oB,OAAjD,EAEA,CAGD,GAAK+hC,eAAe,EAAI77B,kBAAkB,CAACpzB,aAAnB,GAAqCxM,MAAM,CAACwM,aAApE,CAAoF,CAEnFozB,kBAAkB,CAACpzB,aAAnB,CAAmCxM,MAAM,CAACwM,aAA1C,CACAmvD,UAAU,CAACxyB,QAAX,CAAqB0Z,GAArB,CAA0B,eAA1B,CAA2C7iD,MAAM,CAACwM,aAAlD,EAEA,CAED,GAAKivD,eAAL,CAAuB,CAEtBE,UAAU,CAACxyB,QAAX,CAAqB0Z,GAArB,CAA0B,qBAA1B,CAAiDsS,KAAK,CAACD,mBAAvD,EAEA,GAAKt1B,kBAAkB,CAACu7B,WAAxB,CAAsC;EAIrC;EACA;EACA;EACA;EACA;EACA;EAEAe,6BAA6B,CAAEN,UAAF,CAAcF,aAAd,CAA7B,CAEA,CAED;EAEA,GAAKtoD,GAAG,EAAIvC,QAAQ,CAACuC,GAArB,CAA2B,CAE1B7D,SAAS,CAACwiD,kBAAV,CAA8B6J,UAA9B,CAA0CxoD,GAA1C,EAEA,CAED7D,SAAS,CAAC2iD,uBAAV,CAAmC0J,UAAnC,CAA+C/qD,QAA/C,CAAyDklD,WAAzD,CAAsED,OAAtE,CAA+ES,yBAA/E,EAEAlkF,aAAa,CAACw6D,MAAd,CAAsBgW,GAAtB,CAA2BjjB,kBAAkB,CAAC07B,YAA9C,CAA4DM,UAA5D,CAAwE1oE,QAAxE,EAEA,CAED,GAAK2d,QAAQ,CAAC4V,gBAAT,EAA6B5V,QAAQ,CAACyV,kBAAT,GAAgC,IAAlE,CAAyE,CAExEj0C,aAAa,CAACw6D,MAAd,CAAsBgW,GAAtB,CAA2BjjB,kBAAkB,CAAC07B,YAA9C,CAA4DM,UAA5D,CAAwE1oE,QAAxE,EACA2d,QAAQ,CAACyV,kBAAT,CAA8B,KAA9B,CAEA,CAED,GAAKzV,QAAQ,CAAC8iD,gBAAd,CAAiC,CAEhCgI,UAAU,CAACxyB,QAAX,CAAqB0Z,GAArB,CAA0B,QAA1B,CAAoC7iD,MAAM,CAACrV,MAA3C,EAEA,CAED;EAEAgxE,UAAU,CAACxyB,QAAX,CAAqB0Z,GAArB,CAA0B,iBAA1B,CAA6C7iD,MAAM,CAACkM,eAApD,EACAyvD,UAAU,CAACxyB,QAAX,CAAqB0Z,GAArB,CAA0B,cAA1B,CAA0C7iD,MAAM,CAACmM,YAAjD,EACAwvD,UAAU,CAACxyB,QAAX,CAAqB0Z,GAArB,CAA0B,aAA1B,CAAyC7iD,MAAM,CAAC9C,WAAhD,EAEA,OAAOw8B,OAAP,CAEA,CAED;EAEA,SAASwiC,6BAAT,CAAwC12C,QAAxC,CAAkD9/B,KAAlD,CAA0D,CAEzD8/B,QAAQ,CAAC8O,iBAAT,CAA2BvgC,WAA3B,CAAyCrO,KAAzC,CACA8/B,QAAQ,CAAC+O,UAAT,CAAoBxgC,WAApB,CAAkCrO,KAAlC,CAEA8/B,QAAQ,CAACgP,iBAAT,CAA2BzgC,WAA3B,CAAyCrO,KAAzC,CACA8/B,QAAQ,CAACkP,uBAAT,CAAiC3gC,WAAjC,CAA+CrO,KAA/C,CACA8/B,QAAQ,CAACgQ,WAAT,CAAqBzhC,WAArB,CAAmCrO,KAAnC,CACA8/B,QAAQ,CAACiQ,iBAAT,CAA2B1hC,WAA3B,CAAyCrO,KAAzC,CACA8/B,QAAQ,CAACyP,UAAT,CAAoBlhC,WAApB,CAAkCrO,KAAlC,CACA8/B,QAAQ,CAAC6P,gBAAT,CAA0BthC,WAA1B,CAAwCrO,KAAxC,CACA8/B,QAAQ,CAACyQ,cAAT,CAAwBliC,WAAxB,CAAsCrO,KAAtC,CACA8/B,QAAQ,CAACsQ,gBAAT,CAA0B/hC,WAA1B,CAAwCrO,KAAxC,CAEA,CAED,SAAS01E,mBAAT,CAA8BvqD,QAA9B,CAAyC,CAExC,OAAOA,QAAQ,CAACyhD,qBAAT,EAAkCzhD,QAAQ,CAAC2hD,kBAA3C,EAAiE3hD,QAAQ,CAAC6hD,mBAA1E,EACN7hD,QAAQ,CAACujC,sBADH,EAC6BvjC,QAAQ,CAACgjD,gBADtC,EAEJhjD,QAAQ,CAAC4V,gBAAT,EAA6B5V,QAAQ,CAACgV,MAAT,GAAoB,IAFpD,CAIA,CAED,KAAKk1B,iBAAL,CAAyB,UAAY,CAEpC,OAAOsa,sBAAP,CAEA,CAJD,CAMA,KAAKpa,oBAAL,CAA4B,UAAY,CAEvC,OAAOqa,yBAAP,CAEA,CAJD,CAMA,KAAKvsC,eAAL,CAAuB,UAAY,CAElC,OAAOwsC,oBAAP,CAEA,CAJD,CAMA,KAAKvsC,eAAL,CAAuB,SAAWd,YAAX,CAAyB4yB,cAAc,CAAG,CAA1C,CAA6CE,iBAAiB,CAAG,CAAjE,CAAqE,CAE3Fua,oBAAoB,CAAGrtC,YAAvB,CACAmtC,sBAAsB,CAAGva,cAAzB,CACAwa,yBAAyB,CAAGta,iBAA5B,CAEA,GAAK9yB,YAAY,EAAIuM,UAAU,CAACtG,GAAX,CAAgBjG,YAAhB,EAA+B28B,kBAA/B,GAAsDlhE,SAA3E,CAAuF,CAEtFuP,QAAQ,CAAC+0D,iBAAT,CAA4B//B,YAA5B,EAEA,CAED,IAAIg5B,WAAW,CAAG,IAAlB,CACA,IAAI2G,MAAM,CAAG,KAAb,CACA,IAAIM,gBAAgB,CAAG,KAAvB,CAEA,GAAKjgC,YAAL,CAAoB,CAEnB,MAAM7xB,OAAO,CAAG6xB,YAAY,CAAC7xB,OAA7B,CAEA,GAAKA,OAAO,CAACszC,eAAR,EAA2BtzC,OAAO,CAAC4xC,oBAAxC,CAA+D,CAE9DkgB,gBAAgB,CAAG,IAAnB,CAEA,CAED,MAAMtD,kBAAkB,CAAGpwB,UAAU,CAACtG,GAAX,CAAgBjG,YAAhB,EAA+B28B,kBAA1D,CAEA,GAAK38B,YAAY,CAACC,uBAAlB,CAA4C,CAE3C+4B,WAAW,CAAG2D,kBAAkB,CAAE/J,cAAF,CAAhC,CACA+M,MAAM,CAAG,IAAT,CAEA,CALD,QAKY3/B,YAAY,CAAClxB,8BAAlB,CAAmD,CAEzDkqD,WAAW,CAAGzsB,UAAU,CAACtG,GAAX,CAAgBjG,YAAhB,EAA+B88B,8BAA7C,CAEA,CAJM,KAIA,CAEN9D,WAAW,CAAG2D,kBAAd,CAEA,CAED6Q,gBAAgB,CAACxuE,IAAjB,CAAuBghC,YAAY,CAAC9xB,QAApC,EACAu/D,eAAe,CAACzuE,IAAhB,CAAsBghC,YAAY,CAAChyB,OAAnC,EACA0/D,mBAAmB,CAAG1tC,YAAY,CAAC/xB,WAAnC,CAEA,CA/BD,KA+BO,CAENu/D,gBAAgB,CAACxuE,IAAjB,CAAuB8yD,SAAvB,EAAmC9xD,cAAnC,CAAmD6tE,WAAnD,EAAiE5vE,KAAjE,GACAwvE,eAAe,CAACzuE,IAAhB,CAAsBgvE,QAAtB,EAAiChuE,cAAjC,CAAiD6tE,WAAjD,EAA+D5vE,KAA/D,GACAyvE,mBAAmB,CAAGO,YAAtB,CAEA,CAED,MAAMgG,gBAAgB,CAAG1kC,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8BD,WAA9B,CAAzB,CAEA,GAAKib,gBAAgB,EAAIpvC,YAAY,CAAC7G,WAAtC,CAAoD,CAEnD,IAAInyB,WAAW,CAAG,KAAlB,CAEA,GAAKm0B,YAAL,CAAoB,CAEnB,GAAKA,YAAY,CAACpxB,4BAAlB,CAAiD,CAEhD,MAAM5D,QAAQ,CAAGg1B,YAAY,CAAC7xB,OAA9B,CAEA,GAAK+/D,mBAAmB,CAACzxE,MAApB,GAA+BuO,QAAQ,CAACvO,MAAxC,EAAkDyxE,mBAAmB,CAAE,CAAF,CAAnB,GAA6B,KAApF,CAA4F,CAE3F,IAAM,IAAI3xE,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAG3D,QAAQ,CAACvO,MAA/B,CAAuCF,CAAC,CAAGoS,EAA3C,CAA+CpS,CAAC,EAAhD,CAAsD,CAErD2xE,mBAAmB,CAAE3xE,CAAF,CAAnB,CAA2B,MAAQA,CAAnC,CAEA,CAED2xE,mBAAmB,CAACzxE,MAApB,CAA6BuO,QAAQ,CAACvO,MAAtC,CAEAoP,WAAW,CAAG,IAAd,CAEA,CAED,CAlBD,KAkBO,CAEN,GAAKqiE,mBAAmB,CAACzxE,MAApB,GAA+B,CAA/B,EAAoCyxE,mBAAmB,CAAE,CAAF,CAAnB,GAA6B,KAAtE,CAA8E,CAE7EA,mBAAmB,CAAE,CAAF,CAAnB,CAA2B,KAA3B,CACAA,mBAAmB,CAACzxE,MAApB,CAA6B,CAA7B,CAEAoP,WAAW,CAAG,IAAd,CAEA,CAED,CAED,CAjCD,KAiCO,CAEN,GAAKqiE,mBAAmB,CAACzxE,MAApB,GAA+B,CAA/B,EAAoCyxE,mBAAmB,CAAE,CAAF,CAAnB,GAA6B,IAAtE,CAA6E,CAE5EA,mBAAmB,CAAE,CAAF,CAAnB,CAA2B,IAA3B,CACAA,mBAAmB,CAACzxE,MAApB,CAA6B,CAA7B,CAEAoP,WAAW,CAAG,IAAd,CAEA,CAED,CAED,GAAKA,WAAL,CAAmB,CAElB,GAAKg5B,YAAY,CAACC,QAAlB,CAA6B,CAE5B61B,GAAG,CAAC38B,WAAJ,CAAiBkwC,mBAAjB,EAEA,CAJD,KAIO,CAENrwC,UAAU,CAACoI,GAAX,CAAgB,oBAAhB,EAAuCiuC,gBAAvC,CAAyDhG,mBAAzD,EAEA,CAED,CAED,CAED3+B,KAAK,CAACrhC,QAAN,CAAgBs/D,gBAAhB,EACAj+B,KAAK,CAACvhC,OAAN,CAAey/D,eAAf,EACAl+B,KAAK,CAAC4jB,cAAN,CAAsBua,mBAAtB,EAEA,GAAK/N,MAAL,CAAc,CAEb,MAAMjE,iBAAiB,CAAGnvB,UAAU,CAACtG,GAAX,CAAgBjG,YAAY,CAAC7xB,OAA7B,CAA1B,CACAwsD,GAAG,CAACsE,oBAAJ,CAA0B,KAA1B,CAAiC,KAAjC,CAAwC,MAAQrM,cAAhD,CAAgE8I,iBAAiB,CAACc,cAAlF,CAAkG1J,iBAAlG,EAEA,CALD,QAKYmN,gBAAL,CAAwB,CAE9B,MAAMvE,iBAAiB,CAAGnvB,UAAU,CAACtG,GAAX,CAAgBjG,YAAY,CAAC7xB,OAA7B,CAA1B,CACA,MAAMgmE,KAAK,CAAGvhB,cAAc,EAAI,CAAhC,CACA+H,GAAG,CAACyZ,uBAAJ,CAA6B,KAA7B,CAAoC,KAApC,CAA2C1Y,iBAAiB,CAACc,cAA7D,CAA6E1J,iBAAiB,EAAI,CAAlG,CAAqGqhB,KAArG,EAEA,CAED7G,kBAAkB,CAAG,CAAE,CAAvB,CAA0B;EAE1B,CA9ID,CAgJA,KAAK+G,sBAAL,CAA8B,SAAWr0C,YAAX,CAAyBniC,CAAzB,CAA4BC,CAA5B,CAA+BO,KAA/B,CAAsCC,MAAtC,CAA8C6mC,MAA9C,CAAsDmvC,mBAAtD,CAA4E,CAEzG,GAAK,EAAIt0C,YAAY,EAAIA,YAAY,CAACvxB,mBAAjC,CAAL,CAA8D,CAE7DrP,OAAO,CAAC8D,KAAR,CAAe,0FAAf,EACA,OAEA,CAED,IAAI81D,WAAW,CAAGzsB,UAAU,CAACtG,GAAX,CAAgBjG,YAAhB,EAA+B28B,kBAAjD,CAEA,GAAK38B,YAAY,CAACC,uBAAb,EAAwCq0C,mBAAmB,GAAK74E,SAArE,CAAiF,CAEhFu9D,WAAW,CAAGA,WAAW,CAAEsb,mBAAF,CAAzB,CAEA,CAED,GAAKtb,WAAL,CAAmB,CAElBzpB,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8BD,WAA9B,EAEA,GAAI,CAEH,MAAM7qD,OAAO,CAAG6xB,YAAY,CAAC7xB,OAA7B,CACA,MAAMomE,aAAa,CAAGpmE,OAAO,CAAC3E,MAA9B,CACA,MAAMw0D,WAAW,CAAG7vD,OAAO,CAAC7S,IAA5B,CAEA,GAAKi5E,aAAa,GAAKjkG,UAAlB,EAAgCsqF,KAAK,CAAC0D,OAAN,CAAeiW,aAAf,IAAmC5Z,GAAG,CAAC3hD,YAAJ,CAAkB,KAAlB,CAAxE,CAAoG,CAEnG5Z,OAAO,CAAC8D,KAAR,CAAe,2GAAf,EACA,OAEA,CAED,MAAMsxE,uBAAuB,CAAKxW,WAAW,GAAKjuF,aAAlB,GAAuC8tD,UAAU,CAAC0X,GAAX,CAAgB,6BAAhB,GAAqD1Q,YAAY,CAACC,QAAb,EAAyBjH,UAAU,CAAC0X,GAAX,CAAgB,wBAAhB,CAArH,CAAhC,CAEA,GAAKyoB,WAAW,GAAKxuF,gBAAhB,EAAoCorF,KAAK,CAAC0D,OAAN,CAAeN,WAAf,IAAiCrD,GAAG,CAAC3hD,YAAJ,CAAkB,KAAlB,CAArE;EACJ,EAAIglD,WAAW,GAAKluF,SAAhB,GAA+B+0D,YAAY,CAACC,QAAb,EAAyBjH,UAAU,CAAC0X,GAAX,CAAgB,mBAAhB,CAAzB,EAAkE1X,UAAU,CAAC0X,GAAX,CAAgB,0BAAhB,CAAjG,CAAJ,CADI;EAEJ,CAAEi/B,uBAFH,CAE6B,CAE5Bp1E,OAAO,CAAC8D,KAAR,CAAe,qHAAf,EACA,OAEA,CAED,GAAKy3D,GAAG,CAAC8Z,sBAAJ,CAA4B,KAA5B,IAAwC,KAA7C,CAAqD;EAIpD,GAAO52E,CAAC,EAAI,CAAL,EAAUA,CAAC,EAAMmiC,YAAY,CAAC3hC,KAAb,CAAqBA,KAAxC,EAAuDP,CAAC,EAAI,CAAL,EAAUA,CAAC,EAAMkiC,YAAY,CAAC1hC,MAAb,CAAsBA,MAAnG,CAAgH,CAE/Gq8D,GAAG,CAAC+Z,UAAJ,CAAgB72E,CAAhB,CAAmBC,CAAnB,CAAsBO,KAAtB,CAA6BC,MAA7B,CAAqCs8D,KAAK,CAAC0D,OAAN,CAAeiW,aAAf,CAArC,CAAqE3Z,KAAK,CAAC0D,OAAN,CAAeN,WAAf,CAArE,CAAmG74B,MAAnG,EAEA,CAED,CAVD,KAUO,CAEN/lC,OAAO,CAAC8D,KAAR,CAAe,4GAAf,EAEA,CAED,CAxCD,OAwCU;EAIT,MAAM81D,WAAW,CAAKqU,oBAAoB,GAAK,IAA3B,CAAoC9gC,UAAU,CAACtG,GAAX,CAAgBonC,oBAAhB,EAAuC1Q,kBAA3E,CAAgG,IAApH,CACAptB,KAAK,CAAC0pB,eAAN,CAAuB,KAAvB,CAA8BD,WAA9B,EAEA,CAED,CAED,CAxED,CA0EA,KAAK2b,wBAAL,CAAgC,SAAWvzD,QAAX,CAAqBjT,OAArB,CAA8BymE,KAAK,CAAG,CAAtC,CAA0C,CAEzE,MAAMC,UAAU,CAAGl4E,IAAI,CAACqB,GAAL,CAAU,CAAV,CAAa,CAAE42E,KAAf,CAAnB,CACA,MAAMv2E,KAAK,CAAG1B,IAAI,CAACsB,KAAL,CAAYkQ,OAAO,CAAC7F,KAAR,CAAcjK,KAAd,CAAsBw2E,UAAlC,CAAd,CACA,MAAMv2E,MAAM,CAAG3B,IAAI,CAACsB,KAAL,CAAYkQ,OAAO,CAAC7F,KAAR,CAAchK,MAAd,CAAuBu2E,UAAnC,CAAf,CAEA,IAAI9Y,QAAQ,CAAGnB,KAAK,CAAC0D,OAAN,CAAenwD,OAAO,CAAC3E,MAAvB,CAAf,CAEA,GAAKq7B,YAAY,CAACC,QAAlB,CAA6B;EAG5B;EAEA,GAAKi3B,QAAQ,GAAK,IAAlB,CAAyBA,QAAQ,CAAG,KAAX,CACzB,GAAKA,QAAQ,GAAK,IAAlB,CAAyBA,QAAQ,CAAG,KAAX,CAEzB,CAED/wD,QAAQ,CAACqyD,YAAT,CAAuBlvD,OAAvB,CAAgC,CAAhC,EAEAwsD,GAAG,CAACma,cAAJ,CAAoB,IAApB,CAA0BF,KAA1B,CAAiC7Y,QAAjC,CAA2C36C,QAAQ,CAACvjB,CAApD,CAAuDujB,QAAQ,CAACtjB,CAAhE,CAAmEO,KAAnE,CAA0EC,MAA1E,CAAkF,CAAlF,EAEAixC,KAAK,CAACgrB,aAAN,GAEA,CAxBD,CA0BA,KAAKwa,oBAAL,CAA4B,SAAW3zD,QAAX,CAAqB4zD,UAArB,CAAiCC,UAAjC,CAA6CL,KAAK,CAAG,CAArD,CAAyD,CAEpF,MAAMv2E,KAAK,CAAG22E,UAAU,CAAC1sE,KAAX,CAAiBjK,KAA/B,CACA,MAAMC,MAAM,CAAG02E,UAAU,CAAC1sE,KAAX,CAAiBhK,MAAhC,CACA,MAAMy9D,QAAQ,CAAGnB,KAAK,CAAC0D,OAAN,CAAe2W,UAAU,CAACzrE,MAA1B,CAAjB,CACA,MAAMwyD,MAAM,CAAGpB,KAAK,CAAC0D,OAAN,CAAe2W,UAAU,CAAC35E,IAA1B,CAAf,CAEA0P,QAAQ,CAACqyD,YAAT,CAAuB4X,UAAvB,CAAmC,CAAnC,EAEA;EACA;EACAta,GAAG,CAAC0D,WAAJ,CAAiB,KAAjB,CAAwB4W,UAAU,CAAC9qE,KAAnC,EACAwwD,GAAG,CAAC0D,WAAJ,CAAiB,KAAjB,CAAwB4W,UAAU,CAAC/qE,gBAAnC,EACAywD,GAAG,CAAC0D,WAAJ,CAAiB,IAAjB,CAAuB4W,UAAU,CAAC7qE,eAAlC,EAEA,GAAK4qE,UAAU,CAACvpE,aAAhB,CAAgC,CAE/BkvD,GAAG,CAACua,aAAJ,CAAmB,IAAnB,CAAyBN,KAAzB,CAAgCxzD,QAAQ,CAACvjB,CAAzC,CAA4CujB,QAAQ,CAACtjB,CAArD,CAAwDO,KAAxD,CAA+DC,MAA/D,CAAuEy9D,QAAvE,CAAiFC,MAAjF,CAAyFgZ,UAAU,CAAC1sE,KAAX,CAAiB2D,IAA1G,EAEA,CAJD,KAIO,CAEN,GAAK+oE,UAAU,CAACtW,mBAAhB,CAAsC,CAErC/D,GAAG,CAACwa,uBAAJ,CAA6B,IAA7B,CAAmCP,KAAnC,CAA0CxzD,QAAQ,CAACvjB,CAAnD,CAAsDujB,QAAQ,CAACtjB,CAA/D,CAAkEk3E,UAAU,CAACnrE,OAAX,CAAoB,CAApB,EAAwBxL,KAA1F,CAAiG22E,UAAU,CAACnrE,OAAX,CAAoB,CAApB,EAAwBvL,MAAzH,CAAiIy9D,QAAjI,CAA2IiZ,UAAU,CAACnrE,OAAX,CAAoB,CAApB,EAAwBoC,IAAnK,EAEA,CAJD,KAIO,CAEN0uD,GAAG,CAACua,aAAJ,CAAmB,IAAnB,CAAyBN,KAAzB,CAAgCxzD,QAAQ,CAACvjB,CAAzC,CAA4CujB,QAAQ,CAACtjB,CAArD,CAAwDi+D,QAAxD,CAAkEC,MAAlE,CAA0EgZ,UAAU,CAAC1sE,KAArF,EAEA,CAED,CAED;EACA,GAAKssE,KAAK,GAAK,CAAV,EAAeK,UAAU,CAAChrE,eAA/B,CAAiD0wD,GAAG,CAACc,cAAJ,CAAoB,IAApB,EAEjDlsB,KAAK,CAACgrB,aAAN,GAEA,CAtCD,CAwCA,KAAK6a,sBAAL,CAA8B,SAAWC,SAAX,CAAsBj0D,QAAtB,CAAgC4zD,UAAhC,CAA4CC,UAA5C,CAAwDL,KAAK,CAAG,CAAhE,CAAoE,CAEjG,GAAK3H,KAAK,CAAC8B,gBAAX,CAA8B,CAE7B3vE,OAAO,CAACC,IAAR,CAAc,2EAAd,EACA,OAEA,CAED,MAAMhB,KAAK,CAAGg3E,SAAS,CAAC33E,GAAV,CAAcG,CAAd,CAAkBw3E,SAAS,CAAC53E,GAAV,CAAcI,CAAhC,CAAoC,CAAlD,CACA,MAAMS,MAAM,CAAG+2E,SAAS,CAAC33E,GAAV,CAAcI,CAAd,CAAkBu3E,SAAS,CAAC53E,GAAV,CAAcK,CAAhC,CAAoC,CAAnD,CACA,MAAMiQ,KAAK,CAAGsnE,SAAS,CAAC33E,GAAV,CAAcwO,CAAd,CAAkBmpE,SAAS,CAAC53E,GAAV,CAAcyO,CAAhC,CAAoC,CAAlD,CACA,MAAM6vD,QAAQ,CAAGnB,KAAK,CAAC0D,OAAN,CAAe2W,UAAU,CAACzrE,MAA1B,CAAjB,CACA,MAAMwyD,MAAM,CAAGpB,KAAK,CAAC0D,OAAN,CAAe2W,UAAU,CAAC35E,IAA1B,CAAf,CACA,IAAIg6E,QAAJ,CAEA,GAAKL,UAAU,CAACxzB,eAAhB,CAAkC,CAEjCz2C,QAAQ,CAACm4C,YAAT,CAAuB8xB,UAAvB,CAAmC,CAAnC,EACAK,QAAQ,CAAG,KAAX,CAEA,CALD,QAKYL,UAAU,CAACl1B,oBAAhB,CAAuC,CAE7C/0C,QAAQ,CAACq4C,iBAAT,CAA4B4xB,UAA5B,CAAwC,CAAxC,EACAK,QAAQ,CAAG,KAAX,CAEA,CALM,KAKA,CAENl2E,OAAO,CAACC,IAAR,CAAc,6GAAd,EACA,OAEA,CAEDs7D,GAAG,CAAC0D,WAAJ,CAAiB,KAAjB,CAAwB4W,UAAU,CAAC9qE,KAAnC,EACAwwD,GAAG,CAAC0D,WAAJ,CAAiB,KAAjB,CAAwB4W,UAAU,CAAC/qE,gBAAnC,EACAywD,GAAG,CAAC0D,WAAJ,CAAiB,IAAjB,CAAuB4W,UAAU,CAAC7qE,eAAlC,EAEA,MAAMmrE,YAAY,CAAG5a,GAAG,CAAC3hD,YAAJ,CAAkB,IAAlB,CAArB,CACA,MAAMw8D,iBAAiB,CAAG7a,GAAG,CAAC3hD,YAAJ,CAAkB,KAAlB,CAA1B,CACA,MAAMy8D,gBAAgB,CAAG9a,GAAG,CAAC3hD,YAAJ,CAAkB,IAAlB,CAAzB,CACA,MAAM08D,cAAc,CAAG/a,GAAG,CAAC3hD,YAAJ,CAAkB,IAAlB,CAAvB,CACA,MAAM28D,gBAAgB,CAAGhb,GAAG,CAAC3hD,YAAJ,CAAkB,KAAlB,CAAzB,CAEA,MAAM1Q,KAAK,CAAG0sE,UAAU,CAACtW,mBAAX,CAAiCsW,UAAU,CAACnrE,OAAX,CAAoB,CAApB,CAAjC,CAA2DmrE,UAAU,CAAC1sE,KAApF,CAEAqyD,GAAG,CAAC0D,WAAJ,CAAiB,IAAjB,CAAuB/1D,KAAK,CAACjK,KAA7B,EACAs8D,GAAG,CAAC0D,WAAJ,CAAiB,KAAjB,CAAwB/1D,KAAK,CAAChK,MAA9B,EACAq8D,GAAG,CAAC0D,WAAJ,CAAiB,IAAjB,CAAuBgX,SAAS,CAAC53E,GAAV,CAAcI,CAArC,EACA88D,GAAG,CAAC0D,WAAJ,CAAiB,IAAjB,CAAuBgX,SAAS,CAAC53E,GAAV,CAAcK,CAArC,EACA68D,GAAG,CAAC0D,WAAJ,CAAiB,KAAjB,CAAwBgX,SAAS,CAAC53E,GAAV,CAAcyO,CAAtC,EAEA,GAAK8oE,UAAU,CAACvpE,aAAX,EAA4BupE,UAAU,CAACvzB,eAA5C,CAA8D,CAE7DkZ,GAAG,CAACib,aAAJ,CAAmBN,QAAnB,CAA6BV,KAA7B,CAAoCxzD,QAAQ,CAACvjB,CAA7C,CAAgDujB,QAAQ,CAACtjB,CAAzD,CAA4DsjB,QAAQ,CAAClV,CAArE,CAAwE7N,KAAxE,CAA+EC,MAA/E,CAAuFyP,KAAvF,CAA8FguD,QAA9F,CAAwGC,MAAxG,CAAgH1zD,KAAK,CAAC2D,IAAtH,EAEA,CAJD,KAIO,CAEN,GAAK+oE,UAAU,CAACtW,mBAAhB,CAAsC,CAErCt/D,OAAO,CAACC,IAAR,CAAc,yFAAd,EACAs7D,GAAG,CAACkb,uBAAJ,CAA6BP,QAA7B,CAAuCV,KAAvC,CAA8CxzD,QAAQ,CAACvjB,CAAvD,CAA0DujB,QAAQ,CAACtjB,CAAnE,CAAsEsjB,QAAQ,CAAClV,CAA/E,CAAkF7N,KAAlF,CAAyFC,MAAzF,CAAiGyP,KAAjG,CAAwGguD,QAAxG,CAAkHzzD,KAAK,CAAC2D,IAAxH,EAEA,CALD,KAKO,CAEN0uD,GAAG,CAACib,aAAJ,CAAmBN,QAAnB,CAA6BV,KAA7B,CAAoCxzD,QAAQ,CAACvjB,CAA7C,CAAgDujB,QAAQ,CAACtjB,CAAzD,CAA4DsjB,QAAQ,CAAClV,CAArE,CAAwE7N,KAAxE,CAA+EC,MAA/E,CAAuFyP,KAAvF,CAA8FguD,QAA9F,CAAwGC,MAAxG,CAAgH1zD,KAAhH,EAEA,CAED,CAEDqyD,GAAG,CAAC0D,WAAJ,CAAiB,IAAjB,CAAuBkX,YAAvB,EACA5a,GAAG,CAAC0D,WAAJ,CAAiB,KAAjB,CAAwBmX,iBAAxB,EACA7a,GAAG,CAAC0D,WAAJ,CAAiB,IAAjB,CAAuBoX,gBAAvB,EACA9a,GAAG,CAAC0D,WAAJ,CAAiB,IAAjB,CAAuBqX,cAAvB,EACA/a,GAAG,CAAC0D,WAAJ,CAAiB,KAAjB,CAAwBsX,gBAAxB,EAEA;EACA,GAAKf,KAAK,GAAK,CAAV,EAAeK,UAAU,CAAChrE,eAA/B,CAAiD0wD,GAAG,CAACc,cAAJ,CAAoB6Z,QAApB,EAEjD/lC,KAAK,CAACgrB,aAAN,GAEA,CAjFD,CAmFA,KAAK6D,WAAL,CAAmB,SAAWjwD,OAAX,CAAqB,CAEvCnD,QAAQ,CAACqyD,YAAT,CAAuBlvD,OAAvB,CAAgC,CAAhC,EAEAohC,KAAK,CAACgrB,aAAN,GAEA,CAND,CAQA,KAAKub,UAAL,CAAkB,UAAY,CAE7B3I,sBAAsB,CAAG,CAAzB,CACAC,yBAAyB,CAAG,CAA5B,CACAC,oBAAoB,CAAG,IAAvB,CAEA99B,KAAK,CAACiF,KAAN,GACArD,aAAa,CAACqD,KAAd,GAEA,CATD,CAWA,GAAK,OAAOuhC,kBAAP,GAA8B,WAAnC,CAAiD,CAEhDA,kBAAkB,CAAC75E,aAAnB,CAAkC,IAAI85E,WAAJ,CAAiB,SAAjB,CAA4B,CAAEC,MAAM,CAAE,IAAV,CAA5B,CAAlC,EAAoF;EAEpF,CAED,CAEDtoF,aAAa,CAACoV,SAAd,CAAwBmzE,eAAxB,CAA0C,IAA1C,CAEA,MAAMtoF,cAAN,SAA6BD,aAAc,EAE3CC,cAAc,CAACmV,SAAf,CAAyBgsE,gBAAzB,CAA4C,IAA5C,CAmEA,MAAMlhF,KAAN,SAAoBzT,QAAS,CAE5BgkB,WAAW,EAAG,CAEb,QAEA,KAAK9C,IAAL,CAAY,OAAZ,CAEA,KAAKysB,UAAL,CAAkB,IAAlB,CACA,KAAKE,WAAL,CAAmB,IAAnB,CACA,KAAKiD,GAAL,CAAW,IAAX,CAEA,KAAKsjD,gBAAL,CAAwB,IAAxB,CAEA,KAAK7b,UAAL,CAAkB,IAAlB,CAAwB;EAExB,GAAK,OAAOojB,kBAAP,GAA8B,WAAnC,CAAiD,CAEhDA,kBAAkB,CAAC75E,aAAnB,CAAkC,IAAI85E,WAAJ,CAAiB,SAAjB,CAA4B,CAAEC,MAAM,CAAE,IAAV,CAA5B,CAAlC,EAAoF;EAEpF,CAED,CAEDj3E,IAAI,CAAE0L,MAAF,CAAUwe,SAAV,CAAsB,CAEzB,MAAMlqB,IAAN,CAAY0L,MAAZ,CAAoBwe,SAApB,EAEA,GAAKxe,MAAM,CAACqd,UAAP,GAAsB,IAA3B,CAAkC,KAAKA,UAAL,CAAkBrd,MAAM,CAACqd,UAAP,CAAkBhpB,KAAlB,EAAlB,CAClC,GAAK2L,MAAM,CAACud,WAAP,GAAuB,IAA5B,CAAmC,KAAKA,WAAL,CAAmBvd,MAAM,CAACud,WAAP,CAAmBlpB,KAAnB,EAAnB,CACnC,GAAK2L,MAAM,CAACwgB,GAAP,GAAe,IAApB,CAA2B,KAAKA,GAAL,CAAWxgB,MAAM,CAACwgB,GAAP,CAAWnsB,KAAX,EAAX,CAE3B,GAAK2L,MAAM,CAAC8jE,gBAAP,GAA4B,IAAjC,CAAwC,KAAKA,gBAAL,CAAwB9jE,MAAM,CAAC8jE,gBAAP,CAAwBzvE,KAAxB,EAAxB,CAExC,KAAK4zD,UAAL,CAAkBjoD,MAAM,CAACioD,UAAzB,CACA,KAAK3oD,gBAAL,CAAwBU,MAAM,CAACV,gBAA/B,CAEA,WAAA,CAEA,CAEDrW,MAAM,CAAEmX,IAAF,CAAS,CAEd,MAAMmB,IAAI,CAAG,MAAMtY,MAAN,CAAcmX,IAAd,CAAb,CAEA,GAAK,KAAKogB,GAAL,GAAa,IAAlB,CAAyBjf,IAAI,CAAC6L,MAAL,CAAYoT,GAAZ,CAAkB,KAAKA,GAAL,CAASv3B,MAAT,EAAlB,CAEzB,OAAOsY,IAAP,CAEA,CAjD2B,CAqD7Bpe,KAAK,CAACkV,SAAN,CAAgB+kB,OAAhB,CAA0B,IAA1B,CAEA,MAAMh6B,iBAAkB,CAEvBsQ,WAAW,CAAE/B,KAAF,CAASi+B,MAAT,CAAkB,CAE5B,KAAKj+B,KAAL,CAAaA,KAAb,CACA,KAAKi+B,MAAL,CAAcA,MAAd,CACA,KAAK5rB,KAAL,CAAarS,KAAK,GAAKZ,SAAV,CAAsBY,KAAK,CAACI,MAAN,CAAe69B,MAArC,CAA8C,CAA3D,CAEA,KAAK5F,KAAL,CAAav/C,eAAb,CACA,KAAKw/C,WAAL,CAAmB,CAAEzyB,MAAM,CAAE,CAAV,CAAawM,KAAK,CAAE,CAAE,CAAtB,CAAnB,CAEA,KAAKpE,OAAL,CAAe,CAAf,CAEA,KAAK/M,IAAL,CAAY7nB,YAAY,EAAxB,CAEA,CAEDk/C,gBAAgB,EAAG,EAEJ,IAAX/oB,WAAW,CAAErO,KAAF,CAAU,CAExB,GAAKA,KAAK,GAAK,IAAf,CAAsB,KAAK8M,OAAL,GAEtB,CAEDuqB,QAAQ,CAAEr3B,KAAF,CAAU,CAEjB,KAAKk3B,KAAL,CAAal3B,KAAb,CAEA,WAAA,CAEA,CAEDwB,IAAI,CAAE0L,MAAF,CAAW,CAEd,KAAKrO,KAAL,CAAa,IAAIqO,MAAM,CAACrO,KAAP,CAAa+B,WAAjB,CAA8BsM,MAAM,CAACrO,KAArC,CAAb,CACA,KAAKqS,KAAL,CAAahE,MAAM,CAACgE,KAApB,CACA,KAAK4rB,MAAL,CAAc5vB,MAAM,CAAC4vB,MAArB,CACA,KAAK5F,KAAL,CAAahqB,MAAM,CAACgqB,KAApB,CAEA,WAAA,CAEA,CAEDI,MAAM,CAAEC,MAAF,CAAU1yB,SAAV,CAAqB2yB,MAArB,CAA8B,CAEnCD,MAAM,EAAI,KAAKuF,MAAf,CACAtF,MAAM,EAAI3yB,SAAS,CAACi4B,MAApB,CAEA,IAAM,IAAI/9B,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG,KAAK89B,MAA1B,CAAkC/9B,CAAC,CAAGC,CAAtC,CAAyCD,CAAC,EAA1C,CAAgD,CAE/C,KAAKF,KAAL,CAAY04B,MAAM,CAAGx4B,CAArB,EAA2B8F,SAAS,CAAChG,KAAV,CAAiB24B,MAAM,CAAGz4B,CAA1B,CAA3B,CAEA,CAED,WAAA,CAEA,CAEDgC,GAAG,CAAEf,KAAF,CAAS0E,MAAM,CAAG,CAAlB,CAAsB,CAExB,KAAK7F,KAAL,CAAWkC,GAAX,CAAgBf,KAAhB,CAAuB0E,MAAvB,EAEA,WAAA,CAEA,CAEDnD,KAAK,CAAEkN,IAAF,CAAS,CAEb,GAAKA,IAAI,CAACkqE,YAAL,GAAsB16E,SAA3B,CAAuC,CAEtCwQ,IAAI,CAACkqE,YAAL,CAAoB,EAApB,CAEA,CAED,GAAK,KAAK95E,KAAL,CAAW8oC,MAAX,CAAkBixC,KAAlB,GAA4B36E,SAAjC,CAA6C,CAE5C,KAAKY,KAAL,CAAW8oC,MAAX,CAAkBixC,KAAlB,CAA0B1gG,YAAY,EAAtC,CAEA,CAED,GAAKu2B,IAAI,CAACkqE,YAAL,CAAmB,KAAK95E,KAAL,CAAW8oC,MAAX,CAAkBixC,KAArC,IAAiD36E,SAAtD,CAAkE,CAEjEwQ,IAAI,CAACkqE,YAAL,CAAmB,KAAK95E,KAAL,CAAW8oC,MAAX,CAAkBixC,KAArC,EAA+C,KAAK/5E,KAAL,CAAWC,KAAX,CAAkB,CAAlB,EAAsB6oC,MAArE,CAEA,CAED,MAAM9oC,KAAK,CAAG,SAASA,KAAL,CAAW+B,WAAf,CAA4B6N,IAAI,CAACkqE,YAAL,CAAmB,KAAK95E,KAAL,CAAW8oC,MAAX,CAAkBixC,KAArC,CAA5B,CAAd,CAEA,MAAMC,EAAE,CAAG,SAASj4E,WAAT,CAAsB/B,KAAtB,CAA6B,KAAKi+B,MAAlC,CAAX,CACA+7C,EAAE,CAACxhD,QAAH,CAAa,KAAKH,KAAlB,EAEA,OAAO2hD,EAAP,CAEA,CAED3gD,QAAQ,CAAE/hB,QAAF,CAAa,CAEpB,KAAKihB,gBAAL,CAAwBjhB,QAAxB,CAEA,WAAA,CAEA,CAEDhgB,MAAM,CAAEsY,IAAF,CAAS,CAEd,GAAKA,IAAI,CAACkqE,YAAL,GAAsB16E,SAA3B,CAAuC,CAEtCwQ,IAAI,CAACkqE,YAAL,CAAoB,EAApB,CAEA,CAED;EAEA,GAAK,KAAK95E,KAAL,CAAW8oC,MAAX,CAAkBixC,KAAlB,GAA4B36E,SAAjC,CAA6C,CAE5C,KAAKY,KAAL,CAAW8oC,MAAX,CAAkBixC,KAAlB,CAA0B1gG,YAAY,EAAtC,CAEA,CAED,GAAKu2B,IAAI,CAACkqE,YAAL,CAAmB,KAAK95E,KAAL,CAAW8oC,MAAX,CAAkBixC,KAArC,IAAiD36E,SAAtD,CAAkE,CAEjEwQ,IAAI,CAACkqE,YAAL,CAAmB,KAAK95E,KAAL,CAAW8oC,MAAX,CAAkBixC,KAArC,EAA+C7qE,KAAK,CAACxI,SAAN,CAAgBzG,KAAhB,CAAsBI,IAAtB,CAA4B,IAAIm5B,WAAJ,CAAiB,KAAKx5B,KAAL,CAAW8oC,MAA5B,CAA5B,CAA/C,CAEA,CAED;EAEA,OAAO,CACN5nC,IAAI,CAAE,KAAKA,IADL,CAEN4nC,MAAM,CAAE,KAAK9oC,KAAL,CAAW8oC,MAAX,CAAkBixC,KAFpB,CAGN96E,IAAI,CAAE,KAAKe,KAAL,CAAW+B,WAAX,CAAuBuJ,IAHvB,CAIN2yB,MAAM,CAAE,KAAKA,MAJP,CAAP,CAOA,CAvIsB,CA2IxBxsC,iBAAiB,CAACiV,SAAlB,CAA4BuzE,mBAA5B,CAAkD,IAAlD,CAEA,MAAMvoF,SAAS,cAAiB,IAAInX,OAAJ,EAAhC,CAEA,MAAMoX,0BAA2B,CAEhCoQ,WAAW,CAAEm4E,iBAAF,CAAqB/hD,QAArB,CAA+BtyB,MAA/B,CAAuCmyB,UAAU,CAAG,KAApD,CAA4D,CAEtE,KAAK1sB,IAAL,CAAY,EAAZ,CAEA,KAAKsE,IAAL,CAAYsqE,iBAAZ,CACA,KAAK/hD,QAAL,CAAgBA,QAAhB,CACA,KAAKtyB,MAAL,CAAcA,MAAd,CAEA,KAAKmyB,UAAL,CAAkBA,UAAU,GAAK,IAAjC,CAEA,CAEQ,IAAL3lB,KAAK,EAAG,CAEX,YAAYzC,IAAL,CAAUyC,KAAjB,CAEA,CAEQ,IAALrS,KAAK,EAAG,CAEX,YAAY4P,IAAL,CAAU5P,KAAjB,CAEA,CAEc,IAAXwP,WAAW,CAAErO,KAAF,CAAU,CAExB,KAAKyO,IAAL,CAAUJ,WAAV,CAAwBrO,KAAxB,CAEA,CAED6O,YAAY,CAAEzO,CAAF,CAAM,CAEjB,IAAM,IAAIrB,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG,KAAKyP,IAAL,CAAUyC,KAA/B,CAAsCnS,CAAC,CAAGC,CAA1C,CAA6CD,CAAC,EAA9C,CAAoD,CAEnDxO,SAAS,CAAC8P,CAAV,CAAc,KAAKyE,IAAL,CAAW/F,CAAX,CAAd,CACAxO,SAAS,CAAC+P,CAAV,CAAc,KAAKyE,IAAL,CAAWhG,CAAX,CAAd,CACAxO,SAAS,CAACme,CAAV,CAAc,KAAKyB,IAAL,CAAWpR,CAAX,CAAd,CAEAxO,SAAS,CAACse,YAAV,CAAwBzO,CAAxB,EAEA,KAAK43B,MAAL,CAAaj5B,CAAb,CAAgBxO,SAAS,CAAC8P,CAA1B,CAA6B9P,SAAS,CAAC+P,CAAvC,CAA0C/P,SAAS,CAACme,CAApD,EAEA,CAED,WAAA,CAEA,CAED+H,iBAAiB,CAAErW,CAAF,CAAM,CAEtB,IAAM,IAAIrB,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG,KAAKkS,KAA1B,CAAiCnS,CAAC,CAAGC,CAArC,CAAwCD,CAAC,EAAzC,CAA+C,CAE9CxO,SAAS,CAAC8P,CAAV,CAAc,KAAKyE,IAAL,CAAW/F,CAAX,CAAd,CACAxO,SAAS,CAAC+P,CAAV,CAAc,KAAKyE,IAAL,CAAWhG,CAAX,CAAd,CACAxO,SAAS,CAACme,CAAV,CAAc,KAAKyB,IAAL,CAAWpR,CAAX,CAAd,CAEAxO,SAAS,CAACkmB,iBAAV,CAA6BrW,CAA7B,EAEA,KAAK43B,MAAL,CAAaj5B,CAAb,CAAgBxO,SAAS,CAAC8P,CAA1B,CAA6B9P,SAAS,CAAC+P,CAAvC,CAA0C/P,SAAS,CAACme,CAApD,EAEA,CAED,WAAA,CAEA,CAED+I,kBAAkB,CAAErX,CAAF,CAAM,CAEvB,IAAM,IAAIrB,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG,KAAKkS,KAA1B,CAAiCnS,CAAC,CAAGC,CAArC,CAAwCD,CAAC,EAAzC,CAA+C,CAE9CxO,SAAS,CAAC8P,CAAV,CAAc,KAAKyE,IAAL,CAAW/F,CAAX,CAAd,CACAxO,SAAS,CAAC+P,CAAV,CAAc,KAAKyE,IAAL,CAAWhG,CAAX,CAAd,CACAxO,SAAS,CAACme,CAAV,CAAc,KAAKyB,IAAL,CAAWpR,CAAX,CAAd,CAEAxO,SAAS,CAACknB,kBAAV,CAA8BrX,CAA9B,EAEA,KAAK43B,MAAL,CAAaj5B,CAAb,CAAgBxO,SAAS,CAAC8P,CAA1B,CAA6B9P,SAAS,CAAC+P,CAAvC,CAA0C/P,SAAS,CAACme,CAApD,EAEA,CAED,WAAA,CAEA,CAEDxN,IAAI,CAAE1C,KAAF,CAAS6B,CAAT,CAAa,CAEhB,KAAKoO,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAG,KAAKiQ,IAAL,CAAUquB,MAAlB,CAA2B,KAAKp4B,MAAjD,EAA4DrE,CAA5D,CAEA,WAAA,CAEA,CAEDc,IAAI,CAAE3C,KAAF,CAAS8B,CAAT,CAAa,CAEhB,KAAKmO,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAG,KAAKiQ,IAAL,CAAUquB,MAAlB,CAA2B,KAAKp4B,MAAhC,CAAyC,CAA1D,EAAgEpE,CAAhE,CAEA,WAAA,CAEA,CAEDqO,IAAI,CAAEnQ,KAAF,CAASkQ,CAAT,CAAa,CAEhB,KAAKD,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAG,KAAKiQ,IAAL,CAAUquB,MAAlB,CAA2B,KAAKp4B,MAAhC,CAAyC,CAA1D,EAAgEgK,CAAhE,CAEA,WAAA,CAEA,CAEDE,IAAI,CAAEpQ,KAAF,CAASmD,CAAT,CAAa,CAEhB,KAAK8M,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAG,KAAKiQ,IAAL,CAAUquB,MAAlB,CAA2B,KAAKp4B,MAAhC,CAAyC,CAA1D,EAAgE/C,CAAhE,CAEA,WAAA,CAEA,CAEDmD,IAAI,CAAEtG,KAAF,CAAU,CAEb,YAAYiQ,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAG,KAAKiQ,IAAL,CAAUquB,MAAlB,CAA2B,KAAKp4B,MAAjD,CAAP,CAEA,CAEDK,IAAI,CAAEvG,KAAF,CAAU,CAEb,YAAYiQ,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAG,KAAKiQ,IAAL,CAAUquB,MAAlB,CAA2B,KAAKp4B,MAAhC,CAAyC,CAA1D,CAAP,CAEA,CAEDyL,IAAI,CAAE3R,KAAF,CAAU,CAEb,YAAYiQ,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAG,KAAKiQ,IAAL,CAAUquB,MAAlB,CAA2B,KAAKp4B,MAAhC,CAAyC,CAA1D,CAAP,CAEA,CAED0L,IAAI,CAAE5R,KAAF,CAAU,CAEb,YAAYiQ,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAG,KAAKiQ,IAAL,CAAUquB,MAAlB,CAA2B,KAAKp4B,MAAhC,CAAyC,CAA1D,CAAP,CAEA,CAEDqzB,KAAK,CAAEv5B,KAAF,CAAS6B,CAAT,CAAYC,CAAZ,CAAgB,CAEpB9B,KAAK,CAAGA,KAAK,CAAG,KAAKiQ,IAAL,CAAUquB,MAAlB,CAA2B,KAAKp4B,MAAxC,CAEA,KAAK+J,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAG,CAAzB,EAA+B6B,CAA/B,CACA,KAAKoO,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAG,CAAzB,EAA+B8B,CAA/B,CAEA,WAAA,CAEA,CAED03B,MAAM,CAAEx5B,KAAF,CAAS6B,CAAT,CAAYC,CAAZ,CAAeoO,CAAf,CAAmB,CAExBlQ,KAAK,CAAGA,KAAK,CAAG,KAAKiQ,IAAL,CAAUquB,MAAlB,CAA2B,KAAKp4B,MAAxC,CAEA,KAAK+J,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAG,CAAzB,EAA+B6B,CAA/B,CACA,KAAKoO,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAG,CAAzB,EAA+B8B,CAA/B,CACA,KAAKmO,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAG,CAAzB,EAA+BkQ,CAA/B,CAEA,WAAA,CAEA,CAEDupB,OAAO,CAAEz5B,KAAF,CAAS6B,CAAT,CAAYC,CAAZ,CAAeoO,CAAf,CAAkB/M,CAAlB,CAAsB,CAE5BnD,KAAK,CAAGA,KAAK,CAAG,KAAKiQ,IAAL,CAAUquB,MAAlB,CAA2B,KAAKp4B,MAAxC,CAEA,KAAK+J,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAG,CAAzB,EAA+B6B,CAA/B,CACA,KAAKoO,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAG,CAAzB,EAA+B8B,CAA/B,CACA,KAAKmO,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAG,CAAzB,EAA+BkQ,CAA/B,CACA,KAAKD,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAG,CAAzB,EAA+BmD,CAA/B,CAEA,WAAA,CAEA,CAEDJ,KAAK,CAAEkN,IAAF,CAAS,CAEb,GAAKA,IAAI,GAAKxQ,SAAd,CAA0B,CAEzB2D,OAAO,CAAClB,GAAR,CAAa,iHAAb,EAEA,MAAM7B,KAAK,CAAG,EAAd,CAEA,IAAM,IAAIE,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,KAAKmS,KAA1B,CAAiCnS,CAAC,EAAlC,CAAwC,CAEvC,MAAMP,KAAK,CAAGO,CAAC,CAAG,KAAK0P,IAAL,CAAUquB,MAAd,CAAuB,KAAKp4B,MAA1C,CAEA,IAAM,IAAIgY,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,KAAKsa,QAA1B,CAAoCta,CAAC,EAArC,CAA2C,CAE1C7d,KAAK,CAACT,IAAN,CAAY,KAAKqQ,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAGke,CAAzB,CAAZ,EAEA,CAED,CAED,WAAWl+B,eAAJ,CAAqB,SAASqgB,KAAL,CAAW+B,WAAf,CAA4B/B,KAA5B,CAArB,CAA0D,KAAKm4B,QAA/D,CAAyE,KAAKH,UAA9E,CAAP,CAEA,CApBD,KAoBO,CAEN,GAAKpoB,IAAI,CAACuqE,kBAAL,GAA4B/6E,SAAjC,CAA6C,CAE5CwQ,IAAI,CAACuqE,kBAAL,CAA0B,EAA1B,CAEA,CAED,GAAKvqE,IAAI,CAACuqE,kBAAL,CAAyB,KAAKvqE,IAAL,CAAU1O,IAAnC,IAA8C9B,SAAnD,CAA+D,CAE9DwQ,IAAI,CAACuqE,kBAAL,CAAyB,KAAKvqE,IAAL,CAAU1O,IAAnC,EAA4C,KAAK0O,IAAL,CAAUlN,KAAV,CAAiBkN,IAAjB,CAA5C,CAEA,CAED,WAAWje,0BAAJ,CAAgCie,IAAI,CAACuqE,kBAAL,CAAyB,KAAKvqE,IAAL,CAAU1O,IAAnC,CAAhC,CAA2E,KAAKi3B,QAAhF,CAA0F,KAAKtyB,MAA/F,CAAuG,KAAKmyB,UAA5G,CAAP,CAEA,CAED,CAED1gC,MAAM,CAAEsY,IAAF,CAAS,CAEd,GAAKA,IAAI,GAAKxQ,SAAd,CAA0B,CAEzB2D,OAAO,CAAClB,GAAR,CAAa,sHAAb,EAEA,MAAM7B,KAAK,CAAG,EAAd,CAEA,IAAM,IAAIE,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,KAAKmS,KAA1B,CAAiCnS,CAAC,EAAlC,CAAwC,CAEvC,MAAMP,KAAK,CAAGO,CAAC,CAAG,KAAK0P,IAAL,CAAUquB,MAAd,CAAuB,KAAKp4B,MAA1C,CAEA,IAAM,IAAIgY,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,KAAKsa,QAA1B,CAAoCta,CAAC,EAArC,CAA2C,CAE1C7d,KAAK,CAACT,IAAN,CAAY,KAAKqQ,IAAL,CAAU5P,KAAV,CAAiBL,KAAK,CAAGke,CAAzB,CAAZ,EAEA,CAED,CAED;EAEA,OAAO,CACNsa,QAAQ,CAAE,KAAKA,QADT,CAENl5B,IAAI,CAAE,KAAKe,KAAL,CAAW+B,WAAX,CAAuBuJ,IAFvB,CAGNtL,KAAK,CAAEA,KAHD,CAINg4B,UAAU,CAAE,KAAKA,UAJX,CAAP,CAOA,CA3BD,KA2BO;EAIN,GAAKpoB,IAAI,CAACuqE,kBAAL,GAA4B/6E,SAAjC,CAA6C,CAE5CwQ,IAAI,CAACuqE,kBAAL,CAA0B,EAA1B,CAEA,CAED,GAAKvqE,IAAI,CAACuqE,kBAAL,CAAyB,KAAKvqE,IAAL,CAAU1O,IAAnC,IAA8C9B,SAAnD,CAA+D,CAE9DwQ,IAAI,CAACuqE,kBAAL,CAAyB,KAAKvqE,IAAL,CAAU1O,IAAnC,EAA4C,KAAK0O,IAAL,CAAUtY,MAAV,CAAkBsY,IAAlB,CAA5C,CAEA,CAED,OAAO,CACNouB,4BAA4B,CAAE,IADxB,CAEN7F,QAAQ,CAAE,KAAKA,QAFT,CAGNvoB,IAAI,CAAE,KAAKA,IAAL,CAAU1O,IAHV,CAIN2E,MAAM,CAAE,KAAKA,MAJP,CAKNmyB,UAAU,CAAE,KAAKA,UALX,CAAP,CAQA,CAED,CAnR+B,CAuRjCrmC,0BAA0B,CAAC+U,SAA3B,CAAqCs3B,4BAArC,CAAoE,IAApE,CAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAEA,MAAMpsC,cAAN,SAA6B5S,QAAS,CAErC+iB,WAAW,CAAEiqB,UAAF,CAAe,CAEzB,QAEA,KAAK/sB,IAAL,CAAY,gBAAZ,CAEA,KAAK0yB,KAAL,CAAa,IAAIpyC,KAAJ,CAAW,QAAX,CAAb,CAEA,KAAKuzC,GAAL,CAAW,IAAX,CAEA,KAAKE,QAAL,CAAgB,IAAhB,CAEA,KAAKroB,QAAL,CAAgB,CAAhB,CAEA,KAAKoqB,eAAL,CAAuB,IAAvB,CAEA,KAAK7F,WAAL,CAAmB,IAAnB,CAEA,KAAKoC,SAAL,CAAgBtF,UAAhB,EAEA,CAEDrpB,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKsjB,KAAL,CAAWhvB,IAAX,CAAiB0L,MAAM,CAACsjB,KAAxB,EAEA,KAAKmB,GAAL,CAAWzkB,MAAM,CAACykB,GAAlB,CAEA,KAAKE,QAAL,CAAgB3kB,MAAM,CAAC2kB,QAAvB,CAEA,KAAKroB,QAAL,CAAgB0D,MAAM,CAAC1D,QAAvB,CAEA,KAAKoqB,eAAL,CAAuB1mB,MAAM,CAAC0mB,eAA9B,CAEA,WAAA,CAEA,CAxCoC,CA4CtCnjC,cAAc,CAAC8U,SAAf,CAAyB0oE,gBAAzB,CAA4C,IAA5C,CAEA,IAAIv9E,WAAJ,CAEA,MAAMC,eAAe,cAAiB,IAAIvX,OAAJ,EAAtC,CACA,MAAMwX,WAAW,cAAiB,IAAIxX,OAAJ,EAAlC,CACA,MAAMyX,WAAW,cAAiB,IAAIzX,OAAJ,EAAlC,CAEA,MAAM0X,gBAAgB,cAAiB,IAAItY,OAAJ,EAAvC,CACA,MAAMuY,gBAAgB,cAAiB,IAAIvY,OAAJ,EAAvC,CACA,MAAMwY,gBAAgB,cAAiB,IAAI7V,OAAJ,EAAvC,CAEA,MAAM8V,GAAG,cAAiB,IAAI7X,OAAJ,EAA1B,CACA,MAAM8X,GAAG,cAAiB,IAAI9X,OAAJ,EAA1B,CACA,MAAM+X,GAAG,cAAiB,IAAI/X,OAAJ,EAA1B,CAEA,MAAMgY,IAAI,cAAiB,IAAI5Y,OAAJ,EAA3B,CACA,MAAM6Y,IAAI,cAAiB,IAAI7Y,OAAJ,EAA3B,CACA,MAAM8Y,IAAI,cAAiB,IAAI9Y,OAAJ,EAA3B,CAEA,MAAM+Y,MAAN,SAAqB3U,QAAS,CAE7BgkB,WAAW,CAAEuqB,QAAF,CAAa,CAEvB,QAEA,KAAKrtB,IAAL,CAAY,QAAZ,CAEA,GAAKpN,WAAS,GAAKuN,SAAnB,CAA+B,CAE9BvN,WAAS,CAAG,IAAIrR,cAAJ,EAAZ,CAEA,MAAM45F,YAAY,CAAG,IAAI1gD,YAAJ,CAAkB,CACtC,CAAE,GADoC,CAC/B,CAAE,GAD6B,CACxB,CADwB,CACrB,CADqB,CAClB,CADkB,CAEtC,GAFsC,CAEjC,CAAE,GAF+B,CAE1B,CAF0B,CAEvB,CAFuB,CAEpB,CAFoB,CAGtC,GAHsC,CAGjC,GAHiC,CAG5B,CAH4B,CAGzB,CAHyB,CAGtB,CAHsB,CAItC,CAAE,GAJoC,CAI/B,GAJ+B,CAI1B,CAJ0B,CAIvB,CAJuB,CAIpB,CAJoB,CAAlB,CAArB,CAOA,MAAMwgD,iBAAiB,CAAG,IAAIzoF,iBAAJ,CAAuB2oF,YAAvB,CAAqC,CAArC,CAA1B,CAEAvoF,WAAS,CAACsoC,QAAV,CAAoB,CAAE,CAAF,CAAK,CAAL,CAAQ,CAAR,CAAW,CAAX,CAAc,CAAd,CAAiB,CAAjB,CAApB,EACAtoC,WAAS,CAACwoC,YAAV,CAAwB,UAAxB,CAAoC,IAAI1oC,0BAAJ,CAAgCuoF,iBAAhC,CAAmD,CAAnD,CAAsD,CAAtD,CAAyD,KAAzD,CAApC,EACAroF,WAAS,CAACwoC,YAAV,CAAwB,IAAxB,CAA8B,IAAI1oC,0BAAJ,CAAgCuoF,iBAAhC,CAAmD,CAAnD,CAAsD,CAAtD,CAAyD,KAAzD,CAA9B,EAEA,CAED,KAAK99D,QAAL,CAAgBvqB,WAAhB,CACA,KAAKy6B,QAAL,CAAkBA,QAAQ,GAAKltB,SAAf,CAA6BktB,QAA7B,CAAwC,IAAI16B,cAAJ,EAAxD,CAEA,KAAKwU,MAAL,CAAc,IAAIzsB,OAAJ,CAAa,GAAb,CAAkB,GAAlB,CAAd,CAEA,CAED4wC,OAAO,CAAEwU,SAAF,CAAa/oC,UAAb,CAA0B,CAEhC,GAAK+oC,SAAS,CAACzmB,MAAV,GAAqB,IAA1B,CAAiC,CAEhCvV,OAAO,CAAC8D,KAAR,CAAe,uFAAf,EAEA,CAED9U,WAAW,CAACooB,kBAAZ,CAAgC,KAAKxB,WAArC,EAEAxmB,gBAAgB,CAACwQ,IAAjB,CAAuBo8B,SAAS,CAACzmB,MAAV,CAAiBK,WAAxC,EACA,KAAKgP,eAAL,CAAqB3f,gBAArB,CAAuC+2B,SAAS,CAACzmB,MAAV,CAAiBC,kBAAxD,CAA4E,KAAKI,WAAjF,EAEA3mB,WAAW,CAACkoB,qBAAZ,CAAmC,KAAKyN,eAAxC,EAEA,GAAKoX,SAAS,CAACzmB,MAAV,CAAiBorB,mBAAjB,EAAwC,KAAKpX,QAAL,CAAcyI,eAAd,GAAkC,KAA/E,CAAuF,CAEtFhjC,WAAW,CAAC4R,cAAZ,CAA4B,CAAE3R,WAAW,CAAC6d,CAA1C,EAEA,CAED,MAAMlF,QAAQ,CAAG,KAAK2hB,QAAL,CAAc3hB,QAA/B,CACA,IAAIpE,GAAJ,CAASD,GAAT,CAEA,GAAKqE,QAAQ,GAAK,CAAlB,CAAsB,CAErBrE,GAAG,CAAGhG,IAAI,CAACgG,GAAL,CAAUqE,QAAV,CAAN,CACApE,GAAG,CAAGjG,IAAI,CAACiG,GAAL,CAAUoE,QAAV,CAAN,CAEA,CAED,MAAMvE,MAAM,CAAG,KAAKA,MAApB,CAEAzT,eAAe,CAAEP,GAAG,CAAC8P,GAAJ,CAAS,CAAE,GAAX,CAAgB,CAAE,GAAlB,CAAuB,CAAvB,CAAF,CAA8BlQ,WAA9B,CAA2CoU,MAA3C,CAAmDrU,WAAnD,CAAgEwU,GAAhE,CAAqED,GAArE,CAAf,CACA3T,eAAe,CAAEN,GAAG,CAAC6P,GAAJ,CAAS,GAAT,CAAc,CAAE,GAAhB,CAAqB,CAArB,CAAF,CAA4BlQ,WAA5B,CAAyCoU,MAAzC,CAAiDrU,WAAjD,CAA8DwU,GAA9D,CAAmED,GAAnE,CAAf,CACA3T,eAAe,CAAEL,GAAG,CAAC4P,GAAJ,CAAS,GAAT,CAAc,GAAd,CAAmB,CAAnB,CAAF,CAA0BlQ,WAA1B,CAAuCoU,MAAvC,CAA+CrU,WAA/C,CAA4DwU,GAA5D,CAAiED,GAAjE,CAAf,CAEA/T,IAAI,CAAC2P,GAAL,CAAU,CAAV,CAAa,CAAb,EACA1P,IAAI,CAAC0P,GAAL,CAAU,CAAV,CAAa,CAAb,EACAzP,IAAI,CAACyP,GAAL,CAAU,CAAV,CAAa,CAAb,EAEA;EACA,IAAIub,SAAS,CAAGshB,SAAS,CAACrgB,GAAV,CAAcqC,iBAAd,CAAiC3uB,GAAjC,CAAsCC,GAAtC,CAA2CC,GAA3C,CAAgD,KAAhD,CAAuDR,eAAvD,CAAhB,CAEA,GAAK2rB,SAAS,GAAK,IAAnB,CAA0B;EAGzB9qB,eAAe,CAAEN,GAAG,CAAC6P,GAAJ,CAAS,CAAE,GAAX,CAAgB,GAAhB,CAAqB,CAArB,CAAF,CAA4BlQ,WAA5B,CAAyCoU,MAAzC,CAAiDrU,WAAjD,CAA8DwU,GAA9D,CAAmED,GAAnE,CAAf,CACA9T,IAAI,CAAC0P,GAAL,CAAU,CAAV,CAAa,CAAb,EAEAub,SAAS,CAAGshB,SAAS,CAACrgB,GAAV,CAAcqC,iBAAd,CAAiC3uB,GAAjC,CAAsCE,GAAtC,CAA2CD,GAA3C,CAAgD,KAAhD,CAAuDP,eAAvD,CAAZ,CACA,GAAK2rB,SAAS,GAAK,IAAnB,CAA0B,CAEzB,OAEA,CAED,CAED,MAAMwL,QAAQ,CAAG8V,SAAS,CAACrgB,GAAV,CAAcF,MAAd,CAAqBtZ,UAArB,CAAiCpT,eAAjC,CAAjB,CAEA,GAAKm3B,QAAQ,CAAG8V,SAAS,CAAChZ,IAArB,EAA6BkD,QAAQ,CAAG8V,SAAS,CAAC/Y,GAAvD,CAA6D,OAE7DhwB,UAAU,CAACuJ,IAAX,CAAiB,CAEhB0pB,QAAQ,CAAEA,QAFM,CAGhBlN,KAAK,CAAEjqB,eAAe,CAAC4Q,KAAhB,EAHS,CAIhB6M,EAAE,CAAEzwB,QAAQ,CAAC0uC,KAAT,CAAgB17B,eAAhB,CAAiCM,GAAjC,CAAsCC,GAAtC,CAA2CC,GAA3C,CAAgDC,IAAhD,CAAsDC,IAAtD,CAA4DC,IAA5D,CAAkE,IAAI9Y,OAAJ,EAAlE,CAJY,CAKhB0lD,IAAI,CAAE,IALU,CAMhB5jB,MAAM,CAAE,IANQ,CAAjB,EAUA,CAED9Y,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,GAAKA,MAAM,CAACjI,MAAP,GAAkBhH,SAAvB,CAAmC,KAAKgH,MAAL,CAAYzD,IAAZ,CAAkB0L,MAAM,CAACjI,MAAzB,EAEnC,KAAKkmB,QAAL,CAAgBje,MAAM,CAACie,QAAvB,CAEA,WAAA,CAEA,CAvH4B,CA2H9B55B,MAAM,CAACgU,SAAP,CAAiB+uE,QAAjB,CAA4B,IAA5B,CAEA,SAAS9iF,eAAT,CAA0B0nF,cAA1B,CAA0CC,UAA1C,CAAsDl0E,MAAtD,CAA8D0E,KAA9D,CAAqEvE,GAArE,CAA0ED,GAA1E,CAAgF;EAG/ErU,gBAAgB,CAACuR,UAAjB,CAA6B62E,cAA7B,CAA6Cj0E,MAA7C,EAAsDlD,SAAtD,CAAiE,GAAjE,EAAuEQ,QAAvE,CAAiFoH,KAAjF,EAEA;EACA,GAAKvE,GAAG,GAAKnH,SAAb,CAAyB,CAExBlN,gBAAgB,CAACsP,CAAjB,CAAuB8E,GAAG,CAAGrU,gBAAgB,CAACuP,CAAzB,CAAiC+E,GAAG,CAAGtU,gBAAgB,CAACwP,CAA7E,CACAvP,gBAAgB,CAACuP,CAAjB,CAAuB8E,GAAG,CAAGtU,gBAAgB,CAACuP,CAAzB,CAAiC8E,GAAG,CAAGrU,gBAAgB,CAACwP,CAA7E,CAEA,CALD,KAKO,CAENvP,gBAAgB,CAACyQ,IAAjB,CAAuB1Q,gBAAvB,EAEA,CAGDooF,cAAc,CAAC13E,IAAf,CAAqB23E,UAArB,EACAD,cAAc,CAAC74E,CAAf,EAAoBtP,gBAAgB,CAACsP,CAArC,CACA64E,cAAc,CAAC54E,CAAf,EAAoBvP,gBAAgB,CAACuP,CAArC,CAEA;EACA44E,cAAc,CAACrqE,YAAf,CAA6B7d,gBAA7B,EAEA,CAgMD,MAAMS,aAAa,cAAiB,IAAIrY,OAAJ,EAApC,CAEA,MAAMsY,UAAU,cAAiB,IAAI3Y,OAAJ,EAAjC,CACA,MAAM4Y,WAAW,cAAiB,IAAI5Y,OAAJ,EAAlC,CAEA,MAAM6Y,SAAS,cAAiB,IAAIxY,OAAJ,EAAhC,CACA,MAAMyY,OAAO,cAAiB,IAAI1W,OAAJ,EAA9B,CAEA,MAAM2W,WAAN,SAA0BvR,IAAK,CAE9BqgB,WAAW,CAAEqa,QAAF,CAAYkQ,QAAZ,CAAuB,CAEjC,MAAOlQ,QAAP,CAAiBkQ,QAAjB,EAEA,KAAKrtB,IAAL,CAAY,aAAZ,CAEA,KAAKktB,QAAL,CAAgB,UAAhB,CACA,KAAKC,UAAL,CAAkB,IAAI9vC,OAAJ,EAAlB,CACA,KAAKi+F,iBAAL,CAAyB,IAAIj+F,OAAJ,EAAzB,CAEA,CAEDqmB,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAK8d,QAAL,CAAgB9d,MAAM,CAAC8d,QAAvB,CACA,KAAKC,UAAL,CAAgBzpB,IAAhB,CAAsB0L,MAAM,CAAC+d,UAA7B,EACA,KAAKmuD,iBAAL,CAAuB53E,IAAvB,CAA6B0L,MAAM,CAACksE,iBAApC,EAEA,KAAKluD,QAAL,CAAgBhe,MAAM,CAACge,QAAvB,CAEA,WAAA,CAEA,CAEDmuD,IAAI,CAAEnuD,QAAF,CAAYD,UAAZ,CAAyB,CAE5B,KAAKC,QAAL,CAAgBA,QAAhB,CAEA,GAAKD,UAAU,GAAKhtB,SAApB,CAAgC,CAE/B,KAAKurB,iBAAL,CAAwB,IAAxB,EAEA,KAAK0B,QAAL,CAAcouD,iBAAd,GAEAruD,UAAU,CAAG,KAAKzT,WAAlB,CAEA,CAED,KAAKyT,UAAL,CAAgBzpB,IAAhB,CAAsBypB,UAAtB,EACA,KAAKmuD,iBAAL,CAAuB53E,IAAvB,CAA6BypB,UAA7B,EAA0CziB,MAA1C,GAEA,CAEDk+D,IAAI,EAAG,CAEN,KAAKx7C,QAAL,CAAcw7C,IAAd,GAEA,CAED6S,oBAAoB,EAAG,CAEtB,MAAMz+D,MAAM,CAAG,IAAI/hC,OAAJ,EAAf,CAEA,MAAMygG,UAAU,CAAG,KAAKv+D,QAAL,CAAcud,UAAd,CAAyBghD,UAA5C,CAEA,IAAM,IAAIz6E,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGw6E,UAAU,CAACtoE,KAAhC,CAAuCnS,CAAC,CAAGC,CAA3C,CAA8CD,CAAC,EAA/C,CAAqD,CAEpD+b,MAAM,CAACza,CAAP,CAAWm5E,UAAU,CAAC10E,IAAX,CAAiB/F,CAAjB,CAAX,CACA+b,MAAM,CAACxa,CAAP,CAAWk5E,UAAU,CAACz0E,IAAX,CAAiBhG,CAAjB,CAAX,CACA+b,MAAM,CAACpM,CAAP,CAAW8qE,UAAU,CAACrpE,IAAX,CAAiBpR,CAAjB,CAAX,CACA+b,MAAM,CAACnZ,CAAP,CAAW63E,UAAU,CAACppE,IAAX,CAAiBrR,CAAjB,CAAX,CAEA,MAAM4K,KAAK,CAAG,IAAMmR,MAAM,CAACpX,eAAP,EAApB,CAEA,GAAKiG,KAAK,GAAKM,QAAf,CAA0B,CAEzB6Q,MAAM,CAACtY,cAAP,CAAuBmH,KAAvB,EAEA,CAJD,KAIO,CAENmR,MAAM,CAAC/Z,GAAP,CAAY,CAAZ,CAAe,CAAf,CAAkB,CAAlB,CAAqB,CAArB,EAA0B;EAE1B,CAEDy4E,UAAU,CAACvhD,OAAX,CAAoBl5B,CAApB,CAAuB+b,MAAM,CAACza,CAA9B,CAAiCya,MAAM,CAACxa,CAAxC,CAA2Cwa,MAAM,CAACpM,CAAlD,CAAqDoM,MAAM,CAACnZ,CAA5D,EAEA,CAED,CAED6nB,iBAAiB,CAAEC,KAAF,CAAU,CAE1B,MAAMD,iBAAN,CAAyBC,KAAzB,EAEA,GAAK,KAAKuB,QAAL,GAAkB,UAAvB,CAAoC,CAEnC,KAAKouD,iBAAL,CAAuB53E,IAAvB,CAA6B,KAAKgW,WAAlC,EAAgDhP,MAAhD,GAEA,CAJD,QAIY,KAAKwiB,QAAL,GAAkB,UAAvB,CAAoC,CAE1C,KAAKouD,iBAAL,CAAuB53E,IAAvB,CAA6B,KAAKypB,UAAlC,EAA+CziB,MAA/C,GAEA,CAJM,KAIA,CAEN5G,OAAO,CAACC,IAAR,CAAc,6CAA+C,KAAKmpB,QAAlE,EAEA,CAED,CAEDsT,aAAa,CAAE9/B,KAAF,CAASI,MAAT,CAAkB,CAE9B,MAAMssB,QAAQ,CAAG,KAAKA,QAAtB,CACA,MAAMjQ,QAAQ,CAAG,KAAKA,QAAtB,CAEAvpB,UAAU,CAACkT,mBAAX,CAAgCqW,QAAQ,CAACud,UAAT,CAAoBihD,SAApD,CAA+Dj7E,KAA/D,EACA7M,WAAW,CAACiT,mBAAZ,CAAiCqW,QAAQ,CAACud,UAAT,CAAoBghD,UAArD,CAAiEh7E,KAAjE,EAEA/M,aAAa,CAAC+P,IAAd,CAAoB5C,MAApB,EAA6BiQ,YAA7B,CAA2C,KAAKoc,UAAhD,EAEArsB,MAAM,CAACmC,GAAP,CAAY,CAAZ,CAAe,CAAf,CAAkB,CAAlB,EAEA,IAAM,IAAIhC,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9B,MAAMghD,MAAM,CAAGpuD,WAAW,CAAC2P,YAAZ,CAA0BvC,CAA1B,CAAf,CAEA,GAAKghD,MAAM,GAAK,CAAhB,CAAoB,CAEnB,MAAM25B,SAAS,CAAGhoF,UAAU,CAAC4P,YAAX,CAAyBvC,CAAzB,CAAlB,CAEAlN,OAAO,CAACgV,gBAAR,CAA0BqkB,QAAQ,CAACkjC,KAAT,CAAgBsrB,SAAhB,EAA4BliE,WAAtD,CAAmE0T,QAAQ,CAACyuD,YAAT,CAAuBD,SAAvB,CAAnE,EAEA96E,MAAM,CAACuD,eAAP,CAAwBvQ,SAAS,CAAC4P,IAAV,CAAgB/P,aAAhB,EAAgCod,YAAhC,CAA8Chd,OAA9C,CAAxB,CAAiFkuD,MAAjF,EAEA,CAED,CAED,OAAOnhD,MAAM,CAACiQ,YAAP,CAAqB,KAAKuqE,iBAA1B,CAAP,CAEA,CAtI6B,CA0I/BtnF,WAAW,CAACyT,SAAZ,CAAsBwlB,aAAtB,CAAsC,IAAtC,CAEA,MAAMh5B,IAAN,SAAmBnV,QAAS,CAE3BgkB,WAAW,EAAG,CAEb,QAEA,KAAK9C,IAAL,CAAY,MAAZ,CAEA,CAR0B,CAY5B/L,IAAI,CAACwT,SAAL,CAAeq0E,MAAf,CAAwB,IAAxB,CAEA,MAAM5nF,WAAN,SAA0BnZ,OAAQ,CAEjC+nB,WAAW,CAAE6N,IAAI,CAAG,IAAT,CAAe5N,KAAK,CAAG,CAAvB,CAA0BC,MAAM,CAAG,CAAnC,CAAsCkL,MAAtC,CAA8ClO,IAA9C,CAAoD4N,OAApD,CAA6DE,KAA7D,CAAoEC,KAApE,CAA2EC,SAAS,CAAGp6B,aAAvF,CAAsGq6B,SAAS,CAAGr6B,aAAlH,CAAiIu6B,UAAjI,CAA6IC,QAA7I,CAAwJ,CAElK,MAAO,IAAP,CAAaR,OAAb,CAAsBE,KAAtB,CAA6BC,KAA7B,CAAoCC,SAApC,CAA+CC,SAA/C,CAA0DC,MAA1D,CAAkElO,IAAlE,CAAwEmO,UAAxE,CAAoFC,QAApF,EAEA,KAAKpB,KAAL,CAAa,CAAE2D,IAAI,CAAEA,IAAR,CAAc5N,KAAK,CAAEA,KAArB,CAA4BC,MAAM,CAAEA,MAApC,CAAb,CAEA,KAAKgL,SAAL,CAAiBA,SAAjB,CACA,KAAKC,SAAL,CAAiBA,SAAjB,CAEA,KAAKU,eAAL,CAAuB,KAAvB,CACA,KAAKE,KAAL,CAAa,KAAb,CACA,KAAKC,eAAL,CAAuB,CAAvB,CAEA,KAAKyB,WAAL,CAAmB,IAAnB,CAEA,CAjBgC,CAqBlCrc,WAAW,CAACuT,SAAZ,CAAsB0I,aAAtB,CAAsC,IAAtC,CAgRA,MAAMrS,wBAAN,SAAuCpd,eAAgB,CAEtDoiB,WAAW,CAAE/B,KAAF,CAASm4B,QAAT,CAAmBH,UAAnB,CAA+B+e,gBAAgB,CAAG,CAAlD,CAAsD,CAEhE,GAAK,OAAO/e,UAAP,GAAsB,QAA3B,CAAsC,CAErC+e,gBAAgB,CAAG/e,UAAnB,CAEAA,UAAU,CAAG,KAAb,CAEAj1B,OAAO,CAAC8D,KAAR,CAAe,+FAAf,EAEA,CAED,MAAO7G,KAAP,CAAcm4B,QAAd,CAAwBH,UAAxB,EAEA,KAAK+e,gBAAL,CAAwBA,gBAAxB,CAEA,CAEDp0C,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAK0oC,gBAAL,CAAwB1oC,MAAM,CAAC0oC,gBAA/B,CAEA,WAAA,CAEA,CAEDz/C,MAAM,EAAG,CAER,MAAMsY,IAAI,CAAG,MAAMtY,MAAN,EAAb,CAEAsY,IAAI,CAACmnC,gBAAL,CAAwB,KAAKA,gBAA7B,CAEAnnC,IAAI,CAACkoC,0BAAL,CAAkC,IAAlC,CAEA,OAAOloC,IAAP,CAEA,CAxCqD,CA4CvD7S,wBAAwB,CAAC2J,SAAzB,CAAmCoxC,0BAAnC,CAAgE,IAAhE,CAEA,MAAM1kD,oBAAoB,cAAiB,IAAI9W,OAAJ,EAA3C,CACA,MAAM+W,oBAAoB,cAAiB,IAAI/W,OAAJ,EAA3C,CAEA,MAAMgX,mBAAmB,CAAG,EAA5B,CAEA,MAAMC,KAAK,cAAiB,IAAI7R,IAAJ,EAA5B,CAEA,MAAM8R,aAAN,SAA4B9R,IAAK,CAEhCqgB,WAAW,CAAEqa,QAAF,CAAYkQ,QAAZ,CAAsBja,KAAtB,CAA8B,CAExC,MAAO+J,QAAP,CAAiBkQ,QAAjB,EAEA,KAAKlB,cAAL,CAAsB,IAAIruB,wBAAJ,CAA8B,IAAI28B,YAAJ,CAAkBrnB,KAAK,CAAG,EAA1B,CAA9B,CAA8D,EAA9D,CAAtB,CACA,KAAKgZ,aAAL,CAAqB,IAArB,CAEA,KAAKhZ,KAAL,CAAaA,KAAb,CAEA,KAAK6V,aAAL,CAAqB,KAArB,CAEA,CAEDvlB,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAK+c,cAAL,CAAoBzoB,IAApB,CAA0B0L,MAAM,CAAC+c,cAAjC,EAEA,GAAK/c,MAAM,CAACgd,aAAP,GAAyB,IAA9B,CAAqC,KAAKA,aAAL,CAAqBhd,MAAM,CAACgd,aAAP,CAAqB3oB,KAArB,EAArB,CAErC,KAAK2P,KAAL,CAAahE,MAAM,CAACgE,KAApB,CAEA,WAAA,CAEA,CAED2oE,UAAU,CAAEr7E,KAAF,CAASgyB,KAAT,CAAiB,CAE1BA,KAAK,CAAC/rB,SAAN,CAAiB,KAAKylB,aAAL,CAAmBrrB,KAApC,CAA2CL,KAAK,CAAG,CAAnD,EAEA,CAEDs7E,WAAW,CAAEt7E,KAAF,CAASuL,MAAT,CAAkB,CAE5BA,MAAM,CAACtF,SAAP,CAAkB,KAAKwlB,cAAL,CAAoBprB,KAAtC,CAA6CL,KAAK,CAAG,EAArD,EAEA,CAED4qB,OAAO,CAAEwU,SAAF,CAAa/oC,UAAb,CAA0B,CAEhC,MAAM2iB,WAAW,CAAG,KAAKA,WAAzB,CACA,MAAMuiE,YAAY,CAAG,KAAK7oE,KAA1B,CAEA9e,KAAK,CAAC6oB,QAAN,CAAiB,KAAKA,QAAtB,CACA7oB,KAAK,CAAC+4B,QAAN,CAAiB,KAAKA,QAAtB,CAEA,GAAK/4B,KAAK,CAAC+4B,QAAN,GAAmBltB,SAAxB,CAAoC,OAEpC,IAAM,IAAI+7E,UAAU,CAAG,CAAvB,CAA0BA,UAAU,CAAGD,YAAvC,CAAqDC,UAAU,EAA/D,CAAqE;EAIpE,KAAKF,WAAL,CAAkBE,UAAlB,CAA8B/nF,oBAA9B,EAEAC,oBAAoB,CAAC2U,gBAArB,CAAuC2Q,WAAvC,CAAoDvlB,oBAApD,EAEA;EAEAG,KAAK,CAAColB,WAAN,CAAoBtlB,oBAApB,CAEAE,KAAK,CAACg3B,OAAN,CAAewU,SAAf,CAA0BzrC,mBAA1B,EAEA;EAEA,IAAM,IAAI4M,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG7M,mBAAmB,CAAC8M,MAAzC,CAAiDF,CAAC,CAAGC,CAArD,CAAwDD,CAAC,EAAzD,CAA+D,CAE9D,MAAMud,SAAS,CAAGnqB,mBAAmB,CAAE4M,CAAF,CAArC,CACAud,SAAS,CAAC09D,UAAV,CAAuBA,UAAvB,CACA19D,SAAS,CAAChC,MAAV,CAAmB,IAAnB,CACAzlB,UAAU,CAACuJ,IAAX,CAAiBke,SAAjB,EAEA,CAEDnqB,mBAAmB,CAAC8M,MAApB,CAA6B,CAA7B,CAEA,CAED,CAEDg7E,UAAU,CAAEz7E,KAAF,CAASgyB,KAAT,CAAiB,CAE1B,GAAK,KAAKtG,aAAL,GAAuB,IAA5B,CAAmC,CAElC,KAAKA,aAAL,CAAqB,IAAItuB,wBAAJ,CAA8B,IAAI28B,YAAJ,CAAkB,KAAKtO,cAAL,CAAoB/Y,KAApB,CAA4B,CAA9C,CAA9B,CAAiF,CAAjF,CAArB,CAEA,CAEDsf,KAAK,CAAC7rB,OAAN,CAAe,KAAKulB,aAAL,CAAmBrrB,KAAlC,CAAyCL,KAAK,CAAG,CAAjD,EAEA,CAED07E,WAAW,CAAE17E,KAAF,CAASuL,MAAT,CAAkB,CAE5BA,MAAM,CAACpF,OAAP,CAAgB,KAAKslB,cAAL,CAAoBprB,KAApC,CAA2CL,KAAK,CAAG,EAAnD,EAEA,CAED8+B,kBAAkB,EAAG,EAIrBpvB,OAAO,EAAG,CAET,KAAKxP,aAAL,CAAoB,CAAEZ,IAAI,CAAE,SAAR,CAApB,EAEA,CA5G+B,CAgHjCzL,aAAa,CAACkT,SAAd,CAAwBykB,eAAxB,CAA0C,IAA1C,CAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAEA,MAAM13B,iBAAN,SAAgCzU,QAAS,CAExC+iB,WAAW,CAAEiqB,UAAF,CAAe,CAEzB,QAEA,KAAK/sB,IAAL,CAAY,mBAAZ,CAEA,KAAK0yB,KAAL,CAAa,IAAIpyC,KAAJ,CAAW,QAAX,CAAb,CAEA,KAAKy1C,SAAL,CAAiB,CAAjB,CACA,KAAKsmD,OAAL,CAAe,OAAf,CACA,KAAKC,QAAL,CAAgB,OAAhB,CAEA,KAAKjqD,SAAL,CAAgBtF,UAAhB,EAEA,CAGDrpB,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKsjB,KAAL,CAAWhvB,IAAX,CAAiB0L,MAAM,CAACsjB,KAAxB,EAEA,KAAKqD,SAAL,CAAiB3mB,MAAM,CAAC2mB,SAAxB,CACA,KAAKsmD,OAAL,CAAejtE,MAAM,CAACitE,OAAtB,CACA,KAAKC,QAAL,CAAgBltE,MAAM,CAACktE,QAAvB,CAEA,WAAA,CAEA,CA/BuC,CAmCzC9nF,iBAAiB,CAACiT,SAAlB,CAA4BooE,mBAA5B,CAAkD,IAAlD,CAEA,MAAMp7E,QAAQ,cAAiB,IAAInZ,OAAJ,EAA/B,CACA,MAAMoZ,MAAM,cAAiB,IAAIpZ,OAAJ,EAA7B,CACA,MAAMqZ,gBAAgB,cAAiB,IAAItX,OAAJ,EAAvC,CACA,MAAMuX,MAAM,cAAiB,IAAIxX,GAAJ,EAA7B,CACA,MAAMyX,SAAS,cAAiB,IAAIjY,MAAJ,EAAhC,CAEA,MAAMkY,IAAN,SAAmBhW,QAAS,CAE3BgkB,WAAW,CAAEqa,QAAQ,CAAG,IAAI57B,cAAJ,EAAb,CAAmC8rC,QAAQ,CAAG,IAAI74B,iBAAJ,EAA9C,CAAwE,CAElF,QAEA,KAAKwL,IAAL,CAAY,MAAZ,CAEA,KAAKmd,QAAL,CAAgBA,QAAhB,CACA,KAAKkQ,QAAL,CAAgBA,QAAhB,CAEA,KAAKmS,kBAAL,GAEA,CAED97B,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKie,QAAL,CAAgBje,MAAM,CAACie,QAAvB,CACA,KAAKlQ,QAAL,CAAgB/N,MAAM,CAAC+N,QAAvB,CAEA,WAAA,CAEA,CAEDo/D,oBAAoB,EAAG,CAEtB,MAAMp/D,QAAQ,CAAG,KAAKA,QAAtB,CAEA,GAAKA,QAAQ,CAACmhB,gBAAd,CAAiC;EAIhC,GAAKnhB,QAAQ,CAACzc,KAAT,GAAmB,IAAxB,CAA+B,CAE9B,MAAMg9B,iBAAiB,CAAGvgB,QAAQ,CAACud,UAAT,CAAoB5U,QAA9C,CACA,MAAM02D,aAAa,CAAG,CAAE,CAAF,CAAtB,CAEA,IAAM,IAAIv7E,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGw8B,iBAAiB,CAACtqB,KAAvC,CAA8CnS,CAAC,CAAGC,CAAlD,CAAqDD,CAAC,EAAtD,CAA4D,CAE3DxM,QAAQ,CAACqS,mBAAT,CAA8B42B,iBAA9B,CAAiDz8B,CAAC,CAAG,CAArD,EACAvM,MAAM,CAACoS,mBAAP,CAA4B42B,iBAA5B,CAA+Cz8B,CAA/C,EAEAu7E,aAAa,CAAEv7E,CAAF,CAAb,CAAqBu7E,aAAa,CAAEv7E,CAAC,CAAG,CAAN,CAAlC,CACAu7E,aAAa,CAAEv7E,CAAF,CAAb,EAAsBxM,QAAQ,CAACwR,UAAT,CAAqBvR,MAArB,CAAtB,CAEA,CAEDyoB,QAAQ,CAACie,YAAT,CAAuB,cAAvB,CAAuC,IAAIt6C,sBAAJ,CAA4B07F,aAA5B,CAA2C,CAA3C,CAAvC,EAEA,CAjBD,KAiBO,CAEN14E,OAAO,CAACC,IAAR,CAAc,+FAAd,EAEA,CAED,CA3BD,QA2BYoZ,QAAQ,CAACkjB,UAAd,CAA2B,CAEjCv8B,OAAO,CAAC8D,KAAR,CAAe,wGAAf,EAEA,CAED,WAAA,CAEA,CAED0jB,OAAO,CAAEwU,SAAF,CAAa/oC,UAAb,CAA0B,CAEhC,MAAMomB,QAAQ,CAAG,KAAKA,QAAtB,CACA,MAAMzD,WAAW,CAAG,KAAKA,WAAzB,CACA,MAAM6uD,SAAS,CAAGzoC,SAAS,CAACmgB,MAAV,CAAiBnrD,IAAjB,CAAsByzE,SAAxC,CACA,MAAMxtC,SAAS,CAAG5d,QAAQ,CAAC4d,SAA3B,CAEA;EAEA,GAAK5d,QAAQ,CAAC2d,cAAT,GAA4B,IAAjC,CAAwC3d,QAAQ,CAACye,qBAAT,GAExC/mC,SAAS,CAAC6O,IAAV,CAAgByZ,QAAQ,CAAC2d,cAAzB,EACAjmC,SAAS,CAACkc,YAAV,CAAwB2I,WAAxB,EACA7kB,SAAS,CAAC+lB,MAAV,EAAoB2tD,SAApB,CAEA,GAAKzoC,SAAS,CAACrgB,GAAV,CAAc7B,gBAAd,CAAgC/oB,SAAhC,IAAgD,KAArD,CAA6D,OAE7D;EAEAF,gBAAgB,CAAC+O,IAAjB,CAAuBgW,WAAvB,EAAqChP,MAArC,GACA9V,MAAM,CAAC8O,IAAP,CAAao8B,SAAS,CAACrgB,GAAvB,EAA6B1O,YAA7B,CAA2Cpc,gBAA3C,EAEA,MAAM8nF,cAAc,CAAGlU,SAAS,EAAK,CAAE,KAAK18D,KAAL,CAAWtJ,CAAX,CAAe,KAAKsJ,KAAL,CAAWrJ,CAA1B,CAA8B,KAAKqJ,KAAL,CAAW+E,CAA3C,EAAiD,CAAtD,CAAhC,CACA,MAAM8rE,gBAAgB,CAAGD,cAAc,CAAGA,cAA1C,CAEA,MAAME,MAAM,CAAG,IAAIrhG,OAAJ,EAAf,CACA,MAAMshG,IAAI,CAAG,IAAIthG,OAAJ,EAAb,CACA,MAAMuhG,YAAY,CAAG,IAAIvhG,OAAJ,EAArB,CACA,MAAMwhG,QAAQ,CAAG,IAAIxhG,OAAJ,EAAjB,CACA,MAAMu7B,IAAI,CAAG,KAAKy/D,cAAL,CAAsB,CAAtB,CAA0B,CAAvC,CAEA,GAAKn5D,QAAQ,CAACmhB,gBAAd,CAAiC,CAEhC,MAAM59B,KAAK,CAAGyc,QAAQ,CAACzc,KAAvB,CACA,MAAMg6B,UAAU,CAAGvd,QAAQ,CAACud,UAA5B,CACA,MAAMgD,iBAAiB,CAAGhD,UAAU,CAAC5U,QAArC,CAEA,GAAKplB,KAAK,GAAK,IAAf,CAAsB,CAErB,MAAMs6B,KAAK,CAAG35B,IAAI,CAACe,GAAL,CAAU,CAAV,CAAa24B,SAAS,CAACC,KAAvB,CAAd,CACA,MAAMkF,GAAG,CAAG7+B,IAAI,CAACc,GAAL,CAAUzB,KAAK,CAAC0S,KAAhB,CAAyB2nB,SAAS,CAACC,KAAV,CAAkBD,SAAS,CAAC3nB,KAArD,CAAZ,CAEA,IAAM,IAAInS,CAAC,CAAG+5B,KAAR,CAAe95B,CAAC,CAAGg/B,GAAG,CAAG,CAA/B,CAAkCj/B,CAAC,CAAGC,CAAtC,CAAyCD,CAAC,EAAI4V,IAA9C,CAAqD,CAEpD,MAAM1S,CAAC,CAAGzD,KAAK,CAACsG,IAAN,CAAY/F,CAAZ,CAAV,CACA,MAAMmD,CAAC,CAAG1D,KAAK,CAACsG,IAAN,CAAY/F,CAAC,CAAG,CAAhB,CAAV,CAEA07E,MAAM,CAAC71E,mBAAP,CAA4B42B,iBAA5B,CAA+Cv5B,CAA/C,EACAy4E,IAAI,CAAC91E,mBAAL,CAA0B42B,iBAA1B,CAA6Ct5B,CAA7C,EAEA,MAAM24E,MAAM,CAAGnoF,MAAM,CAACorB,mBAAP,CAA4B28D,MAA5B,CAAoCC,IAApC,CAA0CE,QAA1C,CAAoDD,YAApD,CAAf,CAEA,GAAKE,MAAM,CAAGL,gBAAd,CAAiC,SAEjCI,QAAQ,CAAC/rE,YAAT,CAAuB,KAAK2I,WAA5B,EAA2C;EAE3C,MAAMsQ,QAAQ,CAAG8V,SAAS,CAACrgB,GAAV,CAAcF,MAAd,CAAqBtZ,UAArB,CAAiC62E,QAAjC,CAAjB,CAEA,GAAK9yD,QAAQ,CAAG8V,SAAS,CAAChZ,IAArB,EAA6BkD,QAAQ,CAAG8V,SAAS,CAAC/Y,GAAvD,CAA6D,SAE7DhwB,UAAU,CAACuJ,IAAX,CAAiB,CAEhB0pB,QAAQ,CAAEA,QAFM;EAIhB;EACAlN,KAAK,CAAE+/D,YAAY,CAACp5E,KAAb,GAAqBsN,YAArB,CAAmC,KAAK2I,WAAxC,CALS,CAMhBhZ,KAAK,CAAEO,CANS,CAOhBm/B,IAAI,CAAE,IAPU,CAQhBD,SAAS,CAAE,IARK,CAShB3jB,MAAM,CAAE,IATQ,CAAjB,EAaA,CAED,CAtCD,KAsCO,CAEN,MAAMwe,KAAK,CAAG35B,IAAI,CAACe,GAAL,CAAU,CAAV,CAAa24B,SAAS,CAACC,KAAvB,CAAd,CACA,MAAMkF,GAAG,CAAG7+B,IAAI,CAACc,GAAL,CAAUu7B,iBAAiB,CAACtqB,KAA5B,CAAqC2nB,SAAS,CAACC,KAAV,CAAkBD,SAAS,CAAC3nB,KAAjE,CAAZ,CAEA,IAAM,IAAInS,CAAC,CAAG+5B,KAAR,CAAe95B,CAAC,CAAGg/B,GAAG,CAAG,CAA/B,CAAkCj/B,CAAC,CAAGC,CAAtC,CAAyCD,CAAC,EAAI4V,IAA9C,CAAqD,CAEpD8lE,MAAM,CAAC71E,mBAAP,CAA4B42B,iBAA5B,CAA+Cz8B,CAA/C,EACA27E,IAAI,CAAC91E,mBAAL,CAA0B42B,iBAA1B,CAA6Cz8B,CAAC,CAAG,CAAjD,EAEA,MAAM87E,MAAM,CAAGnoF,MAAM,CAACorB,mBAAP,CAA4B28D,MAA5B,CAAoCC,IAApC,CAA0CE,QAA1C,CAAoDD,YAApD,CAAf,CAEA,GAAKE,MAAM,CAAGL,gBAAd,CAAiC,SAEjCI,QAAQ,CAAC/rE,YAAT,CAAuB,KAAK2I,WAA5B,EAA2C;EAE3C,MAAMsQ,QAAQ,CAAG8V,SAAS,CAACrgB,GAAV,CAAcF,MAAd,CAAqBtZ,UAArB,CAAiC62E,QAAjC,CAAjB,CAEA,GAAK9yD,QAAQ,CAAG8V,SAAS,CAAChZ,IAArB,EAA6BkD,QAAQ,CAAG8V,SAAS,CAAC/Y,GAAvD,CAA6D,SAE7DhwB,UAAU,CAACuJ,IAAX,CAAiB,CAEhB0pB,QAAQ,CAAEA,QAFM;EAIhB;EACAlN,KAAK,CAAE+/D,YAAY,CAACp5E,KAAb,GAAqBsN,YAArB,CAAmC,KAAK2I,WAAxC,CALS,CAMhBhZ,KAAK,CAAEO,CANS,CAOhBm/B,IAAI,CAAE,IAPU,CAQhBD,SAAS,CAAE,IARK,CAShB3jB,MAAM,CAAE,IATQ,CAAjB,EAaA,CAED,CAED,CAjFD,QAiFYW,QAAQ,CAACkjB,UAAd,CAA2B,CAEjCv8B,OAAO,CAAC8D,KAAR,CAAe,2FAAf,EAEA,CAED,CAED43B,kBAAkB,EAAG,CAEpB,MAAMriB,QAAQ,CAAG,KAAKA,QAAtB,CAEA,GAAKA,QAAQ,CAACmhB,gBAAd,CAAiC,CAEhC,MAAM3D,eAAe,CAAGxd,QAAQ,CAACwd,eAAjC,CACA,MAAMyE,IAAI,CAAG/wB,MAAM,CAAC+wB,IAAP,CAAazE,eAAb,CAAb,CAEA,GAAKyE,IAAI,CAACj+B,MAAL,CAAc,CAAnB,CAAuB,CAEtB,MAAM46B,cAAc,CAAGpB,eAAe,CAAEyE,IAAI,CAAE,CAAF,CAAN,CAAtC,CAEA,GAAKrD,cAAc,GAAK57B,SAAxB,CAAoC,CAEnC,KAAKs/B,qBAAL,CAA6B,EAA7B,CACA,KAAKC,qBAAL,CAA6B,EAA7B,CAEA,IAAM,IAAIp9B,CAAC,CAAG,CAAR,CAAWq9B,EAAE,CAAG5D,cAAc,CAAC56B,MAArC,CAA6CmB,CAAC,CAAGq9B,EAAjD,CAAqDr9B,CAAC,EAAtD,CAA4D,CAE3D,MAAM+J,IAAI,CAAG0vB,cAAc,CAAEz5B,CAAF,CAAd,CAAoB+J,IAApB,EAA4BuzB,MAAM,CAAEt9B,CAAF,CAA/C,CAEA,KAAKm9B,qBAAL,CAA2Bn/B,IAA3B,CAAiC,CAAjC,EACA,KAAKo/B,qBAAL,CAA4BrzB,IAA5B,EAAqC/J,CAArC,CAEA,CAED,CAED,CAED,CA3BD,KA2BO,CAEN,MAAMu9B,YAAY,CAAG1iB,QAAQ,CAAC0iB,YAA9B,CAEA,GAAKA,YAAY,GAAK1/B,SAAjB,EAA8B0/B,YAAY,CAAC1+B,MAAb,CAAsB,CAAzD,CAA6D,CAE5D2C,OAAO,CAAC8D,KAAR,CAAe,oGAAf,EAEA,CAED,CAED,CAtO0B,CA0O5B9S,IAAI,CAAC2S,SAAL,CAAeolB,MAAf,CAAwB,IAAxB,CAEA,MAAM93B,MAAM,cAAiB,IAAIzZ,OAAJ,EAA7B,CACA,MAAM0Z,IAAI,cAAiB,IAAI1Z,OAAJ,EAA3B,CAEA,MAAM2Z,YAAN,SAA2BH,IAAK,CAE/BgO,WAAW,CAAEqa,QAAF,CAAYkQ,QAAZ,CAAuB,CAEjC,MAAOlQ,QAAP,CAAiBkQ,QAAjB,EAEA,KAAKrtB,IAAL,CAAY,cAAZ,CAEA,CAEDu8E,oBAAoB,EAAG,CAEtB,MAAMp/D,QAAQ,CAAG,KAAKA,QAAtB,CAEA,GAAKA,QAAQ,CAACmhB,gBAAd,CAAiC;EAIhC,GAAKnhB,QAAQ,CAACzc,KAAT,GAAmB,IAAxB,CAA+B,CAE9B,MAAMg9B,iBAAiB,CAAGvgB,QAAQ,CAACud,UAAT,CAAoB5U,QAA9C,CACA,MAAM02D,aAAa,CAAG,EAAtB,CAEA,IAAM,IAAIv7E,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGw8B,iBAAiB,CAACtqB,KAAvC,CAA8CnS,CAAC,CAAGC,CAAlD,CAAqDD,CAAC,EAAI,CAA1D,CAA8D,CAE7DlM,MAAM,CAAC+R,mBAAP,CAA4B42B,iBAA5B,CAA+Cz8B,CAA/C,EACAjM,IAAI,CAAC8R,mBAAL,CAA0B42B,iBAA1B,CAA6Cz8B,CAAC,CAAG,CAAjD,EAEAu7E,aAAa,CAAEv7E,CAAF,CAAb,CAAuBA,CAAC,GAAK,CAAR,CAAc,CAAd,CAAkBu7E,aAAa,CAAEv7E,CAAC,CAAG,CAAN,CAApD,CACAu7E,aAAa,CAAEv7E,CAAC,CAAG,CAAN,CAAb,CAAyBu7E,aAAa,CAAEv7E,CAAF,CAAb,CAAqBlM,MAAM,CAACkR,UAAP,CAAmBjR,IAAnB,CAA9C,CAEA,CAEDmoB,QAAQ,CAACie,YAAT,CAAuB,cAAvB,CAAuC,IAAIt6C,sBAAJ,CAA4B07F,aAA5B,CAA2C,CAA3C,CAAvC,EAEA,CAjBD,KAiBO,CAEN14E,OAAO,CAACC,IAAR,CAAc,uGAAd,EAEA,CAED,CA3BD,QA2BYoZ,QAAQ,CAACkjB,UAAd,CAA2B,CAEjCv8B,OAAO,CAAC8D,KAAR,CAAe,gHAAf,EAEA,CAED,WAAA,CAEA,CAjD8B,CAqDhC3S,YAAY,CAACwS,SAAb,CAAuB6uE,cAAvB,CAAwC,IAAxC,CAEA,MAAMphF,QAAN,SAAuBJ,IAAK,CAE3BgO,WAAW,CAAEqa,QAAF,CAAYkQ,QAAZ,CAAuB,CAEjC,MAAOlQ,QAAP,CAAiBkQ,QAAjB,EAEA,KAAKrtB,IAAL,CAAY,UAAZ,CAEA,CAR0B,CAY5B9K,QAAQ,CAACuS,SAAT,CAAmB8uE,UAAnB,CAAgC,IAAhC,CAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAEA,MAAMphF,cAAN,SAA6BpV,QAAS,CAErC+iB,WAAW,CAAEiqB,UAAF,CAAe,CAEzB,QAEA,KAAK/sB,IAAL,CAAY,gBAAZ,CAEA,KAAK0yB,KAAL,CAAa,IAAIpyC,KAAJ,CAAW,QAAX,CAAb,CAEA,KAAKuzC,GAAL,CAAW,IAAX,CAEA,KAAKE,QAAL,CAAgB,IAAhB,CAEA,KAAK1X,IAAL,CAAY,CAAZ,CACA,KAAKyZ,eAAL,CAAuB,IAAvB,CAEA,KAAKzD,SAAL,CAAgBtF,UAAhB,EAEA,CAEDrpB,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKsjB,KAAL,CAAWhvB,IAAX,CAAiB0L,MAAM,CAACsjB,KAAxB,EAEA,KAAKmB,GAAL,CAAWzkB,MAAM,CAACykB,GAAlB,CAEA,KAAKE,QAAL,CAAgB3kB,MAAM,CAAC2kB,QAAvB,CAEA,KAAK1X,IAAL,CAAYjN,MAAM,CAACiN,IAAnB,CACA,KAAKyZ,eAAL,CAAuB1mB,MAAM,CAAC0mB,eAA9B,CAEA,WAAA,CAEA,CApCoC,CAwCtC3gC,cAAc,CAACsS,SAAf,CAAyBwoE,gBAAzB,CAA4C,IAA5C,CAEA,MAAM76E,cAAc,cAAiB,IAAI/X,OAAJ,EAArC,CACA,MAAMgY,IAAI,cAAiB,IAAIjY,GAAJ,EAA3B,CACA,MAAMkY,OAAO,cAAiB,IAAI1Y,MAAJ,EAA9B,CACA,MAAM2Y,WAAW,cAAiB,IAAIja,OAAJ,EAAlC,CAEA,MAAMka,MAAN,SAAqB1W,QAAS,CAE7BgkB,WAAW,CAAEqa,QAAQ,CAAG,IAAI57B,cAAJ,EAAb,CAAmC8rC,QAAQ,CAAG,IAAIl4B,cAAJ,EAA9C,CAAqE,CAE/E,QAEA,KAAK6K,IAAL,CAAY,QAAZ,CAEA,KAAKmd,QAAL,CAAgBA,QAAhB,CACA,KAAKkQ,QAAL,CAAgBA,QAAhB,CAEA,KAAKmS,kBAAL,GAEA,CAED97B,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKie,QAAL,CAAgBje,MAAM,CAACie,QAAvB,CACA,KAAKlQ,QAAL,CAAgB/N,MAAM,CAAC+N,QAAvB,CAEA,WAAA,CAEA,CAEDmO,OAAO,CAAEwU,SAAF,CAAa/oC,UAAb,CAA0B,CAEhC,MAAMomB,QAAQ,CAAG,KAAKA,QAAtB,CACA,MAAMzD,WAAW,CAAG,KAAKA,WAAzB,CACA,MAAM6uD,SAAS,CAAGzoC,SAAS,CAACmgB,MAAV,CAAiBzqD,MAAjB,CAAwB+yE,SAA1C,CACA,MAAMxtC,SAAS,CAAG5d,QAAQ,CAAC4d,SAA3B,CAEA;EAEA,GAAK5d,QAAQ,CAAC2d,cAAT,GAA4B,IAAjC,CAAwC3d,QAAQ,CAACye,qBAAT,GAExCtmC,OAAO,CAACoO,IAAR,CAAcyZ,QAAQ,CAAC2d,cAAvB,EACAxlC,OAAO,CAACyb,YAAR,CAAsB2I,WAAtB,EACApkB,OAAO,CAACslB,MAAR,EAAkB2tD,SAAlB,CAEA,GAAKzoC,SAAS,CAACrgB,GAAV,CAAc7B,gBAAd,CAAgCtoB,OAAhC,IAA8C,KAAnD,CAA2D,OAE3D;EAEAF,cAAc,CAACsO,IAAf,CAAqBgW,WAArB,EAAmChP,MAAnC,GACArV,IAAI,CAACqO,IAAL,CAAWo8B,SAAS,CAACrgB,GAArB,EAA2B1O,YAA3B,CAAyC3b,cAAzC,EAEA,MAAMqnF,cAAc,CAAGlU,SAAS,EAAK,CAAE,KAAK18D,KAAL,CAAWtJ,CAAX,CAAe,KAAKsJ,KAAL,CAAWrJ,CAA1B,CAA8B,KAAKqJ,KAAL,CAAW+E,CAA3C,EAAiD,CAAtD,CAAhC,CACA,MAAM8rE,gBAAgB,CAAGD,cAAc,CAAGA,cAA1C,CAEA,GAAKt/D,QAAQ,CAACmhB,gBAAd,CAAiC,CAEhC,MAAM59B,KAAK,CAAGyc,QAAQ,CAACzc,KAAvB,CACA,MAAMg6B,UAAU,CAAGvd,QAAQ,CAACud,UAA5B,CACA,MAAMgD,iBAAiB,CAAGhD,UAAU,CAAC5U,QAArC,CAEA,GAAKplB,KAAK,GAAK,IAAf,CAAsB,CAErB,MAAMs6B,KAAK,CAAG35B,IAAI,CAACe,GAAL,CAAU,CAAV,CAAa24B,SAAS,CAACC,KAAvB,CAAd,CACA,MAAMkF,GAAG,CAAG7+B,IAAI,CAACc,GAAL,CAAUzB,KAAK,CAAC0S,KAAhB,CAAyB2nB,SAAS,CAACC,KAAV,CAAkBD,SAAS,CAAC3nB,KAArD,CAAZ,CAEA,IAAM,IAAInS,CAAC,CAAG+5B,KAAR,CAAe3nB,EAAE,CAAG6sB,GAA1B,CAA+Bj/B,CAAC,CAAGoS,EAAnC,CAAuCpS,CAAC,EAAxC,CAA8C,CAE7C,MAAMkD,CAAC,CAAGzD,KAAK,CAACsG,IAAN,CAAY/F,CAAZ,CAAV,CAEA1L,WAAW,CAACuR,mBAAZ,CAAiC42B,iBAAjC,CAAoDv5B,CAApD,EAEA1O,SAAS,CAAEF,WAAF,CAAe4O,CAAf,CAAkBu4E,gBAAlB,CAAoChjE,WAApC,CAAiDomB,SAAjD,CAA4D/oC,UAA5D,CAAwE,IAAxE,CAAT,CAEA,CAED,CAfD,KAeO,CAEN,MAAMikC,KAAK,CAAG35B,IAAI,CAACe,GAAL,CAAU,CAAV,CAAa24B,SAAS,CAACC,KAAvB,CAAd,CACA,MAAMkF,GAAG,CAAG7+B,IAAI,CAACc,GAAL,CAAUu7B,iBAAiB,CAACtqB,KAA5B,CAAqC2nB,SAAS,CAACC,KAAV,CAAkBD,SAAS,CAAC3nB,KAAjE,CAAZ,CAEA,IAAM,IAAInS,CAAC,CAAG+5B,KAAR,CAAe95B,CAAC,CAAGg/B,GAAzB,CAA8Bj/B,CAAC,CAAGC,CAAlC,CAAqCD,CAAC,EAAtC,CAA4C,CAE3C1L,WAAW,CAACuR,mBAAZ,CAAiC42B,iBAAjC,CAAoDz8B,CAApD,EAEAxL,SAAS,CAAEF,WAAF,CAAe0L,CAAf,CAAkBy7E,gBAAlB,CAAoChjE,WAApC,CAAiDomB,SAAjD,CAA4D/oC,UAA5D,CAAwE,IAAxE,CAAT,CAEA,CAED,CAED,CApCD,KAoCO,CAEN+M,OAAO,CAAC8D,KAAR,CAAe,6FAAf,EAEA,CAED,CAED43B,kBAAkB,EAAG,CAEpB,MAAMriB,QAAQ,CAAG,KAAKA,QAAtB,CAEA,GAAKA,QAAQ,CAACmhB,gBAAd,CAAiC,CAEhC,MAAM3D,eAAe,CAAGxd,QAAQ,CAACwd,eAAjC,CACA,MAAMyE,IAAI,CAAG/wB,MAAM,CAAC+wB,IAAP,CAAazE,eAAb,CAAb,CAEA,GAAKyE,IAAI,CAACj+B,MAAL,CAAc,CAAnB,CAAuB,CAEtB,MAAM46B,cAAc,CAAGpB,eAAe,CAAEyE,IAAI,CAAE,CAAF,CAAN,CAAtC,CAEA,GAAKrD,cAAc,GAAK57B,SAAxB,CAAoC,CAEnC,KAAKs/B,qBAAL,CAA6B,EAA7B,CACA,KAAKC,qBAAL,CAA6B,EAA7B,CAEA,IAAM,IAAIp9B,CAAC,CAAG,CAAR,CAAWq9B,EAAE,CAAG5D,cAAc,CAAC56B,MAArC,CAA6CmB,CAAC,CAAGq9B,EAAjD,CAAqDr9B,CAAC,EAAtD,CAA4D,CAE3D,MAAM+J,IAAI,CAAG0vB,cAAc,CAAEz5B,CAAF,CAAd,CAAoB+J,IAApB,EAA4BuzB,MAAM,CAAEt9B,CAAF,CAA/C,CAEA,KAAKm9B,qBAAL,CAA2Bn/B,IAA3B,CAAiC,CAAjC,EACA,KAAKo/B,qBAAL,CAA4BrzB,IAA5B,EAAqC/J,CAArC,CAEA,CAED,CAED,CAED,CA3BD,KA2BO,CAEN,MAAMu9B,YAAY,CAAG1iB,QAAQ,CAAC0iB,YAA9B,CAEA,GAAKA,YAAY,GAAK1/B,SAAjB,EAA8B0/B,YAAY,CAAC1+B,MAAb,CAAsB,CAAzD,CAA6D,CAE5D2C,OAAO,CAAC8D,KAAR,CAAe,sGAAf,EAEA,CAED,CAED,CA1I4B,CA8I9BpS,MAAM,CAACiS,SAAP,CAAiBqlB,QAAjB,CAA4B,IAA5B,CAEA,SAASr3B,SAAT,CAAoBqnB,KAApB,CAA2Bpc,KAA3B,CAAkCg8E,gBAAlC,CAAoDhjE,WAApD,CAAiEomB,SAAjE,CAA4E/oC,UAA5E,CAAwFylB,MAAxF,CAAiG,CAEhG,MAAMwgE,kBAAkB,CAAG3nF,IAAI,CAAC0qB,iBAAL,CAAwBjD,KAAxB,CAA3B,CAEA,GAAKkgE,kBAAkB,CAAGN,gBAA1B,CAA6C,CAE5C,MAAMO,cAAc,CAAG,IAAI3hG,OAAJ,EAAvB,CAEA+Z,IAAI,CAACwqB,mBAAL,CAA0B/C,KAA1B,CAAiCmgE,cAAjC,EACAA,cAAc,CAAClsE,YAAf,CAA6B2I,WAA7B,EAEA,MAAMsQ,QAAQ,CAAG8V,SAAS,CAACrgB,GAAV,CAAcF,MAAd,CAAqBtZ,UAArB,CAAiCg3E,cAAjC,CAAjB,CAEA,GAAKjzD,QAAQ,CAAG8V,SAAS,CAAChZ,IAArB,EAA6BkD,QAAQ,CAAG8V,SAAS,CAAC/Y,GAAvD,CAA6D,OAE7DhwB,UAAU,CAACuJ,IAAX,CAAiB,CAEhB0pB,QAAQ,CAAEA,QAFM,CAGhBkzD,aAAa,CAAE77E,IAAI,CAACsE,IAAL,CAAWq3E,kBAAX,CAHC,CAIhBlgE,KAAK,CAAEmgE,cAJS,CAKhBv8E,KAAK,CAAEA,KALS,CAMhB0/B,IAAI,CAAE,IANU,CAOhB5jB,MAAM,CAAEA,MAPQ,CAAjB,EAWA,CAED,CAED,MAAM9mB,YAAN,SAA2B3a,OAAQ,CAElC+nB,WAAW,CAAEq6E,KAAF,CAASvvE,OAAT,CAAkBE,KAAlB,CAAyBC,KAAzB,CAAgCC,SAAhC,CAA2CC,SAA3C,CAAsDC,MAAtD,CAA8DlO,IAA9D,CAAoEmO,UAApE,CAAiF,CAE3F,MAAOgvE,KAAP,CAAcvvE,OAAd,CAAuBE,KAAvB,CAA8BC,KAA9B,CAAqCC,SAArC,CAAgDC,SAAhD,CAA2DC,MAA3D,CAAmElO,IAAnE,CAAyEmO,UAAzE,EAEA,KAAKD,MAAL,CAAcA,MAAM,GAAK/N,SAAX,CAAuB+N,MAAvB,CAAgCn5B,SAA9C,CAEA,KAAKk5B,SAAL,CAAiBA,SAAS,GAAK9N,SAAd,CAA0B8N,SAA1B,CAAsCl6B,YAAvD,CACA,KAAKi6B,SAAL,CAAiBA,SAAS,GAAK7N,SAAd,CAA0B6N,SAA1B,CAAsCj6B,YAAvD,CAEA,KAAK46B,eAAL,CAAuB,KAAvB,CAEA,MAAMiyB,KAAK,CAAG,IAAd,CAEA,SAASw8C,WAAT,EAAuB,CAEtBx8C,KAAK,CAACrwB,WAAN,CAAoB,IAApB,CACA4sE,KAAK,CAACE,yBAAN,CAAiCD,WAAjC,EAEA,CAED,GAAK,8BAA+BD,KAApC,CAA4C,CAE3CA,KAAK,CAACE,yBAAN,CAAiCD,WAAjC,EAEA,CAED,CAED35E,KAAK,EAAG,CAEP,gBAAgBX,WAAT,CAAsB,KAAKkK,KAA3B,EAAmCtJ,IAAnC,CAAyC,IAAzC,CAAP,CAEA,CAED+R,MAAM,EAAG,CAER,MAAM0nE,KAAK,CAAG,KAAKnwE,KAAnB,CACA,MAAMswE,qBAAqB,EAAG,8BAA+BH,KAAlC,CAA3B,CAEA,GAAKG,qBAAqB,GAAK,KAA1B,EAAmCH,KAAK,CAACI,UAAN,EAAoBJ,KAAK,CAACK,iBAAlE,CAAsF,CAErF,KAAKjtE,WAAL,CAAmB,IAAnB,CAEA,CAED,CA/CiC,CAmDnC7a,YAAY,CAAC+R,SAAb,CAAuBo5D,cAAvB,CAAwC,IAAxC,CAEA,MAAMlrE,iBAAN,SAAgC5a,OAAQ,CAEvC+nB,WAAW,CAAEyL,OAAF,CAAWxL,KAAX,CAAkBC,MAAlB,CAA0BkL,MAA1B,CAAkClO,IAAlC,CAAwC4N,OAAxC,CAAiDE,KAAjD,CAAwDC,KAAxD,CAA+DC,SAA/D,CAA0EC,SAA1E,CAAqFE,UAArF,CAAiGC,QAAjG,CAA4G,CAEtH,MAAO,IAAP,CAAaR,OAAb,CAAsBE,KAAtB,CAA6BC,KAA7B,CAAoCC,SAApC,CAA+CC,SAA/C,CAA0DC,MAA1D,CAAkElO,IAAlE,CAAwEmO,UAAxE,CAAoFC,QAApF,EAEA,KAAKpB,KAAL,CAAa,CAAEjK,KAAK,CAAEA,KAAT,CAAgBC,MAAM,CAAEA,MAAxB,CAAb,CACA,KAAKuL,OAAL,CAAeA,OAAf,CAEA;EACA;EAEA,KAAKM,KAAL,CAAa,KAAb,CAEA;EACA;EAEA,KAAKF,eAAL,CAAuB,KAAvB,CAEA,CAnBsC,CAuBxChZ,iBAAiB,CAAC8R,SAAlB,CAA4B27D,mBAA5B,CAAkD,IAAlD,CAEA,MAAMxtE,aAAN,SAA4B7a,OAAQ,CAEnC+nB,WAAW,CAAEsK,MAAF,CAAUQ,OAAV,CAAmBE,KAAnB,CAA0BC,KAA1B,CAAiCC,SAAjC,CAA4CC,SAA5C,CAAuDC,MAAvD,CAA+DlO,IAA/D,CAAqEmO,UAArE,CAAkF,CAE5F,MAAOf,MAAP,CAAeQ,OAAf,CAAwBE,KAAxB,CAA+BC,KAA/B,CAAsCC,SAAtC,CAAiDC,SAAjD,CAA4DC,MAA5D,CAAoElO,IAApE,CAA0EmO,UAA1E,EAEA,KAAKoC,WAAL,CAAmB,IAAnB,CAEA,CARkC,CAYpC3a,aAAa,CAAC6R,SAAd,CAAwBg2E,eAAxB,CAA0C,IAA1C,CAEA,MAAM5nF,YAAN,SAA2B9a,OAAQ,CAElC+nB,WAAW,CAAEC,KAAF,CAASC,MAAT,CAAiBhD,IAAjB,CAAuB4N,OAAvB,CAAgCE,KAAhC,CAAuCC,KAAvC,CAA8CC,SAA9C,CAAyDC,SAAzD,CAAoEE,UAApE,CAAgFD,MAAhF,CAAyF,CAEnGA,MAAM,CAAGA,MAAM,GAAK/N,SAAX,CAAuB+N,MAAvB,CAAgC/4B,WAAzC,CAEA,GAAK+4B,MAAM,GAAK/4B,WAAX,EAA0B+4B,MAAM,GAAK94B,kBAA1C,CAA+D,CAE9D,UAAUmuB,KAAJ,CAAW,kFAAX,CAAN,CAEA,CAED,GAAKvD,IAAI,GAAKG,SAAT,EAAsB+N,MAAM,GAAK/4B,WAAtC,CAAoD6qB,IAAI,CAAG3rB,iBAAP,CACpD,GAAK2rB,IAAI,GAAKG,SAAT,EAAsB+N,MAAM,GAAK94B,kBAAtC,CAA2D4qB,IAAI,CAAGnrB,kBAAP,CAE3D,MAAO,IAAP,CAAa+4B,OAAb,CAAsBE,KAAtB,CAA6BC,KAA7B,CAAoCC,SAApC,CAA+CC,SAA/C,CAA0DC,MAA1D,CAAkElO,IAAlE,CAAwEmO,UAAxE,EAEA,KAAKnB,KAAL,CAAa,CAAEjK,KAAK,CAAEA,KAAT,CAAgBC,MAAM,CAAEA,MAAxB,CAAb,CAEA,KAAKgL,SAAL,CAAiBA,SAAS,GAAK7N,SAAd,CAA0B6N,SAA1B,CAAsCp6B,aAAvD,CACA,KAAKq6B,SAAL,CAAiBA,SAAS,GAAK9N,SAAd,CAA0B8N,SAA1B,CAAsCr6B,aAAvD,CAEA,KAAKi7B,KAAL,CAAa,KAAb,CACA,KAAKF,eAAL,CAAuB,KAAvB,CAEA,CAzBiC,CA8BnC9Y,YAAY,CAAC4R,SAAb,CAAuB07D,cAAvB,CAAwC,IAAxC,CAsFA,MAAMua,gBAAN,SAA+Bn8F,cAAe,CAE7CuhB,WAAW,CAAE66E,SAAS,CAAG,CAAd,CAAiBC,YAAY,CAAG,CAAhC,CAAmC56E,MAAM,CAAG,CAA5C,CAA+C66E,cAAc,CAAG,CAAhE,CAAmEn9C,cAAc,CAAG,CAApF,CAAuFo9C,SAAS,CAAG,KAAnG,CAA0GC,UAAU,CAAG,CAAvH,CAA0HC,WAAW,CAAG38E,IAAI,CAACC,EAAL,CAAU,CAAlJ,CAAsJ,CAEhK,QACA,KAAKtB,IAAL,CAAY,kBAAZ,CAEA,KAAK+sB,UAAL,CAAkB,CACjB4wD,SAAS,CAAEA,SADM,CAEjBC,YAAY,CAAEA,YAFG,CAGjB56E,MAAM,CAAEA,MAHS,CAIjB66E,cAAc,CAAEA,cAJC,CAKjBn9C,cAAc,CAAEA,cALC,CAMjBo9C,SAAS,CAAEA,SANM,CAOjBC,UAAU,CAAEA,UAPK,CAQjBC,WAAW,CAAEA,WARI,CAAlB,CAWA,MAAMp9C,KAAK,CAAG,IAAd,CAEAi9C,cAAc,CAAGx8E,IAAI,CAACsB,KAAL,CAAYk7E,cAAZ,CAAjB,CACAn9C,cAAc,CAAGr/B,IAAI,CAACsB,KAAL,CAAY+9B,cAAZ,CAAjB,CAEA;EAEA,MAAMvE,OAAO,CAAG,EAAhB,CACA,MAAM0E,QAAQ,CAAG,EAAjB,CACA,MAAMxE,OAAO,CAAG,EAAhB,CACA,MAAMC,GAAG,CAAG,EAAZ,CAEA;EAEA,IAAI57B,KAAK,CAAG,CAAZ,CACA,MAAMu9E,UAAU,CAAG,EAAnB,CACA,MAAMtrB,UAAU,CAAG3vD,MAAM,CAAG,CAA5B,CACA,IAAI+9B,UAAU,CAAG,CAAjB,CAEA;EAEAm9C,aAAa,GAEb,GAAKJ,SAAS,GAAK,KAAnB,CAA2B,CAE1B,GAAKH,SAAS,CAAG,CAAjB,CAAqBQ,WAAW,CAAE,IAAF,CAAX,CACrB,GAAKP,YAAY,CAAG,CAApB,CAAwBO,WAAW,CAAE,KAAF,CAAX,CAExB,CAED;EAEA,KAAKjjD,QAAL,CAAeiB,OAAf,EACA,KAAKf,YAAL,CAAmB,UAAnB,CAA+B,IAAIt6C,sBAAJ,CAA4B+/C,QAA5B,CAAsC,CAAtC,CAA/B,EACA,KAAKzF,YAAL,CAAmB,QAAnB,CAA6B,IAAIt6C,sBAAJ,CAA4Bu7C,OAA5B,CAAqC,CAArC,CAA7B,EACA,KAAKjB,YAAL,CAAmB,IAAnB,CAAyB,IAAIt6C,sBAAJ,CAA4Bw7C,GAA5B,CAAiC,CAAjC,CAAzB,EAEA,SAAS4hD,aAAT,EAAyB,CAExB,MAAM1jE,MAAM,CAAG,IAAIl/B,OAAJ,EAAf,CACA,MAAM26E,MAAM,CAAG,IAAI36E,OAAJ,EAAf,CAEA,IAAIumD,UAAU,CAAG,CAAjB,CAEA;EACA,MAAMu8C,KAAK,CAAG,CAAER,YAAY,CAAGD,SAAjB,EAA+B36E,MAA7C,CAEA;EAEA,IAAM,IAAIR,CAAC,CAAG,CAAd,CAAiBA,CAAC,EAAIk+B,cAAtB,CAAsCl+B,CAAC,EAAvC,CAA6C,CAE5C,MAAM67E,QAAQ,CAAG,EAAjB,CAEA,MAAM16E,CAAC,CAAGnB,CAAC,CAAGk+B,cAAd,CAEA;EAEA,MAAM9lB,MAAM,CAAGjX,CAAC,EAAKi6E,YAAY,CAAGD,SAApB,CAAD,CAAmCA,SAAlD,CAEA,IAAM,IAAIp7E,CAAC,CAAG,CAAd,CAAiBA,CAAC,EAAIs7E,cAAtB,CAAsCt7E,CAAC,EAAvC,CAA6C,CAE5C,MAAM+Y,CAAC,CAAG/Y,CAAC,CAAGs7E,cAAd,CAEA,MAAM9xE,KAAK,CAAGuP,CAAC,CAAG0iE,WAAJ,CAAkBD,UAAhC,CAEA,MAAMO,QAAQ,CAAGj9E,IAAI,CAACiG,GAAL,CAAUyE,KAAV,CAAjB,CACA,MAAMwyE,QAAQ,CAAGl9E,IAAI,CAACgG,GAAL,CAAU0E,KAAV,CAAjB,CAEA;EAEAkqD,MAAM,CAAC1zD,CAAP,CAAWqY,MAAM,CAAG0jE,QAApB,CACAroB,MAAM,CAACzzD,CAAP,CAAW,CAAEmB,CAAF,CAAMX,MAAN,CAAe2vD,UAA1B,CACAsD,MAAM,CAACrlD,CAAP,CAAWgK,MAAM,CAAG2jE,QAApB,CACA19C,QAAQ,CAACvgC,IAAT,CAAe21D,MAAM,CAAC1zD,CAAtB,CAAyB0zD,MAAM,CAACzzD,CAAhC,CAAmCyzD,MAAM,CAACrlD,CAA1C,EAEA;EAEA4J,MAAM,CAACvX,GAAP,CAAYq7E,QAAZ,CAAsBF,KAAtB,CAA6BG,QAA7B,EAAwCz4E,SAAxC,GACAu2B,OAAO,CAAC/7B,IAAR,CAAcka,MAAM,CAACjY,CAArB,CAAwBiY,MAAM,CAAChY,CAA/B,CAAkCgY,MAAM,CAAC5J,CAAzC,EAEA;EAEA0rB,GAAG,CAACh8B,IAAJ,CAAUgb,CAAV,CAAa,EAAI3X,CAAjB,EAEA;EAEA06E,QAAQ,CAAC/9E,IAAT,CAAeI,KAAK,EAApB,EAEA,CAED;EAEAu9E,UAAU,CAAC39E,IAAX,CAAiB+9E,QAAjB,EAEA,CAED;EAEA,IAAM,IAAI97E,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGs7E,cAArB,CAAqCt7E,CAAC,EAAtC,CAA4C,CAE3C,IAAM,IAAIC,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGk+B,cAArB,CAAqCl+B,CAAC,EAAtC,CAA4C;EAI3C,MAAM2B,CAAC,CAAG85E,UAAU,CAAEz7E,CAAF,CAAV,CAAiBD,CAAjB,CAAV,CACA,MAAM6B,CAAC,CAAG65E,UAAU,CAAEz7E,CAAC,CAAG,CAAN,CAAV,CAAqBD,CAArB,CAAV,CACA,MAAM6E,CAAC,CAAG62E,UAAU,CAAEz7E,CAAC,CAAG,CAAN,CAAV,CAAqBD,CAAC,CAAG,CAAzB,CAAV,CACA,MAAM+H,CAAC,CAAG2zE,UAAU,CAAEz7E,CAAF,CAAV,CAAiBD,CAAC,CAAG,CAArB,CAAV,CAEA;EAEA45B,OAAO,CAAC77B,IAAR,CAAc6D,CAAd,CAAiBC,CAAjB,CAAoBkG,CAApB,EACA6xB,OAAO,CAAC77B,IAAR,CAAc8D,CAAd,CAAiBgD,CAAjB,CAAoBkD,CAApB,EAEA;EAEAu3B,UAAU,EAAI,CAAd,CAEA,CAED,CAED;EAEAjB,KAAK,CAACrF,QAAN,CAAgBwF,UAAhB,CAA4Bc,UAA5B,CAAwC,CAAxC,EAEA;EAEAd,UAAU,EAAIc,UAAd,CAEA,CAED,SAASs8C,WAAT,CAAsBv3D,GAAtB,CAA4B;EAG3B,MAAM43D,gBAAgB,CAAG99E,KAAzB,CAEA,MAAM4P,EAAE,CAAG,IAAI51B,OAAJ,EAAX,CACA,MAAMu7E,MAAM,CAAG,IAAI36E,OAAJ,EAAf,CAEA,IAAIumD,UAAU,CAAG,CAAjB,CAEA,MAAMjnB,MAAM,CAAKgM,GAAG,GAAK,IAAV,CAAmB+2D,SAAnB,CAA+BC,YAA9C,CACA,MAAMjmF,IAAI,CAAKivB,GAAG,GAAK,IAAV,CAAmB,CAAnB,CAAuB,CAAE,CAAtC,CAEA;EACA;EACA;EAEA,IAAM,IAAIrkB,CAAC,CAAG,CAAd,CAAiBA,CAAC,EAAIs7E,cAAtB,CAAsCt7E,CAAC,EAAvC,CAA6C;EAI5Cs+B,QAAQ,CAACvgC,IAAT,CAAe,CAAf,CAAkBqyD,UAAU,CAAGh7D,IAA/B,CAAqC,CAArC,EAEA;EAEA0kC,OAAO,CAAC/7B,IAAR,CAAc,CAAd,CAAiB3I,IAAjB,CAAuB,CAAvB,EAEA;EAEA2kC,GAAG,CAACh8B,IAAJ,CAAU,GAAV,CAAe,GAAf,EAEA;EAEAI,KAAK,GAEL,CAED;EACA,MAAM+9E,cAAc,CAAG/9E,KAAvB,CAEA;EAEA,IAAM,IAAI6B,CAAC,CAAG,CAAd,CAAiBA,CAAC,EAAIs7E,cAAtB,CAAsCt7E,CAAC,EAAvC,CAA6C,CAE5C,MAAM+Y,CAAC,CAAG/Y,CAAC,CAAGs7E,cAAd,CACA,MAAM9xE,KAAK,CAAGuP,CAAC,CAAG0iE,WAAJ,CAAkBD,UAAhC,CAEA,MAAMQ,QAAQ,CAAGl9E,IAAI,CAACgG,GAAL,CAAU0E,KAAV,CAAjB,CACA,MAAMuyE,QAAQ,CAAGj9E,IAAI,CAACiG,GAAL,CAAUyE,KAAV,CAAjB,CAEA;EAEAkqD,MAAM,CAAC1zD,CAAP,CAAWqY,MAAM,CAAG0jE,QAApB,CACAroB,MAAM,CAACzzD,CAAP,CAAWmwD,UAAU,CAAGh7D,IAAxB,CACAs+D,MAAM,CAACrlD,CAAP,CAAWgK,MAAM,CAAG2jE,QAApB,CACA19C,QAAQ,CAACvgC,IAAT,CAAe21D,MAAM,CAAC1zD,CAAtB,CAAyB0zD,MAAM,CAACzzD,CAAhC,CAAmCyzD,MAAM,CAACrlD,CAA1C,EAEA;EAEAyrB,OAAO,CAAC/7B,IAAR,CAAc,CAAd,CAAiB3I,IAAjB,CAAuB,CAAvB,EAEA;EAEA2Y,EAAE,CAAC/N,CAAH,CAASg8E,QAAQ,CAAG,GAAb,CAAqB,GAA5B,CACAjuE,EAAE,CAAC9N,CAAH,CAAS87E,QAAQ,CAAG,GAAX,CAAiB3mF,IAAnB,CAA4B,GAAnC,CACA2kC,GAAG,CAACh8B,IAAJ,CAAUgQ,EAAE,CAAC/N,CAAb,CAAgB+N,EAAE,CAAC9N,CAAnB,EAEA;EAEA9B,KAAK,GAEL,CAED;EAEA,IAAM,IAAI6B,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGs7E,cAArB,CAAqCt7E,CAAC,EAAtC,CAA4C,CAE3C,MAAM6E,CAAC,CAAGo3E,gBAAgB,CAAGj8E,CAA7B,CACA,MAAMtB,CAAC,CAAGw9E,cAAc,CAAGl8E,CAA3B,CAEA,GAAKqkB,GAAG,GAAK,IAAb,CAAoB;EAInBuV,OAAO,CAAC77B,IAAR,CAAcW,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBmG,CAAxB,EAEA,CAND,KAMO;EAIN+0B,OAAO,CAAC77B,IAAR,CAAcW,CAAC,CAAG,CAAlB,CAAqBA,CAArB,CAAwBmG,CAAxB,EAEA,CAEDy6B,UAAU,EAAI,CAAd,CAEA,CAED;EAEAjB,KAAK,CAACrF,QAAN,CAAgBwF,UAAhB,CAA4Bc,UAA5B,CAAwCjb,GAAG,GAAK,IAAR,CAAe,CAAf,CAAmB,CAA3D,EAEA;EAEAma,UAAU,EAAIc,UAAd,CAEA,CAED,CAEc,OAARC,QAAQ,CAAEnxB,IAAF,CAAS,CAEvB,WAAW+sE,gBAAJ,CAAsB/sE,IAAI,CAACgtE,SAA3B,CAAsChtE,IAAI,CAACitE,YAA3C,CAAyDjtE,IAAI,CAAC3N,MAA9D,CAAsE2N,IAAI,CAACktE,cAA3E,CAA2FltE,IAAI,CAAC+vB,cAAhG,CAAgH/vB,IAAI,CAACmtE,SAArH,CAAgIntE,IAAI,CAACotE,UAArI,CAAiJptE,IAAI,CAACqtE,WAAtJ,CAAP,CAEA,CAxQ4C,CA4Q9C,MAAMU,YAAN,SAA2BhB,gBAAiB,CAE3C56E,WAAW,CAAE8X,MAAM,CAAG,CAAX,CAAc5X,MAAM,CAAG,CAAvB,CAA0B66E,cAAc,CAAG,CAA3C,CAA8Cn9C,cAAc,CAAG,CAA/D,CAAkEo9C,SAAS,CAAG,KAA9E,CAAqFC,UAAU,CAAG,CAAlG,CAAqGC,WAAW,CAAG38E,IAAI,CAACC,EAAL,CAAU,CAA7H,CAAiI,CAE3I,MAAO,CAAP,CAAUsZ,MAAV,CAAkB5X,MAAlB,CAA0B66E,cAA1B,CAA0Cn9C,cAA1C,CAA0Do9C,SAA1D,CAAqEC,UAArE,CAAiFC,WAAjF,EAEA,KAAKh+E,IAAL,CAAY,cAAZ,CAEA,KAAK+sB,UAAL,CAAkB,CACjBnS,MAAM,CAAEA,MADS,CAEjB5X,MAAM,CAAEA,MAFS,CAGjB66E,cAAc,CAAEA,cAHC,CAIjBn9C,cAAc,CAAEA,cAJC,CAKjBo9C,SAAS,CAAEA,SALM,CAMjBC,UAAU,CAAEA,UANK,CAOjBC,WAAW,CAAEA,WAPI,CAAlB,CAUA,CAEc,OAARl8C,QAAQ,CAAEnxB,IAAF,CAAS,CAEvB,WAAW+tE,YAAJ,CAAkB/tE,IAAI,CAACiK,MAAvB,CAA+BjK,IAAI,CAAC3N,MAApC,CAA4C2N,IAAI,CAACktE,cAAjD,CAAiEltE,IAAI,CAAC+vB,cAAtE,CAAsF/vB,IAAI,CAACmtE,SAA3F,CAAsGntE,IAAI,CAACotE,UAA3G,CAAuHptE,IAAI,CAACqtE,WAA5H,CAAP,CAEA,CAxB0C,CAyYhC,IAAI1iG,OAAJ,GACE,IAAIA,OAAJ,GACE,IAAIA,OAAJ,GACE,IAAIuE,QAAJ,GAmIlB;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,IAEA,MAAM6a,KAAM,CAEXoI,WAAW,EAAG,CAEb,KAAK9C,IAAL,CAAY,OAAZ,CAEA,KAAK2+E,kBAAL,CAA0B,GAA1B,CAEA,CAED;EACA;EAEAC,QAAQ,yBAA4B,CAEnC96E,OAAO,CAACC,IAAR,CAAc,2CAAd,EACA,WAAA,CAEA,CAED;EACA;EAEA86E,UAAU,CAAEvjE,CAAF,CAAKwjE,cAAL,CAAsB,CAE/B,MAAMr8E,CAAC,CAAG,KAAKs8E,cAAL,CAAqBzjE,CAArB,CAAV,CACA,YAAYsjE,QAAL,CAAen8E,CAAf,CAAkBq8E,cAAlB,CAAP,CAEA,CAED;EAEAE,SAAS,CAAEC,SAAS,CAAG,CAAd,CAAkB,CAE1B,MAAMhjE,MAAM,CAAG,EAAf,CAEA,IAAM,IAAI3R,CAAC,CAAG,CAAd,CAAiBA,CAAC,EAAI20E,SAAtB,CAAiC30E,CAAC,EAAlC,CAAwC,CAEvC2R,MAAM,CAAC3b,IAAP,CAAa,KAAKs+E,QAAL,CAAet0E,CAAC,CAAG20E,SAAnB,CAAb,EAEA,CAED,OAAOhjE,MAAP,CAEA,CAED;EAEAijE,eAAe,CAAED,SAAS,CAAG,CAAd,CAAkB,CAEhC,MAAMhjE,MAAM,CAAG,EAAf,CAEA,IAAM,IAAI3R,CAAC,CAAG,CAAd,CAAiBA,CAAC,EAAI20E,SAAtB,CAAiC30E,CAAC,EAAlC,CAAwC,CAEvC2R,MAAM,CAAC3b,IAAP,CAAa,KAAKu+E,UAAL,CAAiBv0E,CAAC,CAAG20E,SAArB,CAAb,EAEA,CAED,OAAOhjE,MAAP,CAEA,CAED;EAEAkjE,SAAS,EAAG,CAEX,MAAMC,OAAO,CAAG,KAAKC,UAAL,EAAhB,CACA,OAAOD,OAAO,CAAEA,OAAO,CAACj+E,MAAR,CAAiB,CAAnB,CAAd,CAEA,CAED;EAEAk+E,UAAU,CAAEJ,SAAS,CAAG,KAAKN,kBAAnB,CAAwC,CAEjD,GAAK,KAAKW,eAAL,EACF,KAAKA,eAAL,CAAqBn+E,MAArB,GAAgC89E,SAAS,CAAG,CAD1C,EAEJ,CAAE,KAAK1uE,WAFR,CAEsB,CAErB,YAAY+uE,eAAZ,CAEA,CAED,KAAK/uE,WAAL,CAAmB,KAAnB,CAEA,MAAMkd,KAAK,CAAG,EAAd,CACA,IAAI8xD,OAAJ,CAAaC,IAAI,CAAG,KAAKZ,QAAL,CAAe,CAAf,CAApB,CACA,IAAI58B,GAAG,CAAG,CAAV,CAEAv0B,KAAK,CAACntB,IAAN,CAAY,CAAZ,EAEA,IAAM,IAAIyW,CAAC,CAAG,CAAd,CAAiBA,CAAC,EAAIkoE,SAAtB,CAAiCloE,CAAC,EAAlC,CAAwC,CAEvCwoE,OAAO,CAAG,KAAKX,QAAL,CAAe7nE,CAAC,CAAGkoE,SAAnB,CAAV,CACAj9B,GAAG,EAAIu9B,OAAO,CAACt5E,UAAR,CAAoBu5E,IAApB,CAAP,CACA/xD,KAAK,CAACntB,IAAN,CAAY0hD,GAAZ,EACAw9B,IAAI,CAAGD,OAAP,CAEA,CAED,KAAKD,eAAL,CAAuB7xD,KAAvB,CAEA,OAAOA,KAAP,CAAc;EAEd,CAEDgyD,gBAAgB,EAAG,CAElB,KAAKlvE,WAAL,CAAmB,IAAnB,CACA,KAAK8uE,UAAL,GAEA,CAED;EAEAN,cAAc,CAAEzjE,CAAF,CAAK0O,QAAL,CAAgB,CAE7B,MAAM01D,UAAU,CAAG,KAAKL,UAAL,EAAnB,CAEA,IAAIp+E,CAAC,CAAG,CAAR,CACA,MAAMoS,EAAE,CAAGqsE,UAAU,CAACv+E,MAAtB,CAEA,IAAIw+E,eAAJ,CAAqB;EAErB,GAAK31D,QAAL,CAAgB,CAEf21D,eAAe,CAAG31D,QAAlB,CAEA,CAJD,KAIO,CAEN21D,eAAe,CAAGrkE,CAAC,CAAGokE,UAAU,CAAErsE,EAAE,CAAG,CAAP,CAAhC,CAEA,CAED;EAEA,IAAIusE,GAAG,CAAG,CAAV,CAAaC,IAAI,CAAGxsE,EAAE,CAAG,CAAzB,CAA4BysE,UAA5B,CAEA,MAAQF,GAAG,EAAIC,IAAf,CAAsB,CAErB5+E,CAAC,CAAGI,IAAI,CAACsB,KAAL,CAAYi9E,GAAG,CAAG,CAAEC,IAAI,CAAGD,GAAT,EAAiB,CAAnC,CAAJ,CAA4C;EAE5CE,UAAU,CAAGJ,UAAU,CAAEz+E,CAAF,CAAV,CAAkB0+E,eAA/B,CAEA,GAAKG,UAAU,CAAG,CAAlB,CAAsB,CAErBF,GAAG,CAAG3+E,CAAC,CAAG,CAAV,CAEA,CAJD,QAIY6+E,UAAU,CAAG,CAAlB,CAAsB,CAE5BD,IAAI,CAAG5+E,CAAC,CAAG,CAAX,CAEA,CAJM,KAIA,CAEN4+E,IAAI,CAAG5+E,CAAP,CACA,MAEA;EAEA,CAED,CAEDA,CAAC,CAAG4+E,IAAJ,CAEA,GAAKH,UAAU,CAAEz+E,CAAF,CAAV,GAAoB0+E,eAAzB,CAA2C,CAE1C,OAAO1+E,CAAC,EAAKoS,EAAE,CAAG,CAAV,CAAR,CAEA,CAED;EAEA,MAAM0sE,YAAY,CAAGL,UAAU,CAAEz+E,CAAF,CAA/B,CACA,MAAM++E,WAAW,CAAGN,UAAU,CAAEz+E,CAAC,CAAG,CAAN,CAA9B,CAEA,MAAMg/E,aAAa,CAAGD,WAAW,CAAGD,YAApC,CAEA;EAEA,MAAMG,eAAe,CAAG,CAAEP,eAAe,CAAGI,YAApB,EAAqCE,aAA7D,CAEA;EAEA,MAAMx9E,CAAC,CAAG,CAAExB,CAAC,CAAGi/E,eAAN,GAA4B7sE,EAAE,CAAG,CAAjC,CAAV,CAEA,OAAO5Q,CAAP,CAEA,CAED;EACA;EACA;EACA;EAEA09E,UAAU,CAAE19E,CAAF,CAAKq8E,cAAL,CAAsB,CAE/B,MAAMvmD,KAAK,CAAG,MAAd,CACA,IAAIvX,EAAE,CAAGve,CAAC,CAAG81B,KAAb,CACA,IAAI6nD,EAAE,CAAG39E,CAAC,CAAG81B,KAAb,CAEA;EAEA,GAAKvX,EAAE,CAAG,CAAV,CAAcA,EAAE,CAAG,CAAL,CACd,GAAKo/D,EAAE,CAAG,CAAV,CAAcA,EAAE,CAAG,CAAL,CAEd,MAAMC,GAAG,CAAG,KAAKzB,QAAL,CAAe59D,EAAf,CAAZ,CACA,MAAMs/D,GAAG,CAAG,KAAK1B,QAAL,CAAewB,EAAf,CAAZ,CAEA,MAAMzkD,OAAO,CAAGmjD,cAAc,GAAQuB,GAAG,CAAC34E,SAAN,CAAoB,IAAIhtB,OAAJ,EAApB,CAAoC,IAAIY,OAAJ,EAA1C,CAA9B,CAEAqgD,OAAO,CAACj4B,IAAR,CAAc48E,GAAd,EAAoBh8E,GAApB,CAAyB+7E,GAAzB,EAA+Bv6E,SAA/B,GAEA,OAAO61B,OAAP,CAEA,CAED4kD,YAAY,CAAEjlE,CAAF,CAAKwjE,cAAL,CAAsB,CAEjC,MAAMr8E,CAAC,CAAG,KAAKs8E,cAAL,CAAqBzjE,CAArB,CAAV,CACA,YAAY6kE,UAAL,CAAiB19E,CAAjB,CAAoBq8E,cAApB,CAAP,CAEA,CAED0B,mBAAmB,CAAEC,QAAF,CAAYC,MAAZ,CAAqB;EAIvC,MAAMlmE,MAAM,CAAG,IAAIl/B,OAAJ,EAAf,CAEA,MAAMkhD,QAAQ,CAAG,EAAjB,CACA,MAAMH,OAAO,CAAG,EAAhB,CACA,MAAMskD,SAAS,CAAG,EAAlB,CAEA,MAAMC,GAAG,CAAG,IAAItlG,OAAJ,EAAZ,CACA,MAAMulG,GAAG,CAAG,IAAIxjG,OAAJ,EAAZ,CAEA;EAEA,IAAM,IAAI4jB,CAAC,CAAG,CAAd,CAAiBA,CAAC,EAAIw/E,QAAtB,CAAgCx/E,CAAC,EAAjC,CAAuC,CAEtC,MAAMqa,CAAC,CAAGra,CAAC,CAAGw/E,QAAd,CAEAjkD,QAAQ,CAAEv7B,CAAF,CAAR,CAAgB,KAAKs/E,YAAL,CAAmBjlE,CAAnB,CAAsB,IAAIhgC,OAAJ,EAAtB,CAAhB,CAEA,CAED;EACA;EAEA+gD,OAAO,CAAE,CAAF,CAAP,CAAe,IAAI/gD,OAAJ,EAAf,CACAqlG,SAAS,CAAE,CAAF,CAAT,CAAiB,IAAIrlG,OAAJ,EAAjB,CACA,IAAI6mB,GAAG,CAAG6S,MAAM,CAAC8rE,SAAjB,CACA,MAAMx1E,EAAE,CAAGjK,IAAI,CAACwE,GAAL,CAAU22B,QAAQ,CAAE,CAAF,CAAR,CAAcj6B,CAAxB,CAAX,CACA,MAAMgJ,EAAE,CAAGlK,IAAI,CAACwE,GAAL,CAAU22B,QAAQ,CAAE,CAAF,CAAR,CAAch6B,CAAxB,CAAX,CACA,MAAMu+E,EAAE,CAAG1/E,IAAI,CAACwE,GAAL,CAAU22B,QAAQ,CAAE,CAAF,CAAR,CAAc5rB,CAAxB,CAAX,CAEA,GAAKtF,EAAE,EAAInJ,GAAX,CAAiB,CAEhBA,GAAG,CAAGmJ,EAAN,CACAkP,MAAM,CAACvX,GAAP,CAAY,CAAZ,CAAe,CAAf,CAAkB,CAAlB,EAEA,CAED,GAAKsI,EAAE,EAAIpJ,GAAX,CAAiB,CAEhBA,GAAG,CAAGoJ,EAAN,CACAiP,MAAM,CAACvX,GAAP,CAAY,CAAZ,CAAe,CAAf,CAAkB,CAAlB,EAEA,CAED,GAAK89E,EAAE,EAAI5+E,GAAX,CAAiB,CAEhBqY,MAAM,CAACvX,GAAP,CAAY,CAAZ,CAAe,CAAf,CAAkB,CAAlB,EAEA,CAED29E,GAAG,CAAChnE,YAAJ,CAAkB4iB,QAAQ,CAAE,CAAF,CAA1B,CAAiChiB,MAAjC,EAA0C1U,SAA1C,GAEAu2B,OAAO,CAAE,CAAF,CAAP,CAAaziB,YAAb,CAA2B4iB,QAAQ,CAAE,CAAF,CAAnC,CAA0CokD,GAA1C,EACAD,SAAS,CAAE,CAAF,CAAT,CAAe/mE,YAAf,CAA6B4iB,QAAQ,CAAE,CAAF,CAArC,CAA4CH,OAAO,CAAE,CAAF,CAAnD,EAGA;EAEA,IAAM,IAAIp7B,CAAC,CAAG,CAAd,CAAiBA,CAAC,EAAIw/E,QAAtB,CAAgCx/E,CAAC,EAAjC,CAAuC,CAEtCo7B,OAAO,CAAEp7B,CAAF,CAAP,CAAeo7B,OAAO,CAAEp7B,CAAC,CAAG,CAAN,CAAP,CAAiBwC,KAAjB,EAAf,CAEAk9E,SAAS,CAAE1/E,CAAF,CAAT,CAAiB0/E,SAAS,CAAE1/E,CAAC,CAAG,CAAN,CAAT,CAAmBwC,KAAnB,EAAjB,CAEAm9E,GAAG,CAAChnE,YAAJ,CAAkB4iB,QAAQ,CAAEv7B,CAAC,CAAG,CAAN,CAA1B,CAAqCu7B,QAAQ,CAAEv7B,CAAF,CAA7C,EAEA,GAAK2/E,GAAG,CAACz/E,MAAJ,GAAe6T,MAAM,CAACC,OAA3B,CAAqC,CAEpC2rE,GAAG,CAAC96E,SAAJ,GAEA,MAAMiG,KAAK,CAAG1K,IAAI,CAAC6P,IAAL,CAAW72B,KAAK,CAAEmiD,QAAQ,CAAEv7B,CAAC,CAAG,CAAN,CAAR,CAAkBuE,GAAlB,CAAuBg3B,QAAQ,CAAEv7B,CAAF,CAA/B,CAAF,CAA0C,CAAE,CAA5C,CAA+C,CAA/C,CAAhB,CAAd,CAAoF;EAEpFo7B,OAAO,CAAEp7B,CAAF,CAAP,CAAa8P,YAAb,CAA2B8vE,GAAG,CAACr7D,gBAAJ,CAAsBo7D,GAAtB,CAA2B70E,KAA3B,CAA3B,EAEA,CAED40E,SAAS,CAAE1/E,CAAF,CAAT,CAAe2Y,YAAf,CAA6B4iB,QAAQ,CAAEv7B,CAAF,CAArC,CAA4Co7B,OAAO,CAAEp7B,CAAF,CAAnD,EAEA,CAED;EAEA,GAAKy/E,MAAM,GAAK,IAAhB,CAAuB,CAEtB,IAAI30E,KAAK,CAAG1K,IAAI,CAAC6P,IAAL,CAAW72B,KAAK,CAAEgiD,OAAO,CAAE,CAAF,CAAP,CAAa72B,GAAb,CAAkB62B,OAAO,CAAEokD,QAAF,CAAzB,CAAF,CAA2C,CAAE,CAA7C,CAAgD,CAAhD,CAAhB,CAAZ,CACA10E,KAAK,EAAI00E,QAAT,CAEA,GAAKjkD,QAAQ,CAAE,CAAF,CAAR,CAAch3B,GAAd,CAAmBo7E,GAAG,CAAChnE,YAAJ,CAAkByiB,OAAO,CAAE,CAAF,CAAzB,CAAgCA,OAAO,CAAEokD,QAAF,CAAvC,CAAnB,EAA6E,CAAlF,CAAsF,CAErF10E,KAAK,CAAG,CAAEA,KAAV,CAEA,CAED,IAAM,IAAI9K,CAAC,CAAG,CAAd,CAAiBA,CAAC,EAAIw/E,QAAtB,CAAgCx/E,CAAC,EAAjC,CAAuC;EAGtCo7B,OAAO,CAAEp7B,CAAF,CAAP,CAAa8P,YAAb,CAA2B8vE,GAAG,CAACr7D,gBAAJ,CAAsBgX,QAAQ,CAAEv7B,CAAF,CAA9B,CAAqC8K,KAAK,CAAG9K,CAA7C,CAA3B,EACA0/E,SAAS,CAAE1/E,CAAF,CAAT,CAAe2Y,YAAf,CAA6B4iB,QAAQ,CAAEv7B,CAAF,CAArC,CAA4Co7B,OAAO,CAAEp7B,CAAF,CAAnD,EAEA,CAED,CAED,OAAO,CACNu7B,QAAQ,CAAEA,QADJ,CAENH,OAAO,CAAEA,OAFH,CAGNskD,SAAS,CAAEA,SAHL,CAAP,CAMA,CAEDl9E,KAAK,EAAG,CAEP,gBAAgBX,WAAT,GAAuBY,IAAvB,CAA6B,IAA7B,CAAP,CAEA,CAEDA,IAAI,CAAE0L,MAAF,CAAW,CAEd,KAAKuvE,kBAAL,CAA0BvvE,MAAM,CAACuvE,kBAAjC,CAEA,WAAA,CAEA,CAEDtmF,MAAM,EAAG,CAER,MAAMsY,IAAI,CAAG,CACZf,QAAQ,CAAE,CACTZ,OAAO,CAAE,GADA,CAEThP,IAAI,CAAE,OAFG,CAGT6P,SAAS,CAAE,cAHF,CADE,CAAb,CAQAc,IAAI,CAACguE,kBAAL,CAA0B,KAAKA,kBAA/B,CACAhuE,IAAI,CAAC3Q,IAAL,CAAY,KAAKA,IAAjB,CAEA,OAAO2Q,IAAP,CAEA,CAEDmxB,QAAQ,CAAEk/C,IAAF,CAAS,CAEhB,KAAKrC,kBAAL,CAA0BqC,IAAI,CAACrC,kBAA/B,CAEA,WAAA,CAEA,CAvXU,CA2XZ,MAAMhkF,YAAN,SAA2BD,KAAM,CAEhCoI,WAAW,CAAEm+E,EAAE,CAAG,CAAP,CAAUC,EAAE,CAAG,CAAf,CAAkBC,OAAO,CAAG,CAA5B,CAA+BC,OAAO,CAAG,CAAzC,CAA4CC,WAAW,CAAG,CAA1D,CAA6DC,SAAS,CAAGjgF,IAAI,CAACC,EAAL,CAAU,CAAnF,CAAsFigF,UAAU,CAAG,KAAnG,CAA0GC,SAAS,CAAG,CAAtH,CAA0H,CAEpI,QAEA,KAAKxhF,IAAL,CAAY,cAAZ,CAEA,KAAKihF,EAAL,CAAUA,EAAV,CACA,KAAKC,EAAL,CAAUA,EAAV,CAEA,KAAKC,OAAL,CAAeA,OAAf,CACA,KAAKC,OAAL,CAAeA,OAAf,CAEA,KAAKC,WAAL,CAAmBA,WAAnB,CACA,KAAKC,SAAL,CAAiBA,SAAjB,CAEA,KAAKC,UAAL,CAAkBA,UAAlB,CAEA,KAAKC,SAAL,CAAiBA,SAAjB,CAEA,CAED5C,QAAQ,CAAEn8E,CAAF,CAAKq8E,cAAL,CAAsB,CAE7B,MAAMhiE,KAAK,CAAGgiE,cAAc,EAAI,IAAIpkG,OAAJ,EAAhC,CAEA,MAAM+mG,KAAK,CAAGpgF,IAAI,CAACC,EAAL,CAAU,CAAxB,CACA,IAAIogF,UAAU,CAAG,KAAKJ,SAAL,CAAiB,KAAKD,WAAvC,CACA,MAAMM,UAAU,CAAGtgF,IAAI,CAACwE,GAAL,CAAU67E,UAAV,EAAyB1sE,MAAM,CAACC,OAAnD,CAEA;EACA,MAAQysE,UAAU,CAAG,CAArB,CAAyBA,UAAU,EAAID,KAAd,CACzB,MAAQC,UAAU,CAAGD,KAArB,CAA6BC,UAAU,EAAID,KAAd,CAE7B,GAAKC,UAAU,CAAG1sE,MAAM,CAACC,OAAzB,CAAmC,CAElC,GAAK0sE,UAAL,CAAkB,CAEjBD,UAAU,CAAG,CAAb,CAEA,CAJD,KAIO,CAENA,UAAU,CAAGD,KAAb,CAEA,CAED,CAED,GAAK,KAAKF,UAAL,GAAoB,IAApB,EAA4B,CAAEI,UAAnC,CAAgD,CAE/C,GAAKD,UAAU,GAAKD,KAApB,CAA4B,CAE3BC,UAAU,CAAG,CAAED,KAAf,CAEA,CAJD,KAIO,CAENC,UAAU,CAAGA,UAAU,CAAGD,KAA1B,CAEA,CAED,CAED,MAAM17E,KAAK,CAAG,KAAKs7E,WAAL,CAAmB5+E,CAAC,CAAGi/E,UAArC,CACA,IAAIn/E,CAAC,CAAG,KAAK0+E,EAAL,CAAU,KAAKE,OAAL,CAAe9/E,IAAI,CAACgG,GAAL,CAAUtB,KAAV,CAAjC,CACA,IAAIvD,CAAC,CAAG,KAAK0+E,EAAL,CAAU,KAAKE,OAAL,CAAe//E,IAAI,CAACiG,GAAL,CAAUvB,KAAV,CAAjC,CAEA,GAAK,KAAKy7E,SAAL,GAAmB,CAAxB,CAA4B,CAE3B,MAAMn6E,GAAG,CAAGhG,IAAI,CAACgG,GAAL,CAAU,KAAKm6E,SAAf,CAAZ,CACA,MAAMl6E,GAAG,CAAGjG,IAAI,CAACiG,GAAL,CAAU,KAAKk6E,SAAf,CAAZ,CAEA,MAAMl2E,EAAE,CAAG/I,CAAC,CAAG,KAAK0+E,EAApB,CACA,MAAM11E,EAAE,CAAG/I,CAAC,CAAG,KAAK0+E,EAApB,CAEA;EACA3+E,CAAC,CAAG+I,EAAE,CAAGjE,GAAL,CAAWkE,EAAE,CAAGjE,GAAhB,CAAsB,KAAK25E,EAA/B,CACAz+E,CAAC,CAAG8I,EAAE,CAAGhE,GAAL,CAAWiE,EAAE,CAAGlE,GAAhB,CAAsB,KAAK65E,EAA/B,CAEA,CAED,OAAOpkE,KAAK,CAAC7Z,GAAN,CAAWV,CAAX,CAAcC,CAAd,CAAP,CAEA,CAEDkB,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAK6xE,EAAL,CAAU7xE,MAAM,CAAC6xE,EAAjB,CACA,KAAKC,EAAL,CAAU9xE,MAAM,CAAC8xE,EAAjB,CAEA,KAAKC,OAAL,CAAe/xE,MAAM,CAAC+xE,OAAtB,CACA,KAAKC,OAAL,CAAehyE,MAAM,CAACgyE,OAAtB,CAEA,KAAKC,WAAL,CAAmBjyE,MAAM,CAACiyE,WAA1B,CACA,KAAKC,SAAL,CAAiBlyE,MAAM,CAACkyE,SAAxB,CAEA,KAAKC,UAAL,CAAkBnyE,MAAM,CAACmyE,UAAzB,CAEA,KAAKC,SAAL,CAAiBpyE,MAAM,CAACoyE,SAAxB,CAEA,WAAA,CAEA,CAEDnpF,MAAM,EAAG,CAER,MAAMsY,IAAI,CAAG,MAAMtY,MAAN,EAAb,CAEAsY,IAAI,CAACswE,EAAL,CAAU,KAAKA,EAAf,CACAtwE,IAAI,CAACuwE,EAAL,CAAU,KAAKA,EAAf,CAEAvwE,IAAI,CAACwwE,OAAL,CAAe,KAAKA,OAApB,CACAxwE,IAAI,CAACywE,OAAL,CAAe,KAAKA,OAApB,CAEAzwE,IAAI,CAAC0wE,WAAL,CAAmB,KAAKA,WAAxB,CACA1wE,IAAI,CAAC2wE,SAAL,CAAiB,KAAKA,SAAtB,CAEA3wE,IAAI,CAAC4wE,UAAL,CAAkB,KAAKA,UAAvB,CAEA5wE,IAAI,CAAC6wE,SAAL,CAAiB,KAAKA,SAAtB,CAEA,OAAO7wE,IAAP,CAEA,CAEDmxB,QAAQ,CAAEk/C,IAAF,CAAS,CAEhB,MAAMl/C,QAAN,CAAgBk/C,IAAhB,EAEA,KAAKC,EAAL,CAAUD,IAAI,CAACC,EAAf,CACA,KAAKC,EAAL,CAAUF,IAAI,CAACE,EAAf,CAEA,KAAKC,OAAL,CAAeH,IAAI,CAACG,OAApB,CACA,KAAKC,OAAL,CAAeJ,IAAI,CAACI,OAApB,CAEA,KAAKC,WAAL,CAAmBL,IAAI,CAACK,WAAxB,CACA,KAAKC,SAAL,CAAiBN,IAAI,CAACM,SAAtB,CAEA,KAAKC,UAAL,CAAkBP,IAAI,CAACO,UAAvB,CAEA,KAAKC,SAAL,CAAiBR,IAAI,CAACQ,SAAtB,CAEA,WAAA,CAEA,CAlJ+B,CAsJjC7mF,YAAY,CAAC8M,SAAb,CAAuBm6E,cAAvB,CAAwC,IAAxC,CAEA,MAAMhnF,QAAN,SAAuBD,YAAa,CAEnCmI,WAAW,CAAEm+E,EAAF,CAAMC,EAAN,CAAUW,OAAV,CAAmBR,WAAnB,CAAgCC,SAAhC,CAA2CC,UAA3C,CAAwD,CAElE,MAAON,EAAP,CAAWC,EAAX,CAAeW,OAAf,CAAwBA,OAAxB,CAAiCR,WAAjC,CAA8CC,SAA9C,CAAyDC,UAAzD,EAEA,KAAKvhF,IAAL,CAAY,UAAZ,CAEA,CARkC,CAYpCpF,QAAQ,CAAC6M,SAAT,CAAmBq6E,UAAnB,CAAgC,IAAhC,CAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;AACA;EACA;EACA;EACA;EACA,EAEA,SAASjnF,SAAT,EAAqB,CAEpB,IAAIknF,EAAE,CAAG,CAAT,CAAYlsE,EAAE,CAAG,CAAjB,CAAoBC,EAAE,CAAG,CAAzB,CAA4BC,EAAE,CAAG,CAAjC,CAEA;EACD;EACA;EACA;EACA;EACA;EACA;EACA,IACC,SAAS6lC,IAAT,CAAetnC,EAAf,CAAmBI,EAAnB,CAAuBqM,EAAvB,CAA2BC,EAA3B,CAAgC,CAE/B+gE,EAAE,CAAGztE,EAAL,CACAuB,EAAE,CAAGkL,EAAL,CACAjL,EAAE,CAAG,CAAE,CAAF,CAAMxB,EAAN,CAAW,EAAII,EAAf,CAAoB,EAAIqM,EAAxB,CAA6BC,EAAlC,CACAjL,EAAE,CAAG,EAAIzB,EAAJ,CAAS,EAAII,EAAb,CAAkBqM,EAAlB,CAAuBC,EAA5B,CAEA,CAED,OAAO,CAENghE,cAAc,CAAE,SAAW1tE,EAAX,CAAeI,EAAf,CAAmBqR,EAAnB,CAAuBk8D,EAAvB,CAA2BC,OAA3B,CAAqC,CAEpDtmC,IAAI,CAAElnC,EAAF,CAAMqR,EAAN,CAAUm8D,OAAO,EAAKn8D,EAAE,CAAGzR,EAAV,CAAjB,CAAiC4tE,OAAO,EAAKD,EAAE,CAAGvtE,EAAV,CAAxC,CAAJ,CAEA,CANK,CAQNytE,wBAAwB,CAAE,SAAW7tE,EAAX,CAAeI,EAAf,CAAmBqR,EAAnB,CAAuBk8D,EAAvB,CAA2BG,GAA3B,CAAgCC,GAAhC,CAAqCC,GAArC,CAA2C;EAGpE,IAAIthE,EAAE,CAAG,CAAEtM,EAAE,CAAGJ,EAAP,EAAc8tE,GAAd,CAAoB,CAAEr8D,EAAE,CAAGzR,EAAP,GAAgB8tE,GAAG,CAAGC,GAAtB,CAApB,CAAkD,CAAEt8D,EAAE,CAAGrR,EAAP,EAAc2tE,GAAzE,CACA,IAAIjC,EAAE,CAAG,CAAEr6D,EAAE,CAAGrR,EAAP,EAAc2tE,GAAd,CAAoB,CAAEJ,EAAE,CAAGvtE,EAAP,GAAgB2tE,GAAG,CAAGC,GAAtB,CAApB,CAAkD,CAAEL,EAAE,CAAGl8D,EAAP,EAAcu8D,GAAzE,CAEA;EACAthE,EAAE,EAAIqhE,GAAN,CACAjC,EAAE,EAAIiC,GAAN,CAEAzmC,IAAI,CAAElnC,EAAF,CAAMqR,EAAN,CAAU/E,EAAV,CAAco/D,EAAd,CAAJ,CAEA,CApBK,CAsBNmC,IAAI,CAAE,SAAW9/E,CAAX,CAAe,CAEpB,MAAM29E,EAAE,CAAG39E,CAAC,CAAGA,CAAf,CACA,MAAM+/E,EAAE,CAAGpC,EAAE,CAAG39E,CAAhB,CACA,OAAOs/E,EAAE,CAAGlsE,EAAE,CAAGpT,CAAV,CAAcqT,EAAE,CAAGsqE,EAAnB,CAAwBrqE,EAAE,CAAGysE,EAApC,CAEA,CA5BK,CAAP,CAgCA,CAED;EAEA,MAAM1nF,GAAG,CAAG,IAAIxf,OAAJ,EAAZ,CACA,MAAMyf,EAAE,CAAG,IAAIF,SAAJ,EAAX,CAA4BG,EAAE,CAAG,IAAIH,SAAJ,EAAjC,CAAkDI,EAAE,CAAG,IAAIJ,SAAJ,EAAvD,CAEA,MAAMK,gBAAN,SAA+BR,KAAM,CAEpCoI,WAAW,CAAEmZ,MAAM,CAAG,EAAX,CAAeykE,MAAM,CAAG,KAAxB,CAA+B+B,SAAS,CAAG,aAA3C,CAA0DP,OAAO,CAAG,GAApE,CAA0E,CAEpF,QAEA,KAAKliF,IAAL,CAAY,kBAAZ,CAEA,KAAKic,MAAL,CAAcA,MAAd,CACA,KAAKykE,MAAL,CAAcA,MAAd,CACA,KAAK+B,SAAL,CAAiBA,SAAjB,CACA,KAAKP,OAAL,CAAeA,OAAf,CAEA,CAEDtD,QAAQ,CAAEn8E,CAAF,CAAKq8E,cAAc,CAAG,IAAIxjG,OAAJ,EAAtB,CAAsC,CAE7C,MAAMwhC,KAAK,CAAGgiE,cAAd,CAEA,MAAM7iE,MAAM,CAAG,KAAKA,MAApB,CACA,MAAM/a,CAAC,CAAG+a,MAAM,CAAC9a,MAAjB,CAEA,MAAM4V,CAAC,CAAG,CAAE7V,CAAC,EAAK,KAAKw/E,MAAL,CAAc,CAAd,CAAkB,CAAvB,CAAH,EAAkCj+E,CAA5C,CACA,IAAIigF,QAAQ,CAAGrhF,IAAI,CAACsB,KAAL,CAAYoU,CAAZ,CAAf,CACA,IAAIkrC,MAAM,CAAGlrC,CAAC,CAAG2rE,QAAjB,CAEA,GAAK,KAAKhC,MAAV,CAAmB,CAElBgC,QAAQ,EAAIA,QAAQ,CAAG,CAAX,CAAe,CAAf,CAAmB,CAAErhF,IAAI,CAACsB,KAAL,CAAYtB,IAAI,CAACwE,GAAL,CAAU68E,QAAV,EAAuBxhF,CAAnC,EAAyC,CAA3C,EAAiDA,CAAhF,CAEA,CAJD,QAIY+gD,MAAM,GAAK,CAAX,EAAgBygC,QAAQ,GAAKxhF,CAAC,CAAG,CAAtC,CAA0C,CAEhDwhF,QAAQ,CAAGxhF,CAAC,CAAG,CAAf,CACA+gD,MAAM,CAAG,CAAT,CAEA,CAED,IAAIpjC,EAAJ,CAAQ2P,EAAR,CAAY;EAEZ,GAAK,KAAKkyD,MAAL,EAAegC,QAAQ,CAAG,CAA/B,CAAmC,CAElC7jE,EAAE,CAAG5C,MAAM,CAAE,CAAEymE,QAAQ,CAAG,CAAb,EAAmBxhF,CAArB,CAAX,CAEA,CAJD,KAIO;EAGNpG,GAAG,CAACyJ,UAAJ,CAAgB0X,MAAM,CAAE,CAAF,CAAtB,CAA6BA,MAAM,CAAE,CAAF,CAAnC,EAA2CrY,GAA3C,CAAgDqY,MAAM,CAAE,CAAF,CAAtD,EACA4C,EAAE,CAAG/jB,GAAL,CAEA,CAED,MAAMgkB,EAAE,CAAG7C,MAAM,CAAEymE,QAAQ,CAAGxhF,CAAb,CAAjB,CACA,MAAM6d,EAAE,CAAG9C,MAAM,CAAE,CAAEymE,QAAQ,CAAG,CAAb,EAAmBxhF,CAArB,CAAjB,CAEA,GAAK,KAAKw/E,MAAL,EAAegC,QAAQ,CAAG,CAAX,CAAexhF,CAAnC,CAAuC,CAEtCstB,EAAE,CAAGvS,MAAM,CAAE,CAAEymE,QAAQ,CAAG,CAAb,EAAmBxhF,CAArB,CAAX,CAEA,CAJD,KAIO;EAGNpG,GAAG,CAACyJ,UAAJ,CAAgB0X,MAAM,CAAE/a,CAAC,CAAG,CAAN,CAAtB,CAAiC+a,MAAM,CAAE/a,CAAC,CAAG,CAAN,CAAvC,EAAmD0C,GAAnD,CAAwDqY,MAAM,CAAE/a,CAAC,CAAG,CAAN,CAA9D,EACAstB,EAAE,CAAG1zB,GAAL,CAEA,CAED,GAAK,KAAK2nF,SAAL,GAAmB,aAAnB,EAAoC,KAAKA,SAAL,GAAmB,SAA5D,CAAwE;EAGvE,MAAM//E,GAAG,CAAG,KAAK+/E,SAAL,GAAmB,SAAnB,CAA+B,GAA/B,CAAqC,IAAjD,CACA,IAAIL,GAAG,CAAG/gF,IAAI,CAACqB,GAAL,CAAUmc,EAAE,CAAC3Y,iBAAH,CAAsB4Y,EAAtB,CAAV,CAAsCpc,GAAtC,CAAV,CACA,IAAI2/E,GAAG,CAAGhhF,IAAI,CAACqB,GAAL,CAAUoc,EAAE,CAAC5Y,iBAAH,CAAsB6Y,EAAtB,CAAV,CAAsCrc,GAAtC,CAAV,CACA,IAAI4/E,GAAG,CAAGjhF,IAAI,CAACqB,GAAL,CAAUqc,EAAE,CAAC7Y,iBAAH,CAAsBsoB,EAAtB,CAAV,CAAsC9rB,GAAtC,CAAV,CAEA;EACA,GAAK2/E,GAAG,CAAG,IAAX,CAAkBA,GAAG,CAAG,GAAN,CAClB,GAAKD,GAAG,CAAG,IAAX,CAAkBA,GAAG,CAAGC,GAAN,CAClB,GAAKC,GAAG,CAAG,IAAX,CAAkBA,GAAG,CAAGD,GAAN,CAElBtnF,EAAE,CAAConF,wBAAH,CAA6BtjE,EAAE,CAACtc,CAAhC,CAAmCuc,EAAE,CAACvc,CAAtC,CAAyCwc,EAAE,CAACxc,CAA5C,CAA+CisB,EAAE,CAACjsB,CAAlD,CAAqD6/E,GAArD,CAA0DC,GAA1D,CAA+DC,GAA/D,EACAtnF,EAAE,CAACmnF,wBAAH,CAA6BtjE,EAAE,CAACrc,CAAhC,CAAmCsc,EAAE,CAACtc,CAAtC,CAAyCuc,EAAE,CAACvc,CAA5C,CAA+CgsB,EAAE,CAAChsB,CAAlD,CAAqD4/E,GAArD,CAA0DC,GAA1D,CAA+DC,GAA/D,EACArnF,EAAE,CAACknF,wBAAH,CAA6BtjE,EAAE,CAACjO,CAAhC,CAAmCkO,EAAE,CAAClO,CAAtC,CAAyCmO,EAAE,CAACnO,CAA5C,CAA+C4d,EAAE,CAAC5d,CAAlD,CAAqDwxE,GAArD,CAA0DC,GAA1D,CAA+DC,GAA/D,EAEA,CAjBD,QAiBY,KAAKG,SAAL,GAAmB,YAAxB,CAAuC,CAE7C1nF,EAAE,CAACinF,cAAH,CAAmBnjE,EAAE,CAACtc,CAAtB,CAAyBuc,EAAE,CAACvc,CAA5B,CAA+Bwc,EAAE,CAACxc,CAAlC,CAAqCisB,EAAE,CAACjsB,CAAxC,CAA2C,KAAK2/E,OAAhD,EACAlnF,EAAE,CAACgnF,cAAH,CAAmBnjE,EAAE,CAACrc,CAAtB,CAAyBsc,EAAE,CAACtc,CAA5B,CAA+Buc,EAAE,CAACvc,CAAlC,CAAqCgsB,EAAE,CAAChsB,CAAxC,CAA2C,KAAK0/E,OAAhD,EACAjnF,EAAE,CAAC+mF,cAAH,CAAmBnjE,EAAE,CAACjO,CAAtB,CAAyBkO,EAAE,CAAClO,CAA5B,CAA+BmO,EAAE,CAACnO,CAAlC,CAAqC4d,EAAE,CAAC5d,CAAxC,CAA2C,KAAKsxE,OAAhD,EAEA,CAEDplE,KAAK,CAAC7Z,GAAN,CACClI,EAAE,CAACwnF,IAAH,CAAStgC,MAAT,CADD,CAECjnD,EAAE,CAACunF,IAAH,CAAStgC,MAAT,CAFD,CAGChnD,EAAE,CAACsnF,IAAH,CAAStgC,MAAT,CAHD,EAMA,OAAOnlC,KAAP,CAEA,CAEDpZ,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAK6M,MAAL,CAAc,EAAd,CAEA,IAAM,IAAIhb,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGkO,MAAM,CAAC6M,MAAP,CAAc9a,MAAnC,CAA2CF,CAAC,CAAGC,CAA/C,CAAkDD,CAAC,EAAnD,CAAyD,CAExD,MAAM6b,KAAK,CAAG1N,MAAM,CAAC6M,MAAP,CAAehb,CAAf,CAAd,CAEA,KAAKgb,MAAL,CAAY3b,IAAZ,CAAkBwc,KAAK,CAACrZ,KAAN,EAAlB,EAEA,CAED,KAAKi9E,MAAL,CAActxE,MAAM,CAACsxE,MAArB,CACA,KAAK+B,SAAL,CAAiBrzE,MAAM,CAACqzE,SAAxB,CACA,KAAKP,OAAL,CAAe9yE,MAAM,CAAC8yE,OAAtB,CAEA,WAAA,CAEA,CAED7pF,MAAM,EAAG,CAER,MAAMsY,IAAI,CAAG,MAAMtY,MAAN,EAAb,CAEAsY,IAAI,CAACsL,MAAL,CAAc,EAAd,CAEA,IAAM,IAAIhb,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG,KAAK+a,MAAL,CAAY9a,MAAjC,CAAyCF,CAAC,CAAGC,CAA7C,CAAgDD,CAAC,EAAjD,CAAuD,CAEtD,MAAM6b,KAAK,CAAG,KAAKb,MAAL,CAAahb,CAAb,CAAd,CACA0P,IAAI,CAACsL,MAAL,CAAY3b,IAAZ,CAAkBwc,KAAK,CAACjW,OAAN,EAAlB,EAEA,CAED8J,IAAI,CAAC+vE,MAAL,CAAc,KAAKA,MAAnB,CACA/vE,IAAI,CAAC8xE,SAAL,CAAiB,KAAKA,SAAtB,CACA9xE,IAAI,CAACuxE,OAAL,CAAe,KAAKA,OAApB,CAEA,OAAOvxE,IAAP,CAEA,CAEDmxB,QAAQ,CAAEk/C,IAAF,CAAS,CAEhB,MAAMl/C,QAAN,CAAgBk/C,IAAhB,EAEA,KAAK/kE,MAAL,CAAc,EAAd,CAEA,IAAM,IAAIhb,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG8/E,IAAI,CAAC/kE,MAAL,CAAY9a,MAAjC,CAAyCF,CAAC,CAAGC,CAA7C,CAAgDD,CAAC,EAAjD,CAAuD,CAEtD,MAAM6b,KAAK,CAAGkkE,IAAI,CAAC/kE,MAAL,CAAahb,CAAb,CAAd,CACA,KAAKgb,MAAL,CAAY3b,IAAZ,CAAkB,IAAIhlB,OAAJ,GAAcqrB,SAAd,CAAyBmW,KAAzB,CAAlB,EAEA,CAED,KAAK4jE,MAAL,CAAcM,IAAI,CAACN,MAAnB,CACA,KAAK+B,SAAL,CAAiBzB,IAAI,CAACyB,SAAtB,CACA,KAAKP,OAAL,CAAelB,IAAI,CAACkB,OAApB,CAEA,WAAA,CAEA,CAnKmC,CAuKrChnF,gBAAgB,CAACuM,SAAjB,CAA2Bk7E,kBAA3B,CAAgD,IAAhD,CAEA;EACA;EACA;EACA,GAEA,SAASxnF,UAAT,CAAqBsH,CAArB,CAAwBoc,EAAxB,CAA4BC,EAA5B,CAAgCC,EAAhC,CAAoCyP,EAApC,CAAyC,CAExC,MAAM9P,EAAE,CAAG,CAAEK,EAAE,CAAGF,EAAP,EAAc,GAAzB,CACA,MAAMpY,EAAE,CAAG,CAAE+nB,EAAE,CAAG1P,EAAP,EAAc,GAAzB,CACA,MAAMshE,EAAE,CAAG39E,CAAC,CAAGA,CAAf,CACA,MAAM+/E,EAAE,CAAG//E,CAAC,CAAG29E,EAAf,CACA,OAAO,CAAE,EAAIthE,EAAJ,CAAS,EAAIC,EAAb,CAAkBL,EAAlB,CAAuBjY,EAAzB,EAAgC+7E,EAAhC,CAAqC,CAAE,CAAE,CAAF,CAAM1jE,EAAN,CAAW,EAAIC,EAAf,CAAoB,EAAIL,EAAxB,CAA6BjY,EAA/B,EAAsC25E,EAA3E,CAAgF1hE,EAAE,CAAGjc,CAArF,CAAyFqc,EAAhG,CAEA,CAED;EAEA,SAAS1jB,iBAAT,CAA4BqH,CAA5B,CAA+BsU,CAA/B,CAAmC,CAElC,MAAMwiD,CAAC,CAAG,EAAI92D,CAAd,CACA,OAAO82D,CAAC,CAAGA,CAAJ,CAAQxiD,CAAf,CAEA,CAED,SAAS1b,iBAAT,CAA4BoH,CAA5B,CAA+BsU,CAA/B,CAAmC,CAElC,UAAa,EAAItU,CAAV,EAAgBA,CAAhB,CAAoBsU,CAA3B,CAEA,CAED,SAASzb,iBAAT,CAA4BmH,CAA5B,CAA+BsU,CAA/B,CAAmC,CAElC,OAAOtU,CAAC,CAAGA,CAAJ,CAAQsU,CAAf,CAEA,CAED,SAASxb,eAAT,CAA0BkH,CAA1B,CAA6Boc,EAA7B,CAAiCC,EAAjC,CAAqCC,EAArC,CAA0C,CAEzC,OAAO3jB,iBAAiB,CAAEqH,CAAF,CAAKoc,EAAL,CAAjB,CAA6BxjB,iBAAiB,CAAEoH,CAAF,CAAKqc,EAAL,CAA9C,CACNxjB,iBAAiB,CAAEmH,CAAF,CAAKsc,EAAL,CADlB,CAGA,CAED;EAEA,SAASvjB,aAAT,CAAwBiH,CAAxB,CAA2BsU,CAA3B,CAA+B,CAE9B,MAAMwiD,CAAC,CAAG,EAAI92D,CAAd,CACA,OAAO82D,CAAC,CAAGA,CAAJ,CAAQA,CAAR,CAAYxiD,CAAnB,CAEA,CAED,SAAStb,aAAT,CAAwBgH,CAAxB,CAA2BsU,CAA3B,CAA+B,CAE9B,MAAMwiD,CAAC,CAAG,EAAI92D,CAAd,CACA,SAAW82D,CAAJ,CAAQA,CAAR,CAAY92D,CAAZ,CAAgBsU,CAAvB,CAEA,CAED,SAASrb,aAAT,CAAwB+G,CAAxB,CAA2BsU,CAA3B,CAA+B,CAE9B,UAAa,EAAItU,CAAV,EAAgBA,CAAhB,CAAoBA,CAApB,CAAwBsU,CAA/B,CAEA,CAED,SAASpb,aAAT,CAAwB8G,CAAxB,CAA2BsU,CAA3B,CAA+B,CAE9B,OAAOtU,CAAC,CAAGA,CAAJ,CAAQA,CAAR,CAAYsU,CAAnB,CAEA,CAED,SAASnb,WAAT,CAAsB6G,CAAtB,CAAyBoc,EAAzB,CAA6BC,EAA7B,CAAiCC,EAAjC,CAAqCyP,EAArC,CAA0C,CAEzC,OAAOhzB,aAAa,CAAEiH,CAAF,CAAKoc,EAAL,CAAb,CAAyBpjB,aAAa,CAAEgH,CAAF,CAAKqc,EAAL,CAAtC,CAAkDpjB,aAAa,CAAE+G,CAAF,CAAKsc,EAAL,CAA/D,CACNpjB,aAAa,CAAE8G,CAAF,CAAK+rB,EAAL,CADd,CAGA,CAED,MAAM3yB,gBAAN,SAA+BnB,KAAM,CAEpCoI,WAAW,CAAE4b,EAAE,CAAG,IAAIhkC,OAAJ,EAAP,CAAsB+rB,EAAE,CAAG,IAAI/rB,OAAJ,EAA3B,CAA0CgsB,EAAE,CAAG,IAAIhsB,OAAJ,EAA/C,CAA8DkoG,EAAE,CAAG,IAAIloG,OAAJ,EAAnE,CAAmF,CAE7F,QAEA,KAAKslB,IAAL,CAAY,kBAAZ,CAEA,KAAK0e,EAAL,CAAUA,EAAV,CACA,KAAKjY,EAAL,CAAUA,EAAV,CACA,KAAKC,EAAL,CAAUA,EAAV,CACA,KAAKk8E,EAAL,CAAUA,EAAV,CAEA,CAEDhE,QAAQ,CAAEn8E,CAAF,CAAKq8E,cAAc,CAAG,IAAIpkG,OAAJ,EAAtB,CAAsC,CAE7C,MAAMoiC,KAAK,CAAGgiE,cAAd,CAEA,MAAMpgE,EAAE,CAAG,KAAKA,EAAhB,CAAoBjY,EAAE,CAAG,KAAKA,EAA9B,CAAkCC,EAAE,CAAG,KAAKA,EAA5C,CAAgDk8E,EAAE,CAAG,KAAKA,EAA1D,CAEA9lE,KAAK,CAAC7Z,GAAN,CACCrH,WAAW,CAAE6G,CAAF,CAAKic,EAAE,CAACnc,CAAR,CAAWkE,EAAE,CAAClE,CAAd,CAAiBmE,EAAE,CAACnE,CAApB,CAAuBqgF,EAAE,CAACrgF,CAA1B,CADZ,CAEC3G,WAAW,CAAE6G,CAAF,CAAKic,EAAE,CAAClc,CAAR,CAAWiE,EAAE,CAACjE,CAAd,CAAiBkE,EAAE,CAAClE,CAApB,CAAuBogF,EAAE,CAACpgF,CAA1B,CAFZ,EAKA,OAAOsa,KAAP,CAEA,CAEDpZ,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKsP,EAAL,CAAQhb,IAAR,CAAc0L,MAAM,CAACsP,EAArB,EACA,KAAKjY,EAAL,CAAQ/C,IAAR,CAAc0L,MAAM,CAAC3I,EAArB,EACA,KAAKC,EAAL,CAAQhD,IAAR,CAAc0L,MAAM,CAAC1I,EAArB,EACA,KAAKk8E,EAAL,CAAQl/E,IAAR,CAAc0L,MAAM,CAACwzE,EAArB,EAEA,WAAA,CAEA,CAEDvqF,MAAM,EAAG,CAER,MAAMsY,IAAI,CAAG,MAAMtY,MAAN,EAAb,CAEAsY,IAAI,CAAC+N,EAAL,CAAU,KAAKA,EAAL,CAAQ7X,OAAR,EAAV,CACA8J,IAAI,CAAClK,EAAL,CAAU,KAAKA,EAAL,CAAQI,OAAR,EAAV,CACA8J,IAAI,CAACjK,EAAL,CAAU,KAAKA,EAAL,CAAQG,OAAR,EAAV,CACA8J,IAAI,CAACiyE,EAAL,CAAU,KAAKA,EAAL,CAAQ/7E,OAAR,EAAV,CAEA,OAAO8J,IAAP,CAEA,CAEDmxB,QAAQ,CAAEk/C,IAAF,CAAS,CAEhB,MAAMl/C,QAAN,CAAgBk/C,IAAhB,EAEA,KAAKtiE,EAAL,CAAQ/X,SAAR,CAAmBq6E,IAAI,CAACtiE,EAAxB,EACA,KAAKjY,EAAL,CAAQE,SAAR,CAAmBq6E,IAAI,CAACv6E,EAAxB,EACA,KAAKC,EAAL,CAAQC,SAAR,CAAmBq6E,IAAI,CAACt6E,EAAxB,EACA,KAAKk8E,EAAL,CAAQj8E,SAAR,CAAmBq6E,IAAI,CAAC4B,EAAxB,EAEA,WAAA,CAEA,CAnEmC,CAuErC/mF,gBAAgB,CAAC4L,SAAjB,CAA2Bo7E,kBAA3B,CAAgD,IAAhD,CAEA,MAAM/mF,iBAAN,SAAgCpB,KAAM,CAErCoI,WAAW,CAAE4b,EAAE,CAAG,IAAIpjC,OAAJ,EAAP,CAAsBmrB,EAAE,CAAG,IAAInrB,OAAJ,EAA3B,CAA0CorB,EAAE,CAAG,IAAIprB,OAAJ,EAA/C,CAA8DsnG,EAAE,CAAG,IAAItnG,OAAJ,EAAnE,CAAmF,CAE7F,QAEA,KAAK0kB,IAAL,CAAY,mBAAZ,CAEA,KAAK0e,EAAL,CAAUA,EAAV,CACA,KAAKjY,EAAL,CAAUA,EAAV,CACA,KAAKC,EAAL,CAAUA,EAAV,CACA,KAAKk8E,EAAL,CAAUA,EAAV,CAEA,CAEDhE,QAAQ,CAAEn8E,CAAF,CAAKq8E,cAAc,CAAG,IAAIxjG,OAAJ,EAAtB,CAAsC,CAE7C,MAAMwhC,KAAK,CAAGgiE,cAAd,CAEA,MAAMpgE,EAAE,CAAG,KAAKA,EAAhB,CAAoBjY,EAAE,CAAG,KAAKA,EAA9B,CAAkCC,EAAE,CAAG,KAAKA,EAA5C,CAAgDk8E,EAAE,CAAG,KAAKA,EAA1D,CAEA9lE,KAAK,CAAC7Z,GAAN,CACCrH,WAAW,CAAE6G,CAAF,CAAKic,EAAE,CAACnc,CAAR,CAAWkE,EAAE,CAAClE,CAAd,CAAiBmE,EAAE,CAACnE,CAApB,CAAuBqgF,EAAE,CAACrgF,CAA1B,CADZ,CAEC3G,WAAW,CAAE6G,CAAF,CAAKic,EAAE,CAAClc,CAAR,CAAWiE,EAAE,CAACjE,CAAd,CAAiBkE,EAAE,CAAClE,CAApB,CAAuBogF,EAAE,CAACpgF,CAA1B,CAFZ,CAGC5G,WAAW,CAAE6G,CAAF,CAAKic,EAAE,CAAC9N,CAAR,CAAWnK,EAAE,CAACmK,CAAd,CAAiBlK,EAAE,CAACkK,CAApB,CAAuBgyE,EAAE,CAAChyE,CAA1B,CAHZ,EAMA,OAAOkM,KAAP,CAEA,CAEDpZ,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKsP,EAAL,CAAQhb,IAAR,CAAc0L,MAAM,CAACsP,EAArB,EACA,KAAKjY,EAAL,CAAQ/C,IAAR,CAAc0L,MAAM,CAAC3I,EAArB,EACA,KAAKC,EAAL,CAAQhD,IAAR,CAAc0L,MAAM,CAAC1I,EAArB,EACA,KAAKk8E,EAAL,CAAQl/E,IAAR,CAAc0L,MAAM,CAACwzE,EAArB,EAEA,WAAA,CAEA,CAEDvqF,MAAM,EAAG,CAER,MAAMsY,IAAI,CAAG,MAAMtY,MAAN,EAAb,CAEAsY,IAAI,CAAC+N,EAAL,CAAU,KAAKA,EAAL,CAAQ7X,OAAR,EAAV,CACA8J,IAAI,CAAClK,EAAL,CAAU,KAAKA,EAAL,CAAQI,OAAR,EAAV,CACA8J,IAAI,CAACjK,EAAL,CAAU,KAAKA,EAAL,CAAQG,OAAR,EAAV,CACA8J,IAAI,CAACiyE,EAAL,CAAU,KAAKA,EAAL,CAAQ/7E,OAAR,EAAV,CAEA,OAAO8J,IAAP,CAEA,CAEDmxB,QAAQ,CAAEk/C,IAAF,CAAS,CAEhB,MAAMl/C,QAAN,CAAgBk/C,IAAhB,EAEA,KAAKtiE,EAAL,CAAQ/X,SAAR,CAAmBq6E,IAAI,CAACtiE,EAAxB,EACA,KAAKjY,EAAL,CAAQE,SAAR,CAAmBq6E,IAAI,CAACv6E,EAAxB,EACA,KAAKC,EAAL,CAAQC,SAAR,CAAmBq6E,IAAI,CAACt6E,EAAxB,EACA,KAAKk8E,EAAL,CAAQj8E,SAAR,CAAmBq6E,IAAI,CAAC4B,EAAxB,EAEA,WAAA,CAEA,CApEoC,CAwEtC9mF,iBAAiB,CAAC2L,SAAlB,CAA4Bq7E,mBAA5B,CAAkD,IAAlD,CAEA,MAAM/mF,SAAN,SAAwBrB,KAAM,CAE7BoI,WAAW,CAAE2D,EAAE,CAAG,IAAI/rB,OAAJ,EAAP,CAAsBgsB,EAAE,CAAG,IAAIhsB,OAAJ,EAA3B,CAA2C,CAErD,QAEA,KAAKslB,IAAL,CAAY,WAAZ,CAEA,KAAKyG,EAAL,CAAUA,EAAV,CACA,KAAKC,EAAL,CAAUA,EAAV,CAEA,CAEDk4E,QAAQ,CAAEn8E,CAAF,CAAKq8E,cAAc,CAAG,IAAIpkG,OAAJ,EAAtB,CAAsC,CAE7C,MAAMoiC,KAAK,CAAGgiE,cAAd,CAEA,GAAKr8E,CAAC,GAAK,CAAX,CAAe,CAEdqa,KAAK,CAACpZ,IAAN,CAAY,KAAKgD,EAAjB,EAEA,CAJD,KAIO,CAENoW,KAAK,CAACpZ,IAAN,CAAY,KAAKgD,EAAjB,EAAsBpC,GAAtB,CAA2B,KAAKmC,EAAhC,EACAqW,KAAK,CAACpY,cAAN,CAAsBjC,CAAtB,EAA0BmB,GAA1B,CAA+B,KAAK6C,EAApC,EAEA,CAED,OAAOqW,KAAP,CAEA,CAED;EACA+hE,UAAU,CAAEvjE,CAAF,CAAKwjE,cAAL,CAAsB,CAE/B,YAAYF,QAAL,CAAetjE,CAAf,CAAkBwjE,cAAlB,CAAP,CAEA,CAEDqB,UAAU,CAAE19E,CAAF,CAAKq8E,cAAL,CAAsB,CAE/B,MAAMnjD,OAAO,CAAGmjD,cAAc,EAAI,IAAIpkG,OAAJ,EAAlC,CAEAihD,OAAO,CAACj4B,IAAR,CAAc,KAAKgD,EAAnB,EAAwBpC,GAAxB,CAA6B,KAAKmC,EAAlC,EAAuCX,SAAvC,GAEA,OAAO61B,OAAP,CAEA,CAEDj4B,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAK3I,EAAL,CAAQ/C,IAAR,CAAc0L,MAAM,CAAC3I,EAArB,EACA,KAAKC,EAAL,CAAQhD,IAAR,CAAc0L,MAAM,CAAC1I,EAArB,EAEA,WAAA,CAEA,CAEDrO,MAAM,EAAG,CAER,MAAMsY,IAAI,CAAG,MAAMtY,MAAN,EAAb,CAEAsY,IAAI,CAAClK,EAAL,CAAU,KAAKA,EAAL,CAAQI,OAAR,EAAV,CACA8J,IAAI,CAACjK,EAAL,CAAU,KAAKA,EAAL,CAAQG,OAAR,EAAV,CAEA,OAAO8J,IAAP,CAEA,CAEDmxB,QAAQ,CAAEk/C,IAAF,CAAS,CAEhB,MAAMl/C,QAAN,CAAgBk/C,IAAhB,EAEA,KAAKv6E,EAAL,CAAQE,SAAR,CAAmBq6E,IAAI,CAACv6E,EAAxB,EACA,KAAKC,EAAL,CAAQC,SAAR,CAAmBq6E,IAAI,CAACt6E,EAAxB,EAEA,WAAA,CAEA,CAhF4B,CAoF9B3K,SAAS,CAAC0L,SAAV,CAAoBs7E,WAApB,CAAkC,IAAlC,CAEA,MAAM/mF,UAAN,SAAyBtB,KAAM,CAE9BoI,WAAW,CAAE2D,EAAE,CAAG,IAAInrB,OAAJ,EAAP,CAAsBorB,EAAE,CAAG,IAAIprB,OAAJ,EAA3B,CAA2C,CAErD,QAEA,KAAK0kB,IAAL,CAAY,YAAZ,CACA,KAAKgjF,YAAL,CAAoB,IAApB,CAEA,KAAKv8E,EAAL,CAAUA,EAAV,CACA,KAAKC,EAAL,CAAUA,EAAV,CAEA,CACDk4E,QAAQ,CAAEn8E,CAAF,CAAKq8E,cAAc,CAAG,IAAIxjG,OAAJ,EAAtB,CAAsC,CAE7C,MAAMwhC,KAAK,CAAGgiE,cAAd,CAEA,GAAKr8E,CAAC,GAAK,CAAX,CAAe,CAEdqa,KAAK,CAACpZ,IAAN,CAAY,KAAKgD,EAAjB,EAEA,CAJD,KAIO,CAENoW,KAAK,CAACpZ,IAAN,CAAY,KAAKgD,EAAjB,EAAsBpC,GAAtB,CAA2B,KAAKmC,EAAhC,EACAqW,KAAK,CAACpY,cAAN,CAAsBjC,CAAtB,EAA0BmB,GAA1B,CAA+B,KAAK6C,EAApC,EAEA,CAED,OAAOqW,KAAP,CAEA,CACD;EACA+hE,UAAU,CAAEvjE,CAAF,CAAKwjE,cAAL,CAAsB,CAE/B,YAAYF,QAAL,CAAetjE,CAAf,CAAkBwjE,cAAlB,CAAP,CAEA,CACDp7E,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAK3I,EAAL,CAAQ/C,IAAR,CAAc0L,MAAM,CAAC3I,EAArB,EACA,KAAKC,EAAL,CAAQhD,IAAR,CAAc0L,MAAM,CAAC1I,EAArB,EAEA,WAAA,CAEA,CACDrO,MAAM,EAAG,CAER,MAAMsY,IAAI,CAAG,MAAMtY,MAAN,EAAb,CAEAsY,IAAI,CAAClK,EAAL,CAAU,KAAKA,EAAL,CAAQI,OAAR,EAAV,CACA8J,IAAI,CAACjK,EAAL,CAAU,KAAKA,EAAL,CAAQG,OAAR,EAAV,CAEA,OAAO8J,IAAP,CAEA,CACDmxB,QAAQ,CAAEk/C,IAAF,CAAS,CAEhB,MAAMl/C,QAAN,CAAgBk/C,IAAhB,EAEA,KAAKv6E,EAAL,CAAQE,SAAR,CAAmBq6E,IAAI,CAACv6E,EAAxB,EACA,KAAKC,EAAL,CAAQC,SAAR,CAAmBq6E,IAAI,CAACt6E,EAAxB,EAEA,WAAA,CAEA,CAlE6B,CAsE/B,MAAMzK,oBAAN,SAAmCvB,KAAM,CAExCoI,WAAW,CAAE4b,EAAE,CAAG,IAAIhkC,OAAJ,EAAP,CAAsB+rB,EAAE,CAAG,IAAI/rB,OAAJ,EAA3B,CAA0CgsB,EAAE,CAAG,IAAIhsB,OAAJ,EAA/C,CAA+D,CAEzE,QAEA,KAAKslB,IAAL,CAAY,sBAAZ,CAEA,KAAK0e,EAAL,CAAUA,EAAV,CACA,KAAKjY,EAAL,CAAUA,EAAV,CACA,KAAKC,EAAL,CAAUA,EAAV,CAEA,CAEDk4E,QAAQ,CAAEn8E,CAAF,CAAKq8E,cAAc,CAAG,IAAIpkG,OAAJ,EAAtB,CAAsC,CAE7C,MAAMoiC,KAAK,CAAGgiE,cAAd,CAEA,MAAMpgE,EAAE,CAAG,KAAKA,EAAhB,CAAoBjY,EAAE,CAAG,KAAKA,EAA9B,CAAkCC,EAAE,CAAG,KAAKA,EAA5C,CAEAoW,KAAK,CAAC7Z,GAAN,CACC1H,eAAe,CAAEkH,CAAF,CAAKic,EAAE,CAACnc,CAAR,CAAWkE,EAAE,CAAClE,CAAd,CAAiBmE,EAAE,CAACnE,CAApB,CADhB,CAEChH,eAAe,CAAEkH,CAAF,CAAKic,EAAE,CAAClc,CAAR,CAAWiE,EAAE,CAACjE,CAAd,CAAiBkE,EAAE,CAAClE,CAApB,CAFhB,EAKA,OAAOsa,KAAP,CAEA,CAEDpZ,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKsP,EAAL,CAAQhb,IAAR,CAAc0L,MAAM,CAACsP,EAArB,EACA,KAAKjY,EAAL,CAAQ/C,IAAR,CAAc0L,MAAM,CAAC3I,EAArB,EACA,KAAKC,EAAL,CAAQhD,IAAR,CAAc0L,MAAM,CAAC1I,EAArB,EAEA,WAAA,CAEA,CAEDrO,MAAM,EAAG,CAER,MAAMsY,IAAI,CAAG,MAAMtY,MAAN,EAAb,CAEAsY,IAAI,CAAC+N,EAAL,CAAU,KAAKA,EAAL,CAAQ7X,OAAR,EAAV,CACA8J,IAAI,CAAClK,EAAL,CAAU,KAAKA,EAAL,CAAQI,OAAR,EAAV,CACA8J,IAAI,CAACjK,EAAL,CAAU,KAAKA,EAAL,CAAQG,OAAR,EAAV,CAEA,OAAO8J,IAAP,CAEA,CAEDmxB,QAAQ,CAAEk/C,IAAF,CAAS,CAEhB,MAAMl/C,QAAN,CAAgBk/C,IAAhB,EAEA,KAAKtiE,EAAL,CAAQ/X,SAAR,CAAmBq6E,IAAI,CAACtiE,EAAxB,EACA,KAAKjY,EAAL,CAAQE,SAAR,CAAmBq6E,IAAI,CAACv6E,EAAxB,EACA,KAAKC,EAAL,CAAQC,SAAR,CAAmBq6E,IAAI,CAACt6E,EAAxB,EAEA,WAAA,CAEA,CA/DuC,CAmEzCzK,oBAAoB,CAACwL,SAArB,CAA+Bw7E,sBAA/B,CAAwD,IAAxD,CAEA,MAAM/mF,qBAAN,SAAoCxB,KAAM,CAEzCoI,WAAW,CAAE4b,EAAE,CAAG,IAAIpjC,OAAJ,EAAP,CAAsBmrB,EAAE,CAAG,IAAInrB,OAAJ,EAA3B,CAA0CorB,EAAE,CAAG,IAAIprB,OAAJ,EAA/C,CAA+D,CAEzE,QAEA,KAAK0kB,IAAL,CAAY,uBAAZ,CAEA,KAAK0e,EAAL,CAAUA,EAAV,CACA,KAAKjY,EAAL,CAAUA,EAAV,CACA,KAAKC,EAAL,CAAUA,EAAV,CAEA,CAEDk4E,QAAQ,CAAEn8E,CAAF,CAAKq8E,cAAc,CAAG,IAAIxjG,OAAJ,EAAtB,CAAsC,CAE7C,MAAMwhC,KAAK,CAAGgiE,cAAd,CAEA,MAAMpgE,EAAE,CAAG,KAAKA,EAAhB,CAAoBjY,EAAE,CAAG,KAAKA,EAA9B,CAAkCC,EAAE,CAAG,KAAKA,EAA5C,CAEAoW,KAAK,CAAC7Z,GAAN,CACC1H,eAAe,CAAEkH,CAAF,CAAKic,EAAE,CAACnc,CAAR,CAAWkE,EAAE,CAAClE,CAAd,CAAiBmE,EAAE,CAACnE,CAApB,CADhB,CAEChH,eAAe,CAAEkH,CAAF,CAAKic,EAAE,CAAClc,CAAR,CAAWiE,EAAE,CAACjE,CAAd,CAAiBkE,EAAE,CAAClE,CAApB,CAFhB,CAGCjH,eAAe,CAAEkH,CAAF,CAAKic,EAAE,CAAC9N,CAAR,CAAWnK,EAAE,CAACmK,CAAd,CAAiBlK,EAAE,CAACkK,CAApB,CAHhB,EAMA,OAAOkM,KAAP,CAEA,CAEDpZ,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKsP,EAAL,CAAQhb,IAAR,CAAc0L,MAAM,CAACsP,EAArB,EACA,KAAKjY,EAAL,CAAQ/C,IAAR,CAAc0L,MAAM,CAAC3I,EAArB,EACA,KAAKC,EAAL,CAAQhD,IAAR,CAAc0L,MAAM,CAAC1I,EAArB,EAEA,WAAA,CAEA,CAEDrO,MAAM,EAAG,CAER,MAAMsY,IAAI,CAAG,MAAMtY,MAAN,EAAb,CAEAsY,IAAI,CAAC+N,EAAL,CAAU,KAAKA,EAAL,CAAQ7X,OAAR,EAAV,CACA8J,IAAI,CAAClK,EAAL,CAAU,KAAKA,EAAL,CAAQI,OAAR,EAAV,CACA8J,IAAI,CAACjK,EAAL,CAAU,KAAKA,EAAL,CAAQG,OAAR,EAAV,CAEA,OAAO8J,IAAP,CAEA,CAEDmxB,QAAQ,CAAEk/C,IAAF,CAAS,CAEhB,MAAMl/C,QAAN,CAAgBk/C,IAAhB,EAEA,KAAKtiE,EAAL,CAAQ/X,SAAR,CAAmBq6E,IAAI,CAACtiE,EAAxB,EACA,KAAKjY,EAAL,CAAQE,SAAR,CAAmBq6E,IAAI,CAACv6E,EAAxB,EACA,KAAKC,EAAL,CAAQC,SAAR,CAAmBq6E,IAAI,CAACt6E,EAAxB,EAEA,WAAA,CAEA,CAhEwC,CAoE1CxK,qBAAqB,CAACuL,SAAtB,CAAgCy7E,uBAAhC,CAA0D,IAA1D,CAEA,MAAM/mF,WAAN,SAA0BzB,KAAM,CAE/BoI,WAAW,CAAEmZ,MAAM,CAAG,EAAX,CAAgB,CAE1B,QAEA,KAAKjc,IAAL,CAAY,aAAZ,CAEA,KAAKic,MAAL,CAAcA,MAAd,CAEA,CAED2iE,QAAQ,CAAEn8E,CAAF,CAAKq8E,cAAc,CAAG,IAAIpkG,OAAJ,EAAtB,CAAsC,CAE7C,MAAMoiC,KAAK,CAAGgiE,cAAd,CAEA,MAAM7iE,MAAM,CAAG,KAAKA,MAApB,CACA,MAAMlF,CAAC,CAAG,CAAEkF,MAAM,CAAC9a,MAAP,CAAgB,CAAlB,EAAwBsB,CAAlC,CAEA,MAAMigF,QAAQ,CAAGrhF,IAAI,CAACsB,KAAL,CAAYoU,CAAZ,CAAjB,CACA,MAAMkrC,MAAM,CAAGlrC,CAAC,CAAG2rE,QAAnB,CAEA,MAAM7jE,EAAE,CAAG5C,MAAM,CAAEymE,QAAQ,GAAK,CAAb,CAAiBA,QAAjB,CAA4BA,QAAQ,CAAG,CAAzC,CAAjB,CACA,MAAM5jE,EAAE,CAAG7C,MAAM,CAAEymE,QAAF,CAAjB,CACA,MAAM3jE,EAAE,CAAG9C,MAAM,CAAEymE,QAAQ,CAAGzmE,MAAM,CAAC9a,MAAP,CAAgB,CAA3B,CAA+B8a,MAAM,CAAC9a,MAAP,CAAgB,CAA/C,CAAmDuhF,QAAQ,CAAG,CAAhE,CAAjB,CACA,MAAMl0D,EAAE,CAAGvS,MAAM,CAAEymE,QAAQ,CAAGzmE,MAAM,CAAC9a,MAAP,CAAgB,CAA3B,CAA+B8a,MAAM,CAAC9a,MAAP,CAAgB,CAA/C,CAAmDuhF,QAAQ,CAAG,CAAhE,CAAjB,CAEA5lE,KAAK,CAAC7Z,GAAN,CACC9H,UAAU,CAAE8mD,MAAF,CAAUpjC,EAAE,CAACtc,CAAb,CAAgBuc,EAAE,CAACvc,CAAnB,CAAsBwc,EAAE,CAACxc,CAAzB,CAA4BisB,EAAE,CAACjsB,CAA/B,CADX,CAECpH,UAAU,CAAE8mD,MAAF,CAAUpjC,EAAE,CAACrc,CAAb,CAAgBsc,EAAE,CAACtc,CAAnB,CAAsBuc,EAAE,CAACvc,CAAzB,CAA4BgsB,EAAE,CAAChsB,CAA/B,CAFX,EAKA,OAAOsa,KAAP,CAEA,CAEDpZ,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAK6M,MAAL,CAAc,EAAd,CAEA,IAAM,IAAIhb,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGkO,MAAM,CAAC6M,MAAP,CAAc9a,MAAnC,CAA2CF,CAAC,CAAGC,CAA/C,CAAkDD,CAAC,EAAnD,CAAyD,CAExD,MAAM6b,KAAK,CAAG1N,MAAM,CAAC6M,MAAP,CAAehb,CAAf,CAAd,CAEA,KAAKgb,MAAL,CAAY3b,IAAZ,CAAkBwc,KAAK,CAACrZ,KAAN,EAAlB,EAEA,CAED,WAAA,CAEA,CAEDpL,MAAM,EAAG,CAER,MAAMsY,IAAI,CAAG,MAAMtY,MAAN,EAAb,CAEAsY,IAAI,CAACsL,MAAL,CAAc,EAAd,CAEA,IAAM,IAAIhb,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG,KAAK+a,MAAL,CAAY9a,MAAjC,CAAyCF,CAAC,CAAGC,CAA7C,CAAgDD,CAAC,EAAjD,CAAuD,CAEtD,MAAM6b,KAAK,CAAG,KAAKb,MAAL,CAAahb,CAAb,CAAd,CACA0P,IAAI,CAACsL,MAAL,CAAY3b,IAAZ,CAAkBwc,KAAK,CAACjW,OAAN,EAAlB,EAEA,CAED,OAAO8J,IAAP,CAEA,CAEDmxB,QAAQ,CAAEk/C,IAAF,CAAS,CAEhB,MAAMl/C,QAAN,CAAgBk/C,IAAhB,EAEA,KAAK/kE,MAAL,CAAc,EAAd,CAEA,IAAM,IAAIhb,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG8/E,IAAI,CAAC/kE,MAAL,CAAY9a,MAAjC,CAAyCF,CAAC,CAAGC,CAA7C,CAAgDD,CAAC,EAAjD,CAAuD,CAEtD,MAAM6b,KAAK,CAAGkkE,IAAI,CAAC/kE,MAAL,CAAahb,CAAb,CAAd,CACA,KAAKgb,MAAL,CAAY3b,IAAZ,CAAkB,IAAI5lB,OAAJ,GAAcisB,SAAd,CAAyBmW,KAAzB,CAAlB,EAEA,CAED,WAAA,CAEA,CAtF8B,CA0FhC3gB,WAAW,CAACsL,SAAZ,CAAsB07E,aAAtB,CAAsC,IAAtC,CAEA,IAAI/mF,MAAM,cAAgBiS,MAAM,CAAC+0E,MAAP,CAAc,CACvCC,SAAS,CAAE,IAD4B,CAEvCzoF,QAAQ,CAAEA,QAF6B,CAGvCM,gBAAgB,CAAEA,gBAHqB,CAIvCW,gBAAgB,CAAEA,gBAJqB,CAKvCC,iBAAiB,CAAEA,iBALoB,CAMvCnB,YAAY,CAAEA,YANyB,CAOvCoB,SAAS,CAAEA,SAP4B,CAQvCC,UAAU,CAAEA,UAR2B,CASvCC,oBAAoB,CAAEA,oBATiB,CAUvCC,qBAAqB,CAAEA,qBAVgB,CAWvCC,WAAW,CAAEA,WAX0B,CAAd,CAA1B,CAcA;EACA;EACA;EACA,gEAEA,MAAME,SAAN,SAAwB3B,KAAM,CAE7BoI,WAAW,EAAG,CAEb,QAEA,KAAK9C,IAAL,CAAY,WAAZ,CAEA,KAAKsjF,MAAL,CAAc,EAAd,CACA,KAAKC,SAAL,CAAiB,KAAjB,CAAwB;EAExB,CAED3/E,GAAG,CAAE4/E,KAAF,CAAU,CAEZ,KAAKF,MAAL,CAAYhjF,IAAZ,CAAkBkjF,KAAlB,EAEA,CAEDC,SAAS,EAAG;EAGX,MAAMC,UAAU,CAAG,KAAKJ,MAAL,CAAa,CAAb,EAAiB1E,QAAjB,CAA2B,CAA3B,CAAnB,CACA,MAAM+E,QAAQ,CAAG,KAAKL,MAAL,CAAa,KAAKA,MAAL,CAAYniF,MAAZ,CAAqB,CAAlC,EAAsCy9E,QAAtC,CAAgD,CAAhD,CAAjB,CAEA,GAAK,CAAE8E,UAAU,CAACttF,MAAX,CAAmButF,QAAnB,CAAP,CAAuC,CAEtC,KAAKL,MAAL,CAAYhjF,IAAZ,CAAkB,IAAIvE,SAAJ,CAAe4nF,QAAf,CAAyBD,UAAzB,CAAlB,EAEA,CAED,CAED;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA9E,QAAQ,CAAEn8E,CAAF,CAAKq8E,cAAL,CAAsB,CAE7B,MAAMx0E,CAAC,CAAG7H,CAAC,CAAG,KAAK08E,SAAL,EAAd,CACA,MAAMyE,YAAY,CAAG,KAAKC,eAAL,EAArB,CACA,IAAI5iF,CAAC,CAAG,CAAR,CAEA;EAEA,MAAQA,CAAC,CAAG2iF,YAAY,CAACziF,MAAzB,CAAkC,CAEjC,GAAKyiF,YAAY,CAAE3iF,CAAF,CAAZ,EAAqBqJ,CAA1B,CAA8B,CAE7B,MAAMw5E,IAAI,CAAGF,YAAY,CAAE3iF,CAAF,CAAZ,CAAoBqJ,CAAjC,CACA,MAAMk5E,KAAK,CAAG,KAAKF,MAAL,CAAariF,CAAb,CAAd,CAEA,MAAMg/E,aAAa,CAAGuD,KAAK,CAACrE,SAAN,EAAtB,CACA,MAAM7jE,CAAC,CAAG2kE,aAAa,GAAK,CAAlB,CAAsB,CAAtB,CAA0B,EAAI6D,IAAI,CAAG7D,aAA/C,CAEA,OAAOuD,KAAK,CAAC3E,UAAN,CAAkBvjE,CAAlB,CAAqBwjE,cAArB,CAAP,CAEA,CAED79E,CAAC,GAED,CAED,WAAA,CAEA;EAEA,CAED;EACA;EACA;EAEAk+E,SAAS,EAAG,CAEX,MAAM4E,IAAI,CAAG,KAAKF,eAAL,EAAb,CACA,OAAOE,IAAI,CAAEA,IAAI,CAAC5iF,MAAL,CAAc,CAAhB,CAAX,CAEA,CAED;EACAs+E,gBAAgB,EAAG,CAElB,KAAKlvE,WAAL,CAAmB,IAAnB,CACA,KAAKyzE,YAAL,CAAoB,IAApB,CACA,KAAKH,eAAL,GAEA,CAED;EACA;EAEAA,eAAe,EAAG;EAIjB,GAAK,KAAKG,YAAL,EAAqB,KAAKA,YAAL,CAAkB7iF,MAAlB,GAA6B,KAAKmiF,MAAL,CAAYniF,MAAnE,CAA4E,CAE3E,YAAY6iF,YAAZ,CAEA,CAED;EACA;EAEA,MAAM5E,OAAO,CAAG,EAAhB,CACA,IAAI6E,IAAI,CAAG,CAAX,CAEA,IAAM,IAAIhjF,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG,KAAKoiF,MAAL,CAAYniF,MAAjC,CAAyCF,CAAC,CAAGC,CAA7C,CAAgDD,CAAC,EAAjD,CAAuD,CAEtDgjF,IAAI,EAAI,KAAKX,MAAL,CAAariF,CAAb,EAAiBk+E,SAAjB,EAAR,CACAC,OAAO,CAAC9+E,IAAR,CAAc2jF,IAAd,EAEA,CAED,KAAKD,YAAL,CAAoB5E,OAApB,CAEA,OAAOA,OAAP,CAEA,CAEDF,eAAe,CAAED,SAAS,CAAG,EAAd,CAAmB,CAEjC,MAAMhjE,MAAM,CAAG,EAAf,CAEA,IAAM,IAAIhb,CAAC,CAAG,CAAd,CAAiBA,CAAC,EAAIg+E,SAAtB,CAAiCh+E,CAAC,EAAlC,CAAwC,CAEvCgb,MAAM,CAAC3b,IAAP,CAAa,KAAKs+E,QAAL,CAAe39E,CAAC,CAAGg+E,SAAnB,CAAb,EAEA,CAED,GAAK,KAAKsE,SAAV,CAAsB,CAErBtnE,MAAM,CAAC3b,IAAP,CAAa2b,MAAM,CAAE,CAAF,CAAnB,EAEA,CAED,OAAOA,MAAP,CAEA,CAED+iE,SAAS,CAAEC,SAAS,CAAG,EAAd,CAAmB,CAE3B,MAAMhjE,MAAM,CAAG,EAAf,CACA,IAAIujE,IAAJ,CAEA,IAAM,IAAIv+E,CAAC,CAAG,CAAR,CAAWqiF,MAAM,CAAG,KAAKA,MAA/B,CAAuCriF,CAAC,CAAGqiF,MAAM,CAACniF,MAAlD,CAA0DF,CAAC,EAA3D,CAAiE,CAEhE,MAAMuiF,KAAK,CAAGF,MAAM,CAAEriF,CAAF,CAApB,CACA,MAAM+1D,UAAU,CAAKwsB,KAAK,EAAIA,KAAK,CAAC5B,cAAjB,CAAoC3C,SAAS,CAAG,CAAhD,CACduE,KAAK,GAAMA,KAAK,CAACT,WAAN,EAAqBS,KAAK,CAACR,YAAjC,CAAP,CAA2D,CAA3D,CACGQ,KAAK,EAAIA,KAAK,CAACL,aAAjB,CAAmClE,SAAS,CAAGuE,KAAK,CAACvnE,MAAN,CAAa9a,MAA5D,CACC89E,SAHL,CAKA,MAAMiF,GAAG,CAAGV,KAAK,CAACxE,SAAN,CAAiBhoB,UAAjB,CAAZ,CAEA,IAAM,IAAIp4C,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGslE,GAAG,CAAC/iF,MAAzB,CAAiCyd,CAAC,EAAlC,CAAwC,CAEvC,MAAM9B,KAAK,CAAGonE,GAAG,CAAEtlE,CAAF,CAAjB,CAEA,GAAK4gE,IAAI,EAAIA,IAAI,CAACppF,MAAL,CAAa0mB,KAAb,CAAb,CAAoC,SAAU;EAE9Cb,MAAM,CAAC3b,IAAP,CAAawc,KAAb,EACA0iE,IAAI,CAAG1iE,KAAP,CAEA,CAED,CAED,GAAK,KAAKymE,SAAL,EAAkBtnE,MAAM,CAAC9a,MAAP,CAAgB,CAAlC,EAAuC,CAAE8a,MAAM,CAAEA,MAAM,CAAC9a,MAAP,CAAgB,CAAlB,CAAN,CAA4B/K,MAA5B,CAAoC6lB,MAAM,CAAE,CAAF,CAA1C,CAA9C,CAAkG,CAEjGA,MAAM,CAAC3b,IAAP,CAAa2b,MAAM,CAAE,CAAF,CAAnB,EAEA,CAED,OAAOA,MAAP,CAEA,CAEDvY,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKk0E,MAAL,CAAc,EAAd,CAEA,IAAM,IAAIriF,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGkO,MAAM,CAACk0E,MAAP,CAAcniF,MAAnC,CAA2CF,CAAC,CAAGC,CAA/C,CAAkDD,CAAC,EAAnD,CAAyD,CAExD,MAAMuiF,KAAK,CAAGp0E,MAAM,CAACk0E,MAAP,CAAeriF,CAAf,CAAd,CAEA,KAAKqiF,MAAL,CAAYhjF,IAAZ,CAAkBkjF,KAAK,CAAC//E,KAAN,EAAlB,EAEA,CAED,KAAK8/E,SAAL,CAAiBn0E,MAAM,CAACm0E,SAAxB,CAEA,WAAA,CAEA,CAEDlrF,MAAM,EAAG,CAER,MAAMsY,IAAI,CAAG,MAAMtY,MAAN,EAAb,CAEAsY,IAAI,CAAC4yE,SAAL,CAAiB,KAAKA,SAAtB,CACA5yE,IAAI,CAAC2yE,MAAL,CAAc,EAAd,CAEA,IAAM,IAAIriF,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG,KAAKoiF,MAAL,CAAYniF,MAAjC,CAAyCF,CAAC,CAAGC,CAA7C,CAAgDD,CAAC,EAAjD,CAAuD,CAEtD,MAAMuiF,KAAK,CAAG,KAAKF,MAAL,CAAariF,CAAb,CAAd,CACA0P,IAAI,CAAC2yE,MAAL,CAAYhjF,IAAZ,CAAkBkjF,KAAK,CAACnrF,MAAN,EAAlB,EAEA,CAED,OAAOsY,IAAP,CAEA,CAEDmxB,QAAQ,CAAEk/C,IAAF,CAAS,CAEhB,MAAMl/C,QAAN,CAAgBk/C,IAAhB,EAEA,KAAKuC,SAAL,CAAiBvC,IAAI,CAACuC,SAAtB,CACA,KAAKD,MAAL,CAAc,EAAd,CAEA,IAAM,IAAIriF,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG8/E,IAAI,CAACsC,MAAL,CAAYniF,MAAjC,CAAyCF,CAAC,CAAGC,CAA7C,CAAgDD,CAAC,EAAjD,CAAuD,CAEtD,MAAMuiF,KAAK,CAAGxC,IAAI,CAACsC,MAAL,CAAariF,CAAb,CAAd,CACA,KAAKqiF,MAAL,CAAYhjF,IAAZ,CAAkB,IAAIlE,MAAM,CAAEonF,KAAK,CAACxjF,IAAR,CAAV,GAA2B8hC,QAA3B,CAAqC0hD,KAArC,CAAlB,EAEA,CAED,WAAA,CAEA,CA9O4B,CAkP9B,MAAMlnF,IAAN,SAAmBD,SAAU,CAE5ByG,WAAW,CAAEmZ,MAAF,CAAW,CAErB,QACA,KAAKjc,IAAL,CAAY,MAAZ,CAEA,KAAKmkF,YAAL,CAAoB,IAAIzpG,OAAJ,EAApB,CAEA,GAAKuhC,MAAL,CAAc,CAEb,KAAKD,aAAL,CAAoBC,MAApB,EAEA,CAED,CAEDD,aAAa,CAAEC,MAAF,CAAW,CAEvB,KAAKmoE,MAAL,CAAanoE,MAAM,CAAE,CAAF,CAAN,CAAY1Z,CAAzB,CAA4B0Z,MAAM,CAAE,CAAF,CAAN,CAAYzZ,CAAxC,EAEA,IAAM,IAAIvB,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG+a,MAAM,CAAC9a,MAA5B,CAAoCF,CAAC,CAAGC,CAAxC,CAA2CD,CAAC,EAA5C,CAAkD,CAEjD,KAAKojF,MAAL,CAAapoE,MAAM,CAAEhb,CAAF,CAAN,CAAYsB,CAAzB,CAA4B0Z,MAAM,CAAEhb,CAAF,CAAN,CAAYuB,CAAxC,EAEA,CAED,WAAA,CAEA,CAED4hF,MAAM,CAAE7hF,CAAF,CAAKC,CAAL,CAAS,CAEd,KAAK2hF,YAAL,CAAkBlhF,GAAlB,CAAuBV,CAAvB,CAA0BC,CAA1B,EAA+B;EAE/B,WAAA,CAEA,CAED6hF,MAAM,CAAE9hF,CAAF,CAAKC,CAAL,CAAS,CAEd,MAAMghF,KAAK,CAAG,IAAIznF,SAAJ,CAAe,KAAKooF,YAAL,CAAkB1gF,KAAlB,EAAf,CAA0C,IAAI/oB,OAAJ,CAAa6nB,CAAb,CAAgBC,CAAhB,CAA1C,CAAd,CACA,KAAK8gF,MAAL,CAAYhjF,IAAZ,CAAkBkjF,KAAlB,EAEA,KAAKW,YAAL,CAAkBlhF,GAAlB,CAAuBV,CAAvB,CAA0BC,CAA1B,EAEA,WAAA,CAEA,CAED8hF,gBAAgB,CAAEC,IAAF,CAAQC,IAAR,CAAcvD,EAAd,CAAkBC,EAAlB,CAAuB,CAEtC,MAAMsC,KAAK,CAAG,IAAIvnF,oBAAJ,CACb,KAAKkoF,YAAL,CAAkB1gF,KAAlB,EADa,CAEb,IAAI/oB,OAAJ,CAAa6pG,IAAb,CAAmBC,IAAnB,CAFa,CAGb,IAAI9pG,OAAJ,CAAaumG,EAAb,CAAiBC,EAAjB,CAHa,CAAd,CAMA,KAAKoC,MAAL,CAAYhjF,IAAZ,CAAkBkjF,KAAlB,EAEA,KAAKW,YAAL,CAAkBlhF,GAAlB,CAAuBg+E,EAAvB,CAA2BC,EAA3B,EAEA,WAAA,CAEA,CAEDuD,aAAa,CAAEC,KAAF,CAASC,KAAT,CAAgBC,KAAhB,CAAuBC,KAAvB,CAA8B5D,EAA9B,CAAkCC,EAAlC,CAAuC,CAEnD,MAAMsC,KAAK,CAAG,IAAI3nF,gBAAJ,CACb,KAAKsoF,YAAL,CAAkB1gF,KAAlB,EADa,CAEb,IAAI/oB,OAAJ,CAAagqG,KAAb,CAAoBC,KAApB,CAFa,CAGb,IAAIjqG,OAAJ,CAAakqG,KAAb,CAAoBC,KAApB,CAHa,CAIb,IAAInqG,OAAJ,CAAaumG,EAAb,CAAiBC,EAAjB,CAJa,CAAd,CAOA,KAAKoC,MAAL,CAAYhjF,IAAZ,CAAkBkjF,KAAlB,EAEA,KAAKW,YAAL,CAAkBlhF,GAAlB,CAAuBg+E,EAAvB,CAA2BC,EAA3B,EAEA,WAAA,CAEA,CAED4D,UAAU,CAAEZ,GAAI,oBAAsB,CAErC,MAAMa,IAAI,CAAG,CAAE,KAAKZ,YAAL,CAAkB1gF,KAAlB,EAAF,EAA8BuhF,MAA9B,CAAsCd,GAAtC,CAAb,CAEA,MAAMV,KAAK,CAAG,IAAIrnF,WAAJ,CAAiB4oF,IAAjB,CAAd,CACA,KAAKzB,MAAL,CAAYhjF,IAAZ,CAAkBkjF,KAAlB,EAEA,KAAKW,YAAL,CAAkBzgF,IAAlB,CAAwBwgF,GAAG,CAAEA,GAAG,CAAC/iF,MAAJ,CAAa,CAAf,CAA3B,EAEA,WAAA,CAEA,CAED8jF,GAAG,CAAEhE,EAAF,CAAMC,EAAN,CAAUW,OAAV,CAAmBR,WAAnB,CAAgCC,SAAhC,CAA2CC,UAA3C,CAAwD,CAE1D,MAAMjtE,EAAE,CAAG,KAAK6vE,YAAL,CAAkB5hF,CAA7B,CACA,MAAMgS,EAAE,CAAG,KAAK4vE,YAAL,CAAkB3hF,CAA7B,CAEA,KAAK0iF,MAAL,CAAajE,EAAE,CAAG3sE,EAAlB,CAAsB4sE,EAAE,CAAG3sE,EAA3B,CAA+BstE,OAA/B,CACCR,WADD,CACcC,SADd,CACyBC,UADzB,EAGA,WAAA,CAEA,CAED2D,MAAM,CAAEjE,EAAF,CAAMC,EAAN,CAAUW,OAAV,CAAmBR,WAAnB,CAAgCC,SAAhC,CAA2CC,UAA3C,CAAwD,CAE7D,KAAK4D,UAAL,CAAiBlE,EAAjB,CAAqBC,EAArB,CAAyBW,OAAzB,CAAkCA,OAAlC,CAA2CR,WAA3C,CAAwDC,SAAxD,CAAmEC,UAAnE,EAEA,WAAA,CAEA,CAED6D,OAAO,CAAEnE,EAAF,CAAMC,EAAN,CAAUC,OAAV,CAAmBC,OAAnB,CAA4BC,WAA5B,CAAyCC,SAAzC,CAAoDC,UAApD,CAAgEC,SAAhE,CAA4E,CAElF,MAAMltE,EAAE,CAAG,KAAK6vE,YAAL,CAAkB5hF,CAA7B,CACA,MAAMgS,EAAE,CAAG,KAAK4vE,YAAL,CAAkB3hF,CAA7B,CAEA,KAAK2iF,UAAL,CAAiBlE,EAAE,CAAG3sE,EAAtB,CAA0B4sE,EAAE,CAAG3sE,EAA/B,CAAmC4sE,OAAnC,CAA4CC,OAA5C,CAAqDC,WAArD,CAAkEC,SAAlE,CAA6EC,UAA7E,CAAyFC,SAAzF,EAEA,WAAA,CAEA,CAED2D,UAAU,CAAElE,EAAF,CAAMC,EAAN,CAAUC,OAAV,CAAmBC,OAAnB,CAA4BC,WAA5B,CAAyCC,SAAzC,CAAoDC,UAApD,CAAgEC,SAAhE,CAA4E,CAErF,MAAMgC,KAAK,CAAG,IAAI7oF,YAAJ,CAAkBsmF,EAAlB,CAAsBC,EAAtB,CAA0BC,OAA1B,CAAmCC,OAAnC,CAA4CC,WAA5C,CAAyDC,SAAzD,CAAoEC,UAApE,CAAgFC,SAAhF,CAAd,CAEA,GAAK,KAAK8B,MAAL,CAAYniF,MAAZ,CAAqB,CAA1B,CAA8B;EAG7B,MAAMkkF,UAAU,CAAG7B,KAAK,CAAC5E,QAAN,CAAgB,CAAhB,CAAnB,CAEA,GAAK,CAAEyG,UAAU,CAACjvF,MAAX,CAAmB,KAAK+tF,YAAxB,CAAP,CAAgD,CAE/C,KAAKE,MAAL,CAAagB,UAAU,CAAC9iF,CAAxB,CAA2B8iF,UAAU,CAAC7iF,CAAtC,EAEA,CAED,CAED,KAAK8gF,MAAL,CAAYhjF,IAAZ,CAAkBkjF,KAAlB,EAEA,MAAM8B,SAAS,CAAG9B,KAAK,CAAC5E,QAAN,CAAgB,CAAhB,CAAlB,CACA,KAAKuF,YAAL,CAAkBzgF,IAAlB,CAAwB4hF,SAAxB,EAEA,WAAA,CAEA,CAED5hF,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAK+0E,YAAL,CAAkBzgF,IAAlB,CAAwB0L,MAAM,CAAC+0E,YAA/B,EAEA,WAAA,CAEA,CAED9rF,MAAM,EAAG,CAER,MAAMsY,IAAI,CAAG,MAAMtY,MAAN,EAAb,CAEAsY,IAAI,CAACwzE,YAAL,CAAoB,KAAKA,YAAL,CAAkBt9E,OAAlB,EAApB,CAEA,OAAO8J,IAAP,CAEA,CAEDmxB,QAAQ,CAAEk/C,IAAF,CAAS,CAEhB,MAAMl/C,QAAN,CAAgBk/C,IAAhB,EAEA,KAAKmD,YAAL,CAAkBx9E,SAAlB,CAA6Bq6E,IAAI,CAACmD,YAAlC,EAEA,WAAA,CAEA,CArL2B,CAyL7B,MAAM5nF,KAAN,SAAoBD,IAAK,CAExBwG,WAAW,CAAEmZ,MAAF,CAAW,CAErB,MAAOA,MAAP,EAEA,KAAKha,IAAL,CAAY7nB,YAAY,EAAxB,CAEA,KAAK4lB,IAAL,CAAY,OAAZ,CAEA,KAAKulF,KAAL,CAAa,EAAb,CAEA,CAEDC,cAAc,CAAEvG,SAAF,CAAc,CAE3B,MAAMwG,QAAQ,CAAG,EAAjB,CAEA,IAAM,IAAIxkF,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG,KAAKqkF,KAAL,CAAWpkF,MAAhC,CAAwCF,CAAC,CAAGC,CAA5C,CAA+CD,CAAC,EAAhD,CAAsD,CAErDwkF,QAAQ,CAAExkF,CAAF,CAAR,CAAgB,KAAKskF,KAAL,CAAYtkF,CAAZ,EAAgB+9E,SAAhB,CAA2BC,SAA3B,CAAhB,CAEA,CAED,OAAOwG,QAAP,CAEA,CAED;EAEAC,aAAa,CAAEzG,SAAF,CAAc,CAE1B,OAAO,CAENjyD,KAAK,CAAE,KAAKgyD,SAAL,CAAgBC,SAAhB,CAFD,CAGNsG,KAAK,CAAE,KAAKC,cAAL,CAAqBvG,SAArB,CAHD,CAAP,CAOA,CAEDv7E,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKm2E,KAAL,CAAa,EAAb,CAEA,IAAM,IAAItkF,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGkO,MAAM,CAACm2E,KAAP,CAAapkF,MAAlC,CAA0CF,CAAC,CAAGC,CAA9C,CAAiDD,CAAC,EAAlD,CAAwD,CAEvD,MAAM0kF,IAAI,CAAGv2E,MAAM,CAACm2E,KAAP,CAActkF,CAAd,CAAb,CAEA,KAAKskF,KAAL,CAAWjlF,IAAX,CAAiBqlF,IAAI,CAACliF,KAAL,EAAjB,EAEA,CAED,WAAA,CAEA,CAEDpL,MAAM,EAAG,CAER,MAAMsY,IAAI,CAAG,MAAMtY,MAAN,EAAb,CAEAsY,IAAI,CAAC1O,IAAL,CAAY,KAAKA,IAAjB,CACA0O,IAAI,CAAC40E,KAAL,CAAa,EAAb,CAEA,IAAM,IAAItkF,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG,KAAKqkF,KAAL,CAAWpkF,MAAhC,CAAwCF,CAAC,CAAGC,CAA5C,CAA+CD,CAAC,EAAhD,CAAsD,CAErD,MAAM0kF,IAAI,CAAG,KAAKJ,KAAL,CAAYtkF,CAAZ,CAAb,CACA0P,IAAI,CAAC40E,KAAL,CAAWjlF,IAAX,CAAiBqlF,IAAI,CAACttF,MAAL,EAAjB,EAEA,CAED,OAAOsY,IAAP,CAEA,CAEDmxB,QAAQ,CAAEk/C,IAAF,CAAS,CAEhB,MAAMl/C,QAAN,CAAgBk/C,IAAhB,EAEA,KAAK/+E,IAAL,CAAY++E,IAAI,CAAC/+E,IAAjB,CACA,KAAKsjF,KAAL,CAAa,EAAb,CAEA,IAAM,IAAItkF,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG8/E,IAAI,CAACuE,KAAL,CAAWpkF,MAAhC,CAAwCF,CAAC,CAAGC,CAA5C,CAA+CD,CAAC,EAAhD,CAAsD,CAErD,MAAM0kF,IAAI,CAAG3E,IAAI,CAACuE,KAAL,CAAYtkF,CAAZ,CAAb,CACA,KAAKskF,KAAL,CAAWjlF,IAAX,CAAiB,IAAIhE,IAAJ,GAAWwlC,QAAX,CAAqB6jD,IAArB,CAAjB,EAEA,CAED,WAAA,CAEA,CA7FuB,CAiGzB;EACA;EACA,GAEA,MAAM7vF,MAAM,CAAG,CAEd8vF,WAAW,CAAE,SAAWj1E,IAAX,CAAiBk1E,WAAjB,CAA8BC,GAAG,CAAG,CAApC,CAAwC,CAEpD,MAAMC,QAAQ,CAAGF,WAAW,EAAIA,WAAW,CAAC1kF,MAA5C,CACA,MAAM6kF,QAAQ,CAAGD,QAAQ,CAAGF,WAAW,CAAE,CAAF,CAAX,CAAmBC,GAAtB,CAA4Bn1E,IAAI,CAACxP,MAA1D,CACA,IAAI8kF,SAAS,CAAGlwF,UAAU,CAAE4a,IAAF,CAAQ,CAAR,CAAWq1E,QAAX,CAAqBF,GAArB,CAA0B,IAA1B,CAA1B,CACA,MAAM3hC,SAAS,CAAG,EAAlB,CAEA,GAAK,CAAE8hC,SAAF,EAAeA,SAAS,CAACj9B,IAAV,GAAmBi9B,SAAS,CAACC,IAAjD,CAAwD,OAAO/hC,SAAP,CAExD,IAAI1oC,IAAJ,CAAUC,IAAV,CAAgBE,IAAhB,CAAsBC,IAAtB,CAA4BtZ,CAA5B,CAA+BC,CAA/B,CAAkC2jF,OAAlC,CAEA,GAAKJ,QAAL,CAAgBE,SAAS,CAAGjwF,cAAc,CAAE2a,IAAF,CAAQk1E,WAAR,CAAqBI,SAArB,CAAgCH,GAAhC,CAA1B,CAEhB;EACA,GAAKn1E,IAAI,CAACxP,MAAL,CAAc,GAAK2kF,GAAxB,CAA8B,CAE7BrqE,IAAI,CAAGG,IAAI,CAAGjL,IAAI,CAAE,CAAF,CAAlB,CACA+K,IAAI,CAAGG,IAAI,CAAGlL,IAAI,CAAE,CAAF,CAAlB,CAEA,IAAM,IAAI1P,CAAC,CAAG6kF,GAAd,CAAmB7kF,CAAC,CAAG+kF,QAAvB,CAAiC/kF,CAAC,EAAI6kF,GAAtC,CAA4C,CAE3CvjF,CAAC,CAAGoO,IAAI,CAAE1P,CAAF,CAAR,CACAuB,CAAC,CAAGmO,IAAI,CAAE1P,CAAC,CAAG,CAAN,CAAR,CACA,GAAKsB,CAAC,CAAGkZ,IAAT,CAAgBA,IAAI,CAAGlZ,CAAP,CAChB,GAAKC,CAAC,CAAGkZ,IAAT,CAAgBA,IAAI,CAAGlZ,CAAP,CAChB,GAAKD,CAAC,CAAGqZ,IAAT,CAAgBA,IAAI,CAAGrZ,CAAP,CAChB,GAAKC,CAAC,CAAGqZ,IAAT,CAAgBA,IAAI,CAAGrZ,CAAP,CAEhB,CAED;EACA2jF,OAAO,CAAG9kF,IAAI,CAACe,GAAL,CAAUwZ,IAAI,CAAGH,IAAjB,CAAuBI,IAAI,CAAGH,IAA9B,CAAV,CACAyqE,OAAO,CAAGA,OAAO,GAAK,CAAZ,CAAgB,EAAIA,OAApB,CAA8B,CAAxC,CAEA,CAEDlwF,YAAY,CAAEgwF,SAAF,CAAa9hC,SAAb,CAAwB2hC,GAAxB,CAA6BrqE,IAA7B,CAAmCC,IAAnC,CAAyCyqE,OAAzC,CAAZ,CAEA,OAAOhiC,SAAP,CAEA,CA1Ca,CAAf,CA8CA;EACA,SAASpuD,UAAT,CAAqB4a,IAArB,CAA2BqqB,KAA3B,CAAkCkF,GAAlC,CAAuC4lD,GAAvC,CAA4CM,SAA5C,CAAwD,CAEvD,IAAInlF,CAAJ,CAAOu+E,IAAP,CAEA,GAAK4G,SAAS,GAAOlwF,UAAU,CAAEya,IAAF,CAAQqqB,KAAR,CAAekF,GAAf,CAAoB4lD,GAApB,CAAV,CAAsC,CAA3D,CAAiE,CAEhE,IAAM7kF,CAAC,CAAG+5B,KAAV,CAAiB/5B,CAAC,CAAGi/B,GAArB,CAA0Bj/B,CAAC,EAAI6kF,GAA/B,CAAqCtG,IAAI,CAAGrpF,UAAU,CAAE8K,CAAF,CAAK0P,IAAI,CAAE1P,CAAF,CAAT,CAAgB0P,IAAI,CAAE1P,CAAC,CAAG,CAAN,CAApB,CAA+Bu+E,IAA/B,CAAjB,CAErC,CAJD,KAIO,CAEN,IAAMv+E,CAAC,CAAGi/B,GAAG,CAAG4lD,GAAhB,CAAqB7kF,CAAC,EAAI+5B,KAA1B,CAAiC/5B,CAAC,EAAI6kF,GAAtC,CAA4CtG,IAAI,CAAGrpF,UAAU,CAAE8K,CAAF,CAAK0P,IAAI,CAAE1P,CAAF,CAAT,CAAgB0P,IAAI,CAAE1P,CAAC,CAAG,CAAN,CAApB,CAA+Bu+E,IAA/B,CAAjB,CAE5C,CAED,GAAKA,IAAI,EAAIppF,MAAM,CAAEopF,IAAF,CAAQA,IAAI,CAACx2B,IAAb,CAAnB,CAAyC,CAExC3yD,UAAU,CAAEmpF,IAAF,CAAV,CACAA,IAAI,CAAGA,IAAI,CAACx2B,IAAZ,CAEA,CAED,OAAOw2B,IAAP,CAEA,CAED;EACA,SAASlpF,YAAT,CAAuB0kC,KAAvB,CAA8BkF,GAA9B,CAAoC,CAEnC,GAAK,CAAElF,KAAP,CAAe,OAAOA,KAAP,CACf,GAAK,CAAEkF,GAAP,CAAaA,GAAG,CAAGlF,KAAN,CAEb,IAAIjkB,CAAC,CAAGikB,KAAR,CACCqrD,KADD,CAEA,EAAG,CAEFA,KAAK,CAAG,KAAR,CAEA,GAAK,CAAEtvE,CAAC,CAACuvE,OAAJ,GAAiBlwF,MAAM,CAAE2gB,CAAF,CAAKA,CAAC,CAACiyC,IAAP,CAAN,EAAuBzyD,IAAI,CAAEwgB,CAAC,CAACmvE,IAAJ,CAAUnvE,CAAV,CAAaA,CAAC,CAACiyC,IAAf,CAAJ,GAA8B,CAAtE,CAAL,CAAiF,CAEhF3yD,UAAU,CAAE0gB,CAAF,CAAV,CACAA,CAAC,CAAGmpB,GAAG,CAAGnpB,CAAC,CAACmvE,IAAZ,CACA,GAAKnvE,CAAC,GAAKA,CAAC,CAACiyC,IAAb,CAAoB,MACpBq9B,KAAK,CAAG,IAAR,CAEA,CAPD,KAOO,CAENtvE,CAAC,CAAGA,CAAC,CAACiyC,IAAN,CAEA,CAED,CAjBD,MAiBUq9B,KAAK,EAAItvE,CAAC,GAAKmpB,GAjBzB,EAmBA,OAAOA,GAAP,CAEA,CAED;EACA,SAASjqC,YAAT,CAAuBswF,GAAvB,CAA4BpiC,SAA5B,CAAuC2hC,GAAvC,CAA4CrqE,IAA5C,CAAkDC,IAAlD,CAAwDyqE,OAAxD,CAAiEK,IAAjE,CAAwE,CAEvE,GAAK,CAAED,GAAP,CAAa,OAEb;EACA,GAAK,CAAEC,IAAF,EAAUL,OAAf,CAAyB3vF,UAAU,CAAE+vF,GAAF,CAAO9qE,IAAP,CAAaC,IAAb,CAAmByqE,OAAnB,CAAV,CAEzB,IAAIj9C,IAAI,CAAGq9C,GAAX,CACCL,IADD,CACOl9B,IADP,CAGA;EACA,MAAQu9B,GAAG,CAACL,IAAJ,GAAaK,GAAG,CAACv9B,IAAzB,CAAgC,CAE/Bk9B,IAAI,CAAGK,GAAG,CAACL,IAAX,CACAl9B,IAAI,CAAGu9B,GAAG,CAACv9B,IAAX,CAEA,GAAKm9B,OAAO,CAAG1vF,WAAW,CAAE8vF,GAAF,CAAO9qE,IAAP,CAAaC,IAAb,CAAmByqE,OAAnB,CAAd,CAA6CzvF,KAAK,CAAE6vF,GAAF,CAA9D,CAAwE;EAGvEpiC,SAAS,CAAC7jD,IAAV,CAAgB4lF,IAAI,CAACjlF,CAAL,CAAS6kF,GAAzB,EACA3hC,SAAS,CAAC7jD,IAAV,CAAgBimF,GAAG,CAACtlF,CAAJ,CAAQ6kF,GAAxB,EACA3hC,SAAS,CAAC7jD,IAAV,CAAgB0oD,IAAI,CAAC/nD,CAAL,CAAS6kF,GAAzB,EAEAzvF,UAAU,CAAEkwF,GAAF,CAAV,CAEA;EACAA,GAAG,CAAGv9B,IAAI,CAACA,IAAX,CACA9f,IAAI,CAAG8f,IAAI,CAACA,IAAZ,CAEA,SAEA,CAEDu9B,GAAG,CAAGv9B,IAAN,CAEA;EACA,GAAKu9B,GAAG,GAAKr9C,IAAb,CAAoB;EAGnB,GAAK,CAAEs9C,IAAP,CAAc,CAEbvwF,YAAY,CAAEK,YAAY,CAAEiwF,GAAF,CAAd,CAAuBpiC,SAAvB,CAAkC2hC,GAAlC,CAAuCrqE,IAAvC,CAA6CC,IAA7C,CAAmDyqE,OAAnD,CAA4D,CAA5D,CAAZ,CAEA;EAEA,CAND,QAMYK,IAAI,GAAK,CAAd,CAAkB,CAExBD,GAAG,CAAG5vF,sBAAsB,CAAEL,YAAY,CAAEiwF,GAAF,CAAd,CAAuBpiC,SAAvB,CAAkC2hC,GAAlC,CAA5B,CACA7vF,YAAY,CAAEswF,GAAF,CAAOpiC,SAAP,CAAkB2hC,GAAlB,CAAuBrqE,IAAvB,CAA6BC,IAA7B,CAAmCyqE,OAAnC,CAA4C,CAA5C,CAAZ,CAEA;EAEA,CAPM,QAOKK,IAAI,GAAK,CAAd,CAAkB,CAExB5vF,WAAW,CAAE2vF,GAAF,CAAOpiC,SAAP,CAAkB2hC,GAAlB,CAAuBrqE,IAAvB,CAA6BC,IAA7B,CAAmCyqE,OAAnC,CAAX,CAEA,CAED,MAEA,CAED,CAED,CAED;EACA,SAASzvF,KAAT,CAAgB6vF,GAAhB,CAAsB,CAErB,MAAMpiF,CAAC,CAAGoiF,GAAG,CAACL,IAAd,CACC9hF,CAAC,CAAGmiF,GADL,CAECn/E,CAAC,CAAGm/E,GAAG,CAACv9B,IAFT,CAIA,GAAKzyD,IAAI,CAAE4N,CAAF,CAAKC,CAAL,CAAQgD,CAAR,CAAJ,EAAmB,CAAxB,CAA4B,YAAA,CAAc;EAE1C;EACA,IAAI2P,CAAC,CAAGwvE,GAAG,CAACv9B,IAAJ,CAASA,IAAjB,CAEA,MAAQjyC,CAAC,GAAKwvE,GAAG,CAACL,IAAlB,CAAyB,CAExB,GAAKrvF,eAAe,CAAEsN,CAAC,CAAC5B,CAAJ,CAAO4B,CAAC,CAAC3B,CAAT,CAAY4B,CAAC,CAAC7B,CAAd,CAAiB6B,CAAC,CAAC5B,CAAnB,CAAsB4E,CAAC,CAAC7E,CAAxB,CAA2B6E,CAAC,CAAC5E,CAA7B,CAAgCuU,CAAC,CAACxU,CAAlC,CAAqCwU,CAAC,CAACvU,CAAvC,CAAf,EACJjM,IAAI,CAAEwgB,CAAC,CAACmvE,IAAJ,CAAUnvE,CAAV,CAAaA,CAAC,CAACiyC,IAAf,CAAJ,EAA6B,CAD9B,CACkC,YAAA,CAClCjyC,CAAC,CAAGA,CAAC,CAACiyC,IAAN,CAEA,CAED,WAAA,CAEA,CAED,SAASvyD,WAAT,CAAsB8vF,GAAtB,CAA2B9qE,IAA3B,CAAiCC,IAAjC,CAAuCyqE,OAAvC,CAAiD,CAEhD,MAAMhiF,CAAC,CAAGoiF,GAAG,CAACL,IAAd,CACC9hF,CAAC,CAAGmiF,GADL,CAECn/E,CAAC,CAAGm/E,GAAG,CAACv9B,IAFT,CAIA,GAAKzyD,IAAI,CAAE4N,CAAF,CAAKC,CAAL,CAAQgD,CAAR,CAAJ,EAAmB,CAAxB,CAA4B,YAAA,CAAc;EAE1C;EACA,MAAMq/E,KAAK,CAAGtiF,CAAC,CAAC5B,CAAF,CAAM6B,CAAC,CAAC7B,CAAR,CAAc4B,CAAC,CAAC5B,CAAF,CAAM6E,CAAC,CAAC7E,CAAR,CAAY4B,CAAC,CAAC5B,CAAd,CAAkB6E,CAAC,CAAC7E,CAAlC,CAA0C6B,CAAC,CAAC7B,CAAF,CAAM6E,CAAC,CAAC7E,CAAR,CAAY6B,CAAC,CAAC7B,CAAd,CAAkB6E,CAAC,CAAC7E,CAA5E,CACCmkF,KAAK,CAAGviF,CAAC,CAAC3B,CAAF,CAAM4B,CAAC,CAAC5B,CAAR,CAAc2B,CAAC,CAAC3B,CAAF,CAAM4E,CAAC,CAAC5E,CAAR,CAAY2B,CAAC,CAAC3B,CAAd,CAAkB4E,CAAC,CAAC5E,CAAlC,CAA0C4B,CAAC,CAAC5B,CAAF,CAAM4E,CAAC,CAAC5E,CAAR,CAAY4B,CAAC,CAAC5B,CAAd,CAAkB4E,CAAC,CAAC5E,CADvE,CAECmkF,KAAK,CAAGxiF,CAAC,CAAC5B,CAAF,CAAM6B,CAAC,CAAC7B,CAAR,CAAc4B,CAAC,CAAC5B,CAAF,CAAM6E,CAAC,CAAC7E,CAAR,CAAY4B,CAAC,CAAC5B,CAAd,CAAkB6E,CAAC,CAAC7E,CAAlC,CAA0C6B,CAAC,CAAC7B,CAAF,CAAM6E,CAAC,CAAC7E,CAAR,CAAY6B,CAAC,CAAC7B,CAAd,CAAkB6E,CAAC,CAAC7E,CAFvE,CAGCqkF,KAAK,CAAGziF,CAAC,CAAC3B,CAAF,CAAM4B,CAAC,CAAC5B,CAAR,CAAc2B,CAAC,CAAC3B,CAAF,CAAM4E,CAAC,CAAC5E,CAAR,CAAY2B,CAAC,CAAC3B,CAAd,CAAkB4E,CAAC,CAAC5E,CAAlC,CAA0C4B,CAAC,CAAC5B,CAAF,CAAM4E,CAAC,CAAC5E,CAAR,CAAY4B,CAAC,CAAC5B,CAAd,CAAkB4E,CAAC,CAAC5E,CAHvE,CAKA;EACA,MAAMmZ,IAAI,CAAG7kB,MAAM,CAAE2vF,KAAF,CAASC,KAAT,CAAgBjrE,IAAhB,CAAsBC,IAAtB,CAA4ByqE,OAA5B,CAAnB,CACCrqE,IAAI,CAAGhlB,MAAM,CAAE6vF,KAAF,CAASC,KAAT,CAAgBnrE,IAAhB,CAAsBC,IAAtB,CAA4ByqE,OAA5B,CADd,CAGA,IAAIpvE,CAAC,CAAGwvE,GAAG,CAACM,KAAZ,CACCxkF,CAAC,CAAGkkF,GAAG,CAACO,KADT,CAGA;EACA,MAAQ/vE,CAAC,EAAIA,CAAC,CAACnG,CAAF,EAAO+K,IAAZ,EAAoBtZ,CAApB,EAAyBA,CAAC,CAACuO,CAAF,EAAOkL,IAAxC,CAA+C,CAE9C,GAAK/E,CAAC,GAAKwvE,GAAG,CAACL,IAAV,EAAkBnvE,CAAC,GAAKwvE,GAAG,CAACv9B,IAA5B,EACJnyD,eAAe,CAAEsN,CAAC,CAAC5B,CAAJ,CAAO4B,CAAC,CAAC3B,CAAT,CAAY4B,CAAC,CAAC7B,CAAd,CAAiB6B,CAAC,CAAC5B,CAAnB,CAAsB4E,CAAC,CAAC7E,CAAxB,CAA2B6E,CAAC,CAAC5E,CAA7B,CAAgCuU,CAAC,CAACxU,CAAlC,CAAqCwU,CAAC,CAACvU,CAAvC,CADX,EAEJjM,IAAI,CAAEwgB,CAAC,CAACmvE,IAAJ,CAAUnvE,CAAV,CAAaA,CAAC,CAACiyC,IAAf,CAAJ,EAA6B,CAF9B,CAEkC,YAAA,CAClCjyC,CAAC,CAAGA,CAAC,CAAC8vE,KAAN,CAEA,GAAKxkF,CAAC,GAAKkkF,GAAG,CAACL,IAAV,EAAkB7jF,CAAC,GAAKkkF,GAAG,CAACv9B,IAA5B,EACJnyD,eAAe,CAAEsN,CAAC,CAAC5B,CAAJ,CAAO4B,CAAC,CAAC3B,CAAT,CAAY4B,CAAC,CAAC7B,CAAd,CAAiB6B,CAAC,CAAC5B,CAAnB,CAAsB4E,CAAC,CAAC7E,CAAxB,CAA2B6E,CAAC,CAAC5E,CAA7B,CAAgCH,CAAC,CAACE,CAAlC,CAAqCF,CAAC,CAACG,CAAvC,CADX,EAEJjM,IAAI,CAAE8L,CAAC,CAAC6jF,IAAJ,CAAU7jF,CAAV,CAAaA,CAAC,CAAC2mD,IAAf,CAAJ,EAA6B,CAF9B,CAEkC,YAAA,CAClC3mD,CAAC,CAAGA,CAAC,CAACykF,KAAN,CAEA,CAED;EACA,MAAQ/vE,CAAC,EAAIA,CAAC,CAACnG,CAAF,EAAO+K,IAApB,CAA2B,CAE1B,GAAK5E,CAAC,GAAKwvE,GAAG,CAACL,IAAV,EAAkBnvE,CAAC,GAAKwvE,GAAG,CAACv9B,IAA5B,EACJnyD,eAAe,CAAEsN,CAAC,CAAC5B,CAAJ,CAAO4B,CAAC,CAAC3B,CAAT,CAAY4B,CAAC,CAAC7B,CAAd,CAAiB6B,CAAC,CAAC5B,CAAnB,CAAsB4E,CAAC,CAAC7E,CAAxB,CAA2B6E,CAAC,CAAC5E,CAA7B,CAAgCuU,CAAC,CAACxU,CAAlC,CAAqCwU,CAAC,CAACvU,CAAvC,CADX,EAEJjM,IAAI,CAAEwgB,CAAC,CAACmvE,IAAJ,CAAUnvE,CAAV,CAAaA,CAAC,CAACiyC,IAAf,CAAJ,EAA6B,CAF9B,CAEkC,YAAA,CAClCjyC,CAAC,CAAGA,CAAC,CAAC8vE,KAAN,CAEA,CAED;EACA,MAAQxkF,CAAC,EAAIA,CAAC,CAACuO,CAAF,EAAOkL,IAApB,CAA2B,CAE1B,GAAKzZ,CAAC,GAAKkkF,GAAG,CAACL,IAAV,EAAkB7jF,CAAC,GAAKkkF,GAAG,CAACv9B,IAA5B,EACJnyD,eAAe,CAAEsN,CAAC,CAAC5B,CAAJ,CAAO4B,CAAC,CAAC3B,CAAT,CAAY4B,CAAC,CAAC7B,CAAd,CAAiB6B,CAAC,CAAC5B,CAAnB,CAAsB4E,CAAC,CAAC7E,CAAxB,CAA2B6E,CAAC,CAAC5E,CAA7B,CAAgCH,CAAC,CAACE,CAAlC,CAAqCF,CAAC,CAACG,CAAvC,CADX,EAEJjM,IAAI,CAAE8L,CAAC,CAAC6jF,IAAJ,CAAU7jF,CAAV,CAAaA,CAAC,CAAC2mD,IAAf,CAAJ,EAA6B,CAF9B,CAEkC,YAAA,CAClC3mD,CAAC,CAAGA,CAAC,CAACykF,KAAN,CAEA,CAED,WAAA,CAEA,CAED;EACA,SAASnwF,sBAAT,CAAiCqkC,KAAjC,CAAwCmpB,SAAxC,CAAmD2hC,GAAnD,CAAyD,CAExD,IAAI/uE,CAAC,CAAGikB,KAAR,CACA,EAAG,CAEF,MAAM72B,CAAC,CAAG4S,CAAC,CAACmvE,IAAZ,CACC9hF,CAAC,CAAG2S,CAAC,CAACiyC,IAAF,CAAOA,IADZ,CAGA,GAAK,CAAE5yD,MAAM,CAAE+N,CAAF,CAAKC,CAAL,CAAR,EAAoBrN,UAAU,CAAEoN,CAAF,CAAK4S,CAAL,CAAQA,CAAC,CAACiyC,IAAV,CAAgB5kD,CAAhB,CAA9B,EAAqDpN,aAAa,CAAEmN,CAAF,CAAKC,CAAL,CAAlE,EAA8EpN,aAAa,CAAEoN,CAAF,CAAKD,CAAL,CAAhG,CAA2G,CAE1GggD,SAAS,CAAC7jD,IAAV,CAAgB6D,CAAC,CAAClD,CAAF,CAAM6kF,GAAtB,EACA3hC,SAAS,CAAC7jD,IAAV,CAAgByW,CAAC,CAAC9V,CAAF,CAAM6kF,GAAtB,EACA3hC,SAAS,CAAC7jD,IAAV,CAAgB8D,CAAC,CAACnD,CAAF,CAAM6kF,GAAtB,EAEA;EACAzvF,UAAU,CAAE0gB,CAAF,CAAV,CACA1gB,UAAU,CAAE0gB,CAAC,CAACiyC,IAAJ,CAAV,CAEAjyC,CAAC,CAAGikB,KAAK,CAAG52B,CAAZ,CAEA,CAED2S,CAAC,CAAGA,CAAC,CAACiyC,IAAN,CAEA,CArBD,MAqBUjyC,CAAC,GAAKikB,KArBhB,EAuBA,OAAO1kC,YAAY,CAAEygB,CAAF,CAAnB,CAEA,CAED;EACA,SAASngB,WAAT,CAAsBokC,KAAtB,CAA6BmpB,SAA7B,CAAwC2hC,GAAxC,CAA6CrqE,IAA7C,CAAmDC,IAAnD,CAAyDyqE,OAAzD,CAAmE;EAGlE,IAAIhiF,CAAC,CAAG62B,KAAR,CACA,EAAG,CAEF,IAAI52B,CAAC,CAAGD,CAAC,CAAC6kD,IAAF,CAAOA,IAAf,CACA,MAAQ5kD,CAAC,GAAKD,CAAC,CAAC+hF,IAAhB,CAAuB,CAEtB,GAAK/hF,CAAC,CAAClD,CAAF,GAAQmD,CAAC,CAACnD,CAAV,EAAehK,eAAe,CAAEkN,CAAF,CAAKC,CAAL,CAAnC,CAA8C;EAG7C,IAAIgD,CAAC,CAAGlQ,YAAY,CAAEiN,CAAF,CAAKC,CAAL,CAApB,CAEA;EACAD,CAAC,CAAG7N,YAAY,CAAE6N,CAAF,CAAKA,CAAC,CAAC6kD,IAAP,CAAhB,CACA5hD,CAAC,CAAG9Q,YAAY,CAAE8Q,CAAF,CAAKA,CAAC,CAAC4hD,IAAP,CAAhB,CAEA;EACA/yD,YAAY,CAAEkO,CAAF,CAAKggD,SAAL,CAAgB2hC,GAAhB,CAAqBrqE,IAArB,CAA2BC,IAA3B,CAAiCyqE,OAAjC,CAAZ,CACAlwF,YAAY,CAAEmR,CAAF,CAAK+8C,SAAL,CAAgB2hC,GAAhB,CAAqBrqE,IAArB,CAA2BC,IAA3B,CAAiCyqE,OAAjC,CAAZ,CACA,OAEA,CAED/hF,CAAC,CAAGA,CAAC,CAAC4kD,IAAN,CAEA,CAED7kD,CAAC,CAAGA,CAAC,CAAC6kD,IAAN,CAEA,CA3BD,MA2BU7kD,CAAC,GAAK62B,KA3BhB,EA6BA,CAED;EACA,SAAShlC,cAAT,CAAyB2a,IAAzB,CAA+Bk1E,WAA/B,CAA4CI,SAA5C,CAAuDH,GAAvD,CAA6D,CAE5D,MAAMiB,KAAK,CAAG,EAAd,CACA,IAAI9lF,CAAJ,CAAOiU,GAAP,CAAY8lB,KAAZ,CAAmBkF,GAAnB,CAAwBsyB,IAAxB,CAEA,IAAMvxD,CAAC,CAAG,CAAJ,CAAOiU,GAAG,CAAG2wE,WAAW,CAAC1kF,MAA/B,CAAuCF,CAAC,CAAGiU,GAA3C,CAAgDjU,CAAC,EAAjD,CAAuD,CAEtD+5B,KAAK,CAAG6qD,WAAW,CAAE5kF,CAAF,CAAX,CAAmB6kF,GAA3B,CACA5lD,GAAG,CAAGj/B,CAAC,CAAGiU,GAAG,CAAG,CAAV,CAAc2wE,WAAW,CAAE5kF,CAAC,CAAG,CAAN,CAAX,CAAuB6kF,GAArC,CAA2Cn1E,IAAI,CAACxP,MAAtD,CACAqxD,IAAI,CAAGz8D,UAAU,CAAE4a,IAAF,CAAQqqB,KAAR,CAAekF,GAAf,CAAoB4lD,GAApB,CAAyB,KAAzB,CAAjB,CACA,GAAKtzB,IAAI,GAAKA,IAAI,CAACxJ,IAAnB,CAA0BwJ,IAAI,CAAC8zB,OAAL,CAAe,IAAf,CAC1BS,KAAK,CAACzmF,IAAN,CAAYnJ,WAAW,CAAEq7D,IAAF,CAAvB,EAEA,CAEDu0B,KAAK,CAAClhC,IAAN,CAAYzuD,QAAZ,EAEA;EACA,IAAM6J,CAAC,CAAG,CAAV,CAAaA,CAAC,CAAG8lF,KAAK,CAAC5lF,MAAvB,CAA+BF,CAAC,EAAhC,CAAsC,CAErC5J,aAAa,CAAE0vF,KAAK,CAAE9lF,CAAF,CAAP,CAAcglF,SAAd,CAAb,CACAA,SAAS,CAAG3vF,YAAY,CAAE2vF,SAAF,CAAaA,SAAS,CAACj9B,IAAvB,CAAxB,CAEA,CAED,OAAOi9B,SAAP,CAEA,CAED,SAAS7uF,QAAT,CAAmB+M,CAAnB,CAAsBC,CAAtB,CAA0B,CAEzB,OAAOD,CAAC,CAAC5B,CAAF,CAAM6B,CAAC,CAAC7B,CAAf,CAEA,CAED;EACA,SAASlL,aAAT,CAAwBsuF,IAAxB,CAA8BM,SAA9B,CAA0C,CAEzCA,SAAS,CAAG3uF,cAAc,CAAEquF,IAAF,CAAQM,SAAR,CAA1B,CACA,GAAKA,SAAL,CAAiB,CAEhB,MAAM7hF,CAAC,CAAGlN,YAAY,CAAE+uF,SAAF,CAAaN,IAAb,CAAtB,CAEA;EACArvF,YAAY,CAAE2vF,SAAF,CAAaA,SAAS,CAACj9B,IAAvB,CAAZ,CACA1yD,YAAY,CAAE8N,CAAF,CAAKA,CAAC,CAAC4kD,IAAP,CAAZ,CAEA,CAED,CAED;EACA,SAAS1xD,cAAT,CAAyBquF,IAAzB,CAA+BM,SAA/B,CAA2C,CAE1C,IAAIlvE,CAAC,CAAGkvE,SAAR,CACA,MAAMe,EAAE,CAAGrB,IAAI,CAACpjF,CAAhB,CACA,MAAM0kF,EAAE,CAAGtB,IAAI,CAACnjF,CAAhB,CACA,IAAIoW,EAAE,CAAG,CAAEzM,QAAX,CAAqB7J,CAArB,CAEA;EACA;EACA,EAAG,CAEF,GAAK2kF,EAAE,EAAIlwE,CAAC,CAACvU,CAAR,EAAaykF,EAAE,EAAIlwE,CAAC,CAACiyC,IAAF,CAAOxmD,CAA1B,EAA+BuU,CAAC,CAACiyC,IAAF,CAAOxmD,CAAP,GAAauU,CAAC,CAACvU,CAAnD,CAAuD,CAEtD,MAAMD,CAAC,CAAGwU,CAAC,CAACxU,CAAF,CAAM,CAAE0kF,EAAE,CAAGlwE,CAAC,CAACvU,CAAT,GAAiBuU,CAAC,CAACiyC,IAAF,CAAOzmD,CAAP,CAAWwU,CAAC,CAACxU,CAA9B,GAAsCwU,CAAC,CAACiyC,IAAF,CAAOxmD,CAAP,CAAWuU,CAAC,CAACvU,CAAnD,CAAhB,CACA,GAAKD,CAAC,EAAIykF,EAAL,EAAWzkF,CAAC,CAAGqW,EAApB,CAAyB,CAExBA,EAAE,CAAGrW,CAAL,CACA,GAAKA,CAAC,GAAKykF,EAAX,CAAgB,CAEf,GAAKC,EAAE,GAAKlwE,CAAC,CAACvU,CAAd,CAAkB,OAAOuU,CAAP,CAClB,GAAKkwE,EAAE,GAAKlwE,CAAC,CAACiyC,IAAF,CAAOxmD,CAAnB,CAAuB,OAAOuU,CAAC,CAACiyC,IAAT,CAEvB,CAED1mD,CAAC,CAAGyU,CAAC,CAACxU,CAAF,CAAMwU,CAAC,CAACiyC,IAAF,CAAOzmD,CAAb,CAAiBwU,CAAjB,CAAqBA,CAAC,CAACiyC,IAA3B,CAEA,CAED,CAEDjyC,CAAC,CAAGA,CAAC,CAACiyC,IAAN,CAEA,CAvBD,MAuBUjyC,CAAC,GAAKkvE,SAvBhB,EAyBA,GAAK,CAAE3jF,CAAP,CAAW,WAAA,CAEX,GAAK0kF,EAAE,GAAKpuE,EAAZ,CAAiB,OAAOtW,CAAP,CAAU;EAE3B;EACA;EACA;EAEA,MAAM4mC,IAAI,CAAG5mC,CAAb,CACC4kF,EAAE,CAAG5kF,CAAC,CAACC,CADR,CAEC4kF,EAAE,CAAG7kF,CAAC,CAACE,CAFR,CAGA,IAAI4kF,MAAM,CAAGj7E,QAAb,CAAuB23B,GAAvB,CAEA/sB,CAAC,CAAGzU,CAAJ,CAEA,EAAG,CAEF,GAAK0kF,EAAE,EAAIjwE,CAAC,CAACxU,CAAR,EAAawU,CAAC,CAACxU,CAAF,EAAO2kF,EAApB,EAA0BF,EAAE,GAAKjwE,CAAC,CAACxU,CAAnC,EACH1L,eAAe,CAAEowF,EAAE,CAAGE,EAAL,CAAUH,EAAV,CAAepuE,EAAjB,CAAqBquE,EAArB,CAAyBC,EAAzB,CAA6BC,EAA7B,CAAiCF,EAAE,CAAGE,EAAL,CAAUvuE,EAAV,CAAeouE,EAAhD,CAAoDC,EAApD,CAAwDlwE,CAAC,CAACxU,CAA1D,CAA6DwU,CAAC,CAACvU,CAA/D,CADjB,CACsF,CAErFshC,GAAG,CAAGziC,IAAI,CAACwE,GAAL,CAAUohF,EAAE,CAAGlwE,CAAC,CAACvU,CAAjB,GAAyBwkF,EAAE,CAAGjwE,CAAC,CAACxU,CAAhC,CAAN,CAA2C;EAE3C,GAAKvL,aAAa,CAAE+f,CAAF,CAAK4uE,IAAL,CAAb,GAA8B7hD,GAAG,CAAGsjD,MAAN,EAAkBtjD,GAAG,GAAKsjD,MAAR,GAAoBrwE,CAAC,CAACxU,CAAF,CAAMD,CAAC,CAACC,CAAR,EAAewU,CAAC,CAACxU,CAAF,GAAQD,CAAC,CAACC,CAAV,EAAehL,oBAAoB,CAAE+K,CAAF,CAAKyU,CAAL,CAAtE,CAAhD,CAAL,CAA8I,CAE7IzU,CAAC,CAAGyU,CAAJ,CACAqwE,MAAM,CAAGtjD,GAAT,CAEA,CAED,CAED/sB,CAAC,CAAGA,CAAC,CAACiyC,IAAN,CAEA,CAlBD,MAkBUjyC,CAAC,GAAKmyB,IAlBhB,EAoBA,OAAO5mC,CAAP,CAEA,CAED;EACA,SAAS/K,oBAAT,CAA+B+K,CAA/B,CAAkCyU,CAAlC,CAAsC,CAErC,OAAOxgB,IAAI,CAAE+L,CAAC,CAAC4jF,IAAJ,CAAU5jF,CAAV,CAAayU,CAAC,CAACmvE,IAAf,CAAJ,CAA4B,CAA5B,EAAiC3vF,IAAI,CAAEwgB,CAAC,CAACiyC,IAAJ,CAAU1mD,CAAV,CAAaA,CAAC,CAAC0mD,IAAf,CAAJ,CAA4B,CAApE,CAEA,CAED;EACA,SAASxyD,UAAT,CAAqBwkC,KAArB,CAA4Bvf,IAA5B,CAAkCC,IAAlC,CAAwCyqE,OAAxC,CAAkD,CAEjD,IAAIpvE,CAAC,CAAGikB,KAAR,CACA,EAAG,CAEF,GAAKjkB,CAAC,CAACnG,CAAF,GAAQ,IAAb,CAAoBmG,CAAC,CAACnG,CAAF,CAAM9Z,MAAM,CAAEigB,CAAC,CAACxU,CAAJ,CAAOwU,CAAC,CAACvU,CAAT,CAAYiZ,IAAZ,CAAkBC,IAAlB,CAAwByqE,OAAxB,CAAZ,CACpBpvE,CAAC,CAAC8vE,KAAF,CAAU9vE,CAAC,CAACmvE,IAAZ,CACAnvE,CAAC,CAAC+vE,KAAF,CAAU/vE,CAAC,CAACiyC,IAAZ,CACAjyC,CAAC,CAAGA,CAAC,CAACiyC,IAAN,CAEA,CAPD,MAOUjyC,CAAC,GAAKikB,KAPhB,EASAjkB,CAAC,CAAC8vE,KAAF,CAAQC,KAAR,CAAgB,IAAhB,CACA/vE,CAAC,CAAC8vE,KAAF,CAAU,IAAV,CAEArvF,UAAU,CAAEuf,CAAF,CAAV,CAEA,CAED;EACA;EACA,SAASvf,UAAT,CAAqBg7D,IAArB,CAA4B,CAE3B,IAAIvxD,CAAJ,CAAO8V,CAAP,CAAU9F,CAAV,CAAanM,CAAb,CAAgBuiF,IAAhB,CAAsBC,SAAtB,CAAiCC,KAAjC,CAAwCC,KAAxC,CACCC,MAAM,CAAG,CADV,CAGA,EAAG,CAEF1wE,CAAC,CAAGy7C,IAAJ,CACAA,IAAI,CAAG,IAAP,CACA60B,IAAI,CAAG,IAAP,CACAC,SAAS,CAAG,CAAZ,CAEA,MAAQvwE,CAAR,CAAY,CAEXuwE,SAAS,GACTr2E,CAAC,CAAG8F,CAAJ,CACAwwE,KAAK,CAAG,CAAR,CACA,IAAMtmF,CAAC,CAAG,CAAV,CAAaA,CAAC,CAAGwmF,MAAjB,CAAyBxmF,CAAC,EAA1B,CAAgC,CAE/BsmF,KAAK,GACLt2E,CAAC,CAAGA,CAAC,CAAC61E,KAAN,CACA,GAAK,CAAE71E,CAAP,CAAW,MAEX,CAEDu2E,KAAK,CAAGC,MAAR,CAEA,MAAQF,KAAK,CAAG,CAAR,EAAeC,KAAK,CAAG,CAAR,EAAav2E,CAApC,CAA0C,CAEzC,GAAKs2E,KAAK,GAAK,CAAV,GAAiBC,KAAK,GAAK,CAAV,EAAe,CAAEv2E,CAAjB,EAAsB8F,CAAC,CAACnG,CAAF,EAAOK,CAAC,CAACL,CAAhD,CAAL,CAA2D,CAE1D9L,CAAC,CAAGiS,CAAJ,CACAA,CAAC,CAAGA,CAAC,CAAC+vE,KAAN,CACAS,KAAK,GAEL,CAND,KAMO,CAENziF,CAAC,CAAGmM,CAAJ,CACAA,CAAC,CAAGA,CAAC,CAAC61E,KAAN,CACAU,KAAK,GAEL,CAED,GAAKH,IAAL,CAAYA,IAAI,CAACP,KAAL,CAAahiF,CAAb,CAAZ,KACK0tD,IAAI,CAAG1tD,CAAP,CAELA,CAAC,CAAC+hF,KAAF,CAAUQ,IAAV,CACAA,IAAI,CAAGviF,CAAP,CAEA,CAEDiS,CAAC,CAAG9F,CAAJ,CAEA,CAEDo2E,IAAI,CAACP,KAAL,CAAa,IAAb,CACAW,MAAM,EAAI,CAAV,CAEA,CArDD,MAqDUH,SAAS,CAAG,CArDtB,EAuDA,OAAO90B,IAAP,CAEA,CAED;EACA,SAAS17D,MAAT,CAAiByL,CAAjB,CAAoBC,CAApB,CAAuBiZ,IAAvB,CAA6BC,IAA7B,CAAmCyqE,OAAnC,CAA6C;EAG5C5jF,CAAC,CAAG,OAAUA,CAAC,CAAGkZ,IAAd,EAAuB0qE,OAA3B,CACA3jF,CAAC,CAAG,OAAUA,CAAC,CAAGkZ,IAAd,EAAuByqE,OAA3B,CAEA5jF,CAAC,CAAG,CAAEA,CAAC,CAAKA,CAAC,EAAI,CAAb,EAAqB,UAAzB,CACAA,CAAC,CAAG,CAAEA,CAAC,CAAKA,CAAC,EAAI,CAAb,EAAqB,UAAzB,CACAA,CAAC,CAAG,CAAEA,CAAC,CAAKA,CAAC,EAAI,CAAb,EAAqB,UAAzB,CACAA,CAAC,CAAG,CAAEA,CAAC,CAAKA,CAAC,EAAI,CAAb,EAAqB,UAAzB,CAEAC,CAAC,CAAG,CAAEA,CAAC,CAAKA,CAAC,EAAI,CAAb,EAAqB,UAAzB,CACAA,CAAC,CAAG,CAAEA,CAAC,CAAKA,CAAC,EAAI,CAAb,EAAqB,UAAzB,CACAA,CAAC,CAAG,CAAEA,CAAC,CAAKA,CAAC,EAAI,CAAb,EAAqB,UAAzB,CACAA,CAAC,CAAG,CAAEA,CAAC,CAAKA,CAAC,EAAI,CAAb,EAAqB,UAAzB,CAEA,OAAOD,CAAC,CAAKC,CAAC,EAAI,CAAlB,CAEA,CAED;EACA,SAASrL,WAAT,CAAsB6jC,KAAtB,CAA8B,CAE7B,IAAIjkB,CAAC,CAAGikB,KAAR,CACC0sD,QAAQ,CAAG1sD,KADZ,CAEA,EAAG,CAEF,GAAKjkB,CAAC,CAACxU,CAAF,CAAMmlF,QAAQ,CAACnlF,CAAf,EAAsBwU,CAAC,CAACxU,CAAF,GAAQmlF,QAAQ,CAACnlF,CAAjB,EAAsBwU,CAAC,CAACvU,CAAF,CAAMklF,QAAQ,CAACllF,CAAhE,CAAsEklF,QAAQ,CAAG3wE,CAAX,CACtEA,CAAC,CAAGA,CAAC,CAACiyC,IAAN,CAEA,CALD,MAKUjyC,CAAC,GAAKikB,KALhB,EAOA,OAAO0sD,QAAP,CAEA,CAED;EACA,SAAS7wF,eAAT,CAA0BgjB,EAA1B,CAA8BC,EAA9B,CAAkCE,EAAlC,CAAsCC,EAAtC,CAA0CtO,EAA1C,CAA8CC,EAA9C,CAAkD7Q,EAAlD,CAAsDC,EAAtD,CAA2D,CAE1D,OAAO,CAAE2Q,EAAE,CAAG5Q,EAAP,GAAgB+e,EAAE,CAAG9e,EAArB,EAA4B,CAAE6e,EAAE,CAAG9e,EAAP,GAAgB6Q,EAAE,CAAG5Q,EAArB,CAA5B,EAAyD,CAAzD,EACL,CAAE6e,EAAE,CAAG9e,EAAP,GAAgBkf,EAAE,CAAGjf,EAArB,EAA4B,CAAEgf,EAAE,CAAGjf,EAAP,GAAgB+e,EAAE,CAAG9e,EAArB,CAA5B,EAAyD,CADpD,EAEL,CAAEgf,EAAE,CAAGjf,EAAP,GAAgB6Q,EAAE,CAAG5Q,EAArB,EAA4B,CAAE2Q,EAAE,CAAG5Q,EAAP,GAAgBkf,EAAE,CAAGjf,EAArB,CAA5B,EAAyD,CAF3D,CAIA,CAED;EACA,SAAS/D,eAAT,CAA0BkN,CAA1B,CAA6BC,CAA7B,CAAiC,CAEhC,OAAOD,CAAC,CAAC6kD,IAAF,CAAO/nD,CAAP,GAAamD,CAAC,CAACnD,CAAf,EAAoBkD,CAAC,CAAC+hF,IAAF,CAAOjlF,CAAP,GAAamD,CAAC,CAACnD,CAAnC,EAAwC,CAAExJ,iBAAiB,CAAE0M,CAAF,CAAKC,CAAL,CAA3D;EACJpN,aAAa,CAAEmN,CAAF,CAAKC,CAAL,CAAb,EAAyBpN,aAAa,CAAEoN,CAAF,CAAKD,CAAL,CAAtC,EAAkDzM,YAAY,CAAEyM,CAAF,CAAKC,CAAL,CAA9D;EACA7N,IAAI,CAAE4N,CAAC,CAAC+hF,IAAJ,CAAU/hF,CAAV,CAAaC,CAAC,CAAC8hF,IAAf,CAAJ,EAA6B3vF,IAAI,CAAE4N,CAAF,CAAKC,CAAC,CAAC8hF,IAAP,CAAa9hF,CAAb,CADjC;EAEFhO,MAAM,CAAE+N,CAAF,CAAKC,CAAL,CAAN,EAAkB7N,IAAI,CAAE4N,CAAC,CAAC+hF,IAAJ,CAAU/hF,CAAV,CAAaA,CAAC,CAAC6kD,IAAf,CAAJ,CAA4B,CAA9C,EAAmDzyD,IAAI,CAAE6N,CAAC,CAAC8hF,IAAJ,CAAU9hF,CAAV,CAAaA,CAAC,CAAC4kD,IAAf,CAAJ,CAA4B,CAHzE,CAAP,CAGqF;EAErF,CAED;EACA,SAASzyD,IAAT,CAAewgB,CAAf,CAAkB9F,CAAlB,CAAqB7F,CAArB,CAAyB,CAExB,OAAO,CAAE6F,CAAC,CAACzO,CAAF,CAAMuU,CAAC,CAACvU,CAAV,GAAkB4I,CAAC,CAAC7I,CAAF,CAAM0O,CAAC,CAAC1O,CAA1B,EAAgC,CAAE0O,CAAC,CAAC1O,CAAF,CAAMwU,CAAC,CAACxU,CAAV,GAAkB6I,CAAC,CAAC5I,CAAF,CAAMyO,CAAC,CAACzO,CAA1B,CAAvC,CAEA,CAED;EACA,SAASpM,MAAT,CAAiB0oB,EAAjB,CAAqBC,EAArB,CAA0B,CAEzB,OAAOD,EAAE,CAACvc,CAAH,GAASwc,EAAE,CAACxc,CAAZ,EAAiBuc,EAAE,CAACtc,CAAH,GAASuc,EAAE,CAACvc,CAApC,CAEA,CAED;EACA,SAASzL,UAAT,CAAqB+nB,EAArB,CAAyB6oE,EAAzB,CAA6B5oE,EAA7B,CAAiC6oE,EAAjC,CAAsC,CAErC,MAAMC,EAAE,CAAGlwF,IAAI,CAAEpB,IAAI,CAAEuoB,EAAF,CAAM6oE,EAAN,CAAU5oE,EAAV,CAAN,CAAf,CACA,MAAM+oE,EAAE,CAAGnwF,IAAI,CAAEpB,IAAI,CAAEuoB,EAAF,CAAM6oE,EAAN,CAAUC,EAAV,CAAN,CAAf,CACA,MAAMG,EAAE,CAAGpwF,IAAI,CAAEpB,IAAI,CAAEwoB,EAAF,CAAM6oE,EAAN,CAAU9oE,EAAV,CAAN,CAAf,CACA,MAAMkpE,EAAE,CAAGrwF,IAAI,CAAEpB,IAAI,CAAEwoB,EAAF,CAAM6oE,EAAN,CAAUD,EAAV,CAAN,CAAf,CAEA,GAAKE,EAAE,GAAKC,EAAP,EAAaC,EAAE,GAAKC,EAAzB,CAA8B,WAAA,CAAa;EAE3C,GAAKH,EAAE,GAAK,CAAP,EAAYjwF,SAAS,CAAEknB,EAAF,CAAMC,EAAN,CAAU4oE,EAAV,CAA1B,CAA2C,WAAA,CAAa;EACxD,GAAKG,EAAE,GAAK,CAAP,EAAYlwF,SAAS,CAAEknB,EAAF,CAAM8oE,EAAN,CAAUD,EAAV,CAA1B,CAA2C,WAAA,CAAa;EACxD,GAAKI,EAAE,GAAK,CAAP,EAAYnwF,SAAS,CAAEmnB,EAAF,CAAMD,EAAN,CAAU8oE,EAAV,CAA1B,CAA2C,WAAA,CAAa;EACxD,GAAKI,EAAE,GAAK,CAAP,EAAYpwF,SAAS,CAAEmnB,EAAF,CAAM4oE,EAAN,CAAUC,EAAV,CAA1B,CAA2C,WAAA,CAAa;EAExD,YAAA,CAEA,CAED;EACA,SAAShwF,SAAT,CAAoBmf,CAApB,CAAuB9F,CAAvB,CAA0B7F,CAA1B,CAA8B,CAE7B,OAAO6F,CAAC,CAAC1O,CAAF,EAAOlB,IAAI,CAACe,GAAL,CAAU2U,CAAC,CAACxU,CAAZ,CAAe6I,CAAC,CAAC7I,CAAjB,CAAP,EAA+B0O,CAAC,CAAC1O,CAAF,EAAOlB,IAAI,CAACc,GAAL,CAAU4U,CAAC,CAACxU,CAAZ,CAAe6I,CAAC,CAAC7I,CAAjB,CAAtC,EAA8D0O,CAAC,CAACzO,CAAF,EAAOnB,IAAI,CAACe,GAAL,CAAU2U,CAAC,CAACvU,CAAZ,CAAe4I,CAAC,CAAC5I,CAAjB,CAArE,EAA6FyO,CAAC,CAACzO,CAAF,EAAOnB,IAAI,CAACc,GAAL,CAAU4U,CAAC,CAACvU,CAAZ,CAAe4I,CAAC,CAAC5I,CAAjB,CAA3G,CAEA,CAED,SAAS7K,IAAT,CAAeswF,GAAf,CAAqB,CAEpB,OAAOA,GAAG,CAAG,CAAN,CAAU,CAAV,CAAcA,GAAG,CAAG,CAAN,CAAU,CAAE,CAAZ,CAAgB,CAArC,CAEA,CAED;EACA,SAASxwF,iBAAT,CAA4B0M,CAA5B,CAA+BC,CAA/B,CAAmC,CAElC,IAAI2S,CAAC,CAAG5S,CAAR,CACA,EAAG,CAEF,GAAK4S,CAAC,CAAC9V,CAAF,GAAQkD,CAAC,CAAClD,CAAV,EAAe8V,CAAC,CAACiyC,IAAF,CAAO/nD,CAAP,GAAakD,CAAC,CAAClD,CAA9B,EAAmC8V,CAAC,CAAC9V,CAAF,GAAQmD,CAAC,CAACnD,CAA7C,EAAkD8V,CAAC,CAACiyC,IAAF,CAAO/nD,CAAP,GAAamD,CAAC,CAACnD,CAAjE,EACHlK,UAAU,CAAEggB,CAAF,CAAKA,CAAC,CAACiyC,IAAP,CAAa7kD,CAAb,CAAgBC,CAAhB,CADZ,CACkC,WAAA,CAClC2S,CAAC,CAAGA,CAAC,CAACiyC,IAAN,CAEA,CAND,MAMUjyC,CAAC,GAAK5S,CANhB,EAQA,YAAA,CAEA,CAED;EACA,SAASnN,aAAT,CAAwBmN,CAAxB,CAA2BC,CAA3B,CAA+B,CAE9B,OAAO7N,IAAI,CAAE4N,CAAC,CAAC+hF,IAAJ,CAAU/hF,CAAV,CAAaA,CAAC,CAAC6kD,IAAf,CAAJ,CAA4B,CAA5B,CACNzyD,IAAI,CAAE4N,CAAF,CAAKC,CAAL,CAAQD,CAAC,CAAC6kD,IAAV,CAAJ,EAAwB,CAAxB,EAA6BzyD,IAAI,CAAE4N,CAAF,CAAKA,CAAC,CAAC+hF,IAAP,CAAa9hF,CAAb,CAAJ,EAAwB,CAD/C,CAEN7N,IAAI,CAAE4N,CAAF,CAAKC,CAAL,CAAQD,CAAC,CAAC+hF,IAAV,CAAJ,CAAuB,CAAvB,EAA4B3vF,IAAI,CAAE4N,CAAF,CAAKA,CAAC,CAAC6kD,IAAP,CAAa5kD,CAAb,CAAJ,CAAuB,CAFpD,CAIA,CAED;EACA,SAAS1M,YAAT,CAAuByM,CAAvB,CAA0BC,CAA1B,CAA8B,CAE7B,IAAI2S,CAAC,CAAG5S,CAAR,CACC+jF,MAAM,CAAG,KADV,CAEA,MAAMntF,EAAE,CAAG,CAAEoJ,CAAC,CAAC5B,CAAF,CAAM6B,CAAC,CAAC7B,CAAV,EAAgB,CAA3B,CACCvH,EAAE,CAAG,CAAEmJ,CAAC,CAAC3B,CAAF,CAAM4B,CAAC,CAAC5B,CAAV,EAAgB,CADtB,CAEA,EAAG,CAEF,GAASuU,CAAC,CAACvU,CAAF,CAAMxH,EAAR,GAAmB+b,CAAC,CAACiyC,IAAF,CAAOxmD,CAAP,CAAWxH,EAAhC,EAA0C+b,CAAC,CAACiyC,IAAF,CAAOxmD,CAAP,GAAauU,CAAC,CAACvU,CAAzD,EACDzH,EAAE,CAAG,CAAEgc,CAAC,CAACiyC,IAAF,CAAOzmD,CAAP,CAAWwU,CAAC,CAACxU,CAAf,GAAuBvH,EAAE,CAAG+b,CAAC,CAACvU,CAA9B,GAAsCuU,CAAC,CAACiyC,IAAF,CAAOxmD,CAAP,CAAWuU,CAAC,CAACvU,CAAnD,EAAyDuU,CAAC,CAACxU,CADpE,CAEC2lF,MAAM,CAAG,CAAEA,MAAX,CACDnxE,CAAC,CAAGA,CAAC,CAACiyC,IAAN,CAEA,CAPD,MAOUjyC,CAAC,GAAK5S,CAPhB,EASA,OAAO+jF,MAAP,CAEA,CAED;EACA;EACA,SAAShxF,YAAT,CAAuBiN,CAAvB,CAA0BC,CAA1B,CAA8B,CAE7B,MAAM+jF,EAAE,CAAG,IAAItwF,MAAJ,CAAUsM,CAAC,CAAClD,CAAZ,CAAekD,CAAC,CAAC5B,CAAjB,CAAoB4B,CAAC,CAAC3B,CAAtB,CAAX,CACC4lF,EAAE,CAAG,IAAIvwF,MAAJ,CAAUuM,CAAC,CAACnD,CAAZ,CAAemD,CAAC,CAAC7B,CAAjB,CAAoB6B,CAAC,CAAC5B,CAAtB,CADN,CAEC6lF,EAAE,CAAGlkF,CAAC,CAAC6kD,IAFR,CAGCs/B,EAAE,CAAGlkF,CAAC,CAAC8hF,IAHR,CAKA/hF,CAAC,CAAC6kD,IAAF,CAAS5kD,CAAT,CACAA,CAAC,CAAC8hF,IAAF,CAAS/hF,CAAT,CAEAgkF,EAAE,CAACn/B,IAAH,CAAUq/B,EAAV,CACAA,EAAE,CAACnC,IAAH,CAAUiC,EAAV,CAEAC,EAAE,CAACp/B,IAAH,CAAUm/B,EAAV,CACAA,EAAE,CAACjC,IAAH,CAAUkC,EAAV,CAEAE,EAAE,CAACt/B,IAAH,CAAUo/B,EAAV,CACAA,EAAE,CAAClC,IAAH,CAAUoC,EAAV,CAEA,OAAOF,EAAP,CAEA,CAED;EACA,SAASjyF,UAAT,CAAqB8K,CAArB,CAAwBsB,CAAxB,CAA2BC,CAA3B,CAA8Bg9E,IAA9B,CAAqC,CAEpC,MAAMzoE,CAAC,CAAG,IAAIlf,MAAJ,CAAUoJ,CAAV,CAAasB,CAAb,CAAgBC,CAAhB,CAAV,CAEA,GAAK,CAAEg9E,IAAP,CAAc,CAEbzoE,CAAC,CAACmvE,IAAF,CAASnvE,CAAT,CACAA,CAAC,CAACiyC,IAAF,CAASjyC,CAAT,CAEA,CALD,KAKO,CAENA,CAAC,CAACiyC,IAAF,CAASw2B,IAAI,CAACx2B,IAAd,CACAjyC,CAAC,CAACmvE,IAAF,CAAS1G,IAAT,CACAA,IAAI,CAACx2B,IAAL,CAAUk9B,IAAV,CAAiBnvE,CAAjB,CACAyoE,IAAI,CAACx2B,IAAL,CAAYjyC,CAAZ,CAEA,CAED,OAAOA,CAAP,CAEA,CAED,SAAS1gB,UAAT,CAAqB0gB,CAArB,CAAyB,CAExBA,CAAC,CAACiyC,IAAF,CAAOk9B,IAAP,CAAcnvE,CAAC,CAACmvE,IAAhB,CACAnvE,CAAC,CAACmvE,IAAF,CAAOl9B,IAAP,CAAcjyC,CAAC,CAACiyC,IAAhB,CAEA,GAAKjyC,CAAC,CAAC8vE,KAAP,CAAe9vE,CAAC,CAAC8vE,KAAF,CAAQC,KAAR,CAAgB/vE,CAAC,CAAC+vE,KAAlB,CACf,GAAK/vE,CAAC,CAAC+vE,KAAP,CAAe/vE,CAAC,CAAC+vE,KAAF,CAAQD,KAAR,CAAgB9vE,CAAC,CAAC8vE,KAAlB,CAEf,CAED,SAAShvF,MAAT,CAAeoJ,CAAf,CAAkBsB,CAAlB,CAAqBC,CAArB,CAAyB;EAGxB,KAAKvB,CAAL,CAASA,CAAT,CAEA;EACA,KAAKsB,CAAL,CAASA,CAAT,CACA,KAAKC,CAAL,CAASA,CAAT,CAEA;EACA,KAAK0jF,IAAL,CAAY,IAAZ,CACA,KAAKl9B,IAAL,CAAY,IAAZ,CAEA;EACA,KAAKp4C,CAAL,CAAS,IAAT,CAEA;EACA,KAAKi2E,KAAL,CAAa,IAAb,CACA,KAAKC,KAAL,CAAa,IAAb,CAEA;EACA,KAAKR,OAAL,CAAe,KAAf,CAEA,CAED,SAASpwF,UAAT,CAAqBya,IAArB,CAA2BqqB,KAA3B,CAAkCkF,GAAlC,CAAuC4lD,GAAvC,CAA6C,CAE5C,IAAI9jC,GAAG,CAAG,CAAV,CACA,IAAM,IAAI/gD,CAAC,CAAG+5B,KAAR,CAAepc,CAAC,CAAGshB,GAAG,CAAG4lD,GAA/B,CAAoC7kF,CAAC,CAAGi/B,GAAxC,CAA6Cj/B,CAAC,EAAI6kF,GAAlD,CAAwD,CAEvD9jC,GAAG,EAAI,CAAErxC,IAAI,CAAEiO,CAAF,CAAJ,CAAYjO,IAAI,CAAE1P,CAAF,CAAlB,GAA8B0P,IAAI,CAAE1P,CAAC,CAAG,CAAN,CAAJ,CAAgB0P,IAAI,CAAEiO,CAAC,CAAG,CAAN,CAAlD,CAAP,CACAA,CAAC,CAAG3d,CAAJ,CAEA,CAED,OAAO+gD,GAAP,CAEA,CAED,MAAMlqD,UAAW;EAIL,OAAJvB,IAAI,CAAEgyF,OAAF,CAAY,CAEtB,MAAMlmF,CAAC,CAAGkmF,OAAO,CAACpnF,MAAlB,CACA,IAAIgD,CAAC,CAAG,GAAR,CAEA,IAAM,IAAI4S,CAAC,CAAG1U,CAAC,CAAG,CAAZ,CAAe4O,CAAC,CAAG,CAAzB,CAA4BA,CAAC,CAAG5O,CAAhC,CAAmC0U,CAAC,CAAG9F,CAAC,EAAxC,CAA8C,CAE7C9M,CAAC,EAAIokF,OAAO,CAAExxE,CAAF,CAAP,CAAaxU,CAAb,CAAiBgmF,OAAO,CAAEt3E,CAAF,CAAP,CAAazO,CAA9B,CAAkC+lF,OAAO,CAAEt3E,CAAF,CAAP,CAAa1O,CAAb,CAAiBgmF,OAAO,CAAExxE,CAAF,CAAP,CAAavU,CAArE,CAEA,CAED,OAAO2B,CAAC,CAAG,GAAX,CAEA,CAEiB,OAAXqkF,WAAW,CAAEtE,GAAF,CAAQ,CAEzB,OAAOpsF,UAAU,CAACvB,IAAX,CAAiB2tF,GAAjB,EAAyB,CAAhC,CAEA,CAEsB,OAAhBuE,gBAAgB,CAAEF,OAAF,CAAWhD,KAAX,CAAmB,CAEzC,MAAM1kD,QAAQ,CAAG,EAAjB,CAAqB;EACrB,MAAMglD,WAAW,CAAG,EAApB,CAAwB;EACxB,MAAM6C,KAAK,CAAG,EAAd,CAAkB;EAElB3wF,eAAe,CAAEwwF,OAAF,CAAf,CACAvwF,UAAU,CAAE6oC,QAAF,CAAY0nD,OAAZ,CAAV,CAEA;EAEA,IAAII,SAAS,CAAGJ,OAAO,CAACpnF,MAAxB,CAEAokF,KAAK,CAAChb,OAAN,CAAexyE,eAAf,EAEA,IAAM,IAAIkJ,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGskF,KAAK,CAACpkF,MAA3B,CAAmCF,CAAC,EAApC,CAA0C,CAEzC4kF,WAAW,CAACvlF,IAAZ,CAAkBqoF,SAAlB,EACAA,SAAS,EAAIpD,KAAK,CAAEtkF,CAAF,CAAL,CAAWE,MAAxB,CACAnJ,UAAU,CAAE6oC,QAAF,CAAY0kD,KAAK,CAAEtkF,CAAF,CAAjB,CAAV,CAEA,CAED;EAEA,MAAMkjD,SAAS,CAAGruD,MAAM,CAAC8vF,WAAP,CAAoB/kD,QAApB,CAA8BglD,WAA9B,CAAlB,CAEA;EAEA,IAAM,IAAI5kF,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGkjD,SAAS,CAAChjD,MAA/B,CAAuCF,CAAC,EAAI,CAA5C,CAAgD,CAE/CynF,KAAK,CAACpoF,IAAN,CAAY6jD,SAAS,CAACnjD,KAAV,CAAiBC,CAAjB,CAAoBA,CAAC,CAAG,CAAxB,CAAZ,EAEA,CAED,OAAOynF,KAAP,CAEA,CA9De,CAkEjB,SAAS3wF,eAAT,CAA0BkkB,MAA1B,CAAmC,CAElC,MAAM/a,CAAC,CAAG+a,MAAM,CAAC9a,MAAjB,CAEA,GAAKD,CAAC,CAAG,CAAJ,EAAS+a,MAAM,CAAE/a,CAAC,CAAG,CAAN,CAAN,CAAgB9K,MAAhB,CAAwB6lB,MAAM,CAAE,CAAF,CAA9B,CAAd,CAAsD,CAErDA,MAAM,CAACy1C,GAAP,GAEA,CAED,CAED,SAAS15D,UAAT,CAAqB6oC,QAArB,CAA+B0nD,OAA/B,CAAyC,CAExC,IAAM,IAAItnF,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGsnF,OAAO,CAACpnF,MAA7B,CAAqCF,CAAC,EAAtC,CAA4C,CAE3C4/B,QAAQ,CAACvgC,IAAT,CAAeioF,OAAO,CAAEtnF,CAAF,CAAP,CAAasB,CAA5B,EACAs+B,QAAQ,CAACvgC,IAAT,CAAeioF,OAAO,CAAEtnF,CAAF,CAAP,CAAauB,CAA5B,EAEA,CAED,CAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAEA,MAAMvK,eAAN,SAA8B1W,cAAe,CAE5CuhB,WAAW,CAAEkpB,MAAM,CAAG,IAAIzvB,KAAJ,CAAW,CAAE,IAAI7hB,OAAJ,CAAa,GAAb,CAAkB,GAAlB,CAAF,CAA2B,IAAIA,OAAJ,CAAa,CAAE,GAAf,CAAoB,GAApB,CAA3B,CAAsD,IAAIA,OAAJ,CAAa,CAAE,GAAf,CAAoB,CAAE,GAAtB,CAAtD,CAAmF,IAAIA,OAAJ,CAAa,GAAb,CAAkB,CAAE,GAApB,CAAnF,CAAX,CAAX,CAAwI83B,OAAO,CAAG,EAAlJ,CAAuJ,CAEjK,QAEA,KAAKxS,IAAL,CAAY,iBAAZ,CAEA,KAAK+sB,UAAL,CAAkB,CACjBf,MAAM,CAAEA,MADS,CAEjBxZ,OAAO,CAAEA,OAFQ,CAAlB,CAKAwZ,MAAM,CAAG/b,KAAK,CAACC,OAAN,CAAe8b,MAAf,EAA0BA,MAA1B,CAAmC,CAAEA,MAAF,CAA5C,CAEA,MAAM4U,KAAK,CAAG,IAAd,CAEA,MAAMgoD,aAAa,CAAG,EAAtB,CACA,MAAMC,OAAO,CAAG,EAAhB,CAEA,IAAM,IAAI5nF,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG8qB,MAAM,CAAC7qB,MAA5B,CAAoCF,CAAC,CAAGC,CAAxC,CAA2CD,CAAC,EAA5C,CAAkD,CAEjD,MAAM+rB,KAAK,CAAGhB,MAAM,CAAE/qB,CAAF,CAApB,CACA6nF,QAAQ,CAAE97D,KAAF,CAAR,CAEA,CAED;EAEA,KAAKoO,YAAL,CAAmB,UAAnB,CAA+B,IAAIt6C,sBAAJ,CAA4B8nG,aAA5B,CAA2C,CAA3C,CAA/B,EACA,KAAKxtD,YAAL,CAAmB,IAAnB,CAAyB,IAAIt6C,sBAAJ,CAA4B+nG,OAA5B,CAAqC,CAArC,CAAzB,EAEA,KAAKprD,oBAAL,GAEA;EAEA,SAASqrD,QAAT,CAAmB97D,KAAnB,CAA2B,CAE1B,MAAM+7D,WAAW,CAAG,EAApB,CAEA;EAEA,MAAMC,aAAa,CAAGx2E,OAAO,CAACw2E,aAAR,GAA0B7oF,SAA1B,CAAsCqS,OAAO,CAACw2E,aAA9C,CAA8D,EAApF,CACA,MAAMC,KAAK,CAAGz2E,OAAO,CAACy2E,KAAR,GAAkB9oF,SAAlB,CAA8BqS,OAAO,CAACy2E,KAAtC,CAA8C,CAA5D,CACA,IAAIx2E,KAAK,CAAGD,OAAO,CAACC,KAAR,GAAkBtS,SAAlB,CAA8BqS,OAAO,CAACC,KAAtC,CAA8C,CAA1D,CAEA,IAAIy2E,YAAY,CAAG12E,OAAO,CAAC02E,YAAR,GAAyB/oF,SAAzB,CAAqCqS,OAAO,CAAC02E,YAA7C,CAA4D,IAA/E,CACA,IAAIC,cAAc,CAAG32E,OAAO,CAAC22E,cAAR,GAA2BhpF,SAA3B,CAAuCqS,OAAO,CAAC22E,cAA/C,CAAgE,GAArF,CACA,IAAIC,SAAS,CAAG52E,OAAO,CAAC42E,SAAR,GAAsBjpF,SAAtB,CAAkCqS,OAAO,CAAC42E,SAA1C,CAAsDD,cAAc,CAAG,GAAvF,CACA,IAAIE,WAAW,CAAG72E,OAAO,CAAC62E,WAAR,GAAwBlpF,SAAxB,CAAoCqS,OAAO,CAAC62E,WAA5C,CAA0D,CAA5E,CACA,IAAIC,aAAa,CAAG92E,OAAO,CAAC82E,aAAR,GAA0BnpF,SAA1B,CAAsCqS,OAAO,CAAC82E,aAA9C,CAA8D,CAAlF,CAEA,MAAMC,WAAW,CAAG/2E,OAAO,CAAC+2E,WAA5B,CAEA,MAAMC,KAAK,CAAGh3E,OAAO,CAACi3E,WAAR,GAAwBtpF,SAAxB,CAAoCqS,OAAO,CAACi3E,WAA5C,CAA0DvxF,gBAAxE,CAEA;EAEA,GAAKsa,OAAO,CAACk3E,MAAR,GAAmBvpF,SAAxB,CAAoC,CAEnC2D,OAAO,CAACC,IAAR,CAAc,gEAAd,EACA0O,KAAK,CAAGD,OAAO,CAACk3E,MAAhB,CAEA,CAED;EAEA,IAAIC,UAAJ,CAAgBC,aAAa,CAAG,KAAhC,CACA,IAAIC,UAAJ,CAAgBC,QAAhB,CAA0BtvE,MAA1B,CAAkCuvE,SAAlC,CAEA,GAAKR,WAAL,CAAmB,CAElBI,UAAU,CAAGJ,WAAW,CAACrK,eAAZ,CAA6B+J,KAA7B,CAAb,CAEAW,aAAa,CAAG,IAAhB,CACAV,YAAY,CAAG,KAAf,CAAsB;EAEtB;EAEA;EAEAW,UAAU,CAAGN,WAAW,CAAC/I,mBAAZ,CAAiCyI,KAAjC,CAAwC,KAAxC,CAAb,CAEA;EAEAa,QAAQ,CAAG,IAAIxuG,OAAJ,EAAX,CACAk/B,MAAM,CAAG,IAAIl/B,OAAJ,EAAT,CACAyuG,SAAS,CAAG,IAAIzuG,OAAJ,EAAZ,CAEA,CAED;EAEA,GAAK,CAAE4tG,YAAP,CAAsB,CAErBI,aAAa,CAAG,CAAhB,CACAH,cAAc,CAAG,CAAjB,CACAC,SAAS,CAAG,CAAZ,CACAC,WAAW,CAAG,CAAd,CAEA,CAED;EAEA,MAAMW,WAAW,CAAGh9D,KAAK,CAAC04D,aAAN,CAAqBsD,aAArB,CAApB,CAEA,IAAInoD,QAAQ,CAAGmpD,WAAW,CAACh9D,KAA3B,CACA,MAAMu4D,KAAK,CAAGyE,WAAW,CAACzE,KAA1B,CAEA,MAAM0E,OAAO,CAAG,CAAEnyF,UAAU,CAAC0wF,WAAX,CAAwB3nD,QAAxB,CAAlB,CAEA,GAAKopD,OAAL,CAAe,CAEdppD,QAAQ,CAAGA,QAAQ,CAACopD,OAAT,EAAX,CAEA;EAEA,IAAM,IAAIx/E,CAAC,CAAG,CAAR,CAAWy/E,EAAE,CAAG3E,KAAK,CAACpkF,MAA5B,CAAoCsJ,CAAC,CAAGy/E,EAAxC,CAA4Cz/E,CAAC,EAA7C,CAAmD,CAElD,MAAM0/E,KAAK,CAAG5E,KAAK,CAAE96E,CAAF,CAAnB,CAEA,GAAK3S,UAAU,CAAC0wF,WAAX,CAAwB2B,KAAxB,CAAL,CAAuC,CAEtC5E,KAAK,CAAE96E,CAAF,CAAL,CAAa0/E,KAAK,CAACF,OAAN,EAAb,CAEA,CAED,CAED,CAGD,MAAMvB,KAAK,CAAG5wF,UAAU,CAAC2wF,gBAAX,CAA6B5nD,QAA7B,CAAuC0kD,KAAvC,CAAd,CAEA,cAEA,MAAMgD,OAAO,CAAG1nD,QAAhB,CAA0B;EAE1B,IAAM,IAAIp2B,CAAC,CAAG,CAAR,CAAWy/E,EAAE,CAAG3E,KAAK,CAACpkF,MAA5B,CAAoCsJ,CAAC,CAAGy/E,EAAxC,CAA4Cz/E,CAAC,EAA7C,CAAmD,CAElD,MAAM0/E,KAAK,CAAG5E,KAAK,CAAE96E,CAAF,CAAnB,CAEAo2B,QAAQ,CAAGA,QAAQ,CAACmkD,MAAT,CAAiBmF,KAAjB,CAAX,CAEA,CAGD,SAASC,QAAT,CAAmBC,EAAnB,CAAuBzJ,GAAvB,CAA4BvkE,IAA5B,CAAmC,CAElC,GAAK,CAAEukE,GAAP,CAAa98E,OAAO,CAAC8D,KAAR,CAAe,2CAAf,EAEb,OAAOg5E,GAAG,CAACn9E,KAAJ,GAAYiB,cAAZ,CAA4B2X,IAA5B,EAAmCzY,GAAnC,CAAwCymF,EAAxC,CAAP,CAEA,CAED,MAAMC,IAAI,CAAGzpD,QAAQ,CAAC1/B,MAAtB,CAA8BopF,IAAI,CAAG7B,KAAK,CAACvnF,MAA3C,CAGA;EAGA,SAASqpF,WAAT,CAAsBC,IAAtB,CAA4BC,MAA5B,CAAoCC,MAApC,CAA6C;EAG5C;EACA;EACA;EACA;EACA;EAEA,IAAIC,SAAJ,CAAeC,SAAf,CAA0BC,SAA1B,CAAqC;EAErC;EACA;EAEA,MAAMC,QAAQ,CAAGN,IAAI,CAACloF,CAAL,CAASmoF,MAAM,CAACnoF,CAAjC,CACCyoF,QAAQ,CAAGP,IAAI,CAACjoF,CAAL,CAASkoF,MAAM,CAACloF,CAD5B,CAEA,MAAMyoF,QAAQ,CAAGN,MAAM,CAACpoF,CAAP,CAAWkoF,IAAI,CAACloF,CAAjC,CACC2oF,QAAQ,CAAGP,MAAM,CAACnoF,CAAP,CAAWioF,IAAI,CAACjoF,CAD5B,CAGA,MAAM2oF,YAAY,CAAKJ,QAAQ,CAAGA,QAAX,CAAsBC,QAAQ,CAAGA,QAAxD,CAEA;EACA,MAAMI,UAAU,CAAKL,QAAQ,CAAGG,QAAX,CAAsBF,QAAQ,CAAGC,QAAtD,CAEA,GAAK5pF,IAAI,CAACwE,GAAL,CAAUulF,UAAV,EAAyBp2E,MAAM,CAACC,OAArC,CAA+C;EAI9C;EAEA,MAAMo2E,UAAU,CAAGhqF,IAAI,CAACsE,IAAL,CAAWwlF,YAAX,CAAnB,CACA,MAAMG,UAAU,CAAGjqF,IAAI,CAACsE,IAAL,CAAWslF,QAAQ,CAAGA,QAAX,CAAsBC,QAAQ,CAAGA,QAA5C,CAAnB,CAEA;EAEA,MAAMK,aAAa,CAAKb,MAAM,CAACnoF,CAAP,CAAWyoF,QAAQ,CAAGK,UAA9C,CACA,MAAMG,aAAa,CAAKd,MAAM,CAACloF,CAAP,CAAWuoF,QAAQ,CAAGM,UAA9C,CAEA,MAAMI,aAAa,CAAKd,MAAM,CAACpoF,CAAP,CAAW2oF,QAAQ,CAAGI,UAA9C,CACA,MAAMI,aAAa,CAAKf,MAAM,CAACnoF,CAAP,CAAWyoF,QAAQ,CAAGK,UAA9C,CAEA;EAEA,MAAMK,EAAE,CAAG,CAAE,CAAEF,aAAa,CAAGF,aAAlB,EAAoCL,QAApC,CACX,CAAEQ,aAAa,CAAGF,aAAlB,EAAoCP,QAD3B,GAERF,QAAQ,CAAGG,QAAX,CAAsBF,QAAQ,CAAGC,QAFzB,CAAX,CAIA;EAEAL,SAAS,CAAKW,aAAa,CAAGR,QAAQ,CAAGY,EAA3B,CAAgClB,IAAI,CAACloF,CAAnD,CACAsoF,SAAS,CAAKW,aAAa,CAAGR,QAAQ,CAAGW,EAA3B,CAAgClB,IAAI,CAACjoF,CAAnD,CAEA;EACA;EACA,MAAMopF,aAAa,CAAKhB,SAAS,CAAGA,SAAZ,CAAwBC,SAAS,CAAGA,SAA5D,CACA,GAAKe,aAAa,EAAI,CAAtB,CAA0B,CAEzB,WAAWlxG,OAAJ,CAAakwG,SAAb,CAAwBC,SAAxB,CAAP,CAEA,CAJD,KAIO,CAENC,SAAS,CAAGzpF,IAAI,CAACsE,IAAL,CAAWimF,aAAa,CAAG,CAA3B,CAAZ,CAEA,CAED,CAzCD,KAyCO;EAIN,IAAIC,YAAY,CAAG,KAAnB,CAA0B;EAE1B,GAAKd,QAAQ,CAAG/1E,MAAM,CAACC,OAAvB,CAAiC,CAEhC,GAAKg2E,QAAQ,CAAGj2E,MAAM,CAACC,OAAvB,CAAiC,CAEhC42E,YAAY,CAAG,IAAf,CAEA,CAED,CARD,KAQO,CAEN,GAAKd,QAAQ,CAAG,CAAE/1E,MAAM,CAACC,OAAzB,CAAmC,CAElC,GAAKg2E,QAAQ,CAAG,CAAEj2E,MAAM,CAACC,OAAzB,CAAmC,CAElC42E,YAAY,CAAG,IAAf,CAEA,CAED,CARD,KAQO,CAEN,GAAKxqF,IAAI,CAAC1J,IAAL,CAAWqzF,QAAX,IAA0B3pF,IAAI,CAAC1J,IAAL,CAAWuzF,QAAX,CAA/B,CAAuD,CAEtDW,YAAY,CAAG,IAAf,CAEA,CAED,CAED,CAED,GAAKA,YAAL,CAAoB;EAGnBjB,SAAS,CAAG,CAAEI,QAAd,CACAH,SAAS,CAAGE,QAAZ,CACAD,SAAS,CAAGzpF,IAAI,CAACsE,IAAL,CAAWwlF,YAAX,CAAZ,CAEA,CAPD,KAOO;EAGNP,SAAS,CAAGG,QAAZ,CACAF,SAAS,CAAGG,QAAZ,CACAF,SAAS,CAAGzpF,IAAI,CAACsE,IAAL,CAAWwlF,YAAY,CAAG,CAA1B,CAAZ,CAEA,CAED,CAED,WAAWzwG,OAAJ,CAAakwG,SAAS,CAAGE,SAAzB,CAAoCD,SAAS,CAAGC,SAAhD,CAAP,CAEA,CAGD,MAAMgB,gBAAgB,CAAG,EAAzB,CAEA,IAAM,IAAI7qF,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAGk1E,OAAO,CAACpnF,MAAxB,CAAgCyd,CAAC,CAAGvL,EAAE,CAAG,CAAzC,CAA4CkmD,CAAC,CAAGt4D,CAAC,CAAG,CAA1D,CAA6DA,CAAC,CAAGoS,EAAjE,CAAqEpS,CAAC,GAAK2d,CAAC,EAAN,CAAW26C,CAAC,EAAlF,CAAwF,CAEvF,GAAK36C,CAAC,GAAKvL,EAAX,CAAgBuL,CAAC,CAAG,CAAJ,CAChB,GAAK26C,CAAC,GAAKlmD,EAAX,CAAgBkmD,CAAC,CAAG,CAAJ,CAEhB;EACA;EAEAuyB,gBAAgB,CAAE7qF,CAAF,CAAhB,CAAwBupF,WAAW,CAAEjC,OAAO,CAAEtnF,CAAF,CAAT,CAAgBsnF,OAAO,CAAE3pE,CAAF,CAAvB,CAA8B2pE,OAAO,CAAEhvB,CAAF,CAArC,CAAnC,CAEA,CAED,MAAMwyB,cAAc,CAAG,EAAvB,CACA,IAAIC,gBAAJ,CAAsBC,iBAAiB,CAAGH,gBAAgB,CAAC9G,MAAjB,EAA1C,CAEA,IAAM,IAAIv6E,CAAC,CAAG,CAAR,CAAWy/E,EAAE,CAAG3E,KAAK,CAACpkF,MAA5B,CAAoCsJ,CAAC,CAAGy/E,EAAxC,CAA4Cz/E,CAAC,EAA7C,CAAmD,CAElD,MAAM0/E,KAAK,CAAG5E,KAAK,CAAE96E,CAAF,CAAnB,CAEAuhF,gBAAgB,CAAG,EAAnB,CAEA,IAAM,IAAI/qF,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAG82E,KAAK,CAAChpF,MAAtB,CAA8Byd,CAAC,CAAGvL,EAAE,CAAG,CAAvC,CAA0CkmD,CAAC,CAAGt4D,CAAC,CAAG,CAAxD,CAA2DA,CAAC,CAAGoS,EAA/D,CAAmEpS,CAAC,GAAK2d,CAAC,EAAN,CAAW26C,CAAC,EAAhF,CAAsF,CAErF,GAAK36C,CAAC,GAAKvL,EAAX,CAAgBuL,CAAC,CAAG,CAAJ,CAChB,GAAK26C,CAAC,GAAKlmD,EAAX,CAAgBkmD,CAAC,CAAG,CAAJ,CAEhB;EACAyyB,gBAAgB,CAAE/qF,CAAF,CAAhB,CAAwBupF,WAAW,CAAEL,KAAK,CAAElpF,CAAF,CAAP,CAAckpF,KAAK,CAAEvrE,CAAF,CAAnB,CAA0BurE,KAAK,CAAE5wB,CAAF,CAA/B,CAAnC,CAEA,CAEDwyB,cAAc,CAACzrF,IAAf,CAAqB0rF,gBAArB,EACAC,iBAAiB,CAAGA,iBAAiB,CAACjH,MAAlB,CAA0BgH,gBAA1B,CAApB,CAEA,CAGD;EAEA,IAAM,IAAI5nF,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGklF,aAArB,CAAoCllF,CAAC,EAArC,CAA2C;EAI1C,MAAM3B,CAAC,CAAG2B,CAAC,CAAGklF,aAAd,CACA,MAAM14E,CAAC,CAAGu4E,cAAc,CAAG9nF,IAAI,CAACgG,GAAL,CAAU5E,CAAC,CAAGpB,IAAI,CAACC,EAAT,CAAc,CAAxB,CAA3B,CACA,MAAM4qF,EAAE,CAAG9C,SAAS,CAAG/nF,IAAI,CAACiG,GAAL,CAAU7E,CAAC,CAAGpB,IAAI,CAACC,EAAT,CAAc,CAAxB,CAAZ,CAA0C+nF,WAArD,CAEA;EAEA,IAAM,IAAIpoF,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAGk1E,OAAO,CAACpnF,MAA9B,CAAsCF,CAAC,CAAGoS,EAA1C,CAA8CpS,CAAC,EAA/C,CAAqD,CAEpD,MAAMkrF,IAAI,CAAG/B,QAAQ,CAAE7B,OAAO,CAAEtnF,CAAF,CAAT,CAAgB6qF,gBAAgB,CAAE7qF,CAAF,CAAhC,CAAuCirF,EAAvC,CAArB,CAEAvoF,CAAC,CAAEwoF,IAAI,CAAC5pF,CAAP,CAAU4pF,IAAI,CAAC3pF,CAAf,CAAkB,CAAEoO,CAApB,CAAD,CAEA,CAED;EAEA,IAAM,IAAInG,CAAC,CAAG,CAAR,CAAWy/E,EAAE,CAAG3E,KAAK,CAACpkF,MAA5B,CAAoCsJ,CAAC,CAAGy/E,EAAxC,CAA4Cz/E,CAAC,EAA7C,CAAmD,CAElD,MAAM0/E,KAAK,CAAG5E,KAAK,CAAE96E,CAAF,CAAnB,CACAuhF,gBAAgB,CAAGD,cAAc,CAAEthF,CAAF,CAAjC,CAEA,IAAM,IAAIxJ,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAG82E,KAAK,CAAChpF,MAA5B,CAAoCF,CAAC,CAAGoS,EAAxC,CAA4CpS,CAAC,EAA7C,CAAmD,CAElD,MAAMkrF,IAAI,CAAG/B,QAAQ,CAAED,KAAK,CAAElpF,CAAF,CAAP,CAAc+qF,gBAAgB,CAAE/qF,CAAF,CAA9B,CAAqCirF,EAArC,CAArB,CAEAvoF,CAAC,CAAEwoF,IAAI,CAAC5pF,CAAP,CAAU4pF,IAAI,CAAC3pF,CAAf,CAAkB,CAAEoO,CAApB,CAAD,CAEA,CAED,CAED,CAED,MAAMs7E,EAAE,CAAG9C,SAAS,CAAGC,WAAvB,CAEA;EAEA,IAAM,IAAIpoF,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGqpF,IAArB,CAA2BrpF,CAAC,EAA5B,CAAkC,CAEjC,MAAMkrF,IAAI,CAAGjD,YAAY,CAAGkB,QAAQ,CAAEvpD,QAAQ,CAAE5/B,CAAF,CAAV,CAAiBgrF,iBAAiB,CAAEhrF,CAAF,CAAlC,CAAyCirF,EAAzC,CAAX,CAA2DrrD,QAAQ,CAAE5/B,CAAF,CAA5F,CAEA,GAAK,CAAE2oF,aAAP,CAAuB,CAEtBjmF,CAAC,CAAEwoF,IAAI,CAAC5pF,CAAP,CAAU4pF,IAAI,CAAC3pF,CAAf,CAAkB,CAAlB,CAAD,CAEA,CAJD,KAIO;EAINgY,MAAM,CAAC9W,IAAP,CAAammF,UAAU,CAACxtD,OAAX,CAAoB,CAApB,CAAb,EAAuC33B,cAAvC,CAAuDynF,IAAI,CAAC5pF,CAA5D,EACAunF,QAAQ,CAACpmF,IAAT,CAAemmF,UAAU,CAAClJ,SAAX,CAAsB,CAAtB,CAAf,EAA2Cj8E,cAA3C,CAA2DynF,IAAI,CAAC3pF,CAAhE,EAEAunF,SAAS,CAACrmF,IAAV,CAAgBimF,UAAU,CAAE,CAAF,CAA1B,EAAkC/lF,GAAlC,CAAuC4W,MAAvC,EAAgD5W,GAAhD,CAAqDkmF,QAArD,EAEAnmF,CAAC,CAAEomF,SAAS,CAACxnF,CAAZ,CAAewnF,SAAS,CAACvnF,CAAzB,CAA4BunF,SAAS,CAACn5E,CAAtC,CAAD,CAEA,CAED,CAED;EACA;EAEA,IAAM,IAAI1M,CAAC,CAAG,CAAd,CAAiBA,CAAC,EAAI+kF,KAAtB,CAA6B/kF,CAAC,EAA9B,CAAoC,CAEnC,IAAM,IAAIjD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGqpF,IAArB,CAA2BrpF,CAAC,EAA5B,CAAkC,CAEjC,MAAMkrF,IAAI,CAAGjD,YAAY,CAAGkB,QAAQ,CAAEvpD,QAAQ,CAAE5/B,CAAF,CAAV,CAAiBgrF,iBAAiB,CAAEhrF,CAAF,CAAlC,CAAyCirF,EAAzC,CAAX,CAA2DrrD,QAAQ,CAAE5/B,CAAF,CAA5F,CAEA,GAAK,CAAE2oF,aAAP,CAAuB,CAEtBjmF,CAAC,CAAEwoF,IAAI,CAAC5pF,CAAP,CAAU4pF,IAAI,CAAC3pF,CAAf,CAAkBiQ,KAAK,CAAGw2E,KAAR,CAAgB/kF,CAAlC,CAAD,CAEA,CAJD,KAIO;EAINsW,MAAM,CAAC9W,IAAP,CAAammF,UAAU,CAACxtD,OAAX,CAAoBn4B,CAApB,CAAb,EAAuCQ,cAAvC,CAAuDynF,IAAI,CAAC5pF,CAA5D,EACAunF,QAAQ,CAACpmF,IAAT,CAAemmF,UAAU,CAAClJ,SAAX,CAAsBz8E,CAAtB,CAAf,EAA2CQ,cAA3C,CAA2DynF,IAAI,CAAC3pF,CAAhE,EAEAunF,SAAS,CAACrmF,IAAV,CAAgBimF,UAAU,CAAEzlF,CAAF,CAA1B,EAAkCN,GAAlC,CAAuC4W,MAAvC,EAAgD5W,GAAhD,CAAqDkmF,QAArD,EAEAnmF,CAAC,CAAEomF,SAAS,CAACxnF,CAAZ,CAAewnF,SAAS,CAACvnF,CAAzB,CAA4BunF,SAAS,CAACn5E,CAAtC,CAAD,CAEA,CAED,CAED,CAGD;EAEA;EACA,IAAM,IAAIxM,CAAC,CAAGklF,aAAa,CAAG,CAA9B,CAAiCllF,CAAC,EAAI,CAAtC,CAAyCA,CAAC,EAA1C,CAAgD,CAE/C,MAAM3B,CAAC,CAAG2B,CAAC,CAAGklF,aAAd,CACA,MAAM14E,CAAC,CAAGu4E,cAAc,CAAG9nF,IAAI,CAACgG,GAAL,CAAU5E,CAAC,CAAGpB,IAAI,CAACC,EAAT,CAAc,CAAxB,CAA3B,CACA,MAAM4qF,EAAE,CAAG9C,SAAS,CAAG/nF,IAAI,CAACiG,GAAL,CAAU7E,CAAC,CAAGpB,IAAI,CAACC,EAAT,CAAc,CAAxB,CAAZ,CAA0C+nF,WAArD,CAEA;EAEA,IAAM,IAAIpoF,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAGk1E,OAAO,CAACpnF,MAA9B,CAAsCF,CAAC,CAAGoS,EAA1C,CAA8CpS,CAAC,EAA/C,CAAqD,CAEpD,MAAMkrF,IAAI,CAAG/B,QAAQ,CAAE7B,OAAO,CAAEtnF,CAAF,CAAT,CAAgB6qF,gBAAgB,CAAE7qF,CAAF,CAAhC,CAAuCirF,EAAvC,CAArB,CACAvoF,CAAC,CAAEwoF,IAAI,CAAC5pF,CAAP,CAAU4pF,IAAI,CAAC3pF,CAAf,CAAkBiQ,KAAK,CAAG7B,CAA1B,CAAD,CAEA,CAED;EAEA,IAAM,IAAInG,CAAC,CAAG,CAAR,CAAWy/E,EAAE,CAAG3E,KAAK,CAACpkF,MAA5B,CAAoCsJ,CAAC,CAAGy/E,EAAxC,CAA4Cz/E,CAAC,EAA7C,CAAmD,CAElD,MAAM0/E,KAAK,CAAG5E,KAAK,CAAE96E,CAAF,CAAnB,CACAuhF,gBAAgB,CAAGD,cAAc,CAAEthF,CAAF,CAAjC,CAEA,IAAM,IAAIxJ,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAG82E,KAAK,CAAChpF,MAA5B,CAAoCF,CAAC,CAAGoS,EAAxC,CAA4CpS,CAAC,EAA7C,CAAmD,CAElD,MAAMkrF,IAAI,CAAG/B,QAAQ,CAAED,KAAK,CAAElpF,CAAF,CAAP,CAAc+qF,gBAAgB,CAAE/qF,CAAF,CAA9B,CAAqCirF,EAArC,CAArB,CAEA,GAAK,CAAEtC,aAAP,CAAuB,CAEtBjmF,CAAC,CAAEwoF,IAAI,CAAC5pF,CAAP,CAAU4pF,IAAI,CAAC3pF,CAAf,CAAkBiQ,KAAK,CAAG7B,CAA1B,CAAD,CAEA,CAJD,KAIO,CAENjN,CAAC,CAAEwoF,IAAI,CAAC5pF,CAAP,CAAU4pF,IAAI,CAAC3pF,CAAL,CAASmnF,UAAU,CAAEV,KAAK,CAAG,CAAV,CAAV,CAAwBzmF,CAA3C,CAA8CmnF,UAAU,CAAEV,KAAK,CAAG,CAAV,CAAV,CAAwB1mF,CAAxB,CAA4BqO,CAA1E,CAAD,CAEA,CAED,CAED,CAED,CAED;EAIAw7E,aAAa,GAEb;EAEAC,cAAc,GAGd;EAEA,SAASD,aAAT,EAAyB,CAExB,MAAMpxD,KAAK,CAAG4tD,aAAa,CAACznF,MAAd,CAAuB,CAArC,CAEA,GAAK+nF,YAAL,CAAoB,CAEnB,IAAIrQ,KAAK,CAAG,CAAZ,CAAe;EACf,IAAIjyE,MAAM,CAAG0jF,IAAI,CAAGzR,KAApB,CAEA;EAEA,IAAM,IAAI53E,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGspF,IAArB,CAA2BtpF,CAAC,EAA5B,CAAkC,CAEjC,MAAMm/B,IAAI,CAAGsoD,KAAK,CAAEznF,CAAF,CAAlB,CACAqrF,EAAE,CAAElsD,IAAI,CAAE,CAAF,CAAJ,CAAYx5B,MAAd,CAAsBw5B,IAAI,CAAE,CAAF,CAAJ,CAAYx5B,MAAlC,CAA0Cw5B,IAAI,CAAE,CAAF,CAAJ,CAAYx5B,MAAtD,CAAF,CAEA,CAEDiyE,KAAK,CAAGoQ,KAAK,CAAGK,aAAa,CAAG,CAAhC,CACA1iF,MAAM,CAAG0jF,IAAI,CAAGzR,KAAhB,CAEA;EAEA,IAAM,IAAI53E,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGspF,IAArB,CAA2BtpF,CAAC,EAA5B,CAAkC,CAEjC,MAAMm/B,IAAI,CAAGsoD,KAAK,CAAEznF,CAAF,CAAlB,CACAqrF,EAAE,CAAElsD,IAAI,CAAE,CAAF,CAAJ,CAAYx5B,MAAd,CAAsBw5B,IAAI,CAAE,CAAF,CAAJ,CAAYx5B,MAAlC,CAA0Cw5B,IAAI,CAAE,CAAF,CAAJ,CAAYx5B,MAAtD,CAAF,CAEA,CAED,CA1BD,KA0BO;EAIN,IAAM,IAAI3F,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGspF,IAArB,CAA2BtpF,CAAC,EAA5B,CAAkC,CAEjC,MAAMm/B,IAAI,CAAGsoD,KAAK,CAAEznF,CAAF,CAAlB,CACAqrF,EAAE,CAAElsD,IAAI,CAAE,CAAF,CAAN,CAAaA,IAAI,CAAE,CAAF,CAAjB,CAAwBA,IAAI,CAAE,CAAF,CAA5B,CAAF,CAEA,CAED;EAEA,IAAM,IAAIn/B,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGspF,IAArB,CAA2BtpF,CAAC,EAA5B,CAAkC,CAEjC,MAAMm/B,IAAI,CAAGsoD,KAAK,CAAEznF,CAAF,CAAlB,CACAqrF,EAAE,CAAElsD,IAAI,CAAE,CAAF,CAAJ,CAAYkqD,IAAI,CAAGrB,KAArB,CAA4B7oD,IAAI,CAAE,CAAF,CAAJ,CAAYkqD,IAAI,CAAGrB,KAA/C,CAAsD7oD,IAAI,CAAE,CAAF,CAAJ,CAAYkqD,IAAI,CAAGrB,KAAzE,CAAF,CAEA,CAED,CAEDroD,KAAK,CAACrF,QAAN,CAAgBP,KAAhB,CAAuB4tD,aAAa,CAACznF,MAAd,CAAuB,CAAvB,CAA2B65B,KAAlD,CAAyD,CAAzD,EAEA,CAED;EAEA,SAASqxD,cAAT,EAA0B,CAEzB,MAAMrxD,KAAK,CAAG4tD,aAAa,CAACznF,MAAd,CAAuB,CAArC,CACA,IAAIorF,WAAW,CAAG,CAAlB,CACAC,SAAS,CAAEjE,OAAF,CAAWgE,WAAX,CAAT,CACAA,WAAW,EAAIhE,OAAO,CAACpnF,MAAvB,CAEA,IAAM,IAAIsJ,CAAC,CAAG,CAAR,CAAWy/E,EAAE,CAAG3E,KAAK,CAACpkF,MAA5B,CAAoCsJ,CAAC,CAAGy/E,EAAxC,CAA4Cz/E,CAAC,EAA7C,CAAmD,CAElD,MAAM0/E,KAAK,CAAG5E,KAAK,CAAE96E,CAAF,CAAnB,CACA+hF,SAAS,CAAErC,KAAF,CAASoC,WAAT,CAAT,CAEA;EACAA,WAAW,EAAIpC,KAAK,CAAChpF,MAArB,CAEA,CAGDy/B,KAAK,CAACrF,QAAN,CAAgBP,KAAhB,CAAuB4tD,aAAa,CAACznF,MAAd,CAAuB,CAAvB,CAA2B65B,KAAlD,CAAyD,CAAzD,EAGA,CAED,SAASwxD,SAAT,CAAoBjE,OAApB,CAA6BgE,WAA7B,CAA2C,CAE1C,IAAItrF,CAAC,CAAGsnF,OAAO,CAACpnF,MAAhB,CAEA,MAAQ,EAAGF,CAAH,EAAQ,CAAhB,CAAoB,CAEnB,MAAM2d,CAAC,CAAG3d,CAAV,CACA,IAAIs4D,CAAC,CAAGt4D,CAAC,CAAG,CAAZ,CACA,GAAKs4D,CAAC,CAAG,CAAT,CAAaA,CAAC,CAAGgvB,OAAO,CAACpnF,MAAR,CAAiB,CAArB,CAEb;EAEA,IAAM,IAAI+C,CAAC,CAAG,CAAR,CAAWuoF,EAAE,CAAKxD,KAAK,CAAGK,aAAa,CAAG,CAAhD,CAAqDplF,CAAC,CAAGuoF,EAAzD,CAA6DvoF,CAAC,EAA9D,CAAoE,CAEnE,MAAMwoF,KAAK,CAAGpC,IAAI,CAAGpmF,CAArB,CACA,MAAMyoF,KAAK,CAAGrC,IAAI,EAAKpmF,CAAC,CAAG,CAAT,CAAlB,CAEA,MAAMC,CAAC,CAAGooF,WAAW,CAAG3tE,CAAd,CAAkB8tE,KAA5B,CACCtoF,CAAC,CAAGmoF,WAAW,CAAGhzB,CAAd,CAAkBmzB,KADvB,CAECtlF,CAAC,CAAGmlF,WAAW,CAAGhzB,CAAd,CAAkBozB,KAFvB,CAGCriF,CAAC,CAAGiiF,WAAW,CAAG3tE,CAAd,CAAkB+tE,KAHvB,CAKAC,EAAE,CAAEzoF,CAAF,CAAKC,CAAL,CAAQgD,CAAR,CAAWkD,CAAX,CAAF,CAEA,CAED,CAED,CAED,SAAS3G,CAAT,CAAYpB,CAAZ,CAAeC,CAAf,CAAkBoO,CAAlB,CAAsB,CAErBm4E,WAAW,CAACzoF,IAAZ,CAAkBiC,CAAlB,EACAwmF,WAAW,CAACzoF,IAAZ,CAAkBkC,CAAlB,EACAumF,WAAW,CAACzoF,IAAZ,CAAkBsQ,CAAlB,EAEA,CAGD,SAAS07E,EAAT,CAAanoF,CAAb,CAAgBC,CAAhB,CAAmBgD,CAAnB,CAAuB,CAEtBylF,SAAS,CAAE1oF,CAAF,CAAT,CACA0oF,SAAS,CAAEzoF,CAAF,CAAT,CACAyoF,SAAS,CAAEzlF,CAAF,CAAT,CAEA,MAAM0lF,SAAS,CAAGlE,aAAa,CAACznF,MAAd,CAAuB,CAAzC,CACA,MAAMm7B,GAAG,CAAGktD,KAAK,CAACuD,aAAN,CAAqBnsD,KAArB,CAA4BgoD,aAA5B,CAA2CkE,SAAS,CAAG,CAAvD,CAA0DA,SAAS,CAAG,CAAtE,CAAyEA,SAAS,CAAG,CAArF,CAAZ,CAEAE,KAAK,CAAE1wD,GAAG,CAAE,CAAF,CAAL,CAAL,CACA0wD,KAAK,CAAE1wD,GAAG,CAAE,CAAF,CAAL,CAAL,CACA0wD,KAAK,CAAE1wD,GAAG,CAAE,CAAF,CAAL,CAAL,CAEA,CAED,SAASswD,EAAT,CAAazoF,CAAb,CAAgBC,CAAhB,CAAmBgD,CAAnB,CAAsBkD,CAAtB,CAA0B,CAEzBuiF,SAAS,CAAE1oF,CAAF,CAAT,CACA0oF,SAAS,CAAEzoF,CAAF,CAAT,CACAyoF,SAAS,CAAEviF,CAAF,CAAT,CAEAuiF,SAAS,CAAEzoF,CAAF,CAAT,CACAyoF,SAAS,CAAEzlF,CAAF,CAAT,CACAylF,SAAS,CAAEviF,CAAF,CAAT,CAGA,MAAMwiF,SAAS,CAAGlE,aAAa,CAACznF,MAAd,CAAuB,CAAzC,CACA,MAAMm7B,GAAG,CAAGktD,KAAK,CAACyD,kBAAN,CAA0BrsD,KAA1B,CAAiCgoD,aAAjC,CAAgDkE,SAAS,CAAG,CAA5D,CAA+DA,SAAS,CAAG,CAA3E,CAA8EA,SAAS,CAAG,CAA1F,CAA6FA,SAAS,CAAG,CAAzG,CAAZ,CAEAE,KAAK,CAAE1wD,GAAG,CAAE,CAAF,CAAL,CAAL,CACA0wD,KAAK,CAAE1wD,GAAG,CAAE,CAAF,CAAL,CAAL,CACA0wD,KAAK,CAAE1wD,GAAG,CAAE,CAAF,CAAL,CAAL,CAEA0wD,KAAK,CAAE1wD,GAAG,CAAE,CAAF,CAAL,CAAL,CACA0wD,KAAK,CAAE1wD,GAAG,CAAE,CAAF,CAAL,CAAL,CACA0wD,KAAK,CAAE1wD,GAAG,CAAE,CAAF,CAAL,CAAL,CAEA,CAED,SAASuwD,SAAT,CAAoBnsF,KAApB,CAA4B,CAE3BkoF,aAAa,CAACtoF,IAAd,CAAoByoF,WAAW,CAAEroF,KAAK,CAAG,CAAR,CAAY,CAAd,CAA/B,EACAkoF,aAAa,CAACtoF,IAAd,CAAoByoF,WAAW,CAAEroF,KAAK,CAAG,CAAR,CAAY,CAAd,CAA/B,EACAkoF,aAAa,CAACtoF,IAAd,CAAoByoF,WAAW,CAAEroF,KAAK,CAAG,CAAR,CAAY,CAAd,CAA/B,EAEA,CAGD,SAASssF,KAAT,CAAgBE,OAAhB,CAA0B,CAEzBrE,OAAO,CAACvoF,IAAR,CAAc4sF,OAAO,CAAC3qF,CAAtB,EACAsmF,OAAO,CAACvoF,IAAR,CAAc4sF,OAAO,CAAC1qF,CAAtB,EAEA,CAED,CAED,CAEDnK,MAAM,EAAG,CAER,MAAMsY,IAAI,CAAG,MAAMtY,MAAN,EAAb,CAEA,MAAM2zB,MAAM,CAAG,KAAKe,UAAL,CAAgBf,MAA/B,CACA,MAAMxZ,OAAO,CAAG,KAAKua,UAAL,CAAgBva,OAAhC,CAEA,OAAOra,QAAQ,CAAE6zB,MAAF,CAAUxZ,OAAV,CAAmB7B,IAAnB,CAAf,CAEA,CAEc,OAARmxB,QAAQ,CAAEnxB,IAAF,CAAQqb,MAAR,CAAiB,CAE/B,MAAMmhE,cAAc,CAAG,EAAvB,CAEA,IAAM,IAAIvuE,CAAC,CAAG,CAAR,CAAWqd,EAAE,CAAGtrB,IAAI,CAACqb,MAAL,CAAY7qB,MAAlC,CAA0Cyd,CAAC,CAAGqd,EAA9C,CAAkDrd,CAAC,EAAnD,CAAyD,CAExD,MAAMoO,KAAK,CAAGhB,MAAM,CAAErb,IAAI,CAACqb,MAAL,CAAapN,CAAb,CAAF,CAApB,CAEAuuE,cAAc,CAAC7sF,IAAf,CAAqB0sB,KAArB,EAEA,CAED,MAAMu8D,WAAW,CAAG54E,IAAI,CAAC6B,OAAL,CAAa+2E,WAAjC,CAEA,GAAKA,WAAW,GAAKppF,SAArB,CAAiC,CAEhCwQ,IAAI,CAAC6B,OAAL,CAAa+2E,WAAb,CAA2B,IAAIntF,MAAM,CAAEmtF,WAAW,CAACvpF,IAAd,CAAV,GAAiC8hC,QAAjC,CAA2CynD,WAA3C,CAA3B,CAEA,CAED,WAAWtxF,eAAJ,CAAqBk1F,cAArB,CAAqCx8E,IAAI,CAAC6B,OAA1C,CAAP,CAEA,CAnrB2C,CAurB7C,MAAMta,gBAAgB,CAAG,CAExB60F,aAAa,CAAE,SAAW5vE,QAAX,CAAqB0jB,QAArB,CAA+BusD,MAA/B,CAAuCC,MAAvC,CAA+CC,MAA/C,CAAwD,CAEtE,MAAMC,GAAG,CAAG1sD,QAAQ,CAAEusD,MAAM,CAAG,CAAX,CAApB,CACA,MAAMI,GAAG,CAAG3sD,QAAQ,CAAEusD,MAAM,CAAG,CAAT,CAAa,CAAf,CAApB,CACA,MAAMK,GAAG,CAAG5sD,QAAQ,CAAEwsD,MAAM,CAAG,CAAX,CAApB,CACA,MAAMK,GAAG,CAAG7sD,QAAQ,CAAEwsD,MAAM,CAAG,CAAT,CAAa,CAAf,CAApB,CACA,MAAMM,GAAG,CAAG9sD,QAAQ,CAAEysD,MAAM,CAAG,CAAX,CAApB,CACA,MAAMM,GAAG,CAAG/sD,QAAQ,CAAEysD,MAAM,CAAG,CAAT,CAAa,CAAf,CAApB,CAEA,OAAO,CACN,IAAI5yG,OAAJ,CAAa6yG,GAAb,CAAkBC,GAAlB,CADM,CAEN,IAAI9yG,OAAJ,CAAa+yG,GAAb,CAAkBC,GAAlB,CAFM,CAGN,IAAIhzG,OAAJ,CAAaizG,GAAb,CAAkBC,GAAlB,CAHM,CAAP,CAMA,CAjBuB,CAmBxBX,kBAAkB,CAAE,SAAW9vE,QAAX,CAAqB0jB,QAArB,CAA+BusD,MAA/B,CAAuCC,MAAvC,CAA+CC,MAA/C,CAAuDO,MAAvD,CAAgE,CAEnF,MAAMN,GAAG,CAAG1sD,QAAQ,CAAEusD,MAAM,CAAG,CAAX,CAApB,CACA,MAAMI,GAAG,CAAG3sD,QAAQ,CAAEusD,MAAM,CAAG,CAAT,CAAa,CAAf,CAApB,CACA,MAAMU,GAAG,CAAGjtD,QAAQ,CAAEusD,MAAM,CAAG,CAAT,CAAa,CAAf,CAApB,CACA,MAAMK,GAAG,CAAG5sD,QAAQ,CAAEwsD,MAAM,CAAG,CAAX,CAApB,CACA,MAAMK,GAAG,CAAG7sD,QAAQ,CAAEwsD,MAAM,CAAG,CAAT,CAAa,CAAf,CAApB,CACA,MAAMU,GAAG,CAAGltD,QAAQ,CAAEwsD,MAAM,CAAG,CAAT,CAAa,CAAf,CAApB,CACA,MAAMM,GAAG,CAAG9sD,QAAQ,CAAEysD,MAAM,CAAG,CAAX,CAApB,CACA,MAAMM,GAAG,CAAG/sD,QAAQ,CAAEysD,MAAM,CAAG,CAAT,CAAa,CAAf,CAApB,CACA,MAAMU,GAAG,CAAGntD,QAAQ,CAAEysD,MAAM,CAAG,CAAT,CAAa,CAAf,CAApB,CACA,MAAMW,GAAG,CAAGptD,QAAQ,CAAEgtD,MAAM,CAAG,CAAX,CAApB,CACA,MAAMK,GAAG,CAAGrtD,QAAQ,CAAEgtD,MAAM,CAAG,CAAT,CAAa,CAAf,CAApB,CACA,MAAMM,GAAG,CAAGttD,QAAQ,CAAEgtD,MAAM,CAAG,CAAT,CAAa,CAAf,CAApB,CAEA,GAAKxsF,IAAI,CAACwE,GAAL,CAAU2nF,GAAG,CAAGE,GAAhB,EAAwBrsF,IAAI,CAACwE,GAAL,CAAU0nF,GAAG,CAAGE,GAAhB,CAA7B,CAAqD,CAEpD,OAAO,CACN,IAAI/yG,OAAJ,CAAa6yG,GAAb,CAAkB,EAAIO,GAAtB,CADM,CAEN,IAAIpzG,OAAJ,CAAa+yG,GAAb,CAAkB,EAAIM,GAAtB,CAFM,CAGN,IAAIrzG,OAAJ,CAAaizG,GAAb,CAAkB,EAAIK,GAAtB,CAHM,CAIN,IAAItzG,OAAJ,CAAauzG,GAAb,CAAkB,EAAIE,GAAtB,CAJM,CAAP,CAOA,CATD,KASO,CAEN,OAAO,CACN,IAAIzzG,OAAJ,CAAa8yG,GAAb,CAAkB,EAAIM,GAAtB,CADM,CAEN,IAAIpzG,OAAJ,CAAagzG,GAAb,CAAkB,EAAIK,GAAtB,CAFM,CAGN,IAAIrzG,OAAJ,CAAakzG,GAAb,CAAkB,EAAII,GAAtB,CAHM,CAIN,IAAItzG,OAAJ,CAAawzG,GAAb,CAAkB,EAAIC,GAAtB,CAJM,CAAP,CAOA,CAED,CAtDuB,CAAzB,CA0DA,SAASh2F,QAAT,CAAmB6zB,MAAnB,CAA2BxZ,OAA3B,CAAoC7B,IAApC,CAA2C,CAE1CA,IAAI,CAACqb,MAAL,CAAc,EAAd,CAEA,GAAK/b,KAAK,CAACC,OAAN,CAAe8b,MAAf,CAAL,CAA+B,CAE9B,IAAM,IAAI/qB,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG8qB,MAAM,CAAC7qB,MAA5B,CAAoCF,CAAC,CAAGC,CAAxC,CAA2CD,CAAC,EAA5C,CAAkD,CAEjD,MAAM+rB,KAAK,CAAGhB,MAAM,CAAE/qB,CAAF,CAApB,CAEA0P,IAAI,CAACqb,MAAL,CAAY1rB,IAAZ,CAAkB0sB,KAAK,CAAC/qB,IAAxB,EAEA,CAED,CAVD,KAUO,CAEN0O,IAAI,CAACqb,MAAL,CAAY1rB,IAAZ,CAAkB0rB,MAAM,CAAC/pB,IAAzB,EAEA,CAED,GAAKuQ,OAAO,CAAC+2E,WAAR,GAAwBppF,SAA7B,CAAyCwQ,IAAI,CAAC6B,OAAL,CAAa+2E,WAAb,CAA2B/2E,OAAO,CAAC+2E,WAAR,CAAoBlxF,MAApB,EAA3B,CAEzC,OAAOsY,IAAP,CAEA,CA6UD,MAAMvY,aAAN,SAA4B7W,cAAe,CAE1CuhB,WAAW,CAAEkpB,MAAM,CAAG,IAAIzvB,KAAJ,CAAW,CAAE,IAAI7hB,OAAJ,CAAa,CAAb,CAAgB,GAAhB,CAAF,CAAyB,IAAIA,OAAJ,CAAa,CAAE,GAAf,CAAoB,CAAE,GAAtB,CAAzB,CAAsD,IAAIA,OAAJ,CAAa,GAAb,CAAkB,CAAE,GAApB,CAAtD,CAAX,CAAX,CAA2GsuG,aAAa,CAAG,EAA3H,CAAgI,CAE1I,QACA,KAAKhpF,IAAL,CAAY,eAAZ,CAEA,KAAK+sB,UAAL,CAAkB,CACjBf,MAAM,CAAEA,MADS,CAEjBg9D,aAAa,CAAEA,aAFE,CAAlB,CAKA;EAEA,MAAM7sD,OAAO,CAAG,EAAhB,CACA,MAAM0E,QAAQ,CAAG,EAAjB,CACA,MAAMxE,OAAO,CAAG,EAAhB,CACA,MAAMC,GAAG,CAAG,EAAZ,CAEA;EAEA,IAAIyE,UAAU,CAAG,CAAjB,CACA,IAAIc,UAAU,CAAG,CAAjB,CAEA;EAEA,GAAK5xB,KAAK,CAACC,OAAN,CAAe8b,MAAf,IAA4B,KAAjC,CAAyC,CAExC88D,QAAQ,CAAE98D,MAAF,CAAR,CAEA,CAJD,KAIO,CAEN,IAAM,IAAI/qB,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG+qB,MAAM,CAAC7qB,MAA5B,CAAoCF,CAAC,EAArC,CAA2C,CAE1C6nF,QAAQ,CAAE98D,MAAM,CAAE/qB,CAAF,CAAR,CAAR,CAEA,KAAKs6B,QAAL,CAAewF,UAAf,CAA2Bc,UAA3B,CAAuC5gC,CAAvC,EAA4C;EAE5C8/B,UAAU,EAAIc,UAAd,CACAA,UAAU,CAAG,CAAb,CAEA,CAED,CAED;EAEA,KAAK3G,QAAL,CAAeiB,OAAf,EACA,KAAKf,YAAL,CAAmB,UAAnB,CAA+B,IAAIt6C,sBAAJ,CAA4B+/C,QAA5B,CAAsC,CAAtC,CAA/B,EACA,KAAKzF,YAAL,CAAmB,QAAnB,CAA6B,IAAIt6C,sBAAJ,CAA4Bu7C,OAA5B,CAAqC,CAArC,CAA7B,EACA,KAAKjB,YAAL,CAAmB,IAAnB,CAAyB,IAAIt6C,sBAAJ,CAA4Bw7C,GAA5B,CAAiC,CAAjC,CAAzB,EAGA;EAEA,SAASwsD,QAAT,CAAmB97D,KAAnB,CAA2B,CAE1B,MAAMohE,WAAW,CAAGvtD,QAAQ,CAAC1/B,MAAT,CAAkB,CAAtC,CACA,MAAM8a,MAAM,CAAG+Q,KAAK,CAAC04D,aAAN,CAAqBsD,aAArB,CAAf,CAEA,IAAIqF,aAAa,CAAGpyE,MAAM,CAAC+Q,KAA3B,CACA,MAAMshE,UAAU,CAAGryE,MAAM,CAACspE,KAA1B,CAEA;EAEA,GAAKztF,UAAU,CAAC0wF,WAAX,CAAwB6F,aAAxB,IAA4C,KAAjD,CAAyD,CAExDA,aAAa,CAAGA,aAAa,CAACpE,OAAd,EAAhB,CAEA,CAED,IAAM,IAAIhpF,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGotF,UAAU,CAACntF,MAAhC,CAAwCF,CAAC,CAAGC,CAA5C,CAA+CD,CAAC,EAAhD,CAAsD,CAErD,MAAMstF,SAAS,CAAGD,UAAU,CAAErtF,CAAF,CAA5B,CAEA,GAAKnJ,UAAU,CAAC0wF,WAAX,CAAwB+F,SAAxB,IAAwC,IAA7C,CAAoD,CAEnDD,UAAU,CAAErtF,CAAF,CAAV,CAAkBstF,SAAS,CAACtE,OAAV,EAAlB,CAEA,CAED,CAED,MAAMvB,KAAK,CAAG5wF,UAAU,CAAC2wF,gBAAX,CAA6B4F,aAA7B,CAA4CC,UAA5C,CAAd,CAEA;EAEA,IAAM,IAAIrtF,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGotF,UAAU,CAACntF,MAAhC,CAAwCF,CAAC,CAAGC,CAA5C,CAA+CD,CAAC,EAAhD,CAAsD,CAErD,MAAMstF,SAAS,CAAGD,UAAU,CAAErtF,CAAF,CAA5B,CACAotF,aAAa,CAAGA,aAAa,CAACrJ,MAAd,CAAsBuJ,SAAtB,CAAhB,CAEA,CAED;EAEA,IAAM,IAAIttF,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGmtF,aAAa,CAACltF,MAAnC,CAA2CF,CAAC,CAAGC,CAA/C,CAAkDD,CAAC,EAAnD,CAAyD,CAExD,MAAMg1D,MAAM,CAAGo4B,aAAa,CAAEptF,CAAF,CAA5B,CAEA4/B,QAAQ,CAACvgC,IAAT,CAAe21D,MAAM,CAAC1zD,CAAtB,CAAyB0zD,MAAM,CAACzzD,CAAhC,CAAmC,CAAnC,EACA65B,OAAO,CAAC/7B,IAAR,CAAc,CAAd,CAAiB,CAAjB,CAAoB,CAApB,EACAg8B,GAAG,CAACh8B,IAAJ,CAAU21D,MAAM,CAAC1zD,CAAjB,CAAoB0zD,MAAM,CAACzzD,CAA3B,EAAgC;EAEhC,CAED;EAEA,IAAM,IAAIvB,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGwnF,KAAK,CAACvnF,MAA3B,CAAmCF,CAAC,CAAGC,CAAvC,CAA0CD,CAAC,EAA3C,CAAiD,CAEhD,MAAMm/B,IAAI,CAAGsoD,KAAK,CAAEznF,CAAF,CAAlB,CAEA,MAAMkD,CAAC,CAAGi8B,IAAI,CAAE,CAAF,CAAJ,CAAYguD,WAAtB,CACA,MAAMhqF,CAAC,CAAGg8B,IAAI,CAAE,CAAF,CAAJ,CAAYguD,WAAtB,CACA,MAAMhnF,CAAC,CAAGg5B,IAAI,CAAE,CAAF,CAAJ,CAAYguD,WAAtB,CAEAjyD,OAAO,CAAC77B,IAAR,CAAc6D,CAAd,CAAiBC,CAAjB,CAAoBgD,CAApB,EACAy6B,UAAU,EAAI,CAAd,CAEA,CAED,CAED,CAEDxpC,MAAM,EAAG,CAER,MAAMsY,IAAI,CAAG,MAAMtY,MAAN,EAAb,CAEA,MAAM2zB,MAAM,CAAG,KAAKe,UAAL,CAAgBf,MAA/B,CAEA,OAAO3zB,MAAM,CAAE2zB,MAAF,CAAUrb,IAAV,CAAb,CAEA,CAEc,OAARmxB,QAAQ,CAAEnxB,IAAF,CAAQqb,MAAR,CAAiB,CAE/B,MAAMmhE,cAAc,CAAG,EAAvB,CAEA,IAAM,IAAIvuE,CAAC,CAAG,CAAR,CAAWqd,EAAE,CAAGtrB,IAAI,CAACqb,MAAL,CAAY7qB,MAAlC,CAA0Cyd,CAAC,CAAGqd,EAA9C,CAAkDrd,CAAC,EAAnD,CAAyD,CAExD,MAAMoO,KAAK,CAAGhB,MAAM,CAAErb,IAAI,CAACqb,MAAL,CAAapN,CAAb,CAAF,CAApB,CAEAuuE,cAAc,CAAC7sF,IAAf,CAAqB0sB,KAArB,EAEA,CAED,WAAW50B,aAAJ,CAAmB+0F,cAAnB,CAAmCx8E,IAAI,CAACq4E,aAAxC,CAAP,CAEA,CArJyC,CAyJ3C,SAAS3wF,MAAT,CAAiB2zB,MAAjB,CAAyBrb,IAAzB,CAAgC,CAE/BA,IAAI,CAACqb,MAAL,CAAc,EAAd,CAEA,GAAK/b,KAAK,CAACC,OAAN,CAAe8b,MAAf,CAAL,CAA+B,CAE9B,IAAM,IAAI/qB,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG8qB,MAAM,CAAC7qB,MAA5B,CAAoCF,CAAC,CAAGC,CAAxC,CAA2CD,CAAC,EAA5C,CAAkD,CAEjD,MAAM+rB,KAAK,CAAGhB,MAAM,CAAE/qB,CAAF,CAApB,CAEA0P,IAAI,CAACqb,MAAL,CAAY1rB,IAAZ,CAAkB0sB,KAAK,CAAC/qB,IAAxB,EAEA,CAED,CAVD,KAUO,CAEN0O,IAAI,CAACqb,MAAL,CAAY1rB,IAAZ,CAAkB0rB,MAAM,CAAC/pB,IAAzB,EAEA,CAED,OAAO0O,IAAP,CAEA,CAED,MAAMrY,cAAN,SAA6B/W,cAAe,CAE3CuhB,WAAW,CAAE8X,MAAM,CAAG,CAAX,CAAc6lB,aAAa,CAAG,EAA9B,CAAkCC,cAAc,CAAG,EAAnD,CAAuD8tD,QAAQ,CAAG,CAAlE,CAAqEC,SAAS,CAAGptF,IAAI,CAACC,EAAL,CAAU,CAA3F,CAA8Fy8E,UAAU,CAAG,CAA3G,CAA8GC,WAAW,CAAG38E,IAAI,CAACC,EAAjI,CAAsI,CAEhJ,QACA,KAAKtB,IAAL,CAAY,gBAAZ,CAEA,KAAK+sB,UAAL,CAAkB,CACjBnS,MAAM,CAAEA,MADS,CAEjB6lB,aAAa,CAAEA,aAFE,CAGjBC,cAAc,CAAEA,cAHC,CAIjB8tD,QAAQ,CAAEA,QAJO,CAKjBC,SAAS,CAAEA,SALM,CAMjB1Q,UAAU,CAAEA,UANK,CAOjBC,WAAW,CAAEA,WAPI,CAAlB,CAUAv9C,aAAa,CAAGp/B,IAAI,CAACe,GAAL,CAAU,CAAV,CAAaf,IAAI,CAACsB,KAAL,CAAY89B,aAAZ,CAAb,CAAhB,CACAC,cAAc,CAAGr/B,IAAI,CAACe,GAAL,CAAU,CAAV,CAAaf,IAAI,CAACsB,KAAL,CAAY+9B,cAAZ,CAAb,CAAjB,CAEA,MAAMguD,QAAQ,CAAGrtF,IAAI,CAACc,GAAL,CAAU47E,UAAU,CAAGC,WAAvB,CAAoC38E,IAAI,CAACC,EAAzC,CAAjB,CAEA,IAAIZ,KAAK,CAAG,CAAZ,CACA,MAAMiuF,IAAI,CAAG,EAAb,CAEA,MAAM14B,MAAM,CAAG,IAAI36E,OAAJ,EAAf,CACA,MAAMk/B,MAAM,CAAG,IAAIl/B,OAAJ,EAAf,CAEA;EAEA,MAAM6gD,OAAO,CAAG,EAAhB,CACA,MAAM0E,QAAQ,CAAG,EAAjB,CACA,MAAMxE,OAAO,CAAG,EAAhB,CACA,MAAMC,GAAG,CAAG,EAAZ,CAEA;EAEA,IAAM,IAAIrjB,EAAE,CAAG,CAAf,CAAkBA,EAAE,EAAIynB,cAAxB,CAAwCznB,EAAE,EAA1C,CAAgD,CAE/C,MAAM21E,WAAW,CAAG,EAApB,CAEA,MAAMjrF,CAAC,CAAGsV,EAAE,CAAGynB,cAAf,CAEA;EAEA,IAAImuD,OAAO,CAAG,CAAd,CAEA,GAAK51E,EAAE,EAAI,CAAN,EAAW8kE,UAAU,EAAI,CAA9B,CAAkC,CAEjC8Q,OAAO,CAAG,IAAMpuD,aAAhB,CAEA,CAJD,QAIYxnB,EAAE,EAAIynB,cAAN,EAAwBguD,QAAQ,EAAIrtF,IAAI,CAACC,EAA9C,CAAmD,CAEzDutF,OAAO,CAAG,CAAE,GAAF,CAAQpuD,aAAlB,CAEA,CAED,IAAM,IAAIznB,EAAE,CAAG,CAAf,CAAkBA,EAAE,EAAIynB,aAAxB,CAAuCznB,EAAE,EAAzC,CAA+C,CAE9C,MAAMsC,CAAC,CAAGtC,EAAE,CAAGynB,aAAf,CAEA;EAEAw1B,MAAM,CAAC1zD,CAAP,CAAW,CAAEqY,MAAF,CAAWvZ,IAAI,CAACgG,GAAL,CAAUmnF,QAAQ,CAAGlzE,CAAC,CAAGmzE,SAAzB,CAAX,CAAkDptF,IAAI,CAACiG,GAAL,CAAUy2E,UAAU,CAAGp6E,CAAC,CAAGq6E,WAA3B,CAA7D,CACA/nB,MAAM,CAACzzD,CAAP,CAAWoY,MAAM,CAAGvZ,IAAI,CAACgG,GAAL,CAAU02E,UAAU,CAAGp6E,CAAC,CAAGq6E,WAA3B,CAApB,CACA/nB,MAAM,CAACrlD,CAAP,CAAWgK,MAAM,CAAGvZ,IAAI,CAACiG,GAAL,CAAUknF,QAAQ,CAAGlzE,CAAC,CAAGmzE,SAAzB,CAAT,CAAgDptF,IAAI,CAACiG,GAAL,CAAUy2E,UAAU,CAAGp6E,CAAC,CAAGq6E,WAA3B,CAA3D,CAEAn9C,QAAQ,CAACvgC,IAAT,CAAe21D,MAAM,CAAC1zD,CAAtB,CAAyB0zD,MAAM,CAACzzD,CAAhC,CAAmCyzD,MAAM,CAACrlD,CAA1C,EAEA;EAEA4J,MAAM,CAAC9W,IAAP,CAAauyD,MAAb,EAAsBnwD,SAAtB,GACAu2B,OAAO,CAAC/7B,IAAR,CAAcka,MAAM,CAACjY,CAArB,CAAwBiY,MAAM,CAAChY,CAA/B,CAAkCgY,MAAM,CAAC5J,CAAzC,EAEA;EAEA0rB,GAAG,CAACh8B,IAAJ,CAAUgb,CAAC,CAAGuzE,OAAd,CAAuB,EAAIlrF,CAA3B,EAEAirF,WAAW,CAACtuF,IAAZ,CAAkBI,KAAK,EAAvB,EAEA,CAEDiuF,IAAI,CAACruF,IAAL,CAAWsuF,WAAX,EAEA,CAED;EAEA,IAAM,IAAI31E,EAAE,CAAG,CAAf,CAAkBA,EAAE,CAAGynB,cAAvB,CAAuCznB,EAAE,EAAzC,CAA+C,CAE9C,IAAM,IAAID,EAAE,CAAG,CAAf,CAAkBA,EAAE,CAAGynB,aAAvB,CAAsCznB,EAAE,EAAxC,CAA8C,CAE7C,MAAM7U,CAAC,CAAGwqF,IAAI,CAAE11E,EAAF,CAAJ,CAAYD,EAAE,CAAG,CAAjB,CAAV,CACA,MAAM5U,CAAC,CAAGuqF,IAAI,CAAE11E,EAAF,CAAJ,CAAYD,EAAZ,CAAV,CACA,MAAM5R,CAAC,CAAGunF,IAAI,CAAE11E,EAAE,CAAG,CAAP,CAAJ,CAAgBD,EAAhB,CAAV,CACA,MAAM1O,CAAC,CAAGqkF,IAAI,CAAE11E,EAAE,CAAG,CAAP,CAAJ,CAAgBD,EAAE,CAAG,CAArB,CAAV,CAEA,GAAKC,EAAE,GAAK,CAAP,EAAY8kE,UAAU,CAAG,CAA9B,CAAkC5hD,OAAO,CAAC77B,IAAR,CAAc6D,CAAd,CAAiBC,CAAjB,CAAoBkG,CAApB,EAClC,GAAK2O,EAAE,GAAKynB,cAAc,CAAG,CAAxB,EAA6BguD,QAAQ,CAAGrtF,IAAI,CAACC,EAAlD,CAAuD66B,OAAO,CAAC77B,IAAR,CAAc8D,CAAd,CAAiBgD,CAAjB,CAAoBkD,CAApB,EAEvD,CAED,CAED;EAEA,KAAK4wB,QAAL,CAAeiB,OAAf,EACA,KAAKf,YAAL,CAAmB,UAAnB,CAA+B,IAAIt6C,sBAAJ,CAA4B+/C,QAA5B,CAAsC,CAAtC,CAA/B,EACA,KAAKzF,YAAL,CAAmB,QAAnB,CAA6B,IAAIt6C,sBAAJ,CAA4Bu7C,OAA5B,CAAqC,CAArC,CAA7B,EACA,KAAKjB,YAAL,CAAmB,IAAnB,CAAyB,IAAIt6C,sBAAJ,CAA4Bw7C,GAA5B,CAAiC,CAAjC,CAAzB,EAEA,CAEc,OAARwF,QAAQ,CAAEnxB,IAAF,CAAS,CAEvB,WAAWrY,cAAJ,CAAoBqY,IAAI,CAACiK,MAAzB,CAAiCjK,IAAI,CAAC8vB,aAAtC,CAAqD9vB,IAAI,CAAC+vB,cAA1D,CAA0E/vB,IAAI,CAAC69E,QAA/E,CAAyF79E,IAAI,CAAC89E,SAA9F,CAAyG99E,IAAI,CAACotE,UAA9G,CAA0HptE,IAAI,CAACqtE,WAA/H,CAAP,CAEA,CArH0C,CAuZ5C,MAAM8Q,YAAN,SAA2BvtG,cAAe,CAEzCuhB,WAAW,CAAE2lD,IAAI,CAAG,IAAIvsD,qBAAJ,CAA2B,IAAI5gB,OAAJ,CAAa,CAAE,CAAf,CAAkB,CAAE,CAApB,CAAuB,CAAvB,CAA3B,CAAuD,IAAIA,OAAJ,CAAa,CAAE,CAAf,CAAkB,CAAlB,CAAqB,CAArB,CAAvD,CAAiF,IAAIA,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CAAjF,CAAT,CAAoHyzG,eAAe,CAAG,EAAtI,CAA0In0E,MAAM,CAAG,CAAnJ,CAAsJijE,cAAc,CAAG,CAAvK,CAA0K6C,MAAM,CAAG,KAAnL,CAA2L,CAErM,QACA,KAAK1gF,IAAL,CAAY,cAAZ,CAEA,KAAK+sB,UAAL,CAAkB,CACjB07B,IAAI,CAAEA,IADW,CAEjBsmC,eAAe,CAAEA,eAFA,CAGjBn0E,MAAM,CAAEA,MAHS,CAIjBijE,cAAc,CAAEA,cAJC,CAKjB6C,MAAM,CAAEA,MALS,CAAlB,CAQA,MAAMsO,MAAM,CAAGvmC,IAAI,CAAC+3B,mBAAL,CAA0BuO,eAA1B,CAA2CrO,MAA3C,CAAf,CAEA;EAEA,KAAKlkD,QAAL,CAAgBwyD,MAAM,CAACxyD,QAAvB,CACA,KAAKH,OAAL,CAAe2yD,MAAM,CAAC3yD,OAAtB,CACA,KAAKskD,SAAL,CAAiBqO,MAAM,CAACrO,SAAxB,CAEA;EAEA,MAAM1qB,MAAM,CAAG,IAAI36E,OAAJ,EAAf,CACA,MAAMk/B,MAAM,CAAG,IAAIl/B,OAAJ,EAAf,CACA,MAAMg1B,EAAE,CAAG,IAAI51B,OAAJ,EAAX,CACA,IAAIu0G,CAAC,CAAG,IAAI3zG,OAAJ,EAAR,CAEA;EAEA,MAAMulD,QAAQ,CAAG,EAAjB,CACA,MAAMxE,OAAO,CAAG,EAAhB,CACA,MAAMC,GAAG,CAAG,EAAZ,CACA,MAAMH,OAAO,CAAG,EAAhB,CAEA;EAEA+yD,kBAAkB,GAElB;EAEA,KAAKh0D,QAAL,CAAeiB,OAAf,EACA,KAAKf,YAAL,CAAmB,UAAnB,CAA+B,IAAIt6C,sBAAJ,CAA4B+/C,QAA5B,CAAsC,CAAtC,CAA/B,EACA,KAAKzF,YAAL,CAAmB,QAAnB,CAA6B,IAAIt6C,sBAAJ,CAA4Bu7C,OAA5B,CAAqC,CAArC,CAA7B,EACA,KAAKjB,YAAL,CAAmB,IAAnB,CAAyB,IAAIt6C,sBAAJ,CAA4Bw7C,GAA5B,CAAiC,CAAjC,CAAzB,EAEA;EAEA,SAAS4yD,kBAAT,EAA8B,CAE7B,IAAM,IAAIjuF,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG8tF,eAArB,CAAsC9tF,CAAC,EAAvC,CAA6C,CAE5CkuF,eAAe,CAAEluF,CAAF,CAAf,CAEA,CAED;EACA;EACA;EACA;EAEAkuF,eAAe,CAAIzO,MAAM,GAAK,KAAb,CAAuBqO,eAAvB,CAAyC,CAA3C,CAAf,CAEA;EACA;EAEAK,WAAW,GAEX;EAEAC,eAAe,GAEf,CAED,SAASF,eAAT,CAA0BluF,CAA1B,CAA8B;EAI7BguF,CAAC,CAAGxmC,IAAI,CAACo2B,UAAL,CAAiB59E,CAAC,CAAG8tF,eAArB,CAAsCE,CAAtC,CAAJ,CAEA;EAEA,MAAMK,CAAC,CAAGN,MAAM,CAAC3yD,OAAP,CAAgBp7B,CAAhB,CAAV,CACA,MAAMsuF,CAAC,CAAGP,MAAM,CAACrO,SAAP,CAAkB1/E,CAAlB,CAAV,CAEA;EAEA,IAAM,IAAI2d,CAAC,CAAG,CAAd,CAAiBA,CAAC,EAAIi/D,cAAtB,CAAsCj/D,CAAC,EAAvC,CAA6C,CAE5C,MAAMjb,CAAC,CAAGib,CAAC,CAAGi/D,cAAJ,CAAqBx8E,IAAI,CAACC,EAA1B,CAA+B,CAAzC,CAEA,MAAMgG,GAAG,CAAGjG,IAAI,CAACiG,GAAL,CAAU3D,CAAV,CAAZ,CACA,MAAM0D,GAAG,CAAG,CAAEhG,IAAI,CAACgG,GAAL,CAAU1D,CAAV,CAAd,CAEA;EAEA6W,MAAM,CAACjY,CAAP,CAAa8E,GAAG,CAAGioF,CAAC,CAAC/sF,CAAR,CAAY+E,GAAG,CAAGioF,CAAC,CAAChtF,CAAjC,CACAiY,MAAM,CAAChY,CAAP,CAAa6E,GAAG,CAAGioF,CAAC,CAAC9sF,CAAR,CAAY8E,GAAG,CAAGioF,CAAC,CAAC/sF,CAAjC,CACAgY,MAAM,CAAC5J,CAAP,CAAavJ,GAAG,CAAGioF,CAAC,CAAC1+E,CAAR,CAAYtJ,GAAG,CAAGioF,CAAC,CAAC3+E,CAAjC,CACA4J,MAAM,CAAC1U,SAAP,GAEAu2B,OAAO,CAAC/7B,IAAR,CAAcka,MAAM,CAACjY,CAArB,CAAwBiY,MAAM,CAAChY,CAA/B,CAAkCgY,MAAM,CAAC5J,CAAzC,EAEA;EAEAqlD,MAAM,CAAC1zD,CAAP,CAAW0sF,CAAC,CAAC1sF,CAAF,CAAMqY,MAAM,CAAGJ,MAAM,CAACjY,CAAjC,CACA0zD,MAAM,CAACzzD,CAAP,CAAWysF,CAAC,CAACzsF,CAAF,CAAMoY,MAAM,CAAGJ,MAAM,CAAChY,CAAjC,CACAyzD,MAAM,CAACrlD,CAAP,CAAWq+E,CAAC,CAACr+E,CAAF,CAAMgK,MAAM,CAAGJ,MAAM,CAAC5J,CAAjC,CAEAiwB,QAAQ,CAACvgC,IAAT,CAAe21D,MAAM,CAAC1zD,CAAtB,CAAyB0zD,MAAM,CAACzzD,CAAhC,CAAmCyzD,MAAM,CAACrlD,CAA1C,EAEA,CAED,CAED,SAASy+E,eAAT,EAA2B,CAE1B,IAAM,IAAIzwE,CAAC,CAAG,CAAd,CAAiBA,CAAC,EAAImwE,eAAtB,CAAuCnwE,CAAC,EAAxC,CAA8C,CAE7C,IAAM,IAAI3d,CAAC,CAAG,CAAd,CAAiBA,CAAC,EAAI48E,cAAtB,CAAsC58E,CAAC,EAAvC,CAA6C,CAE5C,MAAMkD,CAAC,CAAG,CAAE05E,cAAc,CAAG,CAAnB,GAA2Bj/D,CAAC,CAAG,CAA/B,GAAuC3d,CAAC,CAAG,CAA3C,CAAV,CACA,MAAMmD,CAAC,CAAG,CAAEy5E,cAAc,CAAG,CAAnB,EAAyBj/D,CAAzB,EAA+B3d,CAAC,CAAG,CAAnC,CAAV,CACA,MAAMmG,CAAC,CAAG,CAAEy2E,cAAc,CAAG,CAAnB,EAAyBj/D,CAAzB,CAA6B3d,CAAvC,CACA,MAAMqJ,CAAC,CAAG,CAAEuzE,cAAc,CAAG,CAAnB,GAA2Bj/D,CAAC,CAAG,CAA/B,EAAqC3d,CAA/C,CAEA;EAEAk7B,OAAO,CAAC77B,IAAR,CAAc6D,CAAd,CAAiBC,CAAjB,CAAoBkG,CAApB,EACA6xB,OAAO,CAAC77B,IAAR,CAAc8D,CAAd,CAAiBgD,CAAjB,CAAoBkD,CAApB,EAEA,CAED,CAED,CAED,SAAS8kF,WAAT,EAAuB,CAEtB,IAAM,IAAInuF,CAAC,CAAG,CAAd,CAAiBA,CAAC,EAAI8tF,eAAtB,CAAuC9tF,CAAC,EAAxC,CAA8C,CAE7C,IAAM,IAAI2d,CAAC,CAAG,CAAd,CAAiBA,CAAC,EAAIi/D,cAAtB,CAAsCj/D,CAAC,EAAvC,CAA6C,CAE5CtO,EAAE,CAAC/N,CAAH,CAAOtB,CAAC,CAAG8tF,eAAX,CACAz+E,EAAE,CAAC9N,CAAH,CAAOoc,CAAC,CAAGi/D,cAAX,CAEAvhD,GAAG,CAACh8B,IAAJ,CAAUgQ,EAAE,CAAC/N,CAAb,CAAgB+N,EAAE,CAAC9N,CAAnB,EAEA,CAED,CAED,CAED,CAEDnK,MAAM,EAAG,CAER,MAAMsY,IAAI,CAAG,MAAMtY,MAAN,EAAb,CAEAsY,IAAI,CAAC83C,IAAL,CAAY,KAAK17B,UAAL,CAAgB07B,IAAhB,CAAqBpwD,MAArB,EAAZ,CAEA,OAAOsY,IAAP,CAEA,CAEc,OAARmxB,QAAQ,CAAEnxB,IAAF,CAAS;EAGvB;EACA,WAAWm+E,YAAJ,CACN,IAAI1yF,MAAM,CAAEuU,IAAI,CAAC83C,IAAL,CAAUzoD,IAAZ,CAAV,GAA+B8hC,QAA/B,CAAyCnxB,IAAI,CAAC83C,IAA9C,CADM,CAEN93C,IAAI,CAACo+E,eAFC,CAGNp+E,IAAI,CAACiK,MAHC,CAINjK,IAAI,CAACktE,cAJC,CAKNltE,IAAI,CAAC+vE,MALC,CAAP,CAQA,CApLwC,CAmW1C;EACA;EACA;EACA;EACA,GAEA,MAAMnoF,cAAN,SAA6BxY,QAAS,CAErC+iB,WAAW,CAAEiqB,UAAF,CAAe,CAEzB,QAEA,KAAK/sB,IAAL,CAAY,gBAAZ,CAEA,KAAK0yB,KAAL,CAAa,IAAIpyC,KAAJ,CAAW,QAAX,CAAb,CACA,KAAK2vC,WAAL,CAAmB,IAAnB,CAEA,KAAKoC,SAAL,CAAgBtF,UAAhB,EAEA,CAEDrpB,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKsjB,KAAL,CAAWhvB,IAAX,CAAiB0L,MAAM,CAACsjB,KAAxB,EAEA,WAAA,CAEA,CAvBoC,CA2BtCn6B,cAAc,CAACkP,SAAf,CAAyB4oE,gBAAzB,CAA4C,IAA5C,CAEA;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,GAEA,MAAM53E,oBAAN,SAAmC1Y,QAAS,CAE3C+iB,WAAW,CAAEiqB,UAAF,CAAe,CAEzB,QAEA,KAAKmV,OAAL,CAAe,CAAE,WAAY,EAAd,CAAf,CAEA,KAAKliC,IAAL,CAAY,sBAAZ,CAEA,KAAK0yB,KAAL,CAAa,IAAIpyC,KAAJ,CAAW,QAAX,CAAb,CAAoC;EACpC,KAAKsyC,SAAL,CAAiB,GAAjB,CACA,KAAKC,SAAL,CAAiB,GAAjB,CAEA,KAAKgB,GAAL,CAAW,IAAX,CAEA,KAAKG,QAAL,CAAgB,IAAhB,CACA,KAAKC,iBAAL,CAAyB,GAAzB,CAEA,KAAKC,KAAL,CAAa,IAAb,CACA,KAAKC,cAAL,CAAsB,GAAtB,CAEA,KAAKlB,QAAL,CAAgB,IAAI3yC,KAAJ,CAAW,QAAX,CAAhB,CACA,KAAK4yC,iBAAL,CAAyB,GAAzB,CACA,KAAK4B,WAAL,CAAmB,IAAnB,CAEA,KAAKV,OAAL,CAAe,IAAf,CACA,KAAKC,SAAL,CAAiB,CAAjB,CAEA,KAAKC,SAAL,CAAiB,IAAjB,CACA,KAAKC,aAAL,CAAqB96C,qBAArB,CACA,KAAK+6C,WAAL,CAAmB,IAAI95C,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAnB,CAEA,KAAK+5C,eAAL,CAAuB,IAAvB,CACA,KAAKC,iBAAL,CAAyB,CAAzB,CACA,KAAKC,gBAAL,CAAwB,CAAxB,CAEA,KAAKC,YAAL,CAAoB,IAApB,CAEA,KAAKC,YAAL,CAAoB,IAApB,CAEA,KAAKd,QAAL,CAAgB,IAAhB,CAEA,KAAKmB,MAAL,CAAc,IAAd,CACA,KAAKE,eAAL,CAAuB,GAAvB,CAEA,KAAKE,eAAL,CAAuB,IAAvB,CAEA,KAAKY,SAAL,CAAiB,KAAjB,CACA,KAAKC,kBAAL,CAA0B,CAA1B,CACA,KAAKC,gBAAL,CAAwB,OAAxB,CACA,KAAKC,iBAAL,CAAyB,OAAzB,CAEA,KAAK9D,WAAL,CAAmB,KAAnB,CAEA,KAAKF,SAAL,CAAgBtF,UAAhB,EAEA,CAEDrpB,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAK8yB,OAAL,CAAe,CAAE,WAAY,EAAd,CAAf,CAEA,KAAKxP,KAAL,CAAWhvB,IAAX,CAAiB0L,MAAM,CAACsjB,KAAxB,EACA,KAAKE,SAAL,CAAiBxjB,MAAM,CAACwjB,SAAxB,CACA,KAAKC,SAAL,CAAiBzjB,MAAM,CAACyjB,SAAxB,CAEA,KAAKgB,GAAL,CAAWzkB,MAAM,CAACykB,GAAlB,CAEA,KAAKG,QAAL,CAAgB5kB,MAAM,CAAC4kB,QAAvB,CACA,KAAKC,iBAAL,CAAyB7kB,MAAM,CAAC6kB,iBAAhC,CAEA,KAAKC,KAAL,CAAa9kB,MAAM,CAAC8kB,KAApB,CACA,KAAKC,cAAL,CAAsB/kB,MAAM,CAAC+kB,cAA7B,CAEA,KAAKlB,QAAL,CAAcvvB,IAAd,CAAoB0L,MAAM,CAAC6jB,QAA3B,EACA,KAAK6B,WAAL,CAAmB1lB,MAAM,CAAC0lB,WAA1B,CACA,KAAK5B,iBAAL,CAAyB9jB,MAAM,CAAC8jB,iBAAhC,CAEA,KAAKkB,OAAL,CAAehlB,MAAM,CAACglB,OAAtB,CACA,KAAKC,SAAL,CAAiBjlB,MAAM,CAACilB,SAAxB,CAEA,KAAKC,SAAL,CAAiBllB,MAAM,CAACklB,SAAxB,CACA,KAAKC,aAAL,CAAqBnlB,MAAM,CAACmlB,aAA5B,CACA,KAAKC,WAAL,CAAiB9wB,IAAjB,CAAuB0L,MAAM,CAAColB,WAA9B,EAEA,KAAKC,eAAL,CAAuBrlB,MAAM,CAACqlB,eAA9B,CACA,KAAKC,iBAAL,CAAyBtlB,MAAM,CAACslB,iBAAhC,CACA,KAAKC,gBAAL,CAAwBvlB,MAAM,CAACulB,gBAA/B,CAEA,KAAKC,YAAL,CAAoBxlB,MAAM,CAACwlB,YAA3B,CAEA,KAAKC,YAAL,CAAoBzlB,MAAM,CAACylB,YAA3B,CAEA,KAAKd,QAAL,CAAgB3kB,MAAM,CAAC2kB,QAAvB,CAEA,KAAKmB,MAAL,CAAc9lB,MAAM,CAAC8lB,MAArB,CACA,KAAKE,eAAL,CAAuBhmB,MAAM,CAACgmB,eAA9B,CAEA,KAAKE,eAAL,CAAuBlmB,MAAM,CAACkmB,eAA9B,CAEA,KAAKY,SAAL,CAAiB9mB,MAAM,CAAC8mB,SAAxB,CACA,KAAKC,kBAAL,CAA0B/mB,MAAM,CAAC+mB,kBAAjC,CACA,KAAKC,gBAAL,CAAwBhnB,MAAM,CAACgnB,gBAA/B,CACA,KAAKC,iBAAL,CAAyBjnB,MAAM,CAACinB,iBAAhC,CAEA,KAAK9D,WAAL,CAAmBnjB,MAAM,CAACmjB,WAA1B,CAEA,WAAA,CAEA,CAhH0C,CAoH5C95B,oBAAoB,CAACgP,SAArB,CAA+BmpD,sBAA/B,CAAwD,IAAxD,CAEA;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,GAEA,MAAMl4D,oBAAN,SAAmCD,oBAAqB,CAEvDqK,WAAW,CAAEiqB,UAAF,CAAe,CAEzB,QAEA,KAAKmV,OAAL,CAAe,CAEd,WAAY,EAFE,CAGd,WAAY,EAHE,CAAf,CAOA,KAAKliC,IAAL,CAAY,sBAAZ,CAEA,KAAKyzB,YAAL,CAAoB,IAApB,CACA,KAAKD,kBAAL,CAA0B,GAA1B,CACA,KAAKE,qBAAL,CAA6B,IAA7B,CACA,KAAKE,oBAAL,CAA4B,IAAIl5C,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAA5B,CACA,KAAKi5C,kBAAL,CAA0B,IAA1B,CAEA,KAAKoc,GAAL,CAAW,GAAX,CAEA1hC,MAAM,CAACC,cAAP,CAAuB,IAAvB,CAA6B,cAA7B,CAA6C,CAC5Cq8B,GAAG,CAAE,UAAY,CAEhB,OAAStwD,KAAK,CAAE,KAAQ,KAAK01D,GAAL,CAAW,CAAnB,GAA2B,KAAKA,GAAL,CAAW,CAAtC,CAAF,CAA6C,CAA7C,CAAgD,CAAhD,CAAd,CAEA,CAL2C,CAM5C9sC,GAAG,CAAE,SAAWoyB,YAAX,CAA0B,CAE9B,KAAK0a,GAAL,CAAW,CAAE,EAAI,IAAM1a,YAAZ,GAA+B,EAAI,IAAMA,YAAzC,CAAX,CAEA,CAV2C,CAA7C,EAaA,KAAKtC,UAAL,CAAkB,IAAIzyC,KAAJ,CAAW,QAAX,CAAlB,CACA,KAAKszD,aAAL,CAAqB,IAArB,CACA,KAAK5gB,cAAL,CAAsB,GAAtB,CACA,KAAK6gB,iBAAL,CAAyB,IAAzB,CAEA,KAAKpe,eAAL,CAAuB,IAAvB,CAEA,KAAKC,SAAL,CAAiB,IAAjB,CACA,KAAKC,YAAL,CAAoB,IAApB,CACA,KAAKC,mBAAL,CAA2B,GAA3B,CACA,KAAKC,gBAAL,CAAwB,IAAIv1C,KAAJ,CAAW,CAAX,CAAc,CAAd,CAAiB,CAAjB,CAAxB,CAEA,KAAK8yC,iBAAL,CAAyB,GAAzB,CACA,KAAK4B,oBAAL,CAA4B,IAA5B,CACA,KAAK3B,aAAL,CAAqB,IAAI/yC,KAAJ,CAAW,CAAX,CAAc,CAAd,CAAiB,CAAjB,CAArB,CACA,KAAK20C,gBAAL,CAAwB,IAAxB,CAEA,KAAKu6D,MAAL,CAAc,GAAd,CACA,KAAKC,UAAL,CAAkB,CAAlB,CACA,KAAKC,aAAL,CAAqB,CAArB,CAEA,KAAKr9D,SAAL,CAAgBtF,UAAhB,EAEA,CAEQ,IAAL+F,KAAK,EAAG,CAEX,YAAY08D,MAAZ,CAEA,CAEQ,IAAL18D,KAAK,CAAE5wB,KAAF,CAAU,CAElB,GAAK,KAAKstF,MAAL,CAAc,CAAd,GAAoBttF,KAAK,CAAG,CAAjC,CAAqC,CAEpC,KAAK8M,OAAL,GAEA,CAED,KAAKwgF,MAAL,CAActtF,KAAd,CAEA,CAEY,IAATqxB,SAAS,EAAG,CAEf,YAAYk8D,UAAZ,CAEA,CAEY,IAATl8D,SAAS,CAAErxB,KAAF,CAAU,CAEtB,GAAK,KAAKutF,UAAL,CAAkB,CAAlB,GAAwBvtF,KAAK,CAAG,CAArC,CAAyC,CAExC,KAAK8M,OAAL,GAEA,CAED,KAAKygF,UAAL,CAAkBvtF,KAAlB,CAEA,CAEe,IAAZszB,YAAY,EAAG,CAElB,YAAYk6D,aAAZ,CAEA,CAEe,IAAZl6D,YAAY,CAAEtzB,KAAF,CAAU,CAEzB,GAAK,KAAKwtF,aAAL,CAAqB,CAArB,GAA2BxtF,KAAK,CAAG,CAAxC,CAA4C,CAE3C,KAAK8M,OAAL,GAEA,CAED,KAAK0gF,aAAL,CAAqBxtF,KAArB,CAEA,CAEDwB,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAK8yB,OAAL,CAAe,CAEd,WAAY,EAFE,CAGd,WAAY,EAHE,CAAf,CAOA,KAAK3O,SAAL,CAAiBnkB,MAAM,CAACmkB,SAAxB,CACA,KAAKE,YAAL,CAAoBrkB,MAAM,CAACqkB,YAA3B,CACA,KAAKD,kBAAL,CAA0BpkB,MAAM,CAACokB,kBAAjC,CACA,KAAKE,qBAAL,CAA6BtkB,MAAM,CAACskB,qBAApC,CACA,KAAKC,kBAAL,CAA0BvkB,MAAM,CAACukB,kBAAjC,CACA,KAAKC,oBAAL,CAA0BlwB,IAA1B,CAAgC0L,MAAM,CAACwkB,oBAAvC,EAEA,KAAKmc,GAAL,CAAW3gC,MAAM,CAAC2gC,GAAlB,CAEA,KAAKjd,KAAL,CAAa1jB,MAAM,CAAC0jB,KAApB,CACA,KAAKC,UAAL,CAAgBrvB,IAAhB,CAAsB0L,MAAM,CAAC2jB,UAA7B,EACA,KAAK6gB,aAAL,CAAqBxkC,MAAM,CAACwkC,aAA5B,CACA,KAAK5gB,cAAL,CAAsB5jB,MAAM,CAAC4jB,cAA7B,CACA,KAAK6gB,iBAAL,CAAyBzkC,MAAM,CAACykC,iBAAhC,CAEA,KAAKre,YAAL,CAAoBpmB,MAAM,CAAComB,YAA3B,CACA,KAAKC,eAAL,CAAuBrmB,MAAM,CAACqmB,eAA9B,CAEA,KAAKC,SAAL,CAAiBtmB,MAAM,CAACsmB,SAAxB,CACA,KAAKC,YAAL,CAAoBvmB,MAAM,CAACumB,YAA3B,CACA,KAAKC,mBAAL,CAA2BxmB,MAAM,CAACwmB,mBAAlC,CACA,KAAKC,gBAAL,CAAsBnyB,IAAtB,CAA4B0L,MAAM,CAACymB,gBAAnC,EAEA,KAAKzC,iBAAL,CAAyBhkB,MAAM,CAACgkB,iBAAhC,CACA,KAAK4B,oBAAL,CAA4B5lB,MAAM,CAAC4lB,oBAAnC,CACA,KAAK3B,aAAL,CAAmB3vB,IAAnB,CAAyB0L,MAAM,CAACikB,aAAhC,EACA,KAAK4B,gBAAL,CAAwB7lB,MAAM,CAAC6lB,gBAA/B,CAEA,WAAA,CAEA,CA5JsD,CAgKxDv8B,oBAAoB,CAAC+O,SAArB,CAA+B2nE,sBAA/B,CAAwD,IAAxD,CAEA;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,GAEA,MAAMz2E,iBAAN,SAAgC5Y,QAAS,CAExC+iB,WAAW,CAAEiqB,UAAF,CAAe,CAEzB,QAEA,KAAK/sB,IAAL,CAAY,mBAAZ,CAEA,KAAK0yB,KAAL,CAAa,IAAIpyC,KAAJ,CAAW,QAAX,CAAb,CAAoC;EACpC,KAAK6yC,QAAL,CAAgB,IAAI7yC,KAAJ,CAAW,QAAX,CAAhB,CACA,KAAKgzC,SAAL,CAAiB,EAAjB,CAEA,KAAKO,GAAL,CAAW,IAAX,CAEA,KAAKG,QAAL,CAAgB,IAAhB,CACA,KAAKC,iBAAL,CAAyB,GAAzB,CAEA,KAAKC,KAAL,CAAa,IAAb,CACA,KAAKC,cAAL,CAAsB,GAAtB,CAEA,KAAKlB,QAAL,CAAgB,IAAI3yC,KAAJ,CAAW,QAAX,CAAhB,CACA,KAAK4yC,iBAAL,CAAyB,GAAzB,CACA,KAAK4B,WAAL,CAAmB,IAAnB,CAEA,KAAKV,OAAL,CAAe,IAAf,CACA,KAAKC,SAAL,CAAiB,CAAjB,CAEA,KAAKC,SAAL,CAAiB,IAAjB,CACA,KAAKC,aAAL,CAAqB96C,qBAArB,CACA,KAAK+6C,WAAL,CAAmB,IAAI95C,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAnB,CAEA,KAAK+5C,eAAL,CAAuB,IAAvB,CACA,KAAKC,iBAAL,CAAyB,CAAzB,CACA,KAAKC,gBAAL,CAAwB,CAAxB,CAEA,KAAKI,WAAL,CAAmB,IAAnB,CAEA,KAAKhB,QAAL,CAAgB,IAAhB,CAEA,KAAKmB,MAAL,CAAc,IAAd,CACA,KAAKC,OAAL,CAAe1iD,iBAAf,CACA,KAAK4iD,YAAL,CAAoB,CAApB,CACA,KAAKC,eAAL,CAAuB,IAAvB,CAEA,KAAKY,SAAL,CAAiB,KAAjB,CACA,KAAKC,kBAAL,CAA0B,CAA1B,CACA,KAAKC,gBAAL,CAAwB,OAAxB,CACA,KAAKC,iBAAL,CAAyB,OAAzB,CAEA,KAAK9D,WAAL,CAAmB,KAAnB,CAEA,KAAKF,SAAL,CAAgBtF,UAAhB,EAEA,CAEDrpB,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKsjB,KAAL,CAAWhvB,IAAX,CAAiB0L,MAAM,CAACsjB,KAAxB,EACA,KAAKS,QAAL,CAAczvB,IAAd,CAAoB0L,MAAM,CAAC+jB,QAA3B,EACA,KAAKG,SAAL,CAAiBlkB,MAAM,CAACkkB,SAAxB,CAEA,KAAKO,GAAL,CAAWzkB,MAAM,CAACykB,GAAlB,CAEA,KAAKG,QAAL,CAAgB5kB,MAAM,CAAC4kB,QAAvB,CACA,KAAKC,iBAAL,CAAyB7kB,MAAM,CAAC6kB,iBAAhC,CAEA,KAAKC,KAAL,CAAa9kB,MAAM,CAAC8kB,KAApB,CACA,KAAKC,cAAL,CAAsB/kB,MAAM,CAAC+kB,cAA7B,CAEA,KAAKlB,QAAL,CAAcvvB,IAAd,CAAoB0L,MAAM,CAAC6jB,QAA3B,EACA,KAAK6B,WAAL,CAAmB1lB,MAAM,CAAC0lB,WAA1B,CACA,KAAK5B,iBAAL,CAAyB9jB,MAAM,CAAC8jB,iBAAhC,CAEA,KAAKkB,OAAL,CAAehlB,MAAM,CAACglB,OAAtB,CACA,KAAKC,SAAL,CAAiBjlB,MAAM,CAACilB,SAAxB,CAEA,KAAKC,SAAL,CAAiBllB,MAAM,CAACklB,SAAxB,CACA,KAAKC,aAAL,CAAqBnlB,MAAM,CAACmlB,aAA5B,CACA,KAAKC,WAAL,CAAiB9wB,IAAjB,CAAuB0L,MAAM,CAAColB,WAA9B,EAEA,KAAKC,eAAL,CAAuBrlB,MAAM,CAACqlB,eAA9B,CACA,KAAKC,iBAAL,CAAyBtlB,MAAM,CAACslB,iBAAhC,CACA,KAAKC,gBAAL,CAAwBvlB,MAAM,CAACulB,gBAA/B,CAEA,KAAKI,WAAL,CAAmB3lB,MAAM,CAAC2lB,WAA1B,CAEA,KAAKhB,QAAL,CAAgB3kB,MAAM,CAAC2kB,QAAvB,CAEA,KAAKmB,MAAL,CAAc9lB,MAAM,CAAC8lB,MAArB,CACA,KAAKC,OAAL,CAAe/lB,MAAM,CAAC+lB,OAAtB,CACA,KAAKE,YAAL,CAAoBjmB,MAAM,CAACimB,YAA3B,CACA,KAAKC,eAAL,CAAuBlmB,MAAM,CAACkmB,eAA9B,CAEA,KAAKY,SAAL,CAAiB9mB,MAAM,CAAC8mB,SAAxB,CACA,KAAKC,kBAAL,CAA0B/mB,MAAM,CAAC+mB,kBAAjC,CACA,KAAKC,gBAAL,CAAwBhnB,MAAM,CAACgnB,gBAA/B,CACA,KAAKC,iBAAL,CAAyBjnB,MAAM,CAACinB,iBAAhC,CAEA,KAAK9D,WAAL,CAAmBnjB,MAAM,CAACmjB,WAA1B,CAEA,WAAA,CAEA,CAxGuC,CA4GzC55B,iBAAiB,CAAC8O,SAAlB,CAA4BynE,mBAA5B,CAAkD,IAAlD,CAEA;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,GAEA,MAAMt2E,gBAAN,SAA+B7Y,QAAS,CAEvC+iB,WAAW,CAAEiqB,UAAF,CAAe,CAEzB,QAEA,KAAKmV,OAAL,CAAe,CAAE,OAAQ,EAAV,CAAf,CAEA,KAAKliC,IAAL,CAAY,kBAAZ,CAEA,KAAK0yB,KAAL,CAAa,IAAIpyC,KAAJ,CAAW,QAAX,CAAb,CAEA,KAAKuzC,GAAL,CAAW,IAAX,CACA,KAAK0B,WAAL,CAAmB,IAAnB,CAEA,KAAKvB,QAAL,CAAgB,IAAhB,CACA,KAAKC,iBAAL,CAAyB,GAAzB,CAEA,KAAKC,KAAL,CAAa,IAAb,CACA,KAAKC,cAAL,CAAsB,GAAtB,CAEA,KAAKlB,QAAL,CAAgB,IAAI3yC,KAAJ,CAAW,QAAX,CAAhB,CACA,KAAK4yC,iBAAL,CAAyB,GAAzB,CACA,KAAK4B,WAAL,CAAmB,IAAnB,CAEA,KAAKV,OAAL,CAAe,IAAf,CACA,KAAKC,SAAL,CAAiB,CAAjB,CAEA,KAAKC,SAAL,CAAiB,IAAjB,CACA,KAAKC,aAAL,CAAqB96C,qBAArB,CACA,KAAK+6C,WAAL,CAAmB,IAAI95C,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAnB,CAEA,KAAK+5C,eAAL,CAAuB,IAAvB,CACA,KAAKC,iBAAL,CAAyB,CAAzB,CACA,KAAKC,gBAAL,CAAwB,CAAxB,CAEA,KAAKZ,QAAL,CAAgB,IAAhB,CAEA,KAAKmC,SAAL,CAAiB,KAAjB,CACA,KAAKC,kBAAL,CAA0B,CAA1B,CACA,KAAKC,gBAAL,CAAwB,OAAxB,CACA,KAAKC,iBAAL,CAAyB,OAAzB,CAEA,KAAKhE,SAAL,CAAgBtF,UAAhB,EAEA,CAEDrpB,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKsjB,KAAL,CAAWhvB,IAAX,CAAiB0L,MAAM,CAACsjB,KAAxB,EAEA,KAAKmB,GAAL,CAAWzkB,MAAM,CAACykB,GAAlB,CACA,KAAK0B,WAAL,CAAmBnmB,MAAM,CAACmmB,WAA1B,CAEA,KAAKvB,QAAL,CAAgB5kB,MAAM,CAAC4kB,QAAvB,CACA,KAAKC,iBAAL,CAAyB7kB,MAAM,CAAC6kB,iBAAhC,CAEA,KAAKC,KAAL,CAAa9kB,MAAM,CAAC8kB,KAApB,CACA,KAAKC,cAAL,CAAsB/kB,MAAM,CAAC+kB,cAA7B,CAEA,KAAKlB,QAAL,CAAcvvB,IAAd,CAAoB0L,MAAM,CAAC6jB,QAA3B,EACA,KAAK6B,WAAL,CAAmB1lB,MAAM,CAAC0lB,WAA1B,CACA,KAAK5B,iBAAL,CAAyB9jB,MAAM,CAAC8jB,iBAAhC,CAEA,KAAKkB,OAAL,CAAehlB,MAAM,CAACglB,OAAtB,CACA,KAAKC,SAAL,CAAiBjlB,MAAM,CAACilB,SAAxB,CAEA,KAAKC,SAAL,CAAiBllB,MAAM,CAACklB,SAAxB,CACA,KAAKC,aAAL,CAAqBnlB,MAAM,CAACmlB,aAA5B,CACA,KAAKC,WAAL,CAAiB9wB,IAAjB,CAAuB0L,MAAM,CAAColB,WAA9B,EAEA,KAAKC,eAAL,CAAuBrlB,MAAM,CAACqlB,eAA9B,CACA,KAAKC,iBAAL,CAAyBtlB,MAAM,CAACslB,iBAAhC,CACA,KAAKC,gBAAL,CAAwBvlB,MAAM,CAACulB,gBAA/B,CAEA,KAAKZ,QAAL,CAAgB3kB,MAAM,CAAC2kB,QAAvB,CAEA,KAAKmC,SAAL,CAAiB9mB,MAAM,CAAC8mB,SAAxB,CACA,KAAKC,kBAAL,CAA0B/mB,MAAM,CAAC+mB,kBAAjC,CACA,KAAKC,gBAAL,CAAwBhnB,MAAM,CAACgnB,gBAA/B,CACA,KAAKC,iBAAL,CAAyBjnB,MAAM,CAACinB,iBAAhC,CAEA,WAAA,CAEA,CAtFsC,CA0FxCz9B,gBAAgB,CAAC6O,SAAjB,CAA2BunE,kBAA3B,CAAgD,IAAhD,CAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAEA,MAAMn2E,kBAAN,SAAiC9Y,QAAS,CAEzC+iB,WAAW,CAAEiqB,UAAF,CAAe,CAEzB,QAEA,KAAK/sB,IAAL,CAAY,oBAAZ,CAEA,KAAKo0B,OAAL,CAAe,IAAf,CACA,KAAKC,SAAL,CAAiB,CAAjB,CAEA,KAAKC,SAAL,CAAiB,IAAjB,CACA,KAAKC,aAAL,CAAqB96C,qBAArB,CACA,KAAK+6C,WAAL,CAAmB,IAAI95C,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAnB,CAEA,KAAK+5C,eAAL,CAAuB,IAAvB,CACA,KAAKC,iBAAL,CAAyB,CAAzB,CACA,KAAKC,gBAAL,CAAwB,CAAxB,CAEA,KAAKuB,SAAL,CAAiB,KAAjB,CACA,KAAKC,kBAAL,CAA0B,CAA1B,CAEA,KAAKvG,GAAL,CAAW,KAAX,CAEA,KAAK2C,WAAL,CAAmB,KAAnB,CAEA,KAAKF,SAAL,CAAgBtF,UAAhB,EAEA,CAEDrpB,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKglB,OAAL,CAAehlB,MAAM,CAACglB,OAAtB,CACA,KAAKC,SAAL,CAAiBjlB,MAAM,CAACilB,SAAxB,CAEA,KAAKC,SAAL,CAAiBllB,MAAM,CAACklB,SAAxB,CACA,KAAKC,aAAL,CAAqBnlB,MAAM,CAACmlB,aAA5B,CACA,KAAKC,WAAL,CAAiB9wB,IAAjB,CAAuB0L,MAAM,CAAColB,WAA9B,EAEA,KAAKC,eAAL,CAAuBrlB,MAAM,CAACqlB,eAA9B,CACA,KAAKC,iBAAL,CAAyBtlB,MAAM,CAACslB,iBAAhC,CACA,KAAKC,gBAAL,CAAwBvlB,MAAM,CAACulB,gBAA/B,CAEA,KAAKuB,SAAL,CAAiB9mB,MAAM,CAAC8mB,SAAxB,CACA,KAAKC,kBAAL,CAA0B/mB,MAAM,CAAC+mB,kBAAjC,CAEA,KAAK5D,WAAL,CAAmBnjB,MAAM,CAACmjB,WAA1B,CAEA,WAAA,CAEA,CApDwC,CAwD1C15B,kBAAkB,CAAC4O,SAAnB,CAA6BkoE,oBAA7B,CAAoD,IAApD,CAEA;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,GAEA,MAAM72E,mBAAN,SAAkC/Y,QAAS,CAE1C+iB,WAAW,CAAEiqB,UAAF,CAAe,CAEzB,QAEA,KAAK/sB,IAAL,CAAY,qBAAZ,CAEA,KAAK0yB,KAAL,CAAa,IAAIpyC,KAAJ,CAAW,QAAX,CAAb,CAAoC;EAEpC,KAAKuzC,GAAL,CAAW,IAAX,CAEA,KAAKG,QAAL,CAAgB,IAAhB,CACA,KAAKC,iBAAL,CAAyB,GAAzB,CAEA,KAAKC,KAAL,CAAa,IAAb,CACA,KAAKC,cAAL,CAAsB,GAAtB,CAEA,KAAKlB,QAAL,CAAgB,IAAI3yC,KAAJ,CAAW,QAAX,CAAhB,CACA,KAAK4yC,iBAAL,CAAyB,GAAzB,CACA,KAAK4B,WAAL,CAAmB,IAAnB,CAEA,KAAKC,WAAL,CAAmB,IAAnB,CAEA,KAAKhB,QAAL,CAAgB,IAAhB,CAEA,KAAKmB,MAAL,CAAc,IAAd,CACA,KAAKC,OAAL,CAAe1iD,iBAAf,CACA,KAAK4iD,YAAL,CAAoB,CAApB,CACA,KAAKC,eAAL,CAAuB,IAAvB,CAEA,KAAKY,SAAL,CAAiB,KAAjB,CACA,KAAKC,kBAAL,CAA0B,CAA1B,CACA,KAAKC,gBAAL,CAAwB,OAAxB,CACA,KAAKC,iBAAL,CAAyB,OAAzB,CAEA,KAAKhE,SAAL,CAAgBtF,UAAhB,EAEA,CAEDrpB,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKsjB,KAAL,CAAWhvB,IAAX,CAAiB0L,MAAM,CAACsjB,KAAxB,EAEA,KAAKmB,GAAL,CAAWzkB,MAAM,CAACykB,GAAlB,CAEA,KAAKG,QAAL,CAAgB5kB,MAAM,CAAC4kB,QAAvB,CACA,KAAKC,iBAAL,CAAyB7kB,MAAM,CAAC6kB,iBAAhC,CAEA,KAAKC,KAAL,CAAa9kB,MAAM,CAAC8kB,KAApB,CACA,KAAKC,cAAL,CAAsB/kB,MAAM,CAAC+kB,cAA7B,CAEA,KAAKlB,QAAL,CAAcvvB,IAAd,CAAoB0L,MAAM,CAAC6jB,QAA3B,EACA,KAAK6B,WAAL,CAAmB1lB,MAAM,CAAC0lB,WAA1B,CACA,KAAK5B,iBAAL,CAAyB9jB,MAAM,CAAC8jB,iBAAhC,CAEA,KAAK6B,WAAL,CAAmB3lB,MAAM,CAAC2lB,WAA1B,CAEA,KAAKhB,QAAL,CAAgB3kB,MAAM,CAAC2kB,QAAvB,CAEA,KAAKmB,MAAL,CAAc9lB,MAAM,CAAC8lB,MAArB,CACA,KAAKC,OAAL,CAAe/lB,MAAM,CAAC+lB,OAAtB,CACA,KAAKE,YAAL,CAAoBjmB,MAAM,CAACimB,YAA3B,CACA,KAAKC,eAAL,CAAuBlmB,MAAM,CAACkmB,eAA9B,CAEA,KAAKY,SAAL,CAAiB9mB,MAAM,CAAC8mB,SAAxB,CACA,KAAKC,kBAAL,CAA0B/mB,MAAM,CAAC+mB,kBAAjC,CACA,KAAKC,gBAAL,CAAwBhnB,MAAM,CAACgnB,gBAA/B,CACA,KAAKC,iBAAL,CAAyBjnB,MAAM,CAACinB,iBAAhC,CAEA,WAAA,CAEA,CA1EyC,CA8E3Cv9B,mBAAmB,CAAC2O,SAApB,CAA8BqnE,qBAA9B,CAAsD,IAAtD,CAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAEA,MAAM/1E,kBAAN,SAAiChZ,QAAS,CAEzC+iB,WAAW,CAAEiqB,UAAF,CAAe,CAEzB,QAEA,KAAKmV,OAAL,CAAe,CAAE,SAAU,EAAZ,CAAf,CAEA,KAAKliC,IAAL,CAAY,oBAAZ,CAEA,KAAK0yB,KAAL,CAAa,IAAIpyC,KAAJ,CAAW,QAAX,CAAb,CAAoC;EAEpC,KAAKwzC,MAAL,CAAc,IAAd,CAEA,KAAKD,GAAL,CAAW,IAAX,CAEA,KAAKO,OAAL,CAAe,IAAf,CACA,KAAKC,SAAL,CAAiB,CAAjB,CAEA,KAAKC,SAAL,CAAiB,IAAjB,CACA,KAAKC,aAAL,CAAqB96C,qBAArB,CACA,KAAK+6C,WAAL,CAAmB,IAAI95C,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAnB,CAEA,KAAK+5C,eAAL,CAAuB,IAAvB,CACA,KAAKC,iBAAL,CAAyB,CAAzB,CACA,KAAKC,gBAAL,CAAwB,CAAxB,CAEA,KAAKZ,QAAL,CAAgB,IAAhB,CAEA,KAAKxB,WAAL,CAAmB,KAAnB,CAEA,KAAKF,SAAL,CAAgBtF,UAAhB,EAEA,CAGDrpB,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAK8yB,OAAL,CAAe,CAAE,SAAU,EAAZ,CAAf,CAEA,KAAKxP,KAAL,CAAWhvB,IAAX,CAAiB0L,MAAM,CAACsjB,KAAxB,EAEA,KAAKoB,MAAL,CAAc1kB,MAAM,CAAC0kB,MAArB,CAEA,KAAKD,GAAL,CAAWzkB,MAAM,CAACykB,GAAlB,CAEA,KAAKO,OAAL,CAAehlB,MAAM,CAACglB,OAAtB,CACA,KAAKC,SAAL,CAAiBjlB,MAAM,CAACilB,SAAxB,CAEA,KAAKC,SAAL,CAAiBllB,MAAM,CAACklB,SAAxB,CACA,KAAKC,aAAL,CAAqBnlB,MAAM,CAACmlB,aAA5B,CACA,KAAKC,WAAL,CAAiB9wB,IAAjB,CAAuB0L,MAAM,CAAColB,WAA9B,EAEA,KAAKC,eAAL,CAAuBrlB,MAAM,CAACqlB,eAA9B,CACA,KAAKC,iBAAL,CAAyBtlB,MAAM,CAACslB,iBAAhC,CACA,KAAKC,gBAAL,CAAwBvlB,MAAM,CAACulB,gBAA/B,CAEA,KAAKZ,QAAL,CAAgB3kB,MAAM,CAAC2kB,QAAvB,CAEA,KAAKxB,WAAL,CAAmBnjB,MAAM,CAACmjB,WAA1B,CAEA,WAAA,CAEA,CAjEwC,CAqE1Cx5B,kBAAkB,CAAC0O,SAAnB,CAA6B8nE,oBAA7B,CAAoD,IAApD,CAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAEA,MAAMv2E,kBAAN,SAAiCxE,iBAAkB,CAElDsO,WAAW,CAAEiqB,UAAF,CAAe,CAEzB,QAEA,KAAK/sB,IAAL,CAAY,oBAAZ,CAEA,KAAK6L,KAAL,CAAa,CAAb,CACA,KAAKmqB,QAAL,CAAgB,CAAhB,CACA,KAAKC,OAAL,CAAe,CAAf,CAEA,KAAK5D,SAAL,CAAgBtF,UAAhB,EAEA,CAEDrpB,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKvD,KAAL,CAAauD,MAAM,CAACvD,KAApB,CACA,KAAKmqB,QAAL,CAAgB5mB,MAAM,CAAC4mB,QAAvB,CACA,KAAKC,OAAL,CAAe7mB,MAAM,CAAC6mB,OAAtB,CAEA,WAAA,CAEA,CA1BiD,CA8BnDj9B,kBAAkB,CAACyO,SAAnB,CAA6BsoE,oBAA7B,CAAoD,IAApD,CAwBA,MAAM92E,cAAc,CAAG;EAGtB02F,UAAU,CAAE,SAAW5uF,KAAX,CAAkB6uF,IAAlB,CAAwBC,EAAxB,CAA6B,CAExC,GAAK52F,cAAc,CAAC62F,YAAf,CAA6B/uF,KAA7B,CAAL,CAA4C;EAG3C;EACA,WAAWA,KAAK,CAAC+B,WAAV,CAAuB/B,KAAK,CAAC2pC,QAAN,CAAgBklD,IAAhB,CAAsBC,EAAE,GAAK1vF,SAAP,CAAmB0vF,EAAnB,CAAwB9uF,KAAK,CAACI,MAApD,CAAvB,CAAP,CAEA,CAED,OAAOJ,KAAK,CAACC,KAAN,CAAa4uF,IAAb,CAAmBC,EAAnB,CAAP,CAEA,CAfqB;EAkBtBE,YAAY,CAAE,SAAWhvF,KAAX,CAAkBf,IAAlB,CAAwBgwF,UAAxB,CAAqC,CAElD,GAAK,CAAEjvF,KAAF;EACJ,CAAEivF,UAAF,EAAgBjvF,KAAK,CAAC+B,WAAN,GAAsB9C,IADvC,CAC8C,OAAOe,KAAP,CAE9C,GAAK,OAAOf,IAAI,CAACuqC,iBAAZ,GAAkC,QAAvC,CAAkD,CAEjD,WAAWvqC,IAAJ,CAAUe,KAAV,CAAP,CAA0B;EAE1B,CAED,OAAOkP,KAAK,CAACxI,SAAN,CAAgBzG,KAAhB,CAAsBI,IAAtB,CAA4BL,KAA5B,CAAP,CAA4C;EAE5C,CA/BqB,CAiCtB+uF,YAAY,CAAE,SAAWtzE,MAAX,CAAoB,CAEjC,OAAOyzE,WAAW,CAACC,MAAZ,CAAoB1zE,MAApB,GACN,EAAIA,MAAM,YAAY2zE,QAAtB,CADD,CAGA,CAtCqB;EAyCtBC,gBAAgB,CAAE,SAAWC,KAAX,CAAmB,CAEpC,SAASC,WAAT,CAAsBrvF,CAAtB,CAAyB2d,CAAzB,CAA6B,CAE5B,OAAOyxE,KAAK,CAAEpvF,CAAF,CAAL,CAAaovF,KAAK,CAAEzxE,CAAF,CAAzB,CAEA,CAED,MAAMvc,CAAC,CAAGguF,KAAK,CAAClvF,MAAhB,CACA,MAAM23D,MAAM,CAAG,IAAI7oD,KAAJ,CAAW5N,CAAX,CAAf,CACA,IAAM,IAAIpB,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAKoB,CAAvB,CAA0B,EAAGpB,CAA7B,CAAiC63D,MAAM,CAAE73D,CAAF,CAAN,CAAcA,CAAd,CAEjC63D,MAAM,CAACjT,IAAP,CAAayqC,WAAb,EAEA,OAAOx3B,MAAP,CAEA,CAzDqB;EA4DtBy3B,WAAW,CAAE,SAAW7iE,MAAX,CAAmBsR,MAAnB,CAA2BrpB,KAA3B,CAAmC,CAE/C,MAAM66E,OAAO,CAAG9iE,MAAM,CAACvsB,MAAvB,CACA,MAAM23D,MAAM,CAAG,IAAIprC,MAAM,CAAC5qB,WAAX,CAAwB0tF,OAAxB,CAAf,CAEA,IAAM,IAAIvvF,CAAC,CAAG,CAAR,CAAWgT,SAAS,CAAG,CAA7B,CAAgCA,SAAS,GAAKu8E,OAA9C,CAAuD,EAAGvvF,CAA1D,CAA8D,CAE7D,MAAMwvF,SAAS,CAAG96E,KAAK,CAAE1U,CAAF,CAAL,CAAa+9B,MAA/B,CAEA,IAAM,IAAIpgB,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAKogB,MAAvB,CAA+B,EAAGpgB,CAAlC,CAAsC,CAErCk6C,MAAM,CAAE7kD,SAAS,EAAX,CAAN,CAAyByZ,MAAM,CAAE+iE,SAAS,CAAG7xE,CAAd,CAA/B,CAEA,CAED,CAED,OAAOk6C,MAAP,CAEA,CA/EqB;EAkFtB43B,WAAW,CAAE,SAAWC,QAAX,CAAqBN,KAArB,CAA4B3iE,MAA5B,CAAoCkjE,iBAApC,CAAwD,CAEpE,IAAI3vF,CAAC,CAAG,CAAR,CAAW0sB,GAAG,CAAGgjE,QAAQ,CAAE,CAAF,CAAzB,CAEA,MAAQhjE,GAAG,GAAKxtB,SAAR,EAAqBwtB,GAAG,CAAEijE,iBAAF,CAAH,GAA6BzwF,SAA1D,CAAsE,CAErEwtB,GAAG,CAAGgjE,QAAQ,CAAE1vF,CAAC,EAAH,CAAd,CAEA,CAED,GAAK0sB,GAAG,GAAKxtB,SAAb,CAAyB,OAAQ;EAEjC,IAAI+B,KAAK,CAAGyrB,GAAG,CAAEijE,iBAAF,CAAf,CACA,GAAK1uF,KAAK,GAAK/B,SAAf,CAA2B,OAAQ;EAEnC,GAAK8P,KAAK,CAACC,OAAN,CAAehO,KAAf,CAAL,CAA8B,CAE7B,EAAG,CAEFA,KAAK,CAAGyrB,GAAG,CAAEijE,iBAAF,CAAX,CAEA,GAAK1uF,KAAK,GAAK/B,SAAf,CAA2B,CAE1BkwF,KAAK,CAAC/vF,IAAN,CAAYqtB,GAAG,CAACob,IAAhB,EACArb,MAAM,CAACptB,IAAP,CAAY6+D,KAAZ,CAAmBzxC,MAAnB,CAA2BxrB,KAA3B,EAAoC;EAEpC,CAEDyrB,GAAG,CAAGgjE,QAAQ,CAAE1vF,CAAC,EAAH,CAAd,CAEA,CAbD,MAaU0sB,GAAG,GAAKxtB,SAblB,EAeA,CAjBD,QAiBY+B,KAAK,CAAC2E,OAAN,GAAkB1G,SAAvB,CAAmC;EAIzC,EAAG,CAEF+B,KAAK,CAAGyrB,GAAG,CAAEijE,iBAAF,CAAX,CAEA,GAAK1uF,KAAK,GAAK/B,SAAf,CAA2B,CAE1BkwF,KAAK,CAAC/vF,IAAN,CAAYqtB,GAAG,CAACob,IAAhB,EACA7mC,KAAK,CAAC2E,OAAN,CAAe6mB,MAAf,CAAuBA,MAAM,CAACvsB,MAA9B,EAEA,CAEDwsB,GAAG,CAAGgjE,QAAQ,CAAE1vF,CAAC,EAAH,CAAd,CAEA,CAbD,MAaU0sB,GAAG,GAAKxtB,SAblB,EAeA,CAnBM,KAmBA;EAIN,EAAG,CAEF+B,KAAK,CAAGyrB,GAAG,CAAEijE,iBAAF,CAAX,CAEA,GAAK1uF,KAAK,GAAK/B,SAAf,CAA2B,CAE1BkwF,KAAK,CAAC/vF,IAAN,CAAYqtB,GAAG,CAACob,IAAhB,EACArb,MAAM,CAACptB,IAAP,CAAa4B,KAAb,EAEA,CAEDyrB,GAAG,CAAGgjE,QAAQ,CAAE1vF,CAAC,EAAH,CAAd,CAEA,CAbD,MAaU0sB,GAAG,GAAKxtB,SAblB,EAeA,CAED,CA1JqB,CA4JtB0wF,OAAO,CAAE,SAAWC,UAAX,CAAuBzkF,IAAvB,CAA6B0kF,UAA7B,CAAyCC,QAAzC,CAAmDC,GAAG,CAAG,EAAzD,CAA8D,CAEtE,MAAMC,IAAI,CAAGJ,UAAU,CAACrtF,KAAX,EAAb,CAEAytF,IAAI,CAAC7kF,IAAL,CAAYA,IAAZ,CAEA,MAAM8kF,MAAM,CAAG,EAAf,CAEA,IAAM,IAAIlwF,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGiwF,IAAI,CAACC,MAAL,CAAYhwF,MAAjC,CAAyC,EAAGF,CAA5C,CAAgD,CAE/C,MAAMmwF,KAAK,CAAGF,IAAI,CAACC,MAAL,CAAalwF,CAAb,CAAd,CACA,MAAMowF,SAAS,CAAGD,KAAK,CAACE,YAAN,EAAlB,CAEA,MAAMjB,KAAK,CAAG,EAAd,CACA,MAAM3iE,MAAM,CAAG,EAAf,CAEA,IAAM,IAAI9O,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGwyE,KAAK,CAACf,KAAN,CAAYlvF,MAAjC,CAAyC,EAAGyd,CAA5C,CAAgD,CAE/C,MAAMoqB,KAAK,CAAGooD,KAAK,CAACf,KAAN,CAAazxE,CAAb,EAAmBqyE,GAAjC,CAEA,GAAKjoD,KAAK,CAAG+nD,UAAR,EAAsB/nD,KAAK,EAAIgoD,QAApC,CAA+C,SAE/CX,KAAK,CAAC/vF,IAAN,CAAY8wF,KAAK,CAACf,KAAN,CAAazxE,CAAb,CAAZ,EAEA,IAAM,IAAI26C,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG83B,SAArB,CAAgC,EAAG93B,CAAnC,CAAuC,CAEtC7rC,MAAM,CAACptB,IAAP,CAAa8wF,KAAK,CAAC1jE,MAAN,CAAc9O,CAAC,CAAGyyE,SAAJ,CAAgB93B,CAA9B,CAAb,EAEA,CAED,CAED,GAAK82B,KAAK,CAAClvF,MAAN,GAAiB,CAAtB,CAA0B,SAE1BiwF,KAAK,CAACf,KAAN,CAAcp3F,cAAc,CAAC82F,YAAf,CAA6BM,KAA7B,CAAoCe,KAAK,CAACf,KAAN,CAAYvtF,WAAhD,CAAd,CACAsuF,KAAK,CAAC1jE,MAAN,CAAez0B,cAAc,CAAC82F,YAAf,CAA6BriE,MAA7B,CAAqC0jE,KAAK,CAAC1jE,MAAN,CAAa5qB,WAAlD,CAAf,CAEAquF,MAAM,CAAC7wF,IAAP,CAAa8wF,KAAb,EAEA,CAEDF,IAAI,CAACC,MAAL,CAAcA,MAAd,CAEA;EAEA,IAAII,YAAY,CAAGplF,QAAnB,CAEA,IAAM,IAAIlL,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGiwF,IAAI,CAACC,MAAL,CAAYhwF,MAAjC,CAAyC,EAAGF,CAA5C,CAAgD,CAE/C,GAAKswF,YAAY,CAAGL,IAAI,CAACC,MAAL,CAAalwF,CAAb,EAAiBovF,KAAjB,CAAwB,CAAxB,CAApB,CAAkD,CAEjDkB,YAAY,CAAGL,IAAI,CAACC,MAAL,CAAalwF,CAAb,EAAiBovF,KAAjB,CAAwB,CAAxB,CAAf,CAEA,CAED,CAED;EAEA,IAAM,IAAIpvF,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGiwF,IAAI,CAACC,MAAL,CAAYhwF,MAAjC,CAAyC,EAAGF,CAA5C,CAAgD,CAE/CiwF,IAAI,CAACC,MAAL,CAAalwF,CAAb,EAAiByyE,KAAjB,CAAwB,CAAE,CAAF,CAAM6d,YAA9B,EAEA,CAEDL,IAAI,CAACM,aAAL,GAEA,OAAON,IAAP,CAEA,CAjOqB,CAmOtBO,gBAAgB,CAAE,SAAWC,UAAX,CAAuBC,cAAc,CAAG,CAAxC,CAA2CC,aAAa,CAAGF,UAA3D,CAAuET,GAAG,CAAG,EAA7E,CAAkF,CAEnG,GAAKA,GAAG,EAAI,CAAZ,CAAgBA,GAAG,CAAG,EAAN,CAEhB,MAAMY,SAAS,CAAGD,aAAa,CAACT,MAAd,CAAqBhwF,MAAvC,CACA,MAAM2wF,aAAa,CAAGH,cAAc,CAAGV,GAAvC,CAEA;EACA,IAAM,IAAIhwF,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG4wF,SAArB,CAAgC,EAAG5wF,CAAnC,CAAuC,CAEtC,MAAM8wF,cAAc,CAAGH,aAAa,CAACT,MAAd,CAAsBlwF,CAAtB,CAAvB,CACA,MAAM+wF,kBAAkB,CAAGD,cAAc,CAACE,aAA1C,CAEA;EACA,GAAKD,kBAAkB,GAAK,MAAvB,EAAiCA,kBAAkB,GAAK,QAA7D,CAAwE,SAExE;EACA,MAAME,WAAW,CAAGR,UAAU,CAACP,MAAX,CAAkBgB,IAAlB,CAAwB,SAAWf,KAAX,CAAmB,CAE9D,OAAOA,KAAK,CAAC/kF,IAAN,GAAe0lF,cAAc,CAAC1lF,IAA9B,EACH+kF,KAAK,CAACa,aAAN,GAAwBD,kBAD5B,CAGA,CALmB,CAApB,CAOA,GAAKE,WAAW,GAAK/xF,SAArB,CAAiC,SAEjC,IAAIiyF,eAAe,CAAG,CAAtB,CACA,MAAMC,kBAAkB,CAAGN,cAAc,CAACT,YAAf,EAA3B,CAEA,GAAKS,cAAc,CAACO,iBAAf,CAAiCC,yCAAtC,CAAkF,CAEjFH,eAAe,CAAGC,kBAAkB,CAAG,CAAvC,CAEA,CAED,IAAIG,YAAY,CAAG,CAAnB,CACA,MAAMC,eAAe,CAAGP,WAAW,CAACZ,YAAZ,EAAxB,CAEA,GAAKY,WAAW,CAACI,iBAAZ,CAA8BC,yCAAnC,CAA+E,CAE9EC,YAAY,CAAGC,eAAe,CAAG,CAAjC,CAEA,CAED,MAAM9pC,SAAS,CAAGopC,cAAc,CAAC1B,KAAf,CAAqBlvF,MAArB,CAA8B,CAAhD,CACA,IAAIuxF,cAAJ,CAEA;EACA,GAAKZ,aAAa,EAAIC,cAAc,CAAC1B,KAAf,CAAsB,CAAtB,CAAtB,CAAkD;EAGjD,MAAMsC,UAAU,CAAGP,eAAnB,CACA,MAAMQ,QAAQ,CAAGP,kBAAkB,CAAGD,eAAtC,CACAM,cAAc,CAAGz5F,cAAc,CAAC02F,UAAf,CAA2BoC,cAAc,CAACrkE,MAA1C,CAAkDilE,UAAlD,CAA8DC,QAA9D,CAAjB,CAEA,CAPD,QAOYd,aAAa,EAAIC,cAAc,CAAC1B,KAAf,CAAsB1nC,SAAtB,CAAtB,CAA0D;EAGhE,MAAMgqC,UAAU,CAAGhqC,SAAS,CAAG0pC,kBAAZ,CAAiCD,eAApD,CACA,MAAMQ,QAAQ,CAAGD,UAAU,CAAGN,kBAAb,CAAkCD,eAAnD,CACAM,cAAc,CAAGz5F,cAAc,CAAC02F,UAAf,CAA2BoC,cAAc,CAACrkE,MAA1C,CAAkDilE,UAAlD,CAA8DC,QAA9D,CAAjB,CAEA,CAPM,KAOA;EAGN,MAAMC,WAAW,CAAGd,cAAc,CAACO,iBAAf,EAApB,CACA,MAAMK,UAAU,CAAGP,eAAnB,CACA,MAAMQ,QAAQ,CAAGP,kBAAkB,CAAGD,eAAtC,CACAS,WAAW,CAACC,QAAZ,CAAsBhB,aAAtB,EACAY,cAAc,CAAGz5F,cAAc,CAAC02F,UAAf,CAA2BkD,WAAW,CAACE,YAAvC,CAAqDJ,UAArD,CAAiEC,QAAjE,CAAjB,CAEA,CAED;EACA,GAAKZ,kBAAkB,GAAK,YAA5B,CAA2C,CAE1C,MAAMgB,aAAa,CAAG,IAAI33G,UAAJ,GAAiBsrB,SAAjB,CAA4B+rF,cAA5B,EAA6C5sF,SAA7C,GAAyDgR,SAAzD,EAAtB,CACAk8E,aAAa,CAACnsF,OAAd,CAAuB6rF,cAAvB,EAEA,CAED;EAEA,MAAMO,QAAQ,CAAGf,WAAW,CAAC7B,KAAZ,CAAkBlvF,MAAnC,CACA,IAAM,IAAIyd,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGq0E,QAArB,CAA+B,EAAGr0E,CAAlC,CAAsC,CAErC,MAAMs0E,UAAU,CAAGt0E,CAAC,CAAG6zE,eAAJ,CAAsBD,YAAzC,CAEA,GAAKR,kBAAkB,GAAK,YAA5B,CAA2C;EAG1C32G,UAAU,CAAC+5B,uBAAX,CACC88E,WAAW,CAACxkE,MADb,CAECwlE,UAFD,CAGCR,cAHD,CAIC,CAJD,CAKCR,WAAW,CAACxkE,MALb,CAMCwlE,UAND,EASA,CAZD,KAYO,CAEN,MAAMC,QAAQ,CAAGV,eAAe,CAAGD,YAAY,CAAG,CAAlD,CAEA;EACA,IAAM,IAAIj5B,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG45B,QAArB,CAA+B,EAAG55B,CAAlC,CAAsC,CAErC24B,WAAW,CAACxkE,MAAZ,CAAoBwlE,UAAU,CAAG35B,CAAjC,GAAwCm5B,cAAc,CAAEn5B,CAAF,CAAtD,CAEA,CAED,CAED,CAED,CAEDm4B,UAAU,CAAC0B,SAAX,CAAuBv6G,0BAAvB,CAEA,OAAO64G,UAAP,CAEA,CA5VqB,CAAvB,CAgWA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAEA,MAAMx4F,WAAY,CAEjB4J,WAAW,CAAEuwF,kBAAF,CAAsBC,YAAtB,CAAoCC,UAApC,CAAgDR,YAAhD,CAA+D,CAEzE,KAAKM,kBAAL,CAA0BA,kBAA1B,CACA,KAAKG,YAAL,CAAoB,CAApB,CAEA,KAAKT,YAAL,CAAoBA,YAAY,GAAK5yF,SAAjB,CACnB4yF,YADmB,CACJ,IAAIO,YAAY,CAACxwF,WAAjB,CAA8BywF,UAA9B,CADhB,CAEA,KAAKD,YAAL,CAAoBA,YAApB,CACA,KAAKjC,SAAL,CAAiBkC,UAAjB,CAEA,KAAKE,QAAL,CAAgB,IAAhB,CACA,KAAKC,gBAAL,CAAwB,EAAxB,CAEA,CAEDZ,QAAQ,CAAErwF,CAAF,CAAM,CAEb,MAAMkxF,EAAE,CAAG,KAAKN,kBAAhB,CACA,IAAItkE,EAAE,CAAG,KAAKykE,YAAd,CACCxyE,EAAE,CAAG2yE,EAAE,CAAE5kE,EAAF,CADR,CAEChO,EAAE,CAAG4yE,EAAE,CAAE5kE,EAAE,CAAG,CAAP,CAFR,CAIA6kE,iBAAiB,CAAE,CAElBC,IAAI,CAAE,CAEL,IAAIltE,KAAJ,CAEAmtE,WAAW,CAAE;EAGZ;EACA;EACA;EACAC,YAAY,CAAE,GAAK,EAAItxF,CAAC,CAAGue,EAAR,CAAL,CAAoB,CAEjC,IAAM,IAAIgzE,QAAQ,CAAGjlE,EAAE,CAAG,CAA1B,GAAiC,CAEhC,GAAK/N,EAAE,GAAK7gB,SAAZ,CAAwB,CAEvB,GAAKsC,CAAC,CAAGse,EAAT,CAAc,MAAMgzE,YAAN,CAEd;EAEAhlE,EAAE,CAAG4kE,EAAE,CAACxyF,MAAR,CACA,KAAKqyF,YAAL,CAAoBzkE,EAApB,CACA,YAAYklE,SAAL,CAAgBllE,EAAE,CAAG,CAArB,CAAwBtsB,CAAxB,CAA2Bse,EAA3B,CAAP,CAEA,CAED,GAAKgO,EAAE,GAAKilE,QAAZ,CAAuB,MAAO;EAE9BjzE,EAAE,CAAGC,EAAL,CACAA,EAAE,CAAG2yE,EAAE,CAAE,EAAG5kE,EAAL,CAAP,CAEA,GAAKtsB,CAAC,CAAGue,EAAT,CAAc;EAGb,MAAM6yE,IAAN,CAEA,CAED,CAED;EACAltE,KAAK,CAAGgtE,EAAE,CAACxyF,MAAX,CACA,MAAM2yF,WAAN,CAEA,CAED;EACA;EACA,GAAK,EAAIrxF,CAAC,EAAIse,EAAT,CAAL,CAAqB;EAIpB,MAAMmzE,QAAQ,CAAGP,EAAE,CAAE,CAAF,CAAnB,CAEA,GAAKlxF,CAAC,CAAGyxF,QAAT,CAAoB,CAEnBnlE,EAAE,CAAG,CAAL,CAAQ;EACRhO,EAAE,CAAGmzE,QAAL,CAEA,CAED;EAEA,IAAM,IAAIF,QAAQ,CAAGjlE,EAAE,CAAG,CAA1B,GAAiC,CAEhC,GAAKhO,EAAE,GAAK5gB,SAAZ,CAAwB;EAIvB,KAAKqzF,YAAL,CAAoB,CAApB,CACA,YAAYW,YAAL,CAAmB,CAAnB,CAAsB1xF,CAAtB,CAAyBue,EAAzB,CAAP,CAEA,CAED,GAAK+N,EAAE,GAAKilE,QAAZ,CAAuB,MAAO;EAE9BhzE,EAAE,CAAGD,EAAL,CACAA,EAAE,CAAG4yE,EAAE,CAAE,EAAG5kE,EAAH,CAAQ,CAAV,CAAP,CAEA,GAAKtsB,CAAC,EAAIse,EAAV,CAAe;EAGd,MAAM8yE,IAAN,CAEA,CAED,CAED;EACAltE,KAAK,CAAGoI,EAAR,CACAA,EAAE,CAAG,CAAL,CACA,MAAM+kE,WAAN,CAEA,CAED;EAEA,MAAMF,iBAAN,CAEA,CAAC;EAEF;EAEA,MAAQ7kE,EAAE,CAAGpI,KAAb,CAAqB,CAEpB,MAAMytE,GAAG,CAAKrlE,EAAE,CAAGpI,KAAP,GAAmB,CAA/B,CAEA,GAAKlkB,CAAC,CAAGkxF,EAAE,CAAES,GAAF,CAAX,CAAqB,CAEpBztE,KAAK,CAAGytE,GAAR,CAEA,CAJD,KAIO,CAENrlE,EAAE,CAAGqlE,GAAG,CAAG,CAAX,CAEA,CAED,CAEDpzE,EAAE,CAAG2yE,EAAE,CAAE5kE,EAAF,CAAP,CACAhO,EAAE,CAAG4yE,EAAE,CAAE5kE,EAAE,CAAG,CAAP,CAAP,CAEA;EAEA,GAAKhO,EAAE,GAAK5gB,SAAZ,CAAwB,CAEvB,KAAKqzF,YAAL,CAAoB,CAApB,CACA,YAAYW,YAAL,CAAmB,CAAnB,CAAsB1xF,CAAtB,CAAyBue,EAAzB,CAAP,CAEA,CAED,GAAKA,EAAE,GAAK7gB,SAAZ,CAAwB,CAEvB4uB,EAAE,CAAG4kE,EAAE,CAACxyF,MAAR,CACA,KAAKqyF,YAAL,CAAoBzkE,EAApB,CACA,YAAYklE,SAAL,CAAgBllE,EAAE,CAAG,CAArB,CAAwBhO,EAAxB,CAA4Bte,CAA5B,CAAP,CAEA,CAED,CAAC;EAEF,KAAK+wF,YAAL,CAAoBzkE,EAApB,CAEA,KAAKslE,gBAAL,CAAuBtlE,EAAvB,CAA2BhO,EAA3B,CAA+BC,EAA/B,EAEA,CAAC;EAEF,YAAYszE,YAAL,CAAmBvlE,EAAnB,CAAuBhO,EAAvB,CAA2Bte,CAA3B,CAA8Bue,EAA9B,CAAP,CAEA,CAEDuzE,YAAY,EAAG,CAEd,YAAYd,QAAL,EAAiB,KAAKC,gBAA7B,CAEA,CAEDc,gBAAgB,CAAE9zF,KAAF,CAAU;EAIzB,MAAMo4D,MAAM,CAAG,KAAKi6B,YAApB,CACCrlE,MAAM,CAAG,KAAK4lE,YADf,CAECt0D,MAAM,CAAG,KAAKqyD,SAFf,CAGCzqF,MAAM,CAAGlG,KAAK,CAAGs+B,MAHlB,CAKA,IAAM,IAAI/9B,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAK+9B,MAAvB,CAA+B,EAAG/9B,CAAlC,CAAsC,CAErC63D,MAAM,CAAE73D,CAAF,CAAN,CAAcysB,MAAM,CAAE9mB,MAAM,CAAG3F,CAAX,CAApB,CAEA,CAED,OAAO63D,MAAP,CAEA,CAED;EAEAw7B,YAAY,qBAAwB,CAEnC,UAAU/wF,KAAJ,CAAW,yBAAX,CAAN,CACA;EAEA,CAED8wF,gBAAgB,kBAAqB;EAIpC,CAvNgB,CA2NlB;EAEAn7F,WAAW,CAACuO,SAAZ,CAAsB0sF,YAAtB,CAAqCj7F,WAAW,CAACuO,SAAZ,CAAsB+sF,gBAA3D,CACAt7F,WAAW,CAACuO,SAAZ,CAAsBwsF,SAAtB,CAAkC/6F,WAAW,CAACuO,SAAZ,CAAsB+sF,gBAAxD,CAEA;EACA;EACA;EACA;EACA;EACA;EACA,GAEA,MAAMr7F,gBAAN,SAA+BD,WAAY,CAE1C4J,WAAW,CAAEuwF,kBAAF,CAAsBC,YAAtB,CAAoCC,UAApC,CAAgDR,YAAhD,CAA+D,CAEzE,MAAOM,kBAAP,CAA2BC,YAA3B,CAAyCC,UAAzC,CAAqDR,YAArD,EAEA,KAAK0B,WAAL,CAAmB,CAAE,CAArB,CACA,KAAKC,WAAL,CAAmB,CAAE,CAArB,CACA,KAAKC,WAAL,CAAmB,CAAE,CAArB,CACA,KAAKC,WAAL,CAAmB,CAAE,CAArB,CAEA,KAAKlB,gBAAL,CAAwB,CAEvBmB,WAAW,CAAEp8G,mBAFU,CAGvBq8G,SAAS,CAAEr8G,mBAHY,CAAxB,CAOA,CAED47G,gBAAgB,CAAEtlE,EAAF,CAAMhO,EAAN,CAAUC,EAAV,CAAe,CAE9B,MAAM2yE,EAAE,CAAG,KAAKN,kBAAhB,CACA,IAAI0B,KAAK,CAAGhmE,EAAE,CAAG,CAAjB,CACCimE,KAAK,CAAGjmE,EAAE,CAAG,CADd,CAGCkmE,KAAK,CAAGtB,EAAE,CAAEoB,KAAF,CAHX,CAICG,KAAK,CAAGvB,EAAE,CAAEqB,KAAF,CAJX,CAMA,GAAKC,KAAK,GAAK90F,SAAf,CAA2B,CAE1B,OAAS,KAAKo0F,YAAL,GAAoBM,WAA7B,EAEC,KAAKn8G,eAAL;EAGCq8G,KAAK,CAAGhmE,EAAR,CACAkmE,KAAK,CAAG,EAAIl0E,EAAJ,CAASC,EAAjB,CAEA,MAED,KAAKroC,gBAAL;EAGCo8G,KAAK,CAAGpB,EAAE,CAACxyF,MAAH,CAAY,CAApB,CACA8zF,KAAK,CAAGl0E,EAAE,CAAG4yE,EAAE,CAAEoB,KAAF,CAAP,CAAmBpB,EAAE,CAAEoB,KAAK,CAAG,CAAV,CAA7B,CAEA,MAED;EAEC;EACAA,KAAK,CAAGhmE,EAAR,CACAkmE,KAAK,CAAGj0E,EAAR,CAtBF,CA0BA,CAED,GAAKk0E,KAAK,GAAK/0F,SAAf,CAA2B,CAE1B,OAAS,KAAKo0F,YAAL,GAAoBO,SAA7B,EAEC,KAAKp8G,eAAL;EAGCs8G,KAAK,CAAGjmE,EAAR,CACAmmE,KAAK,CAAG,EAAIl0E,EAAJ,CAASD,EAAjB,CAEA,MAED,KAAKpoC,gBAAL;EAGCq8G,KAAK,CAAG,CAAR,CACAE,KAAK,CAAGl0E,EAAE,CAAG2yE,EAAE,CAAE,CAAF,CAAP,CAAeA,EAAE,CAAE,CAAF,CAAzB,CAEA,MAED;EAEC;EACAqB,KAAK,CAAGjmE,EAAE,CAAG,CAAb,CACAmmE,KAAK,CAAGn0E,EAAR,CAtBF,CA0BA,CAED,MAAMo0E,MAAM,CAAG,CAAEn0E,EAAE,CAAGD,EAAP,EAAc,GAA7B,CACCie,MAAM,CAAG,KAAKqyD,SADf,CAGA,KAAKoD,WAAL,CAAmBU,MAAM,EAAKp0E,EAAE,CAAGk0E,KAAV,CAAzB,CACA,KAAKN,WAAL,CAAmBQ,MAAM,EAAKD,KAAK,CAAGl0E,EAAb,CAAzB,CACA,KAAK0zE,WAAL,CAAmBK,KAAK,CAAG/1D,MAA3B,CACA,KAAK41D,WAAL,CAAmBI,KAAK,CAAGh2D,MAA3B,CAEA,CAEDs1D,YAAY,CAAEvlE,EAAF,CAAMhO,EAAN,CAAUte,CAAV,CAAaue,EAAb,CAAkB,CAE7B,MAAM83C,MAAM,CAAG,KAAKi6B,YAApB,CACCrlE,MAAM,CAAG,KAAK4lE,YADf,CAECt0D,MAAM,CAAG,KAAKqyD,SAFf,CAICxJ,EAAE,CAAG94D,EAAE,CAAGiQ,MAJX,CAIoBo2D,EAAE,CAAGvN,EAAE,CAAG7oD,MAJ9B,CAKCq2D,EAAE,CAAG,KAAKX,WALX,CAKyBY,EAAE,CAAG,KAAKV,WALnC,CAMCW,EAAE,CAAG,KAAKd,WANX,CAMwBe,EAAE,CAAG,KAAKb,WANlC,CAQC59E,CAAC,CAAG,CAAEtU,CAAC,CAAGse,EAAN,GAAeC,EAAE,CAAGD,EAApB,CARL,CASC4yE,EAAE,CAAG58E,CAAC,CAAGA,CATV,CAUC0+E,GAAG,CAAG9B,EAAE,CAAG58E,CAVZ,CAYA;EAEA,MAAM2+E,EAAE,CAAG,CAAEH,EAAF,CAAOE,GAAP,CAAa,EAAIF,EAAJ,CAAS5B,EAAtB,CAA2B4B,EAAE,CAAGx+E,CAA3C,CACA,MAAMwJ,EAAE,CAAG,CAAE,EAAIg1E,EAAN,EAAaE,GAAb,CAAmB,CAAE,CAAE,GAAF,CAAQ,EAAIF,EAAd,EAAqB5B,EAAxC,CAA6C,CAAE,CAAE,GAAF,CAAQ4B,EAAV,EAAiBx+E,CAA9D,CAAkE,CAA7E,CACA,MAAMf,EAAE,CAAG,CAAE,CAAE,CAAF,CAAMw/E,EAAR,EAAeC,GAAf,CAAqB,CAAE,IAAMD,EAAR,EAAe7B,EAApC,CAAyC,IAAM58E,CAA1D,CACA,MAAM4+E,EAAE,CAAGH,EAAE,CAAGC,GAAL,CAAWD,EAAE,CAAG7B,EAA3B,CAEA;EAEA,IAAM,IAAI1yF,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAK+9B,MAAvB,CAA+B,EAAG/9B,CAAlC,CAAsC,CAErC63D,MAAM,CAAE73D,CAAF,CAAN,CACEy0F,EAAE,CAAGhoE,MAAM,CAAE2nE,EAAE,CAAGp0F,CAAP,CAAX,CACAsf,EAAE,CAAGmN,MAAM,CAAE0nE,EAAE,CAAGn0F,CAAP,CADX,CAEA+U,EAAE,CAAG0X,MAAM,CAAEm6D,EAAE,CAAG5mF,CAAP,CAFX,CAGA00F,EAAE,CAAGjoE,MAAM,CAAE4nE,EAAE,CAAGr0F,CAAP,CAJb,CAMA,CAED,OAAO63D,MAAP,CAEA,CAtIyC,CA0I3C,MAAM1/D,iBAAN,SAAgCF,WAAY,CAE3C4J,WAAW,CAAEuwF,kBAAF,CAAsBC,YAAtB,CAAoCC,UAApC,CAAgDR,YAAhD,CAA+D,CAEzE,MAAOM,kBAAP,CAA2BC,YAA3B,CAAyCC,UAAzC,CAAqDR,YAArD,EAEA,CAEDuB,YAAY,CAAEvlE,EAAF,CAAMhO,EAAN,CAAUte,CAAV,CAAaue,EAAb,CAAkB,CAE7B,MAAM83C,MAAM,CAAG,KAAKi6B,YAApB,CACCrlE,MAAM,CAAG,KAAK4lE,YADf,CAECt0D,MAAM,CAAG,KAAKqyD,SAFf,CAICuE,OAAO,CAAG7mE,EAAE,CAAGiQ,MAJhB,CAKC62D,OAAO,CAAGD,OAAO,CAAG52D,MALrB,CAOC82D,OAAO,CAAG,CAAErzF,CAAC,CAAGse,EAAN,GAAeC,EAAE,CAAGD,EAApB,CAPX,CAQCg1E,OAAO,CAAG,EAAID,OARf,CAUA,IAAM,IAAI70F,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAK+9B,MAAvB,CAA+B,EAAG/9B,CAAlC,CAAsC,CAErC63D,MAAM,CAAE73D,CAAF,CAAN,CACEysB,MAAM,CAAEmoE,OAAO,CAAG50F,CAAZ,CAAN,CAAwB80F,OAAxB,CACAroE,MAAM,CAAEkoE,OAAO,CAAG30F,CAAZ,CAAN,CAAwB60F,OAF1B,CAIA,CAED,OAAOh9B,MAAP,CAEA,CA9B0C,CAkC5C;EACA;EACA;EACA;EACA,GAEA,MAAMz/D,mBAAN,SAAkCH,WAAY,CAE7C4J,WAAW,CAAEuwF,kBAAF,CAAsBC,YAAtB,CAAoCC,UAApC,CAAgDR,YAAhD,CAA+D,CAEzE,MAAOM,kBAAP,CAA2BC,YAA3B,CAAyCC,UAAzC,CAAqDR,YAArD,EAEA,CAEDuB,YAAY,CAAEvlE,EAAG,iBAAmB,CAEnC,YAAYylE,gBAAL,CAAuBzlE,EAAE,CAAG,CAA5B,CAAP,CAEA,CAZ4C,CAgB9C,MAAMz1B,aAAc,CAEnBwJ,WAAW,CAAEuJ,IAAF,CAAQgkF,KAAR,CAAe3iE,MAAf,CAAuBsoE,aAAvB,CAAuC,CAEjD,GAAK3pF,IAAI,GAAKlM,SAAd,CAA0B,UAAUoD,KAAJ,CAAW,8CAAX,CAAN,CAC1B,GAAK8sF,KAAK,GAAKlwF,SAAV,EAAuBkwF,KAAK,CAAClvF,MAAN,GAAiB,CAA7C,CAAiD,UAAUoC,KAAJ,CAAW,oDAAsD8I,IAAjE,CAAN,CAEjD,KAAKA,IAAL,CAAYA,IAAZ,CAEA,KAAKgkF,KAAL,CAAap3F,cAAc,CAAC82F,YAAf,CAA6BM,KAA7B,CAAoC,KAAK4F,cAAzC,CAAb,CACA,KAAKvoE,MAAL,CAAcz0B,cAAc,CAAC82F,YAAf,CAA6BriE,MAA7B,CAAqC,KAAKwoE,eAA1C,CAAd,CAEA,KAAKC,gBAAL,CAAuBH,aAAa,EAAI,KAAKI,oBAA7C,EAEA,CAED;EACA;EAEa,OAAN/9F,MAAM,CAAE+4F,KAAF,CAAU,CAEtB,MAAMiF,SAAS,CAAGjF,KAAK,CAACtuF,WAAxB,CAEA,IAAIk+E,IAAJ,CAEA;EACA,GAAKqV,SAAS,CAACh+F,MAAV,GAAqB,KAAKA,MAA/B,CAAwC,CAEvC2oF,IAAI,CAAGqV,SAAS,CAACh+F,MAAV,CAAkB+4F,KAAlB,CAAP,CAEA,CAJD,KAIO;EAGNpQ,IAAI,CAAG,CAEN,OAAQoQ,KAAK,CAAC/kF,IAFR,CAGN,QAASpT,cAAc,CAAC82F,YAAf,CAA6BqB,KAAK,CAACf,KAAnC,CAA0CpgF,KAA1C,CAHH,CAIN,SAAUhX,cAAc,CAAC82F,YAAf,CAA6BqB,KAAK,CAAC1jE,MAAnC,CAA2Czd,KAA3C,CAJJ,CAAP,CAQA,MAAM+lF,aAAa,CAAG5E,KAAK,CAACkF,gBAAN,EAAtB,CAEA,GAAKN,aAAa,GAAK5E,KAAK,CAACgF,oBAA7B,CAAoD,CAEnDpV,IAAI,CAACgV,aAAL,CAAqBA,aAArB,CAEA,CAED,CAEDhV,IAAI,CAAChhF,IAAL,CAAYoxF,KAAK,CAACa,aAAlB,CAAiC;EAEjC,OAAOjR,IAAP,CAEA,CAEDuV,gCAAgC,CAAEz9B,MAAF,CAAW,CAE1C,WAAWz/D,mBAAJ,CAAyB,KAAKg3F,KAA9B,CAAqC,KAAK3iE,MAA1C,CAAkD,KAAK4jE,YAAL,EAAlD,CAAuEx4B,MAAvE,CAAP,CAEA,CAED09B,8BAA8B,CAAE19B,MAAF,CAAW,CAExC,WAAW1/D,iBAAJ,CAAuB,KAAKi3F,KAA5B,CAAmC,KAAK3iE,MAAxC,CAAgD,KAAK4jE,YAAL,EAAhD,CAAqEx4B,MAArE,CAAP,CAEA,CAED29B,8BAA8B,CAAE39B,MAAF,CAAW,CAExC,WAAW3/D,gBAAJ,CAAsB,KAAKk3F,KAA3B,CAAkC,KAAK3iE,MAAvC,CAA+C,KAAK4jE,YAAL,EAA/C,CAAoEx4B,MAApE,CAAP,CAEA,CAEDq9B,gBAAgB,CAAEH,aAAF,CAAkB,CAEjC,IAAIU,aAAJ,CAEA,OAASV,aAAT,EAEC,KAAK19G,mBAAL,CAECo+G,aAAa,CAAG,KAAKH,gCAArB,CAEA,MAED,KAAKh+G,iBAAL,CAECm+G,aAAa,CAAG,KAAKF,8BAArB,CAEA,MAED,KAAKh+G,iBAAL,CAECk+G,aAAa,CAAG,KAAKD,8BAArB,CAEA,MAlBF,CAsBA,GAAKC,aAAa,GAAKv2F,SAAvB,CAAmC,CAElC,MAAMwzE,OAAO,CAAG,iCACf,KAAKse,aADU,CACM,wBADN,CACiC,KAAK5lF,IADtD,CAGA,GAAK,KAAKimF,iBAAL,GAA2BnyF,SAAhC,CAA4C;EAG3C,GAAK61F,aAAa,GAAK,KAAKI,oBAA5B,CAAmD,CAElD,KAAKD,gBAAL,CAAuB,KAAKC,oBAA5B,EAEA,CAJD,KAIO,CAEN,UAAU7yF,KAAJ,CAAWowE,OAAX,CAAN,CAA4B;EAE5B,CAED,CAED7vE,OAAO,CAACC,IAAR,CAAc,sBAAd,CAAsC4vE,OAAtC,EACA,WAAA,CAEA,CAED,KAAK2e,iBAAL,CAAyBoE,aAAzB,CAEA,WAAA,CAEA,CAEDJ,gBAAgB,EAAG,CAElB,OAAS,KAAKhE,iBAAd,EAEC,UAAUiE,gCAAV,CAEC,OAAOj+G,mBAAP,CAED,UAAUk+G,8BAAV,CAEC,OAAOj+G,iBAAP,CAED,UAAUk+G,8BAAV,CAEC,OAAOj+G,iBAAP,CAZF,CAgBA,CAED84G,YAAY,EAAG,CAEd,YAAY5jE,MAAL,CAAYvsB,MAAZ,CAAqB,KAAKkvF,KAAL,CAAWlvF,MAAvC,CAEA,CAED;EACAuyE,KAAK,CAAEijB,UAAF,CAAe,CAEnB,GAAKA,UAAU,GAAK,GAApB,CAA0B,CAEzB,MAAMtG,KAAK,CAAG,KAAKA,KAAnB,CAEA,IAAM,IAAIpvF,CAAC,CAAG,CAAR,CAAWoB,CAAC,CAAGguF,KAAK,CAAClvF,MAA3B,CAAmCF,CAAC,GAAKoB,CAAzC,CAA4C,EAAGpB,CAA/C,CAAmD,CAElDovF,KAAK,CAAEpvF,CAAF,CAAL,EAAc01F,UAAd,CAEA,CAED,CAED,WAAA,CAEA,CAED;EACA9qF,KAAK,CAAE+qF,SAAF,CAAc,CAElB,GAAKA,SAAS,GAAK,GAAnB,CAAyB,CAExB,MAAMvG,KAAK,CAAG,KAAKA,KAAnB,CAEA,IAAM,IAAIpvF,CAAC,CAAG,CAAR,CAAWoB,CAAC,CAAGguF,KAAK,CAAClvF,MAA3B,CAAmCF,CAAC,GAAKoB,CAAzC,CAA4C,EAAGpB,CAA/C,CAAmD,CAElDovF,KAAK,CAAEpvF,CAAF,CAAL,EAAc21F,SAAd,CAEA,CAED,CAED,WAAA,CAEA,CAED;EACA;EACA5sC,IAAI,CAAE6sC,SAAF,CAAaC,OAAb,CAAuB,CAE1B,MAAMzG,KAAK,CAAG,KAAKA,KAAnB,CACC0G,KAAK,CAAG1G,KAAK,CAAClvF,MADf,CAGA,IAAIyuF,IAAI,CAAG,CAAX,CACCC,EAAE,CAAGkH,KAAK,CAAG,CADd,CAGA,MAAQnH,IAAI,GAAKmH,KAAT,EAAkB1G,KAAK,CAAET,IAAF,CAAL,CAAgBiH,SAA1C,CAAsD,CAErD,EAAGjH,IAAH,CAEA,CAED,MAAQC,EAAE,GAAK,CAAE,CAAT,EAAcQ,KAAK,CAAER,EAAF,CAAL,CAAciH,OAApC,CAA8C,CAE7C,EAAGjH,EAAH,CAEA,CAED,EAAGA,EAAH,CAAO;EAEP,GAAKD,IAAI,GAAK,CAAT,EAAcC,EAAE,GAAKkH,KAA1B,CAAkC;EAGjC,GAAKnH,IAAI,EAAIC,EAAb,CAAkB,CAEjBA,EAAE,CAAGxuF,IAAI,CAACe,GAAL,CAAUytF,EAAV,CAAc,CAAd,CAAL,CACAD,IAAI,CAAGC,EAAE,CAAG,CAAZ,CAEA,CAED,MAAM7wD,MAAM,CAAG,KAAKsyD,YAAL,EAAf,CACA,KAAKjB,KAAL,CAAap3F,cAAc,CAAC02F,UAAf,CAA2BU,KAA3B,CAAkCT,IAAlC,CAAwCC,EAAxC,CAAb,CACA,KAAKniE,MAAL,CAAcz0B,cAAc,CAAC02F,UAAf,CAA2B,KAAKjiE,MAAhC,CAAwCkiE,IAAI,CAAG5wD,MAA/C,CAAuD6wD,EAAE,CAAG7wD,MAA5D,CAAd,CAEA,CAED,WAAA,CAEA,CAED;EACAg4D,QAAQ,EAAG,CAEV,IAAIC,KAAK,CAAG,IAAZ,CAEA,MAAM5F,SAAS,CAAG,KAAKC,YAAL,EAAlB,CACA,GAAKD,SAAS,CAAGhwF,IAAI,CAACsB,KAAL,CAAY0uF,SAAZ,CAAZ,GAAwC,CAA7C,CAAiD,CAEhDvtF,OAAO,CAAC8D,KAAR,CAAe,mDAAf,CAAoE,IAApE,EACAqvF,KAAK,CAAG,KAAR,CAEA,CAED,MAAM5G,KAAK,CAAG,KAAKA,KAAnB,CACC3iE,MAAM,CAAG,KAAKA,MADf,CAGCqpE,KAAK,CAAG1G,KAAK,CAAClvF,MAHf,CAKA,GAAK41F,KAAK,GAAK,CAAf,CAAmB,CAElBjzF,OAAO,CAAC8D,KAAR,CAAe,sCAAf,CAAuD,IAAvD,EACAqvF,KAAK,CAAG,KAAR,CAEA,CAED,IAAIC,QAAQ,CAAG,IAAf,CAEA,IAAM,IAAIj2F,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAK81F,KAAvB,CAA8B91F,CAAC,EAA/B,CAAqC,CAEpC,MAAMk2F,QAAQ,CAAG9G,KAAK,CAAEpvF,CAAF,CAAtB,CAEA,GAAK,OAAOk2F,QAAP,GAAoB,QAApB,EAAgCn7D,KAAK,CAAEm7D,QAAF,CAA1C,CAAyD,CAExDrzF,OAAO,CAAC8D,KAAR,CAAe,kDAAf,CAAmE,IAAnE,CAAyE3G,CAAzE,CAA4Ek2F,QAA5E,EACAF,KAAK,CAAG,KAAR,CACA,MAEA,CAED,GAAKC,QAAQ,GAAK,IAAb,EAAqBA,QAAQ,CAAGC,QAArC,CAAgD,CAE/CrzF,OAAO,CAAC8D,KAAR,CAAe,yCAAf,CAA0D,IAA1D,CAAgE3G,CAAhE,CAAmEk2F,QAAnE,CAA6ED,QAA7E,EACAD,KAAK,CAAG,KAAR,CACA,MAEA,CAEDC,QAAQ,CAAGC,QAAX,CAEA,CAED,GAAKzpE,MAAM,GAAKvtB,SAAhB,CAA4B,CAE3B,GAAKlH,cAAc,CAAC62F,YAAf,CAA6BpiE,MAA7B,CAAL,CAA6C,CAE5C,IAAM,IAAIzsB,CAAC,CAAG,CAAR,CAAWoB,CAAC,CAAGqrB,MAAM,CAACvsB,MAA5B,CAAoCF,CAAC,GAAKoB,CAA1C,CAA6C,EAAGpB,CAAhD,CAAoD,CAEnD,MAAMiB,KAAK,CAAGwrB,MAAM,CAAEzsB,CAAF,CAApB,CAEA,GAAK+6B,KAAK,CAAE95B,KAAF,CAAV,CAAsB,CAErB4B,OAAO,CAAC8D,KAAR,CAAe,mDAAf,CAAoE,IAApE,CAA0E3G,CAA1E,CAA6EiB,KAA7E,EACA+0F,KAAK,CAAG,KAAR,CACA,MAEA,CAED,CAED,CAED,CAED,OAAOA,KAAP,CAEA,CAED;EACA;EACAG,QAAQ,EAAG;EAGV,MAAM/G,KAAK,CAAGp3F,cAAc,CAAC02F,UAAf,CAA2B,KAAKU,KAAhC,CAAd,CACC3iE,MAAM,CAAGz0B,cAAc,CAAC02F,UAAf,CAA2B,KAAKjiE,MAAhC,CADV,CAECsR,MAAM,CAAG,KAAKsyD,YAAL,EAFV,CAIC+F,mBAAmB,CAAG,KAAKf,gBAAL,KAA4B99G,iBAJnD,CAMCmwE,SAAS,CAAG0nC,KAAK,CAAClvF,MAAN,CAAe,CAN5B,CAQA,IAAIm2F,UAAU,CAAG,CAAjB,CAEA,IAAM,IAAIr2F,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG0nD,SAArB,CAAgC,EAAG1nD,CAAnC,CAAuC,CAEtC,IAAIs2F,IAAI,CAAG,KAAX,CAEA,MAAMxuD,IAAI,CAAGsnD,KAAK,CAAEpvF,CAAF,CAAlB,CACA,MAAMu2F,QAAQ,CAAGnH,KAAK,CAAEpvF,CAAC,CAAG,CAAN,CAAtB,CAEA;EAEA,GAAK8nC,IAAI,GAAKyuD,QAAT,GAAuBv2F,CAAC,GAAK,CAAN,EAAW8nC,IAAI,GAAKsnD,KAAK,CAAE,CAAF,CAAhD,CAAL,CAA+D,CAE9D,GAAK,CAAEgH,mBAAP,CAA6B;EAI5B,MAAMzwF,MAAM,CAAG3F,CAAC,CAAG+9B,MAAnB,CACCy4D,OAAO,CAAG7wF,MAAM,CAAGo4B,MADpB,CAEC04D,OAAO,CAAG9wF,MAAM,CAAGo4B,MAFpB,CAIA,IAAM,IAAIpgB,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAKogB,MAAvB,CAA+B,EAAGpgB,CAAlC,CAAsC,CAErC,MAAM1c,KAAK,CAAGwrB,MAAM,CAAE9mB,MAAM,CAAGgY,CAAX,CAApB,CAEA,GAAK1c,KAAK,GAAKwrB,MAAM,CAAE+pE,OAAO,CAAG74E,CAAZ,CAAhB,EACJ1c,KAAK,GAAKwrB,MAAM,CAAEgqE,OAAO,CAAG94E,CAAZ,CADjB,CACmC,CAElC24E,IAAI,CAAG,IAAP,CACA,MAEA,CAED,CAED,CAtBD,KAsBO,CAENA,IAAI,CAAG,IAAP,CAEA,CAED,CAED;EAEA,GAAKA,IAAL,CAAY,CAEX,GAAKt2F,CAAC,GAAKq2F,UAAX,CAAwB,CAEvBjH,KAAK,CAAEiH,UAAF,CAAL,CAAsBjH,KAAK,CAAEpvF,CAAF,CAA3B,CAEA,MAAM02F,UAAU,CAAG12F,CAAC,CAAG+9B,MAAvB,CACC44D,WAAW,CAAGN,UAAU,CAAGt4D,MAD5B,CAGA,IAAM,IAAIpgB,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAKogB,MAAvB,CAA+B,EAAGpgB,CAAlC,CAAsC,CAErC8O,MAAM,CAAEkqE,WAAW,CAAGh5E,CAAhB,CAAN,CAA4B8O,MAAM,CAAEiqE,UAAU,CAAG/4E,CAAf,CAAlC,CAEA,CAED,CAED,EAAG04E,UAAH,CAEA,CAED,CAED;EAEA,GAAK3uC,SAAS,CAAG,CAAjB,CAAqB,CAEpB0nC,KAAK,CAAEiH,UAAF,CAAL,CAAsBjH,KAAK,CAAE1nC,SAAF,CAA3B,CAEA,IAAM,IAAIgvC,UAAU,CAAGhvC,SAAS,CAAG3pB,MAA7B,CAAqC44D,WAAW,CAAGN,UAAU,CAAGt4D,MAAhE,CAAwEpgB,CAAC,CAAG,CAAlF,CAAqFA,CAAC,GAAKogB,MAA3F,CAAmG,EAAGpgB,CAAtG,CAA0G,CAEzG8O,MAAM,CAAEkqE,WAAW,CAAGh5E,CAAhB,CAAN,CAA4B8O,MAAM,CAAEiqE,UAAU,CAAG/4E,CAAf,CAAlC,CAEA,CAED,EAAG04E,UAAH,CAEA,CAED,GAAKA,UAAU,GAAKjH,KAAK,CAAClvF,MAA1B,CAAmC,CAElC,KAAKkvF,KAAL,CAAap3F,cAAc,CAAC02F,UAAf,CAA2BU,KAA3B,CAAkC,CAAlC,CAAqCiH,UAArC,CAAb,CACA,KAAK5pE,MAAL,CAAcz0B,cAAc,CAAC02F,UAAf,CAA2BjiE,MAA3B,CAAmC,CAAnC,CAAsC4pE,UAAU,CAAGt4D,MAAnD,CAAd,CAEA,CALD,KAKO,CAEN,KAAKqxD,KAAL,CAAaA,KAAb,CACA,KAAK3iE,MAAL,CAAcA,MAAd,CAEA,CAED,WAAA,CAEA,CAEDjqB,KAAK,EAAG,CAEP,MAAM4sF,KAAK,CAAGp3F,cAAc,CAAC02F,UAAf,CAA2B,KAAKU,KAAhC,CAAuC,CAAvC,CAAd,CACA,MAAM3iE,MAAM,CAAGz0B,cAAc,CAAC02F,UAAf,CAA2B,KAAKjiE,MAAhC,CAAwC,CAAxC,CAAf,CAEA,MAAMmqE,kBAAkB,CAAG,KAAK/0F,WAAhC,CACA,MAAMsuF,KAAK,CAAG,IAAIyG,kBAAJ,CAAwB,KAAKxrF,IAA7B,CAAmCgkF,KAAnC,CAA0C3iE,MAA1C,CAAd,CAEA;EACA0jE,KAAK,CAACkB,iBAAN,CAA0B,KAAKA,iBAA/B,CAEA,OAAOlB,KAAP,CAEA,CA3bkB,CA+bpB93F,aAAa,CAACmO,SAAd,CAAwBwuF,cAAxB,CAAyCx7D,YAAzC,CACAnhC,aAAa,CAACmO,SAAd,CAAwByuF,eAAxB,CAA0Cz7D,YAA1C,CACAnhC,aAAa,CAACmO,SAAd,CAAwB2uF,oBAAxB,CAA+C79G,iBAA/C,CAEA;EACA;EACA,GACA,MAAMghB,oBAAN,SAAmCD,aAAc,EAEjDC,oBAAoB,CAACkO,SAArB,CAA+BwqF,aAA/B,CAA+C,MAA/C,CACA14F,oBAAoB,CAACkO,SAArB,CAA+ByuF,eAA/B,CAAiDjmF,KAAjD,CACA1W,oBAAoB,CAACkO,SAArB,CAA+B2uF,oBAA/B,CAAsD99G,mBAAtD,CACAihB,oBAAoB,CAACkO,SAArB,CAA+B+uF,8BAA/B,CAAgEr2F,SAAhE,CACA5G,oBAAoB,CAACkO,SAArB,CAA+BgvF,8BAA/B,CAAgEt2F,SAAhE,CAEA;EACA;EACA,GACA,MAAM3G,kBAAN,SAAiCF,aAAc,EAE/CE,kBAAkB,CAACiO,SAAnB,CAA6BwqF,aAA7B,CAA6C,OAA7C,CAEA;EACA;EACA,GACA,MAAMx4F,mBAAN,SAAkCH,aAAc,EAEhDG,mBAAmB,CAACgO,SAApB,CAA8BwqF,aAA9B,CAA8C,QAA9C,CAEA;EACA;EACA,GAEA,MAAMv4F,2BAAN,SAA0CR,WAAY,CAErD4J,WAAW,CAAEuwF,kBAAF,CAAsBC,YAAtB,CAAoCC,UAApC,CAAgDR,YAAhD,CAA+D,CAEzE,MAAOM,kBAAP,CAA2BC,YAA3B,CAAyCC,UAAzC,CAAqDR,YAArD,EAEA,CAEDuB,YAAY,CAAEvlE,EAAF,CAAMhO,EAAN,CAAUte,CAAV,CAAaue,EAAb,CAAkB,CAE7B,MAAM83C,MAAM,CAAG,KAAKi6B,YAApB,CACCrlE,MAAM,CAAG,KAAK4lE,YADf,CAECt0D,MAAM,CAAG,KAAKqyD,SAFf,CAIC9qF,KAAK,CAAG,CAAE9D,CAAC,CAAGse,EAAN,GAAeC,EAAE,CAAGD,EAApB,CAJT,CAMA,IAAIna,MAAM,CAAGmoB,EAAE,CAAGiQ,MAAlB,CAEA,IAAM,IAAIkB,GAAG,CAAGt5B,MAAM,CAAGo4B,MAAzB,CAAiCp4B,MAAM,GAAKs5B,GAA5C,CAAiDt5B,MAAM,EAAI,CAA3D,CAA+D,CAE9DvrB,UAAU,CAAC04B,SAAX,CAAsB+kD,MAAtB,CAA8B,CAA9B,CAAiCprC,MAAjC,CAAyC9mB,MAAM,CAAGo4B,MAAlD,CAA0DtR,MAA1D,CAAkE9mB,MAAlE,CAA0EL,KAA1E,EAEA,CAED,OAAOuyD,MAAP,CAEA,CA1BoD,CA8BtD;EACA;EACA,GACA,MAAMn/D,uBAAN,SAAsCL,aAAc,CAEnDk9F,8BAA8B,CAAE19B,MAAF,CAAW,CAExC,WAAWp/D,2BAAJ,CAAiC,KAAK22F,KAAtC,CAA6C,KAAK3iE,MAAlD,CAA0D,KAAK4jE,YAAL,EAA1D,CAA+Ex4B,MAA/E,CAAP,CAEA,CANkD,CAUpDn/D,uBAAuB,CAAC8N,SAAxB,CAAkCwqF,aAAlC,CAAkD,YAAlD,CACA;EACAt4F,uBAAuB,CAAC8N,SAAxB,CAAkC2uF,oBAAlC,CAAyD79G,iBAAzD,CACAohB,uBAAuB,CAAC8N,SAAxB,CAAkCgvF,8BAAlC,CAAmEt2F,SAAnE,CAEA;EACA;EACA,GACA,MAAMvG,mBAAN,SAAkCN,aAAc,EAEhDM,mBAAmB,CAAC6N,SAApB,CAA8BwqF,aAA9B,CAA8C,QAA9C,CACAr4F,mBAAmB,CAAC6N,SAApB,CAA8ByuF,eAA9B,CAAgDjmF,KAAhD,CACArW,mBAAmB,CAAC6N,SAApB,CAA8B2uF,oBAA9B,CAAqD99G,mBAArD,CACAshB,mBAAmB,CAAC6N,SAApB,CAA8B+uF,8BAA9B,CAA+Dr2F,SAA/D,CACAvG,mBAAmB,CAAC6N,SAApB,CAA8BgvF,8BAA9B,CAA+Dt2F,SAA/D,CAEA;EACA;EACA,GACA,MAAMtG,mBAAN,SAAkCP,aAAc,EAEhDO,mBAAmB,CAAC4N,SAApB,CAA8BwqF,aAA9B,CAA8C,QAA9C,CAEA,MAAMn4F,aAAc,CAEnBgJ,WAAW,CAAEuJ,IAAF,CAAQyrF,QAAQ,CAAG,CAAE,CAArB,CAAwB3G,MAAxB,CAAgCiC,SAAS,CAAGx6G,wBAA5C,CAAuE,CAEjF,KAAKyzB,IAAL,CAAYA,IAAZ,CACA,KAAK8kF,MAAL,CAAcA,MAAd,CACA,KAAK2G,QAAL,CAAgBA,QAAhB,CACA,KAAK1E,SAAL,CAAiBA,SAAjB,CAEA,KAAKnxF,IAAL,CAAY7nB,YAAY,EAAxB,CAEA;EACA,GAAK,KAAK09G,QAAL,CAAgB,CAArB,CAAyB,CAExB,KAAKtG,aAAL,GAEA,CAED,CAGW,OAALliF,KAAK,CAAE0xE,IAAF,CAAS,CAEpB,MAAMmQ,MAAM,CAAG,EAAf,CACC4G,UAAU,CAAG/W,IAAI,CAACmQ,MADnB,CAEC6G,SAAS,CAAG,KAAQhX,IAAI,CAACiQ,GAAL,EAAY,GAApB,CAFb,CAIA,IAAM,IAAIhwF,CAAC,CAAG,CAAR,CAAWoB,CAAC,CAAG01F,UAAU,CAAC52F,MAAhC,CAAwCF,CAAC,GAAKoB,CAA9C,CAAiD,EAAGpB,CAApD,CAAwD,CAEvDkwF,MAAM,CAAC7wF,IAAP,CAAavG,kBAAkB,CAAEg+F,UAAU,CAAE92F,CAAF,CAAZ,CAAlB,CAAsC4K,KAAtC,CAA6CmsF,SAA7C,CAAb,EAEA,CAED,MAAM9G,IAAI,CAAG,QAAA,CAAUlQ,IAAI,CAAC30E,IAAf,CAAqB20E,IAAI,CAAC8W,QAA1B,CAAoC3G,MAApC,CAA4CnQ,IAAI,CAACoS,SAAjD,CAAb,CACAlC,IAAI,CAACjvF,IAAL,CAAY++E,IAAI,CAAC/+E,IAAjB,CAEA,OAAOivF,IAAP,CAEA,CAEY,OAAN74F,MAAM,CAAE64F,IAAF,CAAS,CAErB,MAAMC,MAAM,CAAG,EAAf,CACC8G,UAAU,CAAG/G,IAAI,CAACC,MADnB,CAGA,MAAMnQ,IAAI,CAAG,CAEZ,OAAQkQ,IAAI,CAAC7kF,IAFD,CAGZ,WAAY6kF,IAAI,CAAC4G,QAHL,CAIZ,SAAU3G,MAJE,CAKZ,OAAQD,IAAI,CAACjvF,IALD,CAMZ,YAAaivF,IAAI,CAACkC,SANN,CAAb,CAUA,IAAM,IAAInyF,CAAC,CAAG,CAAR,CAAWoB,CAAC,CAAG41F,UAAU,CAAC92F,MAAhC,CAAwCF,CAAC,GAAKoB,CAA9C,CAAiD,EAAGpB,CAApD,CAAwD,CAEvDkwF,MAAM,CAAC7wF,IAAP,CAAahH,aAAa,CAACjB,MAAd,CAAsB4/F,UAAU,CAAEh3F,CAAF,CAAhC,CAAb,EAEA,CAED,OAAO+/E,IAAP,CAEA,CAEmC,OAA7BkX,6BAA6B,CAAE7rF,IAAF,CAAQ8rF,mBAAR,CAA6BlH,GAA7B,CAAkCmH,MAAlC,CAA2C,CAE9E,MAAMC,eAAe,CAAGF,mBAAmB,CAACh3F,MAA5C,CACA,MAAMgwF,MAAM,CAAG,EAAf,CAEA,IAAM,IAAIlwF,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGo3F,eAArB,CAAsCp3F,CAAC,EAAvC,CAA6C,CAE5C,IAAIovF,KAAK,CAAG,EAAZ,CACA,IAAI3iE,MAAM,CAAG,EAAb,CAEA2iE,KAAK,CAAC/vF,IAAN,CACC,CAAEW,CAAC,CAAGo3F,eAAJ,CAAsB,CAAxB,EAA8BA,eAD/B,CAECp3F,CAFD,CAGC,CAAEA,CAAC,CAAG,CAAN,EAAYo3F,eAHb,EAKA3qE,MAAM,CAACptB,IAAP,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,EAEA,MAAMqV,KAAK,CAAG1c,cAAc,CAACm3F,gBAAf,CAAiCC,KAAjC,CAAd,CACAA,KAAK,CAAGp3F,cAAc,CAACs3F,WAAf,CAA4BF,KAA5B,CAAmC,CAAnC,CAAsC16E,KAAtC,CAAR,CACA+X,MAAM,CAAGz0B,cAAc,CAACs3F,WAAf,CAA4B7iE,MAA5B,CAAoC,CAApC,CAAuC/X,KAAvC,CAAT,CAEA;EACA;EACA,GAAK,CAAEyiF,MAAF,EAAY/H,KAAK,CAAE,CAAF,CAAL,GAAe,CAAhC,CAAoC,CAEnCA,KAAK,CAAC/vF,IAAN,CAAY+3F,eAAZ,EACA3qE,MAAM,CAACptB,IAAP,CAAaotB,MAAM,CAAE,CAAF,CAAnB,EAEA,CAEDyjE,MAAM,CAAC7wF,IAAP,CACC,IAAI7G,mBAAJ,CACC,0BAA4B0+F,mBAAmB,CAAEl3F,CAAF,CAAnB,CAAyBoL,IAArD,CAA4D,GAD7D,CAECgkF,KAFD,CAEQ3iE,MAFR,EAGE7hB,KAHF,CAGS,IAAMolF,GAHf,CADD,EAMA,CAED,eAAO,CAAU5kF,IAAV,CAAgB,CAAE,CAAlB,CAAqB8kF,MAArB,CAAP,CAEA,CAEgB,OAAVmH,UAAU,CAAEC,iBAAF,CAAqBlsF,IAArB,CAA4B,CAE5C,IAAImsF,SAAS,CAAGD,iBAAhB,CAEA,GAAK,CAAEtoF,KAAK,CAACC,OAAN,CAAeqoF,iBAAf,CAAP,CAA4C,CAE3C,MAAME,CAAC,CAAGF,iBAAV,CACAC,SAAS,CAAGC,CAAC,CAACt7E,QAAF,EAAcs7E,CAAC,CAACt7E,QAAF,CAAWgM,UAAzB,EAAuCsvE,CAAC,CAACtvE,UAArD,CAEA,CAED,IAAM,IAAIloB,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGu3F,SAAS,CAACr3F,MAA/B,CAAuCF,CAAC,EAAxC,CAA8C,CAE7C,GAAKu3F,SAAS,CAAEv3F,CAAF,CAAT,CAAeoL,IAAf,GAAwBA,IAA7B,CAAoC,CAEnC,OAAOmsF,SAAS,CAAEv3F,CAAF,CAAhB,CAEA,CAED,CAED,WAAA,CAEA,CAEyC,OAAnCy3F,mCAAmC,CAAE74D,YAAF,CAAgBoxD,GAAhB,CAAqBmH,MAArB,CAA8B,CAEvE,MAAMO,uBAAuB,CAAG,EAAhC,CAEA;EACA;EACA,MAAMC,OAAO,CAAG,oBAAhB,CAEA;EACA;EACA,IAAM,IAAI33F,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAGwsB,YAAY,CAAC1+B,MAAnC,CAA2CF,CAAC,CAAGoS,EAA/C,CAAmDpS,CAAC,EAApD,CAA0D,CAEzD,MAAMqkD,WAAW,CAAGzlB,YAAY,CAAE5+B,CAAF,CAAhC,CACA,MAAM43F,KAAK,CAAGvzC,WAAW,CAACj5C,IAAZ,CAAiBu8C,KAAjB,CAAwBgwC,OAAxB,CAAd,CAEA,GAAKC,KAAK,EAAIA,KAAK,CAAC13F,MAAN,CAAe,CAA7B,CAAiC,CAEhC,MAAMkL,IAAI,CAAGwsF,KAAK,CAAE,CAAF,CAAlB,CAEA,IAAIC,qBAAqB,CAAGH,uBAAuB,CAAEtsF,IAAF,CAAnD,CAEA,GAAK,CAAEysF,qBAAP,CAA+B,CAE9BH,uBAAuB,CAAEtsF,IAAF,CAAvB,CAAkCysF,qBAAqB,CAAG,EAA1D,CAEA,CAEDA,qBAAqB,CAACx4F,IAAtB,CAA4BglD,WAA5B,EAEA,CAED,CAED,MAAMyzC,KAAK,CAAG,EAAd,CAEA,IAAM,MAAM1sF,IAAZ,IAAoBssF,uBAApB,CAA8C,CAE7CI,KAAK,CAACz4F,IAAN,CAAY,KAAK43F,6BAAL,CAAoC7rF,IAApC,CAA0CssF,uBAAuB,CAAEtsF,IAAF,CAAjE,CAA2E4kF,GAA3E,CAAgFmH,MAAhF,CAAZ,EAEA,CAED,OAAOW,KAAP,CAEA,CAED;EACqB,OAAdC,cAAc,CAAEzrE,SAAF,CAAa+iC,KAAb,CAAqB,CAEzC,GAAK,CAAE/iC,SAAP,CAAmB,CAElBzpB,OAAO,CAAC8D,KAAR,CAAe,uDAAf,EACA,WAAA,CAEA,CAED,MAAMqxF,gBAAgB,CAAG,SAAW5C,SAAX,CAAsB6C,SAAtB,CAAiCC,aAAjC,CAAgDC,YAAhD,CAA8DC,UAA9D,CAA2E;EAGnG,GAAKF,aAAa,CAACh4F,MAAd,GAAyB,CAA9B,CAAkC,CAEjC,MAAMkvF,KAAK,CAAG,EAAd,CACA,MAAM3iE,MAAM,CAAG,EAAf,CAEAz0B,cAAc,CAACy3F,WAAf,CAA4ByI,aAA5B,CAA2C9I,KAA3C,CAAkD3iE,MAAlD,CAA0D0rE,YAA1D,EAEA;EACA,GAAK/I,KAAK,CAAClvF,MAAN,GAAiB,CAAtB,CAA0B,CAEzBk4F,UAAU,CAAC/4F,IAAX,CAAiB,IAAI+1F,SAAJ,CAAe6C,SAAf,CAA0B7I,KAA1B,CAAiC3iE,MAAjC,CAAjB,EAEA,CAED,CAED,CAnBD,CAqBA,MAAMyjE,MAAM,CAAG,EAAf,CAEA,MAAMmI,QAAQ,CAAG/rE,SAAS,CAAClhB,IAAV,EAAkB,SAAnC,CACA,MAAM4kF,GAAG,CAAG1jE,SAAS,CAAC0jE,GAAV,EAAiB,EAA7B,CACA,MAAMmC,SAAS,CAAG7lE,SAAS,CAAC6lE,SAA5B,CAEA;EACA,IAAI0E,QAAQ,CAAGvqE,SAAS,CAACpsB,MAAV,EAAoB,CAAE,CAArC,CAEA,MAAMo4F,eAAe,CAAGhsE,SAAS,CAACisE,SAAV,EAAuB,EAA/C,CAEA,IAAM,IAAI/uF,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG8uF,eAAe,CAACp4F,MAArC,CAA6CsJ,CAAC,EAA9C,CAAoD,CAEnD,MAAM0uF,aAAa,CAAGI,eAAe,CAAE9uF,CAAF,CAAf,CAAqB20B,IAA3C,CAEA;EACA,GAAK,CAAE+5D,aAAF,EAAmBA,aAAa,CAACh4F,MAAd,GAAyB,CAAjD,CAAqD,SAErD;EACA,GAAKg4F,aAAa,CAAE,CAAF,CAAb,CAAmBt5D,YAAxB,CAAuC;EAGtC,MAAM45D,gBAAgB,CAAG,EAAzB,CAEA,IAAIlgC,CAAJ,CAEA,IAAMA,CAAC,CAAG,CAAV,CAAaA,CAAC,CAAG4/B,aAAa,CAACh4F,MAA/B,CAAuCo4D,CAAC,EAAxC,CAA8C,CAE7C,GAAK4/B,aAAa,CAAE5/B,CAAF,CAAb,CAAmB15B,YAAxB,CAAuC,CAEtC,IAAM,IAAIv9B,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG62F,aAAa,CAAE5/B,CAAF,CAAb,CAAmB15B,YAAnB,CAAgC1+B,MAArD,CAA6DmB,CAAC,EAA9D,CAAoE,CAEnEm3F,gBAAgB,CAAEN,aAAa,CAAE5/B,CAAF,CAAb,CAAmB15B,YAAnB,CAAiCv9B,CAAjC,CAAF,CAAhB,CAA2D,CAAE,CAA7D,CAEA,CAED,CAED,CAED;EACA;EACA;EACA,IAAM,MAAMo3F,eAAZ,IAA+BD,gBAA/B,CAAkD,CAEjD,MAAMpJ,KAAK,CAAG,EAAd,CACA,MAAM3iE,MAAM,CAAG,EAAf,CAEA,IAAM,IAAIprB,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAK62F,aAAa,CAAE5/B,CAAF,CAAb,CAAmB15B,YAAnB,CAAgC1+B,MAAvD,CAA+D,EAAGmB,CAAlE,CAAsE,CAErE,MAAMq3F,YAAY,CAAGR,aAAa,CAAE5/B,CAAF,CAAlC,CAEA82B,KAAK,CAAC/vF,IAAN,CAAYq5F,YAAY,CAAC5wD,IAAzB,EACArb,MAAM,CAACptB,IAAP,CAAeq5F,YAAY,CAACr0C,WAAb,GAA6Bo0C,eAA/B,CAAmD,CAAnD,CAAuD,CAApE,EAEA,CAEDvI,MAAM,CAAC7wF,IAAP,CAAa,IAAI7G,mBAAJ,CAAyB,yBAA2BigG,eAA3B,CAA6C,GAAtE,CAA2ErJ,KAA3E,CAAkF3iE,MAAlF,CAAb,EAEA,CAEDoqE,QAAQ,CAAG2B,gBAAgB,CAACt4F,MAAjB,EAA4B8vF,GAAG,EAAI,GAAnC,CAAX,CAEA,CA5CD,KA4CO;EAIN,MAAM2I,QAAQ,CAAG,UAAYtpC,KAAK,CAAE7lD,CAAF,CAAL,CAAW4B,IAAvB,CAA8B,GAA/C,CAEA4sF,gBAAgB,CACfp/F,mBADe,CACM+/F,QAAQ,CAAG,WADjB,CAEfT,aAFe,CAEA,KAFA,CAEOhI,MAFP,CAAhB,CAIA8H,gBAAgB,CACft/F,uBADe,CACUigG,QAAQ,CAAG,aADrB,CAEfT,aAFe,CAEA,KAFA,CAEOhI,MAFP,CAAhB,CAIA8H,gBAAgB,CACfp/F,mBADe,CACM+/F,QAAQ,CAAG,QADjB,CAEfT,aAFe,CAEA,KAFA,CAEOhI,MAFP,CAAhB,CAIA,CAED,CAED,GAAKA,MAAM,CAAChwF,MAAP,GAAkB,CAAvB,CAA2B,CAE1B,WAAA,CAEA,CAED,MAAM+vF,IAAI,CAAG,QAAA,CAAUoI,QAAV,CAAoBxB,QAApB,CAA8B3G,MAA9B,CAAsCiC,SAAtC,CAAb,CAEA,OAAOlC,IAAP,CAEA,CAEDM,aAAa,EAAG,CAEf,MAAML,MAAM,CAAG,KAAKA,MAApB,CACA,IAAI2G,QAAQ,CAAG,CAAf,CAEA,IAAM,IAAI72F,CAAC,CAAG,CAAR,CAAWoB,CAAC,CAAG8uF,MAAM,CAAChwF,MAA5B,CAAoCF,CAAC,GAAKoB,CAA1C,CAA6C,EAAGpB,CAAhD,CAAoD,CAEnD,MAAMmwF,KAAK,CAAG,KAAKD,MAAL,CAAalwF,CAAb,CAAd,CAEA62F,QAAQ,CAAGz2F,IAAI,CAACe,GAAL,CAAU01F,QAAV,CAAoB1G,KAAK,CAACf,KAAN,CAAae,KAAK,CAACf,KAAN,CAAYlvF,MAAZ,CAAqB,CAAlC,CAApB,CAAX,CAEA,CAED,KAAK22F,QAAL,CAAgBA,QAAhB,CAEA,WAAA,CAEA,CAED9tC,IAAI,EAAG,CAEN,IAAM,IAAI/oD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,KAAKkwF,MAAL,CAAYhwF,MAAjC,CAAyCF,CAAC,EAA1C,CAAgD,CAE/C,KAAKkwF,MAAL,CAAalwF,CAAb,EAAiB+oD,IAAjB,CAAuB,CAAvB,CAA0B,KAAK8tC,QAA/B,EAEA,CAED,WAAA,CAEA,CAEDd,QAAQ,EAAG,CAEV,IAAIC,KAAK,CAAG,IAAZ,CAEA,IAAM,IAAIh2F,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,KAAKkwF,MAAL,CAAYhwF,MAAjC,CAAyCF,CAAC,EAA1C,CAAgD,CAE/Cg2F,KAAK,CAAGA,KAAK,EAAI,KAAK9F,MAAL,CAAalwF,CAAb,EAAiB+1F,QAAjB,EAAjB,CAEA,CAED,OAAOC,KAAP,CAEA,CAEDG,QAAQ,EAAG,CAEV,IAAM,IAAIn2F,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,KAAKkwF,MAAL,CAAYhwF,MAAjC,CAAyCF,CAAC,EAA1C,CAAgD,CAE/C,KAAKkwF,MAAL,CAAalwF,CAAb,EAAiBm2F,QAAjB,GAEA,CAED,WAAA,CAEA,CAED3zF,KAAK,EAAG,CAEP,MAAM0tF,MAAM,CAAG,EAAf,CAEA,IAAM,IAAIlwF,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,KAAKkwF,MAAL,CAAYhwF,MAAjC,CAAyCF,CAAC,EAA1C,CAAgD,CAE/CkwF,MAAM,CAAC7wF,IAAP,CAAa,KAAK6wF,MAAL,CAAalwF,CAAb,EAAiBwC,KAAjB,EAAb,EAEA,CAED,gBAAgBX,WAAT,CAAsB,KAAKuJ,IAA3B,CAAiC,KAAKyrF,QAAtC,CAAgD3G,MAAhD,CAAwD,KAAKiC,SAA7D,CAAP,CAEA,CAED/6F,MAAM,EAAG,CAER,YAAYyK,WAAL,CAAiBzK,MAAjB,CAAyB,IAAzB,CAAP,CAEA,CA5XkB,CAgYpB,SAAS2B,4BAAT,CAAuC6/F,QAAvC,CAAkD,CAEjD,OAASA,QAAQ,CAACtiE,WAAT,EAAT,EAEC,IAAK,QAAL,CACA,IAAK,QAAL,CACA,IAAK,OAAL,CACA,IAAK,QAAL,CACA,IAAK,SAAL,CAEC,OAAO99B,mBAAP,CAED,IAAK,QAAL,CACA,IAAK,SAAL,CACA,IAAK,SAAL,CACA,IAAK,SAAL,CAEC,OAAOI,mBAAP,CAED,IAAK,OAAL,CAEC,OAAOL,kBAAP,CAED,IAAK,YAAL,CAEC,OAAOG,uBAAP,CAED,IAAK,MAAL,CACA,IAAK,SAAL,CAEC,OAAOJ,oBAAP,CAED,IAAK,QAAL,CAEC,OAAOK,mBAAP,CAhCF,CAoCA,UAAU2J,KAAJ,CAAW,8CAAgDs2F,QAA3D,CAAN,CAEA,CAED,SAAS9/F,kBAAT,CAA6BinF,IAA7B,CAAoC,CAEnC,GAAKA,IAAI,CAAChhF,IAAL,GAAcG,SAAnB,CAA+B,CAE9B,UAAUoD,KAAJ,CAAW,0DAAX,CAAN,CAEA,CAED,MAAM8yF,SAAS,CAAGr8F,4BAA4B,CAAEgnF,IAAI,CAAChhF,IAAP,CAA9C,CAEA,GAAKghF,IAAI,CAACqP,KAAL,GAAelwF,SAApB,CAAgC,CAE/B,MAAMkwF,KAAK,CAAG,EAAd,CAAkB3iE,MAAM,CAAG,EAA3B,CAEAz0B,cAAc,CAACy3F,WAAf,CAA4B1P,IAAI,CAAC5hD,IAAjC,CAAuCixD,KAAvC,CAA8C3iE,MAA9C,CAAsD,OAAtD,EAEAszD,IAAI,CAACqP,KAAL,CAAaA,KAAb,CACArP,IAAI,CAACtzD,MAAL,CAAcA,MAAd,CAEA,CAED;EACA,GAAK2oE,SAAS,CAAC/mF,KAAV,GAAoBnP,SAAzB,CAAqC,CAEpC,OAAOk2F,SAAS,CAAC/mF,KAAV,CAAiB0xE,IAAjB,CAAP,CAEA,CAJD,KAIO;EAGN,WAAWqV,SAAJ,CAAerV,IAAI,CAAC30E,IAApB,CAA0B20E,IAAI,CAACqP,KAA/B,CAAsCrP,IAAI,CAACtzD,MAA3C,CAAmDszD,IAAI,CAACgV,aAAxD,CAAP,CAEA,CAED,CAED,MAAM/7F,KAAK,CAAG,CAEbmqC,OAAO,CAAE,KAFI,CAIb01D,KAAK,CAAE,EAJM,CAMbl2F,GAAG,CAAE,SAAW+pB,GAAX,CAAgBosE,IAAhB,CAAuB,CAE3B,GAAK,KAAK31D,OAAL,GAAiB,KAAtB,CAA8B,OAE9B;EAEA,KAAK01D,KAAL,CAAYnsE,GAAZ,EAAoBosE,IAApB,CAEA,CAdY,CAgBbpvD,GAAG,CAAE,SAAWhd,GAAX,CAAiB,CAErB,GAAK,KAAKyW,OAAL,GAAiB,KAAtB,CAA8B,OAE9B;EAEA,YAAY01D,KAAL,CAAYnsE,GAAZ,CAAP,CAEA,CAxBY,CA0BblD,MAAM,CAAE,SAAWkD,GAAX,CAAiB,CAExB,YAAYmsE,KAAL,CAAYnsE,GAAZ,CAAP,CAEA,CA9BY,CAgCbhD,KAAK,CAAE,UAAY,CAElB,KAAKmvE,KAAL,CAAa,EAAb,CAEA,CApCY,CAAd,CAwCA,MAAM5/F,cAAe,CAEpB4I,WAAW,CAAEk3F,MAAF,CAAUC,UAAV,CAAsBC,OAAtB,CAAgC,CAE1C,MAAMt5D,KAAK,CAAG,IAAd,CAEA,IAAIu5D,SAAS,CAAG,KAAhB,CACA,IAAIC,WAAW,CAAG,CAAlB,CACA,IAAIC,UAAU,CAAG,CAAjB,CACA,IAAIC,WAAW,CAAGn6F,SAAlB,CACA,MAAMo6F,QAAQ,CAAG,EAAjB,CAEA;EACA;EAEA,KAAKC,OAAL,CAAer6F,SAAf,CACA,KAAK65F,MAAL,CAAcA,MAAd,CACA,KAAKC,UAAL,CAAkBA,UAAlB,CACA,KAAKC,OAAL,CAAeA,OAAf,CAEA,KAAKO,SAAL,CAAiB,SAAWzqF,GAAX,CAAiB,CAEjCqqF,UAAU,GAEV,GAAKF,SAAS,GAAK,KAAnB,CAA2B,CAE1B,GAAKv5D,KAAK,CAAC45D,OAAN,GAAkBr6F,SAAvB,CAAmC,CAElCygC,KAAK,CAAC45D,OAAN,CAAexqF,GAAf,CAAoBoqF,WAApB,CAAiCC,UAAjC,EAEA,CAED,CAEDF,SAAS,CAAG,IAAZ,CAEA,CAhBD,CAkBA,KAAKO,OAAL,CAAe,SAAW1qF,GAAX,CAAiB,CAE/BoqF,WAAW,GAEX,GAAKx5D,KAAK,CAACq5D,UAAN,GAAqB95F,SAA1B,CAAsC,CAErCygC,KAAK,CAACq5D,UAAN,CAAkBjqF,GAAlB,CAAuBoqF,WAAvB,CAAoCC,UAApC,EAEA,CAED,GAAKD,WAAW,GAAKC,UAArB,CAAkC,CAEjCF,SAAS,CAAG,KAAZ,CAEA,GAAKv5D,KAAK,CAACo5D,MAAN,GAAiB75F,SAAtB,CAAkC,CAEjCygC,KAAK,CAACo5D,MAAN,GAEA,CAED,CAED,CAtBD,CAwBA,KAAKW,SAAL,CAAiB,SAAW3qF,GAAX,CAAiB,CAEjC,GAAK4wB,KAAK,CAACs5D,OAAN,GAAkB/5F,SAAvB,CAAmC,CAElCygC,KAAK,CAACs5D,OAAN,CAAelqF,GAAf,EAEA,CAED,CARD,CAUA,KAAK4qF,UAAL,CAAkB,SAAW5qF,GAAX,CAAiB,CAElC,GAAKsqF,WAAL,CAAmB,CAElB,OAAOA,WAAW,CAAEtqF,GAAF,CAAlB,CAEA,CAED,OAAOA,GAAP,CAEA,CAVD,CAYA,KAAK6qF,cAAL,CAAsB,SAAWhzB,SAAX,CAAuB,CAE5CyyB,WAAW,CAAGzyB,SAAd,CAEA,WAAA,CAEA,CAND,CAQA,KAAKizB,UAAL,CAAkB,SAAWC,KAAX,CAAkBC,MAAlB,CAA2B,CAE5CT,QAAQ,CAACj6F,IAAT,CAAey6F,KAAf,CAAsBC,MAAtB,EAEA,WAAA,CAEA,CAND,CAQA,KAAKC,aAAL,CAAqB,SAAWF,KAAX,CAAmB,CAEvC,MAAMr6F,KAAK,CAAG65F,QAAQ,CAACl6F,OAAT,CAAkB06F,KAAlB,CAAd,CAEA,GAAKr6F,KAAK,GAAK,CAAE,CAAjB,CAAqB,CAEpB65F,QAAQ,CAAC55F,MAAT,CAAiBD,KAAjB,CAAwB,CAAxB,EAEA,CAED,WAAA,CAEA,CAZD,CAcA,KAAKw6F,UAAL,CAAkB,SAAWnB,IAAX,CAAkB,CAEnC,IAAM,IAAI94F,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAGq5F,QAAQ,CAACp5F,MAA9B,CAAsCF,CAAC,CAAGC,CAA1C,CAA6CD,CAAC,EAAI,CAAlD,CAAsD,CAErD,MAAM85F,KAAK,CAAGR,QAAQ,CAAEt5F,CAAF,CAAtB,CACA,MAAM+5F,MAAM,CAAGT,QAAQ,CAAEt5F,CAAC,CAAG,CAAN,CAAvB,CAEA,GAAK85F,KAAK,CAACI,MAAX,CAAoBJ,KAAK,CAACpyC,SAAN,CAAkB,CAAlB,CAAqB;EAEzC,GAAKoyC,KAAK,CAAC9tF,IAAN,CAAY8sF,IAAZ,CAAL,CAA0B,CAEzB,OAAOiB,MAAP,CAEA,CAED,CAED,WAAA,CAEA,CAnBD,CAqBA,CAvImB,CA2IrB,MAAM7gG,qBAAqB,CAAG,IAAID,cAAJ,EAA9B,CAEA,MAAME,MAAO,CAEZ0I,WAAW,CAAEs4F,OAAF,CAAY,CAEtB,KAAKA,OAAL,CAAiBA,OAAO,GAAKj7F,SAAd,CAA4Bi7F,OAA5B,CAAsCjhG,qBAArD,CAEA,KAAKkhG,WAAL,CAAmB,WAAnB,CACA,KAAKC,eAAL,CAAuB,KAAvB,CACA,KAAK7yC,IAAL,CAAY,EAAZ,CACA,KAAK8yC,YAAL,CAAoB,EAApB,CACA,KAAKC,aAAL,CAAqB,EAArB,CAEA,CAEDC,IAAI,wCAA2C,EAE/CC,SAAS,CAAE1rF,GAAF,CAAOiqF,UAAP,CAAoB,CAE5B,MAAMr5D,KAAK,CAAG,IAAd,CAEA,WAAW+6D,OAAJ,CAAa,SAAWC,OAAX,CAAoBC,MAApB,CAA6B,CAEhDj7D,KAAK,CAAC66D,IAAN,CAAYzrF,GAAZ,CAAiB4rF,OAAjB,CAA0B3B,UAA1B,CAAsC4B,MAAtC,EAEA,CAJM,CAAP,CAMA,CAEDvsF,KAAK,YAAe,EAEpBwsF,cAAc,CAAET,WAAF,CAAgB,CAE7B,KAAKA,WAAL,CAAmBA,WAAnB,CACA,WAAA,CAEA,CAEDU,kBAAkB,CAAE75F,KAAF,CAAU,CAE3B,KAAKo5F,eAAL,CAAuBp5F,KAAvB,CACA,WAAA,CAEA,CAED85F,OAAO,CAAEvzC,IAAF,CAAS,CAEf,KAAKA,IAAL,CAAYA,IAAZ,CACA,WAAA,CAEA,CAEDwzC,eAAe,CAAEV,YAAF,CAAiB,CAE/B,KAAKA,YAAL,CAAoBA,YAApB,CACA,WAAA,CAEA,CAEDW,gBAAgB,CAAEV,aAAF,CAAkB,CAEjC,KAAKA,aAAL,CAAqBA,aAArB,CACA,WAAA,CAEA,CA/DW,CAmEb,MAAMnhG,OAAO,CAAG,EAAhB,CAEA,MAAMC,UAAN,SAAyBF,MAAO,CAE/B0I,WAAW,CAAEs4F,OAAF,CAAY,CAEtB,MAAOA,OAAP,EAEA,CAEDK,IAAI,CAAEzrF,GAAF,CAAOgqF,MAAP,CAAeC,UAAf,CAA2BC,OAA3B,CAAqC,CAExC,GAAKlqF,GAAG,GAAK7P,SAAb,CAAyB6P,GAAG,CAAG,EAAN,CAEzB,GAAK,KAAKy4C,IAAL,GAActoD,SAAnB,CAA+B6P,GAAG,CAAG,KAAKy4C,IAAL,CAAYz4C,GAAlB,CAE/BA,GAAG,CAAG,KAAKorF,OAAL,CAAaR,UAAb,CAAyB5qF,GAAzB,CAAN,CAEA,MAAM86B,MAAM,CAAG7wC,KAAK,CAAC0wC,GAAN,CAAW36B,GAAX,CAAf,CAEA,GAAK86B,MAAM,GAAK3qC,SAAhB,CAA4B,CAE3B,KAAKi7F,OAAL,CAAaX,SAAb,CAAwBzqF,GAAxB,EAEAmsF,UAAU,CAAE,IAAM,CAEjB,GAAKnC,MAAL,CAAcA,MAAM,CAAElvD,MAAF,CAAN,CAEd,KAAKswD,OAAL,CAAaV,OAAb,CAAsB1qF,GAAtB,EAEA,CANS,CAMP,CANO,CAAV,CAQA,OAAO86B,MAAP,CAEA,CAED;EAEA,GAAKzwC,OAAO,CAAE2V,GAAF,CAAP,GAAmB7P,SAAxB,CAAoC,CAEnC9F,OAAO,CAAE2V,GAAF,CAAP,CAAe1P,IAAf,CAAqB,CAEpB05F,MAAM,CAAEA,MAFY,CAGpBC,UAAU,CAAEA,UAHQ,CAIpBC,OAAO,CAAEA,OAJW,CAArB,EAQA,OAEA,CAED;EACA7/F,OAAO,CAAE2V,GAAF,CAAP,CAAiB,EAAjB,CAEA3V,OAAO,CAAE2V,GAAF,CAAP,CAAe1P,IAAf,CAAqB,CACpB05F,MAAM,CAAEA,MADY,CAEpBC,UAAU,CAAEA,UAFQ,CAGpBC,OAAO,CAAEA,OAHW,CAArB,EAMA;EACA,MAAMkC,GAAG,CAAG,IAAIC,OAAJ,CAAarsF,GAAb,CAAkB,CAC7BssF,OAAO,CAAE,IAAIC,OAAJ,CAAa,KAAKf,aAAlB,CADoB,CAE7BgB,WAAW,CAAE,KAAKlB,eAAL,CAAuB,SAAvB,CAAmC,aAChD;EAH6B,CAAlB,CAAZ,CAMA;EACAmB,KAAK,CAAEL,GAAF,CAAL,CACEM,IADF,CACQC,QAAQ,EAAI,CAElB,GAAKA,QAAQ,CAAC/yC,MAAT,GAAoB,GAApB,EAA2B+yC,QAAQ,CAAC/yC,MAAT,GAAoB,CAApD,CAAwD;EAGvD;EAEA,GAAK+yC,QAAQ,CAAC/yC,MAAT,GAAoB,CAAzB,CAA6B,CAE5B9lD,OAAO,CAACC,IAAR,CAAc,2CAAd,EAEA,CAED,MAAM64F,SAAS,CAAGviG,OAAO,CAAE2V,GAAF,CAAzB,CACA,MAAM6sF,MAAM,CAAGF,QAAQ,CAACG,IAAT,CAAcC,SAAd,EAAf,CACA,MAAMC,aAAa,CAAGL,QAAQ,CAACL,OAAT,CAAiB3xD,GAAjB,CAAsB,gBAAtB,CAAtB,CACA,MAAMsyD,KAAK,CAAGD,aAAa,CAAG5lE,QAAQ,CAAE4lE,aAAF,CAAX,CAA+B,CAA1D,CACA,MAAME,gBAAgB,CAAGD,KAAK,GAAK,CAAnC,CACA,IAAIE,MAAM,CAAG,CAAb,CAEA;EACA,WAAWC,cAAJ,CAAoB,CAC1BpiE,KAAK,CAAEkvC,UAAF,CAAe,CAEnBmzB,QAAQ,GAER,SAASA,QAAT,EAAoB,CAEnBR,MAAM,CAACS,IAAP,GAAcZ,IAAd,CAAoB,CAAE,CAAEa,IAAF,CAAQr7F,KAAR,CAAF,GAAuB,CAE1C,GAAKq7F,IAAL,CAAY,CAEXrzB,UAAU,CAACszB,KAAX,GAEA,CAJD,KAIO,CAENL,MAAM,EAAIj7F,KAAK,CAACu7F,UAAhB,CAEA,MAAM58F,KAAK,CAAG,IAAI68F,aAAJ,CAAmB,UAAnB,CAA+B,CAAER,gBAAF,CAAoBC,MAApB,CAA4BF,KAA5B,CAA/B,CAAd,CACA,IAAM,IAAIh8F,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAGupF,SAAS,CAACz7F,MAAhC,CAAwCF,CAAC,CAAGoS,EAA5C,CAAgDpS,CAAC,EAAjD,CAAuD,CAEtD,MAAMoX,QAAQ,CAAGukF,SAAS,CAAE37F,CAAF,CAA1B,CACA,GAAKoX,QAAQ,CAAC4hF,UAAd,CAA2B5hF,QAAQ,CAAC4hF,UAAT,CAAqBp5F,KAArB,EAE3B,CAEDqpE,UAAU,CAACyzB,OAAX,CAAoBz7F,KAApB,EACAm7F,QAAQ,GAER,CAED,CAvBD,EAyBA,CAED,CAlCyB,CAApB,CAAP,CAsCA,CAzDD,KAyDO,CAEN,MAAM95F,KAAK,CAAG,cAAao5F,QAAQ,CAAC3sF,GAAI,oBAAmB2sF,QAAQ,CAAC/yC,MAAO,KAAI+yC,QAAQ,CAACiB,UAAW,EAAxF,CAAX,CAEA,CAED,CAlEF,EAmEElB,IAnEF,CAmEQmB,MAAM,EAAI,CAEhB,MAAMlB,QAAQ,CAAG,IAAImB,QAAJ,CAAcD,MAAd,CAAjB,CAEA,OAAS,KAAKE,YAAd,EAEC,IAAK,aAAL,CAEC,OAAOpB,QAAQ,CAACqB,WAAT,EAAP,CAED,IAAK,MAAL,CAEC,OAAOrB,QAAQ,CAACsB,IAAT,EAAP,CAED,IAAK,UAAL,CAEC,OAAOtB,QAAQ,CAACuB,IAAT,GACLxB,IADK,CACCwB,IAAI,EAAI,CAEd,MAAMC,MAAM,CAAG,IAAIC,SAAJ,EAAf,CACA,OAAOD,MAAM,CAACE,eAAP,CAAwBH,IAAxB,CAA8B,KAAKI,QAAnC,CAAP,CAEA,CANK,CAAP,CAQD,IAAK,MAAL,CAEC,OAAO3B,QAAQ,CAAC3b,IAAT,EAAP,CAED,QAEC,OAAO2b,QAAQ,CAACuB,IAAT,EAAP,CA1BF,CA8BA,CArGF,EAsGExB,IAtGF,CAsGQ/rF,IAAI,EAAI;EAGd;EACA1W,KAAK,CAAC2J,GAAN,CAAWoM,GAAX,CAAgBW,IAAhB,EAEA,MAAMisF,SAAS,CAAGviG,OAAO,CAAE2V,GAAF,CAAzB,CACA,OAAO3V,OAAO,CAAE2V,GAAF,CAAd,CAEA,IAAM,IAAI/O,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAGupF,SAAS,CAACz7F,MAAhC,CAAwCF,CAAC,CAAGoS,EAA5C,CAAgDpS,CAAC,EAAjD,CAAuD,CAEtD,MAAMoX,QAAQ,CAAGukF,SAAS,CAAE37F,CAAF,CAA1B,CACA,GAAKoX,QAAQ,CAAC2hF,MAAd,CAAuB3hF,QAAQ,CAAC2hF,MAAT,CAAiBrpF,IAAjB,EAEvB,CAED,KAAKyqF,OAAL,CAAaV,OAAb,CAAsB1qF,GAAtB,EAEA,CAxHF,EAyHEuuF,KAzHF,CAyHS7+B,GAAG,EAAI;EAId,MAAMk9B,SAAS,CAAGviG,OAAO,CAAE2V,GAAF,CAAzB,CACA,OAAO3V,OAAO,CAAE2V,GAAF,CAAd,CAEA,IAAM,IAAI/O,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAGupF,SAAS,CAACz7F,MAAhC,CAAwCF,CAAC,CAAGoS,EAA5C,CAAgDpS,CAAC,EAAjD,CAAuD,CAEtD,MAAMoX,QAAQ,CAAGukF,SAAS,CAAE37F,CAAF,CAA1B,CACA,GAAKoX,QAAQ,CAAC6hF,OAAd,CAAwB7hF,QAAQ,CAAC6hF,OAAT,CAAkBx6B,GAAlB,EAExB,CAED,KAAK07B,OAAL,CAAaT,SAAb,CAAwB3qF,GAAxB,EACA,KAAKorF,OAAL,CAAaV,OAAb,CAAsB1qF,GAAtB,EAEA,CA1IF,EA4IA,KAAKorF,OAAL,CAAaX,SAAb,CAAwBzqF,GAAxB,EAEA,CAEDwuF,eAAe,CAAEt8F,KAAF,CAAU,CAExB,KAAK67F,YAAL,CAAoB77F,KAApB,CACA,WAAA,CAEA,CAEDu8F,WAAW,CAAEv8F,KAAF,CAAU,CAEpB,KAAKo8F,QAAL,CAAgBp8F,KAAhB,CACA,WAAA,CAEA,CA/N8B,CA8ZhC,MAAM3H,WAAN,SAA0BH,MAAO,CAEhC0I,WAAW,CAAEs4F,OAAF,CAAY,CAEtB,MAAOA,OAAP,EAEA,CAEDK,IAAI,CAAEzrF,GAAF,CAAOgqF,MAAP,CAAeC,UAAf,CAA2BC,OAA3B,CAAqC,CAExC,GAAK,KAAKzxC,IAAL,GAActoD,SAAnB,CAA+B6P,GAAG,CAAG,KAAKy4C,IAAL,CAAYz4C,GAAlB,CAE/BA,GAAG,CAAG,KAAKorF,OAAL,CAAaR,UAAb,CAAyB5qF,GAAzB,CAAN,CAEA,MAAM4wB,KAAK,CAAG,IAAd,CAEA,MAAMkK,MAAM,CAAG7wC,KAAK,CAAC0wC,GAAN,CAAW36B,GAAX,CAAf,CAEA,GAAK86B,MAAM,GAAK3qC,SAAhB,CAA4B,CAE3BygC,KAAK,CAACw6D,OAAN,CAAcX,SAAd,CAAyBzqF,GAAzB,EAEAmsF,UAAU,CAAE,UAAY,CAEvB,GAAKnC,MAAL,CAAcA,MAAM,CAAElvD,MAAF,CAAN,CAEdlK,KAAK,CAACw6D,OAAN,CAAcV,OAAd,CAAuB1qF,GAAvB,EAEA,CANS,CAMP,CANO,CAAV,CAQA,OAAO86B,MAAP,CAEA,CAED,MAAM99B,KAAK,CAAGZ,eAAe,CAAE,KAAF,CAA7B,CAEA,SAASsyF,WAAT,EAAuB,CAEtBC,oBAAoB,GAEpB1kG,KAAK,CAAC2J,GAAN,CAAWoM,GAAX,CAAgB,IAAhB,EAEA,GAAKgqF,MAAL,CAAcA,MAAM,CAAE,IAAF,CAAN,CAEdp5D,KAAK,CAACw6D,OAAN,CAAcV,OAAd,CAAuB1qF,GAAvB,EAEA,CAED,SAAS4uF,YAAT,CAAuB/9F,KAAvB,CAA+B,CAE9B89F,oBAAoB,GAEpB,GAAKzE,OAAL,CAAeA,OAAO,CAAEr5F,KAAF,CAAP,CAEf+/B,KAAK,CAACw6D,OAAN,CAAcT,SAAd,CAAyB3qF,GAAzB,EACA4wB,KAAK,CAACw6D,OAAN,CAAcV,OAAd,CAAuB1qF,GAAvB,EAEA,CAED,SAAS2uF,oBAAT,EAAgC,CAE/B3xF,KAAK,CAACxM,mBAAN,CAA2B,MAA3B,CAAmCk+F,WAAnC,CAAgD,KAAhD,EACA1xF,KAAK,CAACxM,mBAAN,CAA2B,OAA3B,CAAoCo+F,YAApC,CAAkD,KAAlD,EAEA,CAED5xF,KAAK,CAACjN,gBAAN,CAAwB,MAAxB,CAAgC2+F,WAAhC,CAA6C,KAA7C,EACA1xF,KAAK,CAACjN,gBAAN,CAAwB,OAAxB,CAAiC6+F,YAAjC,CAA+C,KAA/C,EAEA,GAAK5uF,GAAG,CAAC6uF,MAAJ,CAAY,CAAZ,CAAe,CAAf,IAAuB,OAA5B,CAAsC,CAErC,GAAK,KAAKxD,WAAL,GAAqBl7F,SAA1B,CAAsC6M,KAAK,CAACquF,WAAN,CAAoB,KAAKA,WAAzB,CAEtC,CAEDz6D,KAAK,CAACw6D,OAAN,CAAcX,SAAd,CAAyBzqF,GAAzB,EAEAhD,KAAK,CAACE,GAAN,CAAY8C,GAAZ,CAEA,OAAOhD,KAAP,CAEA,CAjF+B,CAqFjC,MAAMxS,iBAAN,SAAgCJ,MAAO,CAEtC0I,WAAW,CAAEs4F,OAAF,CAAY,CAEtB,MAAOA,OAAP,EAEA,CAEDK,IAAI,CAAEqD,IAAF,CAAQ9E,MAAR,CAAgBC,UAAhB,CAA4BC,OAA5B,CAAsC,CAEzC,MAAMrnF,OAAO,CAAG,IAAIrvB,WAAJ,EAAhB,CAEA,MAAMw3G,MAAM,CAAG,IAAIzgG,WAAJ,CAAiB,KAAK6gG,OAAtB,CAAf,CACAJ,MAAM,CAACc,cAAP,CAAuB,KAAKT,WAA5B,EACAL,MAAM,CAACgB,OAAP,CAAgB,KAAKvzC,IAArB,EAEA,IAAI00C,MAAM,CAAG,CAAb,CAEA,SAAS4B,WAAT,CAAsB99F,CAAtB,CAA0B,CAEzB+5F,MAAM,CAACS,IAAP,CAAaqD,IAAI,CAAE79F,CAAF,CAAjB,CAAwB,SAAW+L,KAAX,CAAmB,CAE1C6F,OAAO,CAAC9C,MAAR,CAAgB9O,CAAhB,EAAsB+L,KAAtB,CAEAmwF,MAAM,GAEN,GAAKA,MAAM,GAAK,CAAhB,CAAoB,CAEnBtqF,OAAO,CAACtC,WAAR,CAAsB,IAAtB,CAEA,GAAKypF,MAAL,CAAcA,MAAM,CAAEnnF,OAAF,CAAN,CAEd,CAED,CAdD,CAcG1S,SAdH,CAcc+5F,OAdd,EAgBA,CAED,IAAM,IAAIj5F,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG69F,IAAI,CAAC39F,MAA1B,CAAkC,EAAGF,CAArC,CAAyC,CAExC89F,WAAW,CAAE99F,CAAF,CAAX,CAEA,CAED,OAAO4R,OAAP,CAEA,CA9CqC,CA6JvC,MAAMpY,aAAN,SAA4BL,MAAO,CAElC0I,WAAW,CAAEs4F,OAAF,CAAY,CAEtB,MAAOA,OAAP,EAEA,CAEDK,IAAI,CAAEzrF,GAAF,CAAOgqF,MAAP,CAAeC,UAAf,CAA2BC,OAA3B,CAAqC,CAExC,MAAMrnF,OAAO,CAAG,IAAI93B,OAAJ,EAAhB,CAEA,MAAMigH,MAAM,CAAG,IAAIzgG,WAAJ,CAAiB,KAAK6gG,OAAtB,CAAf,CACAJ,MAAM,CAACc,cAAP,CAAuB,KAAKT,WAA5B,EACAL,MAAM,CAACgB,OAAP,CAAgB,KAAKvzC,IAArB,EAEAuyC,MAAM,CAACS,IAAP,CAAazrF,GAAb,CAAkB,SAAWhD,KAAX,CAAmB,CAEpC6F,OAAO,CAAC7F,KAAR,CAAgBA,KAAhB,CACA6F,OAAO,CAACtC,WAAR,CAAsB,IAAtB,CAEA,GAAKypF,MAAM,GAAK75F,SAAhB,CAA4B,CAE3B65F,MAAM,CAAEnnF,OAAF,CAAN,CAEA,CAED,CAXD,CAWGonF,UAXH,CAWeC,OAXf,EAaA,OAAOrnF,OAAP,CAEA,CA/BiC,CAmCnC,MAAMrW,KAAN,SAAoB1d,QAAS,CAE5BgkB,WAAW,CAAE4vB,KAAF,CAASwhC,SAAS,CAAG,CAArB,CAAyB,CAEnC,QAEA,KAAKl0D,IAAL,CAAY,OAAZ,CAEA,KAAK0yB,KAAL,CAAa,IAAIpyC,KAAJ,CAAWoyC,KAAX,CAAb,CACA,KAAKwhC,SAAL,CAAiBA,SAAjB,CAEA,CAED9jD,OAAO,EAAG;EAIT,CAED1M,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKsjB,KAAL,CAAWhvB,IAAX,CAAiB0L,MAAM,CAACsjB,KAAxB,EACA,KAAKwhC,SAAL,CAAiB9kD,MAAM,CAAC8kD,SAAxB,CAEA,WAAA,CAEA,CAED77D,MAAM,CAAEmX,IAAF,CAAS,CAEd,MAAMmB,IAAI,CAAG,MAAMtY,MAAN,CAAcmX,IAAd,CAAb,CAEAmB,IAAI,CAAC6L,MAAL,CAAYkW,KAAZ,CAAoB,KAAKA,KAAL,CAAWC,MAAX,EAApB,CACAhiB,IAAI,CAAC6L,MAAL,CAAY03C,SAAZ,CAAwB,KAAKA,SAA7B,CAEA,GAAK,KAAK1hB,WAAL,GAAqBryC,SAA1B,CAAsCwQ,IAAI,CAAC6L,MAAL,CAAYg2B,WAAZ,CAA0B,KAAKA,WAAL,CAAiB7f,MAAjB,EAA1B,CAEtC,GAAK,KAAK3I,QAAL,GAAkB7pB,SAAvB,CAAmCwQ,IAAI,CAAC6L,MAAL,CAAYwN,QAAZ,CAAuB,KAAKA,QAA5B,CACnC,GAAK,KAAKjkB,KAAL,GAAe5F,SAApB,CAAgCwQ,IAAI,CAAC6L,MAAL,CAAYzW,KAAZ,CAAoB,KAAKA,KAAzB,CAChC,GAAK,KAAK6rC,KAAL,GAAezxC,SAApB,CAAgCwQ,IAAI,CAAC6L,MAAL,CAAYo1B,KAAZ,CAAoB,KAAKA,KAAzB,CAChC,GAAK,KAAKijB,QAAL,GAAkB10D,SAAvB,CAAmCwQ,IAAI,CAAC6L,MAAL,CAAYq4C,QAAZ,CAAuB,KAAKA,QAA5B,CAEnC,GAAK,KAAKnhB,MAAL,GAAgBvzC,SAArB,CAAiCwQ,IAAI,CAAC6L,MAAL,CAAYk3B,MAAZ,CAAqB,KAAKA,MAAL,CAAYr7C,MAAZ,EAArB,CAEjC,OAAOsY,IAAP,CAEA,CAhD2B,CAoD7BnU,KAAK,CAACiL,SAAN,CAAgB8iB,OAAhB,CAA0B,IAA1B,CAEA,MAAM9tB,eAAN,SAA8BD,KAAM,CAEnCsG,WAAW,CAAEyvC,QAAF,CAAYC,WAAZ,CAAyB0hB,SAAzB,CAAqC,CAE/C,MAAO3hB,QAAP,CAAiB2hB,SAAjB,EAEA,KAAKl0D,IAAL,CAAY,iBAAZ,CAEA,KAAK8lB,QAAL,CAAcpiB,IAAd,CAAoB5kB,QAAQ,CAACspC,SAA7B,EACA,KAAKjZ,YAAL,GAEA,KAAKqjC,WAAL,CAAmB,IAAIlyD,KAAJ,CAAWkyD,WAAX,CAAnB,CAEA,CAED9uC,IAAI,CAAE0L,MAAF,CAAW,CAEd5S,KAAK,CAACiL,SAAN,CAAgB/D,IAAhB,CAAqBtC,IAArB,CAA2B,IAA3B,CAAiCgO,MAAjC,EAEA,KAAKojC,WAAL,CAAiB9uC,IAAjB,CAAuB0L,MAAM,CAACojC,WAA9B,EAEA,WAAA,CAEA,CAvBkC,CA2BpC/1C,eAAe,CAACgL,SAAhB,CAA0ButD,iBAA1B,CAA8C,IAA9C,CAEA,MAAMt4D,mBAAmB,cAAiB,IAAIrf,OAAJ,EAA1C,CACA,MAAMsf,qBAAqB,cAAiB,IAAIrhB,OAAJ,EAA5C,CACA,MAAMshB,aAAa,cAAiB,IAAIthB,OAAJ,EAApC,CAEA,MAAMuhB,WAAY,CAEjBiG,WAAW,CAAEuW,MAAF,CAAW,CAErB,KAAKA,MAAL,CAAcA,MAAd,CAEA,KAAKo7C,IAAL,CAAY,CAAZ,CACA,KAAKC,UAAL,CAAkB,CAAlB,CACA,KAAK95C,MAAL,CAAc,CAAd,CACA,KAAK+9C,WAAL,CAAmB,CAAnB,CAEA,KAAKhE,OAAL,CAAe,IAAIj6E,OAAJ,CAAa,GAAb,CAAkB,GAAlB,CAAf,CAEA,KAAKm5C,GAAL,CAAW,IAAX,CACA,KAAKqkC,OAAL,CAAe,IAAf,CACA,KAAKjsD,MAAL,CAAc,IAAI5uB,OAAJ,EAAd,CAEA,KAAKg6E,UAAL,CAAkB,IAAlB,CACA,KAAK9mD,WAAL,CAAmB,KAAnB,CAEA,KAAK8lD,QAAL,CAAgB,IAAIzyE,OAAJ,EAAhB,CACA,KAAKo7G,aAAL,CAAqB,IAAItkH,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAArB,CAEA,KAAKukH,cAAL,CAAsB,CAAtB,CAEA,KAAKC,UAAL,CAAkB,CAEjB,IAAIjkH,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CAAsB,CAAtB,CAFiB,CAAlB,CAMA,CAEDm9E,gBAAgB,EAAG,CAElB,YAAY6mC,cAAZ,CAEA,CAEDzmC,UAAU,EAAG,CAEZ,YAAYnC,QAAZ,CAEA,CAEDkC,cAAc,CAAE9F,KAAF,CAAU,CAEvB,MAAM6G,YAAY,CAAG,KAAKjgD,MAA1B,CACA,MAAM8lF,YAAY,CAAG,KAAKlzF,MAA1B,CAEAtP,qBAAqB,CAACse,qBAAtB,CAA6Cw3C,KAAK,CAAC/4C,WAAnD,EACA4/C,YAAY,CAACxzC,QAAb,CAAsBpiB,IAAtB,CAA4B/G,qBAA5B,EAEAC,aAAa,CAACqe,qBAAd,CAAqCw3C,KAAK,CAAC3xD,MAAN,CAAa4Y,WAAlD,EACA4/C,YAAY,CAAC35C,MAAb,CAAqB/iB,aAArB,EACA08D,YAAY,CAAC5tC,iBAAb,GAEAhvB,mBAAmB,CAACqM,gBAApB,CAAsCuwD,YAAY,CAAC//C,gBAAnD,CAAqE+/C,YAAY,CAAChgD,kBAAlF,EACA,KAAK+8C,QAAL,CAAc/uB,uBAAd,CAAuC5qC,mBAAvC,EAEAyiG,YAAY,CAACl8F,GAAb,CACC,GADD,CACM,GADN,CACW,GADX,CACgB,GADhB,CAEC,GAFD,CAEM,GAFN,CAEW,GAFX,CAEgB,GAFhB,CAGC,GAHD,CAGM,GAHN,CAGW,GAHX,CAGgB,GAHhB,CAIC,GAJD,CAIM,GAJN,CAIW,GAJX,CAIgB,GAJhB,EAOAk8F,YAAY,CAAC16F,QAAb,CAAuB60D,YAAY,CAAC//C,gBAApC,EACA4lF,YAAY,CAAC16F,QAAb,CAAuB60D,YAAY,CAAChgD,kBAApC,EAEA,CAEDg/C,WAAW,CAAE8mC,aAAF,CAAkB,CAE5B,YAAYF,UAAL,CAAiBE,aAAjB,CAAP,CAEA,CAEDrnC,eAAe,EAAG,CAEjB,YAAYinC,aAAZ,CAEA,CAED5uF,OAAO,EAAG,CAET,GAAK,KAAKyjB,GAAV,CAAgB,CAEf,KAAKA,GAAL,CAASzjB,OAAT,GAEA,CAED,GAAK,KAAK8nD,OAAV,CAAoB,CAEnB,KAAKA,OAAL,CAAa9nD,OAAb,GAEA,CAED,CAED1M,IAAI,CAAE0L,MAAF,CAAW,CAEd,KAAKiK,MAAL,CAAcjK,MAAM,CAACiK,MAAP,CAAc5V,KAAd,EAAd,CAEA,KAAKgxD,IAAL,CAAYrlD,MAAM,CAACqlD,IAAnB,CACA,KAAK75C,MAAL,CAAcxL,MAAM,CAACwL,MAArB,CAEA,KAAK+5C,OAAL,CAAajxD,IAAb,CAAmB0L,MAAM,CAACulD,OAA1B,EAEA,WAAA,CAEA,CAEDlxD,KAAK,EAAG,CAEP,gBAAgBX,WAAT,GAAuBY,IAAvB,CAA6B,IAA7B,CAAP,CAEA,CAEDrL,MAAM,EAAG,CAER,MAAMmkB,MAAM,CAAG,EAAf,CAEA,GAAK,KAAKi4C,IAAL,GAAc,CAAnB,CAAuBj4C,MAAM,CAACi4C,IAAP,CAAc,KAAKA,IAAnB,CACvB,GAAK,KAAKC,UAAL,GAAoB,CAAzB,CAA6Bl4C,MAAM,CAACk4C,UAAP,CAAoB,KAAKA,UAAzB,CAC7B,GAAK,KAAK95C,MAAL,GAAgB,CAArB,CAAyB4B,MAAM,CAAC5B,MAAP,CAAgB,KAAKA,MAArB,CACzB,GAAK,KAAK+5C,OAAL,CAAapyD,CAAb,GAAmB,GAAnB,EAA0B,KAAKoyD,OAAL,CAAanyD,CAAb,GAAmB,GAAlD,CAAwDga,MAAM,CAACm4C,OAAP,CAAiB,KAAKA,OAAL,CAAa9tD,OAAb,EAAjB,CAExD2V,MAAM,CAACnD,MAAP,CAAgB,KAAKA,MAAL,CAAYhhB,MAAZ,CAAoB,KAApB,EAA4BmkB,MAA5C,CACA,OAAOA,MAAM,CAACnD,MAAP,CAAcpN,MAArB,CAEA,OAAOuQ,MAAP,CAEA,CArIgB,CAyIlB,MAAM1f,eAAN,SAA8BD,WAAY,CAEzCiG,WAAW,EAAG,CAEb,MAAO,IAAI1f,iBAAJ,CAAuB,EAAvB,CAA2B,CAA3B,CAA8B,GAA9B,CAAmC,GAAnC,CAAP,EAEA,KAAK+/C,KAAL,CAAa,CAAb,CAEA,CAEDo1B,cAAc,CAAE9F,KAAF,CAAU,CAEvB,MAAMp5C,MAAM,CAAG,KAAKA,MAApB,CAEA,MAAMh2B,GAAG,CAAGlJ,OAAO,CAAG,CAAV,CAAcs4E,KAAK,CAAC1sD,KAApB,CAA4B,KAAKo9B,KAA7C,CACA,MAAM7/C,MAAM,CAAG,KAAKqxE,OAAL,CAAa5xD,KAAb,CAAqB,KAAK4xD,OAAL,CAAa3xD,MAAjD,CACA,MAAM+jB,GAAG,CAAG0rC,KAAK,CAACzoC,QAAN,EAAkB3Q,MAAM,CAAC0N,GAArC,CAEA,GAAK1jC,GAAG,GAAKg2B,MAAM,CAACh2B,GAAf,EAAsBC,MAAM,GAAK+1B,MAAM,CAAC/1B,MAAxC,EAAkDyjC,GAAG,GAAK1N,MAAM,CAAC0N,GAAtE,CAA4E,CAE3E1N,MAAM,CAACh2B,GAAP,CAAaA,GAAb,CACAg2B,MAAM,CAAC/1B,MAAP,CAAgBA,MAAhB,CACA+1B,MAAM,CAAC0N,GAAP,CAAaA,GAAb,CACA1N,MAAM,CAACkqB,sBAAP,GAEA,CAED,MAAMg1B,cAAN,CAAsB9F,KAAtB,EAEA,CAED/uD,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAK+zB,KAAL,CAAa/zB,MAAM,CAAC+zB,KAApB,CAEA,WAAA,CAEA,CAvCwC,CA2C1CrmC,eAAe,CAAC2K,SAAhB,CAA0B43F,iBAA1B,CAA8C,IAA9C,CAEA,MAAMtiG,SAAN,SAAwBP,KAAM,CAE7BsG,WAAW,CAAE4vB,KAAF,CAASwhC,SAAT,CAAoBlqC,QAAQ,CAAG,CAA/B,CAAkCjkB,KAAK,CAAG1E,IAAI,CAACC,EAAL,CAAU,CAApD,CAAuDuzD,QAAQ,CAAG,CAAlE,CAAqEjjB,KAAK,CAAG,CAA7E,CAAiF,CAE3F,MAAOlf,KAAP,CAAcwhC,SAAd,EAEA,KAAKl0D,IAAL,CAAY,WAAZ,CAEA,KAAK8lB,QAAL,CAAcpiB,IAAd,CAAoB5kB,QAAQ,CAACspC,SAA7B,EACA,KAAKjZ,YAAL,GAEA,KAAKrO,MAAL,CAAc,IAAIhiB,QAAJ,EAAd,CAEA,KAAKkrC,QAAL,CAAgBA,QAAhB,CACA,KAAKjkB,KAAL,CAAaA,KAAb,CACA,KAAK8uD,QAAL,CAAgBA,QAAhB,CACA,KAAKjjB,KAAL,CAAaA,KAAb,CAAoB;EAEpB,KAAK8B,MAAL,CAAc,IAAI52C,eAAJ,EAAd,CAEA,CAEQ,IAALwiG,KAAK,EAAG;EAGX;EACA,YAAYprC,SAAL,CAAiB7yD,IAAI,CAACC,EAA7B,CAEA,CAEQ,IAALg+F,KAAK,CAAEA,KAAF,CAAU;EAGlB,KAAKprC,SAAL,CAAiBorC,KAAK,CAAGj+F,IAAI,CAACC,EAA9B,CAEA,CAED8O,OAAO,EAAG,CAET,KAAKsjC,MAAL,CAAYtjC,OAAZ,GAEA,CAED1M,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAK4a,QAAL,CAAgB5a,MAAM,CAAC4a,QAAvB,CACA,KAAKjkB,KAAL,CAAaqJ,MAAM,CAACrJ,KAApB,CACA,KAAK8uD,QAAL,CAAgBzlD,MAAM,CAACylD,QAAvB,CACA,KAAKjjB,KAAL,CAAaxiC,MAAM,CAACwiC,KAApB,CAEA,KAAK9wC,MAAL,CAAcsO,MAAM,CAACtO,MAAP,CAAc2C,KAAd,EAAd,CAEA,KAAKiwC,MAAL,CAActkC,MAAM,CAACskC,MAAP,CAAcjwC,KAAd,EAAd,CAEA,WAAA,CAEA,CA1D4B,CA8D9B1G,SAAS,CAAC0K,SAAV,CAAoBmtD,WAApB,CAAkC,IAAlC,CAEA,MAAM53D,iBAAiB,cAAiB,IAAI3f,OAAJ,EAAxC,CACA,MAAM4f,mBAAmB,cAAiB,IAAI3hB,OAAJ,EAA1C,CACA,MAAM4hB,WAAW,cAAiB,IAAI5hB,OAAJ,EAAlC,CAEA,MAAM6hB,gBAAN,SAA+BN,WAAY,CAE1CiG,WAAW,EAAG,CAEb,MAAO,IAAI1f,iBAAJ,CAAuB,EAAvB,CAA2B,CAA3B,CAA8B,GAA9B,CAAmC,GAAnC,CAAP,EAEA,KAAK47G,aAAL,CAAqB,IAAItkH,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAArB,CAEA,KAAKukH,cAAL,CAAsB,CAAtB,CAEA,KAAKC,UAAL,CAAkB;EAEjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA,IAAIjkH,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CAAsB,CAAtB,CAfiB;EAiBjB,IAAIA,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CAAsB,CAAtB,CAjBiB;EAmBjB,IAAIA,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CAAsB,CAAtB,CAnBiB;EAqBjB,IAAIA,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CAAsB,CAAtB,CArBiB;EAuBjB,IAAIA,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CAAsB,CAAtB,CAvBiB;EAyBjB,IAAIA,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CAAsB,CAAtB,CAzBiB,CAAlB,CA4BA,KAAKskH,eAAL,CAAuB,CACtB,IAAIjkH,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CADsB,CACE,IAAIA,OAAJ,CAAa,CAAE,CAAf,CAAkB,CAAlB,CAAqB,CAArB,CADF,CAC4B,IAAIA,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CAD5B,CAEtB,IAAIA,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAE,CAArB,CAFsB,CAEI,IAAIA,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CAFJ,CAE4B,IAAIA,OAAJ,CAAa,CAAb,CAAgB,CAAE,CAAlB,CAAqB,CAArB,CAF5B,CAAvB,CAKA,KAAKkkH,QAAL,CAAgB,CACf,IAAIlkH,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CADe,CACS,IAAIA,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CADT,CACiC,IAAIA,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CADjC,CAEf,IAAIA,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CAFe,CAES,IAAIA,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CAFT,CAEiC,IAAIA,OAAJ,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAE,CAArB,CAFjC,CAAhB,CAKA,CAEDi9E,cAAc,CAAE9F,KAAF,CAAS2sC,aAAa,CAAG,CAAzB,CAA6B,CAE1C,MAAM/lF,MAAM,CAAG,KAAKA,MAApB,CACA,MAAM8lF,YAAY,CAAG,KAAKlzF,MAA1B,CAEA,MAAM8a,GAAG,CAAG0rC,KAAK,CAACzoC,QAAN,EAAkB3Q,MAAM,CAAC0N,GAArC,CAEA,GAAKA,GAAG,GAAK1N,MAAM,CAAC0N,GAApB,CAA0B,CAEzB1N,MAAM,CAAC0N,GAAP,CAAaA,GAAb,CACA1N,MAAM,CAACkqB,sBAAP,GAEA,CAEDtmC,mBAAmB,CAACge,qBAApB,CAA2Cw3C,KAAK,CAAC/4C,WAAjD,EACAL,MAAM,CAACyM,QAAP,CAAgBpiB,IAAhB,CAAsBzG,mBAAtB,EAEAC,WAAW,CAACwG,IAAZ,CAAkB2V,MAAM,CAACyM,QAAzB,EACA5oB,WAAW,CAAC0G,GAAZ,CAAiB,KAAK27F,eAAL,CAAsBH,aAAtB,CAAjB,EACA/lF,MAAM,CAAC2K,EAAP,CAAUtgB,IAAV,CAAgB,KAAK87F,QAAL,CAAeJ,aAAf,CAAhB,EACA/lF,MAAM,CAACsG,MAAP,CAAeziB,WAAf,EACAmc,MAAM,CAACqS,iBAAP,GAEAyzE,YAAY,CAAC/5E,eAAb,CAA8B,CAAEnoB,mBAAmB,CAACsF,CAApD,CAAuD,CAAEtF,mBAAmB,CAACuF,CAA7E,CAAgF,CAAEvF,mBAAmB,CAAC2T,CAAtG,EAEA5T,iBAAiB,CAAC+L,gBAAlB,CAAoCsQ,MAAM,CAACE,gBAA3C,CAA6DF,MAAM,CAACC,kBAApE,EACA,KAAK+8C,QAAL,CAAc/uB,uBAAd,CAAuCtqC,iBAAvC,EAEA,CA9EyC,CAkF3CG,gBAAgB,CAACsK,SAAjB,CAA2BuwD,kBAA3B,CAAgD,IAAhD,CAEA,MAAM56D,UAAN,SAAyBZ,KAAM,CAE9BsG,WAAW,CAAE4vB,KAAF,CAASwhC,SAAT,CAAoBlqC,QAAQ,CAAG,CAA/B,CAAkC4nB,KAAK,CAAG,CAA1C,CAA8C,CAExD,MAAOlf,KAAP,CAAcwhC,SAAd,EAEA,KAAKl0D,IAAL,CAAY,YAAZ,CAEA,KAAKgqB,QAAL,CAAgBA,QAAhB,CACA,KAAK4nB,KAAL,CAAaA,KAAb,CAAoB;EAEpB,KAAK8B,MAAL,CAAc,IAAIv2C,gBAAJ,EAAd,CAEA,CAEQ,IAALmiG,KAAK,EAAG;EAGX;EACA,YAAYprC,SAAL,CAAiB,CAAjB,CAAqB7yD,IAAI,CAACC,EAAjC,CAEA,CAEQ,IAALg+F,KAAK,CAAEA,KAAF,CAAU;EAGlB,KAAKprC,SAAL,CAAiBorC,KAAK,EAAK,EAAIj+F,IAAI,CAACC,EAAd,CAAtB,CAEA,CAED8O,OAAO,EAAG,CAET,KAAKsjC,MAAL,CAAYtjC,OAAZ,GAEA,CAED1M,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAK4a,QAAL,CAAgB5a,MAAM,CAAC4a,QAAvB,CACA,KAAK4nB,KAAL,CAAaxiC,MAAM,CAACwiC,KAApB,CAEA,KAAK8B,MAAL,CAActkC,MAAM,CAACskC,MAAP,CAAcjwC,KAAd,EAAd,CAEA,WAAA,CAEA,CA/C6B,CAmD/BrG,UAAU,CAACqK,SAAX,CAAqBstD,YAArB,CAAoC,IAApC,CAEA,MAAMz3D,sBAAN,SAAqCT,WAAY,CAEhDiG,WAAW,EAAG,CAEb,MAAO,IAAIzF,kBAAJ,CAAwB,CAAE,CAA1B,CAA6B,CAA7B,CAAgC,CAAhC,CAAmC,CAAE,CAArC,CAAwC,GAAxC,CAA6C,GAA7C,CAAP,EAEA,CAN+C,CAUjDC,sBAAsB,CAACmK,SAAvB,CAAiCg4F,wBAAjC,CAA4D,IAA5D,CAEA,MAAMliG,gBAAN,SAA+Bf,KAAM,CAEpCsG,WAAW,CAAE4vB,KAAF,CAASwhC,SAAT,CAAqB,CAE/B,MAAOxhC,KAAP,CAAcwhC,SAAd,EAEA,KAAKl0D,IAAL,CAAY,kBAAZ,CAEA,KAAK8lB,QAAL,CAAcpiB,IAAd,CAAoB5kB,QAAQ,CAACspC,SAA7B,EACA,KAAKjZ,YAAL,GAEA,KAAKrO,MAAL,CAAc,IAAIhiB,QAAJ,EAAd,CAEA,KAAK40D,MAAL,CAAc,IAAIp2C,sBAAJ,EAAd,CAEA,CAED8S,OAAO,EAAG,CAET,KAAKsjC,MAAL,CAAYtjC,OAAZ,GAEA,CAED1M,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKtO,MAAL,CAAcsO,MAAM,CAACtO,MAAP,CAAc2C,KAAd,EAAd,CACA,KAAKiwC,MAAL,CAActkC,MAAM,CAACskC,MAAP,CAAcjwC,KAAd,EAAd,CAEA,WAAA,CAEA,CAhCmC,CAoCrClG,gBAAgB,CAACkK,SAAjB,CAA2B8sD,kBAA3B,CAAgD,IAAhD,CAEA,MAAM/2D,YAAN,SAA2BhB,KAAM,CAEhCsG,WAAW,CAAE4vB,KAAF,CAASwhC,SAAT,CAAqB,CAE/B,MAAOxhC,KAAP,CAAcwhC,SAAd,EAEA,KAAKl0D,IAAL,CAAY,cAAZ,CAEA,CAR+B,CAYjCxC,YAAY,CAACiK,SAAb,CAAuB0sD,cAAvB,CAAwC,IAAxC,CAEA,MAAM12D,aAAN,SAA4BjB,KAAM,CAEjCsG,WAAW,CAAE4vB,KAAF,CAASwhC,SAAT,CAAoBnxD,KAAK,CAAG,EAA5B,CAAgCC,MAAM,CAAG,EAAzC,CAA8C,CAExD,MAAO0vB,KAAP,CAAcwhC,SAAd,EAEA,KAAKl0D,IAAL,CAAY,eAAZ,CAEA,KAAK+C,KAAL,CAAaA,KAAb,CACA,KAAKC,MAAL,CAAcA,MAAd,CAEA,CAEQ,IAALs8F,KAAK,EAAG;EAGX,YAAYprC,SAAL,CAAiB,KAAKnxD,KAAtB,CAA8B,KAAKC,MAAnC,CAA4C3B,IAAI,CAACC,EAAxD,CAEA,CAEQ,IAALg+F,KAAK,CAAEA,KAAF,CAAU;EAGlB,KAAKprC,SAAL,CAAiBorC,KAAK,EAAK,KAAKv8F,KAAL,CAAa,KAAKC,MAAlB,CAA2B3B,IAAI,CAACC,EAArC,CAAtB,CAEA,CAEDoC,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKrM,KAAL,CAAaqM,MAAM,CAACrM,KAApB,CACA,KAAKC,MAAL,CAAcoM,MAAM,CAACpM,MAArB,CAEA,WAAA,CAEA,CAED3K,MAAM,CAAEmX,IAAF,CAAS,CAEd,MAAMmB,IAAI,CAAG,MAAMtY,MAAN,CAAcmX,IAAd,CAAb,CAEAmB,IAAI,CAAC6L,MAAL,CAAYzZ,KAAZ,CAAoB,KAAKA,KAAzB,CACA4N,IAAI,CAAC6L,MAAL,CAAYxZ,MAAZ,CAAqB,KAAKA,MAA1B,CAEA,OAAO2N,IAAP,CAEA,CA/CgC,CAmDlClT,aAAa,CAACgK,SAAd,CAAwBqtD,eAAxB,CAA0C,IAA1C,CAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA,MAAMp3D,mBAAoB,CAEzBoF,WAAW,EAAG,CAEb,KAAKwxD,YAAL,CAAoB,EAApB,CAEA,IAAM,IAAIrzD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9B,KAAKqzD,YAAL,CAAkBh0D,IAAlB,CAAwB,IAAIhlB,OAAJ,EAAxB,EAEA,CAED,CAED2nB,GAAG,CAAEqxD,YAAF,CAAiB,CAEnB,IAAM,IAAIrzD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9B,KAAKqzD,YAAL,CAAmBrzD,CAAnB,EAAuByC,IAAvB,CAA6B4wD,YAAY,CAAErzD,CAAF,CAAzC,EAEA,CAED,WAAA,CAEA,CAEDy+F,IAAI,EAAG,CAEN,IAAM,IAAIz+F,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9B,KAAKqzD,YAAL,CAAmBrzD,CAAnB,EAAuBgC,GAAvB,CAA4B,CAA5B,CAA+B,CAA/B,CAAkC,CAAlC,EAEA,CAED,WAAA,CAEA,CAED;EACA;EACA08F,KAAK,CAAEnlF,MAAF,CAAU1Z,MAAV,CAAmB;EAIvB,MAAMyB,CAAC,CAAGiY,MAAM,CAACjY,CAAjB,CAAoBC,CAAC,CAAGgY,MAAM,CAAChY,CAA/B,CAAkCoO,CAAC,CAAG4J,MAAM,CAAC5J,CAA7C,CAEA,MAAMgvF,KAAK,CAAG,KAAKtrC,YAAnB,CAEA;EACAxzD,MAAM,CAAC4C,IAAP,CAAak8F,KAAK,CAAE,CAAF,CAAlB,EAA0Bl7F,cAA1B,CAA0C,QAA1C,EAEA;EACA5D,MAAM,CAACuD,eAAP,CAAwBu7F,KAAK,CAAE,CAAF,CAA7B,CAAoC,SAAWp9F,CAA/C,EACA1B,MAAM,CAACuD,eAAP,CAAwBu7F,KAAK,CAAE,CAAF,CAA7B,CAAoC,SAAWhvF,CAA/C,EACA9P,MAAM,CAACuD,eAAP,CAAwBu7F,KAAK,CAAE,CAAF,CAA7B,CAAoC,SAAWr9F,CAA/C,EAEA;EACAzB,MAAM,CAACuD,eAAP,CAAwBu7F,KAAK,CAAE,CAAF,CAA7B,CAAoC,UAAar9F,CAAC,CAAGC,CAAjB,CAApC,EACA1B,MAAM,CAACuD,eAAP,CAAwBu7F,KAAK,CAAE,CAAF,CAA7B,CAAoC,UAAap9F,CAAC,CAAGoO,CAAjB,CAApC,EACA9P,MAAM,CAACuD,eAAP,CAAwBu7F,KAAK,CAAE,CAAF,CAA7B,CAAoC,UAAa,IAAMhvF,CAAN,CAAUA,CAAV,CAAc,GAA3B,CAApC,EACA9P,MAAM,CAACuD,eAAP,CAAwBu7F,KAAK,CAAE,CAAF,CAA7B,CAAoC,UAAar9F,CAAC,CAAGqO,CAAjB,CAApC,EACA9P,MAAM,CAACuD,eAAP,CAAwBu7F,KAAK,CAAE,CAAF,CAA7B,CAAoC,UAAar9F,CAAC,CAAGA,CAAJ,CAAQC,CAAC,CAAGA,CAAzB,CAApC,EAEA,OAAO1B,MAAP,CAEA,CAED;EACA;EACA;EACA++F,eAAe,CAAErlF,MAAF,CAAU1Z,MAAV,CAAmB;EAIjC,MAAMyB,CAAC,CAAGiY,MAAM,CAACjY,CAAjB,CAAoBC,CAAC,CAAGgY,MAAM,CAAChY,CAA/B,CAAkCoO,CAAC,CAAG4J,MAAM,CAAC5J,CAA7C,CAEA,MAAMgvF,KAAK,CAAG,KAAKtrC,YAAnB,CAEA;EACAxzD,MAAM,CAAC4C,IAAP,CAAak8F,KAAK,CAAE,CAAF,CAAlB,EAA0Bl7F,cAA1B,CAA0C,QAA1C,EAAsD;EAEtD;EACA5D,MAAM,CAACuD,eAAP,CAAwBu7F,KAAK,CAAE,CAAF,CAA7B,CAAoC,IAAM,QAAN,CAAiBp9F,CAArD,EAA0D;EAC1D1B,MAAM,CAACuD,eAAP,CAAwBu7F,KAAK,CAAE,CAAF,CAA7B,CAAoC,IAAM,QAAN,CAAiBhvF,CAArD,EACA9P,MAAM,CAACuD,eAAP,CAAwBu7F,KAAK,CAAE,CAAF,CAA7B,CAAoC,IAAM,QAAN,CAAiBr9F,CAArD,EAEA;EACAzB,MAAM,CAACuD,eAAP,CAAwBu7F,KAAK,CAAE,CAAF,CAA7B,CAAoC,IAAM,QAAN,CAAiBr9F,CAAjB,CAAqBC,CAAzD,EAA8D;EAC9D1B,MAAM,CAACuD,eAAP,CAAwBu7F,KAAK,CAAE,CAAF,CAA7B,CAAoC,IAAM,QAAN,CAAiBp9F,CAAjB,CAAqBoO,CAAzD,EACA9P,MAAM,CAACuD,eAAP,CAAwBu7F,KAAK,CAAE,CAAF,CAA7B,CAAoC,SAAWhvF,CAAX,CAAeA,CAAf,CAAmB,QAAvD,EAAmE;EACnE9P,MAAM,CAACuD,eAAP,CAAwBu7F,KAAK,CAAE,CAAF,CAA7B,CAAoC,IAAM,QAAN,CAAiBr9F,CAAjB,CAAqBqO,CAAzD,EACA9P,MAAM,CAACuD,eAAP,CAAwBu7F,KAAK,CAAE,CAAF,CAA7B,CAAoC,UAAar9F,CAAC,CAAGA,CAAJ,CAAQC,CAAC,CAAGA,CAAzB,CAApC,EAAoE;EAEpE,OAAO1B,MAAP,CAEA,CAED8C,GAAG,CAAEywD,EAAF,CAAO,CAET,IAAM,IAAIpzD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9B,KAAKqzD,YAAL,CAAmBrzD,CAAnB,EAAuB2C,GAAvB,CAA4BywD,EAAE,CAACC,YAAH,CAAiBrzD,CAAjB,CAA5B,EAEA,CAED,WAAA,CAEA,CAED6+F,WAAW,CAAEzrC,EAAF,CAAMnwD,CAAN,CAAU,CAEpB,IAAM,IAAIjD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9B,KAAKqzD,YAAL,CAAmBrzD,CAAnB,EAAuBoD,eAAvB,CAAwCgwD,EAAE,CAACC,YAAH,CAAiBrzD,CAAjB,CAAxC,CAA8DiD,CAA9D,EAEA,CAED,WAAA,CAEA,CAED2H,KAAK,CAAE3H,CAAF,CAAM,CAEV,IAAM,IAAIjD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9B,KAAKqzD,YAAL,CAAmBrzD,CAAnB,EAAuByD,cAAvB,CAAuCR,CAAvC,EAEA,CAED,WAAA,CAEA,CAED3pB,IAAI,CAAE85E,EAAF,CAAM9tD,KAAN,CAAc,CAEjB,IAAM,IAAItF,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9B,KAAKqzD,YAAL,CAAmBrzD,CAAnB,EAAuB1mB,IAAvB,CAA6B85E,EAAE,CAACC,YAAH,CAAiBrzD,CAAjB,CAA7B,CAAmDsF,KAAnD,EAEA,CAED,WAAA,CAEA,CAEDnQ,MAAM,CAAEi+D,EAAF,CAAO,CAEZ,IAAM,IAAIpzD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9B,GAAK,CAAE,KAAKqzD,YAAL,CAAmBrzD,CAAnB,EAAuB7K,MAAvB,CAA+Bi+D,EAAE,CAACC,YAAH,CAAiBrzD,CAAjB,CAA/B,CAAP,CAA+D,CAE9D,YAAA,CAEA,CAED,CAED,WAAA,CAEA,CAEDyC,IAAI,CAAE2wD,EAAF,CAAO,CAEV,YAAYpxD,GAAL,CAAUoxD,EAAE,CAACC,YAAb,CAAP,CAEA,CAED7wD,KAAK,EAAG,CAEP,gBAAgBX,WAAT,GAAuBY,IAAvB,CAA6B,IAA7B,CAAP,CAEA,CAEDiD,SAAS,CAAE5F,KAAF,CAAS6F,MAAM,CAAG,CAAlB,CAAsB,CAE9B,MAAM0tD,YAAY,CAAG,KAAKA,YAA1B,CAEA,IAAM,IAAIrzD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9BqzD,YAAY,CAAErzD,CAAF,CAAZ,CAAkB0F,SAAlB,CAA6B5F,KAA7B,CAAoC6F,MAAM,CAAK3F,CAAC,CAAG,CAAnD,EAEA,CAED,WAAA,CAEA,CAED4F,OAAO,CAAE9F,KAAK,CAAG,EAAV,CAAc6F,MAAM,CAAG,CAAvB,CAA2B,CAEjC,MAAM0tD,YAAY,CAAG,KAAKA,YAA1B,CAEA,IAAM,IAAIrzD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,CAArB,CAAwBA,CAAC,EAAzB,CAA+B,CAE9BqzD,YAAY,CAAErzD,CAAF,CAAZ,CAAkB4F,OAAlB,CAA2B9F,KAA3B,CAAkC6F,MAAM,CAAK3F,CAAC,CAAG,CAAjD,EAEA,CAED,OAAOF,KAAP,CAEA,CAED;EACA;EACiB,OAAVg/F,UAAU,CAAEvlF,MAAF,CAAUwlF,OAAV,CAAoB;EAIpC,MAAMz9F,CAAC,CAAGiY,MAAM,CAACjY,CAAjB,CAAoBC,CAAC,CAAGgY,MAAM,CAAChY,CAA/B,CAAkCoO,CAAC,CAAG4J,MAAM,CAAC5J,CAA7C,CAEA;EACAovF,OAAO,CAAE,CAAF,CAAP,CAAe,QAAf,CAEA;EACAA,OAAO,CAAE,CAAF,CAAP,CAAe,SAAWx9F,CAA1B,CACAw9F,OAAO,CAAE,CAAF,CAAP,CAAe,SAAWpvF,CAA1B,CACAovF,OAAO,CAAE,CAAF,CAAP,CAAe,SAAWz9F,CAA1B,CAEA;EACAy9F,OAAO,CAAE,CAAF,CAAP,CAAe,SAAWz9F,CAAX,CAAeC,CAA9B,CACAw9F,OAAO,CAAE,CAAF,CAAP,CAAe,SAAWx9F,CAAX,CAAeoO,CAA9B,CACAovF,OAAO,CAAE,CAAF,CAAP,CAAe,UAAa,EAAIpvF,CAAJ,CAAQA,CAAR,CAAY,CAAzB,CAAf,CACAovF,OAAO,CAAE,CAAF,CAAP,CAAe,SAAWz9F,CAAX,CAAeqO,CAA9B,CACAovF,OAAO,CAAE,CAAF,CAAP,CAAe,UAAaz9F,CAAC,CAAGA,CAAJ,CAAQC,CAAC,CAAGA,CAAzB,CAAf,CAEA,CAhOwB,CAoO1B9E,mBAAmB,CAAC+J,SAApB,CAA8Bw4F,qBAA9B,CAAsD,IAAtD,CAEA,MAAMtiG,UAAN,SAAyBnB,KAAM,CAE9BsG,WAAW,CAAEuxD,EAAE,CAAG,IAAI32D,mBAAJ,EAAP,CAAkCw2D,SAAS,CAAG,CAA9C,CAAkD,CAE5D,MAAO/zD,SAAP,CAAkB+zD,SAAlB,EAEA,KAAKG,EAAL,CAAUA,EAAV,CAEA,CAED3wD,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKilD,EAAL,CAAQ3wD,IAAR,CAAc0L,MAAM,CAACilD,EAArB,EAEA,WAAA,CAEA,CAEDvyB,QAAQ,CAAEk/C,IAAF,CAAS,CAEhB,KAAK9sB,SAAL,CAAiB8sB,IAAI,CAAC9sB,SAAtB,CAAiC;EACjC,KAAKG,EAAL,CAAQ1tD,SAAR,CAAmBq6E,IAAI,CAAC3sB,EAAxB,EAEA,WAAA,CAEA,CAEDh8D,MAAM,CAAEmX,IAAF,CAAS,CAEd,MAAMmB,IAAI,CAAG,MAAMtY,MAAN,CAAcmX,IAAd,CAAb,CAEAmB,IAAI,CAAC6L,MAAL,CAAY63C,EAAZ,CAAiB,KAAKA,EAAL,CAAQxtD,OAAR,EAAjB,CAEA,OAAO8J,IAAP,CAEA,CArC6B,CAyC/BhT,UAAU,CAAC8J,SAAX,CAAqB2sD,YAArB,CAAoC,IAApC,CA0SA,MAAMx2D,WAAY,CAEA,OAAVsiG,UAAU,CAAEn/F,KAAF,CAAU,CAE1B,GAAK,OAAOo/F,WAAP,GAAuB,WAA5B,CAA0C,CAEzC,WAAWA,WAAJ,GAAkBC,MAAlB,CAA0Br/F,KAA1B,CAAP,CAEA,CAED;EACA;EAEA,IAAImD,CAAC,CAAG,EAAR,CAEA,IAAM,IAAIjD,CAAC,CAAG,CAAR,CAAWoS,EAAE,CAAGtS,KAAK,CAACI,MAA5B,CAAoCF,CAAC,CAAGoS,EAAxC,CAA4CpS,CAAC,EAA7C,CAAmD;EAGlDiD,CAAC,EAAI07B,MAAM,CAACygE,YAAP,CAAqBt/F,KAAK,CAAEE,CAAF,CAA1B,CAAL,CAEA,CAED,GAAI;EAIH,OAAOq/F,kBAAkB,CAAEC,MAAM,CAAEr8F,CAAF,CAAR,CAAzB,CAEA,CAAC,MAAQY,CAAR,CAAY;EAEb,OAAOZ,CAAP,CAEA,CAED,CAEoB,OAAds8F,cAAc,CAAExwF,GAAF,CAAQ,CAE5B,MAAMtP,KAAK,CAAGsP,GAAG,CAACywF,WAAJ,CAAiB,GAAjB,CAAd,CAEA,GAAK//F,KAAK,GAAK,CAAE,CAAjB,CAAqB,OAAO,IAAP,CAErB,OAAOsP,GAAG,CAAC6uF,MAAJ,CAAY,CAAZ,CAAen+F,KAAK,CAAG,CAAvB,CAAP,CAEA,CAEgB,OAAVk6F,UAAU,CAAE5qF,GAAF,CAAOy4C,IAAP,CAAc;EAG9B,GAAK,OAAOz4C,GAAP,GAAe,QAAf,EAA2BA,GAAG,GAAK,EAAxC,CAA6C,OAAO,EAAP,CAE7C;EACA,GAAK,gBAAgB/C,IAAhB,CAAsBw7C,IAAtB,GAAgC,MAAMx7C,IAAN,CAAY+C,GAAZ,CAArC,CAAyD,CAExDy4C,IAAI,CAAGA,IAAI,CAACyC,OAAL,CAAc,yBAAd,CAAyC,IAAzC,CAAP,CAEA,CAED;EACA,GAAK,mBAAmBj+C,IAAnB,CAAyB+C,GAAzB,CAAL,CAAsC,OAAOA,GAAP,CAEtC;EACA,GAAK,gBAAgB/C,IAAhB,CAAsB+C,GAAtB,CAAL,CAAmC,OAAOA,GAAP,CAEnC;EACA,GAAK,aAAa/C,IAAb,CAAmB+C,GAAnB,CAAL,CAAgC,OAAOA,GAAP,CAEhC;EACA,OAAOy4C,IAAI,CAAGz4C,GAAd,CAEA,CAtEgB,CA0ElB,MAAMnS,uBAAN,SAAsCtc,cAAe,CAEpDuhB,WAAW,EAAG,CAEb,QAEA,KAAK9C,IAAL,CAAY,yBAAZ,CACA,KAAKqkD,aAAL,CAAqBl4C,QAArB,CAEA,CAEDzI,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAKi1C,aAAL,CAAqBj1C,MAAM,CAACi1C,aAA5B,CAEA,WAAA,CAEA,CAED5gD,KAAK,EAAG,CAEP,gBAAgBX,WAAT,GAAuBY,IAAvB,CAA6B,IAA7B,CAAP,CAEA,CAEDrL,MAAM,EAAG,CAER,MAAMsY,IAAI,CAAG,MAAMtY,MAAN,CAAc,IAAd,CAAb,CAEAsY,IAAI,CAAC0zC,aAAL,CAAqB,KAAKA,aAA1B,CAEA1zC,IAAI,CAACynC,yBAAL,CAAiC,IAAjC,CAEA,OAAOznC,IAAP,CAEA,CArCmD,CAyCrD9S,uBAAuB,CAAC4J,SAAxB,CAAkC2wC,yBAAlC,CAA8D,IAA9D,CA2vCA,MAAMr6C,iBAAN,SAAgC3D,MAAO,CAEtC0I,WAAW,CAAEs4F,OAAF,CAAY,CAEtB,MAAOA,OAAP,EAEA,GAAK,OAAOsF,iBAAP,GAA6B,WAAlC,CAAgD,CAE/C58F,OAAO,CAACC,IAAR,CAAc,6DAAd,EAEA,CAED,GAAK,OAAO04F,KAAP,GAAiB,WAAtB,CAAoC,CAEnC34F,OAAO,CAACC,IAAR,CAAc,iDAAd,EAEA,CAED,KAAKyO,OAAL,CAAe,CAAE5D,gBAAgB,CAAE,MAApB,CAAf,CAEA,CAED+xF,UAAU,CAAEnuF,OAAF,CAAY,CAErB,KAAKA,OAAL,CAAeA,OAAf,CAEA,WAAA,CAEA,CAEDipF,IAAI,CAAEzrF,GAAF,CAAOgqF,MAAP,CAAeC,UAAf,CAA2BC,OAA3B,CAAqC,CAExC,GAAKlqF,GAAG,GAAK7P,SAAb,CAAyB6P,GAAG,CAAG,EAAN,CAEzB,GAAK,KAAKy4C,IAAL,GAActoD,SAAnB,CAA+B6P,GAAG,CAAG,KAAKy4C,IAAL,CAAYz4C,GAAlB,CAE/BA,GAAG,CAAG,KAAKorF,OAAL,CAAaR,UAAb,CAAyB5qF,GAAzB,CAAN,CAEA,MAAM4wB,KAAK,CAAG,IAAd,CAEA,MAAMkK,MAAM,CAAG7wC,KAAK,CAAC0wC,GAAN,CAAW36B,GAAX,CAAf,CAEA,GAAK86B,MAAM,GAAK3qC,SAAhB,CAA4B,CAE3BygC,KAAK,CAACw6D,OAAN,CAAcX,SAAd,CAAyBzqF,GAAzB,EAEAmsF,UAAU,CAAE,UAAY,CAEvB,GAAKnC,MAAL,CAAcA,MAAM,CAAElvD,MAAF,CAAN,CAEdlK,KAAK,CAACw6D,OAAN,CAAcV,OAAd,CAAuB1qF,GAAvB,EAEA,CANS,CAMP,CANO,CAAV,CAQA,OAAO86B,MAAP,CAEA,CAED,MAAM81D,YAAY,CAAG,EAArB,CACAA,YAAY,CAACpE,WAAb,CAA6B,KAAKnB,WAAL,GAAqB,WAAvB,CAAuC,aAAvC,CAAuD,SAAlF,CACAuF,YAAY,CAACtE,OAAb,CAAuB,KAAKd,aAA5B,CAEAiB,KAAK,CAAEzsF,GAAF,CAAO4wF,YAAP,CAAL,CAA2BlE,IAA3B,CAAiC,SAAWmE,GAAX,CAAiB,CAEjD,OAAOA,GAAG,CAAC5C,IAAJ,EAAP,CAEA,CAJD,EAIIvB,IAJJ,CAIU,SAAWuB,IAAX,CAAkB,CAE3B,OAAOyC,iBAAiB,CAAEzC,IAAF,CAAQ5vF,MAAM,CAACkxB,MAAP,CAAeqB,KAAK,CAACpuB,OAArB,CAA8B,CAAEsuF,oBAAoB,CAAE,MAAxB,CAA9B,CAAR,CAAxB,CAEA,CARD,EAQIpE,IARJ,CAQU,SAAWqE,WAAX,CAAyB,CAElC9mG,KAAK,CAAC2J,GAAN,CAAWoM,GAAX,CAAgB+wF,WAAhB,EAEA,GAAK/G,MAAL,CAAcA,MAAM,CAAE+G,WAAF,CAAN,CAEdngE,KAAK,CAACw6D,OAAN,CAAcV,OAAd,CAAuB1qF,GAAvB,EAEA,CAhBD,EAgBIuuF,KAhBJ,CAgBW,SAAWz5F,CAAX,CAAe,CAEzB,GAAKo1F,OAAL,CAAeA,OAAO,CAAEp1F,CAAF,CAAP,CAEf87B,KAAK,CAACw6D,OAAN,CAAcT,SAAd,CAAyB3qF,GAAzB,EACA4wB,KAAK,CAACw6D,OAAN,CAAcV,OAAd,CAAuB1qF,GAAvB,EAEA,CAvBD,EAyBA4wB,KAAK,CAACw6D,OAAN,CAAcX,SAAd,CAAyBzqF,GAAzB,EAEA,CAzFqC,CA6FvCjS,iBAAiB,CAAC0J,SAAlB,CAA4Bu5F,mBAA5B,CAAkD,IAAlD,CAEA,IAAIhjG,QAAJ,CAEA,MAAMC,YAAY,CAAG,CAEpBqP,UAAU,CAAE,UAAY,CAEvB,GAAKtP,QAAQ,GAAKmC,SAAlB,CAA8B,CAE7BnC,QAAQ,CAAG,IAAM24E,MAAM,CAAC14E,YAAP,EAAuB04E,MAAM,CAACsqB,kBAApC,GAAX,CAEA,CAED,OAAOjjG,QAAP,CAEA,CAZmB,CAcpBqrC,UAAU,CAAE,SAAWnnC,KAAX,CAAmB,CAE9BlE,QAAQ,CAAGkE,KAAX,CAEA,CAlBmB,CAArB,CAsBA,MAAMhE,WAAN,SAA0B9D,MAAO,CAEhC0I,WAAW,CAAEs4F,OAAF,CAAY,CAEtB,MAAOA,OAAP,EAEA,CAEDK,IAAI,CAAEzrF,GAAF,CAAOgqF,MAAP,CAAeC,UAAf,CAA2BC,OAA3B,CAAqC,CAExC,MAAMt5D,KAAK,CAAG,IAAd,CAEA,MAAMo6D,MAAM,CAAG,IAAI1gG,UAAJ,CAAgB,KAAK8gG,OAArB,CAAf,CACAJ,MAAM,CAACwD,eAAP,CAAwB,aAAxB,EACAxD,MAAM,CAACgB,OAAP,CAAgB,KAAKvzC,IAArB,EACAuyC,MAAM,CAACkB,gBAAP,CAAyB,KAAKV,aAA9B,EACAR,MAAM,CAACe,kBAAP,CAA2B,KAAKT,eAAhC,EACAN,MAAM,CAACS,IAAP,CAAazrF,GAAb,CAAkB,SAAW65B,MAAX,CAAoB,CAErC,GAAI;EAGH;EACA,MAAMq3D,UAAU,CAAGr3D,MAAM,CAAC7oC,KAAP,CAAc,CAAd,CAAnB,CAEA,MAAMqM,OAAO,CAAGpP,YAAY,CAACqP,UAAb,EAAhB,CACAD,OAAO,CAAC8zF,eAAR,CAAyBD,UAAzB,CAAqC,SAAWE,WAAX,CAAyB,CAE7DpH,MAAM,CAAEoH,WAAF,CAAN,CAEA,CAJD,EAMA,CAAC,MAAQt8F,CAAR,CAAY,CAEb,GAAKo1F,OAAL,CAAe,CAEdA,OAAO,CAAEp1F,CAAF,CAAP,CAEA,CAJD,KAIO,CAENhB,OAAO,CAAC8D,KAAR,CAAe9C,CAAf,EAEA,CAED87B,KAAK,CAACw6D,OAAN,CAAcT,SAAd,CAAyB3qF,GAAzB,EAEA,CAED,CA/BD,CA+BGiqF,UA/BH,CA+BeC,OA/Bf,EAiCA,CAlD+B,CAsDjC,MAAM/7F,oBAAN,SAAmCR,UAAW,CAE7CmF,WAAW,CAAEyvC,QAAF,CAAYC,WAAZ,CAAyB0hB,SAAS,CAAG,CAArC,CAAyC,CAEnD,MAAO/zD,SAAP,CAAkB+zD,SAAlB,EAEA,MAAMv7B,MAAM,CAAG,IAAIr4C,KAAJ,GAAY2iB,GAAZ,CAAiBsvC,QAAjB,CAAf,CACA,MAAM3Z,MAAM,CAAG,IAAIt4C,KAAJ,GAAY2iB,GAAZ,CAAiBuvC,WAAjB,CAAf,CAEA,MAAM6uD,GAAG,CAAG,IAAI/lH,OAAJ,CAAaq9C,MAAM,CAACvtB,CAApB,CAAuButB,MAAM,CAACnuB,CAA9B,CAAiCmuB,MAAM,CAACv0B,CAAxC,CAAZ,CACA,MAAMk9F,MAAM,CAAG,IAAIhmH,OAAJ,CAAas9C,MAAM,CAACxtB,CAApB,CAAuBwtB,MAAM,CAACpuB,CAA9B,CAAiCouB,MAAM,CAACx0B,CAAxC,CAAf,CAEA;EACA,MAAM29E,EAAE,CAAG1gF,IAAI,CAACsE,IAAL,CAAWtE,IAAI,CAACC,EAAhB,CAAX,CACA,MAAMuU,EAAE,CAAGksE,EAAE,CAAG1gF,IAAI,CAACsE,IAAL,CAAW,IAAX,CAAhB,CAEA,KAAK0uD,EAAL,CAAQC,YAAR,CAAsB,CAAtB,EAA0B5wD,IAA1B,CAAgC29F,GAAhC,EAAsCz9F,GAAtC,CAA2C09F,MAA3C,EAAoD58F,cAApD,CAAoEq9E,EAApE,EACA,KAAK1tB,EAAL,CAAQC,YAAR,CAAsB,CAAtB,EAA0B5wD,IAA1B,CAAgC29F,GAAhC,EAAsC/8F,GAAtC,CAA2Cg9F,MAA3C,EAAoD58F,cAApD,CAAoEmR,EAApE,EAEA,CAnB4C,CAuB9C1X,oBAAoB,CAACsJ,SAArB,CAA+B85F,sBAA/B,CAAwD,IAAxD,CAEA,MAAMnjG,iBAAN,SAAgCT,UAAW,CAE1CmF,WAAW,CAAE4vB,KAAF,CAASwhC,SAAS,CAAG,CAArB,CAAyB,CAEnC,MAAO/zD,SAAP,CAAkB+zD,SAAlB,EAEA,MAAMv7B,MAAM,CAAG,IAAIr4C,KAAJ,GAAY2iB,GAAZ,CAAiByvB,KAAjB,CAAf,CAEA;EACA,KAAK2hC,EAAL,CAAQC,YAAR,CAAsB,CAAtB,EAA0BrxD,GAA1B,CAA+B01B,MAAM,CAACvtB,CAAtC,CAAyCutB,MAAM,CAACnuB,CAAhD,CAAmDmuB,MAAM,CAACv0B,CAA1D,EAA8DM,cAA9D,CAA8E,EAAIrD,IAAI,CAACsE,IAAL,CAAWtE,IAAI,CAACC,EAAhB,CAAlF,EAEA,CAXyC,CAe3ClD,iBAAiB,CAACqJ,SAAlB,CAA4B+5F,mBAA5B,CAAkD,IAAlD,CA2SA,MAAMljG,KAAN,SAAoBxf,QAAS,CAE5BgkB,WAAW,CAAE7C,QAAF,CAAa,CAEvB,QAEA,KAAKD,IAAL,CAAY,OAAZ,CAEA,KAAKC,QAAL,CAAgBA,QAAhB,CACA,KAAKoN,OAAL,CAAepN,QAAQ,CAACoN,OAAxB,CAEA,KAAKo0F,IAAL,CAAY,KAAKp0F,OAAL,CAAaq0F,UAAb,EAAZ,CACA,KAAKD,IAAL,CAAUE,OAAV,CAAmB1hG,QAAQ,CAAC2hG,QAAT,EAAnB,EAEA,KAAKC,QAAL,CAAgB,KAAhB,CAEA,KAAKh4D,MAAL,CAAc,IAAd,CACA,KAAKi4D,MAAL,CAAc,CAAd,CACA,KAAKC,IAAL,CAAY,KAAZ,CACA,KAAKC,SAAL,CAAiB,CAAjB,CACA,KAAKC,OAAL,CAAe,CAAf,CACA,KAAKr7F,MAAL,CAAc,CAAd,CACA,KAAKkxF,QAAL,CAAgB33F,SAAhB,CACA,KAAK+hG,YAAL,CAAoB,CAApB,CACA,KAAKC,SAAL,CAAiB,KAAjB,CACA,KAAKC,kBAAL,CAA0B,IAA1B,CACA,KAAKhzF,MAAL,CAAc,IAAd,CACA,KAAKizF,UAAL,CAAkB,OAAlB,CAEA,KAAKC,UAAL,CAAkB,CAAlB,CACA,KAAKC,SAAL,CAAiB,CAAjB,CACA,KAAKC,UAAL,CAAkB,KAAlB,CAEA,KAAKC,OAAL,CAAe,EAAf,CAEA,CAEDC,SAAS,EAAG,CAEX,YAAYjB,IAAZ,CAEA,CAEDkB,aAAa,CAAEC,SAAF,CAAc,CAE1B,KAAKR,kBAAL,CAA0B,KAA1B,CACA,KAAKC,UAAL,CAAkB,WAAlB,CACA,KAAKjzF,MAAL,CAAcwzF,SAAd,CACA,KAAKjB,OAAL,GAEA,WAAA,CAEA,CAEDkB,qBAAqB,CAAEC,YAAF,CAAiB,CAErC,KAAKV,kBAAL,CAA0B,KAA1B,CACA,KAAKC,UAAL,CAAkB,WAAlB,CACA,KAAKjzF,MAAL,CAAc,KAAK/B,OAAL,CAAa01F,wBAAb,CAAuCD,YAAvC,CAAd,CACA,KAAKnB,OAAL,GAEA,WAAA,CAEA,CAEDqB,oBAAoB,CAAEC,WAAF,CAAgB,CAEnC,KAAKb,kBAAL,CAA0B,KAA1B,CACA,KAAKC,UAAL,CAAkB,iBAAlB,CACA,KAAKjzF,MAAL,CAAc,KAAK/B,OAAL,CAAa61F,uBAAb,CAAsCD,WAAtC,CAAd,CACA,KAAKtB,OAAL,GAEA,WAAA,CAEA,CAEDwB,SAAS,CAAE/B,WAAF,CAAgB,CAExB,KAAKv3D,MAAL,CAAcu3D,WAAd,CACA,KAAKiB,UAAL,CAAkB,QAAlB,CAEA,GAAK,KAAKR,QAAV,CAAqB,KAAKuB,IAAL,GAErB,WAAA,CAEA,CAEDA,IAAI,CAAEC,KAAK,CAAG,CAAV,CAAc,CAEjB,GAAK,KAAKlB,SAAL,GAAmB,IAAxB,CAA+B,CAE9Br+F,OAAO,CAACC,IAAR,CAAc,wCAAd,EACA,OAEA,CAED,GAAK,KAAKq+F,kBAAL,GAA4B,KAAjC,CAAyC,CAExCt+F,OAAO,CAACC,IAAR,CAAc,kDAAd,EACA,OAEA,CAED,KAAKu+F,UAAL,CAAkB,KAAKj1F,OAAL,CAAai2F,WAAb,CAA2BD,KAA7C,CAEA,MAAMj0F,MAAM,CAAG,KAAK/B,OAAL,CAAak2F,kBAAb,EAAf,CACAn0F,MAAM,CAACy6B,MAAP,CAAgB,KAAKA,MAArB,CACAz6B,MAAM,CAAC2yF,IAAP,CAAc,KAAKA,IAAnB,CACA3yF,MAAM,CAAC4yF,SAAP,CAAmB,KAAKA,SAAxB,CACA5yF,MAAM,CAAC6yF,OAAP,CAAiB,KAAKA,OAAtB,CACA7yF,MAAM,CAACo0F,OAAP,CAAiB,KAAKC,OAAL,CAAaloB,IAAb,CAAmB,IAAnB,CAAjB,CACAnsE,MAAM,CAAC4rB,KAAP,CAAc,KAAKsnE,UAAnB,CAA+B,KAAKC,SAAL,CAAiB,KAAK37F,MAArD,CAA6D,KAAKkxF,QAAlE,EAEA,KAAKqK,SAAL,CAAiB,IAAjB,CAEA,KAAK/yF,MAAL,CAAcA,MAAd,CAEA,KAAKs0F,SAAL,CAAgB,KAAK5B,MAArB,EACA,KAAK6B,eAAL,CAAsB,KAAKzB,YAA3B,EAEA,YAAYP,OAAL,EAAP,CAEA,CAEDiC,KAAK,EAAG,CAEP,GAAK,KAAKxB,kBAAL,GAA4B,KAAjC,CAAyC,CAExCt+F,OAAO,CAACC,IAAR,CAAc,kDAAd,EACA,OAEA,CAED,GAAK,KAAKo+F,SAAL,GAAmB,IAAxB,CAA+B;EAI9B,KAAKI,SAAL,EAAkBlhG,IAAI,CAACe,GAAL,CAAU,KAAKiL,OAAL,CAAai2F,WAAb,CAA2B,KAAKhB,UAA1C,CAAsD,CAAtD,EAA4D,KAAKJ,YAAnF,CAEA,GAAK,KAAKH,IAAL,GAAc,IAAnB,CAA0B;EAIzB,KAAKQ,SAAL,CAAiB,KAAKA,SAAL,EAAmB,KAAKzK,QAAL,EAAiB,KAAKjuD,MAAL,CAAYiuD,QAAhD,CAAjB,CAEA,CAED,KAAK1oF,MAAL,CAAY85B,IAAZ,GACA,KAAK95B,MAAL,CAAYo0F,OAAZ,CAAsB,IAAtB,CAEA,KAAKrB,SAAL,CAAiB,KAAjB,CAEA,CAED,WAAA,CAEA,CAEDj5D,IAAI,EAAG,CAEN,GAAK,KAAKk5D,kBAAL,GAA4B,KAAjC,CAAyC,CAExCt+F,OAAO,CAACC,IAAR,CAAc,kDAAd,EACA,OAEA,CAED,KAAKw+F,SAAL,CAAiB,CAAjB,CAEA,KAAKnzF,MAAL,CAAY85B,IAAZ,GACA,KAAK95B,MAAL,CAAYo0F,OAAZ,CAAsB,IAAtB,CACA,KAAKrB,SAAL,CAAiB,KAAjB,CAEA,WAAA,CAEA,CAEDR,OAAO,EAAG,CAET,GAAK,KAAKc,OAAL,CAAathG,MAAb,CAAsB,CAA3B,CAA+B,CAE9B,KAAKiO,MAAL,CAAYuyF,OAAZ,CAAqB,KAAKc,OAAL,CAAc,CAAd,CAArB,EAEA,IAAM,IAAIxhG,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG,KAAKuhG,OAAL,CAAathG,MAAlC,CAA0CF,CAAC,CAAGC,CAA9C,CAAiDD,CAAC,EAAlD,CAAwD,CAEvD,KAAKwhG,OAAL,CAAcxhG,CAAC,CAAG,CAAlB,EAAsB0gG,OAAtB,CAA+B,KAAKc,OAAL,CAAcxhG,CAAd,CAA/B,EAEA,CAED,KAAKwhG,OAAL,CAAc,KAAKA,OAAL,CAAathG,MAAb,CAAsB,CAApC,EAAwCwgG,OAAxC,CAAiD,KAAKe,SAAL,EAAjD,EAEA,CAZD,KAYO,CAEN,KAAKtzF,MAAL,CAAYuyF,OAAZ,CAAqB,KAAKe,SAAL,EAArB,EAEA,CAED,KAAKF,UAAL,CAAkB,IAAlB,CAEA,WAAA,CAEA,CAEDv7B,UAAU,EAAG,CAEZ,GAAK,KAAKw7B,OAAL,CAAathG,MAAb,CAAsB,CAA3B,CAA+B,CAE9B,KAAKiO,MAAL,CAAY63D,UAAZ,CAAwB,KAAKw7B,OAAL,CAAc,CAAd,CAAxB,EAEA,IAAM,IAAIxhG,CAAC,CAAG,CAAR,CAAWC,CAAC,CAAG,KAAKuhG,OAAL,CAAathG,MAAlC,CAA0CF,CAAC,CAAGC,CAA9C,CAAiDD,CAAC,EAAlD,CAAwD,CAEvD,KAAKwhG,OAAL,CAAcxhG,CAAC,CAAG,CAAlB,EAAsBgmE,UAAtB,CAAkC,KAAKw7B,OAAL,CAAcxhG,CAAd,CAAlC,EAEA,CAED,KAAKwhG,OAAL,CAAc,KAAKA,OAAL,CAAathG,MAAb,CAAsB,CAApC,EAAwC8lE,UAAxC,CAAoD,KAAKy7B,SAAL,EAApD,EAEA,CAZD,KAYO,CAEN,KAAKtzF,MAAL,CAAY63D,UAAZ,CAAwB,KAAKy7B,SAAL,EAAxB,EAEA,CAED,KAAKF,UAAL,CAAkB,KAAlB,CAEA,WAAA,CAEA,CAEDqB,UAAU,EAAG,CAEZ,YAAYpB,OAAZ,CAEA,CAEDqB,UAAU,CAAE5hG,KAAF,CAAU,CAEnB,GAAK,CAAEA,KAAP,CAAeA,KAAK,CAAG,EAAR,CAEf,GAAK,KAAKsgG,UAAL,GAAoB,IAAzB,CAAgC,CAE/B,KAAKv7B,UAAL,GACA,KAAKw7B,OAAL,CAAevgG,KAAK,CAAClB,KAAN,EAAf,CACA,KAAK2gG,OAAL,GAEA,CAND,KAMO,CAEN,KAAKc,OAAL,CAAevgG,KAAK,CAAClB,KAAN,EAAf,CAEA,CAED,WAAA,CAEA,CAED0iG,SAAS,CAAExhG,KAAF,CAAU,CAElB,KAAK4/F,MAAL,CAAc5/F,KAAd,CAEA,GAAK,KAAKkN,MAAL,CAAY0yF,MAAZ,GAAuB3hG,SAA5B,CAAwC,OAAQ;EAEhD,GAAK,KAAKgiG,SAAL,GAAmB,IAAxB,CAA+B,CAE9B,KAAK/yF,MAAL,CAAY0yF,MAAZ,CAAmBiC,eAAnB,CAAoC,KAAKjC,MAAzC,CAAiD,KAAKz0F,OAAL,CAAai2F,WAA9D,CAA2E,IAA3E,EAEA,CAED,WAAA,CAEA,CAEDU,SAAS,EAAG,CAEX,YAAYlC,MAAZ,CAEA,CAEDmC,SAAS,EAAG,CAEX,YAAYJ,UAAL,GAAmB,CAAnB,CAAP,CAEA,CAEDK,SAAS,CAAEn5C,MAAF,CAAW,CAEnB,YAAY+4C,UAAL,CAAiB/4C,MAAM,CAAG,CAAEA,MAAF,CAAH,CAAgB,EAAvC,CAAP,CAEA,CAED44C,eAAe,CAAEzhG,KAAF,CAAU,CAExB,GAAK,KAAKkgG,kBAAL,GAA4B,KAAjC,CAAyC,CAExCt+F,OAAO,CAACC,IAAR,CAAc,kDAAd,EACA,OAEA,CAED,KAAKm+F,YAAL,CAAoBhgG,KAApB,CAEA,GAAK,KAAKigG,SAAL,GAAmB,IAAxB,CAA+B,CAE9B,KAAK/yF,MAAL,CAAY8yF,YAAZ,CAAyB6B,eAAzB,CAA0C,KAAK7B,YAA/C,CAA6D,KAAK70F,OAAL,CAAai2F,WAA1E,CAAuF,IAAvF,EAEA,CAED,WAAA,CAEA,CAEDa,eAAe,EAAG,CAEjB,YAAYjC,YAAZ,CAEA,CAEDuB,OAAO,EAAG,CAET,KAAKtB,SAAL,CAAiB,KAAjB,CAEA,CAEDiC,OAAO,EAAG,CAET,GAAK,KAAKhC,kBAAL,GAA4B,KAAjC,CAAyC,CAExCt+F,OAAO,CAACC,IAAR,CAAc,kDAAd,EACA,YAAA,CAEA,CAED,YAAYg+F,IAAZ,CAEA,CAEDsC,OAAO,CAAEniG,KAAF,CAAU,CAEhB,GAAK,KAAKkgG,kBAAL,GAA4B,KAAjC,CAAyC,CAExCt+F,OAAO,CAACC,IAAR,CAAc,kDAAd,EACA,OAEA,CAED,KAAKg+F,IAAL,CAAY7/F,KAAZ,CAEA,GAAK,KAAKigG,SAAL,GAAmB,IAAxB,CAA+B,CAE9B,KAAK/yF,MAAL,CAAY2yF,IAAZ,CAAmB,KAAKA,IAAxB,CAEA,CAED,WAAA,CAEA,CAEDuC,YAAY,CAAEpiG,KAAF,CAAU,CAErB,KAAK8/F,SAAL,CAAiB9/F,KAAjB,CAEA,WAAA,CAEA,CAEDqiG,UAAU,CAAEriG,KAAF,CAAU,CAEnB,KAAK+/F,OAAL,CAAe//F,KAAf,CAEA,WAAA,CAEA,CAEDsiG,SAAS,EAAG,CAEX,YAAY/C,IAAL,CAAUA,IAAV,CAAev/F,KAAtB,CAEA,CAEDuiG,SAAS,CAAEviG,KAAF,CAAU,CAElB,KAAKu/F,IAAL,CAAUA,IAAV,CAAesC,eAAf,CAAgC7hG,KAAhC,CAAuC,KAAKmL,OAAL,CAAai2F,WAApD,CAAiE,IAAjE,EAEA,WAAA,CAEA,CAhY2B,CAwiB7B,MAAM/kG,aAAc,CAEnBuE,WAAW,CAAE4hG,OAAF,CAAW7K,QAAX,CAAqBxI,SAArB,CAAiC,CAE3C,KAAKqT,OAAL,CAAeA,OAAf,CACA,KAAKrT,SAAL,CAAiBA,SAAjB,CAEA,IAAIsT,WAAJ,CACCC,mBADD,CAECC,WAFD,CAIA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,OAAShL,QAAT,EAEC,IAAK,YAAL,CACC8K,WAAW,CAAG,KAAKG,MAAnB,CACAF,mBAAmB,CAAG,KAAKG,cAA3B,CACAF,WAAW,CAAG,KAAKG,8BAAnB,CAEA,KAAKn7D,MAAL,CAAc,IAAIG,YAAJ,CAAkBqnD,SAAS,CAAG,CAA9B,CAAd,CACA,KAAK4T,UAAL,CAAkB,CAAlB,CACA,MAED,IAAK,QAAL,CACA,IAAK,MAAL,CACCN,WAAW,CAAG,KAAKO,OAAnB,CAEA;EACA;EACAN,mBAAmB,CAAG,KAAKM,OAA3B,CAEAL,WAAW,CAAG,KAAKM,yBAAnB,CAEA,KAAKt7D,MAAL,CAAc,IAAI55B,KAAJ,CAAWohF,SAAS,CAAG,CAAvB,CAAd,CACA,MAED,QACCsT,WAAW,CAAG,KAAKS,KAAnB,CACAR,mBAAmB,CAAG,KAAKS,aAA3B,CACAR,WAAW,CAAG,KAAKS,2BAAnB,CAEA,KAAKz7D,MAAL,CAAc,IAAIG,YAAJ,CAAkBqnD,SAAS,CAAG,CAA9B,CAAd,CA7BF,CAiCA,KAAKkU,gBAAL,CAAwBZ,WAAxB,CACA,KAAKa,wBAAL,CAAgCZ,mBAAhC,CACA,KAAKa,YAAL,CAAoBZ,WAApB,CACA,KAAKa,UAAL,CAAkB,CAAlB,CACA,KAAKC,SAAL,CAAiB,CAAjB,CAEA,KAAKC,gBAAL,CAAwB,CAAxB,CACA,KAAKC,wBAAL,CAAgC,CAAhC,CAEA,KAAKC,QAAL,CAAgB,CAAhB,CACA,KAAKC,cAAL,CAAsB,CAAtB,CAEA,CAED;EACAC,UAAU,CAAEC,SAAF,CAAahkD,MAAb,CAAsB;EAG/B;EAEA,MAAMpY,MAAM,CAAG,KAAKA,MAApB,CACC7K,MAAM,CAAG,KAAKqyD,SADf,CAECzqF,MAAM,CAAGq/F,SAAS,CAAGjnE,MAAZ,CAAqBA,MAF/B,CAIA,IAAIknE,aAAa,CAAG,KAAKN,gBAAzB,CAEA,GAAKM,aAAa,GAAK,CAAvB,CAA2B;EAI1B,IAAM,IAAIjlG,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAK+9B,MAAvB,CAA+B,EAAG/9B,CAAlC,CAAsC,CAErC4oC,MAAM,CAAEjjC,MAAM,CAAG3F,CAAX,CAAN,CAAuB4oC,MAAM,CAAE5oC,CAAF,CAA7B,CAEA,CAEDilG,aAAa,CAAGjkD,MAAhB,CAEA,CAZD,KAYO;EAINikD,aAAa,EAAIjkD,MAAjB,CACA,MAAMkkD,GAAG,CAAGlkD,MAAM,CAAGikD,aAArB,CACA,KAAKX,gBAAL,CAAuB17D,MAAvB,CAA+BjjC,MAA/B,CAAuC,CAAvC,CAA0Cu/F,GAA1C,CAA+CnnE,MAA/C,EAEA,CAED,KAAK4mE,gBAAL,CAAwBM,aAAxB,CAEA,CAED;EACAE,kBAAkB,CAAEnkD,MAAF,CAAW,CAE5B,MAAMpY,MAAM,CAAG,KAAKA,MAApB,CACC7K,MAAM,CAAG,KAAKqyD,SADf,CAECzqF,MAAM,CAAGo4B,MAAM,CAAG,KAAK2mE,SAFxB,CAIA,GAAK,KAAKE,wBAAL,GAAkC,CAAvC,CAA2C;EAI1C,KAAKJ,YAAL,GAEA,CAED;EAEA,KAAKD,wBAAL,CAA+B37D,MAA/B,CAAuCjjC,MAAvC,CAA+C,CAA/C,CAAkDq7C,MAAlD,CAA0DjjB,MAA1D,EACA,KAAK6mE,wBAAL,EAAiC5jD,MAAjC,CAEA,CAED;EACAkd,KAAK,CAAE8mC,SAAF,CAAc,CAElB,MAAMjnE,MAAM,CAAG,KAAKqyD,SAApB,CACCxnD,MAAM,CAAG,KAAKA,MADf,CAECjjC,MAAM,CAAGq/F,SAAS,CAAGjnE,MAAZ,CAAqBA,MAF/B,CAICijB,MAAM,CAAG,KAAK2jD,gBAJf,CAKCS,cAAc,CAAG,KAAKR,wBALvB,CAOCnB,OAAO,CAAG,KAAKA,OAPhB,CASA,KAAKkB,gBAAL,CAAwB,CAAxB,CACA,KAAKC,wBAAL,CAAgC,CAAhC,CAEA,GAAK5jD,MAAM,CAAG,CAAd,CAAkB;EAIjB,MAAMqkD,mBAAmB,CAAGtnE,MAAM,CAAG,KAAK0mE,UAA1C,CAEA,KAAKH,gBAAL,CACC17D,MADD,CACSjjC,MADT,CACiB0/F,mBADjB,CACsC,EAAIrkD,MAD1C,CACkDjjB,MADlD,EAGA,CAED,GAAKqnE,cAAc,CAAG,CAAtB,CAA0B;EAIzB,KAAKb,wBAAL,CAA+B37D,MAA/B,CAAuCjjC,MAAvC,CAA+C,KAAK++F,SAAL,CAAiB3mE,MAAhE,CAAwE,CAAxE,CAA2EA,MAA3E,EAEA,CAED,IAAM,IAAI/9B,CAAC,CAAG+9B,MAAR,CAAgBl6B,CAAC,CAAGk6B,MAAM,CAAGA,MAAnC,CAA2C/9B,CAAC,GAAK6D,CAAjD,CAAoD,EAAG7D,CAAvD,CAA2D,CAE1D,GAAK4oC,MAAM,CAAE5oC,CAAF,CAAN,GAAgB4oC,MAAM,CAAE5oC,CAAC,CAAG+9B,MAAN,CAA3B,CAA4C;EAI3C0lE,OAAO,CAAC/+C,QAAR,CAAkB9b,MAAlB,CAA0BjjC,MAA1B,EACA,MAEA,CAED,CAED,CAED;EACA2/F,iBAAiB,EAAG,CAEnB,MAAM7B,OAAO,CAAG,KAAKA,OAArB,CAEA,MAAM76D,MAAM,CAAG,KAAKA,MAApB,CACC7K,MAAM,CAAG,KAAKqyD,SADf,CAGCiV,mBAAmB,CAAGtnE,MAAM,CAAG,KAAK0mE,UAHrC,CAKAhB,OAAO,CAAC8B,QAAR,CAAkB38D,MAAlB,CAA0By8D,mBAA1B,EAEA;EACA,IAAM,IAAIrlG,CAAC,CAAG+9B,MAAR,CAAgBl6B,CAAC,CAAGwhG,mBAA1B,CAA+CrlG,CAAC,GAAK6D,CAArD,CAAwD,EAAG7D,CAA3D,CAA+D,CAE9D4oC,MAAM,CAAE5oC,CAAF,CAAN,CAAc4oC,MAAM,CAAEy8D,mBAAmB,CAAKrlG,CAAC,CAAG+9B,MAA9B,CAApB,CAEA,CAED;EACA,KAAKymE,YAAL,GAEA,KAAKG,gBAAL,CAAwB,CAAxB,CACA,KAAKC,wBAAL,CAAgC,CAAhC,CAEA,CAED;EACAY,oBAAoB,EAAG,CAEtB,MAAMH,mBAAmB,CAAG,KAAKjV,SAAL,CAAiB,CAA7C,CACA,KAAKqT,OAAL,CAAa/+C,QAAb,CAAuB,KAAK9b,MAA5B,CAAoCy8D,mBAApC,EAEA,CAEDhB,2BAA2B,EAAG,CAE7B,MAAM3S,UAAU,CAAG,KAAKgT,SAAL,CAAiB,KAAKtU,SAAzC,CACA,MAAMuB,QAAQ,CAAGD,UAAU,CAAG,KAAKtB,SAAnC,CAEA,IAAM,IAAIpwF,CAAC,CAAG0xF,UAAd,CAA0B1xF,CAAC,CAAG2xF,QAA9B,CAAwC3xF,CAAC,EAAzC,CAA+C,CAE9C,KAAK4oC,MAAL,CAAa5oC,CAAb,EAAmB,CAAnB,CAEA,CAED,CAED+jG,8BAA8B,EAAG,CAEhC,KAAKM,2BAAL,GACA,KAAKz7D,MAAL,CAAa,KAAK87D,SAAL,CAAiB,KAAKtU,SAAtB,CAAkC,CAA/C,EAAqD,CAArD,CAEA,CAED8T,yBAAyB,EAAG,CAE3B,MAAMxS,UAAU,CAAG,KAAK+S,UAAL,CAAkB,KAAKrU,SAA1C,CACA,MAAMqV,WAAW,CAAG,KAAKf,SAAL,CAAiB,KAAKtU,SAA1C,CAEA,IAAM,IAAIpwF,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,KAAKowF,SAA1B,CAAqCpwF,CAAC,EAAtC,CAA4C,CAE3C,KAAK4oC,MAAL,CAAa68D,WAAW,CAAGzlG,CAA3B,EAAiC,KAAK4oC,MAAL,CAAa8oD,UAAU,CAAG1xF,CAA1B,CAAjC,CAEA,CAED,CAGD;EAEAikG,OAAO,CAAEr7D,MAAF,CAAU51B,SAAV,CAAqBw8E,SAArB,CAAgChuF,CAAhC,CAAmCu8B,MAAnC,CAA4C,CAElD,GAAKv8B,CAAC,EAAI,GAAV,CAAgB,CAEf,IAAM,IAAIxB,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAK+9B,MAAvB,CAA+B,EAAG/9B,CAAlC,CAAsC,CAErC4oC,MAAM,CAAE51B,SAAS,CAAGhT,CAAd,CAAN,CAA0B4oC,MAAM,CAAE4mD,SAAS,CAAGxvF,CAAd,CAAhC,CAEA,CAED,CAED,CAED6jG,MAAM,CAAEj7D,MAAF,CAAU51B,SAAV,CAAqBw8E,SAArB,CAAgChuF,CAAhC,CAAoC,CAEzCpnB,UAAU,CAAC04B,SAAX,CAAsB81B,MAAtB,CAA8B51B,SAA9B,CAAyC41B,MAAzC,CAAiD51B,SAAjD,CAA4D41B,MAA5D,CAAoE4mD,SAApE,CAA+EhuF,CAA/E,EAEA,CAEDsiG,cAAc,CAAEl7D,MAAF,CAAU51B,SAAV,CAAqBw8E,SAArB,CAAgChuF,CAAhC,CAAmCu8B,MAAnC,CAA4C,CAEzD,MAAM2nE,UAAU,CAAG,KAAK1B,UAAL,CAAkBjmE,MAArC,CAEA;EACA3jD,UAAU,CAAC+5B,uBAAX,CAAoCy0B,MAApC,CAA4C88D,UAA5C,CAAwD98D,MAAxD,CAAgE51B,SAAhE,CAA2E41B,MAA3E,CAAmF4mD,SAAnF,EAEA;EACAp1G,UAAU,CAAC04B,SAAX,CAAsB81B,MAAtB,CAA8B51B,SAA9B,CAAyC41B,MAAzC,CAAiD51B,SAAjD,CAA4D41B,MAA5D,CAAoE88D,UAApE,CAAgFlkG,CAAhF,EAEA,CAED2iG,KAAK,CAAEv7D,MAAF,CAAU51B,SAAV,CAAqBw8E,SAArB,CAAgChuF,CAAhC,CAAmCu8B,MAAnC,CAA4C,CAEhD,MAAM96B,CAAC,CAAG,EAAIzB,CAAd,CAEA,IAAM,IAAIxB,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAK+9B,MAAvB,CAA+B,EAAG/9B,CAAlC,CAAsC,CAErC,MAAM2d,CAAC,CAAG3K,SAAS,CAAGhT,CAAtB,CAEA4oC,MAAM,CAAEjrB,CAAF,CAAN,CAAcirB,MAAM,CAAEjrB,CAAF,CAAN,CAAc1a,CAAd,CAAkB2lC,MAAM,CAAE4mD,SAAS,CAAGxvF,CAAd,CAAN,CAA0BwB,CAA1D,CAEA,CAED,CAED4iG,aAAa,CAAEx7D,MAAF,CAAU51B,SAAV,CAAqBw8E,SAArB,CAAgChuF,CAAhC,CAAmCu8B,MAAnC,CAA4C,CAExD,IAAM,IAAI/9B,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAK+9B,MAAvB,CAA+B,EAAG/9B,CAAlC,CAAsC,CAErC,MAAM2d,CAAC,CAAG3K,SAAS,CAAGhT,CAAtB,CAEA4oC,MAAM,CAAEjrB,CAAF,CAAN,CAAcirB,MAAM,CAAEjrB,CAAF,CAAN,CAAcirB,MAAM,CAAE4mD,SAAS,CAAGxvF,CAAd,CAAN,CAA0BwB,CAAtD,CAEA,CAED,CAtTkB,CA0TpB;EACA,MAAMjE,kBAAkB,CAAG,eAA3B,CACA,MAAMC,WAAW,CAAG,IAAImoG,MAAJ,CAAY,IAAMpoG,kBAAN,CAA2B,GAAvC,CAA4C,GAA5C,CAApB,CAEA;EACA;EACA;EACA,MAAME,SAAS,CAAG,KAAOF,kBAAP,CAA4B,GAA9C,CACA,MAAMG,cAAc,CAAG,KAAOH,kBAAkB,CAAC0sD,OAAnB,CAA4B,KAA5B,CAAmC,EAAnC,CAAP,CAAiD,GAAxE,CAEA;EACA;EACA,MAAMtsD,YAAY,CAAG,kBAAkBwQ,MAAlB,CAAyB87C,OAAzB,CAAkC,IAAlC,CAAwCxsD,SAAxC,CAArB,CAEA;EACA,MAAMG,OAAO,CAAG,WAAWuQ,MAAX,CAAkB87C,OAAlB,CAA2B,MAA3B,CAAmCvsD,cAAnC,CAAhB,CAEA;EACA;EACA,MAAMG,SAAS,CAAG,4BAA4BsQ,MAA5B,CAAmC87C,OAAnC,CAA4C,IAA5C,CAAkDxsD,SAAlD,CAAlB,CAEA;EACA;EACA,MAAMK,WAAW,CAAG,uBAAuBqQ,MAAvB,CAA8B87C,OAA9B,CAAuC,IAAvC,CAA6CxsD,SAA7C,CAApB,CAEA,MAAMM,QAAQ,CAAG,IAAI4nG,MAAJ,CAAY,GAC1B,GAD0B,CAE1BhoG,YAF0B,CAG1BC,OAH0B,CAI1BC,SAJ0B,CAK1BC,WAL0B,CAM1B,GANc,CAAjB,CASA,MAAME,qBAAqB,CAAG,CAAE,UAAF,CAAc,WAAd,CAA2B,OAA3B,CAA9B,CAEA,MAAMC,SAAU,CAEf4D,WAAW,CAAE+jG,WAAF,CAAep+C,IAAf,CAAqBq+C,kBAArB,CAA0C,CAEpD,MAAMC,UAAU,CAAGD,kBAAkB,EAAI3nG,eAAe,CAAC6nG,cAAhB,CAAgCv+C,IAAhC,CAAzC,CAEA,KAAKw+C,YAAL,CAAoBJ,WAApB,CACA,KAAKK,SAAL,CAAiBL,WAAW,CAACM,UAAZ,CAAwB1+C,IAAxB,CAA8Bs+C,UAA9B,CAAjB,CAEA,CAEDP,QAAQ,CAAEzlG,KAAF,CAAS6F,MAAT,CAAkB,CAEzB,KAAK20E,IAAL,GAAa;EAEb,MAAM6rB,eAAe,CAAG,KAAKH,YAAL,CAAkBI,eAA1C,CACC3C,OAAO,CAAG,KAAKwC,SAAL,CAAgBE,eAAhB,CADX,CAGA;EACA,GAAK1C,OAAO,GAAKvkG,SAAjB,CAA6BukG,OAAO,CAAC8B,QAAR,CAAkBzlG,KAAlB,CAAyB6F,MAAzB,EAE7B,CAED++C,QAAQ,CAAE5kD,KAAF,CAAS6F,MAAT,CAAkB,CAEzB,MAAM0gG,QAAQ,CAAG,KAAKJ,SAAtB,CAEA,IAAM,IAAIjmG,CAAC,CAAG,KAAKgmG,YAAL,CAAkBI,eAA1B,CAA2ChlG,CAAC,CAAGilG,QAAQ,CAACnmG,MAA9D,CAAsEF,CAAC,GAAKoB,CAA5E,CAA+E,EAAGpB,CAAlF,CAAsF,CAErFqmG,QAAQ,CAAErmG,CAAF,CAAR,CAAc0kD,QAAd,CAAwB5kD,KAAxB,CAA+B6F,MAA/B,EAEA,CAED,CAED20E,IAAI,EAAG,CAEN,MAAM+rB,QAAQ,CAAG,KAAKJ,SAAtB,CAEA,IAAM,IAAIjmG,CAAC,CAAG,KAAKgmG,YAAL,CAAkBI,eAA1B,CAA2ChlG,CAAC,CAAGilG,QAAQ,CAACnmG,MAA9D,CAAsEF,CAAC,GAAKoB,CAA5E,CAA+E,EAAGpB,CAAlF,CAAsF,CAErFqmG,QAAQ,CAAErmG,CAAF,CAAR,CAAcs6E,IAAd,GAEA,CAED,CAEDgsB,MAAM,EAAG,CAER,MAAMD,QAAQ,CAAG,KAAKJ,SAAtB,CAEA,IAAM,IAAIjmG,CAAC,CAAG,KAAKgmG,YAAL,CAAkBI,eAA1B,CAA2ChlG,CAAC,CAAGilG,QAAQ,CAACnmG,MAA9D,CAAsEF,CAAC,GAAKoB,CAA5E,CAA+E,EAAGpB,CAAlF,CAAsF,CAErFqmG,QAAQ,CAAErmG,CAAF,CAAR,CAAcsmG,MAAd,GAEA,CAED,CAzDc,CA6DhB;EACA;EACA;EACA;EACA;EACA,MAAMpoG,eAAgB,CAErB2D,WAAW,CAAE0kG,QAAF,CAAY/+C,IAAZ,CAAkBs+C,UAAlB,CAA+B,CAEzC,KAAKt+C,IAAL,CAAYA,IAAZ,CACA,KAAKs+C,UAAL,CAAkBA,UAAU,EAAI5nG,eAAe,CAAC6nG,cAAhB,CAAgCv+C,IAAhC,CAAhC,CAEA,KAAKg/C,IAAL,CAAYtoG,eAAe,CAACuoG,QAAhB,CAA0BF,QAA1B,CAAoC,KAAKT,UAAL,CAAgBY,QAApD,GAAkEH,QAA9E,CAEA,KAAKA,QAAL,CAAgBA,QAAhB,CAEA;EACA,KAAKhB,QAAL,CAAgB,KAAKoB,iBAArB,CACA,KAAKjiD,QAAL,CAAgB,KAAKkiD,iBAArB,CAEA,CAGY,OAANC,MAAM,CAAEC,IAAF,CAAQt/C,IAAR,CAAcs+C,UAAd,CAA2B,CAEvC,GAAK,EAAIgB,IAAI,EAAIA,IAAI,CAACC,sBAAjB,CAAL,CAAiD,CAEhD,WAAW7oG,eAAJ,CAAqB4oG,IAArB,CAA2Bt/C,IAA3B,CAAiCs+C,UAAjC,CAAP,CAEA,CAJD,KAIO,CAEN,WAAW5nG,eAAe,CAACD,SAApB,CAA+B6oG,IAA/B,CAAqCt/C,IAArC,CAA2Cs+C,UAA3C,CAAP,CAEA,CAED,CAED;EACD;EACA;EACA;EACA;EACA;EACA,IACwB,OAAhBkB,gBAAgB,CAAE57F,IAAF,CAAS,CAE/B,OAAOA,IAAI,CAAC6+C,OAAL,CAAc,KAAd,CAAqB,GAArB,EAA2BA,OAA3B,CAAoCzsD,WAApC,CAAiD,EAAjD,CAAP,CAEA,CAEoB,OAAduoG,cAAc,CAAE9N,SAAF,CAAc,CAElC,MAAMgP,OAAO,CAAGlpG,QAAQ,CAACk4B,IAAT,CAAegiE,SAAf,CAAhB,CAEA,GAAK,CAAEgP,OAAP,CAAiB,CAEhB,UAAU3kG,KAAJ,CAAW,4CAA8C21F,SAAzD,CAAN,CAEA,CAED,MAAMiP,OAAO,CAAG;EAEfR,QAAQ,CAAEO,OAAO,CAAE,CAAF,CAFF,CAGfE,UAAU,CAAEF,OAAO,CAAE,CAAF,CAHJ,CAIfG,WAAW,CAAEH,OAAO,CAAE,CAAF,CAJL,CAKf9O,YAAY,CAAE8O,OAAO,CAAE,CAAF,CALN;EAMfI,aAAa,CAAEJ,OAAO,CAAE,CAAF,CANP,CAAhB,CASA,MAAMK,OAAO,CAAGJ,OAAO,CAACR,QAAR,EAAoBQ,OAAO,CAACR,QAAR,CAAiBlH,WAAjB,CAA8B,GAA9B,CAApC,CAEA,GAAK8H,OAAO,GAAKpoG,SAAZ,EAAyBooG,OAAO,GAAK,CAAE,CAA5C,CAAgD,CAE/C,MAAMH,UAAU,CAAGD,OAAO,CAACR,QAAR,CAAiBa,SAAjB,CAA4BD,OAAO,CAAG,CAAtC,CAAnB,CAEA;EACA;EACA;EACA;EACA,GAAKtpG,qBAAqB,CAACoB,OAAtB,CAA+B+nG,UAA/B,IAAgD,CAAE,CAAvD,CAA2D,CAE1DD,OAAO,CAACR,QAAR,CAAmBQ,OAAO,CAACR,QAAR,CAAiBa,SAAjB,CAA4B,CAA5B,CAA+BD,OAA/B,CAAnB,CACAJ,OAAO,CAACC,UAAR,CAAqBA,UAArB,CAEA,CAED,CAED,GAAKD,OAAO,CAAC/O,YAAR,GAAyB,IAAzB,EAAiC+O,OAAO,CAAC/O,YAAR,CAAqBj4F,MAArB,GAAgC,CAAtE,CAA0E,CAEzE,UAAUoC,KAAJ,CAAW,+DAAiE21F,SAA5E,CAAN,CAEA,CAED,OAAOiP,OAAP,CAEA,CAEc,OAART,QAAQ,CAAEK,IAAF,CAAQJ,QAAR,CAAmB,CAEjC,GAAK,CAAEA,QAAF,EAAcA,QAAQ,GAAK,EAA3B,EAAiCA,QAAQ,GAAK,GAA9C,EAAqDA,QAAQ,GAAK,CAAE,CAApE,EAAyEA,QAAQ,GAAKI,IAAI,CAAC17F,IAA3F,EAAmGs7F,QAAQ,GAAKI,IAAI,CAAC9lG,IAA1H,CAAiI,CAEhI,OAAO8lG,IAAP,CAEA,CAED;EACA,GAAKA,IAAI,CAAC36E,QAAV,CAAqB,CAEpB,MAAMq7E,IAAI,CAAGV,IAAI,CAAC36E,QAAL,CAAcs7E,aAAd,CAA6Bf,QAA7B,CAAb,CAEA,GAAKc,IAAI,GAAKtoG,SAAd,CAA0B,CAEzB,OAAOsoG,IAAP,CAEA,CAED,CAED;EACA,GAAKV,IAAI,CAACxqF,QAAV,CAAqB,CAEpB,MAAMorF,iBAAiB,CAAG,SAAWprF,QAAX,CAAsB,CAE/C,IAAM,IAAItc,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGsc,QAAQ,CAACpc,MAA9B,CAAsCF,CAAC,EAAvC,CAA6C,CAE5C,MAAM2nG,SAAS,CAAGrrF,QAAQ,CAAEtc,CAAF,CAA1B,CAEA,GAAK2nG,SAAS,CAACv8F,IAAV,GAAmBs7F,QAAnB,EAA+BiB,SAAS,CAAC3mG,IAAV,GAAmB0lG,QAAvD,CAAkE,CAEjE,OAAOiB,SAAP,CAEA,CAED,MAAM9vC,MAAM,CAAG6vC,iBAAiB,CAAEC,SAAS,CAACrrF,QAAZ,CAAhC,CAEA,GAAKu7C,MAAL,CAAc,OAAOA,MAAP,CAEd,CAED,WAAA,CAEA,CApBD,CAsBA,MAAM+vC,WAAW,CAAGF,iBAAiB,CAAEZ,IAAI,CAACxqF,QAAP,CAArC,CAEA,GAAKsrF,WAAL,CAAmB,CAElB,OAAOA,WAAP,CAEA,CAED,CAED,WAAA,CAEA,CAED;EACAC,qBAAqB,EAAG,EACxBC,qBAAqB,EAAG,EAExB;EAEAC,gBAAgB,CAAEn/D,MAAF,CAAUjjC,MAAV,CAAmB,CAElCijC,MAAM,CAAEjjC,MAAF,CAAN,CAAmB,KAAKqiG,YAAL,CAAmB,KAAK7P,YAAxB,CAAnB,CAEA,CAED8P,eAAe,CAAEr/D,MAAF,CAAUjjC,MAAV,CAAmB,CAEjC,MAAMwI,MAAM,CAAG,KAAK+5F,gBAApB,CAEA,IAAM,IAAIloG,CAAC,CAAG,CAAR,CAAWoB,CAAC,CAAG+M,MAAM,CAACjO,MAA5B,CAAoCF,CAAC,GAAKoB,CAA1C,CAA6C,EAAGpB,CAAhD,CAAoD,CAEnD4oC,MAAM,CAAEjjC,MAAM,EAAR,CAAN,CAAsBwI,MAAM,CAAEnO,CAAF,CAA5B,CAEA,CAED,CAEDmoG,sBAAsB,CAAEv/D,MAAF,CAAUjjC,MAAV,CAAmB,CAExCijC,MAAM,CAAEjjC,MAAF,CAAN,CAAmB,KAAKuiG,gBAAL,CAAuB,KAAKb,aAA5B,CAAnB,CAEA,CAEDe,iBAAiB,CAAEx/D,MAAF,CAAUjjC,MAAV,CAAmB,CAEnC,KAAKuiG,gBAAL,CAAsBtiG,OAAtB,CAA+BgjC,MAA/B,CAAuCjjC,MAAvC,EAEA,CAED;EAEA0iG,gBAAgB,CAAEz/D,MAAF,CAAUjjC,MAAV,CAAmB,CAElC,KAAKqiG,YAAL,CAAmB,KAAK7P,YAAxB,EAAyCvvD,MAAM,CAAEjjC,MAAF,CAA/C,CAEA,CAED2iG,+BAA+B,CAAE1/D,MAAF,CAAUjjC,MAAV,CAAmB,CAEjD,KAAKqiG,YAAL,CAAmB,KAAK7P,YAAxB,EAAyCvvD,MAAM,CAAEjjC,MAAF,CAA/C,CACA,KAAKqiG,YAAL,CAAkB14F,WAAlB,CAAgC,IAAhC,CAEA,CAEDi5F,0CAA0C,CAAE3/D,MAAF,CAAUjjC,MAAV,CAAmB,CAE5D,KAAKqiG,YAAL,CAAmB,KAAK7P,YAAxB,EAAyCvvD,MAAM,CAAEjjC,MAAF,CAA/C,CACA,KAAKqiG,YAAL,CAAkBpgF,sBAAlB,CAA2C,IAA3C,CAEA,CAED;EAEA4gF,eAAe,CAAE5/D,MAAF,CAAUjjC,MAAV,CAAmB,CAEjC,MAAM8iG,IAAI,CAAG,KAAKP,gBAAlB,CAEA,IAAM,IAAIloG,CAAC,CAAG,CAAR,CAAWoB,CAAC,CAAGqnG,IAAI,CAACvoG,MAA1B,CAAkCF,CAAC,GAAKoB,CAAxC,CAA2C,EAAGpB,CAA9C,CAAkD,CAEjDyoG,IAAI,CAAEzoG,CAAF,CAAJ,CAAY4oC,MAAM,CAAEjjC,MAAM,EAAR,CAAlB,CAEA,CAED,CAED+iG,8BAA8B,CAAE9/D,MAAF,CAAUjjC,MAAV,CAAmB,CAEhD,MAAM8iG,IAAI,CAAG,KAAKP,gBAAlB,CAEA,IAAM,IAAIloG,CAAC,CAAG,CAAR,CAAWoB,CAAC,CAAGqnG,IAAI,CAACvoG,MAA1B,CAAkCF,CAAC,GAAKoB,CAAxC,CAA2C,EAAGpB,CAA9C,CAAkD,CAEjDyoG,IAAI,CAAEzoG,CAAF,CAAJ,CAAY4oC,MAAM,CAAEjjC,MAAM,EAAR,CAAlB,CAEA,CAED,KAAKqiG,YAAL,CAAkB14F,WAAlB,CAAgC,IAAhC,CAEA,CAEDq5F,yCAAyC,CAAE//D,MAAF,CAAUjjC,MAAV,CAAmB,CAE3D,MAAM8iG,IAAI,CAAG,KAAKP,gBAAlB,CAEA,IAAM,IAAIloG,CAAC,CAAG,CAAR,CAAWoB,CAAC,CAAGqnG,IAAI,CAACvoG,MAA1B,CAAkCF,CAAC,GAAKoB,CAAxC,CAA2C,EAAGpB,CAA9C,CAAkD,CAEjDyoG,IAAI,CAAEzoG,CAAF,CAAJ,CAAY4oC,MAAM,CAAEjjC,MAAM,EAAR,CAAlB,CAEA,CAED,KAAKqiG,YAAL,CAAkBpgF,sBAAlB,CAA2C,IAA3C,CAEA,CAED;EAEAghF,sBAAsB,CAAEhgE,MAAF,CAAUjjC,MAAV,CAAmB,CAExC,KAAKuiG,gBAAL,CAAuB,KAAKb,aAA5B,EAA8Cz+D,MAAM,CAAEjjC,MAAF,CAApD,CAEA,CAEDkjG,qCAAqC,CAAEjgE,MAAF,CAAUjjC,MAAV,CAAmB,CAEvD,KAAKuiG,gBAAL,CAAuB,KAAKb,aAA5B,EAA8Cz+D,MAAM,CAAEjjC,MAAF,CAApD,CACA,KAAKqiG,YAAL,CAAkB14F,WAAlB,CAAgC,IAAhC,CAEA,CAEDw5F,gDAAgD,CAAElgE,MAAF,CAAUjjC,MAAV,CAAmB,CAElE,KAAKuiG,gBAAL,CAAuB,KAAKb,aAA5B,EAA8Cz+D,MAAM,CAAEjjC,MAAF,CAApD,CACA,KAAKqiG,YAAL,CAAkBpgF,sBAAlB,CAA2C,IAA3C,CAEA,CAED;EAEAmhF,mBAAmB,CAAEngE,MAAF,CAAUjjC,MAAV,CAAmB,CAErC,KAAKuiG,gBAAL,CAAsBxiG,SAAtB,CAAiCkjC,MAAjC,CAAyCjjC,MAAzC,EAEA,CAEDqjG,kCAAkC,CAAEpgE,MAAF,CAAUjjC,MAAV,CAAmB,CAEpD,KAAKuiG,gBAAL,CAAsBxiG,SAAtB,CAAiCkjC,MAAjC,CAAyCjjC,MAAzC,EACA,KAAKqiG,YAAL,CAAkB14F,WAAlB,CAAgC,IAAhC,CAEA,CAED25F,6CAA6C,CAAErgE,MAAF,CAAUjjC,MAAV,CAAmB,CAE/D,KAAKuiG,gBAAL,CAAsBxiG,SAAtB,CAAiCkjC,MAAjC,CAAyCjjC,MAAzC,EACA,KAAKqiG,YAAL,CAAkBpgF,sBAAlB,CAA2C,IAA3C,CAEA,CAED++E,iBAAiB,CAAEuC,WAAF,CAAevjG,MAAf,CAAwB,CAExC,KAAK20E,IAAL,GACA,KAAKirB,QAAL,CAAe2D,WAAf,CAA4BvjG,MAA5B,EAEA,CAEDihG,iBAAiB,CAAEuC,WAAF,CAAexjG,MAAf,CAAwB,CAExC,KAAK20E,IAAL,GACA,KAAK51B,QAAL,CAAeykD,WAAf,CAA4BxjG,MAA5B,EAEA,CAED;EACA20E,IAAI,EAAG,CAEN,IAAI0tB,YAAY,CAAG,KAAKxB,IAAxB,CACA,MAAMV,UAAU,CAAG,KAAKA,UAAxB,CAEA,MAAMqB,UAAU,CAAGrB,UAAU,CAACqB,UAA9B,CACA,MAAMhP,YAAY,CAAG2N,UAAU,CAAC3N,YAAhC,CACA,IAAIkP,aAAa,CAAGvB,UAAU,CAACuB,aAA/B,CAEA,GAAK,CAAEW,YAAP,CAAsB,CAErBA,YAAY,CAAG9pG,eAAe,CAACuoG,QAAhB,CAA0B,KAAKF,QAA/B,CAAyCT,UAAU,CAACY,QAApD,GAAkE,KAAKH,QAAtF,CAEA,KAAKC,IAAL,CAAYwB,YAAZ,CAEA,CAED;EACA,KAAKzC,QAAL,CAAgB,KAAKsC,qBAArB,CACA,KAAKnjD,QAAL,CAAgB,KAAKojD,qBAArB,CAEA;EACA,GAAK,CAAEE,YAAP,CAAsB,CAErBnlG,OAAO,CAAC8D,KAAR,CAAe,2DAA6D,KAAK6gD,IAAlE,CAAyE,wBAAxF,EACA,OAEA,CAED,GAAK2/C,UAAL,CAAkB,CAEjB,IAAIC,WAAW,CAAGtB,UAAU,CAACsB,WAA7B,CAEA;EACA,OAASD,UAAT,EAEC,IAAK,WAAL,CAEC,GAAK,CAAEa,YAAY,CAAC57E,QAApB,CAA+B,CAE9BvpB,OAAO,CAAC8D,KAAR,CAAe,mFAAf,CAAoG,IAApG,EACA,OAEA,CAED,GAAK,CAAEqhG,YAAY,CAAC57E,QAAb,CAAsBtB,SAA7B,CAAyC,CAExCjoB,OAAO,CAAC8D,KAAR,CAAe,6GAAf,CAA8H,IAA9H,EACA,OAEA,CAEDqhG,YAAY,CAAGA,YAAY,CAAC57E,QAAb,CAAsBtB,SAArC,CAEA,MAED,IAAK,OAAL,CAEC,GAAK,CAAEk9E,YAAY,CAAC77E,QAApB,CAA+B,CAE9BtpB,OAAO,CAAC8D,KAAR,CAAe,gFAAf,CAAiG,IAAjG,EACA,OAEA,CAED;EACA;EAEAqhG,YAAY,CAAGA,YAAY,CAAC77E,QAAb,CAAsBkjC,KAArC,CAEA;EACA,IAAM,IAAIrvD,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGgoG,YAAY,CAAC9nG,MAAlC,CAA0CF,CAAC,EAA3C,CAAiD,CAEhD,GAAKgoG,YAAY,CAAEhoG,CAAF,CAAZ,CAAkBoL,IAAlB,GAA2Bg8F,WAAhC,CAA8C,CAE7CA,WAAW,CAAGpnG,CAAd,CACA,MAEA,CAED,CAED,MAED,QAEC,GAAKgoG,YAAY,CAAEb,UAAF,CAAZ,GAA+BjoG,SAApC,CAAgD,CAE/C2D,OAAO,CAAC8D,KAAR,CAAe,sEAAf,CAAuF,IAAvF,EACA,OAEA,CAEDqhG,YAAY,CAAGA,YAAY,CAAEb,UAAF,CAA3B,CA3DF,CAgEA,GAAKC,WAAW,GAAKloG,SAArB,CAAiC,CAEhC,GAAK8oG,YAAY,CAAEZ,WAAF,CAAZ,GAAgCloG,SAArC,CAAiD,CAEhD2D,OAAO,CAAC8D,KAAR,CAAe,uFAAf,CAAwG,IAAxG,CAA8GqhG,YAA9G,EACA,OAEA,CAEDA,YAAY,CAAGA,YAAY,CAAEZ,WAAF,CAA3B,CAEA,CAED,CAED;EACA,MAAMgC,YAAY,CAAGpB,YAAY,CAAE7P,YAAF,CAAjC,CAEA,GAAKiR,YAAY,GAAKlqG,SAAtB,CAAkC,CAEjC,MAAMwnG,QAAQ,CAAGZ,UAAU,CAACY,QAA5B,CAEA7jG,OAAO,CAAC8D,KAAR,CAAe,+DAAiE+/F,QAAjE,CACd,GADc,CACRvO,YADQ,CACO,wBADtB,CACgD6P,YADhD,EAEA,OAEA,CAED;EACA,IAAIqB,UAAU,CAAG,KAAKC,UAAL,CAAgBC,IAAjC,CAEA,KAAKvB,YAAL,CAAoBA,YAApB,CAEA,GAAKA,YAAY,CAAC14F,WAAb,GAA6BpQ,SAAlC,CAA8C;EAE7CmqG,UAAU,CAAG,KAAKC,UAAL,CAAgBE,WAA7B,CAEA,CAJD,QAIYxB,YAAY,CAACpgF,sBAAb,GAAwC1oB,SAA7C,CAAyD;EAE/DmqG,UAAU,CAAG,KAAKC,UAAL,CAAgBG,sBAA7B,CAEA,CAED;EACA,IAAIC,WAAW,CAAG,KAAKC,WAAL,CAAiBC,MAAnC,CAEA,GAAKvC,aAAa,GAAKnoG,SAAvB,CAAmC;EAIlC,GAAKi5F,YAAY,GAAK,uBAAtB,CAAgD;EAI/C;EACA,GAAK,CAAE6P,YAAY,CAAC9rF,QAApB,CAA+B,CAE9BrZ,OAAO,CAAC8D,KAAR,CAAe,qGAAf,CAAsH,IAAtH,EACA,OAEA,CAED,GAAKqhG,YAAY,CAAC9rF,QAAb,CAAsBmhB,gBAA3B,CAA8C,CAE7C,GAAK,CAAE2qE,YAAY,CAAC9rF,QAAb,CAAsBwd,eAA7B,CAA+C,CAE9C72B,OAAO,CAAC8D,KAAR,CAAe,qHAAf,CAAsI,IAAtI,EACA,OAEA,CAED,GAAKqhG,YAAY,CAACvpE,qBAAb,CAAoC4oE,aAApC,IAAwDnoG,SAA7D,CAAyE,CAExEmoG,aAAa,CAAGW,YAAY,CAACvpE,qBAAb,CAAoC4oE,aAApC,CAAhB,CAEA,CAGD,CAhBD,KAgBO,CAENxkG,OAAO,CAAC8D,KAAR,CAAe,mHAAf,CAAoI,IAApI,EACA,OAEA,CAED,CAED+iG,WAAW,CAAG,KAAKC,WAAL,CAAiBE,YAA/B,CAEA,KAAK3B,gBAAL,CAAwBkB,YAAxB,CACA,KAAK/B,aAAL,CAAqBA,aAArB,CAEA,CA9CD,QA8CY+B,YAAY,CAAC1jG,SAAb,GAA2BxG,SAA3B,EAAwCkqG,YAAY,CAACxjG,OAAb,GAAyB1G,SAAtE,CAAkF;EAIxFwqG,WAAW,CAAG,KAAKC,WAAL,CAAiBG,cAA/B,CAEA,KAAK5B,gBAAL,CAAwBkB,YAAxB,CAEA,CARM,QAQKp6F,KAAK,CAACC,OAAN,CAAem6F,YAAf,CAAL,CAAqC,CAE3CM,WAAW,CAAG,KAAKC,WAAL,CAAiBI,WAA/B,CAEA,KAAK7B,gBAAL,CAAwBkB,YAAxB,CAEA,CANM,KAMA,CAEN,KAAKjR,YAAL,CAAoBA,YAApB,CAEA,CAED;EACA,KAAKoN,QAAL,CAAgB,KAAKyE,mBAAL,CAA0BN,WAA1B,CAAhB,CACA,KAAKhlD,QAAL,CAAgB,KAAKulD,gCAAL,CAAuCP,WAAvC,EAAsDL,UAAtD,CAAhB,CAEA,CAED/C,MAAM,EAAG,CAER,KAAKE,IAAL,CAAY,IAAZ,CAEA;EACA;EACA,KAAKjB,QAAL,CAAgB,KAAKoB,iBAArB,CACA,KAAKjiD,QAAL,CAAgB,KAAKkiD,iBAArB,CAEA,CAzhBoB,CA6hBtB1oG,eAAe,CAACD,SAAhB,CAA4BA,SAA5B,CAEAC,eAAe,CAACsI,SAAhB,CAA0BmjG,WAA1B,CAAwC,CACvCC,MAAM,CAAE,CAD+B,CAEvCG,WAAW,CAAE,CAF0B,CAGvCF,YAAY,CAAE,CAHyB,CAIvCC,cAAc,CAAE,CAJuB,CAAxC,CAOA5rG,eAAe,CAACsI,SAAhB,CAA0B8iG,UAA1B,CAAuC,CACtCC,IAAI,CAAE,CADgC,CAEtCC,WAAW,CAAE,CAFyB,CAGtCC,sBAAsB,CAAE,CAHc,CAAvC,CAMAvrG,eAAe,CAACsI,SAAhB,CAA0BwjG,mBAA1B,CAAgD,CAE/C9rG,eAAe,CAACsI,SAAhB,CAA0BuhG,gBAFqB,CAG/C7pG,eAAe,CAACsI,SAAhB,CAA0ByhG,eAHqB,CAI/C/pG,eAAe,CAACsI,SAAhB,CAA0B2hG,sBAJqB,CAK/CjqG,eAAe,CAACsI,SAAhB,CAA0B4hG,iBALqB,CAAhD,CASAlqG,eAAe,CAACsI,SAAhB,CAA0ByjG,gCAA1B,CAA6D,CAE5D;EAEC/rG,eAAe,CAACsI,SAAhB,CAA0B6hG,gBAF3B,CAGCnqG,eAAe,CAACsI,SAAhB,CAA0B8hG,+BAH3B,CAICpqG,eAAe,CAACsI,SAAhB,CAA0B+hG,0CAJ3B,CAF4D,CAQzD;EAIFrqG,eAAe,CAACsI,SAAhB,CAA0BgiG,eAJxB,CAKFtqG,eAAe,CAACsI,SAAhB,CAA0BkiG,8BALxB,CAMFxqG,eAAe,CAACsI,SAAhB,CAA0BmiG,yCANxB,CARyD,CAgBzD;EAGFzqG,eAAe,CAACsI,SAAhB,CAA0BoiG,sBAHxB,CAIF1qG,eAAe,CAACsI,SAAhB,CAA0BqiG,qCAJxB,CAKF3qG,eAAe,CAACsI,SAAhB,CAA0BsiG,gDALxB,CAhByD,CAuBzD;EAGF5qG,eAAe,CAACsI,SAAhB,CAA0BuiG,mBAHxB,CAIF7qG,eAAe,CAACsI,SAAhB,CAA0BwiG,kCAJxB,CAKF9qG,eAAe,CAACsI,SAAhB,CAA0ByiG,6CALxB,CAvByD,CAA7D,CAiaA,MAAM9qG,eAAgB,CAErB0D,WAAW,CAAEqoG,KAAF,CAASja,IAAT,CAAeka,SAAS,CAAG,IAA3B,CAAiChY,SAAS,CAAGlC,IAAI,CAACkC,SAAlD,CAA8D,CAExE,KAAKiY,MAAL,CAAcF,KAAd,CACA,KAAKG,KAAL,CAAapa,IAAb,CACA,KAAKqa,UAAL,CAAkBH,SAAlB,CACA,KAAKhY,SAAL,CAAiBA,SAAjB,CAEA,MAAMjC,MAAM,CAAGD,IAAI,CAACC,MAApB,CACCqa,OAAO,CAAGra,MAAM,CAAChwF,MADlB,CAECsqG,YAAY,CAAG,IAAIx7F,KAAJ,CAAWu7F,OAAX,CAFhB,CAIA,MAAME,mBAAmB,CAAG,CAC3B7W,WAAW,CAAEp8G,mBADc,CAE3Bq8G,SAAS,CAAEr8G,mBAFgB,CAA5B,CAKA,IAAM,IAAIwoB,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAKuqG,OAAvB,CAAgC,EAAGvqG,CAAnC,CAAuC,CAEtC,MAAM4xF,WAAW,CAAG1B,MAAM,CAAElwF,CAAF,CAAN,CAAYqxF,iBAAZ,CAA+B,IAA/B,CAApB,CACAmZ,YAAY,CAAExqG,CAAF,CAAZ,CAAoB4xF,WAApB,CACAA,WAAW,CAACY,QAAZ,CAAuBiY,mBAAvB,CAEA,CAED,KAAKC,oBAAL,CAA4BD,mBAA5B,CAEA,KAAKE,aAAL,CAAqBH,YAArB,CAAmC;EAEnC;EACA,KAAKI,iBAAL,CAAyB,IAAI57F,KAAJ,CAAWu7F,OAAX,CAAzB,CAEA,KAAKM,WAAL,CAAmB,IAAnB,CAAyB;EACzB,KAAKC,iBAAL,CAAyB,IAAzB,CAA+B;EAE/B,KAAKC,qBAAL,CAA6B,IAA7B,CACA,KAAKC,kBAAL,CAA0B,IAA1B,CAEA,KAAKlK,IAAL,CAAY3pH,UAAZ,CACA,KAAK8zH,UAAL,CAAkB,CAAE,CAApB,CAEA;EACA;EACA,KAAKC,UAAL,CAAkB,IAAlB,CAEA;EACA;EACA,KAAKpjE,IAAL,CAAY,CAAZ,CAEA,KAAK6tD,SAAL,CAAiB,CAAjB,CACA,KAAKwV,mBAAL,CAA2B,CAA3B,CAEA,KAAKnqD,MAAL,CAAc,CAAd,CACA,KAAKoqD,gBAAL,CAAwB,CAAxB,CAEA,KAAKC,WAAL,CAAmBngG,QAAnB,CAA6B;EAE7B,KAAKogG,MAAL,CAAc,KAAd,CAAqB;EACrB,KAAKnoE,OAAL,CAAe,IAAf,CAAqB;EAErB,KAAKooE,iBAAL,CAAyB,KAAzB,CAA+B;EAE/B,KAAKC,gBAAL,CAAwB,IAAxB,CAA6B;EAC7B,KAAKC,cAAL,CAAsB,IAAtB,CAA2B;EAE3B,CAED;EAEAtJ,IAAI,EAAG,CAEN,KAAKiI,MAAL,CAAYsB,eAAZ,CAA6B,IAA7B,EAEA,WAAA,CAEA,CAEDzjE,IAAI,EAAG,CAEN,KAAKmiE,MAAL,CAAYuB,iBAAZ,CAA+B,IAA/B,EAEA,YAAY1zD,KAAL,EAAP,CAEA,CAEDA,KAAK,EAAG,CAEP,KAAKqzD,MAAL,CAAc,KAAd,CACA,KAAKnoE,OAAL,CAAe,IAAf,CAEA,KAAK2E,IAAL,CAAY,CAAZ,CAAe;EACf,KAAKmjE,UAAL,CAAkB,CAAE,CAApB,CAAsB;EACtB,KAAKC,UAAL,CAAkB,IAAlB,CAAuB;EAEvB,YAAYU,UAAL,GAAkBC,WAAlB,EAAP,CAEA,CAEDC,SAAS,EAAG,CAEX,YAAY3oE,OAAL,EAAgB,CAAE,KAAKmoE,MAAvB,EAAiC,KAAK3V,SAAL,GAAmB,CAApD,EACN,KAAKuV,UAAL,GAAoB,IADd,EACsB,KAAKd,MAAL,CAAY2B,eAAZ,CAA6B,IAA7B,CAD7B,CAGA,CAED;EACAC,WAAW,EAAG,CAEb,YAAY5B,MAAL,CAAY2B,eAAZ,CAA6B,IAA7B,CAAP,CAEA,CAEDE,OAAO,CAAEnkE,IAAF,CAAS,CAEf,KAAKojE,UAAL,CAAkBpjE,IAAlB,CAEA,WAAA,CAEA,CAEDs7D,OAAO,CAAE5qD,IAAF,CAAQ6yD,WAAR,CAAsB,CAE5B,KAAKvK,IAAL,CAAYtoD,IAAZ,CACA,KAAK6yD,WAAL,CAAmBA,WAAnB,CAEA,WAAA,CAEA,CAED;EAEA;EACA;EACA;EACAa,kBAAkB,CAAElrD,MAAF,CAAW,CAE5B,KAAKA,MAAL,CAAcA,MAAd,CAEA;EACA,KAAKoqD,gBAAL,CAAwB,KAAKjoE,OAAL,CAAe6d,MAAf,CAAwB,CAAhD,CAEA,YAAY4qD,UAAL,EAAP,CAEA,CAED;EACAO,kBAAkB,EAAG,CAEpB,YAAYf,gBAAZ,CAEA,CAEDgB,MAAM,CAAEvV,QAAF,CAAa,CAElB,YAAYwV,eAAL,CAAsBxV,QAAtB,CAAgC,CAAhC,CAAmC,CAAnC,CAAP,CAEA,CAEDyV,OAAO,CAAEzV,QAAF,CAAa,CAEnB,YAAYwV,eAAL,CAAsBxV,QAAtB,CAAgC,CAAhC,CAAmC,CAAnC,CAAP,CAEA,CAED0V,aAAa,CAAEC,aAAF,CAAiB3V,QAAjB,CAA2B4V,IAA3B,CAAkC,CAE9CD,aAAa,CAACF,OAAd,CAAuBzV,QAAvB,EACA,KAAKuV,MAAL,CAAavV,QAAb,EAEA,GAAK4V,IAAL,CAAY,CAEX,MAAMC,cAAc,CAAG,KAAKrC,KAAL,CAAWxT,QAAlC,CACC8V,eAAe,CAAGH,aAAa,CAACnC,KAAd,CAAoBxT,QADvC,CAGC+V,aAAa,CAAGD,eAAe,CAAGD,cAHnC,CAICG,aAAa,CAAGH,cAAc,CAAGC,eAJlC,CAMAH,aAAa,CAACC,IAAd,CAAoB,GAApB,CAAyBG,aAAzB,CAAwC/V,QAAxC,EACA,KAAK4V,IAAL,CAAWI,aAAX,CAA0B,GAA1B,CAA+BhW,QAA/B,EAEA,CAED,WAAA,CAEA,CAEDiW,WAAW,CAAEC,YAAF,CAAgBlW,QAAhB,CAA0B4V,IAA1B,CAAiC,CAE3C,OAAOM,YAAY,CAACR,aAAb,CAA4B,IAA5B,CAAkC1V,QAAlC,CAA4C4V,IAA5C,CAAP,CAEA,CAEDb,UAAU,EAAG,CAEZ,MAAMoB,iBAAiB,CAAG,KAAKhC,kBAA/B,CAEA,GAAKgC,iBAAiB,GAAK,IAA3B,CAAkC,CAEjC,KAAKhC,kBAAL,CAA0B,IAA1B,CACA,KAAKZ,MAAL,CAAY6C,2BAAZ,CAAyCD,iBAAzC,EAEA,CAED,WAAA,CAEA,CAED;EAEA;EACA;EACA;EACAE,qBAAqB,CAAEvX,SAAF,CAAc,CAElC,KAAKA,SAAL,CAAiBA,SAAjB,CACA,KAAKwV,mBAAL,CAA2B,KAAKG,MAAL,CAAc,CAAd,CAAkB3V,SAA7C,CAEA,YAAYkW,WAAL,EAAP,CAEA,CAED;EACAsB,qBAAqB,EAAG,CAEvB,YAAYhC,mBAAZ,CAEA,CAEDiC,WAAW,CAAEvW,QAAF,CAAa,CAEvB,KAAKlB,SAAL,CAAiB,KAAK0U,KAAL,CAAWxT,QAAX,CAAsBA,QAAvC,CAEA,YAAYgV,WAAL,EAAP,CAEA,CAEDwB,QAAQ,CAAEC,MAAF,CAAW,CAElB,KAAKxlE,IAAL,CAAYwlE,MAAM,CAACxlE,IAAnB,CACA,KAAK6tD,SAAL,CAAiB2X,MAAM,CAAC3X,SAAxB,CAEA,YAAYkW,WAAL,EAAP,CAEA,CAED0B,IAAI,CAAE1W,QAAF,CAAa,CAEhB,YAAY4V,IAAL,CAAW,KAAKtB,mBAAhB,CAAqC,CAArC,CAAwCtU,QAAxC,CAAP,CAEA,CAED4V,IAAI,CAAEe,cAAF,CAAkBC,YAAlB,CAAgC5W,QAAhC,CAA2C,CAE9C,MAAMqT,KAAK,CAAG,KAAKE,MAAnB,CACChtG,GAAG,CAAG8sG,KAAK,CAACpiE,IADb,CAEC6tD,SAAS,CAAG,KAAKA,SAFlB,CAIA,IAAI/D,WAAW,CAAG,KAAKmZ,qBAAvB,CAEA,GAAKnZ,WAAW,GAAK,IAArB,CAA4B,CAE3BA,WAAW,CAAGsY,KAAK,CAACwD,uBAAN,EAAd,CACA,KAAK3C,qBAAL,CAA6BnZ,WAA7B,CAEA,CAED,MAAMxC,KAAK,CAAGwC,WAAW,CAACQ,kBAA1B,CACC3lE,MAAM,CAAGmlE,WAAW,CAACS,YADtB,CAGAjD,KAAK,CAAE,CAAF,CAAL,CAAahyF,GAAb,CACAgyF,KAAK,CAAE,CAAF,CAAL,CAAahyF,GAAG,CAAGy5F,QAAnB,CAEApqE,MAAM,CAAE,CAAF,CAAN,CAAc+gF,cAAc,CAAG7X,SAA/B,CACAlpE,MAAM,CAAE,CAAF,CAAN,CAAcghF,YAAY,CAAG9X,SAA7B,CAEA,WAAA,CAEA,CAEDkW,WAAW,EAAG,CAEb,MAAM8B,oBAAoB,CAAG,KAAK5C,qBAAlC,CAEA,GAAK4C,oBAAoB,GAAK,IAA9B,CAAqC,CAEpC,KAAK5C,qBAAL,CAA6B,IAA7B,CACA,KAAKX,MAAL,CAAY6C,2BAAZ,CAAyCU,oBAAzC,EAEA,CAED,WAAA,CAEA,CAED;EAEAC,QAAQ,EAAG,CAEV,YAAYxD,MAAZ,CAEA,CAEDyD,OAAO,EAAG,CAET,YAAYxD,KAAZ,CAEA,CAEDyD,OAAO,EAAG,CAET,YAAYxD,UAAL,EAAmB,KAAKF,MAAL,CAAY2D,KAAtC,CAEA,CAED;EAEAC,OAAO,CAAElmE,IAAF,CAAQmmE,SAAR,CAAmBC,aAAnB,CAAkClJ,SAAlC,CAA8C;EAIpD,GAAK,CAAE,KAAK7hE,OAAZ,CAAsB;EAIrB,KAAKgrE,aAAL,CAAoBrmE,IAApB,EACA,OAEA,CAED,MAAM8tD,SAAS,CAAG,KAAKsV,UAAvB,CAEA,GAAKtV,SAAS,GAAK,IAAnB,CAA0B;EAIzB,MAAMwY,WAAW,CAAG,CAAEtmE,IAAI,CAAG8tD,SAAT,EAAuBsY,aAA3C,CACA,GAAKE,WAAW,CAAG,CAAd,EAAmBF,aAAa,GAAK,CAA1C,CAA8C,CAE7C,OAAQ;EAER,CAED;EAEA,KAAKhD,UAAL,CAAkB,IAAlB,CAAwB;EACxB+C,SAAS,CAAGC,aAAa,CAAGE,WAA5B,CAEA,CAED;EAEAH,SAAS,EAAI,KAAKI,gBAAL,CAAuBvmE,IAAvB,CAAb,CACA,MAAMwmE,QAAQ,CAAG,KAAKC,WAAL,CAAkBN,SAAlB,CAAjB,CAEA;EACA;EAEA,MAAMjtD,MAAM,CAAG,KAAKmtD,aAAL,CAAoBrmE,IAApB,CAAf,CAEA,GAAKkZ,MAAM,CAAG,CAAd,CAAkB,CAEjB,MAAMwpD,YAAY,CAAG,KAAKG,aAA1B,CACA,MAAM6D,cAAc,CAAG,KAAK5D,iBAA5B,CAEA,OAAS,KAAKzY,SAAd,EAEC,KAAKv6G,0BAAL,CAEC,IAAM,IAAI+lC,CAAC,CAAG,CAAR,CAAWtc,CAAC,CAAGmpG,YAAY,CAACtqG,MAAlC,CAA0Cyd,CAAC,GAAKtc,CAAhD,CAAmD,EAAGsc,CAAtD,CAA0D,CAEzD6sF,YAAY,CAAE7sF,CAAF,CAAZ,CAAkBk0E,QAAlB,CAA4Byc,QAA5B,EACAE,cAAc,CAAE7wF,CAAF,CAAd,CAAoBwnF,kBAApB,CAAwCnkD,MAAxC,EAEA,CAED,MAED,KAAKrpE,wBAAL,CACA,QAEC,IAAM,IAAIgmC,CAAC,CAAG,CAAR,CAAWtc,CAAC,CAAGmpG,YAAY,CAACtqG,MAAlC,CAA0Cyd,CAAC,GAAKtc,CAAhD,CAAmD,EAAGsc,CAAtD,CAA0D,CAEzD6sF,YAAY,CAAE7sF,CAAF,CAAZ,CAAkBk0E,QAAlB,CAA4Byc,QAA5B,EACAE,cAAc,CAAE7wF,CAAF,CAAd,CAAoBonF,UAApB,CAAgCC,SAAhC,CAA2ChkD,MAA3C,EAEA,CArBH,CAyBA,CAED,CAEDmtD,aAAa,CAAErmE,IAAF,CAAS,CAErB,IAAIkZ,MAAM,CAAG,CAAb,CAEA,GAAK,KAAK7d,OAAV,CAAoB,CAEnB6d,MAAM,CAAG,KAAKA,MAAd,CACA,MAAM4wC,WAAW,CAAG,KAAKoZ,kBAAzB,CAEA,GAAKpZ,WAAW,GAAK,IAArB,CAA4B,CAE3B,MAAM6c,gBAAgB,CAAG7c,WAAW,CAACC,QAAZ,CAAsB/pD,IAAtB,EAA8B,CAA9B,CAAzB,CAEAkZ,MAAM,EAAIytD,gBAAV,CAEA,GAAK3mE,IAAI,CAAG8pD,WAAW,CAACQ,kBAAZ,CAAgC,CAAhC,CAAZ,CAAkD,CAEjD,KAAKwZ,UAAL,GAEA,GAAK6C,gBAAgB,GAAK,CAA1B,CAA8B;EAG7B,KAAKtrE,OAAL,CAAe,KAAf,CAEA,CAED,CAED,CAED,CAED,KAAKioE,gBAAL,CAAwBpqD,MAAxB,CACA,OAAOA,MAAP,CAEA,CAEDqtD,gBAAgB,CAAEvmE,IAAF,CAAS,CAExB,IAAI6tD,SAAS,CAAG,CAAhB,CAEA,GAAK,CAAE,KAAK2V,MAAZ,CAAqB,CAEpB3V,SAAS,CAAG,KAAKA,SAAjB,CAEA,MAAM/D,WAAW,CAAG,KAAKmZ,qBAAzB,CAEA,GAAKnZ,WAAW,GAAK,IAArB,CAA4B,CAE3B,MAAM6c,gBAAgB,CAAG7c,WAAW,CAACC,QAAZ,CAAsB/pD,IAAtB,EAA8B,CAA9B,CAAzB,CAEA6tD,SAAS,EAAI8Y,gBAAb,CAEA,GAAK3mE,IAAI,CAAG8pD,WAAW,CAACQ,kBAAZ,CAAgC,CAAhC,CAAZ,CAAkD,CAEjD,KAAKyZ,WAAL,GAEA,GAAKlW,SAAS,GAAK,CAAnB,CAAuB;EAGtB,KAAK2V,MAAL,CAAc,IAAd,CAEA,CALD,KAKO;EAGN,KAAK3V,SAAL,CAAiBA,SAAjB,CAEA,CAED,CAED,CAED,CAED,KAAKwV,mBAAL,CAA2BxV,SAA3B,CACA,OAAOA,SAAP,CAEA,CAED4Y,WAAW,CAAEN,SAAF,CAAc,CAExB,MAAMpX,QAAQ,CAAG,KAAKwT,KAAL,CAAWxT,QAA5B,CACA,MAAMiK,IAAI,CAAG,KAAKA,IAAlB,CAEA,IAAIh5D,IAAI,CAAG,KAAKA,IAAL,CAAYmmE,SAAvB,CACA,IAAIS,SAAS,CAAG,KAAKzD,UAArB,CAEA,MAAM0D,QAAQ,CAAK7N,IAAI,GAAK1pH,YAA5B,CAEA,GAAK62H,SAAS,GAAK,CAAnB,CAAuB,CAEtB,GAAKS,SAAS,GAAK,CAAE,CAArB,CAAyB,OAAO5mE,IAAP,CAEzB,OAAS6mE,QAAQ,EAAI,CAAED,SAAS,CAAG,CAAd,IAAsB,CAApC,CAA0C7X,QAAQ,CAAG/uD,IAArD,CAA4DA,IAAnE,CAEA,CAED,GAAKg5D,IAAI,GAAK5pH,QAAd,CAAyB,CAExB,GAAKw3H,SAAS,GAAK,CAAE,CAArB,CAAyB;EAIxB,KAAKzD,UAAL,CAAkB,CAAlB,CACA,KAAK2D,WAAL,CAAkB,IAAlB,CAAwB,IAAxB,CAA8B,KAA9B,EAEA,CAEDC,WAAW,CAAE,CAEZ,GAAK/mE,IAAI,EAAI+uD,QAAb,CAAwB,CAEvB/uD,IAAI,CAAG+uD,QAAP,CAEA,CAJD,QAIY/uD,IAAI,CAAG,CAAZ,CAAgB,CAEtBA,IAAI,CAAG,CAAP,CAEA,CAJM,KAIA,CAEN,KAAKA,IAAL,CAAYA,IAAZ,CAEA,MAAM+mE,WAAN,CAEA,CAED,GAAK,KAAKtD,iBAAV,CAA8B,KAAKD,MAAL,CAAc,IAAd,CAA9B,UACUnoE,OAAL,CAAe,KAAf,CAEL,KAAK2E,IAAL,CAAYA,IAAZ,CAEA,KAAKsiE,MAAL,CAAYzqG,aAAZ,CAA2B,CAC1BZ,IAAI,CAAE,UADoB,CACRuuG,MAAM,CAAE,IADA,CAE1B/uF,SAAS,CAAE0vF,SAAS,CAAG,CAAZ,CAAgB,CAAE,CAAlB,CAAsB,CAFP,CAA3B,EAKA,CAED,CAzCD,KAyCO;EAEN,GAAKS,SAAS,GAAK,CAAE,CAArB,CAAyB;EAIxB,GAAKT,SAAS,EAAI,CAAlB,CAAsB,CAErBS,SAAS,CAAG,CAAZ,CAEA,KAAKE,WAAL,CAAkB,IAAlB,CAAwB,KAAKvD,WAAL,GAAqB,CAA7C,CAAgDsD,QAAhD,EAEA,CAND,KAMO;EAGN;EACA;EAEA,KAAKC,WAAL,CAAkB,KAAKvD,WAAL,GAAqB,CAAvC,CAA0C,IAA1C,CAAgDsD,QAAhD,EAEA,CAED,CAED,GAAK7mE,IAAI,EAAI+uD,QAAR,EAAoB/uD,IAAI,CAAG,CAAhC,CAAoC;EAInC,MAAMgnE,SAAS,CAAG1uG,IAAI,CAACsB,KAAL,CAAYomC,IAAI,CAAG+uD,QAAnB,CAAlB,CAAiD;EACjD/uD,IAAI,EAAI+uD,QAAQ,CAAGiY,SAAnB,CAEAJ,SAAS,EAAItuG,IAAI,CAACwE,GAAL,CAAUkqG,SAAV,CAAb,CAEA,MAAMC,OAAO,CAAG,KAAK1D,WAAL,CAAmBqD,SAAnC,CAEA,GAAKK,OAAO,EAAI,CAAhB,CAAoB;EAInB,GAAK,KAAKxD,iBAAV,CAA8B,KAAKD,MAAL,CAAc,IAAd,CAA9B,UACUnoE,OAAL,CAAe,KAAf,CAEL2E,IAAI,CAAGmmE,SAAS,CAAG,CAAZ,CAAgBpX,QAAhB,CAA2B,CAAlC,CAEA,KAAK/uD,IAAL,CAAYA,IAAZ,CAEA,KAAKsiE,MAAL,CAAYzqG,aAAZ,CAA2B,CAC1BZ,IAAI,CAAE,UADoB,CACRuuG,MAAM,CAAE,IADA,CAE1B/uF,SAAS,CAAE0vF,SAAS,CAAG,CAAZ,CAAgB,CAAhB,CAAoB,CAAE,CAFP,CAA3B,EAKA,CAhBD,KAgBO;EAIN,GAAKc,OAAO,GAAK,CAAjB,CAAqB;EAIpB,MAAMC,OAAO,CAAGf,SAAS,CAAG,CAA5B,CACA,KAAKW,WAAL,CAAkBI,OAAlB,CAA2B,CAAEA,OAA7B,CAAsCL,QAAtC,EAEA,CAPD,KAOO,CAEN,KAAKC,WAAL,CAAkB,KAAlB,CAAyB,KAAzB,CAAgCD,QAAhC,EAEA,CAED,KAAK1D,UAAL,CAAkByD,SAAlB,CAEA,KAAK5mE,IAAL,CAAYA,IAAZ,CAEA,KAAKsiE,MAAL,CAAYzqG,aAAZ,CAA2B,CAC1BZ,IAAI,CAAE,MADoB,CACZuuG,MAAM,CAAE,IADI,CACEwB,SAAS,CAAEA,SADb,CAA3B,EAIA,CAED,CAtDD,KAsDO,CAEN,KAAKhnE,IAAL,CAAYA,IAAZ,CAEA,CAED,GAAK6mE,QAAQ,EAAI,CAAED,SAAS,CAAG,CAAd,IAAsB,CAAvC,CAA2C;EAI1C,OAAO7X,QAAQ,CAAG/uD,IAAlB,CAEA,CAED,CAED,OAAOA,IAAP,CAEA,CAED8mE,WAAW,CAAEI,OAAF,CAAWC,KAAX,CAAkBN,QAAlB,CAA6B,CAEvC,MAAMnc,QAAQ,CAAG,KAAKkY,oBAAtB,CAEA,GAAKiE,QAAL,CAAgB,CAEfnc,QAAQ,CAACoB,WAAT,CAAuBn8G,eAAvB,CACA+6G,QAAQ,CAACqB,SAAT,CAAqBp8G,eAArB,CAEA,CALD,KAKO;EAIN,GAAKu3H,OAAL,CAAe,CAEdxc,QAAQ,CAACoB,WAAT,CAAuB,KAAK4X,gBAAL,CAAwB/zH,eAAxB,CAA0CD,mBAAjE,CAEA,CAJD,KAIO,CAENg7G,QAAQ,CAACoB,WAAT,CAAuBl8G,gBAAvB,CAEA,CAED,GAAKu3H,KAAL,CAAa,CAEZzc,QAAQ,CAACqB,SAAT,CAAqB,KAAK4X,cAAL,CAAsBh0H,eAAtB,CAAwCD,mBAA7D,CAEA,CAJD,KAIO,CAENg7G,QAAQ,CAACqB,SAAT,CAAuBn8G,gBAAvB,CAEA,CAED,CAED,CAED20H,eAAe,CAAExV,QAAF,CAAYqY,SAAZ,CAAuBC,UAAvB,CAAoC,CAElD,MAAMjF,KAAK,CAAG,KAAKE,MAAnB,CAA2BhtG,GAAG,CAAG8sG,KAAK,CAACpiE,IAAvC,CACA,IAAI8pD,WAAW,CAAG,KAAKoZ,kBAAvB,CAEA,GAAKpZ,WAAW,GAAK,IAArB,CAA4B,CAE3BA,WAAW,CAAGsY,KAAK,CAACwD,uBAAN,EAAd,CACA,KAAK1C,kBAAL,CAA0BpZ,WAA1B,CAEA,CAED,MAAMxC,KAAK,CAAGwC,WAAW,CAACQ,kBAA1B,CACC3lE,MAAM,CAAGmlE,WAAW,CAACS,YADtB,CAGAjD,KAAK,CAAE,CAAF,CAAL,CAAahyF,GAAb,CACAqvB,MAAM,CAAE,CAAF,CAAN,CAAcyiF,SAAd,CACA9f,KAAK,CAAE,CAAF,CAAL,CAAahyF,GAAG,CAAGy5F,QAAnB,CACApqE,MAAM,CAAE,CAAF,CAAN,CAAc0iF,UAAd,CAEA,WAAA,CAEA,CAlrBoB,CAsrBtB,MAAM/wG,cAAN,SAA6BrlB,eAAgB,CAE5C8oB,WAAW,CAAEilG,IAAF,CAAS,CAEnB,QAEA,KAAKiH,KAAL,CAAajH,IAAb,CACA,KAAKsI,kBAAL,GACA,KAAKC,UAAL,CAAkB,CAAlB,CACA,KAAKvnE,IAAL,CAAY,CAAZ,CACA,KAAK6tD,SAAL,CAAiB,GAAjB,CAEA,CAED2Z,WAAW,CAAEhC,MAAF,CAAUiC,eAAV,CAA4B,CAEtC,MAAMzI,IAAI,CAAGwG,MAAM,CAAChD,UAAP,EAAqB,KAAKyD,KAAvC,CACC7d,MAAM,CAAGod,MAAM,CAACjD,KAAP,CAAana,MADvB,CAECqa,OAAO,CAAGra,MAAM,CAAChwF,MAFlB,CAGCmmG,QAAQ,CAAGiH,MAAM,CAAC1C,iBAHnB,CAICJ,YAAY,CAAG8C,MAAM,CAAC3C,aAJvB,CAKC6E,QAAQ,CAAG1I,IAAI,CAAC9lG,IALjB,CAMCyuG,cAAc,CAAG,KAAKC,sBANvB,CAQA,IAAIC,cAAc,CAAGF,cAAc,CAAED,QAAF,CAAnC,CAEA,GAAKG,cAAc,GAAKzwG,SAAxB,CAAoC,CAEnCywG,cAAc,CAAG,EAAjB,CACAF,cAAc,CAAED,QAAF,CAAd,CAA6BG,cAA7B,CAEA,CAED,IAAM,IAAI3vG,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAKuqG,OAAvB,CAAgC,EAAGvqG,CAAnC,CAAuC,CAEtC,MAAMmwF,KAAK,CAAGD,MAAM,CAAElwF,CAAF,CAApB,CACCi4F,SAAS,CAAG9H,KAAK,CAAC/kF,IADnB,CAGA,IAAIq4F,OAAO,CAAGkM,cAAc,CAAE1X,SAAF,CAA5B,CAEA,GAAKwL,OAAO,GAAKvkG,SAAjB,CAA6B,CAE5BmnG,QAAQ,CAAErmG,CAAF,CAAR,CAAgByjG,OAAhB,CAEA,CAJD,KAIO,CAENA,OAAO,CAAG4C,QAAQ,CAAErmG,CAAF,CAAlB,CAEA,GAAKyjG,OAAO,GAAKvkG,SAAjB,CAA6B;EAI5B,GAAKukG,OAAO,CAACoH,WAAR,GAAwB,IAA7B,CAAoC,CAEnC,EAAGpH,OAAO,CAACqB,cAAX,CACA,KAAK8K,mBAAL,CAA0BnM,OAA1B,CAAmC+L,QAAnC,CAA6CvX,SAA7C,EAEA,CAED,SAEA,CAED,MAAMzwC,IAAI,CAAG+nD,eAAe,EAAIA,eAAe,CAC9C3E,iBAD+B,CACZ5qG,CADY,EACRyjG,OADQ,CACAqC,UADhC,CAGArC,OAAO,CAAG,IAAInmG,aAAJ,CACTY,eAAe,CAAC2oG,MAAhB,CAAwBC,IAAxB,CAA8B7O,SAA9B,CAAyCzwC,IAAzC,CADS,CAET2oC,KAAK,CAACa,aAFG,CAEYb,KAAK,CAACE,YAAN,EAFZ,CAAV,CAIA,EAAGoT,OAAO,CAACqB,cAAX,CACA,KAAK8K,mBAAL,CAA0BnM,OAA1B,CAAmC+L,QAAnC,CAA6CvX,SAA7C,EAEAoO,QAAQ,CAAErmG,CAAF,CAAR,CAAgByjG,OAAhB,CAEA,CAED+G,YAAY,CAAExqG,CAAF,CAAZ,CAAkB8xF,YAAlB,CAAiC2R,OAAO,CAAC76D,MAAzC,CAEA,CAED,CAED8iE,eAAe,CAAE4B,MAAF,CAAW,CAEzB,GAAK,CAAE,KAAKvB,eAAL,CAAsBuB,MAAtB,CAAP,CAAwC,CAEvC,GAAKA,MAAM,CAACzC,WAAP,GAAuB,IAA5B,CAAmC;EAGlC;EAEA,MAAM2E,QAAQ,CAAG,CAAElC,MAAM,CAAChD,UAAP,EAAqB,KAAKyD,KAA5B,EAAoC/sG,IAArD,CACC6uG,QAAQ,CAAGvC,MAAM,CAACjD,KAAP,CAAarpG,IADzB,CAEC8uG,cAAc,CAAG,KAAKC,cAAL,CAAqBF,QAArB,CAFlB,CAIA,KAAKP,WAAL,CAAkBhC,MAAlB,CACCwC,cAAc,EAAIA,cAAc,CAACE,YAAf,CAA6B,CAA7B,CADnB,EAGA,KAAKC,kBAAL,CAAyB3C,MAAzB,CAAiCuC,QAAjC,CAA2CL,QAA3C,EAEA,CAED,MAAMnJ,QAAQ,CAAGiH,MAAM,CAAC1C,iBAAxB,CAEA;EACA,IAAM,IAAI5qG,CAAC,CAAG,CAAR,CAAWoB,CAAC,CAAGilG,QAAQ,CAACnmG,MAA9B,CAAsCF,CAAC,GAAKoB,CAA5C,CAA+C,EAAGpB,CAAlD,CAAsD,CAErD,MAAMyjG,OAAO,CAAG4C,QAAQ,CAAErmG,CAAF,CAAxB,CAEA,GAAKyjG,OAAO,CAACoB,QAAR,KAAwB,CAA7B,CAAiC,CAEhC,KAAKqL,YAAL,CAAmBzM,OAAnB,EACAA,OAAO,CAAC6B,iBAAR,GAEA,CAED,CAED,KAAK6K,WAAL,CAAkB7C,MAAlB,EAEA,CAED,CAED3B,iBAAiB,CAAE2B,MAAF,CAAW,CAE3B,GAAK,KAAKvB,eAAL,CAAsBuB,MAAtB,CAAL,CAAsC,CAErC,MAAMjH,QAAQ,CAAGiH,MAAM,CAAC1C,iBAAxB,CAEA;EACA,IAAM,IAAI5qG,CAAC,CAAG,CAAR,CAAWoB,CAAC,CAAGilG,QAAQ,CAACnmG,MAA9B,CAAsCF,CAAC,GAAKoB,CAA5C,CAA+C,EAAGpB,CAAlD,CAAsD,CAErD,MAAMyjG,OAAO,CAAG4C,QAAQ,CAAErmG,CAAF,CAAxB,CAEA,GAAK,EAAGyjG,OAAO,CAACoB,QAAX,GAAwB,CAA7B,CAAiC,CAEhCpB,OAAO,CAAC+B,oBAAR,GACA,KAAK4K,gBAAL,CAAuB3M,OAAvB,EAEA,CAED,CAED,KAAK4M,eAAL,CAAsB/C,MAAtB,EAEA,CAED,CAED;EAEA8B,kBAAkB,EAAG,CAEpB,KAAKkB,QAAL,CAAgB,EAAhB,CAAoB;EACpB,KAAKC,eAAL,CAAuB,CAAvB,CAEA,KAAKR,cAAL,CAAsB,EAAtB,CACA;EACA;EACA;EACA;EACA;EAGA,KAAK9J,SAAL,CAAiB,EAAjB,CAAqB;EACrB,KAAKuK,gBAAL,CAAwB,CAAxB,CAEA,KAAKd,sBAAL,CAA8B,EAA9B,CAAkC;EAGlC,KAAKe,oBAAL,CAA4B,EAA5B,CAAgC;EAChC,KAAKC,2BAAL,CAAmC,CAAnC,CAEA,MAAM/wE,KAAK,CAAG,IAAd,CAEA,KAAKgxE,KAAL,CAAa,CAEZC,OAAO,CAAE,CACR,IAAI5U,KAAJ,EAAY,CAEX,OAAOr8D,KAAK,CAAC2wE,QAAN,CAAepwG,MAAtB,CAEA,CALO,CAMR,IAAI2wG,KAAJ,EAAY,CAEX,OAAOlxE,KAAK,CAAC4wE,eAAb,CAEA,CAVO,CAFG,CAcZlK,QAAQ,CAAE,CACT,IAAIrK,KAAJ,EAAY,CAEX,OAAOr8D,KAAK,CAACsmE,SAAN,CAAgB/lG,MAAvB,CAEA,CALQ,CAMT,IAAI2wG,KAAJ,EAAY,CAEX,OAAOlxE,KAAK,CAAC6wE,gBAAb,CAEA,CAVQ,CAdE,CA0BZM,mBAAmB,CAAE,CACpB,IAAI9U,KAAJ,EAAY,CAEX,OAAOr8D,KAAK,CAAC8wE,oBAAN,CAA2BvwG,MAAlC,CAEA,CALmB,CAMpB,IAAI2wG,KAAJ,EAAY,CAEX,OAAOlxE,KAAK,CAAC+wE,2BAAb,CAEA,CAVmB,CA1BT,CAAb,CAyCA,CAED;EAEA3E,eAAe,CAAEuB,MAAF,CAAW,CAEzB,MAAM7tG,KAAK,CAAG6tG,MAAM,CAACzC,WAArB,CACA,OAAOprG,KAAK,GAAK,IAAV,EAAkBA,KAAK,CAAG,KAAK8wG,eAAtC,CAEA,CAEDN,kBAAkB,CAAE3C,MAAF,CAAUuC,QAAV,CAAoBL,QAApB,CAA+B,CAEhD,MAAMoB,OAAO,CAAG,KAAKN,QAArB,CACCS,aAAa,CAAG,KAAKhB,cADtB,CAGA,IAAID,cAAc,CAAGiB,aAAa,CAAElB,QAAF,CAAlC,CAEA,GAAKC,cAAc,GAAK5wG,SAAxB,CAAoC,CAEnC4wG,cAAc,CAAG,CAEhBE,YAAY,CAAE,CAAE1C,MAAF,CAFE,CAGhB0D,YAAY,CAAE,EAHE,CAAjB,CAOA1D,MAAM,CAACxC,iBAAP,CAA2B,CAA3B,CAEAiG,aAAa,CAAElB,QAAF,CAAb,CAA4BC,cAA5B,CAEA,CAbD,KAaO,CAEN,MAAME,YAAY,CAAGF,cAAc,CAACE,YAApC,CAEA1C,MAAM,CAACxC,iBAAP,CAA2BkF,YAAY,CAAC9vG,MAAxC,CACA8vG,YAAY,CAAC3wG,IAAb,CAAmBiuG,MAAnB,EAEA,CAEDA,MAAM,CAACzC,WAAP,CAAqB+F,OAAO,CAAC1wG,MAA7B,CACA0wG,OAAO,CAACvxG,IAAR,CAAciuG,MAAd,EAEAwC,cAAc,CAACkB,YAAf,CAA6BxB,QAA7B,EAA0ClC,MAA1C,CAEA,CAED2D,qBAAqB,CAAE3D,MAAF,CAAW,CAE/B,MAAMsD,OAAO,CAAG,KAAKN,QAArB,CACCY,kBAAkB,CAAGN,OAAO,CAAEA,OAAO,CAAC1wG,MAAR,CAAiB,CAAnB,CAD7B,CAECixG,UAAU,CAAG7D,MAAM,CAACzC,WAFrB,CAIAqG,kBAAkB,CAACrG,WAAnB,CAAiCsG,UAAjC,CACAP,OAAO,CAAEO,UAAF,CAAP,CAAwBD,kBAAxB,CACAN,OAAO,CAACngD,GAAR,GAEA68C,MAAM,CAACzC,WAAP,CAAqB,IAArB,CAGA,MAAMgF,QAAQ,CAAGvC,MAAM,CAACjD,KAAP,CAAarpG,IAA9B,CACC+vG,aAAa,CAAG,KAAKhB,cADtB,CAECD,cAAc,CAAGiB,aAAa,CAAElB,QAAF,CAF/B,CAGCuB,mBAAmB,CAAGtB,cAAc,CAACE,YAHtC,CAKCqB,eAAe,CACdD,mBAAmB,CAAEA,mBAAmB,CAAClxG,MAApB,CAA6B,CAA/B,CANrB,CAQCoxG,gBAAgB,CAAGhE,MAAM,CAACxC,iBAR3B,CAUAuG,eAAe,CAACvG,iBAAhB,CAAoCwG,gBAApC,CACAF,mBAAmB,CAAEE,gBAAF,CAAnB,CAA0CD,eAA1C,CACAD,mBAAmB,CAAC3gD,GAApB,GAEA68C,MAAM,CAACxC,iBAAP,CAA2B,IAA3B,CAGA,MAAMkG,YAAY,CAAGlB,cAAc,CAACkB,YAApC,CACCxB,QAAQ,CAAG,CAAElC,MAAM,CAAChD,UAAP,EAAqB,KAAKyD,KAA5B,EAAoC/sG,IADhD,CAGA,OAAOgwG,YAAY,CAAExB,QAAF,CAAnB,CAEA,GAAK4B,mBAAmB,CAAClxG,MAApB,GAA+B,CAApC,CAAwC,CAEvC,OAAO6wG,aAAa,CAAElB,QAAF,CAApB,CAEA,CAED,KAAK0B,gCAAL,CAAuCjE,MAAvC,EAEA,CAEDiE,gCAAgC,CAAEjE,MAAF,CAAW,CAE1C,MAAMjH,QAAQ,CAAGiH,MAAM,CAAC1C,iBAAxB,CAEA,IAAM,IAAI5qG,CAAC,CAAG,CAAR,CAAWoB,CAAC,CAAGilG,QAAQ,CAACnmG,MAA9B,CAAsCF,CAAC,GAAKoB,CAA5C,CAA+C,EAAGpB,CAAlD,CAAsD,CAErD,MAAMyjG,OAAO,CAAG4C,QAAQ,CAAErmG,CAAF,CAAxB,CAEA,GAAK,EAAGyjG,OAAO,CAACqB,cAAX,GAA8B,CAAnC,CAAuC,CAEtC,KAAK0M,sBAAL,CAA6B/N,OAA7B,EAEA,CAED,CAED,CAED0M,WAAW,CAAE7C,MAAF,CAAW;EAGrB;EACA;EACA;EACA;EAEA,MAAMsD,OAAO,CAAG,KAAKN,QAArB,CACCmB,SAAS,CAAGnE,MAAM,CAACzC,WADpB,CAGC6G,eAAe,CAAG,KAAKnB,eAAL,EAHnB,CAKCoB,mBAAmB,CAAGf,OAAO,CAAEc,eAAF,CAL9B,CAOApE,MAAM,CAACzC,WAAP,CAAqB6G,eAArB,CACAd,OAAO,CAAEc,eAAF,CAAP,CAA6BpE,MAA7B,CAEAqE,mBAAmB,CAAC9G,WAApB,CAAkC4G,SAAlC,CACAb,OAAO,CAAEa,SAAF,CAAP,CAAuBE,mBAAvB,CAEA,CAEDtB,eAAe,CAAE/C,MAAF,CAAW;EAGzB;EACA;EACA;EACA;EAEA,MAAMsD,OAAO,CAAG,KAAKN,QAArB,CACCmB,SAAS,CAAGnE,MAAM,CAACzC,WADpB,CAGC+G,kBAAkB,CAAG,EAAG,KAAKrB,eAH9B,CAKCsB,gBAAgB,CAAGjB,OAAO,CAAEgB,kBAAF,CAL3B,CAOAtE,MAAM,CAACzC,WAAP,CAAqB+G,kBAArB,CACAhB,OAAO,CAAEgB,kBAAF,CAAP,CAAgCtE,MAAhC,CAEAuE,gBAAgB,CAAChH,WAAjB,CAA+B4G,SAA/B,CACAb,OAAO,CAAEa,SAAF,CAAP,CAAuBI,gBAAvB,CAEA,CAED;EAEAjC,mBAAmB,CAAEnM,OAAF,CAAW+L,QAAX,CAAqBvX,SAArB,CAAiC,CAEnD,MAAMwX,cAAc,CAAG,KAAKC,sBAA5B,CACCrJ,QAAQ,CAAG,KAAKJ,SADjB,CAGA,IAAI6L,aAAa,CAAGrC,cAAc,CAAED,QAAF,CAAlC,CAEA,GAAKsC,aAAa,GAAK5yG,SAAvB,CAAmC,CAElC4yG,aAAa,CAAG,EAAhB,CACArC,cAAc,CAAED,QAAF,CAAd,CAA6BsC,aAA7B,CAEA,CAEDA,aAAa,CAAE7Z,SAAF,CAAb,CAA6BwL,OAA7B,CAEAA,OAAO,CAACoH,WAAR,CAAsBxE,QAAQ,CAACnmG,MAA/B,CACAmmG,QAAQ,CAAChnG,IAAT,CAAeokG,OAAf,EAEA,CAED+N,sBAAsB,CAAE/N,OAAF,CAAY,CAEjC,MAAM4C,QAAQ,CAAG,KAAKJ,SAAtB,CACC8L,WAAW,CAAGtO,OAAO,CAACA,OADvB,CAEC+L,QAAQ,CAAGuC,WAAW,CAACxL,QAAZ,CAAqBvlG,IAFjC,CAGCi3F,SAAS,CAAG8Z,WAAW,CAACvqD,IAHzB,CAICioD,cAAc,CAAG,KAAKC,sBAJvB,CAKCoC,aAAa,CAAGrC,cAAc,CAAED,QAAF,CAL/B,CAOCwC,mBAAmB,CAAG3L,QAAQ,CAAEA,QAAQ,CAACnmG,MAAT,CAAkB,CAApB,CAP/B,CAQCixG,UAAU,CAAG1N,OAAO,CAACoH,WARtB,CAUAmH,mBAAmB,CAACnH,WAApB,CAAkCsG,UAAlC,CACA9K,QAAQ,CAAE8K,UAAF,CAAR,CAAyBa,mBAAzB,CACA3L,QAAQ,CAAC51C,GAAT,GAEA,OAAOqhD,aAAa,CAAE7Z,SAAF,CAApB,CAEA,GAAK7qF,MAAM,CAAC+wB,IAAP,CAAa2zE,aAAb,EAA6B5xG,MAA7B,GAAwC,CAA7C,CAAiD,CAEhD,OAAOuvG,cAAc,CAAED,QAAF,CAArB,CAEA,CAED,CAEDU,YAAY,CAAEzM,OAAF,CAAY,CAEvB,MAAM4C,QAAQ,CAAG,KAAKJ,SAAtB,CACCwL,SAAS,CAAGhO,OAAO,CAACoH,WADrB,CAGC6G,eAAe,CAAG,KAAKlB,gBAAL,EAHnB,CAKCyB,oBAAoB,CAAG5L,QAAQ,CAAEqL,eAAF,CALhC,CAOAjO,OAAO,CAACoH,WAAR,CAAsB6G,eAAtB,CACArL,QAAQ,CAAEqL,eAAF,CAAR,CAA8BjO,OAA9B,CAEAwO,oBAAoB,CAACpH,WAArB,CAAmC4G,SAAnC,CACApL,QAAQ,CAAEoL,SAAF,CAAR,CAAwBQ,oBAAxB,CAEA,CAED7B,gBAAgB,CAAE3M,OAAF,CAAY,CAE3B,MAAM4C,QAAQ,CAAG,KAAKJ,SAAtB,CACCwL,SAAS,CAAGhO,OAAO,CAACoH,WADrB,CAGC+G,kBAAkB,CAAG,EAAG,KAAKpB,gBAH9B,CAKC0B,iBAAiB,CAAG7L,QAAQ,CAAEuL,kBAAF,CAL7B,CAOAnO,OAAO,CAACoH,WAAR,CAAsB+G,kBAAtB,CACAvL,QAAQ,CAAEuL,kBAAF,CAAR,CAAiCnO,OAAjC,CAEAyO,iBAAiB,CAACrH,WAAlB,CAAgC4G,SAAhC,CACApL,QAAQ,CAAEoL,SAAF,CAAR,CAAwBS,iBAAxB,CAEA,CAGD;EAEAxE,uBAAuB,EAAG,CAEzB,MAAMlD,YAAY,CAAG,KAAKiG,oBAA1B,CACCiB,eAAe,CAAG,KAAKhB,2BAAL,EADnB,CAGA,IAAI9e,WAAW,CAAG4Y,YAAY,CAAEkH,eAAF,CAA9B,CAEA,GAAK9f,WAAW,GAAK1yF,SAArB,CAAiC,CAEhC0yF,WAAW,CAAG,IAAIz5F,iBAAJ,CACb,IAAIqhC,YAAJ,CAAkB,CAAlB,CADa,CACU,IAAIA,YAAJ,CAAkB,CAAlB,CADV,CAEb,CAFa,CAEV,KAAK24E,gCAFK,CAAd,CAIAvgB,WAAW,CAACwgB,YAAZ,CAA2BV,eAA3B,CACAlH,YAAY,CAAEkH,eAAF,CAAZ,CAAkC9f,WAAlC,CAEA,CAED,OAAOA,WAAP,CAEA,CAEDqb,2BAA2B,CAAErb,WAAF,CAAgB,CAE1C,MAAM4Y,YAAY,CAAG,KAAKiG,oBAA1B,CACCgB,SAAS,CAAG7f,WAAW,CAACwgB,YADzB,CAGCR,kBAAkB,CAAG,EAAG,KAAKlB,2BAH9B,CAKC2B,qBAAqB,CAAG7H,YAAY,CAAEoH,kBAAF,CALrC,CAOAhgB,WAAW,CAACwgB,YAAZ,CAA2BR,kBAA3B,CACApH,YAAY,CAAEoH,kBAAF,CAAZ,CAAqChgB,WAArC,CAEAygB,qBAAqB,CAACD,YAAtB,CAAqCX,SAArC,CACAjH,YAAY,CAAEiH,SAAF,CAAZ,CAA4BY,qBAA5B,CAEA,CAED;EACA;EACA;EACAC,UAAU,CAAEriB,IAAF,CAAQsiB,YAAR,CAAsBpgB,SAAtB,CAAkC,CAE3C,MAAM2U,IAAI,CAAGyL,YAAY,EAAI,KAAKxE,KAAlC,CACCyB,QAAQ,CAAG1I,IAAI,CAAC9lG,IADjB,CAGA,IAAIwxG,UAAU,CAAG,OAAOviB,IAAP,GAAgB,QAAhB,CAA2Bp3F,aAAa,CAACw+F,UAAd,CAA0ByP,IAA1B,CAAgC7W,IAAhC,CAA3B,CAAoEA,IAArF,CAEA,MAAM4f,QAAQ,CAAG2C,UAAU,GAAK,IAAf,CAAsBA,UAAU,CAACxxG,IAAjC,CAAwCivF,IAAzD,CAEA,MAAM6f,cAAc,CAAG,KAAKC,cAAL,CAAqBF,QAArB,CAAvB,CACA,IAAIN,eAAe,CAAG,IAAtB,CAEA,GAAKpd,SAAS,GAAKjzF,SAAnB,CAA+B,CAE9B,GAAKszG,UAAU,GAAK,IAApB,CAA2B,CAE1BrgB,SAAS,CAAGqgB,UAAU,CAACrgB,SAAvB,CAEA,CAJD,KAIO,CAENA,SAAS,CAAGx6G,wBAAZ,CAEA,CAED,CAED,GAAKm4H,cAAc,GAAK5wG,SAAxB,CAAoC,CAEnC,MAAMuzG,cAAc,CAAG3C,cAAc,CAACkB,YAAf,CAA6BxB,QAA7B,CAAvB,CAEA,GAAKiD,cAAc,GAAKvzG,SAAnB,EAAgCuzG,cAAc,CAACtgB,SAAf,GAA6BA,SAAlE,CAA8E,CAE7E,OAAOsgB,cAAP,CAEA,CAED;EACA;EACAlD,eAAe,CAAGO,cAAc,CAACE,YAAf,CAA6B,CAA7B,CAAlB,CAEA;EACA,GAAKwC,UAAU,GAAK,IAApB,CACCA,UAAU,CAAGjD,eAAe,CAAClF,KAA7B,CAED,CAED;EACA,GAAKmI,UAAU,GAAK,IAApB,CAA2B,WAAA,CAE3B;EACA,MAAME,SAAS,CAAG,IAAIv0G,eAAJ,CAAqB,IAArB,CAA2Bq0G,UAA3B,CAAuCD,YAAvC,CAAqDpgB,SAArD,CAAlB,CAEA,KAAKmd,WAAL,CAAkBoD,SAAlB,CAA6BnD,eAA7B,EAEA;EACA,KAAKU,kBAAL,CAAyByC,SAAzB,CAAoC7C,QAApC,CAA8CL,QAA9C,EAEA,OAAOkD,SAAP,CAEA,CAED;EACAD,cAAc,CAAExiB,IAAF,CAAQsiB,YAAR,CAAuB,CAEpC,MAAMzL,IAAI,CAAGyL,YAAY,EAAI,KAAKxE,KAAlC,CACCyB,QAAQ,CAAG1I,IAAI,CAAC9lG,IADjB,CAGCwxG,UAAU,CAAG,OAAOviB,IAAP,GAAgB,QAAhB,CACZp3F,aAAa,CAACw+F,UAAd,CAA0ByP,IAA1B,CAAgC7W,IAAhC,CADY,CAC6BA,IAJ3C,CAMC4f,QAAQ,CAAG2C,UAAU,CAAGA,UAAU,CAACxxG,IAAd,CAAqBivF,IAN3C,CAQC6f,cAAc,CAAG,KAAKC,cAAL,CAAqBF,QAArB,CARlB,CAUA,GAAKC,cAAc,GAAK5wG,SAAxB,CAAoC,CAEnC,OAAO4wG,cAAc,CAACkB,YAAf,CAA6BxB,QAA7B,GAA2C,IAAlD,CAEA,CAED,WAAA,CAEA,CAED;EACAmD,aAAa,EAAG,CAEf,MAAM/B,OAAO,CAAG,KAAKN,QAArB,CACCsC,QAAQ,CAAG,KAAKrC,eADjB,CAGA,IAAM,IAAIvwG,CAAC,CAAG4yG,QAAQ,CAAG,CAAzB,CAA4B5yG,CAAC,EAAI,CAAjC,CAAoC,EAAGA,CAAvC,CAA2C,CAE1C4wG,OAAO,CAAE5wG,CAAF,CAAP,CAAaioC,IAAb,GAEA,CAED,WAAA,CAEA,CAED;EACAzzB,MAAM,CAAEy5F,SAAF,CAAc,CAEnBA,SAAS,EAAI,KAAKtY,SAAlB,CAEA,MAAMib,OAAO,CAAG,KAAKN,QAArB,CACCsC,QAAQ,CAAG,KAAKrC,eADjB,CAGCzoE,IAAI,CAAG,KAAKA,IAAL,EAAammE,SAHrB,CAICC,aAAa,CAAG9tG,IAAI,CAAC1J,IAAL,CAAWu3G,SAAX,CAJjB,CAMCjJ,SAAS,CAAG,KAAKqK,UAAL,EAAmB,CANhC,CAQA;EAEA,IAAM,IAAIrvG,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAK4yG,QAAvB,CAAiC,EAAG5yG,CAApC,CAAwC,CAEvC,MAAMstG,MAAM,CAAGsD,OAAO,CAAE5wG,CAAF,CAAtB,CAEAstG,MAAM,CAACU,OAAP,CAAgBlmE,IAAhB,CAAsBmmE,SAAtB,CAAiCC,aAAjC,CAAgDlJ,SAAhD,EAEA,CAED;EAEA,MAAMqB,QAAQ,CAAG,KAAKJ,SAAtB,CACC4M,SAAS,CAAG,KAAKrC,gBADlB,CAGA,IAAM,IAAIxwG,CAAC,CAAG,CAAd,CAAiBA,CAAC,GAAK6yG,SAAvB,CAAkC,EAAG7yG,CAArC,CAAyC,CAExCqmG,QAAQ,CAAErmG,CAAF,CAAR,CAAck+D,KAAd,CAAqB8mC,SAArB,EAEA,CAED,WAAA,CAEA,CAED;EACA8N,OAAO,CAAEC,aAAF,CAAkB,CAExB,KAAKjrE,IAAL,CAAY,CAAZ,CAAe;EACf,IAAM,IAAI9nC,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAG,KAAKswG,QAAL,CAAcpwG,MAAnC,CAA2CF,CAAC,EAA5C,CAAkD,CAEjD,KAAKswG,QAAL,CAAetwG,CAAf,EAAmB8nC,IAAnB,CAA0B,CAA1B,CAA6B;EAE7B,CAED,YAAYtzB,MAAL,CAAau+F,aAAb,CAAP,CAAqC;EAErC,CAED;EACAjF,OAAO,EAAG,CAET,YAAYC,KAAZ,CAEA,CAED;EACAiF,WAAW,CAAE/iB,IAAF,CAAS,CAEnB,MAAM2gB,OAAO,CAAG,KAAKN,QAArB,CACCT,QAAQ,CAAG5f,IAAI,CAACjvF,IADjB,CAEC+vG,aAAa,CAAG,KAAKhB,cAFtB,CAGCD,cAAc,CAAGiB,aAAa,CAAElB,QAAF,CAH/B,CAKA,GAAKC,cAAc,GAAK5wG,SAAxB,CAAoC;EAGnC;EACA;EAEA,MAAM+zG,eAAe,CAAGnD,cAAc,CAACE,YAAvC,CAEA,IAAM,IAAIhwG,CAAC,CAAG,CAAR,CAAWoB,CAAC,CAAG6xG,eAAe,CAAC/yG,MAArC,CAA6CF,CAAC,GAAKoB,CAAnD,CAAsD,EAAGpB,CAAzD,CAA6D,CAE5D,MAAMstG,MAAM,CAAG2F,eAAe,CAAEjzG,CAAF,CAA9B,CAEA,KAAK2rG,iBAAL,CAAwB2B,MAAxB,EAEA,MAAM6D,UAAU,CAAG7D,MAAM,CAACzC,WAA1B,CACCqG,kBAAkB,CAAGN,OAAO,CAAEA,OAAO,CAAC1wG,MAAR,CAAiB,CAAnB,CAD7B,CAGAotG,MAAM,CAACzC,WAAP,CAAqB,IAArB,CACAyC,MAAM,CAACxC,iBAAP,CAA2B,IAA3B,CAEAoG,kBAAkB,CAACrG,WAAnB,CAAiCsG,UAAjC,CACAP,OAAO,CAAEO,UAAF,CAAP,CAAwBD,kBAAxB,CACAN,OAAO,CAACngD,GAAR,GAEA,KAAK8gD,gCAAL,CAAuCjE,MAAvC,EAEA,CAED,OAAOyD,aAAa,CAAElB,QAAF,CAApB,CAEA,CAED,CAED;EACAqD,WAAW,CAAEpM,IAAF,CAAS,CAEnB,MAAM0I,QAAQ,CAAG1I,IAAI,CAAC9lG,IAAtB,CACC+vG,aAAa,CAAG,KAAKhB,cADtB,CAGA,IAAM,MAAMF,QAAZ,IAAwBkB,aAAxB,CAAwC,CAEvC,MAAMC,YAAY,CAAGD,aAAa,CAAElB,QAAF,CAAb,CAA0BmB,YAA/C,CACC1D,MAAM,CAAG0D,YAAY,CAAExB,QAAF,CADtB,CAGA,GAAKlC,MAAM,GAAKpuG,SAAhB,CAA4B,CAE3B,KAAKysG,iBAAL,CAAwB2B,MAAxB,EACA,KAAK2D,qBAAL,CAA4B3D,MAA5B,EAEA,CAED,CAED,MAAMmC,cAAc,CAAG,KAAKC,sBAA5B,CACCoC,aAAa,CAAGrC,cAAc,CAAED,QAAF,CAD/B,CAGA,GAAKsC,aAAa,GAAK5yG,SAAvB,CAAmC,CAElC,IAAM,MAAM+4F,SAAZ,IAAyB6Z,aAAzB,CAAyC,CAExC,MAAMrO,OAAO,CAAGqO,aAAa,CAAE7Z,SAAF,CAA7B,CACAwL,OAAO,CAAC+B,oBAAR,GACA,KAAKgM,sBAAL,CAA6B/N,OAA7B,EAEA,CAED,CAED,CAED;EACA0P,aAAa,CAAEljB,IAAF,CAAQsiB,YAAR,CAAuB,CAEnC,MAAMjF,MAAM,CAAG,KAAKmF,cAAL,CAAqBxiB,IAArB,CAA2BsiB,YAA3B,CAAf,CAEA,GAAKjF,MAAM,GAAK,IAAhB,CAAuB,CAEtB,KAAK3B,iBAAL,CAAwB2B,MAAxB,EACA,KAAK2D,qBAAL,CAA4B3D,MAA5B,EAEA,CAED,CAhvB2C,CAovB7ClvG,cAAc,CAACoI,SAAf,CAAyB2rG,gCAAzB,CAA4D,IAAI34E,YAAJ,CAAkB,CAAlB,CAA5D,CAyBA,MAAMn7B,0BAAN,SAAyC9M,iBAAkB,CAE1DsQ,WAAW,CAAE/B,KAAF,CAASi+B,MAAT,CAAiB8Y,gBAAgB,CAAG,CAApC,CAAwC,CAElD,MAAO/2C,KAAP,CAAci+B,MAAd,EAEA,KAAK8Y,gBAAL,CAAwBA,gBAAxB,CAEA,CAEDp0C,IAAI,CAAE0L,MAAF,CAAW,CAEd,MAAM1L,IAAN,CAAY0L,MAAZ,EAEA,KAAK0oC,gBAAL,CAAwB1oC,MAAM,CAAC0oC,gBAA/B,CAEA,WAAA,CAEA,CAEDr0C,KAAK,CAAEkN,IAAF,CAAS,CAEb,MAAMoqE,EAAE,CAAG,MAAMt3E,KAAN,CAAakN,IAAb,CAAX,CAEAoqE,EAAE,CAACjjC,gBAAH,CAAsB,KAAKA,gBAA3B,CAEA,OAAOijC,EAAP,CAEA,CAED1iF,MAAM,CAAEsY,IAAF,CAAS,CAEd,MAAMqwE,IAAI,CAAG,MAAM3oF,MAAN,CAAcsY,IAAd,CAAb,CAEAqwE,IAAI,CAACtoC,4BAAL,CAAoC,IAApC,CACAsoC,IAAI,CAAClpC,gBAAL,CAAwB,KAAKA,gBAA7B,CAEA,OAAOkpC,IAAP,CAEA,CAvCyD,CA2C3D1hF,0BAA0B,CAACmI,SAA3B,CAAqCixC,4BAArC,CAAoE,IAApE,CA6rBA,MAAMn5C,SAAS,cAAiB,IAAIjkB,OAAJ,EAAhC,CACA,MAAMkkB,WAAW,cAAiB,IAAIniB,OAAJ,EAAlC,CACA,MAAMoiB,eAAe,cAAiB,IAAIpiB,OAAJ,EAAtC,CAGA,MAAMqiB,cAAN,SAA6BzK,YAAa,CAEzC6N,WAAW,CAAE0Z,MAAF,CAAW,CAErB,MAAM8zC,KAAK,CAAG3wD,WAAW,CAAE6c,MAAF,CAAzB,CAEA,MAAMW,QAAQ,CAAG,IAAI57B,cAAJ,EAAjB,CAEA,MAAMs/C,QAAQ,CAAG,EAAjB,CACA,MAAMjH,MAAM,CAAG,EAAf,CAEA,MAAMjB,MAAM,CAAG,IAAIr4C,KAAJ,CAAW,CAAX,CAAc,CAAd,CAAiB,CAAjB,CAAf,CACA,MAAMs4C,MAAM,CAAG,IAAIt4C,KAAJ,CAAW,CAAX,CAAc,CAAd,CAAiB,CAAjB,CAAf,CAEA,IAAM,IAAI2gB,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGqvD,KAAK,CAACnvD,MAA3B,CAAmCF,CAAC,EAApC,CAA0C,CAEzC,MAAMwnG,IAAI,CAAGn4C,KAAK,CAAErvD,CAAF,CAAlB,CAEA,GAAKwnG,IAAI,CAACtgF,MAAL,EAAesgF,IAAI,CAACtgF,MAAL,CAAY2zD,MAAhC,CAAyC,CAExCj7C,QAAQ,CAACvgC,IAAT,CAAe,CAAf,CAAkB,CAAlB,CAAqB,CAArB,EACAugC,QAAQ,CAACvgC,IAAT,CAAe,CAAf,CAAkB,CAAlB,CAAqB,CAArB,EACAs5B,MAAM,CAACt5B,IAAP,CAAaq4B,MAAM,CAACvtB,CAApB,CAAuButB,MAAM,CAACnuB,CAA9B,CAAiCmuB,MAAM,CAACv0B,CAAxC,EACAw1B,MAAM,CAACt5B,IAAP,CAAas4B,MAAM,CAACxtB,CAApB,CAAuBwtB,MAAM,CAACpuB,CAA9B,CAAiCouB,MAAM,CAACx0B,CAAxC,EAEA,CAED,CAED+Y,QAAQ,CAACie,YAAT,CAAuB,UAAvB,CAAmC,IAAIt6C,sBAAJ,CAA4B+/C,QAA5B,CAAsC,CAAtC,CAAnC,EACA1jB,QAAQ,CAACie,YAAT,CAAuB,OAAvB,CAAgC,IAAIt6C,sBAAJ,CAA4B84C,MAA5B,CAAoC,CAApC,CAAhC,EAEA,MAAMvM,QAAQ,CAAG,IAAI74B,iBAAJ,CAAuB,CAAEu7B,YAAY,CAAE,IAAhB,CAAsBU,SAAS,CAAE,KAAjC,CAAwCC,UAAU,CAAE,KAApD,CAA2DqB,UAAU,CAAE,KAAvE,CAA8E9B,WAAW,CAAE,IAA3F,CAAvB,CAAjB,CAEA,MAAO9S,QAAP,CAAiBkQ,QAAjB,EAEA,KAAKrtB,IAAL,CAAY,gBAAZ,CACA,KAAKq0G,gBAAL,CAAwB,IAAxB,CAEA,KAAKtM,IAAL,CAAYvrF,MAAZ,CACA,KAAK8zC,KAAL,CAAaA,KAAb,CAEA,KAAKrkD,MAAL,CAAcuQ,MAAM,CAAC9C,WAArB,CACA,KAAKhL,gBAAL,CAAwB,KAAxB,CAEA,CAEDgd,iBAAiB,CAAEC,KAAF,CAAU,CAE1B,MAAM2kC,KAAK,CAAG,KAAKA,KAAnB,CAEA,MAAMnzC,QAAQ,CAAG,KAAKA,QAAtB,CACA,MAAM2I,QAAQ,CAAG3I,QAAQ,CAACge,YAAT,CAAuB,UAAvB,CAAjB,CAEA17B,eAAe,CAACiE,IAAhB,CAAsB,KAAKqkG,IAAL,CAAUruF,WAAhC,EAA8ChP,MAA9C,GAEA,IAAM,IAAIzJ,CAAC,CAAG,CAAR,CAAW2d,CAAC,CAAG,CAArB,CAAwB3d,CAAC,CAAGqvD,KAAK,CAACnvD,MAAlC,CAA0CF,CAAC,EAA3C,CAAiD,CAEhD,MAAMwnG,IAAI,CAAGn4C,KAAK,CAAErvD,CAAF,CAAlB,CAEA,GAAKwnG,IAAI,CAACtgF,MAAL,EAAesgF,IAAI,CAACtgF,MAAL,CAAY2zD,MAAhC,CAAyC,CAExCt8E,WAAW,CAACuJ,gBAAZ,CAA8BtJ,eAA9B,CAA+CgpG,IAAI,CAAC/uF,WAApD,EACAna,SAAS,CAAC0b,qBAAV,CAAiCzb,WAAjC,EACAsmB,QAAQ,CAACoU,MAAT,CAAiBtb,CAAjB,CAAoBrf,SAAS,CAACgD,CAA9B,CAAiChD,SAAS,CAACiD,CAA3C,CAA8CjD,SAAS,CAACqR,CAAxD,EAEApR,WAAW,CAACuJ,gBAAZ,CAA8BtJ,eAA9B,CAA+CgpG,IAAI,CAACtgF,MAAL,CAAYzO,WAA3D,EACAna,SAAS,CAAC0b,qBAAV,CAAiCzb,WAAjC,EACAsmB,QAAQ,CAACoU,MAAT,CAAiBtb,CAAC,CAAG,CAArB,CAAwBrf,SAAS,CAACgD,CAAlC,CAAqChD,SAAS,CAACiD,CAA/C,CAAkDjD,SAAS,CAACqR,CAA5D,EAEAgO,CAAC,EAAI,CAAL,CAEA,CAED,CAEDzB,QAAQ,CAACge,YAAT,CAAuB,UAAvB,EAAoC5qB,WAApC,CAAkD,IAAlD,CAEA,MAAMmb,iBAAN,CAAyBC,KAAzB,EAEA,CAhFwC,CAqF1C,SAAShsB,WAAT,CAAsB6c,MAAtB,CAA+B,CAE9B,MAAM83F,QAAQ,CAAG,EAAjB,CAEA,GAAK93F,MAAM,EAAIA,MAAM,CAACs/D,MAAtB,CAA+B,CAE9Bw4B,QAAQ,CAACh0G,IAAT,CAAekc,MAAf,EAEA,CAED,IAAM,IAAIvb,CAAC,CAAG,CAAd,CAAiBA,CAAC,CAAGub,MAAM,CAACe,QAAP,CAAgBpc,MAArC,CAA6CF,CAAC,EAA9C,CAAoD,CAEnDqzG,QAAQ,CAACh0G,IAAT,CAAc6+D,KAAd,CAAqBm1C,QAArB,CAA+B30G,WAAW,CAAE6c,MAAM,CAACe,QAAP,CAAiBtc,CAAjB,CAAF,CAA1C,EAEA,CAED,OAAOqzG,QAAP,CAEA,CAiKD,MAAM10G,UAAN,SAAyB3K,YAAa,CAErC6N,WAAW,CAAEuZ,IAAI,CAAG,EAAT,CAAa4iE,SAAS,CAAG,EAAzB,CAA6BtmD,MAAM,CAAG,QAAtC,CAAgDC,MAAM,CAAG,QAAzD,CAAoE,CAE9ED,MAAM,CAAG,IAAIr4C,KAAJ,CAAWq4C,MAAX,CAAT,CACAC,MAAM,CAAG,IAAIt4C,KAAJ,CAAWs4C,MAAX,CAAT,CAEA,MAAMzxB,MAAM,CAAG83E,SAAS,CAAG,CAA3B,CACA,MAAMpoE,IAAI,CAAGwF,IAAI,CAAG4iE,SAApB,CACA,MAAM3iE,QAAQ,CAAGD,IAAI,CAAG,CAAxB,CAEA,MAAMwkB,QAAQ,CAAG,EAAjB,CAAqBjH,MAAM,CAAG,EAA9B,CAEA,IAAM,IAAI34B,CAAC,CAAG,CAAR,CAAW2d,CAAC,CAAG,CAAf,CAAkB26C,CAAC,CAAG,CAAEj9C,QAA9B,CAAwCrb,CAAC,EAAIg+E,SAA7C,CAAwDh+E,CAAC,GAAKs4D,CAAC,EAAI1iD,IAAnE,CAA0E,CAEzEgqB,QAAQ,CAACvgC,IAAT,CAAe,CAAEgc,QAAjB,CAA2B,CAA3B,CAA8Bi9C,CAA9B,CAAiCj9C,QAAjC,CAA2C,CAA3C,CAA8Ci9C,CAA9C,EACA14B,QAAQ,CAACvgC,IAAT,CAAei5D,CAAf,CAAkB,CAAlB,CAAqB,CAAEj9C,QAAvB,CAAiCi9C,CAAjC,CAAoC,CAApC,CAAuCj9C,QAAvC,EAEA,MAAMoW,KAAK,CAAGzxB,CAAC,GAAKkG,MAAN,CAAewxB,MAAf,CAAwBC,MAAtC,CAEAlG,KAAK,CAAC7rB,OAAN,CAAe+yB,MAAf,CAAuBhb,CAAvB,EAA4BA,CAAC,EAAI,CAAL,CAC5B8T,KAAK,CAAC7rB,OAAN,CAAe+yB,MAAf,CAAuBhb,CAAvB,EAA4BA,CAAC,EAAI,CAAL,CAC5B8T,KAAK,CAAC7rB,OAAN,CAAe+yB,MAAf,CAAuBhb,CAAvB,EAA4BA,CAAC,EAAI,CAAL,CAC5B8T,KAAK,CAAC7rB,OAAN,CAAe+yB,MAAf,CAAuBhb,CAAvB,EAA4BA,CAAC,EAAI,CAAL,CAE5B,CAED,MAAMzB,QAAQ,CAAG,IAAI57B,cAAJ,EAAjB,CACA47B,QAAQ,CAACie,YAAT,CAAuB,UAAvB,CAAmC,IAAIt6C,sBAAJ,CAA4B+/C,QAA5B,CAAsC,CAAtC,CAAnC,EACA1jB,QAAQ,CAACie,YAAT,CAAuB,OAAvB,CAAgC,IAAIt6C,sBAAJ,CAA4B84C,MAA5B,CAAoC,CAApC,CAAhC,EAEA,MAAMvM,QAAQ,CAAG,IAAI74B,iBAAJ,CAAuB,CAAEu7B,YAAY,CAAE,IAAhB,CAAsBgC,UAAU,CAAE,KAAlC,CAAvB,CAAjB,CAEA,MAAO5U,QAAP,CAAiBkQ,QAAjB,EAEA,KAAKrtB,IAAL,CAAY,YAAZ,CAEA,CArCoC,CAogCtC,MAAMH,UAAU,CAAG,IAAI46B,YAAJ,CAAkB,CAAlB,CAAnB,CACmB,IAAIyP,UAAJ,CAAgBrqC,UAAU,CAACgqC,MAA3B,EAwNnBnvC,KAAK,CAACotG,MAAN,CAAe,SAAWyM,SAAX,CAAsB31B,QAAtB,CAAiC,CAE/C96E,OAAO,CAAClB,GAAR,CAAa,0CAAb,EAEA2xG,SAAS,CAAC9sG,SAAV,CAAsB4G,MAAM,CAACy5F,MAAP,CAAeptG,KAAK,CAAC+M,SAArB,CAAtB,CACA8sG,SAAS,CAAC9sG,SAAV,CAAoB3E,WAApB,CAAkCyxG,SAAlC,CACAA,SAAS,CAAC9sG,SAAV,CAAoBm3E,QAApB,CAA+BA,QAA/B,CAEA,OAAO21B,SAAP,CAEA,CAVD,CAYA;EAEAj4G,IAAI,CAACmL,SAAL,CAAe+sG,UAAf,CAA4B,SAAWv4F,MAAX,CAAoB,CAE/CnY,OAAO,CAACC,IAAR,CAAc,iEAAd,EACA,YAAYiY,aAAL,CAAoBC,MAApB,CAAP,CAEA,CALD,CAOA;EAuBArc,UAAU,CAAC6H,SAAX,CAAqBgtG,SAArB,CAAiC,UAAY,CAE5C3wG,OAAO,CAAC8D,KAAR,CAAe,0FAAf,EAEA,CAJD,CAMAlI,cAAc,CAAC+H,SAAf,CAAyBgO,MAAzB,CAAkC,UAAY,CAE7C3R,OAAO,CAAC8D,KAAR,CAAe,8DAAf,EAEA,CAJD,CAeAxN,MAAM,CAACqN,SAAP,CAAiB+4F,cAAjB,CAAkC,SAAWxwF,GAAX,CAAiB,CAElDlM,OAAO,CAACC,IAAR,CAAc,sGAAd,EACA,OAAOnG,WAAW,CAAC4iG,cAAZ,CAA4BxwF,GAA5B,CAAP,CAEA,CALD,CAOA5V,MAAM,CAACs6G,QAAP,CAAkB,CAEjB9wG,GAAG,CAAE,6BAAiC,CAErCE,OAAO,CAAC8D,KAAR,CAAe,yFAAf,EAEA,CANgB,CAQjB+iC,GAAG,CAAE,oBAAwB,CAE5B7mC,OAAO,CAAC8D,KAAR,CAAe,yFAAf,EAEA,CAZgB,CAAlB,CA8DAnsB,IAAI,CAACgsB,SAAL,CAAeN,MAAf,CAAwB,SAAW23E,cAAX,CAA4B,CAEnDh7E,OAAO,CAACC,IAAR,CAAc,yDAAd,EACA,YAAY6Y,SAAL,CAAgBkiE,cAAhB,CAAP,CAEA,CALD,CAOArjG,IAAI,CAACgsB,SAAL,CAAektG,KAAf,CAAuB,UAAY,CAElC7wG,OAAO,CAACC,IAAR,CAAc,sDAAd,EACA,YAAY4Y,OAAL,EAAP,CAEA,CALD,CAOAlhC,IAAI,CAACgsB,SAAL,CAAemtG,iBAAf,CAAmC,SAAWl4F,GAAX,CAAiB,CAEnD5Y,OAAO,CAACC,IAAR,CAAc,wEAAd,EACA,YAAY4Z,aAAL,CAAoBjB,GAApB,CAAP,CAEA,CALD,CAOAjhC,IAAI,CAACgsB,SAAL,CAAeotG,oBAAf,CAAsC,SAAWh3F,MAAX,CAAoB,CAEzD/Z,OAAO,CAACC,IAAR,CAAc,8EAAd,EACA,YAAY6Z,gBAAL,CAAuBC,MAAvB,CAAP,CAEA,CALD,CAOApiC,IAAI,CAACgsB,SAAL,CAAe4U,IAAf,CAAsB,SAAWyiE,cAAX,CAA4B,CAEjDh7E,OAAO,CAACC,IAAR,CAAc,qDAAd,EACA,YAAY8Y,OAAL,CAAciiE,cAAd,CAAP,CAEA,CALD,CAOA;EAEAliG,MAAM,CAAC6qB,SAAP,CAAiBktG,KAAjB,CAAyB,UAAY,CAEpC7wG,OAAO,CAACC,IAAR,CAAc,wDAAd,EACA,YAAY4Y,OAAL,EAAP,CAEA,CALD,CAOA;EAEA/4B,OAAO,CAAC6jB,SAAR,CAAkBqtG,aAAlB,CAAkC,SAAWxyG,CAAX,CAAe,CAEhDwB,OAAO,CAACC,IAAR,CAAc,iFAAd,EACA,YAAYujC,uBAAL,CAA8BhlC,CAA9B,CAAP,CAEA,CALD,CAOA;EAWA3nB,OAAO,CAAC8sB,SAAR,CAAkBstG,oBAAlB,CAAyC,SAAWh0G,KAAX,CAAkB6F,MAAlB,CAA2B,CAEnE9C,OAAO,CAACC,IAAR,CAAc,qFAAd,EACA,YAAY8C,OAAL,CAAc9F,KAAd,CAAqB6F,MAArB,CAAP,CAEA,CALD,CAOAjsB,OAAO,CAAC8sB,SAAR,CAAkButG,eAAlB,CAAoC,SAAWh4F,MAAX,CAAoB,CAEvDlZ,OAAO,CAACC,IAAR,CAAc,gGAAd,EACA,OAAOiZ,MAAM,CAACnY,YAAP,CAAqB,IAArB,CAAP,CAEA,CALD,CAOAlqB,OAAO,CAAC8sB,SAAR,CAAkBwtG,oBAAlB,CAAyC,iBAAqB,CAE7DnxG,OAAO,CAAC8D,KAAR,CAAe,0DAAf,EAEA,CAJD,CAMAjtB,OAAO,CAAC8sB,SAAR,CAAkBytG,sBAAlB,CAA2C,SAAWnuG,SAAX,CAAuB,CAEjEjD,OAAO,CAACC,IAAR,CAAc,0GAAd,EACA,OAAOgD,SAAS,CAAClC,YAAV,CAAwB,IAAxB,CAAP,CAEA,CALD,CAOAlqB,OAAO,CAAC8sB,SAAR,CAAkB0tG,mBAAlB,CAAwC,qCAAyC,CAEhFrxG,OAAO,CAAC8D,KAAR,CAAe,yDAAf,EAEA,CAJD,CAMAjtB,OAAO,CAAC8sB,SAAR,CAAkB2tG,UAAlB,CAA+B,SAAWnpG,MAAX,CAAoB,CAElDnI,OAAO,CAACC,IAAR,CAAc,gGAAd,EACA,YAAYL,IAAL,CAAWuI,MAAX,EAAoBvB,MAApB,EAAP,CAEA,CALD,CAOA;EAEArtB,OAAO,CAACoqB,SAAR,CAAkB4tG,eAAlB,CAAoC,SAAW/yG,CAAX,CAAe,CAElDwB,OAAO,CAACC,IAAR,CAAc,wEAAd,EACA,YAAY4e,YAAL,CAAmBrgB,CAAnB,CAAP,CAEA,CALD,CAOAjlB,OAAO,CAACoqB,SAAR,CAAkBstG,oBAAlB,CAAyC,SAAWh0G,KAAX,CAAkB6F,MAAlB,CAA2B,CAEnE9C,OAAO,CAACC,IAAR,CAAc,qFAAd,EACA,YAAY8C,OAAL,CAAc9F,KAAd,CAAqB6F,MAArB,CAAP,CAEA,CALD,CAOAvpB,OAAO,CAACoqB,SAAR,CAAkB6tG,WAAlB,CAAgC,UAAY,CAE3CxxG,OAAO,CAACC,IAAR,CAAc,sGAAd,EACA,WAAWzoB,OAAJ,GAAc6/B,mBAAd,CAAmC,IAAnC,CAAyC,CAAzC,CAAP,CAEA,CALD,CAOA99B,OAAO,CAACoqB,SAAR,CAAkBgiB,yBAAlB,CAA8C,SAAWxY,CAAX,CAAe,CAE5DnN,OAAO,CAACC,IAAR,CAAc,gGAAd,EACA,YAAY8f,0BAAL,CAAiC5S,CAAjC,CAAP,CAEA,CALD,CAOA5zB,OAAO,CAACoqB,SAAR,CAAkB8tG,eAAlB,CAAoC,UAAY,CAE/CzxG,OAAO,CAACC,IAAR,CAAc,qDAAd,EAEA,CAJD,CAMA1mB,OAAO,CAACoqB,SAAR,CAAkButG,eAAlB,CAAoC,SAAWh4F,MAAX,CAAoB,CAEvDlZ,OAAO,CAACC,IAAR,CAAc,gGAAd,EACA,OAAOiZ,MAAM,CAACjM,YAAP,CAAqB,IAArB,CAAP,CAEA,CALD,CAOA1zB,OAAO,CAACoqB,SAAR,CAAkB+tG,eAAlB,CAAoC,SAAWx4F,MAAX,CAAoB,CAEvDlZ,OAAO,CAACC,IAAR,CAAc,gGAAd,EACA,OAAOiZ,MAAM,CAACjM,YAAP,CAAqB,IAArB,CAAP,CAEA,CALD,CAOA1zB,OAAO,CAACoqB,SAAR,CAAkBwtG,oBAAlB,CAAyC,iBAAqB,CAE7DnxG,OAAO,CAAC8D,KAAR,CAAe,0DAAf,EAEA,CAJD,CAMAvqB,OAAO,CAACoqB,SAAR,CAAkBguG,UAAlB,CAA+B,SAAW9xG,CAAX,CAAe,CAE7CG,OAAO,CAACC,IAAR,CAAc,kGAAd,EACAJ,CAAC,CAACgW,kBAAF,CAAsB,IAAtB,EAEA,CALD,CAOAt8B,OAAO,CAACoqB,SAAR,CAAkBiuG,WAAlB,CAAgC,SAAW14F,MAAX,CAAoB,CAEnDlZ,OAAO,CAACC,IAAR,CAAc,4FAAd,EACA,OAAOiZ,MAAM,CAACjM,YAAP,CAAqB,IAArB,CAAP,CAEA,CALD,CAOA1zB,OAAO,CAACoqB,SAAR,CAAkBuE,SAAlB,CAA8B,UAAY,CAEzClI,OAAO,CAAC8D,KAAR,CAAe,+CAAf,EAEA,CAJD,CAMAvqB,OAAO,CAACoqB,SAAR,CAAkBmiB,OAAlB,CAA4B,UAAY,CAEvC9lB,OAAO,CAAC8D,KAAR,CAAe,6CAAf,EAEA,CAJD,CAMAvqB,OAAO,CAACoqB,SAAR,CAAkBoiB,OAAlB,CAA4B,UAAY,CAEvC/lB,OAAO,CAAC8D,KAAR,CAAe,6CAAf,EAEA,CAJD,CAMAvqB,OAAO,CAACoqB,SAAR,CAAkBqiB,OAAlB,CAA4B,UAAY,CAEvChmB,OAAO,CAAC8D,KAAR,CAAe,6CAAf,EAEA,CAJD,CAMAvqB,OAAO,CAACoqB,SAAR,CAAkBkuG,YAAlB,CAAiC,UAAY,CAE5C7xG,OAAO,CAAC8D,KAAR,CAAe,kDAAf,EAEA,CAJD,CAMAvqB,OAAO,CAACoqB,SAAR,CAAkBytG,sBAAlB,CAA2C,SAAWnuG,SAAX,CAAuB,CAEjEjD,OAAO,CAACC,IAAR,CAAc,0GAAd,EACA,OAAOgD,SAAS,CAACgK,YAAV,CAAwB,IAAxB,CAAP,CAEA,CALD,CAOA1zB,OAAO,CAACoqB,SAAR,CAAkB0tG,mBAAlB,CAAwC,qCAAyC,CAEhFrxG,OAAO,CAAC8D,KAAR,CAAe,yDAAf,EAEA,CAJD,CAMAvqB,OAAO,CAACoqB,SAAR,CAAkBmuG,WAAlB,CAAgC,SAAWlvF,IAAX,CAAiBC,KAAjB,CAAwBE,MAAxB,CAAgCD,GAAhC,CAAqCE,IAArC,CAA2CC,GAA3C,CAAiD,CAEhFjjB,OAAO,CAACC,IAAR,CAAc,sHAAd,EACA,YAAY0iB,eAAL,CAAsBC,IAAtB,CAA4BC,KAA5B,CAAmCC,GAAnC,CAAwCC,MAAxC,CAAgDC,IAAhD,CAAsDC,GAAtD,CAAP,CAEA,CALD,CAOA1pC,OAAO,CAACoqB,SAAR,CAAkB2tG,UAAlB,CAA+B,SAAWnpG,MAAX,CAAoB,CAElDnI,OAAO,CAACC,IAAR,CAAc,gGAAd,EACA,YAAYL,IAAL,CAAWuI,MAAX,EAAoBvB,MAApB,EAAP,CAEA,CALD,CAOA;EAEAxrB,KAAK,CAACuoB,SAAN,CAAgBouG,kBAAhB,CAAqC,SAAWnvE,IAAX,CAAkB,CAEtD5iC,OAAO,CAACC,IAAR,CAAc,2EAAd,EACA,YAAY4iC,cAAL,CAAqBD,IAArB,CAAP,CAEA,CALD,CAOA;EAEArrD,UAAU,CAACosB,SAAX,CAAqButG,eAArB,CAAuC,SAAWh4F,MAAX,CAAoB,CAE1DlZ,OAAO,CAACC,IAAR,CAAc,iHAAd,EACA,OAAOiZ,MAAM,CAACvE,eAAP,CAAwB,IAAxB,CAAP,CAEA,CALD,CAOAp9B,UAAU,CAACosB,SAAX,CAAqBquG,OAArB,CAA+B,UAAa,CAE3ChyG,OAAO,CAACC,IAAR,CAAc,4DAAd,EACA,YAAY2G,MAAL,EAAP,CAEA,CALD,CAOA;EAEAttB,GAAG,CAACqqB,SAAJ,CAAcmtG,iBAAd,CAAkC,SAAWl4F,GAAX,CAAiB,CAElD5Y,OAAO,CAACC,IAAR,CAAc,uEAAd,EACA,YAAY4Z,aAAL,CAAoBjB,GAApB,CAAP,CAEA,CALD,CAOAt/B,GAAG,CAACqqB,SAAJ,CAAcsuG,mBAAd,CAAoC,SAAW/3F,KAAX,CAAmB,CAEtDla,OAAO,CAACC,IAAR,CAAc,2EAAd,EACA,YAAYga,eAAL,CAAsBC,KAAtB,CAAP,CAEA,CALD,CAOA5gC,GAAG,CAACqqB,SAAJ,CAAcotG,oBAAd,CAAqC,SAAWh3F,MAAX,CAAoB,CAExD/Z,OAAO,CAACC,IAAR,CAAc,6EAAd,EACA,YAAY6Z,gBAAL,CAAuBC,MAAvB,CAAP,CAEA,CALD,CAOA;EAEAh+B,QAAQ,CAAC4nB,SAAT,CAAmBlR,IAAnB,CAA0B,UAAY,CAErCuN,OAAO,CAACC,IAAR,CAAc,yDAAd,EACA,YAAYmrB,OAAL,EAAP,CAEA,CALD,CAOArvC,QAAQ,CAAC4nB,SAAT,CAAmBuuG,kBAAnB,CAAwC,SAAWl5F,KAAX,CAAkBhc,MAAlB,CAA2B,CAElEgD,OAAO,CAACC,IAAR,CAAc,4EAAd,EACA,YAAYgqB,YAAL,CAAmBjR,KAAnB,CAA0Bhc,MAA1B,CAAP,CAEA,CALD,CAOAjhB,QAAQ,CAAC4nB,SAAT,CAAmBwuG,QAAnB,CAA8B,SAAWn1G,MAAX,CAAoB,CAEjDgD,OAAO,CAACC,IAAR,CAAc,iEAAd,EACA,YAAYorB,WAAL,CAAkBruB,MAAlB,CAAP,CAEA,CALD,CAOAjhB,QAAQ,CAACq2H,eAAT,CAA2B,SAAWp1G,MAAX,CAAoB,CAE9CgD,OAAO,CAACC,IAAR,CAAc,6DAAd,EACA,YAAY8pB,SAAL,CAAgB/sB,MAAhB,CAAP,CAEA,CALD,CAOAjhB,QAAQ,CAAC4nB,SAAT,CAAmBuW,KAAnB,CAA2B,SAAWld,MAAX,CAAoB,CAE9CgD,OAAO,CAACC,IAAR,CAAc,2DAAd,EACA,YAAYqrB,QAAL,CAAetuB,MAAf,CAAP,CAEA,CALD,CAOAjhB,QAAQ,CAACm2H,kBAAT,CAA8B,SAAWl5F,KAAX,CAAkB3Y,CAAlB,CAAqBC,CAArB,CAAwBgD,CAAxB,CAA2BtG,MAA3B,CAAoC,CAEjEgD,OAAO,CAACC,IAAR,CAAc,4EAAd,EACA,OAAOlkB,QAAQ,CAACkuC,YAAT,CAAuBjR,KAAvB,CAA8B3Y,CAA9B,CAAiCC,CAAjC,CAAoCgD,CAApC,CAAuCtG,MAAvC,CAAP,CAEA,CALD,CAOAjhB,QAAQ,CAAC26B,MAAT,CAAkB,SAAWrW,CAAX,CAAcC,CAAd,CAAiBgD,CAAjB,CAAoBtG,MAApB,CAA6B,CAE9CgD,OAAO,CAACC,IAAR,CAAc,6DAAd,EACA,OAAOlkB,QAAQ,CAACguC,SAAT,CAAoB1pB,CAApB,CAAuBC,CAAvB,CAA0BgD,CAA1B,CAA6BtG,MAA7B,CAAP,CAEA,CALD,CAOA;EAEAvE,KAAK,CAACkL,SAAN,CAAgB0uG,gBAAhB,CAAmC,SAAWl3B,SAAX,CAAuB,CAEzDn7E,OAAO,CAACC,IAAR,CAAc,kFAAd,EACA,YAAY2hF,aAAL,CAAoBzG,SAApB,CAAP,CAEA,CALD,CAOA1iF,KAAK,CAACkL,SAAN,CAAgB2uG,OAAhB,CAA0B,SAAW5jG,OAAX,CAAqB,CAE9C1O,OAAO,CAACC,IAAR,CAAc,0EAAd,EACA,WAAW9L,eAAJ,CAAqB,IAArB,CAA2Bua,OAA3B,CAAP,CAEA,CALD,CAOAjW,KAAK,CAACkL,SAAN,CAAgB4uG,YAAhB,CAA+B,SAAW7jG,OAAX,CAAqB,CAEnD1O,OAAO,CAACC,IAAR,CAAc,6EAAd,EACA,WAAW3L,aAAJ,CAAmB,IAAnB,CAAyBoa,OAAzB,CAAP,CAEA,CALD,CAOA;EAEA93B,OAAO,CAAC+sB,SAAR,CAAkB6uG,aAAlB,CAAkC,SAAWvvG,SAAX,CAAsBrG,KAAtB,CAA6BkG,MAA7B,CAAsC,CAEvE9C,OAAO,CAACC,IAAR,CAAc,6EAAd,EACA,YAAY+C,mBAAL,CAA0BC,SAA1B,CAAqCrG,KAArC,CAA4CkG,MAA5C,CAAP,CAEA,CALD,CAOAlsB,OAAO,CAAC+sB,SAAR,CAAkB8uG,mBAAlB,CAAwC,SAAW5yG,CAAX,CAAe,CAEtDG,OAAO,CAACC,IAAR,CAAc,mFAAd,EACA,YAAYsC,mBAAL,CAA0B1C,CAA1B,CAAP,CAEA,CALD,CAOAjpB,OAAO,CAAC+sB,SAAR,CAAkB+uG,eAAlB,CAAoC,UAAY,CAE/C1yG,OAAO,CAACC,IAAR,CAAc,2EAAd,EACA,YAAY6B,eAAL,EAAP,CAEA,CALD,CAOA;EAEAtqB,OAAO,CAACmsB,SAAR,CAAkBgvG,0BAAlB,CAA+C,UAAY,CAE1D3yG,OAAO,CAAC8D,KAAR,CAAe,2GAAf,EAEA,CAJD,CAMAtsB,OAAO,CAACmsB,SAAR,CAAkBivG,sBAAlB,CAA2C,UAAY,CAEtD5yG,OAAO,CAAC8D,KAAR,CAAe,mGAAf,EAEA,CAJD,CAMAtsB,OAAO,CAACmsB,SAAR,CAAkBkvG,qBAAlB,CAA0C,SAAWr0G,CAAX,CAAe,CAExDwB,OAAO,CAACC,IAAR,CAAc,uFAAd,EACA,YAAYkX,qBAAL,CAA4B3Y,CAA5B,CAAP,CAEA,CALD,CAOAhnB,OAAO,CAACmsB,SAAR,CAAkBmvG,kBAAlB,CAAuC,SAAWt0G,CAAX,CAAe,CAErDwB,OAAO,CAACC,IAAR,CAAc,iFAAd,EACA,YAAYmX,kBAAL,CAAyB5Y,CAAzB,CAAP,CAEA,CALD,CAOAhnB,OAAO,CAACmsB,SAAR,CAAkBovG,mBAAlB,CAAwC,SAAWn2G,KAAX,CAAkBuL,MAAlB,CAA2B,CAElEnI,OAAO,CAACC,IAAR,CAAc,mFAAd,EACA,YAAYoX,mBAAL,CAA0BlP,MAA1B,CAAkCvL,KAAlC,CAAP,CAEA,CALD,CAOAplB,OAAO,CAACmsB,SAAR,CAAkBqvG,eAAlB,CAAoC,SAAWx0G,CAAX,CAAe,CAElDwB,OAAO,CAACC,IAAR,CAAc,qFAAd,EACA,YAAYgN,YAAL,CAAmBzO,CAAnB,CAAP,CAEA,CALD,CAOAhnB,OAAO,CAACmsB,SAAR,CAAkB6uG,aAAlB,CAAkC,SAAWvvG,SAAX,CAAsBrG,KAAtB,CAA6BkG,MAA7B,CAAsC,CAEvE9C,OAAO,CAACC,IAAR,CAAc,6EAAd,EACA,YAAY+C,mBAAL,CAA0BC,SAA1B,CAAqCrG,KAArC,CAA4CkG,MAA5C,CAAP,CAEA,CALD,CAOAtrB,OAAO,CAACmsB,SAAR,CAAkB8uG,mBAAlB,CAAwC,SAAW5yG,CAAX,CAAe,CAEtDG,OAAO,CAACC,IAAR,CAAc,mFAAd,EACA,YAAYsC,mBAAL,CAA0B1C,CAA1B,CAAP,CAEA,CALD,CAOAroB,OAAO,CAACmsB,SAAR,CAAkB+uG,eAAlB,CAAoC,UAAY,CAE/C1yG,OAAO,CAACC,IAAR,CAAc,2EAAd,EACA,YAAY6B,eAAL,EAAP,CAEA,CALD,CAOA;EAEA3qB,OAAO,CAACwsB,SAAR,CAAkB6uG,aAAlB,CAAkC,SAAWvvG,SAAX,CAAsBrG,KAAtB,CAA6BkG,MAA7B,CAAsC,CAEvE9C,OAAO,CAACC,IAAR,CAAc,6EAAd,EACA,YAAY+C,mBAAL,CAA0BC,SAA1B,CAAqCrG,KAArC,CAA4CkG,MAA5C,CAAP,CAEA,CALD,CAOA3rB,OAAO,CAACwsB,SAAR,CAAkB+uG,eAAlB,CAAoC,UAAY,CAE/C1yG,OAAO,CAACC,IAAR,CAAc,2EAAd,EACA,YAAY6B,eAAL,EAAP,CAEA,CALD,CAOA;EAEA9mB,QAAQ,CAAC2oB,SAAT,CAAmBsvG,cAAnB,CAAoC,SAAW1qG,IAAX,CAAkB,CAErDvI,OAAO,CAACC,IAAR,CAAc,2EAAd,EACA,YAAYinB,eAAL,CAAsB3e,IAAtB,CAAP,CAEA,CALD,CAOAvtB,QAAQ,CAAC2oB,SAAT,CAAmBuvG,WAAnB,CAAiC,UAAY,CAE5ClzG,OAAO,CAACC,IAAR,CAAc,2EAAd,EAEA,CAJD,CAMAjlB,QAAQ,CAAC2oB,SAAT,CAAmBuE,SAAnB,CAA+B,SAAWge,QAAX,CAAqB5T,IAArB,CAA4B,CAE1DtS,OAAO,CAACC,IAAR,CAAc,gGAAd,EACA,YAAYgmB,eAAL,CAAsB3T,IAAtB,CAA4B4T,QAA5B,CAAP,CAEA,CALD,CAOAlrC,QAAQ,CAAC2oB,SAAT,CAAmBwvG,gBAAnB,CAAsC,UAAY,CAEjDnzG,OAAO,CAAC8D,KAAR,CAAe,gHAAf,EAEA,CAJD,CAMA9oB,QAAQ,CAAC2oB,SAAT,CAAmByvG,WAAnB,CAAiC,SAAWjrG,MAAX,CAAoB,CAEpDnI,OAAO,CAACC,IAAR,CAAc,qEAAd,EACA,YAAYgN,YAAL,CAAmB9E,MAAnB,CAAP,CAEA,CALD,CAOAoC,MAAM,CAACka,gBAAP,CAAyBzpC,QAAQ,CAAC2oB,SAAlC,CAA6C,CAE5C0vG,UAAU,CAAE,CACXxsE,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,qDAAd,EACA,YAAY2H,QAAL,CAAciK,KAArB,CAEA,CANU,CAOX1S,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,qDAAd,EACA,KAAK2H,QAAL,CAAciK,KAAd,CAAsBzT,KAAtB,CAEA,CAZU,CAFgC,CAgB5Ck1G,aAAa,CAAE,CACdzsE,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,+FAAd,EAEA,CALa,CAMdd,GAAG,CAAE,UAAY,CAEhBa,OAAO,CAACC,IAAR,CAAc,+FAAd,EAEA,CAVa,CAhB6B,CAA7C,EA+BAthB,IAAI,CAACglB,SAAL,CAAe4vG,WAAf,CAA6B,UAAY,CAExCvzG,OAAO,CAAC8D,KAAR,CAAe,2LAAf,EAEA,CAJD,CAMAyG,MAAM,CAACka,gBAAP,CAAyB9lC,IAAI,CAACglB,SAA9B,CAAyC,CAExC6vG,QAAQ,CAAE,CACT3sE,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAAC8D,KAAR,CAAe,kGAAf,EACA,OAAO9uB,iBAAP,CAEA,CANQ,CAOTmqB,GAAG,CAAE,UAAY,CAEhBa,OAAO,CAAC8D,KAAR,CAAe,sLAAf,EAEA,CAXQ,CAF8B,CAAzC,EAkBA5T,WAAW,CAACyT,SAAZ,CAAsB8vG,SAAtB,CAAkC,UAAY,CAE7CzzG,OAAO,CAAC8D,KAAR,CAAe,kDAAf,EAEA,CAJD,CAMA;EAEAxkB,iBAAiB,CAACqkB,SAAlB,CAA4B+vG,OAA5B,CAAsC,SAAW/zE,WAAX,CAAwBJ,SAAxB,CAAoC,CAEzEv/B,OAAO,CAACC,IAAR,CAAc,kDACZ,8DADF,EAGA,GAAKs/B,SAAS,GAAKljC,SAAnB,CAA+B,KAAKkjC,SAAL,CAAiBA,SAAjB,CAC/B,KAAKG,cAAL,CAAqBC,WAArB,EAEA,CARD,CAUA;EAEAp1B,MAAM,CAACka,gBAAP,CAAyB/rB,KAAK,CAACiL,SAA/B,CAA0C,CACzCgwG,UAAU,CAAE,CACXx0G,GAAG,CAAE,UAAY,CAEhBa,OAAO,CAACC,IAAR,CAAc,4CAAd,EAEA,CALU,CAD6B,CAQzC2zG,eAAe,CAAE,CAChBz0G,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,0DAAd,EACA,KAAK2vC,MAAL,CAAYr6B,MAAZ,CAAmBh2B,GAAnB,CAAyB6e,KAAzB,CAEA,CANe,CARwB,CAgBzCy1G,gBAAgB,CAAE,CACjB10G,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,4DAAd,EACA,KAAK2vC,MAAL,CAAYr6B,MAAZ,CAAmBqN,IAAnB,CAA0BxkB,KAA1B,CAEA,CANgB,CAhBuB,CAwBzC01G,iBAAiB,CAAE,CAClB30G,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,8DAAd,EACA,KAAK2vC,MAAL,CAAYr6B,MAAZ,CAAmBsN,KAAnB,CAA2BzkB,KAA3B,CAEA,CANiB,CAxBsB,CAgCzC21G,eAAe,CAAE,CAChB50G,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,0DAAd,EACA,KAAK2vC,MAAL,CAAYr6B,MAAZ,CAAmBuN,GAAnB,CAAyB1kB,KAAzB,CAEA,CANe,CAhCwB,CAwCzC41G,kBAAkB,CAAE,CACnB70G,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,gEAAd,EACA,KAAK2vC,MAAL,CAAYr6B,MAAZ,CAAmBwN,MAAnB,CAA4B3kB,KAA5B,CAEA,CANkB,CAxCqB,CAgDzCgwC,gBAAgB,CAAE,CACjBjvC,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,4DAAd,EACA,KAAK2vC,MAAL,CAAYr6B,MAAZ,CAAmByN,IAAnB,CAA0B5kB,KAA1B,CAEA,CANgB,CAhDuB,CAwDzCiwC,eAAe,CAAE,CAChBlvC,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,0DAAd,EACA,KAAK2vC,MAAL,CAAYr6B,MAAZ,CAAmB0N,GAAnB,CAAyB7kB,KAAzB,CAEA,CANe,CAxDwB,CAgEzC61G,mBAAmB,CAAE,CACpB90G,GAAG,CAAE,UAAY,CAEhBa,OAAO,CAACC,IAAR,CAAc,gHAAd,EAEA,CALmB,CAhEoB,CAuEzCotC,UAAU,CAAE,CACXluC,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,+CAAd,EACA,KAAK2vC,MAAL,CAAY+gB,IAAZ,CAAmBvyD,KAAnB,CAEA,CANU,CAvE6B,CA+EzC81G,cAAc,CAAE,CACf/0G,GAAG,CAAE,UAAY,CAEhBa,OAAO,CAACC,IAAR,CAAc,gDAAd,EAEA,CALc,CA/EyB,CAsFzCk0G,cAAc,CAAE,CACfh1G,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,4DAAd,EACA,KAAK2vC,MAAL,CAAYihB,OAAZ,CAAoB5xD,KAApB,CAA4Bb,KAA5B,CAEA,CANc,CAtFyB,CA8FzCg2G,eAAe,CAAE,CAChBj1G,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,8DAAd,EACA,KAAK2vC,MAAL,CAAYihB,OAAZ,CAAoB3xD,MAApB,CAA6Bd,KAA7B,CAEA,CANe,CA9FwB,CAA1C,EAwGA;EAEAmM,MAAM,CAACka,gBAAP,CAAyB7nC,eAAe,CAAC+mB,SAAzC,CAAoD,CAEnDtG,MAAM,CAAE,CACPwpC,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,yEAAd,EACA,YAAYhD,KAAL,CAAWI,MAAlB,CAEA,CANM,CAF2C,CAUnDg3G,OAAO,CAAE,CACRxtE,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,0EAAd,EACA,YAAYq1B,KAAL,GAAet/C,gBAAtB,CAEA,CANO,CAORmpB,GAAG,CAAE,qBAAyB,CAE7Ba,OAAO,CAACC,IAAR,CAAc,0EAAd,EACA,KAAKw1B,QAAL,CAAez/C,gBAAf,EAEA,CAZO,CAV0C,CAApD,EA2BA4G,eAAe,CAAC+mB,SAAhB,CAA0B2wG,UAA1B,CAAuC,SAAWl2G,KAAX,CAAmB,CAEzD4B,OAAO,CAACC,IAAR,CAAc,oFAAd,EACA,KAAKw1B,QAAL,CAAer3B,KAAK,GAAK,IAAV,CAAiBpoB,gBAAjB,CAAoCD,eAAnD,EACA,WAAA,CAEA,CAND,CAQA6G,eAAe,CAAC+mB,SAAhB,CAA0B4wG,gBAA1B,CAA6C,uBAA2B,CAEvEv0G,OAAO,CAAC8D,KAAR,CAAe,8DAAf,EAEA,CAJD,CAMAlnB,eAAe,CAAC+mB,SAAhB,CAA0B6wG,QAA1B,CAAqC,qBAAyB,CAE7Dx0G,OAAO,CAAC8D,KAAR,CAAe,yHAAf,EAEA,CAVD,CAYA;EAEArmB,cAAc,CAACkmB,SAAf,CAAyB8wG,QAAzB,CAAoC,SAAW73G,KAAX,CAAmB,CAEtDoD,OAAO,CAACC,IAAR,CAAc,oEAAd,EACA,KAAKm3B,QAAL,CAAex6B,KAAf,EAEA,CALD,CAOAnf,cAAc,CAACkmB,SAAf,CAAyB+wG,YAAzB,CAAwC,SAAWnsG,IAAX,CAAiBtF,SAAjB,CAA6B,CAEpEjD,OAAO,CAACC,IAAR,CAAc,4EAAd,EAEA,GAAK,EAAIgD,SAAS,EAAIA,SAAS,CAACszB,iBAA3B,GAAkD,EAAItzB,SAAS,EAAIA,SAAS,CAACg4B,4BAA3B,CAAvD,CAAmH,CAElHj7B,OAAO,CAACC,IAAR,CAAc,wEAAd,EAEA,YAAYq3B,YAAL,CAAmB/uB,IAAnB,CAAyB,IAAI3rB,eAAJ,CAAqBinB,SAAS,CAAE,CAAF,CAA9B,CAAqCA,SAAS,CAAE,CAAF,CAA9C,CAAzB,CAAP,CAEA,CAED,GAAK0E,IAAI,GAAK,OAAd,CAAwB,CAEvBvI,OAAO,CAACC,IAAR,CAAc,yEAAd,EACA,KAAKm3B,QAAL,CAAen0B,SAAf,EAEA,WAAA,CAEA,CAED,YAAYq0B,YAAL,CAAmB/uB,IAAnB,CAAyBtF,SAAzB,CAAP,CAEA,CAvBD,CAyBAxlB,cAAc,CAACkmB,SAAf,CAAyBgxG,WAAzB,CAAuC,SAAWz9E,KAAX,CAAkB5nB,KAAlB,CAAyBg7E,WAAzB,CAAuC,CAE7E,GAAKA,WAAW,GAAKjuF,SAArB,CAAiC,CAEhC2D,OAAO,CAACC,IAAR,CAAc,sEAAd,EAEA,CAEDD,OAAO,CAACC,IAAR,CAAc,0DAAd,EACA,KAAKw3B,QAAL,CAAeP,KAAf,CAAsB5nB,KAAtB,EAEA,CAXD,CAaA7xB,cAAc,CAACkmB,SAAf,CAAyBixG,cAAzB,CAA0C,UAAY,CAErD50G,OAAO,CAACC,IAAR,CAAc,gEAAd,EACA,KAAK03B,WAAL,GAEA,CALD,CAOAl6C,cAAc,CAACkmB,SAAf,CAAyBkxG,cAAzB,CAA0C,UAAY,CAErD70G,OAAO,CAACC,IAAR,CAAc,2DAAd,EAEA,CAJD,CAMAxiB,cAAc,CAACkmB,SAAf,CAAyBmxG,eAAzB,CAA2C,SAAWvsG,IAAX,CAAkB,CAE5DvI,OAAO,CAACC,IAAR,CAAc,kFAAd,EAEA,YAAYs3B,eAAL,CAAsBhvB,IAAtB,CAAP,CAEA,CAND,CAQA9qB,cAAc,CAACkmB,SAAf,CAAyByvG,WAAzB,CAAuC,SAAWjrG,MAAX,CAAoB,CAE1DnI,OAAO,CAACC,IAAR,CAAc,2EAAd,EACA,YAAYgN,YAAL,CAAmB9E,MAAnB,CAAP,CAEA,CALD,CAOAoC,MAAM,CAACka,gBAAP,CAAyBhnC,cAAc,CAACkmB,SAAxC,CAAmD,CAElDoxG,SAAS,CAAE,CACVluE,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAAC8D,KAAR,CAAe,+DAAf,EACA,YAAYizB,MAAZ,CAEA,CANS,CAFuC,CAUlDi+E,OAAO,CAAE,CACRnuE,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,6DAAd,EACA,YAAY82B,MAAZ,CAEA,CANO,CAVyC,CAAnD,EAqBAroC,iBAAiB,CAACiV,SAAlB,CAA4B2wG,UAA5B,CAAyC,SAAWl2G,KAAX,CAAmB,CAE3D4B,OAAO,CAACC,IAAR,CAAc,sFAAd,EACA,KAAKw1B,QAAL,CAAer3B,KAAK,GAAK,IAAV,CAAiBpoB,gBAAjB,CAAoCD,eAAnD,EACA,WAAA,CAEA,CAND,CAQA2Y,iBAAiB,CAACiV,SAAlB,CAA4B6wG,QAA5B,CAAuC,qBAAyB,CAE/Dx0G,OAAO,CAAC8D,KAAR,CAAe,2HAAf,EAEA,CAJD,CAMA;EAEA3P,eAAe,CAACwP,SAAhB,CAA0BsxG,SAA1B,CAAsC,UAAY,CAEjDj1G,OAAO,CAAC8D,KAAR,CAAe,uDAAf,EAEA,CAJD,CAMA3P,eAAe,CAACwP,SAAhB,CAA0BuxG,YAA1B,CAAyC,UAAY,CAEpDl1G,OAAO,CAAC8D,KAAR,CAAe,0DAAf,EAEA,CAJD,CAMA3P,eAAe,CAACwP,SAAhB,CAA0BqhF,QAA1B,CAAqC,UAAY,CAEhDhlF,OAAO,CAAC8D,KAAR,CAAe,sDAAf,EAEA,CAJD,CAMA;EAEArV,KAAK,CAACkV,SAAN,CAAgB2I,OAAhB,CAA0B,UAAY,CAErCtM,OAAO,CAAC8D,KAAR,CAAe,2CAAf,EAEA,CAJD,CAMA;EAWAyG,MAAM,CAACka,gBAAP,CAAyBxoC,QAAQ,CAAC0nB,SAAlC,CAA6C,CAE5CwxG,UAAU,CAAE,CACXtuE,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,+CAAd,EAEA,CALU,CAMXd,GAAG,CAAE,UAAY,CAEhBa,OAAO,CAACC,IAAR,CAAc,+CAAd,EAEA,CAVU,CAFgC,CAe5Cm1G,QAAQ,CAAE,CACTvuE,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,6CAAd,EAEA,CALQ,CAMTd,GAAG,CAAE,UAAY,CAEhBa,OAAO,CAACC,IAAR,CAAc,6CAAd,EAEA,CAVQ,CAfkC,CA4B5Co1G,OAAO,CAAE,CACRxuE,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,4CAAd,EACA,WAAWzjB,KAAJ,EAAP,CAEA,CANO,CA5BmC,CAqC5C84H,OAAO,CAAE,CACRzuE,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAAC8D,KAAR,CAAe,SAAW,KAAK5H,IAAhB,CAAuB,oEAAtC,EAEA,CALO,CAMRiD,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,SAAW,KAAK/D,IAAhB,CAAuB,oEAArC,EACA,KAAKuyB,WAAL,CAAqBrwB,KAAK,GAAKxxB,WAA/B,CAEA,CAXO,CArCmC,CAmD5CyqF,WAAW,CAAE,CACZxwB,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,SAAW,KAAK/D,IAAhB,CAAuB,gEAArC,EACA,YAAY8wB,eAAZ,CAEA,CANW,CAOZ7tB,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,SAAW,KAAK/D,IAAhB,CAAuB,gEAArC,EACA,KAAK8wB,eAAL,CAAuB5uB,KAAvB,CAEA,CAZW,CAnD+B,CAkE5CorD,cAAc,CAAE,CACf3iB,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,SAAW,KAAK/D,IAAhB,CAAuB,qCAArC,EAEA,CALc,CAMfiD,GAAG,CAAE,UAAY,CAEhBa,OAAO,CAACC,IAAR,CAAc,SAAW,KAAK/D,IAAhB,CAAuB,qCAArC,EAEA,CAVc,CAlE4B,CAA7C,EAiFAqO,MAAM,CAACka,gBAAP,CAAyBrlC,cAAc,CAACukB,SAAxC,CAAmD,CAElD+6B,WAAW,CAAE,CACZmI,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,+EAAd,EACA,YAAYw+B,UAAL,CAAgBC,WAAvB,CAEA,CANW,CAOZv/B,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,gFAAd,EACA,KAAKw+B,UAAL,CAAgBC,WAAhB,CAA8BtgC,KAA9B,CAEA,CAZW,CAFqC,CAAnD,EAmBA;EAEA7P,aAAa,CAACoV,SAAd,CAAwB4xG,WAAxB,CAAsC,SAAW30E,YAAX,CAAyBhS,KAAzB,CAAgCjgB,KAAhC,CAAuC0zB,OAAvC,CAAiD,CAEtFriC,OAAO,CAACC,IAAR,CAAc,uGAAd,EACA,KAAKyhC,eAAL,CAAsBd,YAAtB,EACA,KAAK/Z,KAAL,CAAY+H,KAAZ,CAAmBjgB,KAAnB,CAA0B0zB,OAA1B,EAEA,CAND,CAQA9zC,aAAa,CAACoV,SAAd,CAAwB6xG,OAAxB,CAAkC,SAAWjhG,QAAX,CAAsB,CAEvDvU,OAAO,CAACC,IAAR,CAAc,6DAAd,EACA,KAAKqlC,gBAAL,CAAuB/wB,QAAvB,EAEA,CALD,CAOAhmB,aAAa,CAACoV,SAAd,CAAwB8xG,sBAAxB,CAAiD,UAAY,CAE5Dz1G,OAAO,CAACC,IAAR,CAAc,2EAAd,EACA,YAAYwhC,eAAL,EAAP,CAEA,CALD,CAOAlzC,aAAa,CAACoV,SAAd,CAAwBuyC,gBAAxB,CAA2C,UAAY,CAEtDl2C,OAAO,CAACC,IAAR,CAAc,mFAAd,EACA,YAAYwlC,YAAL,CAAkByQ,gBAAlB,EAAP,CAEA,CALD,CAOA3nD,aAAa,CAACoV,SAAd,CAAwB+xG,YAAxB,CAAuC,UAAY,CAElD11G,OAAO,CAACC,IAAR,CAAc,sEAAd,EACA,YAAYwlC,YAAL,CAAkB/X,SAAzB,CAEA,CALD,CAOAn/B,aAAa,CAACoV,SAAd,CAAwBgyG,YAAxB,CAAuC,UAAY,CAElD31G,OAAO,CAACC,IAAR,CAAc,6DAAd,EACA,YAAYkwC,KAAL,CAAWiF,KAAX,EAAP,CAEA,CALD,CAOA7mD,aAAa,CAACoV,SAAd,CAAwBiyG,qBAAxB,CAAgD,UAAY,CAE3D51G,OAAO,CAACC,IAAR,CAAc,gGAAd,EACA,YAAYw+B,UAAL,CAAgBoI,GAAhB,CAAqB,mBAArB,CAAP,CAEA,CALD,CAOAt4C,aAAa,CAACoV,SAAd,CAAwBkyG,yBAAxB,CAAoD,UAAY,CAE/D71G,OAAO,CAACC,IAAR,CAAc,yGAAd,EACA,YAAYw+B,UAAL,CAAgBoI,GAAhB,CAAqB,wBAArB,CAAP,CAEA,CALD,CAOAt4C,aAAa,CAACoV,SAAd,CAAwBmyG,2BAAxB,CAAsD,UAAY,CAEjE91G,OAAO,CAACC,IAAR,CAAc,6GAAd,EACA,YAAYw+B,UAAL,CAAgBoI,GAAhB,CAAqB,0BAArB,CAAP,CAEA,CALD,CAOAt4C,aAAa,CAACoV,SAAd,CAAwBoyG,6BAAxB,CAAwD,UAAY,CAEnE/1G,OAAO,CAACC,IAAR,CAAc,oHAAd,EACA,YAAYw+B,UAAL,CAAgBoI,GAAhB,CAAqB,+BAArB,CAAP,CAEA,CALD,CAOAt4C,aAAa,CAACoV,SAAd,CAAwBqyG,8BAAxB,CAAyD,UAAY,CAEpEh2G,OAAO,CAACC,IAAR,CAAc,sHAAd,EACA,YAAYw+B,UAAL,CAAgBoI,GAAhB,CAAqB,gCAArB,CAAP,CAEA,CALD,CAOAt4C,aAAa,CAACoV,SAAd,CAAwBsyG,mBAAxB,CAA8C,UAAY,CAEzDj2G,OAAO,CAACC,IAAR,CAAc,6FAAd,EACA,YAAYw+B,UAAL,CAAgBoI,GAAhB,CAAqB,kBAArB,CAAP,CAEA,CALD,CAOAt4C,aAAa,CAACoV,SAAd,CAAwBwlD,sBAAxB,CAAiD,UAAY,CAE5DnpD,OAAO,CAACC,IAAR,CAAc,qFAAd,EACA,YAAYwlC,YAAL,CAAkB0R,cAAzB,CAEA,CALD,CAOA5oD,aAAa,CAACoV,SAAd,CAAwBuyG,uBAAxB,CAAkD,UAAY,CAE7Dl2G,OAAO,CAACC,IAAR,CAAc,uGAAd,EACA,YAAYw+B,UAAL,CAAgBoI,GAAhB,CAAqB,wBAArB,CAAP,CAEA,CALD,CAOAt4C,aAAa,CAACoV,SAAd,CAAwBwyG,iBAAxB,CAA4C,SAAWjlC,OAAX,CAAqB,CAEhElxE,OAAO,CAACC,IAAR,CAAc,qEAAd,EACA,KAAK8zD,cAAL,CAAqBmd,OAArB,EAEA,CALD,CAOA3iF,aAAa,CAACoV,SAAd,CAAwByyG,YAAxB,CAAuC,UAAY,CAElDp2G,OAAO,CAACC,IAAR,CAAc,wDAAd,EAEA,CAJD,CAMA1R,aAAa,CAACoV,SAAd,CAAwB0yG,YAAxB,CAAuC,UAAY,CAElDr2G,OAAO,CAACC,IAAR,CAAc,wDAAd,EAEA,CAJD,CAMA1R,aAAa,CAACoV,SAAd,CAAwB2yG,aAAxB,CAAwC,UAAY,CAEnDt2G,OAAO,CAACC,IAAR,CAAc,yDAAd,EAEA,CAJD,CAMA1R,aAAa,CAACoV,SAAd,CAAwB4yG,eAAxB,CAA0C,UAAY,CAErDv2G,OAAO,CAACC,IAAR,CAAc,2DAAd,EAEA,CAJD,CAMA1R,aAAa,CAACoV,SAAd,CAAwB6yG,cAAxB,CAAyC,UAAY,CAEpDx2G,OAAO,CAACC,IAAR,CAAc,0DAAd,EAEA,CAJD,CAMA1R,aAAa,CAACoV,SAAd,CAAwB8yG,gBAAxB,CAA2C,UAAY,CAEtDz2G,OAAO,CAACC,IAAR,CAAc,4DAAd,EAEA,CAJD,CAMA1R,aAAa,CAACoV,SAAd,CAAwBwL,UAAxB,CAAqC,UAAY,CAEhDnP,OAAO,CAACC,IAAR,CAAc,sDAAd,EAEA,CAJD,CAMA1R,aAAa,CAACoV,SAAd,CAAwBs6D,YAAxB,CAAuC,UAAY,CAElDj+D,OAAO,CAACC,IAAR,CAAc,wDAAd,EAEA,CAJD,CAMA1R,aAAa,CAACoV,SAAd,CAAwB46D,cAAxB,CAAyC,UAAY,CAEpDv+D,OAAO,CAACC,IAAR,CAAc,0DAAd,EAEA,CAJD,CAMA1R,aAAa,CAACoV,SAAd,CAAwB+yG,oBAAxB,CAA+C,UAAY,CAE1D12G,OAAO,CAACC,IAAR,CAAc,8EAAd,EACA,YAAY0zD,oBAAL,EAAP,CAEA,CALD,CAOAppD,MAAM,CAACka,gBAAP,CAAyBl2B,aAAa,CAACoV,SAAvC,CAAkD,CAEjDsmD,gBAAgB,CAAE,CACjBpjB,GAAG,CAAE,UAAY,CAEhB,YAAYymB,SAAL,CAAehtB,OAAtB,CAEA,CALgB,CAMjBnhC,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,mEAAd,EACA,KAAKqtD,SAAL,CAAehtB,OAAf,CAAyBliC,KAAzB,CAEA,CAXgB,CAF+B,CAejD+pD,aAAa,CAAE,CACdthB,GAAG,CAAE,UAAY,CAEhB,YAAYymB,SAAL,CAAepxD,IAAtB,CAEA,CALa,CAMdiD,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,6DAAd,EACA,KAAKqtD,SAAL,CAAepxD,IAAf,CAAsBkC,KAAtB,CAEA,CAXa,CAfkC,CA4BjDu4G,iBAAiB,CAAE,CAClB9vE,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,4FAAd,EACA,OAAO5D,SAAP,CAEA,CANiB,CAOlB8C,GAAG,CAAE,qBAAyB,CAE7Ba,OAAO,CAACC,IAAR,CAAc,4FAAd,EAEA,CAXiB,CA5B8B,CAyCjDsJ,OAAO,CAAE,CACRs9B,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,4EAAd,EACA,YAAYuJ,UAAL,EAAP,CAEA,CANO,CAzCwC,CAiDjDotG,EAAE,CAAE,CACH/vE,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,kDAAd,EACA,YAAYshC,EAAZ,CAEA,CANE,CAjD6C,CAyDjDs1E,UAAU,CAAE,CACXhwE,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,gHAAd,EACA,YAAA,CAEA,CANU,CAOXd,GAAG,CAAE,UAAY,CAEhBa,OAAO,CAACC,IAAR,CAAc,gHAAd,EAEA,CAXU,CAzDqC,CAsEjD62G,WAAW,CAAE,CACZjwE,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,+FAAd,EACA,YAAA,CAEA,CANW,CAOZd,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,+FAAd,EACA,KAAK28C,cAAL,CAAwBx+C,KAAK,GAAK,IAAZ,CAAqBlpB,YAArB,CAAoCD,cAA1D,CAEA,CAZW,CAtEoC,CAoFjD8hI,qBAAqB,CAAE,CACtBlwE,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,+DAAd,EACA,UAAA,CAEA,CANqB,CAOtBd,GAAG,CAAE,UAAY,CAEhBa,OAAO,CAACC,IAAR,CAAc,+DAAd,EAEA,CAXqB,CApF0B,CAAlD,EAoGAsK,MAAM,CAACka,gBAAP,CAAyB92B,cAAc,CAACgW,SAAxC,CAAmD,CAElD+2D,QAAQ,CAAE,CACT7zB,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,6FAAd,EACA,OAAO5D,SAAP,CAEA,CANQ,CAOT8C,GAAG,CAAE,wBAA4B,CAEhCa,OAAO,CAACC,IAAR,CAAc,6FAAd,EAEA,CAXQ,CAFwC,CAelD+2G,kBAAkB,CAAE,CACnBnwE,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,uGAAd,EACA,OAAO5D,SAAP,CAEA,CANkB,CAOnB8C,GAAG,CAAE,UAAY,CAEhBa,OAAO,CAACC,IAAR,CAAc,uGAAd,EAEA,CAXkB,CAf8B,CA4BlDg3G,iBAAiB,CAAE,CAClBpwE,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,sGAAd,EACA,OAAO5D,SAAP,CAEA,CANiB,CAOlB8C,GAAG,CAAE,UAAY,CAEhBa,OAAO,CAACC,IAAR,CAAc,sGAAd,EAEA,CAXiB,CA5B+B,CAAnD,EAqDAsK,MAAM,CAACka,gBAAP,CAAyBrtC,iBAAiB,CAACusB,SAA3C,CAAsD,CAErDqG,KAAK,CAAE,CACN68B,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,wDAAd,EACA,YAAY8O,OAAL,CAAa/E,KAApB,CAEA,CANK,CAON7K,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,wDAAd,EACA,KAAK8O,OAAL,CAAa/E,KAAb,CAAqB5L,KAArB,CAEA,CAZK,CAF8C,CAgBrD6L,KAAK,CAAE,CACN48B,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,wDAAd,EACA,YAAY8O,OAAL,CAAa9E,KAApB,CAEA,CANK,CAON9K,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,wDAAd,EACA,KAAK8O,OAAL,CAAa9E,KAAb,CAAqB7L,KAArB,CAEA,CAZK,CAhB8C,CA8BrD8L,SAAS,CAAE,CACV28B,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,gEAAd,EACA,YAAY8O,OAAL,CAAa7E,SAApB,CAEA,CANS,CAOV/K,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,gEAAd,EACA,KAAK8O,OAAL,CAAa7E,SAAb,CAAyB9L,KAAzB,CAEA,CAZS,CA9B0C,CA4CrD+L,SAAS,CAAE,CACV08B,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,gEAAd,EACA,YAAY8O,OAAL,CAAa5E,SAApB,CAEA,CANS,CAOVhL,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,gEAAd,EACA,KAAK8O,OAAL,CAAa5E,SAAb,CAAyB/L,KAAzB,CAEA,CAZS,CA5C0C,CA0DrDiM,UAAU,CAAE,CACXw8B,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,kEAAd,EACA,YAAY8O,OAAL,CAAa1E,UAApB,CAEA,CANU,CAOXlL,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,kEAAd,EACA,KAAK8O,OAAL,CAAa1E,UAAb,CAA0BjM,KAA1B,CAEA,CAZU,CA1DyC,CAwErD0E,MAAM,CAAE,CACP+jC,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,0DAAd,EACA,YAAY8O,OAAL,CAAajM,MAApB,CAEA,CANM,CAOP3D,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,0DAAd,EACA,KAAK8O,OAAL,CAAajM,MAAb,CAAsB1E,KAAtB,CAEA,CAZM,CAxE6C,CAsFrDuM,MAAM,CAAE,CACPk8B,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,0DAAd,EACA,YAAY8O,OAAL,CAAapE,MAApB,CAEA,CANM,CAOPxL,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,0DAAd,EACA,KAAK8O,OAAL,CAAapE,MAAb,CAAsBvM,KAAtB,CAEA,CAZM,CAtF6C,CAoGrDgM,MAAM,CAAE,CACPy8B,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,0DAAd,EACA,YAAY8O,OAAL,CAAa3E,MAApB,CAEA,CANM,CAOPjL,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,0DAAd,EACA,KAAK8O,OAAL,CAAa3E,MAAb,CAAsBhM,KAAtB,CAEA,CAZM,CApG6C,CAkHrDlC,IAAI,CAAE,CACL2qC,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,sDAAd,EACA,YAAY8O,OAAL,CAAa7S,IAApB,CAEA,CANI,CAOLiD,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,sDAAd,EACA,KAAK8O,OAAL,CAAa7S,IAAb,CAAoBkC,KAApB,CAEA,CAZI,CAlH+C,CAgIrDyM,eAAe,CAAE,CAChBg8B,GAAG,CAAE,UAAY,CAEhB7mC,OAAO,CAACC,IAAR,CAAc,4EAAd,EACA,YAAY8O,OAAL,CAAalE,eAApB,CAEA,CANe,CAOhB1L,GAAG,CAAE,SAAWf,KAAX,CAAmB,CAEvB4B,OAAO,CAACC,IAAR,CAAc,4EAAd,EACA,KAAK8O,OAAL,CAAalE,eAAb,CAA+BzM,KAA/B,CAEA,CAZe,CAhIoC,CAAtD,EAiJA;EAEA5D,KAAK,CAACmJ,SAAN,CAAgBg0F,IAAhB,CAAuB,SAAW1B,IAAX,CAAkB,CAExCj2F,OAAO,CAACC,IAAR,CAAc,wEAAd,EACA,MAAM68B,KAAK,CAAG,IAAd,CACA,MAAMo6E,WAAW,CAAG,IAAI98G,WAAJ,EAApB,CACA88G,WAAW,CAACvf,IAAZ,CAAkB1B,IAAlB,CAAwB,SAAWlwD,MAAX,CAAoB,CAE3CjJ,KAAK,CAACuiE,SAAN,CAAiBt5D,MAAjB,EAEA,CAJD,EAKA,WAAA,CAEA,CAZD,CAwBAtmD,UAAU,CAACkkB,SAAX,CAAqBwzG,aAArB,CAAqC,SAAW/1E,QAAX,CAAqBC,KAArB,CAA6B,CAEjErhC,OAAO,CAACC,IAAR,CAAc,sDAAd,EACA,YAAY0R,MAAL,CAAayvB,QAAb,CAAuBC,KAAvB,CAAP,CAEA,CALD,CAOA5hD,UAAU,CAACkkB,SAAX,CAAqBkjB,KAArB,CAA6B,SAAWua,QAAX,CAAqBxS,KAArB,CAA4BjgB,KAA5B,CAAmC0zB,OAAnC,CAA6C,CAEzEriC,OAAO,CAACC,IAAR,CAAc,0DAAd,EACA,YAAY2gC,YAAL,CAAkB/Z,KAAlB,CAAyBua,QAAzB,CAAmCxS,KAAnC,CAA0CjgB,KAA1C,CAAiD0zB,OAAjD,CAAP,CAEA,CALD,CAOAtrD,UAAU,CAACwgH,WAAX,CAAyBl7F,SAAzB,CAEAtlB,UAAU,CAACkkH,WAAX,CAAyB,SAAW/uF,GAAX,CAAgBpC,OAAhB,CAAyBosF,MAAzB,CAAiCE,OAAjC,CAA2C,CAEnEp2F,OAAO,CAACC,IAAR,CAAc,sFAAd,EAEA,MAAMi3F,MAAM,CAAG,IAAIvgG,aAAJ,EAAf,CACAugG,MAAM,CAACc,cAAP,CAAuB,KAAKT,WAA5B,EAEA,MAAMxoF,OAAO,CAAGmoF,MAAM,CAACS,IAAP,CAAazrF,GAAb,CAAkBgqF,MAAlB,CAA0B75F,SAA1B,CAAqC+5F,OAArC,CAAhB,CAEA,GAAKtsF,OAAL,CAAeiF,OAAO,CAACjF,OAAR,CAAkBA,OAAlB,CAEf,OAAOiF,OAAP,CAEA,CAbD,CAeAh4B,UAAU,CAACqgI,eAAX,CAA6B,SAAWpc,IAAX,CAAiBlxF,OAAjB,CAA0BosF,MAA1B,CAAkCE,OAAlC,CAA4C,CAExEp2F,OAAO,CAACC,IAAR,CAAc,8FAAd,EAEA,MAAMi3F,MAAM,CAAG,IAAIxgG,iBAAJ,EAAf,CACAwgG,MAAM,CAACc,cAAP,CAAuB,KAAKT,WAA5B,EAEA,MAAMxoF,OAAO,CAAGmoF,MAAM,CAACS,IAAP,CAAaqD,IAAb,CAAmB9E,MAAnB,CAA2B75F,SAA3B,CAAsC+5F,OAAtC,CAAhB,CAEA,GAAKtsF,OAAL,CAAeiF,OAAO,CAACjF,OAAR,CAAkBA,OAAlB,CAEf,OAAOiF,OAAP,CAEA,CAbD,CAeAh4B,UAAU,CAACsgI,qBAAX,CAAmC,UAAY,CAE9Cr3G,OAAO,CAAC8D,KAAR,CAAe,uFAAf,EAEA,CAJD,CAMA/sB,UAAU,CAACugI,yBAAX,CAAuC,UAAY,CAElDt3G,OAAO,CAAC8D,KAAR,CAAe,2FAAf,EAEA,CAJD,CAMA;EAkFA,GAAK,OAAO6yE,kBAAP,GAA8B,WAAnC,CAAiD,8BAGhDA,kBAAkB,CAAC75E,aAAnB,CAAkC,IAAI85E,WAAJ,CAAiB,UAAjB,CAA6B,CAAEC,MAAM,CAAE,CACxE0gC,QAAQ,CAAErrI,QAD8D,CAAV,CAA7B,CAAlC,EAGA,6BAID,GAAK,OAAO2mG,MAAP,GAAkB,WAAvB,CAAqC,CAEpC,GAAKA,MAAM,CAAC2kC,SAAZ,CAAwB,CAEvBx3G,OAAO,CAACC,IAAR,CAAc,yDAAd,EAEA,CAJD,KAIO,CAEN4yE,MAAM,CAAC2kC,SAAP,CAAmBtrI,QAAnB,CAEA,CAED;;ECjkhDc,sBAASuyB,CAAT,EAAYC,CAAZ,EAAeoO,CAAf,EAAkB;EAC/B,MAAI2qG,KAAJ;EAAA,MAAWC,QAAQ,GAAG,CAAtB;EAEA,MAAIj5G,CAAC,IAAI,IAAT,EAAeA,CAAC,GAAG,CAAJ;EACf,MAAIC,CAAC,IAAI,IAAT,EAAeA,CAAC,GAAG,CAAJ;EACf,MAAIoO,CAAC,IAAI,IAAT,EAAeA,CAAC,GAAG,CAAJ;;EAEf,WAAS+a,KAAT,GAAiB;EACf,QAAI1qB,CAAJ;EAAA,QACIoB,CAAC,GAAGk5G,KAAK,CAACp6G,MADd;EAAA,QAEIsmG,IAFJ;EAAA,QAGIj8F,EAAE,GAAG,CAHT;EAAA,QAIIC,EAAE,GAAG,CAJT;EAAA,QAKI2P,EAAE,GAAG,CALT;;EAOA,SAAKna,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoB,CAAhB,EAAmB,EAAEpB,CAArB,EAAwB;EACtBwmG,MAAAA,IAAI,GAAG8T,KAAK,CAACt6G,CAAD,CAAZ,EAAiBuK,EAAE,IAAIi8F,IAAI,CAACllG,CAAL,IAAU,CAAjC,EAAoCkJ,EAAE,IAAIg8F,IAAI,CAACjlG,CAAL,IAAU,CAApD,EAAuD4Y,EAAE,IAAIqsF,IAAI,CAAC72F,CAAL,IAAU,CAAvE;EACD;;EAED,SAAKpF,EAAE,GAAG,CAACA,EAAE,GAAGnJ,CAAL,GAASE,CAAV,IAAei5G,QAApB,EAA8B/vG,EAAE,GAAG,CAACA,EAAE,GAAGpJ,CAAL,GAASG,CAAV,IAAeg5G,QAAlD,EAA4DpgG,EAAE,GAAG,CAACA,EAAE,GAAG/Y,CAAL,GAASuO,CAAV,IAAe4qG,QAAhF,EAA0Fv6G,CAAC,GAAG,CAAnG,EAAsGA,CAAC,GAAGoB,CAA1G,EAA6G,EAAEpB,CAA/G,EAAkH;EAChHwmG,MAAAA,IAAI,GAAG8T,KAAK,CAACt6G,CAAD,CAAZ;;EACA,UAAIuK,EAAJ,EAAQ;EAAEi8F,QAAAA,IAAI,CAACllG,CAAL,IAAUiJ,EAAV;EAAc;;EACxB,UAAIC,EAAJ,EAAQ;EAAEg8F,QAAAA,IAAI,CAACjlG,CAAL,IAAUiJ,EAAV;EAAe;;EACzB,UAAI2P,EAAJ,EAAQ;EAAEqsF,QAAAA,IAAI,CAAC72F,CAAL,IAAUwK,EAAV;EAAe;EAC1B;EACF;;EAEDuQ,EAAAA,KAAK,CAAC8vF,UAAN,GAAmB,UAASC,CAAT,EAAY;EAC7BH,IAAAA,KAAK,GAAGG,CAAR;EACD,GAFD;;EAIA/vF,EAAAA,KAAK,CAACppB,CAAN,GAAU,UAASm5G,CAAT,EAAY;EACpB,WAAO/zG,SAAS,CAACxG,MAAV,IAAoBoB,CAAC,GAAG,CAACm5G,CAAL,EAAQ/vF,KAA5B,IAAqCppB,CAA5C;EACD,GAFD;;EAIAopB,EAAAA,KAAK,CAACnpB,CAAN,GAAU,UAASk5G,CAAT,EAAY;EACpB,WAAO/zG,SAAS,CAACxG,MAAV,IAAoBqB,CAAC,GAAG,CAACk5G,CAAL,EAAQ/vF,KAA5B,IAAqCnpB,CAA5C;EACD,GAFD;;EAIAmpB,EAAAA,KAAK,CAAC/a,CAAN,GAAU,UAAS8qG,CAAT,EAAY;EACpB,WAAO/zG,SAAS,CAACxG,MAAV,IAAoByP,CAAC,GAAG,CAAC8qG,CAAL,EAAQ/vF,KAA5B,IAAqC/a,CAA5C;EACD,GAFD;;EAIA+a,EAAAA,KAAK,CAAC6vF,QAAN,GAAiB,UAASE,CAAT,EAAY;EAC3B,WAAO/zG,SAAS,CAACxG,MAAV,IAAoBq6G,QAAQ,GAAG,CAACE,CAAZ,EAAe/vF,KAAnC,IAA4C6vF,QAAnD;EACD,GAFD;;EAIA,SAAO7vF,KAAP;EACD;;EChDc,qBAASrhB,CAAT,EAAY;EACzB,MAAI/H,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQ0jB,IAAR,CAAa,IAAb,EAAmBkJ,CAAnB,CAAT;EACA,SAAO1G,KAAG,CAAC,KAAK+3G,KAAL,CAAWp5G,CAAX,CAAD,EAAgBA,CAAhB,EAAmB+H,CAAnB,CAAV;EACD;;EAED,SAAS1G,KAAT,CAAag4G,IAAb,EAAmBr5G,CAAnB,EAAsB+H,CAAtB,EAAyB;EACvB,MAAI0xB,KAAK,CAACz5B,CAAD,CAAT,EAAc,OAAOq5G,IAAP,CADS;;EAGvB,MAAIzzF,MAAJ;EAAA,MACIs/E,IAAI,GAAGmU,IAAI,CAAC5M,KADhB;EAAA,MAEI6M,IAAI,GAAG;EAAClrG,IAAAA,IAAI,EAAErG;EAAP,GAFX;EAAA,MAGIgK,EAAE,GAAGsnG,IAAI,CAACE,GAHd;EAAA,MAIIpnG,EAAE,GAAGknG,IAAI,CAACG,GAJd;EAAA,MAKIC,EALJ;EAAA,MAMIC,EANJ;EAAA,MAOIt1F,KAPJ;EAAA,MAQI1lB,CARJ;EAAA,MASI2d,CATJ,CAHuB;;EAevB,MAAI,CAAC6oF,IAAL,EAAW,OAAOmU,IAAI,CAAC5M,KAAL,GAAa6M,IAAb,EAAmBD,IAA1B,CAfY;;EAkBvB,SAAOnU,IAAI,CAACtmG,MAAZ,EAAoB;EAClB,QAAIwlB,KAAK,GAAGpkB,CAAC,KAAKy5G,EAAE,GAAG,CAAC1nG,EAAE,GAAGI,EAAN,IAAY,CAAtB,CAAb,EAAuCJ,EAAE,GAAG0nG,EAAL,CAAvC,KAAqDtnG,EAAE,GAAGsnG,EAAL;EACrD,QAAI7zF,MAAM,GAAGs/E,IAAT,EAAe,EAAEA,IAAI,GAAGA,IAAI,CAACxmG,CAAC,GAAG,CAAC0lB,KAAN,CAAb,CAAnB,EAA+C,OAAOwB,MAAM,CAAClnB,CAAD,CAAN,GAAY46G,IAAZ,EAAkBD,IAAzB;EAChD,GArBsB;;;EAwBvBK,EAAAA,EAAE,GAAG,CAACL,IAAI,CAACl+H,EAAL,CAAQ0jB,IAAR,CAAa,IAAb,EAAmBqmG,IAAI,CAAC92F,IAAxB,CAAN;EACA,MAAIpO,CAAC,KAAK05G,EAAV,EAAc,OAAOJ,IAAI,CAAC7yD,IAAL,GAAYy+C,IAAZ,EAAkBt/E,MAAM,GAAGA,MAAM,CAAClnB,CAAD,CAAN,GAAY46G,IAAf,GAAsBD,IAAI,CAAC5M,KAAL,GAAa6M,IAA3D,EAAiED,IAAxE,CAzBS;;EA4BvB,KAAG;EACDzzF,IAAAA,MAAM,GAAGA,MAAM,GAAGA,MAAM,CAAClnB,CAAD,CAAN,GAAY,IAAIgP,KAAJ,CAAU,CAAV,CAAf,GAA8B2rG,IAAI,CAAC5M,KAAL,GAAa,IAAI/+F,KAAJ,CAAU,CAAV,CAA1D;EACA,QAAI0W,KAAK,GAAGpkB,CAAC,KAAKy5G,EAAE,GAAG,CAAC1nG,EAAE,GAAGI,EAAN,IAAY,CAAtB,CAAb,EAAuCJ,EAAE,GAAG0nG,EAAL,CAAvC,KAAqDtnG,EAAE,GAAGsnG,EAAL;EACtD,GAHD,QAGS,CAAC/6G,CAAC,GAAG,CAAC0lB,KAAN,OAAkB/H,CAAC,GAAG,EAAEq9F,EAAE,IAAID,EAAR,CAAtB,CAHT;;EAIA,SAAO7zF,MAAM,CAACvJ,CAAD,CAAN,GAAY6oF,IAAZ,EAAkBt/E,MAAM,CAAClnB,CAAD,CAAN,GAAY46G,IAA9B,EAAoCD,IAA3C;EACD;;EAEM,SAASM,QAAT,CAAgBvrG,IAAhB,EAAsB;EAC3B,MAAI1P,CAAJ;EAAA,MAAOoB,CAAC,GAAGsO,IAAI,CAACxP,MAAhB;EAAA,MACIoB,CADJ;EAAA,MAEI4P,EAAE,GAAG,IAAIlC,KAAJ,CAAU5N,CAAV,CAFT;EAAA,MAGIiS,EAAE,GAAGnI,QAHT;EAAA,MAIIuI,EAAE,GAAG,CAACvI,QAJV,CAD2B;;EAQ3B,OAAKlL,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoB,CAAhB,EAAmB,EAAEpB,CAArB,EAAwB;EACtB,QAAI+6B,KAAK,CAACz5B,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQ0jB,IAAR,CAAa,IAAb,EAAmBuP,IAAI,CAAC1P,CAAD,CAAvB,CAAN,CAAT,EAA6C;EAC7CkR,IAAAA,EAAE,CAAClR,CAAD,CAAF,GAAQsB,CAAR;EACA,QAAIA,CAAC,GAAG+R,EAAR,EAAYA,EAAE,GAAG/R,CAAL;EACZ,QAAIA,CAAC,GAAGmS,EAAR,EAAYA,EAAE,GAAGnS,CAAL;EACb,GAb0B;;;EAgB3B,MAAI+R,EAAE,GAAGI,EAAT,EAAa,OAAO,IAAP,CAhBc;;EAmB3B,OAAKinG,KAAL,CAAWrnG,EAAX,EAAeqnG,KAAf,CAAqBjnG,EAArB,EAnB2B;;EAsB3B,OAAKzT,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoB,CAAhB,EAAmB,EAAEpB,CAArB,EAAwB;EACtB2C,IAAAA,KAAG,CAAC,IAAD,EAAOuO,EAAE,CAAClR,CAAD,CAAT,EAAc0P,IAAI,CAAC1P,CAAD,CAAlB,CAAH;EACD;;EAED,SAAO,IAAP;EACD;;ECnEc,uBAASsB,CAAT,EAAY;EACzB,MAAIy5B,KAAK,CAACz5B,CAAC,GAAG,CAACA,CAAN,CAAT,EAAmB,OAAO,IAAP,CADM;;EAGzB,MAAI+R,EAAE,GAAG,KAAKwnG,GAAd;EAAA,MACIpnG,EAAE,GAAG,KAAKqnG,GADd,CAHyB;EAOzB;EACA;;EACA,MAAI//E,KAAK,CAAC1nB,EAAD,CAAT,EAAe;EACbI,IAAAA,EAAE,GAAG,CAACJ,EAAE,GAAGjT,IAAI,CAACsB,KAAL,CAAWJ,CAAX,CAAN,IAAuB,CAA5B;EACD,GAFD;EAAA,OAKK;EACH,UAAIqO,CAAC,GAAG8D,EAAE,GAAGJ,EAAL,IAAW,CAAnB;EAAA,UACImzF,IAAI,GAAG,KAAKuH,KADhB;EAAA,UAEI7mF,MAFJ;EAAA,UAGIlnB,CAHJ;;EAKA,aAAOqT,EAAE,GAAG/R,CAAL,IAAUA,CAAC,IAAImS,EAAtB,EAA0B;EACxBzT,QAAAA,CAAC,GAAG,EAAEsB,CAAC,GAAG+R,EAAN,CAAJ;EACA6T,QAAAA,MAAM,GAAG,IAAIlY,KAAJ,CAAU,CAAV,CAAT,EAAuBkY,MAAM,CAAClnB,CAAD,CAAN,GAAYwmG,IAAnC,EAAyCA,IAAI,GAAGt/E,MAAhD,EAAwDvX,CAAC,IAAI,CAA7D;;EACA,gBAAQ3P,CAAR;EACE,eAAK,CAAL;EAAQyT,YAAAA,EAAE,GAAGJ,EAAE,GAAG1D,CAAV;EAAa;;EACrB,eAAK,CAAL;EAAQ0D,YAAAA,EAAE,GAAGI,EAAE,GAAG9D,CAAV;EAAa;EAFvB;EAID;;EAED,UAAI,KAAKo+F,KAAL,IAAc,KAAKA,KAAL,CAAW7tG,MAA7B,EAAqC,KAAK6tG,KAAL,GAAavH,IAAb;EACtC;;EAED,OAAKqU,GAAL,GAAWxnG,EAAX;EACA,OAAKynG,GAAL,GAAWrnG,EAAX;EACA,SAAO,IAAP;EACD;;ECnCc,wBAAW;EACxB,MAAI/D,IAAI,GAAG,EAAX;EACA,OAAKwrG,KAAL,CAAW,UAAS1U,IAAT,EAAe;EACxB,QAAI,CAACA,IAAI,CAACtmG,MAAV,EAAkB,GAAGwP,IAAI,CAACrQ,IAAL,CAAUmnG,IAAI,CAAC92F,IAAf,EAAH,QAAgC82F,IAAI,GAAGA,IAAI,CAACz+C,IAA5C;EACnB,GAFD;EAGA,SAAOr4C,IAAP;EACD;;ECNc,wBAAS+qG,CAAT,EAAY;EACzB,SAAO/zG,SAAS,CAACxG,MAAV,GACD,KAAKw6G,KAAL,CAAW,CAACD,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAZ,EAAqBC,KAArB,CAA2B,CAACD,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAA5B,CADC,GAED1/E,KAAK,CAAC,KAAK8/E,GAAN,CAAL,GAAkB37G,SAAlB,GAA8B,CAAC,CAAC,KAAK27G,GAAN,CAAD,EAAa,CAAC,KAAKC,GAAN,CAAb,CAFpC;EAGD;;ECJc,eAAStU,IAAT,EAAenzF,EAAf,EAAmBI,EAAnB,EAAuB;EACpC,OAAK+yF,IAAL,GAAYA,IAAZ;EACA,OAAKnzF,EAAL,GAAUA,EAAV;EACA,OAAKI,EAAL,GAAUA,EAAV;EACD;;ECFc,sBAASnS,CAAT,EAAYqY,MAAZ,EAAoB;EACjC,MAAIjK,IAAJ;EAAA,MACI2D,EAAE,GAAG,KAAKwnG,GADd;EAAA,MAEIpnG,EAFJ;EAAA,MAGIqR,EAHJ;EAAA,MAIIk8D,EAAE,GAAG,KAAK85B,GAJd;EAAA,MAKIK,MAAM,GAAG,EALb;EAAA,MAMI3U,IAAI,GAAG,KAAKuH,KANhB;EAAA,MAOI/9F,CAPJ;EAAA,MAQIhQ,CARJ;EAUA,MAAIwmG,IAAJ,EAAU2U,MAAM,CAAC97G,IAAP,CAAY,IAAI+7G,IAAJ,CAAS5U,IAAT,EAAenzF,EAAf,EAAmB2tE,EAAnB,CAAZ;EACV,MAAIrnE,MAAM,IAAI,IAAd,EAAoBA,MAAM,GAAGzO,QAAT,CAApB,KACK;EACHmI,IAAAA,EAAE,GAAG/R,CAAC,GAAGqY,MAAT;EACAqnE,IAAAA,EAAE,GAAG1/E,CAAC,GAAGqY,MAAT;EACD;;EAED,SAAO3J,CAAC,GAAGmrG,MAAM,CAAC1qD,GAAP,EAAX,EAAyB;EAEvB;EACA,QAAI,EAAE+1C,IAAI,GAAGx2F,CAAC,CAACw2F,IAAX,KACG,CAAC/yF,EAAE,GAAGzD,CAAC,CAACqD,EAAR,IAAc2tE,EADjB,IAEG,CAACl8D,EAAE,GAAG9U,CAAC,CAACyD,EAAR,IAAcJ,EAFrB,EAEyB,SALF;;EAQvB,QAAImzF,IAAI,CAACtmG,MAAT,EAAiB;EACf,UAAI66G,EAAE,GAAG,CAACtnG,EAAE,GAAGqR,EAAN,IAAY,CAArB;EAEAq2F,MAAAA,MAAM,CAAC97G,IAAP,CACE,IAAI+7G,IAAJ,CAAS5U,IAAI,CAAC,CAAD,CAAb,EAAkBuU,EAAlB,EAAsBj2F,EAAtB,CADF,EAEE,IAAIs2F,IAAJ,CAAS5U,IAAI,CAAC,CAAD,CAAb,EAAkB/yF,EAAlB,EAAsBsnG,EAAtB,CAFF,EAHe;;EASf,UAAI/6G,CAAC,GAAG,EAAEsB,CAAC,IAAIy5G,EAAP,CAAR,EAAoB;EAClB/qG,QAAAA,CAAC,GAAGmrG,MAAM,CAACA,MAAM,CAACj7G,MAAP,GAAgB,CAAjB,CAAV;EACAi7G,QAAAA,MAAM,CAACA,MAAM,CAACj7G,MAAP,GAAgB,CAAjB,CAAN,GAA4Bi7G,MAAM,CAACA,MAAM,CAACj7G,MAAP,GAAgB,CAAhB,GAAoBF,CAArB,CAAlC;EACAm7G,QAAAA,MAAM,CAACA,MAAM,CAACj7G,MAAP,GAAgB,CAAhB,GAAoBF,CAArB,CAAN,GAAgCgQ,CAAhC;EACD;EACF,KAdD;EAAA,SAiBK;EACH,YAAI3G,CAAC,GAAGjJ,IAAI,CAACwE,GAAL,CAAStD,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQ0jB,IAAR,CAAa,IAAb,EAAmBqmG,IAAI,CAAC92F,IAAxB,CAAd,CAAR;;EACA,YAAIrG,CAAC,GAAGsQ,MAAR,EAAgB;EACdA,UAAAA,MAAM,GAAGtQ,CAAT;EACAgK,UAAAA,EAAE,GAAG/R,CAAC,GAAG+H,CAAT;EACA23E,UAAAA,EAAE,GAAG1/E,CAAC,GAAG+H,CAAT;EACAqG,UAAAA,IAAI,GAAG82F,IAAI,CAAC92F,IAAZ;EACD;EACF;EACF;;EAED,SAAOA,IAAP;EACD;;ECzDc,wBAASrG,CAAT,EAAY;EACzB,MAAI0xB,KAAK,CAACz5B,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQ0jB,IAAR,CAAa,IAAb,EAAmBkJ,CAAnB,CAAN,CAAT,EAAuC,OAAO,IAAP,CADd;;EAGzB,MAAI6d,MAAJ;EAAA,MACIs/E,IAAI,GAAG,KAAKuH,KADhB;EAAA,MAEIsN,QAFJ;EAAA,MAGIC,QAHJ;EAAA,MAIIvzD,IAJJ;EAAA,MAKI10C,EAAE,GAAG,KAAKwnG,GALd;EAAA,MAMIpnG,EAAE,GAAG,KAAKqnG,GANd;EAAA,MAOIx5G,CAPJ;EAAA,MAQIy5G,EARJ;EAAA,MASIr1F,KATJ;EAAA,MAUI1lB,CAVJ;EAAA,MAWI2d,CAXJ,CAHyB;;EAiBzB,MAAI,CAAC6oF,IAAL,EAAW,OAAO,IAAP,CAjBc;EAoBzB;;EACA,MAAIA,IAAI,CAACtmG,MAAT,EAAiB,OAAO,IAAP,EAAa;EAC5B,QAAIwlB,KAAK,GAAGpkB,CAAC,KAAKy5G,EAAE,GAAG,CAAC1nG,EAAE,GAAGI,EAAN,IAAY,CAAtB,CAAb,EAAuCJ,EAAE,GAAG0nG,EAAL,CAAvC,KAAqDtnG,EAAE,GAAGsnG,EAAL;EACrD,QAAI,EAAE7zF,MAAM,GAAGs/E,IAAT,EAAeA,IAAI,GAAGA,IAAI,CAACxmG,CAAC,GAAG,CAAC0lB,KAAN,CAA5B,CAAJ,EAA+C,OAAO,IAAP;EAC/C,QAAI,CAAC8gF,IAAI,CAACtmG,MAAV,EAAkB;EAClB,QAAIgnB,MAAM,CAAElnB,CAAC,GAAG,CAAL,GAAU,CAAX,CAAV,EAAyBq7G,QAAQ,GAAGn0F,MAAX,EAAmBvJ,CAAC,GAAG3d,CAAvB;EAC1B,GA1BwB;;EA6BzB,SAAOwmG,IAAI,CAAC92F,IAAL,KAAcrG,CAArB,EAAwB,IAAI,EAAEiyG,QAAQ,GAAG9U,IAAX,EAAiBA,IAAI,GAAGA,IAAI,CAACz+C,IAA/B,CAAJ,EAA0C,OAAO,IAAP;;EAClE,MAAIA,IAAI,GAAGy+C,IAAI,CAACz+C,IAAhB,EAAsB,OAAOy+C,IAAI,CAACz+C,IAAZ,CA9BG;;EAiCzB,MAAIuzD,QAAJ,EAAc,OAAQvzD,IAAI,GAAGuzD,QAAQ,CAACvzD,IAAT,GAAgBA,IAAnB,GAA0B,OAAOuzD,QAAQ,CAACvzD,IAA/C,EAAsD,IAA7D,CAjCW;;EAoCzB,MAAI,CAAC7gC,MAAL,EAAa,OAAO,KAAK6mF,KAAL,GAAahmD,IAAb,EAAmB,IAA1B,CApCY;;EAuCzBA,EAAAA,IAAI,GAAG7gC,MAAM,CAAClnB,CAAD,CAAN,GAAY+nD,IAAf,GAAsB,OAAO7gC,MAAM,CAAClnB,CAAD,CAAvC,CAvCyB;;EA0CzB,MAAI,CAACwmG,IAAI,GAAGt/E,MAAM,CAAC,CAAD,CAAN,IAAaA,MAAM,CAAC,CAAD,CAA3B,KACGs/E,IAAI,MAAMt/E,MAAM,CAAC,CAAD,CAAN,IAAaA,MAAM,CAAC,CAAD,CAAzB,CADP,IAEG,CAACs/E,IAAI,CAACtmG,MAFb,EAEqB;EACnB,QAAIm7G,QAAJ,EAAcA,QAAQ,CAAC19F,CAAD,CAAR,GAAc6oF,IAAd,CAAd,KACK,KAAKuH,KAAL,GAAavH,IAAb;EACN;;EAED,SAAO,IAAP;EACD;EAEM,SAAS+U,WAAT,CAAmB7rG,IAAnB,EAAyB;EAC9B,OAAK,IAAI1P,CAAC,GAAG,CAAR,EAAWoB,CAAC,GAAGsO,IAAI,CAACxP,MAAzB,EAAiCF,CAAC,GAAGoB,CAArC,EAAwC,EAAEpB,CAA1C,EAA6C,KAAKwpB,MAAL,CAAY9Z,IAAI,CAAC1P,CAAD,CAAhB;;EAC7C,SAAO,IAAP;EACD;;ECvDc,wBAAW;EACxB,SAAO,KAAK+tG,KAAZ;EACD;;ECFc,wBAAW;EACxB,MAAI3yF,IAAI,GAAG,CAAX;EACA,OAAK8/F,KAAL,CAAW,UAAS1U,IAAT,EAAe;EACxB,QAAI,CAACA,IAAI,CAACtmG,MAAV,EAAkB,GAAG,EAAEkb,IAAF,CAAH,QAAkBorF,IAAI,GAAGA,IAAI,CAACz+C,IAA9B;EACnB,GAFD;EAGA,SAAO3sC,IAAP;EACD;;ECJc,uBAAShE,QAAT,EAAmB;EAChC,MAAI+jG,MAAM,GAAG,EAAb;EAAA,MAAiBnrG,CAAjB;EAAA,MAAoBw2F,IAAI,GAAG,KAAKuH,KAAhC;EAAA,MAAuC/jF,KAAvC;EAAA,MAA8C3W,EAA9C;EAAA,MAAkDI,EAAlD;EACA,MAAI+yF,IAAJ,EAAU2U,MAAM,CAAC97G,IAAP,CAAY,IAAI+7G,IAAJ,CAAS5U,IAAT,EAAe,KAAKqU,GAApB,EAAyB,KAAKC,GAA9B,CAAZ;;EACV,SAAO9qG,CAAC,GAAGmrG,MAAM,CAAC1qD,GAAP,EAAX,EAAyB;EACvB,QAAI,CAACr5C,QAAQ,CAACovF,IAAI,GAAGx2F,CAAC,CAACw2F,IAAV,EAAgBnzF,EAAE,GAAGrD,CAAC,CAACqD,EAAvB,EAA2BI,EAAE,GAAGzD,CAAC,CAACyD,EAAlC,CAAT,IAAkD+yF,IAAI,CAACtmG,MAA3D,EAAmE;EACjE,UAAI66G,EAAE,GAAG,CAAC1nG,EAAE,GAAGI,EAAN,IAAY,CAArB;EACA,UAAIuW,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqB2U,MAAM,CAAC97G,IAAP,CAAY,IAAI+7G,IAAJ,CAASpxF,KAAT,EAAgB+wF,EAAhB,EAAoBtnG,EAApB,CAAZ;EACrB,UAAIuW,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqB2U,MAAM,CAAC97G,IAAP,CAAY,IAAI+7G,IAAJ,CAASpxF,KAAT,EAAgB3W,EAAhB,EAAoB0nG,EAApB,CAAZ;EACtB;EACF;;EACD,SAAO,IAAP;EACD;;ECXc,4BAAS3jG,QAAT,EAAmB;EAChC,MAAI+jG,MAAM,GAAG,EAAb;EAAA,MAAiBpzD,IAAI,GAAG,EAAxB;EAAA,MAA4B/3C,CAA5B;EACA,MAAI,KAAK+9F,KAAT,EAAgBoN,MAAM,CAAC97G,IAAP,CAAY,IAAI+7G,IAAJ,CAAS,KAAKrN,KAAd,EAAqB,KAAK8M,GAA1B,EAA+B,KAAKC,GAApC,CAAZ;;EAChB,SAAO9qG,CAAC,GAAGmrG,MAAM,CAAC1qD,GAAP,EAAX,EAAyB;EACvB,QAAI+1C,IAAI,GAAGx2F,CAAC,CAACw2F,IAAb;;EACA,QAAIA,IAAI,CAACtmG,MAAT,EAAiB;EACf,UAAI8pB,KAAJ;EAAA,UAAW3W,EAAE,GAAGrD,CAAC,CAACqD,EAAlB;EAAA,UAAsBI,EAAE,GAAGzD,CAAC,CAACyD,EAA7B;EAAA,UAAiCsnG,EAAE,GAAG,CAAC1nG,EAAE,GAAGI,EAAN,IAAY,CAAlD;EACA,UAAIuW,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqB2U,MAAM,CAAC97G,IAAP,CAAY,IAAI+7G,IAAJ,CAASpxF,KAAT,EAAgB3W,EAAhB,EAAoB0nG,EAApB,CAAZ;EACrB,UAAI/wF,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqB2U,MAAM,CAAC97G,IAAP,CAAY,IAAI+7G,IAAJ,CAASpxF,KAAT,EAAgB+wF,EAAhB,EAAoBtnG,EAApB,CAAZ;EACtB;;EACDs0C,IAAAA,IAAI,CAAC1oD,IAAL,CAAU2Q,CAAV;EACD;;EACD,SAAOA,CAAC,GAAG+3C,IAAI,CAAC0I,GAAL,EAAX,EAAuB;EACrBr5C,IAAAA,QAAQ,CAACpH,CAAC,CAACw2F,IAAH,EAASx2F,CAAC,CAACqD,EAAX,EAAerD,CAAC,CAACyD,EAAjB,CAAR;EACD;;EACD,SAAO,IAAP;EACD;;EClBM,SAAS+nG,UAAT,CAAkBnyG,CAAlB,EAAqB;EAC1B,SAAOA,CAAC,CAAC,CAAD,CAAR;EACD;EAEc,mBAASoxG,CAAT,EAAY;EACzB,SAAO/zG,SAAS,CAACxG,MAAV,IAAoB,KAAKzjB,EAAL,GAAUg+H,CAAV,EAAa,IAAjC,IAAyC,KAAKh+H,EAArD;EACD;;ECMc,SAASg/H,UAAT,CAAoBnB,KAApB,EAA2Bh5G,CAA3B,EAA8B;EAC3C,MAAIq5G,IAAI,GAAG,IAAIe,UAAJ,CAAep6G,CAAC,IAAI,IAAL,GAAYk6G,UAAZ,GAAuBl6G,CAAtC,EAAyCq6G,GAAzC,EAA8CA,GAA9C,CAAX;EACA,SAAOrB,KAAK,IAAI,IAAT,GAAgBK,IAAhB,GAAuBA,IAAI,CAACM,MAAL,CAAYX,KAAZ,CAA9B;EACD;;EAED,SAASoB,UAAT,CAAoBp6G,CAApB,EAAuB+R,EAAvB,EAA2BI,EAA3B,EAA+B;EAC7B,OAAKh3B,EAAL,GAAU6kB,CAAV;EACA,OAAKu5G,GAAL,GAAWxnG,EAAX;EACA,OAAKynG,GAAL,GAAWrnG,EAAX;EACA,OAAKs6F,KAAL,GAAa7uG,SAAb;EACD;;EAED,SAAS08G,WAAT,CAAmBhB,IAAnB,EAAyB;EACvB,MAAIn4G,IAAI,GAAG;EAACiN,IAAAA,IAAI,EAAEkrG,IAAI,CAAClrG;EAAZ,GAAX;EAAA,MAA8Bq4C,IAAI,GAAGtlD,IAArC;;EACA,SAAOm4G,IAAI,GAAGA,IAAI,CAAC7yD,IAAnB,EAAyBA,IAAI,GAAGA,IAAI,CAACA,IAAL,GAAY;EAACr4C,IAAAA,IAAI,EAAEkrG,IAAI,CAAClrG;EAAZ,GAAnB;;EACzB,SAAOjN,IAAP;EACD;;EAED,IAAIo5G,WAAS,GAAGJ,UAAU,CAACj1G,SAAX,GAAuBk1G,UAAU,CAACl1G,SAAlD;;AAEAq1G,aAAS,CAACp5G,IAAV,GAAiB,YAAW;EAC1B,MAAIA,IAAI,GAAG,IAAIi5G,UAAJ,CAAe,KAAKj/H,EAApB,EAAwB,KAAKo+H,GAA7B,EAAkC,KAAKC,GAAvC,CAAX;EAAA,MACItU,IAAI,GAAG,KAAKuH,KADhB;EAAA,MAEIuM,KAFJ;EAAA,MAGItwF,KAHJ;EAKA,MAAI,CAACw8E,IAAL,EAAW,OAAO/jG,IAAP;EAEX,MAAI,CAAC+jG,IAAI,CAACtmG,MAAV,EAAkB,OAAOuC,IAAI,CAACsrG,KAAL,GAAa6N,WAAS,CAACpV,IAAD,CAAtB,EAA8B/jG,IAArC;EAElB63G,EAAAA,KAAK,GAAG,CAAC;EAACnsG,IAAAA,MAAM,EAAEq4F,IAAT;EAAe3mG,IAAAA,MAAM,EAAE4C,IAAI,CAACsrG,KAAL,GAAa,IAAI/+F,KAAJ,CAAU,CAAV;EAApC,GAAD,CAAR;;EACA,SAAOw3F,IAAI,GAAG8T,KAAK,CAAC7pD,GAAN,EAAd,EAA2B;EACzB,SAAK,IAAIzwD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuB,EAAEA,CAAzB,EAA4B;EAC1B,UAAIgqB,KAAK,GAAGw8E,IAAI,CAACr4F,MAAL,CAAYnO,CAAZ,CAAZ,EAA4B;EAC1B,YAAIgqB,KAAK,CAAC9pB,MAAV,EAAkBo6G,KAAK,CAACj7G,IAAN,CAAW;EAAC8O,UAAAA,MAAM,EAAE6b,KAAT;EAAgBnqB,UAAAA,MAAM,EAAE2mG,IAAI,CAAC3mG,MAAL,CAAYG,CAAZ,IAAiB,IAAIgP,KAAJ,CAAU,CAAV;EAAzC,SAAX,EAAlB,KACKw3F,IAAI,CAAC3mG,MAAL,CAAYG,CAAZ,IAAiB47G,WAAS,CAAC5xF,KAAD,CAA1B;EACN;EACF;EACF;;EAED,SAAOvnB,IAAP;EACD,CArBD;;AAuBAo5G,aAAS,CAACl5G,GAAV,GAAgBm5G,UAAhB;AACAD,aAAS,CAACZ,MAAV,GAAmBc,QAAnB;AACAF,aAAS,CAACnB,KAAV,GAAkBsB,YAAlB;AACAH,aAAS,CAACnsG,IAAV,GAAiBusG,WAAjB;AACAJ,aAAS,CAACK,MAAV,GAAmBC,aAAnB;AACAN,aAAS,CAAC3qB,IAAV,GAAiBkrB,WAAjB;AACAP,aAAS,CAACryF,MAAV,GAAmB6yF,aAAnB;AACAR,aAAS,CAACN,SAAV,GAAsBe,WAAtB;AACAT,aAAS,CAAC/U,IAAV,GAAiByV,WAAjB;AACAV,aAAS,CAACzgG,IAAV,GAAiBohG,WAAjB;AACAX,aAAS,CAACX,KAAV,GAAkBuB,YAAlB;AACAZ,aAAS,CAACa,UAAV,GAAuBC,iBAAvB;AACAd,aAAS,CAACv6G,CAAV,GAAcs7G,QAAd;;ECnEe,qBAASvzG,CAAT,EAAY;EACzB,QAAM/H,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQ0jB,IAAR,CAAa,IAAb,EAAmBkJ,CAAnB,CAAX;EAAA,QACI9H,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQyjB,IAAR,CAAa,IAAb,EAAmBkJ,CAAnB,CADT;EAEA,SAAO1G,KAAG,CAAC,KAAK+3G,KAAL,CAAWp5G,CAAX,EAAcC,CAAd,CAAD,EAAmBD,CAAnB,EAAsBC,CAAtB,EAAyB8H,CAAzB,CAAV;EACD;;EAED,SAAS1G,KAAT,CAAag4G,IAAb,EAAmBr5G,CAAnB,EAAsBC,CAAtB,EAAyB8H,CAAzB,EAA4B;EAC1B,MAAI0xB,KAAK,CAACz5B,CAAD,CAAL,IAAYy5B,KAAK,CAACx5B,CAAD,CAArB,EAA0B,OAAOo5G,IAAP,CADA;;EAG1B,MAAIzzF,MAAJ;EAAA,MACIs/E,IAAI,GAAGmU,IAAI,CAAC5M,KADhB;EAAA,MAEI6M,IAAI,GAAG;EAAClrG,IAAAA,IAAI,EAAErG;EAAP,GAFX;EAAA,MAGIgK,EAAE,GAAGsnG,IAAI,CAACE,GAHd;EAAA,MAIIvnG,EAAE,GAAGqnG,IAAI,CAACkC,GAJd;EAAA,MAKIppG,EAAE,GAAGknG,IAAI,CAACG,GALd;EAAA,MAMIpnG,EAAE,GAAGinG,IAAI,CAACmC,GANd;EAAA,MAOI/B,EAPJ;EAAA,MAQIgC,EARJ;EAAA,MASI/B,EATJ;EAAA,MAUIgC,EAVJ;EAAA,MAWIt3F,KAXJ;EAAA,MAYIE,MAZJ;EAAA,MAaI5lB,CAbJ;EAAA,MAcI2d,CAdJ,CAH0B;;EAoB1B,MAAI,CAAC6oF,IAAL,EAAW,OAAOmU,IAAI,CAAC5M,KAAL,GAAa6M,IAAb,EAAmBD,IAA1B,CApBe;;EAuB1B,SAAOnU,IAAI,CAACtmG,MAAZ,EAAoB;EAClB,QAAIwlB,KAAK,GAAGpkB,CAAC,KAAKy5G,EAAE,GAAG,CAAC1nG,EAAE,GAAGI,EAAN,IAAY,CAAtB,CAAb,EAAuCJ,EAAE,GAAG0nG,EAAL,CAAvC,KAAqDtnG,EAAE,GAAGsnG,EAAL;EACrD,QAAIn1F,MAAM,GAAGrkB,CAAC,KAAKw7G,EAAE,GAAG,CAACzpG,EAAE,GAAGI,EAAN,IAAY,CAAtB,CAAd,EAAwCJ,EAAE,GAAGypG,EAAL,CAAxC,KAAsDrpG,EAAE,GAAGqpG,EAAL;EACtD,QAAI71F,MAAM,GAAGs/E,IAAT,EAAe,EAAEA,IAAI,GAAGA,IAAI,CAACxmG,CAAC,GAAG4lB,MAAM,IAAI,CAAV,GAAcF,KAAnB,CAAb,CAAnB,EAA4D,OAAOwB,MAAM,CAAClnB,CAAD,CAAN,GAAY46G,IAAZ,EAAkBD,IAAzB;EAC7D,GA3ByB;;;EA8B1BK,EAAAA,EAAE,GAAG,CAACL,IAAI,CAACl+H,EAAL,CAAQ0jB,IAAR,CAAa,IAAb,EAAmBqmG,IAAI,CAAC92F,IAAxB,CAAN;EACAstG,EAAAA,EAAE,GAAG,CAACrC,IAAI,CAACj+H,EAAL,CAAQyjB,IAAR,CAAa,IAAb,EAAmBqmG,IAAI,CAAC92F,IAAxB,CAAN;EACA,MAAIpO,CAAC,KAAK05G,EAAN,IAAYz5G,CAAC,KAAKy7G,EAAtB,EAA0B,OAAOpC,IAAI,CAAC7yD,IAAL,GAAYy+C,IAAZ,EAAkBt/E,MAAM,GAAGA,MAAM,CAAClnB,CAAD,CAAN,GAAY46G,IAAf,GAAsBD,IAAI,CAAC5M,KAAL,GAAa6M,IAA3D,EAAiED,IAAxE,CAhCA;;EAmC1B,KAAG;EACDzzF,IAAAA,MAAM,GAAGA,MAAM,GAAGA,MAAM,CAAClnB,CAAD,CAAN,GAAY,IAAIgP,KAAJ,CAAU,CAAV,CAAf,GAA8B2rG,IAAI,CAAC5M,KAAL,GAAa,IAAI/+F,KAAJ,CAAU,CAAV,CAA1D;EACA,QAAI0W,KAAK,GAAGpkB,CAAC,KAAKy5G,EAAE,GAAG,CAAC1nG,EAAE,GAAGI,EAAN,IAAY,CAAtB,CAAb,EAAuCJ,EAAE,GAAG0nG,EAAL,CAAvC,KAAqDtnG,EAAE,GAAGsnG,EAAL;EACrD,QAAIn1F,MAAM,GAAGrkB,CAAC,KAAKw7G,EAAE,GAAG,CAACzpG,EAAE,GAAGI,EAAN,IAAY,CAAtB,CAAd,EAAwCJ,EAAE,GAAGypG,EAAL,CAAxC,KAAsDrpG,EAAE,GAAGqpG,EAAL;EACvD,GAJD,QAIS,CAAC/8G,CAAC,GAAG4lB,MAAM,IAAI,CAAV,GAAcF,KAAnB,OAA+B/H,CAAC,GAAG,CAACq/F,EAAE,IAAID,EAAP,KAAc,CAAd,GAAmB/B,EAAE,IAAID,EAA5D,CAJT;;EAKA,SAAO7zF,MAAM,CAACvJ,CAAD,CAAN,GAAY6oF,IAAZ,EAAkBt/E,MAAM,CAAClnB,CAAD,CAAN,GAAY46G,IAA9B,EAAoCD,IAA3C;EACD;;EAEM,SAASM,QAAT,CAAgBvrG,IAAhB,EAAsB;EAC3B,MAAIrG,CAAJ;EAAA,MAAOrJ,CAAP;EAAA,MAAUoB,CAAC,GAAGsO,IAAI,CAACxP,MAAnB;EAAA,MACIoB,CADJ;EAAA,MAEIC,CAFJ;EAAA,MAGI2P,EAAE,GAAG,IAAIlC,KAAJ,CAAU5N,CAAV,CAHT;EAAA,MAII+P,EAAE,GAAG,IAAInC,KAAJ,CAAU5N,CAAV,CAJT;EAAA,MAKIiS,EAAE,GAAGnI,QALT;EAAA,MAMIoI,EAAE,GAAGpI,QANT;EAAA,MAOIuI,EAAE,GAAG,CAACvI,QAPV;EAAA,MAQIwI,EAAE,GAAG,CAACxI,QARV,CAD2B;;EAY3B,OAAKlL,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoB,CAAhB,EAAmB,EAAEpB,CAArB,EAAwB;EACtB,QAAI+6B,KAAK,CAACz5B,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQ0jB,IAAR,CAAa,IAAb,EAAmBkJ,CAAC,GAAGqG,IAAI,CAAC1P,CAAD,CAA3B,CAAN,CAAL,IAA+C+6B,KAAK,CAACx5B,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQyjB,IAAR,CAAa,IAAb,EAAmBkJ,CAAnB,CAAN,CAAxD,EAAsF;EACtF6H,IAAAA,EAAE,CAAClR,CAAD,CAAF,GAAQsB,CAAR;EACA6P,IAAAA,EAAE,CAACnR,CAAD,CAAF,GAAQuB,CAAR;EACA,QAAID,CAAC,GAAG+R,EAAR,EAAYA,EAAE,GAAG/R,CAAL;EACZ,QAAIA,CAAC,GAAGmS,EAAR,EAAYA,EAAE,GAAGnS,CAAL;EACZ,QAAIC,CAAC,GAAG+R,EAAR,EAAYA,EAAE,GAAG/R,CAAL;EACZ,QAAIA,CAAC,GAAGmS,EAAR,EAAYA,EAAE,GAAGnS,CAAL;EACb,GApB0B;;;EAuB3B,MAAI8R,EAAE,GAAGI,EAAL,IAAWH,EAAE,GAAGI,EAApB,EAAwB,OAAO,IAAP,CAvBG;;EA0B3B,OAAKgnG,KAAL,CAAWrnG,EAAX,EAAeC,EAAf,EAAmBonG,KAAnB,CAAyBjnG,EAAzB,EAA6BC,EAA7B,EA1B2B;;EA6B3B,OAAK1T,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoB,CAAhB,EAAmB,EAAEpB,CAArB,EAAwB;EACtB2C,IAAAA,KAAG,CAAC,IAAD,EAAOuO,EAAE,CAAClR,CAAD,CAAT,EAAcmR,EAAE,CAACnR,CAAD,CAAhB,EAAqB0P,IAAI,CAAC1P,CAAD,CAAzB,CAAH;EACD;;EAED,SAAO,IAAP;EACD;;ECnFc,uBAASsB,CAAT,EAAYC,CAAZ,EAAe;EAC5B,MAAIw5B,KAAK,CAACz5B,CAAC,GAAG,CAACA,CAAN,CAAL,IAAiBy5B,KAAK,CAACx5B,CAAC,GAAG,CAACA,CAAN,CAA1B,EAAoC,OAAO,IAAP,CADR;;EAG5B,MAAI8R,EAAE,GAAG,KAAKwnG,GAAd;EAAA,MACIvnG,EAAE,GAAG,KAAKupG,GADd;EAAA,MAEIppG,EAAE,GAAG,KAAKqnG,GAFd;EAAA,MAGIpnG,EAAE,GAAG,KAAKopG,GAHd,CAH4B;EAS5B;EACA;;EACA,MAAI/hF,KAAK,CAAC1nB,EAAD,CAAT,EAAe;EACbI,IAAAA,EAAE,GAAG,CAACJ,EAAE,GAAGjT,IAAI,CAACsB,KAAL,CAAWJ,CAAX,CAAN,IAAuB,CAA5B;EACAoS,IAAAA,EAAE,GAAG,CAACJ,EAAE,GAAGlT,IAAI,CAACsB,KAAL,CAAWH,CAAX,CAAN,IAAuB,CAA5B;EACD,GAHD;EAAA,OAMK;EACH,UAAIoO,CAAC,GAAG8D,EAAE,GAAGJ,EAAL,IAAW,CAAnB;EAAA,UACImzF,IAAI,GAAG,KAAKuH,KADhB;EAAA,UAEI7mF,MAFJ;EAAA,UAGIlnB,CAHJ;;EAKA,aAAOqT,EAAE,GAAG/R,CAAL,IAAUA,CAAC,IAAImS,EAAf,IAAqBH,EAAE,GAAG/R,CAA1B,IAA+BA,CAAC,IAAImS,EAA3C,EAA+C;EAC7C1T,QAAAA,CAAC,GAAG,CAACuB,CAAC,GAAG+R,EAAL,KAAY,CAAZ,GAAiBhS,CAAC,GAAG+R,EAAzB;EACA6T,QAAAA,MAAM,GAAG,IAAIlY,KAAJ,CAAU,CAAV,CAAT,EAAuBkY,MAAM,CAAClnB,CAAD,CAAN,GAAYwmG,IAAnC,EAAyCA,IAAI,GAAGt/E,MAAhD,EAAwDvX,CAAC,IAAI,CAA7D;;EACA,gBAAQ3P,CAAR;EACE,eAAK,CAAL;EAAQyT,YAAAA,EAAE,GAAGJ,EAAE,GAAG1D,CAAV,EAAa+D,EAAE,GAAGJ,EAAE,GAAG3D,CAAvB;EAA0B;;EAClC,eAAK,CAAL;EAAQ0D,YAAAA,EAAE,GAAGI,EAAE,GAAG9D,CAAV,EAAa+D,EAAE,GAAGJ,EAAE,GAAG3D,CAAvB;EAA0B;;EAClC,eAAK,CAAL;EAAQ8D,YAAAA,EAAE,GAAGJ,EAAE,GAAG1D,CAAV,EAAa2D,EAAE,GAAGI,EAAE,GAAG/D,CAAvB;EAA0B;;EAClC,eAAK,CAAL;EAAQ0D,YAAAA,EAAE,GAAGI,EAAE,GAAG9D,CAAV,EAAa2D,EAAE,GAAGI,EAAE,GAAG/D,CAAvB;EAA0B;EAJpC;EAMD;;EAED,UAAI,KAAKo+F,KAAL,IAAc,KAAKA,KAAL,CAAW7tG,MAA7B,EAAqC,KAAK6tG,KAAL,GAAavH,IAAb;EACtC;;EAED,OAAKqU,GAAL,GAAWxnG,EAAX;EACA,OAAKwpG,GAAL,GAAWvpG,EAAX;EACA,OAAKwnG,GAAL,GAAWrnG,EAAX;EACA,OAAKqpG,GAAL,GAAWppG,EAAX;EACA,SAAO,IAAP;EACD;;EC1Cc,wBAAW;EACxB,MAAIhE,IAAI,GAAG,EAAX;EACA,OAAKwrG,KAAL,CAAW,UAAS1U,IAAT,EAAe;EACxB,QAAI,CAACA,IAAI,CAACtmG,MAAV,EAAkB,GAAGwP,IAAI,CAACrQ,IAAL,CAAUmnG,IAAI,CAAC92F,IAAf,EAAH,QAAgC82F,IAAI,GAAGA,IAAI,CAACz+C,IAA5C;EACnB,GAFD;EAGA,SAAOr4C,IAAP;EACD;;ECNc,wBAAS+qG,CAAT,EAAY;EACzB,SAAO/zG,SAAS,CAACxG,MAAV,GACD,KAAKw6G,KAAL,CAAW,CAACD,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAZ,EAAqB,CAACA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAtB,EAA+BC,KAA/B,CAAqC,CAACD,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAtC,EAA+C,CAACA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAhD,CADC,GAED1/E,KAAK,CAAC,KAAK8/E,GAAN,CAAL,GAAkB37G,SAAlB,GAA8B,CAAC,CAAC,KAAK27G,GAAN,EAAW,KAAKgC,GAAhB,CAAD,EAAuB,CAAC,KAAK/B,GAAN,EAAW,KAAKgC,GAAhB,CAAvB,CAFpC;EAGD;;ECJc,eAAStW,IAAT,EAAenzF,EAAf,EAAmBC,EAAnB,EAAuBG,EAAvB,EAA2BC,EAA3B,EAA+B;EAC5C,OAAK8yF,IAAL,GAAYA,IAAZ;EACA,OAAKnzF,EAAL,GAAUA,EAAV;EACA,OAAKC,EAAL,GAAUA,EAAV;EACA,OAAKG,EAAL,GAAUA,EAAV;EACA,OAAKC,EAAL,GAAUA,EAAV;EACD;;ECJc,sBAASpS,CAAT,EAAYC,CAAZ,EAAeoY,MAAf,EAAuB;EACpC,MAAIjK,IAAJ;EAAA,MACI2D,EAAE,GAAG,KAAKwnG,GADd;EAAA,MAEIvnG,EAAE,GAAG,KAAKupG,GAFd;EAAA,MAGIppG,EAHJ;EAAA,MAIIC,EAJJ;EAAA,MAKIoR,EALJ;EAAA,MAMIC,EANJ;EAAA,MAOIi8D,EAAE,GAAG,KAAK85B,GAPd;EAAA,MAQImC,EAAE,GAAG,KAAKH,GARd;EAAA,MASII,KAAK,GAAG,EATZ;EAAA,MAUI1W,IAAI,GAAG,KAAKuH,KAVhB;EAAA,MAWI/9F,CAXJ;EAAA,MAYIhQ,CAZJ;EAcA,MAAIwmG,IAAJ,EAAU0W,KAAK,CAAC79G,IAAN,CAAW,IAAI89G,IAAJ,CAAS3W,IAAT,EAAenzF,EAAf,EAAmBC,EAAnB,EAAuB0tE,EAAvB,EAA2Bi8B,EAA3B,CAAX;EACV,MAAItjG,MAAM,IAAI,IAAd,EAAoBA,MAAM,GAAGzO,QAAT,CAApB,KACK;EACHmI,IAAAA,EAAE,GAAG/R,CAAC,GAAGqY,MAAT,EAAiBrG,EAAE,GAAG/R,CAAC,GAAGoY,MAA1B;EACAqnE,IAAAA,EAAE,GAAG1/E,CAAC,GAAGqY,MAAT,EAAiBsjG,EAAE,GAAG17G,CAAC,GAAGoY,MAA1B;EACAA,IAAAA,MAAM,IAAIA,MAAV;EACD;;EAED,SAAO3J,CAAC,GAAGktG,KAAK,CAACzsD,GAAN,EAAX,EAAwB;EAEtB;EACA,QAAI,EAAE+1C,IAAI,GAAGx2F,CAAC,CAACw2F,IAAX,KACG,CAAC/yF,EAAE,GAAGzD,CAAC,CAACqD,EAAR,IAAc2tE,EADjB,IAEG,CAACttE,EAAE,GAAG1D,CAAC,CAACsD,EAAR,IAAc2pG,EAFjB,IAGG,CAACn4F,EAAE,GAAG9U,CAAC,CAACyD,EAAR,IAAcJ,EAHjB,IAIG,CAAC0R,EAAE,GAAG/U,CAAC,CAAC0D,EAAR,IAAcJ,EAJrB,EAIyB,SAPH;;EAUtB,QAAIkzF,IAAI,CAACtmG,MAAT,EAAiB;EACf,UAAI66G,EAAE,GAAG,CAACtnG,EAAE,GAAGqR,EAAN,IAAY,CAArB;EAAA,UACIi4F,EAAE,GAAG,CAACrpG,EAAE,GAAGqR,EAAN,IAAY,CADrB;EAGAm4F,MAAAA,KAAK,CAAC79G,IAAN,CACE,IAAI89G,IAAJ,CAAS3W,IAAI,CAAC,CAAD,CAAb,EAAkBuU,EAAlB,EAAsBgC,EAAtB,EAA0Bj4F,EAA1B,EAA8BC,EAA9B,CADF,EAEE,IAAIo4F,IAAJ,CAAS3W,IAAI,CAAC,CAAD,CAAb,EAAkB/yF,EAAlB,EAAsBspG,EAAtB,EAA0BhC,EAA1B,EAA8Bh2F,EAA9B,CAFF,EAGE,IAAIo4F,IAAJ,CAAS3W,IAAI,CAAC,CAAD,CAAb,EAAkBuU,EAAlB,EAAsBrnG,EAAtB,EAA0BoR,EAA1B,EAA8Bi4F,EAA9B,CAHF,EAIE,IAAII,IAAJ,CAAS3W,IAAI,CAAC,CAAD,CAAb,EAAkB/yF,EAAlB,EAAsBC,EAAtB,EAA0BqnG,EAA1B,EAA8BgC,EAA9B,CAJF,EAJe;;EAYf,UAAI/8G,CAAC,GAAG,CAACuB,CAAC,IAAIw7G,EAAN,KAAa,CAAb,GAAkBz7G,CAAC,IAAIy5G,EAA/B,EAAoC;EAClC/qG,QAAAA,CAAC,GAAGktG,KAAK,CAACA,KAAK,CAACh9G,MAAN,GAAe,CAAhB,CAAT;EACAg9G,QAAAA,KAAK,CAACA,KAAK,CAACh9G,MAAN,GAAe,CAAhB,CAAL,GAA0Bg9G,KAAK,CAACA,KAAK,CAACh9G,MAAN,GAAe,CAAf,GAAmBF,CAApB,CAA/B;EACAk9G,QAAAA,KAAK,CAACA,KAAK,CAACh9G,MAAN,GAAe,CAAf,GAAmBF,CAApB,CAAL,GAA8BgQ,CAA9B;EACD;EACF,KAjBD;EAAA,SAoBK;EACH,YAAI9K,EAAE,GAAG5D,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQ0jB,IAAR,CAAa,IAAb,EAAmBqmG,IAAI,CAAC92F,IAAxB,CAAd;EAAA,YACIvK,EAAE,GAAG5D,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQyjB,IAAR,CAAa,IAAb,EAAmBqmG,IAAI,CAAC92F,IAAxB,CADd;EAAA,YAEI5O,EAAE,GAAGoE,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAFxB;;EAGA,YAAIrE,EAAE,GAAG6Y,MAAT,EAAiB;EACf,cAAItQ,CAAC,GAAGjJ,IAAI,CAACsE,IAAL,CAAUiV,MAAM,GAAG7Y,EAAnB,CAAR;EACAuS,UAAAA,EAAE,GAAG/R,CAAC,GAAG+H,CAAT,EAAYiK,EAAE,GAAG/R,CAAC,GAAG8H,CAArB;EACA23E,UAAAA,EAAE,GAAG1/E,CAAC,GAAG+H,CAAT,EAAY4zG,EAAE,GAAG17G,CAAC,GAAG8H,CAArB;EACAqG,UAAAA,IAAI,GAAG82F,IAAI,CAAC92F,IAAZ;EACD;EACF;EACF;;EAED,SAAOA,IAAP;EACD;;ECrEc,wBAASrG,CAAT,EAAY;EACzB,MAAI0xB,KAAK,CAACz5B,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQ0jB,IAAR,CAAa,IAAb,EAAmBkJ,CAAnB,CAAN,CAAL,IAAqC0xB,KAAK,CAACx5B,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQyjB,IAAR,CAAa,IAAb,EAAmBkJ,CAAnB,CAAN,CAA9C,EAA4E,OAAO,IAAP,CADnD;;EAGzB,MAAI6d,MAAJ;EAAA,MACIs/E,IAAI,GAAG,KAAKuH,KADhB;EAAA,MAEIsN,QAFJ;EAAA,MAGIC,QAHJ;EAAA,MAIIvzD,IAJJ;EAAA,MAKI10C,EAAE,GAAG,KAAKwnG,GALd;EAAA,MAMIvnG,EAAE,GAAG,KAAKupG,GANd;EAAA,MAOIppG,EAAE,GAAG,KAAKqnG,GAPd;EAAA,MAQIpnG,EAAE,GAAG,KAAKopG,GARd;EAAA,MASIx7G,CATJ;EAAA,MAUIC,CAVJ;EAAA,MAWIw5G,EAXJ;EAAA,MAYIgC,EAZJ;EAAA,MAaIr3F,KAbJ;EAAA,MAcIE,MAdJ;EAAA,MAeI5lB,CAfJ;EAAA,MAgBI2d,CAhBJ,CAHyB;;EAsBzB,MAAI,CAAC6oF,IAAL,EAAW,OAAO,IAAP,CAtBc;EAyBzB;;EACA,MAAIA,IAAI,CAACtmG,MAAT,EAAiB,OAAO,IAAP,EAAa;EAC5B,QAAIwlB,KAAK,GAAGpkB,CAAC,KAAKy5G,EAAE,GAAG,CAAC1nG,EAAE,GAAGI,EAAN,IAAY,CAAtB,CAAb,EAAuCJ,EAAE,GAAG0nG,EAAL,CAAvC,KAAqDtnG,EAAE,GAAGsnG,EAAL;EACrD,QAAIn1F,MAAM,GAAGrkB,CAAC,KAAKw7G,EAAE,GAAG,CAACzpG,EAAE,GAAGI,EAAN,IAAY,CAAtB,CAAd,EAAwCJ,EAAE,GAAGypG,EAAL,CAAxC,KAAsDrpG,EAAE,GAAGqpG,EAAL;EACtD,QAAI,EAAE71F,MAAM,GAAGs/E,IAAT,EAAeA,IAAI,GAAGA,IAAI,CAACxmG,CAAC,GAAG4lB,MAAM,IAAI,CAAV,GAAcF,KAAnB,CAA5B,CAAJ,EAA4D,OAAO,IAAP;EAC5D,QAAI,CAAC8gF,IAAI,CAACtmG,MAAV,EAAkB;EAClB,QAAIgnB,MAAM,CAAElnB,CAAC,GAAG,CAAL,GAAU,CAAX,CAAN,IAAuBknB,MAAM,CAAElnB,CAAC,GAAG,CAAL,GAAU,CAAX,CAA7B,IAA8CknB,MAAM,CAAElnB,CAAC,GAAG,CAAL,GAAU,CAAX,CAAxD,EAAuEq7G,QAAQ,GAAGn0F,MAAX,EAAmBvJ,CAAC,GAAG3d,CAAvB;EACxE,GAhCwB;;EAmCzB,SAAOwmG,IAAI,CAAC92F,IAAL,KAAcrG,CAArB,EAAwB,IAAI,EAAEiyG,QAAQ,GAAG9U,IAAX,EAAiBA,IAAI,GAAGA,IAAI,CAACz+C,IAA/B,CAAJ,EAA0C,OAAO,IAAP;;EAClE,MAAIA,IAAI,GAAGy+C,IAAI,CAACz+C,IAAhB,EAAsB,OAAOy+C,IAAI,CAACz+C,IAAZ,CApCG;;EAuCzB,MAAIuzD,QAAJ,EAAc,OAAQvzD,IAAI,GAAGuzD,QAAQ,CAACvzD,IAAT,GAAgBA,IAAnB,GAA0B,OAAOuzD,QAAQ,CAACvzD,IAA/C,EAAsD,IAA7D,CAvCW;;EA0CzB,MAAI,CAAC7gC,MAAL,EAAa,OAAO,KAAK6mF,KAAL,GAAahmD,IAAb,EAAmB,IAA1B,CA1CY;;EA6CzBA,EAAAA,IAAI,GAAG7gC,MAAM,CAAClnB,CAAD,CAAN,GAAY+nD,IAAf,GAAsB,OAAO7gC,MAAM,CAAClnB,CAAD,CAAvC,CA7CyB;;EAgDzB,MAAI,CAACwmG,IAAI,GAAGt/E,MAAM,CAAC,CAAD,CAAN,IAAaA,MAAM,CAAC,CAAD,CAAnB,IAA0BA,MAAM,CAAC,CAAD,CAAhC,IAAuCA,MAAM,CAAC,CAAD,CAArD,KACGs/E,IAAI,MAAMt/E,MAAM,CAAC,CAAD,CAAN,IAAaA,MAAM,CAAC,CAAD,CAAnB,IAA0BA,MAAM,CAAC,CAAD,CAAhC,IAAuCA,MAAM,CAAC,CAAD,CAAnD,CADP,IAEG,CAACs/E,IAAI,CAACtmG,MAFb,EAEqB;EACnB,QAAIm7G,QAAJ,EAAcA,QAAQ,CAAC19F,CAAD,CAAR,GAAc6oF,IAAd,CAAd,KACK,KAAKuH,KAAL,GAAavH,IAAb;EACN;;EAED,SAAO,IAAP;EACD;EAEM,SAAS+U,WAAT,CAAmB7rG,IAAnB,EAAyB;EAC9B,OAAK,IAAI1P,CAAC,GAAG,CAAR,EAAWoB,CAAC,GAAGsO,IAAI,CAACxP,MAAzB,EAAiCF,CAAC,GAAGoB,CAArC,EAAwC,EAAEpB,CAA1C,EAA6C,KAAKwpB,MAAL,CAAY9Z,IAAI,CAAC1P,CAAD,CAAhB;;EAC7C,SAAO,IAAP;EACD;;EC7Dc,wBAAW;EACxB,SAAO,KAAK+tG,KAAZ;EACD;;ECFc,wBAAW;EACxB,MAAI3yF,IAAI,GAAG,CAAX;EACA,OAAK8/F,KAAL,CAAW,UAAS1U,IAAT,EAAe;EACxB,QAAI,CAACA,IAAI,CAACtmG,MAAV,EAAkB,GAAG,EAAEkb,IAAF,CAAH,QAAkBorF,IAAI,GAAGA,IAAI,CAACz+C,IAA9B;EACnB,GAFD;EAGA,SAAO3sC,IAAP;EACD;;ECJc,uBAAShE,QAAT,EAAmB;EAChC,MAAI8lG,KAAK,GAAG,EAAZ;EAAA,MAAgBltG,CAAhB;EAAA,MAAmBw2F,IAAI,GAAG,KAAKuH,KAA/B;EAAA,MAAsC/jF,KAAtC;EAAA,MAA6C3W,EAA7C;EAAA,MAAiDC,EAAjD;EAAA,MAAqDG,EAArD;EAAA,MAAyDC,EAAzD;EACA,MAAI8yF,IAAJ,EAAU0W,KAAK,CAAC79G,IAAN,CAAW,IAAI89G,IAAJ,CAAS3W,IAAT,EAAe,KAAKqU,GAApB,EAAyB,KAAKgC,GAA9B,EAAmC,KAAK/B,GAAxC,EAA6C,KAAKgC,GAAlD,CAAX;;EACV,SAAO9sG,CAAC,GAAGktG,KAAK,CAACzsD,GAAN,EAAX,EAAwB;EACtB,QAAI,CAACr5C,QAAQ,CAACovF,IAAI,GAAGx2F,CAAC,CAACw2F,IAAV,EAAgBnzF,EAAE,GAAGrD,CAAC,CAACqD,EAAvB,EAA2BC,EAAE,GAAGtD,CAAC,CAACsD,EAAlC,EAAsCG,EAAE,GAAGzD,CAAC,CAACyD,EAA7C,EAAiDC,EAAE,GAAG1D,CAAC,CAAC0D,EAAxD,CAAT,IAAwE8yF,IAAI,CAACtmG,MAAjF,EAAyF;EACvF,UAAI66G,EAAE,GAAG,CAAC1nG,EAAE,GAAGI,EAAN,IAAY,CAArB;EAAA,UAAwBspG,EAAE,GAAG,CAACzpG,EAAE,GAAGI,EAAN,IAAY,CAAzC;EACA,UAAIsW,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqB0W,KAAK,CAAC79G,IAAN,CAAW,IAAI89G,IAAJ,CAASnzF,KAAT,EAAgB+wF,EAAhB,EAAoBgC,EAApB,EAAwBtpG,EAAxB,EAA4BC,EAA5B,CAAX;EACrB,UAAIsW,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqB0W,KAAK,CAAC79G,IAAN,CAAW,IAAI89G,IAAJ,CAASnzF,KAAT,EAAgB3W,EAAhB,EAAoB0pG,EAApB,EAAwBhC,EAAxB,EAA4BrnG,EAA5B,CAAX;EACrB,UAAIsW,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqB0W,KAAK,CAAC79G,IAAN,CAAW,IAAI89G,IAAJ,CAASnzF,KAAT,EAAgB+wF,EAAhB,EAAoBznG,EAApB,EAAwBG,EAAxB,EAA4BspG,EAA5B,CAAX;EACrB,UAAI/yF,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqB0W,KAAK,CAAC79G,IAAN,CAAW,IAAI89G,IAAJ,CAASnzF,KAAT,EAAgB3W,EAAhB,EAAoBC,EAApB,EAAwBynG,EAAxB,EAA4BgC,EAA5B,CAAX;EACtB;EACF;;EACD,SAAO,IAAP;EACD;;ECbc,4BAAS3lG,QAAT,EAAmB;EAChC,MAAI8lG,KAAK,GAAG,EAAZ;EAAA,MAAgBn1D,IAAI,GAAG,EAAvB;EAAA,MAA2B/3C,CAA3B;EACA,MAAI,KAAK+9F,KAAT,EAAgBmP,KAAK,CAAC79G,IAAN,CAAW,IAAI89G,IAAJ,CAAS,KAAKpP,KAAd,EAAqB,KAAK8M,GAA1B,EAA+B,KAAKgC,GAApC,EAAyC,KAAK/B,GAA9C,EAAmD,KAAKgC,GAAxD,CAAX;;EAChB,SAAO9sG,CAAC,GAAGktG,KAAK,CAACzsD,GAAN,EAAX,EAAwB;EACtB,QAAI+1C,IAAI,GAAGx2F,CAAC,CAACw2F,IAAb;;EACA,QAAIA,IAAI,CAACtmG,MAAT,EAAiB;EACf,UAAI8pB,KAAJ;EAAA,UAAW3W,EAAE,GAAGrD,CAAC,CAACqD,EAAlB;EAAA,UAAsBC,EAAE,GAAGtD,CAAC,CAACsD,EAA7B;EAAA,UAAiCG,EAAE,GAAGzD,CAAC,CAACyD,EAAxC;EAAA,UAA4CC,EAAE,GAAG1D,CAAC,CAAC0D,EAAnD;EAAA,UAAuDqnG,EAAE,GAAG,CAAC1nG,EAAE,GAAGI,EAAN,IAAY,CAAxE;EAAA,UAA2EspG,EAAE,GAAG,CAACzpG,EAAE,GAAGI,EAAN,IAAY,CAA5F;EACA,UAAIsW,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqB0W,KAAK,CAAC79G,IAAN,CAAW,IAAI89G,IAAJ,CAASnzF,KAAT,EAAgB3W,EAAhB,EAAoBC,EAApB,EAAwBynG,EAAxB,EAA4BgC,EAA5B,CAAX;EACrB,UAAI/yF,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqB0W,KAAK,CAAC79G,IAAN,CAAW,IAAI89G,IAAJ,CAASnzF,KAAT,EAAgB+wF,EAAhB,EAAoBznG,EAApB,EAAwBG,EAAxB,EAA4BspG,EAA5B,CAAX;EACrB,UAAI/yF,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqB0W,KAAK,CAAC79G,IAAN,CAAW,IAAI89G,IAAJ,CAASnzF,KAAT,EAAgB3W,EAAhB,EAAoB0pG,EAApB,EAAwBhC,EAAxB,EAA4BrnG,EAA5B,CAAX;EACrB,UAAIsW,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqB0W,KAAK,CAAC79G,IAAN,CAAW,IAAI89G,IAAJ,CAASnzF,KAAT,EAAgB+wF,EAAhB,EAAoBgC,EAApB,EAAwBtpG,EAAxB,EAA4BC,EAA5B,CAAX;EACtB;;EACDq0C,IAAAA,IAAI,CAAC1oD,IAAL,CAAU2Q,CAAV;EACD;;EACD,SAAOA,CAAC,GAAG+3C,IAAI,CAAC0I,GAAL,EAAX,EAAuB;EACrBr5C,IAAAA,QAAQ,CAACpH,CAAC,CAACw2F,IAAH,EAASx2F,CAAC,CAACqD,EAAX,EAAerD,CAAC,CAACsD,EAAjB,EAAqBtD,CAAC,CAACyD,EAAvB,EAA2BzD,CAAC,CAAC0D,EAA7B,CAAR;EACD;;EACD,SAAO,IAAP;EACD;;ECpBM,SAAS8nG,UAAT,CAAkBnyG,CAAlB,EAAqB;EAC1B,SAAOA,CAAC,CAAC,CAAD,CAAR;EACD;EAEc,mBAASoxG,CAAT,EAAY;EACzB,SAAO/zG,SAAS,CAACxG,MAAV,IAAoB,KAAKzjB,EAAL,GAAUg+H,CAAV,EAAa,IAAjC,IAAyC,KAAKh+H,EAArD;EACD;;ECNM,SAAS2gI,UAAT,CAAkB/zG,CAAlB,EAAqB;EAC1B,SAAOA,CAAC,CAAC,CAAD,CAAR;EACD;EAEc,mBAASoxG,CAAT,EAAY;EACzB,SAAO/zG,SAAS,CAACxG,MAAV,IAAoB,KAAKxjB,EAAL,GAAU+9H,CAAV,EAAa,IAAjC,IAAyC,KAAK/9H,EAArD;EACD;;ECOc,SAAS2gI,QAAT,CAAkB/C,KAAlB,EAAyBh5G,CAAzB,EAA4BC,CAA5B,EAA+B;EAC5C,MAAIo5G,IAAI,GAAG,IAAI2C,QAAJ,CAAah8G,CAAC,IAAI,IAAL,GAAYk6G,UAAZ,GAAuBl6G,CAApC,EAAuCC,CAAC,IAAI,IAAL,GAAY67G,UAAZ,GAAuB77G,CAA9D,EAAiEo6G,GAAjE,EAAsEA,GAAtE,EAA2EA,GAA3E,EAAgFA,GAAhF,CAAX;EACA,SAAOrB,KAAK,IAAI,IAAT,GAAgBK,IAAhB,GAAuBA,IAAI,CAACM,MAAL,CAAYX,KAAZ,CAA9B;EACD;;EAED,SAASgD,QAAT,CAAkBh8G,CAAlB,EAAqBC,CAArB,EAAwB8R,EAAxB,EAA4BC,EAA5B,EAAgCG,EAAhC,EAAoCC,EAApC,EAAwC;EACtC,OAAKj3B,EAAL,GAAU6kB,CAAV;EACA,OAAK5kB,EAAL,GAAU6kB,CAAV;EACA,OAAKs5G,GAAL,GAAWxnG,EAAX;EACA,OAAKwpG,GAAL,GAAWvpG,EAAX;EACA,OAAKwnG,GAAL,GAAWrnG,EAAX;EACA,OAAKqpG,GAAL,GAAWppG,EAAX;EACA,OAAKq6F,KAAL,GAAa7uG,SAAb;EACD;;EAED,SAAS08G,WAAT,CAAmBhB,IAAnB,EAAyB;EACvB,MAAIn4G,IAAI,GAAG;EAACiN,IAAAA,IAAI,EAAEkrG,IAAI,CAAClrG;EAAZ,GAAX;EAAA,MAA8Bq4C,IAAI,GAAGtlD,IAArC;;EACA,SAAOm4G,IAAI,GAAGA,IAAI,CAAC7yD,IAAnB,EAAyBA,IAAI,GAAGA,IAAI,CAACA,IAAL,GAAY;EAACr4C,IAAAA,IAAI,EAAEkrG,IAAI,CAAClrG;EAAZ,GAAnB;;EACzB,SAAOjN,IAAP;EACD;;EAED,IAAIo5G,WAAS,GAAGwB,QAAQ,CAAC72G,SAAT,GAAqB82G,QAAQ,CAAC92G,SAA9C;;AAEAq1G,aAAS,CAACp5G,IAAV,GAAiB,YAAW;EAC1B,MAAIA,IAAI,GAAG,IAAI66G,QAAJ,CAAa,KAAK7gI,EAAlB,EAAsB,KAAKC,EAA3B,EAA+B,KAAKm+H,GAApC,EAAyC,KAAKgC,GAA9C,EAAmD,KAAK/B,GAAxD,EAA6D,KAAKgC,GAAlE,CAAX;EAAA,MACItW,IAAI,GAAG,KAAKuH,KADhB;EAAA,MAEIuM,KAFJ;EAAA,MAGItwF,KAHJ;EAKA,MAAI,CAACw8E,IAAL,EAAW,OAAO/jG,IAAP;EAEX,MAAI,CAAC+jG,IAAI,CAACtmG,MAAV,EAAkB,OAAOuC,IAAI,CAACsrG,KAAL,GAAa6N,WAAS,CAACpV,IAAD,CAAtB,EAA8B/jG,IAArC;EAElB63G,EAAAA,KAAK,GAAG,CAAC;EAACnsG,IAAAA,MAAM,EAAEq4F,IAAT;EAAe3mG,IAAAA,MAAM,EAAE4C,IAAI,CAACsrG,KAAL,GAAa,IAAI/+F,KAAJ,CAAU,CAAV;EAApC,GAAD,CAAR;;EACA,SAAOw3F,IAAI,GAAG8T,KAAK,CAAC7pD,GAAN,EAAd,EAA2B;EACzB,SAAK,IAAIzwD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuB,EAAEA,CAAzB,EAA4B;EAC1B,UAAIgqB,KAAK,GAAGw8E,IAAI,CAACr4F,MAAL,CAAYnO,CAAZ,CAAZ,EAA4B;EAC1B,YAAIgqB,KAAK,CAAC9pB,MAAV,EAAkBo6G,KAAK,CAACj7G,IAAN,CAAW;EAAC8O,UAAAA,MAAM,EAAE6b,KAAT;EAAgBnqB,UAAAA,MAAM,EAAE2mG,IAAI,CAAC3mG,MAAL,CAAYG,CAAZ,IAAiB,IAAIgP,KAAJ,CAAU,CAAV;EAAzC,SAAX,EAAlB,KACKw3F,IAAI,CAAC3mG,MAAL,CAAYG,CAAZ,IAAiB47G,WAAS,CAAC5xF,KAAD,CAA1B;EACN;EACF;EACF;;EAED,SAAOvnB,IAAP;EACD,CArBD;;AAuBAo5G,aAAS,CAACl5G,GAAV,GAAgBm5G,UAAhB;AACAD,aAAS,CAACZ,MAAV,GAAmBc,QAAnB;AACAF,aAAS,CAACnB,KAAV,GAAkBsB,YAAlB;AACAH,aAAS,CAACnsG,IAAV,GAAiBusG,WAAjB;AACAJ,aAAS,CAACK,MAAV,GAAmBC,aAAnB;AACAN,aAAS,CAAC3qB,IAAV,GAAiBkrB,WAAjB;AACAP,aAAS,CAACryF,MAAV,GAAmB6yF,aAAnB;AACAR,aAAS,CAACN,SAAV,GAAsBe,WAAtB;AACAT,aAAS,CAAC/U,IAAV,GAAiByV,WAAjB;AACAV,aAAS,CAACzgG,IAAV,GAAiBohG,WAAjB;AACAX,aAAS,CAACX,KAAV,GAAkBuB,YAAlB;AACAZ,aAAS,CAACa,UAAV,GAAuBC,iBAAvB;AACAd,aAAS,CAACv6G,CAAV,GAAcs7G,QAAd;AACAf,aAAS,CAACt6G,CAAV,GAAcg8G,QAAd;;ECxEe,mBAASl0G,CAAT,EAAY;EACzB,MAAI/H,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQ0jB,IAAR,CAAa,IAAb,EAAmBkJ,CAAnB,CAAT;EAAA,MACI9H,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQyjB,IAAR,CAAa,IAAb,EAAmBkJ,CAAnB,CADT;EAAA,MAEIsG,CAAC,GAAG,CAAC,KAAKnzB,EAAL,CAAQ2jB,IAAR,CAAa,IAAb,EAAmBkJ,CAAnB,CAFT;EAGA,SAAO1G,KAAG,CAAC,KAAK+3G,KAAL,CAAWp5G,CAAX,EAAcC,CAAd,EAAiBoO,CAAjB,CAAD,EAAsBrO,CAAtB,EAAyBC,CAAzB,EAA4BoO,CAA5B,EAA+BtG,CAA/B,CAAV;EACD;;EAED,SAAS1G,KAAT,CAAag4G,IAAb,EAAmBr5G,CAAnB,EAAsBC,CAAtB,EAAyBoO,CAAzB,EAA4BtG,CAA5B,EAA+B;EAC7B,MAAI0xB,KAAK,CAACz5B,CAAD,CAAL,IAAYy5B,KAAK,CAACx5B,CAAD,CAAjB,IAAwBw5B,KAAK,CAACprB,CAAD,CAAjC,EAAsC,OAAOgrG,IAAP,CADT;;EAG7B,MAAIzzF,MAAJ;EAAA,MACIs/E,IAAI,GAAGmU,IAAI,CAAC5M,KADhB;EAAA,MAEI6M,IAAI,GAAG;EAAClrG,IAAAA,IAAI,EAAErG;EAAP,GAFX;EAAA,MAGIgK,EAAE,GAAGsnG,IAAI,CAACE,GAHd;EAAA,MAIIvnG,EAAE,GAAGqnG,IAAI,CAACkC,GAJd;EAAA,MAKItpG,EAAE,GAAGonG,IAAI,CAAC6C,GALd;EAAA,MAMI/pG,EAAE,GAAGknG,IAAI,CAACG,GANd;EAAA,MAOIpnG,EAAE,GAAGinG,IAAI,CAACmC,GAPd;EAAA,MAQInpG,EAAE,GAAGgnG,IAAI,CAAC8C,GARd;EAAA,MASI1C,EATJ;EAAA,MAUIgC,EAVJ;EAAA,MAWIW,EAXJ;EAAA,MAYI1C,EAZJ;EAAA,MAaIgC,EAbJ;EAAA,MAcIW,EAdJ;EAAA,MAeIj4F,KAfJ;EAAA,MAgBIE,MAhBJ;EAAA,MAiBIg4F,IAjBJ;EAAA,MAkBI59G,CAlBJ;EAAA,MAmBI2d,CAnBJ,CAH6B;;EAyB7B,MAAI,CAAC6oF,IAAL,EAAW,OAAOmU,IAAI,CAAC5M,KAAL,GAAa6M,IAAb,EAAmBD,IAA1B,CAzBkB;;EA4B7B,SAAOnU,IAAI,CAACtmG,MAAZ,EAAoB;EAClB,QAAIwlB,KAAK,GAAGpkB,CAAC,KAAKy5G,EAAE,GAAG,CAAC1nG,EAAE,GAAGI,EAAN,IAAY,CAAtB,CAAb,EAAuCJ,EAAE,GAAG0nG,EAAL,CAAvC,KAAqDtnG,EAAE,GAAGsnG,EAAL;EACrD,QAAIn1F,MAAM,GAAGrkB,CAAC,KAAKw7G,EAAE,GAAG,CAACzpG,EAAE,GAAGI,EAAN,IAAY,CAAtB,CAAd,EAAwCJ,EAAE,GAAGypG,EAAL,CAAxC,KAAsDrpG,EAAE,GAAGqpG,EAAL;EACtD,QAAIa,IAAI,GAAGjuG,CAAC,KAAK+tG,EAAE,GAAG,CAACnqG,EAAE,GAAGI,EAAN,IAAY,CAAtB,CAAZ,EAAsCJ,EAAE,GAAGmqG,EAAL,CAAtC,KAAoD/pG,EAAE,GAAG+pG,EAAL;EACpD,QAAIx2F,MAAM,GAAGs/E,IAAT,EAAe,EAAEA,IAAI,GAAGA,IAAI,CAACxmG,CAAC,GAAG49G,IAAI,IAAI,CAAR,GAAYh4F,MAAM,IAAI,CAAtB,GAA0BF,KAA/B,CAAb,CAAnB,EAAwE,OAAOwB,MAAM,CAAClnB,CAAD,CAAN,GAAY46G,IAAZ,EAAkBD,IAAzB;EACzE,GAjC4B;;;EAoC7BK,EAAAA,EAAE,GAAG,CAACL,IAAI,CAACl+H,EAAL,CAAQ0jB,IAAR,CAAa,IAAb,EAAmBqmG,IAAI,CAAC92F,IAAxB,CAAN;EACAstG,EAAAA,EAAE,GAAG,CAACrC,IAAI,CAACj+H,EAAL,CAAQyjB,IAAR,CAAa,IAAb,EAAmBqmG,IAAI,CAAC92F,IAAxB,CAAN;EACAiuG,EAAAA,EAAE,GAAG,CAAChD,IAAI,CAACn+H,EAAL,CAAQ2jB,IAAR,CAAa,IAAb,EAAmBqmG,IAAI,CAAC92F,IAAxB,CAAN;EACA,MAAIpO,CAAC,KAAK05G,EAAN,IAAYz5G,CAAC,KAAKy7G,EAAlB,IAAwBrtG,CAAC,KAAKguG,EAAlC,EAAsC,OAAO/C,IAAI,CAAC7yD,IAAL,GAAYy+C,IAAZ,EAAkBt/E,MAAM,GAAGA,MAAM,CAAClnB,CAAD,CAAN,GAAY46G,IAAf,GAAsBD,IAAI,CAAC5M,KAAL,GAAa6M,IAA3D,EAAiED,IAAxE,CAvCT;;EA0C7B,KAAG;EACDzzF,IAAAA,MAAM,GAAGA,MAAM,GAAGA,MAAM,CAAClnB,CAAD,CAAN,GAAY,IAAIgP,KAAJ,CAAU,CAAV,CAAf,GAA8B2rG,IAAI,CAAC5M,KAAL,GAAa,IAAI/+F,KAAJ,CAAU,CAAV,CAA1D;EACA,QAAI0W,KAAK,GAAGpkB,CAAC,KAAKy5G,EAAE,GAAG,CAAC1nG,EAAE,GAAGI,EAAN,IAAY,CAAtB,CAAb,EAAuCJ,EAAE,GAAG0nG,EAAL,CAAvC,KAAqDtnG,EAAE,GAAGsnG,EAAL;EACrD,QAAIn1F,MAAM,GAAGrkB,CAAC,KAAKw7G,EAAE,GAAG,CAACzpG,EAAE,GAAGI,EAAN,IAAY,CAAtB,CAAd,EAAwCJ,EAAE,GAAGypG,EAAL,CAAxC,KAAsDrpG,EAAE,GAAGqpG,EAAL;EACtD,QAAIa,IAAI,GAAGjuG,CAAC,KAAK+tG,EAAE,GAAG,CAACnqG,EAAE,GAAGI,EAAN,IAAY,CAAtB,CAAZ,EAAsCJ,EAAE,GAAGmqG,EAAL,CAAtC,KAAoD/pG,EAAE,GAAG+pG,EAAL;EACrD,GALD,QAKS,CAAC19G,CAAC,GAAG49G,IAAI,IAAI,CAAR,GAAYh4F,MAAM,IAAI,CAAtB,GAA0BF,KAA/B,OAA2C/H,CAAC,GAAG,CAACggG,EAAE,IAAID,EAAP,KAAc,CAAd,GAAkB,CAACV,EAAE,IAAID,EAAP,KAAc,CAAhC,GAAqC/B,EAAE,IAAID,EAA1F,CALT;;EAMA,SAAO7zF,MAAM,CAACvJ,CAAD,CAAN,GAAY6oF,IAAZ,EAAkBt/E,MAAM,CAAClnB,CAAD,CAAN,GAAY46G,IAA9B,EAAoCD,IAA3C;EACD;;EAEM,SAASM,MAAT,CAAgBvrG,IAAhB,EAAsB;EAC3B,MAAIrG,CAAJ;EAAA,MAAOrJ,CAAP;EAAA,MAAUoB,CAAC,GAAGsO,IAAI,CAACxP,MAAnB;EAAA,MACIoB,CADJ;EAAA,MAEIC,CAFJ;EAAA,MAGIoO,CAHJ;EAAA,MAIIuB,EAAE,GAAG,IAAIlC,KAAJ,CAAU5N,CAAV,CAJT;EAAA,MAKI+P,EAAE,GAAG,IAAInC,KAAJ,CAAU5N,CAAV,CALT;EAAA,MAMI4P,EAAE,GAAG,IAAIhC,KAAJ,CAAU5N,CAAV,CANT;EAAA,MAOIiS,EAAE,GAAGnI,QAPT;EAAA,MAQIoI,EAAE,GAAGpI,QART;EAAA,MASIqI,EAAE,GAAGrI,QATT;EAAA,MAUIuI,EAAE,GAAG,CAACvI,QAVV;EAAA,MAWIwI,EAAE,GAAG,CAACxI,QAXV;EAAA,MAYIyI,EAAE,GAAG,CAACzI,QAZV,CAD2B;;EAgB3B,OAAKlL,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoB,CAAhB,EAAmB,EAAEpB,CAArB,EAAwB;EACtB,QAAI+6B,KAAK,CAACz5B,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQ0jB,IAAR,CAAa,IAAb,EAAmBkJ,CAAC,GAAGqG,IAAI,CAAC1P,CAAD,CAA3B,CAAN,CAAL,IAA+C+6B,KAAK,CAACx5B,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQyjB,IAAR,CAAa,IAAb,EAAmBkJ,CAAnB,CAAN,CAApD,IAAoF0xB,KAAK,CAACprB,CAAC,GAAG,CAAC,KAAKnzB,EAAL,CAAQ2jB,IAAR,CAAa,IAAb,EAAmBkJ,CAAnB,CAAN,CAA7F,EAA2H;EAC3H6H,IAAAA,EAAE,CAAClR,CAAD,CAAF,GAAQsB,CAAR;EACA6P,IAAAA,EAAE,CAACnR,CAAD,CAAF,GAAQuB,CAAR;EACAyP,IAAAA,EAAE,CAAChR,CAAD,CAAF,GAAQ2P,CAAR;EACA,QAAIrO,CAAC,GAAG+R,EAAR,EAAYA,EAAE,GAAG/R,CAAL;EACZ,QAAIA,CAAC,GAAGmS,EAAR,EAAYA,EAAE,GAAGnS,CAAL;EACZ,QAAIC,CAAC,GAAG+R,EAAR,EAAYA,EAAE,GAAG/R,CAAL;EACZ,QAAIA,CAAC,GAAGmS,EAAR,EAAYA,EAAE,GAAGnS,CAAL;EACZ,QAAIoO,CAAC,GAAG4D,EAAR,EAAYA,EAAE,GAAG5D,CAAL;EACZ,QAAIA,CAAC,GAAGgE,EAAR,EAAYA,EAAE,GAAGhE,CAAL;EACb,GA3B0B;;;EA8B3B,MAAI0D,EAAE,GAAGI,EAAL,IAAWH,EAAE,GAAGI,EAAhB,IAAsBH,EAAE,GAAGI,EAA/B,EAAmC,OAAO,IAAP,CA9BR;;EAiC3B,OAAK+mG,KAAL,CAAWrnG,EAAX,EAAeC,EAAf,EAAmBC,EAAnB,EAAuBmnG,KAAvB,CAA6BjnG,EAA7B,EAAiCC,EAAjC,EAAqCC,EAArC,EAjC2B;;EAoC3B,OAAK3T,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoB,CAAhB,EAAmB,EAAEpB,CAArB,EAAwB;EACtB2C,IAAAA,KAAG,CAAC,IAAD,EAAOuO,EAAE,CAAClR,CAAD,CAAT,EAAcmR,EAAE,CAACnR,CAAD,CAAhB,EAAqBgR,EAAE,CAAChR,CAAD,CAAvB,EAA4B0P,IAAI,CAAC1P,CAAD,CAAhC,CAAH;EACD;;EAED,SAAO,IAAP;EACD;;ECnGc,qBAASsB,CAAT,EAAYC,CAAZ,EAAeoO,CAAf,EAAkB;EAC/B,MAAIorB,KAAK,CAACz5B,CAAC,GAAG,CAACA,CAAN,CAAL,IAAiBy5B,KAAK,CAACx5B,CAAC,GAAG,CAACA,CAAN,CAAtB,IAAkCw5B,KAAK,CAACprB,CAAC,GAAG,CAACA,CAAN,CAA3C,EAAqD,OAAO,IAAP,CADtB;;EAG/B,MAAI0D,EAAE,GAAG,KAAKwnG,GAAd;EAAA,MACIvnG,EAAE,GAAG,KAAKupG,GADd;EAAA,MAEItpG,EAAE,GAAG,KAAKiqG,GAFd;EAAA,MAGI/pG,EAAE,GAAG,KAAKqnG,GAHd;EAAA,MAIIpnG,EAAE,GAAG,KAAKopG,GAJd;EAAA,MAKInpG,EAAE,GAAG,KAAK8pG,GALd,CAH+B;EAW/B;EACA;;EACA,MAAI1iF,KAAK,CAAC1nB,EAAD,CAAT,EAAe;EACbI,IAAAA,EAAE,GAAG,CAACJ,EAAE,GAAGjT,IAAI,CAACsB,KAAL,CAAWJ,CAAX,CAAN,IAAuB,CAA5B;EACAoS,IAAAA,EAAE,GAAG,CAACJ,EAAE,GAAGlT,IAAI,CAACsB,KAAL,CAAWH,CAAX,CAAN,IAAuB,CAA5B;EACAoS,IAAAA,EAAE,GAAG,CAACJ,EAAE,GAAGnT,IAAI,CAACsB,KAAL,CAAWiO,CAAX,CAAN,IAAuB,CAA5B;EACD,GAJD;EAAA,OAOK;EACH,UAAInO,CAAC,GAAGiS,EAAE,GAAGJ,EAAL,IAAW,CAAnB;EAAA,UACImzF,IAAI,GAAG,KAAKuH,KADhB;EAAA,UAEI7mF,MAFJ;EAAA,UAGIlnB,CAHJ;;EAKA,aAAOqT,EAAE,GAAG/R,CAAL,IAAUA,CAAC,IAAImS,EAAf,IAAqBH,EAAE,GAAG/R,CAA1B,IAA+BA,CAAC,IAAImS,EAApC,IAA0CH,EAAE,GAAG5D,CAA/C,IAAoDA,CAAC,IAAIgE,EAAhE,EAAoE;EAClE3T,QAAAA,CAAC,GAAG,CAAC2P,CAAC,GAAG4D,EAAL,KAAY,CAAZ,GAAgB,CAAChS,CAAC,GAAG+R,EAAL,KAAY,CAA5B,GAAiChS,CAAC,GAAG+R,EAAzC;EACA6T,QAAAA,MAAM,GAAG,IAAIlY,KAAJ,CAAU,CAAV,CAAT,EAAuBkY,MAAM,CAAClnB,CAAD,CAAN,GAAYwmG,IAAnC,EAAyCA,IAAI,GAAGt/E,MAAhD,EAAwD1lB,CAAC,IAAI,CAA7D;;EACA,gBAAQxB,CAAR;EACE,eAAK,CAAL;EAAQyT,YAAAA,EAAE,GAAGJ,EAAE,GAAG7R,CAAV,EAAakS,EAAE,GAAGJ,EAAE,GAAG9R,CAAvB,EAA0BmS,EAAE,GAAGJ,EAAE,GAAG/R,CAApC;EAAuC;;EAC/C,eAAK,CAAL;EAAQ6R,YAAAA,EAAE,GAAGI,EAAE,GAAGjS,CAAV,EAAakS,EAAE,GAAGJ,EAAE,GAAG9R,CAAvB,EAA0BmS,EAAE,GAAGJ,EAAE,GAAG/R,CAApC;EAAuC;;EAC/C,eAAK,CAAL;EAAQiS,YAAAA,EAAE,GAAGJ,EAAE,GAAG7R,CAAV,EAAa8R,EAAE,GAAGI,EAAE,GAAGlS,CAAvB,EAA0BmS,EAAE,GAAGJ,EAAE,GAAG/R,CAApC;EAAuC;;EAC/C,eAAK,CAAL;EAAQ6R,YAAAA,EAAE,GAAGI,EAAE,GAAGjS,CAAV,EAAa8R,EAAE,GAAGI,EAAE,GAAGlS,CAAvB,EAA0BmS,EAAE,GAAGJ,EAAE,GAAG/R,CAApC;EAAuC;;EAC/C,eAAK,CAAL;EAAQiS,YAAAA,EAAE,GAAGJ,EAAE,GAAG7R,CAAV,EAAakS,EAAE,GAAGJ,EAAE,GAAG9R,CAAvB,EAA0B+R,EAAE,GAAGI,EAAE,GAAGnS,CAApC;EAAuC;;EAC/C,eAAK,CAAL;EAAQ6R,YAAAA,EAAE,GAAGI,EAAE,GAAGjS,CAAV,EAAakS,EAAE,GAAGJ,EAAE,GAAG9R,CAAvB,EAA0B+R,EAAE,GAAGI,EAAE,GAAGnS,CAApC;EAAuC;;EAC/C,eAAK,CAAL;EAAQiS,YAAAA,EAAE,GAAGJ,EAAE,GAAG7R,CAAV,EAAa8R,EAAE,GAAGI,EAAE,GAAGlS,CAAvB,EAA0B+R,EAAE,GAAGI,EAAE,GAAGnS,CAApC;EAAuC;;EAC/C,eAAK,CAAL;EAAQ6R,YAAAA,EAAE,GAAGI,EAAE,GAAGjS,CAAV,EAAa8R,EAAE,GAAGI,EAAE,GAAGlS,CAAvB,EAA0B+R,EAAE,GAAGI,EAAE,GAAGnS,CAApC;EAAuC;EARjD;EAUD;;EAED,UAAI,KAAKusG,KAAL,IAAc,KAAKA,KAAL,CAAW7tG,MAA7B,EAAqC,KAAK6tG,KAAL,GAAavH,IAAb;EACtC;;EAED,OAAKqU,GAAL,GAAWxnG,EAAX;EACA,OAAKwpG,GAAL,GAAWvpG,EAAX;EACA,OAAKkqG,GAAL,GAAWjqG,EAAX;EACA,OAAKunG,GAAL,GAAWrnG,EAAX;EACA,OAAKqpG,GAAL,GAAWppG,EAAX;EACA,OAAK+pG,GAAL,GAAW9pG,EAAX;EACA,SAAO,IAAP;EACD;;ECnDc,sBAAW;EACxB,MAAIjE,IAAI,GAAG,EAAX;EACA,OAAKwrG,KAAL,CAAW,UAAS1U,IAAT,EAAe;EACxB,QAAI,CAACA,IAAI,CAACtmG,MAAV,EAAkB,GAAGwP,IAAI,CAACrQ,IAAL,CAAUmnG,IAAI,CAAC92F,IAAf,EAAH,QAAgC82F,IAAI,GAAGA,IAAI,CAACz+C,IAA5C;EACnB,GAFD;EAGA,SAAOr4C,IAAP;EACD;;ECNc,sBAAS+qG,CAAT,EAAY;EACzB,SAAO/zG,SAAS,CAACxG,MAAV,GACD,KAAKw6G,KAAL,CAAW,CAACD,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAZ,EAAqB,CAACA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAtB,EAA+B,CAACA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAhC,EAAyCC,KAAzC,CAA+C,CAACD,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAhD,EAAyD,CAACA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAA1D,EAAmE,CAACA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAApE,CADC,GAED1/E,KAAK,CAAC,KAAK8/E,GAAN,CAAL,GAAkB37G,SAAlB,GAA8B,CAAC,CAAC,KAAK27G,GAAN,EAAW,KAAKgC,GAAhB,EAAqB,KAAKW,GAA1B,CAAD,EAAiC,CAAC,KAAK1C,GAAN,EAAW,KAAKgC,GAAhB,EAAqB,KAAKW,GAA1B,CAAjC,CAFpC;EAGD;;ECJc,iBAASjX,IAAT,EAAenzF,EAAf,EAAmBC,EAAnB,EAAuBC,EAAvB,EAA2BE,EAA3B,EAA+BC,EAA/B,EAAmCC,EAAnC,EAAuC;EACpD,OAAK6yF,IAAL,GAAYA,IAAZ;EACA,OAAKnzF,EAAL,GAAUA,EAAV;EACA,OAAKC,EAAL,GAAUA,EAAV;EACA,OAAKC,EAAL,GAAUA,EAAV;EACA,OAAKE,EAAL,GAAUA,EAAV;EACA,OAAKC,EAAL,GAAUA,EAAV;EACA,OAAKC,EAAL,GAAUA,EAAV;EACD;;ECNc,oBAASrS,CAAT,EAAYC,CAAZ,EAAeoO,CAAf,EAAkBgK,MAAlB,EAA0B;EACvC,MAAIjK,IAAJ;EAAA,MACI2D,EAAE,GAAG,KAAKwnG,GADd;EAAA,MAEIvnG,EAAE,GAAG,KAAKupG,GAFd;EAAA,MAGItpG,EAAE,GAAG,KAAKiqG,GAHd;EAAA,MAII/pG,EAJJ;EAAA,MAKIC,EALJ;EAAA,MAMIC,EANJ;EAAA,MAOImR,EAPJ;EAAA,MAQIC,EARJ;EAAA,MASIC,EATJ;EAAA,MAUIg8D,EAAE,GAAG,KAAK85B,GAVd;EAAA,MAWImC,EAAE,GAAG,KAAKH,GAXd;EAAA,MAYIe,EAAE,GAAG,KAAKJ,GAZd;EAAA,MAaIK,IAAI,GAAG,EAbX;EAAA,MAcItX,IAAI,GAAG,KAAKuH,KAdhB;EAAA,MAeI/9F,CAfJ;EAAA,MAgBIhQ,CAhBJ;EAkBA,MAAIwmG,IAAJ,EAAUsX,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAWvX,IAAX,EAAiBnzF,EAAjB,EAAqBC,EAArB,EAAyBC,EAAzB,EAA6BytE,EAA7B,EAAiCi8B,EAAjC,EAAqCY,EAArC,CAAV;EACV,MAAIlkG,MAAM,IAAI,IAAd,EAAoBA,MAAM,GAAGzO,QAAT,CAApB,KACK;EACHmI,IAAAA,EAAE,GAAG/R,CAAC,GAAGqY,MAAT,EAAiBrG,EAAE,GAAG/R,CAAC,GAAGoY,MAA1B,EAAkCpG,EAAE,GAAG5D,CAAC,GAAGgK,MAA3C;EACAqnE,IAAAA,EAAE,GAAG1/E,CAAC,GAAGqY,MAAT,EAAiBsjG,EAAE,GAAG17G,CAAC,GAAGoY,MAA1B,EAAkCkkG,EAAE,GAAGluG,CAAC,GAAGgK,MAA3C;EACAA,IAAAA,MAAM,IAAIA,MAAV;EACD;;EAED,SAAO3J,CAAC,GAAG8tG,IAAI,CAACrtD,GAAL,EAAX,EAAuB;EAErB;EACA,QAAI,EAAE+1C,IAAI,GAAGx2F,CAAC,CAACw2F,IAAX,KACG,CAAC/yF,EAAE,GAAGzD,CAAC,CAACqD,EAAR,IAAc2tE,EADjB,IAEG,CAACttE,EAAE,GAAG1D,CAAC,CAACsD,EAAR,IAAc2pG,EAFjB,IAGG,CAACtpG,EAAE,GAAG3D,CAAC,CAACuD,EAAR,IAAcsqG,EAHjB,IAIG,CAAC/4F,EAAE,GAAG9U,CAAC,CAACyD,EAAR,IAAcJ,EAJjB,IAKG,CAAC0R,EAAE,GAAG/U,CAAC,CAAC0D,EAAR,IAAcJ,EALjB,IAMG,CAAC0R,EAAE,GAAGhV,CAAC,CAAC2D,EAAR,IAAcJ,EANrB,EAMyB,SATJ;;EAYrB,QAAIizF,IAAI,CAACtmG,MAAT,EAAiB;EACf,UAAI66G,EAAE,GAAG,CAACtnG,EAAE,GAAGqR,EAAN,IAAY,CAArB;EAAA,UACIi4F,EAAE,GAAG,CAACrpG,EAAE,GAAGqR,EAAN,IAAY,CADrB;EAAA,UAEI24F,EAAE,GAAG,CAAC/pG,EAAE,GAAGqR,EAAN,IAAY,CAFrB;EAIA84F,MAAAA,IAAI,CAACz+G,IAAL,CACE,IAAI0+G,MAAJ,CAAWvX,IAAI,CAAC,CAAD,CAAf,EAAoBuU,EAApB,EAAwBgC,EAAxB,EAA4BW,EAA5B,EAAgC54F,EAAhC,EAAoCC,EAApC,EAAwCC,EAAxC,CADF,EAEE,IAAI+4F,MAAJ,CAAWvX,IAAI,CAAC,CAAD,CAAf,EAAoB/yF,EAApB,EAAwBspG,EAAxB,EAA4BW,EAA5B,EAAgC3C,EAAhC,EAAoCh2F,EAApC,EAAwCC,EAAxC,CAFF,EAGE,IAAI+4F,MAAJ,CAAWvX,IAAI,CAAC,CAAD,CAAf,EAAoBuU,EAApB,EAAwBrnG,EAAxB,EAA4BgqG,EAA5B,EAAgC54F,EAAhC,EAAoCi4F,EAApC,EAAwC/3F,EAAxC,CAHF,EAIE,IAAI+4F,MAAJ,CAAWvX,IAAI,CAAC,CAAD,CAAf,EAAoB/yF,EAApB,EAAwBC,EAAxB,EAA4BgqG,EAA5B,EAAgC3C,EAAhC,EAAoCgC,EAApC,EAAwC/3F,EAAxC,CAJF,EAKE,IAAI+4F,MAAJ,CAAWvX,IAAI,CAAC,CAAD,CAAf,EAAoBuU,EAApB,EAAwBgC,EAAxB,EAA4BppG,EAA5B,EAAgCmR,EAAhC,EAAoCC,EAApC,EAAwC24F,EAAxC,CALF,EAME,IAAIK,MAAJ,CAAWvX,IAAI,CAAC,CAAD,CAAf,EAAoB/yF,EAApB,EAAwBspG,EAAxB,EAA4BppG,EAA5B,EAAgConG,EAAhC,EAAoCh2F,EAApC,EAAwC24F,EAAxC,CANF,EAOE,IAAIK,MAAJ,CAAWvX,IAAI,CAAC,CAAD,CAAf,EAAoBuU,EAApB,EAAwBrnG,EAAxB,EAA4BC,EAA5B,EAAgCmR,EAAhC,EAAoCi4F,EAApC,EAAwCW,EAAxC,CAPF,EAQE,IAAIK,MAAJ,CAAWvX,IAAI,CAAC,CAAD,CAAf,EAAoB/yF,EAApB,EAAwBC,EAAxB,EAA4BC,EAA5B,EAAgConG,EAAhC,EAAoCgC,EAApC,EAAwCW,EAAxC,CARF,EALe;;EAiBf,UAAI19G,CAAC,GAAG,CAAC2P,CAAC,IAAI+tG,EAAN,KAAa,CAAb,GAAiB,CAACn8G,CAAC,IAAIw7G,EAAN,KAAa,CAA9B,GAAmCz7G,CAAC,IAAIy5G,EAAhD,EAAqD;EACnD/qG,QAAAA,CAAC,GAAG8tG,IAAI,CAACA,IAAI,CAAC59G,MAAL,GAAc,CAAf,CAAR;EACA49G,QAAAA,IAAI,CAACA,IAAI,CAAC59G,MAAL,GAAc,CAAf,CAAJ,GAAwB49G,IAAI,CAACA,IAAI,CAAC59G,MAAL,GAAc,CAAd,GAAkBF,CAAnB,CAA5B;EACA89G,QAAAA,IAAI,CAACA,IAAI,CAAC59G,MAAL,GAAc,CAAd,GAAkBF,CAAnB,CAAJ,GAA4BgQ,CAA5B;EACD;EACF,KAtBD;EAAA,SAyBK;EACH,YAAI9K,EAAE,GAAG5D,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQ0jB,IAAR,CAAa,IAAb,EAAmBqmG,IAAI,CAAC92F,IAAxB,CAAd;EAAA,YACIvK,EAAE,GAAG5D,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQyjB,IAAR,CAAa,IAAb,EAAmBqmG,IAAI,CAAC92F,IAAxB,CADd;EAAA,YAEI8J,EAAE,GAAG7J,CAAC,GAAG,CAAC,KAAKnzB,EAAL,CAAQ2jB,IAAR,CAAa,IAAb,EAAmBqmG,IAAI,CAAC92F,IAAxB,CAFd;EAAA,YAGI5O,EAAE,GAAGoE,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAf,GAAoBqU,EAAE,GAAGA,EAHlC;;EAIA,YAAI1Y,EAAE,GAAG6Y,MAAT,EAAiB;EACf,cAAItQ,CAAC,GAAGjJ,IAAI,CAACsE,IAAL,CAAUiV,MAAM,GAAG7Y,EAAnB,CAAR;EACAuS,UAAAA,EAAE,GAAG/R,CAAC,GAAG+H,CAAT,EAAYiK,EAAE,GAAG/R,CAAC,GAAG8H,CAArB,EAAwBkK,EAAE,GAAG5D,CAAC,GAAGtG,CAAjC;EACA23E,UAAAA,EAAE,GAAG1/E,CAAC,GAAG+H,CAAT,EAAY4zG,EAAE,GAAG17G,CAAC,GAAG8H,CAArB,EAAwBw0G,EAAE,GAAGluG,CAAC,GAAGtG,CAAjC;EACAqG,UAAAA,IAAI,GAAG82F,IAAI,CAAC92F,IAAZ;EACD;EACF;EACF;;EAED,SAAOA,IAAP;EACD;;ECjFc,sBAASrG,CAAT,EAAY;EACzB,MAAI0xB,KAAK,CAACz5B,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQ0jB,IAAR,CAAa,IAAb,EAAmBkJ,CAAnB,CAAN,CAAL,IAAqC0xB,KAAK,CAACx5B,CAAC,GAAG,CAAC,KAAK7kB,EAAL,CAAQyjB,IAAR,CAAa,IAAb,EAAmBkJ,CAAnB,CAAN,CAA1C,IAA0E0xB,KAAK,CAACprB,CAAC,GAAG,CAAC,KAAKnzB,EAAL,CAAQ2jB,IAAR,CAAa,IAAb,EAAmBkJ,CAAnB,CAAN,CAAnF,EAAiH,OAAO,IAAP,CADxF;;EAGzB,MAAI6d,MAAJ;EAAA,MACIs/E,IAAI,GAAG,KAAKuH,KADhB;EAAA,MAEIsN,QAFJ;EAAA,MAGIC,QAHJ;EAAA,MAIIvzD,IAJJ;EAAA,MAKI10C,EAAE,GAAG,KAAKwnG,GALd;EAAA,MAMIvnG,EAAE,GAAG,KAAKupG,GANd;EAAA,MAOItpG,EAAE,GAAG,KAAKiqG,GAPd;EAAA,MAQI/pG,EAAE,GAAG,KAAKqnG,GARd;EAAA,MASIpnG,EAAE,GAAG,KAAKopG,GATd;EAAA,MAUInpG,EAAE,GAAG,KAAK8pG,GAVd;EAAA,MAWIn8G,CAXJ;EAAA,MAYIC,CAZJ;EAAA,MAaIoO,CAbJ;EAAA,MAcIorG,EAdJ;EAAA,MAeIgC,EAfJ;EAAA,MAgBIW,EAhBJ;EAAA,MAiBIh4F,KAjBJ;EAAA,MAkBIE,MAlBJ;EAAA,MAmBIg4F,IAnBJ;EAAA,MAoBI59G,CApBJ;EAAA,MAqBI2d,CArBJ,CAHyB;;EA2BzB,MAAI,CAAC6oF,IAAL,EAAW,OAAO,IAAP,CA3Bc;EA8BzB;;EACA,MAAIA,IAAI,CAACtmG,MAAT,EAAiB,OAAO,IAAP,EAAa;EAC5B,QAAIwlB,KAAK,GAAGpkB,CAAC,KAAKy5G,EAAE,GAAG,CAAC1nG,EAAE,GAAGI,EAAN,IAAY,CAAtB,CAAb,EAAuCJ,EAAE,GAAG0nG,EAAL,CAAvC,KAAqDtnG,EAAE,GAAGsnG,EAAL;EACrD,QAAIn1F,MAAM,GAAGrkB,CAAC,KAAKw7G,EAAE,GAAG,CAACzpG,EAAE,GAAGI,EAAN,IAAY,CAAtB,CAAd,EAAwCJ,EAAE,GAAGypG,EAAL,CAAxC,KAAsDrpG,EAAE,GAAGqpG,EAAL;EACtD,QAAIa,IAAI,GAAGjuG,CAAC,KAAK+tG,EAAE,GAAG,CAACnqG,EAAE,GAAGI,EAAN,IAAY,CAAtB,CAAZ,EAAsCJ,EAAE,GAAGmqG,EAAL,CAAtC,KAAoD/pG,EAAE,GAAG+pG,EAAL;EACpD,QAAI,EAAEx2F,MAAM,GAAGs/E,IAAT,EAAeA,IAAI,GAAGA,IAAI,CAACxmG,CAAC,GAAG49G,IAAI,IAAI,CAAR,GAAYh4F,MAAM,IAAI,CAAtB,GAA0BF,KAA/B,CAA5B,CAAJ,EAAwE,OAAO,IAAP;EACxE,QAAI,CAAC8gF,IAAI,CAACtmG,MAAV,EAAkB;EAClB,QAAIgnB,MAAM,CAAElnB,CAAC,GAAG,CAAL,GAAU,CAAX,CAAN,IAAuBknB,MAAM,CAAElnB,CAAC,GAAG,CAAL,GAAU,CAAX,CAA7B,IAA8CknB,MAAM,CAAElnB,CAAC,GAAG,CAAL,GAAU,CAAX,CAApD,IAAqEknB,MAAM,CAAElnB,CAAC,GAAG,CAAL,GAAU,CAAX,CAA3E,IAA4FknB,MAAM,CAAElnB,CAAC,GAAG,CAAL,GAAU,CAAX,CAAlG,IAAmHknB,MAAM,CAAElnB,CAAC,GAAG,CAAL,GAAU,CAAX,CAAzH,IAA0IknB,MAAM,CAAElnB,CAAC,GAAG,CAAL,GAAU,CAAX,CAApJ,EAAmKq7G,QAAQ,GAAGn0F,MAAX,EAAmBvJ,CAAC,GAAG3d,CAAvB;EACpK,GAtCwB;;EAyCzB,SAAOwmG,IAAI,CAAC92F,IAAL,KAAcrG,CAArB,EAAwB,IAAI,EAAEiyG,QAAQ,GAAG9U,IAAX,EAAiBA,IAAI,GAAGA,IAAI,CAACz+C,IAA/B,CAAJ,EAA0C,OAAO,IAAP;;EAClE,MAAIA,IAAI,GAAGy+C,IAAI,CAACz+C,IAAhB,EAAsB,OAAOy+C,IAAI,CAACz+C,IAAZ,CA1CG;;EA6CzB,MAAIuzD,QAAJ,EAAc,OAAQvzD,IAAI,GAAGuzD,QAAQ,CAACvzD,IAAT,GAAgBA,IAAnB,GAA0B,OAAOuzD,QAAQ,CAACvzD,IAA/C,EAAsD,IAA7D,CA7CW;;EAgDzB,MAAI,CAAC7gC,MAAL,EAAa,OAAO,KAAK6mF,KAAL,GAAahmD,IAAb,EAAmB,IAA1B,CAhDY;;EAmDzBA,EAAAA,IAAI,GAAG7gC,MAAM,CAAClnB,CAAD,CAAN,GAAY+nD,IAAf,GAAsB,OAAO7gC,MAAM,CAAClnB,CAAD,CAAvC,CAnDyB;;EAsDzB,MAAI,CAACwmG,IAAI,GAAGt/E,MAAM,CAAC,CAAD,CAAN,IAAaA,MAAM,CAAC,CAAD,CAAnB,IAA0BA,MAAM,CAAC,CAAD,CAAhC,IAAuCA,MAAM,CAAC,CAAD,CAA7C,IAAoDA,MAAM,CAAC,CAAD,CAA1D,IAAiEA,MAAM,CAAC,CAAD,CAAvE,IAA8EA,MAAM,CAAC,CAAD,CAApF,IAA2FA,MAAM,CAAC,CAAD,CAAzG,KACGs/E,IAAI,MAAMt/E,MAAM,CAAC,CAAD,CAAN,IAAaA,MAAM,CAAC,CAAD,CAAnB,IAA0BA,MAAM,CAAC,CAAD,CAAhC,IAAuCA,MAAM,CAAC,CAAD,CAA7C,IAAoDA,MAAM,CAAC,CAAD,CAA1D,IAAiEA,MAAM,CAAC,CAAD,CAAvE,IAA8EA,MAAM,CAAC,CAAD,CAApF,IAA2FA,MAAM,CAAC,CAAD,CAAvG,CADP,IAEG,CAACs/E,IAAI,CAACtmG,MAFb,EAEqB;EACnB,QAAIm7G,QAAJ,EAAcA,QAAQ,CAAC19F,CAAD,CAAR,GAAc6oF,IAAd,CAAd,KACK,KAAKuH,KAAL,GAAavH,IAAb;EACN;;EAED,SAAO,IAAP;EACD;EAEM,SAAS+U,WAAT,CAAmB7rG,IAAnB,EAAyB;EAC9B,OAAK,IAAI1P,CAAC,GAAG,CAAR,EAAWoB,CAAC,GAAGsO,IAAI,CAACxP,MAAzB,EAAiCF,CAAC,GAAGoB,CAArC,EAAwC,EAAEpB,CAA1C,EAA6C,KAAKwpB,MAAL,CAAY9Z,IAAI,CAAC1P,CAAD,CAAhB;;EAC7C,SAAO,IAAP;EACD;;ECnEc,sBAAW;EACxB,SAAO,KAAK+tG,KAAZ;EACD;;ECFc,sBAAW;EACxB,MAAI3yF,IAAI,GAAG,CAAX;EACA,OAAK8/F,KAAL,CAAW,UAAS1U,IAAT,EAAe;EACxB,QAAI,CAACA,IAAI,CAACtmG,MAAV,EAAkB,GAAG,EAAEkb,IAAF,CAAH,QAAkBorF,IAAI,GAAGA,IAAI,CAACz+C,IAA9B;EACnB,GAFD;EAGA,SAAO3sC,IAAP;EACD;;ECJc,qBAAShE,QAAT,EAAmB;EAChC,MAAI0mG,IAAI,GAAG,EAAX;EAAA,MAAe9tG,CAAf;EAAA,MAAkBw2F,IAAI,GAAG,KAAKuH,KAA9B;EAAA,MAAqC/jF,KAArC;EAAA,MAA4C3W,EAA5C;EAAA,MAAgDC,EAAhD;EAAA,MAAoDC,EAApD;EAAA,MAAwDE,EAAxD;EAAA,MAA4DC,EAA5D;EAAA,MAAgEC,EAAhE;EACA,MAAI6yF,IAAJ,EAAUsX,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAWvX,IAAX,EAAiB,KAAKqU,GAAtB,EAA2B,KAAKgC,GAAhC,EAAqC,KAAKW,GAA1C,EAA+C,KAAK1C,GAApD,EAAyD,KAAKgC,GAA9D,EAAmE,KAAKW,GAAxE,CAAV;;EACV,SAAOztG,CAAC,GAAG8tG,IAAI,CAACrtD,GAAL,EAAX,EAAuB;EACrB,QAAI,CAACr5C,QAAQ,CAACovF,IAAI,GAAGx2F,CAAC,CAACw2F,IAAV,EAAgBnzF,EAAE,GAAGrD,CAAC,CAACqD,EAAvB,EAA2BC,EAAE,GAAGtD,CAAC,CAACsD,EAAlC,EAAsCC,EAAE,GAAGvD,CAAC,CAACuD,EAA7C,EAAiDE,EAAE,GAAGzD,CAAC,CAACyD,EAAxD,EAA4DC,EAAE,GAAG1D,CAAC,CAAC0D,EAAnE,EAAuEC,EAAE,GAAG3D,CAAC,CAAC2D,EAA9E,CAAT,IAA8F6yF,IAAI,CAACtmG,MAAvG,EAA+G;EAC7G,UAAI66G,EAAE,GAAG,CAAC1nG,EAAE,GAAGI,EAAN,IAAY,CAArB;EAAA,UAAwBspG,EAAE,GAAG,CAACzpG,EAAE,GAAGI,EAAN,IAAY,CAAzC;EAAA,UAA4CgqG,EAAE,GAAG,CAACnqG,EAAE,GAAGI,EAAN,IAAY,CAA7D;EACA,UAAIqW,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqBsX,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAW/zF,KAAX,EAAkB+wF,EAAlB,EAAsBgC,EAAtB,EAA0BW,EAA1B,EAA8BjqG,EAA9B,EAAkCC,EAAlC,EAAsCC,EAAtC,CAAV;EACrB,UAAIqW,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqBsX,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAW/zF,KAAX,EAAkB3W,EAAlB,EAAsB0pG,EAAtB,EAA0BW,EAA1B,EAA8B3C,EAA9B,EAAkCrnG,EAAlC,EAAsCC,EAAtC,CAAV;EACrB,UAAIqW,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqBsX,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAW/zF,KAAX,EAAkB+wF,EAAlB,EAAsBznG,EAAtB,EAA0BoqG,EAA1B,EAA8BjqG,EAA9B,EAAkCspG,EAAlC,EAAsCppG,EAAtC,CAAV;EACrB,UAAIqW,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqBsX,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAW/zF,KAAX,EAAkB3W,EAAlB,EAAsBC,EAAtB,EAA0BoqG,EAA1B,EAA8B3C,EAA9B,EAAkCgC,EAAlC,EAAsCppG,EAAtC,CAAV;EACrB,UAAIqW,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqBsX,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAW/zF,KAAX,EAAkB+wF,EAAlB,EAAsBgC,EAAtB,EAA0BxpG,EAA1B,EAA8BE,EAA9B,EAAkCC,EAAlC,EAAsCgqG,EAAtC,CAAV;EACrB,UAAI1zF,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqBsX,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAW/zF,KAAX,EAAkB3W,EAAlB,EAAsB0pG,EAAtB,EAA0BxpG,EAA1B,EAA8BwnG,EAA9B,EAAkCrnG,EAAlC,EAAsCgqG,EAAtC,CAAV;EACrB,UAAI1zF,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqBsX,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAW/zF,KAAX,EAAkB+wF,EAAlB,EAAsBznG,EAAtB,EAA0BC,EAA1B,EAA8BE,EAA9B,EAAkCspG,EAAlC,EAAsCW,EAAtC,CAAV;EACrB,UAAI1zF,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqBsX,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAW/zF,KAAX,EAAkB3W,EAAlB,EAAsBC,EAAtB,EAA0BC,EAA1B,EAA8BwnG,EAA9B,EAAkCgC,EAAlC,EAAsCW,EAAtC,CAAV;EACtB;EACF;;EACD,SAAO,IAAP;EACD;;ECjBc,0BAAStmG,QAAT,EAAmB;EAChC,MAAI0mG,IAAI,GAAG,EAAX;EAAA,MAAe/1D,IAAI,GAAG,EAAtB;EAAA,MAA0B/3C,CAA1B;EACA,MAAI,KAAK+9F,KAAT,EAAgB+P,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAW,KAAKhQ,KAAhB,EAAuB,KAAK8M,GAA5B,EAAiC,KAAKgC,GAAtC,EAA2C,KAAKW,GAAhD,EAAqD,KAAK1C,GAA1D,EAA+D,KAAKgC,GAApE,EAAyE,KAAKW,GAA9E,CAAV;;EAChB,SAAOztG,CAAC,GAAG8tG,IAAI,CAACrtD,GAAL,EAAX,EAAuB;EACrB,QAAI+1C,IAAI,GAAGx2F,CAAC,CAACw2F,IAAb;;EACA,QAAIA,IAAI,CAACtmG,MAAT,EAAiB;EACf,UAAI8pB,KAAJ;EAAA,UAAW3W,EAAE,GAAGrD,CAAC,CAACqD,EAAlB;EAAA,UAAsBC,EAAE,GAAGtD,CAAC,CAACsD,EAA7B;EAAA,UAAiCC,EAAE,GAAGvD,CAAC,CAACuD,EAAxC;EAAA,UAA4CE,EAAE,GAAGzD,CAAC,CAACyD,EAAnD;EAAA,UAAuDC,EAAE,GAAG1D,CAAC,CAAC0D,EAA9D;EAAA,UAAkEC,EAAE,GAAG3D,CAAC,CAAC2D,EAAzE;EAAA,UAA6EonG,EAAE,GAAG,CAAC1nG,EAAE,GAAGI,EAAN,IAAY,CAA9F;EAAA,UAAiGspG,EAAE,GAAG,CAACzpG,EAAE,GAAGI,EAAN,IAAY,CAAlH;EAAA,UAAqHgqG,EAAE,GAAG,CAACnqG,EAAE,GAAGI,EAAN,IAAY,CAAtI;EACA,UAAIqW,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqBsX,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAW/zF,KAAX,EAAkB3W,EAAlB,EAAsBC,EAAtB,EAA0BC,EAA1B,EAA8BwnG,EAA9B,EAAkCgC,EAAlC,EAAsCW,EAAtC,CAAV;EACrB,UAAI1zF,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqBsX,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAW/zF,KAAX,EAAkB+wF,EAAlB,EAAsBznG,EAAtB,EAA0BC,EAA1B,EAA8BE,EAA9B,EAAkCspG,EAAlC,EAAsCW,EAAtC,CAAV;EACrB,UAAI1zF,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqBsX,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAW/zF,KAAX,EAAkB3W,EAAlB,EAAsB0pG,EAAtB,EAA0BxpG,EAA1B,EAA8BwnG,EAA9B,EAAkCrnG,EAAlC,EAAsCgqG,EAAtC,CAAV;EACrB,UAAI1zF,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqBsX,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAW/zF,KAAX,EAAkB+wF,EAAlB,EAAsBgC,EAAtB,EAA0BxpG,EAA1B,EAA8BE,EAA9B,EAAkCC,EAAlC,EAAsCgqG,EAAtC,CAAV;EACrB,UAAI1zF,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqBsX,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAW/zF,KAAX,EAAkB3W,EAAlB,EAAsBC,EAAtB,EAA0BoqG,EAA1B,EAA8B3C,EAA9B,EAAkCgC,EAAlC,EAAsCppG,EAAtC,CAAV;EACrB,UAAIqW,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqBsX,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAW/zF,KAAX,EAAkB+wF,EAAlB,EAAsBznG,EAAtB,EAA0BoqG,EAA1B,EAA8BjqG,EAA9B,EAAkCspG,EAAlC,EAAsCppG,EAAtC,CAAV;EACrB,UAAIqW,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqBsX,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAW/zF,KAAX,EAAkB3W,EAAlB,EAAsB0pG,EAAtB,EAA0BW,EAA1B,EAA8B3C,EAA9B,EAAkCrnG,EAAlC,EAAsCC,EAAtC,CAAV;EACrB,UAAIqW,KAAK,GAAGw8E,IAAI,CAAC,CAAD,CAAhB,EAAqBsX,IAAI,CAACz+G,IAAL,CAAU,IAAI0+G,MAAJ,CAAW/zF,KAAX,EAAkB+wF,EAAlB,EAAsBgC,EAAtB,EAA0BW,EAA1B,EAA8BjqG,EAA9B,EAAkCC,EAAlC,EAAsCC,EAAtC,CAAV;EACtB;;EACDo0C,IAAAA,IAAI,CAAC1oD,IAAL,CAAU2Q,CAAV;EACD;;EACD,SAAOA,CAAC,GAAG+3C,IAAI,CAAC0I,GAAL,EAAX,EAAuB;EACrBr5C,IAAAA,QAAQ,CAACpH,CAAC,CAACw2F,IAAH,EAASx2F,CAAC,CAACqD,EAAX,EAAerD,CAAC,CAACsD,EAAjB,EAAqBtD,CAAC,CAACuD,EAAvB,EAA2BvD,CAAC,CAACyD,EAA7B,EAAiCzD,CAAC,CAAC0D,EAAnC,EAAuC1D,CAAC,CAAC2D,EAAzC,CAAR;EACD;;EACD,SAAO,IAAP;EACD;;ECxBM,SAAS6nG,QAAT,CAAkBnyG,CAAlB,EAAqB;EAC1B,SAAOA,CAAC,CAAC,CAAD,CAAR;EACD;EAEc,iBAASoxG,CAAT,EAAY;EACzB,SAAO/zG,SAAS,CAACxG,MAAV,IAAoB,KAAKzjB,EAAL,GAAUg+H,CAAV,EAAa,IAAjC,IAAyC,KAAKh+H,EAArD;EACD;;ECNM,SAAS2gI,QAAT,CAAkB/zG,CAAlB,EAAqB;EAC1B,SAAOA,CAAC,CAAC,CAAD,CAAR;EACD;EAEc,iBAASoxG,CAAT,EAAY;EACzB,SAAO/zG,SAAS,CAACxG,MAAV,IAAoB,KAAKxjB,EAAL,GAAU+9H,CAAV,EAAa,IAAjC,IAAyC,KAAK/9H,EAArD;EACD;;ECNM,SAASshI,QAAT,CAAkB30G,CAAlB,EAAqB;EAC1B,SAAOA,CAAC,CAAC,CAAD,CAAR;EACD;EAEc,iBAASoxG,CAAT,EAAY;EACzB,SAAO/zG,SAAS,CAACxG,MAAV,IAAoB,KAAK1jB,EAAL,GAAUi+H,CAAV,EAAa,IAAjC,IAAyC,KAAKj+H,EAArD;EACD;;ECQc,SAASyhI,MAAT,CAAgB3D,KAAhB,EAAuBh5G,CAAvB,EAA0BC,CAA1B,EAA6BoO,CAA7B,EAAgC;EAC7C,MAAIgrG,IAAI,GAAG,IAAIuD,MAAJ,CAAW58G,CAAC,IAAI,IAAL,GAAYk6G,QAAZ,GAAuBl6G,CAAlC,EAAqCC,CAAC,IAAI,IAAL,GAAY67G,QAAZ,GAAuB77G,CAA5D,EAA+DoO,CAAC,IAAI,IAAL,GAAYquG,QAAZ,GAAuBruG,CAAtF,EAAyFgsG,GAAzF,EAA8FA,GAA9F,EAAmGA,GAAnG,EAAwGA,GAAxG,EAA6GA,GAA7G,EAAkHA,GAAlH,CAAX;EACA,SAAOrB,KAAK,IAAI,IAAT,GAAgBK,IAAhB,GAAuBA,IAAI,CAACM,MAAL,CAAYX,KAAZ,CAA9B;EACD;;EAED,SAAS4D,MAAT,CAAgB58G,CAAhB,EAAmBC,CAAnB,EAAsBoO,CAAtB,EAAyB0D,EAAzB,EAA6BC,EAA7B,EAAiCC,EAAjC,EAAqCE,EAArC,EAAyCC,EAAzC,EAA6CC,EAA7C,EAAiD;EAC/C,OAAKl3B,EAAL,GAAU6kB,CAAV;EACA,OAAK5kB,EAAL,GAAU6kB,CAAV;EACA,OAAK/kB,EAAL,GAAUmzB,CAAV;EACA,OAAKkrG,GAAL,GAAWxnG,EAAX;EACA,OAAKwpG,GAAL,GAAWvpG,EAAX;EACA,OAAKkqG,GAAL,GAAWjqG,EAAX;EACA,OAAKunG,GAAL,GAAWrnG,EAAX;EACA,OAAKqpG,GAAL,GAAWppG,EAAX;EACA,OAAK+pG,GAAL,GAAW9pG,EAAX;EACA,OAAKo6F,KAAL,GAAa7uG,SAAb;EACD;;EAED,SAAS08G,SAAT,CAAmBhB,IAAnB,EAAyB;EACvB,MAAIn4G,IAAI,GAAG;EAACiN,IAAAA,IAAI,EAAEkrG,IAAI,CAAClrG;EAAZ,GAAX;EAAA,MAA8Bq4C,IAAI,GAAGtlD,IAArC;;EACA,SAAOm4G,IAAI,GAAGA,IAAI,CAAC7yD,IAAnB,EAAyBA,IAAI,GAAGA,IAAI,CAACA,IAAL,GAAY;EAACr4C,IAAAA,IAAI,EAAEkrG,IAAI,CAAClrG;EAAZ,GAAnB;;EACzB,SAAOjN,IAAP;EACD;;EAED,IAAIo5G,SAAS,GAAGoC,MAAM,CAACz3G,SAAP,GAAmB03G,MAAM,CAAC13G,SAA1C;;EAEAq1G,SAAS,CAACp5G,IAAV,GAAiB,YAAW;EAC1B,MAAIA,IAAI,GAAG,IAAIy7G,MAAJ,CAAW,KAAKzhI,EAAhB,EAAoB,KAAKC,EAAzB,EAA6B,KAAKF,EAAlC,EAAsC,KAAKq+H,GAA3C,EAAgD,KAAKgC,GAArD,EAA0D,KAAKW,GAA/D,EAAoE,KAAK1C,GAAzE,EAA8E,KAAKgC,GAAnF,EAAwF,KAAKW,GAA7F,CAAX;EAAA,MACIjX,IAAI,GAAG,KAAKuH,KADhB;EAAA,MAEIuM,KAFJ;EAAA,MAGItwF,KAHJ;EAKA,MAAI,CAACw8E,IAAL,EAAW,OAAO/jG,IAAP;EAEX,MAAI,CAAC+jG,IAAI,CAACtmG,MAAV,EAAkB,OAAOuC,IAAI,CAACsrG,KAAL,GAAa6N,SAAS,CAACpV,IAAD,CAAtB,EAA8B/jG,IAArC;EAElB63G,EAAAA,KAAK,GAAG,CAAC;EAACnsG,IAAAA,MAAM,EAAEq4F,IAAT;EAAe3mG,IAAAA,MAAM,EAAE4C,IAAI,CAACsrG,KAAL,GAAa,IAAI/+F,KAAJ,CAAU,CAAV;EAApC,GAAD,CAAR;;EACA,SAAOw3F,IAAI,GAAG8T,KAAK,CAAC7pD,GAAN,EAAd,EAA2B;EACzB,SAAK,IAAIzwD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuB,EAAEA,CAAzB,EAA4B;EAC1B,UAAIgqB,KAAK,GAAGw8E,IAAI,CAACr4F,MAAL,CAAYnO,CAAZ,CAAZ,EAA4B;EAC1B,YAAIgqB,KAAK,CAAC9pB,MAAV,EAAkBo6G,KAAK,CAACj7G,IAAN,CAAW;EAAC8O,UAAAA,MAAM,EAAE6b,KAAT;EAAgBnqB,UAAAA,MAAM,EAAE2mG,IAAI,CAAC3mG,MAAL,CAAYG,CAAZ,IAAiB,IAAIgP,KAAJ,CAAU,CAAV;EAAzC,SAAX,EAAlB,KACKw3F,IAAI,CAAC3mG,MAAL,CAAYG,CAAZ,IAAiB47G,SAAS,CAAC5xF,KAAD,CAA1B;EACN;EACF;EACF;;EAED,SAAOvnB,IAAP;EACD,CArBD;;EAuBAo5G,SAAS,CAACl5G,GAAV,GAAgBm5G,QAAhB;EACAD,SAAS,CAACZ,MAAV,GAAmBc,MAAnB;EACAF,SAAS,CAACnB,KAAV,GAAkBsB,UAAlB;EACAH,SAAS,CAACnsG,IAAV,GAAiBusG,SAAjB;EACAJ,SAAS,CAACK,MAAV,GAAmBC,WAAnB;EACAN,SAAS,CAAC3qB,IAAV,GAAiBkrB,SAAjB;EACAP,SAAS,CAACryF,MAAV,GAAmB6yF,WAAnB;EACAR,SAAS,CAACN,SAAV,GAAsBe,WAAtB;EACAT,SAAS,CAAC/U,IAAV,GAAiByV,SAAjB;EACAV,SAAS,CAACzgG,IAAV,GAAiBohG,SAAjB;EACAX,SAAS,CAACX,KAAV,GAAkBuB,UAAlB;EACAZ,SAAS,CAACa,UAAV,GAAuBC,eAAvB;EACAd,SAAS,CAACv6G,CAAV,GAAcs7G,MAAd;EACAf,SAAS,CAACt6G,CAAV,GAAcg8G,MAAd;EACA1B,SAAS,CAAClsG,CAAV,GAAcwuG,MAAd;;EC7Ee,mBAAS78G,CAAT,EAAY;EACzB,SAAO,YAAW;EAChB,WAAOA,CAAP;EACD,GAFD;EAGD;;ECJc,iBAASV,MAAT,EAAiB;EAC9B,SAAO,CAACA,MAAM,KAAK,GAAZ,IAAmB,IAA1B;EACD;;ECCD,SAASnB,OAAT,CAAe4J,CAAf,EAAkB;EAChB,SAAOA,CAAC,CAAC5J,KAAT;EACD;;EAED,SAASyxF,IAAT,CAAcktB,QAAd,EAAwBC,MAAxB,EAAgC;EAC9B,MAAI7X,IAAI,GAAG4X,QAAQ,CAAC10E,GAAT,CAAa20E,MAAb,CAAX;EACA,MAAI,CAAC7X,IAAL,EAAW,MAAM,IAAIlkG,KAAJ,CAAU,qBAAqB+7G,MAA/B,CAAN;EACX,SAAO7X,IAAP;EACD;;EAEc,oBAAS8X,KAAT,EAAgB;EAC7B,MAAIz0F,EAAE,GAAGpqB,OAAT;EAAA,MACI86G,QAAQ,GAAGgE,eADf;EAAA,MAEIC,SAFJ;EAAA,MAGIz1F,QAAQ,GAAG/L,QAAQ,CAAC,EAAD,CAHvB;EAAA,MAIIyhG,SAJJ;EAAA,MAKInE,KALJ;EAAA,MAMIoE,IANJ;EAAA,MAOIvsG,KAPJ;EAAA,MAQIqhD,IARJ;EAAA,MASI5yD,MATJ;EAAA,MAUI+9G,UAAU,GAAG,CAVjB;EAYA,MAAIL,KAAK,IAAI,IAAb,EAAmBA,KAAK,GAAG,EAAR;;EAEnB,WAASC,eAAT,CAAyBK,IAAzB,EAA+B;EAC7B,WAAO,IAAIx+G,IAAI,CAACc,GAAL,CAASiR,KAAK,CAACysG,IAAI,CAACzwG,MAAL,CAAY1O,KAAb,CAAd,EAAmC0S,KAAK,CAACysG,IAAI,CAAC/+G,MAAL,CAAYJ,KAAb,CAAxC,CAAX;EACD;;EAED,WAASirB,KAAT,CAAeplB,KAAf,EAAsB;EACpB,SAAK,IAAIgzD,CAAC,GAAG,CAAR,EAAWl3D,CAAC,GAAGk9G,KAAK,CAACp+G,MAA1B,EAAkCo4D,CAAC,GAAGqmD,UAAtC,EAAkD,EAAErmD,CAApD,EAAuD;EACrD,WAAK,IAAIt4D,CAAC,GAAG,CAAR,EAAW4+G,IAAX,EAAiBzwG,MAAjB,EAAyBtO,MAAzB,EAAiCyB,CAAC,GAAG,CAArC,EAAwCC,CAAC,GAAG,CAA5C,EAA+CoO,CAAC,GAAG,CAAnD,EAAsD1P,CAAtD,EAAyDkD,CAA9D,EAAiEnD,CAAC,GAAGoB,CAArE,EAAwE,EAAEpB,CAA1E,EAA6E;EAC3E4+G,QAAAA,IAAI,GAAGN,KAAK,CAACt+G,CAAD,CAAZ,EAAiBmO,MAAM,GAAGywG,IAAI,CAACzwG,MAA/B,EAAuCtO,MAAM,GAAG++G,IAAI,CAAC/+G,MAArD;EACAyB,QAAAA,CAAC,GAAGzB,MAAM,CAACyB,CAAP,GAAWzB,MAAM,CAACg/G,EAAlB,GAAuB1wG,MAAM,CAAC7M,CAA9B,GAAkC6M,MAAM,CAAC0wG,EAAzC,IAA+CC,MAAM,CAACl+G,MAAD,CAAzD;;EACA,YAAI89G,IAAI,GAAG,CAAX,EAAc;EAAEn9G,UAAAA,CAAC,GAAG1B,MAAM,CAAC0B,CAAP,GAAW1B,MAAM,CAACk/G,EAAlB,GAAuB5wG,MAAM,CAAC5M,CAA9B,GAAkC4M,MAAM,CAAC4wG,EAAzC,IAA+CD,MAAM,CAACl+G,MAAD,CAAzD;EAAoE;;EACpF,YAAI89G,IAAI,GAAG,CAAX,EAAc;EAAE/uG,UAAAA,CAAC,GAAG9P,MAAM,CAAC8P,CAAP,GAAW9P,MAAM,CAACm/G,EAAlB,GAAuB7wG,MAAM,CAACwB,CAA9B,GAAkCxB,MAAM,CAAC6wG,EAAzC,IAA+CF,MAAM,CAACl+G,MAAD,CAAzD;EAAoE;;EACpFX,QAAAA,CAAC,GAAGG,IAAI,CAACsE,IAAL,CAAUpD,CAAC,GAAGA,CAAJ,GAAQC,CAAC,GAAGA,CAAZ,GAAgBoO,CAAC,GAAGA,CAA9B,CAAJ;EACA1P,QAAAA,CAAC,GAAG,CAACA,CAAC,GAAGw+G,SAAS,CAACz+G,CAAD,CAAd,IAAqBC,CAArB,GAAyBqF,KAAzB,GAAiCk5G,SAAS,CAACx+G,CAAD,CAA9C;EACAsB,QAAAA,CAAC,IAAIrB,CAAL,EAAQsB,CAAC,IAAItB,CAAb,EAAgB0P,CAAC,IAAI1P,CAArB;EAEAJ,QAAAA,MAAM,CAACg/G,EAAP,IAAav9G,CAAC,IAAI6B,CAAC,GAAGqwD,IAAI,CAACxzD,CAAD,CAAZ,CAAd;;EACA,YAAI0+G,IAAI,GAAG,CAAX,EAAc;EAAE7+G,UAAAA,MAAM,CAACk/G,EAAP,IAAax9G,CAAC,GAAG4B,CAAjB;EAAqB;;EACrC,YAAIu7G,IAAI,GAAG,CAAX,EAAc;EAAE7+G,UAAAA,MAAM,CAACm/G,EAAP,IAAarvG,CAAC,GAAGxM,CAAjB;EAAqB;;EAErCgL,QAAAA,MAAM,CAAC0wG,EAAP,IAAav9G,CAAC,IAAI6B,CAAC,GAAG,IAAIA,CAAZ,CAAd;;EACA,YAAIu7G,IAAI,GAAG,CAAX,EAAc;EAAEvwG,UAAAA,MAAM,CAAC4wG,EAAP,IAAax9G,CAAC,GAAG4B,CAAjB;EAAqB;;EACrC,YAAIu7G,IAAI,GAAG,CAAX,EAAc;EAAEvwG,UAAAA,MAAM,CAAC6wG,EAAP,IAAarvG,CAAC,GAAGxM,CAAjB;EAAqB;EACtC;EACF;EACF;;EAED,WAASq3G,UAAT,GAAsB;EACpB,QAAI,CAACF,KAAL,EAAY;EAEZ,QAAIt6G,CAAJ;EAAA,QACIoB,CAAC,GAAGk5G,KAAK,CAACp6G,MADd;EAAA,QAEImB,CAAC,GAAGi9G,KAAK,CAACp+G,MAFd;EAAA,QAGIk+G,QAAQ,GAAG,IAAI51C,GAAJ,CAAQ8xC,KAAK,CAAC1nF,GAAN,CAAU,CAACvpB,CAAD,EAAIrJ,CAAJ,KAAU,CAAC6pB,EAAE,CAACxgB,CAAD,EAAIrJ,CAAJ,EAAOs6G,KAAP,CAAH,EAAkBjxG,CAAlB,CAApB,CAAR,CAHf;EAAA,QAIIu1G,IAJJ;;EAMA,SAAK5+G,CAAC,GAAG,CAAJ,EAAOmS,KAAK,GAAG,IAAInD,KAAJ,CAAU5N,CAAV,CAApB,EAAkCpB,CAAC,GAAGqB,CAAtC,EAAyC,EAAErB,CAA3C,EAA8C;EAC5C4+G,MAAAA,IAAI,GAAGN,KAAK,CAACt+G,CAAD,CAAZ,EAAiB4+G,IAAI,CAACn/G,KAAL,GAAaO,CAA9B;EACA,UAAI,OAAO4+G,IAAI,CAACzwG,MAAZ,KAAuB,QAA3B,EAAqCywG,IAAI,CAACzwG,MAAL,GAAc+iF,IAAI,CAACktB,QAAD,EAAWQ,IAAI,CAACzwG,MAAhB,CAAlB;EACrC,UAAI,OAAOywG,IAAI,CAAC/+G,MAAZ,KAAuB,QAA3B,EAAqC++G,IAAI,CAAC/+G,MAAL,GAAcqxF,IAAI,CAACktB,QAAD,EAAWQ,IAAI,CAAC/+G,MAAhB,CAAlB;EACrCsS,MAAAA,KAAK,CAACysG,IAAI,CAACzwG,MAAL,CAAY1O,KAAb,CAAL,GAA2B,CAAC0S,KAAK,CAACysG,IAAI,CAACzwG,MAAL,CAAY1O,KAAb,CAAL,IAA4B,CAA7B,IAAkC,CAA7D;EACA0S,MAAAA,KAAK,CAACysG,IAAI,CAAC/+G,MAAL,CAAYJ,KAAb,CAAL,GAA2B,CAAC0S,KAAK,CAACysG,IAAI,CAAC/+G,MAAL,CAAYJ,KAAb,CAAL,IAA4B,CAA7B,IAAkC,CAA7D;EACD;;EAED,SAAKO,CAAC,GAAG,CAAJ,EAAOwzD,IAAI,GAAG,IAAIxkD,KAAJ,CAAU3N,CAAV,CAAnB,EAAiCrB,CAAC,GAAGqB,CAArC,EAAwC,EAAErB,CAA1C,EAA6C;EAC3C4+G,MAAAA,IAAI,GAAGN,KAAK,CAACt+G,CAAD,CAAZ,EAAiBwzD,IAAI,CAACxzD,CAAD,CAAJ,GAAUmS,KAAK,CAACysG,IAAI,CAACzwG,MAAL,CAAY1O,KAAb,CAAL,IAA4B0S,KAAK,CAACysG,IAAI,CAACzwG,MAAL,CAAY1O,KAAb,CAAL,GAA2B0S,KAAK,CAACysG,IAAI,CAAC/+G,MAAL,CAAYJ,KAAb,CAA5D,CAA3B;EACD;;EAED++G,IAAAA,SAAS,GAAG,IAAIxvG,KAAJ,CAAU3N,CAAV,CAAZ,EAA0B49G,kBAAkB,EAA5C;EACAR,IAAAA,SAAS,GAAG,IAAIzvG,KAAJ,CAAU3N,CAAV,CAAZ,EAA0B69G,kBAAkB,EAA5C;EACD;;EAED,WAASD,kBAAT,GAA8B;EAC5B,QAAI,CAAC3E,KAAL,EAAY;;EAEZ,SAAK,IAAIt6G,CAAC,GAAG,CAAR,EAAWoB,CAAC,GAAGk9G,KAAK,CAACp+G,MAA1B,EAAkCF,CAAC,GAAGoB,CAAtC,EAAyC,EAAEpB,CAA3C,EAA8C;EAC5Cw+G,MAAAA,SAAS,CAACx+G,CAAD,CAAT,GAAe,CAACu6G,QAAQ,CAAC+D,KAAK,CAACt+G,CAAD,CAAN,EAAWA,CAAX,EAAcs+G,KAAd,CAAxB;EACD;EACF;;EAED,WAASY,kBAAT,GAA8B;EAC5B,QAAI,CAAC5E,KAAL,EAAY;;EAEZ,SAAK,IAAIt6G,CAAC,GAAG,CAAR,EAAWoB,CAAC,GAAGk9G,KAAK,CAACp+G,MAA1B,EAAkCF,CAAC,GAAGoB,CAAtC,EAAyC,EAAEpB,CAA3C,EAA8C;EAC5Cy+G,MAAAA,SAAS,CAACz+G,CAAD,CAAT,GAAe,CAAC+oB,QAAQ,CAACu1F,KAAK,CAACt+G,CAAD,CAAN,EAAWA,CAAX,EAAcs+G,KAAd,CAAxB;EACD;EACF;;EAED5zF,EAAAA,KAAK,CAAC8vF,UAAN,GAAmB,UAAS2E,MAAT,EAAiB,GAAGC,IAApB,EAA0B;EAC3C9E,IAAAA,KAAK,GAAG6E,MAAR;EACAv+G,IAAAA,MAAM,GAAGw+G,IAAI,CAACluB,IAAL,CAAUmuB,GAAG,IAAI,OAAOA,GAAP,KAAe,UAAhC,KAA+Cj/G,IAAI,CAACQ,MAA7D;EACA89G,IAAAA,IAAI,GAAGU,IAAI,CAACluB,IAAL,CAAUmuB,GAAG,IAAI,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAUC,QAAV,CAAmBD,GAAnB,CAAjB,KAA6C,CAApD;EACA7E,IAAAA,UAAU;EACX,GALD;;EAOA9vF,EAAAA,KAAK,CAAC4zF,KAAN,GAAc,UAAS7D,CAAT,EAAY;EACxB,WAAO/zG,SAAS,CAACxG,MAAV,IAAoBo+G,KAAK,GAAG7D,CAAR,EAAWD,UAAU,EAArB,EAAyB9vF,KAA7C,IAAsD4zF,KAA7D;EACD,GAFD;;EAIA5zF,EAAAA,KAAK,CAACb,EAAN,GAAW,UAAS4wF,CAAT,EAAY;EACrB,WAAO/zG,SAAS,CAACxG,MAAV,IAAoB2pB,EAAE,GAAG4wF,CAAL,EAAQ/vF,KAA5B,IAAqCb,EAA5C;EACD,GAFD;;EAIAa,EAAAA,KAAK,CAACi0F,UAAN,GAAmB,UAASlE,CAAT,EAAY;EAC7B,WAAO/zG,SAAS,CAACxG,MAAV,IAAoBy+G,UAAU,GAAG,CAAClE,CAAd,EAAiB/vF,KAArC,IAA8Ci0F,UAArD;EACD,GAFD;;EAIAj0F,EAAAA,KAAK,CAAC6vF,QAAN,GAAiB,UAASE,CAAT,EAAY;EAC3B,WAAO/zG,SAAS,CAACxG,MAAV,IAAoBq6G,QAAQ,GAAG,OAAOE,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8Bz9F,QAAQ,CAAC,CAACy9F,CAAF,CAAjD,EAAuDwE,kBAAkB,EAAzE,EAA6Ev0F,KAAjG,IAA0G6vF,QAAjH;EACD,GAFD;;EAIA7vF,EAAAA,KAAK,CAAC3B,QAAN,GAAiB,UAAS0xF,CAAT,EAAY;EAC3B,WAAO/zG,SAAS,CAACxG,MAAV,IAAoB6oB,QAAQ,GAAG,OAAO0xF,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8Bz9F,QAAQ,CAAC,CAACy9F,CAAF,CAAjD,EAAuDyE,kBAAkB,EAAzE,EAA6Ex0F,KAAjG,IAA0G3B,QAAjH;EACD,GAFD;;EAIA,SAAO2B,KAAP;EACD;;EC3HD,IAAI60F,MAAI,GAAG;EAACt+G,EAAAA,KAAK,EAAE,MAAM;EAAd,CAAX;;EAEA,SAASu+G,QAAT,GAAoB;EAClB,OAAK,IAAIx/G,CAAC,GAAG,CAAR,EAAWoB,CAAC,GAAGsF,SAAS,CAACxG,MAAzB,EAAiCu6G,CAAC,GAAG,EAArC,EAAyCj5G,CAA9C,EAAiDxB,CAAC,GAAGoB,CAArD,EAAwD,EAAEpB,CAA1D,EAA6D;EAC3D,QAAI,EAAEwB,CAAC,GAAGkF,SAAS,CAAC1G,CAAD,CAAT,GAAe,EAArB,KAA6BwB,CAAC,IAAIi5G,CAAlC,IAAwC,QAAQzuG,IAAR,CAAaxK,CAAb,CAA5C,EAA6D,MAAM,IAAIc,KAAJ,CAAU,mBAAmBd,CAA7B,CAAN;EAC7Di5G,IAAAA,CAAC,CAACj5G,CAAD,CAAD,GAAO,EAAP;EACD;;EACD,SAAO,IAAIi+G,QAAJ,CAAahF,CAAb,CAAP;EACD;;EAED,SAASgF,QAAT,CAAkBhF,CAAlB,EAAqB;EACnB,OAAKA,CAAL,GAASA,CAAT;EACD;;EAED,SAASiF,cAAT,CAAwBC,SAAxB,EAAmCC,KAAnC,EAA0C;EACxC,SAAOD,SAAS,CAAC52D,IAAV,GAAiBN,KAAjB,CAAuB,OAAvB,EAAgC71B,GAAhC,CAAoC,UAASpxB,CAAT,EAAY;EACrD,QAAI4J,IAAI,GAAG,EAAX;EAAA,QAAepL,CAAC,GAAGwB,CAAC,CAACpC,OAAF,CAAU,GAAV,CAAnB;EACA,QAAIY,CAAC,IAAI,CAAT,EAAYoL,IAAI,GAAG5J,CAAC,CAACzB,KAAF,CAAQC,CAAC,GAAG,CAAZ,CAAP,EAAuBwB,CAAC,GAAGA,CAAC,CAACzB,KAAF,CAAQ,CAAR,EAAWC,CAAX,CAA3B;EACZ,QAAIwB,CAAC,IAAI,CAACo+G,KAAK,CAACC,cAAN,CAAqBr+G,CAArB,CAAV,EAAmC,MAAM,IAAIc,KAAJ,CAAU,mBAAmBd,CAA7B,CAAN;EACnC,WAAO;EAACzC,MAAAA,IAAI,EAAEyC,CAAP;EAAU4J,MAAAA,IAAI,EAAEA;EAAhB,KAAP;EACD,GALM,CAAP;EAMD;;EAEDq0G,QAAQ,CAACj5G,SAAT,GAAqBg5G,QAAQ,CAACh5G,SAAT,GAAqB;EACxC3E,EAAAA,WAAW,EAAE49G,QAD2B;EAExCK,EAAAA,EAAE,EAAE,UAASC,QAAT,EAAmB3oG,QAAnB,EAA6B;EAC/B,QAAIqjG,CAAC,GAAG,KAAKA,CAAb;EAAA,QACIuF,CAAC,GAAGN,cAAc,CAACK,QAAQ,GAAG,EAAZ,EAAgBtF,CAAhB,CADtB;EAAA,QAEIj5G,CAFJ;EAAA,QAGIxB,CAAC,GAAG,CAAC,CAHT;EAAA,QAIIoB,CAAC,GAAG4+G,CAAC,CAAC9/G,MAJV,CAD+B;;EAQ/B,QAAIwG,SAAS,CAACxG,MAAV,GAAmB,CAAvB,EAA0B;EACxB,aAAO,EAAEF,CAAF,GAAMoB,CAAb,EAAgB,IAAI,CAACI,CAAC,GAAG,CAACu+G,QAAQ,GAAGC,CAAC,CAAChgH,CAAD,CAAb,EAAkBjB,IAAvB,MAAiCyC,CAAC,GAAGkoC,GAAG,CAAC+wE,CAAC,CAACj5G,CAAD,CAAF,EAAOu+G,QAAQ,CAAC30G,IAAhB,CAAxC,CAAJ,EAAoE,OAAO5J,CAAP;;EACpF;EACD,KAX8B;EAc/B;;;EACA,QAAI4V,QAAQ,IAAI,IAAZ,IAAoB,OAAOA,QAAP,KAAoB,UAA5C,EAAwD,MAAM,IAAI9U,KAAJ,CAAU,uBAAuB8U,QAAjC,CAAN;;EACxD,WAAO,EAAEpX,CAAF,GAAMoB,CAAb,EAAgB;EACd,UAAII,CAAC,GAAG,CAACu+G,QAAQ,GAAGC,CAAC,CAAChgH,CAAD,CAAb,EAAkBjB,IAA1B,EAAgC07G,CAAC,CAACj5G,CAAD,CAAD,GAAOQ,GAAG,CAACy4G,CAAC,CAACj5G,CAAD,CAAF,EAAOu+G,QAAQ,CAAC30G,IAAhB,EAAsBgM,QAAtB,CAAV,CAAhC,KACK,IAAIA,QAAQ,IAAI,IAAhB,EAAsB,KAAK5V,CAAL,IAAUi5G,CAAV,EAAaA,CAAC,CAACj5G,CAAD,CAAD,GAAOQ,GAAG,CAACy4G,CAAC,CAACj5G,CAAD,CAAF,EAAOu+G,QAAQ,CAAC30G,IAAhB,EAAsB,IAAtB,CAAV;EACzC;;EAED,WAAO,IAAP;EACD,GAxBuC;EAyBxC3I,EAAAA,IAAI,EAAE,YAAW;EACf,QAAIA,IAAI,GAAG,EAAX;EAAA,QAAeg4G,CAAC,GAAG,KAAKA,CAAxB;;EACA,SAAK,IAAIj5G,CAAT,IAAci5G,CAAd,EAAiBh4G,IAAI,CAACjB,CAAD,CAAJ,GAAUi5G,CAAC,CAACj5G,CAAD,CAAD,CAAKzB,KAAL,EAAV;;EACjB,WAAO,IAAI0/G,QAAJ,CAAah9G,IAAb,CAAP;EACD,GA7BuC;EA8BxCtC,EAAAA,IAAI,EAAE,UAASpB,IAAT,EAAekhH,IAAf,EAAqB;EACzB,QAAI,CAAC7+G,CAAC,GAAGsF,SAAS,CAACxG,MAAV,GAAmB,CAAxB,IAA6B,CAAjC,EAAoC,KAAK,IAAIk/G,IAAI,GAAG,IAAIpwG,KAAJ,CAAU5N,CAAV,CAAX,EAAyBpB,CAAC,GAAG,CAA7B,EAAgCoB,CAAhC,EAAmCI,CAAxC,EAA2CxB,CAAC,GAAGoB,CAA/C,EAAkD,EAAEpB,CAApD,EAAuDo/G,IAAI,CAACp/G,CAAD,CAAJ,GAAU0G,SAAS,CAAC1G,CAAC,GAAG,CAAL,CAAnB;EAC3F,QAAI,CAAC,KAAKy6G,CAAL,CAAOoF,cAAP,CAAsB9gH,IAAtB,CAAL,EAAkC,MAAM,IAAIuD,KAAJ,CAAU,mBAAmBvD,IAA7B,CAAN;;EAClC,SAAKyC,CAAC,GAAG,KAAKi5G,CAAL,CAAO17G,IAAP,CAAJ,EAAkBiB,CAAC,GAAG,CAAtB,EAAyBoB,CAAC,GAAGI,CAAC,CAACtB,MAApC,EAA4CF,CAAC,GAAGoB,CAAhD,EAAmD,EAAEpB,CAArD,EAAwDwB,CAAC,CAACxB,CAAD,CAAD,CAAKiB,KAAL,CAAWi9D,KAAX,CAAiB+hD,IAAjB,EAAuBb,IAAvB;EACzD,GAlCuC;EAmCxClhD,EAAAA,KAAK,EAAE,UAASn/D,IAAT,EAAekhH,IAAf,EAAqBb,IAArB,EAA2B;EAChC,QAAI,CAAC,KAAK3E,CAAL,CAAOoF,cAAP,CAAsB9gH,IAAtB,CAAL,EAAkC,MAAM,IAAIuD,KAAJ,CAAU,mBAAmBvD,IAA7B,CAAN;;EAClC,SAAK,IAAIyC,CAAC,GAAG,KAAKi5G,CAAL,CAAO17G,IAAP,CAAR,EAAsBiB,CAAC,GAAG,CAA1B,EAA6BoB,CAAC,GAAGI,CAAC,CAACtB,MAAxC,EAAgDF,CAAC,GAAGoB,CAApD,EAAuD,EAAEpB,CAAzD,EAA4DwB,CAAC,CAACxB,CAAD,CAAD,CAAKiB,KAAL,CAAWi9D,KAAX,CAAiB+hD,IAAjB,EAAuBb,IAAvB;EAC7D;EAtCuC,CAA1C;;EAyCA,SAAS11E,GAAT,CAAa3qC,IAAb,EAAmBqM,IAAnB,EAAyB;EACvB,OAAK,IAAIpL,CAAC,GAAG,CAAR,EAAWoB,CAAC,GAAGrC,IAAI,CAACmB,MAApB,EAA4BiG,CAAjC,EAAoCnG,CAAC,GAAGoB,CAAxC,EAA2C,EAAEpB,CAA7C,EAAgD;EAC9C,QAAI,CAACmG,CAAC,GAAGpH,IAAI,CAACiB,CAAD,CAAT,EAAcoL,IAAd,KAAuBA,IAA3B,EAAiC;EAC/B,aAAOjF,CAAC,CAAClF,KAAT;EACD;EACF;EACF;;EAED,SAASe,GAAT,CAAajD,IAAb,EAAmBqM,IAAnB,EAAyBgM,QAAzB,EAAmC;EACjC,OAAK,IAAIpX,CAAC,GAAG,CAAR,EAAWoB,CAAC,GAAGrC,IAAI,CAACmB,MAAzB,EAAiCF,CAAC,GAAGoB,CAArC,EAAwC,EAAEpB,CAA1C,EAA6C;EAC3C,QAAIjB,IAAI,CAACiB,CAAD,CAAJ,CAAQoL,IAAR,KAAiBA,IAArB,EAA2B;EACzBrM,MAAAA,IAAI,CAACiB,CAAD,CAAJ,GAAUu/G,MAAV,EAAgBxgH,IAAI,GAAGA,IAAI,CAACgB,KAAL,CAAW,CAAX,EAAcC,CAAd,EAAiB+jF,MAAjB,CAAwBhlF,IAAI,CAACgB,KAAL,CAAWC,CAAC,GAAG,CAAf,CAAxB,CAAvB;EACA;EACD;EACF;;EACD,MAAIoX,QAAQ,IAAI,IAAhB,EAAsBrY,IAAI,CAACM,IAAL,CAAU;EAAC+L,IAAAA,IAAI,EAAEA,IAAP;EAAanK,IAAAA,KAAK,EAAEmW;EAApB,GAAV;EACtB,SAAOrY,IAAP;EACD;;ECjFD,IAAIgpC,KAAK,GAAG,CAAZ;EAAA;EACIm4E,OAAO,GAAG,CADd;EAAA;EAEIC,QAAQ,GAAG,CAFf;EAAA;EAGIC,SAAS,GAAG,IAHhB;EAAA;EAIIC,QAJJ;EAAA,IAKIC,QALJ;EAAA,IAMIC,SAAS,GAAG,CANhB;EAAA,IAOIC,QAAQ,GAAG,CAPf;EAAA,IAQIC,SAAS,GAAG,CARhB;EAAA,IASIC,KAAK,GAAG,OAAOC,WAAP,KAAuB,QAAvB,IAAmCA,WAAW,CAACvjH,GAA/C,GAAqDujH,WAArD,GAAmEC,IAT/E;EAAA,IAUIC,QAAQ,GAAG,OAAOnrC,MAAP,KAAkB,QAAlB,IAA8BA,MAAM,CAAC1tC,qBAArC,GAA6D0tC,MAAM,CAAC1tC,qBAAP,CAA6BsyC,IAA7B,CAAkC5E,MAAlC,CAA7D,GAAyG,UAASpsE,CAAT,EAAY;EAAE4xF,EAAAA,UAAU,CAAC5xF,CAAD,EAAI,EAAJ,CAAV;EAAoB,CAV1J;EAYO,SAASlM,KAAT,GAAe;EACpB,SAAOojH,QAAQ,KAAKK,QAAQ,CAACC,QAAD,CAAR,EAAoBN,QAAQ,GAAGE,KAAK,CAACtjH,GAAN,KAAcqjH,SAAlD,CAAf;EACD;;EAED,SAASK,QAAT,GAAoB;EAClBN,EAAAA,QAAQ,GAAG,CAAX;EACD;;EAEM,SAASO,KAAT,GAAiB;EACtB,OAAKC,KAAL,GACA,KAAKC,KAAL,GACA,KAAKC,KAAL,GAAa,IAFb;EAGD;EAEDH,KAAK,CAACv6G,SAAN,GAAkB26G,KAAK,CAAC36G,SAAN,GAAkB;EAClC3E,EAAAA,WAAW,EAAEk/G,KADqB;EAElCK,EAAAA,OAAO,EAAE,UAAShqG,QAAT,EAAmBgrF,KAAnB,EAA0Bt6D,IAA1B,EAAgC;EACvC,QAAI,OAAO1wB,QAAP,KAAoB,UAAxB,EAAoC,MAAM,IAAI8gB,SAAJ,CAAc,4BAAd,CAAN;EACpC4P,IAAAA,IAAI,GAAG,CAACA,IAAI,IAAI,IAAR,GAAe1qC,KAAG,EAAlB,GAAuB,CAAC0qC,IAAzB,KAAkCs6D,KAAK,IAAI,IAAT,GAAgB,CAAhB,GAAoB,CAACA,KAAvD,CAAP;;EACA,QAAI,CAAC,KAAK8e,KAAN,IAAeZ,QAAQ,KAAK,IAAhC,EAAsC;EACpC,UAAIA,QAAJ,EAAcA,QAAQ,CAACY,KAAT,GAAiB,IAAjB,CAAd,KACKb,QAAQ,GAAG,IAAX;EACLC,MAAAA,QAAQ,GAAG,IAAX;EACD;;EACD,SAAKU,KAAL,GAAa5pG,QAAb;EACA,SAAK6pG,KAAL,GAAan5E,IAAb;EACAu5E,IAAAA,KAAK;EACN,GAbiC;EAclCp5E,EAAAA,IAAI,EAAE,YAAW;EACf,QAAI,KAAK+4E,KAAT,EAAgB;EACd,WAAKA,KAAL,GAAa,IAAb;EACA,WAAKC,KAAL,GAAa/1G,QAAb;EACAm2G,MAAAA,KAAK;EACN;EACF;EApBiC,CAApC;EAuBO,SAASF,KAAT,CAAe/pG,QAAf,EAAyBgrF,KAAzB,EAAgCt6D,IAAhC,EAAsC;EAC3C,MAAItmC,CAAC,GAAG,IAAIu/G,KAAJ,EAAR;EACAv/G,EAAAA,CAAC,CAAC4/G,OAAF,CAAUhqG,QAAV,EAAoBgrF,KAApB,EAA2Bt6D,IAA3B;EACA,SAAOtmC,CAAP;EACD;EAEM,SAAS8/G,UAAT,GAAsB;EAC3BlkH,EAAAA,KAAG,GADwB;;EAE3B,IAAE2qC,KAAF,CAF2B;;EAG3B,MAAIvmC,CAAC,GAAG6+G,QAAR;EAAA,MAAkBx8G,CAAlB;;EACA,SAAOrC,CAAP,EAAU;EACR,QAAI,CAACqC,CAAC,GAAG28G,QAAQ,GAAGh/G,CAAC,CAACy/G,KAAlB,KAA4B,CAAhC,EAAmCz/G,CAAC,CAACw/G,KAAF,CAAQ7gH,IAAR,CAAajB,SAAb,EAAwB2E,CAAxB;EACnCrC,IAAAA,CAAC,GAAGA,CAAC,CAAC0/G,KAAN;EACD;;EACD,IAAEn5E,KAAF;EACD;;EAED,SAASw5E,IAAT,GAAgB;EACdf,EAAAA,QAAQ,GAAG,CAACD,SAAS,GAAGG,KAAK,CAACtjH,GAAN,EAAb,IAA4BqjH,SAAvC;EACA14E,EAAAA,KAAK,GAAGm4E,OAAO,GAAG,CAAlB;;EACA,MAAI;EACFoB,IAAAA,UAAU;EACX,GAFD,SAEU;EACRv5E,IAAAA,KAAK,GAAG,CAAR;EACAy5E,IAAAA,GAAG;EACHhB,IAAAA,QAAQ,GAAG,CAAX;EACD;EACF;;EAED,SAASiB,IAAT,GAAgB;EACd,MAAIrkH,GAAG,GAAGsjH,KAAK,CAACtjH,GAAN,EAAV;EAAA,MAAuBglG,KAAK,GAAGhlG,GAAG,GAAGmjH,SAArC;EACA,MAAIne,KAAK,GAAGge,SAAZ,EAAuBK,SAAS,IAAIre,KAAb,EAAoBme,SAAS,GAAGnjH,GAAhC;EACxB;;EAED,SAASokH,GAAT,GAAe;EACb,MAAI1hG,EAAJ;EAAA,MAAQC,EAAE,GAAGsgG,QAAb;EAAA,MAAuBlhC,EAAvB;EAAA,MAA2Br3C,IAAI,GAAG58B,QAAlC;;EACA,SAAO6U,EAAP,EAAW;EACT,QAAIA,EAAE,CAACihG,KAAP,EAAc;EACZ,UAAIl5E,IAAI,GAAG/nB,EAAE,CAACkhG,KAAd,EAAqBn5E,IAAI,GAAG/nB,EAAE,CAACkhG,KAAV;EACrBnhG,MAAAA,EAAE,GAAGC,EAAL,EAASA,EAAE,GAAGA,EAAE,CAACmhG,KAAjB;EACD,KAHD,MAGO;EACL/hC,MAAAA,EAAE,GAAGp/D,EAAE,CAACmhG,KAAR,EAAenhG,EAAE,CAACmhG,KAAH,GAAW,IAA1B;EACAnhG,MAAAA,EAAE,GAAGD,EAAE,GAAGA,EAAE,CAACohG,KAAH,GAAW/hC,EAAd,GAAmBkhC,QAAQ,GAAGlhC,EAArC;EACD;EACF;;EACDmhC,EAAAA,QAAQ,GAAGxgG,EAAX;EACAuhG,EAAAA,KAAK,CAACv5E,IAAD,CAAL;EACD;;EAED,SAASu5E,KAAT,CAAev5E,IAAf,EAAqB;EACnB,MAAIC,KAAJ,EAAW,OADQ;;EAEnB,MAAIm4E,OAAJ,EAAaA,OAAO,GAAGwB,YAAY,CAACxB,OAAD,CAAtB;EACb,MAAI9d,KAAK,GAAGt6D,IAAI,GAAG04E,QAAnB,CAHmB;;EAInB,MAAIpe,KAAK,GAAG,EAAZ,EAAgB;EACd,QAAIt6D,IAAI,GAAG58B,QAAX,EAAqBg1G,OAAO,GAAGhlB,UAAU,CAACqmB,IAAD,EAAOz5E,IAAI,GAAG44E,KAAK,CAACtjH,GAAN,EAAP,GAAqBqjH,SAA5B,CAApB;EACrB,QAAIN,QAAJ,EAAcA,QAAQ,GAAGwB,aAAa,CAACxB,QAAD,CAAxB;EACf,GAHD,MAGO;EACL,QAAI,CAACA,QAAL,EAAeI,SAAS,GAAGG,KAAK,CAACtjH,GAAN,EAAZ,EAAyB+iH,QAAQ,GAAGyB,WAAW,CAACH,IAAD,EAAOrB,SAAP,CAA/C;EACfr4E,IAAAA,KAAK,GAAG,CAAR,EAAW84E,QAAQ,CAACU,IAAD,CAAnB;EACD;EACF;;EC7GD;EACA,MAAMr+G,CAAC,GAAG,OAAV;EACA,MAAMiD,CAAC,GAAG,UAAV;EACA,MAAM9E,CAAC,GAAG,UAAV;;EAEe,gBAAW;EACxB,MAAI4B,CAAC,GAAG,CAAR;EACA,SAAO,MAAM,CAACA,CAAC,GAAG,CAACC,CAAC,GAAGD,CAAJ,GAAQkD,CAAT,IAAc9E,CAAnB,IAAwBA,CAArC;EACD;;ECJD,IAAIwgH,cAAc,GAAG,CAArB;EAEO,SAASvgH,CAAT,CAAW+H,CAAX,EAAc;EACnB,SAAOA,CAAC,CAAC/H,CAAT;EACD;EAEM,SAASC,CAAT,CAAW8H,CAAX,EAAc;EACnB,SAAOA,CAAC,CAAC9H,CAAT;EACD;EAEM,SAASoO,CAAT,CAAWtG,CAAX,EAAc;EACnB,SAAOA,CAAC,CAACsG,CAAT;EACD;EAED,IAAImyG,aAAa,GAAG,EAApB;EAAA,IACIC,gBAAgB,GAAG3hH,IAAI,CAACC,EAAL,IAAW,IAAID,IAAI,CAACsE,IAAL,CAAU,CAAV,CAAf,CADvB;EAAA;EAEIs9G,eAAe,GAAG5hH,IAAI,CAACC,EAAL,GAAU,EAAV,IAAgB,IAAID,IAAI,CAACsE,IAAL,CAAU,GAAV,CAApB,CAFtB;;EAIe,0BAAS41G,KAAT,EAAgB2H,aAAhB,EAA+B;EAC5CA,EAAAA,aAAa,GAAGA,aAAa,IAAI,CAAjC;EAEA,MAAIvD,IAAI,GAAGt+G,IAAI,CAACc,GAAL,CAAS2gH,cAAT,EAAyBzhH,IAAI,CAACe,GAAL,CAAS,CAAT,EAAYf,IAAI,CAACgE,KAAL,CAAW69G,aAAX,CAAZ,CAAzB,CAAX;EAAA,MACIC,UADJ;EAAA,MAEI58G,KAAK,GAAG,CAFZ;EAAA,MAGI68G,QAAQ,GAAG,KAHf;EAAA,MAIIC,UAAU,GAAG,IAAIhiH,IAAI,CAACqB,GAAL,CAAS0gH,QAAT,EAAmB,IAAI,GAAvB,CAJrB;EAAA,MAKIE,WAAW,GAAG,CALlB;EAAA,MAMIC,aAAa,GAAG,GANpB;EAAA,MAOIC,MAAM,GAAG,IAAI/5C,GAAJ,EAPb;EAAA,MAQIg6C,OAAO,GAAGrB,KAAK,CAACvrG,IAAD,CARnB;EAAA,MASIhW,KAAK,GAAG4/G,QAAQ,CAAC,MAAD,EAAS,KAAT,CATpB;EAAA,MAUI5+G,MAAM,GAAG6hH,GAAG,EAVhB;EAYA,MAAInI,KAAK,IAAI,IAAb,EAAmBA,KAAK,GAAG,EAAR;;EAEnB,WAAS1kG,IAAT,GAAgB;EACd8sG,IAAAA,IAAI;EACJ9iH,IAAAA,KAAK,CAACO,IAAN,CAAW,MAAX,EAAmB+hH,UAAnB;;EACA,QAAI58G,KAAK,GAAG68G,QAAZ,EAAsB;EACpBK,MAAAA,OAAO,CAACv6E,IAAR;EACAroC,MAAAA,KAAK,CAACO,IAAN,CAAW,KAAX,EAAkB+hH,UAAlB;EACD;EACF;;EAED,WAASQ,IAAT,CAAc/D,UAAd,EAA0B;EACxB,QAAI3+G,CAAJ;EAAA,QAAOoB,CAAC,GAAGk5G,KAAK,CAACp6G,MAAjB;EAAA,QAAyBsmG,IAAzB;EAEA,QAAImY,UAAU,KAAKz/G,SAAnB,EAA8By/G,UAAU,GAAG,CAAb;;EAE9B,SAAK,IAAIrmD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqmD,UAApB,EAAgC,EAAErmD,CAAlC,EAAqC;EACnChzD,MAAAA,KAAK,IAAI,CAAC+8G,WAAW,GAAG/8G,KAAf,IAAwB88G,UAAjC;EAEAG,MAAAA,MAAM,CAACj5C,OAAP,CAAe,UAAU5+C,KAAV,EAAiB;EAC9BA,QAAAA,KAAK,CAACplB,KAAD,CAAL;EACD,OAFD;;EAIA,WAAKtF,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoB,CAAhB,EAAmB,EAAEpB,CAArB,EAAwB;EACtBwmG,QAAAA,IAAI,GAAG8T,KAAK,CAACt6G,CAAD,CAAZ;EACA,YAAIwmG,IAAI,CAACmc,EAAL,IAAW,IAAf,EAAqBnc,IAAI,CAACllG,CAAL,IAAUklG,IAAI,CAACqY,EAAL,IAAWyD,aAArB,CAArB,KACK9b,IAAI,CAACllG,CAAL,GAASklG,IAAI,CAACmc,EAAd,EAAkBnc,IAAI,CAACqY,EAAL,GAAU,CAA5B;;EACL,YAAIH,IAAI,GAAG,CAAX,EAAc;EACZ,cAAIlY,IAAI,CAACoc,EAAL,IAAW,IAAf,EAAqBpc,IAAI,CAACjlG,CAAL,IAAUilG,IAAI,CAACuY,EAAL,IAAWuD,aAArB,CAArB,KACK9b,IAAI,CAACjlG,CAAL,GAASilG,IAAI,CAACoc,EAAd,EAAkBpc,IAAI,CAACuY,EAAL,GAAU,CAA5B;EACN;;EACD,YAAIL,IAAI,GAAG,CAAX,EAAc;EACZ,cAAIlY,IAAI,CAACqc,EAAL,IAAW,IAAf,EAAqBrc,IAAI,CAAC72F,CAAL,IAAU62F,IAAI,CAACwY,EAAL,IAAWsD,aAArB,CAArB,KACK9b,IAAI,CAAC72F,CAAL,GAAS62F,IAAI,CAACqc,EAAd,EAAkBrc,IAAI,CAACwY,EAAL,GAAU,CAA5B;EACN;EACF;EACF;;EAED,WAAOkD,UAAP;EACD;;EAED,WAASY,eAAT,GAA2B;EACzB,SAAK,IAAI9iH,CAAC,GAAG,CAAR,EAAWoB,CAAC,GAAGk5G,KAAK,CAACp6G,MAArB,EAA6BsmG,IAAlC,EAAwCxmG,CAAC,GAAGoB,CAA5C,EAA+C,EAAEpB,CAAjD,EAAoD;EAClDwmG,MAAAA,IAAI,GAAG8T,KAAK,CAACt6G,CAAD,CAAZ,EAAiBwmG,IAAI,CAAC/mG,KAAL,GAAaO,CAA9B;EACA,UAAIwmG,IAAI,CAACmc,EAAL,IAAW,IAAf,EAAqBnc,IAAI,CAACllG,CAAL,GAASklG,IAAI,CAACmc,EAAd;EACrB,UAAInc,IAAI,CAACoc,EAAL,IAAW,IAAf,EAAqBpc,IAAI,CAACjlG,CAAL,GAASilG,IAAI,CAACoc,EAAd;EACrB,UAAIpc,IAAI,CAACqc,EAAL,IAAW,IAAf,EAAqBrc,IAAI,CAAC72F,CAAL,GAAS62F,IAAI,CAACqc,EAAd;;EACrB,UAAI9nF,KAAK,CAACyrE,IAAI,CAACllG,CAAN,CAAL,IAAkBo9G,IAAI,GAAG,CAAP,IAAY3jF,KAAK,CAACyrE,IAAI,CAACjlG,CAAN,CAAnC,IAAiDm9G,IAAI,GAAG,CAAP,IAAY3jF,KAAK,CAACyrE,IAAI,CAAC72F,CAAN,CAAtE,EAAiF;EAC/E,YAAIgK,MAAM,GAAGmoG,aAAa,IAAIpD,IAAI,GAAG,CAAP,GAAWt+G,IAAI,CAAC2iH,IAAL,CAAU,MAAM/iH,CAAhB,CAAX,GAAiC0+G,IAAI,GAAG,CAAP,GAAWt+G,IAAI,CAACsE,IAAL,CAAU,MAAM1E,CAAhB,CAAX,GAAgCA,CAArE,CAA1B;EAAA,YACEgjH,SAAS,GAAGhjH,CAAC,GAAG+hH,gBADlB;EAAA,YAEEkB,QAAQ,GAAGjjH,CAAC,GAAGgiH,eAFjB;;EAIA,YAAItD,IAAI,KAAK,CAAb,EAAgB;EACdlY,UAAAA,IAAI,CAACllG,CAAL,GAASqY,MAAT;EACD,SAFD,MAEO,IAAI+kG,IAAI,KAAK,CAAb,EAAgB;EACrBlY,UAAAA,IAAI,CAACllG,CAAL,GAASqY,MAAM,GAAGvZ,IAAI,CAACgG,GAAL,CAAS48G,SAAT,CAAlB;EACAxc,UAAAA,IAAI,CAACjlG,CAAL,GAASoY,MAAM,GAAGvZ,IAAI,CAACiG,GAAL,CAAS28G,SAAT,CAAlB;EACD,SAHM,MAGA;EAAE;EACPxc,UAAAA,IAAI,CAACllG,CAAL,GAASqY,MAAM,GAAGvZ,IAAI,CAACiG,GAAL,CAAS28G,SAAT,CAAT,GAA+B5iH,IAAI,CAACgG,GAAL,CAAS68G,QAAT,CAAxC;EACAzc,UAAAA,IAAI,CAACjlG,CAAL,GAASoY,MAAM,GAAGvZ,IAAI,CAACgG,GAAL,CAAS48G,SAAT,CAAlB;EACAxc,UAAAA,IAAI,CAAC72F,CAAL,GAASgK,MAAM,GAAGvZ,IAAI,CAACiG,GAAL,CAAS28G,SAAT,CAAT,GAA+B5iH,IAAI,CAACiG,GAAL,CAAS48G,QAAT,CAAxC;EACD;EACF;;EACD,UAAIloF,KAAK,CAACyrE,IAAI,CAACqY,EAAN,CAAL,IAAmBH,IAAI,GAAG,CAAP,IAAY3jF,KAAK,CAACyrE,IAAI,CAACuY,EAAN,CAApC,IAAmDL,IAAI,GAAG,CAAP,IAAY3jF,KAAK,CAACyrE,IAAI,CAACwY,EAAN,CAAxE,EAAoF;EAClFxY,QAAAA,IAAI,CAACqY,EAAL,GAAU,CAAV;;EACA,YAAIH,IAAI,GAAG,CAAX,EAAc;EAAElY,UAAAA,IAAI,CAACuY,EAAL,GAAU,CAAV;EAAc;;EAC9B,YAAIL,IAAI,GAAG,CAAX,EAAc;EAAElY,UAAAA,IAAI,CAACwY,EAAL,GAAU,CAAV;EAAc;EAC/B;EACF;EACF;;EAED,WAASkE,eAAT,CAAyBx4F,KAAzB,EAAgC;EAC9B,QAAIA,KAAK,CAAC8vF,UAAV,EAAsB9vF,KAAK,CAAC8vF,UAAN,CAAiBF,KAAjB,EAAwB15G,MAAxB,EAAgC89G,IAAhC;EACtB,WAAOh0F,KAAP;EACD;;EAEDo4F,EAAAA,eAAe;EAEf,SAAOZ,UAAU,GAAG;EAClBQ,IAAAA,IAAI,EAAEA,IADY;EAGlBtB,IAAAA,OAAO,EAAE,YAAW;EAClB,aAAOoB,OAAO,CAACpB,OAAR,CAAgBxrG,IAAhB,GAAuBssG,UAA9B;EACD,KALiB;EAOlBj6E,IAAAA,IAAI,EAAE,YAAW;EACf,aAAOu6E,OAAO,CAACv6E,IAAR,IAAgBi6E,UAAvB;EACD,KATiB;EAWlBD,IAAAA,aAAa,EAAE,UAASxH,CAAT,EAAY;EACzB,aAAO/zG,SAAS,CAACxG,MAAV,IACAw+G,IAAI,GAAGt+G,IAAI,CAACc,GAAL,CAAS2gH,cAAT,EAAyBzhH,IAAI,CAACe,GAAL,CAAS,CAAT,EAAYf,IAAI,CAACgE,KAAL,CAAWq2G,CAAX,CAAZ,CAAzB,CAAP,EAA6D8H,MAAM,CAACj5C,OAAP,CAAe45C,eAAf,CAA7D,EAA8FhB,UAD9F,IAEDxD,IAFN;EAGD,KAfiB;EAiBlBpE,IAAAA,KAAK,EAAE,UAASG,CAAT,EAAY;EACjB,aAAO/zG,SAAS,CAACxG,MAAV,IAAoBo6G,KAAK,GAAGG,CAAR,EAAWqI,eAAe,EAA1B,EAA8BP,MAAM,CAACj5C,OAAP,CAAe45C,eAAf,CAA9B,EAA+DhB,UAAnF,IAAiG5H,KAAxG;EACD,KAnBiB;EAqBlBh1G,IAAAA,KAAK,EAAE,UAASm1G,CAAT,EAAY;EACjB,aAAO/zG,SAAS,CAACxG,MAAV,IAAoBoF,KAAK,GAAG,CAACm1G,CAAT,EAAYyH,UAAhC,IAA8C58G,KAArD;EACD,KAvBiB;EAyBlB68G,IAAAA,QAAQ,EAAE,UAAS1H,CAAT,EAAY;EACpB,aAAO/zG,SAAS,CAACxG,MAAV,IAAoBiiH,QAAQ,GAAG,CAAC1H,CAAZ,EAAeyH,UAAnC,IAAiDC,QAAxD;EACD,KA3BiB;EA6BlBC,IAAAA,UAAU,EAAE,UAAS3H,CAAT,EAAY;EACtB,aAAO/zG,SAAS,CAACxG,MAAV,IAAoBkiH,UAAU,GAAG,CAAC3H,CAAd,EAAiByH,UAArC,IAAmD,CAACE,UAA3D;EACD,KA/BiB;EAiClBC,IAAAA,WAAW,EAAE,UAAS5H,CAAT,EAAY;EACvB,aAAO/zG,SAAS,CAACxG,MAAV,IAAoBmiH,WAAW,GAAG,CAAC5H,CAAf,EAAkByH,UAAtC,IAAoDG,WAA3D;EACD,KAnCiB;EAqClBC,IAAAA,aAAa,EAAE,UAAS7H,CAAT,EAAY;EACzB,aAAO/zG,SAAS,CAACxG,MAAV,IAAoBoiH,aAAa,GAAG,IAAI7H,CAApB,EAAuByH,UAA3C,IAAyD,IAAII,aAApE;EACD,KAvCiB;EAyClBa,IAAAA,YAAY,EAAE,UAAS1I,CAAT,EAAY;EACxB,aAAO/zG,SAAS,CAACxG,MAAV,IAAoBU,MAAM,GAAG65G,CAAT,EAAY8H,MAAM,CAACj5C,OAAP,CAAe45C,eAAf,CAAZ,EAA6ChB,UAAjE,IAA+EthH,MAAtF;EACD,KA3CiB;EA6ClB8pB,IAAAA,KAAK,EAAE,UAAStf,IAAT,EAAeqvG,CAAf,EAAkB;EACvB,aAAO/zG,SAAS,CAACxG,MAAV,GAAmB,CAAnB,IAAyBu6G,CAAC,IAAI,IAAL,GAAY8H,MAAM,CAAC34E,MAAP,CAAcx+B,IAAd,CAAZ,GAAkCm3G,MAAM,CAACvgH,GAAP,CAAWoJ,IAAX,EAAiB83G,eAAe,CAACzI,CAAD,CAAhC,CAAnC,EAA0EyH,UAAlG,IAAgHK,MAAM,CAAC74E,GAAP,CAAWt+B,IAAX,CAAvH;EACD,KA/CiB;EAiDlB8lF,IAAAA,IAAI,EAAE,YAAW;EACf,UAAIkuB,IAAI,GAAGpwG,KAAK,CAACxI,SAAN,CAAgBzG,KAAhB,CAAsBI,IAAtB,CAA2BuG,SAA3B,CAAX;EACA,UAAIpF,CAAC,GAAG89G,IAAI,CAAC3sC,KAAL,MAAgB,CAAxB;EAAA,UACIlxE,CAAC,GAAG,CAACm9G,IAAI,GAAG,CAAP,GAAWU,IAAI,CAAC3sC,KAAL,EAAX,GAA0B,IAA3B,KAAoC,CAD5C;EAAA,UAEI9iE,CAAC,GAAG,CAAC+uG,IAAI,GAAG,CAAP,GAAWU,IAAI,CAAC3sC,KAAL,EAAX,GAA0B,IAA3B,KAAoC,CAF5C;EAAA,UAGI94D,MAAM,GAAGylG,IAAI,CAAC3sC,KAAL,MAAgBvnE,QAH7B;EAKA,UAAIlL,CAAC,GAAG,CAAR;EAAA,UACIoB,CAAC,GAAGk5G,KAAK,CAACp6G,MADd;EAAA,UAEIgF,EAFJ;EAAA,UAGIC,EAHJ;EAAA,UAIIqU,EAJJ;EAAA,UAKI1Y,EALJ;EAAA,UAMI0lG,IANJ;EAAA,UAOI4c,OAPJ;EASAzpG,MAAAA,MAAM,IAAIA,MAAV;;EAEA,WAAK3Z,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoB,CAAhB,EAAmB,EAAEpB,CAArB,EAAwB;EACtBwmG,QAAAA,IAAI,GAAG8T,KAAK,CAACt6G,CAAD,CAAZ;EACAkF,QAAAA,EAAE,GAAG5D,CAAC,GAAGklG,IAAI,CAACllG,CAAd;EACA6D,QAAAA,EAAE,GAAG5D,CAAC,IAAIilG,IAAI,CAACjlG,CAAL,IAAU,CAAd,CAAN;EACAiY,QAAAA,EAAE,GAAG7J,CAAC,IAAI62F,IAAI,CAAC72F,CAAL,IAAS,CAAb,CAAN;EACA7O,QAAAA,EAAE,GAAGoE,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAf,GAAoBqU,EAAE,GAAGA,EAA9B;EACA,YAAI1Y,EAAE,GAAG6Y,MAAT,EAAiBypG,OAAO,GAAG5c,IAAV,EAAgB7sF,MAAM,GAAG7Y,EAAzB;EAClB;;EAED,aAAOsiH,OAAP;EACD,KA7EiB;EA+ElBtD,IAAAA,EAAE,EAAE,UAAS10G,IAAT,EAAeqvG,CAAf,EAAkB;EACpB,aAAO/zG,SAAS,CAACxG,MAAV,GAAmB,CAAnB,IAAwBN,KAAK,CAACkgH,EAAN,CAAS10G,IAAT,EAAeqvG,CAAf,GAAmByH,UAA3C,IAAyDtiH,KAAK,CAACkgH,EAAN,CAAS10G,IAAT,CAAhE;EACD;EAjFiB,GAApB;EAmFD;;EC/Lc,0BAAW;EACxB,MAAIkvG,KAAJ;EAAA,MACIoE,IADJ;EAAA,MAEIlY,IAFJ;EAAA,MAGI5lG,MAHJ;EAAA,MAII0E,KAJJ;EAAA,MAKIi1G,QAAQ,GAAGv9F,QAAQ,CAAC,CAAC,EAAF,CALvB;EAAA,MAMIwhG,SANJ;EAAA,MAOI6E,YAAY,GAAG,CAPnB;EAAA,MAQIC,YAAY,GAAGp4G,QARnB;EAAA,MASIq4G,MAAM,GAAG,IATb;;EAWA,WAAS74F,KAAT,CAAe+vF,CAAf,EAAkB;EAChB,QAAIz6G,CAAJ;EAAA,QACIoB,CAAC,GAAGk5G,KAAK,CAACp6G,MADd;EAAA,QAEIy6G,IAAI,GACA,CAAC+D,IAAI,KAAK,CAAT,GAAajD,UAAU,CAACnB,KAAD,EAAQh5G,CAAR,CAAvB,GACCo9G,IAAI,KAAK,CAAT,GAAarB,QAAQ,CAAC/C,KAAD,EAAQh5G,CAAR,EAAWC,CAAX,CAArB,GACAm9G,IAAI,KAAK,CAAT,GAAaT,MAAM,CAAC3D,KAAD,EAAQh5G,CAAR,EAAWC,CAAX,EAAcoO,CAAd,CAAnB,GACD,IAHD,EAIA+sG,UAJA,CAIW3X,UAJX,CAHR;;EASA,SAAKz/F,KAAK,GAAGm1G,CAAR,EAAWz6G,CAAC,GAAG,CAApB,EAAuBA,CAAC,GAAGoB,CAA3B,EAA8B,EAAEpB,CAAhC,EAAmCwmG,IAAI,GAAG8T,KAAK,CAACt6G,CAAD,CAAZ,EAAiB26G,IAAI,CAACO,KAAL,CAAWh9C,KAAX,CAAjB;EACpC;;EAED,WAASs8C,UAAT,GAAsB;EACpB,QAAI,CAACF,KAAL,EAAY;EACZ,QAAIt6G,CAAJ;EAAA,QAAOoB,CAAC,GAAGk5G,KAAK,CAACp6G,MAAjB;EAAA,QAAyBsmG,IAAzB;EACAgY,IAAAA,SAAS,GAAG,IAAIxvG,KAAJ,CAAU5N,CAAV,CAAZ;;EACA,SAAKpB,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoB,CAAhB,EAAmB,EAAEpB,CAArB,EAAwBwmG,IAAI,GAAG8T,KAAK,CAACt6G,CAAD,CAAZ,EAAiBw+G,SAAS,CAAChY,IAAI,CAAC/mG,KAAN,CAAT,GAAwB,CAAC86G,QAAQ,CAAC/T,IAAD,EAAOxmG,CAAP,EAAUs6G,KAAV,CAAlD;EACzB;;EAED,WAASvV,UAAT,CAAoBye,QAApB,EAA8B;EAC5B,QAAIjJ,QAAQ,GAAG,CAAf;EAAA,QAAkBvqG,CAAlB;EAAA,QAAqB7J,CAArB;EAAA,QAAwB66C,MAAM,GAAG,CAAjC;EAAA,QAAoC1/C,CAApC;EAAA,QAAuCC,CAAvC;EAAA,QAA0CoO,CAA1C;EAAA,QAA6C3P,CAA7C;EACA,QAAIyjH,WAAW,GAAGD,QAAQ,CAACtjH,MAA3B,CAF4B;;EAK5B,QAAIujH,WAAJ,EAAiB;EACf,WAAKniH,CAAC,GAAGC,CAAC,GAAGoO,CAAC,GAAG3P,CAAC,GAAG,CAArB,EAAwBA,CAAC,GAAGyjH,WAA5B,EAAyC,EAAEzjH,CAA3C,EAA8C;EAC5C,YAAI,CAACgQ,CAAC,GAAGwzG,QAAQ,CAACxjH,CAAD,CAAb,MAAsBmG,CAAC,GAAG/F,IAAI,CAACwE,GAAL,CAASoL,CAAC,CAAC/O,KAAX,CAA1B,CAAJ,EAAkD;EAChDs5G,UAAAA,QAAQ,IAAIvqG,CAAC,CAAC/O,KAAd,EAAqB+/C,MAAM,IAAI76C,CAA/B,EAAkC7E,CAAC,IAAI6E,CAAC,IAAI6J,CAAC,CAAC1O,CAAF,IAAO,CAAX,CAAxC,EAAuDC,CAAC,IAAI4E,CAAC,IAAI6J,CAAC,CAACzO,CAAF,IAAO,CAAX,CAA7D,EAA4EoO,CAAC,IAAIxJ,CAAC,IAAI6J,CAAC,CAACL,CAAF,IAAO,CAAX,CAAlF;EACD;EACF;;EACD4qG,MAAAA,QAAQ,IAAIn6G,IAAI,CAACsE,IAAL,CAAU,IAAI++G,WAAd,CAAZ,CANe;;EAQfD,MAAAA,QAAQ,CAACliH,CAAT,GAAaA,CAAC,GAAG0/C,MAAjB;;EACA,UAAI09D,IAAI,GAAG,CAAX,EAAc;EAAE8E,QAAAA,QAAQ,CAACjiH,CAAT,GAAaA,CAAC,GAAGy/C,MAAjB;EAA0B;;EAC1C,UAAI09D,IAAI,GAAG,CAAX,EAAc;EAAE8E,QAAAA,QAAQ,CAAC7zG,CAAT,GAAaA,CAAC,GAAGqxC,MAAjB;EAA0B;EAC3C,KAXD;EAAA,SAcK;EACHhxC,QAAAA,CAAC,GAAGwzG,QAAJ;EACAxzG,QAAAA,CAAC,CAAC1O,CAAF,GAAM0O,CAAC,CAACN,IAAF,CAAOpO,CAAb;;EACA,YAAIo9G,IAAI,GAAG,CAAX,EAAc;EAAE1uG,UAAAA,CAAC,CAACzO,CAAF,GAAMyO,CAAC,CAACN,IAAF,CAAOnO,CAAb;EAAiB;;EACjC,YAAIm9G,IAAI,GAAG,CAAX,EAAc;EAAE1uG,UAAAA,CAAC,CAACL,CAAF,GAAMK,CAAC,CAACN,IAAF,CAAOC,CAAb;EAAiB;;EACjC,WAAG4qG,QAAQ,IAAIiE,SAAS,CAACxuG,CAAC,CAACN,IAAF,CAAOjQ,KAAR,CAArB,CAAH,QACOuQ,CAAC,GAAGA,CAAC,CAAC+3C,IADb;EAED;;EAEDy7D,IAAAA,QAAQ,CAACviH,KAAT,GAAiBs5G,QAAjB;EACD;;EAED,WAASr8C,KAAT,CAAeslD,QAAf,EAAyB/vG,EAAzB,EAA6BiwG,IAA7B,EAAmCC,IAAnC,EAAyCC,IAAzC,EAA+C;EAC7C,QAAI,CAACJ,QAAQ,CAACviH,KAAd,EAAqB,OAAO,IAAP;EACrB,QAAI6jB,EAAE,GAAG,CAAC4+F,IAAD,EAAOC,IAAP,EAAaC,IAAb,EAAmBlF,IAAI,GAAC,CAAxB,CAAT;EAEA,QAAIp9G,CAAC,GAAGkiH,QAAQ,CAACliH,CAAT,GAAaklG,IAAI,CAACllG,CAA1B;EAAA,QACIC,CAAC,GAAIm9G,IAAI,GAAG,CAAP,GAAW8E,QAAQ,CAACjiH,CAAT,GAAailG,IAAI,CAACjlG,CAA7B,GAAiC,CAD1C;EAAA,QAEIoO,CAAC,GAAI+uG,IAAI,GAAG,CAAP,GAAW8E,QAAQ,CAAC7zG,CAAT,GAAa62F,IAAI,CAAC72F,CAA7B,GAAiC,CAF1C;EAAA,QAGI/M,CAAC,GAAGkiB,EAAE,GAAGrR,EAHb;EAAA,QAIIxT,CAAC,GAAGqB,CAAC,GAAGA,CAAJ,GAAQC,CAAC,GAAGA,CAAZ,GAAgBoO,CAAC,GAAGA,CAJ5B,CAJ6C;EAW7C;;EACA,QAAI/M,CAAC,GAAGA,CAAJ,GAAQ2gH,MAAR,GAAiBtjH,CAArB,EAAwB;EACtB,UAAIA,CAAC,GAAGqjH,YAAR,EAAsB;EACpB,YAAIhiH,CAAC,KAAK,CAAV,EAAaA,CAAC,GAAGw9G,MAAM,CAACl+G,MAAD,CAAV,EAAoBX,CAAC,IAAIqB,CAAC,GAAGA,CAA7B;EACb,YAAIo9G,IAAI,GAAG,CAAP,IAAYn9G,CAAC,KAAK,CAAtB,EAAyBA,CAAC,GAAGu9G,MAAM,CAACl+G,MAAD,CAAV,EAAoBX,CAAC,IAAIsB,CAAC,GAAGA,CAA7B;EACzB,YAAIm9G,IAAI,GAAG,CAAP,IAAY/uG,CAAC,KAAK,CAAtB,EAAyBA,CAAC,GAAGmvG,MAAM,CAACl+G,MAAD,CAAV,EAAoBX,CAAC,IAAI0P,CAAC,GAAGA,CAA7B;EACzB,YAAI1P,CAAC,GAAGojH,YAAR,EAAsBpjH,CAAC,GAAGG,IAAI,CAACsE,IAAL,CAAU2+G,YAAY,GAAGpjH,CAAzB,CAAJ;EACtBumG,QAAAA,IAAI,CAACqY,EAAL,IAAWv9G,CAAC,GAAGkiH,QAAQ,CAACviH,KAAb,GAAqBqE,KAArB,GAA6BrF,CAAxC;;EACA,YAAIy+G,IAAI,GAAG,CAAX,EAAc;EAAElY,UAAAA,IAAI,CAACuY,EAAL,IAAWx9G,CAAC,GAAGiiH,QAAQ,CAACviH,KAAb,GAAqBqE,KAArB,GAA6BrF,CAAxC;EAA4C;;EAC5D,YAAIy+G,IAAI,GAAG,CAAX,EAAc;EAAElY,UAAAA,IAAI,CAACwY,EAAL,IAAWrvG,CAAC,GAAG6zG,QAAQ,CAACviH,KAAb,GAAqBqE,KAArB,GAA6BrF,CAAxC;EAA4C;EAC7D;;EACD,aAAO,IAAP;EACD,KAXD;EAAA,SAcK,IAAIujH,QAAQ,CAACtjH,MAAT,IAAmBD,CAAC,IAAIqjH,YAA5B,EAA0C,OA1BF;;;EA6B7C,QAAIE,QAAQ,CAAC9zG,IAAT,KAAkB82F,IAAlB,IAA0Bgd,QAAQ,CAACz7D,IAAvC,EAA6C;EAC3C,UAAIzmD,CAAC,KAAK,CAAV,EAAaA,CAAC,GAAGw9G,MAAM,CAACl+G,MAAD,CAAV,EAAoBX,CAAC,IAAIqB,CAAC,GAAGA,CAA7B;EACb,UAAIo9G,IAAI,GAAG,CAAP,IAAYn9G,CAAC,KAAK,CAAtB,EAAyBA,CAAC,GAAGu9G,MAAM,CAACl+G,MAAD,CAAV,EAAoBX,CAAC,IAAIsB,CAAC,GAAGA,CAA7B;EACzB,UAAIm9G,IAAI,GAAG,CAAP,IAAY/uG,CAAC,KAAK,CAAtB,EAAyBA,CAAC,GAAGmvG,MAAM,CAACl+G,MAAD,CAAV,EAAoBX,CAAC,IAAI0P,CAAC,GAAGA,CAA7B;EACzB,UAAI1P,CAAC,GAAGojH,YAAR,EAAsBpjH,CAAC,GAAGG,IAAI,CAACsE,IAAL,CAAU2+G,YAAY,GAAGpjH,CAAzB,CAAJ;EACvB;;EAED,OAAG,IAAIujH,QAAQ,CAAC9zG,IAAT,KAAkB82F,IAAtB,EAA4B;EAC7B5jG,MAAAA,CAAC,GAAG47G,SAAS,CAACgF,QAAQ,CAAC9zG,IAAT,CAAcjQ,KAAf,CAAT,GAAiC6F,KAAjC,GAAyCrF,CAA7C;EACAumG,MAAAA,IAAI,CAACqY,EAAL,IAAWv9G,CAAC,GAAGsB,CAAf;;EACA,UAAI87G,IAAI,GAAG,CAAX,EAAc;EAAElY,QAAAA,IAAI,CAACuY,EAAL,IAAWx9G,CAAC,GAAGqB,CAAf;EAAmB;;EACnC,UAAI87G,IAAI,GAAG,CAAX,EAAc;EAAElY,QAAAA,IAAI,CAACwY,EAAL,IAAWrvG,CAAC,GAAG/M,CAAf;EAAmB;EACpC,KALD,QAKS4gH,QAAQ,GAAGA,QAAQ,CAACz7D,IAL7B;EAMD;;EAEDr9B,EAAAA,KAAK,CAAC8vF,UAAN,GAAmB,UAAS2E,MAAT,EAAiB,GAAGC,IAApB,EAA0B;EAC3C9E,IAAAA,KAAK,GAAG6E,MAAR;EACAv+G,IAAAA,MAAM,GAAGw+G,IAAI,CAACluB,IAAL,CAAUmuB,GAAG,IAAI,OAAOA,GAAP,KAAe,UAAhC,KAA+Cj/G,IAAI,CAACQ,MAA7D;EACA89G,IAAAA,IAAI,GAAGU,IAAI,CAACluB,IAAL,CAAUmuB,GAAG,IAAI,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAUC,QAAV,CAAmBD,GAAnB,CAAjB,KAA6C,CAApD;EACA7E,IAAAA,UAAU;EACX,GALD;;EAOA9vF,EAAAA,KAAK,CAAC6vF,QAAN,GAAiB,UAASE,CAAT,EAAY;EAC3B,WAAO/zG,SAAS,CAACxG,MAAV,IAAoBq6G,QAAQ,GAAG,OAAOE,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8Bz9F,QAAQ,CAAC,CAACy9F,CAAF,CAAjD,EAAuDD,UAAU,EAAjE,EAAqE9vF,KAAzF,IAAkG6vF,QAAzG;EACD,GAFD;;EAIA7vF,EAAAA,KAAK,CAACm5F,WAAN,GAAoB,UAASpJ,CAAT,EAAY;EAC9B,WAAO/zG,SAAS,CAACxG,MAAV,IAAoBmjH,YAAY,GAAG5I,CAAC,GAAGA,CAAnB,EAAsB/vF,KAA1C,IAAmDtqB,IAAI,CAACsE,IAAL,CAAU2+G,YAAV,CAA1D;EACD,GAFD;;EAIA34F,EAAAA,KAAK,CAACo5F,WAAN,GAAoB,UAASrJ,CAAT,EAAY;EAC9B,WAAO/zG,SAAS,CAACxG,MAAV,IAAoBojH,YAAY,GAAG7I,CAAC,GAAGA,CAAnB,EAAsB/vF,KAA1C,IAAmDtqB,IAAI,CAACsE,IAAL,CAAU4+G,YAAV,CAA1D;EACD,GAFD;;EAIA54F,EAAAA,KAAK,CAAC5f,KAAN,GAAc,UAAS2vG,CAAT,EAAY;EACxB,WAAO/zG,SAAS,CAACxG,MAAV,IAAoBqjH,MAAM,GAAG9I,CAAC,GAAGA,CAAb,EAAgB/vF,KAApC,IAA6CtqB,IAAI,CAACsE,IAAL,CAAU6+G,MAAV,CAApD;EACD,GAFD;;EAIA,SAAO74F,KAAP;EACD;;ECxIc,sBAAS/Q,MAAT,EAAiBrY,CAAjB,EAAoBC,CAApB,EAAuBoO,CAAvB,EAA0B;EACvC,MAAI2qG,KAAJ;EAAA,MACIoE,IADJ;EAAA,MAEInE,QAAQ,GAAGv9F,QAAQ,CAAC,GAAD,CAFvB;EAAA,MAGIwhG,SAHJ;EAAA,MAIIuF,QAJJ;EAMA,MAAI,OAAOpqG,MAAP,KAAkB,UAAtB,EAAkCA,MAAM,GAAGqD,QAAQ,CAAC,CAACrD,MAAF,CAAjB;EAClC,MAAIrY,CAAC,IAAI,IAAT,EAAeA,CAAC,GAAG,CAAJ;EACf,MAAIC,CAAC,IAAI,IAAT,EAAeA,CAAC,GAAG,CAAJ;EACf,MAAIoO,CAAC,IAAI,IAAT,EAAeA,CAAC,GAAG,CAAJ;;EAEf,WAAS+a,KAAT,CAAeplB,KAAf,EAAsB;EACpB,SAAK,IAAItF,CAAC,GAAG,CAAR,EAAWoB,CAAC,GAAGk5G,KAAK,CAACp6G,MAA1B,EAAkCF,CAAC,GAAGoB,CAAtC,EAAyC,EAAEpB,CAA3C,EAA8C;EAC5C,UAAIwmG,IAAI,GAAG8T,KAAK,CAACt6G,CAAD,CAAhB;EAAA,UACIkF,EAAE,GAAGshG,IAAI,CAACllG,CAAL,GAASA,CAAT,IAAc,IADvB;EAAA,UAEI6D,EAAE,GAAG,CAACqhG,IAAI,CAACjlG,CAAL,IAAU,CAAX,IAAgBA,CAAhB,IAAqB,IAF9B;EAAA,UAGIiY,EAAE,GAAG,CAACgtF,IAAI,CAAC72F,CAAL,IAAU,CAAX,IAAgBA,CAAhB,IAAqB,IAH9B;EAAA,UAIIxF,CAAC,GAAG/J,IAAI,CAACsE,IAAL,CAAUQ,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAf,GAAoBqU,EAAE,GAAGA,EAAnC,CAJR;EAAA,UAKI8+C,CAAC,GAAG,CAACyrD,QAAQ,CAAC/jH,CAAD,CAAR,GAAcmK,CAAf,IAAoBq0G,SAAS,CAACx+G,CAAD,CAA7B,GAAmCsF,KAAnC,GAA2C6E,CALnD;EAMAq8F,MAAAA,IAAI,CAACqY,EAAL,IAAW35G,EAAE,GAAGozD,CAAhB;;EACA,UAAIomD,IAAI,GAAC,CAAT,EAAY;EAAElY,QAAAA,IAAI,CAACuY,EAAL,IAAW55G,EAAE,GAAGmzD,CAAhB;EAAoB;;EAClC,UAAIomD,IAAI,GAAC,CAAT,EAAY;EAAElY,QAAAA,IAAI,CAACwY,EAAL,IAAWxlG,EAAE,GAAG8+C,CAAhB;EAAoB;EACnC;EACF;;EAED,WAASkiD,UAAT,GAAsB;EACpB,QAAI,CAACF,KAAL,EAAY;EACZ,QAAIt6G,CAAJ;EAAA,QAAOoB,CAAC,GAAGk5G,KAAK,CAACp6G,MAAjB;EACAs+G,IAAAA,SAAS,GAAG,IAAIxvG,KAAJ,CAAU5N,CAAV,CAAZ;EACA2iH,IAAAA,QAAQ,GAAG,IAAI/0G,KAAJ,CAAU5N,CAAV,CAAX;;EACA,SAAKpB,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGoB,CAAhB,EAAmB,EAAEpB,CAArB,EAAwB;EACtB+jH,MAAAA,QAAQ,CAAC/jH,CAAD,CAAR,GAAc,CAAC2Z,MAAM,CAAC2gG,KAAK,CAACt6G,CAAD,CAAN,EAAWA,CAAX,EAAcs6G,KAAd,CAArB;EACAkE,MAAAA,SAAS,CAACx+G,CAAD,CAAT,GAAe+6B,KAAK,CAACgpF,QAAQ,CAAC/jH,CAAD,CAAT,CAAL,GAAqB,CAArB,GAAyB,CAACu6G,QAAQ,CAACD,KAAK,CAACt6G,CAAD,CAAN,EAAWA,CAAX,EAAcs6G,KAAd,CAAjD;EACD;EACF;;EAED5vF,EAAAA,KAAK,CAAC8vF,UAAN,GAAmB,UAASwJ,SAAT,EAAoB,GAAG5E,IAAvB,EAA6B;EAC9C9E,IAAAA,KAAK,GAAG0J,SAAR;EACAtF,IAAAA,IAAI,GAAGU,IAAI,CAACluB,IAAL,CAAUmuB,GAAG,IAAI,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAUC,QAAV,CAAmBD,GAAnB,CAAjB,KAA6C,CAApD;EACA7E,IAAAA,UAAU;EACX,GAJD;;EAMA9vF,EAAAA,KAAK,CAAC6vF,QAAN,GAAiB,UAASE,CAAT,EAAY;EAC3B,WAAO/zG,SAAS,CAACxG,MAAV,IAAoBq6G,QAAQ,GAAG,OAAOE,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8Bz9F,QAAQ,CAAC,CAACy9F,CAAF,CAAjD,EAAuDD,UAAU,EAAjE,EAAqE9vF,KAAzF,IAAkG6vF,QAAzG;EACD,GAFD;;EAIA7vF,EAAAA,KAAK,CAAC/Q,MAAN,GAAe,UAAS8gG,CAAT,EAAY;EACzB,WAAO/zG,SAAS,CAACxG,MAAV,IAAoByZ,MAAM,GAAG,OAAO8gG,CAAP,KAAa,UAAb,GAA0BA,CAA1B,GAA8Bz9F,QAAQ,CAAC,CAACy9F,CAAF,CAA/C,EAAqDD,UAAU,EAA/D,EAAmE9vF,KAAvF,IAAgG/Q,MAAvG;EACD,GAFD;;EAIA+Q,EAAAA,KAAK,CAACppB,CAAN,GAAU,UAASm5G,CAAT,EAAY;EACpB,WAAO/zG,SAAS,CAACxG,MAAV,IAAoBoB,CAAC,GAAG,CAACm5G,CAAL,EAAQ/vF,KAA5B,IAAqCppB,CAA5C;EACD,GAFD;;EAIAopB,EAAAA,KAAK,CAACnpB,CAAN,GAAU,UAASk5G,CAAT,EAAY;EACpB,WAAO/zG,SAAS,CAACxG,MAAV,IAAoBqB,CAAC,GAAG,CAACk5G,CAAL,EAAQ/vF,KAA5B,IAAqCnpB,CAA5C;EACD,GAFD;;EAIAmpB,EAAAA,KAAK,CAAC/a,CAAN,GAAU,UAAS8qG,CAAT,EAAY;EACpB,WAAO/zG,SAAS,CAACxG,MAAV,IAAoByP,CAAC,GAAG,CAAC8qG,CAAL,EAAQ/vF,KAA5B,IAAqC/a,CAA5C;EACD,GAFD;;EAIA,SAAO+a,KAAP;EACD;;MClEDu5F,aAAA,GAAiB,SAASC,QAAT,CAAkBC,OAAlB,EAA2B;EAC1CC,EAAAA,eAAe,CAACD,OAAD,CAAf;EAEA,MAAIE,aAAa,GAAGC,mBAAmB,CAACH,OAAD,CAAvC;EACAA,EAAAA,OAAO,CAACrE,EAAR,GAAauE,aAAa,CAACvE,EAA3B;EACAqE,EAAAA,OAAO,CAACI,GAAR,GAAcF,aAAa,CAACE,GAA5B;EACAJ,EAAAA,OAAO,CAACK,IAAR,GAAeH,aAAa,CAACG,IAA7B;EACA,SAAOL,OAAP;EACD,CARD;;EAUA,SAASG,mBAAT,CAA6BH,OAA7B,EAAsC;EACpC;EACA;EACA;EACA;EACA;EACA,MAAIM,gBAAgB,GAAGr3G,MAAM,CAACy5F,MAAP,CAAc,IAAd,CAAvB;EAEA,SAAO;EACLiZ,IAAAA,EAAE,EAAE,UAAU4E,SAAV,EAAqBttG,QAArB,EAA+ButG,GAA/B,EAAoC;EACtC,UAAI,OAAOvtG,QAAP,KAAoB,UAAxB,EAAoC;EAClC,cAAM,IAAI9U,KAAJ,CAAU,uCAAV,CAAN;EACD;;EACD,UAAIg3F,QAAQ,GAAGmrB,gBAAgB,CAACC,SAAD,CAA/B;;EACA,UAAI,CAACprB,QAAL,EAAe;EACbA,QAAAA,QAAQ,GAAGmrB,gBAAgB,CAACC,SAAD,CAAhB,GAA8B,EAAzC;EACD;;EACDprB,MAAAA,QAAQ,CAACj6F,IAAT,CAAc;EAAC+X,QAAAA,QAAQ,EAAEA,QAAX;EAAqButG,QAAAA,GAAG,EAAEA;EAA1B,OAAd;EAEA,aAAOR,OAAP;EACD,KAZI;EAcLI,IAAAA,GAAG,EAAE,UAAUG,SAAV,EAAqBttG,QAArB,EAA+B;EAClC,UAAIwtG,eAAe,GAAI,OAAOF,SAAP,KAAqB,WAA5C;;EACA,UAAIE,eAAJ,EAAqB;EACnB;EACAH,QAAAA,gBAAgB,GAAGr3G,MAAM,CAACy5F,MAAP,CAAc,IAAd,CAAnB;EACA,eAAOsd,OAAP;EACD;;EAED,UAAIM,gBAAgB,CAACC,SAAD,CAApB,EAAiC;EAC/B,YAAIG,0BAA0B,GAAI,OAAOztG,QAAP,KAAoB,UAAtD;;EACA,YAAIytG,0BAAJ,EAAgC;EAC9B,iBAAOJ,gBAAgB,CAACC,SAAD,CAAvB;EACD,SAFD,MAEO;EACL,cAAI/oB,SAAS,GAAG8oB,gBAAgB,CAACC,SAAD,CAAhC;;EACA,eAAK,IAAI1kH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG27F,SAAS,CAACz7F,MAA9B,EAAsC,EAAEF,CAAxC,EAA2C;EACzC,gBAAI27F,SAAS,CAAC37F,CAAD,CAAT,CAAaoX,QAAb,KAA0BA,QAA9B,EAAwC;EACtCukF,cAAAA,SAAS,CAACj8F,MAAV,CAAiBM,CAAjB,EAAoB,CAApB;EACD;EACF;EACF;EACF;;EAED,aAAOmkH,OAAP;EACD,KArCI;EAuCLK,IAAAA,IAAI,EAAE,UAAUE,SAAV,EAAqB;EACzB,UAAI/oB,SAAS,GAAG8oB,gBAAgB,CAACC,SAAD,CAAhC;;EACA,UAAI,CAAC/oB,SAAL,EAAgB;EACd,eAAOwoB,OAAP;EACD;;EAED,UAAIW,aAAJ;;EACA,UAAIp+G,SAAS,CAACxG,MAAV,GAAmB,CAAvB,EAA0B;EACxB4kH,QAAAA,aAAa,GAAG91G,KAAK,CAACxI,SAAN,CAAgB9G,MAAhB,CAAuBS,IAAvB,CAA4BuG,SAA5B,EAAuC,CAAvC,CAAhB;EACD;;EACD,WAAI,IAAI1G,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG27F,SAAS,CAACz7F,MAA7B,EAAqC,EAAEF,CAAvC,EAA0C;EACxC,YAAI+kH,YAAY,GAAGppB,SAAS,CAAC37F,CAAD,CAA5B;EACA+kH,QAAAA,YAAY,CAAC3tG,QAAb,CAAsB8mD,KAAtB,CAA4B6mD,YAAY,CAACJ,GAAzC,EAA8CG,aAA9C;EACD;;EAED,aAAOX,OAAP;EACD;EAvDI,GAAP;EAyDD;;EAED,SAASC,eAAT,CAAyBD,OAAzB,EAAkC;EAChC,MAAI,CAACA,OAAL,EAAc;EACZ,UAAM,IAAI7hH,KAAJ,CAAU,oDAAV,CAAN;EACD;;EACD,MAAI0iH,aAAa,GAAG,CAAC,IAAD,EAAO,MAAP,EAAe,KAAf,CAApB;;EACA,OAAK,IAAIhlH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGglH,aAAa,CAAC9kH,MAAlC,EAA0C,EAAEF,CAA5C,EAA+C;EAC7C,QAAImkH,OAAO,CAACtE,cAAR,CAAuBmF,aAAa,CAAChlH,CAAD,CAApC,CAAJ,EAA8C;EAC5C,YAAM,IAAIsC,KAAJ,CAAU,kEAAkE0iH,aAAa,CAAChlH,CAAD,CAA/E,GAAqF,GAA/F,CAAN;EACD;EACF;EACF;;;;;;ECnFD;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;MACAikH,YAAA,GAAiBgB,WAAjB;;EAEA,IAAIf,UAAQ,GAAGgB,aAAf;EAEA;EACA;EACA;;;EACA,SAASD,WAAT,CAAqB1zG,OAArB,EAA8B;EAC5B;EACA;EACA;EACA;EACA;EACAA,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;;EACA,MAAI,kBAAkBA,OAAtB,EAA+B;EAC7B1O,IAAAA,OAAO,CAACC,IAAR,CACE,6EACA,mCAFF,EAGE,IAHF,EAIE,6EACA,wEALF;EAQAyO,IAAAA,OAAO,CAAC4zG,UAAR,GAAqB5zG,OAAO,CAAC6zG,YAA7B;EACD,GAjB2B;EAoB5B;EACA;;;EACA,MAAI7zG,OAAO,CAAC4zG,UAAR,KAAuBjmH,SAA3B,EAAsCqS,OAAO,CAAC4zG,UAAR,GAAqB,KAArB;;EAEtC,MAAI,OAAO38C,GAAP,KAAe,UAAnB,EAA+B;EAC7B;EACA,UAAM,IAAIlmE,KAAJ,CAAU,mFAAV,CAAN;EACD;;EAED,MAAIg4G,KAAK,GAAG,IAAI9xC,GAAJ,EAAZ;EACA,MAAI81C,KAAK,GAAG,EAAZ;EAAA;EAEE+G,EAAAA,UAAU,GAAG,EAFf;EAAA,MAGEC,aAAa,GAAG,CAHlB;EAAA,MAKEC,UAAU,GAAGh0G,OAAO,CAAC4zG,UAAR,GAAqBK,gBAArB,GAAwCC,gBALvD;EAAA;EAQE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACAC,EAAAA,OAAO,GAAG,EAlBZ;EAAA,MAmBEC,gBAAgB,GAAGpG,IAnBrB;EAAA,MAoBEqG,gBAAgB,GAAGrG,IApBrB;EAAA,MAqBEsG,iBAAiB,GAAGtG,IArBtB;EAAA,MAsBEuG,gBAAgB,GAAGvG,IAtBrB,CA9B4B;;EAuD5B,MAAIwG,SAAS,GAAG;EACd;EACJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACIC,IAAAA,OAAO,EAAEA,OAXK;;EAad;EACJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACIC,IAAAA,OAAO,EAAEA,OAxBK;;EA0Bd;EACJ;EACA;EACA;EACA;EACA;EACA;EACIC,IAAAA,UAAU,EAAEA,UAjCE;;EAmCd;EACJ;EACA;EACA;EACA;EACA;EACA;EACA;EACI9wH,IAAAA,UAAU,EAAEA,UA3CE;;EA6Cd;EACJ;EACA;EACA;EACA;EACA;EACA;EACI+wH,IAAAA,OAAO,EAAEA,OApDK;;EAsDd;EACJ;EACA;EACA;EACA;EACIC,IAAAA,YAAY,EAAEA,YA3DA;;EA6Dd;EACJ;EACA;EACIC,IAAAA,YAAY,EAAEA,YAhEA;;EAkEd;EACJ;EACA;EACIC,IAAAA,aAAa,EAAED,YArED;;EAuEd;EACJ;EACA;EACIE,IAAAA,aAAa,EAAEH,YA1ED;;EA4Ed;EACJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACII,IAAAA,QAAQ,EAAEA,QArFI;;EAuFd;EACJ;EACA;EACA;EACA;EACA;EACIC,IAAAA,WAAW,EAAEA,WA7FC;;EA+Fd;EACJ;EACA;EACA;EACA;EACA;EACA;EACA;EACIC,IAAAA,iBAAiB,EAAEA,iBAvGL;;EAyGd;EACJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACIC,IAAAA,WAAW,EAAEA,WApHC;;EAsHd;EACJ;EACA;EACA;EACIC,IAAAA,WAAW,EAAEf,iBA1HC;;EA4Hd;EACJ;EACA;EACA;EACIgB,IAAAA,SAAS,EAAEf,gBAhIG;;EAkId;EACJ;EACA;EACIp8F,IAAAA,KAAK,EAAEA,KArIO;;EAuId;EACJ;EACA;EACA;EACA;EACA;EACA;EACIo9F,IAAAA,OAAO,EAAEC,OA9IK;;EAgJd;EACJ;EACA;EACA;EACA;EACA;EACA;EACA;EACIC,IAAAA,OAAO,EAAEb,OAxJK;;EA0Jd;EACJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACIY,IAAAA,OAAO,EAAEA;EAnKK,GAAhB,CAvD4B;;EA8N5B7C,EAAAA,UAAQ,CAAC6B,SAAD,CAAR;EAEAkB,EAAAA,kBAAkB;EAElB,SAAOlB,SAAP;;EAEA,WAASkB,kBAAT,GAA8B;EAC5B,QAAIC,MAAM,GAAGnB,SAAS,CAACjG,EAAvB,CAD4B;EAI5B;;EACAiG,IAAAA,SAAS,CAACjG,EAAV,GAAeA,EAAf;;EAEA,aAASA,EAAT,GAAc;EACZ;EACAiG,MAAAA,SAAS,CAACa,WAAV,GAAwBf,iBAAiB,GAAGsB,qBAA5C;EACApB,MAAAA,SAAS,CAACc,SAAV,GAAsBf,gBAAgB,GAAGsB,oBAAzC;EACAzB,MAAAA,gBAAgB,GAAG0B,oBAAnB;EACAzB,MAAAA,gBAAgB,GAAG0B,oBAAnB,CALY;;EAQZvB,MAAAA,SAAS,CAACjG,EAAV,GAAeoH,MAAf,CARY;;EAUZ,aAAOA,MAAM,CAAChpD,KAAP,CAAa6nD,SAAb,EAAwBr/G,SAAxB,CAAP;EACD;EACF;;EAED,WAAS2gH,oBAAT,CAA8BzI,IAA9B,EAAoC2I,UAApC,EAAgD;EAC9C7B,IAAAA,OAAO,CAACrmH,IAAR,CAAa;EACXu/G,MAAAA,IAAI,EAAEA,IADK;EAEX2I,MAAAA,UAAU,EAAEA;EAFD,KAAb;EAID;;EAED,WAASD,oBAAT,CAA8B9gB,IAA9B,EAAoC+gB,UAApC,EAAgD;EAC9C7B,IAAAA,OAAO,CAACrmH,IAAR,CAAa;EACXmnG,MAAAA,IAAI,EAAEA,IADK;EAEX+gB,MAAAA,UAAU,EAAEA;EAFD,KAAb;EAID;;EAED,WAASvB,OAAT,CAAiB3H,MAAjB,EAAyB3uG,IAAzB,EAA+B;EAC7B,QAAI2uG,MAAM,KAAKn/G,SAAf,EAA0B;EACxB,YAAM,IAAIoD,KAAJ,CAAU,yBAAV,CAAN;EACD;;EAEDujH,IAAAA,iBAAiB;EAEjB,QAAIrf,IAAI,GAAG2f,OAAO,CAAC9H,MAAD,CAAlB;;EACA,QAAI,CAAC7X,IAAL,EAAW;EACTA,MAAAA,IAAI,GAAG,IAAI5vG,IAAJ,CAASynH,MAAT,EAAiB3uG,IAAjB,CAAP;EACAk2G,MAAAA,gBAAgB,CAACpf,IAAD,EAAO,KAAP,CAAhB;EACD,KAHD,MAGO;EACLA,MAAAA,IAAI,CAAC92F,IAAL,GAAYA,IAAZ;EACAk2G,MAAAA,gBAAgB,CAACpf,IAAD,EAAO,QAAP,CAAhB;EACD;;EAED8T,IAAAA,KAAK,CAACt4G,GAAN,CAAUq8G,MAAV,EAAkB7X,IAAlB;EAEAsf,IAAAA,gBAAgB;EAChB,WAAOtf,IAAP;EACD;;EAED,WAAS2f,OAAT,CAAiB9H,MAAjB,EAAyB;EACvB,WAAO/D,KAAK,CAAC5wE,GAAN,CAAU20E,MAAV,CAAP;EACD;;EAED,WAASjpH,UAAT,CAAoBipH,MAApB,EAA4B;EAC1B,QAAI7X,IAAI,GAAG2f,OAAO,CAAC9H,MAAD,CAAlB;;EACA,QAAI,CAAC7X,IAAL,EAAW;EACT,aAAO,KAAP;EACD;;EAEDqf,IAAAA,iBAAiB;EAEjB,QAAI2B,SAAS,GAAGhhB,IAAI,CAAC8X,KAArB;;EACA,QAAIkJ,SAAJ,EAAe;EACbhhB,MAAAA,IAAI,CAAC8X,KAAL,GAAa,IAAb;;EACA,WAAI,IAAIt+G,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGwnH,SAAS,CAACtnH,MAA7B,EAAqC,EAAEF,CAAvC,EAA0C;EACxCkmH,QAAAA,UAAU,CAACsB,SAAS,CAACxnH,CAAD,CAAV,CAAV;EACD;EACF;;EAEDs6G,IAAAA,KAAK,CAAC1wE,MAAN,CAAay0E,MAAb;EAEAuH,IAAAA,gBAAgB,CAACpf,IAAD,EAAO,QAAP,CAAhB;EAEAsf,IAAAA,gBAAgB;EAEhB,WAAO,IAAP;EACD;;EAGD,WAASG,OAAT,CAAiBwB,MAAjB,EAAyBC,IAAzB,EAA+Bh4G,IAA/B,EAAqC;EACnCm2G,IAAAA,iBAAiB;EAEjB,QAAI8B,QAAQ,GAAGxB,OAAO,CAACsB,MAAD,CAAP,IAAmBzB,OAAO,CAACyB,MAAD,CAAzC;EACA,QAAIG,MAAM,GAAGzB,OAAO,CAACuB,IAAD,CAAP,IAAiB1B,OAAO,CAAC0B,IAAD,CAArC;EAEA,QAAI9I,IAAI,GAAG2G,UAAU,CAACkC,MAAD,EAASC,IAAT,EAAeh4G,IAAf,CAArB;EAEA4uG,IAAAA,KAAK,CAACj/G,IAAN,CAAWu/G,IAAX,EARmC;;EAWnCiJ,IAAAA,aAAa,CAACF,QAAD,EAAW/I,IAAX,CAAb;;EACA,QAAI6I,MAAM,KAAKC,IAAf,EAAqB;EACnB;EACAG,MAAAA,aAAa,CAACD,MAAD,EAAShJ,IAAT,CAAb;EACD;;EAED+G,IAAAA,gBAAgB,CAAC/G,IAAD,EAAO,KAAP,CAAhB;EAEAkH,IAAAA,gBAAgB;EAEhB,WAAOlH,IAAP;EACD;;EAED,WAAS6G,gBAAT,CAA0BgC,MAA1B,EAAkCC,IAAlC,EAAwCh4G,IAAxC,EAA8C;EAC5C,QAAIo4G,MAAM,GAAGC,UAAU,CAACN,MAAD,EAASC,IAAT,CAAvB;EACA,WAAO,IAAIM,IAAJ,CAASP,MAAT,EAAiBC,IAAjB,EAAuBh4G,IAAvB,EAA6Bo4G,MAA7B,CAAP;EACD;;EAED,WAAStC,gBAAT,CAA0BiC,MAA1B,EAAkCC,IAAlC,EAAwCh4G,IAAxC,EAA8C;EAC5C;EACA,QAAIo4G,MAAM,GAAGC,UAAU,CAACN,MAAD,EAASC,IAAT,CAAvB;EACA,QAAIO,WAAW,GAAG5C,UAAU,CAACxF,cAAX,CAA0BiI,MAA1B,CAAlB;;EACA,QAAIG,WAAW,IAAIlB,OAAO,CAACU,MAAD,EAASC,IAAT,CAA1B,EAA0C;EACxC,UAAI,CAACO,WAAL,EAAkB;EAChB5C,QAAAA,UAAU,CAACyC,MAAD,CAAV,GAAqB,CAArB;EACD;;EACD,UAAII,MAAM,GAAG,MAAO,EAAE7C,UAAU,CAACyC,MAAD,CAAhC;EACAA,MAAAA,MAAM,GAAGC,UAAU,CAACN,MAAM,GAAGS,MAAV,EAAkBR,IAAI,GAAGQ,MAAzB,CAAnB;EACD;;EAED,WAAO,IAAIF,IAAJ,CAASP,MAAT,EAAiBC,IAAjB,EAAuBh4G,IAAvB,EAA6Bo4G,MAA7B,CAAP;EACD;;EAED,WAAS1B,YAAT,GAAwB;EACtB,WAAO9L,KAAK,CAACl/F,IAAb;EACD;;EAED,WAASirG,YAAT,GAAwB;EACtB,WAAO/H,KAAK,CAACp+G,MAAb;EACD;;EAED,WAASsmH,QAAT,CAAkBnI,MAAlB,EAA0B;EACxB,QAAI7X,IAAI,GAAG2f,OAAO,CAAC9H,MAAD,CAAlB;EACA,WAAO7X,IAAI,GAAGA,IAAI,CAAC8X,KAAR,GAAgB,IAA3B;EACD;;EAED,WAAS4H,UAAT,CAAoBtH,IAApB,EAA0B;EACxB,QAAI,CAACA,IAAL,EAAW;EACT,aAAO,KAAP;EACD;;EACD,QAAIuJ,GAAG,GAAGC,qBAAqB,CAACxJ,IAAD,EAAON,KAAP,CAA/B;;EACA,QAAI6J,GAAG,GAAG,CAAV,EAAa;EACX,aAAO,KAAP;EACD;;EAEDtC,IAAAA,iBAAiB;EAEjBvH,IAAAA,KAAK,CAAC5+G,MAAN,CAAayoH,GAAb,EAAkB,CAAlB;EAEA,QAAIR,QAAQ,GAAGxB,OAAO,CAACvH,IAAI,CAAC6I,MAAN,CAAtB;EACA,QAAIG,MAAM,GAAGzB,OAAO,CAACvH,IAAI,CAAC8I,IAAN,CAApB;;EAEA,QAAIC,QAAJ,EAAc;EACZQ,MAAAA,GAAG,GAAGC,qBAAqB,CAACxJ,IAAD,EAAO+I,QAAQ,CAACrJ,KAAhB,CAA3B;;EACA,UAAI6J,GAAG,IAAI,CAAX,EAAc;EACZR,QAAAA,QAAQ,CAACrJ,KAAT,CAAe5+G,MAAf,CAAsByoH,GAAtB,EAA2B,CAA3B;EACD;EACF;;EAED,QAAIP,MAAJ,EAAY;EACVO,MAAAA,GAAG,GAAGC,qBAAqB,CAACxJ,IAAD,EAAOgJ,MAAM,CAACtJ,KAAd,CAA3B;;EACA,UAAI6J,GAAG,IAAI,CAAX,EAAc;EACZP,QAAAA,MAAM,CAACtJ,KAAP,CAAa5+G,MAAb,CAAoByoH,GAApB,EAAyB,CAAzB;EACD;EACF;;EAEDxC,IAAAA,gBAAgB,CAAC/G,IAAD,EAAO,QAAP,CAAhB;EAEAkH,IAAAA,gBAAgB;EAEhB,WAAO,IAAP;EACD;;EAED,WAASiB,OAAT,CAAiBsB,UAAjB,EAA6BC,QAA7B,EAAuC;EACrC;EACA,QAAI9hB,IAAI,GAAG2f,OAAO,CAACkC,UAAD,CAAlB;EAAA,QACEroH,CADF;;EAEA,QAAI,CAACwmG,IAAD,IAAS,CAACA,IAAI,CAAC8X,KAAnB,EAA0B;EACxB,aAAO,IAAP;EACD;;EAED,SAAKt+G,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGwmG,IAAI,CAAC8X,KAAL,CAAWp+G,MAA3B,EAAmC,EAAEF,CAArC,EAAwC;EACtC,UAAI4+G,IAAI,GAAGpY,IAAI,CAAC8X,KAAL,CAAWt+G,CAAX,CAAX;;EACA,UAAI4+G,IAAI,CAAC6I,MAAL,KAAgBY,UAAhB,IAA8BzJ,IAAI,CAAC8I,IAAL,KAAcY,QAAhD,EAA0D;EACxD,eAAO1J,IAAP;EACD;EACF;;EAED,WAAO,IAAP,CAfqC;EAgBtC;;EAED,WAASl1F,KAAT,GAAiB;EACfm8F,IAAAA,iBAAiB;EACjBY,IAAAA,WAAW,CAAC,UAASjgB,IAAT,EAAe;EACzBpxG,MAAAA,UAAU,CAACoxG,IAAI,CAAC38E,EAAN,CAAV;EACD,KAFU,CAAX;EAGAi8F,IAAAA,gBAAgB;EACjB;;EAED,WAASa,WAAT,CAAqBvvG,QAArB,EAA+B;EAC7B,QAAIpX,CAAJ,EAAOE,MAAP;;EACA,QAAI,OAAOkX,QAAP,KAAoB,UAAxB,EAAoC;EAClC,WAAKpX,CAAC,GAAG,CAAJ,EAAOE,MAAM,GAAGo+G,KAAK,CAACp+G,MAA3B,EAAmCF,CAAC,GAAGE,MAAvC,EAA+C,EAAEF,CAAjD,EAAoD;EAClDoX,QAAAA,QAAQ,CAACknG,KAAK,CAACt+G,CAAD,CAAN,CAAR;EACD;EACF;EACF;;EAED,WAAS0mH,iBAAT,CAA2BrI,MAA3B,EAAmCjnG,QAAnC,EAA6CmxG,QAA7C,EAAuD;EACrD,QAAI/hB,IAAI,GAAG2f,OAAO,CAAC9H,MAAD,CAAlB;;EAEA,QAAI7X,IAAI,IAAIA,IAAI,CAAC8X,KAAb,IAAsB,OAAOlnG,QAAP,KAAoB,UAA9C,EAA0D;EACxD,UAAImxG,QAAJ,EAAc;EACZ,eAAOC,mBAAmB,CAAChiB,IAAI,CAAC8X,KAAN,EAAaD,MAAb,EAAqBjnG,QAArB,CAA1B;EACD,OAFD,MAEO;EACL,eAAOqxG,sBAAsB,CAACjiB,IAAI,CAAC8X,KAAN,EAAaD,MAAb,EAAqBjnG,QAArB,CAA7B;EACD;EACF;EACF;;EAED,WAASqxG,sBAAT,CAAgCnK,KAAhC,EAAuCD,MAAvC,EAA+CjnG,QAA/C,EAAyD;EACvD,QAAIsxG,QAAJ;;EACA,SAAK,IAAI1oH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGs+G,KAAK,CAACp+G,MAA1B,EAAkC,EAAEF,CAApC,EAAuC;EACrC,UAAI4+G,IAAI,GAAGN,KAAK,CAACt+G,CAAD,CAAhB;EACA,UAAI2oH,YAAY,GAAG/J,IAAI,CAAC6I,MAAL,KAAgBpJ,MAAhB,GAAyBO,IAAI,CAAC8I,IAA9B,GAAqC9I,IAAI,CAAC6I,MAA7D;EAEAiB,MAAAA,QAAQ,GAAGtxG,QAAQ,CAACkjG,KAAK,CAAC5wE,GAAN,CAAUi/E,YAAV,CAAD,EAA0B/J,IAA1B,CAAnB;;EACA,UAAI8J,QAAJ,EAAc;EACZ,eAAO,IAAP,CADY;EAEb;EACF;EACF;;EAED,WAASF,mBAAT,CAA6BlK,KAA7B,EAAoCD,MAApC,EAA4CjnG,QAA5C,EAAsD;EACpD,QAAIsxG,QAAJ;;EACA,SAAK,IAAI1oH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGs+G,KAAK,CAACp+G,MAA1B,EAAkC,EAAEF,CAApC,EAAuC;EACrC,UAAI4+G,IAAI,GAAGN,KAAK,CAACt+G,CAAD,CAAhB;;EACA,UAAI4+G,IAAI,CAAC6I,MAAL,KAAgBpJ,MAApB,EAA4B;EAC1BqK,QAAAA,QAAQ,GAAGtxG,QAAQ,CAACkjG,KAAK,CAAC5wE,GAAN,CAAUk1E,IAAI,CAAC8I,IAAf,CAAD,EAAuB9I,IAAvB,CAAnB;;EACA,YAAI8J,QAAJ,EAAc;EACZ,iBAAO,IAAP,CADY;EAEb;EACF;EACF;EACF,GAhe2B;EAme5B;;;EACA,WAASnJ,IAAT,GAAgB,EApeY;;;EAue5B,WAAS4H,qBAAT,GAAiC;EAC/B7B,IAAAA,aAAa,IAAI,CAAjB;EACD;;EAED,WAAS8B,oBAAT,GAAgC;EAC9B9B,IAAAA,aAAa,IAAI,CAAjB;;EACA,QAAIA,aAAa,KAAK,CAAlB,IAAuBI,OAAO,CAACxlH,MAAR,GAAiB,CAA5C,EAA+C;EAC7C6lH,MAAAA,SAAS,CAACvB,IAAV,CAAe,SAAf,EAA0BkB,OAA1B;EACAA,MAAAA,OAAO,CAACxlH,MAAR,GAAiB,CAAjB;EACD;EACF;;EAED,WAASumH,WAAT,CAAqBrvG,QAArB,EAA+B;EAC7B,QAAI,OAAOA,QAAP,KAAoB,UAAxB,EAAoC;EAClC,YAAM,IAAI9U,KAAJ,CAAU,kEAAkE8U,QAA5E,CAAN;EACD;;EAED,QAAIwxG,cAAc,GAAGtO,KAAK,CAAC7tF,MAAN,EAArB;EACA,QAAIo8F,SAAS,GAAGD,cAAc,CAAC7gE,IAAf,EAAhB;;EACA,WAAO,CAAC8gE,SAAS,CAACvsB,IAAlB,EAAwB;EACtB,UAAIllF,QAAQ,CAACyxG,SAAS,CAAC5nH,KAAX,CAAZ,EAA+B;EAC7B,eAAO,IAAP,CAD6B;EAE9B;;EACD4nH,MAAAA,SAAS,GAAGD,cAAc,CAAC7gE,IAAf,EAAZ;EACD;EACF;EACF;;;EAGD,SAASqgE,qBAAT,CAA+B98F,OAA/B,EAAwCxrB,KAAxC,EAA+C;EAC7C,MAAI,CAACA,KAAL,EAAY,OAAO,CAAC,CAAR;;EAEZ,MAAIA,KAAK,CAACV,OAAV,EAAmB;EACjB,WAAOU,KAAK,CAACV,OAAN,CAAcksB,OAAd,CAAP;EACD;;EAED,MAAIrX,GAAG,GAAGnU,KAAK,CAACI,MAAhB;EAAA,MACEF,CADF;;EAGA,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGiU,GAAhB,EAAqBjU,CAAC,IAAI,CAA1B,EAA6B;EAC3B,QAAIF,KAAK,CAACE,CAAD,CAAL,KAAasrB,OAAjB,EAA0B;EACxB,aAAOtrB,CAAP;EACD;EACF;;EAED,SAAO,CAAC,CAAR;EACD;EAED;EACA;EACA;;;EACA,SAASpJ,IAAT,CAAcizB,EAAd,EAAkBna,IAAlB,EAAwB;EACtB,OAAKma,EAAL,GAAUA,EAAV;EACA,OAAKy0F,KAAL,GAAa,IAAb;EACA,OAAK5uG,IAAL,GAAYA,IAAZ;EACD;;EAED,SAASm4G,aAAT,CAAuBrhB,IAAvB,EAA6BoY,IAA7B,EAAmC;EACjC,MAAIpY,IAAI,CAAC8X,KAAT,EAAgB;EACd9X,IAAAA,IAAI,CAAC8X,KAAL,CAAWj/G,IAAX,CAAgBu/G,IAAhB;EACD,GAFD,MAEO;EACLpY,IAAAA,IAAI,CAAC8X,KAAL,GAAa,CAACM,IAAD,CAAb;EACD;EACF;EAED;EACA;EACA;;;EACA,SAASoJ,IAAT,CAAcP,MAAd,EAAsBC,IAAtB,EAA4Bh4G,IAA5B,EAAkCma,EAAlC,EAAsC;EACpC,OAAK49F,MAAL,GAAcA,MAAd;EACA,OAAKC,IAAL,GAAYA,IAAZ;EACA,OAAKh4G,IAAL,GAAYA,IAAZ;EACA,OAAKma,EAAL,GAAUA,EAAV;EACD;;EAED,SAASk+F,UAAT,CAAoBN,MAApB,EAA4BC,IAA5B,EAAkC;EAChC,SAAOD,MAAM,CAACnnH,QAAP,KAAoB,KAApB,GAA4BonH,IAAI,CAACpnH,QAAL,EAAnC;EACD;;;;;;MC1kBD2jH,iBAAA,GAAiB,SAAS6E,eAAT,CAAyBrpH,KAAzB,EAAgC;EAC/C,MAAIA,KAAK,KAAK,CAAd,EAAiB,OAAO,GAAP;EACjB,MAAIA,KAAK,KAAK,CAAd,EAAiB,OAAO,GAAP;EACjB,MAAIA,KAAK,KAAK,CAAd,EAAiB,OAAO,GAAP;EACjB,SAAO,OAAOA,KAAK,GAAG,CAAf,CAAP;EACD,CALD;;ECAA,MAAMqpH,iBAAe,GAAG5D,iBAAxB;;MAEAjB,sBAAA,GAAiB,SAAS8E,oBAAT,CAA8BC,SAA9B,EAAyC;EAExD,SAAOrxB,OAAP;;EAEA,WAASA,OAAT,CAAiBsxB,QAAjB,EAA2BC,MAA3B,EAAmC;EACjC,QAAIC,MAAM,GAAID,MAAM,IAAIA,MAAM,CAACC,MAAlB,IAA6B,CAA1C;EACA,QAAIzgE,IAAI,GAAIwgE,MAAM,IAAIA,MAAM,CAACxgE,IAAP,KAAgBxpD,SAA3B,GAAwCgqH,MAAM,CAACxgE,IAA/C,GAAsD,IAAjE;EACA,QAAI0gE,YAAY,GAAGp6G,KAAK,CAACm6G,MAAM,GAAG,CAAV,CAAL,CAAkBzgE,IAAlB,CAAuB,GAAvB,CAAnB;EACA,QAAI9f,MAAM,GAAG,EAAb;;EACA,SAAK,IAAI5oC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgpH,SAApB,EAA+B,EAAEhpH,CAAjC,EAAoC;EAClC,UAAIqpH,YAAY,GAAGP,iBAAe,CAAC9oH,CAAD,CAAlC;EACA,UAAI2uD,MAAM,GAAI3uD,CAAC,KAAK,CAAP,GAAY,EAAZ,GAAiBopH,YAA9B;EACAxgF,MAAAA,MAAM,CAACvpC,IAAP,CAAYsvD,MAAM,GAAGs6D,QAAQ,CAACh/D,OAAT,CAAiB,QAAjB,EAA2Bo/D,YAA3B,CAArB;EACD;;EACD,WAAOzgF,MAAM,CAAC8f,IAAP,CAAYA,IAAZ,CAAP;EACD;EACF,CAhBD;;ECDA,MAAMqgE,sBAAoB,GAAG7D,sBAA7B;;AAEAjB,4BAAA,GAAiBqF,4BAAjB;2DACA,GAAgDC;;0CAGhD,GAA+BC;;wCAE/B,GAA6BC;;EAG7B,SAASH,4BAAT,CAAoCN,SAApC,EAA+CU,YAA/C,EAA6D;EAC3D,MAAIC,IAAI,GAAGJ,8BAA8B,CAACP,SAAD,EAAYU,YAAZ,CAAzC;EACA,MAAI;EAACE,IAAAA;EAAD,MAAU,IAAIC,QAAJ,CAAaF,IAAb,CAAD,EAAb;EACA,SAAOC,IAAP;EACD;;EAED,SAASL,8BAAT,CAAwCP,SAAxC,EAAmDU,YAAnD,EAAiE;EAC/D,MAAIC,IAAI,GAAI;AACd,EAAEH,aAAa,CAACR,SAAD,EAAYU,YAAZ,CAA0B;AACzC,EAAED,WAAW,CAACT,SAAD,CAA0B;AACvC;AACA,CAJE;EAKA,SAAOW,IAAP;EACD;;EAED,SAASF,WAAT,CAAqBT,SAArB,EAAgC;EAC9B,MAAIrxB,OAAO,GAAGoxB,sBAAoB,CAACC,SAAD,CAAlC;EACA,MAAIc,YAAY,GAAGnyB,OAAO,CAAC,OAAD,EAAU;EAACjvC,IAAAA,IAAI,EAAE;EAAP,GAAV,CAA1B;EACA,SAAQ;AACV,gBAAgBohE,YAAa;AAC7B;AACA,0BAA0BA,YAAa;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyCA,YAAa;AACtD,IAAInyB,OAAO,CAAC,8BAAD,EAAiC;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAjC,CAA8C;AACzD,GApBE;EAqBD;;EAED,SAASK,aAAT,CAAuBR,SAAvB,EAAkCU,YAAlC,EAAgD;EAC9C,MAAI/xB,OAAO,GAAGoxB,sBAAoB,CAACC,SAAD,CAAlC;EACA,MAAIe,OAAO,GAAG,EAAd;;EACA,MAAIL,YAAJ,EAAkB;EAChBK,IAAAA,OAAO,GAAI,GAAEpyB,OAAO,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IARwB,CAQlB,EARF;EASD;;EAED,MAAImyB,YAAY,GAAGnyB,OAAO,CAAC,OAAD,EAAU;EAACjvC,IAAAA,IAAI,EAAE;EAAP,GAAV,CAA1B;EACA,SAAQ,mBAAkBohE,YAAa;AACzC,IAAIC,OAAQ;AACZ;AACA;AACA;AACA,QAAQpyB,OAAO,CAAC,wHAAD,EAA2H;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA3H,CAAwI;AACvJ,QAAQxxB,OAAO,CAAC,uBAAD,EAA0B;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA1B,CAAuC;AACtD;AACA,QAAQxxB,OAAO,CAAC,qDAAD,EAAwD;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAxD,CAAqE;AACpF;AACA;AACA;AACA;AACA,MAAMxxB,OAAO,CAAC,eAAD,EAAkB;AAACjvC,IAAAA,IAAI,EAAE;AAAP,GAAlB,CAA8B;AAC3C,KAdE;EAeD;;;;ECpFD,MAAMqgE,sBAAoB,GAAG7D,sBAA7B;;EACA,MAAM4D,eAAe,GAAG5D,iBAAxB;;AAEAjB,0BAAA,GAAiB+F,0BAAjB;uDACA,GAA8CC;EAG9C;;6CACA,GAAoCC;;0CAEpC,GAAiCC;;yCAEjC,GAAgCC;;2CAEhC,GAAkCC;;2CAElC,GAAkCC;;EAElC,SAASN,0BAAT,CAAkChB,SAAlC,EAA6C;EAC3C,MAAIW,IAAI,GAAGM,4BAA4B,CAACjB,SAAD,CAAvC;EACA,SAAQ,IAAIa,QAAJ,CAAaF,IAAb,CAAD,EAAP;EACD;;EAED,SAASM,4BAAT,CAAsCjB,SAAtC,EAAiD;EAC/C,MAAIrxB,OAAO,GAAGoxB,sBAAoB,CAACC,SAAD,CAAlC;EACA,MAAIuB,SAAS,GAAGnqH,IAAI,CAACqB,GAAL,CAAS,CAAT,EAAYunH,SAAZ,CAAhB;EAEA,MAAIW,IAAI,GAAI;AACd,EAAEO,kBAAkB,EAAG;AACvB,EAAEC,eAAe,CAACnB,SAAD,CAAY;AAC7B,EAAEoB,cAAc,CAACpB,SAAD,CAAY;AAC5B,EAAEqB,gBAAgB,CAACrB,SAAD,CAAY;AAC9B,EAAEsB,gBAAgB,CAACtB,SAAD,CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAEwB,WAAW,CAAC,aAAD,CAAgB;AAC7B;AACA,oBAAoB7yB,OAAO,CAAC,oBAAD,EAAuB;AAACjvC,IAAAA,IAAI,EAAE;AAAP,GAAvB,CAAmC;AAC9D,QAAQivC,OAAO,CAAC,oCAAD,EAAuC;AAACjvC,IAAAA,IAAI,EAAE;AAAP,GAAvC,CAAmD;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMivC,OAAO,CAAC,aAAD,EAAgB;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAhB,CAA6B;AAC1C;AACA,MAAMxxB,OAAO,CAAC,iBAAD,EAAoB;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAApB,CAAiC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAUxxB,OAAO,CAAC,iDAAD,EAAoD;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAApD,CAAiE;AAClF,wBAAwBxxB,OAAO,CAAC,iBAAD,EAAoB;AAACjvC,IAAAA,IAAI,EAAE;AAAP,GAApB,CAAmC;AAClE;AACA;AACA;AACA,YAAYivC,OAAO,CAAC,4CAAD,EAA+C;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA/C,CAA6D;AAChF,0BAA0BxxB,OAAO,CAAC,iBAAD,EAAoB;AAACjvC,IAAAA,IAAI,EAAE;AAAP,GAApB,CAAmC;AACpE;AACA;AACA;AACA;AACA;AACA,UAAUivC,OAAO,CAAC,uBAAD,EAA0B;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA1B,CAAuC;AACxD;AACA;AACA;AACA;AACA,UAAUxxB,OAAO,CAAC,8DAAD,EAAiE;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAjE,CAA8E;AAC/F,wBAAwBxxB,OAAO,CAAC,iBAAD,EAAoB;AAACjvC,IAAAA,IAAI,EAAE;AAAP,GAApB,CAAmC;AAClE;AACA;AACA;AACA;AACA,YAAYivC,OAAO,CAAC,4CAAD,EAA+C;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA/C,CAA6D;AAChF,0BAA0BxxB,OAAO,CAAC,iBAAD,EAAoB;AAACjvC,IAAAA,IAAI,EAAE;AAAP,GAApB,CAAmC;AACpE;AACA;AACA;AACA,wBAAwBogE,eAAe,CAAC,CAAD,CAAI,eAAcA,eAAe,CAAC,CAAD,CAAI;AAC5E;AACA;AACA;AACA;AACA,YAAYnxB,OAAO,CAAC,uBAAD,EAA0B;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA1B,CAAwC;AAC3D;AACA;AACA;AACA;AACA,EAAEsB,sBAAsB,EAAG;AAC3B;AACA;AACA;AACA;AACA,MAAM9yB,OAAO,CAAC,mCAAD,EAAsC;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAtC,CAAmD;AAChE;AACA;AACA;AACA,MAAMxxB,OAAO,CAAC,kCAAD,EAAqC;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAArC,CAAkD;AAC/D,MAAMxxB,OAAO,CAAC,kCAAD,EAAqC;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAArC,CAAkD;AAC/D;AACA;AACA;AACA;AACA;AACA,QAAQxxB,OAAO,CAAC,iDAAD,EAAoD;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAApD,CAAiE;AAChF,QAAQxxB,OAAO,CAAC,iDAAD,EAAoD;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAApD,CAAiE;AAChF;AACA;AACA;AACA;AACA,MAAMxxB,OAAO,CAAC,gFAAD,EAAmF;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAnF,CAAgG;AAC7G;AACA;AACA;AACA,MAAMxxB,OAAO,CAAC,4BAAD,EAA+B;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA/B,CAA4C;AACzD,MAAMxxB,OAAO,CAAC,4CAAD,EAA+C;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA/C,CAA4D;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAUxxB,OAAO,CAAC,6BAAD,EAAgC;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAhC,CAA6C;AAC9D;AACA,UAAUxxB,OAAO,CAAC,uCAAD,EAA0C;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA1C,CAAuD;AACxE;AACA;AACA;AACA;AACA,UAAUxxB,OAAO,CAAC,iCAAD,EAAoC;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAApC,CAAiD;AAClE,UAAUxxB,OAAO,CAAC,mDAAD,EAAsD;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAtD,CAAmE;AACpF;AACA,EAAEuB,wBAAwB,CAAC,CAAD,CAAI;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY/yB,OAAO,CAAC,8BAAD,EAAiC;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAjC,CAA+C;AAClE,YAAYxxB,OAAO,CAAC,8BAAD,EAAiC;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAjC,CAA+C;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAcxxB,OAAO,CAAC,0DAAD,EAA6D;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA7D,CAA2E;AAChG;AACA,cAAcxxB,OAAO,CAAC,8CAAD,EAAiD;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAjD,CAA+D;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAnPE;EAoPA,SAAOQ,IAAP;;EAGA,WAASe,wBAAT,CAAkCC,WAAlC,EAA+C;EAC7C,QAAIC,aAAa,GAAG,EAApB;EACA,QAAIzB,MAAM,GAAGn6G,KAAK,CAAC27G,WAAW,GAAG,CAAf,CAAL,CAAuBjiE,IAAvB,CAA4B,GAA5B,CAAb;;EACA,SAAK,IAAI1oD,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgpH,SAApB,EAA+B,EAAEhpH,CAAjC,EAAoC;EAClC4qH,MAAAA,aAAa,CAACvrH,IAAd,CAAmB8pH,MAAM,GAAI,OAAML,eAAe,CAAC9oH,CAAD,CAAI,UAAS8oH,eAAe,CAAC9oH,CAAD,CAAI,KAAlF;EACA4qH,MAAAA,aAAa,CAACvrH,IAAd,CAAmB8pH,MAAM,GAAI,yBAAwB/oH,IAAI,CAACqB,GAAL,CAAS,CAAT,EAAYzB,CAAZ,CAAe,GAApE;EACA4qH,MAAAA,aAAa,CAACvrH,IAAd,CAAmB8pH,MAAM,GAAI,SAAQL,eAAe,CAAC9oH,CAAD,CAAI,UAAS8oH,eAAe,CAAC9oH,CAAD,CAAI,GAApF;EACA4qH,MAAAA,aAAa,CAACvrH,IAAd,CAAmB8pH,MAAM,GAAI,SAAQL,eAAe,CAAC9oH,CAAD,CAAI,eAAc8oH,eAAe,CAAC9oH,CAAD,CAAI,GAAzF;EACA4qH,MAAAA,aAAa,CAACvrH,IAAd,CAAmB8pH,MAAM,GAAI,GAA7B;EACD;;EACD,WAAOyB,aAAa,CAACliE,IAAd,CAAmB,IAAnB,CAAP,CAV6C;EAY7C;EACA;EACA;EACA;EACD;;EAED,WAAS+hE,sBAAT,GAAkC;EAChC,QAAItB,MAAM,GAAGn6G,KAAK,CAAC,EAAD,CAAL,CAAU05C,IAAV,CAAe,GAAf,CAAb;EACA,QAAImiE,aAAa,GAAG,EAApB;;EACA,SAAK,IAAI7qH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuqH,SAApB,EAA+B,EAAEvqH,CAAjC,EAAoC;EAClC6qH,MAAAA,aAAa,CAACxrH,IAAd,CAAmB8pH,MAAM,GAAI,gBAAenpH,CAAE,KAA9C;EACA6qH,MAAAA,aAAa,CAACxrH,IAAd,CAAmB8pH,MAAM,GAAI,+BAA8BnpH,CAAE,GAA7D;EACA6qH,MAAAA,aAAa,CAACxrH,IAAd,CAAmB8pH,MAAM,GAAI,qBAA7B;EACA0B,MAAAA,aAAa,CAACxrH,IAAd,CAAmB8pH,MAAM,GAAI,iBAA7B;EACA0B,MAAAA,aAAa,CAACxrH,IAAd,CAAmB8pH,MAAM,GAAI,GAA7B;EACD;;EACD,WAAO0B,aAAa,CAACniE,IAAd,CAAmB,IAAnB,CAAP,CAVgC;EAYhC;EACA;EACA;EACA;EACD;;EAED,WAAS8hE,WAAT,CAAqBrB,MAArB,EAA6B;EAC3B;EACA;EACA;EACA;EACA,QAAIjM,KAAK,GAAG,EAAZ;;EACA,SAAK,IAAIl9G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuqH,SAApB,EAA+B,EAAEvqH,CAAjC,EAAoC;EAClCk9G,MAAAA,KAAK,CAAC79G,IAAN,CAAY,GAAE8pH,MAAO,OAAMnpH,CAAE,UAA7B;EACD;;EACD,WAAOk9G,KAAK,CAACx0D,IAAN,CAAW,IAAX,CAAP;EACD;EACF;;EAED,SAAS0hE,cAAT,CAAwBpB,SAAxB,EAAmC;EACjC,MAAIrxB,OAAO,GAAGoxB,sBAAoB,CAACC,SAAD,CAAlC;EACA,SAAQ;AACV;AACA,MAAMrxB,OAAO,CAAC,qDAAD,EAAwD;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAxD,CAAqE;AAClF;AACA,aAAaxxB,OAAO,CAAC,eAAD,EAAkB;AAACjvC,IAAAA,IAAI,EAAE;AAAP,GAAlB,CAAkC;AACtD;AACA,CANE;EAOD;;EAED,SAAS4hE,gBAAT,CAA0BtB,SAA1B,EAAqC;EACnC,MAAIuB,SAAS,GAAGnqH,IAAI,CAACqB,GAAL,CAAS,CAAT,EAAYunH,SAAZ,CAAhB;EACA,SAAQ;AACV;AACA,IAAI8B,YAAY,EAAG;AACnB,EAHE;;EAIA,WAASA,YAAT,GAAwB;EACtB,QAAIC,SAAS,GAAG,EAAhB;;EACA,SAAK,IAAI/qH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuqH,SAApB,EAA+B,EAAEvqH,CAAjC,EAAoC;EAClC,UAAI2uD,MAAM,GAAI3uD,CAAC,KAAK,CAAP,GAAY,IAAZ,GAAmB,SAAhC;EACA+qH,MAAAA,SAAS,CAAC1rH,IAAV,CAAgB,GAAEsvD,MAAO,eAAc3uD,CAAE,cAAaA,CAAE,WAAxD;EACD;;EAED,WAAO+qH,SAAS,CAACriE,IAAV,CAAe,IAAf,CAAP,CAPsB;EAStB;EACA;EACA;EACD;EACF;;EAED,SAAS2hE,gBAAT,CAA0BrB,SAA1B,EAAqC;EACnC,SAAQ;AACV,EAAEgC,YAAY,EAAG;AACjB;AACA,EAHE;;EAKA,WAASA,YAAT,GAAwB;EACtB,QAAID,SAAS,GAAG,EAAhB;EACA,QAAIR,SAAS,GAAGnqH,IAAI,CAACqB,GAAL,CAAS,CAAT,EAAYunH,SAAZ,CAAhB;;EACA,SAAK,IAAIhpH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuqH,SAApB,EAA+B,EAAEvqH,CAAjC,EAAoC;EAClC+qH,MAAAA,SAAS,CAAC1rH,IAAV,CAAgB,iBAAgBW,CAAE,qBAAoBA,CAAE,GAAxD;EACD;;EAED,WAAO+qH,SAAS,CAACriE,IAAV,CAAe,IAAf,CAAP,CAPsB;EAStB;EACA;EACA;EACD;EACF;;EAED,SAASyhE,eAAT,CAAyBnB,SAAzB,EAAoC;EAClC,MAAIrxB,OAAO,GAAGoxB,sBAAoB,CAACC,SAAD,CAAlC;EACA,MAAIuB,SAAS,GAAGnqH,IAAI,CAACqB,GAAL,CAAS,CAAT,EAAYunH,SAAZ,CAAhB;EACA,MAAIiC,YAAY,GAAI;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAET,WAAW,CAAC,SAAD,CAAY;AACzB;AACA;AACA;AACA;AACA;AACA,IAAI7yB,OAAO,CAAC,sBAAD,EAAyB;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAzB,CAAsC;AACjD;AACA;AACA,IAAIxxB,OAAO,CAAC,qBAAD,EAAwB;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAxB,CAAqC;AAChD,IAAIxxB,OAAO,CAAC,qBAAD,EAAwB;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAxB,CAAqC;AAChD;AACA,CAtBE;EAuBA,SAAO8B,YAAP;;EAEA,WAAST,WAAT,CAAqBrB,MAArB,EAA6B;EAC3B;EACA;EACA;EACA;EACA,QAAIjM,KAAK,GAAG,EAAZ;;EACA,SAAK,IAAIl9G,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuqH,SAApB,EAA+B,EAAEvqH,CAAjC,EAAoC;EAClCk9G,MAAAA,KAAK,CAAC79G,IAAN,CAAY,GAAE8pH,MAAO,OAAMnpH,CAAE,UAA7B;EACD;;EACD,WAAOk9G,KAAK,CAACx0D,IAAN,CAAW,IAAX,CAAP;EACD;EACF;;EAED,SAASwhE,kBAAT,GAA8B;EAC5B,SAAQ;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAzCE;EA0CD;;;;AC3cDjG,wBAAA,GAAiBiH,wBAAjB;6CACA,GAAsCC;;EAEtC,MAAMpC,sBAAoB,GAAG7D,sBAA7B;;EAEA,SAASgG,wBAAT,CAAgClC,SAAhC,EAA2C;EACzC,MAAIW,IAAI,GAAGwB,0BAA0B,CAACnC,SAAD,CAArC;EACA,SAAO,IAAIa,QAAJ,CAAa,QAAb,EAAuB,UAAvB,EAAmC,QAAnC,EAA6CF,IAA7C,CAAP;EACD;;EAED,SAASwB,0BAAT,CAAoCnC,SAApC,EAA+C;EAC7C,MAAIrxB,OAAO,GAAGoxB,sBAAoB,CAACC,SAAD,CAAlC;EAEA,MAAIW,IAAI,GAAI;AACd;AACA,MAAMhyB,OAAO,CAAC,6BAAD,EAAgC;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAhC,CAA6C;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAYxxB,OAAO,CAAC,gBAAD,EAAmB;AAACjvC,IAAAA,IAAI,EAAE;AAAP,GAAnB,CAAiC;AACpD;AACA;AACA;AACA;AACA,YAAYivC,OAAO,CAAC,kCAAD,EAAqC;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAArC,CAAmD;AACtE;AACA;AACA,UAAUxxB,OAAO,CAAC,iCAAD,EAAoC;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAApC,CAAiD;AAClE;AACA,UAAUxxB,OAAO,CAAC,mEAAD,EAAsE;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAtE,CAAmF;AACpG;AACA;AACA;AACA;AACA,UAAUxxB,OAAO,CAAC,iEAAD,EAAoE;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAApE,CAAiF;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMxxB,OAAO,CAAC,4BAAD,EAA+B;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA/B,CAA4C;AACzD,MAAMxxB,OAAO,CAAC,2BAAD,EAA8B;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA9B,CAA2C;AACxD;AACA;AACA;AACA;AACA,QAAQxxB,OAAO,CAAC,2DAAD,EAA8D;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA9D,CAA2E;AAC1F,QAAQxxB,OAAO,CAAC,2DAAD,EAA8D;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA9D,CAA2E;AAC1F;AACA;AACA,MAAMxxB,OAAO,CAAC,oCAAD,EAAuC;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAvC,CAAoD;AACjE,MAAMxxB,OAAO,CAAC,oCAAD,EAAuC;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAvC,CAAoD;AACjE;AACA;AACA;AACA,MAAMxxB,OAAO,CAAC,oDAAD,EAAuD;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAvD,CAAoE;AACjF;AACA,CAtDE;EAuDA,SAAOQ,IAAP;EACD;;;;ECtED,MAAMZ,sBAAoB,GAAG7D,sBAA7B;;AAEAjB,iCAAA,GAAiBmH,iCAAjB;qEACA,GAAqDC;;EAErD,SAASD,iCAAT,CAAyCpC,SAAzC,EAAoD;EAClD,MAAIW,IAAI,GAAG0B,mCAAmC,CAACrC,SAAD,CAA9C;EACA,SAAO,IAAIa,QAAJ,CAAa,SAAb,EAAwBF,IAAxB,CAAP;EACD;;EAED,SAAS0B,mCAAT,CAA6CrC,SAA7C,EAAwD;EACtD,MAAIrxB,OAAO,GAAGoxB,sBAAoB,CAACC,SAAD,CAAlC;EACA,MAAIW,IAAI,GAAI;AACd;AACA;AACA;AACA;AACA,QAAQhyB,OAAO,CAAC,oEAAD,EAAuE;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAvE,CAAoF;AACnG;AACA;AACA,CARE;EASA,SAAOQ,IAAP;EACD;;;;ECtBD,MAAMZ,sBAAoB,GAAG7D,sBAA7B;;AAEAjB,mCAAA,GAAiBqH,mCAAjB;yEACA,GAAuDC;;EAEvD,SAASD,mCAAT,CAA2CtC,SAA3C,EAAsD;EACpD,MAAIW,IAAI,GAAG4B,qCAAqC,CAACvC,SAAD,CAAhD;EACA,SAAO,IAAIa,QAAJ,CAAa,SAAb,EAAwB,QAAxB,EAAkCF,IAAlC,CAAP;EACD;;EAED,SAAS4B,qCAAT,CAA+CvC,SAA/C,EAA0D;EACxD,MAAIrxB,OAAO,GAAGoxB,sBAAoB,CAACC,SAAD,CAAlC;EACA,MAAIW,IAAI,GAAI;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQhyB,OAAO,CAAC,iDAAD,EAAoD;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAApD,CAAiE;AAChF,0BAA0BxxB,OAAO,CAAC,iBAAD,EAAoB;AAACjvC,IAAAA,IAAI,EAAE;AAAP,GAApB,CAAmC;AACpE;AACA;AACA,UAAUivC,OAAO,CAAC,4CAAD,EAA+C;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA/C,CAA4D;AAC7E,wBAAwBxxB,OAAO,CAAC,iBAAD,EAAoB;AAACjvC,IAAAA,IAAI,EAAE;AAAP,GAApB,CAAmC;AAClE;AACA;AACA;AACA;AACA;AACA,QAAQivC,OAAO,CAAC,2CAAD,EAA8C;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA9C,CAA2D;AAC1E;AACA;AACA;AACA,QAAQxxB,OAAO,CAAC,2CAAD,EAA8C;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA9C,CAA2D;AAC1E;AACA;AACA;AACA;AACA,CAhCE;EAiCA,SAAOQ,IAAP;EACD;;;;EC9CD,MAAMZ,oBAAoB,GAAG7D,sBAA7B;;AAEAjB,4BAAA,GAAiBuH,4BAAjB;2DACA,GAAgDC;;EAEhD,SAASD,4BAAT,CAAoCxC,SAApC,EAA+C;EAC7C,MAAIW,IAAI,GAAG8B,8BAA8B,CAACzC,SAAD,CAAzC;EACA,SAAO,IAAIa,QAAJ,CAAa,QAAb,EAAuB,UAAvB,EAAmC,wBAAnC,EAA6DF,IAA7D,CAAP;EACD;;EAED,SAAS8B,8BAAT,CAAwCzC,SAAxC,EAAmD;EACjD,MAAIrxB,OAAO,GAAGoxB,oBAAoB,CAACC,SAAD,CAAlC;EACA,MAAIW,IAAI,GAAI;AACd;AACA;AACA;AACA,IAAIhyB,OAAO,CAAC,6BAAD,EAAgC;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAhC,CAA6C;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMxxB,OAAO,CAAC,kDAAD,EAAqD;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAArD,CAAkE;AAC/E,MAAMxxB,OAAO,CAAC,mCAAD,EAAsC;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAtC,CAAmD;AAChE,wBAAwBxxB,OAAO,CAAC,iBAAD,EAAoB;AAACjvC,IAAAA,IAAI,EAAE;AAAP,GAApB,CAAmC;AAClE;AACA;AACA;AACA;AACA,QAAQivC,OAAO,CAAC,mCAAD,EAAsC;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAtC,CAAmD;AAClE;AACA;AACA,MAAMxxB,OAAO,CAAC,0CAAD,EAA6C;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA7C,CAA0D;AACvE;AACA,MAAMxxB,OAAO,CAAC,2BAAD,EAA8B;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAA9B,CAA2C;AACxD;AACA,MAAMxxB,OAAO,CAAC,6BAAD,EAAgC;AAACwxB,IAAAA,MAAM,EAAE;AAAT,GAAhC,CAA6C;AAC1D;AACA;AACA,YAAYxxB,OAAO,CAAC,iBAAD,EAAoB;AAACjvC,IAAAA,IAAI,EAAE;AAAP,GAApB,CAAmC;AACtD,CAlCE;EAmCA,SAAOihE,IAAP;EACD;;MChDD1F,MAAA,GAAiByH,MAAjB;EAEA;EACA;EACA;EACA;;EACA,SAASA,MAAT,CAAgBC,QAAhB,EAA0BC,MAA1B,EAAkC1rH,MAAlC,EAA0C2rH,iBAA1C,EAA6D;EACzD,OAAKl9B,IAAL,GAAYg9B,QAAZ;EACA,OAAK/8B,EAAL,GAAUg9B,MAAV;EACA,OAAK1rH,MAAL,GAAcA,MAAd;EACA,OAAK4rH,WAAL,GAAmBD,iBAAnB;EACH;;MCXD5H,YAAA,GAAiB7mF,KAAjB;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;EACA,SAASA,KAAT,CAAev9B,MAAf,EAAuB0R,OAAvB,EAAgC;EAC9B,MAAImb,GAAJ;;EACA,MAAI,CAAC7sB,MAAL,EAAa;EAAEA,IAAAA,MAAM,GAAG,EAAT;EAAc;;EAC7B,MAAI0R,OAAJ,EAAa;EACX,SAAKmb,GAAL,IAAYnb,OAAZ,EAAqB;EACnB,UAAIA,OAAO,CAACsuG,cAAR,CAAuBnzF,GAAvB,CAAJ,EAAiC;EAC/B,YAAIq/F,WAAW,GAAGlsH,MAAM,CAACggH,cAAP,CAAsBnzF,GAAtB,CAAlB;EAAA,YACIs/F,gBAAgB,GAAG,OAAOz6G,OAAO,CAACmb,GAAD,CADrC;EAAA,YAEIu/F,aAAa,GAAG,CAACF,WAAD,IAAiB,OAAOlsH,MAAM,CAAC6sB,GAAD,CAAb,KAAuBs/F,gBAF5D;;EAIA,YAAIC,aAAJ,EAAmB;EACjBpsH,UAAAA,MAAM,CAAC6sB,GAAD,CAAN,GAAcnb,OAAO,CAACmb,GAAD,CAArB;EACD,SAFD,MAEO,IAAIs/F,gBAAgB,KAAK,QAAzB,EAAmC;EACxC;EACAnsH,UAAAA,MAAM,CAAC6sB,GAAD,CAAN,GAAc0Q,KAAK,CAACv9B,MAAM,CAAC6sB,GAAD,CAAP,EAAcnb,OAAO,CAACmb,GAAD,CAArB,CAAnB;EACD;EACF;EACF;EACF;;EAED,SAAO7sB,MAAP;EACD;;;;AC9BDokH,uBAAA,GAAiBrjH,MAAjB;;8BAGA,GAAwBA,MAAxB,sCACA,GAAgCsrH,cADhC;EAGA;EACA;EACA;EACA;;EACA,SAAStrH,MAAT,CAAgBurH,SAAhB,EAA2B;EACzB,MAAI3gH,IAAI,GAAG,OAAO2gH,SAAP,KAAqB,QAArB,GAAgCA,SAAhC,GAA6C,CAAC,IAAIvL,IAAJ,EAAzD;EACA,SAAO,IAAIwL,SAAJ,CAAc5gH,IAAd,CAAP;EACD;;EAED,SAAS4gH,SAAT,CAAmB5gH,IAAnB,EAAyB;EACvB,OAAKA,IAAL,GAAYA,IAAZ;EACD;EAED;EACA;EACA;EACA;EACA;;;EACA4gH,SAAS,CAAC5lH,SAAV,CAAoBuhD,IAApB,GAA2BA,IAA3B;EAEA;EACA;EACA;EACA;;EACAqkE,SAAS,CAAC5lH,SAAV,CAAoB6lH,UAApB,GAAiCA,UAAjC;EAEA;EACA;EACA;;EACAD,SAAS,CAAC5lH,SAAV,CAAoBu7B,OAApB,GAA8BsqF,UAA9B;EAEA;EACA;EACA;EACA;;EACAD,SAAS,CAAC5lH,SAAV,CAAoB8lH,QAApB,GAA+BA,QAA/B;;EAEA,SAASA,QAAT,GAAoB;EAClB;EACA;EACA,MAAIniH,CAAJ,EAAO7I,CAAP,EAAUC,CAAV;;EACA,KAAG;EACDD,IAAAA,CAAC,GAAG,KAAK+qH,UAAL,KAAoB,CAApB,GAAwB,CAA5B;EACA9qH,IAAAA,CAAC,GAAG,KAAK8qH,UAAL,KAAoB,CAApB,GAAwB,CAA5B;EACAliH,IAAAA,CAAC,GAAG7I,CAAC,GAAGA,CAAJ,GAAQC,CAAC,GAAGA,CAAhB;EACD,GAJD,QAIS4I,CAAC,IAAI,CAAL,IAAUA,CAAC,KAAK,CAJzB;;EAMA,SAAO7I,CAAC,GAAGlB,IAAI,CAACsE,IAAL,CAAU,CAAC,CAAD,GAAKtE,IAAI,CAACuB,GAAL,CAASwI,CAAT,CAAL,GAAiBA,CAA3B,CAAX;EACD;EAED;EACA;EACA;;;EACAiiH,SAAS,CAAC5lH,SAAV,CAAoB+lH,IAApB,GAA2BA,IAA3B;;EAEA,SAASA,IAAT,GAAgB;EACd,MAAIC,IAAI,GAAG,IAAI,CAAf;EACA,MAAI1uE,KAAK,GAAG19C,IAAI,CAACqB,GAAL,CACRgrH,KAAK,CAAE,IAAID,IAAN,CAAL,GAAoBpsH,IAAI,CAACiG,GAAL,CAASjG,IAAI,CAACC,EAAL,GAAUmsH,IAAV,GAAiB,CAA1B,CAApB,IACGC,KAAK,CAAC,CAAC,IAAID,IAAL,IAAa,CAAd,CAAL,GAAwBA,IAAxB,GAA+BpsH,IAAI,CAACqB,GAAL,CAAS,CAAT,EAAY,CAAC+qH,IAAI,GAAG,CAAR,IAAa,CAAzB,CADlC,CADQ,EAGR,IAAEA,IAHM,CAAZ;EAKA,SAAO,KAAKF,QAAL,KAAkBxuE,KAAlB,GAA0B19C,IAAI,CAACqB,GAAL,CAASrB,IAAI,CAACwE,GAAL,CAAS,KAAK0nH,QAAL,EAAT,CAAT,EAAoC,IAAEE,IAAtC,CAAjC;EACD;;;EAGD,SAASC,KAAT,CAAe98G,CAAf,EAAkB;EAChB,SAAOvP,IAAI,CAACsE,IAAL,CAAU,IAAItE,IAAI,CAACC,EAAT,GAAcsP,CAAxB,IAA6BvP,IAAI,CAACqB,GAAL,CAAU,IAAIrB,IAAI,CAACssH,CAAV,IAAgB/8G,CAAC,GAAG,KAAK,KAAKA,CAAL,GAAS,KAAK,KAAKA,CAAV,CAAd,CAApB,CAAT,EAA2DA,CAA3D,CAApC;EACD;;EAED,SAAS08G,UAAT,GAAsB;EACpB,MAAI7gH,IAAI,GAAG,KAAKA,IAAhB,CADoB;;EAGpBA,EAAAA,IAAI,GAAKA,IAAI,GAAG,UAAR,IAAuBA,IAAI,IAAI,EAA/B,CAAD,GAAuC,UAA9C;EACAA,EAAAA,IAAI,GAAG,CAAEA,IAAI,GAAG,UAAR,GAAuBA,IAAI,KAAK,EAAjC,IAAwC,UAA/C;EACAA,EAAAA,IAAI,GAAKA,IAAI,GAAG,UAAR,IAAuBA,IAAI,IAAI,CAA/B,CAAD,GAAsC,UAA7C;EACAA,EAAAA,IAAI,GAAG,CAAEA,IAAI,GAAG,UAAR,GAAuBA,IAAI,IAAI,CAAhC,IAAsC,UAA7C;EACAA,EAAAA,IAAI,GAAKA,IAAI,GAAG,UAAR,IAAuBA,IAAI,IAAI,CAA/B,CAAD,GAAsC,UAA7C;EACAA,EAAAA,IAAI,GAAG,CAAEA,IAAI,GAAG,UAAR,GAAuBA,IAAI,KAAK,EAAjC,IAAwC,UAA/C;EACA,OAAKA,IAAL,GAAYA,IAAZ;EACA,SAAO,CAACA,IAAI,GAAG,SAAR,IAAqB,UAA5B;EACD;;EAED,SAASu8C,IAAT,CAAc4kE,QAAd,EAAwB;EACtB,SAAOvsH,IAAI,CAACsB,KAAL,CAAW,KAAK2qH,UAAL,KAAoBM,QAA/B,CAAP;EACD;EAED;EACA;EACA;EACA;;;EACA,SAAST,cAAT,CAAwBpsH,KAAxB,EAA+B8sH,YAA/B,EAA6C;EAC3C,MAAIC,WAAW,GAAGD,YAAY,IAAIhsH,MAAM,EAAxC;;EACA,MAAI,OAAOisH,WAAW,CAAC9kE,IAAnB,KAA4B,UAAhC,EAA4C;EAC1C,UAAM,IAAIzlD,KAAJ,CAAU,sEAAV,CAAN;EACD;;EAED,SAAO;EACLgnE,IAAAA,OAAO,EAAEA,OADJ;;EAGL;EACJ;EACA;EACIwjD,IAAAA,OAAO,EAAEA;EANJ,GAAP;;EASA,WAASA,OAAT,GAAmB;EACjB,QAAI9sH,CAAJ,EAAO2d,CAAP,EAAUnc,CAAV;;EACA,SAAKxB,CAAC,GAAGF,KAAK,CAACI,MAAN,GAAe,CAAxB,EAA2BF,CAAC,GAAG,CAA/B,EAAkC,EAAEA,CAApC,EAAuC;EACrC2d,MAAAA,CAAC,GAAGkvG,WAAW,CAAC9kE,IAAZ,CAAiB/nD,CAAC,GAAG,CAArB,CAAJ,CADqC;;EAErCwB,MAAAA,CAAC,GAAG1B,KAAK,CAAC6d,CAAD,CAAT;EACA7d,MAAAA,KAAK,CAAC6d,CAAD,CAAL,GAAW7d,KAAK,CAACE,CAAD,CAAhB;EACAF,MAAAA,KAAK,CAACE,CAAD,CAAL,GAAWwB,CAAX;EACD;;EAED,WAAO1B,KAAP;EACD;;EAED,WAASwpE,OAAT,CAAiBlyD,QAAjB,EAA2B;EACzB,QAAIpX,CAAJ,EAAO2d,CAAP,EAAUnc,CAAV;;EACA,SAAKxB,CAAC,GAAGF,KAAK,CAACI,MAAN,GAAe,CAAxB,EAA2BF,CAAC,GAAG,CAA/B,EAAkC,EAAEA,CAApC,EAAuC;EACrC2d,MAAAA,CAAC,GAAGkvG,WAAW,CAAC9kE,IAAZ,CAAiB/nD,CAAC,GAAG,CAArB,CAAJ,CADqC;;EAErCwB,MAAAA,CAAC,GAAG1B,KAAK,CAAC6d,CAAD,CAAT;EACA7d,MAAAA,KAAK,CAAC6d,CAAD,CAAL,GAAW7d,KAAK,CAACE,CAAD,CAAhB;EACAF,MAAAA,KAAK,CAACE,CAAD,CAAL,GAAWwB,CAAX;EAEA4V,MAAAA,QAAQ,CAAC5V,CAAD,CAAR;EACD;;EAED,QAAI1B,KAAK,CAACI,MAAV,EAAkB;EAChBkX,MAAAA,QAAQ,CAACtX,KAAK,CAAC,CAAD,CAAN,CAAR;EACD;EACF;EACF;;;;;;MCxIDmkH,wBAAA,GAAiB8I,sBAAjB;;EAEA,IAAIzD,0BAA0B,GAAGpE,0BAAjC;;EACA,IAAI8E,wBAAwB,GAAG9E,wBAA/B;;EACA,IAAIgG,sBAAsB,GAAGhG,sBAA7B;;EACA,IAAIkG,+BAA+B,GAAGlG,+BAAtC;;EACA,IAAIoG,iCAAiC,GAAGpG,iCAAxC;;EACA,IAAIsG,0BAA0B,GAAGtG,0BAAjC;;EAEA,IAAI8H,gBAAgB,GAAG,EAAvB;;EAEA,SAASD,sBAAT,CAAgCv6B,QAAhC,EAA0C;EACxC,MAAIk5B,MAAM,GAAGxG,MAAb;;EACA,MAAI9nF,KAAK,GAAG8nF,YAAZ;;EACA,MAAIhB,QAAQ,GAAGgB,aAAf;;EACA,MAAI1yB,QAAJ,EAAc;EACZ;EACA,QAAIA,QAAQ,CAACy6B,WAAT,KAAyB/tH,SAA7B,EAAwC,MAAM,IAAIoD,KAAJ,CAAU,8CAAV,CAAN;EACxC,QAAIkwF,QAAQ,CAAC06B,SAAT,KAAuBhuH,SAA3B,EAAsC,MAAM,IAAIoD,KAAJ,CAAU,0CAAV,CAAN;EACvC;;EAEDkwF,EAAAA,QAAQ,GAAGp1D,KAAK,CAACo1D,QAAD,EAAW;EACvB;EACN;EACA;EACM26B,IAAAA,YAAY,EAAE,EAJS;;EAMvB;EACN;EACA;EACMtB,IAAAA,iBAAiB,EAAE,GATI;;EAWvB;EACN;EACA;EACA;EACMuB,IAAAA,OAAO,EAAE,CAAC,EAfa;;EAiBvB;EACN;EACA;EACA;EACA;EACA;EACMtiH,IAAAA,KAAK,EAAE,GAvBgB;;EAyBvB;EACN;EACA;EACA;EACMuiH,IAAAA,eAAe,EAAE,GA7BM;EA6BD;;EAEtB;EACN;EACA;EACMC,IAAAA,QAAQ,EAAG,GAlCY;;EAoCvB;EACN;EACA;EACA;EACMC,IAAAA,sBAAsB,EAAE,CAxCD;;EA0CvB;EACN;EACA;EACA;EACMC,IAAAA,UAAU,EAAE,CA9CW;;EAgDvB;EACN;EACA;EACA;EACA;EACMz/D,IAAAA,KAAK,EAAE;EArDgB,GAAX,CAAhB;EAwDA,MAAI0/D,OAAO,GAAGT,gBAAgB,CAACx6B,QAAQ,CAACg7B,UAAV,CAA9B;;EACA,MAAI,CAACC,OAAL,EAAc;EACZ,QAAID,UAAU,GAAGh7B,QAAQ,CAACg7B,UAA1B;EACAC,IAAAA,OAAO,GAAG;EACR7D,MAAAA,IAAI,EAAEN,0BAA0B,CAACkE,UAAD,EAAah7B,QAAQ,CAACzkC,KAAtB,CADxB;EAER2/D,MAAAA,cAAc,EAAE1D,wBAAwB,CAACwD,UAAD,CAFhC;EAGRG,MAAAA,YAAY,EAAEzC,sBAAsB,CAACsC,UAAD,CAH5B;EAIRI,MAAAA,eAAe,EAAExC,+BAA+B,CAACoC,UAAD,CAJxC;EAKRK,MAAAA,iBAAiB,EAAEvC,iCAAiC,CAACkC,UAAD,CAL5C;EAMRM,MAAAA,SAAS,EAAEtC,0BAA0B,CAACgC,UAAD;EAN7B,KAAV;EAQAR,IAAAA,gBAAgB,CAACQ,UAAD,CAAhB,GAA+BC,OAA/B;EACD;;EAED,MAAI7D,IAAI,GAAG6D,OAAO,CAAC7D,IAAnB;EACA,MAAI8D,cAAc,GAAGD,OAAO,CAACC,cAA7B;EACA,MAAIC,YAAY,GAAGF,OAAO,CAACE,YAA3B;EACA,MAAIC,eAAe,GAAGH,OAAO,CAACG,eAA9B;EACA,MAAIC,iBAAiB,GAAGJ,OAAO,CAACI,iBAAhC;EACA,MAAIC,SAAS,GAAGL,OAAO,CAACK,SAAxB;;EACA,MAAIC,UAAU,GAAGC,GAAG,IAAI,IAAIpE,IAAJ,CAASoE,GAAT,CAAxB;;EAEA,MAAIptH,MAAM,GAAGskH,qBAAA,CAAyBtkH,MAAzB,CAAgC,EAAhC,CAAb;;EACA,MAAIqtH,MAAM,GAAG,EAAb,CAzFwC;;EA0FxC,MAAIC,OAAO,GAAG,EAAd,CA1FwC;;EA4FxC,MAAIC,QAAQ,GAAGT,cAAc,CAACl7B,QAAD,EAAW5xF,MAAX,CAA7B;EACA,MAAIwtH,MAAM,GAAGT,YAAY,CAACM,MAAD,EAASz7B,QAAT,EAAmB5xF,MAAnB,CAAzB;EACA,MAAIytH,WAAW,GAAGR,iBAAiB,CAACr7B,QAAD,EAAW5xF,MAAX,CAAnC;EACA,MAAI0tH,SAAS,GAAGV,eAAe,CAACp7B,QAAD,CAA/B;EAEA,MAAI+7B,aAAa,GAAG,CAApB,CAjGwC;;EAkGxC,MAAIhM,MAAM,GAAG,EAAb;EACA,MAAIiM,QAAQ,GAAG,IAAIhmD,GAAJ,EAAf;EACA,MAAIimD,eAAe,GAAG,CAAtB;EAEAC,EAAAA,QAAQ,CAAC,OAAD,EAAUC,UAAV,CAAR;EACAD,EAAAA,QAAQ,CAAC,QAAD,EAAWE,iBAAX,CAAR;EAEA,MAAIC,SAAS,GAAG;EACd;EACJ;EACA;EACA;EACA;EACA;EACIZ,IAAAA,MAAM,EAAEA,MAPM;EASdE,IAAAA,QAAQ,EAAEA,QATI;;EAWd;EACJ;EACA;EACA;EACA;EACA;EACID,IAAAA,OAAO,EAAEA,OAjBK;;EAmBd;EACJ;EACA;EACI17B,IAAAA,QAAQ,EAAEA,QAtBI;;EAwBd;EACJ;EACA;EACIk8B,IAAAA,QAAQ,EAAEA,QA3BI;;EA6Bd;EACJ;EACA;EACII,IAAAA,WAAW,EAAEA,WAhCC;;EAkCd;EACJ;EACA;EACIC,IAAAA,SAAS,EAAEA,SArCG;;EAuCd;EACJ;EACA;EACA;EACA;EACIn5G,IAAAA,IAAI,EAAE,YAAY;EAChB,WAAK,IAAI5V,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuiH,MAAM,CAACriH,MAA3B,EAAmC,EAAEF,CAArC,EAAwC;EACtCuiH,QAAAA,MAAM,CAACviH,CAAD,CAAN,CAAUyuH,eAAV;EACD;;EACD,UAAIO,QAAQ,GAAGlB,SAAS,CAACG,MAAD,EAASz7B,QAAQ,CAAC86B,QAAlB,EAA4B96B,QAAQ,CAAC+6B,sBAArC,CAAxB;EACAkB,MAAAA,eAAe,IAAI,CAAnB;EACA,aAAOO,QAAP;EACD,KAnDa;;EAqDd;EACJ;EACA;EACA;EACA;EACA;EACA;EACIC,IAAAA,OAAO,EAAE,UAAUpzB,IAAV,EAAgB;EACvB,UAAI,CAACA,IAAL,EAAW;EACT,cAAM,IAAIv5F,KAAJ,CAAU,kBAAV,CAAN;EACD;;EACD2rH,MAAAA,MAAM,CAAC5uH,IAAP,CAAYw8F,IAAZ;EAEA,aAAOA,IAAP;EACD,KAnEa;;EAqEd;EACJ;EACA;EACA;EACA;EACA;EACA;EACIqzB,IAAAA,SAAS,EAAE,UAAUlB,GAAV,EAAe;EACxB,UAAI,CAACA,GAAL,EAAU;EACR,cAAM,IAAI1rH,KAAJ,CAAU,2BAAV,CAAN;EACD;;EACD,UAAIu5F,IAAI,GAAGkyB,UAAU,CAACC,GAAD,CAArB;EACAC,MAAAA,MAAM,CAAC5uH,IAAP,CAAYw8F,IAAZ;EAEA,aAAOA,IAAP;EACD,KApFa;;EAsFd;EACJ;EACA;EACA;EACA;EACA;EACA;EACIszB,IAAAA,UAAU,EAAE,UAAUtzB,IAAV,EAAgB;EAC1B,UAAI,CAACA,IAAL,EAAW;EAAE;EAAS;;EAEtB,UAAIssB,GAAG,GAAG8F,MAAM,CAAC7uH,OAAP,CAAey8F,IAAf,CAAV;;EACA,UAAIssB,GAAG,GAAG,CAAV,EAAa;EAAE;EAAS;;EAExB8F,MAAAA,MAAM,CAACvuH,MAAP,CAAcyoH,GAAd,EAAmB,CAAnB;;EACA,UAAI8F,MAAM,CAAC/tH,MAAP,KAAkB,CAAtB,EAAyB;EACvBkuH,QAAAA,MAAM,CAACn2E,KAAP;EACD;;EACD,aAAO,IAAP;EACD,KAxGa;;EA0Gd;EACJ;EACA;EACA;EACA;EACA;EACIm3E,IAAAA,SAAS,EAAE,UAAUC,KAAV,EAAiBC,KAAjB,EAAwBnC,YAAxB,EAAsCtB,iBAAtC,EAAyD;EAClE,UAAI,CAACwD,KAAD,IAAU,CAACC,KAAf,EAAsB;EACpB,cAAM,IAAIhtH,KAAJ,CAAU,2CAAV,CAAN;EACD;;EAED,UAAI,OAAO6qH,YAAP,KAAwB,QAA5B,EAAsC;EACpCA,QAAAA,YAAY,GAAG,CAAC,CAAhB,CADoC;EAErC;;EAED,UAAIoC,MAAM,GAAG,IAAI7D,MAAJ,CAAW2D,KAAX,EAAkBC,KAAlB,EAAyBnC,YAAzB,EAAuCtB,iBAAiB,IAAI,CAArB,GAAyBA,iBAAzB,GAA6C,CAAC,CAArF,CAAb;EACAqC,MAAAA,OAAO,CAAC7uH,IAAR,CAAakwH,MAAb,EAVkE;;EAalE,aAAOA,MAAP;EACD,KA9Ha;;EAgId;EACJ;EACA;EACIC,IAAAA,gBAAgB,EAAE,YAAY;EAC5B,aAAOjB,aAAP;EACD,KArIa;;EAuId;EACJ;EACA;EACA;EACA;EACA;EACA;EACIkB,IAAAA,YAAY,EAAE,UAAUF,MAAV,EAAkB;EAC9B,UAAI,CAACA,MAAL,EAAa;EAAE;EAAS;;EACxB,UAAIpH,GAAG,GAAG+F,OAAO,CAAC9uH,OAAR,CAAgBmwH,MAAhB,CAAV;;EACA,UAAIpH,GAAG,GAAG,CAAC,CAAX,EAAc;EACZ+F,QAAAA,OAAO,CAACxuH,MAAR,CAAeyoH,GAAf,EAAoB,CAApB;EACA,eAAO,IAAP;EACD;EACF,KArJa;EAuJduH,IAAAA,sBAAsB,EAAE,UAAUC,SAAV,EAAqB;EAC3C,aAAOvB,MAAM,CAACwB,kBAAP,CAA0BD,SAA1B,CAAP;EACD,KAzJa;;EA2Jd;EACJ;EACA;EACIE,IAAAA,OAAO,EAAE1xG,cA9JK;EA+JdA,IAAAA,cAAc,EAAEA,cA/JF;EAiKd2xG,IAAAA,cAAc,EAAE,YAAY;EAC1BjtH,MAAAA,OAAO,CAACC,IAAR,CAAa,8EAAb;EACD,KAnKa;EAqKd;EACAsqH,IAAAA,OAAO,EAAE,UAAUnsH,KAAV,EAAiB;EACxB,UAAIA,KAAK,KAAK/B,SAAd,EAAyB;EACvBszF,QAAAA,QAAQ,CAAC46B,OAAT,GAAmBnsH,KAAnB;EACAktH,QAAAA,QAAQ,CAAC58G,OAAT,CAAiB;EAAC67G,UAAAA,OAAO,EAAEnsH;EAAV,SAAjB;EACA,eAAO,IAAP;EACD,OAJD,MAIO;EACL,eAAOuxF,QAAQ,CAAC46B,OAAhB;EACD;EACF,KA9Ka;EAgLdtiH,IAAAA,KAAK,EAAE,UAAU7J,KAAV,EAAiB;EACtB,UAAIA,KAAK,KAAK/B,SAAd,EAAyB;EACvBszF,QAAAA,QAAQ,CAAC1nF,KAAT,GAAiB7J,KAAjB;EACAktH,QAAAA,QAAQ,CAAC58G,OAAT,CAAiB;EAACzG,UAAAA,KAAK,EAAE7J;EAAR,SAAjB;EACA,eAAO,IAAP;EACD,OAJD,MAIO;EACL,eAAOuxF,QAAQ,CAAC1nF,KAAhB;EACD;EACF,KAxLa;;EA0Ld;EACJ;EACA;EACIlK,IAAAA,MAAM,EAAEA;EA7LM,GAAhB,CAzGwC;;EA0SxCmvH,EAAAA,MAAM,CAACv9B,QAAD,EAAWq8B,SAAX,CAAN;EAEA3K,EAAAA,QAAQ,CAAC2K,SAAD,CAAR;EAEA,SAAOA,SAAP;;EAEA,WAAS1wG,cAAT,GAA0B;EACxBiwG,IAAAA,MAAM,CAAC55G,MAAP;EACA,WAAO45G,MAAM,CAAC3yG,GAAd;EACD;;EAED,WAASizG,QAAT,CAAkBsB,SAAlB,EAA6BC,aAA7B,EAA4C;EAC1C,QAAIzB,QAAQ,CAACx1E,GAAT,CAAag3E,SAAb,CAAJ,EAA6B,MAAM,IAAI1tH,KAAJ,CAAU,WAAW0tH,SAAX,GAAuB,mBAAjC,CAAN;EAE7BxB,IAAAA,QAAQ,CAACxsH,GAAT,CAAaguH,SAAb,EAAwBC,aAAxB;EACA1N,IAAAA,MAAM,CAACljH,IAAP,CAAY4wH,aAAZ;EACD;;EAED,WAASnB,WAAT,CAAqBkB,SAArB,EAAgC;EAC9B,QAAIE,UAAU,GAAG3N,MAAM,CAACnjH,OAAP,CAAeovH,QAAQ,CAAC9kF,GAAT,CAAasmF,SAAb,CAAf,CAAjB;EACA,QAAIE,UAAU,GAAG,CAAjB,EAAoB;EACpB3N,IAAAA,MAAM,CAAC7iH,MAAP,CAAcwwH,UAAd,EAA0B,CAA1B;EACA1B,IAAAA,QAAQ,CAAC5kF,MAAT,CAAgBomF,SAAhB;EACD;;EAED,WAASjB,SAAT,GAAqB;EACnB;EACA,WAAOP,QAAP;EACD;;EAED,WAASG,UAAT;EAAoB;EAAsB;EACxC,QAAIV,MAAM,CAAC/tH,MAAP,KAAkB,CAAtB,EAAyB;EAEzBiuH,IAAAA,QAAQ,CAACgC,YAAT,CAAsBlC,MAAtB;EACA,QAAIjuH,CAAC,GAAGiuH,MAAM,CAAC/tH,MAAf;;EACA,WAAOF,CAAC,EAAR,EAAY;EACV,UAAI67F,IAAI,GAAGoyB,MAAM,CAACjuH,CAAD,CAAjB;;EACA,UAAI,CAAC67F,IAAI,CAACu0B,QAAV,EAAoB;EAClBv0B,QAAAA,IAAI,CAAC5jD,KAAL;EACAk2E,QAAAA,QAAQ,CAACkC,eAAT,CAAyBx0B,IAAzB;EACAyyB,QAAAA,SAAS,CAAC95G,MAAV,CAAiBqnF,IAAjB;EACD;EACF;EACF;;EAED,WAAS+yB,iBAAT,GAA6B;EAC3B,QAAI5uH,CAAC,GAAGkuH,OAAO,CAAChuH,MAAhB;;EACA,WAAOF,CAAC,EAAR,EAAY;EACVquH,MAAAA,WAAW,CAAC75G,MAAZ,CAAmB05G,OAAO,CAACluH,CAAD,CAA1B;EACD;EACF;EAEF;;EAED,SAAS+vH,MAAT,CAAgBv9B,QAAhB,EAA0B3yF,MAA1B,EAAkC;EAChC,OAAK,IAAI6sB,GAAT,IAAgB8lE,QAAhB,EAA0B;EACxB89B,IAAAA,OAAO,CAAC99B,QAAD,EAAW3yF,MAAX,EAAmB6sB,GAAnB,CAAP;EACD;EACF;;EAED,SAAS4jG,OAAT,CAAiBniH,MAAjB,EAAyBtO,MAAzB,EAAiC6sB,GAAjC,EAAsC;EACpC,MAAI,CAACve,MAAM,CAAC0xG,cAAP,CAAsBnzF,GAAtB,CAAL,EAAiC;;EACjC,MAAI,OAAO7sB,MAAM,CAAC6sB,GAAD,CAAb,KAAuB,UAA3B,EAAuC;EACrC;EACA;EACD;;EACD,MAAI6jG,cAAc,GAAGx8G,MAAM,CAACooB,QAAP,CAAgBhuB,MAAM,CAACue,GAAD,CAAtB,CAArB;;EAEA,MAAI6jG,cAAJ,EAAoB;EAClB1wH,IAAAA,MAAM,CAAC6sB,GAAD,CAAN,GAAc,UAAUzrB,KAAV,EAAiB;EAC7B,UAAIA,KAAK,KAAK/B,SAAd,EAAyB;EACvB,YAAI,CAAC6U,MAAM,CAACooB,QAAP,CAAgBl7B,KAAhB,CAAL,EAA6B,MAAM,IAAIqB,KAAJ,CAAU,cAAcoqB,GAAd,GAAoB,4BAA9B,CAAN;EAC7Bve,QAAAA,MAAM,CAACue,GAAD,CAAN,GAAczrB,KAAd;EACA,eAAOpB,MAAP;EACD;;EACD,aAAOsO,MAAM,CAACue,GAAD,CAAb;EACD,KAPD;EAQD,GATD,MASO;EACL7sB,IAAAA,MAAM,CAAC6sB,GAAD,CAAN,GAAc,UAAUzrB,KAAV,EAAiB;EAC7B,UAAIA,KAAK,KAAK/B,SAAd,EAAyB;EACvBiP,QAAAA,MAAM,CAACue,GAAD,CAAN,GAAczrB,KAAd;EACA,eAAOpB,MAAP;EACD;;EACD,aAAOsO,MAAM,CAACue,GAAD,CAAb;EACD,KAND;EAOD;EACF;;AC9YDu3F,4BAAA,GAAiBuM,YAAjB;sCACA,GAA2BtL;;EAE3B,IAAIhB,QAAQ,GAAGgB,aAAf;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;EACA,SAASsL,YAAT,CAAsBC,KAAtB,EAA6BC,eAA7B,EAA8C;EAC5C,MAAI,CAACD,KAAL,EAAY;EACV,UAAM,IAAInuH,KAAJ,CAAU,qCAAV,CAAN;EACD;;EAED,MAAIquH,eAAe,GAAID,eAAe,IAAIA,eAAe,CAACC,eAApC,IAAwDzL,wBAA9E;;EACA,MAAI0L,gBAAgB,GAAGD,eAAe,CAACD,eAAD,CAAtC;EACA,MAAI1hH,KAAK,CAACC,OAAN,CAAcyhH,eAAd,CAAJ,EAAoC,MAAM,IAAIpuH,KAAJ,CAAU,8CAAV,CAAN;EAEpC,MAAIuuH,QAAQ,GAAGC,eAAf;;EACA,MAAIJ,eAAe,IAAI,OAAOA,eAAe,CAACG,QAAvB,KAAoC,UAA3D,EAAuE;EACrEA,IAAAA,QAAQ,GAAGH,eAAe,CAACG,QAA3B;EACD;;EAED,MAAIE,UAAU,GAAG,IAAIvoD,GAAJ,EAAjB;EACA,MAAI0lD,OAAO,GAAG,EAAd;EACA,MAAI8C,WAAW,GAAG,CAAlB;EAEA,MAAIC,eAAe,GAAGL,gBAAgB,CAACp+B,QAAjB,CAA0By+B,eAA1B,IAA6C1R,IAAnE,CAlB4C;;EAqB5C2R,EAAAA,WAAW;EACXC,EAAAA,cAAc;EAEd,MAAIC,SAAS,GAAG,KAAhB;EAEA,MAAIC,GAAG,GAAG;EACR;EACJ;EACA;EACA;EACA;EACA;EACIz7G,IAAAA,IAAI,EAAE,YAAW;EACf,UAAIo7G,WAAW,KAAK,CAApB,EAAuB;EACrBM,QAAAA,kBAAkB,CAAC,IAAD,CAAlB;EACA,eAAO,IAAP;EACD;;EAED,UAAIC,QAAQ,GAAGX,gBAAgB,CAACh7G,IAAjB,EAAf,CANe;EASf;;EACAy7G,MAAAA,GAAG,CAACE,QAAJ,GAAeA,QAAf,CAVe;;EAafF,MAAAA,GAAG,CAAC7M,IAAJ,CAAS,MAAT;EAEA,UAAIgN,KAAK,GAAGD,QAAQ,GAACP,WAArB;EACA,UAAIS,WAAW,GAAGD,KAAK,IAAI,IAA3B,CAhBe;;EAiBfF,MAAAA,kBAAkB,CAACG,WAAD,CAAlB;EAGA,aAAOA,WAAP;EACD,KA5BO;;EA8BR;EACJ;EACA;EACIC,IAAAA,eAAe,EAAE,UAAUrT,MAAV,EAAkB;EACjC,aAAOsT,kBAAkB,CAACtT,MAAD,CAAlB,CAA2B2P,GAAlC;EACD,KAnCO;;EAqCR;EACJ;EACA;EACA;EACA;EACA;EACA;EACI4D,IAAAA,eAAe,EAAE,UAAUvT,MAAV,EAAkB;EACjC,UAAIxiB,IAAI,GAAG81B,kBAAkB,CAACtT,MAAD,CAA7B;EACAxiB,MAAAA,IAAI,CAAC/3E,WAAL,CAAiBo6C,KAAjB,CAAuB29B,IAAvB,EAA6B7sF,KAAK,CAACxI,SAAN,CAAgBzG,KAAhB,CAAsBI,IAAtB,CAA2BuG,SAA3B,EAAsC,CAAtC,CAA7B;EACD,KA/CO;;EAiDR;EACJ;EACA;EACA;EACA;EACImrH,IAAAA,eAAe,EAAE,UAAU/J,MAAV,EAAkB;EACjC,UAAIyH,MAAM,GAAGrB,OAAO,CAACpG,MAAD,CAApB;;EACA,UAAIyH,MAAJ,EAAY;EACV,eAAO;EACL5gC,UAAAA,IAAI,EAAE4gC,MAAM,CAAC5gC,IAAP,CAAYq/B,GADb;EAELp/B,UAAAA,EAAE,EAAE2gC,MAAM,CAAC3gC,EAAP,CAAUo/B;EAFT,SAAP;EAID;EACF,KA9DO;;EAgER;EACJ;EACA;EACA;EACA;EACI8D,IAAAA,YAAY,EAAE,YAAY;EACxB,aAAOlB,gBAAgB,CAACf,OAAjB,EAAP;EACD,KAvEO;;EAyER;EACJ;EACA;EACIkC,IAAAA,WAAW,EAAEA,WA5EL;;EA8ER;EACJ;EACA;EACA;EACA;EACIC,IAAAA,OAAO,EAAE,UAAUxrB,IAAV,EAAgB4pB,QAAhB,EAA0B;EACjC,UAAIv0B,IAAI,GAAG81B,kBAAkB,CAACnrB,IAAI,CAAC38E,EAAN,CAA7B;EACCgyE,MAAAA,IAAI,CAACu0B,QAAL,GAAgB,CAAC,CAACA,QAAlB;EACF,KAtFO;;EAwFR;EACJ;EACA;EACI6B,IAAAA,YAAY,EAAE,UAAUzrB,IAAV,EAAgB;EAC5B,aAAOmrB,kBAAkB,CAACnrB,IAAI,CAAC38E,EAAN,CAAlB,CAA4BumG,QAAnC;EACD,KA7FO;;EA+FR;EACJ;EACA;EACIjhH,IAAAA,OAAO,EAAE,YAAW;EAClBshH,MAAAA,KAAK,CAAClM,GAAN,CAAU,SAAV,EAAqB2N,cAArB;EACAb,MAAAA,GAAG,CAAC7M,IAAJ,CAAS,UAAT;EACD,KArGO;;EAuGR;EACJ;EACA;EACA;EACI2N,IAAAA,OAAO,EAAEA,OA3GD;;EA6GR;EACJ;EACA;EACA;EACA;EACA;EACA;EACA;EACIC,IAAAA,SAAS,EAAEA,SArHH;;EAuHR;EACJ;EACA;EACIC,IAAAA,oBAAoB,EAAEA,oBA1Hd;;EA4HR;EACJ;EACA;EACIC,IAAAA,SAAS,EAAE1B,gBA/HH;;EAiIR;EACJ;EACA;EACIH,IAAAA,KAAK,EAAEA,KApIC;;EAsIR;EACJ;EACA;EACIc,IAAAA,QAAQ,EAAE;EAzIF,GAAV;EA4IArN,EAAAA,QAAQ,CAACmN,GAAD,CAAR;EAEA,SAAOA,GAAP;;EAEA,WAASC,kBAAT,CAA4BG,WAA5B,EAAyC;EACvC,QAAIL,SAAS,KAAKK,WAAlB,EAA+B;EAC7BL,MAAAA,SAAS,GAAGK,WAAZ;EACAc,MAAAA,eAAe,CAACd,WAAD,CAAf;EACD;EACF;;EAED,WAASM,WAAT,CAAqB90F,EAArB,EAAyB;EACvB8zF,IAAAA,UAAU,CAACznD,OAAX,CAAmBrsC,EAAnB;EACD;;EAED,WAASo1F,oBAAT,GAAgC;EAC9B,QAAI1P,EAAE,GAAG,CAAT;EAAA,QAAYC,EAAE,GAAG,CAAjB;EACAmP,IAAAA,WAAW,CAAC,UAASl2B,IAAT,EAAe;EACzB8mB,MAAAA,EAAE,IAAIviH,IAAI,CAACwE,GAAL,CAASi3F,IAAI,CAACnxE,KAAL,CAAWppB,CAApB,CAAN;EACAshH,MAAAA,EAAE,IAAIxiH,IAAI,CAACwE,GAAL,CAASi3F,IAAI,CAACnxE,KAAL,CAAWnpB,CAApB,CAAN;EACD,KAHU,CAAX;EAIA,WAAOnB,IAAI,CAACsE,IAAL,CAAUi+G,EAAE,GAAGA,EAAL,GAAUC,EAAE,GAAGA,EAAzB,CAAP;EACD;;EAED,WAASwP,SAAT,CAAmB3K,MAAnB,EAA2BC,IAA3B,EAAiC;EAC/B,QAAII,MAAJ;;EACA,QAAIJ,IAAI,KAAKxoH,SAAb,EAAwB;EACtB,UAAI,OAAOuoH,MAAP,KAAkB,QAAtB,EAAgC;EAC9B;EACAK,QAAAA,MAAM,GAAGL,MAAT;EACD,OAHD,MAGO;EACL;EACAK,QAAAA,MAAM,GAAGL,MAAM,CAAC59F,EAAhB;EACD;EACF,KARD,MAQO;EACL;EACA,UAAI+0F,IAAI,GAAG6R,KAAK,CAAC3J,OAAN,CAAcW,MAAd,EAAsBC,IAAtB,CAAX;EACA,UAAI,CAAC9I,IAAL,EAAW;EACXkJ,MAAAA,MAAM,GAAGlJ,IAAI,CAAC/0F,EAAd;EACD;;EAED,WAAOqkG,OAAO,CAACpG,MAAD,CAAd;EACD;;EAED,WAASqK,OAAT,CAAiB9T,MAAjB,EAAyB;EACvB,WAAO0S,UAAU,CAACrnF,GAAX,CAAe20E,MAAf,CAAP;EACD;;EAED,WAAS8S,cAAT,GAA0B;EACxBV,IAAAA,KAAK,CAAC3Q,EAAN,CAAS,SAAT,EAAoBoS,cAApB;EACD;;EAED,WAASK,eAAT,CAAyBC,QAAzB,EAAmC;EACjCnB,IAAAA,GAAG,CAAC7M,IAAJ,CAAS,QAAT,EAAmBgO,QAAnB;EACD;;EAED,WAASN,cAAT,CAAwBxM,OAAxB,EAAiC;EAC/B,SAAK,IAAI1lH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0lH,OAAO,CAACxlH,MAA5B,EAAoC,EAAEF,CAAtC,EAAyC;EACvC,UAAIyyH,MAAM,GAAG/M,OAAO,CAAC1lH,CAAD,CAApB;;EACA,UAAIyyH,MAAM,CAAClL,UAAP,KAAsB,KAA1B,EAAiC;EAC/B,YAAIkL,MAAM,CAACjsB,IAAX,EAAiB;EACfksB,UAAAA,QAAQ,CAACD,MAAM,CAACjsB,IAAP,CAAY38E,EAAb,CAAR;EACD;;EACD,YAAI4oG,MAAM,CAAC7T,IAAX,EAAiB;EACf+T,UAAAA,QAAQ,CAACF,MAAM,CAAC7T,IAAR,CAAR;EACD;EACF,OAPD,MAOO,IAAI6T,MAAM,CAAClL,UAAP,KAAsB,QAA1B,EAAoC;EACzC,YAAIkL,MAAM,CAACjsB,IAAX,EAAiB;EACfosB,UAAAA,WAAW,CAACH,MAAM,CAACjsB,IAAR,CAAX;EACD;;EACD,YAAIisB,MAAM,CAAC7T,IAAX,EAAiB;EACfiU,UAAAA,WAAW,CAACJ,MAAM,CAAC7T,IAAR,CAAX;EACD;EACF;EACF;;EACDoS,IAAAA,WAAW,GAAGP,KAAK,CAAClK,aAAN,EAAd;EACD;;EAED,WAAS2K,WAAT,GAAuB;EACrBF,IAAAA,WAAW,GAAG,CAAd;EAEAP,IAAAA,KAAK,CAAChK,WAAN,CAAkB,UAAUjgB,IAAV,EAAgB;EAChCksB,MAAAA,QAAQ,CAAClsB,IAAI,CAAC38E,EAAN,CAAR;EACAmnG,MAAAA,WAAW,IAAI,CAAf;EACD,KAHD;EAKAP,IAAAA,KAAK,CAAC9J,WAAN,CAAkBgM,QAAlB;EACD;;EAED,WAASD,QAAT,CAAkBrU,MAAlB,EAA0B;EACxB,QAAIxiB,IAAI,GAAGk1B,UAAU,CAACrnF,GAAX,CAAe20E,MAAf,CAAX;;EACA,QAAI,CAACxiB,IAAL,EAAW;EACT,UAAI2K,IAAI,GAAGiqB,KAAK,CAACtK,OAAN,CAAc9H,MAAd,CAAX;;EACA,UAAI,CAAC7X,IAAL,EAAW;EACT,cAAM,IAAIlkG,KAAJ,CAAU,4CAAV,CAAN;EACD;;EAED,UAAI0rH,GAAG,GAAGxnB,IAAI,CAAC3hF,QAAf;;EACA,UAAI,CAACmpG,GAAL,EAAU;EACR,YAAI2B,SAAS,GAAGmD,iBAAiB,CAACtsB,IAAD,CAAjC;EACAwnB,QAAAA,GAAG,GAAG4C,gBAAgB,CAAClB,sBAAjB,CAAwCC,SAAxC,CAAN;EACD;;EAED9zB,MAAAA,IAAI,GAAG+0B,gBAAgB,CAAC1B,SAAjB,CAA2BlB,GAA3B,CAAP;EACAnyB,MAAAA,IAAI,CAAChyE,EAAL,GAAUw0F,MAAV;EAEA0S,MAAAA,UAAU,CAAC/uH,GAAX,CAAeq8G,MAAf,EAAuBxiB,IAAvB;EACAk3B,MAAAA,cAAc,CAAC1U,MAAD,CAAd;;EAEA,UAAI2U,sBAAsB,CAACxsB,IAAD,CAA1B,EAAkC;EAChC3K,QAAAA,IAAI,CAACu0B,QAAL,GAAgB,IAAhB;EACD;EACF;EACF;;EAED,WAASwC,WAAT,CAAqBpsB,IAArB,EAA2B;EACzB,QAAI6X,MAAM,GAAG7X,IAAI,CAAC38E,EAAlB;EACA,QAAIgyE,IAAI,GAAGk1B,UAAU,CAACrnF,GAAX,CAAe20E,MAAf,CAAX;;EACA,QAAIxiB,IAAJ,EAAU;EACRk1B,MAAAA,UAAU,CAACnnF,MAAX,CAAkBy0E,MAAlB;EACAuS,MAAAA,gBAAgB,CAACzB,UAAjB,CAA4BtzB,IAA5B;EACD;EACF;;EAED,WAAS82B,QAAT,CAAkB/T,IAAlB,EAAwB;EACtBmU,IAAAA,cAAc,CAACnU,IAAI,CAAC6I,MAAN,CAAd;EACAsL,IAAAA,cAAc,CAACnU,IAAI,CAAC8I,IAAN,CAAd;EAEA,QAAIiE,QAAQ,GAAGoF,UAAU,CAACrnF,GAAX,CAAek1E,IAAI,CAAC6I,MAApB,CAAf;EAAA,QACImE,MAAM,GAAImF,UAAU,CAACrnF,GAAX,CAAek1E,IAAI,CAAC8I,IAApB,CADd;EAAA,QAEI6H,MAAM,GAAGqB,gBAAgB,CAACxB,SAAjB,CAA2BzD,QAA3B,EAAqCC,MAArC,EAA6ChN,IAAI,CAAC1+G,MAAlD,CAFb;EAIA+wH,IAAAA,eAAe,CAACrS,IAAD,EAAO2Q,MAAP,CAAf;EAEArB,IAAAA,OAAO,CAACtP,IAAI,CAAC/0F,EAAN,CAAP,GAAmB0lG,MAAnB;EACD;;EAED,WAASsD,WAAT,CAAqBjU,IAArB,EAA2B;EACzB,QAAI2Q,MAAM,GAAGrB,OAAO,CAACtP,IAAI,CAAC/0F,EAAN,CAApB;;EACA,QAAI0lG,MAAJ,EAAY;EACV,UAAI5gC,IAAI,GAAG8hC,KAAK,CAACtK,OAAN,CAAcvH,IAAI,CAAC6I,MAAnB,CAAX;EAAA,UACI74B,EAAE,GAAG6hC,KAAK,CAACtK,OAAN,CAAcvH,IAAI,CAAC8I,IAAnB,CADT;EAGA,UAAI/4B,IAAJ,EAAUokC,cAAc,CAACpkC,IAAI,CAAC9kE,EAAN,CAAd;EACV,UAAI+kE,EAAJ,EAAQmkC,cAAc,CAACnkC,EAAE,CAAC/kE,EAAJ,CAAd;EAER,aAAOqkG,OAAO,CAACtP,IAAI,CAAC/0F,EAAN,CAAd;EAEA+mG,MAAAA,gBAAgB,CAACnB,YAAjB,CAA8BF,MAA9B;EACD;EACF;;EAED,WAASuD,iBAAT,CAA2BtsB,IAA3B,EAAiC;EAC/B;EACA,QAAImpB,SAAS,GAAG,EAAhB;;EACA,QAAI,CAACnpB,IAAI,CAAC8X,KAAV,EAAiB;EACf,aAAOqR,SAAP;EACD;;EACD,QAAIsD,YAAY,GAAG7yH,IAAI,CAACc,GAAL,CAASslG,IAAI,CAAC8X,KAAL,CAAWp+G,MAApB,EAA4B,CAA5B,CAAnB;;EACA,SAAK,IAAIF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGizH,YAApB,EAAkC,EAAEjzH,CAApC,EAAuC;EACrC,UAAI4+G,IAAI,GAAGpY,IAAI,CAAC8X,KAAL,CAAWt+G,CAAX,CAAX;EACA,UAAIkzH,SAAS,GAAGtU,IAAI,CAAC6I,MAAL,KAAgBjhB,IAAI,CAAC38E,EAArB,GAA0BknG,UAAU,CAACrnF,GAAX,CAAek1E,IAAI,CAAC6I,MAApB,CAA1B,GAAwDsJ,UAAU,CAACrnF,GAAX,CAAek1E,IAAI,CAAC8I,IAApB,CAAxE;;EACA,UAAIwL,SAAS,IAAIA,SAAS,CAAClF,GAA3B,EAAgC;EAC9B2B,QAAAA,SAAS,CAACtwH,IAAV,CAAe6zH,SAAf;EACD;EACF;;EAED,WAAOvD,SAAP;EACD;;EAED,WAASoD,cAAT,CAAwB1U,MAAxB,EAAgC;EAC9B,QAAIxiB,IAAI,GAAGk1B,UAAU,CAACrnF,GAAX,CAAe20E,MAAf,CAAX;EACAxiB,IAAAA,IAAI,CAACs3B,IAAL,GAAYtC,QAAQ,CAACxS,MAAD,CAApB;;EACA,QAAItqG,MAAM,CAACgnB,KAAP,CAAa8gE,IAAI,CAACs3B,IAAlB,CAAJ,EAA6B;EAC3B,YAAM,IAAI7wH,KAAJ,CAAU,8BAAV,CAAN;EACD;EACF;EAED;EACF;EACA;EACA;EACA;EACA;EACA;EACA;;;EACE,WAAS0wH,sBAAT,CAAgCxsB,IAAhC,EAAsC;EACpC,WAAQA,IAAI,KAAKA,IAAI,CAAC4pB,QAAL,IAAkB5pB,IAAI,CAAC92F,IAAL,IAAa82F,IAAI,CAAC92F,IAAL,CAAU0gH,QAA9C,CAAZ;EACD;;EAED,WAASuB,kBAAT,CAA4BtT,MAA5B,EAAoC;EAClC,QAAIxiB,IAAI,GAAGk1B,UAAU,CAACrnF,GAAX,CAAe20E,MAAf,CAAX;;EACA,QAAI,CAACxiB,IAAL,EAAW;EACT62B,MAAAA,QAAQ,CAACrU,MAAD,CAAR;EACAxiB,MAAAA,IAAI,GAAGk1B,UAAU,CAACrnF,GAAX,CAAe20E,MAAf,CAAP;EACD;;EACD,WAAOxiB,IAAP;EACD;EAED;EACF;EACA;EACA;EACA;EACA;;;EACE,WAASi1B,eAAT,CAAyBzS,MAAzB,EAAiC;EAC/B,QAAIC,KAAK,GAAGmS,KAAK,CAACjK,QAAN,CAAenI,MAAf,CAAZ;EACA,QAAI,CAACC,KAAL,EAAY,OAAO,CAAP;EACZ,WAAO,IAAIA,KAAK,CAACp+G,MAAN,GAAe,GAA1B;EACD;EACF;;EAED,SAASq/G,IAAT,GAAgB;;;;;;;;;;;;;;;;;;;ECzXhB,SAAS6T,UAAT,CAAkBC,IAAlB,EAAwBC,IAAxB,EAA8BC,SAA9B,EAAwC;EACtC,MAAIrT,OAAJ,EAAad,IAAb,EAAmBhzG,OAAnB,EAA4BonH,SAA5B,EAAuC37D,MAAvC;EACA,MAAI,QAAQy7D,IAAZ,EAAkBA,IAAI,GAAG,GAAP;;EAElB,WAASG,KAAT,GAAiB;EACf,QAAIl1C,IAAI,GAAGqiC,IAAI,CAACxjH,GAAL,KAAao2H,SAAxB;;EAEA,QAAIj1C,IAAI,GAAG+0C,IAAP,IAAe/0C,IAAI,IAAI,CAA3B,EAA8B;EAC5B2hC,MAAAA,OAAO,GAAGhlB,UAAU,CAACu4B,KAAD,EAAQH,IAAI,GAAG/0C,IAAf,CAApB;EACD,KAFD,MAEO;EACL2hC,MAAAA,OAAO,GAAG,IAAV;;EACA,UAAI,CAACqT,SAAL,EAAgB;EACd17D,QAAAA,MAAM,GAAGw7D,IAAI,CAACn1D,KAAL,CAAW9xD,OAAX,EAAoBgzG,IAApB,CAAT;EACAhzG,QAAAA,OAAO,GAAGgzG,IAAI,GAAG,IAAjB;EACD;EACF;EACF;;EAED,MAAIsU,SAAS,GAAG,YAAU;EACxBtnH,IAAAA,OAAO,GAAG,IAAV;EACAgzG,IAAAA,IAAI,GAAG14G,SAAP;EACA8sH,IAAAA,SAAS,GAAG5S,IAAI,CAACxjH,GAAL,EAAZ;EACA,QAAIu2H,OAAO,GAAGJ,SAAS,IAAI,CAACrT,OAA5B;EACA,QAAI,CAACA,OAAL,EAAcA,OAAO,GAAGhlB,UAAU,CAACu4B,KAAD,EAAQH,IAAR,CAApB;;EACd,QAAIK,OAAJ,EAAa;EACX97D,MAAAA,MAAM,GAAGw7D,IAAI,CAACn1D,KAAL,CAAW9xD,OAAX,EAAoBgzG,IAApB,CAAT;EACAhzG,MAAAA,OAAO,GAAGgzG,IAAI,GAAG,IAAjB;EACD;;EAED,WAAOvnD,MAAP;EACD,GAZD;;EAcA67D,EAAAA,SAAS,CAAChqG,KAAV,GAAkB,YAAW;EAC3B,QAAIw2F,OAAJ,EAAa;EACXwB,MAAAA,YAAY,CAACxB,OAAD,CAAZ;EACAA,MAAAA,OAAO,GAAG,IAAV;EACD;EACF,GALD;;EAOAwT,EAAAA,SAAS,CAACE,KAAV,GAAkB,YAAW;EAC3B,QAAI1T,OAAJ,EAAa;EACXroD,MAAAA,MAAM,GAAGw7D,IAAI,CAACn1D,KAAL,CAAW9xD,OAAX,EAAoBgzG,IAApB,CAAT;EACAhzG,MAAAA,OAAO,GAAGgzG,IAAI,GAAG,IAAjB;EAEAsC,MAAAA,YAAY,CAACxB,OAAD,CAAZ;EACAA,MAAAA,OAAO,GAAG,IAAV;EACD;EACF,GARD;;EAUA,SAAOwT,SAAP;EACD;;AAGDN,YAAQ,CAACA,QAAT,GAAoBA,UAApB;MAEAnP,YAAA,GAAiBmP,UAAjB;;ECnEA,SAASS,iBAAT,CAAyBC,QAAzB,EAAmCC,WAAnC,EAAgD;EAC9C,MAAI,EAAED,QAAQ,YAAYC,WAAtB,CAAJ,EAAwC;EACtC,UAAM,IAAI77F,SAAJ,CAAc,mCAAd,CAAN;EACD;EACF;;EAED,SAAS87F,gBAAT,CAAwBC,GAAxB,EAA6Bj0H,CAA7B,EAAgC;EAC9B,SAAOk0H,iBAAe,CAACD,GAAD,CAAf,IAAwBE,uBAAqB,CAACF,GAAD,EAAMj0H,CAAN,CAA7C,IAAyDo0H,6BAA2B,CAACH,GAAD,EAAMj0H,CAAN,CAApF,IAAgGq0H,kBAAgB,EAAvH;EACD;;EAED,SAASH,iBAAT,CAAyBD,GAAzB,EAA8B;EAC5B,MAAIjlH,KAAK,CAACC,OAAN,CAAcglH,GAAd,CAAJ,EAAwB,OAAOA,GAAP;EACzB;;EAED,SAASE,uBAAT,CAA+BF,GAA/B,EAAoCj0H,CAApC,EAAuC;EACrC,MAAIs0H,EAAE,GAAGL,GAAG,KAAK,OAAO3tH,MAAP,KAAkB,WAAlB,IAAiC2tH,GAAG,CAAC3tH,MAAM,CAACC,QAAR,CAApC,IAAyD0tH,GAAG,CAAC,YAAD,CAAjE,CAAZ;;EAEA,MAAIK,EAAE,IAAI,IAAV,EAAgB;EAChB,MAAIC,IAAI,GAAG,EAAX;EACA,MAAIC,EAAE,GAAG,IAAT;EACA,MAAIC,EAAE,GAAG,KAAT;;EAEA,MAAIC,EAAJ,EAAQC,EAAR;;EAEA,MAAI;EACF,SAAKL,EAAE,GAAGA,EAAE,CAACn0H,IAAH,CAAQ8zH,GAAR,CAAV,EAAwB,EAAEO,EAAE,GAAG,CAACE,EAAE,GAAGJ,EAAE,CAACvsE,IAAH,EAAN,EAAiBu0C,IAAxB,CAAxB,EAAuDk4B,EAAE,GAAG,IAA5D,EAAkE;EAChED,MAAAA,IAAI,CAACl1H,IAAL,CAAUq1H,EAAE,CAACzzH,KAAb;;EAEA,UAAIjB,CAAC,IAAIu0H,IAAI,CAACr0H,MAAL,KAAgBF,CAAzB,EAA4B;EAC7B;EACF,GAND,CAME,OAAOy+D,GAAP,EAAY;EACZg2D,IAAAA,EAAE,GAAG,IAAL;EACAE,IAAAA,EAAE,GAAGl2D,GAAL;EACD,GATD,SASU;EACR,QAAI;EACF,UAAI,CAAC+1D,EAAD,IAAOF,EAAE,CAAC,QAAD,CAAF,IAAgB,IAA3B,EAAiCA,EAAE,CAAC,QAAD,CAAF;EAClC,KAFD,SAEU;EACR,UAAIG,EAAJ,EAAQ,MAAME,EAAN;EACT;EACF;;EAED,SAAOJ,IAAP;EACD;;EAED,SAASH,6BAAT,CAAqC58B,CAArC,EAAwCo9B,MAAxC,EAAgD;EAC9C,MAAI,CAACp9B,CAAL,EAAQ;EACR,MAAI,OAAOA,CAAP,KAAa,QAAjB,EAA2B,OAAOq9B,mBAAiB,CAACr9B,CAAD,EAAIo9B,MAAJ,CAAxB;EAC3B,MAAIxzH,CAAC,GAAGgM,MAAM,CAAC5G,SAAP,CAAiBlG,QAAjB,CAA0BH,IAA1B,CAA+Bq3F,CAA/B,EAAkCz3F,KAAlC,CAAwC,CAAxC,EAA2C,CAAC,CAA5C,CAAR;EACA,MAAIqB,CAAC,KAAK,QAAN,IAAkBo2F,CAAC,CAAC31F,WAAxB,EAAqCT,CAAC,GAAGo2F,CAAC,CAAC31F,WAAF,CAAcuJ,IAAlB;EACrC,MAAIhK,CAAC,KAAK,KAAN,IAAeA,CAAC,KAAK,KAAzB,EAAgC,OAAO4N,KAAK,CAAC2/E,IAAN,CAAW6I,CAAX,CAAP;EAChC,MAAIp2F,CAAC,KAAK,WAAN,IAAqB,2CAA2C4K,IAA3C,CAAgD5K,CAAhD,CAAzB,EAA6E,OAAOyzH,mBAAiB,CAACr9B,CAAD,EAAIo9B,MAAJ,CAAxB;EAC9E;;EAED,SAASC,mBAAT,CAA2BZ,GAA3B,EAAgChgH,GAAhC,EAAqC;EACnC,MAAIA,GAAG,IAAI,IAAP,IAAeA,GAAG,GAAGggH,GAAG,CAAC/zH,MAA7B,EAAqC+T,GAAG,GAAGggH,GAAG,CAAC/zH,MAAV;;EAErC,OAAK,IAAIF,CAAC,GAAG,CAAR,EAAW80H,IAAI,GAAG,IAAI9lH,KAAJ,CAAUiF,GAAV,CAAvB,EAAuCjU,CAAC,GAAGiU,GAA3C,EAAgDjU,CAAC,EAAjD,EAAqD80H,IAAI,CAAC90H,CAAD,CAAJ,GAAUi0H,GAAG,CAACj0H,CAAD,CAAb;;EAErD,SAAO80H,IAAP;EACD;;EAED,SAAST,kBAAT,GAA4B;EAC1B,QAAM,IAAIn8F,SAAJ,CAAc,2IAAd,CAAN;EACD;;EAED,IAAI68F,MAAI,GAAG,SAASA,IAAT,CAAc3pH,IAAd,EAAoB4pH,IAApB,EAA0B;EACnC,MAAIC,YAAY,GAAGD,IAAI,CAAC,SAAD,CAAvB;EAAA,MACIE,UAAU,GAAGD,YAAY,KAAK,KAAK,CAAtB,GAA0B,IAA1B,GAAiCA,YADlD;EAAA,MAEIE,kBAAkB,GAAGH,IAAI,CAACI,aAF9B;EAAA,MAGIA,aAAa,GAAGD,kBAAkB,KAAK,KAAK,CAA5B,GAAgC,IAAhC,GAAuCA,kBAH3D;EAAA,MAIIE,aAAa,GAAGL,IAAI,CAACM,QAJzB;EAAA,MAKIA,QAAQ,GAAGD,aAAa,KAAK,KAAK,CAAvB,GAA2B,UAAUE,MAAV,EAAkBviF,KAAlB,EAAyB,EAApD,GAAyDqiF,aALxE;;EAOAxB,EAAAA,iBAAe,CAAC,IAAD,EAAOkB,IAAP,CAAf;;EAEA,OAAK3pH,IAAL,GAAYA,IAAZ;EACA,OAAK8pH,UAAL,GAAkBA,UAAlB;EACA,OAAKE,aAAL,GAAqBA,aAArB;EACA,OAAKE,QAAL,GAAgBA,QAAhB;EACD,CAdD;;EAgBA,SAAS71H,OAAT,CAAgB+1H,KAAhB,EAAuB;EACrB,MAAIC,eAAe,GAAGD,KAAK,CAACE,SAA5B;EAAA,MACIA,SAAS,GAAGD,eAAe,KAAK,KAAK,CAAzB,GAA6B,YAAY;EACvD,WAAO,EAAP;EACD,GAFe,GAEZA,eAHJ;EAAA,MAIIE,WAAW,GAAGH,KAAK,CAACI,KAJxB;EAAA,MAKIC,QAAQ,GAAGF,WAAW,KAAK,KAAK,CAArB,GAAyB,EAAzB,GAA8BA,WAL7C;EAAA,MAMIG,aAAa,GAAGN,KAAK,CAACO,OAN1B;EAAA,MAOIA,OAAO,GAAGD,aAAa,KAAK,KAAK,CAAvB,GAA2B,EAA3B,GAAgCA,aAP9C;EAAA,MAQIE,aAAa,GAAGR,KAAK,CAACS,OAR1B;EAAA,MASIA,OAAO,GAAGD,aAAa,KAAK,KAAK,CAAvB,GAA2B,EAA3B,GAAgCA,aAT9C;EAAA,MAUIE,UAAU,GAAGV,KAAK,CAAC76E,IAVvB;EAAA,MAWIw7E,MAAM,GAAGD,UAAU,KAAK,KAAK,CAApB,GAAwB,YAAY,EAApC,GAAyCA,UAXtD;EAAA,MAYIE,YAAY,GAAGZ,KAAK,CAAChhH,MAZzB;EAAA,MAaI6hH,QAAQ,GAAGD,YAAY,KAAK,KAAK,CAAtB,GAA0B,YAAY,EAAtC,GAA2CA,YAb1D,CADqB;;EAgBrB,MAAIR,KAAK,GAAGxoH,MAAM,CAAC+wB,IAAP,CAAY03F,QAAZ,EAAsBjjG,GAAtB,CAA0B,UAAU0jG,QAAV,EAAoB;EACxD,WAAO,IAAIvB,MAAJ,CAASuB,QAAT,EAAmBT,QAAQ,CAACS,QAAD,CAA3B,CAAP;EACD,GAFW,CAAZ;EAGA,SAAO,YAAY;EACjB,QAAI/kH,OAAO,GAAG7K,SAAS,CAACxG,MAAV,GAAmB,CAAnB,IAAwBwG,SAAS,CAAC,CAAD,CAAT,KAAiBxH,SAAzC,GAAqDwH,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAAlF,CADiB;;EAGjB,QAAIssC,KAAK,GAAG5lC,MAAM,CAACkxB,MAAP,CAAc,EAAd,EAAkBo3F,SAAS,YAAY7L,QAArB,GAAgC6L,SAAS,CAACnkH,OAAD,CAAzC,GAAqDmkH,SAAvE;EACZ;EACEa,MAAAA,WAAW,EAAE;EADf,KADY,CAAZ,CAHiB;;EAQjB,QAAIC,YAAY,GAAG,EAAnB,CARiB;;EAUjB,aAASC,IAAT,CAAcC,WAAd,EAA2B;EACzBC,MAAAA,UAAU,CAACD,WAAD,EAAcnlH,OAAd,CAAV;EACAqlH,MAAAA,MAAM;EACN,aAAOH,IAAP;EACD;;EAED,QAAIE,UAAU,GAAG,SAASA,UAAT,CAAoBD,WAApB,EAAiCnlH,OAAjC,EAA0C;EACzD4kH,MAAAA,MAAM,CAACh2H,IAAP,CAAYs2H,IAAZ,EAAkBC,WAAlB,EAA+B1jF,KAA/B,EAAsCzhC,OAAtC;EACAyhC,MAAAA,KAAK,CAACujF,WAAN,GAAoB,IAApB;EACD,KAHD;;EAKA,QAAIK,MAAM,GAAGxD,YAAQ,CAAC,YAAY;EAChC,UAAI,CAACpgF,KAAK,CAACujF,WAAX,EAAwB;EACtB;EACD;;EAEDF,MAAAA,QAAQ,CAACl2H,IAAT,CAAcs2H,IAAd,EAAoBzjF,KAApB,EAA2BwjF,YAA3B;EACAA,MAAAA,YAAY,GAAG,EAAf;EACD,KAPoB,EAOlB,CAPkB,CAArB,CArBiB;;EA8BjBZ,IAAAA,KAAK,CAACtsD,OAAN,CAAc,UAAUutD,IAAV,EAAgB;EAC5BJ,MAAAA,IAAI,CAACI,IAAI,CAACzrH,IAAN,CAAJ,GAAkB0rH,UAAU,CAACD,IAAD,CAA5B;;EAEA,eAASC,UAAT,CAAoBC,KAApB,EAA2B;EACzB,YAAIF,IAAI,GAAGE,KAAK,CAAC3rH,IAAjB;EAAA,YACI4rH,mBAAmB,GAAGD,KAAK,CAAC3B,aADhC;EAAA,YAEI6B,QAAQ,GAAGD,mBAAmB,KAAK,KAAK,CAA7B,GAAiC,KAAjC,GAAyCA,mBAFxD;EAAA,YAGIE,cAAc,GAAGH,KAAK,CAACzB,QAH3B;EAAA,YAIIA,QAAQ,GAAG4B,cAAc,KAAK,KAAK,CAAxB,GAA4B,UAAU3B,MAAV,EAAkBviF,KAAlB,EAAyB,EAArD,GAA0DkkF,cAJzE;EAAA,YAKIC,gBAAgB,GAAGJ,KAAK,CAAC7B,UAL7B;EAAA,YAMIA,UAAU,GAAGiC,gBAAgB,KAAK,KAAK,CAA1B,GAA8B,IAA9B,GAAqCA,gBANtD;EAOA,eAAO,UAAU1c,CAAV,EAAa;EAClB,cAAI2c,MAAM,GAAGpkF,KAAK,CAAC6jF,IAAD,CAAlB;;EAEA,cAAI,CAACnwH,SAAS,CAACxG,MAAf,EAAuB;EACrB,mBAAOk3H,MAAP;EACD,WALiB;;;EAQlB,cAAIC,GAAG,GAAG5c,CAAC,KAAKv7G,SAAN,GAAkBg2H,UAAlB,GAA+Bza,CAAzC,CARkB;;EAUlBznE,UAAAA,KAAK,CAAC6jF,IAAD,CAAL,GAAcQ,GAAd;EACA/B,UAAAA,QAAQ,CAACn1H,IAAT,CAAcs2H,IAAd,EAAoBY,GAApB,EAAyBrkF,KAAzB,EAAgCokF,MAAhC,EAXkB;;EAalB,WAACZ,YAAY,CAAC3W,cAAb,CAA4BgX,IAA5B,CAAD,KAAuCL,YAAY,CAACK,IAAD,CAAZ,GAAqBO,MAA5D;;EAEA,cAAIH,QAAJ,EAAc;EACZL,YAAAA,MAAM;EACP;;EAED,iBAAOH,IAAP;EACD,SApBD;EAqBD;EACF,KAjCD,EA9BiB;;EAiEjBrpH,IAAAA,MAAM,CAAC+wB,IAAP,CAAY43F,OAAZ,EAAqBzsD,OAArB,CAA6B,UAAUzwB,UAAV,EAAsB;EACjD49E,MAAAA,IAAI,CAAC59E,UAAD,CAAJ,GAAmB,YAAY;EAC7B,YAAIy+E,mBAAJ;;EAEA,aAAK,IAAIC,IAAI,GAAG7wH,SAAS,CAACxG,MAArB,EAA6Bk/G,IAAI,GAAG,IAAIpwG,KAAJ,CAAUuoH,IAAV,CAApC,EAAqDC,IAAI,GAAG,CAAjE,EAAoEA,IAAI,GAAGD,IAA3E,EAAiFC,IAAI,EAArF,EAAyF;EACvFpY,UAAAA,IAAI,CAACoY,IAAD,CAAJ,GAAa9wH,SAAS,CAAC8wH,IAAD,CAAtB;EACD;;EAED,eAAO,CAACF,mBAAmB,GAAGvB,OAAO,CAACl9E,UAAD,CAA9B,EAA4C14C,IAA5C,CAAiD+9D,KAAjD,CAAuDo5D,mBAAvD,EAA4E,CAACb,IAAD,EAAOzjF,KAAP,EAAc+wC,MAAd,CAAqBq7B,IAArB,CAA5E,CAAP;EACD,OARD;EASD,KAVD,EAjEiB;;EA6EjBhyG,IAAAA,MAAM,CAACqqH,OAAP,CAAexB,OAAf,EAAwB3sD,OAAxB,CAAgC,UAAUouD,KAAV,EAAiB;EAC/C,UAAIC,KAAK,GAAG3D,gBAAc,CAAC0D,KAAD,EAAQ,CAAR,CAA1B;EAAA,UACIE,KAAK,GAAGD,KAAK,CAAC,CAAD,CADjB;EAAA,UAEI93H,MAAM,GAAG83H,KAAK,CAAC,CAAD,CAFlB;;EAIA,aAAOlB,IAAI,CAACmB,KAAD,CAAJ,GAAcnB,IAAI,CAAC52H,MAAD,CAAzB;EACD,KAND,EA7EiB;;EAqFjB42H,IAAAA,IAAI,CAACoB,UAAL,GAAkB,YAAY;EAC5BjC,MAAAA,KAAK,CAACtsD,OAAN,CAAc,UAAUutD,IAAV,EAAgB;EAC5BJ,QAAAA,IAAI,CAACI,IAAI,CAACzrH,IAAN,CAAJ,CAAgByrH,IAAI,CAAC3B,UAArB;EACD,OAFD;EAGA,aAAOuB,IAAP;EACD,KALD,CArFiB;;;EA6FjBA,IAAAA,IAAI,CAACoB,UAAL,GA7FiB;;EA+FjB7kF,IAAAA,KAAK,CAAC8kF,SAAN,GAAkBlB,MAAlB,CA/FiB;;EAiGjB,WAAOH,IAAP;EACD,GAlGD;EAmGD;;ECzMD,IAAIh3H,OAAK,GAAI,UAAUqW,CAAV,EAAa;EACxB,SAAOA,CAAC,YAAY+zG,QAAb,GAAwB/zG,CAAxB;EAAA,IACL,OAAOA,CAAP,KAAa,QAAb,GAAwB,UAAUiiH,GAAV,EAAe;EACvC,WAAOA,GAAG,CAACjiH,CAAD,CAAV;EACD,GAFC;EAAA,IAGA,UAAUiiH,GAAV,EAAe;EACf,WAAOjiH,CAAP;EACD,GAND;EAOD,CARD;;ECAO,MAAMkiH,SAAN,SAAwBxvD,GAAxB,CAA4B;EACjC3mE,EAAAA,WAAW,CAAC41H,OAAD,EAAU/qG,GAAG,GAAGurG,KAAhB,EAAuB;EAChC;EACA7qH,IAAAA,MAAM,CAACka,gBAAP,CAAwB,IAAxB,EAA8B;EAAC4wG,MAAAA,OAAO,EAAE;EAACj3H,QAAAA,KAAK,EAAE,IAAIunE,GAAJ;EAAR,OAAV;EAA8BgvD,MAAAA,IAAI,EAAE;EAACv2H,QAAAA,KAAK,EAAEyrB;EAAR;EAApC,KAA9B;EACA,QAAI+qG,OAAO,IAAI,IAAf,EAAqB,KAAK,MAAM,CAAC/qG,GAAD,EAAMzrB,KAAN,CAAX,IAA2Bw2H,OAA3B,EAAoC,KAAKz1H,GAAL,CAAS0qB,GAAT,EAAczrB,KAAd;EAC1D;;EACDyoC,EAAAA,GAAG,CAAChd,GAAD,EAAM;EACP,WAAO,MAAMgd,GAAN,CAAUyuF,UAAU,CAAC,IAAD,EAAOzrG,GAAP,CAApB,CAAP;EACD;;EACDssB,EAAAA,GAAG,CAACtsB,GAAD,EAAM;EACP,WAAO,MAAMssB,GAAN,CAAUm/E,UAAU,CAAC,IAAD,EAAOzrG,GAAP,CAApB,CAAP;EACD;;EACD1qB,EAAAA,GAAG,CAAC0qB,GAAD,EAAMzrB,KAAN,EAAa;EACd,WAAO,MAAMe,GAAN,CAAUo2H,UAAU,CAAC,IAAD,EAAO1rG,GAAP,CAApB,EAAiCzrB,KAAjC,CAAP;EACD;;EACD2oC,EAAAA,MAAM,CAACld,GAAD,EAAM;EACV,WAAO,MAAMkd,MAAN,CAAayuF,aAAa,CAAC,IAAD,EAAO3rG,GAAP,CAA1B,CAAP;EACD;;EAjBgC;;EAqCnC,SAASyrG,UAAT,CAAoB;EAACD,EAAAA,OAAD;EAAUV,EAAAA;EAAV,CAApB,EAAqCv2H,KAArC,EAA4C;EAC1C,QAAMyrB,GAAG,GAAG8qG,IAAI,CAACv2H,KAAD,CAAhB;;EACA,SAAOi3H,OAAO,CAACl/E,GAAR,CAAYtsB,GAAZ,IAAmBwrG,OAAO,CAACxuF,GAAR,CAAYhd,GAAZ,CAAnB,GAAsCzrB,KAA7C;EACD;;EAED,SAASm3H,UAAT,CAAoB;EAACF,EAAAA,OAAD;EAAUV,EAAAA;EAAV,CAApB,EAAqCv2H,KAArC,EAA4C;EAC1C,QAAMyrB,GAAG,GAAG8qG,IAAI,CAACv2H,KAAD,CAAhB;;EACA,MAAIi3H,OAAO,CAACl/E,GAAR,CAAYtsB,GAAZ,CAAJ,EAAsB,OAAOwrG,OAAO,CAACxuF,GAAR,CAAYhd,GAAZ,CAAP;;EACtBwrG,EAAAA,OAAO,CAACl2H,GAAR,CAAY0qB,GAAZ,EAAiBzrB,KAAjB;;EACA,SAAOA,KAAP;EACD;;EAED,SAASo3H,aAAT,CAAuB;EAACH,EAAAA,OAAD;EAAUV,EAAAA;EAAV,CAAvB,EAAwCv2H,KAAxC,EAA+C;EAC7C,QAAMyrB,GAAG,GAAG8qG,IAAI,CAACv2H,KAAD,CAAhB;;EACA,MAAIi3H,OAAO,CAACl/E,GAAR,CAAYtsB,GAAZ,CAAJ,EAAsB;EACpBzrB,IAAAA,KAAK,GAAGi3H,OAAO,CAACxuF,GAAR,CAAYzoC,KAAZ,CAAR;;EACAi3H,IAAAA,OAAO,CAACtuF,MAAR,CAAeld,GAAf;EACD;;EACD,SAAOzrB,KAAP;EACD;;EAED,SAASg3H,KAAT,CAAeh3H,KAAf,EAAsB;EACpB,SAAOA,KAAK,KAAK,IAAV,IAAkB,OAAOA,KAAP,KAAiB,QAAnC,GAA8CA,KAAK,CAACq3H,OAAN,EAA9C,GAAgEr3H,KAAvE;EACD;;EC5Dc,SAASE,GAAT,CAAasrB,MAAb,EAAqB8rG,OAArB,EAA8B;EAC3C,MAAIp3H,GAAJ;;EACA,MAAIo3H,OAAO,KAAKr5H,SAAhB,EAA2B;EACzB,SAAK,MAAM+B,KAAX,IAAoBwrB,MAApB,EAA4B;EAC1B,UAAIxrB,KAAK,IAAI,IAAT,KACIE,GAAG,GAAGF,KAAN,IAAgBE,GAAG,KAAKjC,SAAR,IAAqB+B,KAAK,IAAIA,KADlD,CAAJ,EAC+D;EAC7DE,QAAAA,GAAG,GAAGF,KAAN;EACD;EACF;EACF,GAPD,MAOO;EACL,QAAIxB,KAAK,GAAG,CAAC,CAAb;;EACA,SAAK,IAAIwB,KAAT,IAAkBwrB,MAAlB,EAA0B;EACxB,UAAI,CAACxrB,KAAK,GAAGs3H,OAAO,CAACt3H,KAAD,EAAQ,EAAExB,KAAV,EAAiBgtB,MAAjB,CAAhB,KAA6C,IAA7C,KACItrB,GAAG,GAAGF,KAAN,IAAgBE,GAAG,KAAKjC,SAAR,IAAqB+B,KAAK,IAAIA,KADlD,CAAJ,EAC+D;EAC7DE,QAAAA,GAAG,GAAGF,KAAN;EACD;EACF;EACF;;EACD,SAAOE,GAAP;EACD;;ECnBc,SAASD,GAAT,CAAaurB,MAAb,EAAqB8rG,OAArB,EAA8B;EAC3C,MAAIr3H,GAAJ;;EACA,MAAIq3H,OAAO,KAAKr5H,SAAhB,EAA2B;EACzB,SAAK,MAAM+B,KAAX,IAAoBwrB,MAApB,EAA4B;EAC1B,UAAIxrB,KAAK,IAAI,IAAT,KACIC,GAAG,GAAGD,KAAN,IAAgBC,GAAG,KAAKhC,SAAR,IAAqB+B,KAAK,IAAIA,KADlD,CAAJ,EAC+D;EAC7DC,QAAAA,GAAG,GAAGD,KAAN;EACD;EACF;EACF,GAPD,MAOO;EACL,QAAIxB,KAAK,GAAG,CAAC,CAAb;;EACA,SAAK,IAAIwB,KAAT,IAAkBwrB,MAAlB,EAA0B;EACxB,UAAI,CAACxrB,KAAK,GAAGs3H,OAAO,CAACt3H,KAAD,EAAQ,EAAExB,KAAV,EAAiBgtB,MAAjB,CAAhB,KAA6C,IAA7C,KACIvrB,GAAG,GAAGD,KAAN,IAAgBC,GAAG,KAAKhC,SAAR,IAAqB+B,KAAK,IAAIA,KADlD,CAAJ,EAC+D;EAC7DC,QAAAA,GAAG,GAAGD,KAAN;EACD;EACF;EACF;;EACD,SAAOC,GAAP;EACD;;ECnBD,SAASs3H,+BAAT,CAAuCrqH,MAAvC,EAA+CsqH,QAA/C,EAAyD;EACvD,MAAItqH,MAAM,IAAI,IAAd,EAAoB,OAAO,EAAP;EACpB,MAAItO,MAAM,GAAG,EAAb;EACA,MAAI64H,UAAU,GAAGtrH,MAAM,CAAC+wB,IAAP,CAAYhwB,MAAZ,CAAjB;EACA,MAAIue,GAAJ,EAAS1sB,CAAT;;EAEA,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG04H,UAAU,CAACx4H,MAA3B,EAAmCF,CAAC,EAApC,EAAwC;EACtC0sB,IAAAA,GAAG,GAAGgsG,UAAU,CAAC14H,CAAD,CAAhB;EACA,QAAIy4H,QAAQ,CAACr5H,OAAT,CAAiBstB,GAAjB,KAAyB,CAA7B,EAAgC;EAChC7sB,IAAAA,MAAM,CAAC6sB,GAAD,CAAN,GAAcve,MAAM,CAACue,GAAD,CAApB;EACD;;EAED,SAAO7sB,MAAP;EACD;;EAED,SAAS84H,0BAAT,CAAkCxqH,MAAlC,EAA0CsqH,QAA1C,EAAoD;EAClD,MAAItqH,MAAM,IAAI,IAAd,EAAoB,OAAO,EAAP;;EAEpB,MAAItO,MAAM,GAAG24H,+BAA6B,CAACrqH,MAAD,EAASsqH,QAAT,CAA1C;;EAEA,MAAI/rG,GAAJ,EAAS1sB,CAAT;;EAEA,MAAIoN,MAAM,CAACwrH,qBAAX,EAAkC;EAChC,QAAIC,gBAAgB,GAAGzrH,MAAM,CAACwrH,qBAAP,CAA6BzqH,MAA7B,CAAvB;;EAEA,SAAKnO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG64H,gBAAgB,CAAC34H,MAAjC,EAAyCF,CAAC,EAA1C,EAA8C;EAC5C0sB,MAAAA,GAAG,GAAGmsG,gBAAgB,CAAC74H,CAAD,CAAtB;EACA,UAAIy4H,QAAQ,CAACr5H,OAAT,CAAiBstB,GAAjB,KAAyB,CAA7B,EAAgC;EAChC,UAAI,CAACtf,MAAM,CAAC5G,SAAP,CAAiBsyH,oBAAjB,CAAsC34H,IAAtC,CAA2CgO,MAA3C,EAAmDue,GAAnD,CAAL,EAA8D;EAC9D7sB,MAAAA,MAAM,CAAC6sB,GAAD,CAAN,GAAcve,MAAM,CAACue,GAAD,CAApB;EACD;EACF;;EAED,SAAO7sB,MAAP;EACD;;EAED,SAASm0H,gBAAT,CAAwBC,GAAxB,EAA6Bj0H,CAA7B,EAAgC;EAC9B,SAAOk0H,iBAAe,CAACD,GAAD,CAAf,IAAwBE,uBAAqB,CAACF,GAAD,EAAMj0H,CAAN,CAA7C,IAAyDo0H,6BAA2B,CAACH,GAAD,EAAMj0H,CAAN,CAApF,IAAgGq0H,kBAAgB,EAAvH;EACD;;EAED,SAAS0E,oBAAT,CAA4B9E,GAA5B,EAAiC;EAC/B,SAAO+E,oBAAkB,CAAC/E,GAAD,CAAlB,IAA2BgF,kBAAgB,CAAChF,GAAD,CAA3C,IAAoDG,6BAA2B,CAACH,GAAD,CAA/E,IAAwFiF,oBAAkB,EAAjH;EACD;;EAED,SAASF,oBAAT,CAA4B/E,GAA5B,EAAiC;EAC/B,MAAIjlH,KAAK,CAACC,OAAN,CAAcglH,GAAd,CAAJ,EAAwB,OAAOY,mBAAiB,CAACZ,GAAD,CAAxB;EACzB;;EAED,SAASC,iBAAT,CAAyBD,GAAzB,EAA8B;EAC5B,MAAIjlH,KAAK,CAACC,OAAN,CAAcglH,GAAd,CAAJ,EAAwB,OAAOA,GAAP;EACzB;;EAED,SAASgF,kBAAT,CAA0BE,IAA1B,EAAgC;EAC9B,MAAI,OAAO7yH,MAAP,KAAkB,WAAlB,IAAiC6yH,IAAI,CAAC7yH,MAAM,CAACC,QAAR,CAAJ,IAAyB,IAA1D,IAAkE4yH,IAAI,CAAC,YAAD,CAAJ,IAAsB,IAA5F,EAAkG,OAAOnqH,KAAK,CAAC2/E,IAAN,CAAWwqC,IAAX,CAAP;EACnG;;EAED,SAAShF,uBAAT,CAA+BF,GAA/B,EAAoCj0H,CAApC,EAAuC;EACrC,MAAIs0H,EAAE,GAAGL,GAAG,KAAK,OAAO3tH,MAAP,KAAkB,WAAlB,IAAiC2tH,GAAG,CAAC3tH,MAAM,CAACC,QAAR,CAApC,IAAyD0tH,GAAG,CAAC,YAAD,CAAjE,CAAZ;;EAEA,MAAIK,EAAE,IAAI,IAAV,EAAgB;EAChB,MAAIC,IAAI,GAAG,EAAX;EACA,MAAIC,EAAE,GAAG,IAAT;EACA,MAAIC,EAAE,GAAG,KAAT;;EAEA,MAAIC,EAAJ,EAAQC,EAAR;;EAEA,MAAI;EACF,SAAKL,EAAE,GAAGA,EAAE,CAACn0H,IAAH,CAAQ8zH,GAAR,CAAV,EAAwB,EAAEO,EAAE,GAAG,CAACE,EAAE,GAAGJ,EAAE,CAACvsE,IAAH,EAAN,EAAiBu0C,IAAxB,CAAxB,EAAuDk4B,EAAE,GAAG,IAA5D,EAAkE;EAChED,MAAAA,IAAI,CAACl1H,IAAL,CAAUq1H,EAAE,CAACzzH,KAAb;;EAEA,UAAIjB,CAAC,IAAIu0H,IAAI,CAACr0H,MAAL,KAAgBF,CAAzB,EAA4B;EAC7B;EACF,GAND,CAME,OAAOy+D,GAAP,EAAY;EACZg2D,IAAAA,EAAE,GAAG,IAAL;EACAE,IAAAA,EAAE,GAAGl2D,GAAL;EACD,GATD,SASU;EACR,QAAI;EACF,UAAI,CAAC+1D,EAAD,IAAOF,EAAE,CAAC,QAAD,CAAF,IAAgB,IAA3B,EAAiCA,EAAE,CAAC,QAAD,CAAF;EAClC,KAFD,SAEU;EACR,UAAIG,EAAJ,EAAQ,MAAME,EAAN;EACT;EACF;;EAED,SAAOJ,IAAP;EACD;;EAED,SAASH,6BAAT,CAAqC58B,CAArC,EAAwCo9B,MAAxC,EAAgD;EAC9C,MAAI,CAACp9B,CAAL,EAAQ;EACR,MAAI,OAAOA,CAAP,KAAa,QAAjB,EAA2B,OAAOq9B,mBAAiB,CAACr9B,CAAD,EAAIo9B,MAAJ,CAAxB;EAC3B,MAAIxzH,CAAC,GAAGgM,MAAM,CAAC5G,SAAP,CAAiBlG,QAAjB,CAA0BH,IAA1B,CAA+Bq3F,CAA/B,EAAkCz3F,KAAlC,CAAwC,CAAxC,EAA2C,CAAC,CAA5C,CAAR;EACA,MAAIqB,CAAC,KAAK,QAAN,IAAkBo2F,CAAC,CAAC31F,WAAxB,EAAqCT,CAAC,GAAGo2F,CAAC,CAAC31F,WAAF,CAAcuJ,IAAlB;EACrC,MAAIhK,CAAC,KAAK,KAAN,IAAeA,CAAC,KAAK,KAAzB,EAAgC,OAAO4N,KAAK,CAAC2/E,IAAN,CAAW6I,CAAX,CAAP;EAChC,MAAIp2F,CAAC,KAAK,WAAN,IAAqB,2CAA2C4K,IAA3C,CAAgD5K,CAAhD,CAAzB,EAA6E,OAAOyzH,mBAAiB,CAACr9B,CAAD,EAAIo9B,MAAJ,CAAxB;EAC9E;;EAED,SAASC,mBAAT,CAA2BZ,GAA3B,EAAgChgH,GAAhC,EAAqC;EACnC,MAAIA,GAAG,IAAI,IAAP,IAAeA,GAAG,GAAGggH,GAAG,CAAC/zH,MAA7B,EAAqC+T,GAAG,GAAGggH,GAAG,CAAC/zH,MAAV;;EAErC,OAAK,IAAIF,CAAC,GAAG,CAAR,EAAW80H,IAAI,GAAG,IAAI9lH,KAAJ,CAAUiF,GAAV,CAAvB,EAAuCjU,CAAC,GAAGiU,GAA3C,EAAgDjU,CAAC,EAAjD,EAAqD80H,IAAI,CAAC90H,CAAD,CAAJ,GAAUi0H,GAAG,CAACj0H,CAAD,CAAb;;EAErD,SAAO80H,IAAP;EACD;;EAED,SAASoE,oBAAT,GAA8B;EAC5B,QAAM,IAAIhhG,SAAJ,CAAc,sIAAd,CAAN;EACD;;EAED,SAASm8F,kBAAT,GAA4B;EAC1B,QAAM,IAAIn8F,SAAJ,CAAc,2IAAd,CAAN;EACD;;EAED,SAASkhG,YAAT,CAAsBC,KAAtB,EAA6BC,IAA7B,EAAmC;EACjC,MAAI,OAAOD,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,KAAK,IAA3C,EAAiD,OAAOA,KAAP;EACjD,MAAIE,IAAI,GAAGF,KAAK,CAAC/yH,MAAM,CAACkzH,WAAR,CAAhB;;EAEA,MAAID,IAAI,KAAKr6H,SAAb,EAAwB;EACtB,QAAI0gG,GAAG,GAAG25B,IAAI,CAACp5H,IAAL,CAAUk5H,KAAV,EAAiBC,IAAI,IAAI,SAAzB,CAAV;EACA,QAAI,OAAO15B,GAAP,KAAe,QAAnB,EAA6B,OAAOA,GAAP;EAC7B,UAAM,IAAI1nE,SAAJ,CAAc,8CAAd,CAAN;EACD;;EAED,SAAO,CAACohG,IAAI,KAAK,QAAT,GAAoB36F,MAApB,GAA6B5qB,MAA9B,EAAsCslH,KAAtC,CAAP;EACD;;EAED,SAASI,cAAT,CAAwBpa,GAAxB,EAA6B;EAC3B,MAAI3yF,GAAG,GAAG0sG,YAAY,CAAC/Z,GAAD,EAAM,QAAN,CAAtB;;EAEA,SAAO,OAAO3yF,GAAP,KAAe,QAAf,GAA0BA,GAA1B,GAAgCiS,MAAM,CAACjS,GAAD,CAA7C;EACD;;EAED,IAAIjtB,OAAK,GAAI,YAAY;EACvB,MAAI8xD,IAAI,GAAG7qD,SAAS,CAACxG,MAAV,GAAmB,CAAnB,IAAwBwG,SAAS,CAAC,CAAD,CAAT,KAAiBxH,SAAzC,GAAqDwH,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAA/E;EACA,MAAIgzH,YAAY,GAAGhzH,SAAS,CAACxG,MAAV,GAAmB,CAAnB,IAAwBwG,SAAS,CAAC,CAAD,CAAT,KAAiBxH,SAAzC,GAAqDwH,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAAvF;EACA,MAAIizH,SAAS,GAAGjzH,SAAS,CAACxG,MAAV,GAAmB,CAAnB,IAAwBwG,SAAS,CAAC,CAAD,CAAT,KAAiBxH,SAAzC,GAAqDwH,SAAS,CAAC,CAAD,CAA9D,GAAoE,IAApF;EACA,MAAIkzH,WAAW,GAAGlzH,SAAS,CAACxG,MAAV,GAAmB,CAAnB,IAAwBwG,SAAS,CAAC,CAAD,CAAT,KAAiBxH,SAAzC,GAAqDwH,SAAS,CAAC,CAAD,CAA9D,GAAoE,KAAtF;EACA,MAAIy3B,IAAI,GAAG,CAACu7F,YAAY,YAAY1qH,KAAxB,GAAgC0qH,YAAY,CAACx5H,MAAb,GAAsBw5H,YAAtB,GAAqC,CAACx6H,SAAD,CAArE,GAAmF,CAACw6H,YAAD,CAApF,EAAoG9mG,GAApG,CAAwG,UAAUlG,GAAV,EAAe;EAChI,WAAO;EACLmtG,MAAAA,WAAW,EAAEntG,GADR;EAELotG,MAAAA,MAAM,EAAE,EAAEptG,GAAG,YAAYm9F,QAAjB;EAFH,KAAP;EAID,GALU,CAAX;EAMA,MAAIkQ,aAAa,GAAGxoE,IAAI,CAACyoE,MAAL,CAAY,UAAUp6B,GAAV,EAAeq6B,IAAf,EAAqB;EACnD,QAAIC,OAAO,GAAGt6B,GAAd;EACA,QAAIu6B,OAAO,GAAGF,IAAd;EACA97F,IAAAA,IAAI,CAACmrC,OAAL,CAAa,UAAU0rD,IAAV,EAAgB7M,GAAhB,EAAqB;EAChC,UAAI0R,WAAW,GAAG7E,IAAI,CAAC6E,WAAvB;EAAA,UACIC,MAAM,GAAG9E,IAAI,CAAC8E,MADlB;EAEA,UAAIptG,GAAJ;;EAEA,UAAIotG,MAAJ,EAAY;EACV,YAAIM,QAAQ,GAAGD,OAAf;EAAA,YACIE,OAAO,GAAGD,QAAQ,CAACP,WAAD,CADtB;EAAA,YAEIS,IAAI,GAAG3B,0BAAwB,CAACyB,QAAD,EAAW,CAACP,WAAD,EAAcjnG,GAAd,CAAkB6mG,cAAlB,CAAX,CAFnC;;EAIA/sG,QAAAA,GAAG,GAAG2tG,OAAN;EACAF,QAAAA,OAAO,GAAGG,IAAV;EACD,OAPD,MAOO;EACL5tG,QAAAA,GAAG,GAAGmtG,WAAW,CAACM,OAAD,EAAUhS,GAAV,CAAjB;EACD;;EAED,UAAIA,GAAG,GAAG,CAAN,GAAUhqF,IAAI,CAACj+B,MAAnB,EAA2B;EACzB,YAAI,CAACg6H,OAAO,CAACra,cAAR,CAAuBnzF,GAAvB,CAAL,EAAkC;EAChCwtG,UAAAA,OAAO,CAACxtG,GAAD,CAAP,GAAe,EAAf;EACD;;EAEDwtG,QAAAA,OAAO,GAAGA,OAAO,CAACxtG,GAAD,CAAjB;EACD,OAND,MAMO;EACL;EACA,YAAIitG,SAAJ,EAAe;EACb,cAAI,CAACO,OAAO,CAACra,cAAR,CAAuBnzF,GAAvB,CAAL,EAAkC;EAChCwtG,YAAAA,OAAO,CAACxtG,GAAD,CAAP,GAAe,EAAf;EACD;;EAEDwtG,UAAAA,OAAO,CAACxtG,GAAD,CAAP,CAAartB,IAAb,CAAkB86H,OAAlB;EACD,SAND,MAMO;EACLD,UAAAA,OAAO,CAACxtG,GAAD,CAAP,GAAeytG,OAAf;EACD;EACF;EACF,KAlCD;EAmCA,WAAOv6B,GAAP;EACD,GAvCmB,EAuCjB,EAvCiB,CAApB;;EAyCA,MAAI+5B,SAAS,YAAY9P,QAAzB,EAAmC;EACjC;EACA,KAAC,SAASmQ,MAAT,CAAgBxzB,IAAhB,EAAsB;EACrB,UAAInuB,KAAK,GAAG3xE,SAAS,CAACxG,MAAV,GAAmB,CAAnB,IAAwBwG,SAAS,CAAC,CAAD,CAAT,KAAiBxH,SAAzC,GAAqDwH,SAAS,CAAC,CAAD,CAA9D,GAAoE,CAAhF;;EAEA,UAAI2xE,KAAK,KAAKl6C,IAAI,CAACj+B,MAAnB,EAA2B;EACzBkN,QAAAA,MAAM,CAAC+wB,IAAP,CAAYqoE,IAAZ,EAAkBl9B,OAAlB,CAA0B,UAAUhR,CAAV,EAAa;EACrC,iBAAOkuC,IAAI,CAACluC,CAAD,CAAJ,GAAUqhE,SAAS,CAACnzB,IAAI,CAACluC,CAAD,CAAL,CAA1B;EACD,SAFD;EAGD,OAJD,MAIO;EACLlrD,QAAAA,MAAM,CAACqf,MAAP,CAAc+5E,IAAd,EAAoBl9B,OAApB,CAA4B,UAAUt/C,KAAV,EAAiB;EAC3C,iBAAOgwG,MAAM,CAAChwG,KAAD,EAAQquD,KAAK,GAAG,CAAhB,CAAb;EACD,SAFD;EAGD;EACF,KAZD,EAYG0hD,aAZH,EAFiC;;EAgBlC;;EAED,MAAIliE,MAAM,GAAGkiE,aAAb;;EAEA,MAAIH,WAAJ,EAAiB;EACf;EACA/hE,IAAAA,MAAM,GAAG,EAAT;;EAEA,KAAC,SAASjtE,OAAT,CAAiB47G,IAAjB,EAAuB;EACtB,UAAI+zB,OAAO,GAAG7zH,SAAS,CAACxG,MAAV,GAAmB,CAAnB,IAAwBwG,SAAS,CAAC,CAAD,CAAT,KAAiBxH,SAAzC,GAAqDwH,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAAlF;;EAEA,UAAI6zH,OAAO,CAACr6H,MAAR,KAAmBi+B,IAAI,CAACj+B,MAA5B,EAAoC;EAClC23D,QAAAA,MAAM,CAACx4D,IAAP,CAAY;EACV8+B,UAAAA,IAAI,EAAEo8F,OADI;EAEVC,UAAAA,IAAI,EAAEh0B;EAFI,SAAZ;EAID,OALD,MAKO;EACLp5F,QAAAA,MAAM,CAACqqH,OAAP,CAAejxB,IAAf,EAAqBl9B,OAArB,CAA6B,UAAUksD,KAAV,EAAiB;EAC5C,cAAIuB,KAAK,GAAG/C,gBAAc,CAACwB,KAAD,EAAQ,CAAR,CAA1B;EAAA,cACI9oG,GAAG,GAAGqqG,KAAK,CAAC,CAAD,CADf;EAAA,cAEIM,GAAG,GAAGN,KAAK,CAAC,CAAD,CAFf;;EAIA,iBAAOnsI,OAAO,CAACysI,GAAD,EAAM,GAAGtzC,MAAH,CAAUg1C,oBAAkB,CAACwB,OAAD,CAA5B,EAAuC,CAAC7tG,GAAD,CAAvC,CAAN,CAAd;EACD,SAND;EAOD;EACF,KAjBD,EAiBGqtG,aAjBH,EAJe;;;EAwBf,QAAIL,YAAY,YAAY1qH,KAAxB,IAAiC0qH,YAAY,CAACx5H,MAAb,KAAwB,CAAzD,IAA8D23D,MAAM,CAAC33D,MAAP,KAAkB,CAApF,EAAuF;EACrF;EACA23D,MAAAA,MAAM,CAAC,CAAD,CAAN,CAAU15B,IAAV,GAAiB,EAAjB;EACD;EACF;;EAED,SAAO05B,MAAP;EACD,CAvGD;;EChIA,SAAS4iE,SAAT,CAAiBl/G,MAAjB,EAAyBm/G,cAAzB,EAAyC;EACvC,MAAIv8F,IAAI,GAAG/wB,MAAM,CAAC+wB,IAAP,CAAY5iB,MAAZ,CAAX;;EAEA,MAAInO,MAAM,CAACwrH,qBAAX,EAAkC;EAChC,QAAI+B,OAAO,GAAGvtH,MAAM,CAACwrH,qBAAP,CAA6Br9G,MAA7B,CAAd;;EAEA,QAAIm/G,cAAJ,EAAoB;EAClBC,MAAAA,OAAO,GAAGA,OAAO,CAAC7wE,MAAR,CAAe,UAAU8wE,GAAV,EAAe;EACtC,eAAOxtH,MAAM,CAACytH,wBAAP,CAAgCt/G,MAAhC,EAAwCq/G,GAAxC,EAA6CpzG,UAApD;EACD,OAFS,CAAV;EAGD;;EAED2W,IAAAA,IAAI,CAAC9+B,IAAL,CAAU6+D,KAAV,CAAgB//B,IAAhB,EAAsBw8F,OAAtB;EACD;;EAED,SAAOx8F,IAAP;EACD;;EAED,SAAS28F,gBAAT,CAAwBj7H,MAAxB,EAAgC;EAC9B,OAAK,IAAIG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0G,SAAS,CAACxG,MAA9B,EAAsCF,CAAC,EAAvC,EAA2C;EACzC,QAAImO,MAAM,GAAGzH,SAAS,CAAC1G,CAAD,CAAT,IAAgB,IAAhB,GAAuB0G,SAAS,CAAC1G,CAAD,CAAhC,GAAsC,EAAnD;;EAEA,QAAIA,CAAC,GAAG,CAAR,EAAW;EACTy6H,MAAAA,SAAO,CAACrtH,MAAM,CAACe,MAAD,CAAP,EAAiB,IAAjB,CAAP,CAA8Bm7D,OAA9B,CAAsC,UAAU58C,GAAV,EAAe;EACnDquG,QAAAA,iBAAe,CAACl7H,MAAD,EAAS6sB,GAAT,EAAcve,MAAM,CAACue,GAAD,CAApB,CAAf;EACD,OAFD;EAGD,KAJD,MAIO,IAAItf,MAAM,CAAC4tH,yBAAX,EAAsC;EAC3C5tH,MAAAA,MAAM,CAACka,gBAAP,CAAwBznB,MAAxB,EAAgCuN,MAAM,CAAC4tH,yBAAP,CAAiC7sH,MAAjC,CAAhC;EACD,KAFM,MAEA;EACLssH,MAAAA,SAAO,CAACrtH,MAAM,CAACe,MAAD,CAAP,CAAP,CAAwBm7D,OAAxB,CAAgC,UAAU58C,GAAV,EAAe;EAC7Ctf,QAAAA,MAAM,CAACC,cAAP,CAAsBxN,MAAtB,EAA8B6sB,GAA9B,EAAmCtf,MAAM,CAACytH,wBAAP,CAAgC1sH,MAAhC,EAAwCue,GAAxC,CAAnC;EACD,OAFD;EAGD;EACF;;EAED,SAAO7sB,MAAP;EACD;;EAED,SAASk7H,iBAAT,CAAyBhD,GAAzB,EAA8BrrG,GAA9B,EAAmCzrB,KAAnC,EAA0C;EACxC,MAAIyrB,GAAG,IAAIqrG,GAAX,EAAgB;EACd3qH,IAAAA,MAAM,CAACC,cAAP,CAAsB0qH,GAAtB,EAA2BrrG,GAA3B,EAAgC;EAC9BzrB,MAAAA,KAAK,EAAEA,KADuB;EAE9BumB,MAAAA,UAAU,EAAE,IAFkB;EAG9BD,MAAAA,YAAY,EAAE,IAHgB;EAI9B0zG,MAAAA,QAAQ,EAAE;EAJoB,KAAhC;EAMD,GAPD,MAOO;EACLlD,IAAAA,GAAG,CAACrrG,GAAD,CAAH,GAAWzrB,KAAX;EACD;;EAED,SAAO82H,GAAP;EACD;;EAED,SAASS,+BAAT,CAAuCrqH,MAAvC,EAA+CsqH,QAA/C,EAAyD;EACvD,MAAItqH,MAAM,IAAI,IAAd,EAAoB,OAAO,EAAP;EACpB,MAAItO,MAAM,GAAG,EAAb;EACA,MAAI64H,UAAU,GAAGtrH,MAAM,CAAC+wB,IAAP,CAAYhwB,MAAZ,CAAjB;EACA,MAAIue,GAAJ,EAAS1sB,CAAT;;EAEA,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG04H,UAAU,CAACx4H,MAA3B,EAAmCF,CAAC,EAApC,EAAwC;EACtC0sB,IAAAA,GAAG,GAAGgsG,UAAU,CAAC14H,CAAD,CAAhB;EACA,QAAIy4H,QAAQ,CAACr5H,OAAT,CAAiBstB,GAAjB,KAAyB,CAA7B,EAAgC;EAChC7sB,IAAAA,MAAM,CAAC6sB,GAAD,CAAN,GAAcve,MAAM,CAACue,GAAD,CAApB;EACD;;EAED,SAAO7sB,MAAP;EACD;;EAED,SAAS84H,0BAAT,CAAkCxqH,MAAlC,EAA0CsqH,QAA1C,EAAoD;EAClD,MAAItqH,MAAM,IAAI,IAAd,EAAoB,OAAO,EAAP;;EAEpB,MAAItO,MAAM,GAAG24H,+BAA6B,CAACrqH,MAAD,EAASsqH,QAAT,CAA1C;;EAEA,MAAI/rG,GAAJ,EAAS1sB,CAAT;;EAEA,MAAIoN,MAAM,CAACwrH,qBAAX,EAAkC;EAChC,QAAIC,gBAAgB,GAAGzrH,MAAM,CAACwrH,qBAAP,CAA6BzqH,MAA7B,CAAvB;;EAEA,SAAKnO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG64H,gBAAgB,CAAC34H,MAAjC,EAAyCF,CAAC,EAA1C,EAA8C;EAC5C0sB,MAAAA,GAAG,GAAGmsG,gBAAgB,CAAC74H,CAAD,CAAtB;EACA,UAAIy4H,QAAQ,CAACr5H,OAAT,CAAiBstB,GAAjB,KAAyB,CAA7B,EAAgC;EAChC,UAAI,CAACtf,MAAM,CAAC5G,SAAP,CAAiBsyH,oBAAjB,CAAsC34H,IAAtC,CAA2CgO,MAA3C,EAAmDue,GAAnD,CAAL,EAA8D;EAC9D7sB,MAAAA,MAAM,CAAC6sB,GAAD,CAAN,GAAcve,MAAM,CAACue,GAAD,CAApB;EACD;EACF;;EAED,SAAO7sB,MAAP;EACD;;EAED,SAASm0H,gBAAT,CAAwBC,GAAxB,EAA6Bj0H,CAA7B,EAAgC;EAC9B,SAAOk0H,iBAAe,CAACD,GAAD,CAAf,IAAwBE,uBAAqB,CAACF,GAAD,EAAMj0H,CAAN,CAA7C,IAAyDo0H,6BAA2B,CAACH,GAAD,EAAMj0H,CAAN,CAApF,IAAgGq0H,kBAAgB,EAAvH;EACD;;EAED,SAAS0E,oBAAT,CAA4B9E,GAA5B,EAAiC;EAC/B,SAAO+E,oBAAkB,CAAC/E,GAAD,CAAlB,IAA2BgF,kBAAgB,CAAChF,GAAD,CAA3C,IAAoDG,6BAA2B,CAACH,GAAD,CAA/E,IAAwFiF,oBAAkB,EAAjH;EACD;;EAED,SAASF,oBAAT,CAA4B/E,GAA5B,EAAiC;EAC/B,MAAIjlH,KAAK,CAACC,OAAN,CAAcglH,GAAd,CAAJ,EAAwB,OAAOY,mBAAiB,CAACZ,GAAD,CAAxB;EACzB;;EAED,SAASC,iBAAT,CAAyBD,GAAzB,EAA8B;EAC5B,MAAIjlH,KAAK,CAACC,OAAN,CAAcglH,GAAd,CAAJ,EAAwB,OAAOA,GAAP;EACzB;;EAED,SAASgF,kBAAT,CAA0BE,IAA1B,EAAgC;EAC9B,MAAI,OAAO7yH,MAAP,KAAkB,WAAlB,IAAiC6yH,IAAI,CAAC7yH,MAAM,CAACC,QAAR,CAAJ,IAAyB,IAA1D,IAAkE4yH,IAAI,CAAC,YAAD,CAAJ,IAAsB,IAA5F,EAAkG,OAAOnqH,KAAK,CAAC2/E,IAAN,CAAWwqC,IAAX,CAAP;EACnG;;EAED,SAAShF,uBAAT,CAA+BF,GAA/B,EAAoCj0H,CAApC,EAAuC;EACrC,MAAIs0H,EAAE,GAAGL,GAAG,KAAK,OAAO3tH,MAAP,KAAkB,WAAlB,IAAiC2tH,GAAG,CAAC3tH,MAAM,CAACC,QAAR,CAApC,IAAyD0tH,GAAG,CAAC,YAAD,CAAjE,CAAZ;;EAEA,MAAIK,EAAE,IAAI,IAAV,EAAgB;EAChB,MAAIC,IAAI,GAAG,EAAX;EACA,MAAIC,EAAE,GAAG,IAAT;EACA,MAAIC,EAAE,GAAG,KAAT;;EAEA,MAAIC,EAAJ,EAAQC,EAAR;;EAEA,MAAI;EACF,SAAKL,EAAE,GAAGA,EAAE,CAACn0H,IAAH,CAAQ8zH,GAAR,CAAV,EAAwB,EAAEO,EAAE,GAAG,CAACE,EAAE,GAAGJ,EAAE,CAACvsE,IAAH,EAAN,EAAiBu0C,IAAxB,CAAxB,EAAuDk4B,EAAE,GAAG,IAA5D,EAAkE;EAChED,MAAAA,IAAI,CAACl1H,IAAL,CAAUq1H,EAAE,CAACzzH,KAAb;;EAEA,UAAIjB,CAAC,IAAIu0H,IAAI,CAACr0H,MAAL,KAAgBF,CAAzB,EAA4B;EAC7B;EACF,GAND,CAME,OAAOy+D,GAAP,EAAY;EACZg2D,IAAAA,EAAE,GAAG,IAAL;EACAE,IAAAA,EAAE,GAAGl2D,GAAL;EACD,GATD,SASU;EACR,QAAI;EACF,UAAI,CAAC+1D,EAAD,IAAOF,EAAE,CAAC,QAAD,CAAF,IAAgB,IAA3B,EAAiCA,EAAE,CAAC,QAAD,CAAF;EAClC,KAFD,SAEU;EACR,UAAIG,EAAJ,EAAQ,MAAME,EAAN;EACT;EACF;;EAED,SAAOJ,IAAP;EACD;;EAED,SAASH,6BAAT,CAAqC58B,CAArC,EAAwCo9B,MAAxC,EAAgD;EAC9C,MAAI,CAACp9B,CAAL,EAAQ;EACR,MAAI,OAAOA,CAAP,KAAa,QAAjB,EAA2B,OAAOq9B,mBAAiB,CAACr9B,CAAD,EAAIo9B,MAAJ,CAAxB;EAC3B,MAAIxzH,CAAC,GAAGgM,MAAM,CAAC5G,SAAP,CAAiBlG,QAAjB,CAA0BH,IAA1B,CAA+Bq3F,CAA/B,EAAkCz3F,KAAlC,CAAwC,CAAxC,EAA2C,CAAC,CAA5C,CAAR;EACA,MAAIqB,CAAC,KAAK,QAAN,IAAkBo2F,CAAC,CAAC31F,WAAxB,EAAqCT,CAAC,GAAGo2F,CAAC,CAAC31F,WAAF,CAAcuJ,IAAlB;EACrC,MAAIhK,CAAC,KAAK,KAAN,IAAeA,CAAC,KAAK,KAAzB,EAAgC,OAAO4N,KAAK,CAAC2/E,IAAN,CAAW6I,CAAX,CAAP;EAChC,MAAIp2F,CAAC,KAAK,WAAN,IAAqB,2CAA2C4K,IAA3C,CAAgD5K,CAAhD,CAAzB,EAA6E,OAAOyzH,mBAAiB,CAACr9B,CAAD,EAAIo9B,MAAJ,CAAxB;EAC9E;;EAED,SAASC,mBAAT,CAA2BZ,GAA3B,EAAgChgH,GAAhC,EAAqC;EACnC,MAAIA,GAAG,IAAI,IAAP,IAAeA,GAAG,GAAGggH,GAAG,CAAC/zH,MAA7B,EAAqC+T,GAAG,GAAGggH,GAAG,CAAC/zH,MAAV;;EAErC,OAAK,IAAIF,CAAC,GAAG,CAAR,EAAW80H,IAAI,GAAG,IAAI9lH,KAAJ,CAAUiF,GAAV,CAAvB,EAAuCjU,CAAC,GAAGiU,GAA3C,EAAgDjU,CAAC,EAAjD,EAAqD80H,IAAI,CAAC90H,CAAD,CAAJ,GAAUi0H,GAAG,CAACj0H,CAAD,CAAb;;EAErD,SAAO80H,IAAP;EACD;;EAED,SAASoE,oBAAT,GAA8B;EAC5B,QAAM,IAAIhhG,SAAJ,CAAc,sIAAd,CAAN;EACD;;EAED,SAASm8F,kBAAT,GAA4B;EAC1B,QAAM,IAAIn8F,SAAJ,CAAc,2IAAd,CAAN;EACD;;EAED,SAASgjG,UAAT,CAAoBj2C,IAApB,EAA0Bl9B,IAA1B,EAAgCozE,UAAhC,EAA4C;EAC1C,MAAItjE,MAAM,GAAG;EACXujE,IAAAA,KAAK,EAAE,EADI;EAEX5mH,IAAAA,MAAM,EAAE,EAFG;EAGX6mH,IAAAA,IAAI,EAAE;EAHK,GAAb;;EAMA,MAAI,CAACF,UAAL,EAAiB;EACf;EACA,QAAIG,OAAO,GAAG,IAAIC,GAAJ,CAAQt2C,IAAR,CAAd;EACA,QAAIu2C,OAAO,GAAG,IAAID,GAAJ,CAAQxzE,IAAR,CAAd;EACA,QAAIwzE,GAAJ,CAAQ,GAAGx3C,MAAH,CAAUg1C,oBAAkB,CAACuC,OAAD,CAA5B,EAAuCvC,oBAAkB,CAACyC,OAAD,CAAzD,CAAR,EAA6ElyD,OAA7E,CAAqF,UAAU2wD,IAAV,EAAgB;EACnG,UAAIl7H,IAAI,GAAG,CAACu8H,OAAO,CAACtiF,GAAR,CAAYihF,IAAZ,CAAD,GAAqB,OAArB,GAA+B,CAACuB,OAAO,CAACxiF,GAAR,CAAYihF,IAAZ,CAAD,GAAqB,MAArB,GAA8B,QAAxE;EACApiE,MAAAA,MAAM,CAAC94D,IAAD,CAAN,CAAaM,IAAb,CAAkBN,IAAI,KAAK,QAAT,GAAoB,CAACk7H,IAAD,EAAOA,IAAP,CAApB,GAAmCA,IAArD;EACD,KAHD;EAID,GARD,MAQO;EACL;EACA,QAAIwB,QAAQ,GAAGC,OAAO,CAACz2C,IAAD,EAAOk2C,UAAP,EAAmB,KAAnB,CAAtB;EACA,QAAIQ,QAAQ,GAAGD,OAAO,CAAC3zE,IAAD,EAAOozE,UAAP,EAAmB,KAAnB,CAAtB;EACA,QAAIS,IAAI,GAAGxuH,MAAM,CAACkxB,MAAP,CAAc,EAAd,EAAkBm9F,QAAlB,EAA4BE,QAA5B,CAAX;EACAvuH,IAAAA,MAAM,CAACqqH,OAAP,CAAemE,IAAf,EAAqBtyD,OAArB,CAA6B,UAAU0rD,IAAV,EAAgB;EAC3C,UAAIQ,KAAK,GAAGxB,gBAAc,CAACgB,IAAD,EAAO,CAAP,CAA1B;EAAA,UACInrG,EAAE,GAAG2rG,KAAK,CAAC,CAAD,CADd;EAAA,UAEIyE,IAAI,GAAGzE,KAAK,CAAC,CAAD,CAFhB;;EAIA,UAAIz2H,IAAI,GAAG,CAAC08H,QAAQ,CAAC5b,cAAT,CAAwBh2F,EAAxB,CAAD,GAA+B,OAA/B,GAAyC,CAAC8xG,QAAQ,CAAC9b,cAAT,CAAwBh2F,EAAxB,CAAD,GAA+B,MAA/B,GAAwC,QAA5F;EACAguC,MAAAA,MAAM,CAAC94D,IAAD,CAAN,CAAaM,IAAb,CAAkBN,IAAI,KAAK,QAAT,GAAoB,CAAC08H,QAAQ,CAAC5xG,EAAD,CAAT,EAAe8xG,QAAQ,CAAC9xG,EAAD,CAAvB,CAApB,GAAmDowG,IAArE;EACD,KAPD;EAQD;;EAED,SAAOpiE,MAAP;EACD;;EAED,SAASgkE,YAAT,CAAsBnsH,IAAtB,EAA4BosH,YAA5B,EAA0C/E,KAA1C,EAAiD;EAC/C,MAAIgF,iBAAiB,GAAGhF,KAAK,CAACiF,WAA9B;EAAA,MACIA,WAAW,GAAGD,iBAAiB,KAAK,KAAK,CAA3B,GAA+B,OAA/B,GAAyCA,iBAD3D;EAAA,MAEIE,kBAAkB,GAAGlF,KAAK,CAACmF,YAF/B;EAAA,MAGIA,YAAY,GAAGD,kBAAkB,KAAK,KAAK,CAA5B,GAAgC,QAAhC,GAA2CA,kBAH9D;EAAA,MAIId,UAAU,GAAGpE,KAAK,CAACoE,UAJvB;EAAA,MAKIgB,WAAW,GAAGpF,KAAK,CAACqF,KALxB;EAAA,MAMIA,KAAK,GAAGD,WAAW,KAAK,KAAK,CAArB,GAAyB,KAAzB,GAAiCA,WAN7C;;EAQA,MAAIE,UAAU,GAAG,SAASA,UAAT,CAAoBtE,GAApB,EAAyB;EACxC,WAAOA,GAAG,CAAClY,cAAJ,CAAmBqc,YAAnB,CAAP;EACD,GAFD;;EAIA,MAAII,UAAU,GAAGR,YAAY,CAAChyE,MAAb,CAAoB,UAAUiuE,GAAV,EAAe;EAClD,WAAO,CAACsE,UAAU,CAACtE,GAAD,CAAlB;EACD,GAFgB,CAAjB;EAGA,MAAIwE,KAAK,GAAGT,YAAY,CAAChyE,MAAb,CAAoBuyE,UAApB,EAAgCzpG,GAAhC,CAAoC,UAAUmlG,GAAV,EAAe;EAC7D,WAAOA,GAAG,CAACmE,YAAD,CAAV;EACD,GAFW,CAAZ;EAGA,MAAIM,KAAK,GAAG9sH,IAAZ;EACA,MAAImzE,IAAI,GAAGu5C,KAAK,GAAG;EACjBhB,IAAAA,KAAK,EAAEoB,KADU;EAEjBnB,IAAAA,IAAI,EAAEkB,KAFW;EAGjB/nH,IAAAA,MAAM,EAAE;EAHS,GAAH;EAAA,IAKd0mH,UAAU,CAACqB,KAAD,EAAQC,KAAR,EAAerB,UAAf,CALZ;EAMAt4C,EAAAA,IAAI,CAACruE,MAAL,GAAcquE,IAAI,CAACruE,MAAL,CAAYoe,GAAZ,CAAgB,UAAU8kG,KAAV,EAAiB;EAC7C,QAAIC,KAAK,GAAG3D,gBAAc,CAAC0D,KAAD,EAAQ,CAAR,CAA1B;EAAA,QACI6E,KAAK,GAAG5E,KAAK,CAAC,CAAD,CADjB;EAAA,QAEI6E,KAAK,GAAG7E,KAAK,CAAC,CAAD,CAFjB;;EAIA,QAAI4E,KAAK,KAAKC,KAAd,EAAqB;EACnB;EACAA,MAAAA,KAAK,CAACR,WAAD,CAAL,GAAqBO,KAAK,CAACP,WAAD,CAA1B;EACAQ,MAAAA,KAAK,CAACR,WAAD,CAAL,CAAmBE,YAAnB,IAAmCM,KAAnC;EACD;;EAED,WAAOA,KAAP;EACD,GAZa,CAAd;EAaA35C,EAAAA,IAAI,CAACw4C,IAAL,GAAYx4C,IAAI,CAACw4C,IAAL,CAAUt3C,MAAV,CAAiBu4C,UAAU,CAAC1pG,GAAX,CAAe,UAAUmlG,GAAV,EAAe;EACzD,WAAOgD,iBAAe,CAAC,EAAD,EAAKiB,WAAL,EAAkBjE,GAAlB,CAAtB;EACD,GAF4B,CAAjB,CAAZ;EAGA,SAAOl1C,IAAP;EACD;;EAED,SAAS45C,UAAT,CAAoB/sH,IAApB,EAA0BosH,YAA1B;EACAY,SADA;EAEAC,SAFA;EAGAC,KAHA,EAGO;EACL,MAAIC,eAAe,GAAGD,KAAK,CAACE,SAA5B;EAAA,MACIA,SAAS,GAAGD,eAAe,KAAK,KAAK,CAAzB,GAA6B,UAAUxzH,CAAV,EAAa;EACxD,WAAO,EAAP;EACD,GAFe,GAEZwzH,eAHJ;EAAA,MAIIE,eAAe,GAAGH,KAAK,CAACI,SAJ5B;EAAA,MAKIA,SAAS,GAAGD,eAAe,KAAK,KAAK,CAAzB,GAA6B,UAAUhF,GAAV,EAAe1uH,CAAf,EAAkB,EAA/C,GAAoD0zH,eALpE;EAAA,MAMIE,aAAa,GAAGL,KAAK,CAACM,OAN1B;EAAA,MAOIA,OAAO,GAAGD,aAAa,KAAK,KAAK,CAAvB,GAA2B,UAAUlF,GAAV,EAAe,EAA1C,GAA+CkF,aAP7D;EAAA,MAQIE,iBAAiB,GAAGP,KAAK,CAACZ,WAR9B;EAAA,MASIA,WAAW,GAAGmB,iBAAiB,KAAK,KAAK,CAA3B,GAA+B,OAA/B,GAAyCA,iBAT3D;EAAA,MAUIC,kBAAkB,GAAGR,KAAK,CAACV,YAV/B;EAAA,MAWIA,YAAY,GAAGkB,kBAAkB,KAAK,KAAK,CAA5B,GAAgC,QAAhC,GAA2CA,kBAX9D;EAAA,MAYIC,eAAe,GAAG1E,0BAAwB,CAACiE,KAAD,EAAQ,CAAC,WAAD,EAAc,WAAd,EAA2B,SAA3B,EAAsC,aAAtC,EAAqD,cAArD,CAAR,CAZ9C;;EAcA,MAAIU,aAAa,GAAGzB,YAAY,CAACnsH,IAAD,EAAOosH,YAAP,EAAqBhB,gBAAc,CAAC;EAClEkB,IAAAA,WAAW,EAAEA,WADqD;EAElEE,IAAAA,YAAY,EAAEA;EAFoD,GAAD,EAGhEmB,eAHgE,CAAnC,CAAhC;EAAA,MAIIjC,KAAK,GAAGkC,aAAa,CAAClC,KAJ1B;EAAA,MAKI5mH,MAAM,GAAG8oH,aAAa,CAAC9oH,MAL3B;EAAA,MAMI6mH,IAAI,GAAGiC,aAAa,CAACjC,IANzB,CAfK;;;EAwBLA,EAAAA,IAAI,CAAC/xD,OAAL,CAAa,UAAUjgE,CAAV,EAAa;EACxB,QAAI0uH,GAAG,GAAG1uH,CAAC,CAAC2yH,WAAD,CAAX;EACA,WAAO3yH,CAAC,CAAC2yH,WAAD,CAAR,CAFwB;;EAIxBkB,IAAAA,OAAO,CAACnF,GAAD,CAAP;EACA4E,IAAAA,SAAS,CAAC5E,GAAD,CAAT;EACD,GAND;EAOA,MAAIwF,OAAO,GAAGC,UAAU,CAACpC,KAAD,CAAxB;EACA,MAAIqC,UAAU,GAAG,GAAG15C,MAAH,CAAUg1C,oBAAkB,CAACqC,KAAD,CAA5B,EAAqCrC,oBAAkB,CAACvkH,MAAD,CAAvD,CAAjB;EACAkpH,EAAAA,UAAU,CAACD,UAAD,CAAV,CAjCK;;EAmCLF,EAAAA,OAAO,CAACj0D,OAAR,CAAgBozD,SAAhB,EAnCK;;EAqCL,WAASc,UAAT,CAAoB9tH,IAApB,EAA0B;EACxB,QAAI6tH,OAAO,GAAG,EAAd;EACA7tH,IAAAA,IAAI,CAAC45D,OAAL,CAAa,UAAUjgE,CAAV,EAAa;EACxB,UAAI0uH,GAAG,GAAG+E,SAAS,CAACzzH,CAAD,CAAnB;;EAEA,UAAI0uH,GAAJ,EAAS;EACPA,QAAAA,GAAG,CAACmE,YAAD,CAAH,GAAoB7yH,CAApB;EACAA,QAAAA,CAAC,CAAC2yH,WAAD,CAAD,GAAiBjE,GAAjB;EACAwF,QAAAA,OAAO,CAACl+H,IAAR,CAAa04H,GAAb;EACD;EACF,KARD;EASA,WAAOwF,OAAP;EACD;;EAED,WAASG,UAAT,CAAoBhuH,IAApB,EAA0B;EACxBA,IAAAA,IAAI,CAAC45D,OAAL,CAAa,UAAUjgE,CAAV,EAAa;EACxB,UAAI0uH,GAAG,GAAG1uH,CAAC,CAAC2yH,WAAD,CAAX;;EAEA,UAAIjE,GAAJ,EAAS;EACPA,QAAAA,GAAG,CAACmE,YAAD,CAAH,GAAoB7yH,CAApB;EACA2zH,QAAAA,SAAS,CAACjF,GAAD,EAAM1uH,CAAN,CAAT;EACD;EACF,KAPD;EAQD;EACF;;ECpTM,SAASs0H,SAAT,CAAmBC,MAAnB,EAA2BC,KAA3B,EAAkC;EACvC,UAAQn3H,SAAS,CAACxG,MAAlB;EACE,SAAK,CAAL;EAAQ;;EACR,SAAK,CAAL;EAAQ,WAAK29H,KAAL,CAAWD,MAAX;EAAoB;;EAC5B;EAAS,WAAKC,KAAL,CAAWA,KAAX,EAAkBD,MAAlB,CAAyBA,MAAzB;EAAkC;EAH7C;;EAKA,SAAO,IAAP;EACD;;ECJM,MAAME,QAAQ,GAAGx3H,MAAM,CAAC,UAAD,CAAvB;EAEQ,SAASy3H,OAAT,GAAmB;EAChC,MAAIt+H,KAAK,GAAG,IAAIu4H,SAAJ,EAAZ;EAAA,MACI4F,MAAM,GAAG,EADb;EAAA,MAEIC,KAAK,GAAG,EAFZ;EAAA,MAGIG,OAAO,GAAGF,QAHd;;EAKA,WAASlzH,KAAT,CAAevB,CAAf,EAAkB;EAChB,QAAIrJ,CAAC,GAAGP,KAAK,CAACiqC,GAAN,CAAUrgC,CAAV,CAAR;;EACA,QAAIrJ,CAAC,KAAKd,SAAV,EAAqB;EACnB,UAAI8+H,OAAO,KAAKF,QAAhB,EAA0B,OAAOE,OAAP;EAC1Bv+H,MAAAA,KAAK,CAACuC,GAAN,CAAUqH,CAAV,EAAarJ,CAAC,GAAG49H,MAAM,CAACv+H,IAAP,CAAYgK,CAAZ,IAAiB,CAAlC;EACD;;EACD,WAAOw0H,KAAK,CAAC79H,CAAC,GAAG69H,KAAK,CAAC39H,MAAX,CAAZ;EACD;;EAED0K,EAAAA,KAAK,CAACgzH,MAAN,GAAe,UAASnjB,CAAT,EAAY;EACzB,QAAI,CAAC/zG,SAAS,CAACxG,MAAf,EAAuB,OAAO09H,MAAM,CAAC79H,KAAP,EAAP;EACvB69H,IAAAA,MAAM,GAAG,EAAT,EAAan+H,KAAK,GAAG,IAAIu4H,SAAJ,EAArB;;EACA,SAAK,MAAM/2H,KAAX,IAAoBw5G,CAApB,EAAuB;EACrB,UAAIh7G,KAAK,CAACu5C,GAAN,CAAU/3C,KAAV,CAAJ,EAAsB;EACtBxB,MAAAA,KAAK,CAACuC,GAAN,CAAUf,KAAV,EAAiB28H,MAAM,CAACv+H,IAAP,CAAY4B,KAAZ,IAAqB,CAAtC;EACD;;EACD,WAAO2J,KAAP;EACD,GARD;;EAUAA,EAAAA,KAAK,CAACizH,KAAN,GAAc,UAASpjB,CAAT,EAAY;EACxB,WAAO/zG,SAAS,CAACxG,MAAV,IAAoB29H,KAAK,GAAG7uH,KAAK,CAAC2/E,IAAN,CAAW8rB,CAAX,CAAR,EAAuB7vG,KAA3C,IAAoDizH,KAAK,CAAC99H,KAAN,EAA3D;EACD,GAFD;;EAIA6K,EAAAA,KAAK,CAACozH,OAAN,GAAgB,UAASvjB,CAAT,EAAY;EAC1B,WAAO/zG,SAAS,CAACxG,MAAV,IAAoB89H,OAAO,GAAGvjB,CAAV,EAAa7vG,KAAjC,IAA0CozH,OAAjD;EACD,GAFD;;EAIApzH,EAAAA,KAAK,CAACnI,IAAN,GAAa,YAAW;EACtB,WAAOs7H,OAAO,CAACH,MAAD,EAASC,KAAT,CAAP,CAAuBG,OAAvB,CAA+BA,OAA/B,CAAP;EACD,GAFD;;EAIAL,EAAAA,SAAS,CAACz/D,KAAV,CAAgBtzD,KAAhB,EAAuBlE,SAAvB;EAEA,SAAOkE,KAAP;EACD;;EC7Cc,iBAASqzH,SAAT,EAAoB;EACjC,MAAI78H,CAAC,GAAG68H,SAAS,CAAC/9H,MAAV,GAAmB,CAAnB,GAAuB,CAA/B;EAAA,MAAkCy4B,MAAM,GAAG,IAAI3pB,KAAJ,CAAU5N,CAAV,CAA3C;EAAA,MAAyDpB,CAAC,GAAG,CAA7D;;EACA,SAAOA,CAAC,GAAGoB,CAAX,EAAcu3B,MAAM,CAAC34B,CAAD,CAAN,GAAY,MAAMi+H,SAAS,CAACl+H,KAAV,CAAgBC,CAAC,GAAG,CAApB,EAAuB,EAAEA,CAAF,GAAM,CAA7B,CAAlB;;EACd,SAAO24B,MAAP;EACD;;ACFD,qBAAeA,MAAM,CAAC,0EAAD,CAArB;;;;;ECFA;EACA;EACA;EAEA,CAAC,UAASv4B,IAAT,EAAe;EAEhB,MAAI89H,QAAQ,GAAG,MAAf;EAAA,MACIC,SAAS,GAAG,MADhB;EAAA,MAEIC,WAAW,GAAG,CAFlB;EAAA,MAGIC,SAAS,GAAGj+H,IAAI,CAACgE,KAHrB;EAAA,MAIIk6H,OAAO,GAAGl+H,IAAI,CAACc,GAJnB;EAAA,MAKIq9H,OAAO,GAAGn+H,IAAI,CAACe,GALnB;EAAA,MAMIq9H,UAAU,GAAGp+H,IAAI,CAACQ,MANtB;;EAQA,WAAS69H,SAAT,CAAoBhtG,KAApB,EAA2BitG,IAA3B,EAAiC;EAE7BjtG,IAAAA,KAAK,GAAIA,KAAD,GAAUA,KAAV,GAAkB,EAA1B;EACAitG,IAAAA,IAAI,GAAGA,IAAI,IAAI,EAAf,CAH6B;;EAM7B,QAAIjtG,KAAK,YAAYgtG,SAArB,EAAgC;EAC7B,aAAOhtG,KAAP;EACF,KAR4B;;;EAU7B,QAAI,EAAE,gBAAgBgtG,SAAlB,CAAJ,EAAkC;EAC9B,aAAO,IAAIA,SAAJ,CAAchtG,KAAd,EAAqBitG,IAArB,CAAP;EACH;;EAED,QAAIC,GAAG,GAAGC,UAAU,CAACntG,KAAD,CAApB;EACA,SAAKotG,cAAL,GAAsBptG,KAAtB,EACA,KAAKqtG,EAAL,GAAUH,GAAG,CAACx0H,CADd,EAEA,KAAK40H,EAAL,GAAUJ,GAAG,CAACp1H,CAFd,EAGA,KAAKy1H,EAAL,GAAUL,GAAG,CAACx7H,CAHd,EAIA,KAAK87H,EAAL,GAAUN,GAAG,CAACz7H,CAJd,EAKA,KAAKg8H,OAAL,GAAeb,SAAS,CAAC,MAAI,KAAKY,EAAV,CAAT,GAAyB,GALxC,EAMA,KAAKE,OAAL,GAAeT,IAAI,CAACzxH,MAAL,IAAe0xH,GAAG,CAAC1xH,MANlC;EAOA,SAAKmyH,aAAL,GAAqBV,IAAI,CAACW,YAA1B,CAtB6B;EAyB7B;EACA;EACA;;EACA,QAAI,KAAKP,EAAL,GAAU,CAAd,EAAiB;EAAE,WAAKA,EAAL,GAAUT,SAAS,CAAC,KAAKS,EAAN,CAAnB;EAA+B;;EAClD,QAAI,KAAKC,EAAL,GAAU,CAAd,EAAiB;EAAE,WAAKA,EAAL,GAAUV,SAAS,CAAC,KAAKU,EAAN,CAAnB;EAA+B;;EAClD,QAAI,KAAKC,EAAL,GAAU,CAAd,EAAiB;EAAE,WAAKA,EAAL,GAAUX,SAAS,CAAC,KAAKW,EAAN,CAAnB;EAA+B;;EAElD,SAAKM,GAAL,GAAWX,GAAG,CAACY,EAAf;EACA,SAAKC,MAAL,GAAcpB,WAAW,EAAzB;EACH;;EAEDK,EAAAA,SAAS,CAACj4H,SAAV,GAAsB;EAClBi5H,IAAAA,MAAM,EAAE,YAAW;EACf,aAAO,KAAKC,aAAL,KAAuB,GAA9B;EACH,KAHiB;EAIlBp2G,IAAAA,OAAO,EAAE,YAAW;EAChB,aAAO,CAAC,KAAKm2G,MAAL,EAAR;EACH,KANiB;EAOlBE,IAAAA,OAAO,EAAE,YAAW;EAChB,aAAO,KAAKL,GAAZ;EACH,KATiB;EAUlBM,IAAAA,gBAAgB,EAAE,YAAW;EAC3B,aAAO,KAAKf,cAAZ;EACD,KAZiB;EAalBgB,IAAAA,SAAS,EAAE,YAAW;EAClB,aAAO,KAAKV,OAAZ;EACH,KAfiB;EAgBlBW,IAAAA,QAAQ,EAAE,YAAW;EACjB,aAAO,KAAKb,EAAZ;EACH,KAlBiB;EAmBlBS,IAAAA,aAAa,EAAE,YAAW;EACtB;EACA,UAAIf,GAAG,GAAG,KAAKoB,KAAL,EAAV;EACA,aAAO,CAACpB,GAAG,CAACx0H,CAAJ,GAAQ,GAAR,GAAcw0H,GAAG,CAACp1H,CAAJ,GAAQ,GAAtB,GAA4Bo1H,GAAG,CAACx7H,CAAJ,GAAQ,GAArC,IAA4C,IAAnD;EACH,KAvBiB;EAwBlB68H,IAAAA,YAAY,EAAE,YAAW;EACrB;EACA,UAAIrB,GAAG,GAAG,KAAKoB,KAAL,EAAV;EACA,UAAIE,KAAJ,EAAWC,KAAX,EAAkBC,KAAlB,EAAyBC,CAAzB,EAA4BC,CAA5B,EAA+B/xC,CAA/B;EACA2xC,MAAAA,KAAK,GAAGtB,GAAG,CAACx0H,CAAJ,GAAM,GAAd;EACA+1H,MAAAA,KAAK,GAAGvB,GAAG,CAACp1H,CAAJ,GAAM,GAAd;EACA42H,MAAAA,KAAK,GAAGxB,GAAG,CAACx7H,CAAJ,GAAM,GAAd;;EAEA,UAAI88H,KAAK,IAAI,OAAb,EAAsB;EAACG,QAAAA,CAAC,GAAGH,KAAK,GAAG,KAAZ;EAAmB,OAA1C,MAAgD;EAACG,QAAAA,CAAC,GAAGhgI,IAAI,CAACqB,GAAL,CAAU,CAACw+H,KAAK,GAAG,KAAT,IAAkB,KAA5B,EAAoC,GAApC,CAAJ;EAA8C;;EAC/F,UAAIC,KAAK,IAAI,OAAb,EAAsB;EAACG,QAAAA,CAAC,GAAGH,KAAK,GAAG,KAAZ;EAAmB,OAA1C,MAAgD;EAACG,QAAAA,CAAC,GAAGjgI,IAAI,CAACqB,GAAL,CAAU,CAACy+H,KAAK,GAAG,KAAT,IAAkB,KAA5B,EAAoC,GAApC,CAAJ;EAA8C;;EAC/F,UAAIC,KAAK,IAAI,OAAb,EAAsB;EAAC7xC,QAAAA,CAAC,GAAG6xC,KAAK,GAAG,KAAZ;EAAmB,OAA1C,MAAgD;EAAC7xC,QAAAA,CAAC,GAAGluF,IAAI,CAACqB,GAAL,CAAU,CAAC0+H,KAAK,GAAG,KAAT,IAAkB,KAA5B,EAAoC,GAApC,CAAJ;EAA8C;;EAC/F,aAAQ,SAASC,CAAV,GAAgB,SAASC,CAAzB,GAA+B,SAAS/xC,CAA/C;EACH,KApCiB;EAqClBgyC,IAAAA,QAAQ,EAAE,UAASr/H,KAAT,EAAgB;EACtB,WAAKg+H,EAAL,GAAUsB,UAAU,CAACt/H,KAAD,CAApB;EACA,WAAKi+H,OAAL,GAAeb,SAAS,CAAC,MAAI,KAAKY,EAAV,CAAT,GAAyB,GAAxC;EACA,aAAO,IAAP;EACH,KAzCiB;EA0ClBuB,IAAAA,KAAK,EAAE,YAAW;EACd,UAAIC,GAAG,GAAGC,QAAQ,CAAC,KAAK5B,EAAN,EAAU,KAAKC,EAAf,EAAmB,KAAKC,EAAxB,CAAlB;EACA,aAAO;EAAEx1H,QAAAA,CAAC,EAAEi3H,GAAG,CAACj3H,CAAJ,GAAQ,GAAb;EAAkBvG,QAAAA,CAAC,EAAEw9H,GAAG,CAACx9H,CAAzB;EAA4BP,QAAAA,CAAC,EAAE+9H,GAAG,CAAC/9H,CAAnC;EAAsCQ,QAAAA,CAAC,EAAE,KAAK+7H;EAA9C,OAAP;EACH,KA7CiB;EA8ClB0B,IAAAA,WAAW,EAAE,YAAW;EACpB,UAAIF,GAAG,GAAGC,QAAQ,CAAC,KAAK5B,EAAN,EAAU,KAAKC,EAAf,EAAmB,KAAKC,EAAxB,CAAlB;EACA,UAAIx1H,CAAC,GAAG60H,SAAS,CAACoC,GAAG,CAACj3H,CAAJ,GAAQ,GAAT,CAAjB;EAAA,UAAgCvG,CAAC,GAAGo7H,SAAS,CAACoC,GAAG,CAACx9H,CAAJ,GAAQ,GAAT,CAA7C;EAAA,UAA4DP,CAAC,GAAG27H,SAAS,CAACoC,GAAG,CAAC/9H,CAAJ,GAAQ,GAAT,CAAzE;EACA,aAAQ,KAAKu8H,EAAL,IAAW,CAAZ,GACL,SAAUz1H,CAAV,GAAc,IAAd,GAAqBvG,CAArB,GAAyB,KAAzB,GAAiCP,CAAjC,GAAqC,IADhC,GAEL,UAAU8G,CAAV,GAAc,IAAd,GAAqBvG,CAArB,GAAyB,KAAzB,GAAiCP,CAAjC,GAAqC,KAArC,GAA4C,KAAKw8H,OAAjD,GAA2D,GAF7D;EAGH,KApDiB;EAqDlB0B,IAAAA,KAAK,EAAE,YAAW;EACd,UAAIC,GAAG,GAAGC,QAAQ,CAAC,KAAKhC,EAAN,EAAU,KAAKC,EAAf,EAAmB,KAAKC,EAAxB,CAAlB;EACA,aAAO;EAAEx1H,QAAAA,CAAC,EAAEq3H,GAAG,CAACr3H,CAAJ,GAAQ,GAAb;EAAkBvG,QAAAA,CAAC,EAAE49H,GAAG,CAAC59H,CAAzB;EAA4BhD,QAAAA,CAAC,EAAE4gI,GAAG,CAAC5gI,CAAnC;EAAsCiD,QAAAA,CAAC,EAAE,KAAK+7H;EAA9C,OAAP;EACH,KAxDiB;EAyDlB8B,IAAAA,WAAW,EAAE,YAAW;EACpB,UAAIF,GAAG,GAAGC,QAAQ,CAAC,KAAKhC,EAAN,EAAU,KAAKC,EAAf,EAAmB,KAAKC,EAAxB,CAAlB;EACA,UAAIx1H,CAAC,GAAG60H,SAAS,CAACwC,GAAG,CAACr3H,CAAJ,GAAQ,GAAT,CAAjB;EAAA,UAAgCvG,CAAC,GAAGo7H,SAAS,CAACwC,GAAG,CAAC59H,CAAJ,GAAQ,GAAT,CAA7C;EAAA,UAA4DhD,CAAC,GAAGo+H,SAAS,CAACwC,GAAG,CAAC5gI,CAAJ,GAAQ,GAAT,CAAzE;EACA,aAAQ,KAAKg/H,EAAL,IAAW,CAAZ,GACL,SAAUz1H,CAAV,GAAc,IAAd,GAAqBvG,CAArB,GAAyB,KAAzB,GAAiChD,CAAjC,GAAqC,IADhC,GAEL,UAAUuJ,CAAV,GAAc,IAAd,GAAqBvG,CAArB,GAAyB,KAAzB,GAAiChD,CAAjC,GAAqC,KAArC,GAA4C,KAAKi/H,OAAjD,GAA2D,GAF7D;EAGH,KA/DiB;EAgElB8B,IAAAA,KAAK,EAAE,UAASC,UAAT,EAAqB;EACxB,aAAOC,QAAQ,CAAC,KAAKpC,EAAN,EAAU,KAAKC,EAAf,EAAmB,KAAKC,EAAxB,EAA4BiC,UAA5B,CAAf;EACH,KAlEiB;EAmElBE,IAAAA,WAAW,EAAE,UAASF,UAAT,EAAqB;EAC9B,aAAO,MAAM,KAAKD,KAAL,CAAWC,UAAX,CAAb;EACH,KArEiB;EAsElBG,IAAAA,MAAM,EAAE,UAASC,UAAT,EAAqB;EACzB,aAAOC,SAAS,CAAC,KAAKxC,EAAN,EAAU,KAAKC,EAAf,EAAmB,KAAKC,EAAxB,EAA4B,KAAKC,EAAjC,EAAqCoC,UAArC,CAAhB;EACH,KAxEiB;EAyElBE,IAAAA,YAAY,EAAE,UAASF,UAAT,EAAqB;EAC/B,aAAO,MAAM,KAAKD,MAAL,CAAYC,UAAZ,CAAb;EACH,KA3EiB;EA4ElBtB,IAAAA,KAAK,EAAE,YAAW;EACd,aAAO;EAAE51H,QAAAA,CAAC,EAAEk0H,SAAS,CAAC,KAAKS,EAAN,CAAd;EAAyBv1H,QAAAA,CAAC,EAAE80H,SAAS,CAAC,KAAKU,EAAN,CAArC;EAAgD57H,QAAAA,CAAC,EAAEk7H,SAAS,CAAC,KAAKW,EAAN,CAA5D;EAAuE97H,QAAAA,CAAC,EAAE,KAAK+7H;EAA/E,OAAP;EACH,KA9EiB;EA+ElBuC,IAAAA,WAAW,EAAE,YAAW;EACpB,aAAQ,KAAKvC,EAAL,IAAW,CAAZ,GACL,SAAUZ,SAAS,CAAC,KAAKS,EAAN,CAAnB,GAA+B,IAA/B,GAAsCT,SAAS,CAAC,KAAKU,EAAN,CAA/C,GAA2D,IAA3D,GAAkEV,SAAS,CAAC,KAAKW,EAAN,CAA3E,GAAuF,GADlF,GAEL,UAAUX,SAAS,CAAC,KAAKS,EAAN,CAAnB,GAA+B,IAA/B,GAAsCT,SAAS,CAAC,KAAKU,EAAN,CAA/C,GAA2D,IAA3D,GAAkEV,SAAS,CAAC,KAAKW,EAAN,CAA3E,GAAuF,IAAvF,GAA8F,KAAKE,OAAnG,GAA6G,GAF/G;EAGH,KAnFiB;EAoFlBuC,IAAAA,eAAe,EAAE,YAAW;EACxB,aAAO;EAAEt3H,QAAAA,CAAC,EAAEk0H,SAAS,CAACqD,OAAO,CAAC,KAAK5C,EAAN,EAAU,GAAV,CAAP,GAAwB,GAAzB,CAAT,GAAyC,GAA9C;EAAmDv1H,QAAAA,CAAC,EAAE80H,SAAS,CAACqD,OAAO,CAAC,KAAK3C,EAAN,EAAU,GAAV,CAAP,GAAwB,GAAzB,CAAT,GAAyC,GAA/F;EAAoG57H,QAAAA,CAAC,EAAEk7H,SAAS,CAACqD,OAAO,CAAC,KAAK1C,EAAN,EAAU,GAAV,CAAP,GAAwB,GAAzB,CAAT,GAAyC,GAAhJ;EAAqJ97H,QAAAA,CAAC,EAAE,KAAK+7H;EAA7J,OAAP;EACH,KAtFiB;EAuFlB0C,IAAAA,qBAAqB,EAAE,YAAW;EAC9B,aAAQ,KAAK1C,EAAL,IAAW,CAAZ,GACL,SAAUZ,SAAS,CAACqD,OAAO,CAAC,KAAK5C,EAAN,EAAU,GAAV,CAAP,GAAwB,GAAzB,CAAnB,GAAmD,KAAnD,GAA2DT,SAAS,CAACqD,OAAO,CAAC,KAAK3C,EAAN,EAAU,GAAV,CAAP,GAAwB,GAAzB,CAApE,GAAoG,KAApG,GAA4GV,SAAS,CAACqD,OAAO,CAAC,KAAK1C,EAAN,EAAU,GAAV,CAAP,GAAwB,GAAzB,CAArH,GAAqJ,IADhJ,GAEL,UAAUX,SAAS,CAACqD,OAAO,CAAC,KAAK5C,EAAN,EAAU,GAAV,CAAP,GAAwB,GAAzB,CAAnB,GAAmD,KAAnD,GAA2DT,SAAS,CAACqD,OAAO,CAAC,KAAK3C,EAAN,EAAU,GAAV,CAAP,GAAwB,GAAzB,CAApE,GAAoG,KAApG,GAA4GV,SAAS,CAACqD,OAAO,CAAC,KAAK1C,EAAN,EAAU,GAAV,CAAP,GAAwB,GAAzB,CAArH,GAAqJ,KAArJ,GAA6J,KAAKE,OAAlK,GAA4K,GAF9K;EAGH,KA3FiB;EA4FlB0C,IAAAA,MAAM,EAAE,YAAW;EACf,UAAI,KAAK3C,EAAL,KAAY,CAAhB,EAAmB;EACf,eAAO,aAAP;EACH;;EAED,UAAI,KAAKA,EAAL,GAAU,CAAd,EAAiB;EACb,eAAO,KAAP;EACH;;EAED,aAAO4C,QAAQ,CAACX,QAAQ,CAAC,KAAKpC,EAAN,EAAU,KAAKC,EAAf,EAAmB,KAAKC,EAAxB,EAA4B,IAA5B,CAAT,CAAR,IAAuD,KAA9D;EACH,KAtGiB;EAuGlB8C,IAAAA,QAAQ,EAAE,UAASC,WAAT,EAAsB;EAC5B,UAAIC,UAAU,GAAG,MAAMC,aAAa,CAAC,KAAKnD,EAAN,EAAU,KAAKC,EAAf,EAAmB,KAAKC,EAAxB,EAA4B,KAAKC,EAAjC,CAApC;EACA,UAAIiD,gBAAgB,GAAGF,UAAvB;EACA,UAAI3C,YAAY,GAAG,KAAKD,aAAL,GAAqB,oBAArB,GAA4C,EAA/D;;EAEA,UAAI2C,WAAJ,EAAiB;EACb,YAAI9+H,CAAC,GAAGw7H,SAAS,CAACsD,WAAD,CAAjB;EACAG,QAAAA,gBAAgB,GAAG,MAAMD,aAAa,CAACh/H,CAAC,CAAC67H,EAAH,EAAO77H,CAAC,CAAC87H,EAAT,EAAa97H,CAAC,CAAC+7H,EAAf,EAAmB/7H,CAAC,CAACg8H,EAArB,CAAtC;EACH;;EAED,aAAO,gDAA8CI,YAA9C,GAA2D,gBAA3D,GAA4E2C,UAA5E,GAAuF,eAAvF,GAAuGE,gBAAvG,GAAwH,GAA/H;EACH,KAlHiB;EAmHlB5hI,IAAAA,QAAQ,EAAE,UAAS2M,MAAT,EAAiB;EACvB,UAAIk1H,SAAS,GAAG,CAAC,CAACl1H,MAAlB;EACAA,MAAAA,MAAM,GAAGA,MAAM,IAAI,KAAKkyH,OAAxB;EAEA,UAAIiD,eAAe,GAAG,KAAtB;EACA,UAAIC,QAAQ,GAAG,KAAKpD,EAAL,GAAU,CAAV,IAAe,KAAKA,EAAL,IAAW,CAAzC;EACA,UAAIqD,gBAAgB,GAAG,CAACH,SAAD,IAAcE,QAAd,KAA2Bp1H,MAAM,KAAK,KAAX,IAAoBA,MAAM,KAAK,MAA/B,IAAyCA,MAAM,KAAK,MAApD,IAA8DA,MAAM,KAAK,MAAzE,IAAmFA,MAAM,KAAK,MAA9F,IAAwGA,MAAM,KAAK,MAA9I,CAAvB;;EAEA,UAAIq1H,gBAAJ,EAAsB;EAClB;EACA;EACA,YAAIr1H,MAAM,KAAK,MAAX,IAAqB,KAAKgyH,EAAL,KAAY,CAArC,EAAwC;EACpC,iBAAO,KAAK2C,MAAL,EAAP;EACH;;EACD,eAAO,KAAKJ,WAAL,EAAP;EACH;;EACD,UAAIv0H,MAAM,KAAK,KAAf,EAAsB;EAClBm1H,QAAAA,eAAe,GAAG,KAAKZ,WAAL,EAAlB;EACH;;EACD,UAAIv0H,MAAM,KAAK,MAAf,EAAuB;EACnBm1H,QAAAA,eAAe,GAAG,KAAKT,qBAAL,EAAlB;EACH;;EACD,UAAI10H,MAAM,KAAK,KAAX,IAAoBA,MAAM,KAAK,MAAnC,EAA2C;EACvCm1H,QAAAA,eAAe,GAAG,KAAKjB,WAAL,EAAlB;EACH;;EACD,UAAIl0H,MAAM,KAAK,MAAf,EAAuB;EACnBm1H,QAAAA,eAAe,GAAG,KAAKjB,WAAL,CAAiB,IAAjB,CAAlB;EACH;;EACD,UAAIl0H,MAAM,KAAK,MAAf,EAAuB;EACnBm1H,QAAAA,eAAe,GAAG,KAAKb,YAAL,CAAkB,IAAlB,CAAlB;EACH;;EACD,UAAIt0H,MAAM,KAAK,MAAf,EAAuB;EACnBm1H,QAAAA,eAAe,GAAG,KAAKb,YAAL,EAAlB;EACH;;EACD,UAAIt0H,MAAM,KAAK,MAAf,EAAuB;EACnBm1H,QAAAA,eAAe,GAAG,KAAKR,MAAL,EAAlB;EACH;;EACD,UAAI30H,MAAM,KAAK,KAAf,EAAsB;EAClBm1H,QAAAA,eAAe,GAAG,KAAKrB,WAAL,EAAlB;EACH;;EACD,UAAI9zH,MAAM,KAAK,KAAf,EAAsB;EAClBm1H,QAAAA,eAAe,GAAG,KAAKzB,WAAL,EAAlB;EACH;;EAED,aAAOyB,eAAe,IAAI,KAAKjB,WAAL,EAA1B;EACH,KAhKiB;EAiKlB3+H,IAAAA,KAAK,EAAE,YAAW;EACd,aAAOi8H,SAAS,CAAC,KAAKn+H,QAAL,EAAD,CAAhB;EACH,KAnKiB;EAqKlBiiI,IAAAA,kBAAkB,EAAE,UAASC,EAAT,EAAapjB,IAAb,EAAmB;EACnC,UAAI3tF,KAAK,GAAG+wG,EAAE,CAACtkE,KAAH,CAAS,IAAT,EAAe,CAAC,IAAD,EAAO6lB,MAAP,CAAc,GAAGhkF,KAAH,CAASI,IAAT,CAAci/G,IAAd,CAAd,CAAf,CAAZ;EACA,WAAK0f,EAAL,GAAUrtG,KAAK,CAACqtG,EAAhB;EACA,WAAKC,EAAL,GAAUttG,KAAK,CAACstG,EAAhB;EACA,WAAKC,EAAL,GAAUvtG,KAAK,CAACutG,EAAhB;EACA,WAAKsB,QAAL,CAAc7uG,KAAK,CAACwtG,EAApB;EACA,aAAO,IAAP;EACH,KA5KiB;EA6KlBwD,IAAAA,OAAO,EAAE,YAAW;EAChB,aAAO,KAAKF,kBAAL,CAAwBE,OAAxB,EAAiC/7H,SAAjC,CAAP;EACH,KA/KiB;EAgLlBg8H,IAAAA,QAAQ,EAAE,YAAW;EACjB,aAAO,KAAKH,kBAAL,CAAwBG,QAAxB,EAAkCh8H,SAAlC,CAAP;EACH,KAlLiB;EAmLlBi8H,IAAAA,MAAM,EAAE,YAAW;EACf,aAAO,KAAKJ,kBAAL,CAAwBI,MAAxB,EAAgCj8H,SAAhC,CAAP;EACH,KArLiB;EAsLlBk8H,IAAAA,UAAU,EAAE,YAAW;EACnB,aAAO,KAAKL,kBAAL,CAAwBK,UAAxB,EAAoCl8H,SAApC,CAAP;EACH,KAxLiB;EAyLlBm8H,IAAAA,QAAQ,EAAE,YAAW;EACjB,aAAO,KAAKN,kBAAL,CAAwBM,QAAxB,EAAkCn8H,SAAlC,CAAP;EACH,KA3LiB;EA4LlBo8H,IAAAA,SAAS,EAAE,YAAW;EAClB,aAAO,KAAKP,kBAAL,CAAwBO,SAAxB,EAAmCp8H,SAAnC,CAAP;EACH,KA9LiB;EA+LlBq8H,IAAAA,IAAI,EAAE,YAAW;EACb,aAAO,KAAKR,kBAAL,CAAwBQ,IAAxB,EAA8Br8H,SAA9B,CAAP;EACH,KAjMiB;EAmMlBs8H,IAAAA,iBAAiB,EAAE,UAASR,EAAT,EAAapjB,IAAb,EAAmB;EAClC,aAAOojB,EAAE,CAACtkE,KAAH,CAAS,IAAT,EAAe,CAAC,IAAD,EAAO6lB,MAAP,CAAc,GAAGhkF,KAAH,CAASI,IAAT,CAAci/G,IAAd,CAAd,CAAf,CAAP;EACH,KArMiB;EAsMlB6jB,IAAAA,SAAS,EAAE,YAAW;EAClB,aAAO,KAAKD,iBAAL,CAAuBC,SAAvB,EAAkCv8H,SAAlC,CAAP;EACH,KAxMiB;EAyMlBw8H,IAAAA,UAAU,EAAE,YAAW;EACnB,aAAO,KAAKF,iBAAL,CAAuBE,UAAvB,EAAmCx8H,SAAnC,CAAP;EACH,KA3MiB;EA4MlBy8H,IAAAA,aAAa,EAAE,YAAW;EACtB,aAAO,KAAKH,iBAAL,CAAuBG,aAAvB,EAAsCz8H,SAAtC,CAAP;EACH,KA9MiB;EA+MlB08H,IAAAA,eAAe,EAAE,YAAW;EACxB,aAAO,KAAKJ,iBAAL,CAAuBI,eAAvB,EAAwC18H,SAAxC,CAAP;EACH,KAjNiB;EAkNlB28H,IAAAA,KAAK,EAAE,YAAW;EACd,aAAO,KAAKL,iBAAL,CAAuBK,KAAvB,EAA8B38H,SAA9B,CAAP;EACH,KApNiB;EAqNlB48H,IAAAA,MAAM,EAAE,YAAW;EACf,aAAO,KAAKN,iBAAL,CAAuBM,MAAvB,EAA+B58H,SAA/B,CAAP;EACH;EAvNiB,GAAtB,CA9CgB;EAyQhB;;EACA+3H,EAAAA,SAAS,CAAC8E,SAAV,GAAsB,UAAS9xG,KAAT,EAAgBitG,IAAhB,EAAsB;EACxC,QAAI,OAAOjtG,KAAP,IAAgB,QAApB,EAA8B;EAC1B,UAAI+xG,QAAQ,GAAG,EAAf;;EACA,WAAK,IAAIxjI,CAAT,IAAcyxB,KAAd,EAAqB;EACjB,YAAIA,KAAK,CAACouF,cAAN,CAAqB7/G,CAArB,CAAJ,EAA6B;EACzB,cAAIA,CAAC,KAAK,GAAV,EAAe;EACXwjI,YAAAA,QAAQ,CAACxjI,CAAD,CAAR,GAAcyxB,KAAK,CAACzxB,CAAD,CAAnB;EACH,WAFD,MAGK;EACDwjI,YAAAA,QAAQ,CAACxjI,CAAD,CAAR,GAAcyjI,mBAAmB,CAAChyG,KAAK,CAACzxB,CAAD,CAAN,CAAjC;EACH;EACJ;EACJ;;EACDyxB,MAAAA,KAAK,GAAG+xG,QAAR;EACH;;EAED,WAAO/E,SAAS,CAAChtG,KAAD,EAAQitG,IAAR,CAAhB;EACH,GAjBD,CA1QgB;EA8RhB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;EACA,WAASE,UAAT,CAAoBntG,KAApB,EAA2B;EAEvB,QAAIktG,GAAG,GAAG;EAAEx0H,MAAAA,CAAC,EAAE,CAAL;EAAQZ,MAAAA,CAAC,EAAE,CAAX;EAAcpG,MAAAA,CAAC,EAAE;EAAjB,KAAV;EACA,QAAID,CAAC,GAAG,CAAR;EACA,QAAID,CAAC,GAAG,IAAR;EACA,QAAIP,CAAC,GAAG,IAAR;EACA,QAAIzC,CAAC,GAAG,IAAR;EACA,QAAIs/H,EAAE,GAAG,KAAT;EACA,QAAItyH,MAAM,GAAG,KAAb;;EAEA,QAAI,OAAOwkB,KAAP,IAAgB,QAApB,EAA8B;EAC1BA,MAAAA,KAAK,GAAGiyG,mBAAmB,CAACjyG,KAAD,CAA3B;EACH;;EAED,QAAI,OAAOA,KAAP,IAAgB,QAApB,EAA8B;EAC1B,UAAIkyG,cAAc,CAAClyG,KAAK,CAACtnB,CAAP,CAAd,IAA2Bw5H,cAAc,CAAClyG,KAAK,CAACloB,CAAP,CAAzC,IAAsDo6H,cAAc,CAAClyG,KAAK,CAACtuB,CAAP,CAAxE,EAAmF;EAC/Ew7H,QAAAA,GAAG,GAAGiF,QAAQ,CAACnyG,KAAK,CAACtnB,CAAP,EAAUsnB,KAAK,CAACloB,CAAhB,EAAmBkoB,KAAK,CAACtuB,CAAzB,CAAd;EACAo8H,QAAAA,EAAE,GAAG,IAAL;EACAtyH,QAAAA,MAAM,GAAG0xB,MAAM,CAAClN,KAAK,CAACtnB,CAAP,CAAN,CAAgByzF,MAAhB,CAAuB,CAAC,CAAxB,MAA+B,GAA/B,GAAqC,MAArC,GAA8C,KAAvD;EACH,OAJD,MAKK,IAAI+lC,cAAc,CAAClyG,KAAK,CAACjoB,CAAP,CAAd,IAA2Bm6H,cAAc,CAAClyG,KAAK,CAACxuB,CAAP,CAAzC,IAAsD0gI,cAAc,CAAClyG,KAAK,CAAC/uB,CAAP,CAAxE,EAAmF;EACpFO,QAAAA,CAAC,GAAGwgI,mBAAmB,CAAChyG,KAAK,CAACxuB,CAAP,CAAvB;EACAP,QAAAA,CAAC,GAAG+gI,mBAAmB,CAAChyG,KAAK,CAAC/uB,CAAP,CAAvB;EACAi8H,QAAAA,GAAG,GAAGkF,QAAQ,CAACpyG,KAAK,CAACjoB,CAAP,EAAUvG,CAAV,EAAaP,CAAb,CAAd;EACA68H,QAAAA,EAAE,GAAG,IAAL;EACAtyH,QAAAA,MAAM,GAAG,KAAT;EACH,OANI,MAOA,IAAI02H,cAAc,CAAClyG,KAAK,CAACjoB,CAAP,CAAd,IAA2Bm6H,cAAc,CAAClyG,KAAK,CAACxuB,CAAP,CAAzC,IAAsD0gI,cAAc,CAAClyG,KAAK,CAACxxB,CAAP,CAAxE,EAAmF;EACpFgD,QAAAA,CAAC,GAAGwgI,mBAAmB,CAAChyG,KAAK,CAACxuB,CAAP,CAAvB;EACAhD,QAAAA,CAAC,GAAGwjI,mBAAmB,CAAChyG,KAAK,CAACxxB,CAAP,CAAvB;EACA0+H,QAAAA,GAAG,GAAGmF,QAAQ,CAACryG,KAAK,CAACjoB,CAAP,EAAUvG,CAAV,EAAahD,CAAb,CAAd;EACAs/H,QAAAA,EAAE,GAAG,IAAL;EACAtyH,QAAAA,MAAM,GAAG,KAAT;EACH;;EAED,UAAIwkB,KAAK,CAACouF,cAAN,CAAqB,GAArB,CAAJ,EAA+B;EAC3B38G,QAAAA,CAAC,GAAGuuB,KAAK,CAACvuB,CAAV;EACH;EACJ;;EAEDA,IAAAA,CAAC,GAAGq9H,UAAU,CAACr9H,CAAD,CAAd;EAEA,WAAO;EACHq8H,MAAAA,EAAE,EAAEA,EADD;EAEHtyH,MAAAA,MAAM,EAAEwkB,KAAK,CAACxkB,MAAN,IAAgBA,MAFrB;EAGH9C,MAAAA,CAAC,EAAEm0H,OAAO,CAAC,GAAD,EAAMC,OAAO,CAACI,GAAG,CAACx0H,CAAL,EAAQ,CAAR,CAAb,CAHP;EAIHZ,MAAAA,CAAC,EAAE+0H,OAAO,CAAC,GAAD,EAAMC,OAAO,CAACI,GAAG,CAACp1H,CAAL,EAAQ,CAAR,CAAb,CAJP;EAKHpG,MAAAA,CAAC,EAAEm7H,OAAO,CAAC,GAAD,EAAMC,OAAO,CAACI,GAAG,CAACx7H,CAAL,EAAQ,CAAR,CAAb,CALP;EAMHD,MAAAA,CAAC,EAAEA;EANA,KAAP;EAQH,GA9Ve;EAkWhB;EAEA;EACA;EAEA;EACA;EACA;EACA;EACA;;;EACA,WAAS0gI,QAAT,CAAkBz5H,CAAlB,EAAqBZ,CAArB,EAAwBpG,CAAxB,EAA0B;EACtB,WAAO;EACHgH,MAAAA,CAAC,EAAEu3H,OAAO,CAACv3H,CAAD,EAAI,GAAJ,CAAP,GAAkB,GADlB;EAEHZ,MAAAA,CAAC,EAAEm4H,OAAO,CAACn4H,CAAD,EAAI,GAAJ,CAAP,GAAkB,GAFlB;EAGHpG,MAAAA,CAAC,EAAEu+H,OAAO,CAACv+H,CAAD,EAAI,GAAJ,CAAP,GAAkB;EAHlB,KAAP;EAKH,GAlXe;EAqXhB;EACA;EACA;;;EACA,WAAS29H,QAAT,CAAkB32H,CAAlB,EAAqBZ,CAArB,EAAwBpG,CAAxB,EAA2B;EAEvBgH,IAAAA,CAAC,GAAGu3H,OAAO,CAACv3H,CAAD,EAAI,GAAJ,CAAX;EACAZ,IAAAA,CAAC,GAAGm4H,OAAO,CAACn4H,CAAD,EAAI,GAAJ,CAAX;EACApG,IAAAA,CAAC,GAAGu+H,OAAO,CAACv+H,CAAD,EAAI,GAAJ,CAAX;EAEA,QAAIhC,GAAG,GAAGo9H,OAAO,CAACp0H,CAAD,EAAIZ,CAAJ,EAAOpG,CAAP,CAAjB;EAAA,QAA4BjC,GAAG,GAAGo9H,OAAO,CAACn0H,CAAD,EAAIZ,CAAJ,EAAOpG,CAAP,CAAzC;EACA,QAAIqG,CAAJ;EAAA,QAAOvG,CAAP;EAAA,QAAUhD,CAAC,GAAG,CAACkB,GAAG,GAAGD,GAAP,IAAc,CAA5B;;EAEA,QAAGC,GAAG,IAAID,GAAV,EAAe;EACXsI,MAAAA,CAAC,GAAGvG,CAAC,GAAG,CAAR,CADW;EAEd,KAFD,MAGK;EACD,UAAIoG,CAAC,GAAGlI,GAAG,GAAGD,GAAd;EACA+B,MAAAA,CAAC,GAAGhD,CAAC,GAAG,GAAJ,GAAUoJ,CAAC,IAAI,IAAIlI,GAAJ,GAAUD,GAAd,CAAX,GAAgCmI,CAAC,IAAIlI,GAAG,GAAGD,GAAV,CAArC;;EACA,cAAOC,GAAP;EACI,aAAKgJ,CAAL;EAAQX,UAAAA,CAAC,GAAG,CAACD,CAAC,GAAGpG,CAAL,IAAUkG,CAAV,IAAeE,CAAC,GAAGpG,CAAJ,GAAQ,CAAR,GAAY,CAA3B,CAAJ;EAAmC;;EAC3C,aAAKoG,CAAL;EAAQC,UAAAA,CAAC,GAAG,CAACrG,CAAC,GAAGgH,CAAL,IAAUd,CAAV,GAAc,CAAlB;EAAqB;;EAC7B,aAAKlG,CAAL;EAAQqG,UAAAA,CAAC,GAAG,CAACW,CAAC,GAAGZ,CAAL,IAAUF,CAAV,GAAc,CAAlB;EAAqB;EAHjC;;EAMAG,MAAAA,CAAC,IAAI,CAAL;EACH;;EAED,WAAO;EAAEA,MAAAA,CAAC,EAAEA,CAAL;EAAQvG,MAAAA,CAAC,EAAEA,CAAX;EAAchD,MAAAA,CAAC,EAAEA;EAAjB,KAAP;EACH,GAjZe;EAoZhB;EACA;EACA;;;EACA,WAAS6jI,QAAT,CAAkBt6H,CAAlB,EAAqBvG,CAArB,EAAwBhD,CAAxB,EAA2B;EACvB,QAAIkK,CAAJ,EAAOZ,CAAP,EAAUpG,CAAV;EAEAqG,IAAAA,CAAC,GAAGk4H,OAAO,CAACl4H,CAAD,EAAI,GAAJ,CAAX;EACAvG,IAAAA,CAAC,GAAGy+H,OAAO,CAACz+H,CAAD,EAAI,GAAJ,CAAX;EACAhD,IAAAA,CAAC,GAAGyhI,OAAO,CAACzhI,CAAD,EAAI,GAAJ,CAAX;;EAEA,aAAS/gB,OAAT,CAAiB42B,CAAjB,EAAoB9F,CAApB,EAAuBxO,CAAvB,EAA0B;EACtB,UAAGA,CAAC,GAAG,CAAP,EAAUA,CAAC,IAAI,CAAL;EACV,UAAGA,CAAC,GAAG,CAAP,EAAUA,CAAC,IAAI,CAAL;EACV,UAAGA,CAAC,GAAG,IAAE,CAAT,EAAY,OAAOsU,CAAC,GAAG,CAAC9F,CAAC,GAAG8F,CAAL,IAAU,CAAV,GAActU,CAAzB;EACZ,UAAGA,CAAC,GAAG,IAAE,CAAT,EAAY,OAAOwO,CAAP;EACZ,UAAGxO,CAAC,GAAG,IAAE,CAAT,EAAY,OAAOsU,CAAC,GAAG,CAAC9F,CAAC,GAAG8F,CAAL,KAAW,IAAE,CAAF,GAAMtU,CAAjB,IAAsB,CAAjC;EACZ,aAAOsU,CAAP;EACH;;EAED,QAAG7S,CAAC,KAAK,CAAT,EAAY;EACRkH,MAAAA,CAAC,GAAGZ,CAAC,GAAGpG,CAAC,GAAGlD,CAAZ,CADQ;EAEX,KAFD,MAGK;EACD,UAAI+P,CAAC,GAAG/P,CAAC,GAAG,GAAJ,GAAUA,CAAC,IAAI,IAAIgD,CAAR,CAAX,GAAwBhD,CAAC,GAAGgD,CAAJ,GAAQhD,CAAC,GAAGgD,CAA5C;EACA,UAAI6S,CAAC,GAAG,IAAI7V,CAAJ,GAAQ+P,CAAhB;EACA7F,MAAAA,CAAC,GAAGjrB,OAAO,CAAC42B,CAAD,EAAI9F,CAAJ,EAAOxG,CAAC,GAAG,IAAE,CAAb,CAAX;EACAD,MAAAA,CAAC,GAAGrqB,OAAO,CAAC42B,CAAD,EAAI9F,CAAJ,EAAOxG,CAAP,CAAX;EACArG,MAAAA,CAAC,GAAGjkB,OAAO,CAAC42B,CAAD,EAAI9F,CAAJ,EAAOxG,CAAC,GAAG,IAAE,CAAb,CAAX;EACH;;EAED,WAAO;EAAEW,MAAAA,CAAC,EAAEA,CAAC,GAAG,GAAT;EAAcZ,MAAAA,CAAC,EAAEA,CAAC,GAAG,GAArB;EAA0BpG,MAAAA,CAAC,EAAEA,CAAC,GAAG;EAAjC,KAAP;EACH,GAnbe;EAsbhB;EACA;EACA;;;EACA,WAASu9H,QAAT,CAAkBv2H,CAAlB,EAAqBZ,CAArB,EAAwBpG,CAAxB,EAA2B;EAEvBgH,IAAAA,CAAC,GAAGu3H,OAAO,CAACv3H,CAAD,EAAI,GAAJ,CAAX;EACAZ,IAAAA,CAAC,GAAGm4H,OAAO,CAACn4H,CAAD,EAAI,GAAJ,CAAX;EACApG,IAAAA,CAAC,GAAGu+H,OAAO,CAACv+H,CAAD,EAAI,GAAJ,CAAX;EAEA,QAAIhC,GAAG,GAAGo9H,OAAO,CAACp0H,CAAD,EAAIZ,CAAJ,EAAOpG,CAAP,CAAjB;EAAA,QAA4BjC,GAAG,GAAGo9H,OAAO,CAACn0H,CAAD,EAAIZ,CAAJ,EAAOpG,CAAP,CAAzC;EACA,QAAIqG,CAAJ;EAAA,QAAOvG,CAAP;EAAA,QAAUP,CAAC,GAAGvB,GAAd;EAEA,QAAIkI,CAAC,GAAGlI,GAAG,GAAGD,GAAd;EACA+B,IAAAA,CAAC,GAAG9B,GAAG,KAAK,CAAR,GAAY,CAAZ,GAAgBkI,CAAC,GAAGlI,GAAxB;;EAEA,QAAGA,GAAG,IAAID,GAAV,EAAe;EACXsI,MAAAA,CAAC,GAAG,CAAJ,CADW;EAEd,KAFD,MAGK;EACD,cAAOrI,GAAP;EACI,aAAKgJ,CAAL;EAAQX,UAAAA,CAAC,GAAG,CAACD,CAAC,GAAGpG,CAAL,IAAUkG,CAAV,IAAeE,CAAC,GAAGpG,CAAJ,GAAQ,CAAR,GAAY,CAA3B,CAAJ;EAAmC;;EAC3C,aAAKoG,CAAL;EAAQC,UAAAA,CAAC,GAAG,CAACrG,CAAC,GAAGgH,CAAL,IAAUd,CAAV,GAAc,CAAlB;EAAqB;;EAC7B,aAAKlG,CAAL;EAAQqG,UAAAA,CAAC,GAAG,CAACW,CAAC,GAAGZ,CAAL,IAAUF,CAAV,GAAc,CAAlB;EAAqB;EAHjC;;EAKAG,MAAAA,CAAC,IAAI,CAAL;EACH;;EACD,WAAO;EAAEA,MAAAA,CAAC,EAAEA,CAAL;EAAQvG,MAAAA,CAAC,EAAEA,CAAX;EAAcP,MAAAA,CAAC,EAAEA;EAAjB,KAAP;EACH,GAjde;EAodhB;EACA;EACA;;;EACC,WAASmhI,QAAT,CAAkBr6H,CAAlB,EAAqBvG,CAArB,EAAwBP,CAAxB,EAA2B;EAExB8G,IAAAA,CAAC,GAAGk4H,OAAO,CAACl4H,CAAD,EAAI,GAAJ,CAAP,GAAkB,CAAtB;EACAvG,IAAAA,CAAC,GAAGy+H,OAAO,CAACz+H,CAAD,EAAI,GAAJ,CAAX;EACAP,IAAAA,CAAC,GAAGg/H,OAAO,CAACh/H,CAAD,EAAI,GAAJ,CAAX;EAEA,QAAI1C,CAAC,GAAGI,IAAI,CAACsB,KAAL,CAAW8H,CAAX,CAAR;EAAA,QACIF,CAAC,GAAGE,CAAC,GAAGxJ,CADZ;EAAA,QAEI8V,CAAC,GAAGpT,CAAC,IAAI,IAAIO,CAAR,CAFT;EAAA,QAGI+M,CAAC,GAAGtN,CAAC,IAAI,IAAI4G,CAAC,GAAGrG,CAAZ,CAHT;EAAA,QAIIzB,CAAC,GAAGkB,CAAC,IAAI,IAAI,CAAC,IAAI4G,CAAL,IAAUrG,CAAlB,CAJT;EAAA,QAKI8gI,GAAG,GAAG/jI,CAAC,GAAG,CALd;EAAA,QAMImK,CAAC,GAAG,CAACzH,CAAD,EAAIsN,CAAJ,EAAO8F,CAAP,EAAUA,CAAV,EAAatU,CAAb,EAAgBkB,CAAhB,EAAmBqhI,GAAnB,CANR;EAAA,QAOIx6H,CAAC,GAAG,CAAC/H,CAAD,EAAIkB,CAAJ,EAAOA,CAAP,EAAUsN,CAAV,EAAa8F,CAAb,EAAgBA,CAAhB,EAAmBiuH,GAAnB,CAPR;EAAA,QAQI5gI,CAAC,GAAG,CAAC2S,CAAD,EAAIA,CAAJ,EAAOtU,CAAP,EAAUkB,CAAV,EAAaA,CAAb,EAAgBsN,CAAhB,EAAmB+zH,GAAnB,CARR;EAUA,WAAO;EAAE55H,MAAAA,CAAC,EAAEA,CAAC,GAAG,GAAT;EAAcZ,MAAAA,CAAC,EAAEA,CAAC,GAAG,GAArB;EAA0BpG,MAAAA,CAAC,EAAEA,CAAC,GAAG;EAAjC,KAAP;EACH,GAxee;EA2ehB;EACA;EACA;;;EACA,WAAS+9H,QAAT,CAAkB/2H,CAAlB,EAAqBZ,CAArB,EAAwBpG,CAAxB,EAA2B89H,UAA3B,EAAuC;EAEnC,QAAItrG,GAAG,GAAG,CACNquG,IAAI,CAAC3F,SAAS,CAACl0H,CAAD,CAAT,CAAa7J,QAAb,CAAsB,EAAtB,CAAD,CADE,EAEN0jI,IAAI,CAAC3F,SAAS,CAAC90H,CAAD,CAAT,CAAajJ,QAAb,CAAsB,EAAtB,CAAD,CAFE,EAGN0jI,IAAI,CAAC3F,SAAS,CAACl7H,CAAD,CAAT,CAAa7C,QAAb,CAAsB,EAAtB,CAAD,CAHE,CAAV,CAFmC;;EASnC,QAAI2gI,UAAU,IAAItrG,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,KAAoBT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,CAAlC,IAAsDT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,KAAoBT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,CAA1E,IAA8FT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,KAAoBT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,CAAtH,EAAwI;EACpI,aAAOT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,IAAmBT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,CAAnB,GAAsCT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,CAA7C;EACH;;EAED,WAAOT,GAAG,CAAC+yB,IAAJ,CAAS,EAAT,CAAP;EACH,GA5fe;EA+fhB;EACA;EACA;;;EACA,WAAS44E,SAAT,CAAmBn3H,CAAnB,EAAsBZ,CAAtB,EAAyBpG,CAAzB,EAA4BD,CAA5B,EAA+Bm+H,UAA/B,EAA2C;EAEvC,QAAI1rG,GAAG,GAAG,CACNquG,IAAI,CAAC3F,SAAS,CAACl0H,CAAD,CAAT,CAAa7J,QAAb,CAAsB,EAAtB,CAAD,CADE,EAEN0jI,IAAI,CAAC3F,SAAS,CAAC90H,CAAD,CAAT,CAAajJ,QAAb,CAAsB,EAAtB,CAAD,CAFE,EAGN0jI,IAAI,CAAC3F,SAAS,CAACl7H,CAAD,CAAT,CAAa7C,QAAb,CAAsB,EAAtB,CAAD,CAHE,EAIN0jI,IAAI,CAACC,mBAAmB,CAAC/gI,CAAD,CAApB,CAJE,CAAV,CAFuC;;EAUvC,QAAIm+H,UAAU,IAAI1rG,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,KAAoBT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,CAAlC,IAAsDT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,KAAoBT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,CAA1E,IAA8FT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,KAAoBT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,CAAlH,IAAsIT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,KAAoBT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,CAA9J,EAAgL;EAC5K,aAAOT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,IAAmBT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,CAAnB,GAAsCT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,CAAtC,GAAyDT,GAAG,CAAC,CAAD,CAAH,CAAOS,MAAP,CAAc,CAAd,CAAhE;EACH;;EAED,WAAOT,GAAG,CAAC+yB,IAAJ,CAAS,EAAT,CAAP;EACH,GAjhBe;EAohBhB;EACA;;;EACA,WAASu5E,aAAT,CAAuB93H,CAAvB,EAA0BZ,CAA1B,EAA6BpG,CAA7B,EAAgCD,CAAhC,EAAmC;EAE/B,QAAIyyB,GAAG,GAAG,CACNquG,IAAI,CAACC,mBAAmB,CAAC/gI,CAAD,CAApB,CADE,EAEN8gI,IAAI,CAAC3F,SAAS,CAACl0H,CAAD,CAAT,CAAa7J,QAAb,CAAsB,EAAtB,CAAD,CAFE,EAGN0jI,IAAI,CAAC3F,SAAS,CAAC90H,CAAD,CAAT,CAAajJ,QAAb,CAAsB,EAAtB,CAAD,CAHE,EAIN0jI,IAAI,CAAC3F,SAAS,CAACl7H,CAAD,CAAT,CAAa7C,QAAb,CAAsB,EAAtB,CAAD,CAJE,CAAV;EAOA,WAAOq1B,GAAG,CAAC+yB,IAAJ,CAAS,EAAT,CAAP;EACH,GAhiBe;EAmiBhB;;;EACA+1E,EAAAA,SAAS,CAACtpI,MAAV,GAAmB,UAAUuiC,MAAV,EAAkBC,MAAlB,EAA0B;EACzC,QAAI,CAACD,MAAD,IAAW,CAACC,MAAhB,EAAwB;EAAE,aAAO,KAAP;EAAe;;EACzC,WAAO8mG,SAAS,CAAC/mG,MAAD,CAAT,CAAkB8pG,WAAlB,MAAmC/C,SAAS,CAAC9mG,MAAD,CAAT,CAAkB6pG,WAAlB,EAA1C;EACH,GAHD;;EAKA/C,EAAAA,SAAS,CAAC79H,MAAV,GAAmB,YAAW;EAC1B,WAAO69H,SAAS,CAAC8E,SAAV,CAAoB;EACvBp5H,MAAAA,CAAC,EAAEq0H,UAAU,EADU;EAEvBj1H,MAAAA,CAAC,EAAEi1H,UAAU,EAFU;EAGvBr7H,MAAAA,CAAC,EAAEq7H,UAAU;EAHU,KAApB,CAAP;EAKH,GAND,CAziBgB;EAmjBhB;EACA;EACA;;;EAEA,WAASoE,UAAT,CAAoBnxG,KAApB,EAA2Bg3D,MAA3B,EAAmC;EAC/BA,IAAAA,MAAM,GAAIA,MAAM,KAAK,CAAZ,GAAiB,CAAjB,GAAsBA,MAAM,IAAI,EAAzC;EACA,QAAIo4C,GAAG,GAAGpC,SAAS,CAAChtG,KAAD,CAAT,CAAiBmvG,KAAjB,EAAV;EACAC,IAAAA,GAAG,CAAC59H,CAAJ,IAASwlF,MAAM,GAAG,GAAlB;EACAo4C,IAAAA,GAAG,CAAC59H,CAAJ,GAAQihI,OAAO,CAACrD,GAAG,CAAC59H,CAAL,CAAf;EACA,WAAOw7H,SAAS,CAACoC,GAAD,CAAhB;EACH;;EAED,WAASgC,QAAT,CAAkBpxG,KAAlB,EAAyBg3D,MAAzB,EAAiC;EAC7BA,IAAAA,MAAM,GAAIA,MAAM,KAAK,CAAZ,GAAiB,CAAjB,GAAsBA,MAAM,IAAI,EAAzC;EACA,QAAIo4C,GAAG,GAAGpC,SAAS,CAAChtG,KAAD,CAAT,CAAiBmvG,KAAjB,EAAV;EACAC,IAAAA,GAAG,CAAC59H,CAAJ,IAASwlF,MAAM,GAAG,GAAlB;EACAo4C,IAAAA,GAAG,CAAC59H,CAAJ,GAAQihI,OAAO,CAACrD,GAAG,CAAC59H,CAAL,CAAf;EACA,WAAOw7H,SAAS,CAACoC,GAAD,CAAhB;EACH;;EAED,WAASiC,SAAT,CAAmBrxG,KAAnB,EAA0B;EACtB,WAAOgtG,SAAS,CAAChtG,KAAD,CAAT,CAAiBmxG,UAAjB,CAA4B,GAA5B,CAAP;EACH;;EAED,WAASH,OAAT,CAAkBhxG,KAAlB,EAAyBg3D,MAAzB,EAAiC;EAC7BA,IAAAA,MAAM,GAAIA,MAAM,KAAK,CAAZ,GAAiB,CAAjB,GAAsBA,MAAM,IAAI,EAAzC;EACA,QAAIo4C,GAAG,GAAGpC,SAAS,CAAChtG,KAAD,CAAT,CAAiBmvG,KAAjB,EAAV;EACAC,IAAAA,GAAG,CAAC5gI,CAAJ,IAASwoF,MAAM,GAAG,GAAlB;EACAo4C,IAAAA,GAAG,CAAC5gI,CAAJ,GAAQikI,OAAO,CAACrD,GAAG,CAAC5gI,CAAL,CAAf;EACA,WAAOw+H,SAAS,CAACoC,GAAD,CAAhB;EACH;;EAED,WAAS6B,QAAT,CAAkBjxG,KAAlB,EAAyBg3D,MAAzB,EAAiC;EAC7BA,IAAAA,MAAM,GAAIA,MAAM,KAAK,CAAZ,GAAiB,CAAjB,GAAsBA,MAAM,IAAI,EAAzC;EACA,QAAIk2C,GAAG,GAAGF,SAAS,CAAChtG,KAAD,CAAT,CAAiBsuG,KAAjB,EAAV;EACApB,IAAAA,GAAG,CAACx0H,CAAJ,GAAQo0H,OAAO,CAAC,CAAD,EAAID,OAAO,CAAC,GAAD,EAAMK,GAAG,CAACx0H,CAAJ,GAAQk0H,SAAS,CAAC,MAAM,EAAG51C,MAAM,GAAG,GAAZ,CAAP,CAAvB,CAAX,CAAf;EACAk2C,IAAAA,GAAG,CAACp1H,CAAJ,GAAQg1H,OAAO,CAAC,CAAD,EAAID,OAAO,CAAC,GAAD,EAAMK,GAAG,CAACp1H,CAAJ,GAAQ80H,SAAS,CAAC,MAAM,EAAG51C,MAAM,GAAG,GAAZ,CAAP,CAAvB,CAAX,CAAf;EACAk2C,IAAAA,GAAG,CAACx7H,CAAJ,GAAQo7H,OAAO,CAAC,CAAD,EAAID,OAAO,CAAC,GAAD,EAAMK,GAAG,CAACx7H,CAAJ,GAAQk7H,SAAS,CAAC,MAAM,EAAG51C,MAAM,GAAG,GAAZ,CAAP,CAAvB,CAAX,CAAf;EACA,WAAOg2C,SAAS,CAACE,GAAD,CAAhB;EACH;;EAED,WAASgE,MAAT,CAAiBlxG,KAAjB,EAAwBg3D,MAAxB,EAAgC;EAC5BA,IAAAA,MAAM,GAAIA,MAAM,KAAK,CAAZ,GAAiB,CAAjB,GAAsBA,MAAM,IAAI,EAAzC;EACA,QAAIo4C,GAAG,GAAGpC,SAAS,CAAChtG,KAAD,CAAT,CAAiBmvG,KAAjB,EAAV;EACAC,IAAAA,GAAG,CAAC5gI,CAAJ,IAASwoF,MAAM,GAAG,GAAlB;EACAo4C,IAAAA,GAAG,CAAC5gI,CAAJ,GAAQikI,OAAO,CAACrD,GAAG,CAAC5gI,CAAL,CAAf;EACA,WAAOw+H,SAAS,CAACoC,GAAD,CAAhB;EACH,GAlmBe;EAqmBhB;;;EACA,WAASkC,IAAT,CAActxG,KAAd,EAAqBg3D,MAArB,EAA6B;EACzB,QAAIo4C,GAAG,GAAGpC,SAAS,CAAChtG,KAAD,CAAT,CAAiBmvG,KAAjB,EAAV;EACA,QAAIzpG,GAAG,GAAG,CAAC0pG,GAAG,CAACr3H,CAAJ,GAAQi/E,MAAT,IAAmB,GAA7B;EACAo4C,IAAAA,GAAG,CAACr3H,CAAJ,GAAQ2tB,GAAG,GAAG,CAAN,GAAU,MAAMA,GAAhB,GAAsBA,GAA9B;EACA,WAAOsnG,SAAS,CAACoC,GAAD,CAAhB;EACH,GA3mBe;EA8mBhB;EACA;EACA;;;EAEA,WAASqC,UAAT,CAAoBzxG,KAApB,EAA2B;EACvB,QAAIovG,GAAG,GAAGpC,SAAS,CAAChtG,KAAD,CAAT,CAAiBmvG,KAAjB,EAAV;EACAC,IAAAA,GAAG,CAACr3H,CAAJ,GAAQ,CAACq3H,GAAG,CAACr3H,CAAJ,GAAQ,GAAT,IAAgB,GAAxB;EACA,WAAOi1H,SAAS,CAACoC,GAAD,CAAhB;EACH;;EAED,WAASwC,KAAT,CAAe5xG,KAAf,EAAsB;EAClB,QAAIovG,GAAG,GAAGpC,SAAS,CAAChtG,KAAD,CAAT,CAAiBmvG,KAAjB,EAAV;EACA,QAAIp3H,CAAC,GAAGq3H,GAAG,CAACr3H,CAAZ;EACA,WAAO,CACHi1H,SAAS,CAAChtG,KAAD,CADN,EAEHgtG,SAAS,CAAC;EAAEj1H,MAAAA,CAAC,EAAE,CAACA,CAAC,GAAG,GAAL,IAAY,GAAjB;EAAsBvG,MAAAA,CAAC,EAAE49H,GAAG,CAAC59H,CAA7B;EAAgChD,MAAAA,CAAC,EAAE4gI,GAAG,CAAC5gI;EAAvC,KAAD,CAFN,EAGHw+H,SAAS,CAAC;EAAEj1H,MAAAA,CAAC,EAAE,CAACA,CAAC,GAAG,GAAL,IAAY,GAAjB;EAAsBvG,MAAAA,CAAC,EAAE49H,GAAG,CAAC59H,CAA7B;EAAgChD,MAAAA,CAAC,EAAE4gI,GAAG,CAAC5gI;EAAvC,KAAD,CAHN,CAAP;EAKH;;EAED,WAASqjI,MAAT,CAAgB7xG,KAAhB,EAAuB;EACnB,QAAIovG,GAAG,GAAGpC,SAAS,CAAChtG,KAAD,CAAT,CAAiBmvG,KAAjB,EAAV;EACA,QAAIp3H,CAAC,GAAGq3H,GAAG,CAACr3H,CAAZ;EACA,WAAO,CACHi1H,SAAS,CAAChtG,KAAD,CADN,EAEHgtG,SAAS,CAAC;EAAEj1H,MAAAA,CAAC,EAAE,CAACA,CAAC,GAAG,EAAL,IAAW,GAAhB;EAAqBvG,MAAAA,CAAC,EAAE49H,GAAG,CAAC59H,CAA5B;EAA+BhD,MAAAA,CAAC,EAAE4gI,GAAG,CAAC5gI;EAAtC,KAAD,CAFN,EAGHw+H,SAAS,CAAC;EAAEj1H,MAAAA,CAAC,EAAE,CAACA,CAAC,GAAG,GAAL,IAAY,GAAjB;EAAsBvG,MAAAA,CAAC,EAAE49H,GAAG,CAAC59H,CAA7B;EAAgChD,MAAAA,CAAC,EAAE4gI,GAAG,CAAC5gI;EAAvC,KAAD,CAHN,EAIHw+H,SAAS,CAAC;EAAEj1H,MAAAA,CAAC,EAAE,CAACA,CAAC,GAAG,GAAL,IAAY,GAAjB;EAAsBvG,MAAAA,CAAC,EAAE49H,GAAG,CAAC59H,CAA7B;EAAgChD,MAAAA,CAAC,EAAE4gI,GAAG,CAAC5gI;EAAvC,KAAD,CAJN,CAAP;EAMH;;EAED,WAASmjI,eAAT,CAAyB3xG,KAAzB,EAAgC;EAC5B,QAAIovG,GAAG,GAAGpC,SAAS,CAAChtG,KAAD,CAAT,CAAiBmvG,KAAjB,EAAV;EACA,QAAIp3H,CAAC,GAAGq3H,GAAG,CAACr3H,CAAZ;EACA,WAAO,CACHi1H,SAAS,CAAChtG,KAAD,CADN,EAEHgtG,SAAS,CAAC;EAAEj1H,MAAAA,CAAC,EAAE,CAACA,CAAC,GAAG,EAAL,IAAW,GAAhB;EAAqBvG,MAAAA,CAAC,EAAE49H,GAAG,CAAC59H,CAA5B;EAA+BhD,MAAAA,CAAC,EAAE4gI,GAAG,CAAC5gI;EAAtC,KAAD,CAFN,EAGHw+H,SAAS,CAAC;EAAEj1H,MAAAA,CAAC,EAAE,CAACA,CAAC,GAAG,GAAL,IAAY,GAAjB;EAAsBvG,MAAAA,CAAC,EAAE49H,GAAG,CAAC59H,CAA7B;EAAgChD,MAAAA,CAAC,EAAE4gI,GAAG,CAAC5gI;EAAvC,KAAD,CAHN,CAAP;EAKH;;EAED,WAASgjI,SAAT,CAAmBxxG,KAAnB,EAA0By1E,OAA1B,EAAmCi9B,MAAnC,EAA2C;EACvCj9B,IAAAA,OAAO,GAAGA,OAAO,IAAI,CAArB;EACAi9B,IAAAA,MAAM,GAAGA,MAAM,IAAI,EAAnB;EAEA,QAAItD,GAAG,GAAGpC,SAAS,CAAChtG,KAAD,CAAT,CAAiBmvG,KAAjB,EAAV;EACA,QAAIwD,IAAI,GAAG,MAAMD,MAAjB;EACA,QAAIE,GAAG,GAAG,CAAC5F,SAAS,CAAChtG,KAAD,CAAV,CAAV;;EAEA,SAAKovG,GAAG,CAACr3H,CAAJ,GAAQ,CAAEq3H,GAAG,CAACr3H,CAAJ,IAAS46H,IAAI,GAAGl9B,OAAP,IAAkB,CAA3B,CAAD,GAAkC,GAAnC,IAA0C,GAAvD,EAA4D,EAAEA,OAA9D,GAAyE;EACrE25B,MAAAA,GAAG,CAACr3H,CAAJ,GAAQ,CAACq3H,GAAG,CAACr3H,CAAJ,GAAQ46H,IAAT,IAAiB,GAAzB;EACAC,MAAAA,GAAG,CAAChlI,IAAJ,CAASo/H,SAAS,CAACoC,GAAD,CAAlB;EACH;;EACD,WAAOwD,GAAP;EACH;;EAED,WAASlB,aAAT,CAAuB1xG,KAAvB,EAA8By1E,OAA9B,EAAuC;EACnCA,IAAAA,OAAO,GAAGA,OAAO,IAAI,CAArB;EACA,QAAIu5B,GAAG,GAAGhC,SAAS,CAAChtG,KAAD,CAAT,CAAiB+uG,KAAjB,EAAV;EACA,QAAIh3H,CAAC,GAAGi3H,GAAG,CAACj3H,CAAZ;EAAA,QAAevG,CAAC,GAAGw9H,GAAG,CAACx9H,CAAvB;EAAA,QAA0BP,CAAC,GAAG+9H,GAAG,CAAC/9H,CAAlC;EACA,QAAI2hI,GAAG,GAAG,EAAV;EACA,QAAIC,YAAY,GAAG,IAAIp9B,OAAvB;;EAEA,WAAOA,OAAO,EAAd,EAAkB;EACdm9B,MAAAA,GAAG,CAAChlI,IAAJ,CAASo/H,SAAS,CAAC;EAAEj1H,QAAAA,CAAC,EAAEA,CAAL;EAAQvG,QAAAA,CAAC,EAAEA,CAAX;EAAcP,QAAAA,CAAC,EAAEA;EAAjB,OAAD,CAAlB;EACAA,MAAAA,CAAC,GAAG,CAACA,CAAC,GAAG4hI,YAAL,IAAqB,CAAzB;EACH;;EAED,WAAOD,GAAP;EACH,GAnrBe;EAsrBhB;;;EAEA5F,EAAAA,SAAS,CAACv5B,GAAV,GAAgB,UAASxtE,MAAT,EAAiBC,MAAjB,EAAyB8wD,MAAzB,EAAiC;EAC7CA,IAAAA,MAAM,GAAIA,MAAM,KAAK,CAAZ,GAAiB,CAAjB,GAAsBA,MAAM,IAAI,EAAzC;EAEA,QAAI87C,IAAI,GAAG9F,SAAS,CAAC/mG,MAAD,CAAT,CAAkBqoG,KAAlB,EAAX;EACA,QAAIyE,IAAI,GAAG/F,SAAS,CAAC9mG,MAAD,CAAT,CAAkBooG,KAAlB,EAAX;EAEA,QAAIjqH,CAAC,GAAG2yE,MAAM,GAAG,GAAjB;EAEA,QAAIg8C,IAAI,GAAG;EACPt6H,MAAAA,CAAC,EAAG,CAACq6H,IAAI,CAACr6H,CAAL,GAASo6H,IAAI,CAACp6H,CAAf,IAAoB2L,CAArB,GAA0ByuH,IAAI,CAACp6H,CAD3B;EAEPZ,MAAAA,CAAC,EAAG,CAACi7H,IAAI,CAACj7H,CAAL,GAASg7H,IAAI,CAACh7H,CAAf,IAAoBuM,CAArB,GAA0ByuH,IAAI,CAACh7H,CAF3B;EAGPpG,MAAAA,CAAC,EAAG,CAACqhI,IAAI,CAACrhI,CAAL,GAASohI,IAAI,CAACphI,CAAf,IAAoB2S,CAArB,GAA0ByuH,IAAI,CAACphI,CAH3B;EAIPD,MAAAA,CAAC,EAAG,CAACshI,IAAI,CAACthI,CAAL,GAASqhI,IAAI,CAACrhI,CAAf,IAAoB4S,CAArB,GAA0ByuH,IAAI,CAACrhI;EAJ3B,KAAX;EAOA,WAAOu7H,SAAS,CAACgG,IAAD,CAAhB;EACH,GAhBD,CAxrBgB;EA4sBhB;EACA;EAEA;EACA;;;EACAhG,EAAAA,SAAS,CAACiG,WAAV,GAAwB,UAAShtG,MAAT,EAAiBC,MAAjB,EAAyB;EAC7C,QAAI/iB,EAAE,GAAG6pH,SAAS,CAAC/mG,MAAD,CAAlB;EACA,QAAI7iB,EAAE,GAAG4pH,SAAS,CAAC9mG,MAAD,CAAlB;EACA,WAAO,CAACv3B,IAAI,CAACe,GAAL,CAASyT,EAAE,CAACorH,YAAH,EAAT,EAA2BnrH,EAAE,CAACmrH,YAAH,EAA3B,IAA8C,IAA/C,KAAwD5/H,IAAI,CAACc,GAAL,CAAS0T,EAAE,CAACorH,YAAH,EAAT,EAA2BnrH,EAAE,CAACmrH,YAAH,EAA3B,IAA8C,IAAtG,CAAP;EACH,GAJD,CAjtBgB;EAwtBhB;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;;EACAvB,EAAAA,SAAS,CAACkG,UAAV,GAAuB,UAASjtG,MAAT,EAAiBC,MAAjB,EAAyBitG,KAAzB,EAAgC;EACnD,QAAIF,WAAW,GAAGjG,SAAS,CAACiG,WAAV,CAAsBhtG,MAAtB,EAA8BC,MAA9B,CAAlB;EACA,QAAIktG,UAAJ,EAAgBC,GAAhB;EAEAA,IAAAA,GAAG,GAAG,KAAN;EAEAD,IAAAA,UAAU,GAAGE,kBAAkB,CAACH,KAAD,CAA/B;;EACA,YAAQC,UAAU,CAACxsD,KAAX,GAAmBwsD,UAAU,CAACzpH,IAAtC;EACI,WAAK,SAAL;EACA,WAAK,UAAL;EACI0pH,QAAAA,GAAG,GAAGJ,WAAW,IAAI,GAArB;EACA;;EACJ,WAAK,SAAL;EACII,QAAAA,GAAG,GAAGJ,WAAW,IAAI,CAArB;EACA;;EACJ,WAAK,UAAL;EACII,QAAAA,GAAG,GAAGJ,WAAW,IAAI,CAArB;EACA;EAVR;;EAYA,WAAOI,GAAP;EAEH,GArBD,CAjuBgB;EAyvBhB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;EACArG,EAAAA,SAAS,CAACuG,YAAV,GAAyB,UAASC,SAAT,EAAoBC,SAApB,EAA+B9lB,IAA/B,EAAqC;EAC1D,QAAI+lB,SAAS,GAAG,IAAhB;EACA,QAAIC,SAAS,GAAG,CAAhB;EACA,QAAIV,WAAJ;EACA,QAAIW,qBAAJ,EAA2BhtD,KAA3B,EAAkCj9D,IAAlC;EACAgkG,IAAAA,IAAI,GAAGA,IAAI,IAAI,EAAf;EACAimB,IAAAA,qBAAqB,GAAGjmB,IAAI,CAACimB,qBAA7B;EACAhtD,IAAAA,KAAK,GAAG+mC,IAAI,CAAC/mC,KAAb;EACAj9D,IAAAA,IAAI,GAAGgkG,IAAI,CAAChkG,IAAZ;;EAEA,SAAK,IAAIpb,CAAC,GAAE,CAAZ,EAAeA,CAAC,GAAGklI,SAAS,CAAChlI,MAA7B,EAAsCF,CAAC,EAAvC,EAA2C;EACvC0kI,MAAAA,WAAW,GAAGjG,SAAS,CAACiG,WAAV,CAAsBO,SAAtB,EAAiCC,SAAS,CAACllI,CAAD,CAA1C,CAAd;;EACA,UAAI0kI,WAAW,GAAGU,SAAlB,EAA6B;EACzBA,QAAAA,SAAS,GAAGV,WAAZ;EACAS,QAAAA,SAAS,GAAG1G,SAAS,CAACyG,SAAS,CAACllI,CAAD,CAAV,CAArB;EACH;EACJ;;EAED,QAAIy+H,SAAS,CAACkG,UAAV,CAAqBM,SAArB,EAAgCE,SAAhC,EAA2C;EAAC,eAAQ9sD,KAAT;EAAe,cAAOj9D;EAAtB,KAA3C,KAA2E,CAACiqH,qBAAhF,EAAuG;EACnG,aAAOF,SAAP;EACH,KAFD,MAGK;EACD/lB,MAAAA,IAAI,CAACimB,qBAAL,GAA2B,KAA3B;EACA,aAAO5G,SAAS,CAACuG,YAAV,CAAuBC,SAAvB,EAAiC,CAAC,MAAD,EAAS,MAAT,CAAjC,EAAkD7lB,IAAlD,CAAP;EACH;EACJ,GAzBD,CAjwBgB;EA8xBhB;EACA;;;EACA,MAAIkmB,KAAK,GAAG7G,SAAS,CAAC6G,KAAV,GAAkB;EAC1BC,IAAAA,SAAS,EAAE,QADe;EAE1BC,IAAAA,YAAY,EAAE,QAFY;EAG1BC,IAAAA,IAAI,EAAE,KAHoB;EAI1BC,IAAAA,UAAU,EAAE,QAJc;EAK1BC,IAAAA,KAAK,EAAE,QALmB;EAM1BC,IAAAA,KAAK,EAAE,QANmB;EAO1BC,IAAAA,MAAM,EAAE,QAPkB;EAQ1BC,IAAAA,KAAK,EAAE,KARmB;EAS1BC,IAAAA,cAAc,EAAE,QATU;EAU1BC,IAAAA,IAAI,EAAE,KAVoB;EAW1BC,IAAAA,UAAU,EAAE,QAXc;EAY1BC,IAAAA,KAAK,EAAE,QAZmB;EAa1BC,IAAAA,SAAS,EAAE,QAbe;EAc1BC,IAAAA,WAAW,EAAE,QAda;EAe1BC,IAAAA,SAAS,EAAE,QAfe;EAgB1BC,IAAAA,UAAU,EAAE,QAhBc;EAiB1BC,IAAAA,SAAS,EAAE,QAjBe;EAkB1BC,IAAAA,KAAK,EAAE,QAlBmB;EAmB1BC,IAAAA,cAAc,EAAE,QAnBU;EAoB1BC,IAAAA,QAAQ,EAAE,QApBgB;EAqB1BC,IAAAA,OAAO,EAAE,QArBiB;EAsB1BC,IAAAA,IAAI,EAAE,KAtBoB;EAuB1BC,IAAAA,QAAQ,EAAE,QAvBgB;EAwB1BC,IAAAA,QAAQ,EAAE,QAxBgB;EAyB1BC,IAAAA,aAAa,EAAE,QAzBW;EA0B1BC,IAAAA,QAAQ,EAAE,QA1BgB;EA2B1BC,IAAAA,SAAS,EAAE,QA3Be;EA4B1BC,IAAAA,QAAQ,EAAE,QA5BgB;EA6B1BC,IAAAA,SAAS,EAAE,QA7Be;EA8B1BC,IAAAA,WAAW,EAAE,QA9Ba;EA+B1BC,IAAAA,cAAc,EAAE,QA/BU;EAgC1BC,IAAAA,UAAU,EAAE,QAhCc;EAiC1BC,IAAAA,UAAU,EAAE,QAjCc;EAkC1BC,IAAAA,OAAO,EAAE,QAlCiB;EAmC1BC,IAAAA,UAAU,EAAE,QAnCc;EAoC1BC,IAAAA,YAAY,EAAE,QApCY;EAqC1BC,IAAAA,aAAa,EAAE,QArCW;EAsC1BC,IAAAA,aAAa,EAAE,QAtCW;EAuC1BC,IAAAA,aAAa,EAAE,QAvCW;EAwC1BC,IAAAA,aAAa,EAAE,QAxCW;EAyC1BC,IAAAA,UAAU,EAAE,QAzCc;EA0C1BC,IAAAA,QAAQ,EAAE,QA1CgB;EA2C1BC,IAAAA,WAAW,EAAE,QA3Ca;EA4C1BC,IAAAA,OAAO,EAAE,QA5CiB;EA6C1BC,IAAAA,OAAO,EAAE,QA7CiB;EA8C1BC,IAAAA,UAAU,EAAE,QA9Cc;EA+C1BC,IAAAA,SAAS,EAAE,QA/Ce;EAgD1BC,IAAAA,WAAW,EAAE,QAhDa;EAiD1BC,IAAAA,WAAW,EAAE,QAjDa;EAkD1BC,IAAAA,OAAO,EAAE,KAlDiB;EAmD1BC,IAAAA,SAAS,EAAE,QAnDe;EAoD1BC,IAAAA,UAAU,EAAE,QApDc;EAqD1BC,IAAAA,IAAI,EAAE,QArDoB;EAsD1BC,IAAAA,SAAS,EAAE,QAtDe;EAuD1BC,IAAAA,IAAI,EAAE,QAvDoB;EAwD1BC,IAAAA,KAAK,EAAE,QAxDmB;EAyD1BC,IAAAA,WAAW,EAAE,QAzDa;EA0D1BC,IAAAA,IAAI,EAAE,QA1DoB;EA2D1BC,IAAAA,QAAQ,EAAE,QA3DgB;EA4D1BC,IAAAA,OAAO,EAAE,QA5DiB;EA6D1BC,IAAAA,SAAS,EAAE,QA7De;EA8D1BC,IAAAA,MAAM,EAAE,QA9DkB;EA+D1BC,IAAAA,KAAK,EAAE,QA/DmB;EAgE1BC,IAAAA,KAAK,EAAE,QAhEmB;EAiE1BC,IAAAA,QAAQ,EAAE,QAjEgB;EAkE1BC,IAAAA,aAAa,EAAE,QAlEW;EAmE1BC,IAAAA,SAAS,EAAE,QAnEe;EAoE1BC,IAAAA,YAAY,EAAE,QApEY;EAqE1BC,IAAAA,SAAS,EAAE,QArEe;EAsE1BC,IAAAA,UAAU,EAAE,QAtEc;EAuE1BC,IAAAA,SAAS,EAAE,QAvEe;EAwE1BC,IAAAA,oBAAoB,EAAE,QAxEI;EAyE1BC,IAAAA,SAAS,EAAE,QAzEe;EA0E1BC,IAAAA,UAAU,EAAE,QA1Ec;EA2E1BC,IAAAA,SAAS,EAAE,QA3Ee;EA4E1BC,IAAAA,SAAS,EAAE,QA5Ee;EA6E1BC,IAAAA,WAAW,EAAE,QA7Ea;EA8E1BC,IAAAA,aAAa,EAAE,QA9EW;EA+E1BC,IAAAA,YAAY,EAAE,QA/EY;EAgF1BC,IAAAA,cAAc,EAAE,KAhFU;EAiF1BC,IAAAA,cAAc,EAAE,KAjFU;EAkF1BC,IAAAA,cAAc,EAAE,QAlFU;EAmF1BC,IAAAA,WAAW,EAAE,QAnFa;EAoF1BC,IAAAA,IAAI,EAAE,KApFoB;EAqF1BC,IAAAA,SAAS,EAAE,QArFe;EAsF1BC,IAAAA,KAAK,EAAE,QAtFmB;EAuF1BC,IAAAA,OAAO,EAAE,KAvFiB;EAwF1BC,IAAAA,MAAM,EAAE,QAxFkB;EAyF1BC,IAAAA,gBAAgB,EAAE,QAzFQ;EA0F1BC,IAAAA,UAAU,EAAE,QA1Fc;EA2F1BC,IAAAA,YAAY,EAAE,QA3FY;EA4F1BC,IAAAA,YAAY,EAAE,QA5FY;EA6F1BC,IAAAA,cAAc,EAAE,QA7FU;EA8F1BC,IAAAA,eAAe,EAAE,QA9FS;EA+F1BC,IAAAA,iBAAiB,EAAE,QA/FO;EAgG1BC,IAAAA,eAAe,EAAE,QAhGS;EAiG1BC,IAAAA,eAAe,EAAE,QAjGS;EAkG1BC,IAAAA,YAAY,EAAE,QAlGY;EAmG1BC,IAAAA,SAAS,EAAE,QAnGe;EAoG1BC,IAAAA,SAAS,EAAE,QApGe;EAqG1BC,IAAAA,QAAQ,EAAE,QArGgB;EAsG1BC,IAAAA,WAAW,EAAE,QAtGa;EAuG1BC,IAAAA,IAAI,EAAE,QAvGoB;EAwG1BC,IAAAA,OAAO,EAAE,QAxGiB;EAyG1BC,IAAAA,KAAK,EAAE,QAzGmB;EA0G1BC,IAAAA,SAAS,EAAE,QA1Ge;EA2G1BC,IAAAA,MAAM,EAAE,QA3GkB;EA4G1BC,IAAAA,SAAS,EAAE,QA5Ge;EA6G1BC,IAAAA,MAAM,EAAE,QA7GkB;EA8G1BC,IAAAA,aAAa,EAAE,QA9GW;EA+G1BC,IAAAA,SAAS,EAAE,QA/Ge;EAgH1BC,IAAAA,aAAa,EAAE,QAhHW;EAiH1BC,IAAAA,aAAa,EAAE,QAjHW;EAkH1BC,IAAAA,UAAU,EAAE,QAlHc;EAmH1BC,IAAAA,SAAS,EAAE,QAnHe;EAoH1BC,IAAAA,IAAI,EAAE,QApHoB;EAqH1BC,IAAAA,IAAI,EAAE,QArHoB;EAsH1BC,IAAAA,IAAI,EAAE,QAtHoB;EAuH1BC,IAAAA,UAAU,EAAE,QAvHc;EAwH1BC,IAAAA,MAAM,EAAE,QAxHkB;EAyH1BC,IAAAA,aAAa,EAAE,QAzHW;EA0H1BC,IAAAA,GAAG,EAAE,KA1HqB;EA2H1BC,IAAAA,SAAS,EAAE,QA3He;EA4H1BC,IAAAA,SAAS,EAAE,QA5He;EA6H1BC,IAAAA,WAAW,EAAE,QA7Ha;EA8H1BC,IAAAA,MAAM,EAAE,QA9HkB;EA+H1BC,IAAAA,UAAU,EAAE,QA/Hc;EAgI1BC,IAAAA,QAAQ,EAAE,QAhIgB;EAiI1BC,IAAAA,QAAQ,EAAE,QAjIgB;EAkI1BC,IAAAA,MAAM,EAAE,QAlIkB;EAmI1BC,IAAAA,MAAM,EAAE,QAnIkB;EAoI1BC,IAAAA,OAAO,EAAE,QApIiB;EAqI1BC,IAAAA,SAAS,EAAE,QArIe;EAsI1BC,IAAAA,SAAS,EAAE,QAtIe;EAuI1BC,IAAAA,SAAS,EAAE,QAvIe;EAwI1BC,IAAAA,IAAI,EAAE,QAxIoB;EAyI1BC,IAAAA,WAAW,EAAE,QAzIa;EA0I1BC,IAAAA,SAAS,EAAE,QA1Ie;EA2I1BnrG,IAAAA,GAAG,EAAE,QA3IqB;EA4I1BorG,IAAAA,IAAI,EAAE,QA5IoB;EA6I1BC,IAAAA,OAAO,EAAE,QA7IiB;EA8I1BC,IAAAA,MAAM,EAAE,QA9IkB;EA+I1BC,IAAAA,SAAS,EAAE,QA/Ie;EAgJ1BC,IAAAA,MAAM,EAAE,QAhJkB;EAiJ1BC,IAAAA,KAAK,EAAE,QAjJmB;EAkJ1BC,IAAAA,KAAK,EAAE,KAlJmB;EAmJ1BC,IAAAA,UAAU,EAAE,QAnJc;EAoJ1BC,IAAAA,MAAM,EAAE,KApJkB;EAqJ1BC,IAAAA,WAAW,EAAE;EArJa,GAA9B,CAhyBgB;;EAy7BhB,MAAI7M,QAAQ,GAAGpD,SAAS,CAACoD,QAAV,GAAqB8M,IAAI,CAACrJ,KAAD,CAAxC,CAz7BgB;EA67BhB;EAEA;;EACA,WAASqJ,IAAT,CAAcn3C,CAAd,EAAiB;EACb,QAAIo3C,OAAO,GAAG,EAAd;;EACA,SAAK,IAAI5uI,CAAT,IAAcw3F,CAAd,EAAiB;EACb,UAAIA,CAAC,CAACqoB,cAAF,CAAiB7/G,CAAjB,CAAJ,EAAyB;EACrB4uI,QAAAA,OAAO,CAACp3C,CAAC,CAACx3F,CAAD,CAAF,CAAP,GAAgBA,CAAhB;EACH;EACJ;;EACD,WAAO4uI,OAAP;EACH,GAx8Be;;;EA28BhB,WAASrO,UAAT,CAAoBr9H,CAApB,EAAuB;EACnBA,IAAAA,CAAC,GAAG8yB,UAAU,CAAC9yB,CAAD,CAAd;;EAEA,QAAI63B,KAAK,CAAC73B,CAAD,CAAL,IAAYA,CAAC,GAAG,CAAhB,IAAqBA,CAAC,GAAG,CAA7B,EAAgC;EAC5BA,MAAAA,CAAC,GAAG,CAAJ;EACH;;EAED,WAAOA,CAAP;EACH,GAn9Be;;;EAs9BhB,WAASw+H,OAAT,CAAiBtgI,CAAjB,EAAoBD,GAApB,EAAyB;EACrB,QAAI0tI,cAAc,CAACztI,CAAD,CAAlB,EAAuB;EAAEA,MAAAA,CAAC,GAAG,MAAJ;EAAa;;EAEtC,QAAI0tI,cAAc,GAAGC,YAAY,CAAC3tI,CAAD,CAAjC;EACAA,IAAAA,CAAC,GAAGk9H,OAAO,CAACn9H,GAAD,EAAMo9H,OAAO,CAAC,CAAD,EAAIvoG,UAAU,CAAC50B,CAAD,CAAd,CAAb,CAAX,CAJqB;;EAOrB,QAAI0tI,cAAJ,EAAoB;EAChB1tI,MAAAA,CAAC,GAAG+0B,QAAQ,CAAC/0B,CAAC,GAAGD,GAAL,EAAU,EAAV,CAAR,GAAwB,GAA5B;EACH,KAToB;;;EAYrB,QAAKf,IAAI,CAACwE,GAAL,CAASxD,CAAC,GAAGD,GAAb,IAAoB,QAAzB,EAAoC;EAChC,aAAO,CAAP;EACH,KAdoB;;;EAiBrB,WAAQC,CAAC,GAAGD,GAAL,GAAY60B,UAAU,CAAC70B,GAAD,CAA7B;EACH,GAx+Be;;;EA2+BhB,WAAS+iI,OAAT,CAAiB7M,GAAjB,EAAsB;EAClB,WAAOiH,OAAO,CAAC,CAAD,EAAIC,OAAO,CAAC,CAAD,EAAIlH,GAAJ,CAAX,CAAd;EACH,GA7+Be;;;EAg/BhB,WAAS2X,eAAT,CAAyB3X,GAAzB,EAA8B;EAC1B,WAAOlhG,QAAQ,CAACkhG,GAAD,EAAM,EAAN,CAAf;EACH,GAl/Be;EAq/BhB;;;EACA,WAASwX,cAAT,CAAwBztI,CAAxB,EAA2B;EACvB,WAAO,OAAOA,CAAP,IAAY,QAAZ,IAAwBA,CAAC,CAAChC,OAAF,CAAU,GAAV,KAAkB,CAAC,CAA3C,IAAgD42B,UAAU,CAAC50B,CAAD,CAAV,KAAkB,CAAzE;EACH,GAx/Be;;;EA2/BhB,WAAS2tI,YAAT,CAAsB3tI,CAAtB,EAAyB;EACrB,WAAO,OAAOA,CAAP,KAAa,QAAb,IAAyBA,CAAC,CAAChC,OAAF,CAAU,GAAV,KAAkB,CAAC,CAAnD;EACH,GA7/Be;;;EAggChB,WAAS4kI,IAAT,CAAc79H,CAAd,EAAiB;EACb,WAAOA,CAAC,CAACjG,MAAF,IAAY,CAAZ,GAAgB,MAAMiG,CAAtB,GAA0B,KAAKA,CAAtC;EACH,GAlgCe;;;EAqgChB,WAASs9H,mBAAT,CAA6BriI,CAA7B,EAAgC;EAC5B,QAAIA,CAAC,IAAI,CAAT,EAAY;EACRA,MAAAA,CAAC,GAAIA,CAAC,GAAG,GAAL,GAAY,GAAhB;EACH;;EAED,WAAOA,CAAP;EACH,GA3gCe;;;EA8gChB,WAAS6iI,mBAAT,CAA6B56H,CAA7B,EAAgC;EAC5B,WAAOjJ,IAAI,CAACgE,KAAL,CAAW4xB,UAAU,CAAC3sB,CAAD,CAAV,GAAgB,GAA3B,EAAgC/I,QAAhC,CAAyC,EAAzC,CAAP;EACH,GAhhCe;;;EAkhChB,WAAS2uI,mBAAT,CAA6BzlI,CAA7B,EAAgC;EAC5B,WAAQwlI,eAAe,CAACxlI,CAAD,CAAf,GAAqB,GAA7B;EACH;;EAED,MAAI0lI,QAAQ,GAAI,YAAW;EAEvB;EACA,QAAIC,WAAW,GAAG,eAAlB,CAHuB;;EAMvB,QAAIC,UAAU,GAAG,sBAAjB,CANuB;;EASvB,QAAIC,QAAQ,GAAG,QAAQD,UAAR,GAAqB,OAArB,GAA+BD,WAA/B,GAA6C,GAA5D,CATuB;EAYvB;EACA;;EACA,QAAIG,iBAAiB,GAAG,gBAAgBD,QAAhB,GAA2B,YAA3B,GAA0CA,QAA1C,GAAqD,YAArD,GAAoEA,QAApE,GAA+E,WAAvG;EACA,QAAIE,iBAAiB,GAAG,gBAAgBF,QAAhB,GAA2B,YAA3B,GAA0CA,QAA1C,GAAqD,YAArD,GAAoEA,QAApE,GAA+E,YAA/E,GAA8FA,QAA9F,GAAyG,WAAjI;EAEA,WAAO;EACHA,MAAAA,QAAQ,EAAE,IAAI1pC,MAAJ,CAAW0pC,QAAX,CADP;EAEH1Q,MAAAA,GAAG,EAAE,IAAIh5B,MAAJ,CAAW,QAAQ2pC,iBAAnB,CAFF;EAGH7K,MAAAA,IAAI,EAAE,IAAI9+B,MAAJ,CAAW,SAAS4pC,iBAApB,CAHH;EAIH1O,MAAAA,GAAG,EAAE,IAAIl7B,MAAJ,CAAW,QAAQ2pC,iBAAnB,CAJF;EAKHE,MAAAA,IAAI,EAAE,IAAI7pC,MAAJ,CAAW,SAAS4pC,iBAApB,CALH;EAMH9O,MAAAA,GAAG,EAAE,IAAI96B,MAAJ,CAAW,QAAQ2pC,iBAAnB,CANF;EAOHG,MAAAA,IAAI,EAAE,IAAI9pC,MAAJ,CAAW,SAAS4pC,iBAApB,CAPH;EAQHG,MAAAA,IAAI,EAAE,sDARH;EASHC,MAAAA,IAAI,EAAE,sDATH;EAUHC,MAAAA,IAAI,EAAE,sEAVH;EAWHC,MAAAA,IAAI,EAAE;EAXH,KAAP;EAaH,GA9Bc,EAAf,CAthCgB;EAujChB;EACA;;;EACA,WAASlM,cAAT,CAAwBlyG,KAAxB,EAA+B;EAC3B,WAAO,CAAC,CAACy9G,QAAQ,CAACG,QAAT,CAAkBp5G,IAAlB,CAAuBxE,KAAvB,CAAT;EACH,GA3jCe;EA8jChB;EACA;;;EACA,WAASiyG,mBAAT,CAA6BjyG,KAA7B,EAAoC;EAEhCA,IAAAA,KAAK,GAAGA,KAAK,CAACw4B,OAAN,CAAci0E,QAAd,EAAuB,EAAvB,EAA2Bj0E,OAA3B,CAAmCk0E,SAAnC,EAA8C,EAA9C,EAAkD7nG,WAAlD,EAAR;EACA,QAAIw5G,KAAK,GAAG,KAAZ;;EACA,QAAIxK,KAAK,CAAC7zG,KAAD,CAAT,EAAkB;EACdA,MAAAA,KAAK,GAAG6zG,KAAK,CAAC7zG,KAAD,CAAb;EACAq+G,MAAAA,KAAK,GAAG,IAAR;EACH,KAHD,MAIK,IAAIr+G,KAAK,IAAI,aAAb,EAA4B;EAC7B,aAAO;EAAEtnB,QAAAA,CAAC,EAAE,CAAL;EAAQZ,QAAAA,CAAC,EAAE,CAAX;EAAcpG,QAAAA,CAAC,EAAE,CAAjB;EAAoBD,QAAAA,CAAC,EAAE,CAAvB;EAA0B+J,QAAAA,MAAM,EAAE;EAAlC,OAAP;EACH,KAV+B;EAahC;EACA;EACA;;;EACA,QAAI06C,KAAJ;;EACA,QAAKA,KAAK,GAAGunF,QAAQ,CAACvQ,GAAT,CAAa1oG,IAAb,CAAkBxE,KAAlB,CAAb,EAAwC;EACpC,aAAO;EAAEtnB,QAAAA,CAAC,EAAEw9C,KAAK,CAAC,CAAD,CAAV;EAAep+C,QAAAA,CAAC,EAAEo+C,KAAK,CAAC,CAAD,CAAvB;EAA4BxkD,QAAAA,CAAC,EAAEwkD,KAAK,CAAC,CAAD;EAApC,OAAP;EACH;;EACD,QAAKA,KAAK,GAAGunF,QAAQ,CAACzK,IAAT,CAAcxuG,IAAd,CAAmBxE,KAAnB,CAAb,EAAyC;EACrC,aAAO;EAAEtnB,QAAAA,CAAC,EAAEw9C,KAAK,CAAC,CAAD,CAAV;EAAep+C,QAAAA,CAAC,EAAEo+C,KAAK,CAAC,CAAD,CAAvB;EAA4BxkD,QAAAA,CAAC,EAAEwkD,KAAK,CAAC,CAAD,CAApC;EAAyCzkD,QAAAA,CAAC,EAAEykD,KAAK,CAAC,CAAD;EAAjD,OAAP;EACH;;EACD,QAAKA,KAAK,GAAGunF,QAAQ,CAACrO,GAAT,CAAa5qG,IAAb,CAAkBxE,KAAlB,CAAb,EAAwC;EACpC,aAAO;EAAEjoB,QAAAA,CAAC,EAAEm+C,KAAK,CAAC,CAAD,CAAV;EAAe1kD,QAAAA,CAAC,EAAE0kD,KAAK,CAAC,CAAD,CAAvB;EAA4B1nD,QAAAA,CAAC,EAAE0nD,KAAK,CAAC,CAAD;EAApC,OAAP;EACH;;EACD,QAAKA,KAAK,GAAGunF,QAAQ,CAACM,IAAT,CAAcv5G,IAAd,CAAmBxE,KAAnB,CAAb,EAAyC;EACrC,aAAO;EAAEjoB,QAAAA,CAAC,EAAEm+C,KAAK,CAAC,CAAD,CAAV;EAAe1kD,QAAAA,CAAC,EAAE0kD,KAAK,CAAC,CAAD,CAAvB;EAA4B1nD,QAAAA,CAAC,EAAE0nD,KAAK,CAAC,CAAD,CAApC;EAAyCzkD,QAAAA,CAAC,EAAEykD,KAAK,CAAC,CAAD;EAAjD,OAAP;EACH;;EACD,QAAKA,KAAK,GAAGunF,QAAQ,CAACzO,GAAT,CAAaxqG,IAAb,CAAkBxE,KAAlB,CAAb,EAAwC;EACpC,aAAO;EAAEjoB,QAAAA,CAAC,EAAEm+C,KAAK,CAAC,CAAD,CAAV;EAAe1kD,QAAAA,CAAC,EAAE0kD,KAAK,CAAC,CAAD,CAAvB;EAA4BjlD,QAAAA,CAAC,EAAEilD,KAAK,CAAC,CAAD;EAApC,OAAP;EACH;;EACD,QAAKA,KAAK,GAAGunF,QAAQ,CAACO,IAAT,CAAcx5G,IAAd,CAAmBxE,KAAnB,CAAb,EAAyC;EACrC,aAAO;EAAEjoB,QAAAA,CAAC,EAAEm+C,KAAK,CAAC,CAAD,CAAV;EAAe1kD,QAAAA,CAAC,EAAE0kD,KAAK,CAAC,CAAD,CAAvB;EAA4BjlD,QAAAA,CAAC,EAAEilD,KAAK,CAAC,CAAD,CAApC;EAAyCzkD,QAAAA,CAAC,EAAEykD,KAAK,CAAC,CAAD;EAAjD,OAAP;EACH;;EACD,QAAKA,KAAK,GAAGunF,QAAQ,CAACW,IAAT,CAAc55G,IAAd,CAAmBxE,KAAnB,CAAb,EAAyC;EACrC,aAAO;EACHtnB,QAAAA,CAAC,EAAE6kI,eAAe,CAACrnF,KAAK,CAAC,CAAD,CAAN,CADf;EAEHp+C,QAAAA,CAAC,EAAEylI,eAAe,CAACrnF,KAAK,CAAC,CAAD,CAAN,CAFf;EAGHxkD,QAAAA,CAAC,EAAE6rI,eAAe,CAACrnF,KAAK,CAAC,CAAD,CAAN,CAHf;EAIHzkD,QAAAA,CAAC,EAAE+rI,mBAAmB,CAACtnF,KAAK,CAAC,CAAD,CAAN,CAJnB;EAKH16C,QAAAA,MAAM,EAAE6iI,KAAK,GAAG,MAAH,GAAY;EALtB,OAAP;EAOH;;EACD,QAAKnoF,KAAK,GAAGunF,QAAQ,CAACS,IAAT,CAAc15G,IAAd,CAAmBxE,KAAnB,CAAb,EAAyC;EACrC,aAAO;EACHtnB,QAAAA,CAAC,EAAE6kI,eAAe,CAACrnF,KAAK,CAAC,CAAD,CAAN,CADf;EAEHp+C,QAAAA,CAAC,EAAEylI,eAAe,CAACrnF,KAAK,CAAC,CAAD,CAAN,CAFf;EAGHxkD,QAAAA,CAAC,EAAE6rI,eAAe,CAACrnF,KAAK,CAAC,CAAD,CAAN,CAHf;EAIH16C,QAAAA,MAAM,EAAE6iI,KAAK,GAAG,MAAH,GAAY;EAJtB,OAAP;EAMH;;EACD,QAAKnoF,KAAK,GAAGunF,QAAQ,CAACU,IAAT,CAAc35G,IAAd,CAAmBxE,KAAnB,CAAb,EAAyC;EACrC,aAAO;EACHtnB,QAAAA,CAAC,EAAE6kI,eAAe,CAACrnF,KAAK,CAAC,CAAD,CAAL,GAAW,EAAX,GAAgBA,KAAK,CAAC,CAAD,CAAtB,CADf;EAEHp+C,QAAAA,CAAC,EAAEylI,eAAe,CAACrnF,KAAK,CAAC,CAAD,CAAL,GAAW,EAAX,GAAgBA,KAAK,CAAC,CAAD,CAAtB,CAFf;EAGHxkD,QAAAA,CAAC,EAAE6rI,eAAe,CAACrnF,KAAK,CAAC,CAAD,CAAL,GAAW,EAAX,GAAgBA,KAAK,CAAC,CAAD,CAAtB,CAHf;EAIHzkD,QAAAA,CAAC,EAAE+rI,mBAAmB,CAACtnF,KAAK,CAAC,CAAD,CAAL,GAAW,EAAX,GAAgBA,KAAK,CAAC,CAAD,CAAtB,CAJnB;EAKH16C,QAAAA,MAAM,EAAE6iI,KAAK,GAAG,MAAH,GAAY;EALtB,OAAP;EAOH;;EACD,QAAKnoF,KAAK,GAAGunF,QAAQ,CAACQ,IAAT,CAAcz5G,IAAd,CAAmBxE,KAAnB,CAAb,EAAyC;EACrC,aAAO;EACHtnB,QAAAA,CAAC,EAAE6kI,eAAe,CAACrnF,KAAK,CAAC,CAAD,CAAL,GAAW,EAAX,GAAgBA,KAAK,CAAC,CAAD,CAAtB,CADf;EAEHp+C,QAAAA,CAAC,EAAEylI,eAAe,CAACrnF,KAAK,CAAC,CAAD,CAAL,GAAW,EAAX,GAAgBA,KAAK,CAAC,CAAD,CAAtB,CAFf;EAGHxkD,QAAAA,CAAC,EAAE6rI,eAAe,CAACrnF,KAAK,CAAC,CAAD,CAAL,GAAW,EAAX,GAAgBA,KAAK,CAAC,CAAD,CAAtB,CAHf;EAIH16C,QAAAA,MAAM,EAAE6iI,KAAK,GAAG,MAAH,GAAY;EAJtB,OAAP;EAMH;;EAED,WAAO,KAAP;EACH;;EAED,WAAS/K,kBAAT,CAA4BgL,KAA5B,EAAmC;EAC/B;EACA;EACA,QAAI13D,KAAJ,EAAWj9D,IAAX;EACA20H,IAAAA,KAAK,GAAGA,KAAK,IAAI;EAAC,eAAQ,IAAT;EAAe,cAAO;EAAtB,KAAjB;EACA13D,IAAAA,KAAK,GAAG,CAAC03D,KAAK,CAAC13D,KAAN,IAAe,IAAhB,EAAsB33E,WAAtB,EAAR;EACA0a,IAAAA,IAAI,GAAG,CAAC20H,KAAK,CAAC30H,IAAN,IAAc,OAAf,EAAwBkb,WAAxB,EAAP;;EACA,QAAI+hD,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAK,KAAhC,EAAuC;EACnCA,MAAAA,KAAK,GAAG,IAAR;EACH;;EACD,QAAIj9D,IAAI,KAAK,OAAT,IAAoBA,IAAI,KAAK,OAAjC,EAA0C;EACtCA,MAAAA,IAAI,GAAG,OAAP;EACH;;EACD,WAAO;EAAC,eAAQi9D,KAAT;EAAgB,cAAOj9D;EAAvB,KAAP;EACH,GAvpCe;;;EA0pChB,MAAqC6oG,MAAM,CAAC+rB,OAA5C,EAAqD;EACjD/rB,IAAAA,iBAAiBwa,SAAjB;EACH,GAFD;EAAA,OAQK;EACD/oD,QAAAA,MAAM,CAAC+oD,SAAP,GAAmBA,SAAnB;EACH;EAEA,CAtqCD,EAsqCGr+H,IAtqCH;;;;;ECQA,SAASq6H,OAAT,CAAiBl/G,MAAjB,EAAyBm/G,cAAzB,EAAyC;EACvC,MAAIv8F,IAAI,GAAG/wB,MAAM,CAAC+wB,IAAP,CAAY5iB,MAAZ,CAAX;;EAEA,MAAInO,MAAM,CAACwrH,qBAAX,EAAkC;EAChC,QAAI+B,OAAO,GAAGvtH,MAAM,CAACwrH,qBAAP,CAA6Br9G,MAA7B,CAAd;;EAEA,QAAIm/G,cAAJ,EAAoB;EAClBC,MAAAA,OAAO,GAAGA,OAAO,CAAC7wE,MAAR,CAAe,UAAU8wE,GAAV,EAAe;EACtC,eAAOxtH,MAAM,CAACytH,wBAAP,CAAgCt/G,MAAhC,EAAwCq/G,GAAxC,EAA6CpzG,UAApD;EACD,OAFS,CAAV;EAGD;;EAED2W,IAAAA,IAAI,CAAC9+B,IAAL,CAAU6+D,KAAV,CAAgB//B,IAAhB,EAAsBw8F,OAAtB;EACD;;EAED,SAAOx8F,IAAP;EACD;;EAED,SAAS28F,cAAT,CAAwBj7H,MAAxB,EAAgC;EAC9B,OAAK,IAAIG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0G,SAAS,CAACxG,MAA9B,EAAsCF,CAAC,EAAvC,EAA2C;EACzC,QAAImO,MAAM,GAAGzH,SAAS,CAAC1G,CAAD,CAAT,IAAgB,IAAhB,GAAuB0G,SAAS,CAAC1G,CAAD,CAAhC,GAAsC,EAAnD;;EAEA,QAAIA,CAAC,GAAG,CAAR,EAAW;EACTy6H,MAAAA,OAAO,CAACrtH,MAAM,CAACe,MAAD,CAAP,EAAiB,IAAjB,CAAP,CAA8Bm7D,OAA9B,CAAsC,UAAU58C,GAAV,EAAe;EACnDquG,QAAAA,iBAAe,CAACl7H,MAAD,EAAS6sB,GAAT,EAAcve,MAAM,CAACue,GAAD,CAApB,CAAf;EACD,OAFD;EAGD,KAJD,MAIO,IAAItf,MAAM,CAAC4tH,yBAAX,EAAsC;EAC3C5tH,MAAAA,MAAM,CAACka,gBAAP,CAAwBznB,MAAxB,EAAgCuN,MAAM,CAAC4tH,yBAAP,CAAiC7sH,MAAjC,CAAhC;EACD,KAFM,MAEA;EACLssH,MAAAA,OAAO,CAACrtH,MAAM,CAACe,MAAD,CAAP,CAAP,CAAwBm7D,OAAxB,CAAgC,UAAU58C,GAAV,EAAe;EAC7Ctf,QAAAA,MAAM,CAACC,cAAP,CAAsBxN,MAAtB,EAA8B6sB,GAA9B,EAAmCtf,MAAM,CAACytH,wBAAP,CAAgC1sH,MAAhC,EAAwCue,GAAxC,CAAnC;EACD,OAFD;EAGD;EACF;;EAED,SAAO7sB,MAAP;EACD;;EAED,SAASowI,OAAT,CAAiBlY,GAAjB,EAAsB;EACpB;;EAEA,MAAI,OAAOzxH,MAAP,KAAkB,UAAlB,IAAgC,OAAOA,MAAM,CAACC,QAAd,KAA2B,QAA/D,EAAyE;EACvE0pI,IAAAA,OAAO,GAAG,UAAUlY,GAAV,EAAe;EACvB,aAAO,OAAOA,GAAd;EACD,KAFD;EAGD,GAJD,MAIO;EACLkY,IAAAA,OAAO,GAAG,UAAUlY,GAAV,EAAe;EACvB,aAAOA,GAAG,IAAI,OAAOzxH,MAAP,KAAkB,UAAzB,IAAuCyxH,GAAG,CAACl2H,WAAJ,KAAoByE,MAA3D,IAAqEyxH,GAAG,KAAKzxH,MAAM,CAACE,SAApF,GAAgG,QAAhG,GAA2G,OAAOuxH,GAAzH;EACD,KAFD;EAGD;;EAED,SAAOkY,OAAO,CAAClY,GAAD,CAAd;EACD;;EAED,SAASlE,iBAAT,CAAyBC,QAAzB,EAAmCC,WAAnC,EAAgD;EAC9C,MAAI,EAAED,QAAQ,YAAYC,WAAtB,CAAJ,EAAwC;EACtC,UAAM,IAAI77F,SAAJ,CAAc,mCAAd,CAAN;EACD;EACF;;EAED,SAAS6iG,iBAAT,CAAyBhD,GAAzB,EAA8BrrG,GAA9B,EAAmCzrB,KAAnC,EAA0C;EACxC,MAAIyrB,GAAG,IAAIqrG,GAAX,EAAgB;EACd3qH,IAAAA,MAAM,CAACC,cAAP,CAAsB0qH,GAAtB,EAA2BrrG,GAA3B,EAAgC;EAC9BzrB,MAAAA,KAAK,EAAEA,KADuB;EAE9BumB,MAAAA,UAAU,EAAE,IAFkB;EAG9BD,MAAAA,YAAY,EAAE,IAHgB;EAI9B0zG,MAAAA,QAAQ,EAAE;EAJoB,KAAhC;EAMD,GAPD,MAOO;EACLlD,IAAAA,GAAG,CAACrrG,GAAD,CAAH,GAAWzrB,KAAX;EACD;;EAED,SAAO82H,GAAP;EACD;;EAED,SAASmY,SAAT,CAAmBC,QAAnB,EAA6BC,UAA7B,EAAyC;EACvC,MAAI,OAAOA,UAAP,KAAsB,UAAtB,IAAoCA,UAAU,KAAK,IAAvD,EAA6D;EAC3D,UAAM,IAAIl4G,SAAJ,CAAc,oDAAd,CAAN;EACD;;EAEDi4G,EAAAA,QAAQ,CAAC3pI,SAAT,GAAqB4G,MAAM,CAACy5F,MAAP,CAAcupC,UAAU,IAAIA,UAAU,CAAC5pI,SAAvC,EAAkD;EACrE3E,IAAAA,WAAW,EAAE;EACXZ,MAAAA,KAAK,EAAEkvI,QADI;EAEXlV,MAAAA,QAAQ,EAAE,IAFC;EAGX1zG,MAAAA,YAAY,EAAE;EAHH;EADwD,GAAlD,CAArB;EAOA,MAAI6oH,UAAJ,EAAgBC,iBAAe,CAACF,QAAD,EAAWC,UAAX,CAAf;EACjB;;EAED,SAASE,iBAAT,CAAyB94C,CAAzB,EAA4B;EAC1B84C,EAAAA,iBAAe,GAAGljI,MAAM,CAACmjI,cAAP,GAAwBnjI,MAAM,CAACojI,cAA/B,GAAgD,SAASF,eAAT,CAAyB94C,CAAzB,EAA4B;EAC5F,WAAOA,CAAC,CAACpV,SAAF,IAAeh1E,MAAM,CAACojI,cAAP,CAAsBh5C,CAAtB,CAAtB;EACD,GAFD;EAGA,SAAO84C,iBAAe,CAAC94C,CAAD,CAAtB;EACD;;EAED,SAAS64C,iBAAT,CAAyB74C,CAAzB,EAA4B1hF,CAA5B,EAA+B;EAC7Bu6H,EAAAA,iBAAe,GAAGjjI,MAAM,CAACmjI,cAAP,IAAyB,SAASF,eAAT,CAAyB74C,CAAzB,EAA4B1hF,CAA5B,EAA+B;EACxE0hF,IAAAA,CAAC,CAACpV,SAAF,GAActsE,CAAd;EACA,WAAO0hF,CAAP;EACD,GAHD;;EAKA,SAAO64C,iBAAe,CAAC74C,CAAD,EAAI1hF,CAAJ,CAAtB;EACD;;EAED,SAAS26H,2BAAT,GAAqC;EACnC,MAAI,OAAOC,OAAP,KAAmB,WAAnB,IAAkC,CAACA,OAAO,CAACp9B,SAA/C,EAA0D,OAAO,KAAP;EAC1D,MAAIo9B,OAAO,CAACp9B,SAAR,CAAkBq9B,IAAtB,EAA4B,OAAO,KAAP;EAC5B,MAAI,OAAOC,KAAP,KAAiB,UAArB,EAAiC,OAAO,IAAP;;EAEjC,MAAI;EACFC,IAAAA,OAAO,CAACrqI,SAAR,CAAkB8xH,OAAlB,CAA0Bn4H,IAA1B,CAA+BuwI,OAAO,CAACp9B,SAAR,CAAkBu9B,OAAlB,EAA2B,EAA3B,EAA+B,YAAY,EAA3C,CAA/B;EACA,WAAO,IAAP;EACD,GAHD,CAGE,OAAOhtI,CAAP,EAAU;EACV,WAAO,KAAP;EACD;EACF;;EAED,SAASitI,YAAT,CAAoBC,MAApB,EAA4B3xB,IAA5B,EAAkC4xB,KAAlC,EAAyC;EACvC,MAAIP,2BAAyB,EAA7B,EAAiC;EAC/BK,IAAAA,YAAU,GAAGJ,OAAO,CAACp9B,SAArB;EACD,GAFD,MAEO;EACLw9B,IAAAA,YAAU,GAAG,SAASA,UAAT,CAAoBC,MAApB,EAA4B3xB,IAA5B,EAAkC4xB,KAAlC,EAAyC;EACpD,UAAI9tI,CAAC,GAAG,CAAC,IAAD,CAAR;EACAA,MAAAA,CAAC,CAAC7D,IAAF,CAAO6+D,KAAP,CAAah7D,CAAb,EAAgBk8G,IAAhB;EACA,UAAI2U,WAAW,GAAGlK,QAAQ,CAACvvC,IAAT,CAAcpc,KAAd,CAAoB6yE,MAApB,EAA4B7tI,CAA5B,CAAlB;EACA,UAAI4wH,QAAQ,GAAG,IAAIC,WAAJ,EAAf;EACA,UAAIid,KAAJ,EAAWX,iBAAe,CAACvc,QAAD,EAAWkd,KAAK,CAACxqI,SAAjB,CAAf;EACX,aAAOstH,QAAP;EACD,KAPD;EAQD;;EAED,SAAOgd,YAAU,CAAC5yE,KAAX,CAAiB,IAAjB,EAAuBx3D,SAAvB,CAAP;EACD;;EAED,SAAS8xH,6BAAT,CAAuCrqH,MAAvC,EAA+CsqH,QAA/C,EAAyD;EACvD,MAAItqH,MAAM,IAAI,IAAd,EAAoB,OAAO,EAAP;EACpB,MAAItO,MAAM,GAAG,EAAb;EACA,MAAI64H,UAAU,GAAGtrH,MAAM,CAAC+wB,IAAP,CAAYhwB,MAAZ,CAAjB;EACA,MAAIue,GAAJ,EAAS1sB,CAAT;;EAEA,OAAKA,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG04H,UAAU,CAACx4H,MAA3B,EAAmCF,CAAC,EAApC,EAAwC;EACtC0sB,IAAAA,GAAG,GAAGgsG,UAAU,CAAC14H,CAAD,CAAhB;EACA,QAAIy4H,QAAQ,CAACr5H,OAAT,CAAiBstB,GAAjB,KAAyB,CAA7B,EAAgC;EAChC7sB,IAAAA,MAAM,CAAC6sB,GAAD,CAAN,GAAcve,MAAM,CAACue,GAAD,CAApB;EACD;;EAED,SAAO7sB,MAAP;EACD;;EAED,SAAS84H,wBAAT,CAAkCxqH,MAAlC,EAA0CsqH,QAA1C,EAAoD;EAClD,MAAItqH,MAAM,IAAI,IAAd,EAAoB,OAAO,EAAP;;EAEpB,MAAItO,MAAM,GAAG24H,6BAA6B,CAACrqH,MAAD,EAASsqH,QAAT,CAA1C;;EAEA,MAAI/rG,GAAJ,EAAS1sB,CAAT;;EAEA,MAAIoN,MAAM,CAACwrH,qBAAX,EAAkC;EAChC,QAAIC,gBAAgB,GAAGzrH,MAAM,CAACwrH,qBAAP,CAA6BzqH,MAA7B,CAAvB;;EAEA,SAAKnO,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAG64H,gBAAgB,CAAC34H,MAAjC,EAAyCF,CAAC,EAA1C,EAA8C;EAC5C0sB,MAAAA,GAAG,GAAGmsG,gBAAgB,CAAC74H,CAAD,CAAtB;EACA,UAAIy4H,QAAQ,CAACr5H,OAAT,CAAiBstB,GAAjB,KAAyB,CAA7B,EAAgC;EAChC,UAAI,CAACtf,MAAM,CAAC5G,SAAP,CAAiBsyH,oBAAjB,CAAsC34H,IAAtC,CAA2CgO,MAA3C,EAAmDue,GAAnD,CAAL,EAA8D;EAC9D7sB,MAAAA,MAAM,CAAC6sB,GAAD,CAAN,GAAcve,MAAM,CAACue,GAAD,CAApB;EACD;EACF;;EAED,SAAO7sB,MAAP;EACD;;EAED,SAASoxI,wBAAT,CAAgCC,IAAhC,EAAsC;EACpC,MAAIA,IAAI,KAAK,KAAK,CAAlB,EAAqB;EACnB,UAAM,IAAIC,cAAJ,CAAmB,2DAAnB,CAAN;EACD;;EAED,SAAOD,IAAP;EACD;;EAED,SAASE,0BAAT,CAAoCF,IAApC,EAA0C/wI,IAA1C,EAAgD;EAC9C,MAAIA,IAAI,KAAK,OAAOA,IAAP,KAAgB,QAAhB,IAA4B,OAAOA,IAAP,KAAgB,UAAjD,CAAR,EAAsE;EACpE,WAAOA,IAAP;EACD;;EAED,SAAO8wI,wBAAsB,CAACC,IAAD,CAA7B;EACD;;EAED,SAASG,YAAT,CAAsBC,OAAtB,EAA+B;EAC7B,MAAIC,yBAAyB,GAAGd,2BAAyB,EAAzD;;EAEA,SAAO,SAASe,oBAAT,GAAgC;EACrC,QAAIC,KAAK,GAAGnB,iBAAe,CAACgB,OAAD,CAA3B;EAAA,QACIz5E,MADJ;;EAGA,QAAI05E,yBAAJ,EAA+B;EAC7B,UAAIG,SAAS,GAAGpB,iBAAe,CAAC,IAAD,CAAf,CAAsBzuI,WAAtC;;EAEAg2D,MAAAA,MAAM,GAAG64E,OAAO,CAACp9B,SAAR,CAAkBm+B,KAAlB,EAAyB/qI,SAAzB,EAAoCgrI,SAApC,CAAT;EACD,KAJD,MAIO;EACL75E,MAAAA,MAAM,GAAG45E,KAAK,CAACvzE,KAAN,CAAY,IAAZ,EAAkBx3D,SAAlB,CAAT;EACD;;EAED,WAAO0qI,0BAA0B,CAAC,IAAD,EAAOv5E,MAAP,CAAjC;EACD,GAbD;EAcD;;EAED,SAASm8D,gBAAT,CAAwBC,GAAxB,EAA6Bj0H,CAA7B,EAAgC;EAC9B,SAAOk0H,iBAAe,CAACD,GAAD,CAAf,IAAwBE,uBAAqB,CAACF,GAAD,EAAMj0H,CAAN,CAA7C,IAAyDo0H,6BAA2B,CAACH,GAAD,EAAMj0H,CAAN,CAApF,IAAgGq0H,kBAAgB,EAAvH;EACD;;EAED,SAAS0E,oBAAT,CAA4B9E,GAA5B,EAAiC;EAC/B,SAAO+E,oBAAkB,CAAC/E,GAAD,CAAlB,IAA2BgF,kBAAgB,CAAChF,GAAD,CAA3C,IAAoDG,6BAA2B,CAACH,GAAD,CAA/E,IAAwFiF,oBAAkB,EAAjH;EACD;;EAED,SAASF,oBAAT,CAA4B/E,GAA5B,EAAiC;EAC/B,MAAIjlH,KAAK,CAACC,OAAN,CAAcglH,GAAd,CAAJ,EAAwB,OAAOY,mBAAiB,CAACZ,GAAD,CAAxB;EACzB;;EAED,SAASC,iBAAT,CAAyBD,GAAzB,EAA8B;EAC5B,MAAIjlH,KAAK,CAACC,OAAN,CAAcglH,GAAd,CAAJ,EAAwB,OAAOA,GAAP;EACzB;;EAED,SAASgF,kBAAT,CAA0BE,IAA1B,EAAgC;EAC9B,MAAI,OAAO7yH,MAAP,KAAkB,WAAlB,IAAiC6yH,IAAI,CAAC7yH,MAAM,CAACC,QAAR,CAAJ,IAAyB,IAA1D,IAAkE4yH,IAAI,CAAC,YAAD,CAAJ,IAAsB,IAA5F,EAAkG,OAAOnqH,KAAK,CAAC2/E,IAAN,CAAWwqC,IAAX,CAAP;EACnG;;EAED,SAAShF,uBAAT,CAA+BF,GAA/B,EAAoCj0H,CAApC,EAAuC;EACrC,MAAIs0H,EAAE,GAAGL,GAAG,IAAI,IAAP,GAAc,IAAd,GAAqB,OAAO3tH,MAAP,KAAkB,WAAlB,IAAiC2tH,GAAG,CAAC3tH,MAAM,CAACC,QAAR,CAApC,IAAyD0tH,GAAG,CAAC,YAAD,CAA1F;;EAEA,MAAIK,EAAE,IAAI,IAAV,EAAgB;EAChB,MAAIC,IAAI,GAAG,EAAX;EACA,MAAIC,EAAE,GAAG,IAAT;EACA,MAAIC,EAAE,GAAG,KAAT;;EAEA,MAAIC,EAAJ,EAAQC,EAAR;;EAEA,MAAI;EACF,SAAKL,EAAE,GAAGA,EAAE,CAACn0H,IAAH,CAAQ8zH,GAAR,CAAV,EAAwB,EAAEO,EAAE,GAAG,CAACE,EAAE,GAAGJ,EAAE,CAACvsE,IAAH,EAAN,EAAiBu0C,IAAxB,CAAxB,EAAuDk4B,EAAE,GAAG,IAA5D,EAAkE;EAChED,MAAAA,IAAI,CAACl1H,IAAL,CAAUq1H,EAAE,CAACzzH,KAAb;;EAEA,UAAIjB,CAAC,IAAIu0H,IAAI,CAACr0H,MAAL,KAAgBF,CAAzB,EAA4B;EAC7B;EACF,GAND,CAME,OAAOy+D,GAAP,EAAY;EACZg2D,IAAAA,EAAE,GAAG,IAAL;EACAE,IAAAA,EAAE,GAAGl2D,GAAL;EACD,GATD,SASU;EACR,QAAI;EACF,UAAI,CAAC+1D,EAAD,IAAOF,EAAE,CAAC,QAAD,CAAF,IAAgB,IAA3B,EAAiCA,EAAE,CAAC,QAAD,CAAF;EAClC,KAFD,SAEU;EACR,UAAIG,EAAJ,EAAQ,MAAME,EAAN;EACT;EACF;;EAED,SAAOJ,IAAP;EACD;;EAED,SAASH,6BAAT,CAAqC58B,CAArC,EAAwCo9B,MAAxC,EAAgD;EAC9C,MAAI,CAACp9B,CAAL,EAAQ;EACR,MAAI,OAAOA,CAAP,KAAa,QAAjB,EAA2B,OAAOq9B,mBAAiB,CAACr9B,CAAD,EAAIo9B,MAAJ,CAAxB;EAC3B,MAAIxzH,CAAC,GAAGgM,MAAM,CAAC5G,SAAP,CAAiBlG,QAAjB,CAA0BH,IAA1B,CAA+Bq3F,CAA/B,EAAkCz3F,KAAlC,CAAwC,CAAxC,EAA2C,CAAC,CAA5C,CAAR;EACA,MAAIqB,CAAC,KAAK,QAAN,IAAkBo2F,CAAC,CAAC31F,WAAxB,EAAqCT,CAAC,GAAGo2F,CAAC,CAAC31F,WAAF,CAAcuJ,IAAlB;EACrC,MAAIhK,CAAC,KAAK,KAAN,IAAeA,CAAC,KAAK,KAAzB,EAAgC,OAAO4N,KAAK,CAAC2/E,IAAN,CAAW6I,CAAX,CAAP;EAChC,MAAIp2F,CAAC,KAAK,WAAN,IAAqB,2CAA2C4K,IAA3C,CAAgD5K,CAAhD,CAAzB,EAA6E,OAAOyzH,mBAAiB,CAACr9B,CAAD,EAAIo9B,MAAJ,CAAxB;EAC9E;;EAED,SAASC,mBAAT,CAA2BZ,GAA3B,EAAgChgH,GAAhC,EAAqC;EACnC,MAAIA,GAAG,IAAI,IAAP,IAAeA,GAAG,GAAGggH,GAAG,CAAC/zH,MAA7B,EAAqC+T,GAAG,GAAGggH,GAAG,CAAC/zH,MAAV;;EAErC,OAAK,IAAIF,CAAC,GAAG,CAAR,EAAW80H,IAAI,GAAG,IAAI9lH,KAAJ,CAAUiF,GAAV,CAAvB,EAAuCjU,CAAC,GAAGiU,GAA3C,EAAgDjU,CAAC,EAAjD,EAAqD80H,IAAI,CAAC90H,CAAD,CAAJ,GAAUi0H,GAAG,CAACj0H,CAAD,CAAb;;EAErD,SAAO80H,IAAP;EACD;;EAED,SAASoE,oBAAT,GAA8B;EAC5B,QAAM,IAAIhhG,SAAJ,CAAc,sIAAd,CAAN;EACD;;EAED,SAASm8F,kBAAT,GAA4B;EAC1B,QAAM,IAAIn8F,SAAJ,CAAc,2IAAd,CAAN;EACD;;EAED,IAAIy5G,eAAe,GAAG,SAASA,eAAT,CAAyBvlH,QAAzB,EAAmC;EACvD,MAAIA,QAAQ,YAAYpd,KAAxB,EAA+B;EAC7Bod,IAAAA,QAAQ,CAACk9C,OAAT,CAAiBqoE,eAAjB;EACD,GAFD,MAEO;EACL,QAAIvlH,QAAQ,CAACwG,GAAb,EAAkB;EAChBxG,MAAAA,QAAQ,CAACwG,GAAT,CAAazjB,OAAb;EACD;;EAEDid,IAAAA,QAAQ,CAACjd,OAAT;EACD;EACF,CAVD;;EAYA,IAAIyiI,UAAU,GAAG,SAASA,UAAT,CAAoB7Z,GAApB,EAAyB;EACxC,MAAIA,GAAG,CAAC77G,QAAR,EAAkB;EAChB67G,IAAAA,GAAG,CAAC77G,QAAJ,CAAa/M,OAAb;EACD;;EAED,MAAI4oH,GAAG,CAAC3rG,QAAR,EAAkB;EAChBulH,IAAAA,eAAe,CAAC5Z,GAAG,CAAC3rG,QAAL,CAAf;EACD;;EAED,MAAI2rG,GAAG,CAACnmH,OAAR,EAAiB;EACfmmH,IAAAA,GAAG,CAACnmH,OAAJ,CAAYzC,OAAZ;EACD;;EAED,MAAI4oH,GAAG,CAACz7G,QAAR,EAAkB;EAChBy7G,IAAAA,GAAG,CAACz7G,QAAJ,CAAagtD,OAAb,CAAqBsoE,UAArB;EACD;EACF,CAhBD;;EAkBA,IAAIC,WAAW,GAAG,SAASA,WAAT,CAAqB9Z,GAArB,EAA0B;EAC1C,SAAOA,GAAG,CAACz7G,QAAJ,CAAapc,MAApB,EAA4B;EAC1B,QAAI4xI,QAAQ,GAAG/Z,GAAG,CAACz7G,QAAJ,CAAa,CAAb,CAAf;EACAy7G,IAAAA,GAAG,CAACvuG,MAAJ,CAAWsoH,QAAX;EACAF,IAAAA,UAAU,CAACE,QAAD,CAAV;EACD;EACF,CAND;;EAQA,IAAIC,SAAS,GAAG,CAAC,WAAD,CAAhB;;EAEA,SAASC,WAAT,CAAqBtiI,IAArB,EAA2Bw0B,KAA3B,EAAkC;EAChC,MAAI8wF,IAAI,GAAGtuH,SAAS,CAACxG,MAAV,GAAmB,CAAnB,IAAwBwG,SAAS,CAAC,CAAD,CAAT,KAAiBxH,SAAzC,GAAqDwH,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAA/E;;EAEA,MAAIurI,cAAc,GAAGjd,IAAI,CAACkd,SAA1B;EAAA,MACIA,SAAS,GAAGD,cAAc,KAAK,KAAK,CAAxB,GAA4B,YAAY;EACtD,WAAO,IAAP;EACD,GAFe,GAEZA,cAHJ;EAAA,MAII1gI,OAAO,GAAGonH,wBAAwB,CAAC3D,IAAD,EAAO+c,SAAP,CAJtC;;EAMA,SAAOI,UAAS,CAACziI,IAAD,EAAOw0B,KAAK,CAAC5nB,QAAN,CAAewtC,MAAf,CAAsBooF,SAAtB,CAAP,EAAyC,UAAUna,GAAV,EAAe;EACtE,WAAO7zF,KAAK,CAACvhC,GAAN,CAAUo1H,GAAV,CAAP;EACD,GAFe,EAEb,UAAUA,GAAV,EAAe;EAChB7zF,IAAAA,KAAK,CAAC1a,MAAN,CAAauuG,GAAb;EACA8Z,IAAAA,WAAW,CAAC9Z,GAAD,CAAX;EACD,GALe,EAKb+C,cAAc,CAAC;EAChBkB,IAAAA,WAAW,EAAE;EADG,GAAD,EAEdzqH,OAFc,CALD,CAAhB;EAQD;;EAED,IAAI6gI,YAAY,GAAG,SAASA,YAAT,CAAsB7mI,GAAtB,EAA2B;EAC5C,SAAOwvB,KAAK,CAACxvB,GAAD,CAAL,GAAa4qB,QAAQ,CAACk8G,SAAS,CAAC9mI,GAAD,CAAT,CAAey1H,KAAf,EAAD,EAAyB,EAAzB,CAArB,GAAoDz1H,GAA3D;EACD,CAFD;;EAIA,IAAI+mI,UAAU,GAAG,SAASA,UAAT,CAAoB/mI,GAApB,EAAyB;EACxC,SAAOwvB,KAAK,CAACxvB,GAAD,CAAL,GAAa8mI,SAAS,CAAC9mI,GAAD,CAAT,CAAeu0H,QAAf,EAAb,GAAyC,CAAhD;EACD,CAFD;;EAIA,IAAIyS,cAAc,GAAGC,OAAY,CAACC,YAAD,CAAjC;EACA;EACA;;EAEA,SAASC,gBAAT,CAA0Bz/F,OAA1B,EAAmC0/F,eAAnC,EAAoDC,UAApD,EAAgE;EAC9D,MAAI,CAACD,eAAD,IAAoB,OAAOC,UAAP,KAAsB,QAA9C,EAAwD;EACxD3/F,EAAAA,OAAO,CAAC6W,MAAR,CAAe,UAAUiuE,GAAV,EAAe;EAC5B,WAAO,CAACA,GAAG,CAAC6a,UAAD,CAAX;EACD,GAFD,EAEGtpE,OAFH,CAEW,UAAUyuD,GAAV,EAAe;EACxBA,IAAAA,GAAG,CAAC6a,UAAD,CAAH,GAAkBL,cAAc,CAACI,eAAe,CAAC5a,GAAD,CAAhB,CAAhC;EACD,GAJD;EAKD;;EAED,SAAS8a,YAAT,CAAuB7d,IAAvB,EAA6BmG,UAA7B,EAAyC;EACvC,MAAI7gB,KAAK,GAAG0a,IAAI,CAAC1a,KAAjB;EAAA,MACIgE,KAAK,GAAG0W,IAAI,CAAC1W,KADjB;;EAGA,MAAIkX,KAAK,GAAG9uH,SAAS,CAACxG,MAAV,GAAmB,CAAnB,IAAwBwG,SAAS,CAAC,CAAD,CAAT,KAAiBxH,SAAzC,GAAqDwH,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAAhF;EAAA,MACIosI,gBAAgB,GAAGtd,KAAK,CAACud,UAD7B;EAAA,MAEIA,UAAU,GAAGD,gBAAgB,KAAK,KAAK,CAA1B,GAA8B,YAAY;EACzD,WAAO,IAAP;EACD,GAFgB,GAEbA,gBAJJ;EAAA,MAKIE,iBAAiB,GAAGxd,KAAK,CAACyd,WAL9B;EAAA,MAMIA,WAAW,GAAGD,iBAAiB,KAAK,KAAK,CAA3B,GAA+B,UAAUE,OAAV,EAAmB;EAClE,UAAM,oDAAoDnvD,MAApD,CAA2DmvD,OAAO,CAACxqF,IAAR,CAAa,MAAb,CAA3D,EAAiF,GAAjF,CAAN;EACD,GAFiB,GAEdsqF,iBARJ,CAJuC;;;EAevC,MAAIviB,KAAK,GAAG,EAAZ;EACAnW,EAAAA,KAAK,CAAChxC,OAAN,CAAc,UAAUk9B,IAAV,EAAgB;EAC5B,WAAOiqB,KAAK,CAAC0K,UAAU,CAAC30B,IAAD,CAAX,CAAL,GAA0B;EAC/B92F,MAAAA,IAAI,EAAE82F,IADyB;EAE/Bs+B,MAAAA,GAAG,EAAE,EAF0B;EAG/BtzH,MAAAA,KAAK,EAAE,CAAC,CAHuB;EAI/B2hI,MAAAA,IAAI,EAAE,CAACJ,UAAU,CAACvsC,IAAD;EAJc,KAAjC;EAMD,GAPD;EAQA8X,EAAAA,KAAK,CAACh1C,OAAN,CAAc,UAAUytD,KAAV,EAAiB;EAC7B,QAAI5oH,MAAM,GAAG4oH,KAAK,CAAC5oH,MAAnB;EAAA,QACItO,MAAM,GAAGk3H,KAAK,CAACl3H,MADnB;EAEA,QAAIuzI,QAAQ,GAAGC,SAAS,CAACllI,MAAD,CAAxB;EACA,QAAImlI,QAAQ,GAAGD,SAAS,CAACxzI,MAAD,CAAxB;EACA,QAAI,CAAC4wH,KAAK,CAAC5Q,cAAN,CAAqBuzB,QAArB,CAAL,EAAqC,MAAM,gCAAgCrvD,MAAhC,CAAuCqvD,QAAvC,CAAN;EACrC,QAAI,CAAC3iB,KAAK,CAAC5Q,cAAN,CAAqByzB,QAArB,CAAL,EAAqC,MAAM,gCAAgCvvD,MAAhC,CAAuCuvD,QAAvC,CAAN;EACrC,QAAIC,UAAU,GAAG9iB,KAAK,CAAC2iB,QAAD,CAAtB;EACA,QAAII,UAAU,GAAG/iB,KAAK,CAAC6iB,QAAD,CAAtB;EACAC,IAAAA,UAAU,CAACzO,GAAX,CAAezlI,IAAf,CAAoBm0I,UAApB;;EAEA,aAASH,SAAT,CAAmB7sC,IAAnB,EAAyB;EACvB,aAAOypC,OAAO,CAACzpC,IAAD,CAAP,KAAkB,QAAlB,GAA6B20B,UAAU,CAAC30B,IAAD,CAAvC,GAAgDA,IAAvD;EACD;EACF,GAdD;EAeA,MAAIitC,UAAU,GAAG,EAAjB;EACAnpH,EAAAA,QAAQ,CAACld,MAAM,CAACqf,MAAP,CAAcgkG,KAAd,CAAD,CAAR;EACA,MAAIijB,UAAU,GAAGtmI,MAAM,CAACkxB,MAAP,CAAc4/B,KAAd,CAAoB9wD,MAApB,EAA4B,CAAC,EAAD,EAAK22E,MAAL,CAAYg1C,oBAAkB,CAAC3rH,MAAM,CAACqqH,OAAP,CAAehH,KAAf,EAAsB3mE,MAAtB,CAA6B,UAAU4tE,KAAV,EAAiB;EACxH,QAAIC,KAAK,GAAG3D,gBAAc,CAAC0D,KAAD,EAAQ,CAAR,CAA1B;EAAA,QACIlxB,IAAI,GAAGmxB,KAAK,CAAC,CAAD,CADhB;;EAGA,WAAO,CAACnxB,IAAI,CAAC2sC,IAAb;EACD,GAL2E,EAKzEvgH,GALyE,CAKrE,UAAU+gH,KAAV,EAAiB;EACtB,QAAI/W,KAAK,GAAG5I,gBAAc,CAAC2f,KAAD,EAAQ,CAAR,CAA1B;EAAA,QACI9pH,EAAE,GAAG+yG,KAAK,CAAC,CAAD,CADd;EAAA,QAEIp2B,IAAI,GAAGo2B,KAAK,CAAC,CAAD,CAFhB;;EAIA,WAAO7B,iBAAe,CAAC,EAAD,EAAKlxG,EAAL,EAAS28E,IAAI,CAACh1F,KAAd,CAAtB;EACD,GAX2E,CAAD,CAA9B,CAA5B,CAAjB;EAYA,SAAOkiI,UAAP;;EAEA,WAASppH,QAAT,CAAkBgwF,KAAlB,EAAyB;EACvB,QAAIs5B,SAAS,GAAGltI,SAAS,CAACxG,MAAV,GAAmB,CAAnB,IAAwBwG,SAAS,CAAC,CAAD,CAAT,KAAiBxH,SAAzC,GAAqDwH,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAApF;EACA,QAAImtI,YAAY,GAAGntI,SAAS,CAACxG,MAAV,GAAmB,CAAnB,IAAwBwG,SAAS,CAAC,CAAD,CAAT,KAAiBxH,SAAzC,GAAqDwH,SAAS,CAAC,CAAD,CAA9D,GAAoE,CAAvF;;EAEA,SAAK,IAAI1G,CAAC,GAAG,CAAR,EAAWC,CAAC,GAAGq6G,KAAK,CAACp6G,MAA1B,EAAkCF,CAAC,GAAGC,CAAtC,EAAyCD,CAAC,EAA1C,EAA8C;EAC5C,UAAIwmG,IAAI,GAAG8T,KAAK,CAACt6G,CAAD,CAAhB;;EAEA,UAAI4zI,SAAS,CAACx0I,OAAV,CAAkBonG,IAAlB,MAA4B,CAAC,CAAjC,EAAoC;EAClC,YAAIstC,IAAI,GAAG,YAAY;EACrB,cAAIhzC,IAAI,GAAG,GAAG/c,MAAH,CAAUg1C,oBAAkB,CAAC6a,SAAS,CAAC7zI,KAAV,CAAgB6zI,SAAS,CAACx0I,OAAV,CAAkBonG,IAAlB,CAAhB,CAAD,CAA5B,EAAwE,CAACA,IAAD,CAAxE,EAAgF5zE,GAAhF,CAAoF,UAAUvpB,CAAV,EAAa;EAC1G,mBAAO8xH,UAAU,CAAC9xH,CAAC,CAACqG,IAAH,CAAjB;EACD,WAFU,CAAX;;EAIA,cAAI,CAAC+jI,UAAU,CAACM,IAAX,CAAgB,UAAUC,SAAV,EAAqB;EACxC,mBAAOA,SAAS,CAAC9zI,MAAV,KAAqB4gG,IAAI,CAAC5gG,MAA1B,IAAoC8zI,SAAS,CAACC,KAAV,CAAgB,UAAUpqH,EAAV,EAAcs+F,GAAd,EAAmB;EAC5E,qBAAOt+F,EAAE,KAAKi3E,IAAI,CAACqnB,GAAD,CAAlB;EACD,aAF0C,CAA3C;EAGD,WAJI,CAAL,EAII;EACFsrB,YAAAA,UAAU,CAACp0I,IAAX,CAAgByhG,IAAhB;EACAmyC,YAAAA,WAAW,CAACnyC,IAAD,CAAX;EACD;;EAED,iBAAO,UAAP;EACD,SAfU,EAAX;;EAiBA,YAAIgzC,IAAI,KAAK,UAAb,EAAyB;EAC1B;;EAED,UAAID,YAAY,GAAGrtC,IAAI,CAACh1F,KAAxB,EAA+B;EAC7B;EACAg1F,QAAAA,IAAI,CAACh1F,KAAL,GAAaqiI,YAAb;EACAvpH,QAAAA,QAAQ,CAACk8E,IAAI,CAACs+B,GAAN,EAAW,GAAG/gD,MAAH,CAAUg1C,oBAAkB,CAAC6a,SAAD,CAA5B,EAAyC,CAACptC,IAAD,CAAzC,CAAX,EAA6DqtC,YAAY,IAAIrtC,IAAI,CAAC2sC,IAAL,GAAY,CAAZ,GAAgB,CAApB,CAAzE,CAAR;EACD;EACF;EACF;EACF;;EAED,IAAIe,SAAO,GAAGx+D,MAAM,CAACy+D,KAAP,GAAez+D,MAAM,CAACy+D,KAAtB;EAAA,EACZ;EACArjJ,EAAAA,KAAK,EAAEA,OADP;EAEAtP,EAAAA,IAAI,EAAEA,IAFN;EAGAqW,EAAAA,mBAAmB,EAAEA,mBAHrB;EAIAxY,EAAAA,KAAK,EAAEA,KAJP;EAKAiB,EAAAA,cAAc,EAAEA,cALhB;EAMAb,EAAAA,eAAe,EAAEA,eANjB;EAOArD,EAAAA,OAAO,EAAEA,OAPT;EAQA/B,EAAAA,OAAO,EAAEA,OART;EASA+5J,EAAAA,oBAAoB,EAAEA,cATtB;EAUAC,EAAAA,sBAAsB,EAAEA,gBAVxB;EAWAC,EAAAA,kBAAkB,EAAEA,YAXpB;EAYAC,EAAAA,kBAAkB,EAAEA,YAZpB;EAaA1gJ,EAAAA,IAAI,EAAEA,IAbN;EAcAN,EAAAA,iBAAiB,EAAEA,iBAdnB;EAeA0H,EAAAA,qBAAqB,EAAEA,qBAfvB;EAgBAJ,EAAAA,iBAAiB,EAAEA,iBAhBnB;EAiBArgB,EAAAA,IAAI,EAAEA;EAjBN,CADF;EAoBA,IAAIg6J,MAAM,GAAG;EACX/jB,EAAAA,KAAK,EAAEA,YADI;EAEXgkB,EAAAA,WAAW,EAAEA;EAFF,CAAb;EAKA,IAAIC,oBAAoB,GAAG,CAA3B;;EAEA,IAAIC,cAAc,GAAG,IAAIT,SAAO,CAAC5zJ,cAAZ,GAA6B65C,YAA7B,GAA4C,cAA5C,GAA6D,cAAlF;EACA,IAAIy6G,cAAc,GAAG,IAAIV,SAAO,CAAC5zJ,cAAZ,GAA6BwvB,YAA7B,GAA4C,cAA5C,GAA6D,aAAlF;EACA,IAAI+kI,UAAU,GAAGC,OAAO,CAAC;EACvBlf,EAAAA,KAAK,EAAE;EACLmf,IAAAA,OAAO,EAAE;EACPzf,MAAAA,QAAQ,EAAE,SAASA,QAAT,CAAkByf,OAAlB,EAA2B/hG,KAA3B,EAAkC;EAC1C,YAAI09B,KAAK,GAAG,IAAZ;;EAEA,YAAIqkE,OAAO,IAAI,CAAC/hG,KAAK,CAACgiG,YAAtB,EAAoC;EAClC;EACAhiG,UAAAA,KAAK,CAACgiG,YAAN,GAAqB,IAArB;EACAhiG,UAAAA,KAAK,CAACiiG,SAAN;EACAz5C,UAAAA,KAAK,CAACu5C,OAAD,CAAL,CAAet5C,IAAf,CAAoB,UAAUtxF,CAAV,EAAa;EAC/B,mBAAOA,CAAC,CAAC41E,IAAF,EAAP;EACD,WAFD,EAEG0b,IAFH,CAEQ,UAAU1b,IAAV,EAAgB;EACtB/sC,YAAAA,KAAK,CAACgiG,YAAN,GAAqB,KAArB;EACAhiG,YAAAA,KAAK,CAACkiG,eAAN,CAAsBn1D,IAAtB;;EAEArP,YAAAA,KAAK,CAACykE,SAAN,CAAgBp1D,IAAhB;EACD,WAPD;EAQD;EACF,OAjBM;EAkBPq1C,MAAAA,aAAa,EAAE;EAlBR,KADJ;EAqBL+f,IAAAA,SAAS,EAAE;EACT,iBAAW;EACT76B,QAAAA,KAAK,EAAE,EADE;EAETgE,QAAAA,KAAK,EAAE;EAFE,OADF;EAKTgX,MAAAA,QAAQ,EAAE,SAASA,QAAT,CAAkB6f,SAAlB,EAA6BniG,KAA7B,EAAoC;EAC5CA,QAAAA,KAAK,CAACoiG,aAAN,GAAsB,KAAtB,CAD4C;EAE7C;EAPQ,KArBN;EA8BLnzB,IAAAA,aAAa,EAAE;EACb,iBAAW,CADE;EAEbqT,MAAAA,QAAQ,EAAE,SAASA,QAAT,CAAkB+f,MAAlB,EAA0BriG,KAA1B,EAAiC;EACzC,YAAIsiG,WAAW,GAAGtiG,KAAK,CAACuiG,aAAN,CAAoB7qH,KAApB,CAA0B,QAA1B,CAAlB,CADyC;;EAGzC,YAAI4qH,WAAJ,EAAiB;EACfA,UAAAA,WAAW,CAAC/6B,QAAZ,CAAqB86B,MAAM,GAAG,CAAT,GAAa,CAAC,EAAd,GAAmB,CAAC,EAAzC;EACD;;EAED,YAAIA,MAAM,GAAG,CAAb,EAAgB;EACdG,UAAAA,cAAc,CAACxiG,KAAK,CAACmiG,SAAN,CAAgB76B,KAAjB,EAAwB,GAAxB,CAAd;EACD;;EAED,YAAI+6B,MAAM,GAAG,CAAb,EAAgB;EACdG,UAAAA,cAAc,CAACxiG,KAAK,CAACmiG,SAAN,CAAgB76B,KAAjB,EAAwB,GAAxB,CAAd;EACD;;EAED,iBAASk7B,cAAT,CAAwBl7B,KAAxB,EAA+Bz1B,GAA/B,EAAoC;EAClCy1B,UAAAA,KAAK,CAAChxC,OAAN,CAAc,UAAUjgE,CAAV,EAAa;EACzB,mBAAOA,CAAC,CAACw7E,GAAD,CAAR,CADyB;;EAGzB,mBAAOx7E,CAAC,CAAC,IAAI06E,MAAJ,CAAWc,GAAX,CAAD,CAAR,CAHyB;EAI1B,WAJD;EAKD;EACF;EAxBY,KA9BV;EAwDL4wD,IAAAA,OAAO,EAAE;EACPngB,MAAAA,QAAQ,EAAE,SAASA,QAAT,CAAkBmgB,OAAlB,EAA2BziG,KAA3B,EAAkC;EAC1C;EACA,SAACyiG,OAAD,IAAYziG,KAAK,CAAC0iG,WAAN,KAAsB,IAAlC,IAA0C,CAAC1iG,KAAK,CAACmiG,SAAN,CAAgB76B,KAAhB,IAAyB,EAA1B,EAA8BhxC,OAA9B,CAAsC,UAAUloE,CAAV,EAAa;EAC3F,iBAAOA,CAAC,CAACuhH,EAAF,GAAOvhH,CAAC,CAACwhH,EAAF,GAAOxhH,CAAC,CAACyhH,EAAF,GAAO3jH,SAA5B;EACD,SAFyC,CAA1C,CAF0C;EAK3C;EANM,KAxDJ;EAgELy2I,IAAAA,gBAAgB,EAAE,EAhEb;EAiELC,IAAAA,aAAa,EAAE;EACb,iBAAW,SAASC,QAAT,CAAkBrvC,IAAlB,EAAwB;EACjC,eAAO,IAAP;EACD;EAHY,KAjEV;EAsELsvC,IAAAA,UAAU,EAAE;EACV1gB,MAAAA,aAAa,EAAE;EADL,KAtEP;EAyEL2gB,IAAAA,WAAW,EAAE;EACX,iBAAW;EADA,KAzER;EA4EL;EACA13B,IAAAA,MAAM,EAAE;EACN,iBAAW;EADL,KA7EH;EAgFL23B,IAAAA,OAAO,EAAE;EACP,iBAAW;EADJ,KAhFJ;EAmFLC,IAAAA,cAAc,EAAE;EACd,iBAAW;EADG,KAnFX;EAsFL;EACAC,IAAAA,SAAS,EAAE;EACT,iBAAW;EADF,KAvFN;EA0FLC,IAAAA,eAAe,EAAE,EA1FZ;EA2FLC,IAAAA,WAAW,EAAE;EACX,iBAAW;EADA,KA3FR;EA8FLC,IAAAA,cAAc,EAAE;EACd,iBAAW;EADG,KA9FX;EAiGLC,IAAAA,eAAe,EAAE,EAjGZ;EAkGLC,IAAAA,qBAAqB,EAAE;EACrB,iBAAW;EADU,KAlGlB;EAqGLC,IAAAA,UAAU,EAAE;EACV,iBAAW;EADD,KArGP;EAwGLC,IAAAA,UAAU,EAAE;EACV,iBAAW;EADD,KAxGP;EA2GLC,IAAAA,cAAc,EAAE;EACd,iBAAW;EADG,KA3GX;EA8GLC,IAAAA,SAAS,EAAE;EACT,iBAAW;EADF,KA9GN;EAiHLC,IAAAA,eAAe,EAAE,EAjHZ;EAkHLC,IAAAA,WAAW,EAAE;EACX,iBAAW;EADA,KAlHR;EAqHLC,IAAAA,SAAS,EAAE,EArHN;EAsHL;EACAC,IAAAA,cAAc,EAAE;EACd,iBAAW;EADG,KAvHX;EA0HL;EACAC,IAAAA,aAAa,EAAE;EACb,iBAAW,CADE;EAEb5hB,MAAAA,aAAa,EAAE;EAFF,KA3HV;EA+HL;EACA6hB,IAAAA,iBAAiB,EAAE;EACjB,iBAAW,CADM;EAEjB7hB,MAAAA,aAAa,EAAE;EAFE,KAhId;EAoIL;EACA8hB,IAAAA,YAAY,EAAE,EArIT;EAsILC,IAAAA,eAAe,EAAE,EAtIZ;EAuILC,IAAAA,qBAAqB,EAAE;EACrB,iBAAW;EADU,KAvIlB;EA0ILC,IAAAA,kBAAkB,EAAE;EAClBjiB,MAAAA,aAAa,EAAE;EADG,KA1If;EA6IL;EACAkiB,IAAAA,0BAA0B,EAAE;EAC1B,iBAAW;EADe,KA9IvB;EAiJLC,IAAAA,yBAAyB,EAAE,EAjJtB;EAkJLC,IAAAA,0BAA0B,EAAE;EAC1B,iBAAW,GADe;EAE1BpiB,MAAAA,aAAa,EAAE;EAFW,KAlJvB;EAsJL;EACAqiB,IAAAA,8BAA8B,EAAE;EAC9B,iBAAW;EADmB,KAvJ3B;EA0JL;EACAC,IAAAA,wBAAwB,EAAE;EACxB,iBAAW;EADa,KA3JrB;EA8JL;EACAC,IAAAA,4BAA4B,EAAE;EAC5B,iBAAW,IADiB;EAE5BviB,MAAAA,aAAa,EAAE;EAFa,KA/JzB;EAmKL;EACAwiB,IAAAA,4BAA4B,EAAE;EAC5B,iBAAW;EADiB,KApKzB;EAuKLC,IAAAA,4BAA4B,EAAE,EAvKzB;EAwKLC,IAAAA,iCAAiC,EAAE;EACjC,iBAAW;EADsB,KAxK9B;EA2KL;EACApC,IAAAA,WAAW,EAAE;EACX,iBAAW;EADA,KA5KR;EA+KL;EACAqC,IAAAA,UAAU,EAAE;EACV,iBAAW;EADD,KAhLP;EAmLLC,IAAAA,YAAY,EAAE;EACZ,iBAAW,MADC;EAEZ5iB,MAAAA,aAAa,EAAE,KAFH;EAGZE,MAAAA,QAAQ,EAAE,SAASA,QAAT,CAAkBlT,UAAlB,EAA8BpvE,KAA9B,EAAqC;EAC7CA,QAAAA,KAAK,CAACuiG,aAAN,CAAoBnzB,UAApB,CAA+BA,UAA/B;EACD;EALW,KAnLT;EA0LL61B,IAAAA,aAAa,EAAE;EACb,iBAAW,CADE;EAEb7iB,MAAAA,aAAa,EAAE,KAFF;EAGbE,MAAAA,QAAQ,EAAE,SAASA,QAAT,CAAkBjT,WAAlB,EAA+BrvE,KAA/B,EAAsC;EAC9CA,QAAAA,KAAK,CAACuiG,aAAN,CAAoBlzB,WAApB,CAAgCA,WAAhC;EACD;EALY,KA1LV;EAiML61B,IAAAA,eAAe,EAAE;EACf,iBAAW,GADI;EAEf9iB,MAAAA,aAAa,EAAE,KAFA;EAGfE,MAAAA,QAAQ,EAAE,SAASA,QAAT,CAAkBhT,aAAlB,EAAiCtvE,KAAjC,EAAwC;EAChDA,QAAAA,KAAK,CAACuiG,aAAN,CAAoBjzB,aAApB,CAAkCA,aAAlC;EACD;EALc,KAjMZ;EAwML61B,IAAAA,aAAa,EAAE;EACb,iBAAW;EACT;EACA7qB,QAAAA,QAAQ,EAAE,EAFD;EAGTF,QAAAA,OAAO,EAAE,CAAC,GAHD;EAITtiH,QAAAA,KAAK,EAAE,GAJE;EAKTqiH,QAAAA,YAAY,EAAE,EALL;EAMTtB,QAAAA,iBAAiB,EAAE,MANV;EAOTwB,QAAAA,eAAe,EAAE;EAPR;EADE,KAxMV;EAmNL+qB,IAAAA,WAAW,EAAE;EACX,iBAAW,CADA;EAEXhjB,MAAAA,aAAa,EAAE;EAFJ,KAnNR;EAuNL;EACAijB,IAAAA,aAAa,EAAE;EACb,iBAAWntI,QADE;EAEbkqH,MAAAA,aAAa,EAAE;EAFF,KAxNV;EA4NLkjB,IAAAA,YAAY,EAAE;EACZ,iBAAW,KADC;EAEZljB,MAAAA,aAAa,EAAE;EAFH,KA5NT;EAgOL;EACA6f,IAAAA,SAAS,EAAE;EACT,iBAAW,SAASY,QAAT,GAAoB,EADtB;EAETzgB,MAAAA,aAAa,EAAE;EAFN,KAjON;EAqOL8f,IAAAA,eAAe,EAAE;EACf,iBAAW,SAASW,QAAT,GAAoB,EADhB;EAEfzgB,MAAAA,aAAa,EAAE;EAFA,KArOZ;EAyOLpnH,IAAAA,QAAQ,EAAE;EACR,iBAAW,SAAS6nI,QAAT,GAAoB,EADvB;EAERzgB,MAAAA,aAAa,EAAE;EAFP,KAzOL;EA6OLmjB,IAAAA,cAAc,EAAE;EACd,iBAAW,SAAS1C,QAAT,GAAoB,EADjB;EAEdzgB,MAAAA,aAAa,EAAE;EAFD,KA7OX;EAiPLojB,IAAAA,YAAY,EAAE;EACZ,iBAAW,SAAS3C,QAAT,GAAoB,EADnB;EAEZzgB,MAAAA,aAAa,EAAE;EAFH,KAjPT;EAqPLqjB,IAAAA,YAAY,EAAE;EACZ,iBAAW,SAAS5C,QAAT,GAAoB,EADnB;EAEZzgB,MAAAA,aAAa,EAAE;EAFH;EArPT,GADgB;EA2PvBW,EAAAA,OAAO,EAAE;EACP2iB,IAAAA,OAAO,EAAE,SAASA,OAAT,CAAiB1lG,KAAjB,EAAwB;EAC/BA,MAAAA,KAAK,CAAC2lG,aAAN,GAAsB,IAAtB;;EAEA3lG,MAAAA,KAAK,CAAC8kF,SAAN;;EAEA,aAAO,IAAP;EACD,KAPM;EAQP;EACA8gB,IAAAA,OAAO,EAAE,SAASA,OAAT,CAAiB5lG,KAAjB,EAAwBg9E,SAAxB,EAAmC6oB,OAAnC,EAA4C;EACnD,UAAIA,OAAO,KAAK35I,SAAhB,EAA2B;EACzB,eAAO8zC,KAAK,CAACuiG,aAAN,CAAoB7qH,KAApB,CAA0BslG,SAA1B,CAAP,CADyB;EAE1B;;EAEDh9E,MAAAA,KAAK,CAACuiG,aAAN,CAAoB7qH,KAApB,CAA0BslG,SAA1B,EAAqC6oB,OAArC,EALmD;;EAOnD,aAAO,IAAP;EACD,KAjBM;EAkBPtD,IAAAA,aAAa,EAAE,SAASA,aAAT,CAAuBviG,KAAvB,EAA8B8lG,cAA9B,EAA8C;EAC3D,UAAIA,cAAc,KAAK55I,SAAvB,EAAkC;EAChC,eAAO8zC,KAAK,CAACuiG,aAAb,CADgC;EAEjC,OAH0D;;;EAM3D1yI,MAAAA,OAAO,CAAClB,GAAR,CAAY,kCAAZ;EACA,aAAO,IAAP;EACD,KA1BM;EA2BPo3I,IAAAA,kBAAkB,EAAE,SAASA,kBAAT,CAA4B/lG,KAA5B,EAAmC;EACrDA,MAAAA,KAAK,CAACuiG,aAAN,CAAoBjwI,KAApB,CAA0B,CAA1B;EACA,WAAK0zI,cAAL;EACA,aAAO,IAAP;EACD,KA/BM;EAgCPC,IAAAA,uBAAuB,EAAE,SAASA,uBAAT,CAAiCjmG,KAAjC,EAAwC;EAC/D,aAAOA,KAAK,CAACoiG,aAAb;EACD,KAlCM;EAmCP;EACA4D,IAAAA,cAAc,EAAE,SAASA,cAAT,CAAwBhmG,KAAxB,EAA+B;EAC7CA,MAAAA,KAAK,CAACkmG,QAAN,GAAiB,CAAjB;EACAlmG,MAAAA,KAAK,CAACmmG,aAAN,GAAsB,IAAIv4B,IAAJ,EAAtB;EACA5tE,MAAAA,KAAK,CAACoiG,aAAN,GAAsB,IAAtB;EACA,aAAO,IAAP;EACD,KAzCM;EA0CPgE,IAAAA,SAAS,EAAE,SAASA,SAAT,CAAmBpmG,KAAnB,EAA0B;EACnC,UAAIqmG,OAAO,GAAGrmG,KAAK,CAAC0iG,WAAN,KAAsB,QAApC;;EAEA,UAAI1iG,KAAK,CAACoiG,aAAV,EAAyB;EACvBkE,QAAAA,UAAU;EACX;;EAEDC,MAAAA,YAAY;EACZC,MAAAA,aAAa;EACb,aAAO,IAAP,CATmC;;EAWnC,eAASF,UAAT,GAAsB;EACpB,YAAI,EAAEtmG,KAAK,CAACkmG,QAAR,GAAmBlmG,KAAK,CAACqlG,aAAzB,IAA0C,IAAIz3B,IAAJ,KAAa5tE,KAAK,CAACmmG,aAAnB,GAAmCnmG,KAAK,CAACslG,YAAnF,IAAmGe,OAAO,IAAIrmG,KAAK,CAAC+kG,UAAN,GAAmB,CAA9B,IAAmC/kG,KAAK,CAACuiG,aAAN,CAAoBjwI,KAApB,KAA8B0tC,KAAK,CAAC+kG,UAA9K,EAA0L;EACxL/kG,UAAAA,KAAK,CAACoiG,aAAN,GAAsB,KAAtB,CADwL;;EAGxLpiG,UAAAA,KAAK,CAACylG,YAAN;EACD,SAJD,MAIO;EACLzlG,UAAAA,KAAK,CAACymG,MAAN,CAAaJ,OAAO,GAAG,MAAH,GAAY,MAAhC,IADK;;EAGLrmG,UAAAA,KAAK,CAACwlG,YAAN;EACD,SATmB;;;EAYpBxlG,QAAAA,KAAK,CAACmiG,SAAN,CAAgB76B,KAAhB,CAAsBhxC,OAAtB,CAA8B,UAAUk9B,IAAV,EAAgB;EAC5C,cAAIuxB,GAAG,GAAGvxB,IAAI,CAACkzC,UAAf;EACA,cAAI,CAAC3hB,GAAL,EAAU;EACV,cAAI/J,GAAG,GAAGqrB,OAAO,GAAG7yC,IAAH,GAAUxzD,KAAK,CAACymG,MAAN,CAAa/nB,eAAb,CAA6BlrB,IAAI,CAACxzD,KAAK,CAACqrE,MAAP,CAAjC,CAA3B;EACA0Z,UAAAA,GAAG,CAAClzG,QAAJ,CAAavjB,CAAb,GAAiB0sH,GAAG,CAAC1sH,CAArB;EACAy2H,UAAAA,GAAG,CAAClzG,QAAJ,CAAatjB,CAAb,GAAiBysH,GAAG,CAACzsH,CAAJ,IAAS,CAA1B;EACAw2H,UAAAA,GAAG,CAAClzG,QAAJ,CAAalV,CAAb,GAAiBq+G,GAAG,CAACr+G,CAAJ,IAAS,CAA1B;EACD,SAPD,EAZoB;;EAqBpB,YAAIgqI,iBAAiB,GAAGC,OAAU,CAAC5mG,KAAK,CAAC8jG,SAAP,CAAlC;EACA,YAAI+C,qBAAqB,GAAGD,OAAU,CAAC5mG,KAAK,CAACgkG,aAAP,CAAtC;EACA,YAAI8C,yBAAyB,GAAGF,OAAU,CAAC5mG,KAAK,CAACikG,iBAAP,CAA1C;EACA,YAAI8C,6BAA6B,GAAGH,OAAU,CAAC5mG,KAAK,CAACokG,qBAAP,CAA9C;EACApkG,QAAAA,KAAK,CAACmiG,SAAN,CAAgB72B,KAAhB,CAAsBh1C,OAAtB,CAA8B,UAAUs1C,IAAV,EAAgB;EAC5C,cAAIo7B,OAAO,GAAGp7B,IAAI,CAACq7B,SAAnB;EACA,cAAI,CAACD,OAAL,EAAc;EACd,cAAIhsB,GAAG,GAAGqrB,OAAO,GAAGz6B,IAAH,GAAU5rE,KAAK,CAACymG,MAAN,CAAa5nB,eAAb,CAA6B7+E,KAAK,CAACymG,MAAN,CAAahpB,KAAb,CAAmB1J,OAAnB,CAA2BnI,IAAI,CAACzwG,MAAhC,EAAwCywG,IAAI,CAAC/+G,MAA7C,EAAqDgqB,EAAlF,CAA3B;EACA,cAAIkQ,KAAK,GAAGi0F,GAAG,CAACqrB,OAAO,GAAG,QAAH,GAAc,MAAtB,CAAf;EACA,cAAIp6G,GAAG,GAAG+uF,GAAG,CAACqrB,OAAO,GAAG,QAAH,GAAc,IAAtB,CAAb;EACA,cAAI,CAACt/G,KAAD,IAAU,CAACkF,GAAX,IAAkB,CAAClF,KAAK,CAAC8lF,cAAN,CAAqB,GAArB,CAAnB,IAAgD,CAAC5gF,GAAG,CAAC4gF,cAAJ,CAAmB,GAAnB,CAArD,EAA8E,OANlC;;EAQ5Cq6B,UAAAA,aAAa,CAACt7B,IAAD,CAAb,CAR4C;;EAU5C,cAAIu7B,WAAW,GAAGJ,6BAA6B,CAACn7B,IAAD,CAA/C;;EAEA,cAAI5rE,KAAK,CAACqkG,kBAAN,IAA4BrkG,KAAK,CAACqkG,kBAAN,CAAyB8C,WAAW,GAAGH,OAAO,CAAC19H,QAAR,CAAiB,CAAjB,CAAH,GAAyB09H,OAA7D;EAChC;EACEjgH,YAAAA,KAAK,EAAE;EACLz4B,cAAAA,CAAC,EAAEy4B,KAAK,CAACz4B,CADJ;EAELC,cAAAA,CAAC,EAAEw4B,KAAK,CAACx4B,CAFJ;EAGLoO,cAAAA,CAAC,EAAEoqB,KAAK,CAACpqB;EAHJ,aADT;EAMEsvB,YAAAA,GAAG,EAAE;EACH39B,cAAAA,CAAC,EAAE29B,GAAG,CAAC39B,CADJ;EAEHC,cAAAA,CAAC,EAAE09B,GAAG,CAAC19B,CAFJ;EAGHoO,cAAAA,CAAC,EAAEsvB,GAAG,CAACtvB;EAHJ;EANP,WADgC,EAY7BivG,IAZ6B,CAA5B,IAYQ,CAACu7B,WAZb,EAY0B;EACxB;EACA;EACD;;EAED,cAAIC,eAAe,GAAG,EAAtB,CA7B4C;;EA+B5C,cAAI73D,KAAK,GAAGq8B,IAAI,CAACy7B,OAAjB,CA/B4C;;EAiC5C,cAAI50G,IAAI,GAAGu0G,OAAO,CAAC19H,QAAR,CAAiBpc,MAAjB,GAA0B85I,OAAO,CAAC19H,QAAR,CAAiB,CAAjB,CAA1B,GAAgD09H,OAA3D;;EAEA,cAAIv0G,IAAI,CAAC1mC,IAAL,KAAc,MAAlB,EAA0B;EACxB;EACA,gBAAI,CAACwjF,KAAL,EAAY;EACV;EACA,kBAAI+3D,OAAO,GAAG70G,IAAI,CAACvpB,QAAL,CAAcge,YAAd,CAA2B,UAA3B,CAAd;;EAEA,kBAAI,CAACogH,OAAD,IAAY,CAACA,OAAO,CAACx6I,KAArB,IAA8Bw6I,OAAO,CAACx6I,KAAR,CAAcI,MAAd,KAAyB,CAA3D,EAA8D;EAC5DulC,gBAAAA,IAAI,CAACvpB,QAAL,CAAcy4H,cAAd,EAA8B,UAA9B,EAA0C2F,OAAO,GAAG,IAAIpG,SAAO,CAACz0J,eAAZ,CAA4B,IAAI+5C,YAAJ,CAAiB,IAAI,CAArB,CAA5B,EAAqD,CAArD,CAApD;EACD;;EAED8gH,cAAAA,OAAO,CAACx6I,KAAR,CAAc,CAAd,IAAmBi6B,KAAK,CAACz4B,CAAzB;EACAg5I,cAAAA,OAAO,CAACx6I,KAAR,CAAc,CAAd,IAAmBi6B,KAAK,CAACx4B,CAAN,IAAW,CAA9B;EACA+4I,cAAAA,OAAO,CAACx6I,KAAR,CAAc,CAAd,IAAmBi6B,KAAK,CAACpqB,CAAN,IAAW,CAA9B;EACA2qI,cAAAA,OAAO,CAACx6I,KAAR,CAAc,CAAd,IAAmBm/B,GAAG,CAAC39B,CAAvB;EACAg5I,cAAAA,OAAO,CAACx6I,KAAR,CAAc,CAAd,IAAmBm/B,GAAG,CAAC19B,CAAJ,IAAS,CAA5B;EACA+4I,cAAAA,OAAO,CAACx6I,KAAR,CAAc,CAAd,IAAmBm/B,GAAG,CAACtvB,CAAJ,IAAS,CAA5B;EACA2qI,cAAAA,OAAO,CAAChrI,WAAR,GAAsB,IAAtB;EACD,aAfD,MAeO;EACL;EACAm2B,cAAAA,IAAI,CAACvpB,QAAL,CAAcnB,aAAd,CAA4BwnE,KAAK,CAACxE,SAAN,CAAgBq8D,eAAhB,CAA5B;EACD;;EAED30G,YAAAA,IAAI,CAACvpB,QAAL,CAAcye,qBAAd;EACD,WAvBD,MAuBO,IAAI8K,IAAI,CAAC1mC,IAAL,KAAc,MAAlB,EAA0B;EAC/B;EACA,gBAAI,CAACwjF,KAAL,EAAY;EACV;EACA,kBAAI,CAAC98C,IAAI,CAACvpB,QAAL,CAAcnd,IAAd,CAAmB4oD,KAAnB,CAAyB,6BAAzB,CAAL,EAA8D;EAC5D,oBAAImvF,SAAS,GAAG12I,IAAI,CAAC+D,IAAL,CAAUw1I,iBAAiB,CAAC/6B,IAAD,CAAjB,GAA0B,EAApC,IAA0C,EAA1D;EACA,oBAAIz0G,CAAC,GAAG2sI,SAAS,GAAG,CAApB;EACA,oBAAI56H,QAAQ,GAAG,IAAIg4H,SAAO,CAACG,sBAAZ,CAAmClqI,CAAnC,EAAsCA,CAAtC,EAAyC,CAAzC,EAA4C6oC,KAAK,CAAC+jG,cAAlD,EAAkE,CAAlE,EAAqE,KAArE,CAAf;EACA76H,gBAAAA,QAAQ,CAAC04H,cAAD,CAAR,CAAyB,IAAIV,SAAO,CAAC93J,OAAZ,GAAsB+nC,eAAtB,CAAsC,CAAtC,EAAyC,IAAI,CAA7C,EAAgD,CAAhD,CAAzB;EACAjI,gBAAAA,QAAQ,CAAC04H,cAAD,CAAR,CAAyB,IAAIV,SAAO,CAAC93J,OAAZ,GAAsBgoC,aAAtB,CAAoChkB,IAAI,CAACC,EAAL,GAAU,CAA9C,CAAzB;EACAolC,gBAAAA,IAAI,CAACvpB,QAAL,CAAc/M,OAAd;EACAs2B,gBAAAA,IAAI,CAACvpB,QAAL,GAAgBA,QAAhB;EACD;;EAED,kBAAIw/D,MAAM,GAAG,IAAIw4D,SAAO,CAAC75J,OAAZ,CAAoB0/C,KAAK,CAACz4B,CAA1B,EAA6By4B,KAAK,CAACx4B,CAAN,IAAW,CAAxC,EAA2Cw4B,KAAK,CAACpqB,CAAN,IAAW,CAAtD,CAAb;EACA,kBAAIgsE,IAAI,GAAG,IAAIu4D,SAAO,CAAC75J,OAAZ,CAAoB4kD,GAAG,CAAC39B,CAAxB,EAA2B29B,GAAG,CAAC19B,CAAJ,IAAS,CAApC,EAAuC09B,GAAG,CAACtvB,CAAJ,IAAS,CAAhD,CAAX;EACA,kBAAIoZ,QAAQ,GAAG2yD,MAAM,CAAC12E,UAAP,CAAkB22E,IAAlB,CAAf;EACAl2C,cAAAA,IAAI,CAAC5gB,QAAL,CAAcvjB,CAAd,GAAkBo6E,MAAM,CAACp6E,CAAzB;EACAmkC,cAAAA,IAAI,CAAC5gB,QAAL,CAActjB,CAAd,GAAkBm6E,MAAM,CAACn6E,CAAzB;EACAkkC,cAAAA,IAAI,CAAC5gB,QAAL,CAAclV,CAAd,GAAkB+rE,MAAM,CAAC/rE,CAAzB;EACA81B,cAAAA,IAAI,CAAC76B,KAAL,CAAW+E,CAAX,GAAeoZ,QAAf;EACA0c,cAAAA,IAAI,CAACve,MAAL,CAAYiC,YAAZ,CAAyBwyD,IAAzB,EAnBU;;EAqBVl2C,cAAAA,IAAI,CAAC/mB,MAAL,CAAYi9D,IAAZ;EACD,aAtBD,MAsBO;EACL;EACA,kBAAI,CAACl2C,IAAI,CAACvpB,QAAL,CAAcnd,IAAd,CAAmB4oD,KAAnB,CAAyB,yBAAzB,CAAL,EAA0D;EACxD;EACAliB,gBAAAA,IAAI,CAAC5gB,QAAL,CAAc7iB,GAAd,CAAkB,CAAlB,EAAqB,CAArB,EAAwB,CAAxB;EACAyjC,gBAAAA,IAAI,CAACh7B,QAAL,CAAczI,GAAd,CAAkB,CAAlB,EAAqB,CAArB,EAAwB,CAAxB;EACAyjC,gBAAAA,IAAI,CAAC76B,KAAL,CAAW5I,GAAX,CAAe,CAAf,EAAkB,CAAlB,EAAqB,CAArB;EACD;;EAED,kBAAIu4I,UAAU,GAAGn6I,IAAI,CAAC+D,IAAL,CAAUw1I,iBAAiB,CAAC/6B,IAAD,CAAjB,GAA0B,EAApC,IAA0C,EAA3D;;EAEA,kBAAIkgB,EAAE,GAAGyb,UAAU,GAAG,CAAtB;;EAEA,kBAAI5oJ,SAAS,GAAG,IAAIuiJ,SAAO,CAACI,kBAAZ,CAA+B/xD,KAA/B,EAAsC63D,eAAtC,EAAuDtb,EAAvD,EAA2D9rF,KAAK,CAAC+jG,cAAjE,EAAiF,KAAjF,CAAhB;;EAEAtxG,cAAAA,IAAI,CAACvpB,QAAL,CAAc/M,OAAd;EACAs2B,cAAAA,IAAI,CAACvpB,QAAL,GAAgBvqB,SAAhB;EACD;EACF;EACF,SArGD,EAzBoB;;EAgIpB,iBAASuoJ,aAAT,CAAuBt7B,IAAvB,EAA6B;EAC3B,cAAIoP,GAAG,GAAGqrB,OAAO,GAAGz6B,IAAH,GAAU5rE,KAAK,CAACymG,MAAN,CAAa5nB,eAAb,CAA6B7+E,KAAK,CAACymG,MAAN,CAAahpB,KAAb,CAAmB1J,OAAnB,CAA2BnI,IAAI,CAACzwG,MAAhC,EAAwCywG,IAAI,CAAC/+G,MAA7C,EAAqDgqB,EAAlF,CAA3B;EACA,cAAIkQ,KAAK,GAAGi0F,GAAG,CAACqrB,OAAO,GAAG,QAAH,GAAc,MAAtB,CAAf;EACA,cAAIp6G,GAAG,GAAG+uF,GAAG,CAACqrB,OAAO,GAAG,QAAH,GAAc,IAAtB,CAAb;EACA,cAAI,CAACt/G,KAAD,IAAU,CAACkF,GAAX,IAAkB,CAAClF,KAAK,CAAC8lF,cAAN,CAAqB,GAArB,CAAnB,IAAgD,CAAC5gF,GAAG,CAAC4gF,cAAJ,CAAmB,GAAnB,CAArD,EAA8E,OAJnD;;EAM3B,cAAI26B,SAAS,GAAGX,qBAAqB,CAACj7B,IAAD,CAArC;;EAEA,cAAI,CAAC47B,SAAL,EAAgB;EACd57B,YAAAA,IAAI,CAACy7B,OAAL,GAAe,IAAf,CADc;EAEf,WAFD,MAEO;EACL;EACA,gBAAI3+D,MAAM,GAAG,IAAIw4D,SAAO,CAAC75J,OAAZ,CAAoB0/C,KAAK,CAACz4B,CAA1B,EAA6By4B,KAAK,CAACx4B,CAAN,IAAW,CAAxC,EAA2Cw4B,KAAK,CAACpqB,CAAN,IAAW,CAAtD,CAAb;EACA,gBAAIgsE,IAAI,GAAG,IAAIu4D,SAAO,CAAC75J,OAAZ,CAAoB4kD,GAAG,CAAC39B,CAAxB,EAA2B29B,GAAG,CAAC19B,CAAJ,IAAS,CAApC,EAAuC09B,GAAG,CAACtvB,CAAJ,IAAS,CAAhD,CAAX;EACA,gBAAI1P,CAAC,GAAGy7E,MAAM,CAAC12E,UAAP,CAAkB22E,IAAlB,CAAR,CAJK;;EAML,gBAAI4G,KAAJ;EACA,gBAAIk4D,aAAa,GAAGX,yBAAyB,CAACl7B,IAAD,CAA7C;;EAEA,gBAAI3+G,CAAC,GAAG,CAAR,EAAW;EACT,kBAAIiF,EAAE,GAAG+5B,GAAG,CAAC39B,CAAJ,GAAQy4B,KAAK,CAACz4B,CAAvB;EACA,kBAAI6D,EAAE,GAAG85B,GAAG,CAAC19B,CAAJ,GAAQw4B,KAAK,CAACx4B,CAAd,IAAmB,CAA5B;EACA,kBAAIm5I,KAAK,GAAG,IAAIxG,SAAO,CAAC75J,OAAZ,GAAsBipB,UAAtB,CAAiCq4E,IAAjC,EAAuCD,MAAvC,CAAZ;EACA,kBAAIi/D,EAAE,GAAGD,KAAK,CAACl4I,KAAN,GAAciB,cAAd,CAA6B+2I,SAA7B,EAAwCh2I,KAAxC,CAA8CU,EAAE,KAAK,CAAP,IAAYC,EAAE,KAAK,CAAnB,GAAuB,IAAI+uI,SAAO,CAAC75J,OAAZ,CAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B,CAAvB,GAAsD,IAAI65J,SAAO,CAAC75J,OAAZ,CAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B,CAApG;EAAA,eACRo9B,cADQ,CACOijI,KAAK,CAAC71I,SAAN,EADP,EAC0B41I,aAD1B;EAAA,eAER93I,GAFQ,CAEJ,IAAIuxI,SAAO,CAAC75J,OAAZ,GAAsB0oB,UAAtB,CAAiC24E,MAAjC,EAAyCC,IAAzC,EAA+Ch4E,YAA/C,CAA4D,CAA5D,CAFI,CAAT;EAGA4+E,cAAAA,KAAK,GAAG,IAAI2xD,SAAO,CAACj5I,qBAAZ,CAAkCygF,MAAlC,EAA0Ci/D,EAA1C,EAA8Ch/D,IAA9C,CAAR;EACD,aARD,MAQO;EACL;EACA,kBAAItyE,CAAC,GAAGmxI,SAAS,GAAG,EAApB;EACA,kBAAII,QAAQ,GAAG,CAACH,aAAhB,CAHK;;EAKL,kBAAII,UAAU,GAAGD,QAAQ,GAAGx6I,IAAI,CAACC,EAAL,GAAU,CAAtC;EACAkiF,cAAAA,KAAK,GAAG,IAAI2xD,SAAO,CAACr5I,iBAAZ,CAA8B6gF,MAA9B,EAAsC,IAAIw4D,SAAO,CAAC75J,OAAZ,CAAoBgvB,CAAC,GAAGjJ,IAAI,CAACgG,GAAL,CAASy0I,UAAT,CAAxB,EAA8CxxI,CAAC,GAAGjJ,IAAI,CAACiG,GAAL,CAASw0I,UAAT,CAAlD,EAAwE,CAAxE,EAA2El4I,GAA3E,CAA+E+4E,MAA/E,CAAtC,EAA8H,IAAIw4D,SAAO,CAAC75J,OAAZ,CAAoBgvB,CAAC,GAAGjJ,IAAI,CAACgG,GAAL,CAASw0I,QAAT,CAAxB,EAA4CvxI,CAAC,GAAGjJ,IAAI,CAACiG,GAAL,CAASu0I,QAAT,CAAhD,EAAoE,CAApE,EAAuEj4I,GAAvE,CAA2E+4E,MAA3E,CAA9H,EAAkNC,IAAlN,CAAR;EACD;;EAEDijC,YAAAA,IAAI,CAACy7B,OAAL,GAAe93D,KAAf;EACD;EACF;EACF;;EAED,eAASg3D,YAAT,GAAwB;EACtB;EACA,YAAIuB,mBAAmB,GAAGlB,OAAU,CAAC5mG,KAAK,CAACwkG,0BAAP,CAApC;EACA,YAAIuD,mBAAmB,GAAGnB,OAAU,CAAC5mG,KAAK,CAACskG,0BAAP,CAApC;EACA,YAAI0D,eAAe,GAAGpB,OAAU,CAAC5mG,KAAK,CAACgjG,OAAP,CAAhC;EACAhjG,QAAAA,KAAK,CAACmiG,SAAN,CAAgB72B,KAAhB,CAAsBh1C,OAAtB,CAA8B,UAAUs1C,IAAV,EAAgB;EAC5C,cAAIq8B,QAAQ,GAAGr8B,IAAI,CAACs8B,UAApB;EACA,cAAI,CAACD,QAAL,EAAe;EACf,cAAIjtB,GAAG,GAAGqrB,OAAO,GAAGz6B,IAAH,GAAU5rE,KAAK,CAACymG,MAAN,CAAa5nB,eAAb,CAA6B7+E,KAAK,CAACymG,MAAN,CAAahpB,KAAb,CAAmB1J,OAAnB,CAA2BnI,IAAI,CAACzwG,MAAhC,EAAwCywG,IAAI,CAAC/+G,MAA7C,EAAqDgqB,EAAlF,CAA3B;EACA,cAAIkQ,KAAK,GAAGi0F,GAAG,CAACqrB,OAAO,GAAG,QAAH,GAAc,MAAtB,CAAf;EACA,cAAIp6G,GAAG,GAAG+uF,GAAG,CAACqrB,OAAO,GAAG,QAAH,GAAc,IAAtB,CAAb;EACA,cAAI,CAACt/G,KAAD,IAAU,CAACkF,GAAX,IAAkB,CAAClF,KAAK,CAAC8lF,cAAN,CAAqB,GAArB,CAAnB,IAAgD,CAAC5gF,GAAG,CAAC4gF,cAAJ,CAAmB,GAAnB,CAArD,EAA8E,OANlC;;EAQ5C,cAAIs7B,MAAM,GAAG/6I,IAAI,CAACsE,IAAL,CAAUtE,IAAI,CAACe,GAAL,CAAS,CAAT,EAAY65I,eAAe,CAACjhH,KAAD,CAAf,IAA0B,CAAtC,CAAV,IAAsDiZ,KAAK,CAAC+iG,WAAzE;EACA,cAAIqF,IAAI,GAAGh7I,IAAI,CAACsE,IAAL,CAAUtE,IAAI,CAACe,GAAL,CAAS,CAAT,EAAY65I,eAAe,CAAC/7G,GAAD,CAAf,IAAwB,CAApC,CAAV,IAAoD+T,KAAK,CAAC+iG,WAArE;EACA,cAAIsF,WAAW,GAAGN,mBAAmB,CAACn8B,IAAD,CAArC;EACA,cAAI08B,WAAW,GAAGR,mBAAmB,CAACl8B,IAAD,CAArC;EACA,cAAI28B,eAAe,GAAG38B,IAAI,CAACy7B,OAAL,GAAe,UAAU74I,CAAV,EAAa;EAChD,mBAAOo9G,IAAI,CAACy7B,OAAL,CAAa18D,QAAb,CAAsBn8E,CAAtB,CAAP;EACD,WAFqB;EAAA,YAGpB,UAAUA,CAAV,EAAa;EACb;EACA,gBAAIg6I,IAAI,GAAG,SAASA,IAAT,CAAc32D,GAAd,EAAmB9qD,KAAnB,EAA0BkF,GAA1B,EAA+Bz9B,CAA/B,EAAkC;EAC3C,qBAAOu4B,KAAK,CAAC8qD,GAAD,CAAL,GAAa,CAAC5lD,GAAG,CAAC4lD,GAAD,CAAH,GAAW9qD,KAAK,CAAC8qD,GAAD,CAAjB,IAA0BrjF,CAAvC,IAA4C,CAAnD;EACD,aAFD;;EAIA,mBAAO;EACLF,cAAAA,CAAC,EAAEk6I,IAAI,CAAC,GAAD,EAAMzhH,KAAN,EAAakF,GAAb,EAAkBz9B,CAAlB,CADF;EAELD,cAAAA,CAAC,EAAEi6I,IAAI,CAAC,GAAD,EAAMzhH,KAAN,EAAakF,GAAb,EAAkBz9B,CAAlB,CAFF;EAGLmO,cAAAA,CAAC,EAAE6rI,IAAI,CAAC,GAAD,EAAMzhH,KAAN,EAAakF,GAAb,EAAkBz9B,CAAlB;EAHF,aAAP;EAKD,WAdD;EAeA,cAAIi6I,OAAO,GAAG78B,IAAI,CAACy7B,OAAL,GAAez7B,IAAI,CAACy7B,OAAL,CAAan8D,SAAb,EAAf,GAA0C99E,IAAI,CAACsE,IAAL,CAAU,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgBkuB,GAAhB,CAAoB,UAAUiyD,GAAV,EAAe;EACnG,mBAAOzkF,IAAI,CAACqB,GAAL,CAAS,CAACw9B,GAAG,CAAC4lD,GAAD,CAAH,IAAY,CAAb,KAAmB9qD,KAAK,CAAC8qD,GAAD,CAAL,IAAc,CAAjC,CAAT,EAA8C,CAA9C,CAAP;EACD,WAFiE,EAE/Dm1C,MAF+D,CAExD,UAAU0hB,GAAV,EAAeh5I,CAAf,EAAkB;EAC1B,mBAAOg5I,GAAG,GAAGh5I,CAAb;EACD,WAJiE,EAI/D,CAJ+D,CAAV,CAAxD;EAKA,cAAIi5I,YAAY,GAAGR,MAAM,GAAGE,WAAT,GAAuB,CAACI,OAAO,GAAGN,MAAV,GAAmBC,IAAnB,GAA0BC,WAA3B,IAA0CC,WAApF;EACA,cAAIM,SAAS,GAAGL,eAAe,CAACI,YAAY,GAAGF,OAAhB,CAA/B;EACA,cAAII,SAAS,GAAGN,eAAe,CAAC,CAACI,YAAY,GAAGN,WAAhB,IAA+BI,OAAhC,CAA/B;EACA,WAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgBnyE,OAAhB,CAAwB,UAAUub,GAAV,EAAe;EACrC,mBAAOo2D,QAAQ,CAACp2H,QAAT,CAAkBggE,GAAlB,IAAyBg3D,SAAS,CAACh3D,GAAD,CAAzC;EACD,WAFD;;EAIA,cAAIi3D,OAAO,GAAGhL,YAAU,CAACoD,SAAO,CAAC75J,OAAT,EAAkB0+I,oBAAkB,CAAC,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgBnmG,GAAhB,CAAoB,UAAUzsB,CAAV,EAAa;EAC5F,mBAAOy1I,SAAS,CAACz1I,CAAD,CAAhB;EACD,WAF4D,CAAD,CAApC,CAAxB;;EAIA80I,UAAAA,QAAQ,CAAC/zH,MAAT,CAAgBiC,YAAhB,CAA6B2yH,OAA7B,EA3C4C;;EA6C5Cb,UAAAA,QAAQ,CAACv8H,MAAT,CAAgBo9H,OAAhB;EACD,SA9CD;EA+CD;;EAED,eAAStC,aAAT,GAAyB;EACvB;EACA,YAAIuC,qBAAqB,GAAGnC,OAAU,CAAC5mG,KAAK,CAAC2kG,4BAAP,CAAtC;EACA3kG,QAAAA,KAAK,CAACmiG,SAAN,CAAgB72B,KAAhB,CAAsBh1C,OAAtB,CAA8B,UAAUs1C,IAAV,EAAgB;EAC5C,cAAIo9B,YAAY,GAAGp9B,IAAI,CAACq9B,YAAL,IAAqBr9B,IAAI,CAACq9B,YAAL,CAAkB3/H,QAA1D;EACA,cAAI4/H,gBAAgB,GAAGt9B,IAAI,CAACu9B,qBAAL,IAA8Bv9B,IAAI,CAACu9B,qBAAL,CAA2B7/H,QAAhF;EACA,cAAI,CAAC,CAAC4/H,gBAAD,IAAqB,CAACA,gBAAgB,CAACh8I,MAAxC,MAAoD,CAAC87I,YAAD,IAAiB,CAACA,YAAY,CAAC97I,MAAnF,CAAJ,EAAgG;EAChG,cAAI8tH,GAAG,GAAGqrB,OAAO,GAAGz6B,IAAH,GAAU5rE,KAAK,CAACymG,MAAN,CAAa5nB,eAAb,CAA6B7+E,KAAK,CAACymG,MAAN,CAAahpB,KAAb,CAAmB1J,OAAnB,CAA2BnI,IAAI,CAACzwG,MAAhC,EAAwCywG,IAAI,CAAC/+G,MAA7C,EAAqDgqB,EAAlF,CAA3B;EACA,cAAIkQ,KAAK,GAAGi0F,GAAG,CAACqrB,OAAO,GAAG,QAAH,GAAc,MAAtB,CAAf;EACA,cAAIp6G,GAAG,GAAG+uF,GAAG,CAACqrB,OAAO,GAAG,QAAH,GAAc,IAAtB,CAAb;EACA,cAAI,CAACt/G,KAAD,IAAU,CAACkF,GAAX,IAAkB,CAAClF,KAAK,CAAC8lF,cAAN,CAAqB,GAArB,CAAnB,IAAgD,CAAC5gF,GAAG,CAAC4gF,cAAJ,CAAmB,GAAnB,CAArD,EAA8E,OAPlC;;EAS5C,cAAIu8B,aAAa,GAAGL,qBAAqB,CAACn9B,IAAD,CAAzC;EACA,cAAIy9B,YAAY,GAAGz9B,IAAI,CAACy7B,OAAL,GAAe,UAAU74I,CAAV,EAAa;EAC7C,mBAAOo9G,IAAI,CAACy7B,OAAL,CAAa18D,QAAb,CAAsBn8E,CAAtB,CAAP;EACD,WAFkB;EAAA,YAGjB,UAAUA,CAAV,EAAa;EACb;EACA,gBAAIg6I,IAAI,GAAG,SAASA,IAAT,CAAc32D,GAAd,EAAmB9qD,KAAnB,EAA0BkF,GAA1B,EAA+Bz9B,CAA/B,EAAkC;EAC3C,qBAAOu4B,KAAK,CAAC8qD,GAAD,CAAL,GAAa,CAAC5lD,GAAG,CAAC4lD,GAAD,CAAH,GAAW9qD,KAAK,CAAC8qD,GAAD,CAAjB,IAA0BrjF,CAAvC,IAA4C,CAAnD;EACD,aAFD;;EAIA,mBAAO;EACLF,cAAAA,CAAC,EAAEk6I,IAAI,CAAC,GAAD,EAAMzhH,KAAN,EAAakF,GAAb,EAAkBz9B,CAAlB,CADF;EAELD,cAAAA,CAAC,EAAEi6I,IAAI,CAAC,GAAD,EAAMzhH,KAAN,EAAakF,GAAb,EAAkBz9B,CAAlB,CAFF;EAGLmO,cAAAA,CAAC,EAAE6rI,IAAI,CAAC,GAAD,EAAMzhH,KAAN,EAAakF,GAAb,EAAkBz9B,CAAlB;EAHF,aAAP;EAKD,WAdD;EAeA,cAAI86I,OAAO,GAAG,GAAGv4D,MAAH,CAAUg1C,oBAAkB,CAACijB,YAAY,IAAI,EAAjB,CAA5B,EAAkDjjB,oBAAkB,CAACmjB,gBAAgB,IAAI,EAArB,CAApE,CAAd;EACAI,UAAAA,OAAO,CAAChzE,OAAR,CAAgB,UAAUizE,MAAV,EAAkBp0B,GAAlB,EAAuB;EACrC,gBAAIq0B,SAAS,GAAGD,MAAM,CAACr1H,MAAP,CAAcu1H,kBAAd,KAAqC,kBAArD;;EAEA,gBAAI,CAACF,MAAM,CAAC18B,cAAP,CAAsB,iBAAtB,CAAL,EAA+C;EAC7C08B,cAAAA,MAAM,CAACG,eAAP,GAAyBF,SAAS,GAAG,CAAH,GAAOr0B,GAAG,GAAG6zB,YAAY,CAAC97I,MAA5D;EACD;;EAEDq8I,YAAAA,MAAM,CAACG,eAAP,IAA0BN,aAA1B;;EAEA,gBAAIG,MAAM,CAACG,eAAP,IAA0B,CAA9B,EAAiC;EAC/B,kBAAI,CAACF,SAAL,EAAgB;EACdD,gBAAAA,MAAM,CAACG,eAAP,GAAyBH,MAAM,CAACG,eAAP,GAAyB,CAAlD;EACD,eAFD,MAEO;EACL;EACAH,gBAAAA,MAAM,CAACr1H,MAAP,CAAcsC,MAAd,CAAqB+yH,MAArB;EACA1K,gBAAAA,WAAW,CAAC0K,MAAD,CAAX;EACA;EACD;EACF;;EAED,gBAAII,cAAc,GAAGJ,MAAM,CAACG,eAA5B;EACA,gBAAI1uB,GAAG,GAAGquB,YAAY,CAACM,cAAD,CAAtB;EACA,aAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgBrzE,OAAhB,CAAwB,UAAUub,GAAV,EAAe;EACrC,qBAAO03D,MAAM,CAAC13H,QAAP,CAAgBggE,GAAhB,IAAuBmpC,GAAG,CAACnpC,GAAD,CAAjC;EACD,aAFD;EAGD,WAzBD;EA0BD,SApDD;EAqDD;EACF,KA7UM;EA8UP+3D,IAAAA,YAAY,EAAE,SAASA,YAAT,CAAsB5pG,KAAtB,EAA6B4rE,IAA7B,EAAmC;EAC/C,UAAIA,IAAJ,EAAU;EACR,YAAI,CAACA,IAAI,CAACu9B,qBAAV,EAAiC;EAC/B,cAAIpkB,GAAG,GAAG,IAAImc,SAAO,CAACpjJ,KAAZ,EAAV;EACAinI,UAAAA,GAAG,CAAC0kB,kBAAJ,GAAyB,kBAAzB;EACA79B,UAAAA,IAAI,CAACu9B,qBAAL,GAA6BpkB,GAA7B;EACA/kF,UAAAA,KAAK,CAAC6pG,UAAN,CAAiBl6I,GAAjB,CAAqBo1H,GAArB;EACD;;EAED,YAAI+kB,qBAAqB,GAAGlD,OAAU,CAAC5mG,KAAK,CAAC4kG,4BAAP,CAAtC;EACA,YAAImF,OAAO,GAAG38I,IAAI,CAAC+D,IAAL,CAAU24I,qBAAqB,CAACl+B,IAAD,CAArB,GAA8B,EAAxC,IAA8C,EAA9C,GAAmD,CAAjE;EACA,YAAIo+B,WAAW,GAAGhqG,KAAK,CAAC8kG,iCAAxB;EACA,YAAImF,gBAAgB,GAAG,IAAI/I,SAAO,CAACE,oBAAZ,CAAiC2I,OAAjC,EAA0CC,WAA1C,EAAuDA,WAAvD,CAAvB;EACA,YAAIE,iBAAiB,GAAGtD,OAAU,CAAC5mG,KAAK,CAAC2jG,SAAP,CAAlC;EACA,YAAIwG,qBAAqB,GAAGvD,OAAU,CAAC5mG,KAAK,CAAC6kG,4BAAP,CAAtC;EACA,YAAIuF,WAAW,GAAGD,qBAAqB,CAACv+B,IAAD,CAArB,IAA+Bs+B,iBAAiB,CAACt+B,IAAD,CAAhD,IAA0D,SAA5E;EACA,YAAIy+B,aAAa,GAAG,IAAInJ,SAAO,CAAC70J,KAAZ,CAAkB+yJ,YAAY,CAACgL,WAAD,CAA9B,CAApB;EACA,YAAIruH,OAAO,GAAGikB,KAAK,CAAC6jG,WAAN,GAAoB,CAAlC;EACA,YAAIyG,gBAAgB,GAAG,IAAIpJ,SAAO,CAACr8I,mBAAZ,CAAgC;EACrD45B,UAAAA,KAAK,EAAE4rH,aAD8C;EAErDruH,UAAAA,WAAW,EAAE,IAFwC;EAGrDD,UAAAA,OAAO,EAAEA;EAH4C,SAAhC,CAAvB,CAjBQ;;EAuBR6vF,QAAAA,IAAI,CAACu9B,qBAAL,CAA2Bx5I,GAA3B,CAA+B,IAAIuxI,SAAO,CAAC1yJ,IAAZ,CAAiBy7J,gBAAjB,EAAmCK,gBAAnC,CAA/B;EACD;;EAED,aAAO,IAAP;EACD,KA1WM;EA2WPC,IAAAA,YAAY,EAAE,SAASA,YAAT,CAAsBvqG,KAAtB,EAA6B;EACzC,UAAI+/F,UAAU,GAAGrsI,SAAS,CAACxG,MAAV,GAAmB,CAAnB,IAAwBwG,SAAS,CAAC,CAAD,CAAT,KAAiBxH,SAAzC,GAAqDwH,SAAS,CAAC,CAAD,CAA9D,GAAoE,YAAY;EAC/F,eAAO,IAAP;EACD,OAFD;EAGA,UAAI,CAACssC,KAAK,CAACujF,WAAX,EAAwB,OAAO,IAAP,CAJiB;;EAMzC,UAAIinB,MAAM,GAAG,SAASC,SAAT,CAAmB1lB,GAAnB,EAAwB;EACnC,YAAIylB,MAAM,GAAG,EAAb;;EAEA,YAAIzlB,GAAG,CAAC77G,QAAR,EAAkB;EAChB67G,UAAAA,GAAG,CAAC77G,QAAJ,CAAaE,kBAAb;EACA,cAAIX,GAAG,GAAG,IAAIy4H,SAAO,CAAC15J,IAAZ,EAAV;EACAihC,UAAAA,GAAG,CAAChZ,IAAJ,CAASs1H,GAAG,CAAC77G,QAAJ,CAAaC,WAAtB,EAAmCrM,YAAnC,CAAgDioH,GAAG,CAACt/G,WAApD;EACA+kI,UAAAA,MAAM,CAACn+I,IAAP,CAAYoc,GAAZ;EACD;;EAED,eAAO+hI,MAAM,CAACz5D,MAAP,CAAc7lB,KAAd,CAAoBs/E,MAApB,EAA4BzkB,oBAAkB,CAAC,CAAChB,GAAG,CAACz7G,QAAJ,IAAgB,EAAjB,EAAqBwtC,MAArB,CAA4B,UAAUiuE,GAAV,EAAe;EAC/F,iBAAO,CAACA,GAAG,CAAClY,cAAJ,CAAmB,gBAAnB,CAAD,IAAyCkY,GAAG,CAAC2lB,cAAJ,KAAuB,MAAvB,IAAiC3K,UAAU,CAAChb,GAAG,CAAC4lB,MAAL,CAA3F;EACD,SAFqD;EAAA,UAGpD/qH,GAHoD,CAGhD6qH,SAHgD,CAAD,CAA9C,CAAP;EAID,OAdY,CAcXzqG,KAAK,CAAC6pG,UAdK,CAAb;;EAgBA,UAAI,CAACW,MAAM,CAACt9I,MAAZ,EAAoB,OAAO,IAAP,CAtBqB;;EAwBzC,aAAOkN,MAAM,CAACkxB,MAAP,CAAc4/B,KAAd,CAAoB9wD,MAApB,EAA4B2rH,oBAAkB,CAAC,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgBnmG,GAAhB,CAAoB,UAAUzsB,CAAV,EAAa;EACrF,eAAO40H,iBAAe,CAAC,EAAD,EAAK50H,CAAL,EAAQ,CAACjF,GAAG,CAACs8I,MAAD,EAAS,UAAUI,EAAV,EAAc;EACvD,iBAAOA,EAAE,CAAC18I,GAAH,CAAOiF,CAAP,CAAP;EACD,SAFiC,CAAJ,EAE1BhF,GAAG,CAACq8I,MAAD,EAAS,UAAUI,EAAV,EAAc;EAC5B,iBAAOA,EAAE,CAACz8I,GAAH,CAAOgF,CAAP,CAAP;EACD,SAFM,CAFuB,CAAR,CAAtB;EAKD,OANqD,CAAD,CAA9C,CAAP;EAOD;EA1YM,GA3Pc;EAuoBvBuvH,EAAAA,SAAS,EAAE,SAASA,SAAT,GAAqB;EAC9B,WAAO;EACL6f,MAAAA,aAAa,EAAEsI,eAAe,GAAGnzH,KAAlB,CAAwB,MAAxB,EAAgCozH,SAAS,EAAzC,EAA6CpzH,KAA7C,CAAmD,QAAnD,EAA6DqzH,aAAa,EAA1E,EAA8ErzH,KAA9E,CAAoF,QAApF,EAA8FszH,WAAW,EAAzG,EAA6GtzH,KAA7G,CAAmH,WAAnH,EAAgI,IAAhI,EAAsIud,IAAtI,EADV;EAELmtG,MAAAA,aAAa,EAAE;EAFV,KAAP;EAID,GA5oBsB;EA6oBvBz6F,EAAAA,IAAI,EAAE,SAASA,IAAT,CAAcsjG,QAAd,EAAwBjrG,KAAxB,EAA+B;EACnC;EACAA,IAAAA,KAAK,CAAC6pG,UAAN,GAAmBoB,QAAnB;EACD,GAhpBsB;EAipBvBzpI,EAAAA,MAAM,EAAE,SAASA,MAAT,CAAgBw+B,KAAhB,EAAuBwjF,YAAvB,EAAqC;EAC3C,QAAI0nB,iBAAiB,GAAG,SAASA,iBAAT,CAA2BC,QAA3B,EAAqC;EAC3D,aAAOA,QAAQ,CAACpK,IAAT,CAAc,UAAUj+H,CAAV,EAAa;EAChC,eAAO0gH,YAAY,CAAC3W,cAAb,CAA4B/pG,CAA5B,CAAP;EACD,OAFM,CAAP;EAGD,KAJD;;EAMAk9B,IAAAA,KAAK,CAACoiG,aAAN,GAAsB,KAAtB,CAP2C;;EAS3CpiG,IAAAA,KAAK,CAAChlC,QAAN;;EAEA,QAAIglC,KAAK,CAACmjG,eAAN,KAA0B,IAA1B,IAAkC+H,iBAAiB,CAAC,CAAC,iBAAD,EAAoB,WAApB,EAAiC,WAAjC,CAAD,CAAvD,EAAwG;EACtG;EACAxL,MAAAA,gBAAgB,CAAC1/F,KAAK,CAACmiG,SAAN,CAAgB76B,KAAjB,EAAwBs/B,OAAU,CAAC5mG,KAAK,CAACmjG,eAAP,CAAlC,EAA2DnjG,KAAK,CAACkjG,SAAjE,CAAhB;EACD;;EAED,QAAIljG,KAAK,CAAC4jG,eAAN,KAA0B,IAA1B,IAAkCsH,iBAAiB,CAAC,CAAC,iBAAD,EAAoB,WAApB,EAAiC,WAAjC,CAAD,CAAvD,EAAwG;EACtG;EACAxL,MAAAA,gBAAgB,CAAC1/F,KAAK,CAACmiG,SAAN,CAAgB72B,KAAjB,EAAwBs7B,OAAU,CAAC5mG,KAAK,CAAC4jG,eAAP,CAAlC,EAA2D5jG,KAAK,CAAC2jG,SAAjE,CAAhB;EACD,KAnB0C;;;EAsB3C,QAAI3jG,KAAK,CAAC2lG,aAAN,IAAuBuF,iBAAiB,CAAC,CAAC,WAAD,EAAc,iBAAd,EAAiC,uBAAjC,EAA0D,SAA1D,EAAqE,WAArE,EAAkF,gBAAlF,EAAoG,aAApG,EAAmH,gBAAnH,EAAqI,aAArI,CAAD,CAA5C,EAAmM;EACjM,UAAIE,oBAAoB,GAAGxE,OAAU,CAAC5mG,KAAK,CAACsjG,eAAP,CAArC;EACA,UAAI+H,0BAA0B,GAAGzE,OAAU,CAAC5mG,KAAK,CAACujG,qBAAP,CAA3C;EACA,UAAI+H,WAAW,GAAG1E,OAAU,CAAC5mG,KAAK,CAACgjG,OAAP,CAA5B;EACA,UAAIuI,aAAa,GAAG3E,OAAU,CAAC5mG,KAAK,CAACkjG,SAAP,CAA9B;EACA,UAAIsI,kBAAkB,GAAG5E,OAAU,CAAC5mG,KAAK,CAACqjG,cAAP,CAAnC;EACA,UAAIoI,gBAAgB,GAAG,EAAvB,CANiM;;EAQjM,UAAIC,eAAe,GAAG,EAAtB,CARiM;;EAUjM1M,MAAAA,WAAW,CAACh/F,KAAK,CAACmiG,SAAN,CAAgB76B,KAAhB,CAAsBxwD,MAAtB,CAA6B00F,kBAA7B,CAAD,EAAmDxrG,KAAK,CAAC6pG,UAAzD,EAAqE;EAC9EzgB,QAAAA,KAAK,EAAEppF,KAAK,CAAC2lG,aAAN,IAAuBuF,iBAAiB,CAAC;EAChD,yBADgD,EAC7B,uBAD6B,CAAD,CAD+B;EAG9EhM,QAAAA,SAAS,EAAE,SAASA,SAAT,CAAmBna,GAAnB,EAAwB;EACjC,iBAAOA,GAAG,CAAC2lB,cAAJ,KAAuB,MAA9B;EACD,SAL6E;EAM9E5gB,QAAAA,SAAS,EAAE,SAASA,SAAT,CAAmBt2B,IAAnB,EAAyB;EAClC,cAAIm4C,SAAS,GAAGP,oBAAoB,CAAC53C,IAAD,CAApC;EACA,cAAIo4C,SAAS,GAAGP,0BAA0B,CAAC73C,IAAD,CAA1C;;EAEA,cAAIm4C,SAAS,IAAI3rG,KAAK,CAACsjG,eAAN,KAA0BqI,SAA3C,EAAsD;EACpD;EACAA,YAAAA,SAAS,GAAGA,SAAS,CAACn8I,KAAV,EAAZ;EACD;;EAED,cAAIu1H,GAAJ;;EAEA,cAAI4mB,SAAS,IAAI,CAACC,SAAlB,EAA6B;EAC3B7mB,YAAAA,GAAG,GAAG4mB,SAAN;EACD,WAFD,MAEO;EACL;EACA5mB,YAAAA,GAAG,GAAG,IAAImc,SAAO,CAAC1yJ,IAAZ,EAAN;EACAu2I,YAAAA,GAAG,CAAC8mB,iBAAJ,GAAwB,IAAxB;;EAEA,gBAAIF,SAAS,IAAIC,SAAjB,EAA4B;EAC1B7mB,cAAAA,GAAG,CAACp1H,GAAJ,CAAQg8I,SAAR,EAD0B;EAE3B;EACF;;EAED5mB,UAAAA,GAAG,CAAC2lB,cAAJ,GAAqB,MAArB,CAvBkC;;EAyBlC,iBAAO3lB,GAAP;EACD,SAhC6E;EAiC9EiF,QAAAA,SAAS,EAAE,SAASA,SAAT,CAAmBjF,GAAnB,EAAwBvxB,IAAxB,EAA8B;EACvC,cAAIuxB,GAAG,CAAC8mB,iBAAR,EAA2B;EACzB;EACA,gBAAIxnB,GAAG,GAAGinB,WAAW,CAAC93C,IAAD,CAAX,IAAqB,CAA/B;EACA,gBAAI7sF,MAAM,GAAGvZ,IAAI,CAAC2iH,IAAL,CAAUsU,GAAV,IAAiBrkF,KAAK,CAAC+iG,WAApC;EACA,gBAAIiH,WAAW,GAAGhqG,KAAK,CAACijG,cAAxB;;EAEA,gBAAI,CAACle,GAAG,CAAC77G,QAAJ,CAAand,IAAb,CAAkB4oD,KAAlB,CAAwB,2BAAxB,CAAD,IAAyDowE,GAAG,CAAC77G,QAAJ,CAAa4P,UAAb,CAAwBnS,MAAxB,KAAmCA,MAA5F,IAAsGo+G,GAAG,CAAC77G,QAAJ,CAAa4P,UAAb,CAAwB0T,aAAxB,KAA0Cw9G,WAApJ,EAAiK;EAC/J,kBAAI,CAACyB,gBAAgB,CAAC5+B,cAAjB,CAAgCwX,GAAhC,CAAL,EAA2C;EACzConB,gBAAAA,gBAAgB,CAACpnB,GAAD,CAAhB,GAAwB,IAAI6c,SAAO,CAACE,oBAAZ,CAAiCz6H,MAAjC,EAAyCqjI,WAAzC,EAAsDA,WAAtD,CAAxB;EACD;;EAEDjlB,cAAAA,GAAG,CAAC77G,QAAJ,CAAa/M,OAAb;EACA4oH,cAAAA,GAAG,CAAC77G,QAAJ,GAAeuiI,gBAAgB,CAACpnB,GAAD,CAA/B;EACD;;EAED,gBAAI5lG,KAAK,GAAG8sH,aAAa,CAAC/3C,IAAD,CAAzB;EACA,gBAAI62C,aAAa,GAAG,IAAInJ,SAAO,CAAC70J,KAAZ,CAAkB+yJ,YAAY,CAAC3gH,KAAK,IAAI,SAAV,CAA9B,CAApB;EACA,gBAAI1C,OAAO,GAAGikB,KAAK,CAACojG,WAAN,GAAoB9D,UAAU,CAAC7gH,KAAD,CAA5C;;EAEA,gBAAIsmG,GAAG,CAAC3rG,QAAJ,CAAartB,IAAb,KAAsB,qBAAtB,IAA+C,CAACg5H,GAAG,CAAC3rG,QAAJ,CAAaqF,KAAb,CAAmBt8B,MAAnB,CAA0BkoJ,aAA1B,CAAhD,IAA4FtlB,GAAG,CAAC3rG,QAAJ,CAAa2C,OAAb,KAAyBA,OAAzH,EAAkI;EAChI,kBAAI,CAAC2vH,eAAe,CAAC7+B,cAAhB,CAA+BpuF,KAA/B,CAAL,EAA4C;EAC1CitH,gBAAAA,eAAe,CAACjtH,KAAD,CAAf,GAAyB,IAAIyiH,SAAO,CAACr8I,mBAAZ,CAAgC;EACvD45B,kBAAAA,KAAK,EAAE4rH,aADgD;EAEvDruH,kBAAAA,WAAW,EAAE,IAF0C;EAGvDD,kBAAAA,OAAO,EAAEA;EAH8C,iBAAhC,CAAzB;EAKD;;EAEDgpG,cAAAA,GAAG,CAAC3rG,QAAJ,CAAajd,OAAb;EACA4oH,cAAAA,GAAG,CAAC3rG,QAAJ,GAAesyH,eAAe,CAACjtH,KAAD,CAA9B;EACD;EACF;EACF;EAlE6E,OAArE,CAAX;EAoED,KApG0C;;;EAuG3C,QAAIuhB,KAAK,CAAC2lG,aAAN,IAAuBuF,iBAAiB,CAAC,CAAC,WAAD,EAAc,iBAAd,EAAiC,uBAAjC,EAA0D,cAA1D,EAA0E,WAA1E,EAAuF,WAAvF,EAAoG,gBAApG,EAAsH,gBAAtH,EAAwI,aAAxI,EAAuJ,4BAAvJ,EAAqL,2BAArL,EAAkN,gCAAlN,EAAoP,0BAApP,EAAgR,8BAAhR,EAAgT,8BAAhT,EAAgV,mCAAhV,CAAD,CAA5C,EAAoa;EACla,UAAIY,qBAAqB,GAAGlF,OAAU,CAAC5mG,KAAK,CAACmkG,eAAP,CAAtC;;EAEA,UAAI4H,2BAA2B,GAAGnF,OAAU,CAAC5mG,KAAK,CAACokG,qBAAP,CAA5C;;EAEA,UAAI4H,sBAAsB,GAAGpF,OAAU,CAAC5mG,KAAK,CAACkkG,YAAP,CAAvC;;EAEA,UAAI+H,mBAAmB,GAAGrF,OAAU,CAAC5mG,KAAK,CAAC0jG,cAAP,CAApC;;EAEA,UAAIwI,cAAc,GAAGtF,OAAU,CAAC5mG,KAAK,CAAC2jG,SAAP,CAA/B;;EAEA,UAAIwI,aAAa,GAAGvF,OAAU,CAAC5mG,KAAK,CAAC8jG,SAAP,CAA9B;EACA,UAAIsI,kBAAkB,GAAG,EAAzB,CAZka;;EAcla,UAAIC,oBAAoB,GAAG,EAA3B,CAdka;;EAgBla,UAAIC,kBAAkB,GAAG,EAAzB,CAhBka;;EAkBla,UAAIC,YAAY,GAAGvsG,KAAK,CAACmiG,SAAN,CAAgB72B,KAAhB,CAAsBx0D,MAAtB,CAA6Bm1F,mBAA7B,CAAnB,CAlBka;;EAoBlajN,MAAAA,WAAW,CAACuN,YAAD,EAAevsG,KAAK,CAAC6pG,UAArB,EAAiC;EAC1C7gB,QAAAA,WAAW,EAAE,WAD6B;EAE1CI,QAAAA,KAAK,EAAEppF,KAAK,CAAC2lG,aAAN,IAAuBuF,iBAAiB,CAAC;EAChD,yBADgD,EAC7B,uBAD6B,EACJ,WADI,CAAD,CAFL;EAI1ChM,QAAAA,SAAS,EAAE,SAASA,SAAT,CAAmBna,GAAnB,EAAwB;EACjC,iBAAOA,GAAG,CAAC2lB,cAAJ,KAAuB,MAA9B;EACD,SANyC;EAO1C5gB,QAAAA,SAAS,EAAE,SAASA,SAAT,CAAmBle,IAAnB,EAAyB;EAClC,cAAI+/B,SAAS,GAAGG,qBAAqB,CAAClgC,IAAD,CAArC;;EAEA,cAAIggC,SAAS,GAAGG,2BAA2B,CAACngC,IAAD,CAA3C;;EAEA,cAAI+/B,SAAS,IAAI3rG,KAAK,CAACmkG,eAAN,KAA0BwH,SAA3C,EAAsD;EACpD;EACAA,YAAAA,SAAS,GAAGA,SAAS,CAACn8I,KAAV,EAAZ;EACD;;EAED,cAAIg9I,UAAJ;;EAEA,cAAI,CAACb,SAAD,IAAcC,SAAlB,EAA6B;EAC3B;EACA,gBAAIa,WAAW,GAAG,CAAC,CAACN,aAAa,CAACvgC,IAAD,CAAjC;;EAEA,gBAAI6gC,WAAJ,EAAiB;EACfD,cAAAA,UAAU,GAAG,IAAItL,SAAO,CAAC1yJ,IAAZ,EAAb;EACD,aAFD,MAEO;EACL;EACA,kBAAIk+J,YAAY,GAAG,IAAIxL,SAAO,CAAC5zJ,cAAZ,EAAnB;EACAo/J,cAAAA,YAAY,CAAC/K,cAAD,CAAZ,CAA6B,UAA7B,EAAyC,IAAIT,SAAO,CAACz0J,eAAZ,CAA4B,IAAI+5C,YAAJ,CAAiB,IAAI,CAArB,CAA5B,EAAqD,CAArD,CAAzC;EACAgmH,cAAAA,UAAU,GAAG,IAAItL,SAAO,CAACrgJ,IAAZ,CAAiB6rJ,YAAjB,CAAb;EACD;EACF;;EAED,cAAI3nB,GAAJ;;EAEA,cAAI,CAAC4mB,SAAL,EAAgB;EACd5mB,YAAAA,GAAG,GAAGynB,UAAN;EACAznB,YAAAA,GAAG,CAAC8mB,iBAAJ,GAAwB,IAAxB;EACD,WAHD,MAGO;EACL,gBAAI,CAACD,SAAL,EAAgB;EACd;EACA7mB,cAAAA,GAAG,GAAG4mB,SAAN;EACD,aAHD,MAGO;EACL;EACA5mB,cAAAA,GAAG,GAAG,IAAImc,SAAO,CAACpjJ,KAAZ,EAAN;EACAinI,cAAAA,GAAG,CAAC8mB,iBAAJ,GAAwB,IAAxB;EACA9mB,cAAAA,GAAG,CAACp1H,GAAJ,CAAQ68I,UAAR;EACAznB,cAAAA,GAAG,CAACp1H,GAAJ,CAAQg8I,SAAR;EACD;EACF;;EAED5mB,UAAAA,GAAG,CAAC9vG,WAAJ,GAAkB,EAAlB,CA5CkC;;EA8ClC8vG,UAAAA,GAAG,CAAC2lB,cAAJ,GAAqB,MAArB,CA9CkC;;EAgDlC,iBAAO3lB,GAAP;EACD,SAxDyC;EAyD1CiF,QAAAA,SAAS,EAAE,SAASA,SAAT,CAAmB2iB,MAAnB,EAA2B/gC,IAA3B,EAAiC;EAC1C,cAAI+gC,MAAM,CAACd,iBAAX,EAA8B;EAC5B;EACA;EACA,gBAAI9mB,GAAG,GAAG4nB,MAAM,CAACrjI,QAAP,CAAgBpc,MAAhB,GAAyBy/I,MAAM,CAACrjI,QAAP,CAAgB,CAAhB,CAAzB,GAA8CqjI,MAAxD;EACA,gBAAI7I,SAAS,GAAG12I,IAAI,CAAC+D,IAAL,CAAUg7I,aAAa,CAACvgC,IAAD,CAAb,GAAsB,EAAhC,IAAsC,EAAtD;EACA,gBAAI6gC,WAAW,GAAG,CAAC,CAAC3I,SAApB;;EAEA,gBAAI2I,WAAJ,EAAiB;EACf,kBAAIt1I,CAAC,GAAG2sI,SAAS,GAAG,CAApB;EACA,kBAAIkG,WAAW,GAAGhqG,KAAK,CAAC+jG,cAAxB;;EAEA,kBAAI,CAAChf,GAAG,CAAC77G,QAAJ,CAAand,IAAb,CAAkB4oD,KAAlB,CAAwB,6BAAxB,CAAD,IAA2DowE,GAAG,CAAC77G,QAAJ,CAAa4P,UAAb,CAAwB4wD,SAAxB,KAAsCvyE,CAAjG,IAAsG4tH,GAAG,CAAC77G,QAAJ,CAAa4P,UAAb,CAAwB8wD,cAAxB,KAA2CogE,WAArJ,EAAkK;EAChK,oBAAI,CAACoC,kBAAkB,CAACv/B,cAAnB,CAAkCi3B,SAAlC,CAAL,EAAmD;EACjD,sBAAI56H,QAAQ,GAAG,IAAIg4H,SAAO,CAACG,sBAAZ,CAAmClqI,CAAnC,EAAsCA,CAAtC,EAAyC,CAAzC,EAA4C6yI,WAA5C,EAAyD,CAAzD,EAA4D,KAA5D,CAAf;EACA9gI,kBAAAA,QAAQ,CAAC04H,cAAD,CAAR,CAAyB,IAAIV,SAAO,CAAC93J,OAAZ,GAAsB+nC,eAAtB,CAAsC,CAAtC,EAAyC,IAAI,CAA7C,EAAgD,CAAhD,CAAzB;EACAjI,kBAAAA,QAAQ,CAAC04H,cAAD,CAAR,CAAyB,IAAIV,SAAO,CAAC93J,OAAZ,GAAsBgoC,aAAtB,CAAoChkB,IAAI,CAACC,EAAL,GAAU,CAA9C,CAAzB;EACA++I,kBAAAA,kBAAkB,CAACtI,SAAD,CAAlB,GAAgC56H,QAAhC;EACD;;EAED67G,gBAAAA,GAAG,CAAC77G,QAAJ,CAAa/M,OAAb;EACA4oH,gBAAAA,GAAG,CAAC77G,QAAJ,GAAekjI,kBAAkB,CAACtI,SAAD,CAAjC;EACD;EACF;;EAED,gBAAIh/E,cAAc,GAAGknF,sBAAsB,CAACpgC,IAAD,CAA3C;;EAEA,gBAAI9mD,cAAJ,EAAoB;EAClBigE,cAAAA,GAAG,CAAC3rG,QAAJ,GAAe0rC,cAAf;EACD,aAFD,MAEO;EACL,kBAAIrmC,KAAK,GAAGytH,cAAc,CAACtgC,IAAD,CAA1B;;EAEA,kBAAIy+B,aAAa,GAAG,IAAInJ,SAAO,CAAC70J,KAAZ,CAAkB+yJ,YAAY,CAAC3gH,KAAK,IAAI,SAAV,CAA9B,CAApB;EACA,kBAAI1C,OAAO,GAAGikB,KAAK,CAAC6jG,WAAN,GAAoBvE,UAAU,CAAC7gH,KAAD,CAA5C;EACA,kBAAImuH,YAAY,GAAGH,WAAW,GAAG,qBAAH,GAA2B,mBAAzD;;EAEA,kBAAI1nB,GAAG,CAAC3rG,QAAJ,CAAartB,IAAb,KAAsB6gJ,YAAtB,IAAsC,CAAC7nB,GAAG,CAAC3rG,QAAJ,CAAaqF,KAAb,CAAmBt8B,MAAnB,CAA0BkoJ,aAA1B,CAAvC,IAAmFtlB,GAAG,CAAC3rG,QAAJ,CAAa2C,OAAb,KAAyBA,OAAhH,EAAyH;EACvH,oBAAI8wH,aAAa,GAAGJ,WAAW,GAAGJ,oBAAH,GAA0BC,kBAAzD;;EAEA,oBAAI,CAACO,aAAa,CAAChgC,cAAd,CAA6BpuF,KAA7B,CAAL,EAA0C;EACxCouH,kBAAAA,aAAa,CAACpuH,KAAD,CAAb,GAAuB,IAAIyiH,SAAO,CAAC0L,YAAD,CAAX,CAA0B;EAC/CnuH,oBAAAA,KAAK,EAAE4rH,aADwC;EAE/CruH,oBAAAA,WAAW,EAAED,OAAO,GAAG,CAFwB;EAG/CA,oBAAAA,OAAO,EAAEA,OAHsC;EAI/CU,oBAAAA,UAAU,EAAEV,OAAO,IAAI,CAJwB;;EAAA,mBAA1B,CAAvB;EAOD;;EAEDgpG,gBAAAA,GAAG,CAAC3rG,QAAJ,CAAajd,OAAb;EACA4oH,gBAAAA,GAAG,CAAC3rG,QAAJ,GAAeyzH,aAAa,CAACpuH,KAAD,CAA5B;EACD;EACF;EACF;EACF;EA/GyC,OAAjC,CAAX,CApBka;;EAsIla,UAAIuhB,KAAK,CAACskG,0BAAN,IAAoC9gB,YAAY,CAAC3W,cAAb,CAA4B,4BAA5B,CAAxC,EAAmG;EACjG,YAAIk7B,mBAAmB,GAAGnB,OAAU,CAAC5mG,KAAK,CAACskG,0BAAP,CAApC;EACA,YAAIwI,kBAAkB,GAAGlG,OAAU,CAAC5mG,KAAK,CAACukG,yBAAP,CAAnC;EACAvF,QAAAA,WAAW,CAACuN,YAAY,CAACz1F,MAAb,CAAoBixF,mBAApB,CAAD,EAA2C/nG,KAAK,CAAC6pG,UAAjD,EAA6D;EACtE7gB,UAAAA,WAAW,EAAE,YADyD;EAEtEkW,UAAAA,SAAS,EAAE,SAASA,SAAT,CAAmBna,GAAnB,EAAwB;EACjC,mBAAOA,GAAG,CAAC0kB,kBAAJ,KAA2B,OAAlC;EACD,WAJqE;EAKtE3f,UAAAA,SAAS,EAAE,SAASA,SAAT,GAAqB;EAC9B,gBAAI/E,GAAG,GAAG,IAAImc,SAAO,CAAC1yJ,IAAZ,CAAiB0d,SAAjB,EAA4B,IAAIg1I,SAAO,CAACr8I,mBAAZ,CAAgC;EACpEm3B,cAAAA,WAAW,EAAE;EADuD,aAAhC,CAA5B,CAAV;EAGA+oG,YAAAA,GAAG,CAAC0kB,kBAAJ,GAAyB,OAAzB,CAJ8B;;EAM9B,mBAAO1kB,GAAP;EACD,WAZqE;EAatEiF,UAAAA,SAAS,EAAE,SAASA,SAAT,CAAmBjF,GAAnB,EAAwBnZ,IAAxB,EAA8B;EACvC,gBAAIy8B,WAAW,GAAGN,mBAAmB,CAACn8B,IAAD,CAArC;EACA,gBAAIo+B,WAAW,GAAGhqG,KAAK,CAACykG,8BAAxB;;EAEA,gBAAI,CAAC1f,GAAG,CAAC77G,QAAJ,CAAand,IAAb,CAAkB4oD,KAAlB,CAAwB,yBAAxB,CAAD,IAAuDowE,GAAG,CAAC77G,QAAJ,CAAa4P,UAAb,CAAwB/pB,MAAxB,KAAmCs5I,WAA1F,IAAyGtjB,GAAG,CAAC77G,QAAJ,CAAa4P,UAAb,CAAwB8wD,cAAxB,KAA2CogE,WAAxJ,EAAqK;EACnK,kBAAI+C,YAAY,GAAG,IAAI7L,SAAO,CAACK,kBAAZ,CAA+B8G,WAAW,GAAG,IAA7C,EAAmDA,WAAnD,EAAgE2B,WAAhE,CAAnB,CADmK;;EAGnK+C,cAAAA,YAAY,CAACh1I,SAAb,CAAuB,CAAvB,EAA0BswI,WAAW,GAAG,CAAxC,EAA2C,CAA3C;EACA0E,cAAAA,YAAY,CAACp3H,OAAb,CAAqBvoB,IAAI,CAACC,EAAL,GAAU,CAA/B;EACA03H,cAAAA,GAAG,CAAC77G,QAAJ,CAAa/M,OAAb;EACA4oH,cAAAA,GAAG,CAAC77G,QAAJ,GAAe6jI,YAAf;EACD;;EAEDhoB,YAAAA,GAAG,CAAC3rG,QAAJ,CAAaqF,KAAb,GAAqB,IAAIyiH,SAAO,CAAC70J,KAAZ,CAAkBygK,kBAAkB,CAAClhC,IAAD,CAAlB,IAA4BsgC,cAAc,CAACtgC,IAAD,CAA1C,IAAoD,SAAtE,CAArB;EACAmZ,YAAAA,GAAG,CAAC3rG,QAAJ,CAAa2C,OAAb,GAAuBikB,KAAK,CAAC6jG,WAAN,GAAoB,CAA3C;EACD;EA5BqE,SAA7D,CAAX;EA8BD,OAvKia;;;EA0Kla,UAAI7jG,KAAK,CAAC0kG,wBAAN,IAAkClhB,YAAY,CAAC3W,cAAb,CAA4B,0BAA5B,CAAtC,EAA+F;EAC7F,YAAImgC,iBAAiB,GAAGpG,OAAU,CAAC5mG,KAAK,CAAC0kG,wBAAP,CAAlC;EACA,YAAIoF,qBAAqB,GAAGlD,OAAU,CAAC5mG,KAAK,CAAC4kG,4BAAP,CAAtC;EACA,YAAIuF,qBAAqB,GAAGvD,OAAU,CAAC5mG,KAAK,CAAC6kG,4BAAP,CAAtC;EACA,YAAIoI,iBAAiB,GAAG,EAAxB,CAJ6F;;EAM7F,YAAIC,kBAAkB,GAAG,EAAzB,CAN6F;;EAQ7FlO,QAAAA,WAAW,CAACuN,YAAY,CAACz1F,MAAb,CAAoBk2F,iBAApB,CAAD,EAAyChtG,KAAK,CAAC6pG,UAA/C,EAA2D;EACpE7gB,UAAAA,WAAW,EAAE,cADuD;EAEpEkW,UAAAA,SAAS,EAAE,SAASA,SAAT,CAAmBna,GAAnB,EAAwB;EACjC,mBAAOA,GAAG,CAAC0kB,kBAAJ,KAA2B,SAAlC;EACD,WAJmE;EAKpE3f,UAAAA,SAAS,EAAE,SAASA,SAAT,GAAqB;EAC9B,gBAAI/E,GAAG,GAAG,IAAImc,SAAO,CAACpjJ,KAAZ,EAAV;EACAinI,YAAAA,GAAG,CAAC0kB,kBAAJ,GAAyB,SAAzB,CAF8B;;EAI9B,mBAAO1kB,GAAP;EACD,WAVmE;EAWpEiF,UAAAA,SAAS,EAAE,SAASA,SAAT,CAAmBjF,GAAnB,EAAwBnZ,IAAxB,EAA8B;EACvC,gBAAIuhC,UAAU,GAAG//I,IAAI,CAACgE,KAAL,CAAWhE,IAAI,CAACwE,GAAL,CAASo7I,iBAAiB,CAACphC,IAAD,CAA1B,CAAX,CAAjB;EACA,gBAAIwhC,SAAS,GAAG,CAAC,CAACroB,GAAG,CAACz7G,QAAJ,CAAapc,MAAf,IAAyB63H,GAAG,CAACz7G,QAAJ,CAAa,CAAb,CAAzC;EACA,gBAAIygI,OAAO,GAAG38I,IAAI,CAAC+D,IAAL,CAAU24I,qBAAqB,CAACl+B,IAAD,CAArB,GAA8B,EAAxC,IAA8C,EAA9C,GAAmD,CAAjE;EACA,gBAAIo+B,WAAW,GAAGhqG,KAAK,CAAC8kG,iCAAxB;EACA,gBAAImF,gBAAJ;;EAEA,gBAAImD,SAAS,IAAIA,SAAS,CAAClkI,QAAV,CAAmB4P,UAAnB,CAA8BnS,MAA9B,KAAyCojI,OAAtD,IAAiEqD,SAAS,CAAClkI,QAAV,CAAmB4P,UAAnB,CAA8B0T,aAA9B,KAAgDw9G,WAArH,EAAkI;EAChIC,cAAAA,gBAAgB,GAAGmD,SAAS,CAAClkI,QAA7B;EACD,aAFD,MAEO;EACL,kBAAI,CAACgkI,kBAAkB,CAACrgC,cAAnB,CAAkCk9B,OAAlC,CAAL,EAAiD;EAC/CmD,gBAAAA,kBAAkB,CAACnD,OAAD,CAAlB,GAA8B,IAAI7I,SAAO,CAACE,oBAAZ,CAAiC2I,OAAjC,EAA0CC,WAA1C,EAAuDA,WAAvD,CAA9B;EACD;;EAEDC,cAAAA,gBAAgB,GAAGiD,kBAAkB,CAACnD,OAAD,CAArC;EACAqD,cAAAA,SAAS,IAAIA,SAAS,CAAClkI,QAAV,CAAmB/M,OAAnB,EAAb;EACD;;EAED,gBAAIiuI,WAAW,GAAGD,qBAAqB,CAACv+B,IAAD,CAArB,IAA+BsgC,cAAc,CAACtgC,IAAD,CAA7C,IAAuD,SAAzE;EACA,gBAAIy+B,aAAa,GAAG,IAAInJ,SAAO,CAAC70J,KAAZ,CAAkB+yJ,YAAY,CAACgL,WAAD,CAA9B,CAApB;EACA,gBAAIruH,OAAO,GAAGikB,KAAK,CAAC6jG,WAAN,GAAoB,CAAlC;EACA,gBAAIyG,gBAAJ;;EAEA,gBAAI8C,SAAS,IAAIA,SAAS,CAACh0H,QAAV,CAAmBqF,KAAnB,CAAyBt8B,MAAzB,CAAgCkoJ,aAAhC,CAAb,IAA+D+C,SAAS,CAACh0H,QAAV,CAAmB2C,OAAnB,KAA+BA,OAAlG,EAA2G;EACzGuuH,cAAAA,gBAAgB,GAAG8C,SAAS,CAACh0H,QAA7B;EACD,aAFD,MAEO;EACL,kBAAI,CAAC6zH,iBAAiB,CAACpgC,cAAlB,CAAiCu9B,WAAjC,CAAL,EAAoD;EAClD6C,gBAAAA,iBAAiB,CAAC7C,WAAD,CAAjB,GAAiC,IAAIlJ,SAAO,CAACr8I,mBAAZ,CAAgC;EAC/D45B,kBAAAA,KAAK,EAAE4rH,aADwD;EAE/DruH,kBAAAA,WAAW,EAAE,IAFkD;EAG/DD,kBAAAA,OAAO,EAAEA;EAHsD,iBAAhC,CAAjC;EAKD;;EAEDuuH,cAAAA,gBAAgB,GAAG2C,iBAAiB,CAAC7C,WAAD,CAApC;EACAgD,cAAAA,SAAS,IAAIA,SAAS,CAACh0H,QAAV,CAAmBjd,OAAnB,EAAb;EACD,aApCsC;;;EAuCvC6iI,YAAAA,WAAW,CAACjZ,oBAAkB,CAAC,IAAI/pH,KAAJ,CAAUmxI,UAAV,CAAD,CAAlB,CAA0CvtH,GAA1C,CAA8C,UAAU6nF,CAAV,EAAa0N,GAAb,EAAkB;EAC1E,qBAAO;EACLA,gBAAAA,GAAG,EAAEA;EADA,eAAP;EAGD,aAJW,CAAD,EAIP4P,GAJO,EAIF;EACPoD,cAAAA,UAAU,EAAE,SAASA,UAAT,CAAoB9xH,CAApB,EAAuB;EACjC,uBAAOA,CAAC,CAAC8+G,GAAT;EACD,eAHM;EAIP2U,cAAAA,SAAS,EAAE,SAASA,SAAT,GAAqB;EAC9B,uBAAO,IAAIoX,SAAO,CAAC1yJ,IAAZ,CAAiBy7J,gBAAjB,EAAmCK,gBAAnC,CAAP;EACD,eANM;EAOPtgB,cAAAA,SAAS,EAAE,SAASA,SAAT,CAAmBjF,GAAnB,EAAwB;EACjCA,gBAAAA,GAAG,CAAC77G,QAAJ,GAAe+gI,gBAAf;EACAllB,gBAAAA,GAAG,CAAC3rG,QAAJ,GAAekxH,gBAAf;EACD;EAVM,aAJE,CAAX;EAgBD;EAlEmE,SAA3D,CAAX;EAoED;EACF;;EAEDtqG,IAAAA,KAAK,CAAC2lG,aAAN,GAAsB,KAAtB,CAhW2C;EAiW3C;;EAEA,QAAIuF,iBAAiB,CAAC,CAAC,WAAD,EAAc,QAAd,EAAwB,YAAxB,EAAsC,YAAtC,EAAoD,eAApD,EAAqE,aAArE,EAAoF,SAApF,EAA+F,eAA/F,EAAgH,kBAAhH,CAAD,CAArB,EAA4J;EAC1JlrG,MAAAA,KAAK,CAACoiG,aAAN,GAAsB,KAAtB,CAD0J;EAE1J;;EAEApiG,MAAAA,KAAK,CAACmiG,SAAN,CAAgB72B,KAAhB,CAAsBh1C,OAAtB,CAA8B,UAAUs1C,IAAV,EAAgB;EAC5CA,QAAAA,IAAI,CAACzwG,MAAL,GAAcywG,IAAI,CAAC5rE,KAAK,CAACwjG,UAAP,CAAlB;EACA53B,QAAAA,IAAI,CAAC/+G,MAAL,GAAc++G,IAAI,CAAC5rE,KAAK,CAACyjG,UAAP,CAAlB;EACD,OAHD,EAJ0J;;EAS1J,UAAI4C,OAAO,GAAGrmG,KAAK,CAAC0iG,WAAN,KAAsB,QAApC;EACA,UAAI+D,MAAJ;;EAEA,UAAIJ,OAAJ,EAAa;EACX;EACA,SAACI,MAAM,GAAGzmG,KAAK,CAACuiG,aAAhB,EAA+BttG,IAA/B,GAAsC3iC,KAAtC,CAA4C,CAA5C;EAAA,SACC28G,aADD,CACejvE,KAAK,CAACivE,aADrB,EACoC3H,KADpC,CAC0CtnE,KAAK,CAACmiG,SAAN,CAAgB76B,KAD1D,EAFW;;EAKX,YAAI+lC,SAAS,GAAGrtG,KAAK,CAACuiG,aAAN,CAAoB7qH,KAApB,CAA0B,MAA1B,CAAhB;;EAEA,YAAI21H,SAAJ,EAAe;EACbA,UAAAA,SAAS,CAACx2H,EAAV,CAAa,UAAUxgB,CAAV,EAAa;EACxB,mBAAOA,CAAC,CAAC2pC,KAAK,CAACqrE,MAAP,CAAR;EACD,WAFD,EAEGC,KAFH,CAEStrE,KAAK,CAACmiG,SAAN,CAAgB72B,KAFzB;EAGD,SAXU;;;EAcX,YAAIo1B,UAAU,GAAG1gG,KAAK,CAACyiG,OAAN,IAAiB5C,YAAY,CAAC7/F,KAAK,CAACmiG,SAAP,EAAkB,UAAU3uC,IAAV,EAAgB;EAC9E,iBAAOA,IAAI,CAACxzD,KAAK,CAACqrE,MAAP,CAAX;EACD,SAF6C,EAE3C;EACD00B,UAAAA,UAAU,EAAE//F,KAAK,CAAC4iG,aADjB;EAED3C,UAAAA,WAAW,EAAEjgG,KAAK,CAAC8iG,UAAN,IAAoB52I;EAFhC,SAF2C,CAA9C;EAMA,YAAIohJ,QAAQ,GAAGlgJ,IAAI,CAACe,GAAL,CAAS+8D,KAAT,CAAe99D,IAAf,EAAqB24H,oBAAkB,CAAC3rH,MAAM,CAACqf,MAAP,CAAcinH,UAAU,IAAI,EAA5B,CAAD,CAAvC,CAAf;EACA,YAAIiC,gBAAgB,GAAG3iG,KAAK,CAAC2iG,gBAAN,IAA0B3iG,KAAK,CAACmiG,SAAN,CAAgB76B,KAAhB,CAAsBp6G,MAAtB,IAAgCogJ,QAAQ,IAAI,CAA5C,IAAiD5L,oBAAjD,IAAyE,CAAC,UAAD,EAAa,WAAb,EAA0Bt1I,OAA1B,CAAkC4zC,KAAK,CAACyiG,OAAxC,MAAqD,CAAC,CAAtD,GAA0D,GAA1D,GAAgE,CAAzI,CAAjD,CArBW;;EAuBX,YAAIziG,KAAK,CAACyiG,OAAV,EAAmB;EACjB,cAAI8K,MAAM,GAAG,SAASA,MAAT,CAAgBC,GAAhB,EAAqB/2I,MAArB,EAA6B;EACxC,mBAAO,UAAU+8F,IAAV,EAAgB;EACrB,qBAAO,CAACg6C,GAAD,GAAOthJ,SAAP,GAAmB,CAACw0I,UAAU,CAACltC,IAAI,CAACxzD,KAAK,CAACqrE,MAAP,CAAL,CAAV,GAAiCiiC,QAAQ,GAAG,CAA7C,IAAkD3K,gBAAlD,IAAsElsI,MAAM,GAAG,CAAC,CAAJ,GAAQ,CAApF,CAA1B;EACD,aAFD;EAGD,WAJD;;EAMA,cAAIg3I,IAAI,GAAGF,MAAM,CAAC,CAAC,IAAD,EAAO,IAAP,EAAanhJ,OAAb,CAAqB4zC,KAAK,CAACyiG,OAA3B,MAAwC,CAAC,CAA1C,EAA6CziG,KAAK,CAACyiG,OAAN,KAAkB,IAA/D,CAAjB;EACA,cAAIiL,IAAI,GAAGH,MAAM,CAAC,CAAC,IAAD,EAAO,IAAP,EAAanhJ,OAAb,CAAqB4zC,KAAK,CAACyiG,OAA3B,MAAwC,CAAC,CAA1C,EAA6CziG,KAAK,CAACyiG,OAAN,KAAkB,IAA/D,CAAjB;EACA,cAAIkL,IAAI,GAAGJ,MAAM,CAAC,CAAC,KAAD,EAAQ,MAAR,EAAgBnhJ,OAAhB,CAAwB4zC,KAAK,CAACyiG,OAA9B,MAA2C,CAAC,CAA7C,EAAgDziG,KAAK,CAACyiG,OAAN,KAAkB,MAAlE,CAAjB;EACAziG,UAAAA,KAAK,CAACmiG,SAAN,CAAgB76B,KAAhB,CAAsBxwD,MAAtB,CAA6B9W,KAAK,CAAC4iG,aAAnC,EAAkDtsE,OAAlD,CAA0D,UAAUk9B,IAAV,EAAgB;EACxEA,YAAAA,IAAI,CAACmc,EAAL,GAAU89B,IAAI,CAACj6C,IAAD,CAAd;EACAA,YAAAA,IAAI,CAACoc,EAAL,GAAU89B,IAAI,CAACl6C,IAAD,CAAd;EACAA,YAAAA,IAAI,CAACqc,EAAL,GAAU89B,IAAI,CAACn6C,IAAD,CAAd;EACD,WAJD;EAKD,SAtCU;;;EAyCXxzD,QAAAA,KAAK,CAACuiG,aAAN,CAAoB7qH,KAApB,CAA0B,WAA1B,EAAuC,CAAC,UAAD,EAAa,WAAb,EAA0BtrB,OAA1B,CAAkC4zC,KAAK,CAACyiG,OAAxC,MAAqD,CAAC,CAAtD,GAA0DmL,WAAW,CAAC,UAAUp6C,IAAV,EAAgB;EAC3H,cAAIq6C,SAAS,GAAGnN,UAAU,CAACltC,IAAI,CAACxzD,KAAK,CAACqrE,MAAP,CAAL,CAAV,IAAkC,CAAC,CAAnD;EACA,iBAAO,CAACrrE,KAAK,CAACyiG,OAAN,KAAkB,UAAlB,GAA+B6K,QAAQ,GAAGO,SAA1C,GAAsDA,SAAvD,IAAoElL,gBAA3E;EACD,SAH2G,CAAX,CAG9Fp7B,QAH8F,CAGrF,UAAU/T,IAAV,EAAgB;EAC1B,iBAAOxzD,KAAK,CAAC4iG,aAAN,CAAoBpvC,IAApB,IAA4B,CAA5B,GAAgC,CAAvC;EACD,SALgG,CAA1D,GAKlC,IALL;EAMD,OA/CD,MA+CO;EACL;EACA,YAAIs6C,MAAM,GAAGtM,MAAM,CAAC/jB,KAAP,EAAb;;EAEAz9E,QAAAA,KAAK,CAACmiG,SAAN,CAAgB76B,KAAhB,CAAsBhxC,OAAtB,CAA8B,UAAUk9B,IAAV,EAAgB;EAC5Cs6C,UAAAA,MAAM,CAAC96B,OAAP,CAAexf,IAAI,CAACxzD,KAAK,CAACqrE,MAAP,CAAnB;EACD,SAFD;EAGArrE,QAAAA,KAAK,CAACmiG,SAAN,CAAgB72B,KAAhB,CAAsBh1C,OAAtB,CAA8B,UAAUs1C,IAAV,EAAgB;EAC5CkiC,UAAAA,MAAM,CAAC76B,OAAP,CAAerH,IAAI,CAACzwG,MAApB,EAA4BywG,IAAI,CAAC/+G,MAAjC;EACD,SAFD;EAGA45I,QAAAA,MAAM,GAAGjF,MAAM,CAACC,WAAP,CAAmBqM,MAAnB,EAA2BhmB,cAAc,CAAC;EACjDtN,UAAAA,UAAU,EAAEx6E,KAAK,CAACivE;EAD+B,SAAD,EAE/CjvE,KAAK,CAACmlG,aAFyC,CAAzC,CAAT;EAGAsB,QAAAA,MAAM,CAAChpB,KAAP,GAAeqwB,MAAf,CAbK;EAcN;;EAED,WAAK,IAAI9gJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgzC,KAAK,CAAColG,WAAV,IAAyB,EAAEiB,OAAO,IAAIrmG,KAAK,CAAC+kG,UAAN,GAAmB,CAA9B,IAAmC/kG,KAAK,CAACuiG,aAAN,CAAoBjwI,KAApB,KAA8B0tC,KAAK,CAAC+kG,UAAzE,CAAzC,EAA+H/3I,CAAC,EAAhI,EAAoI;EAClIy5I,QAAAA,MAAM,CAACJ,OAAO,GAAG,MAAH,GAAY,MAApB,CAAN;EACD,OA7EyJ;;;EAgF1JrmG,MAAAA,KAAK,CAACymG,MAAN,GAAeA,MAAf;EACA,WAAKT,cAAL;EACD;;EAEDhmG,IAAAA,KAAK,CAACoiG,aAAN,GAAsB,IAAtB,CAvb2C;;EAyb3CpiG,IAAAA,KAAK,CAACulG,cAAN;EACD;EA3kCsB,CAAD,CAAxB;;EA8kCA,SAASwI,WAAT,CAAsBC,OAAtB,EAA+B;EAC7B,MAAIC,SAAS,GAAGv6I,SAAS,CAACxG,MAAV,GAAmB,CAAnB,IAAwBwG,SAAS,CAAC,CAAD,CAAT,KAAiBxH,SAAzC,GAAqDwH,SAAS,CAAC,CAAD,CAA9D,GAAoE0G,MAApF;EACA,MAAI8zI,mBAAmB,GAAGx6I,SAAS,CAACxG,MAAV,GAAmB,CAAnB,IAAwBwG,SAAS,CAAC,CAAD,CAAT,KAAiBxH,SAAzC,GAAqDwH,SAAS,CAAC,CAAD,CAA9D,GAAoE,KAA9F;;EAEA,MAAIy6I,WAAW,gBAAgB,UAAUC,UAAV,EAAsB;EACnDlR,IAAAA,SAAS,CAACiR,WAAD,EAAcC,UAAd,CAAT;;EAEA,QAAIC,MAAM,GAAGhQ,YAAY,CAAC8P,WAAD,CAAzB;;EAEA,aAASA,WAAT,GAAuB;EACrB,UAAIzwE,KAAJ;;EAEAmjD,MAAAA,iBAAe,CAAC,IAAD,EAAOstB,WAAP,CAAf;;EAEA,WAAK,IAAI5pB,IAAI,GAAG7wH,SAAS,CAACxG,MAArB,EAA6Bk/G,IAAI,GAAG,IAAIpwG,KAAJ,CAAUuoH,IAAV,CAApC,EAAqDC,IAAI,GAAG,CAAjE,EAAoEA,IAAI,GAAGD,IAA3E,EAAiFC,IAAI,EAArF,EAAyF;EACvFpY,QAAAA,IAAI,CAACoY,IAAD,CAAJ,GAAa9wH,SAAS,CAAC8wH,IAAD,CAAtB;EACD;;EAED9mD,MAAAA,KAAK,GAAG2wE,MAAM,CAAClhJ,IAAP,CAAY+9D,KAAZ,CAAkBmjF,MAAlB,EAA0B,CAAC,IAAD,EAAOt9D,MAAP,CAAcq7B,IAAd,CAA1B,CAAR;EACA1uC,MAAAA,KAAK,CAAC4wE,iBAAN,GAA0BN,OAAO,GAAG9iF,KAAV,CAAgB,KAAK,CAArB,EAAwB,GAAG6lB,MAAH,CAAUg1C,oBAAkB,CAACmoB,mBAAmB,GAAG,CAACjQ,wBAAsB,CAACvgE,KAAD,CAAvB,CAAH,GAAqC,EAAzD,CAA5B,EAA0F0uC,IAA1F,CAAxB,CAA1B;EACA,aAAO1uC,KAAP;EACD;;EAED,WAAOywE,WAAP;EACD,GApB8B,CAoB7BF,SApB6B,CAA/B,CAJ6B;;;EA2B7B7zI,EAAAA,MAAM,CAAC+wB,IAAP,CAAY6iH,OAAO,EAAnB,EAAuB13E,OAAvB,CAA+B,UAAUjoE,CAAV,EAAa;EAC1C,WAAO8/I,WAAW,CAAC36I,SAAZ,CAAsBnF,CAAtB,IAA2B,YAAY;EAC5C,UAAIkgJ,qBAAJ;;EAEA,UAAIC,SAAS,GAAG,CAACD,qBAAqB,GAAG,KAAKD,iBAA9B,EAAiDjgJ,CAAjD,EAAoD68D,KAApD,CAA0DqjF,qBAA1D,EAAiF76I,SAAjF,CAAhB;;EAEA,aAAO86I,SAAS,KAAK,KAAKF,iBAAnB,GAAuC,IAAvC;EAAA,QACLE,SADF;EAED,KAPD;EAQD,GATD;EAUA,SAAOL,WAAP;EACD;;EAED,IAAIM,OAAK,GAAG/rE,MAAM,CAACy+D,KAAP,GAAez+D,MAAM,CAACy+D,KAAtB,GAA8B;EACxCrjJ,EAAAA,KAAK,EAAEA;EADiC,CAA1C;;EAGA,IAAI4wJ,eAAe,GAAGX,WAAW,CAAClM,UAAD,EAAa4M,OAAK,CAAC3wJ,KAAnB,EAA0B,IAA1B,CAAjC;;EChmDA,MAAM6wJ,cAAY,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;EACxC,MAAMC,aAAW,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;EACtC,MAAMC,WAAS,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAClC;EACA,MAAM,iBAAiB,SAAS9oK,iBAAe,CAAC;AAChD;EACA,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG;AACnC;EACA,EAAE,KAAK,EAAE,CAAC;AACV;EACA,EAAE,KAAK,UAAU,KAAK,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,8EAA8E,EAAE,CAAC;EACjI,EAAE,KAAK,UAAU,KAAK,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,8HAA8H,EAAE,CAAC;AACjL;EACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC;EACrB,EAAE,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;AAC9F;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;EACvB,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC/B;EACA;AACA;EACA,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACtB;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACzD;EACA,EAAE,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;EACzB,EAAE,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;EACvB,EAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;AACtB;EACA,EAAE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;EACxB,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;EACtB,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB;EACA,EAAE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;EAC5B,EAAE,IAAI,CAAC,oBAAoB,GAAG,GAAG,CAAC;AAClC;EACA,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;EACvB,EAAE,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC9B;EACA,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAC3D;EACA,EAAE,IAAI,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;AACpF;EACA;AACA;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,IAAIsB,SAAO,EAAE,CAAC;AAC9B;EACA,EAAE,MAAM,GAAG,GAAG,QAAQ,CAAC;AACvB;EACA,EAAE,MAAM,YAAY,GAAG,IAAIA,SAAO,EAAE,CAAC;EACrC,EAAE,IAAI,QAAQ,GAAG,CAAC,CAAC;AACnB;EACA,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI;EACzB,GAAG,SAAS,GAAG,KAAK,CAAC,IAAI;AACzB;EACA,GAAG,uBAAuB,GAAG,CAAC;EAC9B,GAAG,qBAAqB,GAAG,CAAC;AAC5B;EACA,GAAG,UAAU,GAAG,CAAC,CAAC;AAClB;EACA,EAAE,MAAM,IAAI,GAAG,IAAIA,SAAO,EAAE;AAC5B;EACA,GAAG,SAAS,GAAG,IAAIZ,SAAO,EAAE;EAC5B,GAAG,SAAS,GAAG,IAAIA,SAAO,EAAE;AAC5B;EACA,GAAG,SAAS,GAAG,IAAIY,SAAO,EAAE;AAC5B;EACA,GAAG,UAAU,GAAG,IAAIZ,SAAO,EAAE;EAC7B,GAAG,QAAQ,GAAG,IAAIA,SAAO,EAAE;AAC3B;EACA,GAAG,SAAS,GAAG,IAAIA,SAAO,EAAE;EAC5B,GAAG,OAAO,GAAG,IAAIA,SAAO,EAAE,CAAC;AAC3B;EACA;AACA;EACA,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;EACrC,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;EAChD,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;EACpC,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAChC;EACA;AACA;EACA,EAAE,IAAI,CAAC,YAAY,GAAG,YAAY;AAClC;EACA,GAAG,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC;EACxD;EACA,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC;EAC5D,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC;EACpE,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,SAAS,CAAC;EACjE,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;EAClC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;AACpC;EACA,GAAG,CAAC;AACJ;EACA,EAAE,MAAM,gBAAgB,KAAK,YAAY;AACzC;EACA,GAAG,MAAM,MAAM,GAAG,IAAIA,SAAO,EAAE,CAAC;AAChC;EACA,GAAG,OAAO,SAAS,gBAAgB,EAAE,KAAK,EAAE,KAAK,GAAG;AACpD;EACA,IAAI,MAAM,CAAC,GAAG;EACd,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,KAAK;EACvD,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM;EACvD,KAAK,CAAC;AACN;EACA,IAAI,OAAO,MAAM,CAAC;AAClB;EACA,IAAI,CAAC;AACL;EACA,GAAG,EAAE,EAAE,CAAC;AACR;EACA,EAAE,MAAM,gBAAgB,KAAK,YAAY;AACzC;EACA,GAAG,MAAM,MAAM,GAAG,IAAIA,SAAO,EAAE,CAAC;AAChC;EACA,GAAG,OAAO,SAAS,gBAAgB,EAAE,KAAK,EAAE,KAAK,GAAG;AACpD;EACA,IAAI,MAAM,CAAC,GAAG;EACd,OAAO,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,EAAE;EAC9F,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,KAAK;EACtF,KAAK,CAAC;AACN;EACA,IAAI,OAAO,MAAM,CAAC;AAClB;EACA,IAAI,CAAC;AACL;EACA,GAAG,EAAE,EAAE,CAAC;AACR;EACA,EAAE,IAAI,CAAC,YAAY,KAAK,YAAY;AACpC;EACA,GAAG,MAAM,IAAI,GAAG,IAAIY,SAAO,EAAE;EAC7B,IAAI,UAAU,GAAG,IAAID,YAAU,EAAE;EACjC,IAAI,YAAY,GAAG,IAAIC,SAAO,EAAE;EAChC,IAAI,iBAAiB,GAAG,IAAIA,SAAO,EAAE;EACrC,IAAI,uBAAuB,GAAG,IAAIA,SAAO,EAAE;EAC3C,IAAI,aAAa,GAAG,IAAIA,SAAO,EAAE,CAAC;AAClC;EACA,GAAG,OAAO,SAAS,YAAY,GAAG;AAClC;EACA,IAAI,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;EACjF,IAAI,IAAI,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC;AACvC;EACA,IAAI,KAAK,KAAK,GAAG;AACjB;EACA,KAAK,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAC5D;EACA,KAAK,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;EAC3C,KAAK,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC;EAC3D,KAAK,uBAAuB,CAAC,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC,SAAS,EAAE,CAAC;AACzF;EACA,KAAK,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC;EAC9D,KAAK,uBAAuB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC;AACpE;EACA,KAAK,aAAa,CAAC,IAAI,EAAE,iBAAiB,CAAC,GAAG,EAAE,uBAAuB,EAAE,EAAE,CAAC;AAC5E;EACA,KAAK,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;AAC1D;EACA,KAAK,KAAK,IAAI,KAAK,CAAC,WAAW,CAAC;EAChC,KAAK,UAAU,CAAC,gBAAgB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAChD;EACA,KAAK,IAAI,CAAC,eAAe,EAAE,UAAU,EAAE,CAAC;EACxC,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,CAAC;AACnD;EACA,KAAK,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;EAC5B,KAAK,UAAU,GAAG,KAAK,CAAC;AACxB;EACA,KAAK,MAAM,KAAK,EAAE,KAAK,CAAC,YAAY,IAAI,UAAU,GAAG;AACrD;EACA,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAC;EACjE,KAAK,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;EAC5D,KAAK,UAAU,CAAC,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;EAC1D,KAAK,IAAI,CAAC,eAAe,EAAE,UAAU,EAAE,CAAC;EACxC,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,CAAC;AACnD;EACA,KAAK;AACL;EACA,IAAI,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;AAChC;EACA,IAAI,CAAC;AACL;EACA,GAAG,EAAE,EAAE,CAAC;AACR;AACA;EACA,EAAE,IAAI,CAAC,UAAU,GAAG,YAAY;AAChC;EACA,GAAG,IAAI,MAAM,CAAC;AACd;EACA,GAAG,KAAK,MAAM,KAAK,KAAK,CAAC,cAAc,GAAG;AAC1C;EACA,IAAI,MAAM,GAAG,uBAAuB,GAAG,qBAAqB,CAAC;EAC7D,IAAI,uBAAuB,GAAG,qBAAqB,CAAC;AACpD;EACA,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,mBAAmB,GAAG;AAC5C;EACA,KAAK,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;AACnC;EACA,KAAK,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,oBAAoB,GAAG;AACpD;EACA,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC;EACjC,KAAK,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;AAC3C;EACA,KAAK,MAAM;AACX;EACA,KAAK,OAAO,CAAC,IAAI,EAAE,kDAAkD,EAAE,CAAC;AACxE;EACA,KAAK;AACL;EACA,IAAI,MAAM;AACV;EACA,IAAI,MAAM,GAAG,GAAG,GAAG,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;AACnE;EACA,IAAI,KAAK,MAAM,KAAK,GAAG,IAAI,MAAM,GAAG,GAAG,GAAG;AAC1C;EACA,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,mBAAmB,GAAG;AAC7C;EACA,MAAM,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;AACpC;EACA,MAAM,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,oBAAoB,GAAG;AACrD;EACA,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC;EAClC,MAAM,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;AAC5C;EACA,MAAM,MAAM;AACZ;EACA,MAAM,OAAO,CAAC,IAAI,EAAE,kDAAkD,EAAE,CAAC;AACzE;EACA,MAAM;AACN;EACA,KAAK;AACL;EACA,IAAI,KAAK,KAAK,CAAC,YAAY,GAAG;AAC9B;EACA,KAAK,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AACjC;EACA,KAAK,MAAM;AACX;EACA,KAAK,UAAU,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,KAAK,IAAI,CAAC,oBAAoB,CAAC;AAC/E;EACA,KAAK;AACL;EACA,IAAI;AACJ;EACA,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,SAAS,KAAK,YAAY;AACjC;EACA,GAAG,MAAM,WAAW,GAAG,IAAIZ,SAAO,EAAE;EACpC,IAAI,QAAQ,GAAG,IAAIY,SAAO,EAAE;EAC5B,IAAI,GAAG,GAAG,IAAIA,SAAO,EAAE,CAAC;AACxB;EACA,GAAG,OAAO,SAAS,SAAS,GAAG;AAC/B;EACA,IAAI,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC;AACjD;EACA,IAAI,KAAK,WAAW,CAAC,QAAQ,EAAE,GAAG;AAClC;EACA,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,oBAAoB,GAAG;AAC9C;EACA,MAAM,MAAM,OAAO,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;EACpH,MAAM,MAAM,OAAO,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;AACpH;EACA,MAAM,WAAW,CAAC,CAAC,IAAI,OAAO,CAAC;EAC/B,MAAM,WAAW,CAAC,CAAC,IAAI,OAAO,CAAC;AAC/B;EACA,MAAM;AACN;EACA,KAAK,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;AAClE;EACA,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;EAC1E,KAAK,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC;AAC5E;EACA,KAAK,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;EACtC,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAC7B;EACA,KAAK,KAAK,KAAK,CAAC,YAAY,GAAG;AAC/B;EACA,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;AAChC;EACA,MAAM,MAAM;AACZ;EACA,MAAM,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC,oBAAoB,EAAE,EAAE,CAAC;AACjH;EACA,MAAM;AACN;EACA,KAAK;AACL;EACA,IAAI,CAAC;AACL;EACA,GAAG,EAAE,EAAE,CAAC;AACR;EACA,EAAE,IAAI,CAAC,cAAc,GAAG,YAAY;AACpC;EACA,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG;AAC1C;EACA,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,GAAG;AACnE;EACA,KAAK,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;EAC3F,KAAK,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AACjC;EACA,KAAK;AACL;EACA,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,GAAG;AACnE;EACA,KAAK,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;EAC3F,KAAK,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AACjC;EACA,KAAK;AACL;EACA,IAAI;AACJ;EACA,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,YAAY;AAC5B;EACA,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAC1D;EACA,GAAG,KAAK,EAAE,KAAK,CAAC,QAAQ,GAAG;AAC3B;EACA,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;AACzB;EACA,IAAI;AACJ;EACA,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG;AACzB;EACA,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;AACvB;EACA,IAAI;AACJ;EACA,GAAG,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG;AACxB;EACA,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;AACtB;EACA,IAAI;AACJ;EACA,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1D;EACA,GAAG,KAAK,KAAK,CAAC,MAAM,CAAC,mBAAmB,GAAG;AAC3C;EACA,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B;EACA,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACxC;EACA,IAAI,KAAK,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG;AACzE;EACA,KAAK,KAAK,CAAC,aAAa,EAAEsnK,cAAY,EAAE,CAAC;AACzC;EACA,KAAK,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AAChD;EACA,KAAK;AACL;EACA,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,oBAAoB,GAAG;AACnD;EACA,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACxC;EACA,IAAI,KAAK,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI,QAAQ,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG;AAC3G;EACA,KAAK,KAAK,CAAC,aAAa,EAAEA,cAAY,EAAE,CAAC;AACzC;EACA,KAAK,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;EAChD,KAAK,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;AAClC;EACA,KAAK;AACL;EACA,IAAI,MAAM;AACV;EACA,IAAI,OAAO,CAAC,IAAI,EAAE,kDAAkD,EAAE,CAAC;AACvE;EACA,IAAI;AACJ;EACA,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,YAAY;AAC3B;EACA,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;EACvB,GAAG,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;AAC1B;EACA,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;EACtC,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;EACjD,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;EACrC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;AACnC;EACA,GAAG,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;AACzC;EACA,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAC1D;EACA,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACvC;EACA,GAAG,KAAK,CAAC,aAAa,EAAEA,cAAY,EAAE,CAAC;AACvC;EACA,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;EAC9C,GAAG,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;AAChC;EACA,GAAG,CAAC;AACJ;EACA;AACA;EACA,EAAE,SAAS,aAAa,EAAE,KAAK,GAAG;AAClC;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACzC;EACA,GAAG,SAAS,KAAK,CAAC,WAAW;AAC7B;EACA,IAAI,KAAK,OAAO,CAAC;EACjB,IAAI,KAAK,KAAK;EACd,KAAK,WAAW,EAAE,KAAK,EAAE,CAAC;EAC1B,KAAK,MAAM;AACX;EACA;AACA;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,SAAS,aAAa,EAAE,KAAK,GAAG;AAClC;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACzC;EACA,GAAG,SAAS,KAAK,CAAC,WAAW;AAC7B;EACA,IAAI,KAAK,OAAO,CAAC;EACjB,IAAI,KAAK,KAAK;EACd,KAAK,WAAW,EAAE,KAAK,EAAE,CAAC;EAC1B,KAAK,MAAM;AACX;EACA;AACA;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,SAAS,WAAW,EAAE,KAAK,GAAG;AAChC;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACzC;EACA,GAAG,SAAS,KAAK,CAAC,WAAW;AAC7B;EACA,IAAI,KAAK,OAAO,CAAC;EACjB,IAAI,KAAK,KAAK;EACd,KAAK,SAAS,EAAE,KAAK,EAAE,CAAC;EACxB,KAAK,MAAM;AACX;EACA;AACA;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,SAAS,OAAO,EAAE,KAAK,GAAG;AAC5B;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACzC;EACA,GAAG,MAAM,CAAC,mBAAmB,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACpD;EACA,GAAG,KAAK,SAAS,KAAK,KAAK,CAAC,IAAI,GAAG;AACnC;EACA,IAAI,OAAO;AACX;EACA,IAAI,MAAM,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,GAAG;AAC/E;EACA,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;AAC7B;EACA,IAAI,MAAM,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG;AAC3E;EACA,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;AAC3B;EACA,IAAI,MAAM,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG;AACzE;EACA,IAAI,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC;AAC1B;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,SAAS,KAAK,GAAG;AACnB;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACzC;EACA,GAAG,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;AAC1B;EACA,GAAG,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACjD;EACA,GAAG;AACH;EACA,EAAE,SAAS,WAAW,EAAE,KAAK,GAAG;AAChC;EACA,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B;EACA,GAAG,KAAK,MAAM,KAAK,KAAK,CAAC,IAAI,GAAG;AAChC;EACA,IAAI,SAAS,KAAK,CAAC,MAAM;AACzB;EACA,KAAK,KAAK,KAAK,CAAC,YAAY,CAAC,IAAI;EACjC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;EAC5B,MAAM,MAAM;AACZ;EACA,KAAK,KAAK,KAAK,CAAC,YAAY,CAAC,MAAM;EACnC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;EAC1B,MAAM,MAAM;AACZ;EACA,KAAK,KAAK,KAAK,CAAC,YAAY,CAAC,KAAK;EAClC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC;EACzB,MAAM,MAAM;AACZ;EACA,KAAK;EACL,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;AAC1B;EACA,KAAK;AACL;EACA,IAAI;AACJ;EACA,GAAG,MAAM,KAAK,GAAG,EAAE,SAAS,KAAK,KAAK,CAAC,IAAI,KAAK,SAAS,GAAG,MAAM,CAAC;AACnE;EACA,GAAG,KAAK,KAAK,KAAK,KAAK,CAAC,MAAM,IAAI,EAAE,KAAK,CAAC,QAAQ,GAAG;AACrD;EACA,IAAI,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;EACnE,IAAI,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;AAChC;EACA,IAAI,MAAM,KAAK,KAAK,KAAK,KAAK,CAAC,IAAI,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG;AACxD;EACA,IAAI,UAAU,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;EACpE,IAAI,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC;AAChC;EACA,IAAI,MAAM,KAAK,KAAK,KAAK,KAAK,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG;AACtD;EACA,IAAI,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;EACnE,IAAI,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;AAC9B;EACA,IAAI;AACJ;EACA,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;EACnF,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAC/E;EACA,GAAG,KAAK,CAAC,aAAa,EAAEC,aAAW,EAAE,CAAC;AACtC;EACA,GAAG;AACH;EACA,EAAE,SAAS,WAAW,EAAE,KAAK,GAAG;AAChC;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACzC;EACA,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B;EACA,GAAG,MAAM,KAAK,GAAG,EAAE,SAAS,KAAK,KAAK,CAAC,IAAI,KAAK,SAAS,GAAG,MAAM,CAAC;AACnE;EACA,GAAG,KAAK,KAAK,KAAK,KAAK,CAAC,MAAM,IAAI,EAAE,KAAK,CAAC,QAAQ,GAAG;AACrD;EACA,IAAI,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;EAChC,IAAI,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;AACnE;EACA,IAAI,MAAM,KAAK,KAAK,KAAK,KAAK,CAAC,IAAI,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG;AACxD;EACA,IAAI,QAAQ,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;AAClE;EACA,IAAI,MAAM,KAAK,KAAK,KAAK,KAAK,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG;AACtD;EACA,IAAI,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;AACjE;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,SAAS,SAAS,EAAE,KAAK,GAAG;AAC9B;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACzC;EACA,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B;EACA,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;AACvB;EACA,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;EACtF,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAClF;EACA,GAAG,KAAK,CAAC,aAAa,EAAEC,WAAS,EAAE,CAAC;AACpC;EACA,GAAG;AACH;EACA,EAAE,SAAS,UAAU,EAAE,KAAK,GAAG;AAC/B;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACzC;EACA,GAAG,KAAK,KAAK,CAAC,MAAM,KAAK,IAAI,GAAG,OAAO;AACvC;EACA,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B;EACA,GAAG,SAAS,KAAK,CAAC,SAAS;AAC3B;EACA,IAAI,KAAK,CAAC;EACV;EACA,KAAK,UAAU,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;EAC1C,KAAK,MAAM;AACX;EACA,IAAI,KAAK,CAAC;EACV;EACA,KAAK,UAAU,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;EACzC,KAAK,MAAM;AACX;EACA,IAAI;EACJ;EACA,KAAK,UAAU,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;EAC5C,KAAK,MAAM;AACX;EACA,IAAI;AACJ;EACA,GAAG,KAAK,CAAC,aAAa,EAAED,aAAW,EAAE,CAAC;EACtC,GAAG,KAAK,CAAC,aAAa,EAAEC,WAAS,EAAE,CAAC;AACpC;EACA,GAAG;AACH;EACA,EAAE,SAAS,UAAU,EAAE,KAAK,GAAG;AAC/B;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACzC;EACA,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B;EACA,GAAG,SAAS,KAAK,CAAC,OAAO,CAAC,MAAM;AAChC;EACA,IAAI,KAAK,CAAC;EACV,KAAK,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC;EACjC,KAAK,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;EAC9F,KAAK,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;EACjC,KAAK,MAAM;AACX;EACA,IAAI;EACJ,KAAK,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC;EACnC,KAAK,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;EACpE,KAAK,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;EACpE,KAAK,qBAAqB,GAAG,uBAAuB,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AACtF;EACA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;EAC3E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;EAC3E,KAAK,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;EAChD,KAAK,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;EAC/B,KAAK,MAAM;AACX;EACA,IAAI;AACJ;EACA,GAAG,KAAK,CAAC,aAAa,EAAED,aAAW,EAAE,CAAC;AACtC;EACA,GAAG;AACH;EACA,EAAE,SAAS,SAAS,EAAE,KAAK,GAAG;AAC9B;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACzC;EACA,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B;EACA,GAAG,SAAS,KAAK,CAAC,OAAO,CAAC,MAAM;AAChC;EACA,IAAI,KAAK,CAAC;EACV,KAAK,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;EACjC,KAAK,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;EAC9F,KAAK,MAAM;AACX;EACA,IAAI;EACJ,KAAK,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;EACpE,KAAK,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;EACpE,KAAK,qBAAqB,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AAC5D;EACA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;EAC3E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;EAC3E,KAAK,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;EAC9C,KAAK,MAAM;AACX;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,SAAS,QAAQ,EAAE,KAAK,GAAG;AAC7B;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACzC;EACA,GAAG,SAAS,KAAK,CAAC,OAAO,CAAC,MAAM;AAChC;EACA,IAAI,KAAK,CAAC;EACV,KAAK,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;EACzB,KAAK,MAAM;AACX;EACA,IAAI,KAAK,CAAC;EACV,KAAK,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC;EACjC,KAAK,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;EAC9F,KAAK,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;EACjC,KAAK,MAAM;AACX;EACA,IAAI;AACJ;EACA,GAAG,KAAK,CAAC,aAAa,EAAEC,WAAS,EAAE,CAAC;AACpC;EACA,GAAG;AACH;EACA,EAAE,SAAS,WAAW,EAAE,KAAK,GAAG;AAChC;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACzC;EACA,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B;EACA,GAAG;AACH;EACA,EAAE,IAAI,CAAC,OAAO,GAAG,YAAY;AAC7B;EACA,GAAG,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;AACtE;EACA,GAAG,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;EACxE,GAAG,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AAC/D;EACA,GAAG,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;EACpE,GAAG,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;EAChE,GAAG,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AAClE;EACA,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;EACtF,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAClF;EACA,GAAG,MAAM,CAAC,mBAAmB,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;EACpD,GAAG,MAAM,CAAC,mBAAmB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAChD;EACA,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;AACjE;EACA,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;EACnE,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;AAC9E;EACA,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;EACnF,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;EAC3D,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;AACjF;EACA,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;EACjF,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAC7E;EACA,EAAE,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;EAChD,EAAE,MAAM,CAAC,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5C;EACA,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AACtB;EACA;EACA,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAChB;EACA,EAAE;AACF;EACA;;EChuBA;EACA;EACA;EACA;EACA;EACA;AACA;EACA,MAAMF,cAAY,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;EACxC,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;EACtC,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAClC;EACA,MAAM,aAAa,SAAS5oK,iBAAe,CAAC;AAC5C;EACA,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG;AACnC;EACA,EAAE,KAAK,EAAE,CAAC;AACV;EACA,EAAE,KAAK,UAAU,KAAK,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,0EAA0E,EAAE,CAAC;EAC7H,EAAE,KAAK,UAAU,KAAK,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,0HAA0H,EAAE,CAAC;AAC7K;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;EACvB,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC/B;EACA;EACA,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACtB;EACA;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,IAAIsB,SAAO,EAAE,CAAC;AAC9B;EACA;EACA,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;EACvB,EAAE,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC9B;EACA;EACA,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;EACnB,EAAE,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;AAC1B;EACA;EACA;EACA,EAAE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;EACzB,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC;AAC/B;EACA;EACA;EACA,EAAE,IAAI,CAAC,eAAe,GAAG,EAAE,QAAQ,CAAC;EACpC,EAAE,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;AAClC;EACA;EACA;EACA,EAAE,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;EAC7B,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC5B;EACA;EACA;EACA,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;EACzB,EAAE,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;AACvB;EACA;EACA,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;EAC3B,EAAE,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;AACzB;EACA;EACA,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;EACxB,EAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;EACtB,EAAE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;EACjC,EAAE,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;AACzB;EACA;EACA;EACA,EAAE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;EAC1B,EAAE,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;AAC7B;EACA;EACA,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AAC7F;EACA;EACA,EAAE,IAAI,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;AACpF;EACA;EACA,EAAE,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;AAC7D;EACA;EACA,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;EACrC,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;EAChD,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAChC;EACA;EACA,EAAE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACnC;EACA;EACA;EACA;AACA;EACA,EAAE,IAAI,CAAC,aAAa,GAAG,YAAY;AACnC;EACA,GAAG,OAAO,SAAS,CAAC,GAAG,CAAC;AACxB;EACA,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,iBAAiB,GAAG,YAAY;AACvC;EACA,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AAC1B;EACA,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,iBAAiB,GAAG,WAAW,UAAU,GAAG;AACnD;EACA,GAAG,UAAU,CAAC,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;EACvD,GAAG,IAAI,CAAC,oBAAoB,GAAG,UAAU,CAAC;AAC1C;EACA,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,SAAS,GAAG,YAAY;AAC/B;EACA,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;EACtC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;EACjD,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;AACnC;EACA,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,YAAY;AAC3B;EACA,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;EACtC,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;EACjD,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;AACnC;EACA,GAAG,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;EACzC,GAAG,KAAK,CAAC,aAAa,EAAEsnK,cAAY,EAAE,CAAC;AACvC;EACA,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;AAClB;EACA,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB;EACA,GAAG,CAAC;AACJ;EACA;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,YAAY;AAC5B;EACA,GAAG,MAAM,MAAM,GAAG,IAAItnK,SAAO,EAAE,CAAC;AAChC;EACA;EACA,GAAG,MAAM,IAAI,GAAG,IAAID,YAAU,EAAE,CAAC,kBAAkB,EAAE,MAAM,CAAC,EAAE,EAAE,IAAIC,SAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;EACzF,GAAG,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC;AAC7C;EACA,GAAG,MAAM,YAAY,GAAG,IAAIA,SAAO,EAAE,CAAC;EACtC,GAAG,MAAM,cAAc,GAAG,IAAID,YAAU,EAAE,CAAC;AAC3C;EACA,GAAG,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;AAC7B;EACA,GAAG,OAAO,SAAS,MAAM,GAAG;AAC5B;EACA,IAAI,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC3C;EACA,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAChD;EACA;EACA,IAAI,MAAM,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;AACnC;EACA;EACA,IAAI,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;AACvC;EACA,IAAI,KAAK,KAAK,CAAC,UAAU,IAAI,KAAK,KAAK,KAAK,CAAC,IAAI,GAAG;AACpD;EACA,KAAK,UAAU,EAAE,oBAAoB,EAAE,EAAE,CAAC;AAC1C;EACA,KAAK;AACL;EACA,IAAI,KAAK,KAAK,CAAC,aAAa,GAAG;AAC/B;EACA,KAAK,SAAS,CAAC,KAAK,IAAI,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;EACnE,KAAK,SAAS,CAAC,GAAG,IAAI,cAAc,CAAC,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC;AAC/D;EACA,KAAK,MAAM;AACX;EACA,KAAK,SAAS,CAAC,KAAK,IAAI,cAAc,CAAC,KAAK,CAAC;EAC7C,KAAK,SAAS,CAAC,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC;AACzC;EACA,KAAK;AACL;EACA;AACA;EACA,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,eAAe,CAAC;EACpC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,eAAe,CAAC;AACpC;EACA,IAAI,KAAK,QAAQ,EAAE,GAAG,EAAE,IAAI,QAAQ,EAAE,GAAG,EAAE,GAAG;AAC9C;EACA,KAAK,KAAK,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC;AACjF;EACA,KAAK,KAAK,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC;AACjF;EACA,KAAK,KAAK,GAAG,IAAI,GAAG,GAAG;AACvB;EACA,MAAM,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;AAC1E;EACA,MAAM,MAAM;AACZ;EACA,MAAM,SAAS,CAAC,KAAK,GAAG,EAAE,SAAS,CAAC,KAAK,GAAG,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC;EAC7D,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE;EACvC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;AACxC;EACA,MAAM;AACN;EACA,KAAK;AACL;EACA;EACA,IAAI,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC;AACpG;EACA,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;AACzB;AACA;EACA,IAAI,SAAS,CAAC,MAAM,IAAI,KAAK,CAAC;AAC9B;EACA;EACA,IAAI,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;AACtG;EACA;AACA;EACA,IAAI,KAAK,KAAK,CAAC,aAAa,KAAK,IAAI,GAAG;AACxC;EACA,KAAK,KAAK,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC;AACpE;EACA,KAAK,MAAM;AACX;EACA,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC;AACnC;EACA,KAAK;AACL;EACA,IAAI,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,CAAC;AACzC;EACA;EACA,IAAI,MAAM,CAAC,eAAe,EAAE,WAAW,EAAE,CAAC;AAC1C;EACA,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC;AAChD;EACA,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACxC;EACA,IAAI,KAAK,KAAK,CAAC,aAAa,KAAK,IAAI,GAAG;AACxC;EACA,KAAK,cAAc,CAAC,KAAK,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;EACzD,KAAK,cAAc,CAAC,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;AACvD;EACA,KAAK,SAAS,CAAC,cAAc,EAAE,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;AACzD;EACA,KAAK,MAAM;AACX;EACA,KAAK,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACnC;EACA,KAAK,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9B;EACA,KAAK;AACL;EACA,IAAI,KAAK,GAAG,CAAC,CAAC;AACd;EACA;EACA;EACA;AACA;EACA,IAAI,KAAK,WAAW;EACpB,KAAK,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,GAAG;EAClE,KAAK,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,GAAG,GAAG,GAAG;AACvE;EACA,KAAK,KAAK,CAAC,aAAa,EAAEunK,cAAY,EAAE,CAAC;AACzC;EACA,KAAK,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;EAChD,KAAK,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;EACpD,KAAK,WAAW,GAAG,KAAK,CAAC;AACzB;EACA,KAAK,OAAO,IAAI,CAAC;AACjB;EACA,KAAK;AACL;EACA,IAAI,OAAO,KAAK,CAAC;AACjB;EACA,IAAI,CAAC;AACL;EACA,GAAG,EAAE,CAAC;AACN;EACA,EAAE,IAAI,CAAC,OAAO,GAAG,YAAY;AAC7B;EACA,GAAG,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;AACxE;EACA,GAAG,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;EACxE,GAAG,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACjE;EACA,GAAG,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;EACtE,GAAG,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;EAClE,GAAG,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AACpE;EACA,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;EACtF,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAClF;AACA;EACA,GAAG,KAAK,KAAK,CAAC,oBAAoB,KAAK,IAAI,GAAG;AAC9C;EACA,IAAI,KAAK,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAC3E;EACA,IAAI;AACJ;EACA;AACA;EACA,GAAG,CAAC;AACJ;EACA;EACA;EACA;AACA;EACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC;AACrB;EACA,EAAE,MAAM,KAAK,GAAG;EAChB,GAAG,IAAI,EAAE,EAAE,CAAC;EACZ,GAAG,MAAM,EAAE,CAAC;EACZ,GAAG,KAAK,EAAE,CAAC;EACX,GAAG,GAAG,EAAE,CAAC;EACT,GAAG,YAAY,EAAE,CAAC;EAClB,GAAG,SAAS,EAAE,CAAC;EACf,GAAG,eAAe,EAAE,CAAC;EACrB,GAAG,kBAAkB,EAAE,CAAC;EACxB,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACzB;EACA,EAAE,MAAM,GAAG,GAAG,QAAQ,CAAC;AACvB;EACA;EACA,EAAE,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;EACpC,EAAE,MAAM,cAAc,GAAG,IAAI,SAAS,EAAE,CAAC;AACzC;EACA,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;EAChB,EAAE,MAAM,SAAS,GAAG,IAAItnK,SAAO,EAAE,CAAC;EAClC,EAAE,IAAI,WAAW,GAAG,KAAK,CAAC;AAC1B;EACA,EAAE,MAAM,WAAW,GAAG,IAAIZ,SAAO,EAAE,CAAC;EACpC,EAAE,MAAM,SAAS,GAAG,IAAIA,SAAO,EAAE,CAAC;EAClC,EAAE,MAAM,WAAW,GAAG,IAAIA,SAAO,EAAE,CAAC;AACpC;EACA,EAAE,MAAM,QAAQ,GAAG,IAAIA,SAAO,EAAE,CAAC;EACjC,EAAE,MAAM,MAAM,GAAG,IAAIA,SAAO,EAAE,CAAC;EAC/B,EAAE,MAAM,QAAQ,GAAG,IAAIA,SAAO,EAAE,CAAC;AACjC;EACA,EAAE,MAAM,UAAU,GAAG,IAAIA,SAAO,EAAE,CAAC;EACnC,EAAE,MAAM,QAAQ,GAAG,IAAIA,SAAO,EAAE,CAAC;EACjC,EAAE,MAAM,UAAU,GAAG,IAAIA,SAAO,EAAE,CAAC;AACnC;EACA,EAAE,SAAS,oBAAoB,GAAG;AAClC;EACA,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC;AACxD;EACA,GAAG;AACH;EACA,EAAE,SAAS,YAAY,GAAG;AAC1B;EACA,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;AAC5C;EACA,GAAG;AACH;EACA,EAAE,SAAS,UAAU,EAAE,KAAK,GAAG;AAC/B;EACA,GAAG,cAAc,CAAC,KAAK,IAAI,KAAK,CAAC;AACjC;EACA,GAAG;AACH;EACA,EAAE,SAAS,QAAQ,EAAE,KAAK,GAAG;AAC7B;EACA,GAAG,cAAc,CAAC,GAAG,IAAI,KAAK,CAAC;AAC/B;EACA,GAAG;AACH;EACA,EAAE,MAAM,OAAO,GAAG,YAAY;AAC9B;EACA,GAAG,MAAM,CAAC,GAAG,IAAIY,SAAO,EAAE,CAAC;AAC3B;EACA,GAAG,OAAO,SAAS,OAAO,EAAE,QAAQ,EAAE,YAAY,GAAG;AACrD;EACA,IAAI,CAAC,CAAC,mBAAmB,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;EAC7C,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC;AACnC;EACA,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;AACvB;EACA,IAAI,CAAC;AACL;EACA,GAAG,EAAE,CAAC;AACN;EACA,EAAE,MAAM,KAAK,GAAG,YAAY;AAC5B;EACA,GAAG,MAAM,CAAC,GAAG,IAAIA,SAAO,EAAE,CAAC;AAC3B;EACA,GAAG,OAAO,SAAS,KAAK,EAAE,QAAQ,EAAE,YAAY,GAAG;AACnD;EACA,IAAI,KAAK,KAAK,CAAC,kBAAkB,KAAK,IAAI,GAAG;AAC7C;EACA,KAAK,CAAC,CAAC,mBAAmB,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;AAC9C;EACA,KAAK,MAAM;AACX;EACA,KAAK,CAAC,CAAC,mBAAmB,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;EAC9C,KAAK,CAAC,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AAC1C;EACA,KAAK;AACL;EACA,IAAI,CAAC,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAC;AACjC;EACA,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;AACvB;EACA,IAAI,CAAC;AACL;EACA,GAAG,EAAE,CAAC;AACN;EACA;EACA,EAAE,MAAM,GAAG,GAAG,YAAY;AAC1B;EACA,GAAG,MAAM,MAAM,GAAG,IAAIA,SAAO,EAAE,CAAC;AAChC;EACA,GAAG,OAAO,SAAS,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG;AACzC;EACA,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC;AACrC;EACA,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,mBAAmB,GAAG;AAC5C;EACA;EACA,KAAK,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;EAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;EACjD,KAAK,IAAI,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AAC1C;EACA;EACA,KAAK,cAAc,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;AAC9E;EACA;EACA,KAAK,OAAO,EAAE,CAAC,GAAG,MAAM,GAAG,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;EACxF,KAAK,KAAK,EAAE,CAAC,GAAG,MAAM,GAAG,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACtF;EACA,KAAK,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,oBAAoB,GAAG;AACpD;EACA;EACA,KAAK,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;EACnI,KAAK,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AAClI;EACA,KAAK,MAAM;AACX;EACA;EACA,KAAK,OAAO,CAAC,IAAI,EAAE,8EAA8E,EAAE,CAAC;EACpG,KAAK,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;AAC7B;EACA,KAAK;AACL;EACA,IAAI,CAAC;AACL;EACA,GAAG,EAAE,CAAC;AACN;EACA,EAAE,SAAS,QAAQ,EAAE,UAAU,GAAG;AAClC;EACA,GAAG,KAAK,KAAK,CAAC,MAAM,CAAC,mBAAmB,GAAG;AAC3C;EACA,IAAI,KAAK,IAAI,UAAU,CAAC;AACxB;EACA,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,oBAAoB,GAAG;AACnD;EACA,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,EAAE,EAAE,CAAC;EAC7G,IAAI,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;EAC1C,IAAI,WAAW,GAAG,IAAI,CAAC;AACvB;EACA,IAAI,MAAM;AACV;EACA,IAAI,OAAO,CAAC,IAAI,EAAE,qFAAqF,EAAE,CAAC;EAC1G,IAAI,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;AAC7B;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,SAAS,OAAO,EAAE,UAAU,GAAG;AACjC;EACA,GAAG,KAAK,KAAK,CAAC,MAAM,CAAC,mBAAmB,GAAG;AAC3C;EACA,IAAI,KAAK,IAAI,UAAU,CAAC;AACxB;EACA,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,oBAAoB,GAAG;AACnD;EACA,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,EAAE,EAAE,CAAC;EAC7G,IAAI,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;EAC1C,IAAI,WAAW,GAAG,IAAI,CAAC;AACvB;EACA,IAAI,MAAM;AACV;EACA,IAAI,OAAO,CAAC,IAAI,EAAE,qFAAqF,EAAE,CAAC;EAC1G,IAAI,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;AAC7B;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA;EACA;EACA;AACA;EACA,EAAE,SAAS,qBAAqB,EAAE,KAAK,GAAG;AAC1C;EACA,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;AACnD;EACA,GAAG;AACH;EACA,EAAE,SAAS,oBAAoB,EAAE,KAAK,GAAG;AACzC;EACA,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;AAClD;EACA,GAAG;AACH;EACA,EAAE,SAAS,kBAAkB,EAAE,KAAK,GAAG;AACvC;EACA,GAAG,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;AAChD;EACA,GAAG;AACH;EACA,EAAE,SAAS,qBAAqB,EAAE,KAAK,GAAG;AAC1C;EACA,GAAG,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;AACjD;EACA,GAAG,WAAW,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;AACxF;EACA,GAAG,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC;AACpC;EACA,GAAG,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;AACpE;EACA,GAAG,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;AAClE;EACA,GAAG,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;AACjC;EACA,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;AAClB;EACA,GAAG;AACH;EACA,EAAE,SAAS,oBAAoB,EAAE,KAAK,GAAG;AACzC;EACA,GAAG,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;AAChD;EACA,GAAG,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AACjD;EACA,GAAG,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG;AAC3B;EACA,IAAI,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC;AAC/B;EACA,IAAI,MAAM,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG;AAClC;EACA,IAAI,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC;AAC9B;EACA,IAAI;AACJ;EACA,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC/B;EACA,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;AAClB;EACA,GAAG;AACH;EACA,EAAE,SAAS,kBAAkB,EAAE,KAAK,GAAG;AACvC;EACA,GAAG,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;AAC9C;EACA,GAAG,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC5E;EACA,GAAG,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;AACjC;EACA,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;AAC3B;EACA,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;AAClB;EACA,GAAG;AAOH;EACA,EAAE,SAAS,gBAAgB,EAAE,KAAK,GAAG;AACrC;EACA,GAAG,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG;AAC3B;EACA,IAAI,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC;AAC9B;EACA,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG;AAClC;EACA,IAAI,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC;AAC/B;EACA,IAAI;AACJ;EACA,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;AAClB;EACA,GAAG;AACH;EACA,EAAE,SAAS,aAAa,EAAE,KAAK,GAAG;AAClC;EACA,GAAG,IAAI,WAAW,GAAG,KAAK,CAAC;AAC3B;EACA,GAAG,SAAS,KAAK,CAAC,IAAI;AACtB;EACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE;EACtB,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;EACjC,KAAK,WAAW,GAAG,IAAI,CAAC;EACxB,KAAK,MAAM;AACX;EACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM;EAC1B,KAAK,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;EACnC,KAAK,WAAW,GAAG,IAAI,CAAC;EACxB,KAAK,MAAM;AACX;EACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI;EACxB,KAAK,GAAG,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;EACjC,KAAK,WAAW,GAAG,IAAI,CAAC;EACxB,KAAK,MAAM;AACX;EACA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK;EACzB,KAAK,GAAG,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;EACnC,KAAK,WAAW,GAAG,IAAI,CAAC;EACxB,KAAK,MAAM;AACX;EACA,IAAI;AACJ;EACA,GAAG,KAAK,WAAW,GAAG;AACtB;EACA;EACA,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B;EACA,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;AACnB;EACA,IAAI;AACJ;AACA;EACA,GAAG;AACH;EACA,EAAE,SAAS,sBAAsB,EAAE,KAAK,GAAG;AAC3C;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG;AACpC;EACA,IAAI,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AAC1E;EACA,IAAI,MAAM;AACV;EACA,IAAI,MAAM,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;EAC5E,IAAI,MAAM,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AAC5E;EACA,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5B;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,SAAS,mBAAmB,EAAE,KAAK,GAAG;AACxC;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG;AACpC;EACA,IAAI,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACvE;EACA,IAAI,MAAM;AACV;EACA,IAAI,MAAM,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;EAC5E,IAAI,MAAM,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AAC5E;EACA,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACzB;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,SAAS,qBAAqB,EAAE,KAAK,GAAG;AAC1C;EACA,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;EAClE,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;AAClE;EACA,GAAG,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AACnD;EACA,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;AACjC;EACA,GAAG;AACH;EACA,EAAE,SAAS,wBAAwB,EAAE,KAAK,GAAG;AAC7C;EACA,GAAG,KAAK,KAAK,CAAC,UAAU,GAAG,qBAAqB,EAAE,KAAK,EAAE,CAAC;AAC1D;EACA,GAAG,KAAK,KAAK,CAAC,SAAS,GAAG,mBAAmB,EAAE,KAAK,EAAE,CAAC;AACvD;EACA,GAAG;AACH;EACA,EAAE,SAAS,2BAA2B,EAAE,KAAK,GAAG;AAChD;EACA,GAAG,KAAK,KAAK,CAAC,UAAU,GAAG,qBAAqB,EAAE,KAAK,EAAE,CAAC;AAC1D;EACA,GAAG,KAAK,KAAK,CAAC,YAAY,GAAG,sBAAsB,EAAE,KAAK,EAAE,CAAC;AAC7D;EACA,GAAG;AACH;EACA,EAAE,SAAS,qBAAqB,EAAE,KAAK,GAAG;AAC1C;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG;AACpC;EACA,IAAI,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACxE;EACA,IAAI,MAAM;AACV;EACA,IAAI,MAAM,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;EAC5E,IAAI,MAAM,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AAC5E;EACA,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC1B;EACA,IAAI;AACJ;EACA,GAAG,WAAW,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;AACxF;EACA,GAAG,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC;AACpC;EACA,GAAG,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;AACpE;EACA,GAAG,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;AAClE;EACA,GAAG,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;AACjC;EACA,GAAG;AACH;EACA,EAAE,SAAS,kBAAkB,EAAE,KAAK,GAAG;AACvC;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG;AACpC;EACA,IAAI,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACrE;EACA,IAAI,MAAM;AACV;EACA,IAAI,MAAM,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;EAC5E,IAAI,MAAM,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AAC5E;EACA,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACvB;EACA,IAAI;AACJ;EACA,GAAG,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC5E;EACA,GAAG,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;AACjC;EACA,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;AAC3B;EACA,GAAG;AACH;EACA,EAAE,SAAS,oBAAoB,EAAE,KAAK,GAAG;AACzC;EACA,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;EAClE,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;AAClE;EACA,GAAG,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AACnD;EACA,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC/B;EACA,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;AAC/E;EACA,GAAG,QAAQ,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;AAC5B;EACA,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC/B;EACA,GAAG;AACH;EACA,EAAE,SAAS,uBAAuB,EAAE,KAAK,GAAG;AAC5C;EACA,GAAG,KAAK,KAAK,CAAC,UAAU,GAAG,oBAAoB,EAAE,KAAK,EAAE,CAAC;AACzD;EACA,GAAG,KAAK,KAAK,CAAC,SAAS,GAAG,kBAAkB,EAAE,KAAK,EAAE,CAAC;AACtD;EACA,GAAG;AACH;EACA,EAAE,SAAS,0BAA0B,EAAE,KAAK,GAAG;AAC/C;EACA,GAAG,KAAK,KAAK,CAAC,UAAU,GAAG,oBAAoB,EAAE,KAAK,EAAE,CAAC;AACzD;EACA,GAAG,KAAK,KAAK,CAAC,YAAY,GAAG,qBAAqB,EAAE,KAAK,EAAE,CAAC;AAC5D;EACA,GAAG;AAOH;EACA;EACA;EACA;AACA;EACA,EAAE,SAAS,aAAa,EAAE,KAAK,GAAG;AAClC;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACzC;EACA,GAAG,SAAS,KAAK,CAAC,WAAW;AAC7B;EACA,IAAI,KAAK,OAAO,CAAC;EACjB,IAAI,KAAK,KAAK;EACd,KAAK,WAAW,EAAE,KAAK,EAAE,CAAC;EAC1B,KAAK,MAAM;AACX;EACA;AACA;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,SAAS,aAAa,EAAE,KAAK,GAAG;AAClC;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACzC;EACA,GAAG,SAAS,KAAK,CAAC,WAAW;AAC7B;EACA,IAAI,KAAK,OAAO,CAAC;EACjB,IAAI,KAAK,KAAK;EACd,KAAK,WAAW,EAAE,KAAK,EAAE,CAAC;EAC1B,KAAK,MAAM;AACX;EACA;AACA;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,SAAS,WAAW,EAAE,KAAK,GAAG;AAChC;EACA,GAAG,SAAS,KAAK,CAAC,WAAW;AAC7B;EACA,IAAI,KAAK,OAAO,CAAC;EACjB,IAAI,KAAK,KAAK;EACd,KAAK,SAAS,CAAQ,CAAC,CAAC;EACxB,KAAK,MAAM;AACX;EACA;AACA;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,SAAS,WAAW,EAAE,KAAK,GAAG;AAChC;EACA;EACA,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B;EACA;EACA;AACA;EACA,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AACtE;EACA,GAAG,IAAI,WAAW,CAAC;AACnB;EACA,GAAG,SAAS,KAAK,CAAC,MAAM;AACxB;EACA,IAAI,KAAK,CAAC;AACV;EACA,KAAK,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;EAC3C,KAAK,MAAM;AACX;EACA,IAAI,KAAK,CAAC;AACV;EACA,KAAK,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;EAC7C,KAAK,MAAM;AACX;EACA,IAAI,KAAK,CAAC;AACV;EACA,KAAK,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;EAC5C,KAAK,MAAM;AACX;EACA,IAAI;AACJ;EACA,KAAK,WAAW,GAAG,EAAE,CAAC,CAAC;AACvB;EACA,IAAI;AACJ;EACA,GAAG,SAAS,WAAW;AACvB;EACA,IAAI,KAAK,KAAK,CAAC,KAAK;AACpB;EACA,KAAK,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,GAAG,OAAO;AAC9C;EACA,KAAK,oBAAoB,EAAE,KAAK,EAAE,CAAC;AACnC;EACA,KAAK,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AACzB;EACA,KAAK,MAAM;AACX;EACA,IAAI,KAAK,KAAK,CAAC,MAAM;AACrB;EACA,KAAK,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,GAAG;AAC7D;EACA,MAAM,KAAK,KAAK,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO;AAC9C;EACA,MAAM,kBAAkB,EAAE,KAAK,EAAE,CAAC;AAClC;EACA,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AACxB;EACA,MAAM,MAAM;AACZ;EACA,MAAM,KAAK,KAAK,CAAC,YAAY,KAAK,KAAK,GAAG,OAAO;AACjD;EACA,MAAM,qBAAqB,EAAE,KAAK,EAAE,CAAC;AACrC;EACA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;AAC3B;EACA,MAAM;AACN;EACA,KAAK,MAAM;AACX;EACA,IAAI,KAAK,KAAK,CAAC,GAAG;AAClB;EACA,KAAK,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,GAAG;AAC7D;EACA,MAAM,KAAK,KAAK,CAAC,YAAY,KAAK,KAAK,GAAG,OAAO;AACjD;EACA,MAAM,qBAAqB,EAAE,KAAK,EAAE,CAAC;AACrC;EACA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;AAC3B;EACA,MAAM,MAAM;AACZ;EACA,MAAM,KAAK,KAAK,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO;AAC9C;EACA,MAAM,kBAAkB,EAAE,KAAK,EAAE,CAAC;AAClC;EACA,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AACxB;EACA,MAAM;AACN;EACA,KAAK,MAAM;AACX;EACA,IAAI;AACJ;EACA,KAAK,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACxB;EACA,IAAI;AACJ;EACA,GAAG,KAAK,KAAK,KAAK,KAAK,CAAC,IAAI,GAAG;AAC/B;EACA,IAAI,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;EACpF,IAAI,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAChF;EACA,IAAI,KAAK,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC;AACvC;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,SAAS,WAAW,EAAE,KAAK,GAAG;AAChC;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACzC;EACA,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B;EACA,GAAG,SAAS,KAAK;AACjB;EACA,IAAI,KAAK,KAAK,CAAC,MAAM;AACrB;EACA,KAAK,KAAK,KAAK,CAAC,YAAY,KAAK,KAAK,GAAG,OAAO;AAChD;EACA,KAAK,qBAAqB,EAAE,KAAK,EAAE,CAAC;AACpC;EACA,KAAK,MAAM;AACX;EACA,IAAI,KAAK,KAAK,CAAC,KAAK;AACpB;EACA,KAAK,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,GAAG,OAAO;AAC9C;EACA,KAAK,oBAAoB,EAAE,KAAK,EAAE,CAAC;AACnC;EACA,KAAK,MAAM;AACX;EACA,IAAI,KAAK,KAAK,CAAC,GAAG;AAClB;EACA,KAAK,KAAK,KAAK,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO;AAC7C;EACA,KAAK,kBAAkB,EAAE,KAAK,EAAE,CAAC;AACjC;EACA,KAAK,MAAM;AACX;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,SAAS,SAAS,EAAE,KAAK,GAAG;AAC9B;EACA,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;EACtF,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAClF;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AAGzC;EACA,GAAG,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC;AACpC;EACA,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB;EACA,GAAG;AACH;EACA,EAAE,SAAS,YAAY,EAAE,KAAK,GAAG;AACjC;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE,GAAG,OAAO;AAC7H;EACA,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B;EACA,GAAG,KAAK,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC;AACtC;EACA,GAAG,gBAAgB,EAAE,KAAK,EAAE,CAAC;AAC7B;EACA,GAAG,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC;AACpC;EACA,GAAG;AACH;EACA,EAAE,SAAS,SAAS,EAAE,KAAK,GAAG;AAC9B;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO;AACtE;EACA,GAAG,aAAa,EAAE,KAAK,EAAE,CAAC;AAC1B;EACA,GAAG;AACH;EACA,EAAE,SAAS,YAAY,EAAE,KAAK,GAAG;AACjC;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACzC;EACA,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B;EACA,GAAG,SAAS,KAAK,CAAC,OAAO,CAAC,MAAM;AAChC;EACA,IAAI,KAAK,CAAC;AACV;EACA,KAAK,SAAS,KAAK,CAAC,OAAO,CAAC,GAAG;AAC/B;EACA,MAAM,KAAK,KAAK,CAAC,MAAM;AACvB;EACA,OAAO,KAAK,KAAK,CAAC,YAAY,KAAK,KAAK,GAAG,OAAO;AAClD;EACA,OAAO,sBAAsB,EAAE,KAAK,EAAE,CAAC;AACvC;EACA,OAAO,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC;AAClC;EACA,OAAO,MAAM;AACb;EACA,MAAM,KAAK,KAAK,CAAC,GAAG;AACpB;EACA,OAAO,KAAK,KAAK,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO;AAC/C;EACA,OAAO,mBAAmB,EAAE,KAAK,EAAE,CAAC;AACpC;EACA,OAAO,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC;AAC/B;EACA,OAAO,MAAM;AACb;EACA,MAAM;AACN;EACA,OAAO,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AAC1B;EACA,MAAM;AACN;EACA,KAAK,MAAM;AACX;EACA,IAAI,KAAK,CAAC;AACV;EACA,KAAK,SAAS,KAAK,CAAC,OAAO,CAAC,GAAG;AAC/B;EACA,MAAM,KAAK,KAAK,CAAC,SAAS;AAC1B;EACA,OAAO,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO;AAC7E;EACA,OAAO,wBAAwB,EAAE,KAAK,EAAE,CAAC;AACzC;EACA,OAAO,KAAK,GAAG,KAAK,CAAC,eAAe,CAAC;AACrC;EACA,OAAO,MAAM;AACb;EACA,MAAM,KAAK,KAAK,CAAC,YAAY;AAC7B;EACA,OAAO,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,GAAG,OAAO;AAChF;EACA,OAAO,2BAA2B,EAAE,KAAK,EAAE,CAAC;AAC5C;EACA,OAAO,KAAK,GAAG,KAAK,CAAC,kBAAkB,CAAC;AACxC;EACA,OAAO,MAAM;AACb;EACA,MAAM;AACN;EACA,OAAO,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AAC1B;EACA,MAAM;AACN;EACA,KAAK,MAAM;AACX;EACA,IAAI;AACJ;EACA,KAAK,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACxB;EACA,IAAI;AACJ;EACA,GAAG,KAAK,KAAK,KAAK,KAAK,CAAC,IAAI,GAAG;AAC/B;EACA,IAAI,KAAK,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC;AACvC;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,SAAS,WAAW,EAAE,KAAK,GAAG;AAChC;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACzC;EACA,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B;EACA,GAAG,SAAS,KAAK;AACjB;EACA,IAAI,KAAK,KAAK,CAAC,YAAY;AAC3B;EACA,KAAK,KAAK,KAAK,CAAC,YAAY,KAAK,KAAK,GAAG,OAAO;AAChD;EACA,KAAK,qBAAqB,EAAE,KAAK,EAAE,CAAC;AACpC;EACA,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;AACpB;EACA,KAAK,MAAM;AACX;EACA,IAAI,KAAK,KAAK,CAAC,SAAS;AACxB;EACA,KAAK,KAAK,KAAK,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO;AAC7C;EACA,KAAK,kBAAkB,EAAE,KAAK,EAAE,CAAC;AACjC;EACA,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;AACpB;EACA,KAAK,MAAM;AACX;EACA,IAAI,KAAK,KAAK,CAAC,eAAe;AAC9B;EACA,KAAK,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO;AAC3E;EACA,KAAK,uBAAuB,EAAE,KAAK,EAAE,CAAC;AACtC;EACA,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;AACpB;EACA,KAAK,MAAM;AACX;EACA,IAAI,KAAK,KAAK,CAAC,kBAAkB;AACjC;EACA,KAAK,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,GAAG,OAAO;AAC9E;EACA,KAAK,0BAA0B,EAAE,KAAK,EAAE,CAAC;AACzC;EACA,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;AACpB;EACA,KAAK,MAAM;AACX;EACA,IAAI;AACJ;EACA,KAAK,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACxB;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,SAAS,UAAU,EAAE,KAAK,GAAG;AAC/B;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AAGzC;EACA,GAAG,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC;AACpC;EACA,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB;EACA,GAAG;AACH;EACA,EAAE,SAAS,aAAa,EAAE,KAAK,GAAG;AAClC;EACA,GAAG,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACzC;EACA,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B;EACA,GAAG;AACH;EACA;AACA;EACA,EAAE,KAAK,CAAC,UAAU,CAAC,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;AACpE;EACA,EAAE,KAAK,CAAC,UAAU,CAAC,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;EACpE,EAAE,KAAK,CAAC,UAAU,CAAC,gBAAgB,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;AACjF;EACA,EAAE,KAAK,CAAC,UAAU,CAAC,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;EACtF,EAAE,KAAK,CAAC,UAAU,CAAC,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;EAC9D,EAAE,KAAK,CAAC,UAAU,CAAC,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;AACpF;EACA;AACA;EACA,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAChB;EACA,EAAE;AACF;EACA;;EC3qCA,MAAM,YAAY,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACxC;EACA,MAAM,WAAW,SAAStB,iBAAe,CAAC;AAC1C;EACA,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,GAAG;AACnC;EACA,EAAE,KAAK,EAAE,CAAC;AACV;EACA,EAAE,KAAK,UAAU,KAAK,SAAS,GAAG;AAClC;EACA,GAAG,OAAO,CAAC,IAAI,EAAE,wEAAwE,EAAE,CAAC;EAC5F,GAAG,UAAU,GAAG,QAAQ,CAAC;AACzB;EACA,GAAG;AACH;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;EACvB,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC/B;EACA;AACA;EACA,EAAE,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;EAC3B,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB;EACA,EAAE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;EAC1B,EAAE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC3B;EACA;AACA;EACA;AACA;EACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC;AACrB;EACA,EAAE,MAAM,GAAG,GAAG,QAAQ,CAAC;AACvB;EACA,EAAE,MAAM,cAAc,GAAG,IAAIqB,YAAU,EAAE,CAAC;EAC1C,EAAE,MAAM,YAAY,GAAG,IAAIC,SAAO,EAAE,CAAC;AACrC;EACA,EAAE,IAAI,CAAC,aAAa,GAAG,IAAID,YAAU,EAAE,CAAC;AACxC;EACA,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACvB;EACA,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;EAC5J,EAAE,IAAI,CAAC,UAAU,GAAG,IAAIC,SAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EAC3C,EAAE,IAAI,CAAC,cAAc,GAAG,IAAIA,SAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/C;EACA,EAAE,IAAI,CAAC,OAAO,GAAG,WAAW,KAAK,GAAG;AACpC;EACA,GAAG,KAAK,KAAK,CAAC,MAAM,GAAG;AACvB;EACA,IAAI,OAAO;AACX;EACA,IAAI;AACJ;EACA;AACA;EACA,GAAG,SAAS,KAAK,CAAC,IAAI;AACtB;EACA,IAAI,KAAK,WAAW,CAAC;EACrB,IAAI,KAAK,YAAY,EAAE,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC,MAAM;AAChE;EACA,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM;EACnD,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;AAChD;EACA,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;EAChD,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM;AACjD;EACA,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM;EAC9C,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;AAChD;EACA,IAAI,KAAK,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM;EACtD,IAAI,KAAK,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM;AAC1D;EACA,IAAI,KAAK,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM;EACxD,IAAI,KAAK,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM;AAC1D;EACA,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM;EACpD,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM;AACrD;EACA,IAAI;AACJ;EACA,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;EAC/B,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC/B;EACA,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,WAAW,KAAK,GAAG;AAClC;EACA,GAAG,SAAS,KAAK,CAAC,IAAI;AACtB;EACA,IAAI,KAAK,WAAW,CAAC;EACrB,IAAI,KAAK,YAAY,EAAE,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC,CAAC,MAAM;AAC/D;EACA,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM;EACnD,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;AAChD;EACA,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;EAChD,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM;AACjD;EACA,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM;EAC9C,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;AAChD;EACA,IAAI,KAAK,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM;EACtD,IAAI,KAAK,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM;AAC1D;EACA,IAAI,KAAK,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM;EACxD,IAAI,KAAK,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM;AAC1D;EACA,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM;EACpD,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM;AACrD;EACA,IAAI;AACJ;EACA,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;EAC/B,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC/B;EACA,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,SAAS,GAAG,WAAW,KAAK,GAAG;AACtC;EACA,GAAG,KAAK,IAAI,CAAC,UAAU,KAAK,QAAQ,GAAG;AACvC;EACA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AAC5B;EACA,IAAI;AACJ;EACA,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B;EACA,GAAG,KAAK,IAAI,CAAC,UAAU,GAAG;AAC1B;EACA,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC;AACxB;EACA,IAAI,MAAM;AACV;EACA,IAAI,SAAS,KAAK,CAAC,MAAM;AACzB;EACA,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM;EAC/C,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;AAC5C;EACA,KAAK;AACL;EACA,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAChC;EACA,IAAI;AACJ;EACA,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,SAAS,GAAG,WAAW,KAAK,GAAG;AACtC;EACA,GAAG,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG;AACpD;EACA,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;EACpD,IAAI,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;EAC9C,IAAI,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/C;EACA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,SAAS,EAAE,GAAG,SAAS,CAAC;EACnG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,EAAE,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,UAAU,KAAK,UAAU,CAAC;AACrG;EACA,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAChC;EACA,IAAI;AACJ;EACA,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,OAAO,GAAG,WAAW,KAAK,GAAG;AACpC;EACA,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B;EACA,GAAG,KAAK,IAAI,CAAC,UAAU,GAAG;AAC1B;EACA,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC;AACxB;EACA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;AAC1D;EACA,IAAI,MAAM;AACV;EACA,IAAI,SAAS,KAAK,CAAC,MAAM;AACzB;EACA,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM;EAC/C,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;AAC5C;EACA,KAAK;AACL;EACA,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAChC;EACA,IAAI;AACJ;EACA,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC/B;EACA,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,WAAW,KAAK,GAAG;AACnC;EACA,GAAG,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;EAChD,GAAG,MAAM,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC;AAC3C;EACA,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC;EAC5D,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC;EAC5D,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC;AAC5D;EACA,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;EAClJ,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC;AAC3D;EACA,GAAG;EACH,IAAI,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,GAAG;EACjE,IAAI,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,GAAG,GAAG;EACnE,KAAK;AACL;EACA,IAAI,KAAK,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC;EACxC,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;EACnD,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC/C;EACA,IAAI;AACJ;EACA,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,oBAAoB,GAAG,YAAY;AAC1C;EACA,GAAG,MAAM,OAAO,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,MAAM,IAAI,CAAC,WAAW,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AACvG;EACA,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;EACxE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;EACrE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AAC3D;EACA;AACA;EACA,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,oBAAoB,GAAG,YAAY;AAC1C;EACA,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;EACnF,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;EAClF,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AACpF;EACA;AACA;EACA,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,sBAAsB,GAAG,YAAY;AAC5C;EACA,GAAG,KAAK,IAAI,CAAC,UAAU,IAAI,QAAQ,GAAG;AACtC;EACA,IAAI,OAAO;EACX,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;EACxE,KAAK,MAAM,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;EACtE,KAAK,CAAC;AACN;EACA,IAAI,MAAM;AACV;EACA,IAAI,OAAO;EACX,KAAK,IAAI,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE;EACpD,KAAK,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;EACrB,KAAK,CAAC;AACN;EACA,IAAI;AACJ;EACA,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,OAAO,GAAG,YAAY;AAC7B;EACA,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;EACrE,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;EAClE,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;EAClE,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAC9D;EACA,GAAG,MAAM,CAAC,mBAAmB,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;EACrD,GAAG,MAAM,CAAC,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACjD;EACA,GAAG,CAAC;AACJ;EACA,EAAE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;EACjD,EAAE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;EACjD,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;EAC7C,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;EAC7C,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;AACzC;EACA,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;AACjE;EACA,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;EAC9D,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;EAC9D,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAC1D;EACA,EAAE,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;EACjD,EAAE,MAAM,CAAC,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7C;EACA,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;EAC9B,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC9B;EACA,EAAE;AACF;EACA,CAAC;AACD;EACA,SAAS,WAAW,EAAE,KAAK,GAAG;AAC9B;EACA,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;AACxB;EACA;;EC7SA;EACA;EACA;AACA;EACA,IAAI,UAAU,GAAG;AACjB;EACA,CAAC,QAAQ,EAAE;AACX;EACA,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;EAC7B,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;AAC3B;EACA,EAAE;AACF;EACA,CAAC,YAAY,YAAY,CAAC;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,CAAC;AACJ;EACA,CAAC,cAAc,YAAY,CAAC;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,CAAC;AACJ;EACA,CAAC;;EChCD,MAAM,IAAI,CAAC;AACX;EACA,CAAC,WAAW,GAAG;AACf;EACA;EACA,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACtB;EACA;EACA,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACxB;EACA;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB;EACA;EACA,EAAE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC9B;EACA,EAAE;AACF;EACA,CAAC,OAAO,wBAAwB,EAAE;AAClC;EACA,CAAC,MAAM,mEAAmE;AAC1E;EACA,EAAE,OAAO,CAAC,KAAK,EAAE,4DAA4D,EAAE,CAAC;AAChF;EACA,EAAE;AACF;EACA,CAAC;AACD;EACA;AACA;EACA,MAAM,OAAO,GAAG,IAAI+hB,oBAAkB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/D;EACA;AACA;EACA,MAAMzK,WAAS,GAAG,IAAIrR,gBAAc,EAAE,CAAC;AACvCqR,aAAS,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI9R,wBAAsB,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;AAC7G8R,aAAS,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI9R,wBAAsB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;AACtF;EACA,MAAM,cAAc,CAAC;AACrB;EACA,CAAC,WAAW,EAAE,QAAQ,GAAG;AACzB;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI2B,MAAI,EAAEmQ,WAAS,EAAE,QAAQ,EAAE,CAAC;AAC/C;EACA,EAAE;AACF;EACA,CAAC,OAAO,GAAG;AACX;EACA,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AAChC;EACA,EAAE;AACF;EACA,CAAC,MAAM,EAAE,QAAQ,GAAG;AACpB;EACA,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;AACzC;EACA,EAAE;AACF;EACA,CAAC,IAAI,QAAQ,GAAG;AAChB;EACA,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC7B;EACA,EAAE;AACF;EACA,CAAC,IAAI,QAAQ,EAAE,KAAK,GAAG;AACvB;EACA,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC9B;EACA,EAAE;AACF;EACA;;ECvEA,MAAM,UAAU,SAAS,IAAI,CAAC;AAC9B;EACA,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,GAAG;AAClC;EACA,EAAE,KAAK,EAAE,CAAC;AACV;EACA,EAAE,IAAI,CAAC,SAAS,GAAG,EAAE,SAAS,KAAK,SAAS,KAAK,SAAS,GAAG,UAAU,CAAC;AACxE;EACA,EAAE,KAAK,MAAM,YAAY1P,gBAAc,GAAG;AAC1C;EACA,GAAG,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACnC;EACA,GAAG,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;AAC1B;EACA,GAAG,MAAM,KAAK,MAAM,GAAG;AACvB;EACA,GAAG,IAAI,CAAC,QAAQ,GAAGH,eAAa,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC1D;EACA,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAIG,gBAAc,EAAE;AACvC;EACA,IAAI,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE;EAChD,IAAI,QAAQ,EAAE,IAAI,CAAC,QAAQ;EAC3B,IAAI,YAAY,EAAE,MAAM,CAAC,YAAY;EACrC,IAAI,cAAc,EAAE,MAAM,CAAC,cAAc;AACzC;EACA,IAAI,EAAE,CAAC;AACP;EACA,GAAG;AACH;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AACpD;EACA,EAAE;AACF;EACA,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,gCAAgC;AAC1E;EACA,EAAE,KAAK,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG;AACzC;EACA,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC;AAC9D;EACA,GAAG;AACH;EACA,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACvC;EACA,EAAE,KAAK,IAAI,CAAC,cAAc,GAAG;AAC7B;EACA,GAAG,QAAQ,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;EACpC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;AAClC;EACA,GAAG,MAAM;AACT;EACA,GAAG,QAAQ,CAAC,eAAe,EAAE,WAAW,EAAE,CAAC;EAC3C;EACA,GAAG,KAAK,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,gBAAgB,EAAE,CAAC;EACnH,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;AAClC;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA;;EC/DA,MAAM,QAAQ,SAAS,IAAI,CAAC;AAC5B;EACA,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG;AAC9B;EACA,EAAE,KAAK,EAAE,CAAC;AACV;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;EACrB,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACvB;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;EACpB,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB;EACA,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACvB;EACA,EAAE;AACF;EACA,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,gCAAgC;AAC1E;EACA,EAAE,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;EACxC,EAAE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC/B;EACA;AACA;EACA,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;EACvC,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;AACvC;EACA;AACA;EACA,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;EACxC,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;AACxC;EACA;AACA;EACA,EAAE,IAAI,UAAU,EAAE,UAAU,CAAC;AAC7B;EACA,EAAE,KAAK,IAAI,CAAC,OAAO,GAAG;AACtB;EACA,GAAG,UAAU,GAAG,CAAC,CAAC;EAClB,GAAG,UAAU,GAAG,CAAC,CAAC;AAClB;EACA,GAAG,MAAM;AACT;EACA,GAAG,UAAU,GAAG,CAAC,CAAC;EAClB,GAAG,UAAU,GAAG,CAAC,CAAC;AAClB;EACA,GAAG;AACH;EACA,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;EACxC,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;EACnF,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;EAC1E,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC;EAC/C,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;AAC1C;EACA;AACA;EACA,EAAE,QAAQ,CAAC,eAAe,EAAE,UAAU,EAAE,CAAC;EACzC,EAAE,KAAK,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;EACrC,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7C;EACA,EAAE,QAAQ,CAAC,eAAe,EAAE,WAAW,EAAE,CAAC;EAC1C,EAAE,KAAK,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;EACrC,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7C;EACA;AACA;EACA,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;EACzC,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;AACzC;EACA;AACA;EACA,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;EAC3C,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;EAChE,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;EAC1E,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;AAC1C;EACA,EAAE;AACF;EACA,CAAC;AACD;EACA,MAAM,aAAa,SAAS,IAAI,CAAC;AACjC;EACA,CAAC,WAAW,GAAG;AACf;EACA,EAAE,KAAK,EAAE,CAAC;AACV;EACA,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACzB;EACA,EAAE;AACF;EACA,CAAC,MAAM,EAAE,QAAQ,yDAAyD;AAC1E;EACA,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;EACpD,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;AAClD;EACA,EAAE;AACF;EACA;;EClFA,MAAM,cAAc,CAAC;AACrB;EACA,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG;AACvC;EACA,EAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC3B;EACA,EAAE,KAAK,YAAY,KAAK,SAAS,GAAG;AACpC;EACA,GAAG,MAAM,UAAU,GAAG;EACtB,IAAI,SAAS,EAAEnP,cAAY;EAC3B,IAAI,SAAS,EAAEA,cAAY;EAC3B,IAAI,MAAM,EAAEiB,YAAU;EACtB,IAAI,CAAC;AACL;EACA,GAAG,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI0F,SAAO,EAAE,EAAE,CAAC;EAClD,GAAG,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;EAC/C,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;EAC5B,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;AAC9B;EACA,GAAG,YAAY,GAAG,IAAIQ,mBAAiB,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC;EACvH,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,GAAG,oBAAoB,CAAC;AACpD;EACA,GAAG,MAAM;AACT;EACA,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;EACxB,GAAG,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;EACpC,GAAG,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC;AACtC;EACA,GAAG;AACH;EACA,EAAE,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;EACpC,EAAE,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;EAC5C,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,GAAG,oBAAoB,CAAC;AACzD;EACA,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;EACxC,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;AACvC;EACA,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC7B;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACnB;EACA;AACA;EACA,EAAE,KAAK,UAAU,KAAK,SAAS,GAAG;AAClC;EACA,GAAG,OAAO,CAAC,KAAK,EAAE,2CAA2C,EAAE,CAAC;AAChE;EACA,GAAG;AACH;EACA,EAAE,KAAK,UAAU,KAAK,SAAS,GAAG;AAClC;EACA,GAAG,OAAO,CAAC,KAAK,EAAE,2CAA2C,EAAE,CAAC;AAChE;EACA,GAAG;AACH;EACA,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,UAAU,EAAE,UAAU,EAAE,CAAC;AAC/C;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAC3B;EACA,EAAE;AACF;EACA,CAAC,WAAW,GAAG;AACf;EACA,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;EAC9B,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;EACrC,EAAE,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;AACzB;EACA,EAAE;AACF;EACA,CAAC,OAAO,EAAE,IAAI,GAAG;AACjB;EACA,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;EAC3B,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAClF;EACA,EAAE;AACF;EACA,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,GAAG;AAC3B;EACA,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;EACvC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAClF;EACA,EAAE;AACF;EACA,CAAC,UAAU,EAAE,IAAI,GAAG;AACpB;EACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;AAC5C;EACA,EAAE,KAAK,KAAK,KAAK,EAAE,CAAC,GAAG;AACvB;EACA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAClC;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,iBAAiB,EAAE,SAAS,GAAG;AAChC;EACA,EAAE,MAAM,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG;AAC9D;EACA,GAAG,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,GAAG;AACnC;EACA,IAAI,OAAO,KAAK,CAAC;AACjB;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,MAAM,EAAE,SAAS,GAAG;AACrB;EACA;AACA;EACA,EAAE,KAAK,SAAS,KAAK,SAAS,GAAG;AACjC;EACA,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AACrC;EACA,GAAG;AACH;EACA,EAAE,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;AAC9D;EACA,EAAE,IAAI,UAAU,GAAG,KAAK,CAAC;AACzB;EACA,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG;AAC3D;EACA,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;AACjC;EACA,GAAG,KAAK,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,SAAS;AAC1C;EACA,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAE,CAAC;EAChF,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AAC1F;EACA,GAAG,KAAK,IAAI,CAAC,SAAS,GAAG;AACzB;EACA,IAAI,KAAK,UAAU,GAAG;AACtB;EACA,KAAK,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;EAChD,KAAK,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;AACzD;EACA;EACA,KAAK,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;AACxD;EACA,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC;AACzF;EACA;EACA,KAAK,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;AACrD;EACA,KAAK;AACL;EACA,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;AACvB;EACA,IAAI;AACJ;EACA,GAAG,KAAK,QAAQ,KAAK,SAAS,GAAG;AACjC;EACA,IAAI,KAAK,IAAI,YAAY,QAAQ,GAAG;AACpC;EACA,KAAK,UAAU,GAAG,IAAI,CAAC;AACvB;EACA,KAAK,MAAM,KAAK,IAAI,YAAY,aAAa,GAAG;AAChD;EACA,KAAK,UAAU,GAAG,KAAK,CAAC;AACxB;EACA,KAAK;AACL;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,mBAAmB,EAAE,CAAC;AACvD;EACA,EAAE;AACF;EACA,CAAC,KAAK,EAAE,YAAY,GAAG;AACvB;EACA,EAAE,KAAK,YAAY,KAAK,SAAS,GAAG;AACpC;EACA,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAIR,SAAO,EAAE,EAAE,CAAC;EACvD,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;EACpD,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;EAC5B,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;AAC9B;EACA,GAAG,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;EAC7C,GAAG,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAC3F;EACA,GAAG;AACH;EACA,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;EAC/B,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;EAC/B,EAAE,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;EACpC,EAAE,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;AAC5C;EACA,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;EACxC,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;AACvC;EACA,EAAE;AACF;EACA,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG;AAC1B;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;EACtB,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AACxB;EACA,EAAE,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;EACxD,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;AAC1D;EACA,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;EAChE,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;AAChE;EACA,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG;AAClD;EACA,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;AAC/D;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,aAAa,EAAE,UAAU,GAAG;AAC7B;EACA,EAAE,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;AAChC;EACA,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AAC5C;EACA,EAAE;AACF;EACA,CAAC;AA8BD;EACA;AACA;EACgB,IAAI2iB,oBAAkB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG;AAC/D;EACA;AACA;EACA,MAAM,SAAS,GAAG,IAAI9b,gBAAc,EAAE,CAAC;EACvC,SAAS,CAAC,YAAY,EAAE,UAAU,EAAE,IAAIT,wBAAsB,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;EAC7G,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,IAAIA,wBAAsB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;;ECpRrF,MAAM,UAAU,SAAS,IAAI,CAAC;AAC9B;EACA,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,GAAG;AACxE;EACA,EAAE,KAAK,EAAE,CAAC;AACV;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;EACrB,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACvB;EACA,EAAE,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AAC3C;EACA,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;EAC/B,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,UAAU,KAAK,SAAS,KAAK,UAAU,GAAG,CAAC,CAAC;AAClE;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;EACpB,EAAE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;EAC1B,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;EACzB,EAAE,IAAI,CAAC,cAAc,GAAG,IAAIR,OAAK,EAAE,CAAC;AACpC;EACA,EAAE;AACF;EACA,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,gCAAgC;AAC1E;EACA,EAAE,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC;EAC1C,EAAE,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC;AAC7B;EACA,EAAE,IAAI,aAAa,EAAE,mBAAmB,CAAC;AACzC;EACA,EAAE,KAAK,IAAI,CAAC,gBAAgB,KAAK,SAAS,GAAG;AAC7C;EACA,GAAG,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;AACrD;EACA,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACvD;EACA,GAAG;AACH;EACA,EAAE,KAAK,IAAI,CAAC,UAAU,GAAG;AACzB;EACA,GAAG,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;EACjD,GAAG,aAAa,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;AAC5C;EACA,GAAG,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AAC9D;EACA,GAAG;AACH;EACA,EAAE,KAAK,IAAI,CAAC,UAAU,GAAG;AACzB;EACA,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;AACzB;EACA,GAAG;AACH;EACA,EAAE,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,UAAU,EAAE,CAAC;AACtE;EACA;EACA,EAAE,KAAK,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,gBAAgB,EAAE,CAAC;EAClH,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7C;EACA,EAAE,KAAK,IAAI,CAAC,UAAU,GAAG;AACzB;EACA,GAAG,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,EAAE,CAAC;AAChE;EACA,GAAG;AACH;EACA,EAAE,KAAK,IAAI,CAAC,gBAAgB,KAAK,SAAS,GAAG;AAC7C;EACA,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,mBAAmB,CAAC;AACrD;EACA,GAAG;AACH;EACA,EAAE,QAAQ,CAAC,SAAS,GAAG,YAAY,CAAC;AACpC;EACA,EAAE;AACF;EACA;;EC9Ee,SAAS,QAAQ,GAAG;EACnC,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,IAAI,UAAU,MAAM,EAAE;EAChD,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC/C,MAAM,IAAI,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChC;EACA,MAAM,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;EAC9B,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;EAC/D,UAAU,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;EACpC,SAAS;EACT,OAAO;EACP,KAAK;AACL;EACA,IAAI,OAAO,MAAM,CAAC;EAClB,GAAG,CAAC;AACJ;EACA,EAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;EACzC;;EChBe,SAAS,sBAAsB,CAAC,IAAI,EAAE;EACrD,EAAE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE;EACvB,IAAI,MAAM,IAAI,cAAc,CAAC,2DAA2D,CAAC,CAAC;EAC1F,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd;;ECNe,SAAS,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE;EAC9C,EAAE,eAAe,GAAG,MAAM,CAAC,cAAc,IAAI,SAAS,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE;EAC5E,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;EACpB,IAAI,OAAO,CAAC,CAAC;EACb,GAAG,CAAC;AACJ;EACA,EAAE,OAAO,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAC/B;;ECNe,SAAS,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE;EAC7D,EAAE,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;EAC3D,EAAE,QAAQ,CAAC,SAAS,CAAC,WAAW,GAAG,QAAQ,CAAC;EAC5C,EAAEkxJ,eAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;EACvC;;ECLe,SAAS,eAAe,CAAC,CAAC,EAAE;EAC3C,EAAE,eAAe,GAAG,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,GAAG,SAAS,eAAe,CAAC,CAAC,EAAE;EAChG,IAAI,OAAO,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;EACnD,GAAG,CAAC;EACJ,EAAE,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC;EAC5B;;ECLe,SAAS,iBAAiB,CAAC,EAAE,EAAE;EAC9C,EAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;EACpE;;ECFe,SAAS,yBAAyB,GAAG;EACpD,EAAE,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,KAAK,CAAC;EACzE,EAAE,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC;EAC3C,EAAE,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,OAAO,IAAI,CAAC;AAC/C;EACA,EAAE,IAAI;EACN,IAAI,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;EACnF,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG,CAAC,OAAO,CAAC,EAAE;EACd,IAAI,OAAO,KAAK,CAAC;EACjB,GAAG;EACH;;ECTe,SAAS,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;EACxD,EAAE,IAAIuR,yBAAwB,EAAE,EAAE;EAClC,IAAI,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;EACnC,GAAG,MAAM;EACT,IAAI,UAAU,GAAG,SAAS,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;EAC1D,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;EACrB,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;EAC5B,MAAM,IAAI,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;EACvD,MAAM,IAAI,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;EACvC,MAAM,IAAI,KAAK,EAAEvR,eAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;EAC3D,MAAM,OAAO,QAAQ,CAAC;EACtB,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;EAC3C;;ECbe,SAAS,gBAAgB,CAAC,KAAK,EAAE;EAChD,EAAE,IAAI,MAAM,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,IAAI,GAAG,EAAE,GAAG,SAAS,CAAC;AACjE;EACA,EAAE,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,KAAK,EAAE;EACtD,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAACwR,iBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;AACjE;EACA,IAAI,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;EACrC,MAAM,MAAM,IAAI,SAAS,CAAC,oDAAoD,CAAC,CAAC;EAChF,KAAK;AACL;EACA,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;EACvC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACtD;EACA,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;EACjC,KAAK;AACL;EACA,IAAI,SAAS,OAAO,GAAG;EACvB,MAAM,OAAOzuC,UAAS,CAAC,KAAK,EAAE,SAAS,EAAEk9B,eAAc,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC;EAC3E,KAAK;AACL;EACA,IAAI,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE;EACvD,MAAM,WAAW,EAAE;EACnB,QAAQ,KAAK,EAAE,OAAO;EACtB,QAAQ,UAAU,EAAE,KAAK;EACzB,QAAQ,QAAQ,EAAE,IAAI;EACtB,QAAQ,YAAY,EAAE,IAAI;EAC1B,OAAO;EACP,KAAK,CAAC,CAAC;EACP,IAAI,OAAOD,eAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EAC1C,GAAG,CAAC;AACJ;EACA,EAAE,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;EACjC;;ECyIA;AACA;EACA;EACA;EACA;EACA;EACA,IAAI,MAAM,GAAG;EACb,EAAE,GAAG,EAAE,mKAAmK;EAC1K,EAAE,GAAG,EAAE,sLAAsL;EAC7L,EAAE,GAAG,EAAE,uGAAuG;EAC9G,EAAE,GAAG,EAAE,iEAAiE;EACxE,EAAE,GAAG,EAAE,oHAAoH;EAC3H,EAAE,GAAG,EAAE,uJAAuJ;EAC9J,EAAE,GAAG,EAAE,2KAA2K;EAClL,EAAE,GAAG,EAAE,gHAAgH;EACvH,EAAE,GAAG,EAAE,kEAAkE;EACzE,EAAE,IAAI,EAAE,mGAAmG;EAC3G,EAAE,IAAI,EAAE,+FAA+F;EACvG,EAAE,IAAI,EAAE,8GAA8G;EACtH,EAAE,IAAI,EAAE,+GAA+G;EACvH,EAAE,IAAI,EAAE,2FAA2F;EACnG,EAAE,IAAI,EAAE,0FAA0F;EAClG,EAAE,IAAI,EAAE,iDAAiD;EACzD,EAAE,IAAI,EAAE,8DAA8D;EACtE,EAAE,IAAI,EAAE,0FAA0F;EAClG,EAAE,IAAI,EAAE,sFAAsF;EAC9F,EAAE,IAAI,EAAE,2GAA2G;EACnH,EAAE,IAAI,EAAE,8GAA8G;EACtH,EAAE,IAAI,EAAE,gGAAgG;EACxG,EAAE,IAAI,EAAE,+CAA+C;EACvD,EAAE,IAAI,EAAE,qFAAqF;EAC7F,EAAE,IAAI,EAAE,iDAAiD;EACzD,EAAE,IAAI,EAAE,kDAAkD;EAC1D,EAAE,IAAI,EAAE,wEAAwE;EAChF,EAAE,IAAI,EAAE,sEAAsE;EAC9E,EAAE,IAAI,EAAE,8FAA8F;EACtG,EAAE,IAAI,EAAE,wFAAwF;EAChG,EAAE,IAAI,EAAE,yHAAyH;EACjI,EAAE,IAAI,EAAE,gNAAgN;EACxN,EAAE,IAAI,EAAE,kIAAkI;EAC1I,EAAE,IAAI,EAAE,uFAAuF;EAC/F,EAAE,IAAI,EAAE,mGAAmG;EAC3G,EAAE,IAAI,EAAE,sCAAsC;EAC9C,EAAE,IAAI,EAAE,yBAAyB;EACjC,EAAE,IAAI,EAAE,+DAA+D;EACvE,EAAE,IAAI,EAAE,mDAAmD;EAC3D,EAAE,IAAI,EAAE,qDAAqD;EAC7D,EAAE,IAAI,EAAE,qEAAqE;EAC7E,EAAE,IAAI,EAAE,kEAAkE;EAC1E,EAAE,IAAI,EAAE,mGAAmG;EAC3G,EAAE,IAAI,EAAE,gGAAgG;EACxG,EAAE,IAAI,EAAE,8FAA8F;EACtG,EAAE,IAAI,EAAE,8FAA8F;EACtG,EAAE,IAAI,EAAE,0FAA0F;EAClG,EAAE,IAAI,EAAE,sFAAsF;EAC9F,EAAE,IAAI,EAAE,2GAA2G;EACnH,EAAE,IAAI,EAAE,wGAAwG;EAChH,EAAE,IAAI,EAAE,0FAA0F;EAClG,EAAE,IAAI,EAAE,qFAAqF;EAC7F,EAAE,IAAI,EAAE,iDAAiD;EACzD,EAAE,IAAI,EAAE,kDAAkD;EAC1D,EAAE,IAAI,EAAE,+CAA+C;EACvD,EAAE,IAAI,EAAE,wEAAwE;EAChF,EAAE,IAAI,EAAE,wEAAwE;EAChF,EAAE,IAAI,EAAE,sEAAsE;EAC9E,EAAE,IAAI,EAAE,8FAA8F;EACtG,EAAE,IAAI,EAAE,wFAAwF;EAChG,EAAE,IAAI,EAAE,sCAAsC;EAC9C,EAAE,IAAI,EAAE,uFAAuF;EAC/F,EAAE,IAAI,EAAE,mGAAmG;EAC3G,EAAE,IAAI,EAAE,0HAA0H;EAClI,EAAE,IAAI,EAAE,kNAAkN;EAC1N,EAAE,IAAI,EAAE,mIAAmI;EAC3I,EAAE,IAAI,EAAE,iDAAiD;EACzD,EAAE,IAAI,EAAE,8DAA8D;EACtE,EAAE,IAAI,EAAE,0GAA0G;EAClH,EAAE,IAAI,EAAE,2GAA2G;EACnH,EAAE,IAAI,EAAE,qFAAqF;EAC7F,EAAE,IAAI,EAAE,oFAAoF;EAC5F,EAAE,IAAI,EAAE,0CAA0C;EAClD,EAAE,IAAI,EAAE,yDAAyD;EACjE,EAAE,IAAI,EAAE,gEAAgE;EACxE,EAAE,IAAI,EAAE,iHAAiH;EACzH,EAAE,IAAI,EAAE,uEAAuE;EAC/E,EAAE,IAAI,EAAE,iEAAiE;EACzE,CAAC,CAAC;EACF;EACA;EACA;EACA;AACA;EACA,SAAS,MAAM,GAAG;EAClB,EAAE,KAAK,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE;EAC3F,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;EACjC,GAAG;AACH;EACA,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EAClB,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;EACb,EAAE,IAAI,CAAC,CAAC;AACR;EACA,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;EACvC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACpB,GAAG;AACH;EACA,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;EACzB,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;EAC/B,GAAG,CAAC,CAAC;EACL,EAAE,OAAO,CAAC,CAAC;EACX,CAAC;EACD;EACA;EACA;EACA;EACA;AACA;AACA;EACA,IAAI,aAAa,gBAAgB,UAAU,MAAM,EAAE;EACnD,EAAE,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AACxC;EACA,EAAE,SAAS,aAAa,CAAC,IAAI,EAAE;EAC/B,IAAI,IAAI,KAAK,CAAC;AACd;EACA,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE;EAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,+GAA+G,GAAG,IAAI,GAAG,wBAAwB,CAAC,IAAI,IAAI,CAAC;EAC3L,KAAK,MAAM;EACX,MAAM,KAAK,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE;EACzH,QAAQ,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;EAC3C,OAAO;AACP;EACA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;EAC3F,KAAK;AACL;EACA,IAAI,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;EACzC,GAAG;AACH;EACA,EAAE,OAAO,aAAa,CAAC;EACvB,CAAC,eAAe,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;AA+tDzC;EACA,SAAS,UAAU,CAAC,KAAK,EAAE;EAC3B,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;EACjC,CAAC;AACD;EACA,SAAS,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;EACxC,EAAE,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;EAC5E,CAAC;AACD;EACA,SAAS,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE;EACvD,EAAE,IAAI,OAAO,KAAK,KAAK,CAAC,EAAE;EAC1B,IAAI,OAAO,GAAG,YAAY,CAAC;EAC3B,GAAG;AACH;EACA,EAAE,IAAI,UAAU,KAAK,CAAC,EAAE;EACxB;EACA,IAAI,OAAO,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;EACpD,GAAG;AACH;AACA;EACA,EAAE,IAAI,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC;EAC9C,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC;EAC9D,EAAE,IAAI,eAAe,GAAG,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAClE,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC;EACd,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;EAChB,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC;AACf;EACA,EAAE,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;EACrC,IAAI,GAAG,GAAG,MAAM,CAAC;EACjB,IAAI,KAAK,GAAG,eAAe,CAAC;EAC5B,GAAG,MAAM,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;EAC5C,IAAI,GAAG,GAAG,eAAe,CAAC;EAC1B,IAAI,KAAK,GAAG,MAAM,CAAC;EACnB,GAAG,MAAM,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;EAC5C,IAAI,KAAK,GAAG,MAAM,CAAC;EACnB,IAAI,IAAI,GAAG,eAAe,CAAC;EAC3B,GAAG,MAAM,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;EAC5C,IAAI,KAAK,GAAG,eAAe,CAAC;EAC5B,IAAI,IAAI,GAAG,MAAM,CAAC;EAClB,GAAG,MAAM,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;EAC5C,IAAI,GAAG,GAAG,eAAe,CAAC;EAC1B,IAAI,IAAI,GAAG,MAAM,CAAC;EAClB,GAAG,MAAM,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;EAC5C,IAAI,GAAG,GAAG,MAAM,CAAC;EACjB,IAAI,IAAI,GAAG,eAAe,CAAC;EAC3B,GAAG;AACH;EACA,EAAE,IAAI,qBAAqB,GAAG,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC;EACrD,EAAE,IAAI,QAAQ,GAAG,GAAG,GAAG,qBAAqB,CAAC;EAC7C,EAAE,IAAI,UAAU,GAAG,KAAK,GAAG,qBAAqB,CAAC;EACjD,EAAE,IAAI,SAAS,GAAG,IAAI,GAAG,qBAAqB,CAAC;EAC/C,EAAE,OAAO,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;EAClD,CAAC;AACD;EACA,IAAI,aAAa,GAAG;EACpB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,YAAY,EAAE,QAAQ;EACxB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,KAAK,EAAE,KAAK;EACd,EAAE,cAAc,EAAE,QAAQ;EAC1B,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,cAAc,EAAE,QAAQ;EAC1B,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,OAAO,EAAE,QAAQ;EACnB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,cAAc,EAAE,QAAQ;EAC1B,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,OAAO,EAAE,QAAQ;EACnB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,YAAY,EAAE,QAAQ;EACxB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,OAAO,EAAE,QAAQ;EACnB,EAAE,OAAO,EAAE,QAAQ;EACnB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,OAAO,EAAE,QAAQ;EACnB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,OAAO,EAAE,QAAQ;EACnB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,YAAY,EAAE,QAAQ;EACxB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,oBAAoB,EAAE,QAAQ;EAChC,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,YAAY,EAAE,QAAQ;EACxB,EAAE,cAAc,EAAE,KAAK;EACvB,EAAE,cAAc,EAAE,KAAK;EACvB,EAAE,cAAc,EAAE,QAAQ;EAC1B,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,IAAI,EAAE,KAAK;EACb,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,OAAO,EAAE,KAAK;EAChB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,gBAAgB,EAAE,QAAQ;EAC5B,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,YAAY,EAAE,QAAQ;EACxB,EAAE,YAAY,EAAE,QAAQ;EACxB,EAAE,cAAc,EAAE,QAAQ;EAC1B,EAAE,eAAe,EAAE,QAAQ;EAC3B,EAAE,iBAAiB,EAAE,QAAQ;EAC7B,EAAE,eAAe,EAAE,QAAQ;EAC3B,EAAE,eAAe,EAAE,QAAQ;EAC3B,EAAE,YAAY,EAAE,QAAQ;EACxB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,OAAO,EAAE,QAAQ;EACnB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,aAAa,EAAE,KAAK;EACtB,EAAE,GAAG,EAAE,KAAK;EACZ,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,OAAO,EAAE,QAAQ;EACnB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,GAAG,EAAE,QAAQ;EACf,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,OAAO,EAAE,QAAQ;EACnB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,KAAK,EAAE,KAAK;EACd,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,MAAM,EAAE,KAAK;EACf,EAAE,WAAW,EAAE,QAAQ;EACvB,CAAC,CAAC;EACF;EACA;EACA;EACA;AACA;EACA,SAAS,SAAS,CAAC,KAAK,EAAE;EAC1B,EAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,OAAO,KAAK,CAAC;EAC9C,EAAE,IAAI,mBAAmB,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;EAChD,EAAE,OAAO,aAAa,CAAC,mBAAmB,CAAC,GAAG,GAAG,GAAG,aAAa,CAAC,mBAAmB,CAAC,GAAG,KAAK,CAAC;EAC/F,CAAC;AACD;EACA,IAAI,QAAQ,GAAG,mBAAmB,CAAC;EACnC,IAAI,YAAY,GAAG,mBAAmB,CAAC;EACvC,IAAI,eAAe,GAAG,mBAAmB,CAAC;EAC1C,IAAI,mBAAmB,GAAG,mBAAmB,CAAC;EAC9C,IAAI,QAAQ,GAAG,2DAA2D,CAAC;EAC3E,IAAI,SAAS,GAAG,0FAA0F,CAAC;EAC3G,IAAI,QAAQ,GAAG,2FAA2F,CAAC;EAC3G,IAAI,SAAS,GAAG,0HAA0H,CAAC;EAC3I;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA,SAAS,UAAU,CAAC,KAAK,EAAE;EAC3B,EAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;EACjC,IAAI,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;EAC/B,GAAG;AACH;EACA,EAAE,IAAI,eAAe,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AACzC;EACA,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;EACvC,IAAI,OAAO;EACX,MAAM,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACrE,MAAM,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACvE,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACtE,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;EAC3C,IAAI,IAAI,KAAK,GAAG,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;EAC1G,IAAI,OAAO;EACX,MAAM,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACrE,MAAM,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACvE,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACtE,MAAM,KAAK,EAAE,KAAK;EAClB,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE;EAC9C,IAAI,OAAO;EACX,MAAM,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACrE,MAAM,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACvE,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACtE,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE;EAClD,IAAI,IAAI,MAAM,GAAG,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3G;EACA,IAAI,OAAO;EACX,MAAM,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACrE,MAAM,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACvE,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACtE,MAAM,KAAK,EAAE,MAAM;EACnB,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,IAAI,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAClD;EACA,EAAE,IAAI,UAAU,EAAE;EAClB,IAAI,OAAO;EACX,MAAM,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC3C,MAAM,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC7C,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC5C,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,IAAI,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACrE;EACA,EAAE,IAAI,WAAW,EAAE;EACnB,IAAI,OAAO;EACX,MAAM,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC5C,MAAM,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC9C,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC7C,MAAM,KAAK,EAAE,UAAU,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;EAC5C,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,IAAI,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAClD;EACA,EAAE,IAAI,UAAU,EAAE;EAClB,IAAI,IAAI,GAAG,GAAG,QAAQ,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;EAC/C,IAAI,IAAI,UAAU,GAAG,QAAQ,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;EAC5D,IAAI,IAAI,SAAS,GAAG,QAAQ,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3D,IAAI,IAAI,cAAc,GAAG,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC;EAC7E,IAAI,IAAI,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACtD;EACA,IAAI,IAAI,CAAC,aAAa,EAAE;EACxB,MAAM,MAAM,IAAI,aAAa,CAAC,CAAC,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;EAClE,KAAK;AACL;EACA,IAAI,OAAO;EACX,MAAM,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC9C,MAAM,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAChD,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC/C,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,IAAI,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACrE;EACA,EAAE,IAAI,WAAW,EAAE;EACnB,IAAI,IAAI,IAAI,GAAG,QAAQ,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACjD;EACA,IAAI,IAAI,WAAW,GAAG,QAAQ,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;AAC9D;EACA,IAAI,IAAI,UAAU,GAAG,QAAQ,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;AAC7D;EACA,IAAI,IAAI,eAAe,GAAG,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC;AACjF;EACA,IAAI,IAAI,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACxD;EACA,IAAI,IAAI,CAAC,cAAc,EAAE;EACzB,MAAM,MAAM,IAAI,aAAa,CAAC,CAAC,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC;EACnE,KAAK;AACL;EACA,IAAI,OAAO;EACX,MAAM,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC/C,MAAM,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACjD,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAChD,MAAM,KAAK,EAAE,UAAU,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;EAC5C,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;EAC7B,CAAC;AAkFD;EACA;EACA;EACA;EACA;EACA,IAAI,cAAc,GAAG,SAAS,cAAc,CAAC,KAAK,EAAE;EACpD,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE;EACrG,IAAI,OAAO,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAChD,GAAG;AACH;EACA,EAAE,OAAO,KAAK,CAAC;EACf,CAAC,CAAC;AACF;EACA,SAAS,WAAW,CAAC,KAAK,EAAE;EAC5B,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;EAC/B,EAAE,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC5C,CAAC;AAkFD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;EACjC,EAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;EAC1F,IAAI,OAAO,cAAc,CAAC,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;EAC7F,GAAG,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE;EACrF,IAAI,OAAO,cAAc,CAAC,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;EAC7G,GAAG;AACH;EACA,EAAE,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;EAC7B,CAAC;AACD;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,SAAS,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE;EAChE,EAAE,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;EACzE,IAAI,IAAI,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;EAC1C,IAAI,OAAO,OAAO,GAAG,QAAQ,CAAC,GAAG,GAAG,GAAG,GAAG,QAAQ,CAAC,KAAK,GAAG,GAAG,GAAG,QAAQ,CAAC,IAAI,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,CAAC;EACzG,GAAG,MAAM,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;EACrJ,IAAI,OAAO,WAAW,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,GAAG,OAAO,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,CAAC;EAC/J,GAAG,MAAM,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,WAAW,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE;EACnI,IAAI,OAAO,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,UAAU,CAAC,GAAG,GAAG,GAAG,GAAG,UAAU,CAAC,KAAK,GAAG,GAAG,GAAG,UAAU,CAAC,IAAI,GAAG,GAAG,GAAG,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC;EACrM,GAAG;AACH;EACA,EAAE,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;EAC7B,CAAC;AAyDD;EACA;EACA;EACA;EACA;EACA,SAAS,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE;EACjC,EAAE,OAAO,SAAS,EAAE,GAAG;EACvB;EACA,IAAI,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;EACrE,IAAI,OAAO,QAAQ,CAAC,MAAM,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;EAC9F,GAAG,CAAC;EACJ,CAAC;AACD;AACA;EACA,SAAS,KAAK,CAAC,CAAC,EAAE;EAClB;EACA,EAAE,OAAO,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;EAClC,CAAC;AAsED;EACA,SAAS,KAAK,CAAC,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE;EACpD,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;EACjE,CAAC;AAyWD;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;EACA,SAAS,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE;EAChC,EAAE,IAAI,KAAK,KAAK,aAAa,EAAE,OAAO,KAAK,CAAC;EAC5C,EAAE,IAAI,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;EACtC,EAAE,IAAI,KAAK,GAAG,OAAO,WAAW,CAAC,KAAK,KAAK,QAAQ,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC;AAC5E;EACA,EAAE,IAAI,cAAc,GAAG,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE;EACjD,IAAI,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC;EACtE,GAAG,CAAC,CAAC;AACL;EACA,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC;EAC9B,CAAC;AACD;AACA;EACA,IAAI,cAAc,gBAAgB,KAAK;EACvC;EACA,CAAC,OAAO,CAAC;;ECzpGT;EACA;EACA;EACA,IAAI,MAAM,GAAG;EACb,IAAI,MAAM,EAAE;EACZ,QAAQ,IAAI,EAAE,UAAU,MAAM,EAAE;EAChC,YAAY,OAAO,MAAM,CAAC;EAC1B,SAAS;EACT,KAAK;EACL,IAAI,SAAS,EAAE;EACf,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,OAAO,MAAM,GAAG,MAAM,CAAC;EACnC,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,OAAO,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;EACzC,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;EACnC,gBAAgB,OAAO,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC;EAC7C,aAAa;EACb,YAAY,OAAO,CAAC,GAAG,IAAI,EAAE,MAAM,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EACxD,SAAS;EACT,KAAK;EACL,IAAI,KAAK,EAAE;EACX,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,OAAO,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EAC5C,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;EAClD,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;EACnC,gBAAgB,OAAO,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EACtD,aAAa;EACb,YAAY,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;EAC/D,SAAS;EACT,KAAK;EACL,IAAI,OAAO,EAAE;EACb,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,OAAO,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EACrD,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EAC3D,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;EACnC,gBAAgB,OAAO,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EAC/D,aAAa;EACb,YAAY,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;EACzE,SAAS;EACT,KAAK;EACL,IAAI,OAAO,EAAE;EACb,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,OAAO,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EAC9D,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;EACpE,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;EACnC,gBAAgB,OAAO,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EACxE,aAAa;EACb,YAAY,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;EACjF,SAAS;EACT,KAAK;EACL,IAAI,UAAU,EAAE;EAChB,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;EACxD,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;EACpD,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;EAC1D,SAAS;EACT,KAAK;EACL,IAAI,WAAW,EAAE;EACjB,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,OAAO,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;EACjE,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,OAAO,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;EACpE,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE;EAC9B,gBAAgB,OAAO,CAAC,CAAC;EACzB,aAAa;EACb,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE;EAC9B,gBAAgB,OAAO,CAAC,CAAC;EACzB,aAAa;EACb,YAAY,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;EACnC,gBAAgB,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;EACxD,aAAa;EACb,YAAY,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EAChE,SAAS;EACT,KAAK;EACL,IAAI,QAAQ,EAAE;EACd,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;EACtD,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;EACpD,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;EACnC,gBAAgB,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;EACnE,aAAa;EACb,YAAY,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;EACrE,SAAS;EACT,KAAK;EACL,IAAI,OAAO,EAAE;EACb,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE;EAC9B,gBAAgB,OAAO,CAAC,CAAC;EACzB,aAAa;EACb,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE;EAC9B,gBAAgB,OAAO,CAAC,CAAC;EACzB,aAAa;EACb,YAAY,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;EAC5F,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE;EAC9B,gBAAgB,OAAO,CAAC,CAAC;EACzB,aAAa;EACb,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE;EAC9B,gBAAgB,OAAO,CAAC,CAAC;EACzB,aAAa;EACb,YAAY,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EAC1F,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE;EAC9B,gBAAgB,OAAO,CAAC,CAAC;EACzB,aAAa;EACb,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE;EAC9B,gBAAgB,OAAO,CAAC,CAAC;EACzB,aAAa;EACb,YAAY,MAAM,IAAI,CAAC,CAAC;EACxB,YAAY,IAAI,MAAM,GAAG,CAAC,EAAE;EAC5B,gBAAgB,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;EACtG,aAAa;EACb,YAAY,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EACtG,SAAS;EACT,KAAK;EACL,IAAI,IAAI,EAAE;EACV,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,IAAI,CAAC,GAAG,OAAO,CAAC;EAC5B,YAAY,OAAO,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;EAC5D,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,IAAI,CAAC,GAAG,OAAO,CAAC;EAC5B,YAAY,OAAO,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;EAClE,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,IAAI,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC;EACpC,YAAY,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;EACnC,gBAAgB,OAAO,GAAG,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;EACxE,aAAa;EACb,YAAY,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EAC/E,SAAS;EACT,KAAK;EACL,IAAI,MAAM,EAAE;EACZ,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;EACrD,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE;EACnC,gBAAgB,OAAO,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EAChD,aAAa;EACb,iBAAiB,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE;EACxC,gBAAgB,OAAO,MAAM,IAAI,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;EACvE,aAAa;EACb,iBAAiB,IAAI,MAAM,GAAG,GAAG,GAAG,IAAI,EAAE;EAC1C,gBAAgB,OAAO,MAAM,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC;EAC1E,aAAa;EACb,iBAAiB;EACjB,gBAAgB,OAAO,MAAM,IAAI,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,QAAQ,CAAC;EAC7E,aAAa;EACb,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,IAAI,MAAM,GAAG,GAAG,EAAE;EAC9B,gBAAgB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1D,aAAa;EACb,YAAY,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;EACjE,SAAS;EACT,KAAK;EACL,CAAC,CAAC;AACF;EACA,IAAI,GAAG,CAAC;EACR;EACA;EACA;EACA;EACA,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE;EACrF,IAAI,GAAG,GAAG,YAAY;EACtB;EACA;EACA,QAAQ,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;EACpC;EACA,QAAQ,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;EAClD,KAAK,CAAC;EACN,CAAC;EACD;EACA,KAAK,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,KAAK,SAAS,EAAE;EAC9G;EACA;EACA,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;EACtD,CAAC;EACD;EACA,KAAK,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;EACjC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;EACnB,CAAC;EACD;EACA,KAAK;EACL,IAAI,GAAG,GAAG,YAAY;EACtB,QAAQ,OAAO,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;EACpC,KAAK,CAAC;EACN,CAAC;EACD,IAAI,KAAK,GAAG,GAAG,CAAC;AAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,KAAK,kBAAkB,YAAY;EACvC,IAAI,SAAS,KAAK,GAAG;EACrB,QAAQ,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;EAC1B,QAAQ,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;EAC3C,KAAK;EACL,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,YAAY;EACzC,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC;EACzB,QAAQ,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE;EAChE,YAAY,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;EAC1C,SAAS,CAAC,CAAC;EACX,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,GAAG,YAAY;EAC5C,QAAQ,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;EAC1B,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,UAAU,KAAK,EAAE;EAC3C,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;EAC5C,QAAQ,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;EAC7D,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,KAAK,EAAE;EAC9C,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;EAC3C,QAAQ,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;EAC5D,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,IAAI,EAAE,QAAQ,EAAE;EACvD,QAAQ,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,EAAE;EAChD,QAAQ,IAAI,QAAQ,KAAK,KAAK,CAAC,EAAE,EAAE,QAAQ,GAAG,KAAK,CAAC,EAAE;EACtD,QAAQ,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;EACjD,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;EACnC,YAAY,OAAO,KAAK,CAAC;EACzB,SAAS;EACT;EACA;EACA;EACA;EACA;EACA,QAAQ,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;EACpC,YAAY,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;EAC/C,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EACtD,gBAAgB,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;EACtD,gBAAgB,IAAI,SAAS,GAAG,CAAC,QAAQ,CAAC;EAC1C,gBAAgB,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE;EACnF,oBAAoB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;EACrD,iBAAiB;EACjB,aAAa;EACb,YAAY,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;EAClE,SAAS;EACT,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,OAAO,KAAK,CAAC;EACjB,CAAC,EAAE,CAAC,CAAC;AACL;EACA;EACA;EACA;EACA,IAAI,aAAa,GAAG;EACpB,IAAI,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE;EAC5B,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;EAC7B,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACtB,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC9B,QAAQ,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;EAC5C,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE;EACnB,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACrC,SAAS;EACT,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE;EACnB,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;EAC7C,SAAS;EACT,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;EACzD,KAAK;EACL,IAAI,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE;EAC5B,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC;EAClB,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;EAC7B,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;EAC1B,QAAQ,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;EAC/C,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;EACrC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAC/D,SAAS;EACT,QAAQ,OAAO,CAAC,CAAC;EACjB,KAAK;EACL,IAAI,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE;EAChC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;EAC7B,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACtB,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC9B,QAAQ,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC;EAChD,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;EAC3B,YAAY,IAAI,CAAC,GAAG,CAAC,EAAE;EACvB,gBAAgB,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;EAClD,aAAa;EACb,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;EACvF,SAAS;EACT,aAAa;EACb,YAAY,IAAI,CAAC,GAAG,CAAC,EAAE;EACvB,gBAAgB,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACtE,aAAa;EACb,YAAY,IAAI,CAAC,GAAG,CAAC,EAAE;EACvB,gBAAgB,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACjF,aAAa;EACb,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;EACzG,SAAS;EACT,KAAK;EACL,IAAI,KAAK,EAAE;EACX,QAAQ,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;EACrC,YAAY,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;EACtC,SAAS;EACT,QAAQ,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE;EACnC,YAAY,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;EACnD,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EAC7C,SAAS;EACT,QAAQ,SAAS,EAAE,CAAC,YAAY;EAChC,YAAY,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACxB,YAAY,OAAO,UAAU,CAAC,EAAE;EAChC,gBAAgB,IAAI,CAAC,GAAG,CAAC,CAAC;EAC1B,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;EAC1B,oBAAoB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;EAChC,iBAAiB;EACjB,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;EAC5C,oBAAoB,CAAC,IAAI,CAAC,CAAC;EAC3B,iBAAiB;EACjB,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACzB,gBAAgB,OAAO,CAAC,CAAC;EACzB,aAAa,CAAC;EACd,SAAS,GAAG;EACZ,QAAQ,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;EACjD,YAAY,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC;EACrC,YAAY,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC;EACrC,YAAY,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;EAC3B,YAAY,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;EAC5B,YAAY,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;EAC1G,SAAS;EACT,KAAK;EACL,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA,IAAI,QAAQ,kBAAkB,YAAY;EAC1C,IAAI,SAAS,QAAQ,GAAG;EACxB,KAAK;EACL,IAAI,QAAQ,CAAC,MAAM,GAAG,YAAY;EAClC,QAAQ,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC;EAClC,KAAK,CAAC;EACN,IAAI,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;EACzB,IAAI,OAAO,QAAQ,CAAC;EACpB,CAAC,EAAE,CAAC,CAAC;AACL;EACA,IAAI,SAAS,GAAG,IAAI,KAAK,EAAE,CAAC;AAC5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,KAAK,kBAAkB,YAAY;EACvC,IAAI,SAAS,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE;EACpC,QAAQ,IAAI,MAAM,KAAK,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE;EACtD,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;EAC/B,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;EAC7B,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;EAC/B,QAAQ,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;EAC7B,QAAQ,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;EAC/B,QAAQ,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;EAC7B,QAAQ,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;EACrC,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;EAC9B,QAAQ,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;EAChC,QAAQ,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;EACzB,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;EAC3B,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;EAChC,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;EAC/B,QAAQ,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;EAC5B,QAAQ,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;EAC5B,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;EAClD,QAAQ,IAAI,CAAC,sBAAsB,GAAG,aAAa,CAAC,MAAM,CAAC;EAC3D,QAAQ,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;EACjC,QAAQ,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;EAC3C,QAAQ,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;EACrC,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;EACrC,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;EAC9B,KAAK;EACL,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,YAAY;EACxC,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC;EACxB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,GAAG,YAAY;EAC5C,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC;EAC/B,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,YAAY;EAC3C,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC;EAC9B,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,UAAU,UAAU,EAAE,QAAQ,EAAE;EACzD;EACA;EACA;EACA;EACA,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;EACpD,QAAQ,IAAI,QAAQ,KAAK,SAAS,EAAE;EACpC,YAAY,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;EACtC,SAAS;EACT,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAU,CAAC,EAAE;EAC5C,QAAQ,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;EAC3B,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE;EAC5C,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;EAC7B,YAAY,OAAO,IAAI,CAAC;EACxB,SAAS;EACT;EACA,QAAQ,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;EAC7C,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC;EAC3C,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;EAC5B;EACA;EACA,YAAY,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;EACnC,YAAY,KAAK,IAAI,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE;EAC1D,gBAAgB,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;EACzD,gBAAgB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;EAChF,aAAa;EACb,SAAS;EACT,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;EAC/B,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;EAC/B,QAAQ,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;EAC3C,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;EACrC,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,KAAK,QAAQ,GAAG,KAAK,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;EACxH,QAAQ,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;EAC3C,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;EACzG,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,UAAU,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE;EACxG,QAAQ,KAAK,IAAI,QAAQ,IAAI,UAAU,EAAE;EACzC,YAAY,IAAI,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;EAC/C,YAAY,IAAI,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;EAC9D,YAAY,IAAI,QAAQ,GAAG,iBAAiB,GAAG,OAAO,GAAG,OAAO,UAAU,CAAC;EAC3E,YAAY,IAAI,mBAAmB,GAAG,CAAC,iBAAiB,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;EAChG;EACA;EACA,YAAY,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,UAAU,EAAE;EACrE,gBAAgB,SAAS;EACzB,aAAa;EACb;EACA,YAAY,IAAI,mBAAmB,EAAE;EACrC,gBAAgB,IAAI,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;EACrD,gBAAgB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;EAC5C,oBAAoB,SAAS;EAC7B,iBAAiB;EACjB;EACA,gBAAgB,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;EAC5F;EACA,gBAAgB,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;EACtE,aAAa;EACb;EACA,YAAY,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,iBAAiB,KAAK,UAAU,IAAI,CAAC,mBAAmB,EAAE;EACpG,gBAAgB,YAAY,CAAC,QAAQ,CAAC,GAAG,iBAAiB,GAAG,EAAE,GAAG,EAAE,CAAC;EACrE;EACA,gBAAgB,KAAK,IAAI,IAAI,IAAI,UAAU,EAAE;EAC7C;EACA;EACA,oBAAoB,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;EACpE,iBAAiB;EACjB,gBAAgB,kBAAkB,CAAC,QAAQ,CAAC,GAAG,iBAAiB,GAAG,EAAE,GAAG,EAAE,CAAC;EAC3E;EACA;EACA,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;EAC9H,aAAa;EACb,iBAAiB;EACjB;EACA,gBAAgB,IAAI,OAAO,YAAY,CAAC,QAAQ,CAAC,KAAK,WAAW,EAAE;EACnE,oBAAoB,YAAY,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;EACxD,iBAAiB;EACjB,gBAAgB,IAAI,CAAC,iBAAiB,EAAE;EACxC;EACA;EACA,oBAAoB,YAAY,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;EAClD,iBAAiB;EACjB,gBAAgB,IAAI,mBAAmB,EAAE;EACzC;EACA;EACA,oBAAoB,kBAAkB,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC;EAC1F,iBAAiB;EACjB,qBAAqB;EACrB,oBAAoB,kBAAkB,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;EAC/E,iBAAiB;EACjB,aAAa;EACb,SAAS;EACT,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,YAAY;EACvC,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;EACnC,YAAY,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;EACxC,YAAY,IAAI,CAAC,iBAAiB,EAAE,CAAC;EACrC,SAAS;EACT,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;EAC9B,YAAY,OAAO,IAAI,CAAC;EACxB,SAAS;EACT;EACA,QAAQ,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EAChD,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;EAChC,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;EAC/B,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE;EAClC,YAAY,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;EAC/C,SAAS;EACT,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,YAAY;EACtC,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;EAC7B,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;EAC9B,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE;EAC5C,QAAQ,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,EAAE;EAChD,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;EAChD,YAAY,OAAO,IAAI,CAAC;EACxB,SAAS;EACT,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;EAC9B,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;EAChC;EACA,QAAQ,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EAChD,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,IAAI,EAAE;EAC7C,QAAQ,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,EAAE;EAChD,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;EACjD,YAAY,OAAO,IAAI,CAAC;EACxB,SAAS;EACT,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;EAC/B,QAAQ,IAAI,CAAC,UAAU,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;EACnD,QAAQ,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;EAC7B;EACA,QAAQ,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;EAC7C,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,YAAY;EACpD,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,EAAE;EAClG,YAAY,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;EAC1C,SAAS;EACT,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,KAAK,EAAE;EAC7C,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;EAC5B,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,MAAM,EAAE;EAC9C,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;EACjC,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,KAAK,EAAE;EAC9C,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;EACpC,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;EAC7B,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,MAAM,EAAE;EACpD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;EACvC,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,UAAU,IAAI,EAAE;EAC3C,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;EAC1B,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,cAAc,EAAE;EACvD,QAAQ,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;EAC9C,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,aAAa,GAAG,UAAU,qBAAqB,EAAE;EACrE,QAAQ,IAAI,CAAC,sBAAsB,GAAG,qBAAqB,CAAC;EAC5D,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,YAAY;EACxC,QAAQ,IAAI,MAAM,GAAG,EAAE,CAAC;EACxB,QAAQ,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;EACtD,YAAY,MAAM,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;EACvC,SAAS;EACT,QAAQ,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;EACrC,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,UAAU,QAAQ,EAAE;EAClD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;EACzC,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAU,QAAQ,EAAE;EACnD,QAAQ,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;EAC1C,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAU,QAAQ,EAAE;EACnD,QAAQ,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;EAC1C,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,QAAQ,EAAE;EACrD,QAAQ,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC;EAC5C,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,QAAQ,EAAE;EACjD,QAAQ,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;EACxC,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN;EACA;EACA;EACA;EACA;EACA,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,IAAI,EAAE,SAAS,EAAE;EACxD,QAAQ,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,EAAE;EAChD,QAAQ,IAAI,SAAS,KAAK,KAAK,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAAC,EAAE;EACvD,QAAQ,IAAI,IAAI,CAAC,SAAS;EAC1B,YAAY,OAAO,IAAI,CAAC;EACxB,QAAQ,IAAI,QAAQ,CAAC;EACrB,QAAQ,IAAI,OAAO,CAAC;EACpB,QAAQ,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;EACvD,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;EAChD,YAAY,IAAI,IAAI,GAAG,OAAO;EAC9B,gBAAgB,OAAO,KAAK,CAAC;EAC7B,YAAY,IAAI,SAAS;EACzB,gBAAgB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;EACjC,SAAS;EACT,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;EAC9B,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;EACpC,YAAY,OAAO,IAAI,CAAC;EACxB,SAAS;EACT,QAAQ,IAAI,IAAI,CAAC,qBAAqB,KAAK,KAAK,EAAE;EAClD,YAAY,IAAI,IAAI,CAAC,gBAAgB,EAAE;EACvC,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;EACpD,aAAa;EACb,YAAY,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;EAC9C,SAAS;EACT,QAAQ,OAAO,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC;EAC5D,QAAQ,OAAO,GAAG,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;EACpE,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;EAClD;EACA,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;EACxF,QAAQ,IAAI,IAAI,CAAC,iBAAiB,EAAE;EACpC,YAAY,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAC1D,SAAS;EACT,QAAQ,IAAI,OAAO,KAAK,CAAC,EAAE;EAC3B,YAAY,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE;EAClC,gBAAgB,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;EAC5C,oBAAoB,IAAI,CAAC,OAAO,EAAE,CAAC;EACnC,iBAAiB;EACjB;EACA,gBAAgB,KAAK,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE;EAC1D,oBAAoB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;EACtF,wBAAwB,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;EACzD;EACA;EACA,4BAA4B,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;EACtG,qBAAqB;EACrB,oBAAoB,IAAI,IAAI,CAAC,KAAK,EAAE;EACpC,wBAAwB,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;EACjE,qBAAqB;EACrB,oBAAoB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;EACpF,iBAAiB;EACjB,gBAAgB,IAAI,IAAI,CAAC,KAAK,EAAE;EAChC,oBAAoB,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;EACrD,iBAAiB;EACjB,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;EACzD,oBAAoB,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC;EACnE,iBAAiB;EACjB,qBAAqB;EACrB,oBAAoB,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;EAC7D,iBAAiB;EACjB,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,EAAE;EAC5C,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;EACzD,iBAAiB;EACjB,gBAAgB,OAAO,IAAI,CAAC;EAC5B,aAAa;EACb,iBAAiB;EACjB,gBAAgB,IAAI,IAAI,CAAC,mBAAmB,EAAE;EAC9C,oBAAoB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;EAC3D,iBAAiB;EACjB,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,EAAE;EAC1G;EACA;EACA,oBAAoB,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;EACnF,iBAAiB;EACjB,gBAAgB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;EACxC,gBAAgB,OAAO,KAAK,CAAC;EAC7B,aAAa;EACb,SAAS;EACT,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,UAAU,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE;EAC5F,QAAQ,KAAK,IAAI,QAAQ,IAAI,UAAU,EAAE;EACzC;EACA,YAAY,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;EACtD,gBAAgB,SAAS;EACzB,aAAa;EACb,YAAY,IAAI,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;EACpD,YAAY,IAAI,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;EAC3C,YAAY,IAAI,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;EAChE,YAAY,IAAI,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;EAChD,YAAY,IAAI,mBAAmB,GAAG,CAAC,YAAY,IAAI,UAAU,CAAC;EAClE,YAAY,IAAI,mBAAmB,EAAE;EACrC,gBAAgB,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;EAC5E,aAAa;EACb,iBAAiB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,EAAE;EACrD;EACA;EACA,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;EAC7E,aAAa;EACb,iBAAiB;EACjB;EACA,gBAAgB,GAAG,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EAC5D;EACA,gBAAgB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;EAC7C;EACA;EACA,oBAAoB,OAAO,CAAC,QAAQ,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,KAAK,IAAI,KAAK,CAAC;EACtE,iBAAiB;EACjB,aAAa;EACb,SAAS;EACT,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,oBAAoB,GAAG,UAAU,KAAK,EAAE,GAAG,EAAE;EACjE,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;EACrC,YAAY,OAAO,GAAG,CAAC;EACvB,SAAS;EACT,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EAC5D,YAAY,OAAO,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;EAC3C,SAAS;EACT,aAAa;EACb,YAAY,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;EACnC,SAAS;EACT,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,yBAAyB,GAAG,UAAU,QAAQ,EAAE;EACpE,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;EACpD,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;EACjD,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;EAC1C,YAAY,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;EACzG,SAAS;EACT,aAAa;EACb,YAAY,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;EAC1E,SAAS;EACT,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;EACxC,KAAK,CAAC;EACN,IAAI,OAAO,KAAK,CAAC;EACjB,CAAC,EAAE,CAAC,CAAC;AACL;EACA,IAAI,OAAO,GAAG,QAAQ,CAAC;AACvB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC7B;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,KAAK,GAAG,SAAS,CAAC;EACtB;EACA;EACA;EACA;EACA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EACtC,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EAC5C,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EAChC,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EACtC,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EACtC,IAAIP,SAAO,GAAG;EACd,IAAI,MAAM,EAAE,MAAM;EAClB,IAAI,KAAK,EAAE,KAAK;EAChB,IAAI,aAAa,EAAE,aAAa;EAChC,IAAI,GAAG,EAAE,KAAK;EACd,IAAI,QAAQ,EAAE,QAAQ;EACtB,IAAI,MAAM,EAAE,MAAM;EAClB,IAAI,KAAK,EAAE,KAAK;EAChB,IAAI,OAAO,EAAE,OAAO;EACpB,IAAI,MAAM,EAAE,MAAM;EAClB,IAAI,SAAS,EAAE,SAAS;EACxB,IAAI,GAAG,EAAE,GAAG;EACZ,IAAI,MAAM,EAAE,MAAM;EAClB,IAAI,MAAM,EAAE,MAAM;EAClB,CAAC;;EC/xBD,IAAIvwI,OAAK,IAAI,UAAU,CAAC,EAAE;EAC1B,EAAE,OAAO,CAAC,YAAY,QAAQ,GAAG,CAAC;EAClC,IAAI,OAAO,CAAC,KAAK,QAAQ,GAAG,UAAU,GAAG,EAAE;EAC3C,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;EAClB,GAAG;EACH,IAAI,UAAU,GAAG,EAAE;EACnB,IAAI,OAAO,CAAC,CAAC;EACb,GAAG,CAAC;EACJ,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;ECMH,SAAS,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC;EACxC,EAAE,IAAI,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;EAChD,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC;AAC/B;EACA,EAAE,SAAS,KAAK,GAAG;EACnB,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;AACtC;EACA,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE;EAClC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;EAC/C,KAAK,MAAM;EACX,MAAM,OAAO,GAAG,IAAI,CAAC;EACrB,MAAM,IAAI,CAAC,SAAS,EAAE;EACtB,QAAQ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EAC3C,QAAQ,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;EAC9B,OAAO;EACP,KAAK;EACL,GACA;EACA,EAAE,IAAI,SAAS,GAAG,UAAU;EAC5B,IAAI,OAAO,GAAG,IAAI,CAAC;EACnB,IAAI,IAAI,GAAG,SAAS,CAAC;EACrB,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;EAC3B,IAAI,IAAI,OAAO,GAAG,SAAS,IAAI,CAAC,OAAO,CAAC;EACxC,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;EACpD,IAAI,IAAI,OAAO,EAAE;EACjB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EACzC,MAAM,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;EAC5B,KAAK;AACL;EACA,IAAI,OAAO,MAAM,CAAC;EAClB,GAAG,CAAC;AACJ;EACA,EAAE,SAAS,CAAC,KAAK,GAAG,WAAW;EAC/B,IAAI,IAAI,OAAO,EAAE;EACjB,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;EAC5B,MAAM,OAAO,GAAG,IAAI,CAAC;EACrB,KAAK;EACL,GAAG,CAAC;EACJ;EACA,EAAE,SAAS,CAAC,KAAK,GAAG,WAAW;EAC/B,IAAI,IAAI,OAAO,EAAE;EACjB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EACzC,MAAM,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;EAC5B;EACA,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;EAC5B,MAAM,OAAO,GAAG,IAAI,CAAC;EACrB,KAAK;EACL,GAAG,CAAC;AACJ;EACA,EAAE,OAAO,SAAS,CAAC;EACnB,CACA;EACA;EACA,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC7B;MACA,UAAc,GAAG,QAAQ;;ECnEzB,SAAS,eAAe,CAAC,QAAQ,EAAE,WAAW,EAAE;EAChD,EAAE,IAAI,EAAE,QAAQ,YAAY,WAAW,CAAC,EAAE;EAC1C,IAAI,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;EAC7D,GAAG;EACH,CAAC;AACD;EACA,SAASu0H,gBAAc,CAAC,GAAG,EAAE,CAAC,EAAE;EAChC,EAAE,OAAOE,iBAAe,CAAC,GAAG,CAAC,IAAIC,uBAAqB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAIC,6BAA2B,CAAC,GAAG,EAAE,CAAC,CAAC,IAAIC,kBAAgB,EAAE,CAAC;EAC5H,CAAC;AACD;EACA,SAASH,iBAAe,CAAC,GAAG,EAAE;EAC9B,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC;EACrC,CAAC;AACD;EACA,SAASC,uBAAqB,CAAC,GAAG,EAAE,CAAC,EAAE;EACvC,EAAE,IAAI,EAAE,GAAG,GAAG,KAAK,OAAO,MAAM,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;AAC/F;EACA,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,OAAO;EACzB,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;EAChB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;EAChB,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;AACjB;EACA,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACb;EACA,EAAE,IAAI;EACN,IAAI,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE;EACtE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1B;EACA,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM;EACxC,KAAK;EACL,GAAG,CAAC,OAAO,GAAG,EAAE;EAChB,IAAI,EAAE,GAAG,IAAI,CAAC;EACd,IAAI,EAAE,GAAG,GAAG,CAAC;EACb,GAAG,SAAS;EACZ,IAAI,IAAI;EACR,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;EACtD,KAAK,SAAS;EACd,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC;EACvB,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAASC,6BAA2B,CAAC,CAAC,EAAE,MAAM,EAAE;EAChD,EAAE,IAAI,CAAC,CAAC,EAAE,OAAO;EACjB,EAAE,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,OAAOS,mBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;EACjE,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;EACzD,EAAE,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;EAC9D,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,KAAK,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EACvD,EAAE,IAAI,CAAC,KAAK,WAAW,IAAI,0CAA0C,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAOA,mBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;EACnH,CAAC;AACD;EACA,SAASA,mBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE;EACrC,EAAE,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;AACxD;EACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACxE;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAASR,kBAAgB,GAAG;EAC5B,EAAE,MAAM,IAAI,SAAS,CAAC,2IAA2I,CAAC,CAAC;EACnK,CAAC;AACD;EACA,IAAI,IAAI,GAAG,SAAS,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;EACrC,EAAE,IAAI,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;EACpC,MAAM,UAAU,GAAG,YAAY,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,YAAY;EAChE,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa;EAC7C,MAAM,aAAa,GAAG,kBAAkB,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,kBAAkB;EAC/E,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ;EACnC,MAAM,QAAQ,GAAG,aAAa,KAAK,KAAK,CAAC,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,aAAa,CAAC;AACxF;EACA,EAAE,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9B;EACA,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACnB,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;EAC/B,EAAE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;EACrC,EAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;EAC3B,CAAC,CAAC;AACF;EACA,SAAS,KAAK,EAAE,KAAK,EAAE;EACvB,EAAE,IAAI,eAAe,GAAG,KAAK,CAAC,SAAS;EACvC,MAAM,SAAS,GAAG,eAAe,KAAK,KAAK,CAAC,GAAG,YAAY;EAC3D,IAAI,OAAO,EAAE,CAAC;EACd,GAAG,GAAG,eAAe;EACrB,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK;EAC/B,MAAM,QAAQ,GAAG,WAAW,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,WAAW;EAC1D,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO;EACnC,MAAM,OAAO,GAAG,aAAa,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,aAAa;EAC7D,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO;EACnC,MAAM,OAAO,GAAG,aAAa,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,aAAa;EAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI;EAC7B,MAAM,MAAM,GAAG,UAAU,KAAK,KAAK,CAAC,GAAG,YAAY,EAAE,GAAG,UAAU;EAClE,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM;EACjC,MAAM,QAAQ,GAAG,YAAY,KAAK,KAAK,CAAC,GAAG,YAAY,EAAE,GAAG,YAAY,CAAC;EACzE;EACA,EAAE,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,UAAU,QAAQ,EAAE;EAC5D,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;EAClD,GAAG,CAAC,CAAC;EACL,EAAE,OAAO,YAAY;EACrB,IAAI,IAAI,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;EACzF;EACA,IAAI,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,YAAY,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS;EAChG,IAAI;EACJ,MAAM,WAAW,EAAE,KAAK;EACxB,KAAK,CAAC,CAAC;AACP;EACA,IAAI,IAAI,YAAY,GAAG,EAAE,CAAC;AAC1B;EACA,IAAI,SAAS,IAAI,CAAC,WAAW,EAAE;EAC/B,MAAM,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;EACvC,MAAM,MAAM,EAAE,CAAC;EACf,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;AACL;EACA,IAAI,IAAI,UAAU,GAAG,SAAS,UAAU,CAAC,WAAW,EAAE,OAAO,EAAE;EAC/D,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;EACrD,MAAM,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;EAC/B,KAAK,CAAC;AACN;EACA,IAAI,IAAI,MAAM,GAAGjB,UAAQ,CAAC,YAAY;EACtC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;EAC9B,QAAQ,OAAO;EACf,OAAO;AACP;EACA,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;EAC/C,MAAM,YAAY,GAAG,EAAE,CAAC;EACxB,KAAK,EAAE,CAAC,CAAC,CAAC;AACV;EACA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EAClC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;AACzC;EACA,MAAM,SAAS,UAAU,CAAC,KAAK,EAAE;EACjC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI;EAC7B,YAAY,mBAAmB,GAAG,KAAK,CAAC,aAAa;EACrD,YAAY,QAAQ,GAAG,mBAAmB,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,mBAAmB;EACnF,YAAY,cAAc,GAAG,KAAK,CAAC,QAAQ;EAC3C,YAAY,QAAQ,GAAG,cAAc,KAAK,KAAK,CAAC,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,cAAc;EAC/F,YAAY,gBAAgB,GAAG,KAAK,CAAC,UAAU;EAC/C,YAAY,UAAU,GAAG,gBAAgB,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,gBAAgB,CAAC;EAC/E,QAAQ,OAAO,UAAU,CAAC,EAAE;EAC5B,UAAU,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;AACnC;EACA,UAAU,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;EACjC,YAAY,OAAO,MAAM,CAAC;EAC1B,WAAW;AACX;AACA;EACA,UAAU,IAAI,GAAG,GAAG,CAAC,KAAK,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC;AACrD;EACA,UAAU,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;EAC5B,UAAU,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAClD;EACA,UAAU,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AAC9E;EACA,UAAU,IAAI,QAAQ,EAAE;EACxB,YAAY,MAAM,EAAE,CAAC;EACrB,WAAW;AACX;EACA,UAAU,OAAO,IAAI,CAAC;EACtB,SAAS,CAAC;EACV,OAAO;EACP,KAAK,CAAC,CAAC;AACP;EACA,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,UAAU,EAAE;EACvD,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,YAAY;EACrC,QAAQ,IAAI,mBAAmB,CAAC;AAChC;EACA,QAAQ,KAAK,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE;EACjG,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;EACvC,SAAS;AACT;EACA,QAAQ,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;EACvH,OAAO,CAAC;EACR,KAAK,CAAC,CAAC;AACP;EACA,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE;EACrD,MAAM,IAAI,KAAK,GAAGY,gBAAc,CAAC,KAAK,EAAE,CAAC,CAAC;EAC1C,UAAU,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;EAC1B,UAAU,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5B;EACA,MAAM,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;EACxC,KAAK,CAAC,CAAC;AACP;EACA,IAAI,IAAI,CAAC,UAAU,GAAG,YAAY;EAClC,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EACpC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EACzC,OAAO,CAAC,CAAC;EACT,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK,CAAC;AACN;AACA;EACA,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;AACtB;EACA,IAAI,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;AAC7B;EACA,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG,CAAC;EACJ;;EC9LA,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;EAC/B,EAAE,IAAI,GAAG,KAAK,KAAK,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;EAC/B,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B;EACA,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;EAC/C,IAAI,OAAO;EACX,GAAG;AACH;EACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EACvE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;EAC9C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AAC1B;EACA,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;EAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;EACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;EAChD,KAAK,MAAM;EACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EAC9B,KAAK;EACL,GAAG,MAAM;EACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EAC5B,GAAG;AACH;EACA,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;EACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC;EACnC,GAAG,MAAM;EACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;EACpD,GAAG;EACH,CAAC;AACD;EACA,IAAI,QAAQ,GAAG,kXAAkX,CAAC;EAClY,WAAW,CAAC,QAAQ,CAAC,CAAC;AACtB;EACA,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;EAC1C,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE;EAClB,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE;EACpC,MAAM,KAAK,EAAE,KAAK;EAClB,MAAM,UAAU,EAAE,IAAI;EACtB,MAAM,YAAY,EAAE,IAAI;EACxB,MAAM,QAAQ,EAAE,IAAI;EACpB,KAAK,CAAC,CAAC;EACP,GAAG,MAAM;EACT,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;EACrB,GAAG;AACH;EACA,EAAE,OAAO,GAAG,CAAC;EACb,CAAC;AACD;EACA,SAAS,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE;EAChC,EAAE,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,qBAAqB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,2BAA2B,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC;EAC5H,CAAC;AACD;EACA,SAAS,kBAAkB,CAAC,GAAG,EAAE;EACjC,EAAE,OAAO,kBAAkB,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,2BAA2B,CAAC,GAAG,CAAC,IAAI,kBAAkB,EAAE,CAAC;EACtH,CAAC;AACD;EACA,SAAS,kBAAkB,CAAC,GAAG,EAAE;EACjC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;EACxD,CAAC;AACD;EACA,SAAS,eAAe,CAAC,GAAG,EAAE;EAC9B,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC;EACrC,CAAC;AACD;EACA,SAAS,gBAAgB,CAAC,IAAI,EAAE;EAChC,EAAE,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC5H,CAAC;AACD;EACA,SAAS,qBAAqB,CAAC,GAAG,EAAE,CAAC,EAAE;EACvC,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,OAAO,MAAM,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;AAC3G;EACA,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,OAAO;EACzB,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;EAChB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;EAChB,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;AACjB;EACA,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACb;EACA,EAAE,IAAI;EACN,IAAI,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE;EACtE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1B;EACA,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM;EACxC,KAAK;EACL,GAAG,CAAC,OAAO,GAAG,EAAE;EAChB,IAAI,EAAE,GAAG,IAAI,CAAC;EACd,IAAI,EAAE,GAAG,GAAG,CAAC;EACb,GAAG,SAAS;EACZ,IAAI,IAAI;EACR,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;EACtD,KAAK,SAAS;EACd,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC;EACvB,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,2BAA2B,CAAC,CAAC,EAAE,MAAM,EAAE;EAChD,EAAE,IAAI,CAAC,CAAC,EAAE,OAAO;EACjB,EAAE,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,OAAO,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;EACjE,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;EACzD,EAAE,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;EAC9D,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,KAAK,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EACvD,EAAE,IAAI,CAAC,KAAK,WAAW,IAAI,0CAA0C,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;EACnH,CAAC;AACD;EACA,SAAS,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE;EACrC,EAAE,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;AACxD;EACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACxE;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,kBAAkB,GAAG;EAC9B,EAAE,MAAM,IAAI,SAAS,CAAC,sIAAsI,CAAC,CAAC;EAC9J,CAAC;AACD;EACA,SAAS,gBAAgB,GAAG;EAC5B,EAAE,MAAM,IAAI,SAAS,CAAC,2IAA2I,CAAC,CAAC;EACnK,CAAC;AACD;EACA,IAAIytB,OAAK,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;EACvC,EAAE;EACF,EAAE,aAAa,EAAErwJ,eAAa;EAC9B,EAAE,KAAK,EAAEE,OAAK;EACd;EACA,EAAE,kBAAkB,EAAE8K,oBAAkB;EACxC,EAAE,SAAS,EAAE,SAAS;EACtB,EAAE,aAAa,EAAE5C,eAAa;EAC9B,EAAE,OAAO,EAAE/f,SAAO;EAClB,EAAE,OAAO,EAAEY,SAAO;EAClB,EAAE,IAAI,EAAEG,MAAI;EACZ,EAAE,KAAK,EAAE6E,OAAK;EACd,EAAE,IAAI,EAAEmC,MAAI;EACZ,EAAE,cAAc,EAAE6V,gBAAc;EAChC,EAAE,iBAAiB,EAAE/X,mBAAiB;EACtC,EAAE,QAAQ,EAAE/P,UAAQ;EACpB,EAAE,eAAe,EAAEwJ,iBAAe;EAClC,EAAE,KAAK,EAAE,KAAK;EACd,EAAE,UAAU,EAAEqB,YAAU;EACxB,EAAE,SAAS,EAAE,SAAS;EACtB,EAAE,KAAK,EAAE,KAAK;EACd,CAAC,CAAC;EACF,IAAI,kBAAkB,GAAG06J,KAAO,CAAC;EACjC,EAAE,KAAK,EAAE;EACT,IAAI,KAAK,EAAE;EACX,MAAM,SAAS,EAAE,MAAM,CAAC,UAAU;EAClC,MAAM,QAAQ,EAAE,SAAS,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE;EAC3D,QAAQ,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;EAClD,OAAO;EACP,KAAK;EACL,IAAI,MAAM,EAAE;EACZ,MAAM,SAAS,EAAE,MAAM,CAAC,WAAW;EACnC,MAAM,QAAQ,EAAE,SAAS,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;EAC7D,QAAQ,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;EACrD,OAAO;EACP,KAAK;EACL,IAAI,eAAe,EAAE;EACrB,MAAM,SAAS,EAAE,SAAS;EAC1B,KAAK;EACL,IAAI,kBAAkB,EAAE,EAAE;EAC1B,IAAI,uBAAuB,EAAE,EAAE;EAC/B,IAAI,WAAW,EAAE;EACjB,MAAM,SAAS,EAAE,IAAI;EACrB,KAAK;EACL,IAAI,SAAS,EAAE;EACf,MAAM,SAAS,EAAE,KAAK;EACtB,KAAK;EACL,IAAI,OAAO,EAAE;EACb,MAAM,SAAS,EAAE,EAAE;EACnB,KAAK;EACL,IAAI,wBAAwB,EAAE;EAC9B,MAAM,SAAS,EAAE,IAAI;EACrB,MAAM,QAAQ,EAAE,SAAS,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE;EAC5C;EACA,QAAQ,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;EAC9B,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,SAAS,GAAG,EAAE,CAAC;EAChE,OAAO;EACP,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,kBAAkB,EAAE;EACxB,MAAM,SAAS,EAAE,CAAC;EAClB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,oBAAoB,EAAE;EAC1B,MAAM,SAAS,EAAE,SAAS,QAAQ,GAAG;EACrC,QAAQ,OAAO,CAAC,CAAC,CAAC;EAClB,OAAO;EACP,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL;EACA,IAAI,WAAW,EAAE;EACjB,MAAM,SAAS,EAAE,SAAS,QAAQ,GAAG;EACrC,QAAQ,OAAO,IAAI,CAAC;EACpB,OAAO;EACP,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL;EACA,IAAI,cAAc,EAAE;EACpB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,eAAe,EAAE;EACrB,MAAM,SAAS,EAAE,KAAK;EACtB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,cAAc,EAAE;EACpB,MAAM,SAAS,EAAE,KAAK;EACtB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,OAAO,EAAE;EACb,MAAM,SAAS,EAAE,SAAS,QAAQ,GAAG,EAAE;EACvC,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,OAAO,EAAE;EACb,MAAM,SAAS,EAAE,SAAS,QAAQ,GAAG,EAAE;EACvC,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,YAAY,EAAE;EAClB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,GAAG;EACH,EAAE,OAAO,EAAE;EACX,IAAI,IAAI,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE;EAC/B,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE;EAC7B,QAAQ,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC/E;EACA,QAAQ,KAAK,CAAC,sBAAsB,GAAG,KAAK,CAAC,sBAAsB,CAAC,MAAM,EAAE;EAC5E,UAAU,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;EAC3D,QAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;EAClD,UAAU,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;EACrD,SAAS,CAAC,CAAC;AACX;EACA,QAAQ,IAAI,KAAK,CAAC,wBAAwB,EAAE;EAC5C;EACA,UAAU,IAAI,SAAS,GAAG,IAAI,CAAC;AAC/B;EACA,UAAU,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;EACjE,YAAY,IAAI,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;EAClH,cAAc,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;EACjD,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;EACpC,cAAc,OAAO,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;EACpE,aAAa,CAAC,CAAC;EACf,YAAY,IAAI,YAAY,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;EACxE,YAAY,SAAS,GAAG,YAAY,GAAG,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC;EAClE,YAAY,KAAK,CAAC,iBAAiB,GAAG,YAAY,GAAG,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC;EAC/E,WAAW;AACX;EACA,UAAU,IAAI,SAAS,KAAK,KAAK,CAAC,QAAQ,EAAE;EAC5C,YAAY,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;EACrD,YAAY,KAAK,CAAC,WAAW,CAAC,SAAS,GAAG,SAAS,GAAG8E,OAAU,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;EAC7G,YAAY,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC;EACvC,WAAW;EACX,SAAS;AACT;EACA,QAAQoI,SAAK,CAAC,MAAM,EAAE,CAAC;EACvB,OAAO;AACP;EACA,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;EACL,IAAI,aAAa,EAAE,SAAS,aAAa,CAAC,KAAK,EAAE;EACjD,MAAM,IAAI,iBAAiB,GAAG,KAAK,CAAC,UAAU;EAC9C,UAAU,CAAC,GAAG,iBAAiB,CAAC,CAAC;EACjC,UAAU,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;EAClC,MAAM,OAAO;EACb,QAAQ,CAAC,EAAE,CAAC;EACZ,QAAQ,CAAC,EAAE,CAAC;EACZ,OAAO,CAAC;EACR,KAAK;EACL,IAAI,cAAc,EAAE,SAAS,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB,EAAE;EACzF,MAAM,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAChC;EACA,MAAM,IAAI,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE;EACzC,QAAQ,IAAI,QAAQ,GAAG,QAAQ,CAAC;EAChC,QAAQ,IAAI,WAAW,GAAG,MAAM,IAAI;EACpC,UAAU,CAAC,EAAE,CAAC;EACd,UAAU,CAAC,EAAE,CAAC;EACd,UAAU,CAAC,EAAE,CAAC;EACd,SAAS,CAAC;AACV;EACA,QAAQ,IAAI,CAAC,kBAAkB,EAAE;EACjC;EACA,UAAU,YAAY,CAAC,QAAQ,CAAC,CAAC;EACjC,UAAU,SAAS,CAAC,WAAW,CAAC,CAAC;EACjC,SAAS,MAAM;EACf,UAAU,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;EAC1D,UAAU,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC;EACtC,UAAU,IAAIA,SAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,MAAM,CAACA,SAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC;AACrI;EACA,UAAU,IAAIA,SAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,kBAAkB,GAAG,CAAC,CAAC,CAAC,MAAM,CAACA,SAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;EAC5I,SAAS;AACT;EACA,QAAQ,OAAO,IAAI,CAAC;EACpB,OAAO;AACP;AACA;EACA,MAAM,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE;EAChD,QAAQ,MAAM,EAAE,SAAS,EAAE;EAC3B,OAAO,CAAC,CAAC;AACT;EACA,MAAM,SAAS,YAAY,CAAC,GAAG,EAAE;EACjC,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;EACrB,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC;EACrB,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACtB,QAAQ,IAAI,CAAC,KAAK,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;EACnD,QAAQ,IAAI,CAAC,KAAK,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;EACnD,QAAQ,IAAI,CAAC,KAAK,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;EACnD,OAAO;AACP;EACA,MAAM,SAAS,SAAS,CAAC,MAAM,EAAE;EACjC,QAAQ,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAIP,OAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;EAChF,OAAO;AACP;EACA,MAAM,SAAS,SAAS,GAAG;EAC3B,QAAQ,OAAO,MAAM,CAAC,MAAM,CAAC,IAAIA,OAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;EACrH,OAAO;EACP,KAAK;EACL,IAAI,SAAS,EAAE,SAAS,SAAS,CAAC,KAAK,EAAE;EACzC,MAAM,IAAI,kBAAkB,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACrG,MAAM,IAAI,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAC3F;EACA,MAAM,KAAK,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE;EACtH,QAAQ,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;EAC7C,OAAO;AACP;EACA,MAAM,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;EAC7F,KAAK;EACL,IAAI,SAAS,EAAE,SAAS,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE;EAC/C,MAAM,IAAI,kBAAkB,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACrG,MAAM,IAAI,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;EAC3F;EACA,MAAM,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAChC;EACA,MAAM,IAAI,IAAI,EAAE;EAChB,QAAQ,IAAI,MAAM,GAAG,IAAIA,OAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAChD;EACA,QAAQ,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE;EAC1G,UAAU,IAAI,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;EAC7C,cAAc,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;EAClC,cAAc,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAChC;EACA,UAAU,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;EACjF,YAAY,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;EACnD,WAAW,CAAC,CAAC,CAAC,CAAC;EACf,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACjB;EACA,QAAQ,IAAI,SAAS,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC;EACtE,QAAQ,IAAI,iBAAiB,GAAG,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;EAClF,QAAQ,IAAI,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;EACjE,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;AACrE;EACA,QAAQ,IAAI,QAAQ,GAAG,CAAC,EAAE;EAC1B,UAAU,IAAI,iBAAiB,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC;EAC5G,UAAU,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC;EAC7E,SAAS;EACT,OAAO;AACP;EACA,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;EACL,IAAI,OAAO,EAAE,SAAS,OAAO,CAAC,KAAK,EAAE;EACrC,MAAM,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,YAAY;EACtG,QAAQ,OAAO,IAAI,CAAC;EACpB,OAAO,CAAC;EACR,MAAM,IAAI,GAAG,GAAG,IAAIA,OAAK,CAAC,IAAI,CAAC,IAAIA,OAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,OAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;EACvF,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;EACjD,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;EACpC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EAClC,QAAQ,OAAO,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;EACvC,OAAO,CAAC,CAAC;AACT;EACA,MAAM,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;EAC7F,QAAQ,OAAO,eAAe,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAChE,OAAO,CAAC,CAAC,CAAC,CAAC;EACX,KAAK;EACL,IAAI,eAAe,EAAE,SAAS,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;EAC9D,MAAM,IAAI,GAAG,GAAG,IAAIA,OAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EAC3C,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACjC;EACA,MAAM,OAAO;EACb;EACA,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC;EACxC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;EAC1C,OAAO,CAAC;EACR,KAAK;EACL,IAAI,cAAc,EAAE,SAAS,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;EACrE,MAAM,IAAI,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC3F,MAAM,IAAI,SAAS,GAAG,IAAIA,OAAK,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;EAC1G,MAAM,IAAI,SAAS,GAAG,IAAIA,OAAK,CAAC,SAAS,EAAE,CAAC;EAC5C,MAAM,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;EACvD,MAAM,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAIA,OAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;EAChF,KAAK;EACL,IAAI,mBAAmB,EAAE,SAAS,mBAAmB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE;EACnE,MAAM,IAAI,SAAS,GAAG,IAAIA,OAAK,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;EAC9F,MAAM,IAAI,SAAS,GAAG,IAAIA,OAAK,CAAC,SAAS,EAAE,CAAC;EAC5C,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,kBAAkB,CAAC;AACjE;EACA,MAAM,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;EACvD,MAAM,OAAO,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EAC7D,KAAK;EACL,IAAI,QAAQ,EAAE,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvC,MAAM,OAAO,KAAK,CAAC,QAAQ,CAAC;EAC5B,KAAK;EACL,IAAI,KAAK,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE;EACjC,MAAM,OAAO,KAAK,CAAC,KAAK,CAAC;EACzB,KAAK;EACL,IAAI,MAAM,EAAE,SAAS,MAAM,CAAC,KAAK,EAAE;EACnC,MAAM,OAAO,KAAK,CAAC,MAAM,CAAC;EAC1B,KAAK;EACL,IAAI,sBAAsB,EAAE,SAAS,sBAAsB,CAAC,KAAK,EAAE;EACnE,MAAM,OAAO,KAAK,CAAC,sBAAsB,CAAC;EAC1C,KAAK;EACL,IAAI,QAAQ,EAAE,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvC,MAAM,OAAO,KAAK,CAAC,QAAQ,CAAC;EAC5B,KAAK;EACL,IAAI,UAAU,EAAE,SAAS,UAAU,CAAC,KAAK,EAAE;EAC3C,MAAM,OAAO,KAAK,CAAC,QAAQ,CAAC;EAC5B,KAAK;AACL;EACA,GAAG;EACH,EAAE,SAAS,EAAE,SAAS,SAAS,GAAG;EAClC,IAAI,OAAO;EACX,MAAM,KAAK,EAAE,IAAIA,OAAK,CAAC,KAAK,EAAE;EAC9B,MAAM,MAAM,EAAE,IAAIA,OAAK,CAAC,kBAAkB,EAAE;EAC5C,MAAM,KAAK,EAAE,IAAIA,OAAK,CAAC,KAAK,EAAE;EAC9B,KAAK,CAAC;EACN,GAAG;EACH,EAAE,IAAI,EAAE,SAAS,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE;EACtC,IAAI,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE;EACtF,QAAQ,iBAAiB,GAAG,KAAK,CAAC,WAAW;EAC7C,QAAQ,WAAW,GAAG,iBAAiB,KAAK,KAAK,CAAC,GAAG,WAAW,GAAG,iBAAiB;EACpF,QAAQ,oBAAoB,GAAG,KAAK,CAAC,cAAc;EACnD,QAAQ,cAAc,GAAG,oBAAoB,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,oBAAoB;EACpF,QAAQ,oBAAoB,GAAG,KAAK,CAAC,cAAc;EACnD,QAAQ,cAAc,GAAG,oBAAoB,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,oBAAoB;EACpF,QAAQ,qBAAqB,GAAG,KAAK,CAAC,mBAAmB;EACzD,QAAQ,mBAAmB,GAAG,qBAAqB,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,qBAAqB,CAAC;AAC9F;EACA;EACA,IAAI,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;AAC3B;EACA,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;EACzE,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,GAAG,iBAAiB,CAAC;EAClD,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;AAChD;EACA,IAAI,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;EAC/E,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,gBAAgB,CAAC;EAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,GAAG;EAChC,MAAM,KAAK,EAAE,sEAAsE;EACnF,MAAM,SAAS,EAAE,sEAAsE;EACvF,MAAM,GAAG,EAAE,wEAAwE;EACnF,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;EACzB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI,GAAG,MAAM,CAAC;AACpE;EACA,IAAI,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;EACtD,IAAI,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;EACrD,IAAI,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACnD;EACA,IAAI,KAAK,CAAC,UAAU,GAAG,IAAIA,OAAK,CAAC,OAAO,EAAE,CAAC;EAC3C,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5B;EACA,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EAC5B,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,MAAM,EAAE;EAC7D,MAAM,OAAO,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;EACpE;EACA,QAAQ,MAAM,KAAK,aAAa,KAAK,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;AACpE;EACA,QAAQ,CAAC,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,IAAI,KAAK,aAAa,KAAK,EAAE,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC;EAC5G,YAAY,EAAE,CAAC,WAAW,KAAK,OAAO,IAAI,EAAE,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;EACvH,UAAU,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACjC,SAAS,CAAC,CAAC;EACX,YAAY,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;AAC5C;EACA,QAAQ,IAAI,KAAK,CAAC,wBAAwB,EAAE;EAC5C;EACA,UAAU,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EAClD,UAAU,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;EACtD,UAAU,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AACrD;EACA,UAAU,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;EAC5E,UAAU,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;EAC7E,UAAU,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG,EAAE,UAAU,CAAC,CAAC;EACvH,SAAS;AACT;EACA,QAAQ,SAAS,SAAS,CAAC,EAAE,EAAE;EAC/B,UAAU,IAAI,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE;EAC/C,cAAc,UAAU,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,UAAU;EACpF,cAAc,SAAS,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC;EACnF,UAAU,OAAO;EACjB,YAAY,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,SAAS;EACrC,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,UAAU;EACxC,WAAW,CAAC;EACZ,SAAS;EACT,OAAO,EAAE;EACT,QAAQ,OAAO,EAAE,IAAI;EACrB,OAAO,CAAC,CAAC;EACT,KAAK,CAAC,CAAC;AACP;EACA,IAAI,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE;EAChE,MAAM,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC;AACrC;EACA,MAAM,IAAI,KAAK,CAAC,iBAAiB,EAAE;EACnC,QAAQ,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC;EACxC,QAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,OAAO;EAC1C,OAAO;AACP;EACA,MAAM,qBAAqB,CAAC,YAAY;EACxC;EACA,QAAQ,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;EAC7B;EACA,UAAU,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;EAC7E,SAAS;AACT;EACA,QAAQ,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE;EACnD;EACA,UAAU,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;EAClF,SAAS;EACT,OAAO,CAAC,CAAC;EACT,KAAK,EAAE;EACP,MAAM,OAAO,EAAE,IAAI;EACnB,MAAM,OAAO,EAAE,IAAI;EACnB,KAAK,CAAC,CAAC;AACP;EACA,IAAI,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,aAAa,EAAE,UAAU,EAAE,EAAE;EAClE,MAAM,IAAI,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,cAAc,EAAE,CAAC;EAClD,KAAK,CAAC,CAAC;AACP;EACA,IAAI,KAAK,CAAC,QAAQ,GAAG,IAAIA,OAAK,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;EAC3D,MAAM,SAAS,EAAE,IAAI;EACrB,MAAM,KAAK,EAAE,IAAI;EACjB,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;EACxB,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACvE;EACA,IAAI,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC3D;EACA,IAAI,KAAK,CAAC,cAAc,GAAG,cAAc,CAAC;EAC1C,IAAI,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;EAC9C;EACA,MAAM,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;EAC/C,MAAM,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;EACrC,MAAM,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;EAChD,MAAM,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;EAChD,KAAK,CAAC,CAAC;AACP;EACA,IAAI,KAAK,CAAC,sBAAsB,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;EACtE,IAAI,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;EACpF;AACA;EACA,IAAI,KAAK,CAAC,QAAQ,GAAG,IAAI;EACzB,MAAM,SAAS,EAAE,iBAAiB;EAClC,MAAM,KAAK,EAAE,aAAa;EAC1B,MAAM,GAAG,EAAE,WAAW;EACtB,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC5D;EACA,IAAI,IAAI,WAAW,KAAK,KAAK,EAAE;EAC/B,MAAM,KAAK,CAAC,QAAQ,CAAC,aAAa,GAAG,GAAG,CAAC;EACzC,MAAM,KAAK,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;EAC7C,MAAM,KAAK,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;EACvC,KAAK;AACL;EACA,IAAI,IAAI,WAAW,KAAK,WAAW,IAAI,WAAW,KAAK,OAAO,EAAE;EAChE,MAAM,KAAK,CAAC,QAAQ,CAAC,WAAW,GAAG,GAAG,CAAC;EACvC,MAAM,KAAK,CAAC,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC;EACnD,MAAM,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY;EAC3D,QAAQ,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;EACrC,OAAO,CAAC,CAAC;EACT,MAAM,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY;EAC5D,QAAQ,IAAI,KAAK,CAAC,eAAe,EAAE;EACnC,UAAU,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;EACxC,SAAS;EACT,OAAO,CAAC,CAAC;EACT,MAAM,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,YAAY;EACzD,QAAQ,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC;EACtC,QAAQ,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC;EACvC,OAAO,CAAC,CAAC;EACT,KAAK;AACL;EACA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;EACzH,MAAM,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;EAClD,KAAK,CAAC,CAAC;EACP,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;EACtD,IAAI,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;EACpE;EACA;EACA;AACA;EACA,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,IAAIA,OAAK,CAAC,IAAI,EAAE,CAAC,CAAC;EACxD,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;EACpC,IAAI,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,mBAAmB,CAAC;EACpE,IAAI,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;EAC/B,GAAG;EACH,EAAE,MAAM,EAAE,SAAS,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE;EAC/C;EACA,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE;EACxH,MAAM,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;EAChD,MAAM,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;EAClD,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;EAC3H,QAAQ,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;EACpD,OAAO,CAAC,CAAC;EACT,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;EACvD,MAAM,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;EAC5C,KAAK;AACL;EACA,IAAI,IAAI,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE;EACrE,MAAM,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC,SAAS,KAAK,KAAK,CAAC,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;EAC/H,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC;EAC/C,MAAM,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;EAC5C,MAAM,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAIA,OAAK,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EAC3E,KAAK;AACL;EACA,IAAI,IAAI,YAAY,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE;EACxD,MAAM,IAAI,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC;EAC1D,MAAM,IAAI,KAAK,KAAK,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC;EACzC,MAAM,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAIA,OAAK,CAAC,KAAK,CAACQ,cAAO,CAAC,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;EAC9F,KAAK;AACL;EACA,IAAI,IAAI,YAAY,CAAC,cAAc,CAAC,oBAAoB,CAAC,EAAE;EAC3D,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE;EACrC,QAAQ,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;EACxC,QAAQ,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC;EAC5C,QAAQ,CAAC,KAAK,CAAC,YAAY,IAAI,UAAU,EAAE,CAAC;EAC5C,OAAO,MAAM;EACb,QAAQ,IAAIR,OAAK,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,UAAU,OAAO,EAAE;EACpF,UAAU,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAIA,OAAK,CAAC,iBAAiB,CAAC;EACjE,YAAY,GAAG,EAAE,OAAO;EACxB,YAAY,IAAI,EAAEA,OAAK,CAAC,QAAQ;EAChC,WAAW,CAAC,CAAC;EACb,UAAU,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;AACzC;EACA,UAAU,KAAK,CAAC,uBAAuB,IAAI,UAAU,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;EACrF,UAAU,CAAC,KAAK,CAAC,YAAY,IAAI,UAAU,EAAE,CAAC;EAC9C,SAAS,CAAC,CAAC;EACX,OAAO;EACP,KAAK;AACL;EACA,IAAI,YAAY,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC;AACpH;EACA,IAAI,IAAI,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;EAChD,MAAM,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC,UAAU,GAAG,EAAE;EAC1D,QAAQ,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;EACvC,OAAO,CAAC,CAAC;AACT;EACA,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EAC3C,QAAQ,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACpC,OAAO,CAAC,CAAC;EACT,KAAK;AACL;AACA;EACA,IAAI,SAAS,UAAU,GAAG;EAC1B,MAAM,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;EACtD,KAAK;EACL,GAAG;EACH,CAAC,CAAC;;ECtpBa,sBAASS,eAAT,EAA0BC,WAA1B,EAAuC;EAEpD,MAAMC,MAAM,GAAG,IAAID,WAAJ,EAAf,CAFoD;;EAIpD,SAAO;EACLE,IAAAA,QAAQ,EAAE,kBAASxrB,IAAT,EAAe;EAAE;EACzB,aAAO;EACL,mBAASurB,MAAM,CAACvrB,IAAD,CAAN,EADJ;EAELvB,QAAAA,QAFK,oBAEI5yH,CAFJ,EAEOswC,KAFP,EAEc;EAAEA,UAAAA,KAAK,CAACkvG,eAAD,CAAL,CAAuBrrB,IAAvB,EAA6Bn0H,CAA7B;EAAiC,SAFjD;EAGL0yH,QAAAA,aAAa,EAAE;EAHV,OAAP;EAKD,KAPI;EAQLktB,IAAAA,UAAU,EAAE,oBAASruE,MAAT,EAAiB;EAAE;EAC7B,aAAO,UAASjhC,KAAT,EAAyB;EAC9B,YAAMuvG,eAAe,GAAGvvG,KAAK,CAACkvG,eAAD,CAA7B;;EAD8B,0CAAN9iC,IAAM;EAANA,UAAAA,IAAM;EAAA;;EAE9B,YAAMoiC,SAAS,GAAGe,eAAe,CAACtuE,MAAD,CAAf,OAAAsuE,eAAe,EAAYnjC,IAAZ,CAAjC;EAEA,eAAOoiC,SAAS,KAAKe,eAAd,GACH,IADG;EAAA,UAEHf,SAFJ;EAGD,OAPD;EAQD;EAjBI,GAAP;EAoBD;;ECtBD,IAAMC,KAAK,GAAG/rE,MAAM,CAACy+D,KAAP,GACVz+D,MAAM,CAACy+D,KADG;EAAA,EAEV;EAAE53I,EAAAA,YAAY,EAAZA,cAAF;EAAgBD,EAAAA,gBAAgB,EAAhBA,kBAAhB;EAAkCjiB,EAAAA,OAAO,EAAPA;EAAlC,CAFJ;;EAgBA,IAAMmoK,4BAA4B,GAAG,GAArC;EAIA;;EACA,IAAMC,MAAM,GAAGC,WAAW,CAAC,YAAD,EAAeC,eAAf,CAA1B;EACA,IAAMC,aAAa,GAAGx1I,MAAM,CAACkxB,MAAP,OAAAlxB,MAAM,uBAAW,CACrC,SADqC,EAErC,WAFqC,EAGrC,eAHqC,EAIrC,SAJqC,EAKrC,kBALqC,EAMrC,eANqC,EAOrC,YAPqC,EAQrC,aARqC,EASrC,QATqC,EAUrC,SAVqC,EAWrC,gBAXqC,EAYrC,WAZqC,EAarC,iBAbqC,EAcrC,aAdqC,EAerC,gBAfqC,EAgBrC,iBAhBqC,EAiBrC,uBAjBqC,EAkBrC,YAlBqC,EAmBrC,YAnBqC,EAoBrC,gBApBqC,EAqBrC,WArBqC,EAsBrC,iBAtBqC,EAuBrC,aAvBqC,EAwBrC,WAxBqC,EAyBrC,gBAzBqC,EA0BrC,eA1BqC,EA2BrC,mBA3BqC,EA4BrC,cA5BqC,EA6BrC,iBA7BqC,EA8BrC,uBA9BqC,EA+BrC,oBA/BqC,EAgCrC,4BAhCqC,EAiCrC,2BAjCqC,EAkCrC,4BAlCqC,EAmCrC,gCAnCqC,EAoCrC,0BApCqC,EAqCrC,8BArCqC,EAsCrC,8BAtCqC,EAuCrC,8BAvCqC,EAwCrC,mCAxCqC,EAyCrC,aAzCqC,EA0CrC,cA1CqC,EA2CrC,iBA3CqC,EA4CrC,YA5CqC,EA6CrC,eA7CqC,EA8CrC,aA9CqC,EA+CrC,eA/CqC,EAgDrC,cAhDqC,EAiDrC,cAjDqC,EAkDrC,cAlDqC,EAmDrCwlB,GAnDqC,CAmDjC,UAAA9c,CAAC;EAAA,+BAAQA,CAAR,EAAY2sI,MAAM,CAACJ,QAAP,CAAgBvsI,CAAhB,CAAZ;EAAA,CAnDgC,CAAX,EAA5B;EAoDA,IAAM+sI,eAAe,GAAGz1I,MAAM,CAACkxB,MAAP,OAAAlxB,MAAM,uBAAW,CACvC,SADuC,EAEvC,cAFuC,EAGvC,SAHuC,EAIvC,oBAJuC,EAKvC,cALuC,EAMvCwlB,GANuC,CAMnC,UAAA9c,CAAC;EAAA,+BAAQA,CAAR,EAAY2sI,MAAM,CAACH,UAAP,CAAkBxsI,CAAlB,CAAZ;EAAA,CANkC,CAAX,EAA9B;;EASA,IAAMgtI,cAAc,GAAGJ,WAAW,CAAC,YAAD,EAAeK,kBAAf,CAAlC;EACA,IAAMC,qBAAqB,GAAG51I,MAAM,CAACkxB,MAAP,OAAAlxB,MAAM,uBAAW,CAC7C,OAD6C,EAE7C,QAF6C,EAG7C,iBAH6C,EAI7C,aAJ6C,EAK7C,0BAL6C,EAM7CwlB,GAN6C,CAMzC,UAAA9c,CAAC;EAAA,+BAAQA,CAAR,EAAYgtI,cAAc,CAACT,QAAf,CAAwBvsI,CAAxB,CAAZ;EAAA,CANwC,CAAX,EAApC;EAOA,IAAMmtI,uBAAuB,GAAG71I,MAAM,CAACkxB,MAAP,OAAAlxB,MAAM,uBACjC,CACD,gBADC,EAED,wBAFC,EAGDwlB,GAHC,CAGG,UAAA9c,CAAC;EAAA,+BAAQA,CAAR,EAAYgtI,cAAc,CAACR,UAAf,CAA0BxsI,CAA1B,CAAZ;EAAA,CAHJ,CADiC,UAKpC;EACEotI,EAAAA,kBAAkB,EAAEJ,cAAc,CAACR,UAAf,CAA0B,iBAA1B,CADtB;EAEEa,EAAAA,kBAAkB,EAAEL,cAAc,CAACR,UAAf,CAA0B,gBAA1B;EAFtB,CALoC,GAAtC;;AAaA,sBAAexN,KAAO,CAAC;EAErBlf,EAAAA,KAAK;EACHwtB,IAAAA,SAAS,EAAE;EAAE,iBAAS,MAAX;EAAmBhuB,MAAAA,aAAa,EAAE;EAAlC,KADR;EAEHiuB,IAAAA,SAAS,EAAE;EAAE,iBAAS,MAAX;EAAmBjuB,MAAAA,aAAa,EAAE;EAAlC,KAFR;EAGHkuB,IAAAA,kBAAkB,EAAE;EAAE,iBAAS,CAAX;EAAchuB,MAAAA,QAAQ,EAAE,kBAACx/G,CAAD,EAAIk9B,KAAJ;EAAA,eAAcA,KAAK,CAACuwG,UAAN,CAAiBC,kBAAjB,CAAoC1tI,CAApC,CAAd;EAAA,OAAxB;EAA8Es/G,MAAAA,aAAa,EAAE;EAA7F,KAHjB;EAIHquB,IAAAA,wBAAwB,EAAE;EACxB,iBAAS,IADe;EAExBnuB,MAAAA,QAFwB,oBAEf1uG,MAFe,EAEPosB,KAFO,EAEA;EACtB,YAAM0wG,QAAQ,GAAG1wG,KAAK,CAACuwG,UAAN,CAAiBG,QAAjB,EAAjB;;EACA,YAAIA,QAAJ,EAAc;EACZA,UAAAA,QAAQ,CAACvgH,OAAT,GAAmBvc,MAAnB;EACD;EACF,OAPuB;EAQxBwuG,MAAAA,aAAa,EAAE;EARS,KAJvB;EAcHuuB,IAAAA,cAAc,EAAE;EAAE,iBAAS,IAAX;EAAiBvuB,MAAAA,aAAa,EAAE;EAAhC,KAdb;EAeHwuB,IAAAA,UAAU,EAAE;EAAE,iBAAS,oBAAM,EAAjB;EAAsBxuB,MAAAA,aAAa,EAAE;EAArC,KAfT;EAgBHyuB,IAAAA,aAAa,EAAE;EAAE,iBAAS,oBAAM,EAAjB;EAAsBzuB,MAAAA,aAAa,EAAE;EAArC,KAhBZ;EAiBH0uB,IAAAA,WAAW,EAAE;EAAE1uB,MAAAA,aAAa,EAAE;EAAjB,KAjBV;EAkBH2uB,IAAAA,gBAAgB,EAAE;EAAE3uB,MAAAA,aAAa,EAAE;EAAjB,KAlBf;EAmBH4uB,IAAAA,WAAW,EAAE;EAAE5uB,MAAAA,aAAa,EAAE;EAAjB,KAnBV;EAoBH6uB,IAAAA,WAAW,EAAE;EAAE7uB,MAAAA,aAAa,EAAE;EAAjB,KApBV;EAqBH8uB,IAAAA,gBAAgB,EAAE;EAAE9uB,MAAAA,aAAa,EAAE;EAAjB,KArBf;EAsBH+uB,IAAAA,WAAW,EAAE;EAAE/uB,MAAAA,aAAa,EAAE;EAAjB,KAtBV;EAuBHgvB,IAAAA,iBAAiB,EAAE;EAAEhvB,MAAAA,aAAa,EAAE;EAAjB,KAvBhB;EAwBHivB,IAAAA,sBAAsB,EAAE;EAAEjvB,MAAAA,aAAa,EAAE;EAAjB;EAxBrB,KAyBAwtB,aAzBA,GA0BAI,qBA1BA,CAFgB;EA+BrBjtB,EAAAA,OAAO;EACLuuB,IAAAA,SAAS,EAAE,mBAAUtxG,KAAV,EAAiBuxG,kBAAjB,EAAqCC,OAArC,EAA2D;EAAA;;EAAA,wCAAVC,QAAU;EAAVA,QAAAA,QAAU;EAAA;;EACpEzxG,MAAAA,KAAK,CAACuwG,UAAN,CAAiBmB,SAAjB,CACE,qBAAA1xG,KAAK,CAAC2xG,UAAN,EAAiBpH,YAAjB,0BAAiCkH,QAAjC,CADF,EAEEF,kBAFF,EAGEC,OAHF;EAKA,aAAO,IAAP;EACD,KARI;EASLI,IAAAA,cAAc,EAAE,wBAAU5xG,KAAV,EAAiB;EAC/B,UAAIA,KAAK,CAAC6xG,uBAAN,KAAkC,IAAtC,EAA4C;EAC1C38G,QAAAA,oBAAoB,CAAC8K,KAAK,CAAC6xG,uBAAP,CAApB;EACA7xG,QAAAA,KAAK,CAAC6xG,uBAAN,GAAgC,IAAhC;EACD;;EACD,aAAO,IAAP;EACD,KAfI;EAiBLC,IAAAA,eAAe,EAAE,yBAAU9xG,KAAV,EAAiB;EAChC,UAAIA,KAAK,CAAC6xG,uBAAN,KAAkC,IAAtC,EAA4C;EAC1C,aAAKE,eAAL;EACD;;EACD,aAAO,IAAP;EACD,KAtBI;EAuBLA,IAAAA,eAvBK,2BAuBW/xG,KAvBX,EAuBkB;EACrB,UAAIA,KAAK,CAACgyG,wBAAV,EAAoC;EAClC;EACA,aAAK/gH,QAAL,GAAgBssC,UAAhB,CAA2B16C,KAA3B,CAAiCovH,MAAjC,GAA0C,IAA1C;EACD,OAJoB;;;EAOrBjyG,MAAAA,KAAK,CAAC2xG,UAAN,CAAiBvL,SAAjB;EACApmG,MAAAA,KAAK,CAACuwG,UAAN,CAAiB7gC,IAAjB;EACA1vE,MAAAA,KAAK,CAAC6xG,uBAAN,GAAgC78G,qBAAqB,CAAC,KAAK+8G,eAAN,CAArD;EACD,KAjCI;EAkCL7gH,IAAAA,KAAK,EAAE,eAAA8O,KAAK;EAAA,aAAIA,KAAK,CAACuwG,UAAN,CAAiBr/G,KAAjB,EAAJ;EAAA,KAlCP;EAkCqC;EAC1C9rB,IAAAA,MAAM,EAAE,gBAAA46B,KAAK;EAAA,aAAIA,KAAK,CAACuwG,UAAN,CAAiBnrI,MAAjB,EAAJ;EAAA,KAnCR;EAmCuC;EAC5C6rB,IAAAA,QAAQ,EAAE,kBAAA+O,KAAK;EAAA,aAAIA,KAAK,CAACuwG,UAAN,CAAiBt/G,QAAjB,EAAJ;EAAA,KApCV;EAoC2C;EAChDs/G,IAAAA,UAAU,EAAE,oBAAAvwG,KAAK,EAAI;EAAE,aAAOA,KAAK,CAACuwG,UAAb;EAA0B,KArC5C;EAsCLG,IAAAA,QAAQ,EAAE,kBAAA1wG,KAAK;EAAA,aAAIA,KAAK,CAACuwG,UAAN,CAAiBG,QAAjB,EAAJ;EAAA,KAtCV;EAsC2C;EAChDwB,IAAAA,UAAU,EAAE,oBAAAlyG,KAAK;EAAA,aAAIA,KAAK,CAACuwG,UAAN,CAAiB2B,UAAjB,EAAJ;EAAA,KAvCZ;EAuC+C;EACpDC,IAAAA,WAAW,EAAE,uBAAY;EACvB,WAAKP,cAAL;EACA,WAAKzP,SAAL,CAAe;EAAE76B,QAAAA,KAAK,EAAE,EAAT;EAAagE,QAAAA,KAAK,EAAE;EAApB,OAAf;EACD;EA3CI,KA4CFukC,eA5CE,GA6CFI,uBA7CE,CA/Bc;EA+ErBvtB,EAAAA,SAAS,EAAE;EAAA,QAAG0vB,WAAH,SAAGA,WAAH;EAAA,QAAgBC,cAAhB,SAAgBA,cAAhB;EAAA,QAAgCC,cAAhC,SAAgCA,cAAhC;EAAA,WAAsD;EAC/DX,MAAAA,UAAU,EAAE,IAAIhC,eAAJ,EADmD;EAE/DY,MAAAA,UAAU,EAAER,kBAAkB,CAAC;EAAEqC,QAAAA,WAAW,EAAXA,WAAF;EAAeC,QAAAA,cAAc,EAAdA,cAAf;EAA+BC,QAAAA,cAAc,EAAdA;EAA/B,OAAD;EAFiC,KAAtD;EAAA,GA/EU;EAoFrB3qG,EAAAA,IAAI,EAAE,cAAU4qG,OAAV,EAAmBvyG,KAAnB,EAA0B;EAC9B;EACAuyG,IAAAA,OAAO,CAACC,SAAR,GAAoB,EAApB,CAF8B;;EAK9BD,IAAAA,OAAO,CAACE,WAAR,CAAoBzyG,KAAK,CAACsU,SAAN,GAAkBj8C,QAAQ,CAACq6I,aAAT,CAAuB,KAAvB,CAAtC;EACA1yG,IAAAA,KAAK,CAACsU,SAAN,CAAgBzxB,KAAhB,CAAsBhR,QAAtB,GAAiC,UAAjC,CAN8B;;EAS9B,QAAM8gI,SAAS,GAAGt6I,QAAQ,CAACq6I,aAAT,CAAuB,KAAvB,CAAlB;EACA1yG,IAAAA,KAAK,CAACsU,SAAN,CAAgBm+F,WAAhB,CAA4BE,SAA5B;EACA3yG,IAAAA,KAAK,CAACuwG,UAAN,CAAiBoC,SAAjB;EACA,QAAMvtI,MAAM,GAAG46B,KAAK,CAACuwG,UAAN,CAAiBnrI,MAAjB,EAAf;EACA,QAAM6rB,QAAQ,GAAG+O,KAAK,CAACuwG,UAAN,CAAiBt/G,QAAjB,EAAjB;EACA,QAAMy/G,QAAQ,GAAG1wG,KAAK,CAACuwG,UAAN,CAAiBG,QAAjB,EAAjB;EACAA,IAAAA,QAAQ,CAACvgH,OAAT,GAAmB,CAAC,CAAC6P,KAAK,CAACywG,wBAA3B;EACAzwG,IAAAA,KAAK,CAAC4yG,cAAN,GAAuBxtI,MAAM,CAACyM,QAAP,CAAgBlV,CAAvC,CAhB8B;;EAmB9B,QAAIk2I,QAAJ;EACA7yG,IAAAA,KAAK,CAACsU,SAAN,CAAgBm+F,WAAhB,CAA4BI,QAAQ,GAAGx6I,QAAQ,CAACq6I,aAAT,CAAuB,KAAvB,CAAvC;EACAG,IAAAA,QAAQ,CAACC,SAAT,GAAqB,gBAArB;EACAD,IAAAA,QAAQ,CAACE,WAAT,GAAuB,EAAvB,CAtB8B;;EAyB9B/yG,IAAAA,KAAK,CAAC2xG,UAAN,CACG1P,SADH,CACa,YAAM;EAAE4Q,MAAAA,QAAQ,CAACE,WAAT,GAAuB,YAAvB;EAAqC,KAD1D,EAEG7Q,eAFH,CAEmB,YAAM;EAAE2Q,MAAAA,QAAQ,CAACE,WAAT,GAAuB,EAAvB;EAA2B,KAFtD,EAGG/3I,QAHH,CAGY,YAAM;EACd;EACAglC,MAAAA,KAAK,CAACmiG,SAAN,GAAkBniG,KAAK,CAAC2xG,UAAN,CAAiBxP,SAAjB,EAAlB,CAFc;;EAKd,UAAI/8H,MAAM,CAACyM,QAAP,CAAgBvjB,CAAhB,KAAsB,CAAtB,IAA2B8W,MAAM,CAACyM,QAAP,CAAgBtjB,CAAhB,KAAsB,CAAjD,IAAsD6W,MAAM,CAACyM,QAAP,CAAgBlV,CAAhB,KAAsBqjC,KAAK,CAAC4yG,cAAlF,IAAoG5yG,KAAK,CAACmiG,SAAN,CAAgB76B,KAAhB,CAAsBp6G,MAA9H,EAAsI;EACpIkY,QAAAA,MAAM,CAACsG,MAAP,CAAcs0B,KAAK,CAAC2xG,UAAN,CAAiB9/H,QAA/B;EACAmuB,QAAAA,KAAK,CAAC4yG,cAAN,GAAuBxtI,MAAM,CAACyM,QAAP,CAAgBlV,CAAhB,GAAoBvP,IAAI,CAAC2iH,IAAL,CAAU/vE,KAAK,CAACmiG,SAAN,CAAgB76B,KAAhB,CAAsBp6G,MAAhC,IAA0CsiJ,4BAArF;EACD;EACF,KAZH,EAaGjK,cAbH,CAakB,YAAM;EACpB;EACA,UAAIvlG,KAAK,CAACgzG,aAAV,EAAyB;EACvB,YAAMC,WAAW,GAAGjzG,KAAK,CAACmiG,SAAN,CAAgB76B,KAAhB,CAAsBppB,IAAtB,CAA2B,UAAAsV,IAAI;EAAA,iBAAIA,IAAI,CAAC0/C,iBAAL,IAA0B,CAAC1/C,IAAI,CAAC2/C,0BAApC;EAAA,SAA/B,CAApB,CADuB;;EAEvB,YAAIF,WAAJ,EAAiB;EACfA,UAAAA,WAAW,CAACE,0BAAZ,GAAyC,IAAzC,CADe;EAEhB,SAFD,MAEO;EACLnzG,UAAAA,KAAK,CAACgzG,aAAN,CAAoB72I,OAApB,GADK;;EAEN;;EAED6jC,QAAAA,KAAK,CAACgzG,aAAN,GAAsB9mJ,SAAtB;EACD;;EAED,UAAI8zC,KAAK,CAAC2wG,cAAN,IAAwB3wG,KAAK,CAACgyG,wBAA9B,IAA0DhyG,KAAK,CAAC0iG,WAAN,KAAsB,IAApF,EAA0F;EAAE;EAC1F,YAAM0Q,YAAY,GAAGpzG,KAAK,CAACgzG,aAAN,GAAsB,IAAIK,YAAJ,CACzCrzG,KAAK,CAACmiG,SAAN,CAAgB76B,KAAhB,CAAsB1nF,GAAtB,CAA0B,UAAA4zE,IAAI;EAAA,iBAAIA,IAAI,CAACkzC,UAAT;EAAA,SAA9B,EAAmD5vF,MAAnD,CAA0D,UAAAiuE,GAAG;EAAA,iBAAIA,GAAJ;EAAA,SAA7D,CADyC,EAEzC3/G,MAFyC,EAGzC6rB,QAAQ,CAACssC,UAHgC,CAA3C;EAMA61E,QAAAA,YAAY,CAACtnJ,gBAAb,CAA8B,WAA9B,EAA2C,UAAUc,KAAV,EAAiB;EAC1D8jJ,UAAAA,QAAQ,CAACvgH,OAAT,GAAmB,KAAnB,CAD0D;EAG1D;;EACAvjC,UAAAA,KAAK,CAAC2b,MAAN,CAAa+qI,YAAb,GAA4B1mJ,KAAK,CAAC2b,MAAN,CAAasJ,QAAb,CAAsBriB,KAAtB,EAA5B;EACA5C,UAAAA,KAAK,CAAC2b,MAAN,CAAagrI,SAAb,GAAyB3mJ,KAAK,CAAC2b,MAAN,CAAasJ,QAAb,CAAsBriB,KAAtB,EAAzB;;EAEA,cAAMgkG,IAAI,GAAGggD,WAAW,CAAC5mJ,KAAK,CAAC2b,MAAP,CAAX,CAA0BoiI,MAAvC;;EACA,WAACn3C,IAAI,CAAC0/C,iBAAN,KAA4B1/C,IAAI,CAAC0/C,iBAAL,GAAyB;EAAEvjC,YAAAA,EAAE,EAAEnc,IAAI,CAACmc,EAAX;EAAeC,YAAAA,EAAE,EAAEpc,IAAI,CAACoc,EAAxB;EAA4BC,YAAAA,EAAE,EAAErc,IAAI,CAACqc;EAArC,WAArD;EACA,WAACrc,IAAI,CAAC8/C,YAAN,KAAuB9/C,IAAI,CAAC8/C,YAAL,GAAoB;EAAEhlJ,YAAAA,CAAC,EAAEklG,IAAI,CAACllG,CAAV;EAAaC,YAAAA,CAAC,EAAEilG,IAAI,CAACjlG,CAArB;EAAwBoO,YAAAA,CAAC,EAAE62F,IAAI,CAAC72F;EAAhC,WAA3C,EAT0D;;EAY1D,WAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgB25D,OAAhB,CAAwB,UAAAnjE,CAAC;EAAA,mBAAIqgG,IAAI,YAAKrgG,CAAL,EAAJ,GAAgBqgG,IAAI,CAACrgG,CAAD,CAAxB;EAAA,WAAzB,EAZ0D;;EAe1D89B,UAAAA,QAAQ,CAACssC,UAAT,CAAoBk2E,SAApB,CAA8B9jJ,GAA9B,CAAkC,WAAlC;EACD,SAhBD;EAkBAyjJ,QAAAA,YAAY,CAACtnJ,gBAAb,CAA8B,MAA9B,EAAsC,UAAUc,KAAV,EAAiB;EACrD,cAAM8mJ,OAAO,GAAGF,WAAW,CAAC5mJ,KAAK,CAAC2b,MAAP,CAA3B;;EAEA,cAAI,CAAC3b,KAAK,CAAC2b,MAAN,CAAaskG,cAAb,CAA4B,gBAA5B,CAAL,EAAoD;EAClD;EACA,gBAAM8mC,OAAO,GAAG/mJ,KAAK,CAAC2b,MAAN,CAAa+qI,YAA7B;EACA,gBAAMM,OAAO,GAAGhnJ,KAAK,CAAC2b,MAAN,CAAagrI,SAA7B;EACA,gBAAMM,OAAM,GAAGjnJ,KAAK,CAAC2b,MAAN,CAAasJ,QAA5B;EAEA6hI,YAAAA,OAAO,CAAC7hI,QAAR,CAAiBliB,GAAjB,CAAqBkkJ,OAAM,CAACrkJ,KAAP,GAAea,GAAf,CAAmBujJ,OAAnB,CAArB,EANkD;;EAOlDA,YAAAA,OAAO,CAACnkJ,IAAR,CAAaokJ,OAAb;;EACAA,YAAAA,OAAM,CAACpkJ,IAAP,CAAYkkJ,OAAZ,EARkD;;EASnD;;EAED,cAAMngD,IAAI,GAAGkgD,OAAO,CAAC/I,MAArB;EACA,cAAMkJ,MAAM,GAAGH,OAAO,CAAC7hI,QAAvB;EACA,cAAM9Z,SAAS,GAAG;EAAEzJ,YAAAA,CAAC,EAAEulJ,MAAM,CAACvlJ,CAAP,GAAWklG,IAAI,CAACllG,CAArB;EAAwBC,YAAAA,CAAC,EAAEslJ,MAAM,CAACtlJ,CAAP,GAAWilG,IAAI,CAACjlG,CAA3C;EAA8CoO,YAAAA,CAAC,EAAEk3I,MAAM,CAACl3I,CAAP,GAAW62F,IAAI,CAAC72F;EAAjE,WAAlB,CAhBqD;;EAkBrD,WAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgB25D,OAAhB,CAAwB,UAAAnjE,CAAC;EAAA,mBAAIqgG,IAAI,YAAKrgG,CAAL,EAAJ,GAAgBqgG,IAAI,CAACrgG,CAAD,CAAJ,GAAU0gJ,MAAM,CAAC1gJ,CAAD,CAApC;EAAA,WAAzB;EAEA6sC,UAAAA,KAAK,CAAC2xG,UAAN,CACG1M,aADH,CACiB,GADjB;EAAA,WAEGe,cAFH,GApBqD;;EAwBrDxyC,UAAAA,IAAI,CAACsgD,SAAL,GAAiB,IAAjB;EACA9zG,UAAAA,KAAK,CAAC4wG,UAAN,CAAiBp9C,IAAjB,EAAuBz7F,SAAvB;EACD,SA1BD;EA4BAq7I,QAAAA,YAAY,CAACtnJ,gBAAb,CAA8B,SAA9B,EAAyC,UAAUc,KAAV,EAAiB;EACxD,iBAAQA,KAAK,CAAC2b,MAAN,CAAa+qI,YAArB,CADwD;;EAExD,iBAAQ1mJ,KAAK,CAAC2b,MAAN,CAAagrI,SAArB;;EAEA,cAAM//C,IAAI,GAAGggD,WAAW,CAAC5mJ,KAAK,CAAC2b,MAAP,CAAX,CAA0BoiI,MAAvC,CAJwD;;;EAOxD,cAAIn3C,IAAI,CAAC2/C,0BAAT,EAAqC;EACnCC,YAAAA,YAAY,CAACj3I,OAAb;EACA,mBAAQq3F,IAAI,CAAC2/C,0BAAb;EACD;;EAED,cAAMY,YAAY,GAAGvgD,IAAI,CAAC0/C,iBAA1B;EACA,cAAMS,OAAO,GAAGngD,IAAI,CAAC8/C,YAArB;EACA,cAAMv7I,SAAS,GAAG;EAAEzJ,YAAAA,CAAC,EAAEqlJ,OAAO,CAACrlJ,CAAR,GAAYklG,IAAI,CAACllG,CAAtB;EAAyBC,YAAAA,CAAC,EAAEolJ,OAAO,CAACplJ,CAAR,GAAYilG,IAAI,CAACjlG,CAA7C;EAAgDoO,YAAAA,CAAC,EAAEg3I,OAAO,CAACh3I,CAAR,GAAY62F,IAAI,CAAC72F;EAApE,WAAlB;;EACA,cAAIo3I,YAAJ,EAAkB;EAChB,aAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgBz9E,OAAhB,CAAwB,UAAAnjE,CAAC,EAAI;EAC3B,kBAAM6gJ,EAAE,cAAO7gJ,CAAP,CAAR;;EACA,kBAAI4gJ,YAAY,CAACC,EAAD,CAAZ,KAAqB9nJ,SAAzB,EAAoC;EAClC,uBAAQsnG,IAAI,CAACwgD,EAAD,CAAZ;EACD;EACF,aALD;EAMA,mBAAQxgD,IAAI,CAAC0/C,iBAAb;EACA,mBAAQ1/C,IAAI,CAAC8/C,YAAb;;EACA,gBAAI9/C,IAAI,CAACsgD,SAAT,EAAoB;EAClB,qBAAQtgD,IAAI,CAACsgD,SAAb;EACA9zG,cAAAA,KAAK,CAAC6wG,aAAN,CAAoBr9C,IAApB,EAA0Bz7F,SAA1B;EACD;EACF;;EAEDioC,UAAAA,KAAK,CAAC2xG,UAAN,CACG1M,aADH,CACiB,CADjB;EAAA,WAEGe,cAFH,GA9BwD;;EAkCxD,cAAIhmG,KAAK,CAACywG,wBAAV,EAAoC;EAClCC,YAAAA,QAAQ,CAACvgH,OAAT,GAAmB,IAAnB,CADkC;;EAElCugH,YAAAA,QAAQ,CAACnzE,UAAT,IAAuBmzE,QAAQ,CAACnzE,UAAT,CAAoB02E,aAA3C,IAA4DvD,QAAQ,CAACnzE,UAAT,CAAoB02E,aAApB,CAAkCtnJ,aAAlC;EAE1D,gBAAIunJ,YAAJ,CAAiB,WAAjB,EAA8B;EAAEC,cAAAA,WAAW,EAAE;EAAf,aAA9B,CAF0D,CAA5D;EAID,WAxCuD;;;EA2CxDljH,UAAAA,QAAQ,CAACssC,UAAT,CAAoBk2E,SAApB,CAA8Bj9H,MAA9B,CAAqC,WAArC;EACD,SA5CD;EA6CD;EACF,KA7HH,EAzB8B;;EAyJ9BwpB,IAAAA,KAAK,CAACuwG,UAAN,CACGtwG,OADH,CACW;EACP,QAAIwuG,KAAK,CAACllJ,YAAV,CAAuB,QAAvB,CADO,EAEP,IAAIklJ,KAAK,CAACnlJ,gBAAV,CAA2B,QAA3B,EAAqC,GAArC,CAFO,EAGP02C,KAAK,CAAC2xG,UAHC,CADX,EAMGyC,oBANH,CAMwB,UAAClkJ,CAAD,EAAIC,CAAJ,EAAU;EAC9B;EACA,UAAMkkJ,IAAI,GAAGb,WAAW,CAACtjJ,CAAD,CAAxB;EACA,UAAI,CAACmkJ,IAAL,EAAW,OAAO,CAAP;EACX,UAAMC,IAAI,GAAGd,WAAW,CAACrjJ,CAAD,CAAxB;EACA,UAAI,CAACmkJ,IAAL,EAAW,OAAO,CAAC,CAAR,CALmB;;EAQ9B,UAAMC,MAAM,GAAG,SAATA,MAAS,CAAA/vD,CAAC;EAAA,eAAIA,CAAC,CAACkmD,cAAF,KAAqB,MAAzB;EAAA,OAAhB;;EACA,aAAO6J,MAAM,CAACD,IAAD,CAAN,GAAeC,MAAM,CAACF,IAAD,CAA5B;EACD,KAhBH,EAiBGG,cAjBH,CAiBkB,UAAAzvB,GAAG,EAAI;EACrB,UAAM0vB,QAAQ,GAAGjB,WAAW,CAACzuB,GAAD,CAA5B;EACA,aAAO0vB,QAAQ,GAAG7N,OAAU,CAAC5mG,KAAK,WAAIy0G,QAAQ,CAAC/J,cAAb,WAAN,CAAV,CAAqD+J,QAAQ,CAAC9J,MAA9D,KAAyE,EAA5E,GAAiF,EAAhG;EACD,KApBH,EAqBG+J,eArBH,CAqBmB,KArBnB,EAsBGC,OAtBH,CAsBW,UAAA5vB,GAAG,EAAI;EACd;EACA,UAAM6vB,QAAQ,GAAGpB,WAAW,CAACzuB,GAAD,CAA5B;;EAEA,UAAI6vB,QAAQ,KAAK50G,KAAK,CAAC40G,QAAvB,EAAiC;EAC/B,YAAMC,WAAW,GAAG70G,KAAK,CAAC40G,QAAN,GAAiB50G,KAAK,CAAC40G,QAAN,CAAelK,cAAhC,GAAiD,IAArE;EACA,YAAMoK,WAAW,GAAG90G,KAAK,CAAC40G,QAAN,GAAiB50G,KAAK,CAAC40G,QAAN,CAAejK,MAAhC,GAAyC,IAA7D;EACA,YAAMoK,OAAO,GAAGH,QAAQ,GAAGA,QAAQ,CAAClK,cAAZ,GAA6B,IAArD;EACA,YAAMsK,OAAO,GAAGJ,QAAQ,GAAGA,QAAQ,CAACjK,MAAZ,GAAqB,IAA7C;;EACA,YAAIkK,WAAW,IAAIA,WAAW,KAAKE,OAAnC,EAA4C;EAC1C;EACA,cAAMvlB,EAAE,GAAGxvF,KAAK,aAAM60G,WAAW,KAAK,MAAhB,GAAyB,MAAzB,GAAkC,MAAxC,WAAhB;EACArlB,UAAAA,EAAE,IAAIA,EAAE,CAAC,IAAD,EAAOslB,WAAP,CAAR;EACD;;EACD,YAAIC,OAAJ,EAAa;EACX;EACA,cAAMvlB,GAAE,GAAGxvF,KAAK,aAAM+0G,OAAO,KAAK,MAAZ,GAAqB,MAArB,GAA8B,MAApC,WAAhB;EACAvlB,UAAAA,GAAE,IAAIA,GAAE,CAACwlB,OAAD,EAAUH,WAAW,KAAKE,OAAhB,GAA0BD,WAA1B,GAAwC,IAAlD,CAAR;EACD,SAd8B;;;EAiB/B7jH,QAAAA,QAAQ,CAACssC,UAAT,CAAoBk2E,SAApB,CACImB,QAAQ,IAAI50G,KAAK,aAAM+0G,OAAO,KAAK,MAAZ,GAAqB,MAArB,GAA8B,MAApC,WAAlB,IAA0E,CAACH,QAAD,IAAa50G,KAAK,CAACoxG,iBAA9F,GAAoH,KAApH,GAA4H,QAD9H,EAEE,WAFF;EAIApxG,QAAAA,KAAK,CAAC40G,QAAN,GAAiBA,QAAjB;EACD;EACF,KAjDH,EAkDGK,cAlDH,CAkDkB,KAlDlB,EAmDGC,OAnDH,CAmDW,UAACnwB,GAAD,EAAMowB,EAAN,EAAa;EACpB,UAAMV,QAAQ,GAAGjB,WAAW,CAACzuB,GAAD,CAA5B;;EACA,UAAI0vB,QAAJ,EAAc;EACZ,YAAMjlB,EAAE,GAAGxvF,KAAK,aAAMy0G,QAAQ,CAAC/J,cAAT,KAA4B,MAA5B,GAAqC,MAArC,GAA8C,MAApD,WAAhB;EACAlb,QAAAA,EAAE,IAAIA,EAAE,CAACilB,QAAQ,CAAC9J,MAAV,EAAkBwK,EAAlB,CAAR;EACD,OAHD,MAGO;EACLn1G,QAAAA,KAAK,CAACoxG,iBAAN,IAA2BpxG,KAAK,CAACoxG,iBAAN,CAAwB+D,EAAxB,CAA3B;EACD;EACF,KA3DH,EA4DGC,YA5DH,CA4DgB,UAACrwB,GAAD,EAAMowB,EAAN,EAAa;EACzB;EACA,UAAMV,QAAQ,GAAGjB,WAAW,CAACzuB,GAAD,CAA5B;;EACA,UAAI0vB,QAAJ,EAAc;EACZ,YAAMjlB,EAAE,GAAGxvF,KAAK,aAAMy0G,QAAQ,CAAC/J,cAAT,KAA4B,MAA5B,GAAqC,MAArC,GAA8C,MAApD,gBAAhB;EACAlb,QAAAA,EAAE,IAAIA,EAAE,CAACilB,QAAQ,CAAC9J,MAAV,EAAkBwK,EAAlB,CAAR;EACD,OAHD,MAGO;EACLn1G,QAAAA,KAAK,CAACqxG,sBAAN,IAAgCrxG,KAAK,CAACqxG,sBAAN,CAA6B8D,EAA7B,CAAhC;EACD;EACF,KArEH,EAzJ8B;EAkO9B;;EACA,SAAKpD,eAAL;EACD;EAxToB,CAAD,CAAtB;;EA6TA,SAASyB,WAAT,CAAqBjrI,MAArB,EAA6B;EAC3B,MAAIw8G,GAAG,GAAGx8G,MAAV,CAD2B;;EAG3B,SAAOw8G,GAAG,IAAI,CAACA,GAAG,CAAClY,cAAJ,CAAmB,gBAAnB,CAAf,EAAqD;EACnDkY,IAAAA,GAAG,GAAGA,GAAG,CAAC7wG,MAAV;EACD;;EACD,SAAO6wG,GAAP;EACD;;;;;;;;"} \ No newline at end of file diff --git a/src/citationnet/static/3d-force-graph.min.js b/src/citationnet/static/3d-force-graph.min.js new file mode 100644 index 0000000..79247d0 --- /dev/null +++ b/src/citationnet/static/3d-force-graph.min.js @@ -0,0 +1,5 @@ +// Version 1.70.5-0 3d-force-graph - https://github.com/vasturiano/3d-force-graph +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).ForceGraph3D=e()}(this,(function(){"use strict";function t(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function e(e){for(var i=1;it.length)&&(e=t.length);for(var n=0,i=new Array(e);n>8&255]+U[t>>16&255]+U[t>>24&255]+"-"+U[255&e]+U[e>>8&255]+"-"+U[e>>16&15|64]+U[e>>24&255]+"-"+U[63&n|128]+U[n>>8&255]+"-"+U[n>>16&255]+U[n>>24&255]+U[255&i]+U[i>>8&255]+U[i>>16&255]+U[i>>24&255]).toUpperCase()}function W(t,e,n){return Math.max(e,Math.min(n,t))}function j(t,e,n){return(1-n)*t+n*e}function q(t){return 0==(t&t-1)&&0!==t}function X(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}class Y{constructor(t=0,e=0){this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,a=this.y-t.y;return this.x=r*n-a*i+t.x,this.y=r*i+a*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}}Y.prototype.isVector2=!0;class Z{constructor(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,a,s,o,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=s,c[3]=e,c[4]=r,c[5]=o,c[6]=n,c[7]=a,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,a=n[0],s=n[3],o=n[6],l=n[1],c=n[4],h=n[7],u=n[2],d=n[5],p=n[8],f=i[0],m=i[3],g=i[6],v=i[1],y=i[4],x=i[7],_=i[2],b=i[5],w=i[8];return r[0]=a*f+s*v+o*_,r[3]=a*m+s*y+o*b,r[6]=a*g+s*x+o*w,r[1]=l*f+c*v+h*_,r[4]=l*m+c*y+h*b,r[7]=l*g+c*x+h*w,r[2]=u*f+d*v+p*_,r[5]=u*m+d*y+p*b,r[8]=u*g+d*x+p*w,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],a=t[4],s=t[5],o=t[6],l=t[7],c=t[8];return e*a*c-e*s*l-n*r*c+n*s*o+i*r*l-i*a*o}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],a=t[4],s=t[5],o=t[6],l=t[7],c=t[8],h=c*a-s*l,u=s*o-c*r,d=l*r-a*o,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const f=1/p;return t[0]=h*f,t[1]=(i*l-c*n)*f,t[2]=(s*n-i*a)*f,t[3]=u*f,t[4]=(c*e-i*o)*f,t[5]=(i*r-s*e)*f,t[6]=d*f,t[7]=(n*o-l*e)*f,t[8]=(a*e-n*r)*f,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,a,s){const o=Math.cos(r),l=Math.sin(r);return this.set(n*o,n*l,-n*(o*a+l*s)+a+t,-i*l,i*o,-i*(-l*a+o*s)+s+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],a=i[3],s=i[6],o=i[1],l=i[4],c=i[7];return i[0]=e*r+n*o,i[3]=e*a+n*l,i[6]=e*s+n*c,i[1]=-n*r+e*o,i[4]=-n*a+e*l,i[7]=-n*s+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}let J;Z.prototype.isMatrix3=!0;class ${static getDataURL(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===J&&(J=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),J.width=t.width,J.height=t.height;const n=J.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=J}return e.width>2048||e.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",t),e.toDataURL("image/jpeg",.6)):e.toDataURL("image/png")}}let Q=0;class K extends F{constructor(t=K.DEFAULT_IMAGE,e=K.DEFAULT_MAPPING,n=1001,i=1001,r=1006,a=1008,s=1023,o=1009,l=1,c=3e3){super(),Object.defineProperty(this,"id",{value:Q++}),this.uuid=G(),this.name="",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=a,this.anisotropy=l,this.format=s,this.internalFormat=null,this.type=o,this.offset=new Y(0,0),this.repeat=new Y(1,1),this.center=new Y(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Z,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.version=0,this.onUpdate=null}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return(new this.constructor).copy(this)}copy(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this}toJSON(t){const e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,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,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid&&(i.uuid=G()),!e&&void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t1)switch(this.wrapS){case u:t.x=t.x-Math.floor(t.x);break;case d:t.x=t.x<0?0:1;break;case p:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case u:t.y=t.y-Math.floor(t.y);break;case d:t.y=t.y<0?0:1;break;case p:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&this.version++}}function tt(t){return"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap?$.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}K.DEFAULT_IMAGE=void 0,K.DEFAULT_MAPPING=300,K.prototype.isTexture=!0;class et{constructor(t=0,e=0,n=0,i=1){this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,a=t.elements;return this.x=a[0]*e+a[4]*n+a[8]*i+a[12]*r,this.y=a[1]*e+a[5]*n+a[9]*i+a[13]*r,this.z=a[2]*e+a[6]*n+a[10]*i+a[14]*r,this.w=a[3]*e+a[7]*n+a[11]*i+a[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const a=.01,s=.1,o=t.elements,l=o[0],c=o[4],h=o[8],u=o[1],d=o[5],p=o[9],f=o[2],m=o[6],g=o[10];if(Math.abs(c-u)o&&t>v?tv?o=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),a=Math.atan2(r,e*n);t=Math.sin(t*a)/r,s=Math.sin(s*a)/r}const r=s*n;if(o=o*t+u*r,l=l*t+d*r,c=c*t+p*r,h=h*t+f*r,t===1-s){const t=1/Math.sqrt(o*o+l*l+c*c+h*h);o*=t,l*=t,c*=t,h*=t}}t[e]=o,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,r,a){const s=n[i],o=n[i+1],l=n[i+2],c=n[i+3],h=r[a],u=r[a+1],d=r[a+2],p=r[a+3];return t[e]=s*p+c*h+o*d-l*u,t[e+1]=o*p+c*u+l*h-s*d,t[e+2]=l*p+c*d+s*u-o*h,t[e+3]=c*p-s*h-o*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");const n=t._x,i=t._y,r=t._z,a=t._order,s=Math.cos,o=Math.sin,l=s(n/2),c=s(i/2),h=s(r/2),u=o(n/2),d=o(i/2),p=o(r/2);switch(a){case"XYZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"YXZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"ZXY":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"ZYX":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"YZX":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case"XZY":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],a=e[1],s=e[5],o=e[9],l=e[2],c=e[6],h=e[10],u=n+s+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-o)*t,this._y=(r-l)*t,this._z=(a-i)*t}else if(n>s&&n>h){const t=2*Math.sqrt(1+n-s-h);this._w=(c-o)/t,this._x=.25*t,this._y=(i+a)/t,this._z=(r+l)/t}else if(s>h){const t=2*Math.sqrt(1+s-n-h);this._w=(r-l)/t,this._x=(i+a)/t,this._y=.25*t,this._z=(o+c)/t}else{const t=2*Math.sqrt(1+h-n-s);this._w=(a-i)/t,this._x=(r+l)/t,this._y=(o+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return nMath.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(W(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,a=t._w,s=e._x,o=e._y,l=e._z,c=e._w;return this._x=n*c+a*s+i*l-r*o,this._y=i*c+a*o+r*s-n*l,this._z=r*c+a*l+n*o-i*s,this._w=a*c-n*s-i*o-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,a=this._w;let s=a*t._w+n*t._x+i*t._y+r*t._z;if(s<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,s=-s):this.copy(t),s>=1)return this._w=a,this._x=n,this._y=i,this._z=r,this;const o=1-s*s;if(o<=Number.EPSILON){const t=1-e;return this._w=t*a+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(o),c=Math.atan2(l,s),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=a*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}slerpQuaternions(t,e,n){this.copy(t).slerp(e,n)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}it.prototype.isQuaternion=!0;class rt{constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(st.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(st.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,a=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*a,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*a,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*a,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,a=t.y,s=t.z,o=t.w,l=o*e+a*i-s*n,c=o*n+s*e-r*i,h=o*i+r*n-a*e,u=-r*e-a*n-s*i;return this.x=l*o+u*-r+c*-s-h*-a,this.y=c*o+u*-a+h*-r-l*-s,this.z=h*o+u*-s+l*-a-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,a=e.x,s=e.y,o=e.z;return this.x=i*o-r*s,this.y=r*a-n*o,this.z=n*s-i*a,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return at.copy(this).projectOnVector(t),this.sub(at)}reflect(t){return this.sub(at.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(W(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}}rt.prototype.isVector3=!0;const at=new rt,st=new it;class ot{constructor(t=new rt(1/0,1/0,1/0),e=new rt(-1/0,-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,a=-1/0,s=-1/0;for(let o=0,l=t.length;or&&(r=l),c>a&&(a=c),h>s&&(s=h)}return this.min.set(e,n,i),this.max.set(r,a,s),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,a=-1/0,s=-1/0;for(let o=0,l=t.count;or&&(r=l),c>a&&(a=c),h>s&&(s=h)}return this.min.set(e,n,i),this.max.set(r,a,s),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new rt),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,ct),ct.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(vt),yt.subVectors(this.max,vt),ut.subVectors(t.a,vt),dt.subVectors(t.b,vt),pt.subVectors(t.c,vt),ft.subVectors(dt,ut),mt.subVectors(pt,dt),gt.subVectors(ut,pt);let e=[0,-ft.z,ft.y,0,-mt.z,mt.y,0,-gt.z,gt.y,ft.z,0,-ft.x,mt.z,0,-mt.x,gt.z,0,-gt.x,-ft.y,ft.x,0,-mt.y,mt.x,0,-gt.y,gt.x,0];return!!bt(e,ut,dt,pt,yt)&&(e=[1,0,0,0,1,0,0,0,1],!!bt(e,ut,dt,pt,yt)&&(xt.crossVectors(ft,mt),e=[xt.x,xt.y,xt.z],bt(e,ut,dt,pt,yt)))}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new rt),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return ct.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return void 0===t&&console.error("THREE.Box3: .getBoundingSphere() target is now required"),this.getCenter(t.center),t.radius=.5*this.getSize(ct).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(lt[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),lt[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),lt[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),lt[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),lt[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),lt[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),lt[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),lt[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(lt)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}ot.prototype.isBox3=!0;const lt=[new rt,new rt,new rt,new rt,new rt,new rt,new rt,new rt],ct=new rt,ht=new ot,ut=new rt,dt=new rt,pt=new rt,ft=new rt,mt=new rt,gt=new rt,vt=new rt,yt=new rt,xt=new rt,_t=new rt;function bt(t,e,n,i,r){for(let a=0,s=t.length-3;a<=s;a+=3){_t.fromArray(t,a);const s=r.x*Math.abs(_t.x)+r.y*Math.abs(_t.y)+r.z*Math.abs(_t.z),o=e.dot(_t),l=n.dot(_t),c=i.dot(_t);if(Math.max(-Math.max(o,l,c),Math.min(o,l,c))>s)return!1}return!0}const wt=new ot,Mt=new rt,St=new rt,Et=new rt;class Tt{constructor(t=new rt,e=-1){this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):wt.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return void 0===t&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),t=new ot),this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){Et.subVectors(t,this.center);const e=Et.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.add(Et.multiplyScalar(n/t)),this.radius+=n}return this}union(t){return St.subVectors(t.center,this.center).normalize().multiplyScalar(t.radius),this.expandByPoint(Mt.copy(t.center).add(St)),this.expandByPoint(Mt.copy(t.center).sub(St)),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const At=new rt,Lt=new rt,Ct=new rt,Rt=new rt,Pt=new rt,Dt=new rt,It=new rt;class Nt{constructor(t=new rt,e=new rt(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return void 0===e&&(console.warn("THREE.Ray: .at() target is now required"),e=new rt),e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,At)),this}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),e=new rt),e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=At.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(At.copy(this.direction).multiplyScalar(e).add(this.origin),At.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){Lt.copy(t).add(e).multiplyScalar(.5),Ct.copy(e).sub(t).normalize(),Rt.copy(this.origin).sub(Lt);const r=.5*t.distanceTo(e),a=-this.direction.dot(Ct),s=Rt.dot(this.direction),o=-Rt.dot(Ct),l=Rt.lengthSq(),c=Math.abs(1-a*a);let h,u,d,p;if(c>0)if(h=a*o-s,u=a*s-o,p=r*c,h>=0)if(u>=-p)if(u<=p){const t=1/c;h*=t,u*=t,d=h*(h+a*u+2*s)+u*(a*h+u+2*o)+l}else u=r,h=Math.max(0,-(a*u+s)),d=-h*h+u*(u+2*o)+l;else u=-r,h=Math.max(0,-(a*u+s)),d=-h*h+u*(u+2*o)+l;else u<=-p?(h=Math.max(0,-(-a*r+s)),u=h>0?-r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l):u<=p?(h=0,u=Math.min(Math.max(-r,-o),r),d=u*(u+2*o)+l):(h=Math.max(0,-(a*r+s)),u=h>0?r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l);else u=a>0?-r:r,h=Math.max(0,-(a*u+s)),d=-h*h+u*(u+2*o)+l;return n&&n.copy(this.direction).multiplyScalar(h).add(this.origin),i&&i.copy(Ct).multiplyScalar(u).add(Lt),d}intersectSphere(t,e){At.subVectors(t.center,this.origin);const n=At.dot(this.direction),i=At.dot(At)-n*n,r=t.radius*t.radius;if(i>r)return null;const a=Math.sqrt(r-i),s=n-a,o=n+a;return s<0&&o<0?null:s<0?this.at(o,e):this.at(s,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,a,s,o;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l>=0?(n=(t.min.x-u.x)*l,i=(t.max.x-u.x)*l):(n=(t.max.x-u.x)*l,i=(t.min.x-u.x)*l),c>=0?(r=(t.min.y-u.y)*c,a=(t.max.y-u.y)*c):(r=(t.max.y-u.y)*c,a=(t.min.y-u.y)*c),n>a||r>i?null:((r>n||n!=n)&&(n=r),(a=0?(s=(t.min.z-u.z)*h,o=(t.max.z-u.z)*h):(s=(t.max.z-u.z)*h,o=(t.min.z-u.z)*h),n>o||s>i?null:((s>n||n!=n)&&(n=s),(o=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,At)}intersectTriangle(t,e,n,i,r){Pt.subVectors(e,t),Dt.subVectors(n,t),It.crossVectors(Pt,Dt);let a,s=this.direction.dot(It);if(s>0){if(i)return null;a=1}else{if(!(s<0))return null;a=-1,s=-s}Rt.subVectors(this.origin,t);const o=a*this.direction.dot(Dt.crossVectors(Rt,Dt));if(o<0)return null;const l=a*this.direction.dot(Pt.cross(Rt));if(l<0)return null;if(o+l>s)return null;const c=-a*Rt.dot(It);return c<0?null:this.at(c/s,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class Ot{constructor(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,a,s,o,l,c,h,u,d,p,f,m){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=a,g[9]=s,g[13]=o,g[2]=l,g[6]=c,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=f,g[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new Ot).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/zt.setFromMatrixColumn(t,0).length(),r=1/zt.setFromMatrixColumn(t,1).length(),a=1/zt.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*a,e[9]=n[9]*a,e[10]=n[10]*a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");const e=this.elements,n=t.x,i=t.y,r=t.z,a=Math.cos(n),s=Math.sin(n),o=Math.cos(i),l=Math.sin(i),c=Math.cos(r),h=Math.sin(r);if("XYZ"===t.order){const t=a*c,n=a*h,i=s*c,r=s*h;e[0]=o*c,e[4]=-o*h,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-s*o,e[2]=r-t*l,e[6]=i+n*l,e[10]=a*o}else if("YXZ"===t.order){const t=o*c,n=o*h,i=l*c,r=l*h;e[0]=t+r*s,e[4]=i*s-n,e[8]=a*l,e[1]=a*h,e[5]=a*c,e[9]=-s,e[2]=n*s-i,e[6]=r+t*s,e[10]=a*o}else if("ZXY"===t.order){const t=o*c,n=o*h,i=l*c,r=l*h;e[0]=t-r*s,e[4]=-a*h,e[8]=i+n*s,e[1]=n+i*s,e[5]=a*c,e[9]=r-t*s,e[2]=-a*l,e[6]=s,e[10]=a*o}else if("ZYX"===t.order){const t=a*c,n=a*h,i=s*c,r=s*h;e[0]=o*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=o*h,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=s*o,e[10]=a*o}else if("YZX"===t.order){const t=a*o,n=a*l,i=s*o,r=s*l;e[0]=o*c,e[4]=r-t*h,e[8]=i*h+n,e[1]=h,e[5]=a*c,e[9]=-s*c,e[2]=-l*c,e[6]=n*h+i,e[10]=t-r*h}else if("XZY"===t.order){const t=a*o,n=a*l,i=s*o,r=s*l;e[0]=o*c,e[4]=-h,e[8]=l*c,e[1]=t*h+r,e[5]=a*c,e[9]=n*h-i,e[2]=i*h-n,e[6]=s*c,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Bt,t,Ft)}lookAt(t,e,n){const i=this.elements;return Vt.subVectors(t,e),0===Vt.lengthSq()&&(Vt.z=1),Vt.normalize(),Ut.crossVectors(n,Vt),0===Ut.lengthSq()&&(1===Math.abs(n.z)?Vt.x+=1e-4:Vt.z+=1e-4,Vt.normalize(),Ut.crossVectors(n,Vt)),Ut.normalize(),Ht.crossVectors(Vt,Ut),i[0]=Ut.x,i[4]=Ht.x,i[8]=Vt.x,i[1]=Ut.y,i[5]=Ht.y,i[9]=Vt.y,i[2]=Ut.z,i[6]=Ht.z,i[10]=Vt.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,a=n[0],s=n[4],o=n[8],l=n[12],c=n[1],h=n[5],u=n[9],d=n[13],p=n[2],f=n[6],m=n[10],g=n[14],v=n[3],y=n[7],x=n[11],_=n[15],b=i[0],w=i[4],M=i[8],S=i[12],E=i[1],T=i[5],A=i[9],L=i[13],C=i[2],R=i[6],P=i[10],D=i[14],I=i[3],N=i[7],O=i[11],z=i[15];return r[0]=a*b+s*E+o*C+l*I,r[4]=a*w+s*T+o*R+l*N,r[8]=a*M+s*A+o*P+l*O,r[12]=a*S+s*L+o*D+l*z,r[1]=c*b+h*E+u*C+d*I,r[5]=c*w+h*T+u*R+d*N,r[9]=c*M+h*A+u*P+d*O,r[13]=c*S+h*L+u*D+d*z,r[2]=p*b+f*E+m*C+g*I,r[6]=p*w+f*T+m*R+g*N,r[10]=p*M+f*A+m*P+g*O,r[14]=p*S+f*L+m*D+g*z,r[3]=v*b+y*E+x*C+_*I,r[7]=v*w+y*T+x*R+_*N,r[11]=v*M+y*A+x*P+_*O,r[15]=v*S+y*L+x*D+_*z,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],a=t[1],s=t[5],o=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*o*h-i*l*h-r*s*u+n*l*u+i*s*d-n*o*d)+t[7]*(+e*o*d-e*l*u+r*a*u-i*a*d+i*l*c-r*o*c)+t[11]*(+e*l*h-e*s*d-r*a*h+n*a*d+r*s*c-n*l*c)+t[15]*(-i*s*c-e*o*h+e*s*u+i*a*h-n*a*u+n*o*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],a=t[4],s=t[5],o=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],f=t[13],m=t[14],g=t[15],v=h*m*l-f*u*l+f*o*d-s*m*d-h*o*g+s*u*g,y=p*u*l-c*m*l-p*o*d+a*m*d+c*o*g-a*u*g,x=c*f*l-p*h*l+p*s*d-a*f*d-c*s*g+a*h*g,_=p*h*o-c*f*o-p*s*u+a*f*u+c*s*m-a*h*m,b=e*v+n*y+i*x+r*_;if(0===b)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const w=1/b;return t[0]=v*w,t[1]=(f*u*r-h*m*r-f*i*d+n*m*d+h*i*g-n*u*g)*w,t[2]=(s*m*r-f*o*r+f*i*l-n*m*l-s*i*g+n*o*g)*w,t[3]=(h*o*r-s*u*r-h*i*l+n*u*l+s*i*d-n*o*d)*w,t[4]=y*w,t[5]=(c*m*r-p*u*r+p*i*d-e*m*d-c*i*g+e*u*g)*w,t[6]=(p*o*r-a*m*r-p*i*l+e*m*l+a*i*g-e*o*g)*w,t[7]=(a*u*r-c*o*r+c*i*l-e*u*l-a*i*d+e*o*d)*w,t[8]=x*w,t[9]=(p*h*r-c*f*r-p*n*d+e*f*d+c*n*g-e*h*g)*w,t[10]=(a*f*r-p*s*r+p*n*l-e*f*l-a*n*g+e*s*g)*w,t[11]=(c*s*r-a*h*r-c*n*l+e*h*l+a*n*d-e*s*d)*w,t[12]=_*w,t[13]=(c*f*i-p*h*i+p*n*u-e*f*u-c*n*m+e*h*m)*w,t[14]=(p*s*i-a*f*i-p*n*o+e*f*o+a*n*m-e*s*m)*w,t[15]=(a*h*i-c*s*i+c*n*o-e*h*o-a*n*u+e*s*u)*w,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,a=t.x,s=t.y,o=t.z,l=r*a,c=r*s;return this.set(l*a+n,l*s-i*o,l*o+i*s,0,l*s+i*o,c*s+n,c*o-i*a,0,l*o-i*s,c*o+i*a,r*o*o+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,i,r,a){return this.set(1,n,r,0,t,1,a,0,e,i,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,a=e._y,s=e._z,o=e._w,l=r+r,c=a+a,h=s+s,u=r*l,d=r*c,p=r*h,f=a*c,m=a*h,g=s*h,v=o*l,y=o*c,x=o*h,_=n.x,b=n.y,w=n.z;return i[0]=(1-(f+g))*_,i[1]=(d+x)*_,i[2]=(p-y)*_,i[3]=0,i[4]=(d-x)*b,i[5]=(1-(u+g))*b,i[6]=(m+v)*b,i[7]=0,i[8]=(p+y)*w,i[9]=(m-v)*w,i[10]=(1-(u+f))*w,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=zt.set(i[0],i[1],i[2]).length();const a=zt.set(i[4],i[5],i[6]).length(),s=zt.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],kt.copy(this);const o=1/r,l=1/a,c=1/s;return kt.elements[0]*=o,kt.elements[1]*=o,kt.elements[2]*=o,kt.elements[4]*=l,kt.elements[5]*=l,kt.elements[6]*=l,kt.elements[8]*=c,kt.elements[9]*=c,kt.elements[10]*=c,e.setFromRotationMatrix(kt),n.x=r,n.y=a,n.z=s,this}makePerspective(t,e,n,i,r,a){void 0===a&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");const s=this.elements,o=2*r/(e-t),l=2*r/(n-i),c=(e+t)/(e-t),h=(n+i)/(n-i),u=-(a+r)/(a-r),d=-2*a*r/(a-r);return s[0]=o,s[4]=0,s[8]=c,s[12]=0,s[1]=0,s[5]=l,s[9]=h,s[13]=0,s[2]=0,s[6]=0,s[10]=u,s[14]=d,s[3]=0,s[7]=0,s[11]=-1,s[15]=0,this}makeOrthographic(t,e,n,i,r,a){const s=this.elements,o=1/(e-t),l=1/(n-i),c=1/(a-r),h=(e+t)*o,u=(n+i)*l,d=(a+r)*c;return s[0]=2*o,s[4]=0,s[8]=0,s[12]=-h,s[1]=0,s[5]=2*l,s[9]=0,s[13]=-u,s[2]=0,s[6]=0,s[10]=-2*c,s[14]=-d,s[3]=0,s[7]=0,s[11]=0,s[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}Ot.prototype.isMatrix4=!0;const zt=new rt,kt=new Ot,Bt=new rt(0,0,0),Ft=new rt(1,1,1),Ut=new rt,Ht=new rt,Vt=new rt,Gt=new Ot,Wt=new it;class jt{constructor(t=0,e=0,n=0,i=jt.DefaultOrder){this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._order=i||this._order,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e,n){const i=t.elements,r=i[0],a=i[4],s=i[8],o=i[1],l=i[5],c=i[9],h=i[2],u=i[6],d=i[10];switch(e=e||this._order){case"XYZ":this._y=Math.asin(W(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-c,d),this._z=Math.atan2(-a,r)):(this._x=Math.atan2(u,l),this._z=0);break;case"YXZ":this._x=Math.asin(-W(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(s,d),this._z=Math.atan2(o,l)):(this._y=Math.atan2(-h,r),this._z=0);break;case"ZXY":this._x=Math.asin(W(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-h,d),this._z=Math.atan2(-a,l)):(this._y=0,this._z=Math.atan2(o,r));break;case"ZYX":this._y=Math.asin(-W(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(o,r)):(this._x=0,this._z=Math.atan2(-a,l));break;case"YZX":this._z=Math.asin(W(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-c,l),this._y=Math.atan2(-h,r)):(this._x=0,this._y=Math.atan2(s,d));break;case"XZY":this._z=Math.asin(-W(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(u,l),this._y=Math.atan2(s,r)):(this._x=Math.atan2(-c,d),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!1!==n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return Gt.makeRotationFromQuaternion(t),this.setFromRotationMatrix(Gt,e,n)}setFromVector3(t,e){return this.set(t.x,t.y,t.z,e||this._order)}reorder(t){return Wt.setFromEuler(this),this.setFromQuaternion(Wt,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new rt(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}jt.prototype.isEuler=!0,jt.DefaultOrder="XYZ",jt.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];class qt{constructor(){this.mask=1}set(t){this.mask=1<1){for(let t=0;t1){for(let t=0;t0){i.children=[];for(let e=0;e0){i.animations=[];for(let e=0;e0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),s.length>0&&(n.images=s),o.length>0&&(n.shapes=o),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c)}return n.object=i,n;function a(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e1?null:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return void 0===t&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),t=new rt),t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||ce.getNormalMatrix(t),i=this.coplanarPoint(oe).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}he.prototype.isPlane=!0;const ue=new rt,de=new rt,pe=new rt,fe=new rt,me=new rt,ge=new rt,ve=new rt,ye=new rt,xe=new rt,_e=new rt;class be{constructor(t=new rt,e=new rt,n=new rt){this.a=t,this.b=e,this.c=n}static getNormal(t,e,n,i){void 0===i&&(console.warn("THREE.Triangle: .getNormal() target is now required"),i=new rt),i.subVectors(n,e),ue.subVectors(t,e),i.cross(ue);const r=i.lengthSq();return r>0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){ue.subVectors(i,e),de.subVectors(n,e),pe.subVectors(t,e);const a=ue.dot(ue),s=ue.dot(de),o=ue.dot(pe),l=de.dot(de),c=de.dot(pe),h=a*l-s*s;if(void 0===r&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),r=new rt),0===h)return r.set(-2,-1,-1);const u=1/h,d=(l*o-s*c)*u,p=(a*c-s*o)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,fe),fe.x>=0&&fe.y>=0&&fe.x+fe.y<=1}static getUV(t,e,n,i,r,a,s,o){return this.getBarycoord(t,e,n,i,fe),o.set(0,0),o.addScaledVector(r,fe.x),o.addScaledVector(a,fe.y),o.addScaledVector(s,fe.z),o}static isFrontFacing(t,e,n,i){return ue.subVectors(n,e),de.subVectors(t,e),ue.cross(de).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return ue.subVectors(this.c,this.b),de.subVectors(this.a,this.b),.5*ue.cross(de).length()}getMidpoint(t){return void 0===t&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),t=new rt),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return be.getNormal(this.a,this.b,this.c,t)}getPlane(t){return void 0===t&&(console.warn("THREE.Triangle: .getPlane() target is now required"),t=new he),t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return be.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return be.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return be.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return be.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),e=new rt);const n=this.a,i=this.b,r=this.c;let a,s;me.subVectors(i,n),ge.subVectors(r,n),ye.subVectors(t,n);const o=me.dot(ye),l=ge.dot(ye);if(o<=0&&l<=0)return e.copy(n);xe.subVectors(t,i);const c=me.dot(xe),h=ge.dot(xe);if(c>=0&&h<=c)return e.copy(i);const u=o*h-c*l;if(u<=0&&o>=0&&c<=0)return a=o/(o-c),e.copy(n).addScaledVector(me,a);_e.subVectors(t,r);const d=me.dot(_e),p=ge.dot(_e);if(p>=0&&d<=p)return e.copy(r);const f=d*l-o*p;if(f<=0&&l>=0&&p<=0)return s=l/(l-p),e.copy(n).addScaledVector(ge,s);const m=c*p-d*h;if(m<=0&&h-c>=0&&d-p>=0)return ve.subVectors(r,i),s=(h-c)/(h-c+(d-p)),e.copy(i).addScaledVector(ve,s);const g=1/(m+f+u);return a=f*g,s=u*g,e.copy(n).addScaledVector(me,a).addScaledVector(ge,s)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}let we=0;class Me extends F{constructor(){super(),Object.defineProperty(this,"id",{value:we++}),this.uuid=G(),this.name="",this.type="Material",this.fog=!0,this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=h,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=O,this.stencilZFail=O,this.stencilZPass=O,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaTest=0,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0}onBuild(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const n=t[e];if(void 0===n){console.warn("THREE.Material: '"+e+"' parameter is undefined.");continue}if("shading"===e){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===n;continue}const i=this[e];void 0!==i?i&&i.isColor?i.set(n):i&&i.isVector3&&n&&n.isVector3?i.copy(n):this[e]=n:console.warn("THREE."+this.type+": '"+e+"' is not a property of this material.")}}toJSON(t){const e=void 0===t||"string"==typeof t;e&&(t={textures:{},images:{}});const n={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function i(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}if(n.uuid=this.uuid,n.type=this.type,""!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),this.sheen&&this.sheen.isColor&&(n.sheen=this.sheen.getHex()),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearcoat&&(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(n.combine=this.combine)),void 0!==this.envMapIntensity&&(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance&&(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(n.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(n.size=this.size),null!==this.shadowSide&&(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(n.blending=this.blending),0!==this.side&&(n.side=this.side),this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),!0===this.transparent&&(n.transparent=this.transparent),n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.stencilWrite=this.stencilWrite,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,this.rotation&&0!==this.rotation&&(n.rotation=this.rotation),!0===this.polygonOffset&&(n.polygonOffset=!0),0!==this.polygonOffsetFactor&&(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth&&1!==this.linewidth&&(n.linewidth=this.linewidth),void 0!==this.dashSize&&(n.dashSize=this.dashSize),void 0!==this.gapSize&&(n.gapSize=this.gapSize),void 0!==this.scale&&(n.scale=this.scale),!0===this.dithering&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(n.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(n.morphTargets=!0),!0===this.morphNormals&&(n.morphNormals=!0),!0===this.flatShading&&(n.flatShading=this.flatShading),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length>0&&(n.textures=e),r.length>0&&(n.images=r)}return n}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){!0===t&&this.version++}}Me.prototype.isMaterial=!0;const Se={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Ee={h:0,s:0,l:0},Te={h:0,s:0,l:0};function Ae(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function Le(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function Ce(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class Re{constructor(t,e,n){return void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){if(t=function(t,e){return(t%e+e)%e}(t,1),e=W(e,0,1),n=W(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=Ae(r,i,t+1/3),this.g=Ae(r,i,t),this.b=Ae(r,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)){let t;const i=n[1],r=n[2];switch(i){case"rgb":case"rgba":if(t=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[4]),this;if(t=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[4]),this;break;case"hsl":case"hsla":if(t=/^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,r=parseInt(t[3],10)/100;return e(t[4]),this.setHSL(n,i,r)}}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this}setColorName(t){const e=Se[t.toLowerCase()];return void 0!==e?this.setHex(e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=Le(t.r),this.g=Le(t.g),this.b=Le(t.b),this}copyLinearToSRGB(t){return this.r=Ce(t.r),this.g=Ce(t.g),this.b=Ce(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return("000000"+this.getHex().toString(16)).slice(-6)}getHSL(t){void 0===t&&(console.warn("THREE.Color: .getHSL() target is now required"),t={h:0,s:0,l:0});const e=this.r,n=this.g,i=this.b,r=Math.max(e,n,i),a=Math.min(e,n,i);let s,o;const l=(a+r)/2;if(a===r)s=0,o=0;else{const t=r-a;switch(o=l<=.5?t/(r+a):t/(2-r-a),r){case e:s=(n-i)/t+(ne&&(e=t[n]);return e}let Fe=0;const Ue=new Ot,He=new se,Ve=new rt,Ge=new ot,We=new ot,je=new rt;class qe extends F{constructor(){super(),Object.defineProperty(this,"id",{value:Fe++}),this.uuid=G(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(Be(t)>65535?ze:Oe)(t,1):this.index=t,this}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return void 0!==this.attributes[t]}addGroup(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new Z).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}applyQuaternion(t){return Ue.makeRotationFromQuaternion(t),this.applyMatrix4(Ue),this}rotateX(t){return Ue.makeRotationX(t),this.applyMatrix4(Ue),this}rotateY(t){return Ue.makeRotationY(t),this.applyMatrix4(Ue),this}rotateZ(t){return Ue.makeRotationZ(t),this.applyMatrix4(Ue),this}translate(t,e,n){return Ue.makeTranslation(t,e,n),this.applyMatrix4(Ue),this}scale(t,e,n){return Ue.makeScale(t,e,n),this.applyMatrix4(Ue),this}lookAt(t){return He.lookAt(t),He.updateMatrix(),this.applyMatrix4(He.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Ve).negate(),this.translate(Ve.x,Ve.y,Ve.z),this}setFromPoints(t){const e=[];for(let n=0,i=t.length;n0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e];t.data.attributes[e]=i.toJSON(t.data)}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],a=[];for(let e=0,i=n.length;e0&&(i[e]=a,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(t.data.groups=JSON.parse(JSON.stringify(a)));const s=this.boundingSphere;return null!==s&&(t.data.boundingSphere={center:s.center.toArray(),radius:s.radius}),t}clone(){return(new qe).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;t0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}}raycast(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),Ze.copy(n.boundingSphere),Ze.applyMatrix4(r),!1===t.ray.intersectsSphere(Ze))return;if(Xe.copy(r).invert(),Ye.copy(t.ray).applyMatrix4(Xe),null!==n.boundingBox&&!1===Ye.intersectsBox(n.boundingBox))return;let a;if(n.isBufferGeometry){const r=n.index,s=n.attributes.position,o=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,h=n.attributes.uv2,u=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=u.length;nn.far?null:{distance:c,point:hn.clone(),object:t}}(t,e,n,i,Je,$e,Qe,cn);if(p){o&&(sn.fromBufferAttribute(o,c),on.fromBufferAttribute(o,h),ln.fromBufferAttribute(o,u),p.uv=be.getUV(cn,Je,$e,Qe,sn,on,ln,new Y)),l&&(sn.fromBufferAttribute(l,c),on.fromBufferAttribute(l,h),ln.fromBufferAttribute(l,u),p.uv2=be.getUV(cn,Je,$e,Qe,sn,on,ln,new Y));const t={a:c,b:h,c:u,normal:new rt,materialIndex:0};be.getNormal(Je,$e,Qe,t.normal),p.face=t}return p}un.prototype.isMesh=!0;class pn extends qe{constructor(t=1,e=1,n=1,i=1,r=1,a=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:n,widthSegments:i,heightSegments:r,depthSegments:a};const s=this;i=Math.floor(i),r=Math.floor(r),a=Math.floor(a);const o=[],l=[],c=[],h=[];let u=0,d=0;function p(t,e,n,i,r,a,p,f,m,g,v){const y=a/m,x=p/g,_=a/2,b=p/2,w=f/2,M=m+1,S=g+1;let E=0,T=0;const A=new rt;for(let a=0;a0?1:-1,c.push(A.x,A.y,A.z),h.push(o/m),h.push(1-a/g),E+=1}}for(let t=0;t0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e}}vn.prototype.isShaderMaterial=!0;class yn extends se{constructor(){super(),this.type="Camera",this.matrixWorldInverse=new Ot,this.projectionMatrix=new Ot,this.projectionMatrixInverse=new Ot}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this}getWorldDirection(t){void 0===t&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),t=new rt),this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}yn.prototype.isCamera=!0;class xn extends yn{constructor(t=50,e=1,n=.1,i=2e3){super(),this.type="PerspectiveCamera",this.fov=t,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*V*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*H*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*V*Math.atan(Math.tan(.5*H*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(t,e,n,i,r,a){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*H*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const a=this.view;if(null!==this.view&&this.view.enabled){const t=a.fullWidth,s=a.fullHeight;r+=a.offsetX*i/t,e-=a.offsetY*n/s,i*=a.width/t,n*=a.height/s}const s=this.filmOffset;0!==s&&(r+=t*s/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}xn.prototype.isPerspectiveCamera=!0;const _n=90;class bn extends se{constructor(t,e,n){if(super(),this.type="CubeCamera",!0!==n.isWebGLCubeRenderTarget)return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");this.renderTarget=n;const i=new xn(_n,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new rt(1,0,0)),this.add(i);const r=new xn(_n,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new rt(-1,0,0)),this.add(r);const a=new xn(_n,1,t,e);a.layers=this.layers,a.up.set(0,0,1),a.lookAt(new rt(0,1,0)),this.add(a);const s=new xn(_n,1,t,e);s.layers=this.layers,s.up.set(0,0,-1),s.lookAt(new rt(0,-1,0)),this.add(s);const o=new xn(_n,1,t,e);o.layers=this.layers,o.up.set(0,-1,0),o.lookAt(new rt(0,0,1)),this.add(o);const l=new xn(_n,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new rt(0,0,-1)),this.add(l)}update(t,e){null===this.parent&&this.updateMatrixWorld();const n=this.renderTarget,[i,r,a,s,o,l]=this.children,c=t.xr.enabled,h=t.getRenderTarget();t.xr.enabled=!1;const u=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,a),t.setRenderTarget(n,3),t.render(e,s),t.setRenderTarget(n,4),t.render(e,o),n.texture.generateMipmaps=u,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(h),t.xr.enabled=c}}class wn extends K{constructor(t,e,n,i,r,a,s,o,l,c){super(t=void 0!==t?t:[],e=void 0!==e?e:301,n,i,r,a,s=void 0!==s?s:M,o,l,c),this._needsFlipEnvMap=!0,this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}wn.prototype.isCubeTexture=!0;class Mn extends nt{constructor(t,e,n){Number.isInteger(e)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),e=n),super(t,t,e),e=e||{},this.texture=new wn(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture.generateMipmaps=void 0!==e.generateMipmaps&&e.generateMipmaps,this.texture.minFilter=void 0!==e.minFilter?e.minFilter:m,this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.format=S,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},i=new pn(5,5,5),r=new vn({name:"CubemapFromEquirect",uniforms:fn(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const a=new un(i,r),s=e.minFilter;e.minFilter===g&&(e.minFilter=m);return new bn(1,10,this).update(t,a),e.minFilter=s,a.geometry.dispose(),a.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}Mn.prototype.isWebGLCubeRenderTarget=!0;const Sn=new Tt,En=new rt;class Tn{constructor(t=new he,e=new he,n=new he,i=new he,r=new he,a=new he){this.planes=[t,e,n,i,r,a]}set(t,e,n,i,r,a){const s=this.planes;return s[0].copy(t),s[1].copy(e),s[2].copy(n),s[3].copy(i),s[4].copy(r),s[5].copy(a),this}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],a=n[2],s=n[3],o=n[4],l=n[5],c=n[6],h=n[7],u=n[8],d=n[9],p=n[10],f=n[11],m=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(s-i,h-o,f-u,y-m).normalize(),e[1].setComponents(s+i,h+o,f+u,y+m).normalize(),e[2].setComponents(s+r,h+l,f+d,y+g).normalize(),e[3].setComponents(s-r,h-l,f-d,y-g).normalize(),e[4].setComponents(s-a,h-c,f-p,y-v).normalize(),e[5].setComponents(s+a,h+c,f+p,y+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),Sn.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(Sn)}intersectsSprite(t){return Sn.center.set(0,0,0),Sn.radius=.7071067811865476,Sn.applyMatrix4(t.matrixWorld),this.intersectsSphere(Sn)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)0?t.max.x:t.min.x,En.y=i.normal.y>0?t.max.y:t.min.y,En.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(En)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function An(){let t=null,e=!1,n=null,i=null;function r(e,a){n(e,a),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function Ln(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_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}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * 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}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat 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_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + 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 = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\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",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",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",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",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; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\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 max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\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};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\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}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\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 linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.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}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.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\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\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\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + 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 ), m0, cubeUV_maxMipLevel );\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",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( 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 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",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, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\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",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\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",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\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",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\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",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif",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",fog_vertex:"#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\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",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 texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\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 GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\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 getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.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 getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.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 getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.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 GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\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 GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), rawDiffuseColor, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), rawDiffuseColor, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).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_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\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.specularRoughness;\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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * 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}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\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\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( 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, geometry, 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\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\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, 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\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( 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, geometry, 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, geometry, 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\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\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 ], geometry );\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",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).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( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.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 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",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}\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 linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( 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 invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",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",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#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\tvarying vec4 vSpotShadowCoord[ 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\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#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\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ 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 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",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",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, vSpotShadowCoord[ 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}",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",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",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",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",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",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 toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\t#ifdef USE_TRANSMISSIONMAP\n\t\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSNMAP\n\t\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition.xyz / vWorldPosition.w;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n\tfloat ior = ( 1.0 + 0.4 * reflectivity ) / ( 1.0 - 0.4 * reflectivity );\n\tvec3 f0 = vec3( pow( ior - 1.0, 2.0 ) / pow( ior + 1.0, 2.0 ) );\n\tvec3 f90 = vec3( 1.0 );\n\tvec3 f_transmission = totalTransmission * getIBLVolumeRefraction(\n\t\tnormal, v, viewDir, roughnessFactor, diffuseColor.rgb, f0, f90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\n\t\tattenuationColor, attenuationDistance);\n\tdiffuseColor.rgb = mix( diffuseColor.rgb, f_transmission, totalTransmission );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\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 vec4 vWorldPosition;\n\tvec3 getVolumeTransmissionRay(vec3 n, vec3 v, float thickness, float ior, 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(float roughness, float ior) {\n\t\treturn roughness * clamp(ior * 2.0 - 2.0, 0.0, 1.0);\n\t}\n\tvec3 getTransmissionSample(vec2 fragCoord, float roughness, float ior) {\n\t\tfloat framebufferLod = log2(transmissionSamplerSize.x) * applyIorToRoughness(roughness, ior);\n\t\treturn texture2DLodEXT(transmissionSamplerMap, fragCoord.xy, framebufferLod).rgb;\n\t}\n\tvec3 applyVolumeAttenuation(vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance) {\n\t\tif (attenuationDistance == 0.0) {\n\t\t\treturn radiance;\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log(attenuationColor) / attenuationDistance;\n\t\t\tvec3 transmittance = exp(-attenuationCoefficient * transmissionDistance);\t\t\treturn transmittance * radiance;\n\t\t}\n\t}\n\tvec3 getIBLVolumeRefraction(vec3 n, vec3 v, vec3 viewDir, float perceptualRoughness, vec3 baseColor, vec3 f0, vec3 f90,\n\t\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness, vec3 attenuationColor, float attenuationDistance) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay(n, v, thickness, ior, modelMatrix);\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4(refractedRayExit, 1.0);\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec3 transmittedLight = getTransmissionSample(refractionCoords, perceptualRoughness, ior);\n\t\tvec3 attenuatedColor = applyVolumeAttenuation(transmittedLight, length(transmissionRay), attenuationColor, attenuationDistance);\n\t\tfloat NdotV = saturate(dot(n, viewDir));\n\t\tvec2 brdf = integrateSpecularBRDF(NdotV, perceptualRoughness);\n\t\tvec3 specularColor = f0 * brdf.x + f90 * brdf.y;\n\t\treturn (1.0 - specularColor) * attenuatedColor * baseColor;\n\t}\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"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}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",cube_vert:"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}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\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\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}",depth_vert:"#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#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}",distanceRGBA_frag:"#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 \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\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}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\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}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"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 \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\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}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#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#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\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 \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#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#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\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\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#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\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\tvViewPosition = - mvPosition.xyz;\n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \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\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#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#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \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\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#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#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform vec3 attenuationColor;\n\tuniform float attenuationDistance;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#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\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef USE_TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t\tfloat thicknessFactor = thickness;\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 \n\t#include \n\t#include \n\t#include \n\tvec3 rawDiffuseColor = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#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\n#ifdef USE_TRANSMISSION\n\tvarying vec4 vWorldPosition;\n#endif\n#include \n#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#include \n\t#include \n\t#include \n#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\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition;\n#endif\n}",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#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\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\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#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\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#include \n#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\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\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\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \nvoid main() {\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}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"},Pn={common:{diffuse:{value:new Re(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new Z},uv2Transform:{value:new Z},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new Y(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Re(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Re(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new Z}},sprite:{diffuse:{value:new Re(16777215)},opacity:{value:1},center:{value:new Y(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new Z}}},Dn={basic:{uniforms:mn([Pn.common,Pn.specularmap,Pn.envmap,Pn.aomap,Pn.lightmap,Pn.fog]),vertexShader:Rn.meshbasic_vert,fragmentShader:Rn.meshbasic_frag},lambert:{uniforms:mn([Pn.common,Pn.specularmap,Pn.envmap,Pn.aomap,Pn.lightmap,Pn.emissivemap,Pn.fog,Pn.lights,{emissive:{value:new Re(0)}}]),vertexShader:Rn.meshlambert_vert,fragmentShader:Rn.meshlambert_frag},phong:{uniforms:mn([Pn.common,Pn.specularmap,Pn.envmap,Pn.aomap,Pn.lightmap,Pn.emissivemap,Pn.bumpmap,Pn.normalmap,Pn.displacementmap,Pn.fog,Pn.lights,{emissive:{value:new Re(0)},specular:{value:new Re(1118481)},shininess:{value:30}}]),vertexShader:Rn.meshphong_vert,fragmentShader:Rn.meshphong_frag},standard:{uniforms:mn([Pn.common,Pn.envmap,Pn.aomap,Pn.lightmap,Pn.emissivemap,Pn.bumpmap,Pn.normalmap,Pn.displacementmap,Pn.roughnessmap,Pn.metalnessmap,Pn.fog,Pn.lights,{emissive:{value:new Re(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Rn.meshphysical_vert,fragmentShader:Rn.meshphysical_frag},toon:{uniforms:mn([Pn.common,Pn.aomap,Pn.lightmap,Pn.emissivemap,Pn.bumpmap,Pn.normalmap,Pn.displacementmap,Pn.gradientmap,Pn.fog,Pn.lights,{emissive:{value:new Re(0)}}]),vertexShader:Rn.meshtoon_vert,fragmentShader:Rn.meshtoon_frag},matcap:{uniforms:mn([Pn.common,Pn.bumpmap,Pn.normalmap,Pn.displacementmap,Pn.fog,{matcap:{value:null}}]),vertexShader:Rn.meshmatcap_vert,fragmentShader:Rn.meshmatcap_frag},points:{uniforms:mn([Pn.points,Pn.fog]),vertexShader:Rn.points_vert,fragmentShader:Rn.points_frag},dashed:{uniforms:mn([Pn.common,Pn.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Rn.linedashed_vert,fragmentShader:Rn.linedashed_frag},depth:{uniforms:mn([Pn.common,Pn.displacementmap]),vertexShader:Rn.depth_vert,fragmentShader:Rn.depth_frag},normal:{uniforms:mn([Pn.common,Pn.bumpmap,Pn.normalmap,Pn.displacementmap,{opacity:{value:1}}]),vertexShader:Rn.normal_vert,fragmentShader:Rn.normal_frag},sprite:{uniforms:mn([Pn.sprite,Pn.fog]),vertexShader:Rn.sprite_vert,fragmentShader:Rn.sprite_frag},background:{uniforms:{uvTransform:{value:new Z},t2D:{value:null}},vertexShader:Rn.background_vert,fragmentShader:Rn.background_frag},cube:{uniforms:mn([Pn.envmap,{opacity:{value:1}}]),vertexShader:Rn.cube_vert,fragmentShader:Rn.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Rn.equirect_vert,fragmentShader:Rn.equirect_frag},distanceRGBA:{uniforms:mn([Pn.common,Pn.displacementmap,{referencePosition:{value:new rt},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Rn.distanceRGBA_vert,fragmentShader:Rn.distanceRGBA_frag},shadow:{uniforms:mn([Pn.lights,Pn.fog,{color:{value:new Re(0)},opacity:{value:1}}]),vertexShader:Rn.shadow_vert,fragmentShader:Rn.shadow_frag}};function In(t,e,n,i,r){const a=new Re(0);let s,o,l=0,c=null,h=0,u=null;function d(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,r)}return{getClearColor:function(){return a},setClearColor:function(t,e=1){a.set(t),l=e,d(a,l)},getClearAlpha:function(){return l},setClearAlpha:function(t){l=t,d(a,l)},render:function(n,r){let p=!1,f=!0===r.isScene?r.background:null;f&&f.isTexture&&(f=e.get(f));const m=t.xr,g=m.getSession&&m.getSession();g&&"additive"===g.environmentBlendMode&&(f=null),null===f?d(a,l):f&&f.isColor&&(d(f,1),p=!0),(t.autoClear||p)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),f&&(f.isCubeTexture||306===f.mapping)?(void 0===o&&(o=new un(new pn(1,1,1),new vn({name:"BackgroundCubeMaterial",uniforms:fn(Dn.cube.uniforms),vertexShader:Dn.cube.vertexShader,fragmentShader:Dn.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),o.geometry.deleteAttribute("normal"),o.geometry.deleteAttribute("uv"),o.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(o.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(o)),o.material.uniforms.envMap.value=f,o.material.uniforms.flipEnvMap.value=f.isCubeTexture&&f._needsFlipEnvMap?-1:1,c===f&&h===f.version&&u===t.toneMapping||(o.material.needsUpdate=!0,c=f,h=f.version,u=t.toneMapping),n.unshift(o,o.geometry,o.material,0,0,null)):f&&f.isTexture&&(void 0===s&&(s=new un(new Cn(2,2),new vn({name:"BackgroundMaterial",uniforms:fn(Dn.background.uniforms),vertexShader:Dn.background.vertexShader,fragmentShader:Dn.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),s.geometry.deleteAttribute("normal"),Object.defineProperty(s.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(s)),s.material.uniforms.t2D.value=f,!0===f.matrixAutoUpdate&&f.updateMatrix(),s.material.uniforms.uvTransform.value.copy(f.matrix),c===f&&h===f.version&&u===t.toneMapping||(s.material.needsUpdate=!0,c=f,h=f.version,u=t.toneMapping),n.unshift(s,s.geometry,s.material,0,0,null))}}}function Nn(t,e,n,i){const r=t.getParameter(34921),a=i.isWebGL2?null:e.get("OES_vertex_array_object"),s=i.isWebGL2||null!==a,o={},l=d(null);let c=l;function h(e){return i.isWebGL2?t.bindVertexArray(e):a.bindVertexArrayOES(e)}function u(e){return i.isWebGL2?t.deleteVertexArray(e):a.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t=0){const a=l[e];if(void 0!==a){const e=a.normalized,r=a.itemSize,s=n.get(a);if(void 0===s)continue;const l=s.buffer,c=s.type,h=s.bytesPerElement;if(a.isInterleavedBufferAttribute){const n=a.data,s=n.stride,u=a.offset;n&&n.isInstancedInterleavedBuffer?(m(i,n.meshPerAttribute),void 0===o._maxInstanceCount&&(o._maxInstanceCount=n.meshPerAttribute*n.count)):f(i),t.bindBuffer(34962,l),v(i,r,c,e,s*h,u*h)}else a.isInstancedBufferAttribute?(m(i,a.meshPerAttribute),void 0===o._maxInstanceCount&&(o._maxInstanceCount=a.meshPerAttribute*a.count)):f(i),t.bindBuffer(34962,l),v(i,r,c,e,0,0)}else if("instanceMatrix"===e){const e=n.get(r.instanceMatrix);if(void 0===e)continue;const a=e.buffer,s=e.type;m(i+0,1),m(i+1,1),m(i+2,1),m(i+3,1),t.bindBuffer(34962,a),t.vertexAttribPointer(i+0,4,s,!1,64,0),t.vertexAttribPointer(i+1,4,s,!1,64,16),t.vertexAttribPointer(i+2,4,s,!1,64,32),t.vertexAttribPointer(i+3,4,s,!1,64,48)}else if("instanceColor"===e){const e=n.get(r.instanceColor);if(void 0===e)continue;const a=e.buffer,s=e.type;m(i,1),t.bindBuffer(34962,a),t.vertexAttribPointer(i,3,s,!1,12,0)}else if(void 0!==h){const n=h[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i,n);break;case 3:t.vertexAttrib3fv(i,n);break;case 4:t.vertexAttrib4fv(i,n);break;default:t.vertexAttrib1fv(i,n)}}}}g()}(r,l,u,y),null!==x&&t.bindBuffer(34963,n.get(x).buffer))},reset:y,resetDefaultState:x,dispose:function(){y();for(const t in o){const e=o[t];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete o[t]}},releaseStatesOfGeometry:function(t){if(void 0===o[t.id])return;const e=o[t.id];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete o[t.id]},releaseStatesOfProgram:function(t){for(const e in o){const n=o[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)u(i[t].object),delete i[t];delete n[t.id]}},initAttributes:p,enableAttribute:f,disableUnusedAttributes:g}}function On(t,e,n,i){const r=i.isWebGL2;let a;this.setMode=function(t){a=t},this.render=function(e,i){t.drawArrays(a,e,i),n.update(i,a,1)},this.renderInstances=function(i,s,o){if(0===o)return;let l,c;if(r)l=t,c="drawArraysInstanced";else if(l=e.get("ANGLE_instanced_arrays"),c="drawArraysInstancedANGLE",null===l)return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");l[c](a,i,s,o),n.update(s,a,o)}}function zn(t,e,n){let i;function r(e){if("highp"===e){if(t.getShaderPrecisionFormat(35633,36338).precision>0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const a="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let s=void 0!==n.precision?n.precision:"highp";const o=r(s);o!==s&&(console.warn("THREE.WebGLRenderer:",s,"not supported, using",o,"instead."),s=o);const l=a||e.has("WEBGL_draw_buffers"),c=!0===n.logarithmicDepthBuffer,h=t.getParameter(34930),u=t.getParameter(35660),d=t.getParameter(3379),p=t.getParameter(34076),f=t.getParameter(34921),m=t.getParameter(36347),g=t.getParameter(36348),v=t.getParameter(36349),y=u>0,x=a||e.has("OES_texture_float");return{isWebGL2:a,drawBuffers:l,getMaxAnisotropy:function(){if(void 0!==i)return i;if(!0===e.has("EXT_texture_filter_anisotropic")){const n=e.get("EXT_texture_filter_anisotropic");i=t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i},getMaxPrecision:r,precision:s,logarithmicDepthBuffer:c,maxTextures:h,maxVertexTextures:u,maxTextureSize:d,maxCubemapSize:p,maxAttributes:f,maxVertexUniforms:m,maxVaryings:g,maxFragmentUniforms:v,vertexTextures:y,floatFragmentTextures:x,floatVertexTextures:y&&x,maxSamples:a?t.getParameter(36183):0}}function kn(t){const e=this;let n=null,i=0,r=!1,a=!1;const s=new he,o=new Z,l={value:null,needsUpdate:!1};function c(){l.value!==n&&(l.value=n,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function h(t,n,i,r){const a=null!==t?t.length:0;let c=null;if(0!==a){if(c=l.value,!0!==r||null===c){const e=i+4*a,r=n.matrixWorldInverse;o.getNormalMatrix(r),(null===c||c.length0){const s=t.getRenderTarget(),o=new Mn(a.height/2);return o.fromEquirectangularTexture(t,r),e.set(r,o),t.setRenderTarget(s),r.addEventListener("dispose",i),n(o.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}function Fn(t){const e={};function n(n){if(void 0!==e[n])return e[n];let i;switch(n){case"WEBGL_depth_texture":i=t.getExtension("WEBGL_depth_texture")||t.getExtension("MOZ_WEBGL_depth_texture")||t.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":i=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":i=t.getExtension("WEBGL_compressed_texture_s3tc")||t.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":i=t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:i=t.getExtension(n)}return e[n]=i,i}return{has:function(t){return null!==n(t)},init:function(t){t.isWebGL2?n("EXT_color_buffer_float"):(n("WEBGL_depth_texture"),n("OES_texture_float"),n("OES_texture_half_float"),n("OES_texture_half_float_linear"),n("OES_standard_derivatives"),n("OES_element_index_uint"),n("OES_vertex_array_object"),n("ANGLE_instanced_arrays")),n("OES_texture_float_linear"),n("EXT_color_buffer_half_float")},get:function(t){const e=n(t);return null===e&&console.warn("THREE.WebGLRenderer: "+t+" extension not supported."),e}}}function Un(t,e,n,i){const r={},a=new WeakMap;function s(t){const o=t.target;null!==o.index&&e.remove(o.index);for(const t in o.attributes)e.remove(o.attributes[t]);o.removeEventListener("dispose",s),delete r[o.id];const l=a.get(o);l&&(e.remove(l),a.delete(o)),i.releaseStatesOfGeometry(o),!0===o.isInstancedBufferGeometry&&delete o._maxInstanceCount,n.memory.geometries--}function o(t){const n=[],i=t.index,r=t.attributes.position;let s=0;if(null!==i){const t=i.array;s=i.version;for(let e=0,i=t.length;e65535?ze:Oe)(n,1);o.version=s;const l=a.get(t);l&&e.remove(l),a.set(t,o)}return{get:function(t,e){return!0===r[e.id]||(e.addEventListener("dispose",s),r[e.id]=!0,n.memory.geometries++),e},update:function(t){const n=t.attributes;for(const t in n)e.update(n[t],34962);const i=t.morphAttributes;for(const t in i){const n=i[t];for(let t=0,i=n.length;t0)return t;const r=e*n;let a=Kn[r];if(void 0===a&&(a=new Float32Array(r),Kn[r]=a),0!==e){i.toArray(a,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(a,r)}return a}function ai(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n/gm;function lr(t){return t.replace(or,cr)}function cr(t,e){const n=Rn[e];if(void 0===n)throw new Error("Can not resolve #include <"+e+">");return lr(n)}const hr=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,ur=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function dr(t){return t.replace(ur,fr).replace(hr,pr)}function pr(t,e,n,i){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),fr(t,e,n,i)}function fr(t,e,n,i){let r="";for(let t=parseInt(e);t0?t.gammaFactor:1,p=n.isWebGL2?"":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||"physical"===t.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(t.extensionFragDepth||t.logarithmicDepthBuffer)&&t.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",t.extensionDrawBuffers&&t.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(t.extensionShaderTextureLOD||t.envMap||t.transmission>0)&&t.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(rr).join("\n")}(n),f=function(t){const e=[];for(const n in t){const i=t[n];!1!==i&&e.push("#define "+n+" "+i)}return e.join("\n")}(a),m=r.createProgram();let g,v,y=n.glslVersion?"#version "+n.glslVersion+"\n":"";n.isRawShaderMaterial?(g=[f].filter(rr).join("\n"),g.length>0&&(g+="\n"),v=[p,f].filter(rr).join("\n"),v.length>0&&(v+="\n")):(g=[mr(n),"#define SHADER_NAME "+n.shaderName,f,n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+d,"#define MAX_BONES "+n.maxBones,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+h:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.useVertexTexture?"#define BONE_TEXTURE":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(rr).join("\n"),v=[p,mr(n),"#define SHADER_NAME "+n.shaderName,f,n.alphaTest?"#define ALPHATEST "+n.alphaTest+(n.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+d,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+c:"",n.envMap?"#define "+h:"",n.envMap?"#define "+u:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.sheen?"#define USE_SHEEN":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?Rn.tonemapping_pars_fragment:"",0!==n.toneMapping?ir("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",Rn.encodings_pars_fragment,n.map?er("mapTexelToLinear",n.mapEncoding):"",n.matcap?er("matcapTexelToLinear",n.matcapEncoding):"",n.envMap?er("envMapTexelToLinear",n.envMapEncoding):"",n.emissiveMap?er("emissiveMapTexelToLinear",n.emissiveMapEncoding):"",n.lightMap?er("lightMapTexelToLinear",n.lightMapEncoding):"",nr("linearToOutputTexel",n.outputEncoding),n.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(rr).join("\n")),s=lr(s),s=ar(s,n),s=sr(s,n),o=lr(o),o=ar(o,n),o=sr(o,n),s=dr(s),o=dr(o),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(y="#version 300 es\n",g=["#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+g,v=["#define varying in",n.glslVersion===B?"":"out highp vec4 pc_fragColor;",n.glslVersion===B?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+v);const x=y+v+o,_=$i(r,35633,y+g+s),b=$i(r,35632,x);if(r.attachShader(m,_),r.attachShader(m,b),void 0!==n.index0AttributeName?r.bindAttribLocation(m,0,n.index0AttributeName):!0===n.morphTargets&&r.bindAttribLocation(m,0,"position"),r.linkProgram(m),t.debug.checkShaderErrors){const t=r.getProgramInfoLog(m).trim(),e=r.getShaderInfoLog(_).trim(),n=r.getShaderInfoLog(b).trim();let i=!0,a=!0;if(!1===r.getProgramParameter(m,35714)){i=!1;const e=tr(r,_,"vertex"),n=tr(r,b,"fragment");console.error("THREE.WebGLProgram: shader error: ",r.getError(),"35715",r.getProgramParameter(m,35715),"gl.getProgramInfoLog",t,e,n)}else""!==t?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",t):""!==e&&""!==n||(a=!1);a&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:g},fragmentShader:{log:n,prefix:v}})}let w,M;return r.deleteShader(_),r.deleteShader(b),this.getUniforms=function(){return void 0===w&&(w=new Ji(r,m)),w},this.getAttributes=function(){return void 0===M&&(M=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r0,maxBones:w,useVertexTexture:c,morphTargets:r.morphTargets,morphNormals:r.morphNormals,numDirLights:s.directional.length,numPointLights:s.point.length,numSpotLights:s.spot.length,numRectAreaLights:s.rectArea.length,numHemiLights:s.hemi.length,numDirLightShadows:s.directionalShadowMap.length,numPointLightShadows:s.pointShadowMap.length,numSpotLightShadows:s.spotShadowMap.length,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:r.dithering,shadowMapEnabled:t.shadowMap.enabled&&f.length>0,shadowMapType:t.shadowMap.type,toneMapping:r.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:r.premultipliedAlpha,alphaTest:r.alphaTest,doubleSided:2===r.side,flipSided:1===r.side,depthPacking:void 0!==r.depthPacking&&r.depthPacking,index0AttributeName:r.index0AttributeName,extensionDerivatives:r.extensions&&r.extensions.derivatives,extensionFragDepth:r.extensions&&r.extensions.fragDepth,extensionDrawBuffers:r.extensions&&r.extensions.drawBuffers,extensionShaderTextureLOD:r.extensions&&r.extensions.shaderTextureLOD,rendererExtensionFragDepth:o||n.has("EXT_frag_depth"),rendererExtensionDrawBuffers:o||n.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:o||n.has("EXT_shader_texture_lod"),customProgramCacheKey:r.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t0?r.push(h):!0===n.transparent?a.push(h):i.push(h)},unshift:function(t,e,n,s,l,c){const h=o(t,e,n,s,l,c);n.transmission>0?r.unshift(h):!0===n.transparent?a.unshift(h):i.unshift(h)},finish:function(){for(let t=n,i=e.length;t1&&i.sort(t||xr),r.length>1&&r.sort(e||_r),a.length>1&&a.sort(e||_r)}}}function wr(t){let e=new WeakMap;return{get:function(n,i){let r;return!1===e.has(n)?(r=new br(t),e.set(n,[r])):i>=e.get(n).length?(r=new br(t),e.get(n).push(r)):r=e.get(n)[i],r},dispose:function(){e=new WeakMap}}}function Mr(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":n={direction:new rt,color:new Re};break;case"SpotLight":n={position:new rt,direction:new rt,color:new Re,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new rt,color:new Re,distance:0,decay:0};break;case"HemisphereLight":n={direction:new rt,skyColor:new Re,groundColor:new Re};break;case"RectAreaLight":n={color:new Re,position:new rt,halfWidth:new rt,halfHeight:new rt}}return t[e.id]=n,n}}}let Sr=0;function Er(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function Tr(t,e){const n=new Mr,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":case"SpotLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Y};break;case"PointLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Y,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)r.probe.push(new rt);const a=new rt,s=new Ot,o=new Ot;return{setup:function(a){let s=0,o=0,l=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let c=0,h=0,u=0,d=0,p=0,f=0,m=0,g=0;a.sort(Er);for(let t=0,e=a.length;t0&&(e.isWebGL2||!0===t.has("OES_texture_float_linear")?(r.rectAreaLTC1=Pn.LTC_FLOAT_1,r.rectAreaLTC2=Pn.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=Pn.LTC_HALF_1,r.rectAreaLTC2=Pn.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=s,r.ambient[1]=o,r.ambient[2]=l;const v=r.hash;v.directionalLength===c&&v.pointLength===h&&v.spotLength===u&&v.rectAreaLength===d&&v.hemiLength===p&&v.numDirectionalShadows===f&&v.numPointShadows===m&&v.numSpotShadows===g||(r.directional.length=c,r.spot.length=u,r.rectArea.length=d,r.point.length=h,r.hemi.length=p,r.directionalShadow.length=f,r.directionalShadowMap.length=f,r.pointShadow.length=m,r.pointShadowMap.length=m,r.spotShadow.length=g,r.spotShadowMap.length=g,r.directionalShadowMatrix.length=f,r.pointShadowMatrix.length=m,r.spotShadowMatrix.length=g,v.directionalLength=c,v.pointLength=h,v.spotLength=u,v.rectAreaLength=d,v.hemiLength=p,v.numDirectionalShadows=f,v.numPointShadows=m,v.numSpotShadows=g,r.version=Sr++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e=n.get(i).length?(a=new Ar(t,e),n.get(i).push(a)):a=n.get(i)[r],a},dispose:function(){n=new WeakMap}}}class Cr extends Me{constructor(t){super(),this.type="MeshDepthMaterial",this.depthPacking=3200,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}Cr.prototype.isMeshDepthMaterial=!0;class Rr extends Me{constructor(t){super(),this.type="MeshDistanceMaterial",this.referencePosition=new rt,this.nearDistance=1,this.farDistance=1e3,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}Rr.prototype.isMeshDistanceMaterial=!0;function Pr(t,e,n){let i=new Tn;const r=new Y,a=new Y,s=new et,o=[],l=[],c={},h=n.maxTextureSize,u={0:1,1:0,2:2},d=new vn({defines:{SAMPLE_RATE:2/8,HALF_SAMPLE_RATE:1/8},uniforms:{shadow_pass:{value:null},resolution:{value:new Y},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),p=d.clone();p.defines.HORIZONTAL_PASS=1;const g=new qe;g.setAttribute("position",new Ne(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const v=new un(g,d),y=this;function x(n,i){const r=e.update(v);d.uniforms.shadow_pass.value=n.map.texture,d.uniforms.resolution.value=n.mapSize,d.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,d,v,null),p.uniforms.shadow_pass.value=n.mapPass.texture,p.uniforms.resolution.value=n.mapSize,p.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,p,v,null)}function _(t){const e=t<<0;let n=o[e];return void 0===n&&(n=new Cr({depthPacking:3201,morphTargets:t}),o[e]=n),n}function b(t){const e=t<<0;let n=l[e];return void 0===n&&(n=new Rr({morphTargets:t}),l[e]=n),n}function w(e,n,i,r,a,s,o){let l=null,h=_,d=e.customDepthMaterial;if(!0===r.isPointLight&&(h=b,d=e.customDistanceMaterial),void 0===d){let t=!1;!0===i.morphTargets&&(t=n.morphAttributes&&n.morphAttributes.position&&n.morphAttributes.position.length>0),l=h(t)}else l=d;if(t.localClippingEnabled&&!0===i.clipShadows&&0!==i.clippingPlanes.length){const t=l.uuid,e=i.uuid;let n=c[t];void 0===n&&(n={},c[t]=n);let r=n[e];void 0===r&&(r=l.clone(),n[e]=r),l=r}return l.visible=i.visible,l.wireframe=i.wireframe,l.side=3===o?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:u[i.side],l.clipShadows=i.clipShadows,l.clippingPlanes=i.clippingPlanes,l.clipIntersection=i.clipIntersection,l.wireframeLinewidth=i.wireframeLinewidth,l.linewidth=i.linewidth,!0===r.isPointLight&&!0===l.isMeshDistanceMaterial&&(l.referencePosition.setFromMatrixPosition(r.matrixWorld),l.nearDistance=a,l.farDistance=s),l}function M(n,r,a,s,o){if(!1===n.visible)return;if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===o)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(a.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let l=0,c=e.length;lh||r.y>h)&&(r.x>h&&(a.x=Math.floor(h/p.x),r.x=a.x*p.x,u.mapSize.x=a.x),r.y>h&&(a.y=Math.floor(h/p.y),r.y=a.y*p.y,u.mapSize.y=a.y)),null===u.map&&!u.isPointLightShadow&&3===this.type){const t={minFilter:m,magFilter:m,format:S};u.map=new nt(r.x,r.y,t),u.map.texture.name=c.name+".shadowMap",u.mapPass=new nt(r.x,r.y,t),u.camera.updateProjectionMatrix()}if(null===u.map){const t={minFilter:f,magFilter:f,format:S};u.map=new nt(r.x,r.y,t),u.map.texture.name=c.name+".shadowMap",u.camera.updateProjectionMatrix()}t.setRenderTarget(u.map),t.clear();const g=u.getViewportCount();for(let t=0;t=1):-1!==C.indexOf("OpenGL ES")&&(L=parseFloat(/^OpenGL ES (\d)/.exec(C)[1]),A=L>=2);let R=null,P={};const D=t.getParameter(3088),I=t.getParameter(2978),N=(new et).fromArray(D),O=(new et).fromArray(I);function z(e,n,i){const r=new Uint8Array(4),a=t.createTexture();t.bindTexture(e,a),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;ei||t.height>i)&&(r=i/Math.max(t.width,t.height)),r<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?X:Math.floor,a=i(r*t.width),s=i(r*t.height);void 0===L&&(L=R(a,s));const o=n?R(a,s):L;o.width=a,o.height=s;return o.getContext("2d").drawImage(t,0,0,a,s),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+a+"x"+s+")."),o}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function D(t){return q(t.width)&&q(t.height)}function I(t,e){return t.generateMipmaps&&e&&t.minFilter!==f&&t.minFilter!==m}function N(e,n,r,a){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log2(Math.max(r,a))}function O(n,i,r){if(!1===o)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let a=i;return 6403===i&&(5126===r&&(a=33326),5131===r&&(a=33325),5121===r&&(a=33321)),6407===i&&(5126===r&&(a=34837),5131===r&&(a=34843),5121===r&&(a=32849)),6408===i&&(5126===r&&(a=34836),5131===r&&(a=34842),5121===r&&(a=32856)),33325!==a&&33326!==a&&34842!==a&&34836!==a||e.get("EXT_color_buffer_float"),a}function z(t){return t===f||1004===t||1005===t?9728:9729}function k(e){const n=e.target;n.removeEventListener("dispose",k),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture&&A.delete(n),s.memory.textures--}function B(e){const n=e.target;n.removeEventListener("dispose",B),function(e){const n=e.texture,r=i.get(e),a=i.get(n);if(!e)return;void 0!==a.__webglTexture&&(t.deleteTexture(a.__webglTexture),s.memory.textures--);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(r.__webglFramebuffer[e]),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer[e]);else t.deleteFramebuffer(r.__webglFramebuffer),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer),r.__webglMultisampledFramebuffer&&t.deleteFramebuffer(r.__webglMultisampledFramebuffer),r.__webglColorRenderbuffer&&t.deleteRenderbuffer(r.__webglColorRenderbuffer),r.__webglDepthRenderbuffer&&t.deleteRenderbuffer(r.__webglDepthRenderbuffer);if(e.isWebGLMultipleRenderTargets)for(let e=0,r=n.length;e0&&r.__version!==t.version){const n=t.image;if(void 0===n)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==n.complete)return void Y(r,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}function H(e,r){const s=i.get(e);e.version>0&&s.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;j(e,i),n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const s=i&&(i.isCompressedTexture||i.image[0].isCompressedTexture),l=i.image[0]&&i.image[0].isDataTexture,h=[];for(let t=0;t<6;t++)h[t]=s||l?l?i.image[t].image:i.image[t]:P(i.image[t],!1,!0,c);const u=h[0],d=D(u)||o,p=a.convert(i.format),f=a.convert(i.type),m=O(i.internalFormat,p,f);let g;if(W(34067,i,d),s){for(let t=0;t<6;t++){g=h[t].mipmaps;for(let e=0;e1||i.get(a).__currentAnisotropy)&&(t.texParameterf(n,s.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,r.getMaxAnisotropy())),i.get(a).__currentAnisotropy=a.anisotropy)}}function j(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",k),e.__webglTexture=t.createTexture(),s.memory.textures++)}function Y(e,i,r){let s=3553;i.isDataTexture2DArray&&(s=35866),i.isDataTexture3D&&(s=32879),j(e,i),n.activeTexture(33984+r),n.bindTexture(s,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const l=function(t){return!o&&(t.wrapS!==d||t.wrapT!==d||t.minFilter!==f&&t.minFilter!==m)}(i)&&!1===D(i.image),c=P(i.image,l,!1,h),u=D(c)||o,p=a.convert(i.format);let g,v=a.convert(i.type),b=O(i.internalFormat,p,v);W(s,i,u);const A=i.mipmaps;if(i.isDepthTexture)b=6402,o?b=i.type===_?36012:i.type===x?33190:i.type===w?35056:33189:i.type===_&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),i.format===E&&6402===b&&i.type!==y&&i.type!==x&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),i.type=y,v=a.convert(i.type)),i.format===T&&6402===b&&(b=34041,i.type!==w&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),i.type=w,v=a.convert(i.type))),n.texImage2D(3553,0,b,c.width,c.height,0,p,v,null);else if(i.isDataTexture)if(A.length>0&&u){for(let t=0,e=A.length;t0&&u){for(let t=0,e=A.length;t=l&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+l),F+=1,t},this.resetTextureUnits=function(){F=0},this.setTexture2D=U,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?Y(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?Y(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=H,this.setupRenderTarget=function(e){const l=e.texture,c=i.get(e),h=i.get(l);e.addEventListener("dispose",B),!0!==e.isWebGLMultipleRenderTargets&&(h.__webglTexture=t.createTexture(),h.__version=l.version,s.memory.textures++);const u=!0===e.isWebGLCubeRenderTarget,d=!0===e.isWebGLMultipleRenderTargets,p=!0===e.isWebGLMultisampleRenderTarget,f=l.isDataTexture3D||l.isDataTexture2DArray,m=D(e)||o;if(!o||l.format!==M||l.type!==_&&l.type!==b||(l.format=S,console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")),u){c.__webglFramebuffer=[];for(let e=0;e<6;e++)c.__webglFramebuffer[e]=t.createFramebuffer()}else if(c.__webglFramebuffer=t.createFramebuffer(),d)if(r.drawBuffers){const n=e.texture;for(let e=0,r=n.length;eo+c?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!l.inputState.pinching&&s<=o-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else null!==o&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1));return null!==s&&(s.visible=null!==i),null!==o&&(o.visible=null!==r),null!==l&&(l.visible=null!==a),this}}class Fr extends F{constructor(t,e){super();const n=this,i=t.state;let r=null,a=1,s=null,o="local-floor",l=null;const c=[],h=new Map,u=new xn;u.layers.enable(1),u.viewport=new et;const d=new xn;d.layers.enable(2),d.viewport=new et;const p=[u,d],f=new Or;f.layers.enable(1),f.layers.enable(2);let m=null,g=null;function v(t){const e=h.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function y(){h.forEach((function(t,e){t.disconnect(e)})),h.clear(),m=null,g=null,i.bindXRFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),S.stop(),n.isPresenting=!1,n.dispatchEvent({type:"sessionend"})}function x(t){const e=r.inputSources;for(let t=0;t0&&(t.transmissionSamplerMap.value=i.texture,t.transmissionSamplerSize.value.set(i.width,i.height));t.thickness.value=e.thickness,e.thicknessMap&&(t.thicknessMap.value=e.thicknessMap);t.attenuationDistance.value=e.attenuationDistance,t.attenuationColor.value.copy(e.attenuationColor)}(t,i,s):n(t,i)):i.isMeshMatcapMaterial?(e(t,i),function(t,e){e.matcap&&(t.matcap.value=e.matcap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDepthMaterial?(e(t,i),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDistanceMaterial?(e(t,i),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias);t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}(t,i)):i.isMeshNormalMaterial?(e(t,i),function(t,e){e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isLineBasicMaterial?(function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity}(t,i),i.isLineDashedMaterial&&function(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}(t,i)):i.isPointsMaterial?function(t,e,n,i){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.size.value=e.size*n,t.scale.value=.5*i,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);let r;e.map?r=e.map:e.alphaMap&&(r=e.alphaMap);void 0!==r&&(!0===r.matrixAutoUpdate&&r.updateMatrix(),t.uvTransform.value.copy(r.matrix))}(t,i,r,a):i.isSpriteMaterial?function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.rotation.value=e.rotation,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);let n;e.map?n=e.map:e.alphaMap&&(n=e.alphaMap);void 0!==n&&(!0===n.matrixAutoUpdate&&n.updateMatrix(),t.uvTransform.value.copy(n.matrix))}(t,i):i.isShadowMaterial?(t.color.value.copy(i.color),t.opacity.value=i.opacity):i.isShaderMaterial&&(i.uniformsNeedUpdate=!1)}}}function Hr(t){const e=void 0!==(t=t||{}).canvas?t.canvas:function(){const t=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");return t.style.display="block",t}(),n=void 0!==t.context?t.context:null,i=void 0!==t.alpha&&t.alpha,r=void 0===t.depth||t.depth,a=void 0===t.stencil||t.stencil,s=void 0!==t.antialias&&t.antialias,o=void 0===t.premultipliedAlpha||t.premultipliedAlpha,l=void 0!==t.preserveDrawingBuffer&&t.preserveDrawingBuffer,c=void 0!==t.powerPreference?t.powerPreference:"default",h=void 0!==t.failIfMajorPerformanceCaveat&&t.failIfMajorPerformanceCaveat;let u=null,p=null;const m=[],y=[];this.domElement=e,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.outputEncoding=N,this.physicallyCorrectLights=!1,this.toneMapping=0,this.toneMappingExposure=1;const x=this;let w=!1,M=0,E=0,T=null,A=-1,L=null;const C=new et,R=new et;let P=null,D=e.width,I=e.height,O=1,z=null,k=null;const B=new et(0,0,D,I),F=new et(0,0,D,I);let U=!1;const H=[],V=new Tn;let G=!1,W=!1,j=null;const q=new Ot,X=new rt,Z={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function J(){return null===T?O:1}let $,Q,K,tt,it,at,st,ot,lt,ct,ht,ut,dt,pt,ft,mt,gt,vt,yt,xt,_t,bt,wt=n;function Mt(t,n){for(let i=0;i0&&Nt(i,t,e),r.length>0&&function(t,e,n,i){null===j&&(j=new nt(1024,1024,{generateMipmaps:!0,minFilter:g,magFilter:f,wrapS:d,wrapT:d}));const r=x.getRenderTarget();x.setRenderTarget(j),x.clear(),Nt(t,n,i),at.updateRenderTargetMipmap(j),x.setRenderTarget(r),Nt(e,n,i)}(i,r,t,e),a.length>0&&Nt(a,t,e),null!==T&&(at.updateRenderTargetMipmap(T),at.updateMultisampleRenderTarget(T)),!0===t.isScene&&t.onAfterRender(x,t,e),K.buffers.depth.setTest(!0),K.buffers.depth.setMask(!0),K.buffers.color.setMask(!0),K.setPolygonOffset(!1),bt.resetDefaultState(),A=-1,L=null,y.pop(),p=y.length>0?y[y.length-1]:null,m.pop(),u=m.length>0?m[m.length-1]:null},this.getActiveCubeFace=function(){return M},this.getActiveMipmapLevel=function(){return E},this.getRenderTarget=function(){return T},this.setRenderTarget=function(t,e=0,n=0){T=t,M=e,E=n,t&&void 0===it.get(t).__webglFramebuffer&&at.setupRenderTarget(t);let i=null,r=!1,a=!1;if(t){const n=t.texture;(n.isDataTexture3D||n.isDataTexture2DArray)&&(a=!0);const s=it.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=s[e],r=!0):i=t.isWebGLMultisampleRenderTarget?it.get(t).__webglMultisampledFramebuffer:s,C.copy(t.viewport),R.copy(t.scissor),P=t.scissorTest}else C.copy(B).multiplyScalar(O).floor(),R.copy(F).multiplyScalar(O).floor(),P=U;if(K.bindFramebuffer(36160,i)&&Q.drawBuffers){let e=!1;if(t)if(t.isWebGLMultipleRenderTargets){const n=t.texture;if(H.length!==n.length||36064!==H[0]){for(let t=0,e=n.length;t=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&wt.readPixels(e,n,i,r,_t.convert(o),_t.convert(l),a):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{const t=null!==T?it.get(T).__webglFramebuffer:null;K.bindFramebuffer(36160,t)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),a=Math.floor(e.image.height*i);let s=_t.convert(e.format);Q.isWebGL2&&(6407===s&&(s=32849),6408===s&&(s=32856)),at.setTexture2D(e,0),wt.copyTexImage2D(3553,n,s,t.x,t.y,r,a,0),K.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,a=e.image.height,s=_t.convert(n.format),o=_t.convert(n.type);at.setTexture2D(n,0),wt.pixelStorei(37440,n.flipY),wt.pixelStorei(37441,n.premultiplyAlpha),wt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?wt.texSubImage2D(3553,i,t.x,t.y,r,a,s,o,e.image.data):e.isCompressedTexture?wt.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,s,e.mipmaps[0].data):wt.texSubImage2D(3553,i,t.x,t.y,s,o,e.image),0===i&&n.generateMipmaps&&wt.generateMipmap(3553),K.unbindTexture()},this.copyTextureToTexture3D=function(t,e,n,i,r=0){if(x.isWebGL1Renderer)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");const{width:a,height:s,data:o}=n.image,l=_t.convert(i.format),c=_t.convert(i.type);let h;if(i.isDataTexture3D)at.setTexture3D(i,0),h=32879;else{if(!i.isDataTexture2DArray)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");at.setTexture2DArray(i,0),h=35866}wt.pixelStorei(37440,i.flipY),wt.pixelStorei(37441,i.premultiplyAlpha),wt.pixelStorei(3317,i.unpackAlignment);const u=wt.getParameter(3314),d=wt.getParameter(32878),p=wt.getParameter(3316),f=wt.getParameter(3315),m=wt.getParameter(32877);wt.pixelStorei(3314,a),wt.pixelStorei(32878,s),wt.pixelStorei(3316,t.min.x),wt.pixelStorei(3315,t.min.y),wt.pixelStorei(32877,t.min.z),wt.texSubImage3D(h,r,e.x,e.y,e.z,t.max.x-t.min.x+1,t.max.y-t.min.y+1,t.max.z-t.min.z+1,l,c,o),wt.pixelStorei(3314,u),wt.pixelStorei(32878,d),wt.pixelStorei(3316,p),wt.pixelStorei(3315,f),wt.pixelStorei(32877,m),0===r&&i.generateMipmaps&&wt.generateMipmap(h),K.unbindTexture()},this.initTexture=function(t){at.setTexture2D(t,0),K.unbindTexture()},this.resetState=function(){M=0,E=0,T=null,K.reset(),bt.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}(class extends Hr{}).prototype.isWebGL1Renderer=!0;class Vr extends se{constructor(){super(),this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.background&&(e.object.background=this.background.toJSON(t)),null!==this.environment&&(e.object.environment=this.environment.toJSON(t)),null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}Vr.prototype.isScene=!0;class Gr{constructor(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=z,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=G()}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;it.far||e.push({distance:o,point:Yr.clone(),uv:be.getUV(Yr,ta,ea,na,ia,ra,aa,new Y),face:null,object:this})}copy(t){return super.copy(t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}}).prototype.isSprite=!0;const oa=new rt,la=new et,ca=new et,ha=new rt,ua=new Ot;class da extends un{constructor(t,e){super(t,e),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new Ot,this.bindMatrixInverse=new Ot}copy(t){return super.copy(t),this.bindMode=t.bindMode,this.bindMatrix.copy(t.bindMatrix),this.bindMatrixInverse.copy(t.bindMatrixInverse),this.skeleton=t.skeleton,this}bind(t,e){this.skeleton=t,void 0===e&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),e=this.matrixWorld),this.bindMatrix.copy(e),this.bindMatrixInverse.copy(e).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(){const t=new et,e=this.geometry.attributes.skinWeight;for(let n=0,i=e.count;no)continue;u.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(u);dt.far||e.push({distance:d,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else{for(let n=Math.max(0,a.start),i=Math.min(r.count,a.start+a.count)-1;no)continue;u.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(u);it.far||e.push({distance:i,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}}else n.isGeometry&&console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}Ma.prototype.isLine=!0;const Sa=new rt,Ea=new rt;class Ta extends Ma{constructor(t,e){super(t,e),this.type="LineSegments"}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;tr.far)return;a.push({distance:l,distanceToRay:Math.sqrt(o),point:n,index:e,face:null,object:s})}}(class extends se{constructor(t=new qe,e=new Aa){super(),this.type="Points",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),this.material=t.material,this.geometry=t.geometry,this}raycast(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Points.threshold,a=n.drawRange;if(null===n.boundingSphere&&n.computeBoundingSphere(),Ra.copy(n.boundingSphere),Ra.applyMatrix4(i),Ra.radius+=r,!1===t.ray.intersectsSphere(Ra))return;La.copy(i).invert(),Ca.copy(t.ray).applyMatrix4(La);const s=r/((this.scale.x+this.scale.y+this.scale.z)/3),o=s*s;if(n.isBufferGeometry){const r=n.index,s=n.attributes.position;if(null!==r){for(let n=Math.max(0,a.start),l=Math.min(r.count,a.start+a.count);n0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}).prototype.isPoints=!0;(class extends K{constructor(t,e,n,i,r,a,s,o,l){super(t,e,n,i,r,a,s,o,l),this.format=void 0!==s?s:M,this.minFilter=void 0!==a?a:m,this.magFilter=void 0!==r?r:m,this.generateMipmaps=!1;const c=this;"requestVideoFrameCallback"in t&&t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const t=this.image;!1==="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}).prototype.isVideoTexture=!0;(class extends K{constructor(t,e,n,i,r,a,s,o,l,c,h,u){super(null,a,s,o,l,c,i,r,h,u),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}}).prototype.isCompressedTexture=!0;(class extends K{constructor(t,e,n,i,r,a,s,o,l){super(t,e,n,i,r,a,s,o,l),this.needsUpdate=!0}}).prototype.isCanvasTexture=!0;(class extends K{constructor(t,e,n,i,r,a,s,o,l,c){if((c=void 0!==c?c:E)!==E&&c!==T)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&c===E&&(n=y),void 0===n&&c===T&&(n=w),super(null,i,r,a,s,o,c,n,l),this.image={width:t,height:e},this.magFilter=void 0!==s?s:f,this.minFilter=void 0!==o?o:f,this.flipY=!1,this.generateMipmaps=!1}}).prototype.isDepthTexture=!0,new rt,new rt,new rt,new be;const Ia=function(t,e,n){n=n||2;const i=e&&e.length,r=i?e[0]*n:t.length;let a=Na(t,0,r,n,!0);const s=[];if(!a||a.next===a.prev)return s;let o,l,c,h,u,d,p;if(i&&(a=function(t,e,n,i){const r=[];let a,s,o,l,c;for(a=0,s=e.length;a80*n){o=c=t[0],l=h=t[1];for(let e=n;ec&&(c=u),d>h&&(h=d);p=Math.max(c-o,h-l),p=0!==p?1/p:0}return za(a,s,n,o,l,p),s};function Na(t,e,n,i,r){let a,s;if(r===function(t,e,n,i){let r=0;for(let a=e,s=n-i;a0)for(a=e;a=e;a-=i)s=es(a,t[a],t[a+1],s);return s&&Za(s,s.next)&&(ns(s),s=s.next),s}function Oa(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!Za(i,i.next)&&0!==Ya(i.prev,i,i.next))i=i.next;else{if(ns(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function za(t,e,n,i,r,a,s){if(!t)return;!s&&a&&function(t,e,n,i){let r=t;do{null===r.z&&(r.z=Wa(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,a,s,o,l,c=1;do{for(n=t,t=null,a=null,s=0;n;){for(s++,i=n,o=0,e=0;e0||l>0&&i;)0!==o&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,o--):(r=i,i=i.nextZ,l--),a?a.nextZ=r:t=r,r.prevZ=a,a=r;n=i}a.nextZ=null,c*=2}while(s>1)}(r)}(t,i,r,a);let o,l,c=t;for(;t.prev!==t.next;)if(o=t.prev,l=t.next,a?Ba(t,i,r,a):ka(t))e.push(o.i/n),e.push(t.i/n),e.push(l.i/n),ns(t),t=l.next,c=l.next;else if((t=l)===c){s?1===s?za(t=Fa(Oa(t),e,n),e,n,i,r,a,2):2===s&&Ua(t,e,n,i,r,a):za(Oa(t),e,n,i,r,a,1);break}}function ka(t){const e=t.prev,n=t,i=t.next;if(Ya(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(qa(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&Ya(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function Ba(t,e,n,i){const r=t.prev,a=t,s=t.next;if(Ya(r,a,s)>=0)return!1;const o=r.xa.x?r.x>s.x?r.x:s.x:a.x>s.x?a.x:s.x,h=r.y>a.y?r.y>s.y?r.y:s.y:a.y>s.y?a.y:s.y,u=Wa(o,l,e,n,i),d=Wa(c,h,e,n,i);let p=t.prevZ,f=t.nextZ;for(;p&&p.z>=u&&f&&f.z<=d;){if(p!==t.prev&&p!==t.next&&qa(r.x,r.y,a.x,a.y,s.x,s.y,p.x,p.y)&&Ya(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,f!==t.prev&&f!==t.next&&qa(r.x,r.y,a.x,a.y,s.x,s.y,f.x,f.y)&&Ya(f.prev,f,f.next)>=0)return!1;f=f.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&qa(r.x,r.y,a.x,a.y,s.x,s.y,p.x,p.y)&&Ya(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;f&&f.z<=d;){if(f!==t.prev&&f!==t.next&&qa(r.x,r.y,a.x,a.y,s.x,s.y,f.x,f.y)&&Ya(f.prev,f,f.next)>=0)return!1;f=f.nextZ}return!0}function Fa(t,e,n){let i=t;do{const r=i.prev,a=i.next.next;!Za(r,a)&&Ja(r,i,i.next,a)&&Ka(r,a)&&Ka(a,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(a.i/n),ns(i),ns(i.next),i=t=a),i=i.next}while(i!==t);return Oa(i)}function Ua(t,e,n,i,r,a){let s=t;do{let t=s.next.next;for(;t!==s.prev;){if(s.i!==t.i&&Xa(s,t)){let o=ts(s,t);return s=Oa(s,s.next),o=Oa(o,o.next),za(s,e,n,i,r,a),void za(o,e,n,i,r,a)}t=t.next}s=s.next}while(s!==t)}function Ha(t,e){return t.x-e.x}function Va(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let a,s=-1/0;do{if(r<=n.y&&r>=n.next.y&&n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>s){if(s=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}a=n.x=n.x&&n.x>=l&&i!==n.x&&qa(ra.x||n.x===a.x&&Ga(a,n)))&&(a=n,u=h)),n=n.next}while(n!==o);return a}(t,e)){const n=ts(e,t);Oa(e,e.next),Oa(n,n.next)}}function Ga(t,e){return Ya(t.prev,t,e.prev)<0&&Ya(e.next,t,t.next)<0}function Wa(t,e,n,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function ja(t){let e=t,n=t;do{(e.x=0&&(t-s)*(i-o)-(n-s)*(e-o)>=0&&(n-s)*(a-o)-(r-s)*(i-o)>=0}function Xa(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&Ja(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(Ka(t,e)&&Ka(e,t)&&function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,a=(t.y+e.y)/2;do{n.y>a!=n.next.y>a&&n.next.y!==n.y&&r<(n.next.x-n.x)*(a-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(Ya(t.prev,t,e.prev)||Ya(t,e.prev,e))||Za(t,e)&&Ya(t.prev,t,t.next)>0&&Ya(e.prev,e,e.next)>0)}function Ya(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function Za(t,e){return t.x===e.x&&t.y===e.y}function Ja(t,e,n,i){const r=Qa(Ya(t,e,n)),a=Qa(Ya(t,e,i)),s=Qa(Ya(n,i,t)),o=Qa(Ya(n,i,e));return r!==a&&s!==o||(!(0!==r||!$a(t,n,e))||(!(0!==a||!$a(t,i,e))||(!(0!==s||!$a(n,t,i))||!(0!==o||!$a(n,e,i)))))}function $a(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function Qa(t){return t>0?1:t<0?-1:0}function Ka(t,e){return Ya(t.prev,t,t.next)<0?Ya(t,e,t.next)>=0&&Ya(t,t.prev,e)>=0:Ya(t,e,t.prev)<0||Ya(t,t.next,e)<0}function ts(t,e){const n=new is(t.i,t.x,t.y),i=new is(e.i,e.x,e.y),r=t.next,a=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,a.next=i,i.prev=a,i}function es(t,e,n,i){const r=new is(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function ns(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function is(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}class rs{static area(t){const e=t.length;let n=0;for(let i=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function ss(t,e){for(let n=0;nNumber.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(l*l+c*c),p=e.x-o/u,f=e.y+s/u,m=((n.x-c/d-p)*c-(n.y+l/d-f)*l)/(s*c-o*l);i=p+s*m-t.x,r=f+o*m-t.y;const g=i*i+r*r;if(g<=2)return new Y(i,r);a=Math.sqrt(g/2)}else{let t=!1;s>Number.EPSILON?l>Number.EPSILON&&(t=!0):s<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(o)===Math.sign(c)&&(t=!0),t?(i=-o,r=s,a=Math.sqrt(h)):(i=s,r=o,a=Math.sqrt(h/2))}return new Y(i/a,r/a)}const P=[];for(let t=0,e=T.length,n=e-1,i=t+1;t=0;t--){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=T.length;t=0;){const i=n;let r=n-1;r<0&&(r=t.length-1);for(let t=0,n=o+2*p;t=i)){l.push(e.times[t]);for(let n=0;na.tracks[t].times[0]&&(o=a.tracks[t].times[0]);for(let t=0;t=i.times[u]){const t=u*l+o,e=t+l-o;d=us.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=o,n=l-o;t.evaluate(a),d=us.arraySlice(t.resultBuffer,e,n)}if("quaternion"===r){(new it).fromArray(d).normalize().conjugate().toArray(d)}const p=s.times.length;for(let t=0;t=r)break t;{const s=e[1];t=r)break e}a=n,n=0}}for(;n>>1;te;)--a;if(++a,0!==r||a!==i){r>=a&&(a=Math.max(a,1),r=a-1);const t=this.getValueSize();this.times=us.arraySlice(n,r,a),this.values=us.arraySlice(this.values,r*t,a*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let a=null;for(let e=0;e!==r;e++){const i=n[e];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,i),t=!1;break}if(null!==a&&a>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,i,a),t=!1;break}a=i}if(void 0!==i&&us.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,n),t=!1;break}}return t}optimize(){const t=us.arraySlice(this.times),e=us.arraySlice(this.values),n=this.getValueSize(),i=this.getInterpolation()===C,r=t.length-1;let a=1;for(let s=1;s0){t[a]=t[r];for(let t=r*n,i=a*n,s=0;s!==n;++s)e[i+s]=e[t+s];++a}return a!==t.length?(this.times=us.arraySlice(t,0,a),this.values=us.arraySlice(e,0,a*n)):(this.times=t,this.values=e),this}clone(){const t=us.arraySlice(this.times,0),e=us.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}gs.prototype.TimeBufferType=Float32Array,gs.prototype.ValueBufferType=Float32Array,gs.prototype.DefaultInterpolation=L;class vs extends gs{}vs.prototype.ValueTypeName="bool",vs.prototype.ValueBufferType=Array,vs.prototype.DefaultInterpolation=A,vs.prototype.InterpolantFactoryMethodLinear=void 0,vs.prototype.InterpolantFactoryMethodSmooth=void 0;class ys extends gs{}ys.prototype.ValueTypeName="color";class xs extends gs{}xs.prototype.ValueTypeName="number";class _s extends ds{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,a=this.sampleValues,s=this.valueSize,o=(n-e)/(i-e);let l=t*s;for(let t=l+s;l!==t;l+=4)it.slerpFlat(r,0,a,l-s,a,l,o);return r}}class bs extends gs{InterpolantFactoryMethodLinear(t){return new _s(this.times,this.values,this.getValueSize(),t)}}bs.prototype.ValueTypeName="quaternion",bs.prototype.DefaultInterpolation=L,bs.prototype.InterpolantFactoryMethodSmooth=void 0;class ws extends gs{}ws.prototype.ValueTypeName="string",ws.prototype.ValueBufferType=Array,ws.prototype.DefaultInterpolation=A,ws.prototype.InterpolantFactoryMethodLinear=void 0,ws.prototype.InterpolantFactoryMethodSmooth=void 0;class Ms extends gs{}Ms.prototype.ValueTypeName="vector";class Ss{constructor(t,e=-1,n,i=2500){this.name=t,this.tracks=n,this.duration=e,this.blendMode=i,this.uuid=G(),this.duration<0&&this.resetDuration()}static parse(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(Es(n[t]).scale(i));const r=new this(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r}static toJSON(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(gs.toJSON(n[t]));return i}static CreateFromMorphTargetSequence(t,e,n,i){const r=e.length,a=[];for(let t=0;t1){const t=a[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const a=[];for(const t in i)a.push(this.CreateFromMorphTargetSequence(t,i[t],e,n));return a}static parseAnimation(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const n=function(t,e,n,i,r){if(0!==n.length){const a=[],s=[];us.flattenJSON(n,a,s,i),0!==a.length&&r.push(new t(e,a,s))}},i=[],r=t.name||"default",a=t.fps||30,s=t.blendMode;let o=t.length||-1;const l=t.hierarchy||[];for(let t=0;t0||0===t.search(/^data\:image\/jpeg/);r.format=i?M:S,r.needsUpdate=!0,void 0!==e&&e(r)}),n,i),r}}class Ns{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)}getPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e}getSpacedPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let a=1;a<=t;a++)n=this.getPoint(a/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(t,e){const n=this.getLengths();let i=0;const r=n.length;let a;a=e||t*n[r-1];let s,o=0,l=r-1;for(;o<=l;)if(i=Math.floor(o+(l-o)/2),s=n[i]-a,s<0)o=i+1;else{if(!(s>0)){l=i;break}l=i-1}if(i=l,n[i]===a)return i/(r-1);const c=n[i];return(i+(a-c)/(n[i+1]-c))/(r-1)}getTangent(t,e){const n=1e-4;let i=t-n,r=t+n;i<0&&(i=0),r>1&&(r=1);const a=this.getPoint(i),s=this.getPoint(r),o=e||(a.isVector2?new Y:new rt);return o.copy(s).sub(a).normalize(),o}getTangentAt(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)}computeFrenetFrames(t,e){const n=new rt,i=[],r=[],a=[],s=new rt,o=new Ot;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new rt),i[e].normalize()}r[0]=new rt,a[0]=new rt;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),h=Math.abs(i[0].y),u=Math.abs(i[0].z);c<=l&&(l=c,n.set(1,0,0)),h<=l&&(l=h,n.set(0,1,0)),u<=l&&n.set(0,0,1),s.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],s),a[0].crossVectors(i[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),a[e]=a[e-1].clone(),s.crossVectors(i[e-1],i[e]),s.length()>Number.EPSILON){s.normalize();const t=Math.acos(W(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(o.makeRotationAxis(s,t))}a[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(W(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(s.crossVectors(r[0],r[t]))>0&&(e=-e);for(let n=1;n<=t;n++)r[n].applyMatrix4(o.makeRotationAxis(i[n],e*n)),a[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:a}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}class Os extends Ns{constructor(t=0,e=0,n=1,i=1,r=0,a=2*Math.PI,s=!1,o=0){super(),this.type="EllipseCurve",this.aX=t,this.aY=e,this.xRadius=n,this.yRadius=i,this.aStartAngle=r,this.aEndAngle=a,this.aClockwise=s,this.aRotation=o}getPoint(t,e){const n=e||new Y,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const a=Math.abs(r)i;)r-=i;r0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c&&l===r-1&&(l=r-2,c=1),this.closed||l>0?s=i[(l-1)%r]:(Bs.subVectors(i[0],i[1]).add(i[0]),s=Bs);const h=i[l%r],u=i[(l+1)%r];if(this.closed||l+2i.length-2?i.length-1:a+1],h=i[a>i.length-3?i.length-1:a+2];return n.set(Gs(s,o.x,l.x,c.x,h.x),Gs(s,o.y,l.y,c.y,h.y)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e=e){const t=n[i]-e,r=this.curves[i],a=r.getLength(),s=0===a?0:1-t/a;return r.getPointAt(s)}i++}return null}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,n=t.curves.length;e0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}class eo extends to{constructor(t){super(t),this.uuid=G(),this.type="Shape",this.holes=[]}getPointsHoles(t){const e=[];for(let n=0,i=this.holes.length;n0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){s.setValue(n,i);break}}saveOriginalState(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]}_slerp(t,e,n,i){it.slerpFlat(t,e,t,e,t,n,i)}_slerpAdditive(t,e,n,i,r){const a=this._workIndex*r;it.multiplyQuaternionsFlat(t,a,t,e,t,n),it.slerpFlat(t,e,t,e,t,a,i)}_lerp(t,e,n,i,r){const a=1-i;for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]*a+t[n+s]*i}}_lerpAdditive(t,e,n,i,r){for(let a=0;a!==r;++a){const r=e+a;t[r]=t[r]+t[n+a]*i}}}const Eo="\\[\\]\\.:\\/",To=new RegExp("[\\[\\]\\.:\\/]","g"),Ao="[^\\[\\]\\.:\\/]",Lo="[^"+Eo.replace("\\.","")+"]",Co=/((?:WC+[\/:])*)/.source.replace("WC",Ao),Ro=/(WCOD+)?/.source.replace("WCOD",Lo),Po=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",Ao),Do=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",Ao),Io=new RegExp("^"+Co+Ro+Po+Do+"$"),No=["material","materials","bones"];class Oo{constructor(t,e,n){this.path=e,this.parsedPath=n||Oo.parseTrackName(e),this.node=Oo.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,n){return t&&t.isAnimationObjectGroup?new Oo.Composite(t,e,n):new Oo(t,e,n)}static sanitizeNodeName(t){return t.replace(/\s/g,"_").replace(To,"")}static parseTrackName(t){const e=Io.exec(t);if(!e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==No.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n}static findNode(t,e){if(!e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case 2501:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(a),e[n].accumulateAdditive(s);break;case I:default:for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(a),e[n].accumulate(i,s)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const a=2202===n;if(0===t)return-1===r?i:a&&1==(1&r)?e-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,a)):this._setEndings(0===this.repetitions,!0,a)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const s=this.repetitions-r;if(s<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===s){const e=t<0;this._setEndings(e,!e,a)}else this._setEndings(!1,!1,a);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n})}}else this.time=i;if(a&&1==(1&r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=P,i.endingEnd=P):(i.endingStart=t?this.zeroSlopeAtStart?P:R:D,i.endingEnd=e?this.zeroSlopeAtEnd?P:R:D)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let a=this._weightInterpolant;null===a&&(a=i._lendControlInterpolant(),this._weightInterpolant=a);const s=a.parameterPositions,o=a.sampleValues;return s[0]=r,o[0]=e,s[1]=r+t,o[1]=n,this}}(class extends F{constructor(t){super(),this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,a=t._propertyBindings,s=t._interpolants,o=n.uuid,l=this._bindingsByRootAndName;let c=l[o];void 0===c&&(c={},l[o]=c);for(let t=0;t!==r;++t){const r=i[t],l=r.name;let h=c[l];if(void 0!==h)a[t]=h;else{if(h=a[t],void 0!==h){null===h._cacheIndex&&(++h.referenceCount,this._addInactiveBinding(h,o,l));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;h=new So(Oo.create(n,l,i),r.ValueTypeName,r.getValueSize()),++h.referenceCount,this._addInactiveBinding(h,o,l),a[t]=h}s[t].resultBuffer=h.buffer}}_activateAction(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}}_deactivateAction(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}}_isActiveAction(t){const e=t._cacheIndex;return null!==e&&e=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),a=this._accuIndex^=1;for(let s=0;s!==n;++s){e[s]._update(i,t,r,a)}const s=this._bindings,o=this._nActiveBindings;for(let t=0;t!==o;++t)s[t].apply(a);return this}setTime(t){this.time=0;for(let t=0;t0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0){const t=a[0].object;Xo.setFromNormalAndCoplanarPoint(e.getWorldDirection(Xo.normal),Qo.setFromMatrixPosition(t.matrixWorld)),r!==t&&null!==r&&(s.dispatchEvent({type:"hoveroff",object:r}),n.style.cursor="auto",r=null),r!==t&&(s.dispatchEvent({type:"hoveron",object:t}),n.style.cursor="pointer",r=t)}else null!==r&&(s.dispatchEvent({type:"hoveroff",object:r}),n.style.cursor="auto",r=null)}(o)}}function h(r){switch(r.preventDefault(),r.pointerType){case"mouse":case"pen":!function(r){r.preventDefault(),a.length=0,Yo.setFromCamera(Zo,e),Yo.intersectObjects(t,!0,a),a.length>0&&(i=!0===s.transformGroup?t[0]:a[0].object,Yo.ray.intersectPlane(Xo,$o)&&(Ko.copy(i.parent.matrixWorld).invert(),Jo.copy($o).sub(Qo.setFromMatrixPosition(i.matrixWorld))),n.style.cursor="move",s.dispatchEvent({type:"dragstart",object:i}))}(r)}}function u(t){switch(t.preventDefault(),t.pointerType){case"mouse":case"pen":!function(t){t.preventDefault(),i&&(s.dispatchEvent({type:"dragend",object:i}),i=null);n.style.cursor=r?"pointer":"auto"}(t)}}function d(t){t.preventDefault(),t=t.changedTouches[0];const r=n.getBoundingClientRect();if(Zo.x=(t.clientX-r.left)/r.width*2-1,Zo.y=-(t.clientY-r.top)/r.height*2+1,Yo.setFromCamera(Zo,e),i&&s.enabled)return Yo.ray.intersectPlane(Xo,$o)&&i.position.copy($o.sub(Jo).applyMatrix4(Ko)),void s.dispatchEvent({type:"drag",object:i})}function p(r){r.preventDefault(),r=r.changedTouches[0];const o=n.getBoundingClientRect();Zo.x=(r.clientX-o.left)/o.width*2-1,Zo.y=-(r.clientY-o.top)/o.height*2+1,a.length=0,Yo.setFromCamera(Zo,e),Yo.intersectObjects(t,!0,a),a.length>0&&(i=!0===s.transformGroup?t[0]:a[0].object,Xo.setFromNormalAndCoplanarPoint(e.getWorldDirection(Xo.normal),Qo.setFromMatrixPosition(i.matrixWorld)),Yo.ray.intersectPlane(Xo,$o)&&(Ko.copy(i.parent.matrixWorld).invert(),Jo.copy($o).sub(Qo.setFromMatrixPosition(i.matrixWorld))),n.style.cursor="move",s.dispatchEvent({type:"dragstart",object:i}))}function f(t){t.preventDefault(),i&&(s.dispatchEvent({type:"dragend",object:i}),i=null),n.style.cursor="auto"}o(),this.enabled=!0,this.transformGroup=!1,this.activate=o,this.deactivate=l,this.dispose=function(){l()},this.getObjects=function(){return t}}}const el=100,nl=301,il=302,rl=306,al=1e3,sl=1001,ol=1002,ll=1003,cl=1006,hl=1008,ul=1009,dl=1012,pl=1014,fl=1015,ml=1016,gl=1020,vl=1022,yl=1023,xl=1026,_l=1027,bl=2300,wl=2301,Ml=2302,Sl=2400,El=2401,Tl=2402,Al=2500,Ll=3e3,Cl=3001,Rl=3007,Pl=3002,Dl=7680,Il=35044,Nl=35048,Ol="300 es";class zl{addEventListener(t,e){void 0===this._listeners&&(this._listeners={});const n=this._listeners;void 0===n[t]&&(n[t]=[]),-1===n[t].indexOf(e)&&n[t].push(e)}hasEventListener(t,e){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[t]&&-1!==n[t].indexOf(e)}removeEventListener(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t&&n.splice(t,1)}}dispatchEvent(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,i=n.length;e>8&255]+Fl[t>>16&255]+Fl[t>>24&255]+"-"+Fl[255&e]+Fl[e>>8&255]+"-"+Fl[e>>16&15|64]+Fl[e>>24&255]+"-"+Fl[63&n|128]+Fl[n>>8&255]+"-"+Fl[n>>16&255]+Fl[n>>24&255]+Fl[255&i]+Fl[i>>8&255]+Fl[i>>16&255]+Fl[i>>24&255]).toUpperCase()}function Vl(t,e,n){return Math.max(e,Math.min(n,t))}function Gl(t,e,n){return(1-n)*t+n*e}function Wl(t){return 0==(t&t-1)&&0!==t}function jl(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}class ql{constructor(t=0,e=0){this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,a=this.y-t.y;return this.x=r*n-a*i+t.x,this.y=r*i+a*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}ql.prototype.isVector2=!0;class Xl{constructor(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,a,s,o,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=s,c[3]=e,c[4]=r,c[5]=o,c[6]=n,c[7]=a,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,a=n[0],s=n[3],o=n[6],l=n[1],c=n[4],h=n[7],u=n[2],d=n[5],p=n[8],f=i[0],m=i[3],g=i[6],v=i[1],y=i[4],x=i[7],_=i[2],b=i[5],w=i[8];return r[0]=a*f+s*v+o*_,r[3]=a*m+s*y+o*b,r[6]=a*g+s*x+o*w,r[1]=l*f+c*v+h*_,r[4]=l*m+c*y+h*b,r[7]=l*g+c*x+h*w,r[2]=u*f+d*v+p*_,r[5]=u*m+d*y+p*b,r[8]=u*g+d*x+p*w,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],a=t[4],s=t[5],o=t[6],l=t[7],c=t[8];return e*a*c-e*s*l-n*r*c+n*s*o+i*r*l-i*a*o}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],a=t[4],s=t[5],o=t[6],l=t[7],c=t[8],h=c*a-s*l,u=s*o-c*r,d=l*r-a*o,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const f=1/p;return t[0]=h*f,t[1]=(i*l-c*n)*f,t[2]=(s*n-i*a)*f,t[3]=u*f,t[4]=(c*e-i*o)*f,t[5]=(i*r-s*e)*f,t[6]=d*f,t[7]=(n*o-l*e)*f,t[8]=(a*e-n*r)*f,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,a,s){const o=Math.cos(r),l=Math.sin(r);return this.set(n*o,n*l,-n*(o*a+l*s)+a+t,-i*l,i*o,-i*(-l*a+o*s)+s+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],a=i[3],s=i[6],o=i[1],l=i[4],c=i[7];return i[0]=e*r+n*o,i[3]=e*a+n*l,i[6]=e*s+n*c,i[1]=-n*r+e*o,i[4]=-n*a+e*l,i[7]=-n*s+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}function Yl(t){if(0===t.length)return-1/0;let e=t[0];for(let n=1,i=t.length;ne&&(e=t[n]);return e}function Zl(t){return document.createElementNS("http://www.w3.org/1999/xhtml",t)}function Jl(t,e=0){let n=3735928559^e,i=1103547991^e;for(let e,r=0;r>>16,2246822507)^Math.imul(i^i>>>13,3266489909),i=Math.imul(i^i>>>16,2246822507)^Math.imul(n^n>>>13,3266489909),4294967296*(2097151&i)+(n>>>0)}let $l;Xl.prototype.isMatrix3=!0;class Ql{static getDataURL(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===$l&&($l=Zl("canvas")),$l.width=t.width,$l.height=t.height;const n=$l.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=$l}return e.width>2048||e.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",t),e.toDataURL("image/jpeg",.6)):e.toDataURL("image/png")}}let Kl=0;class tc extends zl{constructor(t=tc.DEFAULT_IMAGE,e=tc.DEFAULT_MAPPING,n=1001,i=1001,r=1006,a=1008,s=1023,o=1009,l=1,c=3e3){super(),Object.defineProperty(this,"id",{value:Kl++}),this.uuid=Hl(),this.name="",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=a,this.anisotropy=l,this.format=s,this.internalFormat=null,this.type=o,this.offset=new ql(0,0),this.repeat=new ql(1,1),this.center=new ql(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Xl,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.userData={},this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return(new this.constructor).copy(this)}copy(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this.userData=JSON.parse(JSON.stringify(t.userData)),this}toJSON(t){const e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,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,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid&&(i.uuid=Hl()),!e&&void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t1)switch(this.wrapS){case al:t.x=t.x-Math.floor(t.x);break;case sl:t.x=t.x<0?0:1;break;case ol:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case al:t.y=t.y-Math.floor(t.y);break;case sl:t.y=t.y<0?0:1;break;case ol:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&this.version++}}function ec(t){return"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap?Ql.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}tc.DEFAULT_IMAGE=void 0,tc.DEFAULT_MAPPING=300,tc.prototype.isTexture=!0;class nc{constructor(t=0,e=0,n=0,i=1){this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,a=t.elements;return this.x=a[0]*e+a[4]*n+a[8]*i+a[12]*r,this.y=a[1]*e+a[5]*n+a[9]*i+a[13]*r,this.z=a[2]*e+a[6]*n+a[10]*i+a[14]*r,this.w=a[3]*e+a[7]*n+a[11]*i+a[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const a=.01,s=.1,o=t.elements,l=o[0],c=o[4],h=o[8],u=o[1],d=o[5],p=o[9],f=o[2],m=o[6],g=o[10];if(Math.abs(c-u)o&&t>v?tv?o=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),a=Math.atan2(r,e*n);t=Math.sin(t*a)/r,s=Math.sin(s*a)/r}const r=s*n;if(o=o*t+u*r,l=l*t+d*r,c=c*t+p*r,h=h*t+f*r,t===1-s){const t=1/Math.sqrt(o*o+l*l+c*c+h*h);o*=t,l*=t,c*=t,h*=t}}t[e]=o,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,r,a){const s=n[i],o=n[i+1],l=n[i+2],c=n[i+3],h=r[a],u=r[a+1],d=r[a+2],p=r[a+3];return t[e]=s*p+c*h+o*d-l*u,t[e+1]=o*p+c*u+l*h-s*d,t[e+2]=l*p+c*d+s*u-o*h,t[e+3]=c*p-s*h-o*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");const n=t._x,i=t._y,r=t._z,a=t._order,s=Math.cos,o=Math.sin,l=s(n/2),c=s(i/2),h=s(r/2),u=o(n/2),d=o(i/2),p=o(r/2);switch(a){case"XYZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"YXZ":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"ZXY":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case"ZYX":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case"YZX":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case"XZY":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],a=e[1],s=e[5],o=e[9],l=e[2],c=e[6],h=e[10],u=n+s+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-o)*t,this._y=(r-l)*t,this._z=(a-i)*t}else if(n>s&&n>h){const t=2*Math.sqrt(1+n-s-h);this._w=(c-o)/t,this._x=.25*t,this._y=(i+a)/t,this._z=(r+l)/t}else if(s>h){const t=2*Math.sqrt(1+s-n-h);this._w=(r-l)/t,this._x=(i+a)/t,this._y=.25*t,this._z=(o+c)/t}else{const t=2*Math.sqrt(1+h-n-s);this._w=(a-i)/t,this._x=(r+l)/t,this._y=(o+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return nMath.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(Vl(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,a=t._w,s=e._x,o=e._y,l=e._z,c=e._w;return this._x=n*c+a*s+i*l-r*o,this._y=i*c+a*o+r*s-n*l,this._z=r*c+a*l+n*o-i*s,this._w=a*c-n*s-i*o-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,a=this._w;let s=a*t._w+n*t._x+i*t._y+r*t._z;if(s<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,s=-s):this.copy(t),s>=1)return this._w=a,this._x=n,this._y=i,this._z=r,this;const o=1-s*s;if(o<=Number.EPSILON){const t=1-e;return this._w=t*a+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(o),c=Math.atan2(l,s),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=a*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}slerpQuaternions(t,e,n){this.copy(t).slerp(e,n)}random(){const t=Math.random(),e=Math.sqrt(1-t),n=Math.sqrt(t),i=2*Math.PI*Math.random(),r=2*Math.PI*Math.random();return this.set(e*Math.cos(i),n*Math.sin(r),n*Math.cos(r),e*Math.sin(i))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}ac.prototype.isQuaternion=!0;class sc{constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(lc.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(lc.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,a=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*a,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*a,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*a,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,a=t.y,s=t.z,o=t.w,l=o*e+a*i-s*n,c=o*n+s*e-r*i,h=o*i+r*n-a*e,u=-r*e-a*n-s*i;return this.x=l*o+u*-r+c*-s-h*-a,this.y=c*o+u*-a+h*-r-l*-s,this.z=h*o+u*-s+l*-a-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,a=e.x,s=e.y,o=e.z;return this.x=i*o-r*s,this.y=r*a-n*o,this.z=n*s-i*a,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return oc.copy(this).projectOnVector(t),this.sub(oc)}reflect(t){return this.sub(oc.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(Vl(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=2*(Math.random()-.5),e=Math.random()*Math.PI*2,n=Math.sqrt(1-t**2);return this.x=n*Math.cos(e),this.y=n*Math.sin(e),this.z=t,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}sc.prototype.isVector3=!0;const oc=new sc,lc=new ac;class cc{constructor(t=new sc(1/0,1/0,1/0),e=new sc(-1/0,-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,a=-1/0,s=-1/0;for(let o=0,l=t.length;or&&(r=l),c>a&&(a=c),h>s&&(s=h)}return this.min.set(e,n,i),this.max.set(r,a,s),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,a=-1/0,s=-1/0;for(let o=0,l=t.count;or&&(r=l),c>a&&(a=c),h>s&&(s=h)}return this.min.set(e,n,i),this.max.set(r,a,s),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,uc),uc.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(xc),_c.subVectors(this.max,xc),pc.subVectors(t.a,xc),fc.subVectors(t.b,xc),mc.subVectors(t.c,xc),gc.subVectors(fc,pc),vc.subVectors(mc,fc),yc.subVectors(pc,mc);let e=[0,-gc.z,gc.y,0,-vc.z,vc.y,0,-yc.z,yc.y,gc.z,0,-gc.x,vc.z,0,-vc.x,yc.z,0,-yc.x,-gc.y,gc.x,0,-vc.y,vc.x,0,-yc.y,yc.x,0];return!!Mc(e,pc,fc,mc,_c)&&(e=[1,0,0,0,1,0,0,0,1],!!Mc(e,pc,fc,mc,_c)&&(bc.crossVectors(gc,vc),e=[bc.x,bc.y,bc.z],Mc(e,pc,fc,mc,_c)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return uc.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return this.getCenter(t.center),t.radius=.5*this.getSize(uc).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(hc[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),hc[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),hc[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),hc[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),hc[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),hc[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),hc[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),hc[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(hc)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}cc.prototype.isBox3=!0;const hc=[new sc,new sc,new sc,new sc,new sc,new sc,new sc,new sc],uc=new sc,dc=new cc,pc=new sc,fc=new sc,mc=new sc,gc=new sc,vc=new sc,yc=new sc,xc=new sc,_c=new sc,bc=new sc,wc=new sc;function Mc(t,e,n,i,r){for(let a=0,s=t.length-3;a<=s;a+=3){wc.fromArray(t,a);const s=r.x*Math.abs(wc.x)+r.y*Math.abs(wc.y)+r.z*Math.abs(wc.z),o=e.dot(wc),l=n.dot(wc),c=i.dot(wc);if(Math.max(-Math.max(o,l,c),Math.min(o,l,c))>s)return!1}return!0}const Sc=new cc,Ec=new sc,Tc=new sc,Ac=new sc;class Lc{constructor(t=new sc,e=-1){this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):Sc.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){Ac.subVectors(t,this.center);const e=Ac.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.add(Ac.multiplyScalar(n/t)),this.radius+=n}return this}union(t){return Tc.subVectors(t.center,this.center).normalize().multiplyScalar(t.radius),this.expandByPoint(Ec.copy(t.center).add(Tc)),this.expandByPoint(Ec.copy(t.center).sub(Tc)),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const Cc=new sc,Rc=new sc,Pc=new sc,Dc=new sc,Ic=new sc,Nc=new sc,Oc=new sc;class zc{constructor(t=new sc,e=new sc(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Cc)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Cc.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Cc.copy(this.direction).multiplyScalar(e).add(this.origin),Cc.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){Rc.copy(t).add(e).multiplyScalar(.5),Pc.copy(e).sub(t).normalize(),Dc.copy(this.origin).sub(Rc);const r=.5*t.distanceTo(e),a=-this.direction.dot(Pc),s=Dc.dot(this.direction),o=-Dc.dot(Pc),l=Dc.lengthSq(),c=Math.abs(1-a*a);let h,u,d,p;if(c>0)if(h=a*o-s,u=a*s-o,p=r*c,h>=0)if(u>=-p)if(u<=p){const t=1/c;h*=t,u*=t,d=h*(h+a*u+2*s)+u*(a*h+u+2*o)+l}else u=r,h=Math.max(0,-(a*u+s)),d=-h*h+u*(u+2*o)+l;else u=-r,h=Math.max(0,-(a*u+s)),d=-h*h+u*(u+2*o)+l;else u<=-p?(h=Math.max(0,-(-a*r+s)),u=h>0?-r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l):u<=p?(h=0,u=Math.min(Math.max(-r,-o),r),d=u*(u+2*o)+l):(h=Math.max(0,-(a*r+s)),u=h>0?r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l);else u=a>0?-r:r,h=Math.max(0,-(a*u+s)),d=-h*h+u*(u+2*o)+l;return n&&n.copy(this.direction).multiplyScalar(h).add(this.origin),i&&i.copy(Pc).multiplyScalar(u).add(Rc),d}intersectSphere(t,e){Cc.subVectors(t.center,this.origin);const n=Cc.dot(this.direction),i=Cc.dot(Cc)-n*n,r=t.radius*t.radius;if(i>r)return null;const a=Math.sqrt(r-i),s=n-a,o=n+a;return s<0&&o<0?null:s<0?this.at(o,e):this.at(s,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,a,s,o;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l>=0?(n=(t.min.x-u.x)*l,i=(t.max.x-u.x)*l):(n=(t.max.x-u.x)*l,i=(t.min.x-u.x)*l),c>=0?(r=(t.min.y-u.y)*c,a=(t.max.y-u.y)*c):(r=(t.max.y-u.y)*c,a=(t.min.y-u.y)*c),n>a||r>i?null:((r>n||n!=n)&&(n=r),(a=0?(s=(t.min.z-u.z)*h,o=(t.max.z-u.z)*h):(s=(t.max.z-u.z)*h,o=(t.min.z-u.z)*h),n>o||s>i?null:((s>n||n!=n)&&(n=s),(o=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,Cc)}intersectTriangle(t,e,n,i,r){Ic.subVectors(e,t),Nc.subVectors(n,t),Oc.crossVectors(Ic,Nc);let a,s=this.direction.dot(Oc);if(s>0){if(i)return null;a=1}else{if(!(s<0))return null;a=-1,s=-s}Dc.subVectors(this.origin,t);const o=a*this.direction.dot(Nc.crossVectors(Dc,Nc));if(o<0)return null;const l=a*this.direction.dot(Ic.cross(Dc));if(l<0)return null;if(o+l>s)return null;const c=-a*Dc.dot(Oc);return c<0?null:this.at(c/s,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class kc{constructor(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,a,s,o,l,c,h,u,d,p,f,m){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=a,g[9]=s,g[13]=o,g[2]=l,g[6]=c,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=f,g[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new kc).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/Bc.setFromMatrixColumn(t,0).length(),r=1/Bc.setFromMatrixColumn(t,1).length(),a=1/Bc.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*a,e[9]=n[9]*a,e[10]=n[10]*a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");const e=this.elements,n=t.x,i=t.y,r=t.z,a=Math.cos(n),s=Math.sin(n),o=Math.cos(i),l=Math.sin(i),c=Math.cos(r),h=Math.sin(r);if("XYZ"===t.order){const t=a*c,n=a*h,i=s*c,r=s*h;e[0]=o*c,e[4]=-o*h,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-s*o,e[2]=r-t*l,e[6]=i+n*l,e[10]=a*o}else if("YXZ"===t.order){const t=o*c,n=o*h,i=l*c,r=l*h;e[0]=t+r*s,e[4]=i*s-n,e[8]=a*l,e[1]=a*h,e[5]=a*c,e[9]=-s,e[2]=n*s-i,e[6]=r+t*s,e[10]=a*o}else if("ZXY"===t.order){const t=o*c,n=o*h,i=l*c,r=l*h;e[0]=t-r*s,e[4]=-a*h,e[8]=i+n*s,e[1]=n+i*s,e[5]=a*c,e[9]=r-t*s,e[2]=-a*l,e[6]=s,e[10]=a*o}else if("ZYX"===t.order){const t=a*c,n=a*h,i=s*c,r=s*h;e[0]=o*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=o*h,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=s*o,e[10]=a*o}else if("YZX"===t.order){const t=a*o,n=a*l,i=s*o,r=s*l;e[0]=o*c,e[4]=r-t*h,e[8]=i*h+n,e[1]=h,e[5]=a*c,e[9]=-s*c,e[2]=-l*c,e[6]=n*h+i,e[10]=t-r*h}else if("XZY"===t.order){const t=a*o,n=a*l,i=s*o,r=s*l;e[0]=o*c,e[4]=-h,e[8]=l*c,e[1]=t*h+r,e[5]=a*c,e[9]=n*h-i,e[2]=i*h-n,e[6]=s*c,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Uc,t,Hc)}lookAt(t,e,n){const i=this.elements;return Wc.subVectors(t,e),0===Wc.lengthSq()&&(Wc.z=1),Wc.normalize(),Vc.crossVectors(n,Wc),0===Vc.lengthSq()&&(1===Math.abs(n.z)?Wc.x+=1e-4:Wc.z+=1e-4,Wc.normalize(),Vc.crossVectors(n,Wc)),Vc.normalize(),Gc.crossVectors(Wc,Vc),i[0]=Vc.x,i[4]=Gc.x,i[8]=Wc.x,i[1]=Vc.y,i[5]=Gc.y,i[9]=Wc.y,i[2]=Vc.z,i[6]=Gc.z,i[10]=Wc.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,a=n[0],s=n[4],o=n[8],l=n[12],c=n[1],h=n[5],u=n[9],d=n[13],p=n[2],f=n[6],m=n[10],g=n[14],v=n[3],y=n[7],x=n[11],_=n[15],b=i[0],w=i[4],M=i[8],S=i[12],E=i[1],T=i[5],A=i[9],L=i[13],C=i[2],R=i[6],P=i[10],D=i[14],I=i[3],N=i[7],O=i[11],z=i[15];return r[0]=a*b+s*E+o*C+l*I,r[4]=a*w+s*T+o*R+l*N,r[8]=a*M+s*A+o*P+l*O,r[12]=a*S+s*L+o*D+l*z,r[1]=c*b+h*E+u*C+d*I,r[5]=c*w+h*T+u*R+d*N,r[9]=c*M+h*A+u*P+d*O,r[13]=c*S+h*L+u*D+d*z,r[2]=p*b+f*E+m*C+g*I,r[6]=p*w+f*T+m*R+g*N,r[10]=p*M+f*A+m*P+g*O,r[14]=p*S+f*L+m*D+g*z,r[3]=v*b+y*E+x*C+_*I,r[7]=v*w+y*T+x*R+_*N,r[11]=v*M+y*A+x*P+_*O,r[15]=v*S+y*L+x*D+_*z,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],a=t[1],s=t[5],o=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*o*h-i*l*h-r*s*u+n*l*u+i*s*d-n*o*d)+t[7]*(+e*o*d-e*l*u+r*a*u-i*a*d+i*l*c-r*o*c)+t[11]*(+e*l*h-e*s*d-r*a*h+n*a*d+r*s*c-n*l*c)+t[15]*(-i*s*c-e*o*h+e*s*u+i*a*h-n*a*u+n*o*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],a=t[4],s=t[5],o=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],f=t[13],m=t[14],g=t[15],v=h*m*l-f*u*l+f*o*d-s*m*d-h*o*g+s*u*g,y=p*u*l-c*m*l-p*o*d+a*m*d+c*o*g-a*u*g,x=c*f*l-p*h*l+p*s*d-a*f*d-c*s*g+a*h*g,_=p*h*o-c*f*o-p*s*u+a*f*u+c*s*m-a*h*m,b=e*v+n*y+i*x+r*_;if(0===b)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const w=1/b;return t[0]=v*w,t[1]=(f*u*r-h*m*r-f*i*d+n*m*d+h*i*g-n*u*g)*w,t[2]=(s*m*r-f*o*r+f*i*l-n*m*l-s*i*g+n*o*g)*w,t[3]=(h*o*r-s*u*r-h*i*l+n*u*l+s*i*d-n*o*d)*w,t[4]=y*w,t[5]=(c*m*r-p*u*r+p*i*d-e*m*d-c*i*g+e*u*g)*w,t[6]=(p*o*r-a*m*r-p*i*l+e*m*l+a*i*g-e*o*g)*w,t[7]=(a*u*r-c*o*r+c*i*l-e*u*l-a*i*d+e*o*d)*w,t[8]=x*w,t[9]=(p*h*r-c*f*r-p*n*d+e*f*d+c*n*g-e*h*g)*w,t[10]=(a*f*r-p*s*r+p*n*l-e*f*l-a*n*g+e*s*g)*w,t[11]=(c*s*r-a*h*r-c*n*l+e*h*l+a*n*d-e*s*d)*w,t[12]=_*w,t[13]=(c*f*i-p*h*i+p*n*u-e*f*u-c*n*m+e*h*m)*w,t[14]=(p*s*i-a*f*i-p*n*o+e*f*o+a*n*m-e*s*m)*w,t[15]=(a*h*i-c*s*i+c*n*o-e*h*o-a*n*u+e*s*u)*w,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,a=t.x,s=t.y,o=t.z,l=r*a,c=r*s;return this.set(l*a+n,l*s-i*o,l*o+i*s,0,l*s+i*o,c*s+n,c*o-i*a,0,l*o-i*s,c*o+i*a,r*o*o+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,i,r,a){return this.set(1,n,r,0,t,1,a,0,e,i,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,a=e._y,s=e._z,o=e._w,l=r+r,c=a+a,h=s+s,u=r*l,d=r*c,p=r*h,f=a*c,m=a*h,g=s*h,v=o*l,y=o*c,x=o*h,_=n.x,b=n.y,w=n.z;return i[0]=(1-(f+g))*_,i[1]=(d+x)*_,i[2]=(p-y)*_,i[3]=0,i[4]=(d-x)*b,i[5]=(1-(u+g))*b,i[6]=(m+v)*b,i[7]=0,i[8]=(p+y)*w,i[9]=(m-v)*w,i[10]=(1-(u+f))*w,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=Bc.set(i[0],i[1],i[2]).length();const a=Bc.set(i[4],i[5],i[6]).length(),s=Bc.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],Fc.copy(this);const o=1/r,l=1/a,c=1/s;return Fc.elements[0]*=o,Fc.elements[1]*=o,Fc.elements[2]*=o,Fc.elements[4]*=l,Fc.elements[5]*=l,Fc.elements[6]*=l,Fc.elements[8]*=c,Fc.elements[9]*=c,Fc.elements[10]*=c,e.setFromRotationMatrix(Fc),n.x=r,n.y=a,n.z=s,this}makePerspective(t,e,n,i,r,a){void 0===a&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");const s=this.elements,o=2*r/(e-t),l=2*r/(n-i),c=(e+t)/(e-t),h=(n+i)/(n-i),u=-(a+r)/(a-r),d=-2*a*r/(a-r);return s[0]=o,s[4]=0,s[8]=c,s[12]=0,s[1]=0,s[5]=l,s[9]=h,s[13]=0,s[2]=0,s[6]=0,s[10]=u,s[14]=d,s[3]=0,s[7]=0,s[11]=-1,s[15]=0,this}makeOrthographic(t,e,n,i,r,a){const s=this.elements,o=1/(e-t),l=1/(n-i),c=1/(a-r),h=(e+t)*o,u=(n+i)*l,d=(a+r)*c;return s[0]=2*o,s[4]=0,s[8]=0,s[12]=-h,s[1]=0,s[5]=2*l,s[9]=0,s[13]=-u,s[2]=0,s[6]=0,s[10]=-2*c,s[14]=-d,s[3]=0,s[7]=0,s[11]=0,s[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}kc.prototype.isMatrix4=!0;const Bc=new sc,Fc=new kc,Uc=new sc(0,0,0),Hc=new sc(1,1,1),Vc=new sc,Gc=new sc,Wc=new sc,jc=new kc,qc=new ac;class Xc{constructor(t=0,e=0,n=0,i=Xc.DefaultOrder){this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i=this._order){return this._x=t,this._y=e,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){const i=t.elements,r=i[0],a=i[4],s=i[8],o=i[1],l=i[5],c=i[9],h=i[2],u=i[6],d=i[10];switch(e){case"XYZ":this._y=Math.asin(Vl(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-c,d),this._z=Math.atan2(-a,r)):(this._x=Math.atan2(u,l),this._z=0);break;case"YXZ":this._x=Math.asin(-Vl(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(s,d),this._z=Math.atan2(o,l)):(this._y=Math.atan2(-h,r),this._z=0);break;case"ZXY":this._x=Math.asin(Vl(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-h,d),this._z=Math.atan2(-a,l)):(this._y=0,this._z=Math.atan2(o,r));break;case"ZYX":this._y=Math.asin(-Vl(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(o,r)):(this._x=0,this._z=Math.atan2(-a,l));break;case"YZX":this._z=Math.asin(Vl(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-c,l),this._y=Math.atan2(-h,r)):(this._x=0,this._y=Math.atan2(s,d));break;case"XZY":this._z=Math.asin(-Vl(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(u,l),this._y=Math.atan2(s,r)):(this._x=Math.atan2(-c,d),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!0===n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return jc.makeRotationFromQuaternion(t),this.setFromRotationMatrix(jc,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return qc.setFromEuler(this),this.setFromQuaternion(qc,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new sc(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}Xc.prototype.isEuler=!0,Xc.DefaultOrder="XYZ",Xc.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];class Yc{constructor(){this.mask=1}set(t){this.mask=1<1){for(let t=0;t1){for(let t=0;t0){i.children=[];for(let e=0;e0){i.animations=[];for(let e=0;e0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),s.length>0&&(n.images=s),o.length>0&&(n.shapes=o),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c)}return n.object=i,n;function a(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){ch.subVectors(i,e),hh.subVectors(n,e),uh.subVectors(t,e);const a=ch.dot(ch),s=ch.dot(hh),o=ch.dot(uh),l=hh.dot(hh),c=hh.dot(uh),h=a*l-s*s;if(0===h)return r.set(-2,-1,-1);const u=1/h,d=(l*o-s*c)*u,p=(a*c-s*o)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,dh),dh.x>=0&&dh.y>=0&&dh.x+dh.y<=1}static getUV(t,e,n,i,r,a,s,o){return this.getBarycoord(t,e,n,i,dh),o.set(0,0),o.addScaledVector(r,dh.x),o.addScaledVector(a,dh.y),o.addScaledVector(s,dh.z),o}static isFrontFacing(t,e,n,i){return ch.subVectors(n,e),hh.subVectors(t,e),ch.cross(hh).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}setFromAttributeAndIndices(t,e,n,i){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,n),this.c.fromBufferAttribute(t,i),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return ch.subVectors(this.c,this.b),hh.subVectors(this.a,this.b),.5*ch.cross(hh).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return xh.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return xh.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return xh.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return xh.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return xh.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const n=this.a,i=this.b,r=this.c;let a,s;ph.subVectors(i,n),fh.subVectors(r,n),gh.subVectors(t,n);const o=ph.dot(gh),l=fh.dot(gh);if(o<=0&&l<=0)return e.copy(n);vh.subVectors(t,i);const c=ph.dot(vh),h=fh.dot(vh);if(c>=0&&h<=c)return e.copy(i);const u=o*h-c*l;if(u<=0&&o>=0&&c<=0)return a=o/(o-c),e.copy(n).addScaledVector(ph,a);yh.subVectors(t,r);const d=ph.dot(yh),p=fh.dot(yh);if(p>=0&&d<=p)return e.copy(r);const f=d*l-o*p;if(f<=0&&l>=0&&p<=0)return s=l/(l-p),e.copy(n).addScaledVector(fh,s);const m=c*p-d*h;if(m<=0&&h-c>=0&&d-p>=0)return mh.subVectors(r,i),s=(h-c)/(h-c+(d-p)),e.copy(i).addScaledVector(mh,s);const g=1/(m+f+u);return a=f*g,s=u*g,e.copy(n).addScaledVector(ph,a).addScaledVector(fh,s)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}let _h=0;class bh extends zl{constructor(){super(),Object.defineProperty(this,"id",{value:_h++}),this.uuid=Hl(),this.name="",this.type="Material",this.fog=!0,this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.format=yl,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=el,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=Dl,this.stencilZFail=Dl,this.stencilZPass=Dl,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const n=t[e];if(void 0===n){console.warn("THREE.Material: '"+e+"' parameter is undefined.");continue}if("shading"===e){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===n;continue}const i=this[e];void 0!==i?i&&i.isColor?i.set(n):i&&i.isVector3&&n&&n.isVector3?i.copy(n):this[e]=n:console.warn("THREE."+this.type+": '"+e+"' is not a property of this material.")}}toJSON(t){const e=void 0===t||"string"==typeof t;e&&(t={textures:{},images:{}});const n={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function i(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}if(n.uuid=this.uuid,n.type=this.type,""!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),void 0!==this.sheen&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearcoat&&(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(n.combine=this.combine)),void 0!==this.envMapIntensity&&(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance&&(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(n.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(n.size=this.size),null!==this.shadowSide&&(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(n.blending=this.blending),0!==this.side&&(n.side=this.side),this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),this.format!==yl&&(n.format=this.format),!0===this.transparent&&(n.transparent=this.transparent),n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.stencilWrite=this.stencilWrite,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,this.rotation&&0!==this.rotation&&(n.rotation=this.rotation),!0===this.polygonOffset&&(n.polygonOffset=!0),0!==this.polygonOffsetFactor&&(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth&&1!==this.linewidth&&(n.linewidth=this.linewidth),void 0!==this.dashSize&&(n.dashSize=this.dashSize),void 0!==this.gapSize&&(n.gapSize=this.gapSize),void 0!==this.scale&&(n.scale=this.scale),!0===this.dithering&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(n.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(n.flatShading=this.flatShading),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length>0&&(n.textures=e),r.length>0&&(n.images=r)}return n}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.format=t.format,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){!0===t&&this.version++}}bh.prototype.isMaterial=!0;const wh={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Mh={h:0,s:0,l:0},Sh={h:0,s:0,l:0};function Eh(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function Th(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function Ah(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class Lh{constructor(t,e,n){return void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){if(t=function(t,e){return(t%e+e)%e}(t,1),e=Vl(e,0,1),n=Vl(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=Eh(r,i,t+1/3),this.g=Eh(r,i,t),this.b=Eh(r,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)){let t;const i=n[1],r=n[2];switch(i){case"rgb":case"rgba":if(t=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[4]),this;if(t=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[4]),this;break;case"hsl":case"hsla":if(t=/^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,r=parseInt(t[3],10)/100;return e(t[4]),this.setHSL(n,i,r)}}}else if(n=/^\#([A-Fa-f\d]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this}setColorName(t){const e=wh[t.toLowerCase()];return void 0!==e?this.setHex(e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=Th(t.r),this.g=Th(t.g),this.b=Th(t.b),this}copyLinearToSRGB(t){return this.r=Ah(t.r),this.g=Ah(t.g),this.b=Ah(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return("000000"+this.getHex().toString(16)).slice(-6)}getHSL(t){const e=this.r,n=this.g,i=this.b,r=Math.max(e,n,i),a=Math.min(e,n,i);let s,o;const l=(a+r)/2;if(a===r)s=0,o=0;else{const t=r-a;switch(o=l<=.5?t/(r+a):t/(2-r-a),r){case e:s=(n-i)/t+(n65535?Nh:Ih)(t,1):this.index=t,this}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return void 0!==this.attributes[t]}addGroup(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new Xl).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}applyQuaternion(t){return kh.makeRotationFromQuaternion(t),this.applyMatrix4(kh),this}rotateX(t){return kh.makeRotationX(t),this.applyMatrix4(kh),this}rotateY(t){return kh.makeRotationY(t),this.applyMatrix4(kh),this}rotateZ(t){return kh.makeRotationZ(t),this.applyMatrix4(kh),this}translate(t,e,n){return kh.makeTranslation(t,e,n),this.applyMatrix4(kh),this}scale(t,e,n){return kh.makeScale(t,e,n),this.applyMatrix4(kh),this}lookAt(t){return Bh.lookAt(t),Bh.updateMatrix(),this.applyMatrix4(Bh.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Fh).negate(),this.translate(Fh.x,Fh.y,Fh.z),this}setFromPoints(t){const e=[];for(let n=0,i=t.length;n0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e];t.data.attributes[e]=i.toJSON(t.data)}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],a=[];for(let e=0,i=n.length;e0&&(i[e]=a,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(t.data.groups=JSON.parse(JSON.stringify(a)));const s=this.boundingSphere;return null!==s&&(t.data.boundingSphere={center:s.center.toArray(),radius:s.radius}),t}clone(){return(new this.constructor).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;t0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}}raycast(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),qh.copy(n.boundingSphere),qh.applyMatrix4(r),!1===t.ray.intersectsSphere(qh))return;if(Wh.copy(r).invert(),jh.copy(t.ray).applyMatrix4(Wh),null!==n.boundingBox&&!1===jh.intersectsBox(n.boundingBox))return;let a;if(n.isBufferGeometry){const r=n.index,s=n.attributes.position,o=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,h=n.attributes.uv2,u=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=u.length;nn.far?null:{distance:c,point:su.clone(),object:t}}(t,e,n,i,Xh,Yh,Zh,au);if(p){o&&(nu.fromBufferAttribute(o,c),iu.fromBufferAttribute(o,h),ru.fromBufferAttribute(o,u),p.uv=xh.getUV(au,Xh,Yh,Zh,nu,iu,ru,new ql)),l&&(nu.fromBufferAttribute(l,c),iu.fromBufferAttribute(l,h),ru.fromBufferAttribute(l,u),p.uv2=xh.getUV(au,Xh,Yh,Zh,nu,iu,ru,new ql));const t={a:c,b:h,c:u,normal:new sc,materialIndex:0};xh.getNormal(Xh,Yh,Zh,t.normal),p.face=t}return p}ou.prototype.isMesh=!0;class cu extends Gh{constructor(t=1,e=1,n=1,i=1,r=1,a=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:n,widthSegments:i,heightSegments:r,depthSegments:a};const s=this;i=Math.floor(i),r=Math.floor(r),a=Math.floor(a);const o=[],l=[],c=[],h=[];let u=0,d=0;function p(t,e,n,i,r,a,p,f,m,g,v){const y=a/m,x=p/g,_=a/2,b=p/2,w=f/2,M=m+1,S=g+1;let E=0,T=0;const A=new sc;for(let a=0;a0?1:-1,c.push(A.x,A.y,A.z),h.push(o/m),h.push(1-a/g),E+=1}}for(let t=0;t0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e}}pu.prototype.isShaderMaterial=!0;class fu extends lh{constructor(){super(),this.type="Camera",this.matrixWorldInverse=new kc,this.projectionMatrix=new kc,this.projectionMatrixInverse=new kc}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}fu.prototype.isCamera=!0;class mu extends fu{constructor(t=50,e=1,n=.1,i=2e3){super(),this.type="PerspectiveCamera",this.fov=t,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*Bl*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*kl*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*Bl*Math.atan(Math.tan(.5*kl*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(t,e,n,i,r,a){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*kl*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const a=this.view;if(null!==this.view&&this.view.enabled){const t=a.fullWidth,s=a.fullHeight;r+=a.offsetX*i/t,e-=a.offsetY*n/s,i*=a.width/t,n*=a.height/s}const s=this.filmOffset;0!==s&&(r+=t*s/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}mu.prototype.isPerspectiveCamera=!0;const gu=90;class vu extends lh{constructor(t,e,n){if(super(),this.type="CubeCamera",!0!==n.isWebGLCubeRenderTarget)return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");this.renderTarget=n;const i=new mu(gu,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new sc(1,0,0)),this.add(i);const r=new mu(gu,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new sc(-1,0,0)),this.add(r);const a=new mu(gu,1,t,e);a.layers=this.layers,a.up.set(0,0,1),a.lookAt(new sc(0,1,0)),this.add(a);const s=new mu(gu,1,t,e);s.layers=this.layers,s.up.set(0,0,-1),s.lookAt(new sc(0,-1,0)),this.add(s);const o=new mu(gu,1,t,e);o.layers=this.layers,o.up.set(0,-1,0),o.lookAt(new sc(0,0,1)),this.add(o);const l=new mu(gu,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new sc(0,0,-1)),this.add(l)}update(t,e){null===this.parent&&this.updateMatrixWorld();const n=this.renderTarget,[i,r,a,s,o,l]=this.children,c=t.xr.enabled,h=t.getRenderTarget();t.xr.enabled=!1;const u=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,a),t.setRenderTarget(n,3),t.render(e,s),t.setRenderTarget(n,4),t.render(e,o),n.texture.generateMipmaps=u,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(h),t.xr.enabled=c}}class yu extends tc{constructor(t,e,n,i,r,a,s,o,l,c){super(t=void 0!==t?t:[],e=void 0!==e?e:nl,n,i,r,a,s,o,l,c),this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}yu.prototype.isCubeTexture=!0;class xu extends ic{constructor(t,e,n){Number.isInteger(e)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),e=n),super(t,t,e),e=e||{},this.texture=new yu(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==e.generateMipmaps&&e.generateMipmaps,this.texture.minFilter=void 0!==e.minFilter?e.minFilter:cl,this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.format=yl,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},i=new cu(5,5,5),r=new pu({name:"CubemapFromEquirect",uniforms:hu(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const a=new ou(i,r),s=e.minFilter;e.minFilter===hl&&(e.minFilter=cl);return new vu(1,10,this).update(t,a),e.minFilter=s,a.geometry.dispose(),a.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}xu.prototype.isWebGLCubeRenderTarget=!0;const _u=new sc,bu=new sc,wu=new Xl;class Mu{constructor(t=new sc(1,0,0),e=0){this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,n,i){return this.normal.set(t,e,n),this.constant=i,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,n){const i=_u.subVectors(n,e).cross(bu.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(i,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)}intersectLine(t,e){const n=t.delta(_u),i=this.normal.dot(n);if(0===i)return 0===this.distanceToPoint(t.start)?e.copy(t.start):null;const r=-(t.start.dot(this.normal)+this.constant)/i;return r<0||r>1?null:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||wu.getNormalMatrix(t),i=this.coplanarPoint(_u).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}Mu.prototype.isPlane=!0;const Su=new Lc,Eu=new sc;class Tu{constructor(t=new Mu,e=new Mu,n=new Mu,i=new Mu,r=new Mu,a=new Mu){this.planes=[t,e,n,i,r,a]}set(t,e,n,i,r,a){const s=this.planes;return s[0].copy(t),s[1].copy(e),s[2].copy(n),s[3].copy(i),s[4].copy(r),s[5].copy(a),this}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],a=n[2],s=n[3],o=n[4],l=n[5],c=n[6],h=n[7],u=n[8],d=n[9],p=n[10],f=n[11],m=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(s-i,h-o,f-u,y-m).normalize(),e[1].setComponents(s+i,h+o,f+u,y+m).normalize(),e[2].setComponents(s+r,h+l,f+d,y+g).normalize(),e[3].setComponents(s-r,h-l,f-d,y-g).normalize(),e[4].setComponents(s-a,h-c,f-p,y-v).normalize(),e[5].setComponents(s+a,h+c,f+p,y+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),Su.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(Su)}intersectsSprite(t){return Su.center.set(0,0,0),Su.radius=.7071067811865476,Su.applyMatrix4(t.matrixWorld),this.intersectsSphere(Su)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)0?t.max.x:t.min.x,Eu.y=i.normal.y>0?t.max.y:t.min.y,Eu.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(Eu)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function Au(){let t=null,e=!1,n=null,i=null;function r(e,a){n(e,a),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function Lu(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version 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}\nfloat 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}\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",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + 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 = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\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",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",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",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",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; }\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 color ) { return dot( color, vec3( 0.3333 ) ); }\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};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\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 linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.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}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.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\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\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\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + 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 ), m0, cubeUV_maxMipLevel );\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",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( 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 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",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, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\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",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\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",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\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",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\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",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 reflectVec;\n\t\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\t\treflectVec = reflect( - viewDir, normal );\n\t\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\t#else\n\t\t\t\treflectVec = refract( - viewDir, normal, refractionRatio );\n\t\t\t#endif\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n#endif",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",fog_vertex:"#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",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",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",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 texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tlightMapIrradiance *= PI;\n\t#endif\n\treflectedLight.indirectDiffuse += lightMapIrradiance;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointLightInfo( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotLightInfo( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalLightInfo( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\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 ( PHYSICALLY_CORRECT_LIGHTS )\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#else\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#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, const in GeometricContext geometry, 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 GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\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 GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\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",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, 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\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",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 GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, 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\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\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\t#ifdef SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULARINTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\n\t\t#endif\n\t\t#ifdef USE_SPECULARCOLORMAP\n\t\t\tspecularColorFactor *= specularColorMapTexelToLinear( texture2D( specularColorMap, vUv ) ).rgb;\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( ( ior - 1.0 ) / ( 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, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).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_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tmaterial.sheenColor *= sheenColorMapTexelToLinear( texture2D( sheenColorMap, vUv ) ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;\n\t#endif\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n};\nvec3 clearcoatSpecular = vec3( 0.0 );\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}\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\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\tvec3 FssEss = specularColor * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, 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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\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}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef USE_CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\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, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( 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, geometry, 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\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, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, 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, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( 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, geometry, 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, geometry, 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\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\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 ], geometry.normal );\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",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometry.normal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",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, 2 ) * 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",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t\tuniform sampler2DArray morphTargetsTexture;\n\t\tuniform vec2 morphTargetsTextureSize;\n\t\tvec3 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset, const in int stride ) {\n\t\t\tfloat texelIndex = float( vertexIndex * stride + offset );\n\t\t\tfloat y = floor( texelIndex / morphTargetsTextureSize.x );\n\t\t\tfloat x = texelIndex - y * morphTargetsTextureSize.x;\n\t\t\tvec3 morphUV = vec3( ( x + 0.5 ) / morphTargetsTextureSize.x, y / morphTargetsTextureSize.y, morphTargetIndex );\n\t\t\treturn texture( morphTargetsTexture, morphUV ).xyz;\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",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\t#ifndef USE_MORPHNORMALS\n\t\t\t\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 1 ) * morphTargetInfluences[ i ];\n\t\t\t#else\n\t\t\t\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 2 ) * morphTargetInfluences[ i ];\n\t\t\t#endif\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",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).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( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",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",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",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",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.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 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",output_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= transmissionAlpha + 0.1;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",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}\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 linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( 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 invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",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",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#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\tvarying vec4 vSpotShadowCoord[ 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\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#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\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ 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 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",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",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, vSpotShadowCoord[ 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}",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",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",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",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",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",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 toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\tfloat transmissionAlpha = 1.0;\n\tfloat transmissionFactor = transmission;\n\tfloat thicknessFactor = thickness;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmission = getIBLVolumeRefraction(\n\t\tn, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\n\t\tattenuationColor, attenuationDistance );\n\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, transmissionFactor );\n\ttransmissionAlpha = mix( transmissionAlpha, transmission.a, transmissionFactor );\n#endif",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\tvec3 getVolumeTransmissionRay( vec3 n, vec3 v, float thickness, float ior, 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( float roughness, float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( vec2 fragCoord, float roughness, float ior ) {\n\t\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\t\t#else\n\t\t\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\t\t#endif\n\t}\n\tvec3 applyVolumeAttenuation( vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance ) {\n\t\tif ( attenuationDistance == 0.0 ) {\n\t\t\treturn radiance;\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance * radiance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 diffuseColor, vec3 specularColor, float specularF90,\n\t\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness,\n\t\tvec3 attenuationColor, float attenuationDistance ) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\n\t}\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"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}",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",cube_vert:"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}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",depth_vert:"#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#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}",depth_frag:"#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 \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\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\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}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\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}",distanceRGBA_frag:"#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 \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\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}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\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}",linedashed_frag:"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 \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#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#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 \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#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#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\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#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#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\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\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#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#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\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\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#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#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\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \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\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#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#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\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \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\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - clearcoat * Fcc ) + clearcoatSpecular * clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#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#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\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \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\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\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\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \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}",shadow_vert:"#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#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \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}"},Pu={common:{diffuse:{value:new Lh(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new Xl},uv2Transform:{value:new Xl},alphaMap:{value:null},alphaTest:{value:0}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new ql(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Lh(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Lh(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new Xl}},sprite:{diffuse:{value:new Lh(16777215)},opacity:{value:1},center:{value:new ql(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new Xl}}},Du={basic:{uniforms:uu([Pu.common,Pu.specularmap,Pu.envmap,Pu.aomap,Pu.lightmap,Pu.fog]),vertexShader:Ru.meshbasic_vert,fragmentShader:Ru.meshbasic_frag},lambert:{uniforms:uu([Pu.common,Pu.specularmap,Pu.envmap,Pu.aomap,Pu.lightmap,Pu.emissivemap,Pu.fog,Pu.lights,{emissive:{value:new Lh(0)}}]),vertexShader:Ru.meshlambert_vert,fragmentShader:Ru.meshlambert_frag},phong:{uniforms:uu([Pu.common,Pu.specularmap,Pu.envmap,Pu.aomap,Pu.lightmap,Pu.emissivemap,Pu.bumpmap,Pu.normalmap,Pu.displacementmap,Pu.fog,Pu.lights,{emissive:{value:new Lh(0)},specular:{value:new Lh(1118481)},shininess:{value:30}}]),vertexShader:Ru.meshphong_vert,fragmentShader:Ru.meshphong_frag},standard:{uniforms:uu([Pu.common,Pu.envmap,Pu.aomap,Pu.lightmap,Pu.emissivemap,Pu.bumpmap,Pu.normalmap,Pu.displacementmap,Pu.roughnessmap,Pu.metalnessmap,Pu.fog,Pu.lights,{emissive:{value:new Lh(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Ru.meshphysical_vert,fragmentShader:Ru.meshphysical_frag},toon:{uniforms:uu([Pu.common,Pu.aomap,Pu.lightmap,Pu.emissivemap,Pu.bumpmap,Pu.normalmap,Pu.displacementmap,Pu.gradientmap,Pu.fog,Pu.lights,{emissive:{value:new Lh(0)}}]),vertexShader:Ru.meshtoon_vert,fragmentShader:Ru.meshtoon_frag},matcap:{uniforms:uu([Pu.common,Pu.bumpmap,Pu.normalmap,Pu.displacementmap,Pu.fog,{matcap:{value:null}}]),vertexShader:Ru.meshmatcap_vert,fragmentShader:Ru.meshmatcap_frag},points:{uniforms:uu([Pu.points,Pu.fog]),vertexShader:Ru.points_vert,fragmentShader:Ru.points_frag},dashed:{uniforms:uu([Pu.common,Pu.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Ru.linedashed_vert,fragmentShader:Ru.linedashed_frag},depth:{uniforms:uu([Pu.common,Pu.displacementmap]),vertexShader:Ru.depth_vert,fragmentShader:Ru.depth_frag},normal:{uniforms:uu([Pu.common,Pu.bumpmap,Pu.normalmap,Pu.displacementmap,{opacity:{value:1}}]),vertexShader:Ru.meshnormal_vert,fragmentShader:Ru.meshnormal_frag},sprite:{uniforms:uu([Pu.sprite,Pu.fog]),vertexShader:Ru.sprite_vert,fragmentShader:Ru.sprite_frag},background:{uniforms:{uvTransform:{value:new Xl},t2D:{value:null}},vertexShader:Ru.background_vert,fragmentShader:Ru.background_frag},cube:{uniforms:uu([Pu.envmap,{opacity:{value:1}}]),vertexShader:Ru.cube_vert,fragmentShader:Ru.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Ru.equirect_vert,fragmentShader:Ru.equirect_frag},distanceRGBA:{uniforms:uu([Pu.common,Pu.displacementmap,{referencePosition:{value:new sc},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Ru.distanceRGBA_vert,fragmentShader:Ru.distanceRGBA_frag},shadow:{uniforms:uu([Pu.lights,Pu.fog,{color:{value:new Lh(0)},opacity:{value:1}}]),vertexShader:Ru.shadow_vert,fragmentShader:Ru.shadow_frag}};function Iu(t,e,n,i,r){const a=new Lh(0);let s,o,l=0,c=null,h=0,u=null;function d(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,r)}return{getClearColor:function(){return a},setClearColor:function(t,e=1){a.set(t),l=e,d(a,l)},getClearAlpha:function(){return l},setClearAlpha:function(t){l=t,d(a,l)},render:function(n,r){let p=!1,f=!0===r.isScene?r.background:null;f&&f.isTexture&&(f=e.get(f));const m=t.xr,g=m.getSession&&m.getSession();g&&"additive"===g.environmentBlendMode&&(f=null),null===f?d(a,l):f&&f.isColor&&(d(f,1),p=!0),(t.autoClear||p)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),f&&(f.isCubeTexture||f.mapping===rl)?(void 0===o&&(o=new ou(new cu(1,1,1),new pu({name:"BackgroundCubeMaterial",uniforms:hu(Du.cube.uniforms),vertexShader:Du.cube.vertexShader,fragmentShader:Du.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),o.geometry.deleteAttribute("normal"),o.geometry.deleteAttribute("uv"),o.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(o.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(o)),o.material.uniforms.envMap.value=f,o.material.uniforms.flipEnvMap.value=f.isCubeTexture&&!1===f.isRenderTargetTexture?-1:1,c===f&&h===f.version&&u===t.toneMapping||(o.material.needsUpdate=!0,c=f,h=f.version,u=t.toneMapping),n.unshift(o,o.geometry,o.material,0,0,null)):f&&f.isTexture&&(void 0===s&&(s=new ou(new Cu(2,2),new pu({name:"BackgroundMaterial",uniforms:hu(Du.background.uniforms),vertexShader:Du.background.vertexShader,fragmentShader:Du.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),s.geometry.deleteAttribute("normal"),Object.defineProperty(s.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(s)),s.material.uniforms.t2D.value=f,!0===f.matrixAutoUpdate&&f.updateMatrix(),s.material.uniforms.uvTransform.value.copy(f.matrix),c===f&&h===f.version&&u===t.toneMapping||(s.material.needsUpdate=!0,c=f,h=f.version,u=t.toneMapping),n.unshift(s,s.geometry,s.material,0,0,null))}}}function Nu(t,e,n,i){const r=t.getParameter(34921),a=i.isWebGL2?null:e.get("OES_vertex_array_object"),s=i.isWebGL2||null!==a,o={},l=d(null);let c=l;function h(e){return i.isWebGL2?t.bindVertexArray(e):a.bindVertexArrayOES(e)}function u(e){return i.isWebGL2?t.deleteVertexArray(e):a.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t=0){let a=l[e];if(void 0===a&&("instanceMatrix"===e&&r.instanceMatrix&&(a=r.instanceMatrix),"instanceColor"===e&&r.instanceColor&&(a=r.instanceColor)),void 0!==a){const e=a.normalized,s=a.itemSize,l=n.get(a);if(void 0===l)continue;const c=l.buffer,h=l.type,u=l.bytesPerElement;if(a.isInterleavedBufferAttribute){const n=a.data,l=n.stride,d=a.offset;if(n&&n.isInstancedInterleavedBuffer){for(let t=0;t0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const a="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let s=void 0!==n.precision?n.precision:"highp";const o=r(s);o!==s&&(console.warn("THREE.WebGLRenderer:",s,"not supported, using",o,"instead."),s=o);const l=a||e.has("WEBGL_draw_buffers"),c=!0===n.logarithmicDepthBuffer,h=t.getParameter(34930),u=t.getParameter(35660),d=t.getParameter(3379),p=t.getParameter(34076),f=t.getParameter(34921),m=t.getParameter(36347),g=t.getParameter(36348),v=t.getParameter(36349),y=u>0,x=a||e.has("OES_texture_float");return{isWebGL2:a,drawBuffers:l,getMaxAnisotropy:function(){if(void 0!==i)return i;if(!0===e.has("EXT_texture_filter_anisotropic")){const n=e.get("EXT_texture_filter_anisotropic");i=t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i},getMaxPrecision:r,precision:s,logarithmicDepthBuffer:c,maxTextures:h,maxVertexTextures:u,maxTextureSize:d,maxCubemapSize:p,maxAttributes:f,maxVertexUniforms:m,maxVaryings:g,maxFragmentUniforms:v,vertexTextures:y,floatFragmentTextures:x,floatVertexTextures:y&&x,maxSamples:a?t.getParameter(36183):0}}function ku(t){const e=this;let n=null,i=0,r=!1,a=!1;const s=new Mu,o=new Xl,l={value:null,needsUpdate:!1};function c(){l.value!==n&&(l.value=n,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function h(t,n,i,r){const a=null!==t?t.length:0;let c=null;if(0!==a){if(c=l.value,!0!==r||null===c){const e=i+4*a,r=n.matrixWorldInverse;o.getNormalMatrix(r),(null===c||c.length0){const s=t.getRenderTarget(),o=new xu(a.height/2);return o.fromEquirectangularTexture(t,r),e.set(r,o),t.setRenderTarget(s),r.addEventListener("dispose",i),n(o.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}Du.physical={uniforms:uu([Du.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new ql(1,1)},clearcoatNormalMap:{value:null},sheen:{value:0},sheenColor:{value:new Lh(0)},sheenColorMap:{value:null},sheenRoughness:{value:0},sheenRoughnessMap:{value:null},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new ql},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationColor:{value:new Lh(0)},specularIntensity:{value:0},specularIntensityMap:{value:null},specularColor:{value:new Lh(1,1,1)},specularColorMap:{value:null}}]),vertexShader:Ru.meshphysical_vert,fragmentShader:Ru.meshphysical_frag};class Fu extends fu{constructor(t=-1,e=1,n=1,i=-1,r=.1,a=2e3){super(),this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=n,this.bottom=i,this.near=r,this.far=a,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=null===t.view?null:Object.assign({},t.view),this}setViewOffset(t,e,n,i,r,a){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,i=(this.top+this.bottom)/2;let r=n-t,a=n+t,s=i+e,o=i-e;if(null!==this.view&&this.view.enabled){const t=(this.right-this.left)/this.view.fullWidth/this.zoom,e=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=t*this.view.offsetX,a=r+t*this.view.width,s-=e*this.view.offsetY,o=s-e*this.view.height}this.projectionMatrix.makeOrthographic(r,a,s,o,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,null!==this.view&&(e.object.view=Object.assign({},this.view)),e}}Fu.prototype.isOrthographicCamera=!0;class Uu extends pu{constructor(t){super(t),this.type="RawShaderMaterial"}}Uu.prototype.isRawShaderMaterial=!0;const Hu=Math.pow(2,8),Vu=[.125,.215,.35,.446,.526,.582],Gu=5+Vu.length,Wu=20,ju={[Ll]:0,[Cl]:1,[Pl]:2,3004:3,3005:4,3006:5,[Rl]:6},qu=new Fu,{_lodPlanes:Xu,_sizeLods:Yu,_sigmas:Zu}=id(),Ju=new Lh;let $u=null;const Qu=(1+Math.sqrt(5))/2,Ku=1/Qu,td=[new sc(1,1,1),new sc(-1,1,1),new sc(1,1,-1),new sc(-1,1,-1),new sc(0,Qu,Ku),new sc(0,Qu,-Ku),new sc(Ku,0,Qu),new sc(-Ku,0,Qu),new sc(Qu,Ku,0),new sc(-Qu,Ku,0)];class ed{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._blurMaterial=function(t){const e=new Float32Array(t),n=new sc(0,1,0);return new Uu({name:"SphericalGaussianBlur",defines:{n:t},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:e},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:n},inputEncoding:{value:ju[3e3]},outputEncoding:{value:ju[3e3]}},vertexShader:ld(),fragmentShader:`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t${cd()}\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,blending:0,depthTest:!1,depthWrite:!1})}(Wu),this._equirectShader=null,this._cubemapShader=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,n=.1,i=100){$u=this._renderer.getRenderTarget();const r=this._allocateTargets();return this._sceneToCubeUV(t,n,i,r),e>0&&this._blur(r,0,0,e),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(t){return this._fromTexture(t)}fromCubemap(t){return this._fromTexture(t)}compileCubemapShader(){null===this._cubemapShader&&(this._cubemapShader=od(),this._compileMaterial(this._cubemapShader))}compileEquirectangularShader(){null===this._equirectShader&&(this._equirectShader=sd(),this._compileMaterial(this._equirectShader))}dispose(){this._blurMaterial.dispose(),null!==this._cubemapShader&&this._cubemapShader.dispose(),null!==this._equirectShader&&this._equirectShader.dispose();for(let t=0;t2?Hu:0,Hu,Hu),o.setRenderTarget(i),p&&o.render(d,r),o.render(t,r)}d.geometry.dispose(),d.material.dispose(),o.toneMapping=h,o.outputEncoding=c,o.autoClear=l,t.background=f}_setEncoding(t,e){!0===this._renderer.capabilities.isWebGL2&&e.format===yl&&e.type===ul&&e.encoding===Cl?t.value=ju[3e3]:t.value=ju[e.encoding]}_textureToCubeUV(t,e){const n=this._renderer,i=t.mapping===nl||t.mapping===il;i?null==this._cubemapShader&&(this._cubemapShader=od()):null==this._equirectShader&&(this._equirectShader=sd());const r=i?this._cubemapShader:this._equirectShader,a=new ou(Xu[0],r),s=r.uniforms;s.envMap.value=t,i||s.texelSize.value.set(1/t.image.width,1/t.image.height),this._setEncoding(s.inputEncoding,t),this._setEncoding(s.outputEncoding,e.texture),ad(e,0,0,3*Hu,2*Hu),n.setRenderTarget(e),n.render(a,qu)}_applyPMREM(t){const e=this._renderer,n=e.autoClear;e.autoClear=!1;for(let e=1;eWu&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${f} samples when the maximum is set to 20`);const m=[];let g=0;for(let t=0;t4?i-8+4:0),3*v,2*v),o.setRenderTarget(e),o.render(c,qu)}}function nd(t){return void 0!==t&&t.type===ul&&(t.encoding===Ll||t.encoding===Cl||t.encoding===Rl)}function id(){const t=[],e=[],n=[];let i=8;for(let r=0;r4?s=Vu[r-8+4-1]:0==r&&(s=0),n.push(s);const o=1/(a-1),l=-o/2,c=1+o/2,h=[l,l,c,l,c,c,l,l,c,c,l,c],u=6,d=6,p=3,f=2,m=1,g=new Float32Array(p*d*u),v=new Float32Array(f*d*u),y=new Float32Array(m*d*u);for(let t=0;t2?0:-1,i=[e,n,0,e+2/3,n,0,e+2/3,n+1,0,e,n,0,e+2/3,n+1,0,e,n+1,0];g.set(i,p*d*t),v.set(h,f*d*t);const r=[t,t,t,t,t,t];y.set(r,m*d*t)}const x=new Gh;x.setAttribute("position",new Dh(g,p)),x.setAttribute("uv",new Dh(v,f)),x.setAttribute("faceIndex",new Dh(y,m)),t.push(x),i>4&&i--}return{_lodPlanes:t,_sizeLods:e,_sigmas:n}}function rd(t){const e=new ic(3*Hu,3*Hu,t);return e.texture.mapping=rl,e.texture.name="PMREM.cubeUv",e.scissorTest=!0,e}function ad(t,e,n,i,r){t.viewport.set(e,n,i,r),t.scissor.set(e,n,i,r)}function sd(){const t=new ql(1,1);return new Uu({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null},texelSize:{value:t},inputEncoding:{value:ju[3e3]},outputEncoding:{value:ju[3e3]}},vertexShader:ld(),fragmentShader:`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t${cd()}\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,blending:0,depthTest:!1,depthWrite:!1})}function od(){return new Uu({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},inputEncoding:{value:ju[3e3]},outputEncoding:{value:ju[3e3]}},vertexShader:ld(),fragmentShader:`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t${cd()}\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,blending:0,depthTest:!1,depthWrite:!1})}function ld(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"}function cd(){return"\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t"}function hd(t){let e=new WeakMap,n=null;function i(t){const n=t.target;n.removeEventListener("dispose",i);const r=e.get(n);void 0!==r&&(e.delete(n),r.dispose())}return{get:function(r){if(r&&r.isTexture&&!1===r.isRenderTargetTexture){const a=r.mapping,s=303===a||304===a,o=a===nl||a===il;if(s||o){if(e.has(r))return e.get(r).texture;{const a=r.image;if(s&&a&&a.height>0||o&&a&&function(t){let e=0;const n=6;for(let i=0;i65535?Nh:Ih)(n,1);o.version=s;const l=a.get(t);l&&e.remove(l),a.set(t,o)}return{get:function(t,e){return!0===r[e.id]||(e.addEventListener("dispose",s),r[e.id]=!0,n.memory.geometries++),e},update:function(t){const n=t.attributes;for(const t in n)e.update(n[t],34962);const i=t.morphAttributes;for(const t in i){const n=i[t];for(let t=0,i=n.length;te.maxTextureSize&&(u=Math.ceil(h/e.maxTextureSize),h=e.maxTextureSize);const d=new Float32Array(h*u*4*i),p=new md(d,h,u,i);p.format=yl,p.type=fl;const f=4*l;for(let e=0;e0)return t;const r=e*n;let a=Td[r];if(void 0===a&&(a=new Float32Array(r),Td[r]=a),0!==e){i.toArray(a,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(a,r)}return a}function Dd(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n/gm;function Op(t){return t.replace(Np,zp)}function zp(t,e){const n=Ru[e];if(void 0===n)throw new Error("Can not resolve #include <"+e+">");return Op(n)}const kp=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Bp=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function Fp(t){return t.replace(Bp,Hp).replace(kp,Up)}function Up(t,e,n,i){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),Hp(t,e,n,i)}function Hp(t,e,n,i){let r="";for(let t=parseInt(e);t0?t.gammaFactor:1,p=n.isWebGL2?"":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||"physical"===t.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(t.extensionFragDepth||t.logarithmicDepthBuffer)&&t.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",t.extensionDrawBuffers&&t.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(t.extensionShaderTextureLOD||t.envMap||t.transmission)&&t.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(Pp).join("\n")}(n),f=function(t){const e=[];for(const n in t){const i=t[n];!1!==i&&e.push("#define "+n+" "+i)}return e.join("\n")}(a),m=r.createProgram();let g,v,y=n.glslVersion?"#version "+n.glslVersion+"\n":"";n.isRawShaderMaterial?(g=[f].filter(Pp).join("\n"),g.length>0&&(g+="\n"),v=[p,f].filter(Pp).join("\n"),v.length>0&&(v+="\n")):(g=[Vp(n),"#define SHADER_NAME "+n.shaderName,f,n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+d,"#define MAX_BONES "+n.maxBones,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+h:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",n.specularColorMap?"#define USE_SPECULARCOLORMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.sheenColorMap?"#define USE_SHEENCOLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.useVertexTexture?"#define BONE_TEXTURE":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.morphTargets&&n.isWebGL2?"#define MORPHTARGETS_TEXTURE":"",n.morphTargets&&n.isWebGL2?"#define MORPHTARGETS_COUNT "+n.morphTargetsCount:"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(Pp).join("\n"),v=[p,Vp(n),"#define SHADER_NAME "+n.shaderName,f,"#define GAMMA_FACTOR "+d,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+c:"",n.envMap?"#define "+h:"",n.envMap?"#define "+u:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoat?"#define USE_CLEARCOAT":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",n.specularColorMap?"#define USE_SPECULARCOLORMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaTest?"#define USE_ALPHATEST":"",n.sheen?"#define USE_SHEEN":"",n.sheenColorMap?"#define USE_SHEENCOLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+l:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?Ru.tonemapping_pars_fragment:"",0!==n.toneMapping?Rp("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",n.format===vl?"#define OPAQUE":"",Ru.encodings_pars_fragment,n.map?Lp("mapTexelToLinear",n.mapEncoding):"",n.matcap?Lp("matcapTexelToLinear",n.matcapEncoding):"",n.envMap?Lp("envMapTexelToLinear",n.envMapEncoding):"",n.emissiveMap?Lp("emissiveMapTexelToLinear",n.emissiveMapEncoding):"",n.specularColorMap?Lp("specularColorMapTexelToLinear",n.specularColorMapEncoding):"",n.sheenColorMap?Lp("sheenColorMapTexelToLinear",n.sheenColorMapEncoding):"",n.lightMap?Lp("lightMapTexelToLinear",n.lightMapEncoding):"",Cp("linearToOutputTexel",n.outputEncoding),n.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(Pp).join("\n")),s=Op(s),s=Dp(s,n),s=Ip(s,n),o=Op(o),o=Dp(o,n),o=Ip(o,n),s=Fp(s),o=Fp(o),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(y="#version 300 es\n",g=["precision mediump sampler2DArray;","#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+g,v=["#define varying in",n.glslVersion===Ol?"":"out highp vec4 pc_fragColor;",n.glslVersion===Ol?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+v);const x=y+v+o,_=Sp(r,35633,y+g+s),b=Sp(r,35632,x);if(r.attachShader(m,_),r.attachShader(m,b),void 0!==n.index0AttributeName?r.bindAttribLocation(m,0,n.index0AttributeName):!0===n.morphTargets&&r.bindAttribLocation(m,0,"position"),r.linkProgram(m),t.debug.checkShaderErrors){const t=r.getProgramInfoLog(m).trim(),e=r.getShaderInfoLog(_).trim(),n=r.getShaderInfoLog(b).trim();let i=!0,a=!0;if(!1===r.getProgramParameter(m,35714)){i=!1;const e=Ap(r,_,"vertex"),n=Ap(r,b,"fragment");console.error("THREE.WebGLProgram: Shader Error "+r.getError()+" - VALIDATE_STATUS "+r.getProgramParameter(m,35715)+"\n\nProgram Info Log: "+t+"\n"+e+"\n"+n)}else""!==t?console.warn("THREE.WebGLProgram: Program Info Log:",t):""!==e&&""!==n||(a=!1);a&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:g},fragmentShader:{log:n,prefix:v}})}let w,M;return r.deleteShader(_),r.deleteShader(b),this.getUniforms=function(){return void 0===w&&(w=new Mp(r,m)),w},this.getAttributes=function(){return void 0===M&&(M=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r0,L=a.clearcoat>0;return{isWebGL2:l,shaderID:w,shaderName:a.type,vertexShader:S,fragmentShader:E,defines:a.defines,isRawShaderMaterial:!0===a.isRawShaderMaterial,glslVersion:a.glslVersion,precision:p,instancing:!0===y.isInstancedMesh,instancingColor:!0===y.isInstancedMesh&&null!==y.instanceColor,supportsVertexTextures:d,outputEncoding:null!==T?g(T.texture):t.outputEncoding,map:!!a.map,mapEncoding:g(a.map),matcap:!!a.matcap,matcapEncoding:g(a.matcap),envMap:!!b,envMapMode:b&&b.mapping,envMapEncoding:g(b),envMapCubeUV:!!b&&(b.mapping===rl||307===b.mapping),lightMap:!!a.lightMap,lightMapEncoding:g(a.lightMap),aoMap:!!a.aoMap,emissiveMap:!!a.emissiveMap,emissiveMapEncoding:g(a.emissiveMap),bumpMap:!!a.bumpMap,normalMap:!!a.normalMap,objectSpaceNormalMap:1===a.normalMapType,tangentSpaceNormalMap:0===a.normalMapType,clearcoat:L,clearcoatMap:L&&!!a.clearcoatMap,clearcoatRoughnessMap:L&&!!a.clearcoatRoughnessMap,clearcoatNormalMap:L&&!!a.clearcoatNormalMap,displacementMap:!!a.displacementMap,roughnessMap:!!a.roughnessMap,metalnessMap:!!a.metalnessMap,specularMap:!!a.specularMap,specularIntensityMap:!!a.specularIntensityMap,specularColorMap:!!a.specularColorMap,specularColorMapEncoding:g(a.specularColorMap),alphaMap:!!a.alphaMap,alphaTest:A,gradientMap:!!a.gradientMap,sheen:a.sheen>0,sheenColorMap:!!a.sheenColorMap,sheenColorMapEncoding:g(a.sheenColorMap),sheenRoughnessMap:!!a.sheenRoughnessMap,transmission:a.transmission>0,transmissionMap:!!a.transmissionMap,thicknessMap:!!a.thicknessMap,combine:a.combine,vertexTangents:!!a.normalMap&&!!y.geometry&&!!y.geometry.attributes.tangent,vertexColors:a.vertexColors,vertexAlphas:!0===a.vertexColors&&!!y.geometry&&!!y.geometry.attributes.color&&4===y.geometry.attributes.color.itemSize,vertexUvs:!!a.map||!!a.bumpMap||!!a.normalMap||!!a.specularMap||!!a.alphaMap||!!a.emissiveMap||!!a.roughnessMap||!!a.metalnessMap||!!a.clearcoatMap||!!a.clearcoatRoughnessMap||!!a.clearcoatNormalMap||!!a.displacementMap||!!a.transmissionMap||!!a.thicknessMap||!!a.specularIntensityMap||!!a.specularColorMap||!!a.sheenColorMap||a.sheenRoughnessMap,uvsVertexOnly:!(a.map||a.bumpMap||a.normalMap||a.specularMap||a.alphaMap||a.emissiveMap||a.roughnessMap||a.metalnessMap||a.clearcoatNormalMap||a.transmission>0||a.transmissionMap||a.thicknessMap||a.specularIntensityMap||a.specularColorMap||!!a.sheen>0||a.sheenColorMap||a.sheenRoughnessMap||!a.displacementMap),fog:!!x,useFog:a.fog,fogExp2:x&&x.isFogExp2,flatShading:!!a.flatShading,sizeAttenuation:a.sizeAttenuation,logarithmicDepthBuffer:c,skinning:!0===y.isSkinnedMesh&&M>0,maxBones:M,useVertexTexture:h,morphTargets:!!y.geometry&&!!y.geometry.morphAttributes.position,morphNormals:!!y.geometry&&!!y.geometry.morphAttributes.normal,morphTargetsCount:y.geometry&&y.geometry.morphAttributes.position?y.geometry.morphAttributes.position.length:0,numDirLights:o.directional.length,numPointLights:o.point.length,numSpotLights:o.spot.length,numRectAreaLights:o.rectArea.length,numHemiLights:o.hemi.length,numDirLightShadows:o.directionalShadowMap.length,numPointLightShadows:o.pointShadowMap.length,numSpotLightShadows:o.spotShadowMap.length,numClippingPlanes:s.numPlanes,numClipIntersection:s.numIntersection,format:a.format,dithering:a.dithering,shadowMapEnabled:t.shadowMap.enabled&&m.length>0,shadowMapType:t.shadowMap.type,toneMapping:a.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:a.premultipliedAlpha,doubleSided:2===a.side,flipSided:1===a.side,depthPacking:void 0!==a.depthPacking&&a.depthPacking,index0AttributeName:a.index0AttributeName,extensionDerivatives:a.extensions&&a.extensions.derivatives,extensionFragDepth:a.extensions&&a.extensions.fragDepth,extensionDrawBuffers:a.extensions&&a.extensions.drawBuffers,extensionShaderTextureLOD:a.extensions&&a.extensions.shaderTextureLOD,rendererExtensionFragDepth:l||i.has("EXT_frag_depth"),rendererExtensionDrawBuffers:l||i.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:l||i.has("EXT_shader_texture_lod"),customProgramCacheKey:a.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(Jl(e.fragmentShader)),n.push(Jl(e.vertexShader))),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t0?r.push(h):!0===n.transparent?a.push(h):i.push(h)},unshift:function(t,e,n,s,l,c){const h=o(t,e,n,s,l,c);n.transmission>0?r.unshift(h):!0===n.transparent?a.unshift(h):i.unshift(h)},finish:function(){for(let t=n,i=e.length;t1&&i.sort(t||qp),r.length>1&&r.sort(e||Xp),a.length>1&&a.sort(e||Xp)}}}function Zp(t){let e=new WeakMap;return{get:function(n,i){let r;return!1===e.has(n)?(r=new Yp(t),e.set(n,[r])):i>=e.get(n).length?(r=new Yp(t),e.get(n).push(r)):r=e.get(n)[i],r},dispose:function(){e=new WeakMap}}}function Jp(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":n={direction:new sc,color:new Lh};break;case"SpotLight":n={position:new sc,direction:new sc,color:new Lh,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new sc,color:new Lh,distance:0,decay:0};break;case"HemisphereLight":n={direction:new sc,skyColor:new Lh,groundColor:new Lh};break;case"RectAreaLight":n={color:new Lh,position:new sc,halfWidth:new sc,halfHeight:new sc}}return t[e.id]=n,n}}}let $p=0;function Qp(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function Kp(t,e){const n=new Jp,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":case"SpotLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ql};break;case"PointLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ql,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)r.probe.push(new sc);const a=new sc,s=new kc,o=new kc;return{setup:function(a,s){let o=0,l=0,c=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let h=0,u=0,d=0,p=0,f=0,m=0,g=0,v=0;a.sort(Qp);const y=!0!==s?Math.PI:1;for(let t=0,e=a.length;t0&&(e.isWebGL2||!0===t.has("OES_texture_float_linear")?(r.rectAreaLTC1=Pu.LTC_FLOAT_1,r.rectAreaLTC2=Pu.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=Pu.LTC_HALF_1,r.rectAreaLTC2=Pu.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=o,r.ambient[1]=l,r.ambient[2]=c;const x=r.hash;x.directionalLength===h&&x.pointLength===u&&x.spotLength===d&&x.rectAreaLength===p&&x.hemiLength===f&&x.numDirectionalShadows===m&&x.numPointShadows===g&&x.numSpotShadows===v||(r.directional.length=h,r.spot.length=d,r.rectArea.length=p,r.point.length=u,r.hemi.length=f,r.directionalShadow.length=m,r.directionalShadowMap.length=m,r.pointShadow.length=g,r.pointShadowMap.length=g,r.spotShadow.length=v,r.spotShadowMap.length=v,r.directionalShadowMatrix.length=m,r.pointShadowMatrix.length=g,r.spotShadowMatrix.length=v,x.directionalLength=h,x.pointLength=u,x.spotLength=d,x.rectAreaLength=p,x.hemiLength=f,x.numDirectionalShadows=m,x.numPointShadows=g,x.numSpotShadows=v,r.version=$p++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e=n.get(i).length?(a=new tf(t,e),n.get(i).push(a)):a=n.get(i)[r],a},dispose:function(){n=new WeakMap}}}class nf extends bh{constructor(t){super(),this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}nf.prototype.isMeshDepthMaterial=!0;class rf extends bh{constructor(t){super(),this.type="MeshDistanceMaterial",this.referencePosition=new sc,this.nearDistance=1,this.farDistance=1e3,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}rf.prototype.isMeshDistanceMaterial=!0;function af(t,e,n){let i=new Tu;const r=new ql,a=new ql,s=new nc,o=new nf({depthPacking:3201}),l=new rf,c={},h=n.maxTextureSize,u={0:1,1:0,2:2},d=new pu({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new ql},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),p=d.clone();p.defines.HORIZONTAL_PASS=1;const f=new Gh;f.setAttribute("position",new Dh(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const m=new ou(f,d),g=this;function v(n,i){const r=e.update(m);d.defines.VSM_SAMPLES!==n.blurSamples&&(d.defines.VSM_SAMPLES=n.blurSamples,p.defines.VSM_SAMPLES=n.blurSamples,d.needsUpdate=!0,p.needsUpdate=!0),d.uniforms.shadow_pass.value=n.map.texture,d.uniforms.resolution.value=n.mapSize,d.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,d,m,null),p.uniforms.shadow_pass.value=n.mapPass.texture,p.uniforms.resolution.value=n.mapSize,p.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,p,m,null)}function y(e,n,i,r,a,s,h){let d=null;const p=!0===r.isPointLight?e.customDistanceMaterial:e.customDepthMaterial;if(d=void 0!==p?p:!0===r.isPointLight?l:o,t.localClippingEnabled&&!0===i.clipShadows&&0!==i.clippingPlanes.length||i.displacementMap&&0!==i.displacementScale||i.alphaMap&&i.alphaTest>0){const t=d.uuid,e=i.uuid;let n=c[t];void 0===n&&(n={},c[t]=n);let r=n[e];void 0===r&&(r=d.clone(),n[e]=r),d=r}return d.visible=i.visible,d.wireframe=i.wireframe,d.side=3===h?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:u[i.side],d.alphaMap=i.alphaMap,d.alphaTest=i.alphaTest,d.clipShadows=i.clipShadows,d.clippingPlanes=i.clippingPlanes,d.clipIntersection=i.clipIntersection,d.displacementMap=i.displacementMap,d.displacementScale=i.displacementScale,d.displacementBias=i.displacementBias,d.wireframeLinewidth=i.wireframeLinewidth,d.linewidth=i.linewidth,!0===r.isPointLight&&!0===d.isMeshDistanceMaterial&&(d.referencePosition.setFromMatrixPosition(r.matrixWorld),d.nearDistance=a,d.farDistance=s),d}function x(n,r,a,s,o){if(!1===n.visible)return;if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===o)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(a.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let l=0,c=e.length;lh||r.y>h)&&(r.x>h&&(a.x=Math.floor(h/p.x),r.x=a.x*p.x,u.mapSize.x=a.x),r.y>h&&(a.y=Math.floor(h/p.y),r.y=a.y*p.y,u.mapSize.y=a.y)),null===u.map&&!u.isPointLightShadow&&3===this.type){const t={minFilter:cl,magFilter:cl,format:yl};u.map=new ic(r.x,r.y,t),u.map.texture.name=c.name+".shadowMap",u.mapPass=new ic(r.x,r.y,t),u.camera.updateProjectionMatrix()}if(null===u.map){const t={minFilter:ll,magFilter:ll,format:yl};u.map=new ic(r.x,r.y,t),u.map.texture.name=c.name+".shadowMap",u.camera.updateProjectionMatrix()}t.setRenderTarget(u.map),t.clear();const f=u.getViewportCount();for(let t=0;t=1):-1!==L.indexOf("OpenGL ES")&&(A=parseFloat(/^OpenGL ES (\d)/.exec(L)[1]),T=A>=2);let C=null,R={};const P=t.getParameter(3088),D=t.getParameter(2978),I=(new nc).fromArray(P),N=(new nc).fromArray(D);function O(e,n,i){const r=new Uint8Array(4),a=t.createTexture();t.bindTexture(e,a),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;ei||t.height>i)&&(r=i/Math.max(t.width,t.height)),r<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?jl:Math.floor,a=i(r*t.width),s=i(r*t.height);void 0===p&&(p=m(a,s));const o=n?m(a,s):p;o.width=a,o.height=s;return o.getContext("2d").drawImage(t,0,0,a,s),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+a+"x"+s+")."),o}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function v(t){return Wl(t.width)&&Wl(t.height)}function y(t,e){return t.generateMipmaps&&e&&t.minFilter!==ll&&t.minFilter!==cl}function x(e,n,r,a,s=1){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log2(Math.max(r,a,s))}function _(n,i,r,a){if(!1===o)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let s=i;return 6403===i&&(5126===r&&(s=33326),5131===r&&(s=33325),5121===r&&(s=33321)),6407===i&&(5126===r&&(s=34837),5131===r&&(s=34843),5121===r&&(s=32849)),6408===i&&(5126===r&&(s=34836),5131===r&&(s=34842),5121===r&&(s=a===Cl?35907:32856)),33325!==s&&33326!==s&&34842!==s&&34836!==s||e.get("EXT_color_buffer_float"),s}function b(t){return t===ll||1004===t||1005===t?9728:9729}function w(e){const n=e.target;n.removeEventListener("dispose",w),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture&&d.delete(n),s.memory.textures--}function M(e){const n=e.target;n.removeEventListener("dispose",M),function(e){const n=e.texture,r=i.get(e),a=i.get(n);if(!e)return;void 0!==a.__webglTexture&&(t.deleteTexture(a.__webglTexture),s.memory.textures--);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(r.__webglFramebuffer[e]),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer[e]);else t.deleteFramebuffer(r.__webglFramebuffer),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer),r.__webglMultisampledFramebuffer&&t.deleteFramebuffer(r.__webglMultisampledFramebuffer),r.__webglColorRenderbuffer&&t.deleteRenderbuffer(r.__webglColorRenderbuffer),r.__webglDepthRenderbuffer&&t.deleteRenderbuffer(r.__webglDepthRenderbuffer);if(e.isWebGLMultipleRenderTargets)for(let e=0,r=n.length;e0&&r.__version!==t.version){const n=t.image;if(void 0===n)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==n.complete)return void P(r,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}function T(e,r){const s=i.get(e);e.version>0&&s.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;R(e,i),n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const s=i&&(i.isCompressedTexture||i.image[0].isCompressedTexture),l=i.image[0]&&i.image[0].isDataTexture,h=[];for(let t=0;t<6;t++)h[t]=s||l?l?i.image[t].image:i.image[t]:g(i.image[t],!1,!0,c);const u=h[0],d=v(u)||o,p=a.convert(i.format),f=a.convert(i.type),m=_(i.internalFormat,p,f,i.encoding);let b;if(C(34067,i,d),s){for(let t=0;t<6;t++){b=h[t].mipmaps;for(let e=0;e1||i.get(a).__currentAnisotropy)&&(t.texParameterf(n,s.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,r.getMaxAnisotropy())),i.get(a).__currentAnisotropy=a.anisotropy)}}function R(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",w),e.__webglTexture=t.createTexture(),s.memory.textures++)}function P(e,i,r){let s=3553;i.isDataTexture2DArray&&(s=35866),i.isDataTexture3D&&(s=32879),R(e,i),n.activeTexture(33984+r),n.bindTexture(s,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const l=function(t){return!o&&(t.wrapS!==sl||t.wrapT!==sl||t.minFilter!==ll&&t.minFilter!==cl)}(i)&&!1===v(i.image),c=g(i.image,l,!1,h),u=v(c)||o,d=a.convert(i.format);let p,f=a.convert(i.type),m=_(i.internalFormat,d,f,i.encoding);C(s,i,u);const b=i.mipmaps;if(i.isDepthTexture)m=6402,o?m=i.type===fl?36012:i.type===pl?33190:i.type===gl?35056:33189:i.type===fl&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),i.format===xl&&6402===m&&i.type!==dl&&i.type!==pl&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),i.type=dl,f=a.convert(i.type)),i.format===_l&&6402===m&&(m=34041,i.type!==gl&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),i.type=gl,f=a.convert(i.type))),n.texImage2D(3553,0,m,c.width,c.height,0,d,f,null);else if(i.isDataTexture)if(b.length>0&&u){for(let t=0,e=b.length;t0&&u){for(let t=0,e=b.length;t=l&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+l),S+=1,t},this.resetTextureUnits=function(){S=0},this.setTexture2D=E,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?P(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?P(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=T,this.setupRenderTarget=function(e){const l=e.texture,c=i.get(e),h=i.get(l);e.addEventListener("dispose",M),!0!==e.isWebGLMultipleRenderTargets&&(h.__webglTexture=t.createTexture(),h.__version=l.version,s.memory.textures++);const u=!0===e.isWebGLCubeRenderTarget,d=!0===e.isWebGLMultipleRenderTargets,p=!0===e.isWebGLMultisampleRenderTarget,f=l.isDataTexture3D||l.isDataTexture2DArray,m=v(e)||o;if(!o||l.format!==vl||l.type!==fl&&l.type!==ml||(l.format=yl,console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")),u){c.__webglFramebuffer=[];for(let e=0;e<6;e++)c.__webglFramebuffer[e]=t.createFramebuffer()}else if(c.__webglFramebuffer=t.createFramebuffer(),d)if(r.drawBuffers){const n=e.texture;for(let e=0,r=n.length;eo+c?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!l.inputState.pinching&&s<=o-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else null!==o&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1));return null!==s&&(s.visible=null!==i),null!==o&&(o.visible=null!==r),null!==l&&(l.visible=null!==a),this}}class pf extends zl{constructor(t,e){super();const n=this,i=t.state;let r=null,a=1,s=null,o="local-floor",l=null,c=null,h=null,u=null,d=null,p=!1,f=null,m=null,g=null,v=null,y=null,x=null;const _=[],b=new Map,w=new mu;w.layers.enable(1),w.viewport=new nc;const M=new mu;M.layers.enable(2),M.viewport=new nc;const S=[w,M],E=new cf;E.layers.enable(1),E.layers.enable(2);let T=null,A=null;function L(t){const e=b.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function C(){b.forEach((function(t,e){t.disconnect(e)})),b.clear(),T=null,A=null,i.bindXRFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),h&&e.deleteFramebuffer(h),f&&e.deleteFramebuffer(f),m&&e.deleteRenderbuffer(m),g&&e.deleteRenderbuffer(g),h=null,f=null,m=null,g=null,d=null,u=null,c=null,r=null,O.stop(),n.isPresenting=!1,n.dispatchEvent({type:"sessionend"})}function R(t){const e=r.inputSources;for(let t=0;t<_.length;t++)b.set(e[t],_[t]);for(let e=0;e0&&(e.alphaTest.value=n.alphaTest);const i=t.get(n).envMap;if(i){e.envMap.value=i,e.flipEnvMap.value=i.isCubeTexture&&!1===i.isRenderTargetTexture?-1:1,e.reflectivity.value=n.reflectivity,e.ior.value=n.ior,e.refractionRatio.value=n.refractionRatio;const r=t.get(i).__maxMipLevel;void 0!==r&&(e.maxMipLevel.value=r)}let r,a;n.lightMap&&(e.lightMap.value=n.lightMap,e.lightMapIntensity.value=n.lightMapIntensity),n.aoMap&&(e.aoMap.value=n.aoMap,e.aoMapIntensity.value=n.aoMapIntensity),n.map?r=n.map:n.specularMap?r=n.specularMap:n.displacementMap?r=n.displacementMap:n.normalMap?r=n.normalMap:n.bumpMap?r=n.bumpMap:n.roughnessMap?r=n.roughnessMap:n.metalnessMap?r=n.metalnessMap:n.alphaMap?r=n.alphaMap:n.emissiveMap?r=n.emissiveMap:n.clearcoatMap?r=n.clearcoatMap:n.clearcoatNormalMap?r=n.clearcoatNormalMap:n.clearcoatRoughnessMap?r=n.clearcoatRoughnessMap:n.specularIntensityMap?r=n.specularIntensityMap:n.specularColorMap?r=n.specularColorMap:n.transmissionMap?r=n.transmissionMap:n.thicknessMap?r=n.thicknessMap:n.sheenColorMap?r=n.sheenColorMap:n.sheenRoughnessMap&&(r=n.sheenRoughnessMap),void 0!==r&&(r.isWebGLRenderTarget&&(r=r.texture),!0===r.matrixAutoUpdate&&r.updateMatrix(),e.uvTransform.value.copy(r.matrix)),n.aoMap?a=n.aoMap:n.lightMap&&(a=n.lightMap),void 0!==a&&(a.isWebGLRenderTarget&&(a=a.texture),!0===a.matrixAutoUpdate&&a.updateMatrix(),e.uv2Transform.value.copy(a.matrix))}function n(e,n){e.roughness.value=n.roughness,e.metalness.value=n.metalness,n.roughnessMap&&(e.roughnessMap.value=n.roughnessMap),n.metalnessMap&&(e.metalnessMap.value=n.metalnessMap),n.emissiveMap&&(e.emissiveMap.value=n.emissiveMap),n.bumpMap&&(e.bumpMap.value=n.bumpMap,e.bumpScale.value=n.bumpScale,1===n.side&&(e.bumpScale.value*=-1)),n.normalMap&&(e.normalMap.value=n.normalMap,e.normalScale.value.copy(n.normalScale),1===n.side&&e.normalScale.value.negate()),n.displacementMap&&(e.displacementMap.value=n.displacementMap,e.displacementScale.value=n.displacementScale,e.displacementBias.value=n.displacementBias);t.get(n).envMap&&(e.envMapIntensity.value=n.envMapIntensity)}return{refreshFogUniforms:function(t,e){t.fogColor.value.copy(e.color),e.isFog?(t.fogNear.value=e.near,t.fogFar.value=e.far):e.isFogExp2&&(t.fogDensity.value=e.density)},refreshMaterialUniforms:function(t,i,r,a,s){i.isMeshBasicMaterial?e(t,i):i.isMeshLambertMaterial?(e(t,i),function(t,e){e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap)}(t,i)):i.isMeshToonMaterial?(e(t,i),function(t,e){e.gradientMap&&(t.gradientMap.value=e.gradientMap);e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshPhongMaterial?(e(t,i),function(t,e){t.specular.value.copy(e.specular),t.shininess.value=Math.max(e.shininess,1e-4),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshStandardMaterial?(e(t,i),i.isMeshPhysicalMaterial?function(t,e,i){n(t,e),t.ior.value=e.ior,e.sheen>0&&(t.sheenColor.value.copy(e.sheenColor).multiplyScalar(e.sheen),t.sheenRoughness.value=e.sheenRoughness,e.sheenColorMap&&(t.sheenColorMap.value=e.sheenColorMap),e.sheenRoughnessMap&&(t.sheenRoughnessMap.value=e.sheenRoughnessMap));e.clearcoat>0&&(t.clearcoat.value=e.clearcoat,t.clearcoatRoughness.value=e.clearcoatRoughness,e.clearcoatMap&&(t.clearcoatMap.value=e.clearcoatMap),e.clearcoatRoughnessMap&&(t.clearcoatRoughnessMap.value=e.clearcoatRoughnessMap),e.clearcoatNormalMap&&(t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale),t.clearcoatNormalMap.value=e.clearcoatNormalMap,1===e.side&&t.clearcoatNormalScale.value.negate()));e.transmission>0&&(t.transmission.value=e.transmission,t.transmissionSamplerMap.value=i.texture,t.transmissionSamplerSize.value.set(i.width,i.height),e.transmissionMap&&(t.transmissionMap.value=e.transmissionMap),t.thickness.value=e.thickness,e.thicknessMap&&(t.thicknessMap.value=e.thicknessMap),t.attenuationDistance.value=e.attenuationDistance,t.attenuationColor.value.copy(e.attenuationColor));t.specularIntensity.value=e.specularIntensity,t.specularColor.value.copy(e.specularColor),e.specularIntensityMap&&(t.specularIntensityMap.value=e.specularIntensityMap);e.specularColorMap&&(t.specularColorMap.value=e.specularColorMap)}(t,i,s):n(t,i)):i.isMeshMatcapMaterial?(e(t,i),function(t,e){e.matcap&&(t.matcap.value=e.matcap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDepthMaterial?(e(t,i),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDistanceMaterial?(e(t,i),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias);t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}(t,i)):i.isMeshNormalMaterial?(e(t,i),function(t,e){e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isLineBasicMaterial?(function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity}(t,i),i.isLineDashedMaterial&&function(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}(t,i)):i.isPointsMaterial?function(t,e,n,i){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.size.value=e.size*n,t.scale.value=.5*i,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);e.alphaTest>0&&(t.alphaTest.value=e.alphaTest);let r;e.map?r=e.map:e.alphaMap&&(r=e.alphaMap);void 0!==r&&(!0===r.matrixAutoUpdate&&r.updateMatrix(),t.uvTransform.value.copy(r.matrix))}(t,i,r,a):i.isSpriteMaterial?function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.rotation.value=e.rotation,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);e.alphaTest>0&&(t.alphaTest.value=e.alphaTest);let n;e.map?n=e.map:e.alphaMap&&(n=e.alphaMap);void 0!==n&&(!0===n.matrixAutoUpdate&&n.updateMatrix(),t.uvTransform.value.copy(n.matrix))}(t,i):i.isShadowMaterial?(t.color.value.copy(i.color),t.opacity.value=i.opacity):i.isShaderMaterial&&(i.uniformsNeedUpdate=!1)}}}function mf(t={}){const e=void 0!==t.canvas?t.canvas:function(){const t=Zl("canvas");return t.style.display="block",t}(),n=void 0!==t.context?t.context:null,i=void 0!==t.alpha&&t.alpha,r=void 0===t.depth||t.depth,a=void 0===t.stencil||t.stencil,s=void 0!==t.antialias&&t.antialias,o=void 0===t.premultipliedAlpha||t.premultipliedAlpha,l=void 0!==t.preserveDrawingBuffer&&t.preserveDrawingBuffer,c=void 0!==t.powerPreference?t.powerPreference:"default",h=void 0!==t.failIfMajorPerformanceCaveat&&t.failIfMajorPerformanceCaveat;let u=null,d=null;const p=[],f=[];this.domElement=e,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.outputEncoding=Ll,this.physicallyCorrectLights=!1,this.toneMapping=0,this.toneMappingExposure=1;const m=this;let g=!1,v=0,y=0,x=null,_=-1,b=null;const w=new nc,M=new nc;let S=null,E=e.width,T=e.height,A=1,L=null,C=null;const R=new nc(0,0,E,T),P=new nc(0,0,E,T);let D=!1;const I=[],N=new Tu;let O=!1,z=!1,k=null;const B=new kc,F=new sc,U={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function H(){return null===x?A:1}let V,G,W,j,q,X,Y,Z,J,$,Q,K,tt,et,nt,it,rt,at,st,ot,lt,ct,ht,ut=n;function dt(t,n){for(let i=0;i0&&function(t,e,n){if(null===k){const t=!0===s&&!0===G.isWebGL2;k=new(t?rc:ic)(1024,1024,{generateMipmaps:!0,type:null!==ct.convert(ml)?ml:ul,minFilter:hl,magFilter:ll,wrapS:sl,wrapT:sl})}const i=m.getRenderTarget();m.setRenderTarget(k),m.clear();const r=m.toneMapping;m.toneMapping=0,St(t,e,n),m.toneMapping=r,X.updateMultisampleRenderTarget(k),X.updateRenderTargetMipmap(k),m.setRenderTarget(i)}(r,e,n),i&&W.viewport(w.copy(i)),r.length>0&&St(r,e,n),a.length>0&&St(a,e,n),o.length>0&&St(o,e,n)}function St(t,e,n){const i=!0===e.isScene?e.overrideMaterial:null;for(let r=0,a=t.length;r0?f[f.length-1]:null,p.pop(),u=p.length>0?p[p.length-1]:null},this.getActiveCubeFace=function(){return v},this.getActiveMipmapLevel=function(){return y},this.getRenderTarget=function(){return x},this.setRenderTarget=function(t,e=0,n=0){x=t,v=e,y=n,t&&void 0===q.get(t).__webglFramebuffer&&X.setupRenderTarget(t);let i=null,r=!1,a=!1;if(t){const n=t.texture;(n.isDataTexture3D||n.isDataTexture2DArray)&&(a=!0);const s=q.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=s[e],r=!0):i=t.isWebGLMultisampleRenderTarget?q.get(t).__webglMultisampledFramebuffer:s,w.copy(t.viewport),M.copy(t.scissor),S=t.scissorTest}else w.copy(R).multiplyScalar(A).floor(),M.copy(P).multiplyScalar(A).floor(),S=D;if(W.bindFramebuffer(36160,i)&&G.drawBuffers){let e=!1;if(t)if(t.isWebGLMultipleRenderTargets){const n=t.texture;if(I.length!==n.length||36064!==I[0]){for(let t=0,e=n.length;t=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&ut.readPixels(e,n,i,r,ct.convert(o),ct.convert(l),a):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{const t=null!==x?q.get(x).__webglFramebuffer:null;W.bindFramebuffer(36160,t)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),a=Math.floor(e.image.height*i);let s=ct.convert(e.format);G.isWebGL2&&(6407===s&&(s=32849),6408===s&&(s=32856)),X.setTexture2D(e,0),ut.copyTexImage2D(3553,n,s,t.x,t.y,r,a,0),W.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,a=e.image.height,s=ct.convert(n.format),o=ct.convert(n.type);X.setTexture2D(n,0),ut.pixelStorei(37440,n.flipY),ut.pixelStorei(37441,n.premultiplyAlpha),ut.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?ut.texSubImage2D(3553,i,t.x,t.y,r,a,s,o,e.image.data):e.isCompressedTexture?ut.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,s,e.mipmaps[0].data):ut.texSubImage2D(3553,i,t.x,t.y,s,o,e.image),0===i&&n.generateMipmaps&&ut.generateMipmap(3553),W.unbindTexture()},this.copyTextureToTexture3D=function(t,e,n,i,r=0){if(m.isWebGL1Renderer)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");const a=t.max.x-t.min.x+1,s=t.max.y-t.min.y+1,o=t.max.z-t.min.z+1,l=ct.convert(i.format),c=ct.convert(i.type);let h;if(i.isDataTexture3D)X.setTexture3D(i,0),h=32879;else{if(!i.isDataTexture2DArray)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");X.setTexture2DArray(i,0),h=35866}ut.pixelStorei(37440,i.flipY),ut.pixelStorei(37441,i.premultiplyAlpha),ut.pixelStorei(3317,i.unpackAlignment);const u=ut.getParameter(3314),d=ut.getParameter(32878),p=ut.getParameter(3316),f=ut.getParameter(3315),g=ut.getParameter(32877),v=n.isCompressedTexture?n.mipmaps[0]:n.image;ut.pixelStorei(3314,v.width),ut.pixelStorei(32878,v.height),ut.pixelStorei(3316,t.min.x),ut.pixelStorei(3315,t.min.y),ut.pixelStorei(32877,t.min.z),n.isDataTexture||n.isDataTexture3D?ut.texSubImage3D(h,r,e.x,e.y,e.z,a,s,o,l,c,v.data):n.isCompressedTexture?(console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture."),ut.compressedTexSubImage3D(h,r,e.x,e.y,e.z,a,s,o,l,v.data)):ut.texSubImage3D(h,r,e.x,e.y,e.z,a,s,o,l,c,v),ut.pixelStorei(3314,u),ut.pixelStorei(32878,d),ut.pixelStorei(3316,p),ut.pixelStorei(3315,f),ut.pixelStorei(32877,g),0===r&&i.generateMipmaps&&ut.generateMipmap(h),W.unbindTexture()},this.initTexture=function(t){X.setTexture2D(t,0),W.unbindTexture()},this.resetState=function(){v=0,y=0,x=null,W.reset(),ht.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}mf.prototype.isWebGLRenderer=!0;(class extends mf{}).prototype.isWebGL1Renderer=!0;class gf extends lh{constructor(){super(),this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}gf.prototype.isScene=!0;class vf{constructor(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=Il,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=Hl()}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;it.far||e.push({distance:o,point:wf.clone(),uv:xh.getUV(wf,Lf,Cf,Rf,Pf,Df,If,new ql),face:null,object:this})}copy(t){return super.copy(t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}}).prototype.isSprite=!0;const Of=new sc,zf=new nc,kf=new nc,Bf=new sc,Ff=new kc;class Uf extends ou{constructor(t,e){super(t,e),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new kc,this.bindMatrixInverse=new kc}copy(t){return super.copy(t),this.bindMode=t.bindMode,this.bindMatrix.copy(t.bindMatrix),this.bindMatrixInverse.copy(t.bindMatrixInverse),this.skeleton=t.skeleton,this}bind(t,e){this.skeleton=t,void 0===e&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),e=this.matrixWorld),this.bindMatrix.copy(e),this.bindMatrixInverse.copy(e).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(){const t=new nc,e=this.geometry.attributes.skinWeight;for(let n=0,i=e.count;no)continue;u.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(u);dt.far||e.push({distance:d,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else{for(let n=Math.max(0,a.start),i=Math.min(r.count,a.start+a.count)-1;no)continue;u.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(u);it.far||e.push({distance:i,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}}else n.isGeometry&&console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}Qf.prototype.isLine=!0;const Kf=new sc,tm=new sc;class em extends Qf{constructor(t,e){super(t,e),this.type="LineSegments"}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;tr.far)return;a.push({distance:l,distanceToRay:Math.sqrt(o),point:n,index:e,face:null,object:s})}}(class extends lh{constructor(t=new Gh,e=new nm){super(),this.type="Points",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),this.material=t.material,this.geometry=t.geometry,this}raycast(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Points.threshold,a=n.drawRange;if(null===n.boundingSphere&&n.computeBoundingSphere(),am.copy(n.boundingSphere),am.applyMatrix4(i),am.radius+=r,!1===t.ray.intersectsSphere(am))return;im.copy(i).invert(),rm.copy(t.ray).applyMatrix4(im);const s=r/((this.scale.x+this.scale.y+this.scale.z)/3),o=s*s;if(n.isBufferGeometry){const r=n.index,s=n.attributes.position;if(null!==r){for(let n=Math.max(0,a.start),l=Math.min(r.count,a.start+a.count);n0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}).prototype.isPoints=!0;(class extends tc{constructor(t,e,n,i,r,a,s,o,l){super(t,e,n,i,r,a,s,o,l),this.format=void 0!==s?s:vl,this.minFilter=void 0!==a?a:cl,this.magFilter=void 0!==r?r:cl,this.generateMipmaps=!1;const c=this;"requestVideoFrameCallback"in t&&t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const t=this.image;!1==="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}).prototype.isVideoTexture=!0;(class extends tc{constructor(t,e,n,i,r,a,s,o,l,c,h,u){super(null,a,s,o,l,c,i,r,h,u),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}}).prototype.isCompressedTexture=!0;(class extends tc{constructor(t,e,n,i,r,a,s,o,l){super(t,e,n,i,r,a,s,o,l),this.needsUpdate=!0}}).prototype.isCanvasTexture=!0;(class extends tc{constructor(t,e,n,i,r,a,s,o,l,c){if((c=void 0!==c?c:xl)!==xl&&c!==_l)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&c===xl&&(n=dl),void 0===n&&c===_l&&(n=gl),super(null,i,r,a,s,o,c,n,l),this.image={width:t,height:e},this.magFilter=void 0!==s?s:ll,this.minFilter=void 0!==o?o:ll,this.flipY=!1,this.generateMipmaps=!1}}).prototype.isDepthTexture=!0;class lm extends Gh{constructor(t=1,e=1,n=1,i=8,r=1,a=!1,s=0,o=2*Math.PI){super(),this.type="CylinderGeometry",this.parameters={radiusTop:t,radiusBottom:e,height:n,radialSegments:i,heightSegments:r,openEnded:a,thetaStart:s,thetaLength:o};const l=this;i=Math.floor(i),r=Math.floor(r);const c=[],h=[],u=[],d=[];let p=0;const f=[],m=n/2;let g=0;function v(n){const r=p,a=new ql,f=new sc;let v=0;const y=!0===n?t:e,x=!0===n?1:-1;for(let t=1;t<=i;t++)h.push(0,m*x,0),u.push(0,x,0),d.push(.5,.5),p++;const _=p;for(let t=0;t<=i;t++){const e=t/i*o+s,n=Math.cos(e),r=Math.sin(e);f.x=y*r,f.y=m*x,f.z=y*n,h.push(f.x,f.y,f.z),u.push(0,x,0),a.x=.5*n+.5,a.y=.5*r*x+.5,d.push(a.x,a.y),p++}for(let t=0;t0&&v(!0),e>0&&v(!1)),this.setIndex(c),this.setAttribute("position",new Oh(h,3)),this.setAttribute("normal",new Oh(u,3)),this.setAttribute("uv",new Oh(d,2))}static fromJSON(t){return new lm(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class cm extends lm{constructor(t=1,e=1,n=8,i=1,r=!1,a=0,s=2*Math.PI){super(0,t,e,n,i,r,a,s),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:i,openEnded:r,thetaStart:a,thetaLength:s}}static fromJSON(t){return new cm(t.radius,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}new sc,new sc,new sc,new xh;class hm{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)}getPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e}getSpacedPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let a=1;a<=t;a++)n=this.getPoint(a/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(t,e){const n=this.getLengths();let i=0;const r=n.length;let a;a=e||t*n[r-1];let s,o=0,l=r-1;for(;o<=l;)if(i=Math.floor(o+(l-o)/2),s=n[i]-a,s<0)o=i+1;else{if(!(s>0)){l=i;break}l=i-1}if(i=l,n[i]===a)return i/(r-1);const c=n[i];return(i+(a-c)/(n[i+1]-c))/(r-1)}getTangent(t,e){const n=1e-4;let i=t-n,r=t+n;i<0&&(i=0),r>1&&(r=1);const a=this.getPoint(i),s=this.getPoint(r),o=e||(a.isVector2?new ql:new sc);return o.copy(s).sub(a).normalize(),o}getTangentAt(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)}computeFrenetFrames(t,e){const n=new sc,i=[],r=[],a=[],s=new sc,o=new kc;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new sc)}r[0]=new sc,a[0]=new sc;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),h=Math.abs(i[0].y),u=Math.abs(i[0].z);c<=l&&(l=c,n.set(1,0,0)),h<=l&&(l=h,n.set(0,1,0)),u<=l&&n.set(0,0,1),s.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],s),a[0].crossVectors(i[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),a[e]=a[e-1].clone(),s.crossVectors(i[e-1],i[e]),s.length()>Number.EPSILON){s.normalize();const t=Math.acos(Vl(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(o.makeRotationAxis(s,t))}a[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(Vl(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(s.crossVectors(r[0],r[t]))>0&&(e=-e);for(let n=1;n<=t;n++)r[n].applyMatrix4(o.makeRotationAxis(i[n],e*n)),a[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:a}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}class um extends hm{constructor(t=0,e=0,n=1,i=1,r=0,a=2*Math.PI,s=!1,o=0){super(),this.type="EllipseCurve",this.aX=t,this.aY=e,this.xRadius=n,this.yRadius=i,this.aStartAngle=r,this.aEndAngle=a,this.aClockwise=s,this.aRotation=o}getPoint(t,e){const n=e||new ql,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const a=Math.abs(r)i;)r-=i;r0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c&&l===r-1&&(l=r-2,c=1),this.closed||l>0?s=i[(l-1)%r]:(fm.subVectors(i[0],i[1]).add(i[0]),s=fm);const h=i[l%r],u=i[(l+1)%r];if(this.closed||l+2i.length-2?i.length-1:a+1],h=i[a>i.length-3?i.length-1:a+2];return n.set(xm(s,o.x,l.x,c.x,h.x),xm(s,o.y,l.y,c.y,h.y)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e=n){const t=i[r]-n,a=this.curves[r],s=a.getLength(),o=0===s?0:1-t/s;return a.getPointAt(o,e)}r++}return null}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,n=t.curves.length;e0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}class Pm extends Rm{constructor(t){super(t),this.uuid=Hl(),this.type="Shape",this.holes=[]}getPointsHoles(t){const e=[];for(let n=0,i=this.holes.length;n80*n){o=c=t[0],l=h=t[1];for(let e=n;ec&&(c=u),d>h&&(h=d);p=Math.max(c-o,h-l),p=0!==p?1/p:0}return Om(a,s,n,o,l,p),s};function Im(t,e,n,i,r){let a,s;if(r===function(t,e,n,i){let r=0;for(let a=e,s=n-i;a0)for(a=e;a=e;a-=i)s=tg(a,t[a],t[a+1],s);return s&&Ym(s,s.next)&&(eg(s),s=s.next),s}function Nm(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!Ym(i,i.next)&&0!==Xm(i.prev,i,i.next))i=i.next;else{if(eg(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function Om(t,e,n,i,r,a,s){if(!t)return;!s&&a&&function(t,e,n,i){let r=t;do{null===r.z&&(r.z=Gm(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,a,s,o,l,c=1;do{for(n=t,t=null,a=null,s=0;n;){for(s++,i=n,o=0,e=0;e0||l>0&&i;)0!==o&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,o--):(r=i,i=i.nextZ,l--),a?a.nextZ=r:t=r,r.prevZ=a,a=r;n=i}a.nextZ=null,c*=2}while(s>1)}(r)}(t,i,r,a);let o,l,c=t;for(;t.prev!==t.next;)if(o=t.prev,l=t.next,a?km(t,i,r,a):zm(t))e.push(o.i/n),e.push(t.i/n),e.push(l.i/n),eg(t),t=l.next,c=l.next;else if((t=l)===c){s?1===s?Om(t=Bm(Nm(t),e,n),e,n,i,r,a,2):2===s&&Fm(t,e,n,i,r,a):Om(Nm(t),e,n,i,r,a,1);break}}function zm(t){const e=t.prev,n=t,i=t.next;if(Xm(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(jm(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&Xm(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function km(t,e,n,i){const r=t.prev,a=t,s=t.next;if(Xm(r,a,s)>=0)return!1;const o=r.xa.x?r.x>s.x?r.x:s.x:a.x>s.x?a.x:s.x,h=r.y>a.y?r.y>s.y?r.y:s.y:a.y>s.y?a.y:s.y,u=Gm(o,l,e,n,i),d=Gm(c,h,e,n,i);let p=t.prevZ,f=t.nextZ;for(;p&&p.z>=u&&f&&f.z<=d;){if(p!==t.prev&&p!==t.next&&jm(r.x,r.y,a.x,a.y,s.x,s.y,p.x,p.y)&&Xm(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,f!==t.prev&&f!==t.next&&jm(r.x,r.y,a.x,a.y,s.x,s.y,f.x,f.y)&&Xm(f.prev,f,f.next)>=0)return!1;f=f.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&jm(r.x,r.y,a.x,a.y,s.x,s.y,p.x,p.y)&&Xm(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;f&&f.z<=d;){if(f!==t.prev&&f!==t.next&&jm(r.x,r.y,a.x,a.y,s.x,s.y,f.x,f.y)&&Xm(f.prev,f,f.next)>=0)return!1;f=f.nextZ}return!0}function Bm(t,e,n){let i=t;do{const r=i.prev,a=i.next.next;!Ym(r,a)&&Zm(r,i,i.next,a)&&Qm(r,a)&&Qm(a,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(a.i/n),eg(i),eg(i.next),i=t=a),i=i.next}while(i!==t);return Nm(i)}function Fm(t,e,n,i,r,a){let s=t;do{let t=s.next.next;for(;t!==s.prev;){if(s.i!==t.i&&qm(s,t)){let o=Km(s,t);return s=Nm(s,s.next),o=Nm(o,o.next),Om(s,e,n,i,r,a),void Om(o,e,n,i,r,a)}t=t.next}s=s.next}while(s!==t)}function Um(t,e){return t.x-e.x}function Hm(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let a,s=-1/0;do{if(r<=n.y&&r>=n.next.y&&n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>s){if(s=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}a=n.x=n.x&&n.x>=l&&i!==n.x&&jm(ra.x||n.x===a.x&&Vm(a,n)))&&(a=n,u=h)),n=n.next}while(n!==o);return a}(t,e)){const n=Km(e,t);Nm(e,e.next),Nm(n,n.next)}}function Vm(t,e){return Xm(t.prev,t,e.prev)<0&&Xm(e.next,t,t.next)<0}function Gm(t,e,n,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function Wm(t){let e=t,n=t;do{(e.x=0&&(t-s)*(i-o)-(n-s)*(e-o)>=0&&(n-s)*(a-o)-(r-s)*(i-o)>=0}function qm(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&Zm(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(Qm(t,e)&&Qm(e,t)&&function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,a=(t.y+e.y)/2;do{n.y>a!=n.next.y>a&&n.next.y!==n.y&&r<(n.next.x-n.x)*(a-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(Xm(t.prev,t,e.prev)||Xm(t,e.prev,e))||Ym(t,e)&&Xm(t.prev,t,t.next)>0&&Xm(e.prev,e,e.next)>0)}function Xm(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function Ym(t,e){return t.x===e.x&&t.y===e.y}function Zm(t,e,n,i){const r=$m(Xm(t,e,n)),a=$m(Xm(t,e,i)),s=$m(Xm(n,i,t)),o=$m(Xm(n,i,e));return r!==a&&s!==o||(!(0!==r||!Jm(t,n,e))||(!(0!==a||!Jm(t,i,e))||(!(0!==s||!Jm(n,t,i))||!(0!==o||!Jm(n,e,i)))))}function Jm(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function $m(t){return t>0?1:t<0?-1:0}function Qm(t,e){return Xm(t.prev,t,t.next)<0?Xm(t,e,t.next)>=0&&Xm(t,t.prev,e)>=0:Xm(t,e,t.prev)<0||Xm(t,t.next,e)<0}function Km(t,e){const n=new ng(t.i,t.x,t.y),i=new ng(e.i,e.x,e.y),r=t.next,a=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,a.next=i,i.prev=a,i}function tg(t,e,n,i){const r=new ng(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function eg(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function ng(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}class ig{static area(t){const e=t.length;let n=0;for(let i=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function ag(t,e){for(let n=0;nNumber.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(l*l+c*c),p=e.x-o/u,f=e.y+s/u,m=((n.x-c/d-p)*c-(n.y+l/d-f)*l)/(s*c-o*l);i=p+s*m-t.x,r=f+o*m-t.y;const g=i*i+r*r;if(g<=2)return new ql(i,r);a=Math.sqrt(g/2)}else{let t=!1;s>Number.EPSILON?l>Number.EPSILON&&(t=!0):s<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(o)===Math.sign(c)&&(t=!0),t?(i=-o,r=s,a=Math.sqrt(h)):(i=s,r=o,a=Math.sqrt(h/2))}return new ql(i/a,r/a)}const P=[];for(let t=0,e=T.length,n=e-1,i=t+1;t=0;t--){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=T.length;t=0;){const i=n;let r=n-1;r<0&&(r=t.length-1);for(let t=0,n=o+2*p;t0)&&d.push(e,r,l),(t!==n-1||o0!=t>0&&this.version++,this._sheen=t}get clearcoat(){return this._clearcoat}set clearcoat(t){this._clearcoat>0!=t>0&&this.version++,this._clearcoat=t}get transmission(){return this._transmission}set transmission(t){this._transmission>0!=t>0&&this.version++,this._transmission=t}copy(t){return super.copy(t),this.defines={STANDARD:"",PHYSICAL:""},this.clearcoat=t.clearcoat,this.clearcoatMap=t.clearcoatMap,this.clearcoatRoughness=t.clearcoatRoughness,this.clearcoatRoughnessMap=t.clearcoatRoughnessMap,this.clearcoatNormalMap=t.clearcoatNormalMap,this.clearcoatNormalScale.copy(t.clearcoatNormalScale),this.ior=t.ior,this.sheen=t.sheen,this.sheenColor.copy(t.sheenColor),this.sheenColorMap=t.sheenColorMap,this.sheenRoughness=t.sheenRoughness,this.sheenRoughnessMap=t.sheenRoughnessMap,this.transmission=t.transmission,this.transmissionMap=t.transmissionMap,this.thickness=t.thickness,this.thicknessMap=t.thicknessMap,this.attenuationDistance=t.attenuationDistance,this.attenuationColor.copy(t.attenuationColor),this.specularIntensity=t.specularIntensity,this.specularIntensityMap=t.specularIntensityMap,this.specularColor.copy(t.specularColor),this.specularColorMap=t.specularColorMap,this}}).prototype.isMeshPhysicalMaterial=!0;(class extends bh{constructor(t){super(),this.type="MeshPhongMaterial",this.color=new Lh(16777215),this.specular=new Lh(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Lh(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new ql(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this}}).prototype.isMeshPhongMaterial=!0;(class extends bh{constructor(t){super(),this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new Lh(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Lh(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new ql(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.gradientMap=t.gradientMap,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this}}).prototype.isMeshToonMaterial=!0;(class extends bh{constructor(t){super(),this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new ql(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.flatShading=t.flatShading,this}}).prototype.isMeshNormalMaterial=!0;class dg extends bh{constructor(t){super(),this.type="MeshLambertMaterial",this.color=new Lh(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Lh(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this}}dg.prototype.isMeshLambertMaterial=!0;(class extends bh{constructor(t){super(),this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new Lh(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new ql(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.defines={MATCAP:""},this.color.copy(t.color),this.matcap=t.matcap,this.map=t.map,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.flatShading=t.flatShading,this}}).prototype.isMeshMatcapMaterial=!0;(class extends qf{constructor(t){super(),this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}copy(t){return super.copy(t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this}}).prototype.isLineDashedMaterial=!0;const pg={arraySlice:function(t,e,n){return pg.isTypedArray(t)?new t.constructor(t.subarray(e,void 0!==n?n:t.length)):t.slice(e,n)},convertArray:function(t,e,n){return!t||!n&&t.constructor===e?t:"number"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)},isTypedArray:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)},getKeyframeOrder:function(t){const e=t.length,n=new Array(e);for(let t=0;t!==e;++t)n[t]=t;return n.sort((function(e,n){return t[e]-t[n]})),n},sortedArray:function(t,e,n){const i=t.length,r=new t.constructor(i);for(let a=0,s=0;s!==i;++a){const i=n[a]*e;for(let n=0;n!==e;++n)r[s++]=t[i+n]}return r},flattenJSON:function(t,e,n,i){let r=1,a=t[0];for(;void 0!==a&&void 0===a[i];)a=t[r++];if(void 0===a)return;let s=a[i];if(void 0!==s)if(Array.isArray(s))do{s=a[i],void 0!==s&&(e.push(a.time),n.push.apply(n,s)),a=t[r++]}while(void 0!==a);else if(void 0!==s.toArray)do{s=a[i],void 0!==s&&(e.push(a.time),s.toArray(n,n.length)),a=t[r++]}while(void 0!==a);else do{s=a[i],void 0!==s&&(e.push(a.time),n.push(s)),a=t[r++]}while(void 0!==a)},subclip:function(t,e,n,i,r=30){const a=t.clone();a.name=e;const s=[];for(let t=0;t=i)){l.push(e.times[t]);for(let n=0;na.tracks[t].times[0]&&(o=a.tracks[t].times[0]);for(let t=0;t=i.times[u]){const t=u*l+o,e=t+l-o;d=pg.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=o,n=l-o;t.evaluate(a),d=pg.arraySlice(t.resultBuffer,e,n)}if("quaternion"===r){(new ac).fromArray(d).normalize().conjugate().toArray(d)}const p=s.times.length;for(let t=0;t=r)break t;{const s=e[1];t=r)break e}a=n,n=0}}for(;n>>1;te;)--a;if(++a,0!==r||a!==i){r>=a&&(a=Math.max(a,1),r=a-1);const t=this.getValueSize();this.times=pg.arraySlice(n,r,a),this.values=pg.arraySlice(this.values,r*t,a*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let a=null;for(let e=0;e!==r;e++){const i=n[e];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,i),t=!1;break}if(null!==a&&a>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,i,a),t=!1;break}a=i}if(void 0!==i&&pg.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,n),t=!1;break}}return t}optimize(){const t=pg.arraySlice(this.times),e=pg.arraySlice(this.values),n=this.getValueSize(),i=this.getInterpolation()===Ml,r=t.length-1;let a=1;for(let s=1;s0){t[a]=t[r];for(let t=r*n,i=a*n,s=0;s!==n;++s)e[i+s]=e[t+s];++a}return a!==t.length?(this.times=pg.arraySlice(t,0,a),this.values=pg.arraySlice(e,0,a*n)):(this.times=t,this.values=e),this}clone(){const t=pg.arraySlice(this.times,0),e=pg.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}yg.prototype.TimeBufferType=Float32Array,yg.prototype.ValueBufferType=Float32Array,yg.prototype.DefaultInterpolation=wl;class xg extends yg{}xg.prototype.ValueTypeName="bool",xg.prototype.ValueBufferType=Array,xg.prototype.DefaultInterpolation=bl,xg.prototype.InterpolantFactoryMethodLinear=void 0,xg.prototype.InterpolantFactoryMethodSmooth=void 0;class _g extends yg{}_g.prototype.ValueTypeName="color";class bg extends yg{}bg.prototype.ValueTypeName="number";class wg extends fg{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,a=this.sampleValues,s=this.valueSize,o=(n-e)/(i-e);let l=t*s;for(let t=l+s;l!==t;l+=4)ac.slerpFlat(r,0,a,l-s,a,l,o);return r}}class Mg extends yg{InterpolantFactoryMethodLinear(t){return new wg(this.times,this.values,this.getValueSize(),t)}}Mg.prototype.ValueTypeName="quaternion",Mg.prototype.DefaultInterpolation=wl,Mg.prototype.InterpolantFactoryMethodSmooth=void 0;class Sg extends yg{}Sg.prototype.ValueTypeName="string",Sg.prototype.ValueBufferType=Array,Sg.prototype.DefaultInterpolation=bl,Sg.prototype.InterpolantFactoryMethodLinear=void 0,Sg.prototype.InterpolantFactoryMethodSmooth=void 0;class Eg extends yg{}Eg.prototype.ValueTypeName="vector";class Tg{constructor(t,e=-1,n,i=2500){this.name=t,this.tracks=n,this.duration=e,this.blendMode=i,this.uuid=Hl(),this.duration<0&&this.resetDuration()}static parse(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(Ag(n[t]).scale(i));const r=new this(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r}static toJSON(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(yg.toJSON(n[t]));return i}static CreateFromMorphTargetSequence(t,e,n,i){const r=e.length,a=[];for(let t=0;t1){const t=a[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const a=[];for(const t in i)a.push(this.CreateFromMorphTargetSequence(t,i[t],e,n));return a}static parseAnimation(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const n=function(t,e,n,i,r){if(0!==n.length){const a=[],s=[];pg.flattenJSON(n,a,s,i),0!==a.length&&r.push(new t(e,a,s))}},i=[],r=t.name||"default",a=t.fps||30,s=t.blendMode;let o=t.length||-1;const l=t.hierarchy||[];for(let t=0;t{e&&e(r),this.manager.itemEnd(t)}),0),r;if(void 0!==Pg[t])return void Pg[t].push({onLoad:e,onProgress:n,onError:i});Pg[t]=[],Pg[t].push({onLoad:e,onProgress:n,onError:i});const a=new Request(t,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"});fetch(a).then((e=>{if(200===e.status||0===e.status){0===e.status&&console.warn("THREE.FileLoader: HTTP Status 0 received.");const n=Pg[t],i=e.body.getReader(),r=e.headers.get("Content-Length"),a=r?parseInt(r):0,s=0!==a;let o=0;return new ReadableStream({start(t){!function e(){i.read().then((({done:i,value:r})=>{if(i)t.close();else{o+=r.byteLength;const i=new ProgressEvent("progress",{lengthComputable:s,loaded:o,total:a});for(let t=0,e=n.length;t{const e=new Response(t);switch(this.responseType){case"arraybuffer":return e.arrayBuffer();case"blob":return e.blob();case"document":return e.text().then((t=>(new DOMParser).parseFromString(t,this.mimeType)));case"json":return e.json();default:return e.text()}})).then((e=>{Lg.add(t,e);const n=Pg[t];delete Pg[t];for(let t=0,i=n.length;t{const n=Pg[t];delete Pg[t];for(let t=0,i=n.length;t0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){s.setValue(n,i);break}}saveOriginalState(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]}_slerp(t,e,n,i){ac.slerpFlat(t,e,t,e,t,n,i)}_slerpAdditive(t,e,n,i,r){const a=this._workIndex*r;ac.multiplyQuaternionsFlat(t,a,t,e,t,n),ac.slerpFlat(t,e,t,e,t,a,i)}_lerp(t,e,n,i,r){const a=1-i;for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]*a+t[n+s]*i}}_lerpAdditive(t,e,n,i,r){for(let a=0;a!==r;++a){const r=e+a;t[r]=t[r]+t[n+a]*i}}}const Kg="\\[\\]\\.:\\/",tv=new RegExp("[\\[\\]\\.:\\/]","g"),ev="[^\\[\\]\\.:\\/]",nv="[^"+Kg.replace("\\.","")+"]",iv=/((?:WC+[\/:])*)/.source.replace("WC",ev),rv=/(WCOD+)?/.source.replace("WCOD",nv),av=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",ev),sv=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",ev),ov=new RegExp("^"+iv+rv+av+sv+"$"),lv=["material","materials","bones"];class cv{constructor(t,e,n){this.path=e,this.parsedPath=n||cv.parseTrackName(e),this.node=cv.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,n){return t&&t.isAnimationObjectGroup?new cv.Composite(t,e,n):new cv(t,e,n)}static sanitizeNodeName(t){return t.replace(/\s/g,"_").replace(tv,"")}static parseTrackName(t){const e=ov.exec(t);if(!e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==lv.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n}static findNode(t,e){if(!e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case 2501:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(a),e[n].accumulateAdditive(s);break;case Al:default:for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(a),e[n].accumulate(i,s)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const a=2202===n;if(0===t)return-1===r?i:a&&1==(1&r)?e-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,a)):this._setEndings(0===this.repetitions,!0,a)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const s=this.repetitions-r;if(s<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===s){const e=t<0;this._setEndings(e,!e,a)}else this._setEndings(!1,!1,a);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n})}}else this.time=i;if(a&&1==(1&r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=El,i.endingEnd=El):(i.endingStart=t?this.zeroSlopeAtStart?El:Sl:Tl,i.endingEnd=e?this.zeroSlopeAtEnd?El:Sl:Tl)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let a=this._weightInterpolant;null===a&&(a=i._lendControlInterpolant(),this._weightInterpolant=a);const s=a.parameterPositions,o=a.sampleValues;return s[0]=r,o[0]=e,s[1]=r+t,o[1]=n,this}}(class extends zl{constructor(t){super(),this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,a=t._propertyBindings,s=t._interpolants,o=n.uuid,l=this._bindingsByRootAndName;let c=l[o];void 0===c&&(c={},l[o]=c);for(let t=0;t!==r;++t){const r=i[t],l=r.name;let h=c[l];if(void 0!==h)a[t]=h;else{if(h=a[t],void 0!==h){null===h._cacheIndex&&(++h.referenceCount,this._addInactiveBinding(h,o,l));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;h=new Qg(cv.create(n,l,i),r.ValueTypeName,r.getValueSize()),++h.referenceCount,this._addInactiveBinding(h,o,l),a[t]=h}s[t].resultBuffer=h.buffer}}_activateAction(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}}_deactivateAction(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}}_isActiveAction(t){const e=t._cacheIndex;return null!==e&&e=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),a=this._accuIndex^=1;for(let s=0;s!==n;++s){e[s]._update(i,t,r,a)}const s=this._bindings,o=this._nActiveBindings;for(let t=0;t!==o;++t)s[t].apply(a);return this}setTime(t){this.time=0;for(let t=0;t=(r=(u+d)/2))?u=r:d=r,i=c,!(c=c[o=+s]))return i[o]=h,t;if(e===(a=+t._x.call(null,c.data)))return h.next=c,i?i[o]=h:t._root=h,t;do{i=i?i[o]=new Array(2):t._root=new Array(2),(s=e>=(r=(u+d)/2))?u=r:d=r}while((o=+s)==(l=+(a>=r)));return i[l]=c,i[o]=h,t}function yv(t,e,n){this.node=t,this.x0=e,this.x1=n}function xv(t){return t[0]}function _v(t,e){var n=new bv(null==e?xv:e,NaN,NaN);return null==t?n:n.addAll(t)}function bv(t,e,n){this._x=t,this._x0=e,this._x1=n,this._root=void 0}function wv(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}new Int32Array(mv.buffer),hm.create=function(t,e){return console.log("THREE.Curve.create() has been deprecated"),t.prototype=Object.create(hm.prototype),t.prototype.constructor=t,t.prototype.getPoint=e,t},Rm.prototype.fromPoints=function(t){return console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."),this.setFromPoints(t)},class extends em{constructor(t=10,e=10,n=4473924,i=8947848){n=new Lh(n),i=new Lh(i);const r=e/2,a=t/e,s=t/2,o=[],l=[];for(let t=0,c=0,h=-s;t<=e;t++,h+=a){o.push(-s,0,h,s,0,h),o.push(h,0,-s,h,0,s);const e=t===r?n:i;e.toArray(l,c),c+=3,e.toArray(l,c),c+=3,e.toArray(l,c),c+=3,e.toArray(l,c),c+=3}const c=new Gh;c.setAttribute("position",new Oh(o,3)),c.setAttribute("color",new Oh(l,3));super(c,new qf({vertexColors:!0,toneMapped:!1})),this.type="GridHelper"}}.prototype.setColors=function(){console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")},class extends em{constructor(t){const e=fv(t),n=new Gh,i=[],r=[],a=new Lh(0,0,1),s=new Lh(0,1,0);for(let t=0;t0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t=(a=(m+v)/2))?m=a:v=a,(h=n>=(s=(g+y)/2))?g=s:y=s,r=p,!(p=p[u=h<<1|c]))return r[u]=f,t;if(o=+t._x.call(null,p.data),l=+t._y.call(null,p.data),e===o&&n===l)return f.next=p,r?r[u]=f:t._root=f,t;do{r=r?r[u]=new Array(4):t._root=new Array(4),(c=e>=(a=(m+v)/2))?m=a:v=a,(h=n>=(s=(g+y)/2))?g=s:y=s}while((u=h<<1|c)==(d=(l>=s)<<1|o>=a));return r[d]=p,r[u]=f,t}function Ev(t,e,n,i,r){this.node=t,this.x0=e,this.y0=n,this.x1=i,this.y1=r}function Tv(t){return t[0]}function Av(t){return t[1]}function Lv(t,e,n){var i=new Cv(null==e?Tv:e,null==n?Av:n,NaN,NaN,NaN,NaN);return null==t?i:i.addAll(t)}function Cv(t,e,n,i,r,a){this._x=t,this._y=e,this._x0=n,this._y0=i,this._x1=r,this._y1=a,this._root=void 0}function Rv(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}Mv.copy=function(){var t,e,n=new bv(this._x,this._x0,this._x1),i=this._root;if(!i)return n;if(!i.length)return n._root=wv(i),n;for(t=[{source:i,target:n._root=new Array(2)}];i=t.pop();)for(var r=0;r<2;++r)(e=i.source[r])&&(e.length?t.push({source:e,target:i.target[r]=new Array(2)}):i.target[r]=wv(e));return n},Mv.add=function(t){var e=+this._x.call(null,t);return vv(this.cover(e),e,t)},Mv.addAll=function(t){var e,n,i=t.length,r=new Array(i),a=1/0,s=-1/0;for(e=0;es&&(s=n));if(a>s)return this;for(this.cover(a).cover(s),e=0;et||t>=n;)switch(r=+(tl||(r=a.x1)=u))&&(a=c[c.length-1],c[c.length-1]=c[c.length-1-s],c[c.length-1-s]=a)}else{var d=Math.abs(t-+this._x.call(null,h.data));d=(s=(u+d)/2))?u=s:d=s,e=h,!(h=h[l=+o]))return this;if(!h.length)break;e[l+1&1]&&(n=e,c=l)}for(;h.data!==t;)if(i=h,!(h=h.next))return this;return(r=h.next)&&delete h.next,i?(r?i.next=r:delete i.next,this):e?(r?e[l]=r:delete e[l],(h=e[0]||e[1])&&h===(e[1]||e[0])&&!h.length&&(n?n[c]=h:this._root=h),this):(this._root=r,this)},Mv.removeAll=function(t){for(var e=0,n=t.length;e=(s=(x+w)/2))?x=s:w=s,(p=n>=(o=(_+M)/2))?_=o:M=o,(f=i>=(l=(b+S)/2))?b=l:S=l,a=v,!(v=v[m=f<<2|p<<1|d]))return a[m]=y,t;if(c=+t._x.call(null,v.data),h=+t._y.call(null,v.data),u=+t._z.call(null,v.data),e===c&&n===h&&i===u)return y.next=v,a?a[m]=y:t._root=y,t;do{a=a?a[m]=new Array(8):t._root=new Array(8),(d=e>=(s=(x+w)/2))?x=s:w=s,(p=n>=(o=(_+M)/2))?_=o:M=o,(f=i>=(l=(b+S)/2))?b=l:S=l}while((m=f<<2|p<<1|d)==(g=(u>=l)<<2|(h>=o)<<1|c>=s));return a[g]=v,a[m]=y,t}function Iv(t,e,n,i,r,a,s){this.node=t,this.x0=e,this.y0=n,this.z0=i,this.x1=r,this.y1=a,this.z1=s}function Nv(t){return t[0]}function Ov(t){return t[1]}function zv(t){return t[2]}function kv(t,e,n,i){var r=new Bv(null==e?Nv:e,null==n?Ov:n,null==i?zv:i,NaN,NaN,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function Bv(t,e,n,i,r,a,s,o,l){this._x=t,this._y=e,this._z=n,this._x0=i,this._y0=r,this._z0=a,this._x1=s,this._y1=o,this._z1=l,this._root=void 0}function Fv(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}Pv.copy=function(){var t,e,n=new Cv(this._x,this._y,this._x0,this._y0,this._x1,this._y1),i=this._root;if(!i)return n;if(!i.length)return n._root=Rv(i),n;for(t=[{source:i,target:n._root=new Array(4)}];i=t.pop();)for(var r=0;r<4;++r)(e=i.source[r])&&(e.length?t.push({source:e,target:i.target[r]=new Array(4)}):i.target[r]=Rv(e));return n},Pv.add=function(t){const e=+this._x.call(null,t),n=+this._y.call(null,t);return Sv(this.cover(e,n),e,n,t)},Pv.addAll=function(t){var e,n,i,r,a=t.length,s=new Array(a),o=new Array(a),l=1/0,c=1/0,h=-1/0,u=-1/0;for(n=0;nh&&(h=i),ru&&(u=r));if(l>h||c>u)return this;for(this.cover(l,c).cover(h,u),n=0;nt||t>=r||i>e||e>=a;)switch(o=(ed||(a=l.y0)>p||(s=l.x1)=v)<<1|t>=g)&&(l=f[f.length-1],f[f.length-1]=f[f.length-1-c],f[f.length-1-c]=l)}else{var y=t-+this._x.call(null,m.data),x=e-+this._y.call(null,m.data),_=y*y+x*x;if(_=(o=(f+g)/2))?f=o:g=o,(h=s>=(l=(m+v)/2))?m=l:v=l,e=p,!(p=p[u=h<<1|c]))return this;if(!p.length)break;(e[u+1&3]||e[u+2&3]||e[u+3&3])&&(n=e,d=u)}for(;p.data!==t;)if(i=p,!(p=p.next))return this;return(r=p.next)&&delete p.next,i?(r?i.next=r:delete i.next,this):e?(r?e[u]=r:delete e[u],(p=e[0]||e[1]||e[2]||e[3])&&p===(e[3]||e[2]||e[1]||e[0])&&!p.length&&(n?n[d]=p:this._root=p),this):(this._root=r,this)},Pv.removeAll=function(t){for(var e=0,n=t.length;e1&&(v=d.y+d.vy-h.y-h.vy||Vv(o)),r>2&&(y=d.z+d.vz-h.z-h.vz||Vv(o)),g*=p=((p=Math.sqrt(g*g+v*v+y*y))-n[m])/p*i*e[m],v*=p,y*=p,d.vx-=g*(f=s[m]),r>1&&(d.vy-=v*f),r>2&&(d.vz-=y*f),h.vx+=g*(f=1-f),r>1&&(h.vy+=v*f),r>2&&(h.vz+=y*f)}function p(){if(i){var r,o,c=i.length,h=t.length,u=new Map(i.map(((t,e)=>[l(t,e,i),t])));for(r=0,a=new Array(c);r"function"==typeof t))||Math.random,r=e.find((t=>[1,2,3].includes(t)))||2,p()},d.links=function(e){return arguments.length?(t=e,p(),d):t},d.id=function(t){return arguments.length?(l=t,d):l},d.iterations=function(t){return arguments.length?(u=+t,d):u},d.strength=function(t){return arguments.length?(c="function"==typeof t?t:Hv(+t),f(),d):c},d.distance=function(t){return arguments.length?(h="function"==typeof t?t:Hv(+t),m(),d):h},d}Uv.copy=function(){var t,e,n=new Bv(this._x,this._y,this._z,this._x0,this._y0,this._z0,this._x1,this._y1,this._z1),i=this._root;if(!i)return n;if(!i.length)return n._root=Fv(i),n;for(t=[{source:i,target:n._root=new Array(8)}];i=t.pop();)for(var r=0;r<8;++r)(e=i.source[r])&&(e.length?t.push({source:e,target:i.target[r]=new Array(8)}):i.target[r]=Fv(e));return n},Uv.add=function(t){var e=+this._x.call(null,t),n=+this._y.call(null,t),i=+this._z.call(null,t);return Dv(this.cover(e,n,i),e,n,i,t)},Uv.addAll=function(t){var e,n,i,r,a,s=t.length,o=new Array(s),l=new Array(s),c=new Array(s),h=1/0,u=1/0,d=1/0,p=-1/0,f=-1/0,m=-1/0;for(n=0;np&&(p=i),rf&&(f=r),am&&(m=a));if(h>p||u>f||d>m)return this;for(this.cover(h,u,d).cover(p,f,m),n=0;nt||t>=s||r>e||e>=o||a>n||n>=l;)switch(h=(ng||(s=u.y0)>v||(o=u.z0)>y||(l=u.x1)=M)<<2|(e>=w)<<1|t>=b)&&(u=x[x.length-1],x[x.length-1]=x[x.length-1-d],x[x.length-1-d]=u)}else{var S=t-+this._x.call(null,_.data),E=e-+this._y.call(null,_.data),T=n-+this._z.call(null,_.data),A=S*S+E*E+T*T;if(A=(l=(v+_)/2))?v=l:_=l,(d=s>=(c=(y+b)/2))?y=c:b=c,(p=o>=(h=(x+w)/2))?x=h:w=h,e=g,!(g=g[f=p<<2|d<<1|u]))return this;if(!g.length)break;(e[f+1&7]||e[f+2&7]||e[f+3&7]||e[f+4&7]||e[f+5&7]||e[f+6&7]||e[f+7&7])&&(n=e,m=f)}for(;g.data!==t;)if(i=g,!(g=g.next))return this;return(r=g.next)&&delete g.next,i?(r?i.next=r:delete i.next,this):e?(r?e[f]=r:delete e[f],(g=e[0]||e[1]||e[2]||e[3]||e[4]||e[5]||e[6]||e[7])&&g===(e[7]||e[6]||e[5]||e[4]||e[3]||e[2]||e[1]||e[0])&&!g.length&&(n?n[m]=g:this._root=g),this):(this._root=r,this)},Uv.removeAll=function(t){for(var e=0,n=t.length;e{}};function Xv(){for(var t,e=0,n=arguments.length,i={};e=0&&(n=t.slice(i+1),t=t.slice(0,i)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function Jv(t,e){for(var n,i=0,r=t.length;i0)for(var n,i,r=new Array(n),a=0;a=0&&e._call.call(void 0,t),e=e._next;--ty}()}finally{ty=0,function(){var t,e,n=Qv,i=1/0;for(;n;)n._call?(i>n._time&&(i=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:Qv=e);Kv=t,fy(i)}(),ry=0}}function py(){var t=sy.now(),e=t-iy;e>1e3&&(ay-=e,iy=t)}function fy(t){ty||(ey&&(ey=clearTimeout(ey)),t-ry>24?(t<1/0&&(ey=setTimeout(dy,t-sy.now()-ay)),ny&&(ny=clearInterval(ny))):(ny||(iy=sy.now(),ny=setInterval(py,1e3)),ty=1,oy(dy)))}hy.prototype=uy.prototype={constructor:hy,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?ly():+n)+(null==e?0:+e),this._next||Kv===this||(Kv?Kv._next=this:Qv=this,Kv=this),this._call=t,this._time=n,fy()},stop:function(){this._call&&(this._call=null,this._time=1/0,fy())}};const my=4294967296;function gy(t){return t.x}function vy(t){return t.y}function yy(t){return t.z}var xy=Math.PI*(3-Math.sqrt(5)),_y=20*Math.PI/(9+Math.sqrt(221));function by(t,e){e=e||2;var n,i=Math.min(3,Math.max(1,Math.round(e))),r=1,a=.001,s=1-Math.pow(a,1/300),o=0,l=.6,c=new Map,h=uy(p),u=Xv("tick","end"),d=function(){let t=1;return()=>(t=(1664525*t+1013904223)%my)/my}();function p(){f(),u.call("tick",n),r1&&(null==h.fy?h.y+=h.vy*=l:(h.y=h.fy,h.vy=0)),i>2&&(null==h.fz?h.z+=h.vz*=l:(h.z=h.fz,h.vz=0));return n}function m(){for(var e,n=0,r=t.length;n1&&isNaN(e.y)||i>2&&isNaN(e.z)){var a=10*(i>2?Math.cbrt(.5+n):i>1?Math.sqrt(.5+n):n),s=n*xy,o=n*_y;1===i?e.x=a:2===i?(e.x=a*Math.cos(s),e.y=a*Math.sin(s)):(e.x=a*Math.sin(s)*Math.cos(o),e.y=a*Math.cos(s),e.z=a*Math.sin(s)*Math.sin(o))}(isNaN(e.vx)||i>1&&isNaN(e.vy)||i>2&&isNaN(e.vz))&&(e.vx=0,i>1&&(e.vy=0),i>2&&(e.vz=0))}}function g(e){return e.initialize&&e.initialize(t,d,i),e}return null==t&&(t=[]),m(),n={tick:f,restart:function(){return h.restart(p),n},stop:function(){return h.stop(),n},numDimensions:function(t){return arguments.length?(i=Math.min(3,Math.max(1,Math.round(t))),c.forEach(g),n):i},nodes:function(e){return arguments.length?(t=e,m(),c.forEach(g),n):t},alpha:function(t){return arguments.length?(r=+t,n):r},alphaMin:function(t){return arguments.length?(a=+t,n):a},alphaDecay:function(t){return arguments.length?(s=+t,n):+s},alphaTarget:function(t){return arguments.length?(o=+t,n):o},velocityDecay:function(t){return arguments.length?(l=1-t,n):1-l},randomSource:function(t){return arguments.length?(d=t,c.forEach(g),n):d},force:function(t,e){return arguments.length>1?(null==e?c.delete(t):c.set(t,g(e)),n):c.get(t)},find:function(){var e,n,r,a,s,o,l=Array.prototype.slice.call(arguments),c=l.shift()||0,h=(i>1?l.shift():null)||0,u=(i>2?l.shift():null)||0,d=l.shift()||1/0,p=0,f=t.length;for(d*=d,p=0;p1?(u.on(t,e),n):u.on(t)}}}function wy(){var t,e,n,i,r,a,s=Hv(-30),o=1,l=1/0,c=.81;function h(i){var a,s=t.length,o=(1===e?_v(t,gy):2===e?Lv(t,gy,vy):3===e?kv(t,gy,vy,yy):null).visitAfter(d);for(r=i,a=0;a1&&(t.y=s/h),e>2&&(t.z=o/h)}else{(n=t).x=n.data.x,e>1&&(n.y=n.data.y),e>2&&(n.z=n.data.z);do{c+=a[n.data.index]}while(n=n.next)}t.value=c}function p(t,s,h,u,d){if(!t.value)return!0;var p=[h,u,d][e-1],f=t.x-n.x,m=e>1?t.y-n.y:0,g=e>2?t.z-n.z:0,v=p-s,y=f*f+m*m+g*g;if(v*v/c1&&0===m&&(y+=(m=Vv(i))*m),e>2&&0===g&&(y+=(g=Vv(i))*g),y1&&(n.vy+=m*t.value*r/y),e>2&&(n.vz+=g*t.value*r/y)),!0;if(!(t.length||y>=l)){(t.data!==n||t.next)&&(0===f&&(y+=(f=Vv(i))*f),e>1&&0===m&&(y+=(m=Vv(i))*m),e>2&&0===g&&(y+=(g=Vv(i))*g),y1&&(n.vy+=m*v),e>2&&(n.vz+=g*v))}while(t=t.next)}}return h.initialize=function(n,...r){t=n,i=r.find((t=>"function"==typeof t))||Math.random,e=r.find((t=>[1,2,3].includes(t)))||2,u()},h.strength=function(t){return arguments.length?(s="function"==typeof t?t:Hv(+t),u(),h):s},h.distanceMin=function(t){return arguments.length?(o=t*t,h):Math.sqrt(o)},h.distanceMax=function(t){return arguments.length?(l=t*t,h):Math.sqrt(l)},h.theta=function(t){return arguments.length?(c=t*t,h):Math.sqrt(c)},h}var My=function(t){!function(t){if(!t)throw new Error("Eventify cannot use falsy object as events subject");for(var e=["on","fire","off"],n=0;n1&&(i=Array.prototype.splice.call(arguments,1));for(var a=0;a=0&&i.links.splice(e,1),r&&(e=Ty(t,r.links))>=0&&r.links.splice(e,1),o(t,"remove"),h(),!0}function _(t,e){var n,i=m(t);if(!i||!i.links)return null;for(n=0;n0&&(u.fire("changed",s),s.length=0)}function S(t){if("function"!=typeof t)throw new Error("Function is expected to iterate over graph nodes. You passed "+t);for(var n=e.values(),i=n.next();!i.done;){if(t(i.value))return!0;i=n.next()}}},Ey=My;function Ty(t,e){if(!e)return-1;if(e.indexOf)return e.indexOf(t);var n,i=e.length;for(n=0;n {var}max) {var}max = pos.{var};",{indent:6})}\n }\n\n // Makes the bounds square.\n var maxSideLength = -Infinity;\n ${e("if ({var}max - {var}min > maxSideLength) maxSideLength = {var}max - {var}min ;",{indent:4})}\n\n currentInCache = 0;\n root = newNode();\n ${e("root.min_{var} = {var}min;",{indent:4})}\n ${e("root.max_{var} = {var}min + maxSideLength;",{indent:4})}\n\n i = bodies.length - 1;\n if (i >= 0) {\n root.body = bodies[i];\n }\n while (i--) {\n insert(bodies[i], root);\n }\n }\n\n function insert(newBody) {\n insertStack.reset();\n insertStack.push(root, newBody);\n\n while (!insertStack.isEmpty()) {\n var stackItem = insertStack.pop();\n var node = stackItem.node;\n var body = stackItem.body;\n\n if (!node.body) {\n // This is internal node. Update the total mass of the node and center-of-mass.\n ${e("var {var} = body.pos.{var};",{indent:8})}\n node.mass += body.mass;\n ${e("node.mass_{var} += body.mass * {var};",{indent:8})}\n\n // Recursively insert the body in the appropriate quadrant.\n // But first find the appropriate quadrant.\n var quadIdx = 0; // Assume we are in the 0's quad.\n ${e("var min_{var} = node.min_{var};",{indent:8})}\n ${e("var max_{var} = (min_{var} + node.max_{var}) / 2;",{indent:8})}\n\n${function(e){let n=[],i=Array(e+1).join(" ");for(let e=0;e max_${Vy(e)}) {`),n.push(i+` quadIdx = quadIdx + ${Math.pow(2,e)};`),n.push(i+` min_${Vy(e)} = max_${Vy(e)};`),n.push(i+` max_${Vy(e)} = node.max_${Vy(e)};`),n.push(i+"}");return n.join("\n")}(8)}\n\n var child = getChild(node, quadIdx);\n\n if (!child) {\n // The node is internal but this quadrant is not taken. Add\n // subnode to it.\n child = newNode();\n ${e("child.min_{var} = min_{var};",{indent:10})}\n ${e("child.max_{var} = max_{var};",{indent:10})}\n child.body = body;\n\n setChild(node, quadIdx, child);\n } else {\n // continue searching in this quadrant.\n insertStack.push(child, body);\n }\n } else {\n // We are trying to add to the leaf node.\n // We have to convert current leaf into internal node\n // and continue adding two nodes.\n var oldBody = node.body;\n node.body = null; // internal nodes do not cary bodies\n\n if (isSamePosition(oldBody.pos, body.pos)) {\n // Prevent infinite subdivision by bumping one node\n // anywhere in this quadrant\n var retriesCount = 3;\n do {\n var offset = random.nextDouble();\n ${e("var d{var} = (node.max_{var} - node.min_{var}) * offset;",{indent:12})}\n\n ${e("oldBody.pos.{var} = node.min_{var} + d{var};",{indent:12})}\n retriesCount -= 1;\n // Make sure we don't bump it out of the box. If we do, next iteration should fix it\n } while (retriesCount > 0 && isSamePosition(oldBody.pos, body.pos));\n\n if (retriesCount === 0 && isSamePosition(oldBody.pos, body.pos)) {\n // This is very bad, we ran out of precision.\n // if we do not return from the method we'll get into\n // infinite loop here. So we sacrifice correctness of layout, and keep the app running\n // Next layout iteration should get larger bounding box in the first step and fix this\n return;\n }\n }\n // Next iteration should subdivide node further.\n insertStack.push(node, oldBody);\n insertStack.push(node, body);\n }\n }\n }\n}\nreturn createQuadTree;\n\n`}function Wy(t){let e=Hy(t);return`\n function isSamePosition(point1, point2) {\n ${e("var d{var} = Math.abs(point1.{var} - point2.{var});",{indent:2})}\n \n return ${e("d{var} < 1e-8",{join:" && "})};\n } \n`}function jy(t){var e=Math.pow(2,t);return`\nfunction setChild(node, idx, child) {\n ${function(){let t=[];for(let n=0;n 0) {\n return this.stack[--this.popIdx];\n }\n },\n reset: function () {\n this.popIdx = 0;\n }\n};\n\nfunction InsertStackElement(node, body) {\n this.node = node; // QuadTree node\n this.body = body; // physical body which needs to be inserted to node\n}\n"}Uy.exports=function(t){let e=Gy(t);return new Function(e)()},Uy.exports.generateQuadTreeFunctionBody=Gy,Uy.exports.getInsertStackCode=Yy,Uy.exports.getQuadNodeCode=Xy,Uy.exports.isSamePosition=Wy,Uy.exports.getChildBodyCode=qy,Uy.exports.setChildBodyCode=jy;var Zy={exports:{}};Zy.exports=function(t){let e=$y(t);return new Function("bodies","settings","random",e)},Zy.exports.generateFunctionBody=$y;const Jy=Oy;function $y(t){let e=Jy(t);return`\n var boundingBox = {\n ${e("min_{var}: 0, max_{var}: 0,",{indent:4})}\n };\n\n return {\n box: boundingBox,\n\n update: updateBoundingBox,\n\n reset: resetBoundingBox,\n\n getBestNewPosition: function (neighbors) {\n var ${e("base_{var} = 0",{join:", "})};\n\n if (neighbors.length) {\n for (var i = 0; i < neighbors.length; ++i) {\n let neighborPos = neighbors[i].pos;\n ${e("base_{var} += neighborPos.{var};",{indent:10})}\n }\n\n ${e("base_{var} /= neighbors.length;",{indent:8})}\n } else {\n ${e("base_{var} = (boundingBox.min_{var} + boundingBox.max_{var}) / 2;",{indent:8})}\n }\n\n var springLength = settings.springLength;\n return {\n ${e("{var}: base_{var} + (random.nextDouble() - 0.5) * springLength,",{indent:8})}\n };\n }\n };\n\n function updateBoundingBox() {\n var i = bodies.length;\n if (i === 0) return; // No bodies - no borders.\n\n ${e("var max_{var} = -Infinity;",{indent:4})}\n ${e("var min_{var} = Infinity;",{indent:4})}\n\n while(i--) {\n // this is O(n), it could be done faster with quadtree, if we check the root node bounds\n var bodyPos = bodies[i].pos;\n ${e("if (bodyPos.{var} < min_{var}) min_{var} = bodyPos.{var};",{indent:6})}\n ${e("if (bodyPos.{var} > max_{var}) max_{var} = bodyPos.{var};",{indent:6})}\n }\n\n ${e("boundingBox.min_{var} = min_{var};",{indent:4})}\n ${e("boundingBox.max_{var} = max_{var};",{indent:4})}\n }\n\n function resetBoundingBox() {\n ${e("boundingBox.min_{var} = boundingBox.max_{var} = 0;",{indent:4})}\n }\n`}var Qy={exports:{}};const Ky=Oy;function tx(t){return`\n if (!Number.isFinite(options.dragCoefficient)) throw new Error('dragCoefficient is not a finite number');\n\n return {\n update: function(body) {\n ${Ky(t)("body.force.{var} -= options.dragCoefficient * body.velocity.{var};",{indent:6})}\n }\n };\n`}Qy.exports=function(t){let e=tx(t);return new Function("options",e)},Qy.exports.generateCreateDragForceFunctionBody=tx;var ex={exports:{}};const nx=Oy;function ix(t){let e=nx(t);return`\n if (!Number.isFinite(options.springCoefficient)) throw new Error('Spring coefficient is not a number');\n if (!Number.isFinite(options.springLength)) throw new Error('Spring length is not a number');\n\n return {\n /**\n * Updates forces acting on a spring\n */\n update: function (spring) {\n var body1 = spring.from;\n var body2 = spring.to;\n var length = spring.length < 0 ? options.springLength : spring.length;\n ${e("var d{var} = body2.pos.{var} - body1.pos.{var};",{indent:6})}\n var r = Math.sqrt(${e("d{var} * d{var}",{join:" + "})});\n\n if (r === 0) {\n ${e("d{var} = (random.nextDouble() - 0.5) / 50;",{indent:8})}\n r = Math.sqrt(${e("d{var} * d{var}",{join:" + "})});\n }\n\n var d = r - length;\n var coefficient = ((spring.coefficient > 0) ? spring.coefficient : options.springCoefficient) * d / r;\n\n ${e("body1.force.{var} += coefficient * d{var}",{indent:6})};\n body1.springCount += 1;\n body1.springLength += r;\n\n ${e("body2.force.{var} -= coefficient * d{var}",{indent:6})};\n body2.springCount += 1;\n body2.springLength += r;\n }\n };\n`}ex.exports=function(t){let e=ix(t);return new Function("options","random",e)},ex.exports.generateCreateSpringForceFunctionBody=ix;var rx={exports:{}};const ax=Oy;function sx(t){let e=ax(t);return`\n var length = bodies.length;\n if (length === 0) return 0;\n\n ${e("var d{var} = 0, t{var} = 0;",{indent:2})}\n\n for (var i = 0; i < length; ++i) {\n var body = bodies[i];\n if (body.isPinned) continue;\n\n if (adaptiveTimeStepWeight && body.springCount) {\n timeStep = (adaptiveTimeStepWeight * body.springLength/body.springCount);\n }\n\n var coeff = timeStep / body.mass;\n\n ${e("body.velocity.{var} += coeff * body.force.{var};",{indent:4})}\n ${e("var v{var} = body.velocity.{var};",{indent:4})}\n var v = Math.sqrt(${e("v{var} * v{var}",{join:" + "})});\n\n if (v > 1) {\n // We normalize it so that we move within timeStep range. \n // for the case when v <= 1 - we let velocity to fade out.\n ${e("body.velocity.{var} = v{var} / v;",{indent:6})}\n }\n\n ${e("d{var} = timeStep * body.velocity.{var};",{indent:4})}\n\n ${e("body.pos.{var} += d{var};",{indent:4})}\n\n ${e("t{var} += Math.abs(d{var});",{indent:4})}\n }\n\n return (${e("t{var} * t{var}",{join:" + "})})/length;\n`}rx.exports=function(t){let e=sx(t);return new Function("bodies","timeStep","adaptiveTimeStepWeight",e)},rx.exports.generateIntegratorFunctionBody=sx;var ox=function(t,e,n,i){this.from=t,this.to=e,this.length=n,this.coefficient=i};var lx=function t(e,n){var i;e||(e={});if(n)for(i in n)if(n.hasOwnProperty(i)){var r=e.hasOwnProperty(i),a=typeof n[i];!r||typeof e[i]!==a?e[i]=n[i]:"object"===a&&(e[i]=t(e[i],n[i]))}return e};var cx={exports:{}};function hx(t){return new ux("number"==typeof t?t:+new Date)}function ux(t){this.seed=t}function dx(t){return Math.sqrt(2*Math.PI/t)*Math.pow(1/Math.E*(t+1/(12*t-1/(10*t))),t)}function px(){var t=this.seed;return t=4294967295&(3042594569^(t=(t=4294967295&((t=(t=4294967295&(3345072700^(t=t+2127912214+(t<<12)&4294967295)^t>>>19))+374761393+(t<<5)&4294967295)+3550635116^t<<9))+4251993797+(t<<3)&4294967295)^t>>>16),this.seed=t,(268435455&t)/268435456}cx.exports=hx,cx.exports.random=hx,cx.exports.randomIterator=function(t,e){var n=e||hx();if("function"!=typeof n.next)throw new Error("customRandom does not match expected API: next() function is missing");return{forEach:function(e){var i,r,a;for(i=t.length-1;i>0;--i)r=n.next(i+1),a=t[r],t[r]=t[i],t[i]=a,e(a);t.length&&e(t[0])},shuffle:function(){var e,i,r;for(e=t.length-1;e>0;--e)i=n.next(e+1),r=t[i],t[i]=t[e],t[e]=r;return t}}},ux.prototype.next=function(t){return Math.floor(this.nextDouble()*t)},ux.prototype.nextDouble=px,ux.prototype.uniform=px,ux.prototype.gaussian=function(){var t,e,n;do{e=2*this.nextDouble()-1,n=2*this.nextDouble()-1,t=e*e+n*n}while(t>=1||0===t);return e*Math.sqrt(-2*Math.log(t)/t)},ux.prototype.levy=function(){var t=1.5,e=Math.pow(dx(2.5)*Math.sin(Math.PI*t/2)/(dx(1.25)*t*Math.pow(2,.25)),1/t);return this.gaussian()*e/Math.pow(Math.abs(this.gaussian()),1/t)};var fx=function(t){var e=ox,n=lx,i=My;if(t){if(void 0!==t.springCoeff)throw new Error("springCoeff was renamed to springCoefficient");if(void 0!==t.dragCoeff)throw new Error("dragCoeff was renamed to dragCoefficient")}t=n(t,{springLength:10,springCoefficient:.8,gravity:-12,theta:.8,dragCoefficient:.9,timeStep:.5,adaptiveTimeStepWeight:0,dimensions:2,debug:!1});var r=bx[t.dimensions];if(!r){var a=t.dimensions;r={Body:mx(a,t.debug),createQuadTree:gx(a),createBounds:vx(a),createDragForce:yx(a),createSpringForce:xx(a),integrate:_x(a)},bx[a]=r}var s=r.Body,o=r.createQuadTree,l=r.createBounds,c=r.createDragForce,h=r.createSpringForce,u=r.integrate,d=cx.exports.random(42),p=[],f=[],m=o(t,d),g=l(p,t,d),v=h(t,d),y=c(t),x=[],_=new Map,b=0;S("nbody",(function(){if(0===p.length)return;m.insertBodies(p);var t=p.length;for(;t--;){var e=p[t];e.isPinned||(e.reset(),m.updateBodyForce(e),y.update(e))}})),S("spring",(function(){var t=f.length;for(;t--;)v.update(f[t])}));var w={bodies:p,quadTree:m,springs:f,settings:t,addForce:S,removeForce:function(t){var e=x.indexOf(_.get(t));if(e<0)return;x.splice(e,1),_.delete(t)},getForces:function(){return _},step:function(){for(var e=0;enew s(t))(t);return p.push(e),e},removeBody:function(t){if(t){var e=p.indexOf(t);if(!(e<0))return p.splice(e,1),0===p.length&&g.reset(),!0}},addSpring:function(t,n,i,r){if(!t||!n)throw new Error("Cannot add null spring to force simulator");"number"!=typeof i&&(i=-1);var a=new e(t,n,i,r>=0?r:-1);return f.push(a),a},getTotalMovement:function(){return 0},removeSpring:function(t){if(t){var e=f.indexOf(t);return e>-1?(f.splice(e,1),!0):void 0}},getBestNewBodyPosition:function(t){return g.getBestNewPosition(t)},getBBox:M,getBoundingBox:M,invalidateBBox:function(){console.warn("invalidateBBox() is deprecated, bounds always recomputed on `getBBox()` call")},gravity:function(e){return void 0!==e?(t.gravity=e,m.options({gravity:e}),this):t.gravity},theta:function(e){return void 0!==e?(t.theta=e,m.options({theta:e}),this):t.theta},random:d};return function(t,e){for(var n in t)wx(t,e,n)}(t,w),i(w),w;function M(){return g.update(),g.box}function S(t,e){if(_.has(t))throw new Error("Force "+t+" is already added");_.set(t,e),x.push(e)}},mx=Dy.exports,gx=Uy.exports,vx=Zy.exports,yx=Qy.exports,xx=ex.exports,_x=rx.exports,bx={};function wx(t,e,n){if(t.hasOwnProperty(n)&&"function"!=typeof e[n]){var i=Number.isFinite(t[n]);e[n]=i?function(i){if(void 0!==i){if(!Number.isFinite(i))throw new Error("Value of "+n+" should be a valid number.");return t[n]=i,e}return t[n]}:function(i){return void 0!==i?(t[n]=i,e):t[n]}}}Py.exports=function(t,e){if(!t)throw new Error("Graph structure cannot be undefined");var n=(e&&e.createSimulator||fx)(e);if(Array.isArray(e))throw new Error("Physics settings is expected to be an object");var i=function(e){var n=t.getLinks(e);return n?1+n.length/3:1};e&&"function"==typeof e.nodeMass&&(i=e.nodeMass);var r=new Map,a={},s=0,o=n.settings.springTransform||Sx;s=0,t.forEachNode((function(t){p(t.id),s+=1})),t.forEachLink(m),t.on("changed",d);var l=!1,c={step:function(){if(0===s)return h(!0),!0;var t=n.step();c.lastMove=t,c.fire("step");var e=t/s<=.01;return h(e),e},getNodePosition:function(t){return y(t).pos},setNodePosition:function(t){var e=y(t);e.setPosition.apply(e,Array.prototype.slice.call(arguments,1))},getLinkPosition:function(t){var e=a[t];if(e)return{from:e.from.pos,to:e.to.pos}},getGraphRect:function(){return n.getBBox()},forEachBody:u,pinNode:function(t,e){y(t.id).isPinned=!!e},isNodePinned:function(t){return y(t.id).isPinned},dispose:function(){t.off("changed",d),c.fire("disposed")},getBody:function(t){return r.get(t)},getSpring:function(e,n){var i;if(void 0===n)i="object"!=typeof e?e:e.id;else{var r=t.hasLink(e,n);if(!r)return;i=r.id}return a[i]},getForceVectorLength:function(){var t=0,e=0;return u((function(n){t+=Math.abs(n.force.x),e+=Math.abs(n.force.y)})),Math.sqrt(t*t+e*e)},simulator:n,graph:t,lastMove:0};return Mx(c),c;function h(t){var e;l!==t&&(l=t,e=t,c.fire("stable",e))}function u(t){r.forEach(t)}function d(e){for(var n=0;n=0?i=setTimeout(l,e-c):(i=null,n||(o=t.apply(a,r),a=r=null))}null==e&&(e=100);var c=function(){a=this,r=arguments,s=Date.now();var c=n&&!i;return i||(i=setTimeout(l,e)),c&&(o=t.apply(a,r),a=r=null),o};return c.clear=function(){i&&(clearTimeout(i),i=null)},c.flush=function(){i&&(o=t.apply(a,r),a=r=null,clearTimeout(i),i=null)},c}Tx.debounce=Tx;var Ax=Tx;function Lx(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=t&&("undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"]);if(null==n)return;var i,r,a=[],s=!0,o=!1;try{for(n=n.call(t);!(s=(i=n.next()).done)&&(a.push(i.value),!e||a.length!==e);s=!0);}catch(t){o=!0,r=t}finally{try{s||null==n.return||n.return()}finally{if(o)throw r}}return a}(t,e)||function(t,e){if(!t)return;if("string"==typeof t)return Cx(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Cx(t,e)}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Cx(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n=e)&&(n=e);else{let i=-1;for(let r of t)null!=(r=e(r,++i,t))&&(n=r)&&(n=r)}return n}function zx(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n>e||void 0===n&&e>=e)&&(n=e);else{let i=-1;for(let r of t)null!=(r=e(r,++i,t))&&(n>r||void 0===n&&r>=r)&&(n=r)}return n}function kx(t,e){if(null==t)return{};var n,i,r=function(t,e){if(null==t)return{};var n,i,r={},a=Object.keys(t);for(i=0;i=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}function Bx(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=t&&("undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"]);if(null==n)return;var i,r,a=[],s=!0,o=!1;try{for(n=n.call(t);!(s=(i=n.next()).done)&&(a.push(i.value),!e||a.length!==e);s=!0);}catch(t){o=!0,r=t}finally{try{s||null==n.return||n.return()}finally{if(o)throw r}}return a}(t,e)||Ux(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Fx(t){return function(t){if(Array.isArray(t))return Hx(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||Ux(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ux(t,e){if(t){if("string"==typeof t)return Hx(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Hx(t,e):void 0}}function Hx(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=(e instanceof Array?e.length?e:[void 0]:[e]).map((function(t){return{keyAccessor:t,isProp:!(t instanceof Function)}})),a=t.reduce((function(t,e){var i=t,a=e;return r.forEach((function(t,e){var s,o=t.keyAccessor;if(t.isProp){var l=a,c=l[o],h=kx(l,[o].map(Vx));s=c,a=h}else s=o(a,e);e+11&&void 0!==arguments[1]?arguments[1]:1;i===r.length?Object.keys(e).forEach((function(t){return e[t]=n(e[t])})):Object.values(e).forEach((function(e){return t(e,i+1)}))}(a);var s=a;return i&&(s=[],function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];n.length===r.length?s.push({keys:n,vals:e}):Object.entries(e).forEach((function(e){var i=Bx(e,2),r=i[0],a=i[1];return t(a,[].concat(Fx(n),[r]))}))}(a),e instanceof Array&&0===e.length&&1===s.length&&(s[0].keys=[])),s};function Wx(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function jx(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function qx(t,e){if(null==t)return{};var n,i,r=function(t,e){if(null==t)return{};var n,i,r={},a=Object.keys(t);for(i=0;i=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}function Xx(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=t&&("undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"]);if(null==n)return;var i,r,a=[],s=!0,o=!1;try{for(n=n.call(t);!(s=(i=n.next()).done)&&(a.push(i.value),!e||a.length!==e);s=!0);}catch(t){o=!0,r=t}finally{try{s||null==n.return||n.return()}finally{if(o)throw r}}return a}(t,e)||Zx(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Yx(t){return function(t){if(Array.isArray(t))return Jx(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||Zx(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Zx(t,e){if(t){if("string"==typeof t)return Jx(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Jx(t,e):void 0}}function Jx(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t}if(t=R(t,360),e=R(e,100),n=R(n,100),0===e)i=r=a=n;else{var o=n<.5?n*(1+e):n+e-n*e,l=2*n-o;i=s(l,o,t+1/3),r=s(l,o,t),a=s(l,o,t-1/3)}return{r:255*i,g:255*r,b:255*a}}(t.h,l,h),u=!0,d="hsl"),t.hasOwnProperty("a")&&(a=t.a));var p,f,m;return a=C(a),{ok:u,format:t.format||d,r:s(255,o(r.r,0)),g:s(255,o(r.g,0)),b:s(255,o(r.b,0)),a:a}}(t);this._originalInput=t,this._r=h.r,this._g=h.g,this._b=h.b,this._a=h.a,this._roundA=a(100*this._a)/100,this._format=l.format||h.format,this._gradientType=l.gradientType,this._r<1&&(this._r=a(this._r)),this._g<1&&(this._g=a(this._g)),this._b<1&&(this._b=a(this._b)),this._ok=h.ok,this._tc_id=r++}function h(t,e,n){t=R(t,255),e=R(e,255),n=R(n,255);var i,r,a=o(t,e,n),l=s(t,e,n),c=(a+l)/2;if(a==l)i=r=0;else{var h=a-l;switch(r=c>.5?h/(2-a-l):h/(a+l),a){case t:i=(e-n)/h+(e>1)+720)%360;--e;)i.h=(i.h+r)%360,a.push(c(i));return a}function T(t,e){e=e||6;for(var n=c(t).toHsv(),i=n.h,r=n.s,a=n.v,s=[],o=1/e;e--;)s.push(c({h:i,s:r,v:a})),a=(a+o)%1;return s}c.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},getLuminance:function(){var t,n,i,r=this.toRgb();return t=r.r/255,n=r.g/255,i=r.b/255,.2126*(t<=.03928?t/12.92:e.pow((t+.055)/1.055,2.4))+.7152*(n<=.03928?n/12.92:e.pow((n+.055)/1.055,2.4))+.0722*(i<=.03928?i/12.92:e.pow((i+.055)/1.055,2.4))},setAlpha:function(t){return this._a=C(t),this._roundA=a(100*this._a)/100,this},toHsv:function(){var t=u(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=u(this._r,this._g,this._b),e=a(360*t.h),n=a(100*t.s),i=a(100*t.v);return 1==this._a?"hsv("+e+", "+n+"%, "+i+"%)":"hsva("+e+", "+n+"%, "+i+"%, "+this._roundA+")"},toHsl:function(){var t=h(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=h(this._r,this._g,this._b),e=a(360*t.h),n=a(100*t.s),i=a(100*t.l);return 1==this._a?"hsl("+e+", "+n+"%, "+i+"%)":"hsla("+e+", "+n+"%, "+i+"%, "+this._roundA+")"},toHex:function(t){return d(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(t){return function(t,e,n,i,r){var s=[I(a(t).toString(16)),I(a(e).toString(16)),I(a(n).toString(16)),I(O(i))];if(r&&s[0].charAt(0)==s[0].charAt(1)&&s[1].charAt(0)==s[1].charAt(1)&&s[2].charAt(0)==s[2].charAt(1)&&s[3].charAt(0)==s[3].charAt(1))return s[0].charAt(0)+s[1].charAt(0)+s[2].charAt(0)+s[3].charAt(0);return s.join("")}(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return"#"+this.toHex8(t)},toRgb:function(){return{r:a(this._r),g:a(this._g),b:a(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+a(this._r)+", "+a(this._g)+", "+a(this._b)+")":"rgba("+a(this._r)+", "+a(this._g)+", "+a(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:a(100*R(this._r,255))+"%",g:a(100*R(this._g,255))+"%",b:a(100*R(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+a(100*R(this._r,255))+"%, "+a(100*R(this._g,255))+"%, "+a(100*R(this._b,255))+"%)":"rgba("+a(100*R(this._r,255))+"%, "+a(100*R(this._g,255))+"%, "+a(100*R(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(L[d(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e="#"+p(this._r,this._g,this._b,this._a),n=e,i=this._gradientType?"GradientType = 1, ":"";if(t){var r=c(t);n="#"+p(r._r,r._g,r._b,r._a)}return"progid:DXImageTransform.Microsoft.gradient("+i+"startColorstr="+e+",endColorstr="+n+")"},toString:function(t){var e=!!t;t=t||this._format;var n=!1,i=this._a<1&&this._a>=0;return e||!i||"hex"!==t&&"hex6"!==t&&"hex3"!==t&&"hex4"!==t&&"hex8"!==t&&"name"!==t?("rgb"===t&&(n=this.toRgbString()),"prgb"===t&&(n=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(n=this.toHexString()),"hex3"===t&&(n=this.toHexString(!0)),"hex4"===t&&(n=this.toHex8String(!0)),"hex8"===t&&(n=this.toHex8String()),"name"===t&&(n=this.toName()),"hsl"===t&&(n=this.toHslString()),"hsv"===t&&(n=this.toHsvString()),n||this.toHexString()):"name"===t&&0===this._a?this.toName():this.toRgbString()},clone:function(){return c(this.toString())},_applyModification:function(t,e){var n=t.apply(null,[this].concat([].slice.call(e)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(v,arguments)},brighten:function(){return this._applyModification(y,arguments)},darken:function(){return this._applyModification(x,arguments)},desaturate:function(){return this._applyModification(f,arguments)},saturate:function(){return this._applyModification(m,arguments)},greyscale:function(){return this._applyModification(g,arguments)},spin:function(){return this._applyModification(_,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(E,arguments)},complement:function(){return this._applyCombination(b,arguments)},monochromatic:function(){return this._applyCombination(T,arguments)},splitcomplement:function(){return this._applyCombination(S,arguments)},triad:function(){return this._applyCombination(w,arguments)},tetrad:function(){return this._applyCombination(M,arguments)}},c.fromRatio=function(t,e){if("object"==typeof t){var n={};for(var i in t)t.hasOwnProperty(i)&&(n[i]="a"===i?t[i]:N(t[i]));t=n}return c(t,e)},c.equals=function(t,e){return!(!t||!e)&&c(t).toRgbString()==c(e).toRgbString()},c.random=function(){return c.fromRatio({r:l(),g:l(),b:l()})},c.mix=function(t,e,n){n=0===n?0:n||50;var i=c(t).toRgb(),r=c(e).toRgb(),a=n/100;return c({r:(r.r-i.r)*a+i.r,g:(r.g-i.g)*a+i.g,b:(r.b-i.b)*a+i.b,a:(r.a-i.a)*a+i.a})}, +// =4.5;break;case"AAlarge":r=a>=3;break;case"AAAsmall":r=a>=7}return r},c.mostReadable=function(t,e,n){var i,r,a,s,o=null,l=0;r=(n=n||{}).includeFallbackColors,a=n.level,s=n.size;for(var h=0;hl&&(l=i,o=c(e[h]));return c.isReadable(t,o,{level:a,size:s})||!r?o:(n.includeFallbackColors=!1,c.mostReadable(t,["#fff","#000"],n))};var A=c.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},L=c.hexNames=function(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[t[n]]=n);return e}(A);function C(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function R(t,n){(function(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t)})(t)&&(t="100%");var i=function(t){return"string"==typeof t&&-1!=t.indexOf("%")}(t);return t=s(n,o(0,parseFloat(t))),i&&(t=parseInt(t*n,10)/100),e.abs(t-n)<1e-6?1:t%n/parseFloat(n)}function P(t){return s(1,o(0,t))}function D(t){return parseInt(t,16)}function I(t){return 1==t.length?"0"+t:""+t}function N(t){return t<=1&&(t=100*t+"%"),t}function O(t){return e.round(255*parseFloat(t)).toString(16)}function z(t){return D(t)/255}var k,B,F,U=(B="[\\s|\\(]+("+(k="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+k+")[,|\\s]+("+k+")\\s*\\)?",F="[\\s|\\(]+("+k+")[,|\\s]+("+k+")[,|\\s]+("+k+")[,|\\s]+("+k+")\\s*\\)?",{CSS_UNIT:new RegExp(k),rgb:new RegExp("rgb"+B),rgba:new RegExp("rgba"+F),hsl:new RegExp("hsl"+B),hsla:new RegExp("hsla"+F),hsv:new RegExp("hsv"+B),hsva:new RegExp("hsva"+F),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function H(t){return!!U.CSS_UNIT.exec(t)}t.exports?t.exports=c:window.tinycolor=c}(Math)}(n_);var i_=n_.exports;function r_(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function a_(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}function m_(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function g_(t,e){return!e||"object"!=typeof e&&"function"!=typeof e?m_(t):e}function v_(t){var e=d_();return function(){var n,i=h_(t);if(e){var r=h_(this).constructor;n=Reflect.construct(i,arguments,r)}else n=i.apply(this,arguments);return g_(this,n)}}function y_(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==n)return;var i,r,a=[],s=!0,o=!1;try{for(n=n.call(t);!(s=(i=n.next()).done)&&(a.push(i.value),!e||a.length!==e);s=!0);}catch(t){o=!0,r=t}finally{try{s||null==n.return||n.return()}finally{if(o)throw r}}return a}(t,e)||__(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function x_(t){return function(t){if(Array.isArray(t))return b_(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||__(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function __(t,e){if(t){if("string"==typeof t)return b_(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?b_(t,e):void 0}}function b_(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n2&&void 0!==arguments[2]?arguments[2]:{},i=n.objFilter,r=void 0===i?function(){return!0}:i,a=f_(n,E_);return Qx(t,e.children.filter(r),(function(t){return e.add(t)}),(function(t){e.remove(t),S_(t)}),a_({objBindAttr:"__threeObj"},a))}var A_=function(t){return isNaN(t)?parseInt(i_(t).toHex(),16):t},L_=function(t){return isNaN(t)?i_(t).getAlpha():1},C_=function t(){var e=new Dx,n=[],i=[],r=t_;function a(t){let a=e.get(t);if(void 0===a){if(r!==t_)return r;e.set(t,a=n.push(t)-1)}return i[a%i.length]}return a.domain=function(t){if(!arguments.length)return n.slice();n=[],e=new Dx;for(const i of t)e.has(i)||e.set(i,n.push(i)-1);return a},a.range=function(t){return arguments.length?(i=Array.from(t),a):i.slice()},a.unknown=function(t){return arguments.length?(r=t,a):r},a.copy=function(){return t(n,i).unknown(r)},Kx.apply(a,arguments),a}(e_);function R_(t,e,n){e&&"string"==typeof n&&t.filter((function(t){return!t[n]})).forEach((function(t){t[n]=C_(e(t))}))}var P_,D_,I_,N_,O_,z_,k_,B_,F_,U_,H_,V_,G_,W_,j_=window.THREE?window.THREE:{Group:hf,Mesh:ou,MeshLambertMaterial:dg,Color:Lh,BufferGeometry:Gh,BufferAttribute:Dh,Matrix4:kc,Vector3:sc,SphereBufferGeometry:cg,CylinderBufferGeometry:lm,TubeBufferGeometry:hg,ConeBufferGeometry:cm,Line:Qf,LineBasicMaterial:qf,QuadraticBezierCurve3:Tm,CubicBezierCurve3:Mm,Box3:cc},q_={graph:Sy,forcelayout:Ex},X_=(new j_.BufferGeometry).setAttribute?"setAttribute":"addAttribute",Y_=(new j_.BufferGeometry).applyMatrix4?"applyMatrix4":"applyMatrix";var Z_=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Object,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=function(e){c_(r,e);var i=v_(r);function r(){var e;o_(this,r);for(var a=arguments.length,s=new Array(a),o=0;o2?-60:-30),t<3&&i(e.graphData.nodes,"z"),t<2&&i(e.graphData.nodes,"y")}},dagMode:{onChange:function(t,e){!t&&"d3"===e.forceEngine&&(e.graphData.nodes||[]).forEach((function(t){return t.fx=t.fy=t.fz=void 0}))}},dagLevelDistance:{},dagNodeFilter:{default:function(t){return!0}},onDagError:{triggerUpdate:!1},nodeRelSize:{default:4},nodeId:{default:"id"},nodeVal:{default:"val"},nodeResolution:{default:8},nodeColor:{default:"color"},nodeAutoColorBy:{},nodeOpacity:{default:.75},nodeVisibility:{default:!0},nodeThreeObject:{},nodeThreeObjectExtend:{default:!1},linkSource:{default:"source"},linkTarget:{default:"target"},linkVisibility:{default:!0},linkColor:{default:"color"},linkAutoColorBy:{},linkOpacity:{default:.2},linkWidth:{},linkResolution:{default:6},linkCurvature:{default:0,triggerUpdate:!1},linkCurveRotation:{default:0,triggerUpdate:!1},linkMaterial:{},linkThreeObject:{},linkThreeObjectExtend:{default:!1},linkPositionUpdate:{triggerUpdate:!1},linkDirectionalArrowLength:{default:0},linkDirectionalArrowColor:{},linkDirectionalArrowRelPos:{default:.5,triggerUpdate:!1},linkDirectionalArrowResolution:{default:8},linkDirectionalParticles:{default:0},linkDirectionalParticleSpeed:{default:.01,triggerUpdate:!1},linkDirectionalParticleWidth:{default:.5},linkDirectionalParticleColor:{},linkDirectionalParticleResolution:{default:4},forceEngine:{default:"d3"},d3AlphaMin:{default:0},d3AlphaDecay:{default:.0228,triggerUpdate:!1,onChange:function(t,e){e.d3ForceLayout.alphaDecay(t)}},d3AlphaTarget:{default:0,triggerUpdate:!1,onChange:function(t,e){e.d3ForceLayout.alphaTarget(t)}},d3VelocityDecay:{default:.4,triggerUpdate:!1,onChange:function(t,e){e.d3ForceLayout.velocityDecay(t)}},ngraphPhysics:{default:{timeStep:20,gravity:-1.2,theta:.8,springLength:30,springCoefficient:8e-4,dragCoefficient:.02}},warmupTicks:{default:0,triggerUpdate:!1},cooldownTicks:{default:1/0,triggerUpdate:!1},cooldownTime:{default:15e3,triggerUpdate:!1},onLoading:{default:function(){},triggerUpdate:!1},onFinishLoading:{default:function(){},triggerUpdate:!1},onUpdate:{default:function(){},triggerUpdate:!1},onFinishUpdate:{default:function(){},triggerUpdate:!1},onEngineTick:{default:function(){},triggerUpdate:!1},onEngineStop:{default:function(){},triggerUpdate:!1}},methods:{refresh:function(t){return t._flushObjects=!0,t._rerender(),this},d3Force:function(t,e,n){return void 0===n?t.d3ForceLayout.force(e):(t.d3ForceLayout.force(e,n),this)},d3ForceLayout:function(t,e){return void 0===e?t.d3ForceLayout:(console.log("d3ForceLayout setter deactivated"),this)},d3ReheatSimulation:function(t){return t.d3ForceLayout.alpha(1),this.resetCountdown(),this},simulationEngineRunning:function(t){return t.engineRunning},resetCountdown:function(t){return t.cntTicks=0,t.startTickTime=new Date,t.engineRunning=!0,this},tickFrame:function(t){var e,n,i,r,a="ngraph"!==t.forceEngine;return t.engineRunning&&function(){++t.cntTicks>t.cooldownTicks||new Date-t.startTickTime>t.cooldownTime||a&&t.d3AlphaMin>0&&t.d3ForceLayout.alpha()0){var f=o.x-s.x,m=o.y-s.y||0,g=(new j_.Vector3).subVectors(u,h),v=g.clone().multiplyScalar(l).cross(0!==f||0!==m?new j_.Vector3(0,0,1):new j_.Vector3(0,1,0)).applyAxisAngle(g.normalize(),p).add((new j_.Vector3).addVectors(h,u).divideScalar(2));c=new j_.QuadraticBezierCurve3(h,v,u)}else{var y=70*l,x=-p,_=x+Math.PI/2;c=new j_.CubicBezierCurve3(h,new j_.Vector3(y*Math.cos(_),y*Math.sin(_),0).add(h),new j_.Vector3(y*Math.cos(x),y*Math.sin(x),0).add(h),u)}e.__curve=c}else e.__curve=null}}t.graphData.links.forEach((function(n){var i=n.__lineObj;if(i){var o=a?n:t.layout.getLinkPosition(t.layout.graph.getLink(n.source,n.target).id),l=o[a?"source":"from"],c=o[a?"target":"to"];if(l&&c&&l.hasOwnProperty("x")&&c.hasOwnProperty("x")){s(n);var h=r(n);if(!t.linkPositionUpdate||!t.linkPositionUpdate(h?i.children[1]:i,{start:{x:l.x,y:l.y,z:l.z},end:{x:c.x,y:c.y,z:c.z}},n)||h){var u=30,d=n.__curve,p=i.children.length?i.children[0]:i;if("Line"===p.type){if(d)p.geometry.setFromPoints(d.getPoints(u));else{var f=p.geometry.getAttribute("position");f&&f.array&&6===f.array.length||p.geometry[X_]("position",f=new j_.BufferAttribute(new Float32Array(6),3)),f.array[0]=l.x,f.array[1]=l.y||0,f.array[2]=l.z||0,f.array[3]=c.x,f.array[4]=c.y||0,f.array[5]=c.z||0,f.needsUpdate=!0}p.geometry.computeBoundingSphere()}else if("Mesh"===p.type)if(d){p.geometry.type.match(/^Tube(Buffer)?Geometry$/)||(p.position.set(0,0,0),p.rotation.set(0,0,0),p.scale.set(1,1,1));var m=Math.ceil(10*e(n))/10/2,g=new j_.TubeBufferGeometry(d,u,m,t.linkResolution,!1);p.geometry.dispose(),p.geometry=g}else{if(!p.geometry.type.match(/^Cylinder(Buffer)?Geometry$/)){var v=Math.ceil(10*e(n))/10/2,y=new j_.CylinderBufferGeometry(v,v,1,t.linkResolution,1,!1);y[Y_]((new j_.Matrix4).makeTranslation(0,.5,0)),y[Y_]((new j_.Matrix4).makeRotationX(Math.PI/2)),p.geometry.dispose(),p.geometry=y}var x=new j_.Vector3(l.x,l.y||0,l.z||0),_=new j_.Vector3(c.x,c.y||0,c.z||0),b=x.distanceTo(_);p.position.x=x.x,p.position.y=x.y,p.position.z=x.z,p.scale.z=b,p.parent.localToWorld(_),p.lookAt(_)}}}}}))}(),e=Px(t.linkDirectionalArrowRelPos),n=Px(t.linkDirectionalArrowLength),i=Px(t.nodeVal),t.graphData.links.forEach((function(r){var s=r.__arrowObj;if(s){var o=a?r:t.layout.getLinkPosition(t.layout.graph.getLink(r.source,r.target).id),l=o[a?"source":"from"],c=o[a?"target":"to"];if(l&&c&&l.hasOwnProperty("x")&&c.hasOwnProperty("x")){var h=Math.sqrt(Math.max(0,i(l)||1))*t.nodeRelSize,u=Math.sqrt(Math.max(0,i(c)||1))*t.nodeRelSize,d=n(r),p=e(r),f=r.__curve?function(t){return r.__curve.getPoint(t)}:function(t){var e=function(t,e,n,i){return e[t]+(n[t]-e[t])*i||0};return{x:e("x",l,c,t),y:e("y",l,c,t),z:e("z",l,c,t)}},m=r.__curve?r.__curve.getLength():Math.sqrt(["x","y","z"].map((function(t){return Math.pow((c[t]||0)-(l[t]||0),2)})).reduce((function(t,e){return t+e}),0)),g=h+d+(m-h-u-d)*p,v=f(g/m),y=f((g-d)/m);["x","y","z"].forEach((function(t){return s.position[t]=y[t]}));var x=p_(j_.Vector3,x_(["x","y","z"].map((function(t){return v[t]}))));s.parent.localToWorld(x),s.lookAt(x)}}})),r=Px(t.linkDirectionalParticleSpeed),t.graphData.links.forEach((function(e){var n=e.__photonsObj&&e.__photonsObj.children,i=e.__singleHopPhotonsObj&&e.__singleHopPhotonsObj.children;if(i&&i.length||n&&n.length){var s=a?e:t.layout.getLinkPosition(t.layout.graph.getLink(e.source,e.target).id),o=s[a?"source":"from"],l=s[a?"target":"to"];if(o&&l&&o.hasOwnProperty("x")&&l.hasOwnProperty("x")){var c=r(e),h=e.__curve?function(t){return e.__curve.getPoint(t)}:function(t){var e=function(t,e,n,i){return e[t]+(n[t]-e[t])*i||0};return{x:e("x",o,l,t),y:e("y",o,l,t),z:e("z",o,l,t)}};[].concat(x_(n||[]),x_(i||[])).forEach((function(t,e){var i="singleHopPhotons"===t.parent.__linkThreeObjType;if(t.hasOwnProperty("__progressRatio")||(t.__progressRatio=i?0:e/n.length),t.__progressRatio+=c,t.__progressRatio>=1){if(i)return t.parent.remove(t),void S_(t);t.__progressRatio=t.__progressRatio%1}var r=t.__progressRatio,a=h(r);["x","y","z"].forEach((function(e){return t.position[e]=a[e]}))}))}}})),this},emitParticle:function(t,e){if(e){if(!e.__singleHopPhotonsObj){var n=new j_.Group;n.__linkThreeObjType="singleHopPhotons",e.__singleHopPhotonsObj=n,t.graphScene.add(n)}var i=Px(t.linkDirectionalParticleWidth),r=Math.ceil(10*i(e))/10/2,a=t.linkDirectionalParticleResolution,s=new j_.SphereBufferGeometry(r,a,a),o=Px(t.linkColor),l=Px(t.linkDirectionalParticleColor)(e)||o(e)||"#f0f0f0",c=new j_.Color(A_(l)),h=3*t.linkOpacity,u=new j_.MeshLambertMaterial({color:c,transparent:!0,opacity:h});e.__singleHopPhotonsObj.add(new j_.Mesh(s,u))}return this},getGraphBbox:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){return!0};if(!t.initialised)return null;var n=function t(n){var i=[];if(n.geometry){n.geometry.computeBoundingBox();var r=new j_.Box3;r.copy(n.geometry.boundingBox).applyMatrix4(n.matrixWorld),i.push(r)}return i.concat.apply(i,x_((n.children||[]).filter((function(t){return!t.hasOwnProperty("__graphObjType")||"node"===t.__graphObjType&&e(t.__data)})).map(t)))}(t.graphScene);return n.length?Object.assign.apply(Object,x_(["x","y","z"].map((function(t){return l_({},t,[zx(n,(function(e){return e.min[t]})),Ox(n,(function(e){return e.max[t]}))])})))):null}},stateInit:function(){return{d3ForceLayout:by().force("link",jv()).force("charge",wy()).force("center",gv()).force("dagRadial",null).stop(),engineRunning:!1}},init:function(t,e){e.graphScene=t},update:function(t,e){var n=function(t){return t.some((function(t){return e.hasOwnProperty(t)}))};if(t.engineRunning=!1,t.onUpdate(),null!==t.nodeAutoColorBy&&n(["nodeAutoColorBy","graphData","nodeColor"])&&R_(t.graphData.nodes,Px(t.nodeAutoColorBy),t.nodeColor),null!==t.linkAutoColorBy&&n(["linkAutoColorBy","graphData","linkColor"])&&R_(t.graphData.links,Px(t.linkAutoColorBy),t.linkColor),t._flushObjects||n(["graphData","nodeThreeObject","nodeThreeObjectExtend","nodeVal","nodeColor","nodeVisibility","nodeRelSize","nodeResolution","nodeOpacity"])){var i=Px(t.nodeThreeObject),r=Px(t.nodeThreeObjectExtend),a=Px(t.nodeVal),s=Px(t.nodeColor),o=Px(t.nodeVisibility),l={},c={};T_(t.graphData.nodes.filter(o),t.graphScene,{purge:t._flushObjects||n(["nodeThreeObject","nodeThreeObjectExtend"]),objFilter:function(t){return"node"===t.__graphObjType},createObj:function(e){var n,a=i(e),s=r(e);return a&&t.nodeThreeObject===a&&(a=a.clone()),a&&!s?n=a:((n=new j_.Mesh).__graphDefaultObj=!0,a&&s&&n.add(a)),n.__graphObjType="node",n},updateObj:function(e,n){if(e.__graphDefaultObj){var i=a(n)||1,r=Math.cbrt(i)*t.nodeRelSize,o=t.nodeResolution;e.geometry.type.match(/^Sphere(Buffer)?Geometry$/)&&e.geometry.parameters.radius===r&&e.geometry.parameters.widthSegments===o||(l.hasOwnProperty(i)||(l[i]=new j_.SphereBufferGeometry(r,o,o)),e.geometry.dispose(),e.geometry=l[i]);var h=s(n),u=new j_.Color(A_(h||"#ffffaa")),d=t.nodeOpacity*L_(h);"MeshLambertMaterial"===e.material.type&&e.material.color.equals(u)&&e.material.opacity===d||(c.hasOwnProperty(h)||(c[h]=new j_.MeshLambertMaterial({color:u,transparent:!0,opacity:d})),e.material.dispose(),e.material=c[h])}}})}if(t._flushObjects||n(["graphData","linkThreeObject","linkThreeObjectExtend","linkMaterial","linkColor","linkWidth","linkVisibility","linkResolution","linkOpacity","linkDirectionalArrowLength","linkDirectionalArrowColor","linkDirectionalArrowResolution","linkDirectionalParticles","linkDirectionalParticleWidth","linkDirectionalParticleColor","linkDirectionalParticleResolution"])){var h=Px(t.linkThreeObject),u=Px(t.linkThreeObjectExtend),d=Px(t.linkMaterial),p=Px(t.linkVisibility),f=Px(t.linkColor),m=Px(t.linkWidth),g={},v={},y={},x=t.graphData.links.filter(p);if(T_(x,t.graphScene,{objBindAttr:"__lineObj",purge:t._flushObjects||n(["linkThreeObject","linkThreeObjectExtend","linkWidth"]),objFilter:function(t){return"link"===t.__graphObjType},createObj:function(e){var n,i,r=h(e),a=u(e);if(r&&t.linkThreeObject===r&&(r=r.clone()),!r||a)if(m(e))n=new j_.Mesh;else{var s=new j_.BufferGeometry;s[X_]("position",new j_.BufferAttribute(new Float32Array(6),3)),n=new j_.Line(s)}return r?a?((i=new j_.Group).__graphDefaultObj=!0,i.add(n),i.add(r)):i=r:(i=n).__graphDefaultObj=!0,i.renderOrder=10,i.__graphObjType="link",i},updateObj:function(e,n){if(e.__graphDefaultObj){var i=e.children.length?e.children[0]:e,r=Math.ceil(10*m(n))/10,a=!!r;if(a){var s=r/2,o=t.linkResolution;if(!i.geometry.type.match(/^Cylinder(Buffer)?Geometry$/)||i.geometry.parameters.radiusTop!==s||i.geometry.parameters.radialSegments!==o){if(!g.hasOwnProperty(r)){var l=new j_.CylinderBufferGeometry(s,s,1,o,1,!1);l[Y_]((new j_.Matrix4).makeTranslation(0,.5,0)),l[Y_]((new j_.Matrix4).makeRotationX(Math.PI/2)),g[r]=l}i.geometry.dispose(),i.geometry=g[r]}}var c=d(n);if(c)i.material=c;else{var h=f(n),u=new j_.Color(A_(h||"#f0f0f0")),p=t.linkOpacity*L_(h),x=a?"MeshLambertMaterial":"LineBasicMaterial";if(i.material.type!==x||!i.material.color.equals(u)||i.material.opacity!==p){var _=a?v:y;_.hasOwnProperty(h)||(_[h]=new j_[x]({color:u,transparent:p<1,opacity:p,depthWrite:p>=1})),i.material.dispose(),i.material=_[h]}}}}}),t.linkDirectionalArrowLength||e.hasOwnProperty("linkDirectionalArrowLength")){var _=Px(t.linkDirectionalArrowLength),b=Px(t.linkDirectionalArrowColor);T_(x.filter(_),t.graphScene,{objBindAttr:"__arrowObj",objFilter:function(t){return"arrow"===t.__linkThreeObjType},createObj:function(){var t=new j_.Mesh(void 0,new j_.MeshLambertMaterial({transparent:!0}));return t.__linkThreeObjType="arrow",t},updateObj:function(e,n){var i=_(n),r=t.linkDirectionalArrowResolution;if(!e.geometry.type.match(/^Cone(Buffer)?Geometry$/)||e.geometry.parameters.height!==i||e.geometry.parameters.radialSegments!==r){var a=new j_.ConeBufferGeometry(.25*i,i,r);a.translate(0,i/2,0),a.rotateX(Math.PI/2),e.geometry.dispose(),e.geometry=a}e.material.color=new j_.Color(b(n)||f(n)||"#f0f0f0"),e.material.opacity=3*t.linkOpacity}})}if(t.linkDirectionalParticles||e.hasOwnProperty("linkDirectionalParticles")){var w=Px(t.linkDirectionalParticles),M=Px(t.linkDirectionalParticleWidth),S=Px(t.linkDirectionalParticleColor),E={},T={};T_(x.filter(w),t.graphScene,{objBindAttr:"__photonsObj",objFilter:function(t){return"photons"===t.__linkThreeObjType},createObj:function(){var t=new j_.Group;return t.__linkThreeObjType="photons",t},updateObj:function(e,n){var i,r=Math.round(Math.abs(w(n))),a=!!e.children.length&&e.children[0],s=Math.ceil(10*M(n))/10/2,o=t.linkDirectionalParticleResolution;a&&a.geometry.parameters.radius===s&&a.geometry.parameters.widthSegments===o?i=a.geometry:(T.hasOwnProperty(s)||(T[s]=new j_.SphereBufferGeometry(s,o,o)),i=T[s],a&&a.geometry.dispose());var l,c=S(n)||f(n)||"#f0f0f0",h=new j_.Color(A_(c)),u=3*t.linkOpacity;a&&a.material.color.equals(h)&&a.material.opacity===u?l=a.material:(E.hasOwnProperty(c)||(E[c]=new j_.MeshLambertMaterial({color:h,transparent:!0,opacity:u})),l=E[c],a&&a.material.dispose()),T_(x_(new Array(r)).map((function(t,e){return{idx:e}})),e,{idAccessor:function(t){return t.idx},createObj:function(){return new j_.Mesh(i,l)},updateObj:function(t){t.geometry=i,t.material=l}})}})}}if(t._flushObjects=!1,n(["graphData","nodeId","linkSource","linkTarget","numDimensions","forceEngine","dagMode","dagNodeFilter","dagLevelDistance"])){t.engineRunning=!1,t.graphData.links.forEach((function(e){e.source=e[t.linkSource],e.target=e[t.linkTarget]}));var A,L="ngraph"!==t.forceEngine;if(L){(A=t.d3ForceLayout).stop().alpha(1).numDimensions(t.numDimensions).nodes(t.graphData.nodes);var C=t.d3ForceLayout.force("link");C&&C.id((function(e){return e[t.nodeId]})).links(t.graphData.links);var R=t.dagMode&&function(t,e){var n=t.nodes,i=t.links,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=r.nodeFilter,s=void 0===a?function(){return!0}:a,o=r.onLoopError,l=void 0===o?function(t){throw"Invalid DAG structure! Found cycle in node path: ".concat(t.join(" -> "),".")}:o,c={};n.forEach((function(t){return c[e(t)]={data:t,out:[],depth:-1,skip:!s(t)}})),i.forEach((function(t){var n=t.source,i=t.target,r=l(n),a=l(i);if(!c.hasOwnProperty(r))throw"Missing source node with id: ".concat(r);if(!c.hasOwnProperty(a))throw"Missing target node with id: ".concat(a);var s=c[r],o=c[a];function l(t){return"object"===s_(t)?e(t):t}s.out.push(o)}));var h=[];return u(Object.values(c)),Object.assign.apply(Object,[{}].concat(x_(Object.entries(c).filter((function(t){return!y_(t,2)[1].skip})).map((function(t){var e=y_(t,2);return l_({},e[0],e[1].depth)})))));function u(t){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=0,a=t.length;rs.depth&&(s.depth=i,u(s.out,[].concat(x_(n),[s]),i+(s.skip?0:1)))}}}(t.graphData,(function(e){return e[t.nodeId]}),{nodeFilter:t.dagNodeFilter,onLoopError:t.onDagError||void 0}),P=Math.max.apply(Math,x_(Object.values(R||[]))),D=t.dagLevelDistance||t.graphData.nodes.length/(P||1)*2*(-1!==["radialin","radialout"].indexOf(t.dagMode)?.7:1);if(t.dagMode){var I=function(e,n){return function(i){return e?(R[i[t.nodeId]]-P/2)*D*(n?-1:1):void 0}},N=I(-1!==["lr","rl"].indexOf(t.dagMode),"rl"===t.dagMode),O=I(-1!==["td","bu"].indexOf(t.dagMode),"td"===t.dagMode),z=I(-1!==["zin","zout"].indexOf(t.dagMode),"zout"===t.dagMode);t.graphData.nodes.filter(t.dagNodeFilter).forEach((function(t){t.fx=N(t),t.fy=O(t),t.fz=z(t)}))}t.d3ForceLayout.force("dagRadial",-1!==["radialin","radialout"].indexOf(t.dagMode)?function(t,e,n,i){var r,a,s,o,l=Hv(.1);function c(t){for(var l=0,c=r.length;l1&&(h.vy+=d*m),a>2&&(h.vz+=p*m)}}function h(){if(r){var e,n=r.length;for(s=new Array(n),o=new Array(n),e=0;e[1,2,3].includes(t)))||2,h()},c.strength=function(t){return arguments.length?(l="function"==typeof t?t:Hv(+t),h(),c):l},c.radius=function(e){return arguments.length?(t="function"==typeof e?e:Hv(+e),h(),c):t},c.x=function(t){return arguments.length?(e=+t,c):e},c.y=function(t){return arguments.length?(n=+t,c):n},c.z=function(t){return arguments.length?(i=+t,c):i},c}((function(e){var n=R[e[t.nodeId]]||-1;return("radialin"===t.dagMode?P-n:n)*D})).strength((function(e){return t.dagNodeFilter(e)?1:0})):null)}else{var k=q_.graph();t.graphData.nodes.forEach((function(e){k.addNode(e[t.nodeId])})),t.graphData.links.forEach((function(t){k.addLink(t.source,t.target)})),(A=q_.forcelayout(k,a_({dimensions:t.numDimensions},t.ngraphPhysics))).graph=k}for(var B=0;B0&&t.d3ForceLayout.alpha()0&&void 0!==arguments[0]?arguments[0]:{},e=Object.assign({},I_ instanceof Function?I_(t):I_,{initialised:!1}),n={};function i(e){return r(e,t),a(),i}var r=function(t,n){H_.call(i,t,e,n),e.initialised=!0},a=Ax((function(){e.initialised&&(G_.call(i,e,n),n={})}),1);return W_.forEach((function(t){i[t.name]=function(t){var r=t.name,s=t.triggerUpdate,o=void 0!==s&&s,l=t.onChange,c=void 0===l?function(t,e){}:l,h=t.defaultVal,u=void 0===h?null:h;return function(t){var s=e[r];if(!arguments.length)return s;var l=void 0===t?u:t;return e[r]=l,c.call(i,l,e,s),!n.hasOwnProperty(r)&&(n[r]=s),o&&a(),i}}(t)})),Object.keys(k_).forEach((function(t){i[t]=function(){for(var n,r=arguments.length,a=new Array(r),s=0;s0&&(n.object.isPerspectiveCamera?y.multiplyScalar(t):n.object.isOrthographicCamera?(n.object.zoom/=t,n.object.updateProjectionMatrix()):console.warn("THREE.TrackballControls: Unsupported camera type")),n.staticMoving?w.copy(M):w.y+=(M.y-w.y)*this.dynamicDampingFactor)},this.panCamera=function(){const t=new Y,e=new rt,i=new rt;return function(){if(t.copy(E).sub(S),t.lengthSq()){if(n.object.isOrthographicCamera){const e=(n.object.right-n.object.left)/n.object.zoom/n.domElement.clientWidth,i=(n.object.top-n.object.bottom)/n.object.zoom/n.domElement.clientWidth;t.x*=e,t.y*=i}t.multiplyScalar(y.length()*n.panSpeed),i.copy(y).cross(n.object.up).setLength(t.x),i.add(e.copy(n.object.up).setLength(t.y)),n.object.position.add(i),n.target.add(i),n.staticMoving?S.copy(E):S.add(t.subVectors(E,S).multiplyScalar(n.dynamicDampingFactor))}}}(),this.checkDistances=function(){n.noZoom&&n.noPan||(y.lengthSq()>n.maxDistance*n.maxDistance&&(n.object.position.addVectors(n.target,y.setLength(n.maxDistance)),w.copy(M)),y.lengthSq()h&&(n.dispatchEvent(J_),u.copy(n.object.position))):n.object.isOrthographicCamera?(n.object.lookAt(n.target),(u.distanceToSquared(n.object.position)>h||d!==n.object.zoom)&&(n.dispatchEvent(J_),u.copy(n.object.position),d=n.object.zoom)):console.warn("THREE.TrackballControls: Unsupported camera type")},this.reset=function(){p=i,f=i,n.target.copy(n.target0),n.object.position.copy(n.position0),n.object.up.copy(n.up0),n.object.zoom=n.zoom0,n.object.updateProjectionMatrix(),y.subVectors(n.object.position,n.target),n.object.lookAt(n.target),n.dispatchEvent(J_),u.copy(n.object.position),d=n.object.zoom},this.dispose=function(){n.domElement.removeEventListener("contextmenu",k),n.domElement.removeEventListener("pointerdown",L),n.domElement.removeEventListener("wheel",I),n.domElement.removeEventListener("touchstart",N),n.domElement.removeEventListener("touchend",z),n.domElement.removeEventListener("touchmove",O),n.domElement.ownerDocument.removeEventListener("pointermove",C),n.domElement.ownerDocument.removeEventListener("pointerup",R),window.removeEventListener("keydown",P),window.removeEventListener("keyup",D)},this.domElement.addEventListener("contextmenu",k),this.domElement.addEventListener("pointerdown",L),this.domElement.addEventListener("wheel",I,{passive:!1}),this.domElement.addEventListener("touchstart",N,{passive:!1}),this.domElement.addEventListener("touchend",z),this.domElement.addEventListener("touchmove",O,{passive:!1}),this.domElement.ownerDocument.addEventListener("pointermove",C),this.domElement.ownerDocument.addEventListener("pointerup",R),window.addEventListener("keydown",P),window.addEventListener("keyup",D),this.handleResize(),this.update()}}const tb={type:"change"},eb={type:"start"},nb={type:"end"};class ib extends F{constructor(t,e){super(),void 0===e&&console.warn('THREE.OrbitControls: The second parameter "domElement" is now mandatory.'),e===document&&console.error('THREE.OrbitControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.'),this.object=t,this.domElement=e,this.enabled=!0,this.target=new rt,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:a.ROTATE,MIDDLE:a.DOLLY,RIGHT:a.PAN},this.touches={ONE:s,TWO:l},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this.getPolarAngle=function(){return u.phi},this.getAzimuthalAngle=function(){return u.theta},this.listenToKeyEvents=function(t){t.addEventListener("keydown",j),this._domElementKeyEvents=t},this.saveState=function(){n.target0.copy(n.target),n.position0.copy(n.object.position),n.zoom0=n.object.zoom},this.reset=function(){n.target.copy(n.target0),n.object.position.copy(n.position0),n.object.zoom=n.zoom0,n.object.updateProjectionMatrix(),n.dispatchEvent(tb),n.update(),r=i.NONE},this.update=function(){const e=new rt,a=(new it).setFromUnitVectors(t.up,new rt(0,1,0)),s=a.clone().invert(),o=new rt,l=new it,c=2*Math.PI;return function(){const t=n.object.position;e.copy(t).sub(n.target),e.applyQuaternion(a),u.setFromVector3(e),n.autoRotate&&r===i.NONE&&T(2*Math.PI/60/60*n.autoRotateSpeed),n.enableDamping?(u.theta+=d.theta*n.dampingFactor,u.phi+=d.phi*n.dampingFactor):(u.theta+=d.theta,u.phi+=d.phi);let g=n.minAzimuthAngle,v=n.maxAzimuthAngle;return isFinite(g)&&isFinite(v)&&(g<-Math.PI?g+=c:g>Math.PI&&(g-=c),v<-Math.PI?v+=c:v>Math.PI&&(v-=c),u.theta=g<=v?Math.max(g,Math.min(v,u.theta)):u.theta>(g+v)/2?Math.max(g,u.theta):Math.min(v,u.theta)),u.phi=Math.max(n.minPolarAngle,Math.min(n.maxPolarAngle,u.phi)),u.makeSafe(),u.radius*=p,u.radius=Math.max(n.minDistance,Math.min(n.maxDistance,u.radius)),!0===n.enableDamping?n.target.addScaledVector(f,n.dampingFactor):n.target.add(f),e.setFromSpherical(u),e.applyQuaternion(s),t.copy(n.target).add(e),n.object.lookAt(n.target),!0===n.enableDamping?(d.theta*=1-n.dampingFactor,d.phi*=1-n.dampingFactor,f.multiplyScalar(1-n.dampingFactor)):(d.set(0,0,0),f.set(0,0,0)),p=1,!!(m||o.distanceToSquared(n.object.position)>h||8*(1-l.dot(n.object.quaternion))>h)&&(n.dispatchEvent(tb),o.copy(n.object.position),l.copy(n.object.quaternion),m=!1,!0)}}(),this.dispose=function(){n.domElement.removeEventListener("contextmenu",J),n.domElement.removeEventListener("pointerdown",H),n.domElement.removeEventListener("wheel",W),n.domElement.removeEventListener("touchstart",q),n.domElement.removeEventListener("touchend",Z),n.domElement.removeEventListener("touchmove",X),n.domElement.ownerDocument.removeEventListener("pointermove",V),n.domElement.ownerDocument.removeEventListener("pointerup",G),null!==n._domElementKeyEvents&&n._domElementKeyEvents.removeEventListener("keydown",j)};const n=this,i={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6};let r=i.NONE;const h=1e-6,u=new Uo,d=new Uo;let p=1;const f=new rt;let m=!1;const g=new Y,v=new Y,y=new Y,x=new Y,_=new Y,b=new Y,w=new Y,M=new Y,S=new Y;function E(){return Math.pow(.95,n.zoomSpeed)}function T(t){d.theta-=t}function A(t){d.phi-=t}const L=function(){const t=new rt;return function(e,n){t.setFromMatrixColumn(n,0),t.multiplyScalar(-e),f.add(t)}}(),C=function(){const t=new rt;return function(e,i){!0===n.screenSpacePanning?t.setFromMatrixColumn(i,1):(t.setFromMatrixColumn(i,0),t.crossVectors(n.object.up,t)),t.multiplyScalar(e),f.add(t)}}(),R=function(){const t=new rt;return function(e,i){const r=n.domElement;if(n.object.isPerspectiveCamera){const a=n.object.position;t.copy(a).sub(n.target);let s=t.length();s*=Math.tan(n.object.fov/2*Math.PI/180),L(2*e*s/r.clientHeight,n.object.matrix),C(2*i*s/r.clientHeight,n.object.matrix)}else n.object.isOrthographicCamera?(L(e*(n.object.right-n.object.left)/n.object.zoom/r.clientWidth,n.object.matrix),C(i*(n.object.top-n.object.bottom)/n.object.zoom/r.clientHeight,n.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),n.enablePan=!1)}}();function P(t){n.object.isPerspectiveCamera?p/=t:n.object.isOrthographicCamera?(n.object.zoom=Math.max(n.minZoom,Math.min(n.maxZoom,n.object.zoom*t)),n.object.updateProjectionMatrix(),m=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),n.enableZoom=!1)}function D(t){n.object.isPerspectiveCamera?p*=t:n.object.isOrthographicCamera?(n.object.zoom=Math.max(n.minZoom,Math.min(n.maxZoom,n.object.zoom/t)),n.object.updateProjectionMatrix(),m=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),n.enableZoom=!1)}function I(t){g.set(t.clientX,t.clientY)}function N(t){x.set(t.clientX,t.clientY)}function O(t){if(1==t.touches.length)g.set(t.touches[0].pageX,t.touches[0].pageY);else{const e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);g.set(e,n)}}function z(t){if(1==t.touches.length)x.set(t.touches[0].pageX,t.touches[0].pageY);else{const e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);x.set(e,n)}}function k(t){const e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);w.set(0,i)}function B(t){if(1==t.touches.length)v.set(t.touches[0].pageX,t.touches[0].pageY);else{const e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);v.set(e,n)}y.subVectors(v,g).multiplyScalar(n.rotateSpeed);const e=n.domElement;T(2*Math.PI*y.x/e.clientHeight),A(2*Math.PI*y.y/e.clientHeight),g.copy(v)}function F(t){if(1==t.touches.length)_.set(t.touches[0].pageX,t.touches[0].pageY);else{const e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);_.set(e,n)}b.subVectors(_,x).multiplyScalar(n.panSpeed),R(b.x,b.y),x.copy(_)}function U(t){const e=t.touches[0].pageX-t.touches[1].pageX,i=t.touches[0].pageY-t.touches[1].pageY,r=Math.sqrt(e*e+i*i);M.set(0,r),S.set(0,Math.pow(M.y/w.y,n.zoomSpeed)),P(S.y),w.copy(M)}function H(t){if(!1!==n.enabled)switch(t.pointerType){case"mouse":case"pen":!function(t){let e;switch(t.preventDefault(),n.domElement.focus?n.domElement.focus():window.focus(),t.button){case 0:e=n.mouseButtons.LEFT;break;case 1:e=n.mouseButtons.MIDDLE;break;case 2:e=n.mouseButtons.RIGHT;break;default:e=-1}switch(e){case a.DOLLY:if(!1===n.enableZoom)return;!function(t){w.set(t.clientX,t.clientY)}(t),r=i.DOLLY;break;case a.ROTATE:if(t.ctrlKey||t.metaKey||t.shiftKey){if(!1===n.enablePan)return;N(t),r=i.PAN}else{if(!1===n.enableRotate)return;I(t),r=i.ROTATE}break;case a.PAN:if(t.ctrlKey||t.metaKey||t.shiftKey){if(!1===n.enableRotate)return;I(t),r=i.ROTATE}else{if(!1===n.enablePan)return;N(t),r=i.PAN}break;default:r=i.NONE}r!==i.NONE&&(n.domElement.ownerDocument.addEventListener("pointermove",V),n.domElement.ownerDocument.addEventListener("pointerup",G),n.dispatchEvent(eb))}(t)}}function V(t){if(!1!==n.enabled)switch(t.pointerType){case"mouse":case"pen":!function(t){if(!1===n.enabled)return;switch(t.preventDefault(),r){case i.ROTATE:if(!1===n.enableRotate)return;!function(t){v.set(t.clientX,t.clientY),y.subVectors(v,g).multiplyScalar(n.rotateSpeed);const e=n.domElement;T(2*Math.PI*y.x/e.clientHeight),A(2*Math.PI*y.y/e.clientHeight),g.copy(v),n.update()}(t);break;case i.DOLLY:if(!1===n.enableZoom)return;!function(t){M.set(t.clientX,t.clientY),S.subVectors(M,w),S.y>0?P(E()):S.y<0&&D(E()),w.copy(M),n.update()}(t);break;case i.PAN:if(!1===n.enablePan)return;!function(t){_.set(t.clientX,t.clientY),b.subVectors(_,x).multiplyScalar(n.panSpeed),R(b.x,b.y),x.copy(_),n.update()}(t)}}(t)}}function G(t){switch(t.pointerType){case"mouse":case"pen":!function(t){if(n.domElement.ownerDocument.removeEventListener("pointermove",V),n.domElement.ownerDocument.removeEventListener("pointerup",G),!1===n.enabled)return;n.dispatchEvent(nb),r=i.NONE}()}}function W(t){!1===n.enabled||!1===n.enableZoom||r!==i.NONE&&r!==i.ROTATE||(t.preventDefault(),n.dispatchEvent(eb),function(t){t.deltaY<0?D(E()):t.deltaY>0&&P(E()),n.update()}(t),n.dispatchEvent(nb))}function j(t){!1!==n.enabled&&!1!==n.enablePan&&function(t){let e=!1;switch(t.code){case n.keys.UP:R(0,n.keyPanSpeed),e=!0;break;case n.keys.BOTTOM:R(0,-n.keyPanSpeed),e=!0;break;case n.keys.LEFT:R(n.keyPanSpeed,0),e=!0;break;case n.keys.RIGHT:R(-n.keyPanSpeed,0),e=!0}e&&(t.preventDefault(),n.update())}(t)}function q(t){if(!1!==n.enabled){switch(t.preventDefault(),t.touches.length){case 1:switch(n.touches.ONE){case s:if(!1===n.enableRotate)return;O(t),r=i.TOUCH_ROTATE;break;case o:if(!1===n.enablePan)return;z(t),r=i.TOUCH_PAN;break;default:r=i.NONE}break;case 2:switch(n.touches.TWO){case l:if(!1===n.enableZoom&&!1===n.enablePan)return;!function(t){n.enableZoom&&k(t),n.enablePan&&z(t)}(t),r=i.TOUCH_DOLLY_PAN;break;case c:if(!1===n.enableZoom&&!1===n.enableRotate)return;!function(t){n.enableZoom&&k(t),n.enableRotate&&O(t)}(t),r=i.TOUCH_DOLLY_ROTATE;break;default:r=i.NONE}break;default:r=i.NONE}r!==i.NONE&&n.dispatchEvent(eb)}}function X(t){if(!1!==n.enabled)switch(t.preventDefault(),r){case i.TOUCH_ROTATE:if(!1===n.enableRotate)return;B(t),n.update();break;case i.TOUCH_PAN:if(!1===n.enablePan)return;F(t),n.update();break;case i.TOUCH_DOLLY_PAN:if(!1===n.enableZoom&&!1===n.enablePan)return;!function(t){n.enableZoom&&U(t),n.enablePan&&F(t)}(t),n.update();break;case i.TOUCH_DOLLY_ROTATE:if(!1===n.enableZoom&&!1===n.enableRotate)return;!function(t){n.enableZoom&&U(t),n.enableRotate&&B(t)}(t),n.update();break;default:r=i.NONE}}function Z(t){!1!==n.enabled&&(n.dispatchEvent(nb),r=i.NONE)}function J(t){!1!==n.enabled&&t.preventDefault()}n.domElement.addEventListener("contextmenu",J),n.domElement.addEventListener("pointerdown",H),n.domElement.addEventListener("wheel",W,{passive:!1}),n.domElement.addEventListener("touchstart",q,{passive:!1}),n.domElement.addEventListener("touchend",Z),n.domElement.addEventListener("touchmove",X,{passive:!1}),this.update()}}const rb={type:"change"};class ab extends F{constructor(t,e){super(),void 0===e&&(console.warn('THREE.FlyControls: The second parameter "domElement" is now mandatory.'),e=document),this.object=t,this.domElement=e,this.movementSpeed=1,this.rollSpeed=.005,this.dragToLook=!1,this.autoForward=!1;const n=this,i=1e-6,r=new it,a=new rt;this.tmpQuaternion=new it,this.mouseStatus=0,this.moveState={up:0,down:0,left:0,right:0,forward:0,back:0,pitchUp:0,pitchDown:0,yawLeft:0,yawRight:0,rollLeft:0,rollRight:0},this.moveVector=new rt(0,0,0),this.rotationVector=new rt(0,0,0),this.keydown=function(t){if(!t.altKey){switch(t.code){case"ShiftLeft":case"ShiftRight":this.movementSpeedMultiplier=.1;break;case"KeyW":this.moveState.forward=1;break;case"KeyS":this.moveState.back=1;break;case"KeyA":this.moveState.left=1;break;case"KeyD":this.moveState.right=1;break;case"KeyR":this.moveState.up=1;break;case"KeyF":this.moveState.down=1;break;case"ArrowUp":this.moveState.pitchUp=1;break;case"ArrowDown":this.moveState.pitchDown=1;break;case"ArrowLeft":this.moveState.yawLeft=1;break;case"ArrowRight":this.moveState.yawRight=1;break;case"KeyQ":this.moveState.rollLeft=1;break;case"KeyE":this.moveState.rollRight=1}this.updateMovementVector(),this.updateRotationVector()}},this.keyup=function(t){switch(t.code){case"ShiftLeft":case"ShiftRight":this.movementSpeedMultiplier=1;break;case"KeyW":this.moveState.forward=0;break;case"KeyS":this.moveState.back=0;break;case"KeyA":this.moveState.left=0;break;case"KeyD":this.moveState.right=0;break;case"KeyR":this.moveState.up=0;break;case"KeyF":this.moveState.down=0;break;case"ArrowUp":this.moveState.pitchUp=0;break;case"ArrowDown":this.moveState.pitchDown=0;break;case"ArrowLeft":this.moveState.yawLeft=0;break;case"ArrowRight":this.moveState.yawRight=0;break;case"KeyQ":this.moveState.rollLeft=0;break;case"KeyE":this.moveState.rollRight=0}this.updateMovementVector(),this.updateRotationVector()},this.mousedown=function(t){if(this.domElement!==document&&this.domElement.focus(),t.preventDefault(),this.dragToLook)this.mouseStatus++;else{switch(t.button){case 0:this.moveState.forward=1;break;case 2:this.moveState.back=1}this.updateMovementVector()}},this.mousemove=function(t){if(!this.dragToLook||this.mouseStatus>0){const e=this.getContainerDimensions(),n=e.size[0]/2,i=e.size[1]/2;this.moveState.yawLeft=-(t.pageX-e.offset[0]-n)/n,this.moveState.pitchDown=(t.pageY-e.offset[1]-i)/i,this.updateRotationVector()}},this.mouseup=function(t){if(t.preventDefault(),this.dragToLook)this.mouseStatus--,this.moveState.yawLeft=this.moveState.pitchDown=0;else{switch(t.button){case 0:this.moveState.forward=0;break;case 2:this.moveState.back=0}this.updateMovementVector()}this.updateRotationVector()},this.update=function(t){const e=t*n.movementSpeed,s=t*n.rollSpeed;n.object.translateX(n.moveVector.x*e),n.object.translateY(n.moveVector.y*e),n.object.translateZ(n.moveVector.z*e),n.tmpQuaternion.set(n.rotationVector.x*s,n.rotationVector.y*s,n.rotationVector.z*s,1).normalize(),n.object.quaternion.multiply(n.tmpQuaternion),(a.distanceToSquared(n.object.position)>i||8*(1-r.dot(n.object.quaternion))>i)&&(n.dispatchEvent(rb),r.copy(n.object.quaternion),a.copy(n.object.position))},this.updateMovementVector=function(){const t=this.moveState.forward||this.autoForward&&!this.moveState.back?1:0;this.moveVector.x=-this.moveState.left+this.moveState.right,this.moveVector.y=-this.moveState.down+this.moveState.up,this.moveVector.z=-t+this.moveState.back},this.updateRotationVector=function(){this.rotationVector.x=-this.moveState.pitchDown+this.moveState.pitchUp,this.rotationVector.y=-this.moveState.yawRight+this.moveState.yawLeft,this.rotationVector.z=-this.moveState.rollRight+this.moveState.rollLeft},this.getContainerDimensions=function(){return this.domElement!=document?{size:[this.domElement.offsetWidth,this.domElement.offsetHeight],offset:[this.domElement.offsetLeft,this.domElement.offsetTop]}:{size:[window.innerWidth,window.innerHeight],offset:[0,0]}},this.dispose=function(){this.domElement.removeEventListener("contextmenu",sb),this.domElement.removeEventListener("mousedown",o),this.domElement.removeEventListener("mousemove",s),this.domElement.removeEventListener("mouseup",l),window.removeEventListener("keydown",c),window.removeEventListener("keyup",h)};const s=this.mousemove.bind(this),o=this.mousedown.bind(this),l=this.mouseup.bind(this),c=this.keydown.bind(this),h=this.keyup.bind(this);this.domElement.addEventListener("contextmenu",sb),this.domElement.addEventListener("mousemove",s),this.domElement.addEventListener("mousedown",o),this.domElement.addEventListener("mouseup",l),window.addEventListener("keydown",c),window.addEventListener("keyup",h),this.updateMovementVector(),this.updateRotationVector()}}function sb(t){t.preventDefault()}var ob={uniforms:{tDiffuse:{value:null},opacity:{value:1}},vertexShader:"\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}",fragmentShader:"\n\n\t\tuniform float opacity;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor = opacity * texel;\n\n\t\t}"};class lb{constructor(){this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1}setSize(){}render(){console.error("THREE.Pass: .render() must be implemented in derived pass.")}}const cb=new po(-1,1,1,-1,0,1),hb=new qe;hb.setAttribute("position",new ke([-1,3,0,-1,-1,0,3,-1,0],3)),hb.setAttribute("uv",new ke([0,2,0,0,2,0],2));class ub{constructor(t){this._mesh=new un(hb,t)}dispose(){this._mesh.geometry.dispose()}render(t){t.render(this._mesh,cb)}get material(){return this._mesh.material}set material(t){this._mesh.material=t}}class db extends lb{constructor(t,e){super(),this.textureID=void 0!==e?e:"tDiffuse",t instanceof vn?(this.uniforms=t.uniforms,this.material=t):t&&(this.uniforms=gn.clone(t.uniforms),this.material=new vn({defines:Object.assign({},t.defines),uniforms:this.uniforms,vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})),this.fsQuad=new ub(this.material)}render(t,e,n){this.uniforms[this.textureID]&&(this.uniforms[this.textureID].value=n.texture),this.fsQuad.material=this.material,this.renderToScreen?(t.setRenderTarget(null),this.fsQuad.render(t)):(t.setRenderTarget(e),this.clear&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),this.fsQuad.render(t))}}class pb extends lb{constructor(t,e){super(),this.scene=t,this.camera=e,this.clear=!0,this.needsSwap=!1,this.inverse=!1}render(t,e,n){const i=t.getContext(),r=t.state;let a,s;r.buffers.color.setMask(!1),r.buffers.depth.setMask(!1),r.buffers.color.setLocked(!0),r.buffers.depth.setLocked(!0),this.inverse?(a=0,s=1):(a=1,s=0),r.buffers.stencil.setTest(!0),r.buffers.stencil.setOp(i.REPLACE,i.REPLACE,i.REPLACE),r.buffers.stencil.setFunc(i.ALWAYS,a,4294967295),r.buffers.stencil.setClear(s),r.buffers.stencil.setLocked(!0),t.setRenderTarget(n),this.clear&&t.clear(),t.render(this.scene,this.camera),t.setRenderTarget(e),this.clear&&t.clear(),t.render(this.scene,this.camera),r.buffers.color.setLocked(!1),r.buffers.depth.setLocked(!1),r.buffers.stencil.setLocked(!1),r.buffers.stencil.setFunc(i.EQUAL,1,4294967295),r.buffers.stencil.setOp(i.KEEP,i.KEEP,i.KEEP),r.buffers.stencil.setLocked(!0)}}class fb extends lb{constructor(){super(),this.needsSwap=!1}render(t){t.state.buffers.stencil.setLocked(!1),t.state.buffers.stencil.setTest(!1)}}class mb{constructor(t,e){if(this.renderer=t,void 0===e){const n={minFilter:m,magFilter:m,format:S},i=t.getSize(new Y);this._pixelRatio=t.getPixelRatio(),this._width=i.width,this._height=i.height,(e=new nt(this._width*this._pixelRatio,this._height*this._pixelRatio,n)).texture.name="EffectComposer.rt1"}else this._pixelRatio=1,this._width=e.width,this._height=e.height;this.renderTarget1=e,this.renderTarget2=e.clone(),this.renderTarget2.texture.name="EffectComposer.rt2",this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2,this.renderToScreen=!0,this.passes=[],void 0===ob&&console.error("THREE.EffectComposer relies on CopyShader"),void 0===db&&console.error("THREE.EffectComposer relies on ShaderPass"),this.copyPass=new db(ob),this.clock=new wo}swapBuffers(){const t=this.readBuffer;this.readBuffer=this.writeBuffer,this.writeBuffer=t}addPass(t){this.passes.push(t),t.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}insertPass(t,e){this.passes.splice(e,0,t),t.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}removePass(t){const e=this.passes.indexOf(t);-1!==e&&this.passes.splice(e,1)}isLastEnabledPass(t){for(let e=t+1;e1?i-1:0),a=1;a=0&&r<1?(o=a,l=s):r>=1&&r<2?(o=s,l=a):r>=2&&r<3?(l=a,c=s):r>=3&&r<4?(l=s,c=a):r>=4&&r<5?(o=s,c=a):r>=5&&r<6&&(o=a,c=s);var h=n-a/2;return i(o+h,l+h,c+h)}var Pb={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"639",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"};var Db=/^#[a-fA-F0-9]{6}$/,Ib=/^#[a-fA-F0-9]{8}$/,Nb=/^#[a-fA-F0-9]{3}$/,Ob=/^#[a-fA-F0-9]{4}$/,zb=/^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/i,kb=/^rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*([-+]?[0-9]*[.]?[0-9]+)\s*\)$/i,Bb=/^hsl\(\s*(\d{0,3}[.]?[0-9]+)\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*\)$/i,Fb=/^hsla\(\s*(\d{0,3}[.]?[0-9]+)\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*,\s*([-+]?[0-9]*[.]?[0-9]+)\s*\)$/i;function Ub(t){if("string"!=typeof t)throw new Ab(3);var e=function(t){if("string"!=typeof t)return t;var e=t.toLowerCase();return Pb[e]?"#"+Pb[e]:t}(t);if(e.match(Db))return{red:parseInt(""+e[1]+e[2],16),green:parseInt(""+e[3]+e[4],16),blue:parseInt(""+e[5]+e[6],16)};if(e.match(Ib)){var n=parseFloat((parseInt(""+e[7]+e[8],16)/255).toFixed(2));return{red:parseInt(""+e[1]+e[2],16),green:parseInt(""+e[3]+e[4],16),blue:parseInt(""+e[5]+e[6],16),alpha:n}}if(e.match(Nb))return{red:parseInt(""+e[1]+e[1],16),green:parseInt(""+e[2]+e[2],16),blue:parseInt(""+e[3]+e[3],16)};if(e.match(Ob)){var i=parseFloat((parseInt(""+e[4]+e[4],16)/255).toFixed(2));return{red:parseInt(""+e[1]+e[1],16),green:parseInt(""+e[2]+e[2],16),blue:parseInt(""+e[3]+e[3],16),alpha:i}}var r=zb.exec(e);if(r)return{red:parseInt(""+r[1],10),green:parseInt(""+r[2],10),blue:parseInt(""+r[3],10)};var a=kb.exec(e.substring(0,50));if(a)return{red:parseInt(""+a[1],10),green:parseInt(""+a[2],10),blue:parseInt(""+a[3],10),alpha:parseFloat(""+a[4])};var s=Bb.exec(e);if(s){var o="rgb("+Rb(parseInt(""+s[1],10),parseInt(""+s[2],10)/100,parseInt(""+s[3],10)/100)+")",l=zb.exec(o);if(!l)throw new Ab(4,e,o);return{red:parseInt(""+l[1],10),green:parseInt(""+l[2],10),blue:parseInt(""+l[3],10)}}var c=Fb.exec(e.substring(0,50));if(c){var h="rgb("+Rb(parseInt(""+c[1],10),parseInt(""+c[2],10)/100,parseInt(""+c[3],10)/100)+")",u=zb.exec(h);if(!u)throw new Ab(4,e,h);return{red:parseInt(""+u[1],10),green:parseInt(""+u[2],10),blue:parseInt(""+u[3],10),alpha:parseFloat(""+c[4])}}throw new Ab(5)}var Hb=function(t){return 7===t.length&&t[1]===t[2]&&t[3]===t[4]&&t[5]===t[6]?"#"+t[1]+t[3]+t[5]:t};function Vb(t){var e=t.toString(16);return 1===e.length?"0"+e:e}function Gb(t,e,n){if("number"==typeof t&&"number"==typeof e&&"number"==typeof n)return Hb("#"+Vb(t)+Vb(e)+Vb(n));if("object"==typeof t&&void 0===e&&void 0===n)return Hb("#"+Vb(t.red)+Vb(t.green)+Vb(t.blue));throw new Ab(6)}function Wb(t,e,n){return function(){var i=n.concat(Array.prototype.slice.call(arguments));return i.length>=e?t.apply(this,i):Wb(t,e,i)}}function jb(t){return Wb(t,t.length,[])}function qb(t,e){if("transparent"===e)return e;var n,i,r,a=Ub(e),s="number"==typeof a.alpha?a.alpha:1;return function(t,e,n,i){if("string"==typeof t&&"number"==typeof e){var r=Ub(t);return"rgba("+r.red+","+r.green+","+r.blue+","+e+")"}if("number"==typeof t&&"number"==typeof e&&"number"==typeof n&&"number"==typeof i)return i>=1?Gb(t,e,n):"rgba("+t+","+e+","+n+","+i+")";if("object"==typeof t&&void 0===e&&void 0===n&&void 0===i)return t.alpha>=1?Gb(t.red,t.green,t.blue):"rgba("+t.red+","+t.green+","+t.blue+","+t.alpha+")";throw new Ab(7)}(yb({},a,{alpha:(n=0,i=1,r=(100*s+100*parseFloat(t))/100,Math.max(n,Math.min(i,r)))}))}var Xb=jb(qb),Yb={Linear:{None:function(t){return t}},Quadratic:{In:function(t){return t*t},Out:function(t){return t*(2-t)},InOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)}},Cubic:{In:function(t){return t*t*t},Out:function(t){return--t*t*t+1},InOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)}},Quartic:{In:function(t){return t*t*t*t},Out:function(t){return 1- --t*t*t*t},InOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)}},Quintic:{In:function(t){return t*t*t*t*t},Out:function(t){return--t*t*t*t*t+1},InOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)}},Sinusoidal:{In:function(t){return 1-Math.cos(t*Math.PI/2)},Out:function(t){return Math.sin(t*Math.PI/2)},InOut:function(t){return.5*(1-Math.cos(Math.PI*t))}},Exponential:{In:function(t){return 0===t?0:Math.pow(1024,t-1)},Out:function(t){return 1===t?1:1-Math.pow(2,-10*t)},InOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(2-Math.pow(2,-10*(t-1)))}},Circular:{In:function(t){return 1-Math.sqrt(1-t*t)},Out:function(t){return Math.sqrt(1- --t*t)},InOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)}},Elastic:{In:function(t){return 0===t?0:1===t?1:-Math.pow(2,10*(t-1))*Math.sin(5*(t-1.1)*Math.PI)},Out:function(t){return 0===t?0:1===t?1:Math.pow(2,-10*t)*Math.sin(5*(t-.1)*Math.PI)+1},InOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?-.5*Math.pow(2,10*(t-1))*Math.sin(5*(t-1.1)*Math.PI):.5*Math.pow(2,-10*(t-1))*Math.sin(5*(t-1.1)*Math.PI)+1}},Back:{In:function(t){var e=1.70158;return t*t*((e+1)*t-e)},Out:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},InOut:function(t){var e=2.5949095;return(t*=2)<1?t*t*((e+1)*t-e)*.5:.5*((t-=2)*t*((e+1)*t+e)+2)}},Bounce:{In:function(t){return 1-Yb.Bounce.Out(1-t)},Out:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},InOut:function(t){return t<.5?.5*Yb.Bounce.In(2*t):.5*Yb.Bounce.Out(2*t-1)+.5}}},Zb="undefined"==typeof self&&"undefined"!=typeof process&&process.hrtime?function(){var t=process.hrtime();return 1e3*t[0]+t[1]/1e6}:"undefined"!=typeof self&&void 0!==self.performance&&void 0!==self.performance.now?self.performance.now.bind(self.performance):void 0!==Date.now?Date.now:function(){return(new Date).getTime()},Jb=function(){function t(){this._tweens={},this._tweensAddedDuringUpdate={}}return t.prototype.getAll=function(){var t=this;return Object.keys(this._tweens).map((function(e){return t._tweens[e]}))},t.prototype.removeAll=function(){this._tweens={}},t.prototype.add=function(t){this._tweens[t.getId()]=t,this._tweensAddedDuringUpdate[t.getId()]=t},t.prototype.remove=function(t){delete this._tweens[t.getId()],delete this._tweensAddedDuringUpdate[t.getId()]},t.prototype.update=function(t,e){void 0===t&&(t=Zb()),void 0===e&&(e=!1);var n=Object.keys(this._tweens);if(0===n.length)return!1;for(;n.length>0;){this._tweensAddedDuringUpdate={};for(var i=0;i1?a(t[n],t[n-1],n-i):a(t[r],t[r+1>n?n:r+1],i-r)},Bezier:function(t,e){for(var n=0,i=t.length-1,r=Math.pow,a=$b.Utils.Bernstein,s=0;s<=i;s++)n+=r(1-e,i-s)*r(e,s)*t[s]*a(i,s);return n},CatmullRom:function(t,e){var n=t.length-1,i=n*e,r=Math.floor(i),a=$b.Utils.CatmullRom;return t[0]===t[n]?(e<0&&(r=Math.floor(i=n*(1+e))),a(t[(r-1+n)%n],t[r],t[(r+1)%n],t[(r+2)%n],i-r)):e<0?t[0]-(a(t[0],t[0],t[1],t[1],-i)-t[0]):e>1?t[n]-(a(t[n],t[n],t[n-1],t[n-1],i-n)-t[n]):a(t[r?r-1:0],t[r],t[n1;i--)n*=i;return t[e]=n,n}}(),CatmullRom:function(t,e,n,i,r){var a=.5*(n-t),s=.5*(i-e),o=r*r;return(2*e-2*n+a+s)*(r*o)+(-3*e+3*n-2*a-s)*o+a*r+e}}},Qb=function(){function t(){}return t.nextId=function(){return t._nextId++},t._nextId=0,t}(),Kb=new Jb,tw=function(){function t(t,e){void 0===e&&(e=Kb),this._object=t,this._group=e,this._isPaused=!1,this._pauseStart=0,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._initialRepeat=0,this._repeat=0,this._yoyo=!1,this._isPlaying=!1,this._reversed=!1,this._delayTime=0,this._startTime=0,this._easingFunction=Yb.Linear.None,this._interpolationFunction=$b.Linear,this._chainedTweens=[],this._onStartCallbackFired=!1,this._id=Qb.nextId(),this._isChainStopped=!1,this._goToEnd=!1}return t.prototype.getId=function(){return this._id},t.prototype.isPlaying=function(){return this._isPlaying},t.prototype.isPaused=function(){return this._isPaused},t.prototype.to=function(t,e){return this._valuesEnd=Object.create(t),void 0!==e&&(this._duration=e),this},t.prototype.duration=function(t){return this._duration=t,this},t.prototype.start=function(t){if(this._isPlaying)return this;if(this._group&&this._group.add(this),this._repeat=this._initialRepeat,this._reversed)for(var e in this._reversed=!1,this._valuesStartRepeat)this._swapEndStartRepeatValues(e),this._valuesStart[e]=this._valuesStartRepeat[e];return this._isPlaying=!0,this._isPaused=!1,this._onStartCallbackFired=!1,this._isChainStopped=!1,this._startTime=void 0!==t?"string"==typeof t?Zb()+parseFloat(t):t:Zb(),this._startTime+=this._delayTime,this._setupProperties(this._object,this._valuesStart,this._valuesEnd,this._valuesStartRepeat),this},t.prototype._setupProperties=function(t,e,n,i){for(var r in n){var a=t[r],s=Array.isArray(a),o=s?"array":typeof a,l=!s&&Array.isArray(n[r]);if("undefined"!==o&&"function"!==o){if(l){var c=n[r];if(0===c.length)continue;c=c.map(this._handleRelativeValue.bind(this,a)),n[r]=[a].concat(c)}if("object"!==o&&!s||!a||l)void 0===e[r]&&(e[r]=a),s||(e[r]*=1),i[r]=l?n[r].slice().reverse():e[r]||0;else{for(var h in e[r]=s?[]:{},a)e[r][h]=a[h];i[r]=s?[]:{},this._setupProperties(a,e[r],n[r],i[r])}}}},t.prototype.stop=function(){return this._isChainStopped||(this._isChainStopped=!0,this.stopChainedTweens()),this._isPlaying?(this._group&&this._group.remove(this),this._isPlaying=!1,this._isPaused=!1,this._onStopCallback&&this._onStopCallback(this._object),this):this},t.prototype.end=function(){return this._goToEnd=!0,this.update(1/0),this},t.prototype.pause=function(t){return void 0===t&&(t=Zb()),this._isPaused||!this._isPlaying||(this._isPaused=!0,this._pauseStart=t,this._group&&this._group.remove(this)),this},t.prototype.resume=function(t){return void 0===t&&(t=Zb()),this._isPaused&&this._isPlaying?(this._isPaused=!1,this._startTime+=t-this._pauseStart,this._pauseStart=0,this._group&&this._group.add(this),this):this},t.prototype.stopChainedTweens=function(){for(var t=0,e=this._chainedTweens.length;tr)return!1;e&&this.start(t)}if(this._goToEnd=!1,t1?1:i;var a=this._easingFunction(i);if(this._updateProperties(this._object,this._valuesStart,this._valuesEnd,a),this._onUpdateCallback&&this._onUpdateCallback(this._object,i),1===i){if(this._repeat>0){for(n in isFinite(this._repeat)&&this._repeat--,this._valuesStartRepeat)this._yoyo||"string"!=typeof this._valuesEnd[n]||(this._valuesStartRepeat[n]=this._valuesStartRepeat[n]+parseFloat(this._valuesEnd[n])),this._yoyo&&this._swapEndStartRepeatValues(n),this._valuesStart[n]=this._valuesStartRepeat[n];return this._yoyo&&(this._reversed=!this._reversed),void 0!==this._repeatDelayTime?this._startTime=t+this._repeatDelayTime:this._startTime=t+this._delayTime,this._onRepeatCallback&&this._onRepeatCallback(this._object),!0}this._onCompleteCallback&&this._onCompleteCallback(this._object);for(var s=0,o=this._chainedTweens.length;s=0?i=setTimeout(l,e-c):(i=null,n||(o=t.apply(a,r),a=r=null))}null==e&&(e=100);var c=function(){a=this,r=arguments,s=Date.now();var c=n&&!i;return i||(i=setTimeout(l,e)),c&&(o=t.apply(a,r),a=r=null),o};return c.clear=function(){i&&(clearTimeout(i),i=null)},c.flush=function(){i&&(o=t.apply(a,r),a=r=null,clearTimeout(i),i=null)},c}hw.debounce=hw;var uw=hw;function dw(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=t&&("undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"]);if(null==n)return;var i,r,a=[],s=!0,o=!1;try{for(n=n.call(t);!(s=(i=n.next()).done)&&(a.push(i.value),!e||a.length!==e);s=!0);}catch(t){o=!0,r=t}finally{try{s||null==n.return||n.return()}finally{if(o)throw r}}return a}(t,e)||function(t,e){if(!t)return;if("string"==typeof t)return pw(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return pw(t,e)}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function pw(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n0&&void 0!==arguments[0]?arguments[0]:{},e=Object.assign({},n instanceof Function?n(t):n,{initialised:!1}),i={};function r(e){return a(e,t),o(),r}var a=function(t,n){h.call(r,t,e,n),e.initialised=!0},o=uw((function(){e.initialised&&(d.call(r,e,i),i={})}),1);return p.forEach((function(t){r[t.name]=function(t){var n=t.name,a=t.triggerUpdate,s=void 0!==a&&a,l=t.onChange,c=void 0===l?function(t,e){}:l,h=t.defaultVal,u=void 0===h?null:h;return function(t){var a=e[n];if(!arguments.length)return a;var l=void 0===t?u:t;return e[n]=l,c.call(r,l,e,a),!i.hasOwnProperty(n)&&(i[n]=a),s&&o(),r}}(t)})),Object.keys(s).forEach((function(t){r[t]=function(){for(var n,i=arguments.length,a=new Array(i),o=0;ot.length)&&(e=t.length);for(var n=0,i=new Array(e);n0)&&d.push(e,r,l),(t!==n-1||o1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,i=arguments.length,r=new Array(i>3?i-3:0),a=3;a2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10,r=t.camera;if(e){var a=new bw.Vector3(0,0,0),s=2*Math.max.apply(Math,yw(Object.entries(e).map((function(t){var e=vw(t,2),n=e[0],i=e[1];return Math.max.apply(Math,yw(i.map((function(t){return Math.abs(a[n]-t)}))))})))),o=(1-2*i/t.height)*r.fov,l=s/Math.atan(o*Math.PI/180),c=l/r.aspect,h=Math.max(l,c);if(h>0){var u=a.clone().sub(r.position).normalize().multiplyScalar(-h);this.cameraPosition(u,a,n)}}return this},getBbox:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){return!0},n=new bw.Box3(new bw.Vector3(0,0,0),new bw.Vector3(0,0,0)),i=t.objects.filter(e);return i.length?(i.forEach((function(t){return n.expandByObject(t)})),Object.assign.apply(Object,yw(["x","y","z"].map((function(t){return gw({},t,[n.min[t],n.max[t]])}))))):null},getScreenCoords:function(t,e,n,i){var r=new bw.Vector3(e,n,i);return r.project(this.camera()),{x:(r.x+1)*t.width/2,y:-(r.y-1)*t.height/2}},getSceneCoords:function(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,r=new bw.Vector2(e/t.width*2-1,-n/t.height*2+1),a=new bw.Raycaster;return a.setFromCamera(r,t.camera),Object.assign({},a.ray.at(i,new bw.Vector3))},intersectingObjects:function(t,e,n){var i=new bw.Vector2(e/t.width*2-1,-n/t.height*2+1),r=new bw.Raycaster;return r.params.Line.threshold=t.lineHoverPrecision,r.setFromCamera(i,t.camera),r.intersectObjects(t.objects,!0)},renderer:function(t){return t.renderer},scene:function(t){return t.scene},camera:function(t){return t.camera},postProcessingComposer:function(t){return t.postProcessingComposer},controls:function(t){return t.controls},tbControls:function(t){return t.controls}},stateInit:function(){return{scene:new bw.Scene,camera:new bw.OrthographicCamera,clock:new bw.Clock}},init:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=n.controlType,r=void 0===i?"trackball":i,a=n.rendererConfig,s=void 0===a?{}:a,o=n.extraRenderers,l=void 0===o?[]:o,c=n.waitForLoadComplete,h=void 0===c||c;t.innerHTML="",t.appendChild(e.container=document.createElement("div")),e.container.className="scene-container",e.container.style.position="relative",e.container.appendChild(e.navInfo=document.createElement("div")),e.navInfo.className="scene-nav-info",e.navInfo.textContent={orbit:"Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan",trackball:"Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan",fly:"WASD: move, R|F: up | down, Q|E: roll, up|down: pitch, left|right: yaw"}[r]||"",e.navInfo.style.display=e.showNavInfo?null:"none",e.toolTipElem=document.createElement("div"),e.toolTipElem.classList.add("scene-tooltip"),e.container.appendChild(e.toolTipElem),e.pointerPos=new bw.Vector2,e.pointerPos.x=-2,e.pointerPos.y=-2,["pointermove","pointerdown"].forEach((function(t){return e.container.addEventListener(t,(function(n){if("pointerdown"===t&&(e.isPointerPressed=!0),!e.isPointerDragging&&"pointermove"===n.type&&(n.pressure>0||e.isPointerPressed)&&("touch"!==n.pointerType||void 0===n.movementX||[n.movementX,n.movementY].some((function(t){return Math.abs(t)>1})))&&(e.isPointerDragging=!0),e.enablePointerInteraction){var i=(r=e.container,a=r.getBoundingClientRect(),s=window.pageXOffset||document.documentElement.scrollLeft,o=window.pageYOffset||document.documentElement.scrollTop,{top:a.top+o,left:a.left+s});e.pointerPos.x=n.pageX-i.left,e.pointerPos.y=n.pageY-i.top,e.toolTipElem.style.top="".concat(e.pointerPos.y,"px"),e.toolTipElem.style.left="".concat(e.pointerPos.x,"px"),e.toolTipElem.style.transform="translate(-".concat(e.pointerPos.x/e.width*100,"%, 21px)")}var r,a,s,o}),{passive:!0})})),e.container.addEventListener("pointerup",(function(t){e.isPointerPressed=!1,e.isPointerDragging&&(e.isPointerDragging=!1,!e.clickAfterDrag)||requestAnimationFrame((function(){0===t.button&&e.onClick(e.hoverObj||null,t,e.intersectionPoint),2===t.button&&e.onRightClick&&e.onRightClick(e.hoverObj||null,t,e.intersectionPoint)}))}),{passive:!0,capture:!0}),e.container.addEventListener("contextmenu",(function(t){e.onRightClick&&t.preventDefault()})),e.renderer=new bw.WebGLRenderer(Object.assign({antialias:!0,alpha:!0},s)),e.renderer.setPixelRatio(Math.min(2,window.devicePixelRatio)),e.container.appendChild(e.renderer.domElement),e.extraRenderers=l,e.extraRenderers.forEach((function(t){t.domElement.style.position="absolute",t.domElement.style.top="0px",t.domElement.style.pointerEvents="none",e.container.appendChild(t.domElement)})),e.postProcessingComposer=new mb(e.renderer),e.postProcessingComposer.addPass(new vb(e.scene,e.camera)),e.controls=new{trackball:K_,orbit:ib,fly:ab}[r](e.camera,e.renderer.domElement),"fly"===r&&(e.controls.movementSpeed=300,e.controls.rollSpeed=Math.PI/6,e.controls.dragToLook=!0),"trackball"!==r&&"orbit"!==r||(e.controls.minDistance=.1,e.controls.maxDistance=e.skyRadius,e.controls.addEventListener("start",(function(){e.controlsEngaged=!0})),e.controls.addEventListener("change",(function(){e.controlsEngaged&&(e.controlsDragging=!0)})),e.controls.addEventListener("end",(function(){e.controlsEngaged=!1,e.controlsDragging=!1}))),[e.renderer,e.postProcessingComposer].concat(yw(e.extraRenderers)).forEach((function(t){return t.setSize(e.width,e.height)})),e.renderer.setSize(e.width,e.height),e.postProcessingComposer.setSize(e.width,e.height),e.scene.add(e.skysphere=new bw.Mesh),e.skysphere.visible=!1,e.loadComplete=e.scene.visible=!h,window.scene=e.scene},update:function(t,e){if(t.width&&t.height&&(e.hasOwnProperty("width")||e.hasOwnProperty("height"))&&(t.container.style.width=t.width,t.container.style.height=t.height,[t.renderer,t.postProcessingComposer].concat(yw(t.extraRenderers)).forEach((function(e){return e.setSize(t.width,t.height)})),t.camera.aspect=t.width/t.height,t.camera.updateProjectionMatrix()),e.hasOwnProperty("skyRadius")&&t.skyRadius&&(t.controls.hasOwnProperty("maxDistance")&&e.skyRadius&&(t.controls.maxDistance=t.skyRadius),t.camera.far=2.5*t.skyRadius,t.camera.updateProjectionMatrix(),t.skysphere.geometry=new bw.SphereGeometry(t.skyRadius)),e.hasOwnProperty("backgroundColor")){var n=Ub(t.backgroundColor).alpha;void 0===n&&(n=1),t.renderer.setClearColor(new bw.Color(Xb(1,t.backgroundColor)),n)}function i(){t.loadComplete=t.scene.visible=!0}e.hasOwnProperty("backgroundImageUrl")&&(t.backgroundImageUrl?(new bw.TextureLoader).load(t.backgroundImageUrl,(function(e){t.skysphere.material=new bw.MeshBasicMaterial({map:e,side:bw.BackSide}),t.skysphere.visible=!0,t.onBackgroundImageLoaded&&setTimeout(t.onBackgroundImageLoaded),!t.loadComplete&&i()})):(t.skysphere.visible=!1,t.skysphere.material.map=null,!t.loadComplete&&i())),e.hasOwnProperty("showNavInfo")&&(t.navInfo.style.display=t.showNavInfo?null:"none"),e.hasOwnProperty("objects")&&((e.objects||[]).forEach((function(e){return t.scene.remove(e)})),t.objects.forEach((function(e){return t.scene.add(e)})))}});function Mw(t,e){var n=new e;return{linkProp:function(e){return{default:n[e](),onChange:function(n,i){i[t][e](n)},triggerUpdate:!1}},linkMethod:function(e){return function(n){for(var i=n[t],r=arguments.length,a=new Array(r>1?r-1:0),s=1;s3?r-3:0),s=3;scode{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:0s .6s opacity}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/src/citationnet/static/css/bootstrap.min.css.map b/src/citationnet/static/css/bootstrap.min.css.map deleted file mode 100644 index 1e9cb78..0000000 --- a/src/citationnet/static/css/bootstrap.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","../../scss/vendor/_rfs.scss","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/_table-row.scss","../../scss/_forms.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_forms.scss","../../scss/mixins/_gradients.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/mixins/_nav-divider.scss","../../scss/_button-group.scss","../../scss/_input-group.scss","../../scss/_custom-forms.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/mixins/_badge.scss","../../scss/_jumbotron.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_media.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/utilities/_align.scss","../../scss/mixins/_background-variant.scss","../../scss/utilities/_background.scss","../../scss/utilities/_borders.scss","../../scss/utilities/_display.scss","../../scss/utilities/_embed.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_float.scss","../../scss/utilities/_overflow.scss","../../scss/utilities/_position.scss","../../scss/utilities/_screenreaders.scss","../../scss/mixins/_screen-reader.scss","../../scss/utilities/_shadows.scss","../../scss/utilities/_sizing.scss","../../scss/utilities/_stretched-link.scss","../../scss/utilities/_spacing.scss","../../scss/utilities/_text.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_text-hide.scss","../../scss/utilities/_visibility.scss","../../scss/_print.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"utilities\";\n@import \"print\";\n",":root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n\n @include hover-focus {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus {\n outline: 0;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-blacklist\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-break: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.col-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n -ms-flex-order: -1;\n order: -1;\n}\n\n.order-last {\n -ms-flex-order: 13;\n order: 13;\n}\n\n.order-0 {\n -ms-flex-order: 0;\n order: 0;\n}\n\n.order-1 {\n -ms-flex-order: 1;\n order: 1;\n}\n\n.order-2 {\n -ms-flex-order: 2;\n order: 2;\n}\n\n.order-3 {\n -ms-flex-order: 3;\n order: 3;\n}\n\n.order-4 {\n -ms-flex-order: 4;\n order: 4;\n}\n\n.order-5 {\n -ms-flex-order: 5;\n order: 5;\n}\n\n.order-6 {\n -ms-flex-order: 6;\n order: 6;\n}\n\n.order-7 {\n -ms-flex-order: 7;\n order: 7;\n}\n\n.order-8 {\n -ms-flex-order: 8;\n order: 8;\n}\n\n.order-9 {\n -ms-flex-order: 9;\n order: 9;\n}\n\n.order-10 {\n -ms-flex-order: 10;\n order: 10;\n}\n\n.order-11 {\n -ms-flex-order: 11;\n order: 11;\n}\n\n.order-12 {\n -ms-flex-order: 12;\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-sm-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-sm-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-sm-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-sm-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-sm-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-sm-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-sm-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-sm-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-sm-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-sm-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-sm-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-sm-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-sm-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-sm-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-sm-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-md-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-md-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-md-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-md-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-md-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-md-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-md-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-md-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-md-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-md-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-md-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-md-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-md-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-md-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-md-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-lg-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-lg-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-lg-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-lg-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-lg-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-lg-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-lg-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-lg-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-lg-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-lg-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-lg-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-lg-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-lg-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-lg-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-lg-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-xl-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-xl-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-xl-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-xl-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-xl-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-xl-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-xl-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-xl-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-xl-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-xl-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-xl-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-xl-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-xl-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-xl-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-xl-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n color: #212529;\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #343a40;\n border-color: #454d55;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::-webkit-input-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n margin-bottom: 0;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n height: auto;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: -ms-inline-flexbox;\n display: inline-flex;\n -ms-flex-align: center;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #28a745;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: center right calc(0.375em + 0.1875rem);\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-control:valid ~ .valid-feedback,\n.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback,\n.form-control.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n border-color: #28a745;\n padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-select:valid ~ .valid-feedback,\n.was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback,\n.custom-select.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control-file:valid ~ .valid-feedback,\n.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback,\n.form-control-file.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .valid-feedback,\n.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback,\n.custom-control-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n border-color: #34ce57;\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .valid-feedback,\n.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback,\n.custom-file-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\");\n background-repeat: no-repeat;\n background-position: center right calc(0.375em + 0.1875rem);\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control:invalid ~ .invalid-feedback,\n.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,\n.form-control.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n border-color: #dc3545;\n padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-select:invalid ~ .invalid-feedback,\n.was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback,\n.custom-select.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control-file:invalid ~ .invalid-feedback,\n.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback,\n.form-control-file.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .invalid-feedback,\n.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback,\n.custom-control-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n border-color: #e4606d;\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .invalid-feedback,\n.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback,\n.custom-file-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: -ms-flexbox;\n display: flex;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n -ms-flex-align: center;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n color: #212529;\n text-align: center;\n vertical-align: middle;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover {\n color: #212529;\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n text-decoration: none;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 768px) {\n .dropdown-menu-md-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 992px) {\n .dropdown-menu-lg-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 1200px) {\n .dropdown-menu-xl-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-right {\n right: 0;\n left: auto;\n }\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: -ms-inline-flexbox;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-align: start;\n align-items: flex-start;\n -ms-flex-pack: center;\n justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: stretch;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n width: 1%;\n margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: -ms-flexbox;\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n display: -ms-inline-flexbox;\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n z-index: -1;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n border-color: #b3d7ff;\n}\n\n.custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n vertical-align: top;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n background-color: #fff;\n border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background: no-repeat 50% / 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n left: -2.25rem;\n width: 1.75rem;\n pointer-events: all;\n border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n top: calc(0.25rem + 2px);\n left: calc(-2.25rem + 2px);\n width: calc(1rem - 4px);\n height: calc(1rem - 4px);\n background-color: #adb5bd;\n border-radius: 0.5rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-switch .custom-control-label::after {\n transition: none;\n }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n background-color: #fff;\n -webkit-transform: translateX(0.75rem);\n transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n display: none;\n}\n\n.custom-select-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n}\n\n.custom-select-lg {\n height: calc(1.5em + 1rem + 2px);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin: 0;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input:disabled ~ .custom-file-label {\n background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: calc(1.5em + 0.75rem);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: inherit;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n height: calc(1rem + 0.4rem);\n padding: 0;\n background-color: transparent;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -webkit-appearance: none;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -moz-appearance: none;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-moz-range-thumb {\n transition: none;\n }\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: 0;\n margin-right: 0.2rem;\n margin-left: 0.2rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-ms-thumb {\n transition: none;\n }\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-control-label::before,\n .custom-file-label,\n .custom-select {\n transition: none;\n }\n}\n\n.nav {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified .nav-item {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: justify;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: justify;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n -ms-flex-preferred-size: 100%;\n flex-basis: 100%;\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n -ms-flex-flow: row nowrap;\n flex-flow: row nowrap;\n -ms-flex-pack: start;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n -ms-flex-direction: row;\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n display: -ms-flexbox !important;\n display: flex !important;\n -ms-flex-preferred-size: auto;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n border-top: 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n}\n\n.card-img {\n width: 100%;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img-top {\n width: 100%;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img-bottom {\n width: 100%;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n display: -ms-flexbox;\n display: flex;\n -ms-flex: 1 0 0%;\n flex: 1 0 0%;\n -ms-flex-direction: column;\n flex-direction: column;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n }\n .card-group > .card {\n -ms-flex: 1 0 0%;\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n -webkit-column-count: 3;\n -moz-column-count: 3;\n column-count: 3;\n -webkit-column-gap: 1.25rem;\n -moz-column-gap: 1.25rem;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion > .card {\n overflow: hidden;\n}\n\n.accordion > .card:not(:first-of-type) .card-header:first-child {\n border-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type):not(:last-of-type) {\n border-bottom: 0;\n border-radius: 0;\n}\n\n.accordion > .card:first-of-type {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion > .card:last-of-type {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.accordion > .card .card-header {\n margin-bottom: -1px;\n}\n\n.breadcrumb {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n display: inline-block;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: -ms-flexbox;\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 2;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 1;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .badge {\n transition: none;\n }\n}\n\na.badge:hover, a.badge:focus {\n text-decoration: none;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n color: #fff;\n background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n color: #fff;\n background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n color: #fff;\n background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n color: #fff;\n background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n color: #212529;\n background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n color: #fff;\n background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n color: #212529;\n background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n color: #fff;\n background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: -ms-flexbox;\n display: flex;\n height: 1rem;\n overflow: hidden;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-pack: center;\n justify-content: center;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n -webkit-animation: progress-bar-stripes 1s linear infinite;\n animation: progress-bar-stripes 1s linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n -webkit-animation: none;\n animation: none;\n }\n}\n\n.media {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: start;\n align-items: flex-start;\n}\n\n.media-body {\n -ms-flex: 1;\n flex: 1;\n}\n\n.list-group {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-horizontal {\n -ms-flex-direction: row;\n flex-direction: row;\n}\n\n.list-group-horizontal .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n}\n\n.list-group-horizontal .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n\n.list-group-horizontal .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-sm .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-sm .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-md .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-md .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-lg .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-lg .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n -ms-flex-direction: row;\n flex-direction: row;\n }\n .list-group-horizontal-xl .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-xl .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n.list-group-flush .list-group-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n\n.list-group-flush .list-group-item:last-child {\n margin-bottom: -1px;\n}\n\n.list-group-flush:first-child .list-group-item:first-child {\n border-top: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n margin-bottom: 0;\n border-bottom: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover {\n color: #000;\n text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\na.close.disabled {\n pointer-events: none;\n}\n\n.toast {\n max-width: 350px;\n overflow: hidden;\n font-size: 0.875rem;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n -webkit-backdrop-filter: blur(10px);\n backdrop-filter: blur(10px);\n opacity: 0;\n border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n opacity: 1;\n}\n\n.toast.show {\n display: block;\n opacity: 1;\n}\n\n.toast.hide {\n display: none;\n}\n\n.toast-header {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n padding: 0.25rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.toast-body {\n padding: 0.75rem;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: -webkit-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n -webkit-transform: translate(0, -50px);\n transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n -webkit-transform: none;\n transform: none;\n}\n\n.modal-dialog-scrollable {\n display: -ms-flexbox;\n display: flex;\n max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 1rem);\n overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n -ms-flex-negative: 0;\n flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n display: block;\n height: calc(100vh - 1rem);\n content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-pack: center;\n justify-content: center;\n height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n content: none;\n}\n\n.modal-content {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: start;\n align-items: flex-start;\n -ms-flex-pack: justify;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: 0.3rem;\n border-top-right-radius: 0.3rem;\n}\n\n.modal-header .close {\n padding: 1rem 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: end;\n justify-content: flex-end;\n padding: 1rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.modal-footer > :not(:first-child) {\n margin-left: .25rem;\n}\n\n.modal-footer > :not(:last-child) {\n margin-right: .25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-scrollable {\n max-height: calc(100% - 3.5rem);\n }\n .modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 3.5rem);\n }\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n .modal-dialog-centered::before {\n height: calc(100vh - 3.5rem);\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n max-width: 800px;\n }\n}\n\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n bottom: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n left: calc((0.5rem + 1px) * -1);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n top: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n right: calc((0.5rem + 1px) * -1);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n -ms-touch-action: pan-y;\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n transition: -webkit-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n -webkit-transform: translateX(100%);\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n -webkit-transform: translateX(-100%);\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n -webkit-transform: none;\n transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n transition: 0s 0.6s opacity;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-right {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: no-repeat 50% / 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: center;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n box-sizing: content-box;\n -ms-flex: 0 1 auto;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: .5;\n transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators li {\n transition: none;\n }\n}\n\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n@-webkit-keyframes spinner-border {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes spinner-border {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n -webkit-animation: spinner-border .75s linear infinite;\n animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n }\n}\n\n@keyframes spinner-grow {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n -webkit-animation: spinner-grow .75s linear infinite;\n animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded-sm {\n border-radius: 0.2rem !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n}\n\n.d-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-md-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-print-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n}\n\n.flex-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n}\n\n.justify-content-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n}\n\n.align-items-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n}\n\n.align-items-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n}\n\n.align-items-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n}\n\n.align-items-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n}\n\n.align-content-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n}\n\n.align-content-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n}\n\n.align-content-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n}\n\n.align-content-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n}\n\n.align-content-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n}\n\n.align-self-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n}\n\n.align-self-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n}\n\n.align-self-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n}\n\n.align-self-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n}\n\n.align-self-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-sm-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-sm-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-sm-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-sm-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-sm-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-sm-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-sm-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-sm-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-md-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-md-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-md-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-md-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-md-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-md-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-md-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-md-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-md-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-md-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-md-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-md-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-md-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-md-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-md-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-md-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-lg-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-lg-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-lg-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-lg-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-lg-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-lg-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-lg-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-lg-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-xl-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-xl-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-xl-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-xl-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-xl-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-xl-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-xl-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-xl-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: -webkit-sticky !important;\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports ((position: -webkit-sticky) or (position: sticky)) {\n .sticky-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n pointer-events: auto;\n content: \"\";\n background-color: rgba(0, 0, 0, 0);\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n font-weight: lighter !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n font-weight: bolder !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0056b3 !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #494f54 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #19692c !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #0f6674 !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #ba8b00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #a71d2a !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #cbd3da !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #121416 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-break {\n word-break: break-word !important;\n overflow-wrap: break-word !important;\n}\n\n.text-reset {\n color: inherit !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n .table-dark {\n color: inherit;\n }\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-break: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n color: #212529;\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #343a40;\n border-color: #454d55;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n margin-bottom: 0;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n height: auto;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #28a745;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: center right calc(0.375em + 0.1875rem);\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-control:valid ~ .valid-feedback,\n.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback,\n.form-control.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n border-color: #28a745;\n padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-select:valid ~ .valid-feedback,\n.was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback,\n.custom-select.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control-file:valid ~ .valid-feedback,\n.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback,\n.form-control-file.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .valid-feedback,\n.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback,\n.custom-control-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n border-color: #34ce57;\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .valid-feedback,\n.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback,\n.custom-file-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\");\n background-repeat: no-repeat;\n background-position: center right calc(0.375em + 0.1875rem);\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control:invalid ~ .invalid-feedback,\n.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,\n.form-control.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n border-color: #dc3545;\n padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-select:invalid ~ .invalid-feedback,\n.was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback,\n.custom-select.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control-file:invalid ~ .invalid-feedback,\n.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback,\n.form-control-file.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .invalid-feedback,\n.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback,\n.custom-control-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n border-color: #e4606d;\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .invalid-feedback,\n.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback,\n.custom-file-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n align-items: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n color: #212529;\n text-align: center;\n vertical-align: middle;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover {\n color: #212529;\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n text-decoration: none;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 768px) {\n .dropdown-menu-md-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 992px) {\n .dropdown-menu-lg-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 1200px) {\n .dropdown-menu-xl-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-right {\n right: 0;\n left: auto;\n }\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: flex;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n z-index: -1;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n border-color: #b3d7ff;\n}\n\n.custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n vertical-align: top;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n background-color: #fff;\n border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background: no-repeat 50% / 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n left: -2.25rem;\n width: 1.75rem;\n pointer-events: all;\n border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n top: calc(0.25rem + 2px);\n left: calc(-2.25rem + 2px);\n width: calc(1rem - 4px);\n height: calc(1rem - 4px);\n background-color: #adb5bd;\n border-radius: 0.5rem;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-switch .custom-control-label::after {\n transition: none;\n }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n background-color: #fff;\n transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n display: none;\n}\n\n.custom-select-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n}\n\n.custom-select-lg {\n height: calc(1.5em + 1rem + 2px);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin: 0;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input:disabled ~ .custom-file-label {\n background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: calc(1.5em + 0.75rem);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: inherit;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n height: calc(1rem + 0.4rem);\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-moz-range-thumb {\n transition: none;\n }\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: 0;\n margin-right: 0.2rem;\n margin-left: 0.2rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-ms-thumb {\n transition: none;\n }\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-control-label::before,\n .custom-file-label,\n .custom-select {\n transition: none;\n }\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n flex-flow: row nowrap;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n border-top: 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n}\n\n.card-img {\n width: 100%;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img-top {\n width: 100%;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img-bottom {\n width: 100%;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck {\n display: flex;\n flex-direction: column;\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n display: flex;\n flex: 1 0 0%;\n flex-direction: column;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group {\n display: flex;\n flex-direction: column;\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n column-count: 3;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion > .card {\n overflow: hidden;\n}\n\n.accordion > .card:not(:first-of-type) .card-header:first-child {\n border-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type):not(:last-of-type) {\n border-bottom: 0;\n border-radius: 0;\n}\n\n.accordion > .card:first-of-type {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion > .card:last-of-type {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.accordion > .card .card-header {\n margin-bottom: -1px;\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n display: inline-block;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 2;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 1;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .badge {\n transition: none;\n }\n}\n\na.badge:hover, a.badge:focus {\n text-decoration: none;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n color: #fff;\n background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n color: #fff;\n background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n color: #fff;\n background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n color: #fff;\n background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n color: #212529;\n background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n color: #fff;\n background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n color: #212529;\n background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n color: #fff;\n background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n animation: progress-bar-stripes 1s linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n\n.list-group-horizontal .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n}\n\n.list-group-horizontal .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n\n.list-group-horizontal .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-sm .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-md .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-lg .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-xl .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n.list-group-flush .list-group-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n\n.list-group-flush .list-group-item:last-child {\n margin-bottom: -1px;\n}\n\n.list-group-flush:first-child .list-group-item:first-child {\n border-top: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n margin-bottom: 0;\n border-bottom: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover {\n color: #000;\n text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n appearance: none;\n}\n\na.close.disabled {\n pointer-events: none;\n}\n\n.toast {\n max-width: 350px;\n overflow: hidden;\n font-size: 0.875rem;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n backdrop-filter: blur(10px);\n opacity: 0;\n border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n opacity: 1;\n}\n\n.toast.show {\n display: block;\n opacity: 1;\n}\n\n.toast.hide {\n display: none;\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: 0.25rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.toast-body {\n padding: 0.75rem;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n transform: none;\n}\n\n.modal-dialog-scrollable {\n display: flex;\n max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 1rem);\n overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n display: block;\n height: calc(100vh - 1rem);\n content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n flex-direction: column;\n justify-content: center;\n height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n content: none;\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: 0.3rem;\n border-top-right-radius: 0.3rem;\n}\n\n.modal-header .close {\n padding: 1rem 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding: 1rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.modal-footer > :not(:first-child) {\n margin-left: .25rem;\n}\n\n.modal-footer > :not(:last-child) {\n margin-right: .25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-scrollable {\n max-height: calc(100% - 3.5rem);\n }\n .modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 3.5rem);\n }\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n .modal-dialog-centered::before {\n height: calc(100vh - 3.5rem);\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n max-width: 800px;\n }\n}\n\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n bottom: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n left: calc((0.5rem + 1px) * -1);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n top: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n right: calc((0.5rem + 1px) * -1);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n transition: 0s 0.6s opacity;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-right {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: no-repeat 50% / 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: .5;\n transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators li {\n transition: none;\n }\n}\n\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg);\n }\n}\n\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded-sm {\n border-radius: 0.2rem !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports (position: sticky) {\n .sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n pointer-events: auto;\n content: \"\";\n background-color: rgba(0, 0, 0, 0);\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n font-weight: lighter !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n font-weight: bolder !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0056b3 !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #494f54 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #19692c !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #0f6674 !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #ba8b00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #a71d2a !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #cbd3da !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #121416 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-break {\n word-break: break-word !important;\n overflow-wrap: break-word !important;\n}\n\n.text-reset {\n color: inherit !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n .table-dark {\n color: inherit;\n }\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover {\n &:hover { @content; }\n}\n\n@mixin hover-focus {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n","// stylelint-disable declaration-no-important, selector-list-comma-newline-after\n\n//\n// Headings\n//\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1, .h1 { @include font-size($h1-font-size); }\nh2, .h2 { @include font-size($h2-font-size); }\nh3, .h3 { @include font-size($h3-font-size); }\nh4, .h4 { @include font-size($h4-font-size); }\nh5, .h5 { @include font-size($h5-font-size); }\nh6, .h6 { @include font-size($h6-font-size); }\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n.display-1 {\n @include font-size($display1-size);\n font-weight: $display1-weight;\n line-height: $display-line-height;\n}\n.display-2 {\n @include font-size($display2-size);\n font-weight: $display2-weight;\n line-height: $display-line-height;\n}\n.display-3 {\n @include font-size($display3-size);\n font-weight: $display3-weight;\n line-height: $display-line-height;\n}\n.display-4 {\n @include font-size($display4-size);\n font-weight: $display4-weight;\n line-height: $display-line-height;\n}\n\n\n//\n// Horizontal rules\n//\n\nhr {\n margin-top: $hr-margin-y;\n margin-bottom: $hr-margin-y;\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n}\n\n\n//\n// Emphasis\n//\n\nsmall,\n.small {\n @include font-size($small-font-size);\n font-weight: $font-weight-normal;\n}\n\nmark,\n.mark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled;\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size(90%);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $spacer;\n @include font-size($blockquote-font-size);\n}\n\n.blockquote-footer {\n display: block;\n @include font-size($blockquote-small-font-size);\n color: $blockquote-small-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all ``s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid;\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid;\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer / 2;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url($file-1x);\n\n // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n // but doesn't convert dppx=>dpi.\n // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n // Compatibility info: https://caniuse.com/#feat=css-media-resolution\n @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n only screen and (min-resolution: 2dppx) { // Standardized\n background-image: url($file-2x);\n background-size: $width-1x $height-1x;\n }\n @include deprecate(\"`img-retina()`\", \"v4.3.0\", \"v5\");\n}\n","// stylelint-disable property-blacklist\n// Single side border-radius\n\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: $radius;\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-top-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n }\n}\n\n@mixin border-top-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-right-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-left-radius($radius) {\n @if $enable-rounded {\n border-bottom-left-radius: $radius;\n }\n}\n","// Inline code\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-break: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n @include box-shadow($kbd-box-shadow);\n\n kbd {\n padding: 0;\n @include font-size(100%);\n font-weight: $nested-kbd-font-weight;\n @include box-shadow(none);\n }\n}\n\n// Blocks of code\npre {\n display: block;\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: $pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n}\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but with 100% width for\n// fluid, full width layouts.\n\n@if $enable-grid-classes {\n .container-fluid {\n @include make-container();\n }\n}\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col#{$infix}-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n width: 100%;\n margin-bottom: $spacer;\n color: $table-color;\n background-color: $table-bg; // Reset for nesting within parents with `background-color`.\n\n th,\n td {\n padding: $table-cell-padding;\n vertical-align: top;\n border-top: $table-border-width solid $table-border-color;\n }\n\n thead th {\n vertical-align: bottom;\n border-bottom: (2 * $table-border-width) solid $table-border-color;\n }\n\n tbody + tbody {\n border-top: (2 * $table-border-width) solid $table-border-color;\n }\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n th,\n td {\n padding: $table-cell-padding-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n\n.table-bordered {\n border: $table-border-width solid $table-border-color;\n\n th,\n td {\n border: $table-border-width solid $table-border-color;\n }\n\n thead {\n th,\n td {\n border-bottom-width: 2 * $table-border-width;\n }\n }\n}\n\n.table-borderless {\n th,\n td,\n thead th,\n tbody + tbody {\n border: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-accent-bg;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n tbody tr {\n @include hover {\n color: $table-hover-color;\n background-color: $table-hover-bg;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n@each $color, $value in $theme-colors {\n @include table-row-variant($color, theme-color-level($color, $table-bg-level), theme-color-level($color, $table-border-level));\n}\n\n@include table-row-variant(active, $table-active-bg);\n\n\n// Dark styles\n//\n// Same table markup, but inverted color scheme: dark background and light text.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.table {\n .thead-dark {\n th {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n border-color: $table-dark-border-color;\n }\n }\n\n .thead-light {\n th {\n color: $table-head-color;\n background-color: $table-head-bg;\n border-color: $table-border-color;\n }\n }\n}\n\n.table-dark {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n\n th,\n td,\n thead th {\n border-color: $table-dark-border-color;\n }\n\n &.table-bordered {\n border: 0;\n }\n\n &.table-striped {\n tbody tr:nth-of-type(odd) {\n background-color: $table-dark-accent-bg;\n }\n }\n\n &.table-hover {\n tbody tr {\n @include hover {\n color: $table-dark-hover-color;\n background-color: $table-dark-hover-bg;\n }\n }\n }\n}\n\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n.table-responsive {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n\n // Prevent double border on horizontal scroll due to use of `display: block;`\n > .table-bordered {\n border: 0;\n }\n }\n }\n }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background, $border: null) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table-#{$state} {\n &,\n > th,\n > td {\n background-color: $background;\n }\n\n @if $border != null {\n th,\n td,\n thead th,\n tbody + tbody {\n border-color: $border;\n }\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover {\n $hover-background: darken($background, 5%);\n\n .table-#{$state} {\n @include hover {\n background-color: $hover-background;\n\n > td,\n > th {\n background-color: $hover-background;\n }\n }\n }\n }\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Textual form controls\n//\n\n.form-control {\n display: block;\n width: 100%;\n height: $input-height;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n\n // Note: This has no effect on `s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n // Unstyle the caret on ` receives focus\n // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to\n // match the appearance of the native widget.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n}\n\n// Make file inputs better match text inputs by forcing them to new lines.\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n\n//\n// Labels\n//\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: calc(#{$input-padding-y} + #{$input-border-width});\n padding-bottom: calc(#{$input-padding-y} + #{$input-border-width});\n margin-bottom: 0; // Override the `
`),a&&(n+=``);const l=Object.keys(s);if(l.length>0){n+="";for(const e of l){let o=s[e];void 0!==o&&(er(o)&&(o=ir(o,r)),n+=``)}n+="
${t(e)}:${t(o)}
"}return n||"{}"}return t(e)}function ir(e,t){return JSON.stringify(e,function(e){const t=[];return function(r,n){if("object"!=typeof n||null===n)return n;const o=t.indexOf(this)+1;return t.length=o,t.length>e?"[Object]":t.indexOf(n)>=0?"[Circular]":(t.push(n),n)}}(t))}class ar{constructor(e){this.options=Object.assign(Object.assign({},nr),e);const t=this.options.id;if(this.call=this.tooltipHandler.bind(this),!this.options.disableDefaultStyle&&!document.getElementById(this.options.styleId)){const e=document.createElement("style");e.setAttribute("id",this.options.styleId),e.innerHTML=function(e){if(!/^[A-Za-z]+[-:.\w]*$/.test(e))throw new Error("Invalid HTML ID");return tr.toString().replace(rr,e)}(t);const r=document.head;r.childNodes.length>0?r.insertBefore(e,r.childNodes[0]):r.appendChild(e)}this.el=document.getElementById(t),this.el||(this.el=document.createElement("div"),this.el.setAttribute("id",t),this.el.classList.add("vg-tooltip"),document.body.appendChild(this.el))}tooltipHandler(e,t,r,n){if(null==n||""===n)return void this.el.classList.remove("visible",this.options.theme+"-theme");this.el.innerHTML=or(n,this.options.sanitize,this.options.maxDepth),this.el.classList.add("visible",this.options.theme+"-theme");const{x:o,y:i}=function(e,t,r,n){let o=e.clientX+r;o+t.width>window.innerWidth&&(o=+e.clientX-r-t.width);let i=e.clientY+n;return i+t.height>window.innerHeight&&(i=+e.clientY-n-t.height),{x:o,y:i}}(t,this.el.getBoundingClientRect(),this.options.offsetX,this.options.offsetY);this.el.setAttribute("style",`top: ${i}px; left: ${o}px`)}}var sr;function lr(e){return e.startsWith("http://")||e.startsWith("https://")||e.startsWith("//")}function cr(e){for(var t=[],r=1;r
',i="
"+r+"",a=window.open("");a.document.write(o+e+i),a.document.title=gr[n]+" JSON Source"}function yr(t,r,n){var o,l,c;return void 0===n&&(n={}),a(this,void 0,void 0,(function(){var a,p,d,u,f,h,v,g;return s(this,(function(s){switch(s.label){case 0:return m=n.loader,a=m&&"load"in m?n.loader:dr.loader(n.loader),e.isString(r)?(f=(u=JSON).parse,[4,a.load(r)]):[3,2];case 1:return d=f.apply(u,[s.sent()]),[3,3];case 2:d=r,s.label=3;case 3:return[4,wr(null!==(o=(p=d).usermeta&&p.usermeta.embedOptions)&&void 0!==o?o:{},a)];case 4:return h=s.sent(),[4,wr(n,a)];case 5:return v=s.sent(),g=i(i({},cr(v,h)),{config:e.mergeConfig(null!==(l=v.config)&&void 0!==l?l:{},null!==(c=h.config)&&void 0!==c?c:{})}),[4,Or(t,p,g,a)];case 6:return[2,s.sent()]}var m}))}))}function wr(t,r){var n;return a(this,void 0,void 0,(function(){var o,a,l,c,p,d,u,f;return s(this,(function(s){switch(s.label){case 0:return e.isString(t.config)?(c=(l=JSON).parse,[4,r.load(t.config)]):[3,2];case 1:return a=c.apply(l,[s.sent()]),[3,3];case 2:a=null!==(n=t.config)&&void 0!==n?n:{},s.label=3;case 3:return o=a,e.isString(t.patch)?(f=(u=JSON).parse,[4,r.load(t.patch)]):[3,5];case 4:return d=f.apply(u,[s.sent()]),[3,6];case 5:d=t.patch,s.label=6;case 6:return p=d,[2,i(i(i({},t),p?{patch:p}:{}),o?{config:o}:{})]}}))}))}function Or(t,r,n,o){var l,c,p,d,u,f;return void 0===n&&(n={}),a(this,void 0,void 0,(function(){function h(){U&&document.removeEventListener("click",U),k.finalize()}var v,g,m,E,b,y,w,O,I,A,N,T,L,$,S,x,C,D,F,P,k,j,z,M,B,G,U,X,V,W,H,q,Y,J,Q,Z,K,ee;return s(this,(function(te){switch(te.label){case 0:if(v=n.theme?e.mergeConfig(Ht[n.theme],null!==(l=n.config)&&void 0!==l?l:{}):n.config,g=e.isBoolean(n.actions)?n.actions:cr({},hr,null!==(c=n.actions)&&void 0!==c?c:{}),m=i(i({},vr),n.i18n),E=null!==(p=n.renderer)&&void 0!==p?p:"canvas",b=null!==(d=n.logLevel)&&void 0!==d?d:dr.Warn,y=null!==(u=n.downloadFileName)&&void 0!==u?u:"visualization",!(w="string"==typeof t?document.querySelector(t):t))throw new Error(t+" does not exist");return!1!==n.defaultStyle&&(O="vega-embed-style",I=function(e){var t,r=e.getRootNode?e.getRootNode():document;return r instanceof ShadowRoot?{root:r,rootContainer:r}:{root:document,rootContainer:null!==(t=document.head)&&void 0!==t?t:document.body}}(w),A=I.root,N=I.rootContainer,A.getElementById(O)||((T=document.createElement("style")).id=O,T.innerText=void 0===n.defaultStyle||!0===n.defaultStyle?'.vega-embed {\n position: relative;\n display: inline-block;\n box-sizing: border-box; }\n .vega-embed.has-actions {\n padding-right: 38px; }\n .vega-embed details:not([open]) > :not(summary) {\n display: none !important; }\n .vega-embed summary {\n list-style: none;\n position: absolute;\n top: 0;\n right: 0;\n padding: 6px;\n z-index: 1000;\n background: white;\n box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1);\n color: #1b1e23;\n border: 1px solid #aaa;\n border-radius: 999px;\n opacity: 0.2;\n transition: opacity 0.4s ease-in;\n outline: none;\n cursor: pointer;\n line-height: 0px; }\n .vega-embed summary::-webkit-details-marker {\n display: none; }\n .vega-embed summary:active {\n box-shadow: #aaa 0px 0px 0px 1px inset; }\n .vega-embed summary svg {\n width: 14px;\n height: 14px; }\n .vega-embed details[open] summary {\n opacity: 0.7; }\n .vega-embed:hover summary,\n .vega-embed:focus summary {\n opacity: 1 !important;\n transition: opacity 0.2s ease; }\n .vega-embed .vega-actions {\n position: absolute;\n z-index: 1001;\n top: 35px;\n right: -9px;\n display: flex;\n flex-direction: column;\n padding-bottom: 8px;\n padding-top: 8px;\n border-radius: 4px;\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.2);\n border: 1px solid #d9d9d9;\n background: white;\n animation-duration: 0.15s;\n animation-name: scale-in;\n animation-timing-function: cubic-bezier(0.2, 0, 0.13, 1.5);\n text-align: left; }\n .vega-embed .vega-actions a {\n padding: 8px 16px;\n font-family: sans-serif;\n font-size: 14px;\n font-weight: 600;\n white-space: nowrap;\n color: #434a56;\n text-decoration: none; }\n .vega-embed .vega-actions a:hover {\n background-color: #f7f7f9;\n color: black; }\n .vega-embed .vega-actions::before, .vega-embed .vega-actions::after {\n content: "";\n display: inline-block;\n position: absolute; }\n .vega-embed .vega-actions::before {\n left: auto;\n right: 14px;\n top: -16px;\n border: 8px solid #0000;\n border-bottom-color: #d9d9d9; }\n .vega-embed .vega-actions::after {\n left: auto;\n right: 15px;\n top: -14px;\n border: 7px solid #0000;\n border-bottom-color: #fff; }\n .vega-embed .chart-wrapper {\n width: 100%;\n height: 100%; }\n\n.vega-embed-wrapper {\n max-width: 100%;\n overflow: scroll;\n padding-right: 14px; }\n\n@keyframes scale-in {\n from {\n opacity: 0;\n transform: scale(0.6); }\n to {\n opacity: 1;\n transform: scale(1); } }\n'.toString():n.defaultStyle,N.appendChild(T))),L=function(e,t){var r;if(e.$schema){var n=ft(e.$schema);t&&t!==n.library&&console.warn("The given visualization spec is written in "+gr[n.library]+", but mode argument sets "+(null!==(r=gr[t])&&void 0!==r?r:t)+".");var o=n.library;return ut.satisfies(mr[o],"^"+n.version.slice(1))||console.warn("The input spec uses "+gr[o]+" "+n.version+", but the current version of "+gr[o]+" is v"+mr[o]+"."),o}return"mark"in e||"encoding"in e||"layer"in e||"hconcat"in e||"vconcat"in e||"facet"in e||"repeat"in e?"vega-lite":"marks"in e||"signals"in e||"scales"in e||"axes"in e?"vega":null!=t?t:"vega"}(r,n.mode),$=Er[L](r,v),"vega-lite"===L&&$.$schema&&(S=ft($.$schema),ut.satisfies(mr.vega,"^"+S.version.slice(1))||console.warn("The compiled spec uses Vega "+S.version+", but current version is v"+mr.vega+".")),w.classList.add("vega-embed"),g&&w.classList.add("has-actions"),w.innerHTML="",x=w,g&&((C=document.createElement("div")).classList.add("chart-wrapper"),w.appendChild(C),x=C),(D=n.patch)&&($=D instanceof Function?D($):R($,D,!0,!1).newDocument),n.formatLocale&&dr.formatLocale(n.formatLocale),n.timeFormatLocale&&dr.timeFormatLocale(n.timeFormatLocale),F=n.ast,P=dr.parse($,"vega-lite"===L?{}:v,{ast:F}),k=new dr.View(P,i({loader:o,logLevel:b,renderer:E},F?{expr:dr.expressionInterpreter}:{})),!1!==n.tooltip&&(j=void 0,re=n.tooltip,j="function"==typeof re?n.tooltip:new ar(!0===n.tooltip?{}:n.tooltip).call,k.tooltip(j)),void 0===(z=n.hover)&&(z="vega"===L),z&&(B=(M="boolean"==typeof z?{}:z).hoverSet,G=M.updateSet,k.hover(B,G)),n&&(null!=n.width&&k.width(n.width),null!=n.height&&k.height(n.height),null!=n.padding&&k.padding(n.padding)),[4,k.initialize(x).runAsync()];case 1:if(te.sent(),!1!==g){if(X=w,!1!==n.defaultStyle&&((V=document.createElement("details")).title=m.CLICK_TO_VIEW_ACTIONS,w.append(V),X=V,(W=document.createElement("summary")).innerHTML='\n\n \n \n \n',V.append(W),U=function(e){V.contains(e.target)||V.removeAttribute("open")},document.addEventListener("click",U)),H=document.createElement("div"),X.append(H),H.classList.add("vega-actions"),!0===g||!1!==g.export)for(q=function(e){if(!0===g||!0===g.export||g.export[e]){var t=m[e.toUpperCase()+"_ACTION"],r=document.createElement("a");r.text=t,r.href="#",r.target="_blank",r.download=y+"."+e,r.addEventListener("mousedown",(function(t){return a(this,void 0,void 0,(function(){var r;return s(this,(function(o){switch(o.label){case 0:return t.preventDefault(),[4,k.toImageURL(e,n.scaleFactor)];case 1:return r=o.sent(),this.href=r,[2]}}))}))})),H.append(r)}},Y=0,J=["svg","png"];Y1&&(e.isString(t[0])&&!lr(t[0])||Ar(t[0])||3===t.length)?yr(t[0],t[1],t[2]):Ir(t[0],t[1])};return Rr.vegaLite=ur,Rr.vl=ur,Rr.container=Ir,Rr.embed=yr,Rr.vega=dr,Rr.default=yr,Rr.version="6.12.2",Rr})); -//# sourceMappingURL=vega-embed.min.js.map diff --git a/src/citationnet/static/js/vega-lite.min.js.map b/src/citationnet/static/js/vega-lite.min.js.map deleted file mode 100644 index 46c509b..0000000 --- a/src/citationnet/static/js/vega-lite.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"vega-lite.min.js","sources":["../node_modules/array-flat-polyfill/index.mjs","../node_modules/clone/clone.js","../node_modules/fast-json-stable-stringify/index.js","../src/logical.ts","../src/util.ts","../node_modules/fast-deep-equal/index.js","../src/channel.ts","../src/aggregate.ts","../src/bin.ts","../src/expr.ts","../src/title.ts","../src/vega.schema.ts","../src/compile/common.ts","../src/log/message.ts","../src/log/index.ts","../src/datetime.ts","../src/timeunit.ts","../src/predicate.ts","../src/type.ts","../src/scale.ts","../src/mark.ts","../src/compile/mark/encode/valueref.ts","../src/compile/format.ts","../src/sort.ts","../src/spec/facet.ts","../src/channeldef.ts","../src/axis.ts","../src/spec/unit.ts","../src/compositemark/base.ts","../src/encoding.ts","../src/compositemark/common.ts","../src/compositemark/boxplot.ts","../src/compositemark/errorbar.ts","../src/compositemark/errorband.ts","../src/compositemark/index.ts","../src/guide.ts","../src/header.ts","../src/legend.ts","../src/selection.ts","../src/parameter.ts","../src/spec/concat.ts","../src/spec/toplevel.ts","../src/spec/base.ts","../src/config.ts","../src/spec/layer.ts","../src/spec/map.ts","../src/spec/repeat.ts","../src/stack.ts","../src/normalize/pathoverlay.ts","../src/normalize/repeater.ts","../src/normalize/ruleforrangedline.ts","../src/normalize/core.ts","../src/transform.ts","../src/normalize/selectioncompat.ts","../src/normalize/toplevelselection.ts","../src/normalize/index.ts","../src/compile/split.ts","../src/compile/data/index.ts","../src/data.ts","../node_modules/vega-event-selector/build/vega-event-selector.module.js","../src/compile/selection/assemble.ts","../src/compile/data/dataflow.ts","../src/compile/data/timeunit.ts","../src/compile/selection/project.ts","../src/compile/selection/scales.ts","../src/compile/selection/interval.ts","../src/compile/selection/point.ts","../src/compile/mark/encode/conditional.ts","../src/compile/mark/encode/text.ts","../src/compile/mark/encode/tooltip.ts","../src/compile/mark/encode/aria.ts","../src/compile/mark/encode/nonposition.ts","../src/compile/mark/encode/color.ts","../src/compile/mark/encode/zindex.ts","../src/compile/mark/encode/offset.ts","../src/compile/mark/encode/position-point.ts","../src/compile/mark/encode/position-align.ts","../src/compile/mark/encode/position-range.ts","../src/compile/mark/encode/position-rect.ts","../src/compile/mark/encode/base.ts","../src/compile/mark/encode/defined.ts","../src/compile/selection/nearest.ts","../src/compile/selection/inputs.ts","../src/compile/selection/toggle.ts","../src/compile/selection/clear.ts","../src/compile/selection/legends.ts","../src/compile/selection/translate.ts","../src/compile/selection/zoom.ts","../src/compile/selection/index.ts","../node_modules/vega-expression/build/vega-expression.module.js","../src/compile/data/expressions.ts","../src/compile/data/filter.ts","../src/compile/selection/parse.ts","../src/compile/predicate.ts","../src/compile/axis/assemble.ts","../src/compile/axis/config.ts","../src/compile/axis/properties.ts","../src/compile/data/calculate.ts","../src/compile/header/common.ts","../src/compile/header/component.ts","../src/compile/header/assemble.ts","../src/compile/layoutsize/assemble.ts","../src/compile/layoutsize/component.ts","../src/compile/guide.ts","../src/compile/resolve.ts","../src/compile/legend/component.ts","../src/compile/legend/encode.ts","../src/compile/legend/properties.ts","../src/compile/legend/parse.ts","../src/compile/legend/assemble.ts","../src/compile/projection/assemble.ts","../src/projection.ts","../src/compile/projection/component.ts","../src/compile/projection/parse.ts","../src/compile/data/bin.ts","../src/compile/data/aggregate.ts","../src/compile/data/facet.ts","../src/compile/data/formatparse.ts","../src/compile/data/identifier.ts","../src/compile/data/graticule.ts","../src/compile/data/sequence.ts","../src/compile/data/source.ts","../src/compile/data/optimizer.ts","../src/compile/data/optimizers.ts","../src/compile/data/joinaggregate.ts","../src/compile/data/stack.ts","../src/compile/data/window.ts","../src/compile/data/subtree.ts","../src/compile/data/optimize.ts","../src/compile/signal.ts","../src/compile/scale/domain.ts","../src/compile/scale/assemble.ts","../src/compile/scale/component.ts","../src/compile/scale/range.ts","../src/compile/scale/properties.ts","../src/compile/scale/type.ts","../src/compile/scale/parse.ts","../src/compile/model.ts","../src/compile/data/density.ts","../src/compile/data/filterinvalid.ts","../src/compile/data/flatten.ts","../src/compile/data/fold.ts","../src/compile/data/geojson.ts","../src/compile/data/geopoint.ts","../src/compile/data/impute.ts","../src/compile/data/loess.ts","../src/compile/data/lookup.ts","../src/compile/data/quantile.ts","../src/compile/data/regression.ts","../src/compile/data/pivot.ts","../src/compile/data/sample.ts","../src/compile/data/assemble.ts","../src/compile/header/parse.ts","../src/compile/layoutsize/parse.ts","../src/compile/facet.ts","../src/compile/data/parse.ts","../src/compile/data/joinaggregatefacet.ts","../src/compile/concat.ts","../src/compile/axis/component.ts","../src/compile/axis/parse.ts","../src/compile/axis/encode.ts","../src/compile/mark/init.ts","../src/compile/mark/point.ts","../src/compile/mark/text.ts","../src/compile/mark/tick.ts","../src/compile/mark/mark.ts","../src/compile/mark/arc.ts","../src/compile/mark/area.ts","../src/compile/mark/bar.ts","../src/compile/mark/geoshape.ts","../src/compile/mark/image.ts","../src/compile/mark/line.ts","../src/compile/mark/rect.ts","../src/compile/mark/rule.ts","../src/compile/unit.ts","../src/compile/layoutsize/init.ts","../src/compile/layer.ts","../src/compile/buildmodel.ts","../src/index.ts","../src/compile/compile.ts"],"sourcesContent":["Array.prototype.flat||Object.defineProperty(Array.prototype,\"flat\",{configurable:!0,value:function r(){var t=isNaN(arguments[0])?1:Number(arguments[0]);return t?Array.prototype.reduce.call(this,function(a,e){return Array.isArray(e)?a.push.apply(a,r.call(e,t-1)):a.push(e),a},[]):Array.prototype.slice.call(this)},writable:!0}),Array.prototype.flatMap||Object.defineProperty(Array.prototype,\"flatMap\",{configurable:!0,value:function(r){return Array.prototype.map.apply(this,arguments).flat()},writable:!0})\n","var clone = (function() {\n'use strict';\n\nfunction _instanceof(obj, type) {\n return type != null && obj instanceof type;\n}\n\nvar nativeMap;\ntry {\n nativeMap = Map;\n} catch(_) {\n // maybe a reference error because no `Map`. Give it a dummy value that no\n // value will ever be an instanceof.\n nativeMap = function() {};\n}\n\nvar nativeSet;\ntry {\n nativeSet = Set;\n} catch(_) {\n nativeSet = function() {};\n}\n\nvar nativePromise;\ntry {\n nativePromise = Promise;\n} catch(_) {\n nativePromise = function() {};\n}\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n * circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n * a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n * (optional - defaults to parent prototype).\n * @param `includeNonEnumerable` - set to true if the non-enumerable properties\n * should be cloned as well. Non-enumerable properties on the prototype\n * chain will be ignored. (optional - false by default)\n*/\nfunction clone(parent, circular, depth, prototype, includeNonEnumerable) {\n if (typeof circular === 'object') {\n depth = circular.depth;\n prototype = circular.prototype;\n includeNonEnumerable = circular.includeNonEnumerable;\n circular = circular.circular;\n }\n // maintain two arrays for circular references, where corresponding parents\n // and children have the same index\n var allParents = [];\n var allChildren = [];\n\n var useBuffer = typeof Buffer != 'undefined';\n\n if (typeof circular == 'undefined')\n circular = true;\n\n if (typeof depth == 'undefined')\n depth = Infinity;\n\n // recurse this function so we don't reset allParents and allChildren\n function _clone(parent, depth) {\n // cloning null always returns null\n if (parent === null)\n return null;\n\n if (depth === 0)\n return parent;\n\n var child;\n var proto;\n if (typeof parent != 'object') {\n return parent;\n }\n\n if (_instanceof(parent, nativeMap)) {\n child = new nativeMap();\n } else if (_instanceof(parent, nativeSet)) {\n child = new nativeSet();\n } else if (_instanceof(parent, nativePromise)) {\n child = new nativePromise(function (resolve, reject) {\n parent.then(function(value) {\n resolve(_clone(value, depth - 1));\n }, function(err) {\n reject(_clone(err, depth - 1));\n });\n });\n } else if (clone.__isArray(parent)) {\n child = [];\n } else if (clone.__isRegExp(parent)) {\n child = new RegExp(parent.source, __getRegExpFlags(parent));\n if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n } else if (clone.__isDate(parent)) {\n child = new Date(parent.getTime());\n } else if (useBuffer && Buffer.isBuffer(parent)) {\n if (Buffer.allocUnsafe) {\n // Node.js >= 4.5.0\n child = Buffer.allocUnsafe(parent.length);\n } else {\n // Older Node.js versions\n child = new Buffer(parent.length);\n }\n parent.copy(child);\n return child;\n } else if (_instanceof(parent, Error)) {\n child = Object.create(parent);\n } else {\n if (typeof prototype == 'undefined') {\n proto = Object.getPrototypeOf(parent);\n child = Object.create(proto);\n }\n else {\n child = Object.create(prototype);\n proto = prototype;\n }\n }\n\n if (circular) {\n var index = allParents.indexOf(parent);\n\n if (index != -1) {\n return allChildren[index];\n }\n allParents.push(parent);\n allChildren.push(child);\n }\n\n if (_instanceof(parent, nativeMap)) {\n parent.forEach(function(value, key) {\n var keyChild = _clone(key, depth - 1);\n var valueChild = _clone(value, depth - 1);\n child.set(keyChild, valueChild);\n });\n }\n if (_instanceof(parent, nativeSet)) {\n parent.forEach(function(value) {\n var entryChild = _clone(value, depth - 1);\n child.add(entryChild);\n });\n }\n\n for (var i in parent) {\n var attrs;\n if (proto) {\n attrs = Object.getOwnPropertyDescriptor(proto, i);\n }\n\n if (attrs && attrs.set == null) {\n continue;\n }\n child[i] = _clone(parent[i], depth - 1);\n }\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(parent);\n for (var i = 0; i < symbols.length; i++) {\n // Don't need to worry about cloning a symbol because it is a primitive,\n // like a number or string.\n var symbol = symbols[i];\n var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);\n if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {\n continue;\n }\n child[symbol] = _clone(parent[symbol], depth - 1);\n if (!descriptor.enumerable) {\n Object.defineProperty(child, symbol, {\n enumerable: false\n });\n }\n }\n }\n\n if (includeNonEnumerable) {\n var allPropertyNames = Object.getOwnPropertyNames(parent);\n for (var i = 0; i < allPropertyNames.length; i++) {\n var propertyName = allPropertyNames[i];\n var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);\n if (descriptor && descriptor.enumerable) {\n continue;\n }\n child[propertyName] = _clone(parent[propertyName], depth - 1);\n Object.defineProperty(child, propertyName, {\n enumerable: false\n });\n }\n }\n\n return child;\n }\n\n return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n if (parent === null)\n return null;\n\n var c = function () {};\n c.prototype = parent;\n return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n return Object.prototype.toString.call(o);\n}\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Date]';\n}\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Array]';\n}\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n}\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n var flags = '';\n if (re.global) flags += 'g';\n if (re.ignoreCase) flags += 'i';\n if (re.multiline) flags += 'm';\n return flags;\n}\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n module.exports = clone;\n}\n","'use strict';\n\nmodule.exports = function (data, opts) {\n if (!opts) opts = {};\n if (typeof opts === 'function') opts = { cmp: opts };\n var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;\n\n var cmp = opts.cmp && (function (f) {\n return function (node) {\n return function (a, b) {\n var aobj = { key: a, value: node[a] };\n var bobj = { key: b, value: node[b] };\n return f(aobj, bobj);\n };\n };\n })(opts.cmp);\n\n var seen = [];\n return (function stringify (node) {\n if (node && node.toJSON && typeof node.toJSON === 'function') {\n node = node.toJSON();\n }\n\n if (node === undefined) return;\n if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';\n if (typeof node !== 'object') return JSON.stringify(node);\n\n var i, out;\n if (Array.isArray(node)) {\n out = '[';\n for (i = 0; i < node.length; i++) {\n if (i) out += ',';\n out += stringify(node[i]) || 'null';\n }\n return out + ']';\n }\n\n if (node === null) return 'null';\n\n if (seen.indexOf(node) !== -1) {\n if (cycles) return JSON.stringify('__cycle__');\n throw new TypeError('Converting circular structure to JSON');\n }\n\n var seenIndex = seen.push(node) - 1;\n var keys = Object.keys(node).sort(cmp && cmp(node));\n out = '';\n for (i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = stringify(node[key]);\n\n if (!value) continue;\n if (out) out += ',';\n out += JSON.stringify(key) + ':' + value;\n }\n seen.splice(seenIndex, 1);\n return '{' + out + '}';\n })(data);\n};\n","export type LogicalComposition = LogicalNot | LogicalAnd | LogicalOr | T;\n\nexport interface LogicalOr {\n or: LogicalComposition[];\n}\n\nexport interface LogicalAnd {\n and: LogicalComposition[];\n}\n\nexport interface LogicalNot {\n not: LogicalComposition;\n}\n\nexport function isLogicalOr(op: LogicalComposition): op is LogicalOr {\n return !!op.or;\n}\n\nexport function isLogicalAnd(op: LogicalComposition): op is LogicalAnd {\n return !!op.and;\n}\n\nexport function isLogicalNot(op: LogicalComposition): op is LogicalNot {\n return !!op.not;\n}\n\nexport function forEachLeaf(op: LogicalComposition, fn: (op: T) => void) {\n if (isLogicalNot(op)) {\n forEachLeaf(op.not, fn);\n } else if (isLogicalAnd(op)) {\n for (const subop of op.and) {\n forEachLeaf(subop, fn);\n }\n } else if (isLogicalOr(op)) {\n for (const subop of op.or) {\n forEachLeaf(subop, fn);\n }\n } else {\n fn(op);\n }\n}\n\nexport function normalizeLogicalComposition(\n op: LogicalComposition,\n normalizer: (o: T) => T\n): LogicalComposition {\n if (isLogicalNot(op)) {\n return {not: normalizeLogicalComposition(op.not, normalizer)};\n } else if (isLogicalAnd(op)) {\n return {and: op.and.map(o => normalizeLogicalComposition(o, normalizer))};\n } else if (isLogicalOr(op)) {\n return {or: op.or.map(o => normalizeLogicalComposition(o, normalizer))};\n } else {\n return normalizer(op);\n }\n}\n","import 'array-flat-polyfill';\nimport {default as clone_} from 'clone';\nimport deepEqual_ from 'fast-deep-equal';\nimport stableStringify from 'fast-json-stable-stringify';\nimport {hasOwnProperty, isNumber, isString, splitAccessPath, stringValue, writeConfig} from 'vega-util';\nimport {isLogicalAnd, isLogicalNot, isLogicalOr, LogicalComposition} from './logical';\n\nexport const deepEqual = deepEqual_;\nexport const duplicate = clone_;\n\n/**\n * Creates an object composed of the picked object properties.\n *\n * var object = {'a': 1, 'b': '2', 'c': 3};\n * pick(object, ['a', 'c']);\n * // → {'a': 1, 'c': 3}\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function pick(obj: T, props: readonly K[]): Pick {\n const copy: any = {};\n for (const prop of props) {\n if (hasOwnProperty(obj, prop)) {\n copy[prop] = obj[prop];\n }\n }\n return copy;\n}\n\n/**\n * The opposite of _.pick; this method creates an object composed of the own\n * and inherited enumerable string keyed properties of object that are not omitted.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function omit(obj: T, props: readonly K[]): Omit {\n const copy = {...(obj as any)};\n for (const prop of props) {\n delete copy[prop];\n }\n return copy;\n}\n\n/**\n * Monkey patch Set so that `stringify` produces a string representation of sets.\n */\nSet.prototype['toJSON'] = function () {\n return `Set(${[...this].map(x => stableStringify(x)).join(',')})`;\n};\n\n/**\n * Converts any object to a string representation that can be consumed by humans.\n */\nexport const stringify = stableStringify;\n\n/**\n * Converts any object to a string of limited size, or a number.\n */\nexport function hash(a: any): string | number {\n if (isNumber(a)) {\n return a;\n }\n\n const str = isString(a) ? a : stableStringify(a);\n\n // short strings can be used as hash directly, longer strings are hashed to reduce memory usage\n if (str.length < 250) {\n return str;\n }\n\n // from http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/\n let h = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n h = (h << 5) - h + char;\n h = h & h; // Convert to 32bit integer\n }\n return h;\n}\n\nexport function isNullOrFalse(x: any): x is false | null {\n return x === false || x === null;\n}\n\nexport function contains(array: readonly T[], item: T) {\n return array.includes(item);\n}\n\n/**\n * Returns true if any item returns true.\n */\nexport function some(arr: readonly T[], f: (d: T, k?: any, i?: any) => boolean) {\n let i = 0;\n for (const [k, a] of arr.entries()) {\n if (f(a, k, i++)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Returns true if all items return true.\n */\nexport function every(arr: readonly T[], f: (d: T, k?: any, i?: any) => boolean) {\n let i = 0;\n for (const [k, a] of arr.entries()) {\n if (!f(a, k, i++)) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Like TS Partial but applies recursively to all properties.\n */\nexport type DeepPartial = {[P in keyof T]?: DeepPartial};\n\n/**\n * recursively merges src into dest\n */\nexport function mergeDeep(dest: T, ...src: readonly DeepPartial[]): T {\n for (const s of src) {\n deepMerge_(dest, s ?? {});\n }\n return dest;\n}\n\nfunction deepMerge_(dest: any, src: any) {\n for (const property of keys(src)) {\n writeConfig(dest, property, src[property], true);\n }\n}\n\nexport function unique(values: readonly T[], f: (item: T) => string | number): T[] {\n const results: T[] = [];\n const u = {};\n let v: string | number;\n for (const val of values) {\n v = f(val);\n if (v in u) {\n continue;\n }\n u[v] = 1;\n results.push(val);\n }\n return results;\n}\n\nexport type Dict = Record;\n\n/**\n * Returns true if the two dictionaries disagree. Applies only to defined values.\n */\nexport function isEqual(dict: Dict, other: Dict) {\n const dictKeys = keys(dict);\n const otherKeys = keys(other);\n if (dictKeys.length !== otherKeys.length) {\n return false;\n }\n for (const key of dictKeys) {\n if (dict[key] !== other[key]) {\n return false;\n }\n }\n return true;\n}\n\nexport function setEqual(a: Set, b: Set) {\n if (a.size !== b.size) {\n return false;\n }\n for (const e of a) {\n if (!b.has(e)) {\n return false;\n }\n }\n return true;\n}\n\nexport function hasIntersection(a: ReadonlySet, b: ReadonlySet) {\n for (const key of a) {\n if (b.has(key)) {\n return true;\n }\n }\n return false;\n}\n\nexport function prefixGenerator(a: ReadonlySet): ReadonlySet {\n const prefixes = new Set();\n for (const x of a) {\n const splitField = splitAccessPath(x);\n // Wrap every element other than the first in `[]`\n const wrappedWithAccessors = splitField.map((y, i) => (i === 0 ? y : `[${y}]`));\n const computedPrefixes = wrappedWithAccessors.map((_, i) => wrappedWithAccessors.slice(0, i + 1).join(''));\n for (const y of computedPrefixes) {\n prefixes.add(y);\n }\n }\n return prefixes;\n}\n\n/**\n * Returns true if a and b have an intersection. Also return true if a or b are undefined\n * since this means we don't know what fields a node produces or depends on.\n */\nexport function fieldIntersection(a: ReadonlySet, b: ReadonlySet): boolean {\n if (a === undefined || b === undefined) {\n return true;\n }\n return hasIntersection(prefixGenerator(a), prefixGenerator(b));\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isEmpty(obj: object) {\n return keys(obj).length === 0;\n}\n\n// This is a stricter version of Object.keys but with better types. See https://github.com/Microsoft/TypeScript/pull/12253#issuecomment-263132208\nexport const keys = Object.keys as (o: T) => Extract[];\n\nexport const vals = Object.values;\n\nexport const entries = Object.entries;\n\n// Using mapped type to declare a collect of flags for a string literal type S\n// https://www.typescriptlang.org/docs/handbook/advanced-types.html#mapped-types\nexport type Flag = {[K in S]: 1};\n\nexport function isBoolean(b: any): b is boolean {\n return b === true || b === false;\n}\n\n/**\n * Convert a string into a valid variable name\n */\nexport function varName(s: string): string {\n // Replace non-alphanumeric characters (anything besides a-zA-Z0-9_) with _\n const alphanumericS = s.replace(/\\W/g, '_');\n\n // Add _ if the string has leading numbers.\n return (s.match(/^\\d+/) ? '_' : '') + alphanumericS;\n}\n\nexport function logicalExpr(op: LogicalComposition, cb: (...args: readonly any[]) => string): string {\n if (isLogicalNot(op)) {\n return `!(${logicalExpr(op.not, cb)})`;\n } else if (isLogicalAnd(op)) {\n return `(${op.and.map((and: LogicalComposition) => logicalExpr(and, cb)).join(') && (')})`;\n } else if (isLogicalOr(op)) {\n return `(${op.or.map((or: LogicalComposition) => logicalExpr(or, cb)).join(') || (')})`;\n } else {\n return cb(op);\n }\n}\n\n/**\n * Delete nested property of an object, and delete the ancestors of the property if they become empty.\n */\nexport function deleteNestedProperty(obj: any, orderedProps: string[]) {\n if (orderedProps.length === 0) {\n return true;\n }\n const prop = orderedProps.shift()!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n if (prop in obj && deleteNestedProperty(obj[prop], orderedProps)) {\n delete obj[prop];\n }\n return isEmpty(obj);\n}\n\nexport function titleCase(s: string) {\n return s.charAt(0).toUpperCase() + s.substr(1);\n}\n\n/**\n * Converts a path to an access path with datum.\n * @param path The field name.\n * @param datum The string to use for `datum`.\n */\nexport function accessPathWithDatum(path: string, datum = 'datum') {\n const pieces = splitAccessPath(path);\n const prefixes = [];\n for (let i = 1; i <= pieces.length; i++) {\n const prefix = `[${pieces.slice(0, i).map(stringValue).join('][')}]`;\n prefixes.push(`${datum}${prefix}`);\n }\n return prefixes.join(' && ');\n}\n\n/**\n * Return access with datum to the flattened field.\n *\n * @param path The field name.\n * @param datum The string to use for `datum`.\n */\nexport function flatAccessWithDatum(path: string, datum: 'datum' | 'parent' | 'datum.datum' = 'datum') {\n return `${datum}[${stringValue(splitAccessPath(path).join('.'))}]`;\n}\n\nfunction escapePathAccess(string: string) {\n return string.replace(/(\\[|\\]|\\.|'|\")/g, '\\\\$1');\n}\n\n/**\n * Replaces path accesses with access to non-nested field.\n * For example, `foo[\"bar\"].baz` becomes `foo\\\\.bar\\\\.baz`.\n */\nexport function replacePathInField(path: string) {\n return `${splitAccessPath(path).map(escapePathAccess).join('\\\\.')}`;\n}\n\n/**\n * Replace all occurrences of a string with another string.\n *\n * @param string the string to replace in\n * @param find the string to replace\n * @param replacement the replacement\n */\nexport function replaceAll(string: string, find: string, replacement: string) {\n return string.replace(new RegExp(find.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'g'), replacement);\n}\n\n/**\n * Remove path accesses with access from field.\n * For example, `foo[\"bar\"].baz` becomes `foo.bar.baz`.\n */\nexport function removePathFromField(path: string) {\n return `${splitAccessPath(path).join('.')}`;\n}\n\n/**\n * Count the depth of the path. Returns 1 for fields that are not nested.\n */\nexport function accessPathDepth(path: string) {\n if (!path) {\n return 0;\n }\n return splitAccessPath(path).length;\n}\n\n/**\n * This is a replacement for chained || for numeric properties or properties that respect null so that 0 will be included.\n */\nexport function getFirstDefined(...args: readonly T[]): T | undefined {\n for (const arg of args) {\n if (arg !== undefined) {\n return arg;\n }\n }\n return undefined;\n}\n\n// variable used to generate id\nlet idCounter = 42;\n\n/**\n * Returns a new random id every time it gets called.\n *\n * Has side effect!\n */\nexport function uniqueId(prefix?: string) {\n const id = ++idCounter;\n return prefix ? String(prefix) + id : id;\n}\n\n/**\n * Resets the id counter used in uniqueId. This can be useful for testing.\n */\nexport function resetIdCounter() {\n idCounter = 42;\n}\n\nexport function internalField(name: string) {\n return isInternalField(name) ? name : `__${name}`;\n}\n\nexport function isInternalField(name: string) {\n return name.startsWith('__');\n}\n\n/**\n * Normalize angle to be within [0,360).\n */\nexport function normalizeAngle(angle: number) {\n if (angle === undefined) {\n return undefined;\n }\n return ((angle % 360) + 360) % 360;\n}\n\n/**\n * Returns whether the passed in value is a valid number.\n */\nexport function isNumeric(value: number | string): boolean {\n if (isNumber(value)) {\n return true;\n }\n return !isNaN(value as any) && !isNaN(parseFloat(value));\n}\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","/*\n * Constants and utilities for encoding channels (Visual variables)\n * such as 'x', 'y', 'color'.\n */\n\nimport {RangeType} from './compile/scale/type';\nimport {Encoding} from './encoding';\nimport {Mark} from './mark';\nimport {EncodingFacetMapping} from './spec/facet';\nimport {Flag, keys} from './util';\n\nexport type Channel = keyof Encoding;\nexport type ExtendedChannel = Channel | FacetChannel;\n\n// Facet\nexport const ROW = 'row' as const;\nexport const COLUMN = 'column' as const;\n\nexport const FACET = 'facet' as const;\n\n// Position\nexport const X = 'x' as const;\nexport const Y = 'y' as const;\nexport const X2 = 'x2' as const;\nexport const Y2 = 'y2' as const;\n\n// Arc-Position\nexport const RADIUS = 'radius' as const;\nexport const RADIUS2 = 'radius2' as const;\nexport const THETA = 'theta' as const;\nexport const THETA2 = 'theta2' as const;\n\n// Geo Position\nexport const LATITUDE = 'latitude' as const;\nexport const LONGITUDE = 'longitude' as const;\nexport const LATITUDE2 = 'latitude2' as const;\nexport const LONGITUDE2 = 'longitude2' as const;\n\n// Mark property with scale\nexport const COLOR = 'color' as const;\n\nexport const FILL = 'fill' as const;\n\nexport const STROKE = 'stroke' as const;\n\nexport const SHAPE = 'shape' as const;\nexport const SIZE = 'size' as const;\n\nexport const ANGLE = 'angle' as const;\n\nexport const OPACITY = 'opacity' as const;\nexport const FILLOPACITY = 'fillOpacity' as const;\n\nexport const STROKEOPACITY = 'strokeOpacity' as const;\n\nexport const STROKEWIDTH = 'strokeWidth' as const;\nexport const STROKEDASH = 'strokeDash' as const;\n\n// Non-scale channel\nexport const TEXT = 'text' as const;\nexport const ORDER = 'order' as const;\nexport const DETAIL = 'detail' as const;\nexport const KEY = 'key' as const;\n\nexport const TOOLTIP = 'tooltip' as const;\nexport const HREF = 'href' as const;\n\nexport const URL = 'url' as const;\nexport const DESCRIPTION = 'description' as const;\n\nconst POSITION_CHANNEL_INDEX = {\n x: 1,\n y: 1,\n x2: 1,\n y2: 1\n} as const;\n\nexport type PositionChannel = keyof typeof POSITION_CHANNEL_INDEX;\n\nconst POLAR_POSITION_CHANNEL_INDEX = {\n theta: 1,\n theta2: 1,\n radius: 1,\n radius2: 1\n} as const;\n\nexport type PolarPositionChannel = keyof typeof POLAR_POSITION_CHANNEL_INDEX;\n\nexport function isPolarPositionChannel(c: Channel): c is PolarPositionChannel {\n return c in POLAR_POSITION_CHANNEL_INDEX;\n}\n\nconst GEO_POSIITON_CHANNEL_INDEX = {\n longitude: 1,\n longitude2: 1,\n latitude: 1,\n latitude2: 1\n} as const;\n\nexport type GeoPositionChannel = keyof typeof GEO_POSIITON_CHANNEL_INDEX;\n\nexport function getPositionChannelFromLatLong(channel: GeoPositionChannel): PositionChannel {\n switch (channel) {\n case LATITUDE:\n return 'y';\n case LATITUDE2:\n return 'y2';\n case LONGITUDE:\n return 'x';\n case LONGITUDE2:\n return 'x2';\n }\n}\n\nexport function isGeoPositionChannel(c: Channel): c is GeoPositionChannel {\n return c in GEO_POSIITON_CHANNEL_INDEX;\n}\n\nexport const GEOPOSITION_CHANNELS = keys(GEO_POSIITON_CHANNEL_INDEX);\n\nconst UNIT_CHANNEL_INDEX: Flag = {\n ...POSITION_CHANNEL_INDEX,\n ...POLAR_POSITION_CHANNEL_INDEX,\n\n ...GEO_POSIITON_CHANNEL_INDEX,\n\n // color\n color: 1,\n fill: 1,\n stroke: 1,\n\n // other non-position with scale\n opacity: 1,\n fillOpacity: 1,\n strokeOpacity: 1,\n\n strokeWidth: 1,\n strokeDash: 1,\n size: 1,\n angle: 1,\n shape: 1,\n\n // channels without scales\n order: 1,\n text: 1,\n detail: 1,\n key: 1,\n tooltip: 1,\n href: 1,\n url: 1,\n description: 1\n};\n\nexport type ColorChannel = 'color' | 'fill' | 'stroke';\n\nexport function isColorChannel(channel: Channel): channel is ColorChannel {\n return channel === COLOR || channel === FILL || channel === STROKE;\n}\n\nexport type FacetChannel = keyof EncodingFacetMapping;\n\nconst FACET_CHANNEL_INDEX: Flag> = {\n row: 1,\n column: 1,\n facet: 1\n};\n\nexport const FACET_CHANNELS = keys(FACET_CHANNEL_INDEX);\n\nconst CHANNEL_INDEX = {\n ...UNIT_CHANNEL_INDEX,\n ...FACET_CHANNEL_INDEX\n};\n\nexport const CHANNELS = keys(CHANNEL_INDEX);\n\nconst {order: _o, detail: _d, tooltip: _tt1, ...SINGLE_DEF_CHANNEL_INDEX} = CHANNEL_INDEX;\nconst {row: _r, column: _c, facet: _f, ...SINGLE_DEF_UNIT_CHANNEL_INDEX} = SINGLE_DEF_CHANNEL_INDEX;\n/**\n * Channels that cannot have an array of channelDef.\n * model.fieldDef, getFieldDef only work for these channels.\n *\n * (The only two channels that can have an array of channelDefs are \"detail\" and \"order\".\n * Since there can be multiple fieldDefs for detail and order, getFieldDef/model.fieldDef\n * are not applicable for them. Similarly, selection projection won't work with \"detail\" and \"order\".)\n */\n\nexport const SINGLE_DEF_CHANNELS = keys(SINGLE_DEF_CHANNEL_INDEX);\n\nexport type SingleDefChannel = typeof SINGLE_DEF_CHANNELS[number];\n\nexport const SINGLE_DEF_UNIT_CHANNELS = keys(SINGLE_DEF_UNIT_CHANNEL_INDEX);\n\nexport type SingleDefUnitChannel = typeof SINGLE_DEF_UNIT_CHANNELS[number];\n\nexport function isSingleDefUnitChannel(str: string): str is SingleDefUnitChannel {\n return !!SINGLE_DEF_UNIT_CHANNEL_INDEX[str];\n}\n\nexport function isChannel(str: string): str is Channel {\n return !!CHANNEL_INDEX[str];\n}\n\nexport type SecondaryRangeChannel = 'x2' | 'y2' | 'latitude2' | 'longitude2' | 'theta2' | 'radius2';\n\nexport const SECONDARY_RANGE_CHANNEL: SecondaryRangeChannel[] = [X2, Y2, LATITUDE2, LONGITUDE2, THETA2, RADIUS2];\n\nexport function isSecondaryRangeChannel(c: ExtendedChannel): c is SecondaryRangeChannel {\n const main = getMainRangeChannel(c);\n return main !== c;\n}\n\nexport type MainChannelOf = C extends 'x2'\n ? 'x'\n : C extends 'y2'\n ? 'y'\n : C extends 'latitude2'\n ? 'latitude'\n : C extends 'longitude2'\n ? 'longitude'\n : C extends 'theta2'\n ? 'theta'\n : C extends 'radius2'\n ? 'radius'\n : C;\n\n/**\n * Get the main channel for a range channel. E.g. `x` for `x2`.\n */\nexport function getMainRangeChannel(channel: C): MainChannelOf {\n switch (channel) {\n case X2:\n return X as MainChannelOf;\n case Y2:\n return Y as MainChannelOf;\n case LATITUDE2:\n return LATITUDE as MainChannelOf;\n case LONGITUDE2:\n return LONGITUDE as MainChannelOf;\n case THETA2:\n return THETA as MainChannelOf;\n case RADIUS2:\n return RADIUS as MainChannelOf;\n }\n return channel as MainChannelOf;\n}\n\nexport type SecondaryChannelOf = C extends 'x'\n ? 'x2'\n : C extends 'y'\n ? 'y2'\n : C extends 'latitude'\n ? 'latitude2'\n : C extends 'longitude'\n ? 'longitude2'\n : C extends 'theta'\n ? 'theta2'\n : C extends 'radius'\n ? 'radius2'\n : undefined;\n\nexport function getVgPositionChannel(channel: PolarPositionChannel | PositionChannel) {\n if (isPolarPositionChannel(channel)) {\n switch (channel) {\n case THETA:\n return 'startAngle';\n case THETA2:\n return 'endAngle';\n case RADIUS:\n return 'outerRadius';\n case RADIUS2:\n return 'innerRadius';\n }\n }\n return channel;\n}\n\n/**\n * Get the main channel for a range channel. E.g. `x` for `x2`.\n */\nexport function getSecondaryRangeChannel(channel: C): SecondaryChannelOf | undefined {\n switch (channel) {\n case X:\n return X2 as SecondaryChannelOf;\n case Y:\n return Y2 as SecondaryChannelOf;\n case LATITUDE:\n return LATITUDE2 as SecondaryChannelOf;\n case LONGITUDE:\n return LONGITUDE2 as SecondaryChannelOf;\n case THETA:\n return THETA2 as SecondaryChannelOf;\n case RADIUS:\n return RADIUS2 as SecondaryChannelOf;\n }\n return undefined;\n}\n\nexport function getSizeChannel(channel: PositionChannel): 'width' | 'height';\nexport function getSizeChannel(channel: Channel): 'width' | 'height' | undefined;\nexport function getSizeChannel(channel: Channel): 'width' | 'height' | undefined {\n switch (channel) {\n case X:\n case X2:\n return 'width';\n case Y:\n case Y2:\n return 'height';\n }\n return undefined;\n}\n\n/**\n * Get the main channel for a range channel. E.g. `x` for `x2`.\n */\nexport function getOffsetChannel(channel: Channel) {\n switch (channel) {\n case X:\n return 'xOffset';\n case Y:\n return 'yOffset';\n case X2:\n return 'x2Offset';\n case Y2:\n return 'y2Offset';\n case THETA:\n return 'thetaOffset';\n case RADIUS:\n return 'radiusOffset';\n case THETA2:\n return 'theta2Offset';\n case RADIUS2:\n return 'radius2Offset';\n }\n return undefined;\n}\n\n// CHANNELS without COLUMN, ROW\nexport const UNIT_CHANNELS = keys(UNIT_CHANNEL_INDEX);\n\n// NONPOSITION_CHANNELS = UNIT_CHANNELS without X, Y, X2, Y2;\nconst {\n x: _x,\n y: _y,\n // x2 and y2 share the same scale as x and y\n x2: _x2,\n y2: _y2,\n latitude: _latitude,\n longitude: _longitude,\n latitude2: _latitude2,\n longitude2: _longitude2,\n theta: _theta,\n theta2: _theta2,\n radius: _radius,\n radius2: _radius2,\n // The rest of unit channels then have scale\n ...NONPOSITION_CHANNEL_INDEX\n} = UNIT_CHANNEL_INDEX;\n\nexport const NONPOSITION_CHANNELS = keys(NONPOSITION_CHANNEL_INDEX);\nexport type NonPositionChannel = typeof NONPOSITION_CHANNELS[number];\n\nexport const POSITION_SCALE_CHANNEL_INDEX = {\n x: 1,\n y: 1\n} as const;\nexport const POSITION_SCALE_CHANNELS = keys(POSITION_SCALE_CHANNEL_INDEX);\nexport type PositionScaleChannel = keyof typeof POSITION_SCALE_CHANNEL_INDEX;\n\nexport function isXorY(channel: ExtendedChannel): channel is PositionScaleChannel {\n return channel in POSITION_SCALE_CHANNEL_INDEX;\n}\n\nexport const POLAR_POSITION_SCALE_CHANNEL_INDEX = {\n theta: 1,\n radius: 1\n} as const;\n\nexport const POLAR_POSITION_SCALE_CHANNELS = keys(POLAR_POSITION_SCALE_CHANNEL_INDEX);\nexport type PolarPositionScaleChannel = keyof typeof POLAR_POSITION_SCALE_CHANNEL_INDEX;\n\nexport function getPositionScaleChannel(sizeType: 'width' | 'height'): PositionScaleChannel {\n return sizeType === 'width' ? X : Y;\n}\n\n// NON_POSITION_SCALE_CHANNEL = SCALE_CHANNELS without X, Y\nconst {\n // x2 and y2 share the same scale as x and y\n // text and tooltip have format instead of scale,\n // href has neither format, nor scale\n text: _t,\n tooltip: _tt,\n href: _hr,\n url: _u,\n description: _al,\n // detail and order have no scale\n detail: _dd,\n key: _k,\n order: _oo,\n ...NONPOSITION_SCALE_CHANNEL_INDEX\n} = NONPOSITION_CHANNEL_INDEX;\nexport const NONPOSITION_SCALE_CHANNELS = keys(NONPOSITION_SCALE_CHANNEL_INDEX);\nexport type NonPositionScaleChannel = typeof NONPOSITION_SCALE_CHANNELS[number];\n\nexport function isNonPositionScaleChannel(channel: Channel): channel is NonPositionScaleChannel {\n return !!NONPOSITION_CHANNEL_INDEX[channel];\n}\n\n/**\n * @returns whether Vega supports legends for a particular channel\n */\nexport function supportLegend(channel: NonPositionScaleChannel) {\n switch (channel) {\n case COLOR:\n case FILL:\n case STROKE:\n case SIZE:\n case SHAPE:\n case OPACITY:\n case STROKEWIDTH:\n case STROKEDASH:\n return true;\n case FILLOPACITY:\n case STROKEOPACITY:\n case ANGLE:\n return false;\n }\n}\n\n// Declare SCALE_CHANNEL_INDEX\nconst SCALE_CHANNEL_INDEX = {\n ...POSITION_SCALE_CHANNEL_INDEX,\n ...POLAR_POSITION_SCALE_CHANNEL_INDEX,\n ...NONPOSITION_SCALE_CHANNEL_INDEX\n};\n\n/** List of channels with scales */\nexport const SCALE_CHANNELS = keys(SCALE_CHANNEL_INDEX);\nexport type ScaleChannel = typeof SCALE_CHANNELS[number];\n\nexport function isScaleChannel(channel: Channel): channel is ScaleChannel {\n return !!SCALE_CHANNEL_INDEX[channel];\n}\n\nexport type SupportedMark = Partial>;\n\n/**\n * Return whether a channel supports a particular mark type.\n * @param channel channel name\n * @param mark the mark type\n * @return whether the mark supports the channel\n */\nexport function supportMark(channel: ExtendedChannel, mark: Mark) {\n return getSupportedMark(channel)[mark];\n}\n\nconst ALL_MARKS: Record = {\n // all marks\n arc: 'always',\n area: 'always',\n bar: 'always',\n circle: 'always',\n geoshape: 'always',\n image: 'always',\n line: 'always',\n rule: 'always',\n point: 'always',\n rect: 'always',\n square: 'always',\n trail: 'always',\n text: 'always',\n tick: 'always'\n};\n\nconst {geoshape: _g, ...ALL_MARKS_EXCEPT_GEOSHAPE} = ALL_MARKS;\n\n/**\n * Return a dictionary showing whether a channel supports mark type.\n * @param channel\n * @return A dictionary mapping mark types to 'always', 'binned', or undefined\n */\nfunction getSupportedMark(channel: ExtendedChannel): SupportedMark {\n switch (channel) {\n case COLOR:\n case FILL:\n case STROKE:\n // falls through\n\n case DESCRIPTION:\n case DETAIL:\n case KEY:\n case TOOLTIP:\n case HREF:\n case ORDER: // TODO: revise (order might not support rect, which is not stackable?)\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n case STROKEWIDTH:\n\n // falls through\n\n case FACET:\n case ROW: // falls through\n case COLUMN:\n return ALL_MARKS;\n case X:\n case Y:\n case LATITUDE:\n case LONGITUDE:\n // all marks except geoshape. geoshape does not use X, Y -- it uses a projection\n return ALL_MARKS_EXCEPT_GEOSHAPE;\n case X2:\n case Y2:\n case LATITUDE2:\n case LONGITUDE2:\n return {\n area: 'always',\n bar: 'always',\n image: 'always',\n rect: 'always',\n rule: 'always',\n circle: 'binned',\n point: 'binned',\n square: 'binned',\n tick: 'binned',\n line: 'binned',\n trail: 'binned'\n };\n case SIZE:\n return {\n point: 'always',\n tick: 'always',\n rule: 'always',\n circle: 'always',\n square: 'always',\n bar: 'always',\n text: 'always',\n line: 'always',\n trail: 'always'\n };\n case STROKEDASH:\n return {\n line: 'always',\n point: 'always',\n tick: 'always',\n rule: 'always',\n circle: 'always',\n square: 'always',\n bar: 'always',\n geoshape: 'always'\n };\n case SHAPE:\n return {point: 'always', geoshape: 'always'};\n case TEXT:\n return {text: 'always'};\n case ANGLE:\n return {point: 'always', square: 'always', text: 'always'};\n case URL:\n return {image: 'always'};\n case THETA:\n return {text: 'always', arc: 'always'};\n case RADIUS:\n return {text: 'always', arc: 'always'};\n case THETA2:\n case RADIUS2:\n return {arc: 'always'};\n }\n}\n\nexport function rangeType(channel: ExtendedChannel): RangeType {\n switch (channel) {\n case X:\n case Y:\n case THETA:\n case RADIUS:\n case SIZE:\n case ANGLE:\n case STROKEWIDTH:\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n\n // X2 and Y2 use X and Y scales, so they similarly have continuous range. [falls through]\n case X2:\n case Y2:\n case THETA2:\n case RADIUS2:\n return undefined;\n\n case FACET:\n case ROW:\n case COLUMN:\n case SHAPE:\n case STROKEDASH:\n // TEXT, TOOLTIP, URL, and HREF have no scale but have discrete output [falls through]\n case TEXT:\n case TOOLTIP:\n case HREF:\n case URL:\n case DESCRIPTION:\n return 'discrete';\n\n // Color can be either continuous or discrete, depending on scale type.\n case COLOR:\n case FILL:\n case STROKE:\n return 'flexible';\n\n // No scale, no range type.\n\n case LATITUDE:\n case LONGITUDE:\n case LATITUDE2:\n case LONGITUDE2:\n case DETAIL:\n case KEY:\n case ORDER:\n return undefined;\n }\n}\n","import {AggregateOp} from 'vega';\nimport {isString, toSet} from 'vega-util';\nimport {FieldName} from './channeldef';\nimport {contains, Flag, keys} from './util';\n\nconst AGGREGATE_OP_INDEX: Flag = {\n argmax: 1,\n argmin: 1,\n average: 1,\n count: 1,\n distinct: 1,\n product: 1,\n max: 1,\n mean: 1,\n median: 1,\n min: 1,\n missing: 1,\n q1: 1,\n q3: 1,\n ci0: 1,\n ci1: 1,\n stderr: 1,\n stdev: 1,\n stdevp: 1,\n sum: 1,\n valid: 1,\n values: 1,\n variance: 1,\n variancep: 1\n};\n\nexport const MULTIDOMAIN_SORT_OP_INDEX = {\n count: 1,\n min: 1,\n max: 1\n};\n\nexport interface ArgminDef {\n argmin: FieldName;\n}\n\nexport interface ArgmaxDef {\n argmax: FieldName;\n}\n\nexport type NonArgAggregateOp = Exclude;\n\nexport type Aggregate = NonArgAggregateOp | ArgmaxDef | ArgminDef;\n\nexport function isArgminDef(a: Aggregate | string): a is ArgminDef {\n return !!a && !!a['argmin'];\n}\n\nexport function isArgmaxDef(a: Aggregate | string): a is ArgmaxDef {\n return !!a && !!a['argmax'];\n}\n\nexport const AGGREGATE_OPS = keys(AGGREGATE_OP_INDEX);\n\nexport function isAggregateOp(a: string | ArgminDef | ArgmaxDef): a is AggregateOp {\n return isString(a) && !!AGGREGATE_OP_INDEX[a];\n}\n\nexport const COUNTING_OPS: NonArgAggregateOp[] = ['count', 'valid', 'missing', 'distinct'];\n\nexport function isCountingAggregateOp(aggregate?: string | Aggregate): boolean {\n return isString(aggregate) && contains(COUNTING_OPS, aggregate);\n}\n\nexport function isMinMaxOp(aggregate?: Aggregate | string): boolean {\n return isString(aggregate) && contains(['min', 'max'], aggregate);\n}\n\n/** Additive-based aggregation operations. These can be applied to stack. */\nexport const SUM_OPS: NonArgAggregateOp[] = ['count', 'sum', 'distinct', 'valid', 'missing'];\n\n/**\n * Aggregation operators that always produce values within the range [domainMin, domainMax].\n */\nexport const SHARED_DOMAIN_OPS: AggregateOp[] = ['mean', 'average', 'median', 'q1', 'q3', 'min', 'max'];\n\nexport const SHARED_DOMAIN_OP_INDEX = toSet(SHARED_DOMAIN_OPS);\n","import {isBoolean, isObject} from 'vega-util';\nimport {\n COLOR,\n COLUMN,\n ExtendedChannel,\n FILL,\n FILLOPACITY,\n OPACITY,\n ROW,\n SHAPE,\n SIZE,\n STROKE,\n STROKEDASH,\n STROKEOPACITY,\n STROKEWIDTH\n} from './channel';\nimport {normalizeBin} from './channeldef';\nimport {ParameterExtent} from './selection';\nimport {entries, keys, varName} from './util';\n\nexport interface BaseBin {\n /**\n * The number base to use for automatic bin determination (default is base 10).\n *\n * __Default value:__ `10`\n *\n */\n base?: number;\n /**\n * An exact step size to use between bins.\n *\n * __Note:__ If provided, options such as maxbins will be ignored.\n */\n step?: number;\n /**\n * An array of allowable step sizes to choose from.\n * @minItems 1\n */\n steps?: number[];\n /**\n * A minimum allowable step size (particularly useful for integer values).\n */\n minstep?: number;\n /**\n * Scale factors indicating allowable subdivisions. The default value is [5, 2], which indicates that for base 10 numbers (the default base), the method may consider dividing bin sizes by 5 and/or 2. For example, for an initial step size of 10, the method can check if bin sizes of 2 (= 10/5), 5 (= 10/2), or 1 (= 10/(5*2)) might also satisfy the given constraints.\n *\n * __Default value:__ `[5, 2]`\n *\n * @minItems 1\n */\n divide?: [number, number];\n /**\n * Maximum number of bins.\n *\n * __Default value:__ `6` for `row`, `column` and `shape` channels; `10` for other channels\n *\n * @minimum 2\n */\n maxbins?: number;\n /**\n * A value in the binned domain at which to anchor the bins, shifting the bin boundaries if necessary to ensure that a boundary aligns with the anchor value.\n *\n * __Default value:__ the minimum bin extent value\n */\n anchor?: number;\n /**\n * If true, attempts to make the bin boundaries use human-friendly boundaries, such as multiples of ten.\n *\n * __Default value:__ `true`\n */\n nice?: boolean;\n}\n\n/**\n * Binning properties or boolean flag for determining whether to bin data or not.\n */\nexport interface BinParams extends BaseBin {\n /**\n * A two-element (`[min, max]`) array indicating the range of desired bin values.\n */\n extent?: BinExtent; // VgBinTransform uses a different extent so we need to pull this out.\n\n /**\n * When set to `true`, Vega-Lite treats the input data as already binned.\n */\n binned?: boolean;\n}\n\nexport type Bin = boolean | BinParams | 'binned' | null;\n\nexport type BinExtent = [number, number] | ParameterExtent;\n\n/**\n * Create a key for the bin configuration. Not for prebinned bin.\n */\nexport function binToString(bin: BinParams | true) {\n if (isBoolean(bin)) {\n bin = normalizeBin(bin, undefined);\n }\n return (\n 'bin' +\n keys(bin)\n .map(p => (isParameterExtent(bin[p]) ? varName(`_${p}_${entries(bin[p])}`) : varName(`_${p}_${bin[p]}`)))\n .join('')\n );\n}\n\n/**\n * Vega-Lite should bin the data.\n */\nexport function isBinning(bin: BinParams | boolean | 'binned'): bin is BinParams | true {\n return bin === true || (isBinParams(bin) && !bin.binned);\n}\n\n/**\n * The data is already binned and so Vega-Lite should not bin it again.\n */\nexport function isBinned(bin: BinParams | boolean | 'binned'): bin is 'binned' | BinParams {\n return bin === 'binned' || (isBinParams(bin) && bin.binned === true);\n}\n\nexport function isBinParams(bin: BinParams | boolean | 'binned'): bin is BinParams {\n return isObject(bin);\n}\n\nexport function isParameterExtent(extent: BinExtent): extent is ParameterExtent {\n return extent?.['param'];\n}\n\nexport function autoMaxBins(channel?: ExtendedChannel): number {\n switch (channel) {\n case ROW:\n case COLUMN:\n case SIZE:\n case COLOR:\n case FILL:\n case STROKE:\n case STROKEWIDTH:\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n // Facets and Size shouldn't have too many bins\n // We choose 6 like shape to simplify the rule [falls through]\n case SHAPE:\n return 6; // Vega's \"shape\" has 6 distinct values\n case STROKEDASH:\n return 4; // We only provide 5 different stroke dash values (but 4 is more effective)\n default:\n return 10;\n }\n}\n","import {signalRefOrValue} from './compile/common';\nimport {Dict, keys} from './util';\nimport {MappedExclude} from './vega.schema';\n\nexport interface ExprRef {\n /**\n * Vega expression (which can refer to Vega-Lite parameters).\n */\n expr: string;\n}\n\nexport function isExprRef(o: any): o is ExprRef {\n return o && !!o['expr'];\n}\n\nexport function replaceExprRef>(index: T) {\n const props = keys(index || {});\n const newIndex: Dict = {};\n for (const prop of props) {\n newIndex[prop] = signalRefOrValue(index[prop]);\n }\n return newIndex as MappedExclude;\n}\n","import {BaseTitle, SignalRef, Text, TextEncodeEntry, TitleAnchor} from 'vega';\nimport {isArray, isString} from 'vega-util';\nimport {ExprRef} from './expr';\nimport {MarkConfig} from './mark';\nimport {pick} from './util';\nimport {MapExcludeValueRefAndReplaceSignalWith, MappedExcludeValueRef} from './vega.schema';\n\nexport type BaseTitleNoValueRefs = MapExcludeValueRefAndReplaceSignalWith<\n Omit,\n ES\n> &\n // Since some logic depends on align/baseline, Vega-Lite does NOT allow signal for them.\n MappedExcludeValueRef>;\n\nexport type TitleConfig = BaseTitleNoValueRefs;\n\nexport interface TitleBase extends BaseTitleNoValueRefs {\n /**\n * The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title.\n *\n * __Default value:__ `\"middle\"` for [single](https://vega.github.io/vega-lite/docs/spec.html) and [layered](https://vega.github.io/vega-lite/docs/layer.html) views.\n * `\"start\"` for other composite views.\n *\n * __Note:__ [For now](https://github.com/vega/vega-lite/issues/2875), `anchor` is only customizable only for [single](https://vega.github.io/vega-lite/docs/spec.html) and [layered](https://vega.github.io/vega-lite/docs/layer.html) views. For other composite views, `anchor` is always `\"start\"`.\n */\n anchor?: TitleAnchor;\n\n /**\n * A [mark style property](https://vega.github.io/vega-lite/docs/config.html#style) to apply to the title text mark.\n *\n * __Default value:__ `\"group-title\"`.\n */\n style?: string | string[];\n\n /**\n * \tThe integer z-index indicating the layering of the title group relative to other axis, mark and legend groups.\n *\n * __Default value:__ `0`.\n *\n * @TJS-type integer\n * @minimum 0\n */\n zindex?: number;\n\n /**\n * Mark definitions for custom encoding.\n *\n * @hidden\n */\n encoding?: TextEncodeEntry;\n}\n\nexport interface TitleParams extends TitleBase {\n /**\n * The title text.\n */\n text: Text | ES;\n\n /**\n * The subtitle Text.\n */\n subtitle?: Text;\n}\n\nexport function extractTitleConfig(\n titleConfig: TitleConfig\n): {\n titleMarkConfig: MarkConfig;\n subtitleMarkConfig: MarkConfig;\n nonMark: BaseTitleNoValueRefs;\n subtitle: BaseTitleNoValueRefs;\n} {\n const {\n // These are non-mark title config that need to be hardcoded\n anchor,\n frame,\n offset,\n orient,\n\n // color needs to be redirect to fill\n color,\n\n // subtitle properties\n subtitleColor,\n subtitleFont,\n subtitleFontSize,\n subtitleFontStyle,\n subtitleFontWeight,\n subtitleLineHeight,\n subtitlePadding,\n\n // The rest are mark config.\n ...rest\n } = titleConfig;\n\n const titleMarkConfig: MarkConfig = {\n ...rest,\n ...(color ? {fill: color} : {})\n };\n\n // These are non-mark title config that need to be hardcoded\n const nonMark: BaseTitleNoValueRefs = {\n ...(anchor ? {anchor} : {}),\n ...(frame ? {frame} : {}),\n ...(offset ? {offset} : {}),\n ...(orient ? {orient} : {})\n };\n\n // subtitle part can stay in config.title since header titles do not use subtitle\n const subtitle: BaseTitleNoValueRefs = {\n ...(subtitleColor ? {subtitleColor} : {}),\n ...(subtitleFont ? {subtitleFont} : {}),\n ...(subtitleFontSize ? {subtitleFontSize} : {}),\n ...(subtitleFontStyle ? {subtitleFontStyle} : {}),\n ...(subtitleFontWeight ? {subtitleFontWeight} : {}),\n ...(subtitleLineHeight ? {subtitleLineHeight} : {}),\n ...(subtitlePadding ? {subtitlePadding} : {})\n };\n\n const subtitleMarkConfig = pick(titleMarkConfig, ['align', 'baseline', 'dx', 'dy', 'limit']);\n\n return {titleMarkConfig, subtitleMarkConfig, nonMark, subtitle};\n}\n\nexport function isText(v: any): v is Text {\n return isString(v) || (isArray(v) && isString(v[0]));\n}\n","import type {\n AggregateOp,\n BandScale,\n BaseScale,\n BinOrdinalScale,\n ColorValueRef,\n Compare as VgCompare,\n ExprRef as VgExprRef,\n GeoShapeTransform as VgGeoShapeTransform,\n IdentityScale,\n LayoutAlign,\n LinearScale,\n LogScale,\n Mark,\n MarkConfig,\n NumericValueRef,\n OrdinalScale,\n PointScale,\n PowScale,\n ProjectionType,\n QuantileScale,\n QuantizeScale,\n RangeBand,\n RangeRaw,\n RangeScheme,\n ScaleData,\n ScaleDataRef,\n ScaledValueRef,\n ScaleMultiDataRef,\n ScaleMultiFieldsRef,\n SequentialScale,\n SignalRef,\n SortField as VgSortField,\n SqrtScale,\n SymLogScale,\n ThresholdScale,\n TimeInterval,\n TimeIntervalStep,\n TimeScale,\n Title as VgTitle,\n Transforms as VgTransform,\n UnionSortField as VgUnionSortField\n} from 'vega';\nimport {isArray} from 'vega-util';\nimport {Value} from './channeldef';\nimport {ExprRef} from './expr';\nimport {SortOrder} from './sort';\nimport {Dict, Flag, keys} from './util';\n\nexport type {VgSortField, VgUnionSortField, VgCompare, VgTitle, LayoutAlign, ProjectionType, VgExprRef};\n\n// TODO: make recursive (e.g. with https://stackoverflow.com/a/64900252/214950 but needs https://github.com/vega/ts-json-schema-generator/issues/568)\nexport type MappedExclude = {\n [P in keyof T]: Exclude;\n};\n\nexport type MapExcludeAndKeepSignalAs = {\n [P in keyof T]: SignalRef extends T[P] ? Exclude | S : Exclude;\n};\n\n// Remove ValueRefs from mapped types\nexport type MappedExcludeValueRef = MappedExclude | NumericValueRef | ColorValueRef>;\n\nexport type MapExcludeValueRefAndReplaceSignalWith = MapExcludeAndKeepSignalAs<\n T,\n ScaledValueRef | NumericValueRef | ColorValueRef,\n S\n>;\n\nexport interface VgData {\n name: string;\n source?: string;\n values?: any;\n format?: {\n type?: string;\n parse?: string | Dict;\n property?: string;\n feature?: string;\n mesh?: string;\n };\n url?: string;\n transform?: VgTransform[];\n}\n\nexport type VgScaleDataRefWithSort = ScaleDataRef & {\n sort?: VgSortField;\n};\n\nexport function isSignalRef(o: any): o is SignalRef {\n return o && !!o['signal'];\n}\n\n// TODO: add type of value (Make it VgValueRef {value?:V ...})\nexport interface VgValueRef {\n value?: Value; // value should never be a signal so we use never\n field?:\n | string\n | {\n datum?: string;\n group?: string;\n parent?: string;\n };\n signal?: string;\n scale?: string; // TODO: object\n mult?: number;\n offset?: number | VgValueRef;\n band?: boolean | number | VgValueRef;\n test?: string;\n}\n\n// TODO: add vg prefix\nexport type VgScaleMultiDataRefWithSort = ScaleMultiDataRef & {\n fields: (any[] | VgScaleDataRefWithSort | SignalRef)[];\n sort?: VgUnionSortField;\n};\n\nexport type VgMultiFieldsRefWithSort = ScaleMultiFieldsRef & {\n sort?: VgUnionSortField;\n};\n\nexport type VgRange = RangeScheme | ScaleData | RangeBand | RangeRaw;\n\nexport function isVgRangeStep(range: VgRange): range is VgRangeStep {\n return !!range['step'];\n}\n\nexport interface VgRangeStep {\n step: number | SignalRef;\n}\n// Domains that are not a union of domains\nexport type VgNonUnionDomain = (null | string | number | boolean | SignalRef)[] | VgScaleDataRefWithSort | SignalRef;\n\nexport type VgDomain = BaseScale['domain'];\n\nexport type VgMarkGroup = any;\n\n/**\n * A combined type for any Vega scales that Vega-Lite can generate\n */\nexport type VgScale = Pick & {\n range?: RangeScheme | RangeBand | ScaleData; // different Vega scales have conflicting range, need to union them here\n nice?: boolean | number | TimeInterval | TimeIntervalStep | SignalRef; // different Vega scales have conflicting range, need to union them here\n zero?: boolean | SignalRef; // LogScale only allow false, making the intersection type overly strict\n} & Omit<\n // Continuous\n Omit &\n Omit &\n Omit &\n Omit, 'type'> & // use partial so exponent is not required\n Omit &\n Omit &\n Omit &\n // Discretizing\n Omit &\n Omit &\n Omit &\n Omit &\n // Sequential\n Omit &\n // Discrete\n Omit &\n Omit &\n Omit,\n 'range' | 'nice' | 'zero'\n >;\n\nexport interface RowCol {\n row?: T;\n column?: T;\n}\n\nexport interface VgLayout {\n center?: boolean | RowCol;\n padding?: number | RowCol;\n headerBand?: number | RowCol;\n footerBand?: number | RowCol;\n\n titleAnchor?: 'start' | 'end' | RowCol<'start' | 'end'>;\n offset?:\n | number\n | {\n rowHeader?: number;\n rowFooter?: number;\n rowTitle?: number;\n columnHeader?: number;\n columnFooter?: number;\n columnTitle?: number;\n };\n bounds?: 'full' | 'flush';\n columns?: number | {signal: string};\n align?: LayoutAlign | RowCol;\n}\n\nexport function isDataRefUnionedDomain(domain: VgDomain): domain is VgScaleMultiDataRefWithSort {\n if (!isArray(domain)) {\n return 'fields' in domain && !('data' in domain);\n }\n return false;\n}\n\nexport function isFieldRefUnionDomain(domain: VgDomain): domain is VgMultiFieldsRefWithSort {\n if (!isArray(domain)) {\n return 'fields' in domain && 'data' in domain;\n }\n return false;\n}\n\nexport function isDataRefDomain(domain: VgDomain | any): domain is VgScaleDataRefWithSort {\n if (!isArray(domain)) {\n return 'field' in domain && 'data' in domain;\n }\n return false;\n}\n\nexport type VgEncodeChannel =\n | 'x'\n | 'x2'\n | 'xc'\n | 'width'\n | 'y'\n | 'y2'\n | 'yc'\n | 'height'\n | 'opacity'\n | 'fill'\n | 'fillOpacity'\n | 'stroke'\n | 'strokeWidth'\n | 'strokeCap'\n | 'strokeOpacity'\n | 'strokeDash'\n | 'strokeDashOffset'\n | 'strokeMiterLimit'\n | 'strokeJoin'\n | 'strokeOffset'\n | 'strokeForeground'\n | 'cursor'\n | 'clip'\n | 'size'\n | 'shape'\n | 'path'\n | 'innerRadius'\n | 'outerRadius'\n | 'startAngle'\n | 'endAngle'\n | 'interpolate'\n | 'tension'\n | 'orient'\n | 'url'\n | 'align'\n | 'baseline'\n | 'text'\n | 'dir'\n | 'ellipsis'\n | 'limit'\n | 'dx'\n | 'dy'\n | 'radius'\n | 'theta'\n | 'angle'\n | 'font'\n | 'fontSize'\n | 'fontWeight'\n | 'fontStyle'\n | 'tooltip'\n | 'href'\n | 'cursor'\n | 'defined'\n | 'cornerRadius'\n | 'cornerRadiusTopLeft'\n | 'cornerRadiusTopRight'\n | 'cornerRadiusBottomRight'\n | 'cornerRadiusBottomLeft'\n | 'scaleX'\n | 'scaleY';\n\nexport type VgEncodeEntry = Partial>;\n\n// TODO: make export interface VgEncodeEntry {\n// x?: VgValueRef\n// y?: VgValueRef\n// ...\n// color?: VgValueRef\n// ...\n// }\n\nexport type VgPostEncodingTransform = VgGeoShapeTransform;\n\nconst VG_MARK_CONFIG_INDEX: Flag = {\n aria: 1,\n description: 1,\n ariaRole: 1,\n ariaRoleDescription: 1,\n blend: 1,\n opacity: 1,\n fill: 1,\n fillOpacity: 1,\n stroke: 1,\n strokeCap: 1,\n strokeWidth: 1,\n strokeOpacity: 1,\n strokeDash: 1,\n strokeDashOffset: 1,\n strokeJoin: 1,\n strokeOffset: 1,\n strokeMiterLimit: 1,\n startAngle: 1,\n endAngle: 1,\n padAngle: 1,\n innerRadius: 1,\n outerRadius: 1,\n size: 1,\n shape: 1,\n interpolate: 1,\n tension: 1,\n orient: 1,\n align: 1,\n baseline: 1,\n text: 1,\n dir: 1,\n dx: 1,\n dy: 1,\n ellipsis: 1,\n limit: 1,\n radius: 1,\n theta: 1,\n angle: 1,\n font: 1,\n fontSize: 1,\n fontWeight: 1,\n fontStyle: 1,\n lineBreak: 1,\n lineHeight: 1,\n cursor: 1,\n href: 1,\n tooltip: 1,\n cornerRadius: 1,\n cornerRadiusTopLeft: 1,\n cornerRadiusTopRight: 1,\n cornerRadiusBottomLeft: 1,\n cornerRadiusBottomRight: 1,\n aspect: 1,\n width: 1,\n height: 1,\n url: 1,\n smooth: 1\n\n // commented below are vg channel that do not have mark config.\n // x: 1,\n // y: 1,\n // x2: 1,\n // y2: 1,\n\n // xc'|'yc'\n // clip: 1,\n // path: 1,\n // url: 1,\n};\n\nexport const VG_MARK_CONFIGS = keys(VG_MARK_CONFIG_INDEX);\n\nexport const VG_MARK_INDEX: Flag = {\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n};\n\n// Vega's cornerRadius channels.\nexport const VG_CORNERRADIUS_CHANNELS = [\n 'cornerRadius',\n 'cornerRadiusTopLeft',\n 'cornerRadiusTopRight',\n 'cornerRadiusBottomLeft',\n 'cornerRadiusBottomRight'\n] as const;\n\nexport interface VgComparator {\n field?: string | string[];\n order?: SortOrder | SortOrder[];\n}\n\nexport interface VgJoinAggregateTransform {\n type: 'joinaggregate';\n as?: string[];\n ops?: AggregateOp[];\n fields?: string[];\n groupby?: string[];\n}\n","import {ExprRef, SignalRef, Text} from 'vega';\nimport {array, isArray, stringValue} from 'vega-util';\nimport {AxisConfig, ConditionalAxisProperty} from '../axis';\nimport {\n ConditionalPredicate,\n DatumDef,\n FieldDef,\n FieldDefBase,\n FieldRefOption,\n OrderFieldDef,\n Value,\n ValueDef,\n vgField\n} from '../channeldef';\nimport {Config, StyleConfigIndex} from '../config';\nimport {isExprRef} from '../expr';\nimport {Mark, MarkConfig, MarkDef} from '../mark';\nimport {SortFields} from '../sort';\nimport {isText} from '../title';\nimport {deepEqual, getFirstDefined} from '../util';\nimport {isSignalRef, VgEncodeChannel, VgEncodeEntry, VgValueRef} from '../vega.schema';\nimport {AxisComponentProps} from './axis/component';\nimport {Explicit} from './split';\nimport {UnitModel} from './unit';\n\nexport const BIN_RANGE_DELIMITER = ' \\u2013 ';\n\nexport function signalOrValueRefWithCondition(\n val: ConditionalAxisProperty\n): ConditionalAxisProperty {\n const condition = isArray(val.condition)\n ? (val.condition as ConditionalPredicate | ExprRef | SignalRef>[]).map(conditionalSignalRefOrValue)\n : conditionalSignalRefOrValue(val.condition);\n\n return {\n ...signalRefOrValue>(val),\n condition\n };\n}\n\nexport function signalRefOrValue(value: T | SignalRef | ExprRef): T | SignalRef {\n if (isExprRef(value)) {\n const {expr, ...rest} = value;\n return {signal: expr, ...rest};\n }\n return value;\n}\n\nexport function conditionalSignalRefOrValue | DatumDef | ValueDef>(\n value: ConditionalPredicate\n): ConditionalPredicate {\n if (isExprRef(value)) {\n const {expr, ...rest} = value;\n return {signal: expr, ...rest};\n }\n return value;\n}\n\nexport function signalOrValueRef(value: T | SignalRef | ExprRef): {value: T} | SignalRef {\n if (isExprRef(value)) {\n const {expr, ...rest} = value;\n return {signal: expr, ...rest};\n }\n if (isSignalRef(value)) {\n return value;\n }\n return value !== undefined ? {value} : undefined;\n}\n\nexport function exprFromValueOrSignalRef(ref: VgValueRef | SignalRef): string {\n if (isSignalRef(ref)) {\n return ref.signal;\n }\n return stringValue(ref.value);\n}\n\nexport function signalOrStringValue(v: SignalRef | any) {\n if (isSignalRef(v)) {\n return v.signal;\n }\n return v == null ? null : stringValue(v);\n}\n\nexport function applyMarkConfig(e: VgEncodeEntry, model: UnitModel, propsList: (keyof MarkConfig)[]) {\n for (const property of propsList) {\n const value = getMarkConfig(property, model.markDef, model.config);\n if (value !== undefined) {\n e[property] = signalOrValueRef(value);\n }\n }\n return e;\n}\n\nexport function getStyles(mark: MarkDef): string[] {\n return [].concat(mark.type, mark.style ?? []);\n}\n\nexport function getMarkPropOrConfig

(\n channel: P,\n mark: MarkDef,\n config: Config,\n opt: {\n vgChannel?: VgEncodeChannel;\n ignoreVgConfig?: boolean;\n } = {}\n): MarkDef[P] {\n const {vgChannel, ignoreVgConfig} = opt;\n if (vgChannel && mark[vgChannel] !== undefined) {\n return mark[vgChannel];\n } else if (mark[channel] !== undefined) {\n return mark[channel];\n } else if (ignoreVgConfig && (!vgChannel || vgChannel === channel)) {\n return undefined;\n }\n\n return getMarkConfig(channel, mark, config, opt);\n}\n\n/**\n * Return property value from style or mark specific config property if exists.\n * Otherwise, return general mark specific config.\n */\nexport function getMarkConfig

(\n channel: P,\n mark: MarkDef,\n config: Config,\n {vgChannel}: {vgChannel?: VgEncodeChannel} = {}\n): MarkDef[P] {\n return getFirstDefined[P]>(\n // style config has highest precedence\n vgChannel ? getMarkStyleConfig(channel, mark, config.style) : undefined,\n getMarkStyleConfig(channel, mark, config.style),\n // then mark-specific config\n vgChannel ? config[mark.type][vgChannel] : undefined,\n\n config[mark.type][channel as any], // Need to cast because MarkDef doesn't perfectly match with AnyMarkConfig, but if the type isn't available, we'll get nothing here, which is fine\n\n // If there is vgChannel, skip vl channel.\n // For example, vl size for text is vg fontSize, but config.mark.size is only for point size.\n vgChannel ? config.mark[vgChannel] : config.mark[channel as any] // Need to cast for the same reason as above\n );\n}\n\nexport function getMarkStyleConfig

(\n prop: P,\n mark: MarkDef,\n styleConfigIndex: StyleConfigIndex\n) {\n return getStyleConfig(prop, getStyles(mark), styleConfigIndex);\n}\n\nexport function getStyleConfig

>(\n p: P,\n styles: string | string[],\n styleConfigIndex: StyleConfigIndex\n) {\n styles = array(styles);\n let value;\n for (const style of styles) {\n const styleConfig = styleConfigIndex[style];\n\n if (styleConfig && styleConfig[p as string] !== undefined) {\n value = styleConfig[p as string];\n }\n }\n return value;\n}\n\n/**\n * Return Vega sort parameters (tuple of field and order).\n */\nexport function sortParams(\n orderDef: OrderFieldDef | OrderFieldDef[],\n fieldRefOption?: FieldRefOption\n): SortFields {\n return array(orderDef).reduce(\n (s, orderChannelDef) => {\n s.field.push(vgField(orderChannelDef, fieldRefOption));\n s.order.push(orderChannelDef.sort ?? 'ascending');\n return s;\n },\n {field: [], order: []}\n );\n}\n\nexport type AxisTitleComponent = AxisComponentProps['title'];\n\nexport function mergeTitleFieldDefs(f1: readonly FieldDefBase[], f2: readonly FieldDefBase[]) {\n const merged = [...f1];\n\n f2.forEach(fdToMerge => {\n for (const fieldDef1 of merged) {\n // If already exists, no need to append to merged array\n if (deepEqual(fieldDef1, fdToMerge)) {\n return;\n }\n }\n merged.push(fdToMerge);\n });\n return merged;\n}\n\nexport function mergeTitle(title1: Text | SignalRef, title2: Text | SignalRef) {\n if (deepEqual(title1, title2) || !title2) {\n // if titles are the same or title2 is falsy\n return title1;\n } else if (!title1) {\n // if title1 is falsy\n return title2;\n } else {\n return [...array(title1), ...array(title2)].join(', ');\n }\n}\n\nexport function mergeTitleComponent(v1: Explicit, v2: Explicit) {\n const v1Val = v1.value;\n const v2Val = v2.value;\n\n if (v1Val == null || v2Val === null) {\n return {\n explicit: v1.explicit,\n value: null\n };\n } else if ((isText(v1Val) || isSignalRef(v1Val)) && (isText(v2Val) || isSignalRef(v2Val))) {\n return {\n explicit: v1.explicit,\n value: mergeTitle(v1Val, v2Val)\n };\n } else if (isText(v1Val) || isSignalRef(v1Val)) {\n return {\n explicit: v1.explicit,\n value: v1Val\n };\n } else if (isText(v2Val) || isSignalRef(v2Val)) {\n return {\n explicit: v1.explicit,\n value: v2Val\n };\n } else if (!isText(v1Val) && !isSignalRef(v1Val) && !isText(v2Val) && !isSignalRef(v2Val)) {\n return {\n explicit: v1.explicit,\n value: mergeTitleFieldDefs(v1Val, v2Val)\n };\n }\n /* istanbul ignore next: Condition should not happen -- only for warning in development. */\n throw new Error('It should never reach here');\n}\n","/**\n * Collection of all Vega-Lite Error Messages\n */\nimport {AggregateOp, SignalRef} from 'vega';\nimport {Aggregate} from '../aggregate';\nimport {Channel, ExtendedChannel, FacetChannel, getSizeChannel, PositionScaleChannel, ScaleChannel} from '../channel';\nimport {HiddenCompositeAggregate, TypedFieldDef, Value} from '../channeldef';\nimport {SplitParentProperty} from '../compile/split';\nimport {CompositeMark} from '../compositemark';\nimport {ErrorBarCenter, ErrorBarExtent} from '../compositemark/errorbar';\nimport {DateTime, DateTimeExpr} from '../datetime';\nimport {ExprRef} from '../expr';\nimport {Mark} from '../mark';\nimport {Projection} from '../projection';\nimport {ScaleType} from '../scale';\nimport {GenericSpec} from '../spec';\nimport {Type} from '../type';\nimport {stringify} from '../util';\nimport {VgSortField} from '../vega.schema';\n\nexport function invalidSpec(spec: GenericSpec) {\n return `Invalid specification ${stringify(\n spec\n )}. Make sure the specification includes at least one of the following properties: \"mark\", \"layer\", \"facet\", \"hconcat\", \"vconcat\", \"concat\", or \"repeat\".`;\n}\n\n// FIT\nexport const FIT_NON_SINGLE = 'Autosize \"fit\" only works for single views and layered views.';\n\nexport function containerSizeNonSingle(name: 'width' | 'height') {\n const uName = name == 'width' ? 'Width' : 'Height';\n return `${uName} \"container\" only works for single views and layered views.`;\n}\n\nexport function containerSizeNotCompatibleWithAutosize(name: 'width' | 'height') {\n const uName = name == 'width' ? 'Width' : 'Height';\n const fitDirection = name == 'width' ? 'x' : 'y';\n return `${uName} \"container\" only works well with autosize \"fit\" or \"fit-${fitDirection}\".`;\n}\n\nexport function droppingFit(channel?: PositionScaleChannel) {\n return channel\n ? `Dropping \"fit-${channel}\" because spec has discrete ${getSizeChannel(channel)}.`\n : `Dropping \"fit\" because spec has discrete size.`;\n}\n\n// VIEW SIZE\n\nexport function unknownField(channel: Channel) {\n return `Unknown field for ${channel}. Cannot calculate view size.`;\n}\n\n// SELECTION\nexport function cannotProjectOnChannelWithoutField(channel: Channel) {\n return `Cannot project a selection on encoding channel \"${channel}\", which has no field.`;\n}\n\nexport function cannotProjectAggregate(channel: Channel, aggregate: Aggregate | HiddenCompositeAggregate) {\n return `Cannot project a selection on encoding channel \"${channel}\" as it uses an aggregate function (\"${aggregate}\").`;\n}\n\nexport function nearestNotSupportForContinuous(mark: string) {\n return `The \"nearest\" transform is not supported for ${mark} marks.`;\n}\n\nexport function selectionNotSupported(mark: CompositeMark) {\n return `Selection not supported for ${mark} yet.`;\n}\n\nexport function selectionNotFound(name: string) {\n return `Cannot find a selection named \"${name}\".`;\n}\n\nexport const SCALE_BINDINGS_CONTINUOUS =\n 'Scale bindings are currently only supported for scales with unbinned, continuous domains.';\n\nexport const LEGEND_BINDINGS_MUST_HAVE_PROJECTION =\n 'Legend bindings are only supported for selections over an individual field or encoding channel.';\nexport function cannotLookupVariableParameter(name: string) {\n return `Lookups can only be performed on selection parameters. \"${name}\" is a variable parameter.`;\n}\n\nexport function noSameUnitLookup(name: string) {\n return (\n `Cannot define and lookup the \"${name}\" selection in the same view. ` +\n `Try moving the lookup into a second, layered view?`\n );\n}\n\nexport const NEEDS_SAME_SELECTION = 'The same selection must be used to override scale domains in a layered view.';\n\nexport const INTERVAL_INITIALIZED_WITH_X_Y = 'Interval selections should be initialized using \"x\" and/or \"y\" keys.';\n\n// REPEAT\nexport function noSuchRepeatedValue(field: string) {\n return `Unknown repeated value \"${field}\".`;\n}\n\nexport function columnsNotSupportByRowCol(type: 'facet' | 'repeat') {\n return `The \"columns\" property cannot be used when \"${type}\" has nested row/column.`;\n}\n\n// CONCAT / REPEAT\nexport const CONCAT_CANNOT_SHARE_AXIS =\n 'Axes cannot be shared in concatenated or repeated views yet (https://github.com/vega/vega-lite/issues/2415).';\n\n// DATA\nexport function unrecognizedParse(p: string) {\n return `Unrecognized parse \"${p}\".`;\n}\n\nexport function differentParse(field: string, local: string, ancestor: string) {\n return `An ancestor parsed field \"${field}\" as ${ancestor} but a child wants to parse the field as ${local}.`;\n}\n\nexport const ADD_SAME_CHILD_TWICE = 'Attempt to add the same child twice.';\n\n// TRANSFORMS\nexport function invalidTransformIgnored(transform: any) {\n return `Ignoring an invalid transform: ${stringify(transform)}.`;\n}\n\nexport const NO_FIELDS_NEEDS_AS =\n 'If \"from.fields\" is not specified, \"as\" has to be a string that specifies the key to be used for the data from the secondary source.';\n\n// ENCODING & FACET\n\nexport function customFormatTypeNotAllowed(channel: ExtendedChannel) {\n return `Config.customFormatTypes is not true, thus custom format type and format for channel ${channel} are dropped.`;\n}\n\nexport function projectionOverridden(opt: {\n parentProjection: Projection;\n projection: Projection;\n}) {\n const {parentProjection, projection} = opt;\n return `Layer's shared projection ${stringify(parentProjection)} is overridden by a child projection ${stringify(\n projection\n )}.`;\n}\n\nexport const REPLACE_ANGLE_WITH_THETA = 'Arc marks uses theta channel rather than angle, replacing angle with theta.';\n\nexport function primitiveChannelDef(\n channel: ExtendedChannel,\n type: 'string' | 'number' | 'boolean',\n value: Exclude\n) {\n return `Channel ${channel} is a ${type}. Converted to {value: ${stringify(value)}}.`;\n}\n\nexport function invalidFieldType(type: Type) {\n return `Invalid field type \"${type}\".`;\n}\n\nexport function invalidFieldTypeForCountAggregate(type: Type, aggregate: Aggregate | string) {\n return `Invalid field type \"${type}\" for aggregate: \"${aggregate}\", using \"quantitative\" instead.`;\n}\n\nexport function invalidAggregate(aggregate: AggregateOp | string) {\n return `Invalid aggregation operator \"${aggregate}\".`;\n}\n\nexport function missingFieldType(channel: Channel, newType: Type) {\n return `Missing type for channel \"${channel}\", using \"${newType}\" instead.`;\n}\nexport function droppingColor(type: 'encoding' | 'property', opt: {fill?: boolean; stroke?: boolean}) {\n const {fill, stroke} = opt;\n return `Dropping color ${type} as the plot also has ${\n fill && stroke ? 'fill and stroke' : fill ? 'fill' : 'stroke'\n }.`;\n}\n\nexport function relativeBandSizeNotSupported(sizeChannel: 'width' | 'height') {\n return `Position range does not support relative band size for ${sizeChannel}.`;\n}\n\nexport function emptyFieldDef(fieldDef: unknown, channel: ExtendedChannel) {\n return `Dropping ${stringify(\n fieldDef\n )} from channel \"${channel}\" since it does not contain any data field, datum, value, or signal.`;\n}\n\nexport const LINE_WITH_VARYING_SIZE =\n 'Line marks cannot encode size with a non-groupby field. You may want to use trail marks instead.';\n\nexport function incompatibleChannel(\n channel: ExtendedChannel,\n markOrFacet: Mark | 'facet' | CompositeMark,\n when?: string\n) {\n return `${channel} dropped as it is incompatible with \"${markOrFacet}\"${when ? ` when ${when}` : ''}.`;\n}\n\nexport function invalidEncodingChannel(channel: ExtendedChannel) {\n return `${channel}-encoding is dropped as ${channel} is not a valid encoding channel.`;\n}\n\nexport function channelShouldBeDiscrete(channel: ExtendedChannel) {\n return `${channel} encoding should be discrete (ordinal / nominal / binned).`;\n}\n\nexport function channelShouldBeDiscreteOrDiscretizing(channel: ExtendedChannel) {\n return `${channel} encoding should be discrete (ordinal / nominal / binned) or use a discretizing scale (e.g. threshold).`;\n}\n\nexport function facetChannelDropped(channels: FacetChannel[]) {\n return `Facet encoding dropped as ${channels.join(' and ')} ${channels.length > 1 ? 'are' : 'is'} also specified.`;\n}\n\nexport function discreteChannelCannotEncode(channel: Channel, type: Type) {\n return `Using discrete channel \"${channel}\" to encode \"${type}\" field can be misleading as it does not encode ${\n type === 'ordinal' ? 'order' : 'magnitude'\n }.`;\n}\n\n// MARK\n\nexport function rangeMarkAlignmentCannotBeExpression(align: 'align' | 'baseline') {\n return `The ${align} for range marks cannot be an expression`;\n}\n\nexport function lineWithRange(hasX2: boolean, hasY2: boolean) {\n const channels = hasX2 && hasY2 ? 'x2 and y2' : hasX2 ? 'x2' : 'y2';\n return `Line mark is for continuous lines and thus cannot be used with ${channels}. We will use the rule mark (line segments) instead.`;\n}\n\nexport function orientOverridden(original: string, actual: string) {\n return `Specified orient \"${original}\" overridden with \"${actual}\".`;\n}\n\n// SCALE\nexport const CANNOT_UNION_CUSTOM_DOMAIN_WITH_FIELD_DOMAIN =\n 'Custom domain scale cannot be unioned with default field-based domain.';\n\nexport function cannotUseScalePropertyWithNonColor(prop: string) {\n return `Cannot use the scale property \"${prop}\" with non-color channel.`;\n}\n\nexport function cannotUseRelativeBandSizeWithNonBandScale(scaleType: ScaleType) {\n return `Cannot use the relative band size with ${scaleType} scale.`;\n}\n\nexport function unaggregateDomainHasNoEffectForRawField(fieldDef: TypedFieldDef) {\n return `Using unaggregated domain with raw field has no effect (${stringify(fieldDef)}).`;\n}\n\nexport function unaggregateDomainWithNonSharedDomainOp(aggregate: Aggregate | string) {\n return `Unaggregated domain not applicable for \"${aggregate}\" since it produces values outside the origin domain of the source data.`;\n}\n\nexport function unaggregatedDomainWithLogScale(fieldDef: TypedFieldDef) {\n return `Unaggregated domain is currently unsupported for log scale (${stringify(fieldDef)}).`;\n}\n\nexport function cannotApplySizeToNonOrientedMark(mark: Mark) {\n return `Cannot apply size to non-oriented mark \"${mark}\".`;\n}\n\nexport function scaleTypeNotWorkWithChannel(channel: Channel, scaleType: ScaleType, defaultScaleType: ScaleType) {\n return `Channel \"${channel}\" does not work with \"${scaleType}\" scale. We are using \"${defaultScaleType}\" scale instead.`;\n}\n\nexport function scaleTypeNotWorkWithFieldDef(scaleType: ScaleType, defaultScaleType: ScaleType) {\n return `FieldDef does not work with \"${scaleType}\" scale. We are using \"${defaultScaleType}\" scale instead.`;\n}\n\nexport function scalePropertyNotWorkWithScaleType(scaleType: ScaleType, propName: string, channel: Channel) {\n return `${channel}-scale's \"${propName}\" is dropped as it does not work with ${scaleType} scale.`;\n}\n\nexport function scaleTypeNotWorkWithMark(mark: Mark, scaleType: ScaleType) {\n return `Scale type \"${scaleType}\" does not work with mark \"${mark}\".`;\n}\n\nexport function stepDropped(channel: 'width' | 'height') {\n return `The step for \"${channel}\" is dropped because the ${channel === 'width' ? 'x' : 'y'} is continuous.`;\n}\n\nexport function mergeConflictingProperty(\n property: string | number | symbol,\n propertyOf: SplitParentProperty,\n v1: T,\n v2: T\n) {\n return `Conflicting ${propertyOf.toString()} property \"${property.toString()}\" (${stringify(v1)} and ${stringify(\n v2\n )}). Using ${stringify(v1)}.`;\n}\n\nexport function mergeConflictingDomainProperty(property: 'domains', propertyOf: SplitParentProperty, v1: T, v2: T) {\n return `Conflicting ${propertyOf.toString()} property \"${property.toString()}\" (${stringify(v1)} and ${stringify(\n v2\n )}). Using the union of the two domains.`;\n}\n\nexport function independentScaleMeansIndependentGuide(channel: Channel) {\n return `Setting the scale to be independent for \"${channel}\" means we also have to set the guide (axis or legend) to be independent.`;\n}\n\nexport function domainSortDropped(sort: VgSortField) {\n return `Dropping sort property ${stringify(\n sort\n )} as unioned domains only support boolean or op \"count\", \"min\", and \"max\".`;\n}\n\nexport const MORE_THAN_ONE_SORT =\n 'Domains that should be unioned has conflicting sort properties. Sort will be set to true.';\n\nexport const FACETED_INDEPENDENT_DIFFERENT_SOURCES =\n 'Detected faceted independent scales that union domain of multiple fields from different data sources. We will use the first field. The result view size may be incorrect.';\n\nexport const FACETED_INDEPENDENT_SAME_FIELDS_DIFFERENT_SOURCES =\n 'Detected faceted independent scales that union domain of the same fields from different source. We will assume that this is the same field from a different fork of the same data source. However, if this is not the case, the result view size may be incorrect.';\n\nexport const FACETED_INDEPENDENT_SAME_SOURCE =\n 'Detected faceted independent scales that union domain of multiple fields from the same data source. We will use the first field. The result view size may be incorrect.';\n\n// AXIS\nexport const INVALID_CHANNEL_FOR_AXIS = 'Invalid channel for axis.';\n\n// STACK\nexport function cannotStackRangedMark(channel: Channel) {\n return `Cannot stack \"${channel}\" if there is already \"${channel}2\".`;\n}\n\nexport function cannotStackNonLinearScale(scaleType: ScaleType) {\n return `Cannot stack non-linear scale (${scaleType}).`;\n}\n\nexport function stackNonSummativeAggregate(aggregate: Aggregate | string) {\n return `Stacking is applied even though the aggregate function is non-summative (\"${aggregate}\").`;\n}\n\n// TIMEUNIT\nexport function invalidTimeUnit(unitName: string, value: string | number) {\n return `Invalid ${unitName}: ${stringify(value)}.`;\n}\n\nexport function droppedDay(d: DateTime | DateTimeExpr) {\n return `Dropping day from datetime ${stringify(d)} as day cannot be combined with other units.`;\n}\n\nexport function errorBarCenterAndExtentAreNotNeeded(center: ErrorBarCenter, extent: ErrorBarExtent) {\n return `${extent ? 'extent ' : ''}${extent && center ? 'and ' : ''}${center ? 'center ' : ''}${\n extent && center ? 'are ' : 'is '\n }not needed when data are aggregated.`;\n}\n\nexport function errorBarCenterIsUsedWithWrongExtent(\n center: ErrorBarCenter,\n extent: ErrorBarExtent,\n mark: 'errorbar' | 'errorband'\n) {\n return `${center} is not usually used with ${extent} for ${mark}.`;\n}\n\nexport function errorBarContinuousAxisHasCustomizedAggregate(\n aggregate: Aggregate | string,\n compositeMark: CompositeMark\n) {\n return `Continuous axis should not have customized aggregation function ${aggregate}; ${compositeMark} already agregates the axis.`;\n}\n\nexport function errorBand1DNotSupport(property: 'interpolate' | 'tension') {\n return `1D error band does not support ${property}.`;\n}\n\n// CHANNEL\nexport function channelRequiredForBinned(channel: Channel) {\n return `Channel ${channel} is required for \"binned\" bin.`;\n}\n\nexport function channelShouldNotBeUsedForBinned(channel: ExtendedChannel) {\n return `Channel ${channel} should not be used with \"binned\" bin.`;\n}\n\nexport function domainRequiredForThresholdScale(channel: ScaleChannel) {\n return `Domain for ${channel} is required for threshold scale.`;\n}\n","/**\n * Vega-Lite's singleton logger utility.\n */\n\nimport {Debug, Error as ErrorLevel, Info, logger, LoggerInterface, Warn} from 'vega-util';\nexport * as message from './message';\n\n/**\n * Main (default) Vega Logger instance for Vega-Lite.\n */\nconst main = logger(Warn);\nlet current: LoggerInterface = main;\n\n/**\n * Logger tool for checking if the code throws correct warning.\n */\nexport class LocalLogger implements LoggerInterface {\n public warns: any[] = [];\n public infos: any[] = [];\n public debugs: any[] = [];\n\n #level: number = Warn;\n\n public level(): number;\n public level(_: number): this;\n public level(_?: number) {\n if (_) {\n this.#level = _;\n return this;\n }\n return this.#level;\n }\n\n public warn(...args: readonly any[]) {\n if (this.#level >= Warn) this.warns.push(...args);\n return this;\n }\n\n public info(...args: readonly any[]) {\n if (this.#level >= Info) this.infos.push(...args);\n return this;\n }\n\n public debug(...args: readonly any[]) {\n if (this.#level >= Debug) this.debugs.push(...args);\n return this;\n }\n\n public error(...args: readonly any[]): this {\n if (this.#level >= ErrorLevel) throw Error(...args);\n return this;\n }\n}\n\nexport function wrap(f: (logger: LocalLogger) => void) {\n return () => {\n current = new LocalLogger();\n f(current as LocalLogger);\n reset();\n };\n}\n\n/**\n * Set the singleton logger to be a custom logger.\n */\nexport function set(newLogger: LoggerInterface) {\n current = newLogger;\n return current;\n}\n\n/**\n * Reset the main logger to use the default Vega Logger.\n */\nexport function reset() {\n current = main;\n return current;\n}\n\nexport function error(...args: readonly any[]) {\n current.error(...args);\n}\n\nexport function warn(...args: readonly any[]) {\n current.warn(...args);\n}\n\nexport function info(...args: readonly any[]) {\n current.info(...args);\n}\n\nexport function debug(...args: readonly any[]) {\n current.debug(...args);\n}\n","// DateTime definition object\n\nimport {isNumber, isObject} from 'vega-util';\nimport * as log from './log';\nimport {TIMEUNIT_PARTS} from './timeunit';\nimport {duplicate, isNumeric, keys} from './util';\n\n/**\n * @minimum 1\n * @maximum 12\n * @TJS-type integer\n */\nexport type Month = number;\n\n/**\n * @minimum 1\n * @maximum 7\n */\nexport type Day = number;\n\n/**\n * Object for defining datetime in Vega-Lite Filter.\n * If both month and quarter are provided, month has higher precedence.\n * `day` cannot be combined with other date.\n * We accept string for month and day names.\n */\nexport interface DateTime {\n /**\n * Integer value representing the year.\n * @TJS-type integer\n */\n year?: number;\n\n /**\n * Integer value representing the quarter of the year (from 1-4).\n * @minimum 1\n * @maximum 4\n * @TJS-type integer\n */\n quarter?: number;\n\n /**\n * One of:\n * (1) integer value representing the month from `1`-`12`. `1` represents January;\n * (2) case-insensitive month name (e.g., `\"January\"`);\n * (3) case-insensitive, 3-character short month name (e.g., `\"Jan\"`).\n */\n month?: Month | string;\n\n /**\n * Integer value representing the date (day of the month) from 1-31.\n * @minimum 1\n * @maximum 31\n * @TJS-type integer\n */\n date?: number;\n\n /**\n * Value representing the day of a week. This can be one of:\n * (1) integer value -- `1` represents Monday;\n * (2) case-insensitive day name (e.g., `\"Monday\"`);\n * (3) case-insensitive, 3-character short day name (e.g., `\"Mon\"`).\n *\n * **Warning:** A DateTime definition object with `day`** should not be combined with `year`, `quarter`, `month`, or `date`.\n */\n day?: Day | string;\n\n /**\n * Integer value representing the hour of a day from 0-23.\n * @minimum 0\n * @maximum 24\n * @TJS-type integer\n */\n hours?: number;\n\n /**\n * Integer value representing the minute segment of time from 0-59.\n * @minimum 0\n * @maximum 60\n * @TJS-type integer\n */\n minutes?: number;\n\n /**\n * Integer value representing the second segment (0-59) of a time value\n * @minimum 0\n * @maximum 60\n * @TJS-type integer\n */\n seconds?: number;\n\n /**\n * Integer value representing the millisecond segment of time.\n * @minimum 0\n * @maximum 1000\n * @TJS-type integer\n */\n milliseconds?: number;\n\n /**\n * A boolean flag indicating if date time is in utc time. If false, the date time is in local time\n */\n utc?: boolean;\n}\n\n/**\n * Internal Object for defining datetime expressions.\n * This is an expression version of DateTime.\n * If both month and quarter are provided, month has higher precedence.\n * `day` cannot be combined with other date.\n */\nexport interface DateTimeExpr {\n year?: string;\n quarter?: string;\n month?: string;\n date?: string;\n day?: string;\n hours?: string;\n minutes?: string;\n seconds?: string;\n milliseconds?: string;\n utc?: boolean;\n}\n\nexport function isDateTime(o: any): o is DateTime {\n if (o && isObject(o)) {\n for (const part of TIMEUNIT_PARTS) {\n if (part in o) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport const MONTHS = [\n 'january',\n 'february',\n 'march',\n 'april',\n 'may',\n 'june',\n 'july',\n 'august',\n 'september',\n 'october',\n 'november',\n 'december'\n];\nexport const SHORT_MONTHS = MONTHS.map(m => m.substr(0, 3));\n\nexport const DAYS = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];\nexport const SHORT_DAYS = DAYS.map(d => d.substr(0, 3));\n\nfunction normalizeQuarter(q: number | string): number {\n if (isNumeric(q)) {\n q = +q;\n }\n\n if (isNumber(q)) {\n if (q > 4) {\n log.warn(log.message.invalidTimeUnit('quarter', q));\n }\n // We accept 1-based quarter, so need to readjust to 0-based quarter\n return q - 1;\n } else {\n // Invalid quarter\n throw new Error(log.message.invalidTimeUnit('quarter', q));\n }\n}\n\nfunction normalizeMonth(m: string | number): number {\n if (isNumeric(m)) {\n m = +m;\n }\n\n if (isNumber(m)) {\n // We accept 1-based month, so need to readjust to 0-based month\n return m - 1;\n } else {\n const lowerM = m.toLowerCase();\n const monthIndex = MONTHS.indexOf(lowerM);\n if (monthIndex !== -1) {\n return monthIndex; // 0 for january, ...\n }\n const shortM = lowerM.substr(0, 3);\n const shortMonthIndex = SHORT_MONTHS.indexOf(shortM);\n if (shortMonthIndex !== -1) {\n return shortMonthIndex;\n }\n\n // Invalid month\n throw new Error(log.message.invalidTimeUnit('month', m));\n }\n}\n\nfunction normalizeDay(d: string | number): number {\n if (isNumeric(d)) {\n d = +d;\n }\n\n if (isNumber(d)) {\n // mod so that this can be both 0-based where 0 = sunday\n // and 1-based where 7=sunday\n return d % 7;\n } else {\n const lowerD = d.toLowerCase();\n const dayIndex = DAYS.indexOf(lowerD);\n if (dayIndex !== -1) {\n return dayIndex; // 0 for january, ...\n }\n const shortD = lowerD.substr(0, 3);\n const shortDayIndex = SHORT_DAYS.indexOf(shortD);\n if (shortDayIndex !== -1) {\n return shortDayIndex;\n }\n // Invalid day\n throw new Error(log.message.invalidTimeUnit('day', d));\n }\n}\n\n/**\n * @param d the date.\n * @param normalize whether to normalize quarter, month, day. This should probably be true if d is a DateTime.\n * @returns array of date time parts [year, month, day, hours, minutes, seconds, milliseconds]\n */\nfunction dateTimeParts(d: DateTime | DateTimeExpr, normalize: boolean) {\n const parts: (string | number)[] = [];\n\n if (normalize && d.day !== undefined) {\n if (keys(d).length > 1) {\n log.warn(log.message.droppedDay(d));\n d = duplicate(d);\n delete d.day;\n }\n }\n\n if (d.year !== undefined) {\n parts.push(d.year);\n } else {\n // Just like Vega's timeunit transform, set default year to 2012, so domain conversion will be compatible with Vega\n // Note: 2012 is a leap year (and so the date February 29 is respected) that begins on a Sunday (and so days of the week will order properly at the beginning of the year).\n parts.push(2012);\n }\n\n if (d.month !== undefined) {\n const month = normalize ? normalizeMonth(d.month) : d.month;\n parts.push(month);\n } else if (d.quarter !== undefined) {\n const quarter = normalize ? normalizeQuarter(d.quarter) : d.quarter;\n parts.push(isNumber(quarter) ? quarter * 3 : `${quarter}*3`);\n } else {\n parts.push(0); // months start at zero in JS\n }\n\n if (d.date !== undefined) {\n parts.push(d.date);\n } else if (d.day !== undefined) {\n // HACK: Day only works as a standalone unit\n // This is only correct because we always set year to 2006 for day\n const day = normalize ? normalizeDay(d.day) : d.day;\n parts.push(isNumber(day) ? day + 1 : `${day}+1`);\n } else {\n parts.push(1); // Date starts at 1 in JS\n }\n\n // Note: can't use TimeUnit enum here as importing it will create\n // circular dependency problem!\n for (const timeUnit of ['hours', 'minutes', 'seconds', 'milliseconds'] as const) {\n const unit = d[timeUnit];\n parts.push(typeof unit === 'undefined' ? 0 : unit);\n }\n\n return parts;\n}\n\n/**\n * Return Vega expression for a date time.\n *\n * @param d the date time.\n * @returns the Vega expression.\n */\nexport function dateTimeToExpr(d: DateTime) {\n const parts: (string | number)[] = dateTimeParts(d, true);\n\n const string = parts.join(', ');\n\n if (d.utc) {\n return `utc(${string})`;\n } else {\n return `datetime(${string})`;\n }\n}\n\n/**\n * Return Vega expression for a date time expression.\n *\n * @param d the internal date time object with expression.\n * @returns the Vega expression.\n */\nexport function dateTimeExprToExpr(d: DateTimeExpr) {\n const parts: (string | number)[] = dateTimeParts(d, false);\n\n const string = parts.join(', ');\n\n if (d.utc) {\n return `utc(${string})`;\n } else {\n return `datetime(${string})`;\n }\n}\n\n/**\n * @param d the date time.\n * @returns the timestamp.\n */\nexport function dateTimeToTimestamp(d: DateTime) {\n const parts: (string | number)[] = dateTimeParts(d, true);\n\n if (d.utc) {\n return +new Date(Date.UTC(...(parts as [any, any])));\n } else {\n return +new Date(...(parts as [any]));\n }\n}\n","import {isObject, isString} from 'vega-util';\nimport {DateTimeExpr, dateTimeExprToExpr} from './datetime';\nimport {accessPathWithDatum, keys, stringify, varName} from './util';\n\n/** Time Unit that only corresponds to only one part of Date objects. */\nexport const LOCAL_SINGLE_TIMEUNIT_INDEX = {\n year: 1,\n quarter: 1,\n month: 1,\n week: 1,\n day: 1,\n dayofyear: 1,\n date: 1,\n hours: 1,\n minutes: 1,\n seconds: 1,\n milliseconds: 1\n} as const;\n\nexport type LocalSingleTimeUnit = keyof typeof LOCAL_SINGLE_TIMEUNIT_INDEX;\n\nexport const TIMEUNIT_PARTS = keys(LOCAL_SINGLE_TIMEUNIT_INDEX);\n\nexport function isLocalSingleTimeUnit(timeUnit: string): timeUnit is LocalSingleTimeUnit {\n return !!LOCAL_SINGLE_TIMEUNIT_INDEX[timeUnit];\n}\n\nexport const UTC_SINGLE_TIMEUNIT_INDEX = {\n utcyear: 1,\n utcquarter: 1,\n utcmonth: 1,\n utcweek: 1,\n utcday: 1,\n utcdayofyear: 1,\n utcdate: 1,\n utchours: 1,\n utcminutes: 1,\n utcseconds: 1,\n utcmilliseconds: 1\n} as const;\n\nexport type UtcSingleTimeUnit = keyof typeof UTC_SINGLE_TIMEUNIT_INDEX;\n\nexport type SingleTimeUnit = LocalSingleTimeUnit | UtcSingleTimeUnit;\n\nexport const LOCAL_MULTI_TIMEUNIT_INDEX = {\n yearquarter: 1,\n yearquartermonth: 1,\n\n yearmonth: 1,\n yearmonthdate: 1,\n yearmonthdatehours: 1,\n yearmonthdatehoursminutes: 1,\n yearmonthdatehoursminutesseconds: 1,\n\n yearweek: 1,\n yearweekday: 1,\n yearweekdayhours: 1,\n yearweekdayhoursminutes: 1,\n yearweekdayhoursminutesseconds: 1,\n\n yeardayofyear: 1,\n\n quartermonth: 1,\n\n monthdate: 1,\n monthdatehours: 1,\n monthdatehoursminutes: 1,\n monthdatehoursminutesseconds: 1,\n\n weekday: 1,\n weeksdayhours: 1,\n weekdayhoursminutes: 1,\n weekdayhoursminutesseconds: 1,\n\n dayhours: 1,\n dayhoursminutes: 1,\n dayhoursminutesseconds: 1,\n\n hoursminutes: 1,\n hoursminutesseconds: 1,\n\n minutesseconds: 1,\n\n secondsmilliseconds: 1\n} as const;\n\nexport type LocalMultiTimeUnit = keyof typeof LOCAL_MULTI_TIMEUNIT_INDEX;\n\nexport const UTC_MULTI_TIMEUNIT_INDEX = {\n utcyearquarter: 1,\n utcyearquartermonth: 1,\n\n utcyearmonth: 1,\n utcyearmonthdate: 1,\n utcyearmonthdatehours: 1,\n utcyearmonthdatehoursminutes: 1,\n utcyearmonthdatehoursminutesseconds: 1,\n\n utcyearweek: 1,\n utcyearweekday: 1,\n utcyearweekdayhours: 1,\n utcyearweekdayhoursminutes: 1,\n utcyearweekdayhoursminutesseconds: 1,\n\n utcyeardayofyear: 1,\n\n utcquartermonth: 1,\n\n utcmonthdate: 1,\n utcmonthdatehours: 1,\n utcmonthdatehoursminutes: 1,\n utcmonthdatehoursminutesseconds: 1,\n\n utcweekday: 1,\n utcweeksdayhours: 1,\n utcweekdayhoursminutes: 1,\n utcweekdayhoursminutesseconds: 1,\n\n utcdayhours: 1,\n utcdayhoursminutes: 1,\n utcdayhoursminutesseconds: 1,\n\n utchoursminutes: 1,\n utchoursminutesseconds: 1,\n\n utcminutesseconds: 1,\n\n utcsecondsmilliseconds: 1\n} as const;\n\nexport type UtcMultiTimeUnit = keyof typeof UTC_MULTI_TIMEUNIT_INDEX;\n\nexport type MultiTimeUnit = LocalMultiTimeUnit | UtcMultiTimeUnit;\n\nexport type LocalTimeUnit = LocalSingleTimeUnit | LocalMultiTimeUnit;\nexport type UtcTimeUnit = UtcSingleTimeUnit | UtcMultiTimeUnit;\n\nexport function isUTCTimeUnit(t: string): t is UtcTimeUnit {\n return t.startsWith('utc');\n}\n\nexport function getLocalTimeUnit(t: UtcTimeUnit): LocalTimeUnit {\n return t.substr(3) as LocalTimeUnit;\n}\n\nexport type TimeUnit = SingleTimeUnit | MultiTimeUnit;\n\nexport type TimeUnitFormat =\n | 'year'\n | 'year-month'\n | 'year-month-date'\n | 'quarter'\n | 'month'\n | 'date'\n | 'week'\n | 'day'\n | 'hours'\n | 'hours-minutes'\n | 'minutes'\n | 'seconds'\n | 'milliseconds';\n\nexport interface TimeUnitParams {\n /**\n * Defines how date-time values should be binned.\n */\n unit?: TimeUnit;\n\n /**\n * If no `unit` is specified, maxbins is used to infer time units.\n */\n maxbins?: number;\n\n /**\n * The number of steps between bins, in terms of the least\n * significant unit provided.\n */\n step?: number;\n\n /**\n * True to use UTC timezone. Equivalent to using a `utc` prefixed `TimeUnit`.\n */\n utc?: boolean;\n}\n\n// matches vega time unit format specifier\nexport type TimeFormatConfig = Partial>;\n\n// In order of increasing specificity\nexport const VEGALITE_TIMEFORMAT: TimeFormatConfig = {\n 'year-month': '%b %Y ',\n 'year-month-date': '%b %d, %Y '\n};\n\nexport function getTimeUnitParts(timeUnit: TimeUnit): LocalSingleTimeUnit[] {\n return TIMEUNIT_PARTS.filter(part => containsTimeUnit(timeUnit, part));\n}\n\n/** Returns true if fullTimeUnit contains the timeUnit, false otherwise. */\nexport function containsTimeUnit(fullTimeUnit: TimeUnit, timeUnit: TimeUnit) {\n const index = fullTimeUnit.indexOf(timeUnit);\n\n if (index < 0) {\n return false;\n }\n\n // exclude milliseconds\n if (index > 0 && timeUnit === 'seconds' && fullTimeUnit.charAt(index - 1) === 'i') {\n return false;\n }\n\n // exclude dayofyear\n if (fullTimeUnit.length > index + 3 && timeUnit === 'day' && fullTimeUnit.charAt(index + 3) === 'o') {\n return false;\n }\n if (index > 0 && timeUnit === 'year' && fullTimeUnit.charAt(index - 1) === 'f') {\n return false;\n }\n\n return true;\n}\n\n/**\n * Returns Vega expression for a given timeUnit and fieldRef\n */\nexport function fieldExpr(fullTimeUnit: TimeUnit, field: string, {end}: {end: boolean} = {end: false}): string {\n const fieldRef = accessPathWithDatum(field);\n\n const utc = isUTCTimeUnit(fullTimeUnit) ? 'utc' : '';\n\n function func(timeUnit: TimeUnit) {\n if (timeUnit === 'quarter') {\n // quarter starting at 0 (0,3,6,9).\n return `(${utc}quarter(${fieldRef})-1)`;\n } else {\n return `${utc}${timeUnit}(${fieldRef})`;\n }\n }\n\n let lastTimeUnit: TimeUnit;\n\n const dateExpr: DateTimeExpr = {};\n\n for (const part of TIMEUNIT_PARTS) {\n if (containsTimeUnit(fullTimeUnit, part)) {\n dateExpr[part] = func(part);\n lastTimeUnit = part;\n }\n }\n\n if (end) {\n dateExpr[lastTimeUnit] += '+1';\n }\n\n return dateTimeExprToExpr(dateExpr);\n}\n\nexport function timeUnitSpecifierExpression(timeUnit: TimeUnit) {\n if (!timeUnit) {\n return undefined;\n }\n\n const timeUnitParts = getTimeUnitParts(timeUnit);\n return `timeUnitSpecifier(${stringify(timeUnitParts)}, ${stringify(VEGALITE_TIMEFORMAT)})`;\n}\n\n/**\n * Returns the signal expression used for axis labels for a time unit.\n */\nexport function formatExpression(timeUnit: TimeUnit, field: string, isUTCScale: boolean): string {\n if (!timeUnit) {\n return undefined;\n }\n\n const expr = timeUnitSpecifierExpression(timeUnit);\n\n // We only use utcFormat for utc scale\n // For utc time units, the data is already converted as a part of timeUnit transform.\n // Thus, utc time units should use timeFormat to avoid shifting the time twice.\n const utc = isUTCScale || isUTCTimeUnit(timeUnit);\n\n return `${utc ? 'utc' : 'time'}Format(${field}, ${expr})`;\n}\n\nexport function normalizeTimeUnit(timeUnit: TimeUnit | TimeUnitParams): TimeUnitParams {\n if (!timeUnit) {\n return undefined;\n }\n\n let params: TimeUnitParams;\n if (isString(timeUnit)) {\n params = {\n unit: timeUnit\n };\n } else if (isObject(timeUnit)) {\n params = {\n ...timeUnit,\n ...(timeUnit.unit ? {unit: timeUnit.unit} : {})\n };\n }\n\n if (isUTCTimeUnit(params.unit)) {\n params.utc = true;\n params.unit = getLocalTimeUnit(params.unit);\n }\n\n return params;\n}\n\nexport function timeUnitToString(tu: TimeUnit | TimeUnitParams) {\n const {utc, ...rest} = normalizeTimeUnit(tu);\n\n if (rest.unit) {\n return (\n (utc ? 'utc' : '') +\n keys(rest)\n .map(p => varName(`${p === 'unit' ? '' : `_${p}_`}${rest[p]}`))\n .join('')\n );\n } else {\n // when maxbins is specified instead of units\n return (\n (utc ? 'utc' : '') +\n 'timeunit' +\n keys(rest)\n .map(p => varName(`_${p}_${rest[p]}`))\n .join('')\n );\n }\n}\n","import {SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {FieldName, valueExpr, vgField} from './channeldef';\nimport {DateTime} from './datetime';\nimport {ExprRef} from './expr';\nimport {LogicalComposition} from './logical';\nimport {ParameterName} from './parameter';\nimport {fieldExpr as timeUnitFieldExpr, normalizeTimeUnit, TimeUnit, TimeUnitParams} from './timeunit';\nimport {stringify} from './util';\nimport {isSignalRef} from './vega.schema';\n\nexport type Predicate =\n // a) FieldPredicate (but we don't type FieldFilter here so the schema has no nesting\n // and thus the documentation shows all of the types clearly)\n | FieldEqualPredicate\n | FieldRangePredicate\n | FieldOneOfPredicate\n | FieldLTPredicate\n | FieldGTPredicate\n | FieldLTEPredicate\n | FieldGTEPredicate\n | FieldValidPredicate\n // b) Selection Predicate\n | ParameterPredicate\n // c) Vega Expression string\n | string;\n\nexport type FieldPredicate =\n | FieldEqualPredicate\n | FieldLTPredicate\n | FieldGTPredicate\n | FieldLTEPredicate\n | FieldGTEPredicate\n | FieldRangePredicate\n | FieldOneOfPredicate\n | FieldValidPredicate;\n\nexport interface ParameterPredicate {\n /**\n * Filter using a parameter name.\n */\n param: ParameterName;\n /**\n * For selection parameters, the predicate of empty selections returns true by default.\n * Override this behavior, by setting this property `empty: false`.\n */\n empty?: boolean;\n}\n\nexport function isSelectionPredicate(predicate: LogicalComposition): predicate is ParameterPredicate {\n return predicate?.['param'];\n}\n\nexport interface FieldPredicateBase {\n // TODO: support aggregate\n\n /**\n * Time unit for the field to be tested.\n */\n timeUnit?: TimeUnit | TimeUnitParams;\n\n /**\n * Field to be tested.\n */\n field: FieldName;\n}\n\nexport interface FieldEqualPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be equal to.\n */\n equal: string | number | boolean | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldEqualPredicate(predicate: any): predicate is FieldEqualPredicate {\n return predicate && !!predicate.field && predicate.equal !== undefined;\n}\n\nexport interface FieldLTPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be less than.\n */\n lt: string | number | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldLTPredicate(predicate: any): predicate is FieldLTPredicate {\n return predicate && !!predicate.field && predicate.lt !== undefined;\n}\n\nexport interface FieldLTEPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be less than or equals to.\n */\n lte: string | number | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldLTEPredicate(predicate: any): predicate is FieldLTEPredicate {\n return predicate && !!predicate.field && predicate.lte !== undefined;\n}\n\nexport interface FieldGTPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be greater than.\n */\n gt: string | number | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldGTPredicate(predicate: any): predicate is FieldGTPredicate {\n return predicate && !!predicate.field && predicate.gt !== undefined;\n}\n\nexport interface FieldGTEPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be greater than or equals to.\n */\n gte: string | number | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldGTEPredicate(predicate: any): predicate is FieldGTEPredicate {\n return predicate && !!predicate.field && predicate.gte !== undefined;\n}\n\nexport interface FieldRangePredicate extends FieldPredicateBase {\n /**\n * An array of inclusive minimum and maximum values\n * for a field value of a data item to be included in the filtered data.\n * @maxItems 2\n * @minItems 2\n */\n range: (number | DateTime | null | ExprRef | SignalRef)[] | ExprRef | SignalRef;\n}\n\nexport function isFieldRangePredicate(predicate: any): predicate is FieldRangePredicate {\n if (predicate && predicate.field) {\n if (isArray(predicate.range) && predicate.range.length === 2) {\n return true;\n } else if (isSignalRef(predicate.range)) {\n return true;\n }\n }\n return false;\n}\n\nexport interface FieldOneOfPredicate extends FieldPredicateBase {\n /**\n * A set of values that the `field`'s value should be a member of,\n * for a data item included in the filtered data.\n */\n oneOf: string[] | number[] | boolean[] | DateTime[];\n}\n\nexport interface FieldValidPredicate extends FieldPredicateBase {\n /**\n * If set to true the field's value has to be valid, meaning both not `null` and not [`NaN`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN).\n */\n valid: boolean;\n}\n\nexport function isFieldOneOfPredicate(predicate: any): predicate is FieldOneOfPredicate {\n return (\n predicate && !!predicate.field && (isArray(predicate.oneOf) || isArray(predicate.in)) // backward compatibility\n );\n}\n\nexport function isFieldValidPredicate(predicate: any): predicate is FieldValidPredicate {\n return predicate && !!predicate.field && predicate.valid !== undefined;\n}\n\nexport function isFieldPredicate(\n predicate: Predicate\n): predicate is\n | FieldOneOfPredicate\n | FieldEqualPredicate\n | FieldRangePredicate\n | FieldLTPredicate\n | FieldGTPredicate\n | FieldLTEPredicate\n | FieldGTEPredicate {\n return (\n isFieldOneOfPredicate(predicate) ||\n isFieldEqualPredicate(predicate) ||\n isFieldRangePredicate(predicate) ||\n isFieldLTPredicate(predicate) ||\n isFieldGTPredicate(predicate) ||\n isFieldLTEPredicate(predicate) ||\n isFieldGTEPredicate(predicate)\n );\n}\n\nfunction predicateValueExpr(v: number | string | boolean | DateTime | ExprRef | SignalRef, timeUnit: TimeUnit) {\n return valueExpr(v, {timeUnit, wrapTime: true});\n}\n\nfunction predicateValuesExpr(vals: (number | string | boolean | DateTime)[], timeUnit: TimeUnit) {\n return vals.map(v => predicateValueExpr(v, timeUnit));\n}\n\n// This method is used by Voyager. Do not change its behavior without changing Voyager.\nexport function fieldFilterExpression(predicate: FieldPredicate, useInRange = true) {\n const {field} = predicate;\n const timeUnit = normalizeTimeUnit(predicate.timeUnit)?.unit;\n const fieldExpr = timeUnit\n ? // For timeUnit, cast into integer with time() so we can use ===, inrange, indexOf to compare values directly.\n // TODO: We calculate timeUnit on the fly here. Consider if we would like to consolidate this with timeUnit pipeline\n // TODO: support utc\n `time(${timeUnitFieldExpr(timeUnit, field)})`\n : vgField(predicate, {expr: 'datum'});\n\n if (isFieldEqualPredicate(predicate)) {\n return `${fieldExpr}===${predicateValueExpr(predicate.equal, timeUnit)}`;\n } else if (isFieldLTPredicate(predicate)) {\n const upper = predicate.lt;\n return `${fieldExpr}<${predicateValueExpr(upper, timeUnit)}`;\n } else if (isFieldGTPredicate(predicate)) {\n const lower = predicate.gt;\n return `${fieldExpr}>${predicateValueExpr(lower, timeUnit)}`;\n } else if (isFieldLTEPredicate(predicate)) {\n const upper = predicate.lte;\n return `${fieldExpr}<=${predicateValueExpr(upper, timeUnit)}`;\n } else if (isFieldGTEPredicate(predicate)) {\n const lower = predicate.gte;\n return `${fieldExpr}>=${predicateValueExpr(lower, timeUnit)}`;\n } else if (isFieldOneOfPredicate(predicate)) {\n return `indexof([${predicateValuesExpr(predicate.oneOf, timeUnit).join(',')}], ${fieldExpr}) !== -1`;\n } else if (isFieldValidPredicate(predicate)) {\n return fieldValidPredicate(fieldExpr, predicate.valid);\n } else if (isFieldRangePredicate(predicate)) {\n const {range} = predicate;\n const lower = isSignalRef(range) ? {signal: `${range.signal}[0]`} : range[0];\n const upper = isSignalRef(range) ? {signal: `${range.signal}[1]`} : range[1];\n\n if (lower !== null && upper !== null && useInRange) {\n return (\n 'inrange(' +\n fieldExpr +\n ', [' +\n predicateValueExpr(lower, timeUnit) +\n ', ' +\n predicateValueExpr(upper, timeUnit) +\n '])'\n );\n }\n\n const exprs = [];\n if (lower !== null) {\n exprs.push(`${fieldExpr} >= ${predicateValueExpr(lower, timeUnit)}`);\n }\n if (upper !== null) {\n exprs.push(`${fieldExpr} <= ${predicateValueExpr(upper, timeUnit)}`);\n }\n\n return exprs.length > 0 ? exprs.join(' && ') : 'true';\n }\n\n /* istanbul ignore next: it should never reach here */\n throw new Error(`Invalid field predicate: ${stringify(predicate)}`);\n}\n\nexport function fieldValidPredicate(fieldExpr: string, valid = true) {\n if (valid) {\n return `isValid(${fieldExpr}) && isFinite(+${fieldExpr})`;\n } else {\n return `!isValid(${fieldExpr}) || !isFinite(+${fieldExpr})`;\n }\n}\n\nexport function normalizePredicate(f: Predicate): Predicate {\n if (isFieldPredicate(f) && f.timeUnit) {\n return {\n ...f,\n timeUnit: normalizeTimeUnit(f.timeUnit)?.unit\n };\n }\n return f;\n}\n","import {keys} from './util';\n\n/**\n * Data type based on level of measurement\n */\nexport const Type = {\n quantitative: 'quantitative',\n ordinal: 'ordinal',\n temporal: 'temporal',\n nominal: 'nominal',\n geojson: 'geojson'\n} as const;\n\nexport type Type = keyof typeof Type;\n\nexport function isType(t: any): t is Type {\n return t in Type;\n}\n\nexport const QUANTITATIVE = Type.quantitative;\nexport const ORDINAL = Type.ordinal;\nexport const TEMPORAL = Type.temporal;\nexport const NOMINAL = Type.nominal;\n\nexport const GEOJSON = Type.geojson;\n\nexport type StandardType = 'quantitative' | 'ordinal' | 'temporal' | 'nominal';\n\nexport const TYPES = keys(Type);\n\n/**\n * Get full, lowercase type name for a given type.\n * @param type\n * @return Full type name.\n */\nexport function getFullName(type: Type | string): Type | undefined {\n if (type) {\n type = type.toLowerCase();\n switch (type) {\n case 'q':\n case QUANTITATIVE:\n return 'quantitative';\n case 't':\n case TEMPORAL:\n return 'temporal';\n case 'o':\n case ORDINAL:\n return 'ordinal';\n case 'n':\n case NOMINAL:\n return 'nominal';\n case GEOJSON:\n return 'geojson';\n }\n }\n // If we get invalid input, return undefined type.\n return undefined;\n}\n","import {\n RangeEnum,\n ScaleBins,\n ScaleInterpolateEnum,\n ScaleInterpolateParams,\n SignalRef,\n TimeInterval,\n TimeIntervalStep\n} from 'vega';\nimport {isString, toSet} from 'vega-util';\nimport * as CHANNEL from './channel';\nimport {Channel, isColorChannel} from './channel';\nimport {DateTime} from './datetime';\nimport {ExprRef} from './expr';\nimport * as log from './log';\nimport {ParameterExtent} from './selection';\nimport {NOMINAL, ORDINAL, QUANTITATIVE, TEMPORAL, Type} from './type';\nimport {contains, Flag, keys} from './util';\n\nexport const ScaleType = {\n // Continuous - Quantitative\n LINEAR: 'linear',\n LOG: 'log',\n POW: 'pow',\n SQRT: 'sqrt',\n SYMLOG: 'symlog',\n\n IDENTITY: 'identity',\n SEQUENTIAL: 'sequential',\n\n // Continuous - Time\n TIME: 'time',\n UTC: 'utc',\n\n // Discretizing scales\n QUANTILE: 'quantile',\n QUANTIZE: 'quantize',\n THRESHOLD: 'threshold',\n BIN_ORDINAL: 'bin-ordinal',\n\n // Discrete scales\n ORDINAL: 'ordinal',\n POINT: 'point',\n BAND: 'band'\n} as const;\n\ntype ValueOf = T[keyof T];\nexport type ScaleType = ValueOf;\n\n/**\n * Index for scale categories -- only scale of the same categories can be merged together.\n * Current implementation is trying to be conservative and avoid merging scale type that might not work together\n */\nexport const SCALE_CATEGORY_INDEX: Record = {\n linear: 'numeric',\n log: 'numeric',\n pow: 'numeric',\n sqrt: 'numeric',\n symlog: 'numeric',\n identity: 'numeric',\n sequential: 'numeric',\n time: 'time',\n utc: 'time',\n ordinal: 'ordinal',\n 'bin-ordinal': 'bin-ordinal', // TODO: should bin-ordinal support merging with other\n point: 'ordinal-position',\n band: 'ordinal-position',\n quantile: 'discretizing',\n quantize: 'discretizing',\n threshold: 'discretizing'\n};\n\nexport const SCALE_TYPES: ScaleType[] = keys(SCALE_CATEGORY_INDEX);\n\n/**\n * Whether the two given scale types can be merged together.\n */\nexport function scaleCompatible(scaleType1: ScaleType, scaleType2: ScaleType) {\n const scaleCategory1 = SCALE_CATEGORY_INDEX[scaleType1];\n const scaleCategory2 = SCALE_CATEGORY_INDEX[scaleType2];\n return (\n scaleCategory1 === scaleCategory2 ||\n (scaleCategory1 === 'ordinal-position' && scaleCategory2 === 'time') ||\n (scaleCategory2 === 'ordinal-position' && scaleCategory1 === 'time')\n );\n}\n\n/**\n * Index for scale precedence -- high score = higher priority for merging.\n */\nconst SCALE_PRECEDENCE_INDEX: Record = {\n // numeric\n linear: 0,\n log: 1,\n pow: 1,\n sqrt: 1,\n symlog: 1,\n identity: 1,\n sequential: 1,\n // time\n time: 0,\n utc: 0,\n // ordinal-position -- these have higher precedence than continuous scales as they support more types of data\n point: 10,\n band: 11, // band has higher precedence as it is better for interaction\n // non grouped types\n ordinal: 0,\n 'bin-ordinal': 0,\n quantile: 0,\n quantize: 0,\n threshold: 0\n};\n\n/**\n * Return scale categories -- only scale of the same categories can be merged together.\n */\nexport function scaleTypePrecedence(scaleType: ScaleType): number {\n return SCALE_PRECEDENCE_INDEX[scaleType];\n}\n\nexport const CONTINUOUS_TO_CONTINUOUS_SCALES: ScaleType[] = ['linear', 'log', 'pow', 'sqrt', 'symlog', 'time', 'utc'];\nconst CONTINUOUS_TO_CONTINUOUS_INDEX = toSet(CONTINUOUS_TO_CONTINUOUS_SCALES);\n\nexport const QUANTITATIVE_SCALES: ScaleType[] = ['linear', 'log', 'pow', 'sqrt', 'symlog'];\n\nconst QUANTITATIVE_SCALES_INDEX = toSet(QUANTITATIVE_SCALES);\n\nexport function isQuantitative(type: ScaleType): type is 'linear' | 'log' | 'pow' | 'sqrt' | 'symlog' {\n return type in QUANTITATIVE_SCALES_INDEX;\n}\n\nexport const CONTINUOUS_TO_DISCRETE_SCALES: ScaleType[] = ['quantile', 'quantize', 'threshold'];\nconst CONTINUOUS_TO_DISCRETE_INDEX = toSet(CONTINUOUS_TO_DISCRETE_SCALES);\n\nexport const CONTINUOUS_DOMAIN_SCALES: ScaleType[] = CONTINUOUS_TO_CONTINUOUS_SCALES.concat([\n 'quantile',\n 'quantize',\n 'threshold',\n 'sequential',\n 'identity'\n]);\nconst CONTINUOUS_DOMAIN_INDEX = toSet(CONTINUOUS_DOMAIN_SCALES);\n\nexport const DISCRETE_DOMAIN_SCALES: ScaleType[] = ['ordinal', 'bin-ordinal', 'point', 'band'];\nconst DISCRETE_DOMAIN_INDEX = toSet(DISCRETE_DOMAIN_SCALES);\n\nexport const TIME_SCALE_TYPES: ScaleType[] = ['time', 'utc'];\n\nexport function hasDiscreteDomain(type: ScaleType): type is 'ordinal' | 'bin-ordinal' | 'point' | 'band' {\n return type in DISCRETE_DOMAIN_INDEX;\n}\n\nexport function hasContinuousDomain(\n type: ScaleType\n): type is 'linear' | 'log' | 'pow' | 'sqrt' | 'symlog' | 'time' | 'utc' | 'quantile' | 'quantize' | 'threshold' {\n return type in CONTINUOUS_DOMAIN_INDEX;\n}\n\nexport function isContinuousToContinuous(\n type: ScaleType\n): type is 'linear' | 'log' | 'pow' | 'sqrt' | 'symlog' | 'time' | 'utc' {\n return type in CONTINUOUS_TO_CONTINUOUS_INDEX;\n}\n\nexport function isContinuousToDiscrete(type: ScaleType): type is 'quantile' | 'quantize' | 'threshold' {\n return type in CONTINUOUS_TO_DISCRETE_INDEX;\n}\n\nexport interface ScaleConfig {\n /**\n * If true, rounds numeric output values to integers.\n * This can be helpful for snapping to the pixel grid.\n * (Only available for `x`, `y`, and `size` scales.)\n */\n round?: boolean | ES;\n\n /**\n * If true, values that exceed the data domain are clamped to either the minimum or maximum range value\n */\n clamp?: boolean | ES;\n\n /**\n * Default inner padding for `x` and `y` band-ordinal scales.\n *\n * __Default value:__\n * - `barBandPaddingInner` for bar marks (`0.1` by default)\n * - `rectBandPaddingInner` for rect and other marks (`0` by default)\n *\n * @minimum 0\n * @maximum 1\n */\n bandPaddingInner?: number | ES;\n\n /**\n * Default outer padding for `x` and `y` band-ordinal scales.\n *\n * __Default value:__ `paddingInner/2` (which makes _width/height = number of unique values * step_)\n *\n * @minimum 0\n * @maximum 1\n */\n bandPaddingOuter?: number | ES;\n\n /**\n * Default inner padding for `x` and `y` band-ordinal scales of `\"bar\"` marks.\n *\n * __Default value:__ `0.1`\n *\n * @minimum 0\n * @maximum 1\n */\n barBandPaddingInner?: number | ES;\n\n /**\n * Default inner padding for `x` and `y` band-ordinal scales of `\"rect\"` marks.\n *\n * __Default value:__ `0`\n *\n * @minimum 0\n * @maximum 1\n */\n rectBandPaddingInner?: number | ES;\n\n /**\n * Default padding for continuous scales.\n *\n * __Default:__ `5` for continuous x-scale of a vertical bar and continuous y-scale of a horizontal bar.; `0` otherwise.\n *\n * @minimum 0\n */\n continuousPadding?: number | ES;\n\n /**\n * Default outer padding for `x` and `y` point-ordinal scales.\n *\n * __Default value:__ `0.5` (which makes _width/height = number of unique values * step_)\n *\n * @minimum 0\n * @maximum 1\n */\n pointPadding?: number | ES;\n\n /**\n * Use the source data range before aggregation as scale domain instead of aggregated data for aggregate axis.\n *\n * This is equivalent to setting `domain` to `\"unaggregate\"` for aggregated _quantitative_ fields by default.\n *\n * This property only works with aggregate functions that produce values within the raw data domain (`\"mean\"`, `\"average\"`, `\"median\"`, `\"q1\"`, `\"q3\"`, `\"min\"`, `\"max\"`). For other aggregations that produce values outside of the raw data domain (e.g. `\"count\"`, `\"sum\"`), this property is ignored.\n *\n * __Default value:__ `false`\n */\n useUnaggregatedDomain?: boolean;\n\n // nice should depends on type (quantitative or temporal), so\n // let's not make a config.\n\n // Configs for Range\n\n /**\n * The default max value for mapping quantitative fields to bar's size/bandSize.\n *\n * If undefined (default), we will use the axis's size (width or height) - 1.\n * @minimum 0\n */\n maxBandSize?: number;\n\n /**\n * The default min value for mapping quantitative fields to bar and tick's size/bandSize scale with zero=false.\n *\n * __Default value:__ `2`\n *\n * @minimum 0\n */\n minBandSize?: number;\n\n /**\n * The default max value for mapping quantitative fields to text's size/fontSize.\n *\n * __Default value:__ `40`\n *\n * @minimum 0\n */\n maxFontSize?: number;\n\n /**\n * The default min value for mapping quantitative fields to tick's size/fontSize scale with zero=false\n *\n * __Default value:__ `8`\n *\n * @minimum 0\n */\n minFontSize?: number;\n\n /**\n * Default minimum opacity for mapping a field to opacity.\n *\n * __Default value:__ `0.3`\n *\n * @minimum 0\n * @maximum 1\n */\n minOpacity?: number;\n\n /**\n * Default max opacity for mapping a field to opacity.\n *\n * __Default value:__ `0.8`\n *\n * @minimum 0\n * @maximum 1\n */\n maxOpacity?: number;\n\n /**\n * Default minimum value for point size scale with zero=false.\n *\n * __Default value:__ `9`\n *\n * @minimum 0\n */\n minSize?: number;\n\n /**\n * Default max value for point size scale.\n * @minimum 0\n */\n maxSize?: number;\n\n /**\n * Default minimum strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks with zero=false.\n *\n * __Default value:__ `1`\n *\n * @minimum 0\n */\n minStrokeWidth?: number;\n\n /**\n * Default max strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks.\n *\n * __Default value:__ `4`\n *\n * @minimum 0\n */\n maxStrokeWidth?: number;\n\n /**\n * Default range cardinality for [`quantile`](https://vega.github.io/vega-lite/docs/scale.html#quantile) scale.\n *\n * __Default value:__ `4`\n *\n * @minimum 0\n */\n quantileCount?: number;\n\n /**\n * Default range cardinality for [`quantize`](https://vega.github.io/vega-lite/docs/scale.html#quantize) scale.\n *\n * __Default value:__ `4`\n *\n * @minimum 0\n */\n quantizeCount?: number;\n\n /**\n * Reverse x-scale by default (useful for right-to-left charts).\n */\n xReverse?: boolean | ES;\n}\n\nexport const defaultScaleConfig: ScaleConfig = {\n pointPadding: 0.5,\n\n barBandPaddingInner: 0.1,\n rectBandPaddingInner: 0,\n\n minBandSize: 2,\n\n minFontSize: 8,\n maxFontSize: 40,\n\n minOpacity: 0.3,\n maxOpacity: 0.8,\n\n // FIXME: revise if these *can* become ratios of width/height step\n minSize: 9, // Point size is area. For square point, 9 = 3 pixel ^ 2, not too small!\n\n minStrokeWidth: 1,\n maxStrokeWidth: 4,\n quantileCount: 4,\n quantizeCount: 4\n};\n\nexport interface SchemeParams {\n /**\n * A color scheme name for ordinal scales (e.g., `\"category10\"` or `\"blues\"`).\n *\n * For the full list of supported schemes, please refer to the [Vega Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference.\n */\n name: string | SignalRef;\n\n /**\n * The extent of the color range to use. For example `[0.2, 1]` will rescale the color scheme such that color values in the range _[0, 0.2)_ are excluded from the scheme.\n */\n extent?: (number | SignalRef)[] | SignalRef;\n\n /**\n * The number of colors to use in the scheme. This can be useful for scale types such as `\"quantize\"`, which use the length of the scale range to determine the number of discrete bins for the scale domain.\n */\n count?: number | SignalRef;\n}\n\nexport type Domain =\n | (null | string | number | boolean | DateTime | SignalRef)[]\n | 'unaggregated'\n | ParameterExtent\n | SignalRef\n | DomainUnionWith;\n\nexport type Scheme = string | SchemeParams;\n\nexport function isExtendedScheme(scheme: Scheme | SignalRef): scheme is SchemeParams {\n return !isString(scheme) && !!scheme['name'];\n}\n\nexport function isParameterDomain(domain: Domain): domain is ParameterExtent {\n return domain?.['param'];\n}\n\nexport interface DomainUnionWith {\n /**\n * Customized domain values to be union with the field's values or explicitly defined domain.\n * Should be an array of valid scale domain values.\n */\n unionWith: number[] | string[] | boolean[] | DateTime[];\n}\n\nexport function isDomainUnionWith(domain: Domain): domain is DomainUnionWith {\n return domain && domain['unionWith'];\n}\n\nexport interface Scale {\n /**\n * The type of scale. Vega-Lite supports the following categories of scale types:\n *\n * 1) [**Continuous Scales**](https://vega.github.io/vega-lite/docs/scale.html#continuous) -- mapping continuous domains to continuous output ranges ([`\"linear\"`](https://vega.github.io/vega-lite/docs/scale.html#linear), [`\"pow\"`](https://vega.github.io/vega-lite/docs/scale.html#pow), [`\"sqrt\"`](https://vega.github.io/vega-lite/docs/scale.html#sqrt), [`\"symlog\"`](https://vega.github.io/vega-lite/docs/scale.html#symlog), [`\"log\"`](https://vega.github.io/vega-lite/docs/scale.html#log), [`\"time\"`](https://vega.github.io/vega-lite/docs/scale.html#time), [`\"utc\"`](https://vega.github.io/vega-lite/docs/scale.html#utc).\n *\n * 2) [**Discrete Scales**](https://vega.github.io/vega-lite/docs/scale.html#discrete) -- mapping discrete domains to discrete ([`\"ordinal\"`](https://vega.github.io/vega-lite/docs/scale.html#ordinal)) or continuous ([`\"band\"`](https://vega.github.io/vega-lite/docs/scale.html#band) and [`\"point\"`](https://vega.github.io/vega-lite/docs/scale.html#point)) output ranges.\n *\n * 3) [**Discretizing Scales**](https://vega.github.io/vega-lite/docs/scale.html#discretizing) -- mapping continuous domains to discrete output ranges [`\"bin-ordinal\"`](https://vega.github.io/vega-lite/docs/scale.html#bin-ordinal), [`\"quantile\"`](https://vega.github.io/vega-lite/docs/scale.html#quantile), [`\"quantize\"`](https://vega.github.io/vega-lite/docs/scale.html#quantize) and [`\"threshold\"`](https://vega.github.io/vega-lite/docs/scale.html#threshold).\n *\n * __Default value:__ please see the [scale type table](https://vega.github.io/vega-lite/docs/scale.html#type).\n */\n type?: ScaleType;\n\n /**\n * Customized domain values in the form of constant values or dynamic values driven by a parameter.\n *\n * 1) Constant `domain` for _quantitative_ fields can take one of the following forms:\n *\n * - A two-element array with minimum and maximum values. To create a diverging scale, this two-element array can be combined with the `domainMid` property.\n * - An array with more than two entries, for [Piecewise quantitative scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise).\n * - A string value `\"unaggregated\"`, if the input field is aggregated, to indicate that the domain should include the raw data values prior to the aggregation.\n *\n * 2) Constant `domain` for _temporal_ fields can be a two-element array with minimum and maximum values, in the form of either timestamps or the [DateTime definition objects](https://vega.github.io/vega-lite/docs/types.html#datetime).\n *\n * 3) Constant `domain` for _ordinal_ and _nominal_ fields can be an array that lists valid input values.\n *\n * 4) To combine (union) specified constant domain with the field's values, `domain` can be an object with a `unionWith` property that specify constant domain to be combined. For example, `domain: {unionWith: [0, 100]}` for a quantitative scale means that the scale domain always includes `[0, 100]`, but will include other values in the fields beyond `[0, 100]`.\n *\n * 5) Domain can also takes an object defining a field or encoding of a parameter that [interactively determines](https://vega.github.io/vega-lite/docs/selection.html#scale-domains) the scale domain.\n */\n domain?:\n | (null | string | number | boolean | DateTime | ES)[]\n | 'unaggregated'\n | ParameterExtent\n | DomainUnionWith\n | ES;\n\n /**\n * Inserts a single mid-point value into a two-element domain. The mid-point value must lie between the domain minimum and maximum values. This property can be useful for setting a midpoint for [diverging color scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise). The domainMid property is only intended for use with scales supporting continuous, piecewise domains.\n */\n domainMid?: number | ES;\n\n /**\n * Sets the maximum value in the scale domain, overriding the `domain` property. This property is only intended for use with scales having continuous domains.\n */\n domainMax?: number | DateTime | ES;\n\n /**\n * Sets the minimum value in the scale domain, overriding the domain property. This property is only intended for use with scales having continuous domains.\n */\n domainMin?: number | DateTime | ES;\n\n /**\n * If true, reverses the order of the scale range.\n * __Default value:__ `false`.\n */\n reverse?: boolean | ES;\n\n /**\n * The range of the scale. One of:\n *\n * - A string indicating a [pre-defined named scale range](https://vega.github.io/vega-lite/docs/scale.html#range-config) (e.g., example, `\"symbol\"`, or `\"diverging\"`).\n *\n * - For [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous), two-element array indicating minimum and maximum values, or an array with more than two entries for specifying a [piecewise scale](https://vega.github.io/vega-lite/docs/scale.html#piecewise).\n *\n * - For [discrete](https://vega.github.io/vega-lite/docs/scale.html#discrete) and [discretizing](https://vega.github.io/vega-lite/docs/scale.html#discretizing) scales, an array of desired output values or an object with a `field` property representing the range values. For example, if a field `color` contains CSS color names, we can set `range` to `{field: \"color\"}`.\n *\n * __Notes:__\n *\n * 1) For color scales you can also specify a color [`scheme`](https://vega.github.io/vega-lite/docs/scale.html#scheme) instead of `range`.\n *\n * 2) Any directly specified `range` for `x` and `y` channels will be ignored. Range can be customized via the view's corresponding [size](https://vega.github.io/vega-lite/docs/size.html) (`width` and `height`).\n */\n range?: RangeEnum | (number | string | number[] | ES)[] | {field: string};\n\n /**\n * Sets the maximum value in the scale range, overriding the `range` property or the default range. This property is only intended for use with scales having continuous ranges.\n */\n rangeMax?: number | string | ES;\n\n /**\n * Sets the minimum value in the scale range, overriding the `range` property or the default range. This property is only intended for use with scales having continuous ranges.\n */\n rangeMin?: number | string | ES;\n\n // ordinal\n\n /**\n * A string indicating a color [scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme) name (e.g., `\"category10\"` or `\"blues\"`) or a [scheme parameter object](https://vega.github.io/vega-lite/docs/scale.html#scheme-params).\n *\n * Discrete color schemes may be used with [discrete](https://vega.github.io/vega-lite/docs/scale.html#discrete) or [discretizing](https://vega.github.io/vega-lite/docs/scale.html#discretizing) scales. Continuous color schemes are intended for use with color scales.\n *\n * For the full list of supported schemes, please refer to the [Vega Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference.\n */\n scheme?: string | SchemeParams | ES;\n\n /**\n * The alignment of the steps within the scale range.\n *\n * This value must lie in the range `[0,1]`. A value of `0.5` indicates that the steps should be centered within the range. A value of `0` or `1` may be used to shift the bands to one side, say to position them adjacent to an axis.\n *\n * __Default value:__ `0.5`\n */\n align?: number | ES;\n\n /**\n * Bin boundaries can be provided to scales as either an explicit array of bin boundaries or as a bin specification object. The legal values are:\n * - An [array](../types/#Array) literal of bin boundary values. For example, `[0, 5, 10, 15, 20]`. The array must include both starting and ending boundaries. The previous example uses five values to indicate a total of four bin intervals: [0-5), [5-10), [10-15), [15-20]. Array literals may include signal references as elements.\n * - A [bin specification object](https://vega.github.io/vega-lite/docs/scale.html#bins) that indicates the bin _step_ size, and optionally the _start_ and _stop_ boundaries.\n * - An array of bin boundaries over the scale domain. If provided, axes and legends will use the bin boundaries to inform the choice of tick marks and text labels.\n */\n // TODO: add - A [signal reference](../types/#Signal) that resolves to either an array or bin specification object.\n bins?: ScaleBins;\n\n /**\n * If `true`, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid.\n *\n * __Default value:__ `false`.\n */\n round?: boolean | ES;\n\n /**\n * For _[continuous](https://vega.github.io/vega-lite/docs/scale.html#continuous)_ scales, expands the scale domain to accommodate the specified number of pixels on each of the scale range. The scale range must represent pixels for this parameter to function as intended. Padding adjustment is performed prior to all other adjustments, including the effects of the `zero`, `nice`, `domainMin`, and `domainMax` properties.\n *\n * For _[band](https://vega.github.io/vega-lite/docs/scale.html#band)_ scales, shortcut for setting `paddingInner` and `paddingOuter` to the same value.\n *\n * For _[point](https://vega.github.io/vega-lite/docs/scale.html#point)_ scales, alias for `paddingOuter`.\n *\n * __Default value:__ For _continuous_ scales, derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `continuousPadding`.\n * For _band and point_ scales, see `paddingInner` and `paddingOuter`. By default, Vega-Lite sets padding such that _width/height = number of unique values * step_.\n *\n * @minimum 0\n */\n padding?: number | ES;\n\n /**\n * The inner padding (spacing) within each band step of band scales, as a fraction of the step size. This value must lie in the range [0,1].\n *\n * For point scale, this property is invalid as point scales do not have internal band widths (only step sizes between bands).\n *\n * __Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `bandPaddingInner`.\n *\n * @minimum 0\n * @maximum 1\n */\n paddingInner?: number | ES;\n\n /**\n * The outer padding (spacing) at the ends of the range of band and point scales,\n * as a fraction of the step size. This value must lie in the range [0,1].\n *\n * __Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `bandPaddingOuter` for band scales and `pointPadding` for point scales.\n * By default, Vega-Lite sets outer padding such that _width/height = number of unique values * step_.\n *\n * @minimum 0\n * @maximum 1\n */\n paddingOuter?: number | ES;\n\n // typical\n /**\n * If `true`, values that exceed the data domain are clamped to either the minimum or maximum range value\n *\n * __Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/config.html#scale-config)'s `clamp` (`true` by default).\n */\n clamp?: boolean | ES;\n\n /**\n * Extending the domain so that it starts and ends on nice round values. This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value. Nicing is useful if the domain is computed from data and may be irregular. For example, for a domain of _[0.201479…, 0.996679…]_, a nice domain might be _[0.2, 1.0]_.\n *\n * For quantitative scales such as linear, `nice` can be either a boolean flag or a number. If `nice` is a number, it will represent a desired tick count. This allows greater control over the step size used to extend the bounds, guaranteeing that the returned ticks will exactly cover the domain.\n *\n * For temporal fields with time and utc scales, the `nice` value can be a string indicating the desired time interval. Legal values are `\"millisecond\"`, `\"second\"`, `\"minute\"`, `\"hour\"`, `\"day\"`, `\"week\"`, `\"month\"`, and `\"year\"`. Alternatively, `time` and `utc` scales can accept an object-valued interval specifier of the form `{\"interval\": \"month\", \"step\": 3}`, which includes a desired number of interval steps. Here, the domain would snap to quarter (Jan, Apr, Jul, Oct) boundaries.\n *\n * __Default value:__ `true` for unbinned _quantitative_ fields; `false` otherwise.\n *\n */\n nice?: boolean | number | TimeInterval | TimeIntervalStep | ES;\n\n /**\n * The logarithm base of the `log` scale (default `10`).\n */\n base?: number | ES;\n\n /**\n * The exponent of the `pow` scale.\n */\n exponent?: number | ES;\n\n /**\n * A constant determining the slope of the symlog function around zero. Only used for `symlog` scales.\n *\n * __Default value:__ `1`\n */\n constant?: number | ES;\n\n /**\n * If `true`, ensures that a zero baseline value is included in the scale domain.\n *\n * __Default value:__ `true` for x and y channels if the quantitative field is not binned and no custom `domain` is provided; `false` otherwise.\n *\n * __Note:__ Log, time, and utc scales do not support `zero`.\n */\n zero?: boolean | ES;\n\n /**\n * The interpolation method for range values. By default, a general interpolator for numbers, dates, strings and colors (in HCL space) is used. For color ranges, this property allows interpolation in alternative color spaces. Legal values include `rgb`, `hsl`, `hsl-long`, `lab`, `hcl`, `hcl-long`, `cubehelix` and `cubehelix-long` ('-long' variants use longer paths in polar coordinate spaces). If object-valued, this property accepts an object with a string-valued _type_ property and an optional numeric _gamma_ property applicable to rgb and cubehelix interpolators. For more, see the [d3-interpolate documentation](https://github.com/d3/d3-interpolate).\n *\n * * __Default value:__ `hcl`\n */\n interpolate?: ScaleInterpolateEnum | ES | ScaleInterpolateParams;\n}\n\nconst SCALE_PROPERTY_INDEX: Flag> = {\n type: 1,\n domain: 1,\n domainMax: 1,\n domainMin: 1,\n domainMid: 1,\n align: 1,\n range: 1,\n rangeMax: 1,\n rangeMin: 1,\n scheme: 1,\n bins: 1,\n // Other properties\n reverse: 1,\n round: 1,\n // quantitative / time\n clamp: 1,\n nice: 1,\n // quantitative\n base: 1,\n exponent: 1,\n constant: 1,\n interpolate: 1,\n zero: 1, // zero depends on domain\n // band/point\n padding: 1,\n paddingInner: 1,\n paddingOuter: 1\n};\n\nexport const SCALE_PROPERTIES = keys(SCALE_PROPERTY_INDEX);\n\nconst {\n type,\n domain,\n range,\n rangeMax,\n rangeMin,\n scheme,\n ...NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTY_INDEX\n} = SCALE_PROPERTY_INDEX;\n\nexport const NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES = keys(NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTY_INDEX);\n\nexport function scaleTypeSupportProperty(scaleType: ScaleType, propName: keyof Scale): boolean {\n switch (propName) {\n case 'type':\n case 'domain':\n case 'reverse':\n case 'range':\n return true;\n case 'scheme':\n case 'interpolate':\n return !['point', 'band', 'identity'].includes(scaleType);\n case 'bins':\n return !['point', 'band', 'identity', 'ordinal'].includes(scaleType);\n case 'round':\n return isContinuousToContinuous(scaleType) || scaleType === 'band' || scaleType === 'point';\n case 'padding':\n case 'rangeMin':\n case 'rangeMax':\n return isContinuousToContinuous(scaleType) || ['point', 'band'].includes(scaleType);\n case 'paddingOuter':\n case 'align':\n return ['point', 'band'].includes(scaleType);\n case 'paddingInner':\n return scaleType === 'band';\n case 'domainMax':\n case 'domainMid':\n case 'domainMin':\n case 'clamp':\n return isContinuousToContinuous(scaleType);\n case 'nice':\n return isContinuousToContinuous(scaleType) || scaleType === 'quantize' || scaleType === 'threshold';\n case 'exponent':\n return scaleType === 'pow';\n case 'base':\n return scaleType === 'log';\n case 'constant':\n return scaleType === 'symlog';\n case 'zero':\n return (\n hasContinuousDomain(scaleType) &&\n !contains(\n [\n 'log', // log scale cannot have zero value\n 'time',\n 'utc', // zero is not meaningful for time\n 'threshold', // threshold requires custom domain so zero does not matter\n 'quantile' // quantile depends on distribution so zero does not matter\n ],\n scaleType\n )\n );\n }\n}\n\n/**\n * Returns undefined if the input channel supports the input scale property name\n */\nexport function channelScalePropertyIncompatability(channel: Channel, propName: keyof Scale): string {\n switch (propName) {\n case 'interpolate':\n case 'scheme':\n case 'domainMid':\n if (!isColorChannel(channel)) {\n return log.message.cannotUseScalePropertyWithNonColor(channel);\n }\n return undefined;\n case 'align':\n case 'type':\n case 'bins':\n case 'domain':\n case 'domainMax':\n case 'domainMin':\n case 'range':\n case 'base':\n case 'exponent':\n case 'constant':\n case 'nice':\n case 'padding':\n case 'paddingInner':\n case 'paddingOuter':\n case 'rangeMax':\n case 'rangeMin':\n case 'reverse':\n case 'round':\n case 'clamp':\n case 'zero':\n return undefined; // GOOD!\n }\n}\n\nexport function scaleTypeSupportDataType(specifiedType: ScaleType, fieldDefType: Type): boolean {\n if (contains([ORDINAL, NOMINAL], fieldDefType)) {\n return specifiedType === undefined || hasDiscreteDomain(specifiedType);\n } else if (fieldDefType === TEMPORAL) {\n return contains([ScaleType.TIME, ScaleType.UTC, undefined], specifiedType);\n } else if (fieldDefType === QUANTITATIVE) {\n return contains(\n [\n ScaleType.LOG,\n ScaleType.POW,\n ScaleType.SQRT,\n ScaleType.SYMLOG,\n ScaleType.QUANTILE,\n ScaleType.QUANTIZE,\n ScaleType.THRESHOLD,\n ScaleType.LINEAR,\n undefined\n ],\n specifiedType\n );\n }\n\n return true;\n}\n\nexport function channelSupportScaleType(channel: Channel, scaleType: ScaleType): boolean {\n if (!CHANNEL.isScaleChannel(channel)) {\n return false;\n }\n switch (channel) {\n case CHANNEL.X:\n case CHANNEL.Y:\n case CHANNEL.THETA:\n case CHANNEL.RADIUS:\n return isContinuousToContinuous(scaleType) || contains(['band', 'point'], scaleType);\n case CHANNEL.SIZE: // TODO: size and opacity can support ordinal with more modification\n case CHANNEL.STROKEWIDTH:\n case CHANNEL.OPACITY:\n case CHANNEL.FILLOPACITY:\n case CHANNEL.STROKEOPACITY:\n case CHANNEL.ANGLE:\n // Although it generally doesn't make sense to use band with size and opacity,\n // it can also work since we use band: 0.5 to get midpoint.\n return (\n isContinuousToContinuous(scaleType) ||\n isContinuousToDiscrete(scaleType) ||\n contains(['band', 'point', 'ordinal'], scaleType)\n );\n case CHANNEL.COLOR:\n case CHANNEL.FILL:\n case CHANNEL.STROKE:\n return scaleType !== 'band'; // band does not make sense with color\n case CHANNEL.STROKEDASH:\n case CHANNEL.SHAPE:\n return scaleType === 'ordinal' || isContinuousToDiscrete(scaleType);\n }\n}\n","import {Align, Color, Gradient, MarkConfig as VgMarkConfig, Orientation, SignalRef, TextBaseline} from 'vega';\nimport {toSet} from 'vega-util';\nimport {CompositeMark, CompositeMarkDef} from './compositemark';\nimport {ExprRef} from './expr';\nimport {Flag, keys} from './util';\nimport {MapExcludeValueRefAndReplaceSignalWith} from './vega.schema';\n\n/**\n * All types of primitive marks.\n */\nexport const Mark = {\n arc: 'arc',\n area: 'area',\n bar: 'bar',\n image: 'image',\n line: 'line',\n point: 'point',\n rect: 'rect',\n rule: 'rule',\n text: 'text',\n tick: 'tick',\n trail: 'trail',\n circle: 'circle',\n square: 'square',\n geoshape: 'geoshape'\n} as const;\n\nexport const ARC = Mark.arc;\nexport const AREA = Mark.area;\nexport const BAR = Mark.bar;\nexport const IMAGE = Mark.image;\nexport const LINE = Mark.line;\nexport const POINT = Mark.point;\nexport const RECT = Mark.rect;\nexport const RULE = Mark.rule;\nexport const TEXT = Mark.text;\nexport const TICK = Mark.tick;\nexport const TRAIL = Mark.trail;\nexport const CIRCLE = Mark.circle;\nexport const SQUARE = Mark.square;\nexport const GEOSHAPE = Mark.geoshape;\n\nexport type Mark = keyof typeof Mark;\n\nexport function isMark(m: string): m is Mark {\n return m in Mark;\n}\n\nexport function isPathMark(m: Mark | CompositeMark): m is 'line' | 'area' | 'trail' {\n return ['line', 'area', 'trail'].includes(m);\n}\n\nexport function isRectBasedMark(m: Mark | CompositeMark): m is 'rect' | 'bar' | 'image' | 'arc' {\n return ['rect', 'bar', 'image', 'arc' /* arc is rect/interval in polar coordinate */].includes(m);\n}\n\nexport const PRIMITIVE_MARKS = keys(Mark);\n\nexport interface ColorMixins {\n /**\n * Default color.\n *\n * __Default value:__ `\"#4682b4\"`\n *\n * __Note:__\n * - This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n * - The `fill` and `stroke` properties have higher precedence than `color` and will override `color`.\n */\n color?: Color | Gradient | ES;\n}\n\nexport interface TooltipContent {\n content: 'encoding' | 'data';\n}\n\n/** @hidden */\nexport type Hide = 'hide';\n\nexport interface VLOnlyMarkConfig extends ColorMixins {\n /**\n * Whether the mark's color should be used as fill color instead of stroke color.\n *\n * __Default value:__ `false` for all `point`, `line`, and `rule` marks as well as `geoshape` marks for [`graticule`](https://vega.github.io/vega-lite/docs/data.html#graticule) data sources; otherwise, `true`.\n *\n * __Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n *\n */\n filled?: boolean;\n\n /**\n * Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n * - If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n * - If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.\n */\n invalid?: 'filter' | Hide | null;\n\n /**\n * For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.\n */\n order?: null | boolean;\n\n /**\n * Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step.\n * If set to `0.5`, the marks will be positioned in the middle of the time unit band step.\n */\n timeUnitBandPosition?: number;\n\n /**\n * Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step.\n * If set to `0.5`, bandwidth of the marks will be half of the time unit band step.\n */\n timeUnitBandSize?: number;\n\n /**\n * The end angle of arc marks in radians. A value of 0 indicates up or “north”, increasing values proceed clockwise.\n */\n theta2?: number | ES; // In Vega, this is called endAngle\n\n /**\n * The secondary (inner) radius in pixels of arc marks.\n *\n * @minimum 0\n * __Default value:__ `0`\n */\n radius2?: number | ES; // In Vega, this is called innerRadius\n}\n\nexport interface MarkConfig\n extends VLOnlyMarkConfig,\n MapExcludeValueRefAndReplaceSignalWith, ES> {\n // ========== Overriding Vega ==========\n\n /**\n * The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n *\n * - If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n * - If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n * - If set to `null` or `false`, then no tooltip will be used.\n *\n * See the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite.\n *\n * __Default value:__ `null`\n */\n tooltip?: number | string | boolean | TooltipContent | ES | null; // VL has a special object form for tooltip content\n\n /**\n * Default size for marks.\n * - For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n * - For `bar`, this represents the band size of the bar, in pixels.\n * - For `text`, this represents the font size, in pixels.\n *\n * __Default value:__\n * - `30` for point, circle, square marks; width/height's `step`\n * - `2` for bar marks with discrete dimensions;\n * - `5` for bar marks with continuous dimensions;\n * - `11` for text marks.\n *\n * @minimum 0\n */\n size?: number | ES; // size works beyond symbol marks in VL\n\n /**\n * X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n *\n * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n */\n x?: number | 'width' | ES; // Vega doesn't have 'width'\n\n /**\n * Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n *\n * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n */\n y?: number | 'height' | ES; // Vega doesn't have 'height'\n\n /**\n * X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n *\n * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n */\n x2?: number | 'width' | ES; // Vega doesn't have 'width'\n\n /**\n * Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n *\n * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n */\n y2?: number | 'height' | ES; // Vega doesn't have 'height'\n\n /**\n * Default fill color. This property has higher precedence than `config.color`. Set to `null` to remove fill.\n *\n * __Default value:__ (None)\n *\n */\n fill?: Color | Gradient | null | ES; // docs: Vega doesn't have config.color\n\n /**\n * Default stroke color. This property has higher precedence than `config.color`. Set to `null` to remove stroke.\n *\n * __Default value:__ (None)\n *\n */\n stroke?: Color | Gradient | null | ES; // docs: Vega doesn't have config.color\n\n /**\n * The overall opacity (value between [0,1]).\n *\n * __Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.\n *\n * @minimum 0\n * @maximum 1\n */\n opacity?: number | ES; // docs (different defaults)\n\n /**\n * The orientation of a non-stacked bar, tick, area, and line charts.\n * The value is either horizontal (default) or vertical.\n * - For bar, rule and tick, this determines whether the size of the bar and tick\n * should be applied to x or y dimension.\n * - For area, this property determines the orient property of the Vega output.\n * - For line and trail marks, this property determines the sort order of the points in the line\n * if `config.sortLineBy` is not specified.\n * For stacked charts, this is always determined by the orientation of the stack;\n * therefore explicitly specified value will be ignored.\n */\n orient?: Orientation; // Vega orient doesn't apply to bar/tick/line. Since some logic depends on this property, Vega-Lite does NOT allow signal for orient.\n\n /**\n * The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of `\"left\"`, `\"right\"`, `\"center\"`.\n *\n * __Note:__ Expression reference is *not* supported for range marks.\n */\n align?: Align | ES;\n\n /**\n * For text marks, the vertical text baseline. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, `\"line-bottom\"`, or an expression reference that provides one of the valid values.\n * The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`,\n * but are calculated relative to the `lineHeight` rather than `fontSize` alone.\n *\n * For range marks, the vertical alignment of the marks. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n *\n * __Note:__ Expression reference is *not* supported for range marks.\n *\n */\n baseline?: TextBaseline | ES;\n\n /**\n * - For arc marks, the arc length in radians if theta2 is not specified, otherwise the start arc angle. (A value of 0 indicates up or “north”, increasing values proceed clockwise.)\n *\n * - For text marks, polar coordinate angle in radians.\n *\n * @minimum 0\n * @maximum 360\n */\n theta?: number | ES; // overriding VG\n\n /**\n *\n * For arc mark, the primary (outer) radius in pixels.\n *\n * For text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties.\n *\n * @minimum 0\n *\n * __Default value:__ `min(plot_width, plot_height)/2`\n */\n radius?: number | ES; // overriding VG\n\n /**\n * The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`.\n *\n * @minimum 0\n * __Default value:__ `0`\n */\n innerRadius?: number | ES;\n\n /**\n * The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n *\n * @minimum 0\n * __Default value:__ `0`\n */\n outerRadius?: number | ES;\n}\n\nexport interface RectBinSpacingMixins {\n /**\n * Offset between bars for binned field. The ideal value for this is either 0 (preferred by statisticians) or 1 (Vega-Lite default, D3 example style).\n *\n * __Default value:__ `1`\n *\n * @minimum 0\n */\n binSpacing?: number;\n}\n\nexport type AnyMark = CompositeMark | CompositeMarkDef | Mark | MarkDef;\n\nexport function isMarkDef(mark: string | GenericMarkDef): mark is GenericMarkDef {\n return mark['type'];\n}\n\nconst PRIMITIVE_MARK_INDEX = toSet(PRIMITIVE_MARKS);\n\nexport function isPrimitiveMark(mark: AnyMark): mark is Mark {\n const markType = isMarkDef(mark) ? mark.type : mark;\n return markType in PRIMITIVE_MARK_INDEX;\n}\n\nexport const STROKE_CONFIG = [\n 'stroke',\n 'strokeWidth',\n 'strokeDash',\n 'strokeDashOffset',\n 'strokeOpacity',\n 'strokeJoin',\n 'strokeMiterLimit'\n] as const;\n\nexport const FILL_CONFIG = ['fill', 'fillOpacity'] as const;\n\nexport const FILL_STROKE_CONFIG = [...STROKE_CONFIG, ...FILL_CONFIG];\n\nconst VL_ONLY_MARK_CONFIG_INDEX: Flag> = {\n color: 1,\n filled: 1,\n invalid: 1,\n order: 1,\n radius2: 1,\n theta2: 1,\n timeUnitBandSize: 1,\n timeUnitBandPosition: 1\n};\n\nexport const VL_ONLY_MARK_CONFIG_PROPERTIES = keys(VL_ONLY_MARK_CONFIG_INDEX);\n\nexport const VL_ONLY_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX: {\n [k in Mark]?: (keyof Required>[k])[];\n} = {\n area: ['line', 'point'],\n bar: ['binSpacing', 'continuousBandSize', 'discreteBandSize'],\n rect: ['binSpacing', 'continuousBandSize', 'discreteBandSize'],\n line: ['point'],\n tick: ['bandSize', 'thickness']\n};\n\nexport const defaultMarkConfig: MarkConfig = {\n color: '#4c78a8',\n invalid: 'filter',\n timeUnitBandSize: 1\n};\n\n// TODO: replace with MarkConfigMixins[Mark] once https://github.com/vega/ts-json-schema-generator/issues/344 is fixed\nexport type AnyMarkConfig =\n | MarkConfig\n | AreaConfig\n | BarConfig\n | RectConfig\n | LineConfig\n | TickConfig;\n\nexport interface MarkConfigMixins {\n /** Mark Config */\n mark?: MarkConfig;\n\n // MARK-SPECIFIC CONFIGS\n\n /** Arc-specific Config */\n arc?: RectConfig;\n\n /** Area-Specific Config */\n area?: AreaConfig;\n\n /** Bar-Specific Config */\n bar?: BarConfig;\n\n /** Circle-Specific Config */\n circle?: MarkConfig;\n\n /** Image-specific Config */\n image?: RectConfig;\n\n /** Line-Specific Config */\n line?: LineConfig;\n\n /** Point-Specific Config */\n point?: MarkConfig;\n\n /** Rect-Specific Config */\n rect?: RectConfig;\n\n /** Rule-Specific Config */\n rule?: MarkConfig;\n\n /** Square-Specific Config */\n square?: MarkConfig;\n\n /** Text-Specific Config */\n text?: MarkConfig;\n\n /** Tick-Specific Config */\n tick?: TickConfig;\n\n /** Trail-Specific Config */\n trail?: LineConfig;\n\n /** Geoshape-Specific Config */\n geoshape?: MarkConfig;\n}\n\nconst MARK_CONFIG_INDEX: Flag> = {\n mark: 1,\n arc: 1,\n area: 1,\n bar: 1,\n circle: 1,\n image: 1,\n line: 1,\n point: 1,\n rect: 1,\n rule: 1,\n square: 1,\n text: 1,\n tick: 1,\n trail: 1,\n geoshape: 1\n};\n\nexport const MARK_CONFIGS = keys(MARK_CONFIG_INDEX);\n\nexport interface RectConfig extends RectBinSpacingMixins, MarkConfig {\n /**\n * The default size of the bars on continuous scales.\n *\n * __Default value:__ `5`\n *\n * @minimum 0\n */\n continuousBandSize?: number;\n\n /**\n * The default size of the bars with discrete dimensions. If unspecified, the default size is `step-2`, which provides 2 pixel offset between bars.\n * @minimum 0\n */\n discreteBandSize?: number | RelativeBandSize;\n}\n\nexport type BandSize = number | RelativeBandSize | SignalRef;\n\nexport interface RelativeBandSize {\n /**\n * The relative band size. For example `0.5` means half of the band scale's band width.\n */\n band: number;\n}\n\nexport function isRelativeBandSize(o: number | RelativeBandSize | ExprRef | SignalRef): o is RelativeBandSize {\n return o && o['band'] != undefined;\n}\n\nexport const BAR_CORNER_RADIUS_INDEX: Partial<\n Record<\n Orientation,\n ('cornerRadiusTopLeft' | 'cornerRadiusTopRight' | 'cornerRadiusBottomLeft' | 'cornerRadiusBottomRight')[]\n >\n> = {\n horizontal: ['cornerRadiusTopRight', 'cornerRadiusBottomRight'],\n vertical: ['cornerRadiusTopLeft', 'cornerRadiusTopRight']\n};\n\nexport interface BarCornerRadiusMixins {\n /**\n * - For vertical bars, top-left and top-right corner radius.\n *\n * - For horizontal bars, top-right and bottom-right corner radius.\n */\n cornerRadiusEnd?: number | ES;\n}\n\nexport type BarConfig = RectConfig & BarCornerRadiusMixins;\n\nexport type OverlayMarkDef = MarkConfig & MarkDefMixins;\n\nexport interface PointOverlayMixins {\n /**\n * A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points.\n *\n * - If this property is `\"transparent\"`, transparent points will be used (for enhancing tooltips and selections).\n *\n * - If this property is an empty object (`{}`) or `true`, filled points with default properties will be used.\n *\n * - If this property is `false`, no points would be automatically added to line or area marks.\n *\n * __Default value:__ `false`.\n */\n point?: boolean | OverlayMarkDef | 'transparent';\n}\n\nexport interface LineConfig extends MarkConfig, PointOverlayMixins {}\n\nexport interface LineOverlayMixins {\n /**\n * A flag for overlaying line on top of area marks, or an object defining the properties of the overlayed lines.\n *\n * - If this value is an empty object (`{}`) or `true`, lines with default properties will be used.\n *\n * - If this value is `false`, no lines would be automatically added to area marks.\n *\n * __Default value:__ `false`.\n */\n line?: boolean | OverlayMarkDef;\n}\n\nexport interface AreaConfig\n extends MarkConfig,\n PointOverlayMixins,\n LineOverlayMixins {}\n\nexport interface TickThicknessMixins {\n /**\n * Thickness of the tick mark.\n *\n * __Default value:__ `1`\n *\n * @minimum 0\n */\n thickness?: number | SignalRef;\n}\n\nexport interface GenericMarkDef {\n /**\n * The mark type. This could a primitive mark type\n * (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n * `\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`)\n * or a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`).\n */\n type: M;\n}\n\nexport interface MarkDefMixins {\n /**\n * A string or array of strings indicating the name of custom styles to apply to the mark. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles. Any [mark properties](https://vega.github.io/vega-lite/docs/encoding.html#mark-prop) explicitly defined within the `encoding` will override a style default.\n *\n * __Default value:__ The mark's name. For example, a bar mark will have style `\"bar\"` by default.\n * __Note:__ Any specified style will augment the default style. For example, a bar mark with `\"style\": \"foo\"` will receive from `config.style.bar` and `config.style.foo` (the specified style `\"foo\"` has higher precedence).\n */\n style?: string | string[];\n\n /**\n * Whether a mark be clipped to the enclosing group’s width and height.\n */\n clip?: boolean;\n\n // Offset properties should not be a part of config\n\n /**\n * Offset for x-position.\n */\n xOffset?: number | ES;\n\n /**\n * Offset for y-position.\n */\n yOffset?: number | ES;\n\n /**\n * Offset for x2-position.\n */\n x2Offset?: number | ES;\n\n /**\n * Offset for y2-position.\n */\n y2Offset?: number | ES;\n\n /**\n * Offset for theta.\n */\n thetaOffset?: number | ES;\n\n /**\n * Offset for theta2.\n */\n theta2Offset?: number | ES;\n\n /**\n * Offset for radius.\n */\n radiusOffset?: number | ES;\n\n /**\n * Offset for radius2.\n */\n radius2Offset?: number | ES;\n}\n\nexport interface RelativeBandSize {\n /**\n * The relative band size. For example `0.5` means half of the band scale's band width.\n */\n band: number;\n}\n\n// Point/Line OverlayMixins are only for area, line, and trail but we don't want to declare multiple types of MarkDef\nexport interface MarkDef<\n M extends string | Mark = Mark,\n ES extends ExprRef | SignalRef = ExprRef | SignalRef\n> extends GenericMarkDef,\n Omit<\n MarkConfig &\n AreaConfig &\n BarConfig & // always extends RectConfig\n LineConfig &\n TickConfig,\n 'startAngle' | 'endAngle' | 'width' | 'height'\n >,\n MarkDefMixins {\n // Omit startAngle/endAngle since we use theta/theta2 from Vega-Lite schema to avoid confusion\n // We still support start/endAngle only in config, just in case people use Vega config with Vega-Lite.\n\n /**\n * @hidden\n */\n startAngle?: number | ES;\n /**\n * @hidden\n */\n endAngle?: number | ES;\n\n // Replace width / height to include relative band size\n\n /**\n * Width of the marks. One of:\n *\n * - A number representing a fixed pixel width.\n *\n * - A relative band size definition. For example, `{band: 0.5}` represents half of the band.\n */\n width?: number | ES | RelativeBandSize;\n\n /**\n * Height of the marks. One of:\n *\n * - A number representing a fixed pixel height.\n *\n * - A relative band size definition. For example, `{band: 0.5}` represents half of the band\n */\n height?: number | ES | RelativeBandSize;\n}\n\nconst DEFAULT_RECT_BAND_SIZE = 5;\n\nexport const defaultBarConfig: RectConfig = {\n binSpacing: 1,\n continuousBandSize: DEFAULT_RECT_BAND_SIZE,\n timeUnitBandPosition: 0.5\n};\n\nexport const defaultRectConfig: RectConfig = {\n binSpacing: 0,\n continuousBandSize: DEFAULT_RECT_BAND_SIZE,\n timeUnitBandPosition: 0.5\n};\n\nexport interface TickConfig extends MarkConfig, TickThicknessMixins {\n /**\n * The width of the ticks.\n *\n * __Default value:__ 3/4 of step (width step for horizontal ticks and height step for vertical ticks).\n * @minimum 0\n */\n bandSize?: number;\n}\n\nexport const defaultTickConfig: TickConfig = {\n thickness: 1\n};\n\nexport function getMarkType(m: string | GenericMarkDef) {\n return isMarkDef(m) ? m.type : m;\n}\n","/**\n * Utility files for producing Vega ValueRef for marks\n */\nimport {SignalRef} from 'vega';\nimport {isFunction, isString} from 'vega-util';\nimport {isCountingAggregateOp} from '../../../aggregate';\nimport {isBinned, isBinning} from '../../../bin';\nimport {Channel, getMainRangeChannel, PolarPositionChannel, PositionChannel, X, X2, Y2} from '../../../channel';\nimport {\n binRequiresRange,\n ChannelDef,\n DatumDef,\n FieldDef,\n FieldDefBase,\n FieldName,\n FieldRefOption,\n getBandPosition,\n isDatumDef,\n isFieldDef,\n isFieldOrDatumDef,\n isTypedFieldDef,\n isValueDef,\n SecondaryChannelDef,\n SecondaryFieldDef,\n TypedFieldDef,\n Value,\n vgField\n} from '../../../channeldef';\nimport {Config} from '../../../config';\nimport {dateTimeToExpr, isDateTime} from '../../../datetime';\nimport {isExprRef} from '../../../expr';\nimport * as log from '../../../log';\nimport {isPathMark, Mark, MarkDef} from '../../../mark';\nimport {fieldValidPredicate} from '../../../predicate';\nimport {hasDiscreteDomain, isContinuousToContinuous} from '../../../scale';\nimport {StackProperties} from '../../../stack';\nimport {TEMPORAL} from '../../../type';\nimport {contains, stringify} from '../../../util';\nimport {isSignalRef, VgValueRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {ScaleComponent} from '../../scale/component';\n\nexport function midPointRefWithPositionInvalidTest(\n params: MidPointParams & {\n channel: PositionChannel | PolarPositionChannel;\n }\n) {\n const {channel, channelDef, markDef, scale, config} = params;\n const ref = midPoint(params);\n\n // Wrap to check if the positional value is invalid, if so, plot the point on the min value\n if (\n // Only this for field def without counting aggregate (as count wouldn't be null)\n isFieldDef(channelDef) &&\n !isCountingAggregateOp(channelDef.aggregate) &&\n // and only for continuous scale without zero (otherwise, null / invalid will be interpreted as zero, which doesn't cause layout problem)\n scale &&\n isContinuousToContinuous(scale.get('type')) &&\n scale.get('zero') === false\n ) {\n return wrapPositionInvalidTest({\n fieldDef: channelDef,\n channel,\n markDef,\n ref,\n config\n });\n }\n return ref;\n}\n\nexport function wrapPositionInvalidTest({\n fieldDef,\n channel,\n markDef,\n ref,\n config\n}: {\n fieldDef: FieldDef;\n channel: PositionChannel | PolarPositionChannel;\n markDef: MarkDef;\n ref: VgValueRef;\n config: Config;\n}): VgValueRef | VgValueRef[] {\n if (isPathMark(markDef.type)) {\n // path mark already use defined to skip points, no need to do it here.\n return ref;\n }\n\n const invalid = getMarkPropOrConfig('invalid', markDef, config);\n if (invalid === null) {\n // if there is no invalid filter, don't do the invalid test\n return ref;\n }\n\n return [fieldInvalidTestValueRef(fieldDef, channel), ref];\n}\n\nexport function fieldInvalidTestValueRef(fieldDef: FieldDef, channel: PositionChannel | PolarPositionChannel) {\n const test = fieldInvalidPredicate(fieldDef, true);\n\n const mainChannel = getMainRangeChannel(channel) as PositionChannel | PolarPositionChannel; // we can cast here as the output can't be other things.\n const zeroValueRef =\n mainChannel === 'y'\n ? {field: {group: 'height'}}\n : // x / angle / radius can all use 0\n {value: 0};\n\n return {test, ...zeroValueRef};\n}\n\nexport function fieldInvalidPredicate(field: FieldName | FieldDef, invalid = true) {\n return fieldValidPredicate(isString(field) ? field : vgField(field, {expr: 'datum'}), !invalid);\n}\n\nexport function datumDefToExpr(datumDef: DatumDef) {\n const {datum} = datumDef;\n if (isDateTime(datum)) {\n return dateTimeToExpr(datum);\n }\n return `${stringify(datum)}`;\n}\n\nexport function valueRefForFieldOrDatumDef(\n fieldDef: FieldDefBase | DatumDef,\n scaleName: string,\n opt: FieldRefOption,\n encode: {offset?: number | VgValueRef; band?: number | boolean | SignalRef}\n): VgValueRef {\n const ref: VgValueRef = {};\n\n if (scaleName) {\n ref.scale = scaleName;\n }\n\n if (isDatumDef(fieldDef)) {\n const {datum} = fieldDef;\n if (isDateTime(datum)) {\n ref.signal = dateTimeToExpr(datum);\n } else if (isSignalRef(datum)) {\n ref.signal = datum.signal;\n } else if (isExprRef(datum)) {\n ref.signal = datum.expr;\n } else {\n ref.value = datum;\n }\n } else {\n ref.field = vgField(fieldDef, opt);\n }\n\n if (encode) {\n const {offset, band} = encode;\n if (offset) {\n ref.offset = offset;\n }\n if (band) {\n ref.band = band;\n }\n }\n return ref;\n}\n\n/**\n * Signal that returns the middle of a bin from start and end field. Should only be used with x and y.\n */\nexport function interpolatedSignalRef({\n scaleName,\n fieldOrDatumDef,\n fieldOrDatumDef2,\n offset,\n startSuffix,\n bandPosition = 0.5\n}: {\n scaleName: string;\n fieldOrDatumDef: TypedFieldDef;\n fieldOrDatumDef2?: SecondaryFieldDef;\n startSuffix?: string;\n offset: number | SignalRef;\n bandPosition: number | SignalRef;\n}): VgValueRef {\n const expr = 0 < bandPosition && bandPosition < 1 ? 'datum' : undefined;\n const start = vgField(fieldOrDatumDef, {expr, suffix: startSuffix});\n const end =\n fieldOrDatumDef2 !== undefined\n ? vgField(fieldOrDatumDef2, {expr})\n : vgField(fieldOrDatumDef, {suffix: 'end', expr});\n\n const ref: VgValueRef = {};\n\n if (bandPosition === 0 || bandPosition === 1) {\n ref.scale = scaleName;\n const val = bandPosition === 0 ? start : end;\n ref.field = val;\n } else {\n const datum = isSignalRef(bandPosition)\n ? `${bandPosition.signal} * ${start} + (1-${bandPosition.signal}) * ${end}`\n : `${bandPosition} * ${start} + ${1 - bandPosition} * ${end}`;\n ref.signal = `scale(\"${scaleName}\", ${datum})`;\n }\n\n if (offset) {\n ref.offset = offset;\n }\n return ref;\n}\n\nexport interface MidPointParams {\n channel: Channel;\n channelDef: ChannelDef;\n channel2Def?: SecondaryChannelDef;\n\n markDef: MarkDef;\n config: Config;\n\n scaleName: string;\n scale: ScaleComponent;\n stack?: StackProperties;\n offset?: number | SignalRef;\n defaultRef: VgValueRef | (() => VgValueRef);\n\n bandPosition?: number | SignalRef;\n}\n\n/**\n * @returns {VgValueRef} Value Ref for xc / yc or mid point for other channels.\n */\nexport function midPoint({\n channel,\n channelDef,\n channel2Def,\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef,\n bandPosition\n}: MidPointParams): VgValueRef {\n // TODO: datum support\n if (channelDef) {\n /* istanbul ignore else */\n\n if (isFieldOrDatumDef(channelDef)) {\n if (isTypedFieldDef(channelDef)) {\n bandPosition ??= getBandPosition({\n fieldDef: channelDef,\n fieldDef2: channel2Def,\n markDef,\n config\n });\n const {bin, timeUnit, type} = channelDef;\n\n if (isBinning(bin) || (bandPosition && timeUnit && type === TEMPORAL)) {\n // Use middle only for x an y to place marks in the center between start and end of the bin range.\n // We do not use the mid point for other channels (e.g. size) so that properties of legends and marks match.\n if (stack && stack.impute) {\n // For stack, we computed bin_mid so we can impute.\n return valueRefForFieldOrDatumDef(channelDef, scaleName, {binSuffix: 'mid'}, {offset});\n }\n\n if (bandPosition) {\n // if band = 0, no need to call interpolation\n // For non-stack, we can just calculate bin mid on the fly using signal.\n return interpolatedSignalRef({scaleName, fieldOrDatumDef: channelDef, bandPosition, offset});\n }\n return valueRefForFieldOrDatumDef(\n channelDef,\n scaleName,\n binRequiresRange(channelDef, channel) ? {binSuffix: 'range'} : {},\n {\n offset\n }\n );\n } else if (isBinned(bin)) {\n if (isFieldDef(channel2Def)) {\n return interpolatedSignalRef({\n scaleName,\n fieldOrDatumDef: channelDef,\n fieldOrDatumDef2: channel2Def,\n bandPosition,\n offset\n });\n } else {\n const channel2 = channel === X ? X2 : Y2;\n log.warn(log.message.channelRequiredForBinned(channel2));\n }\n }\n }\n\n const scaleType = scale?.get('type');\n return valueRefForFieldOrDatumDef(\n channelDef,\n scaleName,\n hasDiscreteDomain(scaleType) ? {binSuffix: 'range'} : {}, // no need for bin suffix if there is no scale\n {\n offset,\n // For band, to get mid point, need to offset by half of the band\n band: scaleType === 'band' ? bandPosition ?? channelDef.bandPosition ?? 0.5 : undefined\n }\n );\n } else if (isValueDef(channelDef)) {\n const value = channelDef.value;\n const offsetMixins = offset ? {offset} : {};\n\n return {...widthHeightValueOrSignalRef(channel, value), ...offsetMixins};\n }\n\n // If channelDef is neither field def or value def, it's a condition-only def.\n // In such case, we will use default ref.\n }\n\n if (isFunction(defaultRef)) {\n defaultRef = defaultRef();\n }\n\n if (defaultRef) {\n // for non-position, ref could be undefined.\n return {\n ...defaultRef,\n // only include offset when it is non-zero (zero = no offset)\n ...(offset ? {offset} : {})\n };\n }\n return defaultRef;\n}\n\n/**\n * Convert special \"width\" and \"height\" values in Vega-Lite into Vega value ref.\n */\nexport function widthHeightValueOrSignalRef(channel: Channel, value: Value | SignalRef) {\n if (contains(['x', 'x2'], channel) && value === 'width') {\n return {field: {group: 'width'}};\n } else if (contains(['y', 'y2'], channel) && value === 'height') {\n return {field: {group: 'height'}};\n }\n return signalOrValueRef(value);\n}\n","import {SignalRef} from 'vega';\nimport {isString} from 'vega-util';\nimport {isBinning} from '../bin';\nimport {\n channelDefType,\n DatumDef,\n FieldDef,\n isFieldDef,\n isFieldOrDatumDefForTimeFormat,\n isScaleFieldDef,\n vgField\n} from '../channeldef';\nimport {Config} from '../config';\nimport {fieldValidPredicate} from '../predicate';\nimport {ScaleType} from '../scale';\nimport {formatExpression, normalizeTimeUnit, timeUnitSpecifierExpression} from '../timeunit';\nimport {QUANTITATIVE, Type} from '../type';\nimport {Dict, stringify} from '../util';\nimport {isSignalRef} from '../vega.schema';\nimport {TimeUnit} from './../timeunit';\nimport {datumDefToExpr} from './mark/encode/valueref';\n\nexport function isCustomFormatType(formatType: string) {\n return formatType && formatType !== 'number' && formatType !== 'time';\n}\n\nfunction customFormatExpr(formatType: string, field: string, format: string | Dict) {\n return `${formatType}(${field}${format ? `, ${stringify(format)}` : ''})`;\n}\n\nexport const BIN_RANGE_DELIMITER = ' \\u2013 ';\n\nexport function formatSignalRef({\n fieldOrDatumDef,\n format,\n formatType,\n expr,\n normalizeStack,\n config\n}: {\n fieldOrDatumDef: FieldDef | DatumDef;\n format: string | Dict;\n formatType: string;\n expr?: 'datum' | 'parent' | 'datum.datum';\n normalizeStack?: boolean;\n config: Config;\n}) {\n if (isCustomFormatType(formatType)) {\n return formatCustomType({\n fieldOrDatumDef,\n format,\n formatType,\n expr,\n config\n });\n }\n\n const field = fieldToFormat(fieldOrDatumDef, expr, normalizeStack);\n\n if (isFieldOrDatumDefForTimeFormat(fieldOrDatumDef)) {\n const signal = timeFormatExpression(\n field,\n isFieldDef(fieldOrDatumDef) ? normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit : undefined,\n format,\n config.timeFormat,\n isScaleFieldDef(fieldOrDatumDef) && fieldOrDatumDef.scale?.type === ScaleType.UTC\n );\n return signal ? {signal} : undefined;\n }\n\n format = numberFormat(channelDefType(fieldOrDatumDef), format, config);\n if (isFieldDef(fieldOrDatumDef) && isBinning(fieldOrDatumDef.bin)) {\n const endField = vgField(fieldOrDatumDef, {expr, binSuffix: 'end'});\n return {\n signal: binFormatExpression(field, endField, format, formatType, config)\n };\n } else if (format || channelDefType(fieldOrDatumDef) === 'quantitative') {\n return {\n signal: `${formatExpr(field, format)}`\n };\n } else {\n return {signal: `isValid(${field}) ? ${field} : \"\"+${field}`};\n }\n}\n\nfunction fieldToFormat(\n fieldOrDatumDef: FieldDef | DatumDef,\n expr: 'datum' | 'parent' | 'datum.datum',\n normalizeStack: boolean\n) {\n if (isFieldDef(fieldOrDatumDef)) {\n if (normalizeStack) {\n return `${vgField(fieldOrDatumDef, {expr, suffix: 'end'})}-${vgField(fieldOrDatumDef, {\n expr,\n suffix: 'start'\n })}`;\n } else {\n return vgField(fieldOrDatumDef, {expr});\n }\n } else {\n return datumDefToExpr(fieldOrDatumDef);\n }\n}\n\nexport function formatCustomType({\n fieldOrDatumDef,\n format,\n formatType,\n expr,\n normalizeStack,\n config,\n field\n}: {\n fieldOrDatumDef: FieldDef | DatumDef;\n format: string | Dict;\n formatType: string;\n expr?: 'datum' | 'parent' | 'datum.datum';\n normalizeStack?: boolean;\n config: Config;\n field?: string; // axis/legend \"use datum.value\"\n}) {\n field ??= fieldToFormat(fieldOrDatumDef, expr, normalizeStack);\n\n if (isFieldDef(fieldOrDatumDef) && isBinning(fieldOrDatumDef.bin)) {\n const endField = vgField(fieldOrDatumDef, {expr, binSuffix: 'end'});\n return {\n signal: binFormatExpression(field, endField, format, formatType, config)\n };\n }\n return {signal: customFormatExpr(formatType, field, format)};\n}\n\nexport function guideFormat(\n fieldOrDatumDef: FieldDef | DatumDef,\n type: Type,\n format: string | Dict,\n formatType: string,\n config: Config,\n omitTimeFormatConfig: boolean // axis doesn't use config.timeFormat\n) {\n if (isCustomFormatType(formatType)) {\n return undefined; // handled in encode block\n }\n\n if (isFieldOrDatumDefForTimeFormat(fieldOrDatumDef)) {\n const timeUnit = isFieldDef(fieldOrDatumDef) ? normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit : undefined;\n\n return timeFormat(format as string, timeUnit, config, omitTimeFormatConfig);\n }\n\n return numberFormat(type, format, config);\n}\n\nexport function guideFormatType(\n formatType: string | SignalRef,\n fieldOrDatumDef: FieldDef | DatumDef,\n scaleType: ScaleType\n) {\n if (formatType && (isSignalRef(formatType) || formatType === 'number' || formatType === 'time')) {\n return formatType;\n }\n if (isFieldOrDatumDefForTimeFormat(fieldOrDatumDef) && scaleType !== 'time' && scaleType !== 'utc') {\n return 'time';\n }\n return undefined;\n}\n\n/**\n * Returns number format for a fieldDef.\n */\nexport function numberFormat(type: Type, specifiedFormat: string | Dict, config: Config) {\n // Specified format in axis/legend has higher precedence than fieldDef.format\n if (isString(specifiedFormat)) {\n return specifiedFormat;\n }\n\n if (type === QUANTITATIVE) {\n // we only apply the default if the field is quantitative\n return config.numberFormat;\n }\n return undefined;\n}\n\n/**\n * Returns time format for a fieldDef for use in guides.\n */\nexport function timeFormat(specifiedFormat: string, timeUnit: TimeUnit, config: Config, omitTimeFormatConfig: boolean) {\n if (specifiedFormat) {\n return specifiedFormat;\n }\n\n if (timeUnit) {\n return {\n signal: timeUnitSpecifierExpression(timeUnit)\n };\n }\n\n return omitTimeFormatConfig ? undefined : config.timeFormat;\n}\n\nfunction formatExpr(field: string, format: string) {\n return `format(${field}, \"${format || ''}\")`;\n}\n\nfunction binNumberFormatExpr(field: string, format: string | Dict, formatType: string, config: Config) {\n if (isCustomFormatType(formatType)) {\n return customFormatExpr(formatType, field, format);\n }\n\n return formatExpr(field, (isString(format) ? format : undefined) ?? config.numberFormat);\n}\n\nexport function binFormatExpression(\n startField: string,\n endField: string,\n format: string | Dict,\n formatType: string,\n config: Config\n) {\n const start = binNumberFormatExpr(startField, format, formatType, config);\n const end = binNumberFormatExpr(endField, format, formatType, config);\n return `${fieldValidPredicate(startField, false)} ? \"null\" : ${start} + \"${BIN_RANGE_DELIMITER}\" + ${end}`;\n}\n\n/**\n * Returns the time expression used for axis/legend labels or text mark for a temporal field\n */\nexport function timeFormatExpression(\n field: string,\n timeUnit: TimeUnit,\n format: string | Dict,\n rawTimeFormat: string, // should be provided only for actual text and headers, not axis/legend labels\n isUTCScale: boolean\n): string {\n if (!timeUnit || format) {\n // If there is no time unit, or if user explicitly specifies format for axis/legend/text.\n format = isString(format) ? format : rawTimeFormat; // only use provided timeFormat if there is no timeUnit.\n return `${isUTCScale ? 'utc' : 'time'}Format(${field}, '${format}')`;\n } else {\n return formatExpression(timeUnit, field, isUTCScale);\n }\n}\n","import {isArray} from 'vega-util';\nimport {NonArgAggregateOp} from './aggregate';\nimport {FieldName} from './channeldef';\nimport {DateTime} from './datetime';\n\nexport type SortOrder = 'ascending' | 'descending';\n\n/**\n * A sort definition for transform\n */\nexport interface SortField {\n /**\n * The name of the field to sort.\n */\n field: FieldName;\n\n /**\n * Whether to sort the field in ascending or descending order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort).\n */\n order?: SortOrder | null;\n}\n\nexport interface SortFields {\n field: FieldName[];\n order?: SortOrder[];\n}\n\nexport const DEFAULT_SORT_OP = 'min';\n\n/**\n * A sort definition for sorting a discrete scale in an encoding field definition.\n */\n\nexport interface EncodingSortField {\n /**\n * The data [field](https://vega.github.io/vega-lite/docs/field.html) to sort by.\n *\n * __Default value:__ If unspecified, defaults to the field specified in the outer data reference.\n */\n field?: F; // Field is optional because `\"op\": \"count\"` does not require a field.\n /**\n * An [aggregate operation](https://vega.github.io/vega-lite/docs/aggregate.html#ops) to perform on the field prior to sorting (e.g., `\"count\"`, `\"mean\"` and `\"median\"`).\n * An aggregation is required when there are multiple values of the sort field for each encoded data field.\n * The input data objects will be aggregated, grouped by the encoded data field.\n *\n * For a full list of operations, please see the documentation for [aggregate](https://vega.github.io/vega-lite/docs/aggregate.html#ops).\n *\n * __Default value:__ `\"sum\"` for stacked plots. Otherwise, `\"min\"`.\n */\n op?: NonArgAggregateOp;\n\n /**\n * The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort).\n */\n order?: SortOrder | null;\n}\n\nexport interface SortByEncoding {\n /**\n * The [encoding channel](https://vega.github.io/vega-lite/docs/encoding.html#channels) to sort by (e.g., `\"x\"`, `\"y\"`)\n */\n encoding: SortByChannel;\n\n /**\n * The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort).\n */\n order?: SortOrder | null;\n}\n\nexport type SortArray = number[] | string[] | boolean[] | DateTime[];\n\nconst SORT_BY_CHANNEL_INDEX = {\n x: 1,\n y: 1,\n color: 1,\n fill: 1,\n stroke: 1,\n strokeWidth: 1,\n size: 1,\n shape: 1,\n fillOpacity: 1,\n strokeOpacity: 1,\n opacity: 1,\n text: 1\n} as const;\n\nexport type SortByChannel = keyof typeof SORT_BY_CHANNEL_INDEX;\n\nexport function isSortByChannel(c: string): c is SortByChannel {\n return c in SORT_BY_CHANNEL_INDEX;\n}\n\nexport type SortByChannelDesc =\n | '-x'\n | '-y'\n | '-color'\n | '-fill'\n | '-stroke'\n | '-strokeWidth'\n | '-size'\n | '-shape'\n | '-fillOpacity'\n | '-strokeOpacity'\n | '-opacity'\n | '-text';\n\nexport type AllSortString = SortOrder | SortByChannel | SortByChannelDesc;\n\nexport type Sort = SortArray | AllSortString | EncodingSortField | SortByEncoding | null;\n\nexport function isSortByEncoding(sort: Sort): sort is SortByEncoding {\n return !!sort && !!sort['encoding'];\n}\n\nexport function isSortField(sort: Sort): sort is EncodingSortField {\n return !!sort && (sort['op'] === 'count' || !!sort['field']);\n}\n\nexport function isSortArray(sort: Sort): sort is SortArray {\n return !!sort && isArray(sort);\n}\n","import {LayoutAlign, SignalRef} from 'vega';\nimport {BinParams} from '../bin';\nimport {ChannelDef, Field, FieldName, TypedFieldDef} from '../channeldef';\nimport {ExprRef} from '../expr';\nimport {Header} from '../header';\nimport {EncodingSortField, SortArray, SortOrder} from '../sort';\nimport {StandardType} from '../type';\nimport {BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins} from './base';\nimport {GenericLayerSpec, NormalizedLayerSpec} from './layer';\nimport {GenericUnitSpec, NormalizedUnitSpec} from './unit';\n\nexport interface FacetFieldDef\n extends TypedFieldDef {\n /**\n * An object defining properties of a facet's header.\n */\n header?: Header | null;\n\n // Note: `\"sort\"` for facet field def is different from encoding field def as it does not support `SortByEncoding`\n\n /**\n * Sort order for the encoded field.\n *\n * For continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n *\n * For discrete fields, `sort` can be one of the following:\n * - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n * - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n * - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n * - `null` indicating no sort.\n *\n * __Default value:__ `\"ascending\"`\n *\n * __Note:__ `null` is not supported for `row` and `column`.\n */\n sort?: SortArray | SortOrder | EncodingSortField | null;\n}\n\nexport type FacetEncodingFieldDef<\n F extends Field,\n ES extends ExprRef | SignalRef = ExprRef | SignalRef\n> = FacetFieldDef & GenericCompositionLayoutWithColumns;\n\nexport interface RowColumnEncodingFieldDef\n extends FacetFieldDef {\n // Manually declarae this separated from GenericCompositionLayout as we don't support RowCol object in RowColumnEncodingFieldDef\n\n /**\n * The alignment to apply to row/column facet's subplot.\n * The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n *\n * - For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n * - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n * - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n *\n * __Default value:__ `\"all\"`.\n */\n align?: LayoutAlign;\n\n /**\n * Boolean flag indicating if facet's subviews should be centered relative to their respective rows or columns.\n *\n * __Default value:__ `false`\n */\n center?: boolean;\n\n /**\n * The spacing in pixels between facet's sub-views.\n *\n * __Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)\n */\n spacing?: number;\n}\n\nexport interface FacetMapping<\n F extends Field,\n FD extends FacetFieldDef = FacetFieldDef\n> {\n /**\n * A field definition for the vertical facet of trellis plots.\n */\n row?: FD;\n\n /**\n * A field definition for the horizontal facet of trellis plots.\n */\n column?: FD;\n}\n\nexport function isFacetMapping(\n f: FacetFieldDef | FacetMapping\n): f is FacetMapping {\n return 'row' in f || 'column' in f;\n}\n\n/**\n * Facet mapping for encoding macro\n */\nexport interface EncodingFacetMapping\n extends FacetMapping> {\n /**\n * A field definition for the (flexible) facet of trellis plots.\n *\n * If either `row` or `column` is specified, this channel will be ignored.\n */\n facet?: FacetEncodingFieldDef;\n}\n\nexport function isFacetFieldDef(channelDef: ChannelDef): channelDef is FacetFieldDef {\n return !!channelDef && 'header' in channelDef;\n}\n\n/**\n * Base interface for a facet specification.\n */\nexport interface GenericFacetSpec, L extends GenericLayerSpec, F extends Field>\n extends BaseSpec,\n GenericCompositionLayoutWithColumns,\n ResolveMixins {\n /**\n * Definition for how to facet the data. One of:\n * 1) [a field definition for faceting the plot by one field](https://vega.github.io/vega-lite/docs/facet.html#field-def)\n * 2) [An object that maps `row` and `column` channels to their field definitions](https://vega.github.io/vega-lite/docs/facet.html#mapping)\n */\n facet: FacetFieldDef | FacetMapping;\n\n /**\n * A specification of the view that gets faceted.\n */\n spec: L | U;\n // TODO: replace this with GenericSpec once we support all cases;\n}\n\n/**\n * A facet specification without any shortcut / expansion syntax\n */\nexport type NormalizedFacetSpec = GenericFacetSpec;\n\nexport function isFacetSpec(spec: BaseSpec): spec is GenericFacetSpec {\n return 'facet' in spec;\n}\n","import {Gradient, ScaleType, SignalRef, Text} from 'vega';\nimport {isArray, isBoolean, isNumber, isString} from 'vega-util';\nimport {Aggregate, isAggregateOp, isArgmaxDef, isArgminDef, isCountingAggregateOp} from './aggregate';\nimport {Axis} from './axis';\nimport {autoMaxBins, Bin, BinParams, binToString, isBinned, isBinning} from './bin';\nimport {\n ANGLE,\n Channel,\n COLOR,\n COLUMN,\n DESCRIPTION,\n DETAIL,\n ExtendedChannel,\n FACET,\n FILL,\n FILLOPACITY,\n getSizeChannel,\n HREF,\n isScaleChannel,\n isSecondaryRangeChannel,\n isXorY,\n KEY,\n LATITUDE,\n LATITUDE2,\n LONGITUDE,\n LONGITUDE2,\n OPACITY,\n ORDER,\n PolarPositionScaleChannel,\n PositionScaleChannel,\n RADIUS,\n RADIUS2,\n ROW,\n SHAPE,\n SIZE,\n STROKE,\n STROKEDASH,\n STROKEOPACITY,\n STROKEWIDTH,\n TEXT,\n THETA,\n THETA2,\n TOOLTIP,\n URL,\n X,\n X2,\n Y,\n Y2\n} from './channel';\nimport {getMarkConfig, getMarkPropOrConfig} from './compile/common';\nimport {isCustomFormatType} from './compile/format';\nimport {CompositeAggregate} from './compositemark';\nimport {Config} from './config';\nimport {DateTime, dateTimeToExpr, isDateTime} from './datetime';\nimport {Encoding} from './encoding';\nimport {ExprRef, isExprRef} from './expr';\nimport {Guide, GuideEncodingConditionalValueDef, TitleMixins} from './guide';\nimport {ImputeParams} from './impute';\nimport {Legend} from './legend';\nimport * as log from './log';\nimport {LogicalComposition} from './logical';\nimport {isRectBasedMark, Mark, MarkDef, RelativeBandSize} from './mark';\nimport {ParameterPredicate, Predicate} from './predicate';\nimport {hasDiscreteDomain, isContinuousToDiscrete, Scale, SCALE_CATEGORY_INDEX} from './scale';\nimport {isSortByChannel, Sort, SortOrder} from './sort';\nimport {isFacetFieldDef} from './spec/facet';\nimport {StackOffset} from './stack';\nimport {\n getTimeUnitParts,\n isLocalSingleTimeUnit,\n normalizeTimeUnit,\n TimeUnit,\n TimeUnitParams,\n timeUnitToString\n} from './timeunit';\nimport {AggregatedFieldDef, WindowFieldDef} from './transform';\nimport {getFullName, QUANTITATIVE, StandardType, Type} from './type';\nimport {\n Dict,\n flatAccessWithDatum,\n getFirstDefined,\n internalField,\n omit,\n removePathFromField,\n replacePathInField,\n stringify,\n titleCase\n} from './util';\nimport {isSignalRef} from './vega.schema';\n\nexport type PrimitiveValue = number | string | boolean | null;\n\nexport type Value =\n | PrimitiveValue\n | number[]\n | Gradient\n | Text\n | ES;\n\n/**\n * Definition object for a constant value (primitive value or gradient definition) of an encoding channel.\n */\nexport interface ValueDef {\n /**\n * A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).\n */\n value: V;\n}\n\nexport type PositionValueDef = ValueDef;\nexport type NumericValueDef = ValueDef;\n\n/**\n * A ValueDef with Condition where either the condition or the value are optional.\n * {\n * condition: {field: ...} | {value: ...},\n * value: ...,\n * }\n */\n\n/**\n * @minProperties 1\n */\nexport type ValueDefWithCondition | DatumDef, V extends Value = Value> = Partial<\n ValueDef\n> & {\n /**\n * A field definition or one or more value definition(s) with a parameter predicate.\n */\n condition?:\n | Conditional\n | Conditional>\n | Conditional>[];\n};\n\nexport type StringValueDefWithCondition = ValueDefWithCondition<\n MarkPropFieldOrDatumDef,\n string | null\n>;\nexport type TypeForShape = 'nominal' | 'ordinal' | 'geojson';\n\nexport type Conditional | DatumDef | ValueDef | ExprRef | SignalRef> =\n | ConditionalPredicate\n | ConditionalParameter;\n\nexport type ConditionalPredicate | DatumDef | ValueDef | ExprRef | SignalRef> = {\n /**\n * Predicate for triggering the condition\n */\n test: LogicalComposition;\n} & CD;\n\nexport type ConditionalParameter<\n CD extends FieldDef | DatumDef | ValueDef | ExprRef | SignalRef\n> = ParameterPredicate & CD;\n\nexport function isConditionalParameter(c: Conditional): c is ConditionalParameter {\n return c['param'];\n}\n\nexport interface ConditionValueDefMixins {\n /**\n * One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n *\n * __Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\n * since Vega-Lite only allows at most one encoded field per encoding channel.\n */\n condition?: Conditional> | Conditional>[];\n}\n\n/**\n * A FieldDef with Condition\n * {\n * condition: {value: ...},\n * field: ...,\n * ...\n * }\n */\n\nexport type FieldOrDatumDefWithCondition | DatumDef, V extends Value = Value> = F &\n ConditionValueDefMixins;\n\nexport type MarkPropDef =\n | FieldOrDatumDefWithCondition, V>\n | FieldOrDatumDefWithCondition, V>\n | ValueDefWithCondition, V>;\n\nexport type ColorDef = MarkPropDef;\nexport type NumericMarkPropDef = MarkPropDef;\n\nexport type NumericArrayMarkPropDef = MarkPropDef;\n\nexport type ShapeDef = MarkPropDef;\n\nexport type StringFieldDefWithCondition = FieldOrDatumDefWithCondition, string>;\nexport type TextDef =\n | FieldOrDatumDefWithCondition, Text>\n | FieldOrDatumDefWithCondition, Text>\n | ValueDefWithCondition, Text>;\n\n/**\n * A ValueDef with optional Condition\n * {\n * condition: {field: ...} | {value: ...},\n * value: ...,\n * }\n */\n\n/**\n * Reference to a repeated value.\n */\nexport interface RepeatRef {\n repeat: 'row' | 'column' | 'repeat' | 'layer';\n}\n\nexport type FieldName = string;\nexport type Field = FieldName | RepeatRef;\n\nexport function isRepeatRef(field: Field | any): field is RepeatRef {\n return field && !isString(field) && 'repeat' in field;\n}\n\n/** @@hidden */\nexport type HiddenCompositeAggregate = CompositeAggregate;\n\nexport interface FieldDefBase extends BandMixins {\n /**\n * __Required.__ A string defining the name of the field from which to pull a data value\n * or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n *\n * __See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n *\n * __Notes:__\n * 1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\n * If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\n * See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n * 2) `field` is not required if `aggregate` is `count`.\n */\n field?: F;\n\n // function\n\n /**\n * Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\n * or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n *\n * __Default value:__ `undefined` (None)\n *\n * __See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation.\n */\n timeUnit?: TimeUnit | TimeUnitParams;\n\n /**\n * Aggregation function for the field\n * (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n *\n * __Default value:__ `undefined` (None)\n *\n * __See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation.\n */\n aggregate?: Aggregate | HiddenCompositeAggregate;\n\n /**\n * A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n *\n * - If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n *\n * - If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n *\n * __Default value:__ `false`\n *\n * __See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.\n */\n bin?: B;\n}\n\nexport function toFieldDefBase(fieldDef: FieldDef): FieldDefBase {\n const {field, timeUnit, bin, aggregate} = fieldDef;\n return {\n ...(timeUnit ? {timeUnit} : {}),\n ...(bin ? {bin} : {}),\n ...(aggregate ? {aggregate} : {}),\n field\n };\n}\n\nexport interface TypeMixins {\n /**\n * The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`).\n * It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n *\n * Vega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if:\n * (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit`\n * or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n *\n * __Default value:__\n *\n * 1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n * - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n * - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n * - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n *\n * 2) For a constant value in data domain (`datum`):\n * - `\"quantitative\"` if the datum is a number\n * - `\"nominal\"` if the datum is a string\n * - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n *\n * __Note:__\n * - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n * - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n * - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n * - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n * - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n * - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n *\n * __See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation.\n */\n type?: T;\n}\n\n/**\n * Definition object for a data field, its type and transformation of an encoding channel.\n */\nexport type TypedFieldDef<\n F extends Field,\n T extends Type = any,\n B extends Bin = boolean | BinParams | 'binned' | null // This is equivalent to Bin but we use the full form so the docs has detailed types\n> = FieldDefBase & TitleMixins & TypeMixins;\n\nexport interface SortableFieldDef<\n F extends Field,\n T extends Type = StandardType,\n B extends Bin = boolean | BinParams | null\n> extends TypedFieldDef {\n /**\n * Sort order for the encoded field.\n *\n * For continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n *\n * For discrete fields, `sort` can be one of the following:\n * - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n * - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n * - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n * - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n * - `null` indicating no sort.\n *\n * __Default value:__ `\"ascending\"`\n *\n * __Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n *\n * __See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation.\n */\n sort?: Sort;\n}\n\nexport function isSortableFieldDef(fieldDef: FieldDef): fieldDef is SortableFieldDef {\n return 'sort' in fieldDef;\n}\n\nexport type ScaleFieldDef<\n F extends Field,\n T extends Type = StandardType,\n B extends Bin = boolean | BinParams | null\n> = SortableFieldDef & ScaleMixins;\n\nexport interface ScaleMixins {\n /**\n * An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n *\n * If `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n *\n * __Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n *\n * __See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation.\n */\n scale?: Scale | null;\n}\n\nexport interface DatumDef<\n F extends Field = string,\n V extends PrimitiveValue | DateTime | ExprRef | SignalRef = PrimitiveValue | DateTime | ExprRef | SignalRef\n> extends Partial>,\n BandMixins {\n /**\n * A constant value in data domain.\n */\n datum?: F extends RepeatRef ? V | RepeatRef : V;\n // only apply Repeatref if field (F) can be RepeatRef\n // FIXME(https://github.com/microsoft/TypeScript/issues/37586):\n // `F extends RepeatRef` probably should be `RepeatRef extends F` but there is likely a bug in TS.\n}\n\nexport interface FormatMixins {\n /**\n * When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n *\n * - If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n * - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n *\n * See the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n *\n * When used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n *\n * __Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.\n */\n format?: string | Dict;\n\n /**\n * The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n *\n * __Default value:__\n * - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n * - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.\n */\n formatType?: 'number' | 'time' | string;\n}\n\nexport type StringDatumDef = DatumDef & FormatMixins;\n\nexport type ScaleDatumDef = ScaleMixins & DatumDef;\n\n/**\n * A field definition of a secondary channel that shares a scale with another primary channel. For example, `x2`, `xError` and `xError2` share the same scale with `x`.\n */\nexport type SecondaryFieldDef = FieldDefBase & TitleMixins; // x2/y2 shouldn't have bin, but we keep bin property for simplicity of the codebase.\n\nexport type Position2Def = SecondaryFieldDef | DatumDef | PositionValueDef;\n\nexport type SecondaryChannelDef = Encoding['x2' | 'y2'];\n\n/**\n * Field Def without scale (and without bin: \"binned\" support).\n */\nexport type FieldDefWithoutScale = TypedFieldDef;\n\nexport type LatLongFieldDef = FieldDefBase &\n TitleMixins &\n Partial>; // Lat long shouldn't have bin, but we keep bin property for simplicity of the codebase.\n\nexport type LatLongDef = LatLongFieldDef | DatumDef;\n\nexport type PositionFieldDefBase = ScaleFieldDef<\n F,\n StandardType,\n boolean | BinParams | 'binned' | null // This is equivalent to Bin but we use the full form so the docs has detailed types\n> &\n PositionBaseMixins;\n\nexport type PositionDatumDefBase = ScaleDatumDef & PositionBaseMixins;\n\nexport interface PositionBaseMixins {\n /**\n * Type of stacking offset if the field should be stacked.\n * `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains.\n * For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n *\n * `stack` can be one of the following values:\n * - `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart).\n * - `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized).
\n * -`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)).\n * - `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n *\n * __Default value:__ `zero` for plots with all of the following conditions are true:\n * (1) the mark is `bar`, `area`, or `arc`;\n * (2) the stacked measure channel (x or y) has a linear scale;\n * (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n *\n * __See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation.\n */\n stack?: StackOffset | null | boolean;\n}\n\nexport interface BandMixins {\n /**\n * Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.\n *\n * @minimum 0\n * @maximum 1\n */\n bandPosition?: number;\n}\n\nexport type PositionFieldDef = PositionFieldDefBase & PositionMixins;\n\nexport type PositionDatumDef = PositionDatumDefBase & PositionMixins;\n\nexport type PositionDef = PositionFieldDef | PositionDatumDef | PositionValueDef;\n\nexport interface PositionMixins {\n /**\n * An object defining properties of axis's gridlines, ticks and labels.\n * If `null`, the axis for the encoding channel will be removed.\n *\n * __Default value:__ If undefined, default [axis properties](https://vega.github.io/vega-lite/docs/axis.html) are applied.\n *\n * __See also:__ [`axis`](https://vega.github.io/vega-lite/docs/axis.html) documentation.\n */\n axis?: Axis | null;\n\n /**\n * An object defining the properties of the Impute Operation to be applied.\n * The field value of the other positional channel is taken as `key` of the `Impute` Operation.\n * The field of the `color` channel if specified is used as `groupby` of the `Impute` Operation.\n *\n * __See also:__ [`impute`](https://vega.github.io/vega-lite/docs/impute.html) documentation.\n */\n impute?: ImputeParams | null;\n}\n\nexport type PolarDef = PositionFieldDefBase | PositionDatumDefBase | PositionValueDef;\n\nexport function getBandPosition({\n fieldDef,\n fieldDef2,\n markDef: mark,\n config\n}: {\n fieldDef: FieldDef | DatumDef;\n fieldDef2?: SecondaryChannelDef;\n markDef: MarkDef;\n config: Config;\n}): number {\n if (isFieldOrDatumDef(fieldDef) && fieldDef.bandPosition !== undefined) {\n return fieldDef.bandPosition;\n }\n if (isFieldDef(fieldDef)) {\n const {timeUnit, bin} = fieldDef;\n if (timeUnit && !fieldDef2) {\n return isRectBasedMark(mark.type) ? 0 : getMarkConfig('timeUnitBandPosition', mark, config);\n } else if (isBinning(bin)) {\n return 0.5;\n }\n }\n\n return undefined;\n}\n\nexport function getBandSize({\n channel,\n fieldDef,\n fieldDef2,\n markDef: mark,\n config,\n scaleType,\n useVlSizeChannel\n}: {\n channel: PositionScaleChannel | PolarPositionScaleChannel;\n fieldDef: ChannelDef;\n fieldDef2?: SecondaryChannelDef;\n markDef: MarkDef;\n config: Config;\n scaleType: ScaleType;\n useVlSizeChannel?: boolean;\n}): number | RelativeBandSize | SignalRef {\n const sizeChannel = getSizeChannel(channel);\n const size = getMarkPropOrConfig(useVlSizeChannel ? 'size' : sizeChannel, mark, config, {\n vgChannel: sizeChannel\n });\n\n if (size !== undefined) {\n return size;\n }\n\n if (isFieldDef(fieldDef)) {\n const {timeUnit, bin} = fieldDef;\n\n if (timeUnit && !fieldDef2) {\n return {band: getMarkConfig('timeUnitBandSize', mark, config)};\n } else if (isBinning(bin) && !hasDiscreteDomain(scaleType)) {\n return {band: 1};\n }\n }\n\n if (isRectBasedMark(mark.type)) {\n if (scaleType) {\n if (hasDiscreteDomain(scaleType)) {\n return config[mark.type]?.discreteBandSize || {band: 1};\n } else {\n return config[mark.type]?.continuousBandSize;\n }\n }\n return config[mark.type]?.discreteBandSize;\n }\n\n return undefined;\n}\n\nexport function hasBandEnd(\n fieldDef: FieldDef,\n fieldDef2: SecondaryChannelDef,\n markDef: MarkDef,\n config: Config\n): boolean {\n if (isBinning(fieldDef.bin) || (fieldDef.timeUnit && isTypedFieldDef(fieldDef) && fieldDef.type === 'temporal')) {\n // Need to check bandPosition because non-rect marks (e.g., point) with timeUnit\n // doesn't have to use bandEnd if there is no bandPosition.\n return getBandPosition({fieldDef, fieldDef2, markDef, config}) !== undefined;\n }\n return false;\n}\n\n/**\n * Field definition of a mark property, which can contain a legend.\n */\nexport type MarkPropFieldDef = ScaleFieldDef &\n LegendMixins;\n\nexport type MarkPropDatumDef = LegendMixins & ScaleDatumDef;\n\nexport type MarkPropFieldOrDatumDef =\n | MarkPropFieldDef\n | MarkPropDatumDef;\n\nexport interface LegendMixins {\n /**\n * An object defining properties of the legend.\n * If `null`, the legend for the encoding channel will be removed.\n *\n * __Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n *\n * __See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation.\n */\n legend?: Legend | null;\n}\n\n// Detail\n\n// Order Path have no scale\n\nexport interface OrderFieldDef extends FieldDefWithoutScale {\n /**\n * The sort order. One of `\"ascending\"` (default) or `\"descending\"`.\n */\n sort?: SortOrder;\n}\n\nexport type OrderValueDef = ConditionValueDefMixins & NumericValueDef;\n\nexport interface StringFieldDef extends FieldDefWithoutScale, FormatMixins {}\n\nexport type FieldDef = SecondaryFieldDef | TypedFieldDef;\nexport type ChannelDef = Encoding[keyof Encoding];\n\nexport function isConditionalDef | GuideEncodingConditionalValueDef | ExprRef | SignalRef>(\n channelDef: CD\n): channelDef is CD & {condition: Conditional} {\n return !!channelDef && 'condition' in channelDef;\n}\n\n/**\n * Return if a channelDef is a ConditionalValueDef with ConditionFieldDef\n */\nexport function hasConditionalFieldDef(\n channelDef: Partial>\n): channelDef is {condition: Conditional>} {\n const condition = channelDef && channelDef['condition'];\n return !!condition && !isArray(condition) && isFieldDef(condition);\n}\n\nexport function hasConditionalFieldOrDatumDef(\n channelDef: ChannelDef\n): channelDef is {condition: Conditional>} {\n const condition = channelDef && channelDef['condition'];\n return !!condition && !isArray(condition) && isFieldOrDatumDef(condition);\n}\n\nexport function hasConditionalValueDef(\n channelDef: ChannelDef\n): channelDef is ValueDef & {condition: Conditional> | Conditional>[]} {\n const condition = channelDef && channelDef['condition'];\n return !!condition && (isArray(condition) || isValueDef(condition));\n}\n\nexport function isFieldDef(\n channelDef: Partial> | FieldDefBase | DatumDef\n): channelDef is FieldDefBase | TypedFieldDef | SecondaryFieldDef {\n // TODO: we can't use field in channelDef here as it's somehow failing runtime test\n return !!channelDef && (!!channelDef['field'] || channelDef['aggregate'] === 'count');\n}\n\nexport function channelDefType(channelDef: ChannelDef): Type | undefined {\n return channelDef && channelDef['type'];\n}\n\nexport function isDatumDef(\n channelDef: Partial> | FieldDefBase | DatumDef\n): channelDef is DatumDef {\n return !!channelDef && 'datum' in channelDef;\n}\n\nexport function isContinuousFieldOrDatumDef(\n cd: ChannelDef\n): cd is TypedFieldDef | DatumDef {\n // TODO: make datum support DateTime object\n return (isTypedFieldDef(cd) && !isDiscrete(cd)) || isNumericDataDef(cd);\n}\n\nexport function isQuantitativeFieldOrDatumDef(cd: ChannelDef) {\n // TODO: make datum support DateTime object\n return channelDefType(cd) === 'quantitative' || isNumericDataDef(cd);\n}\n\nexport function isNumericDataDef(cd: ChannelDef): cd is DatumDef {\n return isDatumDef(cd) && isNumber(cd.datum);\n}\n\nexport function isFieldOrDatumDef(\n channelDef: Partial>\n): channelDef is FieldDef | DatumDef {\n return isFieldDef(channelDef) || isDatumDef(channelDef);\n}\n\nexport function isTypedFieldDef(channelDef: ChannelDef): channelDef is TypedFieldDef {\n return !!channelDef && ('field' in channelDef || channelDef['aggregate'] === 'count') && 'type' in channelDef;\n}\n\nexport function isValueDef(channelDef: Partial>): channelDef is ValueDef {\n return channelDef && 'value' in channelDef && 'value' in channelDef;\n}\n\nexport function isScaleFieldDef(channelDef: ChannelDef): channelDef is ScaleFieldDef {\n return !!channelDef && ('scale' in channelDef || 'sort' in channelDef);\n}\n\nexport function isPositionFieldOrDatumDef(\n channelDef: ChannelDef\n): channelDef is PositionFieldDef | PositionDatumDef {\n return channelDef && ('axis' in channelDef || 'stack' in channelDef || 'impute' in channelDef);\n}\n\nexport function isMarkPropFieldOrDatumDef(\n channelDef: ChannelDef\n): channelDef is MarkPropFieldDef | MarkPropDatumDef {\n return !!channelDef && 'legend' in channelDef;\n}\n\nexport function isStringFieldOrDatumDef(\n channelDef: ChannelDef\n): channelDef is StringFieldDef | StringDatumDef {\n return !!channelDef && ('format' in channelDef || 'formatType' in channelDef);\n}\n\nexport function toStringFieldDef(fieldDef: FieldDef): StringFieldDef {\n // omit properties that don't exist in string field defs\n return omit(fieldDef, ['legend', 'axis', 'header', 'scale'] as any[]);\n}\n\nexport interface FieldRefOption {\n /** Exclude bin, aggregate, timeUnit */\n nofn?: boolean;\n /** Wrap the field with datum, parent, or datum.datum (e.g., datum['...'] for Vega Expression */\n expr?: 'datum' | 'parent' | 'datum.datum';\n /** Prepend fn with custom function prefix */\n prefix?: string;\n /** Append suffix to the field ref for bin (default='start') */\n binSuffix?: 'end' | 'range' | 'mid';\n /** Append suffix to the field ref (general) */\n suffix?: string;\n /**\n * Use the field name for `as` in a transform.\n * We will not escape nested accesses because Vega transform outputs cannot be nested.\n */\n forAs?: boolean;\n}\n\nfunction isOpFieldDef(\n fieldDef: FieldDefBase | WindowFieldDef | AggregatedFieldDef\n): fieldDef is WindowFieldDef | AggregatedFieldDef {\n return 'op' in fieldDef;\n}\n\n/**\n * Get a Vega field reference from a Vega-Lite field def.\n */\nexport function vgField(\n fieldDef: FieldDefBase | WindowFieldDef | AggregatedFieldDef,\n opt: FieldRefOption = {}\n): string {\n let field = fieldDef.field;\n const prefix = opt.prefix;\n let suffix = opt.suffix;\n\n let argAccessor = ''; // for accessing argmin/argmax field at the end without getting escaped\n\n if (isCount(fieldDef)) {\n field = internalField('count');\n } else {\n let fn: string;\n\n if (!opt.nofn) {\n if (isOpFieldDef(fieldDef)) {\n fn = fieldDef.op;\n } else {\n const {bin, aggregate, timeUnit} = fieldDef;\n if (isBinning(bin)) {\n fn = binToString(bin);\n suffix = (opt.binSuffix ?? '') + (opt.suffix ?? '');\n } else if (aggregate) {\n if (isArgmaxDef(aggregate)) {\n argAccessor = `[\"${field}\"]`;\n field = `argmax_${aggregate.argmax}`;\n } else if (isArgminDef(aggregate)) {\n argAccessor = `[\"${field}\"]`;\n field = `argmin_${aggregate.argmin}`;\n } else {\n fn = String(aggregate);\n }\n } else if (timeUnit) {\n fn = timeUnitToString(timeUnit);\n suffix = ((!['range', 'mid'].includes(opt.binSuffix) && opt.binSuffix) || '') + (opt.suffix ?? '');\n }\n }\n }\n\n if (fn) {\n field = field ? `${fn}_${field}` : fn;\n }\n }\n\n if (suffix) {\n field = `${field}_${suffix}`;\n }\n\n if (prefix) {\n field = `${prefix}_${field}`;\n }\n\n if (opt.forAs) {\n return removePathFromField(field);\n } else if (opt.expr) {\n // Expression to access flattened field. No need to escape dots.\n return flatAccessWithDatum(field, opt.expr) + argAccessor;\n } else {\n // We flattened all fields so paths should have become dot.\n return replacePathInField(field) + argAccessor;\n }\n}\n\nexport function isDiscrete(def: TypedFieldDef | DatumDef) {\n switch (def.type) {\n case 'nominal':\n case 'ordinal':\n case 'geojson':\n return true;\n case 'quantitative':\n return isFieldDef(def) && !!def.bin;\n case 'temporal':\n return false;\n }\n throw new Error(log.message.invalidFieldType(def.type));\n}\n\nexport function isDiscretizing(def: TypedFieldDef | DatumDef) {\n return isScaleFieldDef(def) && isContinuousToDiscrete(def.scale?.type);\n}\n\nexport function isCount(fieldDef: FieldDefBase) {\n return fieldDef.aggregate === 'count';\n}\n\nexport type FieldTitleFormatter = (fieldDef: FieldDefBase, config: Config) => string;\n\nexport function verbalTitleFormatter(fieldDef: FieldDefBase, config: Config) {\n const {field, bin, timeUnit, aggregate} = fieldDef;\n if (aggregate === 'count') {\n return config.countTitle;\n } else if (isBinning(bin)) {\n return `${field} (binned)`;\n } else if (timeUnit) {\n const unit = normalizeTimeUnit(timeUnit)?.unit;\n if (unit) {\n return `${field} (${getTimeUnitParts(unit).join('-')})`;\n }\n } else if (aggregate) {\n if (isArgmaxDef(aggregate)) {\n return `${field} for max ${aggregate.argmax}`;\n } else if (isArgminDef(aggregate)) {\n return `${field} for min ${aggregate.argmin}`;\n } else {\n return `${titleCase(aggregate)} of ${field}`;\n }\n }\n return field;\n}\n\nexport function functionalTitleFormatter(fieldDef: FieldDefBase) {\n const {aggregate, bin, timeUnit, field} = fieldDef;\n if (isArgmaxDef(aggregate)) {\n return `${field} for argmax(${aggregate.argmax})`;\n } else if (isArgminDef(aggregate)) {\n return `${field} for argmin(${aggregate.argmin})`;\n }\n\n const timeUnitParams = normalizeTimeUnit(timeUnit);\n\n const fn = aggregate || timeUnitParams?.unit || (timeUnitParams?.maxbins && 'timeunit') || (isBinning(bin) && 'bin');\n if (fn) {\n return `${fn.toUpperCase()}(${field})`;\n } else {\n return field;\n }\n}\n\nexport const defaultTitleFormatter: FieldTitleFormatter = (fieldDef: FieldDefBase, config: Config) => {\n switch (config.fieldTitle) {\n case 'plain':\n return fieldDef.field;\n case 'functional':\n return functionalTitleFormatter(fieldDef);\n default:\n return verbalTitleFormatter(fieldDef, config);\n }\n};\n\nlet titleFormatter = defaultTitleFormatter;\n\nexport function setTitleFormatter(formatter: FieldTitleFormatter) {\n titleFormatter = formatter;\n}\n\nexport function resetTitleFormatter() {\n setTitleFormatter(defaultTitleFormatter);\n}\n\nexport function title(\n fieldOrDatumDef: TypedFieldDef | SecondaryFieldDef | DatumDef,\n config: Config,\n {allowDisabling, includeDefault = true}: {allowDisabling: boolean; includeDefault?: boolean}\n) {\n const guideTitle = getGuide(fieldOrDatumDef)?.title;\n\n if (!isFieldDef(fieldOrDatumDef)) {\n return guideTitle;\n }\n const fieldDef = fieldOrDatumDef;\n\n const def = includeDefault ? defaultTitle(fieldDef, config) : undefined;\n\n if (allowDisabling) {\n return getFirstDefined(guideTitle, fieldDef.title, def);\n } else {\n return guideTitle ?? fieldDef.title ?? def;\n }\n}\n\nexport function getGuide(fieldDef: TypedFieldDef | SecondaryFieldDef | DatumDef): Guide {\n if (isPositionFieldOrDatumDef(fieldDef) && fieldDef.axis) {\n return fieldDef.axis;\n } else if (isMarkPropFieldOrDatumDef(fieldDef) && fieldDef.legend) {\n return fieldDef.legend;\n } else if (isFacetFieldDef(fieldDef) && fieldDef.header) {\n return fieldDef.header;\n }\n return undefined;\n}\n\nexport function defaultTitle(fieldDef: FieldDefBase, config: Config) {\n return titleFormatter(fieldDef, config);\n}\n\nexport function getFormatMixins(fieldDef: TypedFieldDef | DatumDef) {\n if (isStringFieldOrDatumDef(fieldDef)) {\n const {format, formatType} = fieldDef;\n return {format, formatType};\n } else {\n const guide = getGuide(fieldDef) ?? {};\n const {format, formatType} = guide;\n return {format, formatType};\n }\n}\n\nexport function defaultType>(fieldDef: T, channel: ExtendedChannel): Type {\n switch (channel) {\n case 'latitude':\n case 'longitude':\n return 'quantitative';\n\n case 'row':\n case 'column':\n case 'facet':\n case 'shape':\n case 'strokeDash':\n return 'nominal';\n\n case 'order':\n return 'ordinal';\n }\n\n if (isSortableFieldDef(fieldDef) && isArray(fieldDef.sort)) {\n return 'ordinal';\n }\n\n const {aggregate, bin, timeUnit} = fieldDef;\n if (timeUnit) {\n return 'temporal';\n }\n\n if (bin || (aggregate && !isArgmaxDef(aggregate) && !isArgminDef(aggregate))) {\n return 'quantitative';\n }\n\n if (isScaleFieldDef(fieldDef) && fieldDef.scale?.type) {\n switch (SCALE_CATEGORY_INDEX[fieldDef.scale.type]) {\n case 'numeric':\n case 'discretizing':\n return 'quantitative';\n case 'time':\n return 'temporal';\n }\n }\n\n return 'nominal';\n}\n\n/**\n * Returns the fieldDef -- either from the outer channelDef or from the condition of channelDef.\n * @param channelDef\n */\n\nexport function getFieldDef(channelDef: ChannelDef): FieldDef {\n if (isFieldDef(channelDef)) {\n return channelDef;\n } else if (hasConditionalFieldDef(channelDef)) {\n return channelDef.condition;\n }\n return undefined;\n}\n\nexport function getFieldOrDatumDef = ChannelDef>(\n channelDef: CD\n): FieldDef | DatumDef {\n if (isFieldOrDatumDef(channelDef)) {\n return channelDef;\n } else if (hasConditionalFieldOrDatumDef(channelDef)) {\n return channelDef.condition;\n }\n return undefined;\n}\n\n/**\n * Convert type to full, lowercase type, or augment the fieldDef with a default type if missing.\n */\nexport function initChannelDef(\n channelDef: ChannelDef,\n channel: ExtendedChannel,\n config: Config,\n opt: {compositeMark?: boolean} = {}\n): ChannelDef {\n if (isString(channelDef) || isNumber(channelDef) || isBoolean(channelDef)) {\n const primitiveType = isString(channelDef) ? 'string' : isNumber(channelDef) ? 'number' : 'boolean';\n log.warn(log.message.primitiveChannelDef(channel, primitiveType, channelDef));\n return {value: channelDef} as ValueDef;\n }\n\n // If a fieldDef contains a field, we need type.\n if (isFieldOrDatumDef(channelDef)) {\n return initFieldOrDatumDef(channelDef, channel, config, opt);\n } else if (hasConditionalFieldOrDatumDef(channelDef)) {\n return {\n ...channelDef,\n // Need to cast as normalizeFieldDef normally return FieldDef, but here we know that it is definitely Condition\n condition: initFieldOrDatumDef(channelDef.condition, channel, config, opt) as Conditional>\n };\n }\n return channelDef;\n}\n\nexport function initFieldOrDatumDef(\n fd: FieldDef | DatumDef,\n channel: ExtendedChannel,\n config: Config,\n opt: {compositeMark?: boolean}\n): FieldDef | DatumDef {\n if (isStringFieldOrDatumDef(fd)) {\n const {format, formatType, ...rest} = fd;\n if (isCustomFormatType(formatType) && !config.customFormatTypes) {\n log.warn(log.message.customFormatTypeNotAllowed(channel));\n return initFieldOrDatumDef(rest, channel, config, opt);\n }\n } else {\n const guideType = isPositionFieldOrDatumDef(fd)\n ? 'axis'\n : isMarkPropFieldOrDatumDef(fd)\n ? 'legend'\n : isFacetFieldDef(fd)\n ? 'header'\n : null;\n if (guideType && fd[guideType]) {\n const {format, formatType, ...newGuide} = fd[guideType];\n if (isCustomFormatType(formatType) && !config.customFormatTypes) {\n log.warn(log.message.customFormatTypeNotAllowed(channel));\n return initFieldOrDatumDef({...fd, [guideType]: newGuide}, channel, config, opt);\n }\n }\n }\n\n if (isFieldDef(fd)) {\n return initFieldDef(fd, channel, opt);\n }\n return initDatumDef(fd);\n}\n\nfunction initDatumDef(datumDef: DatumDef): DatumDef {\n let type = datumDef['type'];\n if (type) {\n return datumDef;\n }\n const {datum} = datumDef;\n type = isNumber(datum) ? 'quantitative' : isString(datum) ? 'nominal' : isDateTime(datum) ? 'temporal' : undefined;\n\n return {...datumDef, type};\n}\n\nexport function initFieldDef(\n fd: FieldDef,\n channel: ExtendedChannel,\n {compositeMark = false}: {compositeMark?: boolean} = {}\n) {\n const {aggregate, timeUnit, bin, field} = fd;\n const fieldDef = {...fd};\n\n // Drop invalid aggregate\n if (!compositeMark && aggregate && !isAggregateOp(aggregate) && !isArgmaxDef(aggregate) && !isArgminDef(aggregate)) {\n log.warn(log.message.invalidAggregate(aggregate));\n delete fieldDef.aggregate;\n }\n\n // Normalize Time Unit\n if (timeUnit) {\n fieldDef.timeUnit = normalizeTimeUnit(timeUnit);\n }\n\n if (field) {\n fieldDef.field = `${field}`;\n }\n\n // Normalize bin\n if (isBinning(bin)) {\n fieldDef.bin = normalizeBin(bin, channel);\n }\n\n if (isBinned(bin) && !isXorY(channel)) {\n log.warn(log.message.channelShouldNotBeUsedForBinned(channel));\n }\n\n // Normalize Type\n if (isTypedFieldDef(fieldDef)) {\n const {type} = fieldDef;\n const fullType = getFullName(type);\n if (type !== fullType) {\n // convert short type to full type\n fieldDef.type = fullType;\n }\n if (type !== 'quantitative') {\n if (isCountingAggregateOp(aggregate)) {\n log.warn(log.message.invalidFieldTypeForCountAggregate(type, aggregate));\n fieldDef.type = 'quantitative';\n }\n }\n } else if (!isSecondaryRangeChannel(channel)) {\n // If type is empty / invalid, then augment with default type\n const newType = defaultType(fieldDef as TypedFieldDef, channel);\n fieldDef['type'] = newType;\n }\n\n if (isTypedFieldDef(fieldDef)) {\n const {compatible, warning} = channelCompatibility(fieldDef, channel) || {};\n if (compatible === false) {\n log.warn(warning);\n }\n }\n\n if (isSortableFieldDef(fieldDef) && isString(fieldDef.sort)) {\n const {sort} = fieldDef;\n if (isSortByChannel(sort)) {\n return {\n ...fieldDef,\n sort: {encoding: sort}\n };\n }\n const sub = sort.substr(1);\n if (sort.charAt(0) === '-' && isSortByChannel(sub)) {\n return {\n ...fieldDef,\n sort: {encoding: sub, order: 'descending'}\n };\n }\n }\n\n if (isFacetFieldDef(fieldDef)) {\n const {header} = fieldDef;\n if (header) {\n const {orient, ...rest} = header;\n if (orient) {\n return {\n ...fieldDef,\n header: {\n ...rest,\n labelOrient: header.labelOrient || orient,\n titleOrient: header.titleOrient || orient\n }\n };\n }\n }\n }\n\n return fieldDef;\n}\n\nexport function normalizeBin(bin: BinParams | boolean | 'binned', channel?: ExtendedChannel) {\n if (isBoolean(bin)) {\n return {maxbins: autoMaxBins(channel)};\n } else if (bin === 'binned') {\n return {\n binned: true\n };\n } else if (!bin.maxbins && !bin.step) {\n return {...bin, maxbins: autoMaxBins(channel)};\n } else {\n return bin;\n }\n}\n\nconst COMPATIBLE = {compatible: true};\nexport function channelCompatibility(\n fieldDef: TypedFieldDef,\n channel: ExtendedChannel\n): {compatible: boolean; warning?: string} {\n const type = fieldDef.type;\n\n if (type === 'geojson' && channel !== 'shape') {\n return {\n compatible: false,\n warning: `Channel ${channel} should not be used with a geojson data.`\n };\n }\n\n switch (channel) {\n case ROW:\n case COLUMN:\n case FACET:\n if (!isDiscrete(fieldDef)) {\n return {\n compatible: false,\n warning: log.message.channelShouldBeDiscrete(channel)\n };\n }\n return COMPATIBLE;\n\n case X:\n case Y:\n case COLOR:\n case FILL:\n case STROKE:\n case TEXT:\n case DETAIL:\n case KEY:\n case TOOLTIP:\n case HREF:\n case URL:\n case ANGLE:\n case THETA:\n case RADIUS:\n case DESCRIPTION:\n return COMPATIBLE;\n\n case LONGITUDE:\n case LONGITUDE2:\n case LATITUDE:\n case LATITUDE2:\n if (type !== QUANTITATIVE) {\n return {\n compatible: false,\n warning: `Channel ${channel} should be used with a quantitative field only, not ${fieldDef.type} field.`\n };\n }\n return COMPATIBLE;\n\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n case STROKEWIDTH:\n case SIZE:\n case THETA2:\n case RADIUS2:\n case X2:\n case Y2:\n if (type === 'nominal' && !fieldDef['sort']) {\n return {\n compatible: false,\n warning: `Channel ${channel} should not be used with an unsorted discrete field.`\n };\n }\n return COMPATIBLE;\n\n case SHAPE:\n case STROKEDASH:\n if (!isDiscrete(fieldDef) && !isDiscretizing(fieldDef)) {\n return {\n compatible: false,\n warning: log.message.channelShouldBeDiscreteOrDiscretizing(channel)\n };\n }\n return COMPATIBLE;\n\n case ORDER:\n if (fieldDef.type === 'nominal' && !('sort' in fieldDef)) {\n return {\n compatible: false,\n warning: `Channel order is inappropriate for nominal field, which has no inherent order.`\n };\n }\n return COMPATIBLE;\n }\n}\n\n/**\n * Check if the field def uses a time format or does not use any format but is temporal\n * (this does not cover field defs that are temporal but use a number format).\n */\nexport function isFieldOrDatumDefForTimeFormat(fieldOrDatumDef: FieldDef | DatumDef): boolean {\n const {formatType} = getFormatMixins(fieldOrDatumDef);\n return formatType === 'time' || (!formatType && isTimeFieldDef(fieldOrDatumDef));\n}\n\n/**\n * Check if field def has type `temporal`. If you want to also cover field defs that use a time format, use `isTimeFormatFieldDef`.\n */\nexport function isTimeFieldDef(def: FieldDef | DatumDef): boolean {\n return def && (def['type'] === 'temporal' || (isFieldDef(def) && !!def.timeUnit));\n}\n\n/**\n * Getting a value associated with a fielddef.\n * Convert the value to Vega expression if applicable (for datetime object, or string if the field def is temporal or has timeUnit)\n */\nexport function valueExpr(\n v: number | string | boolean | DateTime | ExprRef | SignalRef | number[],\n {\n timeUnit,\n type,\n wrapTime,\n undefinedIfExprNotRequired\n }: {\n timeUnit: TimeUnit | TimeUnitParams;\n type?: Type;\n wrapTime?: boolean;\n undefinedIfExprNotRequired?: boolean;\n }\n): string {\n const unit = timeUnit && normalizeTimeUnit(timeUnit)?.unit;\n let isTime = unit || type === 'temporal';\n\n let expr;\n if (isExprRef(v)) {\n expr = v.expr;\n } else if (isSignalRef(v)) {\n expr = v.signal;\n } else if (isDateTime(v)) {\n isTime = true;\n expr = dateTimeToExpr(v);\n } else if (isString(v) || isNumber(v)) {\n if (isTime) {\n expr = `datetime(${stringify(v)})`;\n\n if (isLocalSingleTimeUnit(unit)) {\n // for single timeUnit, we will use dateTimeToExpr to convert number/string to match the timeUnit\n if ((isNumber(v) && v < 10000) || (isString(v) && isNaN(Date.parse(v)))) {\n expr = dateTimeToExpr({[unit]: v});\n }\n }\n }\n }\n if (expr) {\n return wrapTime && isTime ? `time(${expr})` : expr;\n }\n // number or boolean or normal string\n return undefinedIfExprNotRequired ? undefined : stringify(v);\n}\n\n/**\n * Standardize value array -- convert each value to Vega expression if applicable\n */\nexport function valueArray(\n fieldOrDatumDef: TypedFieldDef | DatumDef,\n values: (number | string | boolean | DateTime)[]\n) {\n const {type} = fieldOrDatumDef;\n return values.map(v => {\n const expr = valueExpr(v, {\n timeUnit: isFieldDef(fieldOrDatumDef) ? fieldOrDatumDef.timeUnit : undefined,\n type,\n undefinedIfExprNotRequired: true\n });\n // return signal for the expression if we need an expression\n if (expr !== undefined) {\n return {signal: expr};\n }\n // otherwise just return the original value\n return v;\n });\n}\n\n/**\n * Checks whether a fieldDef for a particular channel requires a computed bin range.\n */\nexport function binRequiresRange(fieldDef: FieldDef, channel: Channel): boolean {\n if (!isBinning(fieldDef.bin)) {\n console.warn('Only call this method for binned field defs.');\n return false;\n }\n\n // We need the range only when the user explicitly forces a binned field to be use discrete scale. In this case, bin range is used in axis and legend labels.\n // We could check whether the axis or legend exists (not disabled) but that seems overkill.\n return isScaleChannel(channel) && ['ordinal', 'nominal'].includes((fieldDef as ScaleFieldDef).type);\n}\n","import {\n Align,\n Axis as VgAxis,\n AxisEncode,\n AxisOrient,\n BaseAxis,\n Color,\n FontStyle,\n FontWeight,\n LabelOverlap,\n SignalRef,\n TextBaseline,\n TimeInterval,\n TimeIntervalStep\n} from 'vega';\nimport {ConditionalPredicate, Value, ValueDef} from './channeldef';\nimport {DateTime} from './datetime';\nimport {ExprRef} from './expr';\nimport {Guide, GuideEncodingEntry, TitleMixins, VlOnlyGuideConfig} from './guide';\nimport {Flag, keys} from './util';\nimport {MapExcludeValueRefAndReplaceSignalWith, VgEncodeChannel} from './vega.schema';\n\nexport type BaseAxisNoValueRefs = AxisOverrideMixins &\n VLOnlyAxisMixins &\n Omit, 'labelOverlap'>;\n\ninterface AxisOverrideMixins {\n // Position and tickMinStep are not config in Vega, but are in Vega-Lite. So we just copy them here.\n\n /**\n * The anchor position of the axis in pixels. For x-axes with top or bottom orientation, this sets the axis group x coordinate. For y-axes with left or right orientation, this sets the axis group y coordinate.\n *\n * __Default value__: `0`\n */\n position?: number | ES;\n\n /**\n * The minimum desired step between axis ticks, in terms of scale domain values. For example, a value of `1` indicates that ticks should not be less than 1 unit apart. If `tickMinStep` is specified, the `tickCount` value will be adjusted, if necessary, to enforce the minimum step value.\n */\n tickMinStep?: number | ES;\n\n // ---------- Properties that do not support signal / expression ----------\n /**\n * A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis.\n *\n * __Default value:__ `true`\n */\n domain?: boolean;\n\n /**\n * A boolean flag indicating if grid lines should be included as part of the axis\n *\n * __Default value:__ `true` for [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous) that are not binned; otherwise, `false`.\n */\n grid?: boolean;\n\n /**\n * A boolean flag indicating if labels should be included as part of the axis.\n *\n * __Default value:__ `true`.\n */\n labels?: boolean;\n\n /**\n * Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for `band` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with `\"bandPosition\": 1` and an axis `\"padding\"` value of `0`.\n */\n tickExtra?: boolean;\n\n /**\n * Boolean flag indicating if pixel position values should be rounded to the nearest integer.\n *\n * __Default value:__ `true`\n */\n tickRound?: boolean;\n\n /**\n * Boolean value that determines whether the axis should include ticks.\n *\n * __Default value:__ `true`\n */\n ticks?: boolean;\n\n // Override comments to be Vega-Lite specific\n\n /**\n * Indicates if the first and last axis labels should be aligned flush with the scale range. Flush alignment for a horizontal axis will left-align the first label and right-align the last label. For vertical axes, bottom and top text baselines are applied instead. If this property is a number, it also indicates the number of pixels by which to offset the first and last labels; for example, a value of 2 will flush-align the first and last labels and also push them 2 pixels outward from the center of the axis. The additional adjustment can sometimes help the labels better visually group with corresponding axis ticks.\n *\n * __Default value:__ `true` for axis of a continuous x-scale. Otherwise, `false`.\n */\n labelFlush?: boolean | number;\n\n /**\n * The strategy to use for resolving overlap of axis labels. If `false` (the default), no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used (this works well for standard linear axes). If set to `\"greedy\"`, a linear scan of the labels is performed, removing any labels that overlaps with the last visible label (this often works better for log-scaled axes).\n *\n * __Default value:__ `true` for non-nominal fields with non-log scales; `\"greedy\"` for log scales; otherwise `false`.\n */\n labelOverlap?: LabelOverlap | ES;\n\n /**\n * The offset, in pixels, by which to displace the axis from the edge of the enclosing group or data rectangle.\n *\n * __Default value:__ derived from the [axis config](https://vega.github.io/vega-lite/docs/config.html#facet-scale-config)'s `offset` (`0` by default)\n */\n offset?: number | ES;\n\n /**\n * The orientation of the axis. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`. The orientation can be used to further specialize the axis type (e.g., a y-axis oriented towards the right edge of the chart).\n *\n * __Default value:__ `\"bottom\"` for x-axes and `\"left\"` for y-axes.\n */\n orient?: AxisOrient | ES;\n\n /**\n * A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are \"nice\" (multiples of 2, 5, 10) and lie within the underlying scale's range.\n *\n * For scales of type `\"time\"` or `\"utc\"`, the tick count can instead be a time interval specifier. Legal string values are `\"millisecond\"`, `\"second\"`, `\"minute\"`, `\"hour\"`, `\"day\"`, `\"week\"`, `\"month\"`, and `\"year\"`. Alternatively, an object-valued interval specifier of the form `{\"interval\": \"month\", \"step\": 3}` includes a desired number of interval steps. Here, ticks are generated for each quarter (Jan, Apr, Jul, Oct) boundary.\n *\n * __Default value__: Determine using a formula `ceil(width/40)` for x and `ceil(height/40)` for y.\n *\n * @minimum 0\n */\n tickCount?: number | TimeInterval | TimeIntervalStep | ES;\n\n /**\n * Explicitly set the visible axis tick values.\n */\n values?: number[] | string[] | boolean[] | DateTime[] | ES; // Vega already supports Signal -- we have to re-declare here since VL supports special Date Time object that's not valid in Vega.\n\n /**\n * A non-negative integer indicating the z-index of the axis.\n * If zindex is 0, axes should be drawn behind all chart elements.\n * To put them in front, set `zindex` to `1` or more.\n *\n * __Default value:__ `0` (behind the marks).\n *\n * @TJS-type integer\n * @minimum 0\n */\n zindex?: number;\n}\n\ninterface VLOnlyAxisMixins {\n /**\n * [Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n *\n * __Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.\n */\n labelExpr?: string;\n\n /**\n * A string or array of strings indicating the name of custom styles to apply to the axis. A style is a named collection of axis property defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles.\n *\n * __Default value:__ (none)\n * __Note:__ Any specified style will augment the default style. For example, an x-axis mark with `\"style\": \"foo\"` will use `config.axisX` and `config.style.foo` (the specified style `\"foo\"` has higher precedence).\n */\n style?: string | string[];\n}\n\nexport type ConditionalAxisProp =\n | 'labelAlign'\n | 'labelBaseline'\n | 'labelColor'\n | 'labelFont'\n | 'labelFontSize'\n | 'labelFontStyle'\n | 'labelFontWeight'\n | 'labelOpacity'\n | 'labelOffset'\n | 'labelPadding'\n | 'gridColor'\n | 'gridDash'\n | 'gridDashOffset'\n | 'gridOpacity'\n | 'gridWidth'\n | 'tickColor'\n | 'tickDash'\n | 'tickDashOffset'\n | 'tickOpacity'\n | 'tickSize'\n | 'tickWidth';\n\nexport const CONDITIONAL_AXIS_PROP_INDEX: Record<\n ConditionalAxisProp,\n {\n part: keyof AxisEncode;\n vgProp: VgEncodeChannel;\n } | null // null if we need to convert condition to signal\n> = {\n labelAlign: {\n part: 'labels',\n vgProp: 'align'\n },\n labelBaseline: {\n part: 'labels',\n vgProp: 'baseline'\n },\n labelColor: {\n part: 'labels',\n vgProp: 'fill'\n },\n labelFont: {\n part: 'labels',\n vgProp: 'font'\n },\n labelFontSize: {\n part: 'labels',\n vgProp: 'fontSize'\n },\n labelFontStyle: {\n part: 'labels',\n vgProp: 'fontStyle'\n },\n labelFontWeight: {\n part: 'labels',\n vgProp: 'fontWeight'\n },\n labelOpacity: {\n part: 'labels',\n vgProp: 'opacity'\n },\n labelOffset: null,\n labelPadding: null, // There is no fixed vgProp for tickSize, need to use signal.\n gridColor: {\n part: 'grid',\n vgProp: 'stroke'\n },\n gridDash: {\n part: 'grid',\n vgProp: 'strokeDash'\n },\n gridDashOffset: {\n part: 'grid',\n vgProp: 'strokeDashOffset'\n },\n gridOpacity: {\n part: 'grid',\n vgProp: 'opacity'\n },\n gridWidth: {\n part: 'grid',\n vgProp: 'strokeWidth'\n },\n tickColor: {\n part: 'ticks',\n vgProp: 'stroke'\n },\n tickDash: {\n part: 'ticks',\n vgProp: 'strokeDash'\n },\n tickDashOffset: {\n part: 'ticks',\n vgProp: 'strokeDashOffset'\n },\n tickOpacity: {\n part: 'ticks',\n vgProp: 'opacity'\n },\n tickSize: null, // There is no fixed vgProp for tickSize, need to use signal.\n tickWidth: {\n part: 'ticks',\n vgProp: 'strokeWidth'\n }\n};\n\nexport type ConditionalAxisProperty = (ValueDef | ES) & {\n condition: ConditionalPredicate | ES> | ConditionalPredicate | ES>[];\n};\n\nexport function isConditionalAxisValue(\n v: any\n): v is ConditionalAxisProperty {\n return v && v['condition'];\n}\n\nexport type ConditionalAxisNumber = ConditionalAxisProperty<\n number | null,\n ES\n>;\nexport type ConditionalAxisLabelAlign = ConditionalAxisProperty<\n Align | null,\n ES\n>;\nexport type ConditionalAxisLabelBaseline<\n ES extends ExprRef | SignalRef = ExprRef | SignalRef\n> = ConditionalAxisProperty;\nexport type ConditionalAxisColor = ConditionalAxisProperty<\n Color | null,\n ES\n>;\nexport type ConditionalAxisString = ConditionalAxisProperty<\n string | null,\n ES\n>;\n\nexport type ConditionalAxisLabelFontStyle<\n ES extends ExprRef | SignalRef = ExprRef | SignalRef\n> = ConditionalAxisProperty;\nexport type ConditionalAxisLabelFontWeight<\n ES extends ExprRef | SignalRef = ExprRef | SignalRef\n> = ConditionalAxisProperty;\n\nexport type ConditionalAxisNumberArray = ConditionalAxisProperty<\n number[] | null,\n ES\n>;\n\n// Vega axis config is the same as Vega axis base. If this is not the case, add specific type.\nexport type AxisConfigBaseWithConditionalAndSignal = Omit<\n BaseAxisNoValueRefs,\n ConditionalAxisProp | 'title'\n> &\n AxisPropsWithCondition;\n\nexport interface AxisPropsWithCondition {\n labelAlign?: BaseAxisNoValueRefs['labelAlign'] | ConditionalAxisLabelAlign;\n labelBaseline?: BaseAxisNoValueRefs['labelBaseline'] | ConditionalAxisLabelBaseline;\n labelColor?: BaseAxisNoValueRefs['labelColor'] | ConditionalAxisColor;\n labelFont?: BaseAxisNoValueRefs['labelFont'] | ConditionalAxisString;\n labelFontSize?: BaseAxisNoValueRefs['labelFontSize'] | ConditionalAxisNumber;\n labelFontStyle?: BaseAxisNoValueRefs['labelFontStyle'] | ConditionalAxisLabelFontStyle;\n labelFontWeight?: BaseAxisNoValueRefs['labelFontWeight'] | ConditionalAxisLabelFontWeight;\n labelLineHeight?: BaseAxisNoValueRefs['labelLineHeight'] | ConditionalAxisNumber;\n labelOpacity?: BaseAxisNoValueRefs['labelOpacity'] | ConditionalAxisNumber;\n labelOffset?: BaseAxisNoValueRefs['labelOffset'] | ConditionalAxisNumber;\n labelPadding?: BaseAxisNoValueRefs['labelPadding'] | ConditionalAxisNumber;\n gridColor?: BaseAxisNoValueRefs['gridColor'] | ConditionalAxisColor;\n gridDash?: BaseAxisNoValueRefs['gridDash'] | ConditionalAxisNumberArray;\n gridDashOffset?: BaseAxisNoValueRefs['gridDashOffset'] | ConditionalAxisNumber;\n gridOpacity?: BaseAxisNoValueRefs['gridOpacity'] | ConditionalAxisNumber;\n gridWidth?: BaseAxisNoValueRefs['gridWidth'] | ConditionalAxisNumber;\n tickColor?: BaseAxisNoValueRefs['tickColor'] | ConditionalAxisColor;\n tickDash?: BaseAxisNoValueRefs['tickDash'] | ConditionalAxisNumberArray;\n tickDashOffset?: BaseAxisNoValueRefs['tickDashOffset'] | ConditionalAxisNumber;\n tickOpacity?: BaseAxisNoValueRefs['tickOpacity'] | ConditionalAxisNumber;\n tickSize?: BaseAxisNoValueRefs['tickSize'] | ConditionalAxisNumber;\n tickWidth?: BaseAxisNoValueRefs['tickWidth'] | ConditionalAxisNumber;\n title?: TitleMixins['title'];\n}\n\nexport type AxisConfig = Guide &\n VlOnlyGuideConfig &\n AxisConfigBaseWithConditionalAndSignal & {\n /**\n * Disable axis by default.\n */\n disable?: boolean;\n };\n\nexport interface Axis\n extends AxisConfigBaseWithConditionalAndSignal,\n Guide {\n /**\n * Mark definitions for custom axis encoding.\n *\n * @hidden\n */\n encoding?: AxisEncoding;\n}\n\nexport type AxisInternal = Axis;\n\nexport type AxisPart = keyof AxisEncoding;\nexport const AXIS_PARTS: AxisPart[] = ['domain', 'grid', 'labels', 'ticks', 'title'];\n\n/**\n * A dictionary listing whether a certain axis property is applicable for only main axes or only grid axes.\n */\nexport const AXIS_PROPERTY_TYPE: Record = {\n grid: 'grid',\n gridCap: 'grid',\n gridColor: 'grid',\n gridDash: 'grid',\n gridDashOffset: 'grid',\n gridOpacity: 'grid',\n gridScale: 'grid',\n gridWidth: 'grid',\n\n orient: 'main',\n\n bandPosition: 'both', // Need to be applied to grid axis too, so the grid will align with ticks.\n\n aria: 'main',\n description: 'main',\n domain: 'main',\n domainCap: 'main',\n domainColor: 'main',\n domainDash: 'main',\n domainDashOffset: 'main',\n domainOpacity: 'main',\n domainWidth: 'main',\n format: 'main',\n formatType: 'main',\n labelAlign: 'main',\n labelAngle: 'main',\n labelBaseline: 'main',\n labelBound: 'main',\n labelColor: 'main',\n labelFlush: 'main',\n labelFlushOffset: 'main',\n labelFont: 'main',\n labelFontSize: 'main',\n labelFontStyle: 'main',\n labelFontWeight: 'main',\n labelLimit: 'main',\n labelLineHeight: 'main',\n labelOffset: 'main',\n labelOpacity: 'main',\n labelOverlap: 'main',\n labelPadding: 'main',\n labels: 'main',\n labelSeparation: 'main',\n maxExtent: 'main',\n minExtent: 'main',\n offset: 'both',\n position: 'main',\n tickCap: 'main',\n tickColor: 'main',\n tickDash: 'main',\n tickDashOffset: 'main',\n tickMinStep: 'both',\n tickOffset: 'both', // Need to be applied to grid axis too, so the grid will align with ticks.\n tickOpacity: 'main',\n tickRound: 'both', // Apply rounding to grid and ticks so they are aligned.\n ticks: 'main',\n tickSize: 'main',\n tickWidth: 'both',\n title: 'main',\n titleAlign: 'main',\n titleAnchor: 'main',\n titleAngle: 'main',\n titleBaseline: 'main',\n titleColor: 'main',\n titleFont: 'main',\n titleFontSize: 'main',\n titleFontStyle: 'main',\n titleFontWeight: 'main',\n titleLimit: 'main',\n titleLineHeight: 'main',\n titleOpacity: 'main',\n titlePadding: 'main',\n titleX: 'main',\n titleY: 'main',\n\n encode: 'both', // we hide this in Vega-Lite\n scale: 'both',\n tickBand: 'both',\n tickCount: 'both',\n tickExtra: 'both',\n translate: 'both',\n values: 'both',\n zindex: 'both' // this is actually set afterward, so it doesn't matter\n};\n\nexport interface AxisEncoding {\n /**\n * Custom encoding for the axis container.\n */\n axis?: GuideEncodingEntry;\n\n /**\n * Custom encoding for the axis domain rule mark.\n */\n domain?: GuideEncodingEntry;\n\n /**\n * Custom encoding for axis gridline rule marks.\n */\n grid?: GuideEncodingEntry;\n\n /**\n * Custom encoding for axis label text marks.\n */\n labels?: GuideEncodingEntry;\n\n /**\n * Custom encoding for axis tick rule marks.\n */\n ticks?: GuideEncodingEntry;\n\n /**\n * Custom encoding for the axis title text mark.\n */\n title?: GuideEncodingEntry;\n}\n\nexport const COMMON_AXIS_PROPERTIES_INDEX: Flag)> = {\n orient: 1, // other things can depend on orient\n\n aria: 1,\n bandPosition: 1,\n description: 1,\n domain: 1,\n domainCap: 1,\n domainColor: 1,\n domainDash: 1,\n domainDashOffset: 1,\n domainOpacity: 1,\n domainWidth: 1,\n format: 1,\n formatType: 1,\n grid: 1,\n gridCap: 1,\n gridColor: 1,\n gridDash: 1,\n gridDashOffset: 1,\n gridOpacity: 1,\n gridWidth: 1,\n labelAlign: 1,\n labelAngle: 1,\n labelBaseline: 1,\n labelBound: 1,\n labelColor: 1,\n labelFlush: 1,\n labelFlushOffset: 1,\n labelFont: 1,\n labelFontSize: 1,\n labelFontStyle: 1,\n labelFontWeight: 1,\n labelLimit: 1,\n labelLineHeight: 1,\n labelOffset: 1,\n labelOpacity: 1,\n labelOverlap: 1,\n labelPadding: 1,\n labels: 1,\n labelSeparation: 1,\n maxExtent: 1,\n minExtent: 1,\n offset: 1,\n position: 1,\n tickBand: 1,\n tickCap: 1,\n tickColor: 1,\n tickCount: 1,\n tickDash: 1,\n tickDashOffset: 1,\n tickExtra: 1,\n tickMinStep: 1,\n tickOffset: 1,\n tickOpacity: 1,\n tickRound: 1,\n ticks: 1,\n tickSize: 1,\n tickWidth: 1,\n title: 1,\n titleAlign: 1,\n titleAnchor: 1,\n titleAngle: 1,\n titleBaseline: 1,\n titleColor: 1,\n titleFont: 1,\n titleFontSize: 1,\n titleFontStyle: 1,\n titleFontWeight: 1,\n titleLimit: 1,\n titleLineHeight: 1,\n titleOpacity: 1,\n titlePadding: 1,\n titleX: 1,\n titleY: 1,\n translate: 1,\n values: 1,\n zindex: 1\n};\n\nconst AXIS_PROPERTIES_INDEX: Flag> = {\n ...COMMON_AXIS_PROPERTIES_INDEX,\n style: 1,\n labelExpr: 1,\n encoding: 1\n};\n\nexport function isAxisProperty(prop: string): prop is keyof Axis {\n return !!AXIS_PROPERTIES_INDEX[prop];\n}\n\n// Export for dependent projects\nexport const AXIS_PROPERTIES = keys(AXIS_PROPERTIES_INDEX);\n\nexport interface AxisConfigMixins {\n /**\n * Axis configuration, which determines default properties for all `x` and `y` [axes](https://vega.github.io/vega-lite/docs/axis.html). For a full list of axis configuration options, please see the [corresponding section of the axis documentation](https://vega.github.io/vega-lite/docs/axis.html#config).\n */\n axis?: AxisConfig;\n\n /**\n * X-axis specific config.\n */\n axisX?: AxisConfig;\n\n /**\n * Y-axis specific config.\n */\n axisY?: AxisConfig;\n\n /**\n * Config for y-axis along the left edge of the chart.\n */\n axisLeft?: AxisConfig;\n\n /**\n * Config for y-axis along the right edge of the chart.\n */\n axisRight?: AxisConfig;\n\n /**\n * Config for x-axis along the top edge of the chart.\n */\n axisTop?: AxisConfig;\n\n /**\n * Config for x-axis along the bottom edge of the chart.\n */\n axisBottom?: AxisConfig;\n\n /**\n * Config for axes with \"band\" scales.\n */\n axisBand?: AxisConfig;\n\n /**\n * Config for axes with \"point\" scales.\n */\n axisPoint?: AxisConfig;\n\n /**\n * Config for axes with \"point\" or \"band\" scales.\n */\n axisDiscrete?: AxisConfig;\n\n /**\n * Config for quantitative axes.\n */\n axisQuantitative?: AxisConfig;\n\n /**\n * Config for temporal axes.\n */\n axisTemporal?: AxisConfig;\n\n /**\n * Config for x-axes with \"band\" scales.\n */\n axisXBand?: AxisConfig;\n\n /**\n * Config for x-axes with \"point\" scales.\n */\n axisXPoint?: AxisConfig;\n\n /**\n * Config for x-axes with \"point\" or \"band\" scales.\n */\n axisXDiscrete?: AxisConfig;\n\n /**\n * Config for x-quantitative axes.\n */\n axisXQuantitative?: AxisConfig;\n\n /**\n * Config for x-temporal axes.\n */\n axisXTemporal?: AxisConfig;\n\n /**\n * Config for y-axes with \"band\" scales.\n */\n axisYBand?: AxisConfig;\n\n /**\n * Config for y-axes with \"point\" scales.\n */\n axisYPoint?: AxisConfig;\n\n /**\n * Config for y-axes with \"point\" or \"band\" scales.\n */\n axisYDiscrete?: AxisConfig;\n\n /**\n * Config for y-quantitative axes.\n */\n axisYQuantitative?: AxisConfig;\n\n /**\n * Config for y-temporal axes.\n */\n axisYTemporal?: AxisConfig;\n}\n\nconst AXIS_CONFIGS_INDEX: Flag> = {\n axis: 1,\n axisBand: 1,\n axisBottom: 1,\n axisDiscrete: 1,\n axisLeft: 1,\n axisPoint: 1,\n axisQuantitative: 1,\n axisRight: 1,\n axisTemporal: 1,\n axisTop: 1,\n axisX: 1,\n axisXBand: 1,\n axisXDiscrete: 1,\n axisXPoint: 1,\n axisXQuantitative: 1,\n axisXTemporal: 1,\n axisY: 1,\n axisYBand: 1,\n axisYDiscrete: 1,\n axisYPoint: 1,\n axisYQuantitative: 1,\n axisYTemporal: 1\n};\n\nexport const AXIS_CONFIGS = keys(AXIS_CONFIGS_INDEX);\n","import {FieldName} from '../channeldef';\nimport {CompositeEncoding, FacetedCompositeEncoding} from '../compositemark';\nimport {Encoding} from '../encoding';\nimport {ExprRef} from '../expr';\nimport {AnyMark, Mark, MarkDef} from '../mark';\nimport {VariableParameter} from '../parameter';\nimport {Projection} from '../projection';\nimport {SelectionParameter} from '../selection';\nimport {Field} from './../channeldef';\nimport {BaseSpec, DataMixins, FrameMixins, GenericCompositionLayout, ResolveMixins} from './base';\nimport {TopLevel} from './toplevel';\n/**\n * Base interface for a unit (single-view) specification.\n */\nexport interface GenericUnitSpec, M> extends BaseSpec {\n /**\n * A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n * `\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def).\n */\n mark: M;\n\n /**\n * A key-value mapping between encoding channels and definition of fields.\n */\n encoding?: E;\n\n /**\n * An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks\n * and to `latitude` and `\"longitude\"` channels for other marks.\n */\n projection?: Projection;\n\n /**\n * An array of parameters that may either be simple variables, or more complex selections that map user input to data queries.\n */\n params?: (VariableParameter | SelectionParameter)[];\n}\n\n/**\n * A unit specification without any shortcut/expansion syntax.\n */\nexport type NormalizedUnitSpec = GenericUnitSpec, Mark | MarkDef>;\n\n/**\n * A unit specification, which can contain either [primitive marks or composite marks](https://vega.github.io/vega-lite/docs/mark.html#types).\n */\nexport type UnitSpec = GenericUnitSpec, AnyMark>;\n\nexport type UnitSpecWithFrame = GenericUnitSpec, AnyMark> & FrameMixins;\n\n/**\n * Unit spec that can have a composite mark and row or column channels (shorthand for a facet spec).\n */\nexport type FacetedUnitSpec = GenericUnitSpec, AnyMark> &\n ResolveMixins &\n GenericCompositionLayout &\n FrameMixins;\n\nexport type TopLevelUnitSpec = TopLevel> & DataMixins;\n\nexport function isUnitSpec(spec: BaseSpec): spec is FacetedUnitSpec | NormalizedUnitSpec {\n return 'mark' in spec;\n}\n","import {Encoding} from '../encoding';\nimport {GenericMarkDef, getMarkType} from '../mark';\nimport {NonFacetUnitNormalizer, Normalize, NormalizerParams} from '../normalize/base';\nimport {GenericSpec} from '../spec';\nimport {GenericLayerSpec, NormalizedLayerSpec} from '../spec/layer';\nimport {GenericUnitSpec, isUnitSpec, NormalizedUnitSpec} from '../spec/unit';\nimport {FieldName} from '../channeldef';\n\n// TODO: replace string with Mark\nexport type CompositeMarkUnitSpec = GenericUnitSpec>;\n\nexport class CompositeMarkNormalizer implements NonFacetUnitNormalizer> {\n constructor(\n public name: string,\n public run: (\n spec: CompositeMarkUnitSpec,\n params: NormalizerParams,\n normalize: Normalize<\n // Input of the normalize method\n GenericUnitSpec, M> | GenericLayerSpec,\n // Output of the normalize method\n NormalizedLayerSpec | NormalizedUnitSpec\n >\n ) => NormalizedLayerSpec | NormalizedUnitSpec\n ) {}\n\n public hasMatchingType(spec: GenericSpec): spec is CompositeMarkUnitSpec {\n if (isUnitSpec(spec)) {\n return getMarkType(spec.mark) === this.name;\n }\n return false;\n }\n}\n","import {AggregateOp} from 'vega';\nimport {array, isArray} from 'vega-util';\nimport {isArgmaxDef, isArgminDef} from './aggregate';\nimport {isBinned, isBinning} from './bin';\nimport {\n ANGLE,\n CHANNELS,\n COLOR,\n DESCRIPTION,\n DETAIL,\n FILL,\n FILLOPACITY,\n HREF,\n isChannel,\n isNonPositionScaleChannel,\n isSecondaryRangeChannel,\n isXorY,\n KEY,\n LATITUDE,\n LATITUDE2,\n LONGITUDE,\n LONGITUDE2,\n OPACITY,\n ORDER,\n RADIUS,\n RADIUS2,\n SHAPE,\n SIZE,\n STROKE,\n STROKEDASH,\n STROKEOPACITY,\n STROKEWIDTH,\n supportMark,\n TEXT,\n THETA,\n THETA2,\n TOOLTIP,\n URL,\n X,\n X2,\n Y,\n Y2,\n Channel\n} from './channel';\nimport {\n binRequiresRange,\n ChannelDef,\n ColorDef,\n Field,\n FieldDef,\n FieldDefWithoutScale,\n getFieldDef,\n getGuide,\n hasConditionalFieldDef,\n initChannelDef,\n initFieldDef,\n isConditionalDef,\n isDatumDef,\n isFieldDef,\n isTypedFieldDef,\n isValueDef,\n LatLongDef,\n NumericArrayMarkPropDef,\n NumericMarkPropDef,\n OrderFieldDef,\n OrderValueDef,\n PolarDef,\n Position2Def,\n PositionDef,\n SecondaryFieldDef,\n ShapeDef,\n StringFieldDef,\n StringFieldDefWithCondition,\n StringValueDefWithCondition,\n TextDef,\n title,\n TypedFieldDef,\n vgField\n} from './channeldef';\nimport {Config} from './config';\nimport * as log from './log';\nimport {Mark} from './mark';\nimport {EncodingFacetMapping} from './spec/facet';\nimport {AggregatedFieldDef, BinTransform, TimeUnitTransform} from './transform';\nimport {QUANTITATIVE, TEMPORAL} from './type';\nimport {keys, some} from './util';\nimport {isSignalRef} from './vega.schema';\n\nexport interface Encoding {\n /**\n * X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n *\n * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n */\n x?: PositionDef;\n\n /**\n * Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n *\n * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n */\n y?: PositionDef;\n\n /**\n * X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n *\n * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n */\n // TODO: Ham need to add default behavior\n // `x2` cannot have type as it should have the same type as `x`\n x2?: Position2Def;\n\n /**\n * Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n *\n * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n */\n // TODO: Ham need to add default behavior\n // `y2` cannot have type as it should have the same type as `y`\n y2?: Position2Def;\n\n /**\n * Longitude position of geographically projected marks.\n */\n longitude?: LatLongDef;\n\n /**\n * Latitude position of geographically projected marks.\n */\n latitude?: LatLongDef;\n\n /**\n * Longitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n */\n // `longitude2` cannot have type as it should have the same type as `longitude`\n longitude2?: Position2Def;\n\n /**\n * Latitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n */\n // `latitude2` cannot have type as it should have the same type as `latitude`\n latitude2?: Position2Def;\n\n /**\n * - For arc marks, the arc length in radians if theta2 is not specified, otherwise the start arc angle. (A value of 0 indicates up or “north”, increasing values proceed clockwise.)\n *\n * - For text marks, polar coordinate angle in radians.\n */\n theta?: PolarDef;\n\n /**\n * The end angle of arc marks in radians. A value of 0 indicates up or “north”, increasing values proceed clockwise.\n */\n theta2?: Position2Def;\n\n /**\n * The outer radius in pixels of arc marks.\n */\n\n radius?: PolarDef;\n\n /**\n * The inner radius in pixels of arc marks.\n */\n radius2?: Position2Def;\n\n /**\n * Color of the marks – either fill or stroke color based on the `filled` property of mark definition.\n * By default, `color` represents fill color for `\"area\"`, `\"bar\"`, `\"tick\"`,\n * `\"text\"`, `\"trail\"`, `\"circle\"`, and `\"square\"` / stroke color for `\"line\"` and `\"point\"`.\n *\n * __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n *\n * _Note:_\n * 1) For fine-grained control over both fill and stroke colors of the marks, please use the `fill` and `stroke` channels. The `fill` or `stroke` encodings have higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified.\n * 2) See the scale documentation for more information about customizing [color scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme).\n */\n color?: ColorDef;\n\n /**\n * Fill color of the marks.\n * __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n *\n * _Note:_ The `fill` encoding has higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified.\n */\n fill?: ColorDef;\n\n /**\n * Stroke color of the marks.\n * __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n *\n * _Note:_ The `stroke` encoding has higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified.\n */\n\n stroke?: ColorDef;\n\n /**\n * Opacity of the marks.\n *\n * __Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `opacity` property.\n */\n opacity?: NumericMarkPropDef;\n\n /**\n * Fill opacity of the marks.\n *\n * __Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `fillOpacity` property.\n */\n fillOpacity?: NumericMarkPropDef;\n\n /**\n * Stroke opacity of the marks.\n *\n * __Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `strokeOpacity` property.\n */\n strokeOpacity?: NumericMarkPropDef;\n\n /**\n * Stroke width of the marks.\n *\n * __Default value:__ If undefined, the default stroke width depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `strokeWidth` property.\n */\n strokeWidth?: NumericMarkPropDef;\n\n /**\n * Stroke dash of the marks.\n *\n * __Default value:__ `[1,0]` (No dash).\n */\n strokeDash?: NumericArrayMarkPropDef;\n\n /**\n * Size of the mark.\n * - For `\"point\"`, `\"square\"` and `\"circle\"`, – the symbol size, or pixel area of the mark.\n * - For `\"bar\"` and `\"tick\"` – the bar and tick's size.\n * - For `\"text\"` – the text's font size.\n * - Size is unsupported for `\"line\"`, `\"area\"`, and `\"rect\"`. (Use `\"trail\"` instead of line with varying size)\n */\n size?: NumericMarkPropDef;\n\n /**\n * Rotation angle of point and text marks.\n */\n angle?: NumericMarkPropDef;\n\n /**\n * Shape of the mark.\n *\n * 1. For `point` marks the supported values include:\n * - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n * - the line symbol `\"stroke\"`\n * - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n * - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n *\n * 2. For `geoshape` marks it should be a field definition of the geojson data\n *\n * __Default value:__ If undefined, the default shape depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#point-config)'s `shape` property. (`\"circle\"` if unset.)\n */\n shape?: ShapeDef;\n /**\n * Additional levels of detail for grouping data in aggregate views and\n * in line, trail, and area marks without mapping data to a specific visual channel.\n */\n detail?: FieldDefWithoutScale | FieldDefWithoutScale[];\n\n /**\n * A data field to use as a unique key for data binding. When a visualization’s data is updated, the key value will be used to match data elements to existing mark instances. Use a key channel to enable object constancy for transitions over dynamic data.\n */\n key?: FieldDefWithoutScale;\n\n /**\n * Text of the `text` mark.\n */\n text?: TextDef;\n\n /**\n * The tooltip text to show upon mouse hover. Specifying `tooltip` encoding overrides [the `tooltip` property in the mark definition](https://vega.github.io/vega-lite/docs/mark.html#mark-def).\n *\n * See the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite.\n */\n tooltip?: StringFieldDefWithCondition | StringValueDefWithCondition | StringFieldDef[] | null;\n\n /**\n * A URL to load upon mouse click.\n */\n href?: StringFieldDefWithCondition | StringValueDefWithCondition;\n\n /**\n * The URL of an image mark.\n */\n url?: StringFieldDefWithCondition | StringValueDefWithCondition;\n\n /**\n * A text description of this mark for ARIA accessibility (SVG output only). For SVG output the `\"aria-label\"` attribute will be set to this description.\n */\n description?: StringFieldDefWithCondition | StringValueDefWithCondition;\n\n /**\n * Order of the marks.\n * - For stacked marks, this `order` channel encodes [stack order](https://vega.github.io/vega-lite/docs/stack.html#order).\n * - For line and trail marks, this `order` channel encodes order of data points in the lines. This can be useful for creating [a connected scatterplot](https://vega.github.io/vega-lite/examples/connected_scatterplot.html). Setting `order` to `{\"value\": null}` makes the line marks use the original order in the data sources.\n * - Otherwise, this `order` channel encodes layer order of the marks.\n *\n * __Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating additional aggregation grouping.\n */\n order?: OrderFieldDef | OrderFieldDef[] | OrderValueDef;\n}\n\nexport interface EncodingWithFacet extends Encoding, EncodingFacetMapping {}\n\nexport function channelHasField(\n encoding: EncodingWithFacet,\n channel: keyof EncodingWithFacet\n): boolean {\n const channelDef = encoding && encoding[channel];\n if (channelDef) {\n if (isArray(channelDef)) {\n return some(channelDef, fieldDef => !!fieldDef.field);\n } else {\n return isFieldDef(channelDef) || hasConditionalFieldDef(channelDef);\n }\n }\n return false;\n}\n\nexport function isAggregate(encoding: EncodingWithFacet) {\n return some(CHANNELS, channel => {\n if (channelHasField(encoding, channel)) {\n const channelDef = encoding[channel];\n if (isArray(channelDef)) {\n return some(channelDef, fieldDef => !!fieldDef.aggregate);\n } else {\n const fieldDef = getFieldDef(channelDef);\n return fieldDef && !!fieldDef.aggregate;\n }\n }\n return false;\n });\n}\n\nexport function extractTransformsFromEncoding(oldEncoding: Encoding, config: Config) {\n const groupby: string[] = [];\n const bins: BinTransform[] = [];\n const timeUnits: TimeUnitTransform[] = [];\n const aggregate: AggregatedFieldDef[] = [];\n const encoding: Encoding = {};\n\n forEach(oldEncoding, (channelDef, channel) => {\n // Extract potential embedded transformations along with remaining properties\n if (isFieldDef(channelDef)) {\n const {field, aggregate: aggOp, bin, timeUnit, ...remaining} = channelDef;\n if (aggOp || timeUnit || bin) {\n const guide = getGuide(channelDef);\n const isTitleDefined = guide && guide.title;\n let newField = vgField(channelDef, {forAs: true});\n const newFieldDef: FieldDef = {\n // Only add title if it doesn't exist\n ...(isTitleDefined ? [] : {title: title(channelDef, config, {allowDisabling: true})}),\n ...remaining,\n // Always overwrite field\n field: newField\n };\n\n if (aggOp) {\n let op: AggregateOp;\n\n if (isArgmaxDef(aggOp)) {\n op = 'argmax';\n newField = vgField({op: 'argmax', field: aggOp.argmax}, {forAs: true});\n newFieldDef.field = `${newField}.${field}`;\n } else if (isArgminDef(aggOp)) {\n op = 'argmin';\n newField = vgField({op: 'argmin', field: aggOp.argmin}, {forAs: true});\n newFieldDef.field = `${newField}.${field}`;\n } else if (aggOp !== 'boxplot' && aggOp !== 'errorbar' && aggOp !== 'errorband') {\n op = aggOp;\n }\n\n if (op) {\n const aggregateEntry: AggregatedFieldDef = {\n op,\n as: newField\n };\n if (field) {\n aggregateEntry.field = field;\n }\n aggregate.push(aggregateEntry);\n }\n } else {\n groupby.push(newField);\n if (isTypedFieldDef(channelDef) && isBinning(bin)) {\n bins.push({bin, field, as: newField});\n // Add additional groupbys for range and end of bins\n groupby.push(vgField(channelDef, {binSuffix: 'end'}));\n if (binRequiresRange(channelDef, channel)) {\n groupby.push(vgField(channelDef, {binSuffix: 'range'}));\n }\n // Create accompanying 'x2' or 'y2' field if channel is 'x' or 'y' respectively\n if (isXorY(channel)) {\n const secondaryChannel: SecondaryFieldDef = {\n field: `${newField}_end`\n };\n encoding[`${channel}2`] = secondaryChannel;\n }\n newFieldDef.bin = 'binned';\n if (!isSecondaryRangeChannel(channel)) {\n newFieldDef['type'] = QUANTITATIVE;\n }\n } else if (timeUnit) {\n timeUnits.push({\n timeUnit,\n field,\n as: newField\n });\n\n // define the format type for later compilation\n const formatType = isTypedFieldDef(channelDef) && channelDef.type !== TEMPORAL && 'time';\n if (formatType) {\n if (channel === TEXT || channel === TOOLTIP) {\n newFieldDef['formatType'] = formatType;\n } else if (isNonPositionScaleChannel(channel)) {\n newFieldDef['legend'] = {\n formatType,\n ...newFieldDef['legend']\n };\n } else if (isXorY(channel)) {\n newFieldDef['axis'] = {\n formatType,\n ...newFieldDef['axis']\n };\n }\n }\n }\n }\n\n // now the field should refer to post-transformed field instead\n encoding[channel as any] = newFieldDef;\n } else {\n groupby.push(field);\n encoding[channel as any] = oldEncoding[channel];\n }\n } else {\n // For value def / signal ref / datum def, just copy\n encoding[channel as any] = oldEncoding[channel];\n }\n });\n\n return {\n bins,\n timeUnits,\n aggregate,\n groupby,\n encoding\n };\n}\n\nexport function markChannelCompatible(encoding: Encoding, channel: Channel, mark: Mark) {\n const markSupported = supportMark(channel, mark);\n if (!markSupported) {\n return false;\n } else if (markSupported === 'binned') {\n const primaryFieldDef = encoding[channel === X2 ? X : Y];\n\n // circle, point, square and tick only support x2/y2 when their corresponding x/y fieldDef\n // has \"binned\" data and thus need x2/y2 to specify the bin-end field.\n if (isFieldDef(primaryFieldDef) && isFieldDef(encoding[channel]) && isBinned(primaryFieldDef.bin)) {\n return true;\n } else {\n return false;\n }\n }\n return true;\n}\n\nexport function initEncoding(\n encoding: Encoding,\n mark: Mark,\n filled: boolean,\n config: Config\n): Encoding {\n return keys(encoding).reduce((normalizedEncoding: Encoding, channel: Channel) => {\n if (!isChannel(channel)) {\n // Drop invalid channel\n log.warn(log.message.invalidEncodingChannel(channel));\n return normalizedEncoding;\n }\n\n const channelDef = encoding[channel];\n if (channel === 'angle' && mark === 'arc' && !encoding.theta) {\n log.warn(log.message.REPLACE_ANGLE_WITH_THETA);\n channel = THETA;\n }\n\n if (!markChannelCompatible(encoding, channel, mark)) {\n // Drop unsupported channel\n log.warn(log.message.incompatibleChannel(channel, mark));\n return normalizedEncoding;\n }\n\n // Drop line's size if the field is aggregated.\n if (channel === SIZE && mark === 'line') {\n const fieldDef = getFieldDef(encoding[channel]);\n if (fieldDef?.aggregate) {\n log.warn(log.message.LINE_WITH_VARYING_SIZE);\n return normalizedEncoding;\n }\n }\n // Drop color if either fill or stroke is specified\n\n if (channel === COLOR && (filled ? 'fill' in encoding : 'stroke' in encoding)) {\n log.warn(log.message.droppingColor('encoding', {fill: 'fill' in encoding, stroke: 'stroke' in encoding}));\n return normalizedEncoding;\n }\n\n if (\n channel === DETAIL ||\n (channel === ORDER && !isArray(channelDef) && !isValueDef(channelDef)) ||\n (channel === TOOLTIP && isArray(channelDef))\n ) {\n if (channelDef) {\n // Array of fieldDefs for detail channel (or production rule)\n (normalizedEncoding[channel] as any) = array(channelDef).reduce(\n (defs: FieldDef[], fieldDef: FieldDef) => {\n if (!isFieldDef(fieldDef)) {\n log.warn(log.message.emptyFieldDef(fieldDef, channel));\n } else {\n defs.push(initFieldDef(fieldDef, channel));\n }\n return defs;\n },\n []\n );\n }\n } else {\n if (channel === TOOLTIP && channelDef === null) {\n // Preserve null so we can use it to disable tooltip\n normalizedEncoding[channel] = null;\n } else if (\n !isFieldDef(channelDef) &&\n !isDatumDef(channelDef) &&\n !isValueDef(channelDef) &&\n !isConditionalDef(channelDef) &&\n !isSignalRef(channelDef)\n ) {\n log.warn(log.message.emptyFieldDef(channelDef, channel));\n return normalizedEncoding;\n }\n\n normalizedEncoding[channel as any] = initChannelDef(channelDef as ChannelDef, channel, config);\n }\n return normalizedEncoding;\n }, {});\n}\n\n/**\n * For composite marks, we have to call initChannelDef during init so we can infer types earlier.\n */\nexport function normalizeEncoding(encoding: Encoding, config: Config): Encoding {\n const normalizedEncoding: Encoding = {};\n\n for (const channel of keys(encoding)) {\n const newChannelDef = initChannelDef(encoding[channel], channel, config, {compositeMark: true});\n normalizedEncoding[channel as any] = newChannelDef;\n }\n\n return normalizedEncoding;\n}\n\nexport function fieldDefs(encoding: EncodingWithFacet): FieldDef[] {\n const arr: FieldDef[] = [];\n for (const channel of keys(encoding)) {\n if (channelHasField(encoding, channel)) {\n const channelDef = encoding[channel];\n const channelDefArray = array(channelDef);\n for (const def of channelDefArray) {\n if (isFieldDef(def)) {\n arr.push(def);\n } else if (hasConditionalFieldDef(def)) {\n arr.push(def.condition);\n }\n }\n }\n }\n return arr;\n}\n\nexport function forEach>(\n mapping: U,\n f: (cd: ChannelDef, c: keyof U) => void,\n thisArg?: any\n) {\n if (!mapping) {\n return;\n }\n\n for (const channel of keys(mapping)) {\n const el = mapping[channel];\n if (isArray(el)) {\n for (const channelDef of el as unknown[]) {\n f.call(thisArg, channelDef, channel);\n }\n } else {\n f.call(thisArg, el, channel);\n }\n }\n}\n\nexport function reduce>(\n mapping: U,\n f: (acc: any, fd: TypedFieldDef, c: keyof U) => U,\n init: T,\n thisArg?: any\n) {\n if (!mapping) {\n return init;\n }\n\n return keys(mapping).reduce((r, channel) => {\n const map = mapping[channel];\n if (isArray(map)) {\n return map.reduce((r1: T, channelDef: ChannelDef) => {\n return f.call(thisArg, r1, channelDef, channel);\n }, r);\n } else {\n return f.call(thisArg, r, map, channel);\n }\n }, init);\n}\n\n/**\n * Returns list of path grouping fields for the given encoding\n */\nexport function pathGroupingFields(mark: Mark, encoding: Encoding): string[] {\n return keys(encoding).reduce((details, channel) => {\n switch (channel) {\n // x, y, x2, y2, lat, long, lat1, long2, order, tooltip, href, aria label, cursor should not cause lines to group\n case X:\n case Y:\n case HREF:\n case DESCRIPTION:\n case URL:\n case X2:\n case Y2:\n case THETA:\n case THETA2:\n case RADIUS:\n case RADIUS2:\n // falls through\n\n case LATITUDE:\n case LONGITUDE:\n case LATITUDE2:\n case LONGITUDE2:\n // TODO: case 'cursor':\n\n // text, shape, shouldn't be a part of line/trail/area [falls through]\n case TEXT:\n case SHAPE:\n case ANGLE:\n // falls through\n\n // tooltip fields should not be added to group by [falls through]\n case TOOLTIP:\n return details;\n\n case ORDER:\n // order should not group line / trail\n if (mark === 'line' || mark === 'trail') {\n return details;\n }\n // but order should group area for stacking (falls through)\n\n case DETAIL:\n case KEY: {\n const channelDef = encoding[channel];\n if (isArray(channelDef) || isFieldDef(channelDef)) {\n for (const fieldDef of array(channelDef)) {\n if (!fieldDef.aggregate) {\n details.push(vgField(fieldDef, {}));\n }\n }\n }\n return details;\n }\n\n case SIZE:\n if (mark === 'trail') {\n // For trail, size should not group trail lines.\n return details;\n }\n // For line, size should group lines.\n\n // falls through\n case COLOR:\n case FILL:\n case STROKE:\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n case STROKEDASH:\n case STROKEWIDTH: {\n // TODO strokeDashOffset:\n // falls through\n\n const fieldDef = getFieldDef(encoding[channel]);\n if (fieldDef && !fieldDef.aggregate) {\n details.push(vgField(fieldDef, {}));\n }\n return details;\n }\n }\n }, []);\n}\n","import {Orientation, SignalRef, Text} from 'vega';\nimport {isArray, isBoolean, isString} from 'vega-util';\nimport {CompositeMark, CompositeMarkDef} from '.';\nimport {\n Field,\n FieldDefBase,\n isContinuousFieldOrDatumDef,\n isFieldDef,\n isFieldOrDatumDefForTimeFormat,\n PositionFieldDef,\n SecondaryFieldDef,\n StringFieldDef,\n StringFieldDefWithCondition,\n StringValueDefWithCondition\n} from '../channeldef';\nimport {Encoding, fieldDefs} from '../encoding';\nimport {ExprRef} from '../expr';\nimport * as log from '../log';\nimport {ColorMixins, GenericMarkDef, isMarkDef, Mark, MarkConfig, MarkDef} from '../mark';\nimport {GenericUnitSpec, NormalizedUnitSpec} from '../spec';\nimport {getFirstDefined, hash, unique} from '../util';\nimport {isSignalRef} from '../vega.schema';\nimport {toStringFieldDef} from './../channeldef';\n\nexport type PartsMixins

= Partial>>;\n\nexport type GenericCompositeMarkDef = GenericMarkDef &\n ColorMixins & {\n /**\n * The opacity (value between [0,1]) of the mark.\n *\n * @minimum 0\n * @maximum 1\n */\n opacity?: number;\n\n /**\n * Whether a composite mark be clipped to the enclosing group’s width and height.\n */\n clip?: boolean;\n };\n\nexport interface CompositeMarkTooltipSummary {\n /**\n * The prefix of the field to be shown in tooltip\n */\n fieldPrefix: string;\n\n /**\n * The title prefix to show, corresponding to the field with field prefix `fieldPrefix`\n */\n titlePrefix: Text | SignalRef;\n}\n\nexport function filterTooltipWithAggregatedField(\n oldEncoding: Encoding\n): {\n customTooltipWithoutAggregatedField?:\n | StringFieldDefWithCondition\n | StringValueDefWithCondition\n | StringFieldDef[];\n filteredEncoding: Encoding;\n} {\n const {tooltip, ...filteredEncoding} = oldEncoding;\n if (!tooltip) {\n return {filteredEncoding};\n }\n\n let customTooltipWithAggregatedField:\n | StringFieldDefWithCondition\n | StringValueDefWithCondition\n | StringFieldDef[];\n let customTooltipWithoutAggregatedField:\n | StringFieldDefWithCondition\n | StringValueDefWithCondition\n | StringFieldDef[];\n\n if (isArray(tooltip)) {\n for (const t of tooltip) {\n if (t.aggregate) {\n if (!customTooltipWithAggregatedField) {\n customTooltipWithAggregatedField = [];\n }\n (customTooltipWithAggregatedField as StringFieldDef[]).push(t);\n } else {\n if (!customTooltipWithoutAggregatedField) {\n customTooltipWithoutAggregatedField = [];\n }\n (customTooltipWithoutAggregatedField as StringFieldDef[]).push(t);\n }\n }\n\n if (customTooltipWithAggregatedField) {\n (filteredEncoding as Encoding).tooltip = customTooltipWithAggregatedField;\n }\n } else {\n if (tooltip['aggregate']) {\n (filteredEncoding as Encoding).tooltip = tooltip;\n } else {\n customTooltipWithoutAggregatedField = tooltip;\n }\n }\n\n if (isArray(customTooltipWithoutAggregatedField) && customTooltipWithoutAggregatedField.length === 1) {\n customTooltipWithoutAggregatedField = customTooltipWithoutAggregatedField[0];\n }\n return {customTooltipWithoutAggregatedField, filteredEncoding};\n}\n\nexport function getCompositeMarkTooltip(\n tooltipSummary: CompositeMarkTooltipSummary[],\n continuousAxisChannelDef: PositionFieldDef,\n encodingWithoutContinuousAxis: Encoding,\n withFieldName = true\n): Encoding {\n if ('tooltip' in encodingWithoutContinuousAxis) {\n return {tooltip: encodingWithoutContinuousAxis.tooltip};\n }\n\n const fiveSummaryTooltip: StringFieldDef[] = tooltipSummary.map(\n ({fieldPrefix, titlePrefix}): StringFieldDef => {\n const mainTitle = withFieldName ? ` of ${getTitle(continuousAxisChannelDef)}` : '';\n return {\n field: fieldPrefix + continuousAxisChannelDef.field,\n type: continuousAxisChannelDef.type,\n title: isSignalRef(titlePrefix) ? {signal: `${titlePrefix}\"${escape(mainTitle)}\"`} : titlePrefix + mainTitle\n };\n }\n );\n\n const tooltipFieldDefs = fieldDefs(encodingWithoutContinuousAxis).map(toStringFieldDef);\n\n return {\n tooltip: [\n ...fiveSummaryTooltip,\n // need to cast because TextFieldDef supports fewer types of bin\n ...unique(tooltipFieldDefs, hash)\n ]\n };\n}\n\nexport function getTitle(continuousAxisChannelDef: PositionFieldDef) {\n const {title, field} = continuousAxisChannelDef;\n return getFirstDefined(title, field);\n}\n\nexport function makeCompositeAggregatePartFactory

>(\n compositeMarkDef: GenericCompositeMarkDef & P,\n continuousAxis: 'x' | 'y',\n continuousAxisChannelDef: PositionFieldDef,\n sharedEncoding: Encoding,\n compositeMarkConfig: P\n) {\n const {scale, axis} = continuousAxisChannelDef;\n\n return ({\n partName,\n mark,\n positionPrefix,\n endPositionPrefix = undefined,\n extraEncoding = {}\n }: {\n partName: keyof P;\n mark: Mark | MarkDef;\n positionPrefix: string;\n endPositionPrefix?: string;\n extraEncoding?: Encoding;\n }) => {\n const title = getTitle(continuousAxisChannelDef);\n\n return partLayerMixins

(compositeMarkDef, partName, compositeMarkConfig, {\n mark, // TODO better remove this method and just have mark as a parameter of the method\n encoding: {\n [continuousAxis]: {\n field: `${positionPrefix}_${continuousAxisChannelDef.field}`,\n type: continuousAxisChannelDef.type,\n ...(title !== undefined ? {title} : {}),\n ...(scale !== undefined ? {scale} : {}),\n ...(axis !== undefined ? {axis} : {})\n },\n ...(isString(endPositionPrefix)\n ? {\n [`${continuousAxis}2`]: {\n field: `${endPositionPrefix}_${continuousAxisChannelDef.field}`\n }\n }\n : {}),\n ...sharedEncoding,\n ...extraEncoding\n }\n });\n };\n}\n\nexport function partLayerMixins

>(\n markDef: GenericCompositeMarkDef & P,\n part: keyof P,\n compositeMarkConfig: P,\n partBaseSpec: NormalizedUnitSpec\n): NormalizedUnitSpec[] {\n const {clip, color, opacity} = markDef;\n\n const mark = markDef.type;\n\n if (markDef[part] || (markDef[part] === undefined && compositeMarkConfig[part])) {\n return [\n {\n ...partBaseSpec,\n mark: {\n ...(compositeMarkConfig[part] as MarkConfig),\n ...(clip ? {clip} : {}),\n ...(color ? {color} : {}),\n ...(opacity ? {opacity} : {}),\n ...(isMarkDef(partBaseSpec.mark) ? partBaseSpec.mark : {type: partBaseSpec.mark}),\n style: `${mark}-${part}`,\n ...(isBoolean(markDef[part]) ? {} : (markDef[part] as MarkConfig))\n }\n }\n ];\n }\n return [];\n}\n\nexport function compositeMarkContinuousAxis(\n spec: GenericUnitSpec, CompositeMark | CompositeMarkDef>,\n orient: Orientation,\n compositeMark: M\n): {\n continuousAxisChannelDef: PositionFieldDef;\n continuousAxisChannelDef2: SecondaryFieldDef;\n continuousAxisChannelDefError: SecondaryFieldDef;\n continuousAxisChannelDefError2: SecondaryFieldDef;\n continuousAxis: 'x' | 'y';\n} {\n const {encoding} = spec;\n const continuousAxis: 'x' | 'y' = orient === 'vertical' ? 'y' : 'x';\n\n const continuousAxisChannelDef = encoding[continuousAxis] as PositionFieldDef; // Safe to cast because if x is not continuous fielddef, the orient would not be horizontal.\n const continuousAxisChannelDef2 = encoding[`${continuousAxis}2`] as SecondaryFieldDef;\n const continuousAxisChannelDefError = encoding[`${continuousAxis}Error`] as SecondaryFieldDef;\n const continuousAxisChannelDefError2 = encoding[`${continuousAxis}Error2`] as SecondaryFieldDef;\n\n return {\n continuousAxisChannelDef: filterAggregateFromChannelDef(continuousAxisChannelDef, compositeMark),\n continuousAxisChannelDef2: filterAggregateFromChannelDef(continuousAxisChannelDef2, compositeMark),\n continuousAxisChannelDefError: filterAggregateFromChannelDef(continuousAxisChannelDefError, compositeMark),\n continuousAxisChannelDefError2: filterAggregateFromChannelDef(continuousAxisChannelDefError2, compositeMark),\n continuousAxis\n };\n}\n\nfunction filterAggregateFromChannelDef>(\n continuousAxisChannelDef: F,\n compositeMark: M\n): F {\n if (continuousAxisChannelDef && continuousAxisChannelDef.aggregate) {\n const {aggregate, ...continuousAxisWithoutAggregate} = continuousAxisChannelDef;\n if (aggregate !== compositeMark) {\n log.warn(log.message.errorBarContinuousAxisHasCustomizedAggregate(aggregate, compositeMark));\n }\n return continuousAxisWithoutAggregate as F;\n } else {\n return continuousAxisChannelDef;\n }\n}\n\nexport function compositeMarkOrient(\n spec: GenericUnitSpec, CompositeMark | CompositeMarkDef>,\n compositeMark: M\n): Orientation {\n const {mark, encoding} = spec;\n const {x, y} = encoding;\n\n if (isMarkDef(mark) && mark.orient) {\n return mark.orient;\n }\n\n if (isContinuousFieldOrDatumDef(x)) {\n // x is continuous\n if (isContinuousFieldOrDatumDef(y)) {\n // both x and y are continuous\n const xAggregate = isFieldDef(x) && x.aggregate;\n const yAggregate = isFieldDef(y) && y.aggregate;\n\n if (!xAggregate && yAggregate === compositeMark) {\n return 'vertical';\n } else if (!yAggregate && xAggregate === compositeMark) {\n return 'horizontal';\n } else if (xAggregate === compositeMark && yAggregate === compositeMark) {\n throw new Error('Both x and y cannot have aggregate');\n } else {\n if (isFieldOrDatumDefForTimeFormat(y) && !isFieldOrDatumDefForTimeFormat(x)) {\n // y is temporal but x is not\n return 'horizontal';\n }\n\n // default orientation for two continuous\n return 'vertical';\n }\n }\n\n return 'horizontal';\n } else if (isContinuousFieldOrDatumDef(y)) {\n // y is continuous but x is not\n return 'vertical';\n } else {\n // Neither x nor y is continuous.\n throw new Error(`Need a valid continuous axis for ${compositeMark}s`);\n }\n}\n","import {Orientation} from 'vega';\nimport {isNumber, isObject} from 'vega-util';\nimport {getMarkPropOrConfig} from '../compile/common';\nimport {Config} from '../config';\nimport {Encoding, extractTransformsFromEncoding, normalizeEncoding} from '../encoding';\nimport * as log from '../log';\nimport {isMarkDef, MarkDef} from '../mark';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec, NormalizedUnitSpec} from '../spec';\nimport {AggregatedFieldDef, CalculateTransform, JoinAggregateTransform, Transform} from '../transform';\nimport {isEmpty, omit} from '../util';\nimport {CompositeMarkNormalizer} from './base';\nimport {\n compositeMarkContinuousAxis,\n compositeMarkOrient,\n filterTooltipWithAggregatedField,\n GenericCompositeMarkDef,\n getCompositeMarkTooltip,\n getTitle,\n makeCompositeAggregatePartFactory,\n partLayerMixins,\n PartsMixins\n} from './common';\n\nexport const BOXPLOT = 'boxplot' as const;\nexport type BoxPlot = typeof BOXPLOT;\n\nexport const BOXPLOT_PARTS = ['box', 'median', 'outliers', 'rule', 'ticks'] as const;\n\ntype BoxPlotPart = typeof BOXPLOT_PARTS[number];\n\nexport type BoxPlotPartsMixins = PartsMixins;\n\nexport interface BoxPlotConfig extends BoxPlotPartsMixins {\n /** Size of the box and median tick of a box plot */\n size?: number;\n\n /**\n * The extent of the whiskers. Available options include:\n * - `\"min-max\"`: min and max are the lower and upper whiskers respectively.\n * - A number representing multiple of the interquartile range. This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range _[Q1 - k * IQR, Q3 + k * IQR]_ where _Q1_ and _Q3_ are the first and third quartiles while _IQR_ is the interquartile range (_Q3-Q1_).\n *\n * __Default value:__ `1.5`.\n */\n extent?: 'min-max' | number;\n}\n\nexport type BoxPlotDef = GenericCompositeMarkDef &\n BoxPlotConfig & {\n /**\n * Type of the mark. For box plots, this should always be `\"boxplot\"`.\n * [boxplot](https://vega.github.io/vega-lite/docs/boxplot.html)\n */\n type: BoxPlot;\n\n /**\n * Orientation of the box plot. This is normally automatically determined based on types of fields on x and y channels. However, an explicit `orient` be specified when the orientation is ambiguous.\n *\n * __Default value:__ `\"vertical\"`.\n */\n orient?: Orientation;\n };\n\nexport interface BoxPlotConfigMixins {\n /**\n * Box Config\n */\n boxplot?: BoxPlotConfig;\n}\n\nexport const boxPlotNormalizer = new CompositeMarkNormalizer(BOXPLOT, normalizeBoxPlot);\n\nexport function getBoxPlotType(extent: number | 'min-max') {\n if (isNumber(extent)) {\n return 'tukey';\n }\n // Ham: If we ever want to, we could add another extent syntax `{kIQR: number}` for the original [Q1-k*IQR, Q3+k*IQR] whisker and call this boxPlotType = `kIQR`. However, I'm not exposing this for now.\n return extent;\n}\n\nexport function normalizeBoxPlot(\n spec: GenericUnitSpec, BoxPlot | BoxPlotDef>,\n {config}: NormalizerParams\n): NormalizedLayerSpec {\n // Need to initEncoding first so we can infer type\n spec = {\n ...spec,\n encoding: normalizeEncoding(spec.encoding, config)\n };\n const {mark, encoding: _encoding, params, projection: _p, ...outerSpec} = spec;\n const markDef: BoxPlotDef = isMarkDef(mark) ? mark : {type: mark};\n\n // TODO(https://github.com/vega/vega-lite/issues/3702): add selection support\n if (params) {\n log.warn(log.message.selectionNotSupported('boxplot'));\n }\n\n const extent = markDef.extent ?? config.boxplot.extent;\n const sizeValue = getMarkPropOrConfig(\n 'size',\n markDef as any, // TODO: https://github.com/vega/vega-lite/issues/6245\n config\n );\n\n const boxPlotType = getBoxPlotType(extent);\n const {\n bins,\n timeUnits,\n transform,\n continuousAxisChannelDef,\n continuousAxis,\n groupby,\n aggregate,\n encodingWithoutContinuousAxis,\n ticksOrient,\n boxOrient,\n customTooltipWithoutAggregatedField\n } = boxParams(spec, extent, config);\n\n const {color, size, ...encodingWithoutSizeColorAndContinuousAxis} = encodingWithoutContinuousAxis;\n\n const makeBoxPlotPart = (sharedEncoding: Encoding) => {\n return makeCompositeAggregatePartFactory(\n markDef,\n continuousAxis,\n continuousAxisChannelDef,\n sharedEncoding,\n config.boxplot\n );\n };\n\n const makeBoxPlotExtent = makeBoxPlotPart(encodingWithoutSizeColorAndContinuousAxis);\n const makeBoxPlotBox = makeBoxPlotPart(encodingWithoutContinuousAxis);\n const makeBoxPlotMidTick = makeBoxPlotPart({...encodingWithoutSizeColorAndContinuousAxis, ...(size ? {size} : {})});\n\n const fiveSummaryTooltipEncoding: Encoding = getCompositeMarkTooltip(\n [\n {fieldPrefix: boxPlotType === 'min-max' ? 'upper_whisker_' : 'max_', titlePrefix: 'Max'},\n {fieldPrefix: 'upper_box_', titlePrefix: 'Q3'},\n {fieldPrefix: 'mid_box_', titlePrefix: 'Median'},\n {fieldPrefix: 'lower_box_', titlePrefix: 'Q1'},\n {fieldPrefix: boxPlotType === 'min-max' ? 'lower_whisker_' : 'min_', titlePrefix: 'Min'}\n ],\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis\n );\n\n // ## Whisker Layers\n\n const endTick: MarkDef = {type: 'tick', color: 'black', opacity: 1, orient: ticksOrient, invalid: null, aria: false};\n const whiskerTooltipEncoding: Encoding =\n boxPlotType === 'min-max'\n ? fiveSummaryTooltipEncoding // for min-max, show five-summary tooltip for whisker\n : // for tukey / k-IQR, just show upper/lower-whisker\n getCompositeMarkTooltip(\n [\n {fieldPrefix: 'upper_whisker_', titlePrefix: 'Upper Whisker'},\n {fieldPrefix: 'lower_whisker_', titlePrefix: 'Lower Whisker'}\n ],\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis\n );\n\n const whiskerLayers = [\n ...makeBoxPlotExtent({\n partName: 'rule',\n mark: {type: 'rule', invalid: null, aria: false},\n positionPrefix: 'lower_whisker',\n endPositionPrefix: 'lower_box',\n extraEncoding: whiskerTooltipEncoding\n }),\n ...makeBoxPlotExtent({\n partName: 'rule',\n mark: {type: 'rule', invalid: null, aria: false},\n positionPrefix: 'upper_box',\n endPositionPrefix: 'upper_whisker',\n extraEncoding: whiskerTooltipEncoding\n }),\n ...makeBoxPlotExtent({\n partName: 'ticks',\n mark: endTick,\n positionPrefix: 'lower_whisker',\n extraEncoding: whiskerTooltipEncoding\n }),\n ...makeBoxPlotExtent({\n partName: 'ticks',\n mark: endTick,\n positionPrefix: 'upper_whisker',\n extraEncoding: whiskerTooltipEncoding\n })\n ];\n\n // ## Box Layers\n\n // TODO: support hiding certain mark parts\n const boxLayers: NormalizedUnitSpec[] = [\n ...(boxPlotType !== 'tukey' ? whiskerLayers : []),\n ...makeBoxPlotBox({\n partName: 'box',\n mark: {\n type: 'bar',\n ...(sizeValue ? {size: sizeValue} : {}),\n orient: boxOrient,\n invalid: null,\n ariaRoleDescription: 'box'\n },\n positionPrefix: 'lower_box',\n endPositionPrefix: 'upper_box',\n extraEncoding: fiveSummaryTooltipEncoding\n }),\n ...makeBoxPlotMidTick({\n partName: 'median',\n mark: {\n type: 'tick',\n invalid: null,\n ...(isObject(config.boxplot.median) && config.boxplot.median.color ? {color: config.boxplot.median.color} : {}),\n ...(sizeValue ? {size: sizeValue} : {}),\n orient: ticksOrient,\n aria: false\n },\n positionPrefix: 'mid_box',\n extraEncoding: fiveSummaryTooltipEncoding\n })\n ];\n\n if (boxPlotType === 'min-max') {\n return {\n ...outerSpec,\n transform: (outerSpec.transform ?? []).concat(transform),\n layer: boxLayers\n };\n }\n\n // Tukey Box Plot\n\n const lowerBoxExpr = `datum[\"lower_box_${continuousAxisChannelDef.field}\"]`;\n const upperBoxExpr = `datum[\"upper_box_${continuousAxisChannelDef.field}\"]`;\n const iqrExpr = `(${upperBoxExpr} - ${lowerBoxExpr})`;\n const lowerWhiskerExpr = `${lowerBoxExpr} - ${extent} * ${iqrExpr}`;\n const upperWhiskerExpr = `${upperBoxExpr} + ${extent} * ${iqrExpr}`;\n const fieldExpr = `datum[\"${continuousAxisChannelDef.field}\"]`;\n\n const joinaggregateTransform: JoinAggregateTransform = {\n joinaggregate: boxParamsQuartiles(continuousAxisChannelDef.field),\n groupby\n };\n\n const filteredWhiskerSpec: NormalizedLayerSpec = {\n transform: [\n {\n filter: `(${lowerWhiskerExpr} <= ${fieldExpr}) && (${fieldExpr} <= ${upperWhiskerExpr})`\n },\n {\n aggregate: [\n {\n op: 'min',\n field: continuousAxisChannelDef.field,\n as: `lower_whisker_${continuousAxisChannelDef.field}`\n },\n {\n op: 'max',\n field: continuousAxisChannelDef.field,\n as: `upper_whisker_${continuousAxisChannelDef.field}`\n },\n // preserve lower_box / upper_box\n {\n op: 'min',\n field: `lower_box_${continuousAxisChannelDef.field}`,\n as: `lower_box_${continuousAxisChannelDef.field}`\n },\n {\n op: 'max',\n field: `upper_box_${continuousAxisChannelDef.field}`,\n as: `upper_box_${continuousAxisChannelDef.field}`\n },\n ...aggregate\n ],\n groupby\n }\n ],\n layer: whiskerLayers\n };\n\n const {tooltip, ...encodingWithoutSizeColorContinuousAxisAndTooltip} = encodingWithoutSizeColorAndContinuousAxis;\n\n const {scale, axis} = continuousAxisChannelDef;\n const title = getTitle(continuousAxisChannelDef);\n const axisWithoutTitle = omit(axis, ['title']);\n\n const outlierLayersMixins = partLayerMixins(markDef, 'outliers', config.boxplot, {\n transform: [{filter: `(${fieldExpr} < ${lowerWhiskerExpr}) || (${fieldExpr} > ${upperWhiskerExpr})`}],\n mark: 'point',\n encoding: {\n [continuousAxis]: {\n field: continuousAxisChannelDef.field,\n type: continuousAxisChannelDef.type,\n ...(title !== undefined ? {title} : {}),\n ...(scale !== undefined ? {scale} : {}),\n // add axis without title since we already added the title above\n ...(isEmpty(axisWithoutTitle) ? {} : {axis: axisWithoutTitle})\n },\n ...encodingWithoutSizeColorContinuousAxisAndTooltip,\n ...(color ? {color} : {}),\n ...(customTooltipWithoutAggregatedField ? {tooltip: customTooltipWithoutAggregatedField} : {})\n }\n })[0];\n\n let filteredLayersMixins: NormalizedLayerSpec;\n const filteredLayersMixinsTransforms = [...bins, ...timeUnits, joinaggregateTransform];\n if (outlierLayersMixins) {\n filteredLayersMixins = {\n transform: filteredLayersMixinsTransforms,\n layer: [outlierLayersMixins, filteredWhiskerSpec]\n };\n } else {\n filteredLayersMixins = filteredWhiskerSpec;\n filteredLayersMixins.transform.unshift(...filteredLayersMixinsTransforms);\n }\n\n return {\n ...outerSpec,\n layer: [\n filteredLayersMixins,\n {\n // boxplot\n transform,\n layer: boxLayers\n }\n ]\n };\n}\n\nfunction boxParamsQuartiles(continousAxisField: string): AggregatedFieldDef[] {\n return [\n {\n op: 'q1',\n field: continousAxisField,\n as: `lower_box_${continousAxisField}`\n },\n {\n op: 'q3',\n field: continousAxisField,\n as: `upper_box_${continousAxisField}`\n }\n ];\n}\n\nfunction boxParams(\n spec: GenericUnitSpec, BoxPlot | BoxPlotDef>,\n extent: 'min-max' | number,\n config: Config\n) {\n const orient = compositeMarkOrient(spec, BOXPLOT);\n const {continuousAxisChannelDef, continuousAxis} = compositeMarkContinuousAxis(spec, orient, BOXPLOT);\n const continuousFieldName: string = continuousAxisChannelDef.field;\n\n const boxPlotType = getBoxPlotType(extent);\n\n const boxplotSpecificAggregate: AggregatedFieldDef[] = [\n ...boxParamsQuartiles(continuousFieldName),\n {\n op: 'median',\n field: continuousFieldName,\n as: `mid_box_${continuousFieldName}`\n },\n {\n op: 'min',\n field: continuousFieldName,\n as: (boxPlotType === 'min-max' ? 'lower_whisker_' : 'min_') + continuousFieldName\n },\n {\n op: 'max',\n field: continuousFieldName,\n as: (boxPlotType === 'min-max' ? 'upper_whisker_' : 'max_') + continuousFieldName\n }\n ];\n\n const postAggregateCalculates: CalculateTransform[] =\n boxPlotType === 'min-max' || boxPlotType === 'tukey'\n ? []\n : [\n // This is for the original k-IQR, which we do not expose\n {\n calculate: `datum[\"upper_box_${continuousFieldName}\"] - datum[\"lower_box_${continuousFieldName}\"]`,\n as: `iqr_${continuousFieldName}`\n },\n {\n calculate: `min(datum[\"upper_box_${continuousFieldName}\"] + datum[\"iqr_${continuousFieldName}\"] * ${extent}, datum[\"max_${continuousFieldName}\"])`,\n as: `upper_whisker_${continuousFieldName}`\n },\n {\n calculate: `max(datum[\"lower_box_${continuousFieldName}\"] - datum[\"iqr_${continuousFieldName}\"] * ${extent}, datum[\"min_${continuousFieldName}\"])`,\n as: `lower_whisker_${continuousFieldName}`\n }\n ];\n\n const {[continuousAxis]: oldContinuousAxisChannelDef, ...oldEncodingWithoutContinuousAxis} = spec.encoding;\n const {customTooltipWithoutAggregatedField, filteredEncoding} = filterTooltipWithAggregatedField(\n oldEncodingWithoutContinuousAxis\n );\n\n const {bins, timeUnits, aggregate, groupby, encoding: encodingWithoutContinuousAxis} = extractTransformsFromEncoding(\n filteredEncoding,\n config\n );\n\n const ticksOrient: Orientation = orient === 'vertical' ? 'horizontal' : 'vertical';\n const boxOrient: Orientation = orient;\n\n const transform: Transform[] = [\n ...bins,\n ...timeUnits,\n {\n aggregate: [...aggregate, ...boxplotSpecificAggregate],\n groupby\n },\n ...postAggregateCalculates\n ];\n\n return {\n bins,\n timeUnits,\n transform,\n groupby,\n aggregate,\n continuousAxisChannelDef,\n continuousAxis,\n encodingWithoutContinuousAxis,\n ticksOrient,\n boxOrient,\n customTooltipWithoutAggregatedField\n };\n}\n","import {AggregateOp, Orientation, SignalRef, Text} from 'vega';\nimport {PositionChannel} from '../channel';\nimport {\n Field,\n isContinuousFieldOrDatumDef,\n isFieldOrDatumDef,\n PositionFieldDef,\n SecondaryFieldDef,\n title,\n ValueDef\n} from '../channeldef';\nimport {Config} from '../config';\nimport {Data} from '../data';\nimport {Encoding, extractTransformsFromEncoding, normalizeEncoding} from '../encoding';\nimport {ExprRef} from '../expr';\nimport * as log from '../log';\nimport {isMarkDef, MarkDef} from '../mark';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec} from '../spec';\nimport {Step} from '../spec/base';\nimport {NormalizedUnitSpec} from '../spec/unit';\nimport {TitleParams} from '../title';\nimport {AggregatedFieldDef, CalculateTransform, Transform} from '../transform';\nimport {replaceAll, titleCase} from '../util';\nimport {CompositeMarkNormalizer} from './base';\nimport {\n compositeMarkContinuousAxis,\n compositeMarkOrient,\n CompositeMarkTooltipSummary,\n GenericCompositeMarkDef,\n getCompositeMarkTooltip,\n makeCompositeAggregatePartFactory,\n PartsMixins\n} from './common';\nimport {ErrorBand, ErrorBandDef} from './errorband';\n\nexport const ERRORBAR = 'errorbar' as const;\nexport type ErrorBar = typeof ERRORBAR;\n\nexport type ErrorBarExtent = 'ci' | 'iqr' | 'stderr' | 'stdev';\nexport type ErrorBarCenter = 'mean' | 'median';\n\nexport type ErrorInputType = 'raw' | 'aggregated-upper-lower' | 'aggregated-error';\n\nexport const ERRORBAR_PARTS = ['ticks', 'rule'] as const;\n\nexport type ErrorBarPart = typeof ERRORBAR_PARTS[number];\n\nexport interface ErrorExtraEncoding {\n /**\n * Error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n */\n xError?: SecondaryFieldDef | ValueDef;\n\n /**\n * Secondary error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n */\n // `xError2` cannot have type as it should have the same type as `xError`\n xError2?: SecondaryFieldDef | ValueDef;\n\n /**\n * Error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n */\n yError?: SecondaryFieldDef | ValueDef;\n\n /**\n * Secondary error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n */\n // `yError2` cannot have type as it should have the same type as `yError`\n yError2?: SecondaryFieldDef | ValueDef;\n}\n\nexport type ErrorEncoding = Pick, PositionChannel | 'color' | 'detail' | 'opacity'> &\n ErrorExtraEncoding;\n\nexport type ErrorBarPartsMixins = PartsMixins;\n\nexport interface ErrorBarConfig extends ErrorBarPartsMixins {\n /** Size of the ticks of an error bar */\n size?: number;\n\n /** Thickness of the ticks and the bar of an error bar */\n thickness?: number;\n\n /**\n * The center of the errorbar. Available options include:\n * - `\"mean\"`: the mean of the data points.\n * - `\"median\"`: the median of the data points.\n *\n * __Default value:__ `\"mean\"`.\n * @hidden\n */\n\n // center is not needed right now but will be added back to the schema if future features require it.\n center?: ErrorBarCenter;\n\n /**\n * The extent of the rule. Available options include:\n * - `\"ci\"`: Extend the rule to the confidence interval of the mean.\n * - `\"stderr\"`: The size of rule are set to the value of standard error, extending from the mean.\n * - `\"stdev\"`: The size of rule are set to the value of standard deviation, extending from the mean.\n * - `\"iqr\"`: Extend the rule to the q1 and q3.\n *\n * __Default value:__ `\"stderr\"`.\n */\n extent?: ErrorBarExtent;\n}\n\nexport type ErrorBarDef = GenericCompositeMarkDef &\n ErrorBarConfig & {\n /**\n * Orientation of the error bar. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined.\n */\n orient?: Orientation;\n };\n\nexport interface ErrorBarConfigMixins {\n /**\n * ErrorBar Config\n */\n errorbar?: ErrorBarConfig;\n}\n\nexport const errorBarNormalizer = new CompositeMarkNormalizer(ERRORBAR, normalizeErrorBar);\n\nexport function normalizeErrorBar(\n spec: GenericUnitSpec, ErrorBar | ErrorBarDef>,\n {config}: NormalizerParams\n): NormalizedLayerSpec | NormalizedUnitSpec {\n // Need to initEncoding first so we can infer type\n spec = {\n ...spec,\n encoding: normalizeEncoding(spec.encoding, config)\n };\n\n const {\n transform,\n continuousAxisChannelDef,\n continuousAxis,\n encodingWithoutContinuousAxis,\n ticksOrient,\n markDef,\n outerSpec,\n tooltipEncoding\n } = errorBarParams(spec, ERRORBAR, config);\n delete encodingWithoutContinuousAxis['size'];\n\n const makeErrorBarPart = makeCompositeAggregatePartFactory(\n markDef,\n continuousAxis,\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis,\n config.errorbar\n );\n\n const thickness = markDef.thickness;\n const size = markDef.size;\n const tick: MarkDef = {\n type: 'tick',\n orient: ticksOrient,\n aria: false,\n ...(thickness !== undefined ? {thickness} : {}),\n ...(size !== undefined ? {size} : {})\n };\n\n const layer = [\n ...makeErrorBarPart({\n partName: 'ticks',\n mark: tick,\n positionPrefix: 'lower',\n extraEncoding: tooltipEncoding\n }),\n ...makeErrorBarPart({\n partName: 'ticks',\n mark: tick,\n positionPrefix: 'upper',\n extraEncoding: tooltipEncoding\n }),\n ...makeErrorBarPart({\n partName: 'rule',\n mark: {\n type: 'rule',\n ariaRoleDescription: 'errorbar',\n ...(thickness !== undefined ? {size: thickness} : {})\n },\n positionPrefix: 'lower',\n endPositionPrefix: 'upper',\n extraEncoding: tooltipEncoding\n })\n ];\n\n return {\n ...outerSpec,\n transform,\n ...(layer.length > 1 ? {layer} : {...layer[0]})\n };\n}\n\nfunction errorBarOrientAndInputType(\n spec: GenericUnitSpec, ErrorBar | ErrorBand | ErrorBarDef | ErrorBandDef>,\n compositeMark: ErrorBar | ErrorBand\n): {\n orient: Orientation;\n inputType: ErrorInputType;\n} {\n const {encoding} = spec;\n\n if (errorBarIsInputTypeRaw(encoding)) {\n return {\n orient: compositeMarkOrient(spec, compositeMark),\n inputType: 'raw'\n };\n }\n\n const isTypeAggregatedUpperLower: boolean = errorBarIsInputTypeAggregatedUpperLower(encoding);\n const isTypeAggregatedError: boolean = errorBarIsInputTypeAggregatedError(encoding);\n const x = encoding.x;\n const y = encoding.y;\n\n if (isTypeAggregatedUpperLower) {\n // type is aggregated-upper-lower\n\n if (isTypeAggregatedError) {\n throw new Error(`${compositeMark} cannot be both type aggregated-upper-lower and aggregated-error`);\n }\n\n const x2 = encoding.x2;\n const y2 = encoding.y2;\n\n if (isFieldOrDatumDef(x2) && isFieldOrDatumDef(y2)) {\n // having both x, x2 and y, y2\n throw new Error(`${compositeMark} cannot have both x2 and y2`);\n } else if (isFieldOrDatumDef(x2)) {\n if (isContinuousFieldOrDatumDef(x)) {\n // having x, x2 quantitative and field y, y2 are not specified\n return {orient: 'horizontal', inputType: 'aggregated-upper-lower'};\n } else {\n // having x, x2 that are not both quantitative\n throw new Error(`Both x and x2 have to be quantitative in ${compositeMark}`);\n }\n } else if (isFieldOrDatumDef(y2)) {\n // y2 is a FieldDef\n if (isContinuousFieldOrDatumDef(y)) {\n // having y, y2 quantitative and field x, x2 are not specified\n return {orient: 'vertical', inputType: 'aggregated-upper-lower'};\n } else {\n // having y, y2 that are not both quantitative\n throw new Error(`Both y and y2 have to be quantitative in ${compositeMark}`);\n }\n }\n throw new Error('No ranged axis');\n } else {\n // type is aggregated-error\n\n const xError = encoding.xError;\n const xError2 = encoding.xError2;\n const yError = encoding.yError;\n const yError2 = encoding.yError2;\n\n if (isFieldOrDatumDef(xError2) && !isFieldOrDatumDef(xError)) {\n // having xError2 without xError\n throw new Error(`${compositeMark} cannot have xError2 without xError`);\n }\n\n if (isFieldOrDatumDef(yError2) && !isFieldOrDatumDef(yError)) {\n // having yError2 without yError\n throw new Error(`${compositeMark} cannot have yError2 without yError`);\n }\n\n if (isFieldOrDatumDef(xError) && isFieldOrDatumDef(yError)) {\n // having both xError and yError\n throw new Error(`${compositeMark} cannot have both xError and yError with both are quantiative`);\n } else if (isFieldOrDatumDef(xError)) {\n if (isContinuousFieldOrDatumDef(x)) {\n // having x and xError that are all quantitative\n return {orient: 'horizontal', inputType: 'aggregated-error'};\n } else {\n // having x, xError, and xError2 that are not all quantitative\n throw new Error('All x, xError, and xError2 (if exist) have to be quantitative');\n }\n } else if (isFieldOrDatumDef(yError)) {\n if (isContinuousFieldOrDatumDef(y)) {\n // having y and yError that are all quantitative\n return {orient: 'vertical', inputType: 'aggregated-error'};\n } else {\n // having y, yError, and yError2 that are not all quantitative\n throw new Error('All y, yError, and yError2 (if exist) have to be quantitative');\n }\n }\n throw new Error('No ranged axis');\n }\n}\n\nfunction errorBarIsInputTypeRaw(encoding: ErrorEncoding): boolean {\n return (\n (isFieldOrDatumDef(encoding.x) || isFieldOrDatumDef(encoding.y)) &&\n !isFieldOrDatumDef(encoding.x2) &&\n !isFieldOrDatumDef(encoding.y2) &&\n !isFieldOrDatumDef(encoding.xError) &&\n !isFieldOrDatumDef(encoding.xError2) &&\n !isFieldOrDatumDef(encoding.yError) &&\n !isFieldOrDatumDef(encoding.yError2)\n );\n}\n\nfunction errorBarIsInputTypeAggregatedUpperLower(encoding: ErrorEncoding): boolean {\n return isFieldOrDatumDef(encoding.x2) || isFieldOrDatumDef(encoding.y2);\n}\n\nfunction errorBarIsInputTypeAggregatedError(encoding: ErrorEncoding): boolean {\n return (\n isFieldOrDatumDef(encoding.xError) ||\n isFieldOrDatumDef(encoding.xError2) ||\n isFieldOrDatumDef(encoding.yError) ||\n isFieldOrDatumDef(encoding.yError2)\n );\n}\n\nexport function errorBarParams<\n M extends ErrorBar | ErrorBand,\n MD extends GenericCompositeMarkDef & (ErrorBarDef | ErrorBandDef)\n>(\n spec: GenericUnitSpec, M | MD>,\n compositeMark: M,\n config: Config\n): {\n transform: Transform[];\n groupby: string[];\n continuousAxisChannelDef: PositionFieldDef;\n continuousAxis: 'x' | 'y';\n encodingWithoutContinuousAxis: ErrorEncoding;\n ticksOrient: Orientation;\n markDef: MD;\n outerSpec: {\n data?: Data;\n title?: Text | TitleParams;\n name?: string;\n description?: string;\n transform?: Transform[];\n width?: number | 'container' | Step;\n height?: number | 'container' | Step;\n };\n tooltipEncoding: ErrorEncoding;\n} {\n // TODO: use selection\n const {mark, encoding, params, projection: _p, ...outerSpec} = spec;\n const markDef: MD = isMarkDef(mark) ? mark : ({type: mark} as MD);\n\n // TODO(https://github.com/vega/vega-lite/issues/3702): add selection support\n if (params) {\n log.warn(log.message.selectionNotSupported(compositeMark));\n }\n\n const {orient, inputType} = errorBarOrientAndInputType(spec, compositeMark);\n const {\n continuousAxisChannelDef,\n continuousAxisChannelDef2,\n continuousAxisChannelDefError,\n continuousAxisChannelDefError2,\n continuousAxis\n } = compositeMarkContinuousAxis(spec, orient, compositeMark);\n\n const {\n errorBarSpecificAggregate,\n postAggregateCalculates,\n tooltipSummary,\n tooltipTitleWithFieldName\n } = errorBarAggregationAndCalculation(\n markDef,\n continuousAxisChannelDef,\n continuousAxisChannelDef2,\n continuousAxisChannelDefError,\n continuousAxisChannelDefError2,\n inputType,\n compositeMark,\n config\n );\n\n const {\n [continuousAxis]: oldContinuousAxisChannelDef,\n [continuousAxis === 'x' ? 'x2' : 'y2']: oldContinuousAxisChannelDef2,\n [continuousAxis === 'x' ? 'xError' : 'yError']: oldContinuousAxisChannelDefError,\n [continuousAxis === 'x' ? 'xError2' : 'yError2']: oldContinuousAxisChannelDefError2,\n ...oldEncodingWithoutContinuousAxis\n } = encoding;\n\n const {\n bins,\n timeUnits,\n aggregate: oldAggregate,\n groupby: oldGroupBy,\n encoding: encodingWithoutContinuousAxis\n } = extractTransformsFromEncoding(oldEncodingWithoutContinuousAxis, config);\n\n const aggregate: AggregatedFieldDef[] = [...oldAggregate, ...errorBarSpecificAggregate];\n const groupby: string[] = inputType !== 'raw' ? [] : oldGroupBy;\n\n const tooltipEncoding: ErrorEncoding = getCompositeMarkTooltip(\n tooltipSummary,\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis,\n tooltipTitleWithFieldName\n );\n\n return {\n transform: [\n ...(outerSpec.transform ?? []),\n ...bins,\n ...timeUnits,\n ...(aggregate.length === 0 ? [] : [{aggregate, groupby}]),\n ...postAggregateCalculates\n ],\n groupby,\n continuousAxisChannelDef,\n continuousAxis,\n encodingWithoutContinuousAxis,\n ticksOrient: orient === 'vertical' ? 'horizontal' : 'vertical',\n markDef,\n outerSpec,\n tooltipEncoding\n };\n}\n\nfunction errorBarAggregationAndCalculation<\n M extends ErrorBar | ErrorBand,\n MD extends GenericCompositeMarkDef & (ErrorBarDef | ErrorBandDef)\n>(\n markDef: MD,\n continuousAxisChannelDef: PositionFieldDef,\n continuousAxisChannelDef2: SecondaryFieldDef,\n continuousAxisChannelDefError: SecondaryFieldDef,\n continuousAxisChannelDefError2: SecondaryFieldDef,\n inputType: ErrorInputType,\n compositeMark: M,\n config: Config\n): {\n postAggregateCalculates: CalculateTransform[];\n errorBarSpecificAggregate: AggregatedFieldDef[];\n tooltipSummary: CompositeMarkTooltipSummary[];\n tooltipTitleWithFieldName: boolean;\n} {\n let errorBarSpecificAggregate: AggregatedFieldDef[] = [];\n let postAggregateCalculates: CalculateTransform[] = [];\n const continuousFieldName: string = continuousAxisChannelDef.field;\n\n let tooltipSummary: CompositeMarkTooltipSummary[];\n let tooltipTitleWithFieldName = false;\n\n if (inputType === 'raw') {\n const center: ErrorBarCenter = markDef.center\n ? markDef.center\n : markDef.extent\n ? markDef.extent === 'iqr'\n ? 'median'\n : 'mean'\n : config.errorbar.center;\n const extent: ErrorBarExtent = markDef.extent ? markDef.extent : center === 'mean' ? 'stderr' : 'iqr';\n\n if ((center === 'median') !== (extent === 'iqr')) {\n log.warn(log.message.errorBarCenterIsUsedWithWrongExtent(center, extent, compositeMark));\n }\n\n if (extent === 'stderr' || extent === 'stdev') {\n errorBarSpecificAggregate = [\n {op: extent, field: continuousFieldName, as: `extent_${continuousFieldName}`},\n {op: center, field: continuousFieldName, as: `center_${continuousFieldName}`}\n ];\n\n postAggregateCalculates = [\n {\n calculate: `datum[\"center_${continuousFieldName}\"] + datum[\"extent_${continuousFieldName}\"]`,\n as: `upper_${continuousFieldName}`\n },\n {\n calculate: `datum[\"center_${continuousFieldName}\"] - datum[\"extent_${continuousFieldName}\"]`,\n as: `lower_${continuousFieldName}`\n }\n ];\n\n tooltipSummary = [\n {fieldPrefix: 'center_', titlePrefix: titleCase(center)},\n {fieldPrefix: 'upper_', titlePrefix: getTitlePrefix(center, extent, '+')},\n {fieldPrefix: 'lower_', titlePrefix: getTitlePrefix(center, extent, '-')}\n ];\n tooltipTitleWithFieldName = true;\n } else {\n let centerOp: AggregateOp;\n let lowerExtentOp: AggregateOp;\n let upperExtentOp: AggregateOp;\n if (extent === 'ci') {\n centerOp = 'mean';\n lowerExtentOp = 'ci0';\n upperExtentOp = 'ci1';\n } else {\n centerOp = 'median';\n lowerExtentOp = 'q1';\n upperExtentOp = 'q3';\n }\n\n errorBarSpecificAggregate = [\n {op: lowerExtentOp, field: continuousFieldName, as: `lower_${continuousFieldName}`},\n {op: upperExtentOp, field: continuousFieldName, as: `upper_${continuousFieldName}`},\n {op: centerOp, field: continuousFieldName, as: `center_${continuousFieldName}`}\n ];\n\n tooltipSummary = [\n {\n fieldPrefix: 'upper_',\n titlePrefix: title({field: continuousFieldName, aggregate: upperExtentOp, type: 'quantitative'}, config, {\n allowDisabling: false\n })\n },\n {\n fieldPrefix: 'lower_',\n titlePrefix: title({field: continuousFieldName, aggregate: lowerExtentOp, type: 'quantitative'}, config, {\n allowDisabling: false\n })\n },\n {\n fieldPrefix: 'center_',\n titlePrefix: title({field: continuousFieldName, aggregate: centerOp, type: 'quantitative'}, config, {\n allowDisabling: false\n })\n }\n ];\n }\n } else {\n if (markDef.center || markDef.extent) {\n log.warn(log.message.errorBarCenterAndExtentAreNotNeeded(markDef.center, markDef.extent));\n }\n\n if (inputType === 'aggregated-upper-lower') {\n tooltipSummary = [];\n postAggregateCalculates = [\n {calculate: `datum[\"${continuousAxisChannelDef2.field}\"]`, as: `upper_${continuousFieldName}`},\n {calculate: `datum[\"${continuousFieldName}\"]`, as: `lower_${continuousFieldName}`}\n ];\n } else if (inputType === 'aggregated-error') {\n tooltipSummary = [{fieldPrefix: '', titlePrefix: continuousFieldName}];\n postAggregateCalculates = [\n {\n calculate: `datum[\"${continuousFieldName}\"] + datum[\"${continuousAxisChannelDefError.field}\"]`,\n as: `upper_${continuousFieldName}`\n }\n ];\n\n if (continuousAxisChannelDefError2) {\n postAggregateCalculates.push({\n calculate: `datum[\"${continuousFieldName}\"] + datum[\"${continuousAxisChannelDefError2.field}\"]`,\n as: `lower_${continuousFieldName}`\n });\n } else {\n postAggregateCalculates.push({\n calculate: `datum[\"${continuousFieldName}\"] - datum[\"${continuousAxisChannelDefError.field}\"]`,\n as: `lower_${continuousFieldName}`\n });\n }\n }\n\n for (const postAggregateCalculate of postAggregateCalculates) {\n tooltipSummary.push({\n fieldPrefix: postAggregateCalculate.as.substring(0, 6),\n titlePrefix: replaceAll(replaceAll(postAggregateCalculate.calculate, 'datum[\"', ''), '\"]', '')\n });\n }\n }\n return {postAggregateCalculates, errorBarSpecificAggregate, tooltipSummary, tooltipTitleWithFieldName};\n}\n\nfunction getTitlePrefix(center: ErrorBarCenter, extent: ErrorBarExtent, operation: '+' | '-'): string {\n return `${titleCase(center)} ${operation} ${extent}`;\n}\n","import {Interpolate, Orientation} from 'vega';\nimport {Field} from '../channeldef';\nimport {Encoding, normalizeEncoding} from '../encoding';\nimport * as log from '../log';\nimport {MarkDef} from '../mark';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec} from '../spec';\nimport {CompositeMarkNormalizer} from './base';\nimport {GenericCompositeMarkDef, makeCompositeAggregatePartFactory, PartsMixins} from './common';\nimport {ErrorBarCenter, ErrorBarExtent, errorBarParams, ErrorEncoding} from './errorbar';\n\nexport type ErrorBandUnitSpec<\n EE = undefined // extra encoding parameter (for faceted composite unit spec)\n> = GenericUnitSpec & EE, ErrorBand | ErrorBandDef>;\n\nexport const ERRORBAND = 'errorband' as const;\nexport type ErrorBand = typeof ERRORBAND;\n\nexport const ERRORBAND_PARTS = ['band', 'borders'] as const;\n\ntype ErrorBandPart = typeof ERRORBAND_PARTS[number];\n\nexport type ErrorBandPartsMixins = PartsMixins;\n\nexport interface ErrorBandConfig extends ErrorBandPartsMixins {\n /**\n * The center of the error band. Available options include:\n * - `\"mean\"`: the mean of the data points.\n * - `\"median\"`: the median of the data points.\n *\n * __Default value:__ `\"mean\"`.\n * @hidden\n */\n\n // center is not needed right now but will be added back to the schema if future features require it.\n center?: ErrorBarCenter;\n\n /**\n * The extent of the band. Available options include:\n * - `\"ci\"`: Extend the band to the confidence interval of the mean.\n * - `\"stderr\"`: The size of band are set to the value of standard error, extending from the mean.\n * - `\"stdev\"`: The size of band are set to the value of standard deviation, extending from the mean.\n * - `\"iqr\"`: Extend the band to the q1 and q3.\n *\n * __Default value:__ `\"stderr\"`.\n */\n extent?: ErrorBarExtent;\n\n /**\n * The line interpolation method for the error band. One of the following:\n * - `\"linear\"`: piecewise linear segments, as in a polyline.\n * - `\"linear-closed\"`: close the linear segments to form a polygon.\n * - `\"step\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values.\n * - `\"step-before\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value.\n * - `\"step-after\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value.\n * - `\"basis\"`: a B-spline, with control point duplication on the ends.\n * - `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n * - `\"basis-closed\"`: a closed B-spline, as in a loop.\n * - `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n * - `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n * - `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n * - `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n * - `\"monotone\"`: cubic interpolation that preserves monotonicity in y.\n */\n interpolate?: Interpolate;\n\n /**\n * The tension parameter for the interpolation type of the error band.\n *\n * @minimum 0\n * @maximum 1\n */\n tension?: number;\n}\n\nexport type ErrorBandDef = GenericCompositeMarkDef &\n ErrorBandConfig & {\n /**\n * Orientation of the error band. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined.\n */\n orient?: Orientation;\n };\n\nexport interface ErrorBandConfigMixins {\n /**\n * ErrorBand Config\n */\n errorband?: ErrorBandConfig;\n}\n\nexport const errorBandNormalizer = new CompositeMarkNormalizer(ERRORBAND, normalizeErrorBand);\n\nexport function normalizeErrorBand(\n spec: GenericUnitSpec, ErrorBand | ErrorBandDef>,\n {config}: NormalizerParams\n): NormalizedLayerSpec {\n // Need to initEncoding first so we can infer type\n spec = {\n ...spec,\n encoding: normalizeEncoding(spec.encoding, config)\n };\n\n const {\n transform,\n continuousAxisChannelDef,\n continuousAxis,\n encodingWithoutContinuousAxis,\n markDef,\n outerSpec,\n tooltipEncoding\n } = errorBarParams(spec, ERRORBAND, config);\n const errorBandDef: ErrorBandDef = markDef;\n\n const makeErrorBandPart = makeCompositeAggregatePartFactory(\n errorBandDef,\n continuousAxis,\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis,\n config.errorband\n );\n\n const is2D = spec.encoding.x !== undefined && spec.encoding.y !== undefined;\n\n let bandMark: MarkDef = {type: is2D ? 'area' : 'rect'};\n let bordersMark: MarkDef = {type: is2D ? 'line' : 'rule'};\n const interpolate = {\n ...(errorBandDef.interpolate ? {interpolate: errorBandDef.interpolate} : {}),\n ...(errorBandDef.tension && errorBandDef.interpolate ? {tension: errorBandDef.tension} : {})\n };\n\n if (is2D) {\n bandMark = {\n ...bandMark,\n ...interpolate,\n ariaRoleDescription: 'errorband'\n };\n bordersMark = {\n ...bordersMark,\n ...interpolate,\n aria: false\n };\n } else if (errorBandDef.interpolate) {\n log.warn(log.message.errorBand1DNotSupport('interpolate'));\n } else if (errorBandDef.tension) {\n log.warn(log.message.errorBand1DNotSupport('tension'));\n }\n\n return {\n ...outerSpec,\n transform,\n layer: [\n ...makeErrorBandPart({\n partName: 'band',\n mark: bandMark,\n positionPrefix: 'lower',\n endPositionPrefix: 'upper',\n extraEncoding: tooltipEncoding\n }),\n ...makeErrorBandPart({\n partName: 'borders',\n mark: bordersMark,\n positionPrefix: 'lower',\n\n extraEncoding: tooltipEncoding\n }),\n ...makeErrorBandPart({\n partName: 'borders',\n mark: bordersMark,\n positionPrefix: 'upper',\n extraEncoding: tooltipEncoding\n })\n ]\n };\n}\n","import {Field} from '../channeldef';\nimport {Encoding} from '../encoding';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec} from '../spec';\nimport {EncodingFacetMapping} from '../spec/facet';\nimport {NormalizedUnitSpec} from '../spec/unit';\nimport {keys} from '../util';\nimport {CompositeMarkNormalizer} from './base';\nimport {BOXPLOT, BoxPlot, BoxPlotConfigMixins, BoxPlotDef, BOXPLOT_PARTS, normalizeBoxPlot} from './boxplot';\nimport {\n ERRORBAND,\n ErrorBand,\n ErrorBandConfigMixins,\n ErrorBandDef,\n ERRORBAND_PARTS,\n normalizeErrorBand\n} from './errorband';\nimport {\n ERRORBAR,\n ErrorBar,\n ErrorBarConfigMixins,\n ErrorBarDef,\n ERRORBAR_PARTS,\n ErrorExtraEncoding,\n normalizeErrorBar\n} from './errorbar';\n\nexport {BoxPlotConfig} from './boxplot';\nexport {ErrorBandConfigMixins} from './errorband';\nexport {ErrorBarConfigMixins} from './errorbar';\n\nexport type CompositeMarkNormalizerRun = (\n spec: GenericUnitSpec,\n params: NormalizerParams\n) => NormalizedLayerSpec | NormalizedUnitSpec;\n\n/**\n * Registry index for all composite mark's normalizer\n */\nconst compositeMarkRegistry: {\n [mark: string]: {\n normalizer: CompositeMarkNormalizer;\n parts: readonly string[];\n };\n} = {};\n\nexport function add(mark: string, run: CompositeMarkNormalizerRun, parts: readonly string[]) {\n const normalizer = new CompositeMarkNormalizer(mark, run);\n compositeMarkRegistry[mark] = {normalizer, parts};\n}\n\nexport function remove(mark: string) {\n delete compositeMarkRegistry[mark];\n}\n\nexport type CompositeEncoding = Encoding & ErrorExtraEncoding;\n\nexport type PartialIndex> = {\n [t in keyof T]?: Partial;\n};\n\nexport type SharedCompositeEncoding = PartialIndex<\n Omit, 'detail' | 'order' | 'tooltip'> // need to omit and cherry pick detail / order / tooltip since they allow array\n> &\n Pick, 'detail' | 'order' | 'tooltip'>;\n\nexport type FacetedCompositeEncoding = Encoding & ErrorExtraEncoding & EncodingFacetMapping;\n\nexport type CompositeMark = BoxPlot | ErrorBar | ErrorBand;\n\nexport function getAllCompositeMarks() {\n return keys(compositeMarkRegistry);\n}\n\nexport type CompositeMarkDef = BoxPlotDef | ErrorBarDef | ErrorBandDef;\n\nexport type CompositeAggregate = BoxPlot | ErrorBar | ErrorBand;\n\nexport interface CompositeMarkConfigMixins extends BoxPlotConfigMixins, ErrorBarConfigMixins, ErrorBandConfigMixins {}\n\nadd(BOXPLOT, normalizeBoxPlot, BOXPLOT_PARTS);\nadd(ERRORBAR, normalizeErrorBar, ERRORBAR_PARTS);\nadd(ERRORBAND, normalizeErrorBand, ERRORBAND_PARTS);\n","import {SignalRef, Text} from 'vega';\nimport {ConditionValueDefMixins, FormatMixins, ValueDef} from './channeldef';\nimport {LegendConfig} from './legend';\nimport {VgEncodeChannel} from './vega.schema';\n\nexport interface TitleMixins {\n /**\n * A title for the field. If `null`, the title will be removed.\n *\n * __Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n *\n * __Notes__:\n *\n * 1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n *\n * 2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.\n */\n title?: Text | null | SignalRef;\n}\n\nexport interface Guide extends TitleMixins, FormatMixins {}\n\nexport interface VlOnlyGuideConfig {\n /**\n * Set to null to disable title for the axis, legend, or header.\n */\n title?: null;\n}\n\nexport type GuideEncodingConditionalValueDef = ValueDef & ConditionValueDefMixins;\n\nexport type GuideEncodingEntry = Partial>;\n\nexport const VL_ONLY_LEGEND_CONFIG: (keyof LegendConfig)[] = [\n 'gradientHorizontalMaxLength',\n 'gradientHorizontalMinLength',\n 'gradientVerticalMaxLength',\n 'gradientVerticalMinLength',\n 'unselectedOpacity'\n];\n","import {Align, Color, FontStyle, FontWeight, Orient, SignalRef, TextBaseline, TitleAnchor, TitleConfig} from 'vega';\nimport {FormatMixins} from './channeldef';\nimport {ExprRef} from './expr';\nimport {Guide, VlOnlyGuideConfig} from './guide';\nimport {Flag, keys} from './util';\n\nexport const HEADER_TITLE_PROPERTIES_MAP: Partial, keyof TitleConfig>> = {\n titleAlign: 'align',\n titleAnchor: 'anchor',\n titleAngle: 'angle',\n titleBaseline: 'baseline',\n titleColor: 'color',\n titleFont: 'font',\n titleFontSize: 'fontSize',\n titleFontStyle: 'fontStyle',\n titleFontWeight: 'fontWeight',\n titleLimit: 'limit',\n titleLineHeight: 'lineHeight',\n titleOrient: 'orient',\n titlePadding: 'offset'\n};\n\nexport const HEADER_LABEL_PROPERTIES_MAP: Partial, keyof TitleConfig>> = {\n labelAlign: 'align',\n labelAnchor: 'anchor',\n labelAngle: 'angle',\n labelBaseline: 'baseline',\n labelColor: 'color',\n labelFont: 'font',\n labelFontSize: 'fontSize',\n labelFontStyle: 'fontStyle',\n labelFontWeight: 'fontWeight',\n labelLimit: 'limit',\n labelLineHeight: 'lineHeight',\n labelOrient: 'orient',\n labelPadding: 'offset'\n};\n\nexport const HEADER_TITLE_PROPERTIES = keys(HEADER_TITLE_PROPERTIES_MAP);\n\nexport const HEADER_LABEL_PROPERTIES = keys(HEADER_LABEL_PROPERTIES_MAP);\n\nexport interface CoreHeader extends FormatMixins {\n // ---------- Title ----------\n /**\n * The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title.\n */\n titleAnchor?: TitleAnchor; // We don't allow signal for titleAnchor since there is a dependent logic\n\n /**\n * Horizontal text alignment (to the anchor) of header titles.\n */\n titleAlign?: Align | ES;\n\n /**\n * The rotation angle of the header title.\n *\n * __Default value:__ `0`.\n *\n * @minimum -360\n * @maximum 360\n */\n titleAngle?: number; // We don't allow signal for titleAngle since there is a dependent logic\n\n /**\n * The vertical text baseline for the header title. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`.\n * The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone.\n *\n * __Default value:__ `\"middle\"`\n */\n titleBaseline?: TextBaseline | ES;\n\n /**\n * Color of the header title, can be in hex color code or regular color name.\n */\n titleColor?: Color | ES;\n\n /**\n * Font of the header title. (e.g., `\"Helvetica Neue\"`).\n */\n titleFont?: string | ES;\n\n /**\n * Font size of the header title.\n *\n * @minimum 0\n */\n titleFontSize?: number | ES;\n\n /**\n * The font style of the header title.\n */\n titleFontStyle?: FontStyle | ES;\n\n /**\n * Font weight of the header title.\n * This can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`).\n */\n titleFontWeight?: FontWeight | ES;\n\n /**\n * The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n *\n * __Default value:__ `0`, indicating no limit\n */\n titleLimit?: number | ES;\n\n /**\n * Line height in pixels for multi-line header title text or title text with `\"line-top\"` or `\"line-bottom\"` baseline.\n */\n titleLineHeight?: number | ES;\n\n /**\n * The orientation of the header title. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`.\n */\n titleOrient?: Orient; // no signal ref since there is a dependent logic\n\n /**\n * The padding, in pixel, between facet header's title and the label.\n *\n * __Default value:__ `10`\n */\n titlePadding?: number | ES;\n\n // ---------- Label ----------\n\n /**\n * A boolean flag indicating if labels should be included as part of the header.\n *\n * __Default value:__ `true`.\n */\n labels?: boolean;\n\n /**\n * Horizontal text alignment of header labels. One of `\"left\"`, `\"center\"`, or `\"right\"`.\n */\n labelAlign?: Align | ES;\n\n /**\n * The vertical text baseline for the header labels. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`.\n * The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone.\n *\n */\n labelBaseline?: TextBaseline | ES;\n\n /**\n * The anchor position for placing the labels. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label.\n */\n labelAnchor?: TitleAnchor;\n\n /**\n * [Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n *\n * __Note:__ The label text and value can be assessed via the `label` and `value` properties of the header's backing `datum` object.\n */\n labelExpr?: string;\n\n /**\n * The rotation angle of the header labels.\n *\n * __Default value:__ `0` for column header, `-90` for row header.\n *\n * @minimum -360\n * @maximum 360\n */\n labelAngle?: number; // no signal ref since there is a dependent logic\n\n /**\n * The color of the header label, can be in hex color code or regular color name.\n */\n labelColor?: Color | ES;\n\n /**\n * The font of the header label.\n */\n labelFont?: string | ES;\n\n /**\n * The font size of the header label, in pixels.\n *\n * @minimum 0\n */\n labelFontSize?: number | ES;\n\n /**\n * The font style of the header label.\n */\n labelFontStyle?: FontStyle | ES;\n\n /**\n * The font weight of the header label.\n */\n labelFontWeight?: FontWeight | ES;\n\n /**\n * The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n *\n * __Default value:__ `0`, indicating no limit\n */\n labelLimit?: number | ES;\n\n /**\n * Line height in pixels for multi-line header labels or title text with `\"line-top\"` or `\"line-bottom\"` baseline.\n */\n labelLineHeight?: number | ES;\n\n /**\n * The orientation of the header label. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`.\n */\n labelOrient?: Orient; // no signal ref since there is a dependent logic\n\n /**\n * The padding, in pixel, between facet header's label and the plot.\n *\n * __Default value:__ `10`\n */\n labelPadding?: number | ES;\n\n /**\n * Shortcut for setting both labelOrient and titleOrient.\n */\n orient?: Orient; // no signal ref since there is a dependent logic\n}\n\nexport interface HeaderConfig extends CoreHeader, VlOnlyGuideConfig {}\n\n/**\n * Headers of row / column channels for faceted plots.\n */\nexport interface Header extends CoreHeader, Guide {}\n\nexport interface HeaderConfigMixins {\n /**\n * Header configuration, which determines default properties for all [headers](https://vega.github.io/vega-lite/docs/header.html).\n *\n * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n */\n header?: HeaderConfig;\n\n /**\n * Header configuration, which determines default properties for row [headers](https://vega.github.io/vega-lite/docs/header.html).\n *\n * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n */\n headerRow?: HeaderConfig;\n\n /**\n * Header configuration, which determines default properties for column [headers](https://vega.github.io/vega-lite/docs/header.html).\n *\n * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n */\n headerColumn?: HeaderConfig;\n\n /**\n * Header configuration, which determines default properties for non-row/column facet [headers](https://vega.github.io/vega-lite/docs/header.html).\n *\n * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n */\n headerFacet?: HeaderConfig;\n}\n\nconst HEADER_CONFIGS_INDEX: Flag> = {\n header: 1,\n headerRow: 1,\n headerColumn: 1,\n headerFacet: 1\n};\n\nexport const HEADER_CONFIGS = keys(HEADER_CONFIGS_INDEX);\n","import {\n BaseLegend,\n LabelOverlap,\n Legend as VgLegend,\n LegendConfig as VgLegendConfig,\n LegendOrient,\n Orientation,\n SignalRef\n} from 'vega';\nimport {DateTime} from './datetime';\nimport {ExprRef} from './expr';\nimport {Guide, GuideEncodingEntry, VlOnlyGuideConfig} from './guide';\nimport {Flag, keys} from './util';\nimport {MapExcludeValueRefAndReplaceSignalWith} from './vega.schema';\n\nexport const LEGEND_SCALE_CHANNELS = [\n 'size',\n 'shape',\n 'fill',\n 'stroke',\n 'strokeDash',\n 'strokeWidth',\n 'opacity'\n] as const;\n\ntype BaseLegendNoValueRefs = MapExcludeValueRefAndReplaceSignalWith;\n\nexport type LegendConfig = LegendMixins &\n VlOnlyGuideConfig &\n MapExcludeValueRefAndReplaceSignalWith & {\n /**\n * Max legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n *\n * __Default value:__ `200`\n */\n gradientVerticalMaxLength?: number;\n\n /**\n * Min legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n *\n * __Default value:__ `100`\n */\n gradientVerticalMinLength?: number;\n\n /**\n * Max legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n *\n * __Default value:__ `200`\n */\n gradientHorizontalMaxLength?: number;\n\n /**\n * Min legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n *\n * __Default value:__ `100`\n */\n gradientHorizontalMinLength?: number;\n\n /**\n * The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient.\n *\n * __Default value:__ `undefined`. If `undefined`, the default gradient will be determined based on the following rules:\n * - For vertical gradients, `clamp(plot_height, gradientVerticalMinLength, gradientVerticalMaxLength)`\n * - For top-`orient`ed or bottom-`orient`ed horizontal gradients, `clamp(plot_width, gradientHorizontalMinLength, gradientHorizontalMaxLength)`\n * - For other horizontal gradients, `gradientHorizontalMinLength`\n *\n * where `clamp(value, min, max)` restricts _value_ to be between the specified _min_ and _max_.\n * @minimum 0\n */\n gradientLength?: number;\n\n /**\n * The opacity of unselected legend entries.\n *\n * __Default value:__ 0.35.\n */\n unselectedOpacity?: number;\n\n /**\n * Disable legend by default\n */\n disable?: boolean;\n };\n\n/**\n * Properties of a legend or boolean flag for determining whether to show it.\n */\nexport interface Legend\n extends Omit, 'orient'>,\n LegendMixins,\n Guide {\n /**\n * Mark definitions for custom legend encoding.\n *\n * @hidden\n */\n encoding?: LegendEncoding;\n\n /**\n * [Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n *\n * __Note:__ The label text and value can be assessed via the `label` and `value` properties of the legend's backing `datum` object.\n */\n labelExpr?: string;\n\n /**\n * The minimum desired step between legend ticks, in terms of scale domain values. For example, a value of `1` indicates that ticks should not be less than 1 unit apart. If `tickMinStep` is specified, the `tickCount` value will be adjusted, if necessary, to enforce the minimum step value.\n *\n * __Default value__: `undefined`\n */\n tickMinStep?: number | ES;\n\n /**\n * Explicitly set the visible legend values.\n */\n values?: number[] | string[] | boolean[] | DateTime[] | ES; // Vega already supports Signal -- we have to re-declare here since VL supports special Date Time object that's not valid in Vega.\n\n /**\n * The type of the legend. Use `\"symbol\"` to create a discrete legend and `\"gradient\"` for a continuous color gradient.\n *\n * __Default value:__ `\"gradient\"` for non-binned quantitative fields and temporal fields; `\"symbol\"` otherwise.\n */\n type?: 'symbol' | 'gradient';\n\n /**\n * A non-negative integer indicating the z-index of the legend.\n * If zindex is 0, legend should be drawn behind all chart elements.\n * To put them in front, use zindex = 1.\n *\n * @TJS-type integer\n * @minimum 0\n */\n zindex?: number;\n}\n\n// Change comments to be Vega-Lite specific\ninterface LegendMixins {\n /**\n * The strategy to use for resolving overlap of labels in gradient legends. If `false`, no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used. If set to `\"greedy\"`, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes).\n *\n * __Default value:__ `\"greedy\"` for `log scales otherwise `true`.\n */\n labelOverlap?: LabelOverlap | ES; // override comment since our default differs from Vega\n\n /**\n * The direction of the legend, one of `\"vertical\"` or `\"horizontal\"`.\n *\n * __Default value:__\n * - For top-/bottom-`orient`ed legends, `\"horizontal\"`\n * - For left-/right-`orient`ed legends, `\"vertical\"`\n * - For top/bottom-left/right-`orient`ed legends, `\"horizontal\"` for gradient legends and `\"vertical\"` for symbol legends.\n */\n direction?: Orientation; // Omit SignalRef\n\n /**\n * The orientation of the legend, which determines how the legend is positioned within the scene. One of `\"left\"`, `\"right\"`, `\"top\"`, `\"bottom\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom-left\"`, `\"bottom-right\"`, `\"none\"`.\n *\n * __Default value:__ `\"right\"`\n */\n orient?: LegendOrient; // Omit SignalRef\n}\n\nexport type LegendInternal = Legend;\n\nexport interface LegendEncoding {\n /**\n * Custom encoding for the legend container.\n * This can be useful for creating legend with custom x, y position.\n */\n legend?: GuideEncodingEntry;\n\n /**\n * Custom encoding for the legend title text mark.\n */\n title?: GuideEncodingEntry;\n\n /**\n * Custom encoding for legend label text marks.\n */\n labels?: GuideEncodingEntry;\n\n /**\n * Custom encoding for legend symbol marks.\n */\n symbols?: GuideEncodingEntry;\n\n /**\n * Custom encoding for legend gradient filled rect marks.\n */\n gradient?: GuideEncodingEntry;\n}\n\nexport const defaultLegendConfig: LegendConfig = {\n gradientHorizontalMaxLength: 200,\n gradientHorizontalMinLength: 100,\n gradientVerticalMaxLength: 200,\n gradientVerticalMinLength: 64, // This is Vega's minimum.\n unselectedOpacity: 0.35\n};\n\nexport const COMMON_LEGEND_PROPERTY_INDEX: Flag)> = {\n aria: 1,\n clipHeight: 1,\n columnPadding: 1,\n columns: 1,\n cornerRadius: 1,\n description: 1,\n direction: 1,\n fillColor: 1,\n format: 1,\n formatType: 1,\n gradientLength: 1,\n gradientOpacity: 1,\n gradientStrokeColor: 1,\n gradientStrokeWidth: 1,\n gradientThickness: 1,\n gridAlign: 1,\n labelAlign: 1,\n labelBaseline: 1,\n labelColor: 1,\n labelFont: 1,\n labelFontSize: 1,\n labelFontStyle: 1,\n labelFontWeight: 1,\n labelLimit: 1,\n labelOffset: 1,\n labelOpacity: 1,\n labelOverlap: 1,\n labelPadding: 1,\n labelSeparation: 1,\n legendX: 1,\n legendY: 1,\n offset: 1,\n orient: 1,\n padding: 1,\n rowPadding: 1,\n strokeColor: 1,\n symbolDash: 1,\n symbolDashOffset: 1,\n symbolFillColor: 1,\n symbolLimit: 1,\n symbolOffset: 1,\n symbolOpacity: 1,\n symbolSize: 1,\n symbolStrokeColor: 1,\n symbolStrokeWidth: 1,\n symbolType: 1,\n tickCount: 1,\n tickMinStep: 1,\n title: 1,\n titleAlign: 1,\n titleAnchor: 1,\n titleBaseline: 1,\n titleColor: 1,\n titleFont: 1,\n titleFontSize: 1,\n titleFontStyle: 1,\n titleFontWeight: 1,\n titleLimit: 1,\n titleLineHeight: 1,\n titleOpacity: 1,\n titleOrient: 1,\n titlePadding: 1,\n type: 1,\n values: 1,\n zindex: 1\n};\n\nexport const LEGEND_PROPERTIES = keys(COMMON_LEGEND_PROPERTY_INDEX);\n","import {Binding, Color, Cursor, Stream, Vector2} from 'vega';\nimport {isObject} from 'vega-util';\nimport {SingleDefUnitChannel} from './channel';\nimport {FieldName, PrimitiveValue} from './channeldef';\nimport {DateTime} from './datetime';\nimport {ParameterName} from './parameter';\nimport {Dict} from './util';\n\nexport const SELECTION_ID = '_vgsid_';\nexport type SelectionType = 'point' | 'interval';\nexport type SelectionResolution = 'global' | 'union' | 'intersect';\n\nexport type SelectionInit = PrimitiveValue | DateTime;\nexport type SelectionInitInterval = Vector2 | Vector2 | Vector2 | Vector2;\n\nexport type SelectionInitMapping = Dict;\nexport type SelectionInitIntervalMapping = Dict;\n\nexport type LegendStreamBinding = {legend: string | Stream};\nexport type LegendBinding = 'legend' | LegendStreamBinding;\n\nexport interface BaseSelectionConfig {\n /**\n * Determines the default event processing and data query for the selection. Vega-Lite currently supports two selection types:\n *\n * - `\"point\"` -- to select multiple discrete data values; the first value is selected on `click` and additional values toggled on shift-click.\n * - `\"interval\"` -- to select a continuous range of data values on `drag`.\n */\n type: T;\n\n /**\n * Clears the selection, emptying it of all values. This property can be a\n * [Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable clear.\n *\n * __Default value:__ `dblclick`.\n *\n * __See also:__ [`clear` examples ](https://vega.github.io/vega-lite/docs/selection.html#clear) in the documentation.\n */\n clear?: Stream | string | boolean;\n\n /**\n * A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\n * For interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters).\n *\n * __See also:__ [`on` examples](https://vega.github.io/vega-lite/docs/selection.html#on) in the documentation.\n */\n on?: Stream | string;\n\n /**\n * With layered and multi-view displays, a strategy that determines how\n * selections' data queries are resolved when applied in a filter transform,\n * conditional encoding rule, or scale domain.\n *\n * One of:\n * - `\"global\"` -- only one brush exists for the entire SPLOM. When the user begins to drag, any previous brushes are cleared, and a new one is constructed.\n * - `\"union\"` -- each cell contains its own brush, and points are highlighted if they lie within _any_ of these individual brushes.\n * - `\"intersect\"` -- each cell contains its own brush, and points are highlighted only if they fall within _all_ of these individual brushes.\n *\n * __Default value:__ `global`.\n *\n * __See also:__ [`resolve` examples](https://vega.github.io/vega-lite/docs/selection.html#resolve) in the documentation.\n */\n resolve?: SelectionResolution;\n\n // TODO(https://github.com/vega/vega-lite/issues/2596).\n // predicate?: string;\n // domain?: SelectionDomain;\n\n /**\n * An array of encoding channels. The corresponding data field values\n * must match for a data tuple to fall within the selection.\n *\n * __See also:__ The [projection with `encodings` and `fields` section](https://vega.github.io/vega-lite/docs/selection.html#project) in the documentation.\n */\n encodings?: SingleDefUnitChannel[];\n\n /**\n * An array of field names whose values must match for a data tuple to\n * fall within the selection.\n *\n * __See also:__ The [projection with `encodings` and `fields` section](https://vega.github.io/vega-lite/docs/selection.html#project) in the documentation.\n */\n fields?: FieldName[];\n}\n\nexport interface PointSelectionConfig extends BaseSelectionConfig<'point'> {\n /**\n * Controls whether data values should be toggled (inserted or removed from a point selection)\n * or only ever inserted into multi selections.\n *\n * One of:\n * - `true` -- the default behavior, which corresponds to `\"event.shiftKey\"`. As a result, data values are toggled when the user interacts with the shift-key pressed.\n * - `false` -- disables toggling behaviour; as the user interacts, data values are only inserted into the multi selection and never removed.\n * - A [Vega expression](https://vega.github.io/vega/docs/expressions/) which is re-evaluated as the user interacts. If the expression evaluates to `true`, the data value is toggled into or out of the multi selection. If the expression evaluates to `false`, the multi selection is first clear, and the data value is then inserted. For example, setting the value to the Vega expression `\"true\"` will toggle data values\n * without the user pressing the shift-key.\n *\n * __Default value:__ `true`\n *\n * __See also:__ [`toggle` examples](https://vega.github.io/vega-lite/docs/selection.html#toggle) in the documentation.\n */\n toggle?: string | boolean;\n\n /**\n * When true, an invisible voronoi diagram is computed to accelerate discrete\n * selection. The data value _nearest_ the mouse cursor is added to the selection.\n *\n * __Default value:__ `false`, which means that data values must be interacted with directly (e.g., clicked on) to be added to the selection.\n *\n * __See also:__ [`nearest` examples](https://vega.github.io/vega-lite/docs/selection.html#nearest) documentation.\n */\n nearest?: boolean;\n}\n\n// Similar to BaseMarkConfig but the field documentations are specificly for an interval mark.\nexport interface BrushConfig {\n /**\n * The fill color of the interval mark.\n *\n * __Default value:__ `\"#333333\"`\n *\n */\n fill?: Color;\n\n /**\n * The fill opacity of the interval mark (a value between `0` and `1`).\n *\n * __Default value:__ `0.125`\n */\n fillOpacity?: number;\n\n /**\n * The stroke color of the interval mark.\n *\n * __Default value:__ `\"#ffffff\"`\n */\n stroke?: Color;\n\n /**\n * The stroke opacity of the interval mark (a value between `0` and `1`).\n */\n strokeOpacity?: number;\n\n /**\n * The stroke width of the interval mark.\n */\n strokeWidth?: number;\n\n /**\n * An array of alternating stroke and space lengths, for creating dashed or dotted lines.\n */\n strokeDash?: number[];\n\n /**\n * The offset (in pixels) with which to begin drawing the stroke dash array.\n */\n strokeDashOffset?: number;\n\n /**\n * The mouse cursor used over the interval mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used.\n */\n cursor?: Cursor;\n}\n\nexport interface IntervalSelectionConfig extends BaseSelectionConfig<'interval'> {\n /**\n * When truthy, allows a user to interactively move an interval selection\n * back-and-forth. Can be `true`, `false` (to disable panning), or a\n * [Vega event stream definition](https://vega.github.io/vega/docs/event-streams/)\n * which must include a start and end event to trigger continuous panning.\n * Discrete panning (e.g., pressing the left/right arrow keys) will be supported in future versions.\n *\n * __Default value:__ `true`, which corresponds to `[mousedown, window:mouseup] > window:mousemove!`.\n * This default allows users to clicks and drags within an interval selection to reposition it.\n *\n * __See also:__ [`translate` examples](https://vega.github.io/vega-lite/docs/selection.html#translate) in the documentation.\n */\n translate?: string | boolean;\n\n /**\n * When truthy, allows a user to interactively resize an interval selection.\n * Can be `true`, `false` (to disable zooming), or a [Vega event stream\n * definition](https://vega.github.io/vega/docs/event-streams/). Currently,\n * only `wheel` events are supported,\n * but custom event streams can still be used to specify filters, debouncing, and throttling.\n * Future versions will expand the set of events that can trigger this transformation.\n *\n * __Default value:__ `true`, which corresponds to `wheel!`. This default allows users to use the mouse wheel to resize an interval selection.\n *\n * __See also:__ [`zoom` examples](https://vega.github.io/vega-lite/docs/selection.html#zoom) in the documentation.\n */\n zoom?: string | boolean;\n\n /**\n * An interval selection also adds a rectangle mark to depict the\n * extents of the interval. The `mark` property can be used to customize the\n * appearance of the mark.\n *\n * __See also:__ [`mark` examples](https://vega.github.io/vega-lite/docs/selection.html#mark) in the documentation.\n */\n mark?: BrushConfig;\n}\n\nexport interface SelectionParameter {\n /**\n * Required. A unique name for the selection parameter. Selection names should be valid JavaScript identifiers: they should contain only alphanumeric characters (or \"$\", or \"_\") and may not start with a digit. Reserved keywords that may not be used as parameter names are \"datum\", \"event\", \"item\", and \"parent\".\n */\n name: ParameterName;\n\n /**\n * Determines the default event processing and data query for the selection. Vega-Lite currently supports two selection types:\n *\n * - `\"point\"` -- to select multiple discrete data values; the first value is selected on `click` and additional values toggled on shift-click.\n * - `\"interval\"` -- to select a continuous range of data values on `drag`.\n */\n select: T | (T extends 'point' ? PointSelectionConfig : T extends 'interval' ? IntervalSelectionConfig : never);\n\n /**\n * Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/selection.html#project) and initial values.\n *\n * __See also:__ [`init`](https://vega.github.io/vega-lite/docs/value.html) documentation.\n */\n value?: T extends 'point'\n ? SelectionInit | SelectionInitMapping[]\n : T extends 'interval'\n ? SelectionInitIntervalMapping\n : never;\n\n /**\n * When set, a selection is populated by input elements (also known as dynamic query widgets)\n * or by interacting with the corresponding legend. Direct manipulation interaction is disabled by default;\n * to re-enable it, set the selection's [`on`](https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties) property.\n *\n * Legend bindings are restricted to selections that only specify a single field or encoding.\n *\n * Query widget binding takes the form of Vega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind)\n * or can be a mapping between projected field/encodings and binding definitions.\n *\n * __See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation.\n */\n bind?: T extends 'point'\n ? Binding | Record | LegendBinding\n : T extends 'interval'\n ? 'scales'\n : never;\n}\n\nexport type TopLevelSelectionParameter = SelectionParameter & {\n /**\n * By default, top-level selections are applied to every view in the visualization.\n * If this property is specified, selections will only be applied to views with the given names.\n */\n views?: (string | string[])[];\n};\n\nexport type ParameterExtent =\n | {\n /**\n * The name of a parameter.\n */\n param: ParameterName;\n\n /**\n * If a selection parameter is specified, the field name to extract selected values for\n * when the selection is [projected](https://vega.github.io/vega-lite/docs/selection.html#project) over multiple fields or encodings.\n */\n field?: FieldName;\n }\n | {\n /**\n * The name of a parameter.\n */\n param: ParameterName;\n\n /**\n * If a selection parameter is specified, the encoding channel to extract selected values for\n * when a selection is [projected](https://vega.github.io/vega-lite/docs/selection.html#project) over multiple fields or encodings.\n */\n encoding?: SingleDefUnitChannel;\n };\n\nexport type PointSelectionConfigWithoutType = Omit;\n\nexport type IntervalSelectionConfigWithoutType = Omit;\n\nexport interface SelectionConfig {\n /**\n * The default definition for a [`point`](https://vega.github.io/vega-lite/docs/parameter.html#select) selection. All properties and transformations\n * for a point selection definition (except `type`) may be specified here.\n *\n * For instance, setting `point` to `{\"on\": \"dblclick\"}` populates point selections on double-click by default.\n */\n point?: PointSelectionConfigWithoutType;\n\n /**\n * The default definition for an [`interval`](https://vega.github.io/vega-lite/docs/parameter.html#select) selection. All properties and transformations\n * for an interval selection definition (except `type`) may be specified here.\n *\n * For instance, setting `interval` to `{\"translate\": false}` disables the ability to move\n * interval selections by default.\n */\n interval?: IntervalSelectionConfigWithoutType;\n}\n\nexport const defaultConfig: SelectionConfig = {\n point: {\n on: 'click',\n fields: [SELECTION_ID],\n toggle: 'event.shiftKey',\n resolve: 'global',\n clear: 'dblclick'\n },\n interval: {\n on: '[mousedown, window:mouseup] > window:mousemove!',\n encodings: ['x', 'y'],\n translate: '[mousedown, window:mouseup] > window:mousemove!',\n zoom: 'wheel!',\n mark: {fill: '#333', fillOpacity: 0.125, stroke: 'white'},\n resolve: 'global',\n clear: 'dblclick'\n }\n};\n\nexport function isLegendBinding(bind: any): bind is LegendBinding {\n return !!bind && (bind === 'legend' || !!bind.legend);\n}\n\nexport function isLegendStreamBinding(bind: any): bind is LegendStreamBinding {\n return isLegendBinding(bind) && isObject(bind);\n}\n\nexport function isSelectionParameter(param: any): param is SelectionParameter {\n return !!param['select'];\n}\n","import {Binding, Expr, InitSignal, NewSignal} from 'vega';\nimport {isSelectionParameter, TopLevelSelectionParameter} from './selection';\n\nexport type ParameterName = string;\n\nexport interface VariableParameter {\n /**\n * A unique name for the variable parameter. Parameter names should be valid JavaScript identifiers: they should contain only alphanumeric characters (or \"$\", or \"_\") and may not start with a digit. Reserved keywords that may not be used as parameter names are \"datum\", \"event\", \"item\", and \"parent\".\n */\n name: ParameterName;\n\n /**\n * The [initial value](http://vega.github.io/vega-lite/docs/value.html) of the parameter.\n *\n * __Default value:__ `undefined`\n */\n value?: any;\n\n /**\n * An expression for the value of the parameter. This expression may include other parameters, in which case the parameter will automatically update in response to upstream parameter changes.\n */\n expr?: Expr;\n\n /**\n * Binds the parameter to an external input element such as a slider, selection list or radio button group.\n */\n bind?: Binding;\n}\n\nexport function assembleParameterSignals(params: (VariableParameter | TopLevelSelectionParameter)[]) {\n const signals: (NewSignal | InitSignal)[] = [];\n for (const param of params || []) {\n // Selection parameters are handled separately via assembleSelectionTopLevelSignals\n // and assembleSignals methods registered on the Model.\n if (isSelectionParameter(param)) continue;\n const {expr, bind, ...rest} = param;\n\n if (bind && expr) {\n // Vega's InitSignal -- apply expr to \"init\"\n const signal: InitSignal = {\n ...rest,\n bind,\n init: expr\n };\n signals.push(signal);\n } else {\n const signal: NewSignal = {\n ...rest,\n ...(expr ? {update: expr} : {}),\n ...(bind ? {bind} : {})\n };\n signals.push(signal);\n }\n }\n return signals;\n}\n","import {GenericSpec, NormalizedSpec} from '.';\nimport {BaseSpec, BoundsMixins, GenericCompositionLayoutWithColumns, ResolveMixins} from './base';\n\n/**\n * Base layout mixins for V/HConcatSpec, which should not have RowCol generic fo its property.\n */\nexport interface OneDirectionalConcatLayout extends BoundsMixins, ResolveMixins {\n /**\n * Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n *\n * __Default value:__ `false`\n */\n center?: boolean;\n\n /**\n * The spacing in pixels between sub-views of the concat operator.\n *\n * __Default value__: `10`\n */\n spacing?: number;\n}\n\n/**\n * Base interface for a generalized concatenation specification.\n */\nexport interface GenericConcatSpec>\n extends BaseSpec,\n GenericCompositionLayoutWithColumns,\n ResolveMixins {\n /**\n * A list of views to be concatenated.\n */\n concat: S[];\n}\n\n/**\n * Base interface for a vertical concatenation specification.\n */\nexport interface GenericVConcatSpec>\n extends BaseSpec,\n OneDirectionalConcatLayout {\n /**\n * A list of views to be concatenated and put into a column.\n */\n vconcat: S[];\n}\n\n/**\n * Base interface for a horizontal concatenation specification.\n */\nexport interface GenericHConcatSpec>\n extends BaseSpec,\n OneDirectionalConcatLayout {\n /**\n * A list of views to be concatenated and put into a row.\n */\n hconcat: S[];\n}\n\n/** A concat spec without any shortcut/expansion syntax */\nexport type NormalizedConcatSpec =\n | GenericConcatSpec\n | GenericVConcatSpec\n | GenericHConcatSpec;\n\nexport function isAnyConcatSpec(spec: BaseSpec): spec is GenericVConcatSpec | GenericHConcatSpec {\n return isVConcatSpec(spec) || isHConcatSpec(spec) || isConcatSpec(spec);\n}\n\nexport function isConcatSpec(spec: BaseSpec): spec is GenericConcatSpec {\n return 'concat' in spec;\n}\n\nexport function isVConcatSpec(spec: BaseSpec): spec is GenericVConcatSpec {\n return 'vconcat' in spec;\n}\n\nexport function isHConcatSpec(spec: BaseSpec): spec is GenericHConcatSpec {\n return 'hconcat' in spec;\n}\n","import {Color, SignalRef} from 'vega';\nimport {BaseSpec} from '.';\nimport {getPositionScaleChannel} from '../channel';\nimport {signalRefOrValue} from '../compile/common';\nimport {Config} from '../config';\nimport {InlineDataset} from '../data';\nimport {ExprRef} from '../expr';\nimport {VariableParameter} from '../parameter';\nimport {TopLevelSelectionParameter} from '../selection';\nimport {Dict} from '../util';\n\n/**\n * @minimum 0\n */\nexport type Padding = number | {top?: number; bottom?: number; left?: number; right?: number};\n\nexport type Datasets = Dict;\n\nexport type TopLevel = S &\n TopLevelProperties & {\n /**\n * URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v5.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.\n * @format uri\n */\n $schema?: string;\n\n /**\n * Vega-Lite configuration object. This property can only be defined at the top-level of a specification.\n */\n config?: Config;\n\n /**\n * A global data store for named datasets. This is a mapping from names to inline datasets.\n * This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property.\n */\n datasets?: Datasets;\n\n /**\n * Optional metadata that will be passed to Vega.\n * This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.\n */\n usermeta?: Dict;\n };\n\n/**\n * Shared properties between Top-Level specs and Config\n */\nexport interface TopLevelProperties {\n /**\n * CSS color property to use as the background of the entire view.\n *\n * __Default value:__ `\"white\"`\n */\n background?: Color | ES;\n\n /**\n * The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\n * If an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n *\n * __Default value__: `5`\n */\n padding?: Padding | ES;\n\n /**\n * How the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\n * Object values can additionally specify parameters for content sizing and automatic resizing.\n *\n * __Default value__: `pad`\n */\n autosize?: AutosizeType | AutoSizeParams; // Vega actually supports signal for autosize. However, we need to check autosize at compile time to infer the rest of the spec. Thus VL's autosize won't support SignalRef for now.\n\n /**\n * Dynamic variables or selections that parameterize a visualization.\n */\n params?: (VariableParameter | TopLevelSelectionParameter)[];\n}\n\nexport type FitType = 'fit' | 'fit-x' | 'fit-y';\n\nexport function isFitType(autoSizeType: AutosizeType): autoSizeType is FitType {\n return autoSizeType === 'fit' || autoSizeType === 'fit-x' || autoSizeType === 'fit-y';\n}\n\nexport function getFitType(sizeType?: 'width' | 'height'): FitType {\n return sizeType ? (`fit-${getPositionScaleChannel(sizeType)}` as FitType) : 'fit';\n}\n\nexport type AutosizeType = 'pad' | 'none' | 'fit' | 'fit-x' | 'fit-y';\n\nexport interface AutoSizeParams {\n /**\n * The sizing format type. One of `\"pad\"`, `\"fit\"`, `\"fit-x\"`, `\"fit-y\"`, or `\"none\"`. See the [autosize type](https://vega.github.io/vega-lite/docs/size.html#autosize) documentation for descriptions of each.\n *\n * __Default value__: `\"pad\"`\n */\n type?: AutosizeType;\n\n /**\n * A boolean flag indicating if autosize layout should be re-calculated on every view update.\n *\n * __Default value__: `false`\n */\n resize?: boolean;\n\n /**\n * Determines how size calculation should be performed, one of `\"content\"` or `\"padding\"`. The default setting (`\"content\"`) interprets the width and height settings as the data rectangle (plotting) dimensions, to which padding is then added. In contrast, the `\"padding\"` setting includes the padding within the view size calculations, such that the width and height settings indicate the **total** intended size of the view.\n *\n * __Default value__: `\"content\"`\n */\n contains?: 'content' | 'padding';\n}\n\nconst TOP_LEVEL_PROPERTIES: (keyof TopLevelProperties)[] = [\n 'background',\n 'padding'\n // We do not include \"autosize\" here as it is supported by only unit and layer specs and thus need to be normalized\n];\n\nexport function extractTopLevelProperties(t: TopLevelProperties, includeParams: boolean) {\n const o: TopLevelProperties = {};\n for (const p of TOP_LEVEL_PROPERTIES) {\n if (t && t[p] !== undefined) {\n o[p as any] = signalRefOrValue(t[p]);\n }\n }\n if (includeParams) {\n o.params = t.params;\n }\n return o;\n}\n","import {Color, Cursor, SignalRef, Text} from 'vega';\nimport {isNumber, isObject} from 'vega-util';\nimport {NormalizedSpec} from '.';\nimport {Data} from '../data';\nimport {ExprRef} from '../expr';\nimport {MarkConfig} from '../mark';\nimport {Resolve} from '../resolve';\nimport {TitleParams} from '../title';\nimport {Transform} from '../transform';\nimport {Flag, keys} from '../util';\nimport {LayoutAlign, RowCol} from '../vega.schema';\nimport {isConcatSpec, isVConcatSpec} from './concat';\nimport {isFacetMapping, isFacetSpec} from './facet';\n\nexport {TopLevel} from './toplevel';\n\n/**\n * Common properties for all types of specification\n */\nexport interface BaseSpec {\n /**\n * Title for the plot.\n */\n title?: Text | TitleParams;\n\n /**\n * Name of the visualization for later reference.\n */\n name?: string;\n\n /**\n * Description of this mark for commenting purpose.\n */\n description?: string;\n\n /**\n * An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent.\n */\n data?: Data | null;\n\n /**\n * An array of data transformations such as filter and new field calculation.\n */\n transform?: Transform[];\n}\n\nexport interface DataMixins {\n /**\n * An object describing the data source.\n */\n data: Data;\n}\n\nexport interface Step {\n /**\n * The size (width/height) per discrete step.\n */\n step: number;\n}\n\nexport function isStep(size: number | Step | 'container' | 'merged'): size is Step {\n return isObject(size) && size['step'] !== undefined;\n}\n\n// TODO(https://github.com/vega/vega-lite/issues/2503): Make this generic so we can support some form of top-down sizing.\n/**\n * Common properties for specifying width and height of unit and layer specifications.\n */\nexport interface LayoutSizeMixins {\n /**\n * The width of a visualization.\n *\n * - For a plot with a continuous x-field, width should be a number.\n * - For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.)\n * - To enable responsive sizing on width, it should be set to `\"container\"`.\n *\n * __Default value:__\n * Based on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n *\n * __Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n *\n * __See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation.\n */\n width?: number | 'container' | Step; // Vega also supports SignalRef for width and height. However, we need to know if width is a step or not in VL and it's very difficult to check this at runtime, so we intentionally do not support SignalRef here.\n\n /**\n * The height of a visualization.\n *\n * - For a plot with a continuous y-field, height should be a number.\n * - For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.)\n * - To enable responsive sizing on height, it should be set to `\"container\"`.\n *\n * __Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n *\n * __Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n *\n * __See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation.\n */\n height?: number | 'container' | Step; // Vega also supports SignalRef for width and height. However, we need to know if width is a step or not in VL and it's very difficult to check this at runtime, so we intentionally do not support SignalRef here.\n}\n\nexport function isFrameMixins(o: any): o is FrameMixins {\n return o['view'] || o['width'] || o['height'];\n}\n\nexport interface FrameMixins extends LayoutSizeMixins {\n /**\n * An object defining the view background's fill and stroke.\n *\n * __Default value:__ none (transparent)\n */\n view?: ViewBackground;\n}\n\nexport interface ResolveMixins {\n /**\n * Scale, axis, and legend resolutions for view composition specifications.\n */\n resolve?: Resolve;\n}\n\nexport interface BaseViewBackground\n extends Partial<\n Pick<\n MarkConfig,\n | 'cornerRadius'\n | 'fillOpacity'\n | 'opacity'\n | 'strokeCap'\n | 'strokeDash'\n | 'strokeDashOffset'\n | 'strokeJoin'\n | 'strokeMiterLimit'\n | 'strokeOpacity'\n | 'strokeWidth'\n >\n > {\n // Override documentations for fill, stroke, and cursor\n /**\n * The fill color.\n *\n * __Default value:__ `undefined`\n */\n fill?: Color | null | ES;\n\n /**\n * The stroke color.\n *\n * __Default value:__ `\"#ddd\"`\n */\n stroke?: Color | null | ES;\n\n /**\n * The mouse cursor used over the view. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used.\n */\n cursor?: Cursor;\n}\n\nexport interface ViewBackground extends BaseViewBackground {\n /**\n * A string or array of strings indicating the name of custom styles to apply to the view background. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles.\n *\n * __Default value:__ `\"cell\"`\n * __Note:__ Any specified view background properties will augment the default style.\n */\n style?: string | string[];\n}\n\nexport interface BoundsMixins {\n /**\n * The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n *\n * - If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n * - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n *\n * __Default value:__ `\"full\"`\n */\n\n bounds?: 'full' | 'flush';\n}\n\n/**\n * Base layout for FacetSpec and RepeatSpec.\n * This is named \"GenericComposition\" layout as ConcatLayout is a GenericCompositionLayout too\n * (but _not_ vice versa).\n */\nexport interface GenericCompositionLayout extends BoundsMixins {\n /**\n * The alignment to apply to grid rows and columns.\n * The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n *\n * - For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n * - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n * - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n *\n * Alternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n *\n * __Default value:__ `\"all\"`.\n */\n align?: LayoutAlign | RowCol;\n\n /**\n * Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n *\n * An object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n *\n * __Default value:__ `false`\n */\n center?: boolean | RowCol;\n\n /**\n * The spacing in pixels between sub-views of the composition operator.\n * An object of the form `{\"row\": number, \"column\": number}` can be used to set\n * different spacing values for rows and columns.\n *\n * __Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)\n */\n spacing?: number | RowCol;\n}\n\nexport const DEFAULT_SPACING = 20;\n\nexport interface ColumnMixins {\n /**\n * The number of columns to include in the view composition layout.\n *\n * __Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n * `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n *\n * __Note__:\n *\n * 1) This property is only for:\n * - the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n * - the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n *\n * 2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).\n */\n columns?: number;\n}\n\nexport type GenericCompositionLayoutWithColumns = GenericCompositionLayout & ColumnMixins;\n\nexport type CompositionConfig = ColumnMixins & {\n /**\n * The default spacing in pixels between composed sub-views.\n *\n * __Default value__: `20`\n */\n spacing?: number;\n};\n\nexport interface CompositionConfigMixins {\n /** Default configuration for the `facet` view composition operator */\n facet?: CompositionConfig;\n\n /** Default configuration for all concatenation and repeat view composition operators (`concat`, `hconcat`, `vconcat`, and `repeat`) */\n concat?: CompositionConfig;\n}\n\nconst COMPOSITION_LAYOUT_INDEX: Flag = {\n align: 1,\n bounds: 1,\n center: 1,\n columns: 1,\n spacing: 1\n};\n\nconst COMPOSITION_LAYOUT_PROPERTIES = keys(COMPOSITION_LAYOUT_INDEX);\n\nexport type SpecType = 'unit' | 'facet' | 'layer' | 'concat';\n\nexport function extractCompositionLayout(\n spec: NormalizedSpec,\n specType: keyof CompositionConfigMixins,\n config: CompositionConfigMixins\n): GenericCompositionLayoutWithColumns {\n const compositionConfig = config[specType];\n const layout: GenericCompositionLayoutWithColumns = {};\n\n // Apply config first\n const {spacing: spacingConfig, columns} = compositionConfig;\n if (spacingConfig !== undefined) {\n layout.spacing = spacingConfig;\n }\n\n if (columns !== undefined) {\n if ((isFacetSpec(spec) && !isFacetMapping(spec.facet)) || isConcatSpec(spec)) {\n layout.columns = columns;\n }\n }\n\n if (isVConcatSpec(spec)) {\n layout.columns = 1;\n }\n\n // Then copy properties from the spec\n for (const prop of COMPOSITION_LAYOUT_PROPERTIES) {\n if (spec[prop] !== undefined) {\n if (prop === 'spacing') {\n const spacing: number | RowCol = spec[prop];\n\n layout[prop] = isNumber(spacing)\n ? spacing\n : {\n row: spacing.row ?? spacingConfig,\n column: spacing.column ?? spacingConfig\n };\n } else {\n (layout[prop] as any) = spec[prop];\n }\n }\n }\n\n return layout;\n}\n","import {Color, InitSignal, Locale, NewSignal, RangeConfig, RangeScheme, SignalRef} from 'vega';\nimport {isObject, mergeConfig} from 'vega-util';\nimport {Axis, AxisConfig, AxisConfigMixins, AXIS_CONFIGS, isConditionalAxisValue} from './axis';\nimport {signalOrValueRefWithCondition, signalRefOrValue} from './compile/common';\nimport {CompositeMarkConfigMixins, getAllCompositeMarks} from './compositemark';\nimport {ExprRef, replaceExprRef} from './expr';\nimport {VL_ONLY_LEGEND_CONFIG} from './guide';\nimport {HeaderConfigMixins, HEADER_CONFIGS} from './header';\nimport {defaultLegendConfig, LegendConfig} from './legend';\nimport * as mark from './mark';\nimport {\n AnyMarkConfig,\n Mark,\n MarkConfig,\n MarkConfigMixins,\n MARK_CONFIGS,\n PRIMITIVE_MARKS,\n VL_ONLY_MARK_CONFIG_PROPERTIES,\n VL_ONLY_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX\n} from './mark';\nimport {assembleParameterSignals} from './parameter';\nimport {ProjectionConfig} from './projection';\nimport {defaultScaleConfig, ScaleConfig} from './scale';\nimport {defaultConfig as defaultSelectionConfig, SelectionConfig} from './selection';\nimport {BaseViewBackground, CompositionConfigMixins, DEFAULT_SPACING, isStep} from './spec/base';\nimport {TopLevelProperties} from './spec/toplevel';\nimport {extractTitleConfig, TitleConfig} from './title';\nimport {duplicate, getFirstDefined, isEmpty, keys, omit} from './util';\n\nexport interface ViewConfig extends BaseViewBackground {\n /**\n * The default width when the plot has a continuous field for x or longitude, or has arc marks.\n *\n * __Default value:__ `200`\n */\n continuousWidth?: number;\n\n /**\n * The default width when the plot has non-arc marks and either a discrete x-field or no x-field.\n * The width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step.\n *\n * __Default value:__ a step size based on `config.view.step`.\n */\n discreteWidth?: number | {step: number};\n /**\n * The default height when the plot has a continuous y-field for x or latitude, or has arc marks.\n *\n * __Default value:__ `200`\n */\n continuousHeight?: number;\n\n /**\n * The default height when the plot has non arc marks and either a discrete y-field or no y-field.\n * The height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step.\n *\n * __Default value:__ a step size based on `config.view.step`.\n */\n discreteHeight?: number | {step: number};\n\n /**\n * Default step size for x-/y- discrete fields.\n */\n step?: number;\n\n /**\n * Whether the view should be clipped.\n */\n clip?: boolean;\n}\n\nexport function getViewConfigContinuousSize(\n viewConfig: ViewConfig,\n channel: 'width' | 'height'\n) {\n return viewConfig[channel] ?? viewConfig[channel === 'width' ? 'continuousWidth' : 'continuousHeight']; // get width/height for backwards compatibility\n}\n\nexport function getViewConfigDiscreteStep(\n viewConfig: ViewConfig,\n channel: 'width' | 'height'\n) {\n const size = getViewConfigDiscreteSize(viewConfig, channel);\n return isStep(size) ? size.step : DEFAULT_STEP;\n}\n\nexport function getViewConfigDiscreteSize(\n viewConfig: ViewConfig,\n channel: 'width' | 'height'\n) {\n const size = viewConfig[channel] ?? viewConfig[channel === 'width' ? 'discreteWidth' : 'discreteHeight']; // get width/height for backwards compatibility\n return getFirstDefined(size, {step: viewConfig.step});\n}\n\nexport const DEFAULT_STEP = 20;\n\nexport const defaultViewConfig: ViewConfig = {\n continuousWidth: 200,\n continuousHeight: 200,\n step: DEFAULT_STEP\n};\n\nexport function isVgScheme(rangeScheme: string[] | RangeScheme): rangeScheme is RangeScheme {\n return rangeScheme && !!rangeScheme['scheme'];\n}\n\nexport type ColorConfig = Record;\n\nexport type FontSizeConfig = Record;\n\nexport interface VLOnlyConfig {\n /**\n * Default font for all text marks, titles, and labels.\n */\n font?: string;\n\n /**\n * Default color signals.\n *\n * @hidden\n */\n color?: boolean | ColorConfig;\n\n /**\n * Default font size signals.\n *\n * @hidden\n */\n fontSize?: boolean | FontSizeConfig;\n\n /**\n * Default axis and legend title for count fields.\n *\n * __Default value:__ `'Count of Records`.\n *\n * @type {string}\n */\n countTitle?: string;\n\n /**\n * Defines how Vega-Lite generates title for fields. There are three possible styles:\n * - `\"verbal\"` (Default) - displays function in a verbal style (e.g., \"Sum of field\", \"Year-month of date\", \"field (binned)\").\n * - `\"function\"` - displays function using parentheses and capitalized texts (e.g., \"SUM(field)\", \"YEARMONTH(date)\", \"BIN(field)\").\n * - `\"plain\"` - displays only the field name without functions (e.g., \"field\", \"date\", \"field\").\n */\n fieldTitle?: 'verbal' | 'functional' | 'plain';\n\n /**\n * D3 Number format for guide labels and text marks. For example `\"s\"` for SI units. Use [D3's number format pattern](https://github.com/d3/d3-format#locale_format).\n */\n numberFormat?: string;\n\n /**\n * Default time format for raw time values (without time units) in text marks, legend labels and header labels.\n *\n * __Default value:__ `\"%b %d, %Y\"`\n * __Note:__ Axes automatically determine the format for each label automatically so this config does not affect axes.\n */\n timeFormat?: string;\n\n /**\n * Allow the `formatType` property for text marks and guides to accept a custom formatter function [registered as a Vega expression](https://vega.github.io/vega-lite/usage/compile.html#format-type).\n */\n customFormatTypes?: boolean;\n\n /** Default properties for [single view plots](https://vega.github.io/vega-lite/docs/spec.html#single). */\n view?: ViewConfig;\n\n /**\n * Scale configuration determines default properties for all [scales](https://vega.github.io/vega-lite/docs/scale.html). For a full list of scale configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config).\n */\n scale?: ScaleConfig;\n\n /** An object hash for defining default properties for each type of selections. */\n selection?: SelectionConfig;\n}\n\nexport type StyleConfigIndex = Partial | Axis>> &\n MarkConfigMixins & {\n /**\n * Default style for axis, legend, and header titles.\n */\n 'guide-title'?: MarkConfig;\n\n /**\n * Default style for axis, legend, and header labels.\n */\n 'guide-label'?: MarkConfig;\n\n /**\n * Default style for chart titles\n */\n 'group-title'?: MarkConfig;\n\n /**\n * Default style for chart subtitles\n */\n 'group-subtitle'?: MarkConfig;\n };\n\nexport interface Config\n extends TopLevelProperties,\n VLOnlyConfig,\n MarkConfigMixins,\n CompositeMarkConfigMixins,\n AxisConfigMixins,\n HeaderConfigMixins,\n CompositionConfigMixins {\n /**\n * An object hash that defines default range arrays or schemes for using with scales.\n * For a full list of scale range configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config).\n */\n range?: RangeConfig;\n\n /**\n * Legend configuration, which determines default properties for all [legends](https://vega.github.io/vega-lite/docs/legend.html). For a full list of legend configuration options, please see the [corresponding section of in the legend documentation](https://vega.github.io/vega-lite/docs/legend.html#config).\n */\n legend?: LegendConfig;\n\n /**\n * Title configuration, which determines default properties for all [titles](https://vega.github.io/vega-lite/docs/title.html). For a full list of title configuration options, please see the [corresponding section of the title documentation](https://vega.github.io/vega-lite/docs/title.html#config).\n */\n title?: TitleConfig;\n\n /**\n * Projection configuration, which determines default properties for all [projections](https://vega.github.io/vega-lite/docs/projection.html). For a full list of projection configuration options, please see the [corresponding section of the projection documentation](https://vega.github.io/vega-lite/docs/projection.html#config).\n */\n projection?: ProjectionConfig;\n\n /** An object hash that defines key-value mappings to determine default properties for marks with a given [style](https://vega.github.io/vega-lite/docs/mark.html#mark-def). The keys represent styles names; the values have to be valid [mark configuration objects](https://vega.github.io/vega-lite/docs/mark.html#config). */\n style?: StyleConfigIndex;\n\n /**\n * A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property provides a global default for text marks, which is overridden by mark or style config settings, and by the lineBreak mark encoding channel. If signal-valued, either string or regular expression (regexp) values are valid.\n */\n lineBreak?: string | ES;\n\n /**\n * A boolean flag indicating if ARIA default attributes should be included for marks and guides (SVG output only). If false, the `\"aria-hidden\"` attribute will be set for all guides, removing them from the ARIA accessibility tree and Vega-Lite will not generate default descriptions for marks.\n *\n * __Default value:__ `true`.\n */\n aria?: boolean;\n\n /**\n * Locale definitions for string parsing and formatting of number and date values. The locale object should contain `number` and/or `time` properties with [locale definitions](https://vega.github.io/vega/docs/api/locale/). Locale definitions provided in the config block may be overridden by the View constructor locale option.\n */\n locale?: Locale;\n\n /**\n * @hidden\n */\n signals?: (InitSignal | NewSignal)[];\n}\n\nexport const defaultConfig: Config = {\n background: 'white',\n\n padding: 5,\n timeFormat: '%b %d, %Y',\n countTitle: 'Count of Records',\n\n view: defaultViewConfig,\n\n mark: mark.defaultMarkConfig,\n\n arc: {},\n area: {},\n bar: mark.defaultBarConfig,\n circle: {},\n geoshape: {},\n image: {},\n line: {},\n point: {},\n rect: mark.defaultRectConfig,\n rule: {color: 'black'}, // Need this to override default color in mark config\n square: {},\n text: {color: 'black'}, // Need this to override default color in mark config\n tick: mark.defaultTickConfig,\n trail: {},\n\n boxplot: {\n size: 14,\n extent: 1.5,\n box: {},\n median: {color: 'white'},\n outliers: {},\n rule: {},\n ticks: null\n },\n\n errorbar: {\n center: 'mean',\n rule: true,\n ticks: false\n },\n\n errorband: {\n band: {\n opacity: 0.3\n },\n borders: false\n },\n\n scale: defaultScaleConfig,\n\n projection: {},\n\n legend: defaultLegendConfig,\n header: {titlePadding: 10, labelPadding: 10},\n headerColumn: {},\n headerRow: {},\n headerFacet: {},\n\n selection: defaultSelectionConfig,\n style: {},\n\n title: {},\n\n facet: {spacing: DEFAULT_SPACING},\n concat: {spacing: DEFAULT_SPACING}\n};\n\n// Tableau10 color palette, copied from `vegaScale.scheme('tableau10')`\nconst tab10 = [\n '#4c78a8',\n '#f58518',\n '#e45756',\n '#72b7b2',\n '#54a24b',\n '#eeca3b',\n '#b279a2',\n '#ff9da6',\n '#9d755d',\n '#bab0ac'\n];\n\nexport const DEFAULT_FONT_SIZE = {\n text: 11,\n guideLabel: 10,\n guideTitle: 11,\n groupTitle: 13,\n groupSubtitle: 12\n};\n\nexport const DEFAULT_COLOR = {\n blue: tab10[0],\n orange: tab10[1],\n red: tab10[2],\n teal: tab10[3],\n green: tab10[4],\n yellow: tab10[5],\n purple: tab10[6],\n pink: tab10[7],\n brown: tab10[8],\n gray0: '#000',\n gray1: '#111',\n gray2: '#222',\n gray3: '#333',\n gray4: '#444',\n gray5: '#555',\n gray6: '#666',\n gray7: '#777',\n gray8: '#888',\n gray9: '#999',\n gray10: '#aaa',\n gray11: '#bbb',\n gray12: '#ccc',\n gray13: '#ddd',\n gray14: '#eee',\n gray15: '#fff'\n};\n\nexport function colorSignalConfig(color: boolean | ColorConfig = {}): Config {\n return {\n signals: [\n {\n name: 'color',\n value: isObject(color) ? {...DEFAULT_COLOR, ...color} : DEFAULT_COLOR\n }\n ],\n mark: {color: {signal: 'color.blue'}},\n rule: {color: {signal: 'color.gray0'}},\n text: {\n color: {signal: 'color.gray0'}\n },\n style: {\n 'guide-label': {\n fill: {signal: 'color.gray0'}\n },\n 'guide-title': {\n fill: {signal: 'color.gray0'}\n },\n 'group-title': {\n fill: {signal: 'color.gray0'}\n },\n 'group-subtitle': {\n fill: {signal: 'color.gray0'}\n },\n cell: {\n stroke: {signal: 'color.gray8'}\n }\n },\n axis: {\n domainColor: {signal: 'color.gray13'},\n gridColor: {signal: 'color.gray8'},\n tickColor: {signal: 'color.gray13'}\n },\n range: {\n category: [\n {signal: 'color.blue'},\n {signal: 'color.orange'},\n {signal: 'color.red'},\n {signal: 'color.teal'},\n {signal: 'color.green'},\n {signal: 'color.yellow'},\n {signal: 'color.purple'},\n {signal: 'color.pink'},\n {signal: 'color.brown'},\n {signal: 'color.grey8'}\n ]\n }\n };\n}\n\nexport function fontSizeSignalConfig(fontSize: boolean | FontSizeConfig): Config {\n return {\n signals: [\n {\n name: 'fontSize',\n value: isObject(fontSize) ? {...DEFAULT_FONT_SIZE, ...fontSize} : DEFAULT_FONT_SIZE\n }\n ],\n text: {\n fontSize: {signal: 'fontSize.text'}\n },\n style: {\n 'guide-label': {\n fontSize: {signal: 'fontSize.guideLabel'}\n },\n 'guide-title': {\n fontSize: {signal: 'fontSize.guideTitle'}\n },\n 'group-title': {\n fontSize: {signal: 'fontSize.groupTitle'}\n },\n 'group-subtitle': {\n fontSize: {signal: 'fontSize.groupSubtitle'}\n }\n }\n };\n}\n\nexport function fontConfig(font: string): Config {\n return {\n text: {font},\n style: {\n 'guide-label': {font},\n 'guide-title': {font},\n 'group-title': {font},\n 'group-subtitle': {font}\n }\n };\n}\n\nfunction getAxisConfigInternal(axisConfig: AxisConfig) {\n const props = keys(axisConfig || {});\n const axisConfigInternal: AxisConfig = {};\n for (const prop of props) {\n const val = axisConfig[prop];\n axisConfigInternal[prop as any] = isConditionalAxisValue(val)\n ? signalOrValueRefWithCondition(val)\n : signalRefOrValue(val);\n }\n return axisConfigInternal;\n}\n\nfunction getStyleConfigInternal(styleConfig: StyleConfigIndex) {\n const props = keys(styleConfig);\n\n const styleConfigInternal: StyleConfigIndex = {};\n for (const prop of props) {\n // We need to cast to cheat a bit here since styleConfig can be either mark config or axis config\n styleConfigInternal[prop as any] = getAxisConfigInternal(styleConfig[prop] as any);\n }\n return styleConfigInternal;\n}\n\nconst configPropsWithExpr = [\n ...MARK_CONFIGS,\n ...AXIS_CONFIGS,\n ...HEADER_CONFIGS,\n 'background',\n 'padding',\n 'legend',\n 'lineBreak',\n 'scale',\n 'style',\n 'title',\n 'view'\n] as const;\n\n/**\n * Merge specified config with default config and config for the `color` flag,\n * then replace all expressions with signals\n */\nexport function initConfig(specifiedConfig: Config = {}): Config {\n const {color, font, fontSize, ...restConfig} = specifiedConfig;\n const mergedConfig = mergeConfig(\n {},\n defaultConfig,\n font ? fontConfig(font) : {},\n color ? colorSignalConfig(color) : {},\n fontSize ? fontSizeSignalConfig(fontSize) : {},\n restConfig || {}\n );\n const outputConfig: Config = omit(mergedConfig, configPropsWithExpr);\n\n for (const prop of ['background', 'lineBreak', 'padding']) {\n if (mergedConfig[prop]) {\n outputConfig[prop] = signalRefOrValue(mergedConfig[prop]);\n }\n }\n\n for (const markConfigType of mark.MARK_CONFIGS) {\n if (mergedConfig[markConfigType]) {\n // FIXME: outputConfig[markConfigType] expects that types are replaced recursively but replaceExprRef only replaces one level deep\n outputConfig[markConfigType] = replaceExprRef(mergedConfig[markConfigType]) as any;\n }\n }\n\n for (const axisConfigType of AXIS_CONFIGS) {\n if (mergedConfig[axisConfigType]) {\n outputConfig[axisConfigType] = getAxisConfigInternal(mergedConfig[axisConfigType]);\n }\n }\n\n for (const headerConfigType of HEADER_CONFIGS) {\n if (mergedConfig[headerConfigType]) {\n outputConfig[headerConfigType] = replaceExprRef(mergedConfig[headerConfigType]);\n }\n }\n\n if (mergedConfig.legend) {\n outputConfig.legend = replaceExprRef(mergedConfig.legend);\n }\n\n if (mergedConfig.scale) {\n outputConfig.scale = replaceExprRef(mergedConfig.scale);\n }\n\n if (mergedConfig.style) {\n outputConfig.style = getStyleConfigInternal(mergedConfig.style);\n }\n\n if (mergedConfig.title) {\n outputConfig.title = replaceExprRef(mergedConfig.title);\n }\n\n if (mergedConfig.view) {\n outputConfig.view = replaceExprRef(mergedConfig.view);\n }\n\n return outputConfig;\n}\n\nconst MARK_STYLES = ['view', ...PRIMITIVE_MARKS] as ('view' | Mark)[];\n\nconst VL_ONLY_CONFIG_PROPERTIES: (keyof Config)[] = [\n 'color',\n 'fontSize',\n 'background', // We apply background to the spec directly.\n 'padding',\n 'facet',\n 'concat',\n 'numberFormat',\n 'timeFormat',\n 'countTitle',\n 'header',\n\n 'axisQuantitative',\n 'axisTemporal',\n 'axisDiscrete',\n 'axisPoint',\n\n 'axisXBand',\n 'axisXPoint',\n 'axisXDiscrete',\n 'axisXQuantitative',\n 'axisXTemporal',\n\n 'axisYBand',\n 'axisYPoint',\n 'axisYDiscrete',\n 'axisYQuantitative',\n 'axisYTemporal',\n\n 'scale',\n 'selection',\n 'overlay' as keyof Config // FIXME: Redesign and unhide this\n];\n\nconst VL_ONLY_ALL_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX = {\n view: ['continuousWidth', 'continuousHeight', 'discreteWidth', 'discreteHeight', 'step'],\n ...VL_ONLY_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX\n};\n\nexport function stripAndRedirectConfig(config: Config) {\n config = duplicate(config);\n\n for (const prop of VL_ONLY_CONFIG_PROPERTIES) {\n delete config[prop];\n }\n\n if (config.axis) {\n // delete condition axis config\n for (const prop in config.axis) {\n if (isConditionalAxisValue(config.axis[prop])) {\n delete config.axis[prop];\n }\n }\n }\n\n if (config.legend) {\n for (const prop of VL_ONLY_LEGEND_CONFIG) {\n delete config.legend[prop];\n }\n }\n\n // Remove Vega-Lite only generic mark config\n if (config.mark) {\n for (const prop of VL_ONLY_MARK_CONFIG_PROPERTIES) {\n delete config.mark[prop];\n }\n\n if (config.mark.tooltip && isObject(config.mark.tooltip)) {\n delete config.mark.tooltip;\n }\n }\n\n if (config.params) {\n config.signals = (config.signals || []).concat(assembleParameterSignals(config.params));\n delete config.params;\n }\n\n for (const markType of MARK_STYLES) {\n // Remove Vega-Lite-only mark config\n for (const prop of VL_ONLY_MARK_CONFIG_PROPERTIES) {\n delete config[markType][prop];\n }\n\n // Remove Vega-Lite only mark-specific config\n const vlOnlyMarkSpecificConfigs = VL_ONLY_ALL_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX[markType];\n if (vlOnlyMarkSpecificConfigs) {\n for (const prop of vlOnlyMarkSpecificConfigs) {\n delete config[markType][prop];\n }\n }\n\n // Redirect mark config to config.style so that mark config only affect its own mark type\n // without affecting other marks that share the same underlying Vega marks.\n // For example, config.rect should not affect bar marks.\n redirectConfigToStyleConfig(config, markType);\n }\n\n for (const m of getAllCompositeMarks()) {\n // Clean up the composite mark config as we don't need them in the output specs anymore\n delete config[m];\n }\n\n redirectTitleConfig(config);\n\n // Remove empty config objects.\n for (const prop in config) {\n if (isObject(config[prop]) && isEmpty(config[prop])) {\n delete config[prop];\n }\n }\n\n return isEmpty(config) ? undefined : config;\n}\n\n/**\n *\n * Redirect config.title -- so that title config do not affect header labels,\n * which also uses `title` directive to implement.\n *\n * For subtitle configs in config.title, keep them in config.title as header titles never have subtitles.\n */\nfunction redirectTitleConfig(config: Config) {\n const {titleMarkConfig, subtitleMarkConfig, subtitle} = extractTitleConfig(config.title);\n\n // set config.style if title/subtitleMarkConfig is not an empty object\n if (!isEmpty(titleMarkConfig)) {\n config.style['group-title'] = {\n ...config.style['group-title'],\n ...titleMarkConfig // config.title has higher precedence than config.style.group-title in Vega\n };\n }\n if (!isEmpty(subtitleMarkConfig)) {\n config.style['group-subtitle'] = {\n ...config.style['group-subtitle'],\n ...subtitleMarkConfig\n };\n }\n\n // subtitle part can stay in config.title since header titles do not use subtitle\n if (!isEmpty(subtitle)) {\n config.title = subtitle;\n } else {\n delete config.title;\n }\n}\n\nfunction redirectConfigToStyleConfig(\n config: Config,\n prop: Mark | 'view' | string, // string = composite mark\n toProp?: string,\n compositeMarkPart?: string\n) {\n const propConfig: MarkConfig = compositeMarkPart ? config[prop][compositeMarkPart] : config[prop];\n\n if (prop === 'view') {\n toProp = 'cell'; // View's default style is \"cell\"\n }\n\n const style: MarkConfig = {\n ...propConfig,\n ...(config.style[toProp ?? prop] as MarkConfig)\n };\n\n // set config.style if it is not an empty object\n if (!isEmpty(style)) {\n config.style[toProp ?? prop] = style;\n }\n\n if (!compositeMarkPart) {\n // For composite mark, so don't delete the whole config yet as we have to do multiple redirections.\n delete config[prop];\n }\n}\n","import {Field} from '../channeldef';\nimport {SharedCompositeEncoding} from '../compositemark';\nimport {ExprRef} from '../expr';\nimport {Projection} from '../projection';\nimport {BaseSpec, FrameMixins, ResolveMixins} from './base';\nimport {GenericUnitSpec, NormalizedUnitSpec, UnitSpec} from './unit';\n\n/**\n * Base interface for a layer specification.\n */\nexport interface GenericLayerSpec> extends BaseSpec, FrameMixins, ResolveMixins {\n /**\n * Layer or single view specifications to be layered.\n *\n * __Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.\n */\n layer: (GenericLayerSpec | U)[];\n}\n\n/**\n * A full layered plot specification, which may contains `encoding` and `projection` properties that will be applied to underlying unit (single-view) specifications.\n */\nexport interface LayerSpec extends BaseSpec, FrameMixins, ResolveMixins {\n /**\n * Layer or single view specifications to be layered.\n *\n * __Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.\n */\n layer: (LayerSpec | UnitSpec)[];\n\n /**\n * A shared key-value mapping between encoding channels and definition of fields in the underlying layers.\n */\n encoding?: SharedCompositeEncoding;\n\n /**\n * An object defining properties of the geographic projection shared by underlying layers.\n */\n projection?: Projection;\n}\n\n/**\n * A layered specification without any shortcut/expansion syntax.\n */\nexport type NormalizedLayerSpec = GenericLayerSpec;\n\nexport function isLayerSpec(spec: BaseSpec): spec is GenericLayerSpec {\n return 'layer' in spec;\n}\n","import {GenericSpec} from '.';\nimport * as log from '../log';\nimport {Field, FieldName} from '../channeldef';\nimport {\n GenericConcatSpec,\n GenericHConcatSpec,\n GenericVConcatSpec,\n isConcatSpec,\n isHConcatSpec,\n isVConcatSpec\n} from './concat';\nimport {GenericFacetSpec, isFacetSpec} from './facet';\nimport {GenericLayerSpec, isLayerSpec} from './layer';\nimport {isRepeatSpec, RepeatSpec} from './repeat';\nimport {GenericUnitSpec, isUnitSpec, NormalizedUnitSpec} from './unit';\n\nexport abstract class SpecMapper<\n P,\n UI extends GenericUnitSpec,\n LI extends GenericLayerSpec = GenericLayerSpec,\n UO extends GenericUnitSpec = NormalizedUnitSpec,\n RO extends RepeatSpec = never,\n FO extends Field = FieldName\n> {\n public map(spec: GenericSpec, params: P): GenericSpec, RO, FO> {\n if (isFacetSpec(spec)) {\n return this.mapFacet(spec, params);\n } else if (isRepeatSpec(spec)) {\n return this.mapRepeat(spec, params);\n } else if (isHConcatSpec(spec)) {\n return this.mapHConcat(spec, params);\n } else if (isVConcatSpec(spec)) {\n return this.mapVConcat(spec, params);\n } else if (isConcatSpec(spec)) {\n return this.mapConcat(spec, params);\n } else {\n return this.mapLayerOrUnit(spec, params);\n }\n }\n\n public mapLayerOrUnit(spec: UI | LI, params: P): UO | GenericLayerSpec {\n if (isLayerSpec(spec)) {\n return this.mapLayer(spec, params);\n } else if (isUnitSpec(spec)) {\n return this.mapUnit(spec, params);\n }\n throw new Error(log.message.invalidSpec(spec));\n }\n\n public abstract mapUnit(spec: UI, params: P): UO | GenericLayerSpec;\n\n protected mapLayer(spec: LI, params: P): GenericLayerSpec {\n return {\n ...spec,\n layer: spec.layer.map(subspec => this.mapLayerOrUnit(subspec, params))\n };\n }\n\n protected mapHConcat(\n spec: GenericHConcatSpec>,\n params: P\n ): GenericHConcatSpec, RO, FO>> {\n return {\n ...spec,\n hconcat: spec.hconcat.map(subspec => this.map(subspec, params))\n };\n }\n\n protected mapVConcat(\n spec: GenericVConcatSpec>,\n params: P\n ): GenericVConcatSpec, RO, FO>> {\n return {\n ...spec,\n vconcat: spec.vconcat.map(subspec => this.map(subspec, params))\n };\n }\n\n protected mapConcat(\n spec: GenericConcatSpec>,\n params: P\n ): GenericConcatSpec, RO, FO>> {\n const {concat, ...rest} = spec;\n\n return {\n ...rest,\n concat: concat.map(subspec => this.map(subspec, params))\n };\n }\n\n protected mapFacet(spec: GenericFacetSpec, params: P): GenericFacetSpec, FO> {\n return {\n // as any is required here since TS cannot infer that FO may only be FieldName or Field, but not RepeatRef\n ...(spec as any),\n // TODO: remove \"any\" once we support all facet listed in https://github.com/vega/vega-lite/issues/2760\n spec: this.map(spec.spec, params) as any\n };\n }\n\n protected mapRepeat(spec: RepeatSpec, params: P): GenericSpec {\n return {\n ...spec,\n // as any is required here since TS cannot infer that the output type satisfies the input type\n spec: this.map(spec.spec as any, params)\n };\n }\n}\n","import {isArray} from 'vega-util';\nimport {LayerSpec, NonNormalizedSpec} from '.';\nimport {Field} from '../channeldef';\nimport {BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins} from './base';\nimport {UnitSpec} from './unit';\n\nexport interface RepeatMapping {\n /**\n * An array of fields to be repeated vertically.\n */\n row?: string[];\n\n /**\n * An array of fields to be repeated horizontally.\n */\n column?: string[];\n}\n\nexport interface LayerRepeatMapping extends RepeatMapping {\n /**\n * An array of fields to be repeated as layers.\n */\n layer: string[];\n}\n\nexport type RepeatSpec = NonLayerRepeatSpec | LayerRepeatSpec;\n\n/**\n * Base interface for a repeat specification.\n */\nexport interface NonLayerRepeatSpec extends BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins {\n /**\n * Definition for fields to be repeated. One of:\n * 1) An array of fields to be repeated. If `\"repeat\"` is an array, the field can be referred to as `{\"repeat\": \"repeat\"}`. The repeated views are laid out in a wrapped row. You can set the number of columns to control the wrapping.\n * 2) An object that maps `\"row\"` and/or `\"column\"` to the listed fields to be repeated along the particular orientations. The objects `{\"repeat\": \"row\"}` and `{\"repeat\": \"column\"}` can be used to refer to the repeated field respectively.\n */\n repeat: string[] | RepeatMapping;\n\n /**\n * A specification of the view that gets repeated.\n */\n spec: NonNormalizedSpec;\n}\n\nexport interface LayerRepeatSpec extends BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins {\n /**\n * Definition for fields to be repeated. One of:\n * 1) An array of fields to be repeated. If `\"repeat\"` is an array, the field can be referred to as `{\"repeat\": \"repeat\"}`. The repeated views are laid out in a wrapped row. You can set the number of columns to control the wrapping.\n * 2) An object that maps `\"row\"` and/or `\"column\"` to the listed fields to be repeated along the particular orientations. The objects `{\"repeat\": \"row\"}` and `{\"repeat\": \"column\"}` can be used to refer to the repeated field respectively.\n */\n repeat: LayerRepeatMapping;\n\n /**\n * A specification of the view that gets repeated.\n */\n spec: LayerSpec | UnitSpec;\n}\n\nexport function isRepeatSpec(spec: BaseSpec): spec is RepeatSpec {\n return 'repeat' in spec;\n}\n\nexport function isLayerRepeatSpec(spec: RepeatSpec): spec is LayerRepeatSpec {\n return !isArray(spec.repeat) && spec.repeat['layer'];\n}\n","import {array, isBoolean} from 'vega-util';\nimport {SUM_OPS} from './aggregate';\nimport {getSecondaryRangeChannel, NonPositionChannel, NONPOSITION_CHANNELS} from './channel';\nimport {\n channelDefType,\n FieldName,\n getFieldDef,\n isFieldDef,\n isFieldOrDatumDef,\n PositionDatumDef,\n PositionFieldDef,\n TypedFieldDef,\n vgField\n} from './channeldef';\nimport {channelHasField, Encoding, isAggregate} from './encoding';\nimport * as log from './log';\nimport {\n ARC,\n AREA,\n BAR,\n CIRCLE,\n isMarkDef,\n isPathMark,\n LINE,\n Mark,\n MarkDef,\n POINT,\n RULE,\n SQUARE,\n TEXT,\n TICK\n} from './mark';\nimport {ScaleType} from './scale';\nimport {contains} from './util';\n\nconst STACK_OFFSET_INDEX = {\n zero: 1,\n center: 1,\n normalize: 1\n} as const;\n\nexport type StackOffset = keyof typeof STACK_OFFSET_INDEX;\n\nexport function isStackOffset(s: string): s is StackOffset {\n return s in STACK_OFFSET_INDEX;\n}\n\nexport interface StackProperties {\n /** Dimension axis of the stack. */\n groupbyChannel?: 'x' | 'y' | 'theta' | 'radius';\n\n /** Field for groupbyChannel. */\n groupbyField?: FieldName;\n\n /** Measure axis of the stack. */\n fieldChannel: 'x' | 'y' | 'theta' | 'radius';\n\n /** Stack-by fields e.g., color, detail */\n stackBy: {\n fieldDef: TypedFieldDef;\n channel: NonPositionChannel;\n }[];\n\n /**\n * See `stack` property of Position Field Def.\n */\n offset: StackOffset;\n\n /**\n * Whether this stack will produce impute transform\n */\n impute: boolean;\n}\n\nexport const STACKABLE_MARKS = new Set([ARC, BAR, AREA, RULE, POINT, CIRCLE, SQUARE, LINE, TEXT, TICK]);\nexport const STACK_BY_DEFAULT_MARKS = new Set([BAR, AREA, ARC]);\n\nfunction potentialStackedChannel(\n encoding: Encoding,\n x: 'x' | 'theta'\n): 'x' | 'y' | 'theta' | 'radius' | undefined {\n const y = x === 'x' ? 'y' : 'radius';\n\n const xDef = encoding[x];\n const yDef = encoding[y];\n\n if (isFieldDef(xDef) && isFieldDef(yDef)) {\n if (channelDefType(xDef) === 'quantitative' && channelDefType(yDef) === 'quantitative') {\n if (xDef.stack) {\n return x;\n } else if (yDef.stack) {\n return y;\n }\n const xAggregate = isFieldDef(xDef) && !!xDef.aggregate;\n const yAggregate = isFieldDef(yDef) && !!yDef.aggregate;\n // if there is no explicit stacking, only apply stack if there is only one aggregate for x or y\n if (xAggregate !== yAggregate) {\n return xAggregate ? x : y;\n } else {\n const xScale = xDef.scale?.type;\n const yScale = yDef.scale?.type;\n\n if (xScale && xScale !== 'linear') {\n return y;\n } else if (yScale && yScale !== 'linear') {\n return x;\n }\n }\n } else if (channelDefType(xDef) === 'quantitative') {\n return x;\n } else if (channelDefType(yDef) === 'quantitative') {\n return y;\n }\n } else if (channelDefType(xDef) === 'quantitative') {\n return x;\n } else if (channelDefType(yDef) === 'quantitative') {\n return y;\n }\n return undefined;\n}\n\nfunction getDimensionChannel(channel: 'x' | 'y' | 'theta' | 'radius') {\n switch (channel) {\n case 'x':\n return 'y';\n case 'y':\n return 'x';\n case 'theta':\n return 'radius';\n case 'radius':\n return 'theta';\n }\n}\n\n// Note: CompassQL uses this method and only pass in required properties of each argument object.\n// If required properties change, make sure to update CompassQL.\nexport function stack(\n m: Mark | MarkDef,\n encoding: Encoding,\n opt: {\n disallowNonLinearStack?: boolean; // This option is for CompassQL\n } = {}\n): StackProperties {\n const mark = isMarkDef(m) ? m.type : m;\n // Should have stackable mark\n if (!STACKABLE_MARKS.has(mark)) {\n return null;\n }\n\n // Run potential stacked twice, one for Cartesian and another for Polar,\n // so text marks can be stacked in any of the coordinates.\n\n // Note: The logic here is not perfectly correct. If we want to support stacked dot plots where each dot is a pie chart with label, we have to change the stack logic here to separate Cartesian stacking for polar stacking.\n // However, since we probably never want to do that, let's just note the limitation here.\n const fieldChannel = potentialStackedChannel(encoding, 'x') || potentialStackedChannel(encoding, 'theta');\n\n if (!fieldChannel) {\n return null;\n }\n\n const stackedFieldDef = encoding[fieldChannel] as PositionFieldDef | PositionDatumDef;\n const stackedField = isFieldDef(stackedFieldDef) ? vgField(stackedFieldDef, {}) : undefined;\n\n let dimensionChannel: 'x' | 'y' | 'theta' | 'radius' = getDimensionChannel(fieldChannel);\n let dimensionDef = encoding[dimensionChannel];\n\n let dimensionField = isFieldDef(dimensionDef) ? vgField(dimensionDef, {}) : undefined;\n\n // avoid grouping by the stacked field\n if (dimensionField === stackedField) {\n dimensionField = undefined;\n dimensionDef = undefined;\n dimensionChannel = undefined;\n }\n\n // Should have grouping level of detail that is different from the dimension field\n const stackBy = NONPOSITION_CHANNELS.reduce((sc, channel) => {\n // Ignore tooltip in stackBy (https://github.com/vega/vega-lite/issues/4001)\n if (channel !== 'tooltip' && channelHasField(encoding, channel)) {\n const channelDef = encoding[channel];\n for (const cDef of array(channelDef)) {\n const fieldDef = getFieldDef(cDef);\n if (fieldDef.aggregate) {\n continue;\n }\n\n // Check whether the channel's field is identical to x/y's field or if the channel is a repeat\n const f = vgField(fieldDef, {});\n if (\n // if fielddef is a repeat, just include it in the stack by\n !f ||\n // otherwise, the field must be different from x and y fields.\n f !== dimensionField\n ) {\n sc.push({channel, fieldDef});\n }\n }\n }\n return sc;\n }, []);\n\n // Automatically determine offset\n let offset: StackOffset;\n if (stackedFieldDef.stack !== undefined) {\n if (isBoolean(stackedFieldDef.stack)) {\n offset = stackedFieldDef.stack ? 'zero' : null;\n } else {\n offset = stackedFieldDef.stack;\n }\n } else if (STACK_BY_DEFAULT_MARKS.has(mark)) {\n offset = 'zero';\n }\n\n if (!offset || !isStackOffset(offset)) {\n return null;\n }\n\n if (isAggregate(encoding) && stackBy.length === 0) {\n return null;\n }\n\n // warn when stacking non-linear\n if (stackedFieldDef?.scale?.type && stackedFieldDef?.scale?.type !== ScaleType.LINEAR) {\n if (opt.disallowNonLinearStack) {\n return null;\n } else {\n log.warn(log.message.cannotStackNonLinearScale(stackedFieldDef.scale.type));\n }\n }\n\n // Check if it is a ranged mark\n if (isFieldOrDatumDef(encoding[getSecondaryRangeChannel(fieldChannel)])) {\n if (stackedFieldDef.stack !== undefined) {\n log.warn(log.message.cannotStackRangedMark(fieldChannel));\n }\n return null;\n }\n\n // Warn if stacking non-summative aggregate\n if (isFieldDef(stackedFieldDef) && stackedFieldDef.aggregate && !contains(SUM_OPS, stackedFieldDef.aggregate)) {\n log.warn(log.message.stackNonSummativeAggregate(stackedFieldDef.aggregate));\n }\n\n return {\n groupbyChannel: dimensionDef ? dimensionChannel : undefined,\n groupbyField: dimensionField,\n fieldChannel,\n impute: stackedFieldDef.impute === null ? false : isPathMark(mark),\n stackBy,\n offset\n };\n}\n","import {SignalRef} from 'vega';\nimport {isObject} from 'vega-util';\nimport {Config} from '../config';\nimport {Encoding, normalizeEncoding} from '../encoding';\nimport {ExprRef} from '../expr';\nimport {AreaConfig, isMarkDef, LineConfig, Mark, MarkConfig, MarkDef} from '../mark';\nimport {GenericUnitSpec, NormalizedUnitSpec} from '../spec';\nimport {isUnitSpec} from '../spec/unit';\nimport {stack} from '../stack';\nimport {keys, omit, pick} from '../util';\nimport {NonFacetUnitNormalizer, NormalizeLayerOrUnit, NormalizerParams} from './base';\n\ntype UnitSpecWithPathOverlay = GenericUnitSpec, Mark | MarkDef<'line' | 'area' | 'rule' | 'trail'>>;\n\nfunction dropLineAndPoint(markDef: MarkDef): MarkDef | Mark {\n const {point: _point, line: _line, ...mark} = markDef;\n\n return keys(mark).length > 1 ? mark : mark.type;\n}\n\nfunction dropLineAndPointFromConfig(config: Config) {\n for (const mark of ['line', 'area', 'rule', 'trail'] as const) {\n if (config[mark]) {\n config = {\n ...config,\n // TODO: remove as any\n [mark]: omit(config[mark], ['point', 'line'] as any)\n };\n }\n }\n return config;\n}\n\nfunction getPointOverlay(\n markDef: MarkDef,\n markConfig: LineConfig = {},\n encoding: Encoding\n): MarkConfig {\n if (markDef.point === 'transparent') {\n return {opacity: 0};\n } else if (markDef.point) {\n // truthy : true or object\n return isObject(markDef.point) ? markDef.point : {};\n } else if (markDef.point !== undefined) {\n // false or null\n return null;\n } else {\n // undefined (not disabled)\n if (markConfig.point || encoding.shape) {\n // enable point overlay if config[mark].point is truthy or if encoding.shape is provided\n return isObject(markConfig.point) ? markConfig.point : {};\n }\n // markDef.point is defined as falsy\n return undefined;\n }\n}\n\nfunction getLineOverlay(\n markDef: MarkDef,\n markConfig: AreaConfig = {}\n): MarkConfig {\n if (markDef.line) {\n // true or object\n return markDef.line === true ? {} : markDef.line;\n } else if (markDef.line !== undefined) {\n // false or null\n return null;\n } else {\n // undefined (not disabled)\n if (markConfig.line) {\n // enable line overlay if config[mark].line is truthy\n return markConfig.line === true ? {} : markConfig.line;\n }\n // markDef.point is defined as falsy\n return undefined;\n }\n}\n\nexport class PathOverlayNormalizer implements NonFacetUnitNormalizer {\n public name = 'path-overlay';\n\n public hasMatchingType(spec: GenericUnitSpec, config: Config): spec is UnitSpecWithPathOverlay {\n if (isUnitSpec(spec)) {\n const {mark, encoding} = spec;\n const markDef = isMarkDef(mark) ? mark : {type: mark};\n switch (markDef.type) {\n case 'line':\n case 'rule':\n case 'trail':\n return !!getPointOverlay(markDef, config[markDef.type], encoding);\n case 'area':\n return (\n // false / null are also included as we want to remove the properties\n !!getPointOverlay(markDef, config[markDef.type], encoding) ||\n !!getLineOverlay(markDef, config[markDef.type])\n );\n }\n }\n return false;\n }\n\n public run(spec: UnitSpecWithPathOverlay, normParams: NormalizerParams, normalize: NormalizeLayerOrUnit) {\n const {config} = normParams;\n const {params, projection, mark, encoding: e, ...outerSpec} = spec;\n\n // Need to call normalizeEncoding because we need the inferred types to correctly determine stack\n const encoding = normalizeEncoding(e, config);\n\n const markDef: MarkDef = isMarkDef(mark) ? mark : {type: mark};\n\n const pointOverlay = getPointOverlay(markDef, config[markDef.type], encoding);\n const lineOverlay = markDef.type === 'area' && getLineOverlay(markDef, config[markDef.type]);\n\n const layer: NormalizedUnitSpec[] = [\n {\n ...(params ? {params} : {}),\n mark: dropLineAndPoint({\n // TODO: extract this 0.7 to be shared with default opacity for point/tick/...\n ...(markDef.type === 'area' && markDef.opacity === undefined && markDef.fillOpacity === undefined\n ? {opacity: 0.7}\n : {}),\n ...markDef\n }),\n // drop shape from encoding as this might be used to trigger point overlay\n encoding: omit(encoding, ['shape'])\n }\n ];\n\n // FIXME: determine rules for applying selections.\n\n // Need to copy stack config to overlayed layer\n const stackProps = stack(markDef, encoding);\n\n let overlayEncoding = encoding;\n if (stackProps) {\n const {fieldChannel: stackFieldChannel, offset} = stackProps;\n overlayEncoding = {\n ...encoding,\n [stackFieldChannel]: {\n ...encoding[stackFieldChannel],\n ...(offset ? {stack: offset} : {})\n }\n };\n }\n\n if (lineOverlay) {\n layer.push({\n ...(projection ? {projection} : {}),\n mark: {\n type: 'line',\n ...pick(markDef, ['clip', 'interpolate', 'tension', 'tooltip']),\n ...lineOverlay\n },\n encoding: overlayEncoding\n });\n }\n if (pointOverlay) {\n layer.push({\n ...(projection ? {projection} : {}),\n mark: {\n type: 'point',\n opacity: 1,\n filled: true,\n ...pick(markDef, ['clip', 'tooltip']),\n ...pointOverlay\n },\n encoding: overlayEncoding\n });\n }\n\n return normalize(\n {\n ...outerSpec,\n layer\n },\n {\n ...normParams,\n config: dropLineAndPointFromConfig(config)\n }\n );\n }\n}\n","import {hasOwnProperty, isArray} from 'vega-util';\nimport {\n ChannelDef,\n DatumDef,\n Field,\n FieldDef,\n FieldName,\n hasConditionalFieldOrDatumDef,\n isConditionalDef,\n isFieldDef,\n isFieldOrDatumDef,\n isRepeatRef,\n isSortableFieldDef,\n ScaleFieldDef,\n ValueDef\n} from '../channeldef';\nimport {Encoding} from '../encoding';\nimport * as log from '../log';\nimport {isSortField} from '../sort';\nimport {FacetFieldDef, FacetMapping, isFacetMapping} from '../spec/facet';\n\nexport interface RepeaterValue {\n row?: string;\n column?: string;\n\n repeat?: string;\n\n layer?: string;\n}\n\nexport function replaceRepeaterInFacet(\n facet: FacetFieldDef | FacetMapping,\n repeater: RepeaterValue\n): FacetFieldDef | FacetMapping {\n if (!repeater) {\n return facet as FacetFieldDef;\n }\n\n if (isFacetMapping(facet)) {\n return replaceRepeaterInMapping(facet, repeater) as FacetMapping;\n }\n return replaceRepeaterInFieldDef(facet, repeater) as FacetFieldDef;\n}\n\nexport function replaceRepeaterInEncoding>(\n encoding: E,\n repeater: RepeaterValue\n): Encoding {\n if (!repeater) {\n return encoding as Encoding;\n }\n\n return replaceRepeaterInMapping(encoding, repeater) as Encoding;\n}\n\n/**\n * Replaces repeated value and returns if the repeated value is valid.\n */\nfunction replaceRepeatInProp(prop: keyof T, o: T, repeater: RepeaterValue): T {\n const val = o[prop];\n if (isRepeatRef(val)) {\n if (val.repeat in repeater) {\n return {...o, [prop]: repeater[val.repeat]};\n } else {\n log.warn(log.message.noSuchRepeatedValue(val.repeat));\n return undefined;\n }\n }\n return o;\n}\n\n/**\n * Replace repeater values in a field def with the concrete field name.\n */\n\nfunction replaceRepeaterInFieldDef(fieldDef: FieldDef, repeater: RepeaterValue) {\n fieldDef = replaceRepeatInProp('field', fieldDef, repeater);\n\n if (fieldDef === undefined) {\n // the field def should be ignored\n return undefined;\n } else if (fieldDef === null) {\n return null;\n }\n\n if (isSortableFieldDef(fieldDef) && isSortField(fieldDef.sort)) {\n const sort = replaceRepeatInProp('field', fieldDef.sort, repeater);\n fieldDef = {\n ...fieldDef,\n ...(sort ? {sort} : {})\n };\n }\n\n return fieldDef as ScaleFieldDef;\n}\n\nfunction replaceRepeaterInFieldOrDatumDef(def: FieldDef | DatumDef, repeater: RepeaterValue) {\n if (isFieldDef(def)) {\n return replaceRepeaterInFieldDef(def, repeater);\n } else {\n const datumDef = replaceRepeatInProp('datum', def, repeater);\n if (datumDef !== def && !datumDef.type) {\n datumDef.type = 'nominal';\n }\n return datumDef;\n }\n}\n\nfunction replaceRepeaterInChannelDef(channelDef: ChannelDef, repeater: RepeaterValue) {\n if (isFieldOrDatumDef(channelDef)) {\n const fd = replaceRepeaterInFieldOrDatumDef(channelDef, repeater);\n if (fd) {\n return fd;\n } else if (isConditionalDef>(channelDef)) {\n return {condition: channelDef.condition};\n }\n } else {\n if (hasConditionalFieldOrDatumDef(channelDef)) {\n const fd = replaceRepeaterInFieldOrDatumDef(channelDef.condition, repeater);\n if (fd) {\n return {\n ...channelDef,\n condition: fd\n } as ChannelDef;\n } else {\n const {condition, ...channelDefWithoutCondition} = channelDef;\n return channelDefWithoutCondition as ChannelDef;\n }\n }\n return channelDef as ValueDef;\n }\n return undefined;\n}\n\ntype EncodingOrFacet = Encoding | FacetMapping;\n\nfunction replaceRepeaterInMapping(\n mapping: EncodingOrFacet,\n repeater: RepeaterValue\n): EncodingOrFacet {\n const out: EncodingOrFacet = {};\n for (const channel in mapping) {\n if (hasOwnProperty(mapping, channel)) {\n const channelDef: ChannelDef | ChannelDef[] = mapping[channel];\n\n if (isArray(channelDef)) {\n // array cannot have condition\n out[channel] = (channelDef as ChannelDef[]) // somehow we need to cast it here\n .map(cd => replaceRepeaterInChannelDef(cd, repeater))\n .filter(cd => cd);\n } else {\n const cd = replaceRepeaterInChannelDef(channelDef, repeater);\n if (cd !== undefined) {\n out[channel] = cd;\n }\n }\n }\n }\n return out;\n}\n","import {isObject} from 'vega-util';\nimport {isBinned} from '../bin';\nimport {getMainRangeChannel, SECONDARY_RANGE_CHANNEL} from '../channel';\nimport {Field, isDatumDef, isFieldDef} from '../channeldef';\nimport {Encoding} from '../encoding';\nimport * as log from '../log';\nimport {isMarkDef} from '../mark';\nimport {GenericSpec} from '../spec';\nimport {GenericUnitSpec, isUnitSpec} from '../spec/unit';\nimport {NonFacetUnitNormalizer, NormalizeLayerOrUnit, NormalizerParams} from './base';\n\ninterface EncodingX2Mixins {\n x2: Encoding['x2'];\n}\n\ninterface EncodingY2Mixins {\n y2: Encoding['y2'];\n}\n\ntype RangedLineSpec = GenericUnitSpec & (EncodingX2Mixins | EncodingY2Mixins), 'line' | {mark: 'line'}>;\n\nexport class RuleForRangedLineNormalizer implements NonFacetUnitNormalizer {\n public name = 'RuleForRangedLine';\n\n public hasMatchingType(spec: GenericSpec): spec is RangedLineSpec {\n if (isUnitSpec(spec)) {\n const {encoding, mark} = spec;\n if (mark === 'line' || (isMarkDef(mark) && mark.type === 'line')) {\n for (const channel of SECONDARY_RANGE_CHANNEL) {\n const mainChannel = getMainRangeChannel(channel);\n const mainChannelDef = encoding[mainChannel];\n\n if (encoding[channel]) {\n if ((isFieldDef(mainChannelDef) && !isBinned(mainChannelDef.bin)) || isDatumDef(mainChannelDef)) {\n return true;\n }\n }\n }\n }\n }\n return false;\n }\n\n public run(spec: RangedLineSpec, params: NormalizerParams, normalize: NormalizeLayerOrUnit) {\n const {encoding, mark} = spec;\n log.warn(log.message.lineWithRange(!!encoding.x2, !!encoding.y2));\n\n console.log(mark);\n\n return normalize(\n {\n ...spec,\n mark: isObject(mark) ? {...mark, type: 'rule'} : 'rule'\n },\n params\n );\n }\n}\n","import {SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {COLUMN, FACET, ROW} from '../channel';\nimport {Field, FieldName, hasConditionalFieldOrDatumDef, isFieldOrDatumDef, isValueDef} from '../channeldef';\nimport {SharedCompositeEncoding} from '../compositemark';\nimport {boxPlotNormalizer} from '../compositemark/boxplot';\nimport {errorBandNormalizer} from '../compositemark/errorband';\nimport {errorBarNormalizer} from '../compositemark/errorbar';\nimport {channelHasField, Encoding} from '../encoding';\nimport {ExprRef} from '../expr';\nimport * as log from '../log';\nimport {Projection} from '../projection';\nimport {FacetedUnitSpec, GenericSpec, LayerSpec, UnitSpec} from '../spec';\nimport {GenericCompositionLayoutWithColumns} from '../spec/base';\nimport {GenericConcatSpec} from '../spec/concat';\nimport {\n FacetEncodingFieldDef,\n FacetFieldDef,\n FacetMapping,\n GenericFacetSpec,\n isFacetMapping,\n NormalizedFacetSpec\n} from '../spec/facet';\nimport {NormalizedSpec} from '../spec/index';\nimport {NormalizedLayerSpec} from '../spec/layer';\nimport {SpecMapper} from '../spec/map';\nimport {isLayerRepeatSpec, LayerRepeatSpec, NonLayerRepeatSpec, RepeatSpec} from '../spec/repeat';\nimport {isUnitSpec, NormalizedUnitSpec} from '../spec/unit';\nimport {isEmpty, keys, omit, varName} from '../util';\nimport {isSignalRef} from '../vega.schema';\nimport {NonFacetUnitNormalizer, NormalizerParams} from './base';\nimport {PathOverlayNormalizer} from './pathoverlay';\nimport {replaceRepeaterInEncoding, replaceRepeaterInFacet} from './repeater';\nimport {RuleForRangedLineNormalizer} from './ruleforrangedline';\n\nexport class CoreNormalizer extends SpecMapper, LayerSpec> {\n private nonFacetUnitNormalizers: NonFacetUnitNormalizer[] = [\n boxPlotNormalizer,\n errorBarNormalizer,\n errorBandNormalizer,\n new PathOverlayNormalizer(),\n new RuleForRangedLineNormalizer()\n ];\n\n public map(spec: GenericSpec, LayerSpec, RepeatSpec, Field>, params: NormalizerParams) {\n // Special handling for a faceted unit spec as it can return a facet spec, not just a layer or unit spec like a normal unit spec.\n if (isUnitSpec(spec)) {\n const hasRow = channelHasField(spec.encoding, ROW);\n const hasColumn = channelHasField(spec.encoding, COLUMN);\n const hasFacet = channelHasField(spec.encoding, FACET);\n\n if (hasRow || hasColumn || hasFacet) {\n return this.mapFacetedUnit(spec, params);\n }\n }\n\n return super.map(spec, params);\n }\n\n // This is for normalizing non-facet unit\n public mapUnit(spec: UnitSpec, params: NormalizerParams): NormalizedUnitSpec | NormalizedLayerSpec {\n const {parentEncoding, parentProjection} = params;\n\n const encoding = replaceRepeaterInEncoding(spec.encoding, params.repeater);\n\n const specWithReplacedEncoding = {\n ...spec,\n ...(encoding ? {encoding} : {})\n };\n\n if (parentEncoding || parentProjection) {\n return this.mapUnitWithParentEncodingOrProjection(specWithReplacedEncoding, params);\n }\n\n const normalizeLayerOrUnit = this.mapLayerOrUnit.bind(this);\n\n for (const unitNormalizer of this.nonFacetUnitNormalizers) {\n if (unitNormalizer.hasMatchingType(specWithReplacedEncoding, params.config)) {\n return unitNormalizer.run(specWithReplacedEncoding, params, normalizeLayerOrUnit);\n }\n }\n\n return specWithReplacedEncoding as NormalizedUnitSpec;\n }\n\n protected mapRepeat(\n spec: RepeatSpec,\n params: NormalizerParams\n ): GenericConcatSpec | NormalizedLayerSpec {\n if (isLayerRepeatSpec(spec)) {\n return this.mapLayerRepeat(spec, params);\n } else {\n return this.mapNonLayerRepeat(spec, params);\n }\n }\n\n private mapLayerRepeat(\n spec: LayerRepeatSpec,\n params: NormalizerParams\n ): GenericConcatSpec | NormalizedLayerSpec {\n const {repeat, spec: childSpec, ...rest} = spec;\n const {row, column, layer} = repeat;\n\n const {repeater = {}, repeaterPrefix = ''} = params;\n\n if (row || column) {\n return this.mapRepeat(\n {\n ...spec,\n repeat: {\n ...(row ? {row} : {}),\n ...(column ? {column} : {})\n },\n spec: {\n repeat: {layer},\n spec: childSpec\n }\n },\n params\n );\n } else {\n return {\n ...rest,\n layer: layer.map(layerValue => {\n const childRepeater = {\n ...repeater,\n layer: layerValue\n };\n\n const childName = `${(childSpec.name || '') + repeaterPrefix}child__layer_${varName(layerValue)}`;\n\n const child = this.mapLayerOrUnit(childSpec, {...params, repeater: childRepeater, repeaterPrefix: childName});\n child.name = childName;\n\n return child;\n })\n };\n }\n }\n\n private mapNonLayerRepeat(spec: NonLayerRepeatSpec, params: NormalizerParams): GenericConcatSpec {\n const {repeat, spec: childSpec, data, ...remainingProperties} = spec;\n\n if (!isArray(repeat) && spec.columns) {\n // is repeat with row/column\n spec = omit(spec, ['columns']);\n log.warn(log.message.columnsNotSupportByRowCol('repeat'));\n }\n\n const concat: NormalizedSpec[] = [];\n\n const {repeater = {}, repeaterPrefix = ''} = params;\n\n const row = (!isArray(repeat) && repeat.row) || [repeater ? repeater.row : null];\n const column = (!isArray(repeat) && repeat.column) || [repeater ? repeater.column : null];\n\n const repeatValues = (isArray(repeat) && repeat) || [repeater ? repeater.repeat : null];\n\n // cross product\n for (const repeatValue of repeatValues) {\n for (const rowValue of row) {\n for (const columnValue of column) {\n const childRepeater = {\n repeat: repeatValue,\n row: rowValue,\n column: columnValue,\n layer: repeater.layer\n };\n\n const childName =\n (childSpec.name || '') +\n repeaterPrefix +\n 'child__' +\n (isArray(repeat)\n ? `${varName(repeatValue)}`\n : (repeat.row ? `row_${varName(rowValue)}` : '') +\n (repeat.column ? `column_${varName(columnValue)}` : ''));\n\n const child = this.map(childSpec, {...params, repeater: childRepeater, repeaterPrefix: childName});\n child.name = childName;\n\n // we move data up\n concat.push(omit(child, ['data']) as NormalizedSpec);\n }\n }\n }\n\n const columns = isArray(repeat) ? spec.columns : repeat.column ? repeat.column.length : 1;\n return {\n data: childSpec.data ?? data, // data from child spec should have precedence\n align: 'all',\n ...remainingProperties,\n columns,\n concat\n };\n }\n\n protected mapFacet(\n spec: GenericFacetSpec, LayerSpec, Field>,\n params: NormalizerParams\n ): GenericFacetSpec {\n const {facet} = spec;\n\n if (isFacetMapping(facet) && spec.columns) {\n // is facet with row/column\n spec = omit(spec, ['columns']);\n log.warn(log.message.columnsNotSupportByRowCol('facet'));\n }\n\n return super.mapFacet(spec, params);\n }\n\n private mapUnitWithParentEncodingOrProjection(\n spec: FacetedUnitSpec,\n params: NormalizerParams\n ): NormalizedUnitSpec | NormalizedLayerSpec {\n const {encoding, projection} = spec;\n const {parentEncoding, parentProjection, config} = params;\n const mergedProjection = mergeProjection({parentProjection, projection});\n const mergedEncoding = mergeEncoding({\n parentEncoding,\n encoding: replaceRepeaterInEncoding(encoding, params.repeater)\n });\n\n return this.mapUnit(\n {\n ...spec,\n ...(mergedProjection ? {projection: mergedProjection} : {}),\n ...(mergedEncoding ? {encoding: mergedEncoding} : {})\n },\n {config}\n );\n }\n\n private mapFacetedUnit(spec: FacetedUnitSpec, normParams: NormalizerParams): NormalizedFacetSpec {\n // New encoding in the inside spec should not contain row / column\n // as row/column should be moved to facet\n const {row, column, facet, ...encoding} = spec.encoding;\n\n // Mark and encoding should be moved into the inner spec\n const {mark, width, projection, height, view, params, encoding: _, ...outerSpec} = spec;\n\n const {facetMapping, layout} = this.getFacetMappingAndLayout({row, column, facet}, normParams);\n\n const newEncoding = replaceRepeaterInEncoding(encoding, normParams.repeater);\n\n return this.mapFacet(\n {\n ...outerSpec,\n ...layout,\n\n // row / column has higher precedence than facet\n facet: facetMapping,\n spec: {\n ...(width ? {width} : {}),\n ...(height ? {height} : {}),\n ...(view ? {view} : {}),\n ...(projection ? {projection} : {}),\n mark,\n encoding: newEncoding,\n ...(params ? {params} : {})\n }\n },\n normParams\n );\n }\n\n private getFacetMappingAndLayout(\n facets: {\n row: FacetEncodingFieldDef;\n column: FacetEncodingFieldDef;\n facet: FacetEncodingFieldDef;\n },\n params: NormalizerParams\n ): {facetMapping: FacetMapping | FacetFieldDef; layout: GenericCompositionLayoutWithColumns} {\n const {row, column, facet} = facets;\n\n if (row || column) {\n if (facet) {\n log.warn(log.message.facetChannelDropped([...(row ? [ROW] : []), ...(column ? [COLUMN] : [])]));\n }\n\n const facetMapping = {};\n const layout = {};\n\n for (const channel of [ROW, COLUMN]) {\n const def = facets[channel];\n if (def) {\n const {align, center, spacing, columns, ...defWithoutLayout} = def;\n facetMapping[channel] = defWithoutLayout;\n\n for (const prop of ['align', 'center', 'spacing'] as const) {\n if (def[prop] !== undefined) {\n layout[prop] ??= {};\n layout[prop][channel] = def[prop];\n }\n }\n }\n }\n\n return {facetMapping, layout};\n } else {\n const {align, center, spacing, columns, ...facetMapping} = facet;\n return {\n facetMapping: replaceRepeaterInFacet(facetMapping, params.repeater),\n layout: {\n ...(align ? {align} : {}),\n ...(center ? {center} : {}),\n ...(spacing ? {spacing} : {}),\n ...(columns ? {columns} : {})\n }\n };\n }\n }\n\n public mapLayer(\n spec: LayerSpec,\n {parentEncoding, parentProjection, ...otherParams}: NormalizerParams\n ): NormalizedLayerSpec {\n // Special handling for extended layer spec\n\n const {encoding, projection, ...rest} = spec;\n const params: NormalizerParams = {\n ...otherParams,\n parentEncoding: mergeEncoding({parentEncoding, encoding, layer: true}),\n parentProjection: mergeProjection({parentProjection, projection})\n };\n return super.mapLayer(rest, params);\n }\n}\n\nfunction mergeEncoding({\n parentEncoding,\n encoding = {},\n layer\n}: {\n parentEncoding: SharedCompositeEncoding;\n encoding: SharedCompositeEncoding | Encoding;\n layer?: boolean;\n}): Encoding {\n let merged: any = {};\n if (parentEncoding) {\n const channels = new Set([...keys(parentEncoding), ...keys(encoding)]);\n for (const channel of channels) {\n const channelDef = encoding[channel];\n const parentChannelDef = parentEncoding[channel];\n\n if (isFieldOrDatumDef(channelDef)) {\n // Field/Datum Def can inherit properties from its parent\n // Note that parentChannelDef doesn't have to be a field/datum def if the channelDef is already one.\n const mergedChannelDef = {\n ...parentChannelDef,\n ...channelDef\n };\n merged[channel] = mergedChannelDef;\n } else if (hasConditionalFieldOrDatumDef(channelDef)) {\n merged[channel] = {\n ...channelDef,\n condition: {\n ...parentChannelDef,\n ...channelDef.condition\n }\n };\n } else if (channelDef || channelDef === null) {\n merged[channel] = channelDef;\n } else if (\n layer ||\n isValueDef(parentChannelDef) ||\n isSignalRef(parentChannelDef) ||\n isFieldOrDatumDef(parentChannelDef) ||\n isArray(parentChannelDef)\n ) {\n merged[channel] = parentChannelDef;\n }\n }\n } else {\n merged = encoding;\n }\n return !merged || isEmpty(merged) ? undefined : merged;\n}\n\nfunction mergeProjection(opt: {\n parentProjection: Projection;\n projection: Projection;\n}) {\n const {parentProjection, projection} = opt;\n if (parentProjection && projection) {\n log.warn(log.message.projectionOverridden({parentProjection, projection}));\n }\n return projection ?? parentProjection;\n}\n","import {AggregateOp} from 'vega';\nimport {BinParams} from './bin';\nimport {FieldName} from './channeldef';\nimport {Data} from './data';\nimport {ImputeParams} from './impute';\nimport {LogicalComposition, normalizeLogicalComposition} from './logical';\nimport {ParameterName} from './parameter';\nimport {normalizePredicate, Predicate} from './predicate';\nimport {SortField} from './sort';\nimport {TimeUnit, TimeUnitParams} from './timeunit';\n\nexport interface FilterTransform {\n /**\n * The `filter` property must be a predication definition, which can take one of the following forms:\n *\n * 1) an [expression](https://vega.github.io/vega-lite/docs/types.html#expression) string,\n * where `datum` can be used to refer to the current data object.\n * For example, `{filter: \"datum.b2 > 60\"}` would make the output data includes only items that have values in the field `b2` over 60.\n *\n * 2) one of the [field predicates](https://vega.github.io/vega-lite/docs/predicate.html#field-predicate):\n * [`equal`](https://vega.github.io/vega-lite/docs/predicate.html#field-equal-predicate),\n * [`lt`](https://vega.github.io/vega-lite/docs/predicate.html#lt-predicate),\n * [`lte`](https://vega.github.io/vega-lite/docs/predicate.html#lte-predicate),\n * [`gt`](https://vega.github.io/vega-lite/docs/predicate.html#gt-predicate),\n * [`gte`](https://vega.github.io/vega-lite/docs/predicate.html#gte-predicate),\n * [`range`](https://vega.github.io/vega-lite/docs/predicate.html#range-predicate),\n * [`oneOf`](https://vega.github.io/vega-lite/docs/predicate.html#one-of-predicate),\n * or [`valid`](https://vega.github.io/vega-lite/docs/predicate.html#valid-predicate),\n\n * 3) a [selection predicate](https://vega.github.io/vega-lite/docs/predicate.html#selection-predicate), which define the names of a selection that the data point should belong to (or a logical composition of selections).\n *\n * 4) a [logical composition](https://vega.github.io/vega-lite/docs/predicate.html#composition) of (1), (2), or (3).\n */\n filter: LogicalComposition;\n}\n\nexport function isFilter(t: Transform): t is FilterTransform {\n return 'filter' in t;\n}\n\nexport interface CalculateTransform {\n /**\n * A [expression](https://vega.github.io/vega-lite/docs/types.html#expression) string. Use the variable `datum` to refer to the current data object.\n */\n calculate: string;\n\n /**\n * The field for storing the computed formula value.\n */\n as: FieldName;\n}\n\nexport interface BinTransform {\n /**\n * An object indicating bin properties, or simply `true` for using default bin parameters.\n */\n bin: true | BinParams;\n\n /**\n * The data field to bin.\n */\n field: FieldName;\n\n /**\n * The output fields at which to write the start and end bin values.\n * This can be either a string or an array of strings with two elements denoting the name for the fields for bin start and bin end respectively.\n * If a single string (e.g., `\"val\"`) is provided, the end field will be `\"val_end\"`.\n */\n as: FieldName | FieldName[];\n}\n\nexport interface TimeUnitTransform {\n /**\n * The timeUnit.\n */\n timeUnit: TimeUnit | TimeUnitParams;\n\n /**\n * The data field to apply time unit.\n */\n field: FieldName;\n\n /**\n * The output field to write the timeUnit value.\n */\n as: FieldName;\n}\n\nexport interface AggregateTransform {\n /**\n * Array of objects that define fields to aggregate.\n */\n aggregate: AggregatedFieldDef[];\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n}\n\nexport interface AggregatedFieldDef {\n /**\n * The aggregation operation to apply to the fields (e.g., `\"sum\"`, `\"average\"`, or `\"count\"`).\n * See the [full list of supported aggregation operations](https://vega.github.io/vega-lite/docs/aggregate.html#ops)\n * for more information.\n */\n op: AggregateOp;\n\n /**\n * The data field for which to compute aggregate function. This is required for all aggregation operations except `\"count\"`.\n */\n field?: FieldName;\n\n /**\n * The output field names to use for each aggregated field.\n */\n as: FieldName;\n}\n\nexport interface StackTransform {\n /**\n * The field which is stacked.\n */\n stack: FieldName;\n /**\n * The data fields to group by.\n */\n groupby: FieldName[];\n /**\n * Mode for stacking marks. One of `\"zero\"` (default), `\"center\"`, or `\"normalize\"`.\n * The `\"zero\"` offset will stack starting at `0`. The `\"center\"` offset will center the stacks. The `\"normalize\"` offset will compute percentage values for each stack point, with output values in the range `[0,1]`.\n *\n * __Default value:__ `\"zero\"`\n */\n offset?: 'zero' | 'center' | 'normalize';\n /**\n * Field that determines the order of leaves in the stacked charts.\n */\n sort?: SortField[];\n /**\n * Output field names. This can be either a string or an array of strings with two elements denoting the name for the fields for stack start and stack end respectively.\n * If a single string(e.g., `\"val\"`) is provided, the end field will be `\"val_end\"`.\n */\n as: FieldName | [FieldName, FieldName];\n}\n\nexport type WindowOnlyOp =\n | 'row_number'\n | 'rank'\n | 'dense_rank'\n | 'percent_rank'\n | 'cume_dist'\n | 'ntile'\n | 'lag'\n | 'lead'\n | 'first_value'\n | 'last_value'\n | 'nth_value';\n\nexport interface WindowFieldDef {\n /**\n * The window or aggregation operation to apply within a window (e.g., `\"rank\"`, `\"lead\"`, `\"sum\"`, `\"average\"` or `\"count\"`). See the list of all supported operations [here](https://vega.github.io/vega-lite/docs/window.html#ops).\n */\n op: AggregateOp | WindowOnlyOp;\n\n /**\n * Parameter values for the window functions. Parameter values can be omitted for operations that do not accept a parameter.\n *\n * See the list of all supported operations and their parameters [here](https://vega.github.io/vega-lite/docs/transforms/window.html).\n */\n param?: number;\n\n /**\n * The data field for which to compute the aggregate or window function. This can be omitted for window functions that do not operate over a field such as `\"count\"`, `\"rank\"`, `\"dense_rank\"`.\n */\n field?: FieldName;\n\n /**\n * The output name for the window operation.\n */\n as: FieldName;\n}\n\nexport interface WindowTransform {\n /**\n * The definition of the fields in the window, and what calculations to use.\n */\n window: WindowFieldDef[];\n\n /**\n * A frame specification as a two-element array indicating how the sliding window should proceed. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. The default value is `[null, 0]`, indicating that the sliding window includes the current object and all preceding objects. The value `[-5, 5]` indicates that the window should include five objects preceding and five objects following the current object. Finally, `[null, null]` indicates that the window frame should always include all data objects. If you this frame and want to assign the same value to add objects, you can use the simpler [join aggregate transform](https://vega.github.io/vega-lite/docs/joinaggregate.html). The only operators affected are the aggregation operations and the `first_value`, `last_value`, and `nth_value` window operations. The other window operations are not affected by this.\n *\n * __Default value:__: `[null, 0]` (includes the current object and all preceding objects)\n */\n frame?: (null | number)[];\n\n /**\n * Indicates if the sliding window frame should ignore peer values (data that are considered identical by the sort criteria). The default is false, causing the window frame to expand to include all peer values. If set to true, the window frame will be defined by offset values only. This setting only affects those operations that depend on the window frame, namely aggregation operations and the first_value, last_value, and nth_value window operations.\n *\n * __Default value:__ `false`\n */\n ignorePeers?: boolean;\n\n /**\n * The data fields for partitioning the data objects into separate windows. If unspecified, all data points will be in a single window.\n */\n groupby?: FieldName[];\n\n /**\n * A sort field definition for sorting data objects within a window. If two data objects are considered equal by the comparator, they are considered \"peer\" values of equal rank. If sort is not specified, the order is undefined: data objects are processed in the order they are observed and none are considered peers (the ignorePeers parameter is ignored and treated as if set to `true`).\n */\n sort?: SortField[];\n}\n\nexport interface JoinAggregateFieldDef {\n /**\n * The aggregation operation to apply (e.g., `\"sum\"`, `\"average\"` or `\"count\"`). See the list of all supported operations [here](https://vega.github.io/vega-lite/docs/aggregate.html#ops).\n */\n op: AggregateOp;\n\n /**\n * The data field for which to compute the aggregate function. This can be omitted for functions that do not operate over a field such as `\"count\"`.\n */\n field?: FieldName;\n\n /**\n * The output name for the join aggregate operation.\n */\n as: FieldName;\n}\n\nexport interface JoinAggregateTransform {\n /**\n * The definition of the fields in the join aggregate, and what calculations to use.\n */\n joinaggregate: JoinAggregateFieldDef[];\n\n /**\n * The data fields for partitioning the data objects into separate groups. If unspecified, all data points will be in a single group.\n */\n groupby?: FieldName[];\n}\n\nexport interface ImputeSequence {\n /**\n * The starting value of the sequence.\n * __Default value:__ `0`\n */\n start?: number;\n /**\n * The ending value(exclusive) of the sequence.\n */\n stop: number;\n /**\n * The step value between sequence entries.\n * __Default value:__ `1` or `-1` if `stop < start`\n */\n step?: number;\n}\n\nexport function isImputeSequence(t: ImputeSequence | any[] | undefined): t is ImputeSequence {\n return t?.['stop'] !== undefined;\n}\n\nexport interface ImputeTransform extends ImputeParams {\n /**\n * The data field for which the missing values should be imputed.\n */\n impute: FieldName;\n\n /**\n * A key field that uniquely identifies data objects within a group.\n * Missing key values (those occurring in the data but not in the current group) will be imputed.\n */\n key: FieldName;\n\n /**\n * An optional array of fields by which to group the values.\n * Imputation will then be performed on a per-group basis.\n */\n groupby?: FieldName[];\n}\n\nexport interface FlattenTransform {\n /**\n * An array of one or more data fields containing arrays to flatten.\n * If multiple fields are specified, their array values should have a parallel structure, ideally with the same length.\n * If the lengths of parallel arrays do not match,\n * the longest array will be used with `null` values added for missing entries.\n */\n flatten: FieldName[];\n\n /**\n * The output field names for extracted array values.\n *\n * __Default value:__ The field name of the corresponding array field\n */\n as?: FieldName[];\n}\n\nexport interface SampleTransform {\n /**\n * The maximum number of data objects to include in the sample.\n *\n * __Default value:__ `1000`\n */\n sample: number;\n}\n\nexport interface LookupBase {\n /**\n * Key in data to lookup.\n */\n key: FieldName;\n /**\n * Fields in foreign data or selection to lookup.\n * If not specified, the entire object is queried.\n */\n fields?: FieldName[];\n}\n\nexport interface LookupData extends LookupBase {\n /**\n * Secondary data source to lookup in.\n */\n data: Data;\n}\n\nexport interface LookupSelection extends LookupBase {\n /**\n * Selection parameter name to look up.\n */\n param: ParameterName;\n}\n\nexport interface LookupTransform {\n /**\n * Key in primary data source.\n */\n lookup: string;\n\n /**\n * The output fields on which to store the looked up data values.\n *\n * For data lookups, this property may be left blank if `from.fields`\n * has been specified (those field names will be used); if `from.fields`\n * has not been specified, `as` must be a string.\n *\n * For selection lookups, this property is optional: if unspecified,\n * looked up values will be stored under a property named for the selection;\n * and if specified, it must correspond to `from.fields`.\n */\n as?: FieldName | FieldName[];\n\n /**\n * The default value to use if lookup fails.\n *\n * __Default value:__ `null`\n */\n default?: any;\n\n /**\n * Data source or selection for secondary data reference.\n */\n from: LookupData | LookupSelection;\n}\n\nexport function isLookup(t: Transform): t is LookupTransform {\n return 'lookup' in t;\n}\n\nexport function isLookupData(from: LookupData | LookupSelection): from is LookupData {\n return 'data' in from;\n}\n\nexport function isLookupSelection(from: LookupData | LookupSelection): from is LookupSelection {\n return 'param' in from;\n}\n\nexport interface FoldTransform {\n /**\n * An array of data fields indicating the properties to fold.\n */\n fold: FieldName[];\n\n /**\n * The output field names for the key and value properties produced by the fold transform.\n * __Default value:__ `[\"key\", \"value\"]`\n */\n as?: [FieldName, FieldName];\n}\n\nexport interface PivotTransform {\n /**\n * The data field to pivot on. The unique values of this field become new field names in the output stream.\n */\n pivot: FieldName;\n\n /**\n * The data field to populate pivoted fields. The aggregate values of this field become the values of the new pivoted fields.\n */\n value: FieldName;\n\n /**\n * The optional data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * An optional parameter indicating the maximum number of pivoted fields to generate.\n * The default (`0`) applies no limit. The pivoted `pivot` names are sorted in ascending order prior to enforcing the limit.\n * __Default value:__ `0`\n */\n limit?: number;\n\n /**\n * The aggregation operation to apply to grouped `value` field values.\n * __Default value:__ `sum`\n */\n op?: AggregateOp;\n}\n\nexport function isPivot(t: Transform): t is PivotTransform {\n return 'pivot' in t;\n}\n\nexport interface DensityTransform {\n /**\n * The data field for which to perform density estimation.\n */\n density: FieldName;\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * A boolean flag indicating whether to produce density estimates (false) or cumulative density estimates (true).\n *\n * __Default value:__ `false`\n */\n cumulative?: boolean;\n\n /**\n * A boolean flag indicating if the output values should be probability estimates (false) or smoothed counts (true).\n *\n * __Default value:__ `false`\n */\n counts?: boolean;\n\n /**\n * The bandwidth (standard deviation) of the Gaussian kernel. If unspecified or set to zero, the bandwidth value is automatically estimated from the input data using Scott’s rule.\n */\n bandwidth?: number;\n\n /**\n * A [min, max] domain from which to sample the distribution. If unspecified, the extent will be determined by the observed minimum and maximum values of the density value field.\n */\n extent?: [number, number];\n\n /**\n * The minimum number of samples to take along the extent domain for plotting the density.\n *\n * __Default value:__ `25`\n */\n minsteps?: number;\n\n /**\n * The maximum number of samples to take along the extent domain for plotting the density.\n *\n * __Default value:__ `200`\n */\n maxsteps?: number;\n\n /**\n * The exact number of samples to take along the extent domain for plotting the density. If specified, overrides both minsteps and maxsteps to set an exact number of uniform samples. Potentially useful in conjunction with a fixed extent to ensure consistent sample points for stacked densities.\n */\n steps?: number;\n\n /**\n * The output fields for the sample value and corresponding density estimate.\n *\n * __Default value:__ `[\"value\", \"density\"]`\n */\n as?: [FieldName, FieldName];\n}\n\nexport function isDensity(t: Transform): t is DensityTransform {\n return 'density' in t;\n}\n\nexport interface QuantileTransform {\n /**\n * The data field for which to perform quantile estimation.\n */\n quantile: FieldName;\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * An array of probabilities in the range (0, 1) for which to compute quantile values. If not specified, the *step* parameter will be used.\n */\n probs?: number[];\n\n /**\n * A probability step size (default 0.01) for sampling quantile values. All values from one-half the step size up to 1 (exclusive) will be sampled. This parameter is only used if the *probs* parameter is not provided.\n */\n step?: number;\n\n /**\n * The output field names for the probability and quantile values.\n *\n * __Default value:__ `[\"prob\", \"value\"]`\n */\n as?: [FieldName, FieldName];\n}\n\nexport function isQuantile(t: Transform): t is QuantileTransform {\n return 'quantile' in t;\n}\n\nexport interface RegressionTransform {\n /**\n * The data field of the dependent variable to predict.\n */\n regression: FieldName;\n\n /**\n * The data field of the independent variable to use a predictor.\n */\n on: FieldName;\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * The functional form of the regression model. One of `\"linear\"`, `\"log\"`, `\"exp\"`, `\"pow\"`, `\"quad\"`, or `\"poly\"`.\n *\n * __Default value:__ `\"linear\"`\n */\n method?: 'linear' | 'log' | 'exp' | 'pow' | 'quad' | 'poly';\n\n /**\n * The polynomial order (number of coefficients) for the 'poly' method.\n *\n * __Default value:__ `3`\n */\n order?: number;\n\n /**\n * A [min, max] domain over the independent (x) field for the starting and ending points of the generated trend line.\n */\n extent?: [number, number];\n\n /**\n * A boolean flag indicating if the transform should return the regression model parameters (one object per group), rather than trend line points.\n * The resulting objects include a `coef` array of fitted coefficient values (starting with the intercept term and then including terms of increasing order)\n * and an `rSquared` value (indicating the total variance explained by the model).\n *\n * __Default value:__ `false`\n */\n params?: boolean;\n\n /**\n * The output field names for the smoothed points generated by the regression transform.\n *\n * __Default value:__ The field names of the input x and y values.\n */\n as?: [FieldName, FieldName];\n}\n\nexport function isRegression(t: Transform): t is RegressionTransform {\n return 'regression' in t;\n}\n\nexport interface LoessTransform {\n /**\n * The data field of the dependent variable to smooth.\n */\n loess: FieldName;\n\n /**\n * The data field of the independent variable to use a predictor.\n */\n on: FieldName;\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * A bandwidth parameter in the range `[0, 1]` that determines the amount of smoothing.\n *\n * __Default value:__ `0.3`\n */\n bandwidth?: number;\n\n /**\n * The output field names for the smoothed points generated by the loess transform.\n *\n * __Default value:__ The field names of the input x and y values.\n */\n as?: [FieldName, FieldName];\n}\n\nexport function isLoess(t: Transform): t is LoessTransform {\n return 'loess' in t;\n}\n\nexport function isSample(t: Transform): t is SampleTransform {\n return 'sample' in t;\n}\n\nexport function isWindow(t: Transform): t is WindowTransform {\n return 'window' in t;\n}\n\nexport function isJoinAggregate(t: Transform): t is JoinAggregateTransform {\n return 'joinaggregate' in t;\n}\n\nexport function isFlatten(t: Transform): t is FlattenTransform {\n return 'flatten' in t;\n}\nexport function isCalculate(t: Transform): t is CalculateTransform {\n return 'calculate' in t;\n}\n\nexport function isBin(t: Transform): t is BinTransform {\n return 'bin' in t;\n}\n\nexport function isImpute(t: Transform): t is ImputeTransform {\n return 'impute' in t;\n}\n\nexport function isTimeUnit(t: Transform): t is TimeUnitTransform {\n return 'timeUnit' in t;\n}\n\nexport function isAggregate(t: Transform): t is AggregateTransform {\n return 'aggregate' in t;\n}\n\nexport function isStack(t: Transform): t is StackTransform {\n return 'stack' in t;\n}\n\nexport function isFold(t: Transform): t is FoldTransform {\n return 'fold' in t;\n}\n\nexport type Transform =\n | AggregateTransform\n | BinTransform\n | CalculateTransform\n | DensityTransform\n | FilterTransform\n | FlattenTransform\n | FoldTransform\n | ImputeTransform\n | JoinAggregateTransform\n | LoessTransform\n | LookupTransform\n | QuantileTransform\n | RegressionTransform\n | TimeUnitTransform\n | SampleTransform\n | StackTransform\n | WindowTransform\n | PivotTransform;\n\nexport function normalizeTransform(transform: Transform[]) {\n return transform.map(t => {\n if (isFilter(t)) {\n return {\n filter: normalizeLogicalComposition(t.filter, normalizePredicate)\n };\n }\n return t;\n });\n}\n","import {isArray} from 'vega';\nimport {BinParams, isBinParams} from '../bin';\nimport {ChannelDef, Field, isConditionalDef, isFieldDef, isScaleFieldDef} from '../channeldef';\nimport {LogicalComposition, normalizeLogicalComposition} from '../logical';\nimport {FacetedUnitSpec, GenericSpec, LayerSpec, RepeatSpec, UnitSpec} from '../spec';\nimport {SpecMapper} from '../spec/map';\nimport {isBin, isFilter, isLookup} from '../transform';\nimport {duplicate, entries, vals} from '../util';\nimport {NormalizerParams} from './base';\n\nexport class SelectionCompatibilityNormalizer extends SpecMapper<\n NormalizerParams,\n FacetedUnitSpec,\n LayerSpec,\n UnitSpec\n> {\n public map(\n spec: GenericSpec, LayerSpec, RepeatSpec, Field>,\n normParams: NormalizerParams\n ) {\n normParams.emptySelections ??= {};\n normParams.selectionPredicates ??= {};\n spec = normalizeTransforms(spec, normParams);\n return super.map(spec, normParams);\n }\n\n public mapLayerOrUnit(spec: FacetedUnitSpec | LayerSpec, normParams: NormalizerParams) {\n spec = normalizeTransforms(spec, normParams);\n\n if (spec.encoding) {\n const encoding = {};\n for (const [channel, enc] of entries(spec.encoding)) {\n encoding[channel] = normalizeChannelDef(enc, normParams);\n }\n\n spec = {...spec, encoding};\n }\n\n return super.mapLayerOrUnit(spec, normParams);\n }\n\n public mapUnit(spec: UnitSpec, normParams: NormalizerParams) {\n const {selection, ...rest} = spec as any;\n if (selection) {\n return {\n ...rest,\n params: entries(selection).map(([name, selDef]) => {\n const {init: value, bind, empty, ...select} = selDef as any;\n if (select.type === 'single') {\n select.type = 'point';\n select.toggle = false;\n } else if (select.type === 'multi') {\n select.type = 'point';\n }\n\n // Propagate emptiness forwards and backwards\n normParams.emptySelections[name] = empty !== 'none';\n for (const pred of vals(normParams.selectionPredicates[name] ?? {})) {\n pred.empty = empty !== 'none';\n }\n\n return {name, value, select, bind};\n })\n };\n }\n\n return spec;\n }\n}\n\nfunction normalizeTransforms(spec: any, normParams: NormalizerParams) {\n const {transform: tx, ...rest} = spec;\n if (tx) {\n const transform = tx.map((t: any) => {\n if (isFilter(t)) {\n return {filter: normalizePredicate(t, normParams)};\n } else if (isBin(t) && isBinParams(t.bin)) {\n return {\n ...t,\n bin: normalizeBinExtent(t.bin)\n };\n } else if (isLookup(t)) {\n const {selection: param, ...from} = t.from as any;\n return param\n ? {\n ...t,\n from: {param, ...from}\n }\n : t;\n }\n return t;\n });\n\n return {...rest, transform};\n }\n\n return spec;\n}\n\nfunction normalizeChannelDef(obj: any, normParams: NormalizerParams): ChannelDef {\n const enc = duplicate(obj);\n\n if (isFieldDef(enc) && isBinParams(enc.bin)) {\n enc.bin = normalizeBinExtent(enc.bin);\n }\n\n if (isScaleFieldDef(enc) && (enc.scale?.domain as any)?.selection) {\n const {selection: param, ...domain} = enc.scale.domain as any;\n enc.scale.domain = {...domain, ...(param ? {param} : {})};\n }\n\n if (isConditionalDef(enc)) {\n if (isArray(enc.condition)) {\n enc.condition = enc.condition.map((c: any) => {\n const {selection, param, test, ...cond} = c;\n return param ? c : {...cond, test: normalizePredicate(c, normParams)};\n });\n } else {\n const {selection, param, test, ...cond} = normalizeChannelDef(enc.condition, normParams) as any;\n enc.condition = param\n ? enc.condition\n : {\n ...cond,\n test: normalizePredicate(enc.condition, normParams)\n };\n }\n }\n\n return enc;\n}\n\nfunction normalizeBinExtent(bin: BinParams): BinParams {\n const ext = bin.extent as any;\n if (ext?.selection) {\n const {selection: param, ...rest} = ext;\n return {...bin, extent: {...rest, param}};\n }\n\n return bin;\n}\n\nfunction normalizePredicate(op: any, normParams: NormalizerParams) {\n // Normalize old compositions of selection names (e.g., selection: {and: [\"one\", \"two\"]})\n const normalizeSelectionComposition = (o: LogicalComposition) => {\n return normalizeLogicalComposition(o, param => {\n const empty = normParams.emptySelections[param] ?? true;\n const pred = {param, empty};\n normParams.selectionPredicates[param] ??= [];\n normParams.selectionPredicates[param].push(pred);\n return pred as any;\n });\n };\n\n return op.selection\n ? normalizeSelectionComposition(op.selection)\n : normalizeLogicalComposition(op.test || op.filter, o =>\n o.selection ? normalizeSelectionComposition(o.selection) : o\n );\n}\n","import {isArray, isString} from 'vega';\nimport {Field} from '../channeldef';\nimport {VariableParameter} from '../parameter';\nimport {isSelectionParameter, SelectionParameter} from '../selection';\nimport {\n BaseSpec,\n isUnitSpec,\n NormalizedLayerSpec,\n NormalizedSpec,\n NormalizedUnitSpec,\n TopLevel,\n UnitSpec\n} from '../spec';\nimport {SpecMapper} from '../spec/map';\nimport {NormalizerParams} from './base';\n\nexport class TopLevelSelectionsNormalizer extends SpecMapper {\n public map(spec: TopLevel, normParams: NormalizerParams): TopLevel {\n const selections = normParams.selections ?? [];\n if (spec.params && !isUnitSpec(spec)) {\n const params: VariableParameter[] = [];\n for (const param of spec.params) {\n if (isSelectionParameter(param)) {\n selections.push(param);\n } else {\n params.push(param);\n }\n }\n\n spec.params = params;\n }\n\n normParams.selections = selections;\n return super.map(spec, addSpecNameToParams(spec, normParams));\n }\n\n public mapUnit(spec: UnitSpec, normParams: NormalizerParams): NormalizedUnitSpec | NormalizedLayerSpec {\n const selections = normParams.selections;\n if (!selections || !selections.length) return spec as NormalizedUnitSpec;\n\n const path = (normParams.path ?? []).concat(spec.name);\n const params: SelectionParameter[] = [];\n\n for (const selection of selections) {\n // By default, apply selections to all unit views.\n if (!selection.views || !selection.views.length) {\n params.push(selection);\n } else {\n for (const view of selection.views) {\n // view is either a specific unit name, or a partial path through the spec tree.\n if (\n (isString(view) && (view === spec.name || path.indexOf(view) >= 0)) ||\n (isArray(view) &&\n view.map(v => path.indexOf(v)).every((v, i, arr) => v !== -1 && (i === 0 || v > arr[i - 1])))\n ) {\n params.push(selection);\n }\n }\n }\n }\n\n if (params.length) spec.params = params;\n return spec as NormalizedUnitSpec;\n }\n}\n\nfor (const method of ['mapFacet', 'mapRepeat', 'mapHConcat', 'mapVConcat', 'mapLayer']) {\n const proto = TopLevelSelectionsNormalizer.prototype[method];\n TopLevelSelectionsNormalizer.prototype[method] = function (spec: BaseSpec, params: NormalizerParams) {\n return proto.call(this, spec, addSpecNameToParams(spec, params));\n };\n}\n\nfunction addSpecNameToParams(spec: BaseSpec, params: NormalizerParams) {\n return spec.name\n ? {\n ...params,\n path: (params.path ?? []).concat(spec.name)\n }\n : params;\n}\n","import {SignalRef} from 'vega';\nimport {isString} from 'vega-util';\nimport {Field} from '../channeldef';\nimport {Config, initConfig} from '../config';\nimport * as log from '../log';\nimport {\n FacetedUnitSpec,\n isLayerSpec,\n isUnitSpec,\n LayoutSizeMixins,\n NonNormalizedSpec,\n NormalizedSpec,\n RepeatSpec,\n TopLevelSpec\n} from '../spec';\nimport {AutoSizeParams, AutosizeType, TopLevel} from '../spec/toplevel';\nimport {deepEqual} from '../util';\nimport {NormalizerParams} from './base';\nimport {CoreNormalizer} from './core';\nimport {SelectionCompatibilityNormalizer} from './selectioncompat';\nimport {TopLevelSelectionsNormalizer} from './toplevelselection';\n\nexport function normalize(\n spec: TopLevelSpec & LayoutSizeMixins,\n config?: Config\n): TopLevel & LayoutSizeMixins {\n if (config === undefined) {\n config = initConfig(spec.config);\n }\n\n const normalizedSpec = normalizeGenericSpec(spec, config);\n\n const {width, height} = spec;\n const autosize = normalizeAutoSize(normalizedSpec, {width, height, autosize: spec.autosize}, config);\n\n return {\n ...normalizedSpec,\n ...(autosize ? {autosize} : {})\n };\n}\n\nconst coreNormalizer = new CoreNormalizer();\nconst selectionCompatNormalizer = new SelectionCompatibilityNormalizer();\nconst topLevelSelectionNormalizer = new TopLevelSelectionsNormalizer();\n\n/**\n * Decompose extended unit specs into composition of pure unit specs.\n * And push top-level selection definitions down to unit specs.\n */\nfunction normalizeGenericSpec(\n spec: NonNormalizedSpec | FacetedUnitSpec | RepeatSpec,\n config: Config = {}\n) {\n const normParams = {config};\n return topLevelSelectionNormalizer.map(\n coreNormalizer.map(selectionCompatNormalizer.map(spec, normParams), normParams),\n normParams\n );\n}\n\nfunction _normalizeAutoSize(autosize: AutosizeType | AutoSizeParams) {\n return isString(autosize) ? {type: autosize} : autosize ?? {};\n}\n\n/**\n * Normalize autosize and deal with width or height == \"container\".\n */\nexport function normalizeAutoSize(\n spec: TopLevel,\n sizeInfo: {autosize: AutosizeType | AutoSizeParams} & LayoutSizeMixins,\n config?: Config\n) {\n let {width, height} = sizeInfo;\n\n const isFitCompatible = isUnitSpec(spec) || isLayerSpec(spec);\n const autosizeDefault: AutoSizeParams = {};\n\n if (!isFitCompatible) {\n // If spec is not compatible with autosize == \"fit\", discard width/height == container\n if (width == 'container') {\n log.warn(log.message.containerSizeNonSingle('width'));\n width = undefined;\n }\n if (height == 'container') {\n log.warn(log.message.containerSizeNonSingle('height'));\n height = undefined;\n }\n } else {\n // Default autosize parameters to fit when width/height is \"container\"\n if (width == 'container' && height == 'container') {\n autosizeDefault.type = 'fit';\n autosizeDefault.contains = 'padding';\n } else if (width == 'container') {\n autosizeDefault.type = 'fit-x';\n autosizeDefault.contains = 'padding';\n } else if (height == 'container') {\n autosizeDefault.type = 'fit-y';\n autosizeDefault.contains = 'padding';\n }\n }\n\n const autosize: AutoSizeParams = {\n type: 'pad',\n ...autosizeDefault,\n ...(config ? _normalizeAutoSize(config.autosize) : {}),\n ..._normalizeAutoSize(spec.autosize)\n };\n\n if (autosize.type === 'fit' && !isFitCompatible) {\n log.warn(log.message.FIT_NON_SINGLE);\n autosize.type = 'pad';\n }\n\n if (width == 'container' && !(autosize.type == 'fit' || autosize.type == 'fit-x')) {\n log.warn(log.message.containerSizeNotCompatibleWithAutosize('width'));\n }\n if (height == 'container' && !(autosize.type == 'fit' || autosize.type == 'fit-y')) {\n log.warn(log.message.containerSizeNotCompatibleWithAutosize('height'));\n }\n\n // Delete autosize property if it's Vega's default\n if (deepEqual(autosize, {type: 'pad'})) {\n return undefined;\n }\n\n return autosize;\n}\n\nexport type {NormalizerParams};\n","import * as log from '../log';\nimport {deepEqual, duplicate, getFirstDefined, keys} from '../util';\n\n/**\n * Generic class for storing properties that are explicitly specified\n * and implicitly determined by the compiler.\n * This is important for scale/axis/legend merging as\n * we want to prioritize properties that users explicitly specified.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport class Split {\n constructor(public readonly explicit: Partial = {}, public readonly implicit: Partial = {}) {}\n\n public clone() {\n return new Split(duplicate(this.explicit), duplicate(this.implicit));\n }\n\n public combine(): Partial {\n return {\n ...this.explicit, // Explicit properties comes first\n ...this.implicit\n };\n }\n\n public get(key: K): T[K] {\n // Explicit has higher precedence\n return getFirstDefined(this.explicit[key], this.implicit[key]);\n }\n\n public getWithExplicit(key: K): Explicit {\n // Explicit has higher precedence\n if (this.explicit[key] !== undefined) {\n return {explicit: true, value: this.explicit[key]};\n } else if (this.implicit[key] !== undefined) {\n return {explicit: false, value: this.implicit[key]};\n }\n return {explicit: false, value: undefined};\n }\n\n public setWithExplicit(key: K, {value, explicit}: Explicit) {\n if (value !== undefined) {\n this.set(key, value, explicit);\n }\n }\n\n public set(key: K, value: T[K], explicit: boolean) {\n delete this[explicit ? 'implicit' : 'explicit'][key];\n this[explicit ? 'explicit' : 'implicit'][key] = value;\n return this;\n }\n\n public copyKeyFromSplit(key: keyof T, {explicit, implicit}: Split) {\n // Explicit has higher precedence\n if (explicit[key] !== undefined) {\n this.set(key, explicit[key], true);\n } else if (implicit[key] !== undefined) {\n this.set(key, implicit[key], false);\n }\n }\n public copyKeyFromObject(key: keyof T, s: Partial) {\n // Explicit has higher precedence\n if (s[key] !== undefined) {\n this.set(key, s[key], true);\n }\n }\n\n /**\n * Merge split object into this split object. Properties from the other split\n * overwrite properties from this split.\n */\n public copyAll(other: Split) {\n for (const key of keys(other.combine())) {\n const val = other.getWithExplicit(key);\n this.setWithExplicit(key, val);\n }\n }\n}\n\nexport interface Explicit {\n explicit: boolean;\n value: T;\n}\n\nexport function makeExplicit(value: T): Explicit {\n return {\n explicit: true,\n value\n };\n}\n\nexport function makeImplicit(value: T): Explicit {\n return {\n explicit: false,\n value\n };\n}\n\nexport type SplitParentProperty = 'scale' | 'axis' | 'legend' | '';\n\nexport function tieBreakByComparing(compare: (v1: T, v2: T) => number) {\n return (\n v1: Explicit,\n v2: Explicit,\n property: keyof S | never,\n propertyOf: SplitParentProperty\n ): Explicit => {\n const diff = compare(v1.value, v2.value);\n if (diff > 0) {\n return v1;\n } else if (diff < 0) {\n return v2;\n }\n return defaultTieBreaker(v1, v2, property, propertyOf);\n };\n}\n\nexport function defaultTieBreaker(\n v1: Explicit,\n v2: Explicit,\n property: keyof S,\n propertyOf: SplitParentProperty\n) {\n if (v1.explicit && v2.explicit) {\n log.warn(log.message.mergeConflictingProperty(property, propertyOf, v1.value, v2.value));\n }\n // If equal score, prefer v1.\n return v1;\n}\n\nexport function mergeValuesWithExplicit(\n v1: Explicit,\n v2: Explicit,\n property: keyof S,\n propertyOf: SplitParentProperty,\n tieBreaker: (\n v1: Explicit,\n v2: Explicit,\n property: keyof S,\n propertyOf: string\n ) => Explicit = defaultTieBreaker\n) {\n if (v1 === undefined || v1.value === undefined) {\n // For first run\n return v2;\n }\n\n if (v1.explicit && !v2.explicit) {\n return v1;\n } else if (v2.explicit && !v1.explicit) {\n return v2;\n } else if (deepEqual(v1.value, v2.value)) {\n return v1;\n } else {\n return tieBreaker(v1, v2, property, propertyOf);\n }\n}\n","import {Parse} from '../../data';\nimport {Dict} from '../../util';\nimport {Split} from '../split';\nimport {OutputNode} from './dataflow';\nimport {FacetNode} from './facet';\nimport {SourceNode} from './source';\n\nexport interface DataComponent {\n /**\n * A list of unique sources.\n */\n sources: SourceNode[];\n\n /**\n * Registry of output nodes.\n */\n outputNodes: Dict;\n\n /**\n * How often is an output node used. If it is not used, we don't need to\n * instantiate it in the assemble step.\n */\n outputNodeRefCounts: Dict;\n\n /**\n * The output node before aggregation.\n */\n raw?: OutputNode;\n\n /**\n * The main output node.\n */\n main?: OutputNode;\n\n /**\n * For facets, we store the reference to the root node.\n */\n facetRoot?: FacetNode;\n\n /**\n * True if the data for this model is faceted.\n * A dataset is faceted if a parent model is a facet and no new dataset is\n * defined (which would make the data unfaceted again).\n */\n isFaceted: boolean;\n\n /**\n * Parse properties passed down from ancestors. Helps us to keep track of what has been parsed or is derived.\n */\n ancestorParse?: AncestorParse;\n}\n\n/**\n * Class to track interesting properties (see https://15721.courses.cs.cmu.edu/spring2016/papers/graefe-ieee1995.pdf)\n * about how fields have been parsed or whether they have been derived in a transform. We use this to not parse the\n * same field again (or differently).\n */\nexport class AncestorParse extends Split {\n constructor(\n public readonly explicit: Partial = {},\n public readonly implicit: Partial = {},\n public parseNothing = false\n ) {\n super(explicit, implicit);\n }\n\n public clone(): AncestorParse {\n const clone = super.clone() as AncestorParse;\n clone.parseNothing = this.parseNothing;\n return clone;\n }\n}\n","/*\n * Constants and utilities for data.\n */\nimport {Vector2} from 'vega';\nimport {FieldName} from './channeldef';\nimport {VgData} from './vega.schema';\n\nexport type ParseValue = null | string | 'string' | 'boolean' | 'date' | 'number';\n\nexport interface Parse {\n [field: string]: ParseValue;\n}\n\nexport interface DataFormatBase {\n /**\n * If set to `null`, disable type inference based on the spec and only use type inference based on the data.\n * Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)).\n * For example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n *\n * For `\"date\"`, we parse data based using JavaScript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\n * For Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)\n */\n parse?: Parse | null;\n\n /**\n * Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n *\n * __Default value:__ The default format type is determined by the extension of the file URL.\n * If no extension is detected, `\"json\"` will be used by default.\n */\n type?: 'csv' | 'tsv' | 'dsv' | 'json' | 'topojson';\n}\n\nexport interface CsvDataFormat extends DataFormatBase {\n type?: 'csv' | 'tsv';\n}\n\nexport interface DsvDataFormat extends DataFormatBase {\n type?: 'dsv';\n\n /**\n * The delimiter between records. The delimiter must be a single character (i.e., a single 16-bit code unit); so, ASCII delimiters are fine, but emoji delimiters are not.\n *\n * @minLength 1\n * @maxLength 1\n */\n delimiter: string;\n}\n\nexport interface JsonDataFormat extends DataFormatBase {\n type?: 'json';\n /**\n * The JSON property containing the desired data.\n * This parameter can be used when the loaded JSON file may have surrounding structure or meta-data.\n * For example `\"property\": \"values.features\"` is equivalent to retrieving `json.values.features`\n * from the loaded JSON object.\n */\n property?: string;\n}\n\nexport interface TopoDataFormat extends DataFormatBase {\n type?: 'topojson';\n /**\n * The name of the TopoJSON object set to convert to a GeoJSON feature collection.\n * For example, in a map of the world, there may be an object set named `\"countries\"`.\n * Using the feature property, we can extract this set and generate a GeoJSON feature object for each country.\n */\n feature?: string;\n /**\n * The name of the TopoJSON object set to convert to mesh.\n * Similar to the `feature` option, `mesh` extracts a named TopoJSON object set.\n * Unlike the `feature` option, the corresponding geo data is returned as a single, unified mesh instance, not as individual GeoJSON features.\n * Extracting a mesh is useful for more efficiently drawing borders or other geographic elements that you do not need to associate with specific regions such as individual countries, states or counties.\n */\n mesh?: string;\n}\n\nexport type DataFormat = CsvDataFormat | DsvDataFormat | JsonDataFormat | TopoDataFormat;\n\nexport type DataFormatType = 'json' | 'csv' | 'tsv' | 'dsv' | 'topojson';\n\nexport type DataSource = UrlData | InlineData | NamedData;\n\nexport type Data = DataSource | Generator;\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport type InlineDataset = number[] | string[] | boolean[] | object[] | string | object;\n\nexport interface DataBase {\n /**\n * An object that specifies the format for parsing the data.\n */\n format?: DataFormat;\n /**\n * Provide a placeholder name and bind data at runtime.\n */\n name?: string;\n}\n\nexport interface UrlData extends DataBase {\n /**\n * An URL from which to load the data set. Use the `format.type` property\n * to ensure the loaded data is correctly parsed.\n */\n url: string;\n}\n\nexport interface InlineData extends DataBase {\n /**\n * The full data set, included inline. This can be an array of objects or primitive values, an object, or a string.\n * Arrays of primitive values are ingested as objects with a `data` property. Strings are parsed according to the specified format type.\n */\n values: InlineDataset;\n}\n\nexport interface NamedData extends DataBase {\n /**\n * Provide a placeholder name and bind data at runtime.\n */\n name: string;\n}\n\nexport function isUrlData(data: Partial | Partial): data is UrlData {\n return 'url' in data;\n}\n\nexport function isInlineData(data: Partial | Partial): data is InlineData {\n return 'values' in data;\n}\n\nexport function isNamedData(data: Partial | Partial): data is NamedData {\n return 'name' in data && !isUrlData(data) && !isInlineData(data) && !isGenerator(data);\n}\n\nexport function isGenerator(data: Partial | Partial): data is Generator {\n return data && (isSequenceGenerator(data) || isSphereGenerator(data) || isGraticuleGenerator(data));\n}\n\nexport function isSequenceGenerator(data: Partial | Partial): data is SequenceGenerator {\n return 'sequence' in data;\n}\n\nexport function isSphereGenerator(data: Partial | Partial): data is SphereGenerator {\n return 'sphere' in data;\n}\n\nexport function isGraticuleGenerator(data: Partial | Partial): data is GraticuleGenerator {\n return 'graticule' in data;\n}\n\nexport enum DataSourceType {\n Raw,\n Main,\n Row,\n Column,\n Lookup\n}\n\nexport type Generator = SequenceGenerator | SphereGenerator | GraticuleGenerator;\n\nexport interface GeneratorBase {\n /**\n * Provide a placeholder name and bind data at runtime.\n */\n name?: string;\n}\n\nexport interface SequenceGenerator extends GeneratorBase {\n /**\n * Generate a sequence of numbers.\n */\n sequence: SequenceParams;\n}\n\nexport interface SequenceParams {\n /**\n * The starting value of the sequence (inclusive).\n */\n start: number;\n /**\n * The ending value of the sequence (exclusive).\n */\n stop: number;\n /**\n * The step value between sequence entries.\n *\n * __Default value:__ `1`\n */\n step?: number;\n\n /**\n * The name of the generated sequence field.\n *\n * __Default value:__ `\"data\"`\n */\n as?: FieldName;\n}\n\nexport interface SphereGenerator extends GeneratorBase {\n /**\n * Generate sphere GeoJSON data for the full globe.\n */\n // eslint-disable-next-line @typescript-eslint/ban-types\n sphere: true | {};\n}\n\nexport interface GraticuleGenerator extends GeneratorBase {\n /**\n * Generate graticule GeoJSON data for geographic reference lines.\n */\n graticule: true | GraticuleParams;\n}\n\nexport interface GraticuleParams {\n /**\n * The major extent of the graticule as a two-element array of coordinates.\n */\n extentMajor?: Vector2>;\n\n /**\n * The minor extent of the graticule as a two-element array of coordinates.\n */\n extentMinor?: Vector2>;\n\n /**\n * Sets both the major and minor extents to the same values.\n */\n extent?: Vector2>;\n\n /**\n * The major step angles of the graticule.\n *\n *\n * __Default value:__ `[90, 360]`\n */\n stepMajor?: Vector2;\n\n /**\n * The minor step angles of the graticule.\n *\n * __Default value:__ `[10, 10]`\n */\n stepMinor?: Vector2;\n\n /**\n * Sets both the major and minor step angles to the same values.\n */\n step?: Vector2;\n\n /**\n * The precision of the graticule in degrees.\n *\n * __Default value:__ `2.5`\n */\n precision?: number;\n}\n","const VIEW = 'view',\n LBRACK = '[',\n RBRACK = ']',\n LBRACE = '{',\n RBRACE = '}',\n COLON = ':',\n COMMA = ',',\n NAME = '@',\n GT = '>',\n ILLEGAL = /[[\\]{}]/,\n DEFAULT_MARKS = {\n '*': 1,\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n};\nlet DEFAULT_SOURCE, MARKS;\n/**\n * Parse an event selector string.\n * Returns an array of event stream definitions.\n */\n\nfunction eventSelector (selector, source, marks) {\n DEFAULT_SOURCE = source || VIEW;\n MARKS = marks || DEFAULT_MARKS;\n return parseMerge(selector.trim()).map(parseSelector);\n}\n\nfunction isMarkType(type) {\n return MARKS[type];\n}\n\nfunction find(s, i, endChar, pushChar, popChar) {\n const n = s.length;\n let count = 0,\n c;\n\n for (; i < n; ++i) {\n c = s[i];\n if (!count && c === endChar) return i;else if (popChar && popChar.indexOf(c) >= 0) --count;else if (pushChar && pushChar.indexOf(c) >= 0) ++count;\n }\n\n return i;\n}\n\nfunction parseMerge(s) {\n const output = [],\n n = s.length;\n let start = 0,\n i = 0;\n\n while (i < n) {\n i = find(s, i, COMMA, LBRACK + LBRACE, RBRACK + RBRACE);\n output.push(s.substring(start, i).trim());\n start = ++i;\n }\n\n if (output.length === 0) {\n throw 'Empty event selector: ' + s;\n }\n\n return output;\n}\n\nfunction parseSelector(s) {\n return s[0] === '[' ? parseBetween(s) : parseStream(s);\n}\n\nfunction parseBetween(s) {\n const n = s.length;\n let i = 1,\n b;\n i = find(s, i, RBRACK, LBRACK, RBRACK);\n\n if (i === n) {\n throw 'Empty between selector: ' + s;\n }\n\n b = parseMerge(s.substring(1, i));\n\n if (b.length !== 2) {\n throw 'Between selector must have two elements: ' + s;\n }\n\n s = s.slice(i + 1).trim();\n\n if (s[0] !== GT) {\n throw 'Expected \\'>\\' after between selector: ' + s;\n }\n\n b = b.map(parseSelector);\n const stream = parseSelector(s.slice(1).trim());\n\n if (stream.between) {\n return {\n between: b,\n stream: stream\n };\n } else {\n stream.between = b;\n }\n\n return stream;\n}\n\nfunction parseStream(s) {\n const stream = {\n source: DEFAULT_SOURCE\n },\n source = [];\n let throttle = [0, 0],\n markname = 0,\n start = 0,\n n = s.length,\n i = 0,\n j,\n filter; // extract throttle from end\n\n if (s[n - 1] === RBRACE) {\n i = s.lastIndexOf(LBRACE);\n\n if (i >= 0) {\n try {\n throttle = parseThrottle(s.substring(i + 1, n - 1));\n } catch (e) {\n throw 'Invalid throttle specification: ' + s;\n }\n\n s = s.slice(0, i).trim();\n n = s.length;\n } else throw 'Unmatched right brace: ' + s;\n\n i = 0;\n }\n\n if (!n) throw s; // set name flag based on first char\n\n if (s[0] === NAME) markname = ++i; // extract first part of multi-part stream selector\n\n j = find(s, i, COLON);\n\n if (j < n) {\n source.push(s.substring(start, j).trim());\n start = i = ++j;\n } // extract remaining part of stream selector\n\n\n i = find(s, i, LBRACK);\n\n if (i === n) {\n source.push(s.substring(start, n).trim());\n } else {\n source.push(s.substring(start, i).trim());\n filter = [];\n start = ++i;\n if (start === n) throw 'Unmatched left bracket: ' + s;\n } // extract filters\n\n\n while (i < n) {\n i = find(s, i, RBRACK);\n if (i === n) throw 'Unmatched left bracket: ' + s;\n filter.push(s.substring(start, i).trim());\n if (i < n - 1 && s[++i] !== LBRACK) throw 'Expected left bracket: ' + s;\n start = ++i;\n } // marshall event stream specification\n\n\n if (!(n = source.length) || ILLEGAL.test(source[n - 1])) {\n throw 'Invalid event selector: ' + s;\n }\n\n if (n > 1) {\n stream.type = source[1];\n\n if (markname) {\n stream.markname = source[0].slice(1);\n } else if (isMarkType(source[0])) {\n stream.marktype = source[0];\n } else {\n stream.source = source[0];\n }\n } else {\n stream.type = source[0];\n }\n\n if (stream.type.slice(-1) === '!') {\n stream.consume = true;\n stream.type = stream.type.slice(0, -1);\n }\n\n if (filter != null) stream.filter = filter;\n if (throttle[0]) stream.throttle = throttle[0];\n if (throttle[1]) stream.debounce = throttle[1];\n return stream;\n}\n\nfunction parseThrottle(s) {\n const a = s.split(COMMA);\n if (!s.length || a.length > 2) throw s;\n return a.map(_ => {\n const x = +_;\n if (x !== x) throw s;\n return x;\n });\n}\n\nexport { eventSelector as selector };\n","import {Signal, SignalRef} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {identity, isArray, stringValue} from 'vega-util';\nimport {MODIFY, STORE, unitName, VL_SELECTION_RESOLVE, TUPLE, selectionCompilers} from '.';\nimport {dateTimeToExpr, isDateTime, dateTimeToTimestamp} from '../../datetime';\nimport {hasContinuousDomain} from '../../scale';\nimport {SelectionInit, SelectionInitInterval, ParameterExtent} from '../../selection';\nimport {keys, stringify, vals} from '../../util';\nimport {VgData, VgDomain} from '../../vega.schema';\nimport {FacetModel} from '../facet';\nimport {LayerModel} from '../layer';\nimport {isUnitModel, Model} from '../model';\nimport {ScaleComponent} from '../scale/component';\nimport {UnitModel} from '../unit';\nimport {parseSelectionExtent} from './parse';\n\nexport function assembleInit(\n init: readonly (SelectionInit | readonly SelectionInit[] | SelectionInitInterval)[] | SelectionInit,\n isExpr = true,\n wrap: (str: string | number) => string | number = identity\n): any {\n if (isArray(init)) {\n const assembled = init.map(v => assembleInit(v, isExpr, wrap));\n return isExpr ? `[${assembled.join(', ')}]` : assembled;\n } else if (isDateTime(init)) {\n if (isExpr) {\n return wrap(dateTimeToExpr(init));\n } else {\n return wrap(dateTimeToTimestamp(init));\n }\n }\n return isExpr ? wrap(stringify(init)) : init;\n}\n\nexport function assembleUnitSelectionSignals(model: UnitModel, signals: Signal[]) {\n for (const selCmpt of vals(model.component.selection ?? {})) {\n const name = selCmpt.name;\n let modifyExpr = `${name}${TUPLE}, ${selCmpt.resolve === 'global' ? 'true' : `{unit: ${unitName(model)}}`}`;\n\n for (const c of selectionCompilers) {\n if (!c.defined(selCmpt)) continue;\n if (c.signals) signals = c.signals(model, selCmpt, signals);\n if (c.modifyExpr) modifyExpr = c.modifyExpr(model, selCmpt, modifyExpr);\n }\n\n signals.push({\n name: name + MODIFY,\n on: [\n {\n events: {signal: selCmpt.name + TUPLE},\n update: `modify(${stringValue(selCmpt.name + STORE)}, ${modifyExpr})`\n }\n ]\n });\n }\n\n return cleanupEmptyOnArray(signals);\n}\n\nexport function assembleFacetSignals(model: FacetModel, signals: Signal[]) {\n if (model.component.selection && keys(model.component.selection).length) {\n const name = stringValue(model.getName('cell'));\n signals.unshift({\n name: 'facet',\n value: {},\n on: [\n {\n events: parseSelector('mousemove', 'scope'),\n update: `isTuple(facet) ? facet : group(${name}).datum`\n }\n ]\n });\n }\n\n return cleanupEmptyOnArray(signals);\n}\n\nexport function assembleTopLevelSignals(model: UnitModel, signals: Signal[]) {\n let hasSelections = false;\n for (const selCmpt of vals(model.component.selection ?? {})) {\n const name = selCmpt.name;\n const store = stringValue(name + STORE);\n const hasSg = signals.filter(s => s.name === name);\n if (hasSg.length === 0) {\n const resolve = selCmpt.resolve === 'global' ? 'union' : selCmpt.resolve;\n const isPoint = selCmpt.type === 'point' ? ', true, true)' : ')';\n signals.push({\n name: selCmpt.name,\n update: `${VL_SELECTION_RESOLVE}(${store}, ${stringValue(resolve)}${isPoint}`\n });\n }\n hasSelections = true;\n\n for (const c of selectionCompilers) {\n if (c.defined(selCmpt) && c.topLevelSignals) {\n signals = c.topLevelSignals(model, selCmpt, signals);\n }\n }\n }\n\n if (hasSelections) {\n const hasUnit = signals.filter(s => s.name === 'unit');\n if (hasUnit.length === 0) {\n signals.unshift({\n name: 'unit',\n value: {},\n on: [{events: 'mousemove', update: 'isTuple(group()) ? group() : unit'}]\n });\n }\n }\n\n return cleanupEmptyOnArray(signals);\n}\n\nexport function assembleUnitSelectionData(model: UnitModel, data: readonly VgData[]): VgData[] {\n const dataCopy = [...data];\n for (const selCmpt of vals(model.component.selection ?? {})) {\n const init: VgData = {name: selCmpt.name + STORE};\n if (selCmpt.init) {\n const fields = selCmpt.project.items.map(proj => {\n const {signals, ...rest} = proj;\n return rest;\n });\n\n init.values = selCmpt.init.map(i => ({\n unit: unitName(model, {escape: false}),\n fields,\n values: assembleInit(i, false)\n }));\n }\n const contains = dataCopy.filter(d => d.name === selCmpt.name + STORE);\n if (!contains.length) {\n dataCopy.push(init);\n }\n }\n\n return dataCopy;\n}\n\nexport function assembleUnitSelectionMarks(model: UnitModel, marks: any[]): any[] {\n for (const selCmpt of vals(model.component.selection ?? {})) {\n for (const c of selectionCompilers) {\n if (c.defined(selCmpt) && c.marks) {\n marks = c.marks(model, selCmpt, marks);\n }\n }\n }\n\n return marks;\n}\n\nexport function assembleLayerSelectionMarks(model: LayerModel, marks: any[]): any[] {\n for (const child of model.children) {\n if (isUnitModel(child)) {\n marks = assembleUnitSelectionMarks(child, marks);\n }\n }\n\n return marks;\n}\n\nexport function assembleSelectionScaleDomain(\n model: Model,\n extent: ParameterExtent,\n scaleCmpt: ScaleComponent,\n domain: VgDomain\n): SignalRef {\n const parsedExtent = parseSelectionExtent(model, extent.param, extent);\n\n return {\n signal:\n hasContinuousDomain(scaleCmpt.get('type')) && isArray(domain) && domain[0] > domain[1]\n ? `isValid(${parsedExtent}) && reverse(${parsedExtent})`\n : parsedExtent\n };\n}\n\nfunction cleanupEmptyOnArray(signals: Signal[]) {\n return signals.map(s => {\n if (s.on && !s.on.length) delete s.on;\n return s;\n });\n}\n","import {DataSourceType} from '../../data';\nimport * as log from '../../log';\nimport {Dict, uniqueId} from '../../util';\n\n/**\n * A node in the dataflow tree.\n */\nexport abstract class DataFlowNode {\n private _children: DataFlowNode[] = [];\n\n private _parent: DataFlowNode = null;\n\n protected _hash: string | number;\n\n constructor(parent: DataFlowNode, public readonly debugName?: string) {\n if (parent) {\n this.parent = parent;\n }\n }\n\n /**\n * Clone this node with a deep copy but don't clone links to children or parents.\n */\n public clone(): DataFlowNode {\n throw new Error('Cannot clone node');\n }\n\n /**\n * Return a hash of the node.\n */\n public abstract hash(): string | number;\n\n /**\n * Set of fields that this node depends on.\n */\n public abstract dependentFields(): Set;\n\n /**\n * Set of fields that are being created by this node.\n */\n public abstract producedFields(): Set;\n\n get parent() {\n return this._parent;\n }\n\n /**\n * Set the parent of the node and also add this node to the parent's children.\n */\n set parent(parent: DataFlowNode) {\n this._parent = parent;\n if (parent) {\n parent.addChild(this);\n }\n }\n\n get children() {\n return this._children;\n }\n\n public numChildren() {\n return this._children.length;\n }\n\n public addChild(child: DataFlowNode, loc?: number) {\n // do not add the same child twice\n if (this._children.includes(child)) {\n log.warn(log.message.ADD_SAME_CHILD_TWICE);\n return;\n }\n\n if (loc !== undefined) {\n this._children.splice(loc, 0, child);\n } else {\n this._children.push(child);\n }\n }\n\n public removeChild(oldChild: DataFlowNode) {\n const loc = this._children.indexOf(oldChild);\n this._children.splice(loc, 1);\n return loc;\n }\n\n /**\n * Remove node from the dataflow.\n */\n public remove() {\n let loc = this._parent.removeChild(this);\n for (const child of this._children) {\n // do not use the set method because we want to insert at a particular location\n child._parent = this._parent;\n this._parent.addChild(child, loc++);\n }\n }\n\n /**\n * Insert another node as a parent of this node.\n */\n public insertAsParentOf(other: DataFlowNode) {\n const parent = other.parent;\n parent.removeChild(this);\n this.parent = parent;\n other.parent = this;\n }\n\n public swapWithParent() {\n const parent = this._parent;\n const newParent = parent.parent;\n\n // reconnect the children\n for (const child of this._children) {\n child.parent = parent;\n }\n\n // remove old links\n this._children = []; // equivalent to removing every child link one by one\n parent.removeChild(this);\n parent.parent.removeChild(parent);\n\n // swap two nodes\n this.parent = newParent;\n parent.parent = this;\n }\n}\n\nexport class OutputNode extends DataFlowNode {\n private _source: string;\n\n private _name: string;\n\n public clone(): this {\n const cloneObj = new (this.constructor as any)();\n cloneObj.debugName = `clone_${this.debugName}`;\n cloneObj._source = this._source;\n cloneObj._name = `clone_${this._name}`;\n cloneObj.type = this.type;\n cloneObj.refCounts = this.refCounts;\n cloneObj.refCounts[cloneObj._name] = 0;\n return cloneObj;\n }\n\n /**\n * @param source The name of the source. Will change in assemble.\n * @param type The type of the output node.\n * @param refCounts A global ref counter map.\n */\n constructor(\n parent: DataFlowNode,\n source: string,\n public readonly type: DataSourceType,\n private readonly refCounts: Dict\n ) {\n super(parent, source);\n\n this._source = this._name = source;\n\n if (this.refCounts && !(this._name in this.refCounts)) {\n this.refCounts[this._name] = 0;\n }\n }\n\n public dependentFields() {\n return new Set();\n }\n\n public producedFields() {\n return new Set();\n }\n\n public hash() {\n if (this._hash === undefined) {\n this._hash = `Output ${uniqueId()}`;\n }\n return this._hash;\n }\n\n /**\n * Request the datasource name and increase the ref counter.\n *\n * During the parsing phase, this will return the simple name such as 'main' or 'raw'.\n * It is crucial to request the name from an output node to mark it as a required node.\n * If nobody ever requests the name, this datasource will not be instantiated in the assemble phase.\n *\n * In the assemble phase, this will return the correct name.\n */\n public getSource() {\n this.refCounts[this._name]++;\n return this._source;\n }\n\n public isRequired(): boolean {\n return !!this.refCounts[this._name];\n }\n\n public setSource(source: string) {\n this._source = source;\n }\n}\n","import {TimeUnitTransform as VgTimeUnitTransform} from 'vega';\nimport {vgField} from '../../channeldef';\nimport {getTimeUnitParts, normalizeTimeUnit} from '../../timeunit';\nimport {TimeUnitTransform} from '../../transform';\nimport {Dict, duplicate, entries, hash, isEmpty, replacePathInField, vals} from '../../util';\nimport {ModelWithField} from '../model';\nimport {DataFlowNode} from './dataflow';\n\nexport type TimeUnitComponent = TimeUnitTransform;\n\nexport class TimeUnitNode extends DataFlowNode {\n public clone() {\n return new TimeUnitNode(null, duplicate(this.formula));\n }\n\n constructor(parent: DataFlowNode, private formula: Dict) {\n super(parent);\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: ModelWithField) {\n const formula = model.reduceFieldDef((timeUnitComponent: TimeUnitComponent, fieldDef) => {\n const {field, timeUnit} = fieldDef;\n\n if (timeUnit) {\n const as = vgField(fieldDef, {forAs: true});\n timeUnitComponent[\n hash({\n as,\n field,\n timeUnit\n })\n ] = {\n as,\n field,\n timeUnit\n };\n }\n return timeUnitComponent;\n }, {} as Dict);\n\n if (isEmpty(formula)) {\n return null;\n }\n\n return new TimeUnitNode(parent, formula);\n }\n\n public static makeFromTransform(parent: DataFlowNode, t: TimeUnitTransform) {\n const {timeUnit, ...other} = {...t};\n\n const normalizedTimeUnit = normalizeTimeUnit(timeUnit);\n\n const component = {\n ...other,\n timeUnit: normalizedTimeUnit\n };\n\n return new TimeUnitNode(parent, {\n [hash(component)]: component\n });\n }\n\n /**\n * Merge together TimeUnitNodes assigning the children of `other` to `this`\n * and removing `other`.\n */\n public merge(other: TimeUnitNode) {\n this.formula = {...this.formula};\n\n // if the same hash happen twice, merge\n for (const key in other.formula) {\n if (!this.formula[key]) {\n // copy if it's not a duplicate\n this.formula[key] = other.formula[key];\n }\n }\n\n for (const child of other.children) {\n other.removeChild(child);\n child.parent = this;\n }\n\n other.remove();\n }\n\n /**\n * Remove time units coming from the other node.\n */\n public removeFormulas(fields: Set) {\n const newFormula = {};\n\n for (const [key, timeUnit] of entries(this.formula)) {\n if (!fields.has(timeUnit.as)) {\n newFormula[key] = timeUnit;\n }\n }\n\n this.formula = newFormula;\n }\n\n public producedFields() {\n return new Set(vals(this.formula).map(f => f.as));\n }\n\n public dependentFields() {\n return new Set(vals(this.formula).map(f => f.field));\n }\n\n public hash() {\n return `TimeUnit ${hash(this.formula)}`;\n }\n\n public assemble() {\n const transforms: VgTimeUnitTransform[] = [];\n\n for (const f of vals(this.formula)) {\n const {field, as, timeUnit} = f;\n const {unit, utc, ...params} = normalizeTimeUnit(timeUnit);\n\n transforms.push({\n field: replacePathInField(field),\n type: 'timeunit',\n ...(unit ? {units: getTimeUnitParts(unit)} : {}),\n ...(utc ? {timezone: 'utc'} : {}),\n ...params,\n as: [as, `${as}_end`]\n });\n }\n\n return transforms;\n }\n}\n","import {array, isObject} from 'vega-util';\nimport {isSingleDefUnitChannel, ScaleChannel, SingleDefUnitChannel} from '../../channel';\nimport * as log from '../../log';\nimport {hasContinuousDomain} from '../../scale';\nimport {BaseSelectionConfig, SelectionInitIntervalMapping, SelectionInitMapping} from '../../selection';\nimport {Dict, hash, keys, replacePathInField, varName, isEmpty} from '../../util';\nimport {TimeUnitComponent, TimeUnitNode} from '../data/timeunit';\nimport {SelectionCompiler} from '.';\nexport const TUPLE_FIELDS = '_tuple_fields';\n\n/**\n * Whether the selection tuples hold enumerated or ranged values for a field.\n */\nexport type TupleStoreType =\n // enumerated\n | 'E'\n // ranged, exclusive, left-right inclusive\n | 'R'\n // ranged, left-inclusive, right-exclusive\n | 'R-RE';\n\nexport interface SelectionProjection {\n type: TupleStoreType;\n field: string;\n channel?: SingleDefUnitChannel;\n signals?: {data?: string; visual?: string};\n hasLegend?: boolean;\n}\n\nexport class SelectionProjectionComponent {\n public hasChannel: Partial>;\n public hasField: Record;\n public timeUnit?: TimeUnitNode;\n public items: SelectionProjection[];\n\n constructor(...items: SelectionProjection[]) {\n this.items = items;\n this.hasChannel = {};\n this.hasField = {};\n }\n}\n\nconst project: SelectionCompiler = {\n defined: () => {\n return true; // This transform handles its own defaults, so always run parse.\n },\n\n parse: (model, selCmpt, selDef) => {\n const name = selCmpt.name;\n const proj = (selCmpt.project ??= new SelectionProjectionComponent());\n const parsed: Dict = {};\n const timeUnits: Dict = {};\n\n const signals = new Set();\n const signalName = (p: SelectionProjection, range: 'data' | 'visual') => {\n const suffix = range === 'visual' ? p.channel : p.field;\n let sg = varName(`${name}_${suffix}`);\n for (let counter = 1; signals.has(sg); counter++) {\n sg = varName(`${name}_${suffix}_${counter}`);\n }\n signals.add(sg);\n return {[range]: sg};\n };\n\n const type = selCmpt.type;\n const cfg = model.config.selection[type];\n const init =\n selDef.value !== undefined\n ? (array(selDef.value as any) as SelectionInitMapping[] | SelectionInitIntervalMapping[])\n : null;\n\n // If no explicit projection (either fields or encodings) is specified, set some defaults.\n // If an initial value is set, try to infer projections.\n let {fields, encodings} = isObject(selDef.select) ? selDef.select : ({} as BaseSelectionConfig);\n if (!fields && !encodings && init) {\n for (const initVal of init) {\n // initVal may be a scalar value to smoothen varParam -> pointSelection gradient.\n if (!isObject(initVal)) {\n continue;\n }\n\n for (const key of keys(initVal)) {\n if (isSingleDefUnitChannel(key)) {\n (encodings || (encodings = [])).push(key as SingleDefUnitChannel);\n } else {\n if (type === 'interval') {\n log.warn(log.message.INTERVAL_INITIALIZED_WITH_X_Y);\n encodings = cfg.encodings;\n } else {\n (fields || (fields = [])).push(key);\n }\n }\n }\n }\n }\n\n // If no initial value is specified, use the default configuration.\n // We break this out as a separate if block (instead of an else condition)\n // to account for unprojected point selections that have scalar initial values\n if (!fields && !encodings) {\n encodings = cfg.encodings;\n fields = cfg.fields;\n }\n\n for (const channel of encodings ?? []) {\n const fieldDef = model.fieldDef(channel);\n if (fieldDef) {\n let field = fieldDef.field;\n\n if (fieldDef.aggregate) {\n log.warn(log.message.cannotProjectAggregate(channel, fieldDef.aggregate));\n continue;\n } else if (!field) {\n log.warn(log.message.cannotProjectOnChannelWithoutField(channel));\n continue;\n }\n\n if (fieldDef.timeUnit) {\n field = model.vgField(channel);\n // Construct TimeUnitComponents which will be combined into a\n // TimeUnitNode. This node may need to be inserted into the\n // dataflow if the selection is used across views that do not\n // have these time units defined.\n const component = {\n timeUnit: fieldDef.timeUnit,\n as: field,\n field: fieldDef.field\n };\n\n timeUnits[hash(component)] = component;\n }\n\n // Prevent duplicate projections on the same field.\n // TODO: what if the same field is bound to multiple channels (e.g., SPLOM diag).\n if (!parsed[field]) {\n // Determine whether the tuple will store enumerated or ranged values.\n // Interval selections store ranges for continuous scales, and enumerations otherwise.\n // Single/multi selections store ranges for binned fields, and enumerations otherwise.\n let tplType: TupleStoreType = 'E';\n if (type === 'interval') {\n const scaleType = model.getScaleComponent(channel as ScaleChannel).get('type');\n if (hasContinuousDomain(scaleType)) {\n tplType = 'R';\n }\n } else if (fieldDef.bin) {\n tplType = 'R-RE';\n }\n\n const p: SelectionProjection = {field, channel, type: tplType};\n p.signals = {...signalName(p, 'data'), ...signalName(p, 'visual')};\n proj.items.push((parsed[field] = p));\n proj.hasField[field] = proj.hasChannel[channel] = parsed[field];\n }\n } else {\n log.warn(log.message.cannotProjectOnChannelWithoutField(channel));\n }\n }\n\n // TODO: find a possible channel mapping for these fields.\n for (const field of fields ?? []) {\n if (proj.hasField[field]) continue;\n const p: SelectionProjection = {type: 'E', field};\n p.signals = {...signalName(p, 'data')};\n proj.items.push(p);\n proj.hasField[field] = p;\n }\n\n if (init) {\n selCmpt.init = (init as any).map((v: SelectionInitMapping | SelectionInitIntervalMapping) => {\n // Selections can be initialized either with a full object that maps projections to values\n // or scalar values to smoothen the abstraction gradient from variable params to point selections.\n return proj.items.map(p => (isObject(v) ? (v[p.channel] !== undefined ? v[p.channel] : v[p.field]) : v));\n });\n }\n\n if (!isEmpty(timeUnits)) {\n proj.timeUnit = new TimeUnitNode(null, timeUnits);\n }\n },\n\n signals: (model, selCmpt, allSignals) => {\n const name = selCmpt.name + TUPLE_FIELDS;\n const hasSignal = allSignals.filter(s => s.name === name);\n return hasSignal.length > 0\n ? allSignals\n : allSignals.concat({\n name,\n value: selCmpt.project.items.map(proj => {\n const {signals, hasLegend, ...rest} = proj;\n rest.field = replacePathInField(rest.field);\n return rest;\n })\n });\n }\n};\n\nexport default project;\n","import {stringValue} from 'vega-util';\nimport {VL_SELECTION_RESOLVE} from '.';\nimport {isScaleChannel, ScaleChannel} from '../../channel';\nimport * as log from '../../log';\nimport {hasContinuousDomain} from '../../scale';\nimport {isLayerModel, Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {SelectionProjection} from './project';\nimport {SelectionCompiler} from '.';\nimport {replacePathInField} from '../../util';\n\nconst scaleBindings: SelectionCompiler<'interval'> = {\n defined: selCmpt => {\n return selCmpt.type === 'interval' && selCmpt.resolve === 'global' && selCmpt.bind && selCmpt.bind === 'scales';\n },\n\n parse: (model, selCmpt) => {\n const bound: SelectionProjection[] = (selCmpt.scales = []);\n\n for (const proj of selCmpt.project.items) {\n const channel = proj.channel;\n\n if (!isScaleChannel(channel)) {\n continue;\n }\n\n const scale = model.getScaleComponent(channel);\n const scaleType = scale ? scale.get('type') : undefined;\n\n if (!scale || !hasContinuousDomain(scaleType)) {\n log.warn(log.message.SCALE_BINDINGS_CONTINUOUS);\n continue;\n }\n\n scale.set('selectionExtent', {param: selCmpt.name, field: proj.field}, true);\n bound.push(proj);\n }\n },\n\n topLevelSignals: (model, selCmpt, signals) => {\n const bound = selCmpt.scales.filter(proj => signals.filter(s => s.name === proj.signals.data).length === 0);\n\n // Top-level signals are only needed for multiview displays and if this\n // view's top-level signals haven't already been generated.\n if (!model.parent || isTopLevelLayer(model) || bound.length === 0) {\n return signals;\n }\n\n // vlSelectionResolve does not account for the behavior of bound scales in\n // multiview displays. Each unit view adds a tuple to the store, but the\n // state of the selection is the unit selection most recently updated. This\n // state is captured by the top-level signals that we insert and \"push\n // outer\" to from within the units. We need to reassemble this state into\n // the top-level named signal, except no single selCmpt has a global view.\n const namedSg = signals.filter(s => s.name === selCmpt.name)[0];\n let update = namedSg.update;\n if (update.indexOf(VL_SELECTION_RESOLVE) >= 0) {\n namedSg.update = `{${bound\n .map(proj => `${stringValue(replacePathInField(proj.field))}: ${proj.signals.data}`)\n .join(', ')}}`;\n } else {\n for (const proj of bound) {\n const mapping = `${stringValue(replacePathInField(proj.field))}: ${proj.signals.data}`;\n if (!update.includes(mapping)) {\n update = `${update.substring(0, update.length - 1)}, ${mapping}}`;\n }\n }\n namedSg.update = update;\n }\n\n return signals.concat(bound.map(proj => ({name: proj.signals.data})));\n },\n\n signals: (model, selCmpt, signals) => {\n // Nested signals need only push to top-level signals with multiview displays.\n if (model.parent && !isTopLevelLayer(model)) {\n for (const proj of selCmpt.scales) {\n const signal: any = signals.filter(s => s.name === proj.signals.data)[0];\n signal.push = 'outer';\n delete signal.value;\n delete signal.update;\n }\n }\n\n return signals;\n }\n};\n\nexport default scaleBindings;\n\nexport function domain(model: UnitModel, channel: ScaleChannel) {\n const scale = stringValue(model.scaleName(channel));\n return `domain(${scale})`;\n}\n\nfunction isTopLevelLayer(model: Model): boolean {\n return model.parent && isLayerModel(model.parent) && (!model.parent.parent ?? isTopLevelLayer(model.parent.parent));\n}\n","import {NewSignal, OnEvent, Stream} from 'vega';\nimport {array, stringValue} from 'vega-util';\nimport {SelectionCompiler, SelectionComponent, STORE, TUPLE, unitName} from '.';\nimport {ScaleChannel, X, Y} from '../../channel';\nimport {warn} from '../../log';\nimport {hasContinuousDomain} from '../../scale';\nimport {SelectionInitInterval} from '../../selection';\nimport {keys} from '../../util';\nimport {UnitModel} from '../unit';\nimport {assembleInit} from './assemble';\nimport {SelectionProjection, TUPLE_FIELDS} from './project';\nimport scales from './scales';\n\nexport const BRUSH = '_brush';\nexport const SCALE_TRIGGER = '_scale_trigger';\n\nconst interval: SelectionCompiler<'interval'> = {\n defined: selCmpt => selCmpt.type === 'interval',\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const fieldsSg = name + TUPLE_FIELDS;\n const hasScales = scales.defined(selCmpt);\n const init = selCmpt.init ? selCmpt.init[0] : null;\n const dataSignals: string[] = [];\n const scaleTriggers: {\n scaleName: string;\n expr: string;\n }[] = [];\n\n if (selCmpt.translate && !hasScales) {\n const filterExpr = `!event.item || event.item.mark.name !== ${stringValue(name + BRUSH)}`;\n events(selCmpt, (on: OnEvent[], evt: Stream) => {\n const filters = array((evt.between[0].filter ??= []));\n if (!filters.includes(filterExpr)) {\n filters.push(filterExpr);\n }\n return on;\n });\n }\n\n selCmpt.project.items.forEach((proj, i) => {\n const channel = proj.channel;\n if (channel !== X && channel !== Y) {\n warn('Interval selections only support x and y encoding channels.');\n return;\n }\n\n const val = init ? init[i] : null;\n const cs = channelSignals(model, selCmpt, proj, val);\n const dname = proj.signals.data;\n const vname = proj.signals.visual;\n const scaleName = stringValue(model.scaleName(channel));\n const scaleType = model.getScaleComponent(channel).get('type');\n const toNum = hasContinuousDomain(scaleType) ? '+' : '';\n\n signals.push(...cs);\n dataSignals.push(dname);\n\n scaleTriggers.push({\n scaleName: model.scaleName(channel),\n expr:\n `(!isArray(${dname}) || ` +\n `(${toNum}invert(${scaleName}, ${vname})[0] === ${toNum}${dname}[0] && ` +\n `${toNum}invert(${scaleName}, ${vname})[1] === ${toNum}${dname}[1]))`\n });\n });\n\n // Proxy scale reactions to ensure that an infinite loop doesn't occur\n // when an interval selection filter touches the scale.\n if (!hasScales) {\n signals.push({\n name: name + SCALE_TRIGGER,\n value: {},\n on: [\n {\n events: scaleTriggers.map(t => ({scale: t.scaleName})),\n update: `${scaleTriggers.map(t => t.expr).join(' && ')} ? ${name + SCALE_TRIGGER} : {}`\n }\n ]\n });\n }\n\n // Only add an interval to the store if it has valid data extents. Data extents\n // are set to null if pixel extents are equal to account for intervals over\n // ordinal/nominal domains which, when inverted, will still produce a valid datum.\n const update = `unit: ${unitName(model)}, fields: ${fieldsSg}, values`;\n return signals.concat({\n name: name + TUPLE,\n ...(init ? {init: `{${update}: ${assembleInit(init)}}`} : {}),\n on: [\n {\n events: [{signal: dataSignals.join(' || ')}], // Prevents double invocation, see https://github.com/vega/vega#1672.\n update: `${dataSignals.join(' && ')} ? {${update}: [${dataSignals}]} : null`\n }\n ]\n });\n },\n\n marks: (model, selCmpt, marks) => {\n const name = selCmpt.name;\n const {x, y} = selCmpt.project.hasChannel;\n const xvname = x && x.signals.visual;\n const yvname = y && y.signals.visual;\n const store = `data(${stringValue(selCmpt.name + STORE)})`;\n\n // Do not add a brush if we're binding to scales.\n if (scales.defined(selCmpt)) {\n return marks;\n }\n\n const update: any = {\n x: x !== undefined ? {signal: `${xvname}[0]`} : {value: 0},\n y: y !== undefined ? {signal: `${yvname}[0]`} : {value: 0},\n x2: x !== undefined ? {signal: `${xvname}[1]`} : {field: {group: 'width'}},\n y2: y !== undefined ? {signal: `${yvname}[1]`} : {field: {group: 'height'}}\n };\n\n // If the selection is resolved to global, only a single interval is in\n // the store. Wrap brush mark's encodings with a production rule to test\n // this based on the `unit` property. Hide the brush mark if it corresponds\n // to a unit different from the one in the store.\n if (selCmpt.resolve === 'global') {\n for (const key of keys(update)) {\n update[key] = [\n {\n test: `${store}.length && ${store}[0].unit === ${unitName(model)}`,\n ...update[key]\n },\n {value: 0}\n ];\n }\n }\n\n // Two brush marks ensure that fill colors and other aesthetic choices do\n // not interefere with the core marks, but that the brushed region can still\n // be interacted with (e.g., dragging it around).\n const {fill, fillOpacity, cursor, ...stroke} = selCmpt.mark;\n const vgStroke = keys(stroke).reduce((def, k) => {\n def[k] = [\n {\n test: [x !== undefined && `${xvname}[0] !== ${xvname}[1]`, y !== undefined && `${yvname}[0] !== ${yvname}[1]`]\n .filter(t => t)\n .join(' && '),\n value: stroke[k]\n },\n {value: null}\n ];\n return def;\n }, {});\n\n return [\n {\n name: `${name + BRUSH}_bg`,\n type: 'rect',\n clip: true,\n encode: {\n enter: {\n fill: {value: fill},\n fillOpacity: {value: fillOpacity}\n },\n update: update\n }\n },\n ...marks,\n {\n name: name + BRUSH,\n type: 'rect',\n clip: true,\n encode: {\n enter: {\n ...(cursor ? {cursor: {value: cursor}} : {}),\n fill: {value: 'transparent'}\n },\n update: {...update, ...vgStroke}\n }\n }\n ];\n }\n};\nexport default interval;\n\n/**\n * Returns the visual and data signals for an interval selection.\n */\nfunction channelSignals(\n model: UnitModel,\n selCmpt: SelectionComponent<'interval'>,\n proj: SelectionProjection,\n init?: SelectionInitInterval\n): NewSignal[] {\n const channel = proj.channel;\n const vname = proj.signals.visual;\n const dname = proj.signals.data;\n const hasScales = scales.defined(selCmpt);\n const scaleName = stringValue(model.scaleName(channel));\n const scale = model.getScaleComponent(channel as ScaleChannel);\n const scaleType = scale ? scale.get('type') : undefined;\n const scaled = (str: string) => `scale(${scaleName}, ${str})`;\n const size = model.getSizeSignalRef(channel === X ? 'width' : 'height').signal;\n const coord = `${channel}(unit)`;\n\n const on = events(selCmpt, (def: OnEvent[], evt: Stream) => {\n return [\n ...def,\n {events: evt.between[0], update: `[${coord}, ${coord}]`}, // Brush Start\n {events: evt, update: `[${vname}[0], clamp(${coord}, 0, ${size})]`} // Brush End\n ];\n });\n\n // React to pan/zooms of continuous scales. Non-continuous scales\n // (band, point) cannot be pan/zoomed and any other changes\n // to their domains (e.g., filtering) should clear the brushes.\n on.push({\n events: {signal: selCmpt.name + SCALE_TRIGGER},\n update: hasContinuousDomain(scaleType) ? `[${scaled(`${dname}[0]`)}, ${scaled(`${dname}[1]`)}]` : `[0, 0]`\n });\n\n return hasScales\n ? [{name: dname, on: []}]\n : [\n {\n name: vname,\n ...(init ? {init: assembleInit(init, true, scaled)} : {value: []}),\n on: on\n },\n {\n name: dname,\n ...(init ? {init: assembleInit(init)} : {}), // Cannot be `value` as `init` may require datetime exprs.\n on: [\n {\n events: {signal: vname},\n update: `${vname}[0] === ${vname}[1] ? null : invert(${scaleName}, ${vname})`\n }\n ]\n }\n ];\n}\n\nfunction events(selCmpt: SelectionComponent<'interval'>, cb: (def: OnEvent[], evt: Stream) => OnEvent[]): OnEvent[] {\n return selCmpt.events.reduce((on, evt) => {\n if (!evt.between) {\n warn(`${evt} is not an ordered event stream for interval selections.`);\n return on;\n }\n return cb(on, evt);\n }, [] as OnEvent[]);\n}\n","import {Stream} from 'vega';\nimport {stringValue} from 'vega-util';\nimport {SelectionCompiler, TUPLE, unitName} from '.';\nimport {TUPLE_FIELDS} from './project';\n\nconst point: SelectionCompiler<'point'> = {\n defined: selCmpt => selCmpt.type === 'point',\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const fieldsSg = name + TUPLE_FIELDS;\n const project = selCmpt.project;\n const datum = '(item().isVoronoi ? datum.datum : datum)';\n const values = project.items\n .map(p => {\n const fieldDef = model.fieldDef(p.channel);\n // Binned fields should capture extents, for a range test against the raw field.\n return fieldDef && fieldDef.bin\n ? `[${datum}[${stringValue(model.vgField(p.channel, {}))}], ` +\n `${datum}[${stringValue(model.vgField(p.channel, {binSuffix: 'end'}))}]]`\n : `${datum}[${stringValue(p.field)}]`;\n })\n .join(', ');\n\n // Only add a discrete selection to the store if a datum is present _and_\n // the interaction isn't occurring on a group mark. This guards against\n // polluting interactive state with invalid values in faceted displays\n // as the group marks are also data-driven. We force the update to account\n // for constant null states but varying toggles (e.g., shift-click in\n // whitespace followed by a click in whitespace; the store should only\n // be cleared on the second click).\n const update = `unit: ${unitName(model)}, fields: ${fieldsSg}, values`;\n\n const events: Stream[] = selCmpt.events;\n\n return signals.concat([\n {\n name: name + TUPLE,\n on: events\n ? [\n {\n events,\n update: `datum && item().mark.marktype !== 'group' ? {${update}: [${values}]} : null`,\n force: true\n }\n ]\n : []\n }\n ]);\n }\n};\n\nexport default point;\n","import {array} from 'vega-util';\nimport {ChannelDef, ConditionalPredicate, isConditionalDef, isConditionalParameter} from '../../../channeldef';\nimport {GuideEncodingConditionalValueDef} from '../../../guide';\nimport {VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {expression} from '../../predicate';\nimport {parseSelectionPredicate} from '../../selection/parse';\nimport {UnitModel} from '../../unit';\n\n/**\n * Return a mixin that includes a Vega production rule for a Vega-Lite conditional channel definition\n * or a simple mixin if channel def has no condition.\n */\nexport function wrapCondition(\n model: UnitModel,\n channelDef: CD,\n vgChannel: string,\n refFn: (cDef: CD) => VgValueRef\n): VgEncodeEntry {\n const condition = isConditionalDef(channelDef) && channelDef.condition;\n const valueRef = refFn(channelDef);\n if (condition) {\n const conditions = array(condition);\n const vgConditions = conditions.map(c => {\n const conditionValueRef = refFn(c);\n if (isConditionalParameter(c)) {\n const {param, empty} = c;\n const test = parseSelectionPredicate(model, {param, empty});\n return {test, ...conditionValueRef};\n } else {\n const test = expression(model, (c as ConditionalPredicate).test); // FIXME: remove casting once TS is no longer dumb about it\n return {test, ...conditionValueRef};\n }\n });\n return {\n [vgChannel]: [...vgConditions, ...(valueRef !== undefined ? [valueRef] : [])]\n };\n } else {\n return valueRef !== undefined ? {[vgChannel]: valueRef} : {};\n }\n}\n","import {getFormatMixins, isFieldOrDatumDef, isValueDef} from '../../../channeldef';\nimport {Config} from '../../../config';\nimport {Encoding} from '../../../encoding';\nimport {VgValueRef} from '../../../vega.schema';\nimport {signalOrValueRef} from '../../common';\nimport {formatSignalRef} from '../../format';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\n\nexport function text(model: UnitModel, channel: 'text' | 'href' | 'url' | 'description' = 'text') {\n const channelDef = model.encoding[channel];\n return wrapCondition(model, channelDef, channel, cDef => textRef(cDef, model.config));\n}\n\nexport function textRef(\n channelDef: Encoding['text' | 'tooltip'],\n config: Config,\n expr: 'datum' | 'datum.datum' = 'datum'\n): VgValueRef {\n // text\n if (channelDef) {\n if (isValueDef(channelDef)) {\n return signalOrValueRef(channelDef.value);\n }\n if (isFieldOrDatumDef(channelDef)) {\n const {format, formatType} = getFormatMixins(channelDef);\n return formatSignalRef({fieldOrDatumDef: channelDef, format, formatType, expr, config});\n }\n }\n return undefined;\n}\n","import {array, isArray, isObject, isString} from 'vega-util';\nimport {isBinned} from '../../../bin';\nimport {getMainRangeChannel, isXorY, Channel} from '../../../channel';\nimport {\n defaultTitle,\n getFieldDef,\n getFormatMixins,\n hasConditionalFieldDef,\n isFieldDef,\n isTypedFieldDef,\n SecondaryFieldDef,\n TypedFieldDef,\n vgField\n} from '../../../channeldef';\nimport {Config} from '../../../config';\nimport {Encoding, forEach} from '../../../encoding';\nimport {StackProperties} from '../../../stack';\nimport {entries} from '../../../util';\nimport {isSignalRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig} from '../../common';\nimport {binFormatExpression, formatSignalRef} from '../../format';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\nimport {textRef} from './text';\n\nexport function tooltip(model: UnitModel, opt: {reactiveGeom?: boolean} = {}) {\n const {encoding, markDef, config, stack} = model;\n const channelDef = encoding.tooltip;\n if (isArray(channelDef)) {\n return {tooltip: tooltipRefForEncoding({tooltip: channelDef}, stack, config, opt)};\n } else {\n const datum = opt.reactiveGeom ? 'datum.datum' : 'datum';\n return wrapCondition(model, channelDef, 'tooltip', cDef => {\n // use valueRef based on channelDef first\n const tooltipRefFromChannelDef = textRef(cDef, config, datum);\n if (tooltipRefFromChannelDef) {\n return tooltipRefFromChannelDef;\n }\n\n if (cDef === null) {\n // Allow using encoding.tooltip = null to disable tooltip\n return undefined;\n }\n\n let markTooltip = getMarkPropOrConfig('tooltip', markDef, config);\n\n if (markTooltip === true) {\n markTooltip = {content: 'encoding'};\n }\n\n if (isString(markTooltip)) {\n return {value: markTooltip};\n } else if (isObject(markTooltip)) {\n // `tooltip` is `{fields: 'encodings' | 'fields'}`\n if (isSignalRef(markTooltip)) {\n return markTooltip;\n } else if (markTooltip.content === 'encoding') {\n return tooltipRefForEncoding(encoding, stack, config, opt);\n } else {\n return {signal: datum};\n }\n }\n\n return undefined;\n });\n }\n}\n\nexport function tooltipData(\n encoding: Encoding,\n stack: StackProperties,\n config: Config,\n {reactiveGeom}: {reactiveGeom?: boolean} = {}\n) {\n const toSkip = {};\n const expr = reactiveGeom ? 'datum.datum' : 'datum';\n const tuples: {channel: Channel; key: string; value: string}[] = [];\n\n function add(fDef: TypedFieldDef | SecondaryFieldDef, channel: Channel) {\n const mainChannel = getMainRangeChannel(channel);\n\n const fieldDef: TypedFieldDef = isTypedFieldDef(fDef)\n ? fDef\n : {\n ...fDef,\n type: (encoding[mainChannel] as TypedFieldDef).type // for secondary field def, copy type from main channel\n };\n\n const title = fieldDef.title || defaultTitle(fieldDef, config);\n const key = array(title).join(', ');\n\n let value: string;\n\n if (isXorY(channel)) {\n const channel2 = channel === 'x' ? 'x2' : 'y2';\n const fieldDef2 = getFieldDef(encoding[channel2]);\n\n if (isBinned(fieldDef.bin) && fieldDef2) {\n const startField = vgField(fieldDef, {expr});\n const endField = vgField(fieldDef2, {expr});\n const {format, formatType} = getFormatMixins(fieldDef);\n value = binFormatExpression(startField, endField, format, formatType, config);\n toSkip[channel2] = true;\n } else if (stack && stack.fieldChannel === channel && stack.offset === 'normalize') {\n const {format, formatType} = getFormatMixins(fieldDef);\n value = formatSignalRef({fieldOrDatumDef: fieldDef, format, formatType, expr, config, normalizeStack: true})\n .signal;\n }\n }\n\n value ??= textRef(fieldDef, config, expr).signal;\n\n tuples.push({channel, key, value});\n }\n\n forEach(encoding, (channelDef, channel) => {\n if (isFieldDef(channelDef)) {\n add(channelDef, channel);\n } else if (hasConditionalFieldDef(channelDef)) {\n add(channelDef.condition, channel);\n }\n });\n\n const out = {};\n for (const {channel, key, value} of tuples) {\n if (!toSkip[channel] && !out[key]) {\n out[key] = value;\n }\n }\n\n return out;\n}\n\nexport function tooltipRefForEncoding(\n encoding: Encoding,\n stack: StackProperties,\n config: Config,\n {reactiveGeom}: {reactiveGeom?: boolean} = {}\n) {\n const data = tooltipData(encoding, stack, config, {reactiveGeom});\n\n const keyValues = entries(data).map(([key, value]) => `\"${key}\": ${value}`);\n return keyValues.length > 0 ? {signal: `{${keyValues.join(', ')}}`} : undefined;\n}\n","import {entries, isEmpty} from '../../../util';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {VG_MARK_INDEX} from './../../../vega.schema';\nimport {UnitModel} from './../../unit';\nimport {wrapCondition} from './conditional';\nimport {textRef} from './text';\nimport {tooltipData} from './tooltip';\n\nexport function aria(model: UnitModel) {\n const {markDef, config} = model;\n\n const enableAria = getMarkPropOrConfig('aria', markDef, config);\n\n // We can ignore other aria properties if ariaHidden is true.\n if (enableAria === false) {\n // getMarkGroups sets aria to false already so we don't have to set it in the encode block\n return {};\n }\n\n return {\n ...(enableAria ? {aria: enableAria} : {}),\n ...ariaRoleDescription(model),\n ...description(model)\n };\n}\n\nfunction ariaRoleDescription(model: UnitModel) {\n const {mark, markDef, config} = model;\n\n if (config.aria === false) {\n return {};\n }\n\n const ariaRoleDesc = getMarkPropOrConfig('ariaRoleDescription', markDef, config);\n\n if (ariaRoleDesc != null) {\n return {ariaRoleDescription: {value: ariaRoleDesc}};\n }\n\n return mark in VG_MARK_INDEX ? {} : {ariaRoleDescription: {value: mark}};\n}\n\nexport function description(model: UnitModel) {\n const {encoding, markDef, config, stack} = model;\n const channelDef = encoding.description;\n\n if (channelDef) {\n return wrapCondition(model, channelDef, 'description', cDef => textRef(cDef, model.config));\n }\n\n // Use default from mark def or config if defined.\n // Functions in encode usually just return undefined but since we are defining a default below, we need to check the default here.\n const descriptionValue = getMarkPropOrConfig('description', markDef, config);\n if (descriptionValue != null) {\n return {\n description: signalOrValueRef(descriptionValue)\n };\n }\n\n if (config.aria === false) {\n return {};\n }\n\n const data = tooltipData(encoding, stack, config);\n\n if (isEmpty(data)) {\n return undefined;\n }\n\n return {\n description: {\n signal: entries(data)\n .map(([key, value], index) => `\"${index > 0 ? '; ' : ''}${key}: \" + (${value})`)\n .join(' + ')\n }\n };\n}\n","import {SignalRef} from 'vega';\nimport {NonPositionScaleChannel} from '../../../channel';\nimport {Value} from '../../../channeldef';\nimport {VgEncodeChannel, VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\nimport * as ref from './valueref';\n\n/**\n * Return encode for non-positional channels with scales. (Text doesn't have scale.)\n */\nexport function nonPosition(\n channel: NonPositionScaleChannel,\n model: UnitModel,\n opt: {\n defaultValue?: Value | SignalRef;\n vgChannel?: VgEncodeChannel;\n defaultRef?: VgValueRef;\n } = {}\n): VgEncodeEntry {\n const {markDef, encoding, config} = model;\n const {vgChannel} = opt;\n let {defaultRef, defaultValue} = opt;\n\n if (defaultRef === undefined) {\n // prettier-ignore\n defaultValue ??= getMarkPropOrConfig(channel, markDef, config, {vgChannel, ignoreVgConfig: true});\n\n if (defaultValue !== undefined) {\n defaultRef = signalOrValueRef(defaultValue);\n }\n }\n\n const channelDef = encoding[channel];\n\n return wrapCondition(model, channelDef, vgChannel ?? channel, cDef => {\n return ref.midPoint({\n channel,\n channelDef: cDef,\n markDef,\n config,\n scaleName: model.scaleName(channel),\n scale: model.getScaleComponent(channel),\n stack: null, // No need to provide stack for non-position as it does not affect mid point\n defaultRef\n });\n });\n}\n","import * as log from '../../../log';\nimport {contains} from '../../../util';\nimport {VgEncodeEntry} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {nonPosition} from './nonposition';\n\nexport function color(model: UnitModel, opt: {filled: boolean | undefined} = {filled: undefined}): VgEncodeEntry {\n const {markDef, encoding, config} = model;\n const {type: markType} = markDef;\n\n // Allow filled to be overridden (for trail's \"filled\")\n const filled = opt.filled ?? getMarkPropOrConfig('filled', markDef, config);\n\n const transparentIfNeeded = contains(['bar', 'point', 'circle', 'square', 'geoshape'], markType)\n ? 'transparent'\n : undefined;\n\n const defaultFill =\n getMarkPropOrConfig(filled === true ? 'color' : undefined, markDef, config, {vgChannel: 'fill'}) ??\n // need to add this manually as getMarkConfig normally drops config.mark[channel] if vgChannel is specified\n config.mark[filled === true && 'color'] ??\n // If there is no fill, always fill symbols, bar, geoshape\n // with transparent fills https://github.com/vega/vega-lite/issues/1316\n transparentIfNeeded;\n\n const defaultStroke =\n getMarkPropOrConfig(filled === false ? 'color' : undefined, markDef, config, {vgChannel: 'stroke'}) ??\n // need to add this manually as getMarkConfig normally drops config.mark[channel] if vgChannel is specified\n config.mark[filled === false && 'color'];\n\n const colorVgChannel = filled ? 'fill' : 'stroke';\n\n const fillStrokeMarkDefAndConfig: VgEncodeEntry = {\n ...(defaultFill ? {fill: signalOrValueRef(defaultFill)} : {}),\n ...(defaultStroke ? {stroke: signalOrValueRef(defaultStroke)} : {})\n };\n\n if (markDef.color && (filled ? markDef.fill : markDef.stroke)) {\n log.warn(log.message.droppingColor('property', {fill: 'fill' in markDef, stroke: 'stroke' in markDef}));\n }\n\n return {\n ...fillStrokeMarkDefAndConfig,\n ...nonPosition('color', model, {\n vgChannel: colorVgChannel,\n defaultValue: filled ? defaultFill : defaultStroke\n }),\n ...nonPosition('fill', model, {\n // if there is encoding.fill, include default fill just in case we have conditional-only fill encoding\n defaultValue: encoding.fill ? defaultFill : undefined\n }),\n ...nonPosition('stroke', model, {\n // if there is encoding.stroke, include default fill just in case we have conditional-only stroke encoding\n defaultValue: encoding.stroke ? defaultStroke : undefined\n })\n };\n}\n","import {isValueDef} from '../../../channeldef';\nimport {isPathMark} from '../../../mark';\nimport {signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\n\nexport function zindex(model: UnitModel) {\n const {encoding, mark} = model;\n const order = encoding.order;\n\n if (!isPathMark(mark) && isValueDef(order)) {\n return wrapCondition(model, order, 'zindex', cd => signalOrValueRef(cd.value));\n }\n return {};\n}\n","/**\n * Utility files for producing Vega ValueRef for marks\n */\nimport {SignalRef} from 'vega';\nimport {getOffsetChannel, PolarPositionChannel, PositionChannel} from '../../../channel';\nimport {Mark, MarkDef} from '../../../mark';\n\nexport function getOffset(\n channel: PositionChannel | PolarPositionChannel,\n markDef: MarkDef\n): number | SignalRef {\n const offsetChannel = getOffsetChannel(channel);\n\n // TODO: in the future read from encoding channel too\n const markDefOffsetValue = markDef[offsetChannel];\n if (markDefOffsetValue) {\n return markDefOffsetValue;\n }\n\n return undefined;\n}\n","import {\n getMainRangeChannel,\n getSecondaryRangeChannel,\n getSizeChannel,\n getVgPositionChannel,\n isXorY,\n PolarPositionChannel,\n PositionChannel\n} from '../../../channel';\nimport {isFieldDef, isFieldOrDatumDef, TypedFieldDef} from '../../../channeldef';\nimport {ScaleType} from '../../../scale';\nimport {contains} from '../../../util';\nimport {VgValueRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig} from '../../common';\nimport {ScaleComponent} from '../../scale/component';\nimport {UnitModel} from '../../unit';\nimport {getOffset} from './offset';\nimport * as ref from './valueref';\n\n/**\n * Return encode for point (non-band) position channels.\n */\nexport function pointPosition(\n channel: 'x' | 'y' | 'theta' | 'radius',\n model: UnitModel,\n {\n defaultPos,\n vgChannel\n }: {\n defaultPos: 'mid' | 'zeroOrMin' | 'zeroOrMax' | null;\n vgChannel?: 'x' | 'y' | 'xc' | 'yc';\n }\n) {\n const {encoding, markDef, config, stack} = model;\n\n const channelDef = encoding[channel];\n const channel2Def = encoding[getSecondaryRangeChannel(channel)];\n const scaleName = model.scaleName(channel);\n const scale = model.getScaleComponent(channel);\n\n const offset = getOffset(channel, markDef);\n\n // Get default position or position from mark def\n const defaultRef = pointPositionDefaultRef({\n model,\n defaultPos,\n channel,\n scaleName,\n scale\n });\n\n const valueRef =\n !channelDef && isXorY(channel) && (encoding.latitude || encoding.longitude)\n ? // use geopoint output if there are lat/long and there is no point position overriding lat/long.\n {field: model.getName(channel)}\n : positionRef({\n channel,\n channelDef,\n channel2Def,\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef\n });\n\n return valueRef ? {[vgChannel || channel]: valueRef} : undefined;\n}\n\n// TODO: we need to find a way to refactor these so that scaleName is a part of scale\n// but that's complicated. For now, this is a huge step moving forward.\n\n/**\n * @return Vega ValueRef for normal x- or y-position without projection\n */\nexport function positionRef(\n params: ref.MidPointParams & {\n channel: 'x' | 'y' | 'radius' | 'theta';\n }\n): VgValueRef | VgValueRef[] {\n const {channel, channelDef, scaleName, stack, offset, markDef} = params;\n\n // This isn't a part of midPoint because we use midPoint for non-position too\n if (isFieldOrDatumDef(channelDef) && stack && channel === stack.fieldChannel) {\n if (isFieldDef(channelDef)) {\n let bandPosition = channelDef.bandPosition;\n\n if (bandPosition === undefined && markDef.type === 'text' && (channel === 'radius' || channel === 'theta')) {\n // theta and radius of text mark should use bandPosition = 0.5 by default\n // so that labels for arc marks are centered automatically\n bandPosition = 0.5;\n }\n\n if (bandPosition !== undefined) {\n return ref.interpolatedSignalRef({\n scaleName,\n fieldOrDatumDef: channelDef as TypedFieldDef, // positionRef always have type\n startSuffix: 'start',\n bandPosition,\n offset\n });\n }\n }\n // x or y use stack_end so that stacked line's point mark use stack_end too.\n return ref.valueRefForFieldOrDatumDef(channelDef, scaleName, {suffix: 'end'}, {offset});\n }\n\n return ref.midPointRefWithPositionInvalidTest(params);\n}\n\nexport function pointPositionDefaultRef({\n model,\n defaultPos,\n channel,\n scaleName,\n scale\n}: {\n model: UnitModel;\n defaultPos: 'mid' | 'zeroOrMin' | 'zeroOrMax' | null;\n channel: PositionChannel | PolarPositionChannel;\n scaleName: string;\n scale: ScaleComponent;\n}): () => VgValueRef {\n const {markDef, config} = model;\n return () => {\n const mainChannel = getMainRangeChannel(channel);\n const vgChannel = getVgPositionChannel(channel);\n\n const definedValueOrConfig = getMarkPropOrConfig(channel, markDef, config, {vgChannel});\n if (definedValueOrConfig !== undefined) {\n return ref.widthHeightValueOrSignalRef(channel, definedValueOrConfig);\n }\n\n switch (defaultPos) {\n case 'zeroOrMin':\n case 'zeroOrMax':\n if (scaleName) {\n const scaleType = scale.get('type');\n if (contains([ScaleType.LOG, ScaleType.TIME, ScaleType.UTC], scaleType)) {\n // Log scales cannot have zero.\n // Zero in time scale is arbitrary, and does not affect ratio.\n // (Time is an interval level of measurement, not ratio).\n // See https://en.wikipedia.org/wiki/Level_of_measurement for more info.\n } else {\n if (scale.domainDefinitelyIncludesZero()) {\n return {\n scale: scaleName,\n value: 0\n };\n }\n }\n }\n\n if (defaultPos === 'zeroOrMin') {\n return mainChannel === 'y' ? {field: {group: 'height'}} : {value: 0};\n } else {\n // zeroOrMax\n switch (mainChannel) {\n case 'radius':\n // max of radius is min(width, height) / 2\n return {\n signal: `min(${model.width.signal},${model.height.signal})/2`\n };\n case 'theta':\n return {signal: '2*PI'};\n case 'x':\n return {field: {group: 'width'}};\n case 'y':\n return {value: 0};\n }\n }\n break;\n case 'mid': {\n const sizeRef = model[getSizeChannel(channel)];\n return {...sizeRef, mult: 0.5};\n }\n }\n // defaultPos === null\n return undefined;\n };\n}\n","import {Align, SignalRef, TextBaseline} from 'vega';\nimport {getVgPositionChannel} from '../../../channel';\nimport {Config} from '../../../config';\nimport * as log from '../../../log';\nimport {Mark, MarkDef} from '../../../mark';\nimport {isSignalRef, VgEncodeChannel} from '../../../vega.schema';\nimport {getMarkPropOrConfig} from '../../common';\n\nconst ALIGNED_X_CHANNEL: Record = {\n left: 'x',\n center: 'xc',\n right: 'x2'\n};\n\nconst BASELINED_Y_CHANNEL = {\n top: 'y',\n middle: 'yc',\n bottom: 'y2'\n};\n\nexport function vgAlignedPositionChannel(\n channel: 'x' | 'y' | 'radius' | 'theta',\n markDef: MarkDef,\n config: Config,\n defaultAlign: 'top' | 'middle' = 'middle'\n) {\n if (channel === 'radius' || channel === 'theta') {\n return getVgPositionChannel(channel);\n }\n const alignChannel = channel === 'x' ? 'align' : 'baseline';\n const align = getMarkPropOrConfig(alignChannel, markDef, config);\n\n let alignExcludingSignal: Align | TextBaseline;\n\n if (isSignalRef(align)) {\n log.warn(log.message.rangeMarkAlignmentCannotBeExpression(alignChannel));\n alignExcludingSignal = undefined;\n } else {\n alignExcludingSignal = align;\n }\n\n if (channel === 'x') {\n return ALIGNED_X_CHANNEL[alignExcludingSignal || (defaultAlign === 'top' ? 'left' : 'center')];\n } else {\n return BASELINED_Y_CHANNEL[alignExcludingSignal || defaultAlign];\n }\n}\n","import {SignalRef} from 'vega';\nimport {getMainRangeChannel, getSecondaryRangeChannel, getSizeChannel, getVgPositionChannel} from '../../../channel';\nimport {isFieldOrDatumDef} from '../../../channeldef';\nimport * as log from '../../../log';\nimport {isRelativeBandSize, Mark, MarkConfig, MarkDef} from '../../../mark';\nimport {VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {getMarkStyleConfig} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {getOffset} from './offset';\nimport {vgAlignedPositionChannel} from './position-align';\nimport {pointPosition, pointPositionDefaultRef} from './position-point';\nimport * as ref from './valueref';\n\n/**\n * Utility for area/rule position, which can be either point or range.\n * (One of the axes should be point and the other should be range.)\n */\nexport function pointOrRangePosition(\n channel: 'x' | 'y',\n model: UnitModel,\n {\n defaultPos,\n defaultPos2,\n range\n }: {\n defaultPos: 'zeroOrMin' | 'zeroOrMax' | 'mid';\n defaultPos2: 'zeroOrMin' | 'zeroOrMax';\n range: boolean;\n }\n) {\n if (range) {\n return rangePosition(channel, model, {defaultPos, defaultPos2});\n }\n return pointPosition(channel, model, {defaultPos});\n}\n\nexport function rangePosition(\n channel: 'x' | 'y' | 'theta' | 'radius',\n model: UnitModel,\n {\n defaultPos,\n defaultPos2\n }: {\n defaultPos: 'zeroOrMin' | 'zeroOrMax' | 'mid';\n defaultPos2: 'zeroOrMin' | 'zeroOrMax';\n }\n): VgEncodeEntry {\n const {markDef, config} = model;\n const channel2 = getSecondaryRangeChannel(channel);\n const sizeChannel = getSizeChannel(channel);\n\n const pos2Mixins = pointPosition2OrSize(model, defaultPos2, channel2);\n\n const vgChannel = pos2Mixins[sizeChannel]\n ? // If there is width/height, we need to position the marks based on the alignment.\n vgAlignedPositionChannel(channel, markDef, config)\n : // Otherwise, make sure to apply to the right Vg Channel (for arc mark)\n getVgPositionChannel(channel);\n\n return {\n ...pointPosition(channel, model, {defaultPos, vgChannel}),\n ...pos2Mixins\n };\n}\n\n/**\n * Return encode for x2, y2.\n * If channel is not specified, return one channel based on orientation.\n */\nfunction pointPosition2OrSize(\n model: UnitModel,\n defaultPos: 'zeroOrMin' | 'zeroOrMax',\n channel: 'x2' | 'y2' | 'radius2' | 'theta2'\n) {\n const {encoding, mark, markDef, stack, config} = model;\n\n const baseChannel = getMainRangeChannel(channel);\n const sizeChannel = getSizeChannel(channel);\n const vgChannel = getVgPositionChannel(channel);\n\n const channelDef = encoding[baseChannel];\n const scaleName = model.scaleName(baseChannel);\n const scale = model.getScaleComponent(baseChannel);\n\n const offset =\n channel in encoding || channel in markDef\n ? getOffset(channel, model.markDef)\n : getOffset(baseChannel, model.markDef);\n\n if (!channelDef && (channel === 'x2' || channel === 'y2') && (encoding.latitude || encoding.longitude)) {\n const vgSizeChannel = getSizeChannel(channel);\n\n const size = model.markDef[vgSizeChannel];\n if (size != null) {\n return {\n [vgSizeChannel]: {value: size}\n };\n } else {\n return {\n [vgChannel]: {field: model.getName(channel)}\n };\n }\n }\n\n const valueRef = position2Ref({\n channel,\n channelDef,\n channel2Def: encoding[channel],\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef: undefined\n });\n\n if (valueRef !== undefined) {\n return {[vgChannel]: valueRef};\n }\n\n // TODO: check width/height encoding here once we add them\n\n // no x2/y2 encoding, then try to read x2/y2 or width/height based on precedence:\n // markDef > config.style > mark-specific config (config[mark]) > general mark config (config.mark)\n\n return (\n position2orSize(channel, markDef) ||\n position2orSize(channel, {\n [channel]: getMarkStyleConfig(channel, markDef, config.style),\n [sizeChannel]: getMarkStyleConfig(sizeChannel, markDef, config.style)\n }) ||\n position2orSize(channel, config[mark]) ||\n position2orSize(channel, config.mark) || {\n [vgChannel]: pointPositionDefaultRef({\n model,\n defaultPos,\n channel,\n scaleName,\n scale\n })()\n }\n );\n}\n\nexport function position2Ref({\n channel,\n channelDef,\n channel2Def,\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef\n}: ref.MidPointParams & {\n channel: 'x2' | 'y2' | 'radius2' | 'theta2';\n}): VgValueRef | VgValueRef[] {\n if (\n isFieldOrDatumDef(channelDef) &&\n stack &&\n // If fieldChannel is X and channel is X2 (or Y and Y2)\n channel.charAt(0) === stack.fieldChannel.charAt(0)\n ) {\n return ref.valueRefForFieldOrDatumDef(channelDef, scaleName, {suffix: 'start'}, {offset});\n }\n return ref.midPointRefWithPositionInvalidTest({\n channel,\n channelDef: channel2Def,\n scaleName,\n scale,\n stack,\n markDef,\n config,\n offset,\n defaultRef\n });\n}\n\nfunction position2orSize(\n channel: 'x2' | 'y2' | 'radius2' | 'theta2',\n markDef: MarkConfig | MarkDef\n) {\n const sizeChannel = getSizeChannel(channel);\n const vgChannel = getVgPositionChannel(channel);\n if (markDef[vgChannel] !== undefined) {\n return {[vgChannel]: ref.widthHeightValueOrSignalRef(channel, markDef[vgChannel])};\n } else if (markDef[channel] !== undefined) {\n return {[vgChannel]: ref.widthHeightValueOrSignalRef(channel, markDef[channel])};\n } else if (markDef[sizeChannel]) {\n const dimensionSize = markDef[sizeChannel];\n if (isRelativeBandSize(dimensionSize)) {\n log.warn(log.message.relativeBandSizeNotSupported(sizeChannel));\n } else {\n return {[sizeChannel]: ref.widthHeightValueOrSignalRef(channel, dimensionSize)};\n }\n }\n return undefined;\n}\n","import {SignalRef} from 'vega';\nimport {isArray, isNumber} from 'vega-util';\nimport {isBinned, isBinning, isBinParams} from '../../../bin';\nimport {\n getSecondaryRangeChannel,\n getSizeChannel,\n getVgPositionChannel,\n isPolarPositionChannel,\n isXorY,\n PolarPositionChannel,\n PositionChannel\n} from '../../../channel';\nimport {getBandSize, isFieldDef, isFieldOrDatumDef, TypedFieldDef, vgField} from '../../../channeldef';\nimport {Config, getViewConfigDiscreteStep} from '../../../config';\nimport {Encoding} from '../../../encoding';\nimport * as log from '../../../log';\nimport {BandSize, isRelativeBandSize, Mark, MarkDef, RelativeBandSize} from '../../../mark';\nimport {hasDiscreteDomain} from '../../../scale';\nimport {isSignalRef, isVgRangeStep, VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrStringValue, signalOrValueRef} from '../../common';\nimport {ScaleComponent} from '../../scale/component';\nimport {UnitModel} from '../../unit';\nimport {nonPosition} from './nonposition';\nimport {getOffset} from './offset';\nimport {vgAlignedPositionChannel} from './position-align';\nimport {pointPositionDefaultRef} from './position-point';\nimport {rangePosition} from './position-range';\nimport * as ref from './valueref';\n\nexport function rectPosition(\n model: UnitModel,\n channel: 'x' | 'y' | 'theta' | 'radius',\n mark: 'bar' | 'rect' | 'image' | 'arc'\n): VgEncodeEntry {\n const {config, encoding, markDef} = model;\n\n const channel2 = getSecondaryRangeChannel(channel);\n const sizeChannel = getSizeChannel(channel);\n const channelDef = encoding[channel];\n const channelDef2 = encoding[channel2];\n\n const scale = model.getScaleComponent(channel);\n const scaleType = scale ? scale.get('type') : undefined;\n const scaleName = model.scaleName(channel);\n\n const orient = markDef.orient;\n const hasSizeDef =\n encoding[sizeChannel] ?? encoding.size ?? getMarkPropOrConfig('size', markDef, config, {vgChannel: sizeChannel});\n\n const isBarBand = mark === 'bar' && (channel === 'x' ? orient === 'vertical' : orient === 'horizontal');\n\n // x, x2, and width -- we must specify two of these in all conditions\n if (\n isFieldDef(channelDef) &&\n (isBinning(channelDef.bin) || isBinned(channelDef.bin) || (channelDef.timeUnit && !channelDef2)) &&\n !(hasSizeDef && !isRelativeBandSize(hasSizeDef)) &&\n !hasDiscreteDomain(scaleType)\n ) {\n const bandSize = getBandSize({channel, fieldDef: channelDef, markDef, config, scaleType});\n const axis = model.component.axes[channel]?.[0];\n const axisTranslate = axis?.get('translate') ?? 0.5; // vega default is 0.5\n\n return rectBinPosition({\n fieldDef: channelDef,\n fieldDef2: channelDef2,\n channel,\n markDef,\n scaleName,\n bandSize,\n axisTranslate,\n spacing: isXorY(channel) ? getMarkPropOrConfig('binSpacing', markDef, config) : undefined,\n reverse: scale.get('reverse'),\n config\n });\n } else if (((isFieldOrDatumDef(channelDef) && hasDiscreteDomain(scaleType)) || isBarBand) && !channelDef2) {\n return positionAndSize(channelDef, channel, model);\n } else {\n return rangePosition(channel, model, {defaultPos: 'zeroOrMax', defaultPos2: 'zeroOrMin'});\n }\n}\nfunction defaultSizeRef(\n sizeChannel: 'width' | 'height',\n scaleName: string,\n scale: ScaleComponent,\n config: Config,\n bandSize: BandSize\n): VgValueRef {\n if (isRelativeBandSize(bandSize)) {\n if (scale) {\n const scaleType = scale.get('type');\n if (scaleType === 'band') {\n return {scale: scaleName, band: bandSize.band};\n } else if (bandSize.band !== 1) {\n log.warn(log.message.cannotUseRelativeBandSizeWithNonBandScale(scaleType));\n bandSize = undefined;\n }\n } else {\n return {\n mult: bandSize.band,\n field: {group: sizeChannel}\n };\n }\n } else if (isSignalRef(bandSize)) {\n return bandSize;\n } else if (bandSize) {\n return {value: bandSize};\n }\n\n // no valid band size\n if (scale) {\n const scaleRange = scale.get('range');\n if (isVgRangeStep(scaleRange) && isNumber(scaleRange.step)) {\n return {value: scaleRange.step - 2};\n }\n }\n const defaultStep = getViewConfigDiscreteStep(config.view, sizeChannel);\n return {value: defaultStep - 2};\n}\n\n/**\n * Output position encoding and its size encoding for continuous, point, and band scales.\n */\nfunction positionAndSize(\n fieldDef: Encoding['x' | 'y' | 'theta' | 'radius'],\n channel: 'x' | 'y' | 'theta' | 'radius',\n model: UnitModel\n) {\n const {markDef, encoding, config, stack} = model;\n const orient = markDef.orient;\n\n const scaleName = model.scaleName(channel);\n const scale = model.getScaleComponent(channel);\n const vgSizeChannel = getSizeChannel(channel);\n const channel2 = getSecondaryRangeChannel(channel);\n\n // use \"size\" channel for bars, if there is orient and the channel matches the right orientation\n const useVlSizeChannel = (orient === 'horizontal' && channel === 'y') || (orient === 'vertical' && channel === 'x');\n\n // Use size encoding / mark property / config if it exists\n let sizeMixins;\n if (encoding.size || markDef.size) {\n if (useVlSizeChannel) {\n sizeMixins = nonPosition('size', model, {\n vgChannel: vgSizeChannel,\n defaultRef: signalOrValueRef(markDef.size)\n });\n } else {\n log.warn(log.message.cannotApplySizeToNonOrientedMark(markDef.type));\n }\n }\n\n // Otherwise, apply default value\n const bandSize = getBandSize({channel, fieldDef, markDef, config, scaleType: scale?.get('type'), useVlSizeChannel});\n\n sizeMixins = sizeMixins || {[vgSizeChannel]: defaultSizeRef(vgSizeChannel, scaleName, scale, config, bandSize)};\n\n /*\n Band scales with size value and all point scales, use xc/yc + band=0.5\n\n Otherwise (band scales that has size based on a band ref), use x/y with position band = (1 - size_band) / 2.\n In this case, size_band is the band specified in the x/y-encoding.\n By default band is 1, so `(1 - band) / 2` = 0.\n If band is 0.6, the the x/y position in such case should be `(1 - band) / 2` = 0.2\n */\n\n const defaultBandAlign = scale?.get('type') !== 'band' || !('band' in sizeMixins[vgSizeChannel]) ? 'middle' : 'top';\n\n const vgChannel = vgAlignedPositionChannel(channel, markDef, config, defaultBandAlign);\n const center = vgChannel === 'xc' || vgChannel === 'yc';\n const offset = getOffset(channel, markDef);\n\n const posRef = ref.midPointRefWithPositionInvalidTest({\n channel,\n channelDef: fieldDef,\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef: pointPositionDefaultRef({model, defaultPos: 'mid', channel, scaleName, scale}),\n bandPosition: center\n ? 0.5\n : isSignalRef(bandSize)\n ? {signal: `(1-${bandSize})/2`}\n : isRelativeBandSize(bandSize)\n ? (1 - bandSize.band) / 2\n : 0\n });\n\n if (vgSizeChannel) {\n return {[vgChannel]: posRef, ...sizeMixins};\n } else {\n // otherwise, we must simulate size by setting position2 = position + size\n // (for theta/radius since Vega doesn't have thetaWidth/radiusWidth)\n const vgChannel2 = getVgPositionChannel(channel2);\n const sizeRef = sizeMixins[vgSizeChannel];\n const sizeOffset = offset ? {...sizeRef, offset} : sizeRef;\n return {\n [vgChannel]: posRef,\n\n // posRef might be an array that wraps position invalid test\n [vgChannel2]: isArray(posRef)\n ? [posRef[0], {...posRef[1], offset: sizeOffset}]\n : {\n ...posRef,\n offset: sizeOffset\n }\n };\n }\n}\n\nfunction getBinSpacing(\n channel: PositionChannel | PolarPositionChannel,\n spacing: number,\n reverse: boolean | SignalRef,\n translate: number | SignalRef,\n offset: number | SignalRef\n) {\n if (isPolarPositionChannel(channel)) {\n return 0;\n }\n\n const spacingOffset = channel === 'x' || channel === 'y2' ? -spacing / 2 : spacing / 2;\n\n if (isSignalRef(reverse) || isSignalRef(offset) || isSignalRef(translate)) {\n const reverseExpr = signalOrStringValue(reverse);\n const offsetExpr = signalOrStringValue(offset);\n const translateExpr = signalOrStringValue(translate);\n\n const t = translateExpr ? `${translateExpr} + ` : '';\n const r = reverseExpr ? `(${reverseExpr} ? -1 : 1) * ` : '';\n const o = offsetExpr ? `(${offsetExpr} + ${spacingOffset})` : spacingOffset;\n\n return {\n signal: t + r + o\n };\n } else {\n offset = offset || 0;\n return translate + (reverse ? -offset - spacingOffset : +offset + spacingOffset);\n }\n}\n\nexport function rectBinPosition({\n fieldDef,\n fieldDef2,\n channel,\n bandSize,\n scaleName,\n markDef,\n spacing = 0,\n axisTranslate,\n reverse,\n config\n}: {\n fieldDef: TypedFieldDef;\n fieldDef2?: Encoding['x2' | 'y2'];\n channel: 'x' | 'y' | 'theta' | 'radius';\n bandSize: number | RelativeBandSize | SignalRef | undefined;\n scaleName: string;\n markDef: MarkDef;\n spacing?: number;\n axisTranslate: number | SignalRef;\n reverse: boolean | SignalRef;\n config: Config;\n}) {\n const channel2 = getSecondaryRangeChannel(channel);\n\n const vgChannel = getVgPositionChannel(channel);\n const vgChannel2 = getVgPositionChannel(channel2);\n\n const offset = getOffset(channel, markDef);\n\n const bandPosition = isSignalRef(bandSize)\n ? {signal: `(1-${bandSize.signal})/2`}\n : isRelativeBandSize(bandSize)\n ? (1 - bandSize.band) / 2\n : 0.5;\n\n if (isBinning(fieldDef.bin) || fieldDef.timeUnit) {\n return {\n [vgChannel2]: rectBinRef({\n channel,\n fieldDef,\n scaleName,\n markDef,\n bandPosition,\n offset: getBinSpacing(channel2, spacing, reverse, axisTranslate, offset),\n config\n }),\n [vgChannel]: rectBinRef({\n channel,\n fieldDef,\n scaleName,\n markDef,\n bandPosition: isSignalRef(bandPosition) ? {signal: `1-${bandPosition.signal}`} : 1 - bandPosition,\n offset: getBinSpacing(channel, spacing, reverse, axisTranslate, offset),\n config\n })\n };\n } else if (isBinned(fieldDef.bin)) {\n const startRef = ref.valueRefForFieldOrDatumDef(\n fieldDef,\n scaleName,\n {},\n {offset: getBinSpacing(channel2, spacing, reverse, axisTranslate, offset)}\n );\n\n if (isFieldDef(fieldDef2)) {\n return {\n [vgChannel2]: startRef,\n [vgChannel]: ref.valueRefForFieldOrDatumDef(\n fieldDef2,\n scaleName,\n {},\n {offset: getBinSpacing(channel, spacing, reverse, axisTranslate, offset)}\n )\n };\n } else if (isBinParams(fieldDef.bin) && fieldDef.bin.step) {\n return {\n [vgChannel2]: startRef,\n [vgChannel]: {\n signal: `scale(\"${scaleName}\", ${vgField(fieldDef, {expr: 'datum'})} + ${fieldDef.bin.step})`,\n offset: getBinSpacing(channel, spacing, reverse, axisTranslate, offset)\n }\n };\n }\n }\n log.warn(log.message.channelRequiredForBinned(channel2));\n return undefined;\n}\n\n/**\n * Value Ref for binned fields\n */\nexport function rectBinRef({\n channel,\n fieldDef,\n scaleName,\n markDef,\n bandPosition,\n offset,\n config\n}: {\n channel: PositionChannel | PolarPositionChannel;\n fieldDef: TypedFieldDef;\n scaleName: string;\n markDef: MarkDef;\n bandPosition: number | SignalRef;\n offset?: number | SignalRef;\n config?: Config;\n}) {\n const r = ref.interpolatedSignalRef({\n scaleName,\n fieldOrDatumDef: fieldDef,\n bandPosition,\n offset\n });\n\n return ref.wrapPositionInvalidTest({\n fieldDef,\n channel,\n markDef,\n ref: r,\n config\n });\n}\n","import {array} from 'vega-util';\nimport {Channel, ScaleChannel, SCALE_CHANNELS} from '../../../channel';\nimport {isPathMark, MarkDef} from '../../../mark';\nimport {hasContinuousDomain} from '../../../scale';\nimport {Dict, keys} from '../../../util';\nimport {VgEncodeEntry, VgValueRef, VG_MARK_CONFIGS} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {aria} from './aria';\nimport {color} from './color';\nimport {nonPosition} from './nonposition';\nimport {text} from './text';\nimport {tooltip} from './tooltip';\nimport {fieldInvalidPredicate} from './valueref';\nimport {zindex} from './zindex';\n\nexport {color} from './color';\nexport {wrapCondition} from './conditional';\nexport {nonPosition} from './nonposition';\nexport {pointPosition} from './position-point';\nexport {pointOrRangePosition, rangePosition} from './position-range';\nexport {rectPosition} from './position-rect';\nexport {text} from './text';\nexport {tooltip} from './tooltip';\n\nexport type Ignore = Record<'color' | 'size' | 'orient' | 'align' | 'baseline' | 'theta', 'ignore' | 'include'>;\n\nconst ALWAYS_IGNORE = new Set(['aria', 'width', 'height']);\n\nexport function baseEncodeEntry(model: UnitModel, ignore: Ignore) {\n const {fill = undefined, stroke = undefined} = ignore.color === 'include' ? color(model) : {};\n return {\n ...markDefProperties(model.markDef, ignore),\n ...wrapAllFieldsInvalid(model, 'fill', fill),\n ...wrapAllFieldsInvalid(model, 'stroke', stroke),\n ...nonPosition('opacity', model),\n ...nonPosition('fillOpacity', model),\n ...nonPosition('strokeOpacity', model),\n ...nonPosition('strokeWidth', model),\n ...nonPosition('strokeDash', model),\n ...zindex(model),\n ...tooltip(model),\n ...text(model, 'href'),\n ...aria(model)\n };\n}\n\n// TODO: mark VgValueRef[] as readonly after https://github.com/vega/vega/pull/1987\nfunction wrapAllFieldsInvalid(model: UnitModel, channel: Channel, valueRef: VgValueRef | VgValueRef[]): VgEncodeEntry {\n const {config, mark, markDef} = model;\n\n const invalid = getMarkPropOrConfig('invalid', markDef, config);\n\n if (invalid === 'hide' && valueRef && !isPathMark(mark)) {\n // For non-path marks, we have to exclude invalid values (null and NaN) for scales with continuous domains.\n // For path marks, we will use \"defined\" property and skip these values instead.\n const test = allFieldsInvalidPredicate(model, {invalid: true, channels: SCALE_CHANNELS});\n if (test) {\n return {\n [channel]: [\n // prepend the invalid case\n // TODO: support custom value\n {test, value: null},\n ...array(valueRef)\n ]\n };\n }\n }\n return valueRef ? {[channel]: valueRef} : {};\n}\n\nfunction markDefProperties(mark: MarkDef, ignore: Ignore) {\n return VG_MARK_CONFIGS.reduce((m, prop) => {\n if (!ALWAYS_IGNORE.has(prop) && mark[prop] !== undefined && ignore[prop] !== 'ignore') {\n m[prop] = signalOrValueRef(mark[prop]);\n }\n return m;\n }, {});\n}\n\nfunction allFieldsInvalidPredicate(\n model: UnitModel,\n {invalid = false, channels}: {invalid?: boolean; channels: ScaleChannel[]}\n) {\n const filterIndex = channels.reduce((aggregator: Dict, channel) => {\n const scaleComponent = model.getScaleComponent(channel);\n if (scaleComponent) {\n const scaleType = scaleComponent.get('type');\n const field = model.vgField(channel, {expr: 'datum'});\n\n // While discrete domain scales can handle invalid values, continuous scales can't.\n if (field && hasContinuousDomain(scaleType)) {\n aggregator[field] = true;\n }\n }\n return aggregator;\n }, {});\n\n const fields = keys(filterIndex);\n if (fields.length > 0) {\n const op = invalid ? '||' : '&&';\n return fields.map(field => fieldInvalidPredicate(field, invalid)).join(` ${op} `);\n }\n return undefined;\n}\n","import {POSITION_SCALE_CHANNELS} from '../../../channel';\nimport {ScaleChannel} from '../../../channel';\nimport {Value} from '../../../channeldef';\nimport {hasContinuousDomain} from '../../../scale';\nimport {Dict, keys} from '../../../util';\nimport {VgEncodeEntry} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {fieldInvalidPredicate} from './valueref';\n\nexport function defined(model: UnitModel): VgEncodeEntry {\n const {config, markDef} = model;\n\n const invalid = getMarkPropOrConfig('invalid', markDef, config);\n if (invalid) {\n const signal = allFieldsInvalidPredicate(model, {channels: POSITION_SCALE_CHANNELS});\n\n if (signal) {\n return {defined: {signal}};\n }\n }\n return {};\n}\n\nfunction allFieldsInvalidPredicate(\n model: UnitModel,\n {invalid = false, channels}: {invalid?: boolean; channels: ScaleChannel[]}\n) {\n const filterIndex = channels.reduce((aggregator: Dict, channel) => {\n const scaleComponent = model.getScaleComponent(channel);\n if (scaleComponent) {\n const scaleType = scaleComponent.get('type');\n const field = model.vgField(channel, {expr: 'datum'});\n\n // While discrete domain scales can handle invalid values, continuous scales can't.\n if (field && hasContinuousDomain(scaleType)) {\n aggregator[field] = true;\n }\n }\n return aggregator;\n }, {});\n\n const fields = keys(filterIndex);\n if (fields.length > 0) {\n const op = invalid ? '||' : '&&';\n return fields.map(field => fieldInvalidPredicate(field, invalid)).join(` ${op} `);\n }\n return undefined;\n}\n\nexport function valueIfDefined(prop: string, value: Value): VgEncodeEntry {\n if (value !== undefined) {\n return {[prop]: signalOrValueRef(value)};\n }\n return undefined;\n}\n","import * as log from '../../log';\nimport {isPathMark} from '../../mark';\nimport {tooltip} from '../mark/encode';\nimport {SelectionCompiler} from '.';\n\nconst VORONOI = 'voronoi';\n\nconst nearest: SelectionCompiler<'point'> = {\n defined: selCmpt => {\n return selCmpt.type === 'point' && selCmpt.nearest;\n },\n\n parse: (model, selCmpt) => {\n // Scope selection events to the voronoi mark to prevent capturing\n // events that occur on the group mark (https://github.com/vega/vega/issues/2112).\n if (selCmpt.events) {\n for (const s of selCmpt.events) {\n s.markname = model.getName(VORONOI);\n }\n }\n },\n\n marks: (model, selCmpt, marks) => {\n const {x, y} = selCmpt.project.hasChannel;\n const markType = model.mark;\n if (isPathMark(markType)) {\n log.warn(log.message.nearestNotSupportForContinuous(markType));\n return marks;\n }\n\n const cellDef = {\n name: model.getName(VORONOI),\n type: 'path',\n interactive: true,\n from: {data: model.getName('marks')},\n encode: {\n update: {\n fill: {value: 'transparent'},\n strokeWidth: {value: 0.35},\n stroke: {value: 'transparent'},\n isVoronoi: {value: true},\n ...tooltip(model, {reactiveGeom: true})\n }\n },\n transform: [\n {\n type: 'voronoi',\n x: {expr: x || !y ? 'datum.datum.x || 0' : '0'},\n y: {expr: y || !x ? 'datum.datum.y || 0' : '0'},\n size: [model.getSizeSignalRef('width'), model.getSizeSignalRef('height')]\n }\n ]\n };\n\n let index = 0;\n let exists = false;\n marks.forEach((mark, i) => {\n const name = mark.name ?? '';\n if (name === model.component.mark[0].name) {\n index = i;\n } else if (name.indexOf(VORONOI) >= 0) {\n exists = true;\n }\n });\n\n if (!exists) {\n marks.splice(index + 1, 0, cellDef);\n }\n\n return marks;\n }\n};\n\nexport default nearest;\n","import {stringValue} from 'vega-util';\nimport {disableDirectManipulation, TUPLE} from '.';\nimport {varName} from '../../util';\nimport {assembleInit} from './assemble';\nimport nearest from './nearest';\nimport {TUPLE_FIELDS} from './project';\nimport {SelectionCompiler} from '.';\nimport {isLegendBinding} from '../../selection';\n\nconst inputBindings: SelectionCompiler<'point'> = {\n defined: selCmpt => {\n return (\n selCmpt.type === 'point' &&\n selCmpt.resolve === 'global' &&\n selCmpt.bind &&\n selCmpt.bind !== 'scales' &&\n !isLegendBinding(selCmpt.bind)\n );\n },\n\n parse: (model, selCmpt, selDef) => disableDirectManipulation(selCmpt, selDef),\n\n topLevelSignals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const proj = selCmpt.project;\n const bind = selCmpt.bind;\n const init = selCmpt.init && selCmpt.init[0]; // Can only exist on single selections (one initial value).\n const datum = nearest.defined(selCmpt) ? '(item().isVoronoi ? datum.datum : datum)' : 'datum';\n\n proj.items.forEach((p, i) => {\n const sgname = varName(`${name}_${p.field}`);\n const hasSignal = signals.filter(s => s.name === sgname);\n\n if (!hasSignal.length) {\n signals.unshift({\n name: sgname,\n ...(init ? {init: assembleInit(init[i])} : {value: null}),\n on: selCmpt.events\n ? [\n {\n events: selCmpt.events,\n update: `datum && item().mark.marktype !== 'group' ? ${datum}[${stringValue(p.field)}] : null`\n }\n ]\n : [],\n bind: bind[p.field] ?? bind[p.channel] ?? bind\n });\n }\n });\n\n return signals;\n },\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const proj = selCmpt.project;\n const signal = signals.filter(s => s.name === name + TUPLE)[0];\n const fields = name + TUPLE_FIELDS;\n const values = proj.items.map(p => varName(`${name}_${p.field}`));\n const valid = values.map(v => `${v} !== null`).join(' && ');\n\n if (values.length) {\n signal.update = `${valid} ? {fields: ${fields}, values: [${values.join(', ')}]} : null`;\n }\n\n delete signal.value;\n delete signal.on;\n\n return signals;\n }\n};\n\nexport default inputBindings;\n","import {TUPLE, unitName} from '.';\nimport {SelectionCompiler} from '.';\n\nexport const TOGGLE = '_toggle';\n\nconst toggle: SelectionCompiler<'point'> = {\n defined: selCmpt => {\n return selCmpt.type === 'point' && !!selCmpt.toggle;\n },\n\n signals: (model, selCmpt, signals) => {\n return signals.concat({\n name: selCmpt.name + TOGGLE,\n value: false,\n on: [{events: selCmpt.events, update: selCmpt.toggle}]\n });\n },\n\n modifyExpr: (model, selCmpt) => {\n const tpl = selCmpt.name + TUPLE;\n const signal = selCmpt.name + TOGGLE;\n\n return (\n `${signal} ? null : ${tpl}, ` +\n (selCmpt.resolve === 'global' ? `${signal} ? null : true, ` : `${signal} ? null : {unit: ${unitName(model)}}, `) +\n `${signal} ? ${tpl} : null`\n );\n }\n};\n\nexport default toggle;\n","import {Update} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {isString} from 'vega-util';\nimport {TUPLE} from '.';\nimport {varName} from '../../util';\nimport inputBindings from './inputs';\nimport toggle, {TOGGLE} from './toggle';\nimport {SelectionCompiler} from '.';\n\nconst clear: SelectionCompiler = {\n defined: selCmpt => {\n return selCmpt.clear !== undefined && selCmpt.clear !== false;\n },\n\n parse: (model, selCmpt) => {\n if (selCmpt.clear) {\n selCmpt.clear = isString(selCmpt.clear) ? parseSelector(selCmpt.clear, 'view') : selCmpt.clear;\n }\n },\n\n topLevelSignals: (model, selCmpt, signals) => {\n if (inputBindings.defined(selCmpt)) {\n for (const proj of selCmpt.project.items) {\n const idx = signals.findIndex(n => n.name === varName(`${selCmpt.name}_${proj.field}`));\n if (idx !== -1) {\n signals[idx].on.push({events: selCmpt.clear, update: 'null'});\n }\n }\n }\n\n return signals;\n },\n\n signals: (model, selCmpt, signals) => {\n function addClear(idx: number, update: Update) {\n if (idx !== -1 && signals[idx].on) {\n signals[idx].on.push({events: selCmpt.clear, update});\n }\n }\n\n // Be as minimalist as possible when adding clear triggers to minimize dataflow execution.\n if (selCmpt.type === 'interval') {\n for (const proj of selCmpt.project.items) {\n const vIdx = signals.findIndex(n => n.name === proj.signals.visual);\n addClear(vIdx, '[0, 0]');\n\n if (vIdx === -1) {\n const dIdx = signals.findIndex(n => n.name === proj.signals.data);\n addClear(dIdx, 'null');\n }\n }\n } else {\n let tIdx = signals.findIndex(n => n.name === selCmpt.name + TUPLE);\n addClear(tIdx, 'null');\n\n if (toggle.defined(selCmpt)) {\n tIdx = signals.findIndex(n => n.name === selCmpt.name + TOGGLE);\n addClear(tIdx, 'false');\n }\n }\n\n return signals;\n }\n};\n\nexport default clear;\n","import {isObject, MergedStream, Stream} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {array, isString} from 'vega-util';\nimport {disableDirectManipulation, TUPLE} from '.';\nimport {NonPositionScaleChannel} from '../../channel';\nimport * as log from '../../log';\nimport {isLegendBinding, isLegendStreamBinding, SELECTION_ID} from '../../selection';\nimport {duplicate, vals, varName} from '../../util';\nimport {LegendComponent} from '../legend/component';\nimport {UnitModel} from '../unit';\nimport {TUPLE_FIELDS} from './project';\nimport {TOGGLE} from './toggle';\nimport {SelectionCompiler} from '.';\n\nconst legendBindings: SelectionCompiler<'point'> = {\n defined: selCmpt => {\n const spec = selCmpt.resolve === 'global' && selCmpt.bind && isLegendBinding(selCmpt.bind);\n const projLen = selCmpt.project.items.length === 1 && selCmpt.project.items[0].field !== SELECTION_ID;\n if (spec && !projLen) {\n log.warn(log.message.LEGEND_BINDINGS_MUST_HAVE_PROJECTION);\n }\n\n return spec && projLen;\n },\n\n parse: (model, selCmpt, selDef) => {\n // Allow legend items to be toggleable by default even though direct manipulation is disabled.\n const selDef_ = duplicate(selDef);\n selDef_.select = isString(selDef_.select)\n ? {type: selDef_.select, toggle: selCmpt.toggle}\n : {...selDef_.select, toggle: selCmpt.toggle};\n disableDirectManipulation(selCmpt, selDef_);\n\n if (isObject(selDef.select) && (selDef.select.on || selDef.select.clear)) {\n const legendFilter = 'event.item && indexof(event.item.mark.role, \"legend\") < 0';\n for (const evt of selCmpt.events) {\n evt.filter = array(evt.filter ?? []);\n if (!evt.filter.includes(legendFilter)) {\n evt.filter.push(legendFilter);\n }\n }\n }\n\n const evt = isLegendStreamBinding(selCmpt.bind) ? selCmpt.bind.legend : 'click';\n const stream: Stream[] = isString(evt) ? parseSelector(evt, 'view') : array(evt);\n selCmpt.bind = {legend: {merge: stream}};\n },\n\n topLevelSignals: (model, selCmpt, signals) => {\n const selName = selCmpt.name;\n const stream = isLegendStreamBinding(selCmpt.bind) && (selCmpt.bind.legend as MergedStream);\n const markName = (name: string) => (s: Stream) => {\n const ds = duplicate(s);\n ds.markname = name;\n return ds;\n };\n\n for (const proj of selCmpt.project.items) {\n if (!proj.hasLegend) continue;\n const prefix = `${varName(proj.field)}_legend`;\n const sgName = `${selName}_${prefix}`;\n const hasSignal = signals.filter(s => s.name === sgName);\n\n if (hasSignal.length === 0) {\n const events = stream.merge\n .map(markName(`${prefix}_symbols`))\n .concat(stream.merge.map(markName(`${prefix}_labels`)))\n .concat(stream.merge.map(markName(`${prefix}_entries`)));\n\n signals.unshift({\n name: sgName,\n ...(!selCmpt.init ? {value: null} : {}),\n on: [\n // Legend entries do not store values, so we need to walk the scenegraph to the symbol datum.\n {events, update: 'datum.value || item().items[0].items[0].datum.value', force: true},\n {events: stream.merge, update: `!event.item || !datum ? null : ${sgName}`, force: true}\n ]\n });\n }\n }\n\n return signals;\n },\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const proj = selCmpt.project;\n const tuple = signals.find(s => s.name === name + TUPLE);\n const fields = name + TUPLE_FIELDS;\n const values = proj.items.filter(p => p.hasLegend).map(p => varName(`${name}_${varName(p.field)}_legend`));\n const valid = values.map(v => `${v} !== null`).join(' && ');\n const update = `${valid} ? {fields: ${fields}, values: [${values.join(', ')}]} : null`;\n\n if (selCmpt.events && values.length > 0) {\n tuple.on.push({\n events: values.map(signal => ({signal})),\n update\n });\n } else if (values.length > 0) {\n tuple.update = update;\n delete tuple.value;\n delete tuple.on;\n }\n\n const toggle = signals.find(s => s.name === name + TOGGLE);\n const events = isLegendStreamBinding(selCmpt.bind) && selCmpt.bind.legend;\n if (toggle) {\n if (!selCmpt.events) toggle.on[0].events = events;\n else toggle.on.push({...toggle.on[0], events});\n }\n\n return signals;\n }\n};\n\nexport default legendBindings;\n\nexport function parseInteractiveLegend(\n model: UnitModel,\n channel: NonPositionScaleChannel,\n legendCmpt: LegendComponent\n) {\n const field = model.fieldDef(channel)?.field;\n for (const selCmpt of vals(model.component.selection ?? {})) {\n const proj = selCmpt.project.hasField[field] ?? selCmpt.project.hasChannel[channel];\n if (proj && legendBindings.defined(selCmpt)) {\n const legendSelections = legendCmpt.get('selections') ?? [];\n legendSelections.push(selCmpt.name);\n legendCmpt.set('selections', legendSelections, false);\n proj.hasLegend = true;\n }\n }\n}\n","import {NewSignal} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {SelectionComponent} from '.';\nimport {ScaleChannel, X, Y} from '../../channel';\nimport {UnitModel} from '../unit';\nimport {BRUSH as INTERVAL_BRUSH} from './interval';\nimport {SelectionProjection} from './project';\nimport scalesCompiler, {domain} from './scales';\nimport {SelectionCompiler} from '.';\n\nconst ANCHOR = '_translate_anchor';\nconst DELTA = '_translate_delta';\n\nconst translate: SelectionCompiler<'interval'> = {\n defined: selCmpt => {\n return selCmpt.type === 'interval' && selCmpt.translate;\n },\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const hasScales = scalesCompiler.defined(selCmpt);\n const anchor = name + ANCHOR;\n const {x, y} = selCmpt.project.hasChannel;\n let events = parseSelector(selCmpt.translate, 'scope');\n\n if (!hasScales) {\n events = events.map(e => ((e.between[0].markname = name + INTERVAL_BRUSH), e));\n }\n\n signals.push(\n {\n name: anchor,\n value: {},\n on: [\n {\n events: events.map(e => e.between[0]),\n update:\n '{x: x(unit), y: y(unit)' +\n (x !== undefined ? `, extent_x: ${hasScales ? domain(model, X) : `slice(${x.signals.visual})`}` : '') +\n (y !== undefined ? `, extent_y: ${hasScales ? domain(model, Y) : `slice(${y.signals.visual})`}` : '') +\n '}'\n }\n ]\n },\n {\n name: name + DELTA,\n value: {},\n on: [\n {\n events: events,\n update: `{x: ${anchor}.x - x(unit), y: ${anchor}.y - y(unit)}`\n }\n ]\n }\n );\n\n if (x !== undefined) {\n onDelta(model, selCmpt, x, 'width', signals);\n }\n\n if (y !== undefined) {\n onDelta(model, selCmpt, y, 'height', signals);\n }\n\n return signals;\n }\n};\n\nexport default translate;\n\nfunction onDelta(\n model: UnitModel,\n selCmpt: SelectionComponent,\n proj: SelectionProjection,\n size: 'width' | 'height',\n signals: NewSignal[]\n) {\n const name = selCmpt.name;\n const anchor = name + ANCHOR;\n const delta = name + DELTA;\n const channel = proj.channel as ScaleChannel;\n const hasScales = scalesCompiler.defined(selCmpt);\n const signal = signals.filter(s => s.name === proj.signals[hasScales ? 'data' : 'visual'])[0];\n const sizeSg = model.getSizeSignalRef(size).signal;\n const scaleCmpt = model.getScaleComponent(channel);\n const scaleType = scaleCmpt.get('type');\n const reversed = scaleCmpt.get('reverse'); // scale parsing sets this flag for fieldDef.sort\n const sign = !hasScales ? '' : channel === X ? (reversed ? '' : '-') : reversed ? '-' : '';\n const extent = `${anchor}.extent_${channel}`;\n const offset = `${sign}${delta}.${channel} / ${hasScales ? `${sizeSg}` : `span(${extent})`}`;\n const panFn = !hasScales\n ? 'panLinear'\n : scaleType === 'log'\n ? 'panLog'\n : scaleType === 'symlog'\n ? 'panSymlog'\n : scaleType === 'pow'\n ? 'panPow'\n : 'panLinear';\n const arg = !hasScales\n ? ''\n : scaleType === 'pow'\n ? `, ${scaleCmpt.get('exponent') ?? 1}`\n : scaleType === 'symlog'\n ? `, ${scaleCmpt.get('constant') ?? 1}`\n : '';\n const update = `${panFn}(${extent}, ${offset}${arg})`;\n\n signal.on.push({\n events: {signal: delta},\n update: hasScales ? update : `clampRange(${update}, 0, ${sizeSg})`\n });\n}\n","import {NewSignal} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {stringValue} from 'vega-util';\nimport {SelectionComponent} from '.';\nimport {ScaleChannel, X, Y} from '../../channel';\nimport {UnitModel} from '../unit';\nimport {BRUSH as INTERVAL_BRUSH} from './interval';\nimport {SelectionProjection} from './project';\nimport {default as scalesCompiler, domain} from './scales';\nimport {SelectionCompiler} from '.';\n\nconst ANCHOR = '_zoom_anchor';\nconst DELTA = '_zoom_delta';\n\nconst zoom: SelectionCompiler<'interval'> = {\n defined: selCmpt => {\n return selCmpt.type === 'interval' && selCmpt.zoom;\n },\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const hasScales = scalesCompiler.defined(selCmpt);\n const delta = name + DELTA;\n const {x, y} = selCmpt.project.hasChannel;\n const sx = stringValue(model.scaleName(X));\n const sy = stringValue(model.scaleName(Y));\n let events = parseSelector(selCmpt.zoom, 'scope');\n\n if (!hasScales) {\n events = events.map(e => ((e.markname = name + INTERVAL_BRUSH), e));\n }\n\n signals.push(\n {\n name: name + ANCHOR,\n on: [\n {\n events: events,\n update: !hasScales\n ? `{x: x(unit), y: y(unit)}`\n : '{' +\n [sx ? `x: invert(${sx}, x(unit))` : '', sy ? `y: invert(${sy}, y(unit))` : '']\n .filter(expr => !!expr)\n .join(', ') +\n '}'\n }\n ]\n },\n {\n name: delta,\n on: [\n {\n events: events,\n force: true,\n update: 'pow(1.001, event.deltaY * pow(16, event.deltaMode))'\n }\n ]\n }\n );\n\n if (x !== undefined) {\n onDelta(model, selCmpt, x, 'width', signals);\n }\n\n if (y !== undefined) {\n onDelta(model, selCmpt, y, 'height', signals);\n }\n\n return signals;\n }\n};\n\nexport default zoom;\n\nfunction onDelta(\n model: UnitModel,\n selCmpt: SelectionComponent,\n proj: SelectionProjection,\n size: 'width' | 'height',\n signals: NewSignal[]\n) {\n const name = selCmpt.name;\n const channel = proj.channel as ScaleChannel;\n const hasScales = scalesCompiler.defined(selCmpt);\n const signal = signals.filter(s => s.name === proj.signals[hasScales ? 'data' : 'visual'])[0];\n const sizeSg = model.getSizeSignalRef(size).signal;\n const scaleCmpt = model.getScaleComponent(channel);\n const scaleType = scaleCmpt.get('type');\n const base = hasScales ? domain(model, channel) : signal.name;\n const delta = name + DELTA;\n const anchor = `${name}${ANCHOR}.${channel}`;\n const zoomFn = !hasScales\n ? 'zoomLinear'\n : scaleType === 'log'\n ? 'zoomLog'\n : scaleType === 'symlog'\n ? 'zoomSymlog'\n : scaleType === 'pow'\n ? 'zoomPow'\n : 'zoomLinear';\n const arg = !hasScales\n ? ''\n : scaleType === 'pow'\n ? `, ${scaleCmpt.get('exponent') ?? 1}`\n : scaleType === 'symlog'\n ? `, ${scaleCmpt.get('constant') ?? 1}`\n : '';\n const update = `${zoomFn}(${base}, ${anchor}, ${delta}${arg})`;\n\n signal.on.push({\n events: {signal: delta},\n update: hasScales ? update : `clampRange(${update}, 0, ${sizeSg})`\n });\n}\n","import {Binding, isString, NewSignal, Signal, Stream} from 'vega';\nimport {stringValue} from 'vega-util';\nimport {FACET_CHANNELS} from '../../channel';\nimport {\n BrushConfig,\n LegendBinding,\n SelectionInit,\n SelectionInitInterval,\n SelectionResolution,\n SelectionType,\n SELECTION_ID\n} from '../../selection';\nimport {Dict, vals} from '../../util';\nimport {OutputNode} from '../data/dataflow';\nimport {FacetModel} from '../facet';\nimport {isFacetModel, Model} from '../model';\nimport {UnitModel} from '../unit';\nimport interval from './interval';\nimport point from './point';\nimport {SelectionProjection, SelectionProjectionComponent} from './project';\nimport {SelectionParameter} from '../../selection';\nimport clear from './clear';\nimport inputs from './inputs';\nimport nearest from './nearest';\nimport project from './project';\nimport scales from './scales';\nimport legends from './legends';\nimport toggle from './toggle';\nimport translate from './translate';\nimport zoom from './zoom';\nimport {ParameterName} from '../../parameter';\n\nexport const STORE = '_store';\nexport const TUPLE = '_tuple';\nexport const MODIFY = '_modify';\nexport const SELECTION_DOMAIN = '_selection_domain_';\nexport const VL_SELECTION_RESOLVE = 'vlSelectionResolve';\n\nexport interface SelectionComponent {\n name: ParameterName;\n type: T;\n // Use conditional types for stricter type of init (as the type of init depends on selection type).\n init?: (T extends 'interval' ? SelectionInitInterval : T extends 'point' ? SelectionInit : never)[][];\n events: Stream[];\n materialized: OutputNode;\n bind?: 'scales' | Binding | Dict | LegendBinding;\n resolve: SelectionResolution;\n mark?: BrushConfig;\n\n // Transforms\n project: SelectionProjectionComponent;\n scales?: SelectionProjection[];\n toggle?: string;\n translate?: any;\n zoom?: any;\n nearest?: any;\n clear?: any;\n}\n\nexport interface SelectionCompiler {\n defined: (selCmpt: SelectionComponent) => boolean;\n parse?: (model: UnitModel, selCmpt: SelectionComponent, def: SelectionParameter) => void;\n signals?: (model: UnitModel, selCmpt: SelectionComponent, signals: NewSignal[]) => Signal[]; // the output can be a new or a push signal\n topLevelSignals?: (model: Model, selCmpt: SelectionComponent, signals: NewSignal[]) => NewSignal[];\n modifyExpr?: (model: UnitModel, selCmpt: SelectionComponent, expr: string) => string;\n marks?: (model: UnitModel, selCmpt: SelectionComponent, marks: any[]) => any[];\n}\n\n// Order matters for parsing and assembly.\nexport const selectionCompilers: SelectionCompiler[] = [\n point,\n interval,\n project,\n toggle,\n\n // Bindings may disable direct manipulation.\n inputs,\n scales,\n legends,\n\n clear,\n translate,\n zoom,\n nearest\n];\n\nfunction getFacetModel(model: Model): FacetModel {\n let parent = model.parent;\n while (parent) {\n if (isFacetModel(parent)) break;\n parent = parent.parent;\n }\n\n return parent as FacetModel;\n}\n\nexport function unitName(model: Model, {escape} = {escape: true}) {\n let name = escape ? stringValue(model.name) : model.name;\n const facetModel = getFacetModel(model);\n if (facetModel) {\n const {facet} = facetModel;\n for (const channel of FACET_CHANNELS) {\n if (facet[channel]) {\n name += ` + '__facet_${channel}_' + (facet[${stringValue(facetModel.vgField(channel))}])`;\n }\n }\n }\n return name;\n}\n\nexport function requiresSelectionId(model: Model) {\n return vals(model.component.selection ?? {}).reduce((identifier, selCmpt) => {\n return identifier || selCmpt.project.items.some(proj => proj.field === SELECTION_ID);\n }, false);\n}\n\n// Binding a point selection to query widgets or legends disables default direct manipulation interaction.\n// A user can choose to re-enable it by explicitly specifying triggering input events.\nexport function disableDirectManipulation(selCmpt: SelectionComponent, selDef: SelectionParameter<'point'>) {\n if (isString(selDef.select) || !selDef.select.on) delete selCmpt.events;\n if (isString(selDef.select) || !selDef.select.clear) delete selCmpt.clear;\n if (isString(selDef.select) || !selDef.select.toggle) delete selCmpt.toggle;\n}\n","import { error, toSet, isFunction, isString, hasOwnProperty } from 'vega-util';\n\nconst RawCode = 'RawCode';\nconst Literal = 'Literal';\nconst Property = 'Property';\nconst Identifier = 'Identifier';\nconst ArrayExpression = 'ArrayExpression';\nconst BinaryExpression = 'BinaryExpression';\nconst CallExpression = 'CallExpression';\nconst ConditionalExpression = 'ConditionalExpression';\nconst LogicalExpression = 'LogicalExpression';\nconst MemberExpression = 'MemberExpression';\nconst ObjectExpression = 'ObjectExpression';\nconst UnaryExpression = 'UnaryExpression';\nfunction ASTNode(type) {\n this.type = type;\n}\n\nASTNode.prototype.visit = function (visitor) {\n let c, i, n;\n if (visitor(this)) return 1;\n\n for (c = children(this), i = 0, n = c.length; i < n; ++i) {\n if (c[i].visit(visitor)) return 1;\n }\n};\n\nfunction children(node) {\n switch (node.type) {\n case ArrayExpression:\n return node.elements;\n\n case BinaryExpression:\n case LogicalExpression:\n return [node.left, node.right];\n\n case CallExpression:\n return [node.callee].concat(node.arguments);\n\n case ConditionalExpression:\n return [node.test, node.consequent, node.alternate];\n\n case MemberExpression:\n return [node.object, node.property];\n\n case ObjectExpression:\n return node.properties;\n\n case Property:\n return [node.key, node.value];\n\n case UnaryExpression:\n return [node.argument];\n\n case Identifier:\n case Literal:\n case RawCode:\n default:\n return [];\n }\n}\n\n/*\n The following expression parser is based on Esprima (http://esprima.org/).\n Original header comment and license for Esprima is included here:\n\n Copyright (C) 2013 Ariya Hidayat \n Copyright (C) 2013 Thaddee Tyl \n Copyright (C) 2013 Mathias Bynens \n Copyright (C) 2012 Ariya Hidayat \n Copyright (C) 2012 Mathias Bynens \n Copyright (C) 2012 Joost-Wim Boekesteijn \n Copyright (C) 2012 Kris Kowal \n Copyright (C) 2012 Yusuke Suzuki \n Copyright (C) 2012 Arpad Borsos \n Copyright (C) 2011 Ariya Hidayat \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nvar TokenName, source, index, length, lookahead;\nvar TokenBooleanLiteral = 1,\n TokenEOF = 2,\n TokenIdentifier = 3,\n TokenKeyword = 4,\n TokenNullLiteral = 5,\n TokenNumericLiteral = 6,\n TokenPunctuator = 7,\n TokenStringLiteral = 8,\n TokenRegularExpression = 9;\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\nvar SyntaxArrayExpression = 'ArrayExpression',\n SyntaxBinaryExpression = 'BinaryExpression',\n SyntaxCallExpression = 'CallExpression',\n SyntaxConditionalExpression = 'ConditionalExpression',\n SyntaxIdentifier = 'Identifier',\n SyntaxLiteral = 'Literal',\n SyntaxLogicalExpression = 'LogicalExpression',\n SyntaxMemberExpression = 'MemberExpression',\n SyntaxObjectExpression = 'ObjectExpression',\n SyntaxProperty = 'Property',\n SyntaxUnaryExpression = 'UnaryExpression'; // Error messages should be identical to V8.\n\nvar MessageUnexpectedToken = 'Unexpected token %0',\n MessageUnexpectedNumber = 'Unexpected number',\n MessageUnexpectedString = 'Unexpected string',\n MessageUnexpectedIdentifier = 'Unexpected identifier',\n MessageUnexpectedReserved = 'Unexpected reserved word',\n MessageUnexpectedEOS = 'Unexpected end of input',\n MessageInvalidRegExp = 'Invalid regular expression',\n MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\nvar ILLEGAL = 'ILLEGAL',\n DISABLED = 'Disabled.'; // See also tools/generate-unicode-regex.py.\n\nvar RegexNonAsciiIdentifierStart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'),\n // eslint-disable-next-line no-misleading-character-class\nRegexNonAsciiIdentifierPart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'); // Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n /* istanbul ignore next */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n}\n\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 && ch <= 0x39; // 0..9\n}\n\nfunction isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\n\nfunction isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n} // 7.2 White Space\n\n\nfunction isWhiteSpace(ch) {\n return ch === 0x20 || ch === 0x09 || ch === 0x0B || ch === 0x0C || ch === 0xA0 || ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0;\n} // 7.3 Line Terminators\n\n\nfunction isLineTerminator(ch) {\n return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029;\n} // 7.6 Identifier Names and Identifiers\n\n\nfunction isIdentifierStart(ch) {\n return ch === 0x24 || ch === 0x5F || // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A || // A..Z\n ch >= 0x61 && ch <= 0x7A || // a..z\n ch === 0x5C || // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch));\n}\n\nfunction isIdentifierPart(ch) {\n return ch === 0x24 || ch === 0x5F || // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A || // A..Z\n ch >= 0x61 && ch <= 0x7A || // a..z\n ch >= 0x30 && ch <= 0x39 || // 0..9\n ch === 0x5C || // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch));\n} // 7.6.1.1 Keywords\n\n\nconst keywords = {\n 'if': 1,\n 'in': 1,\n 'do': 1,\n 'var': 1,\n 'for': 1,\n 'new': 1,\n 'try': 1,\n 'let': 1,\n 'this': 1,\n 'else': 1,\n 'case': 1,\n 'void': 1,\n 'with': 1,\n 'enum': 1,\n 'while': 1,\n 'break': 1,\n 'catch': 1,\n 'throw': 1,\n 'const': 1,\n 'yield': 1,\n 'class': 1,\n 'super': 1,\n 'return': 1,\n 'typeof': 1,\n 'delete': 1,\n 'switch': 1,\n 'export': 1,\n 'import': 1,\n 'public': 1,\n 'static': 1,\n 'default': 1,\n 'finally': 1,\n 'extends': 1,\n 'package': 1,\n 'private': 1,\n 'function': 1,\n 'continue': 1,\n 'debugger': 1,\n 'interface': 1,\n 'protected': 1,\n 'instanceof': 1,\n 'implements': 1\n};\n\nfunction skipComment() {\n while (index < length) {\n const ch = source.charCodeAt(index);\n\n if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n ++index;\n } else {\n break;\n }\n }\n}\n\nfunction scanHexEscape(prefix) {\n var i,\n len,\n ch,\n code = 0;\n len = prefix === 'u' ? 4 : 2;\n\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n return String.fromCharCode(code);\n}\n\nfunction scanUnicodeCodePointEscape() {\n var ch, code, cu1, cu2;\n ch = source[index];\n code = 0; // At least, one hex digit is required.\n\n if (ch === '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n while (index < length) {\n ch = source[index++];\n\n if (!isHexDigit(ch)) {\n break;\n }\n\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n\n if (code > 0x10FFFF || ch !== '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } // UTF-16 Encoding\n\n\n if (code <= 0xFFFF) {\n return String.fromCharCode(code);\n }\n\n cu1 = (code - 0x10000 >> 10) + 0xD800;\n cu2 = (code - 0x10000 & 1023) + 0xDC00;\n return String.fromCharCode(cu1, cu2);\n}\n\nfunction getEscapedIdentifier() {\n var ch, id;\n ch = source.charCodeAt(index++);\n id = String.fromCharCode(ch); // '\\u' (U+005C, U+0075) denotes an escaped character.\n\n if (ch === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n ++index;\n ch = scanHexEscape('u');\n\n if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n id = ch;\n }\n\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (!isIdentifierPart(ch)) {\n break;\n }\n\n ++index;\n id += String.fromCharCode(ch); // '\\u' (U+005C, U+0075) denotes an escaped character.\n\n if (ch === 0x5C) {\n id = id.substr(0, id.length - 1);\n\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n ++index;\n ch = scanHexEscape('u');\n\n if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n id += ch;\n }\n }\n\n return id;\n}\n\nfunction getIdentifier() {\n var start, ch;\n start = index++;\n\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getEscapedIdentifier();\n }\n\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n}\n\nfunction scanIdentifier() {\n var start, id, type;\n start = index; // Backslash (U+005C) starts an escaped character.\n\n id = source.charCodeAt(index) === 0x5C ? getEscapedIdentifier() : getIdentifier(); // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n\n if (id.length === 1) {\n type = TokenIdentifier;\n } else if (keywords.hasOwnProperty(id)) {\n // eslint-disable-line no-prototype-builtins\n type = TokenKeyword;\n } else if (id === 'null') {\n type = TokenNullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = TokenBooleanLiteral;\n } else {\n type = TokenIdentifier;\n }\n\n return {\n type: type,\n value: id,\n start: start,\n end: index\n };\n} // 7.7 Punctuators\n\n\nfunction scanPunctuator() {\n var start = index,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2,\n ch3,\n ch4;\n\n switch (code) {\n // Check for most common single-character punctuators.\n case 0x2E: // . dot\n\n case 0x28: // ( open bracket\n\n case 0x29: // ) close bracket\n\n case 0x3B: // ; semicolon\n\n case 0x2C: // , comma\n\n case 0x7B: // { open curly brace\n\n case 0x7D: // } close curly brace\n\n case 0x5B: // [\n\n case 0x5D: // ]\n\n case 0x3A: // :\n\n case 0x3F: // ?\n\n case 0x7E:\n // ~\n ++index;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code),\n start: start,\n end: index\n };\n\n default:\n code2 = source.charCodeAt(index + 1); // '=' (U+003D) marks an assignment or comparison operator.\n\n if (code2 === 0x3D) {\n switch (code) {\n case 0x2B: // +\n\n case 0x2D: // -\n\n case 0x2F: // /\n\n case 0x3C: // <\n\n case 0x3E: // >\n\n case 0x5E: // ^\n\n case 0x7C: // |\n\n case 0x25: // %\n\n case 0x26: // &\n\n case 0x2A:\n // *\n index += 2;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n start: start,\n end: index\n };\n\n case 0x21: // !\n\n case 0x3D:\n // =\n index += 2; // !== and ===\n\n if (source.charCodeAt(index) === 0x3D) {\n ++index;\n }\n\n return {\n type: TokenPunctuator,\n value: source.slice(start, index),\n start: start,\n end: index\n };\n }\n }\n\n } // 4-character punctuator: >>>=\n\n\n ch4 = source.substr(index, 4);\n\n if (ch4 === '>>>=') {\n index += 4;\n return {\n type: TokenPunctuator,\n value: ch4,\n start: start,\n end: index\n };\n } // 3-character punctuators: === !== >>> <<= >>=\n\n\n ch3 = ch4.substr(0, 3);\n\n if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n index += 3;\n return {\n type: TokenPunctuator,\n value: ch3,\n start: start,\n end: index\n };\n } // Other 2-character punctuators: ++ -- << >> && ||\n\n\n ch2 = ch3.substr(0, 2);\n\n if (ch1 === ch2[1] && '+-<>&|'.indexOf(ch1) >= 0 || ch2 === '=>') {\n index += 2;\n return {\n type: TokenPunctuator,\n value: ch2,\n start: start,\n end: index\n };\n }\n\n if (ch2 === '//') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } // 1-character punctuators: < > = ! + - * % & | ^ /\n\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;\n return {\n type: TokenPunctuator,\n value: ch1,\n start: start,\n end: index\n };\n }\n\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n} // 7.8.3 Numeric Literals\n\n\nfunction scanHexLiteral(start) {\n let number = '';\n\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n\n number += source[index++];\n }\n\n if (number.length === 0) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt('0x' + number, 16),\n start: start,\n end: index\n };\n}\n\nfunction scanOctalLiteral(start) {\n let number = '0' + source[index++];\n\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n\n number += source[index++];\n }\n\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt(number, 8),\n octal: true,\n start: start,\n end: index\n };\n}\n\nfunction scanNumericLiteral() {\n var number, start, ch;\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || ch === '.', 'Numeric literal must start with a decimal digit or a decimal point');\n start = index;\n number = '';\n\n if (ch !== '.') {\n number = source[index++];\n ch = source[index]; // Hex number starts with '0x'.\n // Octal number starts with '0'.\n\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n\n if (isOctalDigit(ch)) {\n return scanOctalLiteral(start);\n } // decimal number starts with '0' such as '09' is illegal.\n\n\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n ch = source[index];\n\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseFloat(number),\n start: start,\n end: index\n };\n} // 7.8.4 String Literals\n\n\nfunction scanStringLiteral() {\n var str = '',\n quote,\n start,\n ch,\n code,\n octal = false;\n quote = source[index];\n assert(quote === '\\'' || quote === '\"', 'String literal must starts with a quote');\n start = index;\n ++index;\n\n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n str += scanHexEscape(ch);\n }\n\n break;\n\n case 'n':\n str += '\\n';\n break;\n\n case 'r':\n str += '\\r';\n break;\n\n case 't':\n str += '\\t';\n break;\n\n case 'b':\n str += '\\b';\n break;\n\n case 'f':\n str += '\\f';\n break;\n\n case 'v':\n str += '\\x0B';\n break;\n\n default:\n if (isOctalDigit(ch)) {\n code = '01234567'.indexOf(ch); // \\0 is not octal escape sequence\n\n if (code !== 0) {\n octal = true;\n }\n\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]); // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n\n if ('0123'.indexOf(ch) >= 0 && index < length && isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n\n str += String.fromCharCode(code);\n } else {\n str += ch;\n }\n\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenStringLiteral,\n value: str,\n octal: octal,\n start: start,\n end: index\n };\n}\n\nfunction testRegExp(pattern, flags) {\n let tmp = pattern;\n\n if (flags.indexOf('u') >= 0) {\n // Replace each astral symbol and every Unicode code point\n // escape sequence with a single ASCII symbol to avoid throwing on\n // regular expressions that are only valid in combination with the\n // `/u` flag.\n // Note: replacing with the ASCII symbol `x` might cause false\n // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n // perfectly valid pattern that is equivalent to `[a-b]`, but it\n // would be replaced by `[x-b]` which throws an error.\n tmp = tmp.replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, ($0, $1) => {\n if (parseInt($1, 16) <= 0x10FFFF) {\n return 'x';\n }\n\n throwError({}, MessageInvalidRegExp);\n }).replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n } // First, detect invalid regular expressions.\n\n\n try {\n new RegExp(tmp);\n } catch (e) {\n throwError({}, MessageInvalidRegExp);\n } // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n\n\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n}\n\nfunction scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n classMarker = false;\n terminated = false;\n\n while (index < length) {\n ch = source[index++];\n str += ch;\n\n if (ch === '\\\\') {\n ch = source[index++]; // ECMA-262 7.8.5\n\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n }\n\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n\n if (!terminated) {\n throwError({}, MessageUnterminatedRegExp);\n } // Exclude leading and trailing slash.\n\n\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n}\n\nfunction scanRegExpFlags() {\n var ch, str, flags;\n str = '';\n flags = '';\n\n while (index < length) {\n ch = source[index];\n\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n\n ++index;\n\n if (ch === '\\\\' && index < length) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } else {\n flags += ch;\n str += ch;\n }\n }\n\n if (flags.search(/[^gimuy]/g) >= 0) {\n throwError({}, MessageInvalidRegExp, flags);\n }\n\n return {\n value: flags,\n literal: str\n };\n}\n\nfunction scanRegExp() {\n var start, body, flags, value;\n lookahead = null;\n skipComment();\n start = index;\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n}\n\nfunction isIdentifierName(token) {\n return token.type === TokenIdentifier || token.type === TokenKeyword || token.type === TokenBooleanLiteral || token.type === TokenNullLiteral;\n}\n\nfunction advance() {\n skipComment();\n\n if (index >= length) {\n return {\n type: TokenEOF,\n start: index,\n end: index\n };\n }\n\n const ch = source.charCodeAt(index);\n\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n } // Very common: ( and ) and ;\n\n\n if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n return scanPunctuator();\n } // String literal starts with single quote (U+0027) or double quote (U+0022).\n\n\n if (ch === 0x27 || ch === 0x22) {\n return scanStringLiteral();\n } // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n\n\n if (ch === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n}\n\nfunction lex() {\n const token = lookahead;\n index = token.end;\n lookahead = advance();\n index = token.end;\n return token;\n}\n\nfunction peek() {\n const pos = index;\n lookahead = advance();\n index = pos;\n}\n\nfunction finishArrayExpression(elements) {\n const node = new ASTNode(SyntaxArrayExpression);\n node.elements = elements;\n return node;\n}\n\nfunction finishBinaryExpression(operator, left, right) {\n const node = new ASTNode(operator === '||' || operator === '&&' ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n node.operator = operator;\n node.left = left;\n node.right = right;\n return node;\n}\n\nfunction finishCallExpression(callee, args) {\n const node = new ASTNode(SyntaxCallExpression);\n node.callee = callee;\n node.arguments = args;\n return node;\n}\n\nfunction finishConditionalExpression(test, consequent, alternate) {\n const node = new ASTNode(SyntaxConditionalExpression);\n node.test = test;\n node.consequent = consequent;\n node.alternate = alternate;\n return node;\n}\n\nfunction finishIdentifier(name) {\n const node = new ASTNode(SyntaxIdentifier);\n node.name = name;\n return node;\n}\n\nfunction finishLiteral(token) {\n const node = new ASTNode(SyntaxLiteral);\n node.value = token.value;\n node.raw = source.slice(token.start, token.end);\n\n if (token.regex) {\n if (node.raw === '//') {\n node.raw = '/(?:)/';\n }\n\n node.regex = token.regex;\n }\n\n return node;\n}\n\nfunction finishMemberExpression(accessor, object, property) {\n const node = new ASTNode(SyntaxMemberExpression);\n node.computed = accessor === '[';\n node.object = object;\n node.property = property;\n if (!node.computed) property.member = true;\n return node;\n}\n\nfunction finishObjectExpression(properties) {\n const node = new ASTNode(SyntaxObjectExpression);\n node.properties = properties;\n return node;\n}\n\nfunction finishProperty(kind, key, value) {\n const node = new ASTNode(SyntaxProperty);\n node.key = key;\n node.value = value;\n node.kind = kind;\n return node;\n}\n\nfunction finishUnaryExpression(operator, argument) {\n const node = new ASTNode(SyntaxUnaryExpression);\n node.operator = operator;\n node.argument = argument;\n node.prefix = true;\n return node;\n} // Throw an exception\n\n\nfunction throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(/%(\\d)/g, (whole, index) => {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n });\n error = new Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n} // Throw an exception because of the token.\n\n\nfunction throwUnexpected(token) {\n if (token.type === TokenEOF) {\n throwError(token, MessageUnexpectedEOS);\n }\n\n if (token.type === TokenNumericLiteral) {\n throwError(token, MessageUnexpectedNumber);\n }\n\n if (token.type === TokenStringLiteral) {\n throwError(token, MessageUnexpectedString);\n }\n\n if (token.type === TokenIdentifier) {\n throwError(token, MessageUnexpectedIdentifier);\n }\n\n if (token.type === TokenKeyword) {\n throwError(token, MessageUnexpectedReserved);\n } // BooleanLiteral, NullLiteral, or Punctuator.\n\n\n throwError(token, MessageUnexpectedToken, token.value);\n} // Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\n\nfunction expect(value) {\n const token = lex();\n\n if (token.type !== TokenPunctuator || token.value !== value) {\n throwUnexpected(token);\n }\n} // Return true if the next token matches the specified punctuator.\n\n\nfunction match(value) {\n return lookahead.type === TokenPunctuator && lookahead.value === value;\n} // Return true if the next token matches the specified keyword\n\n\nfunction matchKeyword(keyword) {\n return lookahead.type === TokenKeyword && lookahead.value === keyword;\n} // 11.1.4 Array Initialiser\n\n\nfunction parseArrayInitialiser() {\n const elements = [];\n index = lookahead.start;\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseConditionalExpression());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n lex();\n return finishArrayExpression(elements);\n} // 11.1.5 Object Initialiser\n\n\nfunction parseObjectPropertyKey() {\n index = lookahead.start;\n const token = lex(); // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n if (token.octal) {\n throwError(token, MessageStrictOctalLiteral);\n }\n\n return finishLiteral(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseObjectProperty() {\n var token, key, id, value;\n index = lookahead.start;\n token = lookahead;\n\n if (token.type === TokenIdentifier) {\n id = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', id, value);\n }\n\n if (token.type === TokenEOF || token.type === TokenPunctuator) {\n throwUnexpected(token);\n } else {\n key = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', key, value);\n }\n}\n\nfunction parseObjectInitialiser() {\n var properties = [],\n property,\n name,\n key,\n map = {},\n toString = String;\n index = lookahead.start;\n expect('{');\n\n while (!match('}')) {\n property = parseObjectProperty();\n\n if (property.key.type === SyntaxIdentifier) {\n name = property.key.name;\n } else {\n name = toString(property.key.value);\n }\n\n key = '$' + name;\n\n if (Object.prototype.hasOwnProperty.call(map, key)) {\n throwError({}, MessageStrictDuplicateProperty);\n } else {\n map[key] = true;\n }\n\n properties.push(property);\n\n if (!match('}')) {\n expect(',');\n }\n }\n\n expect('}');\n return finishObjectExpression(properties);\n} // 11.1.6 The Grouping Operator\n\n\nfunction parseGroupExpression() {\n expect('(');\n const expr = parseExpression();\n expect(')');\n return expr;\n} // 11.1 Primary Expressions\n\n\nconst legalKeywords = {\n 'if': 1\n};\n\nfunction parsePrimaryExpression() {\n var type, token, expr;\n\n if (match('(')) {\n return parseGroupExpression();\n }\n\n if (match('[')) {\n return parseArrayInitialiser();\n }\n\n if (match('{')) {\n return parseObjectInitialiser();\n }\n\n type = lookahead.type;\n index = lookahead.start;\n\n if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n expr = finishIdentifier(lex().value);\n } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n if (lookahead.octal) {\n throwError(lookahead, MessageStrictOctalLiteral);\n }\n\n expr = finishLiteral(lex());\n } else if (type === TokenKeyword) {\n throw new Error(DISABLED);\n } else if (type === TokenBooleanLiteral) {\n token = lex();\n token.value = token.value === 'true';\n expr = finishLiteral(token);\n } else if (type === TokenNullLiteral) {\n token = lex();\n token.value = null;\n expr = finishLiteral(token);\n } else if (match('/') || match('/=')) {\n expr = finishLiteral(scanRegExp());\n peek();\n } else {\n throwUnexpected(lex());\n }\n\n return expr;\n} // 11.2 Left-Hand-Side Expressions\n\n\nfunction parseArguments() {\n const args = [];\n expect('(');\n\n if (!match(')')) {\n while (index < length) {\n args.push(parseConditionalExpression());\n\n if (match(')')) {\n break;\n }\n\n expect(',');\n }\n }\n\n expect(')');\n return args;\n}\n\nfunction parseNonComputedProperty() {\n index = lookahead.start;\n const token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseNonComputedMember() {\n expect('.');\n return parseNonComputedProperty();\n}\n\nfunction parseComputedMember() {\n expect('[');\n const expr = parseExpression();\n expect(']');\n return expr;\n}\n\nfunction parseLeftHandSideExpressionAllowCall() {\n var expr, args, property;\n expr = parsePrimaryExpression();\n\n for (;;) {\n if (match('.')) {\n property = parseNonComputedMember();\n expr = finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = finishCallExpression(expr, args);\n } else if (match('[')) {\n property = parseComputedMember();\n expr = finishMemberExpression('[', expr, property);\n } else {\n break;\n }\n }\n\n return expr;\n} // 11.3 Postfix Expressions\n\n\nfunction parsePostfixExpression() {\n const expr = parseLeftHandSideExpressionAllowCall();\n\n if (lookahead.type === TokenPunctuator) {\n if (match('++') || match('--')) {\n throw new Error(DISABLED);\n }\n }\n\n return expr;\n} // 11.4 Unary Operators\n\n\nfunction parseUnaryExpression() {\n var token, expr;\n\n if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n throw new Error(DISABLED);\n } else if (match('+') || match('-') || match('~') || match('!')) {\n token = lex();\n expr = parseUnaryExpression();\n expr = finishUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw new Error(DISABLED);\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n}\n\nfunction binaryPrecedence(token) {\n let prec = 0;\n\n if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '|':\n prec = 3;\n break;\n\n case '^':\n prec = 4;\n break;\n\n case '&':\n prec = 5;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n case 'in':\n prec = 7;\n break;\n\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n }\n\n return prec;\n} // 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\n\nfunction parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n marker = lookahead;\n left = parseUnaryExpression();\n token = lookahead;\n prec = binaryPrecedence(token);\n\n if (prec === 0) {\n return left;\n }\n\n token.prec = prec;\n lex();\n markers = [marker, lookahead];\n right = parseUnaryExpression();\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n // Reduce: make a binary expression from the three topmost entries.\n while (stack.length > 2 && prec <= stack[stack.length - 2].prec) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = finishBinaryExpression(operator, left, right);\n stack.push(expr);\n } // Shift.\n\n\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = parseUnaryExpression();\n stack.push(expr);\n } // Final reduce to clean-up the stack.\n\n\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n\n while (i > 1) {\n markers.pop();\n expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n} // 11.12 Conditional Operator\n\n\nfunction parseConditionalExpression() {\n var expr, consequent, alternate;\n expr = parseBinaryExpression();\n\n if (match('?')) {\n lex();\n consequent = parseConditionalExpression();\n expect(':');\n alternate = parseConditionalExpression();\n expr = finishConditionalExpression(expr, consequent, alternate);\n }\n\n return expr;\n} // 11.14 Comma Operator\n\n\nfunction parseExpression() {\n const expr = parseConditionalExpression();\n\n if (match(',')) {\n throw new Error(DISABLED); // no sequence expressions\n }\n\n return expr;\n}\n\nfunction parser (code) {\n source = code;\n index = 0;\n length = source.length;\n lookahead = null;\n peek();\n const expr = parseExpression();\n\n if (lookahead.type !== TokenEOF) {\n throw new Error('Unexpect token after expression.');\n }\n\n return expr;\n}\n\nvar Constants = {\n NaN: 'NaN',\n E: 'Math.E',\n LN2: 'Math.LN2',\n LN10: 'Math.LN10',\n LOG2E: 'Math.LOG2E',\n LOG10E: 'Math.LOG10E',\n PI: 'Math.PI',\n SQRT1_2: 'Math.SQRT1_2',\n SQRT2: 'Math.SQRT2',\n MIN_VALUE: 'Number.MIN_VALUE',\n MAX_VALUE: 'Number.MAX_VALUE'\n};\n\nfunction Functions (codegen) {\n function fncall(name, args, cast, type) {\n let obj = codegen(args[0]);\n\n if (cast) {\n obj = cast + '(' + obj + ')';\n if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n }\n\n return obj + '.' + name + (type < 0 ? '' : type === 0 ? '()' : '(' + args.slice(1).map(codegen).join(',') + ')');\n }\n\n function fn(name, cast, type) {\n return args => fncall(name, args, cast, type);\n }\n\n const DATE = 'new Date',\n STRING = 'String',\n REGEXP = 'RegExp';\n return {\n // MATH functions\n isNaN: 'Number.isNaN',\n isFinite: 'Number.isFinite',\n abs: 'Math.abs',\n acos: 'Math.acos',\n asin: 'Math.asin',\n atan: 'Math.atan',\n atan2: 'Math.atan2',\n ceil: 'Math.ceil',\n cos: 'Math.cos',\n exp: 'Math.exp',\n floor: 'Math.floor',\n log: 'Math.log',\n max: 'Math.max',\n min: 'Math.min',\n pow: 'Math.pow',\n random: 'Math.random',\n round: 'Math.round',\n sin: 'Math.sin',\n sqrt: 'Math.sqrt',\n tan: 'Math.tan',\n clamp: function (args) {\n if (args.length < 3) error('Missing arguments to clamp function.');\n if (args.length > 3) error('Too many arguments to clamp function.');\n const a = args.map(codegen);\n return 'Math.max(' + a[1] + ', Math.min(' + a[2] + ',' + a[0] + '))';\n },\n // DATE functions\n now: 'Date.now',\n utc: 'Date.UTC',\n datetime: DATE,\n date: fn('getDate', DATE, 0),\n day: fn('getDay', DATE, 0),\n year: fn('getFullYear', DATE, 0),\n month: fn('getMonth', DATE, 0),\n hours: fn('getHours', DATE, 0),\n minutes: fn('getMinutes', DATE, 0),\n seconds: fn('getSeconds', DATE, 0),\n milliseconds: fn('getMilliseconds', DATE, 0),\n time: fn('getTime', DATE, 0),\n timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n utcdate: fn('getUTCDate', DATE, 0),\n utcday: fn('getUTCDay', DATE, 0),\n utcyear: fn('getUTCFullYear', DATE, 0),\n utcmonth: fn('getUTCMonth', DATE, 0),\n utchours: fn('getUTCHours', DATE, 0),\n utcminutes: fn('getUTCMinutes', DATE, 0),\n utcseconds: fn('getUTCSeconds', DATE, 0),\n utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n // sequence functions\n length: fn('length', null, -1),\n // STRING functions\n parseFloat: 'parseFloat',\n parseInt: 'parseInt',\n upper: fn('toUpperCase', STRING, 0),\n lower: fn('toLowerCase', STRING, 0),\n substring: fn('substring', STRING),\n split: fn('split', STRING),\n trim: fn('trim', STRING, 0),\n // REGEXP functions\n regexp: REGEXP,\n test: fn('test', REGEXP),\n // Control Flow functions\n if: function (args) {\n if (args.length < 3) error('Missing arguments to if function.');\n if (args.length > 3) error('Too many arguments to if function.');\n const a = args.map(codegen);\n return '(' + a[0] + '?' + a[1] + ':' + a[2] + ')';\n }\n };\n}\n\nfunction stripQuotes(s) {\n const n = s && s.length - 1;\n return n && (s[0] === '\"' && s[n] === '\"' || s[0] === '\\'' && s[n] === '\\'') ? s.slice(1, -1) : s;\n}\n\nfunction codegen (opt) {\n opt = opt || {};\n const allowed = opt.allowed ? toSet(opt.allowed) : {},\n forbidden = opt.forbidden ? toSet(opt.forbidden) : {},\n constants = opt.constants || Constants,\n functions = (opt.functions || Functions)(visit),\n globalvar = opt.globalvar,\n fieldvar = opt.fieldvar,\n outputGlobal = isFunction(globalvar) ? globalvar : id => \"\".concat(globalvar, \"[\\\"\").concat(id, \"\\\"]\");\n let globals = {},\n fields = {},\n memberDepth = 0;\n\n function visit(ast) {\n if (isString(ast)) return ast;\n const generator = Generators[ast.type];\n if (generator == null) error('Unsupported type: ' + ast.type);\n return generator(ast);\n }\n\n const Generators = {\n Literal: n => n.raw,\n Identifier: n => {\n const id = n.name;\n\n if (memberDepth > 0) {\n return id;\n } else if (hasOwnProperty(forbidden, id)) {\n return error('Illegal identifier: ' + id);\n } else if (hasOwnProperty(constants, id)) {\n return constants[id];\n } else if (hasOwnProperty(allowed, id)) {\n return id;\n } else {\n globals[id] = 1;\n return outputGlobal(id);\n }\n },\n MemberExpression: n => {\n const d = !n.computed,\n o = visit(n.object);\n if (d) memberDepth += 1;\n const p = visit(n.property);\n\n if (o === fieldvar) {\n // strip quotes to sanitize field name (#1653)\n fields[stripQuotes(p)] = 1;\n }\n\n if (d) memberDepth -= 1;\n return o + (d ? '.' + p : '[' + p + ']');\n },\n CallExpression: n => {\n if (n.callee.type !== 'Identifier') {\n error('Illegal callee type: ' + n.callee.type);\n }\n\n const callee = n.callee.name,\n args = n.arguments,\n fn = hasOwnProperty(functions, callee) && functions[callee];\n if (!fn) error('Unrecognized function: ' + callee);\n return isFunction(fn) ? fn(args) : fn + '(' + args.map(visit).join(',') + ')';\n },\n ArrayExpression: n => '[' + n.elements.map(visit).join(',') + ']',\n BinaryExpression: n => '(' + visit(n.left) + ' ' + n.operator + ' ' + visit(n.right) + ')',\n UnaryExpression: n => '(' + n.operator + visit(n.argument) + ')',\n ConditionalExpression: n => '(' + visit(n.test) + '?' + visit(n.consequent) + ':' + visit(n.alternate) + ')',\n LogicalExpression: n => '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n ObjectExpression: n => '{' + n.properties.map(visit).join(',') + '}',\n Property: n => {\n memberDepth += 1;\n const k = visit(n.key);\n memberDepth -= 1;\n return k + ':' + visit(n.value);\n }\n };\n\n function codegen(ast) {\n const result = {\n code: visit(ast),\n globals: Object.keys(globals),\n fields: Object.keys(fields)\n };\n globals = {};\n fields = {};\n return result;\n }\n\n codegen.functions = functions;\n codegen.constants = constants;\n return codegen;\n}\n\nexport { ASTNode, ArrayExpression, BinaryExpression, CallExpression, ConditionalExpression, Identifier, Literal, LogicalExpression, MemberExpression, ObjectExpression, Property, RawCode, UnaryExpression, codegen, Constants as constants, Functions as functions, parser as parse };\n","import {parse} from 'vega-expression';\n\nfunction getName(node: any) {\n const name: string[] = [];\n\n if (node.type === 'Identifier') {\n return [node.name];\n }\n\n if (node.type === 'Literal') {\n return [node.value];\n }\n\n if (node.type === 'MemberExpression') {\n name.push(...getName(node.object));\n name.push(...getName(node.property));\n }\n\n return name;\n}\n\nfunction startsWithDatum(node: any): boolean {\n if (node.object.type === 'MemberExpression') {\n return startsWithDatum(node.object);\n }\n return node.object.name === 'datum';\n}\n\nexport function getDependentFields(expression: string) {\n const ast = parse(expression);\n const dependents = new Set();\n ast.visit((node: any) => {\n if (node.type === 'MemberExpression' && startsWithDatum(node)) {\n dependents.add(getName(node).slice(1).join('.'));\n }\n });\n\n return dependents;\n}\n","import {FilterTransform as VgFilterTransform} from 'vega';\nimport {LogicalComposition} from '../../logical';\nimport {Predicate} from '../../predicate';\nimport {duplicate} from '../../util';\nimport {Model} from '../model';\nimport {expression} from '../predicate';\nimport {DataFlowNode} from './dataflow';\nimport {getDependentFields} from './expressions';\n\nexport class FilterNode extends DataFlowNode {\n private expr: string;\n private _dependentFields: Set;\n public clone() {\n return new FilterNode(null, this.model, duplicate(this.filter));\n }\n\n constructor(\n parent: DataFlowNode,\n private readonly model: Model,\n private readonly filter: LogicalComposition\n ) {\n super(parent);\n\n // TODO: refactor this to not take a node and\n // then add a static function makeFromOperand and make the constructor take only an expression\n this.expr = expression(this.model, this.filter, this);\n\n this._dependentFields = getDependentFields(this.expr);\n }\n\n public dependentFields() {\n return this._dependentFields;\n }\n\n public producedFields() {\n return new Set(); // filter does not produce any new fields\n }\n\n public assemble(): VgFilterTransform {\n return {\n type: 'filter',\n expr: this.expr\n };\n }\n\n public hash() {\n return `Filter ${this.expr}`;\n }\n}\n","import {selector as parseSelector} from 'vega-event-selector';\nimport {array, isObject, isString, stringValue} from 'vega-util';\nimport {selectionCompilers, SelectionComponent, STORE} from '.';\nimport {warn} from '../../log';\nimport {BaseSelectionConfig, SelectionParameter, ParameterExtent} from '../../selection';\nimport {Dict, duplicate, entries, replacePathInField, varName} from '../../util';\nimport {DataFlowNode, OutputNode} from '../data/dataflow';\nimport {FilterNode} from '../data/filter';\nimport {Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {DataSourceType} from '../../data';\nimport {ParameterPredicate} from '../../predicate';\n\nexport function parseUnitSelection(model: UnitModel, selDefs: SelectionParameter[]) {\n const selCmpts: Dict> = {};\n const selectionConfig = model.config.selection;\n\n if (!selDefs || !selDefs.length) return selCmpts;\n\n for (const def of selDefs) {\n const name = varName(def.name);\n const selDef = def.select;\n const type = isString(selDef) ? selDef : selDef.type;\n const defaults: BaseSelectionConfig = isObject(selDef) ? duplicate(selDef) : {type};\n\n // Set default values from config if a property hasn't been specified,\n // or if it is true. E.g., \"translate\": true should use the default\n // event handlers for translate. However, true may be a valid value for\n // a property (e.g., \"nearest\": true). Project transform applies its defaults.\n const {fields, encodings, ...cfg} = selectionConfig[type];\n for (const key in cfg) {\n if (key === 'mark') {\n defaults[key] = {...cfg[key], ...defaults[key]};\n }\n\n if (defaults[key] === undefined || defaults[key] === true) {\n defaults[key] = cfg[key] ?? defaults[key];\n }\n }\n\n const selCmpt: SelectionComponent = (selCmpts[name] = {\n ...defaults,\n name,\n type,\n init: def.value,\n bind: def.bind,\n events: isString(defaults.on) ? parseSelector(defaults.on, 'scope') : array(duplicate(defaults.on))\n } as any);\n\n for (const c of selectionCompilers) {\n if (c.defined(selCmpt) && c.parse) {\n c.parse(model, selCmpt, def);\n }\n }\n }\n\n return selCmpts;\n}\n\nexport function parseSelectionPredicate(\n model: Model,\n pred: ParameterPredicate,\n dfnode?: DataFlowNode,\n datum = 'datum'\n): string {\n const name = isString(pred) ? pred : pred.param;\n const vname = varName(name);\n const store = stringValue(vname + STORE);\n let selCmpt;\n\n try {\n selCmpt = model.getSelectionComponent(vname, name);\n } catch (e) {\n // If a selection isn't found, treat as a variable parameter and coerce to boolean.\n return `!!${vname}`;\n }\n\n if (selCmpt.project.timeUnit) {\n const child = dfnode ?? model.component.data.raw;\n const tunode = selCmpt.project.timeUnit.clone();\n if (child.parent) {\n tunode.insertAsParentOf(child);\n } else {\n child.parent = tunode;\n }\n }\n\n const test = `vlSelectionTest(${store}, ${datum}${\n selCmpt.resolve === 'global' ? ')' : `, ${stringValue(selCmpt.resolve)})`\n }`;\n const length = `length(data(${store}))`;\n\n return pred.empty === false ? `${length} && ${test}` : `!${length} || ${test}`;\n}\n\nexport function parseSelectionExtent(model: Model, name: string, extent: ParameterExtent) {\n const vname = varName(name);\n const encoding = extent['encoding'];\n let field = extent['field'];\n let selCmpt;\n\n try {\n selCmpt = model.getSelectionComponent(vname, name);\n } catch (e) {\n // If a selection isn't found, treat it as a variable parameter.\n return vname;\n }\n\n if (!encoding && !field) {\n field = selCmpt.project.items[0].field;\n if (selCmpt.project.items.length > 1) {\n warn(\n 'A \"field\" or \"encoding\" must be specified when using a selection as a scale domain. ' +\n `Using \"field\": ${stringValue(field)}.`\n );\n }\n } else if (encoding && !field) {\n const encodings = selCmpt.project.items.filter(p => p.channel === encoding);\n if (!encodings.length || encodings.length > 1) {\n field = selCmpt.project.items[0].field;\n warn(\n (!encodings.length ? 'No ' : 'Multiple ') +\n `matching ${stringValue(encoding)} encoding found for selection ${stringValue(extent.param)}. ` +\n `Using \"field\": ${stringValue(field)}.`\n );\n } else {\n field = encodings[0].field;\n }\n }\n\n return `${selCmpt.name}[${stringValue(replacePathInField(field))}]`;\n}\n\nexport function materializeSelections(model: UnitModel, main: OutputNode) {\n for (const [selection, selCmpt] of entries(model.component.selection ?? {})) {\n const lookupName = model.getName(`lookup_${selection}`);\n model.component.data.outputNodes[lookupName] = selCmpt.materialized = new OutputNode(\n new FilterNode(main, model, {param: selection}),\n lookupName,\n DataSourceType.Lookup,\n model.component.data.outputNodeRefCounts\n );\n }\n}\n","import {isString} from 'vega-util';\nimport {LogicalComposition} from '../logical';\nimport {fieldFilterExpression, isSelectionPredicate, Predicate} from '../predicate';\nimport {logicalExpr} from '../util';\nimport {DataFlowNode} from './data/dataflow';\nimport {Model} from './model';\nimport {parseSelectionPredicate} from './selection/parse';\n\n/**\n * Converts a predicate into an expression.\n */\n// model is only used for selection filters.\nexport function expression(model: Model, filterOp: LogicalComposition, node?: DataFlowNode): string {\n return logicalExpr(filterOp, (predicate: Predicate) => {\n if (isString(predicate)) {\n return predicate;\n } else if (isSelectionPredicate(predicate)) {\n return parseSelectionPredicate(model, predicate, node);\n } else {\n // Filter Object\n return fieldFilterExpression(predicate);\n }\n });\n}\n","import {Axis as VgAxis, AxisEncode, NewSignal, SignalRef, Text} from 'vega';\nimport {array, isArray} from 'vega-util';\nimport {AXIS_PARTS, AXIS_PROPERTY_TYPE, CONDITIONAL_AXIS_PROP_INDEX, isConditionalAxisValue} from '../../axis';\nimport {POSITION_SCALE_CHANNELS} from '../../channel';\nimport {defaultTitle, FieldDefBase} from '../../channeldef';\nimport {Config} from '../../config';\nimport {isText} from '../../title';\nimport {contains, getFirstDefined, isEmpty, replaceAll} from '../../util';\nimport {isSignalRef, VgEncodeChannel, VgValueRef} from '../../vega.schema';\nimport {exprFromValueOrSignalRef} from '../common';\nimport {Model} from '../model';\nimport {expression} from '../predicate';\nimport {AxisComponent, AxisComponentIndex} from './component';\n\nfunction assembleTitle(title: Text | FieldDefBase[] | SignalRef, config: Config): Text | SignalRef {\n if (!title) {\n return undefined;\n }\n if (isArray(title) && !isText(title)) {\n return title.map(fieldDef => defaultTitle(fieldDef, config)).join(', ');\n }\n return title;\n}\n\nfunction setAxisEncode(\n axis: Omit,\n part: keyof AxisEncode,\n vgProp: VgEncodeChannel,\n vgRef: VgValueRef | readonly VgValueRef[]\n) {\n axis.encode ??= {};\n axis.encode[part] ??= {};\n axis.encode[part].update ??= {};\n // TODO: remove as any after https://github.com/prisma/nexus-prisma/issues/291\n (axis.encode[part].update[vgProp] as any) = vgRef;\n}\n\nexport function assembleAxis(\n axisCmpt: AxisComponent,\n kind: 'main' | 'grid',\n config: Config,\n opt: {\n header: boolean; // whether this is called via a header\n } = {header: false}\n): VgAxis {\n const {disable, orient, scale, labelExpr, title, zindex, ...axis} = axisCmpt.combine();\n\n if (disable) {\n return undefined;\n }\n\n for (const prop in axis) {\n const propType = AXIS_PROPERTY_TYPE[prop];\n const propValue = axis[prop];\n\n if (propType && propType !== kind && propType !== 'both') {\n // Remove properties that are not valid for this kind of axis\n delete axis[prop];\n } else if (isConditionalAxisValue(propValue)) {\n // deal with conditional axis value\n\n const {condition, ...valueOrSignalRef} = propValue;\n const conditions = array(condition);\n\n const propIndex = CONDITIONAL_AXIS_PROP_INDEX[prop];\n if (propIndex) {\n const {vgProp, part} = propIndex;\n // If there is a corresponding Vega property for the channel,\n // use Vega's custom axis encoding and delete the original axis property to avoid conflicts\n\n const vgRef = [\n ...conditions.map(c => {\n const {test, ...valueOrSignalCRef} = c;\n return {\n test: expression(null, test),\n ...valueOrSignalCRef\n };\n }),\n valueOrSignalRef\n ];\n setAxisEncode(axis, part, vgProp, vgRef);\n delete axis[prop];\n } else if (propIndex === null) {\n // If propIndex is null, this means we support conditional axis property by converting the condition to signal instead.\n const signalRef: SignalRef = {\n signal:\n conditions\n .map(c => {\n const {test, ...valueOrSignalCRef} = c;\n return `${expression(null, test)} ? ${exprFromValueOrSignalRef(valueOrSignalCRef)} : `;\n })\n .join('') + exprFromValueOrSignalRef(valueOrSignalRef)\n };\n axis[prop] = signalRef;\n }\n } else if (isSignalRef(propValue)) {\n const propIndex = CONDITIONAL_AXIS_PROP_INDEX[prop];\n if (propIndex) {\n const {vgProp, part} = propIndex;\n setAxisEncode(axis, part, vgProp, propValue);\n delete axis[prop];\n } // else do nothing since the property already supports signal\n }\n\n // Do not pass labelAlign/Baseline = null to Vega since it won't pass the schema\n // Note that we need to use null so the default labelAlign is preserved.\n if (contains(['labelAlign', 'labelBaseline'], prop) && axis[prop] === null) {\n delete axis[prop];\n }\n }\n\n if (kind === 'grid') {\n if (!axis.grid) {\n return undefined;\n }\n\n // Remove unnecessary encode block\n if (axis.encode) {\n // Only need to keep encode block for grid\n const {grid} = axis.encode;\n axis.encode = {\n ...(grid ? {grid} : {})\n };\n\n if (isEmpty(axis.encode)) {\n delete axis.encode;\n }\n }\n\n return {\n scale,\n orient,\n ...axis,\n domain: false,\n labels: false,\n aria: false, // always hide grid axis\n\n // Always set min/maxExtent to 0 to ensure that `config.axis*.minExtent` and `config.axis*.maxExtent`\n // would not affect gridAxis\n maxExtent: 0,\n minExtent: 0,\n ticks: false,\n zindex: getFirstDefined(zindex, 0) // put grid behind marks by default\n };\n } else {\n // kind === 'main'\n\n if (!opt.header && axisCmpt.mainExtracted) {\n // if mainExtracted has been extracted to a separate facet\n return undefined;\n }\n\n if (labelExpr !== undefined) {\n let expr = labelExpr;\n if (axis.encode?.labels?.update && isSignalRef(axis.encode.labels.update.text)) {\n expr = replaceAll(labelExpr, 'datum.label', axis.encode.labels.update.text.signal);\n }\n setAxisEncode(axis, 'labels', 'text', {signal: expr});\n }\n\n if (axis.labelAlign === null) {\n delete axis.labelAlign;\n }\n\n // Remove unnecessary encode block\n if (axis.encode) {\n for (const part of AXIS_PARTS) {\n if (!axisCmpt.hasAxisPart(part)) {\n delete axis.encode[part];\n }\n }\n if (isEmpty(axis.encode)) {\n delete axis.encode;\n }\n }\n\n const titleString = assembleTitle(title, config);\n\n return {\n scale,\n orient,\n grid: false,\n ...(titleString ? {title: titleString} : {}),\n ...axis,\n ...(config.aria === false ? {aria: false} : {}),\n zindex: getFirstDefined(zindex, 0) // put axis line above marks by default\n };\n }\n}\n\n/**\n * Add axis signals so grid line works correctly\n * (Fix https://github.com/vega/vega-lite/issues/4226)\n */\nexport function assembleAxisSignals(model: Model): NewSignal[] {\n const {axes} = model.component;\n const signals: NewSignal[] = [];\n\n for (const channel of POSITION_SCALE_CHANNELS) {\n if (axes[channel]) {\n for (const axis of axes[channel]) {\n if (!axis.get('disable') && !axis.get('gridScale')) {\n // If there is x-axis but no y-scale for gridScale, need to set height/width so x-axis can draw the grid with the right height. Same for y-axis and width.\n\n const sizeType = channel === 'x' ? 'height' : 'width';\n const update = model.getSizeSignalRef(sizeType).signal;\n\n if (sizeType !== update) {\n signals.push({\n name: sizeType,\n update: update\n });\n }\n }\n }\n }\n }\n return signals;\n}\n\nexport function assembleAxes(axisComponents: AxisComponentIndex, config: Config): VgAxis[] {\n const {x = [], y = []} = axisComponents;\n return [\n ...x.map(a => assembleAxis(a, 'grid', config)),\n ...y.map(a => assembleAxis(a, 'grid', config)),\n ...x.map(a => assembleAxis(a, 'main', config)),\n ...y.map(a => assembleAxis(a, 'main', config))\n ].filter(a => a); // filter undefined\n}\n","import {ScaleType, SignalRef} from 'vega';\nimport {array} from 'vega-util';\nimport {AxisConfig} from '../../axis';\nimport {PositionScaleChannel} from '../../channel';\nimport {Config, StyleConfigIndex} from '../../config';\nimport {isQuantitative} from '../../scale';\nimport {keys, titleCase} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {getStyleConfig, signalOrStringValue} from '../common';\n\nfunction getAxisConfigFromConfigTypes(\n configTypes: string[],\n config: Config,\n channel: 'x' | 'y',\n orient: string | SignalRef\n) {\n // TODO: add special casing to add conditional value based on orient signal\n return Object.assign.apply(null, [\n {},\n ...configTypes.map(configType => {\n if (configType === 'axisOrient') {\n const orient1 = channel === 'x' ? 'bottom' : 'left';\n const orientConfig1 = config[channel === 'x' ? 'axisBottom' : 'axisLeft'] || {};\n const orientConfig2 = config[channel === 'x' ? 'axisTop' : 'axisRight'] || {};\n\n const props = new Set([...keys(orientConfig1), ...keys(orientConfig2)]);\n\n const conditionalOrientAxisConfig = {};\n for (const prop of props.values()) {\n conditionalOrientAxisConfig[prop] = {\n // orient is surely signal in this case\n signal: `${orient['signal']} === \"${orient1}\" ? ${signalOrStringValue(\n orientConfig1[prop]\n )} : ${signalOrStringValue(orientConfig2[prop])}`\n };\n }\n\n return conditionalOrientAxisConfig;\n }\n\n return config[configType];\n })\n ]);\n}\n\nexport type AxisConfigs = ReturnType;\n\nexport function getAxisConfigs(\n channel: PositionScaleChannel,\n scaleType: ScaleType,\n orient: string | SignalRef,\n config: Config\n) {\n const typeBasedConfigTypes =\n scaleType === 'band'\n ? ['axisDiscrete', 'axisBand']\n : scaleType === 'point'\n ? ['axisDiscrete', 'axisPoint']\n : isQuantitative(scaleType)\n ? ['axisQuantitative']\n : scaleType === 'time' || scaleType === 'utc'\n ? ['axisTemporal']\n : [];\n\n const axisChannel = channel === 'x' ? 'axisX' : 'axisY';\n const axisOrient = isSignalRef(orient) ? 'axisOrient' : `axis${titleCase(orient)}`; // axisTop, axisBottom, ...\n\n const vlOnlyConfigTypes = [\n // technically Vega does have axisBand, but if we make another separation here,\n // it will further introduce complexity in the code\n ...typeBasedConfigTypes,\n ...typeBasedConfigTypes.map(c => axisChannel + c.substr(4))\n ];\n\n const vgConfigTypes = ['axis', axisOrient, axisChannel];\n\n return {\n vlOnlyAxisConfig: getAxisConfigFromConfigTypes(vlOnlyConfigTypes, config, channel, orient),\n vgAxisConfig: getAxisConfigFromConfigTypes(vgConfigTypes, config, channel, orient),\n axisConfigStyle: getAxisConfigStyle([...vgConfigTypes, ...vlOnlyConfigTypes], config)\n };\n}\n\nexport function getAxisConfigStyle(axisConfigTypes: string[], config: Config) {\n const toMerge = [{}];\n for (const configType of axisConfigTypes) {\n // TODO: add special casing to add conditional value based on orient signal\n let style = config[configType]?.style;\n if (style) {\n style = array(style);\n for (const s of style) {\n toMerge.push(config.style[s]);\n }\n }\n }\n return Object.assign.apply(null, toMerge);\n}\nexport function getAxisConfig(\n property: keyof AxisConfig,\n styleConfigIndex: StyleConfigIndex,\n style: string | string[],\n axisConfigs: Partial = {}\n): {configFrom?: string; configValue?: any} {\n const styleConfig = getStyleConfig(property, style, styleConfigIndex);\n\n if (styleConfig !== undefined) {\n return {\n configFrom: 'style',\n configValue: styleConfig\n };\n }\n\n for (const configFrom of ['vlOnlyAxisConfig', 'vgAxisConfig', 'axisConfigStyle']) {\n if (axisConfigs[configFrom]?.[property] !== undefined) {\n return {configFrom, configValue: axisConfigs[configFrom][property]};\n }\n }\n return {};\n}\n","import {Align, AxisOrient, Orient, SignalRef} from 'vega';\nimport {isArray, isObject} from 'vega-util';\nimport {AxisInternal} from '../../axis';\nimport {isBinned, isBinning} from '../../bin';\nimport {PositionScaleChannel, X} from '../../channel';\nimport {\n DatumDef,\n isDiscrete,\n isFieldDef,\n PositionDatumDef,\n PositionFieldDef,\n toFieldDefBase,\n TypedFieldDef,\n valueArray\n} from '../../channeldef';\nimport {Config, StyleConfigIndex} from '../../config';\nimport {Mark} from '../../mark';\nimport {hasDiscreteDomain} from '../../scale';\nimport {Sort} from '../../sort';\nimport {normalizeTimeUnit} from '../../timeunit';\nimport {NOMINAL, ORDINAL, Type} from '../../type';\nimport {contains, normalizeAngle} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {mergeTitle, mergeTitleFieldDefs} from '../common';\nimport {guideFormat, guideFormatType} from '../format';\nimport {UnitModel} from '../unit';\nimport {ScaleType} from './../../scale';\nimport {AxisComponentProps} from './component';\nimport {AxisConfigs, getAxisConfig} from './config';\n\nexport interface AxisRuleParams {\n fieldOrDatumDef: PositionFieldDef | PositionDatumDef;\n axis: AxisInternal;\n channel: PositionScaleChannel;\n model: UnitModel;\n\n mark: Mark;\n scaleType: ScaleType;\n orient: Orient | SignalRef;\n labelAngle: number | SignalRef;\n config: Config;\n}\n\nexport const axisRules: {\n [k in keyof AxisComponentProps]?: (params: AxisRuleParams) => AxisComponentProps[k];\n} = {\n scale: ({model, channel}) => model.scaleName(channel),\n\n format: ({fieldOrDatumDef, config, axis}) => {\n const {format, formatType} = axis;\n return guideFormat(fieldOrDatumDef, fieldOrDatumDef.type, format, formatType, config, true);\n },\n\n formatType: ({axis, fieldOrDatumDef, scaleType}) => {\n const {formatType} = axis;\n return guideFormatType(formatType, fieldOrDatumDef, scaleType);\n },\n\n grid: ({fieldOrDatumDef, axis, scaleType}) => axis.grid ?? defaultGrid(scaleType, fieldOrDatumDef),\n\n gridScale: ({model, channel}) => gridScale(model, channel),\n\n labelAlign: ({axis, labelAngle, orient, channel}) =>\n axis.labelAlign || defaultLabelAlign(labelAngle, orient, channel),\n\n labelAngle: ({labelAngle}) => labelAngle, // we already calculate this in parse\n\n labelBaseline: ({axis, labelAngle, orient, channel}) =>\n axis.labelBaseline || defaultLabelBaseline(labelAngle, orient, channel),\n\n labelFlush: ({axis, fieldOrDatumDef, channel}) => axis.labelFlush ?? defaultLabelFlush(fieldOrDatumDef.type, channel),\n\n labelOverlap: ({axis, fieldOrDatumDef, scaleType}) =>\n axis.labelOverlap ??\n defaultLabelOverlap(\n fieldOrDatumDef.type,\n scaleType,\n isFieldDef(fieldOrDatumDef) && !!fieldOrDatumDef.timeUnit,\n isFieldDef(fieldOrDatumDef) ? fieldOrDatumDef.sort : undefined\n ),\n\n // we already calculate orient in parse\n orient: ({orient}) => orient as AxisOrient, // Need to cast until Vega supports signal\n\n tickCount: ({channel, model, axis, fieldOrDatumDef, scaleType}) => {\n const sizeType = channel === 'x' ? 'width' : channel === 'y' ? 'height' : undefined;\n const size = sizeType ? model.getSizeSignalRef(sizeType) : undefined;\n return axis.tickCount ?? defaultTickCount({fieldOrDatumDef, scaleType, size, values: axis.values});\n },\n\n title: ({axis, model, channel}) => {\n if (axis.title !== undefined) {\n return axis.title;\n }\n const fieldDefTitle = getFieldDefTitle(model, channel);\n if (fieldDefTitle !== undefined) {\n return fieldDefTitle;\n }\n const fieldDef = model.typedFieldDef(channel);\n const channel2 = channel === 'x' ? 'x2' : 'y2';\n const fieldDef2 = model.fieldDef(channel2);\n\n // If title not specified, store base parts of fieldDef (and fieldDef2 if exists)\n return mergeTitleFieldDefs(\n fieldDef ? [toFieldDefBase(fieldDef)] : [],\n isFieldDef(fieldDef2) ? [toFieldDefBase(fieldDef2)] : []\n );\n },\n\n values: ({axis, fieldOrDatumDef}) => values(axis, fieldOrDatumDef),\n\n zindex: ({axis, fieldOrDatumDef, mark}) => axis.zindex ?? defaultZindex(mark, fieldOrDatumDef)\n};\n\n// TODO: we need to refactor this method after we take care of config refactoring\n/**\n * Default rules for whether to show a grid should be shown for a channel.\n * If `grid` is unspecified, the default value is `true` for ordinal scales that are not binned\n */\n\nexport function defaultGrid(scaleType: ScaleType, fieldDef: TypedFieldDef | DatumDef) {\n return !hasDiscreteDomain(scaleType) && isFieldDef(fieldDef) && !isBinning(fieldDef?.bin) && !isBinned(fieldDef?.bin);\n}\n\nexport function gridScale(model: UnitModel, channel: PositionScaleChannel) {\n const gridChannel: PositionScaleChannel = channel === 'x' ? 'y' : 'x';\n if (model.getScaleComponent(gridChannel)) {\n return model.scaleName(gridChannel);\n }\n return undefined;\n}\n\nexport function getLabelAngle(\n fieldOrDatumDef: PositionFieldDef | PositionDatumDef,\n axis: AxisInternal,\n channel: PositionScaleChannel,\n styleConfig: StyleConfigIndex,\n axisConfigs?: AxisConfigs\n) {\n const labelAngle = axis?.labelAngle;\n // try axis value\n if (labelAngle !== undefined) {\n return isSignalRef(labelAngle) ? labelAngle : normalizeAngle(labelAngle);\n } else {\n // try axis config value\n const {configValue: angle} = getAxisConfig('labelAngle', styleConfig, axis?.style, axisConfigs);\n if (angle !== undefined) {\n return normalizeAngle(angle);\n } else {\n // get default value\n if (\n channel === X &&\n contains([NOMINAL, ORDINAL], fieldOrDatumDef.type) &&\n !(isFieldDef(fieldOrDatumDef) && fieldOrDatumDef.timeUnit)\n ) {\n return 270;\n }\n // no default\n return undefined;\n }\n }\n}\n\nexport function normalizeAngleExpr(angle: SignalRef) {\n return `(((${angle.signal} % 360) + 360) % 360)`;\n}\n\nexport function defaultLabelBaseline(\n angle: number | SignalRef,\n orient: AxisOrient | SignalRef,\n channel: 'x' | 'y',\n alwaysIncludeMiddle?: boolean\n) {\n if (angle !== undefined) {\n if (channel === 'x') {\n if (isSignalRef(angle)) {\n const a = normalizeAngleExpr(angle);\n const orientIsTop = isSignalRef(orient) ? `(${orient.signal} === \"top\")` : orient === 'top';\n return {\n signal:\n `(45 < ${a} && ${a} < 135) || (225 < ${a} && ${a} < 315) ? \"middle\" :` +\n `(${a} <= 45 || 315 <= ${a}) === ${orientIsTop} ? \"bottom\" : \"top\"`\n };\n }\n\n if ((45 < angle && angle < 135) || (225 < angle && angle < 315)) {\n return 'middle';\n }\n\n if (isSignalRef(orient)) {\n const op = angle <= 45 || 315 <= angle ? '===' : '!==';\n return {signal: `${orient.signal} ${op} \"top\" ? \"bottom\" : \"top\"`};\n }\n\n return (angle <= 45 || 315 <= angle) === (orient === 'top') ? 'bottom' : 'top';\n } else {\n if (isSignalRef(angle)) {\n const a = normalizeAngleExpr(angle);\n const orientIsLeft = isSignalRef(orient) ? `(${orient.signal} === \"left\")` : orient === 'left';\n const middle = alwaysIncludeMiddle ? '\"middle\"' : 'null';\n return {\n signal: `${a} <= 45 || 315 <= ${a} || (135 <= ${a} && ${a} <= 225) ? ${middle} : (45 <= ${a} && ${a} <= 135) === ${orientIsLeft} ? \"top\" : \"bottom\"`\n };\n }\n\n if (angle <= 45 || 315 <= angle || (135 <= angle && angle <= 225)) {\n return alwaysIncludeMiddle ? 'middle' : null;\n }\n\n if (isSignalRef(orient)) {\n const op = 45 <= angle && angle <= 135 ? '===' : '!==';\n return {signal: `${orient.signal} ${op} \"left\" ? \"top\" : \"bottom\"`};\n }\n\n return (45 <= angle && angle <= 135) === (orient === 'left') ? 'top' : 'bottom';\n }\n }\n return undefined;\n}\n\nexport function defaultLabelAlign(\n angle: number | SignalRef,\n orient: AxisOrient | SignalRef,\n channel: 'x' | 'y'\n): Align | SignalRef {\n if (angle === undefined) {\n return undefined;\n }\n\n const isX = channel === 'x';\n const startAngle = isX ? 0 : 90;\n const mainOrient = isX ? 'bottom' : 'left';\n\n if (isSignalRef(angle)) {\n const a = normalizeAngleExpr(angle);\n const orientIsMain = isSignalRef(orient) ? `(${orient.signal} === \"${mainOrient}\")` : orient === mainOrient;\n return {\n signal:\n `(${startAngle ? `(${a} + 90)` : a} % 180 === 0) ? ${isX ? null : '\"center\"'} :` +\n `(${startAngle} < ${a} && ${a} < ${180 + startAngle}) === ${orientIsMain} ? \"left\" : \"right\"`\n };\n }\n\n if ((angle + startAngle) % 180 === 0) {\n // For bottom, use default label align so label flush still works\n return isX ? null : 'center';\n }\n\n if (isSignalRef(orient)) {\n const op = startAngle < angle && angle < 180 + startAngle ? '===' : '!==';\n const orientIsMain = `${orient.signal} ${op} \"${mainOrient}\"`;\n return {\n signal: `${orientIsMain} ? \"left\" : \"right\"`\n };\n }\n\n if ((startAngle < angle && angle < 180 + startAngle) === (orient === mainOrient)) {\n return 'left';\n }\n\n return 'right';\n}\n\nexport function defaultLabelFlush(type: Type, channel: PositionScaleChannel) {\n if (channel === 'x' && contains(['quantitative', 'temporal'], type)) {\n return true;\n }\n return undefined;\n}\n\nexport function defaultLabelOverlap(type: Type, scaleType: ScaleType, hasTimeUnit: boolean, sort?: Sort) {\n // do not prevent overlap for nominal data because there is no way to infer what the missing labels are\n if ((hasTimeUnit && !isObject(sort)) || (type !== 'nominal' && type !== 'ordinal')) {\n if (scaleType === 'log' || scaleType === 'symlog') {\n return 'greedy';\n }\n return true;\n }\n return undefined;\n}\n\nexport function defaultOrient(channel: PositionScaleChannel) {\n return channel === 'x' ? 'bottom' : 'left';\n}\n\nexport function defaultTickCount({\n fieldOrDatumDef,\n scaleType,\n size,\n values: vals\n}: {\n fieldOrDatumDef: TypedFieldDef | DatumDef;\n scaleType: ScaleType;\n size?: SignalRef;\n values?: AxisInternal['values'];\n}) {\n if (!vals && !hasDiscreteDomain(scaleType) && scaleType !== 'log') {\n if (isFieldDef(fieldOrDatumDef)) {\n if (isBinning(fieldOrDatumDef.bin)) {\n // for binned data, we don't want more ticks than maxbins\n return {signal: `ceil(${size.signal}/10)`};\n }\n\n if (\n fieldOrDatumDef.timeUnit &&\n contains(['month', 'hours', 'day', 'quarter'], normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit)\n ) {\n return undefined;\n }\n }\n\n return {signal: `ceil(${size.signal}/40)`};\n }\n\n return undefined;\n}\n\nexport function getFieldDefTitle(model: UnitModel, channel: 'x' | 'y') {\n const channel2 = channel === 'x' ? 'x2' : 'y2';\n const fieldDef = model.fieldDef(channel);\n const fieldDef2 = model.fieldDef(channel2);\n\n const title1 = fieldDef ? fieldDef.title : undefined;\n const title2 = fieldDef2 ? fieldDef2.title : undefined;\n\n if (title1 && title2) {\n return mergeTitle(title1, title2);\n } else if (title1) {\n return title1;\n } else if (title2) {\n return title2;\n } else if (title1 !== undefined) {\n // falsy value to disable config\n return title1;\n } else if (title2 !== undefined) {\n // falsy value to disable config\n return title2;\n }\n\n return undefined;\n}\n\nexport function values(axis: AxisInternal, fieldOrDatumDef: TypedFieldDef | DatumDef) {\n const vals = axis.values;\n\n if (isArray(vals)) {\n return valueArray(fieldOrDatumDef, vals);\n } else if (isSignalRef(vals)) {\n return vals;\n }\n\n return undefined;\n}\n\nexport function defaultZindex(mark: Mark, fieldDef: TypedFieldDef | DatumDef) {\n if (mark === 'rect' && isDiscrete(fieldDef)) {\n return 1;\n }\n return 0;\n}\n","import {FormulaTransform as VgFormulaTransform} from 'vega';\nimport {SingleDefChannel} from '../../channel';\nimport {FieldRefOption, isScaleFieldDef, TypedFieldDef, vgField} from '../../channeldef';\nimport {DateTime} from '../../datetime';\nimport {fieldFilterExpression} from '../../predicate';\nimport {isSortArray} from '../../sort';\nimport {CalculateTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {ModelWithField} from '../model';\nimport {DataFlowNode} from './dataflow';\nimport {getDependentFields} from './expressions';\n\nexport class CalculateNode extends DataFlowNode {\n private _dependentFields: Set;\n\n public clone() {\n return new CalculateNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private readonly transform: CalculateTransform) {\n super(parent);\n\n this._dependentFields = getDependentFields(this.transform.calculate);\n }\n\n public static parseAllForSortIndex(parent: DataFlowNode, model: ModelWithField) {\n // get all the encoding with sort fields from model\n model.forEachFieldDef((fieldDef: TypedFieldDef, channel: SingleDefChannel) => {\n if (!isScaleFieldDef(fieldDef)) {\n return;\n }\n if (isSortArray(fieldDef.sort)) {\n const {field, timeUnit} = fieldDef;\n const sort: (number | string | boolean | DateTime)[] = fieldDef.sort;\n // generate `datum[\"a\"] === val0 ? 0 : datum[\"a\"] === val1 ? 1 : ... : n` via FieldEqualPredicate\n const calculate =\n sort\n .map((sortValue, i) => {\n return `${fieldFilterExpression({field, timeUnit, equal: sortValue})} ? ${i} : `;\n })\n .join('') + sort.length;\n\n parent = new CalculateNode(parent, {\n calculate,\n as: sortArrayIndexField(fieldDef, channel, {forAs: true})\n });\n }\n });\n return parent;\n }\n\n public producedFields() {\n return new Set([this.transform.as]);\n }\n\n public dependentFields() {\n return this._dependentFields;\n }\n\n public assemble(): VgFormulaTransform {\n return {\n type: 'formula',\n expr: this.transform.calculate,\n as: this.transform.as\n };\n }\n\n public hash() {\n return `Calculate ${hash(this.transform)}`;\n }\n}\n\nexport function sortArrayIndexField(fieldDef: TypedFieldDef, channel: SingleDefChannel, opt?: FieldRefOption) {\n return vgField(fieldDef, {prefix: channel, suffix: 'sort_index', ...(opt ?? {})});\n}\n","import {Orient, SignalRef} from 'vega';\nimport {FacetChannel} from '../../channel';\nimport {Config} from '../../config';\nimport {Header} from '../../header';\nimport {contains, getFirstDefined} from '../../util';\nimport {HeaderChannel} from './component';\n\n/**\n * Get header channel, which can be different from facet channel when orient is specified or when the facet channel is facet.\n */\nexport function getHeaderChannel(channel: FacetChannel, orient: Orient): HeaderChannel {\n if (contains(['top', 'bottom'], orient)) {\n return 'column';\n } else if (contains(['left', 'right'], orient)) {\n return 'row';\n }\n return channel === 'row' ? 'row' : 'column';\n}\n\nexport function getHeaderProperty

>(\n prop: P,\n header: Header,\n config: Config,\n channel: FacetChannel\n): Header[P] {\n const headerSpecificConfig =\n channel === 'row' ? config.headerRow : channel === 'column' ? config.headerColumn : config.headerFacet;\n\n return getFirstDefined((header || {})[prop], headerSpecificConfig[prop], config.header[prop]);\n}\n\nexport function getHeaderProperties(\n properties: (keyof Header)[],\n header: Header,\n config: Config,\n channel: FacetChannel\n): Header {\n const props = {};\n for (const prop of properties) {\n const value = getHeaderProperty(prop, header || {}, config, channel);\n if (value !== undefined) {\n props[prop] = value;\n }\n }\n return props;\n}\n","/**\n * Utility for generating row / column headers\n */\nimport {Axis as VgAxis, SignalRef, Text} from 'vega';\nimport {FacetFieldDef} from '../../spec/facet';\n\nexport type HeaderChannel = 'row' | 'column';\nexport const HEADER_CHANNELS: HeaderChannel[] = ['row', 'column'];\n\nexport type HeaderType = 'header' | 'footer';\nexport const HEADER_TYPES: HeaderType[] = ['header', 'footer'];\n\nexport interface LayoutHeaderComponentIndex {\n row?: LayoutHeaderComponent;\n column?: LayoutHeaderComponent;\n facet?: LayoutHeaderComponent;\n}\n\n/**\n * A component that represents all header, footers and title of a Vega group with layout directive.\n */\nexport interface LayoutHeaderComponent {\n title?: Text | SignalRef;\n\n // TODO: concat can have multiple header / footer.\n // Need to redesign this part a bit.\n\n facetFieldDef?: FacetFieldDef;\n\n /**\n * An array of header components for headers.\n * For facet, there should be only one header component, which is data-driven.\n * For concat, there can be multiple header components that explicitly list different axes.\n */\n header?: HeaderComponent[];\n\n /**\n * An array of header components for footers.\n * For facet, there should be only one header component, which is data-driven.\n * For concat, there can be multiple header components that explicitly list different axes.\n */\n footer?: HeaderComponent[];\n}\n\n/**\n * A component that represents one group of row/column-header/footer.\n */\nexport interface HeaderComponent {\n labels: boolean;\n\n sizeSignal: {signal: string};\n\n axes: VgAxis[];\n}\n","/**\n * Utility for generating row / column headers\n */\n\nimport {SignalRef, TitleAnchor, TitleConfig} from 'vega';\nimport {isArray} from 'vega-util';\nimport {FacetChannel, FACET_CHANNELS} from '../../channel';\nimport {vgField} from '../../channeldef';\nimport {Config} from '../../config';\nimport {\n CoreHeader,\n HEADER_LABEL_PROPERTIES,\n HEADER_LABEL_PROPERTIES_MAP,\n HEADER_TITLE_PROPERTIES,\n HEADER_TITLE_PROPERTIES_MAP\n} from '../../header';\nimport {isSortField} from '../../sort';\nimport {FacetFieldDef, isFacetMapping} from '../../spec/facet';\nimport {contains, isEmpty, normalizeAngle, replaceAll} from '../../util';\nimport {RowCol, VgComparator, VgMarkGroup, VgTitle} from '../../vega.schema';\nimport {defaultLabelAlign, defaultLabelBaseline} from '../axis/properties';\nimport {sortArrayIndexField} from '../data/calculate';\nimport {formatSignalRef} from '../format';\nimport {isFacetModel, Model} from '../model';\nimport {getHeaderChannel, getHeaderProperties, getHeaderProperty} from './common';\nimport {\n HeaderChannel,\n HeaderComponent,\n HeaderType,\n HEADER_TYPES,\n LayoutHeaderComponent,\n LayoutHeaderComponentIndex\n} from './component';\n\n// TODO: rename to assembleHeaderTitleGroup\nexport function assembleTitleGroup(model: Model, channel: FacetChannel) {\n const title = model.component.layoutHeaders[channel].title;\n const config = model.config ? model.config : undefined;\n const facetFieldDef = model.component.layoutHeaders[channel].facetFieldDef\n ? model.component.layoutHeaders[channel].facetFieldDef\n : undefined;\n\n const {titleAnchor, titleAngle: ta, titleOrient} = getHeaderProperties(\n ['titleAnchor', 'titleAngle', 'titleOrient'],\n facetFieldDef.header,\n config,\n channel\n );\n const headerChannel = getHeaderChannel(channel, titleOrient);\n\n const titleAngle = normalizeAngle(ta);\n\n return {\n name: `${channel}-title`,\n type: 'group',\n role: `${headerChannel}-title`,\n title: {\n text: title,\n ...(channel === 'row' ? {orient: 'left'} : {}),\n style: 'guide-title',\n ...defaultHeaderGuideBaseline(titleAngle, headerChannel),\n ...defaultHeaderGuideAlign(headerChannel, titleAngle, titleAnchor),\n ...assembleHeaderProperties(config, facetFieldDef, channel, HEADER_TITLE_PROPERTIES, HEADER_TITLE_PROPERTIES_MAP)\n }\n };\n}\n\nexport function defaultHeaderGuideAlign(headerChannel: HeaderChannel, angle: number, anchor: TitleAnchor = 'middle') {\n switch (anchor) {\n case 'start':\n return {align: 'left'};\n case 'end':\n return {align: 'right'};\n }\n\n const align = defaultLabelAlign(angle, headerChannel === 'row' ? 'left' : 'top', headerChannel === 'row' ? 'y' : 'x');\n return align ? {align} : {};\n}\n\nexport function defaultHeaderGuideBaseline(angle: number, channel: FacetChannel) {\n const baseline = defaultLabelBaseline(angle, channel === 'row' ? 'left' : 'top', channel === 'row' ? 'y' : 'x', true);\n return baseline ? {baseline} : {};\n}\n\nexport function assembleHeaderGroups(model: Model, channel: HeaderChannel): VgMarkGroup[] {\n const layoutHeader = model.component.layoutHeaders[channel];\n const groups = [];\n for (const headerType of HEADER_TYPES) {\n if (layoutHeader[headerType]) {\n for (const headerComponent of layoutHeader[headerType]) {\n const group = assembleHeaderGroup(model, channel, headerType, layoutHeader, headerComponent);\n if (group != null) {\n groups.push(group);\n }\n }\n }\n }\n return groups;\n}\n\nfunction getSort(facetFieldDef: FacetFieldDef, channel: HeaderChannel): VgComparator {\n const {sort} = facetFieldDef;\n if (isSortField(sort)) {\n return {\n field: vgField(sort, {expr: 'datum'}),\n order: sort.order ?? 'ascending'\n };\n } else if (isArray(sort)) {\n return {\n field: sortArrayIndexField(facetFieldDef, channel, {expr: 'datum'}),\n order: 'ascending'\n };\n } else {\n return {\n field: vgField(facetFieldDef, {expr: 'datum'}),\n order: sort ?? 'ascending'\n };\n }\n}\n\nexport function assembleLabelTitle(\n facetFieldDef: FacetFieldDef,\n channel: FacetChannel,\n config: Config\n) {\n const {format, formatType, labelAngle, labelAnchor, labelOrient, labelExpr} = getHeaderProperties(\n ['format', 'formatType', 'labelAngle', 'labelAnchor', 'labelOrient', 'labelExpr'],\n facetFieldDef.header,\n config,\n channel\n );\n\n const titleTextExpr = formatSignalRef({fieldOrDatumDef: facetFieldDef, format, formatType, expr: 'parent', config})\n .signal;\n const headerChannel = getHeaderChannel(channel, labelOrient);\n\n return {\n text: {\n signal: labelExpr\n ? replaceAll(\n replaceAll(labelExpr, 'datum.label', titleTextExpr),\n 'datum.value',\n vgField(facetFieldDef, {expr: 'parent'})\n )\n : titleTextExpr\n },\n ...(channel === 'row' ? {orient: 'left'} : {}),\n style: 'guide-label',\n frame: 'group',\n ...defaultHeaderGuideBaseline(labelAngle, headerChannel),\n ...defaultHeaderGuideAlign(headerChannel, labelAngle, labelAnchor),\n ...assembleHeaderProperties(config, facetFieldDef, channel, HEADER_LABEL_PROPERTIES, HEADER_LABEL_PROPERTIES_MAP)\n };\n}\n\nexport function assembleHeaderGroup(\n model: Model,\n channel: HeaderChannel,\n headerType: HeaderType,\n layoutHeader: LayoutHeaderComponent,\n headerComponent: HeaderComponent\n) {\n if (headerComponent) {\n let title = null;\n const {facetFieldDef} = layoutHeader;\n const config = model.config ? model.config : undefined;\n if (facetFieldDef && headerComponent.labels) {\n const {labelOrient} = getHeaderProperties(['labelOrient'], facetFieldDef.header, config, channel);\n\n // Include label title in the header if orient aligns with the channel\n if (\n (channel === 'row' && !contains(['top', 'bottom'], labelOrient)) ||\n (channel === 'column' && !contains(['left', 'right'], labelOrient))\n ) {\n title = assembleLabelTitle(facetFieldDef, channel, config);\n }\n }\n\n const isFacetWithoutRowCol = isFacetModel(model) && !isFacetMapping(model.facet);\n\n const axes = headerComponent.axes;\n\n const hasAxes = axes?.length > 0;\n if (title || hasAxes) {\n const sizeChannel = channel === 'row' ? 'height' : 'width';\n\n return {\n name: model.getName(`${channel}_${headerType}`),\n type: 'group',\n role: `${channel}-${headerType}`,\n\n ...(layoutHeader.facetFieldDef\n ? {\n from: {data: model.getName(`${channel}_domain`)},\n sort: getSort(facetFieldDef, channel)\n }\n : {}),\n ...(hasAxes && isFacetWithoutRowCol\n ? {\n from: {data: model.getName(`facet_domain_${channel}`)}\n }\n : {}),\n\n ...(title ? {title} : {}),\n ...(headerComponent.sizeSignal\n ? {\n encode: {\n update: {\n [sizeChannel]: headerComponent.sizeSignal\n }\n }\n }\n : {}),\n ...(hasAxes ? {axes} : {})\n };\n }\n }\n return null;\n}\n\nconst LAYOUT_TITLE_BAND = {\n column: {\n start: 0,\n end: 1\n },\n row: {\n start: 1,\n end: 0\n }\n};\n\nexport function getLayoutTitleBand(titleAnchor: TitleAnchor, headerChannel: HeaderChannel) {\n return LAYOUT_TITLE_BAND[headerChannel][titleAnchor];\n}\n\nexport function assembleLayoutTitleBand(\n headerComponentIndex: LayoutHeaderComponentIndex,\n config: Config\n): RowCol {\n const titleBand = {};\n\n for (const channel of FACET_CHANNELS) {\n const headerComponent = headerComponentIndex[channel];\n if (headerComponent?.facetFieldDef) {\n const {titleAnchor, titleOrient} = getHeaderProperties(\n ['titleAnchor', 'titleOrient'],\n headerComponent.facetFieldDef.header,\n config,\n channel\n );\n\n const headerChannel = getHeaderChannel(channel, titleOrient);\n const band = getLayoutTitleBand(titleAnchor, headerChannel);\n if (band !== undefined) {\n titleBand[headerChannel] = band;\n }\n }\n }\n\n return isEmpty(titleBand) ? undefined : titleBand;\n}\n\nexport function assembleHeaderProperties(\n config: Config,\n facetFieldDef: FacetFieldDef,\n channel: FacetChannel,\n properties: (keyof CoreHeader)[],\n propertiesMap: Partial, keyof TitleConfig>>\n): Partial {\n const props = {};\n for (const prop of properties) {\n if (!propertiesMap[prop]) {\n continue;\n }\n\n const value = getHeaderProperty(prop, facetFieldDef?.header, config, channel);\n if (value !== undefined) {\n props[propertiesMap[prop]] = value;\n }\n }\n return props;\n}\n","import {InitSignal, NewSignal} from 'vega';\nimport {getViewConfigContinuousSize} from '../../config';\nimport {hasDiscreteDomain} from '../../scale';\nimport {getFirstDefined} from '../../util';\nimport {isVgRangeStep, VgRangeStep} from '../../vega.schema';\nimport {signalOrStringValue} from '../common';\nimport {isFacetModel, Model} from '../model';\nimport {ScaleComponent} from '../scale/component';\nimport {LayoutSizeType} from './component';\n\nexport function assembleLayoutSignals(model: Model): NewSignal[] {\n return [\n ...sizeSignals(model, 'width'),\n ...sizeSignals(model, 'height'),\n ...sizeSignals(model, 'childWidth'),\n ...sizeSignals(model, 'childHeight')\n ];\n}\n\nexport function sizeSignals(model: Model, sizeType: LayoutSizeType): (NewSignal | InitSignal)[] {\n const channel = sizeType === 'width' ? 'x' : 'y';\n const size = model.component.layoutSize.get(sizeType);\n if (!size || size === 'merged') {\n return [];\n }\n\n // Read size signal name from name map, just in case it is the top-level size signal that got renamed.\n const name = model.getSizeSignalRef(sizeType).signal;\n\n if (size === 'step') {\n const scaleComponent = model.getScaleComponent(channel);\n\n if (scaleComponent) {\n const type = scaleComponent.get('type');\n const range = scaleComponent.get('range');\n\n if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n const scaleName = model.scaleName(channel);\n\n if (isFacetModel(model.parent)) {\n // If parent is facet and this is an independent scale, return only signal signal\n // as the width/height will be calculated using the cardinality from\n // facet's aggregate rather than reading from scale domain\n const parentResolve = model.parent.component.resolve;\n if (parentResolve.scale[channel] === 'independent') {\n return [stepSignal(scaleName, range)];\n }\n }\n\n return [\n stepSignal(scaleName, range),\n {\n name,\n update: sizeExpr(scaleName, scaleComponent, `domain('${scaleName}').length`)\n }\n ];\n }\n }\n /* istanbul ignore next: Condition should not happen -- only for warning in development. */\n throw new Error('layout size is step although width/height is not step.');\n } else if (size == 'container') {\n const isWidth = name.endsWith('width');\n const expr = isWidth ? 'containerSize()[0]' : 'containerSize()[1]';\n const defaultValue = getViewConfigContinuousSize(model.config.view, isWidth ? 'width' : 'height');\n const safeExpr = `isFinite(${expr}) ? ${expr} : ${defaultValue}`;\n return [{name, init: safeExpr, on: [{update: safeExpr, events: 'window:resize'}]}];\n } else {\n return [\n {\n name,\n value: size\n }\n ];\n }\n}\n\nfunction stepSignal(scaleName: string, range: VgRangeStep): NewSignal {\n return {\n name: `${scaleName}_step`,\n value: range.step\n };\n}\n\nexport function sizeExpr(scaleName: string, scaleComponent: ScaleComponent, cardinality: string) {\n const type = scaleComponent.get('type');\n const padding = scaleComponent.get('padding');\n const paddingOuter = getFirstDefined(scaleComponent.get('paddingOuter'), padding);\n\n let paddingInner = scaleComponent.get('paddingInner');\n paddingInner =\n type === 'band'\n ? // only band has real paddingInner\n paddingInner !== undefined\n ? paddingInner\n : padding\n : // For point, as calculated in https://github.com/vega/vega-scale/blob/master/src/band.js#L128,\n // it's equivalent to have paddingInner = 1 since there is only n-1 steps between n points.\n 1;\n return `bandspace(${cardinality}, ${signalOrStringValue(paddingInner)}, ${signalOrStringValue(\n paddingOuter\n )}) * ${scaleName}_step`;\n}\n","import {Split} from '../split';\n\nexport type LayoutSize = number | 'container' | 'step' | 'merged';\n\nexport interface LayoutSizeIndex {\n width?: LayoutSize;\n\n childWidth?: LayoutSize;\n\n height?: LayoutSize;\n\n childHeight?: LayoutSize;\n}\n\nexport type LayoutSizeType = keyof LayoutSizeIndex;\n\nexport type LayoutSizeComponent = Split;\n\nexport function getSizeTypeFromLayoutSizeType(layoutSizeType: LayoutSizeType): 'width' | 'height' {\n return layoutSizeType === 'childWidth' ? 'width' : layoutSizeType === 'childHeight' ? 'height' : layoutSizeType;\n}\n","import {GuideEncodingEntry} from '../guide';\nimport {keys} from '../util';\nimport {VgEncodeChannel} from '../vega.schema';\nimport {signalOrValueRef} from './common';\nimport {wrapCondition} from './mark/encode';\nimport {UnitModel} from './unit';\n\nexport function guideEncodeEntry(encoding: GuideEncodingEntry, model: UnitModel) {\n return keys(encoding).reduce((encode, channel: VgEncodeChannel) => {\n const valueDef = encoding[channel];\n return {\n ...encode,\n ...wrapCondition(model, valueDef, channel, def => signalOrValueRef(def.value))\n };\n }, {});\n}\n","import {isXorY, ScaleChannel} from '../channel';\nimport * as log from '../log';\nimport {Resolve, ResolveMode} from '../resolve';\nimport {isConcatModel, isFacetModel, isLayerModel, Model} from './model';\n\nexport function defaultScaleResolve(channel: ScaleChannel, model: Model): ResolveMode {\n if (isLayerModel(model) || isFacetModel(model)) {\n return 'shared';\n } else if (isConcatModel(model)) {\n return isXorY(channel) ? 'independent' : 'shared';\n }\n /* istanbul ignore next: should never reach here. */\n throw new Error('invalid model type for resolve');\n}\n\nexport function parseGuideResolve(resolve: Resolve, channel: ScaleChannel): ResolveMode {\n const channelScaleResolve = resolve.scale[channel];\n const guide = isXorY(channel) ? 'axis' : 'legend';\n\n if (channelScaleResolve === 'independent') {\n if (resolve[guide][channel] === 'shared') {\n log.warn(log.message.independentScaleMeansIndependentGuide(channel));\n }\n return 'independent';\n }\n\n return resolve[guide][channel] || 'shared';\n}\n","import {Legend as VgLegend} from 'vega';\nimport {NonPositionScaleChannel} from '../../channel';\nimport {COMMON_LEGEND_PROPERTY_INDEX, LegendInternal} from '../../legend';\nimport {Flag, keys} from '../../util';\nimport {Split} from '../split';\n\nexport type LegendComponentProps = VgLegend & {\n labelExpr?: string;\n selections?: string[];\n disable?: boolean;\n};\n\nconst LEGEND_COMPONENT_PROPERTY_INDEX: Flag = {\n ...COMMON_LEGEND_PROPERTY_INDEX,\n disable: 1,\n labelExpr: 1,\n selections: 1,\n // channel scales\n opacity: 1,\n shape: 1,\n stroke: 1,\n fill: 1,\n size: 1,\n strokeWidth: 1,\n strokeDash: 1,\n // encode\n encode: 1\n};\n\nexport const LEGEND_COMPONENT_PROPERTIES = keys(LEGEND_COMPONENT_PROPERTY_INDEX);\n\nexport class LegendComponent extends Split {}\n\nexport type LegendComponentIndex = Partial>;\n\nexport type LegendInternalIndex = Partial>;\n","import {ColorValueRef, EncodeEntry, Gradient, LegendEncode, LegendType, SignalRef, SymbolEncodeEntry} from 'vega';\nimport {array, isArray, stringValue} from 'vega-util';\nimport {COLOR, NonPositionScaleChannel, OPACITY} from '../../channel';\nimport {\n Conditional,\n DatumDef,\n hasConditionalValueDef,\n isFieldDef,\n isValueDef,\n TypedFieldDef,\n Value,\n ValueDef\n} from '../../channeldef';\nimport {Encoding} from '../../encoding';\nimport {FILL_STROKE_CONFIG} from '../../mark';\nimport {getFirstDefined, isEmpty, varName} from '../../util';\nimport {applyMarkConfig, signalOrValueRef} from '../common';\nimport {formatCustomType, isCustomFormatType} from '../format';\nimport * as mixins from '../mark/encode';\nimport {STORE} from '../selection';\nimport {UnitModel} from '../unit';\nimport {LegendComponent} from './component';\n\nexport interface LegendEncodeParams {\n fieldOrDatumDef: TypedFieldDef | DatumDef;\n model: UnitModel;\n channel: NonPositionScaleChannel;\n legendCmpt: LegendComponent;\n legendType: LegendType;\n}\n\nexport const legendEncodeRules: {\n [part in keyof LegendEncode]?: (spec: EncodeEntry, params: LegendEncodeParams) => EncodeEntry;\n} = {\n symbols,\n gradient,\n labels,\n entries\n};\n\nexport function symbols(\n symbolsSpec: any,\n {fieldOrDatumDef, model, channel, legendCmpt, legendType}: LegendEncodeParams\n): SymbolEncodeEntry {\n if (legendType !== 'symbol') {\n return undefined;\n }\n\n const {markDef, encoding, config, mark} = model;\n const filled = markDef.filled && mark !== 'trail';\n\n let out = {\n ...applyMarkConfig({}, model, FILL_STROKE_CONFIG),\n ...mixins.color(model, {filled})\n } as SymbolEncodeEntry; // FIXME: remove this when VgEncodeEntry is compatible with SymbolEncodeEntry\n\n const symbolOpacity = legendCmpt.get('symbolOpacity') ?? config.legend.symbolOpacity;\n const symbolFillColor = legendCmpt.get('symbolFillColor') ?? config.legend.symbolFillColor;\n const symbolStrokeColor = legendCmpt.get('symbolStrokeColor') ?? config.legend.symbolStrokeColor;\n\n const opacity = symbolOpacity === undefined ? getMaxValue(encoding.opacity) ?? markDef.opacity : undefined;\n\n if (out.fill) {\n // for fill legend, we don't want any fill in symbol\n if (channel === 'fill' || (filled && channel === COLOR)) {\n delete out.fill;\n } else {\n if (out.fill['field']) {\n // For others, set fill to some opaque value (or nothing if a color is already set)\n if (symbolFillColor) {\n delete out.fill;\n } else {\n out.fill = signalOrValueRef(config.legend.symbolBaseFillColor ?? 'black');\n out.fillOpacity = signalOrValueRef(opacity ?? 1);\n }\n } else if (isArray(out.fill)) {\n const fill =\n getFirstConditionValue(encoding.fill ?? encoding.color) ?? markDef.fill ?? (filled && markDef.color);\n if (fill) {\n out.fill = signalOrValueRef(fill) as ColorValueRef;\n }\n }\n }\n }\n\n if (out.stroke) {\n if (channel === 'stroke' || (!filled && channel === COLOR)) {\n delete out.stroke;\n } else {\n if (out.stroke['field'] || symbolStrokeColor) {\n // For others, remove stroke field\n delete out.stroke;\n } else if (isArray(out.stroke)) {\n const stroke = getFirstDefined(\n getFirstConditionValue(encoding.stroke || encoding.color),\n markDef.stroke,\n filled ? markDef.color : undefined\n );\n if (stroke) {\n out.stroke = {value: stroke} as ColorValueRef;\n }\n }\n }\n }\n\n if (channel !== OPACITY) {\n const condition = isFieldDef(fieldOrDatumDef) && selectedCondition(model, legendCmpt, fieldOrDatumDef);\n\n if (condition) {\n out.opacity = [\n {test: condition, ...signalOrValueRef(opacity ?? 1)},\n signalOrValueRef(config.legend.unselectedOpacity)\n ];\n } else if (opacity) {\n out.opacity = signalOrValueRef(opacity);\n }\n }\n\n out = {...out, ...symbolsSpec};\n\n return isEmpty(out) ? undefined : out;\n}\n\nexport function gradient(gradientSpec: any, {model, legendType, legendCmpt}: LegendEncodeParams) {\n if (legendType !== 'gradient') {\n return undefined;\n }\n\n const {config, markDef, encoding} = model;\n\n let out: SymbolEncodeEntry = {};\n\n const gradientOpacity = legendCmpt.get('gradientOpacity') ?? config.legend.gradientOpacity;\n const opacity = gradientOpacity === undefined ? getMaxValue(encoding.opacity) || markDef.opacity : undefined;\n if (opacity) {\n // only apply opacity if it is neither zero or undefined\n out.opacity = signalOrValueRef(opacity);\n }\n\n out = {...out, ...gradientSpec};\n return isEmpty(out) ? undefined : out;\n}\n\nexport function labels(specifiedlabelsSpec: any, {fieldOrDatumDef, model, channel, legendCmpt}: LegendEncodeParams) {\n const legend = model.legend(channel) || {};\n const config = model.config;\n\n const condition = isFieldDef(fieldOrDatumDef) ? selectedCondition(model, legendCmpt, fieldOrDatumDef) : undefined;\n const opacity = condition ? [{test: condition, value: 1}, {value: config.legend.unselectedOpacity}] : undefined;\n\n const {format, formatType} = legend;\n\n const text = isCustomFormatType(formatType)\n ? formatCustomType({\n fieldOrDatumDef,\n field: 'datum.value',\n format,\n formatType,\n config\n })\n : undefined;\n\n const labelsSpec = {\n ...(opacity ? {opacity} : {}),\n ...(text ? {text} : {}),\n ...specifiedlabelsSpec\n };\n\n return isEmpty(labelsSpec) ? undefined : labelsSpec;\n}\n\nexport function entries(entriesSpec: any, {legendCmpt}: LegendEncodeParams) {\n const selections = legendCmpt.get('selections');\n return selections?.length ? {...entriesSpec, fill: {value: 'transparent'}} : entriesSpec;\n}\n\nfunction getMaxValue(channelDef: Encoding['opacity']) {\n return getConditionValue(channelDef, (v: number, conditionalDef) => Math.max(v, conditionalDef.value as any));\n}\n\nexport function getFirstConditionValue(\n channelDef: Encoding['fill' | 'stroke' | 'shape']\n): V {\n return getConditionValue(channelDef, (v: V, conditionalDef: Conditional>) => {\n return getFirstDefined(v, conditionalDef.value);\n });\n}\n\nfunction getConditionValue(\n channelDef: Encoding['fill' | 'stroke' | 'shape' | 'opacity'],\n reducer: (val: V, conditionalDef: Conditional>) => V\n): V {\n if (hasConditionalValueDef(channelDef)) {\n return array(channelDef.condition).reduce(reducer, channelDef.value as any);\n } else if (isValueDef(channelDef)) {\n return channelDef.value as any;\n }\n return undefined;\n}\n\nfunction selectedCondition(model: UnitModel, legendCmpt: LegendComponent, fieldDef: TypedFieldDef) {\n const selections = legendCmpt.get('selections');\n if (!selections?.length) return undefined;\n\n const field = stringValue(fieldDef.field);\n return selections\n .map(name => {\n const store = stringValue(varName(name) + STORE);\n return `(!length(data(${store})) || (${name}[${field}] && indexof(${name}[${field}], datum.value) >= 0))`;\n })\n .join(' || ');\n}\n","import {LabelOverlap, LegendOrient, LegendType, Orientation, SignalRef, SymbolShape} from 'vega';\nimport {isArray} from 'vega-util';\nimport {isColorChannel} from '../../channel';\nimport {DatumDef, MarkPropFieldOrDatumDef, title as fieldDefTitle, TypedFieldDef, valueArray} from '../../channeldef';\nimport {Config} from '../../config';\nimport {Encoding} from '../../encoding';\nimport {Legend, LegendConfig, LegendInternal} from '../../legend';\nimport {Mark, MarkDef} from '../../mark';\nimport {isContinuousToContinuous, ScaleType} from '../../scale';\nimport {TimeUnit} from '../../timeunit';\nimport {contains, getFirstDefined} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {guideFormat, guideFormatType} from '../format';\nimport {Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {NonPositionScaleChannel} from './../../channel';\nimport {LegendComponentProps} from './component';\nimport {getFirstConditionValue} from './encode';\n\nexport interface LegendRuleParams {\n legend: LegendInternal;\n channel: NonPositionScaleChannel;\n model: UnitModel;\n markDef: MarkDef;\n encoding: Encoding;\n fieldOrDatumDef: MarkPropFieldOrDatumDef;\n legendConfig: LegendConfig;\n config: Config;\n scaleType: ScaleType;\n orient: LegendOrient;\n legendType: LegendType;\n direction: Orientation;\n}\n\nexport const legendRules: {\n [k in keyof LegendComponentProps]?: (params: LegendRuleParams) => LegendComponentProps[k];\n} = {\n direction: ({direction}) => direction,\n\n format: ({fieldOrDatumDef, legend, config}) => {\n const {format, formatType} = legend;\n return guideFormat(fieldOrDatumDef, fieldOrDatumDef.type, format, formatType, config, false);\n },\n\n formatType: ({legend, fieldOrDatumDef, scaleType}) => {\n const {formatType} = legend;\n return guideFormatType(formatType, fieldOrDatumDef, scaleType);\n },\n\n gradientLength: params => {\n const {legend, legendConfig} = params;\n return legend.gradientLength ?? legendConfig.gradientLength ?? defaultGradientLength(params);\n },\n\n labelOverlap: ({legend, legendConfig, scaleType}) =>\n legend.labelOverlap ?? legendConfig.labelOverlap ?? defaultLabelOverlap(scaleType),\n\n symbolType: ({legend, markDef, channel, encoding}) =>\n legend.symbolType ?? defaultSymbolType(markDef.type, channel, encoding.shape, markDef.shape),\n\n title: ({fieldOrDatumDef, config}) => fieldDefTitle(fieldOrDatumDef, config, {allowDisabling: true}),\n\n type: ({legendType, scaleType, channel}) => {\n if (isColorChannel(channel) && isContinuousToContinuous(scaleType)) {\n if (legendType === 'gradient') {\n return undefined;\n }\n } else if (legendType === 'symbol') {\n return undefined;\n }\n return legendType;\n }, // depended by other property, let's define upfront\n\n values: ({fieldOrDatumDef, legend}) => values(legend, fieldOrDatumDef)\n};\n\nexport function values(legend: LegendInternal, fieldOrDatumDef: TypedFieldDef | DatumDef) {\n const vals = legend.values;\n\n if (isArray(vals)) {\n return valueArray(fieldOrDatumDef, vals);\n } else if (isSignalRef(vals)) {\n return vals;\n }\n return undefined;\n}\n\nexport function defaultSymbolType(\n mark: Mark,\n channel: NonPositionScaleChannel,\n shapeChannelDef: Encoding['shape'],\n markShape: SymbolShape | SignalRef\n): SymbolShape | SignalRef {\n if (channel !== 'shape') {\n // use the value from the shape encoding or the mark config if they exist\n const shape = getFirstConditionValue(shapeChannelDef) ?? markShape;\n if (shape) {\n return shape;\n }\n }\n\n switch (mark) {\n case 'bar':\n case 'rect':\n case 'image':\n case 'square':\n return 'square';\n case 'line':\n case 'trail':\n case 'rule':\n return 'stroke';\n case 'arc':\n case 'point':\n case 'circle':\n case 'tick':\n case 'geoshape':\n case 'area':\n case 'text':\n return 'circle';\n }\n}\n\nexport function clipHeight(legendType: LegendType) {\n if (legendType === 'gradient') {\n return 20;\n }\n return undefined;\n}\n\nexport function getLegendType(params: {\n legend: LegendInternal;\n channel: NonPositionScaleChannel;\n timeUnit?: TimeUnit;\n scaleType: ScaleType;\n}): LegendType {\n const {legend} = params;\n\n return getFirstDefined(legend.type, defaultType(params));\n}\n\nexport function defaultType({\n channel,\n timeUnit,\n scaleType\n}: {\n channel: NonPositionScaleChannel;\n timeUnit?: TimeUnit;\n scaleType: ScaleType;\n}): LegendType {\n // Following the logic in https://github.com/vega/vega-parser/blob/master/src/parsers/legend.js\n\n if (isColorChannel(channel)) {\n if (contains(['quarter', 'month', 'day'], timeUnit)) {\n return 'symbol';\n }\n\n if (isContinuousToContinuous(scaleType)) {\n return 'gradient';\n }\n }\n return 'symbol';\n}\n\nexport function getDirection({\n legendConfig,\n legendType,\n orient,\n legend\n}: {\n orient: LegendOrient;\n legendConfig: LegendConfig;\n legendType: LegendType;\n legend: Legend;\n}): Orientation {\n return (\n legend.direction ??\n legendConfig[legendType ? 'gradientDirection' : 'symbolDirection'] ??\n defaultDirection(orient, legendType)\n );\n}\n\nexport function defaultDirection(orient: LegendOrient, legendType: LegendType): 'horizontal' | undefined {\n switch (orient) {\n case 'top':\n case 'bottom':\n return 'horizontal';\n\n case 'left':\n case 'right':\n case 'none':\n case undefined: // undefined = \"right\" in Vega\n return undefined; // vertical is Vega's default\n default:\n // top-left / ...\n // For inner legend, uses compact layout like Tableau\n return legendType === 'gradient' ? 'horizontal' : undefined;\n }\n}\n\nexport function defaultGradientLength({\n legendConfig,\n model,\n direction,\n orient,\n scaleType\n}: {\n scaleType: ScaleType;\n direction: Orientation;\n orient: LegendOrient;\n model: Model;\n legendConfig: LegendConfig;\n}) {\n const {\n gradientHorizontalMaxLength,\n gradientHorizontalMinLength,\n gradientVerticalMaxLength,\n gradientVerticalMinLength\n } = legendConfig;\n if (isContinuousToContinuous(scaleType)) {\n if (direction === 'horizontal') {\n if (orient === 'top' || orient === 'bottom') {\n return gradientLengthSignal(model, 'width', gradientHorizontalMinLength, gradientHorizontalMaxLength);\n } else {\n return gradientHorizontalMinLength;\n }\n } else {\n // vertical / undefined (Vega uses vertical by default)\n return gradientLengthSignal(model, 'height', gradientVerticalMinLength, gradientVerticalMaxLength);\n }\n }\n return undefined;\n}\n\nfunction gradientLengthSignal(model: Model, sizeType: 'width' | 'height', min: number, max: number) {\n const sizeSignal = model.getSizeSignalRef(sizeType).signal;\n return {signal: `clamp(${sizeSignal}, ${min}, ${max})`};\n}\n\nexport function defaultLabelOverlap(scaleType: ScaleType): LabelOverlap {\n if (contains(['quantile', 'threshold', 'log', 'symlog'], scaleType)) {\n return 'greedy';\n }\n return undefined;\n}\n","import {Legend as VgLegend, LegendEncode} from 'vega';\nimport {COLOR, NonPositionScaleChannel, SHAPE} from '../../channel';\nimport {DatumDef, FieldDef, getFieldOrDatumDef, isFieldDef, MarkPropDatumDef, MarkPropFieldDef} from '../../channeldef';\nimport {LegendInternal, LEGEND_SCALE_CHANNELS} from '../../legend';\nimport {normalizeTimeUnit} from '../../timeunit';\nimport {GEOJSON} from '../../type';\nimport {deleteNestedProperty, isEmpty, keys, varName} from '../../util';\nimport {mergeTitleComponent} from '../common';\nimport {guideEncodeEntry} from '../guide';\nimport {isUnitModel, Model} from '../model';\nimport {parseGuideResolve} from '../resolve';\nimport {parseInteractiveLegend} from '../selection/legends';\nimport {defaultTieBreaker, Explicit, makeImplicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {LegendComponent, LegendComponentIndex, LegendComponentProps, LEGEND_COMPONENT_PROPERTIES} from './component';\nimport {LegendEncodeParams, legendEncodeRules} from './encode';\nimport {getDirection, getLegendType, LegendRuleParams, legendRules} from './properties';\n\nexport function parseLegend(model: Model) {\n const legendComponent = isUnitModel(model) ? parseUnitLegend(model) : parseNonUnitLegend(model);\n model.component.legends = legendComponent;\n return legendComponent;\n}\n\nfunction parseUnitLegend(model: UnitModel): LegendComponentIndex {\n const {encoding} = model;\n\n const legendComponent: LegendComponentIndex = {};\n\n for (const channel of [COLOR, ...LEGEND_SCALE_CHANNELS]) {\n const def = getFieldOrDatumDef(encoding[channel]) as MarkPropFieldDef | MarkPropDatumDef;\n\n if (!def || !model.getScaleComponent(channel)) {\n continue;\n }\n\n if (channel === SHAPE && isFieldDef(def) && def.type === GEOJSON) {\n continue;\n }\n\n legendComponent[channel] = parseLegendForChannel(model, channel);\n }\n\n return legendComponent;\n}\n\nfunction getLegendDefWithScale(model: UnitModel, channel: NonPositionScaleChannel): VgLegend {\n const scale = model.scaleName(channel);\n if (model.mark === 'trail') {\n if (channel === 'color') {\n // trail is a filled mark, but its default symbolType (\"stroke\") should use \"stroke\"\n return {stroke: scale};\n } else if (channel === 'size') {\n return {strokeWidth: scale};\n }\n }\n\n if (channel === 'color') {\n return model.markDef.filled ? {fill: scale} : {stroke: scale};\n }\n return {[channel]: scale};\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isExplicit(\n value: T,\n property: keyof LegendComponentProps,\n legend: LegendInternal,\n fieldDef: FieldDef\n) {\n switch (property) {\n case 'disable':\n return legend !== undefined; // if axis is specified or null/false, then its enable/disable state is explicit\n case 'values':\n // specified legend.values is already respected, but may get transformed.\n return !!legend?.values;\n case 'title':\n // title can be explicit if fieldDef.title is set\n if (property === 'title' && value === fieldDef?.title) {\n return true;\n }\n }\n // Otherwise, things are explicit if the returned value matches the specified property\n return value === (legend || {})[property];\n}\n\nexport function parseLegendForChannel(model: UnitModel, channel: NonPositionScaleChannel): LegendComponent {\n let legend = model.legend(channel);\n\n const {markDef, encoding, config} = model;\n const legendConfig = config.legend;\n const legendCmpt = new LegendComponent({}, getLegendDefWithScale(model, channel));\n parseInteractiveLegend(model, channel, legendCmpt);\n\n const disable = legend !== undefined ? !legend : legendConfig.disable;\n legendCmpt.set('disable', disable, legend !== undefined);\n if (disable) {\n return legendCmpt;\n }\n\n legend = legend || {};\n\n const scaleType = model.getScaleComponent(channel).get('type');\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as MarkPropFieldDef | DatumDef;\n const timeUnit = isFieldDef(fieldOrDatumDef) ? normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit : undefined;\n\n const orient = legend.orient || config.legend.orient || 'right';\n const legendType = getLegendType({legend, channel, timeUnit, scaleType});\n\n const direction = getDirection({legend, legendType, orient, legendConfig});\n\n const ruleParams: LegendRuleParams = {\n legend,\n channel,\n model,\n markDef,\n encoding,\n fieldOrDatumDef,\n legendConfig,\n config,\n scaleType,\n orient,\n legendType,\n direction\n };\n\n for (const property of LEGEND_COMPONENT_PROPERTIES) {\n if (\n (legendType === 'gradient' && property.startsWith('symbol')) ||\n (legendType === 'symbol' && property.startsWith('gradient'))\n ) {\n continue;\n }\n\n const value = property in legendRules ? legendRules[property](ruleParams) : legend[property];\n if (value !== undefined) {\n const explicit = isExplicit(value, property, legend, model.fieldDef(channel));\n if (explicit || config.legend[property] === undefined) {\n legendCmpt.set(property, value, explicit);\n }\n }\n }\n\n const legendEncoding = legend?.encoding ?? {};\n const selections = legendCmpt.get('selections');\n const legendEncode: LegendEncode = {};\n\n const legendEncodeParams: LegendEncodeParams = {fieldOrDatumDef, model, channel, legendCmpt, legendType};\n\n for (const part of ['labels', 'legend', 'title', 'symbols', 'gradient', 'entries']) {\n const legendEncodingPart = guideEncodeEntry(legendEncoding[part] ?? {}, model);\n\n const value =\n part in legendEncodeRules\n ? legendEncodeRules[part](legendEncodingPart, legendEncodeParams) // apply rule\n : legendEncodingPart; // no rule -- just default values\n\n if (value !== undefined && !isEmpty(value)) {\n legendEncode[part] = {\n ...(selections?.length && isFieldDef(fieldOrDatumDef)\n ? {name: `${varName(fieldOrDatumDef.field)}_legend_${part}`}\n : {}),\n ...(selections?.length ? {interactive: !!selections} : {}),\n update: value\n };\n }\n }\n\n if (!isEmpty(legendEncode)) {\n legendCmpt.set('encode', legendEncode, !!legend?.encoding);\n }\n\n return legendCmpt;\n}\n\nfunction parseNonUnitLegend(model: Model) {\n const {legends, resolve} = model.component;\n\n for (const child of model.children) {\n parseLegend(child);\n\n for (const channel of keys(child.component.legends)) {\n resolve.legend[channel] = parseGuideResolve(model.component.resolve, channel);\n\n if (resolve.legend[channel] === 'shared') {\n // If the resolve says shared (and has not been overridden)\n // We will try to merge and see if there is a conflict\n\n legends[channel] = mergeLegendComponent(legends[channel], child.component.legends[channel]);\n\n if (!legends[channel]) {\n // If merge returns nothing, there is a conflict so we cannot make the legend shared.\n // Thus, mark legend as independent and remove the legend component.\n resolve.legend[channel] = 'independent';\n delete legends[channel];\n }\n }\n }\n }\n\n for (const channel of keys(legends)) {\n for (const child of model.children) {\n if (!child.component.legends[channel]) {\n // skip if the child does not have a particular legend\n continue;\n }\n\n if (resolve.legend[channel] === 'shared') {\n // After merging shared legend, make sure to remove legend from child\n delete child.component.legends[channel];\n }\n }\n }\n\n return legends;\n}\n\nexport function mergeLegendComponent(mergedLegend: LegendComponent, childLegend: LegendComponent): LegendComponent {\n if (!mergedLegend) {\n return childLegend.clone();\n }\n const mergedOrient = mergedLegend.getWithExplicit('orient');\n const childOrient = childLegend.getWithExplicit('orient');\n\n if (mergedOrient.explicit && childOrient.explicit && mergedOrient.value !== childOrient.value) {\n // TODO: throw warning if resolve is explicit (We don't have info about explicit/implicit resolve yet.)\n // Cannot merge due to inconsistent orient\n return undefined;\n }\n\n let typeMerged = false;\n // Otherwise, let's merge\n for (const prop of LEGEND_COMPONENT_PROPERTIES) {\n const mergedValueWithExplicit = mergeValuesWithExplicit(\n mergedLegend.getWithExplicit(prop),\n childLegend.getWithExplicit(prop),\n prop,\n 'legend',\n\n // Tie breaker function\n (v1: Explicit, v2: Explicit): any => {\n switch (prop) {\n case 'symbolType':\n return mergeSymbolType(v1, v2);\n case 'title':\n return mergeTitleComponent(v1, v2);\n case 'type':\n // There are only two types. If we have different types, then prefer symbol over gradient.\n typeMerged = true;\n return makeImplicit('symbol');\n }\n return defaultTieBreaker(v1, v2, prop, 'legend');\n }\n );\n mergedLegend.setWithExplicit(prop, mergedValueWithExplicit);\n }\n if (typeMerged) {\n if (mergedLegend.implicit?.encode?.gradient) {\n deleteNestedProperty(mergedLegend.implicit, ['encode', 'gradient']);\n }\n if (mergedLegend.explicit?.encode?.gradient) {\n deleteNestedProperty(mergedLegend.explicit, ['encode', 'gradient']);\n }\n }\n\n return mergedLegend;\n}\n\nfunction mergeSymbolType(st1: Explicit, st2: Explicit) {\n if (st2.value === 'circle') {\n // prefer \"circle\" over \"stroke\"\n return st2;\n }\n return st1;\n}\n","import {Legend as VgLegend, LegendEncode} from 'vega';\nimport {Config} from '../../config';\nimport {LEGEND_SCALE_CHANNELS} from '../../legend';\nimport {keys, replaceAll, stringify, vals} from '../../util';\nimport {isSignalRef, VgEncodeChannel, VgValueRef} from '../../vega.schema';\nimport {Model} from '../model';\nimport {LegendComponent} from './component';\nimport {mergeLegendComponent} from './parse';\n\nfunction setLegendEncode(\n legend: VgLegend,\n part: keyof LegendEncode,\n vgProp: VgEncodeChannel,\n vgRef: VgValueRef | VgValueRef[]\n) {\n legend.encode ??= {};\n legend.encode[part] ??= {};\n legend.encode[part].update ??= {};\n // TODO: remove as any after https://github.com/prisma/nexus-prisma/issues/291\n (legend.encode[part].update[vgProp] as any) = vgRef;\n}\n\nexport function assembleLegends(model: Model): VgLegend[] {\n const legendComponentIndex = model.component.legends;\n const legendByDomain: Record = {};\n\n for (const channel of keys(legendComponentIndex)) {\n const scaleComponent = model.getScaleComponent(channel);\n const domainHash = stringify(scaleComponent.get('domains'));\n if (legendByDomain[domainHash]) {\n for (const mergedLegendComponent of legendByDomain[domainHash]) {\n const merged = mergeLegendComponent(mergedLegendComponent, legendComponentIndex[channel]);\n if (!merged) {\n // If cannot merge, need to add this legend separately\n legendByDomain[domainHash].push(legendComponentIndex[channel]);\n }\n }\n } else {\n legendByDomain[domainHash] = [legendComponentIndex[channel].clone()];\n }\n }\n\n const legends = vals(legendByDomain)\n .flat()\n .map(l => assembleLegend(l, model.config))\n .filter(l => l !== undefined);\n\n return legends;\n}\n\nexport function assembleLegend(legendCmpt: LegendComponent, config: Config) {\n const {disable, labelExpr, selections, ...legend} = legendCmpt.combine();\n\n if (disable) {\n return undefined;\n }\n\n if (config.aria === false && legend.aria == undefined) {\n legend.aria = false;\n }\n\n if (legend.encode?.symbols) {\n const out = legend.encode.symbols.update;\n if (out.fill && out.fill['value'] !== 'transparent' && !out.stroke && !legend.stroke) {\n // For non color channel's legend, we need to override symbol stroke config from Vega config if stroke channel is not used.\n out.stroke = {value: 'transparent'};\n }\n\n // Remove properties that the legend is encoding.\n for (const property of LEGEND_SCALE_CHANNELS) {\n if (legend[property]) {\n delete out[property];\n }\n }\n }\n\n if (!legend.title) {\n // title schema doesn't include null, ''\n delete legend.title;\n }\n\n if (labelExpr !== undefined) {\n let expr = labelExpr;\n if (legend.encode?.labels?.update && isSignalRef(legend.encode.labels.update.text)) {\n expr = replaceAll(labelExpr, 'datum.label', legend.encode.labels.update.text.signal);\n }\n setLegendEncode(legend, 'labels', 'text', {signal: expr});\n }\n\n return legend;\n}\n","import {Projection as VgProjection, SignalRef} from 'vega';\nimport {contains} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {isConcatModel, isLayerModel, Model} from '../model';\n\nexport function assembleProjections(model: Model): VgProjection[] {\n if (isLayerModel(model) || isConcatModel(model)) {\n return assembleProjectionsForModelAndChildren(model);\n } else {\n return assembleProjectionForModel(model);\n }\n}\n\nexport function assembleProjectionsForModelAndChildren(model: Model): VgProjection[] {\n return model.children.reduce((projections, child) => {\n return projections.concat(child.assembleProjections());\n }, assembleProjectionForModel(model));\n}\n\nexport function assembleProjectionForModel(model: Model): VgProjection[] {\n const component = model.component.projection;\n if (!component || component.merged) {\n return [];\n }\n\n const projection = component.combine();\n const {name} = projection; // we need to extract name so that it is always present in the output and pass TS type validation\n\n if (!component.data) {\n // generate custom projection, no automatic fitting\n return [\n {\n name,\n // translate to center by default\n ...{translate: {signal: '[width / 2, height / 2]'}},\n // parameters, overwrite default translate if specified\n ...projection\n }\n ];\n } else {\n // generate projection that uses extent fitting\n const size: SignalRef = {\n signal: `[${component.size.map(ref => ref.signal).join(', ')}]`\n };\n\n const fits: string[] = component.data.reduce((sources, data) => {\n const source: string = isSignalRef(data) ? data.signal : `data('${model.lookupDataSource(data)}')`;\n if (!contains(sources, source)) {\n // build a unique list of sources\n sources.push(source);\n }\n return sources;\n }, []);\n\n if (fits.length <= 0) {\n throw new Error(\"Projection's fit didn't find any data sources\");\n }\n\n return [\n {\n name,\n size,\n fit: {\n signal: fits.length > 1 ? `[${fits.join(', ')}]` : fits[0]\n },\n ...projection\n }\n ];\n }\n}\n","import {BaseProjection, SignalRef, Vector2} from 'vega';\nimport {ExprRef} from './expr';\nimport {MapExcludeValueRefAndReplaceSignalWith, ProjectionType} from './vega.schema';\n\nexport interface Projection\n extends MapExcludeValueRefAndReplaceSignalWith {\n /**\n * The cartographic projection to use. This value is case-insensitive, for example `\"albers\"` and `\"Albers\"` indicate the same projection type. You can find all valid projection types [in the documentation](https://vega.github.io/vega-lite/docs/projection.html#projection-types).\n *\n * __Default value:__ `equalEarth`\n */\n type?: ProjectionType | ES; // Re-declare to override docs\n\n /**\n * The projection’s scale (zoom) factor, overriding automatic fitting. The default scale is projection-specific. The scale factor corresponds linearly to the distance between projected points; however, scale factor values are not equivalent across projections.\n */\n scale?: number | ES; // Re-declare to override docs\n\n /**\n * The projection’s translation offset as a two-element array `[tx, ty]`.\n */\n translate?: Vector2 | ES; // TODO: figure what's VL default value\n}\n\n/**\n * Any property of Projection can be in config\n */\nexport type ProjectionConfig = Projection;\n\nexport const PROJECTION_PROPERTIES: (keyof Projection)[] = [\n 'type',\n 'clipAngle',\n 'clipExtent',\n 'center',\n 'rotate',\n 'precision',\n 'reflectX',\n 'reflectY',\n 'coefficient',\n 'distance',\n 'fraction',\n 'lobes',\n 'parallel',\n 'radius',\n 'ratio',\n 'spacing',\n 'tilt'\n];\n","import {Projection as VgProjection, SignalRef} from 'vega';\nimport {Projection} from '../../projection';\nimport {Split} from '../split';\n\nexport class ProjectionComponent extends Split {\n public merged = false;\n\n constructor(\n name: string,\n public specifiedProjection: Projection,\n public size: SignalRef[],\n public data: (string | SignalRef)[]\n ) {\n super(\n {...specifiedProjection}, // all explicit properties of projection\n {name} // name as initial implicit property\n );\n }\n\n /**\n * Whether the projection parameters should fit provided data.\n */\n public get isFit() {\n return !!this.data;\n }\n}\n","import {SignalRef} from 'vega';\nimport {hasOwnProperty} from 'vega-util';\nimport {LATITUDE, LATITUDE2, LONGITUDE, LONGITUDE2, SHAPE} from '../../channel';\nimport {getFieldOrDatumDef} from '../../channeldef';\nimport {DataSourceType} from '../../data';\nimport {replaceExprRef} from '../../expr';\nimport {PROJECTION_PROPERTIES} from '../../projection';\nimport {GEOJSON} from '../../type';\nimport {deepEqual, duplicate, every} from '../../util';\nimport {isUnitModel, Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {ProjectionComponent} from './component';\n\nexport function parseProjection(model: Model) {\n model.component.projection = isUnitModel(model) ? parseUnitProjection(model) : parseNonUnitProjections(model);\n}\n\nfunction parseUnitProjection(model: UnitModel): ProjectionComponent {\n if (model.hasProjection) {\n const proj = replaceExprRef(model.specifiedProjection);\n const fit = !(proj && (proj.scale != null || proj.translate != null));\n const size = fit ? [model.getSizeSignalRef('width'), model.getSizeSignalRef('height')] : undefined;\n const data = fit ? gatherFitData(model) : undefined;\n\n const projComp = new ProjectionComponent(\n model.projectionName(true),\n {\n ...(replaceExprRef(model.config.projection) ?? {}),\n ...(proj ?? {})\n },\n size,\n data\n );\n\n if (!projComp.get('type')) {\n projComp.set('type', 'equalEarth', false);\n }\n\n return projComp;\n }\n\n return undefined;\n}\n\nfunction gatherFitData(model: UnitModel) {\n const data: (SignalRef | string)[] = [];\n\n const {encoding} = model;\n\n for (const posssiblePair of [\n [LONGITUDE, LATITUDE],\n [LONGITUDE2, LATITUDE2]\n ]) {\n if (getFieldOrDatumDef(encoding[posssiblePair[0]]) || getFieldOrDatumDef(encoding[posssiblePair[1]])) {\n data.push({\n signal: model.getName(`geojson_${data.length}`)\n });\n }\n }\n\n if (model.channelHasField(SHAPE) && model.typedFieldDef(SHAPE).type === GEOJSON) {\n data.push({\n signal: model.getName(`geojson_${data.length}`)\n });\n }\n\n if (data.length === 0) {\n // main source is geojson, so we can just use that\n data.push(model.requestDataName(DataSourceType.Main));\n }\n\n return data;\n}\n\nfunction mergeIfNoConflict(first: ProjectionComponent, second: ProjectionComponent): ProjectionComponent {\n const allPropertiesShared = every(PROJECTION_PROPERTIES, prop => {\n // neither has the property\n if (!hasOwnProperty(first.explicit, prop) && !hasOwnProperty(second.explicit, prop)) {\n return true;\n }\n // both have property and an equal value for property\n if (\n hasOwnProperty(first.explicit, prop) &&\n hasOwnProperty(second.explicit, prop) &&\n // some properties might be signals or objects and require hashing for comparison\n deepEqual(first.get(prop), second.get(prop))\n ) {\n return true;\n }\n return false;\n });\n\n const size = deepEqual(first.size, second.size);\n if (size) {\n if (allPropertiesShared) {\n return first;\n } else if (deepEqual(first.explicit, {})) {\n return second;\n } else if (deepEqual(second.explicit, {})) {\n return first;\n }\n }\n\n // if all properties don't match, let each unit spec have its own projection\n return null;\n}\n\nfunction parseNonUnitProjections(model: Model): ProjectionComponent {\n if (model.children.length === 0) {\n return undefined;\n }\n\n let nonUnitProjection: ProjectionComponent;\n\n // parse all children first\n for (const child of model.children) {\n parseProjection(child);\n }\n\n // analyze parsed projections, attempt to merge\n const mergable = every(model.children, child => {\n const projection = child.component.projection;\n if (!projection) {\n // child layer does not use a projection\n return true;\n } else if (!nonUnitProjection) {\n // cached 'projection' is null, cache this one\n nonUnitProjection = projection;\n return true;\n } else {\n const merge = mergeIfNoConflict(nonUnitProjection, projection);\n if (merge) {\n nonUnitProjection = merge;\n }\n return !!merge;\n }\n });\n\n // if cached one and all other children share the same projection,\n if (nonUnitProjection && mergable) {\n // so we can elevate it to the layer level\n const name = model.projectionName(true);\n const modelProjection = new ProjectionComponent(\n name,\n nonUnitProjection.specifiedProjection,\n nonUnitProjection.size,\n duplicate(nonUnitProjection.data)\n );\n\n // rename and assign all others as merged\n for (const child of model.children) {\n const projection = child.component.projection;\n if (projection) {\n if (projection.isFit) {\n modelProjection.data.push(...child.component.projection.data);\n }\n child.renameProjection(projection.get('name'), name);\n projection.merged = true;\n }\n }\n\n return modelProjection;\n }\n\n return undefined;\n}\n","import {BinTransform as VgBinTransform, Transforms as VgTransform} from 'vega';\nimport {isString} from 'vega-util';\nimport {BinParams, binToString, isBinning, isParameterExtent} from '../../bin';\nimport {Channel} from '../../channel';\nimport {binRequiresRange, FieldName, isTypedFieldDef, normalizeBin, TypedFieldDef, vgField} from '../../channeldef';\nimport {Config} from '../../config';\nimport {BinTransform} from '../../transform';\nimport {Dict, duplicate, hash, isEmpty, keys, replacePathInField, unique, vals} from '../../util';\nimport {binFormatExpression} from '../format';\nimport {isUnitModel, Model, ModelWithField} from '../model';\nimport {parseSelectionExtent} from '../selection/parse';\nimport {NonPositionScaleChannel, PositionChannel} from './../../channel';\nimport {DataFlowNode} from './dataflow';\n\nfunction rangeFormula(model: ModelWithField, fieldDef: TypedFieldDef, channel: Channel, config: Config) {\n if (binRequiresRange(fieldDef, channel)) {\n // read format from axis or legend, if there is no format then use config.numberFormat\n\n const guide = isUnitModel(model)\n ? model.axis(channel as PositionChannel) ?? model.legend(channel as NonPositionScaleChannel) ?? {}\n : {};\n\n const startField = vgField(fieldDef, {expr: 'datum'});\n const endField = vgField(fieldDef, {expr: 'datum', binSuffix: 'end'});\n\n return {\n formulaAs: vgField(fieldDef, {binSuffix: 'range', forAs: true}),\n formula: binFormatExpression(startField, endField, guide.format, guide.formatType, config)\n };\n }\n return {};\n}\n\nfunction binKey(bin: BinParams, field: string) {\n return `${binToString(bin)}_${field}`;\n}\n\nfunction getSignalsFromModel(model: Model, key: string) {\n return {\n signal: model.getName(`${key}_bins`),\n extentSignal: model.getName(`${key}_extent`)\n };\n}\n\nexport function getBinSignalName(model: Model, field: string, bin: boolean | BinParams) {\n const normalizedBin = normalizeBin(bin, undefined) ?? {};\n const key = binKey(normalizedBin, field);\n return model.getName(`${key}_bins`);\n}\n\nfunction isBinTransform(t: TypedFieldDef | BinTransform): t is BinTransform {\n return 'as' in t;\n}\n\nfunction createBinComponent(t: TypedFieldDef | BinTransform, bin: boolean | BinParams, model: Model) {\n let as: [string, string];\n let span: string;\n\n if (isBinTransform(t)) {\n as = isString(t.as) ? [t.as, `${t.as}_end`] : [t.as[0], t.as[1]];\n } else {\n as = [vgField(t, {forAs: true}), vgField(t, {binSuffix: 'end', forAs: true})];\n }\n\n const normalizedBin = {...normalizeBin(bin, undefined)};\n const key = binKey(normalizedBin, t.field);\n const {signal, extentSignal} = getSignalsFromModel(model, key);\n\n if (isParameterExtent(normalizedBin.extent)) {\n const ext = normalizedBin.extent;\n span = parseSelectionExtent(model, ext.param, ext);\n delete normalizedBin.extent; // Vega-Lite selection extent map to Vega's span property.\n }\n\n const binComponent: BinComponent = {\n bin: normalizedBin,\n field: t.field,\n as: [as],\n ...(signal ? {signal} : {}),\n ...(extentSignal ? {extentSignal} : {}),\n ...(span ? {span} : {})\n };\n\n return {key, binComponent};\n}\n\nexport interface BinComponent {\n bin: BinParams;\n field: FieldName;\n extentSignal?: string;\n signal?: string;\n span?: string;\n\n /** Pairs of strings of the names of start and end signals */\n as: [string, string][];\n\n // Range Formula\n\n formula?: string;\n formulaAs?: string;\n}\n\nexport class BinNode extends DataFlowNode {\n public clone() {\n return new BinNode(null, duplicate(this.bins));\n }\n\n constructor(parent: DataFlowNode, private bins: Dict) {\n super(parent);\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: ModelWithField) {\n const bins = model.reduceFieldDef((binComponentIndex: Dict, fieldDef, channel) => {\n if (isTypedFieldDef(fieldDef) && isBinning(fieldDef.bin)) {\n const {key, binComponent} = createBinComponent(fieldDef, fieldDef.bin, model);\n binComponentIndex[key] = {\n ...binComponent,\n ...binComponentIndex[key],\n ...rangeFormula(model, fieldDef, channel, model.config)\n };\n }\n return binComponentIndex;\n }, {} as Dict);\n\n if (isEmpty(bins)) {\n return null;\n }\n\n return new BinNode(parent, bins);\n }\n\n /**\n * Creates a bin node from BinTransform.\n * The optional parameter should provide\n */\n public static makeFromTransform(parent: DataFlowNode, t: BinTransform, model: Model) {\n const {key, binComponent} = createBinComponent(t, t.bin, model);\n return new BinNode(parent, {\n [key]: binComponent\n });\n }\n\n /**\n * Merge bin nodes. This method either integrates the bin config from the other node\n * or if this node already has a bin config, renames the corresponding signal in the model.\n */\n public merge(other: BinNode, renameSignal: (s1: string, s2: string) => void) {\n for (const key of keys(other.bins)) {\n if (key in this.bins) {\n renameSignal(other.bins[key].signal, this.bins[key].signal);\n // Ensure that we don't have duplicate names for signal pairs\n this.bins[key].as = unique([...this.bins[key].as, ...other.bins[key].as], hash);\n } else {\n this.bins[key] = other.bins[key];\n }\n }\n\n for (const child of other.children) {\n other.removeChild(child);\n child.parent = this;\n }\n other.remove();\n }\n\n public producedFields() {\n return new Set(\n vals(this.bins)\n .map(c => c.as)\n .flat(2)\n );\n }\n\n public dependentFields() {\n return new Set(vals(this.bins).map(c => c.field));\n }\n\n public hash() {\n return `Bin ${hash(this.bins)}`;\n }\n\n public assemble(): VgTransform[] {\n return vals(this.bins).flatMap(bin => {\n const transform: VgTransform[] = [];\n\n const [binAs, ...remainingAs] = bin.as;\n const {extent, ...params} = bin.bin;\n const binTrans: VgBinTransform = {\n type: 'bin',\n field: replacePathInField(bin.field),\n as: binAs,\n signal: bin.signal,\n ...(!isParameterExtent(extent) ? {extent} : {extent: null}),\n ...(bin.span ? {span: {signal: `span(${bin.span})`}} : {}),\n ...params\n };\n\n if (!extent && bin.extentSignal) {\n transform.push({\n type: 'extent',\n field: replacePathInField(bin.field),\n signal: bin.extentSignal\n });\n binTrans.extent = {signal: bin.extentSignal};\n }\n\n transform.push(binTrans);\n\n for (const as of remainingAs) {\n for (let i = 0; i < 2; i++) {\n transform.push({\n type: 'formula',\n expr: vgField({field: binAs[i]}, {expr: 'datum'}),\n as: as[i]\n });\n }\n }\n\n if (bin.formula) {\n transform.push({\n type: 'formula',\n expr: bin.formula,\n as: bin.formulaAs\n });\n }\n return transform;\n });\n }\n}\n","import {AggregateOp, AggregateTransform as VgAggregateTransform} from 'vega';\nimport {isArgmaxDef, isArgminDef} from '../../aggregate';\nimport {\n Channel,\n getPositionChannelFromLatLong,\n getSecondaryRangeChannel,\n isGeoPositionChannel,\n isScaleChannel\n} from '../../channel';\nimport {binRequiresRange, FieldDef, hasBandEnd, isTypedFieldDef, vgField} from '../../channeldef';\nimport * as log from '../../log';\nimport {AggregateTransform} from '../../transform';\nimport {Dict, duplicate, hash, keys, replacePathInField, setEqual} from '../../util';\nimport {isUnitModel, ModelWithField} from '../model';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\ntype Measures = Dict>>>;\n\nfunction addDimension(dims: Set, channel: Channel, fieldDef: FieldDef, model: ModelWithField) {\n const channelDef2 = isUnitModel(model) ? model.encoding[getSecondaryRangeChannel(channel)] : undefined;\n\n if (\n isTypedFieldDef(fieldDef) &&\n isUnitModel(model) &&\n hasBandEnd(fieldDef, channelDef2, model.markDef, model.config)\n ) {\n dims.add(vgField(fieldDef, {}));\n dims.add(vgField(fieldDef, {suffix: 'end'}));\n\n if (fieldDef.bin && binRequiresRange(fieldDef, channel)) {\n dims.add(vgField(fieldDef, {binSuffix: 'range'}));\n }\n } else if (isGeoPositionChannel(channel)) {\n const posChannel = getPositionChannelFromLatLong(channel);\n dims.add(model.getName(posChannel));\n } else {\n dims.add(vgField(fieldDef));\n }\n return dims;\n}\n\nfunction mergeMeasures(parentMeasures: Measures, childMeasures: Measures) {\n for (const field of keys(childMeasures)) {\n // when we merge a measure, we either have to add an aggregation operator or even a new field\n const ops = childMeasures[field];\n for (const op of keys(ops)) {\n if (field in parentMeasures) {\n // add operator to existing measure field\n parentMeasures[field][op] = new Set([...(parentMeasures[field][op] ?? []), ...ops[op]]);\n } else {\n parentMeasures[field] = {[op]: ops[op]};\n }\n }\n }\n}\n\nexport class AggregateNode extends DataFlowNode {\n public clone() {\n return new AggregateNode(null, new Set(this.dimensions), duplicate(this.measures));\n }\n\n /**\n * @param dimensions string set for dimensions\n * @param measures dictionary mapping field name => dict of aggregation functions and names to use\n */\n constructor(parent: DataFlowNode, private dimensions: Set, private measures: Measures) {\n super(parent);\n }\n\n get groupBy() {\n return this.dimensions;\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: UnitModel): AggregateNode {\n let isAggregate = false;\n model.forEachFieldDef(fd => {\n if (fd.aggregate) {\n isAggregate = true;\n }\n });\n\n const meas: Measures = {};\n const dims = new Set();\n\n if (!isAggregate) {\n // no need to create this node if the model has no aggregation\n return null;\n }\n\n model.forEachFieldDef((fieldDef, channel: Channel) => {\n const {aggregate, field} = fieldDef;\n if (aggregate) {\n if (aggregate === 'count') {\n meas['*'] ??= {};\n meas['*']['count'] = new Set([vgField(fieldDef, {forAs: true})]);\n } else {\n if (isArgminDef(aggregate) || isArgmaxDef(aggregate)) {\n const op = isArgminDef(aggregate) ? 'argmin' : 'argmax';\n const argField = aggregate[op];\n meas[argField] ??= {};\n meas[argField][op] = new Set([vgField({op, field: argField}, {forAs: true})]);\n } else {\n meas[field] ??= {};\n meas[field][aggregate] = new Set([vgField(fieldDef, {forAs: true})]);\n }\n\n // For scale channel with domain === 'unaggregated', add min/max so we can use their union as unaggregated domain\n if (isScaleChannel(channel) && model.scaleDomain(channel) === 'unaggregated') {\n meas[field] ??= {};\n meas[field]['min'] = new Set([vgField({field, aggregate: 'min'}, {forAs: true})]);\n meas[field]['max'] = new Set([vgField({field, aggregate: 'max'}, {forAs: true})]);\n }\n }\n } else {\n addDimension(dims, channel, fieldDef, model);\n }\n });\n\n if (dims.size + keys(meas).length === 0) {\n return null;\n }\n\n return new AggregateNode(parent, dims, meas);\n }\n\n public static makeFromTransform(parent: DataFlowNode, t: AggregateTransform): AggregateNode {\n const dims = new Set();\n const meas: Measures = {};\n\n for (const s of t.aggregate) {\n const {op, field, as} = s;\n if (op) {\n if (op === 'count') {\n meas['*'] ??= {};\n meas['*']['count'] = new Set([as ? as : vgField(s, {forAs: true})]);\n } else {\n meas[field] ??= {};\n meas[field][op] = new Set([as ? as : vgField(s, {forAs: true})]);\n }\n }\n }\n\n for (const s of t.groupby ?? []) {\n dims.add(s);\n }\n\n if (dims.size + keys(meas).length === 0) {\n return null;\n }\n\n return new AggregateNode(parent, dims, meas);\n }\n\n public merge(other: AggregateNode): boolean {\n if (setEqual(this.dimensions, other.dimensions)) {\n mergeMeasures(this.measures, other.measures);\n return true;\n } else {\n log.debug('different dimensions, cannot merge');\n return false;\n }\n }\n\n public addDimensions(fields: readonly string[]) {\n fields.forEach(this.dimensions.add, this.dimensions);\n }\n\n public dependentFields() {\n return new Set([...this.dimensions, ...keys(this.measures)]);\n }\n\n public producedFields() {\n const out = new Set();\n\n for (const field of keys(this.measures)) {\n for (const op of keys(this.measures[field])) {\n const m = this.measures[field][op];\n if (m.size === 0) {\n out.add(`${op}_${field}`);\n } else {\n m.forEach(out.add, out);\n }\n }\n }\n\n return out;\n }\n\n public hash() {\n return `Aggregate ${hash({dimensions: this.dimensions, measures: this.measures})}`;\n }\n\n public assemble(): VgAggregateTransform {\n const ops: AggregateOp[] = [];\n const fields: string[] = [];\n const as: string[] = [];\n\n for (const field of keys(this.measures)) {\n for (const op of keys(this.measures[field])) {\n for (const alias of this.measures[field][op]) {\n as.push(alias);\n ops.push(op);\n fields.push(field === '*' ? null : replacePathInField(field));\n }\n }\n }\n\n const result: VgAggregateTransform = {\n type: 'aggregate',\n groupby: [...this.dimensions].map(replacePathInField),\n ops,\n fields,\n as\n };\n\n return result;\n }\n}\n","import {AggregateOp} from 'vega';\nimport {isArray} from 'vega-util';\nimport {isBinning} from '../../bin';\nimport {COLUMN, FACET_CHANNELS, POSITION_SCALE_CHANNELS, ROW} from '../../channel';\nimport {vgField} from '../../channeldef';\nimport * as log from '../../log';\nimport {hasDiscreteDomain} from '../../scale';\nimport {DEFAULT_SORT_OP, EncodingSortField, isSortField} from '../../sort';\nimport {hash} from '../../util';\nimport {isVgRangeStep, VgData} from '../../vega.schema';\nimport {FacetModel} from '../facet';\nimport {HEADER_CHANNELS, HEADER_TYPES} from '../header/component';\nimport {Model} from '../model';\nimport {assembleDomain, getFieldFromDomain} from '../scale/domain';\nimport {sortArrayIndexField} from './calculate';\nimport {DataFlowNode} from './dataflow';\n\ninterface ChildIndependentFieldsWithStep {\n x?: string;\n y?: string;\n}\n\ninterface FacetChannelInfo {\n name: string;\n fields: string[];\n sortField?: EncodingSortField;\n\n sortIndexField?: string;\n}\n\n/**\n * A node that helps us track what fields we are faceting by.\n */\nexport class FacetNode extends DataFlowNode {\n private readonly column: FacetChannelInfo;\n\n private readonly row: FacetChannelInfo;\n\n private readonly facet: FacetChannelInfo;\n\n private readonly childModel: Model;\n\n /**\n * @param model The facet model.\n * @param name The name that this facet source will have.\n * @param data The source data for this facet data.\n */\n public constructor(\n parent: DataFlowNode,\n public readonly model: FacetModel,\n public readonly name: string,\n public data: string\n ) {\n super(parent);\n\n for (const channel of FACET_CHANNELS) {\n const fieldDef = model.facet[channel];\n if (fieldDef) {\n const {bin, sort} = fieldDef;\n this[channel] = {\n name: model.getName(`${channel}_domain`),\n fields: [vgField(fieldDef), ...(isBinning(bin) ? [vgField(fieldDef, {binSuffix: 'end'})] : [])],\n ...(isSortField(sort)\n ? {sortField: sort}\n : isArray(sort)\n ? {sortIndexField: sortArrayIndexField(fieldDef, channel)}\n : {})\n };\n }\n }\n this.childModel = model.child;\n }\n\n public hash() {\n let out = `Facet`;\n\n for (const channel of FACET_CHANNELS) {\n if (this[channel]) {\n out += ` ${channel.charAt(0)}:${hash(this[channel])}`;\n }\n }\n\n return out;\n }\n\n get fields() {\n const f: string[] = [];\n\n for (const channel of FACET_CHANNELS) {\n if (this[channel]?.fields) {\n f.push(...this[channel].fields);\n }\n }\n return f;\n }\n\n public dependentFields() {\n const depFields = new Set(this.fields);\n\n for (const channel of FACET_CHANNELS) {\n if (this[channel]) {\n if (this[channel].sortField) {\n depFields.add(this[channel].sortField.field);\n }\n if (this[channel].sortIndexField) {\n depFields.add(this[channel].sortIndexField);\n }\n }\n }\n\n return depFields;\n }\n\n public producedFields() {\n return new Set(); // facet does not produce any new fields\n }\n\n /**\n * The name to reference this source is its name.\n */\n public getSource() {\n return this.name;\n }\n\n private getChildIndependentFieldsWithStep() {\n const childIndependentFieldsWithStep: ChildIndependentFieldsWithStep = {};\n\n for (const channel of POSITION_SCALE_CHANNELS) {\n const childScaleComponent = this.childModel.component.scales[channel];\n if (childScaleComponent && !childScaleComponent.merged) {\n // independent scale\n const type = childScaleComponent.get('type');\n const range = childScaleComponent.get('range');\n\n if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n const domain = assembleDomain(this.childModel, channel);\n const field = getFieldFromDomain(domain);\n if (field) {\n childIndependentFieldsWithStep[channel] = field;\n } else {\n log.warn(log.message.unknownField(channel));\n }\n }\n }\n }\n\n return childIndependentFieldsWithStep;\n }\n\n private assembleRowColumnHeaderData(\n channel: 'row' | 'column' | 'facet',\n crossedDataName: string,\n childIndependentFieldsWithStep: ChildIndependentFieldsWithStep\n ): VgData {\n const childChannel = {row: 'y', column: 'x', facet: undefined}[channel];\n\n const fields: string[] = [];\n const ops: AggregateOp[] = [];\n const as: string[] = [];\n\n if (childChannel && childIndependentFieldsWithStep && childIndependentFieldsWithStep[childChannel]) {\n if (crossedDataName) {\n // If there is a crossed data, calculate max\n fields.push(`distinct_${childIndependentFieldsWithStep[childChannel]}`);\n\n ops.push('max');\n } else {\n // If there is no crossed data, just calculate distinct\n fields.push(childIndependentFieldsWithStep[childChannel]);\n ops.push('distinct');\n }\n // Although it is technically a max, just name it distinct so it's easier to refer to it\n as.push(`distinct_${childIndependentFieldsWithStep[childChannel]}`);\n }\n\n const {sortField, sortIndexField} = this[channel];\n if (sortField) {\n const {op = DEFAULT_SORT_OP, field} = sortField;\n fields.push(field);\n ops.push(op);\n as.push(vgField(sortField, {forAs: true}));\n } else if (sortIndexField) {\n fields.push(sortIndexField);\n ops.push('max');\n as.push(sortIndexField);\n }\n\n return {\n name: this[channel].name,\n // Use data from the crossed one if it exist\n source: crossedDataName ?? this.data,\n transform: [\n {\n type: 'aggregate',\n groupby: this[channel].fields,\n ...(fields.length\n ? {\n fields,\n ops,\n as\n }\n : {})\n }\n ]\n };\n }\n\n private assembleFacetHeaderData(childIndependentFieldsWithStep: ChildIndependentFieldsWithStep) {\n const {columns} = this.model.layout;\n const {layoutHeaders} = this.model.component;\n const data: VgData[] = [];\n\n const hasSharedAxis: {row?: true; column?: true} = {};\n for (const headerChannel of HEADER_CHANNELS) {\n for (const headerType of HEADER_TYPES) {\n const headers = (layoutHeaders[headerChannel] && layoutHeaders[headerChannel][headerType]) ?? [];\n for (const header of headers) {\n if (header.axes?.length > 0) {\n hasSharedAxis[headerChannel] = true;\n break;\n }\n }\n }\n\n if (hasSharedAxis[headerChannel]) {\n const cardinality = `length(data(\"${this.facet.name}\"))`;\n\n const stop =\n headerChannel === 'row'\n ? columns\n ? {signal: `ceil(${cardinality} / ${columns})`}\n : 1\n : columns\n ? {signal: `min(${cardinality}, ${columns})`}\n : {signal: cardinality};\n\n data.push({\n name: `${this.facet.name}_${headerChannel}`,\n transform: [\n {\n type: 'sequence',\n start: 0,\n stop\n }\n ]\n });\n }\n }\n\n const {row, column} = hasSharedAxis;\n\n if (row || column) {\n data.unshift(this.assembleRowColumnHeaderData('facet', null, childIndependentFieldsWithStep));\n }\n\n return data;\n }\n\n public assemble() {\n const data: VgData[] = [];\n let crossedDataName = null;\n const childIndependentFieldsWithStep = this.getChildIndependentFieldsWithStep();\n\n const {column, row, facet} = this;\n\n if (column && row && (childIndependentFieldsWithStep.x || childIndependentFieldsWithStep.y)) {\n // Need to create a cross dataset to correctly calculate cardinality\n crossedDataName = `cross_${this.column.name}_${this.row.name}`;\n\n const fields: string[] = [].concat(\n childIndependentFieldsWithStep.x ?? [],\n childIndependentFieldsWithStep.y ?? []\n );\n const ops = fields.map((): AggregateOp => 'distinct');\n\n data.push({\n name: crossedDataName,\n source: this.data,\n transform: [\n {\n type: 'aggregate',\n groupby: this.fields,\n fields,\n ops\n }\n ]\n });\n }\n\n for (const channel of [COLUMN, ROW]) {\n if (this[channel]) {\n data.push(this.assembleRowColumnHeaderData(channel, crossedDataName, childIndependentFieldsWithStep));\n }\n }\n\n if (facet) {\n const facetData = this.assembleFacetHeaderData(childIndependentFieldsWithStep);\n if (facetData) {\n data.push(...facetData);\n }\n }\n\n return data;\n }\n}\n","import {FormulaTransform as VgFormulaTransform, SignalRef} from 'vega';\nimport {isNumber, isString} from 'vega-util';\nimport {AncestorParse} from '.';\nimport {isMinMaxOp} from '../../aggregate';\nimport {getMainRangeChannel, SingleDefChannel} from '../../channel';\nimport {\n isFieldDef,\n isFieldOrDatumDefForTimeFormat,\n isScaleFieldDef,\n isTypedFieldDef,\n TypedFieldDef\n} from '../../channeldef';\nimport {isGenerator, Parse} from '../../data';\nimport {DateTime, isDateTime} from '../../datetime';\nimport * as log from '../../log';\nimport {forEachLeaf} from '../../logical';\nimport {isPathMark} from '../../mark';\nimport {\n isFieldEqualPredicate,\n isFieldGTEPredicate,\n isFieldGTPredicate,\n isFieldLTEPredicate,\n isFieldLTPredicate,\n isFieldOneOfPredicate,\n isFieldPredicate,\n isFieldRangePredicate\n} from '../../predicate';\nimport {isSortField} from '../../sort';\nimport {FilterTransform} from '../../transform';\nimport {accessPathDepth, accessPathWithDatum, Dict, duplicate, hash, keys, removePathFromField} from '../../util';\nimport {signalRefOrValue} from '../common';\nimport {isFacetModel, isUnitModel, Model} from '../model';\nimport {Split} from '../split';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * Remove quotes from a string.\n */\nfunction unquote(pattern: string) {\n if (\n (pattern[0] === \"'\" && pattern[pattern.length - 1] === \"'\") ||\n (pattern[0] === '\"' && pattern[pattern.length - 1] === '\"')\n ) {\n return pattern.slice(1, -1);\n }\n return pattern;\n}\n\n/**\n * @param field The field.\n * @param parse What to parse the field as.\n */\nfunction parseExpression(field: string, parse: string): string {\n const f = accessPathWithDatum(field);\n if (parse === 'number') {\n return `toNumber(${f})`;\n } else if (parse === 'boolean') {\n return `toBoolean(${f})`;\n } else if (parse === 'string') {\n return `toString(${f})`;\n } else if (parse === 'date') {\n return `toDate(${f})`;\n } else if (parse === 'flatten') {\n return f;\n } else if (parse.startsWith('date:')) {\n const specifier = unquote(parse.slice(5, parse.length));\n return `timeParse(${f},'${specifier}')`;\n } else if (parse.startsWith('utc:')) {\n const specifier = unquote(parse.slice(4, parse.length));\n return `utcParse(${f},'${specifier}')`;\n } else {\n log.warn(log.message.unrecognizedParse(parse));\n return null;\n }\n}\n\nexport function getImplicitFromFilterTransform(transform: FilterTransform) {\n const implicit: Dict = {};\n forEachLeaf(transform.filter, filter => {\n if (isFieldPredicate(filter)) {\n // Automatically add a parse node for filters with filter objects\n let val: string | number | boolean | DateTime | SignalRef = null;\n\n // For EqualFilter, just use the equal property.\n // For RangeFilter and OneOfFilter, all array members should have\n // the same type, so we only use the first one.\n if (isFieldEqualPredicate(filter)) {\n val = signalRefOrValue(filter.equal);\n } else if (isFieldLTEPredicate(filter)) {\n val = signalRefOrValue(filter.lte);\n } else if (isFieldLTPredicate(filter)) {\n val = signalRefOrValue(filter.lt);\n } else if (isFieldGTPredicate(filter)) {\n val = signalRefOrValue(filter.gt);\n } else if (isFieldGTEPredicate(filter)) {\n val = signalRefOrValue(filter.gte);\n } else if (isFieldRangePredicate(filter)) {\n val = filter.range[0];\n } else if (isFieldOneOfPredicate(filter)) {\n val = (filter.oneOf ?? filter['in'])[0];\n } // else -- for filter expression, we can't infer anything\n\n if (val) {\n if (isDateTime(val)) {\n implicit[filter.field] = 'date';\n } else if (isNumber(val)) {\n implicit[filter.field] = 'number';\n } else if (isString(val)) {\n implicit[filter.field] = 'string';\n }\n }\n\n if (filter.timeUnit) {\n implicit[filter.field] = 'date';\n }\n }\n });\n\n return implicit;\n}\n\n/**\n * Creates a parse node for implicit parsing from a model and updates ancestorParse.\n */\nexport function getImplicitFromEncoding(model: Model) {\n const implicit: Dict = {};\n\n function add(fieldDef: TypedFieldDef) {\n if (isFieldOrDatumDefForTimeFormat(fieldDef)) {\n implicit[fieldDef.field] = 'date';\n } else if (\n fieldDef.type === 'quantitative' &&\n isMinMaxOp(fieldDef.aggregate) // we need to parse numbers to support correct min and max\n ) {\n implicit[fieldDef.field] = 'number';\n } else if (accessPathDepth(fieldDef.field) > 1) {\n // For non-date/non-number (strings and booleans), derive a flattened field for a referenced nested field.\n // (Parsing numbers / dates already flattens numeric and temporal fields.)\n if (!(fieldDef.field in implicit)) {\n implicit[fieldDef.field] = 'flatten';\n }\n } else if (isScaleFieldDef(fieldDef) && isSortField(fieldDef.sort) && accessPathDepth(fieldDef.sort.field) > 1) {\n // Flatten fields that we sort by but that are not otherwise flattened.\n if (!(fieldDef.sort.field in implicit)) {\n implicit[fieldDef.sort.field] = 'flatten';\n }\n }\n }\n\n if (isUnitModel(model) || isFacetModel(model)) {\n // Parse encoded fields\n model.forEachFieldDef((fieldDef, channel) => {\n if (isTypedFieldDef(fieldDef)) {\n add(fieldDef);\n } else {\n const mainChannel = getMainRangeChannel(channel);\n const mainFieldDef = model.fieldDef(mainChannel as SingleDefChannel) as TypedFieldDef;\n add({\n ...fieldDef,\n type: mainFieldDef.type\n });\n }\n });\n }\n\n // Parse quantitative dimension fields of path marks as numbers so that we sort them correctly.\n if (isUnitModel(model)) {\n const {mark, markDef, encoding} = model;\n if (\n isPathMark(mark) &&\n // No need to sort by dimension if we have a connected scatterplot (order channel is present)\n !model.encoding.order\n ) {\n const dimensionChannel = markDef.orient === 'horizontal' ? 'y' : 'x';\n const dimensionChannelDef = encoding[dimensionChannel];\n if (\n isFieldDef(dimensionChannelDef) &&\n dimensionChannelDef.type === 'quantitative' &&\n !(dimensionChannelDef.field in implicit)\n ) {\n implicit[dimensionChannelDef.field] = 'number';\n }\n }\n }\n\n return implicit;\n}\n\n/**\n * Creates a parse node for implicit parsing from a model and updates ancestorParse.\n */\nexport function getImplicitFromSelection(model: Model) {\n const implicit: Dict = {};\n\n if (isUnitModel(model) && model.component.selection) {\n for (const name of keys(model.component.selection)) {\n const selCmpt = model.component.selection[name];\n for (const proj of selCmpt.project.items) {\n if (!proj.channel && accessPathDepth(proj.field) > 1) {\n implicit[proj.field] = 'flatten';\n }\n }\n }\n }\n\n return implicit;\n}\n\nexport class ParseNode extends DataFlowNode {\n private _parse: Parse;\n\n public clone() {\n return new ParseNode(null, duplicate(this._parse));\n }\n\n constructor(parent: DataFlowNode, parse: Parse) {\n super(parent);\n\n this._parse = parse;\n }\n\n public hash() {\n return `Parse ${hash(this._parse)}`;\n }\n\n /**\n * Creates a parse node from a data.format.parse and updates ancestorParse.\n */\n public static makeExplicit(parent: DataFlowNode, model: Model, ancestorParse: AncestorParse) {\n // Custom parse\n let explicit = {};\n const data = model.data;\n if (!isGenerator(data) && data && data.format && data.format.parse) {\n explicit = data.format.parse;\n }\n\n return this.makeWithAncestors(parent, explicit, {}, ancestorParse);\n }\n\n /**\n * Creates a parse node from \"explicit\" parse and \"implicit\" parse and updates ancestorParse.\n */\n public static makeWithAncestors(\n parent: DataFlowNode,\n explicit: Parse,\n implicit: Parse,\n ancestorParse: AncestorParse\n ) {\n // We should not parse what has already been parsed in a parent (explicitly or implicitly) or what has been derived (maked as \"derived\"). We also don't need to flatten a field that has already been parsed.\n for (const field of keys(implicit)) {\n const parsedAs = ancestorParse.getWithExplicit(field);\n if (parsedAs.value !== undefined) {\n // We always ignore derived fields even if they are implicitly defined because we expect users to create the right types.\n if (\n parsedAs.explicit ||\n parsedAs.value === implicit[field] ||\n parsedAs.value === 'derived' ||\n implicit[field] === 'flatten'\n ) {\n delete implicit[field];\n } else {\n log.warn(log.message.differentParse(field, implicit[field], parsedAs.value));\n }\n }\n }\n\n for (const field of keys(explicit)) {\n const parsedAs = ancestorParse.get(field);\n if (parsedAs !== undefined) {\n // Don't parse a field again if it has been parsed with the same type already.\n if (parsedAs === explicit[field]) {\n delete explicit[field];\n } else {\n log.warn(log.message.differentParse(field, explicit[field], parsedAs));\n }\n }\n }\n\n const parse = new Split(explicit, implicit);\n\n // add the format parse from this model so that children don't parse the same field again\n ancestorParse.copyAll(parse);\n\n // copy only non-null parses\n const p: Dict = {};\n for (const key of keys(parse.combine())) {\n const val = parse.get(key);\n if (val !== null) {\n p[key] = val;\n }\n }\n\n if (keys(p).length === 0 || ancestorParse.parseNothing) {\n return null;\n }\n\n return new ParseNode(parent, p);\n }\n\n public get parse() {\n return this._parse;\n }\n\n public merge(other: ParseNode) {\n this._parse = {...this._parse, ...other.parse};\n other.remove();\n }\n\n /**\n * Assemble an object for Vega's format.parse property.\n */\n public assembleFormatParse() {\n const formatParse: Dict = {};\n for (const field of keys(this._parse)) {\n const p = this._parse[field];\n if (accessPathDepth(field) === 1) {\n formatParse[field] = p;\n }\n }\n return formatParse;\n }\n\n // format parse depends and produces all fields in its parse\n public producedFields() {\n return new Set(keys(this._parse));\n }\n\n public dependentFields() {\n return new Set(keys(this._parse));\n }\n\n public assembleTransforms(onlyNested = false): VgFormulaTransform[] {\n return keys(this._parse)\n .filter(field => (onlyNested ? accessPathDepth(field) > 1 : true))\n .map(field => {\n const expr = parseExpression(field, this._parse[field]);\n if (!expr) {\n return null;\n }\n\n const formula: VgFormulaTransform = {\n type: 'formula',\n expr,\n as: removePathFromField(field) // Vega output is always flattened\n };\n return formula;\n })\n .filter(t => t !== null);\n }\n}\n","import {SELECTION_ID} from '../../selection';\nimport {IdentifierTransform as VgIdentifierTransform} from 'vega';\nimport {DataFlowNode} from './dataflow';\n\nexport class IdentifierNode extends DataFlowNode {\n public clone() {\n return new IdentifierNode(null);\n }\n\n constructor(parent: DataFlowNode) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set();\n }\n\n public producedFields() {\n return new Set([SELECTION_ID]);\n }\n\n public hash() {\n return 'Identifier';\n }\n\n public assemble(): VgIdentifierTransform {\n return {type: 'identifier', as: SELECTION_ID};\n }\n}\n","import {GraticuleTransform as VgGraticuleTransform} from 'vega';\nimport {GraticuleParams} from '../../data';\nimport {hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\nexport class GraticuleNode extends DataFlowNode {\n public clone() {\n return new GraticuleNode(null, this.params);\n }\n\n constructor(parent: DataFlowNode, private params: true | GraticuleParams) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set();\n }\n\n public producedFields(): undefined {\n return undefined; // there should never be a node before graticule\n }\n\n public hash() {\n return `Graticule ${hash(this.params)}`;\n }\n\n public assemble(): VgGraticuleTransform {\n return {\n type: 'graticule',\n ...(this.params === true ? {} : this.params)\n };\n }\n}\n","import {SequenceParams} from '../../data';\nimport {hash} from '../../util';\nimport {SequenceTransform as VgSequenceTransform} from 'vega';\nimport {DataFlowNode} from './dataflow';\n\nexport class SequenceNode extends DataFlowNode {\n public clone() {\n return new SequenceNode(null, this.params);\n }\n\n constructor(parent: DataFlowNode, private params: SequenceParams) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set();\n }\n\n public producedFields() {\n return new Set([this.params.as ?? 'data']);\n }\n\n public hash() {\n return `Hash ${hash(this.params)}`;\n }\n\n public assemble(): VgSequenceTransform {\n return {\n type: 'sequence',\n ...this.params\n };\n }\n}\n","import {\n Data,\n DataFormat,\n DataFormatType,\n isGenerator,\n isInlineData,\n isNamedData,\n isSphereGenerator,\n isUrlData\n} from '../../data';\nimport {contains, isEmpty, omit} from '../../util';\nimport {VgData} from '../../vega.schema';\nimport {DataFlowNode} from './dataflow';\n\nexport class SourceNode extends DataFlowNode {\n private _data: Partial;\n\n private _name: string;\n\n private _generator: boolean;\n\n constructor(data: Data) {\n super(null); // source cannot have parent\n\n data ??= {name: 'source'};\n let format;\n\n if (!isGenerator(data)) {\n format = data.format ? {...omit(data.format, ['parse'])} : ({} as DataFormat);\n }\n\n if (isInlineData(data)) {\n this._data = {values: data.values};\n } else if (isUrlData(data)) {\n this._data = {url: data.url};\n\n if (!format.type) {\n // Extract extension from URL using snippet from\n // http://stackoverflow.com/questions/680929/how-to-extract-extension-from-filename-string-in-javascript\n let defaultExtension = /(?:\\.([^.]+))?$/.exec(data.url)[1];\n if (!contains(['json', 'csv', 'tsv', 'dsv', 'topojson'], defaultExtension)) {\n defaultExtension = 'json';\n }\n\n // defaultExtension has type string but we ensure that it is DataFormatType above\n format.type = defaultExtension as DataFormatType;\n }\n } else if (isSphereGenerator(data)) {\n // hardwire GeoJSON sphere data into output specification\n this._data = {values: [{type: 'Sphere'}]};\n } else if (isNamedData(data) || isGenerator(data)) {\n this._data = {};\n }\n\n // set flag to check if generator\n this._generator = isGenerator(data);\n\n // any dataset can be named\n if (data.name) {\n this._name = data.name;\n }\n\n if (format && !isEmpty(format)) {\n this._data.format = format;\n }\n }\n\n public dependentFields() {\n return new Set();\n }\n\n public producedFields(): undefined {\n return undefined; // we don't know what this source produces\n }\n\n get data() {\n return this._data;\n }\n\n public hasName(): boolean {\n return !!this._name;\n }\n\n get isGenerator() {\n return this._generator;\n }\n get dataName() {\n return this._name;\n }\n\n set dataName(name: string) {\n this._name = name;\n }\n\n set parent(parent: DataFlowNode) {\n throw new Error('Source nodes have to be roots.');\n }\n\n public remove() {\n throw new Error('Source nodes are roots and cannot be removed.');\n }\n\n public hash(): string | number {\n throw new Error('Cannot hash sources');\n }\n\n public assemble(): VgData {\n return {\n name: this._name,\n ...this._data,\n transform: []\n };\n }\n}\n","import {DataFlowNode} from './dataflow';\nimport {GraticuleNode} from './graticule';\nimport {SequenceNode} from './sequence';\nimport {SourceNode} from './source';\n\n/**\n * Whether this dataflow node is the source of the dataflow that produces data i.e. a source or a generator.\n */\nexport function isDataSourceNode(node: DataFlowNode) {\n return node instanceof SourceNode || node instanceof GraticuleNode || node instanceof SequenceNode;\n}\n\n/**\n * Abstract base class for Dataflow optimizers.\n * Contains only mutation handling logic. Subclasses need to implement iteration logic.\n */\nexport abstract class Optimizer {\n #modified: boolean;\n\n constructor() {\n this.#modified = false;\n }\n\n // Once true, #modified is never set to false\n public setModified() {\n this.#modified = true;\n }\n\n get modifiedFlag() {\n return this.#modified;\n }\n\n /**\n * Run the optimization for the tree with the provided root.\n */\n public abstract optimize(root: DataFlowNode): boolean;\n}\n\n/**\n * Starts from a node and runs the optimization function (the \"run\" method) upwards to the root,\n * depending on the continue and modified flag values returned by the optimization function.\n */\nexport abstract class BottomUpOptimizer extends Optimizer {\n /**\n * Run the optimizer at the node. This method should not change the parent of the passed in node (it should only affect children).\n */\n public abstract run(node: DataFlowNode): void;\n\n /**\n * Compute a map of node depths that we can use to determine a topological sort order.\n */\n private getNodeDepths(\n node: DataFlowNode,\n depth: number,\n depths: Map\n ): Map {\n depths.set(node, depth);\n\n for (const child of node.children) {\n this.getNodeDepths(child, depth + 1, depths);\n }\n\n return depths;\n }\n\n /**\n * Run the optimizer on all nodes starting from the leaves.\n */\n public optimize(node: DataFlowNode): boolean {\n const depths = this.getNodeDepths(node, 0, new Map());\n const topologicalSort = [...depths.entries()].sort((a, b) => b[1] - a[1]);\n\n for (const tuple of topologicalSort) {\n this.run(tuple[0]);\n }\n\n return this.modifiedFlag;\n }\n}\n\n/**\n * The optimizer function (the \"run\" method), is invoked on the given node and then continues recursively.\n */\nexport abstract class TopDownOptimizer extends Optimizer {\n /**\n * Run the optimizer at the node.\n */\n public abstract run(node: DataFlowNode): void;\n\n /**\n * Run the optimizer depth first on all nodes starting from the roots.\n */\n public optimize(node: DataFlowNode): boolean {\n this.run(node);\n\n for (const child of node.children) {\n this.optimize(child);\n }\n\n return this.modifiedFlag;\n }\n}\n","import {Parse} from '../../data';\nimport {Dict, fieldIntersection, hash, hasIntersection, isEmpty, keys, some} from '../../util';\nimport {Model} from '../model';\nimport {requiresSelectionId} from '../selection';\nimport {AggregateNode} from './aggregate';\nimport {BinNode} from './bin';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {FacetNode} from './facet';\nimport {FilterNode} from './filter';\nimport {ParseNode} from './formatparse';\nimport {IdentifierNode} from './identifier';\nimport {BottomUpOptimizer, isDataSourceNode, Optimizer, TopDownOptimizer} from './optimizer';\nimport {SourceNode} from './source';\nimport {TimeUnitNode} from './timeunit';\n\n/**\n * Merge identical nodes at forks by comparing hashes.\n *\n * Does not need to iterate from leaves so we implement this with recursion as it's a bit simpler.\n */\nexport class MergeIdenticalNodes extends TopDownOptimizer {\n public mergeNodes(parent: DataFlowNode, nodes: DataFlowNode[]) {\n const mergedNode = nodes.shift();\n for (const node of nodes) {\n parent.removeChild(node);\n node.parent = mergedNode;\n node.remove();\n }\n }\n\n public run(node: DataFlowNode) {\n const hashes = node.children.map(x => x.hash());\n const buckets: {hash?: DataFlowNode[]} = {};\n\n for (let i = 0; i < hashes.length; i++) {\n if (buckets[hashes[i]] === undefined) {\n buckets[hashes[i]] = [node.children[i]];\n } else {\n buckets[hashes[i]].push(node.children[i]);\n }\n }\n\n for (const k of keys(buckets)) {\n if (buckets[k].length > 1) {\n this.setModified();\n this.mergeNodes(node, buckets[k]);\n }\n }\n }\n}\n\n/**\n * Optimizer that removes identifier nodes that are not needed for selections.\n */\nexport class RemoveUnnecessaryIdentifierNodes extends TopDownOptimizer {\n private requiresSelectionId: boolean;\n\n constructor(model: Model) {\n super();\n this.requiresSelectionId = model && requiresSelectionId(model);\n }\n\n public run(node: DataFlowNode) {\n if (node instanceof IdentifierNode) {\n // Only preserve IdentifierNodes if we have default discrete selections\n // in our model tree, and if the nodes come after tuple producing nodes.\n if (\n !(\n this.requiresSelectionId &&\n (isDataSourceNode(node.parent) || node.parent instanceof AggregateNode || node.parent instanceof ParseNode)\n )\n ) {\n this.setModified();\n node.remove();\n }\n }\n }\n}\n\n/**\n * Removes duplicate time unit nodes (as determined by the name of the output field) that may be generated due to\n * selections projected over time units. Only keeps the first time unit in any branch.\n *\n * This optimizer is a custom top down optimizer that keep track of produced fields in a branch.\n */\nexport class RemoveDuplicateTimeUnits extends Optimizer {\n public optimize(node: DataFlowNode): boolean {\n this.run(node, new Set());\n\n return this.modifiedFlag;\n }\n\n public run(node: DataFlowNode, timeUnitFields: Set) {\n let producedFields = new Set();\n\n if (node instanceof TimeUnitNode) {\n producedFields = node.producedFields();\n if (hasIntersection(producedFields, timeUnitFields)) {\n this.setModified();\n node.removeFormulas(timeUnitFields);\n if (node.producedFields.length === 0) {\n node.remove();\n }\n }\n }\n\n for (const child of node.children) {\n this.run(child, new Set([...timeUnitFields, ...producedFields]));\n }\n }\n}\n\n/**\n * Remove output nodes that are not required.\n */\nexport class RemoveUnnecessaryOutputNodes extends TopDownOptimizer {\n constructor() {\n super();\n }\n\n public run(node: DataFlowNode) {\n if (node instanceof OutputNode && !node.isRequired()) {\n this.setModified();\n node.remove();\n }\n }\n}\n\n/**\n * Move parse nodes up to forks and merges them if possible.\n */\nexport class MoveParseUp extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n if (isDataSourceNode(node)) {\n return;\n }\n\n if (node.numChildren() > 1) {\n // Don't move parse further up but continue with parent.\n return;\n }\n\n for (const child of node.children) {\n if (child instanceof ParseNode) {\n if (node instanceof ParseNode) {\n this.setModified();\n node.merge(child);\n } else {\n // Don't swap with nodes that produce something that the parse node depends on (e.g. lookup).\n if (fieldIntersection(node.producedFields(), child.dependentFields())) {\n continue;\n }\n this.setModified();\n child.swapWithParent();\n }\n }\n }\n\n return;\n }\n}\n\n/**\n * Inserts an intermediate ParseNode containing all non-conflicting parse fields and removes the empty ParseNodes.\n *\n * We assume that dependent paths that do not have a parse node can be just merged.\n */\nexport class MergeParse extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n const originalChildren = [...node.children];\n const parseChildren = node.children.filter((child): child is ParseNode => child instanceof ParseNode);\n\n if (node.numChildren() > 1 && parseChildren.length >= 1) {\n const commonParse: Parse = {};\n const conflictingParse = new Set();\n for (const parseNode of parseChildren) {\n const parse = parseNode.parse;\n for (const k of keys(parse)) {\n if (!(k in commonParse)) {\n commonParse[k] = parse[k];\n } else if (commonParse[k] !== parse[k]) {\n conflictingParse.add(k);\n }\n }\n }\n\n for (const field of conflictingParse) {\n delete commonParse[field];\n }\n\n if (!isEmpty(commonParse)) {\n this.setModified();\n const mergedParseNode = new ParseNode(node, commonParse);\n for (const childNode of originalChildren) {\n if (childNode instanceof ParseNode) {\n for (const key of keys(commonParse)) {\n delete childNode.parse[key];\n }\n }\n\n node.removeChild(childNode);\n childNode.parent = mergedParseNode;\n\n // remove empty parse nodes\n if (childNode instanceof ParseNode && keys(childNode.parse).length === 0) {\n childNode.remove();\n }\n }\n }\n }\n }\n}\n\n/**\n * Repeatedly remove leaf nodes that are not output or facet nodes.\n * The reason is that we don't need subtrees that don't have any output nodes.\n * Facet nodes are needed for the row or column domains.\n */\nexport class RemoveUnusedSubtrees extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n if (node instanceof OutputNode || node.numChildren() > 0 || node instanceof FacetNode) {\n // no need to continue with parent because it is output node or will have children (there was a fork)\n } else if (node instanceof SourceNode) {\n // ignore empty unused sources as they will be removed in optimizationDataflowHelper\n } else {\n this.setModified();\n node.remove();\n }\n }\n}\n\n/**\n * Merge adjacent time unit nodes.\n */\nexport class MergeTimeUnits extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n const timeUnitChildren = node.children.filter((x): x is TimeUnitNode => x instanceof TimeUnitNode);\n const combination = timeUnitChildren.pop();\n for (const timeUnit of timeUnitChildren) {\n this.setModified();\n combination.merge(timeUnit);\n }\n }\n}\n\nexport class MergeAggregates extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n const aggChildren = node.children.filter((child): child is AggregateNode => child instanceof AggregateNode);\n\n // Object which we'll use to map the fields which an aggregate is grouped by to\n // the set of aggregates with that grouping. This is useful as only aggregates\n // with the same group by can be merged\n const groupedAggregates: Dict = {};\n\n // Build groupedAggregates\n for (const agg of aggChildren) {\n const groupBys = hash(agg.groupBy);\n if (!(groupBys in groupedAggregates)) {\n groupedAggregates[groupBys] = [];\n }\n groupedAggregates[groupBys].push(agg);\n }\n\n // Merge aggregateNodes with same key in groupedAggregates\n for (const group of keys(groupedAggregates)) {\n const mergeableAggs = groupedAggregates[group];\n if (mergeableAggs.length > 1) {\n const mergedAggs = mergeableAggs.pop();\n for (const agg of mergeableAggs) {\n if (mergedAggs.merge(agg)) {\n node.removeChild(agg);\n agg.parent = mergedAggs;\n agg.remove();\n\n this.setModified();\n }\n }\n }\n }\n }\n}\n\n/**\n * Merge bin nodes and move them up through forks. Stop at filters, parse, identifier as we want them to stay before the bin node.\n */\nexport class MergeBins extends BottomUpOptimizer {\n constructor(private model: Model) {\n super();\n }\n\n public run(node: DataFlowNode) {\n const moveBinsUp = !(\n isDataSourceNode(node) ||\n node instanceof FilterNode ||\n node instanceof ParseNode ||\n node instanceof IdentifierNode\n );\n\n const promotableBins: BinNode[] = [];\n const remainingBins: BinNode[] = [];\n\n for (const child of node.children) {\n if (child instanceof BinNode) {\n if (moveBinsUp && !fieldIntersection(node.producedFields(), child.dependentFields())) {\n promotableBins.push(child);\n } else {\n remainingBins.push(child);\n }\n }\n }\n\n if (promotableBins.length > 0) {\n const promotedBin = promotableBins.pop();\n for (const bin of promotableBins) {\n promotedBin.merge(bin, this.model.renameSignal.bind(this.model));\n }\n this.setModified();\n if (node instanceof BinNode) {\n node.merge(promotedBin, this.model.renameSignal.bind(this.model));\n } else {\n promotedBin.swapWithParent();\n }\n }\n if (remainingBins.length > 1) {\n const remainingBin = remainingBins.pop();\n for (const bin of remainingBins) {\n remainingBin.merge(bin, this.model.renameSignal.bind(this.model));\n }\n this.setModified();\n }\n }\n}\n\n/**\n * This optimizer takes output nodes that are at a fork and moves them before the fork.\n *\n * The algorithm iterates over the children and tries to find the last output node in a chain of output nodes.\n * It then moves all output nodes before that main output node. All other children (and the children of the output nodes)\n * are inserted after the main output node.\n */\nexport class MergeOutputs extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n const children = [...node.children];\n const hasOutputChild = some(children, child => child instanceof OutputNode);\n\n if (!hasOutputChild || node.numChildren() <= 1) {\n return;\n }\n\n const otherChildren: DataFlowNode[] = [];\n\n // The output node we will connect all other nodes to.\n // Output nodes will be added before the new node, other nodes after.\n let mainOutput: OutputNode;\n\n for (const child of children) {\n if (child instanceof OutputNode) {\n let lastOutput = child;\n\n while (lastOutput.numChildren() === 1) {\n const [theChild] = lastOutput.children;\n if (theChild instanceof OutputNode) {\n lastOutput = theChild;\n } else {\n break;\n }\n }\n\n otherChildren.push(...lastOutput.children);\n\n if (mainOutput) {\n // Move the output nodes before the mainOutput. We do this by setting\n // the parent of the first not to the parent of the main output and\n // the main output's parent to the last output.\n\n // note: the child is the first output\n node.removeChild(child);\n child.parent = mainOutput.parent;\n\n mainOutput.parent.removeChild(mainOutput);\n mainOutput.parent = lastOutput;\n\n this.setModified();\n } else {\n mainOutput = lastOutput;\n }\n } else {\n otherChildren.push(child);\n }\n }\n\n if (otherChildren.length) {\n this.setModified();\n for (const child of otherChildren) {\n child.parent.removeChild(child);\n child.parent = mainOutput;\n }\n }\n }\n}\n","import {AggregateOp} from 'vega';\nimport {vgField} from '../../channeldef';\nimport {JoinAggregateTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {VgJoinAggregateTransform} from '../../vega.schema';\nimport {JoinAggregateFieldDef} from '../../transform';\nimport {unique} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for the join aggregate transform nodes.\n */\nexport class JoinAggregateTransformNode extends DataFlowNode {\n public clone() {\n return new JoinAggregateTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private readonly transform: JoinAggregateTransform) {\n super(parent);\n }\n\n public addDimensions(fields: string[]) {\n this.transform.groupby = unique(this.transform.groupby.concat(fields), d => d);\n }\n\n public dependentFields() {\n const out = new Set();\n\n if (this.transform.groupby) {\n this.transform.groupby.forEach(out.add, out);\n }\n this.transform.joinaggregate\n .map(w => w.field)\n .filter(f => f !== undefined)\n .forEach(out.add, out);\n\n return out;\n }\n\n public producedFields() {\n return new Set(this.transform.joinaggregate.map(this.getDefaultName));\n }\n\n private getDefaultName(joinAggregateFieldDef: JoinAggregateFieldDef): string {\n return joinAggregateFieldDef.as ?? vgField(joinAggregateFieldDef);\n }\n\n public hash() {\n return `JoinAggregateTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgJoinAggregateTransform {\n const fields: string[] = [];\n const ops: AggregateOp[] = [];\n const as: string[] = [];\n for (const joinaggregate of this.transform.joinaggregate) {\n ops.push(joinaggregate.op);\n as.push(this.getDefaultName(joinaggregate));\n fields.push(joinaggregate.field === undefined ? null : joinaggregate.field);\n }\n\n const groupby = this.transform.groupby;\n\n return {\n type: 'joinaggregate',\n as,\n ops,\n fields,\n ...(groupby !== undefined ? {groupby} : {})\n };\n }\n}\n","import {Transforms as VgTransform} from 'vega';\nimport {isArray, isString} from 'vega-util';\nimport {FieldName, getFieldDef, isFieldDef, PositionFieldDef, vgField} from '../../channeldef';\nimport {SortFields, SortOrder} from '../../sort';\nimport {StackOffset} from '../../stack';\nimport {StackTransform} from '../../transform';\nimport {duplicate, getFirstDefined, hash} from '../../util';\nimport {sortParams} from '../common';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nfunction getStackByFields(model: UnitModel): string[] {\n return model.stack.stackBy.reduce((fields, by) => {\n const fieldDef = by.fieldDef;\n\n const _field = vgField(fieldDef);\n if (_field) {\n fields.push(_field);\n }\n return fields;\n }, [] as string[]);\n}\n\nexport interface StackComponent {\n /**\n * Faceted field.\n */\n facetby: string[];\n\n dimensionFieldDef?: PositionFieldDef;\n\n /**\n * Stack measure's field. Used in makeFromEncoding.\n */\n stackField: string;\n\n /**\n * Level of detail fields for each level in the stacked charts such as color or detail.\n * Used in makeFromEncoding.\n */\n stackby?: string[];\n\n /**\n * Field that determines order of levels in the stacked charts.\n * Used in both but optional in transform.\n */\n sort: SortFields;\n\n /** Mode for stacking marks.\n */\n offset: StackOffset;\n\n /**\n * Whether to impute the data before stacking. Used only in makeFromEncoding.\n */\n impute?: boolean;\n\n /**\n * The data fields to group by.\n */\n groupby?: FieldName[];\n /**\n * Output field names of each stack field.\n */\n as: [FieldName, FieldName];\n}\n\nfunction isValidAsArray(as: string[] | string): as is string[] {\n return isArray(as) && as.every(s => isString(s)) && as.length > 1;\n}\n\nexport class StackNode extends DataFlowNode {\n private _stack: StackComponent;\n\n public clone() {\n return new StackNode(null, duplicate(this._stack));\n }\n\n constructor(parent: DataFlowNode, stack: StackComponent) {\n super(parent);\n\n this._stack = stack;\n }\n\n public static makeFromTransform(parent: DataFlowNode, stackTransform: StackTransform) {\n const {stack, groupby, as, offset = 'zero'} = stackTransform;\n\n const sortFields: string[] = [];\n const sortOrder: SortOrder[] = [];\n if (stackTransform.sort !== undefined) {\n for (const sortField of stackTransform.sort) {\n sortFields.push(sortField.field);\n sortOrder.push(getFirstDefined(sortField.order, 'ascending'));\n }\n }\n const sort: SortFields = {\n field: sortFields,\n order: sortOrder\n };\n let normalizedAs: [string, string];\n if (isValidAsArray(as)) {\n normalizedAs = as;\n } else if (isString(as)) {\n normalizedAs = [as, `${as}_end`];\n } else {\n normalizedAs = [`${stackTransform.stack}_start`, `${stackTransform.stack}_end`];\n }\n\n return new StackNode(parent, {\n stackField: stack,\n groupby,\n offset,\n sort,\n facetby: [],\n as: normalizedAs\n });\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: UnitModel) {\n const stackProperties = model.stack;\n const {encoding} = model;\n\n if (!stackProperties) {\n return null;\n }\n\n const {groupbyChannel, fieldChannel, offset, impute} = stackProperties;\n\n let dimensionFieldDef: PositionFieldDef;\n if (groupbyChannel) {\n const cDef = encoding[groupbyChannel];\n dimensionFieldDef = getFieldDef(cDef) as PositionFieldDef; // Fair to cast as groupByChannel is always either x or y\n }\n\n const stackby = getStackByFields(model);\n const orderDef = model.encoding.order;\n\n let sort: SortFields;\n if (isArray(orderDef) || isFieldDef(orderDef)) {\n sort = sortParams(orderDef);\n } else {\n // default = descending by stackFields\n // FIXME is the default here correct for binned fields?\n sort = stackby.reduce(\n (s, field) => {\n s.field.push(field);\n s.order.push(fieldChannel === 'y' ? 'descending' : 'ascending');\n return s;\n },\n {field: [], order: []}\n );\n }\n\n return new StackNode(parent, {\n dimensionFieldDef,\n stackField: model.vgField(fieldChannel),\n facetby: [],\n stackby,\n sort,\n offset,\n impute,\n as: [\n model.vgField(fieldChannel, {suffix: 'start', forAs: true}),\n model.vgField(fieldChannel, {suffix: 'end', forAs: true})\n ]\n });\n }\n\n get stack(): StackComponent {\n return this._stack;\n }\n\n public addDimensions(fields: string[]) {\n this._stack.facetby.push(...fields);\n }\n\n public dependentFields() {\n const out = new Set();\n\n out.add(this._stack.stackField);\n\n this.getGroupbyFields().forEach(out.add, out);\n this._stack.facetby.forEach(out.add, out);\n this._stack.sort.field.forEach(out.add, out);\n\n return out;\n }\n\n public producedFields() {\n return new Set(this._stack.as);\n }\n\n public hash() {\n return `Stack ${hash(this._stack)}`;\n }\n\n private getGroupbyFields() {\n const {dimensionFieldDef, impute, groupby} = this._stack;\n if (dimensionFieldDef) {\n if (dimensionFieldDef.bin) {\n if (impute) {\n // For binned group by field with impute, we calculate bin_mid\n // as we cannot impute two fields simultaneously\n return [vgField(dimensionFieldDef, {binSuffix: 'mid'})];\n }\n return [\n // For binned group by field without impute, we need both bin (start) and bin_end\n vgField(dimensionFieldDef, {}),\n vgField(dimensionFieldDef, {binSuffix: 'end'})\n ];\n }\n return [vgField(dimensionFieldDef)];\n }\n return groupby ?? [];\n }\n\n public assemble(): VgTransform[] {\n const transform: VgTransform[] = [];\n const {facetby, dimensionFieldDef, stackField: field, stackby, sort, offset, impute, as} = this._stack;\n\n // Impute\n if (impute && dimensionFieldDef) {\n const {bandPosition = 0.5, bin} = dimensionFieldDef;\n if (bin) {\n // As we can only impute one field at a time, we need to calculate\n // mid point for a binned field\n transform.push({\n type: 'formula',\n expr:\n `${bandPosition}*` +\n vgField(dimensionFieldDef, {expr: 'datum'}) +\n `+${1 - bandPosition}*` +\n vgField(dimensionFieldDef, {expr: 'datum', binSuffix: 'end'}),\n as: vgField(dimensionFieldDef, {binSuffix: 'mid', forAs: true})\n });\n }\n\n transform.push({\n type: 'impute',\n field,\n groupby: [...stackby, ...facetby],\n key: vgField(dimensionFieldDef, {binSuffix: 'mid'}),\n method: 'value',\n value: 0\n });\n }\n\n // Stack\n transform.push({\n type: 'stack',\n groupby: [...this.getGroupbyFields(), ...facetby],\n field,\n sort,\n as,\n offset\n });\n\n return transform;\n }\n}\n","import {AggregateOp, WindowTransform as VgWindowTransform} from 'vega';\nimport {isAggregateOp} from '../../aggregate';\nimport {vgField} from '../../channeldef';\nimport {SortOrder} from '../../sort';\nimport {WindowFieldDef, WindowOnlyOp, WindowTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {VgComparator, VgJoinAggregateTransform} from '../../vega.schema';\nimport {unique} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for the window transform nodes\n */\nexport class WindowTransformNode extends DataFlowNode {\n public clone() {\n return new WindowTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private readonly transform: WindowTransform) {\n super(parent);\n }\n\n public addDimensions(fields: string[]) {\n this.transform.groupby = unique(this.transform.groupby.concat(fields), d => d);\n }\n\n public dependentFields() {\n const out = new Set();\n\n (this.transform.groupby ?? []).forEach(out.add, out);\n (this.transform.sort ?? []).forEach(m => out.add(m.field));\n\n this.transform.window\n .map(w => w.field)\n .filter(f => f !== undefined)\n .forEach(out.add, out);\n\n return out;\n }\n\n public producedFields() {\n return new Set(this.transform.window.map(this.getDefaultName));\n }\n\n private getDefaultName(windowFieldDef: WindowFieldDef): string {\n return windowFieldDef.as ?? vgField(windowFieldDef);\n }\n\n public hash() {\n return `WindowTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgWindowTransform | VgJoinAggregateTransform {\n const fields: string[] = [];\n const ops: (AggregateOp | WindowOnlyOp)[] = [];\n const as: string[] = [];\n const params = [];\n\n for (const window of this.transform.window) {\n ops.push(window.op);\n as.push(this.getDefaultName(window));\n params.push(window.param === undefined ? null : window.param);\n fields.push(window.field === undefined ? null : window.field);\n }\n\n const frame = this.transform.frame;\n const groupby = this.transform.groupby;\n\n if (frame && frame[0] === null && frame[1] === null && ops.every(o => isAggregateOp(o))) {\n // when the window does not rely on any particular window ops or frame, switch to a simpler and more efficient joinaggregate\n return {\n type: 'joinaggregate',\n as,\n ops: ops as AggregateOp[],\n fields,\n ...(groupby !== undefined ? {groupby} : {})\n } as VgJoinAggregateTransform;\n }\n\n const sortFields: string[] = [];\n const sortOrder: SortOrder[] = [];\n if (this.transform.sort !== undefined) {\n for (const sortField of this.transform.sort) {\n sortFields.push(sortField.field);\n sortOrder.push(sortField.order ?? 'ascending');\n }\n }\n const sort: VgComparator = {\n field: sortFields,\n order: sortOrder\n };\n const ignorePeers = this.transform.ignorePeers;\n\n return {\n type: 'window',\n params,\n as,\n ops,\n fields,\n sort,\n ...(ignorePeers !== undefined ? {ignorePeers} : {}),\n ...(groupby !== undefined ? {groupby} : {}),\n ...(frame !== undefined ? {frame} : {})\n } as VgWindowTransform;\n }\n}\n","import {DataSourceType} from '../../data';\nimport {AggregateNode} from './aggregate';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {FacetNode} from './facet';\nimport {JoinAggregateTransformNode} from './joinaggregate';\nimport {FACET_SCALE_PREFIX} from './optimize';\nimport {StackNode} from './stack';\nimport {WindowTransformNode} from './window';\n\n/**\n * Clones the subtree and ignores output nodes except for the leaves, which are renamed.\n */\nfunction cloneSubtree(facet: FacetNode) {\n function clone(node: DataFlowNode): DataFlowNode[] {\n if (!(node instanceof FacetNode)) {\n const copy = node.clone();\n\n if (copy instanceof OutputNode) {\n const newName = FACET_SCALE_PREFIX + copy.getSource();\n copy.setSource(newName);\n\n facet.model.component.data.outputNodes[newName] = copy;\n } else if (\n copy instanceof AggregateNode ||\n copy instanceof StackNode ||\n copy instanceof WindowTransformNode ||\n copy instanceof JoinAggregateTransformNode\n ) {\n copy.addDimensions(facet.fields);\n }\n for (const n of node.children.flatMap(clone)) {\n n.parent = copy;\n }\n\n return [copy];\n }\n\n return node.children.flatMap(clone);\n }\n return clone;\n}\n\n/**\n * Move facet nodes down to the next fork or output node. Also pull the main output with the facet node.\n * After moving down the facet node, make a copy of the subtree and make it a child of the main output.\n */\nexport function moveFacetDown(node: DataFlowNode) {\n if (node instanceof FacetNode) {\n if (node.numChildren() === 1 && !(node.children[0] instanceof OutputNode)) {\n // move down until we hit a fork or output node\n const child = node.children[0];\n\n if (\n child instanceof AggregateNode ||\n child instanceof StackNode ||\n child instanceof WindowTransformNode ||\n child instanceof JoinAggregateTransformNode\n ) {\n child.addDimensions(node.fields);\n }\n\n child.swapWithParent();\n moveFacetDown(node);\n } else {\n // move main to facet\n\n const facetMain = node.model.component.data.main;\n moveMainDownToFacet(facetMain);\n\n // replicate the subtree and place it before the facet's main node\n const cloner = cloneSubtree(node);\n const copy: DataFlowNode[] = node.children.map(cloner).flat();\n for (const c of copy) {\n c.parent = facetMain;\n }\n }\n } else {\n node.children.map(moveFacetDown);\n }\n}\n\nfunction moveMainDownToFacet(node: DataFlowNode) {\n if (node instanceof OutputNode && node.type === DataSourceType.Main) {\n if (node.numChildren() === 1) {\n const child = node.children[0];\n if (!(child instanceof FacetNode)) {\n child.swapWithParent();\n moveMainDownToFacet(node);\n }\n }\n }\n}\n","import {DataComponent} from '.';\nimport * as log from '../../log';\nimport {Model} from '../model';\nimport {DataFlowNode} from './dataflow';\nimport {Optimizer} from './optimizer';\nimport * as optimizers from './optimizers';\nimport {moveFacetDown} from './subtree';\n\nexport const FACET_SCALE_PREFIX = 'scale_';\nexport const MAX_OPTIMIZATION_RUNS = 5;\n\n/**\n * Iterates over a dataflow graph and checks whether all links are consistent.\n */\nexport function checkLinks(nodes: readonly DataFlowNode[]): boolean {\n for (const node of nodes) {\n for (const child of node.children) {\n if (child.parent !== node) {\n // log.error('Dataflow graph is inconsistent.', node, child);\n return false;\n }\n }\n\n if (!checkLinks(node.children)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Run the specified optimizer on the provided nodes.\n *\n * @param optimizer The optimizer instance to run.\n * @param nodes A set of nodes to optimize.\n */\nfunction runOptimizer(optimizer: Optimizer, nodes: DataFlowNode[]): boolean {\n let modified = false;\n\n for (const node of nodes) {\n modified = optimizer.optimize(node) || modified;\n }\n\n return modified;\n}\n\nfunction optimizationDataflowHelper(dataComponent: DataComponent, model: Model, firstPass: boolean) {\n let roots = dataComponent.sources;\n let modified = false;\n\n modified = runOptimizer(new optimizers.RemoveUnnecessaryOutputNodes(), roots) || modified;\n modified = runOptimizer(new optimizers.RemoveUnnecessaryIdentifierNodes(model), roots) || modified;\n\n // remove source nodes that don't have any children because they also don't have output nodes\n roots = roots.filter(r => r.numChildren() > 0);\n\n modified = runOptimizer(new optimizers.RemoveUnusedSubtrees(), roots) || modified;\n\n roots = roots.filter(r => r.numChildren() > 0);\n\n if (!firstPass) {\n // Only run these optimizations after the optimizer has moved down the facet node.\n // With this change, we can be more aggressive in the optimizations.\n modified = runOptimizer(new optimizers.MoveParseUp(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeBins(model), roots) || modified;\n modified = runOptimizer(new optimizers.RemoveDuplicateTimeUnits(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeParse(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeAggregates(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeTimeUnits(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeIdenticalNodes(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeOutputs(), roots) || modified;\n }\n\n dataComponent.sources = roots;\n\n return modified;\n}\n\n/**\n * Optimizes the dataflow of the passed in data component.\n */\nexport function optimizeDataflow(data: DataComponent, model: Model) {\n // check before optimizations\n checkLinks(data.sources);\n\n let firstPassCounter = 0;\n let secondPassCounter = 0;\n\n for (let i = 0; i < MAX_OPTIMIZATION_RUNS; i++) {\n if (!optimizationDataflowHelper(data, model, true)) {\n break;\n }\n firstPassCounter++;\n }\n\n // move facets down and make a copy of the subtree so that we can have scales at the top level\n data.sources.map(moveFacetDown);\n\n for (let i = 0; i < MAX_OPTIMIZATION_RUNS; i++) {\n if (!optimizationDataflowHelper(data, model, false)) {\n break;\n }\n secondPassCounter++;\n }\n\n // check after optimizations\n checkLinks(data.sources);\n\n if (Math.max(firstPassCounter, secondPassCounter) === MAX_OPTIMIZATION_RUNS) {\n log.warn(`Maximum optimization runs(${MAX_OPTIMIZATION_RUNS}) reached.`);\n }\n}\n","import {SignalRef} from 'vega';\n\nexport type Rename = (oldSignalName: string) => string;\n\n/**\n * A class that behaves like a SignalRef but lazily generates the signal.\n * The provided generator function should use `Model.getSignalName` to use the correct signal name.\n */\nexport class SignalRefWrapper implements SignalRef {\n constructor(exprGenerator: () => string) {\n Object.defineProperty(this, 'signal', {\n enumerable: true,\n get: exprGenerator\n });\n }\n\n public signal: string; // for ts\n\n public static fromName(rename: Rename, signalName: string) {\n return new SignalRefWrapper(() => rename(signalName));\n }\n}\n","import {SignalRef} from 'vega';\nimport {isObject, isString} from 'vega-util';\nimport {\n isAggregateOp,\n isArgmaxDef,\n isArgminDef,\n MULTIDOMAIN_SORT_OP_INDEX as UNIONDOMAIN_SORT_OP_INDEX,\n NonArgAggregateOp,\n SHARED_DOMAIN_OP_INDEX\n} from '../../aggregate';\nimport {isBinning, isBinParams, isParameterExtent} from '../../bin';\nimport {getSecondaryRangeChannel, isScaleChannel, ScaleChannel} from '../../channel';\nimport {\n binRequiresRange,\n getFieldOrDatumDef,\n hasBandEnd,\n isDatumDef,\n isFieldDef,\n ScaleDatumDef,\n ScaleFieldDef,\n TypedFieldDef,\n valueExpr,\n vgField\n} from '../../channeldef';\nimport {DataSourceType} from '../../data';\nimport {DateTime} from '../../datetime';\nimport {ExprRef} from '../../expr';\nimport * as log from '../../log';\nimport {Domain, hasDiscreteDomain, isDomainUnionWith, isParameterDomain, ScaleConfig, ScaleType} from '../../scale';\nimport {ParameterExtent} from '../../selection';\nimport {DEFAULT_SORT_OP, EncodingSortField, isSortArray, isSortByEncoding, isSortField} from '../../sort';\nimport {normalizeTimeUnit, TimeUnit, TimeUnitParams} from '../../timeunit';\nimport {Type} from '../../type';\nimport * as util from '../../util';\nimport {\n isDataRefDomain,\n isDataRefUnionedDomain,\n isFieldRefUnionDomain,\n isSignalRef,\n VgDomain,\n VgMultiFieldsRefWithSort,\n VgNonUnionDomain,\n VgScaleDataRefWithSort,\n VgSortField,\n VgUnionSortField\n} from '../../vega.schema';\nimport {getBinSignalName} from '../data/bin';\nimport {sortArrayIndexField} from '../data/calculate';\nimport {FACET_SCALE_PREFIX} from '../data/optimize';\nimport {isFacetModel, isUnitModel, Model} from '../model';\nimport {SignalRefWrapper} from '../signal';\nimport {Explicit, makeExplicit, makeImplicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponent, ScaleComponentIndex} from './component';\n\nexport function parseScaleDomain(model: Model) {\n if (isUnitModel(model)) {\n parseUnitScaleDomain(model);\n } else {\n parseNonUnitScaleDomain(model);\n }\n}\n\nfunction parseUnitScaleDomain(model: UnitModel) {\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n for (const channel of util.keys(localScaleComponents)) {\n const domains = parseDomainForChannel(model, channel);\n const localScaleCmpt = localScaleComponents[channel];\n localScaleCmpt.setWithExplicit('domains', domains);\n parseSelectionDomain(model, channel);\n\n if (model.component.data.isFaceted) {\n // get resolve from closest facet parent as this decides whether we need to refer to cloned subtree or not\n let facetParent: Model = model;\n while (!isFacetModel(facetParent) && facetParent.parent) {\n facetParent = facetParent.parent;\n }\n\n const resolve = facetParent.component.resolve.scale[channel];\n\n if (resolve === 'shared') {\n for (const domain of domains.value) {\n // Replace the scale domain with data output from a cloned subtree after the facet.\n if (isDataRefDomain(domain)) {\n // use data from cloned subtree (which is the same as data but with a prefix added once)\n domain.data = FACET_SCALE_PREFIX + domain.data.replace(FACET_SCALE_PREFIX, '');\n }\n }\n }\n }\n }\n}\n\nfunction parseNonUnitScaleDomain(model: Model) {\n for (const child of model.children) {\n parseScaleDomain(child);\n }\n\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n for (const channel of util.keys(localScaleComponents)) {\n let domains: Explicit;\n let selectionExtent: ParameterExtent = null;\n\n for (const child of model.children) {\n const childComponent = child.component.scales[channel];\n if (childComponent) {\n if (domains === undefined) {\n domains = childComponent.getWithExplicit('domains');\n } else {\n domains = mergeValuesWithExplicit(\n domains,\n childComponent.getWithExplicit('domains'),\n 'domains',\n 'scale',\n domainsTieBreaker\n );\n }\n\n const se = childComponent.get('selectionExtent');\n if (selectionExtent && se && selectionExtent.param !== se.param) {\n log.warn(log.message.NEEDS_SAME_SELECTION);\n }\n selectionExtent = se;\n }\n }\n\n localScaleComponents[channel].setWithExplicit('domains', domains);\n\n if (selectionExtent) {\n localScaleComponents[channel].set('selectionExtent', selectionExtent, true);\n }\n }\n}\n\n/**\n * Remove unaggregated domain if it is not applicable\n * Add unaggregated domain if domain is not specified and config.scale.useUnaggregatedDomain is true.\n */\nfunction normalizeUnaggregatedDomain(\n domain: Domain,\n fieldDef: TypedFieldDef,\n scaleType: ScaleType,\n scaleConfig: ScaleConfig\n) {\n if (domain === 'unaggregated') {\n const {valid, reason} = canUseUnaggregatedDomain(fieldDef, scaleType);\n if (!valid) {\n log.warn(reason);\n return undefined;\n }\n } else if (domain === undefined && scaleConfig.useUnaggregatedDomain) {\n // Apply config if domain is not specified.\n const {valid} = canUseUnaggregatedDomain(fieldDef, scaleType);\n if (valid) {\n return 'unaggregated';\n }\n }\n\n return domain;\n}\n\nexport function parseDomainForChannel(model: UnitModel, channel: ScaleChannel): Explicit {\n const scaleType = model.getScaleComponent(channel).get('type');\n const {encoding} = model;\n\n const domain = normalizeUnaggregatedDomain(\n model.scaleDomain(channel),\n model.typedFieldDef(channel),\n scaleType,\n model.config.scale\n );\n if (domain !== model.scaleDomain(channel)) {\n model.specifiedScales[channel] = {\n ...model.specifiedScales[channel],\n domain\n };\n }\n\n // If channel is either X or Y then union them with X2 & Y2 if they exist\n if (channel === 'x' && getFieldOrDatumDef(encoding.x2)) {\n if (getFieldOrDatumDef(encoding.x)) {\n return mergeValuesWithExplicit(\n parseSingleChannelDomain(scaleType, domain, model, 'x'),\n parseSingleChannelDomain(scaleType, domain, model, 'x2'),\n 'domain',\n 'scale',\n domainsTieBreaker\n );\n } else {\n return parseSingleChannelDomain(scaleType, domain, model, 'x2');\n }\n } else if (channel === 'y' && getFieldOrDatumDef(encoding.y2)) {\n if (getFieldOrDatumDef(encoding.y)) {\n return mergeValuesWithExplicit(\n parseSingleChannelDomain(scaleType, domain, model, 'y'),\n parseSingleChannelDomain(scaleType, domain, model, 'y2'),\n 'domain',\n 'scale',\n domainsTieBreaker\n );\n } else {\n return parseSingleChannelDomain(scaleType, domain, model, 'y2');\n }\n }\n return parseSingleChannelDomain(scaleType, domain, model, channel);\n}\n\nfunction mapDomainToDataSignal(\n domain: (number | string | boolean | DateTime | ExprRef | SignalRef | number[])[],\n type: Type,\n timeUnit: TimeUnit\n) {\n return domain.map(v => {\n const data = valueExpr(v, {timeUnit, type});\n return {signal: `{data: ${data}}`};\n });\n}\n\nfunction convertDomainIfItIsDateTime(\n domain: (number | string | boolean | DateTime | ExprRef | SignalRef | number[])[],\n type: Type,\n timeUnit: TimeUnit | TimeUnitParams\n): [number[]] | [string[]] | [boolean[]] | SignalRef[] {\n // explicit value\n const normalizedTimeUnit = normalizeTimeUnit(timeUnit)?.unit;\n if (type === 'temporal' || normalizedTimeUnit) {\n return mapDomainToDataSignal(domain, type, normalizedTimeUnit);\n }\n\n return [domain] as [number[]] | [string[]] | [boolean[]]; // Date time won't make sense\n}\n\nfunction parseSingleChannelDomain(\n scaleType: ScaleType,\n domain: Domain,\n model: UnitModel,\n channel: ScaleChannel | 'x2' | 'y2'\n): Explicit {\n const {encoding} = model;\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as ScaleDatumDef | ScaleFieldDef;\n\n const {type} = fieldOrDatumDef;\n const timeUnit = fieldOrDatumDef['timeUnit'];\n\n if (isDomainUnionWith(domain)) {\n const defaultDomain = parseSingleChannelDomain(scaleType, undefined, model, channel);\n\n const unionWith = convertDomainIfItIsDateTime(domain.unionWith, type, timeUnit);\n\n return makeExplicit([...defaultDomain.value, ...unionWith]);\n } else if (isSignalRef(domain)) {\n return makeExplicit([domain]);\n } else if (domain && domain !== 'unaggregated' && !isParameterDomain(domain)) {\n return makeExplicit(convertDomainIfItIsDateTime(domain, type, timeUnit));\n }\n\n const stack = model.stack;\n if (stack && channel === stack.fieldChannel) {\n if (stack.offset === 'normalize') {\n return makeImplicit([[0, 1]]);\n }\n\n const data = model.requestDataName(DataSourceType.Main);\n return makeImplicit([\n {\n data,\n field: model.vgField(channel, {suffix: 'start'})\n },\n {\n data,\n field: model.vgField(channel, {suffix: 'end'})\n }\n ]);\n }\n\n const sort: undefined | true | VgSortField =\n isScaleChannel(channel) && isFieldDef(fieldOrDatumDef) ? domainSort(model, channel, scaleType) : undefined;\n\n if (isDatumDef(fieldOrDatumDef)) {\n const d = convertDomainIfItIsDateTime([fieldOrDatumDef.datum], type, timeUnit);\n return makeImplicit(d);\n }\n\n const fieldDef = fieldOrDatumDef; // now we can be sure it's a fieldDef\n if (domain === 'unaggregated') {\n const data = model.requestDataName(DataSourceType.Main);\n const {field} = fieldOrDatumDef;\n return makeImplicit([\n {\n data,\n field: vgField({field, aggregate: 'min'})\n },\n {\n data,\n field: vgField({field, aggregate: 'max'})\n }\n ]);\n } else if (isBinning(fieldDef.bin)) {\n if (hasDiscreteDomain(scaleType)) {\n if (scaleType === 'bin-ordinal') {\n // we can omit the domain as it is inferred from the `bins` property\n return makeImplicit([]);\n }\n\n // ordinal bin scale takes domain from bin_range, ordered by bin start\n // This is useful for both axis-based scale (x/y) and legend-based scale (other channels).\n return makeImplicit([\n {\n // If sort by aggregation of a specified sort field, we need to use RAW table,\n // so we can aggregate values for the scale independently from the main aggregation.\n data: util.isBoolean(sort)\n ? model.requestDataName(DataSourceType.Main)\n : model.requestDataName(DataSourceType.Raw),\n // Use range if we added it and the scale does not support computing a range as a signal.\n field: model.vgField(channel, binRequiresRange(fieldDef, channel) ? {binSuffix: 'range'} : {}),\n // we have to use a sort object if sort = true to make the sort correct by bin start\n sort:\n sort === true || !isObject(sort)\n ? {\n field: model.vgField(channel, {}),\n op: 'min' // min or max doesn't matter since we sort by the start of the bin range\n }\n : sort\n }\n ]);\n } else {\n // continuous scales\n const {bin} = fieldDef;\n if (isBinning(bin)) {\n const binSignal = getBinSignalName(model, fieldDef.field, bin);\n return makeImplicit([\n new SignalRefWrapper(() => {\n const signal = model.getSignalName(binSignal);\n return `[${signal}.start, ${signal}.stop]`;\n })\n ]);\n } else {\n return makeImplicit([\n {\n data: model.requestDataName(DataSourceType.Main),\n field: model.vgField(channel, {})\n }\n ]);\n }\n }\n } else if (\n fieldDef.timeUnit &&\n util.contains(['time', 'utc'], scaleType) &&\n hasBandEnd(\n fieldDef,\n isUnitModel(model) ? model.encoding[getSecondaryRangeChannel(channel)] : undefined,\n model.markDef,\n model.config\n )\n ) {\n const data = model.requestDataName(DataSourceType.Main);\n return makeImplicit([\n {\n data,\n field: model.vgField(channel)\n },\n {\n data,\n field: model.vgField(channel, {suffix: 'end'})\n }\n ]);\n } else if (sort) {\n return makeImplicit([\n {\n // If sort by aggregation of a specified sort field, we need to use RAW table,\n // so we can aggregate values for the scale independently from the main aggregation.\n data: util.isBoolean(sort)\n ? model.requestDataName(DataSourceType.Main)\n : model.requestDataName(DataSourceType.Raw),\n field: model.vgField(channel),\n sort: sort\n }\n ]);\n } else {\n return makeImplicit([\n {\n data: model.requestDataName(DataSourceType.Main),\n field: model.vgField(channel)\n }\n ]);\n }\n}\n\nfunction normalizeSortField(sort: EncodingSortField, isStackedMeasure: boolean): VgSortField {\n const {op, field, order} = sort;\n return {\n // Apply default op\n op: op ?? (isStackedMeasure ? 'sum' : DEFAULT_SORT_OP),\n // flatten nested fields\n ...(field ? {field: util.replacePathInField(field)} : {}),\n\n ...(order ? {order} : {})\n };\n}\n\nfunction parseSelectionDomain(model: UnitModel, channel: ScaleChannel) {\n const scale = model.component.scales[channel];\n const spec = model.specifiedScales[channel].domain;\n const bin = model.fieldDef(channel)?.bin;\n const domain = isParameterDomain(spec) && spec;\n const extent = isBinParams(bin) && isParameterExtent(bin.extent) && bin.extent;\n\n if (domain || extent) {\n // As scale parsing occurs before selection parsing, we cannot set\n // domainRaw directly. So instead, we store the selectionExtent on\n // the scale component, and then add domainRaw during scale assembly.\n scale.set('selectionExtent', domain ?? extent, true);\n }\n}\n\nexport function domainSort(\n model: UnitModel,\n channel: ScaleChannel,\n scaleType: ScaleType\n): undefined | true | VgSortField {\n if (!hasDiscreteDomain(scaleType)) {\n return undefined;\n }\n\n // save to cast as the only exception is the geojson type for shape, which would not generate a scale\n const fieldDef = model.fieldDef(channel) as ScaleFieldDef;\n const sort = fieldDef.sort;\n\n // if the sort is specified with array, use the derived sort index field\n if (isSortArray(sort)) {\n return {\n op: 'min',\n field: sortArrayIndexField(fieldDef, channel),\n order: 'ascending'\n };\n }\n\n const {stack} = model;\n const stackDimensions = stack\n ? [...(stack.groupbyField ? [stack.groupbyField] : []), ...stack.stackBy.map(s => s.fieldDef.field)]\n : undefined;\n\n // Sorted based on an aggregate calculation over a specified sort field (only for ordinal scale)\n if (isSortField(sort)) {\n const isStackedMeasure = stack && !util.contains(stackDimensions, sort.field);\n return normalizeSortField(sort, isStackedMeasure);\n } else if (isSortByEncoding(sort)) {\n const {encoding, order} = sort;\n const fieldDefToSortBy = model.fieldDef(encoding);\n const {aggregate, field} = fieldDefToSortBy;\n\n const isStackedMeasure = stack && !util.contains(stackDimensions, field);\n\n if (isArgminDef(aggregate) || isArgmaxDef(aggregate)) {\n return normalizeSortField(\n {\n field: vgField(fieldDefToSortBy),\n order\n },\n isStackedMeasure\n );\n } else if (isAggregateOp(aggregate) || !aggregate) {\n return normalizeSortField(\n {\n op: aggregate as NonArgAggregateOp, // can't be argmin/argmax since we don't support them in encoding field def\n field,\n order\n },\n isStackedMeasure\n );\n }\n } else if (sort === 'descending') {\n return {\n op: 'min',\n field: model.vgField(channel),\n order: 'descending'\n };\n } else if (util.contains(['ascending', undefined /* default =ascending*/], sort)) {\n return true;\n }\n\n // sort == null\n return undefined;\n}\n\n/**\n * Determine if a scale can use unaggregated domain.\n * @return {Boolean} Returns true if all of the following conditions apply:\n * 1. `scale.domain` is `unaggregated`\n * 2. Aggregation function is not `count` or `sum`\n * 3. The scale is quantitative or time scale.\n */\nexport function canUseUnaggregatedDomain(\n fieldDef: TypedFieldDef,\n scaleType: ScaleType\n): {valid: boolean; reason?: string} {\n const {aggregate, type} = fieldDef;\n\n if (!aggregate) {\n return {\n valid: false,\n reason: log.message.unaggregateDomainHasNoEffectForRawField(fieldDef)\n };\n }\n\n if (isString(aggregate) && !SHARED_DOMAIN_OP_INDEX[aggregate]) {\n return {\n valid: false,\n reason: log.message.unaggregateDomainWithNonSharedDomainOp(aggregate)\n };\n }\n\n if (type === 'quantitative') {\n if (scaleType === 'log') {\n return {\n valid: false,\n reason: log.message.unaggregatedDomainWithLogScale(fieldDef)\n };\n }\n }\n\n return {valid: true};\n}\n\n/**\n * Tie breaker for mergeValuesWithExplicit for domains. We concat the specified values.\n */\nfunction domainsTieBreaker(\n v1: Explicit,\n v2: Explicit,\n property: 'domains',\n propertyOf: 'scale'\n) {\n if (v1.explicit && v2.explicit) {\n log.warn(log.message.mergeConflictingDomainProperty(property, propertyOf, v1.value, v2.value));\n }\n // If equal score, concat the domains so that we union them later.\n return {explicit: v1.explicit, value: [...v1.value, ...v2.value]};\n}\n\n/**\n * Converts an array of domains to a single Vega scale domain.\n */\nexport function mergeDomains(domains: VgNonUnionDomain[]): VgDomain {\n const uniqueDomains = util.unique(\n domains.map(domain => {\n // ignore sort property when computing the unique domains\n if (isDataRefDomain(domain)) {\n const {sort: _s, ...domainWithoutSort} = domain;\n return domainWithoutSort;\n }\n return domain;\n }),\n util.hash\n );\n\n const sorts: VgSortField[] = util.unique(\n domains\n .map(d => {\n if (isDataRefDomain(d)) {\n const s = d.sort;\n if (s !== undefined && !util.isBoolean(s)) {\n if ('op' in s && s.op === 'count') {\n // let's make sure that if op is count, we don't use a field\n delete s.field;\n }\n if (s.order === 'ascending') {\n // drop order: ascending as it is the default\n delete s.order;\n }\n }\n return s;\n }\n return undefined;\n })\n .filter(s => s !== undefined),\n util.hash\n );\n\n if (uniqueDomains.length === 0) {\n return undefined;\n } else if (uniqueDomains.length === 1) {\n const domain = domains[0];\n if (isDataRefDomain(domain) && sorts.length > 0) {\n let sort = sorts[0];\n if (sorts.length > 1) {\n log.warn(log.message.MORE_THAN_ONE_SORT);\n sort = true;\n } else {\n // Simplify domain sort by removing field and op when the field is the same as the domain field.\n if (isObject(sort) && 'field' in sort) {\n const sortField = sort.field;\n if (domain.field === sortField) {\n sort = sort.order ? {order: sort.order} : true;\n }\n }\n }\n return {\n ...domain,\n sort\n };\n }\n return domain;\n }\n\n // only keep sort properties that work with unioned domains\n const unionDomainSorts = util.unique(\n sorts.map(s => {\n if (util.isBoolean(s) || !('op' in s) || (isString(s.op) && s.op in UNIONDOMAIN_SORT_OP_INDEX)) {\n return s as VgUnionSortField;\n }\n log.warn(log.message.domainSortDropped(s));\n return true;\n }),\n util.hash\n ) as VgUnionSortField[];\n\n let sort: VgUnionSortField;\n\n if (unionDomainSorts.length === 1) {\n sort = unionDomainSorts[0];\n } else if (unionDomainSorts.length > 1) {\n log.warn(log.message.MORE_THAN_ONE_SORT);\n sort = true;\n }\n\n const allData = util.unique(\n domains.map(d => {\n if (isDataRefDomain(d)) {\n return d.data;\n }\n return null;\n }),\n x => x\n );\n\n if (allData.length === 1 && allData[0] !== null) {\n // create a union domain of different fields with a single data source\n const domain: VgMultiFieldsRefWithSort = {\n data: allData[0],\n fields: uniqueDomains.map(d => (d as VgScaleDataRefWithSort).field),\n ...(sort ? {sort} : {})\n };\n\n return domain;\n }\n\n return {fields: uniqueDomains, ...(sort ? {sort} : {})};\n}\n\n/**\n * Return a field if a scale uses a single field.\n * Return `undefined` otherwise.\n */\nexport function getFieldFromDomain(domain: VgDomain): string {\n if (isDataRefDomain(domain) && isString(domain.field)) {\n return domain.field;\n } else if (isDataRefUnionedDomain(domain)) {\n let field;\n for (const nonUnionDomain of domain.fields) {\n if (isDataRefDomain(nonUnionDomain) && isString(nonUnionDomain.field)) {\n if (!field) {\n field = nonUnionDomain.field;\n } else if (field !== nonUnionDomain.field) {\n log.warn(log.message.FACETED_INDEPENDENT_DIFFERENT_SOURCES);\n return field;\n }\n }\n }\n log.warn(log.message.FACETED_INDEPENDENT_SAME_FIELDS_DIFFERENT_SOURCES);\n return field;\n } else if (isFieldRefUnionDomain(domain)) {\n log.warn(log.message.FACETED_INDEPENDENT_SAME_SOURCE);\n const field = domain.fields[0];\n return isString(field) ? field : undefined;\n }\n\n return undefined;\n}\n\nexport function assembleDomain(model: Model, channel: ScaleChannel) {\n const scaleComponent: ScaleComponent = model.component.scales[channel];\n\n const domains = scaleComponent.get('domains').map((domain: VgNonUnionDomain) => {\n // Correct references to data as the original domain's data was determined\n // in parseScale, which happens before parseData. Thus the original data\n // reference can be incorrect.\n if (isDataRefDomain(domain)) {\n domain.data = model.lookupDataSource(domain.data);\n }\n\n return domain;\n });\n\n // domains is an array that has to be merged into a single vega domain\n return mergeDomains(domains);\n}\n","import {isObject} from 'vega-util';\nimport {isXorY, ScaleChannel} from '../../channel';\nimport {keys} from '../../util';\nimport {isDataRefDomain, isVgRangeStep, VgRange, VgScale} from '../../vega.schema';\nimport {isConcatModel, isLayerModel, Model} from '../model';\nimport {assembleSelectionScaleDomain} from '../selection/assemble';\nimport {assembleDomain} from './domain';\n\nexport function assembleScales(model: Model): VgScale[] {\n if (isLayerModel(model) || isConcatModel(model)) {\n // For concat and layer, include scales of children too\n return model.children.reduce((scales, child) => {\n return scales.concat(assembleScales(child));\n }, assembleScalesForModel(model));\n } else {\n // For facet, child scales would not be included in the parent's scope.\n // For unit, there is no child.\n return assembleScalesForModel(model);\n }\n}\n\nexport function assembleScalesForModel(model: Model): VgScale[] {\n return keys(model.component.scales).reduce((scales: VgScale[], channel: ScaleChannel) => {\n const scaleComponent = model.component.scales[channel];\n if (scaleComponent.merged) {\n // Skipped merged scales\n return scales;\n }\n\n const scale = scaleComponent.combine();\n const {name, type, selectionExtent, domains: _d, range: _r, reverse, ...otherScaleProps} = scale;\n const range = assembleScaleRange(scale.range, name, channel, model);\n\n const domain = assembleDomain(model, channel);\n const domainRaw = selectionExtent\n ? assembleSelectionScaleDomain(model, selectionExtent, scaleComponent, domain)\n : null;\n\n scales.push({\n name,\n type,\n ...(domain ? {domain} : {}),\n ...(domainRaw ? {domainRaw} : {}),\n range,\n ...(reverse !== undefined ? {reverse: reverse as any} : {}),\n ...otherScaleProps\n });\n\n return scales;\n }, [] as VgScale[]);\n}\n\nexport function assembleScaleRange(\n scaleRange: VgRange,\n scaleName: string,\n channel: ScaleChannel,\n model?: Model\n): VgRange {\n // add signals to x/y range\n if (isXorY(channel)) {\n if (isVgRangeStep(scaleRange)) {\n // For width/height step, use a signal created in layout assemble instead of a constant step.\n return {\n step: {signal: `${scaleName}_step`}\n };\n }\n } else if (isObject(scaleRange) && isDataRefDomain(scaleRange)) {\n return {\n ...scaleRange,\n data: model.lookupDataSource(scaleRange.data)\n };\n }\n return scaleRange;\n}\n","import {SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {ScaleChannel} from '../../channel';\nimport {Scale, ScaleType} from '../../scale';\nimport {ParameterExtent} from '../../selection';\nimport {some} from '../../util';\nimport {VgNonUnionDomain, VgScale} from '../../vega.schema';\nimport {Explicit, Split} from '../split';\n\n/**\n * All VgDomain property except domain.\n * (We exclude domain as we have a special \"domains\" array that allow us merge them all at once in assemble.)\n */\nexport type ScaleComponentProps = Omit & {\n domains: VgNonUnionDomain[];\n selectionExtent?: ParameterExtent;\n reverse?: boolean | SignalRef; // Need override since Vega doesn't official support scale reverse yet (though it does in practice)\n};\n\nexport type Range = ScaleComponentProps['range'];\n\nexport class ScaleComponent extends Split {\n public merged = false;\n\n constructor(name: string, typeWithExplicit: Explicit) {\n super(\n {}, // no initial explicit property\n {name} // name as initial implicit property\n );\n this.setWithExplicit('type', typeWithExplicit);\n }\n\n /**\n * Whether the scale definitely includes zero in the domain\n */\n public domainDefinitelyIncludesZero() {\n if (this.get('zero') !== false) {\n return true;\n }\n return some(this.get('domains'), d => isArray(d) && d.length === 2 && d[0] <= 0 && d[1] >= 0);\n }\n}\n\nexport type ScaleComponentIndex = Partial>;\n\nexport type ScaleIndex = Partial>>;\n","import {RangeScheme, SignalRef} from 'vega';\nimport {isArray, isNumber, isObject} from 'vega-util';\nimport {isBinning} from '../../bin';\nimport {\n ANGLE,\n COLOR,\n FILL,\n FILLOPACITY,\n isXorY,\n OPACITY,\n RADIUS,\n ScaleChannel,\n SCALE_CHANNELS,\n SHAPE,\n SIZE,\n STROKE,\n STROKEDASH,\n STROKEOPACITY,\n STROKEWIDTH,\n THETA,\n X,\n Y\n} from '../../channel';\nimport {getFieldOrDatumDef, ScaleDatumDef, ScaleFieldDef} from '../../channeldef';\nimport {Config, getViewConfigDiscreteSize, getViewConfigDiscreteStep, ViewConfig} from '../../config';\nimport {DataSourceType} from '../../data';\nimport * as log from '../../log';\nimport {Mark} from '../../mark';\nimport {\n channelScalePropertyIncompatability,\n Domain,\n hasContinuousDomain,\n hasDiscreteDomain,\n isContinuousToDiscrete,\n isExtendedScheme,\n Scale,\n scaleTypeSupportProperty,\n Scheme\n} from '../../scale';\nimport {isStep, LayoutSizeMixins} from '../../spec/base';\nimport * as util from '../../util';\nimport {isSignalRef, VgRange} from '../../vega.schema';\nimport {signalOrStringValue} from '../common';\nimport {getBinSignalName} from '../data/bin';\nimport {SignalRefWrapper} from '../signal';\nimport {Explicit, makeExplicit, makeImplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponentIndex} from './component';\n\nexport const RANGE_PROPERTIES: (keyof Scale)[] = ['range', 'scheme'];\n\nfunction getSizeChannel(channel: ScaleChannel) {\n return channel === 'x' ? 'width' : channel === 'y' ? 'height' : undefined;\n}\n\nexport function parseUnitScaleRange(model: UnitModel) {\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n // use SCALE_CHANNELS instead of scales[channel] to ensure that x, y come first!\n for (const channel of SCALE_CHANNELS) {\n const localScaleCmpt = localScaleComponents[channel];\n if (!localScaleCmpt) {\n continue;\n }\n\n const rangeWithExplicit = parseRangeForChannel(channel, model);\n\n localScaleCmpt.setWithExplicit('range', rangeWithExplicit);\n }\n}\n\nfunction getBinStepSignal(model: UnitModel, channel: 'x' | 'y'): SignalRefWrapper {\n const fieldDef = model.fieldDef(channel);\n\n if (fieldDef?.bin) {\n const {bin, field} = fieldDef;\n const sizeType = getSizeChannel(channel);\n const sizeSignal = model.getName(sizeType);\n\n if (isObject(bin) && bin.binned && bin.step !== undefined) {\n return new SignalRefWrapper(() => {\n const scaleName = model.scaleName(channel);\n const binCount = `(domain(\"${scaleName}\")[1] - domain(\"${scaleName}\")[0]) / ${bin.step}`;\n return `${model.getSignalName(sizeSignal)} / (${binCount})`;\n });\n } else if (isBinning(bin)) {\n const binSignal = getBinSignalName(model, field, bin);\n\n // TODO: extract this to be range step signal\n return new SignalRefWrapper(() => {\n const updatedName = model.getSignalName(binSignal);\n const binCount = `(${updatedName}.stop - ${updatedName}.start) / ${updatedName}.step`;\n return `${model.getSignalName(sizeSignal)} / (${binCount})`;\n });\n }\n }\n return undefined;\n}\n\n/**\n * Return mixins that includes one of the Vega range types (explicit range, range.step, range.scheme).\n */\nexport function parseRangeForChannel(channel: ScaleChannel, model: UnitModel): Explicit {\n const specifiedScale = model.specifiedScales[channel];\n const {size} = model;\n\n const mergedScaleCmpt = model.getScaleComponent(channel);\n const scaleType = mergedScaleCmpt.get('type');\n\n // Check if any of the range properties is specified.\n // If so, check if it is compatible and make sure that we only output one of the properties\n for (const property of RANGE_PROPERTIES) {\n if (specifiedScale[property] !== undefined) {\n const supportedByScaleType = scaleTypeSupportProperty(scaleType, property);\n const channelIncompatability = channelScalePropertyIncompatability(channel, property);\n if (!supportedByScaleType) {\n log.warn(log.message.scalePropertyNotWorkWithScaleType(scaleType, property, channel));\n } else if (channelIncompatability) {\n // channel\n log.warn(channelIncompatability);\n } else {\n switch (property) {\n case 'range': {\n const range = specifiedScale.range;\n if (isArray(range)) {\n if (isXorY(channel)) {\n return makeExplicit(\n range.map(v => {\n if (v === 'width' || v === 'height') {\n // get signal for width/height\n\n // Just like default range logic below, we use SignalRefWrapper to account for potential merges and renames.\n\n const sizeSignal = model.getName(v);\n const getSignalName = model.getSignalName.bind(model);\n return SignalRefWrapper.fromName(getSignalName, sizeSignal);\n }\n return v;\n })\n );\n }\n } else if (isObject(range)) {\n return makeExplicit({\n data: model.requestDataName(DataSourceType.Main),\n field: range.field,\n sort: {op: 'min', field: model.vgField(channel)}\n });\n }\n\n return makeExplicit(range);\n }\n case 'scheme':\n return makeExplicit(parseScheme(specifiedScale[property]));\n }\n }\n }\n }\n\n if (channel === X || channel === Y) {\n const sizeChannel = channel === X ? 'width' : 'height';\n const sizeValue = size[sizeChannel];\n if (isStep(sizeValue)) {\n if (hasDiscreteDomain(scaleType)) {\n return makeExplicit({step: sizeValue.step});\n } else {\n log.warn(log.message.stepDropped(sizeChannel));\n }\n }\n }\n\n const {rangeMin, rangeMax} = specifiedScale;\n const d = defaultRange(channel, model);\n\n if (\n (rangeMin !== undefined || rangeMax !== undefined) &&\n // it's ok to check just rangeMin's compatibility since rangeMin/rangeMax are the same\n scaleTypeSupportProperty(scaleType, 'rangeMin') &&\n isArray(d) &&\n d.length === 2\n ) {\n return makeExplicit([rangeMin ?? d[0], rangeMax ?? d[1]]);\n }\n\n return makeImplicit(d);\n}\n\nfunction parseScheme(scheme: Scheme | SignalRef): RangeScheme {\n if (isExtendedScheme(scheme)) {\n return {\n scheme: scheme.name,\n ...util.omit(scheme, ['name'])\n };\n }\n return {scheme: scheme};\n}\n\nfunction defaultRange(channel: ScaleChannel, model: UnitModel): VgRange {\n const {size, config, mark, encoding} = model;\n\n const getSignalName = model.getSignalName.bind(model);\n\n const {type} = getFieldOrDatumDef(encoding[channel]) as ScaleFieldDef | ScaleDatumDef;\n\n const mergedScaleCmpt = model.getScaleComponent(channel);\n const scaleType = mergedScaleCmpt.get('type');\n\n const {domain, domainMid} = model.specifiedScales[channel];\n\n switch (channel) {\n case X:\n case Y: {\n // If there is no explicit width/height for discrete x/y scales\n if (util.contains(['point', 'band'], scaleType)) {\n if (channel === X && !size.width) {\n const w = getViewConfigDiscreteSize(config.view, 'width');\n if (isStep(w)) {\n return w;\n }\n } else if (channel === Y && !size.height) {\n const h = getViewConfigDiscreteSize(config.view, 'height');\n if (isStep(h)) {\n return h;\n }\n }\n }\n\n // If step is null, use zero to width or height.\n // Note that we use SignalRefWrapper to account for potential merges and renames.\n\n const sizeType = getSizeChannel(channel);\n const sizeSignal = model.getName(sizeType);\n\n if (channel === Y && hasContinuousDomain(scaleType)) {\n // For y continuous scale, we have to start from the height as the bottom part has the max value.\n return [SignalRefWrapper.fromName(getSignalName, sizeSignal), 0];\n } else {\n return [0, SignalRefWrapper.fromName(getSignalName, sizeSignal)];\n }\n }\n\n case SIZE: {\n // TODO: support custom rangeMin, rangeMax\n const zero = model.component.scales[channel].get('zero');\n const rangeMin = sizeRangeMin(mark, zero, config);\n const rangeMax = sizeRangeMax(mark, size, model, config);\n if (isContinuousToDiscrete(scaleType)) {\n return interpolateRange(\n rangeMin,\n rangeMax,\n defaultContinuousToDiscreteCount(scaleType, config, domain, channel)\n );\n } else {\n return [rangeMin, rangeMax];\n }\n }\n\n case THETA:\n return [0, Math.PI * 2];\n\n case ANGLE:\n // TODO: add config.scale.min/maxAngleDegree (for point and text) and config.scale.min/maxAngleRadian (for arc) once we add arc marks.\n // (It's weird to add just config.scale.min/maxAngleDegree for now)\n return [0, 360];\n\n case RADIUS: {\n // max radius = half od min(width,height)\n return [\n 0,\n new SignalRefWrapper(() => {\n const w = model.getSignalName('width');\n const h = model.getSignalName('height');\n return `min(${w},${h})/2`;\n })\n ];\n }\n\n case STROKEWIDTH:\n // TODO: support custom rangeMin, rangeMax\n return [config.scale.minStrokeWidth, config.scale.maxStrokeWidth];\n case STROKEDASH:\n return [\n // TODO: add this to Vega's config.range?\n [1, 0],\n [4, 2],\n [2, 1],\n [1, 1],\n [1, 2, 4, 2]\n ];\n case SHAPE:\n return 'symbol';\n case COLOR:\n case FILL:\n case STROKE:\n if (scaleType === 'ordinal') {\n // Only nominal data uses ordinal scale by default\n return type === 'nominal' ? 'category' : 'ordinal';\n } else {\n if (domainMid !== undefined) {\n return 'diverging';\n } else {\n return mark === 'rect' || mark === 'geoshape' ? 'heatmap' : 'ramp';\n }\n }\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n // TODO: support custom rangeMin, rangeMax\n return [config.scale.minOpacity, config.scale.maxOpacity];\n }\n /* istanbul ignore next: should never reach here */\n throw new Error(`Scale range undefined for channel ${channel}`);\n}\n\nexport function defaultContinuousToDiscreteCount(\n scaleType: 'quantile' | 'quantize' | 'threshold',\n config: Config,\n domain: Domain,\n channel: ScaleChannel\n) {\n switch (scaleType) {\n case 'quantile':\n return config.scale.quantileCount;\n case 'quantize':\n return config.scale.quantizeCount;\n case 'threshold':\n if (domain !== undefined && isArray(domain)) {\n return domain.length + 1;\n } else {\n log.warn(log.message.domainRequiredForThresholdScale(channel));\n // default threshold boundaries for threshold scale since domain has cardinality of 2\n return 3;\n }\n }\n}\n\n/**\n * Returns the linear interpolation of the range according to the cardinality\n *\n * @param rangeMin start of the range\n * @param rangeMax end of the range\n * @param cardinality number of values in the output range\n */\nexport function interpolateRange(\n rangeMin: number | SignalRef,\n rangeMax: number | SignalRef,\n cardinality: number\n): SignalRef {\n // always return a signal since it's better to compute the sequence in Vega later\n const f = () => {\n const rMax = signalOrStringValue(rangeMax);\n const rMin = signalOrStringValue(rangeMin);\n const step = `(${rMax} - ${rMin}) / (${cardinality} - 1)`;\n return `sequence(${rMin}, ${rMax} + ${step}, ${step})`;\n };\n if (isSignalRef(rangeMax)) {\n return new SignalRefWrapper(f);\n } else {\n return {signal: f()};\n }\n}\n\nfunction sizeRangeMin(mark: Mark, zero: boolean | SignalRef, config: Config): number | SignalRef {\n if (zero) {\n if (isSignalRef(zero)) {\n return {signal: `${zero.signal} ? 0 : ${sizeRangeMin(mark, false, config)}`};\n } else {\n return 0;\n }\n }\n switch (mark) {\n case 'bar':\n case 'tick':\n return config.scale.minBandSize;\n case 'line':\n case 'trail':\n case 'rule':\n return config.scale.minStrokeWidth;\n case 'text':\n return config.scale.minFontSize;\n case 'point':\n case 'square':\n case 'circle':\n return config.scale.minSize;\n }\n /* istanbul ignore next: should never reach here */\n // sizeRangeMin not implemented for the mark\n throw new Error(log.message.incompatibleChannel('size', mark));\n}\n\nexport const MAX_SIZE_RANGE_STEP_RATIO = 0.95;\n\nfunction sizeRangeMax(\n mark: Mark,\n size: LayoutSizeMixins,\n model: UnitModel,\n config: Config\n): number | SignalRef {\n const xyStepSignals = {\n x: getBinStepSignal(model, 'x'),\n y: getBinStepSignal(model, 'y')\n };\n\n switch (mark) {\n case 'bar':\n case 'tick': {\n if (config.scale.maxBandSize !== undefined) {\n return config.scale.maxBandSize;\n }\n const min = minXYStep(size, xyStepSignals, config.view);\n\n if (isNumber(min)) {\n return min - 1;\n } else {\n return new SignalRefWrapper(() => `${min.signal} - 1`);\n }\n }\n case 'line':\n case 'trail':\n case 'rule':\n return config.scale.maxStrokeWidth;\n case 'text':\n return config.scale.maxFontSize;\n case 'point':\n case 'square':\n case 'circle': {\n if (config.scale.maxSize) {\n return config.scale.maxSize;\n }\n\n const pointStep = minXYStep(size, xyStepSignals, config.view);\n if (isNumber(pointStep)) {\n return Math.pow(MAX_SIZE_RANGE_STEP_RATIO * pointStep, 2);\n } else {\n return new SignalRefWrapper(() => `pow(${MAX_SIZE_RANGE_STEP_RATIO} * ${pointStep.signal}, 2)`);\n }\n }\n }\n /* istanbul ignore next: should never reach here */\n // sizeRangeMax not implemented for the mark\n throw new Error(log.message.incompatibleChannel('size', mark));\n}\n\n/**\n * @returns {number} Range step of x or y or minimum between the two if both are ordinal scale.\n */\nfunction minXYStep(\n size: LayoutSizeMixins,\n xyStepSignals: {x?: SignalRefWrapper; y?: SignalRefWrapper},\n viewConfig: ViewConfig\n): number | SignalRef {\n const widthStep = isStep(size.width) ? size.width.step : getViewConfigDiscreteStep(viewConfig, 'width');\n const heightStep = isStep(size.height) ? size.height.step : getViewConfigDiscreteStep(viewConfig, 'height');\n\n if (xyStepSignals.x || xyStepSignals.y) {\n return new SignalRefWrapper(() => {\n const exprs = [\n xyStepSignals.x ? xyStepSignals.x.signal : widthStep,\n xyStepSignals.y ? xyStepSignals.y.signal : heightStep\n ];\n return `min(${exprs.join(', ')})`;\n });\n }\n\n return Math.min(widthStep, heightStep);\n}\n","import {SignalRef, TimeInterval} from 'vega';\nimport {isArray} from 'vega-util';\nimport {isBinned, isBinning, isBinParams} from '../../bin';\nimport {\n COLOR,\n FILL,\n POLAR_POSITION_SCALE_CHANNELS,\n POSITION_SCALE_CHANNELS,\n POSITION_SCALE_CHANNEL_INDEX,\n ScaleChannel,\n STROKE\n} from '../../channel';\nimport {\n getFieldDef,\n getFieldOrDatumDef,\n isFieldDef,\n ScaleDatumDef,\n ScaleFieldDef,\n TypedFieldDef,\n valueExpr\n} from '../../channeldef';\nimport {Config} from '../../config';\nimport {isDateTime} from '../../datetime';\nimport * as log from '../../log';\nimport {Mark, MarkDef, RectConfig} from '../../mark';\nimport {\n channelScalePropertyIncompatability,\n Domain,\n hasContinuousDomain,\n isContinuousToContinuous,\n isContinuousToDiscrete,\n Scale,\n ScaleConfig,\n ScaleType,\n scaleTypeSupportProperty\n} from '../../scale';\nimport {Sort} from '../../sort';\nimport {Type} from '../../type';\nimport * as util from '../../util';\nimport {contains, getFirstDefined, keys} from '../../util';\nimport {isSignalRef, VgScale} from '../../vega.schema';\nimport {getBinSignalName} from '../data/bin';\nimport {isUnitModel, Model} from '../model';\nimport {SignalRefWrapper} from '../signal';\nimport {Explicit, mergeValuesWithExplicit, tieBreakByComparing} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponentIndex, ScaleComponentProps} from './component';\nimport {parseUnitScaleRange} from './range';\n\nexport function parseScaleProperty(model: Model, property: Exclude) {\n if (isUnitModel(model)) {\n parseUnitScaleProperty(model, property);\n } else {\n parseNonUnitScaleProperty(model, property);\n }\n}\n\nfunction parseUnitScaleProperty(model: UnitModel, property: Exclude) {\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n const {config, encoding, markDef, specifiedScales} = model;\n\n for (const channel of keys(localScaleComponents)) {\n const specifiedScale = specifiedScales[channel];\n const localScaleCmpt = localScaleComponents[channel];\n const mergedScaleCmpt = model.getScaleComponent(channel);\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as ScaleFieldDef | ScaleDatumDef;\n\n const specifiedValue = specifiedScale[property];\n const scaleType = mergedScaleCmpt.get('type');\n const scalePadding = mergedScaleCmpt.get('padding');\n const scalePaddingInner = mergedScaleCmpt.get('paddingInner');\n\n const supportedByScaleType = scaleTypeSupportProperty(scaleType, property);\n const channelIncompatability = channelScalePropertyIncompatability(channel, property);\n\n if (specifiedValue !== undefined) {\n // If there is a specified value, check if it is compatible with scale type and channel\n if (!supportedByScaleType) {\n log.warn(log.message.scalePropertyNotWorkWithScaleType(scaleType, property, channel));\n } else if (channelIncompatability) {\n // channel\n log.warn(channelIncompatability);\n }\n }\n if (supportedByScaleType && channelIncompatability === undefined) {\n if (specifiedValue !== undefined) {\n const timeUnit = fieldOrDatumDef['timeUnit'];\n const type = fieldOrDatumDef.type;\n\n switch (property) {\n // domainMax/Min to signal if the value is a datetime object\n case 'domainMax':\n case 'domainMin':\n if (isDateTime(specifiedScale[property]) || type === 'temporal' || timeUnit) {\n localScaleCmpt.set(property, {signal: valueExpr(specifiedScale[property], {type, timeUnit})}, true);\n } else {\n localScaleCmpt.set(property, specifiedScale[property] as any, true);\n }\n break;\n default:\n localScaleCmpt.copyKeyFromObject>(\n property,\n specifiedScale\n );\n }\n } else {\n const value =\n property in scaleRules\n ? scaleRules[property]({\n model,\n channel,\n fieldOrDatumDef,\n scaleType,\n scalePadding,\n scalePaddingInner,\n domain: specifiedScale.domain,\n markDef,\n config\n })\n : config.scale[property];\n if (value !== undefined) {\n localScaleCmpt.set(property, value, false);\n }\n }\n }\n }\n}\n\nexport interface ScaleRuleParams {\n model: Model;\n channel: ScaleChannel;\n fieldOrDatumDef: ScaleFieldDef | ScaleDatumDef;\n scaleType: ScaleType;\n scalePadding: number | SignalRef;\n scalePaddingInner: number | SignalRef;\n domain: Domain;\n markDef: MarkDef;\n config: Config;\n}\n\nexport const scaleRules: {\n [k in keyof Scale]?: (params: ScaleRuleParams) => Scale[k];\n} = {\n bins: ({model, fieldOrDatumDef}) => (isFieldDef(fieldOrDatumDef) ? bins(model, fieldOrDatumDef) : undefined),\n\n interpolate: ({channel, fieldOrDatumDef}) => interpolate(channel, fieldOrDatumDef.type),\n\n nice: ({scaleType, channel, domain, fieldOrDatumDef}) => nice(scaleType, channel, domain, fieldOrDatumDef),\n\n padding: ({channel, scaleType, fieldOrDatumDef, markDef, config}) =>\n padding(channel, scaleType, config.scale, fieldOrDatumDef, markDef, config.bar),\n\n paddingInner: ({scalePadding, channel, markDef, config}) =>\n paddingInner(scalePadding, channel, markDef.type, config.scale),\n\n paddingOuter: ({scalePadding, channel, scaleType, markDef, scalePaddingInner, config}) =>\n paddingOuter(scalePadding, channel, scaleType, markDef.type, scalePaddingInner, config.scale),\n\n reverse: ({fieldOrDatumDef, scaleType, channel, config}) => {\n const sort = isFieldDef(fieldOrDatumDef) ? fieldOrDatumDef.sort : undefined;\n return reverse(scaleType, sort, channel, config.scale);\n },\n zero: ({channel, fieldOrDatumDef, domain, markDef, scaleType}) =>\n zero(channel, fieldOrDatumDef, domain, markDef, scaleType)\n};\n\n// This method is here rather than in range.ts to avoid circular dependency.\nexport function parseScaleRange(model: Model) {\n if (isUnitModel(model)) {\n parseUnitScaleRange(model);\n } else {\n parseNonUnitScaleProperty(model, 'range');\n }\n}\n\nexport function parseNonUnitScaleProperty(model: Model, property: keyof (Scale | ScaleComponentProps)) {\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n for (const child of model.children) {\n if (property === 'range') {\n parseScaleRange(child);\n } else {\n parseScaleProperty(child, property);\n }\n }\n\n for (const channel of keys(localScaleComponents)) {\n let valueWithExplicit: Explicit;\n\n for (const child of model.children) {\n const childComponent = child.component.scales[channel];\n if (childComponent) {\n const childValueWithExplicit = childComponent.getWithExplicit(property);\n valueWithExplicit = mergeValuesWithExplicit(\n valueWithExplicit,\n childValueWithExplicit,\n property,\n 'scale',\n tieBreakByComparing((v1, v2) => {\n switch (property) {\n case 'range':\n // For step, prefer larger step\n if (v1.step && v2.step) {\n return v1.step - v2.step;\n }\n return 0;\n // TODO: precedence rule for other properties\n }\n return 0;\n })\n );\n }\n }\n localScaleComponents[channel].setWithExplicit(property, valueWithExplicit);\n }\n}\n\nexport function bins(model: Model, fieldDef: TypedFieldDef) {\n const bin = fieldDef.bin;\n if (isBinning(bin)) {\n const binSignal = getBinSignalName(model, fieldDef.field, bin);\n return new SignalRefWrapper(() => {\n return model.getSignalName(binSignal);\n });\n } else if (isBinned(bin) && isBinParams(bin) && bin.step !== undefined) {\n // start and stop will be determined from the scale domain\n return {\n step: bin.step\n };\n }\n return undefined;\n}\n\nexport function interpolate(channel: ScaleChannel, type: Type): Scale['interpolate'] {\n if (contains([COLOR, FILL, STROKE], channel) && type !== 'nominal') {\n return 'hcl';\n }\n return undefined;\n}\n\nexport function nice(\n scaleType: ScaleType,\n channel: ScaleChannel,\n specifiedDomain: Domain,\n fieldOrDatumDef: TypedFieldDef | ScaleDatumDef\n): boolean | TimeInterval {\n if (\n getFieldDef(fieldOrDatumDef)?.bin ||\n isArray(specifiedDomain) ||\n util.contains([ScaleType.TIME, ScaleType.UTC], scaleType)\n ) {\n return undefined;\n }\n return channel in POSITION_SCALE_CHANNEL_INDEX ? true : undefined;\n}\n\nexport function padding(\n channel: ScaleChannel,\n scaleType: ScaleType,\n scaleConfig: ScaleConfig,\n fieldOrDatumDef: TypedFieldDef | ScaleDatumDef,\n markDef: MarkDef,\n barConfig: RectConfig\n) {\n if (channel in POSITION_SCALE_CHANNEL_INDEX) {\n if (isContinuousToContinuous(scaleType)) {\n if (scaleConfig.continuousPadding !== undefined) {\n return scaleConfig.continuousPadding;\n }\n\n const {type, orient} = markDef;\n if (type === 'bar' && !(isFieldDef(fieldOrDatumDef) && (fieldOrDatumDef.bin || fieldOrDatumDef.timeUnit))) {\n if ((orient === 'vertical' && channel === 'x') || (orient === 'horizontal' && channel === 'y')) {\n return barConfig.continuousBandSize;\n }\n }\n }\n\n if (scaleType === ScaleType.POINT) {\n return scaleConfig.pointPadding;\n }\n }\n return undefined;\n}\n\nexport function paddingInner(\n paddingValue: number | SignalRef,\n channel: ScaleChannel,\n mark: Mark,\n scaleConfig: ScaleConfig\n) {\n if (paddingValue !== undefined) {\n // If user has already manually specified \"padding\", no need to add default paddingInner.\n return undefined;\n }\n\n if (channel in POSITION_SCALE_CHANNEL_INDEX) {\n // Padding is only set for X and Y by default.\n // Basically it doesn't make sense to add padding for color and size.\n\n // paddingOuter would only be called if it's a band scale, just return the default for bandScale.\n\n const {bandPaddingInner, barBandPaddingInner, rectBandPaddingInner} = scaleConfig;\n\n return getFirstDefined(bandPaddingInner, mark === 'bar' ? barBandPaddingInner : rectBandPaddingInner);\n }\n return undefined;\n}\n\nexport function paddingOuter(\n paddingValue: number | SignalRef,\n channel: ScaleChannel,\n scaleType: ScaleType,\n mark: Mark,\n paddingInnerValue: number | SignalRef,\n scaleConfig: ScaleConfig\n) {\n if (paddingValue !== undefined) {\n // If user has already manually specified \"padding\", no need to add default paddingOuter.\n return undefined;\n }\n\n if (channel in POSITION_SCALE_CHANNEL_INDEX) {\n // Padding is only set for X and Y by default.\n // Basically it doesn't make sense to add padding for color and size.\n if (scaleType === ScaleType.BAND) {\n const {bandPaddingOuter} = scaleConfig;\n\n return getFirstDefined(\n bandPaddingOuter,\n /* By default, paddingOuter is paddingInner / 2. The reason is that\n size (width/height) = step * (cardinality - paddingInner + 2 * paddingOuter).\n and we want the width/height to be integer by default.\n Note that step (by default) and cardinality are integers.) */\n isSignalRef(paddingInnerValue) ? {signal: `${paddingInnerValue.signal}/2`} : paddingInnerValue / 2\n );\n }\n }\n return undefined;\n}\n\nexport function reverse(\n scaleType: ScaleType,\n sort: Sort,\n channel: ScaleChannel,\n scaleConfig: ScaleConfig\n) {\n if (channel === 'x' && scaleConfig.xReverse !== undefined) {\n if (hasContinuousDomain(scaleType) && sort === 'descending') {\n if (isSignalRef(scaleConfig.xReverse)) {\n return {signal: `!${scaleConfig.xReverse.signal}`};\n } else {\n return !scaleConfig.xReverse;\n }\n }\n return scaleConfig.xReverse;\n }\n\n if (hasContinuousDomain(scaleType) && sort === 'descending') {\n // For continuous domain scales, Vega does not support domain sort.\n // Thus, we reverse range instead if sort is descending\n return true;\n }\n return undefined;\n}\n\nexport function zero(\n channel: ScaleChannel,\n fieldDef: TypedFieldDef | ScaleDatumDef,\n specifiedDomain: Domain,\n markDef: MarkDef,\n scaleType: ScaleType\n) {\n // If users explicitly provide a domain, we should not augment zero as that will be unexpected.\n const hasCustomDomain = !!specifiedDomain && specifiedDomain !== 'unaggregated';\n if (hasCustomDomain) {\n if (hasContinuousDomain(scaleType)) {\n if (isArray(specifiedDomain)) {\n const first = specifiedDomain[0];\n const last = specifiedDomain[specifiedDomain.length - 1];\n\n if (first <= 0 && last >= 0) {\n // if the domain includes zero, make zero remains true\n return true;\n }\n }\n return false;\n }\n }\n\n // If there is no custom domain, return true only for the following cases:\n\n // 1) using quantitative field with size\n // While this can be either ratio or interval fields, our assumption is that\n // ratio are more common. However, if the scaleType is discretizing scale, we want to return\n // false so that range doesn't start at zero\n if (channel === 'size' && fieldDef.type === 'quantitative' && !isContinuousToDiscrete(scaleType)) {\n return true;\n }\n\n // 2) non-binned, quantitative x-scale or y-scale\n // (For binning, we should not include zero by default because binning are calculated without zero.)\n if (\n !(isFieldDef(fieldDef) && fieldDef.bin) &&\n util.contains([...POSITION_SCALE_CHANNELS, ...POLAR_POSITION_SCALE_CHANNELS], channel)\n ) {\n const {orient, type} = markDef;\n if (contains(['bar', 'area', 'line', 'trail'], type)) {\n if ((orient === 'horizontal' && channel === 'y') || (orient === 'vertical' && channel === 'x')) {\n return false;\n }\n }\n\n return true;\n }\n return false;\n}\n","import {isBinning} from '../../bin';\nimport {Channel, getSizeChannel, isColorChannel, isScaleChannel, rangeType} from '../../channel';\nimport {DatumDef, isFieldDef, isPositionFieldOrDatumDef, ScaleDatumDef, TypedFieldDef} from '../../channeldef';\nimport * as log from '../../log';\nimport {isRelativeBandSize, MarkDef} from '../../mark';\nimport {channelSupportScaleType, Scale, ScaleType, scaleTypeSupportDataType} from '../../scale';\nimport {normalizeTimeUnit} from '../../timeunit';\nimport * as util from '../../util';\nimport {POLAR_POSITION_SCALE_CHANNEL_INDEX, POSITION_SCALE_CHANNEL_INDEX} from './../../channel';\n\nexport type RangeType = 'continuous' | 'discrete' | 'flexible' | undefined;\n\n/**\n * Determine if there is a specified scale type and if it is appropriate,\n * or determine default type if type is unspecified or inappropriate.\n */\n// NOTE: CompassQL uses this method.\nexport function scaleType(\n specifiedScale: Scale,\n channel: Channel,\n fieldDef: TypedFieldDef | DatumDef,\n mark: MarkDef\n): ScaleType {\n const defaultScaleType = defaultType(channel, fieldDef, mark);\n const {type} = specifiedScale;\n\n if (!isScaleChannel(channel)) {\n // There is no scale for these channels\n return null;\n }\n if (type !== undefined) {\n // Check if explicitly specified scale type is supported by the channel\n if (!channelSupportScaleType(channel, type)) {\n log.warn(log.message.scaleTypeNotWorkWithChannel(channel, type, defaultScaleType));\n return defaultScaleType;\n }\n\n // Check if explicitly specified scale type is supported by the data type\n if (isFieldDef(fieldDef) && !scaleTypeSupportDataType(type, fieldDef.type)) {\n log.warn(log.message.scaleTypeNotWorkWithFieldDef(type, defaultScaleType));\n return defaultScaleType;\n }\n\n return type;\n }\n\n return defaultScaleType;\n}\n\n/**\n * Determine appropriate default scale type.\n */\n// NOTE: Voyager uses this method.\nfunction defaultType(channel: Channel, fieldDef: TypedFieldDef | ScaleDatumDef, mark: MarkDef): ScaleType {\n switch (fieldDef.type) {\n case 'nominal':\n case 'ordinal': {\n if (isColorChannel(channel) || rangeType(channel) === 'discrete') {\n if (channel === 'shape' && fieldDef.type === 'ordinal') {\n log.warn(log.message.discreteChannelCannotEncode(channel, 'ordinal'));\n }\n return 'ordinal';\n }\n\n if (channel in POSITION_SCALE_CHANNEL_INDEX) {\n if (util.contains(['rect', 'bar', 'image', 'rule'], mark.type)) {\n // The rect/bar mark should fit into a band.\n // For rule, using band scale to make rule align with axis ticks better https://github.com/vega/vega-lite/issues/3429\n return 'band';\n }\n } else if (mark.type === 'arc' && channel in POLAR_POSITION_SCALE_CHANNEL_INDEX) {\n return 'band';\n }\n\n const dimensionSize = mark[getSizeChannel(channel)];\n if (isRelativeBandSize(dimensionSize)) {\n return 'band';\n }\n\n if (isPositionFieldOrDatumDef(fieldDef) && fieldDef.axis?.tickBand) {\n return 'band';\n }\n // Otherwise, use ordinal point scale so we can easily get center positions of the marks.\n return 'point';\n }\n\n case 'temporal':\n if (isColorChannel(channel)) {\n return 'time';\n } else if (rangeType(channel) === 'discrete') {\n log.warn(log.message.discreteChannelCannotEncode(channel, 'temporal'));\n // TODO: consider using quantize (equivalent to binning) once we have it\n return 'ordinal';\n } else if (isFieldDef(fieldDef) && fieldDef.timeUnit && normalizeTimeUnit(fieldDef.timeUnit).utc) {\n return 'utc';\n }\n return 'time';\n\n case 'quantitative':\n if (isColorChannel(channel)) {\n if (isFieldDef(fieldDef) && isBinning(fieldDef.bin)) {\n return 'bin-ordinal';\n }\n\n return 'linear';\n } else if (rangeType(channel) === 'discrete') {\n log.warn(log.message.discreteChannelCannotEncode(channel, 'quantitative'));\n // TODO: consider using quantize (equivalent to binning) once we have it\n return 'ordinal';\n }\n\n return 'linear';\n\n case 'geojson':\n return undefined;\n }\n\n /* istanbul ignore next: should never reach this */\n throw new Error(log.message.invalidFieldType(fieldDef.type));\n}\n","import {ScaleChannel, SCALE_CHANNELS, SHAPE} from '../../channel';\nimport {getFieldOrDatumDef, ScaleDatumDef, TypedFieldDef} from '../../channeldef';\nimport {GEOSHAPE} from '../../mark';\nimport {\n NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES,\n scaleCompatible,\n ScaleType,\n scaleTypePrecedence\n} from '../../scale';\nimport {GEOJSON} from '../../type';\nimport {keys} from '../../util';\nimport {VgScale} from '../../vega.schema';\nimport {isUnitModel, Model} from '../model';\nimport {defaultScaleResolve} from '../resolve';\nimport {Explicit, mergeValuesWithExplicit, tieBreakByComparing} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponent, ScaleComponentIndex} from './component';\nimport {parseScaleDomain} from './domain';\nimport {parseScaleProperty, parseScaleRange} from './properties';\nimport {scaleType} from './type';\n\nexport function parseScales(model: Model, {ignoreRange}: {ignoreRange?: boolean} = {}) {\n parseScaleCore(model);\n parseScaleDomain(model);\n for (const prop of NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES) {\n parseScaleProperty(model, prop);\n }\n if (!ignoreRange) {\n // range depends on zero\n parseScaleRange(model);\n }\n}\n\nexport function parseScaleCore(model: Model) {\n if (isUnitModel(model)) {\n model.component.scales = parseUnitScaleCore(model);\n } else {\n model.component.scales = parseNonUnitScaleCore(model);\n }\n}\n\n/**\n * Parse scales for all channels of a model.\n */\nfunction parseUnitScaleCore(model: UnitModel): ScaleComponentIndex {\n const {encoding, mark, markDef} = model;\n\n return SCALE_CHANNELS.reduce((scaleComponents: ScaleComponentIndex, channel: ScaleChannel) => {\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as TypedFieldDef | ScaleDatumDef; // must be typed def to have scale\n\n // Don't generate scale for shape of geoshape\n if (fieldOrDatumDef && mark === GEOSHAPE && channel === SHAPE && fieldOrDatumDef.type === GEOJSON) {\n return scaleComponents;\n }\n let specifiedScale = fieldOrDatumDef && fieldOrDatumDef['scale'];\n\n if (fieldOrDatumDef && specifiedScale !== null && specifiedScale !== false) {\n specifiedScale ??= {};\n\n const sType = scaleType(specifiedScale, channel, fieldOrDatumDef, markDef);\n scaleComponents[channel] = new ScaleComponent(model.scaleName(`${channel}`, true), {\n value: sType,\n explicit: specifiedScale.type === sType\n });\n }\n\n return scaleComponents;\n }, {});\n}\n\nconst scaleTypeTieBreaker = tieBreakByComparing(\n (st1: ScaleType, st2: ScaleType) => scaleTypePrecedence(st1) - scaleTypePrecedence(st2)\n);\n\nfunction parseNonUnitScaleCore(model: Model) {\n const scaleComponents: ScaleComponentIndex = (model.component.scales = {});\n\n const scaleTypeWithExplicitIndex: Partial>> = {};\n const resolve = model.component.resolve;\n\n // Parse each child scale and determine if a particular channel can be merged.\n for (const child of model.children) {\n parseScaleCore(child);\n\n // Instead of always merging right away -- check if it is compatible to merge first!\n for (const channel of keys(child.component.scales)) {\n // if resolve is undefined, set default first\n resolve.scale[channel] ??= defaultScaleResolve(channel, model);\n\n if (resolve.scale[channel] === 'shared') {\n const explicitScaleType = scaleTypeWithExplicitIndex[channel];\n const childScaleType = child.component.scales[channel].getWithExplicit('type');\n\n if (explicitScaleType) {\n if (scaleCompatible(explicitScaleType.value, childScaleType.value)) {\n // merge scale component if type are compatible\n scaleTypeWithExplicitIndex[channel] = mergeValuesWithExplicit(\n explicitScaleType,\n childScaleType,\n 'type',\n 'scale',\n scaleTypeTieBreaker\n );\n } else {\n // Otherwise, update conflicting channel to be independent\n resolve.scale[channel] = 'independent';\n // Remove from the index so they don't get merged\n delete scaleTypeWithExplicitIndex[channel];\n }\n } else {\n scaleTypeWithExplicitIndex[channel] = childScaleType;\n }\n }\n }\n }\n\n // Merge each channel listed in the index\n for (const channel of keys(scaleTypeWithExplicitIndex)) {\n // Create new merged scale component\n const name = model.scaleName(channel, true);\n const typeWithExplicit = scaleTypeWithExplicitIndex[channel];\n scaleComponents[channel] = new ScaleComponent(name, typeWithExplicit);\n\n // rename each child and mark them as merged\n for (const child of model.children) {\n const childScale = child.component.scales[channel];\n if (childScale) {\n child.renameScale(childScale.get('name'), name);\n childScale.merged = true;\n }\n }\n }\n\n return scaleComponents;\n}\n","import {\n AnchorValue,\n Axis as VgAxis,\n Legend as VgLegend,\n NewSignal,\n Projection as VgProjection,\n Signal,\n SignalRef,\n Title as VgTitle\n} from 'vega';\nimport {\n Channel,\n ExtendedChannel,\n FACET_CHANNELS,\n getPositionScaleChannel,\n isChannel,\n isScaleChannel,\n ScaleChannel,\n SingleDefChannel\n} from '../channel';\nimport {ChannelDef, FieldDef, FieldRefOption, getFieldDef, vgField} from '../channeldef';\nimport {Config} from '../config';\nimport {Data, DataSourceType} from '../data';\nimport {forEach, reduce} from '../encoding';\nimport {ExprRef, replaceExprRef} from '../expr';\nimport * as log from '../log';\nimport {Resolve} from '../resolve';\nimport {hasDiscreteDomain} from '../scale';\nimport {isFacetSpec} from '../spec';\nimport {\n extractCompositionLayout,\n GenericCompositionLayoutWithColumns,\n LayoutSizeMixins,\n SpecType,\n ViewBackground\n} from '../spec/base';\nimport {NormalizedSpec} from '../spec/index';\nimport {extractTitleConfig, isText, TitleParams} from '../title';\nimport {normalizeTransform, Transform} from '../transform';\nimport {contains, Dict, duplicate, isEmpty, keys, varName} from '../util';\nimport {isVgRangeStep, VgData, VgEncodeEntry, VgLayout, VgMarkGroup} from '../vega.schema';\nimport {assembleAxes} from './axis/assemble';\nimport {AxisComponentIndex} from './axis/component';\nimport {signalOrValueRef} from './common';\nimport {ConcatModel} from './concat';\nimport {DataComponent} from './data';\nimport {FacetModel} from './facet';\nimport {assembleHeaderGroups, assembleLayoutTitleBand, assembleTitleGroup} from './header/assemble';\nimport {HEADER_CHANNELS, LayoutHeaderComponent} from './header/component';\nimport {LayerModel} from './layer';\nimport {sizeExpr} from './layoutsize/assemble';\nimport {\n getSizeTypeFromLayoutSizeType,\n LayoutSizeComponent,\n LayoutSizeIndex,\n LayoutSizeType\n} from './layoutsize/component';\nimport {assembleLegends} from './legend/assemble';\nimport {LegendComponentIndex} from './legend/component';\nimport {parseLegend} from './legend/parse';\nimport {assembleProjections} from './projection/assemble';\nimport {ProjectionComponent} from './projection/component';\nimport {parseProjection} from './projection/parse';\nimport {assembleScales} from './scale/assemble';\nimport {ScaleComponent, ScaleComponentIndex} from './scale/component';\nimport {assembleDomain, getFieldFromDomain} from './scale/domain';\nimport {parseScales} from './scale/parse';\nimport {SelectionComponent} from './selection';\nimport {Split} from './split';\nimport {UnitModel} from './unit';\n\n/**\n * Composable Components that are intermediate results of the parsing phase of the\n * compilations. The components represents parts of the specification in a form that\n * can be easily merged (during parsing for composite specs).\n * In addition, these components are easily transformed into Vega specifications\n * during the \"assemble\" phase, which is the last phase of the compilation step.\n */\nexport interface Component {\n data: DataComponent;\n\n layoutSize: LayoutSizeComponent;\n\n layoutHeaders: {\n row?: LayoutHeaderComponent;\n column?: LayoutHeaderComponent;\n facet?: LayoutHeaderComponent;\n };\n\n mark: VgMarkGroup[];\n scales: ScaleComponentIndex;\n projection: ProjectionComponent;\n selection: Dict;\n\n /** Dictionary mapping channel to VgAxis definition */\n axes: AxisComponentIndex;\n\n /** Dictionary mapping channel to VgLegend definition */\n legends: LegendComponentIndex;\n\n resolve: Resolve;\n}\n\nexport interface NameMapInterface {\n rename(oldname: string, newName: string): void;\n has(name: string): boolean;\n get(name: string): string;\n}\n\nexport class NameMap implements NameMapInterface {\n private nameMap: Dict;\n\n constructor() {\n this.nameMap = {};\n }\n\n public rename(oldName: string, newName: string) {\n this.nameMap[oldName] = newName;\n }\n\n public has(name: string): boolean {\n return this.nameMap[name] !== undefined;\n }\n\n public get(name: string): string {\n // If the name appears in the _nameMap, we need to read its new name.\n // We have to loop over the dict just in case the new name also gets renamed.\n while (this.nameMap[name] && name !== this.nameMap[name]) {\n name = this.nameMap[name];\n }\n\n return name;\n }\n}\n\n/*\n We use type guards instead of `instanceof` as `instanceof` makes\n different parts of the compiler depend on the actual implementation of\n the model classes, which in turn depend on different parts of the compiler.\n Thus, `instanceof` leads to circular dependency problems.\n\n On the other hand, type guards only make different parts of the compiler\n depend on the type of the model classes, but not the actual implementation.\n*/\n\nexport function isUnitModel(model: Model): model is UnitModel {\n return model?.type === 'unit';\n}\n\nexport function isFacetModel(model: Model): model is FacetModel {\n return model?.type === 'facet';\n}\n\nexport function isConcatModel(model: Model): model is ConcatModel {\n return model?.type === 'concat';\n}\n\nexport function isLayerModel(model: Model): model is LayerModel {\n return model?.type === 'layer';\n}\n\nexport abstract class Model {\n public readonly name: string;\n\n public size: LayoutSizeMixins;\n\n public readonly title: TitleParams;\n public readonly description: string;\n\n public readonly data: Data | null;\n public readonly transforms: Transform[];\n public readonly layout: GenericCompositionLayoutWithColumns;\n\n /** Name map for scales, which can be renamed by a model's parent. */\n protected scaleNameMap: NameMapInterface;\n\n /** Name map for projections, which can be renamed by a model's parent. */\n protected projectionNameMap: NameMapInterface;\n\n /** Name map for signals, which can be renamed by a model's parent. */\n protected signalNameMap: NameMapInterface;\n\n public readonly component: Component;\n\n public readonly view?: ViewBackground;\n\n public abstract readonly children: Model[] = [];\n\n constructor(\n spec: NormalizedSpec,\n public readonly type: SpecType,\n public readonly parent: Model,\n parentGivenName: string,\n public readonly config: Config,\n resolve: Resolve,\n view?: ViewBackground\n ) {\n this.parent = parent;\n this.config = config;\n this.view = replaceExprRef(view);\n\n // If name is not provided, always use parent's givenName to avoid name conflicts.\n this.name = spec.name ?? parentGivenName;\n this.title = isText(spec.title) ? {text: spec.title} : spec.title ? replaceExprRef(spec.title) : undefined;\n\n // Shared name maps\n this.scaleNameMap = parent ? parent.scaleNameMap : new NameMap();\n this.projectionNameMap = parent ? parent.projectionNameMap : new NameMap();\n this.signalNameMap = parent ? parent.signalNameMap : new NameMap();\n\n this.data = spec.data;\n\n this.description = spec.description;\n this.transforms = normalizeTransform(spec.transform ?? []);\n this.layout = type === 'layer' || type === 'unit' ? {} : extractCompositionLayout(spec, type, config);\n\n this.component = {\n data: {\n sources: parent ? parent.component.data.sources : [],\n outputNodes: parent ? parent.component.data.outputNodes : {},\n outputNodeRefCounts: parent ? parent.component.data.outputNodeRefCounts : {},\n // data is faceted if the spec is a facet spec or the parent has faceted data and data is undefined\n isFaceted: isFacetSpec(spec) || (parent && parent.component.data.isFaceted && spec.data === undefined)\n },\n layoutSize: new Split(),\n layoutHeaders: {row: {}, column: {}, facet: {}},\n mark: null,\n resolve: {\n scale: {},\n axis: {},\n legend: {},\n ...(resolve ? duplicate(resolve) : {})\n },\n selection: null,\n scales: null,\n projection: null,\n axes: {},\n legends: {}\n };\n }\n\n public get width(): SignalRef {\n return this.getSizeSignalRef('width');\n }\n\n public get height(): SignalRef {\n return this.getSizeSignalRef('height');\n }\n\n public parse() {\n this.parseScale();\n\n this.parseLayoutSize(); // depends on scale\n this.renameTopLevelLayoutSizeSignal();\n\n this.parseSelections();\n this.parseProjection();\n this.parseData(); // (pathorder) depends on markDef; selection filters depend on parsed selections; depends on projection because some transforms require the finalized projection name.\n this.parseAxesAndHeaders(); // depends on scale and layout size\n this.parseLegends(); // depends on scale, markDef\n this.parseMarkGroup(); // depends on data name, scale, layout size, axisGroup, and children's scale, axis, legend and mark.\n }\n\n public abstract parseData(): void;\n\n public abstract parseSelections(): void;\n\n public parseScale() {\n parseScales(this);\n }\n\n public parseProjection() {\n parseProjection(this);\n }\n\n public abstract parseLayoutSize(): void;\n\n /**\n * Rename top-level spec's size to be just width / height, ignoring model name.\n * This essentially merges the top-level spec's width/height signals with the width/height signals\n * to help us reduce redundant signals declaration.\n */\n private renameTopLevelLayoutSizeSignal() {\n if (this.getName('width') !== 'width') {\n this.renameSignal(this.getName('width'), 'width');\n }\n if (this.getName('height') !== 'height') {\n this.renameSignal(this.getName('height'), 'height');\n }\n }\n\n public abstract parseMarkGroup(): void;\n\n public abstract parseAxesAndHeaders(): void;\n\n public parseLegends() {\n parseLegend(this);\n }\n\n public abstract assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[];\n public abstract assembleSignals(): NewSignal[];\n\n public abstract assembleSelectionData(data: readonly VgData[]): readonly VgData[];\n\n public assembleGroupStyle(): string | string[] {\n if (this.type === 'unit' || this.type === 'layer') {\n return this.view?.style ?? 'cell';\n }\n return undefined;\n }\n\n private assembleEncodeFromView(view: ViewBackground): VgEncodeEntry {\n // Exclude \"style\"\n const {style: _, ...baseView} = view;\n\n const e: VgEncodeEntry = {};\n for (const property of keys(baseView)) {\n const value = baseView[property];\n if (value !== undefined) {\n e[property] = signalOrValueRef(value);\n }\n }\n\n return e;\n }\n\n public assembleGroupEncodeEntry(isTopLevel: boolean): VgEncodeEntry {\n let encodeEntry: VgEncodeEntry = {};\n if (this.view) {\n encodeEntry = this.assembleEncodeFromView(this.view);\n }\n\n if (!isTopLevel) {\n // Descriptions are already added to the top-level description so we only need to add them to the inner views.\n if (this.description) {\n encodeEntry['description'] = signalOrValueRef(this.description);\n }\n\n // For top-level spec, we can set the global width and height signal to adjust the group size.\n // For other child specs, we have to manually set width and height in the encode entry.\n if (this.type === 'unit' || this.type === 'layer') {\n return {\n width: this.getSizeSignalRef('width'),\n height: this.getSizeSignalRef('height'),\n ...(encodeEntry ?? {})\n };\n }\n }\n\n return isEmpty(encodeEntry) ? undefined : encodeEntry;\n }\n\n public assembleLayout(): VgLayout {\n if (!this.layout) {\n return undefined;\n }\n\n const {spacing, ...layout} = this.layout;\n\n const {component, config} = this;\n const titleBand = assembleLayoutTitleBand(component.layoutHeaders, config);\n\n return {\n padding: spacing,\n ...this.assembleDefaultLayout(),\n ...layout,\n ...(titleBand ? {titleBand} : {})\n };\n }\n\n protected assembleDefaultLayout(): VgLayout {\n return {};\n }\n\n public abstract assembleLayoutSignals(): NewSignal[];\n\n public assembleHeaderMarks(): VgMarkGroup[] {\n const {layoutHeaders} = this.component;\n let headerMarks = [];\n\n for (const channel of FACET_CHANNELS) {\n if (layoutHeaders[channel].title) {\n headerMarks.push(assembleTitleGroup(this, channel));\n }\n }\n\n for (const channel of HEADER_CHANNELS) {\n headerMarks = headerMarks.concat(assembleHeaderGroups(this, channel));\n }\n return headerMarks;\n }\n\n public abstract assembleMarks(): VgMarkGroup[];\n\n public assembleAxes(): VgAxis[] {\n return assembleAxes(this.component.axes, this.config);\n }\n\n public assembleLegends(): VgLegend[] {\n return assembleLegends(this);\n }\n\n public assembleProjections(): VgProjection[] {\n return assembleProjections(this);\n }\n\n public assembleTitle(): VgTitle {\n const {encoding, ...titleNoEncoding} = this.title ?? ({} as TitleParams);\n\n const title: VgTitle = {\n ...extractTitleConfig(this.config.title).nonMark,\n ...titleNoEncoding,\n ...(encoding ? {encode: {update: encoding}} : {})\n };\n\n if (title.text) {\n if (contains(['unit', 'layer'], this.type)) {\n // Unit/Layer\n if (contains(['middle', undefined], title.anchor)) {\n title.frame ??= 'group';\n }\n } else {\n // composition with Vega layout\n\n // Set title = \"start\" by default for composition as \"middle\" does not look nice\n // https://github.com/vega/vega/issues/960#issuecomment-471360328\n title.anchor ??= 'start';\n }\n\n return isEmpty(title) ? undefined : title;\n }\n return undefined;\n }\n\n /**\n * Assemble the mark group for this model. We accept optional `signals` so that we can include concat top-level signals with the top-level model's local signals.\n */\n public assembleGroup(signals: Signal[] = []) {\n const group: VgMarkGroup = {};\n\n signals = signals.concat(this.assembleSignals());\n\n if (signals.length > 0) {\n group.signals = signals;\n }\n\n const layout = this.assembleLayout();\n if (layout) {\n group.layout = layout;\n }\n\n group.marks = [].concat(this.assembleHeaderMarks(), this.assembleMarks());\n\n // Only include scales if this spec is top-level or if parent is facet.\n // (Otherwise, it will be merged with upper-level's scope.)\n const scales = !this.parent || isFacetModel(this.parent) ? assembleScales(this) : [];\n if (scales.length > 0) {\n group.scales = scales;\n }\n\n const axes = this.assembleAxes();\n if (axes.length > 0) {\n group.axes = axes;\n }\n\n const legends = this.assembleLegends();\n if (legends.length > 0) {\n group.legends = legends;\n }\n\n return group;\n }\n\n public getName(text: string) {\n return varName((this.name ? `${this.name}_` : '') + text);\n }\n\n public getDataName(type: DataSourceType) {\n return this.getName(DataSourceType[type].toLowerCase());\n }\n\n /**\n * Request a data source name for the given data source type and mark that data source as required.\n * This method should be called in parse, so that all used data source can be correctly instantiated in assembleData().\n * You can lookup the correct dataset name in assemble with `lookupDataSource`.\n */\n public requestDataName(name: DataSourceType) {\n const fullName = this.getDataName(name);\n\n // Increase ref count. This is critical because otherwise we won't create a data source.\n // We also increase the ref counts on OutputNode.getSource() calls.\n const refCounts = this.component.data.outputNodeRefCounts;\n refCounts[fullName] = (refCounts[fullName] || 0) + 1;\n\n return fullName;\n }\n\n public getSizeSignalRef(layoutSizeType: LayoutSizeType): SignalRef {\n if (isFacetModel(this.parent)) {\n const sizeType = getSizeTypeFromLayoutSizeType(layoutSizeType);\n const channel = getPositionScaleChannel(sizeType);\n const scaleComponent = this.component.scales[channel];\n\n if (scaleComponent && !scaleComponent.merged) {\n // independent scale\n const type = scaleComponent.get('type');\n const range = scaleComponent.get('range');\n\n if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n const scaleName = scaleComponent.get('name');\n const domain = assembleDomain(this, channel);\n const field = getFieldFromDomain(domain);\n if (field) {\n const fieldRef = vgField({aggregate: 'distinct', field}, {expr: 'datum'});\n return {\n signal: sizeExpr(scaleName, scaleComponent, fieldRef)\n };\n } else {\n log.warn(log.message.unknownField(channel));\n return null;\n }\n }\n }\n }\n\n return {\n signal: this.signalNameMap.get(this.getName(layoutSizeType))\n };\n }\n\n /**\n * Lookup the name of the datasource for an output node. You probably want to call this in assemble.\n */\n public lookupDataSource(name: string) {\n const node = this.component.data.outputNodes[name];\n\n if (!node) {\n // Name not found in map so let's just return what we got.\n // This can happen if we already have the correct name.\n return name;\n }\n\n return node.getSource();\n }\n\n public getSignalName(oldSignalName: string): string {\n return this.signalNameMap.get(oldSignalName);\n }\n\n public renameSignal(oldName: string, newName: string) {\n this.signalNameMap.rename(oldName, newName);\n }\n\n public renameScale(oldName: string, newName: string) {\n this.scaleNameMap.rename(oldName, newName);\n }\n\n public renameProjection(oldName: string, newName: string) {\n this.projectionNameMap.rename(oldName, newName);\n }\n\n /**\n * @return scale name for a given channel after the scale has been parsed and named.\n */\n public scaleName(originalScaleName: ScaleChannel | string, parse?: boolean): string {\n if (parse) {\n // During the parse phase always return a value\n // No need to refer to rename map because a scale can't be renamed\n // before it has the original name.\n return this.getName(originalScaleName);\n }\n\n // If there is a scale for the channel, it should either\n // be in the scale component or exist in the name map\n if (\n // If there is a scale for the channel, there should be a local scale component for it\n (isChannel(originalScaleName) && isScaleChannel(originalScaleName) && this.component.scales[originalScaleName]) ||\n // in the scale name map (the scale get merged by its parent)\n this.scaleNameMap.has(this.getName(originalScaleName))\n ) {\n return this.scaleNameMap.get(this.getName(originalScaleName));\n }\n return undefined;\n }\n\n /**\n * @return projection name after the projection has been parsed and named.\n */\n public projectionName(parse?: boolean): string {\n if (parse) {\n // During the parse phase always return a value\n // No need to refer to rename map because a projection can't be renamed\n // before it has the original name.\n return this.getName('projection');\n }\n\n if (\n (this.component.projection && !this.component.projection.merged) ||\n this.projectionNameMap.has(this.getName('projection'))\n ) {\n return this.projectionNameMap.get(this.getName('projection'));\n }\n return undefined;\n }\n\n /**\n * Corrects the data references in marks after assemble.\n */\n public correctDataNames = (mark: VgMarkGroup) => {\n // TODO: make this correct\n\n // for normal data references\n if (mark.from && mark.from.data) {\n mark.from.data = this.lookupDataSource(mark.from.data);\n }\n\n // for access to facet data\n if (mark.from && mark.from.facet && mark.from.facet.data) {\n mark.from.facet.data = this.lookupDataSource(mark.from.facet.data);\n }\n\n return mark;\n };\n\n /**\n * Traverse a model's hierarchy to get the scale component for a particular channel.\n */\n public getScaleComponent(channel: ScaleChannel): ScaleComponent {\n /* istanbul ignore next: This is warning for debugging test */\n if (!this.component.scales) {\n throw new Error(\n 'getScaleComponent cannot be called before parseScale(). Make sure you have called parseScale or use parseUnitModelWithScale().'\n );\n }\n\n const localScaleComponent = this.component.scales[channel];\n if (localScaleComponent && !localScaleComponent.merged) {\n return localScaleComponent;\n }\n return this.parent ? this.parent.getScaleComponent(channel) : undefined;\n }\n\n /**\n * Traverse a model's hierarchy to get a particular selection component.\n */\n public getSelectionComponent(variableName: string, origName: string): SelectionComponent {\n let sel = this.component.selection[variableName];\n if (!sel && this.parent) {\n sel = this.parent.getSelectionComponent(variableName, origName);\n }\n if (!sel) {\n throw new Error(log.message.selectionNotFound(origName));\n }\n return sel;\n }\n\n /**\n * Returns true if the model has a signalRef for an axis orient.\n */\n public hasAxisOrientSignalRef() {\n return (\n this.component.axes.x?.some(a => a.hasOrientSignalRef()) ||\n this.component.axes.y?.some(a => a.hasOrientSignalRef())\n );\n }\n}\n\n/** Abstract class for UnitModel and FacetModel. Both of which can contain fieldDefs as a part of its own specification. */\nexport abstract class ModelWithField extends Model {\n public abstract fieldDef(channel: SingleDefChannel): FieldDef;\n\n /** Get \"field\" reference for Vega */\n public vgField(channel: SingleDefChannel, opt: FieldRefOption = {}) {\n const fieldDef = this.fieldDef(channel);\n\n if (!fieldDef) {\n return undefined;\n }\n\n return vgField(fieldDef, opt);\n }\n\n protected abstract getMapping(): Partial>;\n\n public reduceFieldDef(f: (acc: U, fd: FieldDef, c: Channel) => U, init: T): T {\n return reduce(\n this.getMapping(),\n (acc: U, cd: ChannelDef, c: Channel) => {\n const fieldDef = getFieldDef(cd);\n if (fieldDef) {\n return f(acc, fieldDef, c);\n }\n return acc;\n },\n init\n );\n }\n\n public forEachFieldDef(f: (fd: FieldDef, c: ExtendedChannel) => void, t?: any) {\n forEach(\n this.getMapping(),\n (cd, c) => {\n const fieldDef = getFieldDef(cd);\n if (fieldDef) {\n f(fieldDef, c);\n }\n },\n t\n );\n }\n\n public abstract channelHasField(channel: Channel): boolean;\n}\n","import {KDETransform as VgKDETransform} from 'vega';\nimport {DensityTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for density transform nodes\n */\nexport class DensityTransformNode extends DataFlowNode {\n public clone() {\n return new DensityTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: DensityTransform) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? 'value', specifiedAs[1] ?? 'density'];\n }\n\n public dependentFields() {\n return new Set([this.transform.density, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `DensityTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgKDETransform {\n const {density, ...rest} = this.transform;\n const result: VgKDETransform = {\n type: 'kde',\n field: density,\n ...rest\n };\n return result;\n }\n}\n","import {FilterTransform as VgFilterTransform} from 'vega';\nimport {isScaleChannel} from '../../channel';\nimport {TypedFieldDef, vgField as fieldRef} from '../../channeldef';\nimport {isPathMark} from '../../mark';\nimport {hasContinuousDomain} from '../../scale';\nimport {Dict, hash, keys} from '../../util';\nimport {getMarkPropOrConfig} from '../common';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class FilterInvalidNode extends DataFlowNode {\n public clone() {\n return new FilterInvalidNode(null, {...this.filter});\n }\n\n constructor(parent: DataFlowNode, public readonly filter: Dict>) {\n super(parent);\n }\n\n public static make(parent: DataFlowNode, model: UnitModel): FilterInvalidNode {\n const {config, mark, markDef} = model;\n\n const invalid = getMarkPropOrConfig('invalid', markDef, config);\n if (invalid !== 'filter') {\n return null;\n }\n\n const filter = model.reduceFieldDef((aggregator: Dict>, fieldDef, channel) => {\n const scaleComponent = isScaleChannel(channel) && model.getScaleComponent(channel);\n if (scaleComponent) {\n const scaleType = scaleComponent.get('type');\n\n // While discrete domain scales can handle invalid values, continuous scales can't.\n // Thus, for non-path marks, we have to filter null for scales with continuous domains.\n // (For path marks, we will use \"defined\" property and skip these values instead.)\n if (hasContinuousDomain(scaleType) && fieldDef.aggregate !== 'count' && !isPathMark(mark)) {\n aggregator[fieldDef.field] = fieldDef as any; // we know that the fieldDef is a typed field def\n }\n }\n return aggregator;\n }, {} as Dict>);\n\n if (!keys(filter).length) {\n return null;\n }\n\n return new FilterInvalidNode(parent, filter);\n }\n\n public dependentFields() {\n return new Set(keys(this.filter));\n }\n\n public producedFields() {\n return new Set(); // filter does not produce any new fields\n }\n\n public hash() {\n return `FilterInvalid ${hash(this.filter)}`;\n }\n\n /**\n * Create the VgTransforms for each of the filtered fields.\n */\n public assemble(): VgFilterTransform {\n const filters = keys(this.filter).reduce((vegaFilters, field) => {\n const fieldDef = this.filter[field];\n const ref = fieldRef(fieldDef, {expr: 'datum'});\n\n if (fieldDef !== null) {\n if (fieldDef.type === 'temporal') {\n vegaFilters.push(`(isDate(${ref}) || (isValid(${ref}) && isFinite(+${ref})))`);\n } else if (fieldDef.type === 'quantitative') {\n vegaFilters.push(`isValid(${ref})`);\n vegaFilters.push(`isFinite(+${ref})`);\n } else {\n // should never get here\n }\n }\n return vegaFilters;\n }, [] as string[]);\n\n return filters.length > 0\n ? {\n type: 'filter',\n expr: filters.join(' && ')\n }\n : null;\n }\n}\n","import {FlattenTransform as VgFlattenTransform} from 'vega';\nimport {FlattenTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for flatten transform nodes\n */\nexport class FlattenTransformNode extends DataFlowNode {\n public clone() {\n return new FlattenTransformNode(this.parent, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: FlattenTransform) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const {flatten, as = []} = this.transform;\n this.transform.as = flatten.map((f, i) => as[i] ?? f);\n }\n\n public dependentFields() {\n return new Set(this.transform.flatten);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `FlattenTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgFlattenTransform {\n const {flatten: fields, as} = this.transform;\n\n const result: VgFlattenTransform = {\n type: 'flatten',\n fields,\n as\n };\n return result;\n }\n}\n","import {FoldTransform as VgFoldTransform} from 'vega';\nimport {FoldTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for flatten transform nodes\n */\nexport class FoldTransformNode extends DataFlowNode {\n public clone() {\n return new FoldTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: FoldTransform) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? 'key', specifiedAs[1] ?? 'value'];\n }\n\n public dependentFields() {\n return new Set(this.transform.fold);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `FoldTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgFoldTransform {\n const {fold, as} = this.transform;\n const result: VgFoldTransform = {\n type: 'fold',\n fields: fold,\n as\n };\n return result;\n }\n}\n","import {Transforms as VgTransform, Vector2} from 'vega';\nimport {isString} from 'vega-util';\nimport {GeoPositionChannel, LATITUDE, LATITUDE2, LONGITUDE, LONGITUDE2, SHAPE} from '../../channel';\nimport {getFieldOrDatumDef, isDatumDef, isFieldDef, isValueDef} from '../../channeldef';\nimport {GEOJSON} from '../../type';\nimport {duplicate, hash} from '../../util';\nimport {VgExprRef} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class GeoJSONNode extends DataFlowNode {\n public clone() {\n return new GeoJSONNode(null, duplicate(this.fields), this.geojson, this.signal);\n }\n\n public static parseAll(parent: DataFlowNode, model: UnitModel): DataFlowNode {\n if (model.component.projection && !model.component.projection.isFit) {\n return parent;\n }\n\n let geoJsonCounter = 0;\n\n for (const coordinates of [\n [LONGITUDE, LATITUDE],\n [LONGITUDE2, LATITUDE2]\n ] as Vector2[]) {\n const pair = coordinates.map(channel => {\n const def = getFieldOrDatumDef(model.encoding[channel]);\n return isFieldDef(def)\n ? def.field\n : isDatumDef(def)\n ? {expr: `${def.datum}`}\n : isValueDef(def)\n ? {expr: `${def['value']}`}\n : undefined;\n }) as [GeoPositionChannel, GeoPositionChannel];\n\n if (pair[0] || pair[1]) {\n parent = new GeoJSONNode(parent, pair, null, model.getName(`geojson_${geoJsonCounter++}`));\n }\n }\n\n if (model.channelHasField(SHAPE)) {\n const fieldDef = model.typedFieldDef(SHAPE);\n if (fieldDef.type === GEOJSON) {\n parent = new GeoJSONNode(parent, null, fieldDef.field, model.getName(`geojson_${geoJsonCounter++}`));\n }\n }\n\n return parent;\n }\n\n constructor(\n parent: DataFlowNode,\n private fields?: Vector2,\n private geojson?: string,\n private signal?: string\n ) {\n super(parent);\n }\n\n public dependentFields() {\n const fields = (this.fields ?? []).filter(isString) as string[];\n return new Set([...(this.geojson ? [this.geojson] : []), ...fields]);\n }\n\n public producedFields() {\n return new Set();\n }\n\n public hash() {\n return `GeoJSON ${this.geojson} ${this.signal} ${hash(this.fields)}`;\n }\n\n public assemble(): VgTransform[] {\n return [\n ...(this.geojson\n ? [\n {\n type: 'filter',\n expr: `isValid(datum[\"${this.geojson}\"])`\n } as const\n ]\n : []),\n {\n type: 'geojson',\n ...(this.fields ? {fields: this.fields} : {}),\n ...(this.geojson ? {geojson: this.geojson} : {}),\n signal: this.signal\n }\n ];\n }\n}\n","import {GeoPointTransform as VgGeoPointTransform, Vector2} from 'vega';\nimport {isString} from 'vega-util';\nimport {GeoPositionChannel, LATITUDE, LATITUDE2, LONGITUDE, LONGITUDE2} from '../../channel';\nimport {getFieldOrDatumDef, isDatumDef, isFieldDef, isValueDef} from '../../channeldef';\nimport {duplicate, hash} from '../../util';\nimport {VgExprRef} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class GeoPointNode extends DataFlowNode {\n public clone() {\n return new GeoPointNode(null, this.projection, duplicate(this.fields), duplicate(this.as));\n }\n\n constructor(\n parent: DataFlowNode,\n private projection: string,\n private fields: [string | VgExprRef, string | VgExprRef],\n private as: [string, string]\n ) {\n super(parent);\n }\n\n public static parseAll(parent: DataFlowNode, model: UnitModel): DataFlowNode {\n if (!model.projectionName()) {\n return parent;\n }\n\n for (const coordinates of [\n [LONGITUDE, LATITUDE],\n [LONGITUDE2, LATITUDE2]\n ] as Vector2[]) {\n const pair = coordinates.map(channel => {\n const def = getFieldOrDatumDef(model.encoding[channel]);\n return isFieldDef(def)\n ? def.field\n : isDatumDef(def)\n ? {expr: `${def.datum}`}\n : isValueDef(def)\n ? {expr: `${def['value']}`}\n : undefined;\n }) as [GeoPositionChannel, GeoPositionChannel];\n\n const suffix = coordinates[0] === LONGITUDE2 ? '2' : '';\n\n if (pair[0] || pair[1]) {\n parent = new GeoPointNode(parent, model.projectionName(), pair, [\n model.getName(`x${suffix}`),\n model.getName(`y${suffix}`)\n ]);\n }\n }\n\n return parent;\n }\n\n public dependentFields() {\n return new Set(this.fields.filter(isString));\n }\n\n public producedFields() {\n return new Set(this.as);\n }\n\n public hash() {\n return `Geopoint ${this.projection} ${hash(this.fields)} ${hash(this.as)}`;\n }\n\n public assemble(): VgGeoPointTransform {\n return {\n type: 'geopoint',\n projection: this.projection,\n fields: this.fields,\n as: this.as\n };\n }\n}\n","import {\n FormulaTransform as VgFormulaTransform,\n ImputeTransform as VgImputeTransform,\n SignalRef,\n WindowTransform as VgWindowTransform\n} from 'vega';\nimport {isFieldDef} from '../../channeldef';\nimport {pathGroupingFields} from '../../encoding';\nimport {ImputeSequence, ImputeTransform, isImputeSequence} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class ImputeNode extends DataFlowNode {\n public clone() {\n return new ImputeNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private readonly transform: ImputeTransform) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set([this.transform.impute, this.transform.key, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set([this.transform.impute]);\n }\n\n private processSequence(keyvals: ImputeSequence): SignalRef {\n const {start = 0, stop, step} = keyvals;\n const result = [start, stop, ...(step ? [step] : [])].join(',');\n\n return {signal: `sequence(${result})`};\n }\n\n public static makeFromTransform(parent: DataFlowNode, imputeTransform: ImputeTransform): ImputeNode {\n return new ImputeNode(parent, imputeTransform);\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: UnitModel) {\n const encoding = model.encoding;\n const xDef = encoding.x;\n const yDef = encoding.y;\n\n if (isFieldDef(xDef) && isFieldDef(yDef)) {\n const imputedChannel = xDef.impute ? xDef : yDef.impute ? yDef : undefined;\n if (imputedChannel === undefined) {\n return undefined;\n }\n const keyChannel = xDef.impute ? yDef : yDef.impute ? xDef : undefined;\n const {method, value, frame, keyvals} = imputedChannel.impute;\n const groupbyFields = pathGroupingFields(model.mark, encoding);\n\n return new ImputeNode(parent, {\n impute: imputedChannel.field,\n key: keyChannel.field,\n ...(method ? {method} : {}),\n ...(value !== undefined ? {value} : {}),\n ...(frame ? {frame} : {}),\n ...(keyvals !== undefined ? {keyvals} : {}),\n ...(groupbyFields.length ? {groupby: groupbyFields} : {})\n });\n }\n return null;\n }\n\n public hash() {\n return `Impute ${hash(this.transform)}`;\n }\n\n public assemble() {\n const {impute, key, keyvals, method, groupby, value, frame = [null, null] as [null, null]} = this.transform;\n\n const imputeTransform: VgImputeTransform = {\n type: 'impute',\n field: impute,\n key,\n ...(keyvals ? {keyvals: isImputeSequence(keyvals) ? this.processSequence(keyvals) : keyvals} : {}),\n method: 'value',\n ...(groupby ? {groupby} : {}),\n value: !method || method === 'value' ? value : null\n };\n\n if (method && method !== 'value') {\n const deriveNewField: VgWindowTransform = {\n type: 'window',\n as: [`imputed_${impute}_value`],\n ops: [method],\n fields: [impute],\n frame,\n ignorePeers: false,\n ...(groupby ? {groupby} : {})\n };\n const replaceOriginal: VgFormulaTransform = {\n type: 'formula',\n expr: `datum.${impute} === null ? datum.imputed_${impute}_value : datum.${impute}`,\n as: impute\n };\n return [imputeTransform, deriveNewField, replaceOriginal];\n } else {\n return [imputeTransform];\n }\n }\n}\n","import {LoessTransform as VgLoessTransform} from 'vega';\nimport {LoessTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for loess transform nodes\n */\nexport class LoessTransformNode extends DataFlowNode {\n public clone() {\n return new LoessTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: LoessTransform) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? transform.on, specifiedAs[1] ?? transform.loess];\n }\n\n public dependentFields() {\n return new Set([this.transform.loess, this.transform.on, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `LoessTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgLoessTransform {\n const {loess, on, ...rest} = this.transform;\n const result: VgLoessTransform = {\n type: 'loess',\n x: on,\n y: loess,\n ...rest\n };\n return result;\n }\n}\n","import {LookupTransform as VgLookupTransform} from 'vega';\nimport {array, isString} from 'vega-util';\nimport * as log from '../../log';\nimport {isLookupData, isLookupSelection, LookupTransform} from '../../transform';\nimport {duplicate, hash, varName} from '../../util';\nimport {Model} from '../model';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {findSource} from './parse';\nimport {SourceNode} from './source';\nimport {DataSourceType} from '../../data';\n\nexport class LookupNode extends DataFlowNode {\n public clone() {\n return new LookupNode(null, duplicate(this.transform), this.secondary);\n }\n\n constructor(parent: DataFlowNode, public readonly transform: LookupTransform, public readonly secondary: string) {\n super(parent);\n }\n\n public static make(parent: DataFlowNode, model: Model, transform: LookupTransform, counter: number) {\n const sources = model.component.data.sources;\n const {from} = transform;\n let fromOutputNode = null;\n\n if (isLookupData(from)) {\n let fromSource = findSource(from.data, sources);\n\n if (!fromSource) {\n fromSource = new SourceNode(from.data);\n sources.push(fromSource);\n }\n\n const fromOutputName = model.getName(`lookup_${counter}`);\n fromOutputNode = new OutputNode(\n fromSource,\n fromOutputName,\n DataSourceType.Lookup,\n model.component.data.outputNodeRefCounts\n );\n model.component.data.outputNodes[fromOutputName] = fromOutputNode;\n } else if (isLookupSelection(from)) {\n const selName = from.param;\n transform = {as: selName, ...transform};\n let selCmpt;\n\n try {\n selCmpt = model.getSelectionComponent(varName(selName), selName);\n } catch (e) {\n throw new Error(log.message.cannotLookupVariableParameter(selName));\n }\n\n fromOutputNode = selCmpt.materialized;\n if (!fromOutputNode) {\n throw new Error(log.message.noSameUnitLookup(selName));\n }\n }\n\n return new LookupNode(parent, transform, fromOutputNode.getSource());\n }\n\n public dependentFields() {\n return new Set([this.transform.lookup]);\n }\n\n public producedFields() {\n return new Set(this.transform.as ? array(this.transform.as) : this.transform.from.fields);\n }\n\n public hash() {\n return `Lookup ${hash({transform: this.transform, secondary: this.secondary})}`;\n }\n\n public assemble(): VgLookupTransform {\n let foreign: Partial;\n\n if (this.transform.from.fields) {\n // lookup a few fields and add create a flat output\n foreign = {\n values: this.transform.from.fields,\n ...(this.transform.as ? {as: array(this.transform.as)} : {})\n };\n } else {\n // lookup full record and nest it\n let asName = this.transform.as;\n if (!isString(asName)) {\n log.warn(log.message.NO_FIELDS_NEEDS_AS);\n asName = '_lookup';\n }\n\n foreign = {\n as: [asName]\n };\n }\n\n return {\n type: 'lookup',\n from: this.secondary,\n key: this.transform.from.key,\n fields: [this.transform.lookup],\n ...foreign,\n ...(this.transform.default ? {default: this.transform.default} : {})\n };\n }\n}\n","import {QuantileTransform as VgQuantileTransform} from 'vega';\nimport {QuantileTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for quantile transform nodes\n */\nexport class QuantileTransformNode extends DataFlowNode {\n public clone() {\n return new QuantileTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: QuantileTransform) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? 'prob', specifiedAs[1] ?? 'value'];\n }\n\n public dependentFields() {\n return new Set([this.transform.quantile, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `QuantileTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgQuantileTransform {\n const {quantile, ...rest} = this.transform;\n const result: VgQuantileTransform = {\n type: 'quantile',\n field: quantile,\n ...rest\n };\n return result;\n }\n}\n","import {RegressionTransform as VgRegressionTransform} from 'vega';\nimport {RegressionTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for regression transform nodes\n */\nexport class RegressionTransformNode extends DataFlowNode {\n public clone() {\n return new RegressionTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: RegressionTransform) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? transform.on, specifiedAs[1] ?? transform.regression];\n }\n\n public dependentFields() {\n return new Set([this.transform.regression, this.transform.on, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `RegressionTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgRegressionTransform {\n const {regression, on, ...rest} = this.transform;\n const result: VgRegressionTransform = {\n type: 'regression',\n x: on,\n y: regression,\n ...rest\n };\n return result;\n }\n}\n","import {PivotTransform} from '../../transform';\nimport {duplicate, hash, unique} from '../../util';\nimport {PivotTransform as VgPivotTransform} from 'vega';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for pivot transform nodes.\n */\nexport class PivotTransformNode extends DataFlowNode {\n public clone() {\n return new PivotTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: PivotTransform) {\n super(parent);\n }\n\n public addDimensions(fields: readonly string[]) {\n this.transform.groupby = unique((this.transform.groupby ?? []).concat(fields), d => d);\n }\n\n public producedFields(): undefined {\n return undefined; // return undefined so that potentially everything can depend on the pivot\n }\n\n public dependentFields() {\n return new Set([this.transform.pivot, this.transform.value, ...(this.transform.groupby ?? [])]);\n }\n\n public hash() {\n return `PivotTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgPivotTransform {\n const {pivot, value, groupby, limit, op} = this.transform;\n return {\n type: 'pivot',\n field: pivot,\n value,\n ...(limit !== undefined ? {limit} : {}),\n ...(op !== undefined ? {op} : {}),\n ...(groupby !== undefined ? {groupby} : {})\n };\n }\n}\n","import {SampleTransform as VgSampleTransform} from 'vega';\nimport {SampleTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for the sample transform nodes\n */\nexport class SampleTransformNode extends DataFlowNode {\n public clone() {\n return new SampleTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: SampleTransform) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set();\n }\n\n public producedFields() {\n return new Set();\n }\n\n public hash() {\n return `SampleTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgSampleTransform {\n return {\n type: 'sample',\n size: this.transform.sample\n };\n }\n}\n","import {InlineDataset, isUrlData} from '../../data';\nimport {Dict} from '../../util';\nimport {VgData} from '../../vega.schema';\nimport {DataComponent} from './';\nimport {AggregateNode} from './aggregate';\nimport {BinNode} from './bin';\nimport {CalculateNode} from './calculate';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {DensityTransformNode} from './density';\nimport {FacetNode} from './facet';\nimport {FilterNode} from './filter';\nimport {FilterInvalidNode} from './filterinvalid';\nimport {FlattenTransformNode} from './flatten';\nimport {FoldTransformNode} from './fold';\nimport {ParseNode} from './formatparse';\nimport {GeoJSONNode} from './geojson';\nimport {GeoPointNode} from './geopoint';\nimport {GraticuleNode} from './graticule';\nimport {IdentifierNode} from './identifier';\nimport {ImputeNode} from './impute';\nimport {JoinAggregateTransformNode} from './joinaggregate';\nimport {LoessTransformNode} from './loess';\nimport {LookupNode} from './lookup';\nimport {QuantileTransformNode} from './quantile';\nimport {RegressionTransformNode} from './regression';\nimport {PivotTransformNode} from './pivot';\nimport {SampleTransformNode} from './sample';\nimport {SequenceNode} from './sequence';\nimport {SourceNode} from './source';\nimport {StackNode} from './stack';\nimport {TimeUnitNode} from './timeunit';\nimport {WindowTransformNode} from './window';\n\nfunction makeWalkTree(data: VgData[]) {\n // to name datasources\n let datasetIndex = 0;\n\n /**\n * Recursively walk down the tree.\n */\n function walkTree(node: DataFlowNode, dataSource: VgData) {\n if (node instanceof SourceNode) {\n // If the source is a named data source or a data source with values, we need\n // to put it in a different data source. Otherwise, Vega may override the data.\n if (!node.isGenerator && !isUrlData(node.data)) {\n data.push(dataSource);\n const newData: VgData = {\n name: null,\n source: dataSource.name,\n transform: []\n };\n dataSource = newData;\n }\n }\n\n if (node instanceof ParseNode) {\n if (node.parent instanceof SourceNode && !dataSource.source) {\n // If node's parent is a root source and the data source does not refer to another data source, use normal format parse\n dataSource.format = {\n ...(dataSource.format ?? {}),\n parse: node.assembleFormatParse()\n };\n\n // add calculates for all nested fields\n dataSource.transform.push(...node.assembleTransforms(true));\n } else {\n // Otherwise use Vega expression to parse\n dataSource.transform.push(...node.assembleTransforms());\n }\n }\n\n if (node instanceof FacetNode) {\n if (!dataSource.name) {\n dataSource.name = `data_${datasetIndex++}`;\n }\n\n if (!dataSource.source || dataSource.transform.length > 0) {\n data.push(dataSource);\n node.data = dataSource.name;\n } else {\n node.data = dataSource.source;\n }\n\n data.push(...node.assemble());\n\n // break here because the rest of the tree has to be taken care of by the facet.\n return;\n }\n\n if (\n node instanceof GraticuleNode ||\n node instanceof SequenceNode ||\n node instanceof FilterInvalidNode ||\n node instanceof FilterNode ||\n node instanceof CalculateNode ||\n node instanceof GeoPointNode ||\n node instanceof AggregateNode ||\n node instanceof LookupNode ||\n node instanceof WindowTransformNode ||\n node instanceof JoinAggregateTransformNode ||\n node instanceof FoldTransformNode ||\n node instanceof FlattenTransformNode ||\n node instanceof DensityTransformNode ||\n node instanceof LoessTransformNode ||\n node instanceof QuantileTransformNode ||\n node instanceof RegressionTransformNode ||\n node instanceof IdentifierNode ||\n node instanceof SampleTransformNode ||\n node instanceof PivotTransformNode\n ) {\n dataSource.transform.push(node.assemble());\n }\n\n if (\n node instanceof BinNode ||\n node instanceof TimeUnitNode ||\n node instanceof ImputeNode ||\n node instanceof StackNode ||\n node instanceof GeoJSONNode\n ) {\n dataSource.transform.push(...node.assemble());\n }\n\n if (node instanceof OutputNode) {\n if (dataSource.source && dataSource.transform.length === 0) {\n node.setSource(dataSource.source);\n } else if (node.parent instanceof OutputNode) {\n // Note that an output node may be required but we still do not assemble a\n // separate data source for it.\n node.setSource(dataSource.name);\n } else {\n if (!dataSource.name) {\n dataSource.name = `data_${datasetIndex++}`;\n }\n\n // Here we set the name of the datasource we generated. From now on\n // other assemblers can use it.\n node.setSource(dataSource.name);\n\n // if this node has more than one child, we will add a datasource automatically\n if (node.numChildren() === 1) {\n data.push(dataSource);\n const newData: VgData = {\n name: null,\n source: dataSource.name,\n transform: []\n };\n dataSource = newData;\n }\n }\n }\n\n switch (node.numChildren()) {\n case 0:\n // done\n if (node instanceof OutputNode && (!dataSource.source || dataSource.transform.length > 0)) {\n // do not push empty datasources that are simply references\n data.push(dataSource);\n }\n break;\n case 1:\n walkTree(node.children[0], dataSource);\n break;\n default: {\n if (!dataSource.name) {\n dataSource.name = `data_${datasetIndex++}`;\n }\n\n let source = dataSource.name;\n if (!dataSource.source || dataSource.transform.length > 0) {\n data.push(dataSource);\n } else {\n source = dataSource.source;\n }\n\n for (const child of node.children) {\n const newData: VgData = {\n name: null,\n source: source,\n transform: []\n };\n walkTree(child, newData);\n }\n break;\n }\n }\n }\n\n return walkTree;\n}\n\n/**\n * Assemble data sources that are derived from faceted data.\n */\nexport function assembleFacetData(root: FacetNode): VgData[] {\n const data: VgData[] = [];\n const walkTree = makeWalkTree(data);\n\n for (const child of root.children) {\n walkTree(child, {\n source: root.name,\n name: null,\n transform: []\n });\n }\n\n return data;\n}\n\n/**\n * Create Vega data array from a given compiled model and append all of them to the given array\n *\n * @param model\n * @param data array\n * @return modified data array\n */\nexport function assembleRootData(dataComponent: DataComponent, datasets: Dict): VgData[] {\n const data: VgData[] = [];\n\n // dataComponent.sources.forEach(debug);\n // draw(dataComponent.sources);\n\n const walkTree = makeWalkTree(data);\n\n let sourceIndex = 0;\n\n for (const root of dataComponent.sources) {\n // assign a name if the source does not have a name yet\n if (!root.hasName()) {\n root.dataName = `source_${sourceIndex++}`;\n }\n\n const newData: VgData = root.assemble();\n\n walkTree(root, newData);\n }\n\n // remove empty transform arrays for cleaner output\n for (const d of data) {\n if (d.transform.length === 0) {\n delete d.transform;\n }\n }\n\n // move sources without transforms (the ones that are potentially used in lookups) to the beginning\n let whereTo = 0;\n for (const [i, d] of data.entries()) {\n if ((d.transform ?? []).length === 0 && !d.source) {\n data.splice(whereTo++, 0, data.splice(i, 1)[0]);\n }\n }\n\n // now fix the from references in lookup transforms\n for (const d of data) {\n for (const t of d.transform ?? []) {\n if (t.type === 'lookup') {\n t.from = dataComponent.outputNodes[t.from].getSource();\n }\n }\n }\n\n // inline values for datasets that are in the datastore\n for (const d of data) {\n if (d.name in datasets) {\n d.values = datasets[d.name];\n }\n }\n\n return data;\n}\n","import {AxisOrient, SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {FacetChannel, FACET_CHANNELS} from '../../channel';\nimport {title as fieldDefTitle} from '../../channeldef';\nimport {contains, getFirstDefined} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {assembleAxis} from '../axis/assemble';\nimport {FacetModel} from '../facet';\nimport {parseGuideResolve} from '../resolve';\nimport {getHeaderProperty} from './common';\nimport {HeaderChannel, HeaderComponent} from './component';\n\nexport function getHeaderType(orient: AxisOrient | SignalRef) {\n if (orient === 'top' || orient === 'left' || isSignalRef(orient)) {\n // we always use header for orient signal since we can't dynamically make header becomes footer\n return 'header';\n }\n return 'footer';\n}\n\nexport function parseFacetHeaders(model: FacetModel) {\n for (const channel of FACET_CHANNELS) {\n parseFacetHeader(model, channel);\n }\n\n mergeChildAxis(model, 'x');\n mergeChildAxis(model, 'y');\n}\n\nfunction parseFacetHeader(model: FacetModel, channel: FacetChannel) {\n const {facet, config, child, component} = model;\n if (model.channelHasField(channel)) {\n const fieldDef = facet[channel];\n const titleConfig = getHeaderProperty('title', null, config, channel);\n let title = fieldDefTitle(fieldDef, config, {\n allowDisabling: true,\n includeDefault: titleConfig === undefined || !!titleConfig\n });\n\n if (child.component.layoutHeaders[channel].title) {\n // TODO: better handle multiline titles\n title = isArray(title) ? title.join(', ') : title;\n\n // merge title with child to produce \"Title / Subtitle / Sub-subtitle\"\n title += ` / ${child.component.layoutHeaders[channel].title}`;\n child.component.layoutHeaders[channel].title = null;\n }\n\n const labelOrient = getHeaderProperty('labelOrient', fieldDef.header, config, channel);\n\n const labels =\n fieldDef.header !== null ? getFirstDefined(fieldDef.header?.labels, config.header.labels, true) : false;\n const headerType = contains(['bottom', 'right'], labelOrient) ? 'footer' : 'header';\n\n component.layoutHeaders[channel] = {\n title: fieldDef.header !== null ? title : null,\n facetFieldDef: fieldDef,\n [headerType]: channel === 'facet' ? [] : [makeHeaderComponent(model, channel, labels)]\n };\n }\n}\n\nfunction makeHeaderComponent(model: FacetModel, channel: HeaderChannel, labels: boolean): HeaderComponent {\n const sizeType = channel === 'row' ? 'height' : 'width';\n\n return {\n labels,\n sizeSignal: model.child.component.layoutSize.get(sizeType) ? model.child.getSizeSignalRef(sizeType) : undefined,\n axes: []\n };\n}\n\nfunction mergeChildAxis(model: FacetModel, channel: 'x' | 'y') {\n const {child} = model;\n if (child.component.axes[channel]) {\n const {layoutHeaders, resolve} = model.component;\n resolve.axis[channel] = parseGuideResolve(resolve, channel);\n\n if (resolve.axis[channel] === 'shared') {\n // For shared axis, move the axes to facet's header or footer\n const headerChannel = channel === 'x' ? 'column' : 'row';\n\n const layoutHeader = layoutHeaders[headerChannel];\n for (const axisComponent of child.component.axes[channel]) {\n const headerType = getHeaderType(axisComponent.get('orient'));\n layoutHeader[headerType] ??= [makeHeaderComponent(model, headerChannel, false)];\n\n // FIXME: assemble shouldn't be called here, but we do it this way so we only extract the main part of the axes\n const mainAxis = assembleAxis(axisComponent, 'main', model.config, {header: true});\n if (mainAxis) {\n // LayoutHeader no longer keep track of property precedence, thus let's combine.\n layoutHeader[headerType][0].axes.push(mainAxis);\n }\n axisComponent.mainExtracted = true;\n }\n } else {\n // Otherwise do nothing for independent axes\n }\n }\n}\n","import {getPositionScaleChannel, getSizeChannel, POSITION_SCALE_CHANNELS} from '../../channel';\nimport {getViewConfigContinuousSize, getViewConfigDiscreteSize} from '../../config';\nimport {hasDiscreteDomain} from '../../scale';\nimport {isStep} from '../../spec/base';\nimport {isVgRangeStep} from '../../vega.schema';\nimport {ConcatModel} from '../concat';\nimport {Model} from '../model';\nimport {defaultScaleResolve} from '../resolve';\nimport {Explicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {getSizeTypeFromLayoutSizeType, LayoutSize, LayoutSizeIndex, LayoutSizeType} from './component';\n\nexport function parseLayerLayoutSize(model: Model) {\n parseChildrenLayoutSize(model);\n\n parseNonUnitLayoutSizeForChannel(model, 'width');\n parseNonUnitLayoutSizeForChannel(model, 'height');\n}\n\nexport function parseConcatLayoutSize(model: ConcatModel) {\n parseChildrenLayoutSize(model);\n\n // for columns === 1 (vconcat), we can completely merge width. Otherwise, we can treat merged width as childWidth.\n const widthType = model.layout.columns === 1 ? 'width' : 'childWidth';\n\n // for columns === undefined (hconcat), we can completely merge height. Otherwise, we can treat merged height as childHeight.\n const heightType = model.layout.columns === undefined ? 'height' : 'childHeight';\n\n parseNonUnitLayoutSizeForChannel(model, widthType);\n parseNonUnitLayoutSizeForChannel(model, heightType);\n}\n\nexport function parseChildrenLayoutSize(model: Model) {\n for (const child of model.children) {\n child.parseLayoutSize();\n }\n}\n\n/**\n * Merge child layout size (width or height).\n */\nfunction parseNonUnitLayoutSizeForChannel(model: Model, layoutSizeType: LayoutSizeType) {\n /*\n * For concat, the parent width or height might not be the same as the children's shared height.\n * For example, hconcat's subviews may share width, but the shared width is not the hconcat view's width.\n *\n * layoutSizeType represents the output of the view (could be childWidth/childHeight/width/height)\n * while the sizeType represents the properties of the child.\n */\n const sizeType = getSizeTypeFromLayoutSizeType(layoutSizeType);\n const channel = getPositionScaleChannel(sizeType);\n const resolve = model.component.resolve;\n const layoutSizeCmpt = model.component.layoutSize;\n\n let mergedSize: Explicit;\n // Try to merge layout size\n for (const child of model.children) {\n const childSize = child.component.layoutSize.getWithExplicit(sizeType);\n const scaleResolve = resolve.scale[channel] ?? defaultScaleResolve(channel, model);\n if (scaleResolve === 'independent' && childSize.value === 'step') {\n // Do not merge independent scales with range-step as their size depends\n // on the scale domains, which can be different between scales.\n mergedSize = undefined;\n break;\n }\n\n if (mergedSize) {\n if (scaleResolve === 'independent' && mergedSize.value !== childSize.value) {\n // For independent scale, only merge if all the sizes are the same.\n // If the values are different, abandon the merge!\n mergedSize = undefined;\n break;\n }\n mergedSize = mergeValuesWithExplicit(mergedSize, childSize, sizeType, '');\n } else {\n mergedSize = childSize;\n }\n }\n\n if (mergedSize) {\n // If merged, rename size and set size of all children.\n for (const child of model.children) {\n model.renameSignal(child.getName(sizeType), model.getName(layoutSizeType));\n child.component.layoutSize.set(sizeType, 'merged', false);\n }\n layoutSizeCmpt.setWithExplicit(layoutSizeType, mergedSize);\n } else {\n layoutSizeCmpt.setWithExplicit(layoutSizeType, {\n explicit: false,\n value: undefined\n });\n }\n}\n\nexport function parseUnitLayoutSize(model: UnitModel) {\n const {size, component} = model;\n for (const channel of POSITION_SCALE_CHANNELS) {\n const sizeType = getSizeChannel(channel);\n\n if (size[sizeType]) {\n const specifiedSize = size[sizeType];\n component.layoutSize.set(sizeType, isStep(specifiedSize) ? 'step' : specifiedSize, true);\n } else {\n const defaultSize = defaultUnitSize(model, sizeType);\n component.layoutSize.set(sizeType, defaultSize, false);\n }\n }\n}\n\nfunction defaultUnitSize(model: UnitModel, sizeType: 'width' | 'height'): LayoutSize {\n const channel = sizeType === 'width' ? 'x' : 'y';\n const config = model.config;\n const scaleComponent = model.getScaleComponent(channel);\n\n if (scaleComponent) {\n const scaleType = scaleComponent.get('type');\n const range = scaleComponent.get('range');\n\n if (hasDiscreteDomain(scaleType)) {\n const size = getViewConfigDiscreteSize(config.view, sizeType);\n if (isVgRangeStep(range) || isStep(size)) {\n // For discrete domain with range.step, use dynamic width/height\n return 'step';\n } else {\n return size;\n }\n } else {\n return getViewConfigContinuousSize(config.view, sizeType);\n }\n } else if (model.hasProjection || model.mark === 'arc') {\n // arc should use continuous size by default otherwise the pie is extremely small\n return getViewConfigContinuousSize(config.view, sizeType);\n } else {\n const size = getViewConfigDiscreteSize(config.view, sizeType);\n return isStep(size) ? size.step : size;\n }\n}\n","import {AggregateOp, LayoutAlign, NewSignal, SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {isBinning} from '../bin';\nimport {COLUMN, ExtendedChannel, FacetChannel, FACET_CHANNELS, POSITION_SCALE_CHANNELS, ROW} from '../channel';\nimport {FieldName, FieldRefOption, initFieldDef, TypedFieldDef, vgField} from '../channeldef';\nimport {Config} from '../config';\nimport {ExprRef, replaceExprRef} from '../expr';\nimport * as log from '../log';\nimport {hasDiscreteDomain} from '../scale';\nimport {DEFAULT_SORT_OP, EncodingSortField, isSortField, SortOrder} from '../sort';\nimport {NormalizedFacetSpec} from '../spec';\nimport {EncodingFacetMapping, FacetFieldDef, FacetMapping, isFacetMapping} from '../spec/facet';\nimport {keys} from '../util';\nimport {isVgRangeStep, VgData, VgLayout, VgMarkGroup} from '../vega.schema';\nimport {buildModel} from './buildmodel';\nimport {assembleFacetData} from './data/assemble';\nimport {sortArrayIndexField} from './data/calculate';\nimport {parseData} from './data/parse';\nimport {assembleLabelTitle} from './header/assemble';\nimport {getHeaderChannel, getHeaderProperty} from './header/common';\nimport {HEADER_CHANNELS, HEADER_TYPES} from './header/component';\nimport {parseFacetHeaders} from './header/parse';\nimport {parseChildrenLayoutSize} from './layoutsize/parse';\nimport {Model, ModelWithField} from './model';\nimport {assembleDomain, getFieldFromDomain} from './scale/domain';\nimport {assembleFacetSignals} from './selection/assemble';\n\nexport function facetSortFieldName(\n fieldDef: FacetFieldDef,\n sort: EncodingSortField,\n opt?: FieldRefOption\n) {\n return vgField(sort, {suffix: `by_${vgField(fieldDef)}`, ...(opt ?? {})});\n}\n\nexport class FacetModel extends ModelWithField {\n public readonly facet: EncodingFacetMapping;\n\n public readonly child: Model;\n\n public readonly children: Model[];\n\n constructor(spec: NormalizedFacetSpec, parent: Model, parentGivenName: string, config: Config) {\n super(spec, 'facet', parent, parentGivenName, config, spec.resolve);\n\n this.child = buildModel(spec.spec, this, this.getName('child'), undefined, config);\n this.children = [this.child];\n\n this.facet = this.initFacet(spec.facet);\n }\n\n private initFacet(\n facet: FacetFieldDef | FacetMapping\n ): EncodingFacetMapping {\n // clone to prevent side effect to the original spec\n if (!isFacetMapping(facet)) {\n return {facet: this.initFacetFieldDef(facet, 'facet')};\n }\n\n const channels = keys(facet);\n const normalizedFacet = {};\n for (const channel of channels) {\n if (![ROW, COLUMN].includes(channel)) {\n // Drop unsupported channel\n log.warn(log.message.incompatibleChannel(channel, 'facet'));\n break;\n }\n\n const fieldDef = facet[channel];\n if (fieldDef.field === undefined) {\n log.warn(log.message.emptyFieldDef(fieldDef, channel));\n break;\n }\n\n normalizedFacet[channel] = this.initFacetFieldDef(fieldDef, channel);\n }\n\n return normalizedFacet;\n }\n\n private initFacetFieldDef(fieldDef: FacetFieldDef, channel: FacetChannel) {\n // Cast because we call initFieldDef, which assumes general FieldDef.\n // However, FacetFieldDef is a bit more constrained than the general FieldDef\n const facetFieldDef = initFieldDef(fieldDef, channel) as FacetFieldDef;\n if (facetFieldDef.header) {\n facetFieldDef.header = replaceExprRef(facetFieldDef.header);\n } else if (facetFieldDef.header === null) {\n facetFieldDef.header = null;\n }\n return facetFieldDef;\n }\n\n public channelHasField(channel: ExtendedChannel): boolean {\n return !!this.facet[channel];\n }\n\n public fieldDef(channel: ExtendedChannel): TypedFieldDef {\n return this.facet[channel];\n }\n\n public parseData() {\n this.component.data = parseData(this);\n this.child.parseData();\n }\n\n public parseLayoutSize() {\n parseChildrenLayoutSize(this);\n }\n\n public parseSelections() {\n // As a facet has a single child, the selection components are the same.\n // The child maintains its selections to assemble signals, which remain\n // within its unit.\n this.child.parseSelections();\n this.component.selection = this.child.component.selection;\n }\n\n public parseMarkGroup() {\n this.child.parseMarkGroup();\n }\n\n public parseAxesAndHeaders() {\n this.child.parseAxesAndHeaders();\n\n parseFacetHeaders(this);\n }\n\n public assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[] {\n return this.child.assembleSelectionTopLevelSignals(signals);\n }\n\n public assembleSignals(): NewSignal[] {\n this.child.assembleSignals();\n return [];\n }\n\n public assembleSelectionData(data: readonly VgData[]): readonly VgData[] {\n return this.child.assembleSelectionData(data);\n }\n\n private getHeaderLayoutMixins(): VgLayout {\n const layoutMixins: VgLayout = {};\n\n for (const channel of FACET_CHANNELS) {\n for (const headerType of HEADER_TYPES) {\n const layoutHeaderComponent = this.component.layoutHeaders[channel];\n const headerComponent = layoutHeaderComponent[headerType];\n\n const {facetFieldDef} = layoutHeaderComponent;\n if (facetFieldDef) {\n const titleOrient = getHeaderProperty('titleOrient', facetFieldDef.header, this.config, channel);\n\n if (['right', 'bottom'].includes(titleOrient)) {\n const headerChannel = getHeaderChannel(channel, titleOrient);\n layoutMixins.titleAnchor ??= {};\n layoutMixins.titleAnchor[headerChannel] = 'end';\n }\n }\n\n if (headerComponent?.[0]) {\n // set header/footerBand\n const sizeType = channel === 'row' ? 'height' : 'width';\n const bandType = headerType === 'header' ? 'headerBand' : 'footerBand';\n if (channel !== 'facet' && !this.child.component.layoutSize.get(sizeType)) {\n // If facet child does not have size signal, then apply headerBand\n layoutMixins[bandType] ??= {};\n layoutMixins[bandType][channel] = 0.5;\n }\n\n if (layoutHeaderComponent.title) {\n layoutMixins.offset ??= {};\n layoutMixins.offset[channel === 'row' ? 'rowTitle' : 'columnTitle'] = 10;\n }\n }\n }\n }\n return layoutMixins;\n }\n\n protected assembleDefaultLayout(): VgLayout {\n const {column, row} = this.facet;\n\n const columns = column ? this.columnDistinctSignal() : row ? 1 : undefined;\n\n let align: LayoutAlign = 'all';\n\n // Do not align the cells if the scale corresponding to the direction is indepent.\n // We always align when we facet into both row and column.\n if (!row && this.component.resolve.scale.x === 'independent') {\n align = 'none';\n } else if (!column && this.component.resolve.scale.y === 'independent') {\n align = 'none';\n }\n\n return {\n ...this.getHeaderLayoutMixins(),\n\n ...(columns ? {columns} : {}),\n bounds: 'full',\n align\n };\n }\n\n public assembleLayoutSignals(): NewSignal[] {\n // FIXME(https://github.com/vega/vega-lite/issues/1193): this can be incorrect if we have independent scales.\n return this.child.assembleLayoutSignals();\n }\n\n private columnDistinctSignal() {\n if (this.parent && this.parent instanceof FacetModel) {\n // For nested facet, we will add columns to group mark instead\n // See discussion in https://github.com/vega/vega/issues/952\n // and https://github.com/vega/vega-view/releases/tag/v1.2.6\n return undefined;\n } else {\n // In facetNode.assemble(), the name is always this.getName('column') + '_layout'.\n const facetLayoutDataName = this.getName('column_domain');\n return {signal: `length(data('${facetLayoutDataName}'))`};\n }\n }\n\n public assembleGroup(signals: NewSignal[]) {\n if (this.parent && this.parent instanceof FacetModel) {\n // Provide number of columns for layout.\n // See discussion in https://github.com/vega/vega/issues/952\n // and https://github.com/vega/vega-view/releases/tag/v1.2.6\n return {\n ...(this.channelHasField('column')\n ? {\n encode: {\n update: {\n // TODO(https://github.com/vega/vega-lite/issues/2759):\n // Correct the signal for facet of concat of facet_column\n columns: {field: vgField(this.facet.column, {prefix: 'distinct'})}\n }\n }\n }\n : {}),\n ...super.assembleGroup(signals)\n };\n }\n return super.assembleGroup(signals);\n }\n\n /**\n * Aggregate cardinality for calculating size\n */\n private getCardinalityAggregateForChild() {\n const fields: string[] = [];\n const ops: AggregateOp[] = [];\n const as: string[] = [];\n\n if (this.child instanceof FacetModel) {\n if (this.child.channelHasField('column')) {\n const field = vgField(this.child.facet.column);\n fields.push(field);\n ops.push('distinct');\n as.push(`distinct_${field}`);\n }\n } else {\n for (const channel of POSITION_SCALE_CHANNELS) {\n const childScaleComponent = this.child.component.scales[channel];\n if (childScaleComponent && !childScaleComponent.merged) {\n const type = childScaleComponent.get('type');\n const range = childScaleComponent.get('range');\n\n if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n const domain = assembleDomain(this.child, channel);\n const field = getFieldFromDomain(domain);\n if (field) {\n fields.push(field);\n ops.push('distinct');\n as.push(`distinct_${field}`);\n } else {\n log.warn(log.message.unknownField(channel));\n }\n }\n }\n }\n }\n return {fields, ops, as};\n }\n\n private assembleFacet() {\n const {name, data} = this.component.data.facetRoot;\n const {row, column} = this.facet;\n const {fields, ops, as} = this.getCardinalityAggregateForChild();\n const groupby: string[] = [];\n\n for (const channel of FACET_CHANNELS) {\n const fieldDef = this.facet[channel];\n if (fieldDef) {\n groupby.push(vgField(fieldDef));\n\n const {bin, sort} = fieldDef;\n\n if (isBinning(bin)) {\n groupby.push(vgField(fieldDef, {binSuffix: 'end'}));\n }\n\n if (isSortField(sort)) {\n const {field, op = DEFAULT_SORT_OP} = sort;\n const outputName = facetSortFieldName(fieldDef, sort);\n if (row && column) {\n // For crossed facet, use pre-calculate field as it requires a different groupby\n // For each calculated field, apply max and assign them to the same name as\n // all values of the same group should be the same anyway.\n fields.push(outputName);\n ops.push('max');\n as.push(outputName);\n } else {\n fields.push(field);\n ops.push(op);\n as.push(outputName);\n }\n } else if (isArray(sort)) {\n const outputName = sortArrayIndexField(fieldDef, channel);\n fields.push(outputName);\n ops.push('max');\n as.push(outputName);\n }\n }\n }\n\n const cross = !!row && !!column;\n\n return {\n name,\n data,\n groupby,\n ...(cross || fields.length > 0\n ? {\n aggregate: {\n ...(cross ? {cross} : {}),\n ...(fields.length ? {fields, ops, as} : {})\n }\n }\n : {})\n };\n }\n\n private facetSortFields(channel: FacetChannel): string[] {\n const {facet} = this;\n const fieldDef = facet[channel];\n\n if (fieldDef) {\n if (isSortField(fieldDef.sort)) {\n return [facetSortFieldName(fieldDef, fieldDef.sort, {expr: 'datum'})];\n } else if (isArray(fieldDef.sort)) {\n return [sortArrayIndexField(fieldDef, channel, {expr: 'datum'})];\n }\n return [vgField(fieldDef, {expr: 'datum'})];\n }\n return [];\n }\n\n private facetSortOrder(channel: FacetChannel): SortOrder[] {\n const {facet} = this;\n const fieldDef = facet[channel];\n if (fieldDef) {\n const {sort} = fieldDef;\n const order = (isSortField(sort) ? sort.order : !isArray(sort) && sort) || 'ascending';\n return [order];\n }\n return [];\n }\n\n private assembleLabelTitle() {\n const {facet, config} = this;\n if (facet.facet) {\n // Facet always uses title to display labels\n return assembleLabelTitle(facet.facet, 'facet', config);\n }\n\n const ORTHOGONAL_ORIENT = {\n row: ['top', 'bottom'],\n column: ['left', 'right']\n };\n\n for (const channel of HEADER_CHANNELS) {\n if (facet[channel]) {\n const labelOrient = getHeaderProperty('labelOrient', facet[channel]?.header, config, channel);\n if (ORTHOGONAL_ORIENT[channel].includes(labelOrient)) {\n // Row/Column with orthogonal labelOrient must use title to display labels\n return assembleLabelTitle(facet[channel], channel, config);\n }\n }\n }\n return undefined;\n }\n\n public assembleMarks(): VgMarkGroup[] {\n const {child} = this;\n\n // If we facet by two dimensions, we need to add a cross operator to the aggregation\n // so that we create all groups\n const facetRoot = this.component.data.facetRoot;\n const data = assembleFacetData(facetRoot);\n\n const encodeEntry = child.assembleGroupEncodeEntry(false);\n\n const title = this.assembleLabelTitle() || child.assembleTitle();\n const style = child.assembleGroupStyle();\n\n const markGroup = {\n name: this.getName('cell'),\n type: 'group',\n ...(title ? {title} : {}),\n ...(style ? {style} : {}),\n from: {\n facet: this.assembleFacet()\n },\n // TODO: move this to after data\n sort: {\n field: FACET_CHANNELS.map(c => this.facetSortFields(c)).flat(),\n order: FACET_CHANNELS.map(c => this.facetSortOrder(c)).flat()\n },\n ...(data.length > 0 ? {data: data} : {}),\n ...(encodeEntry ? {encode: {update: encodeEntry}} : {}),\n ...child.assembleGroup(assembleFacetSignals(this, []))\n };\n\n return [markGroup];\n }\n\n protected getMapping() {\n return this.facet;\n }\n}\n","import {AncestorParse, DataComponent} from '.';\nimport {\n Data,\n isGenerator,\n isGraticuleGenerator,\n isInlineData,\n isNamedData,\n isSequenceGenerator,\n isUrlData,\n DataSourceType,\n ParseValue\n} from '../../data';\nimport * as log from '../../log';\nimport {\n isAggregate,\n isBin,\n isCalculate,\n isDensity,\n isFilter,\n isFlatten,\n isFold,\n isImpute,\n isJoinAggregate,\n isLoess,\n isLookup,\n isPivot,\n isQuantile,\n isRegression,\n isSample,\n isStack,\n isTimeUnit,\n isWindow\n} from '../../transform';\nimport {deepEqual, mergeDeep} from '../../util';\nimport {isFacetModel, isLayerModel, isUnitModel, Model} from '../model';\nimport {requiresSelectionId} from '../selection';\nimport {materializeSelections} from '../selection/parse';\nimport {AggregateNode} from './aggregate';\nimport {BinNode} from './bin';\nimport {CalculateNode} from './calculate';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {DensityTransformNode} from './density';\nimport {FacetNode} from './facet';\nimport {FilterNode} from './filter';\nimport {FilterInvalidNode} from './filterinvalid';\nimport {FlattenTransformNode} from './flatten';\nimport {FoldTransformNode} from './fold';\nimport {\n getImplicitFromEncoding,\n getImplicitFromFilterTransform,\n getImplicitFromSelection,\n ParseNode\n} from './formatparse';\nimport {GeoJSONNode} from './geojson';\nimport {GeoPointNode} from './geopoint';\nimport {GraticuleNode} from './graticule';\nimport {IdentifierNode} from './identifier';\nimport {ImputeNode} from './impute';\nimport {JoinAggregateTransformNode} from './joinaggregate';\nimport {makeJoinAggregateFromFacet} from './joinaggregatefacet';\nimport {LoessTransformNode} from './loess';\nimport {LookupNode} from './lookup';\nimport {PivotTransformNode} from './pivot';\nimport {QuantileTransformNode} from './quantile';\nimport {RegressionTransformNode} from './regression';\nimport {SampleTransformNode} from './sample';\nimport {SequenceNode} from './sequence';\nimport {SourceNode} from './source';\nimport {StackNode} from './stack';\nimport {TimeUnitNode} from './timeunit';\nimport {WindowTransformNode} from './window';\n\nexport function findSource(data: Data, sources: SourceNode[]) {\n for (const other of sources) {\n const otherData = other.data;\n\n // if both datasets have a name defined, we cannot merge\n if (data.name && other.hasName() && data.name !== other.dataName) {\n continue;\n }\n\n const formatMesh = data['format']?.mesh;\n const otherFeature = otherData.format?.feature;\n\n // feature and mesh are mutually exclusive\n if (formatMesh && otherFeature) {\n continue;\n }\n\n // we have to extract the same feature or mesh\n const formatFeature = data['format']?.feature;\n if ((formatFeature || otherFeature) && formatFeature !== otherFeature) {\n continue;\n }\n\n const otherMesh = otherData.format?.mesh;\n if ((formatMesh || otherMesh) && formatMesh !== otherMesh) {\n continue;\n }\n\n if (isInlineData(data) && isInlineData(otherData)) {\n if (deepEqual(data.values, otherData.values)) {\n return other;\n }\n } else if (isUrlData(data) && isUrlData(otherData)) {\n if (data.url === otherData.url) {\n return other;\n }\n } else if (isNamedData(data)) {\n if (data.name === other.dataName) {\n return other;\n }\n }\n }\n return null;\n}\n\nfunction parseRoot(model: Model, sources: SourceNode[]): DataFlowNode {\n if (model.data || !model.parent) {\n // if the model defines a data source or is the root, create a source node\n\n if (model.data === null) {\n // data: null means we should ignore the parent's data so we just create a new data source\n const source = new SourceNode({values: []});\n sources.push(source);\n return source;\n }\n\n const existingSource = findSource(model.data, sources);\n\n if (existingSource) {\n if (!isGenerator(model.data)) {\n existingSource.data.format = mergeDeep({}, model.data.format, existingSource.data.format);\n }\n\n // if the new source has a name but the existing one does not, we can set it\n if (!existingSource.hasName() && model.data.name) {\n existingSource.dataName = model.data.name;\n }\n\n return existingSource;\n } else {\n const source = new SourceNode(model.data);\n sources.push(source);\n return source;\n }\n } else {\n // If we don't have a source defined (overriding parent's data), use the parent's facet root or main.\n return model.parent.component.data.facetRoot\n ? model.parent.component.data.facetRoot\n : model.parent.component.data.main;\n }\n}\n\n/**\n * Parses a transform array into a chain of connected dataflow nodes.\n */\nexport function parseTransformArray(head: DataFlowNode, model: Model, ancestorParse: AncestorParse): DataFlowNode {\n let lookupCounter = 0;\n\n for (const t of model.transforms) {\n let derivedType: ParseValue = undefined;\n let transformNode: DataFlowNode;\n\n if (isCalculate(t)) {\n transformNode = head = new CalculateNode(head, t);\n derivedType = 'derived';\n } else if (isFilter(t)) {\n const implicit = getImplicitFromFilterTransform(t);\n transformNode = head = ParseNode.makeWithAncestors(head, {}, implicit, ancestorParse) ?? head;\n\n head = new FilterNode(head, model, t.filter);\n } else if (isBin(t)) {\n transformNode = head = BinNode.makeFromTransform(head, t, model);\n derivedType = 'number';\n } else if (isTimeUnit(t)) {\n derivedType = 'date';\n const parsedAs = ancestorParse.getWithExplicit(t.field);\n // Create parse node because the input to time unit is always date.\n if (parsedAs.value === undefined) {\n head = new ParseNode(head, {[t.field]: derivedType});\n ancestorParse.set(t.field, derivedType, false);\n }\n transformNode = head = TimeUnitNode.makeFromTransform(head, t);\n } else if (isAggregate(t)) {\n transformNode = head = AggregateNode.makeFromTransform(head, t);\n derivedType = 'number';\n if (requiresSelectionId(model)) {\n head = new IdentifierNode(head);\n }\n } else if (isLookup(t)) {\n transformNode = head = LookupNode.make(head, model, t, lookupCounter++);\n derivedType = 'derived';\n } else if (isWindow(t)) {\n transformNode = head = new WindowTransformNode(head, t);\n derivedType = 'number';\n } else if (isJoinAggregate(t)) {\n transformNode = head = new JoinAggregateTransformNode(head, t);\n derivedType = 'number';\n } else if (isStack(t)) {\n transformNode = head = StackNode.makeFromTransform(head, t);\n derivedType = 'derived';\n } else if (isFold(t)) {\n transformNode = head = new FoldTransformNode(head, t);\n derivedType = 'derived';\n } else if (isFlatten(t)) {\n transformNode = head = new FlattenTransformNode(head, t);\n derivedType = 'derived';\n } else if (isPivot(t)) {\n transformNode = head = new PivotTransformNode(head, t);\n derivedType = 'derived';\n } else if (isSample(t)) {\n head = new SampleTransformNode(head, t);\n } else if (isImpute(t)) {\n transformNode = head = ImputeNode.makeFromTransform(head, t);\n derivedType = 'derived';\n } else if (isDensity(t)) {\n transformNode = head = new DensityTransformNode(head, t);\n derivedType = 'derived';\n } else if (isQuantile(t)) {\n transformNode = head = new QuantileTransformNode(head, t);\n derivedType = 'derived';\n } else if (isRegression(t)) {\n transformNode = head = new RegressionTransformNode(head, t);\n derivedType = 'derived';\n } else if (isLoess(t)) {\n transformNode = head = new LoessTransformNode(head, t);\n derivedType = 'derived';\n } else {\n log.warn(log.message.invalidTransformIgnored(t));\n continue;\n }\n\n if (transformNode && derivedType !== undefined) {\n for (const field of transformNode.producedFields() ?? []) {\n ancestorParse.set(field, derivedType, false);\n }\n }\n }\n\n return head;\n}\n\n/*\nDescription of the dataflow (http://asciiflow.com/):\n +--------+\n | Source |\n +---+----+\n |\n v\n FormatParse\n (explicit)\n |\n v\n Transforms\n(Filter, Calculate, Binning, TimeUnit, Aggregate, Window, ...)\n |\n v\n FormatParse\n (implicit)\n |\n v\n Binning (in `encoding`)\n |\n v\n Timeunit (in `encoding`)\n |\n v\nFormula From Sort Array\n |\n v\n +--+--+\n | Raw |\n +-----+\n |\n v\n Aggregate (in `encoding`)\n |\n v\n Stack (in `encoding`)\n |\n v\n Invalid Filter\n |\n v\n +----------+\n | Main |\n +----------+\n |\n v\n +-------+\n | Facet |----> \"column\", \"column-layout\", and \"row\"\n +-------+\n |\n v\n ...Child data...\n*/\n\nexport function parseData(model: Model): DataComponent {\n let head = parseRoot(model, model.component.data.sources);\n\n const {outputNodes, outputNodeRefCounts} = model.component.data;\n const ancestorParse = model.parent ? model.parent.component.data.ancestorParse.clone() : new AncestorParse();\n const data = model.data;\n\n if (isGenerator(data)) {\n // insert generator transform\n if (isSequenceGenerator(data)) {\n head = new SequenceNode(head, data.sequence);\n } else if (isGraticuleGenerator(data)) {\n head = new GraticuleNode(head, data.graticule);\n }\n // no parsing necessary for generator\n ancestorParse.parseNothing = true;\n } else if (data?.format?.parse === null) {\n // format.parse: null means disable parsing\n ancestorParse.parseNothing = true;\n }\n\n head = ParseNode.makeExplicit(head, model, ancestorParse) ?? head;\n\n // Default discrete selections require an identifer transform to\n // uniquely identify data points. Add this transform at the head of\n // the pipeline such that the identifier field is available for all\n // subsequent datasets. During optimization, we will remove this\n // transform if it proves to be unnecessary. Additional identifier\n // transforms will be necessary when new tuples are constructed\n // (e.g., post-aggregation).\n head = new IdentifierNode(head);\n\n // HACK: This is equivalent for merging bin extent for union scale.\n // FIXME(https://github.com/vega/vega-lite/issues/2270): Correctly merge extent / bin node for shared bin scale\n const parentIsLayer = model.parent && isLayerModel(model.parent);\n if (isUnitModel(model) || isFacetModel(model)) {\n if (parentIsLayer) {\n head = BinNode.makeFromEncoding(head, model) ?? head;\n }\n }\n\n if (model.transforms.length > 0) {\n head = parseTransformArray(head, model, ancestorParse);\n }\n\n // create parse nodes for fields that need to be parsed (or flattened) implicitly\n const implicitSelection = getImplicitFromSelection(model);\n const implicitEncoding = getImplicitFromEncoding(model);\n head = ParseNode.makeWithAncestors(head, {}, {...implicitSelection, ...implicitEncoding}, ancestorParse) ?? head;\n\n if (isUnitModel(model)) {\n head = GeoJSONNode.parseAll(head, model);\n head = GeoPointNode.parseAll(head, model);\n }\n\n if (isUnitModel(model) || isFacetModel(model)) {\n if (!parentIsLayer) {\n head = BinNode.makeFromEncoding(head, model) ?? head;\n }\n\n head = TimeUnitNode.makeFromEncoding(head, model) ?? head;\n head = CalculateNode.parseAllForSortIndex(head, model);\n }\n\n // add an output node pre aggregation\n const rawName = model.getDataName(DataSourceType.Raw);\n const raw = new OutputNode(head, rawName, DataSourceType.Raw, outputNodeRefCounts);\n outputNodes[rawName] = raw;\n head = raw;\n\n if (isUnitModel(model)) {\n const agg = AggregateNode.makeFromEncoding(head, model);\n if (agg) {\n head = agg;\n\n if (requiresSelectionId(model)) {\n head = new IdentifierNode(head);\n }\n }\n head = ImputeNode.makeFromEncoding(head, model) ?? head;\n head = StackNode.makeFromEncoding(head, model) ?? head;\n }\n\n if (isUnitModel(model)) {\n head = FilterInvalidNode.make(head, model) ?? head;\n }\n\n // output node for marks\n const mainName = model.getDataName(DataSourceType.Main);\n const main = new OutputNode(head, mainName, DataSourceType.Main, outputNodeRefCounts);\n outputNodes[mainName] = main;\n head = main;\n\n if (isUnitModel(model)) {\n materializeSelections(model, main);\n }\n\n // add facet marker\n let facetRoot = null;\n if (isFacetModel(model)) {\n const facetName = model.getName('facet');\n\n // Derive new aggregate for facet's sort field\n // augment data source with new fields for crossed facet\n head = makeJoinAggregateFromFacet(head, model.facet) ?? head;\n\n facetRoot = new FacetNode(head, model, facetName, main.getSource());\n outputNodes[facetName] = facetRoot;\n }\n\n return {\n ...model.component.data,\n outputNodes,\n outputNodeRefCounts,\n raw,\n main,\n facetRoot,\n ancestorParse\n };\n}\n","import {vgField} from '../../channeldef';\nimport {DEFAULT_SORT_OP, isSortField} from '../../sort';\nimport {FacetMapping} from '../../spec/facet';\nimport {facetSortFieldName} from '../facet';\nimport {DataFlowNode} from './dataflow';\nimport {JoinAggregateTransformNode} from './joinaggregate';\n\nexport function makeJoinAggregateFromFacet(\n parent: DataFlowNode,\n facet: FacetMapping\n): JoinAggregateTransformNode {\n const {row, column} = facet;\n if (row && column) {\n let newParent = null;\n // only need to make one for crossed facet\n for (const fieldDef of [row, column]) {\n if (isSortField(fieldDef.sort)) {\n const {field, op = DEFAULT_SORT_OP} = fieldDef.sort;\n parent = newParent = new JoinAggregateTransformNode(parent, {\n joinaggregate: [\n {\n op,\n field,\n as: facetSortFieldName(fieldDef, fieldDef.sort, {forAs: true})\n }\n ],\n groupby: [vgField(fieldDef)]\n });\n }\n }\n return newParent;\n }\n return null;\n}\n","import {NewSignal, SignalRef} from 'vega';\nimport {Config} from '../config';\nimport * as log from '../log';\nimport {isHConcatSpec, isVConcatSpec, NormalizedConcatSpec, NormalizedSpec} from '../spec';\nimport {keys} from '../util';\nimport {VgData, VgLayout} from '../vega.schema';\nimport {buildModel} from './buildmodel';\nimport {parseData} from './data/parse';\nimport {assembleLayoutSignals} from './layoutsize/assemble';\nimport {parseConcatLayoutSize} from './layoutsize/parse';\nimport {Model} from './model';\n\nexport class ConcatModel extends Model {\n public readonly children: Model[];\n\n constructor(spec: NormalizedConcatSpec, parent: Model, parentGivenName: string, config: Config) {\n super(spec, 'concat', parent, parentGivenName, config, spec.resolve);\n\n if (spec.resolve?.axis?.x === 'shared' || spec.resolve?.axis?.y === 'shared') {\n log.warn(log.message.CONCAT_CANNOT_SHARE_AXIS);\n }\n\n this.children = this.getChildren(spec).map((child, i) => {\n return buildModel(child, this, this.getName(`concat_${i}`), undefined, config);\n });\n }\n\n public parseData() {\n this.component.data = parseData(this);\n for (const child of this.children) {\n child.parseData();\n }\n }\n\n public parseSelections() {\n // Merge selections up the hierarchy so that they may be referenced\n // across unit specs. Persist their definitions within each child\n // to assemble signals which remain within output Vega unit groups.\n this.component.selection = {};\n for (const child of this.children) {\n child.parseSelections();\n for (const key of keys(child.component.selection)) {\n this.component.selection[key] = child.component.selection[key];\n }\n }\n }\n\n public parseMarkGroup() {\n for (const child of this.children) {\n child.parseMarkGroup();\n }\n }\n\n public parseAxesAndHeaders() {\n for (const child of this.children) {\n child.parseAxesAndHeaders();\n }\n\n // TODO(#2415): support shared axes\n }\n\n private getChildren(spec: NormalizedConcatSpec): NormalizedSpec[] {\n if (isVConcatSpec(spec)) {\n return spec.vconcat;\n } else if (isHConcatSpec(spec)) {\n return spec.hconcat;\n }\n return spec.concat;\n }\n\n public parseLayoutSize() {\n parseConcatLayoutSize(this);\n }\n\n public parseAxisGroup(): void {\n return null;\n }\n\n public assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[] {\n return this.children.reduce((sg, child) => child.assembleSelectionTopLevelSignals(sg), signals);\n }\n\n public assembleSignals(): NewSignal[] {\n this.children.forEach(child => child.assembleSignals());\n return [];\n }\n\n public assembleLayoutSignals(): NewSignal[] {\n const layoutSignals = assembleLayoutSignals(this);\n\n for (const child of this.children) {\n layoutSignals.push(...child.assembleLayoutSignals());\n }\n\n return layoutSignals;\n }\n\n public assembleSelectionData(data: readonly VgData[]): readonly VgData[] {\n return this.children.reduce((db, child) => child.assembleSelectionData(db), data);\n }\n\n public assembleMarks(): any[] {\n // only children have marks\n return this.children.map(child => {\n const title = child.assembleTitle();\n const style = child.assembleGroupStyle();\n const encodeEntry = child.assembleGroupEncodeEntry(false);\n\n return {\n type: 'group',\n name: child.getName('group'),\n ...(title ? {title} : {}),\n ...(style ? {style} : {}),\n ...(encodeEntry ? {encode: {update: encodeEntry}} : {}),\n ...child.assembleGroup()\n };\n });\n }\n\n protected assembleDefaultLayout(): VgLayout {\n const columns = this.layout.columns;\n return {\n ...(columns != null ? {columns: columns} : {}),\n bounds: 'full',\n // Use align each so it can work with multiple plots with different size\n align: 'each'\n };\n }\n}\n","import {Axis as VgAxis, SignalRef, Text} from 'vega';\nimport {\n AxisInternal,\n AxisPart,\n AxisPropsWithCondition,\n COMMON_AXIS_PROPERTIES_INDEX,\n ConditionalAxisProp\n} from '../../axis';\nimport {FieldDefBase} from '../../channeldef';\nimport {duplicate, Flag, keys} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {Split} from '../split';\n\nfunction isFalseOrNull(v: any) {\n return v === false || v === null;\n}\n\nexport type AxisComponentProps = Omit &\n Omit, 'title'> & {\n title: Text | FieldDefBase[] | SignalRef;\n labelExpr: string;\n disable: boolean;\n };\n\nconst AXIS_COMPONENT_PROPERTIES_INDEX: Flag = {\n disable: 1,\n gridScale: 1,\n scale: 1,\n ...COMMON_AXIS_PROPERTIES_INDEX,\n labelExpr: 1,\n encode: 1\n};\n\nexport const AXIS_COMPONENT_PROPERTIES = keys(AXIS_COMPONENT_PROPERTIES_INDEX);\n\nexport class AxisComponent extends Split {\n constructor(\n public readonly explicit: Partial = {},\n public readonly implicit: Partial = {},\n public mainExtracted = false\n ) {\n super();\n }\n\n public clone() {\n return new AxisComponent(duplicate(this.explicit), duplicate(this.implicit), this.mainExtracted);\n }\n\n public hasAxisPart(part: AxisPart) {\n // FIXME(https://github.com/vega/vega-lite/issues/2552) this method can be wrong if users use a Vega theme.\n\n if (part === 'axis') {\n // always has the axis container part\n return true;\n }\n\n if (part === 'grid' || part === 'title') {\n return !!this.get(part);\n }\n // Other parts are enabled by default, so they should not be false or null.\n return !isFalseOrNull(this.get(part));\n }\n\n public hasOrientSignalRef() {\n return isSignalRef(this.explicit.orient);\n }\n}\n\nexport interface AxisComponentIndex {\n x?: AxisComponent[];\n y?: AxisComponent[];\n}\n\nexport interface AxisInternalIndex {\n x?: AxisInternal;\n y?: AxisInternal;\n}\n","import {AxisEncode as VgAxisEncode, AxisOrient, SignalRef} from 'vega';\nimport {Axis, AXIS_PARTS, isAxisProperty, isConditionalAxisValue} from '../../axis';\nimport {PositionScaleChannel, POSITION_SCALE_CHANNELS} from '../../channel';\nimport {getFieldOrDatumDef, PositionDatumDef, PositionFieldDef} from '../../channeldef';\nimport {getFirstDefined, isEmpty, keys, normalizeAngle} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {mergeTitleComponent} from '../common';\nimport {guideEncodeEntry} from '../guide';\nimport {LayerModel} from '../layer';\nimport {parseGuideResolve} from '../resolve';\nimport {defaultTieBreaker, Explicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {AxisComponent, AxisComponentIndex, AxisComponentProps, AXIS_COMPONENT_PROPERTIES} from './component';\nimport {getAxisConfig, getAxisConfigs} from './config';\nimport * as encode from './encode';\nimport {AxisRuleParams, axisRules, defaultOrient, getFieldDefTitle, getLabelAngle} from './properties';\n\nexport function parseUnitAxes(model: UnitModel): AxisComponentIndex {\n return POSITION_SCALE_CHANNELS.reduce((axis, channel) => {\n if (model.component.scales[channel]) {\n axis[channel] = [parseAxis(channel, model)];\n }\n return axis;\n }, {} as AxisComponentIndex);\n}\n\nconst OPPOSITE_ORIENT: Record = {\n bottom: 'top',\n top: 'bottom',\n left: 'right',\n right: 'left'\n};\n\nexport function parseLayerAxes(model: LayerModel) {\n const {axes, resolve} = model.component;\n const axisCount: Record = {top: 0, bottom: 0, right: 0, left: 0};\n\n for (const child of model.children) {\n child.parseAxesAndHeaders();\n\n for (const channel of keys(child.component.axes)) {\n resolve.axis[channel] = parseGuideResolve(model.component.resolve, channel);\n if (resolve.axis[channel] === 'shared') {\n // If the resolve says shared (and has not been overridden)\n // We will try to merge and see if there is a conflict\n\n axes[channel] = mergeAxisComponents(axes[channel], child.component.axes[channel]);\n\n if (!axes[channel]) {\n // If merge returns nothing, there is a conflict so we cannot make the axis shared.\n // Thus, mark axis as independent and remove the axis component.\n resolve.axis[channel] = 'independent';\n delete axes[channel];\n }\n }\n }\n }\n\n // Move axes to layer's axis component and merge shared axes\n for (const channel of POSITION_SCALE_CHANNELS) {\n for (const child of model.children) {\n if (!child.component.axes[channel]) {\n // skip if the child does not have a particular axis\n continue;\n }\n\n if (resolve.axis[channel] === 'independent') {\n // If axes are independent, concat the axisComponent array.\n axes[channel] = (axes[channel] ?? []).concat(child.component.axes[channel]);\n\n // Automatically adjust orient\n for (const axisComponent of child.component.axes[channel]) {\n const {value: orient, explicit} = axisComponent.getWithExplicit('orient');\n if (isSignalRef(orient)) {\n continue;\n }\n\n if (axisCount[orient] > 0 && !explicit) {\n // Change axis orient if the number do not match\n const oppositeOrient = OPPOSITE_ORIENT[orient];\n if (axisCount[orient] > axisCount[oppositeOrient]) {\n axisComponent.set('orient', oppositeOrient, false);\n }\n }\n axisCount[orient]++;\n\n // TODO(https://github.com/vega/vega-lite/issues/2634): automatically add extra offset?\n }\n }\n\n // After merging, make sure to remove axes from child\n delete child.component.axes[channel];\n }\n\n // Suppress grid lines for dual axis charts (https://github.com/vega/vega-lite/issues/4676)\n if (resolve.axis[channel] === 'independent' && axes[channel] && axes[channel].length > 1) {\n for (const axisCmpt of axes[channel]) {\n if (!!axisCmpt.get('grid') && !axisCmpt.explicit.grid) {\n axisCmpt.implicit.grid = false;\n }\n }\n }\n }\n}\n\nfunction mergeAxisComponents(\n mergedAxisCmpts: AxisComponent[],\n childAxisCmpts: readonly AxisComponent[]\n): AxisComponent[] {\n if (mergedAxisCmpts) {\n // FIXME: this is a bit wrong once we support multiple axes\n if (mergedAxisCmpts.length !== childAxisCmpts.length) {\n return undefined; // Cannot merge axis component with different number of axes.\n }\n const length = mergedAxisCmpts.length;\n for (let i = 0; i < length; i++) {\n const merged = mergedAxisCmpts[i];\n const child = childAxisCmpts[i];\n\n if (!!merged !== !!child) {\n return undefined;\n } else if (merged && child) {\n const mergedOrient = merged.getWithExplicit('orient');\n const childOrient = child.getWithExplicit('orient');\n\n if (mergedOrient.explicit && childOrient.explicit && mergedOrient.value !== childOrient.value) {\n // TODO: throw warning if resolve is explicit (We don't have info about explicit/implicit resolve yet.)\n\n // Cannot merge due to inconsistent orient\n return undefined;\n } else {\n mergedAxisCmpts[i] = mergeAxisComponent(merged, child);\n }\n }\n }\n } else {\n // For first one, return a copy of the child\n return childAxisCmpts.map(axisComponent => axisComponent.clone());\n }\n return mergedAxisCmpts;\n}\n\nfunction mergeAxisComponent(merged: AxisComponent, child: AxisComponent): AxisComponent {\n for (const prop of AXIS_COMPONENT_PROPERTIES) {\n const mergedValueWithExplicit = mergeValuesWithExplicit(\n merged.getWithExplicit(prop),\n child.getWithExplicit(prop),\n prop,\n 'axis',\n\n // Tie breaker function\n (v1: Explicit, v2: Explicit) => {\n switch (prop) {\n case 'title':\n return mergeTitleComponent(v1, v2);\n case 'gridScale':\n return {\n explicit: v1.explicit, // keep the old explicit\n value: getFirstDefined(v1.value, v2.value)\n };\n }\n return defaultTieBreaker(v1, v2, prop, 'axis');\n }\n );\n merged.setWithExplicit(prop, mergedValueWithExplicit);\n }\n return merged;\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isExplicit(\n value: T,\n property: keyof AxisComponentProps,\n axis: Axis,\n model: UnitModel,\n channel: PositionScaleChannel\n) {\n if (property === 'disable') {\n return axis !== undefined; // if axis is specified or null/false, then its enable/disable state is explicit\n }\n\n axis = axis || {};\n\n switch (property) {\n case 'titleAngle':\n case 'labelAngle':\n return value === (isSignalRef(axis.labelAngle) ? axis.labelAngle : normalizeAngle(axis.labelAngle));\n case 'values':\n return !!axis.values;\n // specified axis.values is already respected, but may get transformed.\n case 'encode':\n // both VL axis.encoding and axis.labelAngle affect VG axis.encode\n return !!axis.encoding || !!axis.labelAngle;\n case 'title':\n // title can be explicit if fieldDef.title is set\n if (value === getFieldDefTitle(model, channel)) {\n return true;\n }\n }\n // Otherwise, things are explicit if the returned value matches the specified property\n return value === axis[property];\n}\n\n/**\n * Properties to always include values from config\n */\nconst propsToAlwaysIncludeConfig = new Set([\n 'grid', // Grid is an exception because we need to set grid = true to generate another grid axis\n 'translate', // translate has dependent logic for bar's bin position and it's 0.5 by default in Vega. If a config overrides this value, we need to know.\n // the rest are not axis configs in Vega, but are in VL, so we need to set too.\n 'format',\n 'formatType',\n 'orient',\n 'labelExpr',\n 'tickCount',\n 'position',\n 'tickMinStep'\n]);\n\nfunction parseAxis(channel: PositionScaleChannel, model: UnitModel): AxisComponent {\n let axis = model.axis(channel);\n\n const axisComponent = new AxisComponent();\n\n const fieldOrDatumDef = getFieldOrDatumDef(model.encoding[channel]) as\n | PositionFieldDef\n | PositionDatumDef;\n\n const {mark, config} = model;\n\n const orient =\n axis?.orient ||\n config[channel === 'x' ? 'axisX' : 'axisY']?.orient ||\n config.axis?.orient ||\n defaultOrient(channel);\n\n const scaleType = model.getScaleComponent(channel).get('type');\n\n const axisConfigs = getAxisConfigs(channel, scaleType, orient, model.config);\n\n const disable =\n axis !== undefined ? !axis : getAxisConfig('disable', config.style, axis?.style, axisConfigs).configValue;\n axisComponent.set('disable', disable, axis !== undefined);\n if (disable) {\n return axisComponent;\n }\n\n axis = axis || {};\n\n const labelAngle = getLabelAngle(fieldOrDatumDef, axis, channel, config.style, axisConfigs);\n\n const ruleParams: AxisRuleParams = {\n fieldOrDatumDef,\n axis,\n channel,\n model,\n scaleType,\n orient,\n labelAngle,\n mark,\n config\n };\n // 1.2. Add properties\n for (const property of AXIS_COMPONENT_PROPERTIES) {\n const value =\n property in axisRules ? axisRules[property](ruleParams) : isAxisProperty(property) ? axis[property] : undefined;\n\n const hasValue = value !== undefined;\n\n const explicit = isExplicit(value, property, axis, model, channel);\n\n if (hasValue && explicit) {\n axisComponent.set(property, value, explicit);\n } else {\n const {configValue = undefined, configFrom = undefined} =\n isAxisProperty(property) && property !== 'values'\n ? getAxisConfig(property, config.style, axis.style, axisConfigs)\n : {};\n const hasConfigValue = configValue !== undefined;\n\n if (hasValue && !hasConfigValue) {\n // only set property if it is explicitly set or has no config value (otherwise we will accidentally override config)\n axisComponent.set(property, value, explicit);\n } else if (\n // Cases need implicit values\n // 1. Axis config that aren't available in Vega\n !(configFrom === 'vgAxisConfig') ||\n // 2. Certain properties are always included (see `propsToAlwaysIncludeConfig`'s declaration for more details)\n (propsToAlwaysIncludeConfig.has(property) && hasConfigValue) ||\n // 3. Conditional axis values and signals\n isConditionalAxisValue(configValue) ||\n isSignalRef(configValue)\n ) {\n // If a config is specified and is conditional, copy conditional value from axis config\n axisComponent.set(property, configValue, false);\n }\n }\n }\n\n // 2) Add guide encode definition groups\n const axisEncoding = axis.encoding ?? {};\n const axisEncode = AXIS_PARTS.reduce((e: VgAxisEncode, part) => {\n if (!axisComponent.hasAxisPart(part)) {\n // No need to create encode for a disabled part.\n return e;\n }\n\n const axisEncodingPart = guideEncodeEntry(axisEncoding[part] ?? {}, model);\n\n const value = part === 'labels' ? encode.labels(model, channel, axisEncodingPart) : axisEncodingPart;\n\n if (value !== undefined && !isEmpty(value)) {\n e[part] = {update: value};\n }\n return e;\n }, {} as VgAxisEncode);\n\n // FIXME: By having encode as one property, we won't have fine grained encode merging.\n if (!isEmpty(axisEncode)) {\n axisComponent.set('encode', axisEncode, !!axis.encoding || axis.labelAngle !== undefined);\n }\n\n return axisComponent;\n}\n","import {getSecondaryRangeChannel, PositionScaleChannel} from '../../channel';\nimport {getFieldOrDatumDef} from '../../channeldef';\nimport {formatCustomType, isCustomFormatType} from '../format';\nimport {UnitModel} from '../unit';\n\nexport function labels(model: UnitModel, channel: PositionScaleChannel, specifiedLabelsSpec: any) {\n const {encoding, config} = model;\n\n const fieldOrDatumDef =\n getFieldOrDatumDef(encoding[channel]) ?? getFieldOrDatumDef(encoding[getSecondaryRangeChannel(channel)]);\n const axis = model.axis(channel) || {};\n const {format, formatType} = axis;\n\n if (isCustomFormatType(formatType)) {\n return {\n text: formatCustomType({\n fieldOrDatumDef,\n field: 'datum.value',\n format,\n formatType,\n config\n }),\n ...specifiedLabelsSpec\n };\n }\n\n return specifiedLabelsSpec;\n}\n","import {Orientation, SignalRef} from 'vega';\nimport {isBinned, isBinning} from '../../bin';\nimport {isContinuousFieldOrDatumDef, isFieldDef, isNumericDataDef, TypedFieldDef} from '../../channeldef';\nimport {Config} from '../../config';\nimport {Encoding, isAggregate} from '../../encoding';\nimport {replaceExprRef} from '../../expr';\nimport * as log from '../../log';\nimport {\n AREA,\n BAR,\n BAR_CORNER_RADIUS_INDEX as BAR_CORNER_RADIUS_END_INDEX,\n CIRCLE,\n IMAGE,\n LINE,\n Mark,\n MarkDef,\n POINT,\n RECT,\n RULE,\n SQUARE,\n TEXT,\n TICK\n} from '../../mark';\nimport {QUANTITATIVE, TEMPORAL} from '../../type';\nimport {contains, getFirstDefined} from '../../util';\nimport {getMarkConfig, getMarkPropOrConfig} from '../common';\n\nexport function initMarkdef(originalMarkDef: MarkDef, encoding: Encoding, config: Config) {\n // FIXME: markDef expects that exprRefs are replaced recursively but replaceExprRef only replaces the top level\n const markDef: MarkDef = replaceExprRef(originalMarkDef) as any;\n\n // set orient, which can be overridden by rules as sometimes the specified orient is invalid.\n const specifiedOrient = getMarkPropOrConfig('orient', markDef, config);\n markDef.orient = orient(markDef.type, encoding, specifiedOrient);\n if (specifiedOrient !== undefined && specifiedOrient !== markDef.orient) {\n log.warn(log.message.orientOverridden(markDef.orient, specifiedOrient));\n }\n\n if (markDef.type === 'bar' && markDef.orient) {\n const cornerRadiusEnd = getMarkPropOrConfig('cornerRadiusEnd', markDef, config);\n if (cornerRadiusEnd !== undefined) {\n const newProps =\n (markDef.orient === 'horizontal' && encoding.x2) || (markDef.orient === 'vertical' && encoding.y2)\n ? ['cornerRadius']\n : BAR_CORNER_RADIUS_END_INDEX[markDef.orient];\n\n for (const newProp of newProps) {\n markDef[newProp] = cornerRadiusEnd;\n }\n\n if (markDef.cornerRadiusEnd !== undefined) {\n delete markDef.cornerRadiusEnd; // no need to keep the original cap cornerRadius\n }\n }\n }\n\n // set opacity and filled if not specified in mark config\n const specifiedOpacity = getMarkPropOrConfig('opacity', markDef, config);\n if (specifiedOpacity === undefined) {\n markDef.opacity = opacity(markDef.type, encoding);\n }\n\n // set cursor, which should be pointer if href channel is present unless otherwise specified\n const specifiedCursor = getMarkPropOrConfig('cursor', markDef, config);\n if (specifiedCursor === undefined) {\n markDef.cursor = cursor(markDef, encoding, config);\n }\n\n return markDef;\n}\n\nfunction cursor(markDef: MarkDef, encoding: Encoding, config: Config) {\n if (encoding.href || markDef.href || getMarkPropOrConfig('href', markDef, config)) {\n return 'pointer';\n }\n return markDef.cursor;\n}\n\nfunction opacity(mark: Mark, encoding: Encoding) {\n if (contains([POINT, TICK, CIRCLE, SQUARE], mark)) {\n // point-based marks\n if (!isAggregate(encoding)) {\n return 0.7;\n }\n }\n return undefined;\n}\n\nexport function defaultFilled(markDef: MarkDef, config: Config, {graticule}: {graticule: boolean}) {\n if (graticule) {\n return false;\n }\n const filledConfig = getMarkConfig('filled', markDef, config);\n const mark = markDef.type;\n return getFirstDefined(filledConfig, mark !== POINT && mark !== LINE && mark !== RULE);\n}\n\nfunction orient(mark: Mark, encoding: Encoding, specifiedOrient: Orientation): Orientation {\n switch (mark) {\n case POINT:\n case CIRCLE:\n case SQUARE:\n case TEXT:\n case RECT:\n case IMAGE:\n // orient is meaningless for these marks.\n return undefined;\n }\n\n const {x, y, x2, y2} = encoding;\n\n switch (mark) {\n case BAR:\n if (isFieldDef(x) && (isBinned(x.bin) || (isFieldDef(y) && y.aggregate && !x.aggregate))) {\n return 'vertical';\n }\n if (isFieldDef(y) && (isBinned(y.bin) || (isFieldDef(x) && x.aggregate && !y.aggregate))) {\n return 'horizontal';\n }\n if (y2 || x2) {\n // Ranged bar does not always have clear orientation, so we allow overriding\n if (specifiedOrient) {\n return specifiedOrient;\n }\n\n // If y is range and x is non-range, non-bin Q, y is likely a prebinned field\n if (!x2) {\n if ((isFieldDef(x) && x.type === QUANTITATIVE && !isBinning(x.bin)) || isNumericDataDef(x)) {\n return 'horizontal';\n }\n }\n\n // If x is range and y is non-range, non-bin Q, x is likely a prebinned field\n if (!y2) {\n if ((isFieldDef(y) && y.type === QUANTITATIVE && !isBinning(y.bin)) || isNumericDataDef(y)) {\n return 'vertical';\n }\n }\n }\n\n // falls through\n case RULE:\n // return undefined for line segment rule and bar with both axis ranged\n // we have to ignore the case that the data are already binned\n if (x2 && !(isFieldDef(x) && isBinned(x.bin)) && y2 && !(isFieldDef(y) && isBinned(y.bin))) {\n return undefined;\n }\n\n // falls through\n case AREA:\n // If there are range for both x and y, y (vertical) has higher precedence.\n if (y2) {\n if (isFieldDef(y) && isBinned(y.bin)) {\n return 'horizontal';\n } else {\n return 'vertical';\n }\n } else if (x2) {\n if (isFieldDef(x) && isBinned(x.bin)) {\n return 'vertical';\n } else {\n return 'horizontal';\n }\n } else if (mark === RULE) {\n if (x && !y) {\n return 'vertical';\n } else if (y && !x) {\n return 'horizontal';\n }\n }\n\n // falls through\n case LINE:\n case TICK: {\n // Tick is opposite to bar, line, area and never have ranged mark.\n const xIsContinuous = isContinuousFieldOrDatumDef(x);\n const yIsContinuous = isContinuousFieldOrDatumDef(y);\n\n if (specifiedOrient) {\n return specifiedOrient;\n } else if (xIsContinuous && !yIsContinuous) {\n return mark !== 'tick' ? 'horizontal' : 'vertical';\n } else if (!xIsContinuous && yIsContinuous) {\n return mark !== 'tick' ? 'vertical' : 'horizontal';\n } else if (xIsContinuous && yIsContinuous) {\n const xDef = x as TypedFieldDef; // we can cast here since they are surely fieldDef\n const yDef = y as TypedFieldDef;\n\n const xIsTemporal = xDef.type === TEMPORAL;\n const yIsTemporal = yDef.type === TEMPORAL;\n\n // temporal without timeUnit is considered continuous, but better serves as dimension\n if (xIsTemporal && !yIsTemporal) {\n return mark !== 'tick' ? 'vertical' : 'horizontal';\n } else if (!xIsTemporal && yIsTemporal) {\n return mark !== 'tick' ? 'horizontal' : 'vertical';\n }\n\n if (!xDef.aggregate && yDef.aggregate) {\n return mark !== 'tick' ? 'vertical' : 'horizontal';\n } else if (xDef.aggregate && !yDef.aggregate) {\n return mark !== 'tick' ? 'horizontal' : 'vertical';\n }\n return 'vertical';\n } else {\n return undefined;\n }\n }\n }\n return 'vertical';\n}\n","import {Config} from '../../config';\nimport {VgEncodeEntry} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nfunction encodeEntry(model: UnitModel, fixedShape?: 'circle' | 'square') {\n const {config} = model;\n\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'include',\n orient: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n ...encode.nonPosition('size', model),\n ...encode.nonPosition('angle', model),\n ...shapeMixins(model, config, fixedShape)\n };\n}\n\nexport function shapeMixins(model: UnitModel, config: Config, fixedShape?: 'circle' | 'square'): VgEncodeEntry {\n if (fixedShape) {\n return {shape: {value: fixedShape}};\n }\n return encode.nonPosition('shape', model);\n}\n\nexport const point: MarkCompiler = {\n vgMark: 'symbol',\n encodeEntry: (model: UnitModel) => {\n return encodeEntry(model);\n }\n};\n\nexport const circle: MarkCompiler = {\n vgMark: 'symbol',\n encodeEntry: (model: UnitModel) => {\n return encodeEntry(model, 'circle');\n }\n};\n\nexport const square: MarkCompiler = {\n vgMark: 'symbol',\n encodeEntry: (model: UnitModel) => {\n return encodeEntry(model, 'square');\n }\n};\n","import {SignalRef} from 'vega';\nimport {Config} from '../../config';\nimport {Encoding} from '../../encoding';\nimport {MarkDef} from '../../mark';\nimport {getMarkPropOrConfig} from '../common';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const text: MarkCompiler = {\n vgMark: 'text',\n\n encodeEntry: (model: UnitModel) => {\n const {config, encoding} = model;\n\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'include',\n baseline: 'include',\n color: 'include',\n size: 'ignore',\n orient: 'ignore',\n theta: 'include'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n ...encode.text(model),\n ...encode.nonPosition('size', model, {\n vgChannel: 'fontSize' // VL's text size is fontSize\n }),\n ...encode.nonPosition('angle', model),\n ...encode.valueIfDefined('align', align(model.markDef, encoding, config)),\n ...encode.valueIfDefined('baseline', baseline(model.markDef, encoding, config)),\n ...encode.pointPosition('radius', model, {defaultPos: null}),\n ...encode.pointPosition('theta', model, {defaultPos: null})\n };\n }\n};\n\nfunction align(markDef: MarkDef, encoding: Encoding, config: Config) {\n const a = getMarkPropOrConfig('align', markDef, config);\n if (a === undefined) {\n return 'center';\n }\n // If there is a config, Vega-parser will process this already.\n return undefined;\n}\n\nfunction baseline(markDef: MarkDef, encoding: Encoding, config: Config) {\n const b = getMarkPropOrConfig('baseline', markDef, config);\n if (b === undefined) {\n return 'middle';\n }\n // If there is a config, Vega-parser will process this already.\n return undefined;\n}\n","import {SignalRef} from 'vega';\nimport {isNumber} from 'vega-util';\nimport {getViewConfigDiscreteStep} from '../../config';\nimport {isVgRangeStep} from '../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../common';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const tick: MarkCompiler = {\n vgMark: 'rect',\n\n encodeEntry: (model: UnitModel) => {\n const {config, markDef} = model;\n const orient = markDef.orient;\n\n const vgSizeChannel = orient === 'horizontal' ? 'width' : 'height';\n const vgThicknessChannel = orient === 'horizontal' ? 'height' : 'width';\n\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n\n ...encode.pointPosition('x', model, {defaultPos: 'mid', vgChannel: 'xc'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid', vgChannel: 'yc'}),\n\n // size / thickness => width / height\n ...encode.nonPosition('size', model, {\n defaultValue: defaultSize(model),\n vgChannel: vgSizeChannel\n }),\n [vgThicknessChannel]: signalOrValueRef(getMarkPropOrConfig('thickness', markDef, config))\n };\n }\n};\n\nfunction defaultSize(model: UnitModel): number | SignalRef {\n const {config, markDef} = model;\n const {orient} = markDef;\n\n const vgSizeChannel = orient === 'horizontal' ? 'width' : 'height';\n const scale = model.getScaleComponent(orient === 'horizontal' ? 'x' : 'y');\n\n const markPropOrConfig =\n getMarkPropOrConfig('size', markDef, config, {vgChannel: vgSizeChannel}) ?? config.tick.bandSize;\n\n if (markPropOrConfig !== undefined) {\n return markPropOrConfig;\n } else {\n const scaleRange = scale ? scale.get('range') : undefined;\n if (scaleRange && isVgRangeStep(scaleRange) && isNumber(scaleRange.step)) {\n return (scaleRange.step * 3) / 4;\n }\n\n const defaultViewStep = getViewConfigDiscreteStep(config.view, vgSizeChannel);\n\n return (defaultViewStep * 3) / 4;\n }\n}\n","import {isArray} from 'vega-util';\nimport {FieldRefOption, isFieldDef, isValueDef, vgField} from '../../channeldef';\nimport {DataSourceType} from '../../data';\nimport {isAggregate, pathGroupingFields} from '../../encoding';\nimport {AREA, BAR, isPathMark, LINE, Mark, TRAIL} from '../../mark';\nimport {isSortByEncoding, isSortField} from '../../sort';\nimport {contains, getFirstDefined, isNullOrFalse, keys, omit, pick} from '../../util';\nimport {VgCompare, VgEncodeEntry, VG_CORNERRADIUS_CHANNELS} from '../../vega.schema';\nimport {getMarkConfig, getMarkPropOrConfig, getStyles, signalOrValueRef, sortParams} from '../common';\nimport {UnitModel} from '../unit';\nimport {arc} from './arc';\nimport {area} from './area';\nimport {bar} from './bar';\nimport {MarkCompiler} from './base';\nimport {geoshape} from './geoshape';\nimport {image} from './image';\nimport {line, trail} from './line';\nimport {circle, point, square} from './point';\nimport {rect} from './rect';\nimport {rule} from './rule';\nimport {text} from './text';\nimport {tick} from './tick';\n\nconst markCompiler: Record = {\n arc,\n area,\n bar,\n circle,\n geoshape,\n image,\n line,\n point,\n rect,\n rule,\n square,\n text,\n tick,\n trail\n};\n\nexport function parseMarkGroups(model: UnitModel): any[] {\n if (contains([LINE, AREA, TRAIL], model.mark)) {\n const details = pathGroupingFields(model.mark, model.encoding);\n if (details.length > 0) {\n return getPathGroups(model, details);\n }\n // otherwise use standard mark groups\n } else if (model.mark === BAR) {\n const hasCornerRadius = VG_CORNERRADIUS_CHANNELS.some(prop =>\n getMarkPropOrConfig(prop, model.markDef, model.config)\n );\n if (model.stack && !model.fieldDef('size') && hasCornerRadius) {\n return getGroupsForStackedBarWithCornerRadius(model);\n }\n }\n\n return getMarkGroup(model);\n}\n\nconst FACETED_PATH_PREFIX = 'faceted_path_';\n\nfunction getPathGroups(model: UnitModel, details: string[]) {\n // TODO: for non-stacked plot, map order to zindex. (Maybe rename order for layer to zindex?)\n\n return [\n {\n name: model.getName('pathgroup'),\n type: 'group',\n from: {\n facet: {\n name: FACETED_PATH_PREFIX + model.requestDataName(DataSourceType.Main),\n data: model.requestDataName(DataSourceType.Main),\n groupby: details\n }\n },\n encode: {\n update: {\n width: {field: {group: 'width'}},\n height: {field: {group: 'height'}}\n }\n },\n // With subfacet for line/area group, need to use faceted data from above.\n marks: getMarkGroup(model, {fromPrefix: FACETED_PATH_PREFIX})\n }\n ];\n}\n\nconst STACK_GROUP_PREFIX = 'stack_group_';\n\n/**\n * We need to put stacked bars into groups in order to enable cornerRadius for stacks.\n * If stack is used and the model doesn't have size encoding, we put the mark into groups,\n * and apply cornerRadius properties at the group.\n */\nfunction getGroupsForStackedBarWithCornerRadius(model: UnitModel) {\n // Generate the mark\n const [mark] = getMarkGroup(model, {fromPrefix: STACK_GROUP_PREFIX});\n\n // Get the scale for the stacked field\n const fieldScale = model.scaleName(model.stack.fieldChannel);\n const stackField = (opt: FieldRefOption = {}) => model.vgField(model.stack.fieldChannel, opt);\n // Find the min/max of the pixel value on the stacked direction\n const stackFieldGroup = (func: 'min' | 'max', expr: 'datum' | 'parent') => {\n const vgFieldMinMax = [\n stackField({prefix: 'min', suffix: 'start', expr}),\n stackField({prefix: 'max', suffix: 'start', expr}),\n stackField({prefix: 'min', suffix: 'end', expr}),\n stackField({prefix: 'max', suffix: 'end', expr})\n ];\n return `${func}(${vgFieldMinMax.map(field => `scale('${fieldScale}',${field})`).join(',')})`;\n };\n\n let groupUpdate: VgEncodeEntry;\n let innerGroupUpdate: VgEncodeEntry;\n\n // Build the encoding for group and an inner group\n if (model.stack.fieldChannel === 'x') {\n // Move cornerRadius, y/yc/y2/height properties to group\n // Group x/x2 should be the min/max of the marks within\n groupUpdate = {\n ...pick(mark.encode.update, ['y', 'yc', 'y2', 'height', ...VG_CORNERRADIUS_CHANNELS]),\n x: {signal: stackFieldGroup('min', 'datum')},\n x2: {signal: stackFieldGroup('max', 'datum')},\n clip: {value: true}\n };\n // Inner group should revert the x translation, and pass height through\n innerGroupUpdate = {\n x: {field: {group: 'x'}, mult: -1},\n height: {field: {group: 'height'}}\n };\n // The marks should use the same height as group, without y/yc/y2 properties (because it's already done by group)\n // This is why size encoding is not supported yet\n mark.encode.update = {\n ...omit(mark.encode.update, ['y', 'yc', 'y2']),\n height: {field: {group: 'height'}}\n };\n } else {\n groupUpdate = {\n ...pick(mark.encode.update, ['x', 'xc', 'x2', 'width']),\n y: {signal: stackFieldGroup('min', 'datum')},\n y2: {signal: stackFieldGroup('max', 'datum')},\n clip: {value: true}\n };\n innerGroupUpdate = {\n y: {field: {group: 'y'}, mult: -1},\n width: {field: {group: 'width'}}\n };\n mark.encode.update = {\n ...omit(mark.encode.update, ['x', 'xc', 'x2']),\n width: {field: {group: 'width'}}\n };\n }\n\n // Deal with cornerRadius properties\n for (const key of VG_CORNERRADIUS_CHANNELS) {\n const configValue = getMarkConfig(key, model.markDef, model.config);\n // Move from mark to group\n if (mark.encode.update[key]) {\n groupUpdate[key] = mark.encode.update[key];\n delete mark.encode.update[key];\n } else if (configValue) {\n groupUpdate[key] = signalOrValueRef(configValue);\n }\n // Overwrite any cornerRadius on mark set by config --- they are already moved to the group\n if (configValue) {\n mark.encode.update[key] = {value: 0};\n }\n }\n\n const groupby: string[] = [];\n\n if (model.stack.groupbyChannel) {\n // For bin and time unit, we have to add bin/timeunit -end channels.\n const groupByField = model.fieldDef(model.stack.groupbyChannel);\n const field = vgField(groupByField);\n if (field) {\n groupby.push(field);\n }\n\n if (groupByField?.bin || groupByField?.timeUnit) {\n groupby.push(vgField(groupByField, {binSuffix: 'end'}));\n }\n }\n\n const strokeProperties = [\n 'stroke',\n 'strokeWidth',\n 'strokeJoin',\n 'strokeCap',\n 'strokeDash',\n 'strokeDashOffset',\n 'strokeMiterLimit',\n 'strokeOpacity'\n ] as const;\n\n // Generate stroke properties for the group\n groupUpdate = strokeProperties.reduce((encode, prop) => {\n if (mark.encode.update[prop]) {\n return {...encode, [prop]: mark.encode.update[prop]};\n } else {\n const configValue = getMarkConfig(prop, model.markDef, model.config);\n if (configValue !== undefined) {\n return {...encode, [prop]: signalOrValueRef(configValue)};\n } else {\n return encode;\n }\n }\n }, groupUpdate);\n\n // Apply strokeForeground and strokeOffset if stroke is used\n if (groupUpdate.stroke) {\n groupUpdate.strokeForeground = {value: true};\n groupUpdate.strokeOffset = {value: 0};\n }\n\n return [\n {\n type: 'group',\n from: {\n facet: {\n data: model.requestDataName(DataSourceType.Main),\n name: STACK_GROUP_PREFIX + model.requestDataName(DataSourceType.Main),\n groupby,\n aggregate: {\n fields: [\n stackField({suffix: 'start'}),\n stackField({suffix: 'start'}),\n stackField({suffix: 'end'}),\n stackField({suffix: 'end'})\n ],\n ops: ['min', 'max', 'min', 'max']\n }\n }\n },\n encode: {\n update: groupUpdate\n },\n marks: [\n {\n type: 'group',\n encode: {update: innerGroupUpdate},\n marks: [mark]\n }\n ]\n }\n ];\n}\n\nexport function getSort(model: UnitModel): VgCompare {\n const {encoding, stack, mark, markDef, config} = model;\n const order = encoding.order;\n if (\n (!isArray(order) && isValueDef(order) && isNullOrFalse(order.value)) ||\n (!order && isNullOrFalse(getMarkPropOrConfig('order', markDef, config)))\n ) {\n return undefined;\n } else if ((isArray(order) || isFieldDef(order)) && !stack) {\n // Sort by the order field if it is specified and the field is not stacked. (For stacked field, order specify stack order.)\n return sortParams(order, {expr: 'datum'});\n } else if (isPathMark(mark)) {\n // For both line and area, we sort values based on dimension by default\n const dimensionChannel = markDef.orient === 'horizontal' ? 'y' : 'x';\n const dimensionChannelDef = encoding[dimensionChannel];\n if (isFieldDef(dimensionChannelDef)) {\n const s = dimensionChannelDef.sort;\n\n if (isArray(s)) {\n return {\n field: vgField(dimensionChannelDef, {prefix: dimensionChannel, suffix: 'sort_index', expr: 'datum'})\n };\n } else if (isSortField(s)) {\n return {\n field: vgField(\n {\n // FIXME: this op might not already exist?\n // FIXME: what if dimensionChannel (x or y) contains custom domain?\n aggregate: isAggregate(model.encoding) ? s.op : undefined,\n field: s.field\n },\n {expr: 'datum'}\n )\n };\n } else if (isSortByEncoding(s)) {\n const fieldDefToSort = model.fieldDef(s.encoding);\n return {\n field: vgField(fieldDefToSort, {expr: 'datum'}),\n order: s.order\n };\n } else if (s === null) {\n return undefined;\n } else {\n return {\n field: vgField(dimensionChannelDef, {\n // For stack with imputation, we only have bin_mid\n binSuffix: model.stack && model.stack.impute ? 'mid' : undefined,\n expr: 'datum'\n })\n };\n }\n }\n return undefined;\n }\n return undefined;\n}\n\nfunction getMarkGroup(model: UnitModel, opt: {fromPrefix: string} = {fromPrefix: ''}) {\n const {mark, markDef, encoding, config} = model;\n\n const clip = getFirstDefined(markDef.clip, scaleClip(model), projectionClip(model));\n const style = getStyles(markDef);\n const key = encoding.key;\n const sort = getSort(model);\n const interactive = interactiveFlag(model);\n const aria = getMarkPropOrConfig('aria', markDef, config);\n\n const postEncodingTransform = markCompiler[mark].postEncodingTransform\n ? markCompiler[mark].postEncodingTransform(model)\n : null;\n\n return [\n {\n name: model.getName('marks'),\n type: markCompiler[mark].vgMark,\n ...(clip ? {clip: true} : {}),\n ...(style ? {style} : {}),\n ...(key ? {key: key.field} : {}),\n ...(sort ? {sort} : {}),\n ...(interactive ? interactive : {}),\n ...(aria === false ? {aria} : {}),\n from: {data: opt.fromPrefix + model.requestDataName(DataSourceType.Main)},\n encode: {\n update: markCompiler[mark].encodeEntry(model)\n },\n ...(postEncodingTransform\n ? {\n transform: postEncodingTransform\n }\n : {})\n }\n ];\n}\n\n/**\n * If scales are bound to interval selections, we want to automatically clip\n * marks to account for panning/zooming interactions. We identify bound scales\n * by the selectionExtent property, which gets added during scale parsing.\n */\nfunction scaleClip(model: UnitModel) {\n const xScale = model.getScaleComponent('x');\n const yScale = model.getScaleComponent('y');\n return (xScale && xScale.get('selectionExtent')) || (yScale && yScale.get('selectionExtent')) ? true : undefined;\n}\n\n/**\n * If we use a custom projection with auto-fitting to the geodata extent,\n * we need to clip to ensure the chart size doesn't explode.\n */\nfunction projectionClip(model: UnitModel) {\n const projection = model.component.projection;\n return projection && !projection.isFit ? true : undefined;\n}\n\n/**\n * Only output interactive flags if we have selections defined somewhere in our model hierarchy.\n */\nfunction interactiveFlag(model: UnitModel) {\n if (!model.component.selection) return null;\n const unitCount = keys(model.component.selection).length;\n let parentCount = unitCount;\n let parent = model.parent;\n while (parent && parentCount === 0) {\n parentCount = keys(parent.component.selection).length;\n parent = parent.parent;\n }\n return parentCount\n ? {\n interactive: unitCount > 0 || !!model.encoding.tooltip\n }\n : null;\n}\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const arc: MarkCompiler = {\n vgMark: 'arc',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'ignore',\n orient: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n\n // arcs are rectangles in polar coordinates\n ...encode.rectPosition(model, 'radius', 'arc'),\n ...encode.rectPosition(model, 'theta', 'arc')\n };\n }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const area: MarkCompiler = {\n vgMark: 'area',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'include',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointOrRangePosition('x', model, {\n defaultPos: 'zeroOrMin',\n defaultPos2: 'zeroOrMin',\n range: model.markDef.orient === 'horizontal'\n }),\n ...encode.pointOrRangePosition('y', model, {\n defaultPos: 'zeroOrMin',\n defaultPos2: 'zeroOrMin',\n range: model.markDef.orient === 'vertical'\n }),\n ...encode.defined(model)\n };\n }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const bar: MarkCompiler = {\n vgMark: 'rect',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.rectPosition(model, 'x', 'bar'),\n ...encode.rectPosition(model, 'y', 'bar')\n };\n }\n};\n","import {GeoShapeTransform as VgGeoShapeTransform} from 'vega';\nimport {isFieldDef, vgField} from '../../channeldef';\nimport {GEOJSON} from '../../type';\nimport {VgPostEncodingTransform} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const geoshape: MarkCompiler = {\n vgMark: 'shape',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'ignore',\n orient: 'ignore',\n theta: 'ignore'\n })\n };\n },\n postEncodingTransform: (model: UnitModel): VgPostEncodingTransform[] => {\n const {encoding} = model;\n const shapeDef = encoding.shape;\n\n const transform: VgGeoShapeTransform = {\n type: 'geoshape',\n projection: model.projectionName(),\n // as: 'shape',\n ...(shapeDef && isFieldDef(shapeDef) && shapeDef.type === GEOJSON\n ? {field: vgField(shapeDef, {expr: 'datum'})}\n : {})\n };\n return [transform];\n }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const image: MarkCompiler = {\n vgMark: 'image',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'ignore',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.rectPosition(model, 'x', 'image'),\n ...encode.rectPosition(model, 'y', 'image'),\n ...encode.text(model, 'url')\n };\n }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const line: MarkCompiler = {\n vgMark: 'line',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'ignore',\n orient: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n ...encode.nonPosition('size', model, {\n vgChannel: 'strokeWidth' // VL's line size is strokeWidth\n }),\n ...encode.defined(model)\n };\n }\n};\n\nexport const trail: MarkCompiler = {\n vgMark: 'trail',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'include',\n orient: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n ...encode.nonPosition('size', model),\n ...encode.defined(model)\n };\n }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const rect: MarkCompiler = {\n vgMark: 'rect',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.rectPosition(model, 'x', 'rect'),\n ...encode.rectPosition(model, 'y', 'rect')\n };\n }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const rule: MarkCompiler = {\n vgMark: 'rule',\n encodeEntry: (model: UnitModel) => {\n const {markDef} = model;\n const orient = markDef.orient;\n\n if (!model.encoding.x && !model.encoding.y && !model.encoding.latitude && !model.encoding.longitude) {\n // Show nothing if we have none of x, y, lat, and long.\n return {};\n }\n\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointOrRangePosition('x', model, {\n defaultPos: orient === 'horizontal' ? 'zeroOrMax' : 'mid',\n defaultPos2: 'zeroOrMin',\n range: orient !== 'vertical' // include x2 for horizontal or line segment rule\n }),\n ...encode.pointOrRangePosition('y', model, {\n defaultPos: orient === 'vertical' ? 'zeroOrMax' : 'mid',\n defaultPos2: 'zeroOrMin',\n range: orient !== 'horizontal' // include y2 for vertical or line segment rule\n }),\n ...encode.nonPosition('size', model, {\n vgChannel: 'strokeWidth' // VL's rule size is strokeWidth\n })\n };\n }\n};\n","import {NewSignal, SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {Axis, AxisInternal, isConditionalAxisValue} from '../axis';\nimport {\n Channel,\n GEOPOSITION_CHANNELS,\n NonPositionScaleChannel,\n NONPOSITION_SCALE_CHANNELS,\n PositionChannel,\n POSITION_SCALE_CHANNELS,\n ScaleChannel,\n SCALE_CHANNELS,\n SingleDefChannel,\n supportLegend,\n X,\n Y\n} from '../channel';\nimport {\n getFieldDef,\n getFieldOrDatumDef,\n isFieldOrDatumDef,\n isTypedFieldDef,\n MarkPropFieldOrDatumDef,\n PositionFieldDef\n} from '../channeldef';\nimport {Config} from '../config';\nimport {isGraticuleGenerator} from '../data';\nimport * as vlEncoding from '../encoding';\nimport {Encoding, initEncoding} from '../encoding';\nimport {ExprRef, replaceExprRef} from '../expr';\nimport {LegendInternal} from '../legend';\nimport {GEOSHAPE, isMarkDef, Mark, MarkDef} from '../mark';\nimport {Projection} from '../projection';\nimport {Domain, Scale} from '../scale';\nimport {isSelectionParameter, SelectionParameter} from '../selection';\nimport {LayoutSizeMixins, NormalizedUnitSpec} from '../spec';\nimport {isFrameMixins} from '../spec/base';\nimport {stack, StackProperties} from '../stack';\nimport {keys} from '../util';\nimport {VgData, VgLayout} from '../vega.schema';\nimport {assembleAxisSignals} from './axis/assemble';\nimport {AxisInternalIndex} from './axis/component';\nimport {parseUnitAxes} from './axis/parse';\nimport {signalOrValueRefWithCondition, signalRefOrValue} from './common';\nimport {parseData} from './data/parse';\nimport {assembleLayoutSignals} from './layoutsize/assemble';\nimport {initLayoutSize} from './layoutsize/init';\nimport {parseUnitLayoutSize} from './layoutsize/parse';\nimport {LegendInternalIndex} from './legend/component';\nimport {defaultFilled, initMarkdef} from './mark/init';\nimport {parseMarkGroups} from './mark/mark';\nimport {isLayerModel, Model, ModelWithField} from './model';\nimport {ScaleIndex} from './scale/component';\nimport {\n assembleTopLevelSignals,\n assembleUnitSelectionData,\n assembleUnitSelectionMarks,\n assembleUnitSelectionSignals\n} from './selection/assemble';\nimport {parseUnitSelection} from './selection/parse';\n\n/**\n * Internal model of Vega-Lite specification for the compiler.\n */\nexport class UnitModel extends ModelWithField {\n public readonly markDef: MarkDef;\n public readonly encoding: Encoding;\n\n public readonly specifiedScales: ScaleIndex = {};\n\n public readonly stack: StackProperties;\n\n protected specifiedAxes: AxisInternalIndex = {};\n\n protected specifiedLegends: LegendInternalIndex = {};\n\n public specifiedProjection: Projection = {};\n\n public readonly selection: SelectionParameter[] = [];\n public children: Model[] = [];\n\n constructor(\n spec: NormalizedUnitSpec,\n parent: Model,\n parentGivenName: string,\n parentGivenSize: LayoutSizeMixins = {},\n config: Config\n ) {\n super(spec, 'unit', parent, parentGivenName, config, undefined, isFrameMixins(spec) ? spec.view : undefined);\n\n const markDef = isMarkDef(spec.mark) ? {...spec.mark} : {type: spec.mark};\n const mark = markDef.type;\n\n // Need to init filled before other mark properties because encoding depends on filled but other mark properties depend on types inside encoding\n if (markDef.filled === undefined) {\n markDef.filled = defaultFilled(markDef, config, {\n graticule: spec.data && isGraticuleGenerator(spec.data)\n });\n }\n\n const encoding = (this.encoding = initEncoding(spec.encoding || {}, mark, markDef.filled, config));\n this.markDef = initMarkdef(markDef, encoding, config);\n\n this.size = initLayoutSize({\n encoding: encoding,\n size: isFrameMixins(spec)\n ? {\n ...parentGivenSize,\n ...(spec.width ? {width: spec.width} : {}),\n ...(spec.height ? {height: spec.height} : {})\n }\n : parentGivenSize\n });\n\n // calculate stack properties\n this.stack = stack(mark, encoding);\n this.specifiedScales = this.initScales(mark, encoding);\n\n this.specifiedAxes = this.initAxes(encoding);\n this.specifiedLegends = this.initLegends(encoding);\n this.specifiedProjection = spec.projection;\n\n // Selections will be initialized upon parse.\n this.selection = (spec.params ?? []).filter(p => isSelectionParameter(p)) as SelectionParameter[];\n }\n\n public get hasProjection(): boolean {\n const {encoding} = this;\n const isGeoShapeMark = this.mark === GEOSHAPE;\n const hasGeoPosition = encoding && GEOPOSITION_CHANNELS.some(channel => isFieldOrDatumDef(encoding[channel]));\n return isGeoShapeMark || hasGeoPosition;\n }\n\n /**\n * Return specified Vega-Lite scale domain for a particular channel\n * @param channel\n */\n public scaleDomain(channel: ScaleChannel): Domain {\n const scale = this.specifiedScales[channel];\n return scale ? scale.domain : undefined;\n }\n\n public axis(channel: PositionChannel): AxisInternal {\n return this.specifiedAxes[channel];\n }\n\n public legend(channel: NonPositionScaleChannel): LegendInternal {\n return this.specifiedLegends[channel];\n }\n\n private initScales(mark: Mark, encoding: Encoding): ScaleIndex {\n return SCALE_CHANNELS.reduce((scales, channel) => {\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as\n | PositionFieldDef\n | MarkPropFieldOrDatumDef;\n if (fieldOrDatumDef) {\n scales[channel] = this.initScale(fieldOrDatumDef.scale ?? {});\n }\n return scales;\n }, {} as ScaleIndex);\n }\n\n private initScale(scale: Scale): Scale {\n const {domain, range} = scale;\n // TODO: we could simplify this function if we had a recursive replace function\n const scaleInternal = replaceExprRef(scale);\n if (isArray(domain)) {\n scaleInternal.domain = domain.map(signalRefOrValue);\n }\n if (isArray(range)) {\n scaleInternal.range = range.map(signalRefOrValue);\n }\n return scaleInternal as Scale;\n }\n\n private initAxes(encoding: Encoding): AxisInternalIndex {\n return POSITION_SCALE_CHANNELS.reduce((_axis, channel) => {\n // Position Axis\n\n // TODO: handle ConditionFieldDef\n const channelDef = encoding[channel];\n if (\n isFieldOrDatumDef(channelDef) ||\n (channel === X && isFieldOrDatumDef(encoding.x2)) ||\n (channel === Y && isFieldOrDatumDef(encoding.y2))\n ) {\n const axisSpec = isFieldOrDatumDef(channelDef) ? channelDef.axis : undefined;\n\n _axis[channel] = axisSpec\n ? this.initAxis({...axisSpec}) // convert truthy value to object\n : axisSpec;\n }\n return _axis;\n }, {});\n }\n\n private initAxis(axis: Axis): Axis {\n const props = keys(axis);\n const axisInternal = {};\n for (const prop of props) {\n const val = axis[prop];\n axisInternal[prop as any] = isConditionalAxisValue(val)\n ? signalOrValueRefWithCondition(val)\n : signalRefOrValue(val);\n }\n return axisInternal;\n }\n\n private initLegends(encoding: Encoding): LegendInternalIndex {\n return NONPOSITION_SCALE_CHANNELS.reduce((_legend, channel) => {\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as MarkPropFieldOrDatumDef;\n\n if (fieldOrDatumDef && supportLegend(channel)) {\n const legend = fieldOrDatumDef.legend;\n _legend[channel] = legend\n ? replaceExprRef(legend) // convert truthy value to object\n : legend;\n }\n\n return _legend;\n }, {});\n }\n\n public parseData() {\n this.component.data = parseData(this);\n }\n\n public parseLayoutSize() {\n parseUnitLayoutSize(this);\n }\n\n public parseSelections() {\n this.component.selection = parseUnitSelection(this, this.selection);\n }\n\n public parseMarkGroup() {\n this.component.mark = parseMarkGroups(this);\n }\n\n public parseAxesAndHeaders() {\n this.component.axes = parseUnitAxes(this);\n }\n\n public assembleSelectionTopLevelSignals(signals: any[]): NewSignal[] {\n return assembleTopLevelSignals(this, signals);\n }\n\n public assembleSignals(): NewSignal[] {\n return [...assembleAxisSignals(this), ...assembleUnitSelectionSignals(this, [])];\n }\n\n public assembleSelectionData(data: readonly VgData[]): VgData[] {\n return assembleUnitSelectionData(this, data);\n }\n\n public assembleLayout(): VgLayout {\n return null;\n }\n\n public assembleLayoutSignals(): NewSignal[] {\n return assembleLayoutSignals(this);\n }\n\n public assembleMarks() {\n let marks = this.component.mark ?? [];\n\n // If this unit is part of a layer, selections should augment\n // all in concert rather than each unit individually. This\n // ensures correct interleaving of clipping and brushed marks.\n if (!this.parent || !isLayerModel(this.parent)) {\n marks = assembleUnitSelectionMarks(this, marks);\n }\n\n return marks.map(this.correctDataNames);\n }\n\n protected getMapping() {\n return this.encoding;\n }\n\n public get mark(): Mark {\n return this.markDef.type;\n }\n\n public channelHasField(channel: Channel) {\n return vlEncoding.channelHasField(this.encoding, channel);\n }\n\n public fieldDef(channel: SingleDefChannel) {\n const channelDef = this.encoding[channel];\n return getFieldDef(channelDef);\n }\n\n public typedFieldDef(channel: SingleDefChannel) {\n const fieldDef = this.fieldDef(channel);\n if (isTypedFieldDef(fieldDef)) {\n return fieldDef;\n }\n return null;\n }\n}\n","import {getSizeChannel, POSITION_SCALE_CHANNELS} from '../../channel';\nimport {isContinuousFieldOrDatumDef} from '../../channeldef';\nimport {Encoding} from '../../encoding';\nimport * as log from '../../log';\nimport {isStep, LayoutSizeMixins} from '../../spec/base';\n\nexport function initLayoutSize({encoding, size}: {encoding: Encoding; size: LayoutSizeMixins}) {\n for (const channel of POSITION_SCALE_CHANNELS) {\n const sizeType = getSizeChannel(channel);\n if (isStep(size[sizeType])) {\n if (isContinuousFieldOrDatumDef(encoding[channel])) {\n delete size[sizeType];\n log.warn(log.message.stepDropped(sizeType));\n }\n }\n }\n\n return size;\n}\n","import {Legend as VgLegend, NewSignal, SignalRef, Title as VgTitle} from 'vega';\nimport {Config} from '../config';\nimport * as log from '../log';\nimport {isLayerSpec, isUnitSpec, LayoutSizeMixins, NormalizedLayerSpec} from '../spec';\nimport {keys} from '../util';\nimport {VgData, VgLayout} from '../vega.schema';\nimport {assembleAxisSignals} from './axis/assemble';\nimport {parseLayerAxes} from './axis/parse';\nimport {parseData} from './data/parse';\nimport {assembleLayoutSignals} from './layoutsize/assemble';\nimport {parseLayerLayoutSize} from './layoutsize/parse';\nimport {assembleLegends} from './legend/assemble';\nimport {Model} from './model';\nimport {assembleLayerSelectionMarks} from './selection/assemble';\nimport {UnitModel} from './unit';\n\nexport class LayerModel extends Model {\n // HACK: This should be (LayerModel | UnitModel)[], but setting the correct type leads to weird error.\n // So I'm just putting generic Model for now\n public readonly children: Model[];\n\n constructor(\n spec: NormalizedLayerSpec,\n parent: Model,\n parentGivenName: string,\n parentGivenSize: LayoutSizeMixins,\n config: Config\n ) {\n super(spec, 'layer', parent, parentGivenName, config, spec.resolve, spec.view);\n\n const layoutSize = {\n ...parentGivenSize,\n ...(spec.width ? {width: spec.width} : {}),\n ...(spec.height ? {height: spec.height} : {})\n };\n\n this.children = spec.layer.map((layer, i) => {\n if (isLayerSpec(layer)) {\n return new LayerModel(layer, this, this.getName(`layer_${i}`), layoutSize, config);\n } else if (isUnitSpec(layer)) {\n return new UnitModel(layer, this, this.getName(`layer_${i}`), layoutSize, config);\n }\n\n throw new Error(log.message.invalidSpec(layer));\n });\n }\n\n public parseData() {\n this.component.data = parseData(this);\n for (const child of this.children) {\n child.parseData();\n }\n }\n\n public parseLayoutSize() {\n parseLayerLayoutSize(this);\n }\n\n public parseSelections() {\n // Merge selections up the hierarchy so that they may be referenced\n // across unit specs. Persist their definitions within each child\n // to assemble signals which remain within output Vega unit groups.\n this.component.selection = {};\n for (const child of this.children) {\n child.parseSelections();\n for (const key of keys(child.component.selection)) {\n this.component.selection[key] = child.component.selection[key];\n }\n }\n }\n\n public parseMarkGroup() {\n for (const child of this.children) {\n child.parseMarkGroup();\n }\n }\n\n public parseAxesAndHeaders() {\n parseLayerAxes(this);\n }\n\n public assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[] {\n return this.children.reduce((sg, child) => child.assembleSelectionTopLevelSignals(sg), signals);\n }\n\n // TODO: Support same named selections across children.\n public assembleSignals(): NewSignal[] {\n return this.children.reduce((signals, child) => {\n return signals.concat(child.assembleSignals());\n }, assembleAxisSignals(this));\n }\n\n public assembleLayoutSignals(): NewSignal[] {\n return this.children.reduce((signals, child) => {\n return signals.concat(child.assembleLayoutSignals());\n }, assembleLayoutSignals(this));\n }\n\n public assembleSelectionData(data: readonly VgData[]): readonly VgData[] {\n return this.children.reduce((db, child) => child.assembleSelectionData(db), data);\n }\n\n public assembleTitle(): VgTitle {\n let title = super.assembleTitle();\n if (title) {\n return title;\n }\n // If title does not provide layer, look into children\n for (const child of this.children) {\n title = child.assembleTitle();\n if (title) {\n return title;\n }\n }\n return undefined;\n }\n\n public assembleLayout(): VgLayout {\n return null;\n }\n\n public assembleMarks(): any[] {\n return assembleLayerSelectionMarks(\n this,\n this.children.flatMap(child => {\n return child.assembleMarks();\n })\n );\n }\n\n public assembleLegends(): VgLegend[] {\n return this.children.reduce((legends, child) => {\n return legends.concat(child.assembleLegends());\n }, assembleLegends(this));\n }\n}\n","import {SignalRef} from 'vega';\nimport {Config} from '../config';\nimport * as log from '../log';\nimport {isAnyConcatSpec, isFacetSpec, isLayerSpec, isUnitSpec, LayoutSizeMixins, NormalizedSpec} from '../spec';\nimport {ConcatModel} from './concat';\nimport {FacetModel} from './facet';\nimport {LayerModel} from './layer';\nimport {Model} from './model';\nimport {UnitModel} from './unit';\n\nexport function buildModel(\n spec: NormalizedSpec,\n parent: Model,\n parentGivenName: string,\n unitSize: LayoutSizeMixins,\n config: Config\n): Model {\n if (isFacetSpec(spec)) {\n return new FacetModel(spec, parent, parentGivenName, config);\n } else if (isLayerSpec(spec)) {\n return new LayerModel(spec, parent, parentGivenName, unitSize, config);\n } else if (isUnitSpec(spec)) {\n return new UnitModel(spec, parent, parentGivenName, unitSize, config);\n } else if (isAnyConcatSpec(spec)) {\n return new ConcatModel(spec, parent, parentGivenName, config);\n }\n throw new Error(log.message.invalidSpec(spec));\n}\n","import pkg from '../package.json';\nexport const version = pkg.version;\n\nexport {compile} from './compile/compile';\nexport type {Config} from './config';\nexport {normalize} from './normalize';\nexport type {TopLevelSpec} from './spec';\nexport * from './util';\n","import {AutoSizeType, LoggerInterface, Spec as VgSpec} from 'vega';\nimport {isString, mergeConfig} from 'vega-util';\nimport {getPositionScaleChannel} from '../channel';\nimport * as vlFieldDef from '../channeldef';\nimport {Config, initConfig, stripAndRedirectConfig} from '../config';\nimport * as log from '../log';\nimport {normalize} from '../normalize';\nimport {assembleParameterSignals} from '../parameter';\nimport {LayoutSizeMixins, TopLevel, TopLevelSpec} from '../spec';\nimport {\n AutoSizeParams,\n Datasets,\n extractTopLevelProperties,\n getFitType,\n isFitType,\n TopLevelProperties\n} from '../spec/toplevel';\nimport {Dict, keys} from '../util';\nimport {buildModel} from './buildmodel';\nimport {assembleRootData} from './data/assemble';\nimport {optimizeDataflow} from './data/optimize';\nimport {Model} from './model';\n\nexport interface CompileOptions {\n /**\n * Sets a Vega-Lite configuration.\n */\n config?: Config;\n\n /**\n * Sets a custom logger.\n */\n logger?: LoggerInterface;\n\n /**\n * Sets a field title formatter.\n */\n fieldTitle?: vlFieldDef.FieldTitleFormatter;\n}\n\n/**\n * Vega-Lite's main function, for compiling Vega-Lite spec into Vega spec.\n *\n * At a high-level, we make the following transformations in different phases:\n *\n * Input spec\n * |\n * | (Normalization)\n * v\n * Normalized Spec (Row/Column channels in single-view specs becomes faceted specs, composite marks becomes layered specs.)\n * |\n * | (Build Model)\n * v\n * A model tree of the spec\n * |\n * | (Parse)\n * v\n * A model tree with parsed components (intermediate structure of visualization primitives in a format that can be easily merged)\n * |\n * | (Optimize)\n * v\n * A model tree with parsed components with the data component optimized\n * |\n * | (Assemble)\n * v\n * Vega spec\n *\n * @param inputSpec The Vega-Lite specification.\n * @param opt Optional arguments passed to the Vega-Lite compiler.\n * @returns An object containing the compiled Vega spec and normalized Vega-Lite spec.\n */\nexport function compile(inputSpec: TopLevelSpec, opt: CompileOptions = {}) {\n // 0. Augment opt with default opts\n if (opt.logger) {\n // set the singleton logger to the provided logger\n log.set(opt.logger);\n }\n\n if (opt.fieldTitle) {\n // set the singleton field title formatter\n vlFieldDef.setTitleFormatter(opt.fieldTitle);\n }\n\n try {\n // 1. Initialize config by deep merging default config with the config provided via option and the input spec.\n const config = initConfig(mergeConfig(opt.config, inputSpec.config));\n\n // 2. Normalize: Convert input spec -> normalized spec\n\n // - Decompose all extended unit specs into composition of unit spec. For example, a box plot get expanded into multiple layers of bars, ticks, and rules. The shorthand row/column channel is also expanded to a facet spec.\n // - Normalize autosize and width or height spec\n const spec = normalize(inputSpec, config);\n\n // 3. Build Model: normalized spec -> Model (a tree structure)\n\n // This phases instantiates the models with default config by doing a top-down traversal. This allows us to pass properties that child models derive from their parents via their constructors.\n // See the abstract `Model` class and its children (UnitModel, LayerModel, FacetModel, ConcatModel) for different types of models.\n const model: Model = buildModel(spec, null, '', undefined, config);\n\n // 4 Parse: Model --> Model with components\n\n // Note that components = intermediate representations that are equivalent to Vega specs.\n // We need these intermediate representation because we need to merge many visualization \"components\" like projections, scales, axes, and legends.\n // We will later convert these components into actual Vega specs in the assemble phase.\n\n // In this phase, we do a bottom-up traversal over the whole tree to\n // parse for each type of components once (e.g., data, layout, mark, scale).\n // By doing bottom-up traversal, we start parsing components of unit specs and\n // then merge child components of parent composite specs.\n //\n // Please see inside model.parse() for order of different components parsed.\n model.parse();\n\n // drawDataflow(model.component.data.sources);\n\n // 5. Optimize the dataflow. This will modify the data component of the model.\n optimizeDataflow(model.component.data, model);\n\n // drawDataflow(model.component.data.sources);\n\n // 6. Assemble: convert model components --> Vega Spec.\n const vgSpec = assembleTopLevelModel(\n model,\n getTopLevelProperties(inputSpec, spec.autosize, config, model),\n inputSpec.datasets,\n inputSpec.usermeta\n );\n\n return {\n spec: vgSpec,\n normalized: spec\n };\n } finally {\n // Reset the singleton logger if a logger is provided\n if (opt.logger) {\n log.reset();\n }\n // Reset the singleton field title formatter if provided\n if (opt.fieldTitle) {\n vlFieldDef.resetTitleFormatter();\n }\n }\n}\n\nfunction getTopLevelProperties(\n inputSpec: TopLevel,\n autosize: AutoSizeType | AutoSizeParams,\n config: Config,\n model: Model\n) {\n const width = model.component.layoutSize.get('width');\n const height = model.component.layoutSize.get('height');\n if (autosize === undefined) {\n autosize = {type: 'pad'};\n if (model.hasAxisOrientSignalRef()) {\n autosize.resize = true;\n }\n } else if (isString(autosize)) {\n autosize = {type: autosize};\n }\n if (width && height && isFitType(autosize.type)) {\n if (width === 'step' && height === 'step') {\n log.warn(log.message.droppingFit());\n autosize.type = 'pad';\n } else if (width === 'step' || height === 'step') {\n // effectively XOR, because else if\n\n // get step dimension\n const sizeType = width === 'step' ? 'width' : 'height';\n // log that we're dropping fit for respective channel\n log.warn(log.message.droppingFit(getPositionScaleChannel(sizeType)));\n\n // setting type to inverse fit (so if we dropped fit-x, type is now fit-y)\n const inverseSizeType = sizeType === 'width' ? 'height' : 'width';\n autosize.type = getFitType(inverseSizeType);\n }\n }\n\n return {\n ...(keys(autosize).length === 1 && autosize.type\n ? autosize.type === 'pad'\n ? {}\n : {autosize: autosize.type}\n : {autosize}),\n ...extractTopLevelProperties(config, false),\n ...extractTopLevelProperties(inputSpec, true)\n };\n}\n\n/*\n * Assemble the top-level model to a Vega spec.\n *\n * Note: this couldn't be `model.assemble()` since the top-level model\n * needs some special treatment to generate top-level properties.\n */\nfunction assembleTopLevelModel(\n model: Model,\n topLevelProperties: TopLevelProperties & LayoutSizeMixins,\n datasets: Datasets = {},\n usermeta: Dict\n): VgSpec {\n // Config with Vega-Lite only config removed.\n const vgConfig = model.config ? stripAndRedirectConfig(model.config) : undefined;\n\n const data = [].concat(\n model.assembleSelectionData([]),\n // only assemble data in the root\n assembleRootData(model.component.data, datasets)\n );\n\n const projections = model.assembleProjections();\n const title = model.assembleTitle();\n const style = model.assembleGroupStyle();\n const encodeEntry = model.assembleGroupEncodeEntry(true);\n\n let layoutSignals = model.assembleLayoutSignals();\n\n // move width and height signals with values to top level\n layoutSignals = layoutSignals.filter(signal => {\n if ((signal.name === 'width' || signal.name === 'height') && signal.value !== undefined) {\n topLevelProperties[signal.name] = +signal.value;\n return false;\n }\n return true;\n });\n\n const {params, ...otherTopLevelProps} = topLevelProperties;\n\n return {\n $schema: 'https://vega.github.io/schema/vega/v5.json',\n ...(model.description ? {description: model.description} : {}),\n ...otherTopLevelProps,\n ...(title ? {title} : {}),\n ...(style ? {style} : {}),\n ...(encodeEntry ? {encode: {update: encodeEntry}} : {}),\n data,\n ...(projections.length > 0 ? {projections: projections} : {}),\n ...model.assembleGroup([\n ...layoutSignals,\n ...model.assembleSelectionTopLevelSignals([]),\n ...assembleParameterSignals(params)\n ]),\n ...(vgConfig ? {config: vgConfig} : {}),\n ...(usermeta ? {usermeta} : {})\n };\n}\n"],"names":["Array","prototype","flat","Object","defineProperty","configurable","value","r","t","isNaN","arguments","Number","reduce","call","this","a","e","isArray","push","apply","slice","writable","flatMap","map","clone","_instanceof","obj","type","nativeMap","nativeSet","nativePromise","Map","_","Set","Promise","parent","circular","depth","includeNonEnumerable","allParents","allChildren","useBuffer","Buffer","Infinity","_clone","child","proto","resolve","reject","then","err","__isArray","__isRegExp","RegExp","source","__getRegExpFlags","lastIndex","__isDate","Date","getTime","isBuffer","allocUnsafe","length","copy","Error","create","getPrototypeOf","index","indexOf","i","forEach","key","keyChild","valueChild","set","entryChild","add","attrs","getOwnPropertyDescriptor","getOwnPropertySymbols","symbols","symbol","descriptor","enumerable","allPropertyNames","getOwnPropertyNames","propertyName","__objToStr","o","toString","re","flags","global","ignoreCase","multiline","clonePrototype","c","module","exports","data","opts","cmp","f","cycles","node","b","aobj","bobj","seen","stringify","toJSON","undefined","isFinite","JSON","out","TypeError","seenIndex","keys","sort","splice","isLogicalOr","op","or","isLogicalAnd","and","isLogicalNot","not","forEachLeaf","fn","subop","normalizeLogicalComposition","normalizer","deepEqual","equal","constructor","valueOf","hasOwnProperty","duplicate","clone_","pick","props","prop","omit","x","stableStringify","join","hash","isNumber","str","isString","h","charCodeAt","isNullOrFalse","contains","array","item","includes","some","arr","k","entries","every","mergeDeep","dest","src","s","deepMerge_","property","writeConfig","unique","values","results","u","v","val","setEqual","size","has","hasIntersection","prefixGenerator","prefixes","wrappedWithAccessors","splitAccessPath","y","computedPrefixes","fieldIntersection","isEmpty","vals","isBoolean","varName","alphanumericS","replace","match","logicalExpr","cb","deleteNestedProperty","orderedProps","shift","titleCase","charAt","toUpperCase","substr","accessPathWithDatum","path","datum","pieces","prefix","stringValue","flatAccessWithDatum","escapePathAccess","string","replacePathInField","replaceAll","find","replacement","removePathFromField","accessPathDepth","getFirstDefined","args","arg","idCounter","uniqueId","id","String","internalField","name","isInternalField","startsWith","normalizeAngle","angle","isNumeric","parseFloat","ROW","COLUMN","FACET","X","Y","X2","Y2","RADIUS","RADIUS2","THETA","THETA2","LATITUDE","LONGITUDE","LATITUDE2","LONGITUDE2","COLOR","FILL","STROKE","SHAPE","SIZE","ANGLE","OPACITY","FILLOPACITY","STROKEOPACITY","STROKEWIDTH","STROKEDASH","TEXT","ORDER","DETAIL","KEY","TOOLTIP","HREF","URL","DESCRIPTION","POLAR_POSITION_CHANNEL_INDEX","theta","theta2","radius","radius2","isPolarPositionChannel","GEO_POSIITON_CHANNEL_INDEX","longitude","longitude2","latitude","latitude2","GEOPOSITION_CHANNELS","UNIT_CHANNEL_INDEX","x2","y2","color","fill","stroke","opacity","fillOpacity","strokeOpacity","strokeWidth","strokeDash","shape","order","text","detail","tooltip","href","url","description","isColorChannel","channel","FACET_CHANNEL_INDEX","row","column","facet","FACET_CHANNELS","CHANNEL_INDEX","CHANNELS","_o","_d","_tt1","SINGLE_DEF_CHANNEL_INDEX","_r","_c","_f","SINGLE_DEF_UNIT_CHANNEL_INDEX","isChannel","SECONDARY_RANGE_CHANNEL","isSecondaryRangeChannel","getMainRangeChannel","getVgPositionChannel","getSecondaryRangeChannel","getSizeChannel","_x","_y","_x2","_y2","_latitude","_longitude","_latitude2","_longitude2","_theta","_theta2","_radius","_radius2","NONPOSITION_CHANNEL_INDEX","NONPOSITION_CHANNELS","POSITION_SCALE_CHANNEL_INDEX","POSITION_SCALE_CHANNELS","isXorY","POLAR_POSITION_SCALE_CHANNEL_INDEX","POLAR_POSITION_SCALE_CHANNELS","getPositionScaleChannel","sizeType","_t","_tt","_hr","_u","_al","_dd","_k","_oo","NONPOSITION_SCALE_CHANNEL_INDEX","NONPOSITION_SCALE_CHANNELS","SCALE_CHANNEL_INDEX","SCALE_CHANNELS","isScaleChannel","supportMark","mark","ALL_MARKS","ALL_MARKS_EXCEPT_GEOSHAPE","area","bar","image","rect","rule","circle","point","square","tick","line","trail","geoshape","arc","getSupportedMark","_g","rangeType","AGGREGATE_OP_INDEX","argmax","argmin","average","count","distinct","product","max","mean","median","min","missing","q1","q3","ci0","ci1","stderr","stdev","stdevp","sum","valid","variance","variancep","MULTIDOMAIN_SORT_OP_INDEX","isArgminDef","isArgmaxDef","isAggregateOp","COUNTING_OPS","isCountingAggregateOp","aggregate","SUM_OPS","SHARED_DOMAIN_OP_INDEX","toSet","binToString","bin","normalizeBin","p","isParameterExtent","isBinning","isBinParams","binned","isBinned","isObject","extent","autoMaxBins","isExprRef","replaceExprRef","newIndex","signalRefOrValue","extractTitleConfig","titleConfig","anchor","frame","offset","orient","subtitleColor","subtitleFont","subtitleFontSize","subtitleFontStyle","subtitleFontWeight","subtitleLineHeight","subtitlePadding","rest","titleMarkConfig","nonMark","subtitle","subtitleMarkConfig","isText","isSignalRef","isVgRangeStep","range","isDataRefDomain","domain","VG_MARK_CONFIGS","aria","ariaRole","ariaRoleDescription","blend","strokeCap","strokeDashOffset","strokeJoin","strokeOffset","strokeMiterLimit","startAngle","endAngle","padAngle","innerRadius","outerRadius","interpolate","tension","align","baseline","dir","dx","dy","ellipsis","limit","font","fontSize","fontWeight","fontStyle","lineBreak","lineHeight","cursor","cornerRadius","cornerRadiusTopLeft","cornerRadiusTopRight","cornerRadiusBottomLeft","cornerRadiusBottomRight","aspect","width","height","smooth","VG_MARK_INDEX","group","VG_CORNERRADIUS_CHANNELS","signalOrValueRefWithCondition","condition","conditionalSignalRefOrValue","expr","signal","signalOrValueRef","exprFromValueOrSignalRef","ref","signalOrStringValue","applyMarkConfig","model","propsList","getMarkConfig","markDef","config","getStyles","concat","style","getMarkPropOrConfig","opt","vgChannel","ignoreVgConfig","getMarkStyleConfig","styleConfigIndex","getStyleConfig","styles","styleConfig","sortParams","orderDef","fieldRefOption","orderChannelDef","field","vgField","mergeTitleFieldDefs","f1","f2","merged","fdToMerge","fieldDef1","mergeTitle","title1","title2","mergeTitleComponent","v1","v2","v1Val","v2Val","explicit","invalidSpec","spec","FIT_NON_SINGLE","containerSizeNonSingle","containerSizeNotCompatibleWithAutosize","droppingFit","unknownField","cannotProjectOnChannelWithoutField","cannotProjectAggregate","selectionNotSupported","NEEDS_SAME_SELECTION","columnsNotSupportByRowCol","differentParse","local","ancestor","customFormatTypeNotAllowed","invalidFieldType","droppingColor","emptyFieldDef","fieldDef","incompatibleChannel","markOrFacet","when","channelShouldBeDiscrete","channelShouldBeDiscreteOrDiscretizing","discreteChannelCannotEncode","unaggregateDomainHasNoEffectForRawField","unaggregateDomainWithNonSharedDomainOp","unaggregatedDomainWithLogScale","scalePropertyNotWorkWithScaleType","scaleType","propName","stepDropped","MORE_THAN_ONE_SORT","invalidTimeUnit","unitName","errorBand1DNotSupport","channelRequiredForBinned","main","logger","Warn","current","warn","isDateTime","part","TIMEUNIT_PARTS","MONTHS","SHORT_MONTHS","m","DAYS","SHORT_DAYS","d","dateTimeParts","normalize","parts","day","log","year","month","lowerM","toLowerCase","monthIndex","shortM","shortMonthIndex","normalizeMonth","quarter","q","normalizeQuarter","date","lowerD","dayIndex","shortD","shortDayIndex","normalizeDay","timeUnit","unit","dateTimeToExpr","utc","LOCAL_SINGLE_TIMEUNIT_INDEX","week","dayofyear","hours","minutes","seconds","milliseconds","isUTCTimeUnit","VEGALITE_TIMEFORMAT","getTimeUnitParts","filter","containsTimeUnit","fullTimeUnit","fieldExpr","end","fieldRef","lastTimeUnit","dateExpr","dateTimeExprToExpr","timeUnitSpecifierExpression","timeUnitParts","normalizeTimeUnit","params","isFieldEqualPredicate","predicate","isFieldLTPredicate","lt","isFieldLTEPredicate","lte","isFieldGTPredicate","gt","isFieldGTEPredicate","gte","isFieldRangePredicate","isFieldOneOfPredicate","oneOf","in","isFieldPredicate","predicateValueExpr","valueExpr","wrapTime","fieldFilterExpression","useInRange","_normalizeTimeUnit","timeUnitFieldExpr","predicateValuesExpr","isFieldValidPredicate","fieldValidPredicate","lower","upper","exprs","normalizePredicate","_normalizeTimeUnit2","QUANTITATIVE","ORDINAL","TEMPORAL","NOMINAL","GEOJSON","ScaleType","SCALE_CATEGORY_INDEX","linear","pow","sqrt","symlog","identity","sequential","time","ordinal","band","quantile","quantize","threshold","scaleCompatible","scaleType1","scaleType2","scaleCategory1","scaleCategory2","SCALE_PRECEDENCE_INDEX","scaleTypePrecedence","CONTINUOUS_TO_CONTINUOUS_SCALES","CONTINUOUS_TO_CONTINUOUS_INDEX","QUANTITATIVE_SCALES_INDEX","CONTINUOUS_TO_DISCRETE_INDEX","CONTINUOUS_DOMAIN_SCALES","CONTINUOUS_DOMAIN_INDEX","DISCRETE_DOMAIN_INDEX","hasDiscreteDomain","hasContinuousDomain","isContinuousToContinuous","isContinuousToDiscrete","isParameterDomain","rangeMax","rangeMin","scheme","NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTY_INDEX","domainMax","domainMin","domainMid","bins","reverse","round","clamp","nice","base","exponent","constant","zero","padding","paddingInner","paddingOuter","NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES","scaleTypeSupportProperty","channelScalePropertyIncompatability","Mark","ARC","AREA","BAR","IMAGE","LINE","POINT","RECT","RULE","TICK","TRAIL","CIRCLE","SQUARE","GEOSHAPE","isPathMark","isRectBasedMark","PRIMITIVE_MARKS","isMarkDef","FILL_STROKE_CONFIG","VL_ONLY_MARK_CONFIG_PROPERTIES","filled","invalid","timeUnitBandSize","timeUnitBandPosition","MARK_CONFIGS","isRelativeBandSize","BAR_CORNER_RADIUS_INDEX","horizontal","vertical","defaultBarConfig","binSpacing","continuousBandSize","defaultRectConfig","midPointRefWithPositionInvalidTest","channelDef","scale","midPoint","isFieldDef","get","wrapPositionInvalidTest","fieldInvalidTestValueRef","test","fieldInvalidPredicate","valueRefForFieldOrDatumDef","scaleName","encode","isDatumDef","interpolatedSignalRef","fieldOrDatumDef","fieldOrDatumDef2","startSuffix","bandPosition","start","suffix","channel2Def","stack","defaultRef","isFieldOrDatumDef","isTypedFieldDef","getBandPosition","fieldDef2","impute","binSuffix","binRequiresRange","isValueDef","offsetMixins","widthHeightValueOrSignalRef","isFunction","isCustomFormatType","formatType","customFormatExpr","format","formatSignalRef","normalizeStack","formatCustomType","fieldToFormat","isFieldOrDatumDefForTimeFormat","rawTimeFormat","isUTCScale","formatExpression","timeFormatExpression","timeFormat","isScaleFieldDef","numberFormat","channelDefType","binFormatExpression","formatExpr","datumDef","datumDefToExpr","guideFormat","omitTimeFormatConfig","specifiedFormat","guideFormatType","binNumberFormatExpr","startField","endField","DEFAULT_SORT_OP","SORT_BY_CHANNEL_INDEX","isSortByChannel","isSortByEncoding","isSortField","isSortArray","isFacetMapping","isFacetFieldDef","isFacetSpec","toFieldDefBase","isSortableFieldDef","getBandSize","useVlSizeChannel","sizeChannel","discreteBandSize","_config$mark$type2","_config$mark$type3","hasBandEnd","isConditionalDef","hasConditionalFieldDef","hasConditionalFieldOrDatumDef","isContinuousFieldOrDatumDef","cd","isDiscrete","isNumericDataDef","isPositionFieldOrDatumDef","isMarkPropFieldOrDatumDef","isStringFieldOrDatumDef","toStringFieldDef","argAccessor","isCount","nofn","isOpFieldDef","tu","timeUnitToString","forAs","def","defaultTitleFormatter","fieldTitle","timeUnitParams","maxbins","functionalTitleFormatter","countTitle","verbalTitleFormatter","titleFormatter","setTitleFormatter","formatter","title","allowDisabling","includeDefault","guideTitle","getGuide","_getGuide","defaultTitle","axis","legend","header","getFormatMixins","guide","getFieldDef","getFieldOrDatumDef","initChannelDef","initFieldOrDatumDef","fd","customFormatTypes","guideType","newGuide","initFieldDef","initDatumDef","compositeMark","fullType","getFullName","newType","_fieldDef$scale","defaultType","compatible","warning","COMPATIBLE","_def$scale","channelCompatibility","encoding","sub","labelOrient","titleOrient","step","undefinedIfExprNotRequired","isTime","isLocalSingleTimeUnit","parse","valueArray","console","CONDITIONAL_AXIS_PROP_INDEX","labelAlign","vgProp","labelBaseline","labelColor","labelFont","labelFontSize","labelFontStyle","labelFontWeight","labelOpacity","labelOffset","labelPadding","gridColor","gridDash","gridDashOffset","gridOpacity","gridWidth","tickColor","tickDash","tickDashOffset","tickOpacity","tickSize","tickWidth","isConditionalAxisValue","AXIS_PARTS","AXIS_PROPERTY_TYPE","grid","gridCap","gridScale","domainCap","domainColor","domainDash","domainDashOffset","domainOpacity","domainWidth","labelAngle","labelBound","labelFlush","labelFlushOffset","labelLimit","labelLineHeight","labelOverlap","labels","labelSeparation","maxExtent","minExtent","position","tickCap","tickMinStep","tickOffset","tickRound","ticks","titleAlign","titleAnchor","titleAngle","titleBaseline","titleColor","titleFont","titleFontSize","titleFontStyle","titleFontWeight","titleLimit","titleLineHeight","titleOpacity","titlePadding","titleX","titleY","tickBand","tickCount","tickExtra","translate","zindex","COMMON_AXIS_PROPERTIES_INDEX","AXIS_PROPERTIES_INDEX","labelExpr","isAxisProperty","AXIS_CONFIGS","axisBand","axisBottom","axisDiscrete","axisLeft","axisPoint","axisQuantitative","axisRight","axisTemporal","axisTop","axisX","axisXBand","axisXDiscrete","axisXPoint","axisXQuantitative","axisXTemporal","axisY","axisYBand","axisYDiscrete","axisYPoint","axisYQuantitative","axisYTemporal","isUnitSpec","CompositeMarkNormalizer","run","hasMatchingType","channelHasField","isAggregate","extractTransformsFromEncoding","oldEncoding","groupby","timeUnits","aggOp","remaining","isTitleDefined","newField","newFieldDef","aggregateEntry","as","secondaryChannel","isNonPositionScaleChannel","initEncoding","normalizedEncoding","markSupported","primaryFieldDef","markChannelCompatible","defs","normalizeEncoding","newChannelDef","mapping","thisArg","el","pathGroupingFields","details","getCompositeMarkTooltip","tooltipSummary","continuousAxisChannelDef","encodingWithoutContinuousAxis","withFieldName","fieldPrefix","titlePrefix","mainTitle","getTitle","escape","channelDefArray","fieldDefs","makeCompositeAggregatePartFactory","compositeMarkDef","continuousAxis","sharedEncoding","compositeMarkConfig","partName","positionPrefix","endPositionPrefix","extraEncoding","partLayerMixins","partBaseSpec","clip","compositeMarkContinuousAxis","continuousAxisChannelDef2","continuousAxisChannelDefError","continuousAxisChannelDefError2","filterAggregateFromChannelDef","continuousAxisWithoutAggregate","compositeMarkOrient","xAggregate","yAggregate","BOXPLOT","boxPlotNormalizer","normalizeBoxPlot","getBoxPlotType","_encoding","projection","_p","outerSpec","boxplot","sizeValue","boxPlotType","transform","ticksOrient","boxOrient","customTooltipWithoutAggregatedField","continuousFieldName","boxplotSpecificAggregate","boxParamsQuartiles","postAggregateCalculates","calculate","oldContinuousAxisChannelDef","oldEncodingWithoutContinuousAxis","filteredEncoding","customTooltipWithAggregatedField","filterTooltipWithAggregatedField","boxParams","encodingWithoutSizeColorAndContinuousAxis","makeBoxPlotPart","makeBoxPlotExtent","makeBoxPlotBox","makeBoxPlotMidTick","fiveSummaryTooltipEncoding","endTick","whiskerTooltipEncoding","whiskerLayers","boxLayers","layer","lowerBoxExpr","upperBoxExpr","iqrExpr","lowerWhiskerExpr","upperWhiskerExpr","joinaggregateTransform","joinaggregate","filteredWhiskerSpec","encodingWithoutSizeColorContinuousAxisAndTooltip","axisWithoutTitle","outlierLayersMixins","filteredLayersMixins","filteredLayersMixinsTransforms","unshift","continousAxisField","ERRORBAR","errorBarNormalizer","normalizeErrorBar","tooltipEncoding","errorBarParams","makeErrorBarPart","errorbar","thickness","errorBarOrientAndInputType","xError","xError2","yError","yError2","errorBarIsInputTypeRaw","inputType","isTypeAggregatedUpperLower","errorBarIsInputTypeAggregatedUpperLower","isTypeAggregatedError","errorBarIsInputTypeAggregatedError","errorBarSpecificAggregate","tooltipTitleWithFieldName","center","getTitlePrefix","centerOp","lowerExtentOp","upperExtentOp","postAggregateCalculate","substring","errorBarAggregationAndCalculation","oldContinuousAxisChannelDef2","oldContinuousAxisChannelDefError","oldContinuousAxisChannelDefError2","oldAggregate","oldGroupBy","operation","ERRORBAND","errorBandNormalizer","normalizeErrorBand","errorBandDef","makeErrorBandPart","errorband","is2D","bandMark","bordersMark","compositeMarkRegistry","VL_ONLY_LEGEND_CONFIG","HEADER_TITLE_PROPERTIES_MAP","HEADER_LABEL_PROPERTIES_MAP","labelAnchor","HEADER_TITLE_PROPERTIES","HEADER_LABEL_PROPERTIES","HEADER_CONFIGS","headerRow","headerColumn","headerFacet","LEGEND_SCALE_CHANNELS","SELECTION_ID","defaultConfig","on","fields","toggle","clear","interval","encodings","zoom","isLegendBinding","bind","isLegendStreamBinding","isSelectionParameter","param","assembleParameterSignals","signals","init","update","isConcatSpec","isVConcatSpec","isHConcatSpec","TOP_LEVEL_PROPERTIES","extractTopLevelProperties","includeParams","isStep","isFrameMixins","COMPOSITION_LAYOUT_PROPERTIES","bounds","columns","spacing","getViewConfigContinuousSize","viewConfig","getViewConfigDiscreteStep","getViewConfigDiscreteSize","DEFAULT_STEP","background","view","continuousWidth","continuousHeight","box","outliers","borders","pointPadding","barBandPaddingInner","rectBandPaddingInner","minBandSize","minFontSize","maxFontSize","minOpacity","maxOpacity","minSize","minStrokeWidth","maxStrokeWidth","quantileCount","quantizeCount","gradientHorizontalMaxLength","gradientHorizontalMinLength","gradientVerticalMaxLength","gradientVerticalMinLength","unselectedOpacity","selection","defaultSelectionConfig","tab10","DEFAULT_FONT_SIZE","guideLabel","groupTitle","groupSubtitle","DEFAULT_COLOR","blue","orange","red","teal","green","yellow","purple","pink","brown","gray0","gray1","gray2","gray3","gray4","gray5","gray6","gray7","gray8","gray9","gray10","gray11","gray12","gray13","gray14","gray15","getAxisConfigInternal","axisConfig","axisConfigInternal","configPropsWithExpr","initConfig","specifiedConfig","restConfig","mergedConfig","mergeConfig","fontConfig","cell","category","colorSignalConfig","fontSizeSignalConfig","outputConfig","markConfigType","axisConfigType","headerConfigType","styleConfigInternal","getStyleConfigInternal","MARK_STYLES","VL_ONLY_CONFIG_PROPERTIES","VL_ONLY_ALL_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX","stripAndRedirectConfig","markType","vlOnlyMarkSpecificConfigs","redirectConfigToStyleConfig","redirectTitleConfig","toProp","compositeMarkPart","isLayerSpec","SpecMapper","mapFacet","isRepeatSpec","mapRepeat","mapHConcat","mapVConcat","mapConcat","mapLayerOrUnit","mapLayer","mapUnit","subspec","hconcat","vconcat","STACK_OFFSET_INDEX","STACKABLE_MARKS","STACK_BY_DEFAULT_MARKS","potentialStackedChannel","xDef","yDef","xScale","_xDef$scale","yScale","_yDef$scale","fieldChannel","stackedFieldDef","stackedField","dimensionChannel","getDimensionChannel","dimensionDef","dimensionField","stackBy","sc","cDef","disallowNonLinearStack","groupbyChannel","groupbyField","dropLineAndPoint","_point","_line","dropLineAndPointFromConfig","getPointOverlay","markConfig","getLineOverlay","PathOverlayNormalizer","normParams","pointOverlay","lineOverlay","stackProps","overlayEncoding","stackFieldChannel","replaceRepeaterInFacet","repeater","replaceRepeaterInMapping","replaceRepeaterInFieldDef","replaceRepeaterInEncoding","replaceRepeatInProp","repeat","replaceRepeaterInFieldOrDatumDef","replaceRepeaterInChannelDef","channelDefWithoutCondition","RuleForRangedLineNormalizer","mainChannelDef","hasX2","hasY2","mergeEncoding","parentEncoding","channels","parentChannelDef","mergedChannelDef","mergeProjection","parentProjection","isFilter","isLookup","isPivot","isDensity","isQuantile","isRegression","isLoess","isSample","isWindow","isJoinAggregate","isFlatten","isCalculate","isBin","isImpute","isTimeUnit","isStack","isFold","normalizeTransforms","tx","normalizeBinExtent","from","normalizeChannelDef","enc","_enc$scale","_enc$scale$domain","cond","ext","normalizeSelectionComposition","pred","empty","emptySelections","selectionPredicates","TopLevelSelectionsNormalizer","selections","super","addSpecNameToParams","views","method","normalizedSpec","topLevelSelectionNormalizer","coreNormalizer","selectionCompatNormalizer","normalizeGenericSpec","autosize","sizeInfo","isFitCompatible","autosizeDefault","_normalizeAutoSize","normalizeAutoSize","hasRow","hasColumn","hasFacet","mapFacetedUnit","specWithReplacedEncoding","mapUnitWithParentEncodingOrProjection","normalizeLayerOrUnit","unitNormalizer","nonFacetUnitNormalizers","isLayerRepeatSpec","mapLayerRepeat","mapNonLayerRepeat","childSpec","repeaterPrefix","layerValue","childRepeater","childName","remainingProperties","repeatValues","repeatValue","rowValue","columnValue","mergedProjection","mergedEncoding","facetMapping","layout","getFacetMappingAndLayout","newEncoding","facets","defWithoutLayout","otherParams","selDef","select","Split","implicit","combine","getWithExplicit","setWithExplicit","copyKeyFromSplit","copyKeyFromObject","copyAll","other","makeExplicit","makeImplicit","tieBreakByComparing","compare","propertyOf","diff","defaultTieBreaker","mergeValuesWithExplicit","tieBreaker","AncestorParse","parseNothing","isUrlData","isInlineData","isNamedData","isGenerator","isSequenceGenerator","isSphereGenerator","isGraticuleGenerator","DataSourceType","LBRACK","RBRACK","ILLEGAL","DEFAULT_MARKS","DEFAULT_SOURCE","MARKS","eventSelector","selector","marks","parseMerge","trim","parseSelector","endChar","pushChar","popChar","n","output","stream","between","parseBetween","j","throttle","markname","lastIndexOf","split","parseThrottle","isMarkType","marktype","consume","debounce","parseStream","assembleInit","isExpr","wrap","assembled","UTC","dateTimeToTimestamp","assembleUnitSelectionSignals","selCmpt","component","modifyExpr","TUPLE","selectionCompilers","defined","MODIFY","events","STORE","cleanupEmptyOnArray","assembleFacetSignals","getName","assembleUnitSelectionMarks","DataFlowNode","debugName","_parent","addChild","_children","numChildren","loc","removeChild","oldChild","remove","insertAsParentOf","swapWithParent","newParent","OutputNode","cloneObj","_source","_name","refCounts","dependentFields","producedFields","_hash","getSource","isRequired","setSource","TimeUnitNode","formula","reduceFieldDef","timeUnitComponent","merge","children","removeFormulas","newFormula","assemble","transforms","units","timezone","TUPLE_FIELDS","SelectionProjectionComponent","items","hasChannel","hasField","project","proj","parsed","signalName","sg","counter","cfg","initVal","tplType","getScaleComponent","allSignals","hasLegend","scaleBindings","bound","scales","topLevelSignals","isTopLevelLayer","namedSg","VL_SELECTION_RESOLVE","isLayerModel","BRUSH","SCALE_TRIGGER","fieldsSg","hasScales","dataSignals","scaleTriggers","filterExpr","evt","filters","_evt$between$","cs","vname","visual","dname","scaled","getSizeSignalRef","coord","channelSignals","toNum","xvname","yvname","store","vgStroke","enter","force","wrapCondition","refFn","valueRef","conditionValueRef","isConditionalParameter","parseSelectionPredicate","expression","textRef","tooltipRefForEncoding","reactiveGeom","tooltipRefFromChannelDef","markTooltip","content","tooltipData","toSkip","tuples","fDef","mainChannel","channel2","keyValues","enableAria","ariaRoleDesc","descriptionValue","nonPosition","defaultValue","transparentIfNeeded","defaultFill","defaultStroke","colorVgChannel","fillStrokeMarkDefAndConfig","getOffset","markDefOffsetValue","getOffsetChannel","pointPosition","defaultPos","pointPositionDefaultRef","positionRef","definedValueOrConfig","domainDefinitelyIncludesZero","mult","ALIGNED_X_CHANNEL","left","right","BASELINED_Y_CHANNEL","top","middle","bottom","vgAlignedPositionChannel","defaultAlign","alignChannel","alignExcludingSignal","pointOrRangePosition","defaultPos2","rangePosition","pos2Mixins","baseChannel","vgSizeChannel","position2Ref","position2orSize","pointPosition2OrSize","dimensionSize","rectPosition","channelDef2","hasSizeDef","isBarBand","sizeMixins","bandSize","defaultSizeRef","defaultBandAlign","posRef","vgChannel2","sizeRef","sizeOffset","positionAndSize","axes","_model$component$axes","axisTranslate","rectBinRef","getBinSpacing","startRef","rectBinPosition","scaleRange","spacingOffset","reverseExpr","offsetExpr","translateExpr","ALWAYS_IGNORE","baseEncodeEntry","ignore","markDefProperties","wrapAllFieldsInvalid","filterIndex","aggregator","scaleComponent","allFieldsInvalidPredicate","valueIfDefined","VORONOI","nearest","cellDef","interactive","isVoronoi","exists","inputBindings","disableDirectManipulation","sgname","TOGGLE","tpl","idx","findIndex","addClear","vIdx","tIdx","legendBindings","projLen","selDef_","legendFilter","selName","markName","ds","sgName","tuple","ANCHOR","DELTA","scalesCompiler","INTERVAL_BRUSH","onDelta","delta","sizeSg","scaleCmpt","reversed","sx","sy","legends","facetModel","isFacetModel","getFacetModel","requiresSelectionId","identifier","RawCode","Literal","Property","Identifier","ArrayExpression","BinaryExpression","CallExpression","ConditionalExpression","LogicalExpression","MemberExpression","ObjectExpression","UnaryExpression","ASTNode","TokenName","lookahead","visit","visitor","elements","callee","consequent","alternate","object","properties","argument","SyntaxIdentifier","MessageUnexpectedToken","MessageInvalidRegExp","MessageUnterminatedRegExp","MessageStrictOctalLiteral","DISABLED","RegexNonAsciiIdentifierStart","RegexNonAsciiIdentifierPart","assert","message","isDecimalDigit","ch","isHexDigit","isOctalDigit","isWhiteSpace","isLineTerminator","isIdentifierStart","fromCharCode","isIdentifierPart","keywords","skipComment","scanHexEscape","len","code","throwError","scanUnicodeCodePointEscape","cu1","cu2","getEscapedIdentifier","scanIdentifier","getIdentifier","scanPunctuator","code2","ch2","ch3","ch4","ch1","scanNumericLiteral","number","parseInt","scanHexLiteral","octal","scanOctalLiteral","scanRegExp","body","classMarker","terminated","literal","scanRegExpBody","search","scanRegExpFlags","pattern","tmp","$0","$1","exception","testRegExp","regex","advance","quote","scanStringLiteral","lex","token","peek","pos","finishBinaryExpression","operator","finishCallExpression","finishIdentifier","finishLiteral","raw","finishMemberExpression","accessor","computed","member","finishProperty","kind","messageFormat","error","msg","whole","throwUnexpected","expect","matchKeyword","keyword","parseArrayInitialiser","parseConditionalExpression","finishArrayExpression","parseObjectPropertyKey","parseObjectProperty","parseObjectInitialiser","finishObjectExpression","legalKeywords","parsePrimaryExpression","parseExpression","parseGroupExpression","parseArguments","parseNonComputedMember","isIdentifierName","parseNonComputedProperty","parseComputedMember","parsePostfixExpression","parseLeftHandSideExpressionAllowCall","parseUnaryExpression","finishUnaryExpression","binaryPrecedence","prec","marker","markers","pop","parseBinaryExpression","finishConditionalExpression","startsWithDatum","getDependentFields","ast","dependents","FilterNode","_dependentFields","dfnode","getSelectionComponent","tunode","parseSelectionExtent","filterOp","isSelectionPredicate","setAxisEncode","vgRef","assembleAxis","axisCmpt","disable","propType","propValue","valueOrSignalRef","conditions","propIndex","valueOrSignalCRef","signalRef","mainExtracted","hasAxisPart","titleString","assembleTitle","assembleAxisSignals","getAxisConfigFromConfigTypes","configTypes","assign","configType","orient1","orientConfig1","orientConfig2","conditionalOrientAxisConfig","getAxisConfigs","typeBasedConfigTypes","isQuantitative","axisChannel","axisOrient","vlOnlyConfigTypes","vgConfigTypes","vlOnlyAxisConfig","vgAxisConfig","axisConfigStyle","getAxisConfigStyle","axisConfigTypes","toMerge","_config$configType","getAxisConfig","axisConfigs","configFrom","configValue","axisRules","defaultGrid","gridChannel","defaultLabelAlign","defaultLabelBaseline","defaultLabelFlush","hasTimeUnit","defaultLabelOverlap","defaultTickCount","fieldDefTitle","getFieldDefTitle","typedFieldDef","defaultZindex","normalizeAngleExpr","alwaysIncludeMiddle","isX","mainOrient","CalculateNode","forEachFieldDef","sortValue","sortArrayIndexField","getHeaderChannel","getHeaderProperty","headerSpecificConfig","getHeaderProperties","HEADER_CHANNELS","HEADER_TYPES","assembleTitleGroup","layoutHeaders","facetFieldDef","ta","headerChannel","role","defaultHeaderGuideBaseline","defaultHeaderGuideAlign","assembleHeaderProperties","assembleHeaderGroups","layoutHeader","groups","headerType","headerComponent","assembleHeaderGroup","getSort","assembleLabelTitle","titleTextExpr","isFacetWithoutRowCol","hasAxes","sizeSignal","LAYOUT_TITLE_BAND","getLayoutTitleBand","propertiesMap","assembleLayoutSignals","sizeSignals","layoutSize","stepSignal","sizeExpr","isWidth","endsWith","safeExpr","cardinality","getSizeTypeFromLayoutSizeType","layoutSizeType","guideEncodeEntry","valueDef","defaultScaleResolve","isConcatModel","parseGuideResolve","channelScaleResolve","LEGEND_COMPONENT_PROPERTIES","clipHeight","columnPadding","direction","fillColor","gradientLength","gradientOpacity","gradientStrokeColor","gradientStrokeWidth","gradientThickness","gridAlign","legendX","legendY","rowPadding","strokeColor","symbolDash","symbolDashOffset","symbolFillColor","symbolLimit","symbolOffset","symbolOpacity","symbolSize","symbolStrokeColor","symbolStrokeWidth","symbolType","LegendComponent","legendEncodeRules","symbolsSpec","legendCmpt","legendType","mixins","getMaxValue","symbolBaseFillColor","getFirstConditionValue","selectedCondition","gradient","gradientSpec","specifiedlabelsSpec","labelsSpec","entriesSpec","getConditionValue","conditionalDef","Math","reducer","hasConditionalValueDef","legendRules","legendConfig","gradientLengthSignal","defaultGradientLength","shapeChannelDef","markShape","defaultSymbolType","getLegendType","getDirection","defaultDirection","parseLegend","legendComponent","isUnitModel","parseLegendForChannel","parseUnitLegend","mergeLegendComponent","parseNonUnitLegend","isExplicit","getLegendDefWithScale","_model$fieldDef","legendSelections","parseInteractiveLegend","ruleParams","legendEncoding","_legend","legendEncode","legendEncodeParams","legendEncodingPart","_legend2","mergedLegend","childLegend","mergedOrient","childOrient","typeMerged","mergedValueWithExplicit","mergeSymbolType","_mergedLegend$implici","_mergedLegend$implici2","_mergedLegend$explici","_mergedLegend$explici2","st1","st2","assembleLegends","legendComponentIndex","legendByDomain","domainHash","mergedLegendComponent","l","_legend$encode3","setLegendEncode","assembleLegend","assembleProjections","projections","assembleProjectionForModel","assembleProjectionsForModelAndChildren","fits","sources","lookupDataSource","fit","PROJECTION_PROPERTIES","ProjectionComponent","specifiedProjection","parseProjection","hasProjection","posssiblePair","requestDataName","Main","gatherFitData","projComp","projectionName","parseUnitProjection","nonUnitProjection","mergable","first","second","allPropertiesShared","mergeIfNoConflict","modelProjection","isFit","renameProjection","parseNonUnitProjections","rangeFormula","formulaAs","binKey","getBinSignalName","createBinComponent","span","isBinTransform","normalizedBin","extentSignal","getSignalsFromModel","binComponent","BinNode","binComponentIndex","renameSignal","binAs","remainingAs","binTrans","addDimension","dims","posChannel","getPositionChannelFromLatLong","AggregateNode","dimensions","measures","meas","argField","scaleDomain","parentMeasures","childMeasures","ops","mergeMeasures","debug","addDimensions","alias","FacetNode","sortField","sortIndexField","childModel","_this$channel","depFields","getChildIndependentFieldsWithStep","childIndependentFieldsWithStep","childScaleComponent","getFieldFromDomain","assembleDomain","assembleRowColumnHeaderData","crossedDataName","childChannel","assembleFacetHeaderData","hasSharedAxis","headers","stop","facetData","unquote","getImplicitFromFilterTransform","getImplicitFromEncoding","mainFieldDef","dimensionChannelDef","ParseNode","_parse","ancestorParse","makeWithAncestors","parsedAs","assembleFormatParse","formatParse","assembleTransforms","onlyNested","IdentifierNode","GraticuleNode","SequenceNode","SourceNode","_data","defaultExtension","exec","_generator","hasName","isDataSourceNode","Optimizer","setModified","BottomUpOptimizer","getNodeDepths","depths","optimize","topologicalSort","modifiedFlag","TopDownOptimizer","MergeIdenticalNodes","mergeNodes","nodes","mergedNode","hashes","buckets","RemoveUnnecessaryIdentifierNodes","RemoveDuplicateTimeUnits","timeUnitFields","RemoveUnnecessaryOutputNodes","MoveParseUp","MergeParse","originalChildren","parseChildren","commonParse","conflictingParse","parseNode","mergedParseNode","childNode","RemoveUnusedSubtrees","MergeTimeUnits","timeUnitChildren","combination","MergeAggregates","aggChildren","groupedAggregates","agg","groupBys","groupBy","mergeableAggs","mergedAggs","MergeBins","moveBinsUp","promotableBins","remainingBins","promotedBin","remainingBin","MergeOutputs","otherChildren","mainOutput","lastOutput","theChild","JoinAggregateTransformNode","w","getDefaultName","joinAggregateFieldDef","StackNode","_stack","stackTransform","sortFields","sortOrder","normalizedAs","isValidAsArray","stackField","facetby","stackProperties","dimensionFieldDef","stackby","by","_field","getStackByFields","getGroupbyFields","WindowTransformNode","window","windowFieldDef","ignorePeers","moveFacetDown","facetMain","moveMainDownToFacet","cloner","newName","FACET_SCALE_PREFIX","outputNodes","checkLinks","runOptimizer","optimizer","modified","optimizationDataflowHelper","dataComponent","firstPass","roots","optimizers","SignalRefWrapper","exprGenerator","rename","parseScaleDomain","localScaleComponents","util","domains","parseDomainForChannel","parseSelectionDomain","isFaceted","facetParent","parseUnitScaleDomain","selectionExtent","childComponent","domainsTieBreaker","se","parseNonUnitScaleDomain","scaleConfig","reason","canUseUnaggregatedDomain","useUnaggregatedDomain","normalizeUnaggregatedDomain","specifiedScales","parseSingleChannelDomain","convertDomainIfItIsDateTime","normalizedTimeUnit","mapDomainToDataSignal","isDomainUnionWith","defaultDomain","unionWith","stackDimensions","normalizeSortField","fieldDefToSortBy","isStackedMeasure","domainSort","Raw","binSignal","getSignalName","mergeDomains","uniqueDomains","_s","domainWithoutSort","sorts","unionDomainSorts","UNIONDOMAIN_SORT_OP_INDEX","allData","isDataRefUnionedDomain","nonUnionDomain","isFieldRefUnionDomain","assembleScales","assembleScalesForModel","otherScaleProps","assembleScaleRange","domainRaw","parsedExtent","assembleSelectionScaleDomain","ScaleComponent","typeWithExplicit","RANGE_PROPERTIES","getBinStepSignal","binCount","updatedName","parseRangeForChannel","specifiedScale","supportedByScaleType","channelIncompatability","fromName","parseScheme","sizeRangeMin","xyStepSignals","maxBandSize","minXYStep","maxSize","pointStep","MAX_SIZE_RANGE_STEP_RATIO","sizeRangeMax","rMax","rMin","interpolateRange","defaultContinuousToDiscreteCount","PI","defaultRange","isExtendedScheme","widthStep","heightStep","parseScaleProperty","localScaleCmpt","mergedScaleCmpt","specifiedValue","scalePadding","scalePaddingInner","scaleRules","parseUnitScaleProperty","parseNonUnitScaleProperty","specifiedDomain","barConfig","continuousPadding","paddingValue","bandPaddingInner","paddingInnerValue","bandPaddingOuter","xReverse","last","parseScaleRange","rangeWithExplicit","parseUnitScaleRange","valueWithExplicit","defaultScaleType","_fieldDef$axis","CHANNEL","channelSupportScaleType","specifiedType","fieldDefType","parseScaleCore","scaleComponents","sType","parseUnitScaleCore","scaleTypeWithExplicitIndex","explicitScaleType","childScaleType","scaleTypeTieBreaker","childScale","renameScale","parseNonUnitScaleCore","NameMap","nameMap","oldName","Model","parentGivenName","scaleNameMap","projectionNameMap","signalNameMap","specType","compositionConfig","spacingConfig","extractCompositionLayout","outputNodeRefCounts","parseScale","parseLayoutSize","renameTopLevelLayoutSizeSignal","parseSelections","parseData","parseAxesAndHeaders","parseLegends","parseMarkGroup","ignoreRange","parseScales","assembleGroupStyle","_this$view","assembleEncodeFromView","baseView","assembleGroupEncodeEntry","isTopLevel","encodeEntry","assembleLayout","titleBand","headerComponentIndex","assembleLayoutTitleBand","assembleDefaultLayout","assembleHeaderMarks","headerMarks","assembleAxes","axisComponents","titleNoEncoding","assembleGroup","assembleSignals","assembleMarks","getDataName","fullName","oldSignalName","originalScaleName","localScaleComponent","variableName","origName","sel","hasAxisOrientSignalRef","hasOrientSignalRef","_this$component$axes$2","ModelWithField","r1","getMapping","acc","DensityTransformNode","specifiedAs","density","FilterInvalidNode","vegaFilters","FlattenTransformNode","flatten","FoldTransformNode","fold","GeoJSONNode","geojson","geoJsonCounter","coordinates","pair","GeoPointNode","ImputeNode","processSequence","keyvals","imputeTransform","imputedChannel","keyChannel","groupbyFields","LoessTransformNode","loess","LookupNode","secondary","fromOutputNode","isLookupData","fromSource","findSource","fromOutputName","Lookup","isLookupSelection","materialized","lookup","foreign","asName","default","QuantileTransformNode","RegressionTransformNode","regression","PivotTransformNode","pivot","SampleTransformNode","sample","makeWalkTree","datasetIndex","walkTree","dataSource","getHeaderType","parseFacetHeader","_fieldDef$header","makeHeaderComponent","mergeChildAxis","axisComponent","mainAxis","parseChildrenLayoutSize","parseNonUnitLayoutSizeForChannel","layoutSizeCmpt","mergedSize","childSize","scaleResolve","defaultUnitSize","facetSortFieldName","FacetModel","buildModel","initFacet","initFacetFieldDef","normalizedFacet","parseFacetHeaders","assembleSelectionTopLevelSignals","assembleSelectionData","getHeaderLayoutMixins","layoutMixins","layoutHeaderComponent","bandType","columnDistinctSignal","getCardinalityAggregateForChild","assembleFacet","facetRoot","outputName","cross","facetSortFields","facetSortOrder","ORTHOGONAL_ORIENT","_facet$channel","root","assembleFacetData","otherData","dataName","formatMesh","_data$format","mesh","otherFeature","_otherData$format","feature","formatFeature","_data$format2","otherMesh","_otherData$format2","head","existingSource","parseRoot","sequence","graticule","parentIsLayer","makeFromEncoding","lookupCounter","derivedType","transformNode","makeFromTransform","make","parseTransformArray","implicitSelection","getImplicitFromSelection","implicitEncoding","parseAll","parseAllForSortIndex","rawName","mainName","lookupName","materializeSelections","facetName","makeJoinAggregateFromFacet","ConcatModel","getChildren","widthType","heightType","parseConcatLayoutSize","parseAxisGroup","layoutSignals","db","AXIS_COMPONENT_PROPERTIES_INDEX","AXIS_COMPONENT_PROPERTIES","AxisComponent","OPPOSITE_ORIENT","mergeAxisComponents","mergedAxisCmpts","childAxisCmpts","mergeAxisComponent","propsToAlwaysIncludeConfig","parseAxis","_config","_config$axis","defaultOrient","_axis2","getLabelAngle","hasValue","hasConfigValue","axisEncoding","axisEncode","axisEncodingPart","specifiedLabelsSpec","initMarkdef","originalMarkDef","specifiedOrient","xIsContinuous","yIsContinuous","xIsTemporal","yIsTemporal","cornerRadiusEnd","newProps","BAR_CORNER_RADIUS_END_INDEX","newProp","fixedShape","shapeMixins","defaultSize","markPropOrConfig","markCompiler","vgMark","postEncodingTransform","shapeDef","vgThicknessChannel","parseMarkGroups","FACETED_PATH_PREFIX","getMarkGroup","fromPrefix","getPathGroups","hasCornerRadius","STACK_GROUP_PREFIX","fieldScale","stackFieldGroup","func","groupUpdate","innerGroupUpdate","groupByField","strokeForeground","getGroupsForStackedBarWithCornerRadius","scaleClip","projectionClip","unitCount","parentCount","interactiveFlag","UnitModel","parentGivenSize","filledConfig","defaultFilled","initLayoutSize","initScales","specifiedAxes","initAxes","specifiedLegends","initLegends","isGeoShapeMark","hasGeoPosition","initScale","scaleInternal","_axis","axisSpec","initAxis","axisInternal","supportLegend","specifiedSize","parseUnitLayoutSize","selDefs","selCmpts","selectionConfig","defaults","parseUnitSelection","hasSelections","isPoint","assembleTopLevelSignals","dataCopy","assembleUnitSelectionData","correctDataNames","vlEncoding","LayerModel","axisCount","oppositeOrient","parseLayerAxes","assembleLayerSelectionMarks","unitSize","isAnyConcatSpec","version","pkg","inputSpec","newLogger","vlFieldDef","firstPassCounter","secondPassCounter","optimizeDataflow","topLevelProperties","datasets","usermeta","vgConfig","sourceIndex","newData","whereTo","assembleRootData","otherTopLevelProps","$schema","assembleTopLevelModel","resize","autoSizeType","inverseSizeType","getFitType","getTopLevelProperties","normalized","dict","dictKeys","otherKeys"],"mappings":"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"} \ No newline at end of file diff --git a/src/citationnet/static/js/vega-lite@4.17.0.js b/src/citationnet/static/js/vega-lite@4.17.0.js deleted file mode 100644 index 68eecbf..0000000 --- a/src/citationnet/static/js/vega-lite@4.17.0.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="undefined"!=typeof globalThis?globalThis:e||self).vegaLite={})}(this,(function(e){"use strict";function t(e,t,n){return e.fields=t||[],e.fname=n,e}function n(e){return 1===e.length?i(e[0]):o(e)}const i=e=>function(t){return t[e]},o=e=>{const t=e.length;return function(n){for(let i=0;ii&&l(),c=i=o+1):"]"===a&&(c||r("Access path missing open bracket: "+e),c>0&&l(),c=0,i=o+1):o>i?l():i=o+1}return c&&r("Access path missing closing bracket: "+e),s&&r("Access path missing closing quote: "+e),o>i&&(o++,l()),t}!function(e,i,o){const r=a(e);e=1===r.length?r[0]:e,t((o&&o.get||n)(r),[e],i||e)}("id");const s=t((e=>e),[],"identity");t((()=>0),[],"zero"),t((()=>1),[],"one"),t((()=>!0),[],"true"),t((()=>!1),[],"false");function c(e,t,n){const i=[t].concat([].slice.call(n));console[e].apply(console,i)}var u=Array.isArray;function l(e){return e===Object(e)}const f=e=>"__proto__"!==e;function d(...e){return e.reduce(((e,t)=>{for(const n in t)if("signals"===n)e.signals=m(e.signals,t.signals);else{const i="legend"===n?{layout:1}:"style"===n||null;p(e,n,t[n],i)}return e}),{})}function p(e,t,n,i){if(!f(t))return;let o,r;if(l(n)&&!u(n))for(o in r=l(e[t])?e[t]:e[t]={},n)i&&(!0===i||i[o])?p(r,o,n[o]):f(o)&&(r[o]=n[o]);else e[t]=n}function m(e,t){if(null==e)return t;const n={},i=[];function o(e){n[e.name]||(n[e.name]=1,i.push(e))}return t.forEach(o),e.forEach(o),i}function h(e){return null!=e?u(e)?e:[e]:[]}const g=Object.prototype.hasOwnProperty;function v(e,t){return g.call(e,t)}function y(e){return"boolean"==typeof e}function b(e){return"number"==typeof e}function x(e){return"string"==typeof e}function w(e){return u(e)?"["+e.map(w)+"]":l(e)||x(e)?JSON.stringify(e).replace("\u2028","\\u2028").replace("\u2029","\\u2029"):e}function A(e){const t={},n=e.length;for(let i=0;iB(e,t)))}:k(e)?{or:e.or.map((e=>B(e,t)))}:t(e)}const _=function e(t,n){if(t===n)return!0;if(t&&n&&"object"==typeof t&&"object"==typeof n){if(t.constructor!==n.constructor)return!1;var i,o,r;if(Array.isArray(t)){if((i=t.length)!=n.length)return!1;for(o=i;0!=o--;)if(!e(t[o],n[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if((i=(r=Object.keys(t)).length)!==Object.keys(n).length)return!1;for(o=i;0!=o--;)if(!Object.prototype.hasOwnProperty.call(n,r[o]))return!1;for(o=i;0!=o--;){var a=r[o];if(!e(t[a],n[a]))return!1}return!0}return t!=t&&n!=n},z=D;function O(e,t){const n={};for(const i of t)v(e,i)&&(n[i]=e[i]);return n}function N(e,t){const n={...e};for(const e of t)delete n[e];return n}Set.prototype.toJSON=function(){return"Set(".concat([...this].map((e=>F(e))).join(","),")")};const P=F;function j(e){if(b(e))return e;const t=x(e)?e:F(e);if(t.length<250)return t;let n=0;for(let e=0;e-1}function L(e,t){let n=0;for(const[i,o]of e.entries())if(t(o,i,n++))return!0;return!1}function q(e,t){let n=0;for(const[i,o]of e.entries())if(!t(o,i,n++))return!1;return!0}function R(e,...t){for(const n of t)W(e,null!=n?n:{});return e}function W(e,t){for(const n of J(t))p(e,n,t[n],!0)}function U(e,t){const n=[],i={};let o;for(const r of e)o=t(r),o in i||(i[o]=1,n.push(r));return n}function I(e,t){if(e.size!==t.size)return!1;for(const n of e)if(!t.has(n))return!1;return!0}function H(e,t){for(const n of e)if(t.has(n))return!0;return!1}function G(e){const t=new Set;for(const n of e){const e=a(n).map(((e,t)=>0===t?e:"[".concat(e,"]"))),i=e.map(((t,n)=>e.slice(0,n+1).join("")));for(const e of i)t.add(e)}return t}function V(e,t){return void 0===e||void 0===t||H(G(e),G(t))}function Y(e){return 0===J(e).length}const J=Object.keys,X=Object.values,Q=Object.entries;function $(e){return!0===e||!1===e}function K(e){const t=e.replace(/\W/g,"_");return(e.match(/^\d+/)?"_":"")+t}function Z(e,t){return E(e)?"!("+Z(e.not,t)+")":C(e)?"("+e.and.map((e=>Z(e,t))).join(") && (")+")":k(e)?"("+e.or.map((e=>Z(e,t))).join(") || (")+")":t(e)}function ee(e,t){if(0===t.length)return!0;const n=t.shift();return n in e&&ee(e[n],t)&&delete e[n],Y(e)}function te(e){return e.charAt(0).toUpperCase()+e.substr(1)}function ne(e,t="datum"){const n=a(e),i=[];for(let e=1;e<=n.length;e++){const o="[".concat(n.slice(0,e).map(w).join("]["),"]");i.push("".concat(t).concat(o))}return i.join(" && ")}function ie(e,t="datum"){return"".concat(t,"[").concat(w(a(e).join(".")),"]")}function oe(e){return e.replace(/(\[|\]|\.|'|")/g,"\\$1")}function re(e){return"".concat(a(e).map(oe).join("\\."))}function ae(e,t,n){return e.replace(new RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"g"),n)}function se(e){return"".concat(a(e).join("."))}function ce(e){return e?a(e).length:0}function ue(...e){for(const t of e)if(void 0!==t)return t}let le=42;function fe(e){const t=++le;return e?String(e)+t:t}function de(e){return pe(e)?e:"__".concat(e)}function pe(e){return 0===e.indexOf("__")}function me(e){if(void 0!==e)return(e%360+360)%360}function he(e){return!!b(e)||!isNaN(e)&&!isNaN(parseFloat(e))}const ge={labelAlign:{part:"labels",vgProp:"align"},labelBaseline:{part:"labels",vgProp:"baseline"},labelColor:{part:"labels",vgProp:"fill"},labelFont:{part:"labels",vgProp:"font"},labelFontSize:{part:"labels",vgProp:"fontSize"},labelFontStyle:{part:"labels",vgProp:"fontStyle"},labelFontWeight:{part:"labels",vgProp:"fontWeight"},labelOpacity:{part:"labels",vgProp:"opacity"},labelOffset:null,labelPadding:null,gridColor:{part:"grid",vgProp:"stroke"},gridDash:{part:"grid",vgProp:"strokeDash"},gridDashOffset:{part:"grid",vgProp:"strokeDashOffset"},gridOpacity:{part:"grid",vgProp:"opacity"},gridWidth:{part:"grid",vgProp:"strokeWidth"},tickColor:{part:"ticks",vgProp:"stroke"},tickDash:{part:"ticks",vgProp:"strokeDash"},tickDashOffset:{part:"ticks",vgProp:"strokeDashOffset"},tickOpacity:{part:"ticks",vgProp:"opacity"},tickSize:null,tickWidth:{part:"ticks",vgProp:"strokeWidth"}};function ve(e){return e&&e.condition}const ye=["domain","grid","labels","ticks","title"],be={grid:"grid",gridCap:"grid",gridColor:"grid",gridDash:"grid",gridDashOffset:"grid",gridOpacity:"grid",gridScale:"grid",gridWidth:"grid",orient:"main",bandPosition:"both",aria:"main",description:"main",domain:"main",domainCap:"main",domainColor:"main",domainDash:"main",domainDashOffset:"main",domainOpacity:"main",domainWidth:"main",format:"main",formatType:"main",labelAlign:"main",labelAngle:"main",labelBaseline:"main",labelBound:"main",labelColor:"main",labelFlush:"main",labelFlushOffset:"main",labelFont:"main",labelFontSize:"main",labelFontStyle:"main",labelFontWeight:"main",labelLimit:"main",labelLineHeight:"main",labelOffset:"main",labelOpacity:"main",labelOverlap:"main",labelPadding:"main",labels:"main",labelSeparation:"main",maxExtent:"main",minExtent:"main",offset:"both",position:"main",tickCap:"main",tickColor:"main",tickDash:"main",tickDashOffset:"main",tickMinStep:"main",tickOffset:"both",tickOpacity:"main",tickRound:"both",ticks:"main",tickSize:"main",tickWidth:"both",title:"main",titleAlign:"main",titleAnchor:"main",titleAngle:"main",titleBaseline:"main",titleColor:"main",titleFont:"main",titleFontSize:"main",titleFontStyle:"main",titleFontWeight:"main",titleLimit:"main",titleLineHeight:"main",titleOpacity:"main",titlePadding:"main",titleX:"main",titleY:"main",encode:"both",scale:"both",tickBand:"both",tickCount:"both",tickExtra:"both",translate:"both",values:"both",zindex:"both"},xe={orient:1,aria:1,bandPosition:1,description:1,domain:1,domainCap:1,domainColor:1,domainDash:1,domainDashOffset:1,domainOpacity:1,domainWidth:1,format:1,formatType:1,grid:1,gridCap:1,gridColor:1,gridDash:1,gridDashOffset:1,gridOpacity:1,gridWidth:1,labelAlign:1,labelAngle:1,labelBaseline:1,labelBound:1,labelColor:1,labelFlush:1,labelFlushOffset:1,labelFont:1,labelFontSize:1,labelFontStyle:1,labelFontWeight:1,labelLimit:1,labelLineHeight:1,labelOffset:1,labelOpacity:1,labelOverlap:1,labelPadding:1,labels:1,labelSeparation:1,maxExtent:1,minExtent:1,offset:1,position:1,tickBand:1,tickCap:1,tickColor:1,tickCount:1,tickDash:1,tickDashOffset:1,tickExtra:1,tickMinStep:1,tickOffset:1,tickOpacity:1,tickRound:1,ticks:1,tickSize:1,tickWidth:1,title:1,titleAlign:1,titleAnchor:1,titleAngle:1,titleBaseline:1,titleColor:1,titleFont:1,titleFontSize:1,titleFontStyle:1,titleFontWeight:1,titleLimit:1,titleLineHeight:1,titleOpacity:1,titlePadding:1,titleX:1,titleY:1,translate:1,values:1,zindex:1},we={...xe,style:1,labelExpr:1,encoding:1};function Ae(e){return!!we[e]}const De=J({axis:1,axisBand:1,axisBottom:1,axisDiscrete:1,axisLeft:1,axisPoint:1,axisQuantitative:1,axisRight:1,axisTemporal:1,axisTop:1,axisX:1,axisXBand:1,axisXDiscrete:1,axisXPoint:1,axisXQuantitative:1,axisXTemporal:1,axisY:1,axisYBand:1,axisYDiscrete:1,axisYPoint:1,axisYQuantitative:1,axisYTemporal:1}),Fe={argmax:1,argmin:1,average:1,count:1,distinct:1,product:1,max:1,mean:1,median:1,min:1,missing:1,q1:1,q3:1,ci0:1,ci1:1,stderr:1,stdev:1,stdevp:1,sum:1,valid:1,values:1,variance:1,variancep:1},ke={count:1,min:1,max:1};function Ce(e){return!!e&&!!e.argmin}function Ee(e){return!!e&&!!e.argmax}function Se(e){return x(e)&&!!Fe[e]}const Be=["count","valid","missing","distinct"];function _e(e){return x(e)&&T(Be,e)}const ze=["count","sum","distinct","valid","missing"],Oe=A(["mean","average","median","q1","q3","min","max"]),Ne="row",Pe="column",je="facet",Me="x",Te="y",Le="x2",qe="y2",Re="radius",We="radius2",Ue="theta",Ie="theta2",He="latitude",Ge="longitude",Ve="latitude2",Ye="longitude2",Je="color",Xe="fill",Qe="stroke",$e="shape",Ke="size",Ze="angle",et="opacity",tt="fillOpacity",nt="strokeOpacity",it="strokeWidth",ot="strokeDash",rt="text",at="order",st="detail",ct="key",ut="tooltip",lt="href",ft="url",dt="description",pt={theta:1,theta2:1,radius:1,radius2:1};function mt(e){return e in pt}const ht={longitude:1,longitude2:1,latitude:1,latitude2:1};const gt=J(ht),vt={x:1,y:1,x2:1,y2:1,...pt,...ht,color:1,fill:1,stroke:1,opacity:1,fillOpacity:1,strokeOpacity:1,strokeWidth:1,strokeDash:1,size:1,angle:1,shape:1,order:1,text:1,detail:1,key:1,tooltip:1,href:1,url:1,description:1};function yt(e){return e===Je||e===Xe||e===Qe}const bt={row:1,column:1,facet:1},xt=J(bt),wt={...vt,...bt},At=J(wt),{order:Dt,detail:Ft,tooltip:kt,...Ct}=wt,{row:Et,column:St,facet:Bt,..._t}=Ct;function zt(e){return!!wt[e]}const Ot=[Le,qe,Ve,Ye,Ie,We];function Nt(e){return Pt(e)!==e}function Pt(e){switch(e){case Le:return Me;case qe:return Te;case Ve:return He;case Ye:return Ge;case Ie:return Ue;case We:return Re}return e}function jt(e){if(mt(e))switch(e){case Ue:return"startAngle";case Ie:return"endAngle";case Re:return"outerRadius";case We:return"innerRadius"}return e}function Mt(e){switch(e){case Me:return Le;case Te:return qe;case He:return Ve;case Ge:return Ye;case Ue:return Ie;case Re:return We}}function Tt(e){switch(e){case Me:case Le:return"width";case Te:case qe:return"height"}}const{x:Lt,y:qt,x2:Rt,y2:Wt,latitude:Ut,longitude:It,latitude2:Ht,longitude2:Gt,theta:Vt,theta2:Yt,radius:Jt,radius2:Xt,...Qt}=vt,$t=J(Qt),Kt={x:1,y:1},Zt=J(Kt);function en(e){return e in Kt}const tn={theta:1,radius:1},nn=J(tn);function on(e){return"width"===e?Me:Te}const{text:rn,tooltip:an,href:sn,url:cn,description:un,detail:ln,key:fn,order:dn,...pn}=Qt,mn=J(pn);const hn={...Kt,...tn,...pn},gn=J(hn);function vn(e){return!!hn[e]}function yn(e,t){return function(e){switch(e){case Je:case Xe:case Qe:case dt:case st:case ct:case ut:case lt:case at:case et:case tt:case nt:case it:case je:case Ne:case Pe:return bn;case Me:case Te:case He:case Ge:return wn;case Le:case qe:case Ve:case Ye:return{area:"always",bar:"always",image:"always",rect:"always",rule:"always",circle:"binned",point:"binned",square:"binned",tick:"binned",line:"binned",trail:"binned"};case Ke:return{point:"always",tick:"always",rule:"always",circle:"always",square:"always",bar:"always",text:"always",line:"always",trail:"always"};case ot:return{line:"always",point:"always",tick:"always",rule:"always",circle:"always",square:"always",bar:"always",geoshape:"always"};case $e:return{point:"always",geoshape:"always"};case rt:return{text:"always"};case Ze:return{point:"always",square:"always",text:"always"};case ft:return{image:"always"};case Ue:case Re:return{text:"always",arc:"always"};case Ie:case We:return{arc:"always"}}}(e)[t]}const bn={arc:"always",area:"always",bar:"always",circle:"always",geoshape:"always",image:"always",line:"always",rule:"always",point:"always",rect:"always",square:"always",trail:"always",text:"always",tick:"always"},{geoshape:xn,...wn}=bn;function An(e){switch(e){case Me:case Te:case Ue:case Re:case Ke:case Ze:case it:case et:case tt:case nt:case Le:case qe:case Ie:case We:return;case je:case Ne:case Pe:case $e:case ot:case rt:case ut:case lt:case ft:case dt:return"discrete";case Je:case Xe:case Qe:return"flexible";case He:case Ge:case Ve:case Ye:case st:case ct:case at:return}}function Dn(e){return y(e)&&(e=pa(e,void 0)),"bin"+J(e).map((t=>En(e[t])?K("_".concat(t,"_").concat(Q(e[t]))):K("_".concat(t,"_").concat(e[t])))).join("")}function Fn(e){return!0===e||Cn(e)&&!e.binned}function kn(e){return"binned"===e||Cn(e)&&!0===e.binned}function Cn(e){return l(e)}function En(e){return null==e?void 0:e.selection}function Sn(e){switch(e){case Ne:case Pe:case Ke:case Je:case Xe:case Qe:case it:case et:case tt:case nt:case $e:return 6;case ot:return 4;default:return 10}}function Bn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _n(e,t,n){var i=t.get(e);if(!i)throw new TypeError("attempted to set private field on non-instance");if(i.set)i.set.call(e,n);else{if(!i.writable)throw new TypeError("attempted to set read only private field");i.value=n}return n}function zn(e){return"Invalid specification ".concat(JSON.stringify(e),'. Make sure the specification includes at least one of the following properties: "mark", "layer", "facet", "hconcat", "vconcat", "concat", or "repeat".')}const On='Autosize "fit" only works for single views and layered views.';function Nn(e){return"".concat("width"==e?"Width":"Height",' "container" only works for single views and layered views.')}function Pn(e){const t="width"==e?"x":"y";return"".concat("width"==e?"Width":"Height",' "container" only works well with autosize "fit" or "fit-').concat(t,'".')}function jn(e){return e?'Dropping "fit-'.concat(e,'" because spec has discrete ').concat(Tt(e),"."):'Dropping "fit" because spec has discrete size.'}function Mn(e){return"Unknown field for ".concat(e,". Cannot calculate view size.")}function Tn(e){return'Cannot project a selection on encoding channel "'.concat(e,'", which has no field.')}function Ln(e,t){return'Cannot project a selection on encoding channel "'.concat(e,'" as it uses an aggregate function ("').concat(t,'").')}function qn(e){return"Selection not supported for ".concat(e," yet.")}const Rn="The same selection must be used to override scale domains in a layered view.";function Wn(e){return'The "columns" property cannot be used when "'.concat(e,'" has nested row/column.')}function Un(e,t,n){return'An ancestor parsed field "'.concat(e,'" as ').concat(n," but a child wants to parse the field as ").concat(t,".")}function In(e){return"Config.customFormatTypes is not true, thus custom format type and format for channel ".concat(e," are dropped.")}function Hn(e){return'Invalid field type "'.concat(e,'".')}function Gn(e,t){const{fill:n,stroke:i}=t;return"Dropping color ".concat(e," as the plot also has ").concat(n&&i?"fill and stroke":n?"fill":"stroke",".")}function Vn(e,t){return"Dropping ".concat(P(e),' from channel "').concat(t,'" since it does not contain any data field, datum, value, or signal.')}function Yn(e,t,n){return"".concat(e,' dropped as it is incompatible with "').concat(t,'"').concat(n?" when ".concat(n):"",".")}function Jn(e){return"".concat(e," encoding should be discrete (ordinal / nominal / binned).")}function Xn(e,t){return'Using discrete channel "'.concat(e,'" to encode "').concat(t,'" field can be misleading as it does not encode ').concat("ordinal"===t?"order":"magnitude",".")}function Qn(e){return"Using unaggregated domain with raw field has no effect (".concat(P(e),").")}function $n(e){return'Unaggregated domain not applicable for "'.concat(e,'" since it produces values outside the origin domain of the source data.')}function Kn(e){return"Unaggregated domain is currently unsupported for log scale (".concat(P(e),").")}function Zn(e,t,n){return"".concat(n,"-scale's \"").concat(t,'" is dropped as it does not work with ').concat(e," scale.")}function ei(e){return'The step for "'.concat(e,'" is dropped because the ').concat("width"===e?"x":"y"," is continuous.")}const ti="Domains that should be unioned has conflicting sort properties. Sort will be set to true.";function ni(e,t){return"Invalid ".concat(e,": ").concat(P(t),".")}function ii(e){return"1D error band does not support ".concat(e,".")}function oi(e){return"Channel ".concat(e,' is required for "binned" bin.')}const ri=function(e,t){let n=e||0;return{level(e){return arguments.length?(n=+e,this):n},error(){return n>=1&&c(t||"error","ERROR",arguments),this},warn(){return n>=2&&c(t||"warn","WARN",arguments),this},info(){return n>=3&&c(t||"log","INFO",arguments),this},debug(){return n>=4&&c(t||"log","DEBUG",arguments),this}}}(2);let ai=ri;function si(...e){ai.warn(...e)}function ci(e){if(e&&l(e))for(const t of gi)if(t in e)return!0;return!1}const ui=["january","february","march","april","may","june","july","august","september","october","november","december"],li=ui.map((e=>e.substr(0,3))),fi=["sunday","monday","tuesday","wednesday","thursday","friday","saturday"],di=fi.map((e=>e.substr(0,3)));function pi(e,t){const n=[];if(t&&void 0!==e.day&&J(e).length>1&&(si(function(e){return"Dropping day from datetime ".concat(P(e)," as day cannot be combined with other units.")}(e)),delete(e=z(e)).day),void 0!==e.year?n.push(e.year):n.push(2012),void 0!==e.month){const i=t?function(e){if(he(e)&&(e=+e),b(e))return e-1;{const t=e.toLowerCase(),n=ui.indexOf(t);if(-1!==n)return n;const i=t.substr(0,3),o=li.indexOf(i);if(-1!==o)return o;throw new Error(ni("month",e))}}(e.month):e.month;n.push(i)}else if(void 0!==e.quarter){const i=t?function(e){if(he(e)&&(e=+e),b(e))return e>4&&si(ni("quarter",e)),e-1;throw new Error(ni("quarter",e))}(e.quarter):e.quarter;n.push(b(i)?3*i:i+"*3")}else n.push(0);if(void 0!==e.date)n.push(e.date);else if(void 0!==e.day){const i=t?function(e){if(he(e)&&(e=+e),b(e))return e%7;{const t=e.toLowerCase(),n=fi.indexOf(t);if(-1!==n)return n;const i=t.substr(0,3),o=di.indexOf(i);if(-1!==o)return o;throw new Error(ni("day",e))}}(e.day):e.day;n.push(b(i)?i+1:i+"+1")}else n.push(1);for(const t of["hours","minutes","seconds","milliseconds"]){const i=e[t];n.push(void 0===i?0:i)}return n}function mi(e){const t=pi(e,!0).join(", ");return e.utc?"utc(".concat(t,")"):"datetime(".concat(t,")")}const hi={year:1,quarter:1,month:1,week:1,day:1,dayofyear:1,date:1,hours:1,minutes:1,seconds:1,milliseconds:1},gi=J(hi);function vi(e){return e.startsWith("utc")}const yi={"year-month":"%b %Y ","year-month-date":"%b %d, %Y "};function bi(e){const t=[];for(const n of gi)xi(e,n)&&t.push(n);return t}function xi(e,t){const n=e.indexOf(t);return!(n<0)&&(!(n>0&&"seconds"===t&&"i"===e.charAt(n-1))&&(!(e.length>n+3&&"day"===t&&"o"===e.charAt(n+3))&&!(n>0&&"year"===t&&"f"===e.charAt(n-1))))}function wi(e,t,{end:n}={end:!1}){const i=ne(t),o=vi(e)?"utc":"";let r;const a={};for(const t of gi)xi(e,t)&&(a[t]="quarter"===(s=t)?"(".concat(o,"quarter(").concat(i,")-1)"):"".concat(o).concat(s,"(").concat(i,")"),r=t);var s;return n&&(a[r]+="+1"),function(e){const t=pi(e,!1).join(", ");return e.utc?"utc(".concat(t,")"):"datetime(".concat(t,")")}(a)}function Ai(e){if(!e)return;const t=bi(e);return"timeUnitSpecifier(".concat(F(t),", ").concat(F(yi),")")}function Di(e){if(!e)return;let t;return x(e)?t={unit:e}:l(e)&&(t={...e,...e.unit?{unit:e.unit}:{}}),vi(t.unit)&&(t.utc=!0,t.unit=t.unit.substr(3)),t}function Fi(e){return e&&!!e.signal}function ki(e){return!!e.step}function Ci(e){return!u(e)&&("field"in e&&"data"in e)}const Ei=J({aria:1,description:1,ariaRole:1,ariaRoleDescription:1,blend:1,opacity:1,fill:1,fillOpacity:1,stroke:1,strokeCap:1,strokeWidth:1,strokeOpacity:1,strokeDash:1,strokeDashOffset:1,strokeJoin:1,strokeOffset:1,strokeMiterLimit:1,startAngle:1,endAngle:1,padAngle:1,innerRadius:1,outerRadius:1,size:1,shape:1,interpolate:1,tension:1,orient:1,align:1,baseline:1,text:1,dir:1,dx:1,dy:1,ellipsis:1,limit:1,radius:1,theta:1,angle:1,font:1,fontSize:1,fontWeight:1,fontStyle:1,lineBreak:1,lineHeight:1,cursor:1,href:1,tooltip:1,cornerRadius:1,cornerRadiusTopLeft:1,cornerRadiusTopRight:1,cornerRadiusBottomLeft:1,cornerRadiusBottomRight:1,aspect:1,width:1,height:1,url:1,smooth:1}),Si={arc:1,area:1,group:1,image:1,line:1,path:1,rect:1,rule:1,shape:1,symbol:1,text:1,trail:1},Bi=["cornerRadius","cornerRadiusTopLeft","cornerRadiusTopRight","cornerRadiusBottomLeft","cornerRadiusBottomRight"];function _i(e){return e&&!!e.field&&void 0!==e.equal}function zi(e){return e&&!!e.field&&void 0!==e.lt}function Oi(e){return e&&!!e.field&&void 0!==e.lte}function Ni(e){return e&&!!e.field&&void 0!==e.gt}function Pi(e){return e&&!!e.field&&void 0!==e.gte}function ji(e){if(e&&e.field){if(u(e.range)&&2===e.range.length)return!0;if(Fi(e.range))return!0}return!1}function Mi(e){return e&&!!e.field&&(u(e.oneOf)||u(e.in))}function Ti(e){return Mi(e)||_i(e)||ji(e)||zi(e)||Ni(e)||Oi(e)||Pi(e)}function Li(e,t){return ga(e,{timeUnit:t,wrapTime:!0})}function qi(e,t=!0){var n;const{field:i}=e,o=null===(n=Di(e.timeUnit))||void 0===n?void 0:n.unit,r=o?"time("+wi(o,i)+")":Kr(e,{expr:"datum"});if(_i(e))return r+"==="+Li(e.equal,o);if(zi(e)){const t=e.lt;return"".concat(r,"<").concat(Li(t,o))}if(Ni(e)){const t=e.gt;return"".concat(r,">").concat(Li(t,o))}if(Oi(e)){const t=e.lte;return"".concat(r,"<=").concat(Li(t,o))}if(Pi(e)){const t=e.gte;return"".concat(r,">=").concat(Li(t,o))}if(Mi(e))return"indexof([".concat(function(e,t){return e.map((e=>Li(e,t)))}(e.oneOf,o).join(","),"], ").concat(r,") !== -1");if(function(e){return e&&!!e.field&&void 0!==e.valid}(e))return Ri(r,e.valid);if(ji(e)){const{range:n}=e,i=Fi(n)?{signal:"".concat(n.signal,"[0]")}:n[0],a=Fi(n)?{signal:"".concat(n.signal,"[1]")}:n[1];if(null!==i&&null!==a&&t)return"inrange("+r+", ["+Li(i,o)+", "+Li(a,o)+"])";const s=[];return null!==i&&s.push("".concat(r," >= ").concat(Li(i,o))),null!==a&&s.push("".concat(r," <= ").concat(Li(a,o))),s.length>0?s.join(" && "):"true"}throw new Error("Invalid field predicate: ".concat(JSON.stringify(e)))}function Ri(e,t=!0){return t?"isValid(".concat(e,") && isFinite(+").concat(e,")"):"!isValid(".concat(e,") || !isFinite(+").concat(e,")")}function Wi(e){var t;return Ti(e)&&e.timeUnit?{...e,timeUnit:null===(t=Di(e.timeUnit))||void 0===t?void 0:t.unit}:e}const Ui="quantitative",Ii="ordinal",Hi="temporal",Gi="nominal",Vi="geojson";const Yi="linear",Ji="log",Xi="pow",Qi="sqrt",$i="symlog",Ki="time",Zi="utc",eo="quantile",to="quantize",no="threshold",io="point",oo="band",ro={linear:"numeric",log:"numeric",pow:"numeric",sqrt:"numeric",symlog:"numeric",identity:"numeric",sequential:"numeric",time:"time",utc:"time",ordinal:"ordinal","bin-ordinal":"bin-ordinal",point:"ordinal-position",band:"ordinal-position",quantile:"discretizing",quantize:"discretizing",threshold:"discretizing"};function ao(e,t){const n=ro[e],i=ro[t];return n===i||"ordinal-position"===n&&"time"===i||"ordinal-position"===i&&"time"===n}const so={linear:0,log:1,pow:1,sqrt:1,symlog:1,identity:1,sequential:1,time:0,utc:0,point:10,band:11,ordinal:0,"bin-ordinal":0,quantile:0,quantize:0,threshold:0};function co(e){return so[e]}const uo=["linear","log","pow","sqrt","symlog","time","utc"],lo=A(uo),fo=A(["linear","log","pow","sqrt","symlog"]);const po=A(["quantile","quantize","threshold"]),mo=A(uo.concat(["quantile","quantize","threshold","sequential","identity"])),ho=A(["ordinal","bin-ordinal","point","band"]);function go(e){return e in ho}function vo(e){return e in mo}function yo(e){return e in lo}function bo(e){return e in po}function xo(e){return null==e?void 0:e.selection}const{type:wo,domain:Ao,range:Do,rangeMax:Fo,rangeMin:ko,scheme:Co,...Eo}={type:1,domain:1,domainMax:1,domainMin:1,domainMid:1,align:1,range:1,rangeMax:1,rangeMin:1,scheme:1,bins:1,reverse:1,round:1,clamp:1,nice:1,base:1,exponent:1,constant:1,interpolate:1,zero:1,padding:1,paddingInner:1,paddingOuter:1},So=J(Eo);function Bo(e,t){switch(t){case"type":case"domain":case"reverse":case"range":return!0;case"scheme":case"interpolate":return!T(["point","band","identity"],e);case"bins":return!T(["point","band","identity","ordinal"],e);case"round":return yo(e)||"band"===e||"point"===e;case"padding":case"rangeMin":case"rangeMax":return yo(e)||T(["point","band"],e);case"paddingOuter":case"align":return T(["point","band"],e);case"paddingInner":return"band"===e;case"domainMax":case"domainMid":case"domainMin":case"clamp":return yo(e);case"nice":return yo(e)||"quantize"===e||"threshold"===e;case"exponent":return"pow"===e;case"base":return"log"===e;case"constant":return"symlog"===e;case"zero":return vo(e)&&!T(["log","time","utc","threshold","quantile"],e)}}function _o(e,t){switch(t){case"interpolate":case"scheme":case"domainMid":return yt(e)?void 0:'Cannot use the scale property "'.concat(e,'" with non-color channel.');case"align":case"type":case"bins":case"domain":case"domainMax":case"domainMin":case"range":case"base":case"exponent":case"constant":case"nice":case"padding":case"paddingInner":case"paddingOuter":case"rangeMax":case"rangeMin":case"reverse":case"round":case"clamp":case"zero":return}}function zo(e){return e&&!!e.expr}function Oo(e){const t=J(e||{}),n={};for(const i of t)n[i]=Aa(e[i]);return n}const No={arc:"arc",area:"area",bar:"bar",image:"image",line:"line",point:"point",rect:"rect",rule:"rule",text:"text",tick:"tick",trail:"trail",circle:"circle",square:"square",geoshape:"geoshape"},Po=No.arc,jo=No.area,Mo=No.bar,To=No.image,Lo=No.line,qo=No.point,Ro=No.rect,Wo=No.rule,Uo=No.text,Io=No.tick,Ho=No.trail,Go=No.circle,Vo=No.square,Yo=No.geoshape;function Jo(e){return T(["line","area","trail"],e)}function Xo(e){return T(["rect","bar","image","arc"],e)}const Qo=J(No);function $o(e){return e.type}A(Qo);const Ko=["stroke","strokeWidth","strokeDash","strokeDashOffset","strokeOpacity","strokeJoin","strokeMiterLimit","fill","fillOpacity"],Zo=J({color:1,filled:1,invalid:1,order:1,radius2:1,theta2:1,timeUnitBand:1,timeUnitBandPosition:1}),er=J({mark:1,arc:1,area:1,bar:1,circle:1,image:1,line:1,point:1,rect:1,rule:1,square:1,text:1,tick:1,trail:1,geoshape:1}),tr={horizontal:["cornerRadiusTopRight","cornerRadiusBottomRight"],vertical:["cornerRadiusTopLeft","cornerRadiusTopRight"]},nr={binSpacing:1,continuousBandSize:5,timeUnitBandPosition:.5},ir={binSpacing:0,continuousBandSize:5,timeUnitBandPosition:.5};function or(e){const{channel:t,channelDef:n,markDef:i,scale:o,config:r}=e,a=lr(e);return qr(n)&&!_e(n.aggregate)&&o&&yo(o.get("type"))&&!1===o.get("zero")?rr({fieldDef:n,channel:t,markDef:i,ref:a,config:r}):a}function rr({fieldDef:e,channel:t,markDef:n,ref:i,config:o}){if(Jo(n.type))return i;return null===Ba("invalid",n,o)?i:[ar(e,t),i]}function ar(e,t){return{test:sr(e,!0),..."y"===Pt(t)?{field:{group:"height"}}:{value:0}}}function sr(e,t=!0){return Ri(x(e)?e:Kr(e,{expr:"datum"}),!t)}function cr(e,t,n,i){const o={};if(t&&(o.scale=t),Wr(e)){const{datum:t}=e;ci(t)?o.signal=mi(t):Fi(t)?o.signal=t.signal:zo(t)?o.signal=t.expr:o.value=t}else o.field=Kr(e,n);if(i){const{offset:e,band:t}=i;e&&(o.offset=e),t&&(o.band=t)}return o}function ur({scaleName:e,fieldOrDatumDef:t,fieldOrDatumDef2:n,offset:i,startSuffix:o,band:r=.5}){const a=0K("".concat("unit"===e?"":"_".concat(e,"_")).concat(n[e])))).join(""):(t?"utc":"")+"timeunit"+J(n).map((e=>K("_".concat(e,"_").concat(n[e])))).join("")}(f),o=(!T(["range","mid"],t.binSuffix)&&t.binSuffix||"")+(null!==(c=t.suffix)&&void 0!==c?c:"")}}i&&(n=n?"".concat(i,"_").concat(n):i)}return o&&(n="".concat(n,"_").concat(o)),i&&(n="".concat(i,"_").concat(n)),t.forAs?se(n):t.expr?ie(n,t.expr)+r:re(n)+r}function Zr(e){switch(e.type){case"nominal":case"ordinal":case"geojson":return!0;case"quantitative":return qr(e)&&!!e.bin;case"temporal":return!1}throw new Error(Hn(e.type))}function ea(e){return!Zr(e)}const ta=(e,t)=>{switch(t.fieldTitle){case"plain":return e.field;case"functional":return function(e){const{aggregate:t,bin:n,timeUnit:i,field:o}=e;if(Ee(t))return"".concat(o," for argmax(").concat(t.argmax,")");if(Ce(t))return"".concat(o," for argmin(").concat(t.argmin,")");const r=Di(i),a=t||(null==r?void 0:r.unit)||(null==r?void 0:r.maxbins)&&"timeunit"||Fn(n)&&"bin";return a?a.toUpperCase()+"("+o+")":o}(e);default:return function(e,t){const{field:n,bin:i,timeUnit:o,aggregate:r}=e;if("count"===r)return t.countTitle;if(Fn(i))return"".concat(n," (binned)");if(o){var a;const e=null===(a=Di(o))||void 0===a?void 0:a.unit;if(e)return"".concat(n," (").concat(bi(e).join("-"),")")}else if(r)return Ee(r)?"".concat(n," for max ").concat(r.argmax):Ce(r)?"".concat(n," for min ").concat(r.argmin):"".concat(te(r)," of ").concat(n);return n}(e,t)}};let na=ta;function ia(e){na=e}function oa(e,t,{allowDisabling:n,includeDefault:i=!0}){var o;const r=null===(o=ra(e))||void 0===o?void 0:o.title;if(!qr(e))return r;const a=e,s=i?aa(a,t):void 0;return n?ue(r,a.title,s):null!==(c=null!=r?r:a.title)&&void 0!==c?c:s;var c}function ra(e){return Jr(e)&&e.axis?e.axis:Xr(e)&&e.legend?e.legend:_r(e)&&e.header?e.header:void 0}function aa(e,t){return na(e,t)}function sa(e){if(Qr(e)){const{format:t,formatType:n}=e;return{format:t,formatType:n}}{var t;const n=null!==(t=ra(e))&&void 0!==t?t:{},{format:i,formatType:o}=n;return{format:i,formatType:o}}}function ca(e){return qr(e)?e:Tr(e)?e.condition:void 0}function ua(e){return Hr(e)?e:Lr(e)?e.condition:void 0}function la(e,t,n,i={}){if(x(e)||b(e)||y(e)){return si(function(e,t,n){return"Channel ".concat(e," is a ").concat(t,". Converted to {value: ").concat(P(n),"}.")}(t,x(e)?"string":b(e)?"number":"boolean",e)),{value:e}}return Hr(e)?fa(e,t,n,i):Lr(e)?{...e,condition:fa(e.condition,t,n,i)}:e}function fa(e,t,n,i){if(Qr(e)){const{format:o,formatType:r,...a}=e;if(dr(r)&&!n.customFormatTypes)return si(In(t)),fa(a,t,n,i)}else{const o=Jr(e)?"axis":Xr(e)?"legend":_r(e)?"header":null;if(o&&e[o]){const{format:r,formatType:a,...s}=e[o];if(dr(a)&&!n.customFormatTypes)return si(In(t)),fa({...e,[o]:s},t,n,i)}}return qr(e)?da(e,t,i):function(e){let t=e.type;if(t)return e;const{datum:n}=e;return t=b(n)?"quantitative":x(n)?"nominal":ci(n)?"temporal":void 0,{...e,type:t}}(e)}function da(e,t,{compositeMark:n=!1}={}){const{aggregate:i,timeUnit:o,bin:r,field:a}=e,s={...e};if(n||!i||Se(i)||Ee(i)||Ce(i)||(si(function(e){return'Invalid aggregation operator "'.concat(e,'".')}(i)),delete s.aggregate),o&&(s.timeUnit=Di(o)),a&&(s.field="".concat(a)),Fn(r)&&(s.bin=pa(r,t)),kn(r)&&!en(t)&&si(function(e){return"Channel ".concat(e,' should not be used with "binned" bin.')}(t)),Gr(s)){const{type:e}=s,t=function(e){if(e)switch(e=e.toLowerCase()){case"q":case Ui:return"quantitative";case"t":case Hi:return"temporal";case"o":case Ii:return"ordinal";case"n":case Gi:return"nominal";case Vi:return"geojson"}}(e);e!==t&&(s.type=t),"quantitative"!==e&&_e(i)&&(si(function(e,t){return'Invalid field type "'.concat(e,'" for aggregate: "').concat(t,'", using "quantitative" instead.')}(e,i)),s.type="quantitative")}else if(!Nt(t)){const e=function(e,t){var n;switch(t){case"latitude":case"longitude":return"quantitative";case"row":case"column":case"facet":case"shape":case"strokeDash":return"nominal";case"order":return"ordinal"}if(Nr(e)&&u(e.sort))return"ordinal";const{aggregate:i,bin:o,timeUnit:r}=e;if(r)return"temporal";if(o||i&&!Ee(i)&&!Ce(i))return"quantitative";if(Yr(e)&&(null===(n=e.scale)||void 0===n?void 0:n.type))switch(ro[e.scale.type]){case"numeric":case"discretizing":return"quantitative";case"time":return"temporal"}return"nominal"}(s,t);s.type=e}if(Gr(s)){const{compatible:e,warning:n}=function(e,t){const n=e.type;if("geojson"===n&&"shape"!==t)return{compatible:!1,warning:"Channel ".concat(t," should not be used with a geojson data.")};switch(t){case Ne:case Pe:case je:return ea(e)?{compatible:!1,warning:Jn(t)}:ma;case Me:case Te:case Je:case Xe:case Qe:case rt:case st:case ct:case ut:case lt:case ft:case Ze:case Ue:case Re:case dt:return ma;case Ge:case Ye:case He:case Ve:return n!==Ui?{compatible:!1,warning:"Channel ".concat(t," should be used with a quantitative field only, not ").concat(e.type," field.")}:ma;case et:case tt:case nt:case it:case Ke:case Ie:case We:case Le:case qe:return"nominal"!==n||e.sort?ma:{compatible:!1,warning:"Channel ".concat(t," should not be used with an unsorted discrete field.")};case ot:return T(["ordinal","nominal"],e.type)?ma:{compatible:!1,warning:"StrokeDash channel should be used with only discrete data."};case $e:return T(["ordinal","nominal","geojson"],e.type)?ma:{compatible:!1,warning:"Shape channel should be used with only either discrete or geojson data."};case at:return"nominal"!==e.type||"sort"in e?ma:{compatible:!1,warning:"Channel order is inappropriate for nominal field, which has no inherent order."}}}(s,t)||{};!1===e&&si(n)}if(Nr(s)&&x(s.sort)){const{sort:e}=s;if(kr(e))return{...s,sort:{encoding:e}};const t=e.substr(1);if("-"===e.charAt(0)&&kr(t))return{...s,sort:{encoding:t,order:"descending"}}}if(_r(s)){const{header:e}=s,{orient:t,...n}=e;if(t)return{...s,header:{...n,labelOrient:e.labelOrient||t,titleOrient:e.titleOrient||t}}}return s}function pa(e,t){return y(e)?{maxbins:Sn(t)}:"binned"===e?{binned:!0}:e.maxbins||e.step?e:{...e,maxbins:Sn(t)}}const ma={compatible:!0};function ha(e){const{formatType:t}=sa(e);return"time"===t||!t&&((n=e)&&("temporal"===n.type||qr(n)&&!!n.timeUnit));var n}function ga(e,{timeUnit:t,type:n,wrapTime:i,undefinedIfExprNotRequired:o}){var r;const a=t&&(null===(r=Di(t))||void 0===r?void 0:r.unit);let s,c=a||"temporal"===n;return zo(e)?s=e.expr:Fi(e)?s=e.signal:ci(e)?(c=!0,s=mi(e)):(x(e)||b(e))&&c&&(s="datetime(".concat(JSON.stringify(e),")"),function(e){return!!hi[e]}(a)&&(b(e)&&e<1e4||x(e)&&isNaN(Date.parse(e)))&&(s=mi({[a]:e}))),s?i&&c?"time(".concat(s,")"):s:o?void 0:JSON.stringify(e)}function va(e,t){const{type:n}=e;return t.map((t=>{const i=ga(t,{timeUnit:qr(e)?e.timeUnit:void 0,type:n,undefinedIfExprNotRequired:!0});return void 0!==i?{signal:i}:t}))}function ya(e,t){return Fn(e.bin)?vn(t)&&T(["ordinal","nominal"],e.type):(console.warn("Only call this method for binned field defs."),!1)}function ba(e){const{anchor:t,frame:n,offset:i,orient:o,color:r,subtitleColor:a,subtitleFont:s,subtitleFontSize:c,subtitleFontStyle:u,subtitleFontWeight:l,subtitleLineHeight:f,subtitlePadding:d,...p}=e,m={...p,...r?{fill:r}:{}},h={...t?{anchor:t}:{},...n?{frame:n}:{},...i?{offset:i}:{},...o?{orient:o}:{}},g={...a?{subtitleColor:a}:{},...s?{subtitleFont:s}:{},...c?{subtitleFontSize:c}:{},...u?{subtitleFontStyle:u}:{},...l?{subtitleFontWeight:l}:{},...f?{subtitleLineHeight:f}:{},...d?{subtitlePadding:d}:{}};return{titleMarkConfig:m,subtitleMarkConfig:O(m,["align","baseline","dx","dy","limit"]),nonMark:h,subtitle:g}}function xa(e){return x(e)||u(e)&&x(e[0])}function wa(e){const t=u(e.condition)?e.condition.map(Da):Da(e.condition);return{...Aa(e),condition:t}}function Aa(e){if(zo(e)){const{expr:t,...n}=e;return{signal:t,...n}}return e}function Da(e){if(zo(e)){const{expr:t,...n}=e;return{signal:t,...n}}return e}function Fa(e){if(zo(e)){const{expr:t,...n}=e;return{signal:t,...n}}return Fi(e)?e:void 0!==e?{value:e}:void 0}function ka(e){return Fi(e)?e.signal:w(e.value)}function Ca(e){return Fi(e)?e.signal:null==e?null:w(e)}function Ea(e,t,n){for(const i of n){const n=_a(i,t.markDef,t.config);void 0!==n&&(e[i]=Fa(n))}return e}function Sa(e){var t;return[].concat(e.type,null!==(t=e.style)&&void 0!==t?t:[])}function Ba(e,t,n,i={}){const{vgChannel:o,ignoreVgConfig:r}=i;return o&&void 0!==t[o]?t[o]:void 0!==t[e]?t[e]:!r||o&&o!==e?_a(e,t,n,i):void 0}function _a(e,t,n,{vgChannel:i}={}){return ue(i?za(e,t,n.style):void 0,za(e,t,n.style),i?n[t.type][i]:void 0,n[t.type][e],i?n.mark[i]:n.mark[e])}function za(e,t,n){return Oa(e,Sa(t),n)}function Oa(e,t,n){let i;t=h(t);for(const o of t){const t=n[o];t&&void 0!==t[e]&&(i=t[e])}return i}function Na(e,t){return h(e).reduce(((e,n)=>{var i;return e.field.push(Kr(n,t)),e.order.push(null!==(i=n.sort)&&void 0!==i?i:"ascending"),e}),{field:[],order:[]})}function Pa(e,t){const n=[...e];return t.forEach((e=>{for(const t of n)if(_(t,e))return;n.push(e)})),n}function ja(e,t){return _(e,t)||!t?e:e?[...h(e),...h(t)].join(", "):t}function Ma(e,t){const n=e.value,i=t.value;if(null==n||null===i)return{explicit:e.explicit,value:null};if((xa(n)||Fi(n))&&(xa(i)||Fi(i)))return{explicit:e.explicit,value:ja(n,i)};if(xa(n)||Fi(n))return{explicit:e.explicit,value:n};if(xa(i)||Fi(i))return{explicit:e.explicit,value:i};if(!(xa(n)||Fi(n)||xa(i)||Fi(i)))return{explicit:e.explicit,value:Pa(n,i)};throw new Error("It should never reach here")}function Ta(e){return"mark"in e}class La{constructor(e,t){this.name=e,this.run=t}hasMatchingType(e){return!!Ta(e)&&($o(t=e.mark)?t.type:t)===this.name;var t}}function qa(e,t){const n=e&&e[t];return!!n&&(u(n)?L(n,(e=>!!e.field)):qr(n)||Tr(n))}function Ra(e){return L(At,(t=>{if(qa(e,t)){const n=e[t];if(u(n))return L(n,(e=>!!e.aggregate));{const e=ca(n);return e&&!!e.aggregate}}return!1}))}function Wa(e,t){const n=[],i=[],o=[],r=[],a={};return Ha(e,((s,c)=>{if(qr(s)){const{field:u,aggregate:l,bin:f,timeUnit:d,...p}=s;if(l||d||f){const e=ra(s),m=e&&e.title;let h=Kr(s,{forAs:!0});const g={...m?[]:{title:oa(s,t,{allowDisabling:!0})},...p,field:h};if(l){let e;if(Ee(l)?(e="argmax",h=Kr({op:"argmax",field:l.argmax},{forAs:!0}),g.field="".concat(h,".").concat(u)):Ce(l)?(e="argmin",h=Kr({op:"argmin",field:l.argmin},{forAs:!0}),g.field="".concat(h,".").concat(u)):"boxplot"!==l&&"errorbar"!==l&&"errorband"!==l&&(e=l),e){const t={op:e,as:h};u&&(t.field=u),r.push(t)}}else if(n.push(h),Gr(s)&&Fn(f)){if(i.push({bin:f,field:u,as:h}),n.push(Kr(s,{binSuffix:"end"})),ya(s,c)&&n.push(Kr(s,{binSuffix:"range"})),en(c)){const e={field:h+"_end"};a[c+"2"]=e}g.bin="binned",Nt(c)||(g.type=Ui)}else if(d){o.push({timeUnit:d,field:u,as:h});const e=Gr(s)&&s.type!==Hi&&"time";e&&(c===rt||c===ut?g.formatType=e:!function(e){return!!Qt[e]}(c)?en(c)&&(g.axis={formatType:e,...g.axis}):g.legend={formatType:e,...g.legend})}a[c]=g}else n.push(u),a[c]=e[c]}else a[c]=e[c]})),{bins:i,timeUnits:o,aggregate:r,groupby:n,encoding:a}}function Ua(e,t,n,i){return J(e).reduce(((o,r)=>{if(!zt(r))return si(function(e){return"".concat(e,"-encoding is dropped as ").concat(e," is not a valid encoding channel.")}(r)),o;const a=e[r];if("angle"!==r||"arc"!==t||e.theta||(si("Arc marks uses theta channel rather than angle, replacing angle with theta."),r=Ue),!function(e,t,n){const i=yn(t,n);if(!i)return!1;if("binned"===i){const n=e[t===Le?Me:Te];return!!(qr(n)&&qr(e[t])&&kn(n.bin))}return!0}(e,r,t))return si(Yn(r,t)),o;if(r===Ke&&"line"===t){const t=ca(e[r]);if(null==t?void 0:t.aggregate)return si("Line marks cannot encode size with a non-groupby field. You may want to use trail marks instead."),o}if(r===Je&&(n?"fill"in e:"stroke"in e))return si(Gn("encoding",{fill:"fill"in e,stroke:"stroke"in e})),o;if(r===st||r===at&&!u(a)&&!Vr(a)||r===ut&&u(a))a&&(o[r]=h(a).reduce(((e,t)=>(qr(t)?e.push(da(t,r)):si(Vn(t,r)),e)),[]));else{if(r===ut&&null===a)o[r]=null;else if(!(qr(a)||Wr(a)||Vr(a)||Mr(a)||Fi(a)))return si(Vn(a,r)),o;o[r]=la(a,r,i)}return o}),{})}function Ia(e,t){const n={};for(const i of J(e)){const o=la(e[i],i,t,{compositeMark:!0});n[i]=o}return n}function Ha(e,t,n){if(e)for(const i of J(e)){const o=e[i];if(u(o))for(const e of o)t.call(n,e,i);else t.call(n,o,i)}}function Ga(e,t){return J(t).reduce(((n,i)=>{switch(i){case Me:case Te:case lt:case dt:case ft:case Le:case qe:case Ue:case Ie:case Re:case We:case He:case Ge:case Ve:case Ye:case rt:case $e:case Ze:case ut:return n;case at:if("line"===e||"trail"===e)return n;case st:case ct:{const e=t[i];if(u(e)||qr(e))for(const t of h(e))t.aggregate||n.push(Kr(t,{}));return n}case Ke:if("trail"===e)return n;case Je:case Xe:case Qe:case et:case tt:case nt:case ot:case it:{const e=ca(t[i]);return e&&!e.aggregate&&n.push(Kr(e,{})),n}}}),[])}function Va(e,t,n,i=!0){if("tooltip"in n)return{tooltip:n.tooltip};return{tooltip:[...e.map((({fieldPrefix:e,titlePrefix:n})=>{const o=i?" of ".concat(Ya(t)):"";return{field:e+t.field,type:t.type,title:Fi(n)?{signal:n+'"'.concat(escape(o),'"')}:n+o}})),...U(function(e){const t=[];for(const n of J(e))if(qa(e,n)){const i=h(e[n]);for(const e of i)qr(e)?t.push(e):Tr(e)&&t.push(e.condition)}return t}(n).map($r),j)]}}function Ya(e){const{title:t,field:n}=e;return ue(t,n)}function Ja(e,t,n,i,o){const{scale:r,axis:a}=n;return({partName:s,mark:c,positionPrefix:u,endPositionPrefix:l,extraEncoding:f={}})=>{const d=Ya(n);return Xa(e,s,o,{mark:c,encoding:{[t]:{field:u+"_"+n.field,type:n.type,...void 0!==d?{title:d}:{},...void 0!==r?{scale:r}:{},...void 0!==a?{axis:a}:{}},...x(l)?{[t+"2"]:{field:l+"_"+n.field}}:{},...i,...f}})}}function Xa(e,t,n,i){const{clip:o,color:r,opacity:a}=e,s=e.type;return e[t]||void 0===e[t]&&n[t]?[{...i,mark:{...n[t],...o?{clip:o}:{},...r?{color:r}:{},...a?{opacity:a}:{},...$o(i.mark)?i.mark:{type:i.mark},style:"".concat(s,"-").concat(t),...y(e[t])?{}:e[t]}}]:[]}function Qa(e,t,n){const{encoding:i}=e,o="vertical"===t?"y":"x",r=i[o],a=i[o+"2"],s=i[o+"Error"],c=i[o+"Error2"];return{continuousAxisChannelDef:$a(r,n),continuousAxisChannelDef2:$a(a,n),continuousAxisChannelDefError:$a(s,n),continuousAxisChannelDefError2:$a(c,n),continuousAxis:o}}function $a(e,t){if(e&&e.aggregate){const{aggregate:n,...i}=e;return n!==t&&si(function(e,t){return"Continuous axis should not have customized aggregation function ".concat(e,"; ").concat(t," already agregates the axis.")}(n,t)),i}return e}function Ka(e,t){const{mark:n,encoding:i}=e,{x:o,y:r}=i;if($o(n)&&n.orient)return n.orient;if(Ur(o)){if(Ur(r)){const e=qr(o)&&o.aggregate,n=qr(r)&&r.aggregate;if(e||n!==t){if(n||e!==t){if(e===t&&n===t)throw new Error("Both x and y cannot have aggregate");return ha(r)&&!ha(o)?"horizontal":"vertical"}return"horizontal"}return"vertical"}return"horizontal"}if(Ur(r))return"vertical";throw new Error("Need a valid continuous axis for ".concat(t,"s"))}const Za="boxplot",es=new La(Za,ns);function ts(e){return b(e)?"tukey":e}function ns(e,{config:t}){var n;e={...e,encoding:Ia(e.encoding,t)};const{mark:i,encoding:o,selection:r,projection:a,...s}=e,c=$o(i)?i:{type:i};r&&si(qn("boxplot"));const f=null!==(n=c.extent)&&void 0!==n?n:t.boxplot.extent,d=Ba("size",c,t),p=ts(f),{bins:m,timeUnits:h,transform:g,continuousAxisChannelDef:v,continuousAxis:y,groupby:b,aggregate:x,encodingWithoutContinuousAxis:w,ticksOrient:A,boxOrient:D,customTooltipWithoutAggregatedField:F}=function(e,t,n){const i=Ka(e,Za),{continuousAxisChannelDef:o,continuousAxis:r}=Qa(e,i,Za),a=o.field,s=ts(t),c=[...is(a),{op:"median",field:a,as:"mid_box_"+a},{op:"min",field:a,as:("min-max"===s?"lower_whisker_":"min_")+a},{op:"max",field:a,as:("min-max"===s?"upper_whisker_":"max_")+a}],l="min-max"===s||"tukey"===s?[]:[{calculate:'datum["upper_box_'.concat(a,'"] - datum["lower_box_').concat(a,'"]'),as:"iqr_"+a},{calculate:'min(datum["upper_box_'.concat(a,'"] + datum["iqr_').concat(a,'"] * ').concat(t,', datum["max_').concat(a,'"])'),as:"upper_whisker_"+a},{calculate:'max(datum["lower_box_'.concat(a,'"] - datum["iqr_').concat(a,'"] * ').concat(t,', datum["min_').concat(a,'"])'),as:"lower_whisker_"+a}],{[r]:f,...d}=e.encoding,{customTooltipWithoutAggregatedField:p,filteredEncoding:m}=function(e){const{tooltip:t,...n}=e;if(!t)return{filteredEncoding:n};let i,o;if(u(t)){for(const e of t)e.aggregate?(i||(i=[]),i.push(e)):(o||(o=[]),o.push(e));i&&(n.tooltip=i)}else t.aggregate?n.tooltip=t:o=t;return u(o)&&1===o.length&&(o=o[0]),{customTooltipWithoutAggregatedField:o,filteredEncoding:n}}(d),{bins:h,timeUnits:g,aggregate:v,groupby:y,encoding:b}=Wa(m,n),x="vertical"===i?"horizontal":"vertical",w=i,A=[...h,...g,{aggregate:[...v,...c],groupby:y},...l];return{bins:h,timeUnits:g,transform:A,groupby:y,aggregate:v,continuousAxisChannelDef:o,continuousAxis:r,encodingWithoutContinuousAxis:b,ticksOrient:x,boxOrient:w,customTooltipWithoutAggregatedField:p}}(e,f,t),{color:k,size:C,...E}=w,S=e=>Ja(c,y,v,e,t.boxplot),B=S(E),_=S(w),z=S({...E,...C?{size:C}:{}}),O=Va([{fieldPrefix:"min-max"===p?"upper_whisker_":"max_",titlePrefix:"Max"},{fieldPrefix:"upper_box_",titlePrefix:"Q3"},{fieldPrefix:"mid_box_",titlePrefix:"Median"},{fieldPrefix:"lower_box_",titlePrefix:"Q1"},{fieldPrefix:"min-max"===p?"lower_whisker_":"min_",titlePrefix:"Min"}],v,w),P={type:"tick",color:"black",opacity:1,orient:A,invalid:null,aria:!1},j="min-max"===p?O:Va([{fieldPrefix:"upper_whisker_",titlePrefix:"Upper Whisker"},{fieldPrefix:"lower_whisker_",titlePrefix:"Lower Whisker"}],v,w),M=[...B({partName:"rule",mark:{type:"rule",invalid:null,aria:!1},positionPrefix:"lower_whisker",endPositionPrefix:"lower_box",extraEncoding:j}),...B({partName:"rule",mark:{type:"rule",invalid:null,aria:!1},positionPrefix:"upper_box",endPositionPrefix:"upper_whisker",extraEncoding:j}),...B({partName:"ticks",mark:P,positionPrefix:"lower_whisker",extraEncoding:j}),...B({partName:"ticks",mark:P,positionPrefix:"upper_whisker",extraEncoding:j})],T=[..."tukey"!==p?M:[],..._({partName:"box",mark:{type:"bar",...d?{size:d}:{},orient:D,invalid:null,ariaRoleDescription:"box"},positionPrefix:"lower_box",endPositionPrefix:"upper_box",extraEncoding:O}),...z({partName:"median",mark:{type:"tick",invalid:null,...l(t.boxplot.median)&&t.boxplot.median.color?{color:t.boxplot.median.color}:{},...d?{size:d}:{},orient:A,aria:!1},positionPrefix:"mid_box",extraEncoding:O})];var L;if("min-max"===p)return{...s,transform:(null!==(L=s.transform)&&void 0!==L?L:[]).concat(g),layer:T};const q='datum["lower_box_'.concat(v.field,'"]'),R='datum["upper_box_'.concat(v.field,'"]'),W="(".concat(R," - ").concat(q,")"),U="".concat(q," - ").concat(f," * ").concat(W),I="".concat(R," + ").concat(f," * ").concat(W),H='datum["'.concat(v.field,'"]'),G={joinaggregate:is(v.field),groupby:b},V={transform:[{filter:"(".concat(U," <= ").concat(H,") && (").concat(H," <= ").concat(I,")")},{aggregate:[{op:"min",field:v.field,as:"lower_whisker_"+v.field},{op:"max",field:v.field,as:"upper_whisker_"+v.field},{op:"min",field:"lower_box_"+v.field,as:"lower_box_"+v.field},{op:"max",field:"upper_box_"+v.field,as:"upper_box_"+v.field},...x],groupby:b}],layer:M},{tooltip:J,...X}=E,{scale:Q,axis:$}=v,K=Ya(v),Z=N($,["title"]),ee=Xa(c,"outliers",t.boxplot,{transform:[{filter:"(".concat(H," < ").concat(U,") || (").concat(H," > ").concat(I,")")}],mark:"point",encoding:{[y]:{field:v.field,type:v.type,...void 0!==K?{title:K}:{},...void 0!==Q?{scale:Q}:{},...Y(Z)?{}:{axis:Z}},...X,...k?{color:k}:{},...F?{tooltip:F}:{}}})[0];let te;const ne=[...m,...h,G];return ee?te={transform:ne,layer:[ee,V]}:(te=V,te.transform.unshift(...ne)),{...s,layer:[te,{transform:g,layer:T}]}}function is(e){return[{op:"q1",field:e,as:"lower_box_"+e},{op:"q3",field:e,as:"upper_box_"+e}]}const os="errorbar",rs=new La(os,as);function as(e,{config:t}){e={...e,encoding:Ia(e.encoding,t)};const{transform:n,continuousAxisChannelDef:i,continuousAxis:o,encodingWithoutContinuousAxis:r,ticksOrient:a,markDef:s,outerSpec:c,tooltipEncoding:u}=cs(e,os,t);delete r.size;const l=Ja(s,o,i,r,t.errorbar),f=s.thickness,d=s.size,p={type:"tick",orient:a,aria:!1,...void 0!==f?{thickness:f}:{},...void 0!==d?{size:d}:{}},m=[...l({partName:"ticks",mark:p,positionPrefix:"lower",extraEncoding:u}),...l({partName:"ticks",mark:p,positionPrefix:"upper",extraEncoding:u}),...l({partName:"rule",mark:{type:"rule",ariaRoleDescription:"errorbar",...void 0!==f?{size:f}:{}},positionPrefix:"lower",endPositionPrefix:"upper",extraEncoding:u})];return{...c,transform:n,...m.length>1?{layer:m}:{...m[0]}}}function ss(e,t){const{encoding:n}=e;if(function(e){return(Hr(e.x)||Hr(e.y))&&!Hr(e.x2)&&!Hr(e.y2)&&!Hr(e.xError)&&!Hr(e.xError2)&&!Hr(e.yError)&&!Hr(e.yError2)}(n))return{orient:Ka(e,t),inputType:"raw"};const i=function(e){return Hr(e.x2)||Hr(e.y2)}(n),o=function(e){return Hr(e.xError)||Hr(e.xError2)||Hr(e.yError)||Hr(e.yError2)}(n),r=n.x,a=n.y;if(i){if(o)throw new Error("".concat(t," cannot be both type aggregated-upper-lower and aggregated-error"));const e=n.x2,i=n.y2;if(Hr(e)&&Hr(i))throw new Error("".concat(t," cannot have both x2 and y2"));if(Hr(e)){if(Ur(r))return{orient:"horizontal",inputType:"aggregated-upper-lower"};throw new Error("Both x and x2 have to be quantitative in ".concat(t))}if(Hr(i)){if(Ur(a))return{orient:"vertical",inputType:"aggregated-upper-lower"};throw new Error("Both y and y2 have to be quantitative in ".concat(t))}throw new Error("No ranged axis")}{const e=n.xError,i=n.xError2,o=n.yError,s=n.yError2;if(Hr(i)&&!Hr(e))throw new Error("".concat(t," cannot have xError2 without xError"));if(Hr(s)&&!Hr(o))throw new Error("".concat(t," cannot have yError2 without yError"));if(Hr(e)&&Hr(o))throw new Error("".concat(t," cannot have both xError and yError with both are quantiative"));if(Hr(e)){if(Ur(r))return{orient:"horizontal",inputType:"aggregated-error"};throw new Error("All x, xError, and xError2 (if exist) have to be quantitative")}if(Hr(o)){if(Ur(a))return{orient:"vertical",inputType:"aggregated-error"};throw new Error("All y, yError, and yError2 (if exist) have to be quantitative")}throw new Error("No ranged axis")}}function cs(e,t,n){var i;const{mark:o,encoding:r,selection:a,projection:s,...c}=e,u=$o(o)?o:{type:o};a&&si(qn(t));const{orient:l,inputType:f}=ss(e,t),{continuousAxisChannelDef:d,continuousAxisChannelDef2:p,continuousAxisChannelDefError:m,continuousAxisChannelDefError2:h,continuousAxis:g}=Qa(e,l,t),{errorBarSpecificAggregate:v,postAggregateCalculates:y,tooltipSummary:b,tooltipTitleWithFieldName:x}=function(e,t,n,i,o,r,a,s){let c=[],u=[];const l=t.field;let f,d=!1;if("raw"===r){const t=e.center?e.center:e.extent?"iqr"===e.extent?"median":"mean":s.errorbar.center,n=e.extent?e.extent:"mean"===t?"stderr":"iqr";if("median"===t!=("iqr"===n)&&si(function(e,t,n){return"".concat(e," is not usually used with ").concat(t," for ").concat(n,".")}(t,n,a)),"stderr"===n||"stdev"===n)c=[{op:n,field:l,as:"extent_"+l},{op:t,field:l,as:"center_"+l}],u=[{calculate:'datum["center_'.concat(l,'"] + datum["extent_').concat(l,'"]'),as:"upper_"+l},{calculate:'datum["center_'.concat(l,'"] - datum["extent_').concat(l,'"]'),as:"lower_"+l}],f=[{fieldPrefix:"center_",titlePrefix:te(t)},{fieldPrefix:"upper_",titlePrefix:us(t,n,"+")},{fieldPrefix:"lower_",titlePrefix:us(t,n,"-")}],d=!0;else{let e,t,i;"ci"===n?(e="mean",t="ci0",i="ci1"):(e="median",t="q1",i="q3"),c=[{op:t,field:l,as:"lower_"+l},{op:i,field:l,as:"upper_"+l},{op:e,field:l,as:"center_"+l}],f=[{fieldPrefix:"upper_",titlePrefix:oa({field:l,aggregate:i,type:"quantitative"},s,{allowDisabling:!1})},{fieldPrefix:"lower_",titlePrefix:oa({field:l,aggregate:t,type:"quantitative"},s,{allowDisabling:!1})},{fieldPrefix:"center_",titlePrefix:oa({field:l,aggregate:e,type:"quantitative"},s,{allowDisabling:!1})}]}}else{(e.center||e.extent)&&si((p=e.center,m=e.extent,"".concat(m?"extent ":"").concat(m&&p?"and ":"").concat(p?"center ":"").concat(m&&p?"are ":"is ","not needed when data are aggregated."))),"aggregated-upper-lower"===r?(f=[],u=[{calculate:'datum["'.concat(n.field,'"]'),as:"upper_"+l},{calculate:'datum["'.concat(l,'"]'),as:"lower_"+l}]):"aggregated-error"===r&&(f=[{fieldPrefix:"",titlePrefix:l}],u=[{calculate:'datum["'.concat(l,'"] + datum["').concat(i.field,'"]'),as:"upper_"+l}],o?u.push({calculate:'datum["'.concat(l,'"] + datum["').concat(o.field,'"]'),as:"lower_"+l}):u.push({calculate:'datum["'.concat(l,'"] - datum["').concat(i.field,'"]'),as:"lower_"+l}));for(const e of u)f.push({fieldPrefix:e.as.substring(0,6),titlePrefix:ae(ae(e.calculate,'datum["',""),'"]',"")})}var p,m;return{postAggregateCalculates:u,errorBarSpecificAggregate:c,tooltipSummary:f,tooltipTitleWithFieldName:d}}(u,d,p,m,h,f,t,n),{[g]:w,["x"===g?"x2":"y2"]:A,["x"===g?"xError":"yError"]:D,["x"===g?"xError2":"yError2"]:F,...k}=r,{bins:C,timeUnits:E,aggregate:S,groupby:B,encoding:_}=Wa(k,n),z=[...S,...v],O="raw"!==f?[]:B,N=Va(b,d,_,x);return{transform:[...null!==(i=c.transform)&&void 0!==i?i:[],...C,...E,...0===z.length?[]:[{aggregate:z,groupby:O}],...y],groupby:O,continuousAxisChannelDef:d,continuousAxis:g,encodingWithoutContinuousAxis:_,ticksOrient:"vertical"===l?"horizontal":"vertical",markDef:u,outerSpec:c,tooltipEncoding:N}}function us(e,t,n){return te(e)+" "+n+" "+t}const ls="errorband",fs=new La(ls,ds);function ds(e,{config:t}){e={...e,encoding:Ia(e.encoding,t)};const{transform:n,continuousAxisChannelDef:i,continuousAxis:o,encodingWithoutContinuousAxis:r,markDef:a,outerSpec:s,tooltipEncoding:c}=cs(e,ls,t),u=a,l=Ja(u,o,i,r,t.errorband),f=void 0!==e.encoding.x&&void 0!==e.encoding.y;let d={type:f?"area":"rect"},p={type:f?"line":"rule"};const m={...u.interpolate?{interpolate:u.interpolate}:{},...u.tension&&u.interpolate?{tension:u.tension}:{}};return f?(d={...d,...m,ariaRoleDescription:"errorband"},p={...p,...m,aria:!1}):u.interpolate?si(ii("interpolate")):u.tension&&si(ii("tension")),{...s,transform:n,layer:[...l({partName:"band",mark:d,positionPrefix:"lower",endPositionPrefix:"upper",extraEncoding:c}),...l({partName:"borders",mark:p,positionPrefix:"lower",extraEncoding:c}),...l({partName:"borders",mark:p,positionPrefix:"upper",extraEncoding:c})]}}const ps={};function ms(e,t,n){const i=new La(e,t);ps[e]={normalizer:i,parts:n}}ms(Za,ns,["box","median","outliers","rule","ticks"]),ms(os,as,["ticks","rule"]),ms(ls,ds,["band","borders"]);const hs=["gradientHorizontalMaxLength","gradientHorizontalMinLength","gradientVerticalMaxLength","gradientVerticalMinLength","unselectedOpacity"],gs={titleAlign:"align",titleAnchor:"anchor",titleAngle:"angle",titleBaseline:"baseline",titleColor:"color",titleFont:"font",titleFontSize:"fontSize",titleFontStyle:"fontStyle",titleFontWeight:"fontWeight",titleLimit:"limit",titleLineHeight:"lineHeight",titleOrient:"orient",titlePadding:"offset"},vs={labelAlign:"align",labelAnchor:"anchor",labelAngle:"angle",labelBaseline:"baseline",labelColor:"color",labelFont:"font",labelFontSize:"fontSize",labelFontStyle:"fontStyle",labelFontWeight:"fontWeight",labelLimit:"limit",labelLineHeight:"lineHeight",labelOrient:"orient",labelPadding:"offset"},ys=J(gs),bs=J(vs),xs=J({header:1,headerRow:1,headerColumn:1,headerFacet:1}),ws=["size","shape","fill","stroke","strokeDash","strokeWidth","opacity"];function As(e){const t=[];for(const n of e||[]){const{expr:e,bind:i,...o}=n;if(i&&e){const n={...o,bind:i,init:e};t.push(n)}else{const n={...o,...e?{update:e}:{},...i?{bind:i}:{}};t.push(n)}}return t}const Ds="_vgsid_",Fs={single:{on:"click",fields:[Ds],resolve:"global",empty:"all",clear:"dblclick"},multi:{on:"click",fields:[Ds],toggle:"event.shiftKey",resolve:"global",empty:"all",clear:"dblclick"},interval:{on:"[mousedown, window:mouseup] > window:mousemove!",encodings:["x","y"],translate:"[mousedown, window:mouseup] > window:mousemove!",zoom:"wheel!",mark:{fill:"#333",fillOpacity:.125,stroke:"white"},resolve:"global",clear:"dblclick"}};function ks(e){return!(!e||"legend"!==e&&!e.legend)}function Cs(e){return ks(e)&&l(e)}function Es(e){return"concat"in e}function Ss(e){return"vconcat"in e}function Bs(e){return"hconcat"in e}const _s=["background","padding"];function zs(e,t){const n={};for(const t of _s)e&&void 0!==e[t]&&(n[t]=Aa(e[t]));return t&&(n.params=e.params),n}function Os(e){return l(e)&&void 0!==e.step}function Ns(e){return e.view||e.width||e.height}const Ps=J({align:1,bounds:1,center:1,columns:1,spacing:1});function js(e,t){var n;return null!==(n=e[t])&&void 0!==n?n:e["width"===t?"continuousWidth":"continuousHeight"]}function Ms(e,t){const n=Ts(e,t);return Os(n)?n.step:Ls}function Ts(e,t){var n;return ue(null!==(n=e[t])&&void 0!==n?n:e["width"===t?"discreteWidth":"discreteHeight"],{step:e.step})}const Ls=20,qs={background:"white",padding:5,timeFormat:"%b %d, %Y",countTitle:"Count of Records",view:{continuousWidth:200,continuousHeight:200,step:Ls},mark:{color:"#4c78a8",invalid:"filter",timeUnitBand:1},arc:{},area:{},bar:nr,circle:{},geoshape:{},image:{},line:{},point:{},rect:ir,rule:{color:"black"},square:{},text:{color:"black"},tick:{thickness:1},trail:{},boxplot:{size:14,extent:1.5,box:{},median:{color:"white"},outliers:{},rule:{},ticks:null},errorbar:{center:"mean",rule:!0,ticks:!1},errorband:{band:{opacity:.3},borders:!1},scale:{pointPadding:.5,barBandPaddingInner:.1,rectBandPaddingInner:0,minBandSize:2,minFontSize:8,maxFontSize:40,minOpacity:.3,maxOpacity:.8,minSize:9,minStrokeWidth:1,maxStrokeWidth:4,quantileCount:4,quantizeCount:4},projection:{},legend:{gradientHorizontalMaxLength:200,gradientHorizontalMinLength:100,gradientVerticalMaxLength:200,gradientVerticalMinLength:64,unselectedOpacity:.35},header:{titlePadding:10,labelPadding:10},headerColumn:{},headerRow:{},headerFacet:{},selection:Fs,style:{},title:{},facet:{spacing:20},concat:{spacing:20}},Rs=["#4c78a8","#f58518","#e45756","#72b7b2","#54a24b","#eeca3b","#b279a2","#ff9da6","#9d755d","#bab0ac"],Ws={text:11,guideLabel:10,guideTitle:11,groupTitle:13,groupSubtitle:12},Us={blue:Rs[0],orange:Rs[1],red:Rs[2],teal:Rs[3],green:Rs[4],yellow:Rs[5],purple:Rs[6],pink:Rs[7],brown:Rs[8],gray0:"#000",gray1:"#111",gray2:"#222",gray3:"#333",gray4:"#444",gray5:"#555",gray6:"#666",gray7:"#777",gray8:"#888",gray9:"#999",gray10:"#aaa",gray11:"#bbb",gray12:"#ccc",gray13:"#ddd",gray14:"#eee",gray15:"#fff"};function Is(e){const t=J(e||{}),n={};for(const i of t){const t=e[i];n[i]=ve(t)?wa(t):Aa(t)}return n}const Hs=[...er,...De,...xs,"background","padding","legend","lineBreak","scale","style","title","view"];function Gs(e={}){const{color:t,font:n,fontSize:i,...o}=e,r=d({},qs,n?function(e){return{text:{font:e},style:{"guide-label":{font:e},"guide-title":{font:e},"group-title":{font:e},"group-subtitle":{font:e}}}}(n):{},t?function(e={}){return{signals:[{name:"color",value:l(e)?{...Us,...e}:Us}],mark:{color:{signal:"color.blue"}},rule:{color:{signal:"color.gray0"}},text:{color:{signal:"color.gray0"}},style:{"guide-label":{fill:{signal:"color.gray0"}},"guide-title":{fill:{signal:"color.gray0"}},"group-title":{fill:{signal:"color.gray0"}},"group-subtitle":{fill:{signal:"color.gray0"}},cell:{stroke:{signal:"color.gray8"}}},axis:{domainColor:{signal:"color.gray13"},gridColor:{signal:"color.gray8"},tickColor:{signal:"color.gray13"}},range:{category:[{signal:"color.blue"},{signal:"color.orange"},{signal:"color.red"},{signal:"color.teal"},{signal:"color.green"},{signal:"color.yellow"},{signal:"color.purple"},{signal:"color.pink"},{signal:"color.brown"},{signal:"color.grey8"}]}}}(t):{},i?function(e){return{signals:[{name:"fontSize",value:l(e)?{...Ws,...e}:Ws}],text:{fontSize:{signal:"fontSize.text"}},style:{"guide-label":{fontSize:{signal:"fontSize.guideLabel"}},"guide-title":{fontSize:{signal:"fontSize.guideTitle"}},"group-title":{fontSize:{signal:"fontSize.groupTitle"}},"group-subtitle":{fontSize:{signal:"fontSize.groupSubtitle"}}}}}(i):{},o||{}),a=N(r,Hs);for(const e of["background","lineBreak","padding"])r[e]&&(a[e]=Aa(r[e]));for(const e of er)r[e]&&(a[e]=Oo(r[e]));for(const e of De)r[e]&&(a[e]=Is(r[e]));for(const e of xs)r[e]&&(a[e]=Oo(r[e]));return r.legend&&(a.legend=Oo(r.legend)),r.scale&&(a.scale=Oo(r.scale)),r.style&&(a.style=function(e){const t=J(e),n={};for(const i of t)n[i]=Is(e[i]);return n}(r.style)),r.title&&(a.title=Oo(r.title)),r.view&&(a.view=Oo(r.view)),a}const Vs=["view",...Qo],Ys=["color","fontSize","background","padding","facet","concat","numberFormat","timeFormat","countTitle","header","axisQuantitative","axisTemporal","axisDiscrete","axisPoint","axisXBand","axisXPoint","axisXDiscrete","axisXQuantitative","axisXTemporal","axisYBand","axisYPoint","axisYDiscrete","axisYQuantitative","axisYTemporal","scale","selection","overlay"],Js={view:["continuousWidth","continuousHeight","discreteWidth","discreteHeight","step"],area:["line","point"],bar:["binSpacing","continuousBandSize","discreteBandSize"],rect:["binSpacing","continuousBandSize","discreteBandSize"],line:["point"],tick:["bandSize","thickness"]};function Xs(e){e=z(e);for(const t of Ys)delete e[t];if(e.axis)for(const t in e.axis)ve(e.axis[t])&&delete e.axis[t];if(e.legend)for(const t of hs)delete e.legend[t];if(e.mark){for(const t of Zo)delete e.mark[t];e.mark.tooltip&&l(e.mark.tooltip)&&delete e.mark.tooltip}e.params&&(e.signals=(e.signals||[]).concat(As(e.params)),delete e.params);for(const t of Vs){for(const n of Zo)delete e[t][n];const n=Js[t];if(n)for(const i of n)delete e[t][i];Qs(e,t)}for(const t of J(ps))delete e[t];!function(e){const{titleMarkConfig:t,subtitleMarkConfig:n,subtitle:i}=ba(e.title);Y(t)||(e.style["group-title"]={...e.style["group-title"],...t});Y(n)||(e.style["group-subtitle"]={...e.style["group-subtitle"],...n});Y(i)?delete e.title:e.title=i}(e);for(const t in e)l(e[t])&&Y(e[t])&&delete e[t];return Y(e)?void 0:e}function Qs(e,t,n,i){var o;"view"===t&&(n="cell");const r={...i?e[t][i]:e[t],...e.style[null!==(o=n)&&void 0!==o?o:t]};var a;Y(r)||(e.style[null!==(a=n)&&void 0!==a?a:t]=r);i||delete e[t]}function $s(e){return"layer"in e}const Ks={zero:1,center:1,normalize:1};const Zs=new Set([Po,Mo,jo,Wo,qo,Go,Vo,Lo,Uo,Io]),ec=new Set([Mo,jo,Po]);function tc(e,t){const n="x"===t?"y":"radius",i=e[t],o=e[n];if(qr(i)&&qr(o))if("quantitative"===Rr(i)&&"quantitative"===Rr(o)){if(i.stack)return t;if(o.stack)return n;const e=qr(i)&&!!i.aggregate;if(e!==(qr(o)&&!!o.aggregate))return e?t:n;{var r,a;const e=null===(r=i.scale)||void 0===r?void 0:r.type,s=null===(a=o.scale)||void 0===a?void 0:a.type;if(e&&"linear"!==e)return n;if(s&&"linear"!==s)return t}}else{if("quantitative"===Rr(i))return t;if("quantitative"===Rr(o))return n}else{if("quantitative"===Rr(i))return t;if("quantitative"===Rr(o))return n}}function nc(e,t,n={}){const i=$o(e)?e.type:e;if(!Zs.has(i))return null;const o=tc(t,"x")||tc(t,"theta");if(!o)return null;const r=t[o],a=qr(r)?Kr(r,{}):void 0;let s=function(e){switch(e){case"x":return"y";case"y":return"x";case"theta":return"radius";case"radius":return"theta"}}(o),c=t[s],u=qr(c)?Kr(c,{}):void 0;u===a&&(u=void 0,c=void 0,s=void 0);const l=$t.reduce(((e,n)=>{if("tooltip"!==n&&qa(t,n)){const i=t[n];for(const t of h(i)){const i=ca(t);if(i.aggregate)continue;const o=Kr(i,{});o&&o===u||e.push({channel:n,fieldDef:i})}}return e}),[]);let f;if(void 0!==r.stack?f=y(r.stack)?r.stack?"zero":null:r.stack:l.length>0&&ec.has(i)&&(f="zero"),!f||!(f in Ks))return null;var d,p;if(Ra(t)&&0===l.length)return null;if(r.scale&&r.scale.type&&r.scale.type!==Yi){if(n.disallowNonLinearStack)return null;si(function(e){return"Cannot stack non-linear scale (".concat(e,").")}(r.scale.type))}return Hr(t[Mt(o)])?(void 0!==r.stack&&si('Cannot stack "'.concat(d=o,'" if there is already "').concat(d,'2".')),null):(qr(r)&&r.aggregate&&!T(ze,r.aggregate)&&si((p=r.aggregate,'Stacking is applied even though the aggregate function is non-summative ("'.concat(p,'").'))),{groupbyChannel:c?s:void 0,groupbyField:u,fieldChannel:o,impute:null!==r.impute&&Jo(i),stackBy:l,offset:f})}function ic(e){const{point:t,line:n,...i}=e;return J(i).length>1?i:i.type}function oc(e){for(const t of["line","area","rule","trail"])e[t]&&(e={...e,[t]:N(e[t],["point","line"])});return e}function rc(e,t={},n){return"transparent"===e.point?{opacity:0}:e.point?l(e.point)?e.point:{}:void 0!==e.point?null:t.point||n.shape?l(t.point)?t.point:{}:void 0}function ac(e,t={}){return e.line?!0===e.line?{}:e.line:void 0!==e.line?null:t.line?!0===t.line?{}:t.line:void 0}class sc{constructor(){Bn(this,"name","path-overlay")}hasMatchingType(e,t){if(Ta(e)){const{mark:n,encoding:i}=e,o=$o(n)?n:{type:n};switch(o.type){case"line":case"rule":case"trail":return!!rc(o,t[o.type],i);case"area":return!!rc(o,t[o.type],i)||!!ac(o,t[o.type])}}return!1}run(e,t,n){const{config:i}=t,{selection:o,projection:r,mark:a,encoding:s,...c}=e,u=Ia(s,i),l=$o(a)?a:{type:a},f=rc(l,i[l.type],u),d="area"===l.type&&ac(l,i[l.type]),p=[{...o?{selection:o}:{},mark:ic({..."area"===l.type&&void 0===l.opacity&&void 0===l.fillOpacity?{opacity:.7}:{},...l}),encoding:N(u,["shape"])}],m=nc(l,u);let h=u;if(m){const{fieldChannel:e,offset:t}=m;h={...u,[e]:{...u[e],...t?{stack:t}:{}}}}return d&&p.push({...r?{projection:r}:{},mark:{type:"line",...O(l,["clip","interpolate","tension","tooltip"]),...d},encoding:h}),f&&p.push({...r?{projection:r}:{},mark:{type:"point",opacity:1,filled:!0,...O(l,["clip","tooltip"]),...f},encoding:h}),n({...c,layer:p},{...t,config:oc(i)})}}class cc{constructor(){Bn(this,"name","RangeStep")}hasMatchingType(e){if(Ta(e)&&e.encoding)for(const n of Zt){const i=e.encoding[n];var t;if(i&&Hr(i))if(null==i||null===(t=i.scale)||void 0===t?void 0:t.rangeStep)return!0}return!1}run(e){const t={};let n={...e.encoding};for(const e of Zt){const o=Tt(e),r=n[e];var i;if(r&&Hr(r))if(null==r||null===(i=r.scale)||void 0===i?void 0:i.rangeStep){const{scale:i,...a}=r,{rangeStep:s,...c}=i;t[o]={step:i.rangeStep},si('Scale\'s "rangeStep" is deprecated and will be removed in Vega-Lite 5.0. Please use "width"/"height": {"step": ...} instead. See https://vega.github.io/vega-lite/docs/size.html.'),n={...n,[e]:{...a,...Y(c)?{}:{scale:c}}}}}return{...t,...e,encoding:n}}}function uc(e,t){return t?Br(e)?hc(e,t):dc(e,t):e}function lc(e,t){return t?hc(e,t):e}function fc(e,t,n){const i=t[e];return function(e){return e&&!x(e)&&"repeat"in e}(i)?i.repeat in n?{...t,[e]:n[i.repeat]}:void si(function(e){return'Unknown repeated value "'.concat(e,'".')}(i.repeat)):t}function dc(e,t){if(void 0!==(e=fc("field",e,t))){if(null===e)return null;if(Nr(e)&&Er(e.sort)){const n=fc("field",e.sort,t);e={...e,...n?{sort:n}:{}}}return e}}function pc(e,t){if(qr(e))return dc(e,t);{const n=fc("datum",e,t);return n===e||n.type||(n.type="nominal"),n}}function mc(e,t){if(!Hr(e)){if(Lr(e)){const n=pc(e.condition,t);if(n)return{...e,condition:n};{const{condition:t,...n}=e;return n}}return e}{const n=pc(e,t);if(n)return n;if(Mr(e))return{condition:e.condition}}}function hc(e,t){const n={};for(const i in e)if(v(e,i)){const o=e[i];if(u(o))n[i]=o.map((e=>mc(e,t))).filter((e=>e));else{const e=mc(o,t);void 0!==e&&(n[i]=e)}}return n}class gc{constructor(){Bn(this,"name","RuleForRangedLine")}hasMatchingType(e){if(Ta(e)){const{encoding:t,mark:n}=e;if("line"===n)for(const e of Ot){const n=t[Pt(e)];if(t[e]&&(qr(n)&&!kn(n.bin)||Wr(n)))return!0}}return!1}run(e,t,n){const{encoding:i}=e;var o,r;return si((o=!!i.x2,r=!!i.y2,"Line mark is for continuous lines and thus cannot be used with ".concat(o&&r?"x2 and y2":o?"x2":"y2",". We will use the rule mark (line segments) instead."))),n({...e,mark:"rule"},t)}}function vc({parentEncoding:e,encoding:t={},layer:n}){let i={};if(e){const o=new Set([...J(e),...J(t)]);for(const r of o){const o=t[r],a=e[r];if(Hr(o)){const e={...a,...o};i[r]=e}else Lr(o)?i[r]={...o,condition:{...a,...o.condition}}:o||null===o?i[r]=o:(n||Vr(a)||Fi(a)||Hr(a)||u(a))&&(i[r]=a)}}else i=t;return!i||Y(i)?void 0:i}function yc(e){const{parentProjection:t,projection:n}=e;return t&&n&&si(function(e){const{parentProjection:t,projection:n}=e;return"Layer's shared projection ".concat(P(t)," is overridden by a child projection ").concat(P(n),".")}({parentProjection:t,projection:n})),null!=n?n:t}function bc(e,t){void 0===t&&(t=Gs(e.config));const n=function(e,t={}){return xc.map(e,{config:t})}(e,t),{width:i,height:o}=e,r=function(e,t,n){let{width:i,height:o}=t;const r=Ta(e)||$s(e),a={};r?"container"==i&&"container"==o?(a.type="fit",a.contains="padding"):"container"==i?(a.type="fit-x",a.contains="padding"):"container"==o&&(a.type="fit-y",a.contains="padding"):("container"==i&&(si(Nn("width")),i=void 0),"container"==o&&(si(Nn("height")),o=void 0));const s={type:"pad",...a,...n?wc(n.autosize):{},...wc(e.autosize)};"fit"!==s.type||r||(si(On),s.type="pad");"container"==i&&"fit"!=s.type&&"fit-x"!=s.type&&si(Pn("width"));"container"==o&&"fit"!=s.type&&"fit-y"!=s.type&&si(Pn("height"));if(_(s,{type:"pad"}))return;return s}(n,{width:i,height:o,autosize:e.autosize},t);return{...n,...r?{autosize:r}:{}}}const xc=new class extends class{map(e,t){return zr(e)?this.mapFacet(e,t):function(e){return"repeat"in e}(e)?this.mapRepeat(e,t):Bs(e)?this.mapHConcat(e,t):Ss(e)?this.mapVConcat(e,t):Es(e)?this.mapConcat(e,t):this.mapLayerOrUnit(e,t)}mapLayerOrUnit(e,t){if($s(e))return this.mapLayer(e,t);if(Ta(e))return this.mapUnit(e,t);throw new Error(zn(e))}mapLayer(e,t){return{...e,layer:e.layer.map((e=>this.mapLayerOrUnit(e,t)))}}mapHConcat(e,t){return{...e,hconcat:e.hconcat.map((e=>this.map(e,t)))}}mapVConcat(e,t){return{...e,vconcat:e.vconcat.map((e=>this.map(e,t)))}}mapConcat(e,t){const{concat:n,...i}=e;return{...i,concat:n.map((e=>this.map(e,t)))}}mapFacet(e,t){return{...e,spec:this.map(e.spec,t)}}mapRepeat(e,t){return{...e,spec:this.map(e.spec,t)}}}{constructor(...e){super(...e),Bn(this,"nonFacetUnitNormalizers",[es,rs,fs,new sc,new gc,new cc])}map(e,t){if(Ta(e)){const n=qa(e.encoding,Ne),i=qa(e.encoding,Pe),o=qa(e.encoding,je);if(n||i||o)return this.mapFacetedUnit(e,t)}return super.map(e,t)}mapUnit(e,t){const{parentEncoding:n,parentProjection:i}=t,o=lc(e.encoding,t.repeater),r={...e,...o?{encoding:o}:{}};if(n||i)return this.mapUnitWithParentEncodingOrProjection(r,t);const a=this.mapLayerOrUnit.bind(this);for(const e of this.nonFacetUnitNormalizers)if(e.hasMatchingType(r,t.config))return e.run(r,t,a);return r}mapRepeat(e,t){return function(e){return!u(e.repeat)&&e.repeat.layer}(e)?this.mapLayerRepeat(e,t):this.mapNonLayerRepeat(e,t)}mapLayerRepeat(e,t){const{repeat:n,spec:i,...o}=e,{row:r,column:a,layer:s}=n,{repeater:c={},repeaterPrefix:u=""}=t;return r||a?this.mapRepeat({...e,repeat:{...r?{row:r}:{},...a?{column:a}:{}},spec:{repeat:{layer:s},spec:i}},t):{...o,layer:s.map((e=>{const n={...c,layer:e},o=(i.name||"")+u+"child__layer_".concat(K(e)),r=this.mapLayerOrUnit(i,{...t,repeater:n,repeaterPrefix:o});return r.name=o,r}))}}mapNonLayerRepeat(e,t){var n;const{repeat:i,spec:o,data:r,...a}=e;!u(i)&&e.columns&&(e=N(e,["columns"]),si(Wn("repeat")));const s=[],{repeater:c={},repeaterPrefix:l=""}=t,f=!u(i)&&i.row||[c?c.row:null],d=!u(i)&&i.column||[c?c.column:null],p=u(i)&&i||[c?c.repeat:null];for(const e of p)for(const n of f)for(const r of d){const a={repeat:e,row:n,column:r,layer:c.layer},f=(o.name||"")+l+"child__"+(u(i)?"".concat(K(e)):(i.row?"row_".concat(K(n)):"")+(i.column?"column_".concat(K(r)):"")),d=this.map(o,{...t,repeater:a,repeaterPrefix:f});d.name=f,s.push(N(d,["data"]))}const m=u(i)?e.columns:i.column?i.column.length:1;return{data:null!==(n=o.data)&&void 0!==n?n:r,align:"all",...a,columns:m,concat:s}}mapFacet(e,t){const{facet:n}=e;return Br(n)&&e.columns&&(e=N(e,["columns"]),si(Wn("facet"))),super.mapFacet(e,t)}mapUnitWithParentEncodingOrProjection(e,t){const{encoding:n,projection:i}=e,{parentEncoding:o,parentProjection:r,config:a}=t,s=yc({parentProjection:r,projection:i}),c=vc({parentEncoding:o,encoding:lc(n,t.repeater)});return this.mapUnit({...e,...s?{projection:s}:{},...c?{encoding:c}:{}},{config:a})}mapFacetedUnit(e,t){const{row:n,column:i,facet:o,...r}=e.encoding,{mark:a,width:s,projection:c,height:u,view:l,selection:f,encoding:d,...p}=e,{facetMapping:m,layout:h}=this.getFacetMappingAndLayout({row:n,column:i,facet:o},t),g=lc(r,t.repeater);return this.mapFacet({...p,...h,facet:m,spec:{...s?{width:s}:{},...u?{height:u}:{},...l?{view:l}:{},...c?{projection:c}:{},mark:a,encoding:g,...f?{selection:f}:{}}},t)}getFacetMappingAndLayout(e,t){const{row:n,column:i,facet:o}=e;if(n||i){o&&si((a=[...n?[Ne]:[],...i?[Pe]:[]],"Facet encoding dropped as ".concat(a.join(" and ")," ").concat(a.length>1?"are":"is"," also specified.")));const t={},s={};for(const n of[Ne,Pe]){const i=e[n];if(i){const{align:e,center:o,spacing:a,columns:c,...u}=i;t[n]=u;for(const e of["align","center","spacing"]){var r;if(void 0!==i[e])s[e]=null!==(r=s[e])&&void 0!==r?r:{},s[e][n]=i[e]}}}return{facetMapping:t,layout:s}}{const{align:e,center:n,spacing:i,columns:r,...a}=o;return{facetMapping:uc(a,t.repeater),layout:{...e?{align:e}:{},...n?{center:n}:{},...i?{spacing:i}:{},...r?{columns:r}:{}}}}var a}mapLayer(e,{parentEncoding:t,parentProjection:n,...i}){const{encoding:o,projection:r,...a}=e,s={...i,parentEncoding:vc({parentEncoding:t,encoding:o,layer:!0}),parentProjection:yc({parentProjection:n,projection:r})};return super.mapLayer(a,s)}};function wc(e){return x(e)?{type:e}:null!=e?e:{}}class Ac{constructor(e={},t={}){this.explicit=e,this.implicit=t}clone(){return new Ac(z(this.explicit),z(this.implicit))}combine(){return{...this.explicit,...this.implicit}}get(e){return ue(this.explicit[e],this.implicit[e])}getWithExplicit(e){return void 0!==this.explicit[e]?{explicit:!0,value:this.explicit[e]}:void 0!==this.implicit[e]?{explicit:!1,value:this.implicit[e]}:{explicit:!1,value:void 0}}setWithExplicit(e,t){void 0!==t.value&&this.set(e,t.value,t.explicit)}set(e,t,n){return delete this[n?"implicit":"explicit"][e],this[n?"explicit":"implicit"][e]=t,this}copyKeyFromSplit(e,t){void 0!==t.explicit[e]?this.set(e,t.explicit[e],!0):void 0!==t.implicit[e]&&this.set(e,t.implicit[e],!1)}copyKeyFromObject(e,t){void 0!==t[e]&&this.set(e,t[e],!0)}copyAll(e){for(const t of J(e.combine())){const n=e.getWithExplicit(t);this.setWithExplicit(t,n)}}}function Dc(e){return{explicit:!0,value:e}}function Fc(e){return{explicit:!1,value:e}}function kc(e){return(t,n,i,o)=>{const r=e(t.value,n.value);return r>0?t:r<0?n:Cc(t,n,i,o)}}function Cc(e,t,n,i){return e.explicit&&t.explicit&&si(function(e,t,n,i){return"Conflicting ".concat(t.toString(),' property "').concat(e.toString(),'" (').concat(P(n)," and ").concat(P(i),"). Using ").concat(P(n),".")}(n,i,e.value,t.value)),e}function Ec(e,t,n,i,o=Cc){return void 0===e||void 0===e.value?t:e.explicit&&!t.explicit?e:t.explicit&&!e.explicit?t:_(e.value,t.value)?e:o(e,t,n,i)}class Sc extends Ac{constructor(e={},t={},n=!1){super(e,t),this.explicit=e,this.implicit=t,this.parseNothing=n}clone(){const e=super.clone();return e.parseNothing=this.parseNothing,e}}function Bc(e){return"url"in e}function _c(e){return"values"in e}function zc(e){return"name"in e&&!Bc(e)&&!_c(e)&&!Oc(e)}function Oc(e){return e&&(Nc(e)||Pc(e)||jc(e))}function Nc(e){return"sequence"in e}function Pc(e){return"sphere"in e}function jc(e){return"graticule"in e}let Mc;function Tc(e){return"filter"in e}function Lc(e){return"lookup"in e}function qc(e){return"pivot"in e}function Rc(e){return"density"in e}function Wc(e){return"quantile"in e}function Uc(e){return"regression"in e}function Ic(e){return"loess"in e}function Hc(e){return"sample"in e}function Gc(e){return"window"in e}function Vc(e){return"joinaggregate"in e}function Yc(e){return"flatten"in e}function Jc(e){return"calculate"in e}function Xc(e){return"bin"in e}function Qc(e){return"impute"in e}function $c(e){return"timeUnit"in e}function Kc(e){return"aggregate"in e}function Zc(e){return"stack"in e}function eu(e){return"fold"in e}!function(e){e[e.Raw=0]="Raw",e[e.Main=1]="Main",e[e.Row=2]="Row",e[e.Column=3]="Column",e[e.Lookup=4]="Lookup"}(Mc||(Mc={}));const tu="[",nu="]",iu=/[[\]{}]/,ou={"*":1,arc:1,area:1,group:1,image:1,line:1,path:1,rect:1,rule:1,shape:1,symbol:1,text:1,trail:1};let ru,au;function su(e,t,n){return ru=t||"view",au=n||ou,uu(e.trim()).map(lu)}function cu(e,t,n,i,o){const r=e.length;let a,s=0;for(;t=0?--s:i&&i.indexOf(a)>=0&&++s}return t}function uu(e){const t=[],n=e.length;let i=0,o=0;for(;o"!==(e=e.slice(i+1).trim())[0])throw"Expected '>' after between selector: "+e;n=n.map(lu);const o=lu(e.slice(1).trim());if(o.between)return{between:n,stream:o};o.between=n;return o}(e):function(e){const t={source:ru},n=[];let i,o,r=[0,0],a=0,s=0,c=e.length,u=0;if("}"===e[c-1]){if(u=e.lastIndexOf("{"),!(u>=0))throw"Unmatched right brace: "+e;try{r=function(e){const t=e.split(",");if(!e.length||t.length>2)throw e;return t.map((t=>{const n=+t;if(n!=n)throw e;return n}))}(e.substring(u+1,c-1))}catch(t){throw"Invalid throttle specification: "+e}c=(e=e.slice(0,u).trim()).length,u=0}if(!c)throw e;"@"===e[0]&&(a=++u);i=cu(e,u,":"),i1?(t.type=n[1],a?t.markname=n[0].slice(1):!function(e){return au[e]}(n[0])?t.source=n[0]:t.marktype=n[0]):t.type=n[0];"!"===t.type.slice(-1)&&(t.consume=!0,t.type=t.type.slice(0,-1));null!=o&&(t.filter=o);r[0]&&(t.throttle=r[0]);r[1]&&(t.debounce=r[1]);return t}(e)}function fu(e,t,n,i){const o=Mr(t)&&t.condition,r=i(t);if(o){return{[n]:[...h(o).map((t=>{const n=i(t);return{test:function(e){return e.selection}(t)?td(e,t.selection):id(e,t.test),...n}})),...void 0!==r?[r]:[]]}}return void 0!==r?{[n]:r}:{}}function du(e,t="text"){const n=e.encoding[t];return fu(e,n,t,(t=>pu(t,e.config)))}function pu(e,t,n="datum"){if(e){if(Vr(e))return Fa(e.value);if(Hr(e)){const{format:i,formatType:o}=sa(e);return mr({fieldOrDatumDef:e,format:i,formatType:o,expr:n,config:t})}}}function mu(e,t={}){const{encoding:n,markDef:i,config:o,stack:r}=e,a=n.tooltip;if(u(a))return{tooltip:gu({tooltip:a},r,o,t)};{const s=t.reactiveGeom?"datum.datum":"datum";return fu(e,a,"tooltip",(e=>{const a=pu(e,o,s);if(a)return a;if(null===e)return;let c=Ba("tooltip",i,o);return!0===c&&(c={content:"encoding"}),x(c)?{value:c}:l(c)?Fi(c)?c:"encoding"===c.content?gu(n,r,o,t):{signal:s}:void 0}))}}function hu(e,t,n,{reactiveGeom:i}={}){const o={},r=i?"datum.datum":"datum",a=[];function s(i,s){var c;const u=Pt(s),l=Gr(i)?i:{...i,type:e[u].type},f=h(l.title||aa(l,n)).join(", ");let d;if(en(s)){const i="x"===s?"x2":"y2",a=ca(e[i]);if(kn(l.bin)&&a){const e=Kr(l,{expr:r}),t=Kr(a,{expr:r}),{format:s,formatType:c}=sa(l);d=Ar(e,t,s,c,n),o[i]=!0}else if(t&&t.fieldChannel===s&&"normalize"===t.offset){const{format:e,formatType:t}=sa(l);d=mr({fieldOrDatumDef:l,format:e,formatType:t,expr:r,config:n,normalizeStack:!0}).signal}}d=null!==(c=d)&&void 0!==c?c:pu(l,n,r).signal,a.push({channel:s,key:f,value:d})}Ha(e,((e,t)=>{qr(e)?s(e,t):Tr(e)&&s(e.condition,t)}));const c={};for(const{channel:e,key:t,value:n}of a)o[e]||c[t]||(c[t]=n);return c}function gu(e,t,n,{reactiveGeom:i}={}){const o=hu(e,t,n,{reactiveGeom:i}),r=Q(o).map((([e,t])=>'"'.concat(e,'": ').concat(t)));return r.length>0?{signal:"{".concat(r.join(", "),"}")}:void 0}function vu(e){const{markDef:t,config:n}=e,i=Ba("aria",t,n);return!1===i?{}:{...i?{aria:i}:{},...yu(e),...bu(e)}}function yu(e){const{mark:t,markDef:n,config:i}=e;if(!1===i.aria)return{};const o=Ba("ariaRoleDescription",n,i);return null!=o?{ariaRoleDescription:{value:o}}:t in Si?{}:{ariaRoleDescription:{value:t}}}function bu(e){const{encoding:t,markDef:n,config:i,stack:o}=e,r=t.description;if(r)return fu(e,r,"description",(t=>pu(t,e.config)));const a=Ba("description",n,i);if(null!=a)return{description:Fa(a)};if(!1===i.aria)return{};const s=hu(t,o,i);return Y(s)?void 0:{description:{signal:Q(s).map((([e,t],n)=>'"'.concat(n>0?"; ":"").concat(e,': " + (').concat(t,")"))).join(" + ")}}}function xu(e,t,n={}){const{markDef:i,encoding:o,config:r}=t,{vgChannel:a}=n;let{defaultRef:s,defaultValue:c}=n;var u;void 0===s&&(c=null!==(u=c)&&void 0!==u?u:Ba(e,i,r,{vgChannel:a,ignoreVgConfig:!0}),void 0!==c&&(s=Fa(c)));const l=o[e];return fu(t,l,null!=a?a:e,(n=>lr({channel:e,channelDef:n,markDef:i,config:r,scaleName:t.scaleName(e),scale:t.getScaleComponent(e),stack:null,defaultRef:s})))}function wu(e,t={filled:void 0}){var n,i,o,r;const{markDef:a,encoding:s,config:c}=e,{type:u}=a,l=null!==(n=t.filled)&&void 0!==n?n:Ba("filled",a,c),f=T(["bar","point","circle","square","geoshape"],u)?"transparent":void 0,d=null!==(i=null!==(o=Ba(!0===l?"color":void 0,a,c,{vgChannel:"fill"}))&&void 0!==o?o:c.mark[!0===l&&"color"])&&void 0!==i?i:f,p=null!==(r=Ba(!1===l?"color":void 0,a,c,{vgChannel:"stroke"}))&&void 0!==r?r:c.mark[!1===l&&"color"],m=l?"fill":"stroke",h={...d?{fill:Fa(d)}:{},...p?{stroke:Fa(p)}:{}};return a.color&&(l?a.fill:a.stroke)&&si(Gn("property",{fill:"fill"in a,stroke:"stroke"in a})),{...h,...xu("color",e,{vgChannel:m,defaultValue:l?d:p}),...xu("fill",e,{defaultValue:s.fill?d:void 0}),...xu("stroke",e,{defaultValue:s.stroke?p:void 0})}}function Au(e){const{encoding:t,mark:n}=e,i=t.order;return!Jo(n)&&Vr(i)?fu(e,i,"zindex",(e=>Fa(e.value))):{}}function Du(e,t){const n=t[function(e){switch(e){case Me:return"xOffset";case Te:return"yOffset";case Le:return"x2Offset";case qe:return"y2Offset";case Ue:return"thetaOffset";case Re:return"radiusOffset";case Ie:return"theta2Offset";case We:return"radius2Offset"}}(e)];if(n)return n}function Fu(e,t,{defaultPos:n,vgChannel:i,isMidPoint:o}){const{encoding:r,markDef:a,config:s,stack:c}=t,u=r[e],l=r[Mt(e)],f=t.scaleName(e),d=t.getScaleComponent(e),p=Du(e,a),m=ku({model:t,defaultPos:n,channel:e,scaleName:f,scale:d}),h=!u&&en(e)&&(r.latitude||r.longitude)?{field:t.getName(e)}:function(e){const{channel:t,channelDef:n,isMidPoint:i,scaleName:o,stack:r,offset:a,markDef:s,config:c}=e;if(Hr(n)&&r&&t===r.fieldChannel){if(qr(n)){const e=Pr({channel:t,fieldDef:n,isMidPoint:i,markDef:s,stack:r,config:c});if(void 0!==e)return ur({scaleName:o,fieldOrDatumDef:n,startSuffix:"start",band:e,offset:a})}return cr(n,o,{suffix:"end"},{offset:a})}return or(e)}({channel:e,channelDef:u,channel2Def:l,markDef:a,config:s,isMidPoint:o,scaleName:f,scale:d,stack:c,offset:p,defaultRef:m});return h?{[i||e]:h}:void 0}function ku({model:e,defaultPos:t,channel:n,scaleName:i,scale:o}){const{markDef:r,config:a}=e;return()=>{const s=Pt(n),c=jt(n),u=Ba(n,r,a,{vgChannel:c});if(void 0!==u)return fr(n,u);switch(t){case"zeroOrMin":case"zeroOrMax":if(i){const e=o.get("type");if(T([Ji,Ki,Zi],e));else if(o.domainDefinitelyIncludesZero())return{scale:i,value:0}}if("zeroOrMin"===t)return"y"===s?{field:{group:"height"}}:{value:0};switch(s){case"radius":return{signal:"min(".concat(e.width.signal,",").concat(e.height.signal,")/2")};case"theta":return{signal:"2*PI"};case"x":return{field:{group:"width"}};case"y":return{value:0}}break;case"mid":return{...e[Tt(n)],mult:.5}}}}const Cu={left:"x",center:"xc",right:"x2"},Eu={top:"y",middle:"yc",bottom:"y2"};function Su(e,t,n,i="middle"){if("radius"===e||"theta"===e)return jt(e);const o="x"===e?"align":"baseline",r=Ba(o,t,n);let a;return Fi(r)?(si(function(e){return"The ".concat(e," for range marks cannot be an expression")}(o)),a=void 0):a=r,"x"===e?Cu[a||("top"===i?"left":"center")]:Eu[a||i]}function Bu(e,t,{defaultPos:n,defaultPos2:i,range:o}){return o?_u(e,t,{defaultPos:n,defaultPos2:i}):Fu(e,t,{defaultPos:n})}function _u(e,t,{defaultPos:n,defaultPos2:i}){const{markDef:o,config:r}=t,a=Mt(e),s=Tt(e),c=function(e,t,n){const{encoding:i,mark:o,markDef:r,stack:a,config:s}=e,c=Pt(n),u=Tt(n),l=jt(n),f=i[c],d=e.scaleName(c),p=e.getScaleComponent(c),m=Du(n in i||n in r?n:c,e.markDef);if(!f&&("x2"===n||"y2"===n)&&(i.latitude||i.longitude))return{[l]:{field:e.getName(n)}};const h=function({channel:e,channelDef:t,channel2Def:n,markDef:i,config:o,scaleName:r,scale:a,stack:s,offset:c,defaultRef:u}){if(Hr(t)&&s&&e.charAt(0)===s.fieldChannel.charAt(0))return cr(t,r,{suffix:"start"},{offset:c});return or({channel:e,channelDef:n,scaleName:r,scale:a,stack:s,markDef:i,config:o,offset:c,defaultRef:u})}({channel:n,channelDef:f,channel2Def:i[n],markDef:r,config:s,scaleName:d,scale:p,stack:a,offset:m,defaultRef:void 0});if(void 0!==h)return{[l]:h};return zu(n,r)||zu(n,{[n]:za(n,r,s.style),[u]:za(u,r,s.style)})||zu(n,s[o])||zu(n,s.mark)||{[l]:ku({model:e,defaultPos:t,channel:n,scaleName:d,scale:p})()}}(t,i,a);return{...Fu(e,t,{defaultPos:n,vgChannel:c[s]?Su(e,o,r):jt(e)}),...c}}function zu(e,t){const n=Tt(e),i=jt(e);return void 0!==t[i]?{[i]:fr(e,t[i])}:void 0!==t[e]?{[i]:fr(e,t[e])}:t[n]?{[n]:fr(e,t[n])}:void 0}function Ou(e,t,n){var i,o;const{config:r,encoding:a,markDef:s,stack:c}=e,l=Mt(t),f=Tt(t),d=a[t],p=a[l],m=e.getScaleComponent(t),h=m?m.get("type"):void 0,g=e.scaleName(t),v=s.orient,y=null!==(i=null!==(o=a[f])&&void 0!==o?o:a.size)&&void 0!==i?i:Ba("size",s,r,{vgChannel:f}),b="bar"===n&&("x"===t?"vertical"===v:"horizontal"===v);if(qr(d)&&(Fn(d.bin)||kn(d.bin)||d.timeUnit&&!p)&&!y&&!go(h)){var x,w;const n=Pr({channel:t,fieldDef:d,stack:c,markDef:s,config:r}),i=null===(x=e.component.axes[t])||void 0===x?void 0:x[0];return function({fieldDef:e,fieldDef2:t,channel:n,band:i,scaleName:o,markDef:r,spacing:a=0,axisTranslate:s,reverse:c,config:u}){const l=Mt(n),f=jt(n),d=jt(l),p=Du(n,r);if(Fn(e.bin)||e.timeUnit)return{[d]:ju({channel:n,fieldDef:e,scaleName:o,markDef:r,band:(1-i)/2,offset:Pu(l,a,c,s,p),config:u}),[f]:ju({channel:n,fieldDef:e,scaleName:o,markDef:r,band:1-(1-i)/2,offset:Pu(n,a,c,s,p),config:u})};if(kn(e.bin)){const i=cr(e,o,{},{offset:Pu(l,a,c,s,p)});if(qr(t))return{[d]:i,[f]:cr(t,o,{},{offset:Pu(n,a,c,s,p)})};if(Cn(e.bin)&&e.bin.step)return{[d]:i,[f]:{signal:'scale("'.concat(o,'", ').concat(Kr(e,{expr:"datum"})," + ").concat(e.bin.step,")"),offset:Pu(n,a,c,s,p)}}}return void si(oi(l))}({fieldDef:d,fieldDef2:p,channel:t,markDef:s,scaleName:g,band:n,axisTranslate:null!==(w=null==i?void 0:i.get("translate"))&&void 0!==w?w:.5,spacing:en(t)?Ba("binSpacing",s,r):void 0,reverse:m.get("reverse"),config:r})}return(Hr(d)&&go(h)||b)&&!p?function(e,t,n,i){var o;const{markDef:r,encoding:a,config:s,stack:c}=i,l=r.orient,f=i.scaleName(n),d=i.getScaleComponent(n),p=Tt(n),m=Mt(n),h="horizontal"===l&&"y"===n||"vertical"===l&&"x"===n,g=Ba(h?"size":p,r,s,{vgChannel:p});let v;(a.size||void 0!==g)&&(h?v=xu("size",i,{vgChannel:p,defaultValue:g}):si(function(e){return'Cannot apply size to non-oriented mark "'.concat(e,'".')}(r.type)));const y=null!==(o=Hr(t)?Pr({channel:n,fieldDef:t,markDef:r,stack:c,config:s}):void 0)&&void 0!==o?o:1;v=v||{[p]:Nu(e,p,f,d,s,y)};const b="band"!==(null==d?void 0:d.get("type"))||!("band"in v[p]),x=Su(n,r,s,b?"middle":"top"),w=Du(n,r),A=or({channel:n,channelDef:t,markDef:r,config:s,scaleName:f,scale:d,stack:c,offset:w,defaultRef:ku({model:i,defaultPos:"mid",channel:n,scaleName:f,scale:d}),band:b?.5:(1-y)/2});if(p)return{[x]:A,...v};{const e=jt(m),t=v[p],n=w?{...t,offset:w}:t;return{[x]:A,[e]:u(A)?[A[0],{...A[1],offset:n}]:{...A,offset:n}}}}(n,d,t,e):_u(t,e,{defaultPos:"zeroOrMax",defaultPos2:"zeroOrMin"})}function Nu(e,t,n,i,o,r){if(i){const t=i.get("type");if("point"===t||"band"===t){if(void 0!==o[e].discreteBandSize)return{value:o[e].discreteBandSize};if(t===io){const e=i.get("range");return ki(e)&&b(e.step)?{value:e.step-2}:{value:Ls-2}}return{scale:n,band:r}}return{value:o[e].continuousBandSize}}const a=Ms(o.view,t),s=ue(o[e].discreteBandSize,a-2);return void 0!==s?{value:s}:void 0}function Pu(e,t,n,i,o){if(mt(e))return 0;const r="x"===e||"y2"===e?-t/2:t/2;if(Fi(n)||Fi(o)||Fi(i)){const e=Ca(n),t=Ca(o),a=Ca(i);return{signal:(a?"".concat(a," + "):"")+(e?"(".concat(e," ? -1 : 1) * "):"")+(t?"(".concat(t," + ").concat(r,")"):r)}}return o=o||0,i+(n?-o-r:+o+r)}function ju({channel:e,fieldDef:t,scaleName:n,markDef:i,band:o,offset:r,config:a}){return rr({fieldDef:t,channel:e,markDef:i,ref:ur({scaleName:n,fieldOrDatumDef:t,band:o,offset:r}),config:a})}const Mu=new Set(["aria"]);function Tu(e,t){const{fill:n,stroke:i}="include"===t.color?wu(e):{};return{...qu(e.markDef,t),...Lu(e,"fill",n),...Lu(e,"stroke",i),...xu("opacity",e),...xu("fillOpacity",e),...xu("strokeOpacity",e),...xu("strokeWidth",e),...xu("strokeDash",e),...Au(e),...mu(e),...du(e,"href"),...vu(e)}}function Lu(e,t,n){const{config:i,mark:o,markDef:r}=e;if("hide"===Ba("invalid",r,i)&&n&&!Jo(o)){const i=function(e,{invalid:t=!1,channels:n}){const i=n.reduce(((t,n)=>{const i=e.getScaleComponent(n);if(i){const o=i.get("type"),r=e.vgField(n,{expr:"datum"});r&&vo(o)&&(t[r]=!0)}return t}),{}),o=J(i);if(o.length>0){const e=t?"||":"&&";return o.map((e=>sr(e,t))).join(" ".concat(e," "))}return}(e,{invalid:!0,channels:gn});if(i)return{[t]:[{test:i,value:null},...h(n)]}}return n?{[t]:n}:{}}function qu(e,t){return Ei.reduce(((n,i)=>(Mu.has(i)||void 0===e[i]||"ignore"===t[i]||(n[i]=Fa(e[i])),n)),{})}function Ru(e){const{config:t,markDef:n}=e;if(Ba("invalid",n,t)){const t=function(e,{invalid:t=!1,channels:n}){const i=n.reduce(((t,n)=>{const i=e.getScaleComponent(n);if(i){const o=i.get("type"),r=e.vgField(n,{expr:"datum"});r&&vo(o)&&(t[r]=!0)}return t}),{}),o=J(i);if(o.length>0){const e=t?"||":"&&";return o.map((e=>sr(e,t))).join(" ".concat(e," "))}return}(e,{channels:Zt});if(t)return{defined:{signal:t}}}return{}}function Wu(e,t){if(void 0!==t)return{[e]:Fa(t)}}const Uu="voronoi",Iu={has:e=>"interval"!==e.type&&e.nearest,parse:(e,t)=>{if(t.events)for(const n of t.events)n.markname=e.getName(Uu)},marks:(e,t,n)=>{const{x:i,y:o}=t.project.hasChannel,r=e.mark;if(Jo(r))return si('The "nearest" transform is not supported for '.concat(r," marks.")),n;const a={name:e.getName(Uu),type:"path",interactive:!0,from:{data:e.getName("marks")},encode:{update:{fill:{value:"transparent"},strokeWidth:{value:.35},stroke:{value:"transparent"},isVoronoi:{value:!0},...mu(e,{reactiveGeom:!0})}},transform:[{type:"voronoi",x:{expr:i||!o?"datum.datum.x || 0":"0"},y:{expr:o||!i?"datum.datum.y || 0":"0"},size:[e.getSizeSignalRef("width"),e.getSizeSignalRef("height")]}]};let s=0,c=!1;return n.forEach(((t,n)=>{var i;const o=null!==(i=t.name)&&void 0!==i?i:"";o===e.component.mark[0].name?s=n:o.indexOf(Uu)>=0&&(c=!0)})),c||n.splice(s+1,0,a),n}};class Hu{constructor(e,t){this.debugName=t,Bn(this,"_children",[]),Bn(this,"_parent",null),Bn(this,"_hash",void 0),e&&(this.parent=e)}clone(){throw new Error("Cannot clone node")}get parent(){return this._parent}set parent(e){this._parent=e,e&&e.addChild(this)}get children(){return this._children}numChildren(){return this._children.length}addChild(e,t){this._children.indexOf(e)>-1?si("Attempt to add the same child twice."):void 0!==t?this._children.splice(t,0,e):this._children.push(e)}removeChild(e){const t=this._children.indexOf(e);return this._children.splice(t,1),t}remove(){let e=this._parent.removeChild(this);for(const t of this._children)t._parent=this._parent,this._parent.addChild(t,e++)}insertAsParentOf(e){const t=e.parent;t.removeChild(this),this.parent=t,e.parent=this}swapWithParent(){const e=this._parent,t=e.parent;for(const t of this._children)t.parent=e;this._children=[],e.removeChild(this),e.parent.removeChild(e),this.parent=t,e.parent=this}}class Gu extends Hu{clone(){const e=new this.constructor;return e.debugName="clone_"+this.debugName,e._source=this._source,e._name="clone_"+this._name,e.type=this.type,e.refCounts=this.refCounts,e.refCounts[e._name]=0,e}constructor(e,t,n,i){super(e,t),this.type=n,this.refCounts=i,Bn(this,"_source",void 0),Bn(this,"_name",void 0),this._source=this._name=t,this.refCounts&&!(this._name in this.refCounts)&&(this.refCounts[this._name]=0)}dependentFields(){return new Set}producedFields(){return new Set}hash(){return void 0===this._hash&&(this._hash="Output ".concat(fe())),this._hash}getSource(){return this.refCounts[this._name]++,this._source}isRequired(){return!!this.refCounts[this._name]}setSource(e){this._source=e}}class Vu extends Hu{clone(){return new Vu(null,z(this.formula))}constructor(e,t){super(e),this.formula=t}static makeFromEncoding(e,t){const n=t.reduceFieldDef(((e,n,i)=>{const{field:o,timeUnit:r}=n,a=Em(t)?t.encoding[Mt(i)]:void 0,s=Em(t)&&jr(i,n,a,t.stack,t.markDef,t.config);if(r){const t=Kr(n,{forAs:!0});e[j({as:t,field:o,timeUnit:r})]={as:t,field:o,timeUnit:r,...s?{band:!0}:{}}}return e}),{});return Y(n)?null:new Vu(e,n)}static makeFromTransform(e,t){const{timeUnit:n,...i}={...t},o={...i,timeUnit:Di(n)};return new Vu(e,{[j(o)]:o})}merge(e){this.formula={...this.formula};for(const t in e.formula)this.formula[t]&&!e.formula[t].band||(this.formula[t]=e.formula[t]);for(const t of e.children)e.removeChild(t),t.parent=this;e.remove()}removeFormulas(e){const t={};for(const[n,i]of Q(this.formula))e.has(i.as)||(t[n]=i);this.formula=t}producedFields(){return new Set(X(this.formula).map((e=>e.as)))}dependentFields(){return new Set(X(this.formula).map((e=>e.field)))}hash(){return"TimeUnit ".concat(j(this.formula))}assemble(){const e=[];for(const t of X(this.formula)){const{field:n,as:i,timeUnit:o}=t,{unit:r,utc:a,...s}=Di(o);e.push({field:re(n),type:"timeunit",...r?{units:bi(r)}:{},...a?{timezone:"utc"}:{},...s,as:[i,"".concat(i,"_end")]})}return e}}const Yu="_tuple_fields";class Ju{constructor(...e){Bn(this,"hasChannel",void 0),Bn(this,"hasField",void 0),Bn(this,"timeUnit",void 0),Bn(this,"items",void 0),this.items=e,this.hasChannel={},this.hasField={}}}const Xu={has:e=>"single"===e.type&&"global"===e.resolve&&e.bind&&"scales"!==e.bind&&!ks(e.bind),parse:(e,t,n,i)=>{i.on||delete t.events,i.clear||delete t.clear},topLevelSignals:(e,t,n)=>{const i=t.name,o=t.project,r=t.bind,a=t.init&&t.init[0],s=Iu.has(t)?"(item().isVoronoi ? datum.datum : datum)":"datum";return o.items.forEach(((e,o)=>{const c=K("".concat(i,"_").concat(e.field));var u,l;n.filter((e=>e.name===c)).length||n.unshift({name:c,...a?{init:pl(a[o])}:{value:null},on:t.events?[{events:t.events,update:"datum && item().mark.marktype !== 'group' ? ".concat(s,"[").concat(w(e.field),"] : null")}]:[],bind:null!==(u=null!==(l=r[e.field])&&void 0!==l?l:r[e.channel])&&void 0!==u?u:r})})),n},signals:(e,t,n)=>{const i=t.name,o=t.project,r=n.filter((e=>e.name===i+kl))[0],a=i+Yu,s=o.items.map((e=>K("".concat(i,"_").concat(e.field)))),c=s.map((e=>"".concat(e," !== null"))).join(" && ");return s.length&&(r.update="".concat(c," ? {fields: ").concat(a,", values: [").concat(s.join(", "),"]} : null")),delete r.value,delete r.on,n}},Qu="_toggle",$u={has:e=>"multi"===e.type&&!!e.toggle,signals:(e,t,n)=>n.concat({name:t.name+Qu,value:!1,on:[{events:t.events,update:t.toggle}]}),modifyExpr:(e,t)=>{const n=t.name+kl,i=t.name+Qu;return"".concat(i," ? null : ").concat(n,", ")+("global"===t.resolve?"".concat(i," ? null : true, "):"".concat(i," ? null : {unit: ").concat(_l(e),"}, "))+"".concat(i," ? ").concat(n," : null")}},Ku={has:e=>void 0!==e.clear&&!1!==e.clear,parse:(e,t,n)=>{n.clear&&(t.clear=x(n.clear)?su(n.clear,"scope"):n.clear)},topLevelSignals:(e,t,n)=>{if(Xu.has(t))for(const e of t.project.items){const i=n.findIndex((n=>n.name===K("".concat(t.name,"_").concat(e.field))));-1!==i&&n[i].on.push({events:t.clear,update:"null"})}return n},signals:(e,t,n)=>{function i(e,i){-1!==e&&n[e].on&&n[e].on.push({events:t.clear,update:i})}if("interval"===t.type)for(const e of t.project.items){const t=n.findIndex((t=>t.name===e.signals.visual));if(i(t,"[0, 0]"),-1===t){i(n.findIndex((t=>t.name===e.signals.data)),"null")}}else{let e=n.findIndex((e=>e.name===t.name+kl));i(e,"null"),$u.has(t)&&(e=n.findIndex((e=>e.name===t.name+Qu)),i(e,"false"))}return n}},Zu={has:e=>"interval"===e.type&&"global"===e.resolve&&e.bind&&"scales"===e.bind,parse:(e,t)=>{const n=t.scales=[];for(const i of t.project.items){const o=i.channel;if(!vn(o))continue;const r=e.getScaleComponent(o),a=r?r.get("type"):void 0;if(!r||!vo(a)){si("Scale bindings are currently only supported for scales with unbinned, continuous domains.");continue}const s={selection:t.name,field:i.field};r.set("selectionExtent",s,!0),n.push(i)}},topLevelSignals:(e,t,n)=>{const i=t.scales.filter((e=>0===n.filter((t=>t.name===e.signals.data)).length));if(!e.parent||tl(e)||0===i.length)return n;const o=n.filter((e=>e.name===t.name))[0];let r=o.update;if(r.indexOf(El)>=0)o.update="{".concat(i.map((e=>"".concat(w(e.field),": ").concat(e.signals.data))).join(", "),"}");else{for(const e of i){const t="".concat(w(e.field),": ").concat(e.signals.data);r.indexOf(t)<0&&(r="".concat(r.substring(0,r.length-1),", ").concat(t,"}"))}o.update=r}return n.concat(i.map((e=>({name:e.signals.data}))))},signals:(e,t,n)=>{if(e.parent&&!tl(e))for(const e of t.scales){const t=n.filter((t=>t.name===e.signals.data))[0];t.push="outer",delete t.value,delete t.update}return n}};function el(e,t){const n=w(e.scaleName(t));return"domain(".concat(n,")")}function tl(e){var t;return e.parent&&_m(e.parent)&&(null!==(t=!e.parent.parent)&&void 0!==t?t:tl(e.parent.parent))}const nl={has:e=>{const t="global"===e.resolve&&e.bind&&ks(e.bind),n=1===e.project.items.length&&e.project.items[0].field!==Ds;return t&&!n&&si("Legend bindings are only supported for selections over an individual field or encoding channel."),t&&n},parse:(e,t,n,i)=>{if(i.on||delete t.events,i.clear||delete t.clear,i.on||i.clear){const e='event.item && indexof(event.item.mark.role, "legend") < 0';for(const n of t.events){var o;n.filter=h(null!==(o=n.filter)&&void 0!==o?o:[]),n.filter.indexOf(e)<0&&n.filter.push(e)}}const r=Cs(t.bind)?t.bind.legend:"click",a=x(r)?su(r,"view"):h(r);t.bind={legend:{merge:a}}},topLevelSignals:(e,t,n)=>{const i=t.name,o=Cs(t.bind)&&t.bind.legend,r=e=>t=>{const n=z(t);return n.markname=e,n};for(const e of t.project.items){if(!e.hasLegend)continue;const a="".concat(K(e.field),"_legend"),s="".concat(i,"_").concat(a);if(0===n.filter((e=>e.name===s)).length){const e=o.merge.map(r("".concat(a,"_symbols"))).concat(o.merge.map(r("".concat(a,"_labels")))).concat(o.merge.map(r("".concat(a,"_entries"))));n.unshift({name:s,...t.init?{}:{value:null},on:[{events:e,update:"datum.value || item().items[0].items[0].datum.value",force:!0},{events:o.merge,update:"!event.item || !datum ? null : ".concat(s),force:!0}]})}}return n},signals:(e,t,n)=>{const i=t.name,o=t.project,r=n.find((e=>e.name===i+kl)),a=i+Yu,s=o.items.filter((e=>e.hasLegend)).map((e=>K("".concat(i,"_").concat(K(e.field),"_legend")))),c=s.map((e=>"".concat(e," !== null"))).join(" && "),u="".concat(c," ? {fields: ").concat(a,", values: [").concat(s.join(", "),"]} : null");t.events&&s.length>0?r.on.push({events:s.map((e=>({signal:e}))),update:u}):s.length>0&&(r.update=u,delete r.value,delete r.on);const l=n.find((e=>e.name===i+Qu)),f=Cs(t.bind)&&t.bind.legend;return l&&(t.events?l.on.push({...l.on[0],events:f}):l.on[0].events=f),n}};const il="_translate_anchor",ol="_translate_delta",rl={has:e=>"interval"===e.type&&e.translate,signals:(e,t,n)=>{const i=t.name,o=Zu.has(t),r=i+il,{x:a,y:s}=t.project.hasChannel;let c=su(t.translate,"scope");return o||(c=c.map((e=>(e.between[0].markname=i+vl,e)))),n.push({name:r,value:{},on:[{events:c.map((e=>e.between[0])),update:"{x: x(unit), y: y(unit)"+(void 0!==a?", extent_x: "+(o?el(e,Me):"slice(".concat(a.signals.visual,")")):"")+(void 0!==s?", extent_y: "+(o?el(e,Te):"slice(".concat(s.signals.visual,")")):"")+"}"}]},{name:i+ol,value:{},on:[{events:c,update:"{x: ".concat(r,".x - x(unit), y: ").concat(r,".y - y(unit)}")}]}),void 0!==a&&al(e,t,a,"width",n),void 0!==s&&al(e,t,s,"height",n),n}};function al(e,t,n,i,o){var r;const a=t.name,s=a+il,c=a+ol,u=n.channel,l=Zu.has(t),f=o.filter((e=>e.name===n.signals[l?"data":"visual"]))[0],d=e.getSizeSignalRef(i).signal,p=e.getScaleComponent(u),m=p.get("type"),h=l&&u===Me?"-":"",g="".concat(s,".extent_").concat(u),v="".concat(h).concat(c,".").concat(u," / ")+(l?"".concat(d):"span(".concat(g,")")),y="".concat(l?"log"===m?"panLog":"pow"===m?"panPow":"panLinear":"panLinear","(").concat(g,", ").concat(v)+(l&&"pow"===m?", ".concat(null!==(r=p.get("exponent"))&&void 0!==r?r:1):"")+")";f.on.push({events:{signal:c},update:l?y:"clampRange(".concat(y,", 0, ").concat(d,")")})}const sl="_zoom_anchor",cl="_zoom_delta",ul={has:e=>"interval"===e.type&&e.zoom,signals:(e,t,n)=>{const i=t.name,o=Zu.has(t),r=i+cl,{x:a,y:s}=t.project.hasChannel,c=w(e.scaleName(Me)),u=w(e.scaleName(Te));let l=su(t.zoom,"scope");return o||(l=l.map((e=>(e.markname=i+vl,e)))),n.push({name:i+sl,on:[{events:l,update:o?"{"+[c?"x: invert(".concat(c,", x(unit))"):"",u?"y: invert(".concat(u,", y(unit))"):""].filter((e=>!!e)).join(", ")+"}":"{x: x(unit), y: y(unit)}"}]},{name:r,on:[{events:l,force:!0,update:"pow(1.001, event.deltaY * pow(16, event.deltaMode))"}]}),void 0!==a&&ll(e,t,a,"width",n),void 0!==s&&ll(e,t,s,"height",n),n}};function ll(e,t,n,i,o){var r;const a=t.name,s=n.channel,c=Zu.has(t),u=o.filter((e=>e.name===n.signals[c?"data":"visual"]))[0],l=e.getSizeSignalRef(i).signal,f=e.getScaleComponent(s),d=f.get("type"),p=c?el(e,s):u.name,m=a+cl,h="".concat(a).concat(sl,".").concat(s),g="".concat(c?"log"===d?"zoomLog":"pow"===d?"zoomPow":"zoomLinear":"zoomLinear","(").concat(p,", ").concat(h,", ").concat(m)+(c&&"pow"===d?", ".concat(null!==(r=f.get("exponent"))&&void 0!==r?r:1):"")+")";u.on.push({events:{signal:m},update:c?g:"clampRange(".concat(g,", 0, ").concat(l,")")})}const fl=[{has:()=>!0,parse:(e,t,n)=>{var i;const o=t.name,r=null!==(i=t.project)&&void 0!==i?i:t.project=new Ju,a={},s={},c=new Set,u=(e,t)=>{const n="visual"===t?e.channel:e.field;let i=K("".concat(o,"_").concat(n));for(let e=1;c.has(i);e++)i=K("".concat(o,"_").concat(n,"_").concat(e));return c.add(i),{[t]:i}};if(!n.fields&&!n.encodings){const t=e.config.selection[n.type];if(n.init)for(const e of h(n.init))for(const i of J(e))_t[i]?(n.encodings||(n.encodings=[])).push(i):"interval"===n.type?(si('Interval selections should be initialized using "x" and/or "y" keys.'),n.encodings=t.encodings):(n.fields||(n.fields=[])).push(i);else n.encodings=t.encodings,n.fields=t.fields}for(const e of null!==(l=n.fields)&&void 0!==l?l:[]){var l;const t={type:"E",field:e};t.signals={...u(t,"data")},r.items.push(t),r.hasField[e]=t}for(const i of null!==(f=n.encodings)&&void 0!==f?f:[]){var f;const n=e.fieldDef(i);if(n){let o=n.field;if(n.aggregate){si(Ln(i,n.aggregate));continue}if(!o){si(Tn(i));continue}if(n.timeUnit){o=e.vgField(i);const t={timeUnit:n.timeUnit,as:o,field:n.field};s[j(t)]=t}if(!a[o]){let s="E";if("interval"===t.type){vo(e.getScaleComponent(i).get("type"))&&(s="R")}else n.bin&&(s="R-RE");const c={field:o,channel:i,type:s};c.signals={...u(c,"data"),...u(c,"visual")},r.items.push(a[o]=c),r.hasField[o]=r.hasChannel[i]=a[o]}}else si(Tn(i))}if(n.init){const e=e=>r.items.map((t=>void 0!==e[t.channel]?e[t.channel]:e[t.field]));if("interval"===n.type)t.init=e(n.init);else{const i=h(n.init);t.init=i.map(e)}}Y(s)||(r.timeUnit=new Vu(null,s))},signals:(e,t,n)=>{const i=t.name+Yu;return n.filter((e=>e.name===i)).length>0?n:n.concat({name:i,value:t.project.items.map((e=>{const{signals:t,hasLegend:n,...i}=e;return i.field=re(i.field),i}))})}},$u,Zu,nl,rl,ul,Xu,Iu,Ku];function dl(e,t){for(const n of fl)n.has(e)&&t(n)}function pl(e,t=!0,n=s){if(u(e)){const i=e.map((e=>pl(e,t,n)));return t?"[".concat(i.join(", "),"]"):i}return ci(e)?n(t?mi(e):function(e){const t=pi(e,!0);return e.utc?+new Date(Date.UTC(...t)):+new Date(...t)}(e)):t?n(JSON.stringify(e)):e}function ml(e,t){if(e.component.selection&&J(e.component.selection).length){const n=w(e.getName("cell"));t.unshift({name:"facet",value:{},on:[{events:su("mousemove","scope"),update:"isTuple(facet) ? facet : group(".concat(n,").datum")}]})}return gl(t)}function hl(e,t){return Bl(e,((n,i)=>{t=i.marks?i.marks(e,n,t):t,dl(n,(i=>{i.marks&&(t=i.marks(e,n,t))}))})),t}function gl(e){return e.map((e=>(e.on&&!e.on.length&&delete e.on,e)))}const vl="_brush",yl="_scale_trigger",bl={signals:(e,t)=>{const n=t.name,i=n+Yu,o=Zu.has(t),r=[],a=[],s=[];if(t.translate&&!o){const e="!event.item || event.item.mark.name !== ".concat(w(n+vl));xl(t,((t,n)=>{var i;const o=h(null!==(i=n.between[0].filter)&&void 0!==i?i:n.between[0].filter=[]);return o.indexOf(e)<0&&o.push(e),t}))}t.project.items.forEach(((n,i)=>{const o=n.channel;if(o!==Me&&o!==Te)return void si("Interval selections only support x and y encoding channels.");const c=t.init?t.init[i]:null,u=function(e,t,n,i){const o=n.channel,r=n.signals.visual,a=n.signals.data,s=Zu.has(t),c=w(e.scaleName(o)),u=e.getScaleComponent(o),l=u?u.get("type"):void 0,f=e=>"scale(".concat(c,", ").concat(e,")"),d=e.getSizeSignalRef(o===Me?"width":"height").signal,p="".concat(o,"(unit)"),m=xl(t,((e,t)=>[...e,{events:t.between[0],update:"[".concat(p,", ").concat(p,"]")},{events:t,update:"[".concat(r,"[0], clamp(").concat(p,", 0, ").concat(d,")]")}]));return m.push({events:{signal:t.name+yl},update:vo(l)?"[".concat(f("".concat(a,"[0]")),", ").concat(f("".concat(a,"[1]")),"]"):"[0, 0]"}),s?[{name:a,on:[]}]:[{name:r,...i?{init:pl(i,!0,f)}:{value:[]},on:m},{name:a,...i?{init:pl(i)}:{},on:[{events:{signal:r},update:"".concat(r,"[0] === ").concat(r,"[1] ? null : invert(").concat(c,", ").concat(r,")")}]}]}(e,t,n,c),l=n.signals.data,f=n.signals.visual,d=w(e.scaleName(o)),p=vo(e.getScaleComponent(o).get("type"))?"+":"";r.push(...u),a.push(l),s.push({scaleName:e.scaleName(o),expr:"(!isArray(".concat(l,") || ")+"(".concat(p,"invert(").concat(d,", ").concat(f,")[0] === ").concat(p).concat(l,"[0] && ")+"".concat(p,"invert(").concat(d,", ").concat(f,")[1] === ").concat(p).concat(l,"[1]))")})})),o||r.push({name:n+yl,value:{},on:[{events:s.map((e=>({scale:e.scaleName}))),update:s.map((e=>e.expr)).join(" && ")+" ? ".concat(n+yl," : {}")}]});const c=t.init,u="unit: ".concat(_l(e),", fields: ").concat(i,", values");return r.concat({name:n+kl,...c?{init:"{".concat(u,": ").concat(pl(c),"}")}:{},on:[{events:[{signal:a.join(" || ")}],update:a.join(" && ")+" ? {".concat(u,": [").concat(a,"]} : null")}]})},modifyExpr:(e,t)=>t.name+kl+", "+("global"===t.resolve?"true":"{unit: ".concat(_l(e),"}")),marks:(e,t,n)=>{const i=t.name,{x:o,y:r}=t.project.hasChannel,a=o&&o.signals.visual,s=r&&r.signals.visual,c="data(".concat(w(t.name+Fl),")");if(Zu.has(t))return n;const u={x:void 0!==o?{signal:"".concat(a,"[0]")}:{value:0},y:void 0!==r?{signal:"".concat(s,"[0]")}:{value:0},x2:void 0!==o?{signal:"".concat(a,"[1]")}:{field:{group:"width"}},y2:void 0!==r?{signal:"".concat(s,"[1]")}:{field:{group:"height"}}};if("global"===t.resolve)for(const t of J(u))u[t]=[{test:"".concat(c,".length && ").concat(c,"[0].unit === ").concat(_l(e)),...u[t]},{value:0}];const{fill:l,fillOpacity:f,cursor:d,...p}=t.mark,m=J(p).reduce(((e,t)=>(e[t]=[{test:[void 0!==o&&"".concat(a,"[0] !== ").concat(a,"[1]"),void 0!==r&&"".concat(s,"[0] !== ").concat(s,"[1]")].filter((e=>e)).join(" && "),value:p[t]},{value:null}],e)),{});return[{name:i+vl+"_bg",type:"rect",clip:!0,encode:{enter:{fill:{value:l},fillOpacity:{value:f}},update:u}},...n,{name:i+vl,type:"rect",clip:!0,encode:{enter:{...d?{cursor:{value:d}}:{},fill:{value:"transparent"}},update:{...u,...m}}}]}};function xl(e,t){return e.events.reduce(((e,n)=>n.between?t(e,n):(si("".concat(n," is not an ordered event stream for interval selections.")),e)),[])}function wl(e,t){const n=t.name,i=n+Yu,o=t.project,r="(item().isVoronoi ? datum.datum : datum)",a=o.items.map((t=>{const n=e.fieldDef(t.channel);return n&&n.bin?"[".concat(r,"[").concat(w(e.vgField(t.channel,{})),"], ")+"".concat(r,"[").concat(w(e.vgField(t.channel,{binSuffix:"end"})),"]]"):"".concat(r,"[").concat(w(t.field),"]")})).join(", "),s="unit: ".concat(_l(e),", fields: ").concat(i,", values"),c=t.events;return[{name:n+kl,on:c?[{events:c,update:"datum && item().mark.marktype !== 'group' ? {".concat(s,": [").concat(a,"]} : null"),force:!0}]:[]}]}const Al={signals:wl,modifyExpr:(e,t)=>t.name+kl+", "+("global"===t.resolve?"null":"{unit: ".concat(_l(e),"}"))},Dl={signals:wl,modifyExpr:(e,t)=>t.name+kl+", "+("global"===t.resolve?"true":"{unit: ".concat(_l(e),"}"))},Fl="_store",kl="_tuple",Cl="_modify",El="vlSelectionResolve",Sl={single:Dl,multi:Al,interval:bl};function Bl(e,t){const n=e.component.selection;if(n)for(const e of X(n)){if(!0===t(e,Sl[e.type]))break}}function _l(e,{escape:t}={escape:!0}){let n=t?w(e.name):e.name;const i=function(e){let t=e.parent;for(;t&&!Sm(t);)t=t.parent;return t}(e);if(i){const{facet:e}=i;for(const t of xt)e[t]&&(n+=" + '__facet_".concat(t,"_' + (facet[").concat(w(i.vgField(t)),"])"))}return n}function zl(e){let t=!1;return Bl(e,(e=>{t=t||e.project.items.some((e=>e.field===Ds))})),t}const Ol="RawCode",Nl="Literal",Pl="Property",jl="Identifier",Ml="ArrayExpression",Tl="BinaryExpression",Ll="CallExpression",ql="ConditionalExpression",Rl="LogicalExpression",Wl="MemberExpression",Ul="ObjectExpression",Il="UnaryExpression";function Hl(e){this.type=e}var Gl,Vl,Yl,Jl,Xl;Hl.prototype.visit=function(e){let t,n,i;if(e(this))return 1;for(t=function(e){switch(e.type){case Ml:return e.elements;case Tl:case Rl:return[e.left,e.right];case Ll:return[e.callee].concat(e.arguments);case ql:return[e.test,e.consequent,e.alternate];case Wl:return[e.object,e.property];case Ul:return e.properties;case Pl:return[e.key,e.value];case Il:return[e.argument];case jl:case Nl:case Ol:default:return[]}}(this),n=0,i=t.length;n",Gl[3]="Identifier",Gl[4]="Keyword",Gl[5]="Null",Gl[6]="Numeric",Gl[7]="Punctuator",Gl[8]="String",Gl[9]="RegularExpression";var Ql="Identifier",$l="Unexpected token %0",Kl="Invalid regular expression",Zl="Invalid regular expression: missing /",ef="Octal literals are not allowed in strict mode.",tf="ILLEGAL",nf="Disabled.",of=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),rf=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]");function af(e,t){if(!e)throw new Error("ASSERT: "+t)}function sf(e){return e>=48&&e<=57}function cf(e){return"0123456789abcdefABCDEF".indexOf(e)>=0}function uf(e){return"01234567".indexOf(e)>=0}function lf(e){return 32===e||9===e||11===e||12===e||160===e||e>=5760&&[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(e)>=0}function ff(e){return 10===e||13===e||8232===e||8233===e}function df(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||92===e||e>=128&&of.test(String.fromCharCode(e))}function pf(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||92===e||e>=128&&rf.test(String.fromCharCode(e))}const mf={if:1,in:1,do:1,var:1,for:1,new:1,try:1,let:1,this:1,else:1,case:1,void:1,with:1,enum:1,while:1,break:1,catch:1,throw:1,const:1,yield:1,class:1,super:1,return:1,typeof:1,delete:1,switch:1,export:1,import:1,public:1,static:1,default:1,finally:1,extends:1,package:1,private:1,function:1,continue:1,debugger:1,interface:1,protected:1,instanceof:1,implements:1};function hf(){for(;Yl1114111||"}"!==e)&&Of({},$l,tf),t<=65535?String.fromCharCode(t):(n=55296+(t-65536>>10),i=56320+(t-65536&1023),String.fromCharCode(n,i))}function yf(){var e,t;for(e=Vl.charCodeAt(Yl++),t=String.fromCharCode(e),92===e&&(117!==Vl.charCodeAt(Yl)&&Of({},$l,tf),++Yl,(e=gf("u"))&&"\\"!==e&&df(e.charCodeAt(0))||Of({},$l,tf),t=e);Yl>>="===(i=Vl.substr(Yl,4))?{type:7,value:i,start:o,end:Yl+=4}:">>>"===(n=i.substr(0,3))||"<<="===n||">>="===n?{type:7,value:n,start:o,end:Yl+=3}:a===(t=n.substr(0,2))[1]&&"+-<>&|".indexOf(a)>=0||"=>"===t?{type:7,value:t,start:o,end:Yl+=2}:"<>=!+-*%&|^/".indexOf(a)>=0?{type:7,value:a,start:o,end:++Yl}:void Of({},$l,tf)}function wf(){var e,t,n;if(af(sf((n=Vl[Yl]).charCodeAt(0))||"."===n,"Numeric literal must start with a decimal digit or a decimal point"),t=Yl,e="","."!==n){if(e=Vl[Yl++],n=Vl[Yl],"0"===e){if("x"===n||"X"===n)return++Yl,function(e){let t="";for(;Yl=0&&Of({},Kl,n),{value:n,literal:t}}(),i=function(e,t){let n=e;t.indexOf("u")>=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}/g,((e,t)=>{if(parseInt(t,16)<=1114111)return"x";Of({},Kl)})).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"x"));try{new RegExp(n)}catch(e){Of({},Kl)}try{return new RegExp(e,t)}catch(e){return null}}(t.value,n.value),{literal:t.literal+n.literal,value:i,regex:{pattern:t.value,flags:n.value},start:e,end:Yl}}function Df(){if(hf(),Yl>=Jl)return{type:2,start:Yl,end:Yl};const e=Vl.charCodeAt(Yl);return df(e)?bf():40===e||41===e||59===e?xf():39===e||34===e?function(){var e,t,n,i,o="",r=!1;for(af("'"===(e=Vl[Yl])||'"'===e,"String literal must starts with a quote"),t=Yl,++Yl;Yl=0&&Yl(af(t":case"<=":case">=":case"instanceof":case"in":t=7;break;case"<<":case">>":case">>>":t=8;break;case"+":case"-":t=9;break;case"*":case"/":case"%":t=11}return t}function Xf(){var e,t;return e=function(){var e,t,n,i,o,r,a,s,c,u;if(e=Xl,c=Yf(),0===(o=Jf(i=Xl)))return c;for(i.prec=o,Ff(),t=[e,Xl],r=[c,i,a=Yf()];(o=Jf(Xl))>0;){for(;r.length>2&&o<=r[r.length-2].prec;)a=r.pop(),s=r.pop().value,c=r.pop(),t.pop(),n=Cf(s,c,a),r.push(n);(i=Ff()).prec=o,r.push(i),t.push(Xl),n=Yf(),r.push(n)}for(n=r[u=r.length-1],t.pop();u>1;)t.pop(),n=Cf(r[u-1].value,r[u-2],n),u-=2;return n}(),jf("?")&&(Ff(),t=Xf(),Pf(":"),e=function(e,t,n){const i=new Hl("ConditionalExpression");return i.test=e,i.consequent=t,i.alternate=n,i}(e,t,Xf())),e}function Qf(){const e=Xf();if(jf(","))throw new Error(nf);return e}function $f(e){const t=[];return"Identifier"===e.type?[e.name]:"Literal"===e.type?[e.value]:("MemberExpression"===e.type&&(t.push(...$f(e.object)),t.push(...$f(e.property))),t)}function Kf(e){return"MemberExpression"===e.object.type?Kf(e.object):"datum"===e.object.name}function Zf(e){const t=function(e){Yl=0,Jl=(Vl=e).length,Xl=null,kf();const t=Qf();if(2!==Xl.type)throw new Error("Unexpect token after expression.");return t}(e),n=new Set;return t.visit((e=>{"MemberExpression"===e.type&&Kf(e)&&n.add($f(e).slice(1).join("."))})),n}class ed extends Hu{clone(){return new ed(null,this.model,z(this.filter))}constructor(e,t,n){super(e),this.model=t,this.filter=n,Bn(this,"expr",void 0),Bn(this,"_dependentFields",void 0),this.expr=id(this.model,this.filter,this),this._dependentFields=Zf(this.expr)}dependentFields(){return this._dependentFields}producedFields(){return new Set}assemble(){return{type:"filter",expr:this.expr}}hash(){return"Filter ".concat(this.expr)}}function td(e,t,n,i="datum"){const o=[];const r=Z(t,(function(t){const r=K(t),a=e.getSelectionComponent(r,t),s=w(r+Fl);if(a.project.timeUnit){const t=null!=n?n:e.component.data.raw,i=a.project.timeUnit.clone();t.parent?i.insertAsParentOf(t):t.parent=i}return"none"!==a.empty&&o.push(s),"vlSelectionTest(".concat(s,", ").concat(i)+("global"===a.resolve?")":", ".concat(w(a.resolve),")"))}));return(o.length?"!("+o.map((e=>"length(data(".concat(e,"))"))).join(" || ")+") || ":"")+"(".concat(r,")")}function nd(e,t){const n=t.encoding;let i=t.field;if(n||i){if(n&&!i){const o=e.project.items.filter((e=>e.channel===n));!o.length||o.length>1?(i=e.project.items[0].field,si((o.length?"Multiple ":"No ")+"matching ".concat(w(n)," encoding found for selection ").concat(w(t.selection),". ")+'Using "field": '.concat(w(i),"."))):i=o[0].field}}else i=e.project.items[0].field,e.project.items.length>1&&si('A "field" or "encoding" must be specified when using a selection as a scale domain. '+'Using "field": '.concat(w(i),"."));return"".concat(e.name,"[").concat(w(i),"]")}function id(e,t,n){return Z(t,(t=>x(t)?t:function(e){return null==e?void 0:e.selection}(t)?td(e,t.selection,n):qi(t)))}function od(e,t,n,i){var o,r,a;e.encode=null!==(o=e.encode)&&void 0!==o?o:{},e.encode[t]=null!==(r=e.encode[t])&&void 0!==r?r:{},e.encode[t].update=null!==(a=e.encode[t].update)&&void 0!==a?a:{},e.encode[t].update[n]=i}function rd(e,t,n,i={header:!1}){const{disable:o,orient:r,scale:a,labelExpr:s,title:c,zindex:l,...f}=e.combine();if(!o){for(const e in f){const n=be[e],i=f[e];if(n&&n!==t&&"both"!==n)delete f[e];else if(ve(i)){const{condition:t,...n}=i,o=h(t),r=ge[e];if(r){const{vgProp:t,part:i}=r;od(f,i,t,[...o.map((e=>{const{test:t,...n}=e;return{test:id(null,t),...n}})),n]),delete f[e]}else if(null===r){const t={signal:o.map((e=>{const{test:t,...n}=e;return"".concat(id(null,t)," ? ").concat(ka(n)," : ")})).join("")+ka(n)};f[e]=t}}else if(Fi(i)){const t=ge[e];if(t){const{vgProp:n,part:o}=t;od(f,o,n,i),delete f[e]}}}if("grid"===t){if(!f.grid)return;if(f.encode){const{grid:e}=f.encode;f.encode={...e?{grid:e}:{}},Y(f.encode)&&delete f.encode}return{scale:a,orient:r,...f,domain:!1,labels:!1,aria:!1,maxExtent:0,minExtent:0,ticks:!1,zindex:ue(l,0)}}{if(!i.header&&e.mainExtracted)return;if(void 0!==s){var d,p;let e=s;(null===(d=f.encode)||void 0===d||null===(p=d.labels)||void 0===p?void 0:p.update)&&Fi(f.encode.labels.update.text)&&(e=ae(s,"datum.label",f.encode.labels.update.text.signal)),od(f,"labels","text",{signal:e})}if(null===f.labelAlign&&delete f.labelAlign,f.encode){for(const t of ye)e.hasAxisPart(t)||delete f.encode[t];Y(f.encode)&&delete f.encode}const t=function(e,t){if(e)return u(e)&&!xa(e)?e.map((e=>aa(e,t))).join(", "):e}(c,n);return{scale:a,orient:r,grid:!1,...t?{title:t}:{},...f,...!1===n.aria?{aria:!1}:{},zindex:ue(l,0)}}}}function ad(e){const{axes:t}=e.component,n=[];for(const i of Zt)if(t[i])for(const o of t[i])if(!o.get("disable")&&!o.get("gridScale")){const t="x"===i?"height":"width",o=e.getSizeSignalRef(t).signal;t!==o&&n.push({name:t,update:o})}return n}function sd(e,t,n,i){return Object.assign.apply(null,[{},...e.map((e=>{if("axisOrient"===e){const e="x"===n?"bottom":"left",o=t["x"===n?"axisBottom":"axisLeft"]||{},r=t["x"===n?"axisTop":"axisRight"]||{},a=new Set([...J(o),...J(r)]),s={};for(const t of a.values())s[t]={signal:"".concat(i.signal,' === "').concat(e,'" ? ').concat(Ca(o[t])," : ").concat(Ca(r[t]))};return s}return t[e]}))])}function cd(e,t,n,i){const o="band"===t?["axisDiscrete","axisBand"]:"point"===t?["axisDiscrete","axisPoint"]:function(e){return e in fo}(t)?["axisQuantitative"]:"time"===t||"utc"===t?["axisTemporal"]:[],r="x"===e?"axisX":"axisY",a=Fi(n)?"axisOrient":"axis"+te(n),s=[...o,...o.map((e=>r+e.substr(4)))],c=["axis",a,r];return{vlOnlyAxisConfig:sd(s,i,e,n),vgAxisConfig:sd(c,i,e,n),axisConfigStyle:ud([...c,...s],i)}}function ud(e,t){const n=[{}];for(const o of e){var i;let e=null===(i=t[o])||void 0===i?void 0:i.style;if(e){e=h(e);for(const i of e)n.push(t.style[i])}}return Object.assign.apply(null,n)}function ld(e,t,n,i={}){const o=Oa(e,n,t);if(void 0!==o)return{configFrom:"style",configValue:o};for(const t of["vlOnlyAxisConfig","vgAxisConfig","axisConfigStyle"]){var r;if(void 0!==(null===(r=i[t])||void 0===r?void 0:r[e]))return{configFrom:t,configValue:i[t][e]}}return{}}const fd={scale:({model:e,channel:t})=>e.scaleName(t),format:({fieldOrDatumDef:e,config:t,axis:n})=>{const{format:i,formatType:o}=n;return vr(e,e.type,i,o,t,!0)},formatType:({axis:e,fieldOrDatumDef:t,scaleType:n})=>{const{formatType:i}=e;return yr(i,t,n)},grid:({fieldOrDatumDef:e,axis:t,scaleType:n})=>{return(!qr(e)||!kn(e.bin))&&(null!==(i=t.grid)&&void 0!==i?i:function(e,t){return!go(e)&&qr(t)&&!Fn(null==t?void 0:t.bin)}(n,e));var i},gridScale:({model:e,channel:t})=>function(e,t){const n="x"===t?"y":"x";if(e.getScaleComponent(n))return e.scaleName(n);return}(e,t),labelAlign:({axis:e,labelAngle:t,orient:n,channel:i})=>e.labelAlign||md(t,n,i),labelAngle:({labelAngle:e})=>e,labelBaseline:({axis:e,labelAngle:t,orient:n,channel:i})=>e.labelBaseline||pd(t,n,i),labelFlush:({axis:e,fieldOrDatumDef:t,channel:n})=>{var i;return null!==(i=e.labelFlush)&&void 0!==i?i:function(e,t){if("x"===t&&T(["quantitative","temporal"],e))return!0;return}(t.type,n)},labelOverlap:({axis:e,fieldOrDatumDef:t,scaleType:n})=>{var i;return null!==(i=e.labelOverlap)&&void 0!==i?i:function(e,t,n,i){if(n&&!l(i)||"nominal"!==e&&"ordinal"!==e)return"log"!==t&&"symlog"!==t||"greedy";return}(t.type,n,qr(t)&&!!t.timeUnit,qr(t)?t.sort:void 0)},orient:({orient:e})=>e,tickCount:({channel:e,model:t,axis:n,fieldOrDatumDef:i,scaleType:o})=>{var r;const a="x"===e?"width":"y"===e?"height":void 0,s=a?t.getSizeSignalRef(a):void 0;return null!==(r=n.tickCount)&&void 0!==r?r:function({fieldOrDatumDef:e,scaleType:t,size:n,values:i}){if(!i&&!go(t)&&"log"!==t){if(qr(e)){var o;if(Fn(e.bin))return{signal:"ceil(".concat(n.signal,"/10)")};if(e.timeUnit&&T(["month","hours","day","quarter"],null===(o=Di(e.timeUnit))||void 0===o?void 0:o.unit))return}return{signal:"ceil(".concat(n.signal,"/40)")}}return}({fieldOrDatumDef:i,scaleType:o,size:s,values:n.values})},title:({axis:e,model:t,channel:n})=>{if(void 0!==e.title)return e.title;const i=hd(t,n);if(void 0!==i)return i;const o=t.typedFieldDef(n),r="x"===n?"x2":"y2",a=t.fieldDef(r);return Pa(o?[Or(o)]:[],qr(a)?[Or(a)]:[])},values:({axis:e,fieldOrDatumDef:t})=>function(e,t){const n=e.values;if(u(n))return va(t,n);if(Fi(n))return n;return}(e,t),zindex:({axis:e,fieldOrDatumDef:t,mark:n})=>{var i;return null!==(i=e.zindex)&&void 0!==i?i:function(e,t){if("rect"===e&&Zr(t))return 1;return 0}(n,t)}};function dd(e){return"(((".concat(e.signal," % 360) + 360) % 360)")}function pd(e,t,n,i){if(void 0!==e){if("x"===n){if(Fi(e)){const n=dd(e),i=Fi(t)?"(".concat(t.signal,' === "top")'):"top"===t;return{signal:"(45 < ".concat(n," && ").concat(n," < 135) || (225 < ").concat(n," && ").concat(n,' < 315) ? "middle" :')+"(".concat(n," <= 45 || 315 <= ").concat(n,") === ").concat(i,' ? "bottom" : "top"')}}if(45{if(Yr(t)&&Sr(t.sort)){const{field:i,timeUnit:o}=t,r=t.sort,a=r.map(((e,t)=>"".concat(qi({field:i,timeUnit:o,equal:e})," ? ").concat(t," : "))).join("")+r.length;e=new gd(e,{calculate:a,as:vd(t,n,{forAs:!0})})}})),e}producedFields(){return new Set([this.transform.as])}dependentFields(){return this._dependentFields}assemble(){return{type:"formula",expr:this.transform.calculate,as:this.transform.as}}hash(){return"Calculate ".concat(j(this.transform))}}function vd(e,t,n){return Kr(e,{prefix:t,suffix:"sort_index",...null!=n?n:{}})}function yd(e,t){return T(["top","bottom"],t)?"column":T(["left","right"],t)||"row"===e?"row":"column"}function bd(e,t,n,i){const o="row"===i?n.headerRow:"column"===i?n.headerColumn:n.headerFacet;return ue((t||{})[e],o[e],n.header[e])}function xd(e,t,n,i){const o={};for(const r of e){const e=bd(r,t||{},n,i);void 0!==e&&(o[r]=e)}return o}const wd=["row","column"],Ad=["header","footer"];function Dd(e,t){const n=e.component.layoutHeaders[t].title,i=e.config?e.config:void 0,o=e.component.layoutHeaders[t].facetFieldDef?e.component.layoutHeaders[t].facetFieldDef:void 0,{titleAnchor:r,titleAngle:a,titleOrient:s}=xd(["titleAnchor","titleAngle","titleOrient"],o.header,i,t),c=yd(t,s),u=me(a);return{name:"".concat(t,"-title"),type:"group",role:"".concat(c,"-title"),title:{text:n,..."row"===t?{orient:"left"}:{},style:"guide-title",...kd(u,c),...Fd(c,u,r),...Od(i,o,t,ys,gs)}}}function Fd(e,t,n="middle"){switch(n){case"start":return{align:"left"};case"end":return{align:"right"}}const i=md(t,"row"===e?"left":"top","row"===e?"y":"x");return i?{align:i}:{}}function kd(e,t){const n=pd(e,"row"===t?"left":"top","row"===t?"y":"x",!0);return n?{baseline:n}:{}}function Cd(e,t){const n=e.component.layoutHeaders[t],i=[];for(const o of Ad)if(n[o])for(const r of n[o]){const a=Bd(e,t,o,n,r);null!=a&&i.push(a)}return i}function Ed(e,t){const{sort:n}=e;var i;return Er(n)?{field:Kr(n,{expr:"datum"}),order:null!==(i=n.order)&&void 0!==i?i:"ascending"}:u(n)?{field:vd(e,t,{expr:"datum"}),order:"ascending"}:{field:Kr(e,{expr:"datum"}),order:null!=n?n:"ascending"}}function Sd(e,t,n){const{format:i,formatType:o,labelAngle:r,labelAnchor:a,labelOrient:s,labelExpr:c}=xd(["format","formatType","labelAngle","labelAnchor","labelOrient","labelExpr"],e.header,n,t),u=mr({fieldOrDatumDef:e,format:i,formatType:o,expr:"parent",config:n}).signal,l=yd(t,s);return{text:{signal:c?ae(ae(c,"datum.label",u),"datum.value",Kr(e,{expr:"parent"})):u},..."row"===t?{orient:"left"}:{},style:"guide-label",frame:"group",...kd(r,l),...Fd(l,r,a),...Od(n,e,t,bs,vs)}}function Bd(e,t,n,i,o){if(o){let r=null;const{facetFieldDef:a}=i,s=e.config?e.config:void 0;if(a&&o.labels){const{labelOrient:e}=xd(["labelOrient"],a.header,s,t);("row"===t&&!T(["top","bottom"],e)||"column"===t&&!T(["left","right"],e))&&(r=Sd(a,t,s))}const c=Sm(e)&&!Br(e.facet),u=o.axes,l=(null==u?void 0:u.length)>0;if(r||l){const s="row"===t?"height":"width";return{name:e.getName("".concat(t,"_").concat(n)),type:"group",role:"".concat(t,"-").concat(n),...i.facetFieldDef?{from:{data:e.getName(t+"_domain")},sort:Ed(a,t)}:{},...l&&c?{from:{data:e.getName("facet_domain_".concat(t))}}:{},...r?{title:r}:{},...o.sizeSignal?{encode:{update:{[s]:o.sizeSignal}}}:{},...l?{axes:u}:{}}}}return null}const _d={column:{start:0,end:1},row:{start:1,end:0}};function zd(e,t){return _d[t][e]}function Od(e,t,n,i,o){const r={};for(const a of i){if(!o[a])continue;const i=bd(a,null==t?void 0:t.header,e,n);void 0!==i&&(r[o[a]]=i)}return r}function Nd(e){return[...Pd(e,"width"),...Pd(e,"height"),...Pd(e,"childWidth"),...Pd(e,"childHeight")]}function Pd(e,t){const n="width"===t?"x":"y",i=e.component.layoutSize.get(t);if(!i||"merged"===i)return[];const o=e.getSizeSignalRef(t).signal;if("step"===i){const t=e.getScaleComponent(n);if(t){const i=t.get("type"),r=t.get("range");if(go(i)&&ki(r)){const i=e.scaleName(n);if(Sm(e.parent)){if("independent"===e.parent.component.resolve.scale[n])return[jd(i,r)]}return[jd(i,r),{name:o,update:Md(i,t,"domain('".concat(i,"').length"))}]}}throw new Error("layout size is step although width/height is not step.")}if("container"==i){const t=o.endsWith("width"),n=t?"containerSize()[0]":"containerSize()[1]",i=js(e.config.view,t?"width":"height"),r="isFinite(".concat(n,") ? ").concat(n," : ").concat(i);return[{name:o,init:r,on:[{update:r,events:"window:resize"}]}]}return[{name:o,value:i}]}function jd(e,t){return{name:e+"_step",value:t.step}}function Md(e,t,n){const i=t.get("type"),o=t.get("padding"),r=ue(t.get("paddingOuter"),o);let a=t.get("paddingInner");return a="band"===i?void 0!==a?a:o:1,"bandspace(".concat(n,", ").concat(Ca(a),", ").concat(Ca(r),") * ").concat(e,"_step")}function Td(e){return"childWidth"===e?"width":"childHeight"===e?"height":e}function Ld(e,t){return J(e).reduce(((n,i)=>{const o=e[i];return{...n,...fu(t,o,i,(e=>Fa(e.value)))}}),{})}function qd(e,t){if(_m(t)||Sm(t))return"shared";if(Bm(t))return en(e)?"independent":"shared";throw new Error("invalid model type for resolve")}function Rd(e,t){const n=e.scale[t],i=en(t)?"axis":"legend";return"independent"===n?("shared"===e[i][t]&&si(function(e){return'Setting the scale to be independent for "'.concat(e,'" means we also have to set the guide (axis or legend) to be independent.')}(t)),"independent"):e[i][t]||"shared"}const Wd=J({aria:1,clipHeight:1,columnPadding:1,columns:1,cornerRadius:1,description:1,direction:1,fillColor:1,format:1,formatType:1,gradientLength:1,gradientOpacity:1,gradientStrokeColor:1,gradientStrokeWidth:1,gradientThickness:1,gridAlign:1,labelAlign:1,labelBaseline:1,labelColor:1,labelFont:1,labelFontSize:1,labelFontStyle:1,labelFontWeight:1,labelLimit:1,labelOffset:1,labelOpacity:1,labelOverlap:1,labelPadding:1,labelSeparation:1,legendX:1,legendY:1,offset:1,orient:1,padding:1,rowPadding:1,strokeColor:1,symbolDash:1,symbolDashOffset:1,symbolFillColor:1,symbolLimit:1,symbolOffset:1,symbolOpacity:1,symbolSize:1,symbolStrokeColor:1,symbolStrokeWidth:1,symbolType:1,tickCount:1,tickMinStep:1,title:1,titleAlign:1,titleAnchor:1,titleBaseline:1,titleColor:1,titleFont:1,titleFontSize:1,titleFontStyle:1,titleFontWeight:1,titleLimit:1,titleLineHeight:1,titleOpacity:1,titleOrient:1,titlePadding:1,type:1,values:1,zindex:1,disable:1,labelExpr:1,selections:1,opacity:1,shape:1,stroke:1,fill:1,size:1,strokeWidth:1,strokeDash:1,encode:1});class Ud extends Ac{}const Id={symbols:function(e,{fieldOrDatumDef:t,model:n,channel:i,legendCmpt:o,legendType:r}){var a,s,c,l;if("symbol"!==r)return;const{markDef:f,encoding:d,config:p,mark:m}=n,h=f.filled&&"trail"!==m;let g={...Ea({},n,Ko),...wu(n,{filled:h})};const v=null!==(a=o.get("symbolOpacity"))&&void 0!==a?a:p.legend.symbolOpacity,y=null!==(s=o.get("symbolFillColor"))&&void 0!==s?s:p.legend.symbolFillColor,b=null!==(c=o.get("symbolStrokeColor"))&&void 0!==c?c:p.legend.symbolStrokeColor,x=void 0===v?null!==(l=Hd(d.opacity))&&void 0!==l?l:f.opacity:void 0;if(g.fill){var w;if("fill"===i||h&&i===Je)delete g.fill;else if(g.fill.field)if(y)delete g.fill;else g.fill=Fa(null!==(w=p.legend.symbolBaseFillColor)&&void 0!==w?w:"black"),g.fillOpacity=Fa(null!=x?x:1);else if(u(g.fill)){var A,D,F;const e=null!==(A=null!==(D=Gd(null!==(F=d.fill)&&void 0!==F?F:d.color))&&void 0!==D?D:f.fill)&&void 0!==A?A:h&&f.color;e&&(g.fill=Fa(e))}}if(g.stroke)if("stroke"===i||!h&&i===Je)delete g.stroke;else if(g.stroke.field||b)delete g.stroke;else if(u(g.stroke)){const e=ue(Gd(d.stroke||d.color),f.stroke,h?f.color:void 0);e&&(g.stroke={value:e})}if(i!==et){const e=qr(t)&&Yd(n,o,t);e?g.opacity=[{test:e,...Fa(null!=x?x:1)},Fa(p.legend.unselectedOpacity)]:x&&(g.opacity=Fa(x))}return g={...g,...e},Y(g)?void 0:g},gradient:function(e,{model:t,legendType:n,legendCmpt:i}){var o;if("gradient"!==n)return;const{config:r,markDef:a,encoding:s}=t;let c={};const u=void 0===(null!==(o=i.get("gradientOpacity"))&&void 0!==o?o:r.legend.gradientOpacity)?Hd(s.opacity)||a.opacity:void 0;u&&(c.opacity=Fa(u));return c={...c,...e},Y(c)?void 0:c},labels:function(e,{fieldOrDatumDef:t,model:n,channel:i,legendCmpt:o}){const r=n.legend(i)||{},a=n.config,s=qr(t)?Yd(n,o,t):void 0,c=s?[{test:s,value:1},{value:a.legend.unselectedOpacity}]:void 0,{format:u,formatType:l}=r,f=dr(l)?gr({fieldOrDatumDef:t,field:"datum.value",format:u,formatType:l,config:a}):void 0,d={...c?{opacity:c}:{},...f?{text:f}:{},...e};return Y(d)?void 0:d},entries:function(e,{legendCmpt:t}){const n=t.get("selections");return(null==n?void 0:n.length)?{...e,fill:{value:"transparent"}}:e}};function Hd(e){return Vd(e,((e,t)=>Math.max(e,t.value)))}function Gd(e){return Vd(e,((e,t)=>ue(e,t.value)))}function Vd(e,t){return function(e){const t=e&&e.condition;return!!t&&(u(t)||Vr(t))}(e)?h(e.condition).reduce(t,e.value):Vr(e)?e.value:void 0}function Yd(e,t,n){const i=t.get("selections");if(!(null==i?void 0:i.length))return;const o=w(n.field);return i.map((e=>{const t=w(K(e)+Fl);return"(!length(data(".concat(t,")) || (").concat(e,"[").concat(o,"] && indexof(").concat(e,"[").concat(o,"], datum.value) >= 0))")})).join(" || ")}const Jd={direction:({direction:e})=>e,format:({fieldOrDatumDef:e,legend:t,config:n})=>{const{format:i,formatType:o}=t;return vr(e,e.type,i,o,n,!1)},formatType:({legend:e,fieldOrDatumDef:t,scaleType:n})=>{const{formatType:i}=e;return yr(i,t,n)},gradientLength:e=>{var t,n;const{legend:i,legendConfig:o}=e;return null!==(t=null!==(n=i.gradientLength)&&void 0!==n?n:o.gradientLength)&&void 0!==t?t:function({legendConfig:e,model:t,direction:n,orient:i,scaleType:o}){const{gradientHorizontalMaxLength:r,gradientHorizontalMinLength:a,gradientVerticalMaxLength:s,gradientVerticalMinLength:c}=e;if(yo(o))return"horizontal"===n?"top"===i||"bottom"===i?$d(t,"width",a,r):a:$d(t,"height",c,s);return}(e)},labelOverlap:({legend:e,legendConfig:t,scaleType:n})=>{var i,o;return null!==(i=null!==(o=e.labelOverlap)&&void 0!==o?o:t.labelOverlap)&&void 0!==i?i:function(e){if(T(["quantile","threshold","log","symlog"],e))return"greedy";return}(n)},symbolType:({legend:e,markDef:t,channel:n,encoding:i})=>{var o;return null!==(o=e.symbolType)&&void 0!==o?o:function(e,t,n,i){if("shape"!==t){var o;const e=null!==(o=Gd(n))&&void 0!==o?o:i;if(e)return e}switch(e){case"bar":case"rect":case"image":case"square":return"square";case"line":case"trail":case"rule":return"stroke";case"arc":case"point":case"circle":case"tick":case"geoshape":case"area":case"text":return"circle"}}(t.type,n,i.shape,t.shape)},title:({fieldOrDatumDef:e,config:t})=>oa(e,t,{allowDisabling:!0}),type:({legendType:e,scaleType:t,channel:n})=>{if(yt(n)&&yo(t)){if("gradient"===e)return}else if("symbol"===e)return;return e},values:({fieldOrDatumDef:e,legend:t})=>function(e,t){const n=e.values;if(u(n))return va(t,n);if(Fi(n))return n;return}(t,e)};function Xd(e){const{legend:t}=e;return ue(t.type,function({channel:e,timeUnit:t,scaleType:n}){if(yt(e)){if(T(["quarter","month","day"],t))return"symbol";if(yo(n))return"gradient"}return"symbol"}(e))}function Qd({legendConfig:e,legendType:t,orient:n,legend:i}){var o,r;return null!==(o=null!==(r=i.direction)&&void 0!==r?r:e[t?"gradientDirection":"symbolDirection"])&&void 0!==o?o:function(e,t){switch(e){case"top":case"bottom":return"horizontal";case"left":case"right":case"none":case void 0:return;default:return"gradient"===t?"horizontal":void 0}}(n,t)}function $d(e,t,n,i){const o=e.getSizeSignalRef(t).signal;return{signal:"clamp(".concat(o,", ").concat(n,", ").concat(i,")")}}function Kd(e){const t=Em(e)?function(e){const{encoding:t}=e,n={};for(const i of[Je,...ws]){const o=ua(t[i]);o&&e.getScaleComponent(i)&&(i===$e&&qr(o)&&o.type===Vi||(n[i]=ep(e,i)))}return n}(e):function(e){const{legends:t,resolve:n}=e.component;for(const i of e.children){Kd(i);for(const o of J(i.component.legends))n.legend[o]=Rd(e.component.resolve,o),"shared"===n.legend[o]&&(t[o]=tp(t[o],i.component.legends[o]),t[o]||(n.legend[o]="independent",delete t[o]))}for(const i of J(t))for(const t of e.children)t.component.legends[i]&&"shared"===n.legend[i]&&delete t.component.legends[i];return t}(e);return e.component.legends=t,t}function Zd(e,t,n,i){switch(t){case"disable":return void 0!==n;case"values":return!!(null==n?void 0:n.values);case"title":if("title"===t&&e===(null==i?void 0:i.title))return!0}return e===(n||{})[t]}function ep(e,t){var n,i,o;let r=e.legend(t);const{markDef:a,encoding:s,config:c}=e,u=c.legend,l=new Ud({},function(e,t){const n=e.scaleName(t);if("trail"===e.mark){if("color"===t)return{stroke:n};if("size"===t)return{strokeWidth:n}}return"color"===t?e.markDef.filled?{fill:n}:{stroke:n}:{[t]:n}}(e,t));!function(e,t,n){var i;const o=null===(i=e.fieldDef(t))||void 0===i?void 0:i.field;Bl(e,(e=>{var i;const r=null!==(i=e.project.hasField[o])&&void 0!==i?i:e.project.hasChannel[t];if(r&&nl.has(e)){var a;const t=null!==(a=n.get("selections"))&&void 0!==a?a:[];t.push(e.name),n.set("selections",t,!1),r.hasLegend=!0}}))}(e,t,l);const f=void 0!==r?!r:u.disable;if(l.set("disable",f,void 0!==r),f)return l;r=r||{};const d=e.getScaleComponent(t).get("type"),p=ua(s[t]),m=qr(p)?null===(n=Di(p.timeUnit))||void 0===n?void 0:n.unit:void 0,h=r.orient||c.legend.orient||"right",g=Xd({legend:r,channel:t,timeUnit:m,scaleType:d}),v={legend:r,channel:t,model:e,markDef:a,encoding:s,fieldOrDatumDef:p,legendConfig:u,config:c,scaleType:d,orient:h,legendType:g,direction:Qd({legend:r,legendType:g,orient:h,legendConfig:u})};for(const n of Wd){if("gradient"===g&&n.startsWith("symbol")||"symbol"===g&&n.startsWith("gradient"))continue;const i=n in Jd?Jd[n](v):r[n];if(void 0!==i){const o=Zd(i,n,r,e.fieldDef(t));(o||void 0===c.legend[n])&&l.set(n,i,o)}}const y=null!==(i=null===(o=r)||void 0===o?void 0:o.encoding)&&void 0!==i?i:{},b=l.get("selections"),x={},w={fieldOrDatumDef:p,model:e,channel:t,legendCmpt:l,legendType:g};for(const t of["labels","legend","title","symbols","gradient","entries"]){var A;const n=Ld(null!==(A=y[t])&&void 0!==A?A:{},e),i=t in Id?Id[t](n,w):n;void 0===i||Y(i)||(x[t]={...(null==b?void 0:b.length)&&qr(p)?{name:"".concat(K(p.field),"_legend_").concat(t)}:{},...(null==b?void 0:b.length)?{interactive:!!b}:{},update:i})}var D;Y(x)||l.set("encode",x,!!(null===(D=r)||void 0===D?void 0:D.encoding));return l}function tp(e,t){if(!e)return t.clone();const n=e.getWithExplicit("orient"),i=t.getWithExplicit("orient");if(n.explicit&&i.explicit&&n.value!==i.value)return;let o=!1;for(const n of Wd){const i=Ec(e.getWithExplicit(n),t.getWithExplicit(n),n,"legend",((e,t)=>{switch(n){case"symbolType":return np(e,t);case"title":return Ma(e,t);case"type":return o=!0,Fc("symbol")}return Cc(e,t,n,"legend")}));e.setWithExplicit(n,i)}var r,a,s,c;o&&((null===(r=e.implicit)||void 0===r||null===(a=r.encode)||void 0===a?void 0:a.gradient)&&ee(e.implicit,["encode","gradient"]),(null===(s=e.explicit)||void 0===s||null===(c=s.encode)||void 0===c?void 0:c.gradient)&&ee(e.explicit,["encode","gradient"]));return e}function np(e,t){return"circle"===t.value?t:e}function ip(e){const t=e.component.legends,n={};for(const i of J(t)){const o=e.getScaleComponent(i),r=P(o.get("domains"));if(n[r])for(const e of n[r]){tp(e,t[i])||n[r].push(t[i])}else n[r]=[t[i].clone()]}return X(n).flat().map((t=>function(e,t){var n;const{disable:i,labelExpr:o,selections:r,...a}=e.combine();if(i)return;!1===t.aria&&null==a.aria&&(a.aria=!1);if(null===(n=a.encode)||void 0===n?void 0:n.symbols){const e=a.encode.symbols.update;!e.fill||"transparent"===e.fill.value||e.stroke||a.stroke||(e.stroke={value:"transparent"});for(const t of ws)a[t]&&delete e[t]}a.title||delete a.title;if(void 0!==o){var s,c;let e=o;(null===(s=a.encode)||void 0===s||null===(c=s.labels)||void 0===c?void 0:c.update)&&Fi(a.encode.labels.update.text)&&(e=ae(o,"datum.label",a.encode.labels.update.text.signal)),function(e,t,n,i){var o,r,a;e.encode=null!==(o=e.encode)&&void 0!==o?o:{},e.encode[t]=null!==(r=e.encode[t])&&void 0!==r?r:{},e.encode[t].update=null!==(a=e.encode[t].update)&&void 0!==a?a:{},e.encode[t].update[n]=i}(a,"labels","text",{signal:e})}return a}(t,e.config))).filter((e=>void 0!==e))}function op(e){return _m(e)||Bm(e)?function(e){return e.children.reduce(((e,t)=>e.concat(t.assembleProjections())),rp(e))}(e):rp(e)}function rp(e){const t=e.component.projection;if(!t||t.merged)return[];const n=t.combine(),{name:i}=n;if(t.data){const o={signal:"[".concat(t.size.map((e=>e.signal)).join(", "),"]")},r=t.data.reduce(((t,n)=>{const i=Fi(n)?n.signal:"data('".concat(e.lookupDataSource(n),"')");return T(t,i)||t.push(i),t}),[]);if(r.length<=0)throw new Error("Projection's fit didn't find any data sources");return[{name:i,size:o,fit:{signal:r.length>1?"[".concat(r.join(", "),"]"):r[0]},...n}]}return[{name:i,translate:{signal:"[width / 2, height / 2]"},...n}]}const ap=["type","clipAngle","clipExtent","center","rotate","precision","reflectX","reflectY","coefficient","distance","fraction","lobes","parallel","radius","ratio","spacing","tilt"];class sp extends Ac{constructor(e,t,n,i){super({...t},{name:e}),this.specifiedProjection=t,this.size=n,this.data=i,Bn(this,"merged",!1)}get isFit(){return!!this.data}}function cp(e){e.component.projection=Em(e)?function(e){if(e.hasProjection){var t;const n=e.specifiedProjection,i=!(n&&(null!=n.scale||null!=n.translate)),o=i?[e.getSizeSignalRef("width"),e.getSizeSignalRef("height")]:void 0,r=i?function(e){const t=[],{encoding:n}=e;for(const i of[[Ge,He],[Ye,Ve]])(ua(n[i[0]])||ua(n[i[1]]))&&t.push({signal:e.getName("geojson_".concat(t.length))});e.channelHasField($e)&&e.typedFieldDef($e).type===Vi&&t.push({signal:e.getName("geojson_".concat(t.length))});0===t.length&&t.push(e.requestDataName(Mc.Main));return t}(e):void 0;return new sp(e.projectionName(!0),{...null!==(t=e.config.projection)&&void 0!==t?t:{},...null!=n?n:{}},o,r)}return}(e):function(e){if(0===e.children.length)return;let t;for(const t of e.children)cp(t);const n=q(e.children,(e=>{const n=e.component.projection;if(n){if(t){const e=function(e,t){const n=q(ap,(n=>!v(e.explicit,n)&&!v(t.explicit,n)||!(!v(e.explicit,n)||!v(t.explicit,n)||P(e.get(n))!==P(t.get(n)))));if(P(e.size)===P(t.size)){if(n)return e;if(P(e.explicit)===P({}))return t;if(P(t.explicit)===P({}))return e}return null}(t,n);return e&&(t=e),!!e}return t=n,!0}return!0}));if(t&&n){const n=e.projectionName(!0),i=new sp(n,t.specifiedProjection,t.size,z(t.data));for(const t of e.children){const e=t.component.projection;e&&(e.isFit&&i.data.push(...t.component.projection.data),t.renameProjection(e.get("name"),n),e.merged=!0)}return i}return}(e)}function up(e,t,n,i){if(ya(t,n)){var o,r;const a=Em(e)&&null!==(o=null!==(r=e.axis(n))&&void 0!==r?r:e.legend(n))&&void 0!==o?o:{},s=Kr(t,{expr:"datum"}),c=Kr(t,{expr:"datum",binSuffix:"end"});return{formulaAs:Kr(t,{binSuffix:"range",forAs:!0}),formula:Ar(s,c,a.format,a.formatType,i)}}return{}}function lp(e,t){return"".concat(Dn(e),"_").concat(t)}function fp(e,t,n){var i;const o=lp(null!==(i=pa(n,void 0))&&void 0!==i?i:{},t);return e.getName("".concat(o,"_bins"))}function dp(e,t,n){let i,o;i=function(e){return"as"in e}(e)?x(e.as)?[e.as,"".concat(e.as,"_end")]:[e.as[0],e.as[1]]:[Kr(e,{forAs:!0}),Kr(e,{binSuffix:"end",forAs:!0})];const r={...pa(t,void 0)},a=lp(r,e.field),{signal:s,extentSignal:c}=function(e,t){return{signal:e.getName("".concat(t,"_bins")),extentSignal:e.getName("".concat(t,"_extent"))}}(n,a);if(En(r.extent)){const e=r.extent,t=e.selection;o=nd(n.getSelectionComponent(K(t),t),e),delete r.extent}return{key:a,binComponent:{bin:r,field:e.field,as:[i],...s?{signal:s}:{},...c?{extentSignal:c}:{},...o?{span:o}:{}}}}class pp extends Hu{clone(){return new pp(null,z(this.bins))}constructor(e,t){super(e),this.bins=t}static makeFromEncoding(e,t){const n=t.reduceFieldDef(((e,n,i)=>{if(Gr(n)&&Fn(n.bin)){const{key:o,binComponent:r}=dp(n,n.bin,t);e[o]={...r,...e[o],...up(t,n,i,t.config)}}return e}),{});return Y(n)?null:new pp(e,n)}static makeFromTransform(e,t,n){const{key:i,binComponent:o}=dp(t,t.bin,n);return new pp(e,{[i]:o})}merge(e,t){for(const n of J(e.bins))n in this.bins?(t(e.bins[n].signal,this.bins[n].signal),this.bins[n].as=U([...this.bins[n].as,...e.bins[n].as],j)):this.bins[n]=e.bins[n];for(const t of e.children)e.removeChild(t),t.parent=this;e.remove()}producedFields(){return new Set(X(this.bins).map((e=>e.as)).flat(2))}dependentFields(){return new Set(X(this.bins).map((e=>e.field)))}hash(){return"Bin ".concat(j(this.bins))}assemble(){return X(this.bins).flatMap((e=>{const t=[],[n,...i]=e.as,{extent:o,...r}=e.bin,a={type:"bin",field:re(e.field),as:n,signal:e.signal,...En(o)?{extent:null}:{extent:o},...e.span?{span:{signal:"span(".concat(e.span,")")}}:{},...r};!o&&e.extentSignal&&(t.push({type:"extent",field:re(e.field),signal:e.extentSignal}),a.extent={signal:e.extentSignal}),t.push(a);for(const e of i)for(let i=0;i<2;i++)t.push({type:"formula",expr:Kr({field:n[i]},{expr:"datum"}),as:e[i]});return e.formula&&t.push({type:"formula",expr:e.formula,as:e.formulaAs}),t}))}}function mp(e,t,n,i){const o=Em(i)?i.encoding[Mt(t)]:void 0;if(Gr(n)&&Em(i)&&jr(t,n,o,i.stack,i.markDef,i.config))e.add(Kr(n,{})),e.add(Kr(n,{suffix:"end"})),n.bin&&ya(n,t)&&e.add(Kr(n,{binSuffix:"range"}));else if(t in ht){const n=function(e){switch(e){case He:return"y";case Ve:return"y2";case Ge:return"x";case Ye:return"x2"}}(t);e.add(i.getName(n))}else e.add(Kr(n));return e}class hp extends Hu{clone(){return new hp(null,new Set(this.dimensions),z(this.measures))}constructor(e,t,n){super(e),this.dimensions=t,this.measures=n}get groupBy(){return this.dimensions}static makeFromEncoding(e,t){let n=!1;t.forEachFieldDef((e=>{e.aggregate&&(n=!0)}));const i={},o=new Set;return n?(t.forEachFieldDef(((e,n)=>{const{aggregate:r,field:a}=e;if(r)if("count"===r){var s;i["*"]=null!==(s=i["*"])&&void 0!==s?s:{},i["*"].count=new Set([Kr(e,{forAs:!0})])}else{if(Ce(r)||Ee(r)){var c;const e=Ce(r)?"argmin":"argmax",t=r[e];i[t]=null!==(c=i[t])&&void 0!==c?c:{},i[t][e]=new Set([Kr({op:e,field:t},{forAs:!0})])}else{var u;i[a]=null!==(u=i[a])&&void 0!==u?u:{},i[a][r]=new Set([Kr(e,{forAs:!0})])}var l;if(vn(n)&&"unaggregated"===t.scaleDomain(n))i[a]=null!==(l=i[a])&&void 0!==l?l:{},i[a].min=new Set([Kr({field:a,aggregate:"min"},{forAs:!0})]),i[a].max=new Set([Kr({field:a,aggregate:"max"},{forAs:!0})])}else mp(o,n,e,t)})),o.size+J(i).length===0?null:new hp(e,o,i)):null}static makeFromTransform(e,t){const n=new Set,i={};for(const e of t.aggregate){const{op:t,field:n,as:a}=e;var o,r;if(t)if("count"===t)i["*"]=null!==(o=i["*"])&&void 0!==o?o:{},i["*"].count=new Set([a||Kr(e,{forAs:!0})]);else i[n]=null!==(r=i[n])&&void 0!==r?r:{},i[n][t]=new Set([a||Kr(e,{forAs:!0})])}for(const e of null!==(a=t.groupby)&&void 0!==a?a:[]){var a;n.add(e)}return n.size+J(i).length===0?null:new hp(e,n,i)}merge(e){return I(this.dimensions,e.dimensions)?(function(e,t){for(const i of J(t)){const o=t[i];for(const t of J(o)){var n;i in e?e[i][t]=new Set([...null!==(n=e[i][t])&&void 0!==n?n:[],...o[t]]):e[i]={[t]:o[t]}}}}(this.measures,e.measures),!0):(function(...e){ai.debug(...e)}("different dimensions, cannot merge"),!1)}addDimensions(e){e.forEach(this.dimensions.add,this.dimensions)}dependentFields(){return new Set([...this.dimensions,...J(this.measures)])}producedFields(){const e=new Set;for(const t of J(this.measures))for(const n of J(this.measures[t])){const i=this.measures[t][n];0===i.size?e.add("".concat(n,"_").concat(t)):i.forEach(e.add,e)}return e}hash(){return"Aggregate ".concat(j({dimensions:this.dimensions,measures:this.measures}))}assemble(){const e=[],t=[],n=[];for(const i of J(this.measures))for(const o of J(this.measures[i]))for(const r of this.measures[i][o])n.push(r),e.push(o),t.push("*"===i?null:re(i));return{type:"aggregate",groupby:[...this.dimensions].map(re),ops:e,fields:t,as:n}}}class gp extends Hu{constructor(e,t,n,i){super(e),this.model=t,this.name=n,this.data=i,Bn(this,"column",void 0),Bn(this,"row",void 0),Bn(this,"facet",void 0),Bn(this,"childModel",void 0);for(const e of xt){const n=t.facet[e];if(n){const{bin:i,sort:o}=n;this[e]={name:t.getName("".concat(e,"_domain")),fields:[Kr(n),...Fn(i)?[Kr(n,{binSuffix:"end"})]:[]],...Er(o)?{sortField:o}:u(o)?{sortIndexField:vd(n,e)}:{}}}}this.childModel=t.child}hash(){let e="Facet";for(const t of xt)this[t]&&(e+=" ".concat(t.charAt(0),":").concat(j(this[t])));return e}get fields(){const e=[];for(const n of xt){var t;(null===(t=this[n])||void 0===t?void 0:t.fields)&&e.push(...this[n].fields)}return e}dependentFields(){const e=new Set(this.fields);for(const t of xt)this[t]&&(this[t].sortField&&e.add(this[t].sortField.field),this[t].sortIndexField&&e.add(this[t].sortIndexField));return e}producedFields(){return new Set}getSource(){return this.name}getChildIndependentFieldsWithStep(){const e={};for(const t of Zt){const n=this.childModel.component.scales[t];if(n&&!n.merged){const i=n.get("type"),o=n.get("range");if(go(i)&&ki(o)){const n=am(sm(this.childModel,t));n?e[t]=n:si(Mn(t))}}}return e}assembleRowColumnHeaderData(e,t,n){const i={row:"y",column:"x"}[e],o=[],r=[],a=[];n&&n[i]&&(t?(o.push("distinct_".concat(n[i])),r.push("max")):(o.push(n[i]),r.push("distinct")),a.push("distinct_".concat(n[i])));const{sortField:s,sortIndexField:c}=this[e];if(s){const{op:e=Dr,field:t}=s;o.push(t),r.push(e),a.push(Kr(s,{forAs:!0}))}else c&&(o.push(c),r.push("max"),a.push(c));return{name:this[e].name,source:null!=t?t:this.data,transform:[{type:"aggregate",groupby:this[e].fields,...o.length?{fields:o,ops:r,as:a}:{}}]}}assembleFacetHeaderData(e){const{columns:t}=this.model.layout,{layoutHeaders:n}=this.model.component,i=[],o={};for(const e of wd){for(const t of Ad){var r;const i=null!==(r=n[e]&&n[e][t])&&void 0!==r?r:[];for(const t of i){var a;if((null===(a=t.axes)||void 0===a?void 0:a.length)>0){o[e]=!0;break}}}if(o[e]){const n='length(data("'.concat(this.facet.name,'"))'),o="row"===e?t?{signal:"ceil(".concat(n," / ").concat(t,")")}:1:t?{signal:"min(".concat(n,", ").concat(t,")")}:{signal:n};i.push({name:"".concat(this.facet.name,"_").concat(e),transform:[{type:"sequence",start:0,stop:o}]})}}const{row:s,column:c}=o;return(s||c)&&i.unshift(this.assembleRowColumnHeaderData("facet",null,e)),i}assemble(){const e=[];let t=null;const n=this.getChildIndependentFieldsWithStep(),{column:i,row:o,facet:r}=this;if(i&&o&&(n.x||n.y)){var a,s;t="cross_".concat(this.column.name,"_").concat(this.row.name);const i=[].concat(null!==(a=n.x)&&void 0!==a?a:[],null!==(s=n.y)&&void 0!==s?s:[]),o=i.map((()=>"distinct"));e.push({name:t,source:this.data,transform:[{type:"aggregate",groupby:this.fields,fields:i,ops:o}]})}for(const i of[Pe,Ne])this[i]&&e.push(this.assembleRowColumnHeaderData(i,t,n));if(r){const t=this.assembleFacetHeaderData(n);t&&e.push(...t)}return e}}function vp(e){return"'"===e[0]&&"'"===e[e.length-1]||'"'===e[0]&&'"'===e[e.length-1]?e.slice(1,-1):e}function yp(e){const t={};return S(e.filter,(e=>{if(Ti(e)){let i=null;if(_i(e))i=Aa(e.equal);else if(Oi(e))i=Aa(e.lte);else if(zi(e))i=Aa(e.lt);else if(Ni(e))i=Aa(e.gt);else if(Pi(e))i=Aa(e.gte);else if(ji(e))i=e.range[0];else if(Mi(e)){var n;i=(null!==(n=e.oneOf)&&void 0!==n?n:e.in)[0]}i&&(ci(i)?t[e.field]="date":b(i)?t[e.field]="number":x(i)&&(t[e.field]="string")),e.timeUnit&&(t[e.field]="date")}})),t}function bp(e){const t={};function n(e){var n;ha(e)?t[e.field]="date":"quantitative"===e.type&&(x(n=e.aggregate)&&T(["min","max"],n))?t[e.field]="number":ce(e.field)>1?e.field in t||(t[e.field]="flatten"):Yr(e)&&Er(e.sort)&&ce(e.sort.field)>1&&(e.sort.field in t||(t[e.sort.field]="flatten"))}if((Em(e)||Sm(e))&&e.forEachFieldDef(((t,i)=>{if(Gr(t))n(t);else{const o=Pt(i),r=e.fieldDef(o);n({...t,type:r.type})}})),Em(e)){const{mark:n,markDef:i,encoding:o}=e;if(Jo(n)&&!e.encoding.order){const e=o["horizontal"===i.orient?"y":"x"];qr(e)&&"quantitative"===e.type&&!(e.field in t)&&(t[e.field]="number")}}return t}class xp extends Hu{clone(){return new xp(null,z(this._parse))}constructor(e,t){super(e),Bn(this,"_parse",void 0),this._parse=t}hash(){return"Parse ".concat(j(this._parse))}static makeExplicit(e,t,n){let i={};const o=t.data;return!Oc(o)&&o&&o.format&&o.format.parse&&(i=o.format.parse),this.makeWithAncestors(e,i,{},n)}static makeWithAncestors(e,t,n,i){for(const e of J(n)){const t=i.getWithExplicit(e);void 0!==t.value&&(t.explicit||t.value===n[e]||"derived"===t.value||"flatten"===n[e]?delete n[e]:si(Un(e,n[e],t.value)))}for(const e of J(t)){const n=i.get(e);void 0!==n&&(n===t[e]?delete t[e]:si(Un(e,t[e],n)))}const o=new Ac(t,n);i.copyAll(o);const r={};for(const e of J(o.combine())){const t=o.get(e);null!==t&&(r[e]=t)}return 0===J(r).length||i.parseNothing?null:new xp(e,r)}get parse(){return this._parse}merge(e){this._parse={...this._parse,...e.parse},e.remove()}assembleFormatParse(){const e={};for(const t of J(this._parse)){const n=this._parse[t];1===ce(t)&&(e[t]=n)}return e}producedFields(){return new Set(J(this._parse))}dependentFields(){return new Set(J(this._parse))}assembleTransforms(e=!1){return J(this._parse).filter((t=>!e||ce(t)>1)).map((e=>{const t=function(e,t){const n=ne(e);if("number"===t)return"toNumber(".concat(n,")");if("boolean"===t)return"toBoolean(".concat(n,")");if("string"===t)return"toString(".concat(n,")");if("date"===t)return"toDate(".concat(n,")");if("flatten"===t)return n;if(0===t.indexOf("date:")){const e=vp(t.slice(5,t.length));return"timeParse(".concat(n,",'").concat(e,"')")}if(0===t.indexOf("utc:")){const e=vp(t.slice(4,t.length));return"utcParse(".concat(n,",'").concat(e,"')")}return si('Unrecognized parse "'.concat(t,'".')),null}(e,this._parse[e]);if(!t)return null;return{type:"formula",expr:t,as:se(e)}})).filter((e=>null!==e))}}class wp extends Hu{clone(){return new wp(null)}constructor(e){super(e)}dependentFields(){return new Set}producedFields(){return new Set([Ds])}hash(){return"Identifier"}assemble(){return{type:"identifier",as:Ds}}}class Ap extends Hu{clone(){return new Ap(null,this.params)}constructor(e,t){super(e),this.params=t}dependentFields(){return new Set}producedFields(){}hash(){return"Graticule ".concat(j(this.params))}assemble(){return{type:"graticule",...!0===this.params?{}:this.params}}}class Dp extends Hu{clone(){return new Dp(null,this.params)}constructor(e,t){super(e),this.params=t}dependentFields(){return new Set}producedFields(){var e;return new Set([null!==(e=this.params.as)&&void 0!==e?e:"data"])}hash(){return"Hash ".concat(j(this.params))}assemble(){return{type:"sequence",...this.params}}}class Fp extends Hu{constructor(e){var t;let n;if(super(null),Bn(this,"_data",void 0),Bn(this,"_name",void 0),Bn(this,"_generator",void 0),Oc(e=null!==(t=e)&&void 0!==t?t:{name:"source"})||(n=e.format?{...N(e.format,["parse"])}:{}),_c(e))this._data={values:e.values};else if(Bc(e)){if(this._data={url:e.url},!n.type){let t=/(?:\.([^.]+))?$/.exec(e.url)[1];T(["json","csv","tsv","dsv","topojson"],t)||(t="json"),n.type=t}}else Pc(e)?this._data={values:[{type:"Sphere"}]}:(zc(e)||Oc(e))&&(this._data={});this._generator=Oc(e),e.name&&(this._name=e.name),n&&!Y(n)&&(this._data.format=n)}dependentFields(){return new Set}producedFields(){}get data(){return this._data}hasName(){return!!this._name}get isGenerator(){return this._generator}get dataName(){return this._name}set dataName(e){this._name=e}set parent(e){throw new Error("Source nodes have to be roots.")}remove(){throw new Error("Source nodes are roots and cannot be removed.")}hash(){throw new Error("Cannot hash sources")}assemble(){return{name:this._name,...this._data,transform:[]}}}function kp(e){return e instanceof Fp||e instanceof Ap||e instanceof Dp}var Cp=new WeakMap;class Ep{constructor(){Cp.set(this,{writable:!0,value:void 0}),_n(this,Cp,!1)}setModified(){_n(this,Cp,!0)}get modifiedFlag(){return function(e,t){var n=t.get(e);if(!n)throw new TypeError("attempted to get private field on non-instance");return n.get?n.get.call(e):n.value}(this,Cp)}}class Sp extends Ep{getNodeDepths(e,t,n){n.set(e,t);for(const i of e.children)this.getNodeDepths(i,t+1,n);return n}optimize(e){const t=[...this.getNodeDepths(e,0,new Map).entries()].sort(((e,t)=>t[1]-e[1]));for(const e of t)this.run(e[0]);return this.modifiedFlag}}class Bp extends Ep{optimize(e){this.run(e);for(const t of e.children)this.optimize(t);return this.modifiedFlag}}class _p extends Bp{mergeNodes(e,t){const n=t.shift();for(const i of t)e.removeChild(i),i.parent=n,i.remove()}run(e){const t=e.children.map((e=>e.hash())),n={};for(let i=0;i1&&(this.setModified(),this.mergeNodes(e,n[t]))}}class zp extends Bp{constructor(e){super(),Bn(this,"requiresSelectionId",void 0),this.requiresSelectionId=e&&zl(e)}run(e){e instanceof wp&&(this.requiresSelectionId&&(kp(e.parent)||e.parent instanceof hp||e.parent instanceof xp)||(this.setModified(),e.remove()))}}class Op extends Ep{optimize(e){return this.run(e,new Set),this.modifiedFlag}run(e,t){let n=new Set;e instanceof Vu&&(n=e.producedFields(),H(n,t)&&(this.setModified(),e.removeFormulas(t),0===e.producedFields.length&&e.remove()));for(const i of e.children)this.run(i,new Set([...t,...n]))}}class Np extends Bp{constructor(){super()}run(e){e instanceof Gu&&!e.isRequired()&&(this.setModified(),e.remove())}}class Pp extends Sp{run(e){if(!(kp(e)||e.numChildren()>1))for(const t of e.children)if(t instanceof xp)if(e instanceof xp)this.setModified(),e.merge(t);else{if(V(e.producedFields(),t.dependentFields()))continue;this.setModified(),t.swapWithParent()}}}class jp extends Sp{run(e){const t=[...e.children],n=e.children.filter((e=>e instanceof xp));if(e.numChildren()>1&&n.length>=1){const i={},o=new Set;for(const e of n){const t=e.parse;for(const e of J(t))e in i?i[e]!==t[e]&&o.add(e):i[e]=t[e]}for(const e of o)delete i[e];if(!Y(i)){this.setModified();const n=new xp(e,i);for(const o of t){if(o instanceof xp)for(const e of J(i))delete o.parse[e];e.removeChild(o),o.parent=n,o instanceof xp&&0===J(o.parse).length&&o.remove()}}}}}class Mp extends Sp{run(e){e instanceof Gu||e.numChildren()>0||e instanceof gp||e instanceof Fp||(this.setModified(),e.remove())}}class Tp extends Sp{run(e){const t=e.children.filter((e=>e instanceof Vu)),n=t.pop();for(const e of t)this.setModified(),n.merge(e)}}class Lp extends Sp{run(e){const t=e.children.filter((e=>e instanceof hp)),n={};for(const e of t){const t=j(e.groupBy);t in n||(n[t]=[]),n[t].push(e)}for(const t of J(n)){const i=n[t];if(i.length>1){const t=i.pop();for(const n of i)t.merge(n)&&(e.removeChild(n),n.parent=t,n.remove(),this.setModified())}}}}class qp extends Sp{constructor(e){super(),this.model=e}run(e){const t=!(kp(e)||e instanceof ed||e instanceof xp||e instanceof wp),n=[],i=[];for(const o of e.children)o instanceof pp&&(t&&!V(e.producedFields(),o.dependentFields())?n.push(o):i.push(o));if(n.length>0){const t=n.pop();for(const e of n)t.merge(e,this.model.renameSignal.bind(this.model));this.setModified(),e instanceof pp?e.merge(t,this.model.renameSignal.bind(this.model)):t.swapWithParent()}if(i.length>1){const e=i.pop();for(const t of i)e.merge(t,this.model.renameSignal.bind(this.model));this.setModified()}}}class Rp extends Sp{run(e){const t=[...e.children];if(!L(t,(e=>e instanceof Gu))||e.numChildren()<=1)return;const n=[];let i;for(const o of t)if(o instanceof Gu){let t=o;for(;1===t.numChildren();){const[e]=t.children;if(!(e instanceof Gu))break;t=e}n.push(...t.children),i?(e.removeChild(o),o.parent=i.parent,i.parent.removeChild(i),i.parent=t,this.setModified()):i=t}else n.push(o);if(n.length){this.setModified();for(const e of n)e.parent.removeChild(e),e.parent=i}}}class Wp extends Hu{clone(){return new Wp(null,z(this.transform))}constructor(e,t){super(e),this.transform=t}addDimensions(e){this.transform.groupby=U(this.transform.groupby.concat(e),(e=>e))}dependentFields(){const e=new Set;return this.transform.groupby&&this.transform.groupby.forEach(e.add,e),this.transform.joinaggregate.map((e=>e.field)).filter((e=>void 0!==e)).forEach(e.add,e),e}producedFields(){return new Set(this.transform.joinaggregate.map(this.getDefaultName))}getDefaultName(e){var t;return null!==(t=e.as)&&void 0!==t?t:Kr(e)}hash(){return"JoinAggregateTransform ".concat(j(this.transform))}assemble(){const e=[],t=[],n=[];for(const i of this.transform.joinaggregate)t.push(i.op),n.push(this.getDefaultName(i)),e.push(void 0===i.field?null:i.field);const i=this.transform.groupby;return{type:"joinaggregate",as:n,ops:t,fields:e,...void 0!==i?{groupby:i}:{}}}}class Up extends Hu{clone(){return new Up(null,z(this._stack))}constructor(e,t){super(e),Bn(this,"_stack",void 0),this._stack=t}static makeFromTransform(e,t){const{stack:n,groupby:i,as:o,offset:r="zero"}=t,a=[],s=[];if(void 0!==t.sort)for(const e of t.sort)a.push(e.field),s.push(ue(e.order,"ascending"));const c={field:a,order:s};let l;return l=function(e){return u(e)&&e.every((e=>x(e)))&&e.length>1}(o)?o:x(o)?[o,o+"_end"]:[t.stack+"_start",t.stack+"_end"],new Up(e,{stackField:n,groupby:i,offset:r,sort:c,facetby:[],as:l})}static makeFromEncoding(e,t){const n=t.stack,{encoding:i}=t;if(!n)return null;const{groupbyChannel:o,fieldChannel:r,offset:a,impute:s}=n;let c;if(o){c=ca(i[o])}const l=function(e){return e.stack.stackBy.reduce(((e,t)=>{const n=Kr(t.fieldDef);return n&&e.push(n),e}),[])}(t),f=t.encoding.order;let d;return d=u(f)||qr(f)?Na(f):l.reduce(((e,t)=>(e.field.push(t),e.order.push("y"===r?"descending":"ascending"),e)),{field:[],order:[]}),new Up(e,{dimensionFieldDef:c,stackField:t.vgField(r),facetby:[],stackby:l,sort:d,offset:a,impute:s,as:[t.vgField(r,{suffix:"start",forAs:!0}),t.vgField(r,{suffix:"end",forAs:!0})]})}get stack(){return this._stack}addDimensions(e){this._stack.facetby.push(...e)}dependentFields(){const e=new Set;return e.add(this._stack.stackField),this.getGroupbyFields().forEach(e.add,e),this._stack.facetby.forEach(e.add,e),this._stack.sort.field.forEach(e.add,e),e}producedFields(){return new Set(this._stack.as)}hash(){return"Stack ".concat(j(this._stack))}getGroupbyFields(){const{dimensionFieldDef:e,impute:t,groupby:n}=this._stack;return e?e.bin?t?[Kr(e,{binSuffix:"mid"})]:[Kr(e,{}),Kr(e,{binSuffix:"end"})]:[Kr(e)]:null!=n?n:[]}assemble(){const e=[],{facetby:t,dimensionFieldDef:n,stackField:i,stackby:o,sort:r,offset:a,impute:s,as:c}=this._stack;if(s&&n){const{band:r=.5,bin:a}=n;a&&e.push({type:"formula",expr:"".concat(r,"*")+Kr(n,{expr:"datum"})+"+".concat(1-r,"*")+Kr(n,{expr:"datum",binSuffix:"end"}),as:Kr(n,{binSuffix:"mid",forAs:!0})}),e.push({type:"impute",field:i,groupby:[...o,...t],key:Kr(n,{binSuffix:"mid"}),method:"value",value:0})}return e.push({type:"stack",groupby:[...this.getGroupbyFields(),...t],field:i,sort:r,as:c,offset:a}),e}}class Ip extends Hu{clone(){return new Ip(null,z(this.transform))}constructor(e,t){super(e),this.transform=t}addDimensions(e){this.transform.groupby=U(this.transform.groupby.concat(e),(e=>e))}dependentFields(){var e,t;const n=new Set;return(null!==(e=this.transform.groupby)&&void 0!==e?e:[]).forEach(n.add,n),(null!==(t=this.transform.sort)&&void 0!==t?t:[]).forEach((e=>n.add(e.field))),this.transform.window.map((e=>e.field)).filter((e=>void 0!==e)).forEach(n.add,n),n}producedFields(){return new Set(this.transform.window.map(this.getDefaultName))}getDefaultName(e){var t;return null!==(t=e.as)&&void 0!==t?t:Kr(e)}hash(){return"WindowTransform ".concat(j(this.transform))}assemble(){const e=[],t=[],n=[],i=[];for(const o of this.transform.window)t.push(o.op),n.push(this.getDefaultName(o)),i.push(void 0===o.param?null:o.param),e.push(void 0===o.field?null:o.field);const o=this.transform.frame,r=this.transform.groupby;if(o&&null===o[0]&&null===o[1]&&t.every((e=>Se(e))))return{type:"joinaggregate",as:n,ops:t,fields:e,...void 0!==r?{groupby:r}:{}};const a=[],s=[];if(void 0!==this.transform.sort)for(const e of this.transform.sort){var c;a.push(e.field),s.push(null!==(c=e.order)&&void 0!==c?c:"ascending")}const u={field:a,order:s},l=this.transform.ignorePeers;return{type:"window",params:i,as:n,ops:t,fields:e,sort:u,...void 0!==l?{ignorePeers:l}:{},...void 0!==r?{groupby:r}:{},...void 0!==o?{frame:o}:{}}}}function Hp(e){if(e instanceof gp)if(1!==e.numChildren()||e.children[0]instanceof Gu){const n=e.model.component.data.main;Gp(n);const i=(t=e,function e(n){if(!(n instanceof gp)){const i=n.clone();if(i instanceof Gu){const e=Vp+i.getSource();i.setSource(e),t.model.component.data.outputNodes[e]=i}else(i instanceof hp||i instanceof Up||i instanceof Ip||i instanceof Wp)&&i.addDimensions(t.fields);for(const t of n.children.flatMap(e))t.parent=i;return[i]}return n.children.flatMap(e)}),o=e.children.map(i).flat();for(const e of o)e.parent=n}else{const t=e.children[0];(t instanceof hp||t instanceof Up||t instanceof Ip||t instanceof Wp)&&t.addDimensions(e.fields),t.swapWithParent(),Hp(e)}else e.children.map(Hp);var t}function Gp(e){if(e instanceof Gu&&e.type===Mc.Main&&1===e.numChildren()){const t=e.children[0];t instanceof gp||(t.swapWithParent(),Gp(e))}}const Vp="scale_";function Yp(e){for(const t of e){for(const e of t.children)if(e.parent!==t)return!1;if(!Yp(t.children))return!1}return!0}function Jp(e,t){let n=!1;for(const i of t)n=e.optimize(i)||n;return n}function Xp(e,t,n){let i=e.sources,o=!1;return o=Jp(new Np,i)||o,o=Jp(new zp(t),i)||o,i=i.filter((e=>e.numChildren()>0)),o=Jp(new Mp,i)||o,i=i.filter((e=>e.numChildren()>0)),n||(o=Jp(new Pp,i)||o,o=Jp(new qp(t),i)||o,o=Jp(new Op,i)||o,o=Jp(new jp,i)||o,o=Jp(new Lp,i)||o,o=Jp(new Tp,i)||o,o=Jp(new _p,i)||o,o=Jp(new Rp,i)||o),e.sources=i,o}class Qp{constructor(e){Bn(this,"signal",void 0),Object.defineProperty(this,"signal",{enumerable:!0,get:e})}static fromName(e,t){return new Qp((()=>e(t)))}}function $p(e){Em(e)?function(e){const t=e.component.scales;for(const n of J(t)){const i=Kp(e,n);if(t[n].setWithExplicit("domains",i),nm(e,n),e.component.data.isFaceted){let t=e;for(;!Sm(t)&&t.parent;)t=t.parent;if("shared"===t.component.resolve.scale[n])for(const e of i.value)Ci(e)&&(e.data=Vp+e.data.replace(Vp,""))}}}(e):function(e){for(const t of e.children)$p(t);const t=e.component.scales;for(const n of J(t)){let i,o=null;for(const t of e.children){const e=t.component.scales[n];if(e){i=void 0===i?e.getWithExplicit("domains"):Ec(i,e.getWithExplicit("domains"),"domains","scale",om);const t=e.get("selectionExtent");o&&t&&o.selection!==t.selection&&si(Rn),o=t}}t[n].setWithExplicit("domains",i),o&&t[n].set("selectionExtent",o,!0)}}(e)}function Kp(e,t){const n=e.getScaleComponent(t).get("type"),{encoding:i}=e,o=function(e,t,n,i){if("unaggregated"===e){const{valid:e,reason:i}=im(t,n);if(!e)return void si(i)}else if(void 0===e&&i.useUnaggregatedDomain){const{valid:e}=im(t,n);if(e)return"unaggregated"}return e}(e.scaleDomain(t),e.typedFieldDef(t),n,e.config.scale);return o!==e.scaleDomain(t)&&(e.specifiedScales[t]={...e.specifiedScales[t],domain:o}),"x"===t&&ua(i.x2)?ua(i.x)?Ec(em(n,o,e,"x"),em(n,o,e,"x2"),"domain","scale",om):em(n,o,e,"x2"):"y"===t&&ua(i.y2)?ua(i.y)?Ec(em(n,o,e,"y"),em(n,o,e,"y2"),"domain","scale",om):em(n,o,e,"y2"):em(n,o,e,t)}function Zp(e,t,n){var i;const o=null===(i=Di(n))||void 0===i?void 0:i.unit;return"temporal"===t||o?function(e,t,n){return e.map((e=>{const i=ga(e,{timeUnit:n,type:t});return{signal:"{data: ".concat(i,"}")}}))}(e,t,o):[e]}function em(e,t,n,i){const{encoding:o}=n,r=ua(o[i]),{type:a}=r,s=r.timeUnit;if(function(e){return e&&e.unionWith}(t)){const o=em(e,void 0,n,i),r=Zp(t.unionWith,a,s);return Dc([...o.value,...r])}if(Fi(t))return Dc([t]);if(t&&"unaggregated"!==t&&!xo(t))return Dc(Zp(t,a,s));const c=n.stack;if(c&&i===c.fieldChannel){if("normalize"===c.offset)return Fc([[0,1]]);const e=n.requestDataName(Mc.Main);return Fc([{data:e,field:n.vgField(i,{suffix:"start"})},{data:e,field:n.vgField(i,{suffix:"end"})}])}const u=vn(i)&&qr(r)?function(e,t,n){if(!go(n))return;const i=e.fieldDef(t),o=i.sort;if(Sr(o))return{op:"min",field:vd(i,t),order:"ascending"};const{stack:r}=e,a=r?[...r.groupbyField?[r.groupbyField]:[],...r.stackBy.map((e=>e.fieldDef.field))]:void 0;if(Er(o)){return tm(o,r&&!T(a,o.field))}if(Cr(o)){const{encoding:t,order:n}=o,i=e.fieldDef(t),{aggregate:s,field:c}=i,u=r&&!T(a,c);if(Ce(s)||Ee(s))return tm({field:Kr(i),order:n},u);if(Se(s)||!s)return tm({op:s,field:c,order:n},u)}else{if("descending"===o)return{op:"min",field:e.vgField(t),order:"descending"};if(T(["ascending",void 0],o))return!0}return}(n,i,e):void 0;if(Wr(r)){return Fc(Zp([r.datum],a,s))}const f=r;if("unaggregated"===t){const e=n.requestDataName(Mc.Main),{field:t}=r;return Fc([{data:e,field:Kr({field:t,aggregate:"min"})},{data:e,field:Kr({field:t,aggregate:"max"})}])}if(Fn(f.bin)){if(go(e))return Fc("bin-ordinal"===e?[]:[{data:$(u)?n.requestDataName(Mc.Main):n.requestDataName(Mc.Raw),field:n.vgField(i,ya(f,i)?{binSuffix:"range"}:{}),sort:!0!==u&&l(u)?u:{field:n.vgField(i,{}),op:"min"}}]);{const{bin:e}=f;if(Fn(e)){const t=fp(n,f.field,e);return Fc([new Qp((()=>{const e=n.getSignalName(t);return"[".concat(e,".start, ").concat(e,".stop]")}))])}return Fc([{data:n.requestDataName(Mc.Main),field:n.vgField(i,{})}])}}if(f.timeUnit&&T(["time","utc"],e)&&jr(i,f,Em(n)?n.encoding[Mt(i)]:void 0,n.stack,n.markDef,n.config)){const e=n.requestDataName(Mc.Main);return Fc([{data:e,field:n.vgField(i)},{data:e,field:n.vgField(i,{suffix:"end"})}])}return Fc(u?[{data:$(u)?n.requestDataName(Mc.Main):n.requestDataName(Mc.Raw),field:n.vgField(i),sort:u}]:[{data:n.requestDataName(Mc.Main),field:n.vgField(i)}])}function tm(e,t){const{op:n,field:i,order:o}=e;return{op:null!=n?n:t?"sum":Dr,...i?{field:re(i)}:{},...o?{order:o}:{}}}function nm(e,t){var n;const i=e.component.scales[t],o=e.specifiedScales[t].domain,r=null===(n=e.fieldDef(t))||void 0===n?void 0:n.bin,a=xo(o)&&o,s=Cn(r)&&En(r.extent)&&r.extent;(a||s)&&i.set("selectionExtent",null!=a?a:s,!0)}function im(e,t){const{aggregate:n,type:i}=e;return n?x(n)&&!Oe[n]?{valid:!1,reason:$n(n)}:"quantitative"===i&&"log"===t?{valid:!1,reason:Kn(e)}:{valid:!0}:{valid:!1,reason:Qn(e)}}function om(e,t,n,i){return e.explicit&&t.explicit&&si(function(e,t,n,i){return"Conflicting ".concat(t.toString(),' property "').concat(e.toString(),'" (').concat(P(n)," and ").concat(P(i),"). Using the union of the two domains.")}(n,i,e.value,t.value)),{explicit:e.explicit,value:[...e.value,...t.value]}}function rm(e){const t=U(e.map((e=>{if(Ci(e)){const{sort:t,...n}=e;return n}return e})),j),n=U(e.map((e=>{if(Ci(e)){const t=e.sort;return void 0===t||$(t)||("op"in t&&"count"===t.op&&delete t.field,"ascending"===t.order&&delete t.order),t}})).filter((e=>void 0!==e)),j);if(0===t.length)return;if(1===t.length){const t=e[0];if(Ci(t)&&n.length>0){let e=n[0];if(n.length>1)si(ti),e=!0;else if(l(e)&&"field"in e){const n=e.field;t.field===n&&(e=!e.order||{order:e.order})}return{...t,sort:e}}return t}const i=U(n.map((e=>$(e)||!("op"in e)||x(e.op)&&e.op in ke?e:(si(function(e){return"Dropping sort property ".concat(P(e),' as unioned domains only support boolean or op "count", "min", and "max".')}(e)),!0))),j);let o;1===i.length?o=i[0]:i.length>1&&(si(ti),o=!0);const r=U(e.map((e=>Ci(e)?e.data:null)),(e=>e));if(1===r.length&&null!==r[0]){return{data:r[0],fields:t.map((e=>e.field)),...o?{sort:o}:{}}}return{fields:t,...o?{sort:o}:{}}}function am(e){if(Ci(e)&&x(e.field))return e.field;if(function(e){return!u(e)&&"fields"in e&&!("data"in e)}(e)){let t;for(const n of e.fields)if(Ci(n)&&x(n.field))if(t){if(t!==n.field)return si("Detected faceted independent scales that union domain of multiple fields from different data sources. We will use the first field. The result view size may be incorrect."),t}else t=n.field;return si("Detected faceted independent scales that union domain of the same fields from different source. We will assume that this is the same field from a different fork of the same data source. However, if this is not the case, the result view size may be incorrect."),t}if(function(e){return!u(e)&&"fields"in e&&"data"in e}(e)){si("Detected faceted independent scales that union domain of multiple fields from the same data source. We will use the first field. The result view size may be incorrect.");const t=e.fields[0];return x(t)?t:void 0}}function sm(e,t){return rm(e.component.scales[t].get("domains").map((t=>(Ci(t)&&(t.data=e.lookupDataSource(t.data)),t))))}function cm(e){return _m(e)||Bm(e)?e.children.reduce(((e,t)=>e.concat(cm(t))),um(e)):um(e)}function um(e){return J(e.component.scales).reduce(((t,n)=>{const i=e.component.scales[n];if(i.merged)return t;const o=i.combine(),{name:r,type:a,selectionExtent:s,domains:c,range:u,reverse:f,...d}=o,p=function(e,t,n,i){if(en(n)){if(ki(e))return{step:{signal:t+"_step"}}}else if(l(e)&&Ci(e))return{...e,data:i.lookupDataSource(e.data)};return e}(o.range,r,n,e);let m;s&&(m=function(e,t){const n=t.selection;return{signal:nd(e.getSelectionComponent(n,K(n)),t)}}(e,s));const h=sm(e,n);return t.push({name:r,type:a,...h?{domain:h}:{},...m?{domainRaw:m}:{},range:p,...void 0!==f?{reverse:f}:{},...d}),t}),[])}class lm extends Ac{constructor(e,t){super({},{name:e}),Bn(this,"merged",!1),this.setWithExplicit("type",t)}domainDefinitelyIncludesZero(){return!1!==this.get("zero")||L(this.get("domains"),(e=>u(e)&&2===e.length&&e[0]<=0&&e[1]>=0))}}const fm=["range","scheme"];function dm(e){return"x"===e?"width":"y"===e?"height":void 0}function pm(e,t){const n=e.fieldDef(t);if(n&&n.bin&&Fn(n.bin)){const i=fp(e,n.field,n.bin),o=dm(t),r=e.getName(o);return new Qp((()=>{const t=e.getSignalName(i),n="(".concat(t,".stop - ").concat(t,".start) / ").concat(t,".step");return"".concat(e.getSignalName(r)," / (").concat(n,")")}))}}function mm(e,t){const n=t.specifiedScales[e],{size:i}=t,o=t.getScaleComponent(e).get("type");for(const i of fm)if(void 0!==n[i]){const r=Bo(o,i),a=_o(e,i);if(r)if(a)si(a);else switch(i){case"range":{const i=n.range;if(u(i)){if(en(e))return Dc(i.map((e=>{if("width"===e||"height"===e){const n=t.getName(e),i=t.getSignalName.bind(t);return Qp.fromName(i,n)}return e})))}else if(l(i))return Dc({data:t.requestDataName(Mc.Main),field:i.field,sort:{op:"min",field:t.vgField(e)}});return Dc(i)}case"scheme":return Dc(hm(n[i]))}else si(Zn(o,i,e))}if(e===Me||e===Te){const t=e===Me?"width":"height",n=i[t];if(Os(n)){if(go(o))return Dc({step:n.step});si(ei(t))}}const{rangeMin:r,rangeMax:a}=n,s=function(e,t){const{size:n,config:i,mark:o,encoding:r}=t,a=t.getSignalName.bind(t),{type:s}=ua(r[e]),c=t.getScaleComponent(e).get("type"),{domain:l,domainMid:f}=t.specifiedScales[e];switch(e){case Me:case Te:{if(T(["point","band"],c))if(e!==Me||n.width){if(e===Te&&!n.height){const e=Ts(i.view,"height");if(Os(e))return e}}else{const e=Ts(i.view,"width");if(Os(e))return e}const o=dm(e),r=t.getName(o);return e===Te&&vo(c)?[Qp.fromName(a,r),0]:[0,Qp.fromName(a,r)]}case Ke:{const r=gm(o,t.component.scales[e].get("zero"),i),a=function(e,t,n,i){const o={x:pm(n,"x"),y:pm(n,"y")};switch(e){case"bar":case"tick":{if(void 0!==i.scale.maxBandSize)return i.scale.maxBandSize;const e=ym(t,o,i.view);return b(e)?e-1:new Qp((()=>"".concat(e.signal," - 1")))}case"line":case"trail":case"rule":return i.scale.maxStrokeWidth;case"text":return i.scale.maxFontSize;case"point":case"square":case"circle":{if(i.scale.maxSize)return i.scale.maxSize;const e=ym(t,o,i.view);return b(e)?Math.pow(vm*e,2):new Qp((()=>"pow(".concat(vm," * ").concat(e.signal,", 2)")))}}throw new Error(Yn("size",e))}(o,n,t,i);return bo(c)?function(e,t,n){const i=()=>{const i=Ca(t),o=Ca(e),r="(".concat(i," - ").concat(o,") / (").concat(n," - 1)");return"sequence(".concat(o,", ").concat(i," + ").concat(r,", ").concat(r,")")};return Fi(t)?new Qp(i):{signal:i()}}(r,a,function(e,t,n,i){switch(e){case"quantile":return t.scale.quantileCount;case"quantize":return t.scale.quantizeCount;case"threshold":return void 0!==n&&u(n)?n.length+1:(si(function(e){return"Domain for ".concat(e," is required for threshold scale.")}(i)),3)}}(c,i,l,e)):[r,a]}case Ue:return[0,2*Math.PI];case Ze:return[0,360];case Re:return[0,new Qp((()=>{const e=t.getSignalName("width"),n=t.getSignalName("height");return"min(".concat(e,",").concat(n,")/2")}))];case it:return[i.scale.minStrokeWidth,i.scale.maxStrokeWidth];case ot:return[[1,0],[4,2],[2,1],[1,1],[1,2,4,2]];case $e:return"symbol";case Je:case Xe:case Qe:return"ordinal"===c?"nominal"===s?"category":"ordinal":void 0!==f?"diverging":"rect"===o||"geoshape"===o?"heatmap":"ramp";case et:case tt:case nt:return[i.scale.minOpacity,i.scale.maxOpacity]}throw new Error("Scale range undefined for channel ".concat(e))}(e,t);return(void 0!==r||void 0!==a)&&Bo(o,"rangeMin")&&u(s)&&2===s.length?Dc([null!=r?r:s[0],null!=a?a:s[1]]):Fc(s)}function hm(e){return function(e){return!x(e)&&!!e.name}(e)?{scheme:e.name,...N(e,["name"])}:{scheme:e}}function gm(e,t,n){if(t)return Fi(t)?{signal:"".concat(t.signal," ? 0 : ").concat(gm(e,!1,n))}:0;switch(e){case"bar":case"tick":return n.scale.minBandSize;case"line":case"trail":case"rule":return n.scale.minStrokeWidth;case"text":return n.scale.minFontSize;case"point":case"square":case"circle":return n.scale.minSize}throw new Error(Yn("size",e))}const vm=.95;function ym(e,t,n){const i=Os(e.width)?e.width.step:Ms(n,"width"),o=Os(e.height)?e.height.step:Ms(n,"height");return t.x||t.y?new Qp((()=>{const e=[t.x?t.x.signal:i,t.y?t.y.signal:o];return"min(".concat(e.join(", "),")")})):Math.min(i,o)}function bm(e,t){Em(e)?function(e,t){const n=e.component.scales,{config:i,encoding:o,markDef:r,specifiedScales:a}=e;for(const s of J(n)){const c=a[s],u=n[s],l=e.getScaleComponent(s),f=ua(o[s]),d=c[t],p=l.get("type"),m=l.get("padding"),h=l.get("paddingInner"),g=Bo(p,t),v=_o(s,t);if(void 0!==d&&(g?v&&si(v):si(Zn(p,t,s))),g&&void 0===v)if(void 0!==d){const e=f.timeUnit,n=f.type;switch(t){case"domainMax":case"domainMin":ci(c[t])||"temporal"===n||e?u.set(t,{signal:ga(c[t],{type:n,timeUnit:e})},!0):u.set(t,c[t],!0);break;default:u.copyKeyFromObject(t,c)}}else{const n=t in xm?xm[t]({model:e,channel:s,fieldOrDatumDef:f,scaleType:p,scalePadding:m,scalePaddingInner:h,domain:c.domain,markDef:r,config:i}):i.scale[t];void 0!==n&&u.set(t,n,!1)}}}(e,t):Am(e,t)}const xm={bins:({model:e,fieldOrDatumDef:t})=>qr(t)?function(e,t){const n=t.bin;if(Fn(n)){const i=fp(e,t.field,n);return new Qp((()=>e.getSignalName(i)))}if(kn(n)&&Cn(n)&&void 0!==n.step)return{step:n.step};return}(e,t):void 0,interpolate:({channel:e,fieldOrDatumDef:t})=>function(e,t){if(T([Je,Xe,Qe],e)&&"nominal"!==t)return"hcl";return}(e,t.type),nice:({scaleType:e,channel:t,fieldOrDatumDef:n})=>function(e,t,n){var i;if((null===(i=ca(n))||void 0===i?void 0:i.bin)||T([Ki,Zi],e))return;return t in Kt||void 0}(e,t,n),padding:({channel:e,scaleType:t,fieldOrDatumDef:n,markDef:i,config:o})=>function(e,t,n,i,o,r){if(e in Kt){if(yo(t)){if(void 0!==n.continuousPadding)return n.continuousPadding;const{type:t,orient:a}=o;if("bar"===t&&(!qr(i)||!i.bin&&!i.timeUnit)&&("vertical"===a&&"x"===e||"horizontal"===a&&"y"===e))return r.continuousBandSize}if(t===io)return n.pointPadding}return}(e,t,o.scale,n,i,o.bar),paddingInner:({scalePadding:e,channel:t,markDef:n,config:i})=>function(e,t,n,i){if(void 0!==e)return;if(t in Kt){const{bandPaddingInner:e,barBandPaddingInner:t,rectBandPaddingInner:o}=i;return ue(e,"bar"===n?t:o)}return}(e,t,n.type,i.scale),paddingOuter:({scalePadding:e,channel:t,scaleType:n,markDef:i,scalePaddingInner:o,config:r})=>function(e,t,n,i,o,r){if(void 0!==e)return;if(t in Kt&&n===oo){const{bandPaddingOuter:e}=r;return ue(e,Fi(o)?{signal:"".concat(o.signal,"/2")}:o/2)}return}(e,t,n,i.type,o,r.scale),reverse:({fieldOrDatumDef:e,scaleType:t,channel:n,config:i})=>function(e,t,n,i){if("x"===n&&void 0!==i.xReverse)return vo(e)&&"descending"===t?Fi(i.xReverse)?{signal:"!".concat(i.xReverse.signal)}:!i.xReverse:i.xReverse;if(vo(e)&&"descending"===t)return!0;return}(t,qr(e)?e.sort:void 0,n,i.scale),zero:({channel:e,fieldOrDatumDef:t,domain:n,markDef:i,scaleType:o})=>function(e,t,n,i,o){if(n&&"unaggregated"!==n&&vo(o)){if(u(n)){const e=n[0],t=n[n.length-1];if(e<=0&&t>=0)return!0}return!1}if("size"===e&&"quantitative"===t.type&&!bo(o))return!0;if((!qr(t)||!t.bin)&&T([...Zt,...nn],e)){const{orient:t,type:n}=i;return!T(["bar","area","line","trail"],n)||!("horizontal"===t&&"y"===e||"vertical"===t&&"x"===e)}return!1}(e,t,n,i,o)};function wm(e){Em(e)?function(e){const t=e.component.scales;for(const n of gn){const i=t[n];if(!i)continue;const o=mm(n,e);i.setWithExplicit("range",o)}}(e):Am(e,"range")}function Am(e,t){const n=e.component.scales;for(const n of e.children)"range"===t?wm(n):bm(n,t);for(const i of J(n)){let o;for(const n of e.children){const e=n.component.scales[i];if(e){o=Ec(o,e.getWithExplicit(t),t,"scale",kc(((e,n)=>{switch(t){case"range":return e.step&&n.step?e.step-n.step:0}return 0})))}}n[i].setWithExplicit(t,o)}}function Dm(e,t,n,i){const o=function(e,t,n){var i;switch(t.type){case"nominal":case"ordinal":if(yt(e)||"discrete"===An(e))return"shape"===e&&"ordinal"===t.type&&si(Xn(e,"ordinal")),"ordinal";if(e in Kt){if(T(["rect","bar","image","rule"],n))return"band"}else if("arc"===n&&e in tn)return"band";return void 0!==t.band||Jr(t)&&(null===(i=t.axis)||void 0===i?void 0:i.tickBand)?"band":"point";case"temporal":return yt(e)?"time":"discrete"===An(e)?(si(Xn(e,"temporal")),"ordinal"):qr(t)&&t.timeUnit&&Di(t.timeUnit).utc?"utc":"time";case"quantitative":return yt(e)?qr(t)&&Fn(t.bin)?"bin-ordinal":"linear":"discrete"===An(e)?(si(Xn(e,"quantitative")),"ordinal"):"linear";case"geojson":return}throw new Error(Hn(t.type))}(t,n,i),{type:r}=e;return vn(t)?void 0!==r?function(e,t){if(!vn(e))return!1;switch(e){case Me:case Te:case Ue:case Re:return yo(t)||T(["band","point"],t);case Ke:case it:case et:case tt:case nt:case Ze:return yo(t)||bo(t)||T(["band","point","ordinal"],t);case Je:case Xe:case Qe:return"band"!==t;case ot:return"ordinal"===t||bo(t);case $e:return"ordinal"===t}}(t,r)?qr(n)&&(a=r,s=n.type,!(T([Ii,Gi],s)?void 0===a||go(a):s===Hi?T([Ki,Zi,void 0],a):s!==Ui||T([Ji,Xi,Qi,$i,eo,to,no,Yi,void 0],a)))?(si(function(e,t){return'FieldDef does not work with "'.concat(e,'" scale. We are using "').concat(t,'" scale instead.')}(r,o)),o):r:(si(function(e,t,n){return'Channel "'.concat(e,'" does not work with "').concat(t,'" scale. We are using "').concat(n,'" scale instead.')}(t,r,o)),o):o:null;var a,s}function Fm(e){Em(e)?e.component.scales=function(e){const{encoding:t,mark:n}=e;return gn.reduce(((i,o)=>{const r=ua(t[o]);if(r&&n===Yo&&o===$e&&r.type===Vi)return i;let a=r&&r.scale;if(r&&null!==a&&!1!==a){var s;a=null!==(s=a)&&void 0!==s?s:{};const t=Dm(a,o,r,n);i[o]=new lm(e.scaleName(o+"",!0),{value:t,explicit:a.type===t})}return i}),{})}(e):e.component.scales=function(e){const t=e.component.scales={},n={},i=e.component.resolve;for(const t of e.children){Fm(t);for(const r of J(t.component.scales)){var o;if(i.scale[r]=null!==(o=i.scale[r])&&void 0!==o?o:qd(r,e),"shared"===i.scale[r]){const e=n[r],o=t.component.scales[r].getWithExplicit("type");e?ao(e.value,o.value)?n[r]=Ec(e,o,"type","scale",km):(i.scale[r]="independent",delete n[r]):n[r]=o}}}for(const i of J(n)){const o=e.scaleName(i,!0),r=n[i];t[i]=new lm(o,r);for(const t of e.children){const e=t.component.scales[i];e&&(t.renameScale(e.get("name"),o),e.merged=!0)}}return t}(e)}const km=kc(((e,t)=>co(e)-co(t)));class Cm{constructor(){Bn(this,"nameMap",void 0),this.nameMap={}}rename(e,t){this.nameMap[e]=t}has(e){return void 0!==this.nameMap[e]}get(e){for(;this.nameMap[e]&&e!==this.nameMap[e];)e=this.nameMap[e];return e}}function Em(e){return"unit"===(null==e?void 0:e.type)}function Sm(e){return"facet"===(null==e?void 0:e.type)}function Bm(e){return"concat"===(null==e?void 0:e.type)}function _m(e){return"layer"===(null==e?void 0:e.type)}class zm{constructor(e,t,n,i,o,r,a){var s,c;this.type=t,this.parent=n,this.config=o,Bn(this,"name",void 0),Bn(this,"size",void 0),Bn(this,"title",void 0),Bn(this,"description",void 0),Bn(this,"data",void 0),Bn(this,"transforms",void 0),Bn(this,"layout",void 0),Bn(this,"scaleNameMap",void 0),Bn(this,"projectionNameMap",void 0),Bn(this,"signalNameMap",void 0),Bn(this,"component",void 0),Bn(this,"view",void 0),Bn(this,"children",[]),Bn(this,"correctDataNames",(e=>(e.from&&e.from.data&&(e.from.data=this.lookupDataSource(e.from.data)),e.from&&e.from.facet&&e.from.facet.data&&(e.from.facet.data=this.lookupDataSource(e.from.facet.data)),e))),this.parent=n,this.config=o,this.view=Oo(a),this.name=null!==(s=e.name)&&void 0!==s?s:i,this.title=xa(e.title)?{text:e.title}:e.title?this.initTitle(e.title):void 0,this.scaleNameMap=n?n.scaleNameMap:new Cm,this.projectionNameMap=n?n.projectionNameMap:new Cm,this.signalNameMap=n?n.signalNameMap:new Cm,this.data=e.data,this.description=e.description,this.transforms=(null!==(c=e.transform)&&void 0!==c?c:[]).map((e=>Tc(e)?{filter:B(e.filter,Wi)}:e)),this.layout="layer"===t||"unit"===t?{}:function(e,t,n){const i=n[t],o={},{spacing:r,columns:a}=i;void 0!==r&&(o.spacing=r),void 0!==a&&(zr(e)&&!Br(e.facet)||Es(e))&&(o.columns=a),Ss(e)&&(o.columns=1);for(const t of Ps)if(void 0!==e[t])if("spacing"===t){var s,c;const n=e[t];o[t]=b(n)?n:{row:null!==(s=n.row)&&void 0!==s?s:r,column:null!==(c=n.column)&&void 0!==c?c:r}}else o[t]=e[t];return o}(e,t,o),this.component={data:{sources:n?n.component.data.sources:[],outputNodes:n?n.component.data.outputNodes:{},outputNodeRefCounts:n?n.component.data.outputNodeRefCounts:{},isFaceted:zr(e)||n&&n.component.data.isFaceted&&void 0===e.data},layoutSize:new Ac,layoutHeaders:{row:{},column:{},facet:{}},mark:null,resolve:{scale:{},axis:{},legend:{},...r?z(r):{}},selection:null,scales:null,projection:null,axes:{},legends:{}}}initTitle(e){const t=J(e),n={text:Aa(e.text)};for(const i of t)n[i]=Aa(e[i]);return n}get width(){return this.getSizeSignalRef("width")}get height(){return this.getSizeSignalRef("height")}parse(){this.parseScale(),this.parseLayoutSize(),this.renameTopLevelLayoutSizeSignal(),this.parseSelections(),this.parseProjection(),this.parseData(),this.parseAxesAndHeaders(),this.parseLegends(),this.parseMarkGroup()}parseScale(){!function(e,{ignoreRange:t}={}){Fm(e),$p(e);for(const t of So)bm(e,t);t||wm(e)}(this)}parseProjection(){cp(this)}renameTopLevelLayoutSizeSignal(){"width"!==this.getName("width")&&this.renameSignal(this.getName("width"),"width"),"height"!==this.getName("height")&&this.renameSignal(this.getName("height"),"height")}parseLegends(){Kd(this)}assembleGroupStyle(){var e,t;if("unit"===this.type||"layer"===this.type)return null!==(e=null===(t=this.view)||void 0===t?void 0:t.style)&&void 0!==e?e:"cell"}assembleEncodeFromView(e){const{style:t,...n}=e,i={};for(const e of J(n)){const t=n[e];void 0!==t&&(i[e]=Fa(t))}return i}assembleGroupEncodeEntry(e){let t={};var n;if((this.view&&(t=this.assembleEncodeFromView(this.view)),!e)&&(this.description&&(t.description=Fa(this.description)),"unit"===this.type||"layer"===this.type))return{width:this.getSizeSignalRef("width"),height:this.getSizeSignalRef("height"),...null!==(n=t)&&void 0!==n?n:{}};return Y(t)?void 0:t}assembleLayout(){if(!this.layout)return;const{spacing:e,...t}=this.layout,{component:n,config:i}=this,o=function(e,t){const n={};for(const i of xt){const o=e[i];if(null==o?void 0:o.facetFieldDef){const{titleAnchor:e,titleOrient:r}=xd(["titleAnchor","titleOrient"],o.facetFieldDef.header,t,i),a=yd(i,r),s=zd(e,a);void 0!==s&&(n[a]=s)}}return Y(n)?void 0:n}(n.layoutHeaders,i);return{padding:e,...this.assembleDefaultLayout(),...t,...o?{titleBand:o}:{}}}assembleDefaultLayout(){return{}}assembleHeaderMarks(){const{layoutHeaders:e}=this.component;let t=[];for(const n of xt)e[n].title&&t.push(Dd(this,n));for(const e of wd)t=t.concat(Cd(this,e));return t}assembleAxes(){return function(e,t){const{x:n=[],y:i=[]}=e;return[...n.map((e=>rd(e,"grid",t))),...i.map((e=>rd(e,"grid",t))),...n.map((e=>rd(e,"main",t))),...i.map((e=>rd(e,"main",t)))].filter((e=>e))}(this.component.axes,this.config)}assembleLegends(){return ip(this)}assembleProjections(){return op(this)}assembleTitle(){var e;const{encoding:t,...n}=null!==(e=this.title)&&void 0!==e?e:{},i={...ba(this.config.title).nonMark,...n,...t?{encode:{update:t}}:{}};if(i.text){var o,r;if(T(["unit","layer"],this.type)){if(T(["middle",void 0],i.anchor))i.frame=null!==(o=i.frame)&&void 0!==o?o:"group"}else i.anchor=null!==(r=i.anchor)&&void 0!==r?r:"start";return Y(i)?void 0:i}}assembleGroup(e=[]){const t={};(e=e.concat(this.assembleSignals())).length>0&&(t.signals=e);const n=this.assembleLayout();n&&(t.layout=n),t.marks=[].concat(this.assembleHeaderMarks(),this.assembleMarks());const i=!this.parent||Sm(this.parent)?cm(this):[];i.length>0&&(t.scales=i);const o=this.assembleAxes();o.length>0&&(t.axes=o);const r=this.assembleLegends();return r.length>0&&(t.legends=r),t}getName(e){return K((this.name?this.name+"_":"")+e)}getDataName(e){return this.getName(Mc[e].toLowerCase())}requestDataName(e){const t=this.getDataName(e),n=this.component.data.outputNodeRefCounts;return n[t]=(n[t]||0)+1,t}getSizeSignalRef(e){if(Sm(this.parent)){const t=on(Td(e)),n=this.component.scales[t];if(n&&!n.merged){const e=n.get("type"),i=n.get("range");if(go(e)&&ki(i)){const e=n.get("name"),i=am(sm(this,t));if(i){return{signal:Md(e,n,Kr({aggregate:"distinct",field:i},{expr:"datum"}))}}return si(Mn(t)),null}}}return{signal:this.signalNameMap.get(this.getName(e))}}lookupDataSource(e){const t=this.component.data.outputNodes[e];return t?t.getSource():e}getSignalName(e){return this.signalNameMap.get(e)}renameSignal(e,t){this.signalNameMap.rename(e,t)}renameScale(e,t){this.scaleNameMap.rename(e,t)}renameProjection(e,t){this.projectionNameMap.rename(e,t)}scaleName(e,t){return t?this.getName(e):zt(e)&&vn(e)&&this.component.scales[e]||this.scaleNameMap.has(this.getName(e))?this.scaleNameMap.get(this.getName(e)):void 0}projectionName(e){return e?this.getName("projection"):this.component.projection&&!this.component.projection.merged||this.projectionNameMap.has(this.getName("projection"))?this.projectionNameMap.get(this.getName("projection")):void 0}getScaleComponent(e){if(!this.component.scales)throw new Error("getScaleComponent cannot be called before parseScale(). Make sure you have called parseScale or use parseUnitModelWithScale().");const t=this.component.scales[e];return t&&!t.merged?t:this.parent?this.parent.getScaleComponent(e):void 0}getSelectionComponent(e,t){let n=this.component.selection[e];if(!n&&this.parent&&(n=this.parent.getSelectionComponent(e,t)),!n)throw new Error('Cannot find a selection named "'.concat(t,'".'));return n}hasAxisOrientSignalRef(){var e,t;return(null===(e=this.component.axes.x)||void 0===e?void 0:e.some((e=>e.hasOrientSignalRef())))||(null===(t=this.component.axes.y)||void 0===t?void 0:t.some((e=>e.hasOrientSignalRef())))}}class Om extends zm{vgField(e,t={}){const n=this.fieldDef(e);if(n)return Kr(n,t)}reduceFieldDef(e,t){return function(e,t,n,i){return e?J(e).reduce(((n,o)=>{const r=e[o];return u(r)?r.reduce(((e,n)=>t.call(i,e,n,o)),n):t.call(i,n,r,o)}),n):n}(this.getMapping(),((t,n,i)=>{const o=ca(n);return o?e(t,o,i):t}),t)}forEachFieldDef(e,t){Ha(this.getMapping(),((t,n)=>{const i=ca(t);i&&e(i,n)}),t)}}class Nm extends Hu{clone(){return new Nm(null,z(this.transform))}constructor(e,t){var n,i,o;super(e),this.transform=t,this.transform=z(t);const r=null!==(n=this.transform.as)&&void 0!==n?n:[void 0,void 0];this.transform.as=[null!==(i=r[0])&&void 0!==i?i:"value",null!==(o=r[1])&&void 0!==o?o:"density"]}dependentFields(){var e;return new Set([this.transform.density,...null!==(e=this.transform.groupby)&&void 0!==e?e:[]])}producedFields(){return new Set(this.transform.as)}hash(){return"DensityTransform ".concat(j(this.transform))}assemble(){const{density:e,...t}=this.transform;return{type:"kde",field:e,...t}}}class Pm extends Hu{clone(){return new Pm(null,{...this.filter})}constructor(e,t){super(e),this.filter=t}static make(e,t){const{config:n,mark:i,markDef:o}=t;if("filter"!==Ba("invalid",o,n))return null;const r=t.reduceFieldDef(((e,n,o)=>{const r=vn(o)&&t.getScaleComponent(o);if(r){vo(r.get("type"))&&"count"!==n.aggregate&&!Jo(i)&&(e[n.field]=n)}return e}),{});return J(r).length?new Pm(e,r):null}dependentFields(){return new Set(J(this.filter))}producedFields(){return new Set}hash(){return"FilterInvalid ".concat(j(this.filter))}assemble(){const e=J(this.filter).reduce(((e,t)=>{const n=this.filter[t],i=Kr(n,{expr:"datum"});return null!==n&&("temporal"===n.type?e.push("(isDate(".concat(i,") || (isValid(").concat(i,") && isFinite(+").concat(i,")))")):"quantitative"===n.type&&(e.push("isValid(".concat(i,")")),e.push("isFinite(+".concat(i,")")))),e}),[]);return e.length>0?{type:"filter",expr:e.join(" && ")}:null}}class jm extends Hu{clone(){return new jm(this.parent,z(this.transform))}constructor(e,t){super(e),this.transform=t,this.transform=z(t);const{flatten:n,as:i=[]}=this.transform;this.transform.as=n.map(((e,t)=>{var n;return null!==(n=i[t])&&void 0!==n?n:e}))}dependentFields(){return new Set(this.transform.flatten)}producedFields(){return new Set(this.transform.as)}hash(){return"FlattenTransform ".concat(j(this.transform))}assemble(){const{flatten:e,as:t}=this.transform;return{type:"flatten",fields:e,as:t}}}class Mm extends Hu{clone(){return new Mm(null,z(this.transform))}constructor(e,t){var n,i,o;super(e),this.transform=t,this.transform=z(t);const r=null!==(n=this.transform.as)&&void 0!==n?n:[void 0,void 0];this.transform.as=[null!==(i=r[0])&&void 0!==i?i:"key",null!==(o=r[1])&&void 0!==o?o:"value"]}dependentFields(){return new Set(this.transform.fold)}producedFields(){return new Set(this.transform.as)}hash(){return"FoldTransform ".concat(j(this.transform))}assemble(){const{fold:e,as:t}=this.transform;return{type:"fold",fields:e,as:t}}}class Tm extends Hu{clone(){return new Tm(null,z(this.fields),this.geojson,this.signal)}static parseAll(e,t){if(t.component.projection&&!t.component.projection.isFit)return e;let n=0;for(const i of[[Ge,He],[Ye,Ve]]){const o=i.map((e=>{const n=ua(t.encoding[e]);return qr(n)?n.field:Wr(n)?{expr:"".concat(n.datum)}:Vr(n)?{expr:"".concat(n.value)}:void 0}));(o[0]||o[1])&&(e=new Tm(e,o,null,t.getName("geojson_".concat(n++))))}if(t.channelHasField($e)){const i=t.typedFieldDef($e);i.type===Vi&&(e=new Tm(e,null,i.field,t.getName("geojson_".concat(n++))))}return e}constructor(e,t,n,i){super(e),this.fields=t,this.geojson=n,this.signal=i}dependentFields(){var e;const t=(null!==(e=this.fields)&&void 0!==e?e:[]).filter(x);return new Set([...this.geojson?[this.geojson]:[],...t])}producedFields(){return new Set}hash(){return"GeoJSON ".concat(this.geojson," ").concat(this.signal," ").concat(j(this.fields))}assemble(){return{type:"geojson",...this.fields?{fields:this.fields}:{},...this.geojson?{geojson:this.geojson}:{},signal:this.signal}}}class Lm extends Hu{clone(){return new Lm(null,this.projection,z(this.fields),z(this.as))}constructor(e,t,n,i){super(e),this.projection=t,this.fields=n,this.as=i}static parseAll(e,t){if(!t.projectionName())return e;for(const n of[[Ge,He],[Ye,Ve]]){const i=n.map((e=>{const n=ua(t.encoding[e]);return qr(n)?n.field:Wr(n)?{expr:"".concat(n.datum)}:Vr(n)?{expr:"".concat(n.value)}:void 0})),o=n[0]===Ye?"2":"";(i[0]||i[1])&&(e=new Lm(e,t.projectionName(),i,[t.getName("x"+o),t.getName("y"+o)]))}return e}dependentFields(){return new Set(this.fields.filter(x))}producedFields(){return new Set(this.as)}hash(){return"Geopoint ".concat(this.projection," ").concat(j(this.fields)," ").concat(j(this.as))}assemble(){return{type:"geopoint",projection:this.projection,fields:this.fields,as:this.as}}}class qm extends Hu{clone(){return new qm(null,z(this.transform))}constructor(e,t){super(e),this.transform=t}dependentFields(){var e;return new Set([this.transform.impute,this.transform.key,...null!==(e=this.transform.groupby)&&void 0!==e?e:[]])}producedFields(){return new Set([this.transform.impute])}processSequence(e){const{start:t=0,stop:n,step:i}=e,o=[t,n,...i?[i]:[]].join(",");return{signal:"sequence(".concat(o,")")}}static makeFromTransform(e,t){return new qm(e,t)}static makeFromEncoding(e,t){const n=t.encoding,i=n.x,o=n.y;if(qr(i)&&qr(o)){const r=i.impute?i:o.impute?o:void 0;if(void 0===r)return;const a=i.impute?o:o.impute?i:void 0,{method:s,value:c,frame:u,keyvals:l}=r.impute,f=Ga(t.mark,n);return new qm(e,{impute:r.field,key:a.field,...s?{method:s}:{},...void 0!==c?{value:c}:{},...u?{frame:u}:{},...void 0!==l?{keyvals:l}:{},...f.length?{groupby:f}:{}})}return null}hash(){return"Impute ".concat(j(this.transform))}assemble(){const{impute:e,key:t,keyvals:n,method:i,groupby:o,value:r,frame:a=[null,null]}=this.transform,s={type:"impute",field:e,key:t,...n?{keyvals:(c=n,void 0!==(null==c?void 0:c.stop)?this.processSequence(n):n)}:{},method:"value",...o?{groupby:o}:{},value:i&&"value"!==i?null:r};var c;if(i&&"value"!==i){return[s,{type:"window",as:["imputed_".concat(e,"_value")],ops:[i],fields:[e],frame:a,ignorePeers:!1,...o?{groupby:o}:{}},{type:"formula",expr:"datum.".concat(e," === null ? datum.imputed_").concat(e,"_value : datum.").concat(e),as:e}]}return[s]}}class Rm extends Hu{clone(){return new Rm(null,z(this.transform))}constructor(e,t){var n,i,o;super(e),this.transform=t,this.transform=z(t);const r=null!==(n=this.transform.as)&&void 0!==n?n:[void 0,void 0];this.transform.as=[null!==(i=r[0])&&void 0!==i?i:t.on,null!==(o=r[1])&&void 0!==o?o:t.loess]}dependentFields(){var e;return new Set([this.transform.loess,this.transform.on,...null!==(e=this.transform.groupby)&&void 0!==e?e:[]])}producedFields(){return new Set(this.transform.as)}hash(){return"LoessTransform ".concat(j(this.transform))}assemble(){const{loess:e,on:t,...n}=this.transform;return{type:"loess",x:t,y:e,...n}}}class Wm extends Hu{clone(){return new Wm(null,z(this.transform),this.secondary)}constructor(e,t,n){super(e),this.transform=t,this.secondary=n}static make(e,t,n,i){const o=t.component.data.sources,{from:r}=n;let a=null;if(function(e){return"data"in e}(r)){let e=nh(r.data,o);e||(e=new Fp(r.data),o.push(e));const n=t.getName("lookup_".concat(i));a=new Gu(e,n,Mc.Lookup,t.component.data.outputNodeRefCounts),t.component.data.outputNodes[n]=a}else if(function(e){return"selection"in e}(r)){const e=r.selection;if(n={as:e,...n},a=t.getSelectionComponent(K(e),e).materialized,!a)throw new Error('Cannot define and lookup the "'.concat(e,'" selection in the same view. ')+"Try moving the lookup into a second, layered view?")}return new Wm(e,n,a.getSource())}dependentFields(){return new Set([this.transform.lookup])}producedFields(){return new Set(this.transform.as?h(this.transform.as):this.transform.from.fields)}hash(){return"Lookup ".concat(j({transform:this.transform,secondary:this.secondary}))}assemble(){let e;if(this.transform.from.fields)e={values:this.transform.from.fields,...this.transform.as?{as:h(this.transform.as)}:{}};else{let t=this.transform.as;x(t)||(si('If "from.fields" is not specified, "as" has to be a string that specifies the key to be used for the data from the secondary source.'),t="_lookup"),e={as:[t]}}return{type:"lookup",from:this.secondary,key:this.transform.from.key,fields:[this.transform.lookup],...e,...this.transform.default?{default:this.transform.default}:{}}}}class Um extends Hu{clone(){return new Um(null,z(this.transform))}constructor(e,t){var n,i,o;super(e),this.transform=t,this.transform=z(t);const r=null!==(n=this.transform.as)&&void 0!==n?n:[void 0,void 0];this.transform.as=[null!==(i=r[0])&&void 0!==i?i:"prob",null!==(o=r[1])&&void 0!==o?o:"value"]}dependentFields(){var e;return new Set([this.transform.quantile,...null!==(e=this.transform.groupby)&&void 0!==e?e:[]])}producedFields(){return new Set(this.transform.as)}hash(){return"QuantileTransform ".concat(j(this.transform))}assemble(){const{quantile:e,...t}=this.transform;return{type:"quantile",field:e,...t}}}class Im extends Hu{clone(){return new Im(null,z(this.transform))}constructor(e,t){var n,i,o;super(e),this.transform=t,this.transform=z(t);const r=null!==(n=this.transform.as)&&void 0!==n?n:[void 0,void 0];this.transform.as=[null!==(i=r[0])&&void 0!==i?i:t.on,null!==(o=r[1])&&void 0!==o?o:t.regression]}dependentFields(){var e;return new Set([this.transform.regression,this.transform.on,...null!==(e=this.transform.groupby)&&void 0!==e?e:[]])}producedFields(){return new Set(this.transform.as)}hash(){return"RegressionTransform ".concat(j(this.transform))}assemble(){const{regression:e,on:t,...n}=this.transform;return{type:"regression",x:t,y:e,...n}}}class Hm extends Hu{clone(){return new Hm(null,z(this.transform))}constructor(e,t){super(e),this.transform=t}addDimensions(e){var t;this.transform.groupby=U((null!==(t=this.transform.groupby)&&void 0!==t?t:[]).concat(e),(e=>e))}producedFields(){}dependentFields(){var e;return new Set([this.transform.pivot,this.transform.value,...null!==(e=this.transform.groupby)&&void 0!==e?e:[]])}hash(){return"PivotTransform ".concat(j(this.transform))}assemble(){const{pivot:e,value:t,groupby:n,limit:i,op:o}=this.transform;return{type:"pivot",field:e,value:t,...void 0!==i?{limit:i}:{},...void 0!==o?{op:o}:{},...void 0!==n?{groupby:n}:{}}}}class Gm extends Hu{clone(){return new Gm(null,z(this.transform))}constructor(e,t){super(e),this.transform=t}dependentFields(){return new Set}producedFields(){return new Set}hash(){return"SampleTransform ".concat(j(this.transform))}assemble(){return{type:"sample",size:this.transform.sample}}}function Vm(e){let t=0;return function n(i,o){if(i instanceof Fp&&!i.isGenerator&&!Bc(i.data)){e.push(o);o={name:null,source:o.name,transform:[]}}var r;if(i instanceof xp&&(i.parent instanceof Fp&&!o.source?(o.format={...null!==(r=o.format)&&void 0!==r?r:{},parse:i.assembleFormatParse()},o.transform.push(...i.assembleTransforms(!0))):o.transform.push(...i.assembleTransforms())),i instanceof gp){o.name||(o.name="data_".concat(t++)),!o.source||o.transform.length>0?(e.push(o),i.data=o.name):i.data=o.source;for(const t of i.assemble())e.push(t)}else{if((i instanceof Ap||i instanceof Dp||i instanceof Pm||i instanceof ed||i instanceof gd||i instanceof Lm||i instanceof Tm||i instanceof hp||i instanceof Wm||i instanceof Ip||i instanceof Wp||i instanceof Mm||i instanceof jm||i instanceof Nm||i instanceof Rm||i instanceof Um||i instanceof Im||i instanceof wp||i instanceof Gm||i instanceof Hm)&&o.transform.push(i.assemble()),(i instanceof pp||i instanceof Vu||i instanceof qm||i instanceof Up)&&o.transform.push(...i.assemble()),i instanceof Gu)if(o.source&&0===o.transform.length)i.setSource(o.source);else if(i.parent instanceof Gu)i.setSource(o.name);else if(o.name||(o.name="data_".concat(t++)),i.setSource(o.name),1===i.numChildren()){e.push(o);o={name:null,source:o.name,transform:[]}}switch(i.numChildren()){case 0:i instanceof Gu&&(!o.source||o.transform.length>0)&&e.push(o);break;case 1:n(i.children[0],o);break;default:{o.name||(o.name="data_".concat(t++));let r=o.name;!o.source||o.transform.length>0?e.push(o):r=o.source;for(const e of i.children){n(e,{name:null,source:r,transform:[]})}break}}}}}function Ym(e){return"top"===e||"left"===e||Fi(e)?"header":"footer"}function Jm(e,t){const{facet:n,config:i,child:o,component:r}=e;if(e.channelHasField(t)){var a;const s=n[t],c=bd("title",null,i,t);let l=oa(s,i,{allowDisabling:!0,includeDefault:void 0===c||!!c});o.component.layoutHeaders[t].title&&(l=u(l)?l.join(", "):l,l+=" / "+o.component.layoutHeaders[t].title,o.component.layoutHeaders[t].title=null);const f=bd("labelOrient",s,i,t),d=ue((null!==(a=s.header)&&void 0!==a?a:{}).labels,i.header.labels,!0),p=T(["bottom","right"],f)?"footer":"header";r.layoutHeaders[t]={title:l,facetFieldDef:s,[p]:"facet"===t?[]:[Xm(e,t,d)]}}}function Xm(e,t,n){const i="row"===t?"height":"width";return{labels:n,sizeSignal:e.child.component.layoutSize.get(i)?e.child.getSizeSignalRef(i):void 0,axes:[]}}function Qm(e,t){const{child:n}=e;if(n.component.axes[t]){const{layoutHeaders:o,resolve:r}=e.component;if(r.axis[t]=Rd(r,t),"shared"===r.axis[t]){const r="x"===t?"column":"row",a=o[r];for(const o of n.component.axes[t]){var i;const t=Ym(o.get("orient"));a[t]=null!==(i=a[t])&&void 0!==i?i:[Xm(e,r,!1)];const n=rd(o,"main",e.config,{header:!0});n&&a[t][0].axes.push(n),o.mainExtracted=!0}}}}function $m(e){for(const t of e.children)t.parseLayoutSize()}function Km(e,t){const n=Td(t),i=on(n),o=e.component.resolve,r=e.component.layoutSize;let a;for(const t of e.children){const e=t.component.layoutSize.getWithExplicit(n),r=o.scale[i];if("independent"===r&&"step"===e.value){a=void 0;break}if(a){if("independent"===r&&a.value!==e.value){a=void 0;break}a=Ec(a,e,n,"")}else a=e}if(a){for(const i of e.children)e.renameSignal(i.getName(n),e.getName(t)),i.component.layoutSize.set(n,"merged",!1);r.setWithExplicit(t,a)}else r.setWithExplicit(t,{explicit:!1,value:void 0})}function Zm(e,t){const n="width"===t?"x":"y",i=e.config,o=e.getScaleComponent(n);if(o){const e=o.get("type"),n=o.get("range");if(go(e)){const e=Ts(i.view,t);return ki(n)||Os(e)?"step":e}return js(i.view,t)}if(e.hasProjection||"arc"===e.mark)return js(i.view,t);{const e=Ts(i.view,t);return Os(e)?e.step:e}}function eh(e,t,n){return Kr(t,{suffix:"by_".concat(Kr(e)),...null!=n?n:{}})}class th extends Om{constructor(e,t,n,i){super(e,"facet",t,n,i,e.resolve),Bn(this,"facet",void 0),Bn(this,"child",void 0),Bn(this,"children",void 0),this.child=Eh(e.spec,this,this.getName("child"),void 0,i),this.children=[this.child],this.facet=this.initFacet(e.facet)}initFacet(e){if(!Br(e))return{facet:this.initFacetFieldDef(e,"facet")};const t=J(e),n={};for(const i of t){if(!T([Ne,Pe],i)){si(Yn(i,"facet"));break}const t=e[i];if(void 0===t.field){si(Vn(t,i));break}n[i]=this.initFacetFieldDef(t,i)}return n}initFacetFieldDef(e,t){const{header:n,...i}=e,o=da(i,t);return n&&(o.header=Oo(n)),o}channelHasField(e){return!!this.facet[e]}fieldDef(e){return this.facet[e]}parseData(){this.component.data=ih(this),this.child.parseData()}parseLayoutSize(){$m(this)}parseSelections(){this.child.parseSelections(),this.component.selection=this.child.component.selection}parseMarkGroup(){this.child.parseMarkGroup()}parseAxesAndHeaders(){this.child.parseAxesAndHeaders(),function(e){for(const t of xt)Jm(e,t);Qm(e,"x"),Qm(e,"y")}(this)}assembleSelectionTopLevelSignals(e){return this.child.assembleSelectionTopLevelSignals(e)}assembleSignals(){return this.child.assembleSignals(),[]}assembleSelectionData(e){return this.child.assembleSelectionData(e)}getHeaderLayoutMixins(){const e={};for(const o of xt)for(const r of Ad){const a=this.component.layoutHeaders[o],s=a[r],{facetFieldDef:c}=a;if(c){const n=bd("titleOrient",c.header,this.config,o);if(T(["right","bottom"],n)){var t;const i=yd(o,n);e.titleAnchor=null!==(t=e.titleAnchor)&&void 0!==t?t:{},e.titleAnchor[i]="end"}}if(null==s?void 0:s[0]){const t="row"===o?"height":"width",s="header"===r?"headerBand":"footerBand";var n,i;if("facet"!==o&&!this.child.component.layoutSize.get(t))e[s]=null!==(n=e[s])&&void 0!==n?n:{},e[s][o]=.5;if(a.title)e.offset=null!==(i=e.offset)&&void 0!==i?i:{},e.offset["row"===o?"rowTitle":"columnTitle"]=10}}return e}assembleDefaultLayout(){const{column:e,row:t}=this.facet,n=e?this.columnDistinctSignal():t?1:void 0;let i="all";return(t||"independent"!==this.component.resolve.scale.x)&&(e||"independent"!==this.component.resolve.scale.y)||(i="none"),{...this.getHeaderLayoutMixins(),...n?{columns:n}:{},bounds:"full",align:i}}assembleLayoutSignals(){return this.child.assembleLayoutSignals()}columnDistinctSignal(){if(!(this.parent&&this.parent instanceof th)){const e=this.getName("column_domain");return{signal:"length(data('".concat(e,"'))")}}}assembleGroup(e){return this.parent&&this.parent instanceof th?{...this.channelHasField("column")?{encode:{update:{columns:{field:Kr(this.facet.column,{prefix:"distinct"})}}}}:{},...super.assembleGroup(e)}:super.assembleGroup(e)}getCardinalityAggregateForChild(){const e=[],t=[],n=[];if(this.child instanceof th){if(this.child.channelHasField("column")){const i=Kr(this.child.facet.column);e.push(i),t.push("distinct"),n.push("distinct_".concat(i))}}else for(const i of Zt){const o=this.child.component.scales[i];if(o&&!o.merged){const r=o.get("type"),a=o.get("range");if(go(r)&&ki(a)){const o=am(sm(this.child,i));o?(e.push(o),t.push("distinct"),n.push("distinct_".concat(o))):si(Mn(i))}}}return{fields:e,ops:t,as:n}}assembleFacet(){const{name:e,data:t}=this.component.data.facetRoot,{row:n,column:i}=this.facet,{fields:o,ops:r,as:a}=this.getCardinalityAggregateForChild(),s=[];for(const e of xt){const t=this.facet[e];if(t){s.push(Kr(t));const{bin:c,sort:l}=t;if(Fn(c)&&s.push(Kr(t,{binSuffix:"end"})),Er(l)){const{field:e,op:s=Dr}=l,c=eh(t,l);n&&i?(o.push(c),r.push("max"),a.push(c)):(o.push(e),r.push(s),a.push(c))}else if(u(l)){const n=vd(t,e);o.push(n),r.push("max"),a.push(n)}}}const c=!!n&&!!i;return{name:e,data:t,groupby:s,...c||o.length>0?{aggregate:{...c?{cross:c}:{},...o.length?{fields:o,ops:r,as:a}:{}}}:{}}}facetSortFields(e){const{facet:t}=this,n=t[e];return n?Er(n.sort)?[eh(n,n.sort,{expr:"datum"})]:u(n.sort)?[vd(n,e,{expr:"datum"})]:[Kr(n,{expr:"datum"})]:[]}facetSortOrder(e){const{facet:t}=this,n=t[e];if(n){const{sort:e}=n;return[(Er(e)?e.order:!u(e)&&e)||"ascending"]}return[]}assembleLabelTitle(){const{facet:e,config:t}=this;if(e.facet)return Sd(e.facet,"facet",t);const n={row:["top","bottom"],column:["left","right"]};for(const o of wd)if(e[o]){var i;const r=bd("labelOrient",null===(i=e[o])||void 0===i?void 0:i.header,t,o);if(T(n[o],r))return Sd(e[o],o,t)}}assembleMarks(){const{child:e}=this,t=function(e){const t=[],n=Vm(t);for(const t of e.children)n(t,{source:e.name,name:null,transform:[]});return t}(this.component.data.facetRoot),n=e.assembleGroupEncodeEntry(!1),i=this.assembleLabelTitle()||e.assembleTitle(),o=e.assembleGroupStyle();return[{name:this.getName("cell"),type:"group",...i?{title:i}:{},...o?{style:o}:{},from:{facet:this.assembleFacet()},sort:{field:xt.map((e=>this.facetSortFields(e))).flat(),order:xt.map((e=>this.facetSortOrder(e))).flat()},...t.length>0?{data:t}:{},...n?{encode:{update:n}}:{},...e.assembleGroup(ml(this,[]))}]}getMapping(){return this.facet}}function nh(e,t){for(const a of t){var n,i,o,r;const t=a.data;if(e.name&&a.hasName()&&e.name!==a.dataName)continue;const s=null===(n=e.format)||void 0===n?void 0:n.mesh,c=null===(i=t.format)||void 0===i?void 0:i.feature;if(s&&c)continue;const u=null===(o=e.format)||void 0===o?void 0:o.feature;if((u||c)&&u!==c)continue;const l=null===(r=t.format)||void 0===r?void 0:r.mesh;if(!s&&!l||s===l)if(_c(e)&&_c(t)){if(_(e.values,t.values))return a}else if(Bc(e)&&Bc(t)){if(e.url===t.url)return a}else if(zc(e)&&e.name===a.dataName)return a}return null}function ih(e){var t,n,i;let o=function(e,t){if(e.data||!e.parent){if(null===e.data){const e=new Fp({values:[]});return t.push(e),e}const n=nh(e.data,t);if(n)return Oc(e.data)||(n.data.format=R({},e.data.format,n.data.format)),!n.hasName()&&e.data.name&&(n.dataName=e.data.name),n;{const n=new Fp(e.data);return t.push(n),n}}return e.parent.component.data.facetRoot?e.parent.component.data.facetRoot:e.parent.component.data.main}(e,e.component.data.sources);const{outputNodes:r,outputNodeRefCounts:a}=e.component.data,s=e.parent?e.parent.component.data.ancestorParse.clone():new Sc,c=e.data;Oc(c)?(Nc(c)?o=new Dp(o,c.sequence):jc(c)&&(o=new Ap(o,c.graticule)),s.parseNothing=!0):null===(null==c||null===(t=c.format)||void 0===t?void 0:t.parse)&&(s.parseNothing=!0),o=null!==(n=xp.makeExplicit(o,e,s))&&void 0!==n?n:o,o=new wp(o);const u=e.parent&&_m(e.parent);var l;(Em(e)||Sm(e))&&(u&&(o=null!==(l=pp.makeFromEncoding(o,e))&&void 0!==l?l:o));e.transforms.length>0&&(o=function(e,t,n){let i=0;for(const a of t.transforms){let s,c=void 0;if(Jc(a))s=e=new gd(e,a),c="derived";else if(Tc(a)){var o;const i=yp(a);s=e=null!==(o=xp.makeWithAncestors(e,{},i,n))&&void 0!==o?o:e,e=new ed(e,t,a.filter)}else if(Xc(a))s=e=pp.makeFromTransform(e,a,t),c="number";else if($c(a))c="date",void 0===n.getWithExplicit(a.field).value&&(e=new xp(e,{[a.field]:c}),n.set(a.field,c,!1)),s=e=Vu.makeFromTransform(e,a);else if(Kc(a))s=e=hp.makeFromTransform(e,a),c="number",zl(t)&&(e=new wp(e));else if(Lc(a))s=e=Wm.make(e,t,a,i++),c="derived";else if(Gc(a))s=e=new Ip(e,a),c="number";else if(Vc(a))s=e=new Wp(e,a),c="number";else if(Zc(a))s=e=Up.makeFromTransform(e,a),c="derived";else if(eu(a))s=e=new Mm(e,a),c="derived";else if(Yc(a))s=e=new jm(e,a),c="derived";else if(qc(a))s=e=new Hm(e,a),c="derived";else if(Hc(a))e=new Gm(e,a);else if(Qc(a))s=e=qm.makeFromTransform(e,a),c="derived";else if(Rc(a))s=e=new Nm(e,a),c="derived";else if(Wc(a))s=e=new Um(e,a),c="derived";else if(Uc(a))s=e=new Im(e,a),c="derived";else{if(!Ic(a)){si("Ignoring an invalid transform: ".concat(P(a),"."));continue}s=e=new Rm(e,a),c="derived"}if(s&&void 0!==c)for(const e of null!==(r=s.producedFields())&&void 0!==r?r:[]){var r;n.set(e,c,!1)}}return e}(o,e,s));const f=function(e){const t={};if(Em(e)&&e.component.selection)for(const n of J(e.component.selection)){const i=e.component.selection[n];for(const e of i.project.items)!e.channel&&ce(e.field)>1&&(t[e.field]="flatten")}return t}(e),d=bp(e);if(o=null!==(i=xp.makeWithAncestors(o,{},{...f,...d},s))&&void 0!==i?i:o,Em(e)&&(o=Tm.parseAll(o,e),o=Lm.parseAll(o,e)),Em(e)||Sm(e)){var p,m;if(!u)o=null!==(m=pp.makeFromEncoding(o,e))&&void 0!==m?m:o;o=null!==(p=Vu.makeFromEncoding(o,e))&&void 0!==p?p:o,o=gd.parseAllForSortIndex(o,e)}const h=e.getDataName(Mc.Raw),g=new Gu(o,h,Mc.Raw,a);if(r[h]=g,o=g,Em(e)){var v,y;const t=hp.makeFromEncoding(o,e);t&&(o=t,zl(e)&&(o=new wp(o))),o=null!==(v=qm.makeFromEncoding(o,e))&&void 0!==v?v:o,o=null!==(y=Up.makeFromEncoding(o,e))&&void 0!==y?y:o}var b;Em(e)&&(o=null!==(b=Pm.make(o,e))&&void 0!==b?b:o);const x=e.getDataName(Mc.Main),w=new Gu(o,x,Mc.Main,a);r[x]=w,o=w,Em(e)&&function(e,t){Bl(e,(n=>{const i=n.name,o=e.getName("lookup_".concat(i));e.component.data.outputNodes[o]=n.materialized=new Gu(new ed(t,e,{selection:i}),o,Mc.Lookup,e.component.data.outputNodeRefCounts)}))}(e,w);let A=null;if(Sm(e)){var D;const t=e.getName("facet");o=null!==(D=function(e,t){const{row:n,column:i}=t;if(n&&i){let t=null;for(const o of[n,i])if(Er(o.sort)){const{field:n,op:i=Dr}=o.sort;e=t=new Wp(e,{joinaggregate:[{op:i,field:n,as:eh(o,o.sort,{forAs:!0})}],groupby:[Kr(o)]})}return t}return null}(o,e.facet))&&void 0!==D?D:o,A=new gp(o,e,t,w.getSource()),r[t]=A}return{...e.component.data,outputNodes:r,outputNodeRefCounts:a,raw:g,main:w,facetRoot:A,ancestorParse:s}}class oh extends zm{constructor(e,t,n,i){var o,r,a,s;super(e,"concat",t,n,i,e.resolve),Bn(this,"children",void 0),"shared"!==(null===(o=e.resolve)||void 0===o||null===(r=o.axis)||void 0===r?void 0:r.x)&&"shared"!==(null===(a=e.resolve)||void 0===a||null===(s=a.axis)||void 0===s?void 0:s.y)||si("Axes cannot be shared in concatenated or repeated views yet (https://github.com/vega/vega-lite/issues/2415)."),this.children=this.getChildren(e).map(((e,t)=>Eh(e,this,this.getName("concat_"+t),void 0,i)))}parseData(){this.component.data=ih(this);for(const e of this.children)e.parseData()}parseSelections(){this.component.selection={};for(const e of this.children){e.parseSelections();for(const t of J(e.component.selection))this.component.selection[t]=e.component.selection[t]}}parseMarkGroup(){for(const e of this.children)e.parseMarkGroup()}parseAxesAndHeaders(){for(const e of this.children)e.parseAxesAndHeaders()}getChildren(e){return Ss(e)?e.vconcat:Bs(e)?e.hconcat:e.concat}parseLayoutSize(){!function(e){$m(e);const t=1===e.layout.columns?"width":"childWidth",n=void 0===e.layout.columns?"height":"childHeight";Km(e,t),Km(e,n)}(this)}parseAxisGroup(){return null}assembleSelectionTopLevelSignals(e){return this.children.reduce(((e,t)=>t.assembleSelectionTopLevelSignals(e)),e)}assembleSignals(){return this.children.forEach((e=>e.assembleSignals())),[]}assembleLayoutSignals(){const e=Nd(this);for(const t of this.children)e.push(...t.assembleLayoutSignals());return e}assembleSelectionData(e){return this.children.reduce(((e,t)=>t.assembleSelectionData(e)),e)}assembleMarks(){return this.children.map((e=>{const t=e.assembleTitle(),n=e.assembleGroupStyle(),i=e.assembleGroupEncodeEntry(!1);return{type:"group",name:e.getName("group"),...t?{title:t}:{},...n?{style:n}:{},...i?{encode:{update:i}}:{},...e.assembleGroup()}}))}assembleDefaultLayout(){const e=this.layout.columns;return{...null!=e?{columns:e}:{},bounds:"full",align:"each"}}}const rh={disable:1,gridScale:1,scale:1,...xe,labelExpr:1,encode:1},ah=J(rh);class sh extends Ac{constructor(e={},t={},n=!1){super(),this.explicit=e,this.implicit=t,this.mainExtracted=n}clone(){return new sh(z(this.explicit),z(this.implicit),this.mainExtracted)}hasAxisPart(e){return"axis"===e||("grid"===e||"title"===e?!!this.get(e):!(!1===(t=this.get(e))||null===t));var t}hasOrientSignalRef(){return Fi(this.explicit.orient)}}const ch={bottom:"top",top:"bottom",left:"right",right:"left"};function uh(e,t){if(!e)return t.map((e=>e.clone()));{if(e.length!==t.length)return;const n=e.length;for(let i=0;i{switch(n){case"title":return Ma(e,t);case"gridScale":return{explicit:e.explicit,value:ue(e.value,t.value)}}return Cc(e,t,n,"axis")}));e.setWithExplicit(n,i)}return e}function fh(e,t,n,i,o){if("disable"===t)return void 0!==n;switch(n=n||{},t){case"titleAngle":case"labelAngle":return e===(Fi(n.labelAngle)?n.labelAngle:me(n.labelAngle));case"values":return!!n.values;case"encode":return!!n.encoding||!!n.labelAngle;case"title":if(e===hd(i,o))return!0}return e===n[t]}const dh=new Set(["grid","translate","format","formatType","orient","labelExpr","tickCount","position","tickMinStep"]);function ph(e,t){var n,i,o,r,a;let s=t.axis(e);const c=new sh,u=ua(t.encoding[e]),{mark:l,config:f}=t,d=(null===(n=s)||void 0===n?void 0:n.orient)||(null===(i=f["x"===e?"axisX":"axisY"])||void 0===i?void 0:i.orient)||(null===(o=f.axis)||void 0===o?void 0:o.orient)||function(e){return"x"===e?"bottom":"left"}(e),p=t.getScaleComponent(e).get("type"),m=cd(e,p,d,t.config),h=void 0!==s?!s:ld("disable",f.style,null===(r=s)||void 0===r?void 0:r.style,m).configValue;if(c.set("disable",h,void 0!==s),h)return c;s=s||{};const g=function(e,t,n,i,o){const r=null==t?void 0:t.labelAngle;if(void 0!==r)return Fi(r)?r:me(r);{const{configValue:r}=ld("labelAngle",i,null==t?void 0:t.style,o);return void 0!==r?me(r):n!==Me||!T([Gi,Ii],e.type)||qr(e)&&e.timeUnit?void 0:270}}(u,s,e,f.style,m),v={fieldOrDatumDef:u,axis:s,channel:e,model:t,scaleType:p,orient:d,labelAngle:g,mark:l,config:f};for(const n of ah){const i=n in fd?fd[n](v):Ae(n)?s[n]:void 0,o=void 0!==i,r=fh(i,n,s,t,e);if(o&&r)c.set(n,i,r);else{const{configValue:e,configFrom:t}=Ae(n)&&"values"!==n?ld(n,f.style,s.style,m):{},a=void 0!==e;o&&!a?c.set(n,i,r):("vgAxisConfig"!==t||dh.has(n)&&a||ve(e)||Fi(e))&&c.set(n,e,!1)}}const y=null!==(a=s.encoding)&&void 0!==a?a:{},b=ye.reduce(((n,i)=>{var o;if(!c.hasAxisPart(i))return n;const r=Ld(null!==(o=y[i])&&void 0!==o?o:{},t),a="labels"===i?function(e,t,n){var i;const{encoding:o,config:r}=e,a=null!==(i=ua(o[t]))&&void 0!==i?i:ua(o[Mt(t)]),s=e.axis(t)||{},{format:c,formatType:u}=s;return dr(u)?{text:gr({fieldOrDatumDef:a,field:"datum.value",format:c,formatType:u,config:r}),...n}:n}(t,e,r):r;return void 0===a||Y(a)||(n[i]={update:a}),n}),{});return Y(b)||c.set("encode",b,!!s.encoding||void 0!==s.labelAngle),c}function mh(e,t,n){const i=Oo(e),o=Ba("orient",i,n);var r,a;if(i.orient=function(e,t,n){switch(e){case qo:case Go:case Vo:case Uo:case Ro:case To:return}const{x:i,y:o,x2:r,y2:a}=t;switch(e){case Mo:if(qr(i)&&(kn(i.bin)||qr(o)&&o.aggregate&&!i.aggregate))return"vertical";if(qr(o)&&(kn(o.bin)||qr(i)&&i.aggregate&&!o.aggregate))return"horizontal";if(a||r){if(n)return n;if(!r&&(qr(i)&&i.type===Ui&&!Fn(i.bin)||Ir(i)))return"horizontal";if(!a&&(qr(o)&&o.type===Ui&&!Fn(o.bin)||Ir(o)))return"vertical"}case Wo:if(r&&(!qr(i)||!kn(i.bin))&&a&&(!qr(o)||!kn(o.bin)))return;case jo:if(a)return qr(o)&&kn(o.bin)?"horizontal":"vertical";if(r)return qr(i)&&kn(i.bin)?"vertical":"horizontal";if(e===Wo){if(i&&!o)return"vertical";if(o&&!i)return"horizontal"}case Lo:case Io:{const t=Ur(i),r=Ur(o);if(t&&!r)return"tick"!==e?"horizontal":"vertical";if(!t&&r)return"tick"!==e?"vertical":"horizontal";if(t&&r){const t=i,r=o,a=t.type===Hi,s=r.type===Hi;return a&&!s?"tick"!==e?"vertical":"horizontal":!a&&s?"tick"!==e?"horizontal":"vertical":!t.aggregate&&r.aggregate?"tick"!==e?"vertical":"horizontal":t.aggregate&&!r.aggregate?"tick"!==e?"horizontal":"vertical":n||"vertical"}return n||void 0}}return"vertical"}(i.type,t,o),void 0!==o&&o!==i.orient&&si((r=i.orient,a=o,'Specified orient "'.concat(r,'" overridden with "').concat(a,'".'))),"bar"===i.type&&i.orient){const e=Ba("cornerRadiusEnd",i,n);if(void 0!==e){const n="horizontal"===i.orient&&t.x2||"vertical"===i.orient&&t.y2?["cornerRadius"]:tr[i.orient];for(const t of n)i[t]=e;void 0!==i.cornerRadiusEnd&&delete i.cornerRadiusEnd}}void 0===Ba("opacity",i,n)&&(i.opacity=function(e,t){if(T([qo,Io,Go,Vo],e)&&!Ra(t))return.7;return}(i.type,t));return void 0===Ba("cursor",i,n)&&(i.cursor=function(e,t,n){if(t.href||e.href||Ba("href",e,n))return"pointer";return e.cursor}(i,t,n)),i}function hh(e,t){const{config:n}=e;return{...Tu(e,{align:"ignore",baseline:"ignore",color:"include",size:"include",orient:"ignore",theta:"ignore"}),...Fu("x",e,{defaultPos:"mid"}),...Fu("y",e,{defaultPos:"mid"}),...xu("size",e),...xu("angle",e),...gh(e,n,t)}}function gh(e,t,n){return n?{shape:{value:n}}:xu("shape",e)}function vh(e,t,n){if(void 0===Ba("align",e,n))return"center"}function yh(e,t,n){if(void 0===Ba("baseline",e,n))return"middle"}function bh(e){var t;const{config:n,markDef:i}=e,{orient:o}=i,r="horizontal"===o?"width":"height",a=e.getScaleComponent("horizontal"===o?"x":"y"),s=null!==(t=Ba("size",i,n,{vgChannel:r}))&&void 0!==t?t:n.tick.bandSize;if(void 0!==s)return s;{const e=a?a.get("range"):void 0;if(e&&ki(e)&&b(e.step))return 3*e.step/4;return 3*Ms(n.view,r)/4}}const xh={arc:{vgMark:"arc",encodeEntry:e=>({...Tu(e,{align:"ignore",baseline:"ignore",color:"include",size:"ignore",orient:"ignore",theta:"ignore"}),...Fu("x",e,{defaultPos:"mid"}),...Fu("y",e,{defaultPos:"mid"}),...Ou(e,"radius","arc"),...Ou(e,"theta","arc")})},area:{vgMark:"area",encodeEntry:e=>({...Tu(e,{align:"ignore",baseline:"ignore",color:"include",orient:"include",size:"ignore",theta:"ignore"}),...Bu("x",e,{defaultPos:"zeroOrMin",defaultPos2:"zeroOrMin",range:"horizontal"===e.markDef.orient}),...Bu("y",e,{defaultPos:"zeroOrMin",defaultPos2:"zeroOrMin",range:"vertical"===e.markDef.orient}),...Ru(e)})},bar:{vgMark:"rect",encodeEntry:e=>({...Tu(e,{align:"ignore",baseline:"ignore",color:"include",orient:"ignore",size:"ignore",theta:"ignore"}),...Ou(e,"x","bar"),...Ou(e,"y","bar")})},circle:{vgMark:"symbol",encodeEntry:e=>hh(e,"circle")},geoshape:{vgMark:"shape",encodeEntry:e=>({...Tu(e,{align:"ignore",baseline:"ignore",color:"include",size:"ignore",orient:"ignore",theta:"ignore"})}),postEncodingTransform:e=>{const{encoding:t}=e,n=t.shape;return[{type:"geoshape",projection:e.projectionName(),...n&&qr(n)&&n.type===Vi?{field:Kr(n,{expr:"datum"})}:{}}]}},image:{vgMark:"image",encodeEntry:e=>({...Tu(e,{align:"ignore",baseline:"ignore",color:"ignore",orient:"ignore",size:"ignore",theta:"ignore"}),...Ou(e,"x","image"),...Ou(e,"y","image"),...du(e,"url")})},line:{vgMark:"line",encodeEntry:e=>({...Tu(e,{align:"ignore",baseline:"ignore",color:"include",size:"ignore",orient:"ignore",theta:"ignore"}),...Fu("x",e,{defaultPos:"mid"}),...Fu("y",e,{defaultPos:"mid"}),...xu("size",e,{vgChannel:"strokeWidth"}),...Ru(e)})},point:{vgMark:"symbol",encodeEntry:e=>hh(e)},rect:{vgMark:"rect",encodeEntry:e=>({...Tu(e,{align:"ignore",baseline:"ignore",color:"include",orient:"ignore",size:"ignore",theta:"ignore"}),...Ou(e,"x","rect"),...Ou(e,"y","rect")})},rule:{vgMark:"rule",encodeEntry:e=>{const{markDef:t}=e,n=t.orient;return e.encoding.x||e.encoding.y||e.encoding.latitude||e.encoding.longitude?{...Tu(e,{align:"ignore",baseline:"ignore",color:"include",orient:"ignore",size:"ignore",theta:"ignore"}),...Bu("x",e,{defaultPos:"horizontal"===n?"zeroOrMax":"mid",defaultPos2:"zeroOrMin",range:"vertical"!==n}),...Bu("y",e,{defaultPos:"vertical"===n?"zeroOrMax":"mid",defaultPos2:"zeroOrMin",range:"horizontal"!==n}),...xu("size",e,{vgChannel:"strokeWidth"})}:{}}},square:{vgMark:"symbol",encodeEntry:e=>hh(e,"square")},text:{vgMark:"text",encodeEntry:e=>{const{config:t,encoding:n}=e;return{...Tu(e,{align:"include",baseline:"include",color:"include",size:"ignore",orient:"ignore",theta:"include"}),...Fu("x",e,{defaultPos:"mid"}),...Fu("y",e,{defaultPos:"mid"}),...du(e),...xu("size",e,{vgChannel:"fontSize"}),...xu("angle",e),...Wu("align",vh(e.markDef,n,t)),...Wu("baseline",yh(e.markDef,n,t)),...Fu("radius",e,{defaultPos:null,isMidPoint:!0}),...Fu("theta",e,{defaultPos:null,isMidPoint:!0})}}},tick:{vgMark:"rect",encodeEntry:e=>{const{config:t,markDef:n}=e,i=n.orient,o="horizontal"===i?"width":"height",r="horizontal"===i?"height":"width";return{...Tu(e,{align:"ignore",baseline:"ignore",color:"include",orient:"ignore",size:"ignore",theta:"ignore"}),...Fu("x",e,{defaultPos:"mid",vgChannel:"xc"}),...Fu("y",e,{defaultPos:"mid",vgChannel:"yc"}),...xu("size",e,{defaultValue:bh(e),vgChannel:o}),[r]:Fa(Ba("thickness",n,t))}}},trail:{vgMark:"trail",encodeEntry:e=>({...Tu(e,{align:"ignore",baseline:"ignore",color:"include",size:"include",orient:"ignore",theta:"ignore"}),...Fu("x",e,{defaultPos:"mid"}),...Fu("y",e,{defaultPos:"mid"}),...xu("size",e),...Ru(e)})}};function wh(e){if(T([Lo,jo,Ho],e.mark)){const t=Ga(e.mark,e.encoding);if(t.length>0)return function(e,t){return[{name:e.getName("pathgroup"),type:"group",from:{facet:{name:Ah+e.requestDataName(Mc.Main),data:e.requestDataName(Mc.Main),groupby:t}},encode:{update:{width:{field:{group:"width"}},height:{field:{group:"height"}}}},marks:Fh(e,{fromPrefix:Ah})}]}(e,t)}else if(T([Mo],e.mark)){const t=Bi.some((t=>Ba(t,e.markDef,e.config)));if(e.stack&&!e.fieldDef("size")&&t)return function(e){const[t]=Fh(e,{fromPrefix:Dh}),n=e.scaleName(e.stack.fieldChannel),i=(t={})=>e.vgField(e.stack.fieldChannel,t),o=(e,t)=>{const o=[i({prefix:"min",suffix:"start",expr:t}),i({prefix:"max",suffix:"start",expr:t}),i({prefix:"min",suffix:"end",expr:t}),i({prefix:"max",suffix:"end",expr:t})];return"".concat(e,"(").concat(o.map((e=>"scale('".concat(n,"',").concat(e,")"))).join(","),")")};let r,a;"x"===e.stack.fieldChannel?(r={...O(t.encode.update,["y","yc","y2","height",...Bi]),x:{signal:o("min","datum")},x2:{signal:o("max","datum")},clip:{value:!0}},a={x:{field:{group:"x"},mult:-1},height:{field:{group:"height"}}},t.encode.update={...N(t.encode.update,["y","yc","y2"]),height:{field:{group:"height"}}}):(r={...O(t.encode.update,["x","xc","x2","width"]),y:{signal:o("min","datum")},y2:{signal:o("max","datum")},clip:{value:!0}},a={y:{field:{group:"y"},mult:-1},width:{field:{group:"width"}}},t.encode.update={...N(t.encode.update,["x","xc","x2"]),width:{field:{group:"width"}}});for(const n of Bi){const i=_a(n,e.markDef,e.config);t.encode.update[n]?(r[n]=t.encode.update[n],delete t.encode.update[n]):i&&(r[n]=Fa(i)),i&&(t.encode.update[n]={value:0})}const s=e.fieldDef(e.stack.groupbyChannel),c=Kr(s)?[Kr(s)]:[];((null==s?void 0:s.bin)||(null==s?void 0:s.timeUnit))&&c.push(Kr(s,{binSuffix:"end"}));r=["stroke","strokeWidth","strokeJoin","strokeCap","strokeDash","strokeDashOffset","strokeMiterLimit","strokeOpacity"].reduce(((n,i)=>{if(t.encode.update[i])return{...n,[i]:t.encode.update[i]};{const t=_a(i,e.markDef,e.config);return void 0!==t?{...n,[i]:Fa(t)}:n}}),r),r.stroke&&(r.strokeForeground={value:!0},r.strokeOffset={value:0});return[{type:"group",from:{facet:{data:e.requestDataName(Mc.Main),name:Dh+e.requestDataName(Mc.Main),groupby:c,aggregate:{fields:[i({suffix:"start"}),i({suffix:"start"}),i({suffix:"end"}),i({suffix:"end"})],ops:["min","max","min","max"]}}},encode:{update:r},marks:[{type:"group",encode:{update:a},marks:[t]}]}]}(e)}return Fh(e)}const Ah="faceted_path_";const Dh="stack_group_";function Fh(e,t={fromPrefix:""}){const{mark:n,markDef:i,encoding:o,config:r}=e,a=ue(i.clip,function(e){const t=e.getScaleComponent("x"),n=e.getScaleComponent("y");return!!(t&&t.get("selectionExtent")||n&&n.get("selectionExtent"))||void 0}(e),function(e){const t=e.component.projection;return!(!t||t.isFit)||void 0}(e)),s=Sa(i),c=o.key,l=function(e){const{encoding:t,stack:n,mark:i,markDef:o,config:r}=e,a=t.order;if(!(!u(a)&&Vr(a)&&M(a.value)||!a&&M(Ba("order",o,r)))){if((u(a)||qr(a))&&!n)return Na(a,{expr:"datum"});if(Jo(i)){const n="horizontal"===o.orient?"y":"x",i=t[n];if(qr(i)){const t=i.sort;return u(t)?{field:Kr(i,{prefix:n,suffix:"sort_index",expr:"datum"})}:Er(t)?{field:Kr({aggregate:Ra(e.encoding)?t.op:void 0,field:t.field},{expr:"datum"})}:Cr(t)?{field:Kr(e.fieldDef(t.encoding),{expr:"datum"}),order:t.order}:null===t?void 0:{field:Kr(i,{binSuffix:e.stack&&e.stack.impute?"mid":void 0,expr:"datum"})}}}}}(e),f=function(e){if(!e.component.selection)return null;const t=J(e.component.selection).length;let n=t,i=e.parent;for(;i&&0===n;)n=J(i.component.selection).length,i=i.parent;return n?{interactive:t>0||!!e.encoding.tooltip}:null}(e),d=Ba("aria",i,r),p=xh[n].postEncodingTransform?xh[n].postEncodingTransform(e):null;return[{name:e.getName("marks"),type:xh[n].vgMark,...a?{clip:!0}:{},...s?{style:s}:{},...c?{key:c.field}:{},...l?{sort:l}:{},...f||{},...!1===d?{aria:d}:{},from:{data:t.fromPrefix+e.requestDataName(Mc.Main)},encode:{update:xh[n].encodeEntry(e)},...p?{transform:p}:{}}]}class kh extends Om{constructor(e,t,n,i={},o){super(e,"unit",t,n,o,void 0,Ns(e)?e.view:void 0),Bn(this,"markDef",void 0),Bn(this,"encoding",void 0),Bn(this,"specifiedScales",{}),Bn(this,"stack",void 0),Bn(this,"specifiedAxes",{}),Bn(this,"specifiedLegends",{}),Bn(this,"specifiedProjection",{}),Bn(this,"selection",{}),Bn(this,"children",[]);const r=$o(e.mark)?{...e.mark}:{type:e.mark},a=r.type;void 0===r.filled&&(r.filled=function(e,t,{graticule:n}){if(n)return!1;const i=_a("filled",e,t),o=e.type;return ue(i,o!==qo&&o!==Lo&&o!==Wo)}(r,o,{graticule:e.data&&jc(e.data)}));const s=this.encoding=Ua(e.encoding||{},a,r.filled,o);this.markDef=mh(r,s,o),this.size=function({encoding:e,size:t}){for(const n of Zt){const i=Tt(n);Os(t[i])&&Ur(e[n])&&(delete t[i],si(ei(i)))}return t}({encoding:s,size:Ns(e)?{...i,...e.width?{width:e.width}:{},...e.height?{height:e.height}:{}}:i}),this.stack=nc(a,s),this.specifiedScales=this.initScales(a,s),this.specifiedAxes=this.initAxes(s),this.specifiedLegends=this.initLegends(s),this.specifiedProjection=e.projection,this.selection=e.selection}get hasProjection(){const{encoding:e}=this,t=this.mark===Yo,n=e&>.some((t=>Hr(e[t])));return t||n}scaleDomain(e){const t=this.specifiedScales[e];return t?t.domain:void 0}axis(e){return this.specifiedAxes[e]}legend(e){return this.specifiedLegends[e]}initScales(e,t){return gn.reduce(((e,n)=>{const i=ua(t[n]);var o;i&&(e[n]=this.initScale(null!==(o=i.scale)&&void 0!==o?o:{}));return e}),{})}initScale(e){const{domain:t,range:n}=e,i=Oo(e);return u(t)&&(i.domain=t.map(Aa)),u(n)&&(i.range=n.map(Aa)),i}initAxes(e){return Zt.reduce(((t,n)=>{const i=e[n];if(Hr(i)||n===Me&&Hr(e.x2)||n===Te&&Hr(e.y2)){const e=Hr(i)?i.axis:void 0;t[n]=e?this.initAxis({...e}):e}return t}),{})}initAxis(e){const t=J(e),n={};for(const i of t){const t=e[i];n[i]=ve(t)?wa(t):Aa(t)}return n}initLegends(e){return mn.reduce(((t,n)=>{const i=ua(e[n]);if(i&&function(e){switch(e){case Je:case Xe:case Qe:case Ke:case $e:case et:case it:case ot:return!0;case tt:case nt:case Ze:return!1}}(n)){const e=i.legend;t[n]=e?Oo(e):e}return t}),{})}parseData(){this.component.data=ih(this)}parseLayoutSize(){!function(e){const{size:t,component:n}=e;for(const i of Zt){const o=Tt(i);if(t[o]){const e=t[o];n.layoutSize.set(o,Os(e)?"step":e,!0)}else{const t=Zm(e,o);n.layoutSize.set(o,t,!1)}}}(this)}parseSelections(){this.component.selection=function(e,t){const n={},i=e.config.selection;for(const r of J(null!=t?t:{})){const a=z(t[r]),{fields:s,encodings:c,...u}=i[a.type];for(const e in u){var o;"encodings"===e&&a.fields||"fields"===e&&a.encodings||("mark"===e&&(a[e]={...u[e],...a[e]}),(void 0===a[e]||!0===a[e])&&(a[e]=null!==(o=u[e])&&void 0!==o?o:a[e]))}const l=K(r),f=n[l]={...a,name:l,events:x(a.on)?su(a.on,"scope"):z(a.on)};dl(f,(n=>{n.has(f)&&n.parse&&n.parse(e,f,a,t[r])}))}return n}(this,this.selection)}parseMarkGroup(){this.component.mark=wh(this)}parseAxesAndHeaders(){var e;this.component.axes=(e=this,Zt.reduce(((t,n)=>(e.component.scales[n]&&(t[n]=[ph(n,e)]),t)),{}))}assembleSelectionTopLevelSignals(e){return function(e,t){let n=!1;Bl(e,((i,o)=>{const r=i.name,a=w(r+Fl);if(0===t.filter((e=>e.name===r)).length){const e="global"===i.resolve?"union":i.resolve,n="multi"===i.type?", true)":")";t.push({name:i.name,update:"".concat(El,"(").concat(a,", ").concat(w(e)).concat(n)})}n=!0,o.topLevelSignals&&(t=o.topLevelSignals(e,i,t)),dl(i,(n=>{n.topLevelSignals&&(t=n.topLevelSignals(e,i,t))}))})),n&&0===t.filter((e=>"unit"===e.name)).length&&t.unshift({name:"unit",value:{},on:[{events:"mousemove",update:"isTuple(group()) ? group() : unit"}]});return gl(t)}(this,e)}assembleSignals(){return[...ad(this),...(e=this,t=[],Bl(e,((n,i)=>{const o=n.name;let r=i.modifyExpr(e,n);t.push(...i.signals(e,n)),dl(n,(i=>{i.signals&&(t=i.signals(e,n,t)),i.modifyExpr&&(r=i.modifyExpr(e,n,r))})),t.push({name:o+Cl,on:[{events:{signal:n.name+kl},update:"modify(".concat(w(n.name+Fl),", ").concat(r,")")}]})})),gl(t))];var e,t}assembleSelectionData(e){return function(e,t){const n=[...t];return Bl(e,(t=>{const i={name:t.name+Fl};if(t.init){const n=t.project.items.map((e=>{const{signals:t,...n}=e;return n})),o=t.init.map((e=>pl(e,!1)));i.values="interval"===t.type?[{unit:_l(e,{escape:!1}),fields:n,values:o}]:o.map((t=>({unit:_l(e,{escape:!1}),fields:n,values:t})))}n.filter((e=>e.name===t.name+Fl)).length||n.push(i)})),n}(this,e)}assembleLayout(){return null}assembleLayoutSignals(){return Nd(this)}assembleMarks(){var e;let t=null!==(e=this.component.mark)&&void 0!==e?e:[];return this.parent&&_m(this.parent)||(t=hl(this,t)),t.map(this.correctDataNames)}getMapping(){return this.encoding}get mark(){return this.markDef.type}channelHasField(e){return qa(this.encoding,e)}fieldDef(e){return ca(this.encoding[e])}typedFieldDef(e){const t=this.fieldDef(e);return Gr(t)?t:null}}class Ch extends zm{constructor(e,t,n,i,o){super(e,"layer",t,n,o,e.resolve,e.view),Bn(this,"children",void 0);const r={...i,...e.width?{width:e.width}:{},...e.height?{height:e.height}:{}};this.children=e.layer.map(((e,t)=>{if($s(e))return new Ch(e,this,this.getName("layer_"+t),r,o);if(Ta(e))return new kh(e,this,this.getName("layer_"+t),r,o);throw new Error(zn(e))}))}parseData(){this.component.data=ih(this);for(const e of this.children)e.parseData()}parseLayoutSize(){var e;$m(e=this),Km(e,"width"),Km(e,"height")}parseSelections(){this.component.selection={};for(const e of this.children){e.parseSelections();for(const t of J(e.component.selection))this.component.selection[t]=e.component.selection[t]}}parseMarkGroup(){for(const e of this.children)e.parseMarkGroup()}parseAxesAndHeaders(){!function(e){const{axes:t,resolve:n}=e.component,i={top:0,bottom:0,right:0,left:0};for(const i of e.children){i.parseAxesAndHeaders();for(const o of J(i.component.axes))n.axis[o]=Rd(e.component.resolve,o),"shared"===n.axis[o]&&(t[o]=uh(t[o],i.component.axes[o]),t[o]||(n.axis[o]="independent",delete t[o]))}for(const r of Zt){for(const a of e.children)if(a.component.axes[r]){if("independent"===n.axis[r]){var o;t[r]=(null!==(o=t[r])&&void 0!==o?o:[]).concat(a.component.axes[r]);for(const e of a.component.axes[r]){const{value:t,explicit:n}=e.getWithExplicit("orient");if(!Fi(t)){if(i[t]>0&&!n){const n=ch[t];i[t]>i[n]&&e.set("orient",n,!1)}i[t]++}}}delete a.component.axes[r]}if("independent"===n.axis[r]&&t[r]&&t[r].length>1)for(const e of t[r])e.get("grid")&&!e.explicit.grid&&(e.implicit.grid=!1)}}(this)}assembleSelectionTopLevelSignals(e){return this.children.reduce(((e,t)=>t.assembleSelectionTopLevelSignals(e)),e)}assembleSignals(){return this.children.reduce(((e,t)=>e.concat(t.assembleSignals())),ad(this))}assembleLayoutSignals(){return this.children.reduce(((e,t)=>e.concat(t.assembleLayoutSignals())),Nd(this))}assembleSelectionData(e){return this.children.reduce(((e,t)=>t.assembleSelectionData(e)),e)}assembleTitle(){let e=super.assembleTitle();if(e)return e;for(const t of this.children)if(e=t.assembleTitle(),e)return e}assembleLayout(){return null}assembleMarks(){return function(e,t){for(const n of e.children)Em(n)&&(t=hl(n,t));return t}(this,this.children.flatMap((e=>e.assembleMarks())))}assembleLegends(){return this.children.reduce(((e,t)=>e.concat(t.assembleLegends())),ip(this))}}function Eh(e,t,n,i,o){if(zr(e))return new th(e,t,n,o);if($s(e))return new Ch(e,t,n,i,o);if(Ta(e))return new kh(e,t,n,i,o);if(function(e){return Ss(e)||Bs(e)||Es(e)}(e))return new oh(e,t,n,o);throw new Error(zn(e))}e.accessPathDepth=ce,e.accessPathWithDatum=ne,e.compile=function(e,t={}){var n;t.logger&&(n=t.logger,ai=n),t.fieldTitle&&ia(t.fieldTitle);try{const n=Gs(d(t.config,e.config)),i=bc(e,n),o=Eh(i,null,"",void 0,n);o.parse(),function(e,t){Yp(e.sources);let n=0,i=0;for(let i=0;i<5&&Xp(e,t,!0);i++)n++;e.sources.map(Hp);for(let n=0;n<5&&Xp(e,t,!1);n++)i++;Yp(e.sources),5===Math.max(n,i)&&si("Maximum optimization runs(".concat(5,") reached."))}(o.component.data,o);return{spec:function(e,t,n={},i){const o=e.config?Xs(e.config):void 0,r=[].concat(e.assembleSelectionData([]),function(e,t){const n=[],i=Vm(n);let o=0;for(const t of e.sources){t.hasName()||(t.dataName="source_".concat(o++));const e=t.assemble();i(t,e)}for(const e of n)0===e.transform.length&&delete e.transform;let r=0;for(const[e,t]of n.entries()){var a;0!==(null!==(a=t.transform)&&void 0!==a?a:[]).length||t.source||n.splice(r++,0,n.splice(e,1)[0])}for(const t of n)for(const n of null!==(s=t.transform)&&void 0!==s?s:[]){var s;"lookup"===n.type&&(n.from=e.outputNodes[n.from].getSource())}for(const e of n)e.name in t&&(e.values=t[e.name]);return n}(e.component.data,n)),a=e.assembleProjections(),s=e.assembleTitle(),c=e.assembleGroupStyle(),u=e.assembleGroupEncodeEntry(!0);let l=e.assembleLayoutSignals();l=l.filter((e=>"width"!==e.name&&"height"!==e.name||void 0===e.value||(t[e.name]=+e.value,!1)));const{params:f,...d}=t;return{$schema:"https://vega.github.io/schema/vega/v5.json",...e.description?{description:e.description}:{},...d,...s?{title:s}:{},...c?{style:c}:{},...u?{encode:{update:u}}:{},data:r,...a.length>0?{projections:a}:{},...e.assembleGroup([...l,...e.assembleSelectionTopLevelSignals([]),...As(f)]),...o?{config:o}:{},...i?{usermeta:i}:{}}}(o,function(e,t,n,i){const o=i.component.layoutSize.get("width"),r=i.component.layoutSize.get("height");void 0===t?(t={type:"pad"},i.hasAxisOrientSignalRef()&&(t.resize=!0)):x(t)&&(t={type:t});if(o&&r&&(a=t.type,"fit"===a||"fit-x"===a||"fit-y"===a))if("step"===o&&"step"===r)si(jn()),t.type="pad";else if("step"===o||"step"===r){const e="step"===o?"width":"height";si(jn(on(e)));const n="width"===e?"height":"width";t.type=function(e){return e?"fit-".concat(on(e)):"fit"}(n)}var a;return{...1===J(t).length&&t.type?"pad"===t.type?{}:{autosize:t.type}:{autosize:t},...zs(n,!1),...zs(e,!0)}}(e,i.autosize,n,o),e.datasets,e.usermeta),normalized:i}}finally{t.logger&&(ai=ri),t.fieldTitle&&ia(ta)}},e.contains=T,e.deepEqual=_,e.deleteNestedProperty=ee,e.duplicate=z,e.entries=Q,e.every=q,e.fieldIntersection=V,e.flatAccessWithDatum=ie,e.getFirstDefined=ue,e.hasIntersection=H,e.hash=j,e.internalField=de,e.isBoolean=$,e.isEmpty=Y,e.isEqual=function(e,t){const n=J(e),i=J(t);if(n.length!==i.length)return!1;for(const i of n)if(e[i]!==t[i])return!1;return!0},e.isInternalField=pe,e.isNullOrFalse=M,e.isNumeric=he,e.keys=J,e.logicalExpr=Z,e.mergeDeep=R,e.normalize=bc,e.normalizeAngle=me,e.omit=N,e.pick=O,e.prefixGenerator=G,e.removePathFromField=se,e.replaceAll=ae,e.replacePathInField=re,e.resetIdCounter=function(){le=42},e.setEqual=I,e.some=L,e.stringify=P,e.titleCase=te,e.unique=U,e.uniqueId=fe,e.vals=X,e.varName=K,e.version="4.17.0",Object.defineProperty(e,"__esModule",{value:!0})})); -//# sourceMappingURL=vega-lite.min.js.map diff --git a/src/citationnet/static/js/vega.min.js.map b/src/citationnet/static/js/vega.min.js.map deleted file mode 100644 index c87db80..0000000 --- a/src/citationnet/static/js/vega.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"vega.min.js","sources":["../../vega-util/build/vega-util.module.js","../../../node_modules/d3-dsv/src/dsv.js","../../../node_modules/topojson-client/src/identity.js","../../../node_modules/topojson-client/src/feature.js","../../../node_modules/topojson-client/src/transform.js","../../../node_modules/topojson-client/src/reverse.js","../../../node_modules/topojson-client/src/stitch.js","../../../node_modules/topojson-client/src/mesh.js","../../../node_modules/d3-array/src/ascending.js","../../../node_modules/d3-array/src/bisector.js","../../../node_modules/d3-array/src/number.js","../../../node_modules/d3-array/src/bisect.js","../../../node_modules/d3-array/src/fsum.js","../../../node_modules/d3-array/src/ticks.js","../../../node_modules/d3-array/src/max.js","../../../node_modules/d3-array/src/min.js","../../../node_modules/d3-array/src/quickselect.js","../../../node_modules/d3-array/src/quantile.js","../../../node_modules/d3-array/src/median.js","../../../node_modules/d3-array/src/merge.js","../../../node_modules/d3-array/src/range.js","../../../node_modules/d3-array/src/sum.js","../../../node_modules/d3-format/src/formatDecimal.js","../../../node_modules/d3-format/src/exponent.js","../../../node_modules/d3-format/src/formatSpecifier.js","../../../node_modules/d3-format/src/formatPrefixAuto.js","../../../node_modules/d3-format/src/formatRounded.js","../../../node_modules/d3-format/src/formatTypes.js","../../../node_modules/d3-format/src/identity.js","../../../node_modules/d3-format/src/locale.js","../../../node_modules/d3-format/src/defaultLocale.js","../../../node_modules/d3-format/src/formatGroup.js","../../../node_modules/d3-format/src/formatNumerals.js","../../../node_modules/d3-format/src/formatTrim.js","../../../node_modules/d3-format/src/precisionFixed.js","../../../node_modules/d3-format/src/precisionPrefix.js","../../../node_modules/d3-format/src/precisionRound.js","../../../node_modules/d3-time/src/interval.js","../../../node_modules/d3-time/src/millisecond.js","../../../node_modules/d3-time/src/duration.js","../../../node_modules/d3-time/src/second.js","../../../node_modules/d3-time/src/minute.js","../../../node_modules/d3-time/src/hour.js","../../../node_modules/d3-time/src/day.js","../../../node_modules/d3-time/src/week.js","../../../node_modules/d3-time/src/month.js","../../../node_modules/d3-time/src/year.js","../../../node_modules/d3-time/src/utcMinute.js","../../../node_modules/d3-time/src/utcHour.js","../../../node_modules/d3-time/src/utcDay.js","../../../node_modules/d3-time/src/utcWeek.js","../../../node_modules/d3-time/src/utcMonth.js","../../../node_modules/d3-time/src/utcYear.js","../../vega-time/build/vega-time.module.js","../../../node_modules/d3-time-format/src/locale.js","../../../node_modules/d3-time-format/src/defaultLocale.js","../../vega-format/build/vega-format.module.js","../../vega-loader/build/vega-loader.browser.module.js","../../vega-dataflow/build/vega-dataflow.module.js","../../vega-statistics/build/vega-statistics.module.js","../../../node_modules/d3-array/src/deviation.js","../../../node_modules/d3-array/src/variance.js","../../vega-transforms/build/vega-transforms.module.js","../../../node_modules/d3-array/src/mean.js","../../../node_modules/d3-path/src/path.js","../../../node_modules/d3-shape/src/constant.js","../../../node_modules/d3-shape/src/math.js","../../../node_modules/d3-shape/src/arc.js","../../../node_modules/d3-shape/src/array.js","../../../node_modules/d3-shape/src/curve/linear.js","../../../node_modules/d3-shape/src/point.js","../../../node_modules/d3-shape/src/line.js","../../../node_modules/d3-shape/src/area.js","../../../node_modules/d3-shape/src/symbol/circle.js","../../../node_modules/d3-shape/src/noop.js","../../../node_modules/d3-shape/src/curve/basis.js","../../../node_modules/d3-shape/src/curve/basisClosed.js","../../../node_modules/d3-shape/src/curve/basisOpen.js","../../../node_modules/d3-shape/src/curve/bundle.js","../../../node_modules/d3-shape/src/curve/cardinal.js","../../../node_modules/d3-shape/src/curve/cardinalClosed.js","../../../node_modules/d3-shape/src/curve/cardinalOpen.js","../../../node_modules/d3-shape/src/curve/catmullRom.js","../../../node_modules/d3-shape/src/curve/catmullRomClosed.js","../../../node_modules/d3-shape/src/curve/catmullRomOpen.js","../../../node_modules/d3-shape/src/curve/linearClosed.js","../../../node_modules/d3-shape/src/curve/monotone.js","../../../node_modules/d3-shape/src/curve/natural.js","../../../node_modules/d3-shape/src/curve/step.js","../../vega-canvas/build/vega-canvas.browser.module.js","../../../node_modules/d3-scale/src/init.js","../../../node_modules/d3-scale/src/ordinal.js","../../../node_modules/d3-color/src/define.js","../../../node_modules/d3-color/src/color.js","../../../node_modules/d3-color/src/math.js","../../../node_modules/d3-color/src/lab.js","../../../node_modules/d3-color/src/cubehelix.js","../../../node_modules/d3-interpolate/src/basis.js","../../../node_modules/d3-interpolate/src/basisClosed.js","../../../node_modules/d3-interpolate/src/constant.js","../../../node_modules/d3-interpolate/src/color.js","../../../node_modules/d3-interpolate/src/rgb.js","../../../node_modules/d3-interpolate/src/numberArray.js","../../../node_modules/d3-interpolate/src/array.js","../../../node_modules/d3-interpolate/src/date.js","../../../node_modules/d3-interpolate/src/number.js","../../../node_modules/d3-interpolate/src/object.js","../../../node_modules/d3-interpolate/src/string.js","../../../node_modules/d3-interpolate/src/value.js","../../../node_modules/d3-interpolate/src/round.js","../../../node_modules/d3-interpolate/src/transform/decompose.js","../../../node_modules/d3-interpolate/src/transform/parse.js","../../../node_modules/d3-interpolate/src/transform/index.js","../../../node_modules/d3-interpolate/src/zoom.js","../../../node_modules/d3-interpolate/src/hsl.js","../../../node_modules/d3-interpolate/src/hcl.js","../../../node_modules/d3-interpolate/src/cubehelix.js","../../../node_modules/d3-interpolate/src/piecewise.js","../../../node_modules/d3-interpolate/src/discrete.js","../../../node_modules/d3-interpolate/src/hue.js","../../../node_modules/d3-interpolate/src/lab.js","../../../node_modules/d3-interpolate/src/quantize.js","../../../node_modules/d3-scale/src/number.js","../../../node_modules/d3-scale/src/continuous.js","../../../node_modules/d3-scale/src/constant.js","../../../node_modules/d3-scale/src/tickFormat.js","../../../node_modules/d3-scale/src/linear.js","../../../node_modules/d3-scale/src/nice.js","../../../node_modules/d3-scale/src/log.js","../../../node_modules/d3-scale/src/symlog.js","../../../node_modules/d3-scale/src/pow.js","../../../node_modules/d3-scale/src/time.js","../../../node_modules/d3-scale/src/sequential.js","../../../node_modules/d3-scale/src/diverging.js","../../vega-scale/build/vega-scale.module.js","../../../node_modules/d3-scale/src/identity.js","../../../node_modules/d3-scale/src/utcTime.js","../../../node_modules/d3-scale/src/quantile.js","../../../node_modules/d3-scale/src/quantize.js","../../../node_modules/d3-scale/src/threshold.js","../../vega-scenegraph/build/vega-scenegraph.module.js","../../../node_modules/d3-shape/src/symbol.js","../../vega-view-transforms/build/vega-view-transforms.module.js","../../vega-encode/build/vega-encode.module.js","../../../node_modules/d3-geo/src/math.js","../../../node_modules/d3-geo/src/noop.js","../../../node_modules/d3-geo/src/stream.js","../../../node_modules/d3-geo/src/area.js","../../../node_modules/d3-geo/src/bounds.js","../../../node_modules/d3-geo/src/cartesian.js","../../../node_modules/d3-geo/src/centroid.js","../../../node_modules/d3-geo/src/compose.js","../../../node_modules/d3-geo/src/rotation.js","../../../node_modules/d3-geo/src/circle.js","../../../node_modules/d3-geo/src/clip/buffer.js","../../../node_modules/d3-geo/src/pointEqual.js","../../../node_modules/d3-geo/src/clip/rejoin.js","../../../node_modules/d3-geo/src/polygonContains.js","../../../node_modules/d3-geo/src/clip/index.js","../../../node_modules/d3-geo/src/clip/antimeridian.js","../../../node_modules/d3-geo/src/clip/circle.js","../../../node_modules/d3-geo/src/clip/rectangle.js","../../../node_modules/d3-geo/src/clip/line.js","../../../node_modules/d3-geo/src/graticule.js","../../../node_modules/d3-geo/src/path/area.js","../../../node_modules/d3-geo/src/identity.js","../../../node_modules/d3-geo/src/path/bounds.js","../../../node_modules/d3-geo/src/path/centroid.js","../../../node_modules/d3-geo/src/path/context.js","../../../node_modules/d3-geo/src/path/measure.js","../../../node_modules/d3-geo/src/path/string.js","../../../node_modules/d3-geo/src/path/index.js","../../../node_modules/d3-geo/src/transform.js","../../../node_modules/d3-geo/src/projection/fit.js","../../../node_modules/d3-geo/src/projection/resample.js","../../../node_modules/d3-geo/src/projection/index.js","../../../node_modules/d3-geo/src/projection/conic.js","../../../node_modules/d3-geo/src/projection/conicEqualArea.js","../../../node_modules/d3-geo/src/projection/cylindricalEqualArea.js","../../../node_modules/d3-geo/src/projection/albers.js","../../../node_modules/d3-geo/src/projection/azimuthal.js","../../../node_modules/d3-geo/src/projection/azimuthalEqualArea.js","../../../node_modules/d3-geo/src/projection/azimuthalEquidistant.js","../../../node_modules/d3-geo/src/projection/mercator.js","../../../node_modules/d3-geo/src/projection/conicConformal.js","../../../node_modules/d3-geo/src/projection/equirectangular.js","../../../node_modules/d3-geo/src/projection/conicEquidistant.js","../../../node_modules/d3-geo/src/projection/equalEarth.js","../../../node_modules/d3-geo/src/projection/gnomonic.js","../../../node_modules/d3-geo/src/projection/naturalEarth1.js","../../../node_modules/d3-geo/src/projection/orthographic.js","../../../node_modules/d3-geo/src/projection/stereographic.js","../../../node_modules/d3-geo/src/projection/transverseMercator.js","../../../node_modules/d3-geo-projection/src/math.js","../../../node_modules/d3-geo-projection/src/mollweide.js","../../vega-projection/build/vega-projection.module.js","../../../node_modules/d3-geo/src/projection/albersUsa.js","../../../node_modules/d3-geo/src/projection/identity.js","../../vega-geo/build/vega-geo.module.js","../../../node_modules/d3-quadtree/src/add.js","../../../node_modules/d3-quadtree/src/quad.js","../../../node_modules/d3-quadtree/src/x.js","../../../node_modules/d3-quadtree/src/y.js","../../../node_modules/d3-quadtree/src/quadtree.js","../../../node_modules/d3-force/src/constant.js","../../../node_modules/d3-force/src/jiggle.js","../../../node_modules/d3-force/src/collide.js","../../../node_modules/d3-force/src/link.js","../../../node_modules/d3-quadtree/src/cover.js","../../../node_modules/d3-quadtree/src/data.js","../../../node_modules/d3-quadtree/src/extent.js","../../../node_modules/d3-quadtree/src/find.js","../../../node_modules/d3-quadtree/src/remove.js","../../../node_modules/d3-quadtree/src/root.js","../../../node_modules/d3-quadtree/src/size.js","../../../node_modules/d3-quadtree/src/visit.js","../../../node_modules/d3-quadtree/src/visitAfter.js","../../../node_modules/d3-dispatch/src/dispatch.js","../../../node_modules/d3-timer/src/timer.js","../../../node_modules/d3-force/src/lcg.js","../../../node_modules/d3-force/src/simulation.js","../../vega-force/build/vega-force.module.js","../../../node_modules/d3-force/src/center.js","../../../node_modules/d3-force/src/manyBody.js","../../../node_modules/d3-force/src/x.js","../../../node_modules/d3-force/src/y.js","../../../node_modules/d3-hierarchy/src/cluster.js","../../../node_modules/d3-hierarchy/src/hierarchy/count.js","../../../node_modules/d3-hierarchy/src/hierarchy/index.js","../../../node_modules/d3-hierarchy/src/pack/enclose.js","../../../node_modules/d3-hierarchy/src/array.js","../../../node_modules/d3-hierarchy/src/pack/siblings.js","../../../node_modules/d3-hierarchy/src/accessors.js","../../../node_modules/d3-hierarchy/src/constant.js","../../../node_modules/d3-hierarchy/src/pack/index.js","../../../node_modules/d3-hierarchy/src/treemap/round.js","../../../node_modules/d3-hierarchy/src/treemap/dice.js","../../../node_modules/d3-hierarchy/src/hierarchy/each.js","../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../../../node_modules/d3-hierarchy/src/hierarchy/find.js","../../../node_modules/d3-hierarchy/src/hierarchy/sum.js","../../../node_modules/d3-hierarchy/src/hierarchy/sort.js","../../../node_modules/d3-hierarchy/src/hierarchy/path.js","../../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../../../node_modules/d3-hierarchy/src/hierarchy/descendants.js","../../../node_modules/d3-hierarchy/src/hierarchy/leaves.js","../../../node_modules/d3-hierarchy/src/hierarchy/links.js","../../../node_modules/d3-hierarchy/src/hierarchy/iterator.js","../../../node_modules/d3-hierarchy/src/stratify.js","../../../node_modules/d3-hierarchy/src/tree.js","../../../node_modules/d3-hierarchy/src/treemap/slice.js","../../../node_modules/d3-hierarchy/src/treemap/squarify.js","../../../node_modules/d3-hierarchy/src/treemap/resquarify.js","../../vega-hierarchy/build/vega-hierarchy.module.js","../../../node_modules/d3-hierarchy/src/partition.js","../../../node_modules/d3-hierarchy/src/treemap/binary.js","../../../node_modules/d3-hierarchy/src/treemap/sliceDice.js","../../../node_modules/d3-hierarchy/src/treemap/index.js","../../vega-label/build/vega-label.module.js","../../vega-regression/build/vega-regression.module.js","../../../node_modules/delaunator/index.js","../../../node_modules/d3-delaunay/src/path.js","../../../node_modules/d3-delaunay/src/polygon.js","../../../node_modules/d3-delaunay/src/voronoi.js","../../../node_modules/d3-delaunay/src/delaunay.js","../../vega-voronoi/build/vega-voronoi.module.js","../../vega-wordcloud/build/vega-wordcloud.module.js","../../vega-crossfilter/build/vega-crossfilter.module.js","../../../node_modules/d3-array/src/permute.js","../../vega-expression/build/vega-expression.module.js","../../vega-selections/build/vega-selection.module.js","../../vega-functions/build/vega-functions.module.js","../../vega-runtime/build/vega-runtime.module.js","../../vega-view/build/vega-view.module.js","../../../node_modules/d3-timer/src/interval.js","../../vega-event-selector/build/vega-event-selector.module.js","../../vega-parser/build/vega-parser.module.js","../index.js"],"sourcesContent":["function accessor (fn, fields, name) {\n fn.fields = fields || [];\n fn.fname = name;\n return fn;\n}\nfunction accessorName(fn) {\n return fn == null ? null : fn.fname;\n}\nfunction accessorFields(fn) {\n return fn == null ? null : fn.fields;\n}\n\nfunction getter (path) {\n return path.length === 1 ? get1(path[0]) : getN(path);\n}\n\nconst get1 = field => function (obj) {\n return obj[field];\n};\n\nconst getN = path => {\n const len = path.length;\n return function (obj) {\n for (let i = 0; i < len; ++i) {\n obj = obj[path[i]];\n }\n\n return obj;\n };\n};\n\nfunction error (message) {\n throw Error(message);\n}\n\nfunction splitAccessPath (p) {\n const path = [],\n n = p.length;\n let q = null,\n b = 0,\n s = '',\n i,\n j,\n c;\n p = p + '';\n\n function push() {\n path.push(s + p.substring(i, j));\n s = '';\n i = j + 1;\n }\n\n for (i = j = 0; j < n; ++j) {\n c = p[j];\n\n if (c === '\\\\') {\n s += p.substring(i, j);\n s += p.substring(++j, ++j);\n i = j;\n } else if (c === q) {\n push();\n q = null;\n b = -1;\n } else if (q) {\n continue;\n } else if (i === b && c === '\"') {\n i = j + 1;\n q = c;\n } else if (i === b && c === \"'\") {\n i = j + 1;\n q = c;\n } else if (c === '.' && !b) {\n if (j > i) {\n push();\n } else {\n i = j + 1;\n }\n } else if (c === '[') {\n if (j > i) push();\n b = i = j + 1;\n } else if (c === ']') {\n if (!b) error('Access path missing open bracket: ' + p);\n if (b > 0) push();\n b = 0;\n i = j + 1;\n }\n }\n\n if (b) error('Access path missing closing bracket: ' + p);\n if (q) error('Access path missing closing quote: ' + p);\n\n if (j > i) {\n j++;\n push();\n }\n\n return path;\n}\n\nfunction field (field, name, opt) {\n const path = splitAccessPath(field);\n field = path.length === 1 ? path[0] : field;\n return accessor((opt && opt.get || getter)(path), [field], name || field);\n}\n\nconst id = field('id');\nconst identity = accessor(_ => _, [], 'identity');\nconst zero = accessor(() => 0, [], 'zero');\nconst one = accessor(() => 1, [], 'one');\nconst truthy = accessor(() => true, [], 'true');\nconst falsy = accessor(() => false, [], 'false');\n\nfunction log$1(method, level, input) {\n const args = [level].concat([].slice.call(input));\n console[method].apply(console, args); // eslint-disable-line no-console\n}\n\nconst None = 0;\nconst Error$1 = 1;\nconst Warn = 2;\nconst Info = 3;\nconst Debug = 4;\nfunction logger (_, method) {\n let level = _ || None;\n return {\n level(_) {\n if (arguments.length) {\n level = +_;\n return this;\n } else {\n return level;\n }\n },\n\n error() {\n if (level >= Error$1) log$1(method || 'error', 'ERROR', arguments);\n return this;\n },\n\n warn() {\n if (level >= Warn) log$1(method || 'warn', 'WARN', arguments);\n return this;\n },\n\n info() {\n if (level >= Info) log$1(method || 'log', 'INFO', arguments);\n return this;\n },\n\n debug() {\n if (level >= Debug) log$1(method || 'log', 'DEBUG', arguments);\n return this;\n }\n\n };\n}\n\nvar isArray = Array.isArray;\n\nfunction isObject (_) {\n return _ === Object(_);\n}\n\nconst isLegalKey = key => key !== '__proto__';\n\nfunction mergeConfig(...configs) {\n return configs.reduce((out, source) => {\n for (const key in source) {\n if (key === 'signals') {\n // for signals, we merge the signals arrays\n // source signals take precedence over\n // existing signals with the same name\n out.signals = mergeNamed(out.signals, source.signals);\n } else {\n // otherwise, merge objects subject to recursion constraints\n // for legend block, recurse for the layout entry only\n // for style block, recurse for all properties\n // otherwise, no recursion: objects overwrite, no merging\n const r = key === 'legend' ? {\n layout: 1\n } : key === 'style' ? true : null;\n writeConfig(out, key, source[key], r);\n }\n }\n\n return out;\n }, {});\n}\nfunction writeConfig(output, key, value, recurse) {\n if (!isLegalKey(key)) return;\n let k, o;\n\n if (isObject(value) && !isArray(value)) {\n o = isObject(output[key]) ? output[key] : output[key] = {};\n\n for (k in value) {\n if (recurse && (recurse === true || recurse[k])) {\n writeConfig(o, k, value[k]);\n } else if (isLegalKey(k)) {\n o[k] = value[k];\n }\n }\n } else {\n output[key] = value;\n }\n}\n\nfunction mergeNamed(a, b) {\n if (a == null) return b;\n const map = {},\n out = [];\n\n function add(_) {\n if (!map[_.name]) {\n map[_.name] = 1;\n out.push(_);\n }\n }\n\n b.forEach(add);\n a.forEach(add);\n return out;\n}\n\nfunction peek (array) {\n return array[array.length - 1];\n}\n\nfunction toNumber (_) {\n return _ == null || _ === '' ? null : +_;\n}\n\nconst exp = sign => x => sign * Math.exp(x);\n\nconst log = sign => x => Math.log(sign * x);\n\nconst symlog = c => x => Math.sign(x) * Math.log1p(Math.abs(x / c));\n\nconst symexp = c => x => Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n\nconst pow = exponent => x => x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n\nfunction pan(domain, delta, lift, ground) {\n const d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n dd = (d1 - d0) * delta;\n return [ground(d0 - dd), ground(d1 - dd)];\n}\n\nfunction panLinear(domain, delta) {\n return pan(domain, delta, toNumber, identity);\n}\nfunction panLog(domain, delta) {\n var sign = Math.sign(domain[0]);\n return pan(domain, delta, log(sign), exp(sign));\n}\nfunction panPow(domain, delta, exponent) {\n return pan(domain, delta, pow(exponent), pow(1 / exponent));\n}\nfunction panSymlog(domain, delta, constant) {\n return pan(domain, delta, symlog(constant), symexp(constant));\n}\n\nfunction zoom(domain, anchor, scale, lift, ground) {\n const d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n return [ground(da + (d0 - da) * scale), ground(da + (d1 - da) * scale)];\n}\n\nfunction zoomLinear(domain, anchor, scale) {\n return zoom(domain, anchor, scale, toNumber, identity);\n}\nfunction zoomLog(domain, anchor, scale) {\n const sign = Math.sign(domain[0]);\n return zoom(domain, anchor, scale, log(sign), exp(sign));\n}\nfunction zoomPow(domain, anchor, scale, exponent) {\n return zoom(domain, anchor, scale, pow(exponent), pow(1 / exponent));\n}\nfunction zoomSymlog(domain, anchor, scale, constant) {\n return zoom(domain, anchor, scale, symlog(constant), symexp(constant));\n}\n\nfunction quarter(date) {\n return 1 + ~~(new Date(date).getMonth() / 3);\n}\nfunction utcquarter(date) {\n return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n\nfunction array (_) {\n return _ != null ? isArray(_) ? _ : [_] : [];\n}\n\n/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nfunction clampRange (range, min, max) {\n let lo = range[0],\n hi = range[1],\n span;\n\n if (hi < lo) {\n span = hi;\n hi = lo;\n lo = span;\n }\n\n span = hi - lo;\n return span >= max - min ? [min, max] : [lo = Math.min(Math.max(lo, min), max - span), lo + span];\n}\n\nfunction isFunction (_) {\n return typeof _ === 'function';\n}\n\nconst DESCENDING = 'descending';\nfunction compare (fields, orders, opt) {\n opt = opt || {};\n orders = array(orders) || [];\n const ord = [],\n get = [],\n fmap = {},\n gen = opt.comparator || comparator;\n array(fields).forEach((f, i) => {\n if (f == null) return;\n ord.push(orders[i] === DESCENDING ? -1 : 1);\n get.push(f = isFunction(f) ? f : field(f, null, opt));\n (accessorFields(f) || []).forEach(_ => fmap[_] = 1);\n });\n return get.length === 0 ? null : accessor(gen(get, ord), Object.keys(fmap));\n}\nconst ascending = (u, v) => (u < v || u == null) && v != null ? -1 : (u > v || v == null) && u != null ? 1 : (v = v instanceof Date ? +v : v, u = u instanceof Date ? +u : u) !== u && v === v ? -1 : v !== v && u === u ? 1 : 0;\n\nconst comparator = (fields, orders) => fields.length === 1 ? compare1(fields[0], orders[0]) : compareN(fields, orders, fields.length);\n\nconst compare1 = (field, order) => function (a, b) {\n return ascending(field(a), field(b)) * order;\n};\n\nconst compareN = (fields, orders, n) => {\n orders.push(0); // pad zero for convenient lookup\n\n return function (a, b) {\n let f,\n c = 0,\n i = -1;\n\n while (c === 0 && ++i < n) {\n f = fields[i];\n c = ascending(f(a), f(b));\n }\n\n return c * orders[i];\n };\n};\n\nfunction constant (_) {\n return isFunction(_) ? _ : () => _;\n}\n\nfunction debounce (delay, handler) {\n let tid;\n return e => {\n if (tid) clearTimeout(tid);\n tid = setTimeout(() => (handler(e), tid = null), delay);\n };\n}\n\nfunction extend (_) {\n for (let x, k, i = 1, len = arguments.length; i < len; ++i) {\n x = arguments[i];\n\n for (k in x) {\n _[k] = x[k];\n }\n }\n\n return _;\n}\n\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nfunction extent (array, f) {\n let i = 0,\n n,\n v,\n min,\n max;\n\n if (array && (n = array.length)) {\n if (f == null) {\n // find first valid value\n for (v = array[i]; i < n && (v == null || v !== v); v = array[++i]);\n\n min = max = v; // visit all other values\n\n for (; i < n; ++i) {\n v = array[i]; // skip null/undefined; NaN will fail all comparisons\n\n if (v != null) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n } else {\n // find first valid value\n for (v = f(array[i]); i < n && (v == null || v !== v); v = f(array[++i]));\n\n min = max = v; // visit all other values\n\n for (; i < n; ++i) {\n v = f(array[i]); // skip null/undefined; NaN will fail all comparisons\n\n if (v != null) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n }\n }\n\n return [min, max];\n}\n\nfunction extentIndex (array, f) {\n const n = array.length;\n let i = -1,\n a,\n b,\n c,\n u,\n v;\n\n if (f == null) {\n while (++i < n) {\n b = array[i];\n\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n\n if (i === n) return [-1, -1];\n u = v = i;\n\n while (++i < n) {\n b = array[i];\n\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n } else {\n while (++i < n) {\n b = f(array[i], i, array);\n\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n\n if (i === n) return [-1, -1];\n u = v = i;\n\n while (++i < n) {\n b = f(array[i], i, array);\n\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n }\n\n return [u, v];\n}\n\nconst hop = Object.prototype.hasOwnProperty;\nfunction has (object, property) {\n return hop.call(object, property);\n}\n\nconst NULL = {};\nfunction fastmap (input) {\n let obj = {},\n test;\n\n function has$1(key) {\n return has(obj, key) && obj[key] !== NULL;\n }\n\n const map = {\n size: 0,\n empty: 0,\n object: obj,\n has: has$1,\n\n get(key) {\n return has$1(key) ? obj[key] : undefined;\n },\n\n set(key, value) {\n if (!has$1(key)) {\n ++map.size;\n if (obj[key] === NULL) --map.empty;\n }\n\n obj[key] = value;\n return this;\n },\n\n delete(key) {\n if (has$1(key)) {\n --map.size;\n ++map.empty;\n obj[key] = NULL;\n }\n\n return this;\n },\n\n clear() {\n map.size = map.empty = 0;\n map.object = obj = {};\n },\n\n test(_) {\n if (arguments.length) {\n test = _;\n return map;\n } else {\n return test;\n }\n },\n\n clean() {\n const next = {};\n let size = 0;\n\n for (const key in obj) {\n const value = obj[key];\n\n if (value !== NULL && (!test || !test(value))) {\n next[key] = value;\n ++size;\n }\n }\n\n map.size = size;\n map.empty = 0;\n map.object = obj = next;\n }\n\n };\n if (input) Object.keys(input).forEach(key => {\n map.set(key, input[key]);\n });\n return map;\n}\n\nfunction flush (range, value, threshold, left, right, center) {\n if (!threshold && threshold !== 0) return center;\n const t = +threshold;\n let a = range[0],\n b = peek(range),\n l; // swap endpoints if range is reversed\n\n if (b < a) {\n l = a;\n a = b;\n b = l;\n } // compare value to endpoints\n\n\n l = Math.abs(value - a);\n const r = Math.abs(b - value); // adjust if value is within threshold distance of endpoint\n\n return l < r && l <= t ? left : r <= t ? right : center;\n}\n\nfunction inherits (child, parent, members) {\n const proto = child.prototype = Object.create(parent.prototype);\n Object.defineProperty(proto, 'constructor', {\n value: child,\n writable: true,\n enumerable: true,\n configurable: true\n });\n return extend(proto, members);\n}\n\n/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nfunction inrange (value, range, left, right) {\n let r0 = range[0],\n r1 = range[range.length - 1],\n t;\n\n if (r0 > r1) {\n t = r0;\n r0 = r1;\n r1 = t;\n }\n\n left = left === undefined || left;\n right = right === undefined || right;\n return (left ? r0 <= value : r0 < value) && (right ? value <= r1 : value < r1);\n}\n\nfunction isBoolean (_) {\n return typeof _ === 'boolean';\n}\n\nfunction isDate (_) {\n return Object.prototype.toString.call(_) === '[object Date]';\n}\n\nfunction isIterable (_) {\n return _ && isFunction(_[Symbol.iterator]);\n}\n\nfunction isNumber (_) {\n return typeof _ === 'number';\n}\n\nfunction isRegExp (_) {\n return Object.prototype.toString.call(_) === '[object RegExp]';\n}\n\nfunction isString (_) {\n return typeof _ === 'string';\n}\n\nfunction key (fields, flat, opt) {\n if (fields) {\n fields = flat ? array(fields).map(f => f.replace(/\\\\(.)/g, '$1')) : array(fields);\n }\n\n const len = fields && fields.length,\n gen = opt && opt.get || getter,\n map = f => gen(flat ? [f] : splitAccessPath(f));\n\n let fn;\n\n if (!len) {\n fn = function () {\n return '';\n };\n } else if (len === 1) {\n const get = map(fields[0]);\n\n fn = function (_) {\n return '' + get(_);\n };\n } else {\n const get = fields.map(map);\n\n fn = function (_) {\n let s = '' + get[0](_),\n i = 0;\n\n while (++i < len) s += '|' + get[i](_);\n\n return s;\n };\n }\n\n return accessor(fn, fields, 'key');\n}\n\nfunction lerp (array, frac) {\n const lo = array[0],\n hi = peek(array),\n f = +frac;\n return !f ? lo : f === 1 ? hi : lo + f * (hi - lo);\n}\n\nconst DEFAULT_MAX_SIZE = 10000; // adapted from https://github.com/dominictarr/hashlru/ (MIT License)\n\nfunction lruCache (maxsize) {\n maxsize = +maxsize || DEFAULT_MAX_SIZE;\n let curr, prev, size;\n\n const clear = () => {\n curr = {};\n prev = {};\n size = 0;\n };\n\n const update = (key, value) => {\n if (++size > maxsize) {\n prev = curr;\n curr = {};\n size = 1;\n }\n\n return curr[key] = value;\n };\n\n clear();\n return {\n clear,\n has: key => has(curr, key) || has(prev, key),\n get: key => has(curr, key) ? curr[key] : has(prev, key) ? update(key, prev[key]) : undefined,\n set: (key, value) => has(curr, key) ? curr[key] = value : update(key, value)\n };\n}\n\nfunction merge (compare, array0, array1, output) {\n const n0 = array0.length,\n n1 = array1.length;\n if (!n1) return array0;\n if (!n0) return array1;\n const merged = output || new array0.constructor(n0 + n1);\n let i0 = 0,\n i1 = 0,\n i = 0;\n\n for (; i0 < n0 && i1 < n1; ++i) {\n merged[i] = compare(array0[i0], array1[i1]) > 0 ? array1[i1++] : array0[i0++];\n }\n\n for (; i0 < n0; ++i0, ++i) {\n merged[i] = array0[i0];\n }\n\n for (; i1 < n1; ++i1, ++i) {\n merged[i] = array1[i1];\n }\n\n return merged;\n}\n\nfunction repeat (str, reps) {\n let s = '';\n\n while (--reps >= 0) s += str;\n\n return s;\n}\n\nfunction pad (str, length, padchar, align) {\n const c = padchar || ' ',\n s = str + '',\n n = length - s.length;\n return n <= 0 ? s : align === 'left' ? repeat(c, n) + s : align === 'center' ? repeat(c, ~~(n / 2)) + s + repeat(c, Math.ceil(n / 2)) : s + repeat(c, n);\n}\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\n\nfunction span (array) {\n return array && peek(array) - array[0] || 0;\n}\n\nfunction $(x) {\n return isArray(x) ? '[' + x.map($) + ']' : isObject(x) || isString(x) ? // Output valid JSON and JS source strings.\n // See http://timelessrepo.com/json-isnt-a-javascript-subset\n JSON.stringify(x).replace('\\u2028', '\\\\u2028').replace('\\u2029', '\\\\u2029') : x;\n}\n\nfunction toBoolean (_) {\n return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n}\n\nconst defaultParser = _ => isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\n\nfunction toDate (_, parser) {\n parser = parser || defaultParser;\n return _ == null || _ === '' ? null : parser(_);\n}\n\nfunction toString (_) {\n return _ == null || _ === '' ? null : _ + '';\n}\n\nfunction toSet (_) {\n const s = {},\n n = _.length;\n\n for (let i = 0; i < n; ++i) s[_[i]] = true;\n\n return s;\n}\n\nfunction truncate (str, length, align, ellipsis) {\n const e = ellipsis != null ? ellipsis : '\\u2026',\n s = str + '',\n n = s.length,\n l = Math.max(0, length - e.length);\n return n <= length ? s : align === 'left' ? e + s.slice(n - l) : align === 'center' ? s.slice(0, Math.ceil(l / 2)) + e + s.slice(n - ~~(l / 2)) : s.slice(0, l) + e;\n}\n\nfunction visitArray (array, filter, visitor) {\n if (array) {\n if (filter) {\n const n = array.length;\n\n for (let i = 0; i < n; ++i) {\n const t = filter(array[i]);\n if (t) visitor(t, i, array);\n }\n } else {\n array.forEach(visitor);\n }\n }\n}\n\nexport { Debug, Error$1 as Error, Info, None, Warn, accessor, accessorFields, accessorName, array, ascending, clampRange, compare, constant, debounce, error, extend, extent, extentIndex, falsy, fastmap, field, flush, has as hasOwnProperty, id, identity, inherits, inrange, isArray, isBoolean, isDate, isFunction, isIterable, isNumber, isObject, isRegExp, isString, key, lerp, logger, lruCache, merge, mergeConfig, one, pad, panLinear, panLog, panPow, panSymlog, peek, quarter, repeat, span, splitAccessPath, $ as stringValue, toBoolean, toDate, toNumber, toSet, toString, truncate, truthy, utcquarter, visitArray, writeConfig, zero, zoomLinear, zoomLog, zoomPow, zoomSymlog };\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","export default function(x) {\n return x;\n}\n","import reverse from \"./reverse.js\";\nimport transform from \"./transform.js\";\n\nexport default function(topology, o) {\n if (typeof o === \"string\") o = topology.objects[o];\n return o.type === \"GeometryCollection\"\n ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n : feature(topology, o);\n}\n\nfunction feature(topology, o) {\n var id = o.id,\n bbox = o.bbox,\n properties = o.properties == null ? {} : o.properties,\n geometry = object(topology, o);\n return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n var transformPoint = transform(topology.transform),\n arcs = topology.arcs;\n\n function arc(i, points) {\n if (points.length) points.pop();\n for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n points.push(transformPoint(a[k], k));\n }\n if (i < 0) reverse(points, n);\n }\n\n function point(p) {\n return transformPoint(p);\n }\n\n function line(arcs) {\n var points = [];\n for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n return points;\n }\n\n function ring(arcs) {\n var points = line(arcs);\n while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n return points;\n }\n\n function polygon(arcs) {\n return arcs.map(ring);\n }\n\n function geometry(o) {\n var type = o.type, coordinates;\n switch (type) {\n case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n case \"Point\": coordinates = point(o.coordinates); break;\n case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n case \"LineString\": coordinates = line(o.arcs); break;\n case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n case \"Polygon\": coordinates = polygon(o.arcs); break;\n case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n default: return null;\n }\n return {type: type, coordinates: coordinates};\n }\n\n return geometry(o);\n}\n","import identity from \"./identity.js\";\n\nexport default function(transform) {\n if (transform == null) return identity;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function(input, i) {\n if (!i) x0 = y0 = 0;\n var j = 2, n = input.length, output = new Array(n);\n output[0] = (x0 += input[0]) * kx + dx;\n output[1] = (y0 += input[1]) * ky + dy;\n while (j < n) output[j] = input[j], ++j;\n return output;\n };\n}\n","export default function(array, n) {\n var t, j = array.length, i = j - n;\n while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n","export default function(topology, arcs) {\n var stitchedArcs = {},\n fragmentByStart = {},\n fragmentByEnd = {},\n fragments = [],\n emptyIndex = -1;\n\n // Stitch empty arcs first, since they may be subsumed by other arcs.\n arcs.forEach(function(i, j) {\n var arc = topology.arcs[i < 0 ? ~i : i], t;\n if (arc.length < 3 && !arc[1][0] && !arc[1][1]) {\n t = arcs[++emptyIndex], arcs[emptyIndex] = i, arcs[j] = t;\n }\n });\n\n arcs.forEach(function(i) {\n var e = ends(i),\n start = e[0],\n end = e[1],\n f, g;\n\n if (f = fragmentByEnd[start]) {\n delete fragmentByEnd[f.end];\n f.push(i);\n f.end = end;\n if (g = fragmentByStart[end]) {\n delete fragmentByStart[g.start];\n var fg = g === f ? f : f.concat(g);\n fragmentByStart[fg.start = f.start] = fragmentByEnd[fg.end = g.end] = fg;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else if (f = fragmentByStart[end]) {\n delete fragmentByStart[f.start];\n f.unshift(i);\n f.start = start;\n if (g = fragmentByEnd[start]) {\n delete fragmentByEnd[g.end];\n var gf = g === f ? f : g.concat(f);\n fragmentByStart[gf.start = g.start] = fragmentByEnd[gf.end = f.end] = gf;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else {\n f = [i];\n fragmentByStart[f.start = start] = fragmentByEnd[f.end = end] = f;\n }\n });\n\n function ends(i) {\n var arc = topology.arcs[i < 0 ? ~i : i], p0 = arc[0], p1;\n if (topology.transform) p1 = [0, 0], arc.forEach(function(dp) { p1[0] += dp[0], p1[1] += dp[1]; });\n else p1 = arc[arc.length - 1];\n return i < 0 ? [p1, p0] : [p0, p1];\n }\n\n function flush(fragmentByEnd, fragmentByStart) {\n for (var k in fragmentByEnd) {\n var f = fragmentByEnd[k];\n delete fragmentByStart[f.start];\n delete f.start;\n delete f.end;\n f.forEach(function(i) { stitchedArcs[i < 0 ? ~i : i] = 1; });\n fragments.push(f);\n }\n }\n\n flush(fragmentByEnd, fragmentByStart);\n flush(fragmentByStart, fragmentByEnd);\n arcs.forEach(function(i) { if (!stitchedArcs[i < 0 ? ~i : i]) fragments.push([i]); });\n\n return fragments;\n}\n","import {object} from \"./feature.js\";\nimport stitch from \"./stitch.js\";\n\nexport default function(topology) {\n return object(topology, meshArcs.apply(this, arguments));\n}\n\nexport function meshArcs(topology, object, filter) {\n var arcs, i, n;\n if (arguments.length > 1) arcs = extractArcs(topology, object, filter);\n else for (i = 0, arcs = new Array(n = topology.arcs.length); i < n; ++i) arcs[i] = i;\n return {type: \"MultiLineString\", arcs: stitch(topology, arcs)};\n}\n\nfunction extractArcs(topology, object, filter) {\n var arcs = [],\n geomsByArc = [],\n geom;\n\n function extract0(i) {\n var j = i < 0 ? ~i : i;\n (geomsByArc[j] || (geomsByArc[j] = [])).push({i: i, g: geom});\n }\n\n function extract1(arcs) {\n arcs.forEach(extract0);\n }\n\n function extract2(arcs) {\n arcs.forEach(extract1);\n }\n\n function extract3(arcs) {\n arcs.forEach(extract2);\n }\n\n function geometry(o) {\n switch (geom = o, o.type) {\n case \"GeometryCollection\": o.geometries.forEach(geometry); break;\n case \"LineString\": extract1(o.arcs); break;\n case \"MultiLineString\": case \"Polygon\": extract2(o.arcs); break;\n case \"MultiPolygon\": extract3(o.arcs); break;\n }\n }\n\n geometry(object);\n\n geomsByArc.forEach(filter == null\n ? function(geoms) { arcs.push(geoms[0].i); }\n : function(geoms) { if (filter(geoms[0].g, geoms[geoms.length - 1].g)) arcs.push(geoms[0].i); });\n\n return arcs;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(f) {\n let delta = f;\n let compare = f;\n\n if (f.length === 1) {\n delta = (d, x) => f(d) - x;\n compare = ascendingComparator(f);\n }\n\n function left(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n }\n\n function right(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n\n function center(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction ascendingComparator(f) {\n return (d, x) => ascending(f(d), x);\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n constructor() {\n this._partials = new Float64Array(32);\n this._n = 0;\n }\n add(x) {\n const p = this._partials;\n let i = 0;\n for (let j = 0; j < this._n && j < 32; j++) {\n const y = p[j],\n hi = x + y,\n lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n if (lo) p[i++] = lo;\n x = hi;\n }\n p[i] = x;\n this._n = i + 1;\n return this;\n }\n valueOf() {\n const p = this._partials;\n let n = this._n, x, y, lo, hi = 0;\n if (n > 0) {\n hi = p[--n];\n while (n > 0) {\n x = hi;\n y = p[--n];\n hi = x + y;\n lo = y - (hi - x);\n if (lo) break;\n }\n if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n y = lo * 2;\n x = hi + y;\n if (y == x - hi) hi = x;\n }\n }\n return hi;\n }\n}\n\nexport function fsum(values, valueof) {\n const adder = new Adder();\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n adder.add(value);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n adder.add(value);\n }\n }\n }\n return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n const adder = new Adder();\n let index = -1;\n return Float64Array.from(values, valueof === undefined\n ? v => adder.add(+v || 0)\n : v => adder.add(+valueof(v, ++index, values) || 0)\n );\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n let r0 = Math.round(start / step), r1 = Math.round(stop / step);\n if (r0 * step < start) ++r0;\n if (r1 * step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n while (++i < n) ticks[i] = (r0 + i) * step;\n } else {\n step = -step;\n let r0 = Math.round(start * step), r1 = Math.round(stop * step);\n if (r0 / step < start) ++r0;\n if (r1 / step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n while (++i < n) ticks[i] = (r0 + i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","import ascending from \"./ascending.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = array.length - 1, compare = ascending) {\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","import max from \"./max.js\";\nimport min from \"./min.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","import quantile from \"./quantile.js\";\n\nexport default function(values, valueof) {\n return quantile(values, 0.5, valueof);\n}\n","function* flatten(arrays) {\n for (const array of arrays) {\n yield* array;\n }\n}\n\nexport default function merge(arrays) {\n return Array.from(flatten(arrays));\n}\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export default function sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = function(date) {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval.js\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import { array, error, hasOwnProperty, extend, peek, toSet, constant, zero, one, span } from 'vega-util';\nimport { timeDay, timeWeek, utcDay, utcWeek, timeYear, timeMonth, timeHour, timeMinute, timeSecond, timeMillisecond, utcYear, utcMonth, utcHour, utcMinute, utcSecond, utcMillisecond } from 'd3-time';\nimport { bisector, tickStep } from 'd3-array';\n\nconst YEAR = 'year';\nconst QUARTER = 'quarter';\nconst MONTH = 'month';\nconst WEEK = 'week';\nconst DATE = 'date';\nconst DAY = 'day';\nconst DAYOFYEAR = 'dayofyear';\nconst HOURS = 'hours';\nconst MINUTES = 'minutes';\nconst SECONDS = 'seconds';\nconst MILLISECONDS = 'milliseconds';\nconst TIME_UNITS = [YEAR, QUARTER, MONTH, WEEK, DATE, DAY, DAYOFYEAR, HOURS, MINUTES, SECONDS, MILLISECONDS];\nconst UNITS = TIME_UNITS.reduce((o, u, i) => (o[u] = 1 + i, o), {});\nfunction timeUnits(units) {\n const u = array(units).slice(),\n m = {}; // check validity\n\n if (!u.length) error('Missing time unit.');\n u.forEach(unit => {\n if (hasOwnProperty(UNITS, unit)) {\n m[unit] = 1;\n } else {\n error(`Invalid time unit: ${unit}.`);\n }\n });\n const numTypes = (m[WEEK] || m[DAY] ? 1 : 0) + (m[QUARTER] || m[MONTH] || m[DATE] ? 1 : 0) + (m[DAYOFYEAR] ? 1 : 0);\n\n if (numTypes > 1) {\n error(`Incompatible time units: ${units}`);\n } // ensure proper sort order\n\n\n u.sort((a, b) => UNITS[a] - UNITS[b]);\n return u;\n}\nconst defaultSpecifiers = {\n [YEAR]: '%Y ',\n [QUARTER]: 'Q%q ',\n [MONTH]: '%b ',\n [DATE]: '%d ',\n [WEEK]: 'W%U ',\n [DAY]: '%a ',\n [DAYOFYEAR]: '%j ',\n [HOURS]: '%H:00',\n [MINUTES]: '00:%M',\n [SECONDS]: ':%S',\n [MILLISECONDS]: '.%L',\n [`${YEAR}-${MONTH}`]: '%Y-%m ',\n [`${YEAR}-${MONTH}-${DATE}`]: '%Y-%m-%d ',\n [`${HOURS}-${MINUTES}`]: '%H:%M'\n};\nfunction timeUnitSpecifier(units, specifiers) {\n const s = extend({}, defaultSpecifiers, specifiers),\n u = timeUnits(units),\n n = u.length;\n let fmt = '',\n start = 0,\n end,\n key;\n\n for (start = 0; start < n;) {\n for (end = u.length; end > start; --end) {\n key = u.slice(start, end).join('-');\n\n if (s[key] != null) {\n fmt += s[key];\n start = end;\n break;\n }\n }\n }\n\n return fmt.trim();\n}\n\nconst t0 = new Date();\n\nfunction localYear(y) {\n t0.setFullYear(y);\n t0.setMonth(0);\n t0.setDate(1);\n t0.setHours(0, 0, 0, 0);\n return t0;\n}\n\nfunction dayofyear(d) {\n return localDayOfYear(new Date(d));\n}\nfunction week(d) {\n return localWeekNum(new Date(d));\n}\nfunction localDayOfYear(d) {\n return timeDay.count(localYear(d.getFullYear()) - 1, d);\n}\nfunction localWeekNum(d) {\n return timeWeek.count(localYear(d.getFullYear()) - 1, d);\n}\nfunction localFirst(y) {\n return localYear(y).getDay();\n}\nfunction localDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(-1, m, d, H, M, S, L);\n date.setFullYear(y);\n return date;\n }\n\n return new Date(y, m, d, H, M, S, L);\n}\nfunction utcdayofyear(d) {\n return utcDayOfYear(new Date(d));\n}\nfunction utcweek(d) {\n return utcWeekNum(new Date(d));\n}\nfunction utcDayOfYear(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcDay.count(y - 1, d);\n}\nfunction utcWeekNum(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcWeek.count(y - 1, d);\n}\nfunction utcFirst(y) {\n t0.setTime(Date.UTC(y, 0, 1));\n return t0.getUTCDay();\n}\nfunction utcDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(Date.UTC(-1, m, d, H, M, S, L));\n date.setUTCFullYear(d.y);\n return date;\n }\n\n return new Date(Date.UTC(y, m, d, H, M, S, L));\n}\n\nfunction floor(units, step, get, inv, newDate) {\n const s = step || 1,\n b = peek(units),\n _ = (unit, p, key) => {\n key = key || unit;\n return getUnit(get[key], inv[key], unit === b && s, p);\n };\n\n const t = new Date(),\n u = toSet(units),\n y = u[YEAR] ? _(YEAR) : constant(2012),\n m = u[MONTH] ? _(MONTH) : u[QUARTER] ? _(QUARTER) : zero,\n d = u[WEEK] && u[DAY] ? _(DAY, 1, WEEK + DAY) : u[WEEK] ? _(WEEK, 1) : u[DAY] ? _(DAY, 1) : u[DATE] ? _(DATE, 1) : u[DAYOFYEAR] ? _(DAYOFYEAR, 1) : one,\n H = u[HOURS] ? _(HOURS) : zero,\n M = u[MINUTES] ? _(MINUTES) : zero,\n S = u[SECONDS] ? _(SECONDS) : zero,\n L = u[MILLISECONDS] ? _(MILLISECONDS) : zero;\n return function (v) {\n t.setTime(+v);\n const year = y(t);\n return newDate(year, m(t), d(t, year), H(t), M(t), S(t), L(t));\n };\n}\n\nfunction getUnit(f, inv, step, phase) {\n const u = step <= 1 ? f : phase ? (d, y) => phase + step * Math.floor((f(d, y) - phase) / step) : (d, y) => step * Math.floor(f(d, y) / step);\n return inv ? (d, y) => inv(u(d, y), y) : u;\n} // returns the day of the year based on week number, day of week,\n// and the day of the week for the first day of the year\n\n\nfunction weekday(week, day, firstDay) {\n return day + week * 7 - (firstDay + 6) % 7;\n} // -- LOCAL TIME --\n\n\nconst localGet = {\n [YEAR]: d => d.getFullYear(),\n [QUARTER]: d => Math.floor(d.getMonth() / 3),\n [MONTH]: d => d.getMonth(),\n [DATE]: d => d.getDate(),\n [HOURS]: d => d.getHours(),\n [MINUTES]: d => d.getMinutes(),\n [SECONDS]: d => d.getSeconds(),\n [MILLISECONDS]: d => d.getMilliseconds(),\n [DAYOFYEAR]: d => localDayOfYear(d),\n [WEEK]: d => localWeekNum(d),\n [WEEK + DAY]: (d, y) => weekday(localWeekNum(d), d.getDay(), localFirst(y)),\n [DAY]: (d, y) => weekday(1, d.getDay(), localFirst(y))\n};\nconst localInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, localFirst(y))\n};\nfunction timeFloor(units, step) {\n return floor(units, step || 1, localGet, localInv, localDate);\n} // -- UTC TIME --\n\nconst utcGet = {\n [YEAR]: d => d.getUTCFullYear(),\n [QUARTER]: d => Math.floor(d.getUTCMonth() / 3),\n [MONTH]: d => d.getUTCMonth(),\n [DATE]: d => d.getUTCDate(),\n [HOURS]: d => d.getUTCHours(),\n [MINUTES]: d => d.getUTCMinutes(),\n [SECONDS]: d => d.getUTCSeconds(),\n [MILLISECONDS]: d => d.getUTCMilliseconds(),\n [DAYOFYEAR]: d => utcDayOfYear(d),\n [WEEK]: d => utcWeekNum(d),\n [DAY]: (d, y) => weekday(1, d.getUTCDay(), utcFirst(y)),\n [WEEK + DAY]: (d, y) => weekday(utcWeekNum(d), d.getUTCDay(), utcFirst(y))\n};\nconst utcInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, utcFirst(y))\n};\nfunction utcFloor(units, step) {\n return floor(units, step || 1, utcGet, utcInv, utcDate);\n}\n\nconst timeIntervals = {\n [YEAR]: timeYear,\n [QUARTER]: timeMonth.every(3),\n [MONTH]: timeMonth,\n [WEEK]: timeWeek,\n [DATE]: timeDay,\n [DAY]: timeDay,\n [DAYOFYEAR]: timeDay,\n [HOURS]: timeHour,\n [MINUTES]: timeMinute,\n [SECONDS]: timeSecond,\n [MILLISECONDS]: timeMillisecond\n};\nconst utcIntervals = {\n [YEAR]: utcYear,\n [QUARTER]: utcMonth.every(3),\n [MONTH]: utcMonth,\n [WEEK]: utcWeek,\n [DATE]: utcDay,\n [DAY]: utcDay,\n [DAYOFYEAR]: utcDay,\n [HOURS]: utcHour,\n [MINUTES]: utcMinute,\n [SECONDS]: utcSecond,\n [MILLISECONDS]: utcMillisecond\n};\nfunction timeInterval(unit) {\n return timeIntervals[unit];\n}\nfunction utcInterval(unit) {\n return utcIntervals[unit];\n}\n\nfunction offset(ival, date, step) {\n return ival ? ival.offset(date, step) : undefined;\n}\n\nfunction timeOffset(unit, date, step) {\n return offset(timeInterval(unit), date, step);\n}\nfunction utcOffset(unit, date, step) {\n return offset(utcInterval(unit), date, step);\n}\n\nfunction sequence(ival, start, stop, step) {\n return ival ? ival.range(start, stop, step) : undefined;\n}\n\nfunction timeSequence(unit, start, stop, step) {\n return sequence(timeInterval(unit), start, stop, step);\n}\nfunction utcSequence(unit, start, stop, step) {\n return sequence(utcInterval(unit), start, stop, step);\n}\n\nconst durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\nconst Milli = [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS],\n Seconds = Milli.slice(0, -1),\n Minutes = Seconds.slice(0, -1),\n Hours = Minutes.slice(0, -1),\n Day = Hours.slice(0, -1),\n Week = [YEAR, WEEK],\n Month = [YEAR, MONTH],\n Year = [YEAR];\nconst intervals = [[Seconds, 1, durationSecond], [Seconds, 5, 5 * durationSecond], [Seconds, 15, 15 * durationSecond], [Seconds, 30, 30 * durationSecond], [Minutes, 1, durationMinute], [Minutes, 5, 5 * durationMinute], [Minutes, 15, 15 * durationMinute], [Minutes, 30, 30 * durationMinute], [Hours, 1, durationHour], [Hours, 3, 3 * durationHour], [Hours, 6, 6 * durationHour], [Hours, 12, 12 * durationHour], [Day, 1, durationDay], [Week, 1, durationWeek], [Month, 1, durationMonth], [Month, 3, 3 * durationMonth], [Year, 1, durationYear]];\nfunction bin (opt) {\n const ext = opt.extent,\n max = opt.maxbins || 40,\n target = Math.abs(span(ext)) / max;\n let i = bisector(i => i[2]).right(intervals, target),\n units,\n step;\n\n if (i === intervals.length) {\n units = Year, step = tickStep(ext[0] / durationYear, ext[1] / durationYear, max);\n } else if (i) {\n i = intervals[target / intervals[i - 1][2] < intervals[i][2] / target ? i - 1 : i];\n units = i[0];\n step = i[1];\n } else {\n units = Milli;\n step = Math.max(tickStep(ext[0], ext[1], max), 1);\n }\n\n return {\n units,\n step\n };\n}\n\nexport { DATE, DAY, DAYOFYEAR, HOURS, MILLISECONDS, MINUTES, MONTH, QUARTER, SECONDS, TIME_UNITS, WEEK, YEAR, dayofyear, bin as timeBin, timeFloor, timeInterval, timeOffset, timeSequence, timeUnitSpecifier, timeUnits, utcFloor, utcInterval, utcOffset, utcSequence, utcdayofyear, utcweek, week };\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import { tickStep } from 'd3-array';\nimport { formatSpecifier, precisionFixed, precisionRound, precisionPrefix, formatLocale, format, formatPrefix } from 'd3-format';\nimport { SECONDS, MINUTES, HOURS, DATE, WEEK, MONTH, QUARTER, YEAR, MILLISECONDS, DAY, timeInterval, utcInterval } from 'vega-time';\nimport { isString, isObject, error, extend } from 'vega-util';\nimport { timeFormat, timeParse, utcFormat, utcParse, timeFormatLocale as timeFormatLocale$1 } from 'd3-time-format';\n\nfunction memoize (method) {\n const cache = {};\n return spec => cache[spec] || (cache[spec] = method(spec));\n}\n\nfunction trimZeroes(numberFormat, decimalChar) {\n return x => {\n const str = numberFormat(x),\n dec = str.indexOf(decimalChar);\n if (dec < 0) return str;\n let idx = rightmostDigit(str, dec);\n const end = idx < str.length ? str.slice(idx) : '';\n\n while (--idx > dec) if (str[idx] !== '0') {\n ++idx;\n break;\n }\n\n return str.slice(0, idx) + end;\n };\n}\n\nfunction rightmostDigit(str, dec) {\n let i = str.lastIndexOf('e'),\n c;\n if (i > 0) return i;\n\n for (i = str.length; --i > dec;) {\n c = str.charCodeAt(i);\n if (c >= 48 && c <= 57) return i + 1; // is digit\n }\n}\n\nfunction numberLocale(locale) {\n const format = memoize(locale.format),\n formatPrefix = locale.formatPrefix;\n return {\n format,\n formatPrefix,\n\n formatFloat(spec) {\n const s = formatSpecifier(spec || ',');\n\n if (s.precision == null) {\n s.precision = 12;\n\n switch (s.type) {\n case '%':\n s.precision -= 2;\n break;\n\n case 'e':\n s.precision -= 1;\n break;\n }\n\n return trimZeroes(format(s), // number format\n format('.1f')(1)[1] // decimal point character\n );\n } else {\n return format(s);\n }\n },\n\n formatSpan(start, stop, count, specifier) {\n specifier = formatSpecifier(specifier == null ? ',f' : specifier);\n const step = tickStep(start, stop, count),\n value = Math.max(Math.abs(start), Math.abs(stop));\n let precision;\n\n if (specifier.precision == null) {\n switch (specifier.type) {\n case 's':\n {\n if (!isNaN(precision = precisionPrefix(step, value))) {\n specifier.precision = precision;\n }\n\n return formatPrefix(specifier, value);\n }\n\n case '':\n case 'e':\n case 'g':\n case 'p':\n case 'r':\n {\n if (!isNaN(precision = precisionRound(step, value))) {\n specifier.precision = precision - (specifier.type === 'e');\n }\n\n break;\n }\n\n case 'f':\n case '%':\n {\n if (!isNaN(precision = precisionFixed(step))) {\n specifier.precision = precision - (specifier.type === '%') * 2;\n }\n\n break;\n }\n }\n }\n\n return format(specifier);\n }\n\n };\n}\n\nlet defaultNumberLocale;\nresetNumberFormatDefaultLocale();\nfunction resetNumberFormatDefaultLocale() {\n return defaultNumberLocale = numberLocale({\n format: format,\n formatPrefix: formatPrefix\n });\n}\nfunction numberFormatLocale(definition) {\n return numberLocale(formatLocale(definition));\n}\nfunction numberFormatDefaultLocale(definition) {\n return arguments.length ? defaultNumberLocale = numberFormatLocale(definition) : defaultNumberLocale;\n}\n\nfunction timeMultiFormat(format, interval, spec) {\n spec = spec || {};\n\n if (!isObject(spec)) {\n error(`Invalid time multi-format specifier: ${spec}`);\n }\n\n const second = interval(SECONDS),\n minute = interval(MINUTES),\n hour = interval(HOURS),\n day = interval(DATE),\n week = interval(WEEK),\n month = interval(MONTH),\n quarter = interval(QUARTER),\n year = interval(YEAR),\n L = format(spec[MILLISECONDS] || '.%L'),\n S = format(spec[SECONDS] || ':%S'),\n M = format(spec[MINUTES] || '%I:%M'),\n H = format(spec[HOURS] || '%I %p'),\n d = format(spec[DATE] || spec[DAY] || '%a %d'),\n w = format(spec[WEEK] || '%b %d'),\n m = format(spec[MONTH] || '%B'),\n q = format(spec[QUARTER] || '%B'),\n y = format(spec[YEAR] || '%Y');\n return date => (second(date) < date ? L : minute(date) < date ? S : hour(date) < date ? M : day(date) < date ? H : month(date) < date ? week(date) < date ? d : w : year(date) < date ? quarter(date) < date ? m : q : y)(date);\n}\n\nfunction timeLocale(locale) {\n const timeFormat = memoize(locale.format),\n utcFormat = memoize(locale.utcFormat);\n return {\n timeFormat: spec => isString(spec) ? timeFormat(spec) : timeMultiFormat(timeFormat, timeInterval, spec),\n utcFormat: spec => isString(spec) ? utcFormat(spec) : timeMultiFormat(utcFormat, utcInterval, spec),\n timeParse: memoize(locale.parse),\n utcParse: memoize(locale.utcParse)\n };\n}\n\nlet defaultTimeLocale;\nresetTimeFormatDefaultLocale();\nfunction resetTimeFormatDefaultLocale() {\n return defaultTimeLocale = timeLocale({\n format: timeFormat,\n parse: timeParse,\n utcFormat: utcFormat,\n utcParse: utcParse\n });\n}\nfunction timeFormatLocale(definition) {\n return timeLocale(timeFormatLocale$1(definition));\n}\nfunction timeFormatDefaultLocale(definition) {\n return arguments.length ? defaultTimeLocale = timeFormatLocale(definition) : defaultTimeLocale;\n}\n\nconst createLocale = (number, time) => extend({}, number, time);\n\nfunction locale(numberSpec, timeSpec) {\n const number = numberSpec ? numberFormatLocale(numberSpec) : numberFormatDefaultLocale();\n const time = timeSpec ? timeFormatLocale(timeSpec) : timeFormatDefaultLocale();\n return createLocale(number, time);\n}\nfunction defaultLocale(numberSpec, timeSpec) {\n const args = arguments.length;\n\n if (args && args !== 2) {\n error('defaultLocale expects either zero or two arguments.');\n }\n\n return args ? createLocale(numberFormatDefaultLocale(numberSpec), timeFormatDefaultLocale(timeSpec)) : createLocale(numberFormatDefaultLocale(), timeFormatDefaultLocale());\n}\nfunction resetDefaultLocale() {\n resetNumberFormatDefaultLocale();\n resetTimeFormatDefaultLocale();\n return defaultLocale();\n}\n\nexport { defaultLocale, locale, numberFormatDefaultLocale, numberFormatLocale, resetDefaultLocale, resetNumberFormatDefaultLocale, resetTimeFormatDefaultLocale, timeFormatDefaultLocale, timeFormatLocale };\n","import { extend, error, isFunction, stringValue, toBoolean, toNumber, toDate, toString, identity, field, isObject, isArray, isIterable, hasOwnProperty } from 'vega-util';\nimport { dsvFormat } from 'd3-dsv';\nimport { feature, mesh } from 'topojson-client';\nimport { timeFormatDefaultLocale } from 'vega-format';\n\n// https://... file://... //...\n\nconst protocol_re = /^([A-Za-z]+:)?\\/\\//; // Matches allowed URIs. From https://github.com/cure53/DOMPurify/blob/master/src/regexp.js with added file://\n\nconst allowed_re = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i; // eslint-disable-line no-useless-escape\n\nconst whitespace_re = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g; // eslint-disable-line no-control-regex\n// Special treatment in node.js for the file: protocol\n\nconst fileProtocol = 'file://';\n/**\n * Factory for a loader constructor that provides methods for requesting\n * files from either the network or disk, and for sanitizing request URIs.\n * @param {function} fetch - The Fetch API for HTTP network requests.\n * If null or undefined, HTTP loading will be disabled.\n * @param {object} fs - The file system interface for file loading.\n * If null or undefined, local file loading will be disabled.\n * @return {function} A loader constructor with the following signature:\n * param {object} [options] - Optional default loading options to use.\n * return {object} - A new loader instance.\n */\n\nfunction loaderFactory (fetch, fs) {\n return options => ({\n options: options || {},\n sanitize: sanitize,\n load: load,\n fileAccess: !!fs,\n file: fileLoader(fs),\n http: httpLoader(fetch)\n });\n}\n/**\n * Load an external resource, typically either from the web or from the local\n * filesystem. This function uses {@link sanitize} to first sanitize the uri,\n * then calls either {@link http} (for web requests) or {@link file} (for\n * filesystem loading).\n * @param {string} uri - The resource indicator (e.g., URL or filename).\n * @param {object} [options] - Optional loading options. These options will\n * override any existing default options.\n * @return {Promise} - A promise that resolves to the loaded content.\n */\n\nasync function load(uri, options) {\n const opt = await this.sanitize(uri, options),\n url = opt.href;\n return opt.localFile ? this.file(url) : this.http(url, options);\n}\n/**\n * URI sanitizer function.\n * @param {string} uri - The uri (url or filename) to check.\n * @param {object} options - An options hash.\n * @return {Promise} - A promise that resolves to an object containing\n * sanitized uri data, or rejects it the input uri is deemed invalid.\n * The properties of the resolved object are assumed to be\n * valid attributes for an HTML 'a' tag. The sanitized uri *must* be\n * provided by the 'href' property of the returned object.\n */\n\n\nasync function sanitize(uri, options) {\n options = extend({}, this.options, options);\n const fileAccess = this.fileAccess,\n result = {\n href: null\n };\n let isFile, loadFile, base;\n const isAllowed = allowed_re.test(uri.replace(whitespace_re, ''));\n\n if (uri == null || typeof uri !== 'string' || !isAllowed) {\n error('Sanitize failure, invalid URI: ' + stringValue(uri));\n }\n\n const hasProtocol = protocol_re.test(uri); // if relative url (no protocol/host), prepend baseURL\n\n if ((base = options.baseURL) && !hasProtocol) {\n // Ensure that there is a slash between the baseURL (e.g. hostname) and url\n if (!uri.startsWith('/') && base[base.length - 1] !== '/') {\n uri = '/' + uri;\n }\n\n uri = base + uri;\n } // should we load from file system?\n\n\n loadFile = (isFile = uri.startsWith(fileProtocol)) || options.mode === 'file' || options.mode !== 'http' && !hasProtocol && fileAccess;\n\n if (isFile) {\n // strip file protocol\n uri = uri.slice(fileProtocol.length);\n } else if (uri.startsWith('//')) {\n if (options.defaultProtocol === 'file') {\n // if is file, strip protocol and set loadFile flag\n uri = uri.slice(2);\n loadFile = true;\n } else {\n // if relative protocol (starts with '//'), prepend default protocol\n uri = (options.defaultProtocol || 'http') + ':' + uri;\n }\n } // set non-enumerable mode flag to indicate local file load\n\n\n Object.defineProperty(result, 'localFile', {\n value: !!loadFile\n }); // set uri\n\n result.href = uri; // set default result target, if specified\n\n if (options.target) {\n result.target = options.target + '';\n } // set default result rel, if specified (#1542)\n\n\n if (options.rel) {\n result.rel = options.rel + '';\n } // provide control over cross-origin image handling (#2238)\n // https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image\n\n\n if (options.context === 'image' && options.crossOrigin) {\n result.crossOrigin = options.crossOrigin + '';\n } // return\n\n\n return result;\n}\n/**\n * File system loader factory.\n * @param {object} fs - The file system interface.\n * @return {function} - A file loader with the following signature:\n * param {string} filename - The file system path to load.\n * param {string} filename - The file system path to load.\n * return {Promise} A promise that resolves to the file contents.\n */\n\n\nfunction fileLoader(fs) {\n return fs ? filename => new Promise((accept, reject) => {\n fs.readFile(filename, (error, data) => {\n if (error) reject(error);else accept(data);\n });\n }) : fileReject;\n}\n/**\n * Default file system loader that simply rejects.\n */\n\n\nasync function fileReject() {\n error('No file system access.');\n}\n/**\n * HTTP request handler factory.\n * @param {function} fetch - The Fetch API method.\n * @return {function} - An http loader with the following signature:\n * param {string} url - The url to request.\n * param {object} options - An options hash.\n * return {Promise} - A promise that resolves to the file contents.\n */\n\n\nfunction httpLoader(fetch) {\n return fetch ? async function (url, options) {\n const opt = extend({}, this.options.http, options),\n type = options && options.response,\n response = await fetch(url, opt);\n return !response.ok ? error(response.status + '' + response.statusText) : isFunction(response[type]) ? response[type]() : response.text();\n } : httpReject;\n}\n/**\n * Default http request handler that simply rejects.\n */\n\n\nasync function httpReject() {\n error('No HTTP fetch method available.');\n}\n\nconst isValid = _ => _ != null && _ === _;\n\nconst isBoolean = _ => _ === 'true' || _ === 'false' || _ === true || _ === false;\n\nconst isDate = _ => !Number.isNaN(Date.parse(_));\n\nconst isNumber = _ => !Number.isNaN(+_) && !(_ instanceof Date);\n\nconst isInteger = _ => isNumber(_) && Number.isInteger(+_);\n\nconst typeParsers = {\n boolean: toBoolean,\n integer: toNumber,\n number: toNumber,\n date: toDate,\n string: toString,\n unknown: identity\n};\nconst typeTests = [isBoolean, isInteger, isNumber, isDate];\nconst typeList = ['boolean', 'integer', 'number', 'date'];\nfunction inferType(values, field) {\n if (!values || !values.length) return 'unknown';\n const n = values.length,\n m = typeTests.length,\n a = typeTests.map((_, i) => i + 1);\n\n for (let i = 0, t = 0, j, value; i < n; ++i) {\n value = field ? values[i][field] : values[i];\n\n for (j = 0; j < m; ++j) {\n if (a[j] && isValid(value) && !typeTests[j](value)) {\n a[j] = 0;\n ++t;\n if (t === typeTests.length) return 'string';\n }\n }\n }\n\n return typeList[a.reduce((u, v) => u === 0 ? v : u, 0) - 1];\n}\nfunction inferTypes(data, fields) {\n return fields.reduce((types, field) => {\n types[field] = inferType(data, field);\n return types;\n }, {});\n}\n\nfunction delimitedFormat(delimiter) {\n const parse = function (data, format) {\n const delim = {\n delimiter: delimiter\n };\n return dsv(data, format ? extend(format, delim) : delim);\n };\n\n parse.responseType = 'text';\n return parse;\n}\nfunction dsv(data, format) {\n if (format.header) {\n data = format.header.map(stringValue).join(format.delimiter) + '\\n' + data;\n }\n\n return dsvFormat(format.delimiter).parse(data + '');\n}\ndsv.responseType = 'text';\n\nfunction isBuffer(_) {\n return typeof Buffer === 'function' && isFunction(Buffer.isBuffer) ? Buffer.isBuffer(_) : false;\n}\n\nfunction json(data, format) {\n const prop = format && format.property ? field(format.property) : identity;\n return isObject(data) && !isBuffer(data) ? parseJSON(prop(data), format) : prop(JSON.parse(data));\n}\njson.responseType = 'json';\n\nfunction parseJSON(data, format) {\n if (!isArray(data) && isIterable(data)) {\n data = [...data];\n }\n\n return format && format.copy ? JSON.parse(JSON.stringify(data)) : data;\n}\n\nconst filters = {\n interior: (a, b) => a !== b,\n exterior: (a, b) => a === b\n};\nfunction topojson(data, format) {\n let method, object, property, filter;\n data = json(data, format);\n\n if (format && format.feature) {\n method = feature;\n property = format.feature;\n } else if (format && format.mesh) {\n method = mesh;\n property = format.mesh;\n filter = filters[format.filter];\n } else {\n error('Missing TopoJSON feature or mesh parameter.');\n }\n\n object = (object = data.objects[property]) ? method(data, object, filter) : error('Invalid TopoJSON object: ' + property);\n return object && object.features || [object];\n}\ntopojson.responseType = 'json';\n\nconst format = {\n dsv: dsv,\n csv: delimitedFormat(','),\n tsv: delimitedFormat('\\t'),\n json: json,\n topojson: topojson\n};\nfunction formats(name, reader) {\n if (arguments.length > 1) {\n format[name] = reader;\n return this;\n } else {\n return hasOwnProperty(format, name) ? format[name] : null;\n }\n}\nfunction responseType(type) {\n const f = formats(type);\n return f && f.responseType || 'text';\n}\n\nfunction read (data, schema, timeParser, utcParser) {\n schema = schema || {};\n const reader = formats(schema.type || 'json');\n if (!reader) error('Unknown data format type: ' + schema.type);\n data = reader(data, schema);\n if (schema.parse) parse(data, schema.parse, timeParser, utcParser);\n if (hasOwnProperty(data, 'columns')) delete data.columns;\n return data;\n}\n\nfunction parse(data, types, timeParser, utcParser) {\n if (!data.length) return; // early exit for empty data\n\n const locale = timeFormatDefaultLocale();\n timeParser = timeParser || locale.timeParse;\n utcParser = utcParser || locale.utcParse;\n let fields = data.columns || Object.keys(data[0]),\n datum,\n field,\n i,\n j,\n n,\n m;\n if (types === 'auto') types = inferTypes(data, fields);\n fields = Object.keys(types);\n const parsers = fields.map(field => {\n const type = types[field];\n let parts, pattern;\n\n if (type && (type.startsWith('date:') || type.startsWith('utc:'))) {\n parts = type.split(/:(.+)?/, 2); // split on first :\n\n pattern = parts[1];\n\n if (pattern[0] === '\\'' && pattern[pattern.length - 1] === '\\'' || pattern[0] === '\"' && pattern[pattern.length - 1] === '\"') {\n pattern = pattern.slice(1, -1);\n }\n\n const parse = parts[0] === 'utc' ? utcParser : timeParser;\n return parse(pattern);\n }\n\n if (!typeParsers[type]) {\n throw Error('Illegal format pattern: ' + field + ':' + type);\n }\n\n return typeParsers[type];\n });\n\n for (i = 0, n = data.length, m = fields.length; i < n; ++i) {\n datum = data[i];\n\n for (j = 0; j < m; ++j) {\n field = fields[j];\n datum[field] = parsers[j](datum[field]);\n }\n }\n}\n\nconst loader = loaderFactory(typeof fetch !== 'undefined' && fetch, // use built-in fetch API\nnull // no file system access\n);\n\nexport { format, formats, inferType, inferTypes, loader, read, responseType, typeParsers };\n","import { identity, array, isFunction, constant, isArray, id, error, truthy, debounce, extend, visitArray, inherits, logger, Error, hasOwnProperty } from 'vega-util';\nimport { read, responseType, loader } from 'vega-loader';\nimport { defaultLocale } from 'vega-format';\n\nfunction UniqueList(idFunc) {\n const $ = idFunc || identity,\n list = [],\n ids = {};\n\n list.add = _ => {\n const id = $(_);\n\n if (!ids[id]) {\n ids[id] = 1;\n list.push(_);\n }\n\n return list;\n };\n\n list.remove = _ => {\n const id = $(_);\n\n if (ids[id]) {\n ids[id] = 0;\n const idx = list.indexOf(_);\n if (idx >= 0) list.splice(idx, 1);\n }\n\n return list;\n };\n\n return list;\n}\n\n/**\n * Invoke and await a potentially async callback function. If\n * an error occurs, trap it and route to Dataflow.error.\n * @param {Dataflow} df - The dataflow instance\n * @param {function} callback - A callback function to invoke\n * and then await. The dataflow will be passed as the single\n * argument to the function.\n */\nasync function asyncCallback (df, callback) {\n try {\n await callback(df);\n } catch (err) {\n df.error(err);\n }\n}\n\nconst TUPLE_ID_KEY = Symbol('vega_id');\nlet TUPLE_ID = 1;\n/**\n * Checks if an input value is a registered tuple.\n * @param {*} t - The value to check.\n * @return {boolean} True if the input is a tuple, false otherwise.\n */\n\nfunction isTuple(t) {\n return !!(t && tupleid(t));\n}\n/**\n * Returns the id of a tuple.\n * @param {object} t - The input tuple.\n * @return {*} the tuple id.\n */\n\nfunction tupleid(t) {\n return t[TUPLE_ID_KEY];\n}\n/**\n * Sets the id of a tuple.\n * @param {object} t - The input tuple.\n * @param {*} id - The id value to set.\n * @return {object} the input tuple.\n */\n\nfunction setid(t, id) {\n t[TUPLE_ID_KEY] = id;\n return t;\n}\n/**\n * Ingest an object or value as a data tuple.\n * If the input value is an object, an id field will be added to it. For\n * efficiency, the input object is modified directly. A copy is not made.\n * If the input value is a literal, it will be wrapped in a new object\n * instance, with the value accessible as the 'data' property.\n * @param datum - The value to ingest.\n * @return {object} The ingested data tuple.\n */\n\n\nfunction ingest$1(datum) {\n const t = datum === Object(datum) ? datum : {\n data: datum\n };\n return tupleid(t) ? t : setid(t, TUPLE_ID++);\n}\n/**\n * Given a source tuple, return a derived copy.\n * @param {object} t - The source tuple.\n * @return {object} The derived tuple.\n */\n\nfunction derive(t) {\n return rederive(t, ingest$1({}));\n}\n/**\n * Rederive a derived tuple by copying values from the source tuple.\n * @param {object} t - The source tuple.\n * @param {object} d - The derived tuple.\n * @return {object} The derived tuple.\n */\n\nfunction rederive(t, d) {\n for (const k in t) d[k] = t[k];\n\n return d;\n}\n/**\n * Replace an existing tuple with a new tuple.\n * @param {object} t - The existing data tuple.\n * @param {object} d - The new tuple that replaces the old.\n * @return {object} The new tuple.\n */\n\nfunction replace(t, d) {\n return setid(d, tupleid(t));\n}\n/**\n * Generate an augmented comparator function that provides stable\n * sorting by tuple id when the given comparator produces ties.\n * @param {function} cmp - The comparator to augment.\n * @param {function} [f] - Optional tuple accessor function.\n * @return {function} An augmented comparator function.\n */\n\nfunction stableCompare(cmp, f) {\n return !cmp ? null : f ? (a, b) => cmp(a, b) || tupleid(f(a)) - tupleid(f(b)) : (a, b) => cmp(a, b) || tupleid(a) - tupleid(b);\n}\n\nfunction isChangeSet(v) {\n return v && v.constructor === changeset;\n}\nfunction changeset() {\n const add = [],\n // insert tuples\n rem = [],\n // remove tuples\n mod = [],\n // modify tuples\n remp = [],\n // remove by predicate\n modp = []; // modify by predicate\n\n let clean = null,\n reflow = false;\n return {\n constructor: changeset,\n\n insert(t) {\n const d = array(t),\n n = d.length;\n\n for (let i = 0; i < n; ++i) add.push(d[i]);\n\n return this;\n },\n\n remove(t) {\n const a = isFunction(t) ? remp : rem,\n d = array(t),\n n = d.length;\n\n for (let i = 0; i < n; ++i) a.push(d[i]);\n\n return this;\n },\n\n modify(t, field, value) {\n const m = {\n field: field,\n value: constant(value)\n };\n\n if (isFunction(t)) {\n m.filter = t;\n modp.push(m);\n } else {\n m.tuple = t;\n mod.push(m);\n }\n\n return this;\n },\n\n encode(t, set) {\n if (isFunction(t)) modp.push({\n filter: t,\n field: set\n });else mod.push({\n tuple: t,\n field: set\n });\n return this;\n },\n\n clean(value) {\n clean = value;\n return this;\n },\n\n reflow() {\n reflow = true;\n return this;\n },\n\n pulse(pulse, tuples) {\n const cur = {},\n out = {};\n let i, n, m, f, t, id; // build lookup table of current tuples\n\n for (i = 0, n = tuples.length; i < n; ++i) {\n cur[tupleid(tuples[i])] = 1;\n } // process individual tuples to remove\n\n\n for (i = 0, n = rem.length; i < n; ++i) {\n t = rem[i];\n cur[tupleid(t)] = -1;\n } // process predicate-based removals\n\n\n for (i = 0, n = remp.length; i < n; ++i) {\n f = remp[i];\n tuples.forEach(t => {\n if (f(t)) cur[tupleid(t)] = -1;\n });\n } // process all add tuples\n\n\n for (i = 0, n = add.length; i < n; ++i) {\n t = add[i];\n id = tupleid(t);\n\n if (cur[id]) {\n // tuple already resides in dataset\n // if flagged for both add and remove, cancel\n cur[id] = 1;\n } else {\n // tuple does not reside in dataset, add\n pulse.add.push(ingest$1(add[i]));\n }\n } // populate pulse rem list\n\n\n for (i = 0, n = tuples.length; i < n; ++i) {\n t = tuples[i];\n if (cur[tupleid(t)] < 0) pulse.rem.push(t);\n } // modify helper method\n\n\n function modify(t, f, v) {\n if (v) {\n t[f] = v(t);\n } else {\n pulse.encode = f;\n }\n\n if (!reflow) out[tupleid(t)] = t;\n } // process individual tuples to modify\n\n\n for (i = 0, n = mod.length; i < n; ++i) {\n m = mod[i];\n t = m.tuple;\n f = m.field;\n id = cur[tupleid(t)];\n\n if (id > 0) {\n modify(t, f, m.value);\n pulse.modifies(f);\n }\n } // process predicate-based modifications\n\n\n for (i = 0, n = modp.length; i < n; ++i) {\n m = modp[i];\n f = m.filter;\n tuples.forEach(t => {\n if (f(t) && cur[tupleid(t)] > 0) {\n modify(t, m.field, m.value);\n }\n });\n pulse.modifies(m.field);\n } // upon reflow request, populate mod with all non-removed tuples\n // otherwise, populate mod with modified tuples only\n\n\n if (reflow) {\n pulse.mod = rem.length || remp.length ? tuples.filter(t => cur[tupleid(t)] > 0) : tuples.slice();\n } else {\n for (id in out) pulse.mod.push(out[id]);\n } // set pulse garbage collection request\n\n\n if (clean || clean == null && (rem.length || remp.length)) {\n pulse.clean(true);\n }\n\n return pulse;\n }\n\n };\n}\n\nconst CACHE = '_:mod:_';\n/**\n * Hash that tracks modifications to assigned values.\n * Callers *must* use the set method to update values.\n */\n\nfunction Parameters() {\n Object.defineProperty(this, CACHE, {\n writable: true,\n value: {}\n });\n}\nParameters.prototype = {\n /**\n * Set a parameter value. If the parameter value changes, the parameter\n * will be recorded as modified.\n * @param {string} name - The parameter name.\n * @param {number} index - The index into an array-value parameter. Ignored if\n * the argument is undefined, null or less than zero.\n * @param {*} value - The parameter value to set.\n * @param {boolean} [force=false] - If true, records the parameter as modified\n * even if the value is unchanged.\n * @return {Parameters} - This parameter object.\n */\n set(name, index, value, force) {\n const o = this,\n v = o[name],\n mod = o[CACHE];\n\n if (index != null && index >= 0) {\n if (v[index] !== value || force) {\n v[index] = value;\n mod[index + ':' + name] = -1;\n mod[name] = -1;\n }\n } else if (v !== value || force) {\n o[name] = value;\n mod[name] = isArray(value) ? 1 + value.length : -1;\n }\n\n return o;\n },\n\n /**\n * Tests if one or more parameters has been modified. If invoked with no\n * arguments, returns true if any parameter value has changed. If the first\n * argument is array, returns trues if any parameter name in the array has\n * changed. Otherwise, tests if the given name and optional array index has\n * changed.\n * @param {string} name - The parameter name to test.\n * @param {number} [index=undefined] - The parameter array index to test.\n * @return {boolean} - Returns true if a queried parameter was modified.\n */\n modified(name, index) {\n const mod = this[CACHE];\n\n if (!arguments.length) {\n for (const k in mod) {\n if (mod[k]) return true;\n }\n\n return false;\n } else if (isArray(name)) {\n for (let k = 0; k < name.length; ++k) {\n if (mod[name[k]]) return true;\n }\n\n return false;\n }\n\n return index != null && index >= 0 ? index + 1 < mod[name] || !!mod[index + ':' + name] : !!mod[name];\n },\n\n /**\n * Clears the modification records. After calling this method,\n * all parameters are considered unmodified.\n */\n clear() {\n this[CACHE] = {};\n return this;\n }\n\n};\n\nlet OP_ID = 0;\nconst PULSE = 'pulse',\n NO_PARAMS = new Parameters(); // Boolean Flags\n\nconst SKIP$1 = 1,\n MODIFIED = 2;\n/**\n * An Operator is a processing node in a dataflow graph.\n * Each operator stores a value and an optional value update function.\n * Operators can accept a hash of named parameters. Parameter values can\n * either be direct (JavaScript literals, arrays, objects) or indirect\n * (other operators whose values will be pulled dynamically). Operators\n * included as parameters will have this operator added as a dependency.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {function(object, Pulse)} [update] - An update function. Upon\n * evaluation of this operator, the update function will be invoked and the\n * return value will be used as the new value of this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @see parameters\n */\n\nfunction Operator(init, update, params, react) {\n this.id = ++OP_ID;\n this.value = init;\n this.stamp = -1;\n this.rank = -1;\n this.qrank = -1;\n this.flags = 0;\n\n if (update) {\n this._update = update;\n }\n\n if (params) this.parameters(params, react);\n}\n\nfunction flag(bit) {\n return function (state) {\n const f = this.flags;\n if (arguments.length === 0) return !!(f & bit);\n this.flags = state ? f | bit : f & ~bit;\n return this;\n };\n}\n\nOperator.prototype = {\n /**\n * Returns a list of target operators dependent on this operator.\n * If this list does not exist, it is created and then returned.\n * @return {UniqueList}\n */\n targets() {\n return this._targets || (this._targets = UniqueList(id));\n },\n\n /**\n * Sets the value of this operator.\n * @param {*} value - the value to set.\n * @return {Number} Returns 1 if the operator value has changed\n * according to strict equality, returns 0 otherwise.\n */\n set(value) {\n if (this.value !== value) {\n this.value = value;\n return 1;\n } else {\n return 0;\n }\n },\n\n /**\n * Indicates that operator evaluation should be skipped on the next pulse.\n * This operator will still propagate incoming pulses, but its update function\n * will not be invoked. The skip flag is reset after every pulse, so calling\n * this method will affect processing of the next pulse only.\n */\n skip: flag(SKIP$1),\n\n /**\n * Indicates that this operator's value has been modified on its most recent\n * pulse. Normally modification is checked via strict equality; however, in\n * some cases it is more efficient to update the internal state of an object.\n * In those cases, the modified flag can be used to trigger propagation. Once\n * set, the modification flag persists across pulses until unset. The flag can\n * be used with the last timestamp to test if a modification is recent.\n */\n modified: flag(MODIFIED),\n\n /**\n * Sets the parameters for this operator. The parameter values are analyzed for\n * operator instances. If found, this operator will be added as a dependency\n * of the parameterizing operator. Operator values are dynamically marshalled\n * from each operator parameter prior to evaluation. If a parameter value is\n * an array, the array will also be searched for Operator instances. However,\n * the search does not recurse into sub-arrays or object properties.\n * @param {object} params - A hash of operator parameters.\n * @param {boolean} [react=true] - A flag indicating if this operator should\n * automatically update (react) when parameter values change. In other words,\n * this flag determines if the operator registers itself as a listener on\n * any upstream operators included in the parameters.\n * @param {boolean} [initonly=false] - A flag indicating if this operator\n * should calculate an update only upon its initiatal evaluation, then\n * deregister dependencies and suppress all future update invocations.\n * @return {Operator[]} - An array of upstream dependencies.\n */\n parameters(params, react, initonly) {\n react = react !== false;\n const argval = this._argval = this._argval || new Parameters(),\n argops = this._argops = this._argops || [],\n deps = [];\n let name, value, n, i;\n\n const add = (name, index, value) => {\n if (value instanceof Operator) {\n if (value !== this) {\n if (react) value.targets().add(this);\n deps.push(value);\n }\n\n argops.push({\n op: value,\n name: name,\n index: index\n });\n } else {\n argval.set(name, index, value);\n }\n };\n\n for (name in params) {\n value = params[name];\n\n if (name === PULSE) {\n array(value).forEach(op => {\n if (!(op instanceof Operator)) {\n error('Pulse parameters must be operator instances.');\n } else if (op !== this) {\n op.targets().add(this);\n deps.push(op);\n }\n });\n this.source = value;\n } else if (isArray(value)) {\n argval.set(name, -1, Array(n = value.length));\n\n for (i = 0; i < n; ++i) add(name, i, value[i]);\n } else {\n add(name, -1, value);\n }\n }\n\n this.marshall().clear(); // initialize values\n\n if (initonly) argops.initonly = true;\n return deps;\n },\n\n /**\n * Internal method for marshalling parameter values.\n * Visits each operator dependency to pull the latest value.\n * @return {Parameters} A Parameters object to pass to the update function.\n */\n marshall(stamp) {\n const argval = this._argval || NO_PARAMS,\n argops = this._argops;\n let item, i, op, mod;\n\n if (argops) {\n const n = argops.length;\n\n for (i = 0; i < n; ++i) {\n item = argops[i];\n op = item.op;\n mod = op.modified() && op.stamp === stamp;\n argval.set(item.name, item.index, op.value, mod);\n }\n\n if (argops.initonly) {\n for (i = 0; i < n; ++i) {\n item = argops[i];\n item.op.targets().remove(this);\n }\n\n this._argops = null;\n this._update = null;\n }\n }\n\n return argval;\n },\n\n /**\n * Detach this operator from the dataflow.\n * Unregisters listeners on upstream dependencies.\n */\n detach() {\n const argops = this._argops;\n let i, n, item, op;\n\n if (argops) {\n for (i = 0, n = argops.length; i < n; ++i) {\n item = argops[i];\n op = item.op;\n\n if (op._targets) {\n op._targets.remove(this);\n }\n }\n } // remove references to the source and pulse object,\n // if present, to prevent memory leaks of old data.\n\n\n this.pulse = null;\n this.source = null;\n },\n\n /**\n * Delegate method to perform operator processing.\n * Subclasses can override this method to perform custom processing.\n * By default, it marshalls parameters and calls the update function\n * if that function is defined. If the update function does not\n * change the operator value then StopPropagation is returned.\n * If no update function is defined, this method does nothing.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return The output pulse or StopPropagation. A falsy return value\n * (including undefined) will let the input pulse pass through.\n */\n evaluate(pulse) {\n const update = this._update;\n\n if (update) {\n const params = this.marshall(pulse.stamp),\n v = update.call(this, params, pulse);\n params.clear();\n\n if (v !== this.value) {\n this.value = v;\n } else if (!this.modified()) {\n return pulse.StopPropagation;\n }\n }\n },\n\n /**\n * Run this operator for the current pulse. If this operator has already\n * been run at (or after) the pulse timestamp, returns StopPropagation.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\n run(pulse) {\n if (pulse.stamp < this.stamp) return pulse.StopPropagation;\n let rv;\n\n if (this.skip()) {\n this.skip(false);\n rv = 0;\n } else {\n rv = this.evaluate(pulse);\n }\n\n return this.pulse = rv || pulse;\n }\n\n};\n\n/**\n * Add an operator to the dataflow graph. This function accepts a\n * variety of input argument types. The basic signature supports an\n * initial value, update function and parameters. If the first parameter\n * is an Operator instance, it will be added directly. If it is a\n * constructor for an Operator subclass, a new instance will be instantiated.\n * Otherwise, if the first parameter is a function instance, it will be used\n * as the update function and a null initial value is assumed.\n * @param {*} init - One of: the operator to add, the initial value of\n * the operator, an operator class to instantiate, or an update function.\n * @param {function} [update] - The operator update function.\n * @param {object} [params] - The operator parameters.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @return {Operator} - The added operator.\n */\n\nfunction add (init, update, params, react) {\n let shift = 1,\n op;\n\n if (init instanceof Operator) {\n op = init;\n } else if (init && init.prototype instanceof Operator) {\n op = new init();\n } else if (isFunction(init)) {\n op = new Operator(null, init);\n } else {\n shift = 0;\n op = new Operator(init, update);\n }\n\n this.rank(op);\n\n if (shift) {\n react = params;\n params = update;\n }\n\n if (params) this.connect(op, op.parameters(params, react));\n this.touch(op);\n return op;\n}\n\n/**\n * Connect a target operator as a dependent of source operators.\n * If necessary, this method will rerank the target operator and its\n * dependents to ensure propagation proceeds in a topologically sorted order.\n * @param {Operator} target - The target operator.\n * @param {Array} - The source operators that should propagate\n * to the target operator.\n */\nfunction connect (target, sources) {\n const targetRank = target.rank,\n n = sources.length;\n\n for (let i = 0; i < n; ++i) {\n if (targetRank < sources[i].rank) {\n this.rerank(target);\n return;\n }\n }\n}\n\nlet STREAM_ID = 0;\n/**\n * Models an event stream.\n * @constructor\n * @param {function(Object, number): boolean} [filter] - Filter predicate.\n * Events pass through when truthy, events are suppressed when falsy.\n * @param {function(Object): *} [apply] - Applied to input events to produce\n * new event values.\n * @param {function(Object)} [receive] - Event callback function to invoke\n * upon receipt of a new event. Use to override standard event processing.\n */\n\nfunction EventStream(filter, apply, receive) {\n this.id = ++STREAM_ID;\n this.value = null;\n if (receive) this.receive = receive;\n if (filter) this._filter = filter;\n if (apply) this._apply = apply;\n}\n/**\n * Creates a new event stream instance with the provided\n * (optional) filter, apply and receive functions.\n * @param {function(Object, number): boolean} [filter] - Filter predicate.\n * Events pass through when truthy, events are suppressed when falsy.\n * @param {function(Object): *} [apply] - Applied to input events to produce\n * new event values.\n * @see EventStream\n */\n\nfunction stream(filter, apply, receive) {\n return new EventStream(filter, apply, receive);\n}\nEventStream.prototype = {\n _filter: truthy,\n _apply: identity,\n\n targets() {\n return this._targets || (this._targets = UniqueList(id));\n },\n\n consume(_) {\n if (!arguments.length) return !!this._consume;\n this._consume = !!_;\n return this;\n },\n\n receive(evt) {\n if (this._filter(evt)) {\n const val = this.value = this._apply(evt),\n trg = this._targets,\n n = trg ? trg.length : 0;\n\n for (let i = 0; i < n; ++i) trg[i].receive(val);\n\n if (this._consume) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n }\n },\n\n filter(filter) {\n const s = stream(filter);\n this.targets().add(s);\n return s;\n },\n\n apply(apply) {\n const s = stream(null, apply);\n this.targets().add(s);\n return s;\n },\n\n merge() {\n const s = stream();\n this.targets().add(s);\n\n for (let i = 0, n = arguments.length; i < n; ++i) {\n arguments[i].targets().add(s);\n }\n\n return s;\n },\n\n throttle(pause) {\n let t = -1;\n return this.filter(() => {\n const now = Date.now();\n\n if (now - t > pause) {\n t = now;\n return 1;\n } else {\n return 0;\n }\n });\n },\n\n debounce(delay) {\n const s = stream();\n this.targets().add(stream(null, null, debounce(delay, e => {\n const df = e.dataflow;\n s.receive(e);\n if (df && df.run) df.run();\n })));\n return s;\n },\n\n between(a, b) {\n let active = false;\n a.targets().add(stream(null, null, () => active = true));\n b.targets().add(stream(null, null, () => active = false));\n return this.filter(() => active);\n },\n\n detach() {\n // ensures compatibility with operators (#2753)\n // remove references to other streams and filter functions that may\n // be bound to subcontexts that need to be garbage collected.\n this._filter = truthy;\n this._targets = null;\n }\n\n};\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor. The input must\n * support the addEventListener method.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @param {function(object): *} [apply] - Event application function.\n * If provided, this function will be invoked and the result will be\n * used as the downstream event value.\n * @return {EventStream}\n */\n\nfunction events (source, type, filter, apply) {\n const df = this,\n s = stream(filter, apply),\n send = function (e) {\n e.dataflow = df;\n\n try {\n s.receive(e);\n } catch (error) {\n df.error(error);\n } finally {\n df.run();\n }\n };\n\n let sources;\n\n if (typeof source === 'string' && typeof document !== 'undefined') {\n sources = document.querySelectorAll(source);\n } else {\n sources = array(source);\n }\n\n const n = sources.length;\n\n for (let i = 0; i < n; ++i) {\n sources[i].addEventListener(type, send);\n }\n\n return s;\n}\n\nfunction parse(data, format) {\n const locale = this.locale();\n return read(data, format, locale.timeParse, locale.utcParse);\n}\n/**\n * Ingests new data into the dataflow. First parses the data using the\n * vega-loader read method, then pulses a changeset to the target operator.\n * @param {Operator} target - The Operator to target with ingested data,\n * typically a Collect transform instance.\n * @param {*} data - The input data, prior to parsing. For JSON this may\n * be a string or an object. For CSV, TSV, etc should be a string.\n * @param {object} format - The data format description for parsing\n * loaded data. This object is passed to the vega-loader read method.\n * @returns {Dataflow}\n */\n\nfunction ingest(target, data, format) {\n data = this.parse(data, format);\n return this.pulse(target, this.changeset().insert(data));\n}\n/**\n * Request data from an external source, parse it, and return a Promise.\n * @param {string} url - The URL from which to load the data. This string\n * is passed to the vega-loader load method.\n * @param {object} [format] - The data format description for parsing\n * loaded data. This object is passed to the vega-loader read method.\n * @return {Promise} A Promise that resolves upon completion of the request.\n * The resolved object contains the following properties:\n * - data: an array of parsed data (or null upon error)\n * - status: a code for success (0), load fail (-1), or parse fail (-2)\n */\n\nasync function request(url, format) {\n const df = this;\n let status = 0,\n data;\n\n try {\n data = await df.loader().load(url, {\n context: 'dataflow',\n response: responseType(format && format.type)\n });\n\n try {\n data = df.parse(data, format);\n } catch (err) {\n status = -2;\n df.warn('Data ingestion failed', url, err);\n }\n } catch (err) {\n status = -1;\n df.warn('Loading failed', url, err);\n }\n\n return {\n data,\n status\n };\n}\nasync function preload(target, url, format) {\n const df = this,\n pending = df._pending || loadPending(df);\n pending.requests += 1;\n const res = await df.request(url, format);\n df.pulse(target, df.changeset().remove(truthy).insert(res.data || []));\n pending.done();\n return res;\n}\n\nfunction loadPending(df) {\n let accept;\n const pending = new Promise(a => accept = a);\n pending.requests = 0;\n\n pending.done = () => {\n if (--pending.requests === 0) {\n df._pending = null;\n accept(df);\n }\n };\n\n return df._pending = pending;\n}\n\nconst SKIP = {\n skip: true\n};\n/**\n * Perform operator updates in response to events. Applies an\n * update function to compute a new operator value. If the update function\n * returns a {@link ChangeSet}, the operator will be pulsed with those tuple\n * changes. Otherwise, the operator value will be updated to the return value.\n * @param {EventStream|Operator} source - The event source to react to.\n * This argument can be either an EventStream or an Operator.\n * @param {Operator|function(object):Operator} target - The operator to update.\n * This argument can either be an Operator instance or (if the source\n * argument is an EventStream), a function that accepts an event object as\n * input and returns an Operator to target.\n * @param {function(Parameters,Event): *} [update] - Optional update function\n * to compute the new operator value, or a literal value to set. Update\n * functions expect to receive a parameter object and event as arguments.\n * This function can either return a new operator value or (if the source\n * argument is an EventStream) a {@link ChangeSet} instance to pulse\n * the target operator with tuple changes.\n * @param {object} [params] - The update function parameters.\n * @param {object} [options] - Additional options hash. If not overridden,\n * updated operators will be skipped by default.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @return {Dataflow}\n */\n\nfunction on (source, target, update, params, options) {\n const fn = source instanceof Operator ? onOperator : onStream;\n fn(this, source, target, update, params, options);\n return this;\n}\n\nfunction onStream(df, stream, target, update, params, options) {\n const opt = extend({}, options, SKIP);\n let func, op;\n if (!isFunction(target)) target = constant(target);\n\n if (update === undefined) {\n func = e => df.touch(target(e));\n } else if (isFunction(update)) {\n op = new Operator(null, update, params, false);\n\n func = e => {\n op.evaluate(e);\n const t = target(e),\n v = op.value;\n isChangeSet(v) ? df.pulse(t, v, options) : df.update(t, v, opt);\n };\n } else {\n func = e => df.update(target(e), update, opt);\n }\n\n stream.apply(func);\n}\n\nfunction onOperator(df, source, target, update, params, options) {\n if (update === undefined) {\n source.targets().add(target);\n } else {\n const opt = options || {},\n op = new Operator(null, updater(target, update), params, false);\n op.modified(opt.force);\n op.rank = source.rank; // immediately follow source\n\n source.targets().add(op); // add dependency\n\n if (target) {\n op.skip(true); // skip first invocation\n\n op.value = target.value; // initialize value\n\n op.targets().add(target); // chain dependencies\n\n df.connect(target, [op]); // rerank as needed, #1672\n }\n }\n}\n\nfunction updater(target, update) {\n update = isFunction(update) ? update : constant(update);\n return target ? function (_, pulse) {\n const value = update(_, pulse);\n\n if (!target.skip()) {\n target.skip(value !== this.value).value = value;\n }\n\n return value;\n } : update;\n}\n\n/**\n * Assigns a rank to an operator. Ranks are assigned in increasing order\n * by incrementing an internal rank counter.\n * @param {Operator} op - The operator to assign a rank.\n */\n\nfunction rank(op) {\n op.rank = ++this._rank;\n}\n/**\n * Re-ranks an operator and all downstream target dependencies. This\n * is necessary when upstream dependencies of higher rank are added to\n * a target operator.\n * @param {Operator} op - The operator to re-rank.\n */\n\nfunction rerank(op) {\n const queue = [op];\n let cur, list, i;\n\n while (queue.length) {\n this.rank(cur = queue.pop());\n\n if (list = cur._targets) {\n for (i = list.length; --i >= 0;) {\n queue.push(cur = list[i]);\n if (cur === op) error('Cycle detected in dataflow graph.');\n }\n }\n }\n}\n\n/**\n * Sentinel value indicating pulse propagation should stop.\n */\n\nconst StopPropagation = {}; // Pulse visit type flags\n\nconst ADD = 1 << 0,\n REM = 1 << 1,\n MOD = 1 << 2,\n ADD_REM = ADD | REM,\n ADD_MOD = ADD | MOD,\n ALL = ADD | REM | MOD,\n REFLOW = 1 << 3,\n SOURCE = 1 << 4,\n NO_SOURCE = 1 << 5,\n NO_FIELDS = 1 << 6;\n/**\n * A Pulse enables inter-operator communication during a run of the\n * dataflow graph. In addition to the current timestamp, a pulse may also\n * contain a change-set of added, removed or modified data tuples, as well as\n * a pointer to a full backing data source. Tuple change sets may not\n * be fully materialized; for example, to prevent needless array creation\n * a change set may include larger arrays and corresponding filter functions.\n * The pulse provides a {@link visit} method to enable proper and efficient\n * iteration over requested data tuples.\n *\n * In addition, each pulse can track modification flags for data tuple fields.\n * Responsible transform operators should call the {@link modifies} method to\n * indicate changes to data fields. The {@link modified} method enables\n * querying of this modification state.\n *\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The current propagation timestamp.\n * @param {string} [encode] - An optional encoding set name, which is then\n * accessible as Pulse.encode. Operators can respond to (or ignore) this\n * setting as appropriate. This parameter can be used in conjunction with\n * the Encode transform in the vega-encode module.\n */\n\nfunction Pulse(dataflow, stamp, encode) {\n this.dataflow = dataflow;\n this.stamp = stamp == null ? -1 : stamp;\n this.add = [];\n this.rem = [];\n this.mod = [];\n this.fields = null;\n this.encode = encode || null;\n}\n\nfunction materialize(data, filter) {\n const out = [];\n visitArray(data, filter, _ => out.push(_));\n return out;\n}\n\nfunction filter(pulse, flags) {\n const map = {};\n pulse.visit(flags, t => {\n map[tupleid(t)] = 1;\n });\n return t => map[tupleid(t)] ? null : t;\n}\n\nfunction addFilter(a, b) {\n return a ? (t, i) => a(t, i) && b(t, i) : b;\n}\n\nPulse.prototype = {\n /**\n * Sentinel value indicating pulse propagation should stop.\n */\n StopPropagation,\n\n /**\n * Boolean flag indicating ADD (added) tuples.\n */\n ADD,\n\n /**\n * Boolean flag indicating REM (removed) tuples.\n */\n REM,\n\n /**\n * Boolean flag indicating MOD (modified) tuples.\n */\n MOD,\n\n /**\n * Boolean flag indicating ADD (added) and REM (removed) tuples.\n */\n ADD_REM,\n\n /**\n * Boolean flag indicating ADD (added) and MOD (modified) tuples.\n */\n ADD_MOD,\n\n /**\n * Boolean flag indicating ADD, REM and MOD tuples.\n */\n ALL,\n\n /**\n * Boolean flag indicating all tuples in a data source\n * except for the ADD, REM and MOD tuples.\n */\n REFLOW,\n\n /**\n * Boolean flag indicating a 'pass-through' to a\n * backing data source, ignoring ADD, REM and MOD tuples.\n */\n SOURCE,\n\n /**\n * Boolean flag indicating that source data should be\n * suppressed when creating a forked pulse.\n */\n NO_SOURCE,\n\n /**\n * Boolean flag indicating that field modifications should be\n * suppressed when creating a forked pulse.\n */\n NO_FIELDS,\n\n /**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created.\n * @return {Pulse} - The forked pulse instance.\n * @see init\n */\n fork(flags) {\n return new Pulse(this.dataflow).init(this, flags);\n },\n\n /**\n * Creates a copy of this pulse with new materialized array\n * instances for the ADD, REM, MOD, and SOURCE arrays.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse} - The cloned pulse instance.\n * @see init\n */\n clone() {\n const p = this.fork(ALL);\n p.add = p.add.slice();\n p.rem = p.rem.slice();\n p.mod = p.mod.slice();\n if (p.source) p.source = p.source.slice();\n return p.materialize(ALL | SOURCE);\n },\n\n /**\n * Returns a pulse that adds all tuples from a backing source. This is\n * useful for cases where operators are added to a dataflow after an\n * upstream data pipeline has already been processed, ensuring that\n * new operators can observe all tuples within a stream.\n * @return {Pulse} - A pulse instance with all source tuples included\n * in the add array. If the current pulse already has all source\n * tuples in its add array, it is returned directly. If the current\n * pulse does not have a backing source, it is returned directly.\n */\n addAll() {\n let p = this;\n const reuse = !p.source || p.add === p.rem // special case for indexed set (e.g., crossfilter)\n || !p.rem.length && p.source.length === p.add.length;\n\n if (reuse) {\n return p;\n } else {\n p = new Pulse(this.dataflow).init(this);\n p.add = p.source;\n p.rem = []; // new operators can ignore rem #2769\n\n return p;\n }\n },\n\n /**\n * Initialize this pulse based on the values of another pulse. This method\n * is used internally by {@link fork} to initialize a new forked tuple.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {Pulse} src - The source pulse to copy from.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created. By default, source data arrays are copied\n * to the new pulse. Use the NO_SOURCE flag to enforce a null source.\n * @return {Pulse} - Returns this Pulse instance.\n */\n init(src, flags) {\n const p = this;\n p.stamp = src.stamp;\n p.encode = src.encode;\n\n if (src.fields && !(flags & NO_FIELDS)) {\n p.fields = src.fields;\n }\n\n if (flags & ADD) {\n p.addF = src.addF;\n p.add = src.add;\n } else {\n p.addF = null;\n p.add = [];\n }\n\n if (flags & REM) {\n p.remF = src.remF;\n p.rem = src.rem;\n } else {\n p.remF = null;\n p.rem = [];\n }\n\n if (flags & MOD) {\n p.modF = src.modF;\n p.mod = src.mod;\n } else {\n p.modF = null;\n p.mod = [];\n }\n\n if (flags & NO_SOURCE) {\n p.srcF = null;\n p.source = null;\n } else {\n p.srcF = src.srcF;\n p.source = src.source;\n if (src.cleans) p.cleans = src.cleans;\n }\n\n return p;\n },\n\n /**\n * Schedules a function to run after pulse propagation completes.\n * @param {function} func - The function to run.\n */\n runAfter(func) {\n this.dataflow.runAfter(func);\n },\n\n /**\n * Indicates if tuples have been added, removed or modified.\n * @param {number} [flags] - The tuple types (ADD, REM or MOD) to query.\n * Defaults to ALL, returning true if any tuple type has changed.\n * @return {boolean} - Returns true if one or more queried tuple types have\n * changed, false otherwise.\n */\n changed(flags) {\n const f = flags || ALL;\n return f & ADD && this.add.length || f & REM && this.rem.length || f & MOD && this.mod.length;\n },\n\n /**\n * Forces a \"reflow\" of tuple values, such that all tuples in the backing\n * source are added to the MOD set, unless already present in the ADD set.\n * @param {boolean} [fork=false] - If true, returns a forked copy of this\n * pulse, and invokes reflow on that derived pulse.\n * @return {Pulse} - The reflowed pulse instance.\n */\n reflow(fork) {\n if (fork) return this.fork(ALL).reflow();\n const len = this.add.length,\n src = this.source && this.source.length;\n\n if (src && src !== len) {\n this.mod = this.source;\n if (len) this.filter(MOD, filter(this, ADD));\n }\n\n return this;\n },\n\n /**\n * Get/set metadata to pulse requesting garbage collection\n * to reclaim currently unused resources.\n */\n clean(value) {\n if (arguments.length) {\n this.cleans = !!value;\n return this;\n } else {\n return this.cleans;\n }\n },\n\n /**\n * Marks one or more data field names as modified to assist dependency\n * tracking and incremental processing by transform operators.\n * @param {string|Array} _ - The field(s) to mark as modified.\n * @return {Pulse} - This pulse instance.\n */\n modifies(_) {\n const hash = this.fields || (this.fields = {});\n\n if (isArray(_)) {\n _.forEach(f => hash[f] = true);\n } else {\n hash[_] = true;\n }\n\n return this;\n },\n\n /**\n * Checks if one or more data fields have been modified during this pulse\n * propagation timestamp.\n * @param {string|Array} _ - The field(s) to check for modified.\n * @param {boolean} nomod - If true, will check the modified flag even if\n * no mod tuples exist. If false (default), mod tuples must be present.\n * @return {boolean} - Returns true if any of the provided fields has been\n * marked as modified, false otherwise.\n */\n modified(_, nomod) {\n const fields = this.fields;\n return !((nomod || this.mod.length) && fields) ? false : !arguments.length ? !!fields : isArray(_) ? _.some(f => fields[f]) : fields[_];\n },\n\n /**\n * Adds a filter function to one more tuple sets. Filters are applied to\n * backing tuple arrays, to determine the actual set of tuples considered\n * added, removed or modified. They can be used to delay materialization of\n * a tuple set in order to avoid expensive array copies. In addition, the\n * filter functions can serve as value transformers: unlike standard predicate\n * function (which return boolean values), Pulse filters should return the\n * actual tuple value to process. If a tuple set is already filtered, the\n * new filter function will be appended into a conjuntive ('and') query.\n * @param {number} flags - Flags indicating the tuple set(s) to filter.\n * @param {function(*):object} filter - Filter function that will be applied\n * to the tuple set array, and should return a data tuple if the value\n * should be included in the tuple set, and falsy (or null) otherwise.\n * @return {Pulse} - Returns this pulse instance.\n */\n filter(flags, filter) {\n const p = this;\n if (flags & ADD) p.addF = addFilter(p.addF, filter);\n if (flags & REM) p.remF = addFilter(p.remF, filter);\n if (flags & MOD) p.modF = addFilter(p.modF, filter);\n if (flags & SOURCE) p.srcF = addFilter(p.srcF, filter);\n return p;\n },\n\n /**\n * Materialize one or more tuple sets in this pulse. If the tuple set(s) have\n * a registered filter function, it will be applied and the tuple set(s) will\n * be replaced with materialized tuple arrays.\n * @param {number} flags - Flags indicating the tuple set(s) to materialize.\n * @return {Pulse} - Returns this pulse instance.\n */\n materialize(flags) {\n flags = flags || ALL;\n const p = this;\n\n if (flags & ADD && p.addF) {\n p.add = materialize(p.add, p.addF);\n p.addF = null;\n }\n\n if (flags & REM && p.remF) {\n p.rem = materialize(p.rem, p.remF);\n p.remF = null;\n }\n\n if (flags & MOD && p.modF) {\n p.mod = materialize(p.mod, p.modF);\n p.modF = null;\n }\n\n if (flags & SOURCE && p.srcF) {\n p.source = p.source.filter(p.srcF);\n p.srcF = null;\n }\n\n return p;\n },\n\n /**\n * Visit one or more tuple sets in this pulse.\n * @param {number} flags - Flags indicating the tuple set(s) to visit.\n * Legal values are ADD, REM, MOD and SOURCE (if a backing data source\n * has been set).\n * @param {function(object):*} - Visitor function invoked per-tuple.\n * @return {Pulse} - Returns this pulse instance.\n */\n visit(flags, visitor) {\n const p = this,\n v = visitor;\n\n if (flags & SOURCE) {\n visitArray(p.source, p.srcF, v);\n return p;\n }\n\n if (flags & ADD) visitArray(p.add, p.addF, v);\n if (flags & REM) visitArray(p.rem, p.remF, v);\n if (flags & MOD) visitArray(p.mod, p.modF, v);\n const src = p.source;\n\n if (flags & REFLOW && src) {\n const sum = p.add.length + p.mod.length;\n\n if (sum === src.length) ; else if (sum) {\n visitArray(src, filter(p, ADD_MOD), v);\n } else {\n // if no add/rem/mod tuples, visit source\n visitArray(src, p.srcF, v);\n }\n }\n\n return p;\n }\n\n};\n\n/**\n * Represents a set of multiple pulses. Used as input for operators\n * that accept multiple pulses at a time. Contained pulses are\n * accessible via the public \"pulses\" array property. This pulse doe\n * not carry added, removed or modified tuples directly. However,\n * the visit method can be used to traverse all such tuples contained\n * in sub-pulses with a timestamp matching this parent multi-pulse.\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The timestamp.\n * @param {Array} pulses - The sub-pulses for this multi-pulse.\n */\n\nfunction MultiPulse(dataflow, stamp, pulses, encode) {\n const p = this,\n n = pulses.length;\n let c = 0;\n this.dataflow = dataflow;\n this.stamp = stamp;\n this.fields = null;\n this.encode = encode || null;\n this.pulses = pulses;\n\n for (let i = 0; i < n; ++i) {\n const pulse = pulses[i];\n if (pulse.stamp !== stamp) continue;\n\n if (pulse.fields) {\n const hash = p.fields || (p.fields = {});\n\n for (const f in pulse.fields) {\n hash[f] = 1;\n }\n }\n\n if (pulse.changed(p.ADD)) c |= p.ADD;\n if (pulse.changed(p.REM)) c |= p.REM;\n if (pulse.changed(p.MOD)) c |= p.MOD;\n }\n\n this.changes = c;\n}\ninherits(MultiPulse, Pulse, {\n /**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse}\n */\n fork(flags) {\n const p = new Pulse(this.dataflow).init(this, flags & this.NO_FIELDS);\n\n if (flags !== undefined) {\n if (flags & p.ADD) this.visit(p.ADD, t => p.add.push(t));\n if (flags & p.REM) this.visit(p.REM, t => p.rem.push(t));\n if (flags & p.MOD) this.visit(p.MOD, t => p.mod.push(t));\n }\n\n return p;\n },\n\n changed(flags) {\n return this.changes & flags;\n },\n\n modified(_) {\n const p = this,\n fields = p.fields;\n return !(fields && p.changes & p.MOD) ? 0 : isArray(_) ? _.some(f => fields[f]) : fields[_];\n },\n\n filter() {\n error('MultiPulse does not support filtering.');\n },\n\n materialize() {\n error('MultiPulse does not support materialization.');\n },\n\n visit(flags, visitor) {\n const p = this,\n pulses = p.pulses,\n n = pulses.length;\n let i = 0;\n\n if (flags & p.SOURCE) {\n for (; i < n; ++i) {\n pulses[i].visit(flags, visitor);\n }\n } else {\n for (; i < n; ++i) {\n if (pulses[i].stamp === p.stamp) {\n pulses[i].visit(flags, visitor);\n }\n }\n }\n\n return p;\n }\n\n});\n\n/* eslint-disable require-atomic-updates */\n/**\n * Evaluates the dataflow and returns a Promise that resolves when pulse\n * propagation completes. This method will increment the current timestamp\n * and process all updated, pulsed and touched operators. When invoked for\n * the first time, all registered operators will be processed. This method\n * should not be invoked by third-party clients, use {@link runAsync} or\n * {@link run} instead.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode package.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Promise} - A promise that resolves to this dataflow after\n * evaluation completes.\n */\n\nasync function evaluate(encode, prerun, postrun) {\n const df = this,\n async = []; // if the pulse value is set, this is a re-entrant call\n\n if (df._pulse) return reentrant(df); // wait for pending datasets to load\n\n if (df._pending) await df._pending; // invoke prerun function, if provided\n\n if (prerun) await asyncCallback(df, prerun); // exit early if there are no updates\n\n if (!df._touched.length) {\n df.debug('Dataflow invoked, but nothing to do.');\n return df;\n } // increment timestamp clock\n\n\n const stamp = ++df._clock; // set the current pulse\n\n df._pulse = new Pulse(df, stamp, encode); // initialize priority queue, reset touched operators\n\n df._touched.forEach(op => df._enqueue(op, true));\n\n df._touched = UniqueList(id);\n let count = 0,\n op,\n next,\n error;\n\n try {\n while (df._heap.size() > 0) {\n // dequeue operator with highest priority\n op = df._heap.pop(); // re-queue if rank changed\n\n if (op.rank !== op.qrank) {\n df._enqueue(op, true);\n\n continue;\n } // otherwise, evaluate the operator\n\n\n next = op.run(df._getPulse(op, encode));\n\n if (next.then) {\n // await if operator returns a promise directly\n next = await next;\n } else if (next.async) {\n // queue parallel asynchronous execution\n async.push(next.async);\n next = StopPropagation;\n } // propagate evaluation, enqueue dependent operators\n\n\n if (next !== StopPropagation) {\n if (op._targets) op._targets.forEach(op => df._enqueue(op));\n } // increment visit counter\n\n\n ++count;\n }\n } catch (err) {\n df._heap.clear();\n\n error = err;\n } // reset pulse map\n\n\n df._input = {};\n df._pulse = null;\n df.debug(`Pulse ${stamp}: ${count} operators`);\n\n if (error) {\n df._postrun = [];\n df.error(error);\n } // invoke callbacks queued via runAfter\n\n\n if (df._postrun.length) {\n const pr = df._postrun.sort((a, b) => b.priority - a.priority);\n\n df._postrun = [];\n\n for (let i = 0; i < pr.length; ++i) {\n await asyncCallback(df, pr[i].callback);\n }\n } // invoke postrun function, if provided\n\n\n if (postrun) await asyncCallback(df, postrun); // handle non-blocking asynchronous callbacks\n\n if (async.length) {\n Promise.all(async).then(cb => df.runAsync(null, () => {\n cb.forEach(f => {\n try {\n f(df);\n } catch (err) {\n df.error(err);\n }\n });\n }));\n }\n\n return df;\n}\n/**\n * Queues dataflow evaluation to run once any other queued evaluations have\n * completed and returns a Promise that resolves when the queued pulse\n * propagation completes. If provided, a callback function will be invoked\n * immediately before evaluation commences. This method will ensure a\n * separate evaluation is invoked for each time it is called.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode package.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Promise} - A promise that resolves to this dataflow after\n * evaluation completes.\n */\n\nasync function runAsync(encode, prerun, postrun) {\n // await previously queued functions\n while (this._running) await this._running; // run dataflow, manage running promise\n\n\n const clear = () => this._running = null;\n\n (this._running = this.evaluate(encode, prerun, postrun)).then(clear, clear);\n return this._running;\n}\n/**\n * Requests dataflow evaluation and the immediately returns this dataflow\n * instance. If there are pending data loading or other asynchronous\n * operations, the dataflow will evaluate asynchronously after this method\n * has been invoked. To track when dataflow evaluation completes, use the\n * {@link runAsync} method instead. This method will raise an error if\n * invoked while the dataflow is already in the midst of evaluation.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode module.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Dataflow} - This dataflow instance.\n */\n\nfunction run(encode, prerun, postrun) {\n return this._pulse ? reentrant(this) : (this.evaluate(encode, prerun, postrun), this);\n}\n/**\n * Schedules a callback function to be invoked after the current pulse\n * propagation completes. If no propagation is currently occurring,\n * the function is invoked immediately. Callbacks scheduled via runAfter\n * are invoked immediately upon completion of the current cycle, before\n * any request queued via runAsync. This method is primarily intended for\n * internal use. Third-party callers using runAfter to schedule a callback\n * that invokes {@link run} or {@link runAsync} should not use this method,\n * but instead use {@link runAsync} with prerun or postrun arguments.\n * @param {function(Dataflow)} callback - The callback function to run.\n * The callback will be invoked with this Dataflow instance as its\n * sole argument.\n * @param {boolean} enqueue - A boolean flag indicating that the\n * callback should be queued up to run after the next propagation\n * cycle, suppressing immediate invocation when propagation is not\n * currently occurring.\n * @param {number} [priority] - A priority value used to sort registered\n * callbacks to determine execution order. This argument is intended\n * for internal Vega use only.\n */\n\nfunction runAfter(callback, enqueue, priority) {\n if (this._pulse || enqueue) {\n // pulse propagation is currently running, queue to run after\n this._postrun.push({\n priority: priority || 0,\n callback: callback\n });\n } else {\n // pulse propagation already complete, invoke immediately\n try {\n callback(this);\n } catch (err) {\n this.error(err);\n }\n }\n}\n/**\n * Raise an error for re-entrant dataflow evaluation.\n */\n\nfunction reentrant(df) {\n df.error('Dataflow already running. Use runAsync() to chain invocations.');\n return df;\n}\n/**\n * Enqueue an operator into the priority queue for evaluation. The operator\n * will be enqueued if it has no registered pulse for the current cycle, or if\n * the force argument is true. Upon enqueue, this method also sets the\n * operator's qrank to the current rank value.\n * @param {Operator} op - The operator to enqueue.\n * @param {boolean} [force] - A flag indicating if the operator should be\n * forceably added to the queue, even if it has already been previously\n * enqueued during the current pulse propagation. This is useful when the\n * dataflow graph is dynamically modified and the operator rank changes.\n */\n\n\nfunction enqueue(op, force) {\n const q = op.stamp < this._clock;\n if (q) op.stamp = this._clock;\n\n if (q || force) {\n op.qrank = op.rank;\n\n this._heap.push(op);\n }\n}\n/**\n * Provide a correct pulse for evaluating an operator. If the operator has an\n * explicit source operator, we will try to pull the pulse(s) from it.\n * If there is an array of source operators, we build a multi-pulse.\n * Otherwise, we return a current pulse with correct source data.\n * If the pulse is the pulse map has an explicit target set, we use that.\n * Else if the pulse on the upstream source operator is current, we use that.\n * Else we use the pulse from the pulse map, but copy the source tuple array.\n * @param {Operator} op - The operator for which to get an input pulse.\n * @param {string} [encode] - An (optional) encoding set name with which to\n * annotate the returned pulse. See {@link run} for more information.\n */\n\nfunction getPulse(op, encode) {\n const s = op.source,\n stamp = this._clock;\n return s && isArray(s) ? new MultiPulse(this, stamp, s.map(_ => _.pulse), encode) : this._input[op.id] || singlePulse(this._pulse, s && s.pulse);\n}\n\nfunction singlePulse(p, s) {\n if (s && s.stamp === p.stamp) {\n return s;\n }\n\n p = p.fork();\n\n if (s && s !== StopPropagation) {\n p.source = s.source;\n }\n\n return p;\n}\n\nconst NO_OPT = {\n skip: false,\n force: false\n};\n/**\n * Touches an operator, scheduling it to be evaluated. If invoked outside of\n * a pulse propagation, the operator will be evaluated the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the operator\n * will be queued for evaluation if and only if the operator has not yet been\n * evaluated on the current propagation timestamp.\n * @param {Operator} op - The operator to touch.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\n\nfunction touch(op, options) {\n const opt = options || NO_OPT;\n\n if (this._pulse) {\n // if in midst of propagation, add to priority queue\n this._enqueue(op);\n } else {\n // otherwise, queue for next propagation\n this._touched.add(op);\n }\n\n if (opt.skip) op.skip(true);\n return this;\n}\n/**\n * Updates the value of the given operator.\n * @param {Operator} op - The operator to update.\n * @param {*} value - The value to set.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\n\nfunction update(op, value, options) {\n const opt = options || NO_OPT;\n\n if (op.set(value) || opt.force) {\n this.touch(op, opt);\n }\n\n return this;\n}\n/**\n * Pulses an operator with a changeset of tuples. If invoked outside of\n * a pulse propagation, the pulse will be applied the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the pulse\n * will be added to the set of active pulses and will be applied if and\n * only if the target operator has not yet been evaluated on the current\n * propagation timestamp.\n * @param {Operator} op - The operator to pulse.\n * @param {ChangeSet} value - The tuple changeset to apply.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\n\nfunction pulse(op, changeset, options) {\n this.touch(op, options || NO_OPT);\n const p = new Pulse(this, this._clock + (this._pulse ? 0 : 1)),\n t = op.pulse && op.pulse.source || [];\n p.target = op;\n this._input[op.id] = changeset.pulse(p, t);\n return this;\n}\n\nfunction Heap(cmp) {\n let nodes = [];\n return {\n clear: () => nodes = [],\n size: () => nodes.length,\n peek: () => nodes[0],\n push: x => {\n nodes.push(x);\n return siftdown(nodes, 0, nodes.length - 1, cmp);\n },\n pop: () => {\n const last = nodes.pop();\n let item;\n\n if (nodes.length) {\n item = nodes[0];\n nodes[0] = last;\n siftup(nodes, 0, cmp);\n } else {\n item = last;\n }\n\n return item;\n }\n };\n}\n\nfunction siftdown(array, start, idx, cmp) {\n let parent, pidx;\n const item = array[idx];\n\n while (idx > start) {\n pidx = idx - 1 >> 1;\n parent = array[pidx];\n\n if (cmp(item, parent) < 0) {\n array[idx] = parent;\n idx = pidx;\n continue;\n }\n\n break;\n }\n\n return array[idx] = item;\n}\n\nfunction siftup(array, idx, cmp) {\n const start = idx,\n end = array.length,\n item = array[idx];\n let cidx = (idx << 1) + 1,\n ridx;\n\n while (cidx < end) {\n ridx = cidx + 1;\n\n if (ridx < end && cmp(array[cidx], array[ridx]) >= 0) {\n cidx = ridx;\n }\n\n array[idx] = array[cidx];\n idx = cidx;\n cidx = (idx << 1) + 1;\n }\n\n array[idx] = item;\n return siftdown(array, start, idx, cmp);\n}\n\n/**\n * A dataflow graph for reactive processing of data streams.\n * @constructor\n */\n\nfunction Dataflow() {\n this.logger(logger());\n this.logLevel(Error);\n this._clock = 0;\n this._rank = 0;\n this._locale = defaultLocale();\n\n try {\n this._loader = loader();\n } catch (e) {// do nothing if loader module is unavailable\n }\n\n this._touched = UniqueList(id);\n this._input = {};\n this._pulse = null;\n this._heap = Heap((a, b) => a.qrank - b.qrank);\n this._postrun = [];\n}\n\nfunction logMethod(method) {\n return function () {\n return this._log[method].apply(this, arguments);\n };\n}\n\nDataflow.prototype = {\n /**\n * The current timestamp of this dataflow. This value reflects the\n * timestamp of the previous dataflow run. The dataflow is initialized\n * with a stamp value of 0. The initial run of the dataflow will have\n * a timestap of 1, and so on. This value will match the\n * {@link Pulse.stamp} property.\n * @return {number} - The current timestamp value.\n */\n stamp() {\n return this._clock;\n },\n\n /**\n * Gets or sets the loader instance to use for data file loading. A\n * loader object must provide a \"load\" method for loading files and a\n * \"sanitize\" method for checking URL/filename validity. Both methods\n * should accept a URI and options hash as arguments, and return a Promise\n * that resolves to the loaded file contents (load) or a hash containing\n * sanitized URI data with the sanitized url assigned to the \"href\" property\n * (sanitize).\n * @param {object} _ - The loader instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current loader instance. Otherwise returns this Dataflow instance.\n */\n loader(_) {\n if (arguments.length) {\n this._loader = _;\n return this;\n } else {\n return this._loader;\n }\n },\n\n /**\n * Gets or sets the locale instance to use for formatting and parsing\n * string values. The locale object should be provided by the\n * vega-format library, and include methods such as format, timeFormat,\n * utcFormat, timeParse, and utcParse.\n * @param {object} _ - The locale instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current locale instance. Otherwise returns this Dataflow instance.\n */\n locale(_) {\n if (arguments.length) {\n this._locale = _;\n return this;\n } else {\n return this._locale;\n }\n },\n\n /**\n * Get or set the logger instance used to log messages. If no arguments are\n * provided, returns the current logger instance. Otherwise, sets the logger\n * and return this Dataflow instance. Provided loggers must support the full\n * API of logger objects generated by the vega-util logger method. Note that\n * by default the log level of the new logger will be used; use the logLevel\n * method to adjust the log level as needed.\n */\n logger(logger) {\n if (arguments.length) {\n this._log = logger;\n return this;\n } else {\n return this._log;\n }\n },\n\n /**\n * Logs an error message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit error messages.\n */\n error: logMethod('error'),\n\n /**\n * Logs a warning message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit warning messages.\n */\n warn: logMethod('warn'),\n\n /**\n * Logs a information message. By default, logged messages are written to\n * console output. The message will only be logged if the current log level is\n * high enough to permit information messages.\n */\n info: logMethod('info'),\n\n /**\n * Logs a debug message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit debug messages.\n */\n debug: logMethod('debug'),\n\n /**\n * Get or set the current log level. If an argument is provided, it\n * will be used as the new log level.\n * @param {number} [level] - Should be one of None, Warn, Info\n * @return {number} - The current log level.\n */\n logLevel: logMethod('level'),\n\n /**\n * Empty entry threshold for garbage cleaning. Map data structures will\n * perform cleaning once the number of empty entries exceeds this value.\n */\n cleanThreshold: 1e4,\n // OPERATOR REGISTRATION\n add,\n connect,\n rank,\n rerank,\n // OPERATOR UPDATES\n pulse,\n touch,\n update,\n changeset,\n // DATA LOADING\n ingest,\n parse,\n preload,\n request,\n // EVENT HANDLING\n events,\n on,\n // PULSE PROPAGATION\n evaluate,\n run,\n runAsync,\n runAfter,\n _enqueue: enqueue,\n _getPulse: getPulse\n};\n\n/**\n * Abstract class for operators that process data tuples.\n * Subclasses must provide a {@link transform} method for operator processing.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {Operator} [source] - The operator from which to receive pulses.\n */\n\nfunction Transform(init, params) {\n Operator.call(this, init, null, params);\n}\ninherits(Transform, Operator, {\n /**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\n run(pulse) {\n if (pulse.stamp < this.stamp) return pulse.StopPropagation;\n let rv;\n\n if (this.skip()) {\n this.skip(false);\n } else {\n rv = this.evaluate(pulse);\n }\n\n rv = rv || pulse;\n\n if (rv.then) {\n rv = rv.then(_ => this.pulse = _);\n } else if (rv !== pulse.StopPropagation) {\n this.pulse = rv;\n }\n\n return rv;\n },\n\n /**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Marshalls parameter values and then invokes {@link transform}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n value (including undefined) will let the input pulse pass through.\n */\n evaluate(pulse) {\n const params = this.marshall(pulse.stamp),\n out = this.transform(params, pulse);\n params.clear();\n return out;\n },\n\n /**\n * Process incoming pulses.\n * Subclasses should override this method to implement transforms.\n * @param {Parameters} _ - The operator parameter values.\n * @param {Pulse} pulse - The current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n * value (including undefined) will let the input pulse pass through.\n */\n transform() {}\n\n});\n\nconst transforms = {};\nfunction definition(type) {\n const t = transform(type);\n return t && t.Definition || null;\n}\nfunction transform(type) {\n type = type && type.toLowerCase();\n return hasOwnProperty(transforms, type) ? transforms[type] : null;\n}\n\nexport { Dataflow, EventStream, MultiPulse, Operator, Parameters, Pulse, Transform, UniqueList, asyncCallback, changeset, definition, derive, ingest$1 as ingest, isChangeSet, isTuple, rederive, replace, stableCompare, transform, transforms, tupleid };\n","import { ascending, quantileSorted, deviation, quantile, median } from 'd3-array';\n\nfunction* numbers (values, valueof) {\n if (valueof == null) {\n for (let value of values) {\n if (value != null && value !== '' && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n\n for (let value of values) {\n value = valueof(value, ++index, values);\n\n if (value != null && value !== '' && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n\nfunction quantiles (array, p, f) {\n const values = Float64Array.from(numbers(array, f)); // don't depend on return value from typed array sort call\n // protects against undefined sort results in Safari (vega/vega-lite#4964)\n\n values.sort(ascending);\n return p.map(_ => quantileSorted(values, _));\n}\n\nfunction quartiles (array, f) {\n return quantiles(array, [0.25, 0.50, 0.75], f);\n}\n\n// Theory, Practice, and Visualization. Wiley.\n\nfunction estimateBandwidth (array, f) {\n const n = array.length,\n d = deviation(array, f),\n q = quartiles(array, f),\n h = (q[2] - q[0]) / 1.34,\n v = Math.min(d, h) || d || Math.abs(q[0]) || 1;\n return 1.06 * v * Math.pow(n, -0.2);\n}\n\nfunction bin (_) {\n // determine range\n const maxb = _.maxbins || 20,\n base = _.base || 10,\n logb = Math.log(base),\n div = _.divide || [5, 2];\n let min = _.extent[0],\n max = _.extent[1],\n step,\n level,\n minstep,\n v,\n i,\n n;\n const span = _.span || max - min || Math.abs(min) || 1;\n\n if (_.step) {\n // if step size is explicitly given, use that\n step = _.step;\n } else if (_.steps) {\n // if provided, limit choice to acceptable step sizes\n v = span / maxb;\n\n for (i = 0, n = _.steps.length; i < n && _.steps[i] < v; ++i);\n\n step = _.steps[Math.max(0, i - 1)];\n } else {\n // else use span to determine step size\n level = Math.ceil(Math.log(maxb) / logb);\n minstep = _.minstep || 0;\n step = Math.max(minstep, Math.pow(base, Math.round(Math.log(span) / logb) - level)); // increase step size if too many bins\n\n while (Math.ceil(span / step) > maxb) {\n step *= base;\n } // decrease step size if allowed\n\n\n for (i = 0, n = div.length; i < n; ++i) {\n v = step / div[i];\n if (v >= minstep && span / v <= maxb) step = v;\n }\n } // update precision, min and max\n\n\n v = Math.log(step);\n const precision = v >= 0 ? 0 : ~~(-v / logb) + 1,\n eps = Math.pow(base, -precision - 1);\n\n if (_.nice || _.nice === undefined) {\n v = Math.floor(min / step + eps) * step;\n min = min < v ? v - step : v;\n max = Math.ceil(max / step) * step;\n }\n\n return {\n start: min,\n stop: max === min ? min + step : max,\n step: step\n };\n}\n\nvar random = Math.random;\nfunction setRandom(r) {\n random = r;\n}\n\nfunction bootstrapCI (array, samples, alpha, f) {\n if (!array.length) return [undefined, undefined];\n const values = Float64Array.from(numbers(array, f)),\n n = values.length,\n m = samples;\n let a, i, j, mu;\n\n for (j = 0, mu = Array(m); j < m; ++j) {\n for (a = 0, i = 0; i < n; ++i) {\n a += values[~~(random() * n)];\n }\n\n mu[j] = a / n;\n }\n\n mu.sort(ascending);\n return [quantile(mu, alpha / 2), quantile(mu, 1 - alpha / 2)];\n}\n\n// Dot density binning for dot plot construction.\n// Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n// https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\nfunction dotbin (array, step, smooth, f) {\n f = f || (_ => _);\n\n const n = array.length,\n v = new Float64Array(n);\n let i = 0,\n j = 1,\n a = f(array[0]),\n b = a,\n w = a + step,\n x;\n\n for (; j < n; ++j) {\n x = f(array[j]);\n\n if (x >= w) {\n b = (a + b) / 2;\n\n for (; i < j; ++i) v[i] = b;\n\n w = x + step;\n a = x;\n }\n\n b = x;\n }\n\n b = (a + b) / 2;\n\n for (; i < j; ++i) v[i] = b;\n\n return smooth ? smoothing(v, step + step / 4) : v;\n} // perform smoothing to reduce variance\n// swap points between \"adjacent\" stacks\n// Wilkinson defines adjacent as within step/4 units\n\nfunction smoothing(v, thresh) {\n const n = v.length;\n let a = 0,\n b = 1,\n c,\n d; // get left stack\n\n while (v[a] === v[b]) ++b;\n\n while (b < n) {\n // get right stack\n c = b + 1;\n\n while (v[b] === v[c]) ++c; // are stacks adjacent?\n // if so, compare sizes and swap as needed\n\n\n if (v[b] - v[b - 1] < thresh) {\n d = b + (a + c - b - b >> 1);\n\n while (d < b) v[d++] = v[b];\n\n while (d > b) v[d--] = v[a];\n } // update left stack indices\n\n\n a = b;\n b = c;\n }\n\n return v;\n}\n\nfunction lcg (seed) {\n // Random numbers using a Linear Congruential Generator with seed value\n // Uses glibc values from https://en.wikipedia.org/wiki/Linear_congruential_generator\n return function () {\n seed = (1103515245 * seed + 12345) % 2147483647;\n return seed / 2147483647;\n };\n}\n\nfunction integer (min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n\n let a, b, d;\n const dist = {\n min(_) {\n if (arguments.length) {\n a = _ || 0;\n d = b - a;\n return dist;\n } else {\n return a;\n }\n },\n\n max(_) {\n if (arguments.length) {\n b = _ || 0;\n d = b - a;\n return dist;\n } else {\n return b;\n }\n },\n\n sample() {\n return a + Math.floor(d * random());\n },\n\n pdf(x) {\n return x === Math.floor(x) && x >= a && x < b ? 1 / d : 0;\n },\n\n cdf(x) {\n const v = Math.floor(x);\n return v < a ? 0 : v >= b ? 1 : (v - a + 1) / d;\n },\n\n icdf(p) {\n return p >= 0 && p <= 1 ? a - 1 + Math.floor(p * d) : NaN;\n }\n\n };\n return dist.min(min).max(max);\n}\n\nconst SQRT2PI = Math.sqrt(2 * Math.PI);\nconst SQRT2 = Math.SQRT2;\n\nlet nextSample = NaN;\nfunction sampleNormal(mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n let x = 0,\n y = 0,\n rds,\n c;\n\n if (nextSample === nextSample) {\n x = nextSample;\n nextSample = NaN;\n } else {\n do {\n x = random() * 2 - 1;\n y = random() * 2 - 1;\n rds = x * x + y * y;\n } while (rds === 0 || rds > 1);\n\n c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform\n\n x *= c;\n nextSample = y * c;\n }\n\n return mean + x * stdev;\n}\nfunction densityNormal(value, mean, stdev) {\n stdev = stdev == null ? 1 : stdev;\n const z = (value - (mean || 0)) / stdev;\n return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI);\n} // Approximation from West (2009)\n// Better Approximations to Cumulative Normal Functions\n\nfunction cumulativeNormal(value, mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n const z = (value - mean) / stdev,\n Z = Math.abs(z);\n let cd;\n\n if (Z > 37) {\n cd = 0;\n } else {\n const exp = Math.exp(-Z * Z / 2);\n let sum;\n\n if (Z < 7.07106781186547) {\n sum = 3.52624965998911e-02 * Z + 0.700383064443688;\n sum = sum * Z + 6.37396220353165;\n sum = sum * Z + 33.912866078383;\n sum = sum * Z + 112.079291497871;\n sum = sum * Z + 221.213596169931;\n sum = sum * Z + 220.206867912376;\n cd = exp * sum;\n sum = 8.83883476483184e-02 * Z + 1.75566716318264;\n sum = sum * Z + 16.064177579207;\n sum = sum * Z + 86.7807322029461;\n sum = sum * Z + 296.564248779674;\n sum = sum * Z + 637.333633378831;\n sum = sum * Z + 793.826512519948;\n sum = sum * Z + 440.413735824752;\n cd = cd / sum;\n } else {\n sum = Z + 0.65;\n sum = Z + 4 / sum;\n sum = Z + 3 / sum;\n sum = Z + 2 / sum;\n sum = Z + 1 / sum;\n cd = exp / sum / 2.506628274631;\n }\n }\n\n return z > 0 ? 1 - cd : cd;\n} // Approximation of Probit function using inverse error function.\n\nfunction quantileNormal(p, mean, stdev) {\n if (p < 0 || p > 1) return NaN;\n return (mean || 0) + (stdev == null ? 1 : stdev) * SQRT2 * erfinv(2 * p - 1);\n} // Approximate inverse error function. Implementation from \"Approximating\n// the erfinv function\" by Mike Giles, GPU Computing Gems, volume 2, 2010.\n// Ported from Apache Commons Math, http://www.apache.org/licenses/LICENSE-2.0\n\nfunction erfinv(x) {\n // beware that the logarithm argument must be\n // commputed as (1.0 - x) * (1.0 + x),\n // it must NOT be simplified as 1.0 - x * x as this\n // would induce rounding errors near the boundaries +/-1\n let w = -Math.log((1 - x) * (1 + x)),\n p;\n\n if (w < 6.25) {\n w -= 3.125;\n p = -3.6444120640178196996e-21;\n p = -1.685059138182016589e-19 + p * w;\n p = 1.2858480715256400167e-18 + p * w;\n p = 1.115787767802518096e-17 + p * w;\n p = -1.333171662854620906e-16 + p * w;\n p = 2.0972767875968561637e-17 + p * w;\n p = 6.6376381343583238325e-15 + p * w;\n p = -4.0545662729752068639e-14 + p * w;\n p = -8.1519341976054721522e-14 + p * w;\n p = 2.6335093153082322977e-12 + p * w;\n p = -1.2975133253453532498e-11 + p * w;\n p = -5.4154120542946279317e-11 + p * w;\n p = 1.051212273321532285e-09 + p * w;\n p = -4.1126339803469836976e-09 + p * w;\n p = -2.9070369957882005086e-08 + p * w;\n p = 4.2347877827932403518e-07 + p * w;\n p = -1.3654692000834678645e-06 + p * w;\n p = -1.3882523362786468719e-05 + p * w;\n p = 0.0001867342080340571352 + p * w;\n p = -0.00074070253416626697512 + p * w;\n p = -0.0060336708714301490533 + p * w;\n p = 0.24015818242558961693 + p * w;\n p = 1.6536545626831027356 + p * w;\n } else if (w < 16.0) {\n w = Math.sqrt(w) - 3.25;\n p = 2.2137376921775787049e-09;\n p = 9.0756561938885390979e-08 + p * w;\n p = -2.7517406297064545428e-07 + p * w;\n p = 1.8239629214389227755e-08 + p * w;\n p = 1.5027403968909827627e-06 + p * w;\n p = -4.013867526981545969e-06 + p * w;\n p = 2.9234449089955446044e-06 + p * w;\n p = 1.2475304481671778723e-05 + p * w;\n p = -4.7318229009055733981e-05 + p * w;\n p = 6.8284851459573175448e-05 + p * w;\n p = 2.4031110387097893999e-05 + p * w;\n p = -0.0003550375203628474796 + p * w;\n p = 0.00095328937973738049703 + p * w;\n p = -0.0016882755560235047313 + p * w;\n p = 0.0024914420961078508066 + p * w;\n p = -0.0037512085075692412107 + p * w;\n p = 0.005370914553590063617 + p * w;\n p = 1.0052589676941592334 + p * w;\n p = 3.0838856104922207635 + p * w;\n } else if (Number.isFinite(w)) {\n w = Math.sqrt(w) - 5.0;\n p = -2.7109920616438573243e-11;\n p = -2.5556418169965252055e-10 + p * w;\n p = 1.5076572693500548083e-09 + p * w;\n p = -3.7894654401267369937e-09 + p * w;\n p = 7.6157012080783393804e-09 + p * w;\n p = -1.4960026627149240478e-08 + p * w;\n p = 2.9147953450901080826e-08 + p * w;\n p = -6.7711997758452339498e-08 + p * w;\n p = 2.2900482228026654717e-07 + p * w;\n p = -9.9298272942317002539e-07 + p * w;\n p = 4.5260625972231537039e-06 + p * w;\n p = -1.9681778105531670567e-05 + p * w;\n p = 7.5995277030017761139e-05 + p * w;\n p = -0.00021503011930044477347 + p * w;\n p = -0.00013871931833623122026 + p * w;\n p = 1.0103004648645343977 + p * w;\n p = 4.8499064014085844221 + p * w;\n } else {\n p = Infinity;\n }\n\n return p * x;\n}\n\nfunction gaussian (mean, stdev) {\n let mu, sigma;\n const dist = {\n mean(_) {\n if (arguments.length) {\n mu = _ || 0;\n return dist;\n } else {\n return mu;\n }\n },\n\n stdev(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n return dist;\n } else {\n return sigma;\n }\n },\n\n sample: () => sampleNormal(mu, sigma),\n pdf: value => densityNormal(value, mu, sigma),\n cdf: value => cumulativeNormal(value, mu, sigma),\n icdf: p => quantileNormal(p, mu, sigma)\n };\n return dist.mean(mean).stdev(stdev);\n}\n\nfunction kde (support, bandwidth) {\n const kernel = gaussian();\n let n = 0;\n const dist = {\n data(_) {\n if (arguments.length) {\n support = _;\n n = _ ? _.length : 0;\n return dist.bandwidth(bandwidth);\n } else {\n return support;\n }\n },\n\n bandwidth(_) {\n if (!arguments.length) return bandwidth;\n bandwidth = _;\n if (!bandwidth && support) bandwidth = estimateBandwidth(support);\n return dist;\n },\n\n sample() {\n return support[~~(random() * n)] + bandwidth * kernel.sample();\n },\n\n pdf(x) {\n let y = 0,\n i = 0;\n\n for (; i < n; ++i) {\n y += kernel.pdf((x - support[i]) / bandwidth);\n }\n\n return y / bandwidth / n;\n },\n\n cdf(x) {\n let y = 0,\n i = 0;\n\n for (; i < n; ++i) {\n y += kernel.cdf((x - support[i]) / bandwidth);\n }\n\n return y / n;\n },\n\n icdf() {\n throw Error('KDE icdf not supported.');\n }\n\n };\n return dist.data(support);\n}\n\nfunction sampleLogNormal(mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n return Math.exp(mean + sampleNormal() * stdev);\n}\nfunction densityLogNormal(value, mean, stdev) {\n if (value <= 0) return 0;\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n const z = (Math.log(value) - mean) / stdev;\n return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI * value);\n}\nfunction cumulativeLogNormal(value, mean, stdev) {\n return cumulativeNormal(Math.log(value), mean, stdev);\n}\nfunction quantileLogNormal(p, mean, stdev) {\n return Math.exp(quantileNormal(p, mean, stdev));\n}\nfunction lognormal (mean, stdev) {\n let mu, sigma;\n const dist = {\n mean(_) {\n if (arguments.length) {\n mu = _ || 0;\n return dist;\n } else {\n return mu;\n }\n },\n\n stdev(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n return dist;\n } else {\n return sigma;\n }\n },\n\n sample: () => sampleLogNormal(mu, sigma),\n pdf: value => densityLogNormal(value, mu, sigma),\n cdf: value => cumulativeLogNormal(value, mu, sigma),\n icdf: p => quantileLogNormal(p, mu, sigma)\n };\n return dist.mean(mean).stdev(stdev);\n}\n\nfunction mixture (dists, weights) {\n let m = 0,\n w;\n\n function normalize(x) {\n const w = [];\n let sum = 0,\n i;\n\n for (i = 0; i < m; ++i) {\n sum += w[i] = x[i] == null ? 1 : +x[i];\n }\n\n for (i = 0; i < m; ++i) {\n w[i] /= sum;\n }\n\n return w;\n }\n\n const dist = {\n weights(_) {\n if (arguments.length) {\n w = normalize(weights = _ || []);\n return dist;\n }\n\n return weights;\n },\n\n distributions(_) {\n if (arguments.length) {\n if (_) {\n m = _.length;\n dists = _;\n } else {\n m = 0;\n dists = [];\n }\n\n return dist.weights(weights);\n }\n\n return dists;\n },\n\n sample() {\n const r = random();\n let d = dists[m - 1],\n v = w[0],\n i = 0; // first select distribution\n\n for (; i < m - 1; v += w[++i]) {\n if (r < v) {\n d = dists[i];\n break;\n }\n } // then sample from it\n\n\n return d.sample();\n },\n\n pdf(x) {\n let p = 0,\n i = 0;\n\n for (; i < m; ++i) {\n p += w[i] * dists[i].pdf(x);\n }\n\n return p;\n },\n\n cdf(x) {\n let p = 0,\n i = 0;\n\n for (; i < m; ++i) {\n p += w[i] * dists[i].cdf(x);\n }\n\n return p;\n },\n\n icdf() {\n throw Error('Mixture icdf not supported.');\n }\n\n };\n return dist.distributions(dists).weights(weights);\n}\n\nfunction sampleUniform(min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return min + (max - min) * random();\n}\nfunction densityUniform(value, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return value >= min && value <= max ? 1 / (max - min) : 0;\n}\nfunction cumulativeUniform(value, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return value < min ? 0 : value > max ? 1 : (value - min) / (max - min);\n}\nfunction quantileUniform(p, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return p >= 0 && p <= 1 ? min + p * (max - min) : NaN;\n}\nfunction uniform (min, max) {\n let a, b;\n const dist = {\n min(_) {\n if (arguments.length) {\n a = _ || 0;\n return dist;\n } else {\n return a;\n }\n },\n\n max(_) {\n if (arguments.length) {\n b = _ == null ? 1 : _;\n return dist;\n } else {\n return b;\n }\n },\n\n sample: () => sampleUniform(a, b),\n pdf: value => densityUniform(value, a, b),\n cdf: value => cumulativeUniform(value, a, b),\n icdf: p => quantileUniform(p, a, b)\n };\n\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return dist.min(min).max(max);\n}\n\n// Ordinary Least Squares\nfunction ols (uX, uY, uXY, uX2) {\n const delta = uX2 - uX * uX,\n slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta,\n intercept = uY - slope * uX;\n return [intercept, slope];\n}\n\nfunction points(data, x, y, sort) {\n data = data.filter(d => {\n let u = x(d),\n v = y(d);\n return u != null && (u = +u) >= u && v != null && (v = +v) >= v;\n });\n\n if (sort) {\n data.sort((a, b) => x(a) - x(b));\n }\n\n const n = data.length,\n X = new Float64Array(n),\n Y = new Float64Array(n); // extract values, calculate means\n\n let i = 0,\n ux = 0,\n uy = 0,\n xv,\n yv,\n d;\n\n for (d of data) {\n X[i] = xv = +x(d);\n Y[i] = yv = +y(d);\n ++i;\n ux += (xv - ux) / i;\n uy += (yv - uy) / i;\n } // mean center the data\n\n\n for (i = 0; i < n; ++i) {\n X[i] -= ux;\n Y[i] -= uy;\n }\n\n return [X, Y, ux, uy];\n}\nfunction visitPoints(data, x, y, callback) {\n let i = -1,\n u,\n v;\n\n for (const d of data) {\n u = x(d);\n v = y(d);\n\n if (u != null && (u = +u) >= u && v != null && (v = +v) >= v) {\n callback(u, v, ++i);\n }\n }\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction rSquared (data, x, y, uY, predict) {\n let SSE = 0,\n SST = 0;\n visitPoints(data, x, y, (dx, dy) => {\n const sse = dy - predict(dx),\n sst = dy - uY;\n SSE += sse * sse;\n SST += sst * sst;\n });\n return 1 - SSE / SST;\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction linear (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] + coef[1] * x;\n\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction log (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n dx = Math.log(dx);\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] + coef[1] * Math.log(x);\n\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n\nfunction exp (data, x, y) {\n // eslint-disable-next-line no-unused-vars\n const [xv, yv, ux, uy] = points(data, x, y);\n let YL = 0,\n XY = 0,\n XYL = 0,\n X2Y = 0,\n n = 0,\n dx,\n ly,\n xy;\n visitPoints(data, x, y, (_, dy) => {\n dx = xv[n++];\n ly = Math.log(dy);\n xy = dx * dy;\n YL += (dy * ly - YL) / n;\n XY += (xy - XY) / n;\n XYL += (xy * ly - XYL) / n;\n X2Y += (dx * xy - X2Y) / n;\n });\n\n const [c0, c1] = ols(XY / uy, YL / uy, XYL / uy, X2Y / uy),\n predict = x => Math.exp(c0 + c1 * (x - ux));\n\n return {\n coef: [Math.exp(c0 - c1 * ux), c1],\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction pow (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n YS = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n const lx = Math.log(dx),\n ly = Math.log(dy);\n ++n;\n X += (lx - X) / n;\n Y += (ly - Y) / n;\n XY += (lx * ly - XY) / n;\n X2 += (lx * lx - X2) / n;\n YS += (dy - YS) / n;\n });\n\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] * Math.pow(x, coef[1]);\n\n coef[0] = Math.exp(coef[0]);\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, YS, predict)\n };\n}\n\nfunction quad (data, x, y) {\n const [xv, yv, ux, uy] = points(data, x, y),\n n = xv.length;\n let X2 = 0,\n X3 = 0,\n X4 = 0,\n XY = 0,\n X2Y = 0,\n i,\n dx,\n dy,\n x2;\n\n for (i = 0; i < n;) {\n dx = xv[i];\n dy = yv[i++];\n x2 = dx * dx;\n X2 += (x2 - X2) / i;\n X3 += (x2 * dx - X3) / i;\n X4 += (x2 * x2 - X4) / i;\n XY += (dx * dy - XY) / i;\n X2Y += (x2 * dy - X2Y) / i;\n }\n\n const X2X2 = X4 - X2 * X2,\n d = X2 * X2X2 - X3 * X3,\n a = (X2Y * X2 - XY * X3) / d,\n b = (XY * X2X2 - X2Y * X3) / d,\n c = -a * X2,\n predict = x => {\n x = x - ux;\n return a * x * x + b * x + c + uy;\n }; // transform coefficients back from mean-centered space\n\n\n return {\n coef: [c - b * ux + a * ux * ux + uy, b - 2 * a * ux, a],\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n// ... which was adapted from regression-js by Tom Alexander\n// Source: https://github.com/Tom-Alexander/regression-js/blob/master/src/regression.js#L246\n// License: https://github.com/Tom-Alexander/regression-js/blob/master/LICENSE\n\nfunction poly (data, x, y, order) {\n // use more efficient methods for lower orders\n if (order === 1) return linear(data, x, y);\n if (order === 2) return quad(data, x, y);\n const [xv, yv, ux, uy] = points(data, x, y),\n n = xv.length,\n lhs = [],\n rhs = [],\n k = order + 1;\n let i, j, l, v, c;\n\n for (i = 0; i < k; ++i) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i) * yv[l];\n }\n\n lhs.push(v);\n c = new Float64Array(k);\n\n for (j = 0; j < k; ++j) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i + j);\n }\n\n c[j] = v;\n }\n\n rhs.push(c);\n }\n\n rhs.push(lhs);\n\n const coef = gaussianElimination(rhs),\n predict = x => {\n x -= ux;\n let y = uy + coef[0] + coef[1] * x + coef[2] * x * x;\n\n for (i = 3; i < k; ++i) y += coef[i] * Math.pow(x, i);\n\n return y;\n };\n\n return {\n coef: uncenter(k, coef, -ux, uy),\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\nfunction uncenter(k, a, x, y) {\n const z = Array(k);\n let i, j, v, c; // initialize to zero\n\n for (i = 0; i < k; ++i) z[i] = 0; // polynomial expansion\n\n\n for (i = k - 1; i >= 0; --i) {\n v = a[i];\n c = 1;\n z[i] += v;\n\n for (j = 1; j <= i; ++j) {\n c *= (i + 1 - j) / j; // binomial coefficent\n\n z[i - j] += v * Math.pow(x, j) * c;\n }\n } // bias term\n\n\n z[0] += y;\n return z;\n} // Given an array for a two-dimensional matrix and the polynomial order,\n// solve A * x = b using Gaussian elimination.\n\n\nfunction gaussianElimination(matrix) {\n const n = matrix.length - 1,\n coef = [];\n let i, j, k, r, t;\n\n for (i = 0; i < n; ++i) {\n r = i; // max row\n\n for (j = i + 1; j < n; ++j) {\n if (Math.abs(matrix[i][j]) > Math.abs(matrix[i][r])) {\n r = j;\n }\n }\n\n for (k = i; k < n + 1; ++k) {\n t = matrix[k][i];\n matrix[k][i] = matrix[k][r];\n matrix[k][r] = t;\n }\n\n for (j = i + 1; j < n; ++j) {\n for (k = n; k >= i; k--) {\n matrix[k][j] -= matrix[k][i] * matrix[i][j] / matrix[i][i];\n }\n }\n }\n\n for (j = n - 1; j >= 0; --j) {\n t = 0;\n\n for (k = j + 1; k < n; ++k) {\n t += matrix[k][j] * coef[k];\n }\n\n coef[j] = (matrix[n][j] - t) / matrix[j][j];\n }\n\n return coef;\n}\n\nconst maxiters = 2,\n epsilon = 1e-12; // Adapted from science.js by Jason Davies\n// Source: https://github.com/jasondavies/science.js/blob/master/src/stats/loess.js\n// License: https://github.com/jasondavies/science.js/blob/master/LICENSE\n\nfunction loess (data, x, y, bandwidth) {\n const [xv, yv, ux, uy] = points(data, x, y, true),\n n = xv.length,\n bw = Math.max(2, ~~(bandwidth * n)),\n // # nearest neighbors\n yhat = new Float64Array(n),\n residuals = new Float64Array(n),\n robustWeights = new Float64Array(n).fill(1);\n\n for (let iter = -1; ++iter <= maxiters;) {\n const interval = [0, bw - 1];\n\n for (let i = 0; i < n; ++i) {\n const dx = xv[i],\n i0 = interval[0],\n i1 = interval[1],\n edge = dx - xv[i0] > xv[i1] - dx ? i0 : i1;\n let W = 0,\n X = 0,\n Y = 0,\n XY = 0,\n X2 = 0;\n const denom = 1 / Math.abs(xv[edge] - dx || 1); // avoid singularity!\n\n for (let k = i0; k <= i1; ++k) {\n const xk = xv[k],\n yk = yv[k],\n w = tricube(Math.abs(dx - xk) * denom) * robustWeights[k],\n xkw = xk * w;\n W += w;\n X += xkw;\n Y += yk * w;\n XY += yk * xkw;\n X2 += xk * xkw;\n } // linear regression fit\n\n\n const [a, b] = ols(X / W, Y / W, XY / W, X2 / W);\n yhat[i] = a + b * dx;\n residuals[i] = Math.abs(yv[i] - yhat[i]);\n updateInterval(xv, i + 1, interval);\n }\n\n if (iter === maxiters) {\n break;\n }\n\n const medianResidual = median(residuals);\n if (Math.abs(medianResidual) < epsilon) break;\n\n for (let i = 0, arg, w; i < n; ++i) {\n arg = residuals[i] / (6 * medianResidual); // default to epsilon (rather than zero) for large deviations\n // keeping weights tiny but non-zero prevents singularites\n\n robustWeights[i] = arg >= 1 ? epsilon : (w = 1 - arg * arg) * w;\n }\n }\n\n return output(xv, yhat, ux, uy);\n} // weighting kernel for local regression\n\nfunction tricube(x) {\n return (x = 1 - x * x * x) * x * x;\n} // advance sliding window interval of nearest neighbors\n\n\nfunction updateInterval(xv, i, interval) {\n const val = xv[i];\n let left = interval[0],\n right = interval[1] + 1;\n if (right >= xv.length) return; // step right if distance to new right edge is <= distance to old left edge\n // step when distance is equal to ensure movement over duplicate x values\n\n while (i > left && xv[right] - val <= val - xv[left]) {\n interval[0] = ++left;\n interval[1] = right;\n ++right;\n }\n} // generate smoothed output points\n// average points with repeated x values\n\n\nfunction output(xv, yhat, ux, uy) {\n const n = xv.length,\n out = [];\n let i = 0,\n cnt = 0,\n prev = [],\n v;\n\n for (; i < n; ++i) {\n v = xv[i] + ux;\n\n if (prev[0] === v) {\n // average output values via online update\n prev[1] += (yhat[i] - prev[1]) / ++cnt;\n } else {\n // add new output point\n cnt = 0;\n prev[1] += uy;\n prev = [v, yhat[i]];\n out.push(prev);\n }\n }\n\n prev[1] += uy;\n return out;\n}\n\n// subdivide up to accuracy of 0.1 degrees\nconst MIN_RADIANS = 0.1 * Math.PI / 180; // Adaptively sample an interpolated function over a domain extent\n\nfunction sampleCurve (f, extent, minSteps, maxSteps) {\n minSteps = minSteps || 25;\n maxSteps = Math.max(minSteps, maxSteps || 200);\n\n const point = x => [x, f(x)],\n minX = extent[0],\n maxX = extent[1],\n span = maxX - minX,\n stop = span / maxSteps,\n prev = [point(minX)],\n next = [];\n\n if (minSteps === maxSteps) {\n // no adaptation, sample uniform grid directly and return\n for (let i = 1; i < maxSteps; ++i) {\n prev.push(point(minX + i / minSteps * span));\n }\n\n prev.push(point(maxX));\n return prev;\n } else {\n // sample minimum points on uniform grid\n // then move on to perform adaptive refinement\n next.push(point(maxX));\n\n for (let i = minSteps; --i > 0;) {\n next.push(point(minX + i / minSteps * span));\n }\n }\n\n let p0 = prev[0],\n p1 = next[next.length - 1];\n\n while (p1) {\n // midpoint for potential curve subdivision\n const pm = point((p0[0] + p1[0]) / 2);\n\n if (pm[0] - p0[0] >= stop && angleDelta(p0, pm, p1) > MIN_RADIANS) {\n // maximum resolution has not yet been met, and\n // subdivision midpoint sufficiently different from endpoint\n // save subdivision, push midpoint onto the visitation stack\n next.push(pm);\n } else {\n // subdivision midpoint sufficiently similar to endpoint\n // skip subdivision, store endpoint, move to next point on the stack\n p0 = p1;\n prev.push(p1);\n next.pop();\n }\n\n p1 = next[next.length - 1];\n }\n\n return prev;\n}\n\nfunction angleDelta(p, q, r) {\n const a0 = Math.atan2(r[1] - p[1], r[0] - p[0]),\n a1 = Math.atan2(q[1] - p[1], q[0] - p[0]);\n return Math.abs(a0 - a1);\n}\n\nexport { estimateBandwidth as bandwidthNRD, bin, bootstrapCI, cumulativeLogNormal, cumulativeNormal, cumulativeUniform, densityLogNormal, densityNormal, densityUniform, dotbin, quantileLogNormal, quantileNormal, quantileUniform, quantiles, quartiles, random, integer as randomInteger, kde as randomKDE, lcg as randomLCG, lognormal as randomLogNormal, mixture as randomMixture, gaussian as randomNormal, uniform as randomUniform, exp as regressionExp, linear as regressionLinear, loess as regressionLoess, log as regressionLog, poly as regressionPoly, pow as regressionPow, quad as regressionQuad, sampleCurve, sampleLogNormal, sampleNormal, sampleUniform, setRandom };\n","import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n const v = variance(values, valueof);\n return v ? Math.sqrt(v) : v;\n}\n","export default function variance(values, valueof) {\n let count = 0;\n let delta;\n let mean = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n }\n if (count > 1) return sum / (count - 1);\n}\n","import { extend, identity, field, hasOwnProperty, extentIndex, inherits, array, accessorName, error, accessorFields, accessor, toNumber, merge, compare, truthy, extent, span, fastmap, isArray, key, ascending, peek, zero, constant } from 'vega-util';\nimport { tupleid, Transform, replace, ingest, stableCompare, Operator, derive, rederive } from 'vega-dataflow';\nimport { quartiles, bootstrapCI, bin, randomKDE, randomMixture, randomNormal, randomLogNormal, randomUniform, sampleCurve, dotbin, quantiles, random } from 'vega-statistics';\nimport { median, mean, min, max, range, bisector } from 'd3-array';\nimport { TIME_UNITS, utcInterval, timeInterval, timeBin, timeUnits, utcFloor, timeFloor } from 'vega-time';\n\nfunction multikey(f) {\n return x => {\n const n = f.length;\n let i = 1,\n k = String(f[0](x));\n\n for (; i < n; ++i) {\n k += '|' + f[i](x);\n }\n\n return k;\n };\n}\nfunction groupkey(fields) {\n return !fields || !fields.length ? function () {\n return '';\n } : fields.length === 1 ? fields[0] : multikey(fields);\n}\n\nfunction measureName(op, field, as) {\n return as || op + (!field ? '' : '_' + field);\n}\n\nconst noop = () => {};\n\nconst base_op = {\n init: noop,\n add: noop,\n rem: noop,\n idx: 0\n};\nconst AggregateOps = {\n values: {\n init: m => m.cell.store = true,\n value: m => m.cell.data.values(),\n idx: -1\n },\n count: {\n value: m => m.cell.num\n },\n __count__: {\n value: m => m.missing + m.valid\n },\n missing: {\n value: m => m.missing\n },\n valid: {\n value: m => m.valid\n },\n sum: {\n init: m => m.sum = 0,\n value: m => m.sum,\n add: (m, v) => m.sum += +v,\n rem: (m, v) => m.sum -= v\n },\n product: {\n init: m => m.product = 1,\n value: m => m.valid ? m.product : undefined,\n add: (m, v) => m.product *= v,\n rem: (m, v) => m.product /= v\n },\n mean: {\n init: m => m.mean = 0,\n value: m => m.valid ? m.mean : undefined,\n add: (m, v) => (m.mean_d = v - m.mean, m.mean += m.mean_d / m.valid),\n rem: (m, v) => (m.mean_d = v - m.mean, m.mean -= m.valid ? m.mean_d / m.valid : m.mean)\n },\n average: {\n value: m => m.valid ? m.mean : undefined,\n req: ['mean'],\n idx: 1\n },\n variance: {\n init: m => m.dev = 0,\n value: m => m.valid > 1 ? m.dev / (m.valid - 1) : undefined,\n add: (m, v) => m.dev += m.mean_d * (v - m.mean),\n rem: (m, v) => m.dev -= m.mean_d * (v - m.mean),\n req: ['mean'],\n idx: 1\n },\n variancep: {\n value: m => m.valid > 1 ? m.dev / m.valid : undefined,\n req: ['variance'],\n idx: 2\n },\n stdev: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / (m.valid - 1)) : undefined,\n req: ['variance'],\n idx: 2\n },\n stdevp: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / m.valid) : undefined,\n req: ['variance'],\n idx: 2\n },\n stderr: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / (m.valid * (m.valid - 1))) : undefined,\n req: ['variance'],\n idx: 2\n },\n distinct: {\n value: m => m.cell.data.distinct(m.get),\n req: ['values'],\n idx: 3\n },\n ci0: {\n value: m => m.cell.data.ci0(m.get),\n req: ['values'],\n idx: 3\n },\n ci1: {\n value: m => m.cell.data.ci1(m.get),\n req: ['values'],\n idx: 3\n },\n median: {\n value: m => m.cell.data.q2(m.get),\n req: ['values'],\n idx: 3\n },\n q1: {\n value: m => m.cell.data.q1(m.get),\n req: ['values'],\n idx: 3\n },\n q3: {\n value: m => m.cell.data.q3(m.get),\n req: ['values'],\n idx: 3\n },\n min: {\n init: m => m.min = undefined,\n value: m => m.min = Number.isNaN(m.min) ? m.cell.data.min(m.get) : m.min,\n add: (m, v) => {\n if (v < m.min || m.min === undefined) m.min = v;\n },\n rem: (m, v) => {\n if (v <= m.min) m.min = NaN;\n },\n req: ['values'],\n idx: 4\n },\n max: {\n init: m => m.max = undefined,\n value: m => m.max = Number.isNaN(m.max) ? m.cell.data.max(m.get) : m.max,\n add: (m, v) => {\n if (v > m.max || m.max === undefined) m.max = v;\n },\n rem: (m, v) => {\n if (v >= m.max) m.max = NaN;\n },\n req: ['values'],\n idx: 4\n },\n argmin: {\n init: m => m.argmin = undefined,\n value: m => m.argmin || m.cell.data.argmin(m.get),\n add: (m, v, t) => {\n if (v < m.min) m.argmin = t;\n },\n rem: (m, v) => {\n if (v <= m.min) m.argmin = undefined;\n },\n req: ['min', 'values'],\n idx: 3\n },\n argmax: {\n init: m => m.argmax = undefined,\n value: m => m.argmax || m.cell.data.argmax(m.get),\n add: (m, v, t) => {\n if (v > m.max) m.argmax = t;\n },\n rem: (m, v) => {\n if (v >= m.max) m.argmax = undefined;\n },\n req: ['max', 'values'],\n idx: 3\n }\n};\nconst ValidAggregateOps = Object.keys(AggregateOps);\n\nfunction measure(key, value) {\n return out => extend({\n name: key,\n out: out || key\n }, base_op, value);\n}\n\nValidAggregateOps.forEach(key => {\n AggregateOps[key] = measure(key, AggregateOps[key]);\n});\nfunction createMeasure(op, name) {\n return AggregateOps[op](name);\n}\n\nfunction compareIndex(a, b) {\n return a.idx - b.idx;\n}\n\nfunction resolve(agg) {\n const map = {};\n agg.forEach(a => map[a.name] = a);\n\n const getreqs = a => {\n if (!a.req) return;\n a.req.forEach(key => {\n if (!map[key]) getreqs(map[key] = AggregateOps[key]());\n });\n };\n\n agg.forEach(getreqs);\n return Object.values(map).sort(compareIndex);\n}\n\nfunction init() {\n this.valid = 0;\n this.missing = 0;\n\n this._ops.forEach(op => op.init(this));\n}\n\nfunction add(v, t) {\n if (v == null || v === '') {\n ++this.missing;\n return;\n }\n\n if (v !== v) return;\n ++this.valid;\n\n this._ops.forEach(op => op.add(this, v, t));\n}\n\nfunction rem(v, t) {\n if (v == null || v === '') {\n --this.missing;\n return;\n }\n\n if (v !== v) return;\n --this.valid;\n\n this._ops.forEach(op => op.rem(this, v, t));\n}\n\nfunction set(t) {\n this._out.forEach(op => t[op.out] = op.value(this));\n\n return t;\n}\n\nfunction compileMeasures(agg, field) {\n const get = field || identity,\n ops = resolve(agg),\n out = agg.slice().sort(compareIndex);\n\n function ctr(cell) {\n this._ops = ops;\n this._out = out;\n this.cell = cell;\n this.init();\n }\n\n ctr.prototype.init = init;\n ctr.prototype.add = add;\n ctr.prototype.rem = rem;\n ctr.prototype.set = set;\n ctr.prototype.get = get;\n ctr.fields = agg.map(op => op.out);\n return ctr;\n}\n\nfunction TupleStore(key) {\n this._key = key ? field(key) : tupleid;\n this.reset();\n}\nconst prototype$1 = TupleStore.prototype;\n\nprototype$1.reset = function () {\n this._add = [];\n this._rem = [];\n this._ext = null;\n this._get = null;\n this._q = null;\n};\n\nprototype$1.add = function (v) {\n this._add.push(v);\n};\n\nprototype$1.rem = function (v) {\n this._rem.push(v);\n};\n\nprototype$1.values = function () {\n this._get = null;\n if (this._rem.length === 0) return this._add;\n const a = this._add,\n r = this._rem,\n k = this._key,\n n = a.length,\n m = r.length,\n x = Array(n - m),\n map = {};\n let i, j, v; // use unique key field to clear removed values\n\n for (i = 0; i < m; ++i) {\n map[k(r[i])] = 1;\n }\n\n for (i = 0, j = 0; i < n; ++i) {\n if (map[k(v = a[i])]) {\n map[k(v)] = 0;\n } else {\n x[j++] = v;\n }\n }\n\n this._rem = [];\n return this._add = x;\n}; // memoizing statistics methods\n\n\nprototype$1.distinct = function (get) {\n const v = this.values(),\n map = {};\n let n = v.length,\n count = 0,\n s;\n\n while (--n >= 0) {\n s = get(v[n]) + '';\n\n if (!hasOwnProperty(map, s)) {\n map[s] = 1;\n ++count;\n }\n }\n\n return count;\n};\n\nprototype$1.extent = function (get) {\n if (this._get !== get || !this._ext) {\n const v = this.values(),\n i = extentIndex(v, get);\n this._ext = [v[i[0]], v[i[1]]];\n this._get = get;\n }\n\n return this._ext;\n};\n\nprototype$1.argmin = function (get) {\n return this.extent(get)[0] || {};\n};\n\nprototype$1.argmax = function (get) {\n return this.extent(get)[1] || {};\n};\n\nprototype$1.min = function (get) {\n const m = this.extent(get)[0];\n return m != null ? get(m) : undefined;\n};\n\nprototype$1.max = function (get) {\n const m = this.extent(get)[1];\n return m != null ? get(m) : undefined;\n};\n\nprototype$1.quartile = function (get) {\n if (this._get !== get || !this._q) {\n this._q = quartiles(this.values(), get);\n this._get = get;\n }\n\n return this._q;\n};\n\nprototype$1.q1 = function (get) {\n return this.quartile(get)[0];\n};\n\nprototype$1.q2 = function (get) {\n return this.quartile(get)[1];\n};\n\nprototype$1.q3 = function (get) {\n return this.quartile(get)[2];\n};\n\nprototype$1.ci = function (get) {\n if (this._get !== get || !this._ci) {\n this._ci = bootstrapCI(this.values(), 1000, 0.05, get);\n this._get = get;\n }\n\n return this._ci;\n};\n\nprototype$1.ci0 = function (get) {\n return this.ci(get)[0];\n};\n\nprototype$1.ci1 = function (get) {\n return this.ci(get)[1];\n};\n\n/**\n * Group-by aggregation operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {Array} [params.fields] - An array of accessors to aggregate.\n * @param {Array} [params.ops] - An array of strings indicating aggregation operations.\n * @param {Array} [params.as] - An array of output field names for aggregated values.\n * @param {boolean} [params.cross=false] - A flag indicating that the full\n * cross-product of groupby values should be generated, including empty cells.\n * If true, the drop parameter is ignored and empty cells are retained.\n * @param {boolean} [params.drop=true] - A flag indicating if empty cells should be removed.\n */\n\nfunction Aggregate(params) {\n Transform.call(this, null, params);\n this._adds = []; // array of added output tuples\n\n this._mods = []; // array of modified output tuples\n\n this._alen = 0; // number of active added tuples\n\n this._mlen = 0; // number of active modified tuples\n\n this._drop = true; // should empty aggregation cells be removed\n\n this._cross = false; // produce full cross-product of group-by values\n\n this._dims = []; // group-by dimension accessors\n\n this._dnames = []; // group-by dimension names\n\n this._measures = []; // collection of aggregation monoids\n\n this._countOnly = false; // flag indicating only count aggregation\n\n this._counts = null; // collection of count fields\n\n this._prev = null; // previous aggregation cells\n\n this._inputs = null; // array of dependent input tuple field names\n\n this._outputs = null; // array of output tuple field names\n}\nAggregate.Definition = {\n 'type': 'Aggregate',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidAggregateOps\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'drop',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'cross',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(Aggregate, Transform, {\n transform(_, pulse) {\n const aggr = this,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n mod = _.modified();\n\n aggr.stamp = out.stamp;\n\n if (aggr.value && (mod || pulse.modified(aggr._inputs, true))) {\n aggr._prev = aggr.value;\n aggr.value = mod ? aggr.init(_) : {};\n pulse.visit(pulse.SOURCE, t => aggr.add(t));\n } else {\n aggr.value = aggr.value || aggr.init(_);\n pulse.visit(pulse.REM, t => aggr.rem(t));\n pulse.visit(pulse.ADD, t => aggr.add(t));\n } // Indicate output fields and return aggregate tuples.\n\n\n out.modifies(aggr._outputs); // Should empty cells be dropped?\n\n aggr._drop = _.drop !== false; // If domain cross-product requested, generate empty cells as needed\n // and ensure that empty cells are not dropped\n\n if (_.cross && aggr._dims.length > 1) {\n aggr._drop = false;\n aggr.cross();\n }\n\n if (pulse.clean() && aggr._drop) {\n out.clean(true).runAfter(() => this.clean());\n }\n\n return aggr.changes(out);\n },\n\n cross() {\n const aggr = this,\n curr = aggr.value,\n dims = aggr._dnames,\n vals = dims.map(() => ({})),\n n = dims.length; // collect all group-by domain values\n\n function collect(cells) {\n let key, i, t, v;\n\n for (key in cells) {\n t = cells[key].tuple;\n\n for (i = 0; i < n; ++i) {\n vals[i][v = t[dims[i]]] = v;\n }\n }\n }\n\n collect(aggr._prev);\n collect(curr); // iterate over key cross-product, create cells as needed\n\n function generate(base, tuple, index) {\n const name = dims[index],\n v = vals[index++];\n\n for (const k in v) {\n const key = base ? base + '|' + k : k;\n tuple[name] = v[k];\n if (index < n) generate(key, tuple, index);else if (!curr[key]) aggr.cell(key, tuple);\n }\n }\n\n generate('', {}, 0);\n },\n\n init(_) {\n // initialize input and output fields\n const inputs = this._inputs = [],\n outputs = this._outputs = [],\n inputMap = {};\n\n function inputVisit(get) {\n const fields = array(accessorFields(get)),\n n = fields.length;\n let i = 0,\n f;\n\n for (; i < n; ++i) {\n if (!inputMap[f = fields[i]]) {\n inputMap[f] = 1;\n inputs.push(f);\n }\n }\n } // initialize group-by dimensions\n\n\n this._dims = array(_.groupby);\n this._dnames = this._dims.map(d => {\n const dname = accessorName(d);\n inputVisit(d);\n outputs.push(dname);\n return dname;\n });\n this.cellkey = _.key ? _.key : groupkey(this._dims); // initialize aggregate measures\n\n this._countOnly = true;\n this._counts = [];\n this._measures = [];\n const fields = _.fields || [null],\n ops = _.ops || ['count'],\n as = _.as || [],\n n = fields.length,\n map = {};\n let field, op, m, mname, outname, i;\n\n if (n !== ops.length) {\n error('Unmatched number of fields and aggregate ops.');\n }\n\n for (i = 0; i < n; ++i) {\n field = fields[i];\n op = ops[i];\n\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n\n mname = accessorName(field);\n outname = measureName(op, mname, as[i]);\n outputs.push(outname);\n\n if (op === 'count') {\n this._counts.push(outname);\n\n continue;\n }\n\n m = map[mname];\n\n if (!m) {\n inputVisit(field);\n m = map[mname] = [];\n m.field = field;\n\n this._measures.push(m);\n }\n\n if (op !== 'count') this._countOnly = false;\n m.push(createMeasure(op, outname));\n }\n\n this._measures = this._measures.map(m => compileMeasures(m, m.field));\n return {}; // aggregation cells (this.value)\n },\n\n // -- Cell Management -----\n cellkey: groupkey(),\n\n cell(key, t) {\n let cell = this.value[key];\n\n if (!cell) {\n cell = this.value[key] = this.newcell(key, t);\n this._adds[this._alen++] = cell;\n } else if (cell.num === 0 && this._drop && cell.stamp < this.stamp) {\n cell.stamp = this.stamp;\n this._adds[this._alen++] = cell;\n } else if (cell.stamp < this.stamp) {\n cell.stamp = this.stamp;\n this._mods[this._mlen++] = cell;\n }\n\n return cell;\n },\n\n newcell(key, t) {\n const cell = {\n key: key,\n num: 0,\n agg: null,\n tuple: this.newtuple(t, this._prev && this._prev[key]),\n stamp: this.stamp,\n store: false\n };\n\n if (!this._countOnly) {\n const measures = this._measures,\n n = measures.length;\n cell.agg = Array(n);\n\n for (let i = 0; i < n; ++i) {\n cell.agg[i] = new measures[i](cell);\n }\n }\n\n if (cell.store) {\n cell.data = new TupleStore();\n }\n\n return cell;\n },\n\n newtuple(t, p) {\n const names = this._dnames,\n dims = this._dims,\n n = dims.length,\n x = {};\n\n for (let i = 0; i < n; ++i) {\n x[names[i]] = dims[i](t);\n }\n\n return p ? replace(p.tuple, x) : ingest(x);\n },\n\n clean() {\n const cells = this.value;\n\n for (const key in cells) {\n if (cells[key].num === 0) {\n delete cells[key];\n }\n }\n },\n\n // -- Process Tuples -----\n add(t) {\n const key = this.cellkey(t),\n cell = this.cell(key, t);\n cell.num += 1;\n if (this._countOnly) return;\n if (cell.store) cell.data.add(t);\n const agg = cell.agg;\n\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].add(agg[i].get(t), t);\n }\n },\n\n rem(t) {\n const key = this.cellkey(t),\n cell = this.cell(key, t);\n cell.num -= 1;\n if (this._countOnly) return;\n if (cell.store) cell.data.rem(t);\n const agg = cell.agg;\n\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].rem(agg[i].get(t), t);\n }\n },\n\n celltuple(cell) {\n const tuple = cell.tuple,\n counts = this._counts; // consolidate stored values\n\n if (cell.store) {\n cell.data.values();\n } // update tuple properties\n\n\n for (let i = 0, n = counts.length; i < n; ++i) {\n tuple[counts[i]] = cell.num;\n }\n\n if (!this._countOnly) {\n const agg = cell.agg;\n\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].set(tuple);\n }\n }\n\n return tuple;\n },\n\n changes(out) {\n const adds = this._adds,\n mods = this._mods,\n prev = this._prev,\n drop = this._drop,\n add = out.add,\n rem = out.rem,\n mod = out.mod;\n let cell, key, i, n;\n if (prev) for (key in prev) {\n cell = prev[key];\n if (!drop || cell.num) rem.push(cell.tuple);\n }\n\n for (i = 0, n = this._alen; i < n; ++i) {\n add.push(this.celltuple(adds[i]));\n adds[i] = null; // for garbage collection\n }\n\n for (i = 0, n = this._mlen; i < n; ++i) {\n cell = mods[i];\n (cell.num === 0 && drop ? rem : mod).push(this.celltuple(cell));\n mods[i] = null; // for garbage collection\n }\n\n this._alen = this._mlen = 0; // reset list of active cells\n\n this._prev = null;\n return out;\n }\n\n});\n\nconst EPSILON$1 = 1e-14;\n/**\n * Generates a binning function for discretizing data.\n * @constructor\n * @param {object} params - The parameters for this operator. The\n * provided values should be valid options for the {@link bin} function.\n * @param {function(object): *} params.field - The data field to bin.\n */\n\nfunction Bin(params) {\n Transform.call(this, null, params);\n}\nBin.Definition = {\n 'type': 'Bin',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'interval',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'anchor',\n 'type': 'number'\n }, {\n 'name': 'maxbins',\n 'type': 'number',\n 'default': 20\n }, {\n 'name': 'base',\n 'type': 'number',\n 'default': 10\n }, {\n 'name': 'divide',\n 'type': 'number',\n 'array': true,\n 'default': [5, 2]\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'span',\n 'type': 'number'\n }, {\n 'name': 'step',\n 'type': 'number'\n }, {\n 'name': 'steps',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'minstep',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'name',\n 'type': 'string'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['bin0', 'bin1']\n }]\n};\ninherits(Bin, Transform, {\n transform(_, pulse) {\n const band = _.interval !== false,\n bins = this._bins(_),\n start = bins.start,\n step = bins.step,\n as = _.as || ['bin0', 'bin1'],\n b0 = as[0],\n b1 = as[1];\n\n let flag;\n\n if (_.modified()) {\n pulse = pulse.reflow(true);\n flag = pulse.SOURCE;\n } else {\n flag = pulse.modified(accessorFields(_.field)) ? pulse.ADD_MOD : pulse.ADD;\n }\n\n pulse.visit(flag, band ? t => {\n const v = bins(t); // minimum bin value (inclusive)\n\n t[b0] = v; // maximum bin value (exclusive)\n // use convoluted math for better floating point agreement\n // see https://github.com/vega/vega/issues/830\n // infinite values propagate through this formula! #2227\n\n t[b1] = v == null ? null : start + step * (1 + (v - start) / step);\n } : t => t[b0] = bins(t));\n return pulse.modifies(band ? as : b0);\n },\n\n _bins(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n\n const field = _.field,\n bins = bin(_),\n step = bins.step;\n let start = bins.start,\n stop = start + Math.ceil((bins.stop - start) / step) * step,\n a,\n d;\n\n if ((a = _.anchor) != null) {\n d = a - (start + step * Math.floor((a - start) / step));\n start += d;\n stop += d;\n }\n\n const f = function (t) {\n let v = toNumber(field(t));\n return v == null ? null : v < start ? -Infinity : v > stop ? +Infinity : (v = Math.max(start, Math.min(v, stop - step)), start + step * Math.floor(EPSILON$1 + (v - start) / step));\n };\n\n f.start = start;\n f.stop = bins.stop;\n f.step = step;\n return this.value = accessor(f, accessorFields(field), _.name || 'bin_' + accessorName(field));\n }\n\n});\n\nfunction SortedList (idFunc, source, input) {\n const $ = idFunc;\n let data = source || [],\n add = input || [],\n rem = {},\n cnt = 0;\n return {\n add: t => add.push(t),\n remove: t => rem[$(t)] = ++cnt,\n size: () => data.length,\n data: (compare, resort) => {\n if (cnt) {\n data = data.filter(t => !rem[$(t)]);\n rem = {};\n cnt = 0;\n }\n\n if (resort && compare) {\n data.sort(compare);\n }\n\n if (add.length) {\n data = compare ? merge(compare, data, add.sort(compare)) : data.concat(add);\n add = [];\n }\n\n return data;\n }\n };\n}\n\n/**\n * Collects all data tuples that pass through this operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for additionally sorting the collected tuples.\n */\n\nfunction Collect(params) {\n Transform.call(this, [], params);\n}\nCollect.Definition = {\n 'type': 'Collect',\n 'metadata': {\n 'source': true\n },\n 'params': [{\n 'name': 'sort',\n 'type': 'compare'\n }]\n};\ninherits(Collect, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.ALL),\n list = SortedList(tupleid, this.value, out.materialize(out.ADD).add),\n sort = _.sort,\n mod = pulse.changed() || sort && (_.modified('sort') || pulse.modified(sort.fields));\n out.visit(out.REM, list.remove);\n this.modified(mod);\n this.value = out.source = list.data(stableCompare(sort), mod); // propagate tree root if defined\n\n if (pulse.source && pulse.source.root) {\n this.value.root = pulse.source.root;\n }\n\n return out;\n }\n\n});\n\n/**\n * Generates a comparator function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - The fields to compare.\n * @param {Array} [params.orders] - The sort orders.\n * Each entry should be one of \"ascending\" (default) or \"descending\".\n */\n\nfunction Compare(params) {\n Operator.call(this, null, update$5, params);\n}\ninherits(Compare, Operator);\n\nfunction update$5(_) {\n return this.value && !_.modified() ? this.value : compare(_.fields, _.orders);\n}\n\n/**\n * Count regexp-defined pattern occurrences in a text field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the text field.\n * @param {string} [params.pattern] - RegExp string defining the text pattern.\n * @param {string} [params.case] - One of 'lower', 'upper' or null (mixed) case.\n * @param {string} [params.stopwords] - RegExp string of words to ignore.\n */\n\nfunction CountPattern(params) {\n Transform.call(this, null, params);\n}\nCountPattern.Definition = {\n 'type': 'CountPattern',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'case',\n 'type': 'enum',\n 'values': ['upper', 'lower', 'mixed'],\n 'default': 'mixed'\n }, {\n 'name': 'pattern',\n 'type': 'string',\n 'default': '[\\\\w\"]+'\n }, {\n 'name': 'stopwords',\n 'type': 'string',\n 'default': ''\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['text', 'count']\n }]\n};\n\nfunction tokenize(text, tcase, match) {\n switch (tcase) {\n case 'upper':\n text = text.toUpperCase();\n break;\n\n case 'lower':\n text = text.toLowerCase();\n break;\n }\n\n return text.match(match);\n}\n\ninherits(CountPattern, Transform, {\n transform(_, pulse) {\n const process = update => tuple => {\n var tokens = tokenize(get(tuple), _.case, match) || [],\n t;\n\n for (var i = 0, n = tokens.length; i < n; ++i) {\n if (!stop.test(t = tokens[i])) update(t);\n }\n };\n\n const init = this._parameterCheck(_, pulse),\n counts = this._counts,\n match = this._match,\n stop = this._stop,\n get = _.field,\n as = _.as || ['text', 'count'],\n add = process(t => counts[t] = 1 + (counts[t] || 0)),\n rem = process(t => counts[t] -= 1);\n\n if (init) {\n pulse.visit(pulse.SOURCE, add);\n } else {\n pulse.visit(pulse.ADD, add);\n pulse.visit(pulse.REM, rem);\n }\n\n return this._finish(pulse, as); // generate output tuples\n },\n\n _parameterCheck(_, pulse) {\n let init = false;\n\n if (_.modified('stopwords') || !this._stop) {\n this._stop = new RegExp('^' + (_.stopwords || '') + '$', 'i');\n init = true;\n }\n\n if (_.modified('pattern') || !this._match) {\n this._match = new RegExp(_.pattern || '[\\\\w\\']+', 'g');\n init = true;\n }\n\n if (_.modified('field') || pulse.modified(_.field.fields)) {\n init = true;\n }\n\n if (init) this._counts = {};\n return init;\n },\n\n _finish(pulse, as) {\n const counts = this._counts,\n tuples = this._tuples || (this._tuples = {}),\n text = as[0],\n count = as[1],\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n let w, t, c;\n\n for (w in counts) {\n t = tuples[w];\n c = counts[w] || 0;\n\n if (!t && c) {\n tuples[w] = t = ingest({});\n t[text] = w;\n t[count] = c;\n out.add.push(t);\n } else if (c === 0) {\n if (t) out.rem.push(t);\n counts[w] = null;\n tuples[w] = null;\n } else if (t[count] !== c) {\n t[count] = c;\n out.mod.push(t);\n }\n }\n\n return out.modifies(as);\n }\n\n});\n\n/**\n * Perform a cross-product of a tuple stream with itself.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object):boolean} [params.filter] - An optional filter\n * function for selectively including tuples in the cross product.\n * @param {Array} [params.as] - The names of the output fields.\n */\n\nfunction Cross(params) {\n Transform.call(this, null, params);\n}\nCross.Definition = {\n 'type': 'Cross',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'filter',\n 'type': 'expr'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['a', 'b']\n }]\n};\ninherits(Cross, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n as = _.as || ['a', 'b'],\n a = as[0],\n b = as[1],\n reset = !this.value || pulse.changed(pulse.ADD_REM) || _.modified('as') || _.modified('filter');\n\n let data = this.value;\n\n if (reset) {\n if (data) out.rem = data;\n data = pulse.materialize(pulse.SOURCE).source;\n out.add = this.value = cross(data, a, b, _.filter || truthy);\n } else {\n out.mod = data;\n }\n\n out.source = this.value;\n return out.modifies(as);\n }\n\n});\n\nfunction cross(input, a, b, filter) {\n var data = [],\n t = {},\n n = input.length,\n i = 0,\n j,\n left;\n\n for (; i < n; ++i) {\n t[a] = left = input[i];\n\n for (j = 0; j < n; ++j) {\n t[b] = input[j];\n\n if (filter(t)) {\n data.push(ingest(t));\n t = {};\n t[a] = left;\n }\n }\n }\n\n return data;\n}\n\nconst Distributions = {\n kde: randomKDE,\n mixture: randomMixture,\n normal: randomNormal,\n lognormal: randomLogNormal,\n uniform: randomUniform\n};\nconst DISTRIBUTIONS = 'distributions',\n FUNCTION = 'function',\n FIELD = 'field';\n/**\n * Parse a parameter object for a probability distribution.\n * @param {object} def - The distribution parameter object.\n * @param {function():Array} - A method for requesting\n * source data. Used for distributions (such as KDE) that\n * require sample data points. This method will only be\n * invoked if the 'from' parameter for a target data source\n * is not provided. Typically this method returns backing\n * source data for a Pulse object.\n * @return {object} - The output distribution object.\n */\n\nfunction parse(def, data) {\n const func = def[FUNCTION];\n\n if (!hasOwnProperty(Distributions, func)) {\n error('Unknown distribution function: ' + func);\n }\n\n const d = Distributions[func]();\n\n for (const name in def) {\n // if data field, extract values\n if (name === FIELD) {\n d.data((def.from || data()).map(def[name]));\n } // if distribution mixture, recurse to parse each definition\n else if (name === DISTRIBUTIONS) {\n d[name](def[name].map(_ => parse(_, data)));\n } // otherwise, simply set the parameter\n else if (typeof d[name] === FUNCTION) {\n d[name](def[name]);\n }\n }\n\n return d;\n}\n\n/**\n * Grid sample points for a probability density. Given a distribution and\n * a sampling extent, will generate points suitable for plotting either\n * PDF (probability density function) or CDF (cumulative distribution\n * function) curves.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.distribution - The probability distribution. This\n * is an object parameter dependent on the distribution type.\n * @param {string} [params.method='pdf'] - The distribution method to sample.\n * One of 'pdf' or 'cdf'.\n * @param {Array} [params.extent] - The [min, max] extent over which\n * to sample the distribution. This argument is required in most cases, but\n * can be omitted if the distribution (e.g., 'kde') supports a 'data' method\n * that returns numerical sample points from which the extent can be deduced.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\n\nfunction Density(params) {\n Transform.call(this, null, params);\n}\nconst distributions = [{\n 'key': {\n 'function': 'normal'\n },\n 'params': [{\n 'name': 'mean',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'stdev',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'lognormal'\n },\n 'params': [{\n 'name': 'mean',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'stdev',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'uniform'\n },\n 'params': [{\n 'name': 'min',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'max',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'kde'\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'from',\n 'type': 'data'\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0\n }]\n}];\nconst mixture = {\n 'key': {\n 'function': 'mixture'\n },\n 'params': [{\n 'name': 'distributions',\n 'type': 'param',\n 'array': true,\n 'params': distributions\n }, {\n 'name': 'weights',\n 'type': 'number',\n 'array': true\n }]\n};\nDensity.Definition = {\n 'type': 'Density',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'steps',\n 'type': 'number'\n }, {\n 'name': 'minsteps',\n 'type': 'number',\n 'default': 25\n }, {\n 'name': 'maxsteps',\n 'type': 'number',\n 'default': 200\n }, {\n 'name': 'method',\n 'type': 'string',\n 'default': 'pdf',\n 'values': ['pdf', 'cdf']\n }, {\n 'name': 'distribution',\n 'type': 'param',\n 'params': distributions.concat(mixture)\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['value', 'density']\n }]\n};\ninherits(Density, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n if (!this.value || pulse.changed() || _.modified()) {\n const dist = parse(_.distribution, source(pulse)),\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200;\n let method = _.method || 'pdf';\n\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n\n if (!_.extent && !dist.data) {\n error('Missing density extent parameter.');\n }\n\n method = dist[method];\n const as = _.as || ['value', 'density'],\n domain = _.extent || extent(dist.data()),\n values = sampleCurve(method, domain, minsteps, maxsteps).map(v => {\n const tuple = {};\n tuple[as[0]] = v[0];\n tuple[as[1]] = v[1];\n return ingest(tuple);\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n\n return out;\n }\n\n});\n\nfunction source(pulse) {\n return () => pulse.materialize(pulse.SOURCE).source;\n}\n\nfunction fieldNames(fields, as) {\n if (!fields) return null;\n return fields.map((f, i) => as[i] || accessorName(f));\n}\nfunction partition$1(data, groupby, field) {\n const groups = [],\n get = f => f(t);\n\n let map, i, n, t, k, g; // partition data points into groups\n\n if (groupby == null) {\n groups.push(data.map(field));\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n\n g.push(field(t));\n }\n }\n\n return groups;\n}\n\nconst Output = 'bin';\n/**\n * Dot density binning for dot plot construction.\n * Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n * https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to bin.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {number} [params.step] - The step size (bin width) within which dots should be\n * stacked. Defaults to 1/30 of the extent of the data *field*.\n * @param {boolean} [params.smooth=false] - A boolean flag indicating if dot density\n * stacks should be smoothed to reduce variance.\n */\n\nfunction DotBin(params) {\n Transform.call(this, null, params);\n}\nDotBin.Definition = {\n 'type': 'DotBin',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number'\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': Output\n }]\n};\n\nconst autostep = (data, field) => span(extent(data, field)) / 30;\n\ninherits(DotBin, Transform, {\n transform(_, pulse) {\n if (this.value && !(_.modified() || pulse.changed())) {\n return pulse; // early exit\n }\n\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(pulse.source, _.groupby, identity),\n smooth = _.smooth || false,\n field = _.field,\n step = _.step || autostep(source, field),\n sort = stableCompare((a, b) => field(a) - field(b)),\n as = _.as || Output,\n n = groups.length; // compute dotplot bins per group\n\n let min = Infinity,\n max = -Infinity,\n i = 0,\n j;\n\n for (; i < n; ++i) {\n const g = groups[i].sort(sort);\n j = -1;\n\n for (const v of dotbin(g, step, smooth, field)) {\n if (v < min) min = v;\n if (v > max) max = v;\n g[++j][as] = v;\n }\n }\n\n this.value = {\n start: min,\n stop: max,\n step: step\n };\n return pulse.reflow(true).modifies(as);\n }\n\n});\n\n/**\n * Wraps an expression function with access to external parameters.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function} params.expr - The expression function. The\n * function should accept both a datum and a parameter object.\n * This operator's value will be a new function that wraps the\n * expression function with access to this operator's parameters.\n */\n\nfunction Expression(params) {\n Operator.call(this, null, update$4, params);\n this.modified(true);\n}\ninherits(Expression, Operator);\n\nfunction update$4(_) {\n const expr = _.expr;\n return this.value && !_.modified('expr') ? this.value : accessor(datum => expr(datum, _), accessorFields(expr), accessorName(expr));\n}\n\n/**\n * Computes extents (min/max) for a data field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field over which to compute extends.\n */\n\nfunction Extent(params) {\n Transform.call(this, [undefined, undefined], params);\n}\nExtent.Definition = {\n 'type': 'Extent',\n 'metadata': {},\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }]\n};\ninherits(Extent, Transform, {\n transform(_, pulse) {\n const extent = this.value,\n field = _.field,\n mod = pulse.changed() || pulse.modified(field.fields) || _.modified('field');\n\n let min = extent[0],\n max = extent[1];\n\n if (mod || min == null) {\n min = +Infinity;\n max = -Infinity;\n }\n\n pulse.visit(mod ? pulse.SOURCE : pulse.ADD, t => {\n const v = toNumber(field(t));\n\n if (v != null) {\n // NaNs will fail all comparisons!\n if (v < min) min = v;\n if (v > max) max = v;\n }\n });\n\n if (!Number.isFinite(min) || !Number.isFinite(max)) {\n let name = accessorName(field);\n if (name) name = ` for field \"${name}\"`;\n pulse.dataflow.warn(`Infinite extent${name}: [${min}, ${max}]`);\n min = max = undefined;\n }\n\n this.value = [min, max];\n }\n\n});\n\n/**\n * Provides a bridge between a parent transform and a target subflow that\n * consumes only a subset of the tuples that pass through the parent.\n * @constructor\n * @param {Pulse} pulse - A pulse to use as the value of this operator.\n * @param {Transform} parent - The parent transform (typically a Facet instance).\n */\n\nfunction Subflow(pulse, parent) {\n Operator.call(this, pulse);\n this.parent = parent;\n this.count = 0;\n}\ninherits(Subflow, Operator, {\n /**\n * Routes pulses from this subflow to a target transform.\n * @param {Transform} target - A transform that receives the subflow of tuples.\n */\n connect(target) {\n this.detachSubflow = target.detachSubflow;\n this.targets().add(target);\n return target.source = this;\n },\n\n /**\n * Add an 'add' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being added.\n */\n add(t) {\n this.count += 1;\n this.value.add.push(t);\n },\n\n /**\n * Add a 'rem' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being removed.\n */\n rem(t) {\n this.count -= 1;\n this.value.rem.push(t);\n },\n\n /**\n * Add a 'mod' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being modified.\n */\n mod(t) {\n this.value.mod.push(t);\n },\n\n /**\n * Re-initialize this operator's pulse value.\n * @param {Pulse} pulse - The pulse to copy from.\n * @see Pulse.init\n */\n init(pulse) {\n this.value.init(pulse, pulse.NO_SOURCE);\n },\n\n /**\n * Evaluate this operator. This method overrides the\n * default behavior to simply return the contained pulse value.\n * @return {Pulse}\n */\n evaluate() {\n // assert: this.value.stamp === pulse.stamp\n return this.value;\n }\n\n});\n\n/**\n * Facets a dataflow into a set of subflows based on a key.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): *} params.key - The key field to facet by.\n */\n\nfunction Facet(params) {\n Transform.call(this, {}, params);\n this._keys = fastmap(); // cache previously calculated key values\n // keep track of active subflows, use as targets array for listeners\n // this allows us to limit propagation to only updated subflows\n\n const a = this._targets = [];\n a.active = 0;\n\n a.forEach = f => {\n for (let i = 0, n = a.active; i < n; ++i) {\n f(a[i], i, a);\n }\n };\n}\ninherits(Facet, Transform, {\n activate(flow) {\n this._targets[this._targets.active++] = flow;\n },\n\n // parent argument provided by PreFacet subclass\n subflow(key, flow, pulse, parent) {\n const flows = this.value;\n let sf = hasOwnProperty(flows, key) && flows[key],\n df,\n p;\n\n if (!sf) {\n p = parent || (p = this._group[key]) && p.tuple;\n df = pulse.dataflow;\n sf = new Subflow(pulse.fork(pulse.NO_SOURCE), this);\n df.add(sf).connect(flow(df, key, p));\n flows[key] = sf;\n this.activate(sf);\n } else if (sf.value.stamp < pulse.stamp) {\n sf.init(pulse);\n this.activate(sf);\n }\n\n return sf;\n },\n\n clean() {\n const flows = this.value;\n let detached = 0;\n\n for (const key in flows) {\n if (flows[key].count === 0) {\n const detach = flows[key].detachSubflow;\n if (detach) detach();\n delete flows[key];\n ++detached;\n }\n } // remove inactive targets from the active targets array\n\n\n if (detached) {\n const active = this._targets.filter(sf => sf && sf.count > 0);\n\n this.initTargets(active);\n }\n },\n\n initTargets(act) {\n const a = this._targets,\n n = a.length,\n m = act ? act.length : 0;\n let i = 0;\n\n for (; i < m; ++i) {\n a[i] = act[i];\n }\n\n for (; i < n && a[i] != null; ++i) {\n a[i] = null; // ensure old flows can be garbage collected\n }\n\n a.active = m;\n },\n\n transform(_, pulse) {\n const df = pulse.dataflow,\n key = _.key,\n flow = _.subflow,\n cache = this._keys,\n rekey = _.modified('key'),\n subflow = key => this.subflow(key, flow, pulse);\n\n this._group = _.group || {};\n this.initTargets(); // reset list of active subflows\n\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t),\n k = cache.get(id);\n\n if (k !== undefined) {\n cache.delete(id);\n subflow(k).rem(t);\n }\n });\n pulse.visit(pulse.ADD, t => {\n const k = key(t);\n cache.set(tupleid(t), k);\n subflow(k).add(t);\n });\n\n if (rekey || pulse.modified(key.fields)) {\n pulse.visit(pulse.MOD, t => {\n const id = tupleid(t),\n k0 = cache.get(id),\n k1 = key(t);\n\n if (k0 === k1) {\n subflow(k1).mod(t);\n } else {\n cache.set(id, k1);\n subflow(k0).rem(t);\n subflow(k1).add(t);\n }\n });\n } else if (pulse.changed(pulse.MOD)) {\n pulse.visit(pulse.MOD, t => {\n subflow(cache.get(tupleid(t))).mod(t);\n });\n }\n\n if (rekey) {\n pulse.visit(pulse.REFLOW, t => {\n const id = tupleid(t),\n k0 = cache.get(id),\n k1 = key(t);\n\n if (k0 !== k1) {\n cache.set(id, k1);\n subflow(k0).rem(t);\n subflow(k1).add(t);\n }\n });\n }\n\n if (pulse.clean()) {\n df.runAfter(() => {\n this.clean();\n cache.clean();\n });\n } else if (cache.empty > df.cleanThreshold) {\n df.runAfter(cache.clean);\n }\n\n return pulse;\n }\n\n});\n\n/**\n * Generates one or more field accessor functions.\n * If the 'name' parameter is an array, an array of field accessors\n * will be created and the 'as' parameter will be ignored.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.name - The field name(s) to access.\n * @param {string} params.as - The accessor function name.\n */\n\nfunction Field(params) {\n Operator.call(this, null, update$3, params);\n}\ninherits(Field, Operator);\n\nfunction update$3(_) {\n return this.value && !_.modified() ? this.value : isArray(_.name) ? array(_.name).map(f => field(f)) : field(_.name, _.as);\n}\n\n/**\n * Filters data tuples according to a predicate function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The predicate expression function\n * that determines a tuple's filter status. Truthy values pass the filter.\n */\n\nfunction Filter(params) {\n Transform.call(this, fastmap(), params);\n}\nFilter.Definition = {\n 'type': 'Filter',\n 'metadata': {\n 'changes': true\n },\n 'params': [{\n 'name': 'expr',\n 'type': 'expr',\n 'required': true\n }]\n};\ninherits(Filter, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow,\n cache = this.value,\n // cache ids of filtered tuples\n output = pulse.fork(),\n add = output.add,\n rem = output.rem,\n mod = output.mod,\n test = _.expr;\n let isMod = true;\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n if (!cache.has(id)) rem.push(t);else cache.delete(id);\n });\n pulse.visit(pulse.ADD, t => {\n if (test(t, _)) add.push(t);else cache.set(tupleid(t), 1);\n });\n\n function revisit(t) {\n const id = tupleid(t),\n b = test(t, _),\n s = cache.get(id);\n\n if (b && s) {\n cache.delete(id);\n add.push(t);\n } else if (!b && !s) {\n cache.set(id, 1);\n rem.push(t);\n } else if (isMod && b && !s) {\n mod.push(t);\n }\n }\n\n pulse.visit(pulse.MOD, revisit);\n\n if (_.modified()) {\n isMod = false;\n pulse.visit(pulse.REFLOW, revisit);\n }\n\n if (cache.empty > df.cleanThreshold) df.runAfter(cache.clean);\n return output;\n }\n\n});\n\n/**\n * Flattens array-typed field values into new data objects.\n * If multiple fields are specified, they are treated as parallel arrays,\n * with output values included for each matching index (or null if missing).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of field\n * accessors for the tuple fields that should be flattened.\n * @param {string} [params.index] - Optional output field name for index\n * value. If unspecified, no index field is included in the output.\n * @param {Array} [params.as] - Output field names for flattened\n * array fields. Any unspecified fields will use the field name provided\n * by the fields accessors.\n */\n\nfunction Flatten(params) {\n Transform.call(this, [], params);\n}\nFlatten.Definition = {\n 'type': 'Flatten',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'index',\n 'type': 'string'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Flatten, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(fields, _.as || []),\n index = _.index || null,\n m = as.length; // remove any previous results\n\n out.rem = this.value; // generate flattened tuples\n\n pulse.visit(pulse.SOURCE, t => {\n const arrays = fields.map(f => f(t)),\n maxlen = arrays.reduce((l, a) => Math.max(l, a.length), 0);\n let i = 0,\n j,\n d,\n v;\n\n for (; i < maxlen; ++i) {\n d = derive(t);\n\n for (j = 0; j < m; ++j) {\n d[as[j]] = (v = arrays[j][i]) == null ? null : v;\n }\n\n if (index) {\n d[index] = i;\n }\n\n out.add.push(d);\n }\n });\n this.value = out.source = out.add;\n if (index) out.modifies(index);\n return out.modifies(as);\n }\n\n});\n\n/**\n * Folds one more tuple fields into multiple tuples in which the field\n * name and values are available under new 'key' and 'value' fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.fields - An array of field accessors\n * for the tuple fields that should be folded.\n * @param {Array} [params.as] - Output field names for folded key\n * and value fields, defaults to ['key', 'value'].\n */\n\nfunction Fold(params) {\n Transform.call(this, [], params);\n}\nFold.Definition = {\n 'type': 'Fold',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['key', 'value']\n }]\n};\ninherits(Fold, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n fnames = fields.map(accessorName),\n as = _.as || ['key', 'value'],\n k = as[0],\n v = as[1],\n n = fields.length;\n out.rem = this.value;\n pulse.visit(pulse.SOURCE, t => {\n for (let i = 0, d; i < n; ++i) {\n d = derive(t);\n d[k] = fnames[i];\n d[v] = fields[i](t);\n out.add.push(d);\n }\n });\n this.value = out.source = out.add;\n return out.modifies(as);\n }\n\n});\n\n/**\n * Invokes a function for each data tuple and saves the results as a new field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The formula function to invoke for each tuple.\n * @param {string} params.as - The field name under which to save the result.\n * @param {boolean} [params.initonly=false] - If true, the formula is applied to\n * added tuples only, and does not update in response to modifications.\n */\n\nfunction Formula(params) {\n Transform.call(this, null, params);\n}\nFormula.Definition = {\n 'type': 'Formula',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'expr',\n 'type': 'expr',\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'required': true\n }, {\n 'name': 'initonly',\n 'type': 'boolean'\n }]\n};\ninherits(Formula, Transform, {\n transform(_, pulse) {\n const func = _.expr,\n as = _.as,\n mod = _.modified(),\n flag = _.initonly ? pulse.ADD : mod ? pulse.SOURCE : pulse.modified(func.fields) || pulse.modified(as) ? pulse.ADD_MOD : pulse.ADD;\n\n if (mod) {\n // parameters updated, need to reflow\n pulse = pulse.materialize().reflow(true);\n }\n\n if (!_.initonly) {\n pulse.modifies(as);\n }\n\n return pulse.visit(flag, t => t[as] = func(t, _));\n }\n\n});\n\n/**\n * Generates data tuples using a provided generator function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Parameters): object} params.generator - A tuple generator\n * function. This function is given the operator parameters as input.\n * Changes to any additional parameters will not trigger re-calculation\n * of previously generated tuples. Only future tuples are affected.\n * @param {number} params.size - The number of tuples to produce.\n */\n\nfunction Generate(params) {\n Transform.call(this, [], params);\n}\ninherits(Generate, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.ALL),\n gen = _.generator;\n let data = this.value,\n num = _.size - data.length,\n add,\n rem,\n t;\n\n if (num > 0) {\n // need more tuples, generate and add\n for (add = []; --num >= 0;) {\n add.push(t = ingest(gen(_)));\n data.push(t);\n }\n\n out.add = out.add.length ? out.materialize(out.ADD).add.concat(add) : add;\n } else {\n // need fewer tuples, remove\n rem = data.slice(0, -num);\n out.rem = out.rem.length ? out.materialize(out.REM).rem.concat(rem) : rem;\n data = data.slice(-num);\n }\n\n out.source = this.value = data;\n return out;\n }\n\n});\n\nconst Methods = {\n value: 'value',\n median: median,\n mean: mean,\n min: min,\n max: max\n};\nconst Empty = [];\n/**\n * Impute missing values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to impute.\n * @param {Array} [params.groupby] - An array of\n * accessors to determine series within which to perform imputation.\n * @param {function(object): *} params.key - An accessor for a key value.\n * Each key value should be unique within a group. New tuples will be\n * imputed for any key values that are not found within a group.\n * @param {Array<*>} [params.keyvals] - Optional array of required key\n * values. New tuples will be imputed for any key values that are not\n * found within a group. In addition, these values will be automatically\n * augmented with the key values observed in the input data.\n * @param {string} [method='value'] - The imputation method to use. One of\n * 'value', 'mean', 'median', 'max', 'min'.\n * @param {*} [value=0] - The constant value to use for imputation\n * when using method 'value'.\n */\n\nfunction Impute(params) {\n Transform.call(this, [], params);\n}\nImpute.Definition = {\n 'type': 'Impute',\n 'metadata': {\n 'changes': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'keyvals',\n 'array': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'value',\n 'values': ['value', 'mean', 'median', 'max', 'min']\n }, {\n 'name': 'value',\n 'default': 0\n }]\n};\n\nfunction getValue(_) {\n var m = _.method || Methods.value,\n v;\n\n if (Methods[m] == null) {\n error('Unrecognized imputation method: ' + m);\n } else if (m === Methods.value) {\n v = _.value !== undefined ? _.value : 0;\n return () => v;\n } else {\n return Methods[m];\n }\n}\n\nfunction getField(_) {\n const f = _.field;\n return t => t ? f(t) : NaN;\n}\n\ninherits(Impute, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n impute = getValue(_),\n field = getField(_),\n fName = accessorName(_.field),\n kName = accessorName(_.key),\n gNames = (_.groupby || []).map(accessorName),\n groups = partition(pulse.source, _.groupby, _.key, _.keyvals),\n curr = [],\n prev = this.value,\n m = groups.domain.length,\n group,\n value,\n gVals,\n kVal,\n g,\n i,\n j,\n l,\n n,\n t;\n\n for (g = 0, l = groups.length; g < l; ++g) {\n group = groups[g];\n gVals = group.values;\n value = NaN; // add tuples for missing values\n\n for (j = 0; j < m; ++j) {\n if (group[j] != null) continue;\n kVal = groups.domain[j];\n t = {\n _impute: true\n };\n\n for (i = 0, n = gVals.length; i < n; ++i) t[gNames[i]] = gVals[i];\n\n t[kName] = kVal;\n t[fName] = Number.isNaN(value) ? value = impute(group, field) : value;\n curr.push(ingest(t));\n }\n } // update pulse with imputed tuples\n\n\n if (curr.length) out.add = out.materialize(out.ADD).add.concat(curr);\n if (prev.length) out.rem = out.materialize(out.REM).rem.concat(prev);\n this.value = curr;\n return out;\n }\n\n});\n\nfunction partition(data, groupby, key, keyvals) {\n var get = f => f(t),\n groups = [],\n domain = keyvals ? keyvals.slice() : [],\n kMap = {},\n gMap = {},\n gVals,\n gKey,\n group,\n i,\n j,\n k,\n n,\n t;\n\n domain.forEach((k, i) => kMap[k] = i + 1);\n\n for (i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = key(t);\n j = kMap[k] || (kMap[k] = domain.push(k));\n gKey = (gVals = groupby ? groupby.map(get) : Empty) + '';\n\n if (!(group = gMap[gKey])) {\n group = gMap[gKey] = [];\n groups.push(group);\n group.values = gVals;\n }\n\n group[j - 1] = t;\n }\n\n groups.domain = domain;\n return groups;\n}\n\n/**\n * Extend input tuples with aggregate values.\n * Calcuates aggregate values and joins them with the input stream.\n * @constructor\n */\n\nfunction JoinAggregate(params) {\n Aggregate.call(this, params);\n}\nJoinAggregate.Definition = {\n 'type': 'JoinAggregate',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidAggregateOps\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(JoinAggregate, Aggregate, {\n transform(_, pulse) {\n const aggr = this,\n mod = _.modified();\n\n let cells; // process all input tuples to calculate aggregates\n\n if (aggr.value && (mod || pulse.modified(aggr._inputs, true))) {\n cells = aggr.value = mod ? aggr.init(_) : {};\n pulse.visit(pulse.SOURCE, t => aggr.add(t));\n } else {\n cells = aggr.value = aggr.value || this.init(_);\n pulse.visit(pulse.REM, t => aggr.rem(t));\n pulse.visit(pulse.ADD, t => aggr.add(t));\n } // update aggregation cells\n\n\n aggr.changes(); // write aggregate values to input tuples\n\n pulse.visit(pulse.SOURCE, t => {\n extend(t, cells[aggr.cellkey(t)].tuple);\n });\n return pulse.reflow(mod).modifies(this._outputs);\n },\n\n changes() {\n const adds = this._adds,\n mods = this._mods;\n let i, n;\n\n for (i = 0, n = this._alen; i < n; ++i) {\n this.celltuple(adds[i]);\n adds[i] = null; // for garbage collection\n }\n\n for (i = 0, n = this._mlen; i < n; ++i) {\n this.celltuple(mods[i]);\n mods[i] = null; // for garbage collection\n }\n\n this._alen = this._mlen = 0; // reset list of active cells\n }\n\n});\n\n/**\n * Compute kernel density estimates (KDE) for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {function(object): *} params.field - An accessor for the data field\n * to estimate.\n * @param {number} [params.bandwidth=0] - The KDE kernel bandwidth.\n * If zero or unspecified, the bandwidth is automatically determined.\n * @param {boolean} [params.counts=false] - A boolean flag indicating if the\n * output values should be probability estimates (false, default) or\n * smoothed counts (true).\n * @param {string} [params.cumulative=false] - A boolean flag indicating if a\n * density (false) or cumulative distribution (true) should be generated.\n * @param {Array} [params.extent] - The domain extent over which to\n * plot the density. If unspecified, the [min, max] data extent is used.\n * @param {string} [params.resolve='independent'] - Indicates how parameters for\n * multiple densities should be resolved. If \"independent\" (the default), each\n * density may have its own domain extent and dynamic number of curve sample\n * steps. If \"shared\", the KDE transform will ensure that all densities are\n * defined over a shared domain and curve steps, enabling stacking.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\n\nfunction KDE(params) {\n Transform.call(this, null, params);\n}\nKDE.Definition = {\n 'type': 'KDE',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'cumulative',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'counts',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'steps',\n 'type': 'number'\n }, {\n 'name': 'minsteps',\n 'type': 'number',\n 'default': 25\n }, {\n 'name': 'maxsteps',\n 'type': 'number',\n 'default': 200\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['value', 'density']\n }]\n};\ninherits(KDE, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(source, _.groupby, _.field),\n names = (_.groupby || []).map(accessorName),\n bandwidth = _.bandwidth,\n method = _.cumulative ? 'cdf' : 'pdf',\n as = _.as || ['value', 'density'],\n values = [];\n let domain = _.extent,\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200;\n\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n\n if (_.resolve === 'shared') {\n if (!domain) domain = extent(source, _.field);\n minsteps = maxsteps = _.steps || maxsteps;\n }\n\n groups.forEach(g => {\n const density = randomKDE(g, bandwidth)[method],\n scale = _.counts ? g.length : 1,\n local = domain || extent(g);\n sampleCurve(density, local, minsteps, maxsteps).forEach(v => {\n const t = {};\n\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n\n t[as[0]] = v[0];\n t[as[1]] = v[1] * scale;\n values.push(ingest(t));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n\n return out;\n }\n\n});\n\n/**\n * Generates a key function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - The field name(s) for the key function.\n * @param {boolean} params.flat - A boolean flag indicating if the field names\n * should be treated as flat property names, side-stepping nested field\n * lookups normally indicated by dot or bracket notation.\n */\n\nfunction Key(params) {\n Operator.call(this, null, update$2, params);\n}\ninherits(Key, Operator);\n\nfunction update$2(_) {\n return this.value && !_.modified() ? this.value : key(_.fields, _.flat);\n}\n\n/**\n * Load and parse data from an external source. Marshalls parameter\n * values and then invokes the Dataflow request method.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.url - The URL to load from.\n * @param {object} params.format - The data format options.\n */\n\nfunction Load(params) {\n Transform.call(this, [], params);\n this._pending = null;\n}\ninherits(Load, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow;\n\n if (this._pending) {\n // update state and return pulse\n return output(this, pulse, this._pending);\n }\n\n if (stop(_)) return pulse.StopPropagation;\n\n if (_.values) {\n // parse and ingest values, return output pulse\n return output(this, pulse, df.parse(_.values, _.format));\n } else if (_.async) {\n // return promise for non-blocking async loading\n const p = df.request(_.url, _.format).then(res => {\n this._pending = array(res.data);\n return df => df.touch(this);\n });\n return {\n async: p\n };\n } else {\n // return promise for synchronous loading\n return df.request(_.url, _.format).then(res => output(this, pulse, array(res.data)));\n }\n }\n\n});\n\nfunction stop(_) {\n return _.modified('async') && !(_.modified('values') || _.modified('url') || _.modified('format'));\n}\n\nfunction output(op, pulse, data) {\n data.forEach(ingest);\n const out = pulse.fork(pulse.NO_FIELDS & pulse.NO_SOURCE);\n out.rem = op.value;\n op.value = out.source = out.add = data;\n op._pending = null;\n if (out.rem.length) out.clean(true);\n return out;\n}\n\n/**\n * Extend tuples by joining them with values from a lookup table.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Map} params.index - The lookup table map.\n * @param {Array} params.as - Output field names for each lookup value.\n * @param {*} [params.default] - A default value to use if lookup fails.\n */\n\nfunction Lookup(params) {\n Transform.call(this, {}, params);\n}\nLookup.Definition = {\n 'type': 'Lookup',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'index',\n 'type': 'index',\n 'params': [{\n 'name': 'from',\n 'type': 'data',\n 'required': true\n }, {\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }]\n }, {\n 'name': 'values',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }, {\n 'name': 'default',\n 'default': null\n }]\n};\ninherits(Lookup, Transform, {\n transform(_, pulse) {\n const keys = _.fields,\n index = _.index,\n values = _.values,\n defaultValue = _.default == null ? null : _.default,\n reset = _.modified(),\n n = keys.length;\n\n let flag = reset ? pulse.SOURCE : pulse.ADD,\n out = pulse,\n as = _.as,\n set,\n m,\n mods;\n\n if (values) {\n m = values.length;\n\n if (n > 1 && !as) {\n error('Multi-field lookup requires explicit \"as\" parameter.');\n }\n\n if (as && as.length !== n * m) {\n error('The \"as\" parameter has too few output field names.');\n }\n\n as = as || values.map(accessorName);\n\n set = function (t) {\n for (var i = 0, k = 0, j, v; i < n; ++i) {\n v = index.get(keys[i](t));\n if (v == null) for (j = 0; j < m; ++j, ++k) t[as[k]] = defaultValue;else for (j = 0; j < m; ++j, ++k) t[as[k]] = values[j](v);\n }\n };\n } else {\n if (!as) {\n error('Missing output field names.');\n }\n\n set = function (t) {\n for (var i = 0, v; i < n; ++i) {\n v = index.get(keys[i](t));\n t[as[i]] = v == null ? defaultValue : v;\n }\n };\n }\n\n if (reset) {\n out = pulse.reflow(true);\n } else {\n mods = keys.some(k => pulse.modified(k.fields));\n flag |= mods ? pulse.MOD : 0;\n }\n\n pulse.visit(flag, set);\n return out.modifies(as);\n }\n\n});\n\n/**\n * Computes global min/max extents over a collection of extents.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array>} params.extents - The input extents.\n */\n\nfunction MultiExtent(params) {\n Operator.call(this, null, update$1, params);\n}\ninherits(MultiExtent, Operator);\n\nfunction update$1(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n\n const ext = _.extents,\n n = ext.length;\n let min = +Infinity,\n max = -Infinity,\n i,\n e;\n\n for (i = 0; i < n; ++i) {\n e = ext[i];\n if (e[0] < min) min = e[0];\n if (e[1] > max) max = e[1];\n }\n\n return [min, max];\n}\n\n/**\n * Merge a collection of value arrays.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array>} params.values - The input value arrrays.\n */\n\nfunction MultiValues(params) {\n Operator.call(this, null, update, params);\n}\ninherits(MultiValues, Operator);\n\nfunction update(_) {\n return this.value && !_.modified() ? this.value : _.values.reduce((data, _) => data.concat(_), []);\n}\n\n/**\n * Operator whose value is simply its parameter hash. This operator is\n * useful for enabling reactive updates to values of nested objects.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction Params(params) {\n Transform.call(this, null, params);\n}\ninherits(Params, Transform, {\n transform(_, pulse) {\n this.modified(_.modified());\n this.value = _;\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); // do not pass tuples\n }\n\n});\n\n/**\n * Aggregate and pivot selected field values to become new fields.\n * This operator is useful to construction cross-tabulations.\n * @constructor\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby. These fields act just like groupby fields of an Aggregate transform.\n * @param {function(object): *} params.field - The field to pivot on. The unique\n * values of this field become new field names in the output stream.\n * @param {function(object): *} params.value - The field to populate pivoted fields.\n * The aggregate values of this field become the values of the new pivoted fields.\n * @param {string} [params.op] - The aggregation operation for the value field,\n * applied per cell in the output stream. The default is \"sum\".\n * @param {number} [params.limit] - An optional parameter indicating the maximum\n * number of pivoted fields to generate. The pivoted field names are sorted in\n * ascending order prior to enforcing the limit.\n */\n\nfunction Pivot(params) {\n Aggregate.call(this, params);\n}\nPivot.Definition = {\n 'type': 'Pivot',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'value',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'op',\n 'type': 'enum',\n 'values': ValidAggregateOps,\n 'default': 'sum'\n }, {\n 'name': 'limit',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(Pivot, Aggregate, {\n _transform: Aggregate.prototype.transform,\n\n transform(_, pulse) {\n return this._transform(aggregateParams(_, pulse), pulse);\n }\n\n}); // Shoehorn a pivot transform into an aggregate transform!\n// First collect all unique pivot field values.\n// Then generate aggregate fields for each output pivot field.\n\nfunction aggregateParams(_, pulse) {\n const key = _.field,\n value = _.value,\n op = (_.op === 'count' ? '__count__' : _.op) || 'sum',\n fields = accessorFields(key).concat(accessorFields(value)),\n keys = pivotKeys(key, _.limit || 0, pulse); // if data stream content changes, pivot fields may change\n // flag parameter modification to ensure re-initialization\n\n if (pulse.changed()) _.set('__pivot__', null, null, true);\n return {\n key: _.key,\n groupby: _.groupby,\n ops: keys.map(() => op),\n fields: keys.map(k => get(k, key, value, fields)),\n as: keys.map(k => k + ''),\n modified: _.modified.bind(_)\n };\n} // Generate aggregate field accessor.\n// Output NaN for non-existent values; aggregator will ignore!\n\n\nfunction get(k, key, value, fields) {\n return accessor(d => key(d) === k ? value(d) : NaN, fields, k + '');\n} // Collect (and optionally limit) all unique pivot values.\n\n\nfunction pivotKeys(key, limit, pulse) {\n const map = {},\n list = [];\n pulse.visit(pulse.SOURCE, t => {\n const k = key(t);\n\n if (!map[k]) {\n map[k] = 1;\n list.push(k);\n }\n });\n list.sort(ascending);\n return limit ? list.slice(0, limit) : list;\n}\n\n/**\n * Partitions pre-faceted data into tuple subflows.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): Array} params.field - The field\n * accessor for an array of subflow tuple objects.\n */\n\nfunction PreFacet(params) {\n Facet.call(this, params);\n}\ninherits(PreFacet, Facet, {\n transform(_, pulse) {\n const flow = _.subflow,\n field = _.field,\n subflow = t => this.subflow(tupleid(t), flow, pulse, t);\n\n if (_.modified('field') || field && pulse.modified(accessorFields(field))) {\n error('PreFacet does not support field modification.');\n }\n\n this.initTargets(); // reset list of active subflows\n\n if (field) {\n pulse.visit(pulse.MOD, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.mod(_));\n });\n pulse.visit(pulse.ADD, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.add(ingest(_)));\n });\n pulse.visit(pulse.REM, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.rem(_));\n });\n } else {\n pulse.visit(pulse.MOD, t => subflow(t).mod(t));\n pulse.visit(pulse.ADD, t => subflow(t).add(t));\n pulse.visit(pulse.REM, t => subflow(t).rem(t));\n }\n\n if (pulse.clean()) {\n pulse.runAfter(() => this.clean());\n }\n\n return pulse;\n }\n\n});\n\n/**\n * Performs a relational projection, copying selected fields from source\n * tuples to a new set of derived tuples.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.as] - Output field names for each projected\n * field. Any unspecified fields will use the field name provided by\n * the field accessor.\n */\n\nfunction Project(params) {\n Transform.call(this, null, params);\n}\nProject.Definition = {\n 'type': 'Project',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }]\n};\ninherits(Project, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(_.fields, _.as || []),\n derive = fields ? (s, t) => project(s, t, fields, as) : rederive;\n let lut;\n\n if (this.value) {\n lut = this.value;\n } else {\n pulse = pulse.addAll();\n lut = this.value = {};\n }\n\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n pulse.visit(pulse.ADD, t => {\n const dt = derive(t, ingest({}));\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n pulse.visit(pulse.MOD, t => {\n out.mod.push(derive(t, lut[tupleid(t)]));\n });\n return out;\n }\n\n});\n\nfunction project(s, t, fields, as) {\n for (let i = 0, n = fields.length; i < n; ++i) {\n t[as[i]] = fields[i](s);\n }\n\n return t;\n}\n\n/**\n * Proxy the value of another operator as a pure signal value.\n * Ensures no tuples are propagated.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {*} params.value - The value to proxy, becomes the value of this operator.\n */\n\nfunction Proxy(params) {\n Transform.call(this, null, params);\n}\ninherits(Proxy, Transform, {\n transform(_, pulse) {\n this.value = _.value;\n return _.modified('value') ? pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS) : pulse.StopPropagation;\n }\n\n});\n\n/**\n * Generates sample quantile values from an input data stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the data field\n * over which to calculate quantile values.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {Array} [params.probs] - An array of probabilities in\n * the range (0, 1) for which to compute quantile values. If not specified,\n * the *step* parameter will be used.\n * @param {Array} [params.step=0.01] - A probability step size for\n * sampling quantile values. All values from one-half the step size up to\n * 1 (exclusive) will be sampled. This parameter is only used if the\n * *quantiles* parameter is not provided.\n */\n\nfunction Quantile(params) {\n Transform.call(this, null, params);\n}\nQuantile.Definition = {\n 'type': 'Quantile',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'probs',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 0.01\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['prob', 'value']\n }]\n};\nconst EPSILON = 1e-14;\ninherits(Quantile, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n as = _.as || ['prob', 'value'];\n\n if (this.value && !_.modified() && !pulse.changed()) {\n out.source = this.value;\n return out;\n }\n\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(source, _.groupby, _.field),\n names = (_.groupby || []).map(accessorName),\n values = [],\n step = _.step || 0.01,\n p = _.probs || range(step / 2, 1 - EPSILON, step),\n n = p.length;\n groups.forEach(g => {\n const q = quantiles(g, p);\n\n for (let i = 0; i < n; ++i) {\n const t = {};\n\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n\n t[as[0]] = p[i];\n t[as[1]] = q[i];\n values.push(ingest(t));\n }\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n return out;\n }\n\n});\n\n/**\n * Relays a data stream between data processing pipelines.\n * If the derive parameter is set, this transform will create derived\n * copies of observed tuples. This provides derived data streams in which\n * modifications to the tuples do not pollute an upstream data source.\n * @param {object} params - The parameters for this operator.\n * @param {number} [params.derive=false] - Boolean flag indicating if\n * the transform should make derived copies of incoming tuples.\n * @constructor\n */\n\nfunction Relay(params) {\n Transform.call(this, null, params);\n}\ninherits(Relay, Transform, {\n transform(_, pulse) {\n let out, lut;\n\n if (this.value) {\n lut = this.value;\n } else {\n out = pulse = pulse.addAll();\n lut = this.value = {};\n }\n\n if (_.derive) {\n out = pulse.fork(pulse.NO_SOURCE);\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n pulse.visit(pulse.ADD, t => {\n const dt = derive(t);\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n pulse.visit(pulse.MOD, t => {\n const dt = lut[tupleid(t)];\n\n for (const k in t) {\n dt[k] = t[k]; // down stream writes may overwrite re-derived tuples\n // conservatively mark all source fields as modified\n\n out.modifies(k);\n }\n\n out.mod.push(dt);\n });\n }\n\n return out;\n }\n\n});\n\n/**\n * Samples tuples passing through this operator.\n * Uses reservoir sampling to maintain a representative sample.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {number} [params.size=1000] - The maximum number of samples.\n */\n\nfunction Sample(params) {\n Transform.call(this, [], params);\n this.count = 0;\n}\nSample.Definition = {\n 'type': 'Sample',\n 'metadata': {},\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'default': 1000\n }]\n};\ninherits(Sample, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n mod = _.modified('size'),\n num = _.size,\n map = this.value.reduce((m, t) => (m[tupleid(t)] = 1, m), {});\n\n let res = this.value,\n cnt = this.count,\n cap = 0; // sample reservoir update function\n\n function update(t) {\n let p, idx;\n\n if (res.length < num) {\n res.push(t);\n } else {\n idx = ~~((cnt + 1) * random());\n\n if (idx < res.length && idx >= cap) {\n p = res[idx];\n if (map[tupleid(p)]) out.rem.push(p); // eviction\n\n res[idx] = t;\n }\n }\n\n ++cnt;\n }\n\n if (pulse.rem.length) {\n // find all tuples that should be removed, add to output\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n\n if (map[id]) {\n map[id] = -1;\n out.rem.push(t);\n }\n\n --cnt;\n }); // filter removed tuples out of the sample reservoir\n\n res = res.filter(t => map[tupleid(t)] !== -1);\n }\n\n if ((pulse.rem.length || mod) && res.length < num && pulse.source) {\n // replenish sample if backing data source is available\n cap = cnt = res.length;\n pulse.visit(pulse.SOURCE, t => {\n // update, but skip previously sampled tuples\n if (!map[tupleid(t)]) update(t);\n });\n cap = -1;\n }\n\n if (mod && res.length > num) {\n const n = res.length - num;\n\n for (let i = 0; i < n; ++i) {\n map[tupleid(res[i])] = -1;\n out.rem.push(res[i]);\n }\n\n res = res.slice(n);\n }\n\n if (pulse.mod.length) {\n // propagate modified tuples in the sample reservoir\n pulse.visit(pulse.MOD, t => {\n if (map[tupleid(t)]) out.mod.push(t);\n });\n }\n\n if (pulse.add.length) {\n // update sample reservoir\n pulse.visit(pulse.ADD, update);\n }\n\n if (pulse.add.length || cap < 0) {\n // output newly added tuples\n out.add = res.filter(t => !map[tupleid(t)]);\n }\n\n this.count = cnt;\n this.value = out.source = res;\n return out;\n }\n\n});\n\n/**\n * Generates data tuples for a specified sequence range of numbers.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {number} params.start - The first number in the sequence.\n * @param {number} params.stop - The last number (exclusive) in the sequence.\n * @param {number} [params.step=1] - The step size between numbers in the sequence.\n */\n\nfunction Sequence(params) {\n Transform.call(this, null, params);\n}\nSequence.Definition = {\n 'type': 'Sequence',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'start',\n 'type': 'number',\n 'required': true\n }, {\n 'name': 'stop',\n 'type': 'number',\n 'required': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'data'\n }]\n};\ninherits(Sequence, Transform, {\n transform(_, pulse) {\n if (this.value && !_.modified()) return;\n const out = pulse.materialize().fork(pulse.MOD),\n as = _.as || 'data';\n out.rem = this.value ? pulse.rem.concat(this.value) : pulse.rem;\n this.value = range(_.start, _.stop, _.step || 1).map(v => {\n const t = {};\n t[as] = v;\n return ingest(t);\n });\n out.add = pulse.add.concat(this.value);\n return out;\n }\n\n});\n\n/**\n * Propagates a new pulse without any tuples so long as the input\n * pulse contains some added, removed or modified tuples.\n * @param {object} params - The parameters for this operator.\n * @constructor\n */\n\nfunction Sieve(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\ninherits(Sieve, Transform, {\n transform(_, pulse) {\n this.value = pulse.source;\n return pulse.changed() ? pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS) : pulse.StopPropagation;\n }\n\n});\n\n/**\n * Discretize dates to specific time units.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The data field containing date/time values.\n */\n\nfunction TimeUnit(params) {\n Transform.call(this, null, params);\n}\nconst OUTPUT = ['unit0', 'unit1'];\nTimeUnit.Definition = {\n 'type': 'TimeUnit',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'interval',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'units',\n 'type': 'enum',\n 'values': TIME_UNITS,\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'maxbins',\n 'type': 'number',\n 'default': 40\n }, {\n 'name': 'extent',\n 'type': 'date',\n 'array': true\n }, {\n 'name': 'timezone',\n 'type': 'enum',\n 'default': 'local',\n 'values': ['local', 'utc']\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': OUTPUT\n }]\n};\ninherits(TimeUnit, Transform, {\n transform(_, pulse) {\n const field = _.field,\n band = _.interval !== false,\n utc = _.timezone === 'utc',\n floor = this._floor(_, pulse),\n offset = (utc ? utcInterval : timeInterval)(floor.unit).offset,\n as = _.as || OUTPUT,\n u0 = as[0],\n u1 = as[1],\n step = floor.step;\n\n let min = floor.start || Infinity,\n max = floor.stop || -Infinity,\n flag = pulse.ADD;\n\n if (_.modified() || pulse.modified(accessorFields(field))) {\n pulse = pulse.reflow(true);\n flag = pulse.SOURCE;\n min = Infinity;\n max = -Infinity;\n }\n\n pulse.visit(flag, t => {\n const v = field(t);\n let a, b;\n\n if (v == null) {\n t[u0] = null;\n if (band) t[u1] = null;\n } else {\n t[u0] = a = b = floor(v);\n if (band) t[u1] = b = offset(a, step);\n if (a < min) min = a;\n if (b > max) max = b;\n }\n });\n floor.start = min;\n floor.stop = max;\n return pulse.modifies(band ? as : u0);\n },\n\n _floor(_, pulse) {\n const utc = _.timezone === 'utc'; // get parameters\n\n const {\n units,\n step\n } = _.units ? {\n units: _.units,\n step: _.step || 1\n } : timeBin({\n extent: _.extent || extent(pulse.materialize(pulse.SOURCE).source, _.field),\n maxbins: _.maxbins\n }); // check / standardize time units\n\n const tunits = timeUnits(units),\n prev = this.value || {},\n floor = (utc ? utcFloor : timeFloor)(tunits, step);\n floor.unit = peek(tunits);\n floor.units = tunits;\n floor.step = step;\n floor.start = prev.start;\n floor.stop = prev.stop;\n return this.value = floor;\n }\n\n});\n\n/**\n * An index that maps from unique, string-coerced, field values to tuples.\n * Assumes that the field serves as a unique key with no duplicate values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field accessor to index.\n */\n\nfunction TupleIndex(params) {\n Transform.call(this, fastmap(), params);\n}\ninherits(TupleIndex, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow,\n field = _.field,\n index = this.value,\n set = t => index.set(field(t), t);\n\n let mod = true;\n\n if (_.modified('field') || pulse.modified(field.fields)) {\n index.clear();\n pulse.visit(pulse.SOURCE, set);\n } else if (pulse.changed()) {\n pulse.visit(pulse.REM, t => index.delete(field(t)));\n pulse.visit(pulse.ADD, set);\n } else {\n mod = false;\n }\n\n this.modified(mod);\n if (index.empty > df.cleanThreshold) df.runAfter(index.clean);\n return pulse.fork();\n }\n\n});\n\n/**\n * Extracts an array of values. Assumes the source data has already been\n * reduced as needed (e.g., by an upstream Aggregate transform).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The domain field to extract.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting the values. The comparator will be\n * applied to backing tuples prior to value extraction.\n */\n\nfunction Values(params) {\n Transform.call(this, null, params);\n}\ninherits(Values, Transform, {\n transform(_, pulse) {\n const run = !this.value || _.modified('field') || _.modified('sort') || pulse.changed() || _.sort && pulse.modified(_.sort.fields);\n\n if (run) {\n this.value = (_.sort ? pulse.source.slice().sort(stableCompare(_.sort)) : pulse.source).map(_.field);\n }\n }\n\n});\n\nfunction WindowOp(op, field, param, as) {\n const fn = WindowOps[op](field, param);\n return {\n init: fn.init || zero,\n update: function (w, t) {\n t[as] = fn.next(w);\n }\n };\n}\nconst WindowOps = {\n row_number: function () {\n return {\n next: w => w.index + 1\n };\n },\n rank: function () {\n let rank;\n return {\n init: () => rank = 1,\n next: w => {\n const i = w.index,\n data = w.data;\n return i && w.compare(data[i - 1], data[i]) ? rank = i + 1 : rank;\n }\n };\n },\n dense_rank: function () {\n let drank;\n return {\n init: () => drank = 1,\n next: w => {\n const i = w.index,\n d = w.data;\n return i && w.compare(d[i - 1], d[i]) ? ++drank : drank;\n }\n };\n },\n percent_rank: function () {\n const rank = WindowOps.rank(),\n next = rank.next;\n return {\n init: rank.init,\n next: w => (next(w) - 1) / (w.data.length - 1)\n };\n },\n cume_dist: function () {\n let cume;\n return {\n init: () => cume = 0,\n next: w => {\n const d = w.data,\n c = w.compare;\n let i = w.index;\n\n if (cume < i) {\n while (i + 1 < d.length && !c(d[i], d[i + 1])) ++i;\n\n cume = i;\n }\n\n return (1 + cume) / d.length;\n }\n };\n },\n ntile: function (field, num) {\n num = +num;\n if (!(num > 0)) error('ntile num must be greater than zero.');\n const cume = WindowOps.cume_dist(),\n next = cume.next;\n return {\n init: cume.init,\n next: w => Math.ceil(num * next(w))\n };\n },\n lag: function (field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n const i = w.index - offset;\n return i >= 0 ? field(w.data[i]) : null;\n }\n };\n },\n lead: function (field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n const i = w.index + offset,\n d = w.data;\n return i < d.length ? field(d[i]) : null;\n }\n };\n },\n first_value: function (field) {\n return {\n next: w => field(w.data[w.i0])\n };\n },\n last_value: function (field) {\n return {\n next: w => field(w.data[w.i1 - 1])\n };\n },\n nth_value: function (field, nth) {\n nth = +nth;\n if (!(nth > 0)) error('nth_value nth must be greater than zero.');\n return {\n next: w => {\n const i = w.i0 + (nth - 1);\n return i < w.i1 ? field(w.data[i]) : null;\n }\n };\n },\n prev_value: function (field) {\n let prev;\n return {\n init: () => prev = null,\n next: w => {\n const v = field(w.data[w.index]);\n return v != null ? prev = v : prev;\n }\n };\n },\n next_value: function (field) {\n let v, i;\n return {\n init: () => (v = null, i = -1),\n next: w => {\n const d = w.data;\n return w.index <= i ? v : (i = find(field, d, w.index)) < 0 ? (i = d.length, v = null) : v = field(d[i]);\n }\n };\n }\n};\n\nfunction find(field, data, index) {\n for (let n = data.length; index < n; ++index) {\n const v = field(data[index]);\n if (v != null) return index;\n }\n\n return -1;\n}\n\nconst ValidWindowOps = Object.keys(WindowOps);\n\nfunction WindowState(_) {\n const ops = array(_.ops),\n fields = array(_.fields),\n params = array(_.params),\n as = array(_.as),\n outputs = this.outputs = [],\n windows = this.windows = [],\n inputs = {},\n map = {},\n counts = [],\n measures = [];\n let countOnly = true;\n\n function visitInputs(f) {\n array(accessorFields(f)).forEach(_ => inputs[_] = 1);\n }\n\n visitInputs(_.sort);\n ops.forEach((op, i) => {\n const field = fields[i],\n mname = accessorName(field),\n name = measureName(op, mname, as[i]);\n visitInputs(field);\n outputs.push(name); // Window operation\n\n if (hasOwnProperty(WindowOps, op)) {\n windows.push(WindowOp(op, fields[i], params[i], name));\n } // Aggregate operation\n else {\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n\n if (op === 'count') {\n counts.push(name);\n return;\n }\n\n countOnly = false;\n let m = map[mname];\n\n if (!m) {\n m = map[mname] = [];\n m.field = field;\n measures.push(m);\n }\n\n m.push(createMeasure(op, name));\n }\n });\n\n if (counts.length || measures.length) {\n this.cell = cell(measures, counts, countOnly);\n }\n\n this.inputs = Object.keys(inputs);\n}\nconst prototype = WindowState.prototype;\n\nprototype.init = function () {\n this.windows.forEach(_ => _.init());\n if (this.cell) this.cell.init();\n};\n\nprototype.update = function (w, t) {\n const cell = this.cell,\n wind = this.windows,\n data = w.data,\n m = wind && wind.length;\n let j;\n\n if (cell) {\n for (j = w.p0; j < w.i0; ++j) cell.rem(data[j]);\n\n for (j = w.p1; j < w.i1; ++j) cell.add(data[j]);\n\n cell.set(t);\n }\n\n for (j = 0; j < m; ++j) wind[j].update(w, t);\n};\n\nfunction cell(measures, counts, countOnly) {\n measures = measures.map(m => compileMeasures(m, m.field));\n const cell = {\n num: 0,\n agg: null,\n store: false,\n count: counts\n };\n\n if (!countOnly) {\n var n = measures.length,\n a = cell.agg = Array(n),\n i = 0;\n\n for (; i < n; ++i) a[i] = new measures[i](cell);\n }\n\n if (cell.store) {\n var store = cell.data = new TupleStore();\n }\n\n cell.add = function (t) {\n cell.num += 1;\n if (countOnly) return;\n if (store) store.add(t);\n\n for (let i = 0; i < n; ++i) {\n a[i].add(a[i].get(t), t);\n }\n };\n\n cell.rem = function (t) {\n cell.num -= 1;\n if (countOnly) return;\n if (store) store.rem(t);\n\n for (let i = 0; i < n; ++i) {\n a[i].rem(a[i].get(t), t);\n }\n };\n\n cell.set = function (t) {\n let i, n; // consolidate stored values\n\n if (store) store.values(); // update tuple properties\n\n for (i = 0, n = counts.length; i < n; ++i) t[counts[i]] = cell.num;\n\n if (!countOnly) for (i = 0, n = a.length; i < n; ++i) a[i].set(t);\n };\n\n cell.init = function () {\n cell.num = 0;\n if (store) store.reset();\n\n for (let i = 0; i < n; ++i) a[i].init();\n };\n\n return cell;\n}\n\n/**\n * Perform window calculations and write results to the input stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator function for sorting tuples within a window.\n * @param {Array} [params.groupby] - An array of accessors by which to partition tuples into separate windows.\n * @param {Array} params.ops - An array of strings indicating window operations to perform.\n * @param {Array} [params.fields] - An array of accessors\n * for data fields to use as inputs to window operations.\n * @param {Array<*>} [params.params] - An array of parameter values for window operations.\n * @param {Array} [params.as] - An array of output field names for window operations.\n * @param {Array} [params.frame] - Window frame definition as two-element array.\n * @param {boolean} [params.ignorePeers=false] - If true, base window frame boundaries on row\n * number alone, ignoring peers with identical sort values. If false (default),\n * the window boundaries will be adjusted to include peer values.\n */\n\nfunction Window(params) {\n Transform.call(this, {}, params);\n this._mlen = 0;\n this._mods = [];\n}\nWindow.Definition = {\n 'type': 'Window',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidWindowOps.concat(ValidAggregateOps)\n }, {\n 'name': 'params',\n 'type': 'number',\n 'null': true,\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'frame',\n 'type': 'number',\n 'null': true,\n 'array': true,\n 'length': 2,\n 'default': [null, 0]\n }, {\n 'name': 'ignorePeers',\n 'type': 'boolean',\n 'default': false\n }]\n};\ninherits(Window, Transform, {\n transform(_, pulse) {\n this.stamp = pulse.stamp;\n\n const mod = _.modified(),\n cmp = stableCompare(_.sort),\n key = groupkey(_.groupby),\n group = t => this.group(key(t)); // initialize window state\n\n\n let state = this.state;\n\n if (!state || mod) {\n state = this.state = new WindowState(_);\n } // partition input tuples\n\n\n if (mod || pulse.modified(state.inputs)) {\n this.value = {};\n pulse.visit(pulse.SOURCE, t => group(t).add(t));\n } else {\n pulse.visit(pulse.REM, t => group(t).remove(t));\n pulse.visit(pulse.ADD, t => group(t).add(t));\n } // perform window calculations for each modified partition\n\n\n for (let i = 0, n = this._mlen; i < n; ++i) {\n processPartition(this._mods[i], state, cmp, _);\n }\n\n this._mlen = 0;\n this._mods = []; // TODO don't reflow everything?\n\n return pulse.reflow(mod).modifies(state.outputs);\n },\n\n group(key) {\n let group = this.value[key];\n\n if (!group) {\n group = this.value[key] = SortedList(tupleid);\n group.stamp = -1;\n }\n\n if (group.stamp < this.stamp) {\n group.stamp = this.stamp;\n this._mods[this._mlen++] = group;\n }\n\n return group;\n }\n\n});\n\nfunction processPartition(list, state, cmp, _) {\n const sort = _.sort,\n range = sort && !_.ignorePeers,\n frame = _.frame || [null, 0],\n data = list.data(cmp),\n // use cmp for stable sort\n n = data.length,\n b = range ? bisector(sort) : null,\n w = {\n i0: 0,\n i1: 0,\n p0: 0,\n p1: 0,\n index: 0,\n data: data,\n compare: sort || constant(-1)\n };\n state.init();\n\n for (let i = 0; i < n; ++i) {\n setWindow(w, frame, i, n);\n if (range) adjustRange(w, b);\n state.update(w, data[i]);\n }\n}\n\nfunction setWindow(w, f, i, n) {\n w.p0 = w.i0;\n w.p1 = w.i1;\n w.i0 = f[0] == null ? 0 : Math.max(0, i - Math.abs(f[0]));\n w.i1 = f[1] == null ? n : Math.min(n, i + Math.abs(f[1]) + 1);\n w.index = i;\n} // if frame type is 'range', adjust window for peer values\n\n\nfunction adjustRange(w, bisect) {\n const r0 = w.i0,\n r1 = w.i1 - 1,\n c = w.compare,\n d = w.data,\n n = d.length - 1;\n if (r0 > 0 && !c(d[r0], d[r0 - 1])) w.i0 = bisect.left(d, d[r0]);\n if (r1 < n && !c(d[r1], d[r1 + 1])) w.i1 = bisect.right(d, d[r1]);\n}\n\nexport { Aggregate as aggregate, Bin as bin, Collect as collect, Compare as compare, CountPattern as countpattern, Cross as cross, Density as density, DotBin as dotbin, Expression as expression, Extent as extent, Facet as facet, Field as field, Filter as filter, Flatten as flatten, Fold as fold, Formula as formula, Generate as generate, Impute as impute, JoinAggregate as joinaggregate, KDE as kde, Key as key, Load as load, Lookup as lookup, MultiExtent as multiextent, MultiValues as multivalues, Params as params, Pivot as pivot, PreFacet as prefacet, Project as project, Proxy as proxy, Quantile as quantile, Relay as relay, Sample as sample, Sequence as sequence, Sieve as sieve, Subflow as subflow, TimeUnit as timeunit, TupleIndex as tupleindex, Values as values, Window as window };\n","export default function mean(values, valueof) {\n let count = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n }\n if (count) return sum / count;\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n var x1 = null,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import {pi, tau} from \"../math.js\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop.js\";\nimport {point} from \"./cardinal.js\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal.js\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed.js\";\nimport noop from \"../noop.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","function domCanvas(w, h) {\n if (typeof document !== 'undefined' && document.createElement) {\n const c = document.createElement('canvas');\n\n if (c && c.getContext) {\n c.width = w;\n c.height = h;\n return c;\n }\n }\n\n return null;\n}\nconst domImage = () => typeof Image !== 'undefined' ? Image : null;\n\nexport { domCanvas as canvas, domCanvas, domImage as image };\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new Map(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new Map();\n for (const value of _) {\n const key = value + \"\";\n if (index.has(key)) continue;\n index.set(key, domain.push(value));\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return hcl2lab(this).rgb();\n }\n}));\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n if (values === undefined) values = interpolate, interpolate = value;\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n","import {hue} from \"./color.js\";\n\nexport default function(a, b) {\n var i = hue(+a, +b);\n return function(t) {\n var x = i(t);\n return x - 360 * Math.floor(x / 360);\n };\n}\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n a = color(start.a, end.a),\n b = color(start.b, end.b),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport function loggish(transform) {\n var scale = transform(transformLog, transformExp),\n domain = scale.domain,\n base = 10,\n logs,\n pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.floor(i), j = Math.ceil(j);\n if (u > 0) for (; i <= j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i <= j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n if (z.length * 2 < n) z = ticks(u, v, n);\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n return scale;\n}\n\nexport default function log() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, log()).base(scale.base());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import {bisector, tickStep} from \"d3-array\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target),\n step;\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n return interval.every(step);\n }\n\n return interval;\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1]))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n s = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1, r2;\n return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n return scale;\n };\n}\n\nexport default function diverging() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, diverging());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","import { toNumber, peek, hasOwnProperty, toSet, array, constant, isNumber, span, isObject, isString, error, isArray } from 'vega-util';\nimport { bisectRight, range, bisect } from 'd3-array';\nimport * as $ from 'd3-scale';\nimport { scaleOrdinal, tickFormat as tickFormat$1 } from 'd3-scale';\nexport { scaleImplicit } from 'd3-scale';\nimport * as $$1 from 'd3-interpolate';\nimport { timeInterval, utcInterval } from 'vega-time';\n\nfunction bandSpace (count, paddingInner, paddingOuter) {\n const space = count - paddingInner + paddingOuter * 2;\n return count ? space > 0 ? space : 1 : 0;\n}\n\nconst Identity = 'identity';\nconst Linear = 'linear';\nconst Log = 'log';\nconst Pow = 'pow';\nconst Sqrt = 'sqrt';\nconst Symlog = 'symlog';\nconst Time = 'time';\nconst UTC = 'utc';\nconst Sequential = 'sequential';\nconst Diverging = 'diverging';\nconst Quantile = 'quantile';\nconst Quantize = 'quantize';\nconst Threshold = 'threshold';\nconst Ordinal = 'ordinal';\nconst Point = 'point';\nconst Band = 'band';\nconst BinOrdinal = 'bin-ordinal'; // categories\n\nconst Continuous = 'continuous';\nconst Discrete = 'discrete';\nconst Discretizing = 'discretizing';\nconst Interpolating = 'interpolating';\nconst Temporal = 'temporal';\n\nfunction invertRange (scale) {\n return function (_) {\n let lo = _[0],\n hi = _[1],\n t;\n\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n\n return [scale.invert(lo), scale.invert(hi)];\n };\n}\n\nfunction invertRangeExtent (scale) {\n return function (_) {\n const range = scale.range();\n let lo = _[0],\n hi = _[1],\n min = -1,\n max,\n t,\n i,\n n;\n\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n\n for (i = 0, n = range.length; i < n; ++i) {\n if (range[i] >= lo && range[i] <= hi) {\n if (min < 0) min = i;\n max = i;\n }\n }\n\n if (min < 0) return undefined;\n lo = scale.invertExtent(range[min]);\n hi = scale.invertExtent(range[max]);\n return [lo[0] === undefined ? lo[1] : lo[0], hi[1] === undefined ? hi[0] : hi[1]];\n };\n}\n\nfunction band() {\n const scale = scaleOrdinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range;\n let range$1 = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n delete scale.unknown;\n\n function rescale() {\n const n = domain().length,\n reverse = range$1[1] < range$1[0],\n stop = range$1[1 - reverse],\n space = bandSpace(n, paddingInner, paddingOuter);\n let start = range$1[reverse - 0];\n step = (stop - start) / (space || 1);\n\n if (round) {\n step = Math.floor(step);\n }\n\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n\n if (round) {\n start = Math.round(start);\n bandwidth = Math.round(bandwidth);\n }\n\n const values = range(n).map(i => start + step * i);\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function (_) {\n if (arguments.length) {\n domain(_);\n return rescale();\n } else {\n return domain();\n }\n };\n\n scale.range = function (_) {\n if (arguments.length) {\n range$1 = [+_[0], +_[1]];\n return rescale();\n } else {\n return range$1.slice();\n }\n };\n\n scale.rangeRound = function (_) {\n range$1 = [+_[0], +_[1]];\n round = true;\n return rescale();\n };\n\n scale.bandwidth = function () {\n return bandwidth;\n };\n\n scale.step = function () {\n return step;\n };\n\n scale.round = function (_) {\n if (arguments.length) {\n round = !!_;\n return rescale();\n } else {\n return round;\n }\n };\n\n scale.padding = function (_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n paddingInner = paddingOuter;\n return rescale();\n } else {\n return paddingInner;\n }\n };\n\n scale.paddingInner = function (_) {\n if (arguments.length) {\n paddingInner = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingInner;\n }\n };\n\n scale.paddingOuter = function (_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingOuter;\n }\n };\n\n scale.align = function (_) {\n if (arguments.length) {\n align = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return align;\n }\n };\n\n scale.invertRange = function (_) {\n // bail if range has null or undefined values\n if (_[0] == null || _[1] == null) return;\n const reverse = range$1[1] < range$1[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1;\n let lo = +_[0],\n hi = +_[1],\n a,\n b,\n t; // bail if either range endpoint is invalid\n\n if (lo !== lo || hi !== hi) return; // order range inputs, bail if outside of scale range\n\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n\n if (hi < values[0] || lo > range$1[1 - reverse]) return; // binary search to index into scale range\n\n a = Math.max(0, bisectRight(values, lo) - 1);\n b = lo === hi ? a : bisectRight(values, hi) - 1; // increment index a if lo is within padding gap\n\n if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) {\n // map + swap\n t = a;\n a = n - b;\n b = n - t;\n }\n\n return a > b ? undefined : domain().slice(a, b + 1);\n };\n\n scale.invert = function (_) {\n const value = scale.invertRange([_, _]);\n return value ? value[0] : value;\n };\n\n scale.copy = function () {\n return band().domain(domain()).range(range$1).round(round).paddingInner(paddingInner).paddingOuter(paddingOuter).align(align);\n };\n\n return rescale();\n}\n\nfunction pointish(scale) {\n const copy = scale.copy;\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n\n scale.copy = function () {\n return pointish(copy());\n };\n\n return scale;\n}\n\nfunction point() {\n return pointish(band().paddingInner(1));\n}\n\nvar map = Array.prototype.map;\nfunction numbers(_) {\n return map.call(_, toNumber);\n}\n\nconst slice = Array.prototype.slice;\n\nfunction scaleBinOrdinal() {\n let domain = [],\n range = [];\n\n function scale(x) {\n return x == null || x !== x ? undefined : range[(bisect(domain, x) - 1) % range.length];\n }\n\n scale.domain = function (_) {\n if (arguments.length) {\n domain = numbers(_);\n return scale;\n } else {\n return domain.slice();\n }\n };\n\n scale.range = function (_) {\n if (arguments.length) {\n range = slice.call(_);\n return scale;\n } else {\n return range.slice();\n }\n };\n\n scale.tickFormat = function (count, specifier) {\n return tickFormat$1(domain[0], peek(domain), count == null ? 10 : count, specifier);\n };\n\n scale.copy = function () {\n return scaleBinOrdinal().domain(scale.domain()).range(scale.range());\n };\n\n return scale;\n}\n\nconst scales = {};\n/**\n * Augment scales with their type and needed inverse methods.\n */\n\nfunction create(type, constructor, metadata) {\n const ctr = function scale() {\n const s = constructor();\n\n if (!s.invertRange) {\n s.invertRange = s.invert ? invertRange(s) : s.invertExtent ? invertRangeExtent(s) : undefined;\n }\n\n s.type = type;\n return s;\n };\n\n ctr.metadata = toSet(array(metadata));\n return ctr;\n}\n\nfunction scale(type, scale, metadata) {\n if (arguments.length > 1) {\n scales[type] = create(type, scale, metadata);\n return this;\n } else {\n return isValidScaleType(type) ? scales[type] : undefined;\n }\n} // identity scale\n\nscale(Identity, $.scaleIdentity); // continuous scales\n\nscale(Linear, $.scaleLinear, Continuous);\nscale(Log, $.scaleLog, [Continuous, Log]);\nscale(Pow, $.scalePow, Continuous);\nscale(Sqrt, $.scaleSqrt, Continuous);\nscale(Symlog, $.scaleSymlog, Continuous);\nscale(Time, $.scaleTime, [Continuous, Temporal]);\nscale(UTC, $.scaleUtc, [Continuous, Temporal]); // sequential scales\n\nscale(Sequential, $.scaleSequential, [Continuous, Interpolating]); // backwards compat\n\nscale(`${Sequential}-${Linear}`, $.scaleSequential, [Continuous, Interpolating]);\nscale(`${Sequential}-${Log}`, $.scaleSequentialLog, [Continuous, Interpolating, Log]);\nscale(`${Sequential}-${Pow}`, $.scaleSequentialPow, [Continuous, Interpolating]);\nscale(`${Sequential}-${Sqrt}`, $.scaleSequentialSqrt, [Continuous, Interpolating]);\nscale(`${Sequential}-${Symlog}`, $.scaleSequentialSymlog, [Continuous, Interpolating]); // diverging scales\n\nscale(`${Diverging}-${Linear}`, $.scaleDiverging, [Continuous, Interpolating]);\nscale(`${Diverging}-${Log}`, $.scaleDivergingLog, [Continuous, Interpolating, Log]);\nscale(`${Diverging}-${Pow}`, $.scaleDivergingPow, [Continuous, Interpolating]);\nscale(`${Diverging}-${Sqrt}`, $.scaleDivergingSqrt, [Continuous, Interpolating]);\nscale(`${Diverging}-${Symlog}`, $.scaleDivergingSymlog, [Continuous, Interpolating]); // discretizing scales\n\nscale(Quantile, $.scaleQuantile, [Discretizing, Quantile]);\nscale(Quantize, $.scaleQuantize, Discretizing);\nscale(Threshold, $.scaleThreshold, Discretizing); // discrete scales\n\nscale(BinOrdinal, scaleBinOrdinal, [Discrete, Discretizing]);\nscale(Ordinal, $.scaleOrdinal, Discrete);\nscale(Band, band, Discrete);\nscale(Point, point, Discrete);\nfunction isValidScaleType(type) {\n return hasOwnProperty(scales, type);\n}\n\nfunction hasType(key, type) {\n const s = scales[key];\n return s && s.metadata[type];\n}\n\nfunction isContinuous(key) {\n return hasType(key, Continuous);\n}\nfunction isDiscrete(key) {\n return hasType(key, Discrete);\n}\nfunction isDiscretizing(key) {\n return hasType(key, Discretizing);\n}\nfunction isLogarithmic(key) {\n return hasType(key, Log);\n}\nfunction isTemporal(key) {\n return hasType(key, Temporal);\n}\nfunction isInterpolating(key) {\n return hasType(key, Interpolating);\n}\nfunction isQuantile(key) {\n return hasType(key, Quantile);\n}\n\nconst scaleProps = ['clamp', 'base', 'constant', 'exponent'];\nfunction interpolateRange(interpolator, range) {\n const start = range[0],\n span = peek(range) - start;\n return function (i) {\n return interpolator(start + i * span);\n };\n}\nfunction interpolateColors(colors, type, gamma) {\n return $$1.piecewise(interpolate(type || 'rgb', gamma), colors);\n}\nfunction quantizeInterpolator(interpolator, count) {\n const samples = new Array(count),\n n = count + 1;\n\n for (let i = 0; i < count;) samples[i] = interpolator(++i / n);\n\n return samples;\n}\nfunction scaleCopy(scale) {\n const t = scale.type,\n s = scale.copy();\n s.type = t;\n return s;\n}\nfunction scaleFraction(scale$1, min, max) {\n const delta = max - min;\n let i, t, s;\n\n if (!delta || !Number.isFinite(delta)) {\n return constant(0.5);\n } else {\n i = (t = scale$1.type).indexOf('-');\n t = i < 0 ? t : t.slice(i + 1);\n s = scale(t)().domain([min, max]).range([0, 1]);\n scaleProps.forEach(m => scale$1[m] ? s[m](scale$1[m]()) : 0);\n return s;\n }\n}\nfunction interpolate(type, gamma) {\n const interp = $$1[method(type)];\n return gamma != null && interp && interp.gamma ? interp.gamma(gamma) : interp;\n}\n\nfunction method(type) {\n return 'interpolate' + type.toLowerCase().split('-').map(s => s[0].toUpperCase() + s.slice(1)).join('');\n}\n\nconst continuous = {\n blues: 'cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90',\n greens: 'd3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429',\n greys: 'e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e',\n oranges: 'fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303',\n purples: 'e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c',\n reds: 'fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13',\n blueGreen: 'd5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429',\n bluePurple: 'ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71',\n greenBlue: 'd3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1',\n orangeRed: 'fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403',\n purpleBlue: 'dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281',\n purpleBlueGreen: 'dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353',\n purpleRed: 'dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a',\n redPurple: 'fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174',\n yellowGreen: 'e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034',\n yellowOrangeBrown: 'feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204',\n yellowOrangeRed: 'fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225',\n blueOrange: '134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07',\n brownBlueGreen: '704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147',\n purpleGreen: '5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29',\n purpleOrange: '4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07',\n redBlue: '8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85',\n redGrey: '8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434',\n yellowGreenBlue: 'eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185',\n redYellowBlue: 'a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695',\n redYellowGreen: 'a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837',\n pinkYellowGreen: '8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419',\n spectral: '9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2',\n viridis: '440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725',\n magma: '0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf',\n inferno: '0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4',\n plasma: '0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921',\n cividis: '00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647',\n rainbow: '6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa',\n sinebow: 'ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040',\n turbo: '23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00',\n browns: 'eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632',\n tealBlues: 'bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985',\n teals: 'bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667',\n warmGreys: 'dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e',\n goldGreen: 'f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36',\n goldOrange: 'f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26',\n goldRed: 'f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e',\n lightGreyRed: 'efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b',\n lightGreyTeal: 'e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc',\n lightMulti: 'e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c',\n lightOrange: 'f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b',\n lightTealBlue: 'e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988',\n darkBlue: '3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff',\n darkGold: '3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff',\n darkGreen: '3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa',\n darkMulti: '3737371f5287197d8c29a86995ce3fffe800ffffff',\n darkRed: '3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c'\n};\nconst discrete = {\n category10: '1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf',\n category20: '1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5',\n category20b: '393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6',\n category20c: '3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9',\n tableau10: '4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac',\n tableau20: '4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5',\n accent: '7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666',\n dark2: '1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666',\n paired: 'a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928',\n pastel1: 'fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2',\n pastel2: 'b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc',\n set1: 'e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999',\n set2: '66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3',\n set3: '8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f'\n};\n\nfunction colors(palette) {\n const n = palette.length / 6 | 0,\n c = new Array(n);\n\n for (let i = 0; i < n;) {\n c[i] = '#' + palette.slice(i * 6, ++i * 6);\n }\n\n return c;\n}\n\nfunction apply(_, f) {\n for (const k in _) scheme(k, f(_[k]));\n}\n\nconst schemes = {};\napply(discrete, colors);\napply(continuous, _ => interpolateColors(colors(_)));\nfunction scheme(name, scheme) {\n name = name && name.toLowerCase();\n\n if (arguments.length > 1) {\n schemes[name] = scheme;\n return this;\n } else {\n return schemes[name];\n }\n}\n\nconst SymbolLegend = 'symbol';\nconst DiscreteLegend = 'discrete';\nconst GradientLegend = 'gradient';\n\nconst defaultFormatter = value => isArray(value) ? value.map(v => String(v)) : String(value);\n\nconst ascending = (a, b) => a[1] - b[1];\n\nconst descending = (a, b) => b[1] - a[1];\n/**\n * Determine the tick count or interval function.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} count - The desired tick count or interval specifier.\n * @param {number} minStep - The desired minimum step between tick values.\n * @return {*} - The tick count or interval function.\n */\n\n\nfunction tickCount(scale, count, minStep) {\n let step;\n\n if (isNumber(count)) {\n if (scale.bins) {\n count = Math.max(count, scale.bins.length);\n }\n\n if (minStep != null) {\n count = Math.min(count, Math.floor(span(scale.domain()) / minStep || 1));\n }\n }\n\n if (isObject(count)) {\n step = count.step;\n count = count.interval;\n }\n\n if (isString(count)) {\n count = scale.type === Time ? timeInterval(count) : scale.type == UTC ? utcInterval(count) : error('Only time and utc scales accept interval strings.');\n if (step) count = count.every(step);\n }\n\n return count;\n}\n/**\n * Filter a set of candidate tick values, ensuring that only tick values\n * that lie within the scale range are included.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {Array<*>} ticks - The candidate tick values.\n * @param {*} count - The tick count or interval function.\n * @return {Array<*>} - The filtered tick values.\n */\n\nfunction validTicks(scale, ticks, count) {\n let range = scale.range(),\n lo = range[0],\n hi = peek(range),\n cmp = ascending;\n\n if (lo > hi) {\n range = hi;\n hi = lo;\n lo = range;\n cmp = descending;\n }\n\n lo = Math.floor(lo);\n hi = Math.ceil(hi); // filter ticks to valid values within the range\n // additionally sort ticks in range order (#2579)\n\n ticks = ticks.map(v => [v, scale(v)]).filter(_ => lo <= _[1] && _[1] <= hi).sort(cmp).map(_ => _[0]);\n\n if (count > 0 && ticks.length > 1) {\n const endpoints = [ticks[0], peek(ticks)];\n\n while (ticks.length > count && ticks.length >= 3) {\n ticks = ticks.filter((_, i) => !(i % 2));\n }\n\n if (ticks.length < 3) {\n ticks = endpoints;\n }\n }\n\n return ticks;\n}\n/**\n * Generate tick values for the given scale and approximate tick count or\n * interval value. If the scale has a 'ticks' method, it will be used to\n * generate the ticks, with the count argument passed as a parameter. If the\n * scale lacks a 'ticks' method, the full scale domain will be returned.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} [count] - The approximate number of desired ticks.\n * @return {Array<*>} - The generated tick values.\n */\n\nfunction tickValues(scale, count) {\n return scale.bins ? validTicks(scale, scale.bins) : scale.ticks ? scale.ticks(count) : scale.domain();\n}\n/**\n * Generate a label format function for a scale. If the scale has a\n * 'tickFormat' method, it will be used to generate the formatter, with the\n * count and specifier arguments passed as parameters. If the scale lacks a\n * 'tickFormat' method, the returned formatter performs simple string coercion.\n * If the input scale is a logarithmic scale and the format specifier does not\n * indicate a desired decimal precision, a special variable precision formatter\n * that automatically trims trailing zeroes will be generated.\n * @param {Scale} scale - The scale for which to generate the label formatter.\n * @param {*} [count] - The approximate number of desired ticks.\n * @param {string} [specifier] - The format specifier. Must be a legal d3\n * specifier string (see https://github.com/d3/d3-format#formatSpecifier) or\n * time multi-format specifier object.\n * @return {function(*):string} - The generated label formatter.\n */\n\nfunction tickFormat(locale, scale, count, specifier, formatType, noSkip) {\n const type = scale.type;\n let format = defaultFormatter;\n\n if (type === Time || formatType === Time) {\n format = locale.timeFormat(specifier);\n } else if (type === UTC || formatType === UTC) {\n format = locale.utcFormat(specifier);\n } else if (isLogarithmic(type)) {\n const varfmt = locale.formatFloat(specifier);\n\n if (noSkip || scale.bins) {\n format = varfmt;\n } else {\n const test = tickLog(scale, count, false);\n\n format = _ => test(_) ? varfmt(_) : '';\n }\n } else if (scale.tickFormat) {\n // if d3 scale has tickFormat, it must be continuous\n const d = scale.domain();\n format = locale.formatSpan(d[0], d[d.length - 1], count, specifier);\n } else if (specifier) {\n format = locale.format(specifier);\n }\n\n return format;\n}\nfunction tickLog(scale, count, values) {\n const ticks = tickValues(scale, count),\n base = scale.base(),\n logb = Math.log(base),\n k = Math.max(1, base * count / ticks.length); // apply d3-scale's log format filter criteria\n\n const test = d => {\n let i = d / Math.pow(base, Math.round(Math.log(d) / logb));\n if (i * base < base - 0.5) i *= base;\n return i <= k;\n };\n\n return values ? ticks.filter(test) : test;\n}\n\nconst symbols = {\n [Quantile]: 'quantiles',\n [Quantize]: 'thresholds',\n [Threshold]: 'domain'\n};\nconst formats = {\n [Quantile]: 'quantiles',\n [Quantize]: 'domain'\n};\nfunction labelValues(scale, count) {\n return scale.bins ? binValues(scale.bins) : scale.type === Log ? tickLog(scale, count, true) : symbols[scale.type] ? thresholdValues(scale[symbols[scale.type]]()) : tickValues(scale, count);\n}\nfunction thresholdFormat(locale, scale, specifier) {\n const _ = scale[formats[scale.type]](),\n n = _.length;\n\n let d = n > 1 ? _[1] - _[0] : _[0],\n i;\n\n for (i = 1; i < n; ++i) {\n d = Math.min(d, _[i] - _[i - 1]);\n } // tickCount = 3 ticks times 10 for increased resolution\n\n\n return locale.formatSpan(0, d, 3 * 10, specifier);\n}\n\nfunction thresholdValues(thresholds) {\n const values = [-Infinity].concat(thresholds);\n values.max = +Infinity;\n return values;\n}\n\nfunction binValues(bins) {\n const values = bins.slice(0, -1);\n values.max = peek(bins);\n return values;\n}\n\nconst isDiscreteRange = scale => symbols[scale.type] || scale.bins;\n\nfunction labelFormat(locale, scale, count, type, specifier, formatType, noSkip) {\n const format = formats[scale.type] && formatType !== Time && formatType !== UTC ? thresholdFormat(locale, scale, specifier) : tickFormat(locale, scale, count, specifier, formatType, noSkip);\n return type === SymbolLegend && isDiscreteRange(scale) ? formatRange(format) : type === DiscreteLegend ? formatDiscrete(format) : formatPoint(format);\n}\n\nconst formatRange = format => (value, index, array) => {\n const limit = get(array[index + 1], get(array.max, +Infinity)),\n lo = formatValue(value, format),\n hi = formatValue(limit, format);\n return lo && hi ? lo + ' \\u2013 ' + hi : hi ? '< ' + hi : '\\u2265 ' + lo;\n};\n\nconst get = (value, dflt) => value != null ? value : dflt;\n\nconst formatDiscrete = format => (value, index) => index ? format(value) : null;\n\nconst formatPoint = format => value => format(value);\n\nconst formatValue = (value, format) => Number.isFinite(value) ? format(value) : null;\n\nfunction labelFraction(scale) {\n const domain = scale.domain(),\n count = domain.length - 1;\n let lo = +domain[0],\n hi = +peek(domain),\n span = hi - lo;\n\n if (scale.type === Threshold) {\n const adjust = count ? span / count : 0.1;\n lo -= adjust;\n hi += adjust;\n span = hi - lo;\n }\n\n return value => (value - lo) / span;\n}\n\nfunction format(locale, scale, specifier, formatType) {\n const type = formatType || scale.type; // replace abbreviated time specifiers to improve screen reader experience\n\n if (isString(specifier) && isTemporal(type)) {\n specifier = specifier.replace(/%a/g, '%A').replace(/%b/g, '%B');\n }\n\n return !specifier && type === Time ? locale.timeFormat('%A, %d %B %Y, %X') : !specifier && type === UTC ? locale.utcFormat('%A, %d %B %Y, %X UTC') : labelFormat(locale, scale, 5, null, specifier, formatType, true);\n}\n\nfunction domainCaption(locale, scale, opt) {\n opt = opt || {};\n const max = Math.max(3, opt.maxlen || 7),\n fmt = format(locale, scale, opt.format, opt.formatType); // if scale breaks domain into bins, describe boundaries\n\n if (isDiscretizing(scale.type)) {\n const v = labelValues(scale).slice(1).map(fmt),\n n = v.length;\n return `${n} boundar${n === 1 ? 'y' : 'ies'}: ${v.join(', ')}`;\n } // if scale domain is discrete, list values\n else if (isDiscrete(scale.type)) {\n const d = scale.domain(),\n n = d.length,\n v = n > max ? d.slice(0, max - 2).map(fmt).join(', ') + ', ending with ' + d.slice(-1).map(fmt) : d.map(fmt).join(', ');\n return `${n} value${n === 1 ? '' : 's'}: ${v}`;\n } // if scale domain is continuous, describe value range\n else {\n const d = scale.domain();\n return `values from ${fmt(d[0])} to ${fmt(peek(d))}`;\n }\n}\n\nexport { Band, BinOrdinal, DiscreteLegend, Diverging, GradientLegend, Identity, Linear, Log, Ordinal, Point, Pow, Quantile, Quantize, Sequential, Sqrt, SymbolLegend, Symlog, Threshold, Time, UTC, bandSpace, domainCaption, interpolate, interpolateColors, interpolateRange, isContinuous, isDiscrete, isDiscretizing, isInterpolating, isLogarithmic, isQuantile, isTemporal, isValidScaleType, labelFormat, labelFraction, labelValues, quantizeInterpolator, scale, scaleCopy, scaleFraction, scheme, tickCount, tickFormat, tickValues, validTicks };\n","import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n var unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n return linearish(scale);\n}\n","import {calendar} from \"./time.js\";\nimport {utcFormat} from \"d3-time-format\";\nimport {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond} from \"d3-time\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n return initRange.apply(calendar(utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import { hasOwnProperty, isFunction, inherits, truthy, lruCache, isArray, error, toSet, array, peek, extend, isNumber, isObject } from 'vega-util';\nimport { curveBasis, curveBasisClosed, curveBasisOpen, curveBundle, curveCardinal, curveCardinalOpen, curveCardinalClosed, curveCatmullRom, curveCatmullRomClosed, curveCatmullRomOpen, curveLinear, curveLinearClosed, curveMonotoneY, curveMonotoneX, curveNatural, curveStep, curveStepAfter, curveStepBefore, arc as arc$2, area as area$2, line as line$2, symbol as symbol$2 } from 'd3-shape';\nimport { path as path$3 } from 'd3-path';\nimport { image as image$1, canvas } from 'vega-canvas';\nimport { loader } from 'vega-loader';\nimport { isDiscrete, domainCaption } from 'vega-scale';\n\nlet gradient_id = 0;\nfunction resetSVGGradientId() {\n gradient_id = 0;\n}\nconst patternPrefix = 'p_';\nfunction isGradient(value) {\n return value && value.gradient;\n}\nfunction gradientRef(g, defs, base) {\n const type = g.gradient;\n let id = g.id,\n prefix = type === 'radial' ? patternPrefix : ''; // check id, assign default values as needed\n\n if (!id) {\n id = g.id = 'gradient_' + gradient_id++;\n\n if (type === 'radial') {\n g.x1 = get(g.x1, 0.5);\n g.y1 = get(g.y1, 0.5);\n g.r1 = get(g.r1, 0);\n g.x2 = get(g.x2, 0.5);\n g.y2 = get(g.y2, 0.5);\n g.r2 = get(g.r2, 0.5);\n prefix = patternPrefix;\n } else {\n g.x1 = get(g.x1, 0);\n g.y1 = get(g.y1, 0);\n g.x2 = get(g.x2, 1);\n g.y2 = get(g.y2, 0);\n }\n } // register definition\n\n\n defs[id] = g; // return url reference\n\n return 'url(' + (base || '') + '#' + prefix + id + ')';\n}\n\nfunction get(val, def) {\n return val != null ? val : def;\n}\n\nfunction Gradient (p0, p1) {\n var stops = [],\n gradient;\n return gradient = {\n gradient: 'linear',\n x1: p0 ? p0[0] : 0,\n y1: p0 ? p0[1] : 0,\n x2: p1 ? p1[0] : 1,\n y2: p1 ? p1[1] : 0,\n stops: stops,\n stop: function (offset, color) {\n stops.push({\n offset: offset,\n color: color\n });\n return gradient;\n }\n };\n}\n\nconst lookup = {\n 'basis': {\n curve: curveBasis\n },\n 'basis-closed': {\n curve: curveBasisClosed\n },\n 'basis-open': {\n curve: curveBasisOpen\n },\n 'bundle': {\n curve: curveBundle,\n tension: 'beta',\n value: 0.85\n },\n 'cardinal': {\n curve: curveCardinal,\n tension: 'tension',\n value: 0\n },\n 'cardinal-open': {\n curve: curveCardinalOpen,\n tension: 'tension',\n value: 0\n },\n 'cardinal-closed': {\n curve: curveCardinalClosed,\n tension: 'tension',\n value: 0\n },\n 'catmull-rom': {\n curve: curveCatmullRom,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-closed': {\n curve: curveCatmullRomClosed,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-open': {\n curve: curveCatmullRomOpen,\n tension: 'alpha',\n value: 0.5\n },\n 'linear': {\n curve: curveLinear\n },\n 'linear-closed': {\n curve: curveLinearClosed\n },\n 'monotone': {\n horizontal: curveMonotoneY,\n vertical: curveMonotoneX\n },\n 'natural': {\n curve: curveNatural\n },\n 'step': {\n curve: curveStep\n },\n 'step-after': {\n curve: curveStepAfter\n },\n 'step-before': {\n curve: curveStepBefore\n }\n};\nfunction curves(type, orientation, tension) {\n var entry = hasOwnProperty(lookup, type) && lookup[type],\n curve = null;\n\n if (entry) {\n curve = entry.curve || entry[orientation || 'vertical'];\n\n if (entry.tension && tension != null) {\n curve = curve[entry.tension](tension);\n }\n }\n\n return curve;\n}\n\n// Path parsing and rendering code adapted from fabric.js -- Thanks!\nconst cmdlen = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7\n},\n regexp = [/([MLHVCSQTAZmlhvcsqtaz])/g, /###/, /(\\.\\d+)(\\.\\d)/g, /(\\d)([-+])/g, /\\s|,|###/];\nfunction pathParse (pathstr) {\n const result = [];\n let curr, chunks, parsed, param, cmd, len, i, j, n, m; // First, break path into command sequence\n\n const path = pathstr.slice().replace(regexp[0], '###$1').split(regexp[1]).slice(1); // Next, parse each command in turn\n\n for (i = 0, n = path.length; i < n; ++i) {\n curr = path[i];\n chunks = curr.slice(1).trim().replace(regexp[2], '$1###$2').replace(regexp[3], '$1###$2').split(regexp[4]);\n cmd = curr.charAt(0);\n parsed = [cmd];\n\n for (j = 0, m = chunks.length; j < m; ++j) {\n if ((param = +chunks[j]) === param) {\n // not NaN\n parsed.push(param);\n }\n }\n\n len = cmdlen[cmd.toLowerCase()];\n\n if (parsed.length - 1 > len) {\n const m = parsed.length;\n j = 1;\n result.push([cmd].concat(parsed.slice(j, j += len))); // handle implicit lineTo (#2803)\n\n cmd = cmd === 'M' ? 'L' : cmd === 'm' ? 'l' : cmd;\n\n for (; j < m; j += len) {\n result.push([cmd].concat(parsed.slice(j, j + len)));\n }\n } else {\n result.push(parsed);\n }\n }\n\n return result;\n}\n\nconst DegToRad = Math.PI / 180;\nconst Epsilon = 1e-14;\nconst HalfPi = Math.PI / 2;\nconst Tau = Math.PI * 2;\nconst HalfSqrt3 = Math.sqrt(3) / 2;\n\nvar segmentCache = {};\nvar bezierCache = {};\nvar join = [].join; // Copied from Inkscape svgtopdf, thanks!\n\nfunction segments(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\n const key = join.call(arguments);\n\n if (segmentCache[key]) {\n return segmentCache[key];\n }\n\n const th = rotateX * DegToRad;\n const sin_th = Math.sin(th);\n const cos_th = Math.cos(th);\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n const px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\n const py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\n let pl = px * px / (rx * rx) + py * py / (ry * ry);\n\n if (pl > 1) {\n pl = Math.sqrt(pl);\n rx *= pl;\n ry *= pl;\n }\n\n const a00 = cos_th / rx;\n const a01 = sin_th / rx;\n const a10 = -sin_th / ry;\n const a11 = cos_th / ry;\n const x0 = a00 * ox + a01 * oy;\n const y0 = a10 * ox + a11 * oy;\n const x1 = a00 * x + a01 * y;\n const y1 = a10 * x + a11 * y;\n const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\n let sfactor_sq = 1 / d - 0.25;\n if (sfactor_sq < 0) sfactor_sq = 0;\n let sfactor = Math.sqrt(sfactor_sq);\n if (sweep == large) sfactor = -sfactor;\n const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\n const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\n const th0 = Math.atan2(y0 - yc, x0 - xc);\n const th1 = Math.atan2(y1 - yc, x1 - xc);\n let th_arc = th1 - th0;\n\n if (th_arc < 0 && sweep === 1) {\n th_arc += Tau;\n } else if (th_arc > 0 && sweep === 0) {\n th_arc -= Tau;\n }\n\n const segs = Math.ceil(Math.abs(th_arc / (HalfPi + 0.001)));\n const result = [];\n\n for (let i = 0; i < segs; ++i) {\n const th2 = th0 + i * th_arc / segs;\n const th3 = th0 + (i + 1) * th_arc / segs;\n result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\n }\n\n return segmentCache[key] = result;\n}\nfunction bezier(params) {\n const key = join.call(params);\n\n if (bezierCache[key]) {\n return bezierCache[key];\n }\n\n var cx = params[0],\n cy = params[1],\n th0 = params[2],\n th1 = params[3],\n rx = params[4],\n ry = params[5],\n sin_th = params[6],\n cos_th = params[7];\n const a00 = cos_th * rx;\n const a01 = -sin_th * ry;\n const a10 = sin_th * rx;\n const a11 = cos_th * ry;\n const cos_th0 = Math.cos(th0);\n const sin_th0 = Math.sin(th0);\n const cos_th1 = Math.cos(th1);\n const sin_th1 = Math.sin(th1);\n const th_half = 0.5 * (th1 - th0);\n const sin_th_h2 = Math.sin(th_half * 0.5);\n const t = 8 / 3 * sin_th_h2 * sin_th_h2 / Math.sin(th_half);\n const x1 = cx + cos_th0 - t * sin_th0;\n const y1 = cy + sin_th0 + t * cos_th0;\n const x3 = cx + cos_th1;\n const y3 = cy + sin_th1;\n const x2 = x3 + t * sin_th1;\n const y2 = y3 - t * cos_th1;\n return bezierCache[key] = [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3];\n}\n\nconst temp = ['l', 0, 0, 0, 0, 0, 0, 0];\n\nfunction scale$1(current, sX, sY) {\n const c = temp[0] = current[0];\n\n if (c === 'a' || c === 'A') {\n temp[1] = sX * current[1];\n temp[2] = sY * current[2];\n temp[3] = current[3];\n temp[4] = current[4];\n temp[5] = current[5];\n temp[6] = sX * current[6];\n temp[7] = sY * current[7];\n } else if (c === 'h' || c === 'H') {\n temp[1] = sX * current[1];\n } else if (c === 'v' || c === 'V') {\n temp[1] = sY * current[1];\n } else {\n for (var i = 1, n = current.length; i < n; ++i) {\n temp[i] = (i % 2 == 1 ? sX : sY) * current[i];\n }\n }\n\n return temp;\n}\n\nfunction pathRender (context, path, l, t, sX, sY) {\n var current,\n // current instruction\n previous = null,\n x = 0,\n // current x\n y = 0,\n // current y\n controlX = 0,\n // current control point x\n controlY = 0,\n // current control point y\n tempX,\n tempY,\n tempControlX,\n tempControlY;\n if (l == null) l = 0;\n if (t == null) t = 0;\n if (sX == null) sX = 1;\n if (sY == null) sY = sX;\n if (context.beginPath) context.beginPath();\n\n for (var i = 0, len = path.length; i < len; ++i) {\n current = path[i];\n\n if (sX !== 1 || sY !== 1) {\n current = scale$1(current, sX, sY);\n }\n\n switch (current[0]) {\n // first letter\n case 'l':\n // lineto, relative\n x += current[1];\n y += current[2];\n context.lineTo(x + l, y + t);\n break;\n\n case 'L':\n // lineto, absolute\n x = current[1];\n y = current[2];\n context.lineTo(x + l, y + t);\n break;\n\n case 'h':\n // horizontal lineto, relative\n x += current[1];\n context.lineTo(x + l, y + t);\n break;\n\n case 'H':\n // horizontal lineto, absolute\n x = current[1];\n context.lineTo(x + l, y + t);\n break;\n\n case 'v':\n // vertical lineto, relative\n y += current[1];\n context.lineTo(x + l, y + t);\n break;\n\n case 'V':\n // verical lineto, absolute\n y = current[1];\n context.lineTo(x + l, y + t);\n break;\n\n case 'm':\n // moveTo, relative\n x += current[1];\n y += current[2];\n context.moveTo(x + l, y + t);\n break;\n\n case 'M':\n // moveTo, absolute\n x = current[1];\n y = current[2];\n context.moveTo(x + l, y + t);\n break;\n\n case 'c':\n // bezierCurveTo, relative\n tempX = x + current[5];\n tempY = y + current[6];\n controlX = x + current[3];\n controlY = y + current[4];\n context.bezierCurveTo(x + current[1] + l, // x1\n y + current[2] + t, // y1\n controlX + l, // x2\n controlY + t, // y2\n tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'C':\n // bezierCurveTo, absolute\n x = current[5];\n y = current[6];\n controlX = current[3];\n controlY = current[4];\n context.bezierCurveTo(current[1] + l, current[2] + t, controlX + l, controlY + t, x + l, y + t);\n break;\n\n case 's':\n // shorthand cubic bezierCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4]; // calculate reflection of previous control points\n\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.bezierCurveTo(controlX + l, controlY + t, x + current[1] + l, y + current[2] + t, tempX + l, tempY + t); // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n\n controlX = x + current[1];\n controlY = y + current[2];\n x = tempX;\n y = tempY;\n break;\n\n case 'S':\n // shorthand cubic bezierCurveTo, absolute\n tempX = current[3];\n tempY = current[4]; // calculate reflection of previous control points\n\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.bezierCurveTo(controlX + l, controlY + t, current[1] + l, current[2] + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY; // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n\n controlX = current[1];\n controlY = current[2];\n break;\n\n case 'q':\n // quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n controlX = x + current[1];\n controlY = y + current[2];\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'Q':\n // quadraticCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n context.quadraticCurveTo(current[1] + l, current[2] + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = current[1];\n controlY = current[2];\n break;\n\n case 't':\n // shorthand quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[1];\n tempY = y + current[2];\n\n if (previous[0].match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else if (previous[0] === 't') {\n // calculate reflection of previous control points for t\n controlX = 2 * x - tempControlX;\n controlY = 2 * y - tempControlY;\n } else if (previous[0] === 'q') {\n // calculate reflection of previous control points for q\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n\n tempControlX = controlX;\n tempControlY = controlY;\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = x + current[1];\n controlY = y + current[2];\n break;\n\n case 'T':\n tempX = current[1];\n tempY = current[2]; // calculate reflection of previous control points\n\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'a':\n drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + x + l, current[7] + y + t]);\n x += current[6];\n y += current[7];\n break;\n\n case 'A':\n drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + l, current[7] + t]);\n x = current[6];\n y = current[7];\n break;\n\n case 'z':\n case 'Z':\n context.closePath();\n break;\n }\n\n previous = current;\n }\n}\n\nfunction drawArc(context, x, y, coords) {\n const seg = segments(coords[5], // end x\n coords[6], // end y\n coords[0], // radius x\n coords[1], // radius y\n coords[3], // large flag\n coords[4], // sweep flag\n coords[2], // rotation\n x, y);\n\n for (let i = 0; i < seg.length; ++i) {\n const bez = bezier(seg[i]);\n context.bezierCurveTo(bez[0], bez[1], bez[2], bez[3], bez[4], bez[5]);\n }\n}\n\nconst Tan30 = 0.5773502691896257;\nconst builtins = {\n 'circle': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, Tau);\n }\n },\n 'cross': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n s = r / 2.5;\n context.moveTo(-r, -s);\n context.lineTo(-r, s);\n context.lineTo(-s, s);\n context.lineTo(-s, r);\n context.lineTo(s, r);\n context.lineTo(s, s);\n context.lineTo(r, s);\n context.lineTo(r, -s);\n context.lineTo(s, -s);\n context.lineTo(s, -r);\n context.lineTo(-s, -r);\n context.lineTo(-s, -s);\n context.closePath();\n }\n },\n 'diamond': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(-r, 0);\n context.lineTo(0, -r);\n context.lineTo(r, 0);\n context.lineTo(0, r);\n context.closePath();\n }\n },\n 'square': {\n draw: function (context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n },\n 'arrow': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n s = r / 7,\n t = r / 2.5,\n v = r / 8;\n context.moveTo(-s, r);\n context.lineTo(s, r);\n context.lineTo(s, -v);\n context.lineTo(t, -v);\n context.lineTo(0, -r);\n context.lineTo(-t, -v);\n context.lineTo(-s, -v);\n context.closePath();\n }\n },\n 'wedge': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r,\n o = h - r * Tan30,\n b = r / 4;\n context.moveTo(0, -h - o);\n context.lineTo(-b, h - o);\n context.lineTo(b, h - o);\n context.closePath();\n }\n },\n 'triangle': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r,\n o = h - r * Tan30;\n context.moveTo(0, -h - o);\n context.lineTo(-r, h - o);\n context.lineTo(r, h - o);\n context.closePath();\n }\n },\n 'triangle-up': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(0, -h);\n context.lineTo(-r, h);\n context.lineTo(r, h);\n context.closePath();\n }\n },\n 'triangle-down': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(0, h);\n context.lineTo(-r, -h);\n context.lineTo(r, -h);\n context.closePath();\n }\n },\n 'triangle-right': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(h, 0);\n context.lineTo(-h, -r);\n context.lineTo(-h, r);\n context.closePath();\n }\n },\n 'triangle-left': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(-h, 0);\n context.lineTo(h, -r);\n context.lineTo(h, r);\n context.closePath();\n }\n },\n 'stroke': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(-r, 0);\n context.lineTo(r, 0);\n }\n }\n};\nfunction symbols(_) {\n return hasOwnProperty(builtins, _) ? builtins[_] : customSymbol(_);\n}\nvar custom = {};\n\nfunction customSymbol(path) {\n if (!hasOwnProperty(custom, path)) {\n const parsed = pathParse(path);\n custom[path] = {\n draw: function (context, size) {\n pathRender(context, parsed, 0, 0, Math.sqrt(size) / 2);\n }\n };\n }\n\n return custom[path];\n}\n\nconst C = 0.448084975506; // C = 1 - c\n\nfunction rectangleX(d) {\n return d.x;\n}\n\nfunction rectangleY(d) {\n return d.y;\n}\n\nfunction rectangleWidth(d) {\n return d.width;\n}\n\nfunction rectangleHeight(d) {\n return d.height;\n}\n\nfunction number(_) {\n return typeof _ === 'function' ? _ : () => +_;\n}\n\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(value, max));\n}\n\nfunction vg_rect () {\n var x = rectangleX,\n y = rectangleY,\n width = rectangleWidth,\n height = rectangleHeight,\n crTL = number(0),\n crTR = crTL,\n crBL = crTL,\n crBR = crTL,\n context = null;\n\n function rectangle(_, x0, y0) {\n var buffer,\n x1 = x0 != null ? x0 : +x.call(this, _),\n y1 = y0 != null ? y0 : +y.call(this, _),\n w = +width.call(this, _),\n h = +height.call(this, _),\n s = Math.min(w, h) / 2,\n tl = clamp(+crTL.call(this, _), 0, s),\n tr = clamp(+crTR.call(this, _), 0, s),\n bl = clamp(+crBL.call(this, _), 0, s),\n br = clamp(+crBR.call(this, _), 0, s);\n if (!context) context = buffer = path$3();\n\n if (tl <= 0 && tr <= 0 && bl <= 0 && br <= 0) {\n context.rect(x1, y1, w, h);\n } else {\n var x2 = x1 + w,\n y2 = y1 + h;\n context.moveTo(x1 + tl, y1);\n context.lineTo(x2 - tr, y1);\n context.bezierCurveTo(x2 - C * tr, y1, x2, y1 + C * tr, x2, y1 + tr);\n context.lineTo(x2, y2 - br);\n context.bezierCurveTo(x2, y2 - C * br, x2 - C * br, y2, x2 - br, y2);\n context.lineTo(x1 + bl, y2);\n context.bezierCurveTo(x1 + C * bl, y2, x1, y2 - C * bl, x1, y2 - bl);\n context.lineTo(x1, y1 + tl);\n context.bezierCurveTo(x1, y1 + C * tl, x1 + C * tl, y1, x1 + tl, y1);\n context.closePath();\n }\n\n if (buffer) {\n context = null;\n return buffer + '' || null;\n }\n }\n\n rectangle.x = function (_) {\n if (arguments.length) {\n x = number(_);\n return rectangle;\n } else {\n return x;\n }\n };\n\n rectangle.y = function (_) {\n if (arguments.length) {\n y = number(_);\n return rectangle;\n } else {\n return y;\n }\n };\n\n rectangle.width = function (_) {\n if (arguments.length) {\n width = number(_);\n return rectangle;\n } else {\n return width;\n }\n };\n\n rectangle.height = function (_) {\n if (arguments.length) {\n height = number(_);\n return rectangle;\n } else {\n return height;\n }\n };\n\n rectangle.cornerRadius = function (tl, tr, br, bl) {\n if (arguments.length) {\n crTL = number(tl);\n crTR = tr != null ? number(tr) : crTL;\n crBR = br != null ? number(br) : crTL;\n crBL = bl != null ? number(bl) : crTR;\n return rectangle;\n } else {\n return crTL;\n }\n };\n\n rectangle.context = function (_) {\n if (arguments.length) {\n context = _ == null ? null : _;\n return rectangle;\n } else {\n return context;\n }\n };\n\n return rectangle;\n}\n\nfunction vg_trail () {\n var x,\n y,\n size,\n defined,\n context = null,\n ready,\n x1,\n y1,\n r1;\n\n function point(x2, y2, w2) {\n const r2 = w2 / 2;\n\n if (ready) {\n var ux = y1 - y2,\n uy = x2 - x1;\n\n if (ux || uy) {\n // get normal vector\n var ud = Math.sqrt(ux * ux + uy * uy),\n rx = (ux /= ud) * r1,\n ry = (uy /= ud) * r1,\n t = Math.atan2(uy, ux); // draw segment\n\n context.moveTo(x1 - rx, y1 - ry);\n context.lineTo(x2 - ux * r2, y2 - uy * r2);\n context.arc(x2, y2, r2, t - Math.PI, t);\n context.lineTo(x1 + rx, y1 + ry);\n context.arc(x1, y1, r1, t, t + Math.PI);\n } else {\n context.arc(x2, y2, r2, 0, Tau);\n }\n\n context.closePath();\n } else {\n ready = 1;\n }\n\n x1 = x2;\n y1 = y2;\n r1 = r2;\n }\n\n function trail(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n if (context == null) context = buffer = path$3();\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) ready = 0;\n }\n\n if (defined0) point(+x(d, i, data), +y(d, i, data), +size(d, i, data));\n }\n\n if (buffer) {\n context = null;\n return buffer + '' || null;\n }\n }\n\n trail.x = function (_) {\n if (arguments.length) {\n x = _;\n return trail;\n } else {\n return x;\n }\n };\n\n trail.y = function (_) {\n if (arguments.length) {\n y = _;\n return trail;\n } else {\n return y;\n }\n };\n\n trail.size = function (_) {\n if (arguments.length) {\n size = _;\n return trail;\n } else {\n return size;\n }\n };\n\n trail.defined = function (_) {\n if (arguments.length) {\n defined = _;\n return trail;\n } else {\n return defined;\n }\n };\n\n trail.context = function (_) {\n if (arguments.length) {\n if (_ == null) {\n context = null;\n } else {\n context = _;\n }\n\n return trail;\n } else {\n return context;\n }\n };\n\n return trail;\n}\n\nfunction value$1(a, b) {\n return a != null ? a : b;\n}\n\nconst x = item => item.x || 0,\n y = item => item.y || 0,\n w = item => item.width || 0,\n h = item => item.height || 0,\n xw = item => (item.x || 0) + (item.width || 0),\n yh = item => (item.y || 0) + (item.height || 0),\n sa = item => item.startAngle || 0,\n ea = item => item.endAngle || 0,\n pa = item => item.padAngle || 0,\n ir = item => item.innerRadius || 0,\n or = item => item.outerRadius || 0,\n cr = item => item.cornerRadius || 0,\n tl = item => value$1(item.cornerRadiusTopLeft, item.cornerRadius) || 0,\n tr = item => value$1(item.cornerRadiusTopRight, item.cornerRadius) || 0,\n br = item => value$1(item.cornerRadiusBottomRight, item.cornerRadius) || 0,\n bl = item => value$1(item.cornerRadiusBottomLeft, item.cornerRadius) || 0,\n sz = item => value$1(item.size, 64),\n ts = item => item.size || 1,\n def = item => !(item.defined === false),\n type = item => symbols(item.shape || 'circle');\n\nconst arcShape = arc$2().startAngle(sa).endAngle(ea).padAngle(pa).innerRadius(ir).outerRadius(or).cornerRadius(cr),\n areavShape = area$2().x(x).y1(y).y0(yh).defined(def),\n areahShape = area$2().y(y).x1(x).x0(xw).defined(def),\n lineShape = line$2().x(x).y(y).defined(def),\n rectShape = vg_rect().x(x).y(y).width(w).height(h).cornerRadius(tl, tr, br, bl),\n symbolShape = symbol$2().type(type).size(sz),\n trailShape = vg_trail().x(x).y(y).defined(def).size(ts);\nfunction hasCornerRadius(item) {\n return item.cornerRadius || item.cornerRadiusTopLeft || item.cornerRadiusTopRight || item.cornerRadiusBottomRight || item.cornerRadiusBottomLeft;\n}\nfunction arc$1(context, item) {\n return arcShape.context(context)(item);\n}\nfunction area$1(context, items) {\n const item = items[0],\n interp = item.interpolate || 'linear';\n return (item.orient === 'horizontal' ? areahShape : areavShape).curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction line$1(context, items) {\n const item = items[0],\n interp = item.interpolate || 'linear';\n return lineShape.curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction rectangle(context, item, x, y) {\n return rectShape.context(context)(item, x, y);\n}\nfunction shape$1(context, item) {\n return (item.mark.shape || item.shape).context(context)(item);\n}\nfunction symbol$1(context, item) {\n return symbolShape.context(context)(item);\n}\nfunction trail$1(context, items) {\n return trailShape.context(context)(items);\n}\n\nvar clip_id = 1;\nfunction resetSVGClipId() {\n clip_id = 1;\n}\nfunction clip$1 (renderer, item, size) {\n var clip = item.clip,\n defs = renderer._defs,\n id = item.clip_id || (item.clip_id = 'clip' + clip_id++),\n c = defs.clipping[id] || (defs.clipping[id] = {\n id: id\n });\n\n if (isFunction(clip)) {\n c.path = clip(null);\n } else if (hasCornerRadius(size)) {\n c.path = rectangle(null, size, 0, 0);\n } else {\n c.width = size.width || 0;\n c.height = size.height || 0;\n }\n\n return 'url(#' + id + ')';\n}\n\nfunction Bounds(b) {\n this.clear();\n if (b) this.union(b);\n}\nBounds.prototype = {\n clone() {\n return new Bounds(this);\n },\n\n clear() {\n this.x1 = +Number.MAX_VALUE;\n this.y1 = +Number.MAX_VALUE;\n this.x2 = -Number.MAX_VALUE;\n this.y2 = -Number.MAX_VALUE;\n return this;\n },\n\n empty() {\n return this.x1 === +Number.MAX_VALUE && this.y1 === +Number.MAX_VALUE && this.x2 === -Number.MAX_VALUE && this.y2 === -Number.MAX_VALUE;\n },\n\n equals(b) {\n return this.x1 === b.x1 && this.y1 === b.y1 && this.x2 === b.x2 && this.y2 === b.y2;\n },\n\n set(x1, y1, x2, y2) {\n if (x2 < x1) {\n this.x2 = x1;\n this.x1 = x2;\n } else {\n this.x1 = x1;\n this.x2 = x2;\n }\n\n if (y2 < y1) {\n this.y2 = y1;\n this.y1 = y2;\n } else {\n this.y1 = y1;\n this.y2 = y2;\n }\n\n return this;\n },\n\n add(x, y) {\n if (x < this.x1) this.x1 = x;\n if (y < this.y1) this.y1 = y;\n if (x > this.x2) this.x2 = x;\n if (y > this.y2) this.y2 = y;\n return this;\n },\n\n expand(d) {\n this.x1 -= d;\n this.y1 -= d;\n this.x2 += d;\n this.y2 += d;\n return this;\n },\n\n round() {\n this.x1 = Math.floor(this.x1);\n this.y1 = Math.floor(this.y1);\n this.x2 = Math.ceil(this.x2);\n this.y2 = Math.ceil(this.y2);\n return this;\n },\n\n scale(s) {\n this.x1 *= s;\n this.y1 *= s;\n this.x2 *= s;\n this.y2 *= s;\n return this;\n },\n\n translate(dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n },\n\n rotate(angle, x, y) {\n const p = this.rotatedPoints(angle, x, y);\n return this.clear().add(p[0], p[1]).add(p[2], p[3]).add(p[4], p[5]).add(p[6], p[7]);\n },\n\n rotatedPoints(angle, x, y) {\n var {\n x1,\n y1,\n x2,\n y2\n } = this,\n cos = Math.cos(angle),\n sin = Math.sin(angle),\n cx = x - x * cos + y * sin,\n cy = y - x * sin - y * cos;\n return [cos * x1 - sin * y1 + cx, sin * x1 + cos * y1 + cy, cos * x1 - sin * y2 + cx, sin * x1 + cos * y2 + cy, cos * x2 - sin * y1 + cx, sin * x2 + cos * y1 + cy, cos * x2 - sin * y2 + cx, sin * x2 + cos * y2 + cy];\n },\n\n union(b) {\n if (b.x1 < this.x1) this.x1 = b.x1;\n if (b.y1 < this.y1) this.y1 = b.y1;\n if (b.x2 > this.x2) this.x2 = b.x2;\n if (b.y2 > this.y2) this.y2 = b.y2;\n return this;\n },\n\n intersect(b) {\n if (b.x1 > this.x1) this.x1 = b.x1;\n if (b.y1 > this.y1) this.y1 = b.y1;\n if (b.x2 < this.x2) this.x2 = b.x2;\n if (b.y2 < this.y2) this.y2 = b.y2;\n return this;\n },\n\n encloses(b) {\n return b && this.x1 <= b.x1 && this.x2 >= b.x2 && this.y1 <= b.y1 && this.y2 >= b.y2;\n },\n\n alignsWith(b) {\n return b && (this.x1 == b.x1 || this.x2 == b.x2 || this.y1 == b.y1 || this.y2 == b.y2);\n },\n\n intersects(b) {\n return b && !(this.x2 < b.x1 || this.x1 > b.x2 || this.y2 < b.y1 || this.y1 > b.y2);\n },\n\n contains(x, y) {\n return !(x < this.x1 || x > this.x2 || y < this.y1 || y > this.y2);\n },\n\n width() {\n return this.x2 - this.x1;\n },\n\n height() {\n return this.y2 - this.y1;\n }\n\n};\n\nfunction Item(mark) {\n this.mark = mark;\n this.bounds = this.bounds || new Bounds();\n}\n\nfunction GroupItem(mark) {\n Item.call(this, mark);\n this.items = this.items || [];\n}\ninherits(GroupItem, Item);\n\nfunction ResourceLoader(customLoader) {\n this._pending = 0;\n this._loader = customLoader || loader();\n}\n\nfunction increment(loader) {\n loader._pending += 1;\n}\n\nfunction decrement(loader) {\n loader._pending -= 1;\n}\n\nResourceLoader.prototype = {\n pending() {\n return this._pending;\n },\n\n sanitizeURL(uri) {\n const loader = this;\n increment(loader);\n return loader._loader.sanitize(uri, {\n context: 'href'\n }).then(opt => {\n decrement(loader);\n return opt;\n }).catch(() => {\n decrement(loader);\n return null;\n });\n },\n\n loadImage(uri) {\n const loader = this,\n Image = image$1();\n increment(loader);\n return loader._loader.sanitize(uri, {\n context: 'image'\n }).then(opt => {\n const url = opt.href;\n if (!url || !Image) throw {\n url: url\n };\n const img = new Image(); // set crossOrigin only if cors is defined; empty string sets anonymous mode\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/crossOrigin\n\n const cors = hasOwnProperty(opt, 'crossOrigin') ? opt.crossOrigin : 'anonymous';\n if (cors != null) img.crossOrigin = cors; // attempt to load image resource\n\n img.onload = () => decrement(loader);\n\n img.onerror = () => decrement(loader);\n\n img.src = url;\n return img;\n }).catch(e => {\n decrement(loader);\n return {\n complete: false,\n width: 0,\n height: 0,\n src: e && e.url || ''\n };\n });\n },\n\n ready() {\n const loader = this;\n return new Promise(accept => {\n function poll(value) {\n if (!loader.pending()) accept(value);else setTimeout(() => {\n poll(true);\n }, 10);\n }\n\n poll(false);\n });\n }\n\n};\n\nfunction boundStroke (bounds, item, miter) {\n if (item.stroke && item.opacity !== 0 && item.strokeOpacity !== 0) {\n const sw = item.strokeWidth != null ? +item.strokeWidth : 1;\n bounds.expand(sw + (miter ? miterAdjustment(item, sw) : 0));\n }\n\n return bounds;\n}\n\nfunction miterAdjustment(item, strokeWidth) {\n // TODO: more sophisticated adjustment? Or miter support in boundContext?\n return item.strokeJoin && item.strokeJoin !== 'miter' ? 0 : strokeWidth;\n}\n\nconst circleThreshold = Tau - 1e-8;\nlet bounds, lx, ly, rot, ma, mb, mc, md;\n\nconst add = (x, y) => bounds.add(x, y);\n\nconst addL = (x, y) => add(lx = x, ly = y);\n\nconst addX = x => add(x, bounds.y1);\n\nconst addY = y => add(bounds.x1, y);\n\nconst px = (x, y) => ma * x + mc * y;\n\nconst py = (x, y) => mb * x + md * y;\n\nconst addp = (x, y) => add(px(x, y), py(x, y));\n\nconst addpL = (x, y) => addL(px(x, y), py(x, y));\n\nfunction boundContext (_, deg) {\n bounds = _;\n\n if (deg) {\n rot = deg * DegToRad;\n ma = md = Math.cos(rot);\n mb = Math.sin(rot);\n mc = -mb;\n } else {\n ma = md = 1;\n rot = mb = mc = 0;\n }\n\n return context$1;\n}\nconst context$1 = {\n beginPath() {},\n\n closePath() {},\n\n moveTo: addpL,\n lineTo: addpL,\n\n rect(x, y, w, h) {\n if (rot) {\n addp(x + w, y);\n addp(x + w, y + h);\n addp(x, y + h);\n addpL(x, y);\n } else {\n add(x + w, y + h);\n addL(x, y);\n }\n },\n\n quadraticCurveTo(x1, y1, x2, y2) {\n const px1 = px(x1, y1),\n py1 = py(x1, y1),\n px2 = px(x2, y2),\n py2 = py(x2, y2);\n quadExtrema(lx, px1, px2, addX);\n quadExtrema(ly, py1, py2, addY);\n addL(px2, py2);\n },\n\n bezierCurveTo(x1, y1, x2, y2, x3, y3) {\n const px1 = px(x1, y1),\n py1 = py(x1, y1),\n px2 = px(x2, y2),\n py2 = py(x2, y2),\n px3 = px(x3, y3),\n py3 = py(x3, y3);\n cubicExtrema(lx, px1, px2, px3, addX);\n cubicExtrema(ly, py1, py2, py3, addY);\n addL(px3, py3);\n },\n\n arc(cx, cy, r, sa, ea, ccw) {\n sa += rot;\n ea += rot; // store last point on path\n\n lx = r * Math.cos(ea) + cx;\n ly = r * Math.sin(ea) + cy;\n\n if (Math.abs(ea - sa) > circleThreshold) {\n // treat as full circle\n add(cx - r, cy - r);\n add(cx + r, cy + r);\n } else {\n const update = a => add(r * Math.cos(a) + cx, r * Math.sin(a) + cy);\n\n let s, i; // sample end points\n\n update(sa);\n update(ea); // sample interior points aligned with 90 degrees\n\n if (ea !== sa) {\n sa = sa % Tau;\n if (sa < 0) sa += Tau;\n ea = ea % Tau;\n if (ea < 0) ea += Tau;\n\n if (ea < sa) {\n ccw = !ccw; // flip direction\n\n s = sa;\n sa = ea;\n ea = s; // swap end-points\n }\n\n if (ccw) {\n ea -= Tau;\n s = sa - sa % HalfPi;\n\n for (i = 0; i < 4 && s > ea; ++i, s -= HalfPi) update(s);\n } else {\n s = sa - sa % HalfPi + HalfPi;\n\n for (i = 0; i < 4 && s < ea; ++i, s = s + HalfPi) update(s);\n }\n }\n }\n }\n\n};\n\nfunction quadExtrema(x0, x1, x2, cb) {\n const t = (x0 - x1) / (x0 + x2 - 2 * x1);\n if (0 < t && t < 1) cb(x0 + (x1 - x0) * t);\n}\n\nfunction cubicExtrema(x0, x1, x2, x3, cb) {\n const a = x3 - x0 + 3 * x1 - 3 * x2,\n b = x0 + x2 - 2 * x1,\n c = x0 - x1;\n let t0 = 0,\n t1 = 0,\n r; // solve for parameter t\n\n if (Math.abs(a) > Epsilon) {\n // quadratic equation\n r = b * b + c * a;\n\n if (r >= 0) {\n r = Math.sqrt(r);\n t0 = (-b + r) / a;\n t1 = (-b - r) / a;\n }\n } else {\n // linear equation\n t0 = 0.5 * c / b;\n } // calculate position\n\n\n if (0 < t0 && t0 < 1) cb(cubic(t0, x0, x1, x2, x3));\n if (0 < t1 && t1 < 1) cb(cubic(t1, x0, x1, x2, x3));\n}\n\nfunction cubic(t, x0, x1, x2, x3) {\n const s = 1 - t,\n s2 = s * s,\n t2 = t * t;\n return s2 * s * x0 + 3 * s2 * t * x1 + 3 * s * t2 * x2 + t2 * t * x3;\n}\n\nvar context = (context = canvas(1, 1)) ? context.getContext('2d') : null;\n\nconst b = new Bounds();\nfunction intersectPath(draw) {\n return function (item, brush) {\n // rely on (inaccurate) bounds intersection if no context\n if (!context) return true; // add path to offscreen graphics context\n\n draw(context, item); // get bounds intersection region\n\n b.clear().union(item.bounds).intersect(brush).round();\n const {\n x1,\n y1,\n x2,\n y2\n } = b; // iterate over intersection region\n // perform fine grained inclusion test\n\n for (let y = y1; y <= y2; ++y) {\n for (let x = x1; x <= x2; ++x) {\n if (context.isPointInPath(x, y)) {\n return true;\n }\n }\n } // false if no hits in intersection region\n\n\n return false;\n };\n}\nfunction intersectPoint(item, box) {\n return box.contains(item.x || 0, item.y || 0);\n}\nfunction intersectRect(item, box) {\n const x = item.x || 0,\n y = item.y || 0,\n w = item.width || 0,\n h = item.height || 0;\n return box.intersects(b.set(x, y, x + w, y + h));\n}\nfunction intersectRule(item, box) {\n const x = item.x || 0,\n y = item.y || 0,\n x2 = item.x2 != null ? item.x2 : x,\n y2 = item.y2 != null ? item.y2 : y;\n return intersectBoxLine(box, x, y, x2, y2);\n}\nfunction intersectBoxLine(box, x, y, u, v) {\n const {\n x1,\n y1,\n x2,\n y2\n } = box,\n dx = u - x,\n dy = v - y;\n let t0 = 0,\n t1 = 1,\n p,\n q,\n r,\n e;\n\n for (e = 0; e < 4; ++e) {\n if (e === 0) {\n p = -dx;\n q = -(x1 - x);\n }\n\n if (e === 1) {\n p = dx;\n q = x2 - x;\n }\n\n if (e === 2) {\n p = -dy;\n q = -(y1 - y);\n }\n\n if (e === 3) {\n p = dy;\n q = y2 - y;\n }\n\n if (Math.abs(p) < 1e-10 && q < 0) return false;\n r = q / p;\n\n if (p < 0) {\n if (r > t1) return false;else if (r > t0) t0 = r;\n } else if (p > 0) {\n if (r < t0) return false;else if (r < t1) t1 = r;\n }\n }\n\n return true;\n}\n\nfunction blend (context, item) {\n context.globalCompositeOperation = item.blend || 'source-over';\n}\n\nfunction value (value, dflt) {\n return value == null ? dflt : value;\n}\n\nfunction addStops(gradient, stops) {\n const n = stops.length;\n\n for (let i = 0; i < n; ++i) {\n gradient.addColorStop(stops[i].offset, stops[i].color);\n }\n\n return gradient;\n}\n\nfunction gradient (context, spec, bounds) {\n const w = bounds.width(),\n h = bounds.height();\n let gradient;\n\n if (spec.gradient === 'radial') {\n gradient = context.createRadialGradient(bounds.x1 + value(spec.x1, 0.5) * w, bounds.y1 + value(spec.y1, 0.5) * h, Math.max(w, h) * value(spec.r1, 0), bounds.x1 + value(spec.x2, 0.5) * w, bounds.y1 + value(spec.y2, 0.5) * h, Math.max(w, h) * value(spec.r2, 0.5));\n } else {\n // linear gradient\n const x1 = value(spec.x1, 0),\n y1 = value(spec.y1, 0),\n x2 = value(spec.x2, 1),\n y2 = value(spec.y2, 0);\n\n if (x1 === x2 || y1 === y2 || w === h) {\n // axis aligned: use normal gradient\n gradient = context.createLinearGradient(bounds.x1 + x1 * w, bounds.y1 + y1 * h, bounds.x1 + x2 * w, bounds.y1 + y2 * h);\n } else {\n // not axis aligned: render gradient into a pattern (#2365)\n // this allows us to use normalized bounding box coordinates\n const image = canvas(Math.ceil(w), Math.ceil(h)),\n ictx = image.getContext('2d');\n ictx.scale(w, h);\n ictx.fillStyle = addStops(ictx.createLinearGradient(x1, y1, x2, y2), spec.stops);\n ictx.fillRect(0, 0, w, h);\n return context.createPattern(image, 'no-repeat');\n }\n }\n\n return addStops(gradient, spec.stops);\n}\n\nfunction color (context, item, value) {\n return isGradient(value) ? gradient(context, value, item.bounds) : value;\n}\n\nfunction fill (context, item, opacity) {\n opacity *= item.fillOpacity == null ? 1 : item.fillOpacity;\n\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.fillStyle = color(context, item, item.fill);\n return true;\n } else {\n return false;\n }\n}\n\nvar Empty = [];\nfunction stroke (context, item, opacity) {\n var lw = (lw = item.strokeWidth) != null ? lw : 1;\n if (lw <= 0) return false;\n opacity *= item.strokeOpacity == null ? 1 : item.strokeOpacity;\n\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.strokeStyle = color(context, item, item.stroke);\n context.lineWidth = lw;\n context.lineCap = item.strokeCap || 'butt';\n context.lineJoin = item.strokeJoin || 'miter';\n context.miterLimit = item.strokeMiterLimit || 10;\n\n if (context.setLineDash) {\n context.setLineDash(item.strokeDash || Empty);\n context.lineDashOffset = item.strokeDashOffset || 0;\n }\n\n return true;\n } else {\n return false;\n }\n}\n\nfunction compare(a, b) {\n return a.zindex - b.zindex || a.index - b.index;\n}\n\nfunction zorder(scene) {\n if (!scene.zdirty) return scene.zitems;\n var items = scene.items,\n output = [],\n item,\n i,\n n;\n\n for (i = 0, n = items.length; i < n; ++i) {\n item = items[i];\n item.index = i;\n if (item.zindex) output.push(item);\n }\n\n scene.zdirty = false;\n return scene.zitems = output.sort(compare);\n}\nfunction visit(scene, visitor) {\n var items = scene.items,\n i,\n n;\n if (!items || !items.length) return;\n const zitems = zorder(scene);\n\n if (zitems && zitems.length) {\n for (i = 0, n = items.length; i < n; ++i) {\n if (!items[i].zindex) visitor(items[i]);\n }\n\n items = zitems;\n }\n\n for (i = 0, n = items.length; i < n; ++i) {\n visitor(items[i]);\n }\n}\nfunction pickVisit(scene, visitor) {\n var items = scene.items,\n hit,\n i;\n if (!items || !items.length) return null;\n const zitems = zorder(scene);\n if (zitems && zitems.length) items = zitems;\n\n for (i = items.length; --i >= 0;) {\n if (hit = visitor(items[i])) return hit;\n }\n\n if (items === zitems) {\n for (items = scene.items, i = items.length; --i >= 0;) {\n if (!items[i].zindex) {\n if (hit = visitor(items[i])) return hit;\n }\n }\n }\n\n return null;\n}\n\nfunction drawAll(path) {\n return function (context, scene, bounds) {\n visit(scene, item => {\n if (!bounds || bounds.intersects(item.bounds)) {\n drawPath(path, context, item, item);\n }\n });\n };\n}\nfunction drawOne(path) {\n return function (context, scene, bounds) {\n if (scene.items.length && (!bounds || bounds.intersects(scene.bounds))) {\n drawPath(path, context, scene.items[0], scene.items);\n }\n };\n}\n\nfunction drawPath(path, context, item, items) {\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity === 0) return;\n if (path(context, items)) return;\n blend(context, item);\n\n if (item.fill && fill(context, item, opacity)) {\n context.fill();\n }\n\n if (item.stroke && stroke(context, item, opacity)) {\n context.stroke();\n }\n}\n\nfunction pick$1(test) {\n test = test || truthy;\n return function (context, scene, x, y, gx, gy) {\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return pickVisit(scene, item => {\n const b = item.bounds; // first hit test against bounding box\n\n if (b && !b.contains(gx, gy) || !b) return; // if in bounding box, perform more careful test\n\n if (test(context, item, x, y, gx, gy)) return item;\n });\n };\n}\nfunction hitPath(path, filled) {\n return function (context, o, x, y) {\n var item = Array.isArray(o) ? o[0] : o,\n fill = filled == null ? item.fill : filled,\n stroke = item.stroke && context.isPointInStroke,\n lw,\n lc;\n\n if (stroke) {\n lw = item.strokeWidth;\n lc = item.strokeCap;\n context.lineWidth = lw != null ? lw : 1;\n context.lineCap = lc != null ? lc : 'butt';\n }\n\n return path(context, o) ? false : fill && context.isPointInPath(x, y) || stroke && context.isPointInStroke(x, y);\n };\n}\nfunction pickPath(path) {\n return pick$1(hitPath(path));\n}\n\nfunction translate(x, y) {\n return 'translate(' + x + ',' + y + ')';\n}\nfunction rotate(a) {\n return 'rotate(' + a + ')';\n}\nfunction scale(scaleX, scaleY) {\n return 'scale(' + scaleX + ',' + scaleY + ')';\n}\nfunction translateItem(item) {\n return translate(item.x || 0, item.y || 0);\n}\nfunction rotateItem(item) {\n return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '');\n}\nfunction transformItem(item) {\n return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '') + (item.scaleX || item.scaleY ? ' ' + scale(item.scaleX || 1, item.scaleY || 1) : '');\n}\n\nfunction markItemPath (type, shape, isect) {\n function attr(emit, item) {\n emit('transform', rotateItem(item));\n emit('d', shape(null, item));\n }\n\n function bound(bounds, item) {\n shape(boundContext(bounds, item.angle), item);\n return boundStroke(bounds, item).translate(item.x || 0, item.y || 0);\n }\n\n function draw(context, item) {\n var x = item.x || 0,\n y = item.y || 0,\n a = item.angle || 0;\n context.translate(x, y);\n if (a) context.rotate(a *= DegToRad);\n context.beginPath();\n shape(context, item);\n if (a) context.rotate(-a);\n context.translate(-x, -y);\n }\n\n return {\n type: type,\n tag: 'path',\n nested: false,\n attr: attr,\n bound: bound,\n draw: drawAll(draw),\n pick: pickPath(draw),\n isect: isect || intersectPath(draw)\n };\n}\n\nvar arc = markItemPath('arc', arc$1);\n\nfunction pickArea(a, p) {\n var v = a[0].orient === 'horizontal' ? p[1] : p[0],\n z = a[0].orient === 'horizontal' ? 'y' : 'x',\n i = a.length,\n min = +Infinity,\n hit,\n d;\n\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n d = Math.abs(a[i][z] - v);\n\n if (d < min) {\n min = d;\n hit = a[i];\n }\n }\n\n return hit;\n}\nfunction pickLine(a, p) {\n var t = Math.pow(a[0].strokeWidth || 1, 2),\n i = a.length,\n dx,\n dy,\n dd;\n\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n if (dd < t) return a[i];\n }\n\n return null;\n}\nfunction pickTrail(a, p) {\n var i = a.length,\n dx,\n dy,\n dd;\n\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n dx = a[i].size || 1;\n if (dd < dx * dx) return a[i];\n }\n\n return null;\n}\n\nfunction markMultiItemPath (type, shape, tip) {\n function attr(emit, item) {\n var items = item.mark.items;\n if (items.length) emit('d', shape(null, items));\n }\n\n function bound(bounds, mark) {\n var items = mark.items;\n\n if (items.length === 0) {\n return bounds;\n } else {\n shape(boundContext(bounds), items);\n return boundStroke(bounds, items[0]);\n }\n }\n\n function draw(context, items) {\n context.beginPath();\n shape(context, items);\n }\n\n const hit = hitPath(draw);\n\n function pick(context, scene, x, y, gx, gy) {\n var items = scene.items,\n b = scene.bounds;\n\n if (!items || !items.length || b && !b.contains(gx, gy)) {\n return null;\n }\n\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return hit(context, items, x, y) ? items[0] : null;\n }\n\n return {\n type: type,\n tag: 'path',\n nested: true,\n attr: attr,\n bound: bound,\n draw: drawOne(draw),\n pick: pick,\n isect: intersectPoint,\n tip: tip\n };\n}\n\nvar area = markMultiItemPath('area', area$1, pickArea);\n\nfunction clip (context, scene) {\n var clip = scene.clip;\n context.save();\n\n if (isFunction(clip)) {\n context.beginPath();\n clip(context);\n context.clip();\n } else {\n clipGroup(context, scene.group);\n }\n}\nfunction clipGroup(context, group) {\n context.beginPath();\n hasCornerRadius(group) ? rectangle(context, group, 0, 0) : context.rect(0, 0, group.width || 0, group.height || 0);\n context.clip();\n}\n\nfunction offset$1(item) {\n const sw = value(item.strokeWidth, 1);\n return item.strokeOffset != null ? item.strokeOffset : item.stroke && sw > 0.5 && sw < 1.5 ? 0.5 - Math.abs(sw - 1) : 0;\n}\n\nfunction attr$5(emit, item) {\n emit('transform', translateItem(item));\n}\n\nfunction emitRectangle(emit, item) {\n const off = offset$1(item);\n emit('d', rectangle(null, item, off, off));\n}\n\nfunction background(emit, item) {\n emit('class', 'background');\n emit('aria-hidden', true);\n emitRectangle(emit, item);\n}\n\nfunction foreground(emit, item) {\n emit('class', 'foreground');\n emit('aria-hidden', true);\n\n if (item.strokeForeground) {\n emitRectangle(emit, item);\n } else {\n emit('d', '');\n }\n}\n\nfunction content(emit, item, renderer) {\n const url = item.clip ? clip$1(renderer, item, item) : null;\n emit('clip-path', url);\n}\n\nfunction bound$5(bounds, group) {\n if (!group.clip && group.items) {\n const items = group.items,\n m = items.length;\n\n for (let j = 0; j < m; ++j) {\n bounds.union(items[j].bounds);\n }\n }\n\n if ((group.clip || group.width || group.height) && !group.noBound) {\n bounds.add(0, 0).add(group.width || 0, group.height || 0);\n }\n\n boundStroke(bounds, group);\n return bounds.translate(group.x || 0, group.y || 0);\n}\n\nfunction rectanglePath(context, group, x, y) {\n const off = offset$1(group);\n context.beginPath();\n rectangle(context, group, (x || 0) + off, (y || 0) + off);\n}\n\nconst hitBackground = hitPath(rectanglePath);\nconst hitForeground = hitPath(rectanglePath, false);\nconst hitCorner = hitPath(rectanglePath, true);\n\nfunction draw$4(context, scene, bounds) {\n visit(scene, group => {\n const gx = group.x || 0,\n gy = group.y || 0,\n fore = group.strokeForeground,\n opacity = group.opacity == null ? 1 : group.opacity; // draw group background\n\n if ((group.stroke || group.fill) && opacity) {\n rectanglePath(context, group, gx, gy);\n blend(context, group);\n\n if (group.fill && fill(context, group, opacity)) {\n context.fill();\n }\n\n if (group.stroke && !fore && stroke(context, group, opacity)) {\n context.stroke();\n }\n } // setup graphics context, set clip and bounds\n\n\n context.save();\n context.translate(gx, gy);\n if (group.clip) clipGroup(context, group);\n if (bounds) bounds.translate(-gx, -gy); // draw group contents\n\n visit(group, item => {\n this.draw(context, item, bounds);\n }); // restore graphics context\n\n if (bounds) bounds.translate(gx, gy);\n context.restore(); // draw group foreground\n\n if (fore && group.stroke && opacity) {\n rectanglePath(context, group, gx, gy);\n blend(context, group);\n\n if (stroke(context, group, opacity)) {\n context.stroke();\n }\n }\n });\n}\n\nfunction pick(context, scene, x, y, gx, gy) {\n if (scene.bounds && !scene.bounds.contains(gx, gy) || !scene.items) {\n return null;\n }\n\n const cx = x * context.pixelRatio,\n cy = y * context.pixelRatio;\n return pickVisit(scene, group => {\n let hit, dx, dy; // first hit test bounding box\n\n const b = group.bounds;\n if (b && !b.contains(gx, gy)) return; // passed bounds check, test rectangular clip\n\n dx = group.x || 0;\n dy = group.y || 0;\n const dw = dx + (group.width || 0),\n dh = dy + (group.height || 0),\n c = group.clip;\n if (c && (gx < dx || gx > dw || gy < dy || gy > dh)) return; // adjust coordinate system\n\n context.save();\n context.translate(dx, dy);\n dx = gx - dx;\n dy = gy - dy; // test background for rounded corner clip\n\n if (c && hasCornerRadius(group) && !hitCorner(context, group, cx, cy)) {\n context.restore();\n return null;\n }\n\n const fore = group.strokeForeground,\n ix = scene.interactive !== false; // hit test against group foreground\n\n if (ix && fore && group.stroke && hitForeground(context, group, cx, cy)) {\n context.restore();\n return group;\n } // hit test against contained marks\n\n\n hit = pickVisit(group, mark => pickMark(mark, dx, dy) ? this.pick(mark, x, y, dx, dy) : null); // hit test against group background\n\n if (!hit && ix && (group.fill || !fore && group.stroke) && hitBackground(context, group, cx, cy)) {\n hit = group;\n } // restore state and return\n\n\n context.restore();\n return hit || null;\n });\n}\n\nfunction pickMark(mark, x, y) {\n return (mark.interactive !== false || mark.marktype === 'group') && mark.bounds && mark.bounds.contains(x, y);\n}\n\nvar group = {\n type: 'group',\n tag: 'g',\n nested: false,\n attr: attr$5,\n bound: bound$5,\n draw: draw$4,\n pick: pick,\n isect: intersectRect,\n content: content,\n background: background,\n foreground: foreground\n};\n\nvar metadata = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'version': '1.1'\n};\n\nfunction getImage(item, renderer) {\n var image = item.image;\n\n if (!image || item.url && item.url !== image.url) {\n image = {\n complete: false,\n width: 0,\n height: 0\n };\n renderer.loadImage(item.url).then(image => {\n item.image = image;\n item.image.url = item.url;\n });\n }\n\n return image;\n}\n\nfunction imageWidth(item, image) {\n return item.width != null ? item.width : !image || !image.width ? 0 : item.aspect !== false && item.height ? item.height * image.width / image.height : image.width;\n}\n\nfunction imageHeight(item, image) {\n return item.height != null ? item.height : !image || !image.height ? 0 : item.aspect !== false && item.width ? item.width * image.height / image.width : image.height;\n}\n\nfunction imageXOffset(align, w) {\n return align === 'center' ? w / 2 : align === 'right' ? w : 0;\n}\n\nfunction imageYOffset(baseline, h) {\n return baseline === 'middle' ? h / 2 : baseline === 'bottom' ? h : 0;\n}\n\nfunction attr$4(emit, item, renderer) {\n const img = getImage(item, renderer),\n w = imageWidth(item, img),\n h = imageHeight(item, img),\n x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h),\n i = !img.src && img.toDataURL ? img.toDataURL() : img.src || '';\n emit('href', i, metadata['xmlns:xlink'], 'xlink:href');\n emit('transform', translate(x, y));\n emit('width', w);\n emit('height', h);\n emit('preserveAspectRatio', item.aspect === false ? 'none' : 'xMidYMid');\n}\n\nfunction bound$4(bounds, item) {\n const img = item.image,\n w = imageWidth(item, img),\n h = imageHeight(item, img),\n x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h);\n return bounds.set(x, y, x + w, y + h);\n}\n\nfunction draw$3(context, scene, bounds) {\n visit(scene, item => {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n const img = getImage(item, this);\n let w = imageWidth(item, img);\n let h = imageHeight(item, img);\n if (w === 0 || h === 0) return; // early exit\n\n let x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h),\n opacity,\n ar0,\n ar1,\n t;\n\n if (item.aspect !== false) {\n ar0 = img.width / img.height;\n ar1 = item.width / item.height;\n\n if (ar0 === ar0 && ar1 === ar1 && ar0 !== ar1) {\n if (ar1 < ar0) {\n t = w / ar0;\n y += (h - t) / 2;\n h = t;\n } else {\n t = h * ar0;\n x += (w - t) / 2;\n w = t;\n }\n }\n }\n\n if (img.complete || img.toDataURL) {\n blend(context, item);\n context.globalAlpha = (opacity = item.opacity) != null ? opacity : 1;\n context.imageSmoothingEnabled = item.smooth !== false;\n context.drawImage(img, x, y, w, h);\n }\n });\n}\n\nvar image = {\n type: 'image',\n tag: 'image',\n nested: false,\n attr: attr$4,\n bound: bound$4,\n draw: draw$3,\n pick: pick$1(),\n isect: truthy,\n // bounds check is sufficient\n get: getImage,\n xOffset: imageXOffset,\n yOffset: imageYOffset\n};\n\nvar line = markMultiItemPath('line', line$1, pickLine);\n\nfunction attr$3(emit, item) {\n var sx = item.scaleX || 1,\n sy = item.scaleY || 1;\n\n if (sx !== 1 || sy !== 1) {\n emit('vector-effect', 'non-scaling-stroke');\n }\n\n emit('transform', transformItem(item));\n emit('d', item.path);\n}\n\nfunction path$1(context, item) {\n var path = item.path;\n if (path == null) return true;\n var x = item.x || 0,\n y = item.y || 0,\n sx = item.scaleX || 1,\n sy = item.scaleY || 1,\n a = (item.angle || 0) * DegToRad,\n cache = item.pathCache;\n\n if (!cache || cache.path !== path) {\n (item.pathCache = cache = pathParse(path)).path = path;\n }\n\n if (a && context.rotate && context.translate) {\n context.translate(x, y);\n context.rotate(a);\n pathRender(context, cache, 0, 0, sx, sy);\n context.rotate(-a);\n context.translate(-x, -y);\n } else {\n pathRender(context, cache, x, y, sx, sy);\n }\n}\n\nfunction bound$3(bounds, item) {\n return path$1(boundContext(bounds, item.angle), item) ? bounds.set(0, 0, 0, 0) : boundStroke(bounds, item, true);\n}\n\nvar path$2 = {\n type: 'path',\n tag: 'path',\n nested: false,\n attr: attr$3,\n bound: bound$3,\n draw: drawAll(path$1),\n pick: pickPath(path$1),\n isect: intersectPath(path$1)\n};\n\nfunction attr$2(emit, item) {\n emit('d', rectangle(null, item));\n}\n\nfunction bound$2(bounds, item) {\n var x, y;\n return boundStroke(bounds.set(x = item.x || 0, y = item.y || 0, x + item.width || 0, y + item.height || 0), item);\n}\n\nfunction draw$2(context, item) {\n context.beginPath();\n rectangle(context, item);\n}\n\nvar rect = {\n type: 'rect',\n tag: 'path',\n nested: false,\n attr: attr$2,\n bound: bound$2,\n draw: drawAll(draw$2),\n pick: pickPath(draw$2),\n isect: intersectRect\n};\n\nfunction attr$1(emit, item) {\n emit('transform', translateItem(item));\n emit('x2', item.x2 != null ? item.x2 - (item.x || 0) : 0);\n emit('y2', item.y2 != null ? item.y2 - (item.y || 0) : 0);\n}\n\nfunction bound$1(bounds, item) {\n var x1, y1;\n return boundStroke(bounds.set(x1 = item.x || 0, y1 = item.y || 0, item.x2 != null ? item.x2 : x1, item.y2 != null ? item.y2 : y1), item);\n}\n\nfunction path(context, item, opacity) {\n var x1, y1, x2, y2;\n\n if (item.stroke && stroke(context, item, opacity)) {\n x1 = item.x || 0;\n y1 = item.y || 0;\n x2 = item.x2 != null ? item.x2 : x1;\n y2 = item.y2 != null ? item.y2 : y1;\n context.beginPath();\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n return true;\n }\n\n return false;\n}\n\nfunction draw$1(context, scene, bounds) {\n visit(scene, item => {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n var opacity = item.opacity == null ? 1 : item.opacity;\n\n if (opacity && path(context, item, opacity)) {\n blend(context, item);\n context.stroke();\n }\n });\n}\n\nfunction hit$1(context, item, x, y) {\n if (!context.isPointInStroke) return false;\n return path(context, item, 1) && context.isPointInStroke(x, y);\n}\n\nvar rule = {\n type: 'rule',\n tag: 'line',\n nested: false,\n attr: attr$1,\n bound: bound$1,\n draw: draw$1,\n pick: pick$1(hit$1),\n isect: intersectRule\n};\n\nvar shape = markItemPath('shape', shape$1);\n\nvar symbol = markItemPath('symbol', symbol$1, intersectPoint);\n\nconst widthCache = lruCache();\nvar textMetrics = {\n height: fontSize,\n measureWidth: measureWidth,\n estimateWidth: estimateWidth,\n width: estimateWidth,\n canvas: useCanvas\n};\nuseCanvas(true);\n\nfunction useCanvas(use) {\n textMetrics.width = use && context ? measureWidth : estimateWidth;\n} // make simple estimate if no canvas is available\n\n\nfunction estimateWidth(item, text) {\n return _estimateWidth(textValue(item, text), fontSize(item));\n}\n\nfunction _estimateWidth(text, currentFontHeight) {\n return ~~(0.8 * text.length * currentFontHeight);\n} // measure text width if canvas is available\n\n\nfunction measureWidth(item, text) {\n return fontSize(item) <= 0 || !(text = textValue(item, text)) ? 0 : _measureWidth(text, font(item));\n}\n\nfunction _measureWidth(text, currentFont) {\n const key = `(${currentFont}) ${text}`;\n let width = widthCache.get(key);\n\n if (width === undefined) {\n context.font = currentFont;\n width = context.measureText(text).width;\n widthCache.set(key, width);\n }\n\n return width;\n}\n\nfunction fontSize(item) {\n return item.fontSize != null ? +item.fontSize || 0 : 11;\n}\nfunction lineHeight(item) {\n return item.lineHeight != null ? item.lineHeight : fontSize(item) + 2;\n}\n\nfunction lineArray(_) {\n return isArray(_) ? _.length > 1 ? _ : _[0] : _;\n}\n\nfunction textLines(item) {\n return lineArray(item.lineBreak && item.text && !isArray(item.text) ? item.text.split(item.lineBreak) : item.text);\n}\nfunction multiLineOffset(item) {\n const tl = textLines(item);\n return (isArray(tl) ? tl.length - 1 : 0) * lineHeight(item);\n}\nfunction textValue(item, line) {\n const text = line == null ? '' : (line + '').trim();\n return item.limit > 0 && text.length ? truncate(item, text) : text;\n}\n\nfunction widthGetter(item) {\n if (textMetrics.width === measureWidth) {\n // we are using canvas\n const currentFont = font(item);\n return text => _measureWidth(text, currentFont);\n } else {\n // we are relying on estimates\n const currentFontHeight = fontSize(item);\n return text => _estimateWidth(text, currentFontHeight);\n }\n}\n\nfunction truncate(item, text) {\n var limit = +item.limit,\n width = widthGetter(item);\n if (width(text) < limit) return text;\n var ellipsis = item.ellipsis || '\\u2026',\n rtl = item.dir === 'rtl',\n lo = 0,\n hi = text.length,\n mid;\n limit -= width(ellipsis);\n\n if (rtl) {\n while (lo < hi) {\n mid = lo + hi >>> 1;\n if (width(text.slice(mid)) > limit) lo = mid + 1;else hi = mid;\n }\n\n return ellipsis + text.slice(lo);\n } else {\n while (lo < hi) {\n mid = 1 + (lo + hi >>> 1);\n if (width(text.slice(0, mid)) < limit) lo = mid;else hi = mid - 1;\n }\n\n return text.slice(0, lo) + ellipsis;\n }\n}\n\nfunction fontFamily(item, quote) {\n var font = item.font;\n return (quote && font ? String(font).replace(/\"/g, '\\'') : font) || 'sans-serif';\n}\nfunction font(item, quote) {\n return '' + (item.fontStyle ? item.fontStyle + ' ' : '') + (item.fontVariant ? item.fontVariant + ' ' : '') + (item.fontWeight ? item.fontWeight + ' ' : '') + fontSize(item) + 'px ' + fontFamily(item, quote);\n}\nfunction offset(item) {\n // perform our own font baseline calculation\n // why? not all browsers support SVG 1.1 'alignment-baseline' :(\n // this also ensures consistent layout across renderers\n var baseline = item.baseline,\n h = fontSize(item);\n return Math.round(baseline === 'top' ? 0.79 * h : baseline === 'middle' ? 0.30 * h : baseline === 'bottom' ? -0.21 * h : baseline === 'line-top' ? 0.29 * h + 0.5 * lineHeight(item) : baseline === 'line-bottom' ? 0.29 * h - 0.5 * lineHeight(item) : 0);\n}\n\nconst textAlign = {\n 'left': 'start',\n 'center': 'middle',\n 'right': 'end'\n};\nconst tempBounds = new Bounds();\n\nfunction anchorPoint(item) {\n var x = item.x || 0,\n y = item.y || 0,\n r = item.radius || 0,\n t;\n\n if (r) {\n t = (item.theta || 0) - HalfPi;\n x += r * Math.cos(t);\n y += r * Math.sin(t);\n }\n\n tempBounds.x1 = x;\n tempBounds.y1 = y;\n return tempBounds;\n}\n\nfunction attr(emit, item) {\n var dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item),\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n a = item.angle || 0,\n t;\n emit('text-anchor', textAlign[item.align] || 'start');\n\n if (a) {\n t = translate(x, y) + ' ' + rotate(a);\n if (dx || dy) t += ' ' + translate(dx, dy);\n } else {\n t = translate(x + dx, y + dy);\n }\n\n emit('transform', t);\n}\n\nfunction bound(bounds, item, mode) {\n var h = textMetrics.height(item),\n a = item.align,\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item) - Math.round(0.8 * h),\n // use 4/5 offset\n tl = textLines(item),\n w; // get dimensions\n\n if (isArray(tl)) {\n // multi-line text\n h += lineHeight(item) * (tl.length - 1);\n w = tl.reduce((w, t) => Math.max(w, textMetrics.width(item, t)), 0);\n } else {\n // single-line text\n w = textMetrics.width(item, tl);\n } // horizontal alignment\n\n\n if (a === 'center') {\n dx -= w / 2;\n } else if (a === 'right') {\n dx -= w;\n } else ;\n\n bounds.set(dx += x, dy += y, dx + w, dy + h);\n\n if (item.angle && !mode) {\n bounds.rotate(item.angle * DegToRad, x, y);\n } else if (mode === 2) {\n return bounds.rotatedPoints(item.angle * DegToRad, x, y);\n }\n\n return bounds;\n}\n\nfunction draw(context, scene, bounds) {\n visit(scene, item => {\n var opacity = item.opacity == null ? 1 : item.opacity,\n p,\n x,\n y,\n i,\n lh,\n tl,\n str;\n if (bounds && !bounds.intersects(item.bounds) || // bounds check\n opacity === 0 || item.fontSize <= 0 || item.text == null || item.text.length === 0) return;\n context.font = font(item);\n context.textAlign = item.align || 'left';\n p = anchorPoint(item);\n x = p.x1, y = p.y1;\n\n if (item.angle) {\n context.save();\n context.translate(x, y);\n context.rotate(item.angle * DegToRad);\n x = y = 0; // reset x, y\n }\n\n x += item.dx || 0;\n y += (item.dy || 0) + offset(item);\n tl = textLines(item);\n blend(context, item);\n\n if (isArray(tl)) {\n lh = lineHeight(item);\n\n for (i = 0; i < tl.length; ++i) {\n str = textValue(item, tl[i]);\n\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n\n y += lh;\n }\n } else {\n str = textValue(item, tl);\n\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n }\n\n if (item.angle) context.restore();\n });\n}\n\nfunction hit(context, item, x, y, gx, gy) {\n if (item.fontSize <= 0) return false;\n if (!item.angle) return true; // bounds sufficient if no rotation\n // project point into space of unrotated bounds\n\n var p = anchorPoint(item),\n ax = p.x1,\n ay = p.y1,\n b = bound(tempBounds, item, 1),\n a = -item.angle * DegToRad,\n cos = Math.cos(a),\n sin = Math.sin(a),\n px = cos * gx - sin * gy + (ax - cos * ax + sin * ay),\n py = sin * gx + cos * gy + (ay - sin * ax - cos * ay);\n return b.contains(px, py);\n}\n\nfunction intersectText(item, box) {\n const p = bound(tempBounds, item, 2);\n return intersectBoxLine(box, p[0], p[1], p[2], p[3]) || intersectBoxLine(box, p[0], p[1], p[4], p[5]) || intersectBoxLine(box, p[4], p[5], p[6], p[7]) || intersectBoxLine(box, p[2], p[3], p[6], p[7]);\n}\n\nvar text = {\n type: 'text',\n tag: 'text',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick$1(hit),\n isect: intersectText\n};\n\nvar trail = markMultiItemPath('trail', trail$1, pickTrail);\n\nvar Marks = {\n arc: arc,\n area: area,\n group: group,\n image: image,\n line: line,\n path: path$2,\n rect: rect,\n rule: rule,\n shape: shape,\n symbol: symbol,\n text: text,\n trail: trail\n};\n\nfunction boundItem (item, func, opt) {\n var type = Marks[item.mark.marktype],\n bound = func || type.bound;\n if (type.nested) item = item.mark;\n return bound(item.bounds || (item.bounds = new Bounds()), item, opt);\n}\n\nvar DUMMY = {\n mark: null\n};\nfunction boundMark (mark, bounds, opt) {\n var type = Marks[mark.marktype],\n bound = type.bound,\n items = mark.items,\n hasItems = items && items.length,\n i,\n n,\n item,\n b;\n\n if (type.nested) {\n if (hasItems) {\n item = items[0];\n } else {\n // no items, fake it\n DUMMY.mark = mark;\n item = DUMMY;\n }\n\n b = boundItem(item, bound, opt);\n bounds = bounds && bounds.union(b) || b;\n return bounds;\n }\n\n bounds = bounds || mark.bounds && mark.bounds.clear() || new Bounds();\n\n if (hasItems) {\n for (i = 0, n = items.length; i < n; ++i) {\n bounds.union(boundItem(items[i], bound, opt));\n }\n }\n\n return mark.bounds = bounds;\n}\n\nconst keys = ['marktype', 'name', 'role', 'interactive', 'clip', 'items', 'zindex', 'x', 'y', 'width', 'height', 'align', 'baseline', // layout\n'fill', 'fillOpacity', 'opacity', 'blend', // fill\n'stroke', 'strokeOpacity', 'strokeWidth', 'strokeCap', // stroke\n'strokeDash', 'strokeDashOffset', // stroke dash\n'strokeForeground', 'strokeOffset', // group\n'startAngle', 'endAngle', 'innerRadius', 'outerRadius', // arc\n'cornerRadius', 'padAngle', // arc, rect\n'cornerRadiusTopLeft', 'cornerRadiusTopRight', // rect, group\n'cornerRadiusBottomLeft', 'cornerRadiusBottomRight', 'interpolate', 'tension', 'orient', 'defined', // area, line\n'url', 'aspect', 'smooth', // image\n'path', 'scaleX', 'scaleY', // path\n'x2', 'y2', // rule\n'size', 'shape', // symbol\n'text', 'angle', 'theta', 'radius', 'dir', 'dx', 'dy', // text\n'ellipsis', 'limit', 'lineBreak', 'lineHeight', 'font', 'fontSize', 'fontWeight', 'fontStyle', 'fontVariant', // font\n'description', 'aria', 'ariaRole', 'ariaRoleDescription' // aria\n];\nfunction sceneToJSON(scene, indent) {\n return JSON.stringify(scene, keys, indent);\n}\nfunction sceneFromJSON(json) {\n const scene = typeof json === 'string' ? JSON.parse(json) : json;\n return initialize(scene);\n}\n\nfunction initialize(scene) {\n var type = scene.marktype,\n items = scene.items,\n parent,\n i,\n n;\n\n if (items) {\n for (i = 0, n = items.length; i < n; ++i) {\n parent = type ? 'mark' : 'group';\n items[i][parent] = scene;\n if (items[i].zindex) items[i][parent].zdirty = true;\n if ('group' === (type || parent)) initialize(items[i]);\n }\n }\n\n if (type) boundMark(scene);\n return scene;\n}\n\nfunction Scenegraph(scene) {\n if (arguments.length) {\n this.root = sceneFromJSON(scene);\n } else {\n this.root = createMark({\n marktype: 'group',\n name: 'root',\n role: 'frame'\n });\n this.root.items = [new GroupItem(this.root)];\n }\n}\nScenegraph.prototype = {\n toJSON(indent) {\n return sceneToJSON(this.root, indent || 0);\n },\n\n mark(markdef, group, index) {\n group = group || this.root.items[0];\n const mark = createMark(markdef, group);\n group.items[index] = mark;\n if (mark.zindex) mark.group.zdirty = true;\n return mark;\n }\n\n};\n\nfunction createMark(def, group) {\n const mark = {\n bounds: new Bounds(),\n clip: !!def.clip,\n group: group,\n interactive: def.interactive === false ? false : true,\n items: [],\n marktype: def.marktype,\n name: def.name || undefined,\n role: def.role || undefined,\n zindex: def.zindex || 0\n }; // add accessibility properties if defined\n\n if (def.aria != null) {\n mark.aria = def.aria;\n }\n\n if (def.description) {\n mark.description = def.description;\n }\n\n return mark;\n}\n\n// create a new DOM element\nfunction domCreate(doc, tag, ns) {\n if (!doc && typeof document !== 'undefined' && document.createElement) {\n doc = document;\n }\n\n return doc ? ns ? doc.createElementNS(ns, tag) : doc.createElement(tag) : null;\n} // find first child element with matching tag\n\nfunction domFind(el, tag) {\n tag = tag.toLowerCase();\n var nodes = el.childNodes,\n i = 0,\n n = nodes.length;\n\n for (; i < n; ++i) if (nodes[i].tagName.toLowerCase() === tag) {\n return nodes[i];\n }\n} // retrieve child element at given index\n// create & insert if doesn't exist or if tags do not match\n\nfunction domChild(el, index, tag, ns) {\n var a = el.childNodes[index],\n b;\n\n if (!a || a.tagName.toLowerCase() !== tag.toLowerCase()) {\n b = a || null;\n a = domCreate(el.ownerDocument, tag, ns);\n el.insertBefore(a, b);\n }\n\n return a;\n} // remove all child elements at or above the given index\n\nfunction domClear(el, index) {\n var nodes = el.childNodes,\n curr = nodes.length;\n\n while (curr > index) el.removeChild(nodes[--curr]);\n\n return el;\n} // generate css class name for mark\n\nfunction cssClass(mark) {\n return 'mark-' + mark.marktype + (mark.role ? ' role-' + mark.role : '') + (mark.name ? ' ' + mark.name : '');\n}\n\nfunction point (event, el) {\n const rect = el.getBoundingClientRect();\n return [event.clientX - rect.left - (el.clientLeft || 0), event.clientY - rect.top - (el.clientTop || 0)];\n}\n\nfunction resolveItem (item, event, el, origin) {\n var mark = item && item.mark,\n mdef,\n p;\n\n if (mark && (mdef = Marks[mark.marktype]).tip) {\n p = point(event, el);\n p[0] -= origin[0];\n p[1] -= origin[1];\n\n while (item = item.mark.group) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n }\n\n item = mdef.tip(mark.items, p);\n }\n\n return item;\n}\n\n/**\n * Create a new Handler instance.\n * @param {object} [customLoader] - Optional loader instance for\n * href URL sanitization. If not specified, a standard loader\n * instance will be generated.\n * @param {function} [customTooltip] - Optional tooltip handler\n * function for custom tooltip display.\n * @constructor\n */\n\nfunction Handler(customLoader, customTooltip) {\n this._active = null;\n this._handlers = {};\n this._loader = customLoader || loader();\n this._tooltip = customTooltip || defaultTooltip;\n} // The default tooltip display handler.\n// Sets the HTML title attribute on the visualization container.\n\nfunction defaultTooltip(handler, event, item, value) {\n handler.element().setAttribute('title', value || '');\n}\n\nHandler.prototype = {\n /**\n * Initialize a new Handler instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {object} [obj] - Optional context object that should serve as\n * the \"this\" context for event callbacks.\n * @return {Handler} - This handler instance.\n */\n initialize(el, origin, obj) {\n this._el = el;\n this._obj = obj || null;\n return this.origin(origin);\n },\n\n /**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\n element() {\n return this._el;\n },\n\n /**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\n canvas() {\n return this._el && this._el.firstChild;\n },\n\n /**\n * Get / set the origin coordinates of the visualization.\n */\n origin(origin) {\n if (arguments.length) {\n this._origin = origin || [0, 0];\n return this;\n } else {\n return this._origin.slice();\n }\n },\n\n /**\n * Get / set the scenegraph root.\n */\n scene(scene) {\n if (!arguments.length) return this._scene;\n this._scene = scene;\n return this;\n },\n\n /**\n * Add an event handler. Subclasses should override this method.\n */\n on()\n /*type, handler*/\n {},\n\n /**\n * Remove an event handler. Subclasses should override this method.\n */\n off()\n /*type, handler*/\n {},\n\n /**\n * Utility method for finding the array index of an event handler.\n * @param {Array} h - An array of registered event handlers.\n * @param {string} type - The event type.\n * @param {function} handler - The event handler instance to find.\n * @return {number} - The handler's array index or -1 if not registered.\n */\n _handlerIndex(h, type, handler) {\n for (let i = h ? h.length : 0; --i >= 0;) {\n if (h[i].type === type && (!handler || h[i].handler === handler)) {\n return i;\n }\n }\n\n return -1;\n },\n\n /**\n * Returns an array with registered event handlers.\n * @param {string} [type] - The event type to query. Any annotations\n * are ignored; for example, for the argument \"click.foo\", \".foo\" will\n * be ignored and the method returns all \"click\" handlers. If type is\n * null or unspecified, this method returns handlers for all types.\n * @return {Array} - A new array containing all registered event handlers.\n */\n handlers(type) {\n const h = this._handlers,\n a = [];\n\n if (type) {\n a.push(...h[this.eventName(type)]);\n } else {\n for (const k in h) {\n a.push(...h[k]);\n }\n }\n\n return a;\n },\n\n /**\n * Parses an event name string to return the specific event type.\n * For example, given \"click.foo\" returns \"click\"\n * @param {string} name - The input event type string.\n * @return {string} - A string with the event type only.\n */\n eventName(name) {\n const i = name.indexOf('.');\n return i < 0 ? name : name.slice(0, i);\n },\n\n /**\n * Handle hyperlink navigation in response to an item.href value.\n * @param {Event} event - The event triggering hyperlink navigation.\n * @param {Item} item - The scenegraph item.\n * @param {string} href - The URL to navigate to.\n */\n handleHref(event, item, href) {\n this._loader.sanitize(href, {\n context: 'href'\n }).then(opt => {\n const e = new MouseEvent(event.type, event),\n a = domCreate(null, 'a');\n\n for (const name in opt) a.setAttribute(name, opt[name]);\n\n a.dispatchEvent(e);\n }).catch(() => {\n /* do nothing */\n });\n },\n\n /**\n * Handle tooltip display in response to an item.tooltip value.\n * @param {Event} event - The event triggering tooltip display.\n * @param {Item} item - The scenegraph item.\n * @param {boolean} show - A boolean flag indicating whether\n * to show or hide a tooltip for the given item.\n */\n handleTooltip(event, item, show) {\n if (item && item.tooltip != null) {\n item = resolveItem(item, event, this.canvas(), this._origin);\n const value = show && item && item.tooltip || null;\n\n this._tooltip.call(this._obj, this, event, item, value);\n }\n },\n\n /**\n * Returns the size of a scenegraph item and its position relative\n * to the viewport.\n * @param {Item} item - The scenegraph item.\n * @return {object} - A bounding box object (compatible with the\n * DOMRect type) consisting of x, y, width, heigh, top, left,\n * right, and bottom properties.\n */\n getItemBoundingClientRect(item) {\n const el = this.canvas();\n if (!el) return;\n const rect = el.getBoundingClientRect(),\n origin = this._origin,\n bounds = item.bounds,\n width = bounds.width(),\n height = bounds.height();\n let x = bounds.x1 + origin[0] + rect.left,\n y = bounds.y1 + origin[1] + rect.top; // translate coordinate for each parent group\n\n while (item.mark && (item = item.mark.group)) {\n x += item.x || 0;\n y += item.y || 0;\n } // return DOMRect-compatible bounding box\n\n\n return {\n x,\n y,\n width,\n height,\n left: x,\n top: y,\n right: x + width,\n bottom: y + height\n };\n }\n\n};\n\n/**\n * Create a new Renderer instance.\n * @param {object} [loader] - Optional loader instance for\n * image and href URL sanitization. If not specified, a\n * standard loader instance will be generated.\n * @constructor\n */\n\nfunction Renderer(loader) {\n this._el = null;\n this._bgcolor = null;\n this._loader = new ResourceLoader(loader);\n}\nRenderer.prototype = {\n /**\n * Initialize a new Renderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n this._el = el;\n return this.resize(width, height, origin, scaleFactor);\n },\n\n /**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\n element() {\n return this._el;\n },\n\n /**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\n canvas() {\n return this._el && this._el.firstChild;\n },\n\n /**\n * Get / set the background color.\n */\n background(bgcolor) {\n if (arguments.length === 0) return this._bgcolor;\n this._bgcolor = bgcolor;\n return this;\n },\n\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n this._width = width;\n this._height = height;\n this._origin = origin || [0, 0];\n this._scale = scaleFactor || 1;\n return this;\n },\n\n /**\n * Report a dirty item whose bounds should be redrawn.\n * This base class method does nothing. Subclasses that perform\n * incremental should implement this method.\n * @param {Item} item - The dirty item whose bounds should be redrawn.\n */\n dirty()\n /*item*/\n {},\n\n /**\n * Render an input scenegraph, potentially with a set of dirty items.\n * This method will perform an immediate rendering with available resources.\n * The renderer may also need to perform image loading to perform a complete\n * render. This process can lead to asynchronous re-rendering of the scene\n * after this method returns. To receive notification when rendering is\n * complete, use the renderAsync method instead.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Renderer} - This renderer instance.\n */\n render(scene) {\n const r = this; // bind arguments into a render call, and cache it\n // this function may be subsequently called for async redraw\n\n r._call = function () {\n r._render(scene);\n }; // invoke the renderer\n\n\n r._call(); // clear the cached call for garbage collection\n // async redraws will stash their own copy\n\n\n r._call = null;\n return r;\n },\n\n /**\n * Internal rendering method. Renderer subclasses should override this\n * method to actually perform rendering.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\n _render()\n /*scene*/\n {// subclasses to override\n },\n\n /**\n * Asynchronous rendering method. Similar to render, but returns a Promise\n * that resolves when all rendering is completed. Sometimes a renderer must\n * perform image loading to get a complete rendering. The returned\n * Promise will not resolve until this process completes.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Promise} - A Promise that resolves when rendering is complete.\n */\n renderAsync(scene) {\n const r = this.render(scene);\n return this._ready ? this._ready.then(() => r) : Promise.resolve(r);\n },\n\n /**\n * Internal method for asynchronous resource loading.\n * Proxies method calls to the ImageLoader, and tracks loading\n * progress to invoke a re-render once complete.\n * @param {string} method - The method name to invoke on the ImageLoader.\n * @param {string} uri - The URI for the requested resource.\n * @return {Promise} - A Promise that resolves to the requested resource.\n */\n _load(method, uri) {\n var r = this,\n p = r._loader[method](uri);\n\n if (!r._ready) {\n // re-render the scene when loading completes\n const call = r._call;\n r._ready = r._loader.ready().then(redraw => {\n if (redraw) call();\n r._ready = null;\n });\n }\n\n return p;\n },\n\n /**\n * Sanitize a URL to include as a hyperlink in the rendered scene.\n * This method proxies a call to ImageLoader.sanitizeURL, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string to sanitize.\n * @return {Promise} - A Promise that resolves to the sanitized URL.\n */\n sanitizeURL(uri) {\n return this._load('sanitizeURL', uri);\n },\n\n /**\n * Requests an image to include in the rendered scene.\n * This method proxies a call to ImageLoader.loadImage, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string of the image.\n * @return {Promise} - A Promise that resolves to the loaded Image.\n */\n loadImage(uri) {\n return this._load('loadImage', uri);\n }\n\n};\n\nconst KeyDownEvent = 'keydown';\nconst KeyPressEvent = 'keypress';\nconst KeyUpEvent = 'keyup';\nconst DragEnterEvent = 'dragenter';\nconst DragLeaveEvent = 'dragleave';\nconst DragOverEvent = 'dragover';\nconst MouseDownEvent = 'mousedown';\nconst MouseUpEvent = 'mouseup';\nconst MouseMoveEvent = 'mousemove';\nconst MouseOutEvent = 'mouseout';\nconst MouseOverEvent = 'mouseover';\nconst ClickEvent = 'click';\nconst DoubleClickEvent = 'dblclick';\nconst WheelEvent = 'wheel';\nconst MouseWheelEvent = 'mousewheel';\nconst TouchStartEvent = 'touchstart';\nconst TouchMoveEvent = 'touchmove';\nconst TouchEndEvent = 'touchend';\nconst Events = [KeyDownEvent, KeyPressEvent, KeyUpEvent, DragEnterEvent, DragLeaveEvent, DragOverEvent, MouseDownEvent, MouseUpEvent, MouseMoveEvent, MouseOutEvent, MouseOverEvent, ClickEvent, DoubleClickEvent, WheelEvent, MouseWheelEvent, TouchStartEvent, TouchMoveEvent, TouchEndEvent];\nconst TooltipShowEvent = MouseMoveEvent;\nconst TooltipHideEvent = MouseOutEvent;\nconst HrefEvent = ClickEvent;\n\nfunction CanvasHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n this._down = null;\n this._touch = null;\n this._first = true;\n this._events = {};\n}\n\nconst eventBundle = type => type === TouchStartEvent || type === TouchMoveEvent || type === TouchEndEvent ? [TouchStartEvent, TouchMoveEvent, TouchEndEvent] : [type]; // lazily add listeners to the canvas as needed\n\n\nfunction eventListenerCheck(handler, type) {\n eventBundle(type).forEach(_ => addEventListener(handler, _));\n}\n\nfunction addEventListener(handler, type) {\n const canvas = handler.canvas();\n\n if (canvas && !handler._events[type]) {\n handler._events[type] = 1;\n canvas.addEventListener(type, handler[type] ? evt => handler[type](evt) : evt => handler.fire(type, evt));\n }\n}\n\nfunction move(moveEvent, overEvent, outEvent) {\n return function (evt) {\n const a = this._active,\n p = this.pickEvent(evt);\n\n if (p === a) {\n // active item and picked item are the same\n this.fire(moveEvent, evt); // fire move\n } else {\n // active item and picked item are different\n if (!a || !a.exit) {\n // fire out for prior active item\n // suppress if active item was removed from scene\n this.fire(outEvent, evt);\n }\n\n this._active = p; // set new active item\n\n this.fire(overEvent, evt); // fire over for new active item\n\n this.fire(moveEvent, evt); // fire move for new active item\n }\n };\n}\n\nfunction inactive(type) {\n return function (evt) {\n this.fire(type, evt);\n this._active = null;\n };\n}\n\ninherits(CanvasHandler, Handler, {\n initialize(el, origin, obj) {\n this._canvas = el && domFind(el, 'canvas'); // add minimal events required for proper state management\n\n [ClickEvent, MouseDownEvent, MouseMoveEvent, MouseOutEvent, DragLeaveEvent].forEach(type => eventListenerCheck(this, type));\n return Handler.prototype.initialize.call(this, el, origin, obj);\n },\n\n // return the backing canvas instance\n canvas() {\n return this._canvas;\n },\n\n // retrieve the current canvas context\n context() {\n return this._canvas.getContext('2d');\n },\n\n // supported events\n events: Events,\n\n // to keep old versions of firefox happy\n DOMMouseScroll(evt) {\n this.fire(MouseWheelEvent, evt);\n },\n\n mousemove: move(MouseMoveEvent, MouseOverEvent, MouseOutEvent),\n dragover: move(DragOverEvent, DragEnterEvent, DragLeaveEvent),\n mouseout: inactive(MouseOutEvent),\n dragleave: inactive(DragLeaveEvent),\n\n mousedown(evt) {\n this._down = this._active;\n this.fire(MouseDownEvent, evt);\n },\n\n click(evt) {\n if (this._down === this._active) {\n this.fire(ClickEvent, evt);\n this._down = null;\n }\n },\n\n touchstart(evt) {\n this._touch = this.pickEvent(evt.changedTouches[0]);\n\n if (this._first) {\n this._active = this._touch;\n this._first = false;\n }\n\n this.fire(TouchStartEvent, evt, true);\n },\n\n touchmove(evt) {\n this.fire(TouchMoveEvent, evt, true);\n },\n\n touchend(evt) {\n this.fire(TouchEndEvent, evt, true);\n this._touch = null;\n },\n\n // fire an event\n fire(type, evt, touch) {\n const a = touch ? this._touch : this._active,\n h = this._handlers[type]; // set event type relative to scenegraph items\n\n evt.vegaType = type; // handle hyperlinks and tooltips first\n\n if (type === HrefEvent && a && a.href) {\n this.handleHref(evt, a, a.href);\n } else if (type === TooltipShowEvent || type === TooltipHideEvent) {\n this.handleTooltip(evt, a, type !== TooltipHideEvent);\n } // invoke all registered handlers\n\n\n if (h) {\n for (let i = 0, len = h.length; i < len; ++i) {\n h[i].handler.call(this._obj, evt, a);\n }\n }\n },\n\n // add an event handler\n on(type, handler) {\n const name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n\n if (i < 0) {\n eventListenerCheck(this, type);\n (h[name] || (h[name] = [])).push({\n type: type,\n handler: handler\n });\n }\n\n return this;\n },\n\n // remove an event handler\n off(type, handler) {\n const name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n\n if (i >= 0) {\n h.splice(i, 1);\n }\n\n return this;\n },\n\n pickEvent(evt) {\n const p = point(evt, this._canvas),\n o = this._origin;\n return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]);\n },\n\n // find the scenegraph item at the current mouse position\n // x, y -- the absolute x, y mouse coordinates on the canvas element\n // gx, gy -- the relative coordinates within the current group\n pick(scene, x, y, gx, gy) {\n const g = this.context(),\n mark = Marks[scene.marktype];\n return mark.pick.call(this, g, scene, x, y, gx, gy);\n }\n\n});\n\nfunction devicePixelRatio() {\n return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n}\n\nvar pixelRatio = devicePixelRatio();\nfunction resize (canvas, width, height, origin, scaleFactor, opt) {\n const inDOM = typeof HTMLElement !== 'undefined' && canvas instanceof HTMLElement && canvas.parentNode != null,\n context = canvas.getContext('2d'),\n ratio = inDOM ? pixelRatio : scaleFactor;\n canvas.width = width * ratio;\n canvas.height = height * ratio;\n\n for (const key in opt) {\n context[key] = opt[key];\n }\n\n if (inDOM && ratio !== 1) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n\n context.pixelRatio = ratio;\n context.setTransform(ratio, 0, 0, ratio, ratio * origin[0], ratio * origin[1]);\n return canvas;\n}\n\nfunction CanvasRenderer(loader) {\n Renderer.call(this, loader);\n this._options = {};\n this._redraw = false;\n this._dirty = new Bounds();\n this._tempb = new Bounds();\n}\nconst base$1 = Renderer.prototype;\n\nconst viewBounds = (origin, width, height) => new Bounds().set(0, 0, width, height).translate(-origin[0], -origin[1]);\n\nfunction clipToBounds(g, b, origin) {\n // expand bounds by 1 pixel, then round to pixel boundaries\n b.expand(1).round(); // align to base pixel grid in case of non-integer scaling (#2425)\n\n if (g.pixelRatio % 1) {\n b.scale(g.pixelRatio).round().scale(1 / g.pixelRatio);\n } // to avoid artifacts translate if origin has fractional pixels\n\n\n b.translate(-(origin[0] % 1), -(origin[1] % 1)); // set clip path\n\n g.beginPath();\n g.rect(b.x1, b.y1, b.width(), b.height());\n g.clip();\n return b;\n}\n\ninherits(CanvasRenderer, Renderer, {\n initialize(el, width, height, origin, scaleFactor, options) {\n this._options = options || {};\n this._canvas = this._options.externalContext ? null : canvas(1, 1, this._options.type); // instantiate a small canvas\n\n if (el && this._canvas) {\n domClear(el, 0).appendChild(this._canvas);\n\n this._canvas.setAttribute('class', 'marks');\n } // this method will invoke resize to size the canvas appropriately\n\n\n return base$1.initialize.call(this, el, width, height, origin, scaleFactor);\n },\n\n resize(width, height, origin, scaleFactor) {\n base$1.resize.call(this, width, height, origin, scaleFactor);\n\n if (this._canvas) {\n // configure canvas size and transform\n resize(this._canvas, this._width, this._height, this._origin, this._scale, this._options.context);\n } else {\n // external context needs to be scaled and positioned to origin\n const ctx = this._options.externalContext;\n if (!ctx) error('CanvasRenderer is missing a valid canvas or context');\n ctx.scale(this._scale, this._scale);\n ctx.translate(this._origin[0], this._origin[1]);\n }\n\n this._redraw = true;\n return this;\n },\n\n canvas() {\n return this._canvas;\n },\n\n context() {\n return this._options.externalContext || (this._canvas ? this._canvas.getContext('2d') : null);\n },\n\n dirty(item) {\n const b = this._tempb.clear().union(item.bounds);\n\n let g = item.mark.group;\n\n while (g) {\n b.translate(g.x || 0, g.y || 0);\n g = g.mark.group;\n }\n\n this._dirty.union(b);\n },\n\n _render(scene) {\n const g = this.context(),\n o = this._origin,\n w = this._width,\n h = this._height,\n db = this._dirty,\n vb = viewBounds(o, w, h); // setup\n\n g.save();\n const b = this._redraw || db.empty() ? (this._redraw = false, vb.expand(1)) : clipToBounds(g, vb.intersect(db), o);\n this.clear(-o[0], -o[1], w, h); // render\n\n this.draw(g, scene, b); // takedown\n\n g.restore();\n db.clear();\n return this;\n },\n\n draw(ctx, scene, bounds) {\n const mark = Marks[scene.marktype];\n if (scene.clip) clip(ctx, scene);\n mark.draw.call(this, ctx, scene, bounds);\n if (scene.clip) ctx.restore();\n },\n\n clear(x, y, w, h) {\n const opt = this._options,\n g = this.context();\n\n if (opt.type !== 'pdf' && !opt.externalContext) {\n // calling clear rect voids vector output in pdf mode\n // and could remove external context content (#2615)\n g.clearRect(x, y, w, h);\n }\n\n if (this._bgcolor != null) {\n g.fillStyle = this._bgcolor;\n g.fillRect(x, y, w, h);\n }\n }\n\n});\n\nfunction SVGHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n const h = this;\n h._hrefHandler = listener(h, (evt, item) => {\n if (item && item.href) h.handleHref(evt, item, item.href);\n });\n h._tooltipHandler = listener(h, (evt, item) => {\n h.handleTooltip(evt, item, evt.type !== TooltipHideEvent);\n });\n} // wrap an event listener for the SVG DOM\n\nconst listener = (context, handler) => evt => {\n let item = evt.target.__data__;\n item = Array.isArray(item) ? item[0] : item;\n evt.vegaType = evt.type;\n handler.call(context._obj, evt, item);\n};\n\ninherits(SVGHandler, Handler, {\n initialize(el, origin, obj) {\n let svg = this._svg;\n\n if (svg) {\n svg.removeEventListener(HrefEvent, this._hrefHandler);\n svg.removeEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.removeEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n\n this._svg = svg = el && domFind(el, 'svg');\n\n if (svg) {\n svg.addEventListener(HrefEvent, this._hrefHandler);\n svg.addEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.addEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n\n return Handler.prototype.initialize.call(this, el, origin, obj);\n },\n\n canvas() {\n return this._svg;\n },\n\n // add an event handler\n on(type, handler) {\n const name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n\n if (i < 0) {\n const x = {\n type,\n handler,\n listener: listener(this, handler)\n };\n (h[name] || (h[name] = [])).push(x);\n\n if (this._svg) {\n this._svg.addEventListener(name, x.listener);\n }\n }\n\n return this;\n },\n\n // remove an event handler\n off(type, handler) {\n const name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n\n if (i >= 0) {\n if (this._svg) {\n this._svg.removeEventListener(name, h[i].listener);\n }\n\n h.splice(i, 1);\n }\n\n return this;\n }\n\n});\n\nconst ARIA_HIDDEN = 'aria-hidden';\nconst ARIA_LABEL = 'aria-label';\nconst ARIA_ROLE = 'role';\nconst ARIA_ROLEDESCRIPTION = 'aria-roledescription';\nconst GRAPHICS_OBJECT = 'graphics-object';\nconst GRAPHICS_SYMBOL = 'graphics-symbol';\n\nconst bundle = (role, roledesc, label) => ({\n [ARIA_ROLE]: role,\n [ARIA_ROLEDESCRIPTION]: roledesc,\n [ARIA_LABEL]: label || undefined\n}); // these roles are covered by related roles\n// we can ignore them, no need to generate attributes\n\n\nconst AriaIgnore = toSet(['axis-domain', 'axis-grid', 'axis-label', 'axis-tick', 'axis-title', 'legend-band', 'legend-entry', 'legend-gradient', 'legend-label', 'legend-title', 'legend-symbol', 'title']); // aria attribute generators for guide roles\n\nconst AriaGuides = {\n 'axis': {\n desc: 'axis',\n caption: axisCaption\n },\n 'legend': {\n desc: 'legend',\n caption: legendCaption\n },\n 'title-text': {\n desc: 'title',\n caption: item => `Title text '${titleCaption(item)}'`\n },\n 'title-subtitle': {\n desc: 'subtitle',\n caption: item => `Subtitle text '${titleCaption(item)}'`\n }\n}; // aria properties generated for mark item encoding channels\n\nconst AriaEncode = {\n ariaRole: ARIA_ROLE,\n ariaRoleDescription: ARIA_ROLEDESCRIPTION,\n description: ARIA_LABEL\n};\nfunction ariaItemAttributes(emit, item) {\n const hide = item.aria === false;\n emit(ARIA_HIDDEN, hide || undefined);\n\n if (hide || item.description == null) {\n for (const prop in AriaEncode) {\n emit(AriaEncode[prop], undefined);\n }\n } else {\n const type = item.mark.marktype;\n emit(ARIA_LABEL, item.description);\n emit(ARIA_ROLE, item.ariaRole || (type === 'group' ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL));\n emit(ARIA_ROLEDESCRIPTION, item.ariaRoleDescription || `${type} mark`);\n }\n}\nfunction ariaMarkAttributes(mark) {\n return mark.aria === false ? {\n [ARIA_HIDDEN]: true\n } : AriaIgnore[mark.role] ? null : AriaGuides[mark.role] ? ariaGuide(mark, AriaGuides[mark.role]) : ariaMark(mark);\n}\n\nfunction ariaMark(mark) {\n const type = mark.marktype;\n const recurse = type === 'group' || type === 'text' || mark.items.some(_ => _.description != null && _.aria !== false);\n return bundle(recurse ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL, `${type} mark container`, mark.description);\n}\n\nfunction ariaGuide(mark, opt) {\n try {\n const item = mark.items[0],\n caption = opt.caption || (() => '');\n\n return bundle(opt.role || GRAPHICS_SYMBOL, opt.desc, item.description || caption(item));\n } catch (err) {\n return null;\n }\n}\n\nfunction titleCaption(item) {\n return array(item.text).join(' ');\n}\n\nfunction axisCaption(item) {\n const datum = item.datum,\n orient = item.orient,\n title = datum.title ? extractTitle(item) : null,\n ctx = item.context,\n scale = ctx.scales[datum.scale].value,\n locale = ctx.dataflow.locale(),\n type = scale.type,\n xy = orient === 'left' || orient === 'right' ? 'Y' : 'X';\n return `${xy}-axis` + (title ? ` titled '${title}'` : '') + ` for a ${isDiscrete(type) ? 'discrete' : type} scale` + ` with ${domainCaption(locale, scale, item)}`;\n}\n\nfunction legendCaption(item) {\n const datum = item.datum,\n title = datum.title ? extractTitle(item) : null,\n type = `${datum.type || ''} legend`.trim(),\n scales = datum.scales,\n props = Object.keys(scales),\n ctx = item.context,\n scale = ctx.scales[scales[props[0]]].value,\n locale = ctx.dataflow.locale();\n return capitalize(type) + (title ? ` titled '${title}'` : '') + ` for ${channelCaption(props)}` + ` with ${domainCaption(locale, scale, item)}`;\n}\n\nfunction extractTitle(item) {\n try {\n return array(peek(item.items).items[0].text).join(' ');\n } catch (err) {\n return null;\n }\n}\n\nfunction channelCaption(props) {\n props = props.map(p => p + (p === 'fill' || p === 'stroke' ? ' color' : ''));\n return props.length < 2 ? props[0] : props.slice(0, -1).join(', ') + ' and ' + peek(props);\n}\n\nfunction capitalize(s) {\n return s.length ? s[0].toUpperCase() + s.slice(1) : s;\n}\n\nconst innerText = val => (val + '').replace(/&/g, '&').replace(//g, '>');\n\nconst attrText = val => innerText(val).replace(/\"/g, '"').replace(/\\t/g, ' ').replace(/\\n/g, ' ').replace(/\\r/g, ' ');\n\nfunction markup() {\n let buf = '',\n outer = '',\n inner = '';\n\n const stack = [],\n clear = () => outer = inner = '',\n push = tag => {\n if (outer) {\n buf += `${outer}>${inner}`;\n clear();\n }\n\n stack.push(tag);\n },\n attr = (name, value) => {\n if (value != null) outer += ` ${name}=\"${attrText(value)}\"`;\n return m;\n },\n m = {\n open(tag, ...attrs) {\n push(tag);\n outer = '<' + tag;\n\n for (const set of attrs) {\n for (const key in set) attr(key, set[key]);\n }\n\n return m;\n },\n\n close() {\n const tag = stack.pop();\n\n if (outer) {\n buf += outer + (inner ? `>${inner}` : '/>');\n } else {\n buf += ``;\n }\n\n clear();\n return m;\n },\n\n attr,\n text: t => (inner += innerText(t), m),\n toString: () => buf\n };\n\n return m;\n}\nconst serializeXML = node => _serialize(markup(), node) + '';\n\nfunction _serialize(m, node) {\n m.open(node.tagName);\n\n if (node.hasAttributes()) {\n const attrs = node.attributes,\n n = attrs.length;\n\n for (let i = 0; i < n; ++i) {\n m.attr(attrs[i].name, attrs[i].value);\n }\n }\n\n if (node.hasChildNodes()) {\n const children = node.childNodes,\n n = children.length;\n\n for (let i = 0; i < n; i++) {\n const child = children[i];\n child.nodeType === 3 // text node\n ? m.text(child.nodeValue) : _serialize(m, child);\n }\n }\n\n return m.close();\n}\n\nconst styles = {\n fill: 'fill',\n fillOpacity: 'fill-opacity',\n stroke: 'stroke',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n strokeCap: 'stroke-linecap',\n strokeJoin: 'stroke-linejoin',\n strokeDash: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeMiterLimit: 'stroke-miterlimit',\n opacity: 'opacity',\n blend: 'mix-blend-mode'\n}; // ensure miter limit default is consistent with canvas (#2498)\n\nconst rootAttributes = {\n 'fill': 'none',\n 'stroke-miterlimit': 10\n};\n\nconst RootIndex = 0,\n xmlns = 'http://www.w3.org/2000/xmlns/',\n svgns = metadata.xmlns;\nfunction SVGRenderer(loader) {\n Renderer.call(this, loader);\n this._dirtyID = 0;\n this._dirty = [];\n this._svg = null;\n this._root = null;\n this._defs = null;\n}\nconst base = Renderer.prototype;\ninherits(SVGRenderer, Renderer, {\n /**\n * Initialize a new SVGRenderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n // create the svg definitions cache\n this._defs = {};\n\n this._clearDefs();\n\n if (el) {\n this._svg = domChild(el, 0, 'svg', svgns);\n\n this._svg.setAttributeNS(xmlns, 'xmlns', svgns);\n\n this._svg.setAttributeNS(xmlns, 'xmlns:xlink', metadata['xmlns:xlink']);\n\n this._svg.setAttribute('version', metadata['version']);\n\n this._svg.setAttribute('class', 'marks');\n\n domClear(el, 1); // set the svg root group\n\n this._root = domChild(this._svg, RootIndex, 'g', svgns);\n setAttributes(this._root, rootAttributes); // ensure no additional child elements\n\n domClear(this._svg, RootIndex + 1);\n } // set background color if defined\n\n\n this.background(this._bgcolor);\n return base.initialize.call(this, el, width, height, origin, scaleFactor);\n },\n\n /**\n * Get / set the background color.\n */\n background(bgcolor) {\n if (arguments.length && this._svg) {\n this._svg.style.setProperty('background-color', bgcolor);\n }\n\n return base.background.apply(this, arguments);\n },\n\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n base.resize.call(this, width, height, origin, scaleFactor);\n\n if (this._svg) {\n setAttributes(this._svg, {\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: `0 0 ${this._width} ${this._height}`\n });\n\n this._root.setAttribute('transform', `translate(${this._origin})`);\n }\n\n this._dirty = [];\n return this;\n },\n\n /**\n * Returns the SVG element of the visualization.\n * @return {DOMElement} - The SVG element.\n */\n canvas() {\n return this._svg;\n },\n\n /**\n * Returns an SVG text string for the rendered content,\n * or null if this renderer is currently headless.\n */\n svg() {\n const svg = this._svg,\n bg = this._bgcolor;\n if (!svg) return null;\n let node;\n\n if (bg) {\n svg.removeAttribute('style');\n node = domChild(svg, RootIndex, 'rect', svgns);\n setAttributes(node, {\n width: this._width,\n height: this._height,\n fill: bg\n });\n }\n\n const text = serializeXML(svg);\n\n if (bg) {\n svg.removeChild(node);\n\n this._svg.style.setProperty('background-color', bg);\n }\n\n return text;\n },\n\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\n _render(scene) {\n // perform spot updates and re-render markup\n if (this._dirtyCheck()) {\n if (this._dirtyAll) this._clearDefs();\n this.mark(this._root, scene);\n domClear(this._root, 1);\n }\n\n this.defs();\n this._dirty = [];\n ++this._dirtyID;\n return this;\n },\n\n // -- Manage rendering of items marked as dirty --\n\n /**\n * Flag a mark item as dirty.\n * @param {Item} item - The mark item.\n */\n dirty(item) {\n if (item.dirty !== this._dirtyID) {\n item.dirty = this._dirtyID;\n\n this._dirty.push(item);\n }\n },\n\n /**\n * Check if a mark item is considered dirty.\n * @param {Item} item - The mark item.\n */\n isDirty(item) {\n return this._dirtyAll || !item._svg || item.dirty === this._dirtyID;\n },\n\n /**\n * Internal method to check dirty status and, if possible,\n * make targetted updates without a full rendering pass.\n */\n _dirtyCheck() {\n this._dirtyAll = true;\n const items = this._dirty;\n if (!items.length || !this._dirtyID) return true;\n const id = ++this._dirtyID;\n let item, mark, type, mdef, i, n, o;\n\n for (i = 0, n = items.length; i < n; ++i) {\n item = items[i];\n mark = item.mark;\n\n if (mark.marktype !== type) {\n // memoize mark instance lookup\n type = mark.marktype;\n mdef = Marks[type];\n }\n\n if (mark.zdirty && mark.dirty !== id) {\n this._dirtyAll = false;\n dirtyParents(item, id);\n mark.items.forEach(i => {\n i.dirty = id;\n });\n }\n\n if (mark.zdirty) continue; // handle in standard drawing pass\n\n if (item.exit) {\n // EXIT\n if (mdef.nested && mark.items.length) {\n // if nested mark with remaining points, update instead\n o = mark.items[0];\n if (o._svg) this._update(mdef, o._svg, o);\n } else if (item._svg) {\n // otherwise remove from DOM\n o = item._svg.parentNode;\n if (o) o.removeChild(item._svg);\n }\n\n item._svg = null;\n continue;\n }\n\n item = mdef.nested ? mark.items[0] : item;\n if (item._update === id) continue; // already visited\n\n if (!item._svg || !item._svg.ownerSVGElement) {\n // ENTER\n this._dirtyAll = false;\n dirtyParents(item, id);\n } else {\n // IN-PLACE UPDATE\n this._update(mdef, item._svg, item);\n }\n\n item._update = id;\n }\n\n return !this._dirtyAll;\n },\n\n // -- Construct & maintain scenegraph to SVG mapping ---\n\n /**\n * Render a set of mark items.\n * @param {SVGElement} el - The parent element in the SVG tree.\n * @param {object} scene - The mark parent to render.\n * @param {SVGElement} prev - The previous sibling in the SVG tree.\n */\n mark(el, scene, prev) {\n if (!this.isDirty(scene)) return scene._svg;\n const svg = this._svg,\n mdef = Marks[scene.marktype],\n events = scene.interactive === false ? 'none' : null,\n isGroup = mdef.tag === 'g';\n let sibling = null,\n i = 0;\n const parent = bind(scene, el, prev, 'g', svg);\n parent.setAttribute('class', cssClass(scene)); // apply aria attributes to parent container element\n\n const aria = ariaMarkAttributes(scene);\n\n for (const key in aria) setAttribute(parent, key, aria[key]);\n\n if (!isGroup) {\n setAttribute(parent, 'pointer-events', events);\n }\n\n setAttribute(parent, 'clip-path', scene.clip ? clip$1(this, scene, scene.group) : null);\n\n const process = item => {\n const dirty = this.isDirty(item),\n node = bind(item, parent, sibling, mdef.tag, svg);\n\n if (dirty) {\n this._update(mdef, node, item);\n\n if (isGroup) recurse(this, node, item);\n }\n\n sibling = node;\n ++i;\n };\n\n if (mdef.nested) {\n if (scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n }\n\n domClear(parent, i);\n return parent;\n },\n\n /**\n * Update the attributes of an SVG element for a mark item.\n * @param {object} mdef - The mark definition object\n * @param {SVGElement} el - The SVG element.\n * @param {Item} item - The mark item.\n */\n _update(mdef, el, item) {\n // set dom element and values cache\n // provides access to emit method\n element = el;\n values = el.__values__; // apply aria-specific properties\n\n ariaItemAttributes(emit, item); // apply svg attributes\n\n mdef.attr(emit, item, this); // some marks need special treatment\n\n const extra = mark_extras[mdef.type];\n if (extra) extra.call(this, mdef, el, item); // apply svg style attributes\n // note: element state may have been modified by 'extra' method\n\n if (element) this.style(element, item);\n },\n\n /**\n * Update the presentation attributes of an SVG element for a mark item.\n * @param {SVGElement} el - The SVG element.\n * @param {Item} item - The mark item.\n */\n style(el, item) {\n if (item == null) return;\n\n for (const prop in styles) {\n let value = prop === 'font' ? fontFamily(item) : item[prop];\n if (value === values[prop]) continue;\n const name = styles[prop];\n\n if (value == null) {\n el.removeAttribute(name);\n } else {\n if (isGradient(value)) {\n value = gradientRef(value, this._defs.gradient, href());\n }\n\n el.setAttribute(name, value + '');\n }\n\n values[prop] = value;\n }\n },\n\n /**\n * Render SVG defs, as needed.\n * Must be called *after* marks have been processed to ensure the\n * collected state is current and accurate.\n */\n defs() {\n const svg = this._svg,\n defs = this._defs;\n let el = defs.el,\n index = 0;\n\n for (const id in defs.gradient) {\n if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', svgns);\n index = updateGradient(el, defs.gradient[id], index);\n }\n\n for (const id in defs.clipping) {\n if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', svgns);\n index = updateClipping(el, defs.clipping[id], index);\n } // clean-up\n\n\n if (el) {\n index === 0 ? (svg.removeChild(el), defs.el = null) : domClear(el, index);\n }\n },\n\n /**\n * Clear defs caches.\n */\n _clearDefs() {\n const def = this._defs;\n def.gradient = {};\n def.clipping = {};\n }\n\n}); // mark ancestor chain with a dirty id\n\nfunction dirtyParents(item, id) {\n for (; item && item.dirty !== id; item = item.mark.group) {\n item.dirty = id;\n\n if (item.mark && item.mark.dirty !== id) {\n item.mark.dirty = id;\n } else return;\n }\n} // update gradient definitions\n\n\nfunction updateGradient(el, grad, index) {\n let i, n, stop;\n\n if (grad.gradient === 'radial') {\n // SVG radial gradients automatically transform to normalized bbox\n // coordinates, in a way that is cumbersome to replicate in canvas.\n // We wrap the radial gradient in a pattern element, allowing us to\n // maintain a circular gradient that matches what canvas provides.\n let pt = domChild(el, index++, 'pattern', svgns);\n setAttributes(pt, {\n id: patternPrefix + grad.id,\n viewBox: '0,0,1,1',\n width: '100%',\n height: '100%',\n preserveAspectRatio: 'xMidYMid slice'\n });\n pt = domChild(pt, 0, 'rect', svgns);\n setAttributes(pt, {\n width: 1,\n height: 1,\n fill: `url(${href()}#${grad.id})`\n });\n el = domChild(el, index++, 'radialGradient', svgns);\n setAttributes(el, {\n id: grad.id,\n fx: grad.x1,\n fy: grad.y1,\n fr: grad.r1,\n cx: grad.x2,\n cy: grad.y2,\n r: grad.r2\n });\n } else {\n el = domChild(el, index++, 'linearGradient', svgns);\n setAttributes(el, {\n id: grad.id,\n x1: grad.x1,\n x2: grad.x2,\n y1: grad.y1,\n y2: grad.y2\n });\n }\n\n for (i = 0, n = grad.stops.length; i < n; ++i) {\n stop = domChild(el, i, 'stop', svgns);\n stop.setAttribute('offset', grad.stops[i].offset);\n stop.setAttribute('stop-color', grad.stops[i].color);\n }\n\n domClear(el, i);\n return index;\n} // update clipping path definitions\n\n\nfunction updateClipping(el, clip, index) {\n let mask;\n el = domChild(el, index, 'clipPath', svgns);\n el.setAttribute('id', clip.id);\n\n if (clip.path) {\n mask = domChild(el, 0, 'path', svgns);\n mask.setAttribute('d', clip.path);\n } else {\n mask = domChild(el, 0, 'rect', svgns);\n setAttributes(mask, {\n x: 0,\n y: 0,\n width: clip.width,\n height: clip.height\n });\n }\n\n domClear(el, 1);\n return index + 1;\n} // Recursively process group contents.\n\n\nfunction recurse(renderer, el, group) {\n el = el.lastChild.previousSibling;\n let prev,\n idx = 0;\n visit(group, item => {\n prev = renderer.mark(el, item, prev);\n ++idx;\n }); // remove any extraneous DOM elements\n\n domClear(el, 1 + idx);\n} // Bind a scenegraph item to an SVG DOM element.\n// Create new SVG elements as needed.\n\n\nfunction bind(item, el, sibling, tag, svg) {\n let node = item._svg,\n doc; // create a new dom node if needed\n\n if (!node) {\n doc = el.ownerDocument;\n node = domCreate(doc, tag, svgns);\n item._svg = node;\n\n if (item.mark) {\n node.__data__ = item;\n node.__values__ = {\n fill: 'default'\n }; // if group, create background, content, and foreground elements\n\n if (tag === 'g') {\n const bg = domCreate(doc, 'path', svgns);\n node.appendChild(bg);\n bg.__data__ = item;\n const cg = domCreate(doc, 'g', svgns);\n node.appendChild(cg);\n cg.__data__ = item;\n const fg = domCreate(doc, 'path', svgns);\n node.appendChild(fg);\n fg.__data__ = item;\n fg.__values__ = {\n fill: 'default'\n };\n }\n }\n } // (re-)insert if (a) not contained in SVG or (b) sibling order has changed\n\n\n if (node.ownerSVGElement !== svg || siblingCheck(node, sibling)) {\n el.insertBefore(node, sibling ? sibling.nextSibling : el.firstChild);\n }\n\n return node;\n} // check if two nodes are ordered siblings\n\n\nfunction siblingCheck(node, sibling) {\n return node.parentNode && node.parentNode.childNodes.length > 1 && node.previousSibling != sibling; // treat null/undefined the same\n} // -- Set attributes & styles on SVG elements ---\n\n\nlet element = null,\n // temp var for current SVG element\nvalues = null; // temp var for current values hash\n// Extra configuration for certain mark types\n\nconst mark_extras = {\n group(mdef, el, item) {\n const fg = element = el.childNodes[2];\n values = fg.__values__;\n mdef.foreground(emit, item, this);\n values = el.__values__; // use parent's values hash\n\n element = el.childNodes[1];\n mdef.content(emit, item, this);\n const bg = element = el.childNodes[0];\n mdef.background(emit, item, this);\n const value = item.mark.interactive === false ? 'none' : null;\n\n if (value !== values.events) {\n setAttribute(fg, 'pointer-events', value);\n setAttribute(bg, 'pointer-events', value);\n values.events = value;\n }\n\n if (item.strokeForeground && item.stroke) {\n const fill = item.fill;\n setAttribute(fg, 'display', null); // set style of background\n\n this.style(bg, item);\n setAttribute(bg, 'stroke', null); // set style of foreground\n\n if (fill) item.fill = null;\n values = fg.__values__;\n this.style(fg, item);\n if (fill) item.fill = fill; // leave element null to prevent downstream styling\n\n element = null;\n } else {\n // ensure foreground is ignored\n setAttribute(fg, 'display', 'none');\n }\n },\n\n image(mdef, el, item) {\n if (item.smooth === false) {\n setStyle(el, 'image-rendering', 'optimizeSpeed');\n setStyle(el, 'image-rendering', 'pixelated');\n } else {\n setStyle(el, 'image-rendering', null);\n }\n },\n\n text(mdef, el, item) {\n const tl = textLines(item);\n let key, value, doc, lh;\n\n if (isArray(tl)) {\n // multi-line text\n value = tl.map(_ => textValue(item, _));\n key = value.join('\\n'); // content cache key\n\n if (key !== values.text) {\n domClear(el, 0);\n doc = el.ownerDocument;\n lh = lineHeight(item);\n value.forEach((t, i) => {\n const ts = domCreate(doc, 'tspan', svgns);\n ts.__data__ = item; // data binding\n\n ts.textContent = t;\n\n if (i) {\n ts.setAttribute('x', 0);\n ts.setAttribute('dy', lh);\n }\n\n el.appendChild(ts);\n });\n values.text = key;\n }\n } else {\n // single-line text\n value = textValue(item, tl);\n\n if (value !== values.text) {\n el.textContent = value;\n values.text = value;\n }\n }\n\n setAttribute(el, 'font-family', fontFamily(item));\n setAttribute(el, 'font-size', fontSize(item) + 'px');\n setAttribute(el, 'font-style', item.fontStyle);\n setAttribute(el, 'font-variant', item.fontVariant);\n setAttribute(el, 'font-weight', item.fontWeight);\n }\n\n};\n\nfunction emit(name, value, ns) {\n // early exit if value is unchanged\n if (value === values[name]) return; // use appropriate method given namespace (ns)\n\n if (ns) {\n setAttributeNS(element, name, value, ns);\n } else {\n setAttribute(element, name, value);\n } // note current value for future comparison\n\n\n values[name] = value;\n}\n\nfunction setStyle(el, name, value) {\n if (value !== values[name]) {\n if (value == null) {\n el.style.removeProperty(name);\n } else {\n el.style.setProperty(name, value + '');\n }\n\n values[name] = value;\n }\n}\n\nfunction setAttributes(el, attrs) {\n for (const key in attrs) {\n setAttribute(el, key, attrs[key]);\n }\n}\n\nfunction setAttribute(el, name, value) {\n if (value != null) {\n // if value is provided, update DOM attribute\n el.setAttribute(name, value);\n } else {\n // else remove DOM attribute\n el.removeAttribute(name);\n }\n}\n\nfunction setAttributeNS(el, name, value, ns) {\n if (value != null) {\n // if value is provided, update DOM attribute\n el.setAttributeNS(ns, name, value);\n } else {\n // else remove DOM attribute\n el.removeAttributeNS(ns, name);\n }\n}\n\nfunction href() {\n let loc;\n return typeof window === 'undefined' ? '' : (loc = window.location).hash ? loc.href.slice(0, -loc.hash.length) : loc.href;\n}\n\nfunction SVGStringRenderer(loader) {\n Renderer.call(this, loader);\n this._text = null;\n this._defs = {\n gradient: {},\n clipping: {}\n };\n}\ninherits(SVGStringRenderer, Renderer, {\n /**\n * Returns the rendered SVG text string,\n * or null if rendering has not yet occurred.\n */\n svg() {\n return this._text;\n },\n\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\n _render(scene) {\n const m = markup(); // svg tag\n\n m.open('svg', extend({}, metadata, {\n class: 'marks',\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: `0 0 ${this._width} ${this._height}`\n })); // background, if defined\n\n const bg = this._bgcolor;\n\n if (bg && bg !== 'transparent' && bg !== 'none') {\n m.open('rect', {\n width: this._width,\n height: this._height,\n fill: bg\n }).close();\n } // root content group\n\n\n m.open('g', rootAttributes, {\n transform: 'translate(' + this._origin + ')'\n });\n this.mark(m, scene);\n m.close(); // \n // defs\n\n this.defs(m); // get SVG text string\n\n this._text = m.close() + '';\n return this;\n },\n\n /**\n * Render a set of mark items.\n * @param {object} m - The markup context.\n * @param {object} scene - The mark parent to render.\n */\n mark(m, scene) {\n const mdef = Marks[scene.marktype],\n tag = mdef.tag,\n attrList = [ariaItemAttributes, mdef.attr]; // render opening group tag\n\n m.open('g', {\n 'class': cssClass(scene),\n 'clip-path': scene.clip ? clip$1(this, scene, scene.group) : null\n }, ariaMarkAttributes(scene), {\n 'pointer-events': tag !== 'g' && scene.interactive === false ? 'none' : null\n }); // render contained elements\n\n const process = item => {\n const href = this.href(item);\n if (href) m.open('a', href);\n m.open(tag, this.attr(scene, item, attrList, tag !== 'g' ? tag : null));\n\n if (tag === 'text') {\n const tl = textLines(item);\n\n if (isArray(tl)) {\n // multi-line text\n const attrs = {\n x: 0,\n dy: lineHeight(item)\n };\n\n for (let i = 0; i < tl.length; ++i) {\n m.open('tspan', i ? attrs : null).text(textValue(item, tl[i])).close();\n }\n } else {\n // single-line text\n m.text(textValue(item, tl));\n }\n } else if (tag === 'g') {\n const fore = item.strokeForeground,\n fill = item.fill,\n stroke = item.stroke;\n\n if (fore && stroke) {\n item.stroke = null;\n }\n\n m.open('path', this.attr(scene, item, mdef.background, 'bgrect')).close(); // recurse for group content\n\n m.open('g', this.attr(scene, item, mdef.content));\n visit(item, scene => this.mark(m, scene));\n m.close();\n\n if (fore && stroke) {\n if (fill) item.fill = null;\n item.stroke = stroke;\n m.open('path', this.attr(scene, item, mdef.foreground, 'bgrect')).close();\n if (fill) item.fill = fill;\n } else {\n m.open('path', this.attr(scene, item, mdef.foreground, 'bgfore')).close();\n }\n }\n\n m.close(); // \n\n if (href) m.close(); // \n };\n\n if (mdef.nested) {\n if (scene.items && scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n } // render closing group tag\n\n\n return m.close(); // \n },\n\n /**\n * Get href attributes for a hyperlinked mark item.\n * @param {Item} item - The mark item.\n */\n href(item) {\n const href = item.href;\n let attr;\n\n if (href) {\n if (attr = this._hrefs && this._hrefs[href]) {\n return attr;\n } else {\n this.sanitizeURL(href).then(attr => {\n // rewrite to use xlink namespace\n attr['xlink:href'] = attr.href;\n attr.href = null;\n (this._hrefs || (this._hrefs = {}))[href] = attr;\n });\n }\n }\n\n return null;\n },\n\n /**\n * Get an object of SVG attributes for a mark item.\n * @param {object} scene - The mark parent.\n * @param {Item} item - The mark item.\n * @param {array|function} attrs - One or more attribute emitters.\n * @param {string} tag - The tag being rendered.\n */\n attr(scene, item, attrs, tag) {\n const object = {},\n emit = (name, value, ns, prefixed) => {\n object[prefixed || name] = value;\n }; // apply mark specific attributes\n\n\n if (Array.isArray(attrs)) {\n attrs.forEach(fn => fn(emit, item, this));\n } else {\n attrs(emit, item, this);\n } // apply style attributes\n\n\n if (tag) {\n style(object, item, scene, tag, this._defs);\n }\n\n return object;\n },\n\n /**\n * Render SVG defs, as needed.\n * Must be called *after* marks have been processed to ensure the\n * collected state is current and accurate.\n * @param {object} m - The markup context.\n */\n defs(m) {\n const gradient = this._defs.gradient,\n clipping = this._defs.clipping,\n count = Object.keys(gradient).length + Object.keys(clipping).length;\n if (count === 0) return; // nothing to do\n\n m.open('defs');\n\n for (const id in gradient) {\n const def = gradient[id],\n stops = def.stops;\n\n if (def.gradient === 'radial') {\n // SVG radial gradients automatically transform to normalized bbox\n // coordinates, in a way that is cumbersome to replicate in canvas.\n // We wrap the radial gradient in a pattern element, allowing us to\n // maintain a circular gradient that matches what canvas provides.\n m.open('pattern', {\n id: patternPrefix + id,\n viewBox: '0,0,1,1',\n width: '100%',\n height: '100%',\n preserveAspectRatio: 'xMidYMid slice'\n });\n m.open('rect', {\n width: '1',\n height: '1',\n fill: 'url(#' + id + ')'\n }).close();\n m.close(); // \n\n m.open('radialGradient', {\n id: id,\n fx: def.x1,\n fy: def.y1,\n fr: def.r1,\n cx: def.x2,\n cy: def.y2,\n r: def.r2\n });\n } else {\n m.open('linearGradient', {\n id: id,\n x1: def.x1,\n x2: def.x2,\n y1: def.y1,\n y2: def.y2\n });\n }\n\n for (let i = 0; i < stops.length; ++i) {\n m.open('stop', {\n offset: stops[i].offset,\n 'stop-color': stops[i].color\n }).close();\n }\n\n m.close();\n }\n\n for (const id in clipping) {\n const def = clipping[id];\n m.open('clipPath', {\n id: id\n });\n\n if (def.path) {\n m.open('path', {\n d: def.path\n }).close();\n } else {\n m.open('rect', {\n x: 0,\n y: 0,\n width: def.width,\n height: def.height\n }).close();\n }\n\n m.close();\n }\n\n m.close();\n }\n\n}); // Helper function for attr for style presentation attributes\n\nfunction style(s, item, scene, tag, defs) {\n if (item == null) return s;\n\n if (tag === 'bgrect' && scene.interactive === false) {\n s['pointer-events'] = 'none';\n }\n\n if (tag === 'bgfore') {\n if (scene.interactive === false) {\n s['pointer-events'] = 'none';\n }\n\n s.display = 'none';\n if (item.fill !== null) return s;\n }\n\n if (tag === 'image' && item.smooth === false) {\n s.style = 'image-rendering: optimizeSpeed; image-rendering: pixelated;';\n }\n\n if (tag === 'text') {\n s['font-family'] = fontFamily(item);\n s['font-size'] = fontSize(item) + 'px';\n s['font-style'] = item.fontStyle;\n s['font-variant'] = item.fontVariant;\n s['font-weight'] = item.fontWeight;\n }\n\n for (const prop in styles) {\n let value = item[prop];\n const name = styles[prop];\n\n if (value === 'transparent' && (name === 'fill' || name === 'stroke')) ; else if (value != null) {\n if (isGradient(value)) {\n value = gradientRef(value, defs.gradient, '');\n }\n\n s[name] = value;\n }\n }\n\n return s;\n}\n\nconst Canvas = 'canvas';\nconst PNG = 'png';\nconst SVG = 'svg';\nconst None = 'none';\nconst RenderType = {\n Canvas: Canvas,\n PNG: PNG,\n SVG: SVG,\n None: None\n};\nconst modules = {};\nmodules[Canvas] = modules[PNG] = {\n renderer: CanvasRenderer,\n headless: CanvasRenderer,\n handler: CanvasHandler\n};\nmodules[SVG] = {\n renderer: SVGRenderer,\n headless: SVGStringRenderer,\n handler: SVGHandler\n};\nmodules[None] = {};\nfunction renderModule(name, _) {\n name = String(name || '').toLowerCase();\n\n if (arguments.length > 1) {\n modules[name] = _;\n return this;\n } else {\n return modules[name];\n }\n}\n\nfunction intersect(scene, bounds, filter) {\n const hits = [],\n // intersection results\n box = new Bounds().union(bounds),\n // defensive copy\n type = scene.marktype;\n return type ? intersectMark(scene, box, filter, hits) : type === 'group' ? intersectGroup(scene, box, filter, hits) : error('Intersect scene must be mark node or group item.');\n}\n\nfunction intersectMark(mark, box, filter, hits) {\n if (visitMark(mark, box, filter)) {\n const items = mark.items,\n type = mark.marktype,\n n = items.length;\n let i = 0;\n\n if (type === 'group') {\n for (; i < n; ++i) {\n intersectGroup(items[i], box, filter, hits);\n }\n } else {\n for (const test = Marks[type].isect; i < n; ++i) {\n const item = items[i];\n if (intersectItem(item, box, test)) hits.push(item);\n }\n }\n }\n\n return hits;\n}\n\nfunction visitMark(mark, box, filter) {\n // process if bounds intersect and if\n // (1) mark is a group mark (so we must recurse), or\n // (2) mark is interactive and passes filter\n return mark.bounds && box.intersects(mark.bounds) && (mark.marktype === 'group' || mark.interactive !== false && (!filter || filter(mark)));\n}\n\nfunction intersectGroup(group, box, filter, hits) {\n // test intersect against group\n // skip groups by default unless filter says otherwise\n if (filter && filter(group.mark) && intersectItem(group, box, Marks.group.isect)) {\n hits.push(group);\n } // recursively test children marks\n // translate box to group coordinate space\n\n\n const marks = group.items,\n n = marks && marks.length;\n\n if (n) {\n const x = group.x || 0,\n y = group.y || 0;\n box.translate(-x, -y);\n\n for (let i = 0; i < n; ++i) {\n intersectMark(marks[i], box, filter, hits);\n }\n\n box.translate(x, y);\n }\n\n return hits;\n}\n\nfunction intersectItem(item, box, test) {\n // test bounds enclosure, bounds intersection, then detailed test\n const bounds = item.bounds;\n return box.encloses(bounds) || box.intersects(bounds) && test(item, box);\n}\n\nconst clipBounds = new Bounds();\nfunction boundClip (mark) {\n const clip = mark.clip;\n\n if (isFunction(clip)) {\n clip(boundContext(clipBounds.clear()));\n } else if (clip) {\n clipBounds.set(0, 0, mark.group.width, mark.group.height);\n } else return;\n\n mark.bounds.intersect(clipBounds);\n}\n\nconst TOLERANCE = 1e-9;\nfunction sceneEqual(a, b, key) {\n return a === b ? true : key === 'path' ? pathEqual(a, b) : a instanceof Date && b instanceof Date ? +a === +b : isNumber(a) && isNumber(b) ? Math.abs(a - b) <= TOLERANCE : !a || !b || !isObject(a) && !isObject(b) ? a == b : objectEqual(a, b);\n}\nfunction pathEqual(a, b) {\n return sceneEqual(pathParse(a), pathParse(b));\n}\n\nfunction objectEqual(a, b) {\n var ka = Object.keys(a),\n kb = Object.keys(b),\n key,\n i;\n if (ka.length !== kb.length) return false;\n ka.sort();\n kb.sort();\n\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) return false;\n }\n\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!sceneEqual(a[key], b[key], key)) return false;\n }\n\n return typeof a === typeof b;\n}\n\nfunction resetSVGDefIds() {\n resetSVGClipId();\n resetSVGGradientId();\n}\n\nexport { Bounds, CanvasHandler, CanvasRenderer, Gradient, GroupItem, Handler, Item, Marks, RenderType, Renderer, ResourceLoader, SVGHandler, SVGRenderer, SVGStringRenderer, Scenegraph, boundClip, boundContext, boundItem, boundMark, boundStroke, domChild, domClear, domCreate, domFind, font, fontFamily, fontSize, intersect, intersectBoxLine, intersectPath, intersectPoint, intersectRule, lineHeight, markup, multiLineOffset, curves as pathCurves, pathEqual, pathParse, vg_rect as pathRectangle, pathRender, symbols as pathSymbols, vg_trail as pathTrail, point, renderModule, resetSVGClipId, resetSVGDefIds, sceneEqual, sceneFromJSON, pickVisit as scenePickVisit, sceneToJSON, visit as sceneVisit, zorder as sceneZOrder, serializeXML, textMetrics };\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport star from \"./symbol/star.js\";\nimport square from \"./symbol/square.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport wye from \"./symbol/wye.js\";\nimport constant from \"./constant.js\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function(type, size) {\n var context = null;\n type = typeof type === \"function\" ? type : constant(type || circle);\n size = typeof size === \"function\" ? size : constant(size === undefined ? 64 : +size);\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","import { Transform } from 'vega-dataflow';\nimport { Marks, boundClip, GroupItem, Item, Bounds, multiLineOffset, boundStroke } from 'vega-scenegraph';\nimport { inherits, peek, isObject } from 'vega-util';\n\nconst Top = 'top';\nconst Left = 'left';\nconst Right = 'right';\nconst Bottom = 'bottom';\nconst TopLeft = 'top-left';\nconst TopRight = 'top-right';\nconst BottomLeft = 'bottom-left';\nconst BottomRight = 'bottom-right';\nconst Start = 'start';\nconst Middle = 'middle';\nconst End = 'end';\nconst X = 'x';\nconst Y = 'y';\nconst Group = 'group';\nconst AxisRole = 'axis';\nconst TitleRole = 'title';\nconst FrameRole = 'frame';\nconst ScopeRole = 'scope';\nconst LegendRole = 'legend';\nconst RowHeader = 'row-header';\nconst RowFooter = 'row-footer';\nconst RowTitle = 'row-title';\nconst ColHeader = 'column-header';\nconst ColFooter = 'column-footer';\nconst ColTitle = 'column-title';\nconst Padding = 'padding';\nconst Symbols = 'symbol';\nconst Fit = 'fit';\nconst FitX = 'fit-x';\nconst FitY = 'fit-y';\nconst Pad = 'pad';\nconst None = 'none';\nconst All = 'all';\nconst Each = 'each';\nconst Flush = 'flush';\nconst Column = 'column';\nconst Row = 'row';\n\n/**\n * Calculate bounding boxes for scenegraph items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - The scenegraph mark instance to bound.\n */\n\nfunction Bound(params) {\n Transform.call(this, null, params);\n}\ninherits(Bound, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow,\n mark = _.mark,\n type = mark.marktype,\n entry = Marks[type],\n bound = entry.bound;\n let markBounds = mark.bounds,\n rebound;\n\n if (entry.nested) {\n // multi-item marks have a single bounds instance\n if (mark.items.length) view.dirty(mark.items[0]);\n markBounds = boundItem(mark, bound);\n mark.items.forEach(item => {\n item.bounds.clear().union(markBounds);\n });\n } else if (type === Group || _.modified()) {\n // operator parameters modified -> re-bound all items\n // updates group bounds in response to modified group content\n pulse.visit(pulse.MOD, item => view.dirty(item));\n markBounds.clear();\n mark.items.forEach(item => markBounds.union(boundItem(item, bound))); // force reflow for axes/legends/titles to propagate any layout changes\n\n switch (mark.role) {\n case AxisRole:\n case LegendRole:\n case TitleRole:\n pulse.reflow();\n }\n } else {\n // incrementally update bounds, re-bound mark as needed\n rebound = pulse.changed(pulse.REM);\n pulse.visit(pulse.ADD, item => {\n markBounds.union(boundItem(item, bound));\n });\n pulse.visit(pulse.MOD, item => {\n rebound = rebound || markBounds.alignsWith(item.bounds);\n view.dirty(item);\n markBounds.union(boundItem(item, bound));\n });\n\n if (rebound) {\n markBounds.clear();\n mark.items.forEach(item => markBounds.union(item.bounds));\n }\n } // ensure mark bounds do not exceed any clipping region\n\n\n boundClip(mark);\n return pulse.modifies('bounds');\n }\n\n});\n\nfunction boundItem(item, bound, opt) {\n return bound(item.bounds.clear(), item, opt);\n}\n\nconst COUNTER_NAME = ':vega_identifier:';\n/**\n * Adds a unique identifier to all added tuples.\n * This transform creates a new signal that serves as an id counter.\n * As a result, the id counter is shared across all instances of this\n * transform, generating unique ids across multiple data streams. In\n * addition, this signal value can be included in a snapshot of the\n * dataflow state, enabling correct resumption of id allocation.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.as - The field name for the generated identifier.\n */\n\nfunction Identifier(params) {\n Transform.call(this, 0, params);\n}\nIdentifier.Definition = {\n 'type': 'Identifier',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'as',\n 'type': 'string',\n 'required': true\n }]\n};\ninherits(Identifier, Transform, {\n transform(_, pulse) {\n const counter = getCounter(pulse.dataflow),\n as = _.as;\n let id = counter.value;\n pulse.visit(pulse.ADD, t => t[as] = t[as] || ++id);\n counter.set(this.value = id);\n return pulse;\n }\n\n});\n\nfunction getCounter(view) {\n return view._signals[COUNTER_NAME] || (view._signals[COUNTER_NAME] = view.add(0));\n}\n\n/**\n * Bind scenegraph items to a scenegraph mark instance.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.markdef - The mark definition for creating the mark.\n * This is an object of legal scenegraph mark properties which *must* include\n * the 'marktype' property.\n */\n\nfunction Mark(params) {\n Transform.call(this, null, params);\n}\ninherits(Mark, Transform, {\n transform(_, pulse) {\n let mark = this.value; // acquire mark on first invocation, bind context and group\n\n if (!mark) {\n mark = pulse.dataflow.scenegraph().mark(_.markdef, lookup$1(_), _.index);\n mark.group.context = _.context;\n if (!_.context.group) _.context.group = mark.group;\n mark.source = this.source; // point to upstream collector\n\n mark.clip = _.clip;\n mark.interactive = _.interactive;\n this.value = mark;\n } // initialize entering items\n\n\n const Init = mark.marktype === Group ? GroupItem : Item;\n pulse.visit(pulse.ADD, item => Init.call(item, mark)); // update clipping and/or interactive status\n\n if (_.modified('clip') || _.modified('interactive')) {\n mark.clip = _.clip;\n mark.interactive = !!_.interactive;\n mark.zdirty = true; // force scenegraph re-eval\n\n pulse.reflow();\n } // bind items array to scenegraph mark\n\n\n mark.items = pulse.source;\n return pulse;\n }\n\n});\n\nfunction lookup$1(_) {\n const g = _.groups,\n p = _.parent;\n return g && g.size === 1 ? g.get(Object.keys(g.object)[0]) : g && p ? g.lookup(p) : null;\n}\n\n/**\n * Analyze items for overlap, changing opacity to hide items with\n * overlapping bounding boxes. This transform will preserve at least\n * two items (e.g., first and last) even if overlap persists.\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting items.\n * @param {object} [params.method] - The overlap removal method to apply.\n * One of 'parity' (default, hide every other item until there is no\n * more overlap) or 'greedy' (sequentially scan and hide and items that\n * overlap with the last visible item).\n * @param {object} [params.boundScale] - A scale whose range should be used\n * to bound the items. Items exceeding the bounds of the scale range\n * will be treated as overlapping. If null or undefined, no bounds check\n * will be applied.\n * @param {object} [params.boundOrient] - The orientation of the scale\n * (top, bottom, left, or right) used to bound items. This parameter is\n * ignored if boundScale is null or undefined.\n * @param {object} [params.boundTolerance] - The tolerance in pixels for\n * bound inclusion testing (default 1). This specifies by how many pixels\n * an item's bounds may exceed the scale range bounds and not be culled.\n * @constructor\n */\n\nfunction Overlap(params) {\n Transform.call(this, null, params);\n}\nconst methods = {\n parity: items => items.filter((item, i) => i % 2 ? item.opacity = 0 : 1),\n greedy: (items, sep) => {\n let a;\n return items.filter((b, i) => !i || !intersect(a.bounds, b.bounds, sep) ? (a = b, 1) : b.opacity = 0);\n }\n}; // compute bounding box intersection\n// including padding pixels of separation\n\nconst intersect = (a, b, sep) => sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\n\nconst hasOverlap = (items, pad) => {\n for (var i = 1, n = items.length, a = items[0].bounds, b; i < n; a = b, ++i) {\n if (intersect(a, b = items[i].bounds, pad)) return true;\n }\n};\n\nconst hasBounds = item => {\n const b = item.bounds;\n return b.width() > 1 && b.height() > 1;\n};\n\nconst boundTest = (scale, orient, tolerance) => {\n var range = scale.range(),\n b = new Bounds();\n\n if (orient === Top || orient === Bottom) {\n b.set(range[0], -Infinity, range[1], +Infinity);\n } else {\n b.set(-Infinity, range[0], +Infinity, range[1]);\n }\n\n b.expand(tolerance || 1);\n return item => b.encloses(item.bounds);\n}; // reset all items to be fully opaque\n\n\nconst reset = source => {\n source.forEach(item => item.opacity = 1);\n return source;\n}; // add all tuples to mod, fork pulse if parameters were modified\n// fork prevents cross-stream tuple pollution (e.g., pulse from scale)\n\n\nconst reflow = (pulse, _) => pulse.reflow(_.modified()).modifies('opacity');\n\ninherits(Overlap, Transform, {\n transform(_, pulse) {\n const reduce = methods[_.method] || methods.parity,\n sep = _.separation || 0;\n let source = pulse.materialize(pulse.SOURCE).source,\n items,\n test;\n if (!source || !source.length) return;\n\n if (!_.method) {\n // early exit if method is falsy\n if (_.modified('method')) {\n reset(source);\n pulse = reflow(pulse, _);\n }\n\n return pulse;\n } // skip labels with no content\n\n\n source = source.filter(hasBounds); // early exit, nothing to do\n\n if (!source.length) return;\n\n if (_.sort) {\n source = source.slice().sort(_.sort);\n }\n\n items = reset(source);\n pulse = reflow(pulse, _);\n\n if (items.length >= 3 && hasOverlap(items, sep)) {\n do {\n items = reduce(items, sep);\n } while (items.length >= 3 && hasOverlap(items, sep));\n\n if (items.length < 3 && !peek(source).opacity) {\n if (items.length > 1) peek(items).opacity = 0;\n peek(source).opacity = 1;\n }\n }\n\n if (_.boundScale && _.boundTolerance >= 0) {\n test = boundTest(_.boundScale, _.boundOrient, +_.boundTolerance);\n source.forEach(item => {\n if (!test(item)) item.opacity = 0;\n });\n } // re-calculate mark bounds\n\n\n const bounds = items[0].mark.bounds.clear();\n source.forEach(item => {\n if (item.opacity) bounds.union(item.bounds);\n });\n return pulse;\n }\n\n});\n\n/**\n * Queue modified scenegraph items for rendering.\n * @constructor\n */\n\nfunction Render(params) {\n Transform.call(this, null, params);\n}\ninherits(Render, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow;\n pulse.visit(pulse.ALL, item => view.dirty(item)); // set z-index dirty flag as needed\n\n if (pulse.fields && pulse.fields['zindex']) {\n const item = pulse.source && pulse.source[0];\n if (item) item.mark.zdirty = true;\n }\n }\n\n});\n\nconst tempBounds = new Bounds();\nfunction set(item, property, value) {\n return item[property] === value ? 0 : (item[property] = value, 1);\n}\n\nfunction isYAxis(mark) {\n var orient = mark.items[0].orient;\n return orient === Left || orient === Right;\n}\n\nfunction axisIndices(datum) {\n let index = +datum.grid;\n return [datum.ticks ? index++ : -1, // ticks index\n datum.labels ? index++ : -1, // labels index\n index + +datum.domain // title index\n ];\n}\n\nfunction axisLayout(view, axis, width, height) {\n var item = axis.items[0],\n datum = item.datum,\n delta = item.translate != null ? item.translate : 0.5,\n orient = item.orient,\n indices = axisIndices(datum),\n range = item.range,\n offset = item.offset,\n position = item.position,\n minExtent = item.minExtent,\n maxExtent = item.maxExtent,\n title = datum.title && item.items[indices[2]].items[0],\n titlePadding = item.titlePadding,\n bounds = item.bounds,\n dl = title && multiLineOffset(title),\n x = 0,\n y = 0,\n i,\n s;\n tempBounds.clear().union(bounds);\n bounds.clear();\n if ((i = indices[0]) > -1) bounds.union(item.items[i].bounds);\n if ((i = indices[1]) > -1) bounds.union(item.items[i].bounds); // position axis group and title\n\n switch (orient) {\n case Top:\n x = position || 0;\n y = -offset;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.y1));\n bounds.add(0, -s).add(range, 0);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 0, -1, bounds);\n break;\n\n case Left:\n x = -offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.x1));\n bounds.add(-s, 0).add(0, range);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 1, -1, bounds);\n break;\n\n case Right:\n x = width + offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.x2));\n bounds.add(0, 0).add(s, range);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 1, 1, bounds);\n break;\n\n case Bottom:\n x = position || 0;\n y = height + offset;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.y2));\n bounds.add(0, 0).add(range, s);\n if (title) axisTitleLayout(view, title, s, titlePadding, 0, 0, 1, bounds);\n break;\n\n default:\n x = item.x;\n y = item.y;\n } // update bounds\n\n\n boundStroke(bounds.translate(x, y), item);\n\n if (set(item, 'x', x + delta) | set(item, 'y', y + delta)) {\n item.bounds = tempBounds;\n view.dirty(item);\n item.bounds = bounds;\n view.dirty(item);\n }\n\n return item.mark.bounds.clear().union(bounds);\n}\n\nfunction axisTitleLayout(view, title, offset, pad, dl, isYAxis, sign, bounds) {\n const b = title.bounds;\n\n if (title.auto) {\n const v = sign * (offset + dl + pad);\n let dx = 0,\n dy = 0;\n view.dirty(title);\n isYAxis ? dx = (title.x || 0) - (title.x = v) : dy = (title.y || 0) - (title.y = v);\n title.mark.bounds.clear().union(b.translate(-dx, -dy));\n view.dirty(title);\n }\n\n bounds.union(b);\n}\n\nconst min = (a, b) => Math.floor(Math.min(a, b));\n\nconst max = (a, b) => Math.ceil(Math.max(a, b));\n\nfunction gridLayoutGroups(group) {\n var groups = group.items,\n n = groups.length,\n i = 0,\n mark,\n items;\n const views = {\n marks: [],\n rowheaders: [],\n rowfooters: [],\n colheaders: [],\n colfooters: [],\n rowtitle: null,\n coltitle: null\n }; // layout axes, gather legends, collect bounds\n\n for (; i < n; ++i) {\n mark = groups[i];\n items = mark.items;\n\n if (mark.marktype === Group) {\n switch (mark.role) {\n case AxisRole:\n case LegendRole:\n case TitleRole:\n break;\n\n case RowHeader:\n views.rowheaders.push(...items);\n break;\n\n case RowFooter:\n views.rowfooters.push(...items);\n break;\n\n case ColHeader:\n views.colheaders.push(...items);\n break;\n\n case ColFooter:\n views.colfooters.push(...items);\n break;\n\n case RowTitle:\n views.rowtitle = items[0];\n break;\n\n case ColTitle:\n views.coltitle = items[0];\n break;\n\n default:\n views.marks.push(...items);\n }\n }\n }\n\n return views;\n}\n\nfunction bboxFlush(item) {\n return new Bounds().set(0, 0, item.width || 0, item.height || 0);\n}\n\nfunction bboxFull(item) {\n const b = item.bounds.clone();\n return b.empty() ? b.set(0, 0, 0, 0) : b.translate(-(item.x || 0), -(item.y || 0));\n}\n\nfunction get(opt, key, d) {\n const v = isObject(opt) ? opt[key] : opt;\n return v != null ? v : d !== undefined ? d : 0;\n}\n\nfunction offsetValue(v) {\n return v < 0 ? Math.ceil(-v) : 0;\n}\n\nfunction gridLayout(view, groups, opt) {\n var dirty = !opt.nodirty,\n bbox = opt.bounds === Flush ? bboxFlush : bboxFull,\n bounds = tempBounds.set(0, 0, 0, 0),\n alignCol = get(opt.align, Column),\n alignRow = get(opt.align, Row),\n padCol = get(opt.padding, Column),\n padRow = get(opt.padding, Row),\n ncols = opt.columns || groups.length,\n nrows = ncols <= 0 ? 1 : Math.ceil(groups.length / ncols),\n n = groups.length,\n xOffset = Array(n),\n xExtent = Array(ncols),\n xMax = 0,\n yOffset = Array(n),\n yExtent = Array(nrows),\n yMax = 0,\n dx = Array(n),\n dy = Array(n),\n boxes = Array(n),\n m,\n i,\n c,\n r,\n b,\n g,\n px,\n py,\n x,\n y,\n offset;\n\n for (i = 0; i < ncols; ++i) xExtent[i] = 0;\n\n for (i = 0; i < nrows; ++i) yExtent[i] = 0; // determine offsets for each group\n\n\n for (i = 0; i < n; ++i) {\n g = groups[i];\n b = boxes[i] = bbox(g);\n g.x = g.x || 0;\n dx[i] = 0;\n g.y = g.y || 0;\n dy[i] = 0;\n c = i % ncols;\n r = ~~(i / ncols);\n xMax = Math.max(xMax, px = Math.ceil(b.x2));\n yMax = Math.max(yMax, py = Math.ceil(b.y2));\n xExtent[c] = Math.max(xExtent[c], px);\n yExtent[r] = Math.max(yExtent[r], py);\n xOffset[i] = padCol + offsetValue(b.x1);\n yOffset[i] = padRow + offsetValue(b.y1);\n if (dirty) view.dirty(groups[i]);\n } // set initial alignment offsets\n\n\n for (i = 0; i < n; ++i) {\n if (i % ncols === 0) xOffset[i] = 0;\n if (i < ncols) yOffset[i] = 0;\n } // enforce column alignment constraints\n\n\n if (alignCol === Each) {\n for (c = 1; c < ncols; ++c) {\n for (offset = 0, i = c; i < n; i += ncols) {\n if (offset < xOffset[i]) offset = xOffset[i];\n }\n\n for (i = c; i < n; i += ncols) {\n xOffset[i] = offset + xExtent[c - 1];\n }\n }\n } else if (alignCol === All) {\n for (offset = 0, i = 0; i < n; ++i) {\n if (i % ncols && offset < xOffset[i]) offset = xOffset[i];\n }\n\n for (i = 0; i < n; ++i) {\n if (i % ncols) xOffset[i] = offset + xMax;\n }\n } else {\n for (alignCol = false, c = 1; c < ncols; ++c) {\n for (i = c; i < n; i += ncols) {\n xOffset[i] += xExtent[c - 1];\n }\n }\n } // enforce row alignment constraints\n\n\n if (alignRow === Each) {\n for (r = 1; r < nrows; ++r) {\n for (offset = 0, i = r * ncols, m = i + ncols; i < m; ++i) {\n if (offset < yOffset[i]) offset = yOffset[i];\n }\n\n for (i = r * ncols; i < m; ++i) {\n yOffset[i] = offset + yExtent[r - 1];\n }\n }\n } else if (alignRow === All) {\n for (offset = 0, i = ncols; i < n; ++i) {\n if (offset < yOffset[i]) offset = yOffset[i];\n }\n\n for (i = ncols; i < n; ++i) {\n yOffset[i] = offset + yMax;\n }\n } else {\n for (alignRow = false, r = 1; r < nrows; ++r) {\n for (i = r * ncols, m = i + ncols; i < m; ++i) {\n yOffset[i] += yExtent[r - 1];\n }\n }\n } // perform horizontal grid layout\n\n\n for (x = 0, i = 0; i < n; ++i) {\n x = xOffset[i] + (i % ncols ? x : 0);\n dx[i] += x - groups[i].x;\n } // perform vertical grid layout\n\n\n for (c = 0; c < ncols; ++c) {\n for (y = 0, i = c; i < n; i += ncols) {\n y += yOffset[i];\n dy[i] += y - groups[i].y;\n }\n } // perform horizontal centering\n\n\n if (alignCol && get(opt.center, Column) && nrows > 1) {\n for (i = 0; i < n; ++i) {\n b = alignCol === All ? xMax : xExtent[i % ncols];\n x = b - boxes[i].x2 - groups[i].x - dx[i];\n if (x > 0) dx[i] += x / 2;\n }\n } // perform vertical centering\n\n\n if (alignRow && get(opt.center, Row) && ncols !== 1) {\n for (i = 0; i < n; ++i) {\n b = alignRow === All ? yMax : yExtent[~~(i / ncols)];\n y = b - boxes[i].y2 - groups[i].y - dy[i];\n if (y > 0) dy[i] += y / 2;\n }\n } // position grid relative to anchor\n\n\n for (i = 0; i < n; ++i) {\n bounds.union(boxes[i].translate(dx[i], dy[i]));\n }\n\n x = get(opt.anchor, X);\n y = get(opt.anchor, Y);\n\n switch (get(opt.anchor, Column)) {\n case End:\n x -= bounds.width();\n break;\n\n case Middle:\n x -= bounds.width() / 2;\n }\n\n switch (get(opt.anchor, Row)) {\n case End:\n y -= bounds.height();\n break;\n\n case Middle:\n y -= bounds.height() / 2;\n }\n\n x = Math.round(x);\n y = Math.round(y); // update mark positions, bounds, dirty\n\n bounds.clear();\n\n for (i = 0; i < n; ++i) {\n groups[i].mark.bounds.clear();\n }\n\n for (i = 0; i < n; ++i) {\n g = groups[i];\n g.x += dx[i] += x;\n g.y += dy[i] += y;\n bounds.union(g.mark.bounds.union(g.bounds.translate(dx[i], dy[i])));\n if (dirty) view.dirty(g);\n }\n\n return bounds;\n}\nfunction trellisLayout(view, group, opt) {\n var views = gridLayoutGroups(group),\n groups = views.marks,\n bbox = opt.bounds === Flush ? boundFlush : boundFull,\n off = opt.offset,\n ncols = opt.columns || groups.length,\n nrows = ncols <= 0 ? 1 : Math.ceil(groups.length / ncols),\n cells = nrows * ncols,\n x,\n y,\n x2,\n y2,\n anchor,\n band,\n offset; // -- initial grid layout\n\n const bounds = gridLayout(view, groups, opt);\n if (bounds.empty()) bounds.set(0, 0, 0, 0); // empty grid\n // -- layout grid headers and footers --\n // perform row header layout\n\n if (views.rowheaders) {\n band = get(opt.headerBand, Row, null);\n x = layoutHeaders(view, views.rowheaders, groups, ncols, nrows, -get(off, 'rowHeader'), min, 0, bbox, 'x1', 0, ncols, 1, band);\n } // perform column header layout\n\n\n if (views.colheaders) {\n band = get(opt.headerBand, Column, null);\n y = layoutHeaders(view, views.colheaders, groups, ncols, ncols, -get(off, 'columnHeader'), min, 1, bbox, 'y1', 0, 1, ncols, band);\n } // perform row footer layout\n\n\n if (views.rowfooters) {\n band = get(opt.footerBand, Row, null);\n x2 = layoutHeaders(view, views.rowfooters, groups, ncols, nrows, get(off, 'rowFooter'), max, 0, bbox, 'x2', ncols - 1, ncols, 1, band);\n } // perform column footer layout\n\n\n if (views.colfooters) {\n band = get(opt.footerBand, Column, null);\n y2 = layoutHeaders(view, views.colfooters, groups, ncols, ncols, get(off, 'columnFooter'), max, 1, bbox, 'y2', cells - ncols, 1, ncols, band);\n } // perform row title layout\n\n\n if (views.rowtitle) {\n anchor = get(opt.titleAnchor, Row);\n offset = get(off, 'rowTitle');\n offset = anchor === End ? x2 + offset : x - offset;\n band = get(opt.titleBand, Row, 0.5);\n layoutTitle(view, views.rowtitle, offset, 0, bounds, band);\n } // perform column title layout\n\n\n if (views.coltitle) {\n anchor = get(opt.titleAnchor, Column);\n offset = get(off, 'columnTitle');\n offset = anchor === End ? y2 + offset : y - offset;\n band = get(opt.titleBand, Column, 0.5);\n layoutTitle(view, views.coltitle, offset, 1, bounds, band);\n }\n}\n\nfunction boundFlush(item, field) {\n return field === 'x1' ? item.x || 0 : field === 'y1' ? item.y || 0 : field === 'x2' ? (item.x || 0) + (item.width || 0) : field === 'y2' ? (item.y || 0) + (item.height || 0) : undefined;\n}\n\nfunction boundFull(item, field) {\n return item.bounds[field];\n}\n\nfunction layoutHeaders(view, headers, groups, ncols, limit, offset, agg, isX, bound, bf, start, stride, back, band) {\n var n = groups.length,\n init = 0,\n edge = 0,\n i,\n j,\n k,\n m,\n b,\n h,\n g,\n x,\n y; // if no groups, early exit and return 0\n\n if (!n) return init; // compute margin\n\n for (i = start; i < n; i += stride) {\n if (groups[i]) init = agg(init, bound(groups[i], bf));\n } // if no headers, return margin calculation\n\n\n if (!headers.length) return init; // check if number of headers exceeds number of rows or columns\n\n if (headers.length > limit) {\n view.warn('Grid headers exceed limit: ' + limit);\n headers = headers.slice(0, limit);\n } // apply offset\n\n\n init += offset; // clear mark bounds for all headers\n\n for (j = 0, m = headers.length; j < m; ++j) {\n view.dirty(headers[j]);\n headers[j].mark.bounds.clear();\n } // layout each header\n\n\n for (i = start, j = 0, m = headers.length; j < m; ++j, i += stride) {\n h = headers[j];\n b = h.mark.bounds; // search for nearest group to align to\n // necessary if table has empty cells\n\n for (k = i; k >= 0 && (g = groups[k]) == null; k -= back); // assign coordinates and update bounds\n\n\n if (isX) {\n x = band == null ? g.x : Math.round(g.bounds.x1 + band * g.bounds.width());\n y = init;\n } else {\n x = init;\n y = band == null ? g.y : Math.round(g.bounds.y1 + band * g.bounds.height());\n }\n\n b.union(h.bounds.translate(x - (h.x || 0), y - (h.y || 0)));\n h.x = x;\n h.y = y;\n view.dirty(h); // update current edge of layout bounds\n\n edge = agg(edge, b[bf]);\n }\n\n return edge;\n}\n\nfunction layoutTitle(view, g, offset, isX, bounds, band) {\n if (!g) return;\n view.dirty(g); // compute title coordinates\n\n var x = offset,\n y = offset;\n isX ? x = Math.round(bounds.x1 + band * bounds.width()) : y = Math.round(bounds.y1 + band * bounds.height()); // assign coordinates and update bounds\n\n g.bounds.translate(x - (g.x || 0), y - (g.y || 0));\n g.mark.bounds.clear().union(g.bounds);\n g.x = x;\n g.y = y; // queue title for redraw\n\n view.dirty(g);\n}\n\nfunction lookup(config, orient) {\n const opt = config[orient] || {};\n return (key, d) => opt[key] != null ? opt[key] : config[key] != null ? config[key] : d;\n} // if legends specify offset directly, use the maximum specified value\n\n\nfunction offsets(legends, value) {\n let max = -Infinity;\n legends.forEach(item => {\n if (item.offset != null) max = Math.max(max, item.offset);\n });\n return max > -Infinity ? max : value;\n}\n\nfunction legendParams(g, orient, config, xb, yb, w, h) {\n const _ = lookup(config, orient),\n offset = offsets(g, _('offset', 0)),\n anchor = _('anchor', Start),\n mult = anchor === End ? 1 : anchor === Middle ? 0.5 : 0;\n\n const p = {\n align: Each,\n bounds: _('bounds', Flush),\n columns: _('direction') === 'vertical' ? 1 : g.length,\n padding: _('margin', 8),\n center: _('center'),\n nodirty: true\n };\n\n switch (orient) {\n case Left:\n p.anchor = {\n x: Math.floor(xb.x1) - offset,\n column: End,\n y: mult * (h || xb.height() + 2 * xb.y1),\n row: anchor\n };\n break;\n\n case Right:\n p.anchor = {\n x: Math.ceil(xb.x2) + offset,\n y: mult * (h || xb.height() + 2 * xb.y1),\n row: anchor\n };\n break;\n\n case Top:\n p.anchor = {\n y: Math.floor(yb.y1) - offset,\n row: End,\n x: mult * (w || yb.width() + 2 * yb.x1),\n column: anchor\n };\n break;\n\n case Bottom:\n p.anchor = {\n y: Math.ceil(yb.y2) + offset,\n x: mult * (w || yb.width() + 2 * yb.x1),\n column: anchor\n };\n break;\n\n case TopLeft:\n p.anchor = {\n x: offset,\n y: offset\n };\n break;\n\n case TopRight:\n p.anchor = {\n x: w - offset,\n y: offset,\n column: End\n };\n break;\n\n case BottomLeft:\n p.anchor = {\n x: offset,\n y: h - offset,\n row: End\n };\n break;\n\n case BottomRight:\n p.anchor = {\n x: w - offset,\n y: h - offset,\n column: End,\n row: End\n };\n break;\n }\n\n return p;\n}\nfunction legendLayout(view, legend) {\n var item = legend.items[0],\n datum = item.datum,\n orient = item.orient,\n bounds = item.bounds,\n x = item.x,\n y = item.y,\n w,\n h; // cache current bounds for later comparison\n\n item._bounds ? item._bounds.clear().union(bounds) : item._bounds = bounds.clone();\n bounds.clear(); // adjust legend to accommodate padding and title\n\n legendGroupLayout(view, item, item.items[0].items[0]); // aggregate bounds to determine size, and include origin\n\n bounds = legendBounds(item, bounds);\n w = 2 * item.padding;\n h = 2 * item.padding;\n\n if (!bounds.empty()) {\n w = Math.ceil(bounds.width() + w);\n h = Math.ceil(bounds.height() + h);\n }\n\n if (datum.type === Symbols) {\n legendEntryLayout(item.items[0].items[0].items[0].items);\n }\n\n if (orient !== None) {\n item.x = x = 0;\n item.y = y = 0;\n }\n\n item.width = w;\n item.height = h;\n boundStroke(bounds.set(x, y, x + w, y + h), item);\n item.mark.bounds.clear().union(bounds);\n return item;\n}\n\nfunction legendBounds(item, b) {\n // aggregate item bounds\n item.items.forEach(_ => b.union(_.bounds)); // anchor to legend origin\n\n b.x1 = item.padding;\n b.y1 = item.padding;\n return b;\n}\n\nfunction legendGroupLayout(view, item, entry) {\n var pad = item.padding,\n ex = pad - entry.x,\n ey = pad - entry.y;\n\n if (!item.datum.title) {\n if (ex || ey) translate(view, entry, ex, ey);\n } else {\n var title = item.items[1].items[0],\n anchor = title.anchor,\n tpad = item.titlePadding || 0,\n tx = pad - title.x,\n ty = pad - title.y;\n\n switch (title.orient) {\n case Left:\n ex += Math.ceil(title.bounds.width()) + tpad;\n break;\n\n case Right:\n case Bottom:\n break;\n\n default:\n ey += title.bounds.height() + tpad;\n }\n\n if (ex || ey) translate(view, entry, ex, ey);\n\n switch (title.orient) {\n case Left:\n ty += legendTitleOffset(item, entry, title, anchor, 1, 1);\n break;\n\n case Right:\n tx += legendTitleOffset(item, entry, title, End, 0, 0) + tpad;\n ty += legendTitleOffset(item, entry, title, anchor, 1, 1);\n break;\n\n case Bottom:\n tx += legendTitleOffset(item, entry, title, anchor, 0, 0);\n ty += legendTitleOffset(item, entry, title, End, -1, 0, 1) + tpad;\n break;\n\n default:\n tx += legendTitleOffset(item, entry, title, anchor, 0, 0);\n }\n\n if (tx || ty) translate(view, title, tx, ty); // translate legend if title pushes into negative coordinates\n\n if ((tx = Math.round(title.bounds.x1 - pad)) < 0) {\n translate(view, entry, -tx, 0);\n translate(view, title, -tx, 0);\n }\n }\n}\n\nfunction legendTitleOffset(item, entry, title, anchor, y, lr, noBar) {\n const grad = item.datum.type !== 'symbol',\n vgrad = title.datum.vgrad,\n e = grad && (lr || !vgrad) && !noBar ? entry.items[0] : entry,\n s = e.bounds[y ? 'y2' : 'x2'] - item.padding,\n u = vgrad && lr ? s : 0,\n v = vgrad && lr ? 0 : s,\n o = y <= 0 ? 0 : multiLineOffset(title);\n return Math.round(anchor === Start ? u : anchor === End ? v - o : 0.5 * (s - o));\n}\n\nfunction translate(view, item, dx, dy) {\n item.x += dx;\n item.y += dy;\n item.bounds.translate(dx, dy);\n item.mark.bounds.translate(dx, dy);\n view.dirty(item);\n}\n\nfunction legendEntryLayout(entries) {\n // get max widths for each column\n const widths = entries.reduce((w, g) => {\n w[g.column] = Math.max(g.bounds.x2 - g.x, w[g.column] || 0);\n return w;\n }, {}); // set dimensions of legend entry groups\n\n entries.forEach(g => {\n g.width = widths[g.column];\n g.height = g.bounds.y2 - g.y;\n });\n}\n\nfunction titleLayout(view, mark, width, height, viewBounds) {\n var group = mark.items[0],\n frame = group.frame,\n orient = group.orient,\n anchor = group.anchor,\n offset = group.offset,\n padding = group.padding,\n title = group.items[0].items[0],\n subtitle = group.items[1] && group.items[1].items[0],\n end = orient === Left || orient === Right ? height : width,\n start = 0,\n x = 0,\n y = 0,\n sx = 0,\n sy = 0,\n pos;\n\n if (frame !== Group) {\n orient === Left ? (start = viewBounds.y2, end = viewBounds.y1) : orient === Right ? (start = viewBounds.y1, end = viewBounds.y2) : (start = viewBounds.x1, end = viewBounds.x2);\n } else if (orient === Left) {\n start = height, end = 0;\n }\n\n pos = anchor === Start ? start : anchor === End ? end : (start + end) / 2;\n\n if (subtitle && subtitle.text) {\n // position subtitle\n switch (orient) {\n case Top:\n case Bottom:\n sy = title.bounds.height() + padding;\n break;\n\n case Left:\n sx = title.bounds.width() + padding;\n break;\n\n case Right:\n sx = -title.bounds.width() - padding;\n break;\n }\n\n tempBounds.clear().union(subtitle.bounds);\n tempBounds.translate(sx - (subtitle.x || 0), sy - (subtitle.y || 0));\n\n if (set(subtitle, 'x', sx) | set(subtitle, 'y', sy)) {\n view.dirty(subtitle);\n subtitle.bounds.clear().union(tempBounds);\n subtitle.mark.bounds.clear().union(tempBounds);\n view.dirty(subtitle);\n }\n\n tempBounds.clear().union(subtitle.bounds);\n } else {\n tempBounds.clear();\n }\n\n tempBounds.union(title.bounds); // position title group\n\n switch (orient) {\n case Top:\n x = pos;\n y = viewBounds.y1 - tempBounds.height() - offset;\n break;\n\n case Left:\n x = viewBounds.x1 - tempBounds.width() - offset;\n y = pos;\n break;\n\n case Right:\n x = viewBounds.x2 + tempBounds.width() + offset;\n y = pos;\n break;\n\n case Bottom:\n x = pos;\n y = viewBounds.y2 + offset;\n break;\n\n default:\n x = group.x;\n y = group.y;\n }\n\n if (set(group, 'x', x) | set(group, 'y', y)) {\n tempBounds.translate(x, y);\n view.dirty(group);\n group.bounds.clear().union(tempBounds);\n mark.bounds.clear().union(tempBounds);\n view.dirty(group);\n }\n\n return group.bounds;\n}\n\n/**\n * Layout view elements such as axes and legends.\n * Also performs size adjustments.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - Scenegraph mark of groups to layout.\n */\n\nfunction ViewLayout(params) {\n Transform.call(this, null, params);\n}\ninherits(ViewLayout, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow;\n\n _.mark.items.forEach(group => {\n if (_.layout) trellisLayout(view, group, _.layout);\n layoutGroup(view, group, _);\n });\n\n return shouldReflow(_.mark.group) ? pulse.reflow() : pulse;\n }\n\n});\n\nfunction shouldReflow(group) {\n // We typically should reflow if layout is invoked (#2568), as child items\n // may have resized and reflow ensures group bounds are re-calculated.\n // However, legend entries have a special exception to avoid instability.\n // For example, if a selected legend symbol gains a stroke on hover,\n // we don't want to re-position subsequent elements in the legend.\n return group && group.mark.role !== 'legend-entry';\n}\n\nfunction layoutGroup(view, group, _) {\n var items = group.items,\n width = Math.max(0, group.width || 0),\n height = Math.max(0, group.height || 0),\n viewBounds = new Bounds().set(0, 0, width, height),\n xBounds = viewBounds.clone(),\n yBounds = viewBounds.clone(),\n legends = [],\n title,\n mark,\n orient,\n b,\n i,\n n; // layout axes, gather legends, collect bounds\n\n for (i = 0, n = items.length; i < n; ++i) {\n mark = items[i];\n\n switch (mark.role) {\n case AxisRole:\n b = isYAxis(mark) ? xBounds : yBounds;\n b.union(axisLayout(view, mark, width, height));\n break;\n\n case TitleRole:\n title = mark;\n break;\n\n case LegendRole:\n legends.push(legendLayout(view, mark));\n break;\n\n case FrameRole:\n case ScopeRole:\n case RowHeader:\n case RowFooter:\n case RowTitle:\n case ColHeader:\n case ColFooter:\n case ColTitle:\n xBounds.union(mark.bounds);\n yBounds.union(mark.bounds);\n break;\n\n default:\n viewBounds.union(mark.bounds);\n }\n } // layout legends, adjust viewBounds\n\n\n if (legends.length) {\n // group legends by orient\n const l = {};\n legends.forEach(item => {\n orient = item.orient || Right;\n if (orient !== None) (l[orient] || (l[orient] = [])).push(item);\n }); // perform grid layout for each orient group\n\n for (const orient in l) {\n const g = l[orient];\n gridLayout(view, g, legendParams(g, orient, _.legends, xBounds, yBounds, width, height));\n } // update view bounds\n\n\n legends.forEach(item => {\n const b = item.bounds;\n\n if (!b.equals(item._bounds)) {\n item.bounds = item._bounds;\n view.dirty(item); // dirty previous location\n\n item.bounds = b;\n view.dirty(item);\n }\n\n if (_.autosize && _.autosize.type === Fit) {\n // For autosize fit, incorporate the orthogonal dimension only.\n // Legends that overrun the chart area will then be clipped;\n // otherwise the chart area gets reduced to nothing!\n switch (item.orient) {\n case Left:\n case Right:\n viewBounds.add(b.x1, 0).add(b.x2, 0);\n break;\n\n case Top:\n case Bottom:\n viewBounds.add(0, b.y1).add(0, b.y2);\n }\n } else {\n viewBounds.union(b);\n }\n });\n } // combine bounding boxes\n\n\n viewBounds.union(xBounds).union(yBounds); // layout title, adjust bounds\n\n if (title) {\n viewBounds.union(titleLayout(view, title, width, height, viewBounds));\n } // override aggregated view bounds if content is clipped\n\n\n if (group.clip) {\n viewBounds.set(0, 0, group.width || 0, group.height || 0);\n } // perform size adjustment\n\n\n viewSizeLayout(view, group, viewBounds, _);\n}\n\nfunction viewSizeLayout(view, group, viewBounds, _) {\n const auto = _.autosize || {},\n type = auto.type;\n if (view._autosize < 1 || !type) return;\n let viewWidth = view._width,\n viewHeight = view._height,\n width = Math.max(0, group.width || 0),\n left = Math.max(0, Math.ceil(-viewBounds.x1)),\n height = Math.max(0, group.height || 0),\n top = Math.max(0, Math.ceil(-viewBounds.y1));\n const right = Math.max(0, Math.ceil(viewBounds.x2 - width)),\n bottom = Math.max(0, Math.ceil(viewBounds.y2 - height));\n\n if (auto.contains === Padding) {\n const padding = view.padding();\n viewWidth -= padding.left + padding.right;\n viewHeight -= padding.top + padding.bottom;\n }\n\n if (type === None) {\n left = 0;\n top = 0;\n width = viewWidth;\n height = viewHeight;\n } else if (type === Fit) {\n width = Math.max(0, viewWidth - left - right);\n height = Math.max(0, viewHeight - top - bottom);\n } else if (type === FitX) {\n width = Math.max(0, viewWidth - left - right);\n viewHeight = height + top + bottom;\n } else if (type === FitY) {\n viewWidth = width + left + right;\n height = Math.max(0, viewHeight - top - bottom);\n } else if (type === Pad) {\n viewWidth = width + left + right;\n viewHeight = height + top + bottom;\n }\n\n view._resizeView(viewWidth, viewHeight, width, height, [left, top], auto.resize);\n}\n\nexport { Bound as bound, Identifier as identifier, Mark as mark, Overlap as overlap, Render as render, ViewLayout as viewlayout };\n","import { Transform, ingest, tupleid, stableCompare } from 'vega-dataflow';\nimport { tickCount, tickFormat, validTicks, tickValues, SymbolLegend, labelFormat, labelValues, GradientLegend, scaleFraction, labelFraction, scale, isContinuous, Sequential, Linear, Time, UTC, Pow, Sqrt, Ordinal, scaleImplicit, Log, Symlog, isLogarithmic, BinOrdinal, bandSpace, isInterpolating, interpolateRange, quantizeInterpolator, interpolateColors, interpolate, Band, Point, scheme, Threshold, Quantile, Quantize, Diverging } from 'vega-scale';\nimport { inherits, isArray, error, fastmap, falsy, isFunction, constant, peek, one, toSet, isString, zoomLog, zoomPow, zoomSymlog, zoomLinear, stringValue } from 'vega-util';\nimport { sum, range } from 'd3-array';\nimport { interpolateRound, interpolate as interpolate$1 } from 'd3-interpolate';\n\n/**\n * Generates axis ticks for visualizing a spatial scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate ticks for.\n * @param {*} [params.count=10] - The approximate number of ticks, or\n * desired tick interval, to use.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {function(*):string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid d3 4.0 format specifier.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\n\nfunction AxisTicks(params) {\n Transform.call(this, null, params);\n}\ninherits(AxisTicks, Transform, {\n transform(_, pulse) {\n if (this.value && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var locale = pulse.dataflow.locale(),\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n ticks = this.value,\n scale = _.scale,\n tally = _.count == null ? _.values ? _.values.length : 10 : _.count,\n count = tickCount(scale, tally, _.minstep),\n format = _.format || tickFormat(locale, scale, count, _.formatSpecifier, _.formatType, !!_.values),\n values = _.values ? validTicks(scale, _.values, count) : tickValues(scale, count);\n if (ticks) out.rem = ticks;\n ticks = values.map((value, i) => ingest({\n index: i / (values.length - 1 || 1),\n value: value,\n label: format(value)\n }));\n\n if (_.extra && ticks.length) {\n // add an extra tick pegged to the initial domain value\n // this is used to generate axes with 'binned' domains\n ticks.push(ingest({\n index: -1,\n extra: {\n value: ticks[0].value\n },\n label: ''\n }));\n }\n\n out.source = ticks;\n out.add = ticks;\n this.value = ticks;\n return out;\n }\n\n});\n\n/**\n * Joins a set of data elements against a set of visual items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): object} [params.item] - An item generator function.\n * @param {function(object): *} [params.key] - The key field associating data and visual items.\n */\n\nfunction DataJoin(params) {\n Transform.call(this, null, params);\n}\n\nfunction defaultItemCreate() {\n return ingest({});\n}\n\nfunction newMap(key) {\n const map = fastmap().test(t => t.exit);\n\n map.lookup = t => map.get(key(t));\n\n return map;\n}\n\ninherits(DataJoin, Transform, {\n transform(_, pulse) {\n var df = pulse.dataflow,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n item = _.item || defaultItemCreate,\n key = _.key || tupleid,\n map = this.value; // prevent transient (e.g., hover) requests from\n // cascading across marks derived from marks\n\n if (isArray(out.encode)) {\n out.encode = null;\n }\n\n if (map && (_.modified('key') || pulse.modified(key))) {\n error('DataJoin does not support modified key function or fields.');\n }\n\n if (!map) {\n pulse = pulse.addAll();\n this.value = map = newMap(key);\n }\n\n pulse.visit(pulse.ADD, t => {\n const k = key(t);\n let x = map.get(k);\n\n if (x) {\n if (x.exit) {\n map.empty--;\n out.add.push(x);\n } else {\n out.mod.push(x);\n }\n } else {\n x = item(t);\n map.set(k, x);\n out.add.push(x);\n }\n\n x.datum = t;\n x.exit = false;\n });\n pulse.visit(pulse.MOD, t => {\n const k = key(t),\n x = map.get(k);\n\n if (x) {\n x.datum = t;\n out.mod.push(x);\n }\n });\n pulse.visit(pulse.REM, t => {\n const k = key(t),\n x = map.get(k);\n\n if (t === x.datum && !x.exit) {\n out.rem.push(x);\n x.exit = true;\n ++map.empty;\n }\n });\n if (pulse.changed(pulse.ADD_MOD)) out.modifies('datum');\n\n if (pulse.clean() || _.clean && map.empty > df.cleanThreshold) {\n df.runAfter(map.clean);\n }\n\n return out;\n }\n\n});\n\n/**\n * Invokes encoding functions for visual items.\n * @constructor\n * @param {object} params - The parameters to the encoding functions. This\n * parameter object will be passed through to all invoked encoding functions.\n * @param {object} [params.mod=false] - Flag indicating if tuples in the input\n * mod set that are unmodified by encoders should be included in the output.\n * @param {object} param.encoders - The encoding functions\n * @param {function(object, object): boolean} [param.encoders.update] - Update encoding set\n * @param {function(object, object): boolean} [param.encoders.enter] - Enter encoding set\n * @param {function(object, object): boolean} [param.encoders.exit] - Exit encoding set\n */\n\nfunction Encode(params) {\n Transform.call(this, null, params);\n}\ninherits(Encode, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ADD_REM),\n fmod = _.mod || false,\n encoders = _.encoders,\n encode = pulse.encode; // if an array, the encode directive includes additional sets\n // that must be defined in order for the primary set to be invoked\n // e.g., only run the update set if the hover set is defined\n\n if (isArray(encode)) {\n if (out.changed() || encode.every(e => encoders[e])) {\n encode = encode[0];\n out.encode = null; // consume targeted encode directive\n } else {\n return pulse.StopPropagation;\n }\n } // marshall encoder functions\n\n\n var reenter = encode === 'enter',\n update = encoders.update || falsy,\n enter = encoders.enter || falsy,\n exit = encoders.exit || falsy,\n set = (encode && !reenter ? encoders[encode] : update) || falsy;\n\n if (pulse.changed(pulse.ADD)) {\n pulse.visit(pulse.ADD, t => {\n enter(t, _);\n update(t, _);\n });\n out.modifies(enter.output);\n out.modifies(update.output);\n\n if (set !== falsy && set !== update) {\n pulse.visit(pulse.ADD, t => {\n set(t, _);\n });\n out.modifies(set.output);\n }\n }\n\n if (pulse.changed(pulse.REM) && exit !== falsy) {\n pulse.visit(pulse.REM, t => {\n exit(t, _);\n });\n out.modifies(exit.output);\n }\n\n if (reenter || set !== falsy) {\n const flag = pulse.MOD | (_.modified() ? pulse.REFLOW : 0);\n\n if (reenter) {\n pulse.visit(flag, t => {\n const mod = enter(t, _) || fmod;\n if (set(t, _) || mod) out.mod.push(t);\n });\n if (out.mod.length) out.modifies(enter.output);\n } else {\n pulse.visit(flag, t => {\n if (set(t, _) || fmod) out.mod.push(t);\n });\n }\n\n if (out.mod.length) out.modifies(set.output);\n }\n\n return out.changed() ? out : pulse.StopPropagation;\n }\n\n});\n\n/**\n * Generates legend entries for visualizing a scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate items for.\n * @param {*} [params.count=5] - The approximate number of items, or\n * desired tick interval, to use.\n * @param {*} [params.limit] - The maximum number of entries to\n * include in a symbol legend.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid D3 format specifier string.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\n\nfunction LegendEntries(params) {\n Transform.call(this, [], params);\n}\ninherits(LegendEntries, Transform, {\n transform(_, pulse) {\n if (this.value != null && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var locale = pulse.dataflow.locale(),\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n items = this.value,\n type = _.type || SymbolLegend,\n scale = _.scale,\n limit = +_.limit,\n count = tickCount(scale, _.count == null ? 5 : _.count, _.minstep),\n lskip = !!_.values || type === SymbolLegend,\n format = _.format || labelFormat(locale, scale, count, type, _.formatSpecifier, _.formatType, lskip),\n values = _.values || labelValues(scale, count),\n domain,\n fraction,\n size,\n offset,\n ellipsis;\n if (items) out.rem = items;\n\n if (type === SymbolLegend) {\n if (limit && values.length > limit) {\n pulse.dataflow.warn('Symbol legend count exceeds limit, filtering items.');\n items = values.slice(0, limit - 1);\n ellipsis = true;\n } else {\n items = values;\n }\n\n if (isFunction(size = _.size)) {\n // if first value maps to size zero, remove from list (vega#717)\n if (!_.values && scale(items[0]) === 0) {\n items = items.slice(1);\n } // compute size offset for legend entries\n\n\n offset = items.reduce((max, value) => Math.max(max, size(value, _)), 0);\n } else {\n size = constant(offset = size || 8);\n }\n\n items = items.map((value, index) => ingest({\n index: index,\n label: format(value, index, items),\n value: value,\n offset: offset,\n size: size(value, _)\n }));\n\n if (ellipsis) {\n ellipsis = values[items.length];\n items.push(ingest({\n index: items.length,\n label: `\\u2026${values.length - items.length} entries`,\n value: ellipsis,\n offset: offset,\n size: size(ellipsis, _)\n }));\n }\n } else if (type === GradientLegend) {\n domain = scale.domain(), fraction = scaleFraction(scale, domain[0], peek(domain)); // if automatic label generation produces 2 or fewer values,\n // use the domain end points instead (fixes vega/vega#1364)\n\n if (values.length < 3 && !_.values && domain[0] !== peek(domain)) {\n values = [domain[0], peek(domain)];\n }\n\n items = values.map((value, index) => ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: fraction(value)\n }));\n } else {\n size = values.length - 1;\n fraction = labelFraction(scale);\n items = values.map((value, index) => ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: index ? fraction(value) : 0,\n perc2: index === size ? 1 : fraction(values[index + 1])\n }));\n }\n\n out.source = items;\n out.add = items;\n this.value = items;\n return out;\n }\n\n});\n\nconst sourceX = t => t.source.x;\n\nconst sourceY = t => t.source.y;\n\nconst targetX = t => t.target.x;\n\nconst targetY = t => t.target.y;\n/**\n * Layout paths linking source and target elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\n\nfunction LinkPath(params) {\n Transform.call(this, {}, params);\n}\nLinkPath.Definition = {\n 'type': 'LinkPath',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'sourceX',\n 'type': 'field',\n 'default': 'source.x'\n }, {\n 'name': 'sourceY',\n 'type': 'field',\n 'default': 'source.y'\n }, {\n 'name': 'targetX',\n 'type': 'field',\n 'default': 'target.x'\n }, {\n 'name': 'targetY',\n 'type': 'field',\n 'default': 'target.y'\n }, {\n 'name': 'orient',\n 'type': 'enum',\n 'default': 'vertical',\n 'values': ['horizontal', 'vertical', 'radial']\n }, {\n 'name': 'shape',\n 'type': 'enum',\n 'default': 'line',\n 'values': ['line', 'arc', 'curve', 'diagonal', 'orthogonal']\n }, {\n 'name': 'require',\n 'type': 'signal'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\ninherits(LinkPath, Transform, {\n transform(_, pulse) {\n var sx = _.sourceX || sourceX,\n sy = _.sourceY || sourceY,\n tx = _.targetX || targetX,\n ty = _.targetY || targetY,\n as = _.as || 'path',\n orient = _.orient || 'vertical',\n shape = _.shape || 'line',\n path = Paths.get(shape + '-' + orient) || Paths.get(shape);\n\n if (!path) {\n error('LinkPath unsupported type: ' + _.shape + (_.orient ? '-' + _.orient : ''));\n }\n\n pulse.visit(pulse.SOURCE, t => {\n t[as] = path(sx(t), sy(t), tx(t), ty(t));\n });\n return pulse.reflow(_.modified()).modifies(as);\n }\n\n});\n\nconst line = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'L' + tx + ',' + ty;\n\nconst lineR = (sa, sr, ta, tr) => line(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\n\nconst arc = (sx, sy, tx, ty) => {\n var dx = tx - sx,\n dy = ty - sy,\n rr = Math.sqrt(dx * dx + dy * dy) / 2,\n ra = 180 * Math.atan2(dy, dx) / Math.PI;\n return 'M' + sx + ',' + sy + 'A' + rr + ',' + rr + ' ' + ra + ' 0 1' + ' ' + tx + ',' + ty;\n};\n\nconst arcR = (sa, sr, ta, tr) => arc(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\n\nconst curve = (sx, sy, tx, ty) => {\n const dx = tx - sx,\n dy = ty - sy,\n ix = 0.2 * (dx + dy),\n iy = 0.2 * (dy - dx);\n return 'M' + sx + ',' + sy + 'C' + (sx + ix) + ',' + (sy + iy) + ' ' + (tx + iy) + ',' + (ty - ix) + ' ' + tx + ',' + ty;\n};\n\nconst curveR = (sa, sr, ta, tr) => curve(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\n\nconst orthoX = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'V' + ty + 'H' + tx;\n\nconst orthoY = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'H' + tx + 'V' + ty;\n\nconst orthoR = (sa, sr, ta, tr) => {\n const sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n sf = Math.abs(ta - sa) > Math.PI ? ta <= sa : ta > sa;\n return 'M' + sr * sc + ',' + sr * ss + 'A' + sr + ',' + sr + ' 0 0,' + (sf ? 1 : 0) + ' ' + sr * tc + ',' + sr * ts + 'L' + tr * tc + ',' + tr * ts;\n};\n\nconst diagonalX = (sx, sy, tx, ty) => {\n const m = (sx + tx) / 2;\n return 'M' + sx + ',' + sy + 'C' + m + ',' + sy + ' ' + m + ',' + ty + ' ' + tx + ',' + ty;\n};\n\nconst diagonalY = (sx, sy, tx, ty) => {\n const m = (sy + ty) / 2;\n return 'M' + sx + ',' + sy + 'C' + sx + ',' + m + ' ' + tx + ',' + m + ' ' + tx + ',' + ty;\n};\n\nconst diagonalR = (sa, sr, ta, tr) => {\n const sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n mr = (sr + tr) / 2;\n return 'M' + sr * sc + ',' + sr * ss + 'C' + mr * sc + ',' + mr * ss + ' ' + mr * tc + ',' + mr * ts + ' ' + tr * tc + ',' + tr * ts;\n};\n\nconst Paths = fastmap({\n 'line': line,\n 'line-radial': lineR,\n 'arc': arc,\n 'arc-radial': arcR,\n 'curve': curve,\n 'curve-radial': curveR,\n 'orthogonal-horizontal': orthoX,\n 'orthogonal-vertical': orthoY,\n 'orthogonal-radial': orthoR,\n 'diagonal-horizontal': diagonalX,\n 'diagonal-vertical': diagonalY,\n 'diagonal-radial': diagonalR\n});\n\n/**\n * Pie and donut chart layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size pie segments.\n * @param {number} [params.startAngle=0] - The start angle (in radians) of the layout.\n * @param {number} [params.endAngle=2π] - The end angle (in radians) of the layout.\n * @param {boolean} [params.sort] - Boolean flag for sorting sectors by value.\n */\n\nfunction Pie(params) {\n Transform.call(this, null, params);\n}\nPie.Definition = {\n 'type': 'Pie',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'startAngle',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'endAngle',\n 'type': 'number',\n 'default': 6.283185307179586\n }, {\n 'name': 'sort',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['startAngle', 'endAngle']\n }]\n};\ninherits(Pie, Transform, {\n transform(_, pulse) {\n var as = _.as || ['startAngle', 'endAngle'],\n startAngle = as[0],\n endAngle = as[1],\n field = _.field || one,\n start = _.startAngle || 0,\n stop = _.endAngle != null ? _.endAngle : 2 * Math.PI,\n data = pulse.source,\n values = data.map(field),\n n = values.length,\n a = start,\n k = (stop - start) / sum(values),\n index = range(n),\n i,\n t,\n v;\n\n if (_.sort) {\n index.sort((a, b) => values[a] - values[b]);\n }\n\n for (i = 0; i < n; ++i) {\n v = values[index[i]];\n t = data[index[i]];\n t[startAngle] = a;\n t[endAngle] = a += v * k;\n }\n\n this.value = values;\n return pulse.reflow(_.modified()).modifies(as);\n }\n\n});\n\nconst DEFAULT_COUNT = 5;\n\nfunction includeZero(scale) {\n const type = scale.type;\n return !scale.bins && (type === Linear || type === Pow || type === Sqrt);\n}\n\nfunction includePad(type) {\n return isContinuous(type) && type !== Sequential;\n}\n\nconst SKIP = toSet(['set', 'modified', 'clear', 'type', 'scheme', 'schemeExtent', 'schemeCount', 'domain', 'domainMin', 'domainMid', 'domainMax', 'domainRaw', 'domainImplicit', 'nice', 'zero', 'bins', 'range', 'rangeStep', 'round', 'reverse', 'interpolate', 'interpolateGamma']);\n/**\n * Maintains a scale function mapping data values to visual channels.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction Scale(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\ninherits(Scale, Transform, {\n transform(_, pulse) {\n var df = pulse.dataflow,\n scale$1 = this.value,\n key = scaleKey(_);\n\n if (!scale$1 || key !== scale$1.type) {\n this.value = scale$1 = scale(key)();\n }\n\n for (key in _) if (!SKIP[key]) {\n // padding is a scale property for band/point but not others\n if (key === 'padding' && includePad(scale$1.type)) continue; // invoke scale property setter, raise warning if not found\n\n isFunction(scale$1[key]) ? scale$1[key](_[key]) : df.warn('Unsupported scale property: ' + key);\n }\n\n configureRange(scale$1, _, configureBins(scale$1, _, configureDomain(scale$1, _, df)));\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n }\n\n});\n\nfunction scaleKey(_) {\n var t = _.type,\n d = '',\n n; // backwards compatibility pre Vega 5.\n\n if (t === Sequential) return Sequential + '-' + Linear;\n\n if (isContinuousColor(_)) {\n n = _.rawDomain ? _.rawDomain.length : _.domain ? _.domain.length + +(_.domainMid != null) : 0;\n d = n === 2 ? Sequential + '-' : n === 3 ? Diverging + '-' : '';\n }\n\n return (d + t || Linear).toLowerCase();\n}\n\nfunction isContinuousColor(_) {\n const t = _.type;\n return isContinuous(t) && t !== Time && t !== UTC && (_.scheme || _.range && _.range.length && _.range.every(isString));\n}\n\nfunction configureDomain(scale, _, df) {\n // check raw domain, if provided use that and exit early\n const raw = rawDomain(scale, _.domainRaw, df);\n if (raw > -1) return raw;\n var domain = _.domain,\n type = scale.type,\n zero = _.zero || _.zero === undefined && includeZero(scale),\n n,\n mid;\n if (!domain) return 0; // adjust continuous domain for minimum pixel padding\n\n if (includePad(type) && _.padding && domain[0] !== peek(domain)) {\n domain = padDomain(type, domain, _.range, _.padding, _.exponent, _.constant);\n } // adjust domain based on zero, min, max settings\n\n\n if (zero || _.domainMin != null || _.domainMax != null || _.domainMid != null) {\n n = (domain = domain.slice()).length - 1 || 1;\n\n if (zero) {\n if (domain[0] > 0) domain[0] = 0;\n if (domain[n] < 0) domain[n] = 0;\n }\n\n if (_.domainMin != null) domain[0] = _.domainMin;\n if (_.domainMax != null) domain[n] = _.domainMax;\n\n if (_.domainMid != null) {\n mid = _.domainMid;\n const i = mid > domain[n] ? n + 1 : mid < domain[0] ? 0 : n;\n if (i !== n) df.warn('Scale domainMid exceeds domain min or max.', mid);\n domain.splice(i, 0, mid);\n }\n } // set the scale domain\n\n\n scale.domain(domainCheck(type, domain, df)); // if ordinal scale domain is defined, prevent implicit\n // domain construction as side-effect of scale lookup\n\n if (type === Ordinal) {\n scale.unknown(_.domainImplicit ? scaleImplicit : undefined);\n } // perform 'nice' adjustment as requested\n\n\n if (_.nice && scale.nice) {\n scale.nice(_.nice !== true && tickCount(scale, _.nice) || null);\n } // return the cardinality of the domain\n\n\n return domain.length;\n}\n\nfunction rawDomain(scale, raw, df) {\n if (raw) {\n scale.domain(domainCheck(scale.type, raw, df));\n return raw.length;\n } else {\n return -1;\n }\n}\n\nfunction padDomain(type, domain, range, pad, exponent, constant) {\n var span = Math.abs(peek(range) - range[0]),\n frac = span / (span - 2 * pad),\n d = type === Log ? zoomLog(domain, null, frac) : type === Sqrt ? zoomPow(domain, null, frac, 0.5) : type === Pow ? zoomPow(domain, null, frac, exponent || 1) : type === Symlog ? zoomSymlog(domain, null, frac, constant || 1) : zoomLinear(domain, null, frac);\n domain = domain.slice();\n domain[0] = d[0];\n domain[domain.length - 1] = d[1];\n return domain;\n}\n\nfunction domainCheck(type, domain, df) {\n if (isLogarithmic(type)) {\n // sum signs of domain values\n // if all pos or all neg, abs(sum) === domain.length\n var s = Math.abs(domain.reduce((s, v) => s + (v < 0 ? -1 : v > 0 ? 1 : 0), 0));\n\n if (s !== domain.length) {\n df.warn('Log scale domain includes zero: ' + stringValue(domain));\n }\n }\n\n return domain;\n}\n\nfunction configureBins(scale, _, count) {\n let bins = _.bins;\n\n if (bins && !isArray(bins)) {\n // generate bin boundary array\n const domain = scale.domain(),\n lo = domain[0],\n hi = peek(domain),\n step = bins.step;\n let start = bins.start == null ? lo : bins.start,\n stop = bins.stop == null ? hi : bins.stop;\n if (!step) error('Scale bins parameter missing step property.');\n if (start < lo) start = step * Math.ceil(lo / step);\n if (stop > hi) stop = step * Math.floor(hi / step);\n bins = range(start, stop + step / 2, step);\n }\n\n if (bins) {\n // assign bin boundaries to scale instance\n scale.bins = bins;\n } else if (scale.bins) {\n // no current bins, remove bins if previously set\n delete scale.bins;\n } // special handling for bin-ordinal scales\n\n\n if (scale.type === BinOrdinal) {\n if (!bins) {\n // the domain specifies the bins\n scale.bins = scale.domain();\n } else if (!_.domain && !_.domainRaw) {\n // the bins specify the domain\n scale.domain(bins);\n count = bins.length;\n }\n } // return domain cardinality\n\n\n return count;\n}\n\nfunction configureRange(scale, _, count) {\n var type = scale.type,\n round = _.round || false,\n range = _.range; // if range step specified, calculate full range extent\n\n if (_.rangeStep != null) {\n range = configureRangeStep(type, _, count);\n } // else if a range scheme is defined, use that\n else if (_.scheme) {\n range = configureScheme(type, _, count);\n\n if (isFunction(range)) {\n if (scale.interpolator) {\n return scale.interpolator(range);\n } else {\n error(`Scale type ${type} does not support interpolating color schemes.`);\n }\n }\n } // given a range array for an interpolating scale, convert to interpolator\n\n\n if (range && isInterpolating(type)) {\n return scale.interpolator(interpolateColors(flip(range, _.reverse), _.interpolate, _.interpolateGamma));\n } // configure rounding / interpolation\n\n\n if (range && _.interpolate && scale.interpolate) {\n scale.interpolate(interpolate(_.interpolate, _.interpolateGamma));\n } else if (isFunction(scale.round)) {\n scale.round(round);\n } else if (isFunction(scale.rangeRound)) {\n scale.interpolate(round ? interpolateRound : interpolate$1);\n }\n\n if (range) scale.range(flip(range, _.reverse));\n}\n\nfunction configureRangeStep(type, _, count) {\n if (type !== Band && type !== Point) {\n error('Only band and point scales support rangeStep.');\n } // calculate full range based on requested step size and padding\n\n\n var outer = (_.paddingOuter != null ? _.paddingOuter : _.padding) || 0,\n inner = type === Point ? 1 : (_.paddingInner != null ? _.paddingInner : _.padding) || 0;\n return [0, _.rangeStep * bandSpace(count, inner, outer)];\n}\n\nfunction configureScheme(type, _, count) {\n var extent = _.schemeExtent,\n name,\n scheme$1;\n\n if (isArray(_.scheme)) {\n scheme$1 = interpolateColors(_.scheme, _.interpolate, _.interpolateGamma);\n } else {\n name = _.scheme.toLowerCase();\n scheme$1 = scheme(name);\n if (!scheme$1) error(`Unrecognized scheme name: ${_.scheme}`);\n } // determine size for potential discrete range\n\n\n count = type === Threshold ? count + 1 : type === BinOrdinal ? count - 1 : type === Quantile || type === Quantize ? +_.schemeCount || DEFAULT_COUNT : count; // adjust and/or quantize scheme as appropriate\n\n return isInterpolating(type) ? adjustScheme(scheme$1, extent, _.reverse) : isFunction(scheme$1) ? quantizeInterpolator(adjustScheme(scheme$1, extent), count) : type === Ordinal ? scheme$1 : scheme$1.slice(0, count);\n}\n\nfunction adjustScheme(scheme, extent, reverse) {\n return isFunction(scheme) && (extent || reverse) ? interpolateRange(scheme, flip(extent || [0, 1], reverse)) : scheme;\n}\n\nfunction flip(array, reverse) {\n return reverse ? array.slice().reverse() : array;\n}\n\n/**\n * Sorts scenegraph items in the pulse source array.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting tuples.\n */\n\nfunction SortItems(params) {\n Transform.call(this, null, params);\n}\ninherits(SortItems, Transform, {\n transform(_, pulse) {\n const mod = _.modified('sort') || pulse.changed(pulse.ADD) || pulse.modified(_.sort.fields) || pulse.modified('datum');\n if (mod) pulse.source.sort(stableCompare(_.sort));\n this.modified(mod);\n return pulse;\n }\n\n});\n\nconst Zero = 'zero',\n Center = 'center',\n Normalize = 'normalize',\n DefOutput = ['y0', 'y1'];\n/**\n * Stack layout for visualization elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to stack.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {function(object,object): number} [params.sort] - A comparator for stack sorting.\n * @param {string} [offset='zero'] - Stack baseline offset. One of 'zero', 'center', 'normalize'.\n */\n\nfunction Stack(params) {\n Transform.call(this, null, params);\n}\nStack.Definition = {\n 'type': 'Stack',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'offset',\n 'type': 'enum',\n 'default': Zero,\n 'values': [Zero, Center, Normalize]\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': DefOutput\n }]\n};\ninherits(Stack, Transform, {\n transform(_, pulse) {\n var as = _.as || DefOutput,\n y0 = as[0],\n y1 = as[1],\n sort = stableCompare(_.sort),\n field = _.field || one,\n stack = _.offset === Center ? stackCenter : _.offset === Normalize ? stackNormalize : stackZero,\n groups,\n i,\n n,\n max; // partition, sum, and sort the stack groups\n\n groups = partition(pulse.source, _.groupby, sort, field); // compute stack layouts per group\n\n for (i = 0, n = groups.length, max = groups.max; i < n; ++i) {\n stack(groups[i], max, field, y0, y1);\n }\n\n return pulse.reflow(_.modified()).modifies(as);\n }\n\n});\n\nfunction stackCenter(group, max, field, y0, y1) {\n var last = (max - group.sum) / 2,\n m = group.length,\n j = 0,\n t;\n\n for (; j < m; ++j) {\n t = group[j];\n t[y0] = last;\n t[y1] = last += Math.abs(field(t));\n }\n}\n\nfunction stackNormalize(group, max, field, y0, y1) {\n var scale = 1 / group.sum,\n last = 0,\n m = group.length,\n j = 0,\n v = 0,\n t;\n\n for (; j < m; ++j) {\n t = group[j];\n t[y0] = last;\n t[y1] = last = scale * (v += Math.abs(field(t)));\n }\n}\n\nfunction stackZero(group, max, field, y0, y1) {\n var lastPos = 0,\n lastNeg = 0,\n m = group.length,\n j = 0,\n v,\n t;\n\n for (; j < m; ++j) {\n t = group[j];\n v = +field(t);\n\n if (v < 0) {\n t[y0] = lastNeg;\n t[y1] = lastNeg += v;\n } else {\n t[y0] = lastPos;\n t[y1] = lastPos += v;\n }\n }\n}\n\nfunction partition(data, groupby, sort, field) {\n var groups = [],\n get = f => f(t),\n map,\n i,\n n,\n m,\n t,\n k,\n g,\n s,\n max; // partition data points into stack groups\n\n\n if (groupby == null) {\n groups.push(data.slice());\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n\n if (!g) {\n map[k] = g = [];\n groups.push(g);\n }\n\n g.push(t);\n }\n } // compute sums of groups, sort groups as needed\n\n\n for (k = 0, max = 0, m = groups.length; k < m; ++k) {\n g = groups[k];\n\n for (i = 0, s = 0, n = g.length; i < n; ++i) {\n s += Math.abs(field(g[i]));\n }\n\n g.sum = s;\n if (s > max) max = s;\n if (sort) g.sort(sort);\n }\n\n groups.max = max;\n return groups;\n}\n\nexport { AxisTicks as axisticks, DataJoin as datajoin, Encode as encode, LegendEntries as legendentries, LinkPath as linkpath, Pie as pie, Scale as scale, SortItems as sortitems, Stack as stack };\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","import {Adder} from \"d3-array\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nexport var areaRingSum = new Adder();\n\n// hello?\n\nvar areaSum = new Adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum = new Adder();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum = new Adder();\n stream(object, areaStream);\n return areaSum * 2;\n}\n","import {Adder} from \"d3-array\";\nimport {areaStream, areaRingSum} from \"./area.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport {abs, degrees, epsilon, radians} from \"./math.js\";\nimport stream from \"./stream.js\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum,\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum = new Adder();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n },\n sphere: function() {\n lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import {Adder} from \"d3-array\";\nimport {asin, atan2, cos, degrees, epsilon, epsilon2, hypot, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar W0, W1,\n X0, Y0, Z0,\n X1, Y1, Z1,\n X2, Y2, Z2,\n lambda00, phi00, // first point\n x0, y0, z0; // previous point\n\nvar centroidStream = {\n sphere: noop,\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n centroidRingPoint(lambda00, phi00);\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n cx = y0 * z - z0 * y,\n cy = z0 * x - x0 * z,\n cz = x0 * y - y0 * x,\n m = hypot(cx, cy, cz),\n w = asin(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2.add(v * cx);\n Y2.add(v * cy);\n Z2.add(v * cz);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 = 0;\n X2 = new Adder();\n Y2 = new Adder();\n Z2 = new Adder();\n stream(object, centroidStream);\n\n var x = +X2,\n y = +Y2,\n z = +Z2,\n m = hypot(x, y, z);\n\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < epsilon2) {\n x = X1, y = Y1, z = Z1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n m = hypot(x, y, z);\n // If the feature still has an undefined ccentroid, then return.\n if (m < epsilon2) return [NaN, NaN];\n }\n\n return [atan2(y, x) * degrees, asin(z / m) * degrees];\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y, m) {\n line.push([x, y, m]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n if (pointEqual(p0, p1)) {\n if (!p0[2] && !p1[2]) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n // handle degenerate cases by moving the point\n p1[0] += 2 * epsilon;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n if (abs(point[0]) <= pi)\n return point[0];\n else\n return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n var lambda = longitude(point),\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n var sum = new Adder();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = longitude(point0),\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = longitude(point1),\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n point1[2] = 1;\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1], 2);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1], 3);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math.js\";\n\nfunction graticuleX(y0, y1, dy) {\n var y = range(y0, y1 - epsilon, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = range(x0, x1 - epsilon, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: \"MultiLineString\", coordinates: lines()};\n }\n\n function lines() {\n return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n return graticule()();\n}\n","import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n areaRingSum = new Adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum = new Adder();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum = new Adder();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","export default x => x;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum = new Adder();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = circle(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n var pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n return path.projection(projection).context(context);\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n function transform(x, y) {\n x *= sx; y *= sy;\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k * sx, (dy - y) / k * sy];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n x *= sx; y *= sy;\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n };\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate angle\n sx = 1, // reflectX\n sy = 1, // reflectX\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n };\n\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n","import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y,\n l = atan2(x, abs(r0y)) * sign(r0y);\n if (r0y * n < 0)\n l -= pi * sign(x) * sign(r0y);\n return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n","import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n","import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n if (k === Infinity) return [2, 0];\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\n\nfunction tany(y) {\n return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n f = cy0 * pow(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n l = atan2(x, abs(fy)) * sign(fy);\n if (fy * n < 0)\n l -= pi * sign(x) * sign(fy);\n return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n","import projection from \"./index.js\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {abs, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {equirectangularRaw} from \"./equirectangular.js\";\n\nexport function conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs(n) < epsilon) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y,\n l = atan2(x, abs(gy)) * sign(gy);\n if (gy * n < 0)\n l -= pi * sign(x) * sign(gy);\n return [l / n, g - sign(n) * sqrt(x * x + gy * gy)];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = sqrt(3) / 2,\n iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs(delta) < epsilon2) break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n asin(sin(l) / M)\n ];\n};\n\nexport default function() {\n return projection(equalEarthRaw)\n .scale(177.158);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n","import projection from \"./index.js\";\nimport {abs, epsilon} from \"../math.js\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\nexport default function() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math.js\";\nimport {mercatorProjection} from \"./mercator.js\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n","export var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var ceil = Math.ceil;\nexport var cos = Math.cos;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var pow = Math.pow;\nexport var round = Math.round;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sin = Math.sin;\nexport var tan = Math.tan;\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var sqrt1_2 = Math.SQRT1_2;\nexport var sqrt2 = sqrt(2);\nexport var sqrtPi = sqrt(pi);\nexport var tau = pi * 2;\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport function sinci(x) {\n return x ? x / Math.sin(x) : 1;\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function sqrt(x) {\n return x > 0 ? Math.sqrt(x) : 0;\n}\n\nexport function tanh(x) {\n x = exp(2 * x);\n return (x - 1) / (x + 1);\n}\n\nexport function sinh(x) {\n return (exp(x) - exp(-x)) / 2;\n}\n\nexport function cosh(x) {\n return (exp(x) + exp(-x)) / 2;\n}\n\nexport function arsinh(x) {\n return log(x + sqrt(x * x + 1));\n}\n\nexport function arcosh(x) {\n return log(x + sqrt(x * x - 1));\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, cos, epsilon, halfPi, pi, sin, sqrt2} from \"./math.js\";\n\nexport function mollweideBromleyTheta(cp, phi) {\n var cpsinPhi = cp * sin(phi), i = 30, delta;\n do phi -= delta = (phi + sin(phi) - cpsinPhi) / (1 + cos(phi));\n while (abs(delta) > epsilon && --i > 0);\n return phi / 2;\n}\n\nexport function mollweideBromleyRaw(cx, cy, cp) {\n\n function forward(lambda, phi) {\n return [cx * lambda * cos(phi = mollweideBromleyTheta(cp, phi)), cy * sin(phi)];\n }\n\n forward.invert = function(x, y) {\n return y = asin(y / cy), [x / (cx * cos(y)), asin((2 * y + sin(2 * y)) / cp)];\n };\n\n return forward;\n}\n\nexport var mollweideRaw = mollweideBromleyRaw(sqrt2 / halfPi, sqrt2, pi);\n\nexport default function() {\n return projection(mollweideRaw)\n .scale(169.529);\n}\n","import { geoPath, geoAlbers, geoAlbersUsa, geoAzimuthalEqualArea, geoAzimuthalEquidistant, geoConicConformal, geoConicEqualArea, geoConicEquidistant, geoEqualEarth, geoEquirectangular, geoGnomonic, geoIdentity, geoMercator, geoNaturalEarth1, geoOrthographic, geoStereographic, geoTransverseMercator } from 'd3-geo';\nimport { geoMollweide } from 'd3-geo-projection';\n\nconst defaultPath = geoPath();\nconst projectionProperties = [// standard properties in d3-geo\n'clipAngle', 'clipExtent', 'scale', 'translate', 'center', 'rotate', 'parallels', 'precision', 'reflectX', 'reflectY', // extended properties in d3-geo-projections\n'coefficient', 'distance', 'fraction', 'lobes', 'parallel', 'radius', 'ratio', 'spacing', 'tilt'];\n/**\n * Augment projections with their type and a copy method.\n */\n\nfunction create(type, constructor) {\n return function projection() {\n const p = constructor();\n p.type = type;\n p.path = geoPath().projection(p);\n\n p.copy = p.copy || function () {\n const c = projection();\n projectionProperties.forEach(prop => {\n if (p[prop]) c[prop](p[prop]());\n });\n c.path.pointRadius(p.path.pointRadius());\n return c;\n };\n\n return p;\n };\n}\n\nfunction projection(type, proj) {\n if (!type || typeof type !== 'string') {\n throw new Error('Projection type must be a name string.');\n }\n\n type = type.toLowerCase();\n\n if (arguments.length > 1) {\n projections[type] = create(type, proj);\n return this;\n } else {\n return projections[type] || null;\n }\n}\nfunction getProjectionPath(proj) {\n return proj && proj.path || defaultPath;\n}\nconst projections = {\n // base d3-geo projection types\n albers: geoAlbers,\n albersusa: geoAlbersUsa,\n azimuthalequalarea: geoAzimuthalEqualArea,\n azimuthalequidistant: geoAzimuthalEquidistant,\n conicconformal: geoConicConformal,\n conicequalarea: geoConicEqualArea,\n conicequidistant: geoConicEquidistant,\n equalEarth: geoEqualEarth,\n equirectangular: geoEquirectangular,\n gnomonic: geoGnomonic,\n identity: geoIdentity,\n mercator: geoMercator,\n mollweide: geoMollweide,\n naturalEarth1: geoNaturalEarth1,\n orthographic: geoOrthographic,\n stereographic: geoStereographic,\n transversemercator: geoTransverseMercator\n};\n\nfor (const key in projections) {\n projection(key, projections[key]);\n}\n\nexport { getProjectionPath, projection, projectionProperties };\n","import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n","import clipRectangle from \"../clip/rectangle.js\";\nimport identity from \"../identity.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport {cos, degrees, radians, sin} from \"../math.js\";\n\nexport default function() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\n alpha = 0, ca, sa, // angle\n x0 = null, y0, x1, y1, // clip extent\n kx = 1, ky = 1,\n transform = transformer({\n point: function(x, y) {\n var p = projection([x, y])\n this.stream.point(p[0], p[1]);\n }\n }),\n postclip = identity,\n cache,\n cacheStream;\n\n function reset() {\n kx = k * sx;\n ky = k * sy;\n cache = cacheStream = null;\n return projection;\n }\n\n function projection (p) {\n var x = p[0] * kx, y = p[1] * ky;\n if (alpha) {\n var t = y * ca - x * sa;\n x = x * ca + y * sa;\n y = t;\n } \n return [x + tx, y + ty];\n }\n projection.invert = function(p) {\n var x = p[0] - tx, y = p[1] - ty;\n if (alpha) {\n var t = y * ca + x * sa;\n x = x * ca - y * sa;\n y = t;\n }\n return [x / kx, y / ky];\n };\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n };\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n projection.scale = function(_) {\n return arguments.length ? (k = +_, reset()) : k;\n };\n projection.translate = function(_) {\n return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\n }\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;\n };\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\n };\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\n };\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n return projection;\n}\n","import { Transform, rederive, ingest, replace } from 'vega-dataflow';\nimport { error, extent, inherits, identity, isArray, isFunction, isNumber, constant, array, one, accessorName, accessorFields, field, extend, toSet, zero } from 'vega-util';\nimport { range, tickStep, max, sum } from 'd3-array';\nimport { bandwidthNRD } from 'vega-statistics';\nimport { getProjectionPath, projectionProperties, projection } from 'vega-projection';\nimport { geoGraticule } from 'd3-geo';\nimport { rgb } from 'd3-color';\nimport { canvas } from 'vega-canvas';\n\nfunction noop() {}\n\nconst cases = [[], [[[1.0, 1.5], [0.5, 1.0]]], [[[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [0.5, 1.0]]], [[[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 0.5], [1.0, 1.5]]], [[[1.0, 0.5], [0.5, 1.0]]], [[[0.5, 1.0], [1.0, 0.5]]], [[[1.0, 1.5], [1.0, 0.5]]], [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [1.0, 0.5]]], [[[0.5, 1.0], [1.5, 1.0]]], [[[1.0, 1.5], [1.5, 1.0]]], [[[0.5, 1.0], [1.0, 1.5]]], []]; // Implementation adapted from d3/d3-contour. Thanks!\n\nfunction contours () {\n var dx = 1,\n dy = 1,\n smooth = smoothLinear;\n\n function contours(values, tz) {\n return tz.map(value => contour(values, value));\n } // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n\n\n function contour(values, value) {\n var polygons = [],\n holes = [];\n isorings(values, value, ring => {\n smooth(ring, values, value);\n if (area(ring) > 0) polygons.push([ring]);else holes.push(ring);\n });\n holes.forEach(hole => {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n return {\n type: 'MultiPolygon',\n value: value,\n coordinates: polygons\n };\n } // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n\n\n function isorings(values, value, callback) {\n var fragmentByStart = new Array(),\n fragmentByEnd = new Array(),\n x,\n y,\n t0,\n t1,\n t2,\n t3; // Special case for the first row (y = -1, t2 = t3 = 0).\n\n x = y = -1;\n t1 = values[0] >= value;\n cases[t1 << 1].forEach(stitch);\n\n while (++x < dx - 1) {\n t0 = t1, t1 = values[x + 1] >= value;\n cases[t0 | t1 << 1].forEach(stitch);\n }\n\n cases[t1 << 0].forEach(stitch); // General case for the intermediate rows.\n\n while (++y < dy - 1) {\n x = -1;\n t1 = values[y * dx + dx] >= value;\n t2 = values[y * dx] >= value;\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n\n while (++x < dx - 1) {\n t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n\n cases[t1 | t2 << 3].forEach(stitch);\n } // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n\n\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n\n while (++x < dx - 1) {\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n\n cases[t2 << 3].forEach(stitch);\n\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f,\n g;\n\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {\n start: f.start,\n end: g.end,\n ring: f.ring.concat(g.ring)\n };\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {\n start: g.start,\n end: f.end,\n ring: g.ring.concat(f.ring)\n };\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {\n start: startIndex,\n end: endIndex,\n ring: [start, end]\n };\n }\n }\n }\n\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n\n function smoothLinear(ring, values, value) {\n ring.forEach(point => {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v0,\n v1 = values[yt * dx + xt];\n\n if (x > 0 && x < dx && xt === x) {\n v0 = values[yt * dx + xt - 1];\n point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n }\n\n if (y > 0 && y < dy && yt === y) {\n v0 = values[(yt - 1) * dx + xt];\n point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n }\n });\n }\n\n contours.contour = contour;\n\n contours.size = function (_) {\n if (!arguments.length) return [dx, dy];\n\n var _0 = Math.floor(_[0]),\n _1 = Math.floor(_[1]);\n\n if (!(_0 >= 0 && _1 >= 0)) error('invalid size');\n return dx = _0, dy = _1, contours;\n };\n\n contours.smooth = function (_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n };\n\n return contours;\n}\n\nfunction area(ring) {\n var i = 0,\n n = ring.length,\n area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n\n while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n\n return area;\n}\n\nfunction contains(ring, hole) {\n var i = -1,\n n = hole.length,\n c;\n\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n\n return 0;\n}\n\nfunction ringContains(ring, point) {\n var x = point[0],\n y = point[1],\n contains = -1;\n\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i],\n xi = pi[0],\n yi = pi[1],\n pj = ring[j],\n xj = pj[0],\n yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi) contains = -contains;\n }\n\n return contains;\n}\n\nfunction segmentContains(a, b, c) {\n var i;\n return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n\nfunction quantize (k, nice, zero) {\n return function (values) {\n var ex = extent(values),\n start = zero ? Math.min(ex[0], 0) : ex[0],\n stop = ex[1],\n span = stop - start,\n step = nice ? tickStep(start, stop, k) : span / (k + 1);\n return range(start + step, stop, step);\n };\n}\n\n/**\n * Generate isocontours (level sets) based on input raster grid data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} [params.field] - The field with raster grid\n * data. If unspecified, the tuple itself is interpreted as a raster grid.\n * @param {Array} [params.thresholds] - Contour threshold array. If\n * specified, the levels, nice, resolve, and zero parameters are ignored.\n * @param {number} [params.levels] - The desired number of contour levels.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified levels.\n * @param {string} [params.resolve] - The method for resolving thresholds\n * across multiple input grids. If 'independent' (the default), threshold\n * calculation will be performed separately for each grid. If 'shared', a\n * single set of threshold values will be used for all input grids.\n * @param {boolean} [params.zero] - Boolean flag indicating if the contour\n * threshold values should include zero.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n * @param {boolean} [params.scale] - Optional numerical value by which to\n * scale the output isocontour coordinates. This parameter can be useful\n * to scale the contours to match a desired output resolution.\n * @param {string} [params.as='contour'] - The output field in which to store\n * the generated isocontour data (default 'contour').\n */\n\nfunction Isocontour(params) {\n Transform.call(this, null, params);\n}\nIsocontour.Definition = {\n 'type': 'Isocontour',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'thresholds',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'levels',\n 'type': 'number'\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'zero',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'scale',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'translate',\n 'type': 'number',\n 'array': true,\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'default': 'contour'\n }]\n};\ninherits(Isocontour, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n source = pulse.materialize(pulse.SOURCE).source,\n field = _.field || identity,\n contour = contours().smooth(_.smooth !== false),\n tz = _.thresholds || levels(source, field, _),\n as = _.as === null ? null : _.as || 'contour',\n values = [];\n source.forEach(t => {\n const grid = field(t); // generate contour paths in GeoJSON format\n\n const paths = contour.size([grid.width, grid.height])(grid.values, isArray(tz) ? tz : tz(grid.values)); // adjust contour path coordinates as needed\n\n transformPaths(paths, grid, t, _); // ingest; copy source data properties to output\n\n paths.forEach(p => {\n values.push(rederive(t, ingest(as != null ? {\n [as]: p\n } : p)));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = values;\n return out;\n }\n\n});\n\nfunction levels(values, f, _) {\n const q = quantize(_.levels || 10, _.nice, _.zero !== false);\n return _.resolve !== 'shared' ? q : q(values.map(t => max(f(t).values)));\n}\n\nfunction transformPaths(paths, grid, datum, _) {\n let s = _.scale || grid.scale,\n t = _.translate || grid.translate;\n if (isFunction(s)) s = s(datum, _);\n if (isFunction(t)) t = t(datum, _);\n if ((s === 1 || s == null) && !t) return;\n const sx = (isNumber(s) ? s : s[0]) || 1,\n sy = (isNumber(s) ? s : s[1]) || 1,\n tx = t && t[0] || 0,\n ty = t && t[1] || 0;\n paths.forEach(transform(grid, sx, sy, tx, ty));\n}\n\nfunction transform(grid, sx, sy, tx, ty) {\n const x1 = grid.x1 || 0,\n y1 = grid.y1 || 0,\n flip = sx * sy < 0;\n\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n\n function transformRing(coordinates) {\n if (flip) coordinates.reverse(); // maintain winding order\n\n coordinates.forEach(transformPoint);\n }\n\n function transformPoint(coordinates) {\n coordinates[0] = (coordinates[0] - x1) * sx + tx;\n coordinates[1] = (coordinates[1] - y1) * sy + ty;\n }\n\n return function (geometry) {\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n };\n}\n\nfunction radius(bw, data, f) {\n const v = bw >= 0 ? bw : bandwidthNRD(data, f);\n return Math.round((Math.sqrt(4 * v * v + 1) - 1) / 2);\n}\n\nfunction number(_) {\n return isFunction(_) ? _ : constant(+_);\n} // Implementation adapted from d3/d3-contour. Thanks!\n\n\nfunction density2D () {\n var x = d => d[0],\n y = d => d[1],\n weight = one,\n bandwidth = [-1, -1],\n dx = 960,\n dy = 500,\n k = 2; // log2(cellSize)\n\n\n function density(data, counts) {\n const rx = radius(bandwidth[0], data, x) >> k,\n // blur x-radius\n ry = radius(bandwidth[1], data, y) >> k,\n // blur y-radius\n ox = rx ? rx + 2 : 0,\n // x-offset padding for blur\n oy = ry ? ry + 2 : 0,\n // y-offset padding for blur\n n = 2 * ox + (dx >> k),\n // grid width\n m = 2 * oy + (dy >> k),\n // grid height\n values0 = new Float32Array(n * m),\n values1 = new Float32Array(n * m);\n let values = values0;\n data.forEach(d => {\n const xi = ox + (+x(d) >> k),\n yi = oy + (+y(d) >> k);\n\n if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n values0[xi + yi * n] += +weight(d);\n }\n });\n\n if (rx > 0 && ry > 0) {\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n } else if (rx > 0) {\n blurX(n, m, values0, values1, rx);\n blurX(n, m, values1, values0, rx);\n blurX(n, m, values0, values1, rx);\n values = values1;\n } else if (ry > 0) {\n blurY(n, m, values0, values1, ry);\n blurY(n, m, values1, values0, ry);\n blurY(n, m, values0, values1, ry);\n values = values1;\n } // scale density estimates\n // density in points per square pixel or probability density\n\n\n const s = counts ? Math.pow(2, -2 * k) : 1 / sum(values);\n\n for (let i = 0, sz = n * m; i < sz; ++i) values[i] *= s;\n\n return {\n values: values,\n scale: 1 << k,\n width: n,\n height: m,\n x1: ox,\n y1: oy,\n x2: ox + (dx >> k),\n y2: oy + (dy >> k)\n };\n }\n\n density.x = function (_) {\n return arguments.length ? (x = number(_), density) : x;\n };\n\n density.y = function (_) {\n return arguments.length ? (y = number(_), density) : y;\n };\n\n density.weight = function (_) {\n return arguments.length ? (weight = number(_), density) : weight;\n };\n\n density.size = function (_) {\n if (!arguments.length) return [dx, dy];\n\n var _0 = +_[0],\n _1 = +_[1];\n\n if (!(_0 >= 0 && _1 >= 0)) error('invalid size');\n return dx = _0, dy = _1, density;\n };\n\n density.cellSize = function (_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) error('invalid cell size');\n k = Math.floor(Math.log(_) / Math.LN2);\n return density;\n };\n\n density.bandwidth = function (_) {\n if (!arguments.length) return bandwidth;\n _ = array(_);\n if (_.length === 1) _ = [+_[0], +_[0]];\n if (_.length !== 2) error('invalid bandwidth');\n return bandwidth = _, density;\n };\n\n return density;\n}\n\nfunction blurX(n, m, source, target, r) {\n const w = (r << 1) + 1;\n\n for (let j = 0; j < m; ++j) {\n for (let i = 0, sr = 0; i < n + r; ++i) {\n if (i < n) {\n sr += source[i + j * n];\n }\n\n if (i >= r) {\n if (i >= w) {\n sr -= source[i - w + j * n];\n }\n\n target[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n }\n }\n }\n}\n\nfunction blurY(n, m, source, target, r) {\n const w = (r << 1) + 1;\n\n for (let i = 0; i < n; ++i) {\n for (let j = 0, sr = 0; j < m + r; ++j) {\n if (j < m) {\n sr += source[i + j * n];\n }\n\n if (j >= r) {\n if (j >= w) {\n sr -= source[i + (j - w) * n];\n }\n\n target[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n }\n }\n }\n}\n\n/**\n * Perform 2D kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The [width, height] extent (in\n * units of input pixels) over which to perform density estimation.\n * @param {function(object): number} params.x - The x-coordinate accessor.\n * @param {function(object): number} params.y - The y-coordinate accessor.\n * @param {function(object): number} [params.weight] - The weight accessor.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * This parameter determines the level of spatial approximation. For example,\n * the default value of 4 maps to 2x reductions in both x- and y- dimensions.\n * A value of 1 will result in an output raster grid whose dimensions exactly\n * matches the size parameter.\n * @param {Array} [params.bandwidth] - The KDE kernel bandwidths,\n * in pixels. The input can be a two-element array specifying separate\n * x and y bandwidths, or a single-element array specifying both. If the\n * bandwidth is unspecified or less than zero, the bandwidth will be\n * automatically determined.\n * @param {boolean} [params.counts=false] - A boolean flag indicating if the\n * output values should be probability estimates (false, default) or\n * smoothed counts (true).\n * @param {string} [params.as='grid'] - The output field in which to store\n * the generated raster grid (default 'grid').\n */\n\nfunction KDE2D(params) {\n Transform.call(this, null, params);\n}\nKDE2D.Definition = {\n 'type': 'KDE2D',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'weight',\n 'type': 'field'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'cellSize',\n 'type': 'number'\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'counts',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'grid'\n }]\n};\nconst PARAMS = ['x', 'y', 'weight', 'size', 'cellSize', 'bandwidth'];\nfunction params(obj, _) {\n PARAMS.forEach(param => _[param] != null ? obj[param](_[param]) : 0);\n return obj;\n}\ninherits(KDE2D, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) return pulse.StopPropagation;\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n kde = params(density2D(), _),\n as = _.as || 'grid',\n values = [];\n\n function set(t, vals) {\n for (let i = 0; i < names.length; ++i) t[names[i]] = vals[i];\n\n return t;\n } // generate density raster grids\n\n\n values = groups.map(g => ingest(set({\n [as]: kde(g, _.counts)\n }, g.dims)));\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = values;\n return out;\n }\n\n});\nfunction partition(data, groupby) {\n var groups = [],\n get = f => f(t),\n map,\n i,\n n,\n t,\n k,\n g; // partition data points into groups\n\n\n if (groupby == null) {\n groups.push(data);\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n\n g.push(t);\n }\n }\n\n return groups;\n}\n\n/**\n * Generate contours based on kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The dimensions [width, height] over which to compute contours.\n * If the values parameter is provided, this must be the dimensions of the input data.\n * If density estimation is performed, this is the output view dimensions in pixels.\n * @param {Array} [params.values] - An array of numeric values representing an\n * width x height grid of values over which to compute contours. If unspecified, this\n * transform will instead attempt to compute contours for the kernel density estimate\n * using values drawn from data tuples in the input pulse.\n * @param {function(object): number} [params.x] - The pixel x-coordinate accessor for density estimation.\n * @param {function(object): number} [params.y] - The pixel y-coordinate accessor for density estimation.\n * @param {function(object): number} [params.weight] - The data point weight accessor for density estimation.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * @param {number} [params.bandwidth] - Kernel density estimation bandwidth.\n * @param {Array} [params.thresholds] - Contour threshold array. If\n * this parameter is set, the count and nice parameters will be ignored.\n * @param {number} [params.count] - The desired number of contours.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified count.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n */\n\nfunction Contour(params) {\n Transform.call(this, null, params);\n}\nContour.Definition = {\n 'type': 'Contour',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'values',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'x',\n 'type': 'field'\n }, {\n 'name': 'y',\n 'type': 'field'\n }, {\n 'name': 'weight',\n 'type': 'field'\n }, {\n 'name': 'cellSize',\n 'type': 'number'\n }, {\n 'name': 'bandwidth',\n 'type': 'number'\n }, {\n 'name': 'count',\n 'type': 'number'\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'thresholds',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': true\n }]\n};\ninherits(Contour, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n contour = contours().smooth(_.smooth !== false),\n values = _.values,\n thresh = _.thresholds || quantize(_.count || 10, _.nice, !!values),\n size = _.size,\n grid,\n post;\n\n if (!values) {\n values = pulse.materialize(pulse.SOURCE).source;\n grid = params(density2D(), _)(values, true);\n post = transform(grid, grid.scale || 1, grid.scale || 1, 0, 0);\n size = [grid.width, grid.height];\n values = grid.values;\n }\n\n thresh = isArray(thresh) ? thresh : thresh(values);\n values = contour.size(size)(values, thresh);\n if (post) values.forEach(post);\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = (values || []).map(ingest);\n return out;\n }\n\n});\n\nconst Feature = 'Feature';\nconst FeatureCollection = 'FeatureCollection';\nconst MultiPoint = 'MultiPoint';\n\n/**\n * Consolidate an array of [longitude, latitude] points or GeoJSON features\n * into a combined GeoJSON object. This transform is particularly useful for\n * combining geo data for a Projection's fit argument. The resulting GeoJSON\n * data is available as this transform's value. Input pulses are unchanged.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.fields] - A two-element array\n * of field accessors for the longitude and latitude values.\n * @param {function(object): *} params.geojson - A field accessor for\n * retrieving GeoJSON feature data.\n */\n\nfunction GeoJSON(params) {\n Transform.call(this, null, params);\n}\nGeoJSON.Definition = {\n 'type': 'GeoJSON',\n 'metadata': {},\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'geojson',\n 'type': 'field'\n }]\n};\ninherits(GeoJSON, Transform, {\n transform(_, pulse) {\n var features = this._features,\n points = this._points,\n fields = _.fields,\n lon = fields && fields[0],\n lat = fields && fields[1],\n geojson = _.geojson || !fields && identity,\n flag = pulse.ADD,\n mod;\n mod = _.modified() || pulse.changed(pulse.REM) || pulse.modified(accessorFields(geojson)) || lon && pulse.modified(accessorFields(lon)) || lat && pulse.modified(accessorFields(lat));\n\n if (!this.value || mod) {\n flag = pulse.SOURCE;\n this._features = features = [];\n this._points = points = [];\n }\n\n if (geojson) {\n pulse.visit(flag, t => features.push(geojson(t)));\n }\n\n if (lon && lat) {\n pulse.visit(flag, t => {\n var x = lon(t),\n y = lat(t);\n\n if (x != null && y != null && (x = +x) === x && (y = +y) === y) {\n points.push([x, y]);\n }\n });\n features = features.concat({\n type: Feature,\n geometry: {\n type: MultiPoint,\n coordinates: points\n }\n });\n }\n\n this.value = {\n type: FeatureCollection,\n features: features\n };\n }\n\n});\n\n/**\n * Map GeoJSON data to an SVG path string.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='path'] - The output field in which to store\n * the generated path data (default 'path').\n */\n\nfunction GeoPath(params) {\n Transform.call(this, null, params);\n}\nGeoPath.Definition = {\n 'type': 'GeoPath',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection'\n }, {\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'pointRadius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\ninherits(GeoPath, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n path = this.value,\n field = _.field || identity,\n as = _.as || 'path',\n flag = out.SOURCE;\n\n if (!path || _.modified()) {\n // parameters updated, reset and reflow\n this.value = path = getProjectionPath(_.projection);\n out.materialize().reflow();\n } else {\n flag = field === identity || pulse.modified(field.fields) ? out.ADD_MOD : out.ADD;\n }\n\n const prev = initPath(path, _.pointRadius);\n out.visit(flag, t => t[as] = path(field(t)));\n path.pointRadius(prev);\n return out.modifies(as);\n }\n\n});\n\nfunction initPath(path, pointRadius) {\n const prev = path.pointRadius();\n path.context(null);\n\n if (pointRadius != null) {\n path.pointRadius(pointRadius);\n }\n\n return prev;\n}\n\n/**\n * Geo-code a longitude/latitude point to an x/y coordinate.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {Array} params.fields - A two-element array of\n * field accessors for the longitude and latitude values.\n * @param {Array} [params.as] - A two-element array of field names\n * under which to store the result. Defaults to ['x','y'].\n */\n\nfunction GeoPoint(params) {\n Transform.call(this, null, params);\n}\nGeoPoint.Definition = {\n 'type': 'GeoPoint',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection',\n 'required': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['x', 'y']\n }]\n};\ninherits(GeoPoint, Transform, {\n transform(_, pulse) {\n var proj = _.projection,\n lon = _.fields[0],\n lat = _.fields[1],\n as = _.as || ['x', 'y'],\n x = as[0],\n y = as[1],\n mod;\n\n function set(t) {\n const xy = proj([lon(t), lat(t)]);\n\n if (xy) {\n t[x] = xy[0];\n t[y] = xy[1];\n } else {\n t[x] = undefined;\n t[y] = undefined;\n }\n }\n\n if (_.modified()) {\n // parameters updated, reflow\n pulse = pulse.materialize().reflow(true).visit(pulse.SOURCE, set);\n } else {\n mod = pulse.modified(lon.fields) || pulse.modified(lat.fields);\n pulse.visit(mod ? pulse.ADD_MOD : pulse.ADD, set);\n }\n\n return pulse.modifies(as);\n }\n\n});\n\n/**\n * Annotate items with a geopath shape generator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='shape'] - The output field in which to store\n * the generated path data (default 'shape').\n */\n\nfunction GeoShape(params) {\n Transform.call(this, null, params);\n}\nGeoShape.Definition = {\n 'type': 'GeoShape',\n 'metadata': {\n 'modifies': true,\n 'nomod': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection'\n }, {\n 'name': 'field',\n 'type': 'field',\n 'default': 'datum'\n }, {\n 'name': 'pointRadius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'shape'\n }]\n};\ninherits(GeoShape, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n shape = this.value,\n as = _.as || 'shape',\n flag = out.ADD;\n\n if (!shape || _.modified()) {\n // parameters updated, reset and reflow\n this.value = shape = shapeGenerator(getProjectionPath(_.projection), _.field || field('datum'), _.pointRadius);\n out.materialize().reflow();\n flag = out.SOURCE;\n }\n\n out.visit(flag, t => t[as] = shape);\n return out.modifies(as);\n }\n\n});\n\nfunction shapeGenerator(path, field, pointRadius) {\n const shape = pointRadius == null ? _ => path(field(_)) : _ => {\n var prev = path.pointRadius(),\n value = path.pointRadius(pointRadius)(field(_));\n path.pointRadius(prev);\n return value;\n };\n\n shape.context = _ => {\n path.context(_);\n return shape;\n };\n\n return shape;\n}\n\n/**\n * GeoJSON feature generator for creating graticules.\n * @constructor\n */\n\nfunction Graticule(params) {\n Transform.call(this, [], params);\n this.generator = geoGraticule();\n}\nGraticule.Definition = {\n 'type': 'Graticule',\n 'metadata': {\n 'changes': true,\n 'generates': true\n },\n 'params': [{\n 'name': 'extent',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'extentMajor',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'extentMinor',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'step',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'stepMajor',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'default': [90, 360]\n }, {\n 'name': 'stepMinor',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'default': [10, 10]\n }, {\n 'name': 'precision',\n 'type': 'number',\n 'default': 2.5\n }]\n};\ninherits(Graticule, Transform, {\n transform(_, pulse) {\n var src = this.value,\n gen = this.generator,\n t;\n\n if (!src.length || _.modified()) {\n for (const prop in _) {\n if (isFunction(gen[prop])) {\n gen[prop](_[prop]);\n }\n }\n }\n\n t = gen();\n\n if (src.length) {\n pulse.mod.push(replace(src[0], t));\n } else {\n pulse.add.push(ingest(t));\n }\n\n src[0] = t;\n return pulse;\n }\n\n});\n\n/**\n * Render a heatmap image for input raster grid data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} [params.field] - The field with raster grid\n * data. If unspecified, the tuple itself is interpreted as a raster grid.\n * @param {string} [params.color] - A constant color value or function for\n * individual pixel color. If a function, it will be invoked with an input\n * object that includes $x, $y, $value, and $max fields for the grid.\n * @param {number} [params.opacity] - A constant opacity value or function for\n * individual pixel opacity. If a function, it will be invoked with an input\n * object that includes $x, $y, $value, and $max fields for the grid.\n * @param {string} [params.resolve] - The method for resolving maximum values\n * across multiple input grids. If 'independent' (the default), maximum\n * calculation will be performed separately for each grid. If 'shared',\n * a single global maximum will be used for all input grids.\n * @param {string} [params.as='image'] - The output field in which to store\n * the generated bitmap canvas images (default 'image').\n */\n\nfunction Heatmap(params) {\n Transform.call(this, null, params);\n}\nHeatmap.Definition = {\n 'type': 'heatmap',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'color',\n 'type': 'string',\n 'expr': true\n }, {\n 'name': 'opacity',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'image'\n }]\n};\ninherits(Heatmap, Transform, {\n transform(_, pulse) {\n if (!pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var source = pulse.materialize(pulse.SOURCE).source,\n shared = _.resolve === 'shared',\n field = _.field || identity,\n opacity = opacity_(_.opacity, _),\n color = color_(_.color, _),\n as = _.as || 'image',\n obj = {\n $x: 0,\n $y: 0,\n $value: 0,\n $max: shared ? max(source.map(t => max(field(t).values))) : 0\n };\n source.forEach(t => {\n const v = field(t); // build proxy data object\n\n const o = extend({}, t, obj); // set maximum value if not globally shared\n\n if (!shared) o.$max = max(v.values || []); // generate canvas image\n // optimize color/opacity if not pixel-dependent\n\n t[as] = toCanvas(v, o, color.dep ? color : constant(color(o)), opacity.dep ? opacity : constant(opacity(o)));\n });\n return pulse.reflow(true).modifies(as);\n }\n\n}); // get image color function\n\nfunction color_(color, _) {\n let f;\n\n if (isFunction(color)) {\n f = obj => rgb(color(obj, _));\n\n f.dep = dependency(color);\n } else {\n // default to mid-grey\n f = constant(rgb(color || '#888'));\n }\n\n return f;\n} // get image opacity function\n\n\nfunction opacity_(opacity, _) {\n let f;\n\n if (isFunction(opacity)) {\n f = obj => opacity(obj, _);\n\n f.dep = dependency(opacity);\n } else if (opacity) {\n f = constant(opacity);\n } else {\n // default to [0, max] opacity gradient\n f = obj => obj.$value / obj.$max || 0;\n\n f.dep = true;\n }\n\n return f;\n} // check if function depends on individual pixel data\n\n\nfunction dependency(f) {\n if (!isFunction(f)) return false;\n const set = toSet(accessorFields(f));\n return set.$x || set.$y || set.$value || set.$max;\n} // render raster grid to canvas\n\n\nfunction toCanvas(grid, obj, color, opacity) {\n const n = grid.width,\n m = grid.height,\n x1 = grid.x1 || 0,\n y1 = grid.y1 || 0,\n x2 = grid.x2 || n,\n y2 = grid.y2 || m,\n val = grid.values,\n value = val ? i => val[i] : zero,\n can = canvas(x2 - x1, y2 - y1),\n ctx = can.getContext('2d'),\n img = ctx.getImageData(0, 0, x2 - x1, y2 - y1),\n pix = img.data;\n\n for (let j = y1, k = 0; j < y2; ++j) {\n obj.$y = j - y1;\n\n for (let i = x1, r = j * n; i < x2; ++i, k += 4) {\n obj.$x = i - x1;\n obj.$value = value(i + r);\n const v = color(obj);\n pix[k + 0] = v.r;\n pix[k + 1] = v.g;\n pix[k + 2] = v.b;\n pix[k + 3] = ~~(255 * opacity(obj));\n }\n }\n\n ctx.putImageData(img, 0, 0);\n return can;\n}\n\n/**\n * Maintains a cartographic projection.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction Projection(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\ninherits(Projection, Transform, {\n transform(_, pulse) {\n let proj = this.value;\n\n if (!proj || _.modified('type')) {\n this.value = proj = create(_.type);\n projectionProperties.forEach(prop => {\n if (_[prop] != null) set(proj, prop, _[prop]);\n });\n } else {\n projectionProperties.forEach(prop => {\n if (_.modified(prop)) set(proj, prop, _[prop]);\n });\n }\n\n if (_.pointRadius != null) proj.path.pointRadius(_.pointRadius);\n if (_.fit) fit(proj, _);\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n }\n\n});\n\nfunction fit(proj, _) {\n const data = collectGeoJSON(_.fit);\n _.extent ? proj.fitExtent(_.extent, data) : _.size ? proj.fitSize(_.size, data) : 0;\n}\n\nfunction create(type) {\n const constructor = projection((type || 'mercator').toLowerCase());\n if (!constructor) error('Unrecognized projection type: ' + type);\n return constructor();\n}\n\nfunction set(proj, key, value) {\n if (isFunction(proj[key])) proj[key](value);\n}\n\nfunction collectGeoJSON(data) {\n data = array(data);\n return data.length === 1 ? data[0] : {\n type: FeatureCollection,\n features: data.reduce((a, f) => a.concat(featurize(f)), [])\n };\n}\n\nfunction featurize(f) {\n return f.type === FeatureCollection ? f.features : array(f).filter(d => d != null).map(d => d.type === Feature ? d : {\n type: Feature,\n geometry: d\n });\n}\n\nexport { Contour as contour, GeoJSON as geojson, GeoPath as geopath, GeoPoint as geopoint, GeoShape as geoshape, Graticule as graticule, Heatmap as heatmap, Isocontour as isocontour, KDE2D as kde2d, Projection as projection };\n","export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n random,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n y = target.y + target.vy - source.y - source.vy || jiggle(random);\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import { Transform } from 'vega-dataflow';\nimport { inherits, array, isFunction, accessorFields, hasOwnProperty, error } from 'vega-util';\nimport { forceSimulation, forceCenter, forceCollide, forceManyBody, forceLink, forceX, forceY } from 'd3-force';\n\nconst ForceMap = {\n center: forceCenter,\n collide: forceCollide,\n nbody: forceManyBody,\n link: forceLink,\n x: forceX,\n y: forceY\n};\nconst Forces = 'forces',\n ForceParams = ['alpha', 'alphaMin', 'alphaTarget', 'velocityDecay', 'forces'],\n ForceConfig = ['static', 'iterations'],\n ForceOutput = ['x', 'y', 'vx', 'vy'];\n/**\n * Force simulation layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.forces - The forces to apply.\n */\n\nfunction Force(params) {\n Transform.call(this, null, params);\n}\nForce.Definition = {\n 'type': 'Force',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'static',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'restart',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 300\n }, {\n 'name': 'alpha',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'alphaMin',\n 'type': 'number',\n 'default': 0.001\n }, {\n 'name': 'alphaTarget',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'velocityDecay',\n 'type': 'number',\n 'default': 0.4\n }, {\n 'name': 'forces',\n 'type': 'param',\n 'array': true,\n 'params': [{\n 'key': {\n 'force': 'center'\n },\n 'params': [{\n 'name': 'x',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'y',\n 'type': 'number',\n 'default': 0\n }]\n }, {\n 'key': {\n 'force': 'collide'\n },\n 'params': [{\n 'name': 'radius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.7\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 1\n }]\n }, {\n 'key': {\n 'force': 'nbody'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': -30\n }, {\n 'name': 'theta',\n 'type': 'number',\n 'default': 0.9\n }, {\n 'name': 'distanceMin',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'distanceMax',\n 'type': 'number'\n }]\n }, {\n 'key': {\n 'force': 'link'\n },\n 'params': [{\n 'name': 'links',\n 'type': 'data'\n }, {\n 'name': 'id',\n 'type': 'field'\n }, {\n 'name': 'distance',\n 'type': 'number',\n 'default': 30,\n 'expr': true\n }, {\n 'name': 'strength',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 1\n }]\n }, {\n 'key': {\n 'force': 'x'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.1\n }, {\n 'name': 'x',\n 'type': 'field'\n }]\n }, {\n 'key': {\n 'force': 'y'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.1\n }, {\n 'name': 'y',\n 'type': 'field'\n }]\n }]\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'modify': false,\n 'default': ForceOutput\n }]\n};\ninherits(Force, Transform, {\n transform(_, pulse) {\n var sim = this.value,\n change = pulse.changed(pulse.ADD_REM),\n params = _.modified(ForceParams),\n iters = _.iterations || 300; // configure simulation\n\n\n if (!sim) {\n this.value = sim = simulation(pulse.source, _);\n sim.on('tick', rerun(pulse.dataflow, this));\n\n if (!_.static) {\n change = true;\n sim.tick(); // ensure we run on init\n }\n\n pulse.modifies('index');\n } else {\n if (change) {\n pulse.modifies('index');\n sim.nodes(pulse.source);\n }\n\n if (params || pulse.changed(pulse.MOD)) {\n setup(sim, _, 0, pulse);\n }\n } // run simulation\n\n\n if (params || change || _.modified(ForceConfig) || pulse.changed() && _.restart) {\n sim.alpha(Math.max(sim.alpha(), _.alpha || 1)).alphaDecay(1 - Math.pow(sim.alphaMin(), 1 / iters));\n\n if (_.static) {\n for (sim.stop(); --iters >= 0;) sim.tick();\n } else {\n if (sim.stopped()) sim.restart();\n if (!change) return pulse.StopPropagation; // defer to sim ticks\n }\n }\n\n return this.finish(_, pulse);\n },\n\n finish(_, pulse) {\n const dataflow = pulse.dataflow; // inspect dependencies, touch link source data\n\n for (let args = this._argops, j = 0, m = args.length, arg; j < m; ++j) {\n arg = args[j];\n\n if (arg.name !== Forces || arg.op._argval.force !== 'link') {\n continue;\n }\n\n for (var ops = arg.op._argops, i = 0, n = ops.length, op; i < n; ++i) {\n if (ops[i].name === 'links' && (op = ops[i].op.source)) {\n dataflow.pulse(op, dataflow.changeset().reflow());\n break;\n }\n }\n } // reflow all nodes\n\n\n return pulse.reflow(_.modified()).modifies(ForceOutput);\n }\n\n});\n\nfunction rerun(df, op) {\n return () => df.touch(op).run();\n}\n\nfunction simulation(nodes, _) {\n const sim = forceSimulation(nodes),\n stop = sim.stop,\n restart = sim.restart;\n let stopped = false;\n\n sim.stopped = () => stopped;\n\n sim.restart = () => (stopped = false, restart());\n\n sim.stop = () => (stopped = true, stop());\n\n return setup(sim, _, true).on('end', () => stopped = true);\n}\n\nfunction setup(sim, _, init, pulse) {\n var f = array(_.forces),\n i,\n n,\n p,\n name;\n\n for (i = 0, n = ForceParams.length; i < n; ++i) {\n p = ForceParams[i];\n if (p !== Forces && _.modified(p)) sim[p](_[p]);\n }\n\n for (i = 0, n = f.length; i < n; ++i) {\n name = Forces + i;\n p = init || _.modified(Forces, i) ? getForce(f[i]) : pulse && modified(f[i], pulse) ? sim.force(name) : null;\n if (p) sim.force(name, p);\n }\n\n for (n = sim.numForces || 0; i < n; ++i) {\n sim.force(Forces + i, null); // remove\n }\n\n sim.numForces = f.length;\n return sim;\n}\n\nfunction modified(f, pulse) {\n var k, v;\n\n for (k in f) {\n if (isFunction(v = f[k]) && pulse.modified(accessorFields(v))) return 1;\n }\n\n return 0;\n}\n\nfunction getForce(_) {\n var f, p;\n\n if (!hasOwnProperty(ForceMap, _.force)) {\n error('Unrecognized force: ' + _.force);\n }\n\n f = ForceMap[_.force]();\n\n for (p in _) {\n if (isFunction(f[p])) setForceParam(f[p], _[p], _);\n }\n\n return f;\n}\n\nfunction setForceParam(f, v, _) {\n f(isFunction(v) ? d => v(d, _) : v);\n}\n\nexport { Force as force };\n","export default function(x, y) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n node,\n random,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(y) {\n var strength = constant(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n };\n\n return force;\n}\n","function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n","import {shuffle} from \"../array.js\";\n\nexport default function(circles) {\n var i = 0, n = (circles = shuffle(Array.from(circles))).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","export default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array) {\n var m = array.length,\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","import array from \"../array.js\";\nimport enclose from \"./enclose.js\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packEnclose(circles) {\n if (!(n = (circles = array(circles)).length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packEnclose(circles);\n return circles;\n}\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","import {packEnclose} from \"./siblings.js\";\nimport {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildren(padding, 0.5))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildren(constantZero, 1))\n .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildren(padding, k) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packEnclose(children);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n","import {required} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar preroot = {depth: -1},\n ambiguous = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nexport default function() {\n var id = defaultId,\n parentId = defaultParentId;\n\n function stratify(data) {\n var nodes = Array.from(data),\n n = nodes.length,\n d,\n i,\n root,\n parent,\n node,\n nodeId,\n nodeKey,\n nodeByKey = new Map;\n\n for (i = 0; i < n; ++i) {\n d = nodes[i], node = nodes[i] = new Node(d);\n if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = node.id = nodeId;\n nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n }\n if ((nodeId = parentId(d, i, data)) != null && (nodeId += \"\")) {\n node.parent = nodeId;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (nodeId = node.parent) {\n parent = nodeByKey.get(nodeId);\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n } else {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = required(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = required(x), stratify) : parentId;\n };\n\n return stratify;\n}\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\nimport {phi, squarifyRatio} from \"./squarify.js\";\n\nexport default (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n","import { Transform, isTuple, ingest, tupleid, stableCompare } from 'vega-dataflow';\nimport { inherits, error, array, one, truthy, hasOwnProperty } from 'vega-util';\nimport { hierarchy, pack, partition, stratify, tree, cluster, treemap, treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, treemapResquarify } from 'd3-hierarchy';\n\n// Build lookup table mapping tuple keys to tree node instances\nfunction lookup (tree, key, filter) {\n const map = {};\n tree.each(node => {\n const t = node.data;\n if (filter(t)) map[key(t)] = node;\n });\n tree.lookup = map;\n return tree;\n}\n\n/**\n * Nest tuples into a tree structure, grouped by key values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.keys - The key fields to nest by, in order.\n * @param {boolean} [params.generate=false] - A boolean flag indicating if\n * non-leaf nodes generated by this transform should be included in the\n * output. The default (false) includes only the input data (leaf nodes)\n * in the data stream.\n */\n\nfunction Nest(params) {\n Transform.call(this, null, params);\n}\nNest.Definition = {\n 'type': 'Nest',\n 'metadata': {\n 'treesource': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'keys',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'generate',\n 'type': 'boolean'\n }]\n};\n\nconst children = n => n.values;\n\ninherits(Nest, Transform, {\n transform(_, pulse) {\n if (!pulse.source) {\n error('Nest transform requires an upstream data source.');\n }\n\n var gen = _.generate,\n mod = _.modified(),\n out = pulse.clone(),\n tree = this.value;\n\n if (!tree || mod || pulse.changed()) {\n // collect nodes to remove\n if (tree) {\n tree.each(node => {\n if (node.children && isTuple(node.data)) {\n out.rem.push(node.data);\n }\n });\n } // generate new tree structure\n\n\n this.value = tree = hierarchy({\n values: array(_.keys).reduce((n, k) => {\n n.key(k);\n return n;\n }, nest()).entries(out.source)\n }, children); // collect nodes to add\n\n if (gen) {\n tree.each(node => {\n if (node.children) {\n node = ingest(node.data);\n out.add.push(node);\n out.source.push(node);\n }\n });\n } // build lookup table\n\n\n lookup(tree, tupleid, tupleid);\n }\n\n out.source.root = tree;\n return out;\n }\n\n});\n\nfunction nest() {\n const keys = [],\n nest = {\n entries: array => entries(apply(array, 0), 0),\n key: d => (keys.push(d), nest)\n };\n\n function apply(array, depth) {\n if (depth >= keys.length) {\n return array;\n }\n\n const n = array.length,\n key = keys[depth++],\n valuesByKey = {},\n result = {};\n let i = -1,\n keyValue,\n value,\n values;\n\n while (++i < n) {\n keyValue = key(value = array[i]) + '';\n\n if (values = valuesByKey[keyValue]) {\n values.push(value);\n } else {\n valuesByKey[keyValue] = [value];\n }\n }\n\n for (keyValue in valuesByKey) {\n result[keyValue] = apply(valuesByKey[keyValue], depth);\n }\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n const array = [];\n\n for (const key in map) {\n array.push({\n key,\n values: entries(map[key], depth)\n });\n }\n\n return array;\n }\n\n return nest;\n}\n\n/**\n * Abstract class for tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction HierarchyLayout(params) {\n Transform.call(this, null, params);\n}\n\nconst defaultSeparation = (a, b) => a.parent === b.parent ? 1 : 2;\n\ninherits(HierarchyLayout, Transform, {\n transform(_, pulse) {\n if (!pulse.source || !pulse.source.root) {\n error(this.constructor.name + ' transform requires a backing tree data source.');\n }\n\n const layout = this.layout(_.method),\n fields = this.fields,\n root = pulse.source.root,\n as = _.as || fields;\n if (_.field) root.sum(_.field);else root.count();\n if (_.sort) root.sort(stableCompare(_.sort, d => d.data));\n setParams(layout, this.params, _);\n\n if (layout.separation) {\n layout.separation(_.separation !== false ? defaultSeparation : one);\n }\n\n try {\n this.value = layout(root);\n } catch (err) {\n error(err);\n }\n\n root.each(node => setFields(node, fields, as));\n return pulse.reflow(_.modified()).modifies(as).modifies('leaf');\n }\n\n});\n\nfunction setParams(layout, params, _) {\n for (let p, i = 0, n = params.length; i < n; ++i) {\n p = params[i];\n if (p in _) layout[p](_[p]);\n }\n}\n\nfunction setFields(node, fields, as) {\n const t = node.data,\n n = fields.length - 1;\n\n for (let i = 0; i < n; ++i) {\n t[as[i]] = node[fields[i]];\n }\n\n t[as[n]] = node.children ? node.children.length : 0;\n}\n\nconst Output$3 = ['x', 'y', 'r', 'depth', 'children'];\n/**\n * Packed circle tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\n\nfunction Pack(params) {\n HierarchyLayout.call(this, params);\n}\nPack.Definition = {\n 'type': 'Pack',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'radius',\n 'type': 'field',\n 'default': null\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$3.length,\n 'default': Output$3\n }]\n};\ninherits(Pack, HierarchyLayout, {\n layout: pack,\n params: ['radius', 'size', 'padding'],\n fields: Output$3\n});\n\nconst Output$2 = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n/**\n * Partition tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\n\nfunction Partition(params) {\n HierarchyLayout.call(this, params);\n}\nPartition.Definition = {\n 'type': 'Partition',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'round',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$2.length,\n 'default': Output$2\n }]\n};\ninherits(Partition, HierarchyLayout, {\n layout: partition,\n params: ['size', 'round', 'padding'],\n fields: Output$2\n});\n\n/**\n * Stratify a collection of tuples into a tree structure based on\n * id and parent id fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.key - Unique key field for each tuple.\n * @param {function(object): *} params.parentKey - Field with key for parent tuple.\n */\n\nfunction Stratify(params) {\n Transform.call(this, null, params);\n}\nStratify.Definition = {\n 'type': 'Stratify',\n 'metadata': {\n 'treesource': true\n },\n 'params': [{\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'parentKey',\n 'type': 'field',\n 'required': true\n }]\n};\ninherits(Stratify, Transform, {\n transform(_, pulse) {\n if (!pulse.source) {\n error('Stratify transform requires an upstream data source.');\n }\n\n let tree = this.value;\n\n const mod = _.modified(),\n out = pulse.fork(pulse.ALL).materialize(pulse.SOURCE),\n run = !tree || mod || pulse.changed(pulse.ADD_REM) || pulse.modified(_.key.fields) || pulse.modified(_.parentKey.fields); // prevent upstream source pollution\n\n\n out.source = out.source.slice();\n\n if (run) {\n tree = out.source.length ? lookup(stratify().id(_.key).parentId(_.parentKey)(out.source), _.key, truthy) : lookup(stratify()([{}]), _.key, _.key);\n }\n\n out.source.root = this.value = tree;\n return out;\n }\n\n});\n\nconst Layouts = {\n tidy: tree,\n cluster: cluster\n};\nconst Output$1 = ['x', 'y', 'depth', 'children'];\n/**\n * Tree layout. Depending on the method parameter, performs either\n * Reingold-Tilford 'tidy' layout or dendrogram 'cluster' layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction Tree(params) {\n HierarchyLayout.call(this, params);\n}\nTree.Definition = {\n 'type': 'Tree',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'tidy',\n 'values': ['tidy', 'cluster']\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'nodeSize',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'separation',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$1.length,\n 'default': Output$1\n }]\n};\ninherits(Tree, HierarchyLayout, {\n /**\n * Tree layout generator. Supports both 'tidy' and 'cluster' layouts.\n */\n layout(method) {\n const m = method || 'tidy';\n if (hasOwnProperty(Layouts, m)) return Layouts[m]();else error('Unrecognized Tree layout method: ' + m);\n },\n\n params: ['size', 'nodeSize'],\n fields: Output$1\n});\n\n/**\n * Generate tuples representing links between tree nodes.\n * The resulting tuples will contain 'source' and 'target' fields,\n * which point to parent and child node tuples, respectively.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction TreeLinks(params) {\n Transform.call(this, [], params);\n}\nTreeLinks.Definition = {\n 'type': 'TreeLinks',\n 'metadata': {\n 'tree': true,\n 'generates': true,\n 'changes': true\n },\n 'params': []\n};\ninherits(TreeLinks, Transform, {\n transform(_, pulse) {\n const links = this.value,\n tree = pulse.source && pulse.source.root,\n out = pulse.fork(pulse.NO_SOURCE),\n lut = {};\n if (!tree) error('TreeLinks transform requires a tree data source.');\n\n if (pulse.changed(pulse.ADD_REM)) {\n // remove previous links\n out.rem = links; // build lookup table of valid tuples\n\n pulse.visit(pulse.SOURCE, t => lut[tupleid(t)] = 1); // generate links for all edges incident on valid tuples\n\n tree.each(node => {\n const t = node.data,\n p = node.parent && node.parent.data;\n\n if (p && lut[tupleid(t)] && lut[tupleid(p)]) {\n out.add.push(ingest({\n source: p,\n target: t\n }));\n }\n });\n this.value = out.add;\n } else if (pulse.changed(pulse.MOD)) {\n // build lookup table of modified tuples\n pulse.visit(pulse.MOD, t => lut[tupleid(t)] = 1); // gather links incident on modified tuples\n\n links.forEach(link => {\n if (lut[tupleid(link.source)] || lut[tupleid(link.target)]) {\n out.mod.push(link);\n }\n });\n }\n\n return out;\n }\n\n});\n\nconst Tiles = {\n binary: treemapBinary,\n dice: treemapDice,\n slice: treemapSlice,\n slicedice: treemapSliceDice,\n squarify: treemapSquarify,\n resquarify: treemapResquarify\n};\nconst Output = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n/**\n * Treemap layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\n\nfunction Treemap(params) {\n HierarchyLayout.call(this, params);\n}\nTreemap.Definition = {\n 'type': 'Treemap',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'squarify',\n 'values': ['squarify', 'resquarify', 'binary', 'dice', 'slice', 'slicedice']\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingInner',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingOuter',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingTop',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingRight',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingBottom',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingLeft',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'ratio',\n 'type': 'number',\n 'default': 1.618033988749895\n }, {\n 'name': 'round',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output.length,\n 'default': Output\n }]\n};\ninherits(Treemap, HierarchyLayout, {\n /**\n * Treemap layout generator. Adds 'method' and 'ratio' parameters\n * to configure the underlying tile method.\n */\n layout() {\n const x = treemap();\n\n x.ratio = _ => {\n const t = x.tile();\n if (t.ratio) x.tile(t.ratio(_));\n };\n\n x.method = _ => {\n if (hasOwnProperty(Tiles, _)) x.tile(Tiles[_]);else error('Unrecognized Treemap layout method: ' + _);\n };\n\n return x;\n },\n\n params: ['method', 'ratio', 'size', 'round', 'padding', 'paddingInner', 'paddingOuter', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'],\n fields: Output\n});\n\nexport { Nest as nest, Pack as pack, Partition as partition, Stratify as stratify, Tree as tree, TreeLinks as treelinks, Treemap as treemap };\n","import roundNode from \"./treemap/round.js\";\nimport treemapDice from \"./treemap/dice.js\";\n\nexport default function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n","import dice from \"./dice.js\";\nimport slice from \"./slice.js\";\n\nexport default function(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","import { canvas } from 'vega-canvas';\nimport { rederive, Transform } from 'vega-dataflow';\nimport { Marks, textMetrics } from 'vega-scenegraph';\nimport { inherits, isFunction, error, array } from 'vega-util';\n\nconst ALPHA_MASK = 0xff000000; // alpha value equivalent to opacity 0.0625\n\nconst INSIDE_OPACITY_IN_ALPHA = 0x10000000;\nconst INSIDE_OPACITY = 0.0625;\nfunction baseBitmaps($, data) {\n const bitmap = $.bitmap(); // when there is no base mark but data points are to be avoided\n\n (data || []).forEach(d => bitmap.set($(d.boundary[0]), $(d.boundary[3])));\n return [bitmap, undefined];\n}\nfunction markBitmaps($, avoidMarks, labelInside, isGroupArea) {\n // create canvas\n const width = $.width,\n height = $.height,\n border = labelInside || isGroupArea,\n context = canvas(width, height).getContext('2d'); // render all marks to be avoided into canvas\n\n avoidMarks.forEach(items => draw(context, items, border)); // get canvas buffer, create bitmaps\n\n const buffer = new Uint32Array(context.getImageData(0, 0, width, height).data.buffer),\n layer1 = $.bitmap(),\n layer2 = border && $.bitmap(); // populate bitmap layers\n\n let x, y, u, v, alpha;\n\n for (y = 0; y < height; ++y) {\n for (x = 0; x < width; ++x) {\n alpha = buffer[y * width + x] & ALPHA_MASK;\n\n if (alpha) {\n u = $(x);\n v = $(y);\n if (!isGroupArea) layer1.set(u, v); // update interior bitmap\n\n if (border && alpha ^ INSIDE_OPACITY_IN_ALPHA) layer2.set(u, v); // update border bitmap\n }\n }\n }\n\n return [layer1, layer2];\n}\n\nfunction draw(context, items, interior) {\n if (!items.length) return;\n const type = items[0].mark.marktype;\n\n if (type === 'group') {\n items.forEach(group => {\n group.items.forEach(mark => draw(context, mark.items, interior));\n });\n } else {\n Marks[type].draw(context, {\n items: interior ? items.map(prepare) : items\n });\n }\n}\n/**\n * Prepare item before drawing into canvas (setting stroke and opacity)\n * @param {object} source item to be prepared\n * @returns prepared item\n */\n\n\nfunction prepare(source) {\n const item = rederive(source, {});\n\n if (item.stroke) {\n item.strokeOpacity = 1;\n }\n\n if (item.fill) {\n item.fillOpacity = INSIDE_OPACITY;\n item.stroke = '#000';\n item.strokeOpacity = 1;\n item.strokeWidth = 2;\n }\n\n return item;\n}\n\nconst DIV = 5,\n // bit shift from x, y index to bit vector array index\nMOD = 31,\n // bit mask for index lookup within a bit vector\nSIZE = 32,\n // individual bit vector size\nRIGHT0 = new Uint32Array(SIZE + 1),\n // left-anchored bit vectors, full -> 0\nRIGHT1 = new Uint32Array(SIZE + 1); // right-anchored bit vectors, 0 -> full\n\nRIGHT1[0] = 0;\nRIGHT0[0] = ~RIGHT1[0];\n\nfor (let i = 1; i <= SIZE; ++i) {\n RIGHT1[i] = RIGHT1[i - 1] << 1 | 1;\n RIGHT0[i] = ~RIGHT1[i];\n}\n\nfunction Bitmap (w, h) {\n const array = new Uint32Array(~~((w * h + SIZE) / SIZE));\n\n function _set(index, mask) {\n array[index] |= mask;\n }\n\n function _clear(index, mask) {\n array[index] &= mask;\n }\n\n return {\n array: array,\n get: (x, y) => {\n const index = y * w + x;\n return array[index >>> DIV] & 1 << (index & MOD);\n },\n set: (x, y) => {\n const index = y * w + x;\n\n _set(index >>> DIV, 1 << (index & MOD));\n },\n clear: (x, y) => {\n const index = y * w + x;\n\n _clear(index >>> DIV, ~(1 << (index & MOD)));\n },\n getRange: (x, y, x2, y2) => {\n let r = y2,\n start,\n end,\n indexStart,\n indexEnd;\n\n for (; r >= y; --r) {\n start = r * w + x;\n end = r * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n\n if (indexStart === indexEnd) {\n if (array[indexStart] & RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]) {\n return true;\n }\n } else {\n if (array[indexStart] & RIGHT0[start & MOD]) return true;\n if (array[indexEnd] & RIGHT1[(end & MOD) + 1]) return true;\n\n for (let i = indexStart + 1; i < indexEnd; ++i) {\n if (array[i]) return true;\n }\n }\n }\n\n return false;\n },\n setRange: (x, y, x2, y2) => {\n let start, end, indexStart, indexEnd, i;\n\n for (; y <= y2; ++y) {\n start = y * w + x;\n end = y * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n\n if (indexStart === indexEnd) {\n _set(indexStart, RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]);\n } else {\n _set(indexStart, RIGHT0[start & MOD]);\n\n _set(indexEnd, RIGHT1[(end & MOD) + 1]);\n\n for (i = indexStart + 1; i < indexEnd; ++i) _set(i, 0xffffffff);\n }\n }\n },\n clearRange: (x, y, x2, y2) => {\n let start, end, indexStart, indexEnd, i;\n\n for (; y <= y2; ++y) {\n start = y * w + x;\n end = y * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n\n if (indexStart === indexEnd) {\n _clear(indexStart, RIGHT1[start & MOD] | RIGHT0[(end & MOD) + 1]);\n } else {\n _clear(indexStart, RIGHT1[start & MOD]);\n\n _clear(indexEnd, RIGHT0[(end & MOD) + 1]);\n\n for (i = indexStart + 1; i < indexEnd; ++i) _clear(i, 0);\n }\n }\n },\n outOfBounds: (x, y, x2, y2) => x < 0 || y < 0 || y2 >= h || x2 >= w\n };\n}\n\nfunction scaler (width, height, padding) {\n const ratio = Math.max(1, Math.sqrt(width * height / 1e6)),\n w = ~~((width + 2 * padding + ratio) / ratio),\n h = ~~((height + 2 * padding + ratio) / ratio),\n scale = _ => ~~((_ + padding) / ratio);\n\n scale.invert = _ => _ * ratio - padding;\n\n scale.bitmap = () => Bitmap(w, h);\n\n scale.ratio = ratio;\n scale.padding = padding;\n scale.width = width;\n scale.height = height;\n return scale;\n}\n\nfunction placeAreaLabelNaive ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height; // try to place a label within an input area mark\n\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text); // label height\n\n let maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n areaWidth; // for each area sample point\n\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2;\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n\n if (areaWidth >= maxAreaWidth) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n }\n }\n\n x = textWidth / 2;\n y = textHeight / 2;\n x1 = d.x - x;\n x2 = d.x + x;\n y1 = d.y - y;\n y2 = d.y + y;\n d.align = 'center';\n\n if (x1 < 0 && x2 <= width) {\n d.align = 'left';\n } else if (0 <= x1 && width < x2) {\n d.align = 'right';\n }\n\n d.baseline = 'middle';\n\n if (y1 < 0 && y2 <= height) {\n d.baseline = 'top';\n } else if (0 <= y1 && height < y2) {\n d.baseline = 'bottom';\n }\n\n return true;\n };\n}\n\nfunction outOfBounds(x, y, textWidth, textHeight, width, height) {\n let r = textWidth / 2;\n return x - r < 0 || x + r > width || y - (r = textHeight / 2) < 0 || y + r > height;\n}\nfunction collision($, x, y, textHeight, textWidth, h, bm0, bm1) {\n const w = textWidth * h / (textHeight * 2),\n x1 = $(x - w),\n x2 = $(x + w),\n y1 = $(y - (h = h / 2)),\n y2 = $(y + h);\n return bm0.outOfBounds(x1, y1, x2, y2) || bm0.getRange(x1, y1, x2, y2) || bm1 && bm1.getRange(x1, y1, x2, y2);\n}\n\nfunction placeAreaLabelReducedSearch ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n // where labels have been placed\n bm1 = bitmaps[1]; // area outlines\n\n function tryLabel(_x, _y, maxSize, textWidth, textHeight) {\n const x = $.invert(_x),\n y = $.invert(_y);\n let lo = maxSize,\n hi = height,\n mid;\n\n if (!outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, lo, bm0, bm1) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n // if the label fits at the current sample point,\n // perform binary search to find the largest font size that fits\n while (hi - lo >= 1) {\n mid = (lo + hi) / 2;\n\n if (collision($, x, y, textHeight, textWidth, mid, bm0, bm1)) {\n hi = mid;\n } else {\n lo = mid;\n }\n } // place label if current lower bound exceeds prior max font size\n\n\n if (lo > maxSize) {\n return [x, y, lo, true];\n }\n }\n } // try to place a label within an input area mark\n\n\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text); // label height\n\n let maxSize = avoidBaseMark ? textHeight : 0,\n labelPlaced = false,\n labelPlaced2 = false,\n maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n _x,\n _y,\n _x1,\n _xMid,\n _x2,\n _y1,\n _yMid,\n _y2,\n areaWidth,\n result,\n swapTmp; // for each area sample point\n\n\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n\n if (x1 > x2) {\n swapTmp = x1;\n x1 = x2;\n x2 = swapTmp;\n }\n\n if (y1 > y2) {\n swapTmp = y1;\n y1 = y2;\n y2 = swapTmp;\n }\n\n _x1 = $(x1);\n _x2 = $(x2);\n _xMid = ~~((_x1 + _x2) / 2);\n _y1 = $(y1);\n _y2 = $(y2);\n _yMid = ~~((_y1 + _y2) / 2); // search along the line from mid point between the 2 border to lower border\n\n for (_x = _xMid; _x >= _x1; --_x) {\n for (_y = _yMid; _y >= _y1; --_y) {\n result = tryLabel(_x, _y, maxSize, textWidth, textHeight);\n\n if (result) {\n [d.x, d.y, maxSize, labelPlaced] = result;\n }\n }\n } // search along the line from mid point between the 2 border to upper border\n\n\n for (_x = _xMid; _x <= _x2; ++_x) {\n for (_y = _yMid; _y <= _y2; ++_y) {\n result = tryLabel(_x, _y, maxSize, textWidth, textHeight);\n\n if (result) {\n [d.x, d.y, maxSize, labelPlaced] = result;\n }\n }\n } // place label at slice center if not placed through other means\n // and if we're not avoiding overlap with other areas\n\n\n if (!labelPlaced && !avoidBaseMark) {\n // one span is zero, hence we can add\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2; // place label if it fits and improves the max area width\n\n if (areaWidth >= maxAreaWidth && !outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n labelPlaced2 = true;\n }\n }\n } // record current label placement information, update label bitmap\n\n\n if (labelPlaced || labelPlaced2) {\n x = textWidth / 2;\n y = textHeight / 2;\n bm0.setRange($(d.x - x), $(d.y - y), $(d.x + x), $(d.y + y));\n d.align = 'center';\n d.baseline = 'middle';\n return true;\n } else {\n return false;\n }\n };\n}\n\nconst X_DIR = [-1, -1, 1, 1];\nconst Y_DIR = [-1, 1, -1, 1];\nfunction placeAreaLabelFloodFill ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n // where labels have been placed\n bm1 = bitmaps[1],\n // area outlines\n bm2 = $.bitmap(); // flood-fill visitations\n // try to place a label within an input area mark\n\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text),\n // label height\n stack = []; // flood fill stack\n\n let maxSize = avoidBaseMark ? textHeight : 0,\n labelPlaced = false,\n labelPlaced2 = false,\n maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n _x,\n _y,\n lo,\n hi,\n mid,\n areaWidth; // for each area sample point\n\n\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2; // add scaled center point to stack\n\n stack.push([$((x1 + x2) / 2), $((y1 + y2) / 2)]); // perform flood fill, visit points\n\n while (stack.length) {\n [_x, _y] = stack.pop(); // exit if point already marked\n\n if (bm0.get(_x, _y) || bm1.get(_x, _y) || bm2.get(_x, _y)) continue; // mark point in flood fill bitmap\n // add search points for all (in bound) directions\n\n bm2.set(_x, _y);\n\n for (let j = 0; j < 4; ++j) {\n x = _x + X_DIR[j];\n y = _y + Y_DIR[j];\n if (!bm2.outOfBounds(x, y, x, y)) stack.push([x, y]);\n } // unscale point back to x, y space\n\n\n x = $.invert(_x);\n y = $.invert(_y);\n lo = maxSize;\n hi = height; // TODO: make this bound smaller\n\n if (!outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, lo, bm0, bm1) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n // if the label fits at the current sample point,\n // perform binary search to find the largest font size that fits\n while (hi - lo >= 1) {\n mid = (lo + hi) / 2;\n\n if (collision($, x, y, textHeight, textWidth, mid, bm0, bm1)) {\n hi = mid;\n } else {\n lo = mid;\n }\n } // place label if current lower bound exceeds prior max font size\n\n\n if (lo > maxSize) {\n d.x = x;\n d.y = y;\n maxSize = lo;\n labelPlaced = true;\n }\n }\n } // place label at slice center if not placed through other means\n // and if we're not avoiding overlap with other areas\n\n\n if (!labelPlaced && !avoidBaseMark) {\n // one span is zero, hence we can add\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2; // place label if it fits and improves the max area width\n\n if (areaWidth >= maxAreaWidth && !outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n labelPlaced2 = true;\n }\n }\n } // record current label placement information, update label bitmap\n\n\n if (labelPlaced || labelPlaced2) {\n x = textWidth / 2;\n y = textHeight / 2;\n bm0.setRange($(d.x - x), $(d.y - y), $(d.x + x), $(d.y + y));\n d.align = 'center';\n d.baseline = 'middle';\n return true;\n } else {\n return false;\n }\n };\n}\n\nconst Aligns = ['right', 'center', 'left'],\n Baselines = ['bottom', 'middle', 'top'];\nfunction placeMarkLabel ($, bitmaps, anchors, offsets) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n bm1 = bitmaps[1],\n n = offsets.length;\n return function (d) {\n const boundary = d.boundary,\n textHeight = d.datum.fontSize; // can not be placed if the mark is not visible in the graph bound\n\n if (boundary[2] < 0 || boundary[5] < 0 || boundary[0] > width || boundary[3] > height) {\n return false;\n }\n\n let textWidth = 0,\n dx,\n dy,\n isInside,\n sizeFactor,\n insideFactor,\n x1,\n x2,\n y1,\n y2,\n xc,\n yc,\n _x1,\n _x2,\n _y1,\n _y2; // for each anchor and offset\n\n\n for (let i = 0; i < n; ++i) {\n dx = (anchors[i] & 0x3) - 1;\n dy = (anchors[i] >>> 0x2 & 0x3) - 1;\n isInside = dx === 0 && dy === 0 || offsets[i] < 0;\n sizeFactor = dx && dy ? Math.SQRT1_2 : 1;\n insideFactor = offsets[i] < 0 ? -1 : 1;\n x1 = boundary[1 + dx] + offsets[i] * dx * sizeFactor;\n yc = boundary[4 + dy] + insideFactor * textHeight * dy / 2 + offsets[i] * dy * sizeFactor;\n y1 = yc - textHeight / 2;\n y2 = yc + textHeight / 2;\n _x1 = $(x1);\n _y1 = $(y1);\n _y2 = $(y2);\n\n if (!textWidth) {\n // to avoid finding width of text label,\n if (!test(_x1, _x1, _y1, _y2, bm0, bm1, x1, x1, y1, y2, boundary, isInside)) {\n // skip this anchor/offset option if we fail to place a label with 1px width\n continue;\n } else {\n // Otherwise, find the label width\n textWidth = textMetrics.width(d.datum, d.datum.text);\n }\n }\n\n xc = x1 + insideFactor * textWidth * dx / 2;\n x1 = xc - textWidth / 2;\n x2 = xc + textWidth / 2;\n _x1 = $(x1);\n _x2 = $(x2);\n\n if (test(_x1, _x2, _y1, _y2, bm0, bm1, x1, x2, y1, y2, boundary, isInside)) {\n // place label if the position is placeable\n d.x = !dx ? xc : dx * insideFactor < 0 ? x2 : x1;\n d.y = !dy ? yc : dy * insideFactor < 0 ? y2 : y1;\n d.align = Aligns[dx * insideFactor + 1];\n d.baseline = Baselines[dy * insideFactor + 1];\n bm0.setRange(_x1, _y1, _x2, _y2);\n return true;\n }\n }\n\n return false;\n };\n} // Test if a label with the given dimensions can be added without overlap\n\nfunction test(_x1, _x2, _y1, _y2, bm0, bm1, x1, x2, y1, y2, boundary, isInside) {\n return !(bm0.outOfBounds(_x1, _y1, _x2, _y2) || (isInside && bm1 ? bm1.getRange(_x1, _y1, _x2, _y2) || !isInMarkBound(x1, y1, x2, y2, boundary) : bm0.getRange(_x1, _y1, _x2, _y2)));\n}\n\nfunction isInMarkBound(x1, y1, x2, y2, boundary) {\n return boundary[0] <= x1 && x2 <= boundary[2] && boundary[3] <= y1 && y2 <= boundary[5];\n}\n\nconst TOP = 0x0,\n MIDDLE = 0x4,\n BOTTOM = 0x8,\n LEFT = 0x0,\n CENTER = 0x1,\n RIGHT = 0x2; // Mapping from text anchor to number representation\n\nconst anchorCode = {\n 'top-left': TOP + LEFT,\n 'top': TOP + CENTER,\n 'top-right': TOP + RIGHT,\n 'left': MIDDLE + LEFT,\n 'middle': MIDDLE + CENTER,\n 'right': MIDDLE + RIGHT,\n 'bottom-left': BOTTOM + LEFT,\n 'bottom': BOTTOM + CENTER,\n 'bottom-right': BOTTOM + RIGHT\n};\nconst placeAreaLabel = {\n 'naive': placeAreaLabelNaive,\n 'reduced-search': placeAreaLabelReducedSearch,\n 'floodfill': placeAreaLabelFloodFill\n};\nfunction labelLayout (texts, size, compare, offset, anchor, avoidMarks, avoidBaseMark, lineAnchor, markIndex, padding, method) {\n // early exit for empty data\n if (!texts.length) return texts;\n const positions = Math.max(offset.length, anchor.length),\n offsets = getOffsets(offset, positions),\n anchors = getAnchors(anchor, positions),\n marktype = markType(texts[0].datum),\n grouptype = marktype === 'group' && texts[0].datum.items[markIndex].marktype,\n isGroupArea = grouptype === 'area',\n boundary = markBoundary(marktype, grouptype, lineAnchor, markIndex),\n $ = scaler(size[0], size[1], padding),\n isNaiveGroupArea = isGroupArea && method === 'naive'; // prepare text mark data for placing\n\n const data = texts.map(d => ({\n datum: d,\n opacity: 0,\n x: undefined,\n y: undefined,\n align: undefined,\n baseline: undefined,\n boundary: boundary(d)\n }));\n let bitmaps;\n\n if (!isNaiveGroupArea) {\n // sort labels in priority order, if comparator is provided\n if (compare) {\n data.sort((a, b) => compare(a.datum, b.datum));\n } // flag indicating if label can be placed inside its base mark\n\n\n let labelInside = false;\n\n for (let i = 0; i < anchors.length && !labelInside; ++i) {\n // label inside if anchor is at center\n // label inside if offset to be inside the mark bound\n labelInside = anchors[i] === 0x5 || offsets[i] < 0;\n } // extract data information from base mark when base mark is to be avoided\n // base mark is implicitly avoided if it is a group area\n\n\n if (marktype && (avoidBaseMark || isGroupArea)) {\n avoidMarks = [texts.map(d => d.datum)].concat(avoidMarks);\n } // generate bitmaps for layout calculation\n\n\n bitmaps = avoidMarks.length ? markBitmaps($, avoidMarks, labelInside, isGroupArea) : baseBitmaps($, avoidBaseMark && data);\n } // generate label placement function\n\n\n const place = isGroupArea ? placeAreaLabel[method]($, bitmaps, avoidBaseMark, markIndex) : placeMarkLabel($, bitmaps, anchors, offsets); // place all labels\n\n data.forEach(d => d.opacity = +place(d));\n return data;\n}\n\nfunction getOffsets(_, count) {\n const offsets = new Float64Array(count),\n n = _.length;\n\n for (let i = 0; i < n; ++i) offsets[i] = _[i] || 0;\n\n for (let i = n; i < count; ++i) offsets[i] = offsets[n - 1];\n\n return offsets;\n}\n\nfunction getAnchors(_, count) {\n const anchors = new Int8Array(count),\n n = _.length;\n\n for (let i = 0; i < n; ++i) anchors[i] |= anchorCode[_[i]];\n\n for (let i = n; i < count; ++i) anchors[i] = anchors[n - 1];\n\n return anchors;\n}\n\nfunction markType(item) {\n return item && item.mark && item.mark.marktype;\n}\n/**\n * Factory function for function for getting base mark boundary, depending\n * on mark and group type. When mark type is undefined, line or area: boundary\n * is the coordinate of each data point. When base mark is grouped line,\n * boundary is either at the beginning or end of the line depending on the\n * value of lineAnchor. Otherwise, use bounds of base mark.\n */\n\n\nfunction markBoundary(marktype, grouptype, lineAnchor, markIndex) {\n const xy = d => [d.x, d.x, d.x, d.y, d.y, d.y];\n\n if (!marktype) {\n return xy; // no reactive geometry\n } else if (marktype === 'line' || marktype === 'area') {\n return d => xy(d.datum);\n } else if (grouptype === 'line') {\n return d => {\n const items = d.datum.items[markIndex].items;\n return xy(items.length ? items[lineAnchor === 'start' ? 0 : items.length - 1] : {\n x: NaN,\n y: NaN\n });\n };\n } else {\n return d => {\n const b = d.datum.bounds;\n return [b.x1, (b.x1 + b.x2) / 2, b.x2, b.y1, (b.y1 + b.y2) / 2, b.y2];\n };\n }\n}\n\nconst Output = ['x', 'y', 'opacity', 'align', 'baseline'];\nconst Anchors = ['top-left', 'left', 'bottom-left', 'top', 'bottom', 'top-right', 'right', 'bottom-right'];\n/**\n * Compute text label layout to annotate marks.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The size of the layout, provided as a [width, height] array.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting label data in priority order.\n * @param {Array} [params.anchor] - Label anchor points relative to the base mark bounding box.\n * The available options are 'top-left', 'left', 'bottom-left', 'top',\n * 'bottom', 'top-right', 'right', 'bottom-right', 'middle'.\n * @param {Array} [params.offset] - Label offsets (in pixels) from the base mark bounding box.\n * This parameter is parallel to the list of anchor points.\n * @param {number} [params.padding=0] - The amount (in pixels) that a label may exceed the layout size.\n * @param {string} [params.lineAnchor='end'] - For group line mark labels only, indicates the anchor\n * position for labels. One of 'start' or 'end'.\n * @param {string} [params.markIndex=0] - For group mark labels only, an index indicating\n * which mark within the group should be labeled.\n * @param {Array} [params.avoidMarks] - A list of additional mark names for which the label\n * layout should avoid overlap.\n * @param {boolean} [params.avoidBaseMark=true] - Boolean flag indicating if labels should avoid\n * overlap with the underlying base mark being labeled.\n * @param {string} [params.method='naive'] - For area make labels only, a method for\n * place labels. One of 'naive', 'reduced-search', or 'floodfill'.\n * @param {Array} [params.as] - The output fields written by the transform.\n * The default is ['x', 'y', 'opacity', 'align', 'baseline'].\n */\n\nfunction Label(params) {\n Transform.call(this, null, params);\n}\nLabel.Definition = {\n type: 'Label',\n metadata: {\n modifies: true\n },\n params: [{\n name: 'size',\n type: 'number',\n array: true,\n length: 2,\n required: true\n }, {\n name: 'sort',\n type: 'compare'\n }, {\n name: 'anchor',\n type: 'string',\n array: true,\n default: Anchors\n }, {\n name: 'offset',\n type: 'number',\n array: true,\n default: [1]\n }, {\n name: 'padding',\n type: 'number',\n default: 0\n }, {\n name: 'lineAnchor',\n type: 'string',\n values: ['start', 'end'],\n default: 'end'\n }, {\n name: 'markIndex',\n type: 'number',\n default: 0\n }, {\n name: 'avoidBaseMark',\n type: 'boolean',\n default: true\n }, {\n name: 'avoidMarks',\n type: 'data',\n array: true\n }, {\n name: 'method',\n type: 'string',\n default: 'naive'\n }, {\n name: 'as',\n type: 'string',\n array: true,\n length: Output.length,\n default: Output\n }]\n};\ninherits(Label, Transform, {\n transform(_, pulse) {\n function modp(param) {\n const p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n\n const mod = _.modified();\n\n if (!(mod || pulse.changed(pulse.ADD_REM) || modp('sort'))) return;\n\n if (!_.size || _.size.length !== 2) {\n error('Size parameter should be specified as a [width, height] array.');\n }\n\n const as = _.as || Output; // run label layout\n\n labelLayout(pulse.materialize(pulse.SOURCE).source || [], _.size, _.sort, array(_.offset == null ? 1 : _.offset), array(_.anchor || Anchors), _.avoidMarks || [], _.avoidBaseMark !== false, _.lineAnchor || 'end', _.markIndex || 0, _.padding || 0, _.method || 'naive').forEach(l => {\n // write layout results to data stream\n const t = l.datum;\n t[as[0]] = l.x;\n t[as[1]] = l.y;\n t[as[2]] = l.opacity;\n t[as[3]] = l.align;\n t[as[4]] = l.baseline;\n });\n return pulse.reflow(mod).modifies(as);\n }\n\n});\n\nexport { Label as label };\n","import { regressionLoess, sampleCurve, regressionLinear, regressionLog, regressionExp, regressionPow, regressionQuad, regressionPoly } from 'vega-statistics';\nimport { Transform, ingest } from 'vega-dataflow';\nimport { inherits, accessorName, hasOwnProperty, error, extent } from 'vega-util';\n\nfunction partition (data, groupby) {\n var groups = [],\n get = function (f) {\n return f(t);\n },\n map,\n i,\n n,\n t,\n k,\n g; // partition data points into stack groups\n\n\n if (groupby == null) {\n groups.push(data);\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n\n g.push(t);\n }\n }\n\n return groups;\n}\n\n/**\n * Compute locally-weighted regression fits for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.x - An accessor for the predictor data field.\n * @param {function(object): *} params.y - An accessor for the predicted data field.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {number} [params.bandwidth=0.3] - The loess bandwidth.\n */\n\nfunction Loess(params) {\n Transform.call(this, null, params);\n}\nLoess.Definition = {\n 'type': 'Loess',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0.3\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Loess, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n m = names.length,\n as = _.as || [accessorName(_.x), accessorName(_.y)],\n values = [];\n groups.forEach(g => {\n regressionLoess(g, _.x, _.y, _.bandwidth || 0.3).forEach(p => {\n const t = {};\n\n for (let i = 0; i < m; ++i) {\n t[names[i]] = g.dims[i];\n }\n\n t[as[0]] = p[0];\n t[as[1]] = p[1];\n values.push(ingest(t));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n\n return out;\n }\n\n});\n\nconst Methods = {\n linear: regressionLinear,\n log: regressionLog,\n exp: regressionExp,\n pow: regressionPow,\n quad: regressionQuad,\n poly: regressionPoly\n};\n\nconst degreesOfFreedom = (method, order) => method === 'poly' ? order : method === 'quad' ? 2 : 1;\n/**\n * Compute regression fits for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.x - An accessor for the predictor data field.\n * @param {function(object): *} params.y - An accessor for the predicted data field.\n * @param {string} [params.method='linear'] - The regression method to apply.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {Array} [params.extent] - The domain extent over which to plot the regression line.\n * @param {number} [params.order=3] - The polynomial order. Only applies to the 'poly' method.\n */\n\n\nfunction Regression(params) {\n Transform.call(this, null, params);\n}\nRegression.Definition = {\n 'type': 'Regression',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'method',\n 'type': 'string',\n 'default': 'linear',\n 'values': Object.keys(Methods)\n }, {\n 'name': 'order',\n 'type': 'number',\n 'default': 3\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'params',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Regression, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n method = _.method || 'linear',\n order = _.order || 3,\n dof = degreesOfFreedom(method, order),\n as = _.as || [accessorName(_.x), accessorName(_.y)],\n fit = Methods[method],\n values = [];\n let domain = _.extent;\n\n if (!hasOwnProperty(Methods, method)) {\n error('Invalid regression method: ' + method);\n }\n\n if (domain != null) {\n if (method === 'log' && domain[0] <= 0) {\n pulse.dataflow.warn('Ignoring extent with values <= 0 for log regression.');\n domain = null;\n }\n }\n\n groups.forEach(g => {\n const n = g.length;\n\n if (n <= dof) {\n pulse.dataflow.warn('Skipping regression with more parameters than data points.');\n return;\n }\n\n const model = fit(g, _.x, _.y, order);\n\n if (_.params) {\n // if parameter vectors requested return those\n values.push(ingest({\n keys: g.dims,\n coef: model.coef,\n rSquared: model.rSquared\n }));\n return;\n }\n\n const dom = domain || extent(g, _.x),\n add = p => {\n const t = {};\n\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n\n t[as[0]] = p[0];\n t[as[1]] = p[1];\n values.push(ingest(t));\n };\n\n if (method === 'linear') {\n // for linear regression we only need the end points\n dom.forEach(x => add([x, model.predict(x)]));\n } else {\n // otherwise return trend line sample points\n sampleCurve(model.predict, dom, 25, 200).forEach(add);\n }\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n\n return out;\n }\n\n});\n\nexport { Loess as loess, Regression as regression };\n","\nconst EPSILON = Math.pow(2, -52);\nconst EDGE_STACK = new Uint32Array(512);\n\nexport default class Delaunator {\n\n static from(points, getX = defaultGetX, getY = defaultGetY) {\n const n = points.length;\n const coords = new Float64Array(n * 2);\n\n for (let i = 0; i < n; i++) {\n const p = points[i];\n coords[2 * i] = getX(p);\n coords[2 * i + 1] = getY(p);\n }\n\n return new Delaunator(coords);\n }\n\n constructor(coords) {\n const n = coords.length >> 1;\n if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.');\n\n this.coords = coords;\n\n // arrays that will store the triangulation graph\n const maxTriangles = Math.max(2 * n - 5, 0);\n this._triangles = new Uint32Array(maxTriangles * 3);\n this._halfedges = new Int32Array(maxTriangles * 3);\n\n // temporary arrays for tracking the edges of the advancing convex hull\n this._hashSize = Math.ceil(Math.sqrt(n));\n this._hullPrev = new Uint32Array(n); // edge to prev edge\n this._hullNext = new Uint32Array(n); // edge to next edge\n this._hullTri = new Uint32Array(n); // edge to adjacent triangle\n this._hullHash = new Int32Array(this._hashSize).fill(-1); // angular edge hash\n\n // temporary arrays for sorting points\n this._ids = new Uint32Array(n);\n this._dists = new Float64Array(n);\n\n this.update();\n }\n\n update() {\n const {coords, _hullPrev: hullPrev, _hullNext: hullNext, _hullTri: hullTri, _hullHash: hullHash} = this;\n const n = coords.length >> 1;\n\n // populate an array of point indices; calculate input data bbox\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n for (let i = 0; i < n; i++) {\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n this._ids[i] = i;\n }\n const cx = (minX + maxX) / 2;\n const cy = (minY + maxY) / 2;\n\n let minDist = Infinity;\n let i0, i1, i2;\n\n // pick a seed point close to the center\n for (let i = 0; i < n; i++) {\n const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]);\n if (d < minDist) {\n i0 = i;\n minDist = d;\n }\n }\n const i0x = coords[2 * i0];\n const i0y = coords[2 * i0 + 1];\n\n minDist = Infinity;\n\n // find the point closest to the seed\n for (let i = 0; i < n; i++) {\n if (i === i0) continue;\n const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]);\n if (d < minDist && d > 0) {\n i1 = i;\n minDist = d;\n }\n }\n let i1x = coords[2 * i1];\n let i1y = coords[2 * i1 + 1];\n\n let minRadius = Infinity;\n\n // find the third point which forms the smallest circumcircle with the first two\n for (let i = 0; i < n; i++) {\n if (i === i0 || i === i1) continue;\n const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]);\n if (r < minRadius) {\n i2 = i;\n minRadius = r;\n }\n }\n let i2x = coords[2 * i2];\n let i2y = coords[2 * i2 + 1];\n\n if (minRadius === Infinity) {\n // order collinear points by dx (or dy if all x are identical)\n // and return the list as a hull\n for (let i = 0; i < n; i++) {\n this._dists[i] = (coords[2 * i] - coords[0]) || (coords[2 * i + 1] - coords[1]);\n }\n quicksort(this._ids, this._dists, 0, n - 1);\n const hull = new Uint32Array(n);\n let j = 0;\n for (let i = 0, d0 = -Infinity; i < n; i++) {\n const id = this._ids[i];\n if (this._dists[id] > d0) {\n hull[j++] = id;\n d0 = this._dists[id];\n }\n }\n this.hull = hull.subarray(0, j);\n this.triangles = new Uint32Array(0);\n this.halfedges = new Uint32Array(0);\n return;\n }\n\n // swap the order of the seed points for counter-clockwise orientation\n if (orient(i0x, i0y, i1x, i1y, i2x, i2y)) {\n const i = i1;\n const x = i1x;\n const y = i1y;\n i1 = i2;\n i1x = i2x;\n i1y = i2y;\n i2 = i;\n i2x = x;\n i2y = y;\n }\n\n const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y);\n this._cx = center.x;\n this._cy = center.y;\n\n for (let i = 0; i < n; i++) {\n this._dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y);\n }\n\n // sort the points by distance from the seed triangle circumcenter\n quicksort(this._ids, this._dists, 0, n - 1);\n\n // set up the seed triangle as the starting hull\n this._hullStart = i0;\n let hullSize = 3;\n\n hullNext[i0] = hullPrev[i2] = i1;\n hullNext[i1] = hullPrev[i0] = i2;\n hullNext[i2] = hullPrev[i1] = i0;\n\n hullTri[i0] = 0;\n hullTri[i1] = 1;\n hullTri[i2] = 2;\n\n hullHash.fill(-1);\n hullHash[this._hashKey(i0x, i0y)] = i0;\n hullHash[this._hashKey(i1x, i1y)] = i1;\n hullHash[this._hashKey(i2x, i2y)] = i2;\n\n this.trianglesLen = 0;\n this._addTriangle(i0, i1, i2, -1, -1, -1);\n\n for (let k = 0, xp, yp; k < this._ids.length; k++) {\n const i = this._ids[k];\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n\n // skip near-duplicate points\n if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue;\n xp = x;\n yp = y;\n\n // skip seed triangle points\n if (i === i0 || i === i1 || i === i2) continue;\n\n // find a visible edge on the convex hull using edge hash\n let start = 0;\n for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) {\n start = hullHash[(key + j) % this._hashSize];\n if (start !== -1 && start !== hullNext[start]) break;\n }\n\n start = hullPrev[start];\n let e = start, q;\n while (q = hullNext[e], !orient(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1])) {\n e = q;\n if (e === start) {\n e = -1;\n break;\n }\n }\n if (e === -1) continue; // likely a near-duplicate point; skip it\n\n // add the first triangle from the point\n let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]);\n\n // recursively flip triangles from the point until they satisfy the Delaunay condition\n hullTri[i] = this._legalize(t + 2);\n hullTri[e] = t; // keep track of boundary triangles on the hull\n hullSize++;\n\n // walk forward through the hull, adding more triangles and flipping recursively\n let n = hullNext[e];\n while (q = hullNext[n], orient(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1])) {\n t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]);\n hullTri[i] = this._legalize(t + 2);\n hullNext[n] = n; // mark as removed\n hullSize--;\n n = q;\n }\n\n // walk backward from the other side, adding more triangles and flipping\n if (e === start) {\n while (q = hullPrev[e], orient(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1])) {\n t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]);\n this._legalize(t + 2);\n hullTri[q] = t;\n hullNext[e] = e; // mark as removed\n hullSize--;\n e = q;\n }\n }\n\n // update the hull indices\n this._hullStart = hullPrev[i] = e;\n hullNext[e] = hullPrev[n] = i;\n hullNext[i] = n;\n\n // save the two new edges in the hash table\n hullHash[this._hashKey(x, y)] = i;\n hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e;\n }\n\n this.hull = new Uint32Array(hullSize);\n for (let i = 0, e = this._hullStart; i < hullSize; i++) {\n this.hull[i] = e;\n e = hullNext[e];\n }\n\n // trim typed triangle mesh arrays\n this.triangles = this._triangles.subarray(0, this.trianglesLen);\n this.halfedges = this._halfedges.subarray(0, this.trianglesLen);\n }\n\n _hashKey(x, y) {\n return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize;\n }\n\n _legalize(a) {\n const {_triangles: triangles, _halfedges: halfedges, coords} = this;\n\n let i = 0;\n let ar = 0;\n\n // recursion eliminated with a fixed-size stack\n while (true) {\n const b = halfedges[a];\n\n /* if the pair of triangles doesn't satisfy the Delaunay condition\n * (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n * then do the same check/flip recursively for the new pair of triangles\n *\n * pl pl\n * /||\\ / \\\n * al/ || \\bl al/ \\a\n * / || \\ / \\\n * / a||b \\ flip /___ar___\\\n * p0\\ || /p1 => p0\\---bl---/p1\n * \\ || / \\ /\n * ar\\ || /br b\\ /br\n * \\||/ \\ /\n * pr pr\n */\n const a0 = a - a % 3;\n ar = a0 + (a + 2) % 3;\n\n if (b === -1) { // convex hull edge\n if (i === 0) break;\n a = EDGE_STACK[--i];\n continue;\n }\n\n const b0 = b - b % 3;\n const al = a0 + (a + 1) % 3;\n const bl = b0 + (b + 2) % 3;\n\n const p0 = triangles[ar];\n const pr = triangles[a];\n const pl = triangles[al];\n const p1 = triangles[bl];\n\n const illegal = inCircle(\n coords[2 * p0], coords[2 * p0 + 1],\n coords[2 * pr], coords[2 * pr + 1],\n coords[2 * pl], coords[2 * pl + 1],\n coords[2 * p1], coords[2 * p1 + 1]);\n\n if (illegal) {\n triangles[a] = p1;\n triangles[b] = p0;\n\n const hbl = halfedges[bl];\n\n // edge swapped on the other side of the hull (rare); fix the halfedge reference\n if (hbl === -1) {\n let e = this._hullStart;\n do {\n if (this._hullTri[e] === bl) {\n this._hullTri[e] = a;\n break;\n }\n e = this._hullPrev[e];\n } while (e !== this._hullStart);\n }\n this._link(a, hbl);\n this._link(b, halfedges[ar]);\n this._link(ar, bl);\n\n const br = b0 + (b + 1) % 3;\n\n // don't worry about hitting the cap: it can only happen on extremely degenerate input\n if (i < EDGE_STACK.length) {\n EDGE_STACK[i++] = br;\n }\n } else {\n if (i === 0) break;\n a = EDGE_STACK[--i];\n }\n }\n\n return ar;\n }\n\n _link(a, b) {\n this._halfedges[a] = b;\n if (b !== -1) this._halfedges[b] = a;\n }\n\n // add a new triangle given vertex indices and adjacent half-edge ids\n _addTriangle(i0, i1, i2, a, b, c) {\n const t = this.trianglesLen;\n\n this._triangles[t] = i0;\n this._triangles[t + 1] = i1;\n this._triangles[t + 2] = i2;\n\n this._link(t, a);\n this._link(t + 1, b);\n this._link(t + 2, c);\n\n this.trianglesLen += 3;\n\n return t;\n }\n}\n\n// monotonically increases with real angle, but doesn't need expensive trigonometry\nfunction pseudoAngle(dx, dy) {\n const p = dx / (Math.abs(dx) + Math.abs(dy));\n return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1]\n}\n\nfunction dist(ax, ay, bx, by) {\n const dx = ax - bx;\n const dy = ay - by;\n return dx * dx + dy * dy;\n}\n\n// return 2d orientation sign if we're confident in it through J. Shewchuk's error bound check\nfunction orientIfSure(px, py, rx, ry, qx, qy) {\n const l = (ry - py) * (qx - px);\n const r = (rx - px) * (qy - py);\n return Math.abs(l - r) >= 3.3306690738754716e-16 * Math.abs(l + r) ? l - r : 0;\n}\n\n// a more robust orientation test that's stable in a given triangle (to fix robustness issues)\nfunction orient(rx, ry, qx, qy, px, py) {\n const sign = orientIfSure(px, py, rx, ry, qx, qy) ||\n orientIfSure(rx, ry, qx, qy, px, py) ||\n orientIfSure(qx, qy, px, py, rx, ry);\n return sign < 0;\n}\n\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\n const dx = ax - px;\n const dy = ay - py;\n const ex = bx - px;\n const ey = by - py;\n const fx = cx - px;\n const fy = cy - py;\n\n const ap = dx * dx + dy * dy;\n const bp = ex * ex + ey * ey;\n const cp = fx * fx + fy * fy;\n\n return dx * (ey * cp - bp * fy) -\n dy * (ex * cp - bp * fx) +\n ap * (ex * fy - ey * fx) < 0;\n}\n\nfunction circumradius(ax, ay, bx, by, cx, cy) {\n const dx = bx - ax;\n const dy = by - ay;\n const ex = cx - ax;\n const ey = cy - ay;\n\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const d = 0.5 / (dx * ey - dy * ex);\n\n const x = (ey * bl - dy * cl) * d;\n const y = (dx * cl - ex * bl) * d;\n\n return x * x + y * y;\n}\n\nfunction circumcenter(ax, ay, bx, by, cx, cy) {\n const dx = bx - ax;\n const dy = by - ay;\n const ex = cx - ax;\n const ey = cy - ay;\n\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const d = 0.5 / (dx * ey - dy * ex);\n\n const x = ax + (ey * bl - dy * cl) * d;\n const y = ay + (dx * cl - ex * bl) * d;\n\n return {x, y};\n}\n\nfunction quicksort(ids, dists, left, right) {\n if (right - left <= 20) {\n for (let i = left + 1; i <= right; i++) {\n const temp = ids[i];\n const tempDist = dists[temp];\n let j = i - 1;\n while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--];\n ids[j + 1] = temp;\n }\n } else {\n const median = (left + right) >> 1;\n let i = left + 1;\n let j = right;\n swap(ids, median, i);\n if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right);\n if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right);\n if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i);\n\n const temp = ids[i];\n const tempDist = dists[temp];\n while (true) {\n do i++; while (dists[ids[i]] < tempDist);\n do j--; while (dists[ids[j]] > tempDist);\n if (j < i) break;\n swap(ids, i, j);\n }\n ids[left + 1] = ids[j];\n ids[j] = temp;\n\n if (right - i + 1 >= j - left) {\n quicksort(ids, dists, i, right);\n quicksort(ids, dists, left, j - 1);\n } else {\n quicksort(ids, dists, left, j - 1);\n quicksort(ids, dists, i, right);\n }\n }\n}\n\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction defaultGetX(p) {\n return p[0];\n}\nfunction defaultGetY(p) {\n return p[1];\n}\n","const epsilon = 1e-6;\n\nexport default class Path {\n constructor() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n }\n moveTo(x, y) {\n this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n }\n lineTo(x, y) {\n this._ += `L${this._x1 = +x},${this._y1 = +y}`;\n }\n arc(x, y, r) {\n x = +x, y = +y, r = +r;\n const x0 = x + r;\n const y0 = y;\n if (r < 0) throw new Error(\"negative radius\");\n if (this._x1 === null) this._ += `M${x0},${y0}`;\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) this._ += \"L\" + x0 + \",\" + y0;\n if (!r) return;\n this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`;\n }\n rect(x, y, w, h) {\n this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${+w}v${+h}h${-w}Z`;\n }\n value() {\n return this._ || null;\n }\n}\n","export default class Polygon {\n constructor() {\n this._ = [];\n }\n moveTo(x, y) {\n this._.push([x, y]);\n }\n closePath() {\n this._.push(this._[0].slice());\n }\n lineTo(x, y) {\n this._.push([x, y]);\n }\n value() {\n return this._.length ? this._ : null;\n }\n}\n","import Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\n\nexport default class Voronoi {\n constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) {\n if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error(\"invalid bounds\");\n this.delaunay = delaunay;\n this._circumcenters = new Float64Array(delaunay.points.length * 2);\n this.vectors = new Float64Array(delaunay.points.length * 2);\n this.xmax = xmax, this.xmin = xmin;\n this.ymax = ymax, this.ymin = ymin;\n this._init();\n }\n update() {\n this.delaunay.update();\n this._init();\n return this;\n }\n _init() {\n const {delaunay: {points, hull, triangles}, vectors} = this;\n\n // Compute circumcenters.\n const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2);\n for (let i = 0, j = 0, n = triangles.length, x, y; i < n; i += 3, j += 2) {\n const t1 = triangles[i] * 2;\n const t2 = triangles[i + 1] * 2;\n const t3 = triangles[i + 2] * 2;\n const x1 = points[t1];\n const y1 = points[t1 + 1];\n const x2 = points[t2];\n const y2 = points[t2 + 1];\n const x3 = points[t3];\n const y3 = points[t3 + 1];\n\n const dx = x2 - x1;\n const dy = y2 - y1;\n const ex = x3 - x1;\n const ey = y3 - y1;\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const ab = (dx * ey - dy * ex) * 2;\n\n if (!ab) {\n // degenerate case (collinear diagram)\n x = (x1 + x3) / 2 - 1e8 * ey;\n y = (y1 + y3) / 2 + 1e8 * ex;\n }\n else if (Math.abs(ab) < 1e-8) {\n // almost equal points (degenerate triangle)\n x = (x1 + x3) / 2;\n y = (y1 + y3) / 2;\n } else {\n const d = 1 / ab;\n x = x1 + (ey * bl - dy * cl) * d;\n y = y1 + (dx * cl - ex * bl) * d;\n }\n circumcenters[j] = x;\n circumcenters[j + 1] = y;\n }\n\n // Compute exterior cell rays.\n let h = hull[hull.length - 1];\n let p0, p1 = h * 4;\n let x0, x1 = points[2 * h];\n let y0, y1 = points[2 * h + 1];\n vectors.fill(0);\n for (let i = 0; i < hull.length; ++i) {\n h = hull[i];\n p0 = p1, x0 = x1, y0 = y1;\n p1 = h * 4, x1 = points[2 * h], y1 = points[2 * h + 1];\n vectors[p0 + 2] = vectors[p1] = y0 - y1;\n vectors[p0 + 3] = vectors[p1 + 1] = x1 - x0;\n }\n }\n render(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {delaunay: {halfedges, inedges, hull}, circumcenters, vectors} = this;\n if (hull.length <= 1) return null;\n for (let i = 0, n = halfedges.length; i < n; ++i) {\n const j = halfedges[i];\n if (j < i) continue;\n const ti = Math.floor(i / 3) * 2;\n const tj = Math.floor(j / 3) * 2;\n const xi = circumcenters[ti];\n const yi = circumcenters[ti + 1];\n const xj = circumcenters[tj];\n const yj = circumcenters[tj + 1];\n this._renderSegment(xi, yi, xj, yj, context);\n }\n let h0, h1 = hull[hull.length - 1];\n for (let i = 0; i < hull.length; ++i) {\n h0 = h1, h1 = hull[i];\n const t = Math.floor(inedges[h1] / 3) * 2;\n const x = circumcenters[t];\n const y = circumcenters[t + 1];\n const v = h0 * 4;\n const p = this._project(x, y, vectors[v + 2], vectors[v + 3]);\n if (p) this._renderSegment(x, y, p[0], p[1], context);\n }\n return buffer && buffer.value();\n }\n renderBounds(context) {\n const buffer = context == null ? context = new Path : undefined;\n context.rect(this.xmin, this.ymin, this.xmax - this.xmin, this.ymax - this.ymin);\n return buffer && buffer.value();\n }\n renderCell(i, context) {\n const buffer = context == null ? context = new Path : undefined;\n const points = this._clip(i);\n if (points === null || !points.length) return;\n context.moveTo(points[0], points[1]);\n let n = points.length;\n while (points[0] === points[n-2] && points[1] === points[n-1] && n > 1) n -= 2;\n for (let i = 2; i < n; i += 2) {\n if (points[i] !== points[i-2] || points[i+1] !== points[i-1])\n context.lineTo(points[i], points[i + 1]);\n }\n context.closePath();\n return buffer && buffer.value();\n }\n *cellPolygons() {\n const {delaunay: {points}} = this;\n for (let i = 0, n = points.length / 2; i < n; ++i) {\n const cell = this.cellPolygon(i);\n if (cell) cell.index = i, yield cell;\n }\n }\n cellPolygon(i) {\n const polygon = new Polygon;\n this.renderCell(i, polygon);\n return polygon.value();\n }\n _renderSegment(x0, y0, x1, y1, context) {\n let S;\n const c0 = this._regioncode(x0, y0);\n const c1 = this._regioncode(x1, y1);\n if (c0 === 0 && c1 === 0) {\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n } else if (S = this._clipSegment(x0, y0, x1, y1, c0, c1)) {\n context.moveTo(S[0], S[1]);\n context.lineTo(S[2], S[3]);\n }\n }\n contains(i, x, y) {\n if ((x = +x, x !== x) || (y = +y, y !== y)) return false;\n return this.delaunay._step(i, x, y) === i;\n }\n *neighbors(i) {\n const ci = this._clip(i);\n if (ci) for (const j of this.delaunay.neighbors(i)) {\n const cj = this._clip(j);\n // find the common edge\n if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) {\n for (let aj = 0, lj = cj.length; aj < lj; aj += 2) {\n if (ci[ai] == cj[aj]\n && ci[ai + 1] == cj[aj + 1]\n && ci[(ai + 2) % li] == cj[(aj + lj - 2) % lj]\n && ci[(ai + 3) % li] == cj[(aj + lj - 1) % lj]\n ) {\n yield j;\n break loop;\n }\n }\n }\n }\n }\n _cell(i) {\n const {circumcenters, delaunay: {inedges, halfedges, triangles}} = this;\n const e0 = inedges[i];\n if (e0 === -1) return null; // coincident point\n const points = [];\n let e = e0;\n do {\n const t = Math.floor(e / 3);\n points.push(circumcenters[t * 2], circumcenters[t * 2 + 1]);\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n e = halfedges[e];\n } while (e !== e0 && e !== -1);\n return points;\n }\n _clip(i) {\n // degenerate case (1 valid point: return the box)\n if (i === 0 && this.delaunay.hull.length === 1) {\n return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n }\n const points = this._cell(i);\n if (points === null) return null;\n const {vectors: V} = this;\n const v = i * 4;\n return V[v] || V[v + 1]\n ? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3])\n : this._clipFinite(i, points);\n }\n _clipFinite(i, points) {\n const n = points.length;\n let P = null;\n let x0, y0, x1 = points[n - 2], y1 = points[n - 1];\n let c0, c1 = this._regioncode(x1, y1);\n let e0, e1;\n for (let j = 0; j < n; j += 2) {\n x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1];\n c0 = c1, c1 = this._regioncode(x1, y1);\n if (c0 === 0 && c1 === 0) {\n e0 = e1, e1 = 0;\n if (P) P.push(x1, y1);\n else P = [x1, y1];\n } else {\n let S, sx0, sy0, sx1, sy1;\n if (c0 === 0) {\n if ((S = this._clipSegment(x0, y0, x1, y1, c0, c1)) === null) continue;\n [sx0, sy0, sx1, sy1] = S;\n } else {\n if ((S = this._clipSegment(x1, y1, x0, y0, c1, c0)) === null) continue;\n [sx1, sy1, sx0, sy0] = S;\n e0 = e1, e1 = this._edgecode(sx0, sy0);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n if (P) P.push(sx0, sy0);\n else P = [sx0, sy0];\n }\n e0 = e1, e1 = this._edgecode(sx1, sy1);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n if (P) P.push(sx1, sy1);\n else P = [sx1, sy1];\n }\n }\n if (P) {\n e0 = e1, e1 = this._edgecode(P[0], P[1]);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n }\n return P;\n }\n _clipSegment(x0, y0, x1, y1, c0, c1) {\n while (true) {\n if (c0 === 0 && c1 === 0) return [x0, y0, x1, y1];\n if (c0 & c1) return null;\n let x, y, c = c0 || c1;\n if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax;\n else if (c & 0b0100) x = x0 + (x1 - x0) * (this.ymin - y0) / (y1 - y0), y = this.ymin;\n else if (c & 0b0010) y = y0 + (y1 - y0) * (this.xmax - x0) / (x1 - x0), x = this.xmax;\n else y = y0 + (y1 - y0) * (this.xmin - x0) / (x1 - x0), x = this.xmin;\n if (c0) x0 = x, y0 = y, c0 = this._regioncode(x0, y0);\n else x1 = x, y1 = y, c1 = this._regioncode(x1, y1);\n }\n }\n _clipInfinite(i, points, vx0, vy0, vxn, vyn) {\n let P = Array.from(points), p;\n if (p = this._project(P[0], P[1], vx0, vy0)) P.unshift(p[0], p[1]);\n if (p = this._project(P[P.length - 2], P[P.length - 1], vxn, vyn)) P.push(p[0], p[1]);\n if (P = this._clipFinite(i, P)) {\n for (let j = 0, n = P.length, c0, c1 = this._edgecode(P[n - 2], P[n - 1]); j < n; j += 2) {\n c0 = c1, c1 = this._edgecode(P[j], P[j + 1]);\n if (c0 && c1) j = this._edge(i, c0, c1, P, j), n = P.length;\n }\n } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n P = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax];\n }\n return P;\n }\n _edge(i, e0, e1, P, j) {\n while (e0 !== e1) {\n let x, y;\n switch (e0) {\n case 0b0101: e0 = 0b0100; continue; // top-left\n case 0b0100: e0 = 0b0110, x = this.xmax, y = this.ymin; break; // top\n case 0b0110: e0 = 0b0010; continue; // top-right\n case 0b0010: e0 = 0b1010, x = this.xmax, y = this.ymax; break; // right\n case 0b1010: e0 = 0b1000; continue; // bottom-right\n case 0b1000: e0 = 0b1001, x = this.xmin, y = this.ymax; break; // bottom\n case 0b1001: e0 = 0b0001; continue; // bottom-left\n case 0b0001: e0 = 0b0101, x = this.xmin, y = this.ymin; break; // left\n }\n if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) {\n P.splice(j, 0, x, y), j += 2;\n }\n }\n if (P.length > 4) {\n for (let i = 0; i < P.length; i+= 2) {\n const j = (i + 2) % P.length, k = (i + 4) % P.length;\n if (P[i] === P[j] && P[j] === P[k]\n || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1])\n P.splice(j, 2), i -= 2;\n }\n }\n return j;\n }\n _project(x0, y0, vx, vy) {\n let t = Infinity, c, x, y;\n if (vy < 0) { // top\n if (y0 <= this.ymin) return null;\n if ((c = (this.ymin - y0) / vy) < t) y = this.ymin, x = x0 + (t = c) * vx;\n } else if (vy > 0) { // bottom\n if (y0 >= this.ymax) return null;\n if ((c = (this.ymax - y0) / vy) < t) y = this.ymax, x = x0 + (t = c) * vx;\n }\n if (vx > 0) { // right\n if (x0 >= this.xmax) return null;\n if ((c = (this.xmax - x0) / vx) < t) x = this.xmax, y = y0 + (t = c) * vy;\n } else if (vx < 0) { // left\n if (x0 <= this.xmin) return null;\n if ((c = (this.xmin - x0) / vx) < t) x = this.xmin, y = y0 + (t = c) * vy;\n }\n return [x, y];\n }\n _edgecode(x, y) {\n return (x === this.xmin ? 0b0001\n : x === this.xmax ? 0b0010 : 0b0000)\n | (y === this.ymin ? 0b0100\n : y === this.ymax ? 0b1000 : 0b0000);\n }\n _regioncode(x, y) {\n return (x < this.xmin ? 0b0001\n : x > this.xmax ? 0b0010 : 0b0000)\n | (y < this.ymin ? 0b0100\n : y > this.ymax ? 0b1000 : 0b0000);\n }\n}\n","import Delaunator from \"delaunator\";\nimport Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\nimport Voronoi from \"./voronoi.js\";\n\nconst tau = 2 * Math.PI, pow = Math.pow;\n\nfunction pointX(p) {\n return p[0];\n}\n\nfunction pointY(p) {\n return p[1];\n}\n\n// A triangulation is collinear if all its triangles have a non-null area\nfunction collinear(d) {\n const {triangles, coords} = d;\n for (let i = 0; i < triangles.length; i += 3) {\n const a = 2 * triangles[i],\n b = 2 * triangles[i + 1],\n c = 2 * triangles[i + 2],\n cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1])\n - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]);\n if (cross > 1e-10) return false;\n }\n return true;\n}\n\nfunction jitter(x, y, r) {\n return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r];\n}\n\nexport default class Delaunay {\n static from(points, fx = pointX, fy = pointY, that) {\n return new Delaunay(\"length\" in points\n ? flatArray(points, fx, fy, that)\n : Float64Array.from(flatIterable(points, fx, fy, that)));\n }\n constructor(points) {\n this._delaunator = new Delaunator(points);\n this.inedges = new Int32Array(points.length / 2);\n this._hullIndex = new Int32Array(points.length / 2);\n this.points = this._delaunator.coords;\n this._init();\n }\n update() {\n this._delaunator.update();\n this._init();\n return this;\n }\n _init() {\n const d = this._delaunator, points = this.points;\n\n // check for collinear\n if (d.hull && d.hull.length > 2 && collinear(d)) {\n this.collinear = Int32Array.from({length: points.length/2}, (_,i) => i)\n .sort((i, j) => points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1]); // for exact neighbors\n const e = this.collinear[0], f = this.collinear[this.collinear.length - 1],\n bounds = [ points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1] ],\n r = 1e-8 * Math.hypot(bounds[3] - bounds[1], bounds[2] - bounds[0]);\n for (let i = 0, n = points.length / 2; i < n; ++i) {\n const p = jitter(points[2 * i], points[2 * i + 1], r);\n points[2 * i] = p[0];\n points[2 * i + 1] = p[1];\n }\n this._delaunator = new Delaunator(points);\n } else {\n delete this.collinear;\n }\n\n const halfedges = this.halfedges = this._delaunator.halfedges;\n const hull = this.hull = this._delaunator.hull;\n const triangles = this.triangles = this._delaunator.triangles;\n const inedges = this.inedges.fill(-1);\n const hullIndex = this._hullIndex.fill(-1);\n\n // Compute an index from each point to an (arbitrary) incoming halfedge\n // Used to give the first neighbor of each point; for this reason,\n // on the hull we give priority to exterior halfedges\n for (let e = 0, n = halfedges.length; e < n; ++e) {\n const p = triangles[e % 3 === 2 ? e - 2 : e + 1];\n if (halfedges[e] === -1 || inedges[p] === -1) inedges[p] = e;\n }\n for (let i = 0, n = hull.length; i < n; ++i) {\n hullIndex[hull[i]] = i;\n }\n\n // degenerate case: 1 or 2 (distinct) points\n if (hull.length <= 2 && hull.length > 0) {\n this.triangles = new Int32Array(3).fill(-1);\n this.halfedges = new Int32Array(3).fill(-1);\n this.triangles[0] = hull[0];\n this.triangles[1] = hull[1];\n this.triangles[2] = hull[1];\n inedges[hull[0]] = 1;\n if (hull.length === 2) inedges[hull[1]] = 0;\n }\n }\n voronoi(bounds) {\n return new Voronoi(this, bounds);\n }\n *neighbors(i) {\n const {inedges, hull, _hullIndex, halfedges, triangles, collinear} = this;\n\n // degenerate case with several collinear points\n if (collinear) {\n const l = collinear.indexOf(i);\n if (l > 0) yield collinear[l - 1];\n if (l < collinear.length - 1) yield collinear[l + 1];\n return;\n }\n\n const e0 = inedges[i];\n if (e0 === -1) return; // coincident point\n let e = e0, p0 = -1;\n do {\n yield p0 = triangles[e];\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) return; // bad triangulation\n e = halfedges[e];\n if (e === -1) {\n const p = hull[(_hullIndex[i] + 1) % hull.length];\n if (p !== p0) yield p;\n return;\n }\n } while (e !== e0);\n }\n find(x, y, i = 0) {\n if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;\n const i0 = i;\n let c;\n while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) i = c;\n return c;\n }\n _step(i, x, y) {\n const {inedges, hull, _hullIndex, halfedges, triangles, points} = this;\n if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1);\n let c = i;\n let dc = pow(x - points[i * 2], 2) + pow(y - points[i * 2 + 1], 2);\n const e0 = inedges[i];\n let e = e0;\n do {\n let t = triangles[e];\n const dt = pow(x - points[t * 2], 2) + pow(y - points[t * 2 + 1], 2);\n if (dt < dc) dc = dt, c = t;\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n e = halfedges[e];\n if (e === -1) {\n e = hull[(_hullIndex[i] + 1) % hull.length];\n if (e !== t) {\n if (pow(x - points[e * 2], 2) + pow(y - points[e * 2 + 1], 2) < dc) return e;\n }\n break;\n }\n } while (e !== e0);\n return c;\n }\n render(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {points, halfedges, triangles} = this;\n for (let i = 0, n = halfedges.length; i < n; ++i) {\n const j = halfedges[i];\n if (j < i) continue;\n const ti = triangles[i] * 2;\n const tj = triangles[j] * 2;\n context.moveTo(points[ti], points[ti + 1]);\n context.lineTo(points[tj], points[tj + 1]);\n }\n this.renderHull(context);\n return buffer && buffer.value();\n }\n renderPoints(context, r = 2) {\n const buffer = context == null ? context = new Path : undefined;\n const {points} = this;\n for (let i = 0, n = points.length; i < n; i += 2) {\n const x = points[i], y = points[i + 1];\n context.moveTo(x + r, y);\n context.arc(x, y, r, 0, tau);\n }\n return buffer && buffer.value();\n }\n renderHull(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {hull, points} = this;\n const h = hull[0] * 2, n = hull.length;\n context.moveTo(points[h], points[h + 1]);\n for (let i = 1; i < n; ++i) {\n const h = 2 * hull[i];\n context.lineTo(points[h], points[h + 1]);\n }\n context.closePath();\n return buffer && buffer.value();\n }\n hullPolygon() {\n const polygon = new Polygon;\n this.renderHull(polygon);\n return polygon.value();\n }\n renderTriangle(i, context) {\n const buffer = context == null ? context = new Path : undefined;\n const {points, triangles} = this;\n const t0 = triangles[i *= 3] * 2;\n const t1 = triangles[i + 1] * 2;\n const t2 = triangles[i + 2] * 2;\n context.moveTo(points[t0], points[t0 + 1]);\n context.lineTo(points[t1], points[t1 + 1]);\n context.lineTo(points[t2], points[t2 + 1]);\n context.closePath();\n return buffer && buffer.value();\n }\n *trianglePolygons() {\n const {triangles} = this;\n for (let i = 0, n = triangles.length / 3; i < n; ++i) {\n yield this.trianglePolygon(i);\n }\n }\n trianglePolygon(i) {\n const polygon = new Polygon;\n this.renderTriangle(i, polygon);\n return polygon.value();\n }\n}\n\nfunction flatArray(points, fx, fy, that) {\n const n = points.length;\n const array = new Float64Array(n * 2);\n for (let i = 0; i < n; ++i) {\n const p = points[i];\n array[i * 2] = fx.call(that, p, i, points);\n array[i * 2 + 1] = fy.call(that, p, i, points);\n }\n return array;\n}\n\nfunction* flatIterable(points, fx, fy, that) {\n let i = 0;\n for (const p of points) {\n yield fx.call(that, p, i, points);\n yield fy.call(that, p, i, points);\n ++i;\n }\n}\n","import { Transform } from 'vega-dataflow';\nimport { inherits } from 'vega-util';\nimport { Delaunay } from 'd3-delaunay';\n\nfunction Voronoi(params) {\n Transform.call(this, null, params);\n}\nVoronoi.Definition = {\n 'type': 'Voronoi',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'extent',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'default': [[-1e5, -1e5], [1e5, 1e5]],\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\nconst defaultExtent = [-1e5, -1e5, 1e5, 1e5];\ninherits(Voronoi, Transform, {\n transform(_, pulse) {\n const as = _.as || 'path',\n data = pulse.source; // nothing to do if no data\n\n if (!data || !data.length) return pulse; // configure and construct voronoi diagram\n\n let s = _.size;\n s = s ? [0, 0, s[0], s[1]] : (s = _.extent) ? [s[0][0], s[0][1], s[1][0], s[1][1]] : defaultExtent;\n const voronoi = this.value = Delaunay.from(data, _.x, _.y).voronoi(s); // map polygons to paths\n\n for (let i = 0, n = data.length; i < n; ++i) {\n const polygon = voronoi.cellPolygon(i);\n data[i][as] = polygon ? toPathString(polygon) : null;\n }\n\n return pulse.reflow(_.modified()).modifies(as);\n }\n\n}); // suppress duplicated end point vertices\n\nfunction toPathString(p) {\n const x = p[0][0],\n y = p[0][1];\n let n = p.length - 1;\n\n for (; p[n][0] === x && p[n][1] === y; --n);\n\n return 'M' + p.slice(0, n + 1).join('L') + 'Z';\n}\n\nexport { Voronoi as voronoi };\n","import { canvas } from 'vega-canvas';\nimport { Transform } from 'vega-dataflow';\nimport { inherits, error, isFunction, constant, extent } from 'vega-util';\nimport { scale } from 'vega-scale';\nimport { random } from 'vega-statistics';\n\n/*\nCopyright (c) 2013, Jason Davies.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * The name Jason Davies may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\nOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\nADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/\n// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf\n\nvar cloudRadians = Math.PI / 180,\n cw = 1 << 11 >> 5,\n ch = 1 << 11;\nfunction cloud () {\n var size = [256, 256],\n text,\n font,\n fontSize,\n fontStyle,\n fontWeight,\n rotate,\n padding,\n spiral = archimedeanSpiral,\n words = [],\n random = Math.random,\n cloud = {};\n\n cloud.layout = function () {\n var contextAndRatio = getContext(canvas()),\n board = zeroArray((size[0] >> 5) * size[1]),\n bounds = null,\n n = words.length,\n i = -1,\n tags = [],\n data = words.map(d => ({\n text: text(d),\n font: font(d),\n style: fontStyle(d),\n weight: fontWeight(d),\n rotate: rotate(d),\n size: ~~(fontSize(d) + 1e-14),\n padding: padding(d),\n xoff: 0,\n yoff: 0,\n x1: 0,\n y1: 0,\n x0: 0,\n y0: 0,\n hasText: false,\n sprite: null,\n datum: d\n })).sort((a, b) => b.size - a.size);\n\n while (++i < n) {\n var d = data[i];\n d.x = size[0] * (random() + .5) >> 1;\n d.y = size[1] * (random() + .5) >> 1;\n cloudSprite(contextAndRatio, d, data, i);\n\n if (d.hasText && place(board, d, bounds)) {\n tags.push(d);\n if (bounds) cloudBounds(bounds, d);else bounds = [{\n x: d.x + d.x0,\n y: d.y + d.y0\n }, {\n x: d.x + d.x1,\n y: d.y + d.y1\n }]; // Temporary hack\n\n d.x -= size[0] >> 1;\n d.y -= size[1] >> 1;\n }\n }\n\n return tags;\n };\n\n function getContext(canvas) {\n canvas.width = canvas.height = 1;\n var ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);\n canvas.width = (cw << 5) / ratio;\n canvas.height = ch / ratio;\n var context = canvas.getContext('2d');\n context.fillStyle = context.strokeStyle = 'red';\n context.textAlign = 'center';\n return {\n context: context,\n ratio: ratio\n };\n }\n\n function place(board, tag, bounds) {\n var startX = tag.x,\n startY = tag.y,\n maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]),\n s = spiral(size),\n dt = random() < .5 ? 1 : -1,\n t = -dt,\n dxdy,\n dx,\n dy;\n\n while (dxdy = s(t += dt)) {\n dx = ~~dxdy[0];\n dy = ~~dxdy[1];\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;\n tag.x = startX + dx;\n tag.y = startY + dy;\n if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue; // TODO only check for collisions within current bounds.\n\n if (!bounds || !cloudCollide(tag, board, size[0])) {\n if (!bounds || collideRects(tag, bounds)) {\n var sprite = tag.sprite,\n w = tag.width >> 5,\n sw = size[0] >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n\n for (var j = 0; j < h; j++) {\n last = 0;\n\n for (var i = 0; i <= w; i++) {\n board[x + i] |= last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n\n x += sw;\n }\n\n tag.sprite = null;\n return true;\n }\n }\n }\n\n return false;\n }\n\n cloud.words = function (_) {\n if (arguments.length) {\n words = _;\n return cloud;\n } else {\n return words;\n }\n };\n\n cloud.size = function (_) {\n if (arguments.length) {\n size = [+_[0], +_[1]];\n return cloud;\n } else {\n return size;\n }\n };\n\n cloud.font = function (_) {\n if (arguments.length) {\n font = functor(_);\n return cloud;\n } else {\n return font;\n }\n };\n\n cloud.fontStyle = function (_) {\n if (arguments.length) {\n fontStyle = functor(_);\n return cloud;\n } else {\n return fontStyle;\n }\n };\n\n cloud.fontWeight = function (_) {\n if (arguments.length) {\n fontWeight = functor(_);\n return cloud;\n } else {\n return fontWeight;\n }\n };\n\n cloud.rotate = function (_) {\n if (arguments.length) {\n rotate = functor(_);\n return cloud;\n } else {\n return rotate;\n }\n };\n\n cloud.text = function (_) {\n if (arguments.length) {\n text = functor(_);\n return cloud;\n } else {\n return text;\n }\n };\n\n cloud.spiral = function (_) {\n if (arguments.length) {\n spiral = spirals[_] || _;\n return cloud;\n } else {\n return spiral;\n }\n };\n\n cloud.fontSize = function (_) {\n if (arguments.length) {\n fontSize = functor(_);\n return cloud;\n } else {\n return fontSize;\n }\n };\n\n cloud.padding = function (_) {\n if (arguments.length) {\n padding = functor(_);\n return cloud;\n } else {\n return padding;\n }\n };\n\n cloud.random = function (_) {\n if (arguments.length) {\n random = _;\n return cloud;\n } else {\n return random;\n }\n };\n\n return cloud;\n} // Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\n\nfunction cloudSprite(contextAndRatio, d, data, di) {\n if (d.sprite) return;\n var c = contextAndRatio.context,\n ratio = contextAndRatio.ratio;\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n var x = 0,\n y = 0,\n maxh = 0,\n n = data.length,\n w,\n w32,\n h,\n i,\n j;\n --di;\n\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.style + ' ' + d.weight + ' ' + ~~((d.size + 1) / ratio) + 'px ' + d.font;\n w = c.measureText(d.text + 'm').width * ratio;\n h = d.size << 1;\n\n if (d.rotate) {\n var sr = Math.sin(d.rotate * cloudRadians),\n cr = Math.cos(d.rotate * cloudRadians),\n wcr = w * cr,\n wsr = w * sr,\n hcr = h * cr,\n hsr = h * sr;\n w = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f >> 5 << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n } else {\n w = w + 0x1f >> 5 << 5;\n }\n\n if (h > maxh) maxh = h;\n\n if (x + w >= cw << 5) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n\n if (y + h >= ch) break;\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.rotate) c.rotate(d.rotate * cloudRadians);\n c.fillText(d.text, 0, 0);\n\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n\n var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,\n sprite = [];\n\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) continue;\n w = d.width;\n w32 = w >> 5;\n h = d.y1 - d.y0; // Zero the buffer\n\n for (i = 0; i < h * w32; i++) sprite[i] = 0;\n\n x = d.xoff;\n if (x == null) return;\n y = d.yoff;\n var seen = 0,\n seenRow = -1;\n\n for (j = 0; j < h; j++) {\n for (i = 0; i < w; i++) {\n var k = w32 * j + (i >> 5),\n m = pixels[(y + j) * (cw << 5) + (x + i) << 2] ? 1 << 31 - i % 32 : 0;\n sprite[k] |= m;\n seen |= m;\n }\n\n if (seen) seenRow = j;else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n} // Use mask-based collision detection.\n\n\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n var sprite = tag.sprite,\n w = tag.width >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n\n for (var j = 0; j < h; j++) {\n last = 0;\n\n for (var i = 0; i <= w; i++) {\n if ((last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i]) return true;\n }\n\n x += sw;\n }\n\n return false;\n}\n\nfunction cloudBounds(bounds, d) {\n var b0 = bounds[0],\n b1 = bounds[1];\n if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\n\nfunction collideRects(a, b) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\n\nfunction archimedeanSpiral(size) {\n var e = size[0] / size[1];\n return function (t) {\n return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\n };\n}\n\nfunction rectangularSpiral(size) {\n var dy = 4,\n dx = dy * size[0] / size[1],\n x = 0,\n y = 0;\n return function (t) {\n var sign = t < 0 ? -1 : 1; // See triangular numbers: T_n = n * (n + 1) / 2.\n\n switch (Math.sqrt(1 + 4 * sign * t) - sign & 3) {\n case 0:\n x += dx;\n break;\n\n case 1:\n y += dy;\n break;\n\n case 2:\n x -= dx;\n break;\n\n default:\n y -= dy;\n break;\n }\n\n return [x, y];\n };\n} // TODO reuse arrays?\n\n\nfunction zeroArray(n) {\n var a = [],\n i = -1;\n\n while (++i < n) a[i] = 0;\n\n return a;\n}\n\nfunction functor(d) {\n return typeof d === 'function' ? d : function () {\n return d;\n };\n}\n\nvar spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n\nconst Output = ['x', 'y', 'font', 'fontSize', 'fontStyle', 'fontWeight', 'angle'];\nconst Params = ['text', 'font', 'rotate', 'fontSize', 'fontStyle', 'fontWeight'];\nfunction Wordcloud(params) {\n Transform.call(this, cloud(), params);\n}\nWordcloud.Definition = {\n 'type': 'Wordcloud',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'font',\n 'type': 'string',\n 'expr': true,\n 'default': 'sans-serif'\n }, {\n 'name': 'fontStyle',\n 'type': 'string',\n 'expr': true,\n 'default': 'normal'\n }, {\n 'name': 'fontWeight',\n 'type': 'string',\n 'expr': true,\n 'default': 'normal'\n }, {\n 'name': 'fontSize',\n 'type': 'number',\n 'expr': true,\n 'default': 14\n }, {\n 'name': 'fontSizeRange',\n 'type': 'number',\n 'array': 'nullable',\n 'default': [10, 50]\n }, {\n 'name': 'rotate',\n 'type': 'number',\n 'expr': true,\n 'default': 0\n }, {\n 'name': 'text',\n 'type': 'field'\n }, {\n 'name': 'spiral',\n 'type': 'string',\n 'values': ['archimedean', 'rectangular']\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 7,\n 'default': Output\n }]\n};\ninherits(Wordcloud, Transform, {\n transform(_, pulse) {\n if (_.size && !(_.size[0] && _.size[1])) {\n error('Wordcloud size dimensions must be non-zero.');\n }\n\n function modp(param) {\n const p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n\n const mod = _.modified();\n\n if (!(mod || pulse.changed(pulse.ADD_REM) || Params.some(modp))) return;\n const data = pulse.materialize(pulse.SOURCE).source,\n layout = this.value,\n as = _.as || Output;\n let fontSize = _.fontSize || 14,\n range;\n isFunction(fontSize) ? range = _.fontSizeRange : fontSize = constant(fontSize); // create font size scaling function as needed\n\n if (range) {\n const fsize = fontSize,\n sizeScale = scale('sqrt')().domain(extent(data, fsize)).range(range);\n\n fontSize = x => sizeScale(fsize(x));\n }\n\n data.forEach(t => {\n t[as[0]] = NaN;\n t[as[1]] = NaN;\n t[as[3]] = 0;\n }); // configure layout\n\n const words = layout.words(data).text(_.text).size(_.size || [500, 500]).padding(_.padding || 1).spiral(_.spiral || 'archimedean').rotate(_.rotate || 0).font(_.font || 'sans-serif').fontStyle(_.fontStyle || 'normal').fontWeight(_.fontWeight || 'normal').fontSize(fontSize).random(random).layout();\n const size = layout.size(),\n dx = size[0] >> 1,\n dy = size[1] >> 1,\n n = words.length;\n\n for (let i = 0, w, t; i < n; ++i) {\n w = words[i];\n t = w.datum;\n t[as[0]] = w.x + dx;\n t[as[1]] = w.y + dy;\n t[as[2]] = w.font;\n t[as[3]] = w.size;\n t[as[4]] = w.style;\n t[as[5]] = w.weight;\n t[as[6]] = w.rotate;\n }\n\n return pulse.reflow(mod).modifies(as);\n }\n\n});\n\nexport { Wordcloud as wordcloud };\n","import { permute, bisectLeft, bisectRight } from 'd3-array';\nimport { Transform } from 'vega-dataflow';\nimport { inherits } from 'vega-util';\n\nconst array8 = n => new Uint8Array(n);\nconst array16 = n => new Uint16Array(n);\nconst array32 = n => new Uint32Array(n);\n\n/**\n * Maintains CrossFilter state.\n */\n\nfunction Bitmaps() {\n let width = 8,\n data = [],\n seen = array32(0),\n curr = array(0, width),\n prev = array(0, width);\n return {\n data: () => data,\n seen: () => seen = lengthen(seen, data.length),\n\n add(array) {\n for (let i = 0, j = data.length, n = array.length, t; i < n; ++i) {\n t = array[i];\n t._index = j++;\n data.push(t);\n }\n },\n\n remove(num, map) {\n // map: index -> boolean (true => remove)\n const n = data.length,\n copy = Array(n - num),\n reindex = data; // reuse old data array for index map\n\n let t, i, j; // seek forward to first removal\n\n for (i = 0; !map[i] && i < n; ++i) {\n copy[i] = data[i];\n reindex[i] = i;\n } // condense arrays\n\n\n for (j = i; i < n; ++i) {\n t = data[i];\n\n if (!map[i]) {\n reindex[i] = j;\n curr[j] = curr[i];\n prev[j] = prev[i];\n copy[j] = t;\n t._index = j++;\n } else {\n reindex[i] = -1;\n }\n\n curr[i] = 0; // clear unused bits\n }\n\n data = copy;\n return reindex;\n },\n\n size: () => data.length,\n curr: () => curr,\n prev: () => prev,\n reset: k => prev[k] = curr[k],\n all: () => width < 0x101 ? 0xff : width < 0x10001 ? 0xffff : 0xffffffff,\n\n set(k, one) {\n curr[k] |= one;\n },\n\n clear(k, one) {\n curr[k] &= ~one;\n },\n\n resize(n, m) {\n const k = curr.length;\n\n if (n > k || m > width) {\n width = Math.max(m, width);\n curr = array(n, width, curr);\n prev = array(n, width);\n }\n }\n\n };\n}\n\nfunction lengthen(array, length, copy) {\n if (array.length >= length) return array;\n copy = copy || new array.constructor(length);\n copy.set(array);\n return copy;\n}\n\nfunction array(n, m, array) {\n const copy = (m < 0x101 ? array8 : m < 0x10001 ? array16 : array32)(n);\n if (array) copy.set(array);\n return copy;\n}\n\nfunction Dimension (index, i, query) {\n const bit = 1 << i;\n return {\n one: bit,\n zero: ~bit,\n range: query.slice(),\n bisect: index.bisect,\n index: index.index,\n size: index.size,\n\n onAdd(added, curr) {\n const dim = this,\n range = dim.bisect(dim.range, added.value),\n idx = added.index,\n lo = range[0],\n hi = range[1],\n n1 = idx.length;\n let i;\n\n for (i = 0; i < lo; ++i) curr[idx[i]] |= bit;\n\n for (i = hi; i < n1; ++i) curr[idx[i]] |= bit;\n\n return dim;\n }\n\n };\n}\n\n/**\n * Maintains a list of values, sorted by key.\n */\n\nfunction SortedIndex() {\n let index = array32(0),\n value = [],\n size = 0;\n\n function insert(key, data, base) {\n if (!data.length) return [];\n const n0 = size,\n n1 = data.length,\n addi = array32(n1);\n let addv = Array(n1),\n oldv,\n oldi,\n i;\n\n for (i = 0; i < n1; ++i) {\n addv[i] = key(data[i]);\n addi[i] = i;\n }\n\n addv = sort(addv, addi);\n\n if (n0) {\n oldv = value;\n oldi = index;\n value = Array(n0 + n1);\n index = array32(n0 + n1);\n merge(base, oldv, oldi, n0, addv, addi, n1, value, index);\n } else {\n if (base > 0) for (i = 0; i < n1; ++i) {\n addi[i] += base;\n }\n value = addv;\n index = addi;\n }\n\n size = n0 + n1;\n return {\n index: addi,\n value: addv\n };\n }\n\n function remove(num, map) {\n // map: index -> remove\n const n = size;\n let idx, i, j; // seek forward to first removal\n\n for (i = 0; !map[index[i]] && i < n; ++i); // condense index and value arrays\n\n\n for (j = i; i < n; ++i) {\n if (!map[idx = index[i]]) {\n index[j] = idx;\n value[j] = value[i];\n ++j;\n }\n }\n\n size = n - num;\n }\n\n function reindex(map) {\n for (let i = 0, n = size; i < n; ++i) {\n index[i] = map[index[i]];\n }\n }\n\n function bisect(range, array) {\n let n;\n\n if (array) {\n n = array.length;\n } else {\n array = value;\n n = size;\n }\n\n return [bisectLeft(array, range[0], 0, n), bisectRight(array, range[1], 0, n)];\n }\n\n return {\n insert: insert,\n remove: remove,\n bisect: bisect,\n reindex: reindex,\n index: () => index,\n size: () => size\n };\n}\n\nfunction sort(values, index) {\n values.sort.call(index, (a, b) => {\n const x = values[a],\n y = values[b];\n return x < y ? -1 : x > y ? 1 : 0;\n });\n return permute(values, index);\n}\n\nfunction merge(base, value0, index0, n0, value1, index1, n1, value, index) {\n let i0 = 0,\n i1 = 0,\n i;\n\n for (i = 0; i0 < n0 && i1 < n1; ++i) {\n if (value0[i0] < value1[i1]) {\n value[i] = value0[i0];\n index[i] = index0[i0++];\n } else {\n value[i] = value1[i1];\n index[i] = index1[i1++] + base;\n }\n }\n\n for (; i0 < n0; ++i0, ++i) {\n value[i] = value0[i0];\n index[i] = index0[i0];\n }\n\n for (; i1 < n1; ++i1, ++i) {\n value[i] = value1[i1];\n index[i] = index1[i1] + base;\n }\n}\n\n/**\n * An indexed multi-dimensional filter.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of dimension accessors to filter.\n * @param {Array} params.query - An array of per-dimension range queries.\n */\n\nfunction CrossFilter(params) {\n Transform.call(this, Bitmaps(), params);\n this._indices = null;\n this._dims = null;\n}\nCrossFilter.Definition = {\n 'type': 'CrossFilter',\n 'metadata': {},\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'query',\n 'type': 'array',\n 'array': true,\n 'required': true,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }]\n};\ninherits(CrossFilter, Transform, {\n transform(_, pulse) {\n if (!this._dims) {\n return this.init(_, pulse);\n } else {\n var init = _.modified('fields') || _.fields.some(f => pulse.modified(f.fields));\n\n return init ? this.reinit(_, pulse) : this.eval(_, pulse);\n }\n },\n\n init(_, pulse) {\n const fields = _.fields,\n query = _.query,\n indices = this._indices = {},\n dims = this._dims = [],\n m = query.length;\n let i = 0,\n key,\n index; // instantiate indices and dimensions\n\n for (; i < m; ++i) {\n key = fields[i].fname;\n index = indices[key] || (indices[key] = SortedIndex());\n dims.push(Dimension(index, i, query[i]));\n }\n\n return this.eval(_, pulse);\n },\n\n reinit(_, pulse) {\n const output = pulse.materialize().fork(),\n fields = _.fields,\n query = _.query,\n indices = this._indices,\n dims = this._dims,\n bits = this.value,\n curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(),\n out = output.rem = output.add,\n mod = output.mod,\n m = query.length,\n adds = {};\n let add, index, key, mods, remMap, modMap, i, n, f; // set prev to current state\n\n prev.set(curr); // if pulse has remove tuples, process them first\n\n if (pulse.rem.length) {\n remMap = this.remove(_, pulse, output);\n } // if pulse has added tuples, add them to state\n\n\n if (pulse.add.length) {\n bits.add(pulse.add);\n } // if pulse has modified tuples, create an index map\n\n\n if (pulse.mod.length) {\n modMap = {};\n\n for (mods = pulse.mod, i = 0, n = mods.length; i < n; ++i) {\n modMap[mods[i]._index] = 1;\n }\n } // re-initialize indices as needed, update curr bitmap\n\n\n for (i = 0; i < m; ++i) {\n f = fields[i];\n\n if (!dims[i] || _.modified('fields', i) || pulse.modified(f.fields)) {\n key = f.fname;\n\n if (!(add = adds[key])) {\n indices[key] = index = SortedIndex();\n adds[key] = add = index.insert(f, pulse.source, 0);\n }\n\n dims[i] = Dimension(index, i, query[i]).onAdd(add, curr);\n }\n } // visit each tuple\n // if filter state changed, push index to add/rem\n // else if in mod and passes a filter, push index to mod\n\n\n for (i = 0, n = bits.data().length; i < n; ++i) {\n if (remMap[i]) {\n // skip if removed tuple\n continue;\n } else if (prev[i] !== curr[i]) {\n // add if state changed\n out.push(i);\n } else if (modMap[i] && curr[i] !== all) {\n // otherwise, pass mods through\n mod.push(i);\n }\n }\n\n bits.mask = (1 << m) - 1;\n return output;\n },\n\n eval(_, pulse) {\n const output = pulse.materialize().fork(),\n m = this._dims.length;\n let mask = 0;\n\n if (pulse.rem.length) {\n this.remove(_, pulse, output);\n mask |= (1 << m) - 1;\n }\n\n if (_.modified('query') && !_.modified('fields')) {\n mask |= this.update(_, pulse, output);\n }\n\n if (pulse.add.length) {\n this.insert(_, pulse, output);\n mask |= (1 << m) - 1;\n }\n\n if (pulse.mod.length) {\n this.modify(pulse, output);\n mask |= (1 << m) - 1;\n }\n\n this.value.mask = mask;\n return output;\n },\n\n insert(_, pulse, output) {\n const tuples = pulse.add,\n bits = this.value,\n dims = this._dims,\n indices = this._indices,\n fields = _.fields,\n adds = {},\n out = output.add,\n n = bits.size() + tuples.length,\n m = dims.length;\n let k = bits.size(),\n j,\n key,\n add; // resize bitmaps and add tuples as needed\n\n bits.resize(n, m);\n bits.add(tuples);\n const curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(); // add to dimensional indices\n\n for (j = 0; j < m; ++j) {\n key = fields[j].fname;\n add = adds[key] || (adds[key] = indices[key].insert(fields[j], tuples, k));\n dims[j].onAdd(add, curr);\n } // set previous filters, output if passes at least one filter\n\n\n for (; k < n; ++k) {\n prev[k] = all;\n if (curr[k] !== all) out.push(k);\n }\n },\n\n modify(pulse, output) {\n const out = output.mod,\n bits = this.value,\n curr = bits.curr(),\n all = bits.all(),\n tuples = pulse.mod;\n let i, n, k;\n\n for (i = 0, n = tuples.length; i < n; ++i) {\n k = tuples[i]._index;\n if (curr[k] !== all) out.push(k);\n }\n },\n\n remove(_, pulse, output) {\n const indices = this._indices,\n bits = this.value,\n curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(),\n map = {},\n out = output.rem,\n tuples = pulse.rem;\n let i, n, k, f; // process tuples, output if passes at least one filter\n\n for (i = 0, n = tuples.length; i < n; ++i) {\n k = tuples[i]._index;\n map[k] = 1; // build index map\n\n prev[k] = f = curr[k];\n curr[k] = all;\n if (f !== all) out.push(k);\n } // remove from dimensional indices\n\n\n for (k in indices) {\n indices[k].remove(n, map);\n }\n\n this.reindex(pulse, n, map);\n return map;\n },\n\n // reindex filters and indices after propagation completes\n reindex(pulse, num, map) {\n const indices = this._indices,\n bits = this.value;\n pulse.runAfter(() => {\n const indexMap = bits.remove(num, map);\n\n for (const key in indices) indices[key].reindex(indexMap);\n });\n },\n\n update(_, pulse, output) {\n const dims = this._dims,\n query = _.query,\n stamp = pulse.stamp,\n m = dims.length;\n let mask = 0,\n i,\n q; // survey how many queries have changed\n\n output.filters = 0;\n\n for (q = 0; q < m; ++q) {\n if (_.modified('query', q)) {\n i = q;\n ++mask;\n }\n }\n\n if (mask === 1) {\n // only one query changed, use more efficient update\n mask = dims[i].one;\n this.incrementOne(dims[i], query[i], output.add, output.rem);\n } else {\n // multiple queries changed, perform full record keeping\n for (q = 0, mask = 0; q < m; ++q) {\n if (!_.modified('query', q)) continue;\n mask |= dims[q].one;\n this.incrementAll(dims[q], query[q], stamp, output.add);\n output.rem = output.add; // duplicate add/rem for downstream resolve\n }\n }\n\n return mask;\n },\n\n incrementAll(dim, query, stamp, out) {\n const bits = this.value,\n seen = bits.seen(),\n curr = bits.curr(),\n prev = bits.prev(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one;\n let i, j, k; // Fast incremental update based on previous lo index.\n\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n\n curr[k] ^= one;\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n\n curr[k] ^= one;\n }\n } // Fast incremental update based on previous hi index.\n\n\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n\n curr[k] ^= one;\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n\n curr[k] ^= one;\n }\n }\n\n dim.range = query.slice();\n },\n\n incrementOne(dim, query, add, rem) {\n const bits = this.value,\n curr = bits.curr(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one;\n let i, j, k; // Fast incremental update based on previous lo index.\n\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n } // Fast incremental update based on previous hi index.\n\n\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n\n dim.range = query.slice();\n }\n\n});\n\n/**\n * Selectively filters tuples by resolving against a filter bitmap.\n * Useful for processing the output of a cross-filter transform.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.ignore - A bit mask indicating which filters to ignore.\n * @param {object} params.filter - The per-tuple filter bitmaps. Typically this\n * parameter value is a reference to a {@link CrossFilter} transform.\n */\n\nfunction ResolveFilter(params) {\n Transform.call(this, null, params);\n}\nResolveFilter.Definition = {\n 'type': 'ResolveFilter',\n 'metadata': {},\n 'params': [{\n 'name': 'ignore',\n 'type': 'number',\n 'required': true,\n 'description': 'A bit mask indicating which filters to ignore.'\n }, {\n 'name': 'filter',\n 'type': 'object',\n 'required': true,\n 'description': 'Per-tuple filter bitmaps from a CrossFilter transform.'\n }]\n};\ninherits(ResolveFilter, Transform, {\n transform(_, pulse) {\n const ignore = ~(_.ignore || 0),\n // bit mask where zeros -> dims to ignore\n bitmap = _.filter,\n mask = bitmap.mask; // exit early if no relevant filter changes\n\n if ((mask & ignore) === 0) return pulse.StopPropagation;\n\n const output = pulse.fork(pulse.ALL),\n data = bitmap.data(),\n curr = bitmap.curr(),\n prev = bitmap.prev(),\n pass = k => !(curr[k] & ignore) ? data[k] : null; // propagate all mod tuples that pass the filter\n\n\n output.filter(output.MOD, pass); // determine add & rem tuples via filter functions\n // for efficiency, we do *not* populate new arrays,\n // instead we add filter functions applied downstream\n\n if (!(mask & mask - 1)) {\n // only one filter changed\n output.filter(output.ADD, pass);\n output.filter(output.REM, k => (curr[k] & ignore) === mask ? data[k] : null);\n } else {\n // multiple filters changed\n output.filter(output.ADD, k => {\n const c = curr[k] & ignore,\n f = !c && c ^ prev[k] & ignore;\n return f ? data[k] : null;\n });\n output.filter(output.REM, k => {\n const c = curr[k] & ignore,\n f = c && !(c ^ (c ^ prev[k] & ignore));\n return f ? data[k] : null;\n });\n } // add filter to source data in case of reflow...\n\n\n return output.filter(output.SOURCE, t => pass(t._index));\n }\n\n});\n\nexport { CrossFilter as crossfilter, ResolveFilter as resolvefilter };\n","export default function(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n","import { error, toSet, isFunction, isString, hasOwnProperty } from 'vega-util';\n\nconst RawCode = 'RawCode';\nconst Literal = 'Literal';\nconst Property = 'Property';\nconst Identifier = 'Identifier';\nconst ArrayExpression = 'ArrayExpression';\nconst BinaryExpression = 'BinaryExpression';\nconst CallExpression = 'CallExpression';\nconst ConditionalExpression = 'ConditionalExpression';\nconst LogicalExpression = 'LogicalExpression';\nconst MemberExpression = 'MemberExpression';\nconst ObjectExpression = 'ObjectExpression';\nconst UnaryExpression = 'UnaryExpression';\nfunction ASTNode(type) {\n this.type = type;\n}\n\nASTNode.prototype.visit = function (visitor) {\n let c, i, n;\n if (visitor(this)) return 1;\n\n for (c = children(this), i = 0, n = c.length; i < n; ++i) {\n if (c[i].visit(visitor)) return 1;\n }\n};\n\nfunction children(node) {\n switch (node.type) {\n case ArrayExpression:\n return node.elements;\n\n case BinaryExpression:\n case LogicalExpression:\n return [node.left, node.right];\n\n case CallExpression:\n return [node.callee].concat(node.arguments);\n\n case ConditionalExpression:\n return [node.test, node.consequent, node.alternate];\n\n case MemberExpression:\n return [node.object, node.property];\n\n case ObjectExpression:\n return node.properties;\n\n case Property:\n return [node.key, node.value];\n\n case UnaryExpression:\n return [node.argument];\n\n case Identifier:\n case Literal:\n case RawCode:\n default:\n return [];\n }\n}\n\n/*\n The following expression parser is based on Esprima (http://esprima.org/).\n Original header comment and license for Esprima is included here:\n\n Copyright (C) 2013 Ariya Hidayat \n Copyright (C) 2013 Thaddee Tyl \n Copyright (C) 2013 Mathias Bynens \n Copyright (C) 2012 Ariya Hidayat \n Copyright (C) 2012 Mathias Bynens \n Copyright (C) 2012 Joost-Wim Boekesteijn \n Copyright (C) 2012 Kris Kowal \n Copyright (C) 2012 Yusuke Suzuki \n Copyright (C) 2012 Arpad Borsos \n Copyright (C) 2011 Ariya Hidayat \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nvar TokenName, source, index, length, lookahead;\nvar TokenBooleanLiteral = 1,\n TokenEOF = 2,\n TokenIdentifier = 3,\n TokenKeyword = 4,\n TokenNullLiteral = 5,\n TokenNumericLiteral = 6,\n TokenPunctuator = 7,\n TokenStringLiteral = 8,\n TokenRegularExpression = 9;\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\nvar SyntaxArrayExpression = 'ArrayExpression',\n SyntaxBinaryExpression = 'BinaryExpression',\n SyntaxCallExpression = 'CallExpression',\n SyntaxConditionalExpression = 'ConditionalExpression',\n SyntaxIdentifier = 'Identifier',\n SyntaxLiteral = 'Literal',\n SyntaxLogicalExpression = 'LogicalExpression',\n SyntaxMemberExpression = 'MemberExpression',\n SyntaxObjectExpression = 'ObjectExpression',\n SyntaxProperty = 'Property',\n SyntaxUnaryExpression = 'UnaryExpression'; // Error messages should be identical to V8.\n\nvar MessageUnexpectedToken = 'Unexpected token %0',\n MessageUnexpectedNumber = 'Unexpected number',\n MessageUnexpectedString = 'Unexpected string',\n MessageUnexpectedIdentifier = 'Unexpected identifier',\n MessageUnexpectedReserved = 'Unexpected reserved word',\n MessageUnexpectedEOS = 'Unexpected end of input',\n MessageInvalidRegExp = 'Invalid regular expression',\n MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\nvar ILLEGAL = 'ILLEGAL',\n DISABLED = 'Disabled.'; // See also tools/generate-unicode-regex.py.\n\nvar RegexNonAsciiIdentifierStart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'),\n // eslint-disable-next-line no-misleading-character-class\nRegexNonAsciiIdentifierPart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'); // Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n /* istanbul ignore next */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n}\n\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 && ch <= 0x39; // 0..9\n}\n\nfunction isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\n\nfunction isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n} // 7.2 White Space\n\n\nfunction isWhiteSpace(ch) {\n return ch === 0x20 || ch === 0x09 || ch === 0x0B || ch === 0x0C || ch === 0xA0 || ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0;\n} // 7.3 Line Terminators\n\n\nfunction isLineTerminator(ch) {\n return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029;\n} // 7.6 Identifier Names and Identifiers\n\n\nfunction isIdentifierStart(ch) {\n return ch === 0x24 || ch === 0x5F || // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A || // A..Z\n ch >= 0x61 && ch <= 0x7A || // a..z\n ch === 0x5C || // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch));\n}\n\nfunction isIdentifierPart(ch) {\n return ch === 0x24 || ch === 0x5F || // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A || // A..Z\n ch >= 0x61 && ch <= 0x7A || // a..z\n ch >= 0x30 && ch <= 0x39 || // 0..9\n ch === 0x5C || // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch));\n} // 7.6.1.1 Keywords\n\n\nconst keywords = {\n 'if': 1,\n 'in': 1,\n 'do': 1,\n 'var': 1,\n 'for': 1,\n 'new': 1,\n 'try': 1,\n 'let': 1,\n 'this': 1,\n 'else': 1,\n 'case': 1,\n 'void': 1,\n 'with': 1,\n 'enum': 1,\n 'while': 1,\n 'break': 1,\n 'catch': 1,\n 'throw': 1,\n 'const': 1,\n 'yield': 1,\n 'class': 1,\n 'super': 1,\n 'return': 1,\n 'typeof': 1,\n 'delete': 1,\n 'switch': 1,\n 'export': 1,\n 'import': 1,\n 'public': 1,\n 'static': 1,\n 'default': 1,\n 'finally': 1,\n 'extends': 1,\n 'package': 1,\n 'private': 1,\n 'function': 1,\n 'continue': 1,\n 'debugger': 1,\n 'interface': 1,\n 'protected': 1,\n 'instanceof': 1,\n 'implements': 1\n};\n\nfunction skipComment() {\n while (index < length) {\n const ch = source.charCodeAt(index);\n\n if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n ++index;\n } else {\n break;\n }\n }\n}\n\nfunction scanHexEscape(prefix) {\n var i,\n len,\n ch,\n code = 0;\n len = prefix === 'u' ? 4 : 2;\n\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n return String.fromCharCode(code);\n}\n\nfunction scanUnicodeCodePointEscape() {\n var ch, code, cu1, cu2;\n ch = source[index];\n code = 0; // At least, one hex digit is required.\n\n if (ch === '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n while (index < length) {\n ch = source[index++];\n\n if (!isHexDigit(ch)) {\n break;\n }\n\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n\n if (code > 0x10FFFF || ch !== '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } // UTF-16 Encoding\n\n\n if (code <= 0xFFFF) {\n return String.fromCharCode(code);\n }\n\n cu1 = (code - 0x10000 >> 10) + 0xD800;\n cu2 = (code - 0x10000 & 1023) + 0xDC00;\n return String.fromCharCode(cu1, cu2);\n}\n\nfunction getEscapedIdentifier() {\n var ch, id;\n ch = source.charCodeAt(index++);\n id = String.fromCharCode(ch); // '\\u' (U+005C, U+0075) denotes an escaped character.\n\n if (ch === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n ++index;\n ch = scanHexEscape('u');\n\n if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n id = ch;\n }\n\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (!isIdentifierPart(ch)) {\n break;\n }\n\n ++index;\n id += String.fromCharCode(ch); // '\\u' (U+005C, U+0075) denotes an escaped character.\n\n if (ch === 0x5C) {\n id = id.substr(0, id.length - 1);\n\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n ++index;\n ch = scanHexEscape('u');\n\n if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n id += ch;\n }\n }\n\n return id;\n}\n\nfunction getIdentifier() {\n var start, ch;\n start = index++;\n\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getEscapedIdentifier();\n }\n\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n}\n\nfunction scanIdentifier() {\n var start, id, type;\n start = index; // Backslash (U+005C) starts an escaped character.\n\n id = source.charCodeAt(index) === 0x5C ? getEscapedIdentifier() : getIdentifier(); // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n\n if (id.length === 1) {\n type = TokenIdentifier;\n } else if (keywords.hasOwnProperty(id)) {\n // eslint-disable-line no-prototype-builtins\n type = TokenKeyword;\n } else if (id === 'null') {\n type = TokenNullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = TokenBooleanLiteral;\n } else {\n type = TokenIdentifier;\n }\n\n return {\n type: type,\n value: id,\n start: start,\n end: index\n };\n} // 7.7 Punctuators\n\n\nfunction scanPunctuator() {\n var start = index,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2,\n ch3,\n ch4;\n\n switch (code) {\n // Check for most common single-character punctuators.\n case 0x2E: // . dot\n\n case 0x28: // ( open bracket\n\n case 0x29: // ) close bracket\n\n case 0x3B: // ; semicolon\n\n case 0x2C: // , comma\n\n case 0x7B: // { open curly brace\n\n case 0x7D: // } close curly brace\n\n case 0x5B: // [\n\n case 0x5D: // ]\n\n case 0x3A: // :\n\n case 0x3F: // ?\n\n case 0x7E:\n // ~\n ++index;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code),\n start: start,\n end: index\n };\n\n default:\n code2 = source.charCodeAt(index + 1); // '=' (U+003D) marks an assignment or comparison operator.\n\n if (code2 === 0x3D) {\n switch (code) {\n case 0x2B: // +\n\n case 0x2D: // -\n\n case 0x2F: // /\n\n case 0x3C: // <\n\n case 0x3E: // >\n\n case 0x5E: // ^\n\n case 0x7C: // |\n\n case 0x25: // %\n\n case 0x26: // &\n\n case 0x2A:\n // *\n index += 2;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n start: start,\n end: index\n };\n\n case 0x21: // !\n\n case 0x3D:\n // =\n index += 2; // !== and ===\n\n if (source.charCodeAt(index) === 0x3D) {\n ++index;\n }\n\n return {\n type: TokenPunctuator,\n value: source.slice(start, index),\n start: start,\n end: index\n };\n }\n }\n\n } // 4-character punctuator: >>>=\n\n\n ch4 = source.substr(index, 4);\n\n if (ch4 === '>>>=') {\n index += 4;\n return {\n type: TokenPunctuator,\n value: ch4,\n start: start,\n end: index\n };\n } // 3-character punctuators: === !== >>> <<= >>=\n\n\n ch3 = ch4.substr(0, 3);\n\n if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n index += 3;\n return {\n type: TokenPunctuator,\n value: ch3,\n start: start,\n end: index\n };\n } // Other 2-character punctuators: ++ -- << >> && ||\n\n\n ch2 = ch3.substr(0, 2);\n\n if (ch1 === ch2[1] && '+-<>&|'.indexOf(ch1) >= 0 || ch2 === '=>') {\n index += 2;\n return {\n type: TokenPunctuator,\n value: ch2,\n start: start,\n end: index\n };\n }\n\n if (ch2 === '//') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } // 1-character punctuators: < > = ! + - * % & | ^ /\n\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;\n return {\n type: TokenPunctuator,\n value: ch1,\n start: start,\n end: index\n };\n }\n\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n} // 7.8.3 Numeric Literals\n\n\nfunction scanHexLiteral(start) {\n let number = '';\n\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n\n number += source[index++];\n }\n\n if (number.length === 0) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt('0x' + number, 16),\n start: start,\n end: index\n };\n}\n\nfunction scanOctalLiteral(start) {\n let number = '0' + source[index++];\n\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n\n number += source[index++];\n }\n\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt(number, 8),\n octal: true,\n start: start,\n end: index\n };\n}\n\nfunction scanNumericLiteral() {\n var number, start, ch;\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || ch === '.', 'Numeric literal must start with a decimal digit or a decimal point');\n start = index;\n number = '';\n\n if (ch !== '.') {\n number = source[index++];\n ch = source[index]; // Hex number starts with '0x'.\n // Octal number starts with '0'.\n\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n\n if (isOctalDigit(ch)) {\n return scanOctalLiteral(start);\n } // decimal number starts with '0' such as '09' is illegal.\n\n\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n ch = source[index];\n\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseFloat(number),\n start: start,\n end: index\n };\n} // 7.8.4 String Literals\n\n\nfunction scanStringLiteral() {\n var str = '',\n quote,\n start,\n ch,\n code,\n octal = false;\n quote = source[index];\n assert(quote === '\\'' || quote === '\"', 'String literal must starts with a quote');\n start = index;\n ++index;\n\n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n str += scanHexEscape(ch);\n }\n\n break;\n\n case 'n':\n str += '\\n';\n break;\n\n case 'r':\n str += '\\r';\n break;\n\n case 't':\n str += '\\t';\n break;\n\n case 'b':\n str += '\\b';\n break;\n\n case 'f':\n str += '\\f';\n break;\n\n case 'v':\n str += '\\x0B';\n break;\n\n default:\n if (isOctalDigit(ch)) {\n code = '01234567'.indexOf(ch); // \\0 is not octal escape sequence\n\n if (code !== 0) {\n octal = true;\n }\n\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]); // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n\n if ('0123'.indexOf(ch) >= 0 && index < length && isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n\n str += String.fromCharCode(code);\n } else {\n str += ch;\n }\n\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenStringLiteral,\n value: str,\n octal: octal,\n start: start,\n end: index\n };\n}\n\nfunction testRegExp(pattern, flags) {\n let tmp = pattern;\n\n if (flags.indexOf('u') >= 0) {\n // Replace each astral symbol and every Unicode code point\n // escape sequence with a single ASCII symbol to avoid throwing on\n // regular expressions that are only valid in combination with the\n // `/u` flag.\n // Note: replacing with the ASCII symbol `x` might cause false\n // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n // perfectly valid pattern that is equivalent to `[a-b]`, but it\n // would be replaced by `[x-b]` which throws an error.\n tmp = tmp.replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, ($0, $1) => {\n if (parseInt($1, 16) <= 0x10FFFF) {\n return 'x';\n }\n\n throwError({}, MessageInvalidRegExp);\n }).replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n } // First, detect invalid regular expressions.\n\n\n try {\n new RegExp(tmp);\n } catch (e) {\n throwError({}, MessageInvalidRegExp);\n } // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n\n\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n}\n\nfunction scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n classMarker = false;\n terminated = false;\n\n while (index < length) {\n ch = source[index++];\n str += ch;\n\n if (ch === '\\\\') {\n ch = source[index++]; // ECMA-262 7.8.5\n\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n }\n\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n\n if (!terminated) {\n throwError({}, MessageUnterminatedRegExp);\n } // Exclude leading and trailing slash.\n\n\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n}\n\nfunction scanRegExpFlags() {\n var ch, str, flags;\n str = '';\n flags = '';\n\n while (index < length) {\n ch = source[index];\n\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n\n ++index;\n\n if (ch === '\\\\' && index < length) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } else {\n flags += ch;\n str += ch;\n }\n }\n\n if (flags.search(/[^gimuy]/g) >= 0) {\n throwError({}, MessageInvalidRegExp, flags);\n }\n\n return {\n value: flags,\n literal: str\n };\n}\n\nfunction scanRegExp() {\n var start, body, flags, value;\n lookahead = null;\n skipComment();\n start = index;\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n}\n\nfunction isIdentifierName(token) {\n return token.type === TokenIdentifier || token.type === TokenKeyword || token.type === TokenBooleanLiteral || token.type === TokenNullLiteral;\n}\n\nfunction advance() {\n skipComment();\n\n if (index >= length) {\n return {\n type: TokenEOF,\n start: index,\n end: index\n };\n }\n\n const ch = source.charCodeAt(index);\n\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n } // Very common: ( and ) and ;\n\n\n if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n return scanPunctuator();\n } // String literal starts with single quote (U+0027) or double quote (U+0022).\n\n\n if (ch === 0x27 || ch === 0x22) {\n return scanStringLiteral();\n } // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n\n\n if (ch === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n}\n\nfunction lex() {\n const token = lookahead;\n index = token.end;\n lookahead = advance();\n index = token.end;\n return token;\n}\n\nfunction peek() {\n const pos = index;\n lookahead = advance();\n index = pos;\n}\n\nfunction finishArrayExpression(elements) {\n const node = new ASTNode(SyntaxArrayExpression);\n node.elements = elements;\n return node;\n}\n\nfunction finishBinaryExpression(operator, left, right) {\n const node = new ASTNode(operator === '||' || operator === '&&' ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n node.operator = operator;\n node.left = left;\n node.right = right;\n return node;\n}\n\nfunction finishCallExpression(callee, args) {\n const node = new ASTNode(SyntaxCallExpression);\n node.callee = callee;\n node.arguments = args;\n return node;\n}\n\nfunction finishConditionalExpression(test, consequent, alternate) {\n const node = new ASTNode(SyntaxConditionalExpression);\n node.test = test;\n node.consequent = consequent;\n node.alternate = alternate;\n return node;\n}\n\nfunction finishIdentifier(name) {\n const node = new ASTNode(SyntaxIdentifier);\n node.name = name;\n return node;\n}\n\nfunction finishLiteral(token) {\n const node = new ASTNode(SyntaxLiteral);\n node.value = token.value;\n node.raw = source.slice(token.start, token.end);\n\n if (token.regex) {\n if (node.raw === '//') {\n node.raw = '/(?:)/';\n }\n\n node.regex = token.regex;\n }\n\n return node;\n}\n\nfunction finishMemberExpression(accessor, object, property) {\n const node = new ASTNode(SyntaxMemberExpression);\n node.computed = accessor === '[';\n node.object = object;\n node.property = property;\n if (!node.computed) property.member = true;\n return node;\n}\n\nfunction finishObjectExpression(properties) {\n const node = new ASTNode(SyntaxObjectExpression);\n node.properties = properties;\n return node;\n}\n\nfunction finishProperty(kind, key, value) {\n const node = new ASTNode(SyntaxProperty);\n node.key = key;\n node.value = value;\n node.kind = kind;\n return node;\n}\n\nfunction finishUnaryExpression(operator, argument) {\n const node = new ASTNode(SyntaxUnaryExpression);\n node.operator = operator;\n node.argument = argument;\n node.prefix = true;\n return node;\n} // Throw an exception\n\n\nfunction throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(/%(\\d)/g, (whole, index) => {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n });\n error = new Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n} // Throw an exception because of the token.\n\n\nfunction throwUnexpected(token) {\n if (token.type === TokenEOF) {\n throwError(token, MessageUnexpectedEOS);\n }\n\n if (token.type === TokenNumericLiteral) {\n throwError(token, MessageUnexpectedNumber);\n }\n\n if (token.type === TokenStringLiteral) {\n throwError(token, MessageUnexpectedString);\n }\n\n if (token.type === TokenIdentifier) {\n throwError(token, MessageUnexpectedIdentifier);\n }\n\n if (token.type === TokenKeyword) {\n throwError(token, MessageUnexpectedReserved);\n } // BooleanLiteral, NullLiteral, or Punctuator.\n\n\n throwError(token, MessageUnexpectedToken, token.value);\n} // Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\n\nfunction expect(value) {\n const token = lex();\n\n if (token.type !== TokenPunctuator || token.value !== value) {\n throwUnexpected(token);\n }\n} // Return true if the next token matches the specified punctuator.\n\n\nfunction match(value) {\n return lookahead.type === TokenPunctuator && lookahead.value === value;\n} // Return true if the next token matches the specified keyword\n\n\nfunction matchKeyword(keyword) {\n return lookahead.type === TokenKeyword && lookahead.value === keyword;\n} // 11.1.4 Array Initialiser\n\n\nfunction parseArrayInitialiser() {\n const elements = [];\n index = lookahead.start;\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseConditionalExpression());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n lex();\n return finishArrayExpression(elements);\n} // 11.1.5 Object Initialiser\n\n\nfunction parseObjectPropertyKey() {\n index = lookahead.start;\n const token = lex(); // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n if (token.octal) {\n throwError(token, MessageStrictOctalLiteral);\n }\n\n return finishLiteral(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseObjectProperty() {\n var token, key, id, value;\n index = lookahead.start;\n token = lookahead;\n\n if (token.type === TokenIdentifier) {\n id = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', id, value);\n }\n\n if (token.type === TokenEOF || token.type === TokenPunctuator) {\n throwUnexpected(token);\n } else {\n key = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', key, value);\n }\n}\n\nfunction parseObjectInitialiser() {\n var properties = [],\n property,\n name,\n key,\n map = {},\n toString = String;\n index = lookahead.start;\n expect('{');\n\n while (!match('}')) {\n property = parseObjectProperty();\n\n if (property.key.type === SyntaxIdentifier) {\n name = property.key.name;\n } else {\n name = toString(property.key.value);\n }\n\n key = '$' + name;\n\n if (Object.prototype.hasOwnProperty.call(map, key)) {\n throwError({}, MessageStrictDuplicateProperty);\n } else {\n map[key] = true;\n }\n\n properties.push(property);\n\n if (!match('}')) {\n expect(',');\n }\n }\n\n expect('}');\n return finishObjectExpression(properties);\n} // 11.1.6 The Grouping Operator\n\n\nfunction parseGroupExpression() {\n expect('(');\n const expr = parseExpression();\n expect(')');\n return expr;\n} // 11.1 Primary Expressions\n\n\nconst legalKeywords = {\n 'if': 1\n};\n\nfunction parsePrimaryExpression() {\n var type, token, expr;\n\n if (match('(')) {\n return parseGroupExpression();\n }\n\n if (match('[')) {\n return parseArrayInitialiser();\n }\n\n if (match('{')) {\n return parseObjectInitialiser();\n }\n\n type = lookahead.type;\n index = lookahead.start;\n\n if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n expr = finishIdentifier(lex().value);\n } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n if (lookahead.octal) {\n throwError(lookahead, MessageStrictOctalLiteral);\n }\n\n expr = finishLiteral(lex());\n } else if (type === TokenKeyword) {\n throw new Error(DISABLED);\n } else if (type === TokenBooleanLiteral) {\n token = lex();\n token.value = token.value === 'true';\n expr = finishLiteral(token);\n } else if (type === TokenNullLiteral) {\n token = lex();\n token.value = null;\n expr = finishLiteral(token);\n } else if (match('/') || match('/=')) {\n expr = finishLiteral(scanRegExp());\n peek();\n } else {\n throwUnexpected(lex());\n }\n\n return expr;\n} // 11.2 Left-Hand-Side Expressions\n\n\nfunction parseArguments() {\n const args = [];\n expect('(');\n\n if (!match(')')) {\n while (index < length) {\n args.push(parseConditionalExpression());\n\n if (match(')')) {\n break;\n }\n\n expect(',');\n }\n }\n\n expect(')');\n return args;\n}\n\nfunction parseNonComputedProperty() {\n index = lookahead.start;\n const token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseNonComputedMember() {\n expect('.');\n return parseNonComputedProperty();\n}\n\nfunction parseComputedMember() {\n expect('[');\n const expr = parseExpression();\n expect(']');\n return expr;\n}\n\nfunction parseLeftHandSideExpressionAllowCall() {\n var expr, args, property;\n expr = parsePrimaryExpression();\n\n for (;;) {\n if (match('.')) {\n property = parseNonComputedMember();\n expr = finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = finishCallExpression(expr, args);\n } else if (match('[')) {\n property = parseComputedMember();\n expr = finishMemberExpression('[', expr, property);\n } else {\n break;\n }\n }\n\n return expr;\n} // 11.3 Postfix Expressions\n\n\nfunction parsePostfixExpression() {\n const expr = parseLeftHandSideExpressionAllowCall();\n\n if (lookahead.type === TokenPunctuator) {\n if (match('++') || match('--')) {\n throw new Error(DISABLED);\n }\n }\n\n return expr;\n} // 11.4 Unary Operators\n\n\nfunction parseUnaryExpression() {\n var token, expr;\n\n if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n throw new Error(DISABLED);\n } else if (match('+') || match('-') || match('~') || match('!')) {\n token = lex();\n expr = parseUnaryExpression();\n expr = finishUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw new Error(DISABLED);\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n}\n\nfunction binaryPrecedence(token) {\n let prec = 0;\n\n if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '|':\n prec = 3;\n break;\n\n case '^':\n prec = 4;\n break;\n\n case '&':\n prec = 5;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n case 'in':\n prec = 7;\n break;\n\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n }\n\n return prec;\n} // 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\n\nfunction parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n marker = lookahead;\n left = parseUnaryExpression();\n token = lookahead;\n prec = binaryPrecedence(token);\n\n if (prec === 0) {\n return left;\n }\n\n token.prec = prec;\n lex();\n markers = [marker, lookahead];\n right = parseUnaryExpression();\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n // Reduce: make a binary expression from the three topmost entries.\n while (stack.length > 2 && prec <= stack[stack.length - 2].prec) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = finishBinaryExpression(operator, left, right);\n stack.push(expr);\n } // Shift.\n\n\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = parseUnaryExpression();\n stack.push(expr);\n } // Final reduce to clean-up the stack.\n\n\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n\n while (i > 1) {\n markers.pop();\n expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n} // 11.12 Conditional Operator\n\n\nfunction parseConditionalExpression() {\n var expr, consequent, alternate;\n expr = parseBinaryExpression();\n\n if (match('?')) {\n lex();\n consequent = parseConditionalExpression();\n expect(':');\n alternate = parseConditionalExpression();\n expr = finishConditionalExpression(expr, consequent, alternate);\n }\n\n return expr;\n} // 11.14 Comma Operator\n\n\nfunction parseExpression() {\n const expr = parseConditionalExpression();\n\n if (match(',')) {\n throw new Error(DISABLED); // no sequence expressions\n }\n\n return expr;\n}\n\nfunction parser (code) {\n source = code;\n index = 0;\n length = source.length;\n lookahead = null;\n peek();\n const expr = parseExpression();\n\n if (lookahead.type !== TokenEOF) {\n throw new Error('Unexpect token after expression.');\n }\n\n return expr;\n}\n\nvar Constants = {\n NaN: 'NaN',\n E: 'Math.E',\n LN2: 'Math.LN2',\n LN10: 'Math.LN10',\n LOG2E: 'Math.LOG2E',\n LOG10E: 'Math.LOG10E',\n PI: 'Math.PI',\n SQRT1_2: 'Math.SQRT1_2',\n SQRT2: 'Math.SQRT2',\n MIN_VALUE: 'Number.MIN_VALUE',\n MAX_VALUE: 'Number.MAX_VALUE'\n};\n\nfunction Functions (codegen) {\n function fncall(name, args, cast, type) {\n let obj = codegen(args[0]);\n\n if (cast) {\n obj = cast + '(' + obj + ')';\n if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n }\n\n return obj + '.' + name + (type < 0 ? '' : type === 0 ? '()' : '(' + args.slice(1).map(codegen).join(',') + ')');\n }\n\n function fn(name, cast, type) {\n return args => fncall(name, args, cast, type);\n }\n\n const DATE = 'new Date',\n STRING = 'String',\n REGEXP = 'RegExp';\n return {\n // MATH functions\n isNaN: 'Number.isNaN',\n isFinite: 'Number.isFinite',\n abs: 'Math.abs',\n acos: 'Math.acos',\n asin: 'Math.asin',\n atan: 'Math.atan',\n atan2: 'Math.atan2',\n ceil: 'Math.ceil',\n cos: 'Math.cos',\n exp: 'Math.exp',\n floor: 'Math.floor',\n log: 'Math.log',\n max: 'Math.max',\n min: 'Math.min',\n pow: 'Math.pow',\n random: 'Math.random',\n round: 'Math.round',\n sin: 'Math.sin',\n sqrt: 'Math.sqrt',\n tan: 'Math.tan',\n clamp: function (args) {\n if (args.length < 3) error('Missing arguments to clamp function.');\n if (args.length > 3) error('Too many arguments to clamp function.');\n const a = args.map(codegen);\n return 'Math.max(' + a[1] + ', Math.min(' + a[2] + ',' + a[0] + '))';\n },\n // DATE functions\n now: 'Date.now',\n utc: 'Date.UTC',\n datetime: DATE,\n date: fn('getDate', DATE, 0),\n day: fn('getDay', DATE, 0),\n year: fn('getFullYear', DATE, 0),\n month: fn('getMonth', DATE, 0),\n hours: fn('getHours', DATE, 0),\n minutes: fn('getMinutes', DATE, 0),\n seconds: fn('getSeconds', DATE, 0),\n milliseconds: fn('getMilliseconds', DATE, 0),\n time: fn('getTime', DATE, 0),\n timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n utcdate: fn('getUTCDate', DATE, 0),\n utcday: fn('getUTCDay', DATE, 0),\n utcyear: fn('getUTCFullYear', DATE, 0),\n utcmonth: fn('getUTCMonth', DATE, 0),\n utchours: fn('getUTCHours', DATE, 0),\n utcminutes: fn('getUTCMinutes', DATE, 0),\n utcseconds: fn('getUTCSeconds', DATE, 0),\n utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n // sequence functions\n length: fn('length', null, -1),\n // STRING functions\n parseFloat: 'parseFloat',\n parseInt: 'parseInt',\n upper: fn('toUpperCase', STRING, 0),\n lower: fn('toLowerCase', STRING, 0),\n substring: fn('substring', STRING),\n split: fn('split', STRING),\n trim: fn('trim', STRING, 0),\n // REGEXP functions\n regexp: REGEXP,\n test: fn('test', REGEXP),\n // Control Flow functions\n if: function (args) {\n if (args.length < 3) error('Missing arguments to if function.');\n if (args.length > 3) error('Too many arguments to if function.');\n const a = args.map(codegen);\n return '(' + a[0] + '?' + a[1] + ':' + a[2] + ')';\n }\n };\n}\n\nfunction stripQuotes(s) {\n const n = s && s.length - 1;\n return n && (s[0] === '\"' && s[n] === '\"' || s[0] === '\\'' && s[n] === '\\'') ? s.slice(1, -1) : s;\n}\n\nfunction codegen (opt) {\n opt = opt || {};\n const allowed = opt.allowed ? toSet(opt.allowed) : {},\n forbidden = opt.forbidden ? toSet(opt.forbidden) : {},\n constants = opt.constants || Constants,\n functions = (opt.functions || Functions)(visit),\n globalvar = opt.globalvar,\n fieldvar = opt.fieldvar,\n outputGlobal = isFunction(globalvar) ? globalvar : id => `${globalvar}[\"${id}\"]`;\n let globals = {},\n fields = {},\n memberDepth = 0;\n\n function visit(ast) {\n if (isString(ast)) return ast;\n const generator = Generators[ast.type];\n if (generator == null) error('Unsupported type: ' + ast.type);\n return generator(ast);\n }\n\n const Generators = {\n Literal: n => n.raw,\n Identifier: n => {\n const id = n.name;\n\n if (memberDepth > 0) {\n return id;\n } else if (hasOwnProperty(forbidden, id)) {\n return error('Illegal identifier: ' + id);\n } else if (hasOwnProperty(constants, id)) {\n return constants[id];\n } else if (hasOwnProperty(allowed, id)) {\n return id;\n } else {\n globals[id] = 1;\n return outputGlobal(id);\n }\n },\n MemberExpression: n => {\n const d = !n.computed,\n o = visit(n.object);\n if (d) memberDepth += 1;\n const p = visit(n.property);\n\n if (o === fieldvar) {\n // strip quotes to sanitize field name (#1653)\n fields[stripQuotes(p)] = 1;\n }\n\n if (d) memberDepth -= 1;\n return o + (d ? '.' + p : '[' + p + ']');\n },\n CallExpression: n => {\n if (n.callee.type !== 'Identifier') {\n error('Illegal callee type: ' + n.callee.type);\n }\n\n const callee = n.callee.name,\n args = n.arguments,\n fn = hasOwnProperty(functions, callee) && functions[callee];\n if (!fn) error('Unrecognized function: ' + callee);\n return isFunction(fn) ? fn(args) : fn + '(' + args.map(visit).join(',') + ')';\n },\n ArrayExpression: n => '[' + n.elements.map(visit).join(',') + ']',\n BinaryExpression: n => '(' + visit(n.left) + ' ' + n.operator + ' ' + visit(n.right) + ')',\n UnaryExpression: n => '(' + n.operator + visit(n.argument) + ')',\n ConditionalExpression: n => '(' + visit(n.test) + '?' + visit(n.consequent) + ':' + visit(n.alternate) + ')',\n LogicalExpression: n => '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n ObjectExpression: n => '{' + n.properties.map(visit).join(',') + '}',\n Property: n => {\n memberDepth += 1;\n const k = visit(n.key);\n memberDepth -= 1;\n return k + ':' + visit(n.value);\n }\n };\n\n function codegen(ast) {\n const result = {\n code: visit(ast),\n globals: Object.keys(globals),\n fields: Object.keys(fields)\n };\n globals = {};\n fields = {};\n return result;\n }\n\n codegen.functions = functions;\n codegen.constants = constants;\n return codegen;\n}\n\nexport { ASTNode, ArrayExpression, BinaryExpression, CallExpression, ConditionalExpression, Identifier, Literal, LogicalExpression, MemberExpression, ObjectExpression, Property, RawCode, UnaryExpression, codegen, Constants as constants, Functions as functions, parser as parse };\n","import { field, isDate, toNumber, isArray, inrange, extend, array, error, peek, hasOwnProperty } from 'vega-util';\nimport { Literal } from 'vega-expression';\n\nfunction ascending (a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n\nfunction bisector (f) {\n let delta = f;\n let compare = f;\n\n if (f.length === 1) {\n delta = (d, x) => f(d) - x;\n\n compare = ascendingComparator(f);\n }\n\n function left(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n\n while (lo < hi) {\n const mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;else hi = mid;\n }\n\n return lo;\n }\n\n function right(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n\n while (lo < hi) {\n const mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;else lo = mid + 1;\n }\n\n return lo;\n }\n\n function center(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {\n left,\n center,\n right\n };\n}\n\nfunction ascendingComparator(f) {\n return (d, x) => ascending(f(d), x);\n}\n\nconst Intersect = 'intersect';\nconst Union = 'union';\nconst VlMulti = 'vlMulti';\nconst VlPoint = 'vlPoint';\nconst Or = 'or';\nconst And = 'and';\n\nconst SELECTION_ID = '_vgsid_',\n TYPE_ENUM = 'E',\n TYPE_RANGE_INC = 'R',\n TYPE_RANGE_EXC = 'R-E',\n TYPE_RANGE_LE = 'R-LE',\n TYPE_RANGE_RE = 'R-RE',\n UNIT_INDEX = 'index:unit'; // TODO: revisit date coercion?\n\nfunction testPoint(datum, entry) {\n var fields = entry.fields,\n values = entry.values,\n n = fields.length,\n i = 0,\n dval,\n f;\n\n for (; i < n; ++i) {\n f = fields[i];\n f.getter = field.getter || field(f.field);\n dval = f.getter(datum);\n if (isDate(dval)) dval = toNumber(dval);\n if (isDate(values[i])) values[i] = toNumber(values[i]);\n if (isDate(values[i][0])) values[i] = values[i].map(toNumber);\n\n if (f.type === TYPE_ENUM) {\n // Enumerated fields can either specify individual values (single/multi selections)\n // or an array of values (interval selections).\n if (isArray(values[i]) ? values[i].indexOf(dval) < 0 : dval !== values[i]) {\n return false;\n }\n } else {\n if (f.type === TYPE_RANGE_INC) {\n if (!inrange(dval, values[i])) return false;\n } else if (f.type === TYPE_RANGE_RE) {\n // Discrete selection of bins test within the range [bin_start, bin_end).\n if (!inrange(dval, values[i], true, false)) return false;\n } else if (f.type === TYPE_RANGE_EXC) {\n // 'R-E'/'R-LE' included for completeness.\n if (!inrange(dval, values[i], false, false)) return false;\n } else if (f.type === TYPE_RANGE_LE) {\n if (!inrange(dval, values[i], false, true)) return false;\n }\n }\n }\n\n return true;\n}\n/**\n * Tests if a tuple is contained within an interactive selection.\n * @param {string} name - The name of the data set representing the selection.\n * Tuples in the dataset are of the form\n * {unit: string, fields: array, values: array<*>}.\n * Fielddef is of the form\n * {field: string, channel: string, type: 'E' | 'R'} where\n * 'type' identifies whether tuples in the dataset enumerate\n * values for the field, or specify a continuous range.\n * @param {object} datum - The tuple to test for inclusion.\n * @param {string} op - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @return {boolean} - True if the datum is in the selection, false otherwise.\n */\n\n\nfunction selectionTest(name, datum, op) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === Intersect,\n n = entries.length,\n i = 0,\n entry,\n miss,\n count,\n unit,\n b;\n\n for (; i < n; ++i) {\n entry = entries[i];\n\n if (unitIdx && intersect) {\n // multi selections union within the same unit and intersect across units.\n miss = miss || {};\n count = miss[unit = entry.unit] || 0; // if we've already matched this unit, skip.\n\n if (count === -1) continue;\n b = testPoint(datum, entry);\n miss[unit] = b ? -1 : ++count; // if we match and there are no other units return true\n // if we've missed against all tuples in this unit return false\n\n if (b && unitIdx.size === 1) return true;\n if (!b && count === unitIdx.get(unit).count) return false;\n } else {\n b = testPoint(datum, entry); // if we find a miss and we do require intersection return false\n // if we find a match and we don't require intersection return true\n\n if (intersect ^ b) return b;\n }\n } // if intersecting and we made it here, then we saw no misses\n // if not intersecting, then we saw no matches\n // if no active selections, return false\n\n\n return n && intersect;\n}\nconst selectionId = field(SELECTION_ID),\n bisect = bisector(selectionId),\n bisectLeft = bisect.left,\n bisectRight = bisect.right;\nfunction selectionIdTest(name, datum, op) {\n const data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === Intersect,\n value = selectionId(datum),\n index = bisectLeft(entries, value);\n if (index === entries.length) return false;\n if (selectionId(entries[index]) !== value) return false;\n\n if (unitIdx && intersect) {\n if (unitIdx.size === 1) return true;\n if (bisectRight(entries, value) - index < unitIdx.size) return false;\n }\n\n return true;\n}\n\n/**\n * Maps an array of scene graph items to an array of selection tuples.\n * @param {string} name - The name of the dataset representing the selection.\n * @param {string} unit - The name of the unit view.\n *\n * @returns {array} An array of selection entries for the given unit.\n */\n\nfunction selectionTuples(array, base) {\n return array.map(x => extend({\n values: base.fields.map(f => (f.getter || (f.getter = field(f.field)))(x.datum))\n }, base));\n}\n\n/**\n * Resolves selection for use as a scale domain or reads via the API.\n * @param {string} name - The name of the dataset representing the selection\n * @param {string} [op='union'] - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @param {boolean} isMulti - Identifies a \"multi\" selection to perform more\n * expensive resolution computation.\n * @param {boolean} vl5 - With Vega-Lite v5, \"multi\" selections are now called \"point\"\n * selections, and thus the resolved tuple should reflect this name.\n * This parameter allows us to reflect this change without triggering\n * a major version bump for Vega.\n * @returns {object} An object of selected fields and values.\n */\n\nfunction selectionResolve(name, op, isMulti, vl5) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n resolved = {},\n multiRes = {},\n types = {},\n entry,\n fields,\n values,\n unit,\n field,\n res,\n resUnit,\n type,\n union,\n n = entries.length,\n i = 0,\n j,\n m; // First union all entries within the same unit.\n\n for (; i < n; ++i) {\n entry = entries[i];\n unit = entry.unit;\n fields = entry.fields;\n values = entry.values;\n\n for (j = 0, m = fields.length; j < m; ++j) {\n field = fields[j];\n res = resolved[field.field] || (resolved[field.field] = {});\n resUnit = res[unit] || (res[unit] = []);\n types[field.field] = type = field.type.charAt(0);\n union = ops[type + '_union'];\n res[unit] = union(resUnit, array(values[j]));\n } // If the same multi-selection is repeated over views and projected over\n // an encoding, it may operate over different fields making it especially\n // tricky to reliably resolve it. At best, we can de-dupe identical entries\n // but doing so may be more computationally expensive than it is worth.\n // Instead, for now, we simply transform our store representation into\n // a more human-friendly one.\n\n\n if (isMulti) {\n resUnit = multiRes[unit] || (multiRes[unit] = []);\n resUnit.push(array(values).reduce((obj, curr, j) => (obj[fields[j].field] = curr, obj), {}));\n }\n } // Then resolve fields across units as per the op.\n\n\n op = op || Union;\n Object.keys(resolved).forEach(field => {\n resolved[field] = Object.keys(resolved[field]).map(unit => resolved[field][unit]).reduce((acc, curr) => acc === undefined ? curr : ops[types[field] + '_' + op](acc, curr));\n });\n entries = Object.keys(multiRes);\n\n if (isMulti && entries.length) {\n const key = vl5 ? VlPoint : VlMulti;\n resolved[key] = op === Union ? {\n [Or]: entries.reduce((acc, k) => (acc.push(...multiRes[k]), acc), [])\n } : {\n [And]: entries.map(k => ({\n [Or]: multiRes[k]\n }))\n };\n }\n\n return resolved;\n}\nvar ops = {\n E_union: function (base, value) {\n if (!base.length) return value;\n var i = 0,\n n = value.length;\n\n for (; i < n; ++i) if (base.indexOf(value[i]) < 0) base.push(value[i]);\n\n return base;\n },\n E_intersect: function (base, value) {\n return !base.length ? value : base.filter(v => value.indexOf(v) >= 0);\n },\n R_union: function (base, value) {\n var lo = toNumber(value[0]),\n hi = toNumber(value[1]);\n\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n\n if (!base.length) return [lo, hi];\n if (base[0] > lo) base[0] = lo;\n if (base[1] < hi) base[1] = hi;\n return base;\n },\n R_intersect: function (base, value) {\n var lo = toNumber(value[0]),\n hi = toNumber(value[1]);\n\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n\n if (!base.length) return [lo, hi];\n\n if (hi < base[0] || base[1] < lo) {\n return [];\n } else {\n if (base[0] < lo) base[0] = lo;\n if (base[1] > hi) base[1] = hi;\n }\n\n return base;\n }\n};\n\nconst DataPrefix = ':',\n IndexPrefix = '@';\nfunction selectionVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to selection functions must be a string literal.');\n const data = args[0].value,\n op = args.length >= 2 && peek(args).value,\n field = 'unit',\n indexName = IndexPrefix + field,\n dataName = DataPrefix + data; // eslint-disable-next-line no-prototype-builtins\n\n if (op === Intersect && !hasOwnProperty(params, indexName)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n } // eslint-disable-next-line no-prototype-builtins\n\n\n if (!hasOwnProperty(params, dataName)) {\n params[dataName] = scope.getData(data).tuplesRef();\n }\n}\n\nexport { selectionIdTest, selectionResolve, selectionTest, selectionTuples, selectionVisitor };\n","import { truthy, error, hasOwnProperty, isFunction, isString, stringValue, extend, isArray, isObject, field, peek, identity, array as array$1, isBoolean, isDate, isNumber, isRegExp, toBoolean, toDate, toNumber, toString, flush, lerp, pad, span, inrange, truncate, quarter, utcquarter, extent, clampRange, panLinear, panLog, panPow, panSymlog, zoomLinear, zoomLog, zoomPow, zoomSymlog } from 'vega-util';\nimport { Literal, constants, codegen, functions, parse, CallExpression } from 'vega-expression';\nimport { geoBounds as geoBounds$1, geoCentroid as geoCentroid$1, geoArea as geoArea$1 } from 'd3-geo';\nimport { rgb, lab, hcl, hsl } from 'd3-color';\nimport { isTuple } from 'vega-dataflow';\nimport { bandSpace, scale as scale$1, scaleFraction } from 'vega-scale';\nimport { Gradient, pathRender, pathParse, Bounds, intersect as intersect$1 } from 'vega-scenegraph';\nimport { selectionVisitor, selectionTest, selectionIdTest, selectionResolve, selectionTuples } from 'vega-selections';\nimport { random, cumulativeNormal, cumulativeLogNormal, cumulativeUniform, densityNormal, densityLogNormal, densityUniform, quantileNormal, quantileLogNormal, quantileUniform, sampleNormal, sampleLogNormal, sampleUniform } from 'vega-statistics';\nimport { utcOffset, utcSequence, timeOffset, timeSequence, timeUnitSpecifier, week, utcweek, dayofyear, utcdayofyear } from 'vega-time';\nimport { range as range$1 } from 'd3-array';\n\nfunction data(name) {\n const data = this.context.data[name];\n return data ? data.values.value : [];\n}\nfunction indata(name, field, value) {\n const index = this.context.data[name]['index:' + field],\n entry = index ? index.value.get(value) : undefined;\n return entry ? entry.count : entry;\n}\nfunction setdata(name, tuples) {\n const df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input;\n df.pulse(input, df.changeset().remove(truthy).insert(tuples));\n return 1;\n}\n\nfunction encode (item, name, retval) {\n if (item) {\n const df = this.context.dataflow,\n target = item.mark.source;\n df.pulse(target, df.changeset().encode(item, name));\n }\n\n return retval !== undefined ? retval : item;\n}\n\nconst wrap = method => function (value, spec) {\n const locale = this.context.dataflow.locale();\n return locale[method](spec)(value);\n};\n\nconst format = wrap('format');\nconst timeFormat = wrap('timeFormat');\nconst utcFormat = wrap('utcFormat');\nconst timeParse = wrap('timeParse');\nconst utcParse = wrap('utcParse');\nconst dateObj = new Date(2000, 0, 1);\n\nfunction time(month, day, specifier) {\n if (!Number.isInteger(month) || !Number.isInteger(day)) return '';\n dateObj.setYear(2000);\n dateObj.setMonth(month);\n dateObj.setDate(day);\n return timeFormat.call(this, dateObj, specifier);\n}\n\nfunction monthFormat(month) {\n return time.call(this, month, 1, '%B');\n}\nfunction monthAbbrevFormat(month) {\n return time.call(this, month, 1, '%b');\n}\nfunction dayFormat(day) {\n return time.call(this, 0, 2 + day, '%A');\n}\nfunction dayAbbrevFormat(day) {\n return time.call(this, 0, 2 + day, '%a');\n}\n\nconst DataPrefix = ':';\nconst IndexPrefix = '@';\nconst ScalePrefix = '%';\nconst SignalPrefix = '$';\n\nfunction dataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) {\n error('First argument to data functions must be a string literal.');\n }\n\n const data = args[0].value,\n dataName = DataPrefix + data;\n\n if (!hasOwnProperty(dataName, params)) {\n try {\n params[dataName] = scope.getData(data).tuplesRef();\n } catch (err) {// if data set does not exist, there's nothing to track\n }\n }\n}\nfunction indataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to indata must be a string literal.');\n if (args[1].type !== Literal) error('Second argument to indata must be a string literal.');\n const data = args[0].value,\n field = args[1].value,\n indexName = IndexPrefix + field;\n\n if (!hasOwnProperty(indexName, params)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n}\nfunction scaleVisitor(name, args, scope, params) {\n if (args[0].type === Literal) {\n // add scale dependency\n addScaleDependency(scope, params, args[0].value);\n } else {\n // indirect scale lookup; add all scales as parameters\n for (name in scope.scales) {\n addScaleDependency(scope, params, name);\n }\n }\n}\n\nfunction addScaleDependency(scope, params, name) {\n const scaleName = ScalePrefix + name;\n\n if (!hasOwnProperty(params, scaleName)) {\n try {\n params[scaleName] = scope.scaleRef(name);\n } catch (err) {// TODO: error handling? warning?\n }\n }\n}\n\nfunction getScale(name, ctx) {\n let s;\n return isFunction(name) ? name : isString(name) ? (s = ctx.scales[name]) && s.value : undefined;\n}\nfunction internalScaleFunctions(codegen, fnctx, visitors) {\n // add helper method to the 'this' expression function context\n fnctx.__bandwidth = s => s && s.bandwidth ? s.bandwidth() : 0; // register AST visitors for internal scale functions\n\n\n visitors._bandwidth = scaleVisitor;\n visitors._range = scaleVisitor;\n visitors._scale = scaleVisitor; // resolve scale reference directly to the signal hash argument\n\n const ref = arg => '_[' + (arg.type === Literal ? stringValue(ScalePrefix + arg.value) : stringValue(ScalePrefix) + '+' + codegen(arg)) + ']'; // define and return internal scale function code generators\n // these internal functions are called by mark encoders\n\n\n return {\n _bandwidth: args => `this.__bandwidth(${ref(args[0])})`,\n _range: args => `${ref(args[0])}.range()`,\n _scale: args => `${ref(args[0])}(${codegen(args[1])})`\n };\n}\n\nfunction geoMethod(methodName, globalMethod) {\n return function (projection, geojson, group) {\n if (projection) {\n // projection defined, use it\n const p = getScale(projection, (group || this).context);\n return p && p.path[methodName](geojson);\n } else {\n // projection undefined, use global method\n return globalMethod(geojson);\n }\n };\n}\n\nconst geoArea = geoMethod('area', geoArea$1);\nconst geoBounds = geoMethod('bounds', geoBounds$1);\nconst geoCentroid = geoMethod('centroid', geoCentroid$1);\n\nfunction inScope (item) {\n const group = this.context.group;\n let value = false;\n if (group) while (item) {\n if (item === group) {\n value = true;\n break;\n }\n\n item = item.mark.group;\n }\n return value;\n}\n\nfunction log(df, method, args) {\n try {\n df[method].apply(df, ['EXPRESSION'].concat([].slice.call(args)));\n } catch (err) {\n df.warn(err);\n }\n\n return args[args.length - 1];\n}\n\nfunction warn() {\n return log(this.context.dataflow, 'warn', arguments);\n}\nfunction info() {\n return log(this.context.dataflow, 'info', arguments);\n}\nfunction debug() {\n return log(this.context.dataflow, 'debug', arguments);\n}\n\nfunction channel_luminance_value(channelValue) {\n const val = channelValue / 255;\n\n if (val <= 0.03928) {\n return val / 12.92;\n }\n\n return Math.pow((val + 0.055) / 1.055, 2.4);\n}\n\nfunction luminance(color) {\n const c = rgb(color),\n r = channel_luminance_value(c.r),\n g = channel_luminance_value(c.g),\n b = channel_luminance_value(c.b);\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n} // https://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n\nfunction contrast(color1, color2) {\n const lum1 = luminance(color1),\n lum2 = luminance(color2),\n lumL = Math.max(lum1, lum2),\n lumD = Math.min(lum1, lum2);\n return (lumL + 0.05) / (lumD + 0.05);\n}\n\nfunction merge () {\n const args = [].slice.call(arguments);\n args.unshift({});\n return extend(...args);\n}\n\nfunction equal(a, b) {\n return a === b || a !== a && b !== b ? true : isArray(a) ? isArray(b) && a.length === b.length ? equalArray(a, b) : false : isObject(a) && isObject(b) ? equalObject(a, b) : false;\n}\n\nfunction equalArray(a, b) {\n for (let i = 0, n = a.length; i < n; ++i) {\n if (!equal(a[i], b[i])) return false;\n }\n\n return true;\n}\n\nfunction equalObject(a, b) {\n for (const key in a) {\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n}\n\nfunction removePredicate(props) {\n return _ => equalObject(props, _);\n}\n\nfunction modify (name, insert, remove, toggle, modify, values) {\n const df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input,\n stamp = df.stamp();\n let changes = data.changes,\n predicate,\n key;\n\n if (df._trigger === false || !(input.value.length || insert || toggle)) {\n // nothing to do!\n return 0;\n }\n\n if (!changes || changes.stamp < stamp) {\n data.changes = changes = df.changeset();\n changes.stamp = stamp;\n df.runAfter(() => {\n data.modified = true;\n df.pulse(input, changes).run();\n }, true, 1);\n }\n\n if (remove) {\n predicate = remove === true ? truthy : isArray(remove) || isTuple(remove) ? remove : removePredicate(remove);\n changes.remove(predicate);\n }\n\n if (insert) {\n changes.insert(insert);\n }\n\n if (toggle) {\n predicate = removePredicate(toggle);\n\n if (input.value.some(predicate)) {\n changes.remove(predicate);\n } else {\n changes.insert(toggle);\n }\n }\n\n if (modify) {\n for (key in values) {\n changes.modify(modify, key, values[key]);\n }\n }\n\n return 1;\n}\n\nfunction pinchDistance(event) {\n const t = event.touches,\n dx = t[0].clientX - t[1].clientX,\n dy = t[0].clientY - t[1].clientY;\n return Math.sqrt(dx * dx + dy * dy);\n}\nfunction pinchAngle(event) {\n const t = event.touches;\n return Math.atan2(t[0].clientY - t[1].clientY, t[0].clientX - t[1].clientX);\n}\n\nconst accessors = {};\nfunction pluck (data, name) {\n const accessor = accessors[name] || (accessors[name] = field(name));\n return isArray(data) ? data.map(accessor) : accessor(data);\n}\n\nfunction array(seq) {\n return isArray(seq) || ArrayBuffer.isView(seq) ? seq : null;\n}\n\nfunction sequence(seq) {\n return array(seq) || (isString(seq) ? seq : null);\n}\n\nfunction join(seq, ...args) {\n return array(seq).join(...args);\n}\nfunction indexof(seq, ...args) {\n return sequence(seq).indexOf(...args);\n}\nfunction lastindexof(seq, ...args) {\n return sequence(seq).lastIndexOf(...args);\n}\nfunction slice(seq, ...args) {\n return sequence(seq).slice(...args);\n}\nfunction replace(str, pattern, repl) {\n if (isFunction(repl)) error('Function argument passed to replace.');\n return String(str).replace(pattern, repl);\n}\nfunction reverse(seq) {\n return array(seq).slice().reverse();\n}\n\nfunction bandspace(count, paddingInner, paddingOuter) {\n return bandSpace(count || 0, paddingInner || 0, paddingOuter || 0);\n}\nfunction bandwidth(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.bandwidth ? s.bandwidth() : 0;\n}\nfunction copy(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.copy() : undefined;\n}\nfunction domain(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.domain() : [];\n}\nfunction invert(name, range, group) {\n const s = getScale(name, (group || this).context);\n return !s ? undefined : isArray(range) ? (s.invertRange || s.invert)(range) : (s.invert || s.invertExtent)(range);\n}\nfunction range(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.range ? s.range() : [];\n}\nfunction scale(name, value, group) {\n const s = getScale(name, (group || this).context);\n return s ? s(value) : undefined;\n}\n\nfunction scaleGradient (scale, p0, p1, count, group) {\n scale = getScale(scale, (group || this).context);\n const gradient = Gradient(p0, p1);\n let stops = scale.domain(),\n min = stops[0],\n max = peek(stops),\n fraction = identity;\n\n if (!(max - min)) {\n // expand scale if domain has zero span, fix #1479\n scale = (scale.interpolator ? scale$1('sequential')().interpolator(scale.interpolator()) : scale$1('linear')().interpolate(scale.interpolate()).range(scale.range())).domain([min = 0, max = 1]);\n } else {\n fraction = scaleFraction(scale, min, max);\n }\n\n if (scale.ticks) {\n stops = scale.ticks(+count || 15);\n if (min !== stops[0]) stops.unshift(min);\n if (max !== peek(stops)) stops.push(max);\n }\n\n stops.forEach(_ => gradient.stop(fraction(_), scale(_)));\n return gradient;\n}\n\nfunction geoShape(projection, geojson, group) {\n const p = getScale(projection, (group || this).context);\n return function (context) {\n return p ? p.path.context(context)(geojson) : '';\n };\n}\nfunction pathShape(path) {\n let p = null;\n return function (context) {\n return context ? pathRender(context, p = p || pathParse(path)) : path;\n };\n}\n\nconst datum = d => d.data;\n\nfunction treeNodes(name, context) {\n const tree = data.call(context, name);\n return tree.root && tree.root.lookup || {};\n}\n\nfunction treePath(name, source, target) {\n const nodes = treeNodes(name, this),\n s = nodes[source],\n t = nodes[target];\n return s && t ? s.path(t).map(datum) : undefined;\n}\nfunction treeAncestors(name, node) {\n const n = treeNodes(name, this)[node];\n return n ? n.ancestors().map(datum) : undefined;\n}\n\nconst _window = () => typeof window !== 'undefined' && window || null;\n\nfunction screen() {\n const w = _window();\n\n return w ? w.screen : {};\n}\nfunction windowSize() {\n const w = _window();\n\n return w ? [w.innerWidth, w.innerHeight] : [undefined, undefined];\n}\nfunction containerSize() {\n const view = this.context.dataflow,\n el = view.container && view.container();\n return el ? [el.clientWidth, el.clientHeight] : [undefined, undefined];\n}\n\nfunction intersect (b, opt, group) {\n if (!b) return [];\n const [u, v] = b,\n box = new Bounds().set(u[0], u[1], v[0], v[1]),\n scene = group || this.context.dataflow.scenegraph().root;\n return intersect$1(scene, box, filter(opt));\n}\n\nfunction filter(opt) {\n let p = null;\n\n if (opt) {\n const types = array$1(opt.marktype),\n names = array$1(opt.markname);\n\n p = _ => (!types.length || types.some(t => _.marktype === t)) && (!names.length || names.some(s => _.name === s));\n }\n\n return p;\n}\n\nconst functionContext = {\n random() {\n return random();\n },\n\n // override default\n cumulativeNormal,\n cumulativeLogNormal,\n cumulativeUniform,\n densityNormal,\n densityLogNormal,\n densityUniform,\n quantileNormal,\n quantileLogNormal,\n quantileUniform,\n sampleNormal,\n sampleLogNormal,\n sampleUniform,\n isArray,\n isBoolean,\n isDate,\n\n isDefined(_) {\n return _ !== undefined;\n },\n\n isNumber,\n isObject,\n isRegExp,\n isString,\n isTuple,\n\n isValid(_) {\n return _ != null && _ === _;\n },\n\n toBoolean,\n toDate,\n toNumber,\n toString,\n indexof,\n join,\n lastindexof,\n replace,\n reverse,\n slice,\n flush,\n lerp,\n merge,\n pad,\n peek,\n pluck,\n span,\n inrange,\n truncate,\n rgb,\n lab,\n hcl,\n hsl,\n luminance,\n contrast,\n sequence: range$1,\n format,\n utcFormat,\n utcParse,\n utcOffset,\n utcSequence,\n timeFormat,\n timeParse,\n timeOffset,\n timeSequence,\n timeUnitSpecifier,\n monthFormat,\n monthAbbrevFormat,\n dayFormat,\n dayAbbrevFormat,\n quarter,\n utcquarter,\n week,\n utcweek,\n dayofyear,\n utcdayofyear,\n warn,\n info,\n debug,\n extent,\n inScope,\n intersect,\n clampRange,\n pinchDistance,\n pinchAngle,\n screen,\n containerSize,\n windowSize,\n bandspace,\n setdata,\n pathShape,\n panLinear,\n panLog,\n panPow,\n panSymlog,\n zoomLinear,\n zoomLog,\n zoomPow,\n zoomSymlog,\n encode,\n modify\n};\nconst eventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'],\n // event functions\neventPrefix = 'event.vega.',\n // event function prefix\nthisPrefix = 'this.',\n // function context prefix\nastVisitors = {}; // AST visitors for dependency analysis\n// export code generator parameters\n\nconst codegenParams = {\n forbidden: ['_'],\n allowed: ['datum', 'event', 'item'],\n fieldvar: 'datum',\n globalvar: id => `_[${stringValue(SignalPrefix + id)}]`,\n functions: buildFunctions,\n constants: constants,\n visitors: astVisitors\n}; // export code generator\n\nconst codeGenerator = codegen(codegenParams); // Build expression function registry\n\nfunction buildFunctions(codegen) {\n const fn = functions(codegen);\n eventFunctions.forEach(name => fn[name] = eventPrefix + name);\n\n for (const name in functionContext) {\n fn[name] = thisPrefix + name;\n }\n\n extend(fn, internalScaleFunctions(codegen, functionContext, astVisitors));\n return fn;\n} // Register an expression function\n\n\nfunction expressionFunction(name, fn, visitor) {\n if (arguments.length === 1) {\n return functionContext[name];\n } // register with the functionContext\n\n\n functionContext[name] = fn; // if there is an astVisitor register that, too\n\n if (visitor) astVisitors[name] = visitor; // if the code generator has already been initialized,\n // we need to also register the function with it\n\n if (codeGenerator) codeGenerator.functions[name] = thisPrefix + name;\n return this;\n} // register expression functions with ast visitors\n\nexpressionFunction('bandwidth', bandwidth, scaleVisitor);\nexpressionFunction('copy', copy, scaleVisitor);\nexpressionFunction('domain', domain, scaleVisitor);\nexpressionFunction('range', range, scaleVisitor);\nexpressionFunction('invert', invert, scaleVisitor);\nexpressionFunction('scale', scale, scaleVisitor);\nexpressionFunction('gradient', scaleGradient, scaleVisitor);\nexpressionFunction('geoArea', geoArea, scaleVisitor);\nexpressionFunction('geoBounds', geoBounds, scaleVisitor);\nexpressionFunction('geoCentroid', geoCentroid, scaleVisitor);\nexpressionFunction('geoShape', geoShape, scaleVisitor);\nexpressionFunction('indata', indata, indataVisitor);\nexpressionFunction('data', data, dataVisitor);\nexpressionFunction('treePath', treePath, dataVisitor);\nexpressionFunction('treeAncestors', treeAncestors, dataVisitor); // register Vega-Lite selection functions\n\nexpressionFunction('vlSelectionTest', selectionTest, selectionVisitor);\nexpressionFunction('vlSelectionIdTest', selectionIdTest, selectionVisitor);\nexpressionFunction('vlSelectionResolve', selectionResolve, selectionVisitor);\nexpressionFunction('vlSelectionTuples', selectionTuples);\n\nfunction parser (expr, scope) {\n const params = {}; // parse the expression to an abstract syntax tree (ast)\n\n let ast;\n\n try {\n expr = isString(expr) ? expr : stringValue(expr) + '';\n ast = parse(expr);\n } catch (err) {\n error('Expression parse error: ' + expr);\n } // analyze ast function calls for dependencies\n\n\n ast.visit(node => {\n if (node.type !== CallExpression) return;\n const name = node.callee.name,\n visit = codegenParams.visitors[name];\n if (visit) visit(name, node.arguments, scope, params);\n }); // perform code generation\n\n const gen = codeGenerator(ast); // collect signal dependencies\n\n gen.globals.forEach(name => {\n const signalName = SignalPrefix + name;\n\n if (!hasOwnProperty(params, signalName) && scope.getSignal(name)) {\n params[signalName] = scope.signalRef(name);\n }\n }); // return generated expression code and dependencies\n\n return {\n $expr: extend({\n code: gen.code\n }, scope.options.ast ? {\n ast\n } : null),\n $fields: gen.fields,\n $params: params\n };\n}\n\nexport { DataPrefix, IndexPrefix, ScalePrefix, SignalPrefix, bandspace, bandwidth, codeGenerator, codegenParams, containerSize, contrast, copy, data, dataVisitor, dayAbbrevFormat, dayFormat, debug, domain, encode, expressionFunction, format, functionContext, geoArea, geoBounds, geoCentroid, geoShape, inScope, indata, indataVisitor, indexof, info, invert, join, lastindexof, luminance, merge, modify, monthAbbrevFormat, monthFormat, parser as parseExpression, pathShape, pinchAngle, pinchDistance, pluck, range, replace, reverse, scale, scaleGradient, scaleVisitor, screen, setdata, slice, timeFormat, timeParse, treeAncestors, treePath, utcFormat, utcParse, warn, windowSize };\n","import { toSet, stringValue, error, isArray, isObject, hasOwnProperty, accessor, key, field, array, compare, truthy } from 'vega-util';\nimport { tupleid } from 'vega-dataflow';\n\n/**\n * Parse a serialized dataflow specification.\n */\nfunction parse (spec) {\n const ctx = this,\n operators = spec.operators || []; // parse background\n\n if (spec.background) {\n ctx.background = spec.background;\n } // parse event configuration\n\n\n if (spec.eventConfig) {\n ctx.eventConfig = spec.eventConfig;\n } // parse locale configuration\n\n\n if (spec.locale) {\n ctx.locale = spec.locale;\n } // parse operators\n\n\n operators.forEach(entry => ctx.parseOperator(entry)); // parse operator parameters\n\n operators.forEach(entry => ctx.parseOperatorParameters(entry)); // parse streams\n\n (spec.streams || []).forEach(entry => ctx.parseStream(entry)); // parse updates\n\n (spec.updates || []).forEach(entry => ctx.parseUpdate(entry));\n return ctx.resolve();\n}\n\nconst Skip = toSet(['rule']),\n Swap = toSet(['group', 'image', 'rect']);\nfunction adjustSpatial(encode, marktype) {\n let code = '';\n if (Skip[marktype]) return code;\n\n if (encode.x2) {\n if (encode.x) {\n if (Swap[marktype]) {\n code += 'if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;';\n }\n\n code += 'o.width=o.x2-o.x;';\n } else {\n code += 'o.x=o.x2-(o.width||0);';\n }\n }\n\n if (encode.xc) {\n code += 'o.x=o.xc-(o.width||0)/2;';\n }\n\n if (encode.y2) {\n if (encode.y) {\n if (Swap[marktype]) {\n code += 'if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;';\n }\n\n code += 'o.height=o.y2-o.y;';\n } else {\n code += 'o.y=o.y2-(o.height||0);';\n }\n }\n\n if (encode.yc) {\n code += 'o.y=o.yc-(o.height||0)/2;';\n }\n\n return code;\n}\nfunction canonicalType(type) {\n return (type + '').toLowerCase();\n}\nfunction isOperator(type) {\n return canonicalType(type) === 'operator';\n}\nfunction isCollect(type) {\n return canonicalType(type) === 'collect';\n}\n\nfunction expression(ctx, args, code) {\n // wrap code in return statement if expression does not terminate\n if (code[code.length - 1] !== ';') {\n code = 'return(' + code + ');';\n }\n\n const fn = Function(...args.concat(code));\n return ctx && ctx.functions ? fn.bind(ctx.functions) : fn;\n} // generate code for comparing a single field\n\n\nfunction _compare(u, v, lt, gt) {\n return `((u = ${u}) < (v = ${v}) || u == null) && v != null ? ${lt}\n : (u > v || v == null) && u != null ? ${gt}\n : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? ${lt}\n : v !== v && u === u ? ${gt} : `;\n}\n\nvar expressionCodegen = {\n /**\n * Parse an expression used to update an operator value.\n */\n operator: (ctx, expr) => expression(ctx, ['_'], expr.code),\n\n /**\n * Parse an expression provided as an operator parameter value.\n */\n parameter: (ctx, expr) => expression(ctx, ['datum', '_'], expr.code),\n\n /**\n * Parse an expression applied to an event stream.\n */\n event: (ctx, expr) => expression(ctx, ['event'], expr.code),\n\n /**\n * Parse an expression used to handle an event-driven operator update.\n */\n handler: (ctx, expr) => {\n const code = `var datum=event.item&&event.item.datum;return ${expr.code};`;\n return expression(ctx, ['_', 'event'], code);\n },\n\n /**\n * Parse an expression that performs visual encoding.\n */\n encode: (ctx, encode) => {\n const {\n marktype,\n channels\n } = encode;\n let code = 'var o=item,datum=o.datum,m=0,$;';\n\n for (const name in channels) {\n const o = 'o[' + stringValue(name) + ']';\n code += `$=${channels[name].code};if(${o}!==$)${o}=$,m=1;`;\n }\n\n code += adjustSpatial(channels, marktype);\n code += 'return m;';\n return expression(ctx, ['item', '_'], code);\n },\n\n /**\n * Optimized code generators for access and comparison.\n */\n codegen: {\n get(path) {\n const ref = `[${path.map(stringValue).join('][')}]`;\n const get = Function('_', `return _${ref};`);\n get.path = ref;\n return get;\n },\n\n comparator(fields, orders) {\n let t;\n\n const map = (f, i) => {\n const o = orders[i];\n let u, v;\n\n if (f.path) {\n u = `a${f.path}`;\n v = `b${f.path}`;\n } else {\n (t = t || {})['f' + i] = f;\n u = `this.f${i}(a)`;\n v = `this.f${i}(b)`;\n }\n\n return _compare(u, v, -o, o);\n };\n\n const fn = Function('a', 'b', 'var u, v; return ' + fields.map(map).join('') + '0;');\n return t ? fn.bind(t) : fn;\n }\n\n }\n};\n\n/**\n * Parse a dataflow operator.\n */\n\nfunction parseOperator(spec) {\n const ctx = this;\n\n if (isOperator(spec.type) || !spec.type) {\n ctx.operator(spec, spec.update ? ctx.operatorExpression(spec.update) : null);\n } else {\n ctx.transform(spec, spec.type);\n }\n}\n/**\n * Parse and assign operator parameters.\n */\n\nfunction parseOperatorParameters(spec) {\n const ctx = this;\n\n if (spec.params) {\n const op = ctx.get(spec.id);\n if (!op) error('Invalid operator id: ' + spec.id);\n ctx.dataflow.connect(op, op.parameters(ctx.parseParameters(spec.params), spec.react, spec.initonly));\n }\n}\n\n/**\n * Parse a set of operator parameters.\n */\n\nfunction parseParameters(spec, params) {\n params = params || {};\n const ctx = this;\n\n for (const key in spec) {\n const value = spec[key];\n params[key] = isArray(value) ? value.map(v => parseParameter(v, ctx, params)) : parseParameter(value, ctx, params);\n }\n\n return params;\n}\n/**\n * Parse a single parameter.\n */\n\nfunction parseParameter(spec, ctx, params) {\n if (!spec || !isObject(spec)) return spec;\n\n for (let i = 0, n = PARSERS.length, p; i < n; ++i) {\n p = PARSERS[i];\n\n if (hasOwnProperty(spec, p.key)) {\n return p.parse(spec, ctx, params);\n }\n }\n\n return spec;\n}\n/** Reference parsers. */\n\n\nvar PARSERS = [{\n key: '$ref',\n parse: getOperator\n}, {\n key: '$key',\n parse: getKey\n}, {\n key: '$expr',\n parse: getExpression\n}, {\n key: '$field',\n parse: getField\n}, {\n key: '$encode',\n parse: getEncode\n}, {\n key: '$compare',\n parse: getCompare\n}, {\n key: '$context',\n parse: getContext\n}, {\n key: '$subflow',\n parse: getSubflow\n}, {\n key: '$tupleid',\n parse: getTupleId\n}];\n/**\n * Resolve an operator reference.\n */\n\nfunction getOperator(_, ctx) {\n return ctx.get(_.$ref) || error('Operator not defined: ' + _.$ref);\n}\n/**\n * Resolve an expression reference.\n */\n\n\nfunction getExpression(_, ctx, params) {\n if (_.$params) {\n // parse expression parameters\n ctx.parseParameters(_.$params, params);\n }\n\n const k = 'e:' + _.$expr.code + '_' + _.$name;\n return ctx.fn[k] || (ctx.fn[k] = accessor(ctx.parameterExpression(_.$expr), _.$fields, _.$name));\n}\n/**\n * Resolve a key accessor reference.\n */\n\n\nfunction getKey(_, ctx) {\n const k = 'k:' + _.$key + '_' + !!_.$flat;\n return ctx.fn[k] || (ctx.fn[k] = key(_.$key, _.$flat, ctx.expr.codegen));\n}\n/**\n * Resolve a field accessor reference.\n */\n\n\nfunction getField(_, ctx) {\n if (!_.$field) return null;\n const k = 'f:' + _.$field + '_' + _.$name;\n return ctx.fn[k] || (ctx.fn[k] = field(_.$field, _.$name, ctx.expr.codegen));\n}\n/**\n * Resolve a comparator function reference.\n */\n\n\nfunction getCompare(_, ctx) {\n // As of Vega 5.5.3, $tupleid sort is no longer used.\n // Keep here for now for backwards compatibility.\n const k = 'c:' + _.$compare + '_' + _.$order,\n c = array(_.$compare).map(_ => _ && _.$tupleid ? tupleid : _);\n return ctx.fn[k] || (ctx.fn[k] = compare(c, _.$order, ctx.expr.codegen));\n}\n/**\n * Resolve an encode operator reference.\n */\n\n\nfunction getEncode(_, ctx) {\n const spec = _.$encode,\n encode = {};\n\n for (const name in spec) {\n const enc = spec[name];\n encode[name] = accessor(ctx.encodeExpression(enc.$expr), enc.$fields);\n encode[name].output = enc.$output;\n }\n\n return encode;\n}\n/**\n * Resolve a context reference.\n */\n\n\nfunction getContext(_, ctx) {\n return ctx;\n}\n/**\n * Resolve a recursive subflow specification.\n */\n\n\nfunction getSubflow(_, ctx) {\n const spec = _.$subflow;\n return function (dataflow, key, parent) {\n const subctx = ctx.fork().parse(spec),\n op = subctx.get(spec.operators[0].id),\n p = subctx.signals.parent;\n if (p) p.set(parent);\n\n op.detachSubflow = () => ctx.detach(subctx);\n\n return op;\n };\n}\n/**\n * Resolve a tuple id reference.\n */\n\n\nfunction getTupleId() {\n return tupleid;\n}\n\n/**\n * Parse an event stream specification.\n */\n\nfunction parseStream (spec) {\n var ctx = this,\n filter = spec.filter != null ? ctx.eventExpression(spec.filter) : undefined,\n stream = spec.stream != null ? ctx.get(spec.stream) : undefined,\n args;\n\n if (spec.source) {\n stream = ctx.events(spec.source, spec.type, filter);\n } else if (spec.merge) {\n args = spec.merge.map(_ => ctx.get(_));\n stream = args[0].merge.apply(args[0], args.slice(1));\n }\n\n if (spec.between) {\n args = spec.between.map(_ => ctx.get(_));\n stream = stream.between(args[0], args[1]);\n }\n\n if (spec.filter) {\n stream = stream.filter(filter);\n }\n\n if (spec.throttle != null) {\n stream = stream.throttle(+spec.throttle);\n }\n\n if (spec.debounce != null) {\n stream = stream.debounce(+spec.debounce);\n }\n\n if (stream == null) {\n error('Invalid stream definition: ' + JSON.stringify(spec));\n }\n\n if (spec.consume) stream.consume(true);\n ctx.stream(spec, stream);\n}\n\n/**\n * Parse an event-driven operator update.\n */\n\nfunction parseUpdate (spec) {\n var ctx = this,\n srcid = isObject(srcid = spec.source) ? srcid.$ref : srcid,\n source = ctx.get(srcid),\n target = null,\n update = spec.update,\n params = undefined;\n if (!source) error('Source not defined: ' + spec.source);\n target = spec.target && spec.target.$expr ? ctx.eventExpression(spec.target.$expr) : ctx.get(spec.target);\n\n if (update && update.$expr) {\n if (update.$params) {\n params = ctx.parseParameters(update.$params);\n }\n\n update = ctx.handlerExpression(update.$expr);\n }\n\n ctx.update(spec, source, target, update, params);\n}\n\nconst SKIP = {\n skip: true\n};\nfunction getState(options) {\n var ctx = this,\n state = {};\n\n if (options.signals) {\n var signals = state.signals = {};\n Object.keys(ctx.signals).forEach(key => {\n const op = ctx.signals[key];\n\n if (options.signals(key, op)) {\n signals[key] = op.value;\n }\n });\n }\n\n if (options.data) {\n var data = state.data = {};\n Object.keys(ctx.data).forEach(key => {\n const dataset = ctx.data[key];\n\n if (options.data(key, dataset)) {\n data[key] = dataset.input.value;\n }\n });\n }\n\n if (ctx.subcontext && options.recurse !== false) {\n state.subcontext = ctx.subcontext.map(ctx => ctx.getState(options));\n }\n\n return state;\n}\nfunction setState(state) {\n var ctx = this,\n df = ctx.dataflow,\n data = state.data,\n signals = state.signals;\n Object.keys(signals || {}).forEach(key => {\n df.update(ctx.signals[key], signals[key], SKIP);\n });\n Object.keys(data || {}).forEach(key => {\n df.pulse(ctx.data[key].input, df.changeset().remove(truthy).insert(data[key]));\n });\n (state.subcontext || []).forEach((substate, i) => {\n const subctx = ctx.subcontext[i];\n if (subctx) subctx.setState(substate);\n });\n}\n\n/**\n * Context objects store the current parse state.\n * Enables lookup of parsed operators, event streams, accessors, etc.\n * Provides a 'fork' method for creating child contexts for subflows.\n */\n\nfunction context (df, transforms, functions, expr) {\n return new Context(df, transforms, functions, expr);\n}\n\nfunction Context(df, transforms, functions, expr) {\n this.dataflow = df;\n this.transforms = transforms;\n this.events = df.events.bind(df);\n this.expr = expr || expressionCodegen, this.signals = {};\n this.scales = {};\n this.nodes = {};\n this.data = {};\n this.fn = {};\n\n if (functions) {\n this.functions = Object.create(functions);\n this.functions.context = this;\n }\n}\n\nfunction Subcontext(ctx) {\n this.dataflow = ctx.dataflow;\n this.transforms = ctx.transforms;\n this.events = ctx.events;\n this.expr = ctx.expr;\n this.signals = Object.create(ctx.signals);\n this.scales = Object.create(ctx.scales);\n this.nodes = Object.create(ctx.nodes);\n this.data = Object.create(ctx.data);\n this.fn = Object.create(ctx.fn);\n\n if (ctx.functions) {\n this.functions = Object.create(ctx.functions);\n this.functions.context = this;\n }\n}\n\nContext.prototype = Subcontext.prototype = {\n fork() {\n const ctx = new Subcontext(this);\n (this.subcontext || (this.subcontext = [])).push(ctx);\n return ctx;\n },\n\n detach(ctx) {\n this.subcontext = this.subcontext.filter(c => c !== ctx); // disconnect all nodes in the subcontext\n // wipe out targets first for better efficiency\n\n const keys = Object.keys(ctx.nodes);\n\n for (const key of keys) ctx.nodes[key]._targets = null;\n\n for (const key of keys) ctx.nodes[key].detach();\n\n ctx.nodes = null;\n },\n\n get(id) {\n return this.nodes[id];\n },\n\n set(id, node) {\n return this.nodes[id] = node;\n },\n\n add(spec, op) {\n const ctx = this,\n df = ctx.dataflow,\n data = spec.value;\n ctx.set(spec.id, op);\n\n if (isCollect(spec.type) && data) {\n if (data.$ingest) {\n df.ingest(op, data.$ingest, data.$format);\n } else if (data.$request) {\n df.preload(op, data.$request, data.$format);\n } else {\n df.pulse(op, df.changeset().insert(data));\n }\n }\n\n if (spec.root) {\n ctx.root = op;\n }\n\n if (spec.parent) {\n let p = ctx.get(spec.parent.$ref);\n\n if (p) {\n df.connect(p, [op]);\n op.targets().add(p);\n } else {\n (ctx.unresolved = ctx.unresolved || []).push(() => {\n p = ctx.get(spec.parent.$ref);\n df.connect(p, [op]);\n op.targets().add(p);\n });\n }\n }\n\n if (spec.signal) {\n ctx.signals[spec.signal] = op;\n }\n\n if (spec.scale) {\n ctx.scales[spec.scale] = op;\n }\n\n if (spec.data) {\n for (const name in spec.data) {\n const data = ctx.data[name] || (ctx.data[name] = {});\n spec.data[name].forEach(role => data[role] = op);\n }\n }\n },\n\n resolve() {\n (this.unresolved || []).forEach(fn => fn());\n delete this.unresolved;\n return this;\n },\n\n operator(spec, update) {\n this.add(spec, this.dataflow.add(spec.value, update));\n },\n\n transform(spec, type) {\n this.add(spec, this.dataflow.add(this.transforms[canonicalType(type)]));\n },\n\n stream(spec, stream) {\n this.set(spec.id, stream);\n },\n\n update(spec, stream, target, update, params) {\n this.dataflow.on(stream, target, update, params, spec.options);\n },\n\n // expression parsing\n operatorExpression(expr) {\n return this.expr.operator(this, expr);\n },\n\n parameterExpression(expr) {\n return this.expr.parameter(this, expr);\n },\n\n eventExpression(expr) {\n return this.expr.event(this, expr);\n },\n\n handlerExpression(expr) {\n return this.expr.handler(this, expr);\n },\n\n encodeExpression(encode) {\n return this.expr.encode(this, encode);\n },\n\n // parse methods\n parse,\n parseOperator,\n parseOperatorParameters,\n parseParameters,\n parseStream,\n parseUpdate,\n // state methods\n getState,\n setState\n};\n\nexport { context };\n","import { isString, hasOwnProperty, error, truthy, constant, extend, isArray, toSet, array, isObject, debounce, isDate, inherits, stringValue } from 'vega-util';\nimport { changeset, isChangeSet, EventStream, transforms, Dataflow, asyncCallback } from 'vega-dataflow';\nimport { point, renderModule, CanvasHandler, RenderType, Scenegraph } from 'vega-scenegraph';\nimport { tickStep } from 'd3-array';\nimport { functionContext } from 'vega-functions';\nimport { context } from 'vega-runtime';\nimport { interval } from 'd3-timer';\nimport { locale } from 'vega-format';\n\n// initialize aria role and label attributes\nfunction initializeAria(view) {\n const el = view.container();\n\n if (el) {\n el.setAttribute('role', 'graphics-document');\n el.setAttribute('aria-roleDescription', 'visualization');\n ariaLabel(el, view.description());\n }\n} // update aria-label if we have a DOM container element\n\nfunction ariaLabel(el, desc) {\n if (el) desc == null ? el.removeAttribute('aria-label') : el.setAttribute('aria-label', desc);\n}\n\nfunction background (view) {\n // respond to background signal\n view.add(null, _ => {\n view._background = _.bg;\n view._resize = 1;\n return _.bg;\n }, {\n bg: view._signals.background\n });\n}\n\nconst Default = 'default';\nfunction cursor (view) {\n // get cursor signal, add to dataflow if needed\n const cursor = view._signals.cursor || (view._signals.cursor = view.add({\n user: Default,\n item: null\n })); // evaluate cursor on each mousemove event\n\n view.on(view.events('view', 'mousemove'), cursor, (_, event) => {\n const value = cursor.value,\n user = value ? isString(value) ? value : value.user : Default,\n item = event.item && event.item.cursor || null;\n return value && user === value.user && item == value.item ? value : {\n user: user,\n item: item\n };\n }); // when cursor signal updates, set visible cursor\n\n view.add(null, function (_) {\n let user = _.cursor,\n item = this.value;\n\n if (!isString(user)) {\n item = user.item;\n user = user.user;\n }\n\n setCursor(view, user && user !== Default ? user : item || user);\n return item;\n }, {\n cursor: cursor\n });\n}\nfunction setCursor(view, cursor) {\n const el = view.globalCursor() ? typeof document !== 'undefined' && document.body : view.container();\n\n if (el) {\n return cursor == null ? el.style.removeProperty('cursor') : el.style.cursor = cursor;\n }\n}\n\nfunction dataref(view, name) {\n var data = view._runtime.data;\n\n if (!hasOwnProperty(data, name)) {\n error('Unrecognized data set: ' + name);\n }\n\n return data[name];\n}\nfunction data(name, values) {\n return arguments.length < 2 ? dataref(this, name).values.value : change.call(this, name, changeset().remove(truthy).insert(values));\n}\nfunction change(name, changes) {\n if (!isChangeSet(changes)) {\n error('Second argument to changes must be a changeset.');\n }\n\n const dataset = dataref(this, name);\n dataset.modified = true;\n return this.pulse(dataset.input, changes);\n}\nfunction insert(name, _) {\n return change.call(this, name, changeset().insert(_));\n}\nfunction remove(name, _) {\n return change.call(this, name, changeset().remove(_));\n}\n\nfunction width(view) {\n var padding = view.padding();\n return Math.max(0, view._viewWidth + padding.left + padding.right);\n}\nfunction height(view) {\n var padding = view.padding();\n return Math.max(0, view._viewHeight + padding.top + padding.bottom);\n}\nfunction offset(view) {\n var padding = view.padding(),\n origin = view._origin;\n return [padding.left + origin[0], padding.top + origin[1]];\n}\nfunction resizeRenderer(view) {\n var origin = offset(view),\n w = width(view),\n h = height(view);\n\n view._renderer.background(view.background());\n\n view._renderer.resize(w, h, origin);\n\n view._handler.origin(origin);\n\n view._resizeListeners.forEach(handler => {\n try {\n handler(w, h);\n } catch (error) {\n view.error(error);\n }\n });\n}\n\n/**\n * Extend an event with additional view-specific methods.\n * Adds a new property ('vega') to an event that provides a number\n * of methods for querying information about the current interaction.\n * The vega object provides the following methods:\n * view - Returns the backing View instance.\n * item - Returns the currently active scenegraph item (if any).\n * group - Returns the currently active scenegraph group (if any).\n * This method accepts a single string-typed argument indicating the name\n * of the desired parent group. The scenegraph will be traversed from\n * the item up towards the root to search for a matching group. If no\n * argument is provided the enclosing group for the active item is\n * returned, unless the item it itself a group, in which case it is\n * returned directly.\n * xy - Returns a two-element array containing the x and y coordinates for\n * mouse or touch events. For touch events, this is based on the first\n * elements in the changedTouches array. This method accepts a single\n * argument: either an item instance or mark name that should serve as\n * the reference coordinate system. If no argument is provided the\n * top-level view coordinate system is assumed.\n * x - Returns the current x-coordinate, accepts the same arguments as xy.\n * y - Returns the current y-coordinate, accepts the same arguments as xy.\n * @param {Event} event - The input event to extend.\n * @param {Item} item - The currently active scenegraph item (if any).\n * @return {Event} - The extended input event.\n */\n\nfunction eventExtend (view, event, item) {\n var r = view._renderer,\n el = r && r.canvas(),\n p,\n e,\n translate;\n\n if (el) {\n translate = offset(view);\n e = event.changedTouches ? event.changedTouches[0] : event;\n p = point(e, el);\n p[0] -= translate[0];\n p[1] -= translate[1];\n }\n\n event.dataflow = view;\n event.item = item;\n event.vega = extension(view, item, p);\n return event;\n}\n\nfunction extension(view, item, point) {\n const itemGroup = item ? item.mark.marktype === 'group' ? item : item.mark.group : null;\n\n function group(name) {\n var g = itemGroup,\n i;\n if (name) for (i = item; i; i = i.mark.group) {\n if (i.mark.name === name) {\n g = i;\n break;\n }\n }\n return g && g.mark && g.mark.interactive ? g : {};\n }\n\n function xy(item) {\n if (!item) return point;\n if (isString(item)) item = group(item);\n const p = point.slice();\n\n while (item) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n item = item.mark && item.mark.group;\n }\n\n return p;\n }\n\n return {\n view: constant(view),\n item: constant(item || {}),\n group: group,\n xy: xy,\n x: item => xy(item)[0],\n y: item => xy(item)[1]\n };\n}\n\nconst VIEW = 'view',\n TIMER = 'timer',\n WINDOW = 'window',\n NO_TRAP = {\n trap: false\n};\n/**\n * Initialize event handling configuration.\n * @param {object} config - The configuration settings.\n * @return {object}\n */\n\nfunction initializeEventConfig(config) {\n const events = extend({\n defaults: {}\n }, config);\n\n const unpack = (obj, keys) => {\n keys.forEach(k => {\n if (isArray(obj[k])) obj[k] = toSet(obj[k]);\n });\n };\n\n unpack(events.defaults, ['prevent', 'allow']);\n unpack(events, ['view', 'window', 'selector']);\n return events;\n}\nfunction trackEventListener(view, sources, type, handler) {\n view._eventListeners.push({\n type: type,\n sources: array(sources),\n handler: handler\n });\n}\n\nfunction prevent(view, type) {\n var def = view._eventConfig.defaults,\n prevent = def.prevent,\n allow = def.allow;\n return prevent === false || allow === true ? false : prevent === true || allow === false ? true : prevent ? prevent[type] : allow ? !allow[type] : view.preventDefault();\n}\n\nfunction permit(view, key, type) {\n const rule = view._eventConfig && view._eventConfig[key];\n\n if (rule === false || isObject(rule) && !rule[type]) {\n view.warn(`Blocked ${key} ${type} event listener.`);\n return false;\n }\n\n return true;\n}\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @return {EventStream}\n */\n\n\nfunction events(source, type, filter) {\n var view = this,\n s = new EventStream(filter),\n send = function (e, item) {\n view.runAsync(null, () => {\n if (source === VIEW && prevent(view, type)) {\n e.preventDefault();\n }\n\n s.receive(eventExtend(view, e, item));\n });\n },\n sources;\n\n if (source === TIMER) {\n if (permit(view, 'timer', type)) {\n view.timer(send, type);\n }\n } else if (source === VIEW) {\n if (permit(view, 'view', type)) {\n // send traps errors, so use {trap: false} option\n view.addEventListener(type, send, NO_TRAP);\n }\n } else {\n if (source === WINDOW) {\n if (permit(view, 'window', type) && typeof window !== 'undefined') {\n sources = [window];\n }\n } else if (typeof document !== 'undefined') {\n if (permit(view, 'selector', type)) {\n sources = document.querySelectorAll(source);\n }\n }\n\n if (!sources) {\n view.warn('Can not resolve event source: ' + source);\n } else {\n for (var i = 0, n = sources.length; i < n; ++i) {\n sources[i].addEventListener(type, send);\n }\n\n trackEventListener(view, sources, type, send);\n }\n }\n\n return s;\n}\n\nfunction itemFilter(event) {\n return event.item;\n}\n\nfunction markTarget(event) {\n // grab upstream collector feeding the mark operator\n return event.item.mark.source;\n}\n\nfunction invoke(name) {\n return function (_, event) {\n return event.vega.view().changeset().encode(event.item, name);\n };\n}\n\nfunction hover (hoverSet, leaveSet) {\n hoverSet = [hoverSet || 'hover'];\n leaveSet = [leaveSet || 'update', hoverSet[0]]; // invoke hover set upon mouseover\n\n this.on(this.events('view', 'mouseover', itemFilter), markTarget, invoke(hoverSet)); // invoke leave set upon mouseout\n\n this.on(this.events('view', 'mouseout', itemFilter), markTarget, invoke(leaveSet));\n return this;\n}\n\n/**\n * Finalize a View instance that is being removed.\n * Cancel any running timers.\n * Remove all external event listeners.\n * Remove any currently displayed tooltip.\n */\nfunction finalize () {\n var tooltip = this._tooltip,\n timers = this._timers,\n listeners = this._eventListeners,\n n,\n m,\n e;\n n = timers.length;\n\n while (--n >= 0) {\n timers[n].stop();\n }\n\n n = listeners.length;\n\n while (--n >= 0) {\n e = listeners[n];\n m = e.sources.length;\n\n while (--m >= 0) {\n e.sources[m].removeEventListener(e.type, e.handler);\n }\n }\n\n if (tooltip) {\n tooltip.call(this, this._handler, null, null, null);\n }\n\n return this;\n}\n\nfunction element (tag, attr, text) {\n const el = document.createElement(tag);\n\n for (const key in attr) el.setAttribute(key, attr[key]);\n\n if (text != null) el.textContent = text;\n return el;\n}\n\nconst BindClass = 'vega-bind',\n NameClass = 'vega-bind-name',\n RadioClass = 'vega-bind-radio';\n/**\n * Bind a signal to an external HTML input element. The resulting two-way\n * binding will propagate input changes to signals, and propagate signal\n * changes to the input element state. If this view instance has no parent\n * element, we assume the view is headless and no bindings are created.\n * @param {Element|string} el - The parent DOM element to which the input\n * element should be appended as a child. If string-valued, this argument\n * will be treated as a CSS selector. If null or undefined, the parent\n * element of this view will be used as the element.\n * @param {object} param - The binding parameters which specify the signal\n * to bind to, the input element type, and type-specific configuration.\n * @return {View} - This view instance.\n */\n\nfunction bind (view, el, binding) {\n if (!el) return;\n const param = binding.param;\n let bind = binding.state;\n\n if (!bind) {\n bind = binding.state = {\n elements: null,\n active: false,\n set: null,\n update: value => {\n if (value != view.signal(param.signal)) {\n view.runAsync(null, () => {\n bind.source = true;\n view.signal(param.signal, value);\n });\n }\n }\n };\n\n if (param.debounce) {\n bind.update = debounce(param.debounce, bind.update);\n }\n }\n\n const create = param.input == null && param.element ? target : generate;\n create(bind, el, param, view);\n\n if (!bind.active) {\n view.on(view._signals[param.signal], null, () => {\n bind.source ? bind.source = false : bind.set(view.signal(param.signal));\n });\n bind.active = true;\n }\n\n return bind;\n}\n/**\n * Bind the signal to an external EventTarget.\n */\n\nfunction target(bind, node, param, view) {\n const type = param.event || 'input';\n\n const handler = () => bind.update(node.value); // initialize signal value to external input value\n\n\n view.signal(param.signal, node.value); // listen for changes on the element\n\n node.addEventListener(type, handler); // register with view, so we can remove it upon finalization\n\n trackEventListener(view, node, type, handler); // propagate change to element\n\n bind.set = value => {\n node.value = value;\n node.dispatchEvent(event(type));\n };\n}\n\nfunction event(type) {\n return typeof Event !== 'undefined' ? new Event(type) : {\n type\n };\n}\n/**\n * Generate an HTML input form element and bind it to a signal.\n */\n\n\nfunction generate(bind, el, param, view) {\n const value = view.signal(param.signal);\n const div = element('div', {\n 'class': BindClass\n });\n const wrapper = param.input === 'radio' ? div : div.appendChild(element('label'));\n wrapper.appendChild(element('span', {\n 'class': NameClass\n }, param.name || param.signal));\n el.appendChild(div);\n let input = form;\n\n switch (param.input) {\n case 'checkbox':\n input = checkbox;\n break;\n\n case 'select':\n input = select;\n break;\n\n case 'radio':\n input = radio;\n break;\n\n case 'range':\n input = range;\n break;\n }\n\n input(bind, wrapper, param, value);\n}\n/**\n * Generates an arbitrary input form element.\n * The input type is controlled via user-provided parameters.\n */\n\n\nfunction form(bind, el, param, value) {\n const node = element('input');\n\n for (const key in param) {\n if (key !== 'signal' && key !== 'element') {\n node.setAttribute(key === 'input' ? 'type' : key, param[key]);\n }\n }\n\n node.setAttribute('name', param.signal);\n node.value = value;\n el.appendChild(node);\n node.addEventListener('input', () => bind.update(node.value));\n bind.elements = [node];\n\n bind.set = value => node.value = value;\n}\n/**\n * Generates a checkbox input element.\n */\n\n\nfunction checkbox(bind, el, param, value) {\n const attr = {\n type: 'checkbox',\n name: param.signal\n };\n if (value) attr.checked = true;\n const node = element('input', attr);\n el.appendChild(node);\n node.addEventListener('change', () => bind.update(node.checked));\n bind.elements = [node];\n\n bind.set = value => node.checked = !!value || null;\n}\n/**\n * Generates a selection list input element.\n */\n\n\nfunction select(bind, el, param, value) {\n const node = element('select', {\n name: param.signal\n }),\n labels = param.labels || [];\n param.options.forEach((option, i) => {\n const attr = {\n value: option\n };\n if (valuesEqual(option, value)) attr.selected = true;\n node.appendChild(element('option', attr, (labels[i] || option) + ''));\n });\n el.appendChild(node);\n node.addEventListener('change', () => {\n bind.update(param.options[node.selectedIndex]);\n });\n bind.elements = [node];\n\n bind.set = value => {\n for (let i = 0, n = param.options.length; i < n; ++i) {\n if (valuesEqual(param.options[i], value)) {\n node.selectedIndex = i;\n return;\n }\n }\n };\n}\n/**\n * Generates a radio button group.\n */\n\n\nfunction radio(bind, el, param, value) {\n const group = element('span', {\n 'class': RadioClass\n }),\n labels = param.labels || [];\n el.appendChild(group);\n bind.elements = param.options.map((option, i) => {\n const attr = {\n type: 'radio',\n name: param.signal,\n value: option\n };\n if (valuesEqual(option, value)) attr.checked = true;\n const input = element('input', attr);\n input.addEventListener('change', () => bind.update(option));\n const label = element('label', {}, (labels[i] || option) + '');\n label.prepend(input);\n group.appendChild(label);\n return input;\n });\n\n bind.set = value => {\n const nodes = bind.elements,\n n = nodes.length;\n\n for (let i = 0; i < n; ++i) {\n if (valuesEqual(nodes[i].value, value)) nodes[i].checked = true;\n }\n };\n}\n/**\n * Generates a slider input element.\n */\n\n\nfunction range(bind, el, param, value) {\n value = value !== undefined ? value : (+param.max + +param.min) / 2;\n const max = param.max != null ? param.max : Math.max(100, +value) || 100,\n min = param.min || Math.min(0, max, +value) || 0,\n step = param.step || tickStep(min, max, 100);\n const node = element('input', {\n type: 'range',\n name: param.signal,\n min: min,\n max: max,\n step: step\n });\n node.value = value;\n const span = element('span', {}, +value);\n el.appendChild(node);\n el.appendChild(span);\n\n const update = () => {\n span.textContent = node.value;\n bind.update(+node.value);\n }; // subscribe to both input and change\n\n\n node.addEventListener('input', update);\n node.addEventListener('change', update);\n bind.elements = [node];\n\n bind.set = value => {\n node.value = value;\n span.textContent = value;\n };\n}\n\nfunction valuesEqual(a, b) {\n return a === b || a + '' === b + '';\n}\n\nfunction initializeRenderer (view, r, el, constructor, scaleFactor, opt) {\n r = r || new constructor(view.loader());\n return r.initialize(el, width(view), height(view), offset(view), scaleFactor, opt).background(view.background());\n}\n\nfunction trap (view, fn) {\n return !fn ? null : function () {\n try {\n fn.apply(this, arguments);\n } catch (error) {\n view.error(error);\n }\n };\n}\n\nfunction initializeHandler (view, prevHandler, el, constructor) {\n // instantiate scenegraph handler\n const handler = new constructor(view.loader(), trap(view, view.tooltip())).scene(view.scenegraph().root).initialize(el, offset(view), view); // transfer event handlers\n\n if (prevHandler) {\n prevHandler.handlers().forEach(h => {\n handler.on(h.type, h.handler);\n });\n }\n\n return handler;\n}\n\nfunction initialize (el, elBind) {\n const view = this,\n type = view._renderType,\n config = view._eventConfig.bind,\n module = renderModule(type); // containing dom element\n\n el = view._el = el ? lookup(view, el, true) : null; // initialize aria attributes\n\n initializeAria(view); // select appropriate renderer & handler\n\n if (!module) view.error('Unrecognized renderer type: ' + type);\n const Handler = module.handler || CanvasHandler,\n Renderer = el ? module.renderer : module.headless; // initialize renderer and input handler\n\n view._renderer = !Renderer ? null : initializeRenderer(view, view._renderer, el, Renderer);\n view._handler = initializeHandler(view, view._handler, el, Handler);\n view._redraw = true; // initialize signal bindings\n\n if (el && config !== 'none') {\n elBind = elBind ? view._elBind = lookup(view, elBind, true) : el.appendChild(element('form', {\n 'class': 'vega-bindings'\n }));\n\n view._bind.forEach(_ => {\n if (_.param.element && config !== 'container') {\n _.element = lookup(view, _.param.element, !!_.param.input);\n }\n });\n\n view._bind.forEach(_ => {\n bind(view, _.element || elBind, _);\n });\n }\n\n return view;\n}\n\nfunction lookup(view, el, clear) {\n if (typeof el === 'string') {\n if (typeof document !== 'undefined') {\n el = document.querySelector(el);\n\n if (!el) {\n view.error('Signal bind element not found: ' + el);\n return null;\n }\n } else {\n view.error('DOM document instance not found.');\n return null;\n }\n }\n\n if (el && clear) {\n try {\n el.innerHTML = '';\n } catch (e) {\n el = null;\n view.error(e);\n }\n }\n\n return el;\n}\n\nconst number = _ => +_ || 0;\n\nconst paddingObject = _ => ({\n top: _,\n bottom: _,\n left: _,\n right: _\n});\n\nfunction padding (_) {\n return isObject(_) ? {\n top: number(_.top),\n bottom: number(_.bottom),\n left: number(_.left),\n right: number(_.right)\n } : paddingObject(number(_));\n}\n\n/**\n * Render the current scene in a headless fashion.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A Promise that resolves to a renderer.\n */\n\nasync function renderHeadless (view, type, scaleFactor, opt) {\n const module = renderModule(type),\n ctr = module && module.headless;\n if (!ctr) error('Unrecognized renderer type: ' + type);\n await view.runAsync();\n return initializeRenderer(view, null, null, ctr, scaleFactor, opt).renderAsync(view._scenegraph.root);\n}\n\n/**\n * Produce an image URL for the visualization. Depending on the type\n * parameter, the generated URL contains data for either a PNG or SVG image.\n * The URL can be used (for example) to download images of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @param {string} type - The image type. One of 'svg', 'png' or 'canvas'.\n * The 'canvas' and 'png' types are synonyms for a PNG image.\n * @return {Promise} - A promise that resolves to an image URL.\n */\n\nasync function renderToImageURL (type, scaleFactor) {\n if (type !== RenderType.Canvas && type !== RenderType.SVG && type !== RenderType.PNG) {\n error('Unrecognized image type: ' + type);\n }\n\n const r = await renderHeadless(this, type, scaleFactor);\n return type === RenderType.SVG ? toBlobURL(r.svg(), 'image/svg+xml') : r.canvas().toDataURL('image/png');\n}\n\nfunction toBlobURL(data, mime) {\n const blob = new Blob([data], {\n type: mime\n });\n return window.URL.createObjectURL(blob);\n}\n\n/**\n * Produce a Canvas instance containing a rendered visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to a Canvas instance.\n */\n\nasync function renderToCanvas (scaleFactor, opt) {\n const r = await renderHeadless(this, RenderType.Canvas, scaleFactor, opt);\n return r.canvas();\n}\n\n/**\n * Produce a rendered SVG string of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to an SVG string.\n */\n\nasync function renderToSVG (scaleFactor) {\n const r = await renderHeadless(this, RenderType.SVG, scaleFactor);\n return r.svg();\n}\n\nfunction runtime (view, spec, expr) {\n return context(view, transforms, functionContext, expr).parse(spec);\n}\n\nfunction scale(name) {\n var scales = this._runtime.scales;\n\n if (!hasOwnProperty(scales, name)) {\n error('Unrecognized scale or projection: ' + name);\n }\n\n return scales[name].value;\n}\n\nvar Width = 'width',\n Height = 'height',\n Padding = 'padding',\n Skip = {\n skip: true\n};\nfunction viewWidth(view, width) {\n var a = view.autosize(),\n p = view.padding();\n return width - (a && a.contains === Padding ? p.left + p.right : 0);\n}\nfunction viewHeight(view, height) {\n var a = view.autosize(),\n p = view.padding();\n return height - (a && a.contains === Padding ? p.top + p.bottom : 0);\n}\nfunction initializeResize(view) {\n var s = view._signals,\n w = s[Width],\n h = s[Height],\n p = s[Padding];\n\n function resetSize() {\n view._autosize = view._resize = 1;\n } // respond to width signal\n\n\n view._resizeWidth = view.add(null, _ => {\n view._width = _.size;\n view._viewWidth = viewWidth(view, _.size);\n resetSize();\n }, {\n size: w\n }); // respond to height signal\n\n view._resizeHeight = view.add(null, _ => {\n view._height = _.size;\n view._viewHeight = viewHeight(view, _.size);\n resetSize();\n }, {\n size: h\n }); // respond to padding signal\n\n const resizePadding = view.add(null, resetSize, {\n pad: p\n }); // set rank to run immediately after source signal\n\n view._resizeWidth.rank = w.rank + 1;\n view._resizeHeight.rank = h.rank + 1;\n resizePadding.rank = p.rank + 1;\n}\nfunction resizeView(viewWidth, viewHeight, width, height, origin, auto) {\n this.runAfter(view => {\n let rerun = 0; // reset autosize flag\n\n view._autosize = 0; // width value changed: update signal, skip resize op\n\n if (view.width() !== width) {\n rerun = 1;\n view.signal(Width, width, Skip); // set width, skip update calc\n\n view._resizeWidth.skip(true); // skip width resize handler\n\n } // height value changed: update signal, skip resize op\n\n\n if (view.height() !== height) {\n rerun = 1;\n view.signal(Height, height, Skip); // set height, skip update calc\n\n view._resizeHeight.skip(true); // skip height resize handler\n\n } // view width changed: update view property, set resize flag\n\n\n if (view._viewWidth !== viewWidth) {\n view._resize = 1;\n view._viewWidth = viewWidth;\n } // view height changed: update view property, set resize flag\n\n\n if (view._viewHeight !== viewHeight) {\n view._resize = 1;\n view._viewHeight = viewHeight;\n } // origin changed: update view property, set resize flag\n\n\n if (view._origin[0] !== origin[0] || view._origin[1] !== origin[1]) {\n view._resize = 1;\n view._origin = origin;\n } // run dataflow on width/height signal change\n\n\n if (rerun) view.run('enter');\n if (auto) view.runAfter(v => v.resize());\n }, false, 1);\n}\n\n/**\n * Get the current view state, consisting of signal values and/or data sets.\n * @param {object} [options] - Options flags indicating which state to export.\n * If unspecified, all signals and data sets will be exported.\n * @param {function(string, Operator):boolean} [options.signals] - Optional\n * predicate function for testing if a signal should be included in the\n * exported state. If unspecified, all signals will be included, except for\n * those named 'parent' or those which refer to a Transform value.\n * @param {function(string, object):boolean} [options.data] - Optional\n * predicate function for testing if a data set's input should be included\n * in the exported state. If unspecified, all data sets that have been\n * explicitly modified will be included.\n * @param {boolean} [options.recurse=true] - Flag indicating if the exported\n * state should recursively include state from group mark sub-contexts.\n * @return {object} - An object containing the exported state values.\n */\n\nfunction getState(options) {\n return this._runtime.getState(options || {\n data: dataTest,\n signals: signalTest,\n recurse: true\n });\n}\n\nfunction dataTest(name, data) {\n return data.modified && isArray(data.input.value) && name.indexOf('_:vega:_');\n}\n\nfunction signalTest(name, op) {\n return !(name === 'parent' || op instanceof transforms.proxy);\n}\n/**\n * Sets the current view state and updates the view by invoking run.\n * @param {object} state - A state object containing signal and/or\n * data set values, following the format used by the getState method.\n * @return {View} - This view instance.\n */\n\n\nfunction setState(state) {\n this.runAsync(null, v => {\n v._trigger = false;\n\n v._runtime.setState(state);\n }, v => {\n v._trigger = true;\n });\n return this;\n}\n\nfunction timer (callback, delay) {\n function tick(elapsed) {\n callback({\n timestamp: Date.now(),\n elapsed: elapsed\n });\n }\n\n this._timers.push(interval(tick, delay));\n}\n\nfunction defaultTooltip (handler, event, item, value) {\n const el = handler.element();\n if (el) el.setAttribute('title', formatTooltip(value));\n}\n\nfunction formatTooltip(value) {\n return value == null ? '' : isArray(value) ? formatArray(value) : isObject(value) && !isDate(value) ? formatObject(value) : value + '';\n}\n\nfunction formatObject(obj) {\n return Object.keys(obj).map(key => {\n const v = obj[key];\n return key + ': ' + (isArray(v) ? formatArray(v) : formatValue(v));\n }).join('\\n');\n}\n\nfunction formatArray(value) {\n return '[' + value.map(formatValue).join(', ') + ']';\n}\n\nfunction formatValue(value) {\n return isArray(value) ? '[\\u2026]' : isObject(value) && !isDate(value) ? '{\\u2026}' : value;\n}\n\n/**\n * Create a new View instance from a Vega dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be performed upon dataflow runs.\n * @constructor\n * @param {object} spec - The Vega dataflow runtime specification.\n */\n\nfunction View(spec, options) {\n const view = this;\n options = options || {};\n Dataflow.call(view);\n if (options.loader) view.loader(options.loader);\n if (options.logger) view.logger(options.logger);\n if (options.logLevel != null) view.logLevel(options.logLevel);\n\n if (options.locale || spec.locale) {\n const loc = extend({}, spec.locale, options.locale);\n view.locale(locale(loc.number, loc.time));\n }\n\n view._el = null;\n view._elBind = null;\n view._renderType = options.renderer || RenderType.Canvas;\n view._scenegraph = new Scenegraph();\n const root = view._scenegraph.root; // initialize renderer, handler and event management\n\n view._renderer = null;\n view._tooltip = options.tooltip || defaultTooltip, view._redraw = true;\n view._handler = new CanvasHandler().scene(root);\n view._globalCursor = false;\n view._preventDefault = false;\n view._timers = [];\n view._eventListeners = [];\n view._resizeListeners = []; // initialize event configuration\n\n view._eventConfig = initializeEventConfig(spec.eventConfig);\n view.globalCursor(view._eventConfig.globalCursor); // initialize dataflow graph\n\n const ctx = runtime(view, spec, options.expr);\n view._runtime = ctx;\n view._signals = ctx.signals;\n view._bind = (spec.bindings || []).map(_ => ({\n state: null,\n param: extend({}, _)\n })); // initialize scenegraph\n\n if (ctx.root) ctx.root.set(root);\n root.source = ctx.data.root.input;\n view.pulse(ctx.data.root.input, view.changeset().insert(root.items)); // initialize view size\n\n view._width = view.width();\n view._height = view.height();\n view._viewWidth = viewWidth(view, view._width);\n view._viewHeight = viewHeight(view, view._height);\n view._origin = [0, 0];\n view._resize = 0;\n view._autosize = 1;\n initializeResize(view); // initialize background color\n\n background(view); // initialize cursor\n\n cursor(view); // initialize view description\n\n view.description(spec.description); // initialize hover proessing, if requested\n\n if (options.hover) view.hover(); // initialize DOM container(s) and renderer\n\n if (options.container) view.initialize(options.container, options.bind);\n}\n\nfunction lookupSignal(view, name) {\n return hasOwnProperty(view._signals, name) ? view._signals[name] : error('Unrecognized signal name: ' + stringValue(name));\n}\n\nfunction findOperatorHandler(op, handler) {\n const h = (op._targets || []).filter(op => op._update && op._update.handler === handler);\n return h.length ? h[0] : null;\n}\n\nfunction addOperatorListener(view, name, op, handler) {\n let h = findOperatorHandler(op, handler);\n\n if (!h) {\n h = trap(view, () => handler(name, op.value));\n h.handler = handler;\n view.on(op, null, h);\n }\n\n return view;\n}\n\nfunction removeOperatorListener(view, op, handler) {\n const h = findOperatorHandler(op, handler);\n if (h) op._targets.remove(h);\n return view;\n}\n\ninherits(View, Dataflow, {\n // -- DATAFLOW / RENDERING ----\n async evaluate(encode, prerun, postrun) {\n // evaluate dataflow and prerun\n await Dataflow.prototype.evaluate.call(this, encode, prerun); // render as needed\n\n if (this._redraw || this._resize) {\n try {\n if (this._renderer) {\n if (this._resize) {\n this._resize = 0;\n resizeRenderer(this);\n }\n\n await this._renderer.renderAsync(this._scenegraph.root);\n }\n\n this._redraw = false;\n } catch (e) {\n this.error(e);\n }\n } // evaluate postrun\n\n\n if (postrun) asyncCallback(this, postrun);\n return this;\n },\n\n dirty(item) {\n this._redraw = true;\n this._renderer && this._renderer.dirty(item);\n },\n\n // -- GET / SET ----\n description(text) {\n if (arguments.length) {\n const desc = text != null ? text + '' : null;\n if (desc !== this._desc) ariaLabel(this._el, this._desc = desc);\n return this;\n }\n\n return this._desc;\n },\n\n container() {\n return this._el;\n },\n\n scenegraph() {\n return this._scenegraph;\n },\n\n origin() {\n return this._origin.slice();\n },\n\n signal(name, value, options) {\n const op = lookupSignal(this, name);\n return arguments.length === 1 ? op.value : this.update(op, value, options);\n },\n\n width(_) {\n return arguments.length ? this.signal('width', _) : this.signal('width');\n },\n\n height(_) {\n return arguments.length ? this.signal('height', _) : this.signal('height');\n },\n\n padding(_) {\n return arguments.length ? this.signal('padding', padding(_)) : padding(this.signal('padding'));\n },\n\n autosize(_) {\n return arguments.length ? this.signal('autosize', _) : this.signal('autosize');\n },\n\n background(_) {\n return arguments.length ? this.signal('background', _) : this.signal('background');\n },\n\n renderer(type) {\n if (!arguments.length) return this._renderType;\n if (!renderModule(type)) error('Unrecognized renderer type: ' + type);\n\n if (type !== this._renderType) {\n this._renderType = type;\n\n this._resetRenderer();\n }\n\n return this;\n },\n\n tooltip(handler) {\n if (!arguments.length) return this._tooltip;\n\n if (handler !== this._tooltip) {\n this._tooltip = handler;\n\n this._resetRenderer();\n }\n\n return this;\n },\n\n loader(loader) {\n if (!arguments.length) return this._loader;\n\n if (loader !== this._loader) {\n Dataflow.prototype.loader.call(this, loader);\n\n this._resetRenderer();\n }\n\n return this;\n },\n\n resize() {\n // set flag to perform autosize\n this._autosize = 1; // touch autosize signal to ensure top-level ViewLayout runs\n\n return this.touch(lookupSignal(this, 'autosize'));\n },\n\n _resetRenderer() {\n if (this._renderer) {\n this._renderer = null;\n this.initialize(this._el, this._elBind);\n }\n },\n\n // -- SIZING ----\n _resizeView: resizeView,\n\n // -- EVENT HANDLING ----\n addEventListener(type, handler, options) {\n let callback = handler;\n\n if (!(options && options.trap === false)) {\n // wrap callback in error handler\n callback = trap(this, handler);\n callback.raw = handler;\n }\n\n this._handler.on(type, callback);\n\n return this;\n },\n\n removeEventListener(type, handler) {\n var handlers = this._handler.handlers(type),\n i = handlers.length,\n h,\n t; // search registered handlers, remove if match found\n\n\n while (--i >= 0) {\n t = handlers[i].type;\n h = handlers[i].handler;\n\n if (type === t && (handler === h || handler === h.raw)) {\n this._handler.off(t, h);\n\n break;\n }\n }\n\n return this;\n },\n\n addResizeListener(handler) {\n const l = this._resizeListeners;\n\n if (l.indexOf(handler) < 0) {\n // add handler if it isn't already registered\n // note: error trapping handled elsewhere, so\n // no need to wrap handlers here\n l.push(handler);\n }\n\n return this;\n },\n\n removeResizeListener(handler) {\n var l = this._resizeListeners,\n i = l.indexOf(handler);\n\n if (i >= 0) {\n l.splice(i, 1);\n }\n\n return this;\n },\n\n addSignalListener(name, handler) {\n return addOperatorListener(this, name, lookupSignal(this, name), handler);\n },\n\n removeSignalListener(name, handler) {\n return removeOperatorListener(this, lookupSignal(this, name), handler);\n },\n\n addDataListener(name, handler) {\n return addOperatorListener(this, name, dataref(this, name).values, handler);\n },\n\n removeDataListener(name, handler) {\n return removeOperatorListener(this, dataref(this, name).values, handler);\n },\n\n globalCursor(_) {\n if (arguments.length) {\n if (this._globalCursor !== !!_) {\n const prev = setCursor(this, null); // clear previous cursor\n\n this._globalCursor = !!_;\n if (prev) setCursor(this, prev); // swap cursor\n }\n\n return this;\n } else {\n return this._globalCursor;\n }\n },\n\n preventDefault(_) {\n if (arguments.length) {\n this._preventDefault = _;\n return this;\n } else {\n return this._preventDefault;\n }\n },\n\n timer,\n events,\n finalize,\n hover,\n // -- DATA ----\n data,\n change,\n insert,\n remove,\n // -- SCALES --\n scale,\n // -- INITIALIZATION ----\n initialize,\n // -- HEADLESS RENDERING ----\n toImageURL: renderToImageURL,\n toCanvas: renderToCanvas,\n toSVG: renderToSVG,\n // -- SAVE / RESTORE STATE ----\n getState,\n setState\n});\n\nexport { View };\n","import {Timer, now} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer, total = delay;\n if (delay == null) return t.restart(callback, delay, time), t;\n t._restart = t.restart;\n t.restart = function(callback, delay, time) {\n delay = +delay, time = time == null ? now() : +time;\n t._restart(function tick(elapsed) {\n elapsed += total;\n t._restart(tick, total += delay, time);\n callback(elapsed);\n }, delay, time);\n }\n t.restart(callback, delay, time);\n return t;\n}\n","const VIEW = 'view',\n LBRACK = '[',\n RBRACK = ']',\n LBRACE = '{',\n RBRACE = '}',\n COLON = ':',\n COMMA = ',',\n NAME = '@',\n GT = '>',\n ILLEGAL = /[[\\]{}]/,\n DEFAULT_MARKS = {\n '*': 1,\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n};\nlet DEFAULT_SOURCE, MARKS;\n/**\n * Parse an event selector string.\n * Returns an array of event stream definitions.\n */\n\nfunction eventSelector (selector, source, marks) {\n DEFAULT_SOURCE = source || VIEW;\n MARKS = marks || DEFAULT_MARKS;\n return parseMerge(selector.trim()).map(parseSelector);\n}\n\nfunction isMarkType(type) {\n return MARKS[type];\n}\n\nfunction find(s, i, endChar, pushChar, popChar) {\n const n = s.length;\n let count = 0,\n c;\n\n for (; i < n; ++i) {\n c = s[i];\n if (!count && c === endChar) return i;else if (popChar && popChar.indexOf(c) >= 0) --count;else if (pushChar && pushChar.indexOf(c) >= 0) ++count;\n }\n\n return i;\n}\n\nfunction parseMerge(s) {\n const output = [],\n n = s.length;\n let start = 0,\n i = 0;\n\n while (i < n) {\n i = find(s, i, COMMA, LBRACK + LBRACE, RBRACK + RBRACE);\n output.push(s.substring(start, i).trim());\n start = ++i;\n }\n\n if (output.length === 0) {\n throw 'Empty event selector: ' + s;\n }\n\n return output;\n}\n\nfunction parseSelector(s) {\n return s[0] === '[' ? parseBetween(s) : parseStream(s);\n}\n\nfunction parseBetween(s) {\n const n = s.length;\n let i = 1,\n b;\n i = find(s, i, RBRACK, LBRACK, RBRACK);\n\n if (i === n) {\n throw 'Empty between selector: ' + s;\n }\n\n b = parseMerge(s.substring(1, i));\n\n if (b.length !== 2) {\n throw 'Between selector must have two elements: ' + s;\n }\n\n s = s.slice(i + 1).trim();\n\n if (s[0] !== GT) {\n throw 'Expected \\'>\\' after between selector: ' + s;\n }\n\n b = b.map(parseSelector);\n const stream = parseSelector(s.slice(1).trim());\n\n if (stream.between) {\n return {\n between: b,\n stream: stream\n };\n } else {\n stream.between = b;\n }\n\n return stream;\n}\n\nfunction parseStream(s) {\n const stream = {\n source: DEFAULT_SOURCE\n },\n source = [];\n let throttle = [0, 0],\n markname = 0,\n start = 0,\n n = s.length,\n i = 0,\n j,\n filter; // extract throttle from end\n\n if (s[n - 1] === RBRACE) {\n i = s.lastIndexOf(LBRACE);\n\n if (i >= 0) {\n try {\n throttle = parseThrottle(s.substring(i + 1, n - 1));\n } catch (e) {\n throw 'Invalid throttle specification: ' + s;\n }\n\n s = s.slice(0, i).trim();\n n = s.length;\n } else throw 'Unmatched right brace: ' + s;\n\n i = 0;\n }\n\n if (!n) throw s; // set name flag based on first char\n\n if (s[0] === NAME) markname = ++i; // extract first part of multi-part stream selector\n\n j = find(s, i, COLON);\n\n if (j < n) {\n source.push(s.substring(start, j).trim());\n start = i = ++j;\n } // extract remaining part of stream selector\n\n\n i = find(s, i, LBRACK);\n\n if (i === n) {\n source.push(s.substring(start, n).trim());\n } else {\n source.push(s.substring(start, i).trim());\n filter = [];\n start = ++i;\n if (start === n) throw 'Unmatched left bracket: ' + s;\n } // extract filters\n\n\n while (i < n) {\n i = find(s, i, RBRACK);\n if (i === n) throw 'Unmatched left bracket: ' + s;\n filter.push(s.substring(start, i).trim());\n if (i < n - 1 && s[++i] !== LBRACK) throw 'Expected left bracket: ' + s;\n start = ++i;\n } // marshall event stream specification\n\n\n if (!(n = source.length) || ILLEGAL.test(source[n - 1])) {\n throw 'Invalid event selector: ' + s;\n }\n\n if (n > 1) {\n stream.type = source[1];\n\n if (markname) {\n stream.markname = source[0].slice(1);\n } else if (isMarkType(source[0])) {\n stream.marktype = source[0];\n } else {\n stream.source = source[0];\n }\n } else {\n stream.type = source[0];\n }\n\n if (stream.type.slice(-1) === '!') {\n stream.consume = true;\n stream.type = stream.type.slice(0, -1);\n }\n\n if (filter != null) stream.filter = filter;\n if (throttle[0]) stream.throttle = throttle[0];\n if (throttle[1]) stream.debounce = throttle[1];\n return stream;\n}\n\nfunction parseThrottle(s) {\n const a = s.split(COMMA);\n if (!s.length || a.length > 2) throw s;\n return a.map(_ => {\n const x = +_;\n if (x !== x) throw s;\n return x;\n });\n}\n\nexport { eventSelector as selector };\n","import { isObject, isArray, extend, hasOwnProperty, array, stringValue, peek, isString, error, splitAccessPath, mergeConfig } from 'vega-util';\nimport { parseExpression } from 'vega-functions';\nimport { selector } from 'vega-event-selector';\nimport { isValidScaleType, isDiscrete, isQuantile, isDiscretizing, isContinuous } from 'vega-scale';\nimport { definition as definition$1 } from 'vega-dataflow';\n\nfunction parseAutosize (spec) {\n return isObject(spec) ? spec : {\n type: spec || 'pad'\n };\n}\n\nconst number = _ => +_ || 0;\n\nconst paddingObject = _ => ({\n top: _,\n bottom: _,\n left: _,\n right: _\n});\n\nfunction parsePadding (spec) {\n return !isObject(spec) ? paddingObject(number(spec)) : spec.signal ? spec : {\n top: number(spec.top),\n bottom: number(spec.bottom),\n left: number(spec.left),\n right: number(spec.right)\n };\n}\n\nconst encoder = _ => isObject(_) && !isArray(_) ? extend({}, _) : {\n value: _\n};\nfunction addEncode(object, name, value, set) {\n if (value != null) {\n const isEncoder = isObject(value) && !isArray(value) || isArray(value) && value.length && isObject(value[0]); // Always assign signal to update, even if the signal is from the enter block\n\n if (isEncoder) {\n object.update[name] = value;\n } else {\n object[set || 'enter'][name] = {\n value: value\n };\n }\n\n return 1;\n } else {\n return 0;\n }\n}\nfunction addEncoders(object, enter, update) {\n for (const name in enter) {\n addEncode(object, name, enter[name]);\n }\n\n for (const name in update) {\n addEncode(object, name, update[name], 'update');\n }\n}\nfunction extendEncode(encode, extra, skip) {\n for (const name in extra) {\n if (skip && hasOwnProperty(skip, name)) continue;\n encode[name] = extend(encode[name] || {}, extra[name]);\n }\n\n return encode;\n}\nfunction has(key, encode) {\n return encode && (encode.enter && encode.enter[key] || encode.update && encode.update[key]);\n}\n\nconst MarkRole = 'mark';\nconst FrameRole = 'frame';\nconst ScopeRole = 'scope';\nconst AxisRole = 'axis';\nconst AxisDomainRole = 'axis-domain';\nconst AxisGridRole = 'axis-grid';\nconst AxisLabelRole = 'axis-label';\nconst AxisTickRole = 'axis-tick';\nconst AxisTitleRole = 'axis-title';\nconst LegendRole = 'legend';\nconst LegendBandRole = 'legend-band';\nconst LegendEntryRole = 'legend-entry';\nconst LegendGradientRole = 'legend-gradient';\nconst LegendLabelRole = 'legend-label';\nconst LegendSymbolRole = 'legend-symbol';\nconst LegendTitleRole = 'legend-title';\nconst TitleRole = 'title';\nconst TitleTextRole = 'title-text';\nconst TitleSubtitleRole = 'title-subtitle';\n\nfunction applyDefaults (encode, type, role, style, config) {\n const defaults = {},\n enter = {};\n let update, key, skip, props; // if text mark, apply global lineBreak settings (#2370)\n\n key = 'lineBreak';\n\n if (type === 'text' && config[key] != null && !has(key, encode)) {\n applyDefault(defaults, key, config[key]);\n } // ignore legend and axis roles\n\n\n if (role == 'legend' || String(role).startsWith('axis')) {\n role = null;\n } // resolve mark config\n\n\n props = role === FrameRole ? config.group : role === MarkRole ? extend({}, config.mark, config[type]) : null;\n\n for (key in props) {\n // do not apply defaults if relevant fields are defined\n skip = has(key, encode) || (key === 'fill' || key === 'stroke') && (has('fill', encode) || has('stroke', encode));\n if (!skip) applyDefault(defaults, key, props[key]);\n } // resolve styles, apply with increasing precedence\n\n\n array(style).forEach(name => {\n const props = config.style && config.style[name];\n\n for (const key in props) {\n if (!has(key, encode)) {\n applyDefault(defaults, key, props[key]);\n }\n }\n });\n encode = extend({}, encode); // defensive copy\n\n for (key in defaults) {\n props = defaults[key];\n\n if (props.signal) {\n (update = update || {})[key] = props;\n } else {\n enter[key] = props;\n }\n }\n\n encode.enter = extend(enter, encode.enter);\n if (update) encode.update = extend(update, encode.update);\n return encode;\n}\n\nfunction applyDefault(defaults, key, value) {\n defaults[key] = value && value.signal ? {\n signal: value.signal\n } : {\n value: value\n };\n}\n\nconst scaleRef = scale => isString(scale) ? stringValue(scale) : scale.signal ? `(${scale.signal})` : field(scale);\n\nfunction entry$1(enc) {\n if (enc.gradient != null) {\n return gradient(enc);\n }\n\n let value = enc.signal ? `(${enc.signal})` : enc.color ? color(enc.color) : enc.field != null ? field(enc.field) : enc.value !== undefined ? stringValue(enc.value) : undefined;\n\n if (enc.scale != null) {\n value = scale(enc, value);\n }\n\n if (value === undefined) {\n value = null;\n }\n\n if (enc.exponent != null) {\n value = `pow(${value},${property(enc.exponent)})`;\n }\n\n if (enc.mult != null) {\n value += `*${property(enc.mult)}`;\n }\n\n if (enc.offset != null) {\n value += `+${property(enc.offset)}`;\n }\n\n if (enc.round) {\n value = `round(${value})`;\n }\n\n return value;\n}\n\nconst _color = (type, x, y, z) => `(${type}(${[x, y, z].map(entry$1).join(',')})+'')`;\n\nfunction color(enc) {\n return enc.c ? _color('hcl', enc.h, enc.c, enc.l) : enc.h || enc.s ? _color('hsl', enc.h, enc.s, enc.l) : enc.l || enc.a ? _color('lab', enc.l, enc.a, enc.b) : enc.r || enc.g || enc.b ? _color('rgb', enc.r, enc.g, enc.b) : null;\n}\n\nfunction gradient(enc) {\n // map undefined to null; expression lang does not allow undefined\n const args = [enc.start, enc.stop, enc.count].map(_ => _ == null ? null : stringValue(_)); // trim null inputs from the end\n\n while (args.length && peek(args) == null) args.pop();\n\n args.unshift(scaleRef(enc.gradient));\n return `gradient(${args.join(',')})`;\n}\n\nfunction property(property) {\n return isObject(property) ? '(' + entry$1(property) + ')' : property;\n}\n\nfunction field(ref) {\n return resolveField(isObject(ref) ? ref : {\n datum: ref\n });\n}\n\nfunction resolveField(ref) {\n let object, level, field;\n\n if (ref.signal) {\n object = 'datum';\n field = ref.signal;\n } else if (ref.group || ref.parent) {\n level = Math.max(1, ref.level || 1);\n object = 'item';\n\n while (level-- > 0) {\n object += '.mark.group';\n }\n\n if (ref.parent) {\n field = ref.parent;\n object += '.datum';\n } else {\n field = ref.group;\n }\n } else if (ref.datum) {\n object = 'datum';\n field = ref.datum;\n } else {\n error('Invalid field reference: ' + stringValue(ref));\n }\n\n if (!ref.signal) {\n field = isString(field) ? splitAccessPath(field).map(stringValue).join('][') : resolveField(field);\n }\n\n return object + '[' + field + ']';\n}\n\nfunction scale(enc, value) {\n const scale = scaleRef(enc.scale);\n\n if (enc.range != null) {\n // pull value from scale range\n value = `lerp(_range(${scale}), ${+enc.range})`;\n } else {\n // run value through scale and/or pull scale bandwidth\n if (value !== undefined) value = `_scale(${scale}, ${value})`;\n\n if (enc.band) {\n value = (value ? value + '+' : '') + `_bandwidth(${scale})` + (+enc.band === 1 ? '' : '*' + property(enc.band));\n\n if (enc.extra) {\n // include logic to handle extraneous elements\n value = `(datum.extra ? _scale(${scale}, datum.extra.value) : ${value})`;\n }\n }\n\n if (value == null) value = '0';\n }\n\n return value;\n}\n\nfunction rule (enc) {\n let code = '';\n enc.forEach(rule => {\n const value = entry$1(rule);\n code += rule.test ? `(${rule.test})?${value}:` : value;\n }); // if no else clause, terminate with null (#1366)\n\n if (peek(code) === ':') {\n code += 'null';\n }\n\n return code;\n}\n\nfunction parseEncode (encode, type, role, style, scope, params) {\n const enc = {};\n params = params || {};\n params.encoders = {\n $encode: enc\n };\n encode = applyDefaults(encode, type, role, style, scope.config);\n\n for (const key in encode) {\n enc[key] = parseBlock(encode[key], type, params, scope);\n }\n\n return params;\n}\n\nfunction parseBlock(block, marktype, params, scope) {\n const channels = {},\n fields = {};\n\n for (const name in block) {\n if (block[name] != null) {\n // skip any null entries\n channels[name] = parse$1(expr(block[name]), scope, params, fields);\n }\n }\n\n return {\n $expr: {\n marktype,\n channels\n },\n $fields: Object.keys(fields),\n $output: Object.keys(block)\n };\n}\n\nfunction expr(enc) {\n return isArray(enc) ? rule(enc) : entry$1(enc);\n}\n\nfunction parse$1(code, scope, params, fields) {\n const expr = parseExpression(code, scope);\n expr.$fields.forEach(name => fields[name] = 1);\n extend(params, expr.$params);\n return expr.$expr;\n}\n\nconst OUTER = 'outer',\n OUTER_INVALID = ['value', 'update', 'init', 'react', 'bind'];\n\nfunction outerError(prefix, name) {\n error(prefix + ' for \"outer\" push: ' + stringValue(name));\n}\n\nfunction parseSignal (signal, scope) {\n const name = signal.name;\n\n if (signal.push === OUTER) {\n // signal must already be defined, raise error if not\n if (!scope.signals[name]) outerError('No prior signal definition', name); // signal push must not use properties reserved for standard definition\n\n OUTER_INVALID.forEach(prop => {\n if (signal[prop] !== undefined) outerError('Invalid property ', prop);\n });\n } else {\n // define a new signal in the current scope\n const op = scope.addSignal(name, signal.value);\n if (signal.react === false) op.react = false;\n if (signal.bind) scope.addBinding(name, signal.bind);\n }\n}\n\nfunction Entry(type, value, params, parent) {\n this.id = -1;\n this.type = type;\n this.value = value;\n this.params = params;\n if (parent) this.parent = parent;\n}\nfunction entry(type, value, params, parent) {\n return new Entry(type, value, params, parent);\n}\nfunction operator(value, params) {\n return entry('operator', value, params);\n} // -----\n\nfunction ref(op) {\n const ref = {\n $ref: op.id\n }; // if operator not yet registered, cache ref to resolve later\n\n if (op.id < 0) (op.refs = op.refs || []).push(ref);\n return ref;\n}\nfunction fieldRef$1(field, name) {\n return name ? {\n $field: field,\n $name: name\n } : {\n $field: field\n };\n}\nconst keyFieldRef = fieldRef$1('key');\nfunction compareRef(fields, orders) {\n return {\n $compare: fields,\n $order: orders\n };\n}\nfunction keyRef(fields, flat) {\n const ref = {\n $key: fields\n };\n if (flat) ref.$flat = true;\n return ref;\n} // -----\n\nconst Ascending = 'ascending';\nconst Descending = 'descending';\nfunction sortKey(sort) {\n return !isObject(sort) ? '' : (sort.order === Descending ? '-' : '+') + aggrField(sort.op, sort.field);\n}\nfunction aggrField(op, field) {\n return (op && op.signal ? '$' + op.signal : op || '') + (op && field ? '_' : '') + (field && field.signal ? '$' + field.signal : field || '');\n} // -----\n\nconst Scope$1 = 'scope';\nconst View = 'view';\nfunction isSignal(_) {\n return _ && _.signal;\n}\nfunction isExpr$1(_) {\n return _ && _.expr;\n}\nfunction hasSignal(_) {\n if (isSignal(_)) return true;\n if (isObject(_)) for (const key in _) {\n if (hasSignal(_[key])) return true;\n }\n return false;\n}\nfunction value(specValue, defaultValue) {\n return specValue != null ? specValue : defaultValue;\n}\nfunction deref(v) {\n return v && v.signal || v;\n}\n\nconst Timer = 'timer';\nfunction parseStream(stream, scope) {\n const method = stream.merge ? mergeStream : stream.stream ? nestedStream : stream.type ? eventStream : error('Invalid stream specification: ' + stringValue(stream));\n return method(stream, scope);\n}\n\nfunction eventSource(source) {\n return source === Scope$1 ? View : source || View;\n}\n\nfunction mergeStream(stream, scope) {\n const list = stream.merge.map(s => parseStream(s, scope)),\n entry = streamParameters({\n merge: list\n }, stream, scope);\n return scope.addStream(entry).id;\n}\n\nfunction nestedStream(stream, scope) {\n const id = parseStream(stream.stream, scope),\n entry = streamParameters({\n stream: id\n }, stream, scope);\n return scope.addStream(entry).id;\n}\n\nfunction eventStream(stream, scope) {\n let id;\n\n if (stream.type === Timer) {\n id = scope.event(Timer, stream.throttle);\n stream = {\n between: stream.between,\n filter: stream.filter\n };\n } else {\n id = scope.event(eventSource(stream.source), stream.type);\n }\n\n const entry = streamParameters({\n stream: id\n }, stream, scope);\n return Object.keys(entry).length === 1 ? id : scope.addStream(entry).id;\n}\n\nfunction streamParameters(entry, stream, scope) {\n let param = stream.between;\n\n if (param) {\n if (param.length !== 2) {\n error('Stream \"between\" parameter must have 2 entries: ' + stringValue(stream));\n }\n\n entry.between = [parseStream(param[0], scope), parseStream(param[1], scope)];\n }\n\n param = stream.filter ? [].concat(stream.filter) : [];\n\n if (stream.marktype || stream.markname || stream.markrole) {\n // add filter for mark type, name and/or role\n param.push(filterMark(stream.marktype, stream.markname, stream.markrole));\n }\n\n if (stream.source === Scope$1) {\n // add filter to limit events from sub-scope only\n param.push('inScope(event.item)');\n }\n\n if (param.length) {\n entry.filter = parseExpression('(' + param.join(')&&(') + ')', scope).$expr;\n }\n\n if ((param = stream.throttle) != null) {\n entry.throttle = +param;\n }\n\n if ((param = stream.debounce) != null) {\n entry.debounce = +param;\n }\n\n if (stream.consume) {\n entry.consume = true;\n }\n\n return entry;\n}\n\nfunction filterMark(type, name, role) {\n const item = 'event.item';\n return item + (type && type !== '*' ? '&&' + item + '.mark.marktype===\\'' + type + '\\'' : '') + (role ? '&&' + item + '.mark.role===\\'' + role + '\\'' : '') + (name ? '&&' + item + '.mark.name===\\'' + name + '\\'' : '');\n}\n\nconst OP_VALUE_EXPR = {\n code: '_.$value',\n ast: {\n type: 'Identifier',\n value: 'value'\n }\n};\nfunction parseUpdate (spec, scope, target) {\n const encode = spec.encode,\n entry = {\n target: target\n };\n let events = spec.events,\n update = spec.update,\n sources = [];\n\n if (!events) {\n error('Signal update missing events specification.');\n } // interpret as an event selector string\n\n\n if (isString(events)) {\n events = selector(events, scope.isSubscope() ? Scope$1 : View);\n } // separate event streams from signal updates\n\n\n events = array(events).filter(s => s.signal || s.scale ? (sources.push(s), 0) : 1); // merge internal operator listeners\n\n if (sources.length > 1) {\n sources = [mergeSources(sources)];\n } // merge event streams, include as source\n\n\n if (events.length) {\n sources.push(events.length > 1 ? {\n merge: events\n } : events[0]);\n }\n\n if (encode != null) {\n if (update) error('Signal encode and update are mutually exclusive.');\n update = 'encode(item(),' + stringValue(encode) + ')';\n } // resolve update value\n\n\n entry.update = isString(update) ? parseExpression(update, scope) : update.expr != null ? parseExpression(update.expr, scope) : update.value != null ? update.value : update.signal != null ? {\n $expr: OP_VALUE_EXPR,\n $params: {\n $value: scope.signalRef(update.signal)\n }\n } : error('Invalid signal update specification.');\n\n if (spec.force) {\n entry.options = {\n force: true\n };\n }\n\n sources.forEach(source => scope.addUpdate(extend(streamSource(source, scope), entry)));\n}\n\nfunction streamSource(stream, scope) {\n return {\n source: stream.signal ? scope.signalRef(stream.signal) : stream.scale ? scope.scaleRef(stream.scale) : parseStream(stream, scope)\n };\n}\n\nfunction mergeSources(sources) {\n return {\n signal: '[' + sources.map(s => s.scale ? 'scale(\"' + s.scale + '\")' : s.signal) + ']'\n };\n}\n\nfunction parseSignalUpdates (signal, scope) {\n const op = scope.getSignal(signal.name);\n let expr = signal.update;\n\n if (signal.init) {\n if (expr) {\n error('Signals can not include both init and update expressions.');\n } else {\n expr = signal.init;\n op.initonly = true;\n }\n }\n\n if (expr) {\n expr = parseExpression(expr, scope);\n op.update = expr.$expr;\n op.params = expr.$params;\n }\n\n if (signal.on) {\n signal.on.forEach(_ => parseUpdate(_, scope, op.id));\n }\n}\n\nconst transform = name => (params, value, parent) => entry(name, value, params || undefined, parent);\n\nconst Aggregate = transform('aggregate');\nconst AxisTicks = transform('axisticks');\nconst Bound = transform('bound');\nconst Collect = transform('collect');\nconst Compare = transform('compare');\nconst DataJoin = transform('datajoin');\nconst Encode = transform('encode');\nconst Expression = transform('expression');\nconst Facet = transform('facet');\nconst Field = transform('field');\nconst Key = transform('key');\nconst LegendEntries = transform('legendentries');\nconst Load = transform('load');\nconst Mark = transform('mark');\nconst MultiExtent = transform('multiextent');\nconst MultiValues = transform('multivalues');\nconst Overlap = transform('overlap');\nconst Params = transform('params');\nconst PreFacet = transform('prefacet');\nconst Projection = transform('projection');\nconst Proxy = transform('proxy');\nconst Relay = transform('relay');\nconst Render = transform('render');\nconst Scale = transform('scale');\nconst Sieve = transform('sieve');\nconst SortItems = transform('sortitems');\nconst ViewLayout = transform('viewlayout');\nconst Values = transform('values');\n\nlet FIELD_REF_ID = 0;\nconst MULTIDOMAIN_SORT_OPS = {\n min: 'min',\n max: 'max',\n count: 'sum'\n};\nfunction initScale(spec, scope) {\n const type = spec.type || 'linear';\n\n if (!isValidScaleType(type)) {\n error('Unrecognized scale type: ' + stringValue(type));\n }\n\n scope.addScale(spec.name, {\n type,\n domain: undefined\n });\n}\nfunction parseScale(spec, scope) {\n const params = scope.getScale(spec.name).params;\n let key;\n params.domain = parseScaleDomain(spec.domain, spec, scope);\n\n if (spec.range != null) {\n params.range = parseScaleRange(spec, scope, params);\n }\n\n if (spec.interpolate != null) {\n parseScaleInterpolate(spec.interpolate, params);\n }\n\n if (spec.nice != null) {\n params.nice = parseScaleNice(spec.nice);\n }\n\n if (spec.bins != null) {\n params.bins = parseScaleBins(spec.bins, scope);\n }\n\n for (key in spec) {\n if (hasOwnProperty(params, key) || key === 'name') continue;\n params[key] = parseLiteral(spec[key], scope);\n }\n}\n\nfunction parseLiteral(v, scope) {\n return !isObject(v) ? v : v.signal ? scope.signalRef(v.signal) : error('Unsupported object: ' + stringValue(v));\n}\n\nfunction parseArray(v, scope) {\n return v.signal ? scope.signalRef(v.signal) : v.map(v => parseLiteral(v, scope));\n}\n\nfunction dataLookupError(name) {\n error('Can not find data set: ' + stringValue(name));\n} // -- SCALE DOMAIN ----\n\n\nfunction parseScaleDomain(domain, spec, scope) {\n if (!domain) {\n if (spec.domainMin != null || spec.domainMax != null) {\n error('No scale domain defined for domainMin/domainMax to override.');\n }\n\n return; // default domain\n }\n\n return domain.signal ? scope.signalRef(domain.signal) : (isArray(domain) ? explicitDomain : domain.fields ? multipleDomain : singularDomain)(domain, spec, scope);\n}\n\nfunction explicitDomain(domain, spec, scope) {\n return domain.map(v => parseLiteral(v, scope));\n}\n\nfunction singularDomain(domain, spec, scope) {\n const data = scope.getData(domain.data);\n if (!data) dataLookupError(domain.data);\n return isDiscrete(spec.type) ? data.valuesRef(scope, domain.field, parseSort(domain.sort, false)) : isQuantile(spec.type) ? data.domainRef(scope, domain.field) : data.extentRef(scope, domain.field);\n}\n\nfunction multipleDomain(domain, spec, scope) {\n const data = domain.data,\n fields = domain.fields.reduce((dom, d) => {\n d = isString(d) ? {\n data: data,\n field: d\n } : isArray(d) || d.signal ? fieldRef(d, scope) : d;\n dom.push(d);\n return dom;\n }, []);\n return (isDiscrete(spec.type) ? ordinalMultipleDomain : isQuantile(spec.type) ? quantileMultipleDomain : numericMultipleDomain)(domain, scope, fields);\n}\n\nfunction fieldRef(data, scope) {\n const name = '_:vega:_' + FIELD_REF_ID++,\n coll = Collect({});\n\n if (isArray(data)) {\n coll.value = {\n $ingest: data\n };\n } else if (data.signal) {\n const code = 'setdata(' + stringValue(name) + ',' + data.signal + ')';\n coll.params.input = scope.signalRef(code);\n }\n\n scope.addDataPipeline(name, [coll, Sieve({})]);\n return {\n data: name,\n field: 'data'\n };\n}\n\nfunction ordinalMultipleDomain(domain, scope, fields) {\n const sort = parseSort(domain.sort, true);\n let a, v; // get value counts for each domain field\n\n const counts = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.countsRef(scope, f.field, sort);\n }); // aggregate the results from each domain field\n\n const p = {\n groupby: keyFieldRef,\n pulse: counts\n };\n\n if (sort) {\n a = sort.op || 'count';\n v = sort.field ? aggrField(a, sort.field) : 'count';\n p.ops = [MULTIDOMAIN_SORT_OPS[a]];\n p.fields = [scope.fieldRef(v)];\n p.as = [v];\n }\n\n a = scope.add(Aggregate(p)); // collect aggregate output\n\n const c = scope.add(Collect({\n pulse: ref(a)\n })); // extract values for combined domain\n\n v = scope.add(Values({\n field: keyFieldRef,\n sort: scope.sortRef(sort),\n pulse: ref(c)\n }));\n return ref(v);\n}\n\nfunction parseSort(sort, multidomain) {\n if (sort) {\n if (!sort.field && !sort.op) {\n if (isObject(sort)) sort.field = 'key';else sort = {\n field: 'key'\n };\n } else if (!sort.field && sort.op !== 'count') {\n error('No field provided for sort aggregate op: ' + sort.op);\n } else if (multidomain && sort.field) {\n if (sort.op && !MULTIDOMAIN_SORT_OPS[sort.op]) {\n error('Multiple domain scales can not be sorted using ' + sort.op);\n }\n }\n }\n\n return sort;\n}\n\nfunction quantileMultipleDomain(domain, scope, fields) {\n // get value arrays for each domain field\n const values = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.domainRef(scope, f.field);\n }); // combine value arrays\n\n return ref(scope.add(MultiValues({\n values: values\n })));\n}\n\nfunction numericMultipleDomain(domain, scope, fields) {\n // get extents for each domain field\n const extents = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.extentRef(scope, f.field);\n }); // combine extents\n\n return ref(scope.add(MultiExtent({\n extents: extents\n })));\n} // -- SCALE BINS -----\n\n\nfunction parseScaleBins(v, scope) {\n return v.signal || isArray(v) ? parseArray(v, scope) : scope.objectProperty(v);\n} // -- SCALE NICE -----\n\n\nfunction parseScaleNice(nice) {\n return isObject(nice) ? {\n interval: parseLiteral(nice.interval),\n step: parseLiteral(nice.step)\n } : parseLiteral(nice);\n} // -- SCALE INTERPOLATION -----\n\n\nfunction parseScaleInterpolate(interpolate, params) {\n params.interpolate = parseLiteral(interpolate.type || interpolate);\n\n if (interpolate.gamma != null) {\n params.interpolateGamma = parseLiteral(interpolate.gamma);\n }\n} // -- SCALE RANGE -----\n\n\nfunction parseScaleRange(spec, scope, params) {\n const config = scope.config.range;\n let range = spec.range;\n\n if (range.signal) {\n return scope.signalRef(range.signal);\n } else if (isString(range)) {\n if (config && hasOwnProperty(config, range)) {\n spec = extend({}, spec, {\n range: config[range]\n });\n return parseScaleRange(spec, scope, params);\n } else if (range === 'width') {\n range = [0, {\n signal: 'width'\n }];\n } else if (range === 'height') {\n range = isDiscrete(spec.type) ? [0, {\n signal: 'height'\n }] : [{\n signal: 'height'\n }, 0];\n } else {\n error('Unrecognized scale range value: ' + stringValue(range));\n }\n } else if (range.scheme) {\n params.scheme = isArray(range.scheme) ? parseArray(range.scheme, scope) : parseLiteral(range.scheme, scope);\n if (range.extent) params.schemeExtent = parseArray(range.extent, scope);\n if (range.count) params.schemeCount = parseLiteral(range.count, scope);\n return;\n } else if (range.step) {\n params.rangeStep = parseLiteral(range.step, scope);\n return;\n } else if (isDiscrete(spec.type) && !isArray(range)) {\n return parseScaleDomain(range, spec, scope);\n } else if (!isArray(range)) {\n error('Unsupported range type: ' + stringValue(range));\n }\n\n return range.map(v => (isArray(v) ? parseArray : parseLiteral)(v, scope));\n}\n\nfunction parseProjection (proj, scope) {\n const config = scope.config.projection || {},\n params = {};\n\n for (const name in proj) {\n if (name === 'name') continue;\n params[name] = parseParameter$1(proj[name], name, scope);\n } // apply projection defaults from config\n\n\n for (const name in config) {\n if (params[name] == null) {\n params[name] = parseParameter$1(config[name], name, scope);\n }\n }\n\n scope.addProjection(proj.name, params);\n}\n\nfunction parseParameter$1(_, name, scope) {\n return isArray(_) ? _.map(_ => parseParameter$1(_, name, scope)) : !isObject(_) ? _ : _.signal ? scope.signalRef(_.signal) : name === 'fit' ? _ : error('Unsupported parameter object: ' + stringValue(_));\n}\n\nconst Top = 'top';\nconst Left = 'left';\nconst Right = 'right';\nconst Bottom = 'bottom';\nconst Center = 'center';\nconst Vertical = 'vertical';\nconst Start = 'start';\nconst Middle = 'middle';\nconst End = 'end';\nconst Index = 'index';\nconst Label = 'label';\nconst Offset = 'offset';\nconst Perc = 'perc';\nconst Perc2 = 'perc2';\nconst Value = 'value';\nconst GuideLabelStyle = 'guide-label';\nconst GuideTitleStyle = 'guide-title';\nconst GroupTitleStyle = 'group-title';\nconst GroupSubtitleStyle = 'group-subtitle';\nconst Symbols = 'symbol';\nconst Gradient = 'gradient';\nconst Discrete = 'discrete';\nconst Size = 'size';\nconst Shape = 'shape';\nconst Fill = 'fill';\nconst Stroke = 'stroke';\nconst StrokeWidth = 'strokeWidth';\nconst StrokeDash = 'strokeDash';\nconst Opacity = 'opacity'; // Encoding channels supported by legends\n// In priority order of 'canonical' scale\n\nconst LegendScales = [Size, Shape, Fill, Stroke, StrokeWidth, StrokeDash, Opacity];\nconst Skip = {\n name: 1,\n style: 1,\n interactive: 1\n};\nconst zero = {\n value: 0\n};\nconst one = {\n value: 1\n};\n\nconst GroupMark = 'group';\nconst RectMark = 'rect';\nconst RuleMark = 'rule';\nconst SymbolMark = 'symbol';\nconst TextMark = 'text';\n\nfunction guideGroup (mark) {\n mark.type = GroupMark;\n mark.interactive = mark.interactive || false;\n return mark;\n}\n\nfunction lookup(spec, config) {\n const _ = (name, dflt) => value(spec[name], value(config[name], dflt));\n\n _.isVertical = s => Vertical === value(spec.direction, config.direction || (s ? config.symbolDirection : config.gradientDirection));\n\n _.gradientLength = () => value(spec.gradientLength, config.gradientLength || config.gradientWidth);\n\n _.gradientThickness = () => value(spec.gradientThickness, config.gradientThickness || config.gradientHeight);\n\n _.entryColumns = () => value(spec.columns, value(config.columns, +_.isVertical(true)));\n\n return _;\n}\nfunction getEncoding(name, encode) {\n const v = encode && (encode.update && encode.update[name] || encode.enter && encode.enter[name]);\n return v && v.signal ? v : v ? v.value : null;\n}\nfunction getStyle(name, scope, style) {\n const s = scope.config.style[style];\n return s && s[name];\n}\nfunction anchorExpr(s, e, m) {\n return `item.anchor === '${Start}' ? ${s} : item.anchor === '${End}' ? ${e} : ${m}`;\n}\nconst alignExpr$1 = anchorExpr(stringValue(Left), stringValue(Right), stringValue(Center));\nfunction tickBand(_) {\n const v = _('tickBand');\n\n let offset = _('tickOffset'),\n band,\n extra;\n\n if (!v) {\n // if no tick band entry, fall back on other properties\n band = _('bandPosition');\n extra = _('tickExtra');\n } else if (v.signal) {\n // if signal, augment code to interpret values\n band = {\n signal: `(${v.signal}) === 'extent' ? 1 : 0.5`\n };\n extra = {\n signal: `(${v.signal}) === 'extent'`\n };\n\n if (!isObject(offset)) {\n offset = {\n signal: `(${v.signal}) === 'extent' ? 0 : ${offset}`\n };\n }\n } else if (v === 'extent') {\n // if constant, simply set values\n band = 1;\n extra = true;\n offset = 0;\n } else {\n band = 0.5;\n extra = false;\n }\n\n return {\n extra,\n band,\n offset\n };\n}\nfunction extendOffset(value, offset) {\n return !offset ? value : !value ? offset : !isObject(value) ? {\n value,\n offset\n } : Object.assign({}, value, {\n offset: extendOffset(value.offset, offset)\n });\n}\n\nfunction guideMark (mark, extras) {\n if (extras) {\n mark.name = extras.name;\n mark.style = extras.style || mark.style;\n mark.interactive = !!extras.interactive;\n mark.encode = extendEncode(mark.encode, extras, Skip);\n } else {\n mark.interactive = false;\n }\n\n return mark;\n}\n\nfunction legendGradient (spec, scale, config, userEncode) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = _.gradientThickness(),\n length = _.gradientLength();\n\n let enter, start, stop, width, height;\n\n if (vertical) {\n start = [0, 1];\n stop = [0, 0];\n width = thickness;\n height = length;\n } else {\n start = [0, 0];\n stop = [1, 0];\n width = length;\n height = thickness;\n }\n\n const encode = {\n enter: enter = {\n opacity: zero,\n x: zero,\n y: zero,\n width: encoder(width),\n height: encoder(height)\n },\n update: extend({}, enter, {\n opacity: one,\n fill: {\n gradient: scale,\n start: start,\n stop: stop\n }\n }),\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gradientStrokeColor'),\n strokeWidth: _('gradientStrokeWidth')\n }, {\n // update\n opacity: _('gradientOpacity')\n });\n return guideMark({\n type: RectMark,\n role: LegendGradientRole,\n encode\n }, userEncode);\n}\n\nfunction legendGradientDiscrete (spec, scale, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = _.gradientThickness(),\n length = _.gradientLength();\n\n let u,\n v,\n uu,\n vv,\n adjust = '';\n vertical ? (u = 'y', uu = 'y2', v = 'x', vv = 'width', adjust = '1-') : (u = 'x', uu = 'x2', v = 'y', vv = 'height');\n const enter = {\n opacity: zero,\n fill: {\n scale: scale,\n field: Value\n }\n };\n enter[u] = {\n signal: adjust + 'datum.' + Perc,\n mult: length\n };\n enter[v] = zero;\n enter[uu] = {\n signal: adjust + 'datum.' + Perc2,\n mult: length\n };\n enter[vv] = encoder(thickness);\n const encode = {\n enter: enter,\n update: extend({}, enter, {\n opacity: one\n }),\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gradientStrokeColor'),\n strokeWidth: _('gradientStrokeWidth')\n }, {\n // update\n opacity: _('gradientOpacity')\n });\n return guideMark({\n type: RectMark,\n role: LegendBandRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nconst alignExpr = `datum.${Perc}<=0?\"${Left}\":datum.${Perc}>=1?\"${Right}\":\"${Center}\"`,\n baselineExpr = `datum.${Perc}<=0?\"${Bottom}\":datum.${Perc}>=1?\"${Top}\":\"${Middle}\"`;\nfunction legendGradientLabels (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = encoder(_.gradientThickness()),\n length = _.gradientLength();\n\n let overlap = _('labelOverlap'),\n enter,\n update,\n u,\n v,\n adjust = '';\n\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one,\n text: {\n field: Label\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontStyle: _('labelFontStyle'),\n fontWeight: _('labelFontWeight'),\n limit: value(spec.labelLimit, config.gradientLabelLimit)\n });\n\n if (vertical) {\n enter.align = {\n value: 'left'\n };\n enter.baseline = update.baseline = {\n signal: baselineExpr\n };\n u = 'y';\n v = 'x';\n adjust = '1-';\n } else {\n enter.align = update.align = {\n signal: alignExpr\n };\n enter.baseline = {\n value: 'top'\n };\n u = 'x';\n v = 'y';\n }\n\n enter[u] = update[u] = {\n signal: adjust + 'datum.' + Perc,\n mult: length\n };\n enter[v] = update[v] = thickness;\n thickness.offset = value(spec.labelOffset, config.gradientLabelOffset) || 0;\n overlap = overlap ? {\n separation: _('labelSeparation'),\n method: overlap,\n order: 'datum.' + Index\n } : undefined; // type, role, style, key, dataRef, encode, extras\n\n return guideMark({\n type: TextMark,\n role: LegendLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: dataRef,\n encode,\n overlap\n }, userEncode);\n}\n\nfunction legendSymbolGroups (spec, config, userEncode, dataRef, columns) {\n const _ = lookup(spec, config),\n entries = userEncode.entries,\n interactive = !!(entries && entries.interactive),\n name = entries ? entries.name : undefined,\n height = _('clipHeight'),\n symbolOffset = _('symbolOffset'),\n valueRef = {\n data: 'value'\n },\n xSignal = `(${columns}) ? datum.${Offset} : datum.${Size}`,\n yEncode = height ? encoder(height) : {\n field: Size\n },\n index = `datum.${Index}`,\n ncols = `max(1, ${columns})`;\n\n let encode, enter, update, nrows, sort;\n yEncode.mult = 0.5; // -- LEGEND SYMBOLS --\n\n encode = {\n enter: enter = {\n opacity: zero,\n x: {\n signal: xSignal,\n mult: 0.5,\n offset: symbolOffset\n },\n y: yEncode\n },\n update: update = {\n opacity: one,\n x: enter.x,\n y: enter.y\n },\n exit: {\n opacity: zero\n }\n };\n let baseFill = null,\n baseStroke = null;\n\n if (!spec.fill) {\n baseFill = config.symbolBaseFillColor;\n baseStroke = config.symbolBaseStrokeColor;\n }\n\n addEncoders(encode, {\n fill: _('symbolFillColor', baseFill),\n shape: _('symbolType'),\n size: _('symbolSize'),\n stroke: _('symbolStrokeColor', baseStroke),\n strokeDash: _('symbolDash'),\n strokeDashOffset: _('symbolDashOffset'),\n strokeWidth: _('symbolStrokeWidth')\n }, {\n // update\n opacity: _('symbolOpacity')\n });\n LegendScales.forEach(scale => {\n if (spec[scale]) {\n update[scale] = enter[scale] = {\n scale: spec[scale],\n field: Value\n };\n }\n });\n const symbols = guideMark({\n type: SymbolMark,\n role: LegendSymbolRole,\n key: Value,\n from: valueRef,\n clip: height ? true : undefined,\n encode\n }, userEncode.symbols); // -- LEGEND LABELS --\n\n const labelOffset = encoder(symbolOffset);\n labelOffset.offset = _('labelOffset');\n encode = {\n enter: enter = {\n opacity: zero,\n x: {\n signal: xSignal,\n offset: labelOffset\n },\n y: yEncode\n },\n update: update = {\n opacity: one,\n text: {\n field: Label\n },\n x: enter.x,\n y: enter.y\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n align: _('labelAlign'),\n baseline: _('labelBaseline'),\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontStyle: _('labelFontStyle'),\n fontWeight: _('labelFontWeight'),\n limit: _('labelLimit')\n });\n const labels = guideMark({\n type: TextMark,\n role: LegendLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: valueRef,\n encode\n }, userEncode.labels); // -- LEGEND ENTRY GROUPS --\n\n encode = {\n enter: {\n noBound: {\n value: !height\n },\n // ignore width/height in bounds calc\n width: zero,\n height: height ? encoder(height) : zero,\n opacity: zero\n },\n exit: {\n opacity: zero\n },\n update: update = {\n opacity: one,\n row: {\n signal: null\n },\n column: {\n signal: null\n }\n }\n }; // annotate and sort groups to ensure correct ordering\n\n if (_.isVertical(true)) {\n nrows = `ceil(item.mark.items.length / ${ncols})`;\n update.row.signal = `${index}%${nrows}`;\n update.column.signal = `floor(${index} / ${nrows})`;\n sort = {\n field: ['row', index]\n };\n } else {\n update.row.signal = `floor(${index} / ${ncols})`;\n update.column.signal = `${index} % ${ncols}`;\n sort = {\n field: index\n };\n } // handle zero column case (implies infinite columns)\n\n\n update.column.signal = `(${columns})?${update.column.signal}:${index}`; // facet legend entries into sub-groups\n\n dataRef = {\n facet: {\n data: dataRef,\n name: 'value',\n groupby: Index\n }\n };\n return guideGroup({\n role: ScopeRole,\n from: dataRef,\n encode: extendEncode(encode, entries, Skip),\n marks: [symbols, labels],\n name,\n interactive,\n sort\n });\n}\nfunction legendSymbolLayout(spec, config) {\n const _ = lookup(spec, config); // layout parameters for legend entries\n\n\n return {\n align: _('gridAlign'),\n columns: _.entryColumns(),\n center: {\n row: true,\n column: false\n },\n padding: {\n row: _('rowPadding'),\n column: _('columnPadding')\n }\n };\n}\n\nconst isL = 'item.orient === \"left\"',\n isR = 'item.orient === \"right\"',\n isLR = `(${isL} || ${isR})`,\n isVG = `datum.vgrad && ${isLR}`,\n baseline = anchorExpr('\"top\"', '\"bottom\"', '\"middle\"'),\n alignFlip = anchorExpr('\"right\"', '\"left\"', '\"center\"'),\n exprAlign = `datum.vgrad && ${isR} ? (${alignFlip}) : (${isLR} && !(datum.vgrad && ${isL})) ? \"left\" : ${alignExpr$1}`,\n exprAnchor = `item._anchor || (${isLR} ? \"middle\" : \"start\")`,\n exprAngle = `${isVG} ? (${isL} ? -90 : 90) : 0`,\n exprBaseline = `${isLR} ? (datum.vgrad ? (${isR} ? \"bottom\" : \"top\") : ${baseline}) : \"top\"`;\nfunction legendTitle (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config);\n\n const encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: one,\n x: {\n field: {\n group: 'padding'\n }\n },\n y: {\n field: {\n group: 'padding'\n }\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n orient: _('titleOrient'),\n _anchor: _('titleAnchor'),\n anchor: {\n signal: exprAnchor\n },\n angle: {\n signal: exprAngle\n },\n align: {\n signal: exprAlign\n },\n baseline: {\n signal: exprBaseline\n },\n text: spec.title,\n fill: _('titleColor'),\n fillOpacity: _('titleOpacity'),\n font: _('titleFont'),\n fontSize: _('titleFontSize'),\n fontStyle: _('titleFontStyle'),\n fontWeight: _('titleFontWeight'),\n limit: _('titleLimit'),\n lineHeight: _('titleLineHeight')\n }, {\n // require update\n align: _('titleAlign'),\n baseline: _('titleBaseline')\n });\n return guideMark({\n type: TextMark,\n role: LegendTitleRole,\n style: GuideTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction clip (clip, scope) {\n let expr;\n\n if (isObject(clip)) {\n if (clip.signal) {\n expr = clip.signal;\n } else if (clip.path) {\n expr = 'pathShape(' + param(clip.path) + ')';\n } else if (clip.sphere) {\n expr = 'geoShape(' + param(clip.sphere) + ', {type: \"Sphere\"})';\n }\n }\n\n return expr ? scope.signalRef(expr) : !!clip;\n}\n\nfunction param(value) {\n return isObject(value) && value.signal ? value.signal : stringValue(value);\n}\n\nfunction getRole (spec) {\n const role = spec.role || '';\n return !role.indexOf('axis') || !role.indexOf('legend') || !role.indexOf('title') ? role : spec.type === GroupMark ? ScopeRole : role || MarkRole;\n}\n\nfunction definition (spec) {\n return {\n marktype: spec.type,\n name: spec.name || undefined,\n role: spec.role || getRole(spec),\n zindex: +spec.zindex || undefined,\n aria: spec.aria,\n description: spec.description\n };\n}\n\nfunction interactive (spec, scope) {\n return spec && spec.signal ? scope.signalRef(spec.signal) : spec === false ? false : true;\n}\n\n/**\n * Parse a data transform specification.\n */\n\nfunction parseTransform (spec, scope) {\n const def = definition$1(spec.type);\n if (!def) error('Unrecognized transform type: ' + stringValue(spec.type));\n const t = entry(def.type.toLowerCase(), null, parseParameters(def, spec, scope));\n if (spec.signal) scope.addSignal(spec.signal, scope.proxy(t));\n t.metadata = def.metadata || {};\n return t;\n}\n/**\n * Parse all parameters of a data transform.\n */\n\nfunction parseParameters(def, spec, scope) {\n const params = {},\n n = def.params.length;\n\n for (let i = 0; i < n; ++i) {\n const pdef = def.params[i];\n params[pdef.name] = parseParameter(pdef, spec, scope);\n }\n\n return params;\n}\n/**\n * Parse a data transform parameter.\n */\n\n\nfunction parseParameter(def, spec, scope) {\n const type = def.type,\n value = spec[def.name];\n\n if (type === 'index') {\n return parseIndexParameter(def, spec, scope);\n } else if (value === undefined) {\n if (def.required) {\n error('Missing required ' + stringValue(spec.type) + ' parameter: ' + stringValue(def.name));\n }\n\n return;\n } else if (type === 'param') {\n return parseSubParameters(def, spec, scope);\n } else if (type === 'projection') {\n return scope.projectionRef(spec[def.name]);\n }\n\n return def.array && !isSignal(value) ? value.map(v => parameterValue(def, v, scope)) : parameterValue(def, value, scope);\n}\n/**\n * Parse a single parameter value.\n */\n\n\nfunction parameterValue(def, value, scope) {\n const type = def.type;\n\n if (isSignal(value)) {\n return isExpr(type) ? error('Expression references can not be signals.') : isField(type) ? scope.fieldRef(value) : isCompare(type) ? scope.compareRef(value) : scope.signalRef(value.signal);\n } else {\n const expr = def.expr || isField(type);\n return expr && outerExpr(value) ? scope.exprRef(value.expr, value.as) : expr && outerField(value) ? fieldRef$1(value.field, value.as) : isExpr(type) ? parseExpression(value, scope) : isData(type) ? ref(scope.getData(value).values) : isField(type) ? fieldRef$1(value) : isCompare(type) ? scope.compareRef(value) : value;\n }\n}\n/**\n * Parse parameter for accessing an index of another data set.\n */\n\n\nfunction parseIndexParameter(def, spec, scope) {\n if (!isString(spec.from)) {\n error('Lookup \"from\" parameter must be a string literal.');\n }\n\n return scope.getData(spec.from).lookupRef(scope, spec.key);\n}\n/**\n * Parse a parameter that contains one or more sub-parameter objects.\n */\n\n\nfunction parseSubParameters(def, spec, scope) {\n const value = spec[def.name];\n\n if (def.array) {\n if (!isArray(value)) {\n // signals not allowed!\n error('Expected an array of sub-parameters. Instead: ' + stringValue(value));\n }\n\n return value.map(v => parseSubParameter(def, v, scope));\n } else {\n return parseSubParameter(def, value, scope);\n }\n}\n/**\n * Parse a sub-parameter object.\n */\n\n\nfunction parseSubParameter(def, value, scope) {\n const n = def.params.length;\n let pdef; // loop over defs to find matching key\n\n for (let i = 0; i < n; ++i) {\n pdef = def.params[i];\n\n for (const k in pdef.key) {\n if (pdef.key[k] !== value[k]) {\n pdef = null;\n break;\n }\n }\n\n if (pdef) break;\n } // raise error if matching key not found\n\n\n if (!pdef) error('Unsupported parameter: ' + stringValue(value)); // parse params, create Params transform, return ref\n\n const params = extend(parseParameters(pdef, value, scope), pdef.key);\n return ref(scope.add(Params(params)));\n} // -- Utilities -----\n\n\nconst outerExpr = _ => _ && _.expr;\nconst outerField = _ => _ && _.field;\nconst isData = _ => _ === 'data';\nconst isExpr = _ => _ === 'expr';\nconst isField = _ => _ === 'field';\nconst isCompare = _ => _ === 'compare';\n\nfunction parseData$1 (from, group, scope) {\n let facet, key, op, dataRef, parent; // if no source data, generate singleton datum\n\n if (!from) {\n dataRef = ref(scope.add(Collect(null, [{}])));\n } // if faceted, process facet specification\n else if (facet = from.facet) {\n if (!group) error('Only group marks can be faceted.'); // use pre-faceted source data, if available\n\n if (facet.field != null) {\n dataRef = parent = getDataRef(facet, scope);\n } else {\n // generate facet aggregates if no direct data specification\n if (!from.data) {\n op = parseTransform(extend({\n type: 'aggregate',\n groupby: array(facet.groupby)\n }, facet.aggregate), scope);\n op.params.key = scope.keyRef(facet.groupby);\n op.params.pulse = getDataRef(facet, scope);\n dataRef = parent = ref(scope.add(op));\n } else {\n parent = ref(scope.getData(from.data).aggregate);\n }\n\n key = scope.keyRef(facet.groupby, true);\n }\n } // if not yet defined, get source data reference\n\n\n if (!dataRef) {\n dataRef = getDataRef(from, scope);\n }\n\n return {\n key: key,\n pulse: dataRef,\n parent: parent\n };\n}\nfunction getDataRef(from, scope) {\n return from.$ref ? from : from.data && from.data.$ref ? from.data : ref(scope.getData(from.data).output);\n}\n\nfunction DataScope(scope, input, output, values, aggr) {\n this.scope = scope; // parent scope object\n\n this.input = input; // first operator in pipeline (tuple input)\n\n this.output = output; // last operator in pipeline (tuple output)\n\n this.values = values; // operator for accessing tuples (but not tuple flow)\n // last aggregate in transform pipeline\n\n this.aggregate = aggr; // lookup table of field indices\n\n this.index = {};\n}\n\nDataScope.fromEntries = function (scope, entries) {\n const n = entries.length,\n values = entries[n - 1],\n output = entries[n - 2];\n let input = entries[0],\n aggr = null,\n i = 1;\n\n if (input && input.type === 'load') {\n input = entries[1];\n } // add operator entries to this scope, wire up pulse chain\n\n\n scope.add(entries[0]);\n\n for (; i < n; ++i) {\n entries[i].params.pulse = ref(entries[i - 1]);\n scope.add(entries[i]);\n if (entries[i].type === 'aggregate') aggr = entries[i];\n }\n\n return new DataScope(scope, input, output, values, aggr);\n};\n\nfunction fieldKey(field) {\n return isString(field) ? field : null;\n}\n\nfunction addSortField(scope, p, sort) {\n const as = aggrField(sort.op, sort.field);\n let s;\n\n if (p.ops) {\n for (let i = 0, n = p.as.length; i < n; ++i) {\n if (p.as[i] === as) return;\n }\n } else {\n p.ops = ['count'];\n p.fields = [null];\n p.as = ['count'];\n }\n\n if (sort.op) {\n p.ops.push((s = sort.op.signal) ? scope.signalRef(s) : sort.op);\n p.fields.push(scope.fieldRef(sort.field));\n p.as.push(as);\n }\n}\n\nfunction cache(scope, ds, name, optype, field, counts, index) {\n const cache = ds[name] || (ds[name] = {}),\n sort = sortKey(counts);\n let k = fieldKey(field),\n v,\n op;\n\n if (k != null) {\n scope = ds.scope;\n k = k + (sort ? '|' + sort : '');\n v = cache[k];\n }\n\n if (!v) {\n const params = counts ? {\n field: keyFieldRef,\n pulse: ds.countsRef(scope, field, counts)\n } : {\n field: scope.fieldRef(field),\n pulse: ref(ds.output)\n };\n if (sort) params.sort = scope.sortRef(counts);\n op = scope.add(entry(optype, undefined, params));\n if (index) ds.index[field] = op;\n v = ref(op);\n if (k != null) cache[k] = v;\n }\n\n return v;\n}\n\nDataScope.prototype = {\n countsRef(scope, field, sort) {\n const ds = this,\n cache = ds.counts || (ds.counts = {}),\n k = fieldKey(field);\n let v, a, p;\n\n if (k != null) {\n scope = ds.scope;\n v = cache[k];\n }\n\n if (!v) {\n p = {\n groupby: scope.fieldRef(field, 'key'),\n pulse: ref(ds.output)\n };\n if (sort && sort.field) addSortField(scope, p, sort);\n a = scope.add(Aggregate(p));\n v = scope.add(Collect({\n pulse: ref(a)\n }));\n v = {\n agg: a,\n ref: ref(v)\n };\n if (k != null) cache[k] = v;\n } else if (sort && sort.field) {\n addSortField(scope, v.agg.params, sort);\n }\n\n return v.ref;\n },\n\n tuplesRef() {\n return ref(this.values);\n },\n\n extentRef(scope, field) {\n return cache(scope, this, 'extent', 'extent', field, false);\n },\n\n domainRef(scope, field) {\n return cache(scope, this, 'domain', 'values', field, false);\n },\n\n valuesRef(scope, field, sort) {\n return cache(scope, this, 'vals', 'values', field, sort || true);\n },\n\n lookupRef(scope, field) {\n return cache(scope, this, 'lookup', 'tupleindex', field, false);\n },\n\n indataRef(scope, field) {\n return cache(scope, this, 'indata', 'tupleindex', field, true, true);\n }\n\n};\n\nfunction parseFacet (spec, scope, group) {\n const facet = spec.from.facet,\n name = facet.name,\n data = getDataRef(facet, scope);\n let op;\n\n if (!facet.name) {\n error('Facet must have a name: ' + stringValue(facet));\n }\n\n if (!facet.data) {\n error('Facet must reference a data set: ' + stringValue(facet));\n }\n\n if (facet.field) {\n op = scope.add(PreFacet({\n field: scope.fieldRef(facet.field),\n pulse: data\n }));\n } else if (facet.groupby) {\n op = scope.add(Facet({\n key: scope.keyRef(facet.groupby),\n group: ref(scope.proxy(group.parent)),\n pulse: data\n }));\n } else {\n error('Facet must specify groupby or field: ' + stringValue(facet));\n } // initialize facet subscope\n\n\n const subscope = scope.fork(),\n source = subscope.add(Collect()),\n values = subscope.add(Sieve({\n pulse: ref(source)\n }));\n subscope.addData(name, new DataScope(subscope, source, source, values));\n subscope.addSignal('parent', null); // parse faceted subflow\n\n op.params.subflow = {\n $subflow: subscope.parse(spec).toRuntime()\n };\n}\n\nfunction parseSubflow (spec, scope, input) {\n const op = scope.add(PreFacet({\n pulse: input.pulse\n })),\n subscope = scope.fork();\n subscope.add(Sieve());\n subscope.addSignal('parent', null); // parse group mark subflow\n\n op.params.subflow = {\n $subflow: subscope.parse(spec).toRuntime()\n };\n}\n\nfunction parseTrigger (spec, scope, name) {\n const remove = spec.remove,\n insert = spec.insert,\n toggle = spec.toggle,\n modify = spec.modify,\n values = spec.values,\n op = scope.add(operator());\n const update = 'if(' + spec.trigger + ',modify(\"' + name + '\",' + [insert, remove, toggle, modify, values].map(_ => _ == null ? 'null' : _).join(',') + '),0)';\n const expr = parseExpression(update, scope);\n op.update = expr.$expr;\n op.params = expr.$params;\n}\n\nfunction parseMark (spec, scope) {\n const role = getRole(spec),\n group = spec.type === GroupMark,\n facet = spec.from && spec.from.facet,\n overlap = spec.overlap;\n let layout = spec.layout || role === ScopeRole || role === FrameRole,\n ops,\n op,\n store,\n enc,\n name,\n layoutRef,\n boundRef;\n const nested = role === MarkRole || layout || facet; // resolve input data\n\n const input = parseData$1(spec.from, group, scope); // data join to map tuples to visual items\n\n op = scope.add(DataJoin({\n key: input.key || (spec.key ? fieldRef$1(spec.key) : undefined),\n pulse: input.pulse,\n clean: !group\n }));\n const joinRef = ref(op); // collect visual items\n\n op = store = scope.add(Collect({\n pulse: joinRef\n })); // connect visual items to scenegraph\n\n op = scope.add(Mark({\n markdef: definition(spec),\n interactive: interactive(spec.interactive, scope),\n clip: clip(spec.clip, scope),\n context: {\n $context: true\n },\n groups: scope.lookup(),\n parent: scope.signals.parent ? scope.signalRef('parent') : null,\n index: scope.markpath(),\n pulse: ref(op)\n }));\n const markRef = ref(op); // add visual encoders\n\n op = enc = scope.add(Encode(parseEncode(spec.encode, spec.type, role, spec.style, scope, {\n mod: false,\n pulse: markRef\n }))); // monitor parent marks to propagate changes\n\n op.params.parent = scope.encode(); // add post-encoding transforms, if defined\n\n if (spec.transform) {\n spec.transform.forEach(_ => {\n const tx = parseTransform(_, scope),\n md = tx.metadata;\n\n if (md.generates || md.changes) {\n error('Mark transforms should not generate new data.');\n }\n\n if (!md.nomod) enc.params.mod = true; // update encode mod handling\n\n tx.params.pulse = ref(op);\n scope.add(op = tx);\n });\n } // if item sort specified, perform post-encoding\n\n\n if (spec.sort) {\n op = scope.add(SortItems({\n sort: scope.compareRef(spec.sort),\n pulse: ref(op)\n }));\n }\n\n const encodeRef = ref(op); // add view layout operator if needed\n\n if (facet || layout) {\n layout = scope.add(ViewLayout({\n layout: scope.objectProperty(spec.layout),\n legends: scope.legends,\n mark: markRef,\n pulse: encodeRef\n }));\n layoutRef = ref(layout);\n } // compute bounding boxes\n\n\n const bound = scope.add(Bound({\n mark: markRef,\n pulse: layoutRef || encodeRef\n }));\n boundRef = ref(bound); // if group mark, recurse to parse nested content\n\n if (group) {\n // juggle layout & bounds to ensure they run *after* any faceting transforms\n if (nested) {\n ops = scope.operators;\n ops.pop();\n if (layout) ops.pop();\n }\n\n scope.pushState(encodeRef, layoutRef || boundRef, joinRef);\n facet ? parseFacet(spec, scope, input) // explicit facet\n : nested ? parseSubflow(spec, scope, input) // standard mark group\n : scope.parse(spec); // guide group, we can avoid nested scopes\n\n scope.popState();\n\n if (nested) {\n if (layout) ops.push(layout);\n ops.push(bound);\n }\n } // if requested, add overlap removal transform\n\n\n if (overlap) {\n boundRef = parseOverlap(overlap, boundRef, scope);\n } // render / sieve items\n\n\n const render = scope.add(Render({\n pulse: boundRef\n })),\n sieve = scope.add(Sieve({\n pulse: ref(render)\n }, undefined, scope.parent())); // if mark is named, make accessible as reactive geometry\n // add trigger updates if defined\n\n if (spec.name != null) {\n name = spec.name;\n scope.addData(name, new DataScope(scope, store, render, sieve));\n if (spec.on) spec.on.forEach(on => {\n if (on.insert || on.remove || on.toggle) {\n error('Marks only support modify triggers.');\n }\n\n parseTrigger(on, scope, name);\n });\n }\n}\n\nfunction parseOverlap(overlap, source, scope) {\n const method = overlap.method,\n bound = overlap.bound,\n sep = overlap.separation;\n const params = {\n separation: isSignal(sep) ? scope.signalRef(sep.signal) : sep,\n method: isSignal(method) ? scope.signalRef(method.signal) : method,\n pulse: source\n };\n\n if (overlap.order) {\n params.sort = scope.compareRef({\n field: overlap.order\n });\n }\n\n if (bound) {\n const tol = bound.tolerance;\n params.boundTolerance = isSignal(tol) ? scope.signalRef(tol.signal) : +tol;\n params.boundScale = scope.scaleRef(bound.scale);\n params.boundOrient = bound.orient;\n }\n\n return ref(scope.add(Overlap(params)));\n}\n\nfunction parseLegend (spec, scope) {\n const config = scope.config.legend,\n encode = spec.encode || {},\n _ = lookup(spec, config),\n legendEncode = encode.legend || {},\n name = legendEncode.name || undefined,\n interactive = legendEncode.interactive,\n style = legendEncode.style,\n scales = {};\n\n let scale = 0,\n entryLayout,\n params,\n children; // resolve scales and 'canonical' scale name\n\n LegendScales.forEach(s => spec[s] ? (scales[s] = spec[s], scale = scale || spec[s]) : 0);\n if (!scale) error('Missing valid scale for legend.'); // resolve legend type (symbol, gradient, or discrete gradient)\n\n const type = legendType(spec, scope.scaleType(scale)); // single-element data source for legend group\n\n const datum = {\n title: spec.title != null,\n scales: scales,\n type: type,\n vgrad: type !== 'symbol' && _.isVertical()\n };\n const dataRef = ref(scope.add(Collect(null, [datum]))); // encoding properties for legend entry sub-group\n\n const entryEncode = {\n enter: {\n x: {\n value: 0\n },\n y: {\n value: 0\n }\n }\n }; // data source for legend values\n\n const entryRef = ref(scope.add(LegendEntries(params = {\n type: type,\n scale: scope.scaleRef(scale),\n count: scope.objectProperty(_('tickCount')),\n limit: scope.property(_('symbolLimit')),\n values: scope.objectProperty(spec.values),\n minstep: scope.property(spec.tickMinStep),\n formatType: scope.property(spec.formatType),\n formatSpecifier: scope.property(spec.format)\n }))); // continuous gradient legend\n\n if (type === Gradient) {\n children = [legendGradient(spec, scale, config, encode.gradient), legendGradientLabels(spec, config, encode.labels, entryRef)]; // adjust default tick count based on the gradient length\n\n params.count = params.count || scope.signalRef(`max(2,2*floor((${deref(_.gradientLength())})/100))`);\n } // discrete gradient legend\n else if (type === Discrete) {\n children = [legendGradientDiscrete(spec, scale, config, encode.gradient, entryRef), legendGradientLabels(spec, config, encode.labels, entryRef)];\n } // symbol legend\n else {\n // determine legend symbol group layout\n entryLayout = legendSymbolLayout(spec, config);\n children = [legendSymbolGroups(spec, config, encode, entryRef, deref(entryLayout.columns))]; // pass symbol size information to legend entry generator\n\n params.size = sizeExpression(spec, scope, children[0].marks);\n } // generate legend marks\n\n\n children = [guideGroup({\n role: LegendEntryRole,\n from: dataRef,\n encode: entryEncode,\n marks: children,\n layout: entryLayout,\n interactive\n })]; // include legend title if defined\n\n if (datum.title) {\n children.push(legendTitle(spec, config, encode.title, dataRef));\n } // parse legend specification\n\n\n return parseMark(guideGroup({\n role: LegendRole,\n from: dataRef,\n encode: extendEncode(buildLegendEncode(_, spec, config), legendEncode, Skip),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\n\nfunction legendType(spec, scaleType) {\n let type = spec.type || Symbols;\n\n if (!spec.type && scaleCount(spec) === 1 && (spec.fill || spec.stroke)) {\n type = isContinuous(scaleType) ? Gradient : isDiscretizing(scaleType) ? Discrete : Symbols;\n }\n\n return type !== Gradient ? type : isDiscretizing(scaleType) ? Discrete : Gradient;\n}\n\nfunction scaleCount(spec) {\n return LegendScales.reduce((count, type) => count + (spec[type] ? 1 : 0), 0);\n}\n\nfunction buildLegendEncode(_, spec, config) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n offset: _('offset'),\n padding: _('padding'),\n titlePadding: _('titlePadding'),\n cornerRadius: _('cornerRadius'),\n fill: _('fillColor'),\n stroke: _('strokeColor'),\n strokeWidth: config.strokeWidth,\n strokeDash: config.strokeDash,\n x: _('legendX'),\n y: _('legendY'),\n // accessibility support\n format: spec.format,\n formatType: spec.formatType\n });\n return encode;\n}\n\nfunction sizeExpression(spec, scope, marks) {\n const size = deref(getChannel('size', spec, marks)),\n strokeWidth = deref(getChannel('strokeWidth', spec, marks)),\n fontSize = deref(getFontSize(marks[1].encode, scope, GuideLabelStyle));\n return parseExpression(`max(ceil(sqrt(${size})+${strokeWidth}),${fontSize})`, scope);\n}\n\nfunction getChannel(name, spec, marks) {\n return spec[name] ? `scale(\"${spec[name]}\",datum)` : getEncoding(name, marks[0].encode);\n}\n\nfunction getFontSize(encode, scope, style) {\n return getEncoding('fontSize', encode) || getStyle('fontSize', scope, style);\n}\n\nconst angleExpr = `item.orient===\"${Left}\"?-90:item.orient===\"${Right}\"?90:0`;\nfunction parseTitle (spec, scope) {\n spec = isString(spec) ? {\n text: spec\n } : spec;\n\n const _ = lookup(spec, scope.config.title),\n encode = spec.encode || {},\n userEncode = encode.group || {},\n name = userEncode.name || undefined,\n interactive = userEncode.interactive,\n style = userEncode.style,\n children = []; // single-element data source for group title\n\n\n const datum = {},\n dataRef = ref(scope.add(Collect(null, [datum]))); // include title text\n\n children.push(buildTitle(spec, _, titleEncode(spec), dataRef)); // include subtitle text\n\n if (spec.subtitle) {\n children.push(buildSubTitle(spec, _, encode.subtitle, dataRef));\n } // parse title specification\n\n\n return parseMark(guideGroup({\n role: TitleRole,\n from: dataRef,\n encode: groupEncode(_, userEncode),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n} // provide backwards-compatibility for title custom encode;\n// the top-level encode block has been *deprecated*.\n\nfunction titleEncode(spec) {\n const encode = spec.encode;\n return encode && encode.title || extend({\n name: spec.name,\n interactive: spec.interactive,\n style: spec.style\n }, encode);\n}\n\nfunction groupEncode(_, userEncode) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n anchor: _('anchor'),\n align: {\n signal: alignExpr$1\n },\n angle: {\n signal: angleExpr\n },\n limit: _('limit'),\n frame: _('frame'),\n offset: _('offset') || 0,\n padding: _('subtitlePadding')\n });\n return extendEncode(encode, userEncode, Skip);\n}\n\nfunction buildTitle(spec, _, userEncode, dataRef) {\n const zero = {\n value: 0\n },\n text = spec.text,\n encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: {\n value: 1\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n text: text,\n align: {\n signal: 'item.mark.group.align'\n },\n angle: {\n signal: 'item.mark.group.angle'\n },\n limit: {\n signal: 'item.mark.group.limit'\n },\n baseline: 'top',\n dx: _('dx'),\n dy: _('dy'),\n fill: _('color'),\n font: _('font'),\n fontSize: _('fontSize'),\n fontStyle: _('fontStyle'),\n fontWeight: _('fontWeight'),\n lineHeight: _('lineHeight')\n }, {\n // update\n align: _('align'),\n angle: _('angle'),\n baseline: _('baseline')\n });\n return guideMark({\n type: TextMark,\n role: TitleTextRole,\n style: GroupTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction buildSubTitle(spec, _, userEncode, dataRef) {\n const zero = {\n value: 0\n },\n text = spec.subtitle,\n encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: {\n value: 1\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n text: text,\n align: {\n signal: 'item.mark.group.align'\n },\n angle: {\n signal: 'item.mark.group.angle'\n },\n limit: {\n signal: 'item.mark.group.limit'\n },\n baseline: 'top',\n dx: _('dx'),\n dy: _('dy'),\n fill: _('subtitleColor'),\n font: _('subtitleFont'),\n fontSize: _('subtitleFontSize'),\n fontStyle: _('subtitleFontStyle'),\n fontWeight: _('subtitleFontWeight'),\n lineHeight: _('subtitleLineHeight')\n }, {\n // update\n align: _('align'),\n angle: _('angle'),\n baseline: _('baseline')\n });\n return guideMark({\n type: TextMark,\n role: TitleSubtitleRole,\n style: GroupSubtitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction parseData(data, scope) {\n const transforms = [];\n\n if (data.transform) {\n data.transform.forEach(tx => {\n transforms.push(parseTransform(tx, scope));\n });\n }\n\n if (data.on) {\n data.on.forEach(on => {\n parseTrigger(on, scope, data.name);\n });\n }\n\n scope.addDataPipeline(data.name, analyze(data, scope, transforms));\n}\n/**\n * Analyze a data pipeline, add needed operators.\n */\n\nfunction analyze(data, scope, ops) {\n const output = [];\n let source = null,\n modify = false,\n generate = false,\n upstream,\n i,\n n,\n t,\n m;\n\n if (data.values) {\n // hard-wired input data set\n if (isSignal(data.values) || hasSignal(data.format)) {\n // if either values is signal or format has signal, use dynamic loader\n output.push(load(scope, data));\n output.push(source = collect());\n } else {\n // otherwise, ingest upon dataflow init\n output.push(source = collect({\n $ingest: data.values,\n $format: data.format\n }));\n }\n } else if (data.url) {\n // load data from external source\n if (hasSignal(data.url) || hasSignal(data.format)) {\n // if either url or format has signal, use dynamic loader\n output.push(load(scope, data));\n output.push(source = collect());\n } else {\n // otherwise, request load upon dataflow init\n output.push(source = collect({\n $request: data.url,\n $format: data.format\n }));\n }\n } else if (data.source) {\n // derives from one or more other data sets\n source = upstream = array(data.source).map(d => ref(scope.getData(d).output));\n output.push(null); // populate later\n } // scan data transforms, add collectors as needed\n\n\n for (i = 0, n = ops.length; i < n; ++i) {\n t = ops[i];\n m = t.metadata;\n\n if (!source && !m.source) {\n output.push(source = collect());\n }\n\n output.push(t);\n if (m.generates) generate = true;\n if (m.modifies && !generate) modify = true;\n if (m.source) source = t;else if (m.changes) source = null;\n }\n\n if (upstream) {\n n = upstream.length - 1;\n output[0] = Relay({\n derive: modify,\n pulse: n ? upstream : upstream[0]\n });\n\n if (modify || n) {\n // collect derived and multi-pulse tuples\n output.splice(1, 0, collect());\n }\n }\n\n if (!source) output.push(collect());\n output.push(Sieve({}));\n return output;\n}\n\nfunction collect(values) {\n const s = Collect({}, values);\n s.metadata = {\n source: true\n };\n return s;\n}\n\nfunction load(scope, data) {\n return Load({\n url: data.url ? scope.property(data.url) : undefined,\n async: data.async ? scope.property(data.async) : undefined,\n values: data.values ? scope.property(data.values) : undefined,\n format: scope.objectProperty(data.format)\n });\n}\n\nconst isX = orient => orient === Bottom || orient === Top; // get sign coefficient based on axis orient\n\n\nconst getSign = (orient, a, b) => isSignal(orient) ? ifLeftTopExpr(orient.signal, a, b) : orient === Left || orient === Top ? a : b; // condition on axis x-direction\n\nconst ifX = (orient, a, b) => isSignal(orient) ? ifXEnc(orient.signal, a, b) : isX(orient) ? a : b; // condition on axis y-direction\n\nconst ifY = (orient, a, b) => isSignal(orient) ? ifYEnc(orient.signal, a, b) : isX(orient) ? b : a;\nconst ifTop = (orient, a, b) => isSignal(orient) ? ifTopExpr(orient.signal, a, b) : orient === Top ? {\n value: a\n} : {\n value: b\n};\nconst ifRight = (orient, a, b) => isSignal(orient) ? ifRightExpr(orient.signal, a, b) : orient === Right ? {\n value: a\n} : {\n value: b\n};\n\nconst ifXEnc = ($orient, a, b) => ifEnc(`${$orient} === '${Top}' || ${$orient} === '${Bottom}'`, a, b);\n\nconst ifYEnc = ($orient, a, b) => ifEnc(`${$orient} !== '${Top}' && ${$orient} !== '${Bottom}'`, a, b);\n\nconst ifLeftTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Left}' || ${$orient} === '${Top}'`, a, b);\n\nconst ifTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Top}'`, a, b);\n\nconst ifRightExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Right}'`, a, b);\n\nconst ifEnc = (test, a, b) => {\n // ensure inputs are encoder objects (or null)\n a = a != null ? encoder(a) : a;\n b = b != null ? encoder(b) : b;\n\n if (isSimple(a) && isSimple(b)) {\n // if possible generate simple signal expression\n a = a ? a.signal || stringValue(a.value) : null;\n b = b ? b.signal || stringValue(b.value) : null;\n return {\n signal: `${test} ? (${a}) : (${b})`\n };\n } else {\n // otherwise generate rule set\n return [extend({\n test\n }, a)].concat(b || []);\n }\n};\n\nconst isSimple = enc => enc == null || Object.keys(enc).length === 1;\n\nconst ifExpr = (test, a, b) => ({\n signal: `${test} ? (${toExpr(a)}) : (${toExpr(b)})`\n});\n\nconst ifOrient = ($orient, t, b, l, r) => ({\n signal: (l != null ? `${$orient} === '${Left}' ? (${toExpr(l)}) : ` : '') + (b != null ? `${$orient} === '${Bottom}' ? (${toExpr(b)}) : ` : '') + (r != null ? `${$orient} === '${Right}' ? (${toExpr(r)}) : ` : '') + (t != null ? `${$orient} === '${Top}' ? (${toExpr(t)}) : ` : '') + '(null)'\n});\n\nconst toExpr = v => isSignal(v) ? v.signal : v == null ? null : stringValue(v);\n\nconst mult = (sign, value) => value === 0 ? 0 : isSignal(sign) ? {\n signal: `(${sign.signal}) * ${value}`\n} : {\n value: sign * value\n};\nconst patch = (value, base) => {\n const s = value.signal;\n return s && s.endsWith('(null)') ? {\n signal: s.slice(0, -6) + base.signal\n } : value;\n};\n\nfunction fallback(prop, config, axisConfig, style) {\n let styleProp;\n\n if (config && hasOwnProperty(config, prop)) {\n return config[prop];\n } else if (hasOwnProperty(axisConfig, prop)) {\n return axisConfig[prop];\n } else if (prop.startsWith('title')) {\n switch (prop) {\n case 'titleColor':\n styleProp = 'fill';\n break;\n\n case 'titleFont':\n case 'titleFontSize':\n case 'titleFontWeight':\n styleProp = prop[5].toLowerCase() + prop.slice(6);\n }\n\n return style[GuideTitleStyle][styleProp];\n } else if (prop.startsWith('label')) {\n switch (prop) {\n case 'labelColor':\n styleProp = 'fill';\n break;\n\n case 'labelFont':\n case 'labelFontSize':\n styleProp = prop[5].toLowerCase() + prop.slice(6);\n }\n\n return style[GuideLabelStyle][styleProp];\n }\n\n return null;\n}\n\nfunction keys(objects) {\n const map = {};\n\n for (const obj of objects) {\n if (!obj) continue;\n\n for (const key in obj) map[key] = 1;\n }\n\n return Object.keys(map);\n}\n\nfunction axisConfig (spec, scope) {\n var config = scope.config,\n style = config.style,\n axis = config.axis,\n band = scope.scaleType(spec.scale) === 'band' && config.axisBand,\n orient = spec.orient,\n xy,\n or,\n key;\n\n if (isSignal(orient)) {\n const xyKeys = keys([config.axisX, config.axisY]),\n orientKeys = keys([config.axisTop, config.axisBottom, config.axisLeft, config.axisRight]);\n xy = {};\n\n for (key of xyKeys) {\n xy[key] = ifX(orient, fallback(key, config.axisX, axis, style), fallback(key, config.axisY, axis, style));\n }\n\n or = {};\n\n for (key of orientKeys) {\n or[key] = ifOrient(orient.signal, fallback(key, config.axisTop, axis, style), fallback(key, config.axisBottom, axis, style), fallback(key, config.axisLeft, axis, style), fallback(key, config.axisRight, axis, style));\n }\n } else {\n xy = orient === Top || orient === Bottom ? config.axisX : config.axisY;\n or = config['axis' + orient[0].toUpperCase() + orient.slice(1)];\n }\n\n const result = xy || or || band ? extend({}, axis, xy, or, band) : axis;\n return result;\n}\n\nfunction axisDomain (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n orient = spec.orient;\n\n let enter, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('domainColor'),\n strokeCap: _('domainCap'),\n strokeDash: _('domainDash'),\n strokeDashOffset: _('domainDashOffset'),\n strokeWidth: _('domainWidth'),\n strokeOpacity: _('domainOpacity')\n });\n const pos0 = position(spec, 0);\n const pos1 = position(spec, 1);\n enter.x = update.x = ifX(orient, pos0, zero);\n enter.x2 = update.x2 = ifX(orient, pos1);\n enter.y = update.y = ifY(orient, pos0, zero);\n enter.y2 = update.y2 = ifY(orient, pos1);\n return guideMark({\n type: RuleMark,\n role: AxisDomainRole,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction position(spec, pos) {\n return {\n scale: spec.scale,\n range: pos\n };\n}\n\nfunction axisGrid (spec, config, userEncode, dataRef, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n vscale = spec.gridScale,\n sign = getSign(orient, 1, -1),\n offset = offsetValue(spec.offset, sign);\n\n let enter, exit, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: exit = {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gridColor'),\n strokeCap: _('gridCap'),\n strokeDash: _('gridDash'),\n strokeDashOffset: _('gridDashOffset'),\n strokeOpacity: _('gridOpacity'),\n strokeWidth: _('gridWidth')\n });\n const tickPos = {\n scale: spec.scale,\n field: Value,\n band: band.band,\n extra: band.extra,\n offset: band.offset,\n round: _('tickRound')\n };\n const sz = ifX(orient, {\n signal: 'height'\n }, {\n signal: 'width'\n });\n const gridStart = vscale ? {\n scale: vscale,\n range: 0,\n mult: sign,\n offset: offset\n } : {\n value: 0,\n offset: offset\n };\n const gridEnd = vscale ? {\n scale: vscale,\n range: 1,\n mult: sign,\n offset: offset\n } : extend(sz, {\n mult: sign,\n offset: offset\n });\n enter.x = update.x = ifX(orient, tickPos, gridStart);\n enter.y = update.y = ifY(orient, tickPos, gridStart);\n enter.x2 = update.x2 = ifY(orient, gridEnd);\n enter.y2 = update.y2 = ifX(orient, gridEnd);\n exit.x = ifX(orient, tickPos);\n exit.y = ifY(orient, tickPos);\n return guideMark({\n type: RuleMark,\n role: AxisGridRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction offsetValue(offset, sign) {\n if (sign === 1) ; else if (!isObject(offset)) {\n offset = isSignal(sign) ? {\n signal: `(${sign.signal}) * (${offset || 0})`\n } : sign * (offset || 0);\n } else {\n let entry = offset = extend({}, offset);\n\n while (entry.mult != null) {\n if (!isObject(entry.mult)) {\n entry.mult = isSignal(sign) // no offset if sign === 1\n ? {\n signal: `(${entry.mult}) * (${sign.signal})`\n } : entry.mult * sign;\n return offset;\n } else {\n entry = entry.mult = extend({}, entry.mult);\n }\n }\n\n entry.mult = sign;\n }\n\n return offset;\n}\n\nfunction axisTicks (spec, config, userEncode, dataRef, size, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n sign = getSign(orient, -1, 1);\n\n let enter, exit, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: exit = {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('tickColor'),\n strokeCap: _('tickCap'),\n strokeDash: _('tickDash'),\n strokeDashOffset: _('tickDashOffset'),\n strokeOpacity: _('tickOpacity'),\n strokeWidth: _('tickWidth')\n });\n const tickSize = encoder(size);\n tickSize.mult = sign;\n const tickPos = {\n scale: spec.scale,\n field: Value,\n band: band.band,\n extra: band.extra,\n offset: band.offset,\n round: _('tickRound')\n };\n update.y = enter.y = ifX(orient, zero, tickPos);\n update.y2 = enter.y2 = ifX(orient, tickSize);\n exit.x = ifX(orient, tickPos);\n update.x = enter.x = ifY(orient, zero, tickPos);\n update.x2 = enter.x2 = ifY(orient, tickSize);\n exit.y = ifY(orient, tickPos);\n return guideMark({\n type: RuleMark,\n role: AxisTickRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction flushExpr(scale, threshold, a, b, c) {\n return {\n signal: 'flush(range(\"' + scale + '\"), ' + 'scale(\"' + scale + '\", datum.value), ' + threshold + ',' + a + ',' + b + ',' + c + ')'\n };\n}\n\nfunction axisLabels (spec, config, userEncode, dataRef, size, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n scale = spec.scale,\n sign = getSign(orient, -1, 1),\n flush = deref(_('labelFlush')),\n flushOffset = deref(_('labelFlushOffset')),\n labelAlign = _('labelAlign'),\n labelBaseline = _('labelBaseline');\n\n let flushOn = flush === 0 || !!flush,\n update;\n const tickSize = encoder(size);\n tickSize.mult = sign;\n tickSize.offset = encoder(_('labelPadding') || 0);\n tickSize.offset.mult = sign;\n const tickPos = {\n scale: scale,\n field: Value,\n band: 0.5,\n offset: extendOffset(band.offset, _('labelOffset'))\n };\n const align = ifX(orient, flushOn ? flushExpr(scale, flush, '\"left\"', '\"right\"', '\"center\"') : {\n value: 'center'\n }, ifRight(orient, 'left', 'right'));\n const baseline = ifX(orient, ifTop(orient, 'bottom', 'top'), flushOn ? flushExpr(scale, flush, '\"top\"', '\"bottom\"', '\"middle\"') : {\n value: 'middle'\n });\n const offsetExpr = flushExpr(scale, flush, `-(${flushOffset})`, flushOffset, 0);\n flushOn = flushOn && flushOffset;\n const enter = {\n opacity: zero,\n x: ifX(orient, tickPos, tickSize),\n y: ifY(orient, tickPos, tickSize)\n };\n const encode = {\n enter: enter,\n update: update = {\n opacity: one,\n text: {\n field: Label\n },\n x: enter.x,\n y: enter.y,\n align,\n baseline\n },\n exit: {\n opacity: zero,\n x: enter.x,\n y: enter.y\n }\n };\n addEncoders(encode, {\n dx: !labelAlign && flushOn ? ifX(orient, offsetExpr) : null,\n dy: !labelBaseline && flushOn ? ifY(orient, offsetExpr) : null\n });\n addEncoders(encode, {\n angle: _('labelAngle'),\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontWeight: _('labelFontWeight'),\n fontStyle: _('labelFontStyle'),\n limit: _('labelLimit'),\n lineHeight: _('labelLineHeight')\n }, {\n align: labelAlign,\n baseline: labelBaseline\n });\n\n const bound = _('labelBound');\n\n let overlap = _('labelOverlap'); // if overlap method or bound defined, request label overlap removal\n\n\n overlap = overlap || bound ? {\n separation: _('labelSeparation'),\n method: overlap,\n order: 'datum.index',\n bound: bound ? {\n scale,\n orient,\n tolerance: bound\n } : null\n } : undefined;\n\n if (update.align !== align) {\n update.align = patch(update.align, align);\n }\n\n if (update.baseline !== baseline) {\n update.baseline = patch(update.baseline, baseline);\n }\n\n return guideMark({\n type: TextMark,\n role: AxisLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: dataRef,\n encode,\n overlap\n }, userEncode);\n}\n\nfunction axisTitle (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n sign = getSign(orient, -1, 1);\n\n let enter, update;\n const encode = {\n enter: enter = {\n opacity: zero,\n anchor: encoder(_('titleAnchor', null)),\n align: {\n signal: alignExpr$1\n }\n },\n update: update = extend({}, enter, {\n opacity: one,\n text: encoder(spec.title)\n }),\n exit: {\n opacity: zero\n }\n };\n const titlePos = {\n signal: `lerp(range(\"${spec.scale}\"), ${anchorExpr(0, 1, 0.5)})`\n };\n update.x = ifX(orient, titlePos);\n update.y = ifY(orient, titlePos);\n enter.angle = ifX(orient, zero, mult(sign, 90));\n enter.baseline = ifX(orient, ifTop(orient, Bottom, Top), {\n value: Bottom\n });\n update.angle = enter.angle;\n update.baseline = enter.baseline;\n addEncoders(encode, {\n fill: _('titleColor'),\n fillOpacity: _('titleOpacity'),\n font: _('titleFont'),\n fontSize: _('titleFontSize'),\n fontStyle: _('titleFontStyle'),\n fontWeight: _('titleFontWeight'),\n limit: _('titleLimit'),\n lineHeight: _('titleLineHeight')\n }, {\n // require update\n align: _('titleAlign'),\n angle: _('titleAngle'),\n baseline: _('titleBaseline')\n });\n autoLayout(_, orient, encode, userEncode);\n encode.update.align = patch(encode.update.align, enter.align);\n encode.update.angle = patch(encode.update.angle, enter.angle);\n encode.update.baseline = patch(encode.update.baseline, enter.baseline);\n return guideMark({\n type: TextMark,\n role: AxisTitleRole,\n style: GuideTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction autoLayout(_, orient, encode, userEncode) {\n const auto = (value, dim) => value != null ? (encode.update[dim] = patch(encoder(value), encode.update[dim]), false) : !has(dim, userEncode) ? true : false;\n\n const autoY = auto(_('titleX'), 'x'),\n autoX = auto(_('titleY'), 'y');\n encode.enter.auto = autoX === autoY ? encoder(autoX) : ifX(orient, encoder(autoX), encoder(autoY));\n}\n\nfunction parseAxis (spec, scope) {\n const config = axisConfig(spec, scope),\n encode = spec.encode || {},\n axisEncode = encode.axis || {},\n name = axisEncode.name || undefined,\n interactive = axisEncode.interactive,\n style = axisEncode.style,\n _ = lookup(spec, config),\n band = tickBand(_); // single-element data source for axis group\n\n\n const datum = {\n scale: spec.scale,\n ticks: !!_('ticks'),\n labels: !!_('labels'),\n grid: !!_('grid'),\n domain: !!_('domain'),\n title: spec.title != null\n };\n const dataRef = ref(scope.add(Collect({}, [datum]))); // data source for axis ticks\n\n const ticksRef = ref(scope.add(AxisTicks({\n scale: scope.scaleRef(spec.scale),\n extra: scope.property(band.extra),\n count: scope.objectProperty(spec.tickCount),\n values: scope.objectProperty(spec.values),\n minstep: scope.property(spec.tickMinStep),\n formatType: scope.property(spec.formatType),\n formatSpecifier: scope.property(spec.format)\n }))); // generate axis marks\n\n const children = [];\n let size; // include axis gridlines if requested\n\n if (datum.grid) {\n children.push(axisGrid(spec, config, encode.grid, ticksRef, band));\n } // include axis ticks if requested\n\n\n if (datum.ticks) {\n size = _('tickSize');\n children.push(axisTicks(spec, config, encode.ticks, ticksRef, size, band));\n } // include axis labels if requested\n\n\n if (datum.labels) {\n size = datum.ticks ? size : 0;\n children.push(axisLabels(spec, config, encode.labels, ticksRef, size, band));\n } // include axis domain path if requested\n\n\n if (datum.domain) {\n children.push(axisDomain(spec, config, encode.domain, dataRef));\n } // include axis title if defined\n\n\n if (datum.title) {\n children.push(axisTitle(spec, config, encode.title, dataRef));\n } // parse axis specification\n\n\n return parseMark(guideGroup({\n role: AxisRole,\n from: dataRef,\n encode: extendEncode(buildAxisEncode(_, spec), axisEncode, Skip),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\n\nfunction buildAxisEncode(_, spec) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n offset: _('offset') || 0,\n position: value(spec.position, 0),\n titlePadding: _('titlePadding'),\n minExtent: _('minExtent'),\n maxExtent: _('maxExtent'),\n range: {\n signal: `abs(span(range(\"${spec.scale}\")))`\n },\n translate: _('translate'),\n // accessibility support\n format: spec.format,\n formatType: spec.formatType\n });\n return encode;\n}\n\nfunction parseScope (spec, scope, preprocessed) {\n const signals = array(spec.signals),\n scales = array(spec.scales); // parse signal definitions, if not already preprocessed\n\n if (!preprocessed) signals.forEach(_ => parseSignal(_, scope)); // parse cartographic projection definitions\n\n array(spec.projections).forEach(_ => parseProjection(_, scope)); // initialize scale references\n\n scales.forEach(_ => initScale(_, scope)); // parse data sources\n\n array(spec.data).forEach(_ => parseData(_, scope)); // parse scale definitions\n\n scales.forEach(_ => parseScale(_, scope)); // parse signal updates\n\n (preprocessed || signals).forEach(_ => parseSignalUpdates(_, scope)); // parse axis definitions\n\n array(spec.axes).forEach(_ => parseAxis(_, scope)); // parse mark definitions\n\n array(spec.marks).forEach(_ => parseMark(_, scope)); // parse legend definitions\n\n array(spec.legends).forEach(_ => parseLegend(_, scope)); // parse title, if defined\n\n if (spec.title) parseTitle(spec.title, scope); // parse collected lambda (anonymous) expressions\n\n scope.parseLambdas();\n return scope;\n}\n\nconst rootEncode = spec => extendEncode({\n enter: {\n x: {\n value: 0\n },\n y: {\n value: 0\n }\n },\n update: {\n width: {\n signal: 'width'\n },\n height: {\n signal: 'height'\n }\n }\n}, spec);\n\nfunction parseView(spec, scope) {\n const config = scope.config; // add scenegraph root\n\n const root = ref(scope.root = scope.add(operator())); // parse top-level signal definitions\n\n const signals = collectSignals(spec, config);\n signals.forEach(_ => parseSignal(_, scope)); // assign description, event, legend, and locale configuration\n\n scope.description = spec.description || config.description;\n scope.eventConfig = config.events;\n scope.legends = scope.objectProperty(config.legend && config.legend.layout);\n scope.locale = config.locale; // store root group item\n\n const input = scope.add(Collect()); // encode root group item\n\n const encode = scope.add(Encode(parseEncode(rootEncode(spec.encode), GroupMark, FrameRole, spec.style, scope, {\n pulse: ref(input)\n }))); // perform view layout\n\n const parent = scope.add(ViewLayout({\n layout: scope.objectProperty(spec.layout),\n legends: scope.legends,\n autosize: scope.signalRef('autosize'),\n mark: root,\n pulse: ref(encode)\n }));\n scope.operators.pop(); // parse remainder of specification\n\n scope.pushState(ref(encode), ref(parent), null);\n parseScope(spec, scope, signals);\n scope.operators.push(parent); // bound / render / sieve root item\n\n let op = scope.add(Bound({\n mark: root,\n pulse: ref(parent)\n }));\n op = scope.add(Render({\n pulse: ref(op)\n }));\n op = scope.add(Sieve({\n pulse: ref(op)\n })); // track metadata for root item\n\n scope.addData('root', new DataScope(scope, input, input, op));\n return scope;\n}\n\nfunction signalObject(name, value) {\n return value && value.signal ? {\n name,\n update: value.signal\n } : {\n name,\n value\n };\n}\n/**\n * Collect top-level signals, merging values as needed. Signals\n * defined in the config signals arrays are added only if that\n * signal is not explicitly defined in the specification.\n * Built-in signals (autosize, background, padding, width, height)\n * receive special treatment. They are initialized using the\n * top-level spec property, or, if undefined in the spec, using\n * the corresponding top-level config property. If this property\n * is a signal reference object, the signal expression maps to the\n * signal 'update' property. If the spec's top-level signal array\n * contains an entry that matches a built-in signal, that entry\n * will be merged with the built-in specification, potentially\n * overwriting existing 'value' or 'update' properties.\n */\n\n\nfunction collectSignals(spec, config) {\n const _ = name => value(spec[name], config[name]),\n signals = [signalObject('background', _('background')), signalObject('autosize', parseAutosize(_('autosize'))), signalObject('padding', parsePadding(_('padding'))), signalObject('width', _('width') || 0), signalObject('height', _('height') || 0)],\n pre = signals.reduce((p, s) => (p[s.name] = s, p), {}),\n map = {}; // add spec signal array\n\n\n array(spec.signals).forEach(s => {\n if (hasOwnProperty(pre, s.name)) {\n // merge if built-in signal\n s = extend(pre[s.name], s);\n } else {\n // otherwise add to signal list\n signals.push(s);\n }\n\n map[s.name] = s;\n }); // add config signal array\n\n array(config.signals).forEach(s => {\n if (!hasOwnProperty(map, s.name) && !hasOwnProperty(pre, s.name)) {\n // add to signal list if not already defined\n signals.push(s);\n }\n });\n return signals;\n}\n\nfunction Scope(config, options) {\n this.config = config || {};\n this.options = options || {};\n this.bindings = [];\n this.field = {};\n this.signals = {};\n this.lambdas = {};\n this.scales = {};\n this.events = {};\n this.data = {};\n this.streams = [];\n this.updates = [];\n this.operators = [];\n this.eventConfig = null;\n this.locale = null;\n this._id = 0;\n this._subid = 0;\n this._nextsub = [0];\n this._parent = [];\n this._encode = [];\n this._lookup = [];\n this._markpath = [];\n}\n\nfunction Subscope(scope) {\n this.config = scope.config;\n this.options = scope.options;\n this.legends = scope.legends;\n this.field = Object.create(scope.field);\n this.signals = Object.create(scope.signals);\n this.lambdas = Object.create(scope.lambdas);\n this.scales = Object.create(scope.scales);\n this.events = Object.create(scope.events);\n this.data = Object.create(scope.data);\n this.streams = [];\n this.updates = [];\n this.operators = [];\n this._id = 0;\n this._subid = ++scope._nextsub[0];\n this._nextsub = scope._nextsub;\n this._parent = scope._parent.slice();\n this._encode = scope._encode.slice();\n this._lookup = scope._lookup.slice();\n this._markpath = scope._markpath;\n}\n\nScope.prototype = Subscope.prototype = {\n parse(spec) {\n return parseScope(spec, this);\n },\n\n fork() {\n return new Subscope(this);\n },\n\n isSubscope() {\n return this._subid > 0;\n },\n\n toRuntime() {\n this.finish();\n return {\n description: this.description,\n operators: this.operators,\n streams: this.streams,\n updates: this.updates,\n bindings: this.bindings,\n eventConfig: this.eventConfig,\n locale: this.locale\n };\n },\n\n id() {\n return (this._subid ? this._subid + ':' : 0) + this._id++;\n },\n\n add(op) {\n this.operators.push(op);\n op.id = this.id(); // if pre-registration references exist, resolve them now\n\n if (op.refs) {\n op.refs.forEach(ref => {\n ref.$ref = op.id;\n });\n op.refs = null;\n }\n\n return op;\n },\n\n proxy(op) {\n const vref = op instanceof Entry ? ref(op) : op;\n return this.add(Proxy({\n value: vref\n }));\n },\n\n addStream(stream) {\n this.streams.push(stream);\n stream.id = this.id();\n return stream;\n },\n\n addUpdate(update) {\n this.updates.push(update);\n return update;\n },\n\n // Apply metadata\n finish() {\n let name, ds; // annotate root\n\n if (this.root) this.root.root = true; // annotate signals\n\n for (name in this.signals) {\n this.signals[name].signal = name;\n } // annotate scales\n\n\n for (name in this.scales) {\n this.scales[name].scale = name;\n } // annotate data sets\n\n\n function annotate(op, name, type) {\n let data, list;\n\n if (op) {\n data = op.data || (op.data = {});\n list = data[name] || (data[name] = []);\n list.push(type);\n }\n }\n\n for (name in this.data) {\n ds = this.data[name];\n annotate(ds.input, name, 'input');\n annotate(ds.output, name, 'output');\n annotate(ds.values, name, 'values');\n\n for (const field in ds.index) {\n annotate(ds.index[field], name, 'index:' + field);\n }\n }\n\n return this;\n },\n\n // ----\n pushState(encode, parent, lookup) {\n this._encode.push(ref(this.add(Sieve({\n pulse: encode\n }))));\n\n this._parent.push(parent);\n\n this._lookup.push(lookup ? ref(this.proxy(lookup)) : null);\n\n this._markpath.push(-1);\n },\n\n popState() {\n this._encode.pop();\n\n this._parent.pop();\n\n this._lookup.pop();\n\n this._markpath.pop();\n },\n\n parent() {\n return peek(this._parent);\n },\n\n encode() {\n return peek(this._encode);\n },\n\n lookup() {\n return peek(this._lookup);\n },\n\n markpath() {\n const p = this._markpath;\n return ++p[p.length - 1];\n },\n\n // ----\n fieldRef(field, name) {\n if (isString(field)) return fieldRef$1(field, name);\n\n if (!field.signal) {\n error('Unsupported field reference: ' + stringValue(field));\n }\n\n const s = field.signal;\n let f = this.field[s];\n\n if (!f) {\n const params = {\n name: this.signalRef(s)\n };\n if (name) params.as = name;\n this.field[s] = f = ref(this.add(Field(params)));\n }\n\n return f;\n },\n\n compareRef(cmp) {\n let signal = false;\n\n const check = _ => isSignal(_) ? (signal = true, this.signalRef(_.signal)) : isExpr$1(_) ? (signal = true, this.exprRef(_.expr)) : _;\n\n const fields = array(cmp.field).map(check),\n orders = array(cmp.order).map(check);\n return signal ? ref(this.add(Compare({\n fields: fields,\n orders: orders\n }))) : compareRef(fields, orders);\n },\n\n keyRef(fields, flat) {\n let signal = false;\n\n const check = _ => isSignal(_) ? (signal = true, ref(sig[_.signal])) : _;\n\n const sig = this.signals;\n fields = array(fields).map(check);\n return signal ? ref(this.add(Key({\n fields: fields,\n flat: flat\n }))) : keyRef(fields, flat);\n },\n\n sortRef(sort) {\n if (!sort) return sort; // including id ensures stable sorting\n\n const a = aggrField(sort.op, sort.field),\n o = sort.order || Ascending;\n return o.signal ? ref(this.add(Compare({\n fields: a,\n orders: this.signalRef(o.signal)\n }))) : compareRef(a, o);\n },\n\n // ----\n event(source, type) {\n const key = source + ':' + type;\n\n if (!this.events[key]) {\n const id = this.id();\n this.streams.push({\n id: id,\n source: source,\n type: type\n });\n this.events[key] = id;\n }\n\n return this.events[key];\n },\n\n // ----\n hasOwnSignal(name) {\n return hasOwnProperty(this.signals, name);\n },\n\n addSignal(name, value) {\n if (this.hasOwnSignal(name)) {\n error('Duplicate signal name: ' + stringValue(name));\n }\n\n const op = value instanceof Entry ? value : this.add(operator(value));\n return this.signals[name] = op;\n },\n\n getSignal(name) {\n if (!this.signals[name]) {\n error('Unrecognized signal name: ' + stringValue(name));\n }\n\n return this.signals[name];\n },\n\n signalRef(s) {\n if (this.signals[s]) {\n return ref(this.signals[s]);\n } else if (!hasOwnProperty(this.lambdas, s)) {\n this.lambdas[s] = this.add(operator(null));\n }\n\n return ref(this.lambdas[s]);\n },\n\n parseLambdas() {\n const code = Object.keys(this.lambdas);\n\n for (let i = 0, n = code.length; i < n; ++i) {\n const s = code[i],\n e = parseExpression(s, this),\n op = this.lambdas[s];\n op.params = e.$params;\n op.update = e.$expr;\n }\n },\n\n property(spec) {\n return spec && spec.signal ? this.signalRef(spec.signal) : spec;\n },\n\n objectProperty(spec) {\n return !spec || !isObject(spec) ? spec : this.signalRef(spec.signal || propertyLambda(spec));\n },\n\n exprRef(code, name) {\n const params = {\n expr: parseExpression(code, this)\n };\n if (name) params.expr.$name = name;\n return ref(this.add(Expression(params)));\n },\n\n addBinding(name, bind) {\n if (!this.bindings) {\n error('Nested signals do not support binding: ' + stringValue(name));\n }\n\n this.bindings.push(extend({\n signal: name\n }, bind));\n },\n\n // ----\n addScaleProj(name, transform) {\n if (hasOwnProperty(this.scales, name)) {\n error('Duplicate scale or projection name: ' + stringValue(name));\n }\n\n this.scales[name] = this.add(transform);\n },\n\n addScale(name, params) {\n this.addScaleProj(name, Scale(params));\n },\n\n addProjection(name, params) {\n this.addScaleProj(name, Projection(params));\n },\n\n getScale(name) {\n if (!this.scales[name]) {\n error('Unrecognized scale name: ' + stringValue(name));\n }\n\n return this.scales[name];\n },\n\n scaleRef(name) {\n return ref(this.getScale(name));\n },\n\n scaleType(name) {\n return this.getScale(name).params.type;\n },\n\n projectionRef(name) {\n return this.scaleRef(name);\n },\n\n projectionType(name) {\n return this.scaleType(name);\n },\n\n // ----\n addData(name, dataScope) {\n if (hasOwnProperty(this.data, name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n\n return this.data[name] = dataScope;\n },\n\n getData(name) {\n if (!this.data[name]) {\n error('Undefined data set name: ' + stringValue(name));\n }\n\n return this.data[name];\n },\n\n addDataPipeline(name, entries) {\n if (hasOwnProperty(this.data, name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n\n return this.addData(name, DataScope.fromEntries(this, entries));\n }\n\n};\n\nfunction propertyLambda(spec) {\n return (isArray(spec) ? arrayLambda : objectLambda)(spec);\n}\n\nfunction arrayLambda(array) {\n const n = array.length;\n let code = '[';\n\n for (let i = 0; i < n; ++i) {\n const value = array[i];\n code += (i > 0 ? ',' : '') + (isObject(value) ? value.signal || propertyLambda(value) : stringValue(value));\n }\n\n return code + ']';\n}\n\nfunction objectLambda(obj) {\n let code = '{',\n i = 0,\n key,\n value;\n\n for (key in obj) {\n value = obj[key];\n code += (++i > 1 ? ',' : '') + stringValue(key) + ':' + (isObject(value) ? value.signal || propertyLambda(value) : stringValue(value));\n }\n\n return code + '}';\n}\n\n/**\n * Standard configuration defaults for Vega specification parsing.\n * Users can provide their own (sub-)set of these default values\n * by passing in a config object to the top-level parse method.\n */\nfunction defaults () {\n const defaultFont = 'sans-serif',\n defaultSymbolSize = 30,\n defaultStrokeWidth = 2,\n defaultColor = '#4c78a8',\n black = '#000',\n gray = '#888',\n lightGray = '#ddd';\n return {\n // default visualization description\n description: 'Vega visualization',\n // default padding around visualization\n padding: 0,\n // default for automatic sizing; options: 'none', 'pad', 'fit'\n // or provide an object (e.g., {'type': 'pad', 'resize': true})\n autosize: 'pad',\n // default view background color\n // covers the entire view component\n background: null,\n // default event handling configuration\n // preventDefault for view-sourced event types except 'wheel'\n events: {\n defaults: {\n allow: ['wheel']\n }\n },\n // defaults for top-level group marks\n // accepts mark properties (fill, stroke, etc)\n // covers the data rectangle within group width/height\n group: null,\n // defaults for basic mark types\n // each subset accepts mark properties (fill, stroke, etc)\n mark: null,\n arc: {\n fill: defaultColor\n },\n area: {\n fill: defaultColor\n },\n image: null,\n line: {\n stroke: defaultColor,\n strokeWidth: defaultStrokeWidth\n },\n path: {\n stroke: defaultColor\n },\n rect: {\n fill: defaultColor\n },\n rule: {\n stroke: black\n },\n shape: {\n stroke: defaultColor\n },\n symbol: {\n fill: defaultColor,\n size: 64\n },\n text: {\n fill: black,\n font: defaultFont,\n fontSize: 11\n },\n trail: {\n fill: defaultColor,\n size: defaultStrokeWidth\n },\n // style definitions\n style: {\n // axis & legend labels\n 'guide-label': {\n fill: black,\n font: defaultFont,\n fontSize: 10\n },\n // axis & legend titles\n 'guide-title': {\n fill: black,\n font: defaultFont,\n fontSize: 11,\n fontWeight: 'bold'\n },\n // headers, including chart title\n 'group-title': {\n fill: black,\n font: defaultFont,\n fontSize: 13,\n fontWeight: 'bold'\n },\n // chart subtitle\n 'group-subtitle': {\n fill: black,\n font: defaultFont,\n fontSize: 12\n },\n // defaults for styled point marks in Vega-Lite\n point: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'circle'\n },\n circle: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth\n },\n square: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'square'\n },\n // defaults for styled group marks in Vega-Lite\n cell: {\n fill: 'transparent',\n stroke: lightGray\n }\n },\n // defaults for title\n title: {\n orient: 'top',\n anchor: 'middle',\n offset: 4,\n subtitlePadding: 3\n },\n // defaults for axes\n axis: {\n minExtent: 0,\n maxExtent: 200,\n bandPosition: 0.5,\n domain: true,\n domainWidth: 1,\n domainColor: gray,\n grid: false,\n gridWidth: 1,\n gridColor: lightGray,\n labels: true,\n labelAngle: 0,\n labelLimit: 180,\n labelOffset: 0,\n labelPadding: 2,\n ticks: true,\n tickColor: gray,\n tickOffset: 0,\n tickRound: true,\n tickSize: 5,\n tickWidth: 1,\n titlePadding: 4\n },\n // correction for centering bias\n axisBand: {\n tickOffset: -0.5\n },\n // defaults for cartographic projection\n projection: {\n type: 'mercator'\n },\n // defaults for legends\n legend: {\n orient: 'right',\n padding: 0,\n gridAlign: 'each',\n columnPadding: 10,\n rowPadding: 2,\n symbolDirection: 'vertical',\n gradientDirection: 'vertical',\n gradientLength: 200,\n gradientThickness: 16,\n gradientStrokeColor: lightGray,\n gradientStrokeWidth: 0,\n gradientLabelOffset: 2,\n labelAlign: 'left',\n labelBaseline: 'middle',\n labelLimit: 160,\n labelOffset: 4,\n labelOverlap: true,\n symbolLimit: 30,\n symbolType: 'circle',\n symbolSize: 100,\n symbolOffset: 0,\n symbolStrokeWidth: 1.5,\n symbolBaseFillColor: 'transparent',\n symbolBaseStrokeColor: gray,\n titleLimit: 180,\n titleOrient: 'top',\n titlePadding: 5,\n layout: {\n offset: 18,\n direction: 'horizontal',\n left: {\n direction: 'vertical'\n },\n right: {\n direction: 'vertical'\n }\n }\n },\n // defaults for scale ranges\n range: {\n category: {\n scheme: 'tableau10'\n },\n ordinal: {\n scheme: 'blues'\n },\n heatmap: {\n scheme: 'yellowgreenblue'\n },\n ramp: {\n scheme: 'blues'\n },\n diverging: {\n scheme: 'blueorange',\n extent: [1, 0]\n },\n symbol: ['circle', 'square', 'triangle-up', 'cross', 'diamond', 'triangle-right', 'triangle-down', 'triangle-left']\n }\n };\n}\n\nfunction parse (spec, config, options) {\n if (!isObject(spec)) {\n error('Input Vega specification must be an object.');\n }\n\n config = mergeConfig(defaults(), config, spec.config);\n return parseView(spec, new Scope(config, options)).toRuntime();\n}\n\nexport { AxisDomainRole, AxisGridRole, AxisLabelRole, AxisRole, AxisTickRole, AxisTitleRole, DataScope, FrameRole, LegendEntryRole, LegendLabelRole, LegendRole, LegendSymbolRole, LegendTitleRole, MarkRole, Scope, ScopeRole, defaults as config, parse, parseSignal as signal, parseSignalUpdates as signalUpdates, parseStream as stream };\n","// -- Transforms -----\n\nimport pkg from './package.json';\nimport {extend} from 'vega-util';\nimport {transforms} from 'vega-dataflow';\nimport * as tx from 'vega-transforms';\nimport * as vtx from 'vega-view-transforms';\nimport * as encode from 'vega-encode';\nimport * as geo from 'vega-geo';\nimport * as force from 'vega-force';\nimport * as tree from 'vega-hierarchy';\nimport * as label from 'vega-label';\nimport * as reg from 'vega-regression';\nimport * as voronoi from 'vega-voronoi';\nimport * as wordcloud from 'vega-wordcloud';\nimport * as xf from 'vega-crossfilter';\nextend(\n transforms,\n tx, vtx, encode, geo, force, label, tree, reg, voronoi, wordcloud, xf\n);\n\n\n// -- Exports -----\n\nexport const version = pkg.version;\n\nexport * from 'vega-statistics';\n\nexport * from 'vega-time';\n\nexport * from 'vega-util';\n\nexport * from 'vega-loader';\n\nexport * from 'vega-scenegraph';\n\nexport {\n Dataflow,\n EventStream,\n Parameters,\n Pulse,\n MultiPulse,\n Operator,\n Transform,\n changeset,\n ingest,\n isTuple,\n definition,\n transform,\n transforms,\n tupleid\n} from 'vega-dataflow';\n\nexport {\n scale,\n scheme,\n interpolate,\n interpolateColors,\n interpolateRange,\n quantizeInterpolator\n} from 'vega-scale';\n\nexport {\n projection\n} from 'vega-projection';\n\nexport {\n View\n} from 'vega-view';\n\nexport {\n numberFormatDefaultLocale as formatLocale,\n timeFormatDefaultLocale as timeFormatLocale,\n locale,\n defaultLocale,\n resetDefaultLocale\n} from 'vega-format';\n\nexport {\n expressionFunction\n} from 'vega-functions';\n\nexport {\n parse\n} from 'vega-parser';\n\nexport {\n context as runtimeContext\n} from 'vega-runtime';\n\nexport {\n codegen as codegenExpression,\n parse as parseExpression\n} from 'vega-expression';\n\nexport {\n selector as parseSelector\n} from 'vega-event-selector';\n"],"names":["accessor","fn","fields","name","fname","accessorName","accessorFields","getter","path","length","get1","getN","field","obj","len","i","error","message","Error","splitAccessPath","p","n","j","c","q","b","s","push","substring","opt","get","id","identity","_","zero","one","truthy","falsy","log$1","method","level","input","args","concat","slice","call","console","apply","logger","arguments","this","warn","info","debug","isArray","Array","isObject","Object","isLegalKey","key","mergeConfig","configs","reduce","out","source","signals","mergeNamed","r","layout","writeConfig","output","value","recurse","k","o","a","map","add","forEach","peek","array","toNumber","exp","sign","x","Math","log","symlog","log1p","abs","symexp","expm1","pow","exponent","pan","domain","delta","lift","ground","d0","d1","dd","panLinear","panLog","panPow","panSymlog","constant","zoom","anchor","scale","da","zoomLinear","zoomLog","zoomPow","zoomSymlog","quarter","date","Date","getMonth","utcquarter","getUTCMonth","clampRange","range","min","max","span","lo","hi","isFunction","compare","orders","ord","fmap","gen","comparator","f","keys","ascending","u","v","compare1","compareN","order","debounce","delay","handler","tid","e","clearTimeout","setTimeout","extend","extent","extentIndex","hop","prototype","hasOwnProperty","has","object","property","NULL","fastmap","test","has$1","size","empty","undefined","set","delete","clear","clean","next","flush","threshold","left","right","center","t","l","inherits","child","parent","members","proto","create","defineProperty","writable","enumerable","configurable","inrange","r0","r1","isBoolean","isDate","toString","isIterable","Symbol","iterator","isNumber","isRegExp","isString","flat","replace","lerp","frac","lruCache","maxsize","curr","prev","update","merge","array0","array1","n0","n1","merged","constructor","i0","i1","repeat","str","reps","pad","padchar","align","ceil","$","JSON","stringify","toBoolean","defaultParser","parse","toDate","parser","toSet","truncate","ellipsis","visitArray","filter","visitor","EOL","EOF","objectConverter","columns","Function","join","inferColumns","rows","columnSet","row","column","width","formatDate","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","isNaN","year","formatYear","getUTCFullYear","getUTCDate","delimiter","reFormat","RegExp","DELIMITER","charCodeAt","parseRows","text","N","I","eof","eol","token","preformatBody","formatValue","formatRow","convert","customConverter","format","formatBody","formatRows","topology","objects","type","features","geometries","feature","bbox","properties","geometry","transformPoint","transform","x0","y0","kx","ky","dx","translate","dy","arcs","arc","points","pop","reverse","point","line","ring","polygon","coordinates","stitchedArcs","fragmentByStart","fragmentByEnd","fragments","emptyIndex","start","end","g","p1","p0","dp","ends","fg","unshift","gf","meshArcs","extractArcs","stitch","geom","geomsByArc","extract0","extract1","extract2","extract3","geoms","NaN","mid","d","ascendingComparator","ascendingBisect","bisector","bisectRight","bisectLeft","number","Adder","_partials","Float64Array","_n","y","valueOf","e10","sqrt","e5","e2","stop","count","ticks","step","tickIncrement","isFinite","round","power","floor","LN10","tickStep","step0","step1","values","valueof","index","quickselect","m","z","sd","swap","quantile","from","numbers","value0","subarray","quantileSorted","arrays","flatten","sum","formatDecimalParts","toExponential","indexOf","coefficient","prefixExponent","re","formatSpecifier","specifier","match","exec","FormatSpecifier","fill","symbol","comma","precision","trim","toFixed","toLocaleString","toPrecision","formatRounded","toUpperCase","locale","formatPrefix","prefixes","grouping","thousands","group","Number","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","String","percent","minus","nan","newFormat","formatTypes","prefix","toLowerCase","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","formatTrim","Infinity","padding","definition","formatLocale","t0","t1","newInterval","floori","offseti","interval","offset","previous","setTime","every","millisecond","durationSecond","durationMinute","durationHour","durationDay","durationWeek","second","getMilliseconds","minute","getSeconds","getMinutes","hour","getHours","day","setHours","setDate","getDate","getTimezoneOffset","weekday","getDay","sunday","monday","thursday","month","setMonth","getFullYear","setFullYear","utcMinute","setUTCSeconds","utcHour","setUTCMinutes","utcDay","setUTCHours","setUTCDate","utcWeekday","getUTCDay","utcSunday","utcMonday","utcThursday","utcMonth","setUTCMonth","utcYear","setUTCFullYear","YEAR","QUARTER","MONTH","WEEK","DATE","DAY","DAYOFYEAR","HOURS","MINUTES","SECONDS","MILLISECONDS","TIME_UNITS","UNITS","timeUnits","units","unit","sort","defaultSpecifiers","timeUnitSpecifier","specifiers","fmt","localYear","dayofyear","localDayOfYear","week","localWeekNum","timeDay","timeWeek","localFirst","localDate","H","M","S","L","utcdayofyear","utcDayOfYear","utcweek","utcWeekNum","UTC","utcWeek","utcFirst","utcDate","inv","newDate","phase","getUnit","firstDay","localGet","localInv","w","timeFloor","utcGet","utcInv","utcFloor","timeIntervals","timeYear","timeMonth","timeHour","timeMinute","timeSecond","timeMillisecond","utcIntervals","utcSecond","utcMillisecond","timeInterval","utcInterval","ival","timeOffset","utcOffset","sequence","timeSequence","utcSequence","durationMonth","durationYear","Milli","Seconds","Minutes","Hours","Day","Month","Year","intervals","bin","ext","maxbins","target","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","formatRe","periodLookup","formatLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatDayOfMonth","formatMicroseconds","formatYearISO","formatFullYearISO","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatFullYear","formatZone","formatLiteralPercent","utcFormats","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCYearISO","formatUTCFullYearISO","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parses","string","parseSpecifier","parseDayOfMonth","parseMicroseconds","parseYear","parseFullYear","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parseQuarter","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseZone","parseLiteralPercent","pads","charAt","newParse","Z","Q","V","timeMonday","W","U","X","utcFormat","utcParse","timeFormat","timeParse","numberRe","percentRe","requoteRe","requote","names","Map","timeSunday","dISO","timeThursday","dow","UTCdISO","memoize","cache","spec","numberLocale","formatFloat","numberFormat","decimalChar","dec","idx","lastIndexOf","rightmostDigit","formatSpan","precisionPrefix","precisionRound","precisionFixed","defaultNumberLocale","defaultTimeLocale","resetNumberFormatDefaultLocale","numberFormatLocale","numberFormatDefaultLocale","timeMultiFormat","timeLocale","resetTimeFormatDefaultLocale","timeFormatLocale","timeFormatLocale$1","timeFormatDefaultLocale","createLocale","numberSpec","timeSpec","defaultLocale","protocol_re","allowed_re","whitespace_re","fileProtocol","async","load","uri","options","sanitize","url","href","localFile","file","http","fileAccess","result","isFile","loadFile","base","isAllowed","stringValue","hasProtocol","baseURL","startsWith","mode","defaultProtocol","rel","context","crossOrigin","fileLoader","fs","filename","Promise","accept","reject","readFile","data","fileReject","httpLoader","fetch","response","ok","status","statusText","httpReject","typeParsers","boolean","integer","unknown","typeTests","isInteger","typeList","inferType","inferTypes","types","delimitedFormat","delim","dsv","responseType","header","dsvFormat","json","prop","Buffer","isBuffer","copy","parseJSON","filters","interior","exterior","topojson","mesh","csv","tsv","reader","read","schema","timeParser","utcParser","datum","parsers","parts","pattern","split","loader","loaderFactory","UniqueList","idFunc","list","ids","remove","splice","asyncCallback","df","callback","err","TUPLE_ID_KEY","TUPLE_ID","isTuple","tupleid","setid","ingest$1","derive","rederive","stableCompare","cmp","isChangeSet","changeset","rem","mod","remp","modp","reflow","insert","modify","tuple","encode","pulse","tuples","cur","modifies","CACHE","Parameters","force","modified","OP_ID","NO_PARAMS","Operator","init","params","react","stamp","rank","qrank","flags","_update","parameters","flag","bit","state","targets","_targets","skip","initonly","argval","_argval","argops","_argops","deps","op","marshall","item","detach","evaluate","StopPropagation","run","rv","STREAM_ID","EventStream","receive","_filter","_apply","stream","consume","_consume","evt","val","trg","preventDefault","stopPropagation","throttle","pause","now","dataflow","between","active","SKIP","onStream","func","touch","onOperator","updater","connect","Pulse","materialize","visit","addFilter","MultiPulse","pulses","hash","changed","ADD","REM","MOD","changes","reentrant","ADD_REM","ADD_MOD","ALL","REFLOW","SOURCE","NO_SOURCE","NO_FIELDS","fork","clone","addAll","src","addF","remF","modF","srcF","cleans","runAfter","nomod","some","NO_OPT","Heap","nodes","siftdown","last","ridx","cidx","siftup","pidx","Dataflow","logLevel","_clock","_rank","_locale","_loader","_touched","_input","_pulse","_heap","_postrun","logMethod","_log","Transform","cleanThreshold","shift","sources","targetRank","rerank","queue","_enqueue","ingest","preload","pending","_pending","requests","done","loadPending","res","request","send","document","querySelectorAll","addEventListener","on","prerun","postrun","_getPulse","then","pr","priority","all","cb","runAsync","_running","enqueue","singlePulse","transforms","Definition","quantiles","quartiles","estimateBandwidth","mean","variance","deviation","h","maxb","logb","div","divide","minstep","steps","eps","nice","bootstrapCI","samples","alpha","mu","random","dotbin","smooth","thresh","smoothing","SQRT2PI","PI","SQRT2","nextSample","sampleNormal","stdev","rds","densityNormal","cumulativeNormal","cd","quantileNormal","erfinv","gaussian","sigma","dist","sample","pdf","cdf","icdf","kde","support","bandwidth","kernel","sampleLogNormal","densityLogNormal","cumulativeLogNormal","quantileLogNormal","lognormal","mixture","dists","weights","normalize","distributions","sampleUniform","densityUniform","cumulativeUniform","quantileUniform","uniform","ols","uX","uY","uXY","uX2","slope","Y","xv","yv","ux","uy","visitPoints","rSquared","predict","SSE","SST","sse","sst","linear","XY","X2","coef","ly","xy","YL","XYL","X2Y","c0","c1","YS","lx","quad","x2","X3","X4","X2X2","poly","lhs","rhs","matrix","gaussianElimination","uncenter","loess","bw","yhat","residuals","robustWeights","iter","edge","denom","xk","yk","tricube","xkw","updateInterval","medianResidual","median","arg","cnt","MIN_RADIANS","sampleCurve","minSteps","maxSteps","minX","maxX","pm","angleDelta","a0","atan2","a1","groupkey","measureName","as","noop","base_op","AggregateOps","cell","store","num","__count__","missing","valid","product","mean_d","average","req","dev","variancep","stdevp","stderr","distinct","ci0","ci1","q2","q1","q3","argmin","argmax","ValidAggregateOps","createMeasure","compareIndex","_ops","_out","compileMeasures","agg","ops","getreqs","resolve","ctr","TupleStore","_key","reset","measure","prototype$1","Aggregate","_adds","_mods","_alen","_mlen","_drop","_cross","_dims","_dnames","_measures","_countOnly","_counts","_prev","_inputs","_outputs","_add","_rem","_ext","_get","_q","quartile","ci","_ci","aggr","drop","cross","dims","vals","collect","cells","generate","inputs","outputs","inputMap","inputVisit","groupby","dname","cellkey","mname","outname","newcell","newtuple","measures","celltuple","counts","adds","mods","Bin","SortedList","resort","Collect","Compare","update$5","CountPattern","Cross","band","bins","_bins","b0","b1","root","process","tokens","tcase","tokenize","case","_parameterCheck","_match","_stop","_finish","stopwords","_tuples","Distributions","randomKDE","randomMixture","normal","randomNormal","randomLogNormal","randomUniform","FUNCTION","def","Density","fieldNames","partition$1","groups","distribution","minsteps","maxsteps","DotBin","Expression","update$4","expr","Extent","Subflow","Facet","_keys","Field","update$3","Filter","Flatten","Fold","Formula","Generate","autostep","detachSubflow","activate","flow","subflow","flows","sf","_group","detached","initTargets","act","rekey","k0","k1","isMod","revisit","maxlen","fnames","generator","Methods","Empty","Impute","JoinAggregate","KDE","Key","update$2","Load","Lookup","MultiExtent","update$1","extents","MultiValues","Params","Pivot","PreFacet","Project","Proxy","Quantile","gVals","kVal","impute","getValue","getField","fName","kName","gNames","keyvals","gKey","kMap","gMap","partition","_impute","cumulative","density","defaultValue","default","_transform","limit","pivotKeys","bind","aggregateParams","project","lut","dt","Relay","Sample","Sequence","Sieve","TimeUnit","probs","cap","OUTPUT","TupleIndex","Values","utc","timezone","_floor","u0","u1","timeBin","tunits","WindowOps","row_number","dense_rank","drank","percent_rank","cume_dist","cume","ntile","lag","lead","first_value","last_value","nth_value","nth","prev_value","next_value","find","ValidWindowOps","WindowState","windows","countOnly","visitInputs","param","WindowOp","Window","processPartition","ignorePeers","frame","setWindow","adjustRange","bisect","wind","pi","tau","epsilon","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","y2","arcTo","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","tan","acos","t01","t21","ccw","cos","sin","cw","rect","halfPi","asin","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","intersect","x3","y3","x10","y10","x32","y32","cornerTangents","rc","ox","oy","x11","y11","x00","y00","d2","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","Linear","_context","defined","curve","curveLinear","buffer","defined0","lineStart","lineEnd","pointX","pointY","area","x0z","y0z","areaStart","areaEnd","arealine","lineX0","lineY0","lineY1","lineX1","_line","_point","draw","that","Basis","BasisClosed","BasisOpen","Bundle","beta","_basis","_beta","_x2","_x3","_x4","_y2","_y3","_y4","_x","_y","custom","bundle","_k","Cardinal","tension","cardinal","CardinalClosed","_x5","_y5","CardinalOpen","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","_alpha","x23","y23","catmullRom","CatmullRomClosed","CatmullRomOpen","LinearClosed","slope3","h0","h1","s0","s1","slope2","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","Step","_t","domCanvas","createElement","getContext","height","_t0","px","py","domImage","Image","initRange","initInterpolator","interpolator","implicit","ordinal","factory","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","parseInt","rgbn","Rgb","rgba","hsla","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","Hsl","hslConvert","hsl","hsl2rgb","m1","m2","define","channels","assign","displayable","formatHsl","radians","degrees","Xn","Zn","t2","labConvert","Lab","Hcl","hcl2lab","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","hcl","A","B","C","E","ED","EB","BC_DA","cubehelixConvert","Cubehelix","bl","cubehelix","basis","v0","v1","v2","v3","t3","cosh","sinh","hue","gamma","nogamma","exponential","rgbGamma","colorRgb","rgbSpline","spline","colors","rgbBasis","rgbBasisClosed","basisClosed","isNumberArray","ArrayBuffer","isView","DataView","genericArray","nb","na","reA","reB","am","bm","bs","bi","lastIndex","numberArray","svgNode","translateX","translateY","rotate","skewX","scaleX","scaleY","atan","interpolateTransform","pxComma","pxParen","degParen","xa","ya","xb","yb","interpolateTransformCss","DOMMatrix","WebKitCSSMatrix","isIdentity","decompose","interpolateTransformSvg","createElementNS","setAttribute","baseVal","consolidate","zoomRho","rho","rho2","rho4","ux0","uy0","w0","ux1","uy1","w1","coshr0","tanh","duration","_1","_2","colorHsl","hslLong","colorHcl","hclLong","cubehelixGamma","colorCubehelix","cubehelixLong","piecewise","interpolate","colorLab","bimap","polymap","clamp","transformer","untransform","interpolateValue","rescale","clamper","invert","interpolateNumber","rangeRound","interpolateRound","continuous","tickFormat","linearish","prestep","maxIter","transformLog","transformExp","transformLogn","transformExpn","pow10","reflect","loggish","logs","pows","log10","log2","logp","powp","transformSymlog","transformSymexp","symlogish","transformPow","transformSqrt","transformSquare","powish","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","tickIntervals","tickInterval","k10","sequential","sequentialPow","k21","r2","divergingPow","bandSpace","paddingInner","paddingOuter","space","Log","Pow","Sqrt","Symlog","Time","Sequential","Quantize","Threshold","Ordinal","Point","Band","BinOrdinal","Continuous","Discrete","Discretizing","Interpolating","Temporal","scaleOrdinal","ordinalRange","range$1","invertRange","pointish","scales","metadata","invertExtent","invertRangeExtent","isValidScaleType","hasType","isContinuous","isDiscrete","isDiscretizing","isLogarithmic","isInterpolating","isQuantile","sequentialLog","sequentialSymlog","diverging","divergingLog","divergingSymlog","thresholds","quantize","scaleBinOrdinal","tickFormat$1","scaleProps","interpolateRange","interpolateColors","$$1","quantizeInterpolator","scaleFraction","scale$1","interp","palette","scheme","schemes","category10","category20","category20b","category20c","tableau10","tableau20","accent","dark2","paired","pastel1","pastel2","set1","set2","set3","blues","greens","greys","oranges","purples","reds","blueGreen","bluePurple","greenBlue","orangeRed","purpleBlue","purpleBlueGreen","purpleRed","redPurple","yellowGreen","yellowOrangeBrown","yellowOrangeRed","blueOrange","brownBlueGreen","purpleGreen","purpleOrange","redBlue","redGrey","yellowGreenBlue","redYellowBlue","redYellowGreen","pinkYellowGreen","spectral","viridis","magma","inferno","plasma","cividis","rainbow","sinebow","turbo","browns","tealBlues","teals","warmGreys","goldGreen","goldOrange","goldRed","lightGreyRed","lightGreyTeal","lightMulti","lightOrange","lightTealBlue","darkBlue","darkGold","darkGreen","darkMulti","darkRed","SymbolLegend","defaultFormatter","descending","tickCount","minStep","validTicks","endpoints","tickValues","noSkip","varfmt","tickLog","symbols","labelValues","binValues","thresholdValues","labelFormat","thresholdFormat","isDiscreteRange","formatRange","formatDiscrete","formatPoint","dflt","isTemporal","domainCaption","gradient_id","patternPrefix","isGradient","gradient","gradientRef","defs","Gradient","stops","lookup","curveBundle","curveCardinal","curveCardinalOpen","curveCardinalClosed","curveCatmullRom","curveCatmullRomClosed","curveCatmullRomOpen","horizontal","vertical","curves","orientation","entry","cmdlen","regexp","pathParse","pathstr","chunks","parsed","cmd","DegToRad","HalfPi","Tau","HalfSqrt3","segmentCache","bezierCache","bezier","th0","th1","rx","ry","sin_th","cos_th","a00","a01","a10","a11","cos_th0","sin_th0","cos_th1","sin_th1","th_half","sin_th_h2","temp","current","sX","sY","pathRender","tempX","tempY","tempControlX","tempControlY","controlX","controlY","beginPath","drawArc","coords","seg","large","sweep","rotateX","th","pl","sfactor_sq","sfactor","xc","yc","th_arc","segs","th2","th3","segments","bez","Tan30","builtins","customSymbol","rectangleX","rectangleY","rectangleWidth","rectangleHeight","vg_rect","crTL","crTR","crBL","crBR","rectangle","tl","tr","br","path$3","cornerRadius","vg_trail","ready","w2","ud","trail","value$1","arcShape","padRadius","da0","da1","ap","rp","rc0","rc1","oc","ax","ay","bx","by","kc","lc","centroid","arc$2","areavShape","area$2","areahShape","lineShape","line$2","rectShape","cornerRadiusTopLeft","cornerRadiusTopRight","cornerRadiusBottomRight","cornerRadiusBottomLeft","symbolShape","circle","symbol$2","shape","trailShape","hasCornerRadius","clip_id","resetSVGClipId","clip$1","renderer","clip","_defs","clipping","Bounds","union","Item","mark","bounds","GroupItem","items","ResourceLoader","customLoader","increment","decrement","boundStroke","miter","stroke","strokeOpacity","sw","strokeWidth","expand","strokeJoin","miterAdjustment","MAX_VALUE","equals","angle","rotatedPoints","encloses","alignsWith","intersects","contains","sanitizeURL","catch","loadImage","image$1","img","cors","onload","onerror","complete","poll","circleThreshold","rot","ma","mb","mc","md","addL","addX","addY","addp","addpL","boundContext","deg","context$1","px1","py1","px2","py2","quadExtrema","px3","py3","cubicExtrema","sa","ea","cubic","s2","canvas","intersectPath","brush","isPointInPath","intersectPoint","box","intersectRect","intersectRule","intersectBoxLine","blend","globalCompositeOperation","addStops","addColorStop","createRadialGradient","image","ictx","fillStyle","createLinearGradient","fillRect","createPattern","fillOpacity","globalAlpha","lw","strokeStyle","lineWidth","lineCap","strokeCap","lineJoin","miterLimit","strokeMiterLimit","setLineDash","strokeDash","lineDashOffset","strokeDashOffset","zindex","zorder","scene","zdirty","zitems","pickVisit","hit","drawAll","drawPath","drawOne","pick$1","gx","gy","pixelRatio","hitPath","filled","isPointInStroke","pickPath","translateItem","markItemPath","isect","tag","nested","attr","emit","rotateItem","bound","pick","markMultiItemPath","tip","orient","clipGroup","offset$1","strokeOffset","emitRectangle","off","rectanglePath","hitBackground","hitForeground","hitCorner","noBound","fore","strokeForeground","save","restore","dw","dh","ix","interactive","marktype","pickMark","content","background","foreground","getImage","imageWidth","aspect","imageHeight","imageXOffset","imageYOffset","baseline","toDataURL","ar0","ar1","imageSmoothingEnabled","drawImage","xOffset","yOffset","path$1","sx","sy","pathCache","path$2","transformItem","draw$2","rule","widthCache","textMetrics","fontSize","measureWidth","estimateWidth","useCanvas","use","_estimateWidth","textValue","currentFontHeight","_measureWidth","font","currentFont","measureText","lineHeight","textLines","lineBreak","multiLineOffset","widthGetter","rtl","dir","fontFamily","quote","fontStyle","fontVariant","fontWeight","textAlign","tempBounds","anchorPoint","radius","theta","Marks","lh","fillText","strokeText","boundItem","DUMMY","boundMark","hasItems","sceneToJSON","indent","sceneFromJSON","initialize","Scenegraph","createMark","role","aria","description","domCreate","doc","ns","domFind","el","childNodes","tagName","domChild","ownerDocument","insertBefore","domClear","removeChild","cssClass","event","getBoundingClientRect","clientX","clientLeft","clientY","top","clientTop","Handler","customTooltip","_active","_handlers","_tooltip","defaultTooltip","element","Renderer","_el","_bgcolor","toJSON","markdef","origin","_obj","firstChild","_origin","_scene","_handlerIndex","handlers","eventName","handleHref","MouseEvent","dispatchEvent","handleTooltip","show","tooltip","mdef","resolveItem","getItemBoundingClientRect","bottom","scaleFactor","resize","bgcolor","_width","_height","_scale","dirty","render","_call","_render","renderAsync","_ready","_load","redraw","DragEnterEvent","DragLeaveEvent","DragOverEvent","MouseDownEvent","MouseMoveEvent","MouseOutEvent","MouseOverEvent","ClickEvent","MouseWheelEvent","TouchStartEvent","TouchMoveEvent","TouchEndEvent","TooltipShowEvent","TooltipHideEvent","HrefEvent","CanvasHandler","_down","_touch","_first","_events","eventListenerCheck","eventBundle","fire","move","moveEvent","overEvent","outEvent","pickEvent","exit","inactive","_canvas","events","DOMMouseScroll","mousemove","dragover","mouseout","dragleave","mousedown","click","touchstart","changedTouches","touchmove","touchend","vegaType","window","devicePixelRatio","CanvasRenderer","_options","_redraw","_dirty","_tempb","base$1","SVGHandler","_hrefHandler","listener","_tooltipHandler","externalContext","appendChild","inDOM","HTMLElement","parentNode","ratio","style","setTransform","ctx","db","vb","viewBounds","clipToBounds","clearRect","__data__","svg","_svg","removeEventListener","ARIA_HIDDEN","ARIA_LABEL","ARIA_ROLE","ARIA_ROLEDESCRIPTION","GRAPHICS_OBJECT","GRAPHICS_SYMBOL","roledesc","label","AriaIgnore","AriaGuides","desc","caption","title","extractTitle","props","channelCaption","titleCaption","AriaEncode","ariaRole","ariaRoleDescription","ariaItemAttributes","hide","ariaMarkAttributes","ariaGuide","ariaMark","innerText","markup","buf","outer","inner","stack","open","attrs","close","serializeXML","node","_serialize","hasAttributes","attributes","hasChildNodes","children","nodeType","nodeValue","styles","rootAttributes","xmlns","svgns","SVGRenderer","_dirtyID","_root","dirtyParents","updateGradient","grad","pt","setAttributes","viewBox","preserveAspectRatio","fx","fy","fr","updateClipping","mask","sibling","__values__","bg","cg","ownerSVGElement","previousSibling","siblingCheck","nextSibling","_clearDefs","setAttributeNS","RootIndex","setProperty","removeAttribute","_dirtyCheck","_dirtyAll","isDirty","isGroup","lastChild","extra","mark_extras","setStyle","ts","textContent","removeAttributeNS","removeProperty","loc","location","SVGStringRenderer","_text","class","attrList","_hrefs","prefixed","display","Canvas","None","RenderType","PNG","SVG","modules","renderModule","hits","intersectMark","intersectGroup","visitMark","intersectItem","marks","headless","clipBounds","boundClip","sceneEqual","pathEqual","ka","kb","objectEqual","Top","Left","Right","Bottom","Start","Middle","End","Group","AxisRole","TitleRole","FrameRole","ScopeRole","LegendRole","RowHeader","RowFooter","RowTitle","ColHeader","ColFooter","ColTitle","Padding","Fit","FitX","FitY","All","Each","Flush","Column","Row","Bound","view","rebound","markBounds","COUNTER_NAME","Identifier","Mark","Overlap","counter","_signals","scenegraph","lookup$1","Init","methods","parity","greedy","sep","hasOverlap","hasBounds","Render","separation","boundScale","boundTolerance","tolerance","boundTest","boundOrient","isYAxis","axisLayout","axis","indices","grid","labels","axisIndices","position","minExtent","maxExtent","titlePadding","dl","axisTitleLayout","auto","bboxFlush","bboxFull","offsetValue","gridLayout","nodirty","alignCol","alignRow","padCol","padRow","ncols","nrows","xExtent","xMax","yExtent","yMax","boxes","trellisLayout","views","rowheaders","rowfooters","colheaders","colfooters","rowtitle","coltitle","gridLayoutGroups","boundFlush","boundFull","headerBand","layoutHeaders","footerBand","titleAnchor","titleBand","layoutTitle","headers","isX","bf","stride","back","legendParams","config","legends","offsets","mult","legendLayout","legend","_bounds","ex","ey","tpad","tx","ty","legendTitleOffset","legendGroupLayout","legendBounds","entries","widths","legendEntryLayout","lr","noBar","vgrad","ViewLayout","xBounds","yBounds","autosize","pos","subtitle","titleLayout","_autosize","viewWidth","viewHeight","_resizeView","viewSizeLayout","layoutGroup","shouldReflow","AxisTicks","DataJoin","defaultItemCreate","Encode","LegendEntries","newMap","fmod","encoders","reenter","enter","fraction","lskip","perc","adjust","labelFraction","perc2","sourceX","sourceY","targetX","targetY","LinkPath","Paths","rr","iy","sr","ta","sc","ss","tc","mr","Pie","includePad","Scale","domainCheck","adjustScheme","flip","SortItems","isContinuousColor","rawDomain","domainMid","Diverging","scaleKey","rangeStep","configureRangeStep","scheme$1","schemeExtent","interpolateGamma","schemeCount","configureScheme","interpolate$1","configureRange","domainRaw","configureBins","raw","includeZero","padDomain","domainMin","domainMax","domainImplicit","scaleImplicit","configureDomain","Zero","Center","Normalize","DefOutput","Stack","stackCenter","stackNormalize","stackZero","lastPos","lastNeg","epsilon2","quarterPi","hypot","streamGeometry","streamGeometryType","streamObjectType","Feature","FeatureCollection","Sphere","sphere","MultiPoint","LineString","streamLine","MultiLineString","Polygon","streamPolygon","MultiPolygon","GeometryCollection","closed","coordinate","polygonStart","polygonEnd","lambda00","phi00","lambda0","cosPhi0","sinPhi0","phi0","lambda1","phi1","lambda2","deltaSum","ranges","areaRingSum","areaSum","areaStream","areaRingStart","areaRingEnd","areaRing","areaPointFirst","areaPoint","lambda","phi","dLambda","sdLambda","adLambda","cosPhi","sinPhi","spherical","cartesian","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","W0","W1","X0","Y0","Z0","X1","Y1","Z1","Y2","Z2","z0","boundsStream","boundsPoint","boundsLineStart","boundsLineEnd","boundsRingPoint","boundsRingStart","boundsRingEnd","linePoint","inflection","phii","lambdai","antimeridian","rangeCompare","rangeContains","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointCartesian","centroidLinePointFirst","centroidLinePoint","centroidRingPointFirst","centroidRingPoint","cz","compose","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","circleRadius","cosRadius","lines","rejoin","Intersection","other","compareIntersection","startInside","subject","segment","pointEqual","link","isSubject","longitude","pointVisible","clipLine","sink","ringBuffer","clipBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","winding","point0","sinPhi1","cosPhi1","point1","absDelta","intersection","phiArc","polygonContains","clipRejoin","pointLine","ringSegments","validSegment","sign0","sign1","sinLambda0Lambda1","clipAntimeridianIntersect","to","direction","cr","smallRadius","notHemisphere","visible","two","n2","n2n2","n1n2","determinant","c2","n1xn2","uu","polar","code","v00","point2","sinRadius","circleStream","clipMax","clipMin","clipRectangle","corner","comparePoint","ca","x__","y__","v__","x_","y_","v_","first","activeStream","bufferStream","clipStream","polygonInside","cleanInside","graticuleX","graticuleY","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","PathContext","_radius","pointRadius","lengthRing","lengthSum","lengthStream","lengthPointFirst","lengthPoint","PathString","_string","projection","projectionStream","contextStream","pathArea","pathMeasure","pathBounds","pathCentroid","TransformStream","fit","fitBounds","clipExtent","geoStream","fitExtent","fitSize","fitWidth","fitHeight","_circle","cosMinDistance","delta2","resampleLineTo","depth","phi2","dx2","dy2","dz","b00","c00","resampleStream","ringPoint","resample","resampleNone","transformRadians","scaleTranslateRotate","scaleTranslate","cosAlpha","sinAlpha","ai","fi","projectionMutator","projectAt","projectResample","projectTransform","projectRotateTransform","cacheStream","preclip","clipAntimeridian","postclip","recenter","transformRotate","clipAngle","clipCircle","reflectX","reflectY","conicProjection","parallels","conicEqualAreaRaw","sy0","forward","cylindricalEqualAreaRaw","r0y","conicEqualArea","azimuthalRaw","azimuthalInvert","cc","azimuthalEqualAreaRaw","cxcy","azimuthalEquidistantRaw","mercatorRaw","mercatorProjection","reclip","tany","conicConformalRaw","equirectangularRaw","conicEquidistantRaw","nx","A1","A2","A3","A4","equalEarthRaw","l2","l6","gnomonicRaw","naturalEarth1Raw","phi4","orthographicRaw","stereographicRaw","transverseMercatorRaw","sqrt2","mollweideBromleyTheta","cp","cpsinPhi","mollweideRaw","mollweideBromleyRaw","defaultPath","geoPath","projectionProperties","proj","projections","getProjectionPath","albers","geoAlbers","albersusa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","albersUsa","streams","azimuthalequalarea","azimuthalequidistant","conicconformal","conicequalarea","geoConicEqualArea","conicequidistant","equalEarth","equirectangular","gnomonic","mercator","mollweide","naturalEarth1","orthographic","stereographic","transversemercator","cases","contours","smoothLinear","tz","contour","polygons","holes","startIndex","endIndex","isorings","hole","xt","yt","_0","ringContains","xi","yi","pj","xj","yj","segmentContains","collinear","Isocontour","transformPolygon","transformRing","bandwidthNRD","density2D","weight","values0","Float32Array","values1","blurX","blurY","sz","cellSize","LN2","KDE2D","levels","paths","transformPaths","PARAMS","Contour","post","GeoJSON","GeoPath","GeoPoint","GeoShape","Graticule","DX","DY","graticule","outline","extentMajor","extentMinor","stepMajor","stepMinor","geoGraticule","Heatmap","dependency","$x","$y","$value","$max","Projection","_features","_points","lon","lat","geojson","initPath","shapeGenerator","shared","dep","opacity_","color_","can","getImageData","pix","putImageData","toCanvas","featurize","collectGeoJSON","tree","xm","ym","xp","yp","leaf","defaultX","defaultY","quadtree","Quadtree","leaf_copy","treeProto","vx","vy","nodeById","nodeId","cover","xz","yz","quads","Quad","retainer","removeAll","visitAfter","dispatch","Dispatch","parseTypenames","typenames","typename","T","taskHead","taskTail","timeout","clockLast","clockNow","clockSkew","clock","performance","setFrame","requestAnimationFrame","clearNow","Timer","_time","_next","timer","restart","wake","timerFlush","sleep","nap","poke","clearInterval","setInterval","TypeError","initialAngle","simulation","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","lcg","tick","iterations","initializeNodes","initializeForce","randomSource","closest","ForceMap","strength","collide","radii","ri","ri2","prepare","rj","jiggle","_nodes","_random","nbody","strengths","distanceMin2","distanceMax2","theta2","accumulate","distanceMin","distanceMax","links","distances","bias","distance","initializeStrength","initializeDistance","Forces","ForceParams","ForceConfig","ForceOutput","Force","setup","sim","getForce","numForces","setForceParam","change","iters","forceSimulation","stopped","static","finish","defaultSeparation","meanXReduce","maxYReduce","hierarchy","mapChildren","objectChildren","childs","Node","eachBefore","computeHeight","copyData","circles","shuffle","enclosesWeak","encloseBasis","extendBasis","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","dr","encloseBasis1","r21","r3","a2","a3","b2","b3","c3","d3","ab","place","score","packEnclose","aa","sj","sk","pack","enclose","optional","required","constantZero","defaultRadius","radiusLeaf","packChildren","translateChild","eachAfter","each","ancestor","aNodes","ancestors","bNodes","leastCommonAncestor","descendants","leaves","preroot","ambiguous","defaultId","defaultParentId","parentId","stratify","nodeKey","nodeByKey","nextLeft","nextRight","moveSubtree","wm","wp","nextAncestor","vim","TreeNode","squarifyRatio","sumValue","minValue","maxValue","newRatio","minRatio","dice","treemapDice","treemapSlice","squarify","resquarify","_squarify","Nest","nest","valuesByKey","keyValue","HierarchyLayout","setParams","setFields","Output$3","Pack","Output$2","Partition","Stratify","positionNode","roundNode","parentKey","Layouts","tidy","nodeSize","treeRoot","firstWalk","secondWalk","sizeNode","siblings","executeShifts","midpoint","vip","vop","vom","sip","sop","som","apportion","cluster","previousNode","meanX","maxY","leafLeft","leafRight","Output$1","Tree","TreeLinks","Tiles","binary","sums","valueOffset","valueTarget","valueLeft","valueRight","slicedice","treemapSquarify","treemapResquarify","Output","Treemap","tile","paddingStack","paddingTop","paddingRight","paddingBottom","paddingLeft","treemap","markBitmaps","avoidMarks","labelInside","isGroupArea","border","Uint32Array","layer1","bitmap","layer2","RIGHT0","SIZE","RIGHT1","scaler","_set","_clear","getRange","indexStart","indexEnd","setRange","clearRange","outOfBounds","Bitmap","textWidth","textHeight","collision","bm0","bm1","X_DIR","Y_DIR","Aligns","Baselines","boundary","isInside","isInMarkBound","anchorCode","TOP","MIDDLE","BOTTOM","placeAreaLabel","bitmaps","avoidBaseMark","markIndex","areaWidth","maxAreaWidth","tryLabel","maxSize","_xMid","_yMid","swapTmp","labelPlaced","labelPlaced2","bm2","labelLayout","texts","lineAnchor","positions","getOffsets","anchors","Int8Array","getAnchors","grouptype","markBoundary","isNaiveGroupArea","baseBitmaps","sizeFactor","insideFactor","SQRT1_2","placeMarkLabel","Anchors","Label","Loess","regressionLoess","regressionLinear","regressionLog","regressionExp","regressionPow","regressionQuad","regressionPoly","Regression","dof","degreesOfFreedom","model","dom","EPSILON","EDGE_STACK","Delaunator","getX","defaultGetX","getY","defaultGetY","maxTriangles","_triangles","_halfedges","Int32Array","_hashSize","_hullPrev","_hullNext","_hullTri","_hullHash","_ids","_dists","hullPrev","hullNext","hullTri","hullHash","minY","i2","minDist","i0x","i0y","i1x","i1y","minRadius","circumradius","i2x","i2y","quicksort","hull","triangles","halfedges","cl","circumcenter","_cx","_cy","_hullStart","hullSize","_hashKey","trianglesLen","_addTriangle","_legalize","pseudoAngle","ar","al","inCircle","hbl","_link","orientIfSure","qx","qy","bp","tempDist","arr","tmp","Voronoi","delaunay","xmin","ymin","xmax","ymax","_circumcenters","vectors","_init","circumcenters","inedges","ti","tj","_renderSegment","_project","renderBounds","renderCell","_clip","cellPolygon","_regioncode","_clipSegment","_step","neighbors","cj","loop","li","aj","lj","_cell","e0","_clipInfinite","_clipFinite","e1","P","sx0","sx1","sy1","_edgecode","_edge","vx0","vy0","vxn","vyn","jitter","Delaunay","flatArray","flatIterable","_delaunator","_hullIndex","hullIndex","voronoi","dc","renderHull","renderPoints","hullPolygon","renderTriangle","trianglePolygon","defaultExtent","toPathString","cloudRadians","ch","cloud","spiral","archimedeanSpiral","words","board","dxdy","startX","startY","maxDelta","cloudCollide","collideRects","sprite","msx","contextAndRatio","zeroArray","tags","xoff","yoff","hasText","cloudSprite","cloudBounds","functor","spirals","di","w32","maxh","wcr","wsr","hcr","hsr","pixels","seen","seenRow","archimedean","rectangular","Wordcloud","fontSizeRange","fsize","sizeScale","array8","Uint8Array","array16","Uint16Array","array32","Dimension","query","onAdd","added","dim","SortedIndex","addi","oldv","oldi","addv","permute","index0","value1","index1","reindex","CrossFilter","lengthen","_index","Bitmaps","_indices","ResolveFilter","reinit","eval","bits","remMap","modMap","indexMap","incrementOne","incrementAll","old","lo1","hi1","lo0","hi0","ignore","pass","RawCode","Literal","Property","ArrayExpression","BinaryExpression","CallExpression","ConditionalExpression","LogicalExpression","MemberExpression","ObjectExpression","UnaryExpression","ASTNode","TokenName","lookahead","elements","callee","consequent","alternate","argument","SyntaxIdentifier","MessageUnexpectedToken","MessageInvalidRegExp","MessageUnterminatedRegExp","MessageStrictOctalLiteral","ILLEGAL","DISABLED","RegexNonAsciiIdentifierStart","RegexNonAsciiIdentifierPart","assert","condition","isDecimalDigit","isHexDigit","isOctalDigit","isWhiteSpace","isLineTerminator","isIdentifierStart","fromCharCode","isIdentifierPart","keywords","skipComment","scanHexEscape","throwError","scanUnicodeCodePointEscape","cu1","cu2","getEscapedIdentifier","substr","scanIdentifier","getIdentifier","scanPunctuator","code2","ch2","ch3","ch4","ch1","scanNumericLiteral","scanHexLiteral","octal","scanOctalLiteral","parseFloat","scanRegExp","body","classMarker","terminated","literal","scanRegExpBody","search","scanRegExpFlags","$0","$1","exception","testRegExp","regex","advance","scanStringLiteral","lex","finishBinaryExpression","operator","finishCallExpression","finishIdentifier","finishLiteral","finishMemberExpression","computed","member","finishProperty","kind","messageFormat","msg","whole","throwUnexpected","expect","matchKeyword","keyword","parseArrayInitialiser","parseConditionalExpression","finishArrayExpression","parseObjectPropertyKey","parseObjectProperty","parseObjectInitialiser","finishObjectExpression","legalKeywords","parsePrimaryExpression","parseExpression","parseGroupExpression","parseArguments","parseNonComputedMember","isIdentifierName","parseNonComputedProperty","parseComputedMember","parsePostfixExpression","parseLeftHandSideExpressionAllowCall","parseUnaryExpression","finishUnaryExpression","binaryPrecedence","prec","marker","markers","parseBinaryExpression","finishConditionalExpression","Constants","LOG2E","LOG10E","MIN_VALUE","Functions","codegen","cast","fncall","STRING","REGEXP","datetime","timezoneoffset","utcdate","utcday","utcyear","utcmonth","utchours","utcminutes","utcseconds","utcmilliseconds","upper","lower","if","allowed","forbidden","constants","functions","globalvar","fieldvar","outputGlobal","globals","memberDepth","ast","Generators","stripQuotes","Intersect","Union","UNIT_INDEX","testPoint","dval","selectionId","E_union","E_intersect","R_union","R_intersect","selectionVisitor","scope","indexName","IndexPrefix","dataName","getData","indataRef","tuplesRef","wrap","dateObj","setYear","dataVisitor","scaleVisitor","addScaleDependency","scaleName","scaleRef","getScale","internalScaleFunctions","fnctx","visitors","__bandwidth","_bandwidth","_range","ref","geoMethod","methodName","globalMethod","geoArea","geoBounds","deltaMax","geoCentroid","channel_luminance_value","channelValue","luminance","equal","equalArray","equalObject","removePredicate","accessors","seq","treeNodes","_window","functionContext","isDefined","isValid","indexof","lastindexof","repl","pluck","contrast","color1","color2","lum1","lum2","monthFormat","monthAbbrevFormat","dayFormat","dayAbbrevFormat","inScope","intersect$1","array$1","markname","pinchDistance","touches","pinchAngle","screen","containerSize","container","clientWidth","clientHeight","windowSize","innerWidth","innerHeight","bandspace","setdata","pathShape","retval","toggle","predicate","_trigger","eventFunctions","thisPrefix","astVisitors","codegenParams","codeGenerator","expressionFunction","signalName","getSignal","signalRef","$expr","$fields","$params","miss","unitIdx","isMulti","vl5","resUnit","resolved","multiRes","acc","Skip","Swap","canonicalType","expression","expressionCodegen","parameter","adjustSpatial","lt","gt","_compare","parseParameter","PARSERS","$ref","$key","$flat","parseParameters","$name","parameterExpression","$field","$encode","enc","encodeExpression","$output","$compare","$order","$tupleid","$subflow","subctx","operators","Context","Subcontext","ariaLabel","subcontext","isCollect","$ingest","$format","$request","unresolved","signal","operatorExpression","eventExpression","handlerExpression","eventConfig","parseOperator","parseOperatorParameters","parseStream","updates","parseUpdate","isOperator","srcid","dataset","getState","substate","setState","Default","setCursor","cursor","globalCursor","dataref","_runtime","_viewWidth","_viewHeight","eventExtend","_renderer","vega","itemGroup","extension","VIEW","NO_TRAP","trap","trackEventListener","_eventListeners","permit","_eventConfig","itemFilter","markTarget","invoke","Event","wrapper","form","checkbox","select","radio","checked","option","valuesEqual","selected","selectedIndex","prepend","initializeRenderer","querySelector","innerHTML","paddingObject","renderHeadless","module","_scenegraph","Width","Height","dataTest","signalTest","proxy","formatArray","formatTooltip","View","_elBind","_renderType","_handler","_globalCursor","_preventDefault","_timers","_resizeListeners","defaults","unpack","initializeEventConfig","runtime","_bind","bindings","_resize","resetSize","_resizeWidth","_resizeHeight","resizePadding","initializeResize","_background","user","hover","lookupSignal","findOperatorHandler","addOperatorListener","removeOperatorListener","resizeRenderer","_desc","_resetRenderer","rerun","addResizeListener","removeResizeListener","addSignalListener","removeSignalListener","addDataListener","removeDataListener","total","_restart","elapsed","timestamp","prevent","allow","finalize","timers","listeners","hoverSet","leaveSet","elBind","initializeAria","prevHandler","initializeHandler","binding","toImageURL","mime","blob","Blob","URL","createObjectURL","toBlobURL","toSVG","LBRACK","RBRACK","DEFAULT_MARKS","DEFAULT_SOURCE","MARKS","eventSelector","selector","parseMerge","parseSelector","endChar","pushChar","popChar","parseBetween","parseThrottle","isMarkType","parseAutosize","parsePadding","encoder","addEncode","addEncoders","extendEncode","MarkRole","LegendLabelRole","TitleTextRole","TitleSubtitleRole","applyDefault","entry$1","_color","resolveField","parseEncode","applyDefaults","parseBlock","block","parse$1","OUTER_INVALID","outerError","parseSignal","addSignal","addBinding","Entry","refs","fieldRef$1","keyFieldRef","compareRef","aggrField","Scope$1","isSignal","hasSignal","specValue","deref","mergeStream","nestedStream","eventStream","streamParameters","addStream","eventSource","markrole","filterMark","OP_VALUE_EXPR","isSubscope","mergeSources","addUpdate","streamSource","FIELD_REF_ID","MULTIDOMAIN_SORT_OPS","parseScale","parseScaleDomain","parseScaleRange","parseLiteral","parseScaleInterpolate","parseScaleNice","parseArray","objectProperty","parseScaleBins","dataLookupError","explicitDomain","multipleDomain","singularDomain","valuesRef","parseSort","domainRef","extentRef","coll","addDataPipeline","fieldRef","ordinalMultipleDomain","quantileMultipleDomain","numericMultipleDomain","countsRef","sortRef","multidomain","parseParameter$1","Index","Perc","Value","GuideLabelStyle","GuideTitleStyle","GroupTitleStyle","GroupSubtitleStyle","Symbols","Size","LegendScales","GroupMark","RectMark","RuleMark","TextMark","guideGroup","isVertical","symbolDirection","gradientDirection","gradientLength","gradientWidth","gradientThickness","gradientHeight","entryColumns","getEncoding","anchorExpr","alignExpr$1","extendOffset","guideMark","extras","legendGradient","userEncode","thickness","legendGradientDiscrete","dataRef","vv","legendGradientLabels","overlap","labelLimit","gradientLabelLimit","labelOffset","gradientLabelOffset","legendSymbolGroups","symbolOffset","valueRef","xSignal","yEncode","baseFill","baseStroke","symbolBaseFillColor","symbolBaseStrokeColor","facet","isL","isR","isLR","isVG","exprAlign","exprAnchor","exprAngle","exprBaseline","getRole","parseTransform","definition$1","pdef","lookupRef","parseIndexParameter","parseSubParameter","parseSubParameters","projectionRef","parameterValue","isExpr","isField","isCompare","outerExpr","exprRef","outerField","isData","getDataRef","DataScope","aggregate","fieldKey","addSortField","ds","optype","sortKey","parseTrigger","trigger","parseMark","layoutRef","boundRef","keyRef","parseData$1","joinRef","$context","markpath","markRef","generates","encodeRef","pushState","subscope","addData","toRuntime","parseFacet","parseSubflow","popState","tol","parseOverlap","sieve","parseLegend","legendEncode","entryLayout","scaleType","scaleCount","legendType","entryRef","tickMinStep","legendSymbolLayout","getChannel","getStyle","getFontSize","sizeExpression","_anchor","legendTitle","buildLegendEncode","fromEntries","parseTitle","buildTitle","titleEncode","buildSubTitle","groupEncode","parseData","upstream","analyze","getSign","ifLeftTopExpr","ifX","ifXEnc","ifY","ifYEnc","ifTop","ifTopExpr","$orient","ifEnc","ifExpr","ifRightExpr","isSimple","toExpr","ifOrient","patch","endsWith","fallback","axisConfig","styleProp","axisGrid","vscale","gridScale","tickPos","gridStart","gridEnd","flushExpr","axisLabels","flushOffset","labelAlign","labelBaseline","flushOn","tickSize","ifRight","offsetExpr","axisTitle","titlePos","autoY","autoX","autoLayout","parseAxis","or","axisBand","xyKeys","axisX","axisY","orientKeys","axisTop","axisBottom","axisLeft","axisRight","axisEncode","tickBand","ticksRef","axisTicks","pos0","pos1","axisDomain","buildAxisEncode","parseScope","preprocessed","addProjection","parseProjection","addScale","initScale","parseSignalUpdates","axes","parseLambdas","parseView","signalObject","pre","collectSignals","rootEncode","Scope","lambdas","_id","_subid","_nextsub","_parent","_encode","_lookup","_markpath","Subscope","propertyLambda","arrayLambda","objectLambda","vref","annotate","check","isExpr$1","sig","hasOwnSignal","addScaleProj","projectionType","dataScope","vtx","geo","reg","wordcloud","xf","version","pkg","defaultFont","defaultColor","lightGray","square","subtitlePadding","bandPosition","domainWidth","domainColor","gridWidth","gridColor","labelAngle","labelPadding","tickColor","tickOffset","tickRound","tickWidth","gridAlign","columnPadding","rowPadding","gradientStrokeColor","gradientStrokeWidth","labelOverlap","symbolLimit","symbolType","symbolSize","symbolStrokeWidth","titleLimit","titleOrient","category","heatmap","ramp","seed"],"mappings":"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iB,EAAEgzB,OAGnC1sB,EAAI2qG,GAASjxG,EAAEgzB,SAELhzB,EACJ+F,EAAWO,EAAEnH,KAAKg0G,GAAc7sG,EAAEnH,GAAIa,EAAEb,GAAIa,UAG3CsG,EAGT,SAAS6sG,GAAc7sG,EAAGI,EAAG1G,GAC3BsG,EAAEP,EAAWW,GAAKyM,GAAKzM,EAAEyM,EAAGnT,GAAK0G,GA5RnCosG,GAAMz2E,WAAa,MACT,iBACI,WACE,UAEJ,CAAC,MACD,cACA,mBACG,GACV,MACO,eACA,mBACG,GACV,MACO,kBACA,iBACG,KACV,MACO,aACA,iBACG,GACV,MACO,gBACA,iBACG,MACV,MACO,mBACA,iBACG,GACV,MACO,qBACA,iBACG,IACV,MACO,cACA,eACC,SACC,CAAC,KACF,OACI,iBAED,CAAC,MACD,SACA,iBACG,GACV,MACO,SACA,iBACG,KAEZ,KACM,OACI,kBAED,CAAC,MACD,cACA,eACA,GACP,MACO,gBACA,iBACG,IACV,MACO,kBACA,iBACG,KAEZ,KACM,OACI,gBAED,CAAC,MACD,gBACA,kBACI,IACX,MACO,aACA,iBACG,IACV,MACO,mBACA,iBACG,GACV,MACO,mBACA,YAET,KACM,OACI,eAED,CAAC,MACD,aACA,QACP,MACO,UACA,SACP,MACO,gBACA,iBACG,SACH,GACP,MACO,gBACA,eACA,GACP,MACO,kBACA,iBACG,KAEZ,KACM,OACI,YAED,CAAC,MACD,gBACA,iBACG,IACV,MACO,SACA,WAET,KACM,OACI,YAED,CAAC,MACD,gBACA,iBACG,IACV,MACO,SACA,aAGX,MACO,UACA,gBACC,UACC,UACCw2E,MAGf5pG,GAAS6pG,GAAO54E,GAAW,CACzB5pB,UAAUtQ,EAAG0yB,OAmEAxB,EAAIwD,EAlEXs+E,EAAM/xG,KAAKqB,MACX8wG,EAAS1gF,EAAMyE,QAAQzE,EAAM+E,SAC7BnE,EAAStzB,EAAEizB,SAAS0/E,IACpBU,EAAQrzG,EAAE4wG,YAAc,OAGvBoC,GAWCI,IACF1gF,EAAMG,SAAS,SACfmgF,EAAIl6E,MAAMpG,EAAM3wB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"} \ No newline at end of file diff --git a/src/citationnet/static/js/vega@5.17.0.js b/src/citationnet/static/js/vega@5.17.0.js deleted file mode 100644 index 1b03b69..0000000 --- a/src/citationnet/static/js/vega@5.17.0.js +++ /dev/null @@ -1,2 +0,0 @@ -!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).vega={})}(this,(function(t){"use strict";function e(t,e,n){return t.fields=e||[],t.fname=n,t}function n(t){return null==t?null:t.fname}function r(t){return null==t?null:t.fields}function i(t){return 1===t.length?o(t[0]):a(t)}const o=t=>function(e){return e[t]},a=t=>{const e=t.length;return function(n){for(let r=0;rr&&c(),s=r=i+1):"]"===o&&(s||u("Access path missing open bracket: "+t),s>0&&c(),s=0,r=i+1):i>r?c():r=i+1}return s&&u("Access path missing closing bracket: "+t),a&&u("Access path missing closing quote: "+t),i>r&&(i++,c()),e}function l(t,n,r){const o=s(t);return t=1===o.length?o[0]:t,e((r&&r.get||i)(o),[t],n||t)}const c=l("id"),f=e((t=>t),[],"identity"),h=e((()=>0),[],"zero"),d=e((()=>1),[],"one"),p=e((()=>!0),[],"true"),g=e((()=>!1),[],"false");function m(t,e,n){const r=[e].concat([].slice.call(n));console[t].apply(console,r)}function y(t,e){let n=t||0;return{level(t){return arguments.length?(n=+t,this):n},error(){return n>=1&&m(e||"error","ERROR",arguments),this},warn(){return n>=2&&m(e||"warn","WARN",arguments),this},info(){return n>=3&&m(e||"log","INFO",arguments),this},debug(){return n>=4&&m(e||"log","DEBUG",arguments),this}}}var v=Array.isArray;function _(t){return t===Object(t)}const x=t=>"__proto__"!==t;function b(...t){return t.reduce(((t,e)=>{for(const n in e)if("signals"===n)t.signals=k(t.signals,e.signals);else{const r="legend"===n?{layout:1}:"style"===n||null;w(t,n,e[n],r)}return t}),{})}function w(t,e,n,r){if(!x(e))return;let i,o;if(_(n)&&!v(n))for(i in o=_(t[e])?t[e]:t[e]={},n)r&&(!0===r||r[i])?w(o,i,n[i]):x(i)&&(o[i]=n[i]);else t[e]=n}function k(t,e){if(null==t)return e;const n={},r=[];function i(t){n[t.name]||(n[t.name]=1,r.push(t))}return e.forEach(i),t.forEach(i),r}function M(t){return t[t.length-1]}function A(t){return null==t||""===t?null:+t}const E=t=>e=>t*Math.exp(e),D=t=>e=>Math.log(t*e),C=t=>e=>Math.sign(e)*Math.log1p(Math.abs(e/t)),F=t=>e=>Math.sign(e)*Math.expm1(Math.abs(e))*t,S=t=>e=>e<0?-Math.pow(-e,t):Math.pow(e,t);function B(t,e,n,r){const i=n(t[0]),o=n(M(t)),a=(o-i)*e;return[r(i-a),r(o-a)]}function T(t,e){return B(t,e,A,f)}function z(t,e){var n=Math.sign(t[0]);return B(t,e,D(n),E(n))}function N(t,e,n){return B(t,e,S(n),S(1/n))}function O(t,e,n){return B(t,e,C(n),F(n))}function R(t,e,n,r,i){const o=r(t[0]),a=r(M(t)),u=null!=e?r(e):(o+a)/2;return[i(u+(o-u)*n),i(u+(a-u)*n)]}function L(t,e,n){return R(t,e,n,A,f)}function U(t,e,n){const r=Math.sign(t[0]);return R(t,e,n,D(r),E(r))}function q(t,e,n,r){return R(t,e,n,S(r),S(1/r))}function P(t,e,n,r){return R(t,e,n,C(r),F(r))}function j(t){return 1+~~(new Date(t).getMonth()/3)}function I(t){return 1+~~(new Date(t).getUTCMonth()/3)}function $(t){return null!=t?v(t)?t:[t]:[]}function W(t,e,n){let r,i=t[0],o=t[1];return o=n-e?[e,n]:[i=Math.min(Math.max(i,e),n-r),i+r]}function H(t){return"function"==typeof t}function Y(t,n,i){i=i||{},n=$(n)||[];const o=[],a=[],u={},s=i.comparator||G;return $(t).forEach(((t,e)=>{null!=t&&(o.push("descending"===n[e]?-1:1),a.push(t=H(t)?t:l(t,null,i)),(r(t)||[]).forEach((t=>u[t]=1)))})),0===a.length?null:e(s(a,o),Object.keys(u))}const V=(t,e)=>(te||null==e)&&null!=t?1:(e=e instanceof Date?+e:e,(t=t instanceof Date?+t:t)!==t&&e==e?-1:e!=e&&t==t?1:0),G=(t,e)=>1===t.length?X(t[0],e[0]):J(t,e,t.length),X=(t,e)=>function(n,r){return V(t(n),t(r))*e},J=(t,e,n)=>(e.push(0),function(r,i){let o,a=0,u=-1;for(;0===a&&++ut}function Q(t,e){let n;return r=>{n&&clearTimeout(n),n=setTimeout((()=>(e(r),n=null)),t)}}function K(t){for(let e,n,r=1,i=arguments.length;ro&&(o=r))}else{for(r=e(t[a]);ao&&(o=r))}return[i,o]}function et(t,e){const n=t.length;let r,i,o,a,u,s=-1;if(null==e){for(;++s=i){r=o=i;break}if(s===n)return[-1,-1];for(a=u=s;++si&&(r=i,a=s),o=i){r=o=i;break}if(s===n)return[-1,-1];for(a=u=s;++si&&(r=i,a=s),or(t)?n[t]:void 0,set(t,e){return r(t)||(++i.size,n[t]===it&&--i.empty),n[t]=e,this},delete(t){return r(t)&&(--i.size,++i.empty,n[t]=it),this},clear(){i.size=i.empty=0,i.object=n={}},test(t){return arguments.length?(e=t,i):e},clean(){const t={};let r=0;for(const i in n){const o=n[i];o===it||e&&e(o)||(t[i]=o,++r)}i.size=r,i.empty=0,i.object=n=t}};return t&&Object.keys(t).forEach((e=>{i.set(e,t[e])})),i}function at(t,e,n,r,i,o){if(!n&&0!==n)return o;const a=+n;let u,s=t[0],l=M(t);la&&(i=o,o=a,a=i),r=void 0===r||r,((n=void 0===n||n)?o<=t:ot.replace(/\\(.)/g,"$1"))):$(t));const o=t&&t.length,a=r&&r.get||i,u=t=>a(n?[t]:s(t));let l;if(o)if(1===o){const e=u(t[0]);l=function(t){return""+e(t)}}else{const e=t.map(u);l=function(t){let n=""+e[0](t),r=0;for(;++r{e={},n={},r=0},o=(i,o)=>(++r>t&&(n=e,e={},r=1),e[i]=o);return i(),{clear:i,has:t=>rt(e,t)||rt(n,t),get:t=>rt(e,t)?e[t]:rt(n,t)?o(t,n[t]):void 0,set:(t,n)=>rt(e,t)?e[t]=n:o(t,n)}}function vt(t,e,n,r){const i=e.length,o=n.length;if(!o)return e;if(!i)return n;const a=r||new e.constructor(i+o);let u=0,s=0,l=0;for(;u0?n[s++]:e[u++];for(;u=0;)n+=t;return n}function xt(t,e,n,r){const i=n||" ",o=t+"",a=e-o.length;return a<=0?o:"left"===r?_t(i,a)+o:"center"===r?_t(i,~~(a/2))+o+_t(i,Math.ceil(a/2)):o+_t(i,a)}function bt(t){return t&&M(t)-t[0]||0}function wt(t){return v(t)?"["+t.map(wt)+"]":_(t)||pt(t)?JSON.stringify(t).replace("\u2028","\\u2028").replace("\u2029","\\u2029"):t}function kt(t){return null==t||""===t?null:!(!t||"false"===t||"0"===t)&&!!t}const Mt=t=>ht(t)||ct(t)?t:Date.parse(t);function At(t,e){return e=e||Mt,null==t||""===t?null:e(t)}function Et(t){return null==t||""===t?null:t+""}function Dt(t){const e={},n=t.length;for(let r=0;rnew Promise(((n,r)=>{t.readFile(e,((t,e)=>{t?r(t):n(e)}))})):Lt}async function Lt(){u("No file system access.")}function Ut(t){return t?async function(e,n){const r=K({},this.options.http,n),i=n&&n.response,o=await t(e,r);return o.ok?H(o[i])?o[i]():o.text():u(o.status+""+o.statusText)}:qt}async function qt(){u("No HTTP fetch method available.")}const Pt=t=>!(Number.isNaN(+t)||t instanceof Date),jt={boolean:kt,integer:A,number:A,date:At,string:Et,unknown:f},It=[t=>"true"===t||"false"===t||!0===t||!1===t,t=>Pt(t)&&Number.isInteger(+t),Pt,t=>!Number.isNaN(Date.parse(t))],$t=["boolean","integer","number","date"];function Wt(t,e){if(!t||!t.length)return"unknown";const n=t.length,r=It.length,i=It.map(((t,e)=>e+1));for(let a,u,s=0,l=0;s0===t?e:t),0)-1]}function Ht(t,e){return e.reduce(((e,n)=>(e[n]=Wt(t,n),e)),{})}var Yt={},Vt={};function Gt(t){return new Function("d","return {"+t.map((function(t,e){return JSON.stringify(t)+": d["+e+'] || ""'})).join(",")+"}")}function Xt(t){var e=Object.create(null),n=[];return t.forEach((function(t){for(var r in t)r in e||n.push(e[r]=r)})),n}function Jt(t,e){var n=t+"",r=n.length;return r9999?"+"+Jt(t,6):Jt(t,4)}(t.getUTCFullYear())+"-"+Jt(t.getUTCMonth()+1,2)+"-"+Jt(t.getUTCDate(),2)+(i?"T"+Jt(e,2)+":"+Jt(n,2)+":"+Jt(r,2)+"."+Jt(i,3)+"Z":r?"T"+Jt(e,2)+":"+Jt(n,2)+":"+Jt(r,2)+"Z":n||e?"T"+Jt(e,2)+":"+Jt(n,2)+"Z":"")}function Qt(t){var e=new RegExp('["'+t+"\n\r]"),n=t.charCodeAt(0);function r(t,e){var r,i=[],o=t.length,a=0,u=0,s=o<=0,l=!1;function c(){if(s)return Vt;if(l)return l=!1,Yt;var e,r,i=a;if(34===t.charCodeAt(i)){for(;a++=o?s=!0:10===(r=t.charCodeAt(a++))?l=!0:13===r&&(l=!0,10===t.charCodeAt(a)&&++a),t.slice(i+1,e-1).replace(/""/g,'"')}for(;a1)r=le(t,e,n);else for(i=0,r=new Array(o=t.arcs.length);it!==e,exterior:(t,e)=>t===e};function fe(t,e){let n,r,i,o;return t=ee(t,e),e&&e.feature?(n=re,i=e.feature):e&&e.mesh?(n=ue,i=e.mesh,o=ce[e.filter]):u("Missing TopoJSON feature or mesh parameter."),r=(r=t.objects[i])?n(t,r,o):u("Invalid TopoJSON object: "+i),r&&r.features||[r]}fe.responseType="json";const he={dsv:te,csv:Kt(","),tsv:Kt("\t"),json:ee,topojson:fe};function de(t,e){return arguments.length>1?(he[t]=e,this):rt(he,t)?he[t]:null}function pe(t){const e=de(t);return e&&e.responseType||"text"}function ge(t,e){return te?1:t>=e?0:NaN}function me(t){let e=t,n=t;function r(t,e,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;n(t[o],e)<0?r=o+1:i=o}return r}return 1===t.length&&(e=(e,n)=>t(e)-n,n=function(t){return(e,n)=>ge(t(e),n)}(t)),{left:r,center:function(t,n,i,o){null==i&&(i=0),null==o&&(o=t.length);const a=r(t,n,i,o-1);return a>i&&e(t[a-1],n)>-e(t[a],n)?a-1:a},right:function(t,e,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;n(t[o],e)>0?i=o:r=o+1}return r}}}function ye(t){return null===t?NaN:+t}const ve=me(ge),_e=ve.right,xe=ve.left;me(ye).center;class be{constructor(){this._partials=new Float64Array(32),this._n=0}add(t){const e=this._partials;let n=0;for(let r=0;r0){for(o=t[--i];i>0&&(e=o,n=t[--i],o=e+n,r=n-(o-e),!r););i>0&&(r<0&&t[i-1]<0||r>0&&t[i-1]>0)&&(n=2*r,e=o+n,n==e-o&&(o=e))}return o}}var we=Math.sqrt(50),ke=Math.sqrt(10),Me=Math.sqrt(2);function Ae(t,e,n){var r,i,o,a,u=-1;if(n=+n,(t=+t)===(e=+e)&&n>0)return[t];if((r=e0)for(t=Math.ceil(t/a),e=Math.floor(e/a),o=new Array(i=Math.ceil(e-t+1));++u=0?(o>=we?10:o>=ke?5:o>=Me?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(o>=we?10:o>=ke?5:o>=Me?2:1)}function De(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),o=r/i;return o>=we?i*=10:o>=ke?i*=5:o>=Me&&(i*=2),e=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n=i)&&(n=i)}return n}function Fe(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n>e||void 0===n&&e>=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}function Se(t,e,n=0,r=t.length-1,i=ge){for(;r>n;){if(r-n>600){const o=r-n+1,a=e-n+1,u=Math.log(o),s=.5*Math.exp(2*u/3),l=.5*Math.sqrt(u*s*(o-s)/o)*(a-o/2<0?-1:1);Se(t,e,Math.max(n,Math.floor(e-a*s/o+l)),Math.min(r,Math.floor(e+(o-a)*s/o+l)),i)}const o=t[e];let a=n,u=r;for(Be(t,n,e),i(t[r],o)>0&&Be(t,n,r);a0;)--u}0===i(t[n],o)?Be(t,n,u):(++u,Be(t,u,r)),u<=e&&(n=u+1),e<=u&&(r=u-1)}return t}function Be(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function Te(t,e,n){if(r=(t=Float64Array.from(function*(t,e){if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(yield e);else{let n=-1;for(let r of t)null!=(r=e(r,++n,t))&&(r=+r)>=r&&(yield r)}}(t,n))).length){if((e=+e)<=0||r<2)return Fe(t);if(e>=1)return Ce(t);var r,i=(r-1)*e,o=Math.floor(i),a=Ce(Se(t,o).subarray(0,o+1));return a+(Fe(t.subarray(o+1))-a)*(i-o)}}function ze(t,e,n=ye){if(r=t.length){if((e=+e)<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,o=Math.floor(i),a=+n(t[o],o,t);return a+(+n(t[o+1],o+1,t)-a)*(i-o)}}function Ne(t,e){return Te(t,.5,e)}function Oe(t){return Array.from(function*(t){for(const e of t)yield*e}(t))}function Re(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((e-t)/n)),o=new Array(i);++r1?r[0]+r.slice(2):r,+t.slice(n+1)]}function qe(t){return(t=Ue(Math.abs(t)))?t[1]:NaN}var Pe,je=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Ie(t){if(!(e=je.exec(t)))throw new Error("invalid format: "+t);var e;return new $e({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function $e(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function We(t,e){var n=Ue(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}Ie.prototype=$e.prototype,$e.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var He={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>We(100*t,e),r:We,s:function(t,e){var n=Ue(t,e);if(!n)return t+"";var r=n[0],i=n[1],o=i-(Pe=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,a=r.length;return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+Ue(t,Math.max(0,e+o-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function Ye(t){return t}var Ve,Ge,Xe,Je=Array.prototype.map,Ze=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Qe(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?Ye:(e=Je.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,o=[],a=0,u=e[0],s=0;i>0&&u>0&&(s+u+1>r&&(u=Math.max(1,r-s)),o.push(t.substring(i-=u,i+u)),!((s+=u+1)>r));)u=e[a=(a+1)%e.length];return o.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",o=void 0===t.currency?"":t.currency[1]+"",a=void 0===t.decimal?".":t.decimal+"",u=void 0===t.numerals?Ye:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(Je.call(t.numerals,String)),s=void 0===t.percent?"%":t.percent+"",l=void 0===t.minus?"−":t.minus+"",c=void 0===t.nan?"NaN":t.nan+"";function f(t){var e=(t=Ie(t)).fill,n=t.align,f=t.sign,h=t.symbol,d=t.zero,p=t.width,g=t.comma,m=t.precision,y=t.trim,v=t.type;"n"===v?(g=!0,v="g"):He[v]||(void 0===m&&(m=12),y=!0,v="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var _="$"===h?i:"#"===h&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",x="$"===h?o:/[%p]/.test(v)?s:"",b=He[v],w=/[defgprs%]/.test(v);function k(t){var i,o,s,h=_,k=x;if("c"===v)k=b(t)+k,t="";else{var M=(t=+t)<0||1/t<0;if(t=isNaN(t)?c:b(Math.abs(t),m),y&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),M&&0==+t&&"+"!==f&&(M=!1),h=(M?"("===f?f:l:"-"===f||"("===f?"":f)+h,k=("s"===v?Ze[8+Pe/3]:"")+k+(M&&"("===f?")":""),w)for(i=-1,o=t.length;++i(s=t.charCodeAt(i))||s>57){k=(46===s?a+t.slice(i+1):t.slice(i))+k,t=t.slice(0,i);break}}g&&!d&&(t=r(t,1/0));var A=h.length+t.length+k.length,E=A>1)+h+t+k+E.slice(A);break;default:t=E+h+t+k}return u(t)}return m=void 0===m?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,m)):Math.max(0,Math.min(20,m)),k.toString=function(){return t+""},k}return{format:f,formatPrefix:function(t,e){var n=f(((t=Ie(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(qe(e)/3))),i=Math.pow(10,-r),o=Ze[8+r/3];return function(t){return n(i*t)+o}}}}function Ke(t){return Math.max(0,-qe(Math.abs(t)))}function tn(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(qe(e)/3)))-qe(Math.abs(t)))}function en(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,qe(e)-qe(t))+1}!function(t){Ve=Qe(t),Ge=Ve.format,Xe=Ve.formatPrefix}({thousands:",",grouping:[3],currency:["$",""]});var nn=new Date,rn=new Date;function on(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=function(e){return t(e=new Date(+e)),e},i.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},i.round=function(t){var e=i(t),n=i.ceil(t);return t-e0))return u;do{u.push(a=new Date(+n)),e(n,o),t(n)}while(a=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(i.count=function(e,r){return nn.setTime(+e),rn.setTime(+r),t(nn),t(rn),Math.floor(n(nn,rn))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(e){return r(e)%t==0}:function(e){return i.count(0,e)%t==0}):i:null}),i}var an=on((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));an.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?on((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):an:null};var un=1e3,sn=6e4,ln=36e5,cn=864e5,fn=6048e5,hn=on((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+e*un)}),(function(t,e){return(e-t)/un}),(function(t){return t.getUTCSeconds()})),dn=on((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*un)}),(function(t,e){t.setTime(+t+e*sn)}),(function(t,e){return(e-t)/sn}),(function(t){return t.getMinutes()})),pn=on((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*un-t.getMinutes()*sn)}),(function(t,e){t.setTime(+t+e*ln)}),(function(t,e){return(e-t)/ln}),(function(t){return t.getHours()})),gn=on((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*sn)/cn),(t=>t.getDate()-1));function mn(t){return on((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*sn)/fn}))}var yn=mn(0),vn=mn(1),_n=(mn(2),mn(3),mn(4)),xn=(mn(5),mn(6),on((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()}))),bn=on((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));bn.every=function(t){return isFinite(t=Math.floor(t))&&t>0?on((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null};var wn=on((function(t){t.setUTCSeconds(0,0)}),(function(t,e){t.setTime(+t+e*sn)}),(function(t,e){return(e-t)/sn}),(function(t){return t.getUTCMinutes()})),kn=on((function(t){t.setUTCMinutes(0,0,0)}),(function(t,e){t.setTime(+t+e*ln)}),(function(t,e){return(e-t)/ln}),(function(t){return t.getUTCHours()})),Mn=on((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/cn}),(function(t){return t.getUTCDate()-1}));function An(t){return on((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/fn}))}var En=An(0),Dn=An(1),Cn=(An(2),An(3),An(4)),Fn=(An(5),An(6),on((function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCMonth(t.getUTCMonth()+e)}),(function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())}),(function(t){return t.getUTCMonth()}))),Sn=on((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));Sn.every=function(t){return isFinite(t=Math.floor(t))&&t>0?on((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};const Bn="year",Tn="quarter",zn="month",Nn="week",On="date",Rn="day",Ln="dayofyear",Un="hours",qn="minutes",Pn="seconds",jn="milliseconds",In=[Bn,Tn,zn,Nn,On,Rn,Ln,Un,qn,Pn,jn],$n=In.reduce(((t,e,n)=>(t[e]=1+n,t)),{});function Wn(t){const e=$(t).slice(),n={};e.length||u("Missing time unit."),e.forEach((t=>{rt($n,t)?n[t]=1:u("Invalid time unit: ".concat(t,"."))}));return(n.week||n.day?1:0)+(n.quarter||n.month||n.date?1:0)+(n.dayofyear?1:0)>1&&u("Incompatible time units: ".concat(t)),e.sort(((t,e)=>$n[t]-$n[e])),e}const Hn={[Bn]:"%Y ",[Tn]:"Q%q ",[zn]:"%b ",[On]:"%d ",[Nn]:"W%U ",[Rn]:"%a ",[Ln]:"%j ",[Un]:"%H:00",[qn]:"00:%M",[Pn]:":%S",[jn]:".%L",["".concat(Bn,"-").concat(zn)]:"%Y-%m ",["".concat(Bn,"-").concat(zn,"-").concat(On)]:"%Y-%m-%d ",["".concat(Un,"-").concat(qn)]:"%H:%M"};function Yn(t,e){const n=K({},Hn,e),r=Wn(t),i=r.length;let o,a,u="",s=0;for(s=0;ss;--o)if(a=r.slice(s,o).join("-"),null!=n[a]){u+=n[a],s=o;break}return u.trim()}const Vn=new Date;function Gn(t){return Vn.setFullYear(t),Vn.setMonth(0),Vn.setDate(1),Vn.setHours(0,0,0,0),Vn}function Xn(t){return Zn(new Date(t))}function Jn(t){return Qn(new Date(t))}function Zn(t){return gn.count(Gn(t.getFullYear())-1,t)}function Qn(t){return yn.count(Gn(t.getFullYear())-1,t)}function Kn(t){return Gn(t).getDay()}function tr(t,e,n,r,i,o,a){if(0<=t&&t<100){const u=new Date(-1,e,n,r,i,o,a);return u.setFullYear(t),u}return new Date(t,e,n,r,i,o,a)}function er(t){return rr(new Date(t))}function nr(t){return ir(new Date(t))}function rr(t){const e=Date.UTC(t.getUTCFullYear(),0,1);return Mn.count(e-1,t)}function ir(t){const e=Date.UTC(t.getUTCFullYear(),0,1);return En.count(e-1,t)}function or(t){return Vn.setTime(Date.UTC(t,0,1)),Vn.getUTCDay()}function ar(t,e,n,r,i,o,a){if(0<=t&&t<100){const t=new Date(Date.UTC(-1,e,n,r,i,o,a));return t.setUTCFullYear(n.y),t}return new Date(Date.UTC(t,e,n,r,i,o,a))}function ur(t,e,n,r,i){const o=e||1,a=M(t),u=(t,e,i)=>function(t,e,n,r){const i=n<=1?t:r?(e,i)=>r+n*Math.floor((t(e,i)-r)/n):(e,r)=>n*Math.floor(t(e,r)/n);return e?(t,n)=>e(i(t,n),n):i}(n[i=i||t],r[i],t===a&&o,e),s=new Date,l=Dt(t),c=l.year?u(Bn):Z(2012),f=l.month?u(zn):l.quarter?u(Tn):h,p=l.week&&l.day?u(Rn,1,Nn+Rn):l.week?u(Nn,1):l.day?u(Rn,1):l.date?u(On,1):l.dayofyear?u(Ln,1):d,g=l.hours?u(Un):h,m=l.minutes?u(qn):h,y=l.seconds?u(Pn):h,v=l.milliseconds?u(jn):h;return function(t){s.setTime(+t);const e=c(s);return i(e,f(s),p(s,e),g(s),m(s),y(s),v(s))}}function sr(t,e,n){return e+7*t-(n+6)%7}const lr={[Bn]:t=>t.getFullYear(),[Tn]:t=>Math.floor(t.getMonth()/3),[zn]:t=>t.getMonth(),[On]:t=>t.getDate(),[Un]:t=>t.getHours(),[qn]:t=>t.getMinutes(),[Pn]:t=>t.getSeconds(),[jn]:t=>t.getMilliseconds(),[Ln]:t=>Zn(t),[Nn]:t=>Qn(t),[Nn+Rn]:(t,e)=>sr(Qn(t),t.getDay(),Kn(e)),[Rn]:(t,e)=>sr(1,t.getDay(),Kn(e))},cr={[Tn]:t=>3*t,[Nn]:(t,e)=>sr(t,0,Kn(e))};function fr(t,e){return ur(t,e||1,lr,cr,tr)}const hr={[Bn]:t=>t.getUTCFullYear(),[Tn]:t=>Math.floor(t.getUTCMonth()/3),[zn]:t=>t.getUTCMonth(),[On]:t=>t.getUTCDate(),[Un]:t=>t.getUTCHours(),[qn]:t=>t.getUTCMinutes(),[Pn]:t=>t.getUTCSeconds(),[jn]:t=>t.getUTCMilliseconds(),[Ln]:t=>rr(t),[Nn]:t=>ir(t),[Rn]:(t,e)=>sr(1,t.getUTCDay(),or(e)),[Nn+Rn]:(t,e)=>sr(ir(t),t.getUTCDay(),or(e))},dr={[Tn]:t=>3*t,[Nn]:(t,e)=>sr(t,0,or(e))};function pr(t,e){return ur(t,e||1,hr,dr,ar)}const gr={[Bn]:bn,[Tn]:xn.every(3),[zn]:xn,[Nn]:yn,[On]:gn,[Rn]:gn,[Ln]:gn,[Un]:pn,[qn]:dn,[Pn]:hn,[jn]:an},mr={[Bn]:Sn,[Tn]:Fn.every(3),[zn]:Fn,[Nn]:En,[On]:Mn,[Rn]:Mn,[Ln]:Mn,[Un]:kn,[qn]:wn,[Pn]:hn,[jn]:an};function yr(t){return gr[t]}function vr(t){return mr[t]}function _r(t,e,n){return t?t.offset(e,n):void 0}function xr(t,e,n){return _r(yr(t),e,n)}function br(t,e,n){return _r(vr(t),e,n)}function wr(t,e,n,r){return t?t.range(e,n,r):void 0}function kr(t,e,n,r){return wr(yr(t),e,n,r)}function Mr(t,e,n,r){return wr(vr(t),e,n,r)}const Ar=1e3,Er=6e4,Dr=36e5,Cr=864e5,Fr=2592e6,Sr=31536e6,Br=[Bn,zn,On,Un,qn,Pn,jn],Tr=Br.slice(0,-1),zr=Tr.slice(0,-1),Nr=zr.slice(0,-1),Or=Nr.slice(0,-1),Rr=[Bn,zn],Lr=[Bn],Ur=[[Tr,1,Ar],[Tr,5,5e3],[Tr,15,15e3],[Tr,30,3e4],[zr,1,Er],[zr,5,3e5],[zr,15,9e5],[zr,30,18e5],[Nr,1,Dr],[Nr,3,108e5],[Nr,6,216e5],[Nr,12,432e5],[Or,1,Cr],[[Bn,Nn],1,6048e5],[Rr,1,Fr],[Rr,3,7776e6],[Lr,1,Sr]];function qr(t){const e=t.extent,n=t.maxbins||40,r=Math.abs(bt(e))/n;let i,o,a=me((t=>t[2])).right(Ur,r);return a===Ur.length?(i=Lr,o=De(e[0]/Sr,e[1]/Sr,n)):a?(a=Ur[r/Ur[a-1][2]=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:co,s:fo,S:Bi,u:Ti,U:zi,V:Oi,w:Ri,W:Li,x:null,X:null,y:Ui,Y:Pi,Z:Ii,"%":lo},x={a:function(t){return a[t.getUTCDay()]},A:function(t){return o[t.getUTCDay()]},b:function(t){return s[t.getUTCMonth()]},B:function(t){return u[t.getUTCMonth()]},c:null,d:$i,e:$i,f:Gi,g:oo,G:uo,H:Wi,I:Hi,j:Yi,L:Vi,m:Xi,M:Ji,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:co,s:fo,S:Zi,u:Qi,U:Ki,V:eo,w:no,W:ro,x:null,X:null,y:io,Y:ao,Z:so,"%":lo},b={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=p.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=f.exec(e.slice(n));return r?(t.w=h.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=y.exec(e.slice(n));return r?(t.m=v.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=g.exec(e.slice(n));return r?(t.m=m.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return M(t,e,n,r)},d:di,e:di,f:_i,g:li,G:si,H:gi,I:gi,j:pi,L:vi,m:hi,M:mi,p:function(t,e,n){var r=l.exec(e.slice(n));return r?(t.p=c.get(r[0].toLowerCase()),n+r[0].length):-1},q:fi,Q:bi,s:wi,S:yi,u:ii,U:oi,V:ai,w:ri,W:ui,x:function(t,e,r){return M(t,n,e,r)},X:function(t,e,n){return M(t,r,e,n)},y:li,Y:si,Z:ci,"%":xi};function w(t,e){return function(n){var r,i,o,a=[],u=-1,s=0,l=t.length;for(n instanceof Date||(n=new Date(+n));++u53)return null;"w"in o||(o.w=1),"Z"in o?(i=(r=jr(Ir(o.y,0,1))).getUTCDay(),r=i>4||0===i?Dn.ceil(r):Dn(r),r=Mn.offset(r,7*(o.V-1)),o.y=r.getUTCFullYear(),o.m=r.getUTCMonth(),o.d=r.getUTCDate()+(o.w+6)%7):(i=(r=Pr(Ir(o.y,0,1))).getDay(),r=i>4||0===i?vn.ceil(r):vn(r),r=gn.offset(r,7*(o.V-1)),o.y=r.getFullYear(),o.m=r.getMonth(),o.d=r.getDate()+(o.w+6)%7)}else("W"in o||"U"in o)&&("w"in o||(o.w="u"in o?o.u%7:"W"in o?1:0),i="Z"in o?jr(Ir(o.y,0,1)).getUTCDay():Pr(Ir(o.y,0,1)).getDay(),o.m=0,o.d="W"in o?(o.w+6)%7+7*o.W-(i+5)%7:o.w+7*o.U-(i+6)%7);return"Z"in o?(o.H+=o.Z/100|0,o.M+=o.Z%100,jr(o)):Pr(o)}}function M(t,e,n,r){for(var i,o,a=0,u=e.length,s=n.length;a=s)return-1;if(37===(i=e.charCodeAt(a++))){if(i=e.charAt(a++),!(o=b[i in Xr?e.charAt(a++):i])||(r=o(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return _.x=w(n,_),_.X=w(r,_),_.c=w(e,_),x.x=w(n,x),x.X=w(r,x),x.c=w(e,x),{format:function(t){var e=w(t+="",_);return e.toString=function(){return t},e},parse:function(t){var e=k(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=w(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=k(t+="",!0);return e.toString=function(){return t},e}}}var Wr,Hr,Yr,Vr,Gr,Xr={"-":"",_:" ",0:"0"},Jr=/^\s*\d+/,Zr=/^%/,Qr=/[\\^$*+?|[\]().{}]/g;function Kr(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o[t.toLowerCase(),e])))}function ri(t,e,n){var r=Jr.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function ii(t,e,n){var r=Jr.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function oi(t,e,n){var r=Jr.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function ai(t,e,n){var r=Jr.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function ui(t,e,n){var r=Jr.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function si(t,e,n){var r=Jr.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function li(t,e,n){var r=Jr.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function ci(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function fi(t,e,n){var r=Jr.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function hi(t,e,n){var r=Jr.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function di(t,e,n){var r=Jr.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function pi(t,e,n){var r=Jr.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function gi(t,e,n){var r=Jr.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function mi(t,e,n){var r=Jr.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function yi(t,e,n){var r=Jr.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function vi(t,e,n){var r=Jr.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function _i(t,e,n){var r=Jr.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function xi(t,e,n){var r=Zr.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function bi(t,e,n){var r=Jr.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function wi(t,e,n){var r=Jr.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function ki(t,e){return Kr(t.getDate(),e,2)}function Mi(t,e){return Kr(t.getHours(),e,2)}function Ai(t,e){return Kr(t.getHours()%12||12,e,2)}function Ei(t,e){return Kr(1+gn.count(bn(t),t),e,3)}function Di(t,e){return Kr(t.getMilliseconds(),e,3)}function Ci(t,e){return Di(t,e)+"000"}function Fi(t,e){return Kr(t.getMonth()+1,e,2)}function Si(t,e){return Kr(t.getMinutes(),e,2)}function Bi(t,e){return Kr(t.getSeconds(),e,2)}function Ti(t){var e=t.getDay();return 0===e?7:e}function zi(t,e){return Kr(yn.count(bn(t)-1,t),e,2)}function Ni(t){var e=t.getDay();return e>=4||0===e?_n(t):_n.ceil(t)}function Oi(t,e){return t=Ni(t),Kr(_n.count(bn(t),t)+(4===bn(t).getDay()),e,2)}function Ri(t){return t.getDay()}function Li(t,e){return Kr(vn.count(bn(t)-1,t),e,2)}function Ui(t,e){return Kr(t.getFullYear()%100,e,2)}function qi(t,e){return Kr((t=Ni(t)).getFullYear()%100,e,2)}function Pi(t,e){return Kr(t.getFullYear()%1e4,e,4)}function ji(t,e){var n=t.getDay();return Kr((t=n>=4||0===n?_n(t):_n.ceil(t)).getFullYear()%1e4,e,4)}function Ii(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Kr(e/60|0,"0",2)+Kr(e%60,"0",2)}function $i(t,e){return Kr(t.getUTCDate(),e,2)}function Wi(t,e){return Kr(t.getUTCHours(),e,2)}function Hi(t,e){return Kr(t.getUTCHours()%12||12,e,2)}function Yi(t,e){return Kr(1+Mn.count(Sn(t),t),e,3)}function Vi(t,e){return Kr(t.getUTCMilliseconds(),e,3)}function Gi(t,e){return Vi(t,e)+"000"}function Xi(t,e){return Kr(t.getUTCMonth()+1,e,2)}function Ji(t,e){return Kr(t.getUTCMinutes(),e,2)}function Zi(t,e){return Kr(t.getUTCSeconds(),e,2)}function Qi(t){var e=t.getUTCDay();return 0===e?7:e}function Ki(t,e){return Kr(En.count(Sn(t)-1,t),e,2)}function to(t){var e=t.getUTCDay();return e>=4||0===e?Cn(t):Cn.ceil(t)}function eo(t,e){return t=to(t),Kr(Cn.count(Sn(t),t)+(4===Sn(t).getUTCDay()),e,2)}function no(t){return t.getUTCDay()}function ro(t,e){return Kr(Dn.count(Sn(t)-1,t),e,2)}function io(t,e){return Kr(t.getUTCFullYear()%100,e,2)}function oo(t,e){return Kr((t=to(t)).getUTCFullYear()%100,e,2)}function ao(t,e){return Kr(t.getUTCFullYear()%1e4,e,4)}function uo(t,e){var n=t.getUTCDay();return Kr((t=n>=4||0===n?Cn(t):Cn.ceil(t)).getUTCFullYear()%1e4,e,4)}function so(){return"+0000"}function lo(){return"%"}function co(t){return+t}function fo(t){return Math.floor(+t/1e3)}function ho(t){const e={};return n=>e[n]||(e[n]=t(n))}function po(t){const e=ho(t.format),n=t.formatPrefix;return{format:e,formatPrefix:n,formatFloat(t){const n=Ie(t||",");if(null==n.precision){switch(n.precision=12,n.type){case"%":n.precision-=2;break;case"e":n.precision-=1}return r=e(n),i=e(".1f")(1)[1],t=>{const e=r(t),n=e.indexOf(i);if(n<0)return e;let o=function(t,e){let n,r=t.lastIndexOf("e");if(r>0)return r;for(r=t.length;--r>e;)if(n=t.charCodeAt(r),n>=48&&n<=57)return r+1}(e,n);const a=on;)if("0"!==e[o]){++o;break}return e.slice(0,o)+a}}return e(n);var r,i},formatSpan(t,r,i,o){o=Ie(null==o?",f":o);const a=De(t,r,i),u=Math.max(Math.abs(t),Math.abs(r));let s;if(null==o.precision)switch(o.type){case"s":return isNaN(s=tn(a,u))||(o.precision=s),n(o,u);case"":case"e":case"g":case"p":case"r":isNaN(s=en(a,u))||(o.precision=s-("e"===o.type));break;case"f":case"%":isNaN(s=Ke(a))||(o.precision=s-2*("%"===o.type))}return e(o)}}}let go,mo;function yo(){return go=po({format:Ge,formatPrefix:Xe})}function vo(t){return po(Qe(t))}function _o(t){return arguments.length?go=vo(t):go}function xo(t,e,n){_(n=n||{})||u("Invalid time multi-format specifier: ".concat(n));const r=e(Pn),i=e(qn),o=e(Un),a=e(On),s=e(Nn),l=e(zn),c=e(Tn),f=e(Bn),h=t(n.milliseconds||".%L"),d=t(n.seconds||":%S"),p=t(n.minutes||"%I:%M"),g=t(n.hours||"%I %p"),m=t(n.date||n.day||"%a %d"),y=t(n.week||"%b %d"),v=t(n.month||"%B"),x=t(n.quarter||"%B"),b=t(n.year||"%Y");return t=>(r(t)pt(t)?e(t):xo(e,yr,t),utcFormat:t=>pt(t)?n(t):xo(n,vr,t),timeParse:ho(t.parse),utcParse:ho(t.utcParse)}}function wo(){return mo=bo({format:Hr,parse:Yr,utcFormat:Vr,utcParse:Gr})}function ko(t){return bo($r(t))}function Mo(t){return arguments.length?mo=ko(t):mo}!function(t){Wr=$r(t),Hr=Wr.format,Yr=Wr.parse,Vr=Wr.utcFormat,Gr=Wr.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}),yo(),wo();const Ao=(t,e)=>K({},t,e);function Eo(t,e){const n=t?vo(t):_o(),r=e?ko(e):Mo();return Ao(n,r)}function Do(t,e){const n=arguments.length;return n&&2!==n&&u("defaultLocale expects either zero or two arguments."),n?Ao(_o(t),Mo(e)):Ao(_o(),Mo())}function Co(t,e,n,r){const i=de((e=e||{}).type||"json");return i||u("Unknown data format type: "+e.type),t=i(t,e),e.parse&&function(t,e,n,r){if(!t.length)return;const i=Mo();n=n||i.timeParse,r=r||i.utcParse;let o,a,u,s,l,c,f=t.columns||Object.keys(t[0]);"auto"===e&&(e=Ht(t,f));f=Object.keys(e);const h=f.map((t=>{const i=e[t];let o,a;if(i&&(i.startsWith("date:")||i.startsWith("utc:"))){o=i.split(/:(.+)?/,2),a=o[1],("'"===a[0]&&"'"===a[a.length-1]||'"'===a[0]&&'"'===a[a.length-1])&&(a=a.slice(1,-1));return("utc"===o[0]?r:n)(a)}if(!jt[i])throw Error("Illegal format pattern: "+t+":"+i);return jt[i]}));for(u=0,l=t.length,c=f.length;u({options:n||{},sanitize:Ot,load:Nt,fileAccess:!!e,file:Rt(e),http:Ut(t)})}("undefined"!=typeof fetch&&fetch,null);function So(t){const e=t||f,n=[],r={};return n.add=t=>{const i=e(t);return r[i]||(r[i]=1,n.push(t)),n},n.remove=t=>{const i=e(t);if(r[i]){r[i]=0;const e=n.indexOf(t);e>=0&&n.splice(e,1)}return n},n}async function Bo(t,e){try{await e(t)}catch(e){t.error(e)}}const To=Symbol("vega_id");let zo=1;function No(t){return!(!t||!Oo(t))}function Oo(t){return t[To]}function Ro(t,e){return t[To]=e,t}function Lo(t){const e=t===Object(t)?t:{data:t};return Oo(e)?e:Ro(e,zo++)}function Uo(t){return qo(t,Lo({}))}function qo(t,e){for(const n in t)e[n]=t[n];return e}function Po(t,e){return Ro(e,Oo(t))}function jo(t,e){return t?e?(n,r)=>t(n,r)||Oo(e(n))-Oo(e(r)):(e,n)=>t(e,n)||Oo(e)-Oo(n):null}function Io(t){return t&&t.constructor===$o}function $o(){const t=[],e=[],n=[],r=[],i=[];let o=null,a=!1;return{constructor:$o,insert(e){const n=$(e),r=n.length;for(let e=0;e{p(t)&&(l[Oo(t)]=-1)}));for(f=0,h=t.length;f0&&(y(g,p,d.value),u.modifies(p));for(f=0,h=i.length;f{p(t)&&l[Oo(t)]>0&&y(t,d.field,d.value)})),u.modifies(d.field);if(a)u.mod=e.length||r.length?s.filter((t=>l[Oo(t)]>0)):s.slice();else for(m in c)u.mod.push(c[m]);return(o||null==o&&(e.length||r.length))&&u.clean(!0),u}}}const Wo="_:mod:_";function Ho(){Object.defineProperty(this,Wo,{writable:!0,value:{}})}Ho.prototype={set(t,e,n,r){const i=this,o=i[t],a=i[Wo];return null!=e&&e>=0?(o[e]!==n||r)&&(o[e]=n,a[e+":"+t]=-1,a[t]=-1):(o!==n||r)&&(i[t]=n,a[t]=v(n)?1+n.length:-1),i},modified(t,e){const n=this[Wo];if(!arguments.length){for(const t in n)if(n[t])return!0;return!1}if(v(t)){for(let e=0;e=0?e+1{a instanceof Go?(a!==this&&(e&&a.targets().add(this),o.push(a)),i.push({op:a,name:t,index:n})):r.set(t,n,a)};for(a in t)if(s=t[a],"pulse"===a)$(s).forEach((t=>{t instanceof Go?t!==this&&(t.targets().add(this),o.push(t)):u("Pulse parameters must be operator instances.")})),this.source=s;else if(v(s))for(r.set(a,-1,Array(l=s.length)),c=0;c{const n=Date.now();return n-e>t?(e=n,1):0}))},debounce(t){const e=Qo();return this.targets().add(Qo(null,null,Q(t,(t=>{const n=t.dataflow;e.receive(t),n&&n.run&&n.run()})))),e},between(t,e){let n=!1;return t.targets().add(Qo(null,null,(()=>n=!0))),e.targets().add(Qo(null,null,(()=>n=!1))),this.filter((()=>n))},detach(){}};const Ko={skip:!0};function ta(t,e,n,r,i,o){const a=K({},o,Ko);let u,s;H(n)||(n=Z(n)),void 0===r?u=e=>t.touch(n(e)):H(r)?(s=new Go(null,r,i,!1),u=e=>{s.evaluate(e);const r=n(e),i=s.value;Io(i)?t.pulse(r,i,o):t.update(r,i,a)}):u=e=>t.update(n(e),r,a),e.apply(u)}function ea(t,e,n,r,i,o){if(void 0===r)e.targets().add(n);else{const a=o||{},u=new Go(null,function(t,e){return e=H(e)?e:Z(e),t?function(n,r){const i=e(n,r);return t.skip()||(t.skip(i!==this.value).value=i),i}:e}(n,r),i,!1);u.modified(a.force),u.rank=e.rank,e.targets().add(u),n&&(u.skip(!0),u.value=n.value,u.targets().add(n),t.connect(n,[u]))}}const na={};function ra(t,e,n){this.dataflow=t,this.stamp=null==e?-1:e,this.add=[],this.rem=[],this.mod=[],this.fields=null,this.encode=n||null}function ia(t,e){const n=[];return Ft(t,e,(t=>n.push(t))),n}function oa(t,e){const n={};return t.visit(e,(t=>{n[Oo(t)]=1})),t=>n[Oo(t)]?null:t}function aa(t,e){return t?(n,r)=>t(n,r)&&e(n,r):e}function ua(t,e,n,r){const i=this,o=n.length;let a=0;this.dataflow=t,this.stamp=e,this.fields=null,this.encode=r||null,this.pulses=n;for(let t=0;te[t]=!0)):e[t]=!0,this},modified(t,e){const n=this.fields;return!(!e&&!this.mod.length||!n)&&(arguments.length?v(t)?t.some((t=>n[t])):n[t]:!!n)},filter(t,e){const n=this;return 1&t&&(n.addF=aa(n.addF,e)),2&t&&(n.remF=aa(n.remF,e)),4&t&&(n.modF=aa(n.modF,e)),16&t&&(n.srcF=aa(n.srcF,e)),n},materialize(t){const e=this;return 1&(t=t||7)&&e.addF&&(e.add=ia(e.add,e.addF),e.addF=null),2&t&&e.remF&&(e.rem=ia(e.rem,e.remF),e.remF=null),4&t&&e.modF&&(e.mod=ia(e.mod,e.modF),e.modF=null),16&t&&e.srcF&&(e.source=e.source.filter(e.srcF),e.srcF=null),e},visit(t,e){const n=this,r=e;if(16&t)return Ft(n.source,n.srcF,r),n;1&t&&Ft(n.add,n.addF,r),2&t&&Ft(n.rem,n.remF,r),4&t&&Ft(n.mod,n.modF,r);const i=n.source;if(8&t&&i){const t=n.add.length+n.mod.length;t===i.length||Ft(i,t?oa(n,5):n.srcF,r)}return n}},ut(ua,ra,{fork(t){const e=new ra(this.dataflow).init(this,t&this.NO_FIELDS);return void 0!==t&&(t&e.ADD&&this.visit(e.ADD,(t=>e.add.push(t))),t&e.REM&&this.visit(e.REM,(t=>e.rem.push(t))),t&e.MOD&&this.visit(e.MOD,(t=>e.mod.push(t)))),e},changed(t){return this.changes&t},modified(t){const e=this,n=e.fields;return n&&e.changes&e.MOD?v(t)?t.some((t=>n[t])):n[t]:0},filter(){u("MultiPulse does not support filtering.")},materialize(){u("MultiPulse does not support materialization.")},visit(t,e){const n=this,r=n.pulses,i=r.length;let o=0;if(t&n.SOURCE)for(;oe=[],size:()=>e.length,peek:()=>e[0],push:n=>(e.push(n),fa(e,0,e.length-1,t)),pop:()=>{const n=e.pop();let r;return e.length?(r=e[0],e[0]=n,function(t,e,n){const r=e,i=t.length,o=t[e];let a,u=1+(e<<1);for(;u=0&&(u=a),t[e]=t[u],u=1+((e=u)<<1);t[e]=o,fa(t,r,e,n)}(e,0,t)):r=n,r}}}function fa(t,e,n,r){let i,o;const a=t[n];for(;n>e&&(o=n-1>>1,i=t[o],r(a,i)<0);)t[n]=i,n=o;return t[n]=a}function ha(){this.logger(y()),this.logLevel(1),this._clock=0,this._rank=0,this._locale=Do();try{this._loader=Fo()}catch(t){}this._touched=So(c),this._input={},this._pulse=null,this._heap=ca(((t,e)=>t.qrank-e.qrank)),this._postrun=[]}function da(t){return function(){return this._log[t].apply(this,arguments)}}function pa(t,e){Go.call(this,t,null,e)}ha.prototype={stamp(){return this._clock},loader(t){return arguments.length?(this._loader=t,this):this._loader},locale(t){return arguments.length?(this._locale=t,this):this._locale},logger(t){return arguments.length?(this._log=t,this):this._log},error:da("error"),warn:da("warn"),info:da("info"),debug:da("debug"),logLevel:da("level"),cleanThreshold:1e4,add:function(t,e,n,r){let i,o=1;return t instanceof Go?i=t:t&&t.prototype instanceof Go?i=new t:H(t)?i=new Go(null,t):(o=0,i=new Go(t,e)),this.rank(i),o&&(r=n,n=e),n&&this.connect(i,i.parameters(n,r)),this.touch(i),i},connect:function(t,e){const n=t.rank,r=e.length;for(let i=0;i=0;)e.push(n=r[i]),n===t&&u("Cycle detected in dataflow graph.")},pulse:function(t,e,n){this.touch(t,n||la);const r=new ra(this,this._clock+(this._pulse?0:1)),i=t.pulse&&t.pulse.source||[];return r.target=t,this._input[t.id]=e.pulse(r,i),this},touch:function(t,e){const n=e||la;return this._pulse?this._enqueue(t):this._touched.add(t),n.skip&&t.skip(!0),this},update:function(t,e,n){const r=n||la;return(t.set(e)||r.force)&&this.touch(t,r),this},changeset:$o,ingest:function(t,e,n){return e=this.parse(e,n),this.pulse(t,this.changeset().insert(e))},parse:function(t,e){const n=this.locale();return Co(t,e,n.timeParse,n.utcParse)},preload:async function(t,e,n){const r=this,i=r._pending||function(t){let e;const n=new Promise((t=>e=t));return n.requests=0,n.done=()=>{0==--n.requests&&(t._pending=null,e(t))},t._pending=n}(r);i.requests+=1;const o=await r.request(e,n);return r.pulse(t,r.changeset().remove(p).insert(o.data||[])),i.done(),o},request:async function(t,e){const n=this;let r,i=0;try{r=await n.loader().load(t,{context:"dataflow",response:pe(e&&e.type)});try{r=n.parse(r,e)}catch(e){i=-2,n.warn("Data ingestion failed",t,e)}}catch(e){i=-1,n.warn("Loading failed",t,e)}return{data:r,status:i}},events:function(t,e,n,r){const i=this,o=Qo(n,r),a=function(t){t.dataflow=i;try{o.receive(t)}catch(t){i.error(t)}finally{i.run()}};let u;u="string"==typeof t&&"undefined"!=typeof document?document.querySelectorAll(t):$(t);const s=u.length;for(let t=0;tr._enqueue(t,!0))),r._touched=So(c);let a,u,s,l=0;try{for(;r._heap.size()>0;)a=r._heap.pop(),a.rank===a.qrank?(u=a.run(r._getPulse(a,t)),u.then?u=await u:u.async&&(i.push(u.async),u=na),u!==na&&a._targets&&a._targets.forEach((t=>r._enqueue(t))),++l):r._enqueue(a,!0)}catch(t){r._heap.clear(),s=t}if(r._input={},r._pulse=null,r.debug("Pulse ".concat(o,": ").concat(l," operators")),s&&(r._postrun=[],r.error(s)),r._postrun.length){const t=r._postrun.sort(((t,e)=>e.priority-t.priority));r._postrun=[];for(let e=0;er.runAsync(null,(()=>{t.forEach((t=>{try{t(r)}catch(t){r.error(t)}}))})))),r},run:function(t,e,n){return this._pulse?sa(this):(this.evaluate(t,e,n),this)},runAsync:async function(t,e,n){for(;this._running;)await this._running;const r=()=>this._running=null;return(this._running=this.evaluate(t,e,n)).then(r,r),this._running},runAfter:function(t,e,n){if(this._pulse||e)this._postrun.push({priority:n||0,callback:t});else try{t(this)}catch(t){this.error(t)}},_enqueue:function(t,e){const n=t.stampt.pulse)),e):this._input[t.id]||function(t,e){if(e&&e.stamp===t.stamp)return e;t=t.fork(),e&&e!==na&&(t.source=e.source);return t}(this._pulse,n&&n.pulse)}},ut(pa,Go,{run(t){if(t.stampthis.pulse=t)):e!==t.StopPropagation&&(this.pulse=e),e},evaluate(t){const e=this.marshall(t.stamp),n=this.transform(e,t);return e.clear(),n},transform(){}});const ga={};function ma(t){const e=ya(t);return e&&e.Definition||null}function ya(t){return t=t&&t.toLowerCase(),rt(ga,t)?ga[t]:null}function*va(t,e){if(null==e)for(let e of t)null!=e&&""!==e&&(e=+e)>=e&&(yield e);else{let n=-1;for(let r of t)r=e(r,++n,t),null!=r&&""!==r&&(r=+r)>=r&&(yield r)}}function _a(t,e,n){const r=Float64Array.from(va(t,n));return r.sort(ge),e.map((t=>ze(r,t)))}function xa(t,e){return _a(t,[.25,.5,.75],e)}function ba(t,e){const n=t.length,r=function(t,e){const n=function(t,e){let n,r=0,i=0,o=0;if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(n=e-i,i+=n/++r,o+=n*(e-i));else{let a=-1;for(let u of t)null!=(u=e(u,++a,t))&&(u=+u)>=u&&(n=u-i,i+=n/++r,o+=n*(u-i))}if(r>1)return o/(r-1)}(t,e);return n?Math.sqrt(n):n}(t,e),i=xa(t,e),o=(i[2]-i[0])/1.34;return 1.06*(Math.min(r,o)||r||Math.abs(i[0])||1)*Math.pow(n,-.2)}function wa(t){const e=t.maxbins||20,n=t.base||10,r=Math.log(n),i=t.divide||[5,2];let o,a,u,s,l,c,f=t.extent[0],h=t.extent[1];const d=t.span||h-f||Math.abs(f)||1;if(t.step)o=t.step;else if(t.steps){for(s=d/e,l=0,c=t.steps.length;le;)o*=n;for(l=0,c=i.length;l=u&&d/s<=e&&(o=s)}s=Math.log(o);const p=s>=0?0:1+~~(-s/r),g=Math.pow(n,-p-1);return(t.nice||void 0===t.nice)&&(s=Math.floor(f/o+g)*o,f=ft);const i=t.length,o=new Float64Array(i);let a,u=0,s=1,l=r(t[0]),c=l,f=l+e;for(;s=f){for(c=(l+c)/2;u>1);ia;)t[i--]=t[o]}o=a,a=r}return t}(o,e+e/4):o}t.random=Math.random;const Aa=Math.sqrt(2*Math.PI),Ea=Math.SQRT2;let Da=NaN;function Ca(e,n){e=e||0,n=null==n?1:n;let r,i,o=0,a=0;if(Da==Da)o=Da,Da=NaN;else{do{o=2*t.random()-1,a=2*t.random()-1,r=o*o+a*a}while(0===r||r>1);i=Math.sqrt(-2*Math.log(r)/r),o*=i,Da=a*i}return e+o*n}function Fa(t,e,n){const r=(t-(e||0))/(n=null==n?1:n);return Math.exp(-.5*r*r)/(n*Aa)}function Sa(t,e,n){const r=(t-(e=e||0))/(n=null==n?1:n),i=Math.abs(r);let o;if(i>37)o=0;else{const t=Math.exp(-i*i/2);let e;i<7.07106781186547?(e=.0352624965998911*i+.700383064443688,e=e*i+6.37396220353165,e=e*i+33.912866078383,e=e*i+112.079291497871,e=e*i+221.213596169931,e=e*i+220.206867912376,o=t*e,e=.0883883476483184*i+1.75566716318264,e=e*i+16.064177579207,e=e*i+86.7807322029461,e=e*i+296.564248779674,e=e*i+637.333633378831,e=e*i+793.826512519948,e=e*i+440.413735824752,o/=e):(e=i+.65,e=i+4/e,e=i+3/e,e=i+2/e,e=i+1/e,o=t/e/2.506628274631)}return r>0?1-o:o}function Ba(t,e,n){return t<0||t>1?NaN:(e||0)+(null==n?1:n)*Ea*function(t){let e,n=-Math.log((1-t)*(1+t));n<6.25?(n-=3.125,e=-364441206401782e-35,e=e*n-16850591381820166e-35,e=128584807152564e-32+e*n,e=11157877678025181e-33+e*n,e=e*n-1333171662854621e-31,e=20972767875968562e-33+e*n,e=6637638134358324e-30+e*n,e=e*n-4054566272975207e-29,e=e*n-8151934197605472e-29,e=26335093153082323e-28+e*n,e=e*n-12975133253453532e-27,e=e*n-5415412054294628e-26,e=1.0512122733215323e-9+e*n,e=e*n-4.112633980346984e-9,e=e*n-2.9070369957882005e-8,e=4.2347877827932404e-7+e*n,e=e*n-13654692000834679e-22,e=e*n-13882523362786469e-21,e=.00018673420803405714+e*n,e=e*n-.000740702534166267,e=e*n-.006033670871430149,e=.24015818242558962+e*n,e=1.6536545626831027+e*n):n<16?(n=Math.sqrt(n)-3.25,e=2.2137376921775787e-9,e=9.075656193888539e-8+e*n,e=e*n-2.7517406297064545e-7,e=1.8239629214389228e-8+e*n,e=15027403968909828e-22+e*n,e=e*n-4013867526981546e-21,e=29234449089955446e-22+e*n,e=12475304481671779e-21+e*n,e=e*n-47318229009055734e-21,e=6828485145957318e-20+e*n,e=24031110387097894e-21+e*n,e=e*n-.0003550375203628475,e=.0009532893797373805+e*n,e=e*n-.0016882755560235047,e=.002491442096107851+e*n,e=e*n-.003751208507569241,e=.005370914553590064+e*n,e=1.0052589676941592+e*n,e=3.0838856104922208+e*n):Number.isFinite(n)?(n=Math.sqrt(n)-5,e=-27109920616438573e-27,e=e*n-2.555641816996525e-10,e=1.5076572693500548e-9+e*n,e=e*n-3.789465440126737e-9,e=7.61570120807834e-9+e*n,e=e*n-1.496002662714924e-8,e=2.914795345090108e-8+e*n,e=e*n-6.771199775845234e-8,e=2.2900482228026655e-7+e*n,e=e*n-9.9298272942317e-7,e=4526062597223154e-21+e*n,e=e*n-1968177810553167e-20,e=7599527703001776e-20+e*n,e=e*n-.00021503011930044477,e=e*n-.00013871931833623122,e=1.0103004648645344+e*n,e=4.849906401408584+e*n):e=1/0;return e*t}(2*t-1)}function Ta(t,e){let n,r;const i={mean(t){return arguments.length?(n=t||0,i):n},stdev(t){return arguments.length?(r=null==t?1:t,i):r},sample:()=>Ca(n,r),pdf:t=>Fa(t,n,r),cdf:t=>Sa(t,n,r),icdf:t=>Ba(t,n,r)};return i.mean(t).stdev(e)}function za(e,n){const r=Ta();let i=0;const o={data(t){return arguments.length?(e=t,i=t?t.length:0,o.bandwidth(n)):e},bandwidth(t){return arguments.length?(!(n=t)&&e&&(n=ba(e)),o):n},sample:()=>e[~~(t.random()*i)]+n*r.sample(),pdf(t){let o=0,a=0;for(;aNa(n,r),pdf:t=>Oa(t,n,r),cdf:t=>Ra(t,n,r),icdf:t=>La(t,n,r)};return i.mean(t).stdev(e)}function qa(e,n){let r,i=0;const o={weights(t){return arguments.length?(r=function(t){const e=[];let n,r=0;for(n=0;n=e&&t<=n?1/(n-e):0}function Ia(t,e,n){return null==n&&(n=null==e?1:e,e=0),tn?1:(t-e)/(n-e)}function $a(t,e,n){return null==n&&(n=null==e?1:e,e=0),t>=0&&t<=1?e+t*(n-e):NaN}function Wa(t,e){let n,r;const i={min(t){return arguments.length?(n=t||0,i):n},max(t){return arguments.length?(r=null==t?1:t,i):r},sample:()=>Pa(n,r),pdf:t=>ja(t,n,r),cdf:t=>Ia(t,n,r),icdf:t=>$a(t,n,r)};return null==e&&(e=null==t?1:t,t=0),i.min(t).max(e)}function Ha(t,e,n,r){const i=r-t*t,o=Math.abs(i)<1e-24?0:(n-t*e)/i;return[e-o*t,o]}function Ya(t,e,n,r){t=t.filter((t=>{let r=e(t),i=n(t);return null!=r&&(r=+r)>=r&&null!=i&&(i=+i)>=i})),r&&t.sort(((t,n)=>e(t)-e(n)));const i=t.length,o=new Float64Array(i),a=new Float64Array(i);let u,s,l,c=0,f=0,h=0;for(l of t)o[c]=u=+e(l),a[c]=s=+n(l),++c,f+=(u-f)/c,h+=(s-h)/c;for(c=0;c=i&&null!=o&&(o=+o)>=o&&r(i,o,++a)}function Ga(t,e,n,r,i){let o=0,a=0;return Va(t,e,n,((t,e)=>{const n=e-i(t),u=e-r;o+=n*n,a+=u*u})),1-o/a}function Xa(t,e,n){let r=0,i=0,o=0,a=0,u=0;Va(t,e,n,((t,e)=>{++u,r+=(t-r)/u,i+=(e-i)/u,o+=(t*e-o)/u,a+=(t*t-a)/u}));const s=Ha(r,i,o,a),l=t=>s[0]+s[1]*t;return{coef:s,predict:l,rSquared:Ga(t,e,n,i,l)}}function Ja(t,e,n){let r=0,i=0,o=0,a=0,u=0;Va(t,e,n,((t,e)=>{++u,t=Math.log(t),r+=(t-r)/u,i+=(e-i)/u,o+=(t*e-o)/u,a+=(t*t-a)/u}));const s=Ha(r,i,o,a),l=t=>s[0]+s[1]*Math.log(t);return{coef:s,predict:l,rSquared:Ga(t,e,n,i,l)}}function Za(t,e,n){const[r,i,o,a]=Ya(t,e,n);let u,s,l,c=0,f=0,h=0,d=0,p=0;Va(t,e,n,((t,e)=>{u=r[p++],s=Math.log(e),l=u*e,c+=(e*s-c)/p,f+=(l-f)/p,h+=(l*s-h)/p,d+=(u*l-d)/p}));const[g,m]=Ha(f/a,c/a,h/a,d/a),y=t=>Math.exp(g+m*(t-o));return{coef:[Math.exp(g-m*o),m],predict:y,rSquared:Ga(t,e,n,a,y)}}function Qa(t,e,n){let r=0,i=0,o=0,a=0,u=0,s=0;Va(t,e,n,((t,e)=>{const n=Math.log(t),l=Math.log(e);++s,r+=(n-r)/s,i+=(l-i)/s,o+=(n*l-o)/s,a+=(n*n-a)/s,u+=(e-u)/s}));const l=Ha(r,i,o,a),c=t=>l[0]*Math.pow(t,l[1]);return l[0]=Math.exp(l[0]),{coef:l,predict:c,rSquared:Ga(t,e,n,u,c)}}function Ka(t,e,n){const[r,i,o,a]=Ya(t,e,n),u=r.length;let s,l,c,f,h=0,d=0,p=0,g=0,m=0;for(s=0;s_*(t-=o)*t+x*t+b+a;return{coef:[b-x*o+_*o*o+a,x-2*_*o,_],predict:w,rSquared:Ga(t,e,n,a,w)}}function tu(t,e,n,r){if(1===r)return Xa(t,e,n);if(2===r)return Ka(t,e,n);const[i,o,a,u]=Ya(t,e,n),s=i.length,l=[],c=[],f=r+1;let h,d,p,g,m;for(h=0;hMath.abs(t[r][a])&&(a=i);for(o=r;o=r;o--)t[o][i]-=t[o][r]*t[r][i]/t[r][r]}for(i=e-1;i>=0;--i){for(u=0,o=i+1;o{t-=a;let e=u+y[0]+y[1]*t+y[2]*t*t;for(h=3;h=0;--o)for(u=e[o],s=1,i[o]+=u,a=1;a<=o;++a)s*=(o+1-a)/a,i[o-a]+=u*Math.pow(n,a)*s;return i[0]+=r,i}function nu(t,e,n,r){const[i,o,a,u]=Ya(t,e,n,!0),s=i.length,l=Math.max(2,~~(r*s)),c=new Float64Array(s),f=new Float64Array(s),h=new Float64Array(s).fill(1);for(let t=-1;++t<=2;){const e=[0,l-1];for(let t=0;ti[a]-n?r:a;let s=0,l=0,d=0,p=0,g=0;const m=1/Math.abs(i[u]-n||1);for(let t=r;t<=a;++t){const e=i[t],r=o[t],a=ru(Math.abs(n-e)*m)*h[t],u=e*a;s+=a,l+=u,d+=r*a,p+=r*u,g+=e*u}const[y,v]=Ha(l/s,d/s,p/s,g/s);c[t]=y+v*n,f[t]=Math.abs(o[t]-c[t]),iu(i,t+1,e)}if(2===t)break;const n=Ne(f);if(Math.abs(n)<1e-12)break;for(let t,e,r=0;r=1?1e-12:(e=1-t*t)*e}return function(t,e,n,r){const i=t.length,o=[];let a,u=0,s=0,l=[];for(;u=t.length))for(;e>i&&t[o]-r<=r-t[i];)n[0]=++i,n[1]=o,++o}const ou=.1*Math.PI/180;function au(t,e,n,r){n=n||25,r=Math.max(n,r||200);const i=e=>[e,t(e)],o=e[0],a=e[1],u=a-o,s=u/r,l=[i(o)],c=[];if(n===r){for(let t=1;t0;)c.push(i(o+t/n*u));let f=l[0],h=c[c.length-1];for(;h;){const t=i((f[0]+h[0])/2);t[0]-f[0]>=s&&uu(f,t,h)>ou?c.push(t):(f=h,l.push(h),c.pop()),h=c[c.length-1]}return l}function uu(t,e,n){const r=Math.atan2(n[1]-t[1],n[0]-t[0]),i=Math.atan2(e[1]-t[1],e[0]-t[0]);return Math.abs(r-i)}function su(t){return t&&t.length?1===t.length?t[0]:(e=t,t=>{const n=e.length;let r=1,i=String(e[0](t));for(;r{},fu={init:cu,add:cu,rem:cu,idx:0},hu={values:{init:t=>t.cell.store=!0,value:t=>t.cell.data.values(),idx:-1},count:{value:t=>t.cell.num},__count__:{value:t=>t.missing+t.valid},missing:{value:t=>t.missing},valid:{value:t=>t.valid},sum:{init:t=>t.sum=0,value:t=>t.sum,add:(t,e)=>t.sum+=+e,rem:(t,e)=>t.sum-=e},product:{init:t=>t.product=1,value:t=>t.valid?t.product:void 0,add:(t,e)=>t.product*=e,rem:(t,e)=>t.product/=e},mean:{init:t=>t.mean=0,value:t=>t.valid?t.mean:void 0,add:(t,e)=>(t.mean_d=e-t.mean,t.mean+=t.mean_d/t.valid),rem:(t,e)=>(t.mean_d=e-t.mean,t.mean-=t.valid?t.mean_d/t.valid:t.mean)},average:{value:t=>t.valid?t.mean:void 0,req:["mean"],idx:1},variance:{init:t=>t.dev=0,value:t=>t.valid>1?t.dev/(t.valid-1):void 0,add:(t,e)=>t.dev+=t.mean_d*(e-t.mean),rem:(t,e)=>t.dev-=t.mean_d*(e-t.mean),req:["mean"],idx:1},variancep:{value:t=>t.valid>1?t.dev/t.valid:void 0,req:["variance"],idx:2},stdev:{value:t=>t.valid>1?Math.sqrt(t.dev/(t.valid-1)):void 0,req:["variance"],idx:2},stdevp:{value:t=>t.valid>1?Math.sqrt(t.dev/t.valid):void 0,req:["variance"],idx:2},stderr:{value:t=>t.valid>1?Math.sqrt(t.dev/(t.valid*(t.valid-1))):void 0,req:["variance"],idx:2},distinct:{value:t=>t.cell.data.distinct(t.get),req:["values"],idx:3},ci0:{value:t=>t.cell.data.ci0(t.get),req:["values"],idx:3},ci1:{value:t=>t.cell.data.ci1(t.get),req:["values"],idx:3},median:{value:t=>t.cell.data.q2(t.get),req:["values"],idx:3},q1:{value:t=>t.cell.data.q1(t.get),req:["values"],idx:3},q3:{value:t=>t.cell.data.q3(t.get),req:["values"],idx:3},min:{init:t=>t.min=void 0,value:t=>t.min=Number.isNaN(t.min)?t.cell.data.min(t.get):t.min,add:(t,e)=>{(e{e<=t.min&&(t.min=NaN)},req:["values"],idx:4},max:{init:t=>t.max=void 0,value:t=>t.max=Number.isNaN(t.max)?t.cell.data.max(t.get):t.max,add:(t,e)=>{(e>t.max||void 0===t.max)&&(t.max=e)},rem:(t,e)=>{e>=t.max&&(t.max=NaN)},req:["values"],idx:4},argmin:{init:t=>t.argmin=void 0,value:t=>t.argmin||t.cell.data.argmin(t.get),add:(t,e,n)=>{e{e<=t.min&&(t.argmin=void 0)},req:["min","values"],idx:3},argmax:{init:t=>t.argmax=void 0,value:t=>t.argmax||t.cell.data.argmax(t.get),add:(t,e,n)=>{e>t.max&&(t.argmax=n)},rem:(t,e)=>{e>=t.max&&(t.argmax=void 0)},req:["max","values"],idx:3}},du=Object.keys(hu);function pu(t,e){return hu[t](e)}function gu(t,e){return t.idx-e.idx}function mu(){this.valid=0,this.missing=0,this._ops.forEach((t=>t.init(this)))}function yu(t,e){null!=t&&""!==t?t==t&&(++this.valid,this._ops.forEach((n=>n.add(this,t,e)))):++this.missing}function vu(t,e){null!=t&&""!==t?t==t&&(--this.valid,this._ops.forEach((n=>n.rem(this,t,e)))):--this.missing}function _u(t){return this._out.forEach((e=>t[e.out]=e.value(this))),t}function xu(t,e){const n=e||f,r=function(t){const e={};t.forEach((t=>e[t.name]=t));const n=t=>{t.req&&t.req.forEach((t=>{e[t]||n(e[t]=hu[t]())}))};return t.forEach(n),Object.values(e).sort(gu)}(t),i=t.slice().sort(gu);function o(t){this._ops=r,this._out=i,this.cell=t,this.init()}return o.prototype.init=mu,o.prototype.add=yu,o.prototype.rem=vu,o.prototype.set=_u,o.prototype.get=n,o.fields=t.map((t=>t.out)),o}function bu(t){this._key=t?l(t):Oo,this.reset()}du.forEach((t=>{hu[t]=function(t,e){return n=>K({name:t,out:n||t},fu,e)}(t,hu[t])}));const wu=bu.prototype;function ku(t){pa.call(this,null,t),this._adds=[],this._mods=[],this._alen=0,this._mlen=0,this._drop=!0,this._cross=!1,this._dims=[],this._dnames=[],this._measures=[],this._countOnly=!1,this._counts=null,this._prev=null,this._inputs=null,this._outputs=null}wu.reset=function(){this._add=[],this._rem=[],this._ext=null,this._get=null,this._q=null},wu.add=function(t){this._add.push(t)},wu.rem=function(t){this._rem.push(t)},wu.values=function(){if(this._get=null,0===this._rem.length)return this._add;const t=this._add,e=this._rem,n=this._key,r=t.length,i=e.length,o=Array(r-i),a={};let u,s,l;for(u=0;u=0;)r=t(e[i])+"",rt(n,r)||(n[r]=1,++o);return o},wu.extent=function(t){if(this._get!==t||!this._ext){const e=this.values(),n=et(e,t);this._ext=[e[n[0]],e[n[1]]],this._get=t}return this._ext},wu.argmin=function(t){return this.extent(t)[0]||{}},wu.argmax=function(t){return this.extent(t)[1]||{}},wu.min=function(t){const e=this.extent(t)[0];return null!=e?t(e):void 0},wu.max=function(t){const e=this.extent(t)[1];return null!=e?t(e):void 0},wu.quartile=function(t){return this._get===t&&this._q||(this._q=xa(this.values(),t),this._get=t),this._q},wu.q1=function(t){return this.quartile(t)[0]},wu.q2=function(t){return this.quartile(t)[1]},wu.q3=function(t){return this.quartile(t)[2]},wu.ci=function(t){return this._get===t&&this._ci||(this._ci=ka(this.values(),1e3,.05,t),this._get=t),this._ci},wu.ci0=function(t){return this.ci(t)[0]},wu.ci1=function(t){return this.ci(t)[1]},ku.Definition={type:"Aggregate",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"ops",type:"enum",array:!0,values:du},{name:"fields",type:"field",null:!0,array:!0},{name:"as",type:"string",null:!0,array:!0},{name:"drop",type:"boolean",default:!0},{name:"cross",type:"boolean",default:!1},{name:"key",type:"field"}]},ut(ku,pa,{transform(t,e){const n=this,r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=t.modified();return n.stamp=r.stamp,n.value&&(i||e.modified(n._inputs,!0))?(n._prev=n.value,n.value=i?n.init(t):{},e.visit(e.SOURCE,(t=>n.add(t)))):(n.value=n.value||n.init(t),e.visit(e.REM,(t=>n.rem(t))),e.visit(e.ADD,(t=>n.add(t)))),r.modifies(n._outputs),n._drop=!1!==t.drop,t.cross&&n._dims.length>1&&(n._drop=!1,n.cross()),e.clean()&&n._drop&&r.clean(!0).runAfter((()=>this.clean())),n.changes(r)},cross(){const t=this,e=t.value,n=t._dnames,r=n.map((()=>({}))),i=n.length;function o(t){let e,o,a,u;for(e in t)for(a=t[e].tuple,o=0;o{const e=n(t);return a(t),i.push(e),e})),this.cellkey=t.key?t.key:su(this._dims),this._countOnly=!0,this._counts=[],this._measures=[];const s=t.fields||[null],l=t.ops||["count"],c=t.as||[],f=s.length,h={};let d,p,g,m,y,v;for(f!==l.length&&u("Unmatched number of fields and aggregate ops."),v=0;vxu(t,t.field))),{}},cellkey:su(),cell(t,e){let n=this.value[t];return n?0===n.num&&this._drop&&n.stampo.push(t),remove:t=>a[r(t)]=++u,size:()=>i.length,data:(t,e)=>(u&&(i=i.filter((t=>!a[r(t)])),a={},u=0),e&&t&&i.sort(t),o.length&&(i=t?vt(t,i,o.sort(t)):i.concat(o),o=[]),i)}}function Eu(t){pa.call(this,[],t)}function Du(t){Go.call(this,null,Cu,t)}function Cu(t){return this.value&&!t.modified()?this.value:Y(t.fields,t.orders)}function Fu(t){pa.call(this,null,t)}function Su(t){pa.call(this,null,t)}Mu.Definition={type:"Bin",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"interval",type:"boolean",default:!0},{name:"anchor",type:"number"},{name:"maxbins",type:"number",default:20},{name:"base",type:"number",default:10},{name:"divide",type:"number",array:!0,default:[5,2]},{name:"extent",type:"number",array:!0,length:2,required:!0},{name:"span",type:"number"},{name:"step",type:"number"},{name:"steps",type:"number",array:!0},{name:"minstep",type:"number",default:0},{name:"nice",type:"boolean",default:!0},{name:"name",type:"string"},{name:"as",type:"string",array:!0,length:2,default:["bin0","bin1"]}]},ut(Mu,pa,{transform(t,e){const n=!1!==t.interval,i=this._bins(t),o=i.start,a=i.step,u=t.as||["bin0","bin1"],s=u[0],l=u[1];let c;return c=t.modified()?(e=e.reflow(!0)).SOURCE:e.modified(r(t.field))?e.ADD_MOD:e.ADD,e.visit(c,n?t=>{const e=i(t);t[s]=e,t[l]=null==e?null:o+a*(1+(e-o)/a)}:t=>t[s]=i(t)),e.modifies(n?u:s)},_bins(t){if(this.value&&!t.modified())return this.value;const i=t.field,o=wa(t),a=o.step;let u,s,l=o.start,c=l+Math.ceil((o.stop-l)/a)*a;null!=(u=t.anchor)&&(s=u-(l+a*Math.floor((u-l)/a)),l+=s,c+=s);const f=function(t){let e=A(i(t));return null==e?null:ec?1/0:(e=Math.max(l,Math.min(e,c-a)),l+a*Math.floor(1e-14+(e-l)/a))};return f.start=l,f.stop=o.stop,f.step=a,this.value=e(f,r(i),t.name||"bin_"+n(i))}}),Eu.Definition={type:"Collect",metadata:{source:!0},params:[{name:"sort",type:"compare"}]},ut(Eu,pa,{transform(t,e){const n=e.fork(e.ALL),r=Au(Oo,this.value,n.materialize(n.ADD).add),i=t.sort,o=e.changed()||i&&(t.modified("sort")||e.modified(i.fields));return n.visit(n.REM,r.remove),this.modified(o),this.value=n.source=r.data(jo(i),o),e.source&&e.source.root&&(this.value.root=e.source.root),n}}),ut(Du,Go),Fu.Definition={type:"CountPattern",metadata:{generates:!0,changes:!0},params:[{name:"field",type:"field",required:!0},{name:"case",type:"enum",values:["upper","lower","mixed"],default:"mixed"},{name:"pattern",type:"string",default:'[\\w"]+'},{name:"stopwords",type:"string",default:""},{name:"as",type:"string",array:!0,length:2,default:["text","count"]}]},ut(Fu,pa,{transform(t,e){const n=e=>n=>{for(var r,i=function(t,e,n){switch(e){case"upper":t=t.toUpperCase();break;case"lower":t=t.toLowerCase()}return t.match(n)}(u(n),t.case,o)||[],s=0,l=i.length;si[t]=1+(i[t]||0))),c=n((t=>i[t]-=1));return r?e.visit(e.SOURCE,l):(e.visit(e.ADD,l),e.visit(e.REM,c)),this._finish(e,s)},_parameterCheck(t,e){let n=!1;return!t.modified("stopwords")&&this._stop||(this._stop=new RegExp("^"+(t.stopwords||"")+"$","i"),n=!0),!t.modified("pattern")&&this._match||(this._match=new RegExp(t.pattern||"[\\w']+","g"),n=!0),(t.modified("field")||e.modified(t.field.fields))&&(n=!0),n&&(this._counts={}),n},_finish(t,e){const n=this._counts,r=this._tuples||(this._tuples={}),i=e[0],o=e[1],a=t.fork(t.NO_SOURCE|t.NO_FIELDS);let u,s,l;for(u in n)s=r[u],l=n[u]||0,!s&&l?(r[u]=s=Lo({}),s[i]=u,s[o]=l,a.add.push(s)):0===l?(s&&a.rem.push(s),n[u]=null,r[u]=null):s[o]!==l&&(s[o]=l,a.mod.push(s));return a.modifies(e)}}),Su.Definition={type:"Cross",metadata:{generates:!0},params:[{name:"filter",type:"expr"},{name:"as",type:"string",array:!0,length:2,default:["a","b"]}]},ut(Su,pa,{transform(t,e){const n=e.fork(e.NO_SOURCE),r=t.as||["a","b"],i=r[0],o=r[1],a=!this.value||e.changed(e.ADD_REM)||t.modified("as")||t.modified("filter");let u=this.value;return a?(u&&(n.rem=u),u=e.materialize(e.SOURCE).source,n.add=this.value=function(t,e,n,r){for(var i,o,a=[],u={},s=t.length,l=0;lzu(t,e)))):typeof r[n]===Tu&&r[n](t[n]);return r}function Nu(t){pa.call(this,null,t)}const Ou=[{key:{function:"normal"},params:[{name:"mean",type:"number",default:0},{name:"stdev",type:"number",default:1}]},{key:{function:"lognormal"},params:[{name:"mean",type:"number",default:0},{name:"stdev",type:"number",default:1}]},{key:{function:"uniform"},params:[{name:"min",type:"number",default:0},{name:"max",type:"number",default:1}]},{key:{function:"kde"},params:[{name:"field",type:"field",required:!0},{name:"from",type:"data"},{name:"bandwidth",type:"number",default:0}]}],Ru={key:{function:"mixture"},params:[{name:"distributions",type:"param",array:!0,params:Ou},{name:"weights",type:"number",array:!0}]};function Lu(t,e){return t?t.map(((t,r)=>e[r]||n(t))):null}function Uu(t,e,n){const r=[],i=t=>t(s);let o,a,u,s,l,c;if(null==e)r.push(t.map(n));else for(o={},a=0,u=t.length;at.materialize(t.SOURCE).source}(e)),i=t.steps||t.minsteps||25,o=t.steps||t.maxsteps||200;let a=t.method||"pdf";"pdf"!==a&&"cdf"!==a&&u("Invalid density method: "+a),t.extent||r.data||u("Missing density extent parameter."),a=r[a];const s=t.as||["value","density"],l=au(a,t.extent||tt(r.data()),i,o).map((t=>{const e={};return e[s[0]]=t[0],e[s[1]]=t[1],Lo(e)}));this.value&&(n.rem=this.value),this.value=n.add=n.source=l}return n}});function qu(t){pa.call(this,null,t)}qu.Definition={type:"DotBin",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"groupby",type:"field",array:!0},{name:"step",type:"number"},{name:"smooth",type:"boolean",default:!1},{name:"as",type:"string",default:"bin"}]};function Pu(t){Go.call(this,null,ju,t),this.modified(!0)}function ju(t){const i=t.expr;return this.value&&!t.modified("expr")?this.value:e((e=>i(e,t)),r(i),n(i))}function Iu(t){pa.call(this,[void 0,void 0],t)}function $u(t,e){Go.call(this,t),this.parent=e,this.count=0}function Wu(t){pa.call(this,{},t),this._keys=ot();const e=this._targets=[];e.active=0,e.forEach=t=>{for(let n=0,r=e.active;nl(t))):l(t.name,t.as)}function Vu(t){pa.call(this,ot(),t)}function Gu(t){pa.call(this,[],t)}function Xu(t){pa.call(this,[],t)}function Ju(t){pa.call(this,null,t)}function Zu(t){pa.call(this,[],t)}ut(qu,pa,{transform(t,e){if(this.value&&!t.modified()&&!e.changed())return e;const n=e.materialize(e.SOURCE).source,r=Uu(e.source,t.groupby,f),i=t.smooth||!1,o=t.field,a=t.step||((t,e)=>bt(tt(t,e))/30)(n,o),u=jo(((t,e)=>o(t)-o(e))),s=t.as||"bin",l=r.length;let c,h=1/0,d=-1/0,p=0;for(;pd&&(d=e),t[++c][s]=e}return this.value={start:h,stop:d,step:a},e.reflow(!0).modifies(s)}}),ut(Pu,Go),Iu.Definition={type:"Extent",metadata:{},params:[{name:"field",type:"field",required:!0}]},ut(Iu,pa,{transform(t,e){const r=this.value,i=t.field,o=e.changed()||e.modified(i.fields)||t.modified("field");let a=r[0],u=r[1];if((o||null==a)&&(a=1/0,u=-1/0),e.visit(o?e.SOURCE:e.ADD,(t=>{const e=A(i(t));null!=e&&(eu&&(u=e))})),!Number.isFinite(a)||!Number.isFinite(u)){let t=n(i);t&&(t=' for field "'.concat(t,'"')),e.dataflow.warn("Infinite extent".concat(t,": [").concat(a,", ").concat(u,"]")),a=u=void 0}this.value=[a,u]}}),ut($u,Go,{connect(t){return this.detachSubflow=t.detachSubflow,this.targets().add(t),t.source=this},add(t){this.count+=1,this.value.add.push(t)},rem(t){this.count-=1,this.value.rem.push(t)},mod(t){this.value.mod.push(t)},init(t){this.value.init(t,t.NO_SOURCE)},evaluate(){return this.value}}),ut(Wu,pa,{activate(t){this._targets[this._targets.active++]=t},subflow(t,e,n,r){const i=this.value;let o,a,u=rt(i,t)&&i[t];return u?u.value.stampthis.subflow(t,i,e);return this._group=t.group||{},this.initTargets(),e.visit(e.REM,(t=>{const e=Oo(t),n=o.get(e);void 0!==n&&(o.delete(e),u(n).rem(t))})),e.visit(e.ADD,(t=>{const e=r(t);o.set(Oo(t),e),u(e).add(t)})),a||e.modified(r.fields)?e.visit(e.MOD,(t=>{const e=Oo(t),n=o.get(e),i=r(t);n===i?u(i).mod(t):(o.set(e,i),u(n).rem(t),u(i).add(t))})):e.changed(e.MOD)&&e.visit(e.MOD,(t=>{u(o.get(Oo(t))).mod(t)})),a&&e.visit(e.REFLOW,(t=>{const e=Oo(t),n=o.get(e),i=r(t);n!==i&&(o.set(e,i),u(n).rem(t),u(i).add(t))})),e.clean()?n.runAfter((()=>{this.clean(),o.clean()})):o.empty>n.cleanThreshold&&n.runAfter(o.clean),e}}),ut(Hu,Go),Vu.Definition={type:"Filter",metadata:{changes:!0},params:[{name:"expr",type:"expr",required:!0}]},ut(Vu,pa,{transform(t,e){const n=e.dataflow,r=this.value,i=e.fork(),o=i.add,a=i.rem,u=i.mod,s=t.expr;let l=!0;function c(e){const n=Oo(e),i=s(e,t),c=r.get(n);i&&c?(r.delete(n),o.push(e)):i||c?l&&i&&!c&&u.push(e):(r.set(n,1),a.push(e))}return e.visit(e.REM,(t=>{const e=Oo(t);r.has(e)?r.delete(e):a.push(t)})),e.visit(e.ADD,(e=>{s(e,t)?o.push(e):r.set(Oo(e),1)})),e.visit(e.MOD,c),t.modified()&&(l=!1,e.visit(e.REFLOW,c)),r.empty>n.cleanThreshold&&n.runAfter(r.clean),i}}),Gu.Definition={type:"Flatten",metadata:{generates:!0},params:[{name:"fields",type:"field",array:!0,required:!0},{name:"index",type:"string"},{name:"as",type:"string",array:!0}]},ut(Gu,pa,{transform(t,e){const n=e.fork(e.NO_SOURCE),r=t.fields,i=Lu(r,t.as||[]),o=t.index||null,a=i.length;return n.rem=this.value,e.visit(e.SOURCE,(t=>{const e=r.map((e=>e(t))),u=e.reduce(((t,e)=>Math.max(t,e.length)),0);let s,l,c,f=0;for(;f{for(let e,n=0;ne[r]=n(e,t)))}}),ut(Zu,pa,{transform(t,e){const n=e.fork(e.ALL),r=t.generator;let i,o,a,u=this.value,s=t.size-u.length;if(s>0){for(i=[];--s>=0;)i.push(a=Lo(r(t))),u.push(a);n.add=n.add.length?n.materialize(n.ADD).add.concat(i):i}else o=u.slice(0,-s),n.rem=n.rem.length?n.materialize(n.REM).rem.concat(o):o,u=u.slice(-s);return n.source=this.value=u,n}});const Qu={value:"value",median:Ne,mean:function(t,e){let n=0,r=0;if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(++n,r+=e);else{let i=-1;for(let o of t)null!=(o=e(o,++i,t))&&(o=+o)>=o&&(++n,r+=o)}if(n)return r/n},min:Fe,max:Ce},Ku=[];function ts(t){pa.call(this,[],t)}function es(t){ku.call(this,t)}function ns(t){pa.call(this,null,t)}function rs(t){Go.call(this,null,is,t)}function is(t){return this.value&&!t.modified()?this.value:gt(t.fields,t.flat)}function os(t){pa.call(this,[],t),this._pending=null}function as(t,e,n){n.forEach(Lo);const r=e.fork(e.NO_FIELDS&e.NO_SOURCE);return r.rem=t.value,t.value=r.source=r.add=n,t._pending=null,r.rem.length&&r.clean(!0),r}function us(t){pa.call(this,{},t)}function ss(t){Go.call(this,null,ls,t)}function ls(t){if(this.value&&!t.modified())return this.value;const e=t.extents,n=e.length;let r,i,o=1/0,a=-1/0;for(r=0;ra&&(a=i[1]);return[o,a]}function cs(t){Go.call(this,null,fs,t)}function fs(t){return this.value&&!t.modified()?this.value:t.values.reduce(((t,e)=>t.concat(e)),[])}function hs(t){pa.call(this,null,t)}function ds(t){ku.call(this,t)}function ps(t){Wu.call(this,t)}function gs(t){pa.call(this,null,t)}function ms(t){pa.call(this,null,t)}function ys(t){pa.call(this,null,t)}ts.Definition={type:"Impute",metadata:{changes:!0},params:[{name:"field",type:"field",required:!0},{name:"key",type:"field",required:!0},{name:"keyvals",array:!0},{name:"groupby",type:"field",array:!0},{name:"method",type:"enum",default:"value",values:["value","mean","median","max","min"]},{name:"value",default:0}]},ut(ts,pa,{transform(t,e){var r,i,o,a,s,l,c,f,h,d,p=e.fork(e.ALL),g=function(t){var e,n=t.method||Qu.value;if(null!=Qu[n])return n===Qu.value?(e=void 0!==t.value?t.value:0,()=>e):Qu[n];u("Unrecognized imputation method: "+n)}(t),m=function(t){const e=t.field;return t=>t?e(t):NaN}(t),y=n(t.field),v=n(t.key),_=(t.groupby||[]).map(n),x=function(t,e,n,r){var i,o,a,u,s,l,c,f,h=t=>t(f),d=[],p=r?r.slice():[],g={},m={};for(p.forEach(((t,e)=>g[t]=e+1)),u=0,c=t.length;un.add(t)))):(i=n.value=n.value||this.init(t),e.visit(e.REM,(t=>n.rem(t))),e.visit(e.ADD,(t=>n.add(t)))),n.changes(),e.visit(e.SOURCE,(t=>{K(t,i[n.cellkey(t)].tuple)})),e.reflow(r).modifies(this._outputs)},changes(){const t=this._adds,e=this._mods;let n,r;for(n=0,r=this._alen;n{const n=za(e,s)[l],r=t.counts?e.length:1;au(n,h||tt(e),d,p).forEach((t=>{const n={};for(let t=0;t(this._pending=$(t.data),t=>t.touch(this))))}}return n.request(t.url,t.format).then((t=>as(this,e,$(t.data))))}}),us.Definition={type:"Lookup",metadata:{modifies:!0},params:[{name:"index",type:"index",params:[{name:"from",type:"data",required:!0},{name:"key",type:"field",required:!0}]},{name:"values",type:"field",array:!0},{name:"fields",type:"field",array:!0,required:!0},{name:"as",type:"string",array:!0},{name:"default",default:null}]},ut(us,pa,{transform(t,e){const r=t.fields,i=t.index,o=t.values,a=null==t.default?null:t.default,s=t.modified(),l=r.length;let c,f,h,d=s?e.SOURCE:e.ADD,p=e,g=t.as;return o?(f=o.length,l>1&&!g&&u('Multi-field lookup requires explicit "as" parameter.'),g&&g.length!==l*f&&u('The "as" parameter has too few output field names.'),g=g||o.map(n),c=function(t){for(var e,n,u=0,s=0;ue.modified(t.fields))),d|=h?e.MOD:0),e.visit(d,c),p.modifies(g)}}),ut(ss,Go),ut(cs,Go),ut(hs,pa,{transform(t,e){return this.modified(t.modified()),this.value=t,e.fork(e.NO_SOURCE|e.NO_FIELDS)}}),ds.Definition={type:"Pivot",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"field",type:"field",required:!0},{name:"value",type:"field",required:!0},{name:"op",type:"enum",values:du,default:"sum"},{name:"limit",type:"number",default:0},{name:"key",type:"field"}]},ut(ds,ku,{_transform:ku.prototype.transform,transform(t,n){return this._transform(function(t,n){const i=t.field,o=t.value,a=("count"===t.op?"__count__":t.op)||"sum",u=r(i).concat(r(o)),s=function(t,e,n){const r={},i=[];return n.visit(n.SOURCE,(e=>{const n=t(e);r[n]||(r[n]=1,i.push(n))})),i.sort(V),e?i.slice(0,e):i}(i,t.limit||0,n);n.changed()&&t.set("__pivot__",null,null,!0);return{key:t.key,groupby:t.groupby,ops:s.map((()=>a)),fields:s.map((t=>function(t,n,r,i){return e((e=>n(e)===t?r(e):NaN),i,t+"")}(t,i,o,u))),as:s.map((t=>t+"")),modified:t.modified.bind(t)}}(t,n),n)}}),ut(ps,Wu,{transform(t,e){const n=t.subflow,i=t.field,o=t=>this.subflow(Oo(t),n,e,t);return(t.modified("field")||i&&e.modified(r(i)))&&u("PreFacet does not support field modification."),this.initTargets(),i?(e.visit(e.MOD,(t=>{const e=o(t);i(t).forEach((t=>e.mod(t)))})),e.visit(e.ADD,(t=>{const e=o(t);i(t).forEach((t=>e.add(Lo(t))))})),e.visit(e.REM,(t=>{const e=o(t);i(t).forEach((t=>e.rem(t)))}))):(e.visit(e.MOD,(t=>o(t).mod(t))),e.visit(e.ADD,(t=>o(t).add(t))),e.visit(e.REM,(t=>o(t).rem(t)))),e.clean()&&e.runAfter((()=>this.clean())),e}}),gs.Definition={type:"Project",metadata:{generates:!0,changes:!0},params:[{name:"fields",type:"field",array:!0},{name:"as",type:"string",null:!0,array:!0}]},ut(gs,pa,{transform(t,e){const n=e.fork(e.NO_SOURCE),r=t.fields,i=Lu(t.fields,t.as||[]),o=r?(t,e)=>function(t,e,n,r){for(let i=0,o=n.length;i{const e=Oo(t);n.rem.push(a[e]),a[e]=null})),e.visit(e.ADD,(t=>{const e=o(t,Lo({}));a[Oo(t)]=e,n.add.push(e)})),e.visit(e.MOD,(t=>{n.mod.push(o(t,a[Oo(t)]))})),n}}),ut(ms,pa,{transform(t,e){return this.value=t.value,t.modified("value")?e.fork(e.NO_SOURCE|e.NO_FIELDS):e.StopPropagation}}),ys.Definition={type:"Quantile",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"field",type:"field",required:!0},{name:"probs",type:"number",array:!0},{name:"step",type:"number",default:.01},{name:"as",type:"string",array:!0,default:["prob","value"]}]};function vs(t){pa.call(this,null,t)}function _s(t){pa.call(this,[],t),this.count=0}function xs(t){pa.call(this,null,t)}function bs(t){pa.call(this,null,t),this.modified(!0)}function ws(t){pa.call(this,null,t)}ut(ys,pa,{transform(t,e){const r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=t.as||["prob","value"];if(this.value&&!t.modified()&&!e.changed())return r.source=this.value,r;const o=Uu(e.materialize(e.SOURCE).source,t.groupby,t.field),a=(t.groupby||[]).map(n),u=[],s=t.step||.01,l=t.probs||Re(s/2,1-1e-14,s),c=l.length;return o.forEach((t=>{const e=_a(t,l);for(let n=0;n{const e=Oo(t);n.rem.push(r[e]),r[e]=null})),e.visit(e.ADD,(t=>{const e=Uo(t);r[Oo(t)]=e,n.add.push(e)})),e.visit(e.MOD,(t=>{const e=r[Oo(t)];for(const r in t)e[r]=t[r],n.modifies(r);n.mod.push(e)}))),n}}),_s.Definition={type:"Sample",metadata:{},params:[{name:"size",type:"number",default:1e3}]},ut(_s,pa,{transform(e,n){const r=n.fork(n.NO_SOURCE),i=e.modified("size"),o=e.size,a=this.value.reduce(((t,e)=>(t[Oo(e)]=1,t)),{});let u=this.value,s=this.count,l=0;function c(e){let n,i;u.length=l&&(n=u[i],a[Oo(n)]&&r.rem.push(n),u[i]=e)),++s}if(n.rem.length&&(n.visit(n.REM,(t=>{const e=Oo(t);a[e]&&(a[e]=-1,r.rem.push(t)),--s})),u=u.filter((t=>-1!==a[Oo(t)]))),(n.rem.length||i)&&u.length{a[Oo(t)]||c(t)})),l=-1),i&&u.length>o){const t=u.length-o;for(let e=0;e{a[Oo(t)]&&r.mod.push(t)})),n.add.length&&n.visit(n.ADD,c),(n.add.length||l<0)&&(r.add=u.filter((t=>!a[Oo(t)]))),this.count=s,this.value=r.source=u,r}}),xs.Definition={type:"Sequence",metadata:{generates:!0,changes:!0},params:[{name:"start",type:"number",required:!0},{name:"stop",type:"number",required:!0},{name:"step",type:"number",default:1},{name:"as",type:"string",default:"data"}]},ut(xs,pa,{transform(t,e){if(this.value&&!t.modified())return;const n=e.materialize().fork(e.MOD),r=t.as||"data";return n.rem=this.value?e.rem.concat(this.value):e.rem,this.value=Re(t.start,t.stop,t.step||1).map((t=>{const e={};return e[r]=t,Lo(e)})),n.add=e.add.concat(this.value),n}}),ut(bs,pa,{transform(t,e){return this.value=e.source,e.changed()?e.fork(e.NO_SOURCE|e.NO_FIELDS):e.StopPropagation}});const ks=["unit0","unit1"];function Ms(t){pa.call(this,ot(),t)}function As(t){pa.call(this,null,t)}ws.Definition={type:"TimeUnit",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"interval",type:"boolean",default:!0},{name:"units",type:"enum",values:In,array:!0},{name:"step",type:"number",default:1},{name:"maxbins",type:"number",default:40},{name:"extent",type:"date",array:!0},{name:"timezone",type:"enum",default:"local",values:["local","utc"]},{name:"as",type:"string",array:!0,length:2,default:ks}]},ut(ws,pa,{transform(t,e){const n=t.field,i=!1!==t.interval,o="utc"===t.timezone,a=this._floor(t,e),u=(o?vr:yr)(a.unit).offset,s=t.as||ks,l=s[0],c=s[1],f=a.step;let h=a.start||1/0,d=a.stop||-1/0,p=e.ADD;return(t.modified()||e.modified(r(n)))&&(p=(e=e.reflow(!0)).SOURCE,h=1/0,d=-1/0),e.visit(p,(t=>{const e=n(t);let r,o;null==e?(t[l]=null,i&&(t[c]=null)):(t[l]=r=o=a(e),i&&(t[c]=o=u(r,f)),rd&&(d=o))})),a.start=h,a.stop=d,e.modifies(i?s:l)},_floor(t,e){const n="utc"===t.timezone,{units:r,step:i}=t.units?{units:t.units,step:t.step||1}:qr({extent:t.extent||tt(e.materialize(e.SOURCE).source,t.field),maxbins:t.maxbins}),o=Wn(r),a=this.value||{},u=(n?pr:fr)(o,i);return u.unit=M(o),u.units=o,u.step=i,u.start=a.start,u.stop=a.stop,this.value=u}}),ut(Ms,pa,{transform(t,e){const n=e.dataflow,r=t.field,i=this.value,o=t=>i.set(r(t),t);let a=!0;return t.modified("field")||e.modified(r.fields)?(i.clear(),e.visit(e.SOURCE,o)):e.changed()?(e.visit(e.REM,(t=>i.delete(r(t)))),e.visit(e.ADD,o)):a=!1,this.modified(a),i.empty>n.cleanThreshold&&n.runAfter(i.clean),e.fork()}}),ut(As,pa,{transform(t,e){(!this.value||t.modified("field")||t.modified("sort")||e.changed()||t.sort&&e.modified(t.sort.fields))&&(this.value=(t.sort?e.source.slice().sort(jo(t.sort)):e.source).map(t.field))}});const Es={row_number:function(){return{next:t=>t.index+1}},rank:function(){let t;return{init:()=>t=1,next:e=>{const n=e.index,r=e.data;return n&&e.compare(r[n-1],r[n])?t=n+1:t}}},dense_rank:function(){let t;return{init:()=>t=1,next:e=>{const n=e.index,r=e.data;return n&&e.compare(r[n-1],r[n])?++t:t}}},percent_rank:function(){const t=Es.rank(),e=t.next;return{init:t.init,next:t=>(e(t)-1)/(t.data.length-1)}},cume_dist:function(){let t;return{init:()=>t=0,next:e=>{const n=e.data,r=e.compare;let i=e.index;if(t0||u("ntile num must be greater than zero.");const n=Es.cume_dist(),r=n.next;return{init:n.init,next:t=>Math.ceil(e*r(t))}},lag:function(t,e){return e=+e||1,{next:n=>{const r=n.index-e;return r>=0?t(n.data[r]):null}}},lead:function(t,e){return e=+e||1,{next:n=>{const r=n.index+e,i=n.data;return rt(e.data[e.i0])}},last_value:function(t){return{next:e=>t(e.data[e.i1-1])}},nth_value:function(t,e){return(e=+e)>0||u("nth_value nth must be greater than zero."),{next:n=>{const r=n.i0+(e-1);return re=null,next:n=>{const r=t(n.data[n.index]);return null!=r?e=r:e}}},next_value:function(t){let e,n;return{init:()=>(e=null,n=-1),next:r=>{const i=r.data;return r.index<=n?e:(n=function(t,e,n){for(let r=e.length;nc[t]=1))}m(t.sort),e.forEach(((t,e)=>{const r=i[e],c=n(r),y=lu(t,c,a[e]);if(m(r),s.push(y),rt(Es,t))l.push(function(t,e,n,r){const i=Es[t](e,n);return{init:i.init||h,update:function(t,e){e[r]=i.next(t)}}}(t,i[e],o[e],y));else{if(null==r&&"count"!==t&&u("Null aggregate field specified."),"count"===t)return void d.push(y);g=!1;let e=f[c];e||(e=f[c]=[],e.field=r,p.push(e)),e.push(pu(t,y))}})),(d.length||p.length)&&(this.cell=function(t,e,n){t=t.map((t=>xu(t,t.field)));const r={num:0,agg:null,store:!1,count:e};if(!n)for(var i=t.length,o=r.agg=Array(i),a=0;a0&&!i(o[n],o[n-1])&&(t.i0=e.left(o,o[n])),rt.init())),this.cell&&this.cell.init()},Fs.update=function(t,e){const n=this.cell,r=this.windows,i=t.data,o=r&&r.length;let a;if(n){for(a=t.p0;athis.group(i(t));let a=this.state;a&&!n||(a=this.state=new Cs(t)),n||e.modified(a.inputs)?(this.value={},e.visit(e.SOURCE,(t=>o(t).add(t)))):(e.visit(e.REM,(t=>o(t).remove(t))),e.visit(e.ADD,(t=>o(t).add(t))));for(let e=0,n=this._mlen;eLs)if(Math.abs(c*u-s*l)>Ls&&i){var h=n-o,d=r-a,p=u*u+s*s,g=h*h+d*d,m=Math.sqrt(p),y=Math.sqrt(f),v=i*Math.tan((Os-Math.acos((p+f-g)/(2*m*y)))/2),_=v/y,x=v/m;Math.abs(_-1)>Ls&&(this._+="L"+(t+_*l)+","+(e+_*c)),this._+="A"+i+","+i+",0,0,"+ +(c*h>l*d)+","+(this._x1=t+x*u)+","+(this._y1=e+x*s)}else this._+="L"+(this._x1=t)+","+(this._y1=e);else;},arc:function(t,e,n,r,i,o){t=+t,e=+e,o=!!o;var a=(n=+n)*Math.cos(r),u=n*Math.sin(r),s=t+a,l=e+u,c=1^o,f=o?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+s+","+l:(Math.abs(this._x1-s)>Ls||Math.abs(this._y1-l)>Ls)&&(this._+="L"+s+","+l),n&&(f<0&&(f=f%Rs+Rs),f>Us?this._+="A"+n+","+n+",0,1,"+c+","+(t-a)+","+(e-u)+"A"+n+","+n+",0,1,"+c+","+(this._x1=s)+","+(this._y1=l):f>Ls&&(this._+="A"+n+","+n+",0,"+ +(f>=Os)+","+c+","+(this._x1=t+n*Math.cos(i))+","+(this._y1=e+n*Math.sin(i))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var Is=Math.abs,$s=Math.atan2,Ws=Math.cos,Hs=Math.max,Ys=Math.min,Vs=Math.sin,Gs=Math.sqrt,Xs=1e-12,Js=Math.PI,Zs=Js/2,Qs=2*Js;function Ks(t){return t>1?0:t<-1?Js:Math.acos(t)}function tl(t){return t>=1?Zs:t<=-1?-Zs:Math.asin(t)}function el(t){return t.innerRadius}function nl(t){return t.outerRadius}function rl(t){return t.startAngle}function il(t){return t.endAngle}function ol(t){return t&&t.padAngle}function al(t,e,n,r,i,o,a,u){var s=n-t,l=r-e,c=a-i,f=u-o,h=f*s-c*l;if(!(h*hS*S+B*B&&(M=E,A=D),{cx:M,cy:A,x01:-c,y01:-f,x11:M*(i/b-1),y11:A*(i/b-1)}}function sl(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function ll(t){this._context=t}function cl(t){return new ll(t)}function fl(t){return t[0]}function hl(t){return t[1]}function dl(t,e){var n=js(!0),r=null,i=cl,o=null;function a(a){var u,s,l,c=(a=sl(a)).length,f=!1;for(null==r&&(o=i(l=Ps())),u=0;u<=c;++u)!(u=c;--f)u.point(m[f],y[f]);u.lineEnd(),u.areaEnd()}g&&(m[l]=+t(h,l,s),y[l]=+e(h,l,s),u.point(r?+r(h,l,s):m[l],n?+n(h,l,s):y[l]))}if(d)return u=null,d+""||null}function l(){return dl().defined(i).curve(a).context(o)}return t="function"==typeof t?t:void 0===t?fl:js(+t),e="function"==typeof e?e:js(void 0===e?0:+e),n="function"==typeof n?n:void 0===n?hl:js(+n),s.x=function(e){return arguments.length?(t="function"==typeof e?e:js(+e),r=null,s):t},s.x0=function(e){return arguments.length?(t="function"==typeof e?e:js(+e),s):t},s.x1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:js(+t),s):r},s.y=function(t){return arguments.length?(e="function"==typeof t?t:js(+t),n=null,s):e},s.y0=function(t){return arguments.length?(e="function"==typeof t?t:js(+t),s):e},s.y1=function(t){return arguments.length?(n=null==t?null:"function"==typeof t?t:js(+t),s):n},s.lineX0=s.lineY0=function(){return l().x(t).y(e)},s.lineY1=function(){return l().x(t).y(n)},s.lineX1=function(){return l().x(r).y(e)},s.defined=function(t){return arguments.length?(i="function"==typeof t?t:js(!!t),s):i},s.curve=function(t){return arguments.length?(a=t,null!=o&&(u=a(o)),s):a},s.context=function(t){return arguments.length?(null==t?o=u=null:u=a(o=t),s):o},s}ll.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}};var gl={draw:function(t,e){var n=Math.sqrt(e/Js);t.moveTo(n,0),t.arc(0,0,n,0,Qs)}};function ml(){}function yl(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function vl(t){this._context=t}function _l(t){this._context=t}function xl(t){this._context=t}function bl(t,e){this._basis=new vl(t),this._beta=e}vl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:yl(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:yl(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},_l.prototype={areaStart:ml,areaEnd:ml,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:yl(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},xl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:yl(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},bl.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var r,i=t[0],o=e[0],a=t[n]-i,u=e[n]-o,s=-1;++s<=n;)r=s/n,this._basis.point(this._beta*t[s]+(1-this._beta)*(i+r*a),this._beta*e[s]+(1-this._beta)*(o+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var wl=function t(e){function n(t){return 1===e?new vl(t):new bl(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function kl(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function Ml(t,e){this._context=t,this._k=(1-e)/6}Ml.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:kl(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:kl(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Al=function t(e){function n(t){return new Ml(t,e)}return n.tension=function(e){return t(+e)},n}(0);function El(t,e){this._context=t,this._k=(1-e)/6}El.prototype={areaStart:ml,areaEnd:ml,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:kl(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Dl=function t(e){function n(t){return new El(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Cl(t,e){this._context=t,this._k=(1-e)/6}Cl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:kl(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Fl=function t(e){function n(t){return new Cl(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Sl(t,e,n){var r=t._x1,i=t._y1,o=t._x2,a=t._y2;if(t._l01_a>Xs){var u=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,s=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*u-t._x0*t._l12_2a+t._x2*t._l01_2a)/s,i=(i*u-t._y0*t._l12_2a+t._y2*t._l01_2a)/s}if(t._l23_a>Xs){var l=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,c=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*l+t._x1*t._l23_2a-e*t._l12_2a)/c,a=(a*l+t._y1*t._l23_2a-n*t._l12_2a)/c}t._context.bezierCurveTo(r,i,o,a,t._x2,t._y2)}function Bl(t,e){this._context=t,this._alpha=e}Bl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Sl(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Tl=function t(e){function n(t){return e?new Bl(t,e):new Ml(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function zl(t,e){this._context=t,this._alpha=e}zl.prototype={areaStart:ml,areaEnd:ml,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Sl(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Nl=function t(e){function n(t){return e?new zl(t,e):new El(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Ol(t,e){this._context=t,this._alpha=e}Ol.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Sl(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Rl=function t(e){function n(t){return e?new Ol(t,e):new Cl(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Ll(t){this._context=t}function Ul(t){return t<0?-1:1}function ql(t,e,n){var r=t._x1-t._x0,i=e-t._x1,o=(t._y1-t._y0)/(r||i<0&&-0),a=(n-t._y1)/(i||r<0&&-0),u=(o*i+a*r)/(r+i);return(Ul(o)+Ul(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(u))||0}function Pl(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function jl(t,e,n){var r=t._x0,i=t._y0,o=t._x1,a=t._y1,u=(o-r)/3;t._context.bezierCurveTo(r+u,i+u*e,o-u,a-u*n,o,a)}function Il(t){this._context=t}function $l(t){this._context=new Wl(t)}function Wl(t){this._context=t}function Hl(t){this._context=t}function Yl(t){var e,n,r=t.length-1,i=new Array(r),o=new Array(r),a=new Array(r);for(i[0]=0,o[0]=2,a[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(a[e]-i[e+1])/o[e];for(o[r-1]=(t[r]+i[r-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};const Xl=()=>"undefined"!=typeof Image?Image:null;function Jl(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}function Zl(t,e){switch(arguments.length){case 0:break;case 1:"function"==typeof t?this.interpolator(t):this.range(t);break;default:this.domain(t),"function"==typeof e?this.interpolator(e):this.range(e)}return this}const Ql=Symbol("implicit");function Kl(){var t=new Map,e=[],n=[],r=Ql;function i(i){var o=i+"",a=t.get(o);if(!a){if(r!==Ql)return r;t.set(o,a=e.push(i))}return n[(a-1)%n.length]}return i.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new Map;for(const r of n){const n=r+"";t.has(n)||t.set(n,e.push(r))}return i},i.range=function(t){return arguments.length?(n=Array.from(t),i):n.slice()},i.unknown=function(t){return arguments.length?(r=t,i):r},i.copy=function(){return Kl(e,n).unknown(r)},Jl.apply(i,arguments),i}function tc(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function ec(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function nc(){}var rc=.7,ic=1/rc,oc="\\s*([+-]?\\d+)\\s*",ac="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",uc="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",sc=/^#([0-9a-f]{3,8})$/,lc=new RegExp("^rgb\\("+[oc,oc,oc]+"\\)$"),cc=new RegExp("^rgb\\("+[uc,uc,uc]+"\\)$"),fc=new RegExp("^rgba\\("+[oc,oc,oc,ac]+"\\)$"),hc=new RegExp("^rgba\\("+[uc,uc,uc,ac]+"\\)$"),dc=new RegExp("^hsl\\("+[ac,uc,uc]+"\\)$"),pc=new RegExp("^hsla\\("+[ac,uc,uc,ac]+"\\)$"),gc={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function mc(){return this.rgb().formatHex()}function yc(){return this.rgb().formatRgb()}function vc(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=sc.exec(t))?(n=e[1].length,e=parseInt(e[1],16),6===n?_c(e):3===n?new kc(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?xc(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?xc(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=lc.exec(t))?new kc(e[1],e[2],e[3],1):(e=cc.exec(t))?new kc(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=fc.exec(t))?xc(e[1],e[2],e[3],e[4]):(e=hc.exec(t))?xc(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=dc.exec(t))?Dc(e[1],e[2]/100,e[3]/100,1):(e=pc.exec(t))?Dc(e[1],e[2]/100,e[3]/100,e[4]):gc.hasOwnProperty(t)?_c(gc[t]):"transparent"===t?new kc(NaN,NaN,NaN,0):null}function _c(t){return new kc(t>>16&255,t>>8&255,255&t,1)}function xc(t,e,n,r){return r<=0&&(t=e=n=NaN),new kc(t,e,n,r)}function bc(t){return t instanceof nc||(t=vc(t)),t?new kc((t=t.rgb()).r,t.g,t.b,t.opacity):new kc}function wc(t,e,n,r){return 1===arguments.length?bc(t):new kc(t,e,n,null==r?1:r)}function kc(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function Mc(){return"#"+Ec(this.r)+Ec(this.g)+Ec(this.b)}function Ac(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function Ec(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function Dc(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Sc(t,e,n,r)}function Cc(t){if(t instanceof Sc)return new Sc(t.h,t.s,t.l,t.opacity);if(t instanceof nc||(t=vc(t)),!t)return new Sc;if(t instanceof Sc)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),o=Math.max(e,n,r),a=NaN,u=o-i,s=(o+i)/2;return u?(a=e===o?(n-r)/u+6*(n0&&s<1?0:a,new Sc(a,u,s,t.opacity)}function Fc(t,e,n,r){return 1===arguments.length?Cc(t):new Sc(t,e,n,null==r?1:r)}function Sc(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function Bc(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}tc(nc,vc,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:mc,formatHex:mc,formatHsl:function(){return Cc(this).formatHsl()},formatRgb:yc,toString:yc}),tc(kc,wc,ec(nc,{brighter:function(t){return t=null==t?ic:Math.pow(ic,t),new kc(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?rc:Math.pow(rc,t),new kc(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Mc,formatHex:Mc,formatRgb:Ac,toString:Ac})),tc(Sc,Fc,ec(nc,{brighter:function(t){return t=null==t?ic:Math.pow(ic,t),new Sc(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?rc:Math.pow(rc,t),new Sc(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new kc(Bc(t>=240?t-240:t+120,i,r),Bc(t,i,r),Bc(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));const Tc=Math.PI/180,zc=180/Math.PI,Nc=.96422,Oc=.82521,Rc=4/29,Lc=6/29,Uc=3*Lc*Lc;function qc(t){if(t instanceof jc)return new jc(t.l,t.a,t.b,t.opacity);if(t instanceof Gc)return Xc(t);t instanceof kc||(t=bc(t));var e,n,r=Hc(t.r),i=Hc(t.g),o=Hc(t.b),a=Ic((.2225045*r+.7168786*i+.0606169*o)/1);return r===i&&i===o?e=n=a:(e=Ic((.4360747*r+.3850649*i+.1430804*o)/Nc),n=Ic((.0139322*r+.0971045*i+.7141733*o)/Oc)),new jc(116*a-16,500*(e-a),200*(a-n),t.opacity)}function Pc(t,e,n,r){return 1===arguments.length?qc(t):new jc(t,e,n,null==r?1:r)}function jc(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function Ic(t){return t>.008856451679035631?Math.pow(t,1/3):t/Uc+Rc}function $c(t){return t>Lc?t*t*t:Uc*(t-Rc)}function Wc(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Hc(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Yc(t){if(t instanceof Gc)return new Gc(t.h,t.c,t.l,t.opacity);if(t instanceof jc||(t=qc(t)),0===t.a&&0===t.b)return new Gc(NaN,0=1?(n=1,e-1):Math.floor(n*e),i=t[r],o=t[r+1],a=r>0?t[r-1]:2*i-o,u=r()=>t;function hf(t,e){return function(n){return t+n*e}}function df(t,e){var n=e-t;return n?hf(t,n>180||n<-180?n-360*Math.round(n/360):n):ff(isNaN(t)?e:t)}function pf(t){return 1==(t=+t)?gf:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):ff(isNaN(e)?n:e)}}function gf(t,e){var n=e-t;return n?hf(t,n):ff(isNaN(t)?e:t)}var mf=function t(e){var n=pf(e);function r(t,e){var r=n((t=wc(t)).r,(e=wc(e)).r),i=n(t.g,e.g),o=n(t.b,e.b),a=gf(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=o(e),t.opacity=a(e),t+""}}return r.gamma=t,r}(1);function yf(t){return function(e){var n,r,i=e.length,o=new Array(i),a=new Array(i),u=new Array(i);for(n=0;no&&(i=e.slice(o,i),u[a]?u[a]+=i:u[++a]=i),(n=n[0])===(r=r[0])?u[a]?u[a]+=r:u[++a]=r:(u[++a]=null,s.push({i:a,x:Mf(n,r)})),o=Df.lastIndex;return o180?e+=360:e-t>180&&(t+=360),o.push({i:n.push(i(n)+"rotate(",null,r)-2,x:Mf(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(o.rotate,a.rotate,u,s),function(t,e,n,o){t!==e?o.push({i:n.push(i(n)+"skewX(",null,r)-2,x:Mf(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(o.skewX,a.skewX,u,s),function(t,e,n,r,o,a){if(t!==n||e!==r){var u=o.push(i(o)+"scale(",null,",",null,")");a.push({i:u-4,x:Mf(t,n)},{i:u-2,x:Mf(e,r)})}else 1===n&&1===r||o.push(i(o)+"scale("+n+","+r+")")}(o.scaleX,o.scaleY,a.scaleX,a.scaleY,u,s),o=a=null,function(t){for(var e,n=-1,r=s.length;++ne&&(n=t,t=e,e=n),function(n){return Math.max(t,Math.min(e,n))}}(a[0],a[t-1])),r=t>2?nh:eh,i=o=null,f}function f(e){return isNaN(e=+e)?n:(i||(i=r(a.map(t),u,s)))(t(l(e)))}return f.invert=function(n){return l(e((o||(o=r(u,a.map(t),Mf)))(n)))},f.domain=function(t){return arguments.length?(a=Array.from(t,Zf),c()):a.slice()},f.range=function(t){return arguments.length?(u=Array.from(t),c()):u.slice()},f.rangeRound=function(t){return u=Array.from(t),s=Sf,c()},f.clamp=function(t){return arguments.length?(l=!!t||Kf,c()):l!==Kf},f.interpolate=function(t){return arguments.length?(s=t,c()):s},f.unknown=function(t){return arguments.length?(n=t,f):n},function(n,r){return t=n,e=r,c()}}function oh(){return ih()(Kf,Kf)}function ah(t,e,n,r){var i,o=De(t,e,n);switch((r=Ie(null==r?",f":r)).type){case"s":var a=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=tn(o,a))||(r.precision=i),Xe(r,a);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=en(o,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=Ke(o))||(r.precision=i-2*("%"===r.type))}return Ge(r)}function uh(t){var e=t.domain;return t.ticks=function(t){var n=e();return Ae(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return ah(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i,o=e(),a=0,u=o.length-1,s=o[a],l=o[u],c=10;for(l0;){if((i=Ee(s,l,n))===r)return o[a]=s,o[u]=l,e(o);if(i>0)s=Math.floor(s/i)*i,l=Math.ceil(l/i)*i;else{if(!(i<0))break;s=Math.ceil(s*i)/i,l=Math.floor(l*i)/i}r=i}return t},t}function sh(t,e){var n,r=0,i=(t=t.slice()).length-1,o=t[r],a=t[i];return a0){for(;h<=d;++h)for(c=1,l=n(h);cs)break;g.push(f)}}else for(;h<=d;++h)for(c=o-1,l=n(h);c>=1;--c)if(!((f=l*c)s)break;g.push(f)}2*g.length0?r:1:0}const Ph="linear",jh="log",Ih="pow",$h="sqrt",Wh="symlog",Hh="time",Yh="utc",Vh="sequential",Gh="diverging",Xh="quantile",Jh="quantize",Zh="threshold",Qh="ordinal",Kh="point",td="band",ed="bin-ordinal",nd="continuous",rd="discrete",id="discretizing",od="interpolating",ad="temporal";function ud(){const t=Kl().unknown(void 0),e=t.domain,n=t.range;let r,i,o=[0,1],a=!1,u=0,s=0,l=.5;function c(){const t=e().length,c=o[1]d+r*t));return n(c?p.reverse():p)}return delete t.unknown,t.domain=function(t){return arguments.length?(e(t),c()):e()},t.range=function(t){return arguments.length?(o=[+t[0],+t[1]],c()):o.slice()},t.rangeRound=function(t){return o=[+t[0],+t[1]],a=!0,c()},t.bandwidth=function(){return i},t.step=function(){return r},t.round=function(t){return arguments.length?(a=!!t,c()):a},t.padding=function(t){return arguments.length?(s=Math.max(0,Math.min(1,t)),u=s,c()):u},t.paddingInner=function(t){return arguments.length?(u=Math.max(0,Math.min(1,t)),c()):u},t.paddingOuter=function(t){return arguments.length?(s=Math.max(0,Math.min(1,t)),c()):s},t.align=function(t){return arguments.length?(l=Math.max(0,Math.min(1,t)),c()):l},t.invertRange=function(t){if(null==t[0]||null==t[1])return;const r=o[1]o[1-r])?void 0:(s=Math.max(0,_e(a,f)-1),l=f===h?s:_e(a,h)-1,f-a[s]>i+1e-10&&++s,r&&(c=s,s=u-l,l=u-c),s>l?void 0:e().slice(s,l+1))},t.invert=function(e){const n=t.invertRange([e,e]);return n?n[0]:n},t.copy=function(){return ud().domain(e()).range(o).round(a).paddingInner(u).paddingOuter(s).align(l)},c()}function sd(t){const e=t.copy;return t.padding=t.paddingOuter,delete t.paddingInner,t.copy=function(){return sd(e())},t}var ld=Array.prototype.map;function cd(t){return ld.call(t,A)}const fd=Array.prototype.slice;const hd={};function dd(t,e,n){const r=function(){const n=e();return n.invertRange||(n.invertRange=n.invert?function(t){return function(e){let n,r=e[0],i=e[1];return i=u&&n[o]<=s&&(l<0&&(l=o),r=o);if(!(l<0))return u=t.invertExtent(n[l]),s=t.invertExtent(n[r]),[void 0===u[0]?u[1]:u[0],void 0===s[1]?s[0]:s[1]]}}(n):void 0),n.type=t,n};return r.metadata=Dt($(n)),r}function pd(t,e,n){return arguments.length>1?(hd[t]=dd(t,e,n),this):gd(t)?hd[t]:void 0}function gd(t){return rt(hd,t)}function md(t,e){const n=hd[t];return n&&n.metadata[e]}function yd(t){return md(t,nd)}function vd(t){return md(t,rd)}function _d(t){return md(t,id)}function xd(t){return md(t,jh)}function bd(t){return md(t,od)}function wd(t){return md(t,Xh)}pd("identity",(function t(e){var n;function r(t){return isNaN(t=+t)?n:t}return r.invert=r,r.domain=r.range=function(t){return arguments.length?(e=Array.from(t,Zf),r):e.slice()},r.unknown=function(t){return arguments.length?(n=t,r):n},r.copy=function(){return t(e).unknown(n)},e=arguments.length?Array.from(e,Zf):[0,1],uh(r)})),pd(Ph,(function t(){var e=oh();return e.copy=function(){return rh(e,t())},Jl.apply(e,arguments),uh(e)}),nd),pd(jh,(function t(){var e=gh(ih()).domain([1,10]);return e.copy=function(){return rh(e,t()).base(e.base())},Jl.apply(e,arguments),e}),[nd,jh]),pd(Ih,kh,nd),pd($h,(function(){return kh.apply(null,arguments).exponent(.5)}),nd),pd(Wh,(function t(){var e=vh(ih());return e.copy=function(){return rh(e,t()).constant(e.constant())},Jl.apply(e,arguments)}),nd),pd(Hh,(function(){return Jl.apply(Th(bn,xn,yn,gn,pn,dn,hn,an,Hr).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}),[nd,ad]),pd(Yh,(function(){return Jl.apply(Th(Sn,Fn,En,Mn,kn,wn,hn,an,Vr).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}),[nd,ad]),pd(Vh,Oh,[nd,od]),pd("".concat(Vh,"-").concat(Ph),Oh,[nd,od]),pd("".concat(Vh,"-").concat(jh),(function t(){var e=gh(zh()).domain([1,10]);return e.copy=function(){return Nh(e,t()).base(e.base())},Zl.apply(e,arguments)}),[nd,od,jh]),pd("".concat(Vh,"-").concat(Ih),Rh,[nd,od]),pd("".concat(Vh,"-").concat($h),(function(){return Rh.apply(null,arguments).exponent(.5)}),[nd,od]),pd("".concat(Vh,"-").concat(Wh),(function t(){var e=vh(zh());return e.copy=function(){return Nh(e,t()).constant(e.constant())},Zl.apply(e,arguments)}),[nd,od]),pd("".concat(Gh,"-").concat(Ph),(function t(){var e=uh(Lh()(Kf));return e.copy=function(){return Nh(e,t())},Zl.apply(e,arguments)}),[nd,od]),pd("".concat(Gh,"-").concat(jh),(function t(){var e=gh(Lh()).domain([.1,1,10]);return e.copy=function(){return Nh(e,t()).base(e.base())},Zl.apply(e,arguments)}),[nd,od,jh]),pd("".concat(Gh,"-").concat(Ih),Uh,[nd,od]),pd("".concat(Gh,"-").concat($h),(function(){return Uh.apply(null,arguments).exponent(.5)}),[nd,od]),pd("".concat(Gh,"-").concat(Wh),(function t(){var e=vh(Lh());return e.copy=function(){return Nh(e,t()).constant(e.constant())},Zl.apply(e,arguments)}),[nd,od]),pd(Xh,(function t(){var e,n=[],r=[],i=[];function o(){var t=0,e=Math.max(1,r.length);for(i=new Array(e-1);++t0?i[e-1]:n[0],e=i?[o[i-1],r]:[o[e-1],o[e]]},u.unknown=function(t){return arguments.length?(e=t,u):u},u.thresholds=function(){return o.slice()},u.copy=function(){return t().domain([n,r]).range(a).unknown(e)},Jl.apply(uh(u),arguments)}),id),pd(Zh,(function t(){var e,n=[.5],r=[0,1],i=1;function o(t){return t<=t?r[_e(n,t,0,i)]:e}return o.domain=function(t){return arguments.length?(n=Array.from(t),i=Math.min(n.length,r.length-1),o):n.slice()},o.range=function(t){return arguments.length?(r=Array.from(t),i=Math.min(n.length,r.length-1),o):r.slice()},o.invertExtent=function(t){var e=r.indexOf(t);return[n[e-1],n[e]]},o.unknown=function(t){return arguments.length?(e=t,o):e},o.copy=function(){return t().domain(n).range(r).unknown(e)},Jl.apply(o,arguments)}),id),pd(ed,(function t(){let e=[],n=[];function r(t){return null==t||t!=t?void 0:n[(_e(e,t)-1)%n.length]}return r.domain=function(t){return arguments.length?(e=cd(t),r):e.slice()},r.range=function(t){return arguments.length?(n=fd.call(t),r):n.slice()},r.tickFormat=function(t,n){return ah(e[0],M(e),null==t?10:t,n)},r.copy=function(){return t().domain(r.domain()).range(r.range())},r}),[rd,id]),pd(Qh,Kl,rd),pd(td,ud,rd),pd(Kh,(function(){return sd(ud().paddingInner(1))}),rd);const kd=["clamp","base","constant","exponent"];function Md(t,e){const n=e[0],r=M(e)-n;return function(e){return t(n+e*r)}}function Ad(t,e,n){return Xf(Cd(e||"rgb",n),t)}function Ed(t,e){const n=new Array(e),r=e+1;for(let i=0;it[e]?a[e](t[e]()):0)),a):Z(.5)}function Cd(t,e){const n=Jf[function(t){return"interpolate"+t.toLowerCase().split("-").map((t=>t[0].toUpperCase()+t.slice(1))).join("")}(t)];return null!=e&&n&&n.gamma?n.gamma(e):n}function Fd(t){const e=t.length/6|0,n=new Array(e);for(let r=0;r1?(Bd[t]=e,this):Bd[t]}Sd({category10:"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf",category20:"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5",category20b:"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6",category20c:"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9",tableau10:"4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac",tableau20:"4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5",accent:"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666",dark2:"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666",paired:"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928",pastel1:"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2",pastel2:"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc",set1:"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999",set2:"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3",set3:"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"},Fd),Sd({blues:"cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90",greens:"d3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429",greys:"e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e",oranges:"fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303",purples:"e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c",reds:"fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13",blueGreen:"d5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429",bluePurple:"ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71",greenBlue:"d3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1",orangeRed:"fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403",purpleBlue:"dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281",purpleBlueGreen:"dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353",purpleRed:"dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a",redPurple:"fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174",yellowGreen:"e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034",yellowOrangeBrown:"feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204",yellowOrangeRed:"fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225",blueOrange:"134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07",brownBlueGreen:"704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147",purpleGreen:"5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29",purpleOrange:"4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07",redBlue:"8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85",redGrey:"8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434",yellowGreenBlue:"eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185",redYellowBlue:"a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695",redYellowGreen:"a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837",pinkYellowGreen:"8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419",spectral:"9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2",viridis:"440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725",magma:"0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf",inferno:"0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4",plasma:"0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921",cividis:"00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647",rainbow:"6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa",sinebow:"ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040",turbo:"23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00",browns:"eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632",tealBlues:"bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985",teals:"bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667",warmGreys:"dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e",goldGreen:"f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36",goldOrange:"f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26",goldRed:"f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e",lightGreyRed:"efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b",lightGreyTeal:"e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc",lightMulti:"e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c",lightOrange:"f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b",lightTealBlue:"e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988",darkBlue:"3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff",darkGold:"3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff",darkGreen:"3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa",darkMulti:"3737371f5287197d8c29a86995ce3fffe800ffffff",darkRed:"3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c"},(t=>Ad(Fd(t))));const zd="symbol",Nd=t=>v(t)?t.map((t=>String(t))):String(t),Od=(t,e)=>t[1]-e[1],Rd=(t,e)=>e[1]-t[1];function Ld(t,e,n){let r;return ht(e)&&(t.bins&&(e=Math.max(e,t.bins.length)),null!=n&&(e=Math.min(e,Math.floor(bt(t.domain())/n||1)))),_(e)&&(r=e.step,e=e.interval),pt(e)&&(e=t.type===Hh?yr(e):t.type==Yh?vr(e):u("Only time and utc scales accept interval strings."),r&&(e=e.every(r))),e}function Ud(t,e,n){let r=t.range(),i=r[0],o=M(r),a=Od;if(i>o&&(r=o,o=i,i=r,a=Rd),i=Math.floor(i),o=Math.ceil(o),e=e.map((e=>[e,t(e)])).filter((t=>i<=t[1]&&t[1]<=o)).sort(a).map((t=>t[0])),n>0&&e.length>1){const t=[e[0],M(e)];for(;e.length>n&&e.length>=3;)e=e.filter(((t,e)=>!(e%2)));e.length<3&&(e=t)}return e}function qd(t,e){return t.bins?Ud(t,t.bins):t.ticks?t.ticks(e):t.domain()}function Pd(t,e,n,r,i,o){const a=e.type;let u=Nd;if(a===Hh||i===Hh)u=t.timeFormat(r);else if(a===Yh||i===Yh)u=t.utcFormat(r);else if(xd(a)){const i=t.formatFloat(r);if(o||e.bins)u=i;else{const t=jd(e,n,!1);u=e=>t(e)?i(e):""}}else if(e.tickFormat){const i=e.domain();u=t.formatSpan(i[0],i[i.length-1],n,r)}else r&&(u=t.format(r));return u}function jd(t,e,n){const r=qd(t,e),i=t.base(),o=Math.log(i),a=Math.max(1,i*e/r.length),u=t=>{let e=t/Math.pow(i,Math.round(Math.log(t)/o));return e*i1?r[1]-r[0]:r[0];for(o=1;oId[t.type]||t.bins)(e)?Yd(u):"discrete"===r?Gd(u):Xd(u)}const Yd=t=>(e,n,r)=>{const i=Vd(r[n+1],Vd(r.max,1/0)),o=Jd(e,t),a=Jd(i,t);return o&&a?o+" – "+a:a?"< "+a:"≥ "+o},Vd=(t,e)=>null!=t?t:e,Gd=t=>(e,n)=>n?t(e):null,Xd=t=>e=>t(e),Jd=(t,e)=>Number.isFinite(t)?e(t):null;function Zd(t,e,n,r){const i=r||e.type;return pt(n)&&function(t){return md(t,ad)}(i)&&(n=n.replace(/%a/g,"%A").replace(/%b/g,"%B")),n||i!==Hh?n||i!==Yh?Hd(t,e,5,null,n,r,!0):t.utcFormat("%A, %d %B %Y, %X UTC"):t.timeFormat("%A, %d %B %Y, %X")}function Qd(t,e,n){n=n||{};const r=Math.max(3,n.maxlen||7),i=Zd(t,e,n.format,n.formatType);if(_d(e.type)){const t=Wd(e).slice(1).map(i),n=t.length;return"".concat(n," boundar").concat(1===n?"y":"ies",": ").concat(t.join(", "))}if(vd(e.type)){const t=e.domain(),n=t.length,o=n>r?t.slice(0,r-2).map(i).join(", ")+", ending with "+t.slice(-1).map(i):t.map(i).join(", ");return"".concat(n," value").concat(1===n?"":"s",": ").concat(o)}{const t=e.domain();return"values from ".concat(i(t[0])," to ").concat(i(M(t)))}}let Kd=0;const tp="p_";function ep(t){return t&&t.gradient}function np(t,e,n){const r=t.gradient;let i=t.id,o="radial"===r?tp:"";return i||(i=t.id="gradient_"+Kd++,"radial"===r?(t.x1=rp(t.x1,.5),t.y1=rp(t.y1,.5),t.r1=rp(t.r1,0),t.x2=rp(t.x2,.5),t.y2=rp(t.y2,.5),t.r2=rp(t.r2,.5),o=tp):(t.x1=rp(t.x1,0),t.y1=rp(t.y1,0),t.x2=rp(t.x2,1),t.y2=rp(t.y2,0))),e[i]=t,"url("+(n||"")+"#"+o+i+")"}function rp(t,e){return null!=t?t:e}function ip(t,e){var n,r=[];return n={gradient:"linear",x1:t?t[0]:0,y1:t?t[1]:0,x2:e?e[0]:1,y2:e?e[1]:0,stops:r,stop:function(t,e){return r.push({offset:t,color:e}),n}}}const op={basis:{curve:function(t){return new vl(t)}},"basis-closed":{curve:function(t){return new _l(t)}},"basis-open":{curve:function(t){return new xl(t)}},bundle:{curve:wl,tension:"beta",value:.85},cardinal:{curve:Al,tension:"tension",value:0},"cardinal-open":{curve:Fl,tension:"tension",value:0},"cardinal-closed":{curve:Dl,tension:"tension",value:0},"catmull-rom":{curve:Tl,tension:"alpha",value:.5},"catmull-rom-closed":{curve:Nl,tension:"alpha",value:.5},"catmull-rom-open":{curve:Rl,tension:"alpha",value:.5},linear:{curve:cl},"linear-closed":{curve:function(t){return new Ll(t)}},monotone:{horizontal:function(t){return new $l(t)},vertical:function(t){return new Il(t)}},natural:{curve:function(t){return new Hl(t)}},step:{curve:function(t){return new Vl(t,.5)}},"step-after":{curve:function(t){return new Vl(t,1)}},"step-before":{curve:function(t){return new Vl(t,0)}}};function ap(t,e,n){var r=rt(op,t)&&op[t],i=null;return r&&(i=r.curve||r[e||"vertical"],r.tension&&null!=n&&(i=i[r.tension](n))),i}const up={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},sp=[/([MLHVCSQTAZmlhvcsqtaz])/g,/###/,/(\.\d+)(\.\d)/g,/(\d)([-+])/g,/\s|,|###/];function lp(t){const e=[];let n,r,i,o,a,u,s,l,c,f;const h=t.slice().replace(sp[0],"###$1").split(sp[1]).slice(1);for(s=0,c=h.length;su){const t=i.length;for(l=1,e.push([a].concat(i.slice(l,l+=u))),a="M"===a?"L":"m"===a?"l":a;l1&&(g=Math.sqrt(g),n*=g,r*=g);const m=h/n,y=f/n,v=-f/r,_=h/r,x=m*u+y*s,b=v*u+_*s,w=m*t+y*e,k=v*t+_*e;let M=1/((w-x)*(w-x)+(k-b)*(k-b))-.25;M<0&&(M=0);let A=Math.sqrt(M);o==i&&(A=-A);const E=.5*(x+w)-A*(k-b),D=.5*(b+k)+A*(w-x),C=Math.atan2(b-D,x-E);let F=Math.atan2(k-D,w-E)-C;F<0&&1===o?F+=hp:F>0&&0===o&&(F-=hp);const S=Math.ceil(Math.abs(F/(fp+.001))),B=[];for(let t=0;t+t}function Tp(t,e,n){return Math.max(e,Math.min(t,n))}function zp(){var t=Dp,e=Cp,n=Fp,r=Sp,i=Bp(0),o=i,a=i,u=i,s=null;function l(l,c,f){var h,d=null!=c?c:+t.call(this,l),p=null!=f?f:+e.call(this,l),g=+n.call(this,l),m=+r.call(this,l),y=Math.min(g,m)/2,v=Tp(+i.call(this,l),0,y),_=Tp(+o.call(this,l),0,y),x=Tp(+a.call(this,l),0,y),b=Tp(+u.call(this,l),0,y);if(s||(s=h=Ps()),v<=0&&_<=0&&x<=0&&b<=0)s.rect(d,p,g,m);else{var w=d+g,k=p+m;s.moveTo(d+v,p),s.lineTo(w-_,p),s.bezierCurveTo(w-Ep*_,p,w,p+Ep*_,w,p+_),s.lineTo(w,k-b),s.bezierCurveTo(w,k-Ep*b,w-Ep*b,k,w-b,k),s.lineTo(d+x,k),s.bezierCurveTo(d+Ep*x,k,d,k-Ep*x,d,k-x),s.lineTo(d,p+v),s.bezierCurveTo(d,p+Ep*v,d+Ep*v,p,d+v,p),s.closePath()}if(h)return s=null,h+""||null}return l.x=function(e){return arguments.length?(t=Bp(e),l):t},l.y=function(t){return arguments.length?(e=Bp(t),l):e},l.width=function(t){return arguments.length?(n=Bp(t),l):n},l.height=function(t){return arguments.length?(r=Bp(t),l):r},l.cornerRadius=function(t,e,n,r){return arguments.length?(i=Bp(t),o=null!=e?Bp(e):i,u=null!=n?Bp(n):i,a=null!=r?Bp(r):o,l):i},l.context=function(t){return arguments.length?(s=null==t?null:t,l):s},l}function Np(){var t,e,n,r,i,o,a,u,s=null;function l(t,e,n){const r=n/2;if(i){var l=a-e,c=t-o;if(l||c){var f=Math.sqrt(l*l+c*c),h=(l/=f)*u,d=(c/=f)*u,p=Math.atan2(c,l);s.moveTo(o-h,a-d),s.lineTo(t-l*r,e-c*r),s.arc(t,e,r,p-Math.PI,p),s.lineTo(o+h,a+d),s.arc(o,a,u,p,p+Math.PI)}else s.arc(t,e,r,0,hp);s.closePath()}else i=1;o=t,a=e,u=r}function c(o){var a,u,c,f=o.length,h=!1;for(null==s&&(s=c=Ps()),a=0;a<=f;++a)!(at.x||0,Lp=t=>t.y||0,Up=t=>!(!1===t.defined),qp=function(){var t=el,e=nl,n=js(0),r=null,i=rl,o=il,a=ol,u=null;function s(){var s,l,c=+t.apply(this,arguments),f=+e.apply(this,arguments),h=i.apply(this,arguments)-Zs,d=o.apply(this,arguments)-Zs,p=Is(d-h),g=d>h;if(u||(u=s=Ps()),fXs)if(p>Qs-Xs)u.moveTo(f*Ws(h),f*Vs(h)),u.arc(0,0,f,h,d,!g),c>Xs&&(u.moveTo(c*Ws(d),c*Vs(d)),u.arc(0,0,c,d,h,g));else{var m,y,v=h,_=d,x=h,b=d,w=p,k=p,M=a.apply(this,arguments)/2,A=M>Xs&&(r?+r.apply(this,arguments):Gs(c*c+f*f)),E=Ys(Is(f-c)/2,+n.apply(this,arguments)),D=E,C=E;if(A>Xs){var F=tl(A/c*Vs(M)),S=tl(A/f*Vs(M));(w-=2*F)>Xs?(x+=F*=g?1:-1,b-=F):(w=0,x=b=(h+d)/2),(k-=2*S)>Xs?(v+=S*=g?1:-1,_-=S):(k=0,v=_=(h+d)/2)}var B=f*Ws(v),T=f*Vs(v),z=c*Ws(b),N=c*Vs(b);if(E>Xs){var O,R=f*Ws(_),L=f*Vs(_),U=c*Ws(x),q=c*Vs(x);if(pXs?C>Xs?(m=ul(U,q,B,T,f,C,g),y=ul(R,L,z,N,f,C,g),u.moveTo(m.cx+m.x01,m.cy+m.y01),CXs&&w>Xs?D>Xs?(m=ul(z,N,R,L,c,-D,g),y=ul(B,T,U,q,c,-D,g),u.lineTo(m.cx+m.x01,m.cy+m.y01),Dt.startAngle||0)).endAngle((t=>t.endAngle||0)).padAngle((t=>t.padAngle||0)).innerRadius((t=>t.innerRadius||0)).outerRadius((t=>t.outerRadius||0)).cornerRadius((t=>t.cornerRadius||0)),Pp=pl().x(Rp).y1(Lp).y0((t=>(t.y||0)+(t.height||0))).defined(Up),jp=pl().y(Lp).x1(Rp).x0((t=>(t.x||0)+(t.width||0))).defined(Up),Ip=dl().x(Rp).y(Lp).defined(Up),$p=zp().x(Rp).y(Lp).width((t=>t.width||0)).height((t=>t.height||0)).cornerRadius((t=>Op(t.cornerRadiusTopLeft,t.cornerRadius)||0),(t=>Op(t.cornerRadiusTopRight,t.cornerRadius)||0),(t=>Op(t.cornerRadiusBottomRight,t.cornerRadius)||0),(t=>Op(t.cornerRadiusBottomLeft,t.cornerRadius)||0)),Wp=function(t,e){var n=null;function r(){var r;if(n||(n=r=Ps()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),r)return n=null,r+""||null}return t="function"==typeof t?t:js(t||gl),e="function"==typeof e?e:js(void 0===e?64:+e),r.type=function(e){return arguments.length?(t="function"==typeof e?e:js(e),r):t},r.size=function(t){return arguments.length?(e="function"==typeof t?t:js(+t),r):e},r.context=function(t){return arguments.length?(n=null==t?null:t,r):n},r}().type((t=>Mp(t.shape||"circle"))).size((t=>Op(t.size,64))),Hp=Np().x(Rp).y(Lp).defined(Up).size((t=>t.size||1));function Yp(t){return t.cornerRadius||t.cornerRadiusTopLeft||t.cornerRadiusTopRight||t.cornerRadiusBottomRight||t.cornerRadiusBottomLeft}function Vp(t,e,n,r){return $p.context(t)(e,n,r)}var Gp=1;function Xp(){Gp=1}function Jp(t,e,n){var r=e.clip,i=t._defs,o=e.clip_id||(e.clip_id="clip"+Gp++),a=i.clipping[o]||(i.clipping[o]={id:o});return H(r)?a.path=r(null):Yp(n)?a.path=Vp(null,n,0,0):(a.width=n.width||0,a.height=n.height||0),"url(#"+o+")"}function Zp(t){this.clear(),t&&this.union(t)}function Qp(t){this.mark=t,this.bounds=this.bounds||new Zp}function Kp(t){Qp.call(this,t),this.items=this.items||[]}function tg(t){this._pending=0,this._loader=t||Fo()}function eg(t){t._pending+=1}function ng(t){t._pending-=1}function rg(t,e,n){if(e.stroke&&0!==e.opacity&&0!==e.strokeOpacity){const r=null!=e.strokeWidth?+e.strokeWidth:1;t.expand(r+(n?function(t,e){return t.strokeJoin&&"miter"!==t.strokeJoin?0:e}(e,r):0))}return t}Zp.prototype={clone(){return new Zp(this)},clear(){return this.x1=+Number.MAX_VALUE,this.y1=+Number.MAX_VALUE,this.x2=-Number.MAX_VALUE,this.y2=-Number.MAX_VALUE,this},empty(){return this.x1===+Number.MAX_VALUE&&this.y1===+Number.MAX_VALUE&&this.x2===-Number.MAX_VALUE&&this.y2===-Number.MAX_VALUE},equals(t){return this.x1===t.x1&&this.y1===t.y1&&this.x2===t.x2&&this.y2===t.y2},set(t,e,n,r){return nthis.x2&&(this.x2=t),e>this.y2&&(this.y2=e),this},expand(t){return this.x1-=t,this.y1-=t,this.x2+=t,this.y2+=t,this},round(){return this.x1=Math.floor(this.x1),this.y1=Math.floor(this.y1),this.x2=Math.ceil(this.x2),this.y2=Math.ceil(this.y2),this},scale(t){return this.x1*=t,this.y1*=t,this.x2*=t,this.y2*=t,this},translate(t,e){return this.x1+=t,this.x2+=t,this.y1+=e,this.y2+=e,this},rotate(t,e,n){const r=this.rotatedPoints(t,e,n);return this.clear().add(r[0],r[1]).add(r[2],r[3]).add(r[4],r[5]).add(r[6],r[7])},rotatedPoints(t,e,n){var{x1:r,y1:i,x2:o,y2:a}=this,u=Math.cos(t),s=Math.sin(t),l=e-e*u+n*s,c=n-e*s-n*u;return[u*r-s*i+l,s*r+u*i+c,u*r-s*a+l,s*r+u*a+c,u*o-s*i+l,s*o+u*i+c,u*o-s*a+l,s*o+u*a+c]},union(t){return t.x1this.x2&&(this.x2=t.x2),t.y2>this.y2&&(this.y2=t.y2),this},intersect(t){return t.x1>this.x1&&(this.x1=t.x1),t.y1>this.y1&&(this.y1=t.y1),t.x2=t.x2&&this.y1<=t.y1&&this.y2>=t.y2},alignsWith(t){return t&&(this.x1==t.x1||this.x2==t.x2||this.y1==t.y1||this.y2==t.y2)},intersects(t){return t&&!(this.x2t.x2||this.y2t.y2)},contains(t,e){return!(tthis.x2||ethis.y2)},width(){return this.x2-this.x1},height(){return this.y2-this.y1}},ut(Kp,Qp),tg.prototype={pending(){return this._pending},sanitizeURL(t){const e=this;return eg(e),e._loader.sanitize(t,{context:"href"}).then((t=>(ng(e),t))).catch((()=>(ng(e),null)))},loadImage(t){const e=this,n=Xl();return eg(e),e._loader.sanitize(t,{context:"image"}).then((t=>{const r=t.href;if(!r||!n)throw{url:r};const i=new n,o=rt(t,"crossOrigin")?t.crossOrigin:"anonymous";return null!=o&&(i.crossOrigin=o),i.onload=()=>ng(e),i.onerror=()=>ng(e),i.src=r,i})).catch((t=>(ng(e),{complete:!1,width:0,height:0,src:t&&t.url||""})))},ready(){const t=this;return new Promise((e=>{!function n(r){t.pending()?setTimeout((()=>{n(!0)}),10):e(r)}(!1)}))}};const ig=hp-1e-8;let og,ag,ug,sg,lg,cg,fg,hg;const dg=(t,e)=>og.add(t,e),pg=(t,e)=>dg(ag=t,ug=e),gg=t=>dg(t,og.y1),mg=t=>dg(og.x1,t),yg=(t,e)=>lg*t+fg*e,vg=(t,e)=>cg*t+hg*e,_g=(t,e)=>dg(yg(t,e),vg(t,e)),xg=(t,e)=>pg(yg(t,e),vg(t,e));function bg(t,e){return og=t,e?(sg=e*cp,lg=hg=Math.cos(sg),cg=Math.sin(sg),fg=-cg):(lg=hg=1,sg=cg=fg=0),wg}const wg={beginPath(){},closePath(){},moveTo:xg,lineTo:xg,rect(t,e,n,r){sg?(_g(t+n,e),_g(t+n,e+r),_g(t,e+r),xg(t,e)):(dg(t+n,e+r),pg(t,e))},quadraticCurveTo(t,e,n,r){const i=yg(t,e),o=vg(t,e),a=yg(n,r),u=vg(n,r);kg(ag,i,a,gg),kg(ug,o,u,mg),pg(a,u)},bezierCurveTo(t,e,n,r,i,o){const a=yg(t,e),u=vg(t,e),s=yg(n,r),l=vg(n,r),c=yg(i,o),f=vg(i,o);Mg(ag,a,s,c,gg),Mg(ug,u,l,f,mg),pg(c,f)},arc(t,e,n,r,i,o){if(r+=sg,i+=sg,ag=n*Math.cos(i)+t,ug=n*Math.sin(i)+e,Math.abs(i-r)>ig)dg(t-n,e-n),dg(t+n,e+n);else{const a=r=>dg(n*Math.cos(r)+t,n*Math.sin(r)+e);let u,s;if(a(r),a(i),i!==r)if((r%=hp)<0&&(r+=hp),(i%=hp)<0&&(i+=hp),ii;++s,u-=fp)a(u);else for(u=r-r%fp+fp,s=0;s<4&&u1e-14?(s=a*a+u*o,s>=0&&(s=Math.sqrt(s),l=(-a+s)/o,c=(-a-s)/o)):l=.5*u/a,0m)return!1;d>g&&(g=d)}else if(f>0){if(d0&&(t.globalAlpha=n,t.fillStyle=Rg(t,e,e.fill),!0)}var Ug=[];function qg(t,e,n){var r=null!=(r=e.strokeWidth)?r:1;return!(r<=0)&&((n*=null==e.strokeOpacity?1:e.strokeOpacity)>0&&(t.globalAlpha=n,t.strokeStyle=Rg(t,e,e.stroke),t.lineWidth=r,t.lineCap=e.strokeCap||"butt",t.lineJoin=e.strokeJoin||"miter",t.miterLimit=e.strokeMiterLimit||10,t.setLineDash&&(t.setLineDash(e.strokeDash||Ug),t.lineDashOffset=e.strokeDashOffset||0),!0))}function Pg(t,e){return t.zindex-e.zindex||t.index-e.index}function jg(t){if(!t.zdirty)return t.zitems;var e,n,r,i=t.items,o=[];for(n=0,r=i.length;n=0;)if(n=e(i[r]))return n;if(i===o)for(r=(i=t.items).length;--r>=0;)if(!i[r].zindex&&(n=e(i[r])))return n;return null}function Wg(t){return function(e,n,r){Ig(n,(n=>{r&&!r.intersects(n.bounds)||Yg(t,e,n,n)}))}}function Hg(t){return function(e,n,r){!n.items.length||r&&!r.intersects(n.bounds)||Yg(t,e,n.items[0],n.items)}}function Yg(t,e,n,r){var i=null==n.opacity?1:n.opacity;0!==i&&(t(e,r)||(zg(e,n),n.fill&&Lg(e,n,i)&&e.fill(),n.stroke&&qg(e,n,i)&&e.stroke()))}function Vg(t){return t=t||p,function(e,n,r,i,o,a){return r*=e.pixelRatio,i*=e.pixelRatio,$g(n,(n=>{const u=n.bounds;if((!u||u.contains(o,a))&&u)return t(e,n,r,i,o,a)?n:void 0}))}}function Gg(t,e){return function(n,r,i,o){var a,u,s=Array.isArray(r)?r[0]:r,l=null==e?s.fill:e,c=s.stroke&&n.isPointInStroke;return c&&(a=s.strokeWidth,u=s.strokeCap,n.lineWidth=null!=a?a:1,n.lineCap=null!=u?u:"butt"),!t(n,r)&&(l&&n.isPointInPath(i,o)||c&&n.isPointInStroke(i,o))}}function Xg(t){return Vg(Gg(t))}function Jg(t,e){return"translate("+t+","+e+")"}function Zg(t){return"rotate("+t+")"}function Qg(t){return Jg(t.x||0,t.y||0)}function Kg(t,e,n){function r(t,n){var r=n.x||0,i=n.y||0,o=n.angle||0;t.translate(r,i),o&&t.rotate(o*=cp),t.beginPath(),e(t,n),o&&t.rotate(-o),t.translate(-r,-i)}return{type:t,tag:"path",nested:!1,attr:function(t,n){t("transform",function(t){return Jg(t.x||0,t.y||0)+(t.angle?" "+Zg(t.angle):"")}(n)),t("d",e(null,n))},bound:function(t,n){return e(bg(t,n.angle),n),rg(t,n).translate(n.x||0,n.y||0)},draw:Wg(r),pick:Xg(r),isect:n||Cg(r)}}var tm=Kg("arc",(function(t,e){return qp.context(t)(e)}));function em(t,e,n){function r(t,n){t.beginPath(),e(t,n)}const i=Gg(r);return{type:t,tag:"path",nested:!0,attr:function(t,n){var r=n.mark.items;r.length&&t("d",e(null,r))},bound:function(t,n){var r=n.items;return 0===r.length?t:(e(bg(t),r),rg(t,r[0]))},draw:Hg(r),pick:function(t,e,n,r,o,a){var u=e.items,s=e.bounds;return!u||!u.length||s&&!s.contains(o,a)?null:(n*=t.pixelRatio,r*=t.pixelRatio,i(t,u,n,r)?u[0]:null)},isect:Fg,tip:n}}var nm=em("area",(function(t,e){const n=e[0],r=n.interpolate||"linear";return("horizontal"===n.orient?jp:Pp).curve(ap(r,n.orient,n.tension)).context(t)(e)}),(function(t,e){for(var n,r,i="horizontal"===t[0].orient?e[1]:e[0],o="horizontal"===t[0].orient?"y":"x",a=t.length,u=1/0;--a>=0;)!1!==t[a].defined&&(r=Math.abs(t[a][o]-i)).5&&e<1.5?.5-Math.abs(e-1):0}function om(t,e){const n=im(e);t("d",Vp(null,e,n,n))}function am(t,e,n,r){const i=im(e);t.beginPath(),Vp(t,e,(n||0)+i,(r||0)+i)}const um=Gg(am),sm=Gg(am,!1),lm=Gg(am,!0);var cm={type:"group",tag:"g",nested:!1,attr:function(t,e){t("transform",Qg(e))},bound:function(t,e){if(!e.clip&&e.items){const n=e.items,r=n.length;for(let e=0;e{const r=e.x||0,i=e.y||0,o=e.strokeForeground,a=null==e.opacity?1:e.opacity;(e.stroke||e.fill)&&a&&(am(t,e,r,i),zg(t,e),e.fill&&Lg(t,e,a)&&t.fill(),e.stroke&&!o&&qg(t,e,a)&&t.stroke()),t.save(),t.translate(r,i),e.clip&&rm(t,e),n&&n.translate(-r,-i),Ig(e,(e=>{this.draw(t,e,n)})),n&&n.translate(r,i),t.restore(),o&&e.stroke&&a&&(am(t,e,r,i),zg(t,e),qg(t,e,a)&&t.stroke())}))},pick:function(t,e,n,r,i,o){if(e.bounds&&!e.bounds.contains(i,o)||!e.items)return null;const a=n*t.pixelRatio,u=r*t.pixelRatio;return $g(e,(s=>{let l,c,f;const h=s.bounds;if(h&&!h.contains(i,o))return;c=s.x||0,f=s.y||0;const d=c+(s.width||0),p=f+(s.height||0),g=s.clip;if(g&&(id||op))return;if(t.save(),t.translate(c,f),c=i-c,f=o-f,g&&Yp(s)&&!lm(t,s,a,u))return t.restore(),null;const m=s.strokeForeground,y=!1!==e.interactive;return y&&m&&s.stroke&&sm(t,s,a,u)?(t.restore(),s):(l=$g(s,(t=>function(t,e,n){return(!1!==t.interactive||"group"===t.marktype)&&t.bounds&&t.bounds.contains(e,n)}(t,c,f)?this.pick(t,n,r,c,f):null)),!l&&y&&(s.fill||!m&&s.stroke)&&um(t,s,a,u)&&(l=s),t.restore(),l||null)}))},isect:Sg,content:function(t,e,n){t("clip-path",e.clip?Jp(n,e,e):null)},background:function(t,e){t("class","background"),t("aria-hidden",!0),om(t,e)},foreground:function(t,e){t("class","foreground"),t("aria-hidden",!0),e.strokeForeground?om(t,e):t("d","")}},fm={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",version:"1.1"};function hm(t,e){var n=t.image;return(!n||t.url&&t.url!==n.url)&&(n={complete:!1,width:0,height:0},e.loadImage(t.url).then((e=>{t.image=e,t.image.url=t.url}))),n}function dm(t,e){return null!=t.width?t.width:e&&e.width?!1!==t.aspect&&t.height?t.height*e.width/e.height:e.width:0}function pm(t,e){return null!=t.height?t.height:e&&e.height?!1!==t.aspect&&t.width?t.width*e.height/e.width:e.height:0}function gm(t,e){return"center"===t?e/2:"right"===t?e:0}function mm(t,e){return"middle"===t?e/2:"bottom"===t?e:0}var ym={type:"image",tag:"image",nested:!1,attr:function(t,e,n){const r=hm(e,n),i=dm(e,r),o=pm(e,r),a=(e.x||0)-gm(e.align,i),u=(e.y||0)-mm(e.baseline,o);t("href",!r.src&&r.toDataURL?r.toDataURL():r.src||"",fm["xmlns:xlink"],"xlink:href"),t("transform",Jg(a,u)),t("width",i),t("height",o),t("preserveAspectRatio",!1===e.aspect?"none":"xMidYMid")},bound:function(t,e){const n=e.image,r=dm(e,n),i=pm(e,n),o=(e.x||0)-gm(e.align,r),a=(e.y||0)-mm(e.baseline,i);return t.set(o,a,o+r,a+i)},draw:function(t,e,n){Ig(e,(e=>{if(n&&!n.intersects(e.bounds))return;const r=hm(e,this);let i,o,a,u,s=dm(e,r),l=pm(e,r),c=(e.x||0)-gm(e.align,s),f=(e.y||0)-mm(e.baseline,l);!1!==e.aspect&&(o=r.width/r.height,a=e.width/e.height,o==o&&a==a&&o!==a&&(a=0;)if(!1!==t[o].defined&&(n=t[o].x-e[0])*n+(r=t[o].y-e[1])*r{if(!n||n.intersects(e.bounds)){var r=null==e.opacity?1:e.opacity;r&&km(t,e,r)&&(zg(t,e),t.stroke())}}))},pick:Vg((function(t,e,n,r){return!!t.isPointInStroke&&(km(t,e,1)&&t.isPointInStroke(n,r))})),isect:Bg},Am=Kg("shape",(function(t,e){return(e.mark.shape||e.shape).context(t)(e)})),Em=Kg("symbol",(function(t,e){return Wp.context(t)(e)}),Fg);const Dm=yt();var Cm={height:Nm,measureWidth:Tm,estimateWidth:Sm,width:Sm,canvas:Fm};function Fm(t){Cm.width=t&&Eg?Tm:Sm}function Sm(t,e){return Bm(Um(t,e),Nm(t))}function Bm(t,e){return~~(.8*t.length*e)}function Tm(t,e){return Nm(t)<=0||!(e=Um(t,e))?0:zm(e,Pm(t))}function zm(t,e){const n="(".concat(e,") ").concat(t);let r=Dm.get(n);return void 0===r&&(Eg.font=e,r=Eg.measureText(t).width,Dm.set(n,r)),r}function Nm(t){return null!=t.fontSize?+t.fontSize||0:11}function Om(t){return null!=t.lineHeight?t.lineHeight:Nm(t)+2}function Rm(t){return e=t.lineBreak&&t.text&&!v(t.text)?t.text.split(t.lineBreak):t.text,v(e)?e.length>1?e:e[0]:e;var e}function Lm(t){const e=Rm(t);return(v(e)?e.length-1:0)*Om(t)}function Um(t,e){const n=null==e?"":(e+"").trim();return t.limit>0&&n.length?function(t,e){var n=+t.limit,r=function(t){if(Cm.width===Tm){const e=Pm(t);return t=>zm(t,e)}{const e=Nm(t);return t=>Bm(t,e)}}(t);if(r(e)>>1,r(e.slice(i))>n?u=i+1:s=i;return o+e.slice(u)}for(;u>>1),r(e.slice(0,i))Math.max(t,Cm.width(e,n))),0)):r=Cm.width(e,f),"center"===o?l-=r/2:"right"===o&&(l-=r),t.set(l+=u,c+=s,l+r,c+i),e.angle&&!n)t.rotate(e.angle*cp,u,s);else if(2===n)return t.rotatedPoints(e.angle*cp,u,s);return t}var Ym={arc:tm,area:nm,group:cm,image:ym,line:vm,path:xm,rect:wm,rule:Mm,shape:Am,symbol:Em,text:{type:"text",tag:"text",nested:!1,attr:function(t,e){var n,r=e.dx||0,i=(e.dy||0)+jm(e),o=Wm(e),a=o.x1,u=o.y1,s=e.angle||0;t("text-anchor",Im[e.align]||"start"),s?(n=Jg(a,u)+" "+Zg(s),(r||i)&&(n+=" "+Jg(r,i))):n=Jg(a+r,u+i),t("transform",n)},bound:Hm,draw:function(t,e,n){Ig(e,(e=>{var r,i,o,a,u,s,l,c=null==e.opacity?1:e.opacity;if(!(n&&!n.intersects(e.bounds)||0===c||e.fontSize<=0||null==e.text||0===e.text.length)){if(t.font=Pm(e),t.textAlign=e.align||"left",i=(r=Wm(e)).x1,o=r.y1,e.angle&&(t.save(),t.translate(i,o),t.rotate(e.angle*cp),i=o=0),i+=e.dx||0,o+=(e.dy||0)+jm(e),s=Rm(e),zg(t,e),v(s))for(u=Om(e),a=0;a=0;)if(!1!==t[i].defined&&(n=t[i].x-e[0])*n+(r=t[i].y-e[1])*r<(n=t[i].size||1)*n)return t[i];return null}))};function Vm(t,e,n){var r=Ym[t.mark.marktype],i=e||r.bound;return r.nested&&(t=t.mark),i(t.bounds||(t.bounds=new Zp),t,n)}var Gm={mark:null};function Xm(t,e,n){var r,i,o,a,u=Ym[t.marktype],s=u.bound,l=t.items,c=l&&l.length;if(u.nested)return c?o=l[0]:(Gm.mark=t,o=Gm),a=Vm(o,s,n),e=e&&e.union(a)||a;if(e=e||t.bounds&&t.bounds.clear()||new Zp,c)for(r=0,i=l.length;re;)t.removeChild(n[--r]);return t}function ay(t){return"mark-"+t.marktype+(t.role?" role-"+t.role:"")+(t.name?" "+t.name:"")}function uy(t,e){const n=e.getBoundingClientRect();return[t.clientX-n.left-(e.clientLeft||0),t.clientY-n.top-(e.clientTop||0)]}function sy(t,e){this._active=null,this._handlers={},this._loader=t||Fo(),this._tooltip=e||ly}function ly(t,e,n,r){t.element().setAttribute("title",r||"")}function cy(t){this._el=null,this._bgcolor=null,this._loader=new tg(t)}ty.prototype={toJSON(t){return Zm(this.root,t||0)},mark(t,e,n){const r=ey(t,e=e||this.root.items[0]);return e.items[n]=r,r.zindex&&(r.group.zdirty=!0),r}},sy.prototype={initialize(t,e,n){return this._el=t,this._obj=n||null,this.origin(e)},element(){return this._el},canvas(){return this._el&&this._el.firstChild},origin(t){return arguments.length?(this._origin=t||[0,0],this):this._origin.slice()},scene(t){return arguments.length?(this._scene=t,this):this._scene},on(){},off(){},_handlerIndex(t,e,n){for(let r=t?t.length:0;--r>=0;)if(t[r].type===e&&(!n||t[r].handler===n))return r;return-1},handlers(t){const e=this._handlers,n=[];if(t)n.push(...e[this.eventName(t)]);else for(const t in e)n.push(...e[t]);return n},eventName(t){const e=t.indexOf(".");return e<0?t:t.slice(0,e)},handleHref(t,e,n){this._loader.sanitize(n,{context:"href"}).then((e=>{const n=new MouseEvent(t.type,t),r=ny(null,"a");for(const t in e)r.setAttribute(t,e[t]);r.dispatchEvent(n)})).catch((()=>{}))},handleTooltip(t,e,n){if(e&&null!=e.tooltip){e=function(t,e,n,r){var i,o,a=t&&t.mark;if(a&&(i=Ym[a.marktype]).tip){for((o=uy(e,n))[0]-=r[0],o[1]-=r[1];t=t.mark.group;)o[0]-=t.x||0,o[1]-=t.y||0;t=i.tip(a.items,o)}return t}(e,t,this.canvas(),this._origin);const r=n&&e&&e.tooltip||null;this._tooltip.call(this._obj,this,t,e,r)}},getItemBoundingClientRect(t){const e=this.canvas();if(!e)return;const n=e.getBoundingClientRect(),r=this._origin,i=t.bounds,o=i.width(),a=i.height();let u=i.x1+r[0]+n.left,s=i.y1+r[1]+n.top;for(;t.mark&&(t=t.mark.group);)u+=t.x||0,s+=t.y||0;return{x:u,y:s,width:o,height:a,left:u,top:s,right:u+o,bottom:s+a}}},cy.prototype={initialize(t,e,n,r,i){return this._el=t,this.resize(e,n,r,i)},element(){return this._el},canvas(){return this._el&&this._el.firstChild},background(t){return 0===arguments.length?this._bgcolor:(this._bgcolor=t,this)},resize(t,e,n,r){return this._width=t,this._height=e,this._origin=n||[0,0],this._scale=r||1,this},dirty(){},render(t){const e=this;return e._call=function(){e._render(t)},e._call(),e._call=null,e},_render(){},renderAsync(t){const e=this.render(t);return this._ready?this._ready.then((()=>e)):Promise.resolve(e)},_load(t,e){var n=this,r=n._loader[t](e);if(!n._ready){const t=n._call;n._ready=n._loader.ready().then((e=>{e&&t(),n._ready=null}))}return r},sanitizeURL(t){return this._load("sanitizeURL",t)},loadImage(t){return this._load("loadImage",t)}};const fy="dragenter",hy="dragleave",dy="dragover",py="mousedown",gy="mousemove",my="mouseout",yy="mouseover",vy="click",_y="mousewheel",xy="touchstart",by="touchmove",wy="touchend",ky=gy,My=my,Ay=vy;function Ey(t,e){sy.call(this,t,e),this._down=null,this._touch=null,this._first=!0,this._events={}}function Dy(t,e){(t=>t===xy||t===by||t===wy?[xy,by,wy]:[t])(e).forEach((e=>function(t,e){const n=t.canvas();n&&!t._events[e]&&(t._events[e]=1,n.addEventListener(e,t[e]?n=>t[e](n):n=>t.fire(e,n)))}(t,e)))}function Cy(t,e,n){return function(r){const i=this._active,o=this.pickEvent(r);o===i||(i&&i.exit||this.fire(n,r),this._active=o,this.fire(e,r)),this.fire(t,r)}}function Fy(t){return function(e){this.fire(t,e),this._active=null}}ut(Ey,sy,{initialize(t,e,n){return this._canvas=t&&ry(t,"canvas"),[vy,py,gy,my,hy].forEach((t=>Dy(this,t))),sy.prototype.initialize.call(this,t,e,n)},canvas(){return this._canvas},context(){return this._canvas.getContext("2d")},events:["keydown","keypress","keyup",fy,hy,dy,py,"mouseup",gy,my,yy,vy,"dblclick","wheel",_y,xy,by,wy],DOMMouseScroll(t){this.fire(_y,t)},mousemove:Cy(gy,yy,my),dragover:Cy(dy,fy,hy),mouseout:Fy(my),dragleave:Fy(hy),mousedown(t){this._down=this._active,this.fire(py,t)},click(t){this._down===this._active&&(this.fire(vy,t),this._down=null)},touchstart(t){this._touch=this.pickEvent(t.changedTouches[0]),this._first&&(this._active=this._touch,this._first=!1),this.fire(xy,t,!0)},touchmove(t){this.fire(by,t,!0)},touchend(t){this.fire(wy,t,!0),this._touch=null},fire(t,e,n){const r=n?this._touch:this._active,i=this._handlers[t];if(e.vegaType=t,t===Ay&&r&&r.href?this.handleHref(e,r,r.href):t!==ky&&t!==My||this.handleTooltip(e,r,t!==My),i)for(let t=0,n=i.length;t=0&&r.splice(i,1),this},pickEvent(t){const e=uy(t,this._canvas),n=this._origin;return this.pick(this._scene,e[0],e[1],e[0]-n[0],e[1]-n[1])},pick(t,e,n,r,i){const o=this.context();return Ym[t.marktype].pick.call(this,o,t,e,n,r,i)}});var Sy="undefined"!=typeof window&&window.devicePixelRatio||1;function By(t){cy.call(this,t),this._options={},this._redraw=!1,this._dirty=new Zp,this._tempb=new Zp}const Ty=cy.prototype;function zy(t,e){sy.call(this,t,e);const n=this;n._hrefHandler=Ny(n,((t,e)=>{e&&e.href&&n.handleHref(t,e,e.href)})),n._tooltipHandler=Ny(n,((t,e)=>{n.handleTooltip(t,e,t.type!==My)}))}ut(By,cy,{initialize(t,e,n,r,i,o){return this._options=o||{},this._canvas=this._options.externalContext?null:Gl(1,1,this._options.type),t&&this._canvas&&(oy(t,0).appendChild(this._canvas),this._canvas.setAttribute("class","marks")),Ty.initialize.call(this,t,e,n,r,i)},resize(t,e,n,r){if(Ty.resize.call(this,t,e,n,r),this._canvas)!function(t,e,n,r,i,o){const a="undefined"!=typeof HTMLElement&&t instanceof HTMLElement&&null!=t.parentNode,u=t.getContext("2d"),s=a?Sy:i;t.width=e*s,t.height=n*s;for(const t in o)u[t]=o[t];a&&1!==s&&(t.style.width=e+"px",t.style.height=n+"px"),u.pixelRatio=s,u.setTransform(s,0,0,s,s*r[0],s*r[1])}(this._canvas,this._width,this._height,this._origin,this._scale,this._options.context);else{const t=this._options.externalContext;t||u("CanvasRenderer is missing a valid canvas or context"),t.scale(this._scale,this._scale),t.translate(this._origin[0],this._origin[1])}return this._redraw=!0,this},canvas(){return this._canvas},context(){return this._options.externalContext||(this._canvas?this._canvas.getContext("2d"):null)},dirty(t){const e=this._tempb.clear().union(t.bounds);let n=t.mark.group;for(;n;)e.translate(n.x||0,n.y||0),n=n.mark.group;this._dirty.union(e)},_render(t){const e=this.context(),n=this._origin,r=this._width,i=this._height,o=this._dirty,a=((t,e,n)=>(new Zp).set(0,0,e,n).translate(-t[0],-t[1]))(n,r,i);e.save();const u=this._redraw||o.empty()?(this._redraw=!1,a.expand(1)):function(t,e,n){return e.expand(1).round(),t.pixelRatio%1&&e.scale(t.pixelRatio).round().scale(1/t.pixelRatio),e.translate(-n[0]%1,-n[1]%1),t.beginPath(),t.rect(e.x1,e.y1,e.width(),e.height()),t.clip(),e}(e,a.intersect(o),n);return this.clear(-n[0],-n[1],r,i),this.draw(e,t,u),e.restore(),o.clear(),this},draw(t,e,n){const r=Ym[e.marktype];e.clip&&function(t,e){var n=e.clip;t.save(),H(n)?(t.beginPath(),n(t),t.clip()):rm(t,e.group)}(t,e),r.draw.call(this,t,e,n),e.clip&&t.restore()},clear(t,e,n,r){const i=this._options,o=this.context();"pdf"===i.type||i.externalContext||o.clearRect(t,e,n,r),null!=this._bgcolor&&(o.fillStyle=this._bgcolor,o.fillRect(t,e,n,r))}});const Ny=(t,e)=>n=>{let r=n.target.__data__;r=Array.isArray(r)?r[0]:r,n.vegaType=n.type,e.call(t._obj,n,r)};ut(zy,sy,{initialize(t,e,n){let r=this._svg;return r&&(r.removeEventListener(Ay,this._hrefHandler),r.removeEventListener(ky,this._tooltipHandler),r.removeEventListener(My,this._tooltipHandler)),this._svg=r=t&&ry(t,"svg"),r&&(r.addEventListener(Ay,this._hrefHandler),r.addEventListener(ky,this._tooltipHandler),r.addEventListener(My,this._tooltipHandler)),sy.prototype.initialize.call(this,t,e,n)},canvas(){return this._svg},on(t,e){const n=this.eventName(t),r=this._handlers;if(this._handlerIndex(r[n],t,e)<0){const i={type:t,handler:e,listener:Ny(this,e)};(r[n]||(r[n]=[])).push(i),this._svg&&this._svg.addEventListener(n,i.listener)}return this},off(t,e){const n=this.eventName(t),r=this._handlers[n],i=this._handlerIndex(r,t,e);return i>=0&&(this._svg&&this._svg.removeEventListener(n,r[i].listener),r.splice(i,1)),this}});const Oy="aria-hidden",Ry="aria-label",Ly="role",Uy="aria-roledescription",qy="graphics-object",Py="graphics-symbol",jy=(t,e,n)=>({[Ly]:t,[Uy]:e,[Ry]:n||void 0}),Iy=Dt(["axis-domain","axis-grid","axis-label","axis-tick","axis-title","legend-band","legend-entry","legend-gradient","legend-label","legend-title","legend-symbol","title"]),$y={axis:{desc:"axis",caption:function(t){const e=t.datum,n=t.orient,r=e.title?Gy(t):null,i=t.context,o=i.scales[e.scale].value,a=i.dataflow.locale(),u=o.type;return"".concat("left"===n||"right"===n?"Y":"X","-axis")+(r?" titled '".concat(r,"'"):"")+" for a ".concat(vd(u)?"discrete":u," scale")+" with ".concat(Qd(a,o,t))}},legend:{desc:"legend",caption:function(t){const e=t.datum,n=e.title?Gy(t):null,r="".concat(e.type||""," legend").trim(),i=e.scales,o=Object.keys(i),a=t.context,u=a.scales[i[o[0]]].value,s=a.dataflow.locale();return l=r,(l.length?l[0].toUpperCase()+l.slice(1):l)+(n?" titled '".concat(n,"'"):"")+" for ".concat(function(t){return(t=t.map((t=>t+("fill"===t||"stroke"===t?" color":"")))).length<2?t[0]:t.slice(0,-1).join(", ")+" and "+M(t)}(o))+" with ".concat(Qd(s,u,t));var l}},"title-text":{desc:"title",caption:t=>"Title text '".concat(Vy(t),"'")},"title-subtitle":{desc:"subtitle",caption:t=>"Subtitle text '".concat(Vy(t),"'")}},Wy={ariaRole:Ly,ariaRoleDescription:Uy,description:Ry};function Hy(t,e){const n=!1===e.aria;if(t(Oy,n||void 0),n||null==e.description)for(const e in Wy)t(Wy[e],void 0);else{const n=e.mark.marktype;t(Ry,e.description),t(Ly,e.ariaRole||("group"===n?qy:Py)),t(Uy,e.ariaRoleDescription||"".concat(n," mark"))}}function Yy(t){return!1===t.aria?{[Oy]:!0}:Iy[t.role]?null:$y[t.role]?function(t,e){try{const n=t.items[0],r=e.caption||(()=>"");return jy(e.role||Py,e.desc,n.description||r(n))}catch(t){return null}}(t,$y[t.role]):function(t){const e=t.marktype,n="group"===e||"text"===e||t.items.some((t=>null!=t.description&&!1!==t.aria));return jy(n?qy:Py,"".concat(e," mark container"),t.description)}(t)}function Vy(t){return $(t.text).join(" ")}function Gy(t){try{return $(M(t.items).items[0].text).join(" ")}catch(t){return null}}const Xy=t=>(t+"").replace(/&/g,"&").replace(//g,">");function Jy(){let t="",e="",n="";const r=[],i=()=>e=n="",o=(t,n)=>(null!=n&&(e+=" ".concat(t,'="').concat(Xy(n).replace(/"/g,""").replace(/\t/g," ").replace(/\n/g," ").replace(/\r/g," "),'"')),a),a={open(u,...s){(o=>{e&&(t+="".concat(e,">").concat(n),i()),r.push(o)})(u),e="<"+u;for(const t of s)for(const e in t)o(e,t[e]);return a},close(){const o=r.pop();return t+=e?e+(n?">".concat(n,""):"/>"):""),i(),a},attr:o,text:t=>(n+=Xy(t),a),toString:()=>t};return a}const Zy=t=>Qy(Jy(),t)+"";function Qy(t,e){if(t.open(e.tagName),e.hasAttributes()){const n=e.attributes,r=n.length;for(let e=0;e1&&t.previousSibling!=e}(a,n))&&e.insertBefore(a,n?n.nextSibling:e.firstChild),a}ut(nv,cy,{initialize(t,e,n,r,i){return this._defs={},this._clearDefs(),t&&(this._svg=iy(t,0,"svg",ev),dv(this._svg,fm),this._svg.setAttribute("class","marks"),oy(t,1),this._root=iy(this._svg,0,"g",ev),dv(this._root,tv),oy(this._svg,1)),this.background(this._bgcolor),rv.initialize.call(this,t,e,n,r,i)},background(t){return arguments.length&&this._svg&&this._svg.style.setProperty("background-color",t),rv.background.apply(this,arguments)},resize(t,e,n,r){return rv.resize.call(this,t,e,n,r),this._svg&&(dv(this._svg,{width:this._width*this._scale,height:this._height*this._scale,viewBox:"0 0 ".concat(this._width," ").concat(this._height)}),this._root.setAttribute("transform","translate(".concat(this._origin,")"))),this._dirty=[],this},canvas(){return this._svg},svg(){const t=this._svg,e=this._bgcolor;if(!t)return null;let n;e&&(t.removeAttribute("style"),n=iy(t,0,"rect",ev),dv(n,{width:this._width,height:this._height,fill:e}));const r=Zy(t);return e&&(t.removeChild(n),this._svg.style.setProperty("background-color",e)),r},_render(t){return this._dirtyCheck()&&(this._dirtyAll&&this._clearDefs(),this.mark(this._root,t),oy(this._root,1)),this.defs(),this._dirty=[],++this._dirtyID,this},dirty(t){t.dirty!==this._dirtyID&&(t.dirty=this._dirtyID,this._dirty.push(t))},isDirty(t){return this._dirtyAll||!t._svg||t.dirty===this._dirtyID},_dirtyCheck(){this._dirtyAll=!0;const t=this._dirty;if(!t.length||!this._dirtyID)return!0;const e=++this._dirtyID;let n,r,i,o,a,u,s;for(a=0,u=t.length;a{t.dirty=e}))),r.zdirty||(n.exit?(o.nested&&r.items.length?(s=r.items[0],s._svg&&this._update(o,s._svg,s)):n._svg&&(s=n._svg.parentNode,s&&s.removeChild(n._svg)),n._svg=null):(n=o.nested?r.items[0]:n,n._update!==e&&(n._svg&&n._svg.ownerSVGElement?this._update(o,n._svg,n):(this._dirtyAll=!1,iv(n,e)),n._update=e)));return!this._dirtyAll},mark(t,e,n){if(!this.isDirty(e))return e._svg;const r=this._svg,i=Ym[e.marktype],o=!1===e.interactive?"none":null,a="g"===i.tag;let u=null,s=0;const l=uv(e,t,n,"g",r);l.setAttribute("class",ay(e));const c=Yy(e);for(const t in c)pv(l,t,c[t]);a||pv(l,"pointer-events",o),pv(l,"clip-path",e.clip?Jp(this,e,e.group):null);const f=t=>{const e=this.isDirty(t),n=uv(t,l,u,i.tag,r);e&&(this._update(i,n,t),a&&function(t,e,n){e=e.lastChild.previousSibling;let r,i=0;Ig(n,(n=>{r=t.mark(e,n,r),++i})),oy(e,1+i)}(this,n,t)),u=n,++s};return i.nested?e.items.length&&f(e.items[0]):Ig(e,f),oy(l,s),l},_update(t,e,n){sv=e,lv=e.__values__,Hy(fv,n),t.attr(fv,n,this);const r=cv[t.type];r&&r.call(this,t,e,n),sv&&this.style(sv,n)},style(t,e){if(null!=e)for(const n in Ky){let r="font"===n?qm(e):e[n];if(r===lv[n])continue;const i=Ky[n];null==r?t.removeAttribute(i):(ep(r)&&(r=np(r,this._defs.gradient,gv())),t.setAttribute(i,r+"")),lv[n]=r}},defs(){const t=this._svg,e=this._defs;let n=e.el,r=0;for(const i in e.gradient)n||(e.el=n=iy(t,1,"defs",ev)),r=ov(n,e.gradient[i],r);for(const i in e.clipping)n||(e.el=n=iy(t,1,"defs",ev)),r=av(n,e.clipping[i],r);n&&(0===r?(t.removeChild(n),e.el=null):oy(n,r))},_clearDefs(){const t=this._defs;t.gradient={},t.clipping={}}});let sv=null,lv=null;const cv={group(t,e,n){const r=sv=e.childNodes[2];lv=r.__values__,t.foreground(fv,n,this),lv=e.__values__,sv=e.childNodes[1],t.content(fv,n,this);const i=sv=e.childNodes[0];t.background(fv,n,this);const o=!1===n.mark.interactive?"none":null;if(o!==lv.events&&(pv(r,"pointer-events",o),pv(i,"pointer-events",o),lv.events=o),n.strokeForeground&&n.stroke){const t=n.fill;pv(r,"display",null),this.style(i,n),pv(i,"stroke",null),t&&(n.fill=null),lv=r.__values__,this.style(r,n),t&&(n.fill=t),sv=null}else pv(r,"display","none")},image(t,e,n){!1===n.smooth?(hv(e,"image-rendering","optimizeSpeed"),hv(e,"image-rendering","pixelated")):hv(e,"image-rendering",null)},text(t,e,n){const r=Rm(n);let i,o,a,u;v(r)?(o=r.map((t=>Um(n,t))),i=o.join("\n"),i!==lv.text&&(oy(e,0),a=e.ownerDocument,u=Om(n),o.forEach(((t,r)=>{const i=ny(a,"tspan",ev);i.__data__=n,i.textContent=t,r&&(i.setAttribute("x",0),i.setAttribute("dy",u)),e.appendChild(i)})),lv.text=i)):(o=Um(n,r),o!==lv.text&&(e.textContent=o,lv.text=o)),pv(e,"font-family",qm(n)),pv(e,"font-size",Nm(n)+"px"),pv(e,"font-style",n.fontStyle),pv(e,"font-variant",n.fontVariant),pv(e,"font-weight",n.fontWeight)}};function fv(t,e,n){e!==lv[t]&&(n?function(t,e,n,r){null!=n?t.setAttributeNS(r,e,n):t.removeAttributeNS(r,e)}(sv,t,e,n):pv(sv,t,e),lv[t]=e)}function hv(t,e,n){n!==lv[e]&&(null==n?t.style.removeProperty(e):t.style.setProperty(e,n+""),lv[e]=n)}function dv(t,e){for(const n in e)pv(t,n,e[n])}function pv(t,e,n){null!=n?t.setAttribute(e,n):t.removeAttribute(e)}function gv(){let t;return"undefined"==typeof window?"":(t=window.location).hash?t.href.slice(0,-t.hash.length):t.href}function mv(t){cy.call(this,t),this._text=null,this._defs={gradient:{},clipping:{}}}ut(mv,cy,{svg(){return this._text},_render(t){const e=Jy();e.open("svg",K({},fm,{class:"marks",width:this._width*this._scale,height:this._height*this._scale,viewBox:"0 0 ".concat(this._width," ").concat(this._height)}));const n=this._bgcolor;return n&&"transparent"!==n&&"none"!==n&&e.open("rect",{width:this._width,height:this._height,fill:n}).close(),e.open("g",tv,{transform:"translate("+this._origin+")"}),this.mark(e,t),e.close(),this.defs(e),this._text=e.close()+"",this},mark(t,e){const n=Ym[e.marktype],r=n.tag,i=[Hy,n.attr];t.open("g",{class:ay(e),"clip-path":e.clip?Jp(this,e,e.group):null},Yy(e),{"pointer-events":"g"!==r&&!1===e.interactive?"none":null});const o=o=>{const a=this.href(o);if(a&&t.open("a",a),t.open(r,this.attr(e,o,i,"g"!==r?r:null)),"text"===r){const e=Rm(o);if(v(e)){const n={x:0,dy:Om(o)};for(let r=0;rthis.mark(t,e))),t.close(),r&&a?(i&&(o.fill=null),o.stroke=a,t.open("path",this.attr(e,o,n.foreground,"bgrect")).close(),i&&(o.fill=i)):t.open("path",this.attr(e,o,n.foreground,"bgfore")).close()}t.close(),a&&t.close()};return n.nested?e.items&&e.items.length&&o(e.items[0]):Ig(e,o),t.close()},href(t){const e=t.href;let n;if(e){if(n=this._hrefs&&this._hrefs[e])return n;this.sanitizeURL(e).then((t=>{t["xlink:href"]=t.href,t.href=null,(this._hrefs||(this._hrefs={}))[e]=t}))}return null},attr(t,e,n,r){const i={},o=(t,e,n,r)=>{i[r||t]=e};return Array.isArray(n)?n.forEach((t=>t(o,e,this))):n(o,e,this),r&&function(t,e,n,r,i){if(null==e)return t;"bgrect"===r&&!1===n.interactive&&(t["pointer-events"]="none");if("bgfore"===r&&(!1===n.interactive&&(t["pointer-events"]="none"),t.display="none",null!==e.fill))return t;"image"===r&&!1===e.smooth&&(t.style="image-rendering: optimizeSpeed; image-rendering: pixelated;");"text"===r&&(t["font-family"]=qm(e),t["font-size"]=Nm(e)+"px",t["font-style"]=e.fontStyle,t["font-variant"]=e.fontVariant,t["font-weight"]=e.fontWeight);for(const n in Ky){let r=e[n];const o=Ky[n];("transparent"!==r||"fill"!==o&&"stroke"!==o)&&null!=r&&(ep(r)&&(r=np(r,i.gradient,"")),t[o]=r)}}(i,e,t,r,this._defs),i},defs(t){const e=this._defs.gradient,n=this._defs.clipping;if(0!==Object.keys(e).length+Object.keys(n).length){t.open("defs");for(const n in e){const r=e[n],i=r.stops;"radial"===r.gradient?(t.open("pattern",{id:tp+n,viewBox:"0,0,1,1",width:"100%",height:"100%",preserveAspectRatio:"xMidYMid slice"}),t.open("rect",{width:"1",height:"1",fill:"url(#"+n+")"}).close(),t.close(),t.open("radialGradient",{id:n,fx:r.x1,fy:r.y1,fr:r.r1,cx:r.x2,cy:r.y2,r:r.r2})):t.open("linearGradient",{id:n,x1:r.x1,x2:r.x2,y1:r.y1,y2:r.y2});for(let e=0;e1?(xv[t]=e,this):xv[t]}function wv(t,e,n){const r=[],i=(new Zp).union(e),o=t.marktype;return o?kv(t,i,n,r):"group"===o?Mv(t,i,n,r):u("Intersect scene must be mark node or group item.")}function kv(t,e,n,r){if(function(t,e,n){return t.bounds&&e.intersects(t.bounds)&&("group"===t.marktype||!1!==t.interactive&&(!n||n(t)))}(t,e,n)){const i=t.items,o=t.marktype,a=i.length;let u=0;if("group"===o)for(;u=0;r--)if(i[r]!=o[r])return!1;for(r=i.length-1;r>=0;r--)if(!Cv(t[n=i[r]],e[n],n))return!1;return typeof t==typeof e}(t,e):t==e)}function Fv(t,e){return Cv(lp(t),lp(e))}const Sv="top",Bv="left",Tv="right",zv="bottom",Nv="start",Ov="middle",Rv="end",Lv="group",Uv="axis",qv="title",Pv="frame",jv="scope",Iv="legend",$v="row-header",Wv="row-footer",Hv="row-title",Yv="column-header",Vv="column-footer",Gv="column-title",Xv="padding",Jv="fit",Zv="fit-x",Qv="fit-y",Kv="none",t_="all",e_="each",n_="flush",r_="column",i_="row";function o_(t){pa.call(this,null,t)}function a_(t,e,n){return e(t.bounds.clear(),t,n)}ut(o_,pa,{transform(t,e){const n=e.dataflow,r=t.mark,i=r.marktype,o=Ym[i],a=o.bound;let u,s=r.bounds;if(o.nested)r.items.length&&n.dirty(r.items[0]),s=a_(r,a),r.items.forEach((t=>{t.bounds.clear().union(s)}));else if(i===Lv||t.modified())switch(e.visit(e.MOD,(t=>n.dirty(t))),s.clear(),r.items.forEach((t=>s.union(a_(t,a)))),r.role){case Uv:case Iv:case qv:e.reflow()}else u=e.changed(e.REM),e.visit(e.ADD,(t=>{s.union(a_(t,a))})),e.visit(e.MOD,(t=>{u=u||s.alignsWith(t.bounds),n.dirty(t),s.union(a_(t,a))})),u&&(s.clear(),r.items.forEach((t=>s.union(t.bounds))));return Dv(r),e.modifies("bounds")}});const u_=":vega_identifier:";function s_(t){pa.call(this,0,t)}function l_(t){pa.call(this,null,t)}function c_(t){pa.call(this,null,t)}s_.Definition={type:"Identifier",metadata:{modifies:!0},params:[{name:"as",type:"string",required:!0}]},ut(s_,pa,{transform(t,e){const n=(i=e.dataflow)._signals[u_]||(i._signals[u_]=i.add(0)),r=t.as;var i;let o=n.value;return e.visit(e.ADD,(t=>t[r]=t[r]||++o)),n.set(this.value=o),e}}),ut(l_,pa,{transform(t,e){let n=this.value;n||(n=e.dataflow.scenegraph().mark(t.markdef,function(t){const e=t.groups,n=t.parent;return e&&1===e.size?e.get(Object.keys(e.object)[0]):e&&n?e.lookup(n):null}(t),t.index),n.group.context=t.context,t.context.group||(t.context.group=n.group),n.source=this.source,n.clip=t.clip,n.interactive=t.interactive,this.value=n);const r=n.marktype===Lv?Kp:Qp;return e.visit(e.ADD,(t=>r.call(t,n))),(t.modified("clip")||t.modified("interactive"))&&(n.clip=t.clip,n.interactive=!!t.interactive,n.zdirty=!0,e.reflow()),n.items=e.source,e}});const f_={parity:t=>t.filter(((t,e)=>e%2?t.opacity=0:1)),greedy:(t,e)=>{let n;return t.filter(((t,r)=>r&&h_(n.bounds,t.bounds,e)?t.opacity=0:(n=t,1)))}},h_=(t,e,n)=>n>Math.max(e.x1-t.x2,t.x1-e.x2,e.y1-t.y2,t.y1-e.y2),d_=(t,e)=>{for(var n,r=1,i=t.length,o=t[0].bounds;r{const e=t.bounds;return e.width()>1&&e.height()>1},g_=t=>(t.forEach((t=>t.opacity=1)),t),m_=(t,e)=>t.reflow(e.modified()).modifies("opacity");function y_(t){pa.call(this,null,t)}ut(c_,pa,{transform(t,e){const n=f_[t.method]||f_.parity,r=t.separation||0;let i,o,a=e.materialize(e.SOURCE).source;if(!a||!a.length)return;if(!t.method)return t.modified("method")&&(g_(a),e=m_(e,t)),e;if(a=a.filter(p_),!a.length)return;if(t.sort&&(a=a.slice().sort(t.sort)),i=g_(a),e=m_(e,t),i.length>=3&&d_(i,r)){do{i=n(i,r)}while(i.length>=3&&d_(i,r));i.length<3&&!M(a).opacity&&(i.length>1&&(M(i).opacity=0),M(a).opacity=1)}t.boundScale&&t.boundTolerance>=0&&(o=((t,e,n)=>{var r=t.range(),i=new Zp;return e===Sv||e===zv?i.set(r[0],-1/0,r[1],1/0):i.set(-1/0,r[0],1/0,r[1]),i.expand(n||1),t=>i.encloses(t.bounds)})(t.boundScale,t.boundOrient,+t.boundTolerance),a.forEach((t=>{o(t)||(t.opacity=0)})));const u=i[0].mark.bounds.clear();return a.forEach((t=>{t.opacity&&u.union(t.bounds)})),e}}),ut(y_,pa,{transform(t,e){const n=e.dataflow;if(e.visit(e.ALL,(t=>n.dirty(t))),e.fields&&e.fields.zindex){const t=e.source&&e.source[0];t&&(t.mark.zdirty=!0)}}});const v_=new Zp;function __(t,e,n){return t[e]===n?0:(t[e]=n,1)}function x_(t){var e=t.items[0].orient;return e===Bv||e===Tv}function b_(t,e,n,r){var i,o,a=e.items[0],u=a.datum,s=null!=a.translate?a.translate:.5,l=a.orient,c=function(t){let e=+t.grid;return[t.ticks?e++:-1,t.labels?e++:-1,e+ +t.domain]}(u),f=a.range,h=a.offset,d=a.position,p=a.minExtent,g=a.maxExtent,m=u.title&&a.items[c[2]].items[0],y=a.titlePadding,v=a.bounds,_=m&&Lm(m),x=0,b=0;switch(v_.clear().union(v),v.clear(),(i=c[0])>-1&&v.union(a.items[i].bounds),(i=c[1])>-1&&v.union(a.items[i].bounds),l){case Sv:x=d||0,b=-h,o=Math.max(p,Math.min(g,-v.y1)),v.add(0,-o).add(f,0),m&&w_(t,m,o,y,_,0,-1,v);break;case Bv:x=-h,b=d||0,o=Math.max(p,Math.min(g,-v.x1)),v.add(-o,0).add(0,f),m&&w_(t,m,o,y,_,1,-1,v);break;case Tv:x=n+h,b=d||0,o=Math.max(p,Math.min(g,v.x2)),v.add(0,0).add(o,f),m&&w_(t,m,o,y,_,1,1,v);break;case zv:x=d||0,b=r+h,o=Math.max(p,Math.min(g,v.y2)),v.add(0,0).add(f,o),m&&w_(t,m,o,y,0,0,1,v);break;default:x=a.x,b=a.y}return rg(v.translate(x,b),a),__(a,"x",x+s)|__(a,"y",b+s)&&(a.bounds=v_,t.dirty(a),a.bounds=v,t.dirty(a)),a.mark.bounds.clear().union(v)}function w_(t,e,n,r,i,o,a,u){const s=e.bounds;if(e.auto){const u=a*(n+i+r);let l=0,c=0;t.dirty(e),o?l=(e.x||0)-(e.x=u):c=(e.y||0)-(e.y=u),e.mark.bounds.clear().union(s.translate(-l,-c)),t.dirty(e)}u.union(s)}const k_=(t,e)=>Math.floor(Math.min(t,e)),M_=(t,e)=>Math.ceil(Math.max(t,e));function A_(t){return(new Zp).set(0,0,t.width||0,t.height||0)}function E_(t){const e=t.bounds.clone();return e.empty()?e.set(0,0,0,0):e.translate(-(t.x||0),-(t.y||0))}function D_(t,e,n){const r=_(t)?t[e]:t;return null!=r?r:void 0!==n?n:0}function C_(t){return t<0?Math.ceil(-t):0}function F_(t,e,n){var r,i,o,a,u,s,l,c,f,h,d,p=!n.nodirty,g=n.bounds===n_?A_:E_,m=v_.set(0,0,0,0),y=D_(n.align,r_),v=D_(n.align,i_),_=D_(n.padding,r_),x=D_(n.padding,i_),b=n.columns||e.length,w=b<=0?1:Math.ceil(e.length/b),k=e.length,M=Array(k),A=Array(b),E=0,D=Array(k),C=Array(w),F=0,S=Array(k),B=Array(k),T=Array(k);for(i=0;i1)for(i=0;i0&&(S[i]+=f/2);if(v&&D_(n.center,i_)&&1!==b)for(i=0;i0&&(B[i]+=h/2);for(i=0;ii&&(t.warn("Grid headers exceed limit: "+i),e=e.slice(0,i)),M+=o,g=0,y=e.length;g=0&&null==(x=n[m]);m-=h);u?(b=null==d?x.x:Math.round(x.bounds.x1+d*x.bounds.width()),w=M):(b=M,w=null==d?x.y:Math.round(x.bounds.y1+d*x.bounds.height())),v.union(_.bounds.translate(b-(_.x||0),w-(_.y||0))),_.x=b,_.y=w,t.dirty(_),A=a(A,v[l])}return A}function N_(t,e,n,r,i,o){if(e){t.dirty(e);var a=n,u=n;r?a=Math.round(i.x1+o*i.width()):u=Math.round(i.y1+o*i.height()),e.bounds.translate(a-(e.x||0),u-(e.y||0)),e.mark.bounds.clear().union(e.bounds),e.x=a,e.y=u,t.dirty(e)}}function O_(t,e,n,r,i,o,a){const u=function(t,e){const n=t[e]||{};return(e,r)=>null!=n[e]?n[e]:null!=t[e]?t[e]:r}(n,e),s=function(t,e){let n=-1/0;return t.forEach((t=>{null!=t.offset&&(n=Math.max(n,t.offset))})),n>-1/0?n:e}(t,u("offset",0)),l=u("anchor",Nv),c=l===Rv?1:l===Ov?.5:0,f={align:e_,bounds:u("bounds",n_),columns:"vertical"===u("direction")?1:t.length,padding:u("margin",8),center:u("center"),nodirty:!0};switch(e){case Bv:f.anchor={x:Math.floor(r.x1)-s,column:Rv,y:c*(a||r.height()+2*r.y1),row:l};break;case Tv:f.anchor={x:Math.ceil(r.x2)+s,y:c*(a||r.height()+2*r.y1),row:l};break;case Sv:f.anchor={y:Math.floor(i.y1)-s,row:Rv,x:c*(o||i.width()+2*i.x1),column:l};break;case zv:f.anchor={y:Math.ceil(i.y2)+s,x:c*(o||i.width()+2*i.x1),column:l};break;case"top-left":f.anchor={x:s,y:s};break;case"top-right":f.anchor={x:o-s,y:s,column:Rv};break;case"bottom-left":f.anchor={x:s,y:a-s,row:Rv};break;case"bottom-right":f.anchor={x:o-s,y:a-s,column:Rv,row:Rv}}return f}function R_(t,e){var n,r,i=e.items[0],o=i.datum,a=i.orient,u=i.bounds,s=i.x,l=i.y;return i._bounds?i._bounds.clear().union(u):i._bounds=u.clone(),u.clear(),function(t,e,n){var r=e.padding,i=r-n.x,o=r-n.y;if(e.datum.title){var a=e.items[1].items[0],u=a.anchor,s=e.titlePadding||0,l=r-a.x,c=r-a.y;switch(a.orient){case Bv:i+=Math.ceil(a.bounds.width())+s;break;case Tv:case zv:break;default:o+=a.bounds.height()+s}switch((i||o)&&U_(t,n,i,o),a.orient){case Bv:c+=L_(e,n,a,u,1,1);break;case Tv:l+=L_(e,n,a,Rv,0,0)+s,c+=L_(e,n,a,u,1,1);break;case zv:l+=L_(e,n,a,u,0,0),c+=L_(e,n,a,Rv,-1,0,1)+s;break;default:l+=L_(e,n,a,u,0,0)}(l||c)&&U_(t,a,l,c),(l=Math.round(a.bounds.x1-r))<0&&(U_(t,n,-l,0),U_(t,a,-l,0))}else(i||o)&&U_(t,n,i,o)}(t,i,i.items[0].items[0]),u=function(t,e){return t.items.forEach((t=>e.union(t.bounds))),e.x1=t.padding,e.y1=t.padding,e}(i,u),n=2*i.padding,r=2*i.padding,u.empty()||(n=Math.ceil(u.width()+n),r=Math.ceil(u.height()+r)),"symbol"===o.type&&function(t){const e=t.reduce(((t,e)=>(t[e.column]=Math.max(e.bounds.x2-e.x,t[e.column]||0),t)),{});t.forEach((t=>{t.width=e[t.column],t.height=t.bounds.y2-t.y}))}(i.items[0].items[0].items[0].items),a!==Kv&&(i.x=s=0,i.y=l=0),i.width=n,i.height=r,rg(u.set(s,l,s+n,l+r),i),i.mark.bounds.clear().union(u),i}function L_(t,e,n,r,i,o,a){const u="symbol"!==t.datum.type,s=n.datum.vgrad,l=(!u||!o&&s||a?e:e.items[0]).bounds[i?"y2":"x2"]-t.padding,c=s&&o?l:0,f=s&&o?0:l,h=i<=0?0:Lm(n);return Math.round(r===Nv?c:r===Rv?f-h:.5*(l-h))}function U_(t,e,n,r){e.x+=n,e.y+=r,e.bounds.translate(n,r),e.mark.bounds.translate(n,r),t.dirty(e)}function q_(t){pa.call(this,null,t)}ut(q_,pa,{transform(t,e){const n=e.dataflow;return t.mark.items.forEach((e=>{t.layout&&S_(n,e,t.layout),function(t,e,n){var r,i,o,a,u,s=e.items,l=Math.max(0,e.width||0),c=Math.max(0,e.height||0),f=(new Zp).set(0,0,l,c),h=f.clone(),d=f.clone(),p=[];for(a=0,u=s.length;a{(o=t.orient||Tv)!==Kv&&(e[o]||(e[o]=[])).push(t)}));for(const r in e){const i=e[r];F_(t,i,O_(i,r,n.legends,h,d,l,c))}p.forEach((e=>{const r=e.bounds;if(r.equals(e._bounds)||(e.bounds=e._bounds,t.dirty(e),e.bounds=r,t.dirty(e)),n.autosize&&n.autosize.type===Jv)switch(e.orient){case Bv:case Tv:f.add(r.x1,0).add(r.x2,0);break;case Sv:case zv:f.add(0,r.y1).add(0,r.y2)}else f.union(r)}))}f.union(h).union(d),r&&f.union(function(t,e,n,r,i){var o,a=e.items[0],u=a.frame,s=a.orient,l=a.anchor,c=a.offset,f=a.padding,h=a.items[0].items[0],d=a.items[1]&&a.items[1].items[0],p=s===Bv||s===Tv?r:n,g=0,m=0,y=0,v=0,_=0;if(u!==Lv?s===Bv?(g=i.y2,p=i.y1):s===Tv?(g=i.y1,p=i.y2):(g=i.x1,p=i.x2):s===Bv&&(g=r,p=0),o=l===Nv?g:l===Rv?p:(g+p)/2,d&&d.text){switch(s){case Sv:case zv:_=h.bounds.height()+f;break;case Bv:v=h.bounds.width()+f;break;case Tv:v=-h.bounds.width()-f}v_.clear().union(d.bounds),v_.translate(v-(d.x||0),_-(d.y||0)),__(d,"x",v)|__(d,"y",_)&&(t.dirty(d),d.bounds.clear().union(v_),d.mark.bounds.clear().union(v_),t.dirty(d)),v_.clear().union(d.bounds)}else v_.clear();switch(v_.union(h.bounds),s){case Sv:m=o,y=i.y1-v_.height()-c;break;case Bv:m=i.x1-v_.width()-c,y=o;break;case Tv:m=i.x2+v_.width()+c,y=o;break;case zv:m=o,y=i.y2+c;break;default:m=a.x,y=a.y}return __(a,"x",m)|__(a,"y",y)&&(v_.translate(m,y),t.dirty(a),a.bounds.clear().union(v_),e.bounds.clear().union(v_),t.dirty(a)),a.bounds}(t,r,l,c,f));e.clip&&f.set(0,0,e.width||0,e.height||0);!function(t,e,n,r){const i=r.autosize||{},o=i.type;if(t._autosize<1||!o)return;let a=t._width,u=t._height,s=Math.max(0,e.width||0),l=Math.max(0,Math.ceil(-n.x1)),c=Math.max(0,e.height||0),f=Math.max(0,Math.ceil(-n.y1));const h=Math.max(0,Math.ceil(n.x2-s)),d=Math.max(0,Math.ceil(n.y2-c));if(i.contains===Xv){const e=t.padding();a-=e.left+e.right,u-=e.top+e.bottom}o===Kv?(l=0,f=0,s=a,c=u):o===Jv?(s=Math.max(0,a-l-h),c=Math.max(0,u-f-d)):o===Zv?(s=Math.max(0,a-l-h),u=c+f+d):o===Qv?(a=s+l+h,c=Math.max(0,u-f-d)):"pad"===o&&(a=s+l+h,u=c+f+d);t._resizeView(a,u,s,c,[l,f],i.resize)}(t,e,f,n)}(n,e,t)})),function(t){return t&&"legend-entry"!==t.mark.role}(t.mark.group)?e.reflow():e}});var P_=Object.freeze({__proto__:null,bound:o_,identifier:s_,mark:l_,overlap:c_,render:y_,viewlayout:q_});function j_(t){pa.call(this,null,t)}function I_(t){pa.call(this,null,t)}function $_(){return Lo({})}function W_(t){pa.call(this,null,t)}function H_(t){pa.call(this,[],t)}ut(j_,pa,{transform(t,e){if(this.value&&!t.modified())return e.StopPropagation;var n=e.dataflow.locale(),r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=this.value,o=t.scale,a=Ld(o,null==t.count?t.values?t.values.length:10:t.count,t.minstep),u=t.format||Pd(n,o,a,t.formatSpecifier,t.formatType,!!t.values),s=t.values?Ud(o,t.values,a):qd(o,a);return i&&(r.rem=i),i=s.map(((t,e)=>Lo({index:e/(s.length-1||1),value:t,label:u(t)}))),t.extra&&i.length&&i.push(Lo({index:-1,extra:{value:i[0].value},label:""})),r.source=i,r.add=i,this.value=i,r}}),ut(I_,pa,{transform(t,e){var n=e.dataflow,r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=t.item||$_,o=t.key||Oo,a=this.value;return v(r.encode)&&(r.encode=null),a&&(t.modified("key")||e.modified(o))&&u("DataJoin does not support modified key function or fields."),a||(e=e.addAll(),this.value=a=function(t){const e=ot().test((t=>t.exit));return e.lookup=n=>e.get(t(n)),e}(o)),e.visit(e.ADD,(t=>{const e=o(t);let n=a.get(e);n?n.exit?(a.empty--,r.add.push(n)):r.mod.push(n):(n=i(t),a.set(e,n),r.add.push(n)),n.datum=t,n.exit=!1})),e.visit(e.MOD,(t=>{const e=o(t),n=a.get(e);n&&(n.datum=t,r.mod.push(n))})),e.visit(e.REM,(t=>{const e=o(t),n=a.get(e);t!==n.datum||n.exit||(r.rem.push(n),n.exit=!0,++a.empty)})),e.changed(e.ADD_MOD)&&r.modifies("datum"),(e.clean()||t.clean&&a.empty>n.cleanThreshold)&&n.runAfter(a.clean),r}}),ut(W_,pa,{transform(t,e){var n=e.fork(e.ADD_REM),r=t.mod||!1,i=t.encoders,o=e.encode;if(v(o)){if(!n.changed()&&!o.every((t=>i[t])))return e.StopPropagation;o=o[0],n.encode=null}var a="enter"===o,u=i.update||g,s=i.enter||g,l=i.exit||g,c=(o&&!a?i[o]:u)||g;if(e.changed(e.ADD)&&(e.visit(e.ADD,(e=>{s(e,t),u(e,t)})),n.modifies(s.output),n.modifies(u.output),c!==g&&c!==u&&(e.visit(e.ADD,(e=>{c(e,t)})),n.modifies(c.output))),e.changed(e.REM)&&l!==g&&(e.visit(e.REM,(e=>{l(e,t)})),n.modifies(l.output)),a||c!==g){const i=e.MOD|(t.modified()?e.REFLOW:0);a?(e.visit(i,(e=>{const i=s(e,t)||r;(c(e,t)||i)&&n.mod.push(e)})),n.mod.length&&n.modifies(s.output)):e.visit(i,(e=>{(c(e,t)||r)&&n.mod.push(e)})),n.mod.length&&n.modifies(c.output)}return n.changed()?n:e.StopPropagation}}),ut(H_,pa,{transform(t,e){if(null!=this.value&&!t.modified())return e.StopPropagation;var n,r,i,o,a,u=e.dataflow.locale(),s=e.fork(e.NO_SOURCE|e.NO_FIELDS),l=this.value,c=t.type||zd,f=t.scale,h=+t.limit,d=Ld(f,null==t.count?5:t.count,t.minstep),p=!!t.values||c===zd,g=t.format||Hd(u,f,d,c,t.formatSpecifier,t.formatType,p),m=t.values||Wd(f,d);return l&&(s.rem=l),c===zd?(h&&m.length>h?(e.dataflow.warn("Symbol legend count exceeds limit, filtering items."),l=m.slice(0,h-1),a=!0):l=m,H(i=t.size)?(t.values||0!==f(l[0])||(l=l.slice(1)),o=l.reduce(((e,n)=>Math.max(e,i(n,t))),0)):i=Z(o=i||8),l=l.map(((e,n)=>Lo({index:n,label:g(e,n,l),value:e,offset:o,size:i(e,t)}))),a&&(a=m[l.length],l.push(Lo({index:l.length,label:"…".concat(m.length-l.length," entries"),value:a,offset:o,size:i(a,t)})))):"gradient"===c?(n=f.domain(),r=Dd(f,n[0],M(n)),m.length<3&&!t.values&&n[0]!==M(n)&&(m=[n[0],M(n)]),l=m.map(((t,e)=>Lo({index:e,label:g(t,e,m),value:t,perc:r(t)})))):(i=m.length-1,r=function(t){const e=t.domain(),n=e.length-1;let r=+e[0],i=+M(e),o=i-r;if(t.type===Zh){const t=n?o/n:.1;r-=t,i+=t,o=i-r}return t=>(t-r)/o}(f),l=m.map(((t,e)=>Lo({index:e,label:g(t,e,m),value:t,perc:e?r(t):0,perc2:e===i?1:r(m[e+1])})))),s.source=l,s.add=l,this.value=l,s}});const Y_=t=>t.source.x,V_=t=>t.source.y,G_=t=>t.target.x,X_=t=>t.target.y;function J_(t){pa.call(this,{},t)}J_.Definition={type:"LinkPath",metadata:{modifies:!0},params:[{name:"sourceX",type:"field",default:"source.x"},{name:"sourceY",type:"field",default:"source.y"},{name:"targetX",type:"field",default:"target.x"},{name:"targetY",type:"field",default:"target.y"},{name:"orient",type:"enum",default:"vertical",values:["horizontal","vertical","radial"]},{name:"shape",type:"enum",default:"line",values:["line","arc","curve","diagonal","orthogonal"]},{name:"require",type:"signal"},{name:"as",type:"string",default:"path"}]},ut(J_,pa,{transform(t,e){var n=t.sourceX||Y_,r=t.sourceY||V_,i=t.targetX||G_,o=t.targetY||X_,a=t.as||"path",s=t.orient||"vertical",l=t.shape||"line",c=tx.get(l+"-"+s)||tx.get(l);return c||u("LinkPath unsupported type: "+t.shape+(t.orient?"-"+t.orient:"")),e.visit(e.SOURCE,(t=>{t[a]=c(n(t),r(t),i(t),o(t))})),e.reflow(t.modified()).modifies(a)}});const Z_=(t,e,n,r)=>"M"+t+","+e+"L"+n+","+r,Q_=(t,e,n,r)=>{var i=n-t,o=r-e,a=Math.sqrt(i*i+o*o)/2;return"M"+t+","+e+"A"+a+","+a+" "+180*Math.atan2(o,i)/Math.PI+" 0 1 "+n+","+r},K_=(t,e,n,r)=>{const i=n-t,o=r-e,a=.2*(i+o),u=.2*(o-i);return"M"+t+","+e+"C"+(t+a)+","+(e+u)+" "+(n+u)+","+(r-a)+" "+n+","+r},tx=ot({line:Z_,"line-radial":(t,e,n,r)=>Z_(e*Math.cos(t),e*Math.sin(t),r*Math.cos(n),r*Math.sin(n)),arc:Q_,"arc-radial":(t,e,n,r)=>Q_(e*Math.cos(t),e*Math.sin(t),r*Math.cos(n),r*Math.sin(n)),curve:K_,"curve-radial":(t,e,n,r)=>K_(e*Math.cos(t),e*Math.sin(t),r*Math.cos(n),r*Math.sin(n)),"orthogonal-horizontal":(t,e,n,r)=>"M"+t+","+e+"V"+r+"H"+n,"orthogonal-vertical":(t,e,n,r)=>"M"+t+","+e+"H"+n+"V"+r,"orthogonal-radial":(t,e,n,r)=>{const i=Math.cos(t),o=Math.sin(t),a=Math.cos(n),u=Math.sin(n);return"M"+e*i+","+e*o+"A"+e+","+e+" 0 0,"+((Math.abs(n-t)>Math.PI?n<=t:n>t)?1:0)+" "+e*a+","+e*u+"L"+r*a+","+r*u},"diagonal-horizontal":(t,e,n,r)=>{const i=(t+n)/2;return"M"+t+","+e+"C"+i+","+e+" "+i+","+r+" "+n+","+r},"diagonal-vertical":(t,e,n,r)=>{const i=(e+r)/2;return"M"+t+","+e+"C"+t+","+i+" "+n+","+i+" "+n+","+r},"diagonal-radial":(t,e,n,r)=>{const i=Math.cos(t),o=Math.sin(t),a=Math.cos(n),u=Math.sin(n),s=(e+r)/2;return"M"+e*i+","+e*o+"C"+s*i+","+s*o+" "+s*a+","+s*u+" "+r*a+","+r*u}});function ex(t){pa.call(this,null,t)}ex.Definition={type:"Pie",metadata:{modifies:!0},params:[{name:"field",type:"field"},{name:"startAngle",type:"number",default:0},{name:"endAngle",type:"number",default:6.283185307179586},{name:"sort",type:"boolean",default:!1},{name:"as",type:"string",array:!0,length:2,default:["startAngle","endAngle"]}]},ut(ex,pa,{transform(t,e){var n,r,i,o=t.as||["startAngle","endAngle"],a=o[0],u=o[1],s=t.field||d,l=t.startAngle||0,c=null!=t.endAngle?t.endAngle:2*Math.PI,f=e.source,h=f.map(s),p=h.length,g=l,m=(c-l)/Le(h),y=Re(p);for(t.sort&&y.sort(((t,e)=>h[t]-h[e])),n=0;nt+(e<0?-1:e>0?1:0)),0))!==e.length&&n.warn("Log scale domain includes zero: "+wt(e)));return e}function ax(t,e,n){return H(t)&&(e||n)?Md(t,ux(e||[0,1],n)):t}function ux(t,e){return e?t.slice().reverse():t}function sx(t){pa.call(this,null,t)}ut(ix,pa,{transform(t,e){var n=e.dataflow,r=this.value,i=function(t){var e,n=t.type,r="";if(n===Vh)return"sequential-linear";(function(t){const e=t.type;return yd(e)&&e!==Hh&&e!==Yh&&(t.scheme||t.range&&t.range.length&&t.range.every(pt))})(t)&&(r=2===(e=t.rawDomain?t.rawDomain.length:t.domain?t.domain.length+ +(null!=t.domainMid):0)?"sequential-":3===e?"diverging-":"");return(r+n||Ph).toLowerCase()}(t);for(i in r&&i===r.type||(this.value=r=pd(i)()),t)if(!rx[i]){if("padding"===i&&nx(r.type))continue;H(r[i])?r[i](t[i]):n.warn("Unsupported scale property: "+i)}return function(t,e,n){var r=t.type,i=e.round||!1,o=e.range;if(null!=e.rangeStep)o=function(t,e,n){t!==td&&t!==Kh&&u("Only band and point scales support rangeStep.");var r=(null!=e.paddingOuter?e.paddingOuter:e.padding)||0,i=t===Kh?1:(null!=e.paddingInner?e.paddingInner:e.padding)||0;return[0,e.rangeStep*qh(n,i,r)]}(r,e,n);else if(e.scheme&&(o=function(t,e,n){var r,i=e.schemeExtent;v(e.scheme)?r=Ad(e.scheme,e.interpolate,e.interpolateGamma):(r=Td(e.scheme.toLowerCase()))||u("Unrecognized scheme name: ".concat(e.scheme));return n=t===Zh?n+1:t===ed?n-1:t===Xh||t===Jh?+e.schemeCount||5:n,bd(t)?ax(r,i,e.reverse):H(r)?Ed(ax(r,i),n):t===Qh?r:r.slice(0,n)}(r,e,n),H(o))){if(t.interpolator)return t.interpolator(o);u("Scale type ".concat(r," does not support interpolating color schemes."))}if(o&&bd(r))return t.interpolator(Ad(ux(o,e.reverse),e.interpolate,e.interpolateGamma));o&&e.interpolate&&t.interpolate?t.interpolate(Cd(e.interpolate,e.interpolateGamma)):H(t.round)?t.round(i):H(t.rangeRound)&&t.interpolate(i?Sf:Ff);o&&t.range(ux(o,e.reverse))}(r,t,function(t,e,n){let r=e.bins;if(r&&!v(r)){const e=t.domain(),n=e[0],i=M(e),o=r.step;let a=null==r.start?n:r.start,s=null==r.stop?i:r.stop;o||u("Scale bins parameter missing step property."),ai&&(s=o*Math.floor(i/o)),r=Re(a,s+o/2,o)}r?t.bins=r:t.bins&&delete t.bins;t.type===ed&&(r?e.domain||e.domainRaw||(t.domain(r),n=r.length):t.bins=t.domain());return n}(r,t,function(t,e,n){const r=function(t,e,n){return e?(t.domain(ox(t.type,e,n)),e.length):-1}(t,e.domainRaw,n);if(r>-1)return r;var i,o,a=e.domain,u=t.type,s=e.zero||void 0===e.zero&&function(t){const e=t.type;return!t.bins&&(e===Ph||e===Ih||e===$h)}(t);if(!a)return 0;nx(u)&&e.padding&&a[0]!==M(a)&&(a=function(t,e,n,r,i,o){var a=Math.abs(M(n)-n[0]),u=a/(a-2*r),s=t===jh?U(e,null,u):t===$h?q(e,null,u,.5):t===Ih?q(e,null,u,i||1):t===Wh?P(e,null,u,o||1):L(e,null,u);return(e=e.slice())[0]=s[0],e[e.length-1]=s[1],e}(u,a,e.range,e.padding,e.exponent,e.constant));if((s||null!=e.domainMin||null!=e.domainMax||null!=e.domainMid)&&(i=(a=a.slice()).length-1||1,s&&(a[0]>0&&(a[0]=0),a[i]<0&&(a[i]=0)),null!=e.domainMin&&(a[0]=e.domainMin),null!=e.domainMax&&(a[i]=e.domainMax),null!=e.domainMid)){const t=(o=e.domainMid)>a[i]?i+1:ot(s);if(null==e)d.push(t.slice());else for(i={},o=0,a=t.length;oh&&(h=f),n&&c.sort(n)}return d.max=h,d}(e.source,t.groupby,l,c),r=0,i=n.length,o=n.max;r0?1:t<0?-1:0},Lx=Math.sqrt,Ux=Math.tan;function qx(t){return t>1?0:t<-1?xx:Math.acos(t)}function Px(t){return t>1?bx:t<-1?-bx:Math.asin(t)}function jx(){}function Ix(t,e){t&&Wx.hasOwnProperty(t.type)&&Wx[t.type](t,e)}var $x={Feature:function(t,e){Ix(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r=0?1:-1,i=r*n,o=Fx(e=(e*=Ax)/2+wx),a=Ox(e),u=Qx*a,s=Zx*o+u*Fx(i),l=u*r*Ox(i);cb.add(Cx(l,s)),Jx=t,Zx=o,Qx=a}function yb(t){return[Cx(t[1],t[0]),Px(t[2])]}function vb(t){var e=t[0],n=t[1],r=Fx(n);return[r*Fx(e),r*Ox(e),Ox(n)]}function _b(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function xb(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function bb(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function wb(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function kb(t){var e=Lx(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}var Mb,Ab,Eb,Db,Cb,Fb,Sb,Bb,Tb,zb,Nb,Ob,Rb,Lb,Ub,qb,Pb={point:jb,lineStart:$b,lineEnd:Wb,polygonStart:function(){Pb.point=Hb,Pb.lineStart=Yb,Pb.lineEnd=Vb,ub=new be,hb.polygonStart()},polygonEnd:function(){hb.polygonEnd(),Pb.point=jb,Pb.lineStart=$b,Pb.lineEnd=Wb,cb<0?(Kx=-(eb=180),tb=-(nb=90)):ub>vx?nb=90:ub<-1e-6&&(tb=-90),lb[0]=Kx,lb[1]=eb},sphere:function(){Kx=-(eb=180),tb=-(nb=90)}};function jb(t,e){sb.push(lb=[Kx=t,eb=t]),enb&&(nb=e)}function Ib(t,e){var n=vb([t*Ax,e*Ax]);if(ab){var r=xb(ab,n),i=xb([r[1],-r[0],0],r);kb(i),i=yb(i);var o,a=t-rb,u=a>0?1:-1,s=i[0]*Mx*u,l=Ex(a)>180;l^(u*rbnb&&(nb=o):l^(u*rb<(s=(s+360)%360-180)&&snb&&(nb=e)),l?tGb(Kx,eb)&&(eb=t):Gb(t,eb)>Gb(Kx,eb)&&(Kx=t):eb>=Kx?(teb&&(eb=t)):t>rb?Gb(Kx,t)>Gb(Kx,eb)&&(eb=t):Gb(t,eb)>Gb(Kx,eb)&&(Kx=t)}else sb.push(lb=[Kx=t,eb=t]);enb&&(nb=e),ab=n,rb=t}function $b(){Pb.point=Ib}function Wb(){lb[0]=Kx,lb[1]=eb,Pb.point=jb,ab=null}function Hb(t,e){if(ab){var n=t-rb;ub.add(Ex(n)>180?n+(n>0?360:-360):n)}else ib=t,ob=e;hb.point(t,e),Ib(t,e)}function Yb(){hb.lineStart()}function Vb(){Hb(ib,ob),hb.lineEnd(),Ex(ub)>vx&&(Kx=-(eb=180)),lb[0]=Kx,lb[1]=eb,ab=null}function Gb(t,e){return(e-=t)<0?e+360:e}function Xb(t,e){return t[0]-e[0]}function Jb(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:exx?t+Math.round(-t/kx)*kx:t,e]}function cw(t,e,n){return(t%=kx)?e||n?sw(hw(t),dw(e,n)):hw(t):e||n?dw(e,n):lw}function fw(t){return function(e,n){return[(e+=t)>xx?e-kx:e<-xx?e+kx:e,n]}}function hw(t){var e=fw(t);return e.invert=fw(-t),e}function dw(t,e){var n=Fx(t),r=Ox(t),i=Fx(e),o=Ox(e);function a(t,e){var a=Fx(e),u=Fx(t)*a,s=Ox(t)*a,l=Ox(e),c=l*n+u*r;return[Cx(s*i-c*o,u*n-l*r),Px(c*i+s*o)]}return a.invert=function(t,e){var a=Fx(e),u=Fx(t)*a,s=Ox(t)*a,l=Ox(e),c=l*i-s*o;return[Cx(s*i+l*o,u*n+c*r),Px(c*n-u*r)]},a}function pw(t,e){(e=vb(e))[0]-=t,kb(e);var n=qx(-e[1]);return((-e[2]<0?-n:n)+kx-vx)%kx}function gw(){var t,e=[];return{point:function(e,n,r){t.push([e,n,r])},lineStart:function(){e.push(t=[])},lineEnd:jx,rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))},result:function(){var n=e;return e=[],t=null,n}}}function mw(t,e){return Ex(t[0]-e[0])=0;--o)i.point((c=l[o])[0],c[1]);else r(h.x,h.p.x,-1,i);h=h.p}l=(h=h.o).z,d=!d}while(!h.v);i.lineEnd()}}}function _w(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r=0?1:-1,E=A*M,D=E>xx,C=m*w;if(s.add(Cx(C*A*Ox(E),y*k+C*Fx(E))),a+=D?M+A*kx:M,D^p>=n^x>=n){var F=xb(vb(d),vb(_));kb(F);var S=xb(o,F);kb(S);var B=(D^M>=0?-1:1)*Px(S[2]);(r>B||r===B&&(F[0]||F[1]))&&(u+=D^M>=0?1:-1)}}return(a<-1e-6||a0){for(f||(i.polygonStart(),f=!0),i.lineStart(),t=0;t1&&2&s&&h.push(h.pop().concat(h.shift())),a.push(h.filter(ww))}return h}}function ww(t){return t.length>1}function kw(t,e){return((t=t.x)[0]<0?t[1]-bx-vx:bx-t[1])-((e=e.x)[0]<0?e[1]-bx-vx:bx-e[1])}lw.invert=lw;var Mw=bw((function(){return!0}),(function(t){var e,n=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(o,a){var u=o>0?xx:-xx,s=Ex(o-n);Ex(s-xx)0?bx:-bx),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(u,r),t.point(o,r),e=0):i!==u&&s>=xx&&(Ex(n-i)vx?Dx((Ox(e)*(o=Fx(r))*Ox(n)-Ox(r)*(i=Fx(e))*Ox(t))/(i*o*a)):(e+r)/2}(n,r,o,a),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(u,r),e=0),t.point(n=o,r=a),i=u},lineEnd:function(){t.lineEnd(),n=r=NaN},clean:function(){return 2-e}}}),(function(t,e,n,r){var i;if(null==t)i=n*bx,r.point(-xx,i),r.point(0,i),r.point(xx,i),r.point(xx,0),r.point(xx,-i),r.point(0,-i),r.point(-xx,-i),r.point(-xx,0),r.point(-xx,i);else if(Ex(t[0]-e[0])>vx){var o=t[0]0,i=Ex(e)>vx;function o(t,n){return Fx(t)*Fx(n)>e}function a(t,n,r){var i=[1,0,0],o=xb(vb(t),vb(n)),a=_b(o,o),u=o[0],s=a-u*u;if(!s)return!r&&t;var l=e*a/s,c=-e*u/s,f=xb(i,o),h=wb(i,l);bb(h,wb(o,c));var d=f,p=_b(h,d),g=_b(d,d),m=p*p-g*(_b(h,h)-1);if(!(m<0)){var y=Lx(m),v=wb(d,(-p-y)/g);if(bb(v,h),v=yb(v),!r)return v;var _,x=t[0],b=n[0],w=t[1],k=n[1];b0^v[1]<(Ex(v[0]-x)xx^(x<=v[0]&&v[0]<=b)){var E=wb(d,(-p+y)/g);return bb(E,h),[v,yb(E)]}}}function u(e,n){var i=r?t:xx-t,o=0;return e<-i?o|=1:e>i&&(o|=2),n<-i?o|=4:n>i&&(o|=8),o}return bw(o,(function(t){var e,n,s,l,c;return{lineStart:function(){l=s=!1,c=1},point:function(f,h){var d,p=[f,h],g=o(f,h),m=r?g?0:u(f,h):g?u(f+(f<0?xx:-xx),h):0;if(!e&&(l=s=g)&&t.lineStart(),g!==s&&(!(d=a(e,p))||mw(e,d)||mw(p,d))&&(p[2]=1),g!==s)c=0,g?(t.lineStart(),d=a(p,e),t.point(d[0],d[1])):(d=a(e,p),t.point(d[0],d[1],2),t.lineEnd()),e=d;else if(i&&e&&r^g){var y;m&n||!(y=a(p,e,!0))||(c=0,r?(t.lineStart(),t.point(y[0][0],y[0][1]),t.point(y[1][0],y[1][1]),t.lineEnd()):(t.point(y[1][0],y[1][1]),t.lineEnd(),t.lineStart(),t.point(y[0][0],y[0][1],3)))}!g||e&&mw(e,p)||t.point(p[0],p[1]),e=p,s=g,n=m},lineEnd:function(){s&&t.lineEnd(),e=null},clean:function(){return c|(l&&s)<<1}}}),(function(e,r,i,o){!function(t,e,n,r,i,o){if(n){var a=Fx(e),u=Ox(e),s=r*n;null==i?(i=e+r*kx,o=e-s/2):(i=pw(a,i),o=pw(a,o),(r>0?io)&&(i+=r*kx));for(var l,c=i;r>0?c>o:c0)do{l.point(0===c||3===c?t:n,c>1?r:e)}while((c=(c+u+4)%4)!==f);else l.point(o[0],o[1])}function a(r,i){return Ex(r[0]-t)0?0:3:Ex(r[0]-n)0?2:1:Ex(r[1]-e)0?1:0:i>0?3:2}function u(t,e){return s(t.x,e.x)}function s(t,e){var n=a(t,1),r=a(e,1);return n!==r?n-r:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(a){var s,l,c,f,h,d,p,g,m,y,v,_=a,x=gw(),b={point:w,lineStart:function(){b.point=k,l&&l.push(c=[]);y=!0,m=!1,p=g=NaN},lineEnd:function(){s&&(k(f,h),d&&m&&x.rejoin(),s.push(x.result()));b.point=w,m&&_.lineEnd()},polygonStart:function(){_=x,s=[],l=[],v=!0},polygonEnd:function(){var e=function(){for(var e=0,n=0,i=l.length;nr&&(h-o)*(r-a)>(d-a)*(t-o)&&++e:d<=r&&(h-o)*(r-a)<(d-a)*(t-o)&&--e;return e}(),n=v&&e,i=(s=Oe(s)).length;(n||i)&&(a.polygonStart(),n&&(a.lineStart(),o(null,null,1,a),a.lineEnd()),i&&vw(s,u,e,o,a),a.polygonEnd());_=a,s=l=c=null}};function w(t,e){i(t,e)&&_.point(t,e)}function k(o,a){var u=i(o,a);if(l&&c.push([o,a]),y)f=o,h=a,d=u,y=!1,u&&(_.lineStart(),_.point(o,a));else if(u&&m)_.point(o,a);else{var s=[p=Math.max(Dw,Math.min(Ew,p)),g=Math.max(Dw,Math.min(Ew,g))],x=[o=Math.max(Dw,Math.min(Ew,o)),a=Math.max(Dw,Math.min(Ew,a))];!function(t,e,n,r,i,o){var a,u=t[0],s=t[1],l=0,c=1,f=e[0]-u,h=e[1]-s;if(a=n-u,f||!(a>0)){if(a/=f,f<0){if(a0){if(a>c)return;a>l&&(l=a)}if(a=i-u,f||!(a<0)){if(a/=f,f<0){if(a>c)return;a>l&&(l=a)}else if(f>0){if(a0)){if(a/=h,h<0){if(a0){if(a>c)return;a>l&&(l=a)}if(a=o-s,h||!(a<0)){if(a/=h,h<0){if(a>c)return;a>l&&(l=a)}else if(h>0){if(a0&&(t[0]=u+l*f,t[1]=s+l*h),c<1&&(e[0]=u+c*f,e[1]=s+c*h),!0}}}}}(s,x,t,e,n,r)?u&&(_.lineStart(),_.point(o,a),v=!1):(m||(_.lineStart(),_.point(s[0],s[1])),_.point(x[0],x[1]),u||_.lineEnd(),v=!1)}p=o,g=a,m=u}return b}}function Fw(t,e,n){var r=Re(t,e-vx,n).concat(e);return function(t){return r.map((function(e){return[t,e]}))}}function Sw(t,e,n){var r=Re(t,e-vx,n).concat(e);return function(t){return r.map((function(e){return[e,t]}))}}var Bw,Tw,zw,Nw,Ow=t=>t,Rw=new be,Lw=new be,Uw={point:jx,lineStart:jx,lineEnd:jx,polygonStart:function(){Uw.lineStart=qw,Uw.lineEnd=Iw},polygonEnd:function(){Uw.lineStart=Uw.lineEnd=Uw.point=jx,Rw.add(Ex(Lw)),Lw=new be},result:function(){var t=Rw/2;return Rw=new be,t}};function qw(){Uw.point=Pw}function Pw(t,e){Uw.point=jw,Bw=zw=t,Tw=Nw=e}function jw(t,e){Lw.add(Nw*t-zw*e),zw=t,Nw=e}function Iw(){jw(Bw,Tw)}var $w=1/0,Ww=$w,Hw=-$w,Yw=Hw,Vw={point:function(t,e){t<$w&&($w=t);t>Hw&&(Hw=t);eYw&&(Yw=e)},lineStart:jx,lineEnd:jx,polygonStart:jx,polygonEnd:jx,result:function(){var t=[[$w,Ww],[Hw,Yw]];return Hw=Yw=-(Ww=$w=1/0),t}};var Gw,Xw,Jw,Zw,Qw=0,Kw=0,tk=0,ek=0,nk=0,rk=0,ik=0,ok=0,ak=0,uk={point:sk,lineStart:lk,lineEnd:hk,polygonStart:function(){uk.lineStart=dk,uk.lineEnd=pk},polygonEnd:function(){uk.point=sk,uk.lineStart=lk,uk.lineEnd=hk},result:function(){var t=ak?[ik/ak,ok/ak]:rk?[ek/rk,nk/rk]:tk?[Qw/tk,Kw/tk]:[NaN,NaN];return Qw=Kw=tk=ek=nk=rk=ik=ok=ak=0,t}};function sk(t,e){Qw+=t,Kw+=e,++tk}function lk(){uk.point=ck}function ck(t,e){uk.point=fk,sk(Jw=t,Zw=e)}function fk(t,e){var n=t-Jw,r=e-Zw,i=Lx(n*n+r*r);ek+=i*(Jw+t)/2,nk+=i*(Zw+e)/2,rk+=i,sk(Jw=t,Zw=e)}function hk(){uk.point=sk}function dk(){uk.point=gk}function pk(){mk(Gw,Xw)}function gk(t,e){uk.point=mk,sk(Gw=Jw=t,Xw=Zw=e)}function mk(t,e){var n=t-Jw,r=e-Zw,i=Lx(n*n+r*r);ek+=i*(Jw+t)/2,nk+=i*(Zw+e)/2,rk+=i,ik+=(i=Zw*t-Jw*e)*(Jw+t),ok+=i*(Zw+e),ak+=3*i,sk(Jw=t,Zw=e)}function yk(t){this._context=t}yk.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,kx)}},result:jx};var vk,_k,xk,bk,wk,kk=new be,Mk={point:jx,lineStart:function(){Mk.point=Ak},lineEnd:function(){vk&&Ek(_k,xk),Mk.point=jx},polygonStart:function(){vk=!0},polygonEnd:function(){vk=null},result:function(){var t=+kk;return kk=new be,t}};function Ak(t,e){Mk.point=Ek,_k=bk=t,xk=wk=e}function Ek(t,e){bk-=t,wk-=e,kk.add(Lx(bk*bk+wk*wk)),bk=t,wk=e}function Dk(){this._string=[]}function Ck(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function Fk(t,e){var n,r,i=4.5;function o(t){return t&&("function"==typeof i&&r.pointRadius(+i.apply(this,arguments)),Vx(t,n(r))),r.result()}return o.area=function(t){return Vx(t,n(Uw)),Uw.result()},o.measure=function(t){return Vx(t,n(Mk)),Mk.result()},o.bounds=function(t){return Vx(t,n(Vw)),Vw.result()},o.centroid=function(t){return Vx(t,n(uk)),uk.result()},o.projection=function(e){return arguments.length?(n=null==e?(t=null,Ow):(t=e).stream,o):t},o.context=function(t){return arguments.length?(r=null==t?(e=null,new Dk):new yk(e=t),"function"!=typeof i&&r.pointRadius(i),o):e},o.pointRadius=function(t){return arguments.length?(i="function"==typeof t?t:(r.pointRadius(+t),+t),o):i},o.projection(t).context(e)}function Sk(t){return function(e){var n=new Bk;for(var r in t)n[r]=t[r];return n.stream=e,n}}function Bk(){}function Tk(t,e,n){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),Vx(n,t.stream(Vw)),e(Vw.result()),null!=r&&t.clipExtent(r),t}function zk(t,e,n){return Tk(t,(function(n){var r=e[1][0]-e[0][0],i=e[1][1]-e[0][1],o=Math.min(r/(n[1][0]-n[0][0]),i/(n[1][1]-n[0][1])),a=+e[0][0]+(r-o*(n[1][0]+n[0][0]))/2,u=+e[0][1]+(i-o*(n[1][1]+n[0][1]))/2;t.scale(150*o).translate([a,u])}),n)}function Nk(t,e,n){return zk(t,[[0,0],e],n)}function Ok(t,e,n){return Tk(t,(function(n){var r=+e,i=r/(n[1][0]-n[0][0]),o=(r-i*(n[1][0]+n[0][0]))/2,a=-i*n[0][1];t.scale(150*i).translate([o,a])}),n)}function Rk(t,e,n){return Tk(t,(function(n){var r=+e,i=r/(n[1][1]-n[0][1]),o=-i*n[0][0],a=(r-i*(n[1][1]+n[0][1]))/2;t.scale(150*i).translate([o,a])}),n)}Dk.prototype={_radius:4.5,_circle:Ck(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._string.push("M",t,",",e),this._point=1;break;case 1:this._string.push("L",t,",",e);break;default:null==this._circle&&(this._circle=Ck(this._radius)),this._string.push("M",t,",",e,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}},Bk.prototype={constructor:Bk,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var Lk=Fx(30*Ax);function Uk(t,e){return+e?function(t,e){function n(r,i,o,a,u,s,l,c,f,h,d,p,g,m){var y=l-r,v=c-i,_=y*y+v*v;if(_>4*e&&g--){var x=a+h,b=u+d,w=s+p,k=Lx(x*x+b*b+w*w),M=Px(w/=k),A=Ex(Ex(w)-1)e||Ex((y*F+v*S)/_-.5)>.3||a*h+u*d+s*p2?t[2]%360*Ax:0,F()):[m*Mx,y*Mx,v*Mx]},D.angle=function(t){return arguments.length?(_=t%360*Ax,F()):_*Mx},D.reflectX=function(t){return arguments.length?(x=t?-1:1,F()):x<0},D.reflectY=function(t){return arguments.length?(b=t?-1:1,F()):b<0},D.precision=function(t){return arguments.length?(a=Uk(u,E=t*t),S()):Lx(E)},D.fitExtent=function(t,e){return zk(D,t,e)},D.fitSize=function(t,e){return Nk(D,t,e)},D.fitWidth=function(t,e){return Ok(D,t,e)},D.fitHeight=function(t,e){return Rk(D,t,e)},function(){return e=t.apply(this,arguments),D.invert=e.invert&&C,F()}}function $k(t){var e=0,n=xx/3,r=Ik(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*Ax,n=t[1]*Ax):[e*Mx,n*Mx]},i}function Wk(t,e){var n=Ox(t),r=(n+Ox(e))/2;if(Ex(r)2?t[2]*Ax:0),e.invert=function(e){return(e=t.invert(e[0]*Ax,e[1]*Ax))[0]*=Mx,e[1]*=Mx,e},e}(i.rotate()).invert([0,0]));return s(null==l?[[u[0]-o,u[1]-o],[u[0]+o,u[1]+o]]:t===Zk?[[Math.max(u[0]-o,l),e],[Math.min(u[0]+o,n),r]]:[[l,Math.max(u[1]-o,e)],[n,Math.min(u[1]+o,r)]])}return i.scale=function(t){return arguments.length?(a(t),c()):a()},i.translate=function(t){return arguments.length?(u(t),c()):u()},i.center=function(t){return arguments.length?(o(t),c()):o()},i.clipExtent=function(t){return arguments.length?(null==t?l=e=n=r=null:(l=+t[0][0],e=+t[0][1],n=+t[1][0],r=+t[1][1]),c()):null==l?null:[[l,e],[n,r]]},c()}function Kk(t){return Ux((bx+t)/2)}function tM(t,e){var n=Fx(t),r=t===e?Ox(t):zx(n/Fx(e))/zx(Kk(e)/Kk(t)),i=n*Nx(Kk(t),r)/r;if(!r)return Zk;function o(t,e){i>0?e<-bx+vx&&(e=-bx+vx):e>bx-vx&&(e=bx-vx);var n=i/Nx(Kk(e),r);return[n*Ox(r*t),i-n*Fx(r*t)]}return o.invert=function(t,e){var n=i-e,o=Rx(r)*Lx(t*t+n*n),a=Cx(t,Ex(n))*Rx(n);return n*r<0&&(a-=xx*Rx(t)*Rx(n)),[a/r,2*Dx(Nx(i/o,1/r))-bx]},o}function eM(t,e){return[t,e]}function nM(t,e){var n=Fx(t),r=t===e?Ox(t):(n-Fx(e))/(e-t),i=n/r+t;if(Ex(r)vx&&--i>0);return[t/(.8707+(o=r*r)*(o*(o*o*o*(.003971-.001529*o)-.013791)-.131979)),r]},fM.invert=Gk(Px),hM.invert=Gk((function(t){return 2*Dx(t)})),dM.invert=function(t,e){return[-e,2*Dx(Bx(t))-bx]};var pM=Math.abs,gM=Math.cos,mM=Math.sin,yM=Math.PI,vM=yM/2,_M=function(t){return t>0?Math.sqrt(t):0}(2);function xM(t){return t>1?vM:t<-1?-vM:Math.asin(t)}function bM(t,e){var n,r=t*mM(e),i=30;do{e-=n=(e+mM(e)-r)/(1+gM(e))}while(pM(n)>1e-6&&--i>0);return e/2}var wM=function(t,e,n){function r(r,i){return[t*r*gM(i=bM(n,i)),e*mM(i)]}return r.invert=function(r,i){return i=xM(i/e),[r/(t*gM(i)),xM((2*i+mM(2*i))/n)]},r}(_M/vM,_M,yM);const kM=Fk(),MM=["clipAngle","clipExtent","scale","translate","center","rotate","parallels","precision","reflectX","reflectY","coefficient","distance","fraction","lobes","parallel","radius","ratio","spacing","tilt"];function AM(t,e){return function n(){const r=e();return r.type=t,r.path=Fk().projection(r),r.copy=r.copy||function(){const t=n();return MM.forEach((e=>{r[e]&&t[e](r[e]())})),t.path.pointRadius(r.path.pointRadius()),t},r}}function EM(t,e){if(!t||"string"!=typeof t)throw new Error("Projection type must be a name string.");return t=t.toLowerCase(),arguments.length>1?(CM[t]=AM(t,e),this):CM[t]||null}function DM(t){return t&&t.path||kM}const CM={albers:Yk,albersusa:function(){var t,e,n,r,i,o,a=Yk(),u=Hk().rotate([154,0]).center([-2,58.5]).parallels([55,65]),s=Hk().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(t,e){o=[t,e]}};function c(t){var e=t[0],a=t[1];return o=null,n.point(e,a),o||(r.point(e,a),o)||(i.point(e,a),o)}function f(){return t=e=null,c}return c.invert=function(t){var e=a.scale(),n=a.translate(),r=(t[0]-n[0])/e,i=(t[1]-n[1])/e;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?u:i>=.166&&i<.234&&r>=-.214&&r<-.115?s:a).invert(t)},c.stream=function(n){return t&&e===n?t:(r=[a.stream(e=n),u.stream(n),s.stream(n)],i=r.length,t={point:function(t,e){for(var n=-1;++n2?t[2]+90:90]):[(t=n())[0],t[1],t[2]-90]},n([0,0,90]).scale(159.155)}};for(const t in CM)EM(t,CM[t]);function FM(){}const SM=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]];function BM(){var t=1,e=1,n=a;function r(t,e){return e.map((e=>i(t,e)))}function i(r,i){var a=[],u=[];return function(n,r,i){var a,u,s,l,c,f,h=new Array,d=new Array;a=u=-1,l=n[0]>=r,SM[l<<1].forEach(p);for(;++a=r,SM[s|l<<1].forEach(p);SM[l<<0].forEach(p);for(;++u=r,c=n[u*t]>=r,SM[l<<1|c<<2].forEach(p);++a=r,f=c,c=n[u*t+a+1]>=r,SM[s|l<<1|c<<2|f<<3].forEach(p);SM[l|c<<3].forEach(p)}a=-1,c=n[u*t]>=r,SM[c<<2].forEach(p);for(;++a=r,SM[c<<2|f<<3].forEach(p);function p(t){var e,n,r=[t[0][0]+a,t[0][1]+u],s=[t[1][0]+a,t[1][1]+u],l=o(r),c=o(s);(e=d[l])?(n=h[c])?(delete d[e.end],delete h[n.start],e===n?(e.ring.push(s),i(e.ring)):h[e.start]=d[n.end]={start:e.start,end:n.end,ring:e.ring.concat(n.ring)}):(delete d[e.end],e.ring.push(s),d[e.end=c]=e):(e=h[c])?(n=d[l])?(delete h[e.start],delete d[n.end],e===n?(e.ring.push(s),i(e.ring)):h[n.start]=d[e.end]={start:n.start,end:e.end,ring:n.ring.concat(e.ring)}):(delete h[e.start],e.ring.unshift(r),h[e.start=l]=e):h[l]=d[c]={start:l,end:c,ring:[r,s]}}SM[c<<3].forEach(p)}(r,i,(t=>{n(t,r,i),function(t){var e=0,n=t.length,r=t[n-1][1]*t[0][0]-t[n-1][0]*t[0][1];for(;++e0?a.push([t]):u.push(t)})),u.forEach((t=>{for(var e,n=0,r=a.length;n{var o,a=n[0],u=n[1],s=0|a,l=0|u,c=r[l*t+s];a>0&&a0&&u=0&&o>=0||u("invalid size"),t=i,e=o,r},r.smooth=function(t){return arguments.length?(n=t?a:FM,r):n===a},r}function TM(t,e){for(var n,r=-1,i=e.length;++rr!=d>r&&n<(h-l)*(r-c)/(d-c)+l&&(i=-i)}return i}function NM(t,e,n){var r,i,o,a;return function(t,e,n){return(e[0]-t[0])*(n[1]-t[1])==(n[0]-t[0])*(e[1]-t[1])}(t,e,n)&&(i=t[r=+(t[0]===e[0])],o=n[r],a=e[r],i<=o&&o<=a||a<=o&&o<=i)}function OM(t,e,n){return function(r){var i=tt(r),o=n?Math.min(i[0],0):i[0],a=i[1],u=a-o,s=e?De(o,a,t):u/(t+1);return Re(s,a,s)}}function RM(t){pa.call(this,null,t)}function LM(t,e,n,r,i){const o=t.x1||0,a=t.y1||0,u=e*n<0;function s(t){t.forEach(l)}function l(t){u&&t.reverse(),t.forEach(c)}function c(t){t[0]=(t[0]-o)*e+r,t[1]=(t[1]-a)*n+i}return function(t){return t.coordinates.forEach(s),t}}function UM(t,e,n){const r=t>=0?t:ba(e,n);return Math.round((Math.sqrt(4*r*r+1)-1)/2)}function qM(t){return H(t)?t:Z(+t)}function PM(){var t=t=>t[0],e=t=>t[1],n=d,r=[-1,-1],i=960,o=500,a=2;function s(u,s){const l=UM(r[0],u,t)>>a,c=UM(r[1],u,e)>>a,f=l?l+2:0,h=c?c+2:0,d=2*f+(i>>a),p=2*h+(o>>a),g=new Float32Array(d*p),m=new Float32Array(d*p);let y=g;u.forEach((r=>{const i=f+(+t(r)>>a),o=h+(+e(r)>>a);i>=0&&i=0&&o0&&c>0?(jM(d,p,g,m,l),IM(d,p,m,g,c),jM(d,p,g,m,l),IM(d,p,m,g,c),jM(d,p,g,m,l),IM(d,p,m,g,c)):l>0?(jM(d,p,g,m,l),jM(d,p,m,g,l),jM(d,p,g,m,l),y=m):c>0&&(IM(d,p,g,m,c),IM(d,p,m,g,c),IM(d,p,g,m,c),y=m);const v=s?Math.pow(2,-2*a):1/Le(y);for(let t=0,e=d*p;t>a),y2:h+(o>>a)}}return s.x=function(e){return arguments.length?(t=qM(e),s):t},s.y=function(t){return arguments.length?(e=qM(t),s):e},s.weight=function(t){return arguments.length?(n=qM(t),s):n},s.size=function(t){if(!arguments.length)return[i,o];var e=+t[0],n=+t[1];return e>=0&&n>=0||u("invalid size"),i=e,o=n,s},s.cellSize=function(t){return arguments.length?((t=+t)>=1||u("invalid cell size"),a=Math.floor(Math.log(t)/Math.LN2),s):1<=i&&(e>=o&&(u-=n[e-o+a*t]),r[e-i+a*t]=u/Math.min(e+1,t-1+o-e,o))}function IM(t,e,n,r,i){const o=1+(i<<1);for(let a=0;a=i&&(u>=o&&(s-=n[a+(u-o)*t]),r[a+(u-i)*t]=s/Math.min(u+1,e-1+o-u,o))}function $M(t){pa.call(this,null,t)}RM.Definition={type:"Isocontour",metadata:{generates:!0},params:[{name:"field",type:"field"},{name:"thresholds",type:"number",array:!0},{name:"levels",type:"number"},{name:"nice",type:"boolean",default:!1},{name:"resolve",type:"enum",values:["shared","independent"],default:"independent"},{name:"zero",type:"boolean",default:!0},{name:"smooth",type:"boolean",default:!0},{name:"scale",type:"number",expr:!0},{name:"translate",type:"number",array:!0,expr:!0},{name:"as",type:"string",null:!0,default:"contour"}]},ut(RM,pa,{transform(t,e){if(this.value&&!e.changed()&&!t.modified())return e.StopPropagation;var n=e.fork(e.NO_SOURCE|e.NO_FIELDS),r=e.materialize(e.SOURCE).source,i=t.field||f,o=BM().smooth(!1!==t.smooth),a=t.thresholds||function(t,e,n){const r=OM(n.levels||10,n.nice,!1!==n.zero);return"shared"!==n.resolve?r:r(t.map((t=>Ce(e(t).values))))}(r,i,t),u=null===t.as?null:t.as||"contour",s=[];return r.forEach((e=>{const n=i(e),r=o.size([n.width,n.height])(n.values,v(a)?a:a(n.values));!function(t,e,n,r){let i=r.scale||e.scale,o=r.translate||e.translate;H(i)&&(i=i(n,r));H(o)&&(o=o(n,r));if((1===i||null==i)&&!o)return;const a=(ht(i)?i:i[0])||1,u=(ht(i)?i:i[1])||1,s=o&&o[0]||0,l=o&&o[1]||0;t.forEach(LM(e,a,u,s,l))}(r,n,e,t),r.forEach((t=>{s.push(qo(e,Lo(null!=u?{[u]:t}:t)))}))})),this.value&&(n.rem=this.value),this.value=n.source=n.add=s,n}}),$M.Definition={type:"KDE2D",metadata:{generates:!0},params:[{name:"size",type:"number",array:!0,length:2,required:!0},{name:"x",type:"field",required:!0},{name:"y",type:"field",required:!0},{name:"weight",type:"field"},{name:"groupby",type:"field",array:!0},{name:"cellSize",type:"number"},{name:"bandwidth",type:"number",array:!0,length:2},{name:"counts",type:"boolean",default:!1},{name:"as",type:"string",default:"grid"}]};const WM=["x","y","weight","size","cellSize","bandwidth"];function HM(t,e){return WM.forEach((n=>null!=e[n]?t[n](e[n]):0)),t}function YM(t){pa.call(this,null,t)}ut($M,pa,{transform(t,e){if(this.value&&!e.changed()&&!t.modified())return e.StopPropagation;var r,i=e.fork(e.NO_SOURCE|e.NO_FIELDS),o=function(t,e){var n,r,i,o,a,u,s=[],l=t=>t(o);if(null==e)s.push(t);else for(n={},r=0,i=t.length;rLo(function(t,e){for(let n=0;nvx})).map(s)).concat(Re(Sx(o/d)*d,i,d).filter((function(t){return Ex(t%g)>vx})).map(l))}return y.lines=function(){return v().map((function(t){return{type:"LineString",coordinates:t}}))},y.outline=function(){return{type:"Polygon",coordinates:[c(r).concat(f(a).slice(1),c(n).reverse().slice(1),f(u).reverse().slice(1))]}},y.extent=function(t){return arguments.length?y.extentMajor(t).extentMinor(t):y.extentMinor()},y.extentMajor=function(t){return arguments.length?(r=+t[0][0],n=+t[1][0],u=+t[0][1],a=+t[1][1],r>n&&(t=r,r=n,n=t),u>a&&(t=u,u=a,a=t),y.precision(m)):[[r,u],[n,a]]},y.extentMinor=function(n){return arguments.length?(e=+n[0][0],t=+n[1][0],o=+n[0][1],i=+n[1][1],e>t&&(n=e,e=t,t=n),o>i&&(n=o,o=i,i=n),y.precision(m)):[[e,o],[t,i]]},y.step=function(t){return arguments.length?y.stepMajor(t).stepMinor(t):y.stepMinor()},y.stepMajor=function(t){return arguments.length?(p=+t[0],g=+t[1],y):[p,g]},y.stepMinor=function(t){return arguments.length?(h=+t[0],d=+t[1],y):[h,d]},y.precision=function(h){return arguments.length?(m=+h,s=Fw(o,i,90),l=Sw(e,t,m),c=Fw(u,a,90),f=Sw(r,n,m),y):m},y.extentMajor([[-180,-89.999999],[180,89.999999]]).extentMinor([[-180,-80.000001],[180,80.000001]])}()}function tA(t){pa.call(this,null,t)}function eA(t){if(!H(t))return!1;const e=Dt(r(t));return e.$x||e.$y||e.$value||e.$max}function nA(t){pa.call(this,null,t),this.modified(!0)}function rA(t,e,n){H(t[e])&&t[e](n)}XM.Definition={type:"GeoJSON",metadata:{},params:[{name:"fields",type:"field",array:!0,length:2},{name:"geojson",type:"field"}]},ut(XM,pa,{transform(t,e){var n,i=this._features,o=this._points,a=t.fields,u=a&&a[0],s=a&&a[1],l=t.geojson||!a&&f,c=e.ADD;n=t.modified()||e.changed(e.REM)||e.modified(r(l))||u&&e.modified(r(u))||s&&e.modified(r(s)),this.value&&!n||(c=e.SOURCE,this._features=i=[],this._points=o=[]),l&&e.visit(c,(t=>i.push(l(t)))),u&&s&&(e.visit(c,(t=>{var e=u(t),n=s(t);null!=e&&null!=n&&(e=+e)===e&&(n=+n)===n&&o.push([e,n])})),i=i.concat({type:VM,geometry:{type:"MultiPoint",coordinates:o}})),this.value={type:GM,features:i}}}),JM.Definition={type:"GeoPath",metadata:{modifies:!0},params:[{name:"projection",type:"projection"},{name:"field",type:"field"},{name:"pointRadius",type:"number",expr:!0},{name:"as",type:"string",default:"path"}]},ut(JM,pa,{transform(t,e){var n=e.fork(e.ALL),r=this.value,i=t.field||f,o=t.as||"path",a=n.SOURCE;!r||t.modified()?(this.value=r=DM(t.projection),n.materialize().reflow()):a=i===f||e.modified(i.fields)?n.ADD_MOD:n.ADD;const u=function(t,e){const n=t.pointRadius();t.context(null),null!=e&&t.pointRadius(e);return n}(r,t.pointRadius);return n.visit(a,(t=>t[o]=r(i(t)))),r.pointRadius(u),n.modifies(o)}}),ZM.Definition={type:"GeoPoint",metadata:{modifies:!0},params:[{name:"projection",type:"projection",required:!0},{name:"fields",type:"field",array:!0,required:!0,length:2},{name:"as",type:"string",array:!0,length:2,default:["x","y"]}]},ut(ZM,pa,{transform(t,e){var n,r=t.projection,i=t.fields[0],o=t.fields[1],a=t.as||["x","y"],u=a[0],s=a[1];function l(t){const e=r([i(t),o(t)]);e?(t[u]=e[0],t[s]=e[1]):(t[u]=void 0,t[s]=void 0)}return t.modified()?e=e.materialize().reflow(!0).visit(e.SOURCE,l):(n=e.modified(i.fields)||e.modified(o.fields),e.visit(n?e.ADD_MOD:e.ADD,l)),e.modifies(a)}}),QM.Definition={type:"GeoShape",metadata:{modifies:!0,nomod:!0},params:[{name:"projection",type:"projection"},{name:"field",type:"field",default:"datum"},{name:"pointRadius",type:"number",expr:!0},{name:"as",type:"string",default:"shape"}]},ut(QM,pa,{transform(t,e){var n=e.fork(e.ALL),r=this.value,i=t.as||"shape",o=n.ADD;return r&&!t.modified()||(this.value=r=function(t,e,n){const r=null==n?n=>t(e(n)):r=>{var i=t.pointRadius(),o=t.pointRadius(n)(e(r));return t.pointRadius(i),o};return r.context=e=>(t.context(e),r),r}(DM(t.projection),t.field||l("datum"),t.pointRadius),n.materialize().reflow(),o=n.SOURCE),n.visit(o,(t=>t[i]=r)),n.modifies(i)}}),KM.Definition={type:"Graticule",metadata:{changes:!0,generates:!0},params:[{name:"extent",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"extentMajor",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"extentMinor",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"step",type:"number",array:!0,length:2},{name:"stepMajor",type:"number",array:!0,length:2,default:[90,360]},{name:"stepMinor",type:"number",array:!0,length:2,default:[10,10]},{name:"precision",type:"number",default:2.5}]},ut(KM,pa,{transform(t,e){var n,r=this.value,i=this.generator;if(!r.length||t.modified())for(const e in t)H(i[e])&&i[e](t[e]);return n=i(),r.length?e.mod.push(Po(r[0],n)):e.add.push(Lo(n)),r[0]=n,e}}),tA.Definition={type:"heatmap",metadata:{modifies:!0},params:[{name:"field",type:"field"},{name:"color",type:"string",expr:!0},{name:"opacity",type:"number",expr:!0},{name:"resolve",type:"enum",values:["shared","independent"],default:"independent"},{name:"as",type:"string",default:"image"}]},ut(tA,pa,{transform(t,e){if(!e.changed()&&!t.modified())return e.StopPropagation;var n=e.materialize(e.SOURCE).source,r="shared"===t.resolve,i=t.field||f,o=function(t,e){let n;H(t)?(n=n=>t(n,e),n.dep=eA(t)):t?n=Z(t):(n=t=>t.$value/t.$max||0,n.dep=!0);return n}(t.opacity,t),a=function(t,e){let n;H(t)?(n=n=>wc(t(n,e)),n.dep=eA(t)):n=Z(wc(t||"#888"));return n}(t.color,t),u=t.as||"image",s={$x:0,$y:0,$value:0,$max:r?Ce(n.map((t=>Ce(i(t).values)))):0};return n.forEach((t=>{const e=i(t),n=K({},t,s);r||(n.$max=Ce(e.values||[])),t[u]=function(t,e,n,r){const i=t.width,o=t.height,a=t.x1||0,u=t.y1||0,s=t.x2||i,l=t.y2||o,c=t.values,f=c?t=>c[t]:h,d=Gl(s-a,l-u),p=d.getContext("2d"),g=p.getImageData(0,0,s-a,l-u),m=g.data;for(let t=u,o=0;t{null!=t[e]&&rA(n,e,t[e])}))):MM.forEach((e=>{t.modified(e)&&rA(n,e,t[e])})),null!=t.pointRadius&&n.path.pointRadius(t.pointRadius),t.fit&&function(t,e){const n=function(t){return 1===(t=$(t)).length?t[0]:{type:GM,features:t.reduce(((t,e)=>t.concat(function(t){return t.type===GM?t.features:$(t).filter((t=>null!=t)).map((t=>t.type===VM?t:{type:VM,geometry:t}))}(e))),[])}}(e.fit);e.extent?t.fitExtent(e.extent,n):e.size&&t.fitSize(e.size,n)}(n,t),e.fork(e.NO_SOURCE|e.NO_FIELDS)}});var iA=Object.freeze({__proto__:null,contour:YM,geojson:XM,geopath:JM,geopoint:ZM,geoshape:QM,graticule:KM,heatmap:tA,isocontour:RM,kde2d:$M,projection:nA});function oA(t,e,n,r){if(isNaN(e)||isNaN(n))return t;var i,o,a,u,s,l,c,f,h,d=t._root,p={data:r},g=t._x0,m=t._y0,y=t._x1,v=t._y1;if(!d)return t._root=p,t;for(;d.length;)if((l=e>=(o=(g+y)/2))?g=o:y=o,(c=n>=(a=(m+v)/2))?m=a:v=a,i=d,!(d=d[f=c<<1|l]))return i[f]=p,t;if(u=+t._x.call(null,d.data),s=+t._y.call(null,d.data),e===u&&n===s)return p.next=d,i?i[f]=p:t._root=p,t;do{i=i?i[f]=new Array(4):t._root=new Array(4),(l=e>=(o=(g+y)/2))?g=o:y=o,(c=n>=(a=(m+v)/2))?m=a:v=a}while((f=c<<1|l)==(h=(s>=a)<<1|u>=o));return i[h]=d,i[f]=p,t}function aA(t,e,n,r,i){this.node=t,this.x0=e,this.y0=n,this.x1=r,this.y1=i}function uA(t){return t[0]}function sA(t){return t[1]}function lA(t,e,n){var r=new cA(null==e?uA:e,null==n?sA:n,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function cA(t,e,n,r,i,o){this._x=t,this._y=e,this._x0=n,this._y0=r,this._x1=i,this._y1=o,this._root=void 0}function fA(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var hA=lA.prototype=cA.prototype;function dA(t){return function(){return t}}function pA(t){return 1e-6*(t()-.5)}function gA(t){return t.x+t.vx}function mA(t){return t.y+t.vy}function yA(t){return t.index}function vA(t,e){var n=t.get(e);if(!n)throw new Error("node not found: "+e);return n}hA.copy=function(){var t,e,n=new cA(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return n;if(!r.length)return n._root=fA(r),n;for(t=[{source:r,target:n._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(e=r.source[i])&&(e.length?t.push({source:e,target:r.target[i]=new Array(4)}):r.target[i]=fA(e));return n},hA.add=function(t){const e=+this._x.call(null,t),n=+this._y.call(null,t);return oA(this.cover(e,n),e,n,t)},hA.addAll=function(t){var e,n,r,i,o=t.length,a=new Array(o),u=new Array(o),s=1/0,l=1/0,c=-1/0,f=-1/0;for(n=0;nc&&(c=r),if&&(f=i));if(s>c||l>f)return this;for(this.cover(s,l).cover(c,f),n=0;nt||t>=i||r>e||e>=o;)switch(u=(eh||(o=s.y0)>d||(a=s.x1)=y)<<1|t>=m)&&(s=p[p.length-1],p[p.length-1]=p[p.length-1-l],p[p.length-1-l]=s)}else{var v=t-+this._x.call(null,g.data),_=e-+this._y.call(null,g.data),x=v*v+_*_;if(x=(u=(p+m)/2))?p=u:m=u,(c=a>=(s=(g+y)/2))?g=s:y=s,e=d,!(d=d[f=c<<1|l]))return this;if(!d.length)break;(e[f+1&3]||e[f+2&3]||e[f+3&3])&&(n=e,h=f)}for(;d.data!==t;)if(r=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,r?(i?r.next=i:delete r.next,this):e?(i?e[f]=i:delete e[f],(d=e[0]||e[1]||e[2]||e[3])&&d===(e[3]||e[2]||e[1]||e[0])&&!d.length&&(n?n[h]=d:this._root=d),this):(this._root=i,this)},hA.removeAll=function(t){for(var e=0,n=t.length;e{}};function xA(){for(var t,e=0,n=arguments.length,r={};e=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function kA(t,e){for(var n,r=0,i=t.length;r0)for(var n,r,i=new Array(n),o=0;o=0&&e._call.call(null,t),e=e._next;--DA}()}finally{DA=0,function(){var t,e,n=AA,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:AA=e);EA=t,jA(r)}(),BA=0}}function PA(){var t=zA.now(),e=t-SA;e>1e3&&(TA-=e,SA=t)}function jA(t){DA||(CA&&(CA=clearTimeout(CA)),t-BA>24?(t<1/0&&(CA=setTimeout(qA,t-zA.now()-TA)),FA&&(FA=clearInterval(FA))):(FA||(SA=zA.now(),FA=setInterval(PA,1e3)),DA=1,NA(qA)))}LA.prototype=UA.prototype={constructor:LA,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?OA():+n)+(null==e?0:+e),this._next||EA===this||(EA?EA._next=this:AA=this,EA=this),this._call=t,this._time=n,jA()},stop:function(){this._call&&(this._call=null,this._time=1/0,jA())}};const IA=4294967296;function $A(t){return t.x}function WA(t){return t.y}var HA=Math.PI*(3-Math.sqrt(5));function YA(t){var e,n=1,r=.001,i=1-Math.pow(r,1/300),o=0,a=.6,u=new Map,s=UA(f),l=xA("tick","end"),c=function(){let t=1;return()=>(t=(1664525*t+1013904223)%IA)/IA}();function f(){h(),l.call("tick",e),n1?(null==n?u.delete(t):u.set(t,p(n)),e):u.get(t)},find:function(e,n,r){var i,o,a,u,s,l=0,c=t.length;for(null==r?r=1/0:r*=r,l=0;l1?(l.on(t,n),e):l.on(t)}}}const VA={center:function(t,e){var n,r=1;function i(){var i,o,a=n.length,u=0,s=0;for(i=0;il+p||oc+p||as.index){var g=l-u.x-u.vx,m=c-u.y-u.vy,y=g*g+m*m;yt.r&&(t.r=t[e].r)}function s(){if(e){var r,i,o=e.length;for(n=new Array(o),r=0;r=u)){(t.data!==e||t.next)&&(0===f&&(p+=(f=pA(n))*f),0===h&&(p+=(h=pA(n))*h),p[u(t,e,r),t])));for(a=0,i=new Array(l);ae(t,n):e)}QA.Definition={type:"Force",metadata:{modifies:!0},params:[{name:"static",type:"boolean",default:!1},{name:"restart",type:"boolean",default:!1},{name:"iterations",type:"number",default:300},{name:"alpha",type:"number",default:1},{name:"alphaMin",type:"number",default:.001},{name:"alphaTarget",type:"number",default:0},{name:"velocityDecay",type:"number",default:.4},{name:"forces",type:"param",array:!0,params:[{key:{force:"center"},params:[{name:"x",type:"number",default:0},{name:"y",type:"number",default:0}]},{key:{force:"collide"},params:[{name:"radius",type:"number",expr:!0},{name:"strength",type:"number",default:.7},{name:"iterations",type:"number",default:1}]},{key:{force:"nbody"},params:[{name:"strength",type:"number",default:-30},{name:"theta",type:"number",default:.9},{name:"distanceMin",type:"number",default:1},{name:"distanceMax",type:"number"}]},{key:{force:"link"},params:[{name:"links",type:"data"},{name:"id",type:"field"},{name:"distance",type:"number",default:30,expr:!0},{name:"strength",type:"number",expr:!0},{name:"iterations",type:"number",default:1}]},{key:{force:"x"},params:[{name:"strength",type:"number",default:.1},{name:"x",type:"field"}]},{key:{force:"y"},params:[{name:"strength",type:"number",default:.1},{name:"y",type:"field"}]}]},{name:"as",type:"string",array:!0,modify:!1,default:ZA}]},ut(QA,pa,{transform(t,e){var n,r,i=this.value,o=e.changed(e.ADD_REM),a=t.modified(XA),u=t.iterations||300;if(i?(o&&(e.modifies("index"),i.nodes(e.source)),(a||e.changed(e.MOD))&&KA(i,t,0,e)):(this.value=i=function(t,e){const n=YA(t),r=n.stop,i=n.restart;let o=!1;return n.stopped=()=>o,n.restart=()=>(o=!1,i()),n.stop=()=>(o=!0,r()),KA(n,e,!0).on("end",(()=>o=!0))}(e.source,t),i.on("tick",(n=e.dataflow,r=this,()=>n.touch(r).run())),t.static||(o=!0,i.tick()),e.modifies("index")),a||o||t.modified(JA)||e.changed()&&t.restart)if(i.alpha(Math.max(i.alpha(),t.alpha||1)).alphaDecay(1-Math.pow(i.alphaMin(),1/u)),t.static)for(i.stop();--u>=0;)i.tick();else if(i.stopped()&&i.restart(),!o)return e.StopPropagation;return this.finish(t,e)},finish(t,e){const n=e.dataflow;for(let t,e=this._argops,u=0,s=e.length;u=0;)e+=n[r].value;else e=1;t.value=e}function sE(t,e){t instanceof Map?(t=[void 0,t],void 0===e&&(e=cE)):void 0===e&&(e=lE);for(var n,r,i,o,a,u=new dE(t),s=[u];n=s.pop();)if((i=e(n.data))&&(a=(i=Array.from(i)).length))for(n.children=i,o=a-1;o>=0;--o)s.push(r=i[o]=new dE(i[o])),r.parent=n,r.depth=n.depth+1;return u.eachBefore(hE)}function lE(t){return t.children}function cE(t){return Array.isArray(t)?t[1]:null}function fE(t){void 0!==t.data.value&&(t.value=t.data.value),t.data=t.data.data}function hE(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function dE(t){this.data=t,this.depth=this.height=0,this.parent=null}function pE(t){for(var e,n,r=0,i=(t=function(t){for(var e,n,r=t.length;r;)n=Math.random()*r--|0,e=t[r],t[r]=t[n],t[n]=e;return t}(Array.from(t))).length,o=[];r0&&n*n>r*r+i*i}function vE(t,e){for(var n=0;n(a*=a)?(r=(l+a-i)/(2*l),o=Math.sqrt(Math.max(0,a/l-r*r)),n.x=t.x-r*u-o*s,n.y=t.y-r*s+o*u):(r=(l+i-a)/(2*l),o=Math.sqrt(Math.max(0,i/l-r*r)),n.x=e.x+r*u-o*s,n.y=e.y+r*s+o*u)):(n.x=e.x+n.r,n.y=e.y)}function kE(t,e){var n=t.r+e.r-1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function ME(t){var e=t._,n=t.next._,r=e.r+n.r,i=(e.x*n.r+n.x*e.r)/r,o=(e.y*n.r+n.y*e.r)/r;return i*i+o*o}function AE(t){this._=t,this.next=null,this.previous=null}function EE(t){if(!(i=(t=function(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}(t)).length))return 0;var e,n,r,i,o,a,u,s,l,c,f;if((e=t[0]).x=0,e.y=0,!(i>1))return e.r;if(n=t[1],e.x=-n.r,n.x=e.r,n.y=0,!(i>2))return e.r+n.r;wE(n,e,r=t[2]),e=new AE(e),n=new AE(n),r=new AE(r),e.next=r.previous=n,n.next=e.previous=r,r.next=n.previous=e;t:for(u=3;u=0;--r)o.push(n[r]);return this},find:function(t,e){let n=-1;for(const r of this)if(t.call(e,r,++n,this))return r},sum:function(t){return this.eachAfter((function(e){for(var n=+t(e.data)||0,r=e.children,i=r&&r.length;--i>=0;)n+=r[i].value;e.value=n}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),i=null;t=n.pop(),e=r.pop();for(;t===e;)i=t,t=n.pop(),e=r.pop();return i}(e,t),r=[e];e!==n;)e=e.parent,r.push(e);for(var i=r.length;t!==n;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){return Array.from(this)},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(n){n!==t&&e.push({source:n.parent,target:n})})),e},copy:function(){return sE(this).eachBefore(fE)},[Symbol.iterator]:function*(){var t,e,n,r,i=this,o=[i];do{for(t=o.reverse(),o=[];i=t.pop();)if(yield i,e=i.children)for(n=0,r=e.length;n0)throw new Error("cycle");return o}return n.id=function(e){return arguments.length?(t=CE(e),n):t},n.parentId=function(t){return arguments.length?(e=CE(t),n):e},n}function IE(t,e){return t.parent===e.parent?1:2}function $E(t){var e=t.children;return e?e[0]:t.t}function WE(t){var e=t.children;return e?e[e.length-1]:t.t}function HE(t,e,n){var r=n/(e.i-t.i);e.c-=r,e.s+=n,t.c+=r,e.z+=n,e.m+=n}function YE(t,e,n){return t.a.parent===e.parent?t.a:n}function VE(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}function GE(t,e,n,r,i){for(var o,a=t.children,u=-1,s=a.length,l=t.value&&(i-n)/t.value;++uh&&(h=u),m=c*c*g,(d=Math.max(h/m,m/f))>p){c-=u;break}p=d}y.push(a={value:c,dice:s1?e:1)},n}(XE);var QE=function t(e){function n(t,n,r,i,o){if((a=t._squarify)&&a.ratio===e)for(var a,u,s,l,c,f=-1,h=a.length,d=t.value;++f1?e:1)},n}(XE);function KE(t,e,n){const r={};return t.each((t=>{const i=t.data;n(i)&&(r[e(i)]=t)})),t.lookup=r,t}function tD(t){pa.call(this,null,t)}tD.Definition={type:"Nest",metadata:{treesource:!0,changes:!0},params:[{name:"keys",type:"field",array:!0},{name:"generate",type:"boolean"}]};const eD=t=>t.values;function nD(){const t=[],e={entries:t=>r(n(t,0),0),key:n=>(t.push(n),e)};function n(e,r){if(r>=t.length)return e;const i=e.length,o=t[r++],a={},u={};let s,l,c,f=-1;for(;++ft.length)return e;const i=[];for(const t in e)i.push({key:t,values:r(e[t],n)});return i}return e}function rD(t){pa.call(this,null,t)}ut(tD,pa,{transform(t,e){e.source||u("Nest transform requires an upstream data source.");var n=t.generate,r=t.modified(),i=e.clone(),o=this.value;return(!o||r||e.changed())&&(o&&o.each((t=>{t.children&&No(t.data)&&i.rem.push(t.data)})),this.value=o=sE({values:$(t.keys).reduce(((t,e)=>(t.key(e),t)),nD()).entries(i.source)},eD),n&&o.each((t=>{t.children&&(t=Lo(t.data),i.add.push(t),i.source.push(t))})),KE(o,Oo,Oo)),i.source.root=o,i}});const iD=(t,e)=>t.parent===e.parent?1:2;ut(rD,pa,{transform(t,e){e.source&&e.source.root||u(this.constructor.name+" transform requires a backing tree data source.");const n=this.layout(t.method),r=this.fields,i=e.source.root,o=t.as||r;t.field?i.sum(t.field):i.count(),t.sort&&i.sort(jo(t.sort,(t=>t.data))),function(t,e,n){for(let r,i=0,o=e.length;ifunction(t,e,n){const r=t.data,i=e.length-1;for(let o=0;o=0;--i)u.push(n=e.children[i]=new VE(r[i],i)),n.parent=e;return(a.parent=new VE(null,0)).children=[a],a}(i);if(s.eachAfter(o),s.parent.m=-s.z,s.eachBefore(a),r)i.eachBefore(u);else{var l=i,c=i,f=i;i.eachBefore((function(t){t.xc.x&&(c=t),t.depth>f.depth&&(f=t)}));var h=l===c?1:t(l,c)/2,d=h-l.x,p=e/(c.x+h+d),g=n/(f.depth||1);i.eachBefore((function(t){t.x=(t.x+d)*p,t.y=t.depth*g}))}return i}function o(e){var n=e.children,r=e.parent.children,i=e.i?r[e.i-1]:null;if(n){!function(t){for(var e,n=0,r=0,i=t.children,o=i.length;--o>=0;)(e=i[o]).z+=n,e.m+=n,n+=e.s+(r+=e.c)}(e);var o=(n[0].z+n[n.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-o):e.z=o}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,n,r){if(n){for(var i,o=e,a=e,u=n,s=o.parent.children[0],l=o.m,c=a.m,f=u.m,h=s.m;u=WE(u),o=$E(o),u&&o;)s=$E(s),(a=WE(a)).a=e,(i=u.z+f-o.z-l+t(u._,o._))>0&&(HE(YE(u,e,r),e,i),l+=i,c+=i),f+=u.m,l+=o.m,h+=s.m,c+=a.m;u&&!WE(a)&&(a.t=u,a.m+=f-c),o&&!$E(s)&&(s.t=o,s.m+=l-h,r=e)}return r}(e,i,e.parent.A||r[0])}function a(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function u(t){t.x*=e,t.y=t.depth*n}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i},cluster:function(){var t=iE,e=1,n=1,r=!1;function i(i){var o,a=0;i.eachAfter((function(e){var n=e.children;n?(e.x=function(t){return t.reduce(oE,0)/t.length}(n),e.y=function(t){return 1+t.reduce(aE,0)}(n)):(e.x=o?a+=t(e,o):0,e.y=0,o=e)}));var u=function(t){for(var e;e=t.children;)t=e[0];return t}(i),s=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(i),l=u.x-t(u,s)/2,c=s.x+t(s,u)/2;return i.eachAfter(r?function(t){t.x=(t.x-i.x)*e,t.y=(i.y-t.y)*n}:function(t){t.x=(t.x-l)/(c-l)*e,t.y=(1-(i.y?t.y/i.y:1))*n})}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i}},fD=["x","y","depth","children"];function hD(t){rD.call(this,t)}function dD(t){pa.call(this,[],t)}hD.Definition={type:"Tree",metadata:{tree:!0,modifies:!0},params:[{name:"field",type:"field"},{name:"sort",type:"compare"},{name:"method",type:"enum",default:"tidy",values:["tidy","cluster"]},{name:"size",type:"number",array:!0,length:2},{name:"nodeSize",type:"number",array:!0,length:2},{name:"separation",type:"boolean",default:!0},{name:"as",type:"string",array:!0,length:fD.length,default:fD}]},ut(hD,rD,{layout(t){const e=t||"tidy";if(rt(cD,e))return cD[e]();u("Unrecognized Tree layout method: "+e)},params:["size","nodeSize"],fields:fD}),dD.Definition={type:"TreeLinks",metadata:{tree:!0,generates:!0,changes:!0},params:[]},ut(dD,pa,{transform(t,e){const n=this.value,r=e.source&&e.source.root,i=e.fork(e.NO_SOURCE),o={};return r||u("TreeLinks transform requires a tree data source."),e.changed(e.ADD_REM)?(i.rem=n,e.visit(e.SOURCE,(t=>o[Oo(t)]=1)),r.each((t=>{const e=t.data,n=t.parent&&t.parent.data;n&&o[Oo(e)]&&o[Oo(n)]&&i.add.push(Lo({source:n,target:e}))})),this.value=i.add):e.changed(e.MOD)&&(e.visit(e.MOD,(t=>o[Oo(t)]=1)),n.forEach((t=>{(o[Oo(t.source)]||o[Oo(t.target)])&&i.mod.push(t)}))),i}});const pD={binary:function(t,e,n,r,i){var o,a,u=t.children,s=u.length,l=new Array(s+1);for(l[0]=a=o=0;o=n-1){var c=u[e];return c.x0=i,c.y0=o,c.x1=a,void(c.y1=s)}var f=l[e],h=r/2+f,d=e+1,p=n-1;for(;d>>1;l[g]s-o){var v=r?(i*y+a*m)/r:a;t(e,d,m,i,o,v,s),t(d,n,y,v,o,a,s)}else{var _=r?(o*y+s*m)/r:s;t(e,d,m,i,o,a,_),t(d,n,y,i,_,a,s)}}(0,s,t.value,e,n,r,i)},dice:RE,slice:GE,slicedice:function(t,e,n,r,i){(1&t.depth?GE:RE)(t,e,n,r,i)},squarify:ZE,resquarify:QE},gD=["x0","y0","x1","y1","depth","children"];function mD(t){rD.call(this,t)}mD.Definition={type:"Treemap",metadata:{tree:!0,modifies:!0},params:[{name:"field",type:"field"},{name:"sort",type:"compare"},{name:"method",type:"enum",default:"squarify",values:["squarify","resquarify","binary","dice","slice","slicedice"]},{name:"padding",type:"number",default:0},{name:"paddingInner",type:"number",default:0},{name:"paddingOuter",type:"number",default:0},{name:"paddingTop",type:"number",default:0},{name:"paddingRight",type:"number",default:0},{name:"paddingBottom",type:"number",default:0},{name:"paddingLeft",type:"number",default:0},{name:"ratio",type:"number",default:1.618033988749895},{name:"round",type:"boolean",default:!1},{name:"size",type:"number",array:!0,length:2},{name:"as",type:"string",array:!0,length:gD.length,default:gD}]},ut(mD,rD,{layout(){const t=function(){var t=ZE,e=!1,n=1,r=1,i=[0],o=FE,a=FE,u=FE,s=FE,l=FE;function c(t){return t.x0=t.y0=0,t.x1=n,t.y1=r,t.eachBefore(f),i=[0],e&&t.eachBefore(OE),t}function f(e){var n=i[e.depth],r=e.x0+n,c=e.y0+n,f=e.x1-n,h=e.y1-n;f{const n=t.tile();n.ratio&&t.tile(n.ratio(e))},t.method=e=>{rt(pD,e)?t.tile(pD[e]):u("Unrecognized Treemap layout method: "+e)},t},params:["method","ratio","size","round","padding","paddingInner","paddingOuter","paddingTop","paddingRight","paddingBottom","paddingLeft"],fields:gD});var yD=Object.freeze({__proto__:null,nest:tD,pack:aD,partition:sD,stratify:lD,tree:hD,treelinks:dD,treemap:mD});function vD(t,e,n,r){const i=t.width,o=t.height,a=n||r,u=Gl(i,o).getContext("2d");e.forEach((t=>_D(u,t,a)));const s=new Uint32Array(u.getImageData(0,0,i,o).data.buffer),l=t.bitmap(),c=a&&t.bitmap();let f,h,d,p,g;for(h=0;h{e.items.forEach((e=>_D(t,e.items,n)))})):Ym[r].draw(t,{items:n?e.map(xD):e})}function xD(t){const e=qo(t,{});return e.stroke&&(e.strokeOpacity=1),e.fill&&(e.fillOpacity=.0625,e.stroke="#000",e.strokeOpacity=1,e.strokeWidth=2),e}const bD=31,wD=new Uint32Array(33),kD=new Uint32Array(33);kD[0]=0,wD[0]=~kD[0];for(let t=1;t<=32;++t)kD[t]=kD[t-1]<<1|1,wD[t]=~kD[t];function MD(t,e,n){const r=Math.max(1,Math.sqrt(t*e/1e6)),i=~~((t+2*n+r)/r),o=~~((e+2*n+r)/r),a=t=>~~((t+n)/r);return a.invert=t=>t*r-n,a.bitmap=()=>function(t,e){const n=new Uint32Array(~~((t*e+32)/32));function r(t,e){n[t]|=e}function i(t,e){n[t]&=e}return{array:n,get:(e,r)=>{const i=r*t+e;return n[i>>>5]&1<<(i&bD)},set:(e,n)=>{const i=n*t+e;r(i>>>5,1<<(i&bD))},clear:(e,n)=>{const r=n*t+e;i(r>>>5,~(1<<(r&bD)))},getRange:(e,r,i,o)=>{let a,u,s,l,c=o;for(;c>=r;--c)if(a=c*t+e,u=c*t+i,s=a>>>5,l=u>>>5,s===l){if(n[s]&wD[a&bD]&kD[1+(u&bD)])return!0}else{if(n[s]&wD[a&bD])return!0;if(n[l]&kD[1+(u&bD)])return!0;for(let t=s+1;t{let a,u,s,l,c;for(;n<=o;++n)if(a=n*t+e,u=n*t+i,s=a>>>5,l=u>>>5,s===l)r(s,wD[a&bD]&kD[1+(u&bD)]);else for(r(s,wD[a&bD]),r(l,kD[1+(u&bD)]),c=s+1;c{let a,u,s,l,c;for(;n<=o;++n)if(a=n*t+e,u=n*t+r,s=a>>>5,l=u>>>5,s===l)i(s,kD[a&bD]|wD[1+(u&bD)]);else for(i(s,kD[a&bD]),i(l,wD[1+(u&bD)]),c=s+1;cn<0||r<0||o>=e||i>=t}}(i,o),a.ratio=r,a.padding=n,a.width=t,a.height=e,a}function AD(t,e,n,r,i,o){let a=n/2;return t-a<0||t+a>i||e-(a=r/2)<0||e+a>o}function ED(t,e,n,r,i,o,a,u){const s=i*o/(2*r),l=t(e-s),c=t(e+s),f=t(n-(o/=2)),h=t(n+o);return a.outOfBounds(l,f,c,h)||a.getRange(l,f,c,h)||u&&u.getRange(l,f,c,h)}const DD=[-1,-1,1,1],CD=[-1,1,-1,1];const FD=["right","center","left"],SD=["bottom","middle","top"];function BD(t,e,n,r,i,o,a,u,s,l,c,f){return!(i.outOfBounds(t,n,e,r)||(f&&o?o.getRange(t,n,e,r)||!function(t,e,n,r,i){return i[0]<=t&&n<=i[2]&&i[3]<=e&&r<=i[5]}(a,s,u,l,c):i.getRange(t,n,e,r)))}const TD={"top-left":0,top:1,"top-right":2,left:4,middle:5,right:6,"bottom-left":8,bottom:9,"bottom-right":10},zD={naive:function(t,e,n,r){const i=t.width,o=t.height;return function(t){const e=t.datum.datum.items[r].items,n=e.length,a=t.datum.fontSize,u=Cm.width(t.datum,t.datum.text);let s,l,c,f,h,d,p,g=0;for(let r=0;r=g&&(g=p,t.x=h,t.y=d);return h=u/2,d=a/2,s=t.x-h,l=t.x+h,c=t.y-d,f=t.y+d,t.align="center",s<0&&l<=i?t.align="left":0<=s&&i=1;)h=(d+p)/2,ED(t,c,f,l,s,h,a,u)?p=h:d=h;if(d>r)return[c,f,d,!0]}}return function(e){const u=e.datum.datum.items[r].items,l=u.length,c=e.datum.fontSize,f=Cm.width(e.datum,e.datum.text);let h,d,p,g,m,y,v,_,x,b,w,k,M,A,E,D,C,F=n?c:0,S=!1,B=!1,T=0;for(let r=0;rd&&(C=h,h=d,d=C),p>g&&(C=p,p=g,g=C),x=t(h),w=t(d),b=~~((x+w)/2),k=t(p),A=t(g),M=~~((k+A)/2),v=b;v>=x;--v)for(_=M;_>=k;--_)D=s(v,_,F,f,c),D&&([e.x,e.y,F,S]=D);for(v=b;v<=w;++v)for(_=M;_<=A;++_)D=s(v,_,F,f,c),D&&([e.x,e.y,F,S]=D);S||n||(E=Math.abs(d-h+g-p),m=(h+d)/2,y=(p+g)/2,E>=T&&!AD(m,y,f,c,i,o)&&!ED(t,m,y,c,f,c,a,null)&&(T=E,e.x=m,e.y=y,B=!0))}return!(!S&&!B)&&(m=f/2,y=c/2,a.setRange(t(e.x-m),t(e.y-y),t(e.x+m),t(e.y+y)),e.align="center",e.baseline="middle",!0)}},floodfill:function(t,e,n,r){const i=t.width,o=t.height,a=e[0],u=e[1],s=t.bitmap();return function(e){const l=e.datum.datum.items[r].items,c=l.length,f=e.datum.fontSize,h=Cm.width(e.datum,e.datum.text),d=[];let p,g,m,y,v,_,x,b,w,k,M,A,E=n?f:0,D=!1,C=!1,F=0;for(let r=0;r=1;)M=(w+k)/2,ED(t,v,_,f,h,M,a,u)?k=M:w=M;w>E&&(e.x=v,e.y=_,E=w,D=!0)}}D||n||(A=Math.abs(g-p+y-m),v=(p+g)/2,_=(m+y)/2,A>=F&&!AD(v,_,h,f,i,o)&&!ED(t,v,_,f,h,f,a,null)&&(F=A,e.x=v,e.y=_,C=!0))}return!(!D&&!C)&&(v=h/2,_=f/2,a.setRange(t(e.x-v),t(e.y-_),t(e.x+v),t(e.y+_)),e.align="center",e.baseline="middle",!0)}}};function ND(t,e,n,r,i,o,a,u,s,l,c){if(!t.length)return t;const f=Math.max(r.length,i.length),h=function(t,e){const n=new Float64Array(e),r=t.length;for(let e=0;e[t.x,t.x,t.x,t.y,t.y,t.y];return t?"line"===t||"area"===t?t=>i(t.datum):"line"===e?t=>{const e=t.datum.items[r].items;return i(e.length?e["start"===n?0:e.length-1]:{x:NaN,y:NaN})}:t=>{const e=t.datum.bounds;return[e.x1,(e.x1+e.x2)/2,e.x2,e.y1,(e.y1+e.y2)/2,e.y2]}:i}(p,g,u,s),v=MD(e[0],e[1],l),_=m&&"naive"===c;var x;const b=t.map((t=>({datum:t,opacity:0,x:void 0,y:void 0,align:void 0,baseline:void 0,boundary:y(t)})));let w;if(!_){n&&b.sort(((t,e)=>n(t.datum,e.datum)));let e=!1;for(let t=0;tt.datum))].concat(o)),w=o.length?vD(v,o,e,m):function(t,e){const n=t.bitmap();return(e||[]).forEach((e=>n.set(t(e.boundary[0]),t(e.boundary[3])))),[n,void 0]}(v,a&&b)}const k=m?zD[c](v,w,a,s):function(t,e,n,r){const i=t.width,o=t.height,a=e[0],u=e[1],s=r.length;return function(e){const l=e.boundary,c=e.datum.fontSize;if(l[2]<0||l[5]<0||l[0]>i||l[3]>o)return!1;let f,h,d,p,g,m,y,v,_,x,b,w,k,M,A,E=0;for(let i=0;i>>2&3)-1,d=0===f&&0===h||r[i]<0,p=f&&h?Math.SQRT1_2:1,g=r[i]<0?-1:1,m=l[1+f]+r[i]*f*p,b=l[4+h]+g*c*h/2+r[i]*h*p,v=b-c/2,_=b+c/2,w=t(m),M=t(v),A=t(_),!E){if(!BD(w,w,M,A,a,u,m,m,v,_,l,d))continue;E=Cm.width(e.datum,e.datum.text)}if(x=m+g*E*f/2,m=x-E/2,y=x+E/2,w=t(m),k=t(y),BD(w,k,M,A,a,u,m,y,v,_,l,d))return e.x=f?f*g<0?y:m:x,e.y=h?h*g<0?_:v:b,e.align=FD[f*g+1],e.baseline=SD[h*g+1],a.setRange(w,M,k,A),!0}return!1}}(v,w,d,h);return b.forEach((t=>t.opacity=+k(t))),b}const OD=["x","y","opacity","align","baseline"],RD=["top-left","left","bottom-left","top","bottom","top-right","right","bottom-right"];function LD(t){pa.call(this,null,t)}LD.Definition={type:"Label",metadata:{modifies:!0},params:[{name:"size",type:"number",array:!0,length:2,required:!0},{name:"sort",type:"compare"},{name:"anchor",type:"string",array:!0,default:RD},{name:"offset",type:"number",array:!0,default:[1]},{name:"padding",type:"number",default:0},{name:"lineAnchor",type:"string",values:["start","end"],default:"end"},{name:"markIndex",type:"number",default:0},{name:"avoidBaseMark",type:"boolean",default:!0},{name:"avoidMarks",type:"data",array:!0},{name:"method",type:"string",default:"naive"},{name:"as",type:"string",array:!0,length:OD.length,default:OD}]},ut(LD,pa,{transform(t,e){const n=t.modified();if(!(n||e.changed(e.ADD_REM)||function(n){const r=t[n];return H(r)&&e.modified(r.fields)}("sort")))return;t.size&&2===t.size.length||u("Size parameter should be specified as a [width, height] array.");const r=t.as||OD;return ND(e.materialize(e.SOURCE).source,t.size,t.sort,$(t.offset||1),$(t.anchor||RD),t.avoidMarks||[],!1!==t.avoidBaseMark,t.lineAnchor||"end",t.markIndex||0,t.padding||0,t.method||"naive").forEach((t=>{const e=t.datum;e[r[0]]=t.x,e[r[1]]=t.y,e[r[2]]=t.opacity,e[r[3]]=t.align,e[r[4]]=t.baseline})),e.reflow(n).modifies(r)}});var UD=Object.freeze({__proto__:null,label:LD});function qD(t,e){var n,r,i,o,a,u,s=[],l=function(t){return t(o)};if(null==e)s.push(t);else for(n={},r=0,i=t.length;r{nu(e,t.x,t.y,t.bandwidth||.3).forEach((t=>{const n={};for(let t=0;t"poly"===t?e:"quad"===t?2:1)(a,s),c=t.as||[n(t.x),n(t.y)],f=jD[a],h=[];let d=t.extent;rt(jD,a)||u("Invalid regression method: "+a),null!=d&&"log"===a&&d[0]<=0&&(e.dataflow.warn("Ignoring extent with values <= 0 for log regression."),d=null),i.forEach((n=>{if(n.length<=l)return void e.dataflow.warn("Skipping regression with more parameters than data points.");const r=f(n,t.x,t.y,s);if(t.params)return void h.push(Lo({keys:n.dims,coef:r.coef,rSquared:r.rSquared}));const i=d||tt(n,t.x),u=t=>{const e={};for(let t=0;tu([t,r.predict(t)]))):au(r.predict,i,25,200).forEach(u)})),this.value&&(r.rem=this.value),this.value=r.add=r.source=h}return r}});var $D=Object.freeze({__proto__:null,loess:PD,regression:ID});const WD=Math.pow(2,-52),HD=new Uint32Array(512);class YD{static from(t,e=tC,n=eC){const r=t.length,i=new Float64Array(2*r);for(let o=0;o>1;if(e>0&&"number"!=typeof t[0])throw new Error("Expected coords to contain numbers.");this.coords=t;const n=Math.max(2*e-5,0);this._triangles=new Uint32Array(3*n),this._halfedges=new Int32Array(3*n),this._hashSize=Math.ceil(Math.sqrt(e)),this._hullPrev=new Uint32Array(e),this._hullNext=new Uint32Array(e),this._hullTri=new Uint32Array(e),this._hullHash=new Int32Array(this._hashSize).fill(-1),this._ids=new Uint32Array(e),this._dists=new Float64Array(e),this.update()}update(){const{coords:t,_hullPrev:e,_hullNext:n,_hullTri:r,_hullHash:i}=this,o=t.length>>1;let a=1/0,u=1/0,s=-1/0,l=-1/0;for(let e=0;es&&(s=n),r>l&&(l=r),this._ids[e]=e}const c=(a+s)/2,f=(u+l)/2;let h,d,p,g=1/0;for(let e=0;e0&&(d=e,g=n)}let v=t[2*d],_=t[2*d+1],x=1/0;for(let e=0;er&&(e[n++]=i,r=this._dists[i])}return this.hull=e.subarray(0,n),this.triangles=new Uint32Array(0),void(this.halfedges=new Uint32Array(0))}if(XD(m,y,v,_,b,w)){const t=d,e=v,n=_;d=p,v=b,_=w,p=t,b=e,w=n}const k=function(t,e,n,r,i,o){const a=n-t,u=r-e,s=i-t,l=o-e,c=a*a+u*u,f=s*s+l*l,h=.5/(a*l-u*s);return{x:t+(l*c-u*f)*h,y:e+(a*f-s*c)*h}}(m,y,v,_,b,w);this._cx=k.x,this._cy=k.y;for(let e=0;e0&&Math.abs(l-o)<=WD&&Math.abs(c-a)<=WD)continue;if(o=l,a=c,s===h||s===d||s===p)continue;let f=0;for(let t=0,e=this._hashKey(l,c);t0?3-n:1+n)/4}(t-this._cx,e-this._cy)*this._hashSize)%this._hashSize}_legalize(t){const{_triangles:e,_halfedges:n,coords:r}=this;let i=0,o=0;for(;;){const a=n[t],u=t-t%3;if(o=u+(t+2)%3,-1===a){if(0===i)break;t=HD[--i];continue}const s=a-a%3,l=u+(t+1)%3,c=s+(a+2)%3,f=e[o],h=e[t],d=e[l],p=e[c];if(JD(r[2*f],r[2*f+1],r[2*h],r[2*h+1],r[2*d],r[2*d+1],r[2*p],r[2*p+1])){e[t]=p,e[a]=f;const r=n[c];if(-1===r){let e=this._hullStart;do{if(this._hullTri[e]===c){this._hullTri[e]=t;break}e=this._hullPrev[e]}while(e!==this._hullStart)}this._link(t,r),this._link(a,n[o]),this._link(o,c);const u=s+(a+1)%3;i=33306690738754716e-32*Math.abs(a+u)?a-u:0}function XD(t,e,n,r,i,o){return(GD(i,o,t,e,n,r)||GD(t,e,n,r,i,o)||GD(n,r,i,o,t,e))<0}function JD(t,e,n,r,i,o,a,u){const s=t-a,l=e-u,c=n-a,f=r-u,h=i-a,d=o-u,p=c*c+f*f,g=h*h+d*d;return s*(f*g-p*d)-l*(c*g-p*h)+(s*s+l*l)*(c*d-f*h)<0}function ZD(t,e,n,r,i,o){const a=n-t,u=r-e,s=i-t,l=o-e,c=a*a+u*u,f=s*s+l*l,h=.5/(a*l-u*s),d=(l*c-u*f)*h,p=(a*f-s*c)*h;return d*d+p*p}function QD(t,e,n,r){if(r-n<=20)for(let i=n+1;i<=r;i++){const r=t[i],o=e[r];let a=i-1;for(;a>=n&&e[t[a]]>o;)t[a+1]=t[a--];t[a+1]=r}else{let i=n+1,o=r;KD(t,n+r>>1,i),e[t[n]]>e[t[r]]&&KD(t,n,r),e[t[i]]>e[t[r]]&&KD(t,i,r),e[t[n]]>e[t[i]]&&KD(t,n,i);const a=t[i],u=e[a];for(;;){do{i++}while(e[t[i]]u);if(o=o-n?(QD(t,e,i,r),QD(t,e,n,o-1)):(QD(t,e,n,o-1),QD(t,e,i,r))}}function KD(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function tC(t){return t[0]}function eC(t){return t[1]}const nC=1e-6;class rC{constructor(){this._x0=this._y0=this._x1=this._y1=null,this._=""}moveTo(t,e){this._+="M".concat(this._x0=this._x1=+t,",").concat(this._y0=this._y1=+e)}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")}lineTo(t,e){this._+="L".concat(this._x1=+t,",").concat(this._y1=+e)}arc(t,e,n){const r=(t=+t)+(n=+n),i=e=+e;if(n<0)throw new Error("negative radius");null===this._x1?this._+="M".concat(r,",").concat(i):(Math.abs(this._x1-r)>nC||Math.abs(this._y1-i)>nC)&&(this._+="L"+r+","+i),n&&(this._+="A".concat(n,",").concat(n,",0,1,1,").concat(t-n,",").concat(e,"A").concat(n,",").concat(n,",0,1,1,").concat(this._x1=r,",").concat(this._y1=i))}rect(t,e,n,r){this._+="M".concat(this._x0=this._x1=+t,",").concat(this._y0=this._y1=+e,"h").concat(+n,"v").concat(+r,"h").concat(-n,"Z")}value(){return this._||null}}class iC{constructor(){this._=[]}moveTo(t,e){this._.push([t,e])}closePath(){this._.push(this._[0].slice())}lineTo(t,e){this._.push([t,e])}value(){return this._.length?this._:null}}class oC{constructor(t,[e,n,r,i]=[0,0,960,500]){if(!((r=+r)>=(e=+e)&&(i=+i)>=(n=+n)))throw new Error("invalid bounds");this.delaunay=t,this._circumcenters=new Float64Array(2*t.points.length),this.vectors=new Float64Array(2*t.points.length),this.xmax=r,this.xmin=e,this.ymax=i,this.ymin=n,this._init()}update(){return this.delaunay.update(),this._init(),this}_init(){const{delaunay:{points:t,hull:e,triangles:n},vectors:r}=this,i=this.circumcenters=this._circumcenters.subarray(0,n.length/3*2);for(let e,r,o=0,a=0,u=n.length;o1;)i-=2;for(let t=2;t4)for(let t=0;t0){if(e>=this.ymax)return null;(i=(this.ymax-e)/r)0){if(t>=this.xmax)return null;(i=(this.xmax-t)/n)this.xmax?2:0)|(ethis.ymax?8:0)}}const aC=2*Math.PI,uC=Math.pow;function sC(t){return t[0]}function lC(t){return t[1]}function cC(t,e,n){return[t+Math.sin(t+e)*n,e+Math.cos(t-e)*n]}class fC{static from(t,e=sC,n=lC,r){return new fC("length"in t?function(t,e,n,r){const i=t.length,o=new Float64Array(2*i);for(let a=0;a2&&function(t){const{triangles:e,coords:n}=t;for(let t=0;t1e-10)return!1}return!0}(t)){this.collinear=Int32Array.from({length:e.length/2},((t,e)=>e)).sort(((t,n)=>e[2*t]-e[2*n]||e[2*t+1]-e[2*n+1]));const t=this.collinear[0],n=this.collinear[this.collinear.length-1],r=[e[2*t],e[2*t+1],e[2*n],e[2*n+1]],i=1e-8*Math.hypot(r[3]-r[1],r[2]-r[0]);for(let t=0,n=e.length/2;t0&&(this.triangles=new Int32Array(3).fill(-1),this.halfedges=new Int32Array(3).fill(-1),this.triangles[0]=r[0],this.triangles[1]=r[1],this.triangles[2]=r[1],o[r[0]]=1,2===r.length&&(o[r[1]]=0))}voronoi(t){return new oC(this,t)}*neighbors(t){const{inedges:e,hull:n,_hullIndex:r,halfedges:i,triangles:o,collinear:a}=this;if(a){const e=a.indexOf(t);return e>0&&(yield a[e-1]),void(e=0&&i!==n&&i!==r;)n=i;return i}_step(t,e,n){const{inedges:r,hull:i,_hullIndex:o,halfedges:a,triangles:u,points:s}=this;if(-1===r[t]||!s.length)return(t+1)%(s.length>>1);let l=t,c=uC(e-s[2*t],2)+uC(n-s[2*t+1],2);const f=r[t];let h=f;do{let r=u[h];const f=uC(e-s[2*r],2)+uC(n-s[2*r+1],2);if(f=f));)if(e.x=a+i,e.y=l+o,!(e.x+e.x0<0||e.y+e.y0<0||e.x+e.x1>u[0]||e.y+e.y1>u[1])&&(!n||!xC(e,t,u[0]))&&(!n||wC(e,n))){for(var g,m=e.sprite,y=e.width>>5,v=u[0]>>5,_=e.x-(y<<4),x=127&_,b=32-x,w=e.y1-e.y0,k=(e.y+e.y0)*v+(_>>5),M=0;M>>x:0);k+=v}return e.sprite=null,!0}return!1}return f.layout=function(){for(var s=function(t){t.width=t.height=1;var e=Math.sqrt(t.getContext("2d").getImageData(0,0,1,1).data.length>>2);t.width=2048/e,t.height=yC/e;var n=t.getContext("2d");return n.fillStyle=n.strokeStyle="red",n.textAlign="center",{context:n,ratio:e}}(Gl()),f=function(t){var e=[],n=-1;for(;++n>5)*u[1]),d=null,p=l.length,g=-1,m=[],y=l.map((u=>({text:t(u),font:e(u),style:r(u),weight:i(u),rotate:o(u),size:~~(n(u)+1e-14),padding:a(u),xoff:0,yoff:0,x1:0,y1:0,x0:0,y0:0,hasText:!1,sprite:null,datum:u}))).sort(((t,e)=>e.size-t.size));++g>1,v.y=u[1]*(c()+.5)>>1,_C(s,v,y,g),v.hasText&&h(f,v,d)&&(m.push(v),d?bC(d,v):d=[{x:v.x+v.x0,y:v.y+v.y0},{x:v.x+v.x1,y:v.y+v.y1}],v.x-=u[0]>>1,v.y-=u[1]>>1)}return m},f.words=function(t){return arguments.length?(l=t,f):l},f.size=function(t){return arguments.length?(u=[+t[0],+t[1]],f):u},f.font=function(t){return arguments.length?(e=MC(t),f):e},f.fontStyle=function(t){return arguments.length?(r=MC(t),f):r},f.fontWeight=function(t){return arguments.length?(i=MC(t),f):i},f.rotate=function(t){return arguments.length?(o=MC(t),f):o},f.text=function(e){return arguments.length?(t=MC(e),f):t},f.spiral=function(t){return arguments.length?(s=AC[t]||t,f):s},f.fontSize=function(t){return arguments.length?(n=MC(t),f):n},f.padding=function(t){return arguments.length?(a=MC(t),f):a},f.random=function(t){return arguments.length?(c=t,f):c},f}function _C(t,e,n,r){if(!e.sprite){var i=t.context,o=t.ratio;i.clearRect(0,0,2048/o,yC/o);var a,u,s,l,c,f=0,h=0,d=0,p=n.length;for(--r;++r>5<<5,s=~~Math.max(Math.abs(v+_),Math.abs(v-_))}else a=a+31>>5<<5;if(s>d&&(d=s),f+a>=2048&&(f=0,h+=d,d=0),h+s>=yC)break;i.translate((f+(a>>1))/o,(h+(s>>1))/o),e.rotate&&i.rotate(e.rotate*mC),i.fillText(e.text,0,0),e.padding&&(i.lineWidth=2*e.padding,i.strokeText(e.text,0,0)),i.restore(),e.width=a,e.height=s,e.xoff=f,e.yoff=h,e.x1=a>>1,e.y1=s>>1,e.x0=-e.x1,e.y0=-e.y1,e.hasText=!0,f+=a}for(var b=i.getImageData(0,0,2048/o,yC/o).data,w=[];--r>=0;)if((e=n[r]).hasText){for(u=(a=e.width)>>5,s=e.y1-e.y0,l=0;l>5),E=b[2048*(h+c)+(f+l)<<2]?1<<31-l%32:0;w[A]|=E,k|=E}k?M=c:(e.y0++,s--,c--,h++)}e.y1=e.y0+M,e.sprite=w.slice(0,(e.y1-e.y0)*u)}}}function xC(t,e,n){n>>=5;for(var r,i=t.sprite,o=t.width>>5,a=t.x-(o<<4),u=127&a,s=32-u,l=t.y1-t.y0,c=(t.y+t.y0)*n+(a>>5),f=0;f>>u:0))&e[c+h])return!0;c+=n}return!1}function bC(t,e){var n=t[0],r=t[1];e.x+e.x0r.x&&(r.x=e.x+e.x1),e.y+e.y1>r.y&&(r.y=e.y+e.y1)}function wC(t,e){return t.x+t.x1>e[0].x&&t.x+t.x0e[0].y&&t.y+t.y0e(t(n))}i.forEach((t=>{t[a[0]]=NaN,t[a[1]]=NaN,t[a[3]]=0}));const c=o.words(i).text(e.text).size(e.size||[500,500]).padding(e.padding||1).spiral(e.spiral||"archimedean").rotate(e.rotate||0).font(e.font||"sans-serif").fontStyle(e.fontStyle||"normal").fontWeight(e.fontWeight||"normal").fontSize(l).random(t.random).layout(),f=o.size(),h=f[0]>>1,d=f[1]>>1,p=c.length;for(let t,e,n=0;nnew Uint8Array(t),BC=t=>new Uint16Array(t),TC=t=>new Uint32Array(t);function zC(t,e,n){const r=(e<257?SC:e<65537?BC:TC)(t);return n&&r.set(n),r}function NC(t,e,n){const r=1<{const r=t[e],i=t[n];return ri?1:0})),function(t,e){return Array.from(e,(e=>t[e]))}(t,e)}(h,s),a)l=e,c=t,e=Array(a+u),t=TC(a+u),function(t,e,n,r,i,o,a,u,s){let l,c=0,f=0;for(l=0;c0)for(f=0;ft,size:()=>n}}function RC(t){pa.call(this,function(){let t=8,e=[],n=TC(0),r=zC(0,t),i=zC(0,t);return{data:()=>e,seen:()=>n=function(t,e,n){return t.length>=e?t:((n=n||new t.constructor(e)).set(t),n)}(n,e.length),add(t){for(let n,r=0,i=e.length,o=t.length;re.length,curr:()=>r,prev:()=>i,reset:t=>i[t]=r[t],all:()=>t<257?255:t<65537?65535:4294967295,set(t,e){r[t]|=e},clear(t,e){r[t]&=~e},resize(e,n){(e>r.length||n>t)&&(t=Math.max(n,t),r=zC(e,t,r),i=zC(e,t))}}}(),t),this._indices=null,this._dims=null}function LC(t){pa.call(this,null,t)}RC.Definition={type:"CrossFilter",metadata:{},params:[{name:"fields",type:"field",array:!0,required:!0},{name:"query",type:"array",array:!0,required:!0,content:{type:"number",array:!0,length:2}}]},ut(RC,pa,{transform(t,e){return this._dims?t.modified("fields")||t.fields.some((t=>e.modified(t.fields)))?this.reinit(t,e):this.eval(t,e):this.init(t,e)},init(t,e){const n=t.fields,r=t.query,i=this._indices={},o=this._dims=[],a=r.length;let u,s,l=0;for(;l{const t=i.remove(e,n);for(const e in r)r[e].reindex(t)}))},update(t,e,n){const r=this._dims,i=t.query,o=e.stamp,a=r.length;let u,s,l=0;for(n.filters=0,s=0;sd)for(m=d,y=Math.min(f,p);mp)for(m=Math.max(f,p),y=h;mc)for(d=c,p=Math.min(s,f);df)for(d=Math.max(s,f),p=l;du[t]&n?null:a[t];return o.filter(o.MOD,l),i&i-1?(o.filter(o.ADD,(t=>{const e=u[t]&n;return!e&&e^s[t]&n?a[t]:null})),o.filter(o.REM,(t=>{const e=u[t]&n;return e&&!(e^e^s[t]&n)?a[t]:null}))):(o.filter(o.ADD,l),o.filter(o.REM,(t=>(u[t]&n)===i?a[t]:null))),o.filter(o.SOURCE,(t=>l(t._index)))}});var UC=Object.freeze({__proto__:null,crossfilter:RC,resolvefilter:LC});const qC="RawCode",PC="Literal",jC="Property",IC="Identifier",$C="ArrayExpression",WC="BinaryExpression",HC="CallExpression",YC="ConditionalExpression",VC="LogicalExpression",GC="MemberExpression",XC="ObjectExpression",JC="UnaryExpression";function ZC(t){this.type=t}var QC,KC,tF,eF,nF;ZC.prototype.visit=function(t){let e,n,r;if(t(this))return 1;for(e=function(t){switch(t.type){case $C:return t.elements;case WC:case VC:return[t.left,t.right];case HC:return[t.callee].concat(t.arguments);case YC:return[t.test,t.consequent,t.alternate];case GC:return[t.object,t.property];case XC:return t.properties;case jC:return[t.key,t.value];case JC:return[t.argument];case IC:case PC:case qC:default:return[]}}(this),n=0,r=e.length;n",QC[3]="Identifier",QC[4]="Keyword",QC[5]="Null",QC[6]="Numeric",QC[7]="Punctuator",QC[8]="String",QC[9]="RegularExpression";var rF="Identifier",iF="Unexpected token %0",oF="Invalid regular expression",aF="Invalid regular expression: missing /",uF="Octal literals are not allowed in strict mode.",sF="ILLEGAL",lF="Disabled.",cF=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),fF=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]");function hF(t,e){if(!t)throw new Error("ASSERT: "+e)}function dF(t){return t>=48&&t<=57}function pF(t){return"0123456789abcdefABCDEF".indexOf(t)>=0}function gF(t){return"01234567".indexOf(t)>=0}function mF(t){return 32===t||9===t||11===t||12===t||160===t||t>=5760&&[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(t)>=0}function yF(t){return 10===t||13===t||8232===t||8233===t}function vF(t){return 36===t||95===t||t>=65&&t<=90||t>=97&&t<=122||92===t||t>=128&&cF.test(String.fromCharCode(t))}function _F(t){return 36===t||95===t||t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||92===t||t>=128&&fF.test(String.fromCharCode(t))}const xF={if:1,in:1,do:1,var:1,for:1,new:1,try:1,let:1,this:1,else:1,case:1,void:1,with:1,enum:1,while:1,break:1,catch:1,throw:1,const:1,yield:1,class:1,super:1,return:1,typeof:1,delete:1,switch:1,export:1,import:1,public:1,static:1,default:1,finally:1,extends:1,package:1,private:1,function:1,continue:1,debugger:1,interface:1,protected:1,instanceof:1,implements:1};function bF(){for(;tF1114111||"}"!==t)&&UF({},iF,sF),e<=65535?String.fromCharCode(e):(n=55296+(e-65536>>10),r=56320+(e-65536&1023),String.fromCharCode(n,r))}function MF(){var t,e;for(t=KC.charCodeAt(tF++),e=String.fromCharCode(t),92===t&&(117!==KC.charCodeAt(tF)&&UF({},iF,sF),++tF,(t=wF("u"))&&"\\"!==t&&vF(t.charCodeAt(0))||UF({},iF,sF),e=t);tF>>="===(r=KC.substr(tF,4))?{type:7,value:r,start:i,end:tF+=4}:">>>"===(n=r.substr(0,3))||"<<="===n||">>="===n?{type:7,value:n,start:i,end:tF+=3}:a===(e=n.substr(0,2))[1]&&"+-<>&|".indexOf(a)>=0||"=>"===e?{type:7,value:e,start:i,end:tF+=2}:"<>=!+-*%&|^/".indexOf(a)>=0?{type:7,value:a,start:i,end:++tF}:void UF({},iF,sF)}function DF(){var t,e,n;if(hF(dF((n=KC[tF]).charCodeAt(0))||"."===n,"Numeric literal must start with a decimal digit or a decimal point"),e=tF,t="","."!==n){if(t=KC[tF++],n=KC[tF],"0"===t){if("x"===n||"X"===n)return++tF,function(t){let e="";for(;tF=0&&UF({},oF,n),{value:n,literal:e}}(),r=function(t,e){let n=t;e.indexOf("u")>=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}/g,((t,e)=>{if(parseInt(e,16)<=1114111)return"x";UF({},oF)})).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"x"));try{new RegExp(n)}catch(t){UF({},oF)}try{return new RegExp(t,e)}catch(t){return null}}(e.value,n.value),{literal:e.literal+n.literal,value:r,regex:{pattern:e.value,flags:n.value},start:t,end:tF}}function FF(){if(bF(),tF>=eF)return{type:2,start:tF,end:tF};const t=KC.charCodeAt(tF);return vF(t)?AF():40===t||41===t||59===t?EF():39===t||34===t?function(){var t,e,n,r,i="",o=!1;for(hF("'"===(t=KC[tF])||'"'===t,"String literal must starts with a quote"),e=tF,++tF;tF=0&&tF(hF(e":case"<=":case">=":case"instanceof":case"in":e=7;break;case"<<":case">>":case">>>":e=8;break;case"+":case"-":e=9;break;case"*":case"/":case"%":e=11}return e}function eS(){var t,e;return t=function(){var t,e,n,r,i,o,a,u,s,l;if(t=nF,s=KF(),0===(i=tS(r=nF)))return s;for(r.prec=i,SF(),e=[t,nF],o=[s,r,a=KF()];(i=tS(nF))>0;){for(;o.length>2&&i<=o[o.length-2].prec;)a=o.pop(),u=o.pop().value,s=o.pop(),e.pop(),n=TF(u,s,a),o.push(n);(r=SF()).prec=i,o.push(r),e.push(nF),n=KF(),o.push(n)}for(n=o[l=o.length-1],e.pop();l>1;)e.pop(),n=TF(o[l-1].value,o[l-2],n),l-=2;return n}(),jF("?")&&(SF(),e=eS(),PF(":"),t=function(t,e,n){const r=new ZC("ConditionalExpression");return r.test=t,r.consequent=e,r.alternate=n,r}(t,e,eS())),t}function nS(){const t=eS();if(jF(","))throw new Error(lF);return t}var rS={NaN:"NaN",E:"Math.E",LN2:"Math.LN2",LN10:"Math.LN10",LOG2E:"Math.LOG2E",LOG10E:"Math.LOG10E",PI:"Math.PI",SQRT1_2:"Math.SQRT1_2",SQRT2:"Math.SQRT2",MIN_VALUE:"Number.MIN_VALUE",MAX_VALUE:"Number.MAX_VALUE"};function iS(t){function e(e,n,r){return i=>function(e,n,r,i){let o=t(n[0]);return r&&(o=r+"("+o+")",0===r.lastIndexOf("new ",0)&&(o="("+o+")")),o+"."+e+(i<0?"":0===i?"()":"("+n.slice(1).map(t).join(",")+")")}(e,i,n,r)}const n="new Date",r="String",i="RegExp";return{isNaN:"Number.isNaN",isFinite:"Number.isFinite",abs:"Math.abs",acos:"Math.acos",asin:"Math.asin",atan:"Math.atan",atan2:"Math.atan2",ceil:"Math.ceil",cos:"Math.cos",exp:"Math.exp",floor:"Math.floor",log:"Math.log",max:"Math.max",min:"Math.min",pow:"Math.pow",random:"Math.random",round:"Math.round",sin:"Math.sin",sqrt:"Math.sqrt",tan:"Math.tan",clamp:function(e){e.length<3&&u("Missing arguments to clamp function."),e.length>3&&u("Too many arguments to clamp function.");const n=e.map(t);return"Math.max("+n[1]+", Math.min("+n[2]+","+n[0]+"))"},now:"Date.now",utc:"Date.UTC",datetime:n,date:e("getDate",n,0),day:e("getDay",n,0),year:e("getFullYear",n,0),month:e("getMonth",n,0),hours:e("getHours",n,0),minutes:e("getMinutes",n,0),seconds:e("getSeconds",n,0),milliseconds:e("getMilliseconds",n,0),time:e("getTime",n,0),timezoneoffset:e("getTimezoneOffset",n,0),utcdate:e("getUTCDate",n,0),utcday:e("getUTCDay",n,0),utcyear:e("getUTCFullYear",n,0),utcmonth:e("getUTCMonth",n,0),utchours:e("getUTCHours",n,0),utcminutes:e("getUTCMinutes",n,0),utcseconds:e("getUTCSeconds",n,0),utcmilliseconds:e("getUTCMilliseconds",n,0),length:e("length",null,-1),join:e("join",null),indexof:e("indexOf",null),lastindexof:e("lastIndexOf",null),slice:e("slice",null),reverse:function(e){return"("+t(e[0])+").slice().reverse()"},parseFloat:"parseFloat",parseInt:"parseInt",upper:e("toUpperCase",r,0),lower:e("toLowerCase",r,0),substring:e("substring",r),split:e("split",r),replace:e("replace",r),trim:e("trim",r,0),regexp:i,test:e("test",i),if:function(e){e.length<3&&u("Missing arguments to if function."),e.length>3&&u("Too many arguments to if function.");const n=e.map(t);return"("+n[0]+"?"+n[1]+":"+n[2]+")"}}}const oS="intersect",aS="union";var uS="index:unit";function sS(t,e){for(var n,r,i=e.fields,o=e.values,a=i.length,u=0;ue.indexOf(t)>=0)):e},R_union:function(t,e){var n=A(e[0]),r=A(e[1]);return n>r&&(n=e[1],r=e[0]),t.length?(t[0]>n&&(t[0]=n),t[1]r&&(n=e[1],r=e[0]),t.length?rr&&(t[1]=r),t):[n,r]}};function cS(t,e,n,r){e[0].type!==PC&&u("First argument to selection functions must be a string literal.");const i=e[0].value,o="unit",a="@unit",s=":"+i;(e.length>=2&&M(e).value)!==oS||rt(r,a)||(r["@unit"]=n.getData(i).indataRef(n,o)),rt(r,s)||(r[s]=n.getData(i).tuplesRef())}function fS(t){const e=this.context.data[t];return e?e.values.value:[]}const hS=t=>function(e,n){return this.context.dataflow.locale()[t](n)(e)},dS=hS("format"),pS=hS("timeFormat"),gS=hS("utcFormat"),mS=hS("timeParse"),yS=hS("utcParse"),vS=new Date(2e3,0,1);function _S(t,e,n){return Number.isInteger(t)&&Number.isInteger(e)?(vS.setYear(2e3),vS.setMonth(t),vS.setDate(e),pS.call(this,vS,n)):""}function xS(t,e,n,r){e[0].type!==PC&&u("First argument to data functions must be a string literal.");const i=e[0].value,o=":"+i;if(!rt(o,r))try{r[o]=n.getData(i).tuplesRef()}catch(t){}}function bS(t,e,n,r){if(e[0].type===PC)wS(n,r,e[0].value);else for(t in n.scales)wS(n,r,t)}function wS(t,e,n){const r="%"+n;if(!rt(e,r))try{e[r]=t.scaleRef(n)}catch(t){}}function kS(t,e){let n;return H(t)?t:pt(t)?(n=e.scales[t])&&n.value:void 0}function MS(t,e,n){e.__bandwidth=t=>t&&t.bandwidth?t.bandwidth():0,n._bandwidth=bS,n._range=bS,n._scale=bS;const r=e=>"_["+(e.type===PC?wt("%"+e.value):wt("%")+"+"+t(e))+"]";return{_bandwidth:t=>"this.__bandwidth(".concat(r(t[0]),")"),_range:t=>"".concat(r(t[0]),".range()"),_scale:e=>"".concat(r(e[0]),"(").concat(t(e[1]),")")}}function AS(t,e){return function(n,r,i){if(n){const e=kS(n,(i||this).context);return e&&e.path[t](r)}return e(r)}}const ES=AS("area",(function(t){return fb=new be,Vx(t,hb),2*fb})),DS=AS("bounds",(function(t){var e,n,r,i,o,a,u;if(nb=eb=-(Kx=tb=1/0),sb=[],Vx(t,Pb),n=sb.length){for(sb.sort(Xb),e=1,o=[r=sb[0]];eGb(r[0],r[1])&&(r[1]=i[1]),Gb(i[0],r[1])>Gb(r[0],r[1])&&(r[0]=i[0])):o.push(r=i);for(a=-1/0,e=0,r=o[n=o.length-1];e<=n;r=i,++e)i=o[e],(u=Gb(r[1],i[0]))>a&&(a=u,Kx=i[0],eb=r[1])}return sb=lb=null,Kx===1/0||tb===1/0?[[NaN,NaN],[NaN,NaN]]:[[Kx,tb],[eb,nb]]})),CS=AS("centroid",(function(t){Mb=Ab=Eb=Db=Cb=Fb=Sb=Bb=0,Tb=new be,zb=new be,Nb=new be,Vx(t,Zb);var e=+Tb,n=+zb,r=+Nb,i=Tx(e,n,r);return i<_x&&(e=Fb,n=Sb,r=Bb,AbzS(t,e)}const OS=t=>t.data;function RS(t,e){const n=fS.call(e,t);return n.root&&n.root.lookup||{}}const LS=()=>"undefined"!=typeof window&&window||null;const US={random:()=>t.random(),cumulativeNormal:Sa,cumulativeLogNormal:Ra,cumulativeUniform:Ia,densityNormal:Fa,densityLogNormal:Oa,densityUniform:ja,quantileNormal:Ba,quantileLogNormal:La,quantileUniform:$a,sampleNormal:Ca,sampleLogNormal:Na,sampleUniform:Pa,isArray:v,isBoolean:lt,isDate:ct,isDefined:t=>void 0!==t,isNumber:ht,isObject:_,isRegExp:dt,isString:pt,isTuple:No,isValid:t=>null!=t&&t==t,toBoolean:kt,toDate:At,toNumber:A,toString:Et,flush:at,lerp:mt,merge:function(){const t=[].slice.call(arguments);return t.unshift({}),K(...t)},pad:xt,peek:M,span:bt,inrange:st,truncate:Ct,rgb:wc,lab:Pc,hcl:Vc,hsl:Fc,luminance:BS,contrast:function(t,e){const n=BS(t),r=BS(e);return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)},sequence:Re,format:dS,utcFormat:gS,utcParse:yS,utcOffset:br,utcSequence:Mr,timeFormat:pS,timeParse:mS,timeOffset:xr,timeSequence:kr,timeUnitSpecifier:Yn,monthFormat:function(t){return _S.call(this,t,1,"%B")},monthAbbrevFormat:function(t){return _S.call(this,t,1,"%b")},dayFormat:function(t){return _S.call(this,0,2+t,"%A")},dayAbbrevFormat:function(t){return _S.call(this,0,2+t,"%a")},quarter:j,utcquarter:I,week:Jn,utcweek:nr,dayofyear:Xn,utcdayofyear:er,warn:function(){return FS(this.context.dataflow,"warn",arguments)},info:function(){return FS(this.context.dataflow,"info",arguments)},debug:function(){return FS(this.context.dataflow,"debug",arguments)},extent:tt,inScope:function(t){const e=this.context.group;let n=!1;if(e)for(;t;){if(t===e){n=!0;break}t=t.mark.group}return n},intersect:function(t,e,n){if(!t)return[];const[r,i]=t,o=(new Zp).set(r[0],r[1],i[0],i[1]);return wv(n||this.context.dataflow.scenegraph().root,o,function(t){let e=null;if(t){const n=$(t.marktype),r=$(t.markname);e=t=>(!n.length||n.some((e=>t.marktype===e)))&&(!r.length||r.some((e=>t.name===e)))}return e}(e))},clampRange:W,pinchDistance:function(t){const e=t.touches,n=e[0].clientX-e[1].clientX,r=e[0].clientY-e[1].clientY;return Math.sqrt(n*n+r*r)},pinchAngle:function(t){const e=t.touches;return Math.atan2(e[0].clientY-e[1].clientY,e[0].clientX-e[1].clientX)},screen:function(){const t=LS();return t?t.screen:{}},containerSize:function(){const t=this.context.dataflow,e=t.container&&t.container();return e?[e.clientWidth,e.clientHeight]:[void 0,void 0]},windowSize:function(){const t=LS();return t?[t.innerWidth,t.innerHeight]:[void 0,void 0]},bandspace:function(t,e,n){return qh(t||0,e||0,n||0)},setdata:function(t,e){const n=this.context.dataflow,r=this.context.data[t].input;return n.pulse(r,n.changeset().remove(p).insert(e)),1},pathShape:function(t){let e=null;return function(n){return n?xp(n,e=e||lp(t)):t}},panLinear:T,panLog:z,panPow:N,panSymlog:O,zoomLinear:L,zoomLog:U,zoomPow:q,zoomSymlog:P,encode:function(t,e,n){if(t){const n=this.context.dataflow,r=t.mark.source;n.pulse(r,n.changeset().encode(t,e))}return void 0!==n?n:t},modify:function(t,e,n,r,i,o){const a=this.context.dataflow,u=this.context.data[t],s=u.input,l=a.stamp();let c,f,h=u.changes;if(!1===a._trigger||!(s.value.length||e||r))return 0;if((!h||h.stamp{u.modified=!0,a.pulse(s,h).run()}),!0,1)),n&&(c=!0===n?p:v(n)||No(n)?n:NS(n),h.remove(c)),e&&h.insert(e),r&&(c=NS(r),s.value.some(c)?h.remove(c):h.insert(r)),i)for(f in o)h.modify(i,f,o[f]);return 1}},qS=["view","item","group","xy","x","y"],PS="this.",jS={},IS={forbidden:["_"],allowed:["datum","event","item"],fieldvar:"datum",globalvar:t=>"_[".concat(wt("$"+t),"]"),functions:function(t){const e=iS(t);qS.forEach((t=>e[t]="event.vega."+t));for(const t in US)e[t]=PS+t;return K(e,MS(t,US,jS)),e},constants:rS,visitors:jS},$S=function(t){const e=(t=t||{}).allowed?Dt(t.allowed):{},n=t.forbidden?Dt(t.forbidden):{},r=t.constants||rS,i=(t.functions||iS)(h),o=t.globalvar,a=t.fieldvar,s=H(o)?o:t=>"".concat(o,'["').concat(t,'"]');let l={},c={},f=0;function h(t){if(pt(t))return t;const e=d[t.type];return null==e&&u("Unsupported type: "+t.type),e(t)}const d={Literal:t=>t.raw,Identifier:t=>{const i=t.name;return f>0?i:rt(n,i)?u("Illegal identifier: "+i):rt(r,i)?r[i]:rt(e,i)?i:(l[i]=1,s(i))},MemberExpression:t=>{const e=!t.computed,n=h(t.object);e&&(f+=1);const r=h(t.property);return n===a&&(c[function(t){const e=t&&t.length-1;return e&&('"'===t[0]&&'"'===t[e]||"'"===t[0]&&"'"===t[e])?t.slice(1,-1):t}(r)]=1),e&&(f-=1),n+(e?"."+r:"["+r+"]")},CallExpression:t=>{"Identifier"!==t.callee.type&&u("Illegal callee type: "+t.callee.type);const e=t.callee.name,n=t.arguments,r=rt(i,e)&&i[e];return r||u("Unrecognized function: "+e),H(r)?r(n):r+"("+n.map(h).join(",")+")"},ArrayExpression:t=>"["+t.elements.map(h).join(",")+"]",BinaryExpression:t=>"("+h(t.left)+t.operator+h(t.right)+")",UnaryExpression:t=>"("+t.operator+h(t.argument)+")",ConditionalExpression:t=>"("+h(t.test)+"?"+h(t.consequent)+":"+h(t.alternate)+")",LogicalExpression:t=>"("+h(t.left)+t.operator+h(t.right)+")",ObjectExpression:t=>"{"+t.properties.map(h).join(",")+"}",Property:t=>{f+=1;const e=h(t.key);return f-=1,e+":"+h(t.value)}};function p(t){const e={code:h(t),globals:Object.keys(l),fields:Object.keys(c)};return l={},c={},e}return p.functions=i,p.constants=r,p}(IS);function WS(t,e,n){return 1===arguments.length?US[t]:(US[t]=e,n&&(jS[t]=n),$S&&($S.functions[t]=PS+t),this)}function HS(t,e){const n={};let r;try{r=function(t){tF=0,eF=(KC=t).length,nF=null,BF();const e=nS();if(2!==nF.type)throw new Error("Unexpect token after expression.");return e}(t=pt(t)?t:wt(t)+"")}catch(e){u("Expression parse error: "+t)}r.visit((t=>{if(t.type!==HC)return;const r=t.callee.name,i=IS.visitors[r];i&&i(r,t.arguments,e,n)}));const i=$S(r);return i.globals.forEach((t=>{const r="$"+t;!rt(n,r)&&e.getSignal(t)&&(n[r]=e.signalRef(t))})),{$expr:K({code:i.code},e.options.ast?{ast:r}:null),$fields:i.fields,$params:n}}WS("bandwidth",(function(t,e){const n=kS(t,(e||this).context);return n&&n.bandwidth?n.bandwidth():0}),bS),WS("copy",(function(t,e){const n=kS(t,(e||this).context);return n?n.copy():void 0}),bS),WS("domain",(function(t,e){const n=kS(t,(e||this).context);return n?n.domain():[]}),bS),WS("range",(function(t,e){const n=kS(t,(e||this).context);return n&&n.range?n.range():[]}),bS),WS("invert",(function(t,e,n){const r=kS(t,(n||this).context);return r?v(e)?(r.invertRange||r.invert)(e):(r.invert||r.invertExtent)(e):void 0}),bS),WS("scale",(function(t,e,n){const r=kS(t,(n||this).context);return r?r(e):void 0}),bS),WS("gradient",(function(t,e,n,r,i){t=kS(t,(i||this).context);const o=ip(e,n);let a=t.domain(),u=a[0],s=M(a),l=f;return s-u?l=Dd(t,u,s):t=(t.interpolator?pd("sequential")().interpolator(t.interpolator()):pd("linear")().interpolate(t.interpolate()).range(t.range())).domain([u=0,s=1]),t.ticks&&(a=t.ticks(+r||15),u!==a[0]&&a.unshift(u),s!==M(a)&&a.push(s)),a.forEach((e=>o.stop(l(e),t(e)))),o}),bS),WS("geoArea",ES,bS),WS("geoBounds",DS,bS),WS("geoCentroid",CS,bS),WS("geoShape",(function(t,e,n){const r=kS(t,(n||this).context);return function(t){return r?r.path.context(t)(e):""}}),bS),WS("indata",(function(t,e,n){const r=this.context.data[t]["index:"+e],i=r?r.value.get(n):void 0;return i?i.count:i}),(function(t,e,n,r){e[0].type!==PC&&u("First argument to indata must be a string literal."),e[1].type!==PC&&u("Second argument to indata must be a string literal.");const i=e[0].value,o=e[1].value,a="@"+o;rt(a,r)||(r[a]=n.getData(i).indataRef(n,o))})),WS("data",fS,xS),WS("treePath",(function(t,e,n){const r=RS(t,this),i=r[e],o=r[n];return i&&o?i.path(o).map(OS):void 0}),xS),WS("treeAncestors",(function(t,e){const n=RS(t,this)[e];return n?n.ancestors().map(OS):void 0}),xS),WS("vlSelectionTest",(function(t,e,n){for(var r,i,o,a,u,s=this.context.data[t],l=s?s.values.value:[],c=s?s[uS]&&s[uS].value:void 0,f=n===oS,h=l.length,d=0;d(t[i[n].field]=e,t)),{}))}return e=e||aS,Object.keys(m).forEach((t=>{m[t]=Object.keys(m[t]).map((e=>m[t][e])).reduce(((n,r)=>void 0===n?r:lS[v[t]+"_"+e](n,r)))})),g=Object.keys(y),n&&g.length&&(m.vlMulti=e===aS?{or:g.reduce(((t,e)=>(t.push(...y[e]),t)),[])}:{and:g.map((t=>({or:y[t]})))}),m}),cS);const YS=Dt(["rule"]),VS=Dt(["group","image","rect"]);function GS(t){return(t+"").toLowerCase()}function XS(t,e,n){";"!==n[n.length-1]&&(n="return("+n+");");const r=Function(...e.concat(n));return t&&t.functions?r.bind(t.functions):r}var JS={operator:(t,e)=>XS(t,["_"],e.code),parameter:(t,e)=>XS(t,["datum","_"],e.code),event:(t,e)=>XS(t,["event"],e.code),handler:(t,e)=>XS(t,["_","event"],"var datum=event.item&&event.item.datum;return ".concat(e.code,";")),encode:(t,e)=>{const{marktype:n,channels:r}=e;let i="var o=item,datum=o.datum,m=0,$;";for(const t in r){const e="o["+wt(t)+"]";i+="$=".concat(r[t].code,";if(").concat(e,"!==$)").concat(e,"=$,m=1;")}return i+=function(t,e){let n="";return YS[e]||(t.x2&&(t.x?(VS[e]&&(n+="if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;"),n+="o.width=o.x2-o.x;"):n+="o.x=o.x2-(o.width||0);"),t.xc&&(n+="o.x=o.xc-(o.width||0)/2;"),t.y2&&(t.y?(VS[e]&&(n+="if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;"),n+="o.height=o.y2-o.y;"):n+="o.y=o.y2-(o.height||0);"),t.yc&&(n+="o.y=o.yc-(o.height||0)/2;")),n}(r,n),i+="return m;",XS(t,["item","_"],i)},codegen:{get(t){const e="[".concat(t.map(wt).join("]["),"]"),n=Function("_","return _".concat(e,";"));return n.path=e,n},comparator(t,e){let n;const r=Function("a","b","var u, v; return "+t.map(((t,r)=>{const i=e[r];let o,a;return t.path?(o="a".concat(t.path),a="b".concat(t.path)):((n=n||{})["f"+r]=t,o="this.f".concat(r,"(a)"),a="this.f".concat(r,"(b)")),function(t,e,n,r){return"((u = ".concat(t,") < (v = ").concat(e,") || u == null) && v != null ? ").concat(n,"\n : (u > v || v == null) && u != null ? ").concat(r,"\n : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? ").concat(n,"\n : v !== v && u === u ? ").concat(r," : ")}(o,a,-i,i)})).join("")+"0;");return n?r.bind(n):r}}};function ZS(t,e,n){if(!t||!_(t))return t;for(let r,i=0,o=QS.length;it&&t.$tupleid?Oo:t));return e.fn[n]||(e.fn[n]=Y(r,t.$order,e.expr.codegen))}},{key:"$context",parse:function(t,e){return e}},{key:"$subflow",parse:function(t,e){const n=t.$subflow;return function(t,r,i){const o=e.fork().parse(n),a=o.get(n.operators[0].id),u=o.signals.parent;return u&&u.set(i),a.detachSubflow=()=>e.detach(o),a}}},{key:"$tupleid",parse:function(){return Oo}}];const KS={skip:!0};function tB(t,e,n,r){return new eB(t,e,n,r)}function eB(t,e,n,r){this.dataflow=t,this.transforms=e,this.events=t.events.bind(t),this.expr=r||JS,this.signals={},this.scales={},this.nodes={},this.data={},this.fn={},n&&(this.functions=Object.create(n),this.functions.context=this)}function nB(t){this.dataflow=t.dataflow,this.transforms=t.transforms,this.events=t.events,this.expr=t.expr,this.signals=Object.create(t.signals),this.scales=Object.create(t.scales),this.nodes=Object.create(t.nodes),this.data=Object.create(t.data),this.fn=Object.create(t.fn),t.functions&&(this.functions=Object.create(t.functions),this.functions.context=this)}function rB(t,e){t&&(null==e?t.removeAttribute("aria-label"):t.setAttribute("aria-label",e))}eB.prototype=nB.prototype={fork(){const t=new nB(this);return(this.subcontext||(this.subcontext=[])).push(t),t},detach(t){this.subcontext=this.subcontext.filter((e=>e!==t));const e=Object.keys(t.nodes);for(const n of e)t.nodes[n]._targets=null;for(const n of e)t.nodes[n].detach();t.nodes=null},get(t){return this.nodes[t]},set(t,e){return this.nodes[t]=e},add(t,e){const n=this,r=n.dataflow,i=t.value;if(n.set(t.id,e),function(t){return"collect"===GS(t)}(t.type)&&i&&(i.$ingest?r.ingest(e,i.$ingest,i.$format):i.$request?r.preload(e,i.$request,i.$format):r.pulse(e,r.changeset().insert(i))),t.root&&(n.root=e),t.parent){let i=n.get(t.parent.$ref);i?(r.connect(i,[e]),e.targets().add(i)):(n.unresolved=n.unresolved||[]).push((()=>{i=n.get(t.parent.$ref),r.connect(i,[e]),e.targets().add(i)}))}if(t.signal&&(n.signals[t.signal]=e),t.scale&&(n.scales[t.scale]=e),t.data)for(const r in t.data){const i=n.data[r]||(n.data[r]={});t.data[r].forEach((t=>i[t]=e))}},resolve(){return(this.unresolved||[]).forEach((t=>t())),delete this.unresolved,this},operator(t,e){this.add(t,this.dataflow.add(t.value,e))},transform(t,e){this.add(t,this.dataflow.add(this.transforms[GS(e)]))},stream(t,e){this.set(t.id,e)},update(t,e,n,r,i){this.dataflow.on(e,n,r,i,t.options)},operatorExpression(t){return this.expr.operator(this,t)},parameterExpression(t){return this.expr.parameter(this,t)},eventExpression(t){return this.expr.event(this,t)},handlerExpression(t){return this.expr.handler(this,t)},encodeExpression(t){return this.expr.encode(this,t)},parse:function(t){const e=this,n=t.operators||[];return t.background&&(e.background=t.background),t.eventConfig&&(e.eventConfig=t.eventConfig),t.locale&&(e.locale=t.locale),n.forEach((t=>e.parseOperator(t))),n.forEach((t=>e.parseOperatorParameters(t))),(t.streams||[]).forEach((t=>e.parseStream(t))),(t.updates||[]).forEach((t=>e.parseUpdate(t))),e.resolve()},parseOperator:function(t){const e=this;!function(t){return"operator"===GS(t)}(t.type)&&t.type?e.transform(t,t.type):e.operator(t,t.update?e.operatorExpression(t.update):null)},parseOperatorParameters:function(t){const e=this;if(t.params){const n=e.get(t.id);n||u("Invalid operator id: "+t.id),e.dataflow.connect(n,n.parameters(e.parseParameters(t.params),t.react,t.initonly))}},parseParameters:function(t,e){e=e||{};const n=this;for(const r in t){const i=t[r];e[r]=v(i)?i.map((t=>ZS(t,n,e))):ZS(i,n,e)}return e},parseStream:function(t){var e,n=this,r=null!=t.filter?n.eventExpression(t.filter):void 0,i=null!=t.stream?n.get(t.stream):void 0;t.source?i=n.events(t.source,t.type,r):t.merge&&(i=(e=t.merge.map((t=>n.get(t))))[0].merge.apply(e[0],e.slice(1))),t.between&&(e=t.between.map((t=>n.get(t))),i=i.between(e[0],e[1])),t.filter&&(i=i.filter(r)),null!=t.throttle&&(i=i.throttle(+t.throttle)),null!=t.debounce&&(i=i.debounce(+t.debounce)),null==i&&u("Invalid stream definition: "+JSON.stringify(t)),t.consume&&i.consume(!0),n.stream(t,i)},parseUpdate:function(t){var e,n=this,r=_(r=t.source)?r.$ref:r,i=n.get(r),o=t.update,a=void 0;i||u("Source not defined: "+t.source),e=t.target&&t.target.$expr?n.eventExpression(t.target.$expr):n.get(t.target),o&&o.$expr&&(o.$params&&(a=n.parseParameters(o.$params)),o=n.handlerExpression(o.$expr)),n.update(t,i,e,o,a)},getState:function(t){var e=this,n={};if(t.signals){var r=n.signals={};Object.keys(e.signals).forEach((n=>{const i=e.signals[n];t.signals(n,i)&&(r[n]=i.value)}))}if(t.data){var i=n.data={};Object.keys(e.data).forEach((n=>{const r=e.data[n];t.data(n,r)&&(i[n]=r.input.value)}))}return e.subcontext&&!1!==t.recurse&&(n.subcontext=e.subcontext.map((e=>e.getState(t)))),n},setState:function(t){var e=this,n=e.dataflow,r=t.data,i=t.signals;Object.keys(i||{}).forEach((t=>{n.update(e.signals[t],i[t],KS)})),Object.keys(r||{}).forEach((t=>{n.pulse(e.data[t].input,n.changeset().remove(p).insert(r[t]))})),(t.subcontext||[]).forEach(((t,n)=>{const r=e.subcontext[n];r&&r.setState(t)}))}};const iB="default";function oB(t,e){const n=t.globalCursor()?"undefined"!=typeof document&&document.body:t.container();if(n)return null==e?n.style.removeProperty("cursor"):n.style.cursor=e}function aB(t,e){var n=t._runtime.data;return rt(n,e)||u("Unrecognized data set: "+e),n[e]}function uB(t,e){Io(e)||u("Second argument to changes must be a changeset.");const n=aB(this,t);return n.modified=!0,this.pulse(n.input,e)}function sB(t){var e=t.padding();return Math.max(0,t._viewWidth+e.left+e.right)}function lB(t){var e=t.padding();return Math.max(0,t._viewHeight+e.top+e.bottom)}function cB(t){var e=t.padding(),n=t._origin;return[e.left+n[0],e.top+n[1]]}function fB(t,e,n){var r,i,o=t._renderer,a=o&&o.canvas();return a&&(i=cB(t),(r=uy(e.changedTouches?e.changedTouches[0]:e,a))[0]-=i[0],r[1]-=i[1]),e.dataflow=t,e.item=n,e.vega=function(t,e,n){const r=e?"group"===e.mark.marktype?e:e.mark.group:null;function i(t){var n,i=r;if(t)for(n=e;n;n=n.mark.group)if(n.mark.name===t){i=n;break}return i&&i.mark&&i.mark.interactive?i:{}}function o(t){if(!t)return n;pt(t)&&(t=i(t));const e=n.slice();for(;t;)e[0]-=t.x||0,e[1]-=t.y||0,t=t.mark&&t.mark.group;return e}return{view:Z(t),item:Z(e||{}),group:i,xy:o,x:function(t){return o(t)[0]},y:function(t){return o(t)[1]}}}(t,n,r),e}const hB="view",dB={trap:!1};function pB(t,e,n){const r=t._eventConfig&&t._eventConfig[e];return!(!1===r||_(r)&&!r[n])||(t.warn("Blocked ".concat(e," ").concat(n," event listener.")),!1)}function gB(t){return t.item}function mB(t){return t.item.mark.source}function yB(t){return function(e,n){return n.vega.view().changeset().encode(n.item,t)}}function vB(t,e,n){const r=document.createElement(t);for(const t in e)r.setAttribute(t,e[t]);return null!=n&&(r.textContent=n),r}const _B="vega-bind",xB="vega-bind-name";function bB(t,e,n){if(!e)return;const r=n.param;let i=n.state;return i||(i=n.state={elements:null,active:!1,set:null,update:e=>{e!==t.signal(r.signal)&&t.runAsync(null,(()=>{i.source=!0,t.signal(r.signal,e)}))}},r.debounce&&(i.update=Q(r.debounce,i.update))),function(t,e,n,r){const i=vB("div",{class:_B}),o="radio"===n.input?i:i.appendChild(vB("label"));o.appendChild(vB("span",{class:xB},n.name||n.signal)),e.appendChild(i);let a=wB;switch(n.input){case"checkbox":a=kB;break;case"select":a=MB;break;case"radio":a=AB;break;case"range":a=EB}a(t,o,n,r)}(i,e,r,t.signal(r.signal)),i.active||(t.on(t._signals[r.signal],null,(()=>{i.source?i.source=!1:i.set(t.signal(r.signal))})),i.active=!0),i}function wB(t,e,n,r){const i=vB("input");for(const t in n)"signal"!==t&&"element"!==t&&i.setAttribute("input"===t?"type":t,n[t]);i.setAttribute("name",n.signal),i.value=r,e.appendChild(i),i.addEventListener("input",(()=>t.update(i.value))),t.elements=[i],t.set=t=>i.value=t}function kB(t,e,n,r){const i={type:"checkbox",name:n.signal};r&&(i.checked=!0);const o=vB("input",i);e.appendChild(o),o.addEventListener("change",(()=>t.update(o.checked))),t.elements=[o],t.set=t=>o.checked=!!t||null}function MB(t,e,n,r){const i=vB("select",{name:n.signal}),o=n.labels||[];n.options.forEach(((t,e)=>{const n={value:t};DB(t,r)&&(n.selected=!0),i.appendChild(vB("option",n,(o[e]||t)+""))})),e.appendChild(i),i.addEventListener("change",(()=>{t.update(n.options[i.selectedIndex])})),t.elements=[i],t.set=t=>{for(let e=0,r=n.options.length;e{const u={type:"radio",name:n.signal,value:e};DB(e,r)&&(u.checked=!0);const s=vB("input",u);s.addEventListener("change",(()=>t.update(e)));const l=vB("label",{},(o[a]||e)+"");return l.prepend(s),i.appendChild(l),s})),t.set=e=>{const n=t.elements,r=n.length;for(let t=0;t{s.textContent=u.value,t.update(+u.value)};u.addEventListener("input",l),u.addEventListener("change",l),t.elements=[u],t.set=t=>{u.value=t,s.textContent=t}}function DB(t,e){return t===e||t+""==e+""}function CB(t,e,n,r,i,o){return(e=e||new r(t.loader())).initialize(n,sB(t),lB(t),cB(t),i,o).background(t.background())}function FB(t,e){return e?function(){try{e.apply(this,arguments)}catch(e){t.error(e)}}:null}function SB(t,e){if("string"==typeof e){if("undefined"==typeof document)return t.error("DOM document instance not found."),null;if(!(e=document.querySelector(e)))return t.error("Signal bind element not found: "+e),null}if(e)try{e.innerHTML=""}catch(n){e=null,t.error(n)}return e}const BB=t=>+t||0;function TB(t){return _(t)?{top:BB(t.top),bottom:BB(t.bottom),left:BB(t.left),right:BB(t.right)}:(t=>({top:t,bottom:t,left:t,right:t}))(BB(t))}async function zB(t,e,n,r){const i=bv(e),o=i&&i.headless;return o||u("Unrecognized renderer type: "+e),await t.runAsync(),CB(t,null,null,o,n,r).renderAsync(t._scenegraph.root)}var NB="width",OB="height",RB="padding",LB={skip:!0};function UB(t,e){var n=t.autosize(),r=t.padding();return e-(n&&n.contains===RB?r.left+r.right:0)}function qB(t,e){var n=t.autosize(),r=t.padding();return e-(n&&n.contains===RB?r.top+r.bottom:0)}function PB(t,e){return e.modified&&v(e.input.value)&&t.indexOf("_:vega:_")}function jB(t,e){return!("parent"===t||e instanceof ga.proxy)}function IB(t,e,n,r){const i=t.element();i&&i.setAttribute("title",function(t){return null==t?"":v(t)?$B(t):_(t)&&!ct(t)?(e=t,Object.keys(e).map((t=>{const n=e[t];return t+": "+(v(n)?$B(n):WB(n))})).join("\n")):t+"";var e}(r))}function $B(t){return"["+t.map(WB).join(", ")+"]"}function WB(t){return v(t)?"[…]":_(t)&&!ct(t)?"{…}":t}function HB(t,e){const n=this;if(e=e||{},ha.call(n),e.loader&&n.loader(e.loader),e.logger&&n.logger(e.logger),null!=e.logLevel&&n.logLevel(e.logLevel),e.locale||t.locale){const r=K({},t.locale,e.locale);n.locale(Eo(r.number,r.time))}n._el=null,n._elBind=null,n._renderType=e.renderer||_v.Canvas,n._scenegraph=new ty;const r=n._scenegraph.root;n._renderer=null,n._tooltip=e.tooltip||IB,n._redraw=!0,n._handler=(new Ey).scene(r),n._globalCursor=!1,n._preventDefault=!1,n._timers=[],n._eventListeners=[],n._resizeListeners=[],n._eventConfig=function(t){const e=K({defaults:{}},t),n=(t,e)=>{e.forEach((e=>{v(t[e])&&(t[e]=Dt(t[e]))}))};return n(e.defaults,["prevent","allow"]),n(e,["view","window","selector"]),e}(t.eventConfig),n.globalCursor(n._eventConfig.globalCursor);const i=function(t,e,n){return tB(t,ga,US,n).parse(e)}(n,t,e.expr);n._runtime=i,n._signals=i.signals,n._bind=(t.bindings||[]).map((t=>({state:null,param:K({},t)}))),i.root&&i.root.set(r),r.source=i.data.root.input,n.pulse(i.data.root.input,n.changeset().insert(r.items)),n._width=n.width(),n._height=n.height(),n._viewWidth=UB(n,n._width),n._viewHeight=qB(n,n._height),n._origin=[0,0],n._resize=0,n._autosize=1,function(t){var e=t._signals,n=e.width,r=e.height,i=e.padding;function o(){t._autosize=t._resize=1}t._resizeWidth=t.add(null,(e=>{t._width=e.size,t._viewWidth=UB(t,e.size),o()}),{size:n}),t._resizeHeight=t.add(null,(e=>{t._height=e.size,t._viewHeight=qB(t,e.size),o()}),{size:r});const a=t.add(null,o,{pad:i});t._resizeWidth.rank=n.rank+1,t._resizeHeight.rank=r.rank+1,a.rank=i.rank+1}(n),function(t){t.add(null,(e=>(t._background=e.bg,t._resize=1,e.bg)),{bg:t._signals.background})}(n),function(t){const e=t._signals.cursor||(t._signals.cursor=t.add({user:iB,item:null}));t.on(t.events("view","mousemove"),e,((t,n)=>{const r=e.value,i=r?pt(r)?r:r.user:iB,o=n.item&&n.item.cursor||null;return r&&i===r.user&&o==r.item?r:{user:i,item:o}})),t.add(null,(function(e){let n=e.cursor,r=this.value;return pt(n)||(r=n.item,n=n.user),oB(t,n&&n!==iB?n:r||n),r}),{cursor:e})}(n),n.description(t.description),e.hover&&n.hover(),e.container&&n.initialize(e.container,e.bind)}function YB(t,e){return rt(t._signals,e)?t._signals[e]:u("Unrecognized signal name: "+wt(e))}function VB(t,e){const n=(t._targets||[]).filter((t=>t._update&&t._update.handler===e));return n.length?n[0]:null}function GB(t,e,n,r){let i=VB(n,r);return i||(i=FB(t,(()=>r(e,n.value))),i.handler=r,t.on(n,null,i)),t}function XB(t,e,n){const r=VB(e,n);return r&&e._targets.remove(r),t}ut(HB,ha,{async evaluate(t,e,n){if(await ha.prototype.evaluate.call(this,t,e),this._redraw||this._resize)try{this._renderer&&(this._resize&&(this._resize=0,function(t){var e=cB(t),n=sB(t),r=lB(t);t._renderer.background(t.background()),t._renderer.resize(n,r,e),t._handler.origin(e),t._resizeListeners.forEach((e=>{try{e(n,r)}catch(e){t.error(e)}}))}(this)),await this._renderer.renderAsync(this._scenegraph.root)),this._redraw=!1}catch(t){this.error(t)}return n&&Bo(this,n),this},dirty(t){this._redraw=!0,this._renderer&&this._renderer.dirty(t)},description(t){if(arguments.length){const e=null!=t?t+"":null;return e!==this._desc&&rB(this._el,this._desc=e),this}return this._desc},container(){return this._el},scenegraph(){return this._scenegraph},origin(){return this._origin.slice()},signal(t,e,n){const r=YB(this,t);return 1===arguments.length?r.value:this.update(r,e,n)},width(t){return arguments.length?this.signal("width",t):this.signal("width")},height(t){return arguments.length?this.signal("height",t):this.signal("height")},padding(t){return arguments.length?this.signal("padding",TB(t)):TB(this.signal("padding"))},autosize(t){return arguments.length?this.signal("autosize",t):this.signal("autosize")},background(t){return arguments.length?this.signal("background",t):this.signal("background")},renderer(t){return arguments.length?(bv(t)||u("Unrecognized renderer type: "+t),t!==this._renderType&&(this._renderType=t,this._resetRenderer()),this):this._renderType},tooltip(t){return arguments.length?(t!==this._tooltip&&(this._tooltip=t,this._resetRenderer()),this):this._tooltip},loader(t){return arguments.length?(t!==this._loader&&(ha.prototype.loader.call(this,t),this._resetRenderer()),this):this._loader},resize(){return this._autosize=1,this.touch(YB(this,"autosize"))},_resetRenderer(){this._renderer&&(this._renderer=null,this.initialize(this._el,this._elBind))},_resizeView:function(t,e,n,r,i,o){this.runAfter((a=>{let u=0;a._autosize=0,a.width()!==n&&(u=1,a.signal(NB,n,LB),a._resizeWidth.skip(!0)),a.height()!==r&&(u=1,a.signal(OB,r,LB),a._resizeHeight.skip(!0)),a._viewWidth!==t&&(a._resize=1,a._viewWidth=t),a._viewHeight!==e&&(a._resize=1,a._viewHeight=e),a._origin[0]===i[0]&&a._origin[1]===i[1]||(a._resize=1,a._origin=i),u&&a.run("enter"),o&&a.runAfter((t=>t.resize()))}),!1,1)},addEventListener(t,e,n){let r=e;return n&&!1===n.trap||(r=FB(this,e),r.raw=e),this._handler.on(t,r),this},removeEventListener(t,e){for(var n,r,i=this._handler.handlers(t),o=i.length;--o>=0;)if(r=i[o].type,n=i[o].handler,t===r&&(e===n||e===n.raw)){this._handler.off(r,n);break}return this},addResizeListener(t){const e=this._resizeListeners;return e.indexOf(t)<0&&e.push(t),this},removeResizeListener(t){var e=this._resizeListeners,n=e.indexOf(t);return n>=0&&e.splice(n,1),this},addSignalListener(t,e){return GB(this,t,YB(this,t),e)},removeSignalListener(t,e){return XB(this,YB(this,t),e)},addDataListener(t,e){return GB(this,t,aB(this,t).values,e)},removeDataListener(t,e){return XB(this,aB(this,t).values,e)},globalCursor(t){if(arguments.length){if(this._globalCursor!==!!t){const e=oB(this,null);this._globalCursor=!!t,e&&oB(this,e)}return this}return this._globalCursor},preventDefault(t){return arguments.length?(this._preventDefault=t,this):this._preventDefault},timer:function(t,e){this._timers.push(function(t,e,n){var r=new LA,i=e;return null==e?(r.restart(t,e,n),r):(r._restart=r.restart,r.restart=function(t,e,n){e=+e,n=null==n?OA():+n,r._restart((function o(a){a+=i,r._restart(o,i+=e,n),t(a)}),e,n)},r.restart(t,e,n),r)}((function(e){t({timestamp:Date.now(),elapsed:e})}),e))},events:function(t,e,n){var r,i=this,o=new Zo(n),a=function(n,r){i.runAsync(null,(()=>{t===hB&&function(t,e){var n=t._eventConfig.defaults,r=n.prevent,i=n.allow;return!1!==r&&!0!==i&&(!0===r||!1===i||(r?r[e]:i?!i[e]:t.preventDefault()))}(i,e)&&n.preventDefault(),o.receive(fB(i,n,r))}))};if("timer"===t)pB(i,"timer",e)&&i.timer(a,e);else if(t===hB)pB(i,"view",e)&&i.addEventListener(e,a,dB);else if("window"===t?pB(i,"window",e)&&"undefined"!=typeof window&&(r=[window]):"undefined"!=typeof document&&pB(i,"selector",e)&&(r=document.querySelectorAll(t)),r){for(var u=0,s=r.length;u=0;)i[t].stop();for(t=o.length;--t>=0;)for(e=(n=o[t]).sources.length;--e>=0;)n.sources[e].removeEventListener(n.type,n.handler);return r&&r.call(this,this._handler,null,null,null),this},hover:function(t,e){return e=[e||"update",(t=[t||"hover"])[0]],this.on(this.events("view","mouseover",gB),mB,yB(t)),this.on(this.events("view","mouseout",gB),mB,yB(e)),this},data:function(t,e){return arguments.length<2?aB(this,t).values.value:uB.call(this,t,$o().remove(p).insert(e))},change:uB,insert:function(t,e){return uB.call(this,t,$o().insert(e))},remove:function(t,e){return uB.call(this,t,$o().remove(e))},scale:function(t){var e=this._runtime.scales;return rt(e,t)||u("Unrecognized scale or projection: "+t),e[t].value},initialize:function(t,e){const n=this,r=n._renderType,i=n._eventConfig.bind,o=bv(r);t=n._el=t?SB(n,t):null,function(t){const e=t.container();e&&(e.setAttribute("role","graphics-document"),e.setAttribute("aria-roleDescription","visualization"),rB(e,t.description()))}(n),o||n.error("Unrecognized renderer type: "+r);const a=o.handler||Ey,u=t?o.renderer:o.headless;return n._renderer=u?CB(n,n._renderer,t,u):null,n._handler=function(t,e,n,r){const i=new r(t.loader(),FB(t,t.tooltip())).scene(t.scenegraph().root).initialize(n,cB(t),t);return e&&e.handlers().forEach((t=>{i.on(t.type,t.handler)})),i}(n,n._handler,t,a),n._redraw=!0,t&&"none"!==i&&(e=e?n._elBind=SB(n,e):t.appendChild(vB("form",{class:"vega-bindings"})),n._bind.forEach((t=>{t.param.element&&"container"!==i&&(t.element=SB(n,t.param.element))})),n._bind.forEach((t=>{bB(n,t.element||e,t)}))),n},toImageURL:async function(t,e){t!==_v.Canvas&&t!==_v.SVG&&t!==_v.PNG&&u("Unrecognized image type: "+t);const n=await zB(this,t,e);return t===_v.SVG?function(t,e){const n=new Blob([t],{type:e});return window.URL.createObjectURL(n)}(n.svg(),"image/svg+xml"):n.canvas().toDataURL("image/png")},toCanvas:async function(t,e){return(await zB(this,_v.Canvas,t,e)).canvas()},toSVG:async function(t){return(await zB(this,_v.SVG,t)).svg()},getState:function(t){return this._runtime.getState(t||{data:PB,signals:jB,recurse:!0})},setState:function(t){return this.runAsync(null,(e=>{e._trigger=!1,e._runtime.setState(t)}),(t=>{t._trigger=!0})),this}});const JB="[",ZB="]",QB=/[[\]{}]/,KB={"*":1,arc:1,area:1,group:1,image:1,line:1,path:1,rect:1,rule:1,shape:1,symbol:1,text:1,trail:1};let tT,eT;function nT(t,e,n,r,i){const o=t.length;let a,u=0;for(;e=0?--u:r&&r.indexOf(a)>=0&&++u}return e}function rT(t){const e=[],n=t.length;let r=0,i=0;for(;i"!==(t=t.slice(r+1).trim())[0])throw"Expected '>' after between selector: "+t;n=n.map(iT);const i=iT(t.slice(1).trim());if(i.between)return{between:n,stream:i};i.between=n;return i}(t):function(t){const e={source:tT},n=[];let r,i,o=[0,0],a=0,u=0,s=t.length,l=0;if("}"===t[s-1]){if(l=t.lastIndexOf("{"),!(l>=0))throw"Unmatched right brace: "+t;try{o=function(t){const e=t.split(",");if(!t.length||e.length>2)throw t;return e.map((e=>{const n=+e;if(n!=n)throw t;return n}))}(t.substring(l+1,s-1))}catch(e){throw"Invalid throttle specification: "+t}s=(t=t.slice(0,l).trim()).length,l=0}if(!s)throw t;"@"===t[0]&&(a=++l);r=nT(t,l,":"),r1?(e.type=n[1],a?e.markname=n[0].slice(1):!function(t){return eT[t]}(n[0])?e.source=n[0]:e.marktype=n[0]):e.type=n[0];"!"===e.type.slice(-1)&&(e.consume=!0,e.type=e.type.slice(0,-1));null!=i&&(e.filter=i);o[0]&&(e.throttle=o[0]);o[1]&&(e.debounce=o[1]);return e}(t)}function oT(t){return _(t)?t:{type:t||"pad"}}const aT=t=>+t||0;function uT(t){return _(t)?t.signal?t:{top:aT(t.top),bottom:aT(t.bottom),left:aT(t.left),right:aT(t.right)}:{top:e=aT(t),bottom:e,left:e,right:e};var e}const sT=t=>_(t)&&!v(t)?K({},t):{value:t};function lT(t,e,n,r){if(null!=n){return _(n)&&!v(n)||v(n)&&n.length&&_(n[0])?t.update[e]=n:t[r||"enter"][e]={value:n},1}return 0}function cT(t,e,n){for(const n in e)lT(t,n,e[n]);for(const e in n)lT(t,e,n[e],"update")}function fT(t,e,n){for(const r in e)n&&rt(n,r)||(t[r]=K(t[r]||{},e[r]));return t}function hT(t,e){return e&&(e.enter&&e.enter[t]||e.update&&e.update[t])}const dT="mark",pT="frame",gT="scope",mT="legend-label",yT="title-text",vT="title-subtitle";function _T(t,e,n){t[e]=n&&n.signal?{signal:n.signal}:{value:n}}const xT=t=>pt(t)?wt(t):t.signal?"(".concat(t.signal,")"):MT(t);function bT(t){if(null!=t.gradient)return function(t){const e=[t.start,t.stop,t.count].map((t=>null==t?null:wt(t)));for(;e.length&&null==M(e);)e.pop();return e.unshift(xT(t.gradient)),"gradient(".concat(e.join(","),")")}(t);let e=t.signal?"(".concat(t.signal,")"):t.color?function(t){return t.c?wT("hcl",t.h,t.c,t.l):t.h||t.s?wT("hsl",t.h,t.s,t.l):t.l||t.a?wT("lab",t.l,t.a,t.b):t.r||t.g||t.b?wT("rgb",t.r,t.g,t.b):null}(t.color):null!=t.field?MT(t.field):void 0!==t.value?wt(t.value):void 0;return null!=t.scale&&(e=function(t,e){const n=xT(t.scale);null!=t.range?e="lerp(_range(".concat(n,"), ").concat(+t.range,")"):(void 0!==e&&(e="_scale(".concat(n,", ").concat(e,")")),t.band&&(e=(e?e+"+":"")+"_bandwidth(".concat(n,")")+(1==+t.band?"":"*"+kT(t.band)),t.extra&&(e="(datum.extra ? _scale(".concat(n,", datum.extra.value) : ").concat(e,")"))),null==e&&(e="0"));return e}(t,e)),void 0===e&&(e=null),null!=t.exponent&&(e="pow(".concat(e,",").concat(kT(t.exponent),")")),null!=t.mult&&(e+="*".concat(kT(t.mult))),null!=t.offset&&(e+="+".concat(kT(t.offset))),t.round&&(e="round(".concat(e,")")),e}const wT=(t,e,n,r)=>"(".concat(t,"(").concat([e,n,r].map(bT).join(","),")+'')");function kT(t){return _(t)?"("+bT(t)+")":t}function MT(t){return AT(_(t)?t:{datum:t})}function AT(t){let e,n,r;if(t.signal)e="datum",r=t.signal;else if(t.group||t.parent){for(n=Math.max(1,t.level||1),e="item";n-- >0;)e+=".mark.group";t.parent?(r=t.parent,e+=".datum"):r=t.group}else t.datum?(e="datum",r=t.datum):u("Invalid field reference: "+wt(t));return t.signal||(r=pt(r)?s(r).map(wt).join("]["):AT(r)),e+"["+r+"]"}function ET(t,e,n,r,i,o){const a={};(o=o||{}).encoders={$encode:a},t=function(t,e,n,r,i){const o={},a={};let u,s,l,c;for(s in s="lineBreak","text"!==e||null==i[s]||hT(s,t)||_T(o,s,i[s]),("legend"==n||String(n).startsWith("axis"))&&(n=null),c=n===pT?i.group:n===dT?K({},i.mark,i[e]):null,c)l=hT(s,t)||("fill"===s||"stroke"===s)&&(hT("fill",t)||hT("stroke",t)),l||_T(o,s,c[s]);for(s in $(r).forEach((e=>{const n=i.style&&i.style[e];for(const e in n)hT(e,t)||_T(o,e,n[e])})),t=K({},t),o)c=o[s],c.signal?(u=u||{})[s]=c:a[s]=c;return t.enter=K(a,t.enter),u&&(t.update=K(u,t.update)),t}(t,e,n,r,i.config);for(const n in t)a[n]=DT(t[n],e,o,i);return o}function DT(t,e,n,r){const i={},o={};for(const e in t)null!=t[e]&&(i[e]=CT((a=t[e],v(a)?function(t){let e="";return t.forEach((t=>{const n=bT(t);e+=t.test?"(".concat(t.test,")?").concat(n,":"):n})),":"===M(e)&&(e+="null"),e}(a):bT(a)),r,n,o));var a;return{$expr:{marktype:e,channels:i},$fields:Object.keys(o),$output:Object.keys(t)}}function CT(t,e,n,r){const i=HS(t,e);return i.$fields.forEach((t=>r[t]=1)),K(n,i.$params),i.$expr}const FT=["value","update","init","react","bind"];function ST(t,e){u(t+' for "outer" push: '+wt(e))}function BT(t,e){const n=t.name;if("outer"===t.push)e.signals[n]||ST("No prior signal definition",n),FT.forEach((e=>{void 0!==t[e]&&ST("Invalid property ",e)}));else{const r=e.addSignal(n,t.value);!1===t.react&&(r.react=!1),t.bind&&e.addBinding(n,t.bind)}}function TT(t,e,n,r){this.id=-1,this.type=t,this.value=e,this.params=n,r&&(this.parent=r)}function zT(t,e,n,r){return new TT(t,e,n,r)}function NT(t,e){return zT("operator",t,e)}function OT(t){const e={$ref:t.id};return t.id<0&&(t.refs=t.refs||[]).push(e),e}function RT(t,e){return e?{$field:t,$name:e}:{$field:t}}const LT=RT("key");function UT(t,e){return{$compare:t,$order:e}}function qT(t,e){return(t&&t.signal?"$"+t.signal:t||"")+(t&&e?"_":"")+(e&&e.signal?"$"+e.signal:e||"")}const PT="scope",jT="view";function IT(t){return t&&t.signal}function $T(t){if(IT(t))return!0;if(_(t))for(const e in t)if($T(t[e]))return!0;return!1}function WT(t,e){return null!=t?t:e}function HT(t){return t&&t.signal||t}const YT="timer";function VT(t,e){return(t.merge?GT:t.stream?XT:t.type?JT:u("Invalid stream specification: "+wt(t)))(t,e)}function GT(t,e){const n=ZT({merge:t.merge.map((t=>VT(t,e)))},t,e);return e.addStream(n).id}function XT(t,e){const n=ZT({stream:VT(t.stream,e)},t,e);return e.addStream(n).id}function JT(t,e){let n;t.type===YT?(n=e.event(YT,t.throttle),t={between:t.between,filter:t.filter}):n=e.event(function(t){return t===PT?jT:t||jT}(t.source),t.type);const r=ZT({stream:n},t,e);return 1===Object.keys(r).length?n:e.addStream(r).id}function ZT(t,e,n){let r=e.between;return r&&(2!==r.length&&u('Stream "between" parameter must have 2 entries: '+wt(e)),t.between=[VT(r[0],n),VT(r[1],n)]),r=e.filter?[].concat(e.filter):[],(e.marktype||e.markname||e.markrole)&&r.push(function(t,e,n){const r="event.item";return r+(t&&"*"!==t?"&&"+r+".mark.marktype==='"+t+"'":"")+(n?"&&"+r+".mark.role==='"+n+"'":"")+(e?"&&"+r+".mark.name==='"+e+"'":"")}(e.marktype,e.markname,e.markrole)),e.source===PT&&r.push("inScope(event.item)"),r.length&&(t.filter=HS("("+r.join(")&&(")+")",n).$expr),null!=(r=e.throttle)&&(t.throttle=+r),null!=(r=e.debounce)&&(t.debounce=+r),e.consume&&(t.consume=!0),t}const QT={code:"_.$value",ast:{type:"Identifier",value:"value"}};function KT(t,e,n){const r=t.encode,i={target:n};let o=t.events,a=t.update,s=[];o||u("Signal update missing events specification."),pt(o)&&(o=function(t,e,n){return tT=e||"view",eT=n||KB,rT(t.trim()).map(iT)}(o,e.isSubscope()?PT:jT)),o=$(o).filter((t=>t.signal||t.scale?(s.push(t),0):1)),s.length>1&&(s=[tz(s)]),o.length&&s.push(o.length>1?{merge:o}:o[0]),null!=r&&(a&&u("Signal encode and update are mutually exclusive."),a="encode(item(),"+wt(r)+")"),i.update=pt(a)?HS(a,e):null!=a.expr?HS(a.expr,e):null!=a.value?a.value:null!=a.signal?{$expr:QT,$params:{$value:e.signalRef(a.signal)}}:u("Invalid signal update specification."),t.force&&(i.options={force:!0}),s.forEach((t=>e.addUpdate(K(function(t,e){return{source:t.signal?e.signalRef(t.signal):t.scale?e.scaleRef(t.scale):VT(t,e)}}(t,e),i))))}function tz(t){return{signal:"["+t.map((t=>t.scale?'scale("'+t.scale+'")':t.signal))+"]"}}const ez=t=>(e,n,r)=>zT(t,n,e||void 0,r),nz=ez("aggregate"),rz=ez("axisticks"),iz=ez("bound"),oz=ez("collect"),az=ez("compare"),uz=ez("datajoin"),sz=ez("encode"),lz=ez("expression"),cz=ez("facet"),fz=ez("field"),hz=ez("key"),dz=ez("legendentries"),pz=ez("load"),gz=ez("mark"),mz=ez("multiextent"),yz=ez("multivalues"),vz=ez("overlap"),_z=ez("params"),xz=ez("prefacet"),bz=ez("projection"),wz=ez("proxy"),kz=ez("relay"),Mz=ez("render"),Az=ez("scale"),Ez=ez("sieve"),Dz=ez("sortitems"),Cz=ez("viewlayout"),Fz=ez("values");let Sz=0;const Bz={min:"min",max:"max",count:"sum"};function Tz(t,e){const n=e.getScale(t.name).params;let r;for(r in n.domain=Rz(t.domain,t,e),null!=t.range&&(n.range=Wz(t,e,n)),null!=t.interpolate&&function(t,e){e.interpolate=zz(t.type||t),null!=t.gamma&&(e.interpolateGamma=zz(t.gamma))}(t.interpolate,n),null!=t.nice&&(n.nice=function(t){return _(t)?{interval:zz(t.interval),step:zz(t.step)}:zz(t)}(t.nice)),null!=t.bins&&(n.bins=function(t,e){return t.signal||v(t)?Nz(t,e):e.objectProperty(t)}(t.bins,e)),t)rt(n,r)||"name"===r||(n[r]=zz(t[r],e))}function zz(t,e){return _(t)?t.signal?e.signalRef(t.signal):u("Unsupported object: "+wt(t)):t}function Nz(t,e){return t.signal?e.signalRef(t.signal):t.map((t=>zz(t,e)))}function Oz(t){u("Can not find data set: "+wt(t))}function Rz(t,e,n){if(t)return t.signal?n.signalRef(t.signal):(v(t)?Lz:t.fields?qz:Uz)(t,e,n);null==e.domainMin&&null==e.domainMax||u("No scale domain defined for domainMin/domainMax to override.")}function Lz(t,e,n){return t.map((t=>zz(t,n)))}function Uz(t,e,n){const r=n.getData(t.data);return r||Oz(t.data),vd(e.type)?r.valuesRef(n,t.field,jz(t.sort,!1)):wd(e.type)?r.domainRef(n,t.field):r.extentRef(n,t.field)}function qz(t,e,n){const r=t.data,i=t.fields.reduce(((t,e)=>(e=pt(e)?{data:r,field:e}:v(e)||e.signal?function(t,e){const n="_:vega:_"+Sz++,r=oz({});if(v(t))r.value={$ingest:t};else if(t.signal){const i="setdata("+wt(n)+","+t.signal+")";r.params.input=e.signalRef(i)}return e.addDataPipeline(n,[r,Ez({})]),{data:n,field:"data"}}(e,n):e,t.push(e),t)),[]);return(vd(e.type)?Pz:wd(e.type)?Iz:$z)(t,n,i)}function Pz(t,e,n){const r=jz(t.sort,!0);let i,o;const a=n.map((t=>{const n=e.getData(t.data);return n||Oz(t.data),n.countsRef(e,t.field,r)})),u={groupby:LT,pulse:a};r&&(i=r.op||"count",o=r.field?qT(i,r.field):"count",u.ops=[Bz[i]],u.fields=[e.fieldRef(o)],u.as=[o]),i=e.add(nz(u));const s=e.add(oz({pulse:OT(i)}));return o=e.add(Fz({field:LT,sort:e.sortRef(r),pulse:OT(s)})),OT(o)}function jz(t,e){return t&&(t.field||t.op?t.field||"count"===t.op?e&&t.field&&t.op&&!Bz[t.op]&&u("Multiple domain scales can not be sorted using "+t.op):u("No field provided for sort aggregate op: "+t.op):_(t)?t.field="key":t={field:"key"}),t}function Iz(t,e,n){const r=n.map((t=>{const n=e.getData(t.data);return n||Oz(t.data),n.domainRef(e,t.field)}));return OT(e.add(yz({values:r})))}function $z(t,e,n){const r=n.map((t=>{const n=e.getData(t.data);return n||Oz(t.data),n.extentRef(e,t.field)}));return OT(e.add(mz({extents:r})))}function Wz(t,e,n){const r=e.config.range;let i=t.range;if(i.signal)return e.signalRef(i.signal);if(pt(i)){if(r&&rt(r,i))return Wz(t=K({},t,{range:r[i]}),e,n);"width"===i?i=[0,{signal:"width"}]:"height"===i?i=vd(t.type)?[0,{signal:"height"}]:[{signal:"height"},0]:u("Unrecognized scale range value: "+wt(i))}else{if(i.scheme)return n.scheme=v(i.scheme)?Nz(i.scheme,e):zz(i.scheme,e),i.extent&&(n.schemeExtent=Nz(i.extent,e)),void(i.count&&(n.schemeCount=zz(i.count,e)));if(i.step)return void(n.rangeStep=zz(i.step,e));if(vd(t.type)&&!v(i))return Rz(i,t,e);v(i)||u("Unsupported range type: "+wt(i))}return i.map((t=>(v(t)?Nz:zz)(t,e)))}function Hz(t,e,n){return v(t)?t.map((t=>Hz(t,e,n))):_(t)?t.signal?n.signalRef(t.signal):"fit"===e?t:u("Unsupported parameter object: "+wt(t)):t}const Yz="top",Vz="left",Gz="right",Xz="bottom",Jz="center",Zz="index",Qz="label",Kz="perc",tN="value",eN="guide-label",nN="guide-title",rN="group-title",iN="group-subtitle",oN="symbol",aN="gradient",uN="discrete",sN="size",lN=[sN,"shape","fill","stroke","strokeWidth","strokeDash","opacity"],cN={name:1,style:1,interactive:1},fN={value:0},hN={value:1},dN="group",pN="rect",gN="rule",mN="text";function yN(t){return t.type=dN,t.interactive=t.interactive||!1,t}function vN(t,e){const n=(n,r)=>WT(t[n],WT(e[n],r));return n.isVertical=n=>"vertical"===WT(t.direction,e.direction||(n?e.symbolDirection:e.gradientDirection)),n.gradientLength=()=>WT(t.gradientLength,e.gradientLength||e.gradientWidth),n.gradientThickness=()=>WT(t.gradientThickness,e.gradientThickness||e.gradientHeight),n.entryColumns=()=>WT(t.columns,WT(e.columns,+n.isVertical(!0))),n}function _N(t,e){const n=e&&(e.update&&e.update[t]||e.enter&&e.enter[t]);return n&&n.signal?n:n?n.value:null}function xN(t,e,n){return"item.anchor === '".concat("start","' ? ").concat(t," : item.anchor === '").concat("end","' ? ").concat(e," : ").concat(n)}const bN=xN(wt(Vz),wt(Gz),wt(Jz));function wN(t,e){return e?t?_(t)?Object.assign({},t,{offset:wN(t.offset,e)}):{value:t,offset:e}:e:t}function kN(t,e){return e?(t.name=e.name,t.style=e.style||t.style,t.interactive=!!e.interactive,t.encode=fT(t.encode,e,cN)):t.interactive=!1,t}function MN(t,e,n,r){const i=vN(t,n),o=i.isVertical(),a=i.gradientThickness(),u=i.gradientLength();let s,l,c,f,h;o?(l=[0,1],c=[0,0],f=a,h=u):(l=[0,0],c=[1,0],f=u,h=a);const d={enter:s={opacity:fN,x:fN,y:fN,width:sT(f),height:sT(h)},update:K({},s,{opacity:hN,fill:{gradient:e,start:l,stop:c}}),exit:{opacity:fN}};return cT(d,{stroke:i("gradientStrokeColor"),strokeWidth:i("gradientStrokeWidth")},{opacity:i("gradientOpacity")}),kN({type:pN,role:"legend-gradient",encode:d},r)}function AN(t,e,n,r,i){const o=vN(t,n),a=o.isVertical(),u=o.gradientThickness(),s=o.gradientLength();let l,c,f,h,d="";a?(l="y",f="y2",c="x",h="width",d="1-"):(l="x",f="x2",c="y",h="height");const p={opacity:fN,fill:{scale:e,field:tN}};p[l]={signal:d+"datum."+Kz,mult:s},p[c]=fN,p[f]={signal:d+"datum.perc2",mult:s},p[h]=sT(u);const g={enter:p,update:K({},p,{opacity:hN}),exit:{opacity:fN}};return cT(g,{stroke:o("gradientStrokeColor"),strokeWidth:o("gradientStrokeWidth")},{opacity:o("gradientOpacity")}),kN({type:pN,role:"legend-band",key:tN,from:i,encode:g},r)}const EN="datum.".concat(Kz,'<=0?"').concat(Vz,'":datum.').concat(Kz,'>=1?"').concat(Gz,'":"').concat(Jz,'"'),DN="datum.".concat(Kz,'<=0?"').concat(Xz,'":datum.').concat(Kz,'>=1?"').concat(Yz,'":"').concat("middle",'"');function CN(t,e,n,r){const i=vN(t,e),o=i.isVertical(),a=sT(i.gradientThickness()),u=i.gradientLength();let s,l,c,f,h=i("labelOverlap"),d="";const p={enter:s={opacity:fN},update:l={opacity:hN,text:{field:Qz}},exit:{opacity:fN}};return cT(p,{fill:i("labelColor"),fillOpacity:i("labelOpacity"),font:i("labelFont"),fontSize:i("labelFontSize"),fontStyle:i("labelFontStyle"),fontWeight:i("labelFontWeight"),limit:WT(t.labelLimit,e.gradientLabelLimit)}),o?(s.align={value:"left"},s.baseline=l.baseline={signal:DN},c="y",f="x",d="1-"):(s.align=l.align={signal:EN},s.baseline={value:"top"},c="x",f="y"),s[c]=l[c]={signal:d+"datum."+Kz,mult:u},s[f]=l[f]=a,a.offset=WT(t.labelOffset,e.gradientLabelOffset)||0,h=h?{separation:i("labelSeparation"),method:h,order:"datum.index"}:void 0,kN({type:mN,role:mT,style:eN,key:tN,from:r,encode:p,overlap:h},n)}function FN(t,e,n,r,i){const o=vN(t,e),a=n.entries,u=!(!a||!a.interactive),s=a?a.name:void 0,l=o("clipHeight"),c=o("symbolOffset"),f={data:"value"},h="(".concat(i,") ? datum.").concat("offset"," : datum.").concat(sN),d=l?sT(l):{field:sN},p="datum.".concat(Zz),g="max(1, ".concat(i,")");let m,y,v,_,x;d.mult=.5,m={enter:y={opacity:fN,x:{signal:h,mult:.5,offset:c},y:d},update:v={opacity:hN,x:y.x,y:y.y},exit:{opacity:fN}};let b=null,w=null;t.fill||(b=e.symbolBaseFillColor,w=e.symbolBaseStrokeColor),cT(m,{fill:o("symbolFillColor",b),shape:o("symbolType"),size:o("symbolSize"),stroke:o("symbolStrokeColor",w),strokeDash:o("symbolDash"),strokeDashOffset:o("symbolDashOffset"),strokeWidth:o("symbolStrokeWidth")},{opacity:o("symbolOpacity")}),lN.forEach((e=>{t[e]&&(v[e]=y[e]={scale:t[e],field:tN})}));const k=kN({type:"symbol",role:"legend-symbol",key:tN,from:f,clip:!!l||void 0,encode:m},n.symbols),M=sT(c);M.offset=o("labelOffset"),m={enter:y={opacity:fN,x:{signal:h,offset:M},y:d},update:v={opacity:hN,text:{field:Qz},x:y.x,y:y.y},exit:{opacity:fN}},cT(m,{align:o("labelAlign"),baseline:o("labelBaseline"),fill:o("labelColor"),fillOpacity:o("labelOpacity"),font:o("labelFont"),fontSize:o("labelFontSize"),fontStyle:o("labelFontStyle"),fontWeight:o("labelFontWeight"),limit:o("labelLimit")});const A=kN({type:mN,role:mT,style:eN,key:tN,from:f,encode:m},n.labels);return m={enter:{noBound:{value:!l},width:fN,height:l?sT(l):fN,opacity:fN},exit:{opacity:fN},update:v={opacity:hN,row:{signal:null},column:{signal:null}}},o.isVertical(!0)?(_="ceil(item.mark.items.length / ".concat(g,")"),v.row.signal="".concat(p,"%").concat(_),v.column.signal="floor(".concat(p," / ").concat(_,")"),x={field:["row",p]}):(v.row.signal="floor(".concat(p," / ").concat(g,")"),v.column.signal="".concat(p," % ").concat(g),x={field:p}),v.column.signal="(".concat(i,")?").concat(v.column.signal,":").concat(p),yN({role:gT,from:r={facet:{data:r,name:"value",groupby:Zz}},encode:fT(m,a,cN),marks:[k,A],name:s,interactive:u,sort:x})}const SN='item.orient === "left"',BN='item.orient === "right"',TN="(".concat(SN," || ").concat(BN,")"),zN="datum.vgrad && ".concat(TN),NN=xN('"top"','"bottom"','"middle"'),ON=xN('"right"','"left"','"center"'),RN="datum.vgrad && ".concat(BN," ? (").concat(ON,") : (").concat(TN," && !(datum.vgrad && ").concat(SN,')) ? "left" : ').concat(bN),LN="item._anchor || (".concat(TN,' ? "middle" : "start")'),UN="".concat(zN," ? (").concat(SN," ? -90 : 90) : 0"),qN="".concat(TN," ? (datum.vgrad ? (").concat(BN,' ? "bottom" : "top") : ').concat(NN,') : "top"');function PN(t,e){let n;return _(t)&&(t.signal?n=t.signal:t.path?n="pathShape("+jN(t.path)+")":t.sphere&&(n="geoShape("+jN(t.sphere)+', {type: "Sphere"})')),n?e.signalRef(n):!!t}function jN(t){return _(t)&&t.signal?t.signal:wt(t)}function IN(t){const e=t.role||"";return e.indexOf("axis")&&e.indexOf("legend")&&e.indexOf("title")?t.type===dN?gT:e||dT:e}function $N(t){return{marktype:t.type,name:t.name||void 0,role:t.role||IN(t),zindex:+t.zindex||void 0,aria:t.aria,description:t.description}}function WN(t,e){return t&&t.signal?e.signalRef(t.signal):!1!==t}function HN(t,e){const n=ma(t.type);n||u("Unrecognized transform type: "+wt(t.type));const r=zT(n.type.toLowerCase(),null,YN(n,t,e));return t.signal&&e.addSignal(t.signal,e.proxy(r)),r.metadata=n.metadata||{},r}function YN(t,e,n){const r={},i=t.params.length;for(let o=0;oXN(t,e,n)))):XN(t,r,n)}(t,e,n):"projection"===r?n.projectionRef(e[t.name]):t.array&&!IT(i)?i.map((e=>GN(t,e,n))):GN(t,i,n):void(t.required&&u("Missing required "+wt(e.type)+" parameter: "+wt(t.name)))}function GN(t,e,n){const r=t.type;if(IT(e))return KN(r)?u("Expression references can not be signals."):tO(r)?n.fieldRef(e):eO(r)?n.compareRef(e):n.signalRef(e.signal);{const i=t.expr||tO(r);return i&&JN(e)?n.exprRef(e.expr,e.as):i&&ZN(e)?RT(e.field,e.as):KN(r)?HS(e,n):QN(r)?OT(n.getData(e).values):tO(r)?RT(e):eO(r)?n.compareRef(e):e}}function XN(t,e,n){const r=t.params.length;let i;for(let n=0;nt&&t.expr,ZN=t=>t&&t.field,QN=t=>"data"===t,KN=t=>"expr"===t,tO=t=>"field"===t,eO=t=>"compare"===t;function nO(t,e){return t.$ref?t:t.data&&t.data.$ref?t.data:OT(e.getData(t.data).output)}function rO(t,e,n,r,i){this.scope=t,this.input=e,this.output=n,this.values=r,this.aggregate=i,this.index={}}function iO(t){return pt(t)?t:null}function oO(t,e,n){const r=qT(n.op,n.field);let i;if(e.ops){for(let t=0,n=e.as.length;tnull==t?"null":t)).join(",")+"),0)",e);s.update=l.$expr,s.params=l.$params}function sO(t,e){const n=IN(t),r=t.type===dN,i=t.from&&t.from.facet,o=t.overlap;let a,s,l,c,f,h,d,p=t.layout||n===gT||n===pT;const g=n===dT||p||i,m=function(t,e,n){let r,i,o,a,s;return t?(r=t.facet)&&(e||u("Only group marks can be faceted."),null!=r.field?a=s=nO(r,n):(t.data?s=OT(n.getData(t.data).aggregate):(o=HN(K({type:"aggregate",groupby:$(r.groupby)},r.aggregate),n),o.params.key=n.keyRef(r.groupby),o.params.pulse=nO(r,n),a=s=OT(n.add(o))),i=n.keyRef(r.groupby,!0))):a=OT(n.add(oz(null,[{}]))),a||(a=nO(t,n)),{key:i,pulse:a,parent:s}}(t.from,r,e);s=e.add(uz({key:m.key||(t.key?RT(t.key):void 0),pulse:m.pulse,clean:!r}));const y=OT(s);s=l=e.add(oz({pulse:y})),s=e.add(gz({markdef:$N(t),interactive:WN(t.interactive,e),clip:PN(t.clip,e),context:{$context:!0},groups:e.lookup(),parent:e.signals.parent?e.signalRef("parent"):null,index:e.markpath(),pulse:OT(s)}));const v=OT(s);s=c=e.add(sz(ET(t.encode,t.type,n,t.style,e,{mod:!1,pulse:v}))),s.params.parent=e.encode(),t.transform&&t.transform.forEach((t=>{const n=HN(t,e),r=n.metadata;(r.generates||r.changes)&&u("Mark transforms should not generate new data."),r.nomod||(c.params.mod=!0),n.params.pulse=OT(s),e.add(s=n)})),t.sort&&(s=e.add(Dz({sort:e.compareRef(t.sort),pulse:OT(s)})));const _=OT(s);(i||p)&&(p=e.add(Cz({layout:e.objectProperty(t.layout),legends:e.legends,mark:v,pulse:_})),h=OT(p));const x=e.add(iz({mark:v,pulse:h||_}));d=OT(x),r&&(g&&(a=e.operators,a.pop(),p&&a.pop()),e.pushState(_,h||d,y),i?function(t,e,n){const r=t.from.facet,i=r.name,o=nO(r,e);let a;r.name||u("Facet must have a name: "+wt(r)),r.data||u("Facet must reference a data set: "+wt(r)),r.field?a=e.add(xz({field:e.fieldRef(r.field),pulse:o})):r.groupby?a=e.add(cz({key:e.keyRef(r.groupby),group:OT(e.proxy(n.parent)),pulse:o})):u("Facet must specify groupby or field: "+wt(r));const s=e.fork(),l=s.add(oz()),c=s.add(Ez({pulse:OT(l)}));s.addData(i,new rO(s,l,l,c)),s.addSignal("parent",null),a.params.subflow={$subflow:s.parse(t).toRuntime()}}(t,e,m):g?function(t,e,n){const r=e.add(xz({pulse:n.pulse})),i=e.fork();i.add(Ez()),i.addSignal("parent",null),r.params.subflow={$subflow:i.parse(t).toRuntime()}}(t,e,m):e.parse(t),e.popState(),g&&(p&&a.push(p),a.push(x))),o&&(d=function(t,e,n){const r=t.method,i=t.bound,o=t.separation,a={separation:IT(o)?n.signalRef(o.signal):o,method:IT(r)?n.signalRef(r.signal):r,pulse:e};t.order&&(a.sort=n.compareRef({field:t.order}));if(i){const t=i.tolerance;a.boundTolerance=IT(t)?n.signalRef(t.signal):+t,a.boundScale=n.scaleRef(i.scale),a.boundOrient=i.orient}return OT(n.add(vz(a)))}(o,d,e));const b=e.add(Mz({pulse:d})),w=e.add(Ez({pulse:OT(b)},void 0,e.parent()));null!=t.name&&(f=t.name,e.addData(f,new rO(e,l,b,w)),t.on&&t.on.forEach((t=>{(t.insert||t.remove||t.toggle)&&u("Marks only support modify triggers."),uO(t,e,f)})))}function lO(t,e){const n=e.config.legend,r=t.encode||{},i=vN(t,n),o=r.legend||{},a=o.name||void 0,s=o.interactive,l=o.style,c={};let f,h,d,p=0;lN.forEach((e=>t[e]?(c[e]=t[e],p=p||t[e]):0)),p||u("Missing valid scale for legend.");const g=function(t,e){let n=t.type||oN;t.type||1!==function(t){return lN.reduce(((e,n)=>e+(t[n]?1:0)),0)}(t)||!t.fill&&!t.stroke||(n=yd(e)?aN:_d(e)?uN:oN);return n!==aN?n:_d(e)?uN:aN}(t,e.scaleType(p)),m={title:null!=t.title,scales:c,type:g,vgrad:"symbol"!==g&&i.isVertical()},y=OT(e.add(oz(null,[m]))),v=OT(e.add(dz(h={type:g,scale:e.scaleRef(p),count:e.objectProperty(i("tickCount")),limit:e.property(i("symbolLimit")),values:e.objectProperty(t.values),minstep:e.property(t.tickMinStep),formatType:e.property(t.formatType),formatSpecifier:e.property(t.format)})));return g===aN?(d=[MN(t,p,n,r.gradient),CN(t,n,r.labels,v)],h.count=h.count||e.signalRef("max(2,2*floor((".concat(HT(i.gradientLength()),")/100))"))):g===uN?d=[AN(t,p,n,r.gradient,v),CN(t,n,r.labels,v)]:(f=function(t,e){const n=vN(t,e);return{align:n("gridAlign"),columns:n.entryColumns(),center:{row:!0,column:!1},padding:{row:n("rowPadding"),column:n("columnPadding")}}}(t,n),d=[FN(t,n,r,v,HT(f.columns))],h.size=function(t,e,n){const r=HT(fO("size",t,n)),i=HT(fO("strokeWidth",t,n)),o=HT(function(t,e,n){return _N("fontSize",t)||function(t,e,n){const r=e.config.style[n];return r&&r[t]}("fontSize",e,n)}(n[1].encode,e,eN));return HS("max(ceil(sqrt(".concat(r,")+").concat(i,"),").concat(o,")"),e)}(t,e,d[0].marks)),d=[yN({role:"legend-entry",from:y,encode:{enter:{x:{value:0},y:{value:0}}},marks:d,layout:f,interactive:s})],m.title&&d.push(function(t,e,n,r){const i=vN(t,e),o={enter:{opacity:fN},update:{opacity:hN,x:{field:{group:"padding"}},y:{field:{group:"padding"}}},exit:{opacity:fN}};return cT(o,{orient:i("titleOrient"),_anchor:i("titleAnchor"),anchor:{signal:LN},angle:{signal:UN},align:{signal:RN},baseline:{signal:qN},text:t.title,fill:i("titleColor"),fillOpacity:i("titleOpacity"),font:i("titleFont"),fontSize:i("titleFontSize"),fontStyle:i("titleFontStyle"),fontWeight:i("titleFontWeight"),limit:i("titleLimit"),lineHeight:i("titleLineHeight")},{align:i("titleAlign"),baseline:i("titleBaseline")}),kN({type:mN,role:"legend-title",style:nN,from:r,encode:o},n)}(t,n,r.title,y)),sO(yN({role:"legend",from:y,encode:fT(cO(i,t,n),o,cN),marks:d,aria:i("aria"),description:i("description"),zindex:i("zindex"),name:a,interactive:s,style:l}),e)}function cO(t,e,n){const r={enter:{},update:{}};return cT(r,{orient:t("orient"),offset:t("offset"),padding:t("padding"),titlePadding:t("titlePadding"),cornerRadius:t("cornerRadius"),fill:t("fillColor"),stroke:t("strokeColor"),strokeWidth:n.strokeWidth,strokeDash:n.strokeDash,x:t("legendX"),y:t("legendY"),format:e.format,formatType:e.formatType}),r}function fO(t,e,n){return e[t]?'scale("'.concat(e[t],'",datum)'):_N(t,n[0].encode)}rO.fromEntries=function(t,e){const n=e.length,r=e[n-1],i=e[n-2];let o=e[0],a=null,u=1;for(o&&"load"===o.type&&(o=e[1]),t.add(e[0]);u{n.push(HN(t,e))})),t.on&&t.on.forEach((n=>{uO(n,e,t.name)})),e.addDataPipeline(t.name,function(t,e,n){const r=[];let i,o,a,u,s,l=null,c=!1,f=!1;t.values?$T(t.values)||$T(t.format)?(r.push(yO(e,t)),r.push(l=mO())):r.push(l=mO({$ingest:t.values,$format:t.format})):t.url?$T(t.url)||$T(t.format)?(r.push(yO(e,t)),r.push(l=mO())):r.push(l=mO({$request:t.url,$format:t.format})):t.source&&(l=i=$(t.source).map((t=>OT(e.getData(t).output))),r.push(null));for(o=0,a=n.length;ot===Xz||t===Yz,_O=(t,e,n)=>IT(t)?AO(t.signal,e,n):t===Vz||t===Yz?e:n,xO=(t,e,n)=>IT(t)?kO(t.signal,e,n):vO(t)?e:n,bO=(t,e,n)=>IT(t)?MO(t.signal,e,n):vO(t)?n:e,wO=(t,e,n)=>IT(t)?EO(t.signal,e,n):t===Yz?{value:e}:{value:n},kO=(t,e,n)=>CO("".concat(t," === '").concat(Yz,"' || ").concat(t," === '").concat(Xz,"'"),e,n),MO=(t,e,n)=>CO("".concat(t," !== '").concat(Yz,"' && ").concat(t," !== '").concat(Xz,"'"),e,n),AO=(t,e,n)=>SO("".concat(t," === '").concat(Vz,"' || ").concat(t," === '").concat(Yz,"'"),e,n),EO=(t,e,n)=>SO("".concat(t," === '").concat(Yz,"'"),e,n),DO=(t,e,n)=>SO("".concat(t," === '").concat(Gz,"'"),e,n),CO=(t,e,n)=>(e=null!=e?sT(e):e,n=null!=n?sT(n):n,FO(e)&&FO(n)?(e=e?e.signal||wt(e.value):null,n=n?n.signal||wt(n.value):null,{signal:"".concat(t," ? (").concat(e,") : (").concat(n,")")}):[K({test:t},e)].concat(n||[])),FO=t=>null==t||1===Object.keys(t).length,SO=(t,e,n)=>({signal:"".concat(t," ? (").concat(TO(e),") : (").concat(TO(n),")")}),BO=(t,e,n,r,i)=>({signal:(null!=r?"".concat(t," === '").concat(Vz,"' ? (").concat(TO(r),") : "):"")+(null!=n?"".concat(t," === '").concat(Xz,"' ? (").concat(TO(n),") : "):"")+(null!=i?"".concat(t," === '").concat(Gz,"' ? (").concat(TO(i),") : "):"")+(null!=e?"".concat(t," === '").concat(Yz,"' ? (").concat(TO(e),") : "):"")+"(null)"}),TO=t=>IT(t)?t.signal:null==t?null:wt(t),zO=(t,e)=>{const n=t.signal;return n&&n.endsWith("(null)")?{signal:n.slice(0,-6)+e.signal}:t};function NO(t,e,n,r){let i;if(e&&rt(e,t))return e[t];if(rt(n,t))return n[t];if(t.startsWith("title")){switch(t){case"titleColor":i="fill";break;case"titleFont":case"titleFontSize":case"titleFontWeight":i=t[5].toLowerCase()+t.slice(6)}return r["guide-title"][i]}if(t.startsWith("label")){switch(t){case"labelColor":i="fill";break;case"labelFont":case"labelFontSize":i=t[5].toLowerCase()+t.slice(6)}return r["guide-label"][i]}return null}function OO(t){const e={};for(const n of t)if(n)for(const t in n)e[t]=1;return Object.keys(e)}function RO(t,e){return{scale:t.scale,range:e}}function LO(t,e,n,r,i){const o=vN(t,e),a=t.orient,u=t.gridScale,s=_O(a,1,-1),l=function(t,e){if(1===e);else if(_(t)){let n=t=K({},t);for(;null!=n.mult;){if(!_(n.mult))return n.mult=IT(e)?{signal:"(".concat(n.mult,") * (").concat(e.signal,")")}:n.mult*e,t;n=n.mult=K({},n.mult)}n.mult=e}else t=IT(e)?{signal:"(".concat(e.signal,") * (").concat(t||0,")")}:e*(t||0);return t}(t.offset,s);let c,f,h;const d={enter:c={opacity:fN},update:h={opacity:hN},exit:f={opacity:fN}};cT(d,{stroke:o("gridColor"),strokeCap:o("gridCap"),strokeDash:o("gridDash"),strokeDashOffset:o("gridDashOffset"),strokeOpacity:o("gridOpacity"),strokeWidth:o("gridWidth")});const p={scale:t.scale,field:tN,band:i.band,extra:i.extra,offset:i.offset,round:o("tickRound")},g=xO(a,{signal:"height"},{signal:"width"}),m=u?{scale:u,range:0,mult:s,offset:l}:{value:0,offset:l},y=u?{scale:u,range:1,mult:s,offset:l}:K(g,{mult:s,offset:l});return c.x=h.x=xO(a,p,m),c.y=h.y=bO(a,p,m),c.x2=h.x2=bO(a,y),c.y2=h.y2=xO(a,y),f.x=xO(a,p),f.y=bO(a,p),kN({type:gN,role:"axis-grid",key:tN,from:r,encode:d},n)}function UO(t,e,n,r,i){return{signal:'flush(range("'+t+'"), scale("'+t+'", datum.value), '+e+","+n+","+r+","+i+")"}}function qO(t,e,n,r,i,o){const a=vN(t,e),u=t.orient,s=t.scale,l=_O(u,-1,1),c=HT(a("labelFlush")),f=HT(a("labelFlushOffset")),h=a("labelAlign"),d=a("labelBaseline");let p,g=0===c||!!c;const m=sT(i);m.mult=l,m.offset=sT(a("labelPadding")||0),m.offset.mult=l;const y={scale:s,field:tN,band:.5,offset:wN(o.offset,a("labelOffset"))},v=xO(u,g?UO(s,c,'"left"','"right"','"center"'):{value:"center"},((t,e,n)=>IT(t)?DO(t.signal,e,n):t===Gz?{value:e}:{value:n})(u,"left","right")),_=xO(u,wO(u,"bottom","top"),g?UO(s,c,'"top"','"bottom"','"middle"'):{value:"middle"}),x=UO(s,c,"-(".concat(f,")"),f,0);g=g&&f;const b={opacity:fN,x:xO(u,y,m),y:bO(u,y,m)},w={enter:b,update:p={opacity:hN,text:{field:Qz},x:b.x,y:b.y,align:v,baseline:_},exit:{opacity:fN,x:b.x,y:b.y}};cT(w,{dx:!h&&g?xO(u,x):null,dy:!d&&g?bO(u,x):null}),cT(w,{angle:a("labelAngle"),fill:a("labelColor"),fillOpacity:a("labelOpacity"),font:a("labelFont"),fontSize:a("labelFontSize"),fontWeight:a("labelFontWeight"),fontStyle:a("labelFontStyle"),limit:a("labelLimit"),lineHeight:a("labelLineHeight")},{align:h,baseline:d});const k=a("labelBound");let M=a("labelOverlap");return M=M||k?{separation:a("labelSeparation"),method:M,order:"datum.index",bound:k?{scale:s,orient:u,tolerance:k}:null}:void 0,p.align!==v&&(p.align=zO(p.align,v)),p.baseline!==_&&(p.baseline=zO(p.baseline,_)),kN({type:mN,role:"axis-label",style:eN,key:tN,from:r,encode:w,overlap:M},n)}function PO(t,e,n,r){const i=vN(t,e),o=t.orient,a=_O(o,-1,1);let u,s;const l={enter:u={opacity:fN,anchor:sT(i("titleAnchor",null)),align:{signal:bN}},update:s=K({},u,{opacity:hN,text:sT(t.title)}),exit:{opacity:fN}},c={signal:'lerp(range("'.concat(t.scale,'"), ').concat(xN(0,1,.5),")")};return s.x=xO(o,c),s.y=bO(o,c),u.angle=xO(o,fN,((t,e)=>0===e?0:IT(t)?{signal:"(".concat(t.signal,") * ").concat(e)}:{value:t*e})(a,90)),u.baseline=xO(o,wO(o,Xz,Yz),{value:Xz}),s.angle=u.angle,s.baseline=u.baseline,cT(l,{fill:i("titleColor"),fillOpacity:i("titleOpacity"),font:i("titleFont"),fontSize:i("titleFontSize"),fontStyle:i("titleFontStyle"),fontWeight:i("titleFontWeight"),limit:i("titleLimit"),lineHeight:i("titleLineHeight")},{align:i("titleAlign"),angle:i("titleAngle"),baseline:i("titleBaseline")}),function(t,e,n,r){const i=(t,e)=>null!=t?(n.update[e]=zO(sT(t),n.update[e]),!1):!hT(e,r),o=i(t("titleX"),"x"),a=i(t("titleY"),"y");n.enter.auto=a===o?sT(a):xO(e,sT(a),sT(o))}(i,o,l,n),l.update.align=zO(l.update.align,u.align),l.update.angle=zO(l.update.angle,u.angle),l.update.baseline=zO(l.update.baseline,u.baseline),kN({type:mN,role:"axis-title",style:nN,from:r,encode:l},n)}function jO(t,e){const n=function(t,e){var n,r,i,o=e.config,a=o.style,u=o.axis,s="band"===e.scaleType(t.scale)&&o.axisBand,l=t.orient;if(IT(l)){const t=OO([o.axisX,o.axisY]),e=OO([o.axisTop,o.axisBottom,o.axisLeft,o.axisRight]);for(i of(n={},t))n[i]=xO(l,NO(i,o.axisX,u,a),NO(i,o.axisY,u,a));for(i of(r={},e))r[i]=BO(l.signal,NO(i,o.axisTop,u,a),NO(i,o.axisBottom,u,a),NO(i,o.axisLeft,u,a),NO(i,o.axisRight,u,a))}else n=l===Yz||l===Xz?o.axisX:o.axisY,r=o["axis"+l[0].toUpperCase()+l.slice(1)];return n||r||s?K({},u,n,r,s):u}(t,e),r=t.encode||{},i=r.axis||{},o=i.name||void 0,a=i.interactive,u=i.style,s=vN(t,n),l=function(t){const e=t("tickBand");let n,r,i=t("tickOffset");return e?e.signal?(n={signal:"(".concat(e.signal,") === 'extent' ? 1 : 0.5")},r={signal:"(".concat(e.signal,") === 'extent'")},_(i)||(i={signal:"(".concat(e.signal,") === 'extent' ? 0 : ").concat(i)})):"extent"===e?(n=1,r=!0,i=0):(n=.5,r=!1):(n=t("bandPosition"),r=t("tickExtra")),{extra:r,band:n,offset:i}}(s),c={scale:t.scale,ticks:!!s("ticks"),labels:!!s("labels"),grid:!!s("grid"),domain:!!s("domain"),title:null!=t.title},f=OT(e.add(oz({},[c]))),h=OT(e.add(rz({scale:e.scaleRef(t.scale),extra:e.property(l.extra),count:e.objectProperty(t.tickCount),values:e.objectProperty(t.values),minstep:e.property(t.tickMinStep),formatType:e.property(t.formatType),formatSpecifier:e.property(t.format)}))),d=[];let p;return c.grid&&d.push(LO(t,n,r.grid,h,l)),c.ticks&&(p=s("tickSize"),d.push(function(t,e,n,r,i,o){const a=vN(t,e),u=t.orient,s=_O(u,-1,1);let l,c,f;const h={enter:l={opacity:fN},update:f={opacity:hN},exit:c={opacity:fN}};cT(h,{stroke:a("tickColor"),strokeCap:a("tickCap"),strokeDash:a("tickDash"),strokeDashOffset:a("tickDashOffset"),strokeOpacity:a("tickOpacity"),strokeWidth:a("tickWidth")});const d=sT(i);d.mult=s;const p={scale:t.scale,field:tN,band:o.band,extra:o.extra,offset:o.offset,round:a("tickRound")};return f.y=l.y=xO(u,fN,p),f.y2=l.y2=xO(u,d),c.x=xO(u,p),f.x=l.x=bO(u,fN,p),f.x2=l.x2=bO(u,d),c.y=bO(u,p),kN({type:gN,role:"axis-tick",key:tN,from:r,encode:h},n)}(t,n,r.ticks,h,p,l))),c.labels&&(p=c.ticks?p:0,d.push(qO(t,n,r.labels,h,p,l))),c.domain&&d.push(function(t,e,n,r){const i=vN(t,e),o=t.orient;let a,u;const s={enter:a={opacity:fN},update:u={opacity:hN},exit:{opacity:fN}};cT(s,{stroke:i("domainColor"),strokeCap:i("domainCap"),strokeDash:i("domainDash"),strokeDashOffset:i("domainDashOffset"),strokeWidth:i("domainWidth"),strokeOpacity:i("domainOpacity")});const l=RO(t,0),c=RO(t,1);return a.x=u.x=xO(o,l,fN),a.x2=u.x2=xO(o,c),a.y=u.y=bO(o,l,fN),a.y2=u.y2=bO(o,c),kN({type:gN,role:"axis-domain",from:r,encode:s},n)}(t,n,r.domain,f)),c.title&&d.push(PO(t,n,r.title,f)),sO(yN({role:"axis",from:f,encode:fT(IO(s,t),i,cN),marks:d,aria:s("aria"),description:s("description"),zindex:s("zindex"),name:o,interactive:a,style:u}),e)}function IO(t,e){const n={enter:{},update:{}};return cT(n,{orient:t("orient"),offset:t("offset")||0,position:WT(e.position,0),titlePadding:t("titlePadding"),minExtent:t("minExtent"),maxExtent:t("maxExtent"),range:{signal:'abs(span(range("'.concat(e.scale,'")))')},translate:t("translate"),format:e.format,formatType:e.formatType}),n}function $O(t,e,n){const r=$(t.signals),i=$(t.scales);return n||r.forEach((t=>BT(t,e))),$(t.projections).forEach((t=>function(t,e){const n=e.config.projection||{},r={};for(const n in t)"name"!==n&&(r[n]=Hz(t[n],n,e));for(const t in n)null==r[t]&&(r[t]=Hz(n[t],t,e));e.addProjection(t.name,r)}(t,e))),i.forEach((t=>function(t,e){const n=t.type||"linear";gd(n)||u("Unrecognized scale type: "+wt(n)),e.addScale(t.name,{type:n,domain:void 0})}(t,e))),$(t.data).forEach((t=>gO(t,e))),i.forEach((t=>Tz(t,e))),(n||r).forEach((t=>function(t,e){const n=e.getSignal(t.name);let r=t.update;t.init&&(r?u("Signals can not include both init and update expressions."):(r=t.init,n.initonly=!0)),r&&(r=HS(r,e),n.update=r.$expr,n.params=r.$params),t.on&&t.on.forEach((t=>KT(t,e,n.id)))}(t,e))),$(t.axes).forEach((t=>jO(t,e))),$(t.marks).forEach((t=>sO(t,e))),$(t.legends).forEach((t=>lO(t,e))),t.title&&dO(t.title,e),e.parseLambdas(),e}function WO(t,e){const n=e.config,r=OT(e.root=e.add(NT())),i=function(t,e){const n=n=>WT(t[n],e[n]),r=[HO("background",n("background")),HO("autosize",oT(n("autosize"))),HO("padding",uT(n("padding"))),HO("width",n("width")||0),HO("height",n("height")||0)],i=r.reduce(((t,e)=>(t[e.name]=e,t)),{}),o={};return $(t.signals).forEach((t=>{rt(i,t.name)?t=K(i[t.name],t):r.push(t),o[t.name]=t})),$(e.signals).forEach((t=>{rt(o,t.name)||rt(i,t.name)||r.push(t)})),r}(t,n);i.forEach((t=>BT(t,e))),e.description=t.description||n.description,e.eventConfig=n.events,e.legends=e.objectProperty(n.legend&&n.legend.layout),e.locale=n.locale;const o=e.add(oz()),a=e.add(sz(ET((t=>fT({enter:{x:{value:0},y:{value:0}},update:{width:{signal:"width"},height:{signal:"height"}}},t))(t.encode),dN,pT,t.style,e,{pulse:OT(o)}))),u=e.add(Cz({layout:e.objectProperty(t.layout),legends:e.legends,autosize:e.signalRef("autosize"),mark:r,pulse:OT(a)}));e.operators.pop(),e.pushState(OT(a),OT(u),null),$O(t,e,i),e.operators.push(u);let s=e.add(iz({mark:r,pulse:OT(u)}));return s=e.add(Mz({pulse:OT(s)})),s=e.add(Ez({pulse:OT(s)})),e.addData("root",new rO(e,o,o,s)),e}function HO(t,e){return e&&e.signal?{name:t,update:e.signal}:{name:t,value:e}}function YO(t,e){this.config=t||{},this.options=e||{},this.bindings=[],this.field={},this.signals={},this.lambdas={},this.scales={},this.events={},this.data={},this.streams=[],this.updates=[],this.operators=[],this.eventConfig=null,this.locale=null,this._id=0,this._subid=0,this._nextsub=[0],this._parent=[],this._encode=[],this._lookup=[],this._markpath=[]}function VO(t){this.config=t.config,this.options=t.options,this.legends=t.legends,this.field=Object.create(t.field),this.signals=Object.create(t.signals),this.lambdas=Object.create(t.lambdas),this.scales=Object.create(t.scales),this.events=Object.create(t.events),this.data=Object.create(t.data),this.streams=[],this.updates=[],this.operators=[],this._id=0,this._subid=++t._nextsub[0],this._nextsub=t._nextsub,this._parent=t._parent.slice(),this._encode=t._encode.slice(),this._lookup=t._lookup.slice(),this._markpath=t._markpath}function GO(t){return(v(t)?XO:JO)(t)}function XO(t){const e=t.length;let n="[";for(let r=0;r0?",":"")+(_(e)?e.signal||GO(e):wt(e))}return n+"]"}function JO(t){let e,n,r="{",i=0;for(e in t)n=t[e],r+=(++i>1?",":"")+wt(e)+":"+(_(n)?n.signal||GO(n):wt(n));return r+"}"}YO.prototype=VO.prototype={parse(t){return $O(t,this)},fork(){return new VO(this)},isSubscope(){return this._subid>0},toRuntime(){return this.finish(),{description:this.description,operators:this.operators,streams:this.streams,updates:this.updates,bindings:this.bindings,eventConfig:this.eventConfig,locale:this.locale}},id(){return(this._subid?this._subid+":":0)+this._id++},add(t){return this.operators.push(t),t.id=this.id(),t.refs&&(t.refs.forEach((e=>{e.$ref=t.id})),t.refs=null),t},proxy(t){const e=t instanceof TT?OT(t):t;return this.add(wz({value:e}))},addStream(t){return this.streams.push(t),t.id=this.id(),t},addUpdate(t){return this.updates.push(t),t},finish(){let t,e;for(t in this.root&&(this.root.root=!0),this.signals)this.signals[t].signal=t;for(t in this.scales)this.scales[t].scale=t;function n(t,e,n){let r,i;t&&(r=t.data||(t.data={}),i=r[e]||(r[e]=[]),i.push(n))}for(t in this.data){e=this.data[t],n(e.input,t,"input"),n(e.output,t,"output"),n(e.values,t,"values");for(const r in e.index)n(e.index[r],t,"index:"+r)}return this},pushState(t,e,n){this._encode.push(OT(this.add(Ez({pulse:t})))),this._parent.push(e),this._lookup.push(n?OT(this.proxy(n)):null),this._markpath.push(-1)},popState(){this._encode.pop(),this._parent.pop(),this._lookup.pop(),this._markpath.pop()},parent(){return M(this._parent)},encode(){return M(this._encode)},lookup(){return M(this._lookup)},markpath(){const t=this._markpath;return++t[t.length-1]},fieldRef(t,e){if(pt(t))return RT(t,e);t.signal||u("Unsupported field reference: "+wt(t));const n=t.signal;let r=this.field[n];if(!r){const t={name:this.signalRef(n)};e&&(t.as=e),this.field[n]=r=OT(this.add(fz(t)))}return r},compareRef(t){let e=!1;const n=t=>IT(t)?(e=!0,this.signalRef(t.signal)):function(t){return t&&t.expr}(t)?(e=!0,this.exprRef(t.expr)):t,r=$(t.field).map(n),i=$(t.order).map(n);return e?OT(this.add(az({fields:r,orders:i}))):UT(r,i)},keyRef(t,e){let n=!1;const r=this.signals;return t=$(t).map((t=>IT(t)?(n=!0,OT(r[t.signal])):t)),n?OT(this.add(hz({fields:t,flat:e}))):function(t,e){const n={$key:t};return e&&(n.$flat=!0),n}(t,e)},sortRef(t){if(!t)return t;const e=qT(t.op,t.field),n=t.order||"ascending";return n.signal?OT(this.add(az({fields:e,orders:this.signalRef(n.signal)}))):UT(e,n)},event(t,e){const n=t+":"+e;if(!this.events[n]){const r=this.id();this.streams.push({id:r,source:t,type:e}),this.events[n]=r}return this.events[n]},hasOwnSignal(t){return rt(this.signals,t)},addSignal(t,e){this.hasOwnSignal(t)&&u("Duplicate signal name: "+wt(t));const n=e instanceof TT?e:this.add(NT(e));return this.signals[t]=n},getSignal(t){return this.signals[t]||u("Unrecognized signal name: "+wt(t)),this.signals[t]},signalRef(t){return this.signals[t]?OT(this.signals[t]):(rt(this.lambdas,t)||(this.lambdas[t]=this.add(NT(null))),OT(this.lambdas[t]))},parseLambdas(){const t=Object.keys(this.lambdas);for(let e=0,n=t.length;er+Math.floor(o*t.random()),pdf:t=>t===Math.floor(t)&&t>=r&&t=i?1:(e-r+1)/o},icdf:t=>t>=0&&t<=1?r-1+Math.floor(t*o):NaN};return a.min(e).max(n)},t.randomKDE=za,t.randomLCG=function(t){return function(){return(t=(1103515245*t+12345)%2147483647)/2147483647}},t.randomLogNormal=Ua,t.randomMixture=qa,t.randomNormal=Ta,t.randomUniform=Wa,t.read=Co,t.regressionExp=Za,t.regressionLinear=Xa,t.regressionLoess=nu,t.regressionLog=Ja,t.regressionPoly=tu,t.regressionPow=Qa,t.regressionQuad=Ka,t.renderModule=bv,t.repeat=_t,t.resetDefaultLocale=function(){return yo(),wo(),Do()},t.resetSVGClipId=Xp,t.resetSVGDefIds=function(){Xp(),Kd=0},t.responseType=pe,t.runtimeContext=tB,t.sampleCurve=au,t.sampleLogNormal=Na,t.sampleNormal=Ca,t.sampleUniform=Pa,t.scale=pd,t.sceneEqual=Cv,t.sceneFromJSON=Qm,t.scenePickVisit=$g,t.sceneToJSON=Zm,t.sceneVisit=Ig,t.sceneZOrder=jg,t.scheme=Td,t.serializeXML=Zy,t.setRandom=function(e){t.random=e},t.span=bt,t.splitAccessPath=s,t.stringValue=wt,t.textMetrics=Cm,t.timeBin=qr,t.timeFloor=fr,t.timeFormatLocale=Mo,t.timeInterval=yr,t.timeOffset=xr,t.timeSequence=kr,t.timeUnitSpecifier=Yn,t.timeUnits=Wn,t.toBoolean=kt,t.toDate=At,t.toNumber=A,t.toSet=Dt,t.toString=Et,t.transform=ya,t.transforms=ga,t.truncate=Ct,t.truthy=p,t.tupleid=Oo,t.typeParsers=jt,t.utcFloor=pr,t.utcInterval=vr,t.utcOffset=br,t.utcSequence=Mr,t.utcdayofyear=er,t.utcquarter=I,t.utcweek=nr,t.version="5.17.0",t.visitArray=Ft,t.week=Jn,t.writeConfig=w,t.zero=h,t.zoomLinear=L,t.zoomLog=U,t.zoomPow=q,t.zoomSymlog=P,Object.defineProperty(t,"__esModule",{value:!0})})); -//# sourceMappingURL=vega.min.js.map diff --git a/src/citationnet/static/lib/3d-force-graph.common.js b/src/citationnet/static/lib/3d-force-graph.common.js deleted file mode 100644 index 38fbd8e..0000000 --- a/src/citationnet/static/lib/3d-force-graph.common.js +++ /dev/null @@ -1,588 +0,0 @@ -'use strict'; - -var three$1 = require('three'); -var DragControls_js = require('three/examples/jsm/controls/DragControls.js'); -var ThreeForceGraph = require('three-forcegraph'); -var ThreeRenderObjects = require('three-render-objects'); -var accessorFn = require('accessor-fn'); -var Kapsule = require('kapsule'); - -function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } - -var ThreeForceGraph__default = /*#__PURE__*/_interopDefaultLegacy(ThreeForceGraph); -var ThreeRenderObjects__default = /*#__PURE__*/_interopDefaultLegacy(ThreeRenderObjects); -var accessorFn__default = /*#__PURE__*/_interopDefaultLegacy(accessorFn); -var Kapsule__default = /*#__PURE__*/_interopDefaultLegacy(Kapsule); - -function styleInject(css, ref) { - if (ref === void 0) ref = {}; - var insertAt = ref.insertAt; - - if (!css || typeof document === 'undefined') { - return; - } - - var head = document.head || document.getElementsByTagName('head')[0]; - var style = document.createElement('style'); - style.type = 'text/css'; - - if (insertAt === 'top') { - if (head.firstChild) { - head.insertBefore(style, head.firstChild); - } else { - head.appendChild(style); - } - } else { - head.appendChild(style); - } - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - style.appendChild(document.createTextNode(css)); - } -} - -var css_248z = ".graph-info-msg {\n top: 50%;\n width: 100%;\n text-align: center;\n color: lavender;\n opacity: 0.7;\n font-size: 22px;\n position: absolute;\n font-family: Sans-serif;\n}\n\n.scene-container .clickable {\n cursor: pointer;\n}\n\n.scene-container .grabbable {\n cursor: move;\n cursor: grab;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n}\n\n.scene-container .grabbable:active {\n cursor: grabbing;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n}"; -styleInject(css_248z); - -function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - - if (enumerableOnly) { - symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - } - - keys.push.apply(keys, symbols); - } - - return keys; -} - -function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys(Object(source), true).forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; -} - -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} - -function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} - -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - - return arr2; -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -function linkKapsule (kapsulePropName, kapsuleType) { - var dummyK = new kapsuleType(); // To extract defaults - - return { - linkProp: function linkProp(prop) { - // link property config - return { - "default": dummyK[prop](), - onChange: function onChange(v, state) { - state[kapsulePropName][prop](v); - }, - triggerUpdate: false - }; - }, - linkMethod: function linkMethod(method) { - // link method pass-through - return function (state) { - var kapsuleInstance = state[kapsulePropName]; - - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - var returnVal = kapsuleInstance[method].apply(kapsuleInstance, args); - return returnVal === kapsuleInstance ? this // chain based on the parent object, not the inner kapsule - : returnVal; - }; - } - }; -} - -var three = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists -: { - AmbientLight: three$1.AmbientLight, - DirectionalLight: three$1.DirectionalLight, - Vector3: three$1.Vector3 -}; - -var CAMERA_DISTANCE2NODES_FACTOR = 170; // -// Expose config from forceGraph - -var bindFG = linkKapsule('forceGraph', ThreeForceGraph__default['default']); -var linkedFGProps = Object.assign.apply(Object, _toConsumableArray(['jsonUrl', 'graphData', 'numDimensions', 'dagMode', 'dagLevelDistance', 'dagNodeFilter', 'onDagError', 'nodeRelSize', 'nodeId', 'nodeVal', 'nodeResolution', 'nodeColor', 'nodeAutoColorBy', 'nodeOpacity', 'nodeVisibility', 'nodeThreeObject', 'nodeThreeObjectExtend', 'linkSource', 'linkTarget', 'linkVisibility', 'linkColor', 'linkAutoColorBy', 'linkOpacity', 'linkWidth', 'linkResolution', 'linkCurvature', 'linkCurveRotation', 'linkMaterial', 'linkThreeObject', 'linkThreeObjectExtend', 'linkPositionUpdate', 'linkDirectionalArrowLength', 'linkDirectionalArrowColor', 'linkDirectionalArrowRelPos', 'linkDirectionalArrowResolution', 'linkDirectionalParticles', 'linkDirectionalParticleSpeed', 'linkDirectionalParticleWidth', 'linkDirectionalParticleColor', 'linkDirectionalParticleResolution', 'forceEngine', 'd3AlphaDecay', 'd3VelocityDecay', 'd3AlphaMin', 'ngraphPhysics', 'warmupTicks', 'cooldownTicks', 'cooldownTime', 'onEngineTick', 'onEngineStop'].map(function (p) { - return _defineProperty({}, p, bindFG.linkProp(p)); -}))); -var linkedFGMethods = Object.assign.apply(Object, _toConsumableArray(['refresh', 'getGraphBbox', 'd3Force', 'd3ReheatSimulation', 'emitParticle'].map(function (p) { - return _defineProperty({}, p, bindFG.linkMethod(p)); -}))); // Expose config from renderObjs - -var bindRenderObjs = linkKapsule('renderObjs', ThreeRenderObjects__default['default']); -var linkedRenderObjsProps = Object.assign.apply(Object, _toConsumableArray(['width', 'height', 'backgroundColor', 'showNavInfo', 'enablePointerInteraction'].map(function (p) { - return _defineProperty({}, p, bindRenderObjs.linkProp(p)); -}))); -var linkedRenderObjsMethods = Object.assign.apply(Object, _toConsumableArray(['cameraPosition', 'postProcessingComposer'].map(function (p) { - return _defineProperty({}, p, bindRenderObjs.linkMethod(p)); -})).concat([{ - graph2ScreenCoords: bindRenderObjs.linkMethod('getScreenCoords'), - screen2GraphCoords: bindRenderObjs.linkMethod('getSceneCoords') -}])); // - -var _3dForceGraph = Kapsule__default['default']({ - props: _objectSpread2(_objectSpread2({ - nodeLabel: { - "default": 'name', - triggerUpdate: false - }, - linkLabel: { - "default": 'name', - triggerUpdate: false - }, - linkHoverPrecision: { - "default": 1, - onChange: function onChange(p, state) { - return state.renderObjs.lineHoverPrecision(p); - }, - triggerUpdate: false - }, - enableNavigationControls: { - "default": true, - onChange: function onChange(enable, state) { - var controls = state.renderObjs.controls(); - - if (controls) { - controls.enabled = enable; - } - }, - triggerUpdate: false - }, - enableNodeDrag: { - "default": true, - triggerUpdate: false - }, - onNodeDrag: { - "default": function _default() {}, - triggerUpdate: false - }, - onNodeDragEnd: { - "default": function _default() {}, - triggerUpdate: false - }, - onNodeClick: { - triggerUpdate: false - }, - onNodeRightClick: { - triggerUpdate: false - }, - onNodeHover: { - triggerUpdate: false - }, - onLinkClick: { - triggerUpdate: false - }, - onLinkRightClick: { - triggerUpdate: false - }, - onLinkHover: { - triggerUpdate: false - }, - onBackgroundClick: { - triggerUpdate: false - }, - onBackgroundRightClick: { - triggerUpdate: false - } - }, linkedFGProps), linkedRenderObjsProps), - methods: _objectSpread2(_objectSpread2({ - zoomToFit: function zoomToFit(state, transitionDuration, padding) { - var _state$forceGraph; - - for (var _len = arguments.length, bboxArgs = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { - bboxArgs[_key - 3] = arguments[_key]; - } - - state.renderObjs.fitToBbox((_state$forceGraph = state.forceGraph).getGraphBbox.apply(_state$forceGraph, bboxArgs), transitionDuration, padding); - return this; - }, - pauseAnimation: function pauseAnimation(state) { - if (state.animationFrameRequestId !== null) { - cancelAnimationFrame(state.animationFrameRequestId); - state.animationFrameRequestId = null; - } - - return this; - }, - resumeAnimation: function resumeAnimation(state) { - if (state.animationFrameRequestId === null) { - this._animationCycle(); - } - - return this; - }, - _animationCycle: function _animationCycle(state) { - if (state.enablePointerInteraction) { - // reset canvas cursor (override dragControls cursor) - this.renderer().domElement.style.cursor = null; - } // Frame cycle - - - state.forceGraph.tickFrame(); - state.renderObjs.tick(); - state.animationFrameRequestId = requestAnimationFrame(this._animationCycle); - }, - scene: function scene(state) { - return state.renderObjs.scene(); - }, - // Expose scene - camera: function camera(state) { - return state.renderObjs.camera(); - }, - // Expose camera - renderer: function renderer(state) { - return state.renderObjs.renderer(); - }, - // Expose renderer - controls: function controls(state) { - return state.renderObjs.controls(); - }, - // Expose controls - tbControls: function tbControls(state) { - return state.renderObjs.tbControls(); - }, - // To be deprecated - _destructor: function _destructor() { - this.pauseAnimation(); - this.graphData({ - nodes: [], - links: [] - }); - } - }, linkedFGMethods), linkedRenderObjsMethods), - stateInit: function stateInit(_ref5) { - var controlType = _ref5.controlType, - rendererConfig = _ref5.rendererConfig, - extraRenderers = _ref5.extraRenderers; - return { - forceGraph: new ThreeForceGraph__default['default'](), - renderObjs: ThreeRenderObjects__default['default']({ - controlType: controlType, - rendererConfig: rendererConfig, - extraRenderers: extraRenderers - }) - }; - }, - init: function init(domNode, state) { - // Wipe DOM - domNode.innerHTML = ''; // Add relative container - - domNode.appendChild(state.container = document.createElement('div')); - state.container.style.position = 'relative'; // Add renderObjs - - var roDomNode = document.createElement('div'); - state.container.appendChild(roDomNode); - state.renderObjs(roDomNode); - var camera = state.renderObjs.camera(); - var renderer = state.renderObjs.renderer(); - var controls = state.renderObjs.controls(); - controls.enabled = !!state.enableNavigationControls; - state.lastSetCameraZ = camera.position.z; // Add info space - - var infoElem; - state.container.appendChild(infoElem = document.createElement('div')); - infoElem.className = 'graph-info-msg'; - infoElem.textContent = ''; // config forcegraph - - state.forceGraph.onLoading(function () { - infoElem.textContent = 'Loading...'; - }).onFinishLoading(function () { - infoElem.textContent = ''; - }).onUpdate(function () { - // sync graph data structures - state.graphData = state.forceGraph.graphData(); // re-aim camera, if still in default position (not user modified) - - if (camera.position.x === 0 && camera.position.y === 0 && camera.position.z === state.lastSetCameraZ && state.graphData.nodes.length) { - camera.lookAt(state.forceGraph.position); - state.lastSetCameraZ = camera.position.z = Math.cbrt(state.graphData.nodes.length) * CAMERA_DISTANCE2NODES_FACTOR; - } - }).onFinishUpdate(function () { - // Setup node drag interaction - if (state._dragControls) { - var curNodeDrag = state.graphData.nodes.find(function (node) { - return node.__initialFixedPos && !node.__disposeControlsAfterDrag; - }); // detect if there's a node being dragged using the existing drag controls - - if (curNodeDrag) { - curNodeDrag.__disposeControlsAfterDrag = true; // postpone previous controls disposal until drag ends - } else { - state._dragControls.dispose(); // cancel previous drag controls - - } - - state._dragControls = undefined; - } - - if (state.enableNodeDrag && state.enablePointerInteraction && state.forceEngine === 'd3') { - // Can't access node positions programatically in ngraph - var dragControls = state._dragControls = new DragControls_js.DragControls(state.graphData.nodes.map(function (node) { - return node.__threeObj; - }).filter(function (obj) { - return obj; - }), camera, renderer.domElement); - dragControls.addEventListener('dragstart', function (event) { - controls.enabled = false; // Disable controls while dragging - // track drag object movement - - event.object.__initialPos = event.object.position.clone(); - event.object.__prevPos = event.object.position.clone(); - - var node = getGraphObj(event.object).__data; - - !node.__initialFixedPos && (node.__initialFixedPos = { - fx: node.fx, - fy: node.fy, - fz: node.fz - }); - !node.__initialPos && (node.__initialPos = { - x: node.x, - y: node.y, - z: node.z - }); // lock node - - ['x', 'y', 'z'].forEach(function (c) { - return node["f".concat(c)] = node[c]; - }); // drag cursor - - renderer.domElement.classList.add('grabbable'); - }); - dragControls.addEventListener('drag', function (event) { - var nodeObj = getGraphObj(event.object); - - if (!event.object.hasOwnProperty('__graphObjType')) { - // If dragging a child of the node, update the node object instead - var initPos = event.object.__initialPos; - var prevPos = event.object.__prevPos; - var _newPos = event.object.position; - nodeObj.position.add(_newPos.clone().sub(prevPos)); // translate node object by the motion delta - - prevPos.copy(_newPos); - - _newPos.copy(initPos); // reset child back to its initial position - - } - - var node = nodeObj.__data; - var newPos = nodeObj.position; - var translate = { - x: newPos.x - node.x, - y: newPos.y - node.y, - z: newPos.z - node.z - }; // Move fx/fy/fz (and x/y/z) of nodes based on object new position - - ['x', 'y', 'z'].forEach(function (c) { - return node["f".concat(c)] = node[c] = newPos[c]; - }); - state.forceGraph.d3AlphaTarget(0.3) // keep engine running at low intensity throughout drag - .resetCountdown(); // prevent freeze while dragging - - node.__dragged = true; - state.onNodeDrag(node, translate); - }); - dragControls.addEventListener('dragend', function (event) { - delete event.object.__initialPos; // remove tracking attributes - - delete event.object.__prevPos; - - var node = getGraphObj(event.object).__data; // dispose previous controls if needed - - - if (node.__disposeControlsAfterDrag) { - dragControls.dispose(); - delete node.__disposeControlsAfterDrag; - } - - var initFixedPos = node.__initialFixedPos; - var initPos = node.__initialPos; - var translate = { - x: initPos.x - node.x, - y: initPos.y - node.y, - z: initPos.z - node.z - }; - - if (initFixedPos) { - ['x', 'y', 'z'].forEach(function (c) { - var fc = "f".concat(c); - - if (initFixedPos[fc] === undefined) { - delete node[fc]; - } - }); - delete node.__initialFixedPos; - delete node.__initialPos; - - if (node.__dragged) { - delete node.__dragged; - state.onNodeDragEnd(node, translate); - } - } - - state.forceGraph.d3AlphaTarget(0) // release engine low intensity - .resetCountdown(); // let the engine readjust after releasing fixed nodes - - if (state.enableNavigationControls) { - controls.enabled = true; // Re-enable controls - - controls.domElement && controls.domElement.ownerDocument && controls.domElement.ownerDocument.dispatchEvent( // simulate mouseup to ensure the controls don't take over after dragend - new PointerEvent('pointerup', { - pointerType: 'mouse' - })); - } // clear cursor - - - renderer.domElement.classList.remove('grabbable'); - }); - } - }); // config renderObjs - - state.renderObjs.objects([// Populate scene - new three.AmbientLight(0xbbbbbb), new three.DirectionalLight(0xffffff, 0.6), state.forceGraph]).hoverOrderComparator(function (a, b) { - // Prioritize graph objects - var aObj = getGraphObj(a); - if (!aObj) return 1; - var bObj = getGraphObj(b); - if (!bObj) return -1; // Prioritize nodes over links - - var isNode = function isNode(o) { - return o.__graphObjType === 'node'; - }; - - return isNode(bObj) - isNode(aObj); - }).tooltipContent(function (obj) { - var graphObj = getGraphObj(obj); - return graphObj ? accessorFn__default['default'](state["".concat(graphObj.__graphObjType, "Label")])(graphObj.__data) || '' : ''; - }).hoverDuringDrag(false).onHover(function (obj) { - // Update tooltip and trigger onHover events - var hoverObj = getGraphObj(obj); - - if (hoverObj !== state.hoverObj) { - var prevObjType = state.hoverObj ? state.hoverObj.__graphObjType : null; - var prevObjData = state.hoverObj ? state.hoverObj.__data : null; - var objType = hoverObj ? hoverObj.__graphObjType : null; - var objData = hoverObj ? hoverObj.__data : null; - - if (prevObjType && prevObjType !== objType) { - // Hover out - var fn = state["on".concat(prevObjType === 'node' ? 'Node' : 'Link', "Hover")]; - fn && fn(null, prevObjData); - } - - if (objType) { - // Hover in - var _fn = state["on".concat(objType === 'node' ? 'Node' : 'Link', "Hover")]; - _fn && _fn(objData, prevObjType === objType ? prevObjData : null); - } // set pointer if hovered object is clickable - - - renderer.domElement.classList[hoverObj && state["on".concat(objType === 'node' ? 'Node' : 'Link', "Click")] || !hoverObj && state.onBackgroundClick ? 'add' : 'remove']('clickable'); - state.hoverObj = hoverObj; - } - }).clickAfterDrag(false).onClick(function (obj, ev) { - var graphObj = getGraphObj(obj); - - if (graphObj) { - var fn = state["on".concat(graphObj.__graphObjType === 'node' ? 'Node' : 'Link', "Click")]; - fn && fn(graphObj.__data, ev); - } else { - state.onBackgroundClick && state.onBackgroundClick(ev); - } - }).onRightClick(function (obj, ev) { - // Handle right-click events - var graphObj = getGraphObj(obj); - - if (graphObj) { - var fn = state["on".concat(graphObj.__graphObjType === 'node' ? 'Node' : 'Link', "RightClick")]; - fn && fn(graphObj.__data, ev); - } else { - state.onBackgroundRightClick && state.onBackgroundRightClick(ev); - } - }); // - // Kick-off renderer - - this._animationCycle(); - } -}); // - -function getGraphObj(object) { - var obj = object; // recurse up object chain until finding the graph object - - while (obj && !obj.hasOwnProperty('__graphObjType')) { - obj = obj.parent; - } - - return obj; -} - -module.exports = _3dForceGraph; diff --git a/src/citationnet/static/lib/3d-force-graph.d.ts b/src/citationnet/static/lib/3d-force-graph.d.ts deleted file mode 100644 index c7dc750..0000000 --- a/src/citationnet/static/lib/3d-force-graph.d.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { WebGLRendererParameters, Renderer, Scene, Camera, WebGLRenderer } from 'three'; -import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js'; -import { ThreeForceGraphGeneric } from 'three-forcegraph'; - -interface ConfigOptions { - controlType?: 'trackball' | 'orbit' | 'fly' - rendererConfig?: WebGLRendererParameters, - extraRenderers?: Renderer[] -} - -type Accessor = Out | string | ((obj: In) => Out); -type ObjAccessor = Accessor; - -type Coords = { x: number; y: number; z: number; }; - -// don't surface these internal props from inner ThreeForceGraph -type ExcludedInnerProps = 'onLoading' | 'onFinishLoading' | 'onUpdate' | 'onFinishUpdate' | 'tickFrame' | 'd3AlphaTarget'; - -interface ForceGraph3DGenericInstance - extends Omit, ExcludedInnerProps> { - (element: HTMLElement): ChainableInstance; - _destructor(): void; - - // Container layout - width(): number; - width(width: number): ChainableInstance; - height(): number; - height(height: number): ChainableInstance; - backgroundColor(): string; - backgroundColor(color: string): ChainableInstance; - showNavInfo(): boolean; - showNavInfo(enabled: boolean): ChainableInstance; - - // Labels - nodeLabel(): ObjAccessor; - nodeLabel(textAccessor: ObjAccessor): ChainableInstance; - linkLabel(): ObjAccessor; - linkLabel(textAccessor: ObjAccessor): ChainableInstance; - - // Interaction - onNodeClick(callback: (node: object, event: MouseEvent) => void): ChainableInstance; - onNodeRightClick(callback: (node: object, event: MouseEvent) => void): ChainableInstance; - onNodeHover(callback: (node: object | null, previousNode: object | null) => void): ChainableInstance; - onNodeDrag(callback: (node: object, translate: Coords) => void): ChainableInstance; - onNodeDragEnd(callback: (node: object, translate: Coords) => void): ChainableInstance; - onLinkClick(callback: (link: object, event: MouseEvent) => void): ChainableInstance; - onLinkRightClick(callback: (link: object, event: MouseEvent) => void): ChainableInstance; - onLinkHover(callback: (link: object | null, previousLink: object | null) => void): ChainableInstance; - onBackgroundClick(callback: (event: MouseEvent) => void): ChainableInstance; - onBackgroundRightClick(callback: (event: MouseEvent) => void): ChainableInstance; - linkHoverPrecision(): number; - linkHoverPrecision(precision: number): ChainableInstance; - enablePointerInteraction(): boolean; - enablePointerInteraction(enable: boolean): ChainableInstance; - enableNodeDrag(): boolean; - enableNodeDrag(enable: boolean): ChainableInstance; - enableNavigationControls(): boolean; - enableNavigationControls(enable: boolean): ChainableInstance; - - // Render control - pauseAnimation(): ChainableInstance; - resumeAnimation(): ChainableInstance; - cameraPosition(): Coords; - cameraPosition(position: Partial, lookAt?: Coords, transitionMs?: number): ChainableInstance; - zoomToFit(durationMs?: number, padding?: number, nodeFilter?: (node: object) => boolean): ChainableInstance; - postProcessingComposer(): EffectComposer; - scene(): Scene; - camera(): Camera; - renderer(): WebGLRenderer; - controls(): object; - - // Utility - graph2ScreenCoords(x: number, y: number, z: number): Coords; - screen2GraphCoords(screenX: number, screenY: number, distance: number): Coords; -} - -type ForceGraph3DInstance = ForceGraph3DGenericInstance; - -declare function ForceGraph3D(configOptions?: ConfigOptions): ForceGraph3DInstance; - -export default ForceGraph3D; -export { ConfigOptions, ForceGraph3DGenericInstance, ForceGraph3DInstance }; diff --git a/src/citationnet/static/lib/3d-force-graph.js b/src/citationnet/static/lib/3d-force-graph.js deleted file mode 100644 index 9b6226f..0000000 --- a/src/citationnet/static/lib/3d-force-graph.js +++ /dev/null @@ -1,59881 +0,0 @@ -// Version 1.70.5-0 3d-force-graph - https://github.com/vasturiano/3d-force-graph -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ForceGraph3D = factory()); -}(this, (function () { 'use strict'; - - function styleInject$1(css, ref) { - if ( ref === void 0 ) ref = {}; - var insertAt = ref.insertAt; - - if (!css || typeof document === 'undefined') { return; } - - var head = document.head || document.getElementsByTagName('head')[0]; - var style = document.createElement('style'); - style.type = 'text/css'; - - if (insertAt === 'top') { - if (head.firstChild) { - head.insertBefore(style, head.firstChild); - } else { - head.appendChild(style); - } - } else { - head.appendChild(style); - } - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - style.appendChild(document.createTextNode(css)); - } - } - - var css_248z$1 = ".graph-info-msg {\n top: 50%;\n width: 100%;\n text-align: center;\n color: lavender;\n opacity: 0.7;\n font-size: 22px;\n position: absolute;\n font-family: Sans-serif;\n}\n\n.scene-container .clickable {\n cursor: pointer;\n}\n\n.scene-container .grabbable {\n cursor: move;\n cursor: grab;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n}\n\n.scene-container .grabbable:active {\n cursor: grabbing;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n}"; - styleInject$1(css_248z$1); - - function ownKeys$2(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - - if (enumerableOnly) { - symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - } - - keys.push.apply(keys, symbols); - } - - return keys; - } - - function _objectSpread2$2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys$2(Object(source), true).forEach(function (key) { - _defineProperty$3(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys$2(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; - } - - function _defineProperty$3(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - } - - function _toConsumableArray$4(arr) { - return _arrayWithoutHoles$4(arr) || _iterableToArray$4(arr) || _unsupportedIterableToArray$2(arr) || _nonIterableSpread$4(); - } - - function _arrayWithoutHoles$4(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray$2(arr); - } - - function _iterableToArray$4(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); - } - - function _unsupportedIterableToArray$2(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray$2(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$2(o, minLen); - } - - function _arrayLikeToArray$2(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - - return arr2; - } - - function _nonIterableSpread$4() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - - // threejs.org/license - const REVISION = '123'; - const MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 }; - const TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 }; - const CullFaceNone = 0; - const CullFaceBack = 1; - const CullFaceFront = 2; - const PCFShadowMap = 1; - const PCFSoftShadowMap = 2; - const VSMShadowMap = 3; - const FrontSide = 0; - const BackSide = 1; - const DoubleSide = 2; - const FlatShading = 1; - const NoBlending = 0; - const NormalBlending = 1; - const AdditiveBlending = 2; - const SubtractiveBlending = 3; - const MultiplyBlending = 4; - const CustomBlending = 5; - const AddEquation = 100; - const SubtractEquation = 101; - const ReverseSubtractEquation = 102; - const MinEquation = 103; - const MaxEquation = 104; - const ZeroFactor = 200; - const OneFactor = 201; - const SrcColorFactor = 202; - const OneMinusSrcColorFactor = 203; - const SrcAlphaFactor = 204; - const OneMinusSrcAlphaFactor = 205; - const DstAlphaFactor = 206; - const OneMinusDstAlphaFactor = 207; - const DstColorFactor = 208; - const OneMinusDstColorFactor = 209; - const SrcAlphaSaturateFactor = 210; - const NeverDepth = 0; - const AlwaysDepth = 1; - const LessDepth = 2; - const LessEqualDepth = 3; - const EqualDepth = 4; - const GreaterEqualDepth = 5; - const GreaterDepth = 6; - const NotEqualDepth = 7; - const MultiplyOperation = 0; - const MixOperation = 1; - const AddOperation = 2; - const NoToneMapping = 0; - const LinearToneMapping = 1; - const ReinhardToneMapping = 2; - const CineonToneMapping = 3; - const ACESFilmicToneMapping = 4; - const CustomToneMapping = 5; - - const UVMapping = 300; - const CubeReflectionMapping = 301; - const CubeRefractionMapping = 302; - const EquirectangularReflectionMapping = 303; - const EquirectangularRefractionMapping = 304; - const CubeUVReflectionMapping = 306; - const CubeUVRefractionMapping = 307; - const RepeatWrapping = 1000; - const ClampToEdgeWrapping = 1001; - const MirroredRepeatWrapping = 1002; - const NearestFilter = 1003; - const NearestMipmapNearestFilter = 1004; - const NearestMipmapLinearFilter = 1005; - const LinearFilter = 1006; - const LinearMipmapNearestFilter = 1007; - const LinearMipmapLinearFilter = 1008; - const UnsignedByteType = 1009; - const ByteType = 1010; - const ShortType = 1011; - const UnsignedShortType = 1012; - const IntType = 1013; - const UnsignedIntType = 1014; - const FloatType = 1015; - const HalfFloatType = 1016; - const UnsignedShort4444Type = 1017; - const UnsignedShort5551Type = 1018; - const UnsignedShort565Type = 1019; - const UnsignedInt248Type = 1020; - const AlphaFormat = 1021; - const RGBFormat = 1022; - const RGBAFormat = 1023; - const LuminanceFormat = 1024; - const LuminanceAlphaFormat = 1025; - const DepthFormat = 1026; - const DepthStencilFormat = 1027; - const RedFormat = 1028; - const RedIntegerFormat = 1029; - const RGFormat = 1030; - const RGIntegerFormat = 1031; - const RGBIntegerFormat = 1032; - const RGBAIntegerFormat = 1033; - - const RGB_S3TC_DXT1_Format = 33776; - const RGBA_S3TC_DXT1_Format = 33777; - const RGBA_S3TC_DXT3_Format = 33778; - const RGBA_S3TC_DXT5_Format = 33779; - const RGB_PVRTC_4BPPV1_Format = 35840; - const RGB_PVRTC_2BPPV1_Format = 35841; - const RGBA_PVRTC_4BPPV1_Format = 35842; - const RGBA_PVRTC_2BPPV1_Format = 35843; - const RGB_ETC1_Format = 36196; - const RGB_ETC2_Format = 37492; - const RGBA_ETC2_EAC_Format = 37496; - const RGBA_ASTC_4x4_Format = 37808; - const RGBA_ASTC_5x4_Format = 37809; - const RGBA_ASTC_5x5_Format = 37810; - const RGBA_ASTC_6x5_Format = 37811; - const RGBA_ASTC_6x6_Format = 37812; - const RGBA_ASTC_8x5_Format = 37813; - const RGBA_ASTC_8x6_Format = 37814; - const RGBA_ASTC_8x8_Format = 37815; - const RGBA_ASTC_10x5_Format = 37816; - const RGBA_ASTC_10x6_Format = 37817; - const RGBA_ASTC_10x8_Format = 37818; - const RGBA_ASTC_10x10_Format = 37819; - const RGBA_ASTC_12x10_Format = 37820; - const RGBA_ASTC_12x12_Format = 37821; - const RGBA_BPTC_Format = 36492; - const SRGB8_ALPHA8_ASTC_4x4_Format = 37840; - const SRGB8_ALPHA8_ASTC_5x4_Format = 37841; - const SRGB8_ALPHA8_ASTC_5x5_Format = 37842; - const SRGB8_ALPHA8_ASTC_6x5_Format = 37843; - const SRGB8_ALPHA8_ASTC_6x6_Format = 37844; - const SRGB8_ALPHA8_ASTC_8x5_Format = 37845; - const SRGB8_ALPHA8_ASTC_8x6_Format = 37846; - const SRGB8_ALPHA8_ASTC_8x8_Format = 37847; - const SRGB8_ALPHA8_ASTC_10x5_Format = 37848; - const SRGB8_ALPHA8_ASTC_10x6_Format = 37849; - const SRGB8_ALPHA8_ASTC_10x8_Format = 37850; - const SRGB8_ALPHA8_ASTC_10x10_Format = 37851; - const SRGB8_ALPHA8_ASTC_12x10_Format = 37852; - const SRGB8_ALPHA8_ASTC_12x12_Format = 37853; - const LoopOnce = 2200; - const LoopRepeat = 2201; - const LoopPingPong = 2202; - const InterpolateDiscrete = 2300; - const InterpolateLinear = 2301; - const InterpolateSmooth = 2302; - const ZeroCurvatureEnding = 2400; - const ZeroSlopeEnding = 2401; - const WrapAroundEnding = 2402; - const NormalAnimationBlendMode = 2500; - const AdditiveAnimationBlendMode = 2501; - const TrianglesDrawMode = 0; - const LinearEncoding = 3000; - const sRGBEncoding = 3001; - const GammaEncoding = 3007; - const RGBEEncoding = 3002; - const LogLuvEncoding = 3003; - const RGBM7Encoding = 3004; - const RGBM16Encoding = 3005; - const RGBDEncoding = 3006; - const BasicDepthPacking = 3200; - const RGBADepthPacking = 3201; - const TangentSpaceNormalMap = 0; - const ObjectSpaceNormalMap = 1; - const KeepStencilOp = 7680; - const AlwaysStencilFunc = 519; - - const StaticDrawUsage = 35044; - const DynamicDrawUsage = 35048; - const GLSL3 = "300 es"; - - /** - * https://github.com/mrdoob/eventdispatcher.js/ - */ - - function EventDispatcher() {} - - Object.assign( EventDispatcher.prototype, { - - addEventListener: function ( type, listener ) { - - if ( this._listeners === undefined ) this._listeners = {}; - - const listeners = this._listeners; - - if ( listeners[ type ] === undefined ) { - - listeners[ type ] = []; - - } - - if ( listeners[ type ].indexOf( listener ) === - 1 ) { - - listeners[ type ].push( listener ); - - } - - }, - - hasEventListener: function ( type, listener ) { - - if ( this._listeners === undefined ) return false; - - const listeners = this._listeners; - - return listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1; - - }, - - removeEventListener: function ( type, listener ) { - - if ( this._listeners === undefined ) return; - - const listeners = this._listeners; - const listenerArray = listeners[ type ]; - - if ( listenerArray !== undefined ) { - - const index = listenerArray.indexOf( listener ); - - if ( index !== - 1 ) { - - listenerArray.splice( index, 1 ); - - } - - } - - }, - - dispatchEvent: function ( event ) { - - if ( this._listeners === undefined ) return; - - const listeners = this._listeners; - const listenerArray = listeners[ event.type ]; - - if ( listenerArray !== undefined ) { - - event.target = this; - - // Make a copy, in case listeners are removed while iterating. - const array = listenerArray.slice( 0 ); - - for ( let i = 0, l = array.length; i < l; i ++ ) { - - array[ i ].call( this, event ); - - } - - } - - } - - } ); - - const _lut = []; - - for ( let i = 0; i < 256; i ++ ) { - - _lut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 ); - - } - - let _seed = 1234567; - - const MathUtils = { - - DEG2RAD: Math.PI / 180, - RAD2DEG: 180 / Math.PI, - - generateUUID: function () { - - // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136 - - const d0 = Math.random() * 0xffffffff | 0; - const d1 = Math.random() * 0xffffffff | 0; - const d2 = Math.random() * 0xffffffff | 0; - const d3 = Math.random() * 0xffffffff | 0; - const uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 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 ]; - - // .toUpperCase() here flattens concatenated strings to save heap memory space. - return uuid.toUpperCase(); - - }, - - clamp: function ( value, min, max ) { - - return Math.max( min, Math.min( max, value ) ); - - }, - - // compute euclidian modulo of m % n - // https://en.wikipedia.org/wiki/Modulo_operation - - euclideanModulo: function ( n, m ) { - - return ( ( n % m ) + m ) % m; - - }, - - // Linear mapping from range to range - - mapLinear: function ( x, a1, a2, b1, b2 ) { - - return b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 ); - - }, - - // https://en.wikipedia.org/wiki/Linear_interpolation - - lerp: function ( x, y, t ) { - - return ( 1 - t ) * x + t * y; - - }, - - // http://en.wikipedia.org/wiki/Smoothstep - - smoothstep: function ( x, min, max ) { - - if ( x <= min ) return 0; - if ( x >= max ) return 1; - - x = ( x - min ) / ( max - min ); - - return x * x * ( 3 - 2 * x ); - - }, - - smootherstep: function ( 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 - - randInt: function ( low, high ) { - - return low + Math.floor( Math.random() * ( high - low + 1 ) ); - - }, - - // Random float from interval - - randFloat: function ( low, high ) { - - return low + Math.random() * ( high - low ); - - }, - - // Random float from <-range/2, range/2> interval - - randFloatSpread: function ( range ) { - - return range * ( 0.5 - Math.random() ); - - }, - - // Deterministic pseudo-random float in the interval [ 0, 1 ] - - seededRandom: function ( s ) { - - if ( s !== undefined ) _seed = s % 2147483647; - - // Park-Miller algorithm - - _seed = _seed * 16807 % 2147483647; - - return ( _seed - 1 ) / 2147483646; - - }, - - degToRad: function ( degrees ) { - - return degrees * MathUtils.DEG2RAD; - - }, - - radToDeg: function ( radians ) { - - return radians * MathUtils.RAD2DEG; - - }, - - isPowerOfTwo: function ( value ) { - - return ( value & ( value - 1 ) ) === 0 && value !== 0; - - }, - - ceilPowerOfTwo: function ( value ) { - - return Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) ); - - }, - - floorPowerOfTwo: function ( value ) { - - return Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) ); - - }, - - setQuaternionFromProperEuler: function ( 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 ); - - } - - } - - }; - - class Vector2 { - - constructor( x = 0, y = 0 ) { - - Object.defineProperty( this, 'isVector2', { value: 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, w ) { - - if ( w !== undefined ) { - - console.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); - return this.addVectors( v, w ); - - } - - 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, w ) { - - if ( w !== undefined ) { - - console.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); - return this.subVectors( v, w ); - - } - - 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 = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); - this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( 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; - - } - - 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, offset ) { - - if ( offset !== undefined ) { - - console.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' ); - - } - - 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; - - } - - } - - class Matrix3 { - - constructor() { - - Object.defineProperty( this, 'isMatrix3', { value: true } ); - - this.elements = [ - - 1, 0, 0, - 0, 1, 0, - 0, 0, 1 - - ]; - - if ( arguments.length > 0 ) { - - console.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' ); - - } - - } - - 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; - - } - - clone() { - - return new this.constructor().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 ]; - - 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 ).copy( this ).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 - ); - - } - - scale( sx, sy ) { - - const te = this.elements; - - te[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx; - te[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy; - - return this; - - } - - rotate( theta ) { - - const c = Math.cos( theta ); - const s = Math.sin( theta ); - - const te = this.elements; - - const a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ]; - const a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ]; - - te[ 0 ] = c * a11 + s * a21; - te[ 3 ] = c * a12 + s * a22; - te[ 6 ] = c * a13 + s * a23; - - te[ 1 ] = - s * a11 + c * a21; - te[ 4 ] = - s * a12 + c * a22; - te[ 7 ] = - s * a13 + c * a23; - - return this; - - } - - translate( tx, ty ) { - - const te = this.elements; - - te[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ]; - te[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ]; - - 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; - - } - - } - - let _canvas; - - const ImageUtils = { - - getDataURL: function ( 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 = document.createElementNS( 'http://www.w3.org/1999/xhtml', '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 ) { - - return canvas.toDataURL( 'image/jpeg', 0.6 ); - - } else { - - return canvas.toDataURL( 'image/png' ); - - } - - } - - }; - - let textureId = 0; - - function Texture( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1, encoding = LinearEncoding ) { - - Object.defineProperty( this, 'id', { value: textureId ++ } ); - - this.uuid = MathUtils.generateUUID(); - - this.name = ''; - - this.image = image; - this.mipmaps = []; - - this.mapping = mapping; - - 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) - - // Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap. - // - // Also changing the encoding after already used by a Material will not automatically make the Material - // update. You need to explicitly call Material.needsUpdate to trigger it to recompile. - this.encoding = encoding; - - this.version = 0; - this.onUpdate = null; - - } - - Texture.DEFAULT_IMAGE = undefined; - Texture.DEFAULT_MAPPING = UVMapping; - - Texture.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { - - constructor: Texture, - - isTexture: true, - - updateMatrix: function () { - - this.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y ); - - }, - - clone: function () { - - return new this.constructor().copy( this ); - - }, - - copy: function ( source ) { - - this.name = source.name; - - this.image = source.image; - this.mipmaps = source.mipmaps.slice( 0 ); - - this.mapping = source.mapping; - - 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.encoding = source.encoding; - - return this; - - }, - - toJSON: function ( 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.5, - type: 'Texture', - generator: 'Texture.toJSON' - }, - - uuid: this.uuid, - name: this.name, - - mapping: this.mapping, - - 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, - type: this.type, - encoding: this.encoding, - - minFilter: this.minFilter, - magFilter: this.magFilter, - anisotropy: this.anisotropy, - - flipY: this.flipY, - - premultiplyAlpha: this.premultiplyAlpha, - unpackAlignment: this.unpackAlignment - - }; - - if ( this.image !== undefined ) { - - // TODO: Move to THREE.Image - - const image = this.image; - - if ( image.uuid === undefined ) { - - image.uuid = MathUtils.generateUUID(); // UGH - - } - - if ( ! isRootObject && meta.images[ image.uuid ] === undefined ) { - - let url; - - if ( Array.isArray( image ) ) { - - // process array of images e.g. CubeTexture - - url = []; - - for ( let i = 0, l = image.length; i < l; i ++ ) { - - // check cube texture with data textures - - if ( image[ i ].isDataTexture ) { - - url.push( serializeImage( image[ i ].image ) ); - - } else { - - url.push( serializeImage( image[ i ] ) ); - - } - - } - - } else { - - // process single image - - url = serializeImage( image ); - - } - - meta.images[ image.uuid ] = { - uuid: image.uuid, - url: url - }; - - } - - output.image = image.uuid; - - } - - if ( ! isRootObject ) { - - meta.textures[ this.uuid ] = output; - - } - - return output; - - }, - - dispose: function () { - - this.dispatchEvent( { type: 'dispose' } ); - - }, - - transformUv: function ( 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; - - } - - } ); - - Object.defineProperty( Texture.prototype, "needsUpdate", { - - set: function ( value ) { - - if ( value === true ) this.version ++; - - } - - } ); - - 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.prototype.slice.call( image.data ), - width: image.width, - height: image.height, - type: image.data.constructor.name - }; - - } else { - - console.warn( 'THREE.Texture: Unable to serialize Texture.' ); - return {}; - - } - - } - - } - - class Vector4 { - - constructor( x = 0, y = 0, z = 0, w = 1 ) { - - Object.defineProperty( this, 'isVector4', { value: 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, w ) { - - if ( w !== undefined ) { - - console.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); - return this.addVectors( v, w ); - - } - - 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, w ) { - - if ( w !== undefined ) { - - console.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); - return this.subVectors( v, w ); - - } - - 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; - - } - - 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 = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); - this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); - this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); - this.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( 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, offset ) { - - if ( offset !== undefined ) { - - console.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' ); - - } - - 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; - - } - - } - - /* - In options, we can specify: - * Texture parameters for an auto-generated target texture - * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers - */ - function WebGLRenderTarget( width, height, options ) { - - this.width = width; - this.height = height; - - this.scissor = new Vector4( 0, 0, width, height ); - this.scissorTest = false; - - this.viewport = new Vector4( 0, 0, width, height ); - - options = options || {}; - - this.texture = new Texture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding ); - - this.texture.image = {}; - this.texture.image.width = width; - this.texture.image.height = height; - - this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false; - this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter; - - this.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true; - this.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false; - this.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null; - - } - - WebGLRenderTarget.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { - - constructor: WebGLRenderTarget, - - isWebGLRenderTarget: true, - - setSize: function ( width, height ) { - - if ( this.width !== width || this.height !== height ) { - - this.width = width; - this.height = height; - - this.texture.image.width = width; - this.texture.image.height = height; - - this.dispose(); - - } - - this.viewport.set( 0, 0, width, height ); - this.scissor.set( 0, 0, width, height ); - - }, - - clone: function () { - - return new this.constructor().copy( this ); - - }, - - copy: function ( source ) { - - this.width = source.width; - this.height = source.height; - - this.viewport.copy( source.viewport ); - - this.texture = source.texture.clone(); - - this.depthBuffer = source.depthBuffer; - this.stencilBuffer = source.stencilBuffer; - this.depthTexture = source.depthTexture; - - return this; - - }, - - dispose: function () { - - this.dispatchEvent( { type: 'dispose' } ); - - } - - } ); - - function WebGLMultisampleRenderTarget( width, height, options ) { - - WebGLRenderTarget.call( this, width, height, options ); - - this.samples = 4; - - } - - WebGLMultisampleRenderTarget.prototype = Object.assign( Object.create( WebGLRenderTarget.prototype ), { - - constructor: WebGLMultisampleRenderTarget, - - isWebGLMultisampleRenderTarget: true, - - copy: function ( source ) { - - WebGLRenderTarget.prototype.copy.call( this, source ); - - this.samples = source.samples; - - return this; - - } - - } ); - - class Quaternion { - - constructor( x = 0, y = 0, z = 0, w = 1 ) { - - Object.defineProperty( this, 'isQuaternion', { value: true } ); - - this._x = x; - this._y = y; - this._z = z; - this._w = w; - - } - - static slerp( qa, qb, qm, t ) { - - return qm.copy( qa ).slerp( qb, t ); - - } - - 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 ( 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 ) { - - if ( ! ( euler && euler.isEuler ) ) { - - throw new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' ); - - } - - 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 !== false ) 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 - - const EPS = 0.000001; - - let r = vFrom.dot( vTo ) + 1; - - if ( r < EPS ) { - - 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( MathUtils.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, p ) { - - if ( p !== undefined ) { - - console.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' ); - return this.multiplyQuaternions( q, p ); - - } - - 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(); - this._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; - - } - - 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 ); - - return this; - - } - - _onChange( callback ) { - - this._onChangeCallback = callback; - - return this; - - } - - _onChangeCallback() {} - - } - - class Vector3 { - - constructor( x = 0, y = 0, z = 0 ) { - - Object.defineProperty( this, 'isVector3', { value: 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, w ) { - - if ( w !== undefined ) { - - console.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); - return this.addVectors( v, w ); - - } - - 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, w ) { - - if ( w !== undefined ) { - - console.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); - return this.subVectors( v, w ); - - } - - 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, w ) { - - if ( w !== undefined ) { - - console.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' ); - return this.multiplyVectors( v, w ); - - } - - 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 ) { - - if ( ! ( euler && euler.isEuler ) ) { - - console.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' ); - - } - - return this.applyQuaternion( _quaternion.setFromEuler( euler ) ); - - } - - applyAxisAngle( axis, angle ) { - - return this.applyQuaternion( _quaternion.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 ) { - - const x = this.x, y = this.y, z = this.z; - const qx = q.x, qy = q.y, qz = q.z, qw = q.w; - - // calculate quat * vector - - const ix = qw * x + qy * z - qz * y; - const iy = qw * y + qz * x - qx * z; - const iz = qw * z + qx * y - qy * x; - const iw = - qx * x - qy * y - qz * z; - - // calculate result * inverse quat - - this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy; - this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz; - this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx; - - 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 = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); - this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); - this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( 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, w ) { - - if ( w !== undefined ) { - - console.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' ); - return this.crossVectors( v, w ); - - } - - 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.copy( this ).projectOnVector( planeNormal ); - - return this.sub( _vector ); - - } - - reflect( normal ) { - - // reflect incident vector off plane orthogonal to normal - // normal is assumed to have unit length - - return this.sub( _vector.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( MathUtils.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 ); - - } - - 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, offset ) { - - if ( offset !== undefined ) { - - console.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' ); - - } - - 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; - - } - - } - - const _vector = /*@__PURE__*/ new Vector3(); - const _quaternion = /*@__PURE__*/ new Quaternion(); - - class Box3 { - - constructor( min, max ) { - - Object.defineProperty( this, 'isBox3', { value: true } ); - - this.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity ); - this.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity ); - - } - - set( min, max ) { - - this.min.copy( min ); - this.max.copy( max ); - - return this; - - } - - setFromArray( array ) { - - let minX = + Infinity; - let minY = + Infinity; - let minZ = + Infinity; - - let maxX = - Infinity; - let maxY = - Infinity; - let maxZ = - Infinity; - - for ( let i = 0, l = array.length; i < l; i += 3 ) { - - const x = array[ i ]; - const y = array[ i + 1 ]; - const z = array[ i + 2 ]; - - if ( x < minX ) minX = x; - if ( y < minY ) minY = y; - if ( z < minZ ) minZ = z; - - if ( x > maxX ) maxX = x; - if ( y > maxY ) maxY = y; - if ( z > maxZ ) maxZ = z; - - } - - this.min.set( minX, minY, minZ ); - this.max.set( maxX, maxY, maxZ ); - - return this; - - } - - setFromBufferAttribute( attribute ) { - - let minX = + Infinity; - let minY = + Infinity; - let minZ = + Infinity; - - let maxX = - Infinity; - let maxY = - Infinity; - let maxZ = - Infinity; - - for ( let i = 0, l = attribute.count; i < l; i ++ ) { - - const x = attribute.getX( i ); - const y = attribute.getY( i ); - const z = attribute.getZ( i ); - - if ( x < minX ) minX = x; - if ( y < minY ) minY = y; - if ( z < minZ ) minZ = z; - - if ( x > maxX ) maxX = x; - if ( y > maxY ) maxY = y; - if ( z > maxZ ) maxZ = z; - - } - - this.min.set( minX, minY, minZ ); - this.max.set( maxX, maxY, maxZ ); - - 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$1.copy( size ).multiplyScalar( 0.5 ); - - this.min.copy( center ).sub( halfSize ); - this.max.copy( center ).add( halfSize ); - - return this; - - } - - setFromObject( object ) { - - this.makeEmpty(); - - return this.expandByObject( object ); - - } - - 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 ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Box3: .getCenter() target is now required' ); - target = new Vector3(); - - } - - return this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); - - } - - getSize( target ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Box3: .getSize() target is now required' ); - target = new Vector3(); - - } - - 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 ) { - - // 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 ) { - - if ( geometry.boundingBox === null ) { - - geometry.computeBoundingBox(); - - } - - _box.copy( geometry.boundingBox ); - _box.applyMatrix4( object.matrixWorld ); - - this.union( _box ); - - } - - const children = object.children; - - for ( let i = 0, l = children.length; i < l; i ++ ) { - - this.expandByObject( children[ i ] ); - - } - - 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. - - if ( target === undefined ) { - - console.warn( 'THREE.Box3: .getParameter() target is now required' ); - target = new Vector3(); - - } - - 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$1 ); - - // If that point is inside the sphere, the AABB and sphere intersect. - return _vector$1.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.subVectors( triangle.a, _center ); - _v1.subVectors( triangle.b, _center ); - _v2.subVectors( triangle.c, _center ); - - // compute edge vectors for triangle - _f0.subVectors( _v1, _v0 ); - _f1.subVectors( _v2, _v1 ); - _f2.subVectors( _v0, _v2 ); - - // 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, _v1, _v2, _extents ) ) { - - return false; - - } - - // test 3 face normals from the aabb - axes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ]; - if ( ! satForAxes( axes, _v0, _v1, _v2, _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, _v1, _v2, _extents ); - - } - - clampPoint( point, target ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Box3: .clampPoint() target is now required' ); - target = new Vector3(); - - } - - return target.copy( point ).clamp( this.min, this.max ); - - } - - distanceToPoint( point ) { - - const clampedPoint = _vector$1.copy( point ).clamp( this.min, this.max ); - - return clampedPoint.sub( point ).length(); - - } - - getBoundingSphere( target ) { - - if ( target === undefined ) { - - console.error( 'THREE.Box3: .getBoundingSphere() target is now required' ); - //target = new Sphere(); // removed to avoid cyclic dependency - - } - - this.getCenter( target.center ); - - target.radius = this.getSize( _vector$1 ).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 ); - - } - - } - - 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 seperating 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 seperating 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 seperating and we can exit - return false; - - } - - } - - return true; - - } - - 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$1 = /*@__PURE__*/ new Vector3(); - - const _box = /*@__PURE__*/ new Box3(); - - // triangle centered vertices - - const _v0 = /*@__PURE__*/ new Vector3(); - const _v1 = /*@__PURE__*/ new Vector3(); - const _v2 = /*@__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(); - - const _box$1 = /*@__PURE__*/ new Box3(); - - class Sphere { - - constructor( center, radius ) { - - this.center = ( center !== undefined ) ? center : new Vector3(); - this.radius = ( radius !== undefined ) ? radius : - 1; - - } - - 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$1.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; - - } - - clone() { - - return new this.constructor().copy( 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 ); - - if ( target === undefined ) { - - console.warn( 'THREE.Sphere: .clampPoint() target is now required' ); - target = new Vector3(); - - } - - 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 ( target === undefined ) { - - console.warn( 'THREE.Sphere: .getBoundingBox() target is now required' ); - target = new Box3(); - - } - - 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; - - } - - equals( sphere ) { - - return sphere.center.equals( this.center ) && ( sphere.radius === this.radius ); - - } - - } - - const _vector$2 = /*@__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 = /*@__PURE__*/ new Vector3(); - - class Ray { - - constructor( origin, direction ) { - - this.origin = ( origin !== undefined ) ? origin : new Vector3(); - this.direction = ( direction !== undefined ) ? direction : new Vector3( 0, 0, - 1 ); - - } - - set( origin, direction ) { - - this.origin.copy( origin ); - this.direction.copy( direction ); - - return this; - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - copy( ray ) { - - this.origin.copy( ray.origin ); - this.direction.copy( ray.direction ); - - return this; - - } - - at( t, target ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Ray: .at() target is now required' ); - target = new Vector3(); - - } - - return target.copy( this.direction ).multiplyScalar( t ).add( this.origin ); - - } - - lookAt( v ) { - - this.direction.copy( v ).sub( this.origin ).normalize(); - - return this; - - } - - recast( t ) { - - this.origin.copy( this.at( t, _vector$2 ) ); - - return this; - - } - - closestPointToPoint( point, target ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Ray: .closestPointToPoint() target is now required' ); - target = new Vector3(); - - } - - target.subVectors( point, this.origin ); - - const directionDistance = target.dot( this.direction ); - - if ( directionDistance < 0 ) { - - return target.copy( this.origin ); - - } - - return target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin ); - - } - - distanceToPoint( point ) { - - return Math.sqrt( this.distanceSqToPoint( point ) ); - - } - - distanceSqToPoint( point ) { - - const directionDistance = _vector$2.subVectors( point, this.origin ).dot( this.direction ); - - // point behind the ray - - if ( directionDistance < 0 ) { - - return this.origin.distanceToSquared( point ); - - } - - _vector$2.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin ); - - return _vector$2.distanceToSquared( point ); - - } - - distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) { - - // from http://www.geometrictools.com/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.direction ).multiplyScalar( s0 ).add( this.origin ); - - } - - if ( optionalPointOnSegment ) { - - optionalPointOnSegment.copy( _segDir ).multiplyScalar( s1 ).add( _segCenter ); - - } - - return sqrDist; - - } - - intersectSphere( sphere, target ) { - - _vector$2.subVectors( sphere.center, this.origin ); - const tca = _vector$2.dot( this.direction ); - const d2 = _vector$2.dot( _vector$2 ) - 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 both t0 and t1 are behind the ray - if so, return null - if ( t0 < 0 && 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; - - // These lines also handle the case where tmin or tmax is NaN - // (result of 0 * Infinity). x !== x returns true if x is NaN - - if ( tymin > tmin || tmin !== tmin ) tmin = tymin; - - if ( tymax < tmax || tmax !== 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$2 ) !== null; - - } - - intersectTriangle( a, b, c, backfaceCulling, target ) { - - // Compute the offset origin, edges, and normal. - - // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h - - _edge1.subVectors( b, a ); - _edge2.subVectors( c, a ); - _normal.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 ); - 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 ); - - // 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 ); - - } - - } - - class Matrix4 { - - constructor() { - - Object.defineProperty( this, 'isMatrix4', { value: true } ); - - this.elements = [ - - 1, 0, 0, 0, - 0, 1, 0, 0, - 0, 0, 1, 0, - 0, 0, 0, 1 - - ]; - - if ( arguments.length > 0 ) { - - console.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' ); - - } - - } - - 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; - - } - - 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$1.setFromMatrixColumn( m, 0 ).length(); - const scaleY = 1 / _v1$1.setFromMatrixColumn( m, 1 ).length(); - const scaleZ = 1 / _v1$1.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 ) { - - if ( ! ( euler && euler.isEuler ) ) { - - console.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' ); - - } - - 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, n ) { - - if ( n !== undefined ) { - - console.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' ); - return this.multiplyMatrices( m, n ); - - } - - 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 ) { - - 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( x, y, z ) { - - this.set( - - 1, y, z, 0, - x, 1, z, 0, - x, y, 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$1.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length(); - const sy = _v1$1.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length(); - const sz = _v1$1.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.copy( this ); - - const invSX = 1 / sx; - const invSY = 1 / sy; - const invSZ = 1 / sz; - - _m1.elements[ 0 ] *= invSX; - _m1.elements[ 1 ] *= invSX; - _m1.elements[ 2 ] *= invSX; - - _m1.elements[ 4 ] *= invSY; - _m1.elements[ 5 ] *= invSY; - _m1.elements[ 6 ] *= invSY; - - _m1.elements[ 8 ] *= invSZ; - _m1.elements[ 9 ] *= invSZ; - _m1.elements[ 10 ] *= invSZ; - - quaternion.setFromRotationMatrix( _m1 ); - - scale.x = sx; - scale.y = sy; - scale.z = sz; - - return this; - - } - - makePerspective( left, right, top, bottom, near, far ) { - - if ( far === undefined ) { - - console.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' ); - - } - - 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 ); - const c = - ( far + near ) / ( far - near ); - const d = - 2 * far * near / ( far - near ); - - 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 ) { - - 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; - const z = ( far + near ) * p; - - 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 ] = - 2 * p; 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$1 = /*@__PURE__*/ new Vector3(); - const _m1 = /*@__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(); - - class Euler { - - constructor( x = 0, y = 0, z = 0, order = Euler.DefaultOrder ) { - - Object.defineProperty( this, 'isEuler', { value: 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._x = x; - this._y = y; - this._z = z; - this._order = order || this._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, update ) { - - const clamp = MathUtils.clamp; - - // 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 ]; - - order = order || this._order; - - 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 !== false ) this._onChangeCallback(); - - return this; - - } - - setFromQuaternion( q, order, update ) { - - _matrix.makeRotationFromQuaternion( q ); - - return this.setFromRotationMatrix( _matrix, order, update ); - - } - - setFromVector3( v, order ) { - - return this.set( v.x, v.y, v.z, order || this._order ); - - } - - reorder( newOrder ) { - - // WARNING: this discards revolution information -bhouston - - _quaternion$1.setFromEuler( this ); - - return this.setFromQuaternion( _quaternion$1, 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; - - } - - toVector3( optionalResult ) { - - if ( optionalResult ) { - - return optionalResult.set( this._x, this._y, this._z ); - - } else { - - return new Vector3( this._x, this._y, this._z ); - - } - - } - - _onChange( callback ) { - - this._onChangeCallback = callback; - - return this; - - } - - _onChangeCallback() {} - - } - - Euler.DefaultOrder = 'XYZ'; - Euler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ]; - - const _matrix = /*@__PURE__*/ new Matrix4(); - const _quaternion$1 = /*@__PURE__*/ new Quaternion(); - - class Layers { - - constructor() { - - this.mask = 1 | 0; - - } - - set( channel ) { - - this.mask = 1 << channel | 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; - - } - - } - - let _object3DId = 0; - - const _v1$2 = new Vector3(); - const _q1 = new Quaternion(); - const _m1$1 = new Matrix4(); - const _target = new Vector3(); - - const _position = new Vector3(); - const _scale = new Vector3(); - const _quaternion$2 = new Quaternion(); - - const _xAxis = new Vector3( 1, 0, 0 ); - const _yAxis = new Vector3( 0, 1, 0 ); - const _zAxis = new Vector3( 0, 0, 1 ); - - const _addedEvent = { type: 'added' }; - const _removedEvent = { type: 'removed' }; - - function Object3D() { - - Object.defineProperty( this, 'id', { value: _object3DId ++ } ); - - this.uuid = MathUtils.generateUUID(); - - this.name = ''; - this.type = 'Object3D'; - - this.parent = null; - this.children = []; - - this.up = Object3D.DefaultUp.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.DefaultMatrixAutoUpdate; - 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 = {}; - - } - - Object3D.DefaultUp = new Vector3( 0, 1, 0 ); - Object3D.DefaultMatrixAutoUpdate = true; - - Object3D.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { - - constructor: Object3D, - - isObject3D: true, - - onBeforeRender: function () {}, - onAfterRender: function () {}, - - applyMatrix4: function ( matrix ) { - - if ( this.matrixAutoUpdate ) this.updateMatrix(); - - this.matrix.premultiply( matrix ); - - this.matrix.decompose( this.position, this.quaternion, this.scale ); - - }, - - applyQuaternion: function ( q ) { - - this.quaternion.premultiply( q ); - - return this; - - }, - - setRotationFromAxisAngle: function ( axis, angle ) { - - // assumes axis is normalized - - this.quaternion.setFromAxisAngle( axis, angle ); - - }, - - setRotationFromEuler: function ( euler ) { - - this.quaternion.setFromEuler( euler, true ); - - }, - - setRotationFromMatrix: function ( m ) { - - // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) - - this.quaternion.setFromRotationMatrix( m ); - - }, - - setRotationFromQuaternion: function ( q ) { - - // assumes q is normalized - - this.quaternion.copy( q ); - - }, - - rotateOnAxis: function ( 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: function ( 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: function ( angle ) { - - return this.rotateOnAxis( _xAxis, angle ); - - }, - - rotateY: function ( angle ) { - - return this.rotateOnAxis( _yAxis, angle ); - - }, - - rotateZ: function ( angle ) { - - return this.rotateOnAxis( _zAxis, angle ); - - }, - - translateOnAxis: function ( axis, distance ) { - - // translate object by distance along axis in object space - // axis is assumed to be normalized - - _v1$2.copy( axis ).applyQuaternion( this.quaternion ); - - this.position.add( _v1$2.multiplyScalar( distance ) ); - - return this; - - }, - - translateX: function ( distance ) { - - return this.translateOnAxis( _xAxis, distance ); - - }, - - translateY: function ( distance ) { - - return this.translateOnAxis( _yAxis, distance ); - - }, - - translateZ: function ( distance ) { - - return this.translateOnAxis( _zAxis, distance ); - - }, - - localToWorld: function ( vector ) { - - return vector.applyMatrix4( this.matrixWorld ); - - }, - - worldToLocal: function ( vector ) { - - return vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() ); - - }, - - lookAt: function ( 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.setFromMatrixPosition( this.matrixWorld ); - - if ( this.isCamera || this.isLight ) { - - _m1$1.lookAt( _position, _target, this.up ); - - } else { - - _m1$1.lookAt( _target, _position, this.up ); - - } - - this.quaternion.setFromRotationMatrix( _m1$1 ); - - if ( parent ) { - - _m1$1.extractRotation( parent.matrixWorld ); - _q1.setFromRotationMatrix( _m1$1 ); - this.quaternion.premultiply( _q1.invert() ); - - } - - }, - - add: function ( 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 ) ) { - - if ( object.parent !== null ) { - - object.parent.remove( object ); - - } - - object.parent = this; - this.children.push( object ); - - object.dispatchEvent( _addedEvent ); - - } else { - - console.error( "THREE.Object3D.add: object not an instance of THREE.Object3D.", object ); - - } - - return this; - - }, - - remove: function ( 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 ); - - } - - return this; - - }, - - clear: function () { - - for ( let i = 0; i < this.children.length; i ++ ) { - - const object = this.children[ i ]; - - object.parent = null; - - object.dispatchEvent( _removedEvent ); - - } - - this.children.length = 0; - - return this; - - - }, - - attach: function ( object ) { - - // adds object as a child of this, while maintaining the object's world transform - - this.updateWorldMatrix( true, false ); - - _m1$1.copy( this.matrixWorld ).invert(); - - if ( object.parent !== null ) { - - object.parent.updateWorldMatrix( true, false ); - - _m1$1.multiply( object.parent.matrixWorld ); - - } - - object.applyMatrix4( _m1$1 ); - - object.updateWorldMatrix( false, false ); - - this.add( object ); - - return this; - - }, - - getObjectById: function ( id ) { - - return this.getObjectByProperty( 'id', id ); - - }, - - getObjectByName: function ( name ) { - - return this.getObjectByProperty( 'name', name ); - - }, - - getObjectByProperty: function ( 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; - - }, - - getWorldPosition: function ( target ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Object3D: .getWorldPosition() target is now required' ); - target = new Vector3(); - - } - - this.updateWorldMatrix( true, false ); - - return target.setFromMatrixPosition( this.matrixWorld ); - - }, - - getWorldQuaternion: function ( target ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Object3D: .getWorldQuaternion() target is now required' ); - target = new Quaternion(); - - } - - this.updateWorldMatrix( true, false ); - - this.matrixWorld.decompose( _position, target, _scale ); - - return target; - - }, - - getWorldScale: function ( target ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Object3D: .getWorldScale() target is now required' ); - target = new Vector3(); - - } - - this.updateWorldMatrix( true, false ); - - this.matrixWorld.decompose( _position, _quaternion$2, target ); - - return target; - - }, - - getWorldDirection: function ( target ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Object3D: .getWorldDirection() target is now required' ); - target = new Vector3(); - - } - - this.updateWorldMatrix( true, false ); - - const e = this.matrixWorld.elements; - - return target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize(); - - }, - - raycast: function () {}, - - traverse: function ( callback ) { - - callback( this ); - - const children = this.children; - - for ( let i = 0, l = children.length; i < l; i ++ ) { - - children[ i ].traverse( callback ); - - } - - }, - - traverseVisible: function ( 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: function ( callback ) { - - const parent = this.parent; - - if ( parent !== null ) { - - callback( parent ); - - parent.traverseAncestors( callback ); - - } - - }, - - updateMatrix: function () { - - this.matrix.compose( this.position, this.quaternion, this.scale ); - - this.matrixWorldNeedsUpdate = true; - - }, - - updateMatrixWorld: function ( 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 ++ ) { - - children[ i ].updateMatrixWorld( force ); - - } - - }, - - updateWorldMatrix: function ( updateParents, updateChildren ) { - - const parent = this.parent; - - if ( updateParents === true && parent !== null ) { - - 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 ++ ) { - - children[ i ].updateWorldMatrix( false, true ); - - } - - } - - }, - - toJSON: function ( 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: {} - }; - - output.metadata = { - version: 4.5, - 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 ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData; - - object.layers = this.layers.mask; - object.matrix = this.matrix.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(); - - } - - // - - function serialize( library, element ) { - - if ( library[ element.uuid ] === undefined ) { - - library[ element.uuid ] = element.toJSON( meta ); - - } - - return element.uuid; - - } - - 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 ); - - 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; - - } - - 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: function ( recursive ) { - - return new this.constructor().copy( this, recursive ); - - }, - - copy: function ( 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.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.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; - - } - - } ); - - const _vector1 = /*@__PURE__*/ new Vector3(); - const _vector2 = /*@__PURE__*/ new Vector3(); - const _normalMatrix = /*@__PURE__*/ new Matrix3(); - - class Plane { - - constructor( normal, constant ) { - - Object.defineProperty( this, 'isPlane', { value: true } ); - - // normal is assumed to be normalized - - this.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 ); - this.constant = ( constant !== undefined ) ? constant : 0; - - } - - 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; - - } - - clone() { - - return new this.constructor().copy( 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 ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Plane: .projectPoint() target is now required' ); - target = new Vector3(); - - } - - return target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point ); - - } - - intersectLine( line, target ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Plane: .intersectLine() target is now required' ); - target = new Vector3(); - - } - - 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 undefined; - - } - - const t = - ( line.start.dot( this.normal ) + this.constant ) / denominator; - - if ( t < 0 || t > 1 ) { - - return undefined; - - } - - return target.copy( direction ).multiplyScalar( t ).add( line.start ); - - } - - 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 ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Plane: .coplanarPoint() target is now required' ); - target = new Vector3(); - - } - - 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 ); - - } - - } - - const _v0$1 = /*@__PURE__*/ new Vector3(); - const _v1$3 = /*@__PURE__*/ new Vector3(); - const _v2$1 = /*@__PURE__*/ new Vector3(); - const _v3 = /*@__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, b, c ) { - - this.a = ( a !== undefined ) ? a : new Vector3(); - this.b = ( b !== undefined ) ? b : new Vector3(); - this.c = ( c !== undefined ) ? c : new Vector3(); - - } - - static getNormal( a, b, c, target ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Triangle: .getNormal() target is now required' ); - target = new Vector3(); - - } - - 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$1.subVectors( point, a ); - - const dot00 = _v0$1.dot( _v0$1 ); - const dot01 = _v0$1.dot( _v1$3 ); - const dot02 = _v0$1.dot( _v2$1 ); - const dot11 = _v1$3.dot( _v1$3 ); - const dot12 = _v1$3.dot( _v2$1 ); - - const denom = ( dot00 * dot11 - dot01 * dot01 ); - - if ( target === undefined ) { - - console.warn( 'THREE.Triangle: .getBarycoord() target is now required' ); - target = new Vector3(); - - } - - // collinear or singular triangle - if ( denom === 0 ) { - - // arbitrary location outside of triangle? - // not sure if this is the best idea, maybe should be returning undefined - return target.set( - 2, - 1, - 1 ); - - } - - 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 ) { - - this.getBarycoord( point, a, b, c, _v3 ); - - return ( _v3.x >= 0 ) && ( _v3.y >= 0 ) && ( ( _v3.x + _v3.y ) <= 1 ); - - } - - static getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) { - - this.getBarycoord( point, p1, p2, p3, _v3 ); - - target.set( 0, 0 ); - target.addScaledVector( uv1, _v3.x ); - target.addScaledVector( uv2, _v3.y ); - target.addScaledVector( uv3, _v3.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; - - } - - 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 ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Triangle: .getMidpoint() target is now required' ); - target = new Vector3(); - - } - - 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 ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Triangle: .getPlane() target is now required' ); - target = new Plane(); - - } - - return target.setFromCoplanarPoints( this.a, this.b, this.c ); - - } - - getBarycoord( point, target ) { - - return Triangle.getBarycoord( point, this.a, this.b, this.c, target ); - - } - - getUV( point, uv1, uv2, uv3, target ) { - - return Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, 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 ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' ); - target = new Vector3(); - - } - - 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; - - } - - 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; - - } - - class Color { - - constructor( r, g, b ) { - - Object.defineProperty( this, 'isColor', { value: true } ); - - if ( g === undefined && b === undefined ) { - - // r is THREE.Color, hex or string - return this.set( r ); - - } - - return this.setRGB( r, g, b ); - - } - - set( value ) { - - if ( value && value.isColor ) { - - this.copy( value ); - - } else if ( typeof value === 'number' ) { - - this.setHex( value ); - - } else if ( typeof value === 'string' ) { - - this.setStyle( value ); - - } - - return this; - - } - - setScalar( scalar ) { - - this.r = scalar; - this.g = scalar; - this.b = scalar; - - return this; - - } - - setHex( hex ) { - - hex = Math.floor( hex ); - - this.r = ( hex >> 16 & 255 ) / 255; - this.g = ( hex >> 8 & 255 ) / 255; - this.b = ( hex & 255 ) / 255; - - return this; - - } - - setRGB( r, g, b ) { - - this.r = r; - this.g = g; - this.b = b; - - return this; - - } - - setHSL( h, s, l ) { - - // h,s,l ranges are in 0.0 - 1.0 - h = MathUtils.euclideanModulo( h, 1 ); - s = MathUtils.clamp( s, 0, 1 ); - l = MathUtils.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 ); - - } - - return this; - - } - - setStyle( style ) { - - 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 = /^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec( style ) ) { - - // rgb / hsl - - let color; - const name = m[ 1 ]; - const components = m[ 2 ]; - - switch ( name ) { - - case 'rgb': - case 'rgba': - - if ( color = /^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { - - // rgb(255,0,0) rgba(255,0,0,0.5) - this.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255; - this.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255; - this.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255; - - handleAlpha( color[ 5 ] ); - - return this; - - } - - if ( color = /^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { - - // rgb(100%,0%,0%) rgba(100%,0%,0%,0.5) - this.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100; - this.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100; - this.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100; - - handleAlpha( color[ 5 ] ); - - return this; - - } - - break; - - case 'hsl': - case 'hsla': - - if ( color = /^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { - - // hsl(120,50%,50%) hsla(120,50%,50%,0.5) - const h = parseFloat( color[ 1 ] ) / 360; - const s = parseInt( color[ 2 ], 10 ) / 100; - const l = parseInt( color[ 3 ], 10 ) / 100; - - handleAlpha( color[ 5 ] ); - - return this.setHSL( h, s, l ); - - } - - break; - - } - - } else if ( m = /^\#([A-Fa-f0-9]+)$/.exec( style ) ) { - - // hex color - - const hex = m[ 1 ]; - const size = hex.length; - - if ( size === 3 ) { - - // #ff0 - this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255; - this.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255; - this.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255; - - return this; - - } else if ( size === 6 ) { - - // #ff0000 - this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255; - this.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255; - this.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255; - - return this; - - } - - } - - if ( style && style.length > 0 ) { - - return this.setColorName( style ); - - } - - return this; - - } - - setColorName( style ) { - - // color keywords - const hex = _colorKeywords[ style ]; - - if ( hex !== undefined ) { - - // red - this.setHex( hex ); - - } 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; - - } - - copyGammaToLinear( color, gammaFactor = 2.0 ) { - - this.r = Math.pow( color.r, gammaFactor ); - this.g = Math.pow( color.g, gammaFactor ); - this.b = Math.pow( color.b, gammaFactor ); - - return this; - - } - - copyLinearToGamma( color, gammaFactor = 2.0 ) { - - const safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0; - - this.r = Math.pow( color.r, safeInverse ); - this.g = Math.pow( color.g, safeInverse ); - this.b = Math.pow( color.b, safeInverse ); - - return this; - - } - - convertGammaToLinear( gammaFactor ) { - - this.copyGammaToLinear( this, gammaFactor ); - - return this; - - } - - convertLinearToGamma( gammaFactor ) { - - this.copyLinearToGamma( this, gammaFactor ); - - 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() { - - return ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0; - - } - - getHexString() { - - return ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 ); - - } - - getHSL( target ) { - - // h,s,l ranges are in 0.0 - 1.0 - - if ( target === undefined ) { - - console.warn( 'THREE.Color: .getHSL() target is now required' ); - target = { h: 0, s: 0, l: 0 }; - - } - - const r = this.r, g = this.g, b = this.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; - - } - - getStyle() { - - return 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')'; - - } - - offsetHSL( h, s, l ) { - - this.getHSL( _hslA ); - - _hslA.h += h; _hslA.s += s; _hslA.l += l; - - this.setHSL( _hslA.h, _hslA.s, _hslA.l ); - - return this; - - } - - 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; - - } - - lerpHSL( color, alpha ) { - - this.getHSL( _hslA ); - color.getHSL( _hslB ); - - const h = MathUtils.lerp( _hslA.h, _hslB.h, alpha ); - const s = MathUtils.lerp( _hslA.s, _hslB.s, alpha ); - const l = MathUtils.lerp( _hslA.l, _hslB.l, alpha ); - - this.setHSL( h, s, l ); - - 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 ); - - if ( attribute.normalized === true ) { - - // assuming Uint8Array - - this.r /= 255; - this.g /= 255; - this.b /= 255; - - } - - return this; - - } - - toJSON() { - - return this.getHex(); - - } - - } - - Color.NAMES = _colorKeywords; - Color.prototype.r = 1; - Color.prototype.g = 1; - Color.prototype.b = 1; - - class Face3 { - - constructor( a, b, c, normal, color, materialIndex = 0 ) { - - this.a = a; - this.b = b; - this.c = c; - - this.normal = ( normal && normal.isVector3 ) ? normal : new Vector3(); - this.vertexNormals = Array.isArray( normal ) ? normal : []; - - this.color = ( color && color.isColor ) ? color : new Color(); - this.vertexColors = Array.isArray( color ) ? color : []; - - this.materialIndex = materialIndex; - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - copy( source ) { - - this.a = source.a; - this.b = source.b; - this.c = source.c; - - this.normal.copy( source.normal ); - this.color.copy( source.color ); - - this.materialIndex = source.materialIndex; - - for ( let i = 0, il = source.vertexNormals.length; i < il; i ++ ) { - - this.vertexNormals[ i ] = source.vertexNormals[ i ].clone(); - - } - - for ( let i = 0, il = source.vertexColors.length; i < il; i ++ ) { - - this.vertexColors[ i ] = source.vertexColors[ i ].clone(); - - } - - return this; - - } - - } - - let materialId = 0; - - function Material() { - - Object.defineProperty( this, 'id', { value: materialId ++ } ); - - this.uuid = MathUtils.generateUUID(); - - this.name = ''; - this.type = 'Material'; - - this.fog = true; - - this.blending = NormalBlending; - this.side = FrontSide; - this.flatShading = false; - this.vertexColors = false; - - this.opacity = 1; - this.transparent = false; - - this.blendSrc = SrcAlphaFactor; - this.blendDst = OneMinusSrcAlphaFactor; - this.blendEquation = AddEquation; - this.blendSrcAlpha = null; - this.blendDstAlpha = null; - this.blendEquationAlpha = null; - - 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.alphaTest = 0; - this.premultipliedAlpha = false; - - this.visible = true; - - this.toneMapped = true; - - this.userData = {}; - - this.version = 0; - - } - - Material.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { - - constructor: Material, - - isMaterial: true, - - onBeforeCompile: function ( /* shaderobject, renderer */ ) {}, - - customProgramCacheKey: function () { - - return this.onBeforeCompile.toString(); - - }, - - setValues: function ( values ) { - - if ( values === undefined ) return; - - for ( const key in values ) { - - const newValue = values[ key ]; - - if ( newValue === undefined ) { - - console.warn( "THREE.Material: '" + key + "' parameter is undefined." ); - continue; - - } - - // for backward compatability if shading is set in the constructor - if ( key === 'shading' ) { - - console.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); - this.flatShading = ( newValue === FlatShading ) ? true : false; - continue; - - } - - const currentValue = this[ key ]; - - if ( currentValue === undefined ) { - - console.warn( "THREE." + this.type + ": '" + key + "' is not a property of this material." ); - continue; - - } - - if ( currentValue && currentValue.isColor ) { - - currentValue.set( newValue ); - - } else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) { - - currentValue.copy( newValue ); - - } else { - - this[ key ] = newValue; - - } - - } - - }, - - toJSON: function ( meta ) { - - const isRoot = ( meta === undefined || typeof meta === 'string' ); - - if ( isRoot ) { - - meta = { - textures: {}, - images: {} - }; - - } - - const data = { - metadata: { - version: 4.5, - 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 && this.sheen.isColor ) data.sheen = this.sheen.getHex(); - if ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex(); - if ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity; - - if ( this.specular && this.specular.isColor ) data.specular = this.specular.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.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; - - 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.envMap && this.envMap.isTexture ) { - - data.envMap = this.envMap.toJSON( meta ).uuid; - data.reflectivity = this.reflectivity; // Scale behind envMap - data.refractionRatio = this.refractionRatio; - - if ( this.combine !== undefined ) data.combine = this.combine; - if ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity; - - } - - if ( this.gradientMap && this.gradientMap.isTexture ) { - - data.gradientMap = this.gradientMap.toJSON( meta ).uuid; - - } - - if ( this.size !== undefined ) data.size = this.size; - if ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation; - - if ( this.blending !== NormalBlending ) data.blending = this.blending; - if ( this.flatShading === true ) data.flatShading = this.flatShading; - if ( this.side !== FrontSide ) data.side = this.side; - if ( this.vertexColors ) data.vertexColors = true; - - if ( this.opacity < 1 ) data.opacity = this.opacity; - if ( this.transparent === true ) data.transparent = this.transparent; - - data.depthFunc = this.depthFunc; - data.depthTest = this.depthTest; - data.depthWrite = this.depthWrite; - - data.stencilWrite = this.stencilWrite; - data.stencilWriteMask = this.stencilWriteMask; - data.stencilFunc = this.stencilFunc; - data.stencilRef = this.stencilRef; - data.stencilFuncMask = this.stencilFuncMask; - data.stencilFail = this.stencilFail; - data.stencilZFail = this.stencilZFail; - data.stencilZPass = this.stencilZPass; - - // rotation (SpriteMaterial) - if ( this.rotation && 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 && 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.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha; - - if ( this.wireframe === true ) data.wireframe = this.wireframe; - 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.morphTargets === true ) data.morphTargets = true; - if ( this.morphNormals === true ) data.morphNormals = true; - if ( this.skinning === true ) data.skinning = true; - - if ( this.visible === false ) data.visible = false; - - if ( this.toneMapped === false ) data.toneMapped = false; - - if ( JSON.stringify( this.userData ) !== '{}' ) 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 ( isRoot ) { - - 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: function () { - - return new this.constructor().copy( this ); - - }, - - copy: function ( source ) { - - this.name = source.name; - - this.fog = source.fog; - - this.blending = source.blending; - this.side = source.side; - this.flatShading = source.flatShading; - 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.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.premultipliedAlpha = source.premultipliedAlpha; - - this.visible = source.visible; - - this.toneMapped = source.toneMapped; - - this.userData = JSON.parse( JSON.stringify( source.userData ) ); - - return this; - - }, - - dispose: function () { - - this.dispatchEvent( { type: 'dispose' } ); - - } - - } ); - - Object.defineProperty( Material.prototype, 'needsUpdate', { - - set: function ( value ) { - - if ( value === true ) this.version ++; - - } - - } ); - - /** - * parameters = { - * color: , - * opacity: , - * map: new THREE.Texture( ), - * - * lightMap: new THREE.Texture( ), - * lightMapIntensity: - * - * aoMap: new THREE.Texture( ), - * aoMapIntensity: - * - * specularMap: new THREE.Texture( ), - * - * alphaMap: new THREE.Texture( ), - * - * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), - * combine: THREE.Multiply, - * reflectivity: , - * refractionRatio: , - * - * depthTest: , - * depthWrite: , - * - * wireframe: , - * wireframeLinewidth: , - * - * skinning: , - * morphTargets: - * } - */ - - function MeshBasicMaterial( parameters ) { - - Material.call( this ); - - 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.combine = MultiplyOperation; - this.reflectivity = 1; - this.refractionRatio = 0.98; - - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - - this.skinning = false; - this.morphTargets = false; - - this.setValues( parameters ); - - } - - MeshBasicMaterial.prototype = Object.create( Material.prototype ); - MeshBasicMaterial.prototype.constructor = MeshBasicMaterial; - - MeshBasicMaterial.prototype.isMeshBasicMaterial = true; - - MeshBasicMaterial.prototype.copy = function ( source ) { - - Material.prototype.copy.call( this, 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.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.skinning = source.skinning; - this.morphTargets = source.morphTargets; - - return this; - - }; - - const _vector$3 = new Vector3(); - const _vector2$1 = new Vector2(); - - function BufferAttribute( array, itemSize, normalized ) { - - if ( Array.isArray( array ) ) { - - throw new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' ); - - } - - this.name = ''; - - this.array = array; - this.itemSize = itemSize; - this.count = array !== undefined ? array.length / itemSize : 0; - this.normalized = normalized === true; - - this.usage = StaticDrawUsage; - this.updateRange = { offset: 0, count: - 1 }; - - this.version = 0; - - } - - Object.defineProperty( BufferAttribute.prototype, 'needsUpdate', { - - set: function ( value ) { - - if ( value === true ) this.version ++; - - } - - } ); - - Object.assign( BufferAttribute.prototype, { - - isBufferAttribute: true, - - onUploadCallback: function () {}, - - setUsage: function ( value ) { - - this.usage = value; - - return this; - - }, - - copy: function ( 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; - - return this; - - }, - - copyAt: function ( 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: function ( array ) { - - this.array.set( array ); - - return this; - - }, - - copyColorsArray: function ( colors ) { - - const array = this.array; - let offset = 0; - - for ( let i = 0, l = colors.length; i < l; i ++ ) { - - let color = colors[ i ]; - - if ( color === undefined ) { - - console.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i ); - color = new Color(); - - } - - array[ offset ++ ] = color.r; - array[ offset ++ ] = color.g; - array[ offset ++ ] = color.b; - - } - - return this; - - }, - - copyVector2sArray: function ( vectors ) { - - const array = this.array; - let offset = 0; - - for ( let i = 0, l = vectors.length; i < l; i ++ ) { - - let vector = vectors[ i ]; - - if ( vector === undefined ) { - - console.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i ); - vector = new Vector2(); - - } - - array[ offset ++ ] = vector.x; - array[ offset ++ ] = vector.y; - - } - - return this; - - }, - - copyVector3sArray: function ( vectors ) { - - const array = this.array; - let offset = 0; - - for ( let i = 0, l = vectors.length; i < l; i ++ ) { - - let vector = vectors[ i ]; - - if ( vector === undefined ) { - - console.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i ); - vector = new Vector3(); - - } - - array[ offset ++ ] = vector.x; - array[ offset ++ ] = vector.y; - array[ offset ++ ] = vector.z; - - } - - return this; - - }, - - copyVector4sArray: function ( vectors ) { - - const array = this.array; - let offset = 0; - - for ( let i = 0, l = vectors.length; i < l; i ++ ) { - - let vector = vectors[ i ]; - - if ( vector === undefined ) { - - console.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i ); - vector = new Vector4(); - - } - - array[ offset ++ ] = vector.x; - array[ offset ++ ] = vector.y; - array[ offset ++ ] = vector.z; - array[ offset ++ ] = vector.w; - - } - - return this; - - }, - - applyMatrix3: function ( 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$3.fromBufferAttribute( this, i ); - _vector$3.applyMatrix3( m ); - - this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); - - } - - } - - return this; - - }, - - applyMatrix4: function ( m ) { - - for ( let i = 0, l = this.count; i < l; i ++ ) { - - _vector$3.x = this.getX( i ); - _vector$3.y = this.getY( i ); - _vector$3.z = this.getZ( i ); - - _vector$3.applyMatrix4( m ); - - this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); - - } - - return this; - - }, - - applyNormalMatrix: function ( m ) { - - for ( let i = 0, l = this.count; i < l; i ++ ) { - - _vector$3.x = this.getX( i ); - _vector$3.y = this.getY( i ); - _vector$3.z = this.getZ( i ); - - _vector$3.applyNormalMatrix( m ); - - this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); - - } - - return this; - - }, - - transformDirection: function ( m ) { - - for ( let i = 0, l = this.count; i < l; i ++ ) { - - _vector$3.x = this.getX( i ); - _vector$3.y = this.getY( i ); - _vector$3.z = this.getZ( i ); - - _vector$3.transformDirection( m ); - - this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); - - } - - return this; - - }, - - set: function ( value, offset = 0 ) { - - this.array.set( value, offset ); - - return this; - - }, - - getX: function ( index ) { - - return this.array[ index * this.itemSize ]; - - }, - - setX: function ( index, x ) { - - this.array[ index * this.itemSize ] = x; - - return this; - - }, - - getY: function ( index ) { - - return this.array[ index * this.itemSize + 1 ]; - - }, - - setY: function ( index, y ) { - - this.array[ index * this.itemSize + 1 ] = y; - - return this; - - }, - - getZ: function ( index ) { - - return this.array[ index * this.itemSize + 2 ]; - - }, - - setZ: function ( index, z ) { - - this.array[ index * this.itemSize + 2 ] = z; - - return this; - - }, - - getW: function ( index ) { - - return this.array[ index * this.itemSize + 3 ]; - - }, - - setW: function ( index, w ) { - - this.array[ index * this.itemSize + 3 ] = w; - - return this; - - }, - - setXY: function ( index, x, y ) { - - index *= this.itemSize; - - this.array[ index + 0 ] = x; - this.array[ index + 1 ] = y; - - return this; - - }, - - setXYZ: function ( index, x, y, z ) { - - index *= this.itemSize; - - this.array[ index + 0 ] = x; - this.array[ index + 1 ] = y; - this.array[ index + 2 ] = z; - - return this; - - }, - - setXYZW: function ( index, x, y, z, w ) { - - index *= this.itemSize; - - this.array[ index + 0 ] = x; - this.array[ index + 1 ] = y; - this.array[ index + 2 ] = z; - this.array[ index + 3 ] = w; - - return this; - - }, - - onUpload: function ( callback ) { - - this.onUploadCallback = callback; - - return this; - - }, - - clone: function () { - - return new this.constructor( this.array, this.itemSize ).copy( this ); - - }, - - toJSON: function () { - - return { - itemSize: this.itemSize, - type: this.array.constructor.name, - array: Array.prototype.slice.call( this.array ), - normalized: this.normalized - }; - - } - - } ); - - // - - function Int8BufferAttribute( array, itemSize, normalized ) { - - BufferAttribute.call( this, new Int8Array( array ), itemSize, normalized ); - - } - - Int8BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); - Int8BufferAttribute.prototype.constructor = Int8BufferAttribute; - - - function Uint8BufferAttribute( array, itemSize, normalized ) { - - BufferAttribute.call( this, new Uint8Array( array ), itemSize, normalized ); - - } - - Uint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); - Uint8BufferAttribute.prototype.constructor = Uint8BufferAttribute; - - - function Uint8ClampedBufferAttribute( array, itemSize, normalized ) { - - BufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize, normalized ); - - } - - Uint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype ); - Uint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute; - - - function Int16BufferAttribute( array, itemSize, normalized ) { - - BufferAttribute.call( this, new Int16Array( array ), itemSize, normalized ); - - } - - Int16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); - Int16BufferAttribute.prototype.constructor = Int16BufferAttribute; - - - function Uint16BufferAttribute( array, itemSize, normalized ) { - - BufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized ); - - } - - Uint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); - Uint16BufferAttribute.prototype.constructor = Uint16BufferAttribute; - - - function Int32BufferAttribute( array, itemSize, normalized ) { - - BufferAttribute.call( this, new Int32Array( array ), itemSize, normalized ); - - } - - Int32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); - Int32BufferAttribute.prototype.constructor = Int32BufferAttribute; - - - function Uint32BufferAttribute( array, itemSize, normalized ) { - - BufferAttribute.call( this, new Uint32Array( array ), itemSize, normalized ); - - } - - Uint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); - Uint32BufferAttribute.prototype.constructor = Uint32BufferAttribute; - - function Float16BufferAttribute( array, itemSize, normalized ) { - - BufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized ); - - } - - Float16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); - Float16BufferAttribute.prototype.constructor = Float16BufferAttribute; - Float16BufferAttribute.prototype.isFloat16BufferAttribute = true; - - function Float32BufferAttribute( array, itemSize, normalized ) { - - BufferAttribute.call( this, new Float32Array( array ), itemSize, normalized ); - - } - - Float32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); - Float32BufferAttribute.prototype.constructor = Float32BufferAttribute; - - - function Float64BufferAttribute( array, itemSize, normalized ) { - - BufferAttribute.call( this, new Float64Array( array ), itemSize, normalized ); - - } - - Float64BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); - Float64BufferAttribute.prototype.constructor = Float64BufferAttribute; - - class DirectGeometry { - - constructor() { - - this.vertices = []; - this.normals = []; - this.colors = []; - this.uvs = []; - this.uvs2 = []; - - this.groups = []; - - this.morphTargets = {}; - - this.skinWeights = []; - this.skinIndices = []; - - // this.lineDistances = []; - - this.boundingBox = null; - this.boundingSphere = null; - - // update flags - - this.verticesNeedUpdate = false; - this.normalsNeedUpdate = false; - this.colorsNeedUpdate = false; - this.uvsNeedUpdate = false; - this.groupsNeedUpdate = false; - - } - - computeGroups( geometry ) { - - const groups = []; - - let group, i; - let materialIndex = undefined; - - const faces = geometry.faces; - - for ( i = 0; i < faces.length; i ++ ) { - - const face = faces[ i ]; - - // materials - - if ( face.materialIndex !== materialIndex ) { - - materialIndex = face.materialIndex; - - if ( group !== undefined ) { - - group.count = ( i * 3 ) - group.start; - groups.push( group ); - - } - - group = { - start: i * 3, - materialIndex: materialIndex - }; - - } - - } - - if ( group !== undefined ) { - - group.count = ( i * 3 ) - group.start; - groups.push( group ); - - } - - this.groups = groups; - - } - - fromGeometry( geometry ) { - - const faces = geometry.faces; - const vertices = geometry.vertices; - const faceVertexUvs = geometry.faceVertexUvs; - - const hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0; - const hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0; - - // morphs - - const morphTargets = geometry.morphTargets; - const morphTargetsLength = morphTargets.length; - - let morphTargetsPosition; - - if ( morphTargetsLength > 0 ) { - - morphTargetsPosition = []; - - for ( let i = 0; i < morphTargetsLength; i ++ ) { - - morphTargetsPosition[ i ] = { - name: morphTargets[ i ].name, - data: [] - }; - - } - - this.morphTargets.position = morphTargetsPosition; - - } - - const morphNormals = geometry.morphNormals; - const morphNormalsLength = morphNormals.length; - - let morphTargetsNormal; - - if ( morphNormalsLength > 0 ) { - - morphTargetsNormal = []; - - for ( let i = 0; i < morphNormalsLength; i ++ ) { - - morphTargetsNormal[ i ] = { - name: morphNormals[ i ].name, - data: [] - }; - - } - - this.morphTargets.normal = morphTargetsNormal; - - } - - // skins - - const skinIndices = geometry.skinIndices; - const skinWeights = geometry.skinWeights; - - const hasSkinIndices = skinIndices.length === vertices.length; - const hasSkinWeights = skinWeights.length === vertices.length; - - // - - if ( vertices.length > 0 && faces.length === 0 ) { - - console.error( 'THREE.DirectGeometry: Faceless geometries are not supported.' ); - - } - - for ( let i = 0; i < faces.length; i ++ ) { - - const face = faces[ i ]; - - this.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] ); - - const vertexNormals = face.vertexNormals; - - if ( vertexNormals.length === 3 ) { - - this.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] ); - - } else { - - const normal = face.normal; - - this.normals.push( normal, normal, normal ); - - } - - const vertexColors = face.vertexColors; - - if ( vertexColors.length === 3 ) { - - this.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] ); - - } else { - - const color = face.color; - - this.colors.push( color, color, color ); - - } - - if ( hasFaceVertexUv === true ) { - - const vertexUvs = faceVertexUvs[ 0 ][ i ]; - - if ( vertexUvs !== undefined ) { - - this.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] ); - - } else { - - console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i ); - - this.uvs.push( new Vector2(), new Vector2(), new Vector2() ); - - } - - } - - if ( hasFaceVertexUv2 === true ) { - - const vertexUvs = faceVertexUvs[ 1 ][ i ]; - - if ( vertexUvs !== undefined ) { - - this.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] ); - - } else { - - console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i ); - - this.uvs2.push( new Vector2(), new Vector2(), new Vector2() ); - - } - - } - - // morphs - - for ( let j = 0; j < morphTargetsLength; j ++ ) { - - const morphTarget = morphTargets[ j ].vertices; - - morphTargetsPosition[ j ].data.push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] ); - - } - - for ( let j = 0; j < morphNormalsLength; j ++ ) { - - const morphNormal = morphNormals[ j ].vertexNormals[ i ]; - - morphTargetsNormal[ j ].data.push( morphNormal.a, morphNormal.b, morphNormal.c ); - - } - - // skins - - if ( hasSkinIndices ) { - - this.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] ); - - } - - if ( hasSkinWeights ) { - - this.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] ); - - } - - } - - this.computeGroups( geometry ); - - this.verticesNeedUpdate = geometry.verticesNeedUpdate; - this.normalsNeedUpdate = geometry.normalsNeedUpdate; - this.colorsNeedUpdate = geometry.colorsNeedUpdate; - this.uvsNeedUpdate = geometry.uvsNeedUpdate; - this.groupsNeedUpdate = geometry.groupsNeedUpdate; - - if ( geometry.boundingSphere !== null ) { - - this.boundingSphere = geometry.boundingSphere.clone(); - - } - - if ( geometry.boundingBox !== null ) { - - this.boundingBox = geometry.boundingBox.clone(); - - } - - return this; - - } - - } - - function arrayMax( array ) { - - if ( array.length === 0 ) return - Infinity; - - let max = array[ 0 ]; - - for ( let i = 1, l = array.length; i < l; ++ i ) { - - if ( array[ i ] > max ) max = array[ i ]; - - } - - return max; - - } - - const TYPED_ARRAYS = { - Int8Array: Int8Array, - Uint8Array: Uint8Array, - // Workaround for IE11 pre KB2929437. See #11440 - Uint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array, - Int16Array: Int16Array, - Uint16Array: Uint16Array, - Int32Array: Int32Array, - Uint32Array: Uint32Array, - Float32Array: Float32Array, - Float64Array: Float64Array - }; - - function getTypedArray( type, buffer ) { - - return new TYPED_ARRAYS[ type ]( buffer ); - - } - - let _bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id - - const _m1$2 = new Matrix4(); - const _obj = new Object3D(); - const _offset = new Vector3(); - const _box$2 = new Box3(); - const _boxMorphTargets = new Box3(); - const _vector$4 = new Vector3(); - - function BufferGeometry() { - - Object.defineProperty( this, 'id', { value: _bufferGeometryId += 2 } ); - - this.uuid = MathUtils.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 = {}; - - } - - BufferGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { - - constructor: BufferGeometry, - - isBufferGeometry: true, - - getIndex: function () { - - return this.index; - - }, - - setIndex: function ( index ) { - - if ( Array.isArray( index ) ) { - - this.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 ); - - } else { - - this.index = index; - - } - - return this; - - }, - - getAttribute: function ( name ) { - - return this.attributes[ name ]; - - }, - - setAttribute: function ( name, attribute ) { - - this.attributes[ name ] = attribute; - - return this; - - }, - - deleteAttribute: function ( name ) { - - delete this.attributes[ name ]; - - return this; - - }, - - hasAttribute: function ( name ) { - - return this.attributes[ name ] !== undefined; - - }, - - addGroup: function ( start, count, materialIndex = 0 ) { - - this.groups.push( { - - start: start, - count: count, - materialIndex: materialIndex - - } ); - - }, - - clearGroups: function () { - - this.groups = []; - - }, - - setDrawRange: function ( start, count ) { - - this.drawRange.start = start; - this.drawRange.count = count; - - }, - - applyMatrix4: function ( 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; - - }, - - rotateX: function ( angle ) { - - // rotate geometry around world x-axis - - _m1$2.makeRotationX( angle ); - - this.applyMatrix4( _m1$2 ); - - return this; - - }, - - rotateY: function ( angle ) { - - // rotate geometry around world y-axis - - _m1$2.makeRotationY( angle ); - - this.applyMatrix4( _m1$2 ); - - return this; - - }, - - rotateZ: function ( angle ) { - - // rotate geometry around world z-axis - - _m1$2.makeRotationZ( angle ); - - this.applyMatrix4( _m1$2 ); - - return this; - - }, - - translate: function ( x, y, z ) { - - // translate geometry - - _m1$2.makeTranslation( x, y, z ); - - this.applyMatrix4( _m1$2 ); - - return this; - - }, - - scale: function ( x, y, z ) { - - // scale geometry - - _m1$2.makeScale( x, y, z ); - - this.applyMatrix4( _m1$2 ); - - return this; - - }, - - lookAt: function ( vector ) { - - _obj.lookAt( vector ); - - _obj.updateMatrix(); - - this.applyMatrix4( _obj.matrix ); - - return this; - - }, - - center: function () { - - this.computeBoundingBox(); - - this.boundingBox.getCenter( _offset ).negate(); - - this.translate( _offset.x, _offset.y, _offset.z ); - - return this; - - }, - - setFromObject: function ( object ) { - - // console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this ); - - const geometry = object.geometry; - - if ( object.isPoints || object.isLine ) { - - const positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 ); - const colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 ); - - this.setAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) ); - this.setAttribute( 'color', colors.copyColorsArray( geometry.colors ) ); - - if ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) { - - const lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 ); - - this.setAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) ); - - } - - if ( geometry.boundingSphere !== null ) { - - this.boundingSphere = geometry.boundingSphere.clone(); - - } - - if ( geometry.boundingBox !== null ) { - - this.boundingBox = geometry.boundingBox.clone(); - - } - - } else if ( object.isMesh ) { - - if ( geometry && geometry.isGeometry ) { - - this.fromGeometry( geometry ); - - } - - } - - return this; - - }, - - setFromPoints: function ( 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; - - }, - - updateFromObject: function ( object ) { - - let geometry = object.geometry; - - if ( object.isMesh ) { - - let direct = geometry.__directGeometry; - - if ( geometry.elementsNeedUpdate === true ) { - - direct = undefined; - geometry.elementsNeedUpdate = false; - - } - - if ( direct === undefined ) { - - return this.fromGeometry( geometry ); - - } - - direct.verticesNeedUpdate = geometry.verticesNeedUpdate; - direct.normalsNeedUpdate = geometry.normalsNeedUpdate; - direct.colorsNeedUpdate = geometry.colorsNeedUpdate; - direct.uvsNeedUpdate = geometry.uvsNeedUpdate; - direct.groupsNeedUpdate = geometry.groupsNeedUpdate; - - geometry.verticesNeedUpdate = false; - geometry.normalsNeedUpdate = false; - geometry.colorsNeedUpdate = false; - geometry.uvsNeedUpdate = false; - geometry.groupsNeedUpdate = false; - - geometry = direct; - - } - - if ( geometry.verticesNeedUpdate === true ) { - - const attribute = this.attributes.position; - - if ( attribute !== undefined ) { - - attribute.copyVector3sArray( geometry.vertices ); - attribute.needsUpdate = true; - - } - - geometry.verticesNeedUpdate = false; - - } - - if ( geometry.normalsNeedUpdate === true ) { - - const attribute = this.attributes.normal; - - if ( attribute !== undefined ) { - - attribute.copyVector3sArray( geometry.normals ); - attribute.needsUpdate = true; - - } - - geometry.normalsNeedUpdate = false; - - } - - if ( geometry.colorsNeedUpdate === true ) { - - const attribute = this.attributes.color; - - if ( attribute !== undefined ) { - - attribute.copyColorsArray( geometry.colors ); - attribute.needsUpdate = true; - - } - - geometry.colorsNeedUpdate = false; - - } - - if ( geometry.uvsNeedUpdate ) { - - const attribute = this.attributes.uv; - - if ( attribute !== undefined ) { - - attribute.copyVector2sArray( geometry.uvs ); - attribute.needsUpdate = true; - - } - - geometry.uvsNeedUpdate = false; - - } - - if ( geometry.lineDistancesNeedUpdate ) { - - const attribute = this.attributes.lineDistance; - - if ( attribute !== undefined ) { - - attribute.copyArray( geometry.lineDistances ); - attribute.needsUpdate = true; - - } - - geometry.lineDistancesNeedUpdate = false; - - } - - if ( geometry.groupsNeedUpdate ) { - - geometry.computeGroups( object.geometry ); - this.groups = geometry.groups; - - geometry.groupsNeedUpdate = false; - - } - - return this; - - }, - - fromGeometry: function ( geometry ) { - - geometry.__directGeometry = new DirectGeometry().fromGeometry( geometry ); - - return this.fromDirectGeometry( geometry.__directGeometry ); - - }, - - fromDirectGeometry: function ( geometry ) { - - const positions = new Float32Array( geometry.vertices.length * 3 ); - this.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) ); - - if ( geometry.normals.length > 0 ) { - - const normals = new Float32Array( geometry.normals.length * 3 ); - this.setAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) ); - - } - - if ( geometry.colors.length > 0 ) { - - const colors = new Float32Array( geometry.colors.length * 3 ); - this.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) ); - - } - - if ( geometry.uvs.length > 0 ) { - - const uvs = new Float32Array( geometry.uvs.length * 2 ); - this.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) ); - - } - - if ( geometry.uvs2.length > 0 ) { - - const uvs2 = new Float32Array( geometry.uvs2.length * 2 ); - this.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) ); - - } - - // groups - - this.groups = geometry.groups; - - // morphs - - for ( const name in geometry.morphTargets ) { - - const array = []; - const morphTargets = geometry.morphTargets[ name ]; - - for ( let i = 0, l = morphTargets.length; i < l; i ++ ) { - - const morphTarget = morphTargets[ i ]; - - const attribute = new Float32BufferAttribute( morphTarget.data.length * 3, 3 ); - attribute.name = morphTarget.name; - - array.push( attribute.copyVector3sArray( morphTarget.data ) ); - - } - - this.morphAttributes[ name ] = array; - - } - - // skinning - - if ( geometry.skinIndices.length > 0 ) { - - const skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 ); - this.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) ); - - } - - if ( geometry.skinWeights.length > 0 ) { - - const skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 ); - this.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) ); - - } - - // - - if ( geometry.boundingSphere !== null ) { - - this.boundingSphere = geometry.boundingSphere.clone(); - - } - - if ( geometry.boundingBox !== null ) { - - this.boundingBox = geometry.boundingBox.clone(); - - } - - return this; - - }, - - computeBoundingBox: function () { - - 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. Alternatively set "mesh.frustumCulled" to "false".', 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$4.addVectors( this.boundingBox.min, _box$2.min ); - this.boundingBox.expandByPoint( _vector$4 ); - - _vector$4.addVectors( this.boundingBox.max, _box$2.max ); - this.boundingBox.expandByPoint( _vector$4 ); - - } 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: function () { - - 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. Alternatively set "mesh.frustumCulled" to "false".', 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$4.addVectors( _box$2.min, _boxMorphTargets.min ); - _box$2.expandByPoint( _vector$4 ); - - _vector$4.addVectors( _box$2.max, _boxMorphTargets.max ); - _box$2.expandByPoint( _vector$4 ); - - } 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$4.fromBufferAttribute( position, i ); - - maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) ); - - } - - // 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$4.fromBufferAttribute( morphAttribute, j ); - - if ( morphTargetsRelative ) { - - _offset.fromBufferAttribute( position, j ); - _vector$4.add( _offset ); - - } - - maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) ); - - } - - } - - } - - 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 ); - - } - - } - - }, - - computeFaceNormals: function () { - - // backwards compatibility - - }, - - computeVertexNormals: function () { - - 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; - - } - - }, - - merge: function ( geometry, offset ) { - - if ( ! ( geometry && geometry.isBufferGeometry ) ) { - - console.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry ); - return; - - } - - if ( offset === undefined ) { - - offset = 0; - - console.warn( - 'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. ' - + 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.' - ); - - } - - const attributes = this.attributes; - - for ( const key in attributes ) { - - if ( geometry.attributes[ key ] === undefined ) continue; - - const attribute1 = attributes[ key ]; - const attributeArray1 = attribute1.array; - - const attribute2 = geometry.attributes[ key ]; - const attributeArray2 = attribute2.array; - - const attributeOffset = attribute2.itemSize * offset; - const length = Math.min( attributeArray2.length, attributeArray1.length - attributeOffset ); - - for ( let i = 0, j = attributeOffset; i < length; i ++, j ++ ) { - - attributeArray1[ j ] = attributeArray2[ i ]; - - } - - } - - return this; - - }, - - normalizeNormals: function () { - - const normals = this.attributes.normal; - - for ( let i = 0, il = normals.count; i < il; i ++ ) { - - _vector$4.fromBufferAttribute( normals, i ); - - _vector$4.normalize(); - - normals.setXYZ( i, _vector$4.x, _vector$4.y, _vector$4.z ); - - } - - }, - - toNonIndexed: function () { - - 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 ++ ) { - - 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(): Geometry 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: function () { - - const data = { - metadata: { - version: 4.5, - 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; - - } - - 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 ]; - - const attributeData = attribute.toJSON( data.data ); - - if ( attribute.name !== '' ) attributeData.name = attribute.name; - - data.data.attributes[ key ] = attributeData; - - } - - 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 ]; - - const attributeData = attribute.toJSON( data.data ); - - if ( attribute.name !== '' ) attributeData.name = attribute.name; - - array.push( attributeData ); - - } - - 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: function () { - - /* - // Handle primitives - - const parameters = this.parameters; - - if ( parameters !== undefined ) { - - const values = []; - - for ( const key in parameters ) { - - values.push( parameters[ key ] ); - - } - - const geometry = Object.create( this.constructor.prototype ); - this.constructor.apply( geometry, values ); - return geometry; - - } - - return new this.constructor().copy( this ); - */ - - return new BufferGeometry().copy( this ); - - }, - - copy: function ( 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: function () { - - this.dispatchEvent( { type: 'dispose' } ); - - } - - } ); - - const _inverseMatrix = new Matrix4(); - const _ray = new Ray(); - const _sphere = new Sphere(); - - const _vA = new Vector3(); - const _vB = new Vector3(); - const _vC = new Vector3(); - - const _tempA = new Vector3(); - const _tempB = new Vector3(); - const _tempC = new Vector3(); - - const _morphA = new Vector3(); - const _morphB = new Vector3(); - const _morphC = new Vector3(); - - const _uvA = new Vector2(); - const _uvB = new Vector2(); - const _uvC = new Vector2(); - - const _intersectionPoint = new Vector3(); - const _intersectionPointWorld = new Vector3(); - - function Mesh( geometry, material ) { - - Object3D.call( this ); - - this.type = 'Mesh'; - - this.geometry = geometry !== undefined ? geometry : new BufferGeometry(); - this.material = material !== undefined ? material : new MeshBasicMaterial(); - - this.updateMorphTargets(); - - } - - Mesh.prototype = Object.assign( Object.create( Object3D.prototype ), { - - constructor: Mesh, - - isMesh: true, - - copy: function ( source ) { - - Object3D.prototype.copy.call( this, source ); - - if ( source.morphTargetInfluences !== undefined ) { - - this.morphTargetInfluences = source.morphTargetInfluences.slice(); - - } - - if ( source.morphTargetDictionary !== undefined ) { - - this.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary ); - - } - - this.material = source.material; - this.geometry = source.geometry; - - return this; - - }, - - updateMorphTargets: function () { - - const geometry = this.geometry; - - if ( geometry.isBufferGeometry ) { - - 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; - - } - - } - - } - - } else { - - const morphTargets = geometry.morphTargets; - - if ( morphTargets !== undefined && morphTargets.length > 0 ) { - - console.error( 'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' ); - - } - - } - - }, - - raycast: function ( raycaster, intersects ) { - - const geometry = this.geometry; - const material = this.material; - const matrixWorld = this.matrixWorld; - - if ( material === undefined ) return; - - // Checking boundingSphere distance to ray - - if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); - - _sphere.copy( geometry.boundingSphere ); - _sphere.applyMatrix4( matrixWorld ); - - if ( raycaster.ray.intersectsSphere( _sphere ) === false ) return; - - // - - _inverseMatrix.copy( matrixWorld ).invert(); - _ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix ); - - // Check boundingBox before continuing - - if ( geometry.boundingBox !== null ) { - - if ( _ray.intersectsBox( geometry.boundingBox ) === false ) return; - - } - - let intersection; - - if ( geometry.isBufferGeometry ) { - - const index = geometry.index; - const position = geometry.attributes.position; - const morphPosition = geometry.morphAttributes.position; - const morphTargetsRelative = geometry.morphTargetsRelative; - const uv = geometry.attributes.uv; - const uv2 = geometry.attributes.uv2; - 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( ( 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 = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, 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 = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, 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( ( 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 = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, 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 = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ); - - if ( intersection ) { - - intersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics - intersects.push( intersection ); - - } - - } - - } - - } - - } else if ( geometry.isGeometry ) { - - const isMultiMaterial = Array.isArray( material ); - - const vertices = geometry.vertices; - const faces = geometry.faces; - let uvs; - - const faceVertexUvs = geometry.faceVertexUvs[ 0 ]; - if ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs; - - for ( let f = 0, fl = faces.length; f < fl; f ++ ) { - - const face = faces[ f ]; - const faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material; - - if ( faceMaterial === undefined ) continue; - - const fvA = vertices[ face.a ]; - const fvB = vertices[ face.b ]; - const fvC = vertices[ face.c ]; - - intersection = checkIntersection( this, faceMaterial, raycaster, _ray, fvA, fvB, fvC, _intersectionPoint ); - - if ( intersection ) { - - if ( uvs && uvs[ f ] ) { - - const uvs_f = uvs[ f ]; - _uvA.copy( uvs_f[ 0 ] ); - _uvB.copy( uvs_f[ 1 ] ); - _uvC.copy( uvs_f[ 2 ] ); - - intersection.uv = Triangle.getUV( _intersectionPoint, fvA, fvB, fvC, _uvA, _uvB, _uvC, new Vector2() ); - - } - - intersection.face = face; - intersection.faceIndex = f; - intersects.push( intersection ); - - } - - } - - } - - } - - } ); - - function checkIntersection( 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 !== DoubleSide, 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 checkBufferGeometryIntersection( object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ) { - - _vA.fromBufferAttribute( position, a ); - _vB.fromBufferAttribute( position, b ); - _vC.fromBufferAttribute( position, c ); - - const morphInfluences = object.morphTargetInfluences; - - if ( material.morphTargets && morphPosition && morphInfluences ) { - - _morphA.set( 0, 0, 0 ); - _morphB.set( 0, 0, 0 ); - _morphC.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, a ); - _tempB.fromBufferAttribute( morphAttribute, b ); - _tempC.fromBufferAttribute( morphAttribute, c ); - - if ( morphTargetsRelative ) { - - _morphA.addScaledVector( _tempA, influence ); - _morphB.addScaledVector( _tempB, influence ); - _morphC.addScaledVector( _tempC, influence ); - - } else { - - _morphA.addScaledVector( _tempA.sub( _vA ), influence ); - _morphB.addScaledVector( _tempB.sub( _vB ), influence ); - _morphC.addScaledVector( _tempC.sub( _vC ), influence ); - - } - - } - - _vA.add( _morphA ); - _vB.add( _morphB ); - _vC.add( _morphC ); - - } - - if ( object.isSkinnedMesh ) { - - object.boneTransform( a, _vA ); - object.boneTransform( b, _vB ); - object.boneTransform( c, _vC ); - - } - - const intersection = checkIntersection( object, material, raycaster, ray, _vA, _vB, _vC, _intersectionPoint ); - - if ( intersection ) { - - if ( uv ) { - - _uvA.fromBufferAttribute( uv, a ); - _uvB.fromBufferAttribute( uv, b ); - _uvC.fromBufferAttribute( uv, c ); - - intersection.uv = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ); - - } - - if ( uv2 ) { - - _uvA.fromBufferAttribute( uv2, a ); - _uvB.fromBufferAttribute( uv2, b ); - _uvC.fromBufferAttribute( uv2, c ); - - intersection.uv2 = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ); - - } - - const face = new Face3( a, b, c ); - Triangle.getNormal( _vA, _vB, _vC, face.normal ); - - intersection.face = face; - - } - - return intersection; - - } - - class BoxBufferGeometry extends BufferGeometry { - - constructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) { - - super(); - - this.type = 'BoxBufferGeometry'; - - 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; - - } - - } - - } - - /** - * 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 ) ) { - - 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; - - } - - // 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}"; - - /** - * parameters = { - * defines: { "label" : "value" }, - * uniforms: { "parameter1": { value: 1.0 }, "parameter2": { value2: 2 } }, - * - * fragmentShader: , - * vertexShader: , - * - * wireframe: , - * wireframeLinewidth: , - * - * lights: , - * - * skinning: , - * morphTargets: , - * morphNormals: - * } - */ - - function ShaderMaterial( parameters ) { - - Material.call( this ); - - this.type = 'ShaderMaterial'; - - this.defines = {}; - this.uniforms = {}; - - 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.skinning = false; // set to use skinning attribute streams - this.morphTargets = false; // set to use morph targets - this.morphNormals = false; // set to use morph normals - - this.extensions = { - derivatives: false, // set to use derivatives - fragDepth: false, // set to use fragment depth values - drawBuffers: false, // set to use draw buffers - shaderTextureLOD: false // set to use shader texture LOD - }; - - // 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 ], - 'uv2': [ 0, 0 ] - }; - - this.index0AttributeName = undefined; - this.uniformsNeedUpdate = false; - - this.glslVersion = null; - - if ( parameters !== undefined ) { - - if ( parameters.attributes !== undefined ) { - - console.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' ); - - } - - this.setValues( parameters ); - - } - - } - - ShaderMaterial.prototype = Object.create( Material.prototype ); - ShaderMaterial.prototype.constructor = ShaderMaterial; - - ShaderMaterial.prototype.isShaderMaterial = true; - - ShaderMaterial.prototype.copy = function ( source ) { - - Material.prototype.copy.call( this, source ); - - this.fragmentShader = source.fragmentShader; - this.vertexShader = source.vertexShader; - - this.uniforms = cloneUniforms( source.uniforms ); - - this.defines = Object.assign( {}, source.defines ); - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - - this.lights = source.lights; - this.clipping = source.clipping; - - this.skinning = source.skinning; - - this.morphTargets = source.morphTargets; - this.morphNormals = source.morphNormals; - - this.extensions = Object.assign( {}, source.extensions ); - - this.glslVersion = source.glslVersion; - - return this; - - }; - - ShaderMaterial.prototype.toJSON = function ( meta ) { - - const data = Material.prototype.toJSON.call( this, 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; - - 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; - - }; - - function Camera() { - - Object3D.call( this ); - - this.type = 'Camera'; - - this.matrixWorldInverse = new Matrix4(); - - this.projectionMatrix = new Matrix4(); - this.projectionMatrixInverse = new Matrix4(); - - } - - Camera.prototype = Object.assign( Object.create( Object3D.prototype ), { - - constructor: Camera, - - isCamera: true, - - copy: function ( source, recursive ) { - - Object3D.prototype.copy.call( this, source, recursive ); - - this.matrixWorldInverse.copy( source.matrixWorldInverse ); - - this.projectionMatrix.copy( source.projectionMatrix ); - this.projectionMatrixInverse.copy( source.projectionMatrixInverse ); - - return this; - - }, - - getWorldDirection: function ( target ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Camera: .getWorldDirection() target is now required' ); - target = new Vector3(); - - } - - this.updateWorldMatrix( true, false ); - - const e = this.matrixWorld.elements; - - return target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize(); - - }, - - updateMatrixWorld: function ( force ) { - - Object3D.prototype.updateMatrixWorld.call( this, force ); - - this.matrixWorldInverse.copy( this.matrixWorld ).invert(); - - }, - - updateWorldMatrix: function ( updateParents, updateChildren ) { - - Object3D.prototype.updateWorldMatrix.call( this, updateParents, updateChildren ); - - this.matrixWorldInverse.copy( this.matrixWorld ).invert(); - - }, - - clone: function () { - - return new this.constructor().copy( this ); - - } - - } ); - - function PerspectiveCamera( fov = 50, aspect = 1, near = 0.1, far = 2000 ) { - - Camera.call( this ); - - 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(); - - } - - PerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), { - - constructor: PerspectiveCamera, - - isPerspectiveCamera: true, - - copy: function ( source, recursive ) { - - Camera.prototype.copy.call( this, 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: function ( focalLength ) { - - // see http://www.bobatkins.com/photography/technical/field_of_view.html - const vExtentSlope = 0.5 * this.getFilmHeight() / focalLength; - - this.fov = MathUtils.RAD2DEG * 2 * Math.atan( vExtentSlope ); - this.updateProjectionMatrix(); - - }, - - /** - * Calculates the focal length from the current .fov and .filmGauge. - */ - getFocalLength: function () { - - const vExtentSlope = Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov ); - - return 0.5 * this.getFilmHeight() / vExtentSlope; - - }, - - getEffectiveFOV: function () { - - return MathUtils.RAD2DEG * 2 * Math.atan( - Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov ) / this.zoom ); - - }, - - getFilmWidth: function () { - - // film not completely covered in portrait format (aspect < 1) - return this.filmGauge * Math.min( this.aspect, 1 ); - - }, - - getFilmHeight: function () { - - // film not completely covered in landscape format (aspect > 1) - return this.filmGauge / Math.max( this.aspect, 1 ); - - }, - - /** - * 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: function ( 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: function () { - - if ( this.view !== null ) { - - this.view.enabled = false; - - } - - this.updateProjectionMatrix(); - - }, - - updateProjectionMatrix: function () { - - const near = this.near; - let top = near * Math.tan( MathUtils.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.projectionMatrixInverse.copy( this.projectionMatrix ).invert(); - - }, - - toJSON: function ( meta ) { - - const data = Object3D.prototype.toJSON.call( this, 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, aspect = 1; - - function CubeCamera( near, far, renderTarget ) { - - Object3D.call( this ); - - this.type = 'CubeCamera'; - - if ( renderTarget.isWebGLCubeRenderTarget !== true ) { - - console.error( 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.' ); - return; - - } - - this.renderTarget = renderTarget; - - const cameraPX = new PerspectiveCamera( fov, aspect, near, far ); - cameraPX.layers = this.layers; - cameraPX.up.set( 0, - 1, 0 ); - cameraPX.lookAt( new Vector3( 1, 0, 0 ) ); - this.add( cameraPX ); - - const cameraNX = new PerspectiveCamera( fov, aspect, near, far ); - cameraNX.layers = this.layers; - cameraNX.up.set( 0, - 1, 0 ); - cameraNX.lookAt( new Vector3( - 1, 0, 0 ) ); - this.add( cameraNX ); - - const cameraPY = new PerspectiveCamera( fov, aspect, near, far ); - cameraPY.layers = this.layers; - cameraPY.up.set( 0, 0, 1 ); - cameraPY.lookAt( new Vector3( 0, 1, 0 ) ); - this.add( cameraPY ); - - const cameraNY = new PerspectiveCamera( fov, aspect, near, far ); - cameraNY.layers = this.layers; - cameraNY.up.set( 0, 0, - 1 ); - cameraNY.lookAt( new Vector3( 0, - 1, 0 ) ); - this.add( cameraNY ); - - const cameraPZ = new PerspectiveCamera( fov, aspect, near, far ); - cameraPZ.layers = this.layers; - cameraPZ.up.set( 0, - 1, 0 ); - cameraPZ.lookAt( new Vector3( 0, 0, 1 ) ); - this.add( cameraPZ ); - - const cameraNZ = new PerspectiveCamera( fov, aspect, near, far ); - cameraNZ.layers = this.layers; - cameraNZ.up.set( 0, - 1, 0 ); - cameraNZ.lookAt( new Vector3( 0, 0, - 1 ) ); - this.add( cameraNZ ); - - this.update = function ( renderer, scene ) { - - if ( this.parent === null ) this.updateMatrixWorld(); - - const currentXrEnabled = renderer.xr.enabled; - const currentRenderTarget = renderer.getRenderTarget(); - - renderer.xr.enabled = false; - - const generateMipmaps = renderTarget.texture.generateMipmaps; - - renderTarget.texture.generateMipmaps = false; - - renderer.setRenderTarget( renderTarget, 0 ); - renderer.render( scene, cameraPX ); - - renderer.setRenderTarget( renderTarget, 1 ); - renderer.render( scene, cameraNX ); - - renderer.setRenderTarget( renderTarget, 2 ); - renderer.render( scene, cameraPY ); - - renderer.setRenderTarget( renderTarget, 3 ); - renderer.render( scene, cameraNY ); - - renderer.setRenderTarget( renderTarget, 4 ); - renderer.render( scene, cameraPZ ); - - renderTarget.texture.generateMipmaps = generateMipmaps; - - renderer.setRenderTarget( renderTarget, 5 ); - renderer.render( scene, cameraNZ ); - - renderer.setRenderTarget( currentRenderTarget ); - - renderer.xr.enabled = currentXrEnabled; - - }; - - } - - CubeCamera.prototype = Object.create( Object3D.prototype ); - CubeCamera.prototype.constructor = CubeCamera; - - function CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) { - - images = images !== undefined ? images : []; - mapping = mapping !== undefined ? mapping : CubeReflectionMapping; - format = format !== undefined ? format : RGBFormat; - - Texture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); - - this.flipY = false; - - // Why CubeTexture._needsFlipEnvMap is necessary: - // - // 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 _needsFlipEnvMap controls this conversion. The flip is not required (and thus _needsFlipEnvMap is set to false) - // when using WebGLCubeRenderTarget.texture as a cube texture. - - this._needsFlipEnvMap = true; - - } - - CubeTexture.prototype = Object.create( Texture.prototype ); - CubeTexture.prototype.constructor = CubeTexture; - - CubeTexture.prototype.isCubeTexture = true; - - Object.defineProperty( CubeTexture.prototype, 'images', { - - get: function () { - - return this.image; - - }, - - set: function ( value ) { - - this.image = value; - - } - - } ); - - function WebGLCubeRenderTarget( size, options, dummy ) { - - if ( Number.isInteger( options ) ) { - - console.warn( 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )' ); - - options = dummy; - - } - - WebGLRenderTarget.call( this, size, size, options ); - - options = options || {}; - - this.texture = new CubeTexture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding ); - - this.texture._needsFlipEnvMap = false; - - } - - WebGLCubeRenderTarget.prototype = Object.create( WebGLRenderTarget.prototype ); - WebGLCubeRenderTarget.prototype.constructor = WebGLCubeRenderTarget; - - WebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true; - - WebGLCubeRenderTarget.prototype.fromEquirectangularTexture = function ( renderer, texture ) { - - this.texture.type = texture.type; - this.texture.format = RGBAFormat; // see #18859 - this.texture.encoding = texture.encoding; - - 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 BoxBufferGeometry( 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; - - }; - - WebGLCubeRenderTarget.prototype.clear = function ( 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 ); - - }; - - function DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { - - Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); - - this.image = { data: data || null, width: width || 1, height: height || 1 }; - - this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; - this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; - - this.generateMipmaps = false; - this.flipY = false; - this.unpackAlignment = 1; - - this.needsUpdate = true; - - } - - DataTexture.prototype = Object.create( Texture.prototype ); - DataTexture.prototype.constructor = DataTexture; - - DataTexture.prototype.isDataTexture = true; - - const _sphere$1 = /*@__PURE__*/ new Sphere(); - const _vector$5 = /*@__PURE__*/ new Vector3(); - - class Frustum { - - constructor( p0, p1, p2, p3, p4, p5 ) { - - this.planes = [ - - ( p0 !== undefined ) ? p0 : new Plane(), - ( p1 !== undefined ) ? p1 : new Plane(), - ( p2 !== undefined ) ? p2 : new Plane(), - ( p3 !== undefined ) ? p3 : new Plane(), - ( p4 !== undefined ) ? p4 : new Plane(), - ( p5 !== undefined ) ? p5 : new Plane() - - ]; - - } - - 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; - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - copy( frustum ) { - - const planes = this.planes; - - for ( let i = 0; i < 6; i ++ ) { - - planes[ i ].copy( frustum.planes[ i ] ); - - } - - return this; - - } - - setFromProjectionMatrix( m ) { - - 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(); - planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize(); - - return this; - - } - - intersectsObject( object ) { - - const geometry = object.geometry; - - if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); - - _sphere$1.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld ); - - return this.intersectsSphere( _sphere$1 ); - - } - - intersectsSprite( sprite ) { - - _sphere$1.center.set( 0, 0, 0 ); - _sphere$1.radius = 0.7071067811865476; - _sphere$1.applyMatrix4( sprite.matrixWorld ); - - return this.intersectsSphere( _sphere$1 ); - - } - - 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$5.x = plane.normal.x > 0 ? box.max.x : box.min.x; - _vector$5.y = plane.normal.y > 0 ? box.max.y : box.min.y; - _vector$5.z = plane.normal.z > 0 ? box.max.z : box.min.z; - - if ( plane.distanceToPoint( _vector$5 ) < 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; - - } - - } - - 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, capabilities ) { - - const isWebGL2 = capabilities.isWebGL2; - - const buffers = new WeakMap(); - - function createBuffer( attribute, bufferType ) { - - const array = attribute.array; - const usage = attribute.usage; - - const buffer = gl.createBuffer(); - - gl.bindBuffer( bufferType, buffer ); - gl.bufferData( bufferType, array, usage ); - - attribute.onUploadCallback(); - - let type = 5126; - - if ( array instanceof Float32Array ) { - - type = 5126; - - } else if ( array instanceof Float64Array ) { - - console.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' ); - - } else if ( array instanceof Uint16Array ) { - - if ( attribute.isFloat16BufferAttribute ) { - - if ( isWebGL2 ) { - - type = 5131; - - } else { - - console.warn( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' ); - - } - - } else { - - type = 5123; - - } - - } else if ( array instanceof Int16Array ) { - - type = 5122; - - } else if ( array instanceof Uint32Array ) { - - type = 5125; - - } else if ( array instanceof Int32Array ) { - - type = 5124; - - } else if ( array instanceof Int8Array ) { - - type = 5120; - - } else if ( array instanceof Uint8Array ) { - - type = 5121; - - } - - return { - buffer: buffer, - type: type, - bytesPerElement: array.BYTES_PER_ELEMENT, - version: attribute.version - }; - - } - - function updateBuffer( buffer, attribute, bufferType ) { - - const array = attribute.array; - const updateRange = attribute.updateRange; - - gl.bindBuffer( bufferType, buffer ); - - if ( updateRange.count === - 1 ) { - - // Not using update ranges - - gl.bufferSubData( bufferType, 0, array ); - - } else { - - if ( isWebGL2 ) { - - gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, - array, updateRange.offset, updateRange.count ); - - } else { - - gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, - array.subarray( updateRange.offset, updateRange.offset + updateRange.count ) ); - - } - - updateRange.count = - 1; // reset range - - } - - } - - // - - 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 ) { - - updateBuffer( data.buffer, attribute, bufferType ); - - data.version = attribute.version; - - } - - } - - return { - - get: get, - remove: remove, - update: update - - }; - - } - - class PlaneBufferGeometry extends BufferGeometry { - - constructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) { - - super(); - this.type = 'PlaneBufferGeometry'; - - 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 ) ); - - } - - } - - var alphamap_fragment = "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif"; - - var alphamap_pars_fragment = "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif"; - - var alphatest_fragment = "#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif"; - - var aomap_fragment = "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif"; - - var aomap_pars_fragment = "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif"; - - var begin_vertex = "vec3 transformed = vec3( position );"; - - var beginnormal_vertex = "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif"; - - var bsdfs = "vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\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\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_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}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * 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}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat 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_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\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( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\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 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\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#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif"; - - 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 = "#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif"; - - var color_pars_fragment = "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif"; - - var color_pars_vertex = "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif"; - - var color_vertex = "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\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; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\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 max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\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};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\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}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\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 linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.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}"; - - var cube_uv_reflection_fragment = "#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.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\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\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\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + 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 ), m0, cubeUV_maxMipLevel );\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_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif"; - - 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, vUv ).x * displacementScale + displacementBias );\n#endif"; - - var emissivemap_fragment = "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif"; - - var emissivemap_pars_fragment = "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif"; - - var encodings_fragment = "gl_FragColor = linearToOutputTexel( gl_FragColor );"; - - var encodings_pars_fragment = "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( 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 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\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, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\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 int maxMipLevel;\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 )\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 )\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\tfogDepth = - mvPosition.z;\n#endif"; - - var fog_pars_vertex = "#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif"; - - var fog_fragment = "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\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 fogDepth;\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 texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}"; - - var lightmap_fragment = "#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif"; - - var lightmap_pars_fragment = "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif"; - - var lights_lambert_vertex = "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif"; - - var lights_pars_begin = "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\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 GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\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 getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.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 getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.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 getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.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 GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif"; - - var envmap_physical_pars_fragment = "#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif"; - - var lights_toon_fragment = "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;"; - - var lights_toon_pars_fragment = "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)"; - - 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;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\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 GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)"; - - var lights_physical_fragment = "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).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_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif"; - - var lights_physical_pars_fragment = "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\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.specularRoughness;\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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * 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 = "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\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\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( 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, geometry, 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\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\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, 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\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( 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, geometry, 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, geometry, 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\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\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 ], geometry );\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, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif"; - - var lights_fragment_end = "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif"; - - var logdepthbuf_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif"; - - var logdepthbuf_pars_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif"; - - var logdepthbuf_pars_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif"; - - var logdepthbuf_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif"; - - var map_fragment = "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\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\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif"; - - var map_particle_pars_fragment = "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\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, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif"; - - var metalnessmap_pars_fragment = "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif"; - - var morphnormal_vertex = "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif"; - - var morphtarget_pars_vertex = "#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif"; - - var morphtarget_vertex = "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif"; - - var normal_fragment_begin = "#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;"; - - var normal_fragment_maps = "#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).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 * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif"; - - var normalmap_pars_fragment = "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif"; - - var clearcoat_normal_fragment_begin = "#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif"; - - var clearcoat_normal_fragment_maps = "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif"; - - var clearcoat_pars_fragment = "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif"; - - 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}\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 linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( 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 invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - 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_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, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif"; - - var roughnessmap_pars_fragment = "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif"; - - var shadowmap_pars_fragment = "#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\tvarying vec4 vSpotShadowCoord[ 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\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif"; - - var shadowmap_pars_vertex = "#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\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ 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 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 = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\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, vSpotShadowCoord[ 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\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\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, vUv );\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 toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }"; - - var transmissionmap_fragment = "#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif"; - - var transmissionmap_pars_fragment = "#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif"; - - var uv_pars_fragment = "#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif"; - - var uv_pars_vertex = "#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif"; - - var uv_vertex = "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif"; - - var uv2_pars_fragment = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif"; - - var uv2_pars_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif"; - - var uv2_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif"; - - var worldpos_vertex = "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif"; - - var background_frag = "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}"; - - var background_vert = "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}"; - - var cube_frag = "#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}"; - - var cube_vert = "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}"; - - var depth_frag = "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\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\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}"; - - var depth_vert = "#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#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}"; - - var distanceRGBA_frag = "#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 \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\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}"; - - var distanceRGBA_vert = "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\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}"; - - var equirect_frag = "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}"; - - var equirect_vert = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}"; - - var linedashed_frag = "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 \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - var linedashed_vert = "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\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}"; - - var meshbasic_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - var meshbasic_vert = "#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#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\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 \n}"; - - var meshlambert_frag = "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - var meshlambert_vert = "#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#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#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\t#include \n\t#include \n\t#include \n\t#include \n}"; - - var meshmatcap_frag = "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - var meshmatcap_vert = "#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\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#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\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\tvViewPosition = - mvPosition.xyz;\n}"; - - var meshtoon_frag = "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \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\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - var meshtoon_vert = "#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#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#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}"; - - var meshphong_frag = "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \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\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - var meshphong_vert = "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#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#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - var meshphysical_frag = "#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#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\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\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 \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\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - var meshphysical_vert = "#define STANDARD\nvarying vec3 vViewPosition;\n#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\n#include \n#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#include \n\t#include \n\t#include \n#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\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}"; - - var normal_frag = "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#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\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\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}"; - - var normal_vert = "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#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\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#include \n#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\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}"; - - var points_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - var points_vert = "uniform float size;\nuniform float scale;\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\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}"; - - var shadow_frag = "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}"; - - var shadow_vert = "#include \n#include \n#include \nvoid main() {\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}"; - - var sprite_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}"; - - var sprite_vert = "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"; - - const ShaderChunk = { - alphamap_fragment: alphamap_fragment, - alphamap_pars_fragment: alphamap_pars_fragment, - alphatest_fragment: alphatest_fragment, - aomap_fragment: aomap_fragment, - aomap_pars_fragment: aomap_pars_fragment, - begin_vertex: begin_vertex, - beginnormal_vertex: beginnormal_vertex, - bsdfs: bsdfs, - bumpmap_pars_fragment: bumpmap_pars_fragment, - clipping_planes_fragment: clipping_planes_fragment, - clipping_planes_pars_fragment: clipping_planes_pars_fragment, - clipping_planes_pars_vertex: clipping_planes_pars_vertex, - clipping_planes_vertex: clipping_planes_vertex, - color_fragment: color_fragment, - color_pars_fragment: color_pars_fragment, - color_pars_vertex: color_pars_vertex, - color_vertex: color_vertex, - common: common, - cube_uv_reflection_fragment: cube_uv_reflection_fragment, - defaultnormal_vertex: defaultnormal_vertex, - displacementmap_pars_vertex: displacementmap_pars_vertex, - displacementmap_vertex: displacementmap_vertex, - emissivemap_fragment: emissivemap_fragment, - emissivemap_pars_fragment: emissivemap_pars_fragment, - encodings_fragment: encodings_fragment, - encodings_pars_fragment: encodings_pars_fragment, - envmap_fragment: envmap_fragment, - envmap_common_pars_fragment: envmap_common_pars_fragment, - envmap_pars_fragment: envmap_pars_fragment, - envmap_pars_vertex: envmap_pars_vertex, - envmap_physical_pars_fragment: envmap_physical_pars_fragment, - envmap_vertex: envmap_vertex, - fog_vertex: fog_vertex, - fog_pars_vertex: fog_pars_vertex, - fog_fragment: fog_fragment, - fog_pars_fragment: fog_pars_fragment, - gradientmap_pars_fragment: gradientmap_pars_fragment, - lightmap_fragment: lightmap_fragment, - lightmap_pars_fragment: lightmap_pars_fragment, - lights_lambert_vertex: lights_lambert_vertex, - lights_pars_begin: lights_pars_begin, - lights_toon_fragment: lights_toon_fragment, - lights_toon_pars_fragment: lights_toon_pars_fragment, - lights_phong_fragment: lights_phong_fragment, - lights_phong_pars_fragment: lights_phong_pars_fragment, - lights_physical_fragment: lights_physical_fragment, - lights_physical_pars_fragment: lights_physical_pars_fragment, - lights_fragment_begin: lights_fragment_begin, - lights_fragment_maps: lights_fragment_maps, - lights_fragment_end: lights_fragment_end, - logdepthbuf_fragment: logdepthbuf_fragment, - logdepthbuf_pars_fragment: logdepthbuf_pars_fragment, - logdepthbuf_pars_vertex: logdepthbuf_pars_vertex, - logdepthbuf_vertex: logdepthbuf_vertex, - map_fragment: map_fragment, - map_pars_fragment: map_pars_fragment, - map_particle_fragment: map_particle_fragment, - map_particle_pars_fragment: map_particle_pars_fragment, - metalnessmap_fragment: metalnessmap_fragment, - metalnessmap_pars_fragment: metalnessmap_pars_fragment, - morphnormal_vertex: morphnormal_vertex, - morphtarget_pars_vertex: morphtarget_pars_vertex, - morphtarget_vertex: morphtarget_vertex, - normal_fragment_begin: normal_fragment_begin, - normal_fragment_maps: normal_fragment_maps, - normalmap_pars_fragment: normalmap_pars_fragment, - clearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin, - clearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps, - clearcoat_pars_fragment: clearcoat_pars_fragment, - packing: packing, - premultiplied_alpha_fragment: premultiplied_alpha_fragment, - project_vertex: project_vertex, - dithering_fragment: dithering_fragment, - dithering_pars_fragment: dithering_pars_fragment, - roughnessmap_fragment: roughnessmap_fragment, - roughnessmap_pars_fragment: roughnessmap_pars_fragment, - shadowmap_pars_fragment: shadowmap_pars_fragment, - shadowmap_pars_vertex: shadowmap_pars_vertex, - shadowmap_vertex: shadowmap_vertex, - shadowmask_pars_fragment: shadowmask_pars_fragment, - skinbase_vertex: skinbase_vertex, - skinning_pars_vertex: skinning_pars_vertex, - skinning_vertex: skinning_vertex, - skinnormal_vertex: skinnormal_vertex, - specularmap_fragment: specularmap_fragment, - specularmap_pars_fragment: specularmap_pars_fragment, - tonemapping_fragment: tonemapping_fragment, - tonemapping_pars_fragment: tonemapping_pars_fragment, - transmissionmap_fragment: transmissionmap_fragment, - transmissionmap_pars_fragment: transmissionmap_pars_fragment, - uv_pars_fragment: uv_pars_fragment, - uv_pars_vertex: uv_pars_vertex, - uv_vertex: uv_vertex, - uv2_pars_fragment: uv2_pars_fragment, - uv2_pars_vertex: uv2_pars_vertex, - uv2_vertex: uv2_vertex, - worldpos_vertex: worldpos_vertex, - - background_frag: background_frag, - background_vert: background_vert, - cube_frag: cube_frag, - cube_vert: cube_vert, - depth_frag: depth_frag, - depth_vert: depth_vert, - distanceRGBA_frag: distanceRGBA_frag, - distanceRGBA_vert: distanceRGBA_vert, - equirect_frag: equirect_frag, - equirect_vert: equirect_vert, - linedashed_frag: linedashed_frag, - linedashed_vert: linedashed_vert, - meshbasic_frag: meshbasic_frag, - meshbasic_vert: meshbasic_vert, - meshlambert_frag: meshlambert_frag, - meshlambert_vert: meshlambert_vert, - meshmatcap_frag: meshmatcap_frag, - meshmatcap_vert: meshmatcap_vert, - meshtoon_frag: meshtoon_frag, - meshtoon_vert: meshtoon_vert, - meshphong_frag: meshphong_frag, - meshphong_vert: meshphong_vert, - meshphysical_frag: meshphysical_frag, - meshphysical_vert: meshphysical_vert, - normal_frag: normal_frag, - normal_vert: normal_vert, - points_frag: points_frag, - points_vert: points_vert, - shadow_frag: shadow_frag, - shadow_vert: shadow_vert, - sprite_frag: sprite_frag, - sprite_vert: sprite_vert - }; - - /** - * Uniforms library for shared webgl shaders - */ - - const UniformsLib = { - - common: { - - diffuse: { value: new Color( 0xeeeeee ) }, - opacity: { value: 1.0 }, - - map: { value: null }, - uvTransform: { value: new Matrix3() }, - uv2Transform: { value: new Matrix3() }, - - alphaMap: { value: null }, - - }, - - specularmap: { - - specularMap: { value: null }, - - }, - - envmap: { - - envMap: { value: null }, - flipEnvMap: { value: - 1 }, - reflectivity: { value: 1.0 }, - refractionRatio: { value: 0.98 }, - maxMipLevel: { value: 0 } - - }, - - aomap: { - - aoMap: { value: null }, - aoMapIntensity: { value: 1 } - - }, - - lightmap: { - - lightMap: { value: null }, - lightMapIntensity: { value: 1 } - - }, - - emissivemap: { - - emissiveMap: { value: null } - - }, - - bumpmap: { - - bumpMap: { value: null }, - bumpScale: { value: 1 } - - }, - - normalmap: { - - normalMap: { value: null }, - normalScale: { value: new Vector2( 1, 1 ) } - - }, - - displacementmap: { - - displacementMap: { value: null }, - displacementScale: { value: 1 }, - displacementBias: { value: 0 } - - }, - - roughnessmap: { - - roughnessMap: { value: null } - - }, - - metalnessmap: { - - metalnessMap: { value: null } - - }, - - gradientmap: { - - gradientMap: { value: null } - - }, - - fog: { - - fogDensity: { value: 0.00025 }, - fogNear: { value: 1 }, - fogFar: { value: 2000 }, - fogColor: { value: new Color( 0xffffff ) } - - }, - - lights: { - - ambientLightColor: { value: [] }, - - lightProbe: { value: [] }, - - directionalLights: { value: [], properties: { - direction: {}, - color: {} - } }, - - directionalLightShadows: { value: [], properties: { - shadowBias: {}, - shadowNormalBias: {}, - shadowRadius: {}, - shadowMapSize: {} - } }, - - directionalShadowMap: { value: [] }, - directionalShadowMatrix: { value: [] }, - - spotLights: { value: [], properties: { - color: {}, - position: {}, - direction: {}, - distance: {}, - coneCos: {}, - penumbraCos: {}, - decay: {} - } }, - - spotLightShadows: { value: [], properties: { - shadowBias: {}, - shadowNormalBias: {}, - shadowRadius: {}, - shadowMapSize: {} - } }, - - spotShadowMap: { value: [] }, - spotShadowMatrix: { value: [] }, - - pointLights: { value: [], properties: { - color: {}, - position: {}, - decay: {}, - distance: {} - } }, - - pointLightShadows: { value: [], properties: { - shadowBias: {}, - shadowNormalBias: {}, - shadowRadius: {}, - shadowMapSize: {}, - shadowCameraNear: {}, - shadowCameraFar: {} - } }, - - pointShadowMap: { value: [] }, - pointShadowMatrix: { value: [] }, - - hemisphereLights: { value: [], properties: { - direction: {}, - skyColor: {}, - groundColor: {} - } }, - - // TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src - rectAreaLights: { value: [], properties: { - color: {}, - position: {}, - width: {}, - height: {} - } }, - - ltc_1: { value: null }, - ltc_2: { value: null } - - }, - - points: { - - diffuse: { value: new Color( 0xeeeeee ) }, - opacity: { value: 1.0 }, - size: { value: 1.0 }, - scale: { value: 1.0 }, - map: { value: null }, - alphaMap: { value: null }, - uvTransform: { value: new Matrix3() } - - }, - - sprite: { - - diffuse: { value: new Color( 0xeeeeee ) }, - opacity: { value: 1.0 }, - center: { value: new Vector2( 0.5, 0.5 ) }, - rotation: { value: 0.0 }, - map: { value: null }, - alphaMap: { value: null }, - uvTransform: { value: new Matrix3() } - - } - - }; - - const ShaderLib = { - - basic: { - - uniforms: mergeUniforms( [ - UniformsLib.common, - UniformsLib.specularmap, - UniformsLib.envmap, - UniformsLib.aomap, - UniformsLib.lightmap, - UniformsLib.fog - ] ), - - vertexShader: ShaderChunk.meshbasic_vert, - fragmentShader: ShaderChunk.meshbasic_frag - - }, - - lambert: { - - uniforms: mergeUniforms( [ - UniformsLib.common, - UniformsLib.specularmap, - UniformsLib.envmap, - UniformsLib.aomap, - UniformsLib.lightmap, - UniformsLib.emissivemap, - UniformsLib.fog, - UniformsLib.lights, - { - emissive: { value: new Color( 0x000000 ) } - } - ] ), - - vertexShader: ShaderChunk.meshlambert_vert, - fragmentShader: ShaderChunk.meshlambert_frag - - }, - - phong: { - - uniforms: mergeUniforms( [ - UniformsLib.common, - UniformsLib.specularmap, - UniformsLib.envmap, - UniformsLib.aomap, - UniformsLib.lightmap, - UniformsLib.emissivemap, - UniformsLib.bumpmap, - UniformsLib.normalmap, - UniformsLib.displacementmap, - UniformsLib.fog, - UniformsLib.lights, - { - emissive: { value: new Color( 0x000000 ) }, - specular: { value: new Color( 0x111111 ) }, - shininess: { value: 30 } - } - ] ), - - vertexShader: ShaderChunk.meshphong_vert, - fragmentShader: ShaderChunk.meshphong_frag - - }, - - standard: { - - uniforms: mergeUniforms( [ - UniformsLib.common, - UniformsLib.envmap, - UniformsLib.aomap, - UniformsLib.lightmap, - UniformsLib.emissivemap, - UniformsLib.bumpmap, - UniformsLib.normalmap, - UniformsLib.displacementmap, - UniformsLib.roughnessmap, - UniformsLib.metalnessmap, - UniformsLib.fog, - UniformsLib.lights, - { - emissive: { value: new Color( 0x000000 ) }, - roughness: { value: 1.0 }, - metalness: { value: 0.0 }, - envMapIntensity: { value: 1 } // temporary - } - ] ), - - vertexShader: ShaderChunk.meshphysical_vert, - fragmentShader: ShaderChunk.meshphysical_frag - - }, - - toon: { - - uniforms: mergeUniforms( [ - UniformsLib.common, - UniformsLib.aomap, - UniformsLib.lightmap, - UniformsLib.emissivemap, - UniformsLib.bumpmap, - UniformsLib.normalmap, - UniformsLib.displacementmap, - UniformsLib.gradientmap, - UniformsLib.fog, - UniformsLib.lights, - { - emissive: { value: new Color( 0x000000 ) } - } - ] ), - - vertexShader: ShaderChunk.meshtoon_vert, - fragmentShader: ShaderChunk.meshtoon_frag - - }, - - matcap: { - - uniforms: mergeUniforms( [ - UniformsLib.common, - UniformsLib.bumpmap, - UniformsLib.normalmap, - UniformsLib.displacementmap, - UniformsLib.fog, - { - matcap: { value: null } - } - ] ), - - vertexShader: ShaderChunk.meshmatcap_vert, - fragmentShader: ShaderChunk.meshmatcap_frag - - }, - - points: { - - uniforms: mergeUniforms( [ - UniformsLib.points, - UniformsLib.fog - ] ), - - vertexShader: ShaderChunk.points_vert, - fragmentShader: ShaderChunk.points_frag - - }, - - dashed: { - - uniforms: mergeUniforms( [ - UniformsLib.common, - UniformsLib.fog, - { - scale: { value: 1 }, - dashSize: { value: 1 }, - totalSize: { value: 2 } - } - ] ), - - vertexShader: ShaderChunk.linedashed_vert, - fragmentShader: ShaderChunk.linedashed_frag - - }, - - depth: { - - uniforms: mergeUniforms( [ - UniformsLib.common, - UniformsLib.displacementmap - ] ), - - vertexShader: ShaderChunk.depth_vert, - fragmentShader: ShaderChunk.depth_frag - - }, - - normal: { - - uniforms: mergeUniforms( [ - UniformsLib.common, - UniformsLib.bumpmap, - UniformsLib.normalmap, - UniformsLib.displacementmap, - { - opacity: { value: 1.0 } - } - ] ), - - vertexShader: ShaderChunk.normal_vert, - fragmentShader: ShaderChunk.normal_frag - - }, - - sprite: { - - uniforms: mergeUniforms( [ - UniformsLib.sprite, - UniformsLib.fog - ] ), - - vertexShader: ShaderChunk.sprite_vert, - fragmentShader: ShaderChunk.sprite_frag - - }, - - background: { - - uniforms: { - uvTransform: { value: new Matrix3() }, - t2D: { value: null }, - }, - - vertexShader: ShaderChunk.background_vert, - fragmentShader: ShaderChunk.background_frag - - }, - /* ------------------------------------------------------------------------- - // Cube map shader - ------------------------------------------------------------------------- */ - - cube: { - - uniforms: mergeUniforms( [ - UniformsLib.envmap, - { - opacity: { value: 1.0 } - } - ] ), - - vertexShader: ShaderChunk.cube_vert, - fragmentShader: ShaderChunk.cube_frag - - }, - - equirect: { - - uniforms: { - tEquirect: { value: null }, - }, - - vertexShader: ShaderChunk.equirect_vert, - fragmentShader: ShaderChunk.equirect_frag - - }, - - distanceRGBA: { - - uniforms: mergeUniforms( [ - UniformsLib.common, - UniformsLib.displacementmap, - { - referencePosition: { value: new Vector3() }, - nearDistance: { value: 1 }, - farDistance: { value: 1000 } - } - ] ), - - vertexShader: ShaderChunk.distanceRGBA_vert, - fragmentShader: ShaderChunk.distanceRGBA_frag - - }, - - shadow: { - - uniforms: mergeUniforms( [ - UniformsLib.lights, - UniformsLib.fog, - { - color: { value: new Color( 0x00000 ) }, - opacity: { value: 1.0 } - }, - ] ), - - vertexShader: ShaderChunk.shadow_vert, - fragmentShader: ShaderChunk.shadow_frag - - } - - }; - - ShaderLib.physical = { - - uniforms: mergeUniforms( [ - ShaderLib.standard.uniforms, - { - clearcoat: { value: 0 }, - clearcoatMap: { value: null }, - clearcoatRoughness: { value: 0 }, - clearcoatRoughnessMap: { value: null }, - clearcoatNormalScale: { value: new Vector2( 1, 1 ) }, - clearcoatNormalMap: { value: null }, - sheen: { value: new Color( 0x000000 ) }, - transmission: { value: 0 }, - transmissionMap: { value: null }, - } - ] ), - - vertexShader: ShaderChunk.meshphysical_vert, - fragmentShader: ShaderChunk.meshphysical_frag - - }; - - function WebGLBackground( renderer, cubemaps, state, objects, premultipliedAlpha ) { - - const clearColor = new Color( 0x000000 ); - let clearAlpha = 0; - - let planeMesh; - let boxMesh; - - let currentBackground = null; - let currentBackgroundVersion = 0; - let currentTonemapping = null; - - function render( renderList, scene, camera, forceClear ) { - - let background = scene.isScene === true ? scene.background : null; - - if ( background && background.isTexture ) { - - background = cubemaps.get( background ); - - } - - // Ignore background in AR - // TODO: Reconsider this. - - const xr = renderer.xr; - const session = xr.getSession && xr.getSession(); - - if ( session && session.environmentBlendMode === 'additive' ) { - - background = null; - - } - - if ( background === null ) { - - setClear( clearColor, clearAlpha ); - - } else if ( background && background.isColor ) { - - setClear( background, 1 ); - forceClear = true; - - } - - if ( renderer.autoClear || forceClear ) { - - renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil ); - - } - - if ( background && ( background.isCubeTexture || background.isWebGLCubeRenderTarget || background.mapping === CubeUVReflectionMapping ) ) { - - if ( boxMesh === undefined ) { - - boxMesh = new Mesh( - new BoxBufferGeometry( 1, 1, 1 ), - new ShaderMaterial( { - name: 'BackgroundCubeMaterial', - uniforms: cloneUniforms( ShaderLib.cube.uniforms ), - vertexShader: ShaderLib.cube.vertexShader, - fragmentShader: ShaderLib.cube.fragmentShader, - side: BackSide, - depthTest: false, - depthWrite: false, - fog: false - } ) - ); - - boxMesh.geometry.deleteAttribute( 'normal' ); - boxMesh.geometry.deleteAttribute( 'uv' ); - - boxMesh.onBeforeRender = function ( renderer, scene, camera ) { - - this.matrixWorld.copyPosition( camera.matrixWorld ); - - }; - - // enable code injection for non-built-in material - Object.defineProperty( boxMesh.material, 'envMap', { - - get: function () { - - return this.uniforms.envMap.value; - - } - - } ); - - objects.update( boxMesh ); - - } - - if ( background.isWebGLCubeRenderTarget ) { - - // TODO Deprecate - - background = background.texture; - - } - - boxMesh.material.uniforms.envMap.value = background; - boxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background._needsFlipEnvMap ) ? - 1 : 1; - - if ( currentBackground !== background || - currentBackgroundVersion !== background.version || - currentTonemapping !== renderer.toneMapping ) { - - boxMesh.material.needsUpdate = true; - - currentBackground = background; - currentBackgroundVersion = background.version; - currentTonemapping = renderer.toneMapping; - - } - - // push to the pre-sorted opaque render list - renderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null ); - - } else if ( background && background.isTexture ) { - - if ( planeMesh === undefined ) { - - planeMesh = new Mesh( - new PlaneBufferGeometry( 2, 2 ), - new ShaderMaterial( { - name: 'BackgroundMaterial', - uniforms: cloneUniforms( ShaderLib.background.uniforms ), - vertexShader: ShaderLib.background.vertexShader, - fragmentShader: ShaderLib.background.fragmentShader, - side: FrontSide, - depthTest: false, - depthWrite: false, - fog: false - } ) - ); - - planeMesh.geometry.deleteAttribute( 'normal' ); - - // enable code injection for non-built-in material - Object.defineProperty( planeMesh.material, 'map', { - - get: function () { - - return this.uniforms.t2D.value; - - } - - } ); - - objects.update( planeMesh ); - - } - - planeMesh.material.uniforms.t2D.value = background; - - if ( background.matrixAutoUpdate === true ) { - - background.updateMatrix(); - - } - - planeMesh.material.uniforms.uvTransform.value.copy( background.matrix ); - - if ( currentBackground !== background || - currentBackgroundVersion !== background.version || - currentTonemapping !== renderer.toneMapping ) { - - planeMesh.material.needsUpdate = true; - - currentBackground = background; - currentBackgroundVersion = background.version; - currentTonemapping = renderer.toneMapping; - - } - - - // push to the pre-sorted opaque render list - renderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null ); - - } - - } - - function setClear( color, alpha ) { - - state.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha ); - - } - - return { - - getClearColor: function () { - - return clearColor; - - }, - setClearColor: function ( color, alpha = 1 ) { - - clearColor.set( color ); - clearAlpha = alpha; - setClear( clearColor, clearAlpha ); - - }, - getClearAlpha: function () { - - return clearAlpha; - - }, - setClearAlpha: function ( alpha ) { - - clearAlpha = alpha; - setClear( clearColor, clearAlpha ); - - }, - render: render - - }; - - } - - function WebGLBindingStates( gl, extensions, attributes, capabilities ) { - - const maxVertexAttributes = gl.getParameter( 34921 ); - - const extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' ); - const vaoAvailable = capabilities.isWebGL2 || extension !== null; - - const bindingStates = {}; - - const defaultState = createBindingState( null ); - let currentState = defaultState; - - function setup( object, material, program, geometry, index ) { - - let updateBuffers = false; - - if ( vaoAvailable ) { - - const state = getBindingState( geometry, program, material ); - - if ( currentState !== state ) { - - currentState = state; - bindVertexArrayObject( currentState.object ); - - } - - updateBuffers = needsUpdate( geometry, index ); - - if ( updateBuffers ) saveCache( geometry, index ); - - } else { - - const wireframe = ( material.wireframe === true ); - - if ( currentState.geometry !== geometry.id || - currentState.program !== program.id || - currentState.wireframe !== wireframe ) { - - currentState.geometry = geometry.id; - currentState.program = program.id; - currentState.wireframe = wireframe; - - updateBuffers = true; - - } - - } - - if ( object.isInstancedMesh === true ) { - - updateBuffers = true; - - } - - if ( index !== null ) { - - attributes.update( index, 34963 ); - - } - - if ( updateBuffers ) { - - setupVertexAttributes( object, material, program, geometry ); - - if ( index !== null ) { - - gl.bindBuffer( 34963, attributes.get( index ).buffer ); - - } - - } - - } - - function createVertexArrayObject() { - - if ( capabilities.isWebGL2 ) return gl.createVertexArray(); - - return extension.createVertexArrayOES(); - - } - - function bindVertexArrayObject( vao ) { - - if ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao ); - - return extension.bindVertexArrayOES( vao ); - - } - - function deleteVertexArrayObject( vao ) { - - if ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao ); - - return extension.deleteVertexArrayOES( vao ); - - } - - function getBindingState( geometry, program, material ) { - - const wireframe = ( material.wireframe === true ); - - let programMap = bindingStates[ geometry.id ]; - - if ( programMap === undefined ) { - - programMap = {}; - bindingStates[ geometry.id ] = programMap; - - } - - let stateMap = programMap[ program.id ]; - - if ( stateMap === undefined ) { - - stateMap = {}; - programMap[ program.id ] = stateMap; - - } - - let state = stateMap[ wireframe ]; - - if ( state === undefined ) { - - state = createBindingState( createVertexArrayObject() ); - stateMap[ wireframe ] = state; - - } - - return state; - - } - - function createBindingState( vao ) { - - const newAttributes = []; - const enabledAttributes = []; - const attributeDivisors = []; - - for ( let i = 0; i < maxVertexAttributes; i ++ ) { - - newAttributes[ i ] = 0; - enabledAttributes[ i ] = 0; - attributeDivisors[ i ] = 0; - - } - - return { - - // for backward compatibility on non-VAO support browser - geometry: null, - program: null, - wireframe: false, - - newAttributes: newAttributes, - enabledAttributes: enabledAttributes, - attributeDivisors: attributeDivisors, - object: vao, - attributes: {}, - index: null - - }; - - } - - function needsUpdate( geometry, index ) { - - const cachedAttributes = currentState.attributes; - const geometryAttributes = geometry.attributes; - - let attributesNum = 0; - - for ( const key in geometryAttributes ) { - - const cachedAttribute = cachedAttributes[ key ]; - const geometryAttribute = geometryAttributes[ key ]; - - if ( cachedAttribute === undefined ) return true; - - if ( cachedAttribute.attribute !== geometryAttribute ) return true; - - if ( cachedAttribute.data !== geometryAttribute.data ) return true; - - attributesNum ++; - - } - - if ( currentState.attributesNum !== attributesNum ) return true; - - if ( currentState.index !== index ) return true; - - return false; - - } - - function saveCache( geometry, index ) { - - const cache = {}; - const attributes = geometry.attributes; - let attributesNum = 0; - - for ( const key in attributes ) { - - const attribute = attributes[ key ]; - - const data = {}; - data.attribute = attribute; - - if ( attribute.data ) { - - data.data = attribute.data; - - } - - cache[ key ] = data; - - attributesNum ++; - - } - - currentState.attributes = cache; - currentState.attributesNum = attributesNum; - - currentState.index = index; - - } - - function initAttributes() { - - const newAttributes = currentState.newAttributes; - - for ( let i = 0, il = newAttributes.length; i < il; i ++ ) { - - newAttributes[ i ] = 0; - - } - - } - - function enableAttribute( attribute ) { - - enableAttributeAndDivisor( attribute, 0 ); - - } - - function enableAttributeAndDivisor( attribute, meshPerAttribute ) { - - const newAttributes = currentState.newAttributes; - const enabledAttributes = currentState.enabledAttributes; - const attributeDivisors = currentState.attributeDivisors; - - newAttributes[ attribute ] = 1; - - if ( enabledAttributes[ attribute ] === 0 ) { - - gl.enableVertexAttribArray( attribute ); - enabledAttributes[ attribute ] = 1; - - } - - if ( attributeDivisors[ attribute ] !== meshPerAttribute ) { - - const extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' ); - - extension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute ); - attributeDivisors[ attribute ] = meshPerAttribute; - - } - - } - - function disableUnusedAttributes() { - - const newAttributes = currentState.newAttributes; - const enabledAttributes = currentState.enabledAttributes; - - for ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) { - - if ( enabledAttributes[ i ] !== newAttributes[ i ] ) { - - gl.disableVertexAttribArray( i ); - enabledAttributes[ i ] = 0; - - } - - } - - } - - function vertexAttribPointer( index, size, type, normalized, stride, offset ) { - - if ( capabilities.isWebGL2 === true && ( type === 5124 || type === 5125 ) ) { - - gl.vertexAttribIPointer( index, size, type, stride, offset ); - - } else { - - gl.vertexAttribPointer( index, size, type, normalized, stride, offset ); - - } - - } - - function setupVertexAttributes( object, material, program, geometry ) { - - if ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) { - - if ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return; - - } - - initAttributes(); - - const geometryAttributes = geometry.attributes; - - const programAttributes = program.getAttributes(); - - const materialDefaultAttributeValues = material.defaultAttributeValues; - - for ( const name in programAttributes ) { - - const programAttribute = programAttributes[ name ]; - - if ( programAttribute >= 0 ) { - - const geometryAttribute = geometryAttributes[ name ]; - - if ( geometryAttribute !== undefined ) { - - const normalized = geometryAttribute.normalized; - const size = geometryAttribute.itemSize; - - const attribute = attributes.get( geometryAttribute ); - - // TODO Attribute may not be available on context restore - - if ( attribute === undefined ) continue; - - const buffer = attribute.buffer; - const type = attribute.type; - const bytesPerElement = attribute.bytesPerElement; - - if ( geometryAttribute.isInterleavedBufferAttribute ) { - - const data = geometryAttribute.data; - const stride = data.stride; - const offset = geometryAttribute.offset; - - if ( data && data.isInstancedInterleavedBuffer ) { - - enableAttributeAndDivisor( programAttribute, data.meshPerAttribute ); - - if ( geometry._maxInstanceCount === undefined ) { - - geometry._maxInstanceCount = data.meshPerAttribute * data.count; - - } - - } else { - - enableAttribute( programAttribute ); - - } - - gl.bindBuffer( 34962, buffer ); - vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement ); - - } else { - - if ( geometryAttribute.isInstancedBufferAttribute ) { - - enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute ); - - if ( geometry._maxInstanceCount === undefined ) { - - geometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count; - - } - - } else { - - enableAttribute( programAttribute ); - - } - - gl.bindBuffer( 34962, buffer ); - vertexAttribPointer( programAttribute, size, type, normalized, 0, 0 ); - - } - - } else if ( name === 'instanceMatrix' ) { - - const attribute = attributes.get( object.instanceMatrix ); - - // TODO Attribute may not be available on context restore - - if ( attribute === undefined ) continue; - - const buffer = attribute.buffer; - const type = attribute.type; - - enableAttributeAndDivisor( programAttribute + 0, 1 ); - enableAttributeAndDivisor( programAttribute + 1, 1 ); - enableAttributeAndDivisor( programAttribute + 2, 1 ); - enableAttributeAndDivisor( programAttribute + 3, 1 ); - - gl.bindBuffer( 34962, buffer ); - - gl.vertexAttribPointer( programAttribute + 0, 4, type, false, 64, 0 ); - gl.vertexAttribPointer( programAttribute + 1, 4, type, false, 64, 16 ); - gl.vertexAttribPointer( programAttribute + 2, 4, type, false, 64, 32 ); - gl.vertexAttribPointer( programAttribute + 3, 4, type, false, 64, 48 ); - - } else if ( name === 'instanceColor' ) { - - const attribute = attributes.get( object.instanceColor ); - - // TODO Attribute may not be available on context restore - - if ( attribute === undefined ) continue; - - const buffer = attribute.buffer; - const type = attribute.type; - - enableAttributeAndDivisor( programAttribute, 1 ); - - gl.bindBuffer( 34962, buffer ); - - gl.vertexAttribPointer( programAttribute, 3, type, false, 12, 0 ); - - } else if ( materialDefaultAttributeValues !== undefined ) { - - const value = materialDefaultAttributeValues[ name ]; - - if ( value !== undefined ) { - - switch ( value.length ) { - - case 2: - gl.vertexAttrib2fv( programAttribute, value ); - break; - - case 3: - gl.vertexAttrib3fv( programAttribute, value ); - break; - - case 4: - gl.vertexAttrib4fv( programAttribute, value ); - break; - - default: - gl.vertexAttrib1fv( programAttribute, value ); - - } - - } - - } - - } - - } - - disableUnusedAttributes(); - - } - - function dispose() { - - reset(); - - for ( const geometryId in bindingStates ) { - - const programMap = bindingStates[ geometryId ]; - - for ( const programId in programMap ) { - - const stateMap = programMap[ programId ]; - - for ( const wireframe in stateMap ) { - - deleteVertexArrayObject( stateMap[ wireframe ].object ); - - delete stateMap[ wireframe ]; - - } - - delete programMap[ programId ]; - - } - - delete bindingStates[ geometryId ]; - - } - - } - - function releaseStatesOfGeometry( geometry ) { - - if ( bindingStates[ geometry.id ] === undefined ) return; - - const programMap = bindingStates[ geometry.id ]; - - for ( const programId in programMap ) { - - const stateMap = programMap[ programId ]; - - for ( const wireframe in stateMap ) { - - deleteVertexArrayObject( stateMap[ wireframe ].object ); - - delete stateMap[ wireframe ]; - - } - - delete programMap[ programId ]; - - } - - delete bindingStates[ geometry.id ]; - - } - - function releaseStatesOfProgram( program ) { - - for ( const geometryId in bindingStates ) { - - const programMap = bindingStates[ geometryId ]; - - if ( programMap[ program.id ] === undefined ) continue; - - const stateMap = programMap[ program.id ]; - - for ( const wireframe in stateMap ) { - - deleteVertexArrayObject( stateMap[ wireframe ].object ); - - delete stateMap[ wireframe ]; - - } - - delete programMap[ program.id ]; - - } - - } - - function reset() { - - resetDefaultState(); - - if ( currentState === defaultState ) return; - - currentState = defaultState; - bindVertexArrayObject( currentState.object ); - - } - - // for backward-compatilibity - - function resetDefaultState() { - - defaultState.geometry = null; - defaultState.program = null; - defaultState.wireframe = false; - - } - - return { - - setup: setup, - reset: reset, - resetDefaultState: resetDefaultState, - dispose: dispose, - releaseStatesOfGeometry: releaseStatesOfGeometry, - releaseStatesOfProgram: releaseStatesOfProgram, - - initAttributes: initAttributes, - enableAttribute: enableAttribute, - disableUnusedAttributes: disableUnusedAttributes - - }; - - } - - function WebGLBufferRenderer( gl, extensions, info, capabilities ) { - - const isWebGL2 = capabilities.isWebGL2; - - let mode; - - function setMode( value ) { - - mode = value; - - } - - function render( start, count ) { - - gl.drawArrays( mode, start, count ); - - info.update( count, mode, 1 ); - - } - - function renderInstances( start, count, primcount ) { - - if ( primcount === 0 ) return; - - let extension, methodName; - - if ( isWebGL2 ) { - - extension = gl; - methodName = 'drawArraysInstanced'; - - } else { - - extension = extensions.get( 'ANGLE_instanced_arrays' ); - methodName = 'drawArraysInstancedANGLE'; - - if ( extension === null ) { - - console.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); - return; - - } - - } - - extension[ methodName ]( mode, start, count, primcount ); - - info.update( count, mode, primcount ); - - } - - // - - this.setMode = setMode; - this.render = render; - this.renderInstances = renderInstances; - - } - - function WebGLCapabilities( gl, extensions, parameters ) { - - let maxAnisotropy; - - function getMaxAnisotropy() { - - if ( maxAnisotropy !== undefined ) return maxAnisotropy; - - const extension = extensions.get( 'EXT_texture_filter_anisotropic' ); - - if ( extension !== null ) { - - maxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT ); - - } else { - - maxAnisotropy = 0; - - } - - return maxAnisotropy; - - } - - function getMaxPrecision( precision ) { - - if ( precision === 'highp' ) { - - if ( gl.getShaderPrecisionFormat( 35633, 36338 ).precision > 0 && - gl.getShaderPrecisionFormat( 35632, 36338 ).precision > 0 ) { - - return 'highp'; - - } - - precision = 'mediump'; - - } - - if ( precision === 'mediump' ) { - - if ( gl.getShaderPrecisionFormat( 35633, 36337 ).precision > 0 && - gl.getShaderPrecisionFormat( 35632, 36337 ).precision > 0 ) { - - return 'mediump'; - - } - - } - - return 'lowp'; - - } - - /* eslint-disable no-undef */ - const isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ) || - ( typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext ); - /* eslint-enable no-undef */ - - let precision = parameters.precision !== undefined ? parameters.precision : 'highp'; - const maxPrecision = getMaxPrecision( precision ); - - if ( maxPrecision !== precision ) { - - console.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' ); - precision = maxPrecision; - - } - - const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true; - - const maxTextures = gl.getParameter( 34930 ); - const maxVertexTextures = gl.getParameter( 35660 ); - const maxTextureSize = gl.getParameter( 3379 ); - const maxCubemapSize = gl.getParameter( 34076 ); - - const maxAttributes = gl.getParameter( 34921 ); - const maxVertexUniforms = gl.getParameter( 36347 ); - const maxVaryings = gl.getParameter( 36348 ); - const maxFragmentUniforms = gl.getParameter( 36349 ); - - const vertexTextures = maxVertexTextures > 0; - const floatFragmentTextures = isWebGL2 || !! extensions.get( 'OES_texture_float' ); - const floatVertexTextures = vertexTextures && floatFragmentTextures; - - const maxSamples = isWebGL2 ? gl.getParameter( 36183 ) : 0; - - return { - - isWebGL2: isWebGL2, - - getMaxAnisotropy: getMaxAnisotropy, - getMaxPrecision: getMaxPrecision, - - precision: precision, - logarithmicDepthBuffer: logarithmicDepthBuffer, - - maxTextures: maxTextures, - maxVertexTextures: maxVertexTextures, - maxTextureSize: maxTextureSize, - maxCubemapSize: maxCubemapSize, - - maxAttributes: maxAttributes, - maxVertexUniforms: maxVertexUniforms, - maxVaryings: maxVaryings, - maxFragmentUniforms: maxFragmentUniforms, - - vertexTextures: vertexTextures, - floatFragmentTextures: floatFragmentTextures, - floatVertexTextures: floatVertexTextures, - - maxSamples: maxSamples - - }; - - } - - function WebGLClipping( properties ) { - - const scope = this; - - let globalState = null, - numGlobalPlanes = 0, - localClippingEnabled = false, - renderingShadows = false; - - const plane = new Plane(), - viewNormalMatrix = new Matrix3(), - - uniform = { value: null, needsUpdate: false }; - - this.uniform = uniform; - this.numPlanes = 0; - this.numIntersection = 0; - - this.init = function ( planes, enableLocalClipping, camera ) { - - const enabled = - planes.length !== 0 || - enableLocalClipping || - // enable state of previous frame - the clipping code has to - // run another frame in order to reset the state: - numGlobalPlanes !== 0 || - localClippingEnabled; - - localClippingEnabled = enableLocalClipping; - - globalState = projectPlanes( planes, camera, 0 ); - numGlobalPlanes = planes.length; - - return enabled; - - }; - - this.beginShadows = function () { - - renderingShadows = true; - projectPlanes( null ); - - }; - - this.endShadows = function () { - - renderingShadows = false; - resetGlobalState(); - - }; - - this.setState = function ( material, camera, useCache ) { - - const planes = material.clippingPlanes, - clipIntersection = material.clipIntersection, - clipShadows = material.clipShadows; - - const materialProperties = properties.get( material ); - - if ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) { - - // there's no local clipping - - if ( renderingShadows ) { - - // there's no global clipping - - projectPlanes( null ); - - } else { - - resetGlobalState(); - - } - - } else { - - const nGlobal = renderingShadows ? 0 : numGlobalPlanes, - lGlobal = nGlobal * 4; - - let dstArray = materialProperties.clippingState || null; - - uniform.value = dstArray; // ensure unique state - - dstArray = projectPlanes( planes, camera, lGlobal, useCache ); - - for ( let i = 0; i !== lGlobal; ++ i ) { - - dstArray[ i ] = globalState[ i ]; - - } - - materialProperties.clippingState = dstArray; - this.numIntersection = clipIntersection ? this.numPlanes : 0; - this.numPlanes += nGlobal; - - } - - - }; - - function resetGlobalState() { - - if ( uniform.value !== globalState ) { - - uniform.value = globalState; - uniform.needsUpdate = numGlobalPlanes > 0; - - } - - scope.numPlanes = numGlobalPlanes; - scope.numIntersection = 0; - - } - - function projectPlanes( planes, camera, dstOffset, skipTransform ) { - - const nPlanes = planes !== null ? planes.length : 0; - let dstArray = null; - - if ( nPlanes !== 0 ) { - - dstArray = uniform.value; - - if ( skipTransform !== true || dstArray === null ) { - - const flatSize = dstOffset + nPlanes * 4, - viewMatrix = camera.matrixWorldInverse; - - viewNormalMatrix.getNormalMatrix( viewMatrix ); - - if ( dstArray === null || dstArray.length < flatSize ) { - - dstArray = new Float32Array( flatSize ); - - } - - for ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) { - - plane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix ); - - plane.normal.toArray( dstArray, i4 ); - dstArray[ i4 + 3 ] = plane.constant; - - } - - } - - uniform.value = dstArray; - uniform.needsUpdate = true; - - } - - scope.numPlanes = nPlanes; - scope.numIntersection = 0; - - return dstArray; - - } - - } - - function WebGLCubeMaps( renderer ) { - - let cubemaps = new WeakMap(); - - function mapTextureMapping( texture, mapping ) { - - if ( mapping === EquirectangularReflectionMapping ) { - - texture.mapping = CubeReflectionMapping; - - } else if ( mapping === EquirectangularRefractionMapping ) { - - texture.mapping = CubeRefractionMapping; - - } - - return texture; - - } - - function get( texture ) { - - if ( texture && texture.isTexture ) { - - const mapping = texture.mapping; - - if ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) { - - if ( cubemaps.has( texture ) ) { - - const cubemap = cubemaps.get( texture ).texture; - return mapTextureMapping( cubemap, texture.mapping ); - - } else { - - const image = texture.image; - - if ( image && image.height > 0 ) { - - const currentRenderList = renderer.getRenderList(); - const currentRenderTarget = renderer.getRenderTarget(); - const currentRenderState = renderer.getRenderState(); - - const renderTarget = new WebGLCubeRenderTarget( image.height / 2 ); - renderTarget.fromEquirectangularTexture( renderer, texture ); - cubemaps.set( texture, renderTarget ); - - renderer.setRenderTarget( currentRenderTarget ); - renderer.setRenderList( currentRenderList ); - renderer.setRenderState( currentRenderState ); - - texture.addEventListener( 'dispose', onTextureDispose ); - - return mapTextureMapping( renderTarget.texture, texture.mapping ); - - } else { - - // image not yet ready. try the conversion next frame - - return null; - - } - - } - - } - - } - - return texture; - - } - - function onTextureDispose( event ) { - - const texture = event.target; - - texture.removeEventListener( 'dispose', onTextureDispose ); - - const cubemap = cubemaps.get( texture ); - - if ( cubemap !== undefined ) { - - cubemaps.delete( texture ); - cubemap.dispose(); - - } - - } - - function dispose() { - - cubemaps = new WeakMap(); - - } - - return { - get: get, - dispose: dispose - }; - - } - - function WebGLExtensions( gl ) { - - const extensions = {}; - - return { - - has: function ( name ) { - - if ( extensions[ name ] !== undefined ) { - - return extensions[ name ] !== null; - - } - - let extension; - - switch ( name ) { - - case 'WEBGL_depth_texture': - extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' ); - break; - - case 'EXT_texture_filter_anisotropic': - extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' ); - break; - - case 'WEBGL_compressed_texture_s3tc': - extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' ); - break; - - case 'WEBGL_compressed_texture_pvrtc': - extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' ); - break; - - default: - extension = gl.getExtension( name ); - - } - - extensions[ name ] = extension; - - return extension !== null; - - }, - - get: function ( name ) { - - if ( ! this.has( name ) ) { - - console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' ); - - } - - return extensions[ name ]; - - } - - }; - - } - - function WebGLGeometries( gl, attributes, info, bindingStates ) { - - const geometries = new WeakMap(); - const wireframeAttributes = new WeakMap(); - - function onGeometryDispose( event ) { - - const geometry = event.target; - const buffergeometry = geometries.get( geometry ); - - if ( buffergeometry.index !== null ) { - - attributes.remove( buffergeometry.index ); - - } - - for ( const name in buffergeometry.attributes ) { - - attributes.remove( buffergeometry.attributes[ name ] ); - - } - - geometry.removeEventListener( 'dispose', onGeometryDispose ); - - geometries.delete( geometry ); - - const attribute = wireframeAttributes.get( buffergeometry ); - - if ( attribute ) { - - attributes.remove( attribute ); - wireframeAttributes.delete( buffergeometry ); - - } - - bindingStates.releaseStatesOfGeometry( buffergeometry ); - - if ( geometry.isInstancedBufferGeometry === true ) { - - delete geometry._maxInstanceCount; - - } - - // - - info.memory.geometries --; - - } - - function get( object, geometry ) { - - let buffergeometry = geometries.get( geometry ); - - if ( buffergeometry ) return buffergeometry; - - geometry.addEventListener( 'dispose', onGeometryDispose ); - - if ( geometry.isBufferGeometry ) { - - buffergeometry = geometry; - - } else if ( geometry.isGeometry ) { - - if ( geometry._bufferGeometry === undefined ) { - - geometry._bufferGeometry = new BufferGeometry().setFromObject( object ); - - } - - buffergeometry = geometry._bufferGeometry; - - } - - geometries.set( geometry, buffergeometry ); - - info.memory.geometries ++; - - return buffergeometry; - - } - - function update( geometry ) { - - const geometryAttributes = geometry.attributes; - - // Updating index buffer in VAO now. See WebGLBindingStates. - - for ( const name in geometryAttributes ) { - - attributes.update( geometryAttributes[ name ], 34962 ); - - } - - // morph targets - - const morphAttributes = geometry.morphAttributes; - - for ( const name in morphAttributes ) { - - const array = morphAttributes[ name ]; - - for ( let i = 0, l = array.length; i < l; i ++ ) { - - attributes.update( array[ i ], 34962 ); - - } - - } - - } - - function updateWireframeAttribute( geometry ) { - - const indices = []; - - const geometryIndex = geometry.index; - const geometryPosition = geometry.attributes.position; - let version = 0; - - if ( geometryIndex !== null ) { - - const array = geometryIndex.array; - version = geometryIndex.version; - - for ( let i = 0, l = array.length; i < l; i += 3 ) { - - const a = array[ i + 0 ]; - const b = array[ i + 1 ]; - const c = array[ i + 2 ]; - - indices.push( a, b, b, c, c, a ); - - } - - } else { - - const array = geometryPosition.array; - version = geometryPosition.version; - - for ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) { - - const a = i + 0; - const b = i + 1; - const c = i + 2; - - indices.push( a, b, b, c, c, a ); - - } - - } - - const attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 ); - attribute.version = version; - - // Updating index buffer in VAO now. See WebGLBindingStates - - // - - const previousAttribute = wireframeAttributes.get( geometry ); - - if ( previousAttribute ) attributes.remove( previousAttribute ); - - // - - wireframeAttributes.set( geometry, attribute ); - - } - - function getWireframeAttribute( geometry ) { - - const currentAttribute = wireframeAttributes.get( geometry ); - - if ( currentAttribute ) { - - const geometryIndex = geometry.index; - - if ( geometryIndex !== null ) { - - // if the attribute is obsolete, create a new one - - if ( currentAttribute.version < geometryIndex.version ) { - - updateWireframeAttribute( geometry ); - - } - - } - - } else { - - updateWireframeAttribute( geometry ); - - } - - return wireframeAttributes.get( geometry ); - - } - - return { - - get: get, - update: update, - - getWireframeAttribute: getWireframeAttribute - - }; - - } - - function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) { - - const isWebGL2 = capabilities.isWebGL2; - - let mode; - - function setMode( value ) { - - mode = value; - - } - - let type, bytesPerElement; - - function setIndex( value ) { - - type = value.type; - bytesPerElement = value.bytesPerElement; - - } - - function render( start, count ) { - - gl.drawElements( mode, count, type, start * bytesPerElement ); - - info.update( count, mode, 1 ); - - } - - function renderInstances( start, count, primcount ) { - - if ( primcount === 0 ) return; - - let extension, methodName; - - if ( isWebGL2 ) { - - extension = gl; - methodName = 'drawElementsInstanced'; - - } else { - - extension = extensions.get( 'ANGLE_instanced_arrays' ); - methodName = 'drawElementsInstancedANGLE'; - - if ( extension === null ) { - - console.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); - return; - - } - - } - - extension[ methodName ]( mode, count, type, start * bytesPerElement, primcount ); - - info.update( count, mode, primcount ); - - } - - // - - this.setMode = setMode; - this.setIndex = setIndex; - this.render = render; - this.renderInstances = renderInstances; - - } - - function WebGLInfo( gl ) { - - const memory = { - geometries: 0, - textures: 0 - }; - - const render = { - frame: 0, - calls: 0, - triangles: 0, - points: 0, - lines: 0 - }; - - function update( count, mode, instanceCount ) { - - render.calls ++; - - switch ( mode ) { - - case 4: - render.triangles += instanceCount * ( count / 3 ); - break; - - case 1: - render.lines += instanceCount * ( count / 2 ); - break; - - case 3: - render.lines += instanceCount * ( count - 1 ); - break; - - case 2: - render.lines += instanceCount * count; - break; - - case 0: - render.points += instanceCount * count; - break; - - default: - console.error( 'THREE.WebGLInfo: Unknown draw mode:', mode ); - break; - - } - - } - - function reset() { - - render.frame ++; - render.calls = 0; - render.triangles = 0; - render.points = 0; - render.lines = 0; - - } - - return { - memory: memory, - render: render, - programs: null, - autoReset: true, - reset: reset, - update: update - }; - - } - - function numericalSort( a, b ) { - - return a[ 0 ] - b[ 0 ]; - - } - - function absNumericalSort( a, b ) { - - return Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] ); - - } - - function WebGLMorphtargets( gl ) { - - const influencesList = {}; - const morphInfluences = new Float32Array( 8 ); - - const workInfluences = []; - - for ( let i = 0; i < 8; i ++ ) { - - workInfluences[ i ] = [ i, 0 ]; - - } - - function update( object, geometry, material, program ) { - - const objectInfluences = object.morphTargetInfluences; - - // When object doesn't have morph target influences defined, we treat it as a 0-length array - // This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences - - const length = objectInfluences === undefined ? 0 : objectInfluences.length; - - let influences = influencesList[ geometry.id ]; - - if ( influences === undefined ) { - - // initialise list - - influences = []; - - for ( let i = 0; i < length; i ++ ) { - - influences[ i ] = [ i, 0 ]; - - } - - influencesList[ geometry.id ] = influences; - - } - - // Collect influences - - for ( let i = 0; i < length; i ++ ) { - - const influence = influences[ i ]; - - influence[ 0 ] = i; - influence[ 1 ] = objectInfluences[ i ]; - - } - - influences.sort( absNumericalSort ); - - for ( let i = 0; i < 8; i ++ ) { - - if ( i < length && influences[ i ][ 1 ] ) { - - workInfluences[ i ][ 0 ] = influences[ i ][ 0 ]; - workInfluences[ i ][ 1 ] = influences[ i ][ 1 ]; - - } else { - - workInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER; - workInfluences[ i ][ 1 ] = 0; - - } - - } - - workInfluences.sort( numericalSort ); - - const morphTargets = material.morphTargets && geometry.morphAttributes.position; - const morphNormals = material.morphNormals && geometry.morphAttributes.normal; - - let morphInfluencesSum = 0; - - for ( let i = 0; i < 8; i ++ ) { - - const influence = workInfluences[ i ]; - const index = influence[ 0 ]; - const value = influence[ 1 ]; - - if ( index !== Number.MAX_SAFE_INTEGER && value ) { - - if ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) { - - geometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] ); - - } - - if ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) { - - geometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] ); - - } - - morphInfluences[ i ] = value; - morphInfluencesSum += value; - - } else { - - if ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) { - - geometry.deleteAttribute( 'morphTarget' + i ); - - } - - if ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) { - - geometry.deleteAttribute( 'morphNormal' + i ); - - } - - morphInfluences[ i ] = 0; - - } - - } - - // GLSL shader uses formula baseinfluence * base + sum(target * influence) - // This allows us to switch between absolute morphs and relative morphs without changing shader code - // When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence) - const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum; - - program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence ); - program.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences ); - - } - - return { - - update: update - - }; - - } - - function WebGLObjects( gl, geometries, attributes, info ) { - - let updateMap = new WeakMap(); - - function update( object ) { - - const frame = info.render.frame; - - const geometry = object.geometry; - const buffergeometry = geometries.get( object, geometry ); - - // Update once per frame - - if ( updateMap.get( buffergeometry ) !== frame ) { - - if ( geometry.isGeometry ) { - - buffergeometry.updateFromObject( object ); - - } - - geometries.update( buffergeometry ); - - updateMap.set( buffergeometry, frame ); - - } - - if ( object.isInstancedMesh ) { - - attributes.update( object.instanceMatrix, 34962 ); - - if ( object.instanceColor !== null ) { - - attributes.update( object.instanceColor, 34962 ); - - } - - } - - return buffergeometry; - - } - - function dispose() { - - updateMap = new WeakMap(); - - } - - return { - - update: update, - dispose: dispose - - }; - - } - - function DataTexture2DArray( data = null, width = 1, height = 1, depth = 1 ) { - - Texture.call( this, null ); - - this.image = { data, width, height, depth }; - - this.magFilter = NearestFilter; - this.minFilter = NearestFilter; - - this.wrapR = ClampToEdgeWrapping; - - this.generateMipmaps = false; - this.flipY = false; - - this.needsUpdate = true; - - } - - DataTexture2DArray.prototype = Object.create( Texture.prototype ); - DataTexture2DArray.prototype.constructor = DataTexture2DArray; - DataTexture2DArray.prototype.isDataTexture2DArray = true; - - function DataTexture3D( 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 - - Texture.call( this, null ); - - this.image = { data, width, height, depth }; - - this.magFilter = NearestFilter; - this.minFilter = NearestFilter; - - this.wrapR = ClampToEdgeWrapping; - - this.generateMipmaps = false; - this.flipY = false; - - this.needsUpdate = true; - - - } - - DataTexture3D.prototype = Object.create( Texture.prototype ); - DataTexture3D.prototype.constructor = DataTexture3D; - DataTexture3D.prototype.isDataTexture3D = true; - - /** - * Uniforms of a program. - * Those form a tree structure with a special top-level container for the root, - * which you get by calling 'new WebGLUniforms( gl, program )'. - * - * - * Properties of inner nodes including the top-level container: - * - * .seq - array of nested uniforms - * .map - nested uniforms by name - * - * - * Methods of all nodes except the top-level container: - * - * .setValue( gl, value, [textures] ) - * - * uploads a uniform value(s) - * the 'textures' parameter is needed for sampler uniforms - * - * - * Static methods of the top-level container (textures factorizations): - * - * .upload( gl, seq, values, textures ) - * - * sets uniforms in 'seq' to 'values[id].value' - * - * .seqWithValue( seq, values ) : filteredSeq - * - * filters 'seq' entries with corresponding entry in values - * - * - * Methods of the top-level container (textures factorizations): - * - * .setValue( gl, name, value, textures ) - * - * sets uniform with name 'name' to 'value' - * - * .setOptional( gl, obj, prop ) - * - * like .set for an optional property of the object - * - */ - - const emptyTexture = new Texture(); - const emptyTexture2dArray = new DataTexture2DArray(); - const emptyTexture3d = new DataTexture3D(); - const emptyCubeTexture = new CubeTexture(); - - // --- Utilities --- - - // Array Caches (provide typed arrays for temporary by size) - - const arrayCacheF32 = []; - const arrayCacheI32 = []; - - // Float32Array caches used for uploading Matrix uniforms - - const mat4array = new Float32Array( 16 ); - const mat3array = new Float32Array( 9 ); - const mat2array = new Float32Array( 4 ); - - // Flattening for arrays of vectors and matrices - - function flatten( array, nBlocks, blockSize ) { - - const firstElem = array[ 0 ]; - - if ( firstElem <= 0 || firstElem > 0 ) return array; - // unoptimized: ! isNaN( firstElem ) - // see http://jacksondunstan.com/articles/983 - - const n = nBlocks * blockSize; - let r = arrayCacheF32[ n ]; - - if ( r === undefined ) { - - r = new Float32Array( n ); - arrayCacheF32[ n ] = r; - - } - - if ( nBlocks !== 0 ) { - - firstElem.toArray( r, 0 ); - - for ( let i = 1, offset = 0; i !== nBlocks; ++ i ) { - - offset += blockSize; - array[ i ].toArray( r, offset ); - - } - - } - - return r; - - } - - function arraysEqual( a, b ) { - - if ( a.length !== b.length ) return false; - - for ( let i = 0, l = a.length; i < l; i ++ ) { - - if ( a[ i ] !== b[ i ] ) return false; - - } - - return true; - - } - - function copyArray( a, b ) { - - for ( let i = 0, l = b.length; i < l; i ++ ) { - - a[ i ] = b[ i ]; - - } - - } - - // Texture unit allocation - - function allocTexUnits( textures, n ) { - - let r = arrayCacheI32[ n ]; - - if ( r === undefined ) { - - r = new Int32Array( n ); - arrayCacheI32[ n ] = r; - - } - - for ( let i = 0; i !== n; ++ i ) { - - r[ i ] = textures.allocateTextureUnit(); - - } - - return r; - - } - - // --- Setters --- - - // Note: Defining these methods externally, because they come in a bunch - // and this way their names minify. - - // Single scalar - - function setValueV1f( gl, v ) { - - const cache = this.cache; - - if ( cache[ 0 ] === v ) return; - - gl.uniform1f( this.addr, v ); - - cache[ 0 ] = v; - - } - - // Single float vector (from flat array or THREE.VectorN) - - function setValueV2f( gl, v ) { - - const cache = this.cache; - - if ( v.x !== undefined ) { - - if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) { - - gl.uniform2f( this.addr, v.x, v.y ); - - cache[ 0 ] = v.x; - cache[ 1 ] = v.y; - - } - - } else { - - if ( arraysEqual( cache, v ) ) return; - - gl.uniform2fv( this.addr, v ); - - copyArray( cache, v ); - - } - - } - - function setValueV3f( gl, v ) { - - const cache = this.cache; - - if ( v.x !== undefined ) { - - if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) { - - gl.uniform3f( this.addr, v.x, v.y, v.z ); - - cache[ 0 ] = v.x; - cache[ 1 ] = v.y; - cache[ 2 ] = v.z; - - } - - } else if ( v.r !== undefined ) { - - if ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) { - - gl.uniform3f( this.addr, v.r, v.g, v.b ); - - cache[ 0 ] = v.r; - cache[ 1 ] = v.g; - cache[ 2 ] = v.b; - - } - - } else { - - if ( arraysEqual( cache, v ) ) return; - - gl.uniform3fv( this.addr, v ); - - copyArray( cache, v ); - - } - - } - - function setValueV4f( gl, v ) { - - const cache = this.cache; - - if ( v.x !== undefined ) { - - if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) { - - gl.uniform4f( this.addr, v.x, v.y, v.z, v.w ); - - cache[ 0 ] = v.x; - cache[ 1 ] = v.y; - cache[ 2 ] = v.z; - cache[ 3 ] = v.w; - - } - - } else { - - if ( arraysEqual( cache, v ) ) return; - - gl.uniform4fv( this.addr, v ); - - copyArray( cache, v ); - - } - - } - - // Single matrix (from flat array or MatrixN) - - function setValueM2( gl, v ) { - - const cache = this.cache; - const elements = v.elements; - - if ( elements === undefined ) { - - if ( arraysEqual( cache, v ) ) return; - - gl.uniformMatrix2fv( this.addr, false, v ); - - copyArray( cache, v ); - - } else { - - if ( arraysEqual( cache, elements ) ) return; - - mat2array.set( elements ); - - gl.uniformMatrix2fv( this.addr, false, mat2array ); - - copyArray( cache, elements ); - - } - - } - - function setValueM3( gl, v ) { - - const cache = this.cache; - const elements = v.elements; - - if ( elements === undefined ) { - - if ( arraysEqual( cache, v ) ) return; - - gl.uniformMatrix3fv( this.addr, false, v ); - - copyArray( cache, v ); - - } else { - - if ( arraysEqual( cache, elements ) ) return; - - mat3array.set( elements ); - - gl.uniformMatrix3fv( this.addr, false, mat3array ); - - copyArray( cache, elements ); - - } - - } - - function setValueM4( gl, v ) { - - const cache = this.cache; - const elements = v.elements; - - if ( elements === undefined ) { - - if ( arraysEqual( cache, v ) ) return; - - gl.uniformMatrix4fv( this.addr, false, v ); - - copyArray( cache, v ); - - } else { - - if ( arraysEqual( cache, elements ) ) return; - - mat4array.set( elements ); - - gl.uniformMatrix4fv( this.addr, false, mat4array ); - - copyArray( cache, elements ); - - } - - } - - // Single texture (2D / Cube) - - function setValueT1( gl, v, textures ) { - - const cache = this.cache; - const unit = textures.allocateTextureUnit(); - - if ( cache[ 0 ] !== unit ) { - - gl.uniform1i( this.addr, unit ); - cache[ 0 ] = unit; - - } - - textures.safeSetTexture2D( v || emptyTexture, unit ); - - } - - function setValueT2DArray1( gl, v, textures ) { - - const cache = this.cache; - const unit = textures.allocateTextureUnit(); - - if ( cache[ 0 ] !== unit ) { - - gl.uniform1i( this.addr, unit ); - cache[ 0 ] = unit; - - } - - textures.setTexture2DArray( v || emptyTexture2dArray, unit ); - - } - - function setValueT3D1( gl, v, textures ) { - - const cache = this.cache; - const unit = textures.allocateTextureUnit(); - - if ( cache[ 0 ] !== unit ) { - - gl.uniform1i( this.addr, unit ); - cache[ 0 ] = unit; - - } - - textures.setTexture3D( v || emptyTexture3d, unit ); - - } - - function setValueT6( gl, v, textures ) { - - const cache = this.cache; - const unit = textures.allocateTextureUnit(); - - if ( cache[ 0 ] !== unit ) { - - gl.uniform1i( this.addr, unit ); - cache[ 0 ] = unit; - - } - - textures.safeSetTextureCube( v || emptyCubeTexture, unit ); - - } - - // Integer / Boolean vectors or arrays thereof (always flat arrays) - - function setValueV1i( gl, v ) { - - const cache = this.cache; - - if ( cache[ 0 ] === v ) return; - - gl.uniform1i( this.addr, v ); - - cache[ 0 ] = v; - - } - - function setValueV2i( gl, v ) { - - const cache = this.cache; - - if ( arraysEqual( cache, v ) ) return; - - gl.uniform2iv( this.addr, v ); - - copyArray( cache, v ); - - } - - function setValueV3i( gl, v ) { - - const cache = this.cache; - - if ( arraysEqual( cache, v ) ) return; - - gl.uniform3iv( this.addr, v ); - - copyArray( cache, v ); - - } - - function setValueV4i( gl, v ) { - - const cache = this.cache; - - if ( arraysEqual( cache, v ) ) return; - - gl.uniform4iv( this.addr, v ); - - copyArray( cache, v ); - - } - - // uint - - function setValueV1ui( gl, v ) { - - const cache = this.cache; - - if ( cache[ 0 ] === v ) return; - - gl.uniform1ui( this.addr, v ); - - cache[ 0 ] = v; - - } - - // Helper to pick the right setter for the singular case - - function getSingularSetter( type ) { - - switch ( type ) { - - case 0x1406: return setValueV1f; // FLOAT - case 0x8b50: return setValueV2f; // _VEC2 - case 0x8b51: return setValueV3f; // _VEC3 - case 0x8b52: return setValueV4f; // _VEC4 - - case 0x8b5a: return setValueM2; // _MAT2 - case 0x8b5b: return setValueM3; // _MAT3 - case 0x8b5c: return setValueM4; // _MAT4 - - case 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL - case 0x8b53: case 0x8b57: return setValueV2i; // _VEC2 - case 0x8b54: case 0x8b58: return setValueV3i; // _VEC3 - case 0x8b55: case 0x8b59: return setValueV4i; // _VEC4 - - case 0x1405: return setValueV1ui; // UINT - - case 0x8b5e: // SAMPLER_2D - case 0x8d66: // SAMPLER_EXTERNAL_OES - case 0x8dca: // INT_SAMPLER_2D - case 0x8dd2: // UNSIGNED_INT_SAMPLER_2D - case 0x8b62: // SAMPLER_2D_SHADOW - return setValueT1; - - case 0x8b5f: // SAMPLER_3D - case 0x8dcb: // INT_SAMPLER_3D - case 0x8dd3: // UNSIGNED_INT_SAMPLER_3D - return setValueT3D1; - - case 0x8b60: // SAMPLER_CUBE - case 0x8dcc: // INT_SAMPLER_CUBE - case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE - case 0x8dc5: // SAMPLER_CUBE_SHADOW - return setValueT6; - - case 0x8dc1: // SAMPLER_2D_ARRAY - case 0x8dcf: // INT_SAMPLER_2D_ARRAY - case 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY - case 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW - return setValueT2DArray1; - - } - - } - - // Array of scalars - function setValueV1fArray( gl, v ) { - - gl.uniform1fv( this.addr, v ); - - } - - // Integer / Boolean vectors or arrays thereof (always flat arrays) - function setValueV1iArray( gl, v ) { - - gl.uniform1iv( this.addr, v ); - - } - - function setValueV2iArray( gl, v ) { - - gl.uniform2iv( this.addr, v ); - - } - - function setValueV3iArray( gl, v ) { - - gl.uniform3iv( this.addr, v ); - - } - - function setValueV4iArray( gl, v ) { - - gl.uniform4iv( this.addr, v ); - - } - - - // Array of vectors (flat or from THREE classes) - - function setValueV2fArray( gl, v ) { - - const data = flatten( v, this.size, 2 ); - - gl.uniform2fv( this.addr, data ); - - } - - function setValueV3fArray( gl, v ) { - - const data = flatten( v, this.size, 3 ); - - gl.uniform3fv( this.addr, data ); - - } - - function setValueV4fArray( gl, v ) { - - const data = flatten( v, this.size, 4 ); - - gl.uniform4fv( this.addr, data ); - - } - - // Array of matrices (flat or from THREE clases) - - function setValueM2Array( gl, v ) { - - const data = flatten( v, this.size, 4 ); - - gl.uniformMatrix2fv( this.addr, false, data ); - - } - - function setValueM3Array( gl, v ) { - - const data = flatten( v, this.size, 9 ); - - gl.uniformMatrix3fv( this.addr, false, data ); - - } - - function setValueM4Array( gl, v ) { - - const data = flatten( v, this.size, 16 ); - - gl.uniformMatrix4fv( this.addr, false, data ); - - } - - // Array of textures (2D / Cube) - - function setValueT1Array( gl, v, textures ) { - - const n = v.length; - - const units = allocTexUnits( textures, n ); - - gl.uniform1iv( this.addr, units ); - - for ( let i = 0; i !== n; ++ i ) { - - textures.safeSetTexture2D( v[ i ] || emptyTexture, units[ i ] ); - - } - - } - - function setValueT6Array( gl, v, textures ) { - - const n = v.length; - - const units = allocTexUnits( textures, n ); - - gl.uniform1iv( this.addr, units ); - - for ( let i = 0; i !== n; ++ i ) { - - textures.safeSetTextureCube( v[ i ] || emptyCubeTexture, units[ i ] ); - - } - - } - - // Helper to pick the right setter for a pure (bottom-level) array - - function getPureArraySetter( type ) { - - switch ( type ) { - - case 0x1406: return setValueV1fArray; // FLOAT - case 0x8b50: return setValueV2fArray; // _VEC2 - case 0x8b51: return setValueV3fArray; // _VEC3 - case 0x8b52: return setValueV4fArray; // _VEC4 - - case 0x8b5a: return setValueM2Array; // _MAT2 - case 0x8b5b: return setValueM3Array; // _MAT3 - case 0x8b5c: return setValueM4Array; // _MAT4 - - case 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL - case 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2 - case 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3 - case 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4 - - case 0x8b5e: // SAMPLER_2D - case 0x8d66: // SAMPLER_EXTERNAL_OES - case 0x8dca: // INT_SAMPLER_2D - case 0x8dd2: // UNSIGNED_INT_SAMPLER_2D - case 0x8b62: // SAMPLER_2D_SHADOW - return setValueT1Array; - - case 0x8b60: // SAMPLER_CUBE - case 0x8dcc: // INT_SAMPLER_CUBE - case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE - case 0x8dc5: // SAMPLER_CUBE_SHADOW - return setValueT6Array; - - } - - } - - // --- Uniform Classes --- - - function SingleUniform( id, activeInfo, addr ) { - - this.id = id; - this.addr = addr; - this.cache = []; - this.setValue = getSingularSetter( activeInfo.type ); - - // this.path = activeInfo.name; // DEBUG - - } - - function PureArrayUniform( id, activeInfo, addr ) { - - this.id = id; - this.addr = addr; - this.cache = []; - this.size = activeInfo.size; - this.setValue = getPureArraySetter( activeInfo.type ); - - // this.path = activeInfo.name; // DEBUG - - } - - PureArrayUniform.prototype.updateCache = function ( data ) { - - const cache = this.cache; - - if ( data instanceof Float32Array && cache.length !== data.length ) { - - this.cache = new Float32Array( data.length ); - - } - - copyArray( cache, data ); - - }; - - function StructuredUniform( id ) { - - this.id = id; - - this.seq = []; - this.map = {}; - - } - - StructuredUniform.prototype.setValue = function ( gl, value, textures ) { - - const seq = this.seq; - - for ( let i = 0, n = seq.length; i !== n; ++ i ) { - - const u = seq[ i ]; - u.setValue( gl, value[ u.id ], textures ); - - } - - }; - - // --- Top-level --- - - // Parser - builds up the property tree from the path strings - - const RePathPart = /([\w\d_]+)(\])?(\[|\.)?/g; - - // extracts - // - the identifier (member name or array index) - // - followed by an optional right bracket (found when array index) - // - followed by an optional left bracket or dot (type of subscript) - // - // Note: These portions can be read in a non-overlapping fashion and - // allow straightforward parsing of the hierarchy that WebGL encodes - // in the uniform names. - - function addUniform( container, uniformObject ) { - - container.seq.push( uniformObject ); - container.map[ uniformObject.id ] = uniformObject; - - } - - function parseUniform( activeInfo, addr, container ) { - - const path = activeInfo.name, - pathLength = path.length; - - // reset RegExp object, because of the early exit of a previous run - RePathPart.lastIndex = 0; - - while ( true ) { - - const match = RePathPart.exec( path ), - matchEnd = RePathPart.lastIndex; - - let id = match[ 1 ]; - const idIsIndex = match[ 2 ] === ']', - subscript = match[ 3 ]; - - if ( idIsIndex ) id = id | 0; // convert to integer - - if ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) { - - // bare name or "pure" bottom-level array "[0]" suffix - - addUniform( container, subscript === undefined ? - new SingleUniform( id, activeInfo, addr ) : - new PureArrayUniform( id, activeInfo, addr ) ); - - break; - - } else { - - // step into inner node / create it in case it doesn't exist - - const map = container.map; - let next = map[ id ]; - - if ( next === undefined ) { - - next = new StructuredUniform( id ); - addUniform( container, next ); - - } - - container = next; - - } - - } - - } - - // Root Container - - function WebGLUniforms( gl, program ) { - - this.seq = []; - this.map = {}; - - const n = gl.getProgramParameter( program, 35718 ); - - for ( let i = 0; i < n; ++ i ) { - - const info = gl.getActiveUniform( program, i ), - addr = gl.getUniformLocation( program, info.name ); - - parseUniform( info, addr, this ); - - } - - } - - WebGLUniforms.prototype.setValue = function ( gl, name, value, textures ) { - - const u = this.map[ name ]; - - if ( u !== undefined ) u.setValue( gl, value, textures ); - - }; - - WebGLUniforms.prototype.setOptional = function ( gl, object, name ) { - - const v = object[ name ]; - - if ( v !== undefined ) this.setValue( gl, name, v ); - - }; - - - // Static interface - - WebGLUniforms.upload = function ( gl, seq, values, textures ) { - - for ( let i = 0, n = seq.length; i !== n; ++ i ) { - - const u = seq[ i ], - v = values[ u.id ]; - - if ( v.needsUpdate !== false ) { - - // note: always updating when .needsUpdate is undefined - u.setValue( gl, v.value, textures ); - - } - - } - - }; - - WebGLUniforms.seqWithValue = function ( seq, values ) { - - const r = []; - - for ( let i = 0, n = seq.length; i !== n; ++ i ) { - - const u = seq[ i ]; - if ( u.id in values ) r.push( u ); - - } - - return r; - - }; - - function WebGLShader( gl, type, string ) { - - const shader = gl.createShader( type ); - - gl.shaderSource( shader, string ); - gl.compileShader( shader ); - - return shader; - - } - - let programIdCount = 0; - - function addLineNumbers( string ) { - - const lines = string.split( '\n' ); - - for ( let i = 0; i < lines.length; i ++ ) { - - lines[ i ] = ( i + 1 ) + ': ' + lines[ i ]; - - } - - return lines.join( '\n' ); - - } - - function getEncodingComponents( encoding ) { - - switch ( encoding ) { - - case LinearEncoding: - return [ 'Linear', '( value )' ]; - case sRGBEncoding: - return [ 'sRGB', '( value )' ]; - case RGBEEncoding: - return [ 'RGBE', '( value )' ]; - case RGBM7Encoding: - return [ 'RGBM', '( value, 7.0 )' ]; - case RGBM16Encoding: - return [ 'RGBM', '( value, 16.0 )' ]; - case RGBDEncoding: - return [ 'RGBD', '( value, 256.0 )' ]; - case GammaEncoding: - return [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ]; - case LogLuvEncoding: - return [ 'LogLuv', '( value )' ]; - default: - console.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding ); - return [ 'Linear', '( value )' ]; - - } - - } - - function getShaderErrors( gl, shader, type ) { - - const status = gl.getShaderParameter( shader, 35713 ); - const log = gl.getShaderInfoLog( shader ).trim(); - - if ( status && log === '' ) return ''; - - // --enable-privileged-webgl-extension - // console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) ); - - const source = gl.getShaderSource( shader ); - - return 'THREE.WebGLShader: gl.getShaderInfoLog() ' + type + '\n' + log + addLineNumbers( source ); - - } - - function getTexelDecodingFunction( functionName, encoding ) { - - const components = getEncodingComponents( encoding ); - return 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }'; - - } - - function getTexelEncodingFunction( functionName, encoding ) { - - const components = getEncodingComponents( encoding ); - return 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }'; - - } - - function getToneMappingFunction( functionName, toneMapping ) { - - let toneMappingName; - - switch ( toneMapping ) { - - case LinearToneMapping: - toneMappingName = 'Linear'; - break; - - case ReinhardToneMapping: - toneMappingName = 'Reinhard'; - break; - - case CineonToneMapping: - toneMappingName = 'OptimizedCineon'; - break; - - case ACESFilmicToneMapping: - toneMappingName = 'ACESFilmic'; - break; - - case CustomToneMapping: - toneMappingName = 'Custom'; - break; - - default: - console.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping ); - toneMappingName = 'Linear'; - - } - - return 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }'; - - } - - function generateExtensions( parameters ) { - - const chunks = [ - ( parameters.extensionDerivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '', - ( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '', - ( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '', - ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : '' - ]; - - return chunks.filter( filterEmptyLine ).join( '\n' ); - - } - - function generateDefines( defines ) { - - const chunks = []; - - for ( const name in defines ) { - - const value = defines[ name ]; - - if ( value === false ) continue; - - chunks.push( '#define ' + name + ' ' + value ); - - } - - return chunks.join( '\n' ); - - } - - function fetchAttributeLocations( gl, program ) { - - const attributes = {}; - - const n = gl.getProgramParameter( program, 35721 ); - - for ( let i = 0; i < n; i ++ ) { - - const info = gl.getActiveAttrib( program, i ); - const name = info.name; - - // console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i ); - - attributes[ name ] = gl.getAttribLocation( program, name ); - - } - - return attributes; - - } - - function filterEmptyLine( string ) { - - return string !== ''; - - } - - function replaceLightNums( string, parameters ) { - - return string - .replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights ) - .replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights ) - .replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights ) - .replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights ) - .replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights ) - .replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows ) - .replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows ) - .replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows ); - - } - - function replaceClippingPlaneNums( string, parameters ) { - - return string - .replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes ) - .replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) ); - - } - - // Resolve Includes - - const includePattern = /^[ \t]*#include +<([\w\d./]+)>/gm; - - function resolveIncludes( string ) { - - return string.replace( includePattern, includeReplacer ); - - } - - function includeReplacer( match, include ) { - - const string = ShaderChunk[ include ]; - - if ( string === undefined ) { - - throw new Error( 'Can not resolve #include <' + include + '>' ); - - } - - return resolveIncludes( string ); - - } - - // Unroll Loops - - const deprecatedUnrollLoopPattern = /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g; - const unrollLoopPattern = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g; - - function unrollLoops( string ) { - - return string - .replace( unrollLoopPattern, loopReplacer ) - .replace( deprecatedUnrollLoopPattern, deprecatedLoopReplacer ); - - } - - function deprecatedLoopReplacer( match, start, end, snippet ) { - - console.warn( 'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.' ); - return loopReplacer( match, start, end, snippet ); - - } - - function loopReplacer( match, start, end, snippet ) { - - let string = ''; - - for ( let i = parseInt( start ); i < parseInt( end ); i ++ ) { - - string += snippet - .replace( /\[\s*i\s*\]/g, '[ ' + i + ' ]' ) - .replace( /UNROLLED_LOOP_INDEX/g, i ); - - } - - return string; - - } - - // - - function generatePrecision( parameters ) { - - let precisionstring = "precision " + parameters.precision + " float;\nprecision " + parameters.precision + " int;"; - - if ( parameters.precision === "highp" ) { - - precisionstring += "\n#define HIGH_PRECISION"; - - } else if ( parameters.precision === "mediump" ) { - - precisionstring += "\n#define MEDIUM_PRECISION"; - - } else if ( parameters.precision === "lowp" ) { - - precisionstring += "\n#define LOW_PRECISION"; - - } - - return precisionstring; - - } - - function generateShadowMapTypeDefine( parameters ) { - - let shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC'; - - if ( parameters.shadowMapType === PCFShadowMap ) { - - shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF'; - - } else if ( parameters.shadowMapType === PCFSoftShadowMap ) { - - shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT'; - - } else if ( parameters.shadowMapType === VSMShadowMap ) { - - shadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM'; - - } - - return shadowMapTypeDefine; - - } - - function generateEnvMapTypeDefine( parameters ) { - - let envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; - - if ( parameters.envMap ) { - - switch ( parameters.envMapMode ) { - - case CubeReflectionMapping: - case CubeRefractionMapping: - envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; - break; - - case CubeUVReflectionMapping: - case CubeUVRefractionMapping: - envMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV'; - break; - - } - - } - - return envMapTypeDefine; - - } - - function generateEnvMapModeDefine( parameters ) { - - let envMapModeDefine = 'ENVMAP_MODE_REFLECTION'; - - if ( parameters.envMap ) { - - switch ( parameters.envMapMode ) { - - case CubeRefractionMapping: - case CubeUVRefractionMapping: - - envMapModeDefine = 'ENVMAP_MODE_REFRACTION'; - break; - - } - - } - - return envMapModeDefine; - - } - - function generateEnvMapBlendingDefine( parameters ) { - - let envMapBlendingDefine = 'ENVMAP_BLENDING_NONE'; - - if ( parameters.envMap ) { - - switch ( parameters.combine ) { - - case MultiplyOperation: - envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY'; - break; - - case MixOperation: - envMapBlendingDefine = 'ENVMAP_BLENDING_MIX'; - break; - - case AddOperation: - envMapBlendingDefine = 'ENVMAP_BLENDING_ADD'; - break; - - } - - } - - return envMapBlendingDefine; - - } - - function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) { - - const gl = renderer.getContext(); - - const defines = parameters.defines; - - let vertexShader = parameters.vertexShader; - let fragmentShader = parameters.fragmentShader; - - const shadowMapTypeDefine = generateShadowMapTypeDefine( parameters ); - const envMapTypeDefine = generateEnvMapTypeDefine( parameters ); - const envMapModeDefine = generateEnvMapModeDefine( parameters ); - const envMapBlendingDefine = generateEnvMapBlendingDefine( parameters ); - - - const gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0; - - const customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters ); - - const customDefines = generateDefines( defines ); - - const program = gl.createProgram(); - - let prefixVertex, prefixFragment; - let versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + "\n" : ''; - - if ( parameters.isRawShaderMaterial ) { - - prefixVertex = [ - - customDefines - - ].filter( filterEmptyLine ).join( '\n' ); - - if ( prefixVertex.length > 0 ) { - - prefixVertex += '\n'; - - } - - prefixFragment = [ - - customExtensions, - customDefines - - ].filter( filterEmptyLine ).join( '\n' ); - - if ( prefixFragment.length > 0 ) { - - prefixFragment += '\n'; - - } - - } else { - - prefixVertex = [ - - generatePrecision( parameters ), - - '#define SHADER_NAME ' + parameters.shaderName, - - customDefines, - - parameters.instancing ? '#define USE_INSTANCING' : '', - parameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '', - - parameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '', - - '#define GAMMA_FACTOR ' + gammaFactorDefine, - - '#define MAX_BONES ' + parameters.maxBones, - ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', - ( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '', - - parameters.map ? '#define USE_MAP' : '', - parameters.envMap ? '#define USE_ENVMAP' : '', - parameters.envMap ? '#define ' + envMapModeDefine : '', - parameters.lightMap ? '#define USE_LIGHTMAP' : '', - parameters.aoMap ? '#define USE_AOMAP' : '', - parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', - parameters.bumpMap ? '#define USE_BUMPMAP' : '', - parameters.normalMap ? '#define USE_NORMALMAP' : '', - ( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '', - ( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '', - - parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', - parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', - parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', - parameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '', - parameters.specularMap ? '#define USE_SPECULARMAP' : '', - parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', - parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', - parameters.alphaMap ? '#define USE_ALPHAMAP' : '', - parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', - - parameters.vertexTangents ? '#define USE_TANGENT' : '', - parameters.vertexColors ? '#define USE_COLOR' : '', - parameters.vertexUvs ? '#define USE_UV' : '', - parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', - - parameters.flatShading ? '#define FLAT_SHADED' : '', - - parameters.skinning ? '#define USE_SKINNING' : '', - parameters.useVertexTexture ? '#define BONE_TEXTURE' : '', - - parameters.morphTargets ? '#define USE_MORPHTARGETS' : '', - parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '', - parameters.doubleSided ? '#define DOUBLE_SIDED' : '', - parameters.flipSided ? '#define FLIP_SIDED' : '', - - parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', - parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', - - parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '', - - parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', - ( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '', - - 'uniform mat4 modelMatrix;', - 'uniform mat4 modelViewMatrix;', - 'uniform mat4 projectionMatrix;', - 'uniform mat4 viewMatrix;', - 'uniform mat3 normalMatrix;', - 'uniform vec3 cameraPosition;', - 'uniform bool isOrthographic;', - - '#ifdef USE_INSTANCING', - - ' attribute mat4 instanceMatrix;', - - '#endif', - - '#ifdef USE_INSTANCING_COLOR', - - ' attribute vec3 instanceColor;', - - '#endif', - - 'attribute vec3 position;', - 'attribute vec3 normal;', - 'attribute vec2 uv;', - - '#ifdef USE_TANGENT', - - ' attribute vec4 tangent;', - - '#endif', - - '#ifdef USE_COLOR', - - ' attribute vec3 color;', - - '#endif', - - '#ifdef USE_MORPHTARGETS', - - ' attribute vec3 morphTarget0;', - ' attribute vec3 morphTarget1;', - ' attribute vec3 morphTarget2;', - ' attribute vec3 morphTarget3;', - - ' #ifdef USE_MORPHNORMALS', - - ' attribute vec3 morphNormal0;', - ' attribute vec3 morphNormal1;', - ' attribute vec3 morphNormal2;', - ' attribute vec3 morphNormal3;', - - ' #else', - - ' attribute vec3 morphTarget4;', - ' attribute vec3 morphTarget5;', - ' attribute vec3 morphTarget6;', - ' attribute vec3 morphTarget7;', - - ' #endif', - - '#endif', - - '#ifdef USE_SKINNING', - - ' attribute vec4 skinIndex;', - ' attribute vec4 skinWeight;', - - '#endif', - - '\n' - - ].filter( filterEmptyLine ).join( '\n' ); - - prefixFragment = [ - - customExtensions, - - generatePrecision( parameters ), - - '#define SHADER_NAME ' + parameters.shaderName, - - customDefines, - - parameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest + ( parameters.alphaTest % 1 ? '' : '.0' ) : '', // add '.0' if integer - - '#define GAMMA_FACTOR ' + gammaFactorDefine, - - ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', - ( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '', - - parameters.map ? '#define USE_MAP' : '', - parameters.matcap ? '#define USE_MATCAP' : '', - parameters.envMap ? '#define USE_ENVMAP' : '', - parameters.envMap ? '#define ' + envMapTypeDefine : '', - parameters.envMap ? '#define ' + envMapModeDefine : '', - parameters.envMap ? '#define ' + envMapBlendingDefine : '', - parameters.lightMap ? '#define USE_LIGHTMAP' : '', - parameters.aoMap ? '#define USE_AOMAP' : '', - parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', - parameters.bumpMap ? '#define USE_BUMPMAP' : '', - parameters.normalMap ? '#define USE_NORMALMAP' : '', - ( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '', - ( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '', - parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', - parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', - parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', - parameters.specularMap ? '#define USE_SPECULARMAP' : '', - parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', - parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', - parameters.alphaMap ? '#define USE_ALPHAMAP' : '', - - parameters.sheen ? '#define USE_SHEEN' : '', - parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', - - parameters.vertexTangents ? '#define USE_TANGENT' : '', - parameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '', - parameters.vertexUvs ? '#define USE_UV' : '', - parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', - - parameters.gradientMap ? '#define USE_GRADIENTMAP' : '', - - parameters.flatShading ? '#define FLAT_SHADED' : '', - - parameters.doubleSided ? '#define DOUBLE_SIDED' : '', - parameters.flipSided ? '#define FLIP_SIDED' : '', - - parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', - parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', - - parameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '', - - parameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '', - - parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', - ( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '', - - ( ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ) ? '#define TEXTURE_LOD_EXT' : '', - - 'uniform mat4 viewMatrix;', - 'uniform vec3 cameraPosition;', - 'uniform bool isOrthographic;', - - ( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '', - ( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below - ( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '', - - parameters.dithering ? '#define DITHERING' : '', - - ShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below - parameters.map ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '', - parameters.matcap ? getTexelDecodingFunction( 'matcapTexelToLinear', parameters.matcapEncoding ) : '', - parameters.envMap ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '', - parameters.emissiveMap ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '', - parameters.lightMap ? getTexelDecodingFunction( 'lightMapTexelToLinear', parameters.lightMapEncoding ) : '', - getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ), - - parameters.depthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '', - - '\n' - - ].filter( filterEmptyLine ).join( '\n' ); - - } - - vertexShader = resolveIncludes( vertexShader ); - vertexShader = replaceLightNums( vertexShader, parameters ); - vertexShader = replaceClippingPlaneNums( vertexShader, parameters ); - - fragmentShader = resolveIncludes( fragmentShader ); - fragmentShader = replaceLightNums( fragmentShader, parameters ); - fragmentShader = replaceClippingPlaneNums( fragmentShader, parameters ); - - vertexShader = unrollLoops( vertexShader ); - fragmentShader = unrollLoops( fragmentShader ); - - if ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) { - - // GLSL 3.0 conversion for built-in materials and ShaderMaterial - - versionString = '#version 300 es\n'; - - prefixVertex = [ - '#define attribute in', - '#define varying out', - '#define texture2D texture' - ].join( '\n' ) + '\n' + prefixVertex; - - prefixFragment = [ - '#define varying in', - ( parameters.glslVersion === GLSL3 ) ? '' : 'out highp vec4 pc_fragColor;', - ( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor', - '#define gl_FragDepthEXT gl_FragDepth', - '#define texture2D texture', - '#define textureCube texture', - '#define texture2DProj textureProj', - '#define texture2DLodEXT textureLod', - '#define texture2DProjLodEXT textureProjLod', - '#define textureCubeLodEXT textureLod', - '#define texture2DGradEXT textureGrad', - '#define texture2DProjGradEXT textureProjGrad', - '#define textureCubeGradEXT textureGrad' - ].join( '\n' ) + '\n' + prefixFragment; - - } - - const vertexGlsl = versionString + prefixVertex + vertexShader; - const fragmentGlsl = versionString + prefixFragment + fragmentShader; - - // console.log( '*VERTEX*', vertexGlsl ); - // console.log( '*FRAGMENT*', fragmentGlsl ); - - const glVertexShader = WebGLShader( gl, 35633, vertexGlsl ); - const glFragmentShader = WebGLShader( gl, 35632, fragmentGlsl ); - - gl.attachShader( program, glVertexShader ); - gl.attachShader( program, glFragmentShader ); - - // Force a particular attribute to index 0. - - if ( parameters.index0AttributeName !== undefined ) { - - gl.bindAttribLocation( program, 0, parameters.index0AttributeName ); - - } else if ( parameters.morphTargets === true ) { - - // programs with morphTargets displace position out of attribute 0 - gl.bindAttribLocation( program, 0, 'position' ); - - } - - gl.linkProgram( program ); - - // check for link errors - if ( renderer.debug.checkShaderErrors ) { - - const programLog = gl.getProgramInfoLog( program ).trim(); - const vertexLog = gl.getShaderInfoLog( glVertexShader ).trim(); - const fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim(); - - let runnable = true; - let haveDiagnostics = true; - - if ( gl.getProgramParameter( program, 35714 ) === false ) { - - runnable = false; - - const vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' ); - const fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' ); - - console.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), '35715', gl.getProgramParameter( program, 35715 ), 'gl.getProgramInfoLog', programLog, vertexErrors, fragmentErrors ); - - } else if ( programLog !== '' ) { - - console.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog ); - - } else if ( vertexLog === '' || fragmentLog === '' ) { - - haveDiagnostics = false; - - } - - if ( haveDiagnostics ) { - - this.diagnostics = { - - runnable: runnable, - - programLog: programLog, - - vertexShader: { - - log: vertexLog, - prefix: prefixVertex - - }, - - fragmentShader: { - - log: fragmentLog, - prefix: prefixFragment - - } - - }; - - } - - } - - // Clean up - - // Crashes in iOS9 and iOS10. #18402 - // gl.detachShader( program, glVertexShader ); - // gl.detachShader( program, glFragmentShader ); - - gl.deleteShader( glVertexShader ); - gl.deleteShader( glFragmentShader ); - - // set up caching for uniform locations - - let cachedUniforms; - - this.getUniforms = function () { - - if ( cachedUniforms === undefined ) { - - cachedUniforms = new WebGLUniforms( gl, program ); - - } - - return cachedUniforms; - - }; - - // set up caching for attribute locations - - let cachedAttributes; - - this.getAttributes = function () { - - if ( cachedAttributes === undefined ) { - - cachedAttributes = fetchAttributeLocations( gl, program ); - - } - - return cachedAttributes; - - }; - - // free resource - - this.destroy = function () { - - bindingStates.releaseStatesOfProgram( this ); - - gl.deleteProgram( program ); - this.program = undefined; - - }; - - // - - this.name = parameters.shaderName; - this.id = programIdCount ++; - this.cacheKey = cacheKey; - this.usedTimes = 1; - this.program = program; - this.vertexShader = glVertexShader; - this.fragmentShader = glFragmentShader; - - return this; - - } - - function WebGLPrograms( renderer, cubemaps, extensions, capabilities, bindingStates, clipping ) { - - const programs = []; - - const isWebGL2 = capabilities.isWebGL2; - const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer; - const floatVertexTextures = capabilities.floatVertexTextures; - const maxVertexUniforms = capabilities.maxVertexUniforms; - const vertexTextures = capabilities.vertexTextures; - - let precision = capabilities.precision; - - const shaderIDs = { - MeshDepthMaterial: 'depth', - MeshDistanceMaterial: 'distanceRGBA', - MeshNormalMaterial: 'normal', - MeshBasicMaterial: 'basic', - MeshLambertMaterial: 'lambert', - MeshPhongMaterial: 'phong', - MeshToonMaterial: 'toon', - MeshStandardMaterial: 'physical', - MeshPhysicalMaterial: 'physical', - MeshMatcapMaterial: 'matcap', - LineBasicMaterial: 'basic', - LineDashedMaterial: 'dashed', - PointsMaterial: 'points', - ShadowMaterial: 'shadow', - SpriteMaterial: 'sprite' - }; - - const parameterNames = [ - "precision", "isWebGL2", "supportsVertexTextures", "outputEncoding", "instancing", "instancingColor", - "map", "mapEncoding", "matcap", "matcapEncoding", "envMap", "envMapMode", "envMapEncoding", "envMapCubeUV", - "lightMap", "lightMapEncoding", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "objectSpaceNormalMap", "tangentSpaceNormalMap", "clearcoatMap", "clearcoatRoughnessMap", "clearcoatNormalMap", "displacementMap", "specularMap", - "roughnessMap", "metalnessMap", "gradientMap", - "alphaMap", "combine", "vertexColors", "vertexTangents", "vertexUvs", "uvsVertexOnly", "fog", "useFog", "fogExp2", - "flatShading", "sizeAttenuation", "logarithmicDepthBuffer", "skinning", - "maxBones", "useVertexTexture", "morphTargets", "morphNormals", - "maxMorphTargets", "maxMorphNormals", "premultipliedAlpha", - "numDirLights", "numPointLights", "numSpotLights", "numHemiLights", "numRectAreaLights", - "numDirLightShadows", "numPointLightShadows", "numSpotLightShadows", - "shadowMapEnabled", "shadowMapType", "toneMapping", 'physicallyCorrectLights', - "alphaTest", "doubleSided", "flipSided", "numClippingPlanes", "numClipIntersection", "depthPacking", "dithering", - "sheen", "transmissionMap" - ]; - - function getMaxBones( object ) { - - const skeleton = object.skeleton; - const bones = skeleton.bones; - - if ( floatVertexTextures ) { - - return 1024; - - } else { - - // default for when object is not specified - // ( for example when prebuilding shader to be used with multiple objects ) - // - // - leave some extra space for other uniforms - // - limit here is ANGLE's 254 max uniform vectors - // (up to 54 should be safe) - - const nVertexUniforms = maxVertexUniforms; - const nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 ); - - const maxBones = Math.min( nVertexMatrices, bones.length ); - - if ( maxBones < bones.length ) { - - console.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' ); - return 0; - - } - - return maxBones; - - } - - } - - function getTextureEncodingFromMap( map ) { - - let encoding; - - if ( ! map ) { - - encoding = LinearEncoding; - - } else if ( map.isTexture ) { - - encoding = map.encoding; - - } else if ( map.isWebGLRenderTarget ) { - - console.warn( "THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead." ); - encoding = map.texture.encoding; - - } - - return encoding; - - } - - function getParameters( material, lights, shadows, scene, object ) { - - const fog = scene.fog; - const environment = material.isMeshStandardMaterial ? scene.environment : null; - - const envMap = cubemaps.get( material.envMap || environment ); - - const shaderID = shaderIDs[ material.type ]; - - // heuristics to create shader parameters according to lights in the scene - // (not to blow over maxLights budget) - - const maxBones = object.isSkinnedMesh ? getMaxBones( object ) : 0; - - if ( material.precision !== null ) { - - precision = capabilities.getMaxPrecision( material.precision ); - - if ( precision !== material.precision ) { - - console.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' ); - - } - - } - - let vertexShader, fragmentShader; - - if ( shaderID ) { - - const shader = ShaderLib[ shaderID ]; - - vertexShader = shader.vertexShader; - fragmentShader = shader.fragmentShader; - - } else { - - vertexShader = material.vertexShader; - fragmentShader = material.fragmentShader; - - } - - const currentRenderTarget = renderer.getRenderTarget(); - - const parameters = { - - isWebGL2: isWebGL2, - - shaderID: shaderID, - shaderName: material.type, - - vertexShader: vertexShader, - fragmentShader: fragmentShader, - defines: material.defines, - - isRawShaderMaterial: material.isRawShaderMaterial === true, - glslVersion: material.glslVersion, - - precision: precision, - - instancing: object.isInstancedMesh === true, - instancingColor: object.isInstancedMesh === true && object.instanceColor !== null, - - supportsVertexTextures: vertexTextures, - outputEncoding: ( currentRenderTarget !== null ) ? getTextureEncodingFromMap( currentRenderTarget.texture ) : renderer.outputEncoding, - map: !! material.map, - mapEncoding: getTextureEncodingFromMap( material.map ), - matcap: !! material.matcap, - matcapEncoding: getTextureEncodingFromMap( material.matcap ), - envMap: !! envMap, - envMapMode: envMap && envMap.mapping, - envMapEncoding: getTextureEncodingFromMap( envMap ), - envMapCubeUV: ( !! envMap ) && ( ( envMap.mapping === CubeUVReflectionMapping ) || ( envMap.mapping === CubeUVRefractionMapping ) ), - lightMap: !! material.lightMap, - lightMapEncoding: getTextureEncodingFromMap( material.lightMap ), - aoMap: !! material.aoMap, - emissiveMap: !! material.emissiveMap, - emissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap ), - bumpMap: !! material.bumpMap, - normalMap: !! material.normalMap, - objectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap, - tangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap, - clearcoatMap: !! material.clearcoatMap, - clearcoatRoughnessMap: !! material.clearcoatRoughnessMap, - clearcoatNormalMap: !! material.clearcoatNormalMap, - displacementMap: !! material.displacementMap, - roughnessMap: !! material.roughnessMap, - metalnessMap: !! material.metalnessMap, - specularMap: !! material.specularMap, - alphaMap: !! material.alphaMap, - - gradientMap: !! material.gradientMap, - - sheen: !! material.sheen, - - transmissionMap: !! material.transmissionMap, - - combine: material.combine, - - vertexTangents: ( material.normalMap && material.vertexTangents ), - vertexColors: material.vertexColors, - vertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmissionMap, - uvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.transmissionMap ) && !! material.displacementMap, - - fog: !! fog, - useFog: material.fog, - fogExp2: ( fog && fog.isFogExp2 ), - - flatShading: material.flatShading, - - sizeAttenuation: material.sizeAttenuation, - logarithmicDepthBuffer: logarithmicDepthBuffer, - - skinning: material.skinning && maxBones > 0, - maxBones: maxBones, - useVertexTexture: floatVertexTextures, - - morphTargets: material.morphTargets, - morphNormals: material.morphNormals, - maxMorphTargets: renderer.maxMorphTargets, - maxMorphNormals: renderer.maxMorphNormals, - - numDirLights: lights.directional.length, - numPointLights: lights.point.length, - numSpotLights: lights.spot.length, - numRectAreaLights: lights.rectArea.length, - numHemiLights: lights.hemi.length, - - numDirLightShadows: lights.directionalShadowMap.length, - numPointLightShadows: lights.pointShadowMap.length, - numSpotLightShadows: lights.spotShadowMap.length, - - numClippingPlanes: clipping.numPlanes, - numClipIntersection: clipping.numIntersection, - - dithering: material.dithering, - - shadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0, - shadowMapType: renderer.shadowMap.type, - - toneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping, - physicallyCorrectLights: renderer.physicallyCorrectLights, - - premultipliedAlpha: material.premultipliedAlpha, - - alphaTest: material.alphaTest, - doubleSided: material.side === DoubleSide, - flipSided: material.side === BackSide, - - depthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false, - - index0AttributeName: material.index0AttributeName, - - extensionDerivatives: material.extensions && material.extensions.derivatives, - extensionFragDepth: material.extensions && material.extensions.fragDepth, - extensionDrawBuffers: material.extensions && material.extensions.drawBuffers, - extensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD, - - rendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ), - rendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ), - rendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ), - - customProgramCacheKey: material.customProgramCacheKey() - - }; - - return parameters; - - } - - function getProgramCacheKey( parameters ) { - - const array = []; - - if ( parameters.shaderID ) { - - array.push( parameters.shaderID ); - - } else { - - array.push( parameters.fragmentShader ); - array.push( parameters.vertexShader ); - - } - - if ( parameters.defines !== undefined ) { - - for ( const name in parameters.defines ) { - - array.push( name ); - array.push( parameters.defines[ name ] ); - - } - - } - - if ( parameters.isRawShaderMaterial === false ) { - - for ( let i = 0; i < parameterNames.length; i ++ ) { - - array.push( parameters[ parameterNames[ i ] ] ); - - } - - array.push( renderer.outputEncoding ); - array.push( renderer.gammaFactor ); - - } - - array.push( parameters.customProgramCacheKey ); - - return array.join(); - - } - - function getUniforms( material ) { - - const shaderID = shaderIDs[ material.type ]; - let uniforms; - - if ( shaderID ) { - - const shader = ShaderLib[ shaderID ]; - uniforms = UniformsUtils.clone( shader.uniforms ); - - } else { - - uniforms = material.uniforms; - - } - - return uniforms; - - } - - function acquireProgram( parameters, cacheKey ) { - - let program; - - // Check if code has been already compiled - for ( let p = 0, pl = programs.length; p < pl; p ++ ) { - - const preexistingProgram = programs[ p ]; - - if ( preexistingProgram.cacheKey === cacheKey ) { - - program = preexistingProgram; - ++ program.usedTimes; - - break; - - } - - } - - if ( program === undefined ) { - - program = new WebGLProgram( renderer, cacheKey, parameters, bindingStates ); - programs.push( program ); - - } - - return program; - - } - - function releaseProgram( program ) { - - if ( -- program.usedTimes === 0 ) { - - // Remove from unordered set - const i = programs.indexOf( program ); - programs[ i ] = programs[ programs.length - 1 ]; - programs.pop(); - - // Free WebGL resources - program.destroy(); - - } - - } - - return { - getParameters: getParameters, - getProgramCacheKey: getProgramCacheKey, - getUniforms: getUniforms, - acquireProgram: acquireProgram, - releaseProgram: releaseProgram, - // Exposed for resource monitoring & error feedback via renderer.info: - programs: programs - }; - - } - - function WebGLProperties() { - - let properties = new WeakMap(); - - function get( object ) { - - let map = properties.get( object ); - - if ( map === undefined ) { - - map = {}; - properties.set( object, map ); - - } - - return map; - - } - - function remove( object ) { - - properties.delete( object ); - - } - - function update( object, key, value ) { - - properties.get( object )[ key ] = value; - - } - - function dispose() { - - properties = new WeakMap(); - - } - - return { - get: get, - remove: remove, - update: update, - dispose: dispose - }; - - } - - function painterSortStable( a, b ) { - - if ( a.groupOrder !== b.groupOrder ) { - - return a.groupOrder - b.groupOrder; - - } else if ( a.renderOrder !== b.renderOrder ) { - - return a.renderOrder - b.renderOrder; - - } else if ( a.program !== b.program ) { - - return a.program.id - b.program.id; - - } else if ( a.material.id !== b.material.id ) { - - return a.material.id - b.material.id; - - } else if ( a.z !== b.z ) { - - return a.z - b.z; - - } else { - - return a.id - b.id; - - } - - } - - function reversePainterSortStable( a, b ) { - - if ( a.groupOrder !== b.groupOrder ) { - - return a.groupOrder - b.groupOrder; - - } else if ( a.renderOrder !== b.renderOrder ) { - - return a.renderOrder - b.renderOrder; - - } else if ( a.z !== b.z ) { - - return b.z - a.z; - - } else { - - return a.id - b.id; - - } - - } - - - function WebGLRenderList( properties ) { - - const renderItems = []; - let renderItemsIndex = 0; - - const opaque = []; - const transparent = []; - - const defaultProgram = { id: - 1 }; - - function init() { - - renderItemsIndex = 0; - - opaque.length = 0; - transparent.length = 0; - - } - - function getNextRenderItem( object, geometry, material, groupOrder, z, group ) { - - let renderItem = renderItems[ renderItemsIndex ]; - const materialProperties = properties.get( material ); - - if ( renderItem === undefined ) { - - renderItem = { - id: object.id, - object: object, - geometry: geometry, - material: material, - program: materialProperties.program || defaultProgram, - groupOrder: groupOrder, - renderOrder: object.renderOrder, - z: z, - group: group - }; - - renderItems[ renderItemsIndex ] = renderItem; - - } else { - - renderItem.id = object.id; - renderItem.object = object; - renderItem.geometry = geometry; - renderItem.material = material; - renderItem.program = materialProperties.program || defaultProgram; - renderItem.groupOrder = groupOrder; - renderItem.renderOrder = object.renderOrder; - renderItem.z = z; - renderItem.group = group; - - } - - renderItemsIndex ++; - - return renderItem; - - } - - function push( object, geometry, material, groupOrder, z, group ) { - - const renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group ); - - ( material.transparent === true ? transparent : opaque ).push( renderItem ); - - } - - function unshift( object, geometry, material, groupOrder, z, group ) { - - const renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group ); - - ( material.transparent === true ? transparent : opaque ).unshift( renderItem ); - - } - - function sort( customOpaqueSort, customTransparentSort ) { - - if ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable ); - if ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable ); - - } - - function finish() { - - // Clear references from inactive renderItems in the list - - for ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) { - - const renderItem = renderItems[ i ]; - - if ( renderItem.id === null ) break; - - renderItem.id = null; - renderItem.object = null; - renderItem.geometry = null; - renderItem.material = null; - renderItem.program = null; - renderItem.group = null; - - } - - } - - return { - - opaque: opaque, - transparent: transparent, - - init: init, - push: push, - unshift: unshift, - finish: finish, - - sort: sort - }; - - } - - function WebGLRenderLists( properties ) { - - let lists = new WeakMap(); - - function get( scene, camera ) { - - const cameras = lists.get( scene ); - let list; - - if ( cameras === undefined ) { - - list = new WebGLRenderList( properties ); - lists.set( scene, new WeakMap() ); - lists.get( scene ).set( camera, list ); - - } else { - - list = cameras.get( camera ); - if ( list === undefined ) { - - list = new WebGLRenderList( properties ); - cameras.set( camera, list ); - - } - - } - - return list; - - } - - function dispose() { - - lists = new WeakMap(); - - } - - return { - get: get, - dispose: dispose - }; - - } - - function UniformsCache() { - - const lights = {}; - - return { - - get: function ( light ) { - - if ( lights[ light.id ] !== undefined ) { - - return lights[ light.id ]; - - } - - let uniforms; - - switch ( light.type ) { - - case 'DirectionalLight': - uniforms = { - direction: new Vector3(), - color: new Color() - }; - break; - - case 'SpotLight': - uniforms = { - position: new Vector3(), - direction: new Vector3(), - color: new Color(), - distance: 0, - coneCos: 0, - penumbraCos: 0, - decay: 0 - }; - break; - - case 'PointLight': - uniforms = { - position: new Vector3(), - color: new Color(), - distance: 0, - decay: 0 - }; - break; - - case 'HemisphereLight': - uniforms = { - direction: new Vector3(), - skyColor: new Color(), - groundColor: new Color() - }; - break; - - case 'RectAreaLight': - uniforms = { - color: new Color(), - position: new Vector3(), - halfWidth: new Vector3(), - halfHeight: new Vector3() - }; - break; - - } - - lights[ light.id ] = uniforms; - - return uniforms; - - } - - }; - - } - - function ShadowUniformsCache() { - - const lights = {}; - - return { - - get: function ( light ) { - - if ( lights[ light.id ] !== undefined ) { - - return lights[ light.id ]; - - } - - let uniforms; - - switch ( light.type ) { - - case 'DirectionalLight': - uniforms = { - shadowBias: 0, - shadowNormalBias: 0, - shadowRadius: 1, - shadowMapSize: new Vector2() - }; - break; - - case 'SpotLight': - uniforms = { - shadowBias: 0, - shadowNormalBias: 0, - shadowRadius: 1, - shadowMapSize: new Vector2() - }; - break; - - case 'PointLight': - uniforms = { - shadowBias: 0, - shadowNormalBias: 0, - shadowRadius: 1, - shadowMapSize: new Vector2(), - shadowCameraNear: 1, - shadowCameraFar: 1000 - }; - break; - - // TODO (abelnation): set RectAreaLight shadow uniforms - - } - - lights[ light.id ] = uniforms; - - return uniforms; - - } - - }; - - } - - - - let nextVersion = 0; - - function shadowCastingLightsFirst( lightA, lightB ) { - - return ( lightB.castShadow ? 1 : 0 ) - ( lightA.castShadow ? 1 : 0 ); - - } - - function WebGLLights( extensions, capabilities ) { - - const cache = new UniformsCache(); - - const shadowCache = ShadowUniformsCache(); - - const state = { - - version: 0, - - hash: { - directionalLength: - 1, - pointLength: - 1, - spotLength: - 1, - rectAreaLength: - 1, - hemiLength: - 1, - - numDirectionalShadows: - 1, - numPointShadows: - 1, - numSpotShadows: - 1 - }, - - ambient: [ 0, 0, 0 ], - probe: [], - directional: [], - directionalShadow: [], - directionalShadowMap: [], - directionalShadowMatrix: [], - spot: [], - spotShadow: [], - spotShadowMap: [], - spotShadowMatrix: [], - rectArea: [], - rectAreaLTC1: null, - rectAreaLTC2: null, - point: [], - pointShadow: [], - pointShadowMap: [], - pointShadowMatrix: [], - hemi: [] - - }; - - for ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() ); - - const vector3 = new Vector3(); - const matrix4 = new Matrix4(); - const matrix42 = new Matrix4(); - - function setup( lights, shadows, camera ) { - - let r = 0, g = 0, b = 0; - - for ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 ); - - let directionalLength = 0; - let pointLength = 0; - let spotLength = 0; - let rectAreaLength = 0; - let hemiLength = 0; - - let numDirectionalShadows = 0; - let numPointShadows = 0; - let numSpotShadows = 0; - - const viewMatrix = camera.matrixWorldInverse; - - lights.sort( shadowCastingLightsFirst ); - - for ( let i = 0, l = lights.length; i < l; i ++ ) { - - const light = lights[ i ]; - - const color = light.color; - const intensity = light.intensity; - const distance = light.distance; - - const shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null; - - if ( light.isAmbientLight ) { - - r += color.r * intensity; - g += color.g * intensity; - b += color.b * intensity; - - } else if ( light.isLightProbe ) { - - for ( let j = 0; j < 9; j ++ ) { - - state.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity ); - - } - - } else if ( light.isDirectionalLight ) { - - const uniforms = cache.get( light ); - - uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); - uniforms.direction.setFromMatrixPosition( light.matrixWorld ); - vector3.setFromMatrixPosition( light.target.matrixWorld ); - uniforms.direction.sub( vector3 ); - uniforms.direction.transformDirection( viewMatrix ); - - if ( light.castShadow ) { - - const shadow = light.shadow; - - const shadowUniforms = shadowCache.get( light ); - - shadowUniforms.shadowBias = shadow.bias; - shadowUniforms.shadowNormalBias = shadow.normalBias; - shadowUniforms.shadowRadius = shadow.radius; - shadowUniforms.shadowMapSize = shadow.mapSize; - - state.directionalShadow[ directionalLength ] = shadowUniforms; - state.directionalShadowMap[ directionalLength ] = shadowMap; - state.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix; - - numDirectionalShadows ++; - - } - - state.directional[ directionalLength ] = uniforms; - - directionalLength ++; - - } else if ( light.isSpotLight ) { - - const uniforms = cache.get( light ); - - uniforms.position.setFromMatrixPosition( light.matrixWorld ); - uniforms.position.applyMatrix4( viewMatrix ); - - uniforms.color.copy( color ).multiplyScalar( intensity ); - uniforms.distance = distance; - - uniforms.direction.setFromMatrixPosition( light.matrixWorld ); - vector3.setFromMatrixPosition( light.target.matrixWorld ); - uniforms.direction.sub( vector3 ); - uniforms.direction.transformDirection( viewMatrix ); - - uniforms.coneCos = Math.cos( light.angle ); - uniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) ); - uniforms.decay = light.decay; - - if ( light.castShadow ) { - - const shadow = light.shadow; - - const shadowUniforms = shadowCache.get( light ); - - shadowUniforms.shadowBias = shadow.bias; - shadowUniforms.shadowNormalBias = shadow.normalBias; - shadowUniforms.shadowRadius = shadow.radius; - shadowUniforms.shadowMapSize = shadow.mapSize; - - state.spotShadow[ spotLength ] = shadowUniforms; - state.spotShadowMap[ spotLength ] = shadowMap; - state.spotShadowMatrix[ spotLength ] = light.shadow.matrix; - - numSpotShadows ++; - - } - - state.spot[ spotLength ] = uniforms; - - spotLength ++; - - } else if ( light.isRectAreaLight ) { - - const uniforms = cache.get( light ); - - // (a) intensity is the total visible light emitted - //uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) ); - - // (b) intensity is the brightness of the light - uniforms.color.copy( color ).multiplyScalar( intensity ); - - uniforms.position.setFromMatrixPosition( light.matrixWorld ); - uniforms.position.applyMatrix4( viewMatrix ); - - // extract local rotation of light to derive width/height half vectors - matrix42.identity(); - matrix4.copy( light.matrixWorld ); - matrix4.premultiply( viewMatrix ); - matrix42.extractRotation( matrix4 ); - - uniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 ); - uniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 ); - - uniforms.halfWidth.applyMatrix4( matrix42 ); - uniforms.halfHeight.applyMatrix4( matrix42 ); - - // TODO (abelnation): RectAreaLight distance? - // uniforms.distance = distance; - - state.rectArea[ rectAreaLength ] = uniforms; - - rectAreaLength ++; - - } else if ( light.isPointLight ) { - - const uniforms = cache.get( light ); - - uniforms.position.setFromMatrixPosition( light.matrixWorld ); - uniforms.position.applyMatrix4( viewMatrix ); - - uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); - uniforms.distance = light.distance; - uniforms.decay = light.decay; - - if ( light.castShadow ) { - - const shadow = light.shadow; - - const shadowUniforms = shadowCache.get( light ); - - shadowUniforms.shadowBias = shadow.bias; - shadowUniforms.shadowNormalBias = shadow.normalBias; - shadowUniforms.shadowRadius = shadow.radius; - shadowUniforms.shadowMapSize = shadow.mapSize; - shadowUniforms.shadowCameraNear = shadow.camera.near; - shadowUniforms.shadowCameraFar = shadow.camera.far; - - state.pointShadow[ pointLength ] = shadowUniforms; - state.pointShadowMap[ pointLength ] = shadowMap; - state.pointShadowMatrix[ pointLength ] = light.shadow.matrix; - - numPointShadows ++; - - } - - state.point[ pointLength ] = uniforms; - - pointLength ++; - - } else if ( light.isHemisphereLight ) { - - const uniforms = cache.get( light ); - - uniforms.direction.setFromMatrixPosition( light.matrixWorld ); - uniforms.direction.transformDirection( viewMatrix ); - uniforms.direction.normalize(); - - uniforms.skyColor.copy( light.color ).multiplyScalar( intensity ); - uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity ); - - state.hemi[ hemiLength ] = uniforms; - - hemiLength ++; - - } - - } - - if ( rectAreaLength > 0 ) { - - if ( capabilities.isWebGL2 ) { - - // WebGL 2 - - state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1; - state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2; - - } else { - - // WebGL 1 - - if ( extensions.has( 'OES_texture_float_linear' ) === true ) { - - state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1; - state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2; - - } else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) { - - state.rectAreaLTC1 = UniformsLib.LTC_HALF_1; - state.rectAreaLTC2 = UniformsLib.LTC_HALF_2; - - } else { - - console.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' ); - - } - - } - - } - - state.ambient[ 0 ] = r; - state.ambient[ 1 ] = g; - state.ambient[ 2 ] = b; - - const hash = state.hash; - - if ( hash.directionalLength !== directionalLength || - hash.pointLength !== pointLength || - hash.spotLength !== spotLength || - hash.rectAreaLength !== rectAreaLength || - hash.hemiLength !== hemiLength || - hash.numDirectionalShadows !== numDirectionalShadows || - hash.numPointShadows !== numPointShadows || - hash.numSpotShadows !== numSpotShadows ) { - - state.directional.length = directionalLength; - state.spot.length = spotLength; - state.rectArea.length = rectAreaLength; - state.point.length = pointLength; - state.hemi.length = hemiLength; - - state.directionalShadow.length = numDirectionalShadows; - state.directionalShadowMap.length = numDirectionalShadows; - state.pointShadow.length = numPointShadows; - state.pointShadowMap.length = numPointShadows; - state.spotShadow.length = numSpotShadows; - state.spotShadowMap.length = numSpotShadows; - state.directionalShadowMatrix.length = numDirectionalShadows; - state.pointShadowMatrix.length = numPointShadows; - state.spotShadowMatrix.length = numSpotShadows; - - hash.directionalLength = directionalLength; - hash.pointLength = pointLength; - hash.spotLength = spotLength; - hash.rectAreaLength = rectAreaLength; - hash.hemiLength = hemiLength; - - hash.numDirectionalShadows = numDirectionalShadows; - hash.numPointShadows = numPointShadows; - hash.numSpotShadows = numSpotShadows; - - state.version = nextVersion ++; - - } - - } - - return { - setup: setup, - state: state - }; - - } - - function WebGLRenderState( extensions, capabilities ) { - - const lights = new WebGLLights( extensions, capabilities ); - - const lightsArray = []; - const shadowsArray = []; - - function init() { - - lightsArray.length = 0; - shadowsArray.length = 0; - - } - - function pushLight( light ) { - - lightsArray.push( light ); - - } - - function pushShadow( shadowLight ) { - - shadowsArray.push( shadowLight ); - - } - - function setupLights( camera ) { - - lights.setup( lightsArray, shadowsArray, camera ); - - } - - const state = { - lightsArray: lightsArray, - shadowsArray: shadowsArray, - - lights: lights - }; - - return { - init: init, - state: state, - setupLights: setupLights, - - pushLight: pushLight, - pushShadow: pushShadow - }; - - } - - function WebGLRenderStates( extensions, capabilities ) { - - let renderStates = new WeakMap(); - - function get( scene, camera ) { - - let renderState; - - if ( renderStates.has( scene ) === false ) { - - renderState = new WebGLRenderState( extensions, capabilities ); - renderStates.set( scene, new WeakMap() ); - renderStates.get( scene ).set( camera, renderState ); - - } else { - - if ( renderStates.get( scene ).has( camera ) === false ) { - - renderState = new WebGLRenderState( extensions, capabilities ); - renderStates.get( scene ).set( camera, renderState ); - - } else { - - renderState = renderStates.get( scene ).get( camera ); - - } - - } - - return renderState; - - } - - function dispose() { - - renderStates = new WeakMap(); - - } - - return { - get: get, - dispose: dispose - }; - - } - - /** - * parameters = { - * - * opacity: , - * - * map: new THREE.Texture( ), - * - * alphaMap: new THREE.Texture( ), - * - * displacementMap: new THREE.Texture( ), - * displacementScale: , - * displacementBias: , - * - * wireframe: , - * wireframeLinewidth: - * } - */ - - function MeshDepthMaterial( parameters ) { - - Material.call( this ); - - this.type = 'MeshDepthMaterial'; - - this.depthPacking = BasicDepthPacking; - - this.skinning = false; - this.morphTargets = false; - - this.map = null; - - this.alphaMap = null; - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.wireframe = false; - this.wireframeLinewidth = 1; - - this.fog = false; - - this.setValues( parameters ); - - } - - MeshDepthMaterial.prototype = Object.create( Material.prototype ); - MeshDepthMaterial.prototype.constructor = MeshDepthMaterial; - - MeshDepthMaterial.prototype.isMeshDepthMaterial = true; - - MeshDepthMaterial.prototype.copy = function ( source ) { - - Material.prototype.copy.call( this, source ); - - this.depthPacking = source.depthPacking; - - this.skinning = source.skinning; - this.morphTargets = source.morphTargets; - - this.map = source.map; - - this.alphaMap = source.alphaMap; - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - - return this; - - }; - - /** - * parameters = { - * - * referencePosition: , - * nearDistance: , - * farDistance: , - * - * skinning: , - * morphTargets: , - * - * map: new THREE.Texture( ), - * - * alphaMap: new THREE.Texture( ), - * - * displacementMap: new THREE.Texture( ), - * displacementScale: , - * displacementBias: - * - * } - */ - - function MeshDistanceMaterial( parameters ) { - - Material.call( this ); - - this.type = 'MeshDistanceMaterial'; - - this.referencePosition = new Vector3(); - this.nearDistance = 1; - this.farDistance = 1000; - - this.skinning = false; - this.morphTargets = false; - - this.map = null; - - this.alphaMap = null; - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.fog = false; - - this.setValues( parameters ); - - } - - MeshDistanceMaterial.prototype = Object.create( Material.prototype ); - MeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial; - - MeshDistanceMaterial.prototype.isMeshDistanceMaterial = true; - - MeshDistanceMaterial.prototype.copy = function ( source ) { - - Material.prototype.copy.call( this, source ); - - this.referencePosition.copy( source.referencePosition ); - this.nearDistance = source.nearDistance; - this.farDistance = source.farDistance; - - this.skinning = source.skinning; - this.morphTargets = source.morphTargets; - - this.map = source.map; - - this.alphaMap = source.alphaMap; - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - return this; - - }; - - var vsm_frag = "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"; - - var vsm_vert = "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}"; - - function WebGLShadowMap( _renderer, _objects, maxTextureSize ) { - - let _frustum = new Frustum(); - - const _shadowMapSize = new Vector2(), - _viewportSize = new Vector2(), - - _viewport = new Vector4(), - - _depthMaterials = [], - _distanceMaterials = [], - - _materialCache = {}; - - const shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide }; - - const shadowMaterialVertical = new ShaderMaterial( { - - defines: { - SAMPLE_RATE: 2.0 / 8.0, - HALF_SAMPLE_RATE: 1.0 / 8.0 - }, - - uniforms: { - shadow_pass: { value: null }, - resolution: { value: new Vector2() }, - radius: { value: 4.0 } - }, - - vertexShader: vsm_vert, - - fragmentShader: vsm_frag - - } ); - - const shadowMaterialHorizonal = shadowMaterialVertical.clone(); - shadowMaterialHorizonal.defines.HORIZONAL_PASS = 1; - - const fullScreenTri = new BufferGeometry(); - fullScreenTri.setAttribute( - "position", - new BufferAttribute( - new Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ), - 3 - ) - ); - - const fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical ); - - const scope = this; - - this.enabled = false; - - this.autoUpdate = true; - this.needsUpdate = false; - - this.type = PCFShadowMap; - - this.render = function ( lights, scene, camera ) { - - if ( scope.enabled === false ) return; - if ( scope.autoUpdate === false && scope.needsUpdate === false ) return; - - if ( lights.length === 0 ) return; - - const currentRenderTarget = _renderer.getRenderTarget(); - const activeCubeFace = _renderer.getActiveCubeFace(); - const activeMipmapLevel = _renderer.getActiveMipmapLevel(); - - const _state = _renderer.state; - - // Set GL state for depth map. - _state.setBlending( NoBlending ); - _state.buffers.color.setClear( 1, 1, 1, 1 ); - _state.buffers.depth.setTest( true ); - _state.setScissorTest( false ); - - // render depth map - - for ( let i = 0, il = lights.length; i < il; i ++ ) { - - const light = lights[ i ]; - const shadow = light.shadow; - - if ( shadow === undefined ) { - - console.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' ); - continue; - - } - - if ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue; - - _shadowMapSize.copy( shadow.mapSize ); - - const shadowFrameExtents = shadow.getFrameExtents(); - - _shadowMapSize.multiply( shadowFrameExtents ); - - _viewportSize.copy( shadow.mapSize ); - - if ( _shadowMapSize.x > maxTextureSize || _shadowMapSize.y > maxTextureSize ) { - - if ( _shadowMapSize.x > maxTextureSize ) { - - _viewportSize.x = Math.floor( maxTextureSize / shadowFrameExtents.x ); - _shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x; - shadow.mapSize.x = _viewportSize.x; - - } - - if ( _shadowMapSize.y > maxTextureSize ) { - - _viewportSize.y = Math.floor( maxTextureSize / shadowFrameExtents.y ); - _shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y; - shadow.mapSize.y = _viewportSize.y; - - } - - } - - if ( shadow.map === null && ! shadow.isPointLightShadow && this.type === VSMShadowMap ) { - - const pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat }; - - shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); - shadow.map.texture.name = light.name + ".shadowMap"; - - shadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); - - shadow.camera.updateProjectionMatrix(); - - } - - if ( shadow.map === null ) { - - const pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat }; - - shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); - shadow.map.texture.name = light.name + ".shadowMap"; - - shadow.camera.updateProjectionMatrix(); - - } - - _renderer.setRenderTarget( shadow.map ); - _renderer.clear(); - - const viewportCount = shadow.getViewportCount(); - - for ( let vp = 0; vp < viewportCount; vp ++ ) { - - const viewport = shadow.getViewport( vp ); - - _viewport.set( - _viewportSize.x * viewport.x, - _viewportSize.y * viewport.y, - _viewportSize.x * viewport.z, - _viewportSize.y * viewport.w - ); - - _state.viewport( _viewport ); - - shadow.updateMatrices( light, vp ); - - _frustum = shadow.getFrustum(); - - renderObject( scene, camera, shadow.camera, light, this.type ); - - } - - // do blur pass for VSM - - if ( ! shadow.isPointLightShadow && this.type === VSMShadowMap ) { - - VSMPass( shadow, camera ); - - } - - shadow.needsUpdate = false; - - } - - scope.needsUpdate = false; - - _renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel ); - - }; - - function VSMPass( shadow, camera ) { - - const geometry = _objects.update( fullScreenMesh ); - - // vertical pass - - shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture; - shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize; - shadowMaterialVertical.uniforms.radius.value = shadow.radius; - _renderer.setRenderTarget( shadow.mapPass ); - _renderer.clear(); - _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null ); - - // horizonal pass - - shadowMaterialHorizonal.uniforms.shadow_pass.value = shadow.mapPass.texture; - shadowMaterialHorizonal.uniforms.resolution.value = shadow.mapSize; - shadowMaterialHorizonal.uniforms.radius.value = shadow.radius; - _renderer.setRenderTarget( shadow.map ); - _renderer.clear(); - _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizonal, fullScreenMesh, null ); - - } - - function getDepthMaterialVariant( useMorphing, useSkinning, useInstancing ) { - - const index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2; - - let material = _depthMaterials[ index ]; - - if ( material === undefined ) { - - material = new MeshDepthMaterial( { - - depthPacking: RGBADepthPacking, - - morphTargets: useMorphing, - skinning: useSkinning - - } ); - - _depthMaterials[ index ] = material; - - } - - return material; - - } - - function getDistanceMaterialVariant( useMorphing, useSkinning, useInstancing ) { - - const index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2; - - let material = _distanceMaterials[ index ]; - - if ( material === undefined ) { - - material = new MeshDistanceMaterial( { - - morphTargets: useMorphing, - skinning: useSkinning - - } ); - - _distanceMaterials[ index ] = material; - - } - - return material; - - } - - function getDepthMaterial( object, geometry, material, light, shadowCameraNear, shadowCameraFar, type ) { - - let result = null; - - let getMaterialVariant = getDepthMaterialVariant; - let customMaterial = object.customDepthMaterial; - - if ( light.isPointLight === true ) { - - getMaterialVariant = getDistanceMaterialVariant; - customMaterial = object.customDistanceMaterial; - - } - - if ( customMaterial === undefined ) { - - let useMorphing = false; - - if ( material.morphTargets === true ) { - - useMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0; - - } - - let useSkinning = false; - - if ( object.isSkinnedMesh === true ) { - - if ( material.skinning === true ) { - - useSkinning = true; - - } else { - - console.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object ); - - } - - } - - const useInstancing = object.isInstancedMesh === true; - - result = getMaterialVariant( useMorphing, useSkinning, useInstancing ); - - } else { - - result = customMaterial; - - } - - if ( _renderer.localClippingEnabled && - material.clipShadows === true && - material.clippingPlanes.length !== 0 ) { - - // in this case we need a unique material instance reflecting the - // appropriate state - - const keyA = result.uuid, keyB = material.uuid; - - let materialsForVariant = _materialCache[ keyA ]; - - if ( materialsForVariant === undefined ) { - - materialsForVariant = {}; - _materialCache[ keyA ] = materialsForVariant; - - } - - let cachedMaterial = materialsForVariant[ keyB ]; - - if ( cachedMaterial === undefined ) { - - cachedMaterial = result.clone(); - materialsForVariant[ keyB ] = cachedMaterial; - - } - - result = cachedMaterial; - - } - - result.visible = material.visible; - result.wireframe = material.wireframe; - - if ( type === VSMShadowMap ) { - - result.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side; - - } else { - - result.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ]; - - } - - result.clipShadows = material.clipShadows; - result.clippingPlanes = material.clippingPlanes; - result.clipIntersection = material.clipIntersection; - - result.wireframeLinewidth = material.wireframeLinewidth; - result.linewidth = material.linewidth; - - if ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) { - - result.referencePosition.setFromMatrixPosition( light.matrixWorld ); - result.nearDistance = shadowCameraNear; - result.farDistance = shadowCameraFar; - - } - - return result; - - } - - function renderObject( object, camera, shadowCamera, light, type ) { - - if ( object.visible === false ) return; - - const visible = object.layers.test( camera.layers ); - - if ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) { - - if ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) { - - object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld ); - - const geometry = _objects.update( object ); - const material = object.material; - - if ( Array.isArray( material ) ) { - - const groups = geometry.groups; - - for ( let k = 0, kl = groups.length; k < kl; k ++ ) { - - const group = groups[ k ]; - const groupMaterial = material[ group.materialIndex ]; - - if ( groupMaterial && groupMaterial.visible ) { - - const depthMaterial = getDepthMaterial( object, geometry, groupMaterial, light, shadowCamera.near, shadowCamera.far, type ); - - _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group ); - - } - - } - - } else if ( material.visible ) { - - const depthMaterial = getDepthMaterial( object, geometry, material, light, shadowCamera.near, shadowCamera.far, type ); - - _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null ); - - } - - } - - } - - const children = object.children; - - for ( let i = 0, l = children.length; i < l; i ++ ) { - - renderObject( children[ i ], camera, shadowCamera, light, type ); - - } - - } - - } - - function WebGLState( gl, extensions, capabilities ) { - - const isWebGL2 = capabilities.isWebGL2; - - function ColorBuffer() { - - let locked = false; - - const color = new Vector4(); - let currentColorMask = null; - const currentColorClear = new Vector4( 0, 0, 0, 0 ); - - return { - - setMask: function ( colorMask ) { - - if ( currentColorMask !== colorMask && ! locked ) { - - gl.colorMask( colorMask, colorMask, colorMask, colorMask ); - currentColorMask = colorMask; - - } - - }, - - setLocked: function ( lock ) { - - locked = lock; - - }, - - setClear: function ( r, g, b, a, premultipliedAlpha ) { - - if ( premultipliedAlpha === true ) { - - r *= a; g *= a; b *= a; - - } - - color.set( r, g, b, a ); - - if ( currentColorClear.equals( color ) === false ) { - - gl.clearColor( r, g, b, a ); - currentColorClear.copy( color ); - - } - - }, - - reset: function () { - - locked = false; - - currentColorMask = null; - currentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state - - } - - }; - - } - - function DepthBuffer() { - - let locked = false; - - let currentDepthMask = null; - let currentDepthFunc = null; - let currentDepthClear = null; - - return { - - setTest: function ( depthTest ) { - - if ( depthTest ) { - - enable( 2929 ); - - } else { - - disable( 2929 ); - - } - - }, - - setMask: function ( depthMask ) { - - if ( currentDepthMask !== depthMask && ! locked ) { - - gl.depthMask( depthMask ); - currentDepthMask = depthMask; - - } - - }, - - setFunc: function ( depthFunc ) { - - if ( currentDepthFunc !== depthFunc ) { - - if ( depthFunc ) { - - switch ( depthFunc ) { - - case NeverDepth: - - gl.depthFunc( 512 ); - break; - - case AlwaysDepth: - - gl.depthFunc( 519 ); - break; - - case LessDepth: - - gl.depthFunc( 513 ); - break; - - case LessEqualDepth: - - gl.depthFunc( 515 ); - break; - - case EqualDepth: - - gl.depthFunc( 514 ); - break; - - case GreaterEqualDepth: - - gl.depthFunc( 518 ); - break; - - case GreaterDepth: - - gl.depthFunc( 516 ); - break; - - case NotEqualDepth: - - gl.depthFunc( 517 ); - break; - - default: - - gl.depthFunc( 515 ); - - } - - } else { - - gl.depthFunc( 515 ); - - } - - currentDepthFunc = depthFunc; - - } - - }, - - setLocked: function ( lock ) { - - locked = lock; - - }, - - setClear: function ( depth ) { - - if ( currentDepthClear !== depth ) { - - gl.clearDepth( depth ); - currentDepthClear = depth; - - } - - }, - - reset: function () { - - locked = false; - - currentDepthMask = null; - currentDepthFunc = null; - currentDepthClear = null; - - } - - }; - - } - - function StencilBuffer() { - - let locked = false; - - let currentStencilMask = null; - let currentStencilFunc = null; - let currentStencilRef = null; - let currentStencilFuncMask = null; - let currentStencilFail = null; - let currentStencilZFail = null; - let currentStencilZPass = null; - let currentStencilClear = null; - - return { - - setTest: function ( stencilTest ) { - - if ( ! locked ) { - - if ( stencilTest ) { - - enable( 2960 ); - - } else { - - disable( 2960 ); - - } - - } - - }, - - setMask: function ( stencilMask ) { - - if ( currentStencilMask !== stencilMask && ! locked ) { - - gl.stencilMask( stencilMask ); - currentStencilMask = stencilMask; - - } - - }, - - setFunc: function ( stencilFunc, stencilRef, stencilMask ) { - - if ( currentStencilFunc !== stencilFunc || - currentStencilRef !== stencilRef || - currentStencilFuncMask !== stencilMask ) { - - gl.stencilFunc( stencilFunc, stencilRef, stencilMask ); - - currentStencilFunc = stencilFunc; - currentStencilRef = stencilRef; - currentStencilFuncMask = stencilMask; - - } - - }, - - setOp: function ( stencilFail, stencilZFail, stencilZPass ) { - - if ( currentStencilFail !== stencilFail || - currentStencilZFail !== stencilZFail || - currentStencilZPass !== stencilZPass ) { - - gl.stencilOp( stencilFail, stencilZFail, stencilZPass ); - - currentStencilFail = stencilFail; - currentStencilZFail = stencilZFail; - currentStencilZPass = stencilZPass; - - } - - }, - - setLocked: function ( lock ) { - - locked = lock; - - }, - - setClear: function ( stencil ) { - - if ( currentStencilClear !== stencil ) { - - gl.clearStencil( stencil ); - currentStencilClear = stencil; - - } - - }, - - reset: function () { - - locked = false; - - currentStencilMask = null; - currentStencilFunc = null; - currentStencilRef = null; - currentStencilFuncMask = null; - currentStencilFail = null; - currentStencilZFail = null; - currentStencilZPass = null; - currentStencilClear = null; - - } - - }; - - } - - // - - const colorBuffer = new ColorBuffer(); - const depthBuffer = new DepthBuffer(); - const stencilBuffer = new StencilBuffer(); - - let enabledCapabilities = {}; - - let currentProgram = null; - - let currentBlendingEnabled = null; - let currentBlending = null; - let currentBlendEquation = null; - let currentBlendSrc = null; - let currentBlendDst = null; - let currentBlendEquationAlpha = null; - let currentBlendSrcAlpha = null; - let currentBlendDstAlpha = null; - let currentPremultipledAlpha = false; - - let currentFlipSided = null; - let currentCullFace = null; - - let currentLineWidth = null; - - let currentPolygonOffsetFactor = null; - let currentPolygonOffsetUnits = null; - - const maxTextures = gl.getParameter( 35661 ); - - let lineWidthAvailable = false; - let version = 0; - const glVersion = gl.getParameter( 7938 ); - - if ( glVersion.indexOf( 'WebGL' ) !== - 1 ) { - - version = parseFloat( /^WebGL\ ([0-9])/.exec( glVersion )[ 1 ] ); - lineWidthAvailable = ( version >= 1.0 ); - - } else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) { - - version = parseFloat( /^OpenGL\ ES\ ([0-9])/.exec( glVersion )[ 1 ] ); - lineWidthAvailable = ( version >= 2.0 ); - - } - - let currentTextureSlot = null; - let currentBoundTextures = {}; - - const currentScissor = new Vector4(); - const currentViewport = new Vector4(); - - function createTexture( type, target, count ) { - - const data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4. - const texture = gl.createTexture(); - - gl.bindTexture( type, texture ); - gl.texParameteri( type, 10241, 9728 ); - gl.texParameteri( type, 10240, 9728 ); - - for ( let i = 0; i < count; i ++ ) { - - gl.texImage2D( target + i, 0, 6408, 1, 1, 0, 6408, 5121, data ); - - } - - return texture; - - } - - const emptyTextures = {}; - emptyTextures[ 3553 ] = createTexture( 3553, 3553, 1 ); - emptyTextures[ 34067 ] = createTexture( 34067, 34069, 6 ); - - // init - - colorBuffer.setClear( 0, 0, 0, 1 ); - depthBuffer.setClear( 1 ); - stencilBuffer.setClear( 0 ); - - enable( 2929 ); - depthBuffer.setFunc( LessEqualDepth ); - - setFlipSided( false ); - setCullFace( CullFaceBack ); - enable( 2884 ); - - setBlending( NoBlending ); - - // - - function enable( id ) { - - if ( enabledCapabilities[ id ] !== true ) { - - gl.enable( id ); - enabledCapabilities[ id ] = true; - - } - - } - - function disable( id ) { - - if ( enabledCapabilities[ id ] !== false ) { - - gl.disable( id ); - enabledCapabilities[ id ] = false; - - } - - } - - function useProgram( program ) { - - if ( currentProgram !== program ) { - - gl.useProgram( program ); - - currentProgram = program; - - return true; - - } - - return false; - - } - - const equationToGL = { - [ AddEquation ]: 32774, - [ SubtractEquation ]: 32778, - [ ReverseSubtractEquation ]: 32779 - }; - - if ( isWebGL2 ) { - - equationToGL[ MinEquation ] = 32775; - equationToGL[ MaxEquation ] = 32776; - - } else { - - const extension = extensions.get( 'EXT_blend_minmax' ); - - if ( extension !== null ) { - - equationToGL[ MinEquation ] = extension.MIN_EXT; - equationToGL[ MaxEquation ] = extension.MAX_EXT; - - } - - } - - const factorToGL = { - [ ZeroFactor ]: 0, - [ OneFactor ]: 1, - [ SrcColorFactor ]: 768, - [ SrcAlphaFactor ]: 770, - [ SrcAlphaSaturateFactor ]: 776, - [ DstColorFactor ]: 774, - [ DstAlphaFactor ]: 772, - [ OneMinusSrcColorFactor ]: 769, - [ OneMinusSrcAlphaFactor ]: 771, - [ OneMinusDstColorFactor ]: 775, - [ OneMinusDstAlphaFactor ]: 773 - }; - - function setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) { - - if ( blending === NoBlending ) { - - if ( currentBlendingEnabled ) { - - disable( 3042 ); - currentBlendingEnabled = false; - - } - - return; - - } - - if ( ! currentBlendingEnabled ) { - - enable( 3042 ); - currentBlendingEnabled = true; - - } - - if ( blending !== CustomBlending ) { - - if ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) { - - if ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) { - - gl.blendEquation( 32774 ); - - currentBlendEquation = AddEquation; - currentBlendEquationAlpha = AddEquation; - - } - - if ( premultipliedAlpha ) { - - switch ( blending ) { - - case NormalBlending: - gl.blendFuncSeparate( 1, 771, 1, 771 ); - break; - - case AdditiveBlending: - gl.blendFunc( 1, 1 ); - break; - - case SubtractiveBlending: - gl.blendFuncSeparate( 0, 0, 769, 771 ); - break; - - case MultiplyBlending: - gl.blendFuncSeparate( 0, 768, 0, 770 ); - break; - - default: - console.error( 'THREE.WebGLState: Invalid blending: ', blending ); - break; - - } - - } else { - - switch ( blending ) { - - case NormalBlending: - gl.blendFuncSeparate( 770, 771, 1, 771 ); - break; - - case AdditiveBlending: - gl.blendFunc( 770, 1 ); - break; - - case SubtractiveBlending: - gl.blendFunc( 0, 769 ); - break; - - case MultiplyBlending: - gl.blendFunc( 0, 768 ); - break; - - default: - console.error( 'THREE.WebGLState: Invalid blending: ', blending ); - break; - - } - - } - - currentBlendSrc = null; - currentBlendDst = null; - currentBlendSrcAlpha = null; - currentBlendDstAlpha = null; - - currentBlending = blending; - currentPremultipledAlpha = premultipliedAlpha; - - } - - return; - - } - - // custom blending - - blendEquationAlpha = blendEquationAlpha || blendEquation; - blendSrcAlpha = blendSrcAlpha || blendSrc; - blendDstAlpha = blendDstAlpha || blendDst; - - if ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) { - - gl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] ); - - currentBlendEquation = blendEquation; - currentBlendEquationAlpha = blendEquationAlpha; - - } - - if ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) { - - gl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] ); - - currentBlendSrc = blendSrc; - currentBlendDst = blendDst; - currentBlendSrcAlpha = blendSrcAlpha; - currentBlendDstAlpha = blendDstAlpha; - - } - - currentBlending = blending; - currentPremultipledAlpha = null; - - } - - function setMaterial( material, frontFaceCW ) { - - material.side === DoubleSide - ? disable( 2884 ) - : enable( 2884 ); - - let flipSided = ( material.side === BackSide ); - if ( frontFaceCW ) flipSided = ! flipSided; - - setFlipSided( flipSided ); - - ( material.blending === NormalBlending && material.transparent === false ) - ? setBlending( NoBlending ) - : setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha ); - - depthBuffer.setFunc( material.depthFunc ); - depthBuffer.setTest( material.depthTest ); - depthBuffer.setMask( material.depthWrite ); - colorBuffer.setMask( material.colorWrite ); - - const stencilWrite = material.stencilWrite; - stencilBuffer.setTest( stencilWrite ); - if ( stencilWrite ) { - - stencilBuffer.setMask( material.stencilWriteMask ); - stencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask ); - stencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass ); - - } - - setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); - - } - - // - - function setFlipSided( flipSided ) { - - if ( currentFlipSided !== flipSided ) { - - if ( flipSided ) { - - gl.frontFace( 2304 ); - - } else { - - gl.frontFace( 2305 ); - - } - - currentFlipSided = flipSided; - - } - - } - - function setCullFace( cullFace ) { - - if ( cullFace !== CullFaceNone ) { - - enable( 2884 ); - - if ( cullFace !== currentCullFace ) { - - if ( cullFace === CullFaceBack ) { - - gl.cullFace( 1029 ); - - } else if ( cullFace === CullFaceFront ) { - - gl.cullFace( 1028 ); - - } else { - - gl.cullFace( 1032 ); - - } - - } - - } else { - - disable( 2884 ); - - } - - currentCullFace = cullFace; - - } - - function setLineWidth( width ) { - - if ( width !== currentLineWidth ) { - - if ( lineWidthAvailable ) gl.lineWidth( width ); - - currentLineWidth = width; - - } - - } - - function setPolygonOffset( polygonOffset, factor, units ) { - - if ( polygonOffset ) { - - enable( 32823 ); - - if ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) { - - gl.polygonOffset( factor, units ); - - currentPolygonOffsetFactor = factor; - currentPolygonOffsetUnits = units; - - } - - } else { - - disable( 32823 ); - - } - - } - - function setScissorTest( scissorTest ) { - - if ( scissorTest ) { - - enable( 3089 ); - - } else { - - disable( 3089 ); - - } - - } - - // texture - - function activeTexture( webglSlot ) { - - if ( webglSlot === undefined ) webglSlot = 33984 + maxTextures - 1; - - if ( currentTextureSlot !== webglSlot ) { - - gl.activeTexture( webglSlot ); - currentTextureSlot = webglSlot; - - } - - } - - function bindTexture( webglType, webglTexture ) { - - if ( currentTextureSlot === null ) { - - activeTexture(); - - } - - let boundTexture = currentBoundTextures[ currentTextureSlot ]; - - if ( boundTexture === undefined ) { - - boundTexture = { type: undefined, texture: undefined }; - currentBoundTextures[ currentTextureSlot ] = boundTexture; - - } - - if ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) { - - gl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] ); - - boundTexture.type = webglType; - boundTexture.texture = webglTexture; - - } - - } - - function unbindTexture() { - - const boundTexture = currentBoundTextures[ currentTextureSlot ]; - - if ( boundTexture !== undefined && boundTexture.type !== undefined ) { - - gl.bindTexture( boundTexture.type, null ); - - boundTexture.type = undefined; - boundTexture.texture = undefined; - - } - - } - - function compressedTexImage2D() { - - try { - - gl.compressedTexImage2D.apply( gl, arguments ); - - } catch ( error ) { - - console.error( 'THREE.WebGLState:', error ); - - } - - } - - function texImage2D() { - - try { - - gl.texImage2D.apply( gl, arguments ); - - } catch ( error ) { - - console.error( 'THREE.WebGLState:', error ); - - } - - } - - function texImage3D() { - - try { - - gl.texImage3D.apply( gl, arguments ); - - } catch ( error ) { - - console.error( 'THREE.WebGLState:', error ); - - } - - } - - // - - function scissor( scissor ) { - - if ( currentScissor.equals( scissor ) === false ) { - - gl.scissor( scissor.x, scissor.y, scissor.z, scissor.w ); - currentScissor.copy( scissor ); - - } - - } - - function viewport( viewport ) { - - if ( currentViewport.equals( viewport ) === false ) { - - gl.viewport( viewport.x, viewport.y, viewport.z, viewport.w ); - currentViewport.copy( viewport ); - - } - - } - - // - - function reset() { - - enabledCapabilities = {}; - - currentTextureSlot = null; - currentBoundTextures = {}; - - currentProgram = null; - - currentBlendingEnabled = null; - currentBlending = null; - currentBlendEquation = null; - currentBlendSrc = null; - currentBlendDst = null; - currentBlendEquationAlpha = null; - currentBlendSrcAlpha = null; - currentBlendDstAlpha = null; - currentPremultipledAlpha = false; - - currentFlipSided = null; - currentCullFace = null; - - currentLineWidth = null; - - currentPolygonOffsetFactor = null; - currentPolygonOffsetUnits = null; - - colorBuffer.reset(); - depthBuffer.reset(); - stencilBuffer.reset(); - - } - - return { - - buffers: { - color: colorBuffer, - depth: depthBuffer, - stencil: stencilBuffer - }, - - enable: enable, - disable: disable, - - useProgram: useProgram, - - setBlending: setBlending, - setMaterial: setMaterial, - - setFlipSided: setFlipSided, - setCullFace: setCullFace, - - setLineWidth: setLineWidth, - setPolygonOffset: setPolygonOffset, - - setScissorTest: setScissorTest, - - activeTexture: activeTexture, - bindTexture: bindTexture, - unbindTexture: unbindTexture, - compressedTexImage2D: compressedTexImage2D, - texImage2D: texImage2D, - texImage3D: texImage3D, - - scissor: scissor, - viewport: viewport, - - reset: reset - - }; - - } - - function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) { - - const isWebGL2 = capabilities.isWebGL2; - const maxTextures = capabilities.maxTextures; - const maxCubemapSize = capabilities.maxCubemapSize; - const maxTextureSize = capabilities.maxTextureSize; - const maxSamples = capabilities.maxSamples; - - const _videoTextures = new WeakMap(); - let _canvas; - - // cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas, - // also OffscreenCanvas.getContext("webgl"), but not OffscreenCanvas.getContext("2d")! - // Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d). - - let useOffscreenCanvas = false; - - try { - - useOffscreenCanvas = typeof OffscreenCanvas !== 'undefined' - && ( new OffscreenCanvas( 1, 1 ).getContext( "2d" ) ) !== null; - - } catch ( err ) { - - // Ignore any errors - - } - - function createCanvas( width, height ) { - - // Use OffscreenCanvas when available. Specially needed in web workers - - return useOffscreenCanvas ? - new OffscreenCanvas( width, height ) : - document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); - - } - - function resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) { - - let scale = 1; - - // handle case if texture exceeds max size - - if ( image.width > maxSize || image.height > maxSize ) { - - scale = maxSize / Math.max( image.width, image.height ); - - } - - // only perform resize if necessary - - if ( scale < 1 || needsPowerOfTwo === true ) { - - // only perform resize for certain image types - - if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) || - ( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) || - ( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) { - - const floor = needsPowerOfTwo ? MathUtils.floorPowerOfTwo : Math.floor; - - const width = floor( scale * image.width ); - const height = floor( scale * image.height ); - - if ( _canvas === undefined ) _canvas = createCanvas( width, height ); - - // cube textures can't reuse the same canvas - - const canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas; - - canvas.width = width; - canvas.height = height; - - const context = canvas.getContext( '2d' ); - context.drawImage( image, 0, 0, width, height ); - - console.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' ); - - return canvas; - - } else { - - if ( 'data' in image ) { - - console.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' ); - - } - - return image; - - } - - } - - return image; - - } - - function isPowerOfTwo( image ) { - - return MathUtils.isPowerOfTwo( image.width ) && MathUtils.isPowerOfTwo( image.height ); - - } - - function textureNeedsPowerOfTwo( texture ) { - - if ( isWebGL2 ) return false; - - return ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) || - ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ); - - } - - function textureNeedsGenerateMipmaps( texture, supportsMips ) { - - return texture.generateMipmaps && supportsMips && - texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter; - - } - - function generateMipmap( target, texture, width, height ) { - - _gl.generateMipmap( target ); - - const textureProperties = properties.get( texture ); - - // Note: Math.log( x ) * Math.LOG2E used instead of Math.log2( x ) which is not supported by IE11 - textureProperties.__maxMipLevel = Math.log( Math.max( width, height ) ) * Math.LOG2E; - - } - - function getInternalFormat( internalFormatName, glFormat, glType ) { - - if ( isWebGL2 === false ) return glFormat; - - if ( internalFormatName !== null ) { - - if ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ]; - - console.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \'' + internalFormatName + '\'' ); - - } - - let internalFormat = glFormat; - - if ( glFormat === 6403 ) { - - if ( glType === 5126 ) internalFormat = 33326; - if ( glType === 5131 ) internalFormat = 33325; - if ( glType === 5121 ) internalFormat = 33321; - - } - - if ( glFormat === 6407 ) { - - if ( glType === 5126 ) internalFormat = 34837; - if ( glType === 5131 ) internalFormat = 34843; - if ( glType === 5121 ) internalFormat = 32849; - - } - - if ( glFormat === 6408 ) { - - if ( glType === 5126 ) internalFormat = 34836; - if ( glType === 5131 ) internalFormat = 34842; - if ( glType === 5121 ) internalFormat = 32856; - - } - - if ( internalFormat === 33325 || internalFormat === 33326 || - internalFormat === 34842 || internalFormat === 34836 ) { - - extensions.get( 'EXT_color_buffer_float' ); - - } - - return internalFormat; - - } - - // Fallback filters for non-power-of-2 textures - - function filterFallback( f ) { - - if ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) { - - return 9728; - - } - - return 9729; - - } - - // - - function onTextureDispose( event ) { - - const texture = event.target; - - texture.removeEventListener( 'dispose', onTextureDispose ); - - deallocateTexture( texture ); - - if ( texture.isVideoTexture ) { - - _videoTextures.delete( texture ); - - } - - info.memory.textures --; - - } - - function onRenderTargetDispose( event ) { - - const renderTarget = event.target; - - renderTarget.removeEventListener( 'dispose', onRenderTargetDispose ); - - deallocateRenderTarget( renderTarget ); - - info.memory.textures --; - - } - - // - - function deallocateTexture( texture ) { - - const textureProperties = properties.get( texture ); - - if ( textureProperties.__webglInit === undefined ) return; - - _gl.deleteTexture( textureProperties.__webglTexture ); - - properties.remove( texture ); - - } - - function deallocateRenderTarget( renderTarget ) { - - const renderTargetProperties = properties.get( renderTarget ); - const textureProperties = properties.get( renderTarget.texture ); - - if ( ! renderTarget ) return; - - if ( textureProperties.__webglTexture !== undefined ) { - - _gl.deleteTexture( textureProperties.__webglTexture ); - - } - - if ( renderTarget.depthTexture ) { - - renderTarget.depthTexture.dispose(); - - } - - if ( renderTarget.isWebGLCubeRenderTarget ) { - - for ( let i = 0; i < 6; i ++ ) { - - _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] ); - if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] ); - - } - - } else { - - _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer ); - if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer ); - if ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer ); - if ( renderTargetProperties.__webglColorRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer ); - if ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer ); - - } - - properties.remove( renderTarget.texture ); - properties.remove( renderTarget ); - - } - - // - - let textureUnits = 0; - - function resetTextureUnits() { - - textureUnits = 0; - - } - - function allocateTextureUnit() { - - const textureUnit = textureUnits; - - if ( textureUnit >= maxTextures ) { - - console.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures ); - - } - - textureUnits += 1; - - return textureUnit; - - } - - // - - function setTexture2D( texture, slot ) { - - const textureProperties = properties.get( texture ); - - if ( texture.isVideoTexture ) updateVideoTexture( texture ); - - if ( texture.version > 0 && textureProperties.__version !== texture.version ) { - - const image = texture.image; - - if ( image === undefined ) { - - console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined' ); - - } else if ( image.complete === false ) { - - console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' ); - - } else { - - uploadTexture( textureProperties, texture, slot ); - return; - - } - - } - - state.activeTexture( 33984 + slot ); - state.bindTexture( 3553, textureProperties.__webglTexture ); - - } - - function setTexture2DArray( texture, slot ) { - - const textureProperties = properties.get( texture ); - - if ( texture.version > 0 && textureProperties.__version !== texture.version ) { - - uploadTexture( textureProperties, texture, slot ); - return; - - } - - state.activeTexture( 33984 + slot ); - state.bindTexture( 35866, textureProperties.__webglTexture ); - - } - - function setTexture3D( texture, slot ) { - - const textureProperties = properties.get( texture ); - - if ( texture.version > 0 && textureProperties.__version !== texture.version ) { - - uploadTexture( textureProperties, texture, slot ); - return; - - } - - state.activeTexture( 33984 + slot ); - state.bindTexture( 32879, textureProperties.__webglTexture ); - - } - - function setTextureCube( texture, slot ) { - - const textureProperties = properties.get( texture ); - - if ( texture.version > 0 && textureProperties.__version !== texture.version ) { - - uploadCubeTexture( textureProperties, texture, slot ); - return; - - } - - state.activeTexture( 33984 + slot ); - state.bindTexture( 34067, textureProperties.__webglTexture ); - - } - - const wrappingToGL = { - [ RepeatWrapping ]: 10497, - [ ClampToEdgeWrapping ]: 33071, - [ MirroredRepeatWrapping ]: 33648 - }; - - const filterToGL = { - [ NearestFilter ]: 9728, - [ NearestMipmapNearestFilter ]: 9984, - [ NearestMipmapLinearFilter ]: 9986, - - [ LinearFilter ]: 9729, - [ LinearMipmapNearestFilter ]: 9985, - [ LinearMipmapLinearFilter ]: 9987 - }; - - function setTextureParameters( textureType, texture, supportsMips ) { - - if ( supportsMips ) { - - _gl.texParameteri( textureType, 10242, wrappingToGL[ texture.wrapS ] ); - _gl.texParameteri( textureType, 10243, wrappingToGL[ texture.wrapT ] ); - - if ( textureType === 32879 || textureType === 35866 ) { - - _gl.texParameteri( textureType, 32882, wrappingToGL[ texture.wrapR ] ); - - } - - _gl.texParameteri( textureType, 10240, filterToGL[ texture.magFilter ] ); - _gl.texParameteri( textureType, 10241, filterToGL[ texture.minFilter ] ); - - } else { - - _gl.texParameteri( textureType, 10242, 33071 ); - _gl.texParameteri( textureType, 10243, 33071 ); - - if ( textureType === 32879 || textureType === 35866 ) { - - _gl.texParameteri( textureType, 32882, 33071 ); - - } - - if ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) { - - console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' ); - - } - - _gl.texParameteri( textureType, 10240, filterFallback( texture.magFilter ) ); - _gl.texParameteri( textureType, 10241, filterFallback( texture.minFilter ) ); - - if ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) { - - console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' ); - - } - - } - - const extension = extensions.get( 'EXT_texture_filter_anisotropic' ); - - if ( extension ) { - - if ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return; - if ( texture.type === HalfFloatType && ( isWebGL2 || extensions.get( 'OES_texture_half_float_linear' ) ) === null ) return; - - if ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) { - - _gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) ); - properties.get( texture ).__currentAnisotropy = texture.anisotropy; - - } - - } - - } - - function initTexture( textureProperties, texture ) { - - if ( textureProperties.__webglInit === undefined ) { - - textureProperties.__webglInit = true; - - texture.addEventListener( 'dispose', onTextureDispose ); - - textureProperties.__webglTexture = _gl.createTexture(); - - info.memory.textures ++; - - } - - } - - function uploadTexture( textureProperties, texture, slot ) { - - let textureType = 3553; - - if ( texture.isDataTexture2DArray ) textureType = 35866; - if ( texture.isDataTexture3D ) textureType = 32879; - - initTexture( textureProperties, texture ); - - state.activeTexture( 33984 + slot ); - state.bindTexture( textureType, textureProperties.__webglTexture ); - - _gl.pixelStorei( 37440, texture.flipY ); - _gl.pixelStorei( 37441, texture.premultiplyAlpha ); - _gl.pixelStorei( 3317, texture.unpackAlignment ); - - const needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( texture.image ) === false; - const image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize ); - - const supportsMips = isPowerOfTwo( image ) || isWebGL2, - glFormat = utils.convert( texture.format ); - - let glType = utils.convert( texture.type ), - glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType ); - - setTextureParameters( textureType, texture, supportsMips ); - - let mipmap; - const mipmaps = texture.mipmaps; - - if ( texture.isDepthTexture ) { - - // populate depth texture with dummy data - - glInternalFormat = 6402; - - if ( isWebGL2 ) { - - if ( texture.type === FloatType ) { - - glInternalFormat = 36012; - - } else if ( texture.type === UnsignedIntType ) { - - glInternalFormat = 33190; - - } else if ( texture.type === UnsignedInt248Type ) { - - glInternalFormat = 35056; - - } else { - - glInternalFormat = 33189; // WebGL2 requires sized internalformat for glTexImage2D - - } - - } else { - - if ( texture.type === FloatType ) { - - console.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' ); - - } - - } - - // validation checks for WebGL 1 - - if ( texture.format === DepthFormat && glInternalFormat === 6402 ) { - - // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are - // DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT - // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) - if ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) { - - console.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' ); - - texture.type = UnsignedShortType; - glType = utils.convert( texture.type ); - - } - - } - - if ( texture.format === DepthStencilFormat && glInternalFormat === 6402 ) { - - // Depth stencil textures need the DEPTH_STENCIL internal format - // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) - glInternalFormat = 34041; - - // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are - // DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL. - // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) - if ( texture.type !== UnsignedInt248Type ) { - - console.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' ); - - texture.type = UnsignedInt248Type; - glType = utils.convert( texture.type ); - - } - - } - - // - - state.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null ); - - } else if ( texture.isDataTexture ) { - - // use manually created mipmaps if available - // if there are no manual mipmaps - // set 0 level mipmap and then use GL to generate other mipmap levels - - if ( mipmaps.length > 0 && supportsMips ) { - - for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { - - mipmap = mipmaps[ i ]; - state.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); - - } - - texture.generateMipmaps = false; - textureProperties.__maxMipLevel = mipmaps.length - 1; - - } else { - - state.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data ); - textureProperties.__maxMipLevel = 0; - - } - - } else if ( texture.isCompressedTexture ) { - - for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { - - mipmap = mipmaps[ i ]; - - if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) { - - if ( glFormat !== null ) { - - state.compressedTexImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data ); - - } else { - - console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' ); - - } - - } else { - - state.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); - - } - - } - - textureProperties.__maxMipLevel = mipmaps.length - 1; - - } else if ( texture.isDataTexture2DArray ) { - - state.texImage3D( 35866, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data ); - textureProperties.__maxMipLevel = 0; - - } else if ( texture.isDataTexture3D ) { - - state.texImage3D( 32879, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data ); - textureProperties.__maxMipLevel = 0; - - } else { - - // regular Texture (image, video, canvas) - - // use manually created mipmaps if available - // if there are no manual mipmaps - // set 0 level mipmap and then use GL to generate other mipmap levels - - if ( mipmaps.length > 0 && supportsMips ) { - - for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { - - mipmap = mipmaps[ i ]; - state.texImage2D( 3553, i, glInternalFormat, glFormat, glType, mipmap ); - - } - - texture.generateMipmaps = false; - textureProperties.__maxMipLevel = mipmaps.length - 1; - - } else { - - state.texImage2D( 3553, 0, glInternalFormat, glFormat, glType, image ); - textureProperties.__maxMipLevel = 0; - - } - - } - - if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { - - generateMipmap( textureType, texture, image.width, image.height ); - - } - - textureProperties.__version = texture.version; - - if ( texture.onUpdate ) texture.onUpdate( texture ); - - } - - function uploadCubeTexture( textureProperties, texture, slot ) { - - if ( texture.image.length !== 6 ) return; - - initTexture( textureProperties, texture ); - - state.activeTexture( 33984 + slot ); - state.bindTexture( 34067, textureProperties.__webglTexture ); - - _gl.pixelStorei( 37440, texture.flipY ); - - const isCompressed = ( texture && ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture ) ); - const isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture ); - - const cubeImage = []; - - for ( let i = 0; i < 6; i ++ ) { - - if ( ! isCompressed && ! isDataTexture ) { - - cubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize ); - - } else { - - cubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ]; - - } - - } - - const image = cubeImage[ 0 ], - supportsMips = isPowerOfTwo( image ) || isWebGL2, - glFormat = utils.convert( texture.format ), - glType = utils.convert( texture.type ), - glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType ); - - setTextureParameters( 34067, texture, supportsMips ); - - let mipmaps; - - if ( isCompressed ) { - - for ( let i = 0; i < 6; i ++ ) { - - mipmaps = cubeImage[ i ].mipmaps; - - for ( let j = 0; j < mipmaps.length; j ++ ) { - - const mipmap = mipmaps[ j ]; - - if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) { - - if ( glFormat !== null ) { - - state.compressedTexImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data ); - - } else { - - console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' ); - - } - - } else { - - state.texImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); - - } - - } - - } - - textureProperties.__maxMipLevel = mipmaps.length - 1; - - } else { - - mipmaps = texture.mipmaps; - - for ( let i = 0; i < 6; i ++ ) { - - if ( isDataTexture ) { - - state.texImage2D( 34069 + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data ); - - for ( let j = 0; j < mipmaps.length; j ++ ) { - - const mipmap = mipmaps[ j ]; - const mipmapImage = mipmap.image[ i ].image; - - state.texImage2D( 34069 + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data ); - - } - - } else { - - state.texImage2D( 34069 + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] ); - - for ( let j = 0; j < mipmaps.length; j ++ ) { - - const mipmap = mipmaps[ j ]; - - state.texImage2D( 34069 + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] ); - - } - - } - - } - - textureProperties.__maxMipLevel = mipmaps.length; - - } - - if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { - - // We assume images for cube map have the same size. - generateMipmap( 34067, texture, image.width, image.height ); - - } - - textureProperties.__version = texture.version; - - if ( texture.onUpdate ) texture.onUpdate( texture ); - - } - - // Render targets - - // Setup storage for target texture and bind it to correct framebuffer - function setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) { - - const glFormat = utils.convert( renderTarget.texture.format ); - const glType = utils.convert( renderTarget.texture.type ); - const glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType ); - state.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null ); - _gl.bindFramebuffer( 36160, framebuffer ); - _gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 ); - _gl.bindFramebuffer( 36160, null ); - - } - - // Setup storage for internal depth/stencil buffers and bind to correct framebuffer - function setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) { - - _gl.bindRenderbuffer( 36161, renderbuffer ); - - if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) { - - let glInternalFormat = 33189; - - if ( isMultisample ) { - - const depthTexture = renderTarget.depthTexture; - - if ( depthTexture && depthTexture.isDepthTexture ) { - - if ( depthTexture.type === FloatType ) { - - glInternalFormat = 36012; - - } else if ( depthTexture.type === UnsignedIntType ) { - - glInternalFormat = 33190; - - } - - } - - const samples = getRenderTargetSamples( renderTarget ); - - _gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height ); - - } else { - - _gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height ); - - } - - _gl.framebufferRenderbuffer( 36160, 36096, 36161, renderbuffer ); - - } else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) { - - if ( isMultisample ) { - - const samples = getRenderTargetSamples( renderTarget ); - - _gl.renderbufferStorageMultisample( 36161, samples, 35056, renderTarget.width, renderTarget.height ); - - } else { - - _gl.renderbufferStorage( 36161, 34041, renderTarget.width, renderTarget.height ); - - } - - - _gl.framebufferRenderbuffer( 36160, 33306, 36161, renderbuffer ); - - } else { - - const glFormat = utils.convert( renderTarget.texture.format ); - const glType = utils.convert( renderTarget.texture.type ); - const glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType ); - - if ( isMultisample ) { - - const samples = getRenderTargetSamples( renderTarget ); - - _gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height ); - - } else { - - _gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height ); - - } - - } - - _gl.bindRenderbuffer( 36161, null ); - - } - - // Setup resources for a Depth Texture for a FBO (needs an extension) - function setupDepthTexture( framebuffer, renderTarget ) { - - const isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget ); - if ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' ); - - _gl.bindFramebuffer( 36160, framebuffer ); - - if ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) { - - throw new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' ); - - } - - // upload an empty depth texture with framebuffer size - if ( ! properties.get( renderTarget.depthTexture ).__webglTexture || - renderTarget.depthTexture.image.width !== renderTarget.width || - renderTarget.depthTexture.image.height !== renderTarget.height ) { - - renderTarget.depthTexture.image.width = renderTarget.width; - renderTarget.depthTexture.image.height = renderTarget.height; - renderTarget.depthTexture.needsUpdate = true; - - } - - setTexture2D( renderTarget.depthTexture, 0 ); - - const webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture; - - if ( renderTarget.depthTexture.format === DepthFormat ) { - - _gl.framebufferTexture2D( 36160, 36096, 3553, webglDepthTexture, 0 ); - - } else if ( renderTarget.depthTexture.format === DepthStencilFormat ) { - - _gl.framebufferTexture2D( 36160, 33306, 3553, webglDepthTexture, 0 ); - - } else { - - throw new Error( 'Unknown depthTexture format' ); - - } - - } - - // Setup GL resources for a non-texture depth buffer - function setupDepthRenderbuffer( renderTarget ) { - - const renderTargetProperties = properties.get( renderTarget ); - - const isCube = ( renderTarget.isWebGLCubeRenderTarget === true ); - - if ( renderTarget.depthTexture ) { - - if ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' ); - - setupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget ); - - } else { - - if ( isCube ) { - - renderTargetProperties.__webglDepthbuffer = []; - - for ( let i = 0; i < 6; i ++ ) { - - _gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer[ i ] ); - renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer(); - setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false ); - - } - - } else { - - _gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer ); - renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer(); - setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false ); - - } - - } - - _gl.bindFramebuffer( 36160, null ); - - } - - // Set up GL resources for the render target - function setupRenderTarget( renderTarget ) { - - const renderTargetProperties = properties.get( renderTarget ); - const textureProperties = properties.get( renderTarget.texture ); - - renderTarget.addEventListener( 'dispose', onRenderTargetDispose ); - - textureProperties.__webglTexture = _gl.createTexture(); - - info.memory.textures ++; - - const isCube = ( renderTarget.isWebGLCubeRenderTarget === true ); - const isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true ); - const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2; - - // Handles WebGL2 RGBFormat fallback - #18858 - - if ( isWebGL2 && renderTarget.texture.format === RGBFormat && ( renderTarget.texture.type === FloatType || renderTarget.texture.type === HalfFloatType ) ) { - - renderTarget.texture.format = RGBAFormat; - - console.warn( 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.' ); - - } - - // Setup framebuffer - - if ( isCube ) { - - renderTargetProperties.__webglFramebuffer = []; - - for ( let i = 0; i < 6; i ++ ) { - - renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer(); - - } - - } else { - - renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer(); - - if ( isMultisample ) { - - if ( isWebGL2 ) { - - renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer(); - renderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer(); - - _gl.bindRenderbuffer( 36161, renderTargetProperties.__webglColorRenderbuffer ); - - const glFormat = utils.convert( renderTarget.texture.format ); - const glType = utils.convert( renderTarget.texture.type ); - const glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType ); - const samples = getRenderTargetSamples( renderTarget ); - _gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height ); - - _gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer ); - _gl.framebufferRenderbuffer( 36160, 36064, 36161, renderTargetProperties.__webglColorRenderbuffer ); - _gl.bindRenderbuffer( 36161, null ); - - if ( renderTarget.depthBuffer ) { - - renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer(); - setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true ); - - } - - _gl.bindFramebuffer( 36160, null ); - - - } else { - - console.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' ); - - } - - } - - } - - // Setup color buffer - - if ( isCube ) { - - state.bindTexture( 34067, textureProperties.__webglTexture ); - setTextureParameters( 34067, renderTarget.texture, supportsMips ); - - for ( let i = 0; i < 6; i ++ ) { - - setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, 36064, 34069 + i ); - - } - - if ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) { - - generateMipmap( 34067, renderTarget.texture, renderTarget.width, renderTarget.height ); - - } - - state.bindTexture( 34067, null ); - - } else { - - state.bindTexture( 3553, textureProperties.__webglTexture ); - setTextureParameters( 3553, renderTarget.texture, supportsMips ); - setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, 36064, 3553 ); - - if ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) { - - generateMipmap( 3553, renderTarget.texture, renderTarget.width, renderTarget.height ); - - } - - state.bindTexture( 3553, null ); - - } - - // Setup depth and stencil buffers - - if ( renderTarget.depthBuffer ) { - - setupDepthRenderbuffer( renderTarget ); - - } - - } - - function updateRenderTargetMipmap( renderTarget ) { - - const texture = renderTarget.texture; - const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2; - - if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { - - const target = renderTarget.isWebGLCubeRenderTarget ? 34067 : 3553; - const webglTexture = properties.get( texture ).__webglTexture; - - state.bindTexture( target, webglTexture ); - generateMipmap( target, texture, renderTarget.width, renderTarget.height ); - state.bindTexture( target, null ); - - } - - } - - function updateMultisampleRenderTarget( renderTarget ) { - - if ( renderTarget.isWebGLMultisampleRenderTarget ) { - - if ( isWebGL2 ) { - - const renderTargetProperties = properties.get( renderTarget ); - - _gl.bindFramebuffer( 36008, renderTargetProperties.__webglMultisampledFramebuffer ); - _gl.bindFramebuffer( 36009, renderTargetProperties.__webglFramebuffer ); - - const width = renderTarget.width; - const height = renderTarget.height; - let mask = 16384; - - if ( renderTarget.depthBuffer ) mask |= 256; - if ( renderTarget.stencilBuffer ) mask |= 1024; - - _gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, 9728 ); - - _gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer ); // see #18905 - - } else { - - console.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' ); - - } - - } - - } - - function getRenderTargetSamples( renderTarget ) { - - return ( isWebGL2 && renderTarget.isWebGLMultisampleRenderTarget ) ? - Math.min( maxSamples, renderTarget.samples ) : 0; - - } - - function updateVideoTexture( texture ) { - - const frame = info.render.frame; - - // Check the last frame we updated the VideoTexture - - if ( _videoTextures.get( texture ) !== frame ) { - - _videoTextures.set( texture, frame ); - texture.update(); - - } - - } - - // backwards compatibility - - let warnedTexture2D = false; - let warnedTextureCube = false; - - function safeSetTexture2D( texture, slot ) { - - if ( texture && texture.isWebGLRenderTarget ) { - - if ( warnedTexture2D === false ) { - - console.warn( "THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead." ); - warnedTexture2D = true; - - } - - texture = texture.texture; - - } - - setTexture2D( texture, slot ); - - } - - function safeSetTextureCube( texture, slot ) { - - if ( texture && texture.isWebGLCubeRenderTarget ) { - - if ( warnedTextureCube === false ) { - - console.warn( "THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead." ); - warnedTextureCube = true; - - } - - texture = texture.texture; - - } - - - setTextureCube( texture, slot ); - - } - - // - - this.allocateTextureUnit = allocateTextureUnit; - this.resetTextureUnits = resetTextureUnits; - - this.setTexture2D = setTexture2D; - this.setTexture2DArray = setTexture2DArray; - this.setTexture3D = setTexture3D; - this.setTextureCube = setTextureCube; - this.setupRenderTarget = setupRenderTarget; - this.updateRenderTargetMipmap = updateRenderTargetMipmap; - this.updateMultisampleRenderTarget = updateMultisampleRenderTarget; - - this.safeSetTexture2D = safeSetTexture2D; - this.safeSetTextureCube = safeSetTextureCube; - - } - - function WebGLUtils( gl, extensions, capabilities ) { - - const isWebGL2 = capabilities.isWebGL2; - - function convert( p ) { - - let extension; - - if ( p === UnsignedByteType ) return 5121; - if ( p === UnsignedShort4444Type ) return 32819; - if ( p === UnsignedShort5551Type ) return 32820; - if ( p === UnsignedShort565Type ) return 33635; - - if ( p === ByteType ) return 5120; - if ( p === ShortType ) return 5122; - if ( p === UnsignedShortType ) return 5123; - if ( p === IntType ) return 5124; - if ( p === UnsignedIntType ) return 5125; - if ( p === FloatType ) return 5126; - - if ( p === HalfFloatType ) { - - if ( isWebGL2 ) return 5131; - - extension = extensions.get( 'OES_texture_half_float' ); - - if ( extension !== null ) { - - return extension.HALF_FLOAT_OES; - - } else { - - return null; - - } - - } - - if ( p === AlphaFormat ) return 6406; - if ( p === RGBFormat ) return 6407; - if ( p === RGBAFormat ) return 6408; - if ( p === LuminanceFormat ) return 6409; - if ( p === LuminanceAlphaFormat ) return 6410; - if ( p === DepthFormat ) return 6402; - if ( p === DepthStencilFormat ) return 34041; - if ( p === RedFormat ) return 6403; - - // WebGL2 formats. - - if ( p === RedIntegerFormat ) return 36244; - if ( p === RGFormat ) return 33319; - if ( p === RGIntegerFormat ) return 33320; - if ( p === RGBIntegerFormat ) return 36248; - if ( p === RGBAIntegerFormat ) return 36249; - - if ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || - p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) { - - extension = extensions.get( 'WEBGL_compressed_texture_s3tc' ); - - if ( extension !== null ) { - - if ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; - if ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; - if ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; - if ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; - - } else { - - return null; - - } - - } - - if ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || - p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) { - - extension = extensions.get( 'WEBGL_compressed_texture_pvrtc' ); - - if ( extension !== null ) { - - if ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; - if ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; - if ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; - if ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; - - } else { - - return null; - - } - - } - - if ( p === RGB_ETC1_Format ) { - - extension = extensions.get( 'WEBGL_compressed_texture_etc1' ); - - if ( extension !== null ) { - - return extension.COMPRESSED_RGB_ETC1_WEBGL; - - } else { - - return null; - - } - - } - - if ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) { - - extension = extensions.get( 'WEBGL_compressed_texture_etc' ); - - if ( extension !== null ) { - - if ( p === RGB_ETC2_Format ) return extension.COMPRESSED_RGB8_ETC2; - if ( p === RGBA_ETC2_EAC_Format ) return extension.COMPRESSED_RGBA8_ETC2_EAC; - - } - - } - - if ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format || - p === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format || - p === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format || - p === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format || - p === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format || - p === SRGB8_ALPHA8_ASTC_4x4_Format || p === SRGB8_ALPHA8_ASTC_5x4_Format || p === SRGB8_ALPHA8_ASTC_5x5_Format || - p === SRGB8_ALPHA8_ASTC_6x5_Format || p === SRGB8_ALPHA8_ASTC_6x6_Format || p === SRGB8_ALPHA8_ASTC_8x5_Format || - p === SRGB8_ALPHA8_ASTC_8x6_Format || p === SRGB8_ALPHA8_ASTC_8x8_Format || p === SRGB8_ALPHA8_ASTC_10x5_Format || - p === SRGB8_ALPHA8_ASTC_10x6_Format || p === SRGB8_ALPHA8_ASTC_10x8_Format || p === SRGB8_ALPHA8_ASTC_10x10_Format || - p === SRGB8_ALPHA8_ASTC_12x10_Format || p === SRGB8_ALPHA8_ASTC_12x12_Format ) { - - extension = extensions.get( 'WEBGL_compressed_texture_astc' ); - - if ( extension !== null ) { - - // TODO Complete? - - return p; - - } else { - - return null; - - } - - } - - if ( p === RGBA_BPTC_Format ) { - - extension = extensions.get( 'EXT_texture_compression_bptc' ); - - if ( extension !== null ) { - - // TODO Complete? - - return p; - - } else { - - return null; - - } - - } - - if ( p === UnsignedInt248Type ) { - - if ( isWebGL2 ) return 34042; - - extension = extensions.get( 'WEBGL_depth_texture' ); - - if ( extension !== null ) { - - return extension.UNSIGNED_INT_24_8_WEBGL; - - } else { - - return null; - - } - - } - - } - - return { convert: convert }; - - } - - function ArrayCamera( array = [] ) { - - PerspectiveCamera.call( this ); - - this.cameras = array; - - } - - ArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), { - - constructor: ArrayCamera, - - isArrayCamera: true - - } ); - - function Group$1() { - - Object3D.call( this ); - - this.type = 'Group'; - - } - - Group$1.prototype = Object.assign( Object.create( Object3D.prototype ), { - - constructor: Group$1, - - isGroup: true - - } ); - - function WebXRController() { - - this._targetRay = null; - this._grip = null; - this._hand = null; - - } - - Object.assign( WebXRController.prototype, { - - constructor: WebXRController, - - getHandSpace: function () { - - if ( this._hand === null ) { - - this._hand = new Group$1(); - this._hand.matrixAutoUpdate = false; - this._hand.visible = false; - - this._hand.joints = []; - this._hand.inputState = { pinching: false }; - - if ( window.XRHand ) { - - for ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) { - - // The transform of this joint will be updated with the joint pose on each frame - const joint = new Group$1(); - joint.matrixAutoUpdate = false; - joint.visible = false; - this._hand.joints.push( joint ); - // ?? - this._hand.add( joint ); - - } - - } - - } - - return this._hand; - - }, - - getTargetRaySpace: function () { - - if ( this._targetRay === null ) { - - this._targetRay = new Group$1(); - this._targetRay.matrixAutoUpdate = false; - this._targetRay.visible = false; - - } - - return this._targetRay; - - }, - - getGripSpace: function () { - - if ( this._grip === null ) { - - this._grip = new Group$1(); - this._grip.matrixAutoUpdate = false; - this._grip.visible = false; - - } - - return this._grip; - - }, - - dispatchEvent: function ( event ) { - - if ( this._targetRay !== null ) { - - this._targetRay.dispatchEvent( event ); - - } - - if ( this._grip !== null ) { - - this._grip.dispatchEvent( event ); - - } - - if ( this._hand !== null ) { - - this._hand.dispatchEvent( event ); - - } - - return this; - - }, - - disconnect: function ( inputSource ) { - - this.dispatchEvent( { type: 'disconnected', data: inputSource } ); - - if ( this._targetRay !== null ) { - - this._targetRay.visible = false; - - } - - if ( this._grip !== null ) { - - this._grip.visible = false; - - } - - if ( this._hand !== null ) { - - this._hand.visible = false; - - } - - return this; - - }, - - update: function ( inputSource, frame, referenceSpace ) { - - let inputPose = null; - let gripPose = null; - let handPose = null; - - const targetRay = this._targetRay; - const grip = this._grip; - const hand = this._hand; - - if ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) { - - if ( hand && inputSource.hand ) { - - handPose = true; - - for ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) { - - if ( inputSource.hand[ i ] ) { - - // Update the joints groups with the XRJoint poses - const jointPose = frame.getJointPose( inputSource.hand[ i ], referenceSpace ); - const joint = hand.joints[ i ]; - - if ( jointPose !== null ) { - - joint.matrix.fromArray( jointPose.transform.matrix ); - joint.matrix.decompose( joint.position, joint.rotation, joint.scale ); - joint.jointRadius = jointPose.radius; - - } - - joint.visible = jointPose !== null; - - // Custom events - - // Check pinch - const indexTip = hand.joints[ window.XRHand.INDEX_PHALANX_TIP ]; - const thumbTip = hand.joints[ window.XRHand.THUMB_PHALANX_TIP ]; - const distance = indexTip.position.distanceTo( thumbTip.position ); - - const distanceToPinch = 0.02; - const threshold = 0.005; - - if ( hand.inputState.pinching && distance > distanceToPinch + threshold ) { - - hand.inputState.pinching = false; - this.dispatchEvent( { - type: "pinchend", - handedness: inputSource.handedness, - target: this - } ); - - } else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) { - - hand.inputState.pinching = true; - this.dispatchEvent( { - type: "pinchstart", - handedness: inputSource.handedness, - target: this - } ); - - } - - } - - } - - } else { - - if ( targetRay !== null ) { - - inputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace ); - - if ( inputPose !== null ) { - - targetRay.matrix.fromArray( inputPose.transform.matrix ); - targetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale ); - - } - - } - - if ( grip !== null && inputSource.gripSpace ) { - - gripPose = frame.getPose( inputSource.gripSpace, referenceSpace ); - - if ( gripPose !== null ) { - - grip.matrix.fromArray( gripPose.transform.matrix ); - grip.matrix.decompose( grip.position, grip.rotation, grip.scale ); - - } - - } - - } - - } - - if ( targetRay !== null ) { - - targetRay.visible = ( inputPose !== null ); - - } - - if ( grip !== null ) { - - grip.visible = ( gripPose !== null ); - - } - - if ( hand !== null ) { - - hand.visible = ( handPose !== null ); - - } - - return this; - - } - - } ); - - function WebXRManager( renderer, gl ) { - - const scope = this; - - let session = null; - - let framebufferScaleFactor = 1.0; - - let referenceSpace = null; - let referenceSpaceType = 'local-floor'; - - let pose = null; - - const controllers = []; - const inputSourcesMap = new Map(); - - // - - const cameraL = new PerspectiveCamera(); - cameraL.layers.enable( 1 ); - cameraL.viewport = new Vector4(); - - const cameraR = new PerspectiveCamera(); - cameraR.layers.enable( 2 ); - cameraR.viewport = new Vector4(); - - const cameras = [ cameraL, cameraR ]; - - const cameraVR = new ArrayCamera(); - cameraVR.layers.enable( 1 ); - cameraVR.layers.enable( 2 ); - - let _currentDepthNear = null; - let _currentDepthFar = null; - - // - - this.enabled = false; - - this.isPresenting = false; - - this.getController = function ( index ) { - - let controller = controllers[ index ]; - - if ( controller === undefined ) { - - controller = new WebXRController(); - controllers[ index ] = controller; - - } - - return controller.getTargetRaySpace(); - - }; - - this.getControllerGrip = function ( index ) { - - let controller = controllers[ index ]; - - if ( controller === undefined ) { - - controller = new WebXRController(); - controllers[ index ] = controller; - - } - - return controller.getGripSpace(); - - }; - - this.getHand = function ( index ) { - - let controller = controllers[ index ]; - - if ( controller === undefined ) { - - controller = new WebXRController(); - controllers[ index ] = controller; - - } - - return controller.getHandSpace(); - - }; - - // - - function onSessionEvent( event ) { - - const controller = inputSourcesMap.get( event.inputSource ); - - if ( controller ) { - - controller.dispatchEvent( { type: event.type, data: event.inputSource } ); - - } - - } - - function onSessionEnd() { - - inputSourcesMap.forEach( function ( controller, inputSource ) { - - controller.disconnect( inputSource ); - - } ); - - inputSourcesMap.clear(); - - // - - renderer.setFramebuffer( null ); - renderer.setRenderTarget( renderer.getRenderTarget() ); // Hack #15830 - animation.stop(); - - scope.isPresenting = false; - - scope.dispatchEvent( { type: 'sessionend' } ); - - } - - function onRequestReferenceSpace( value ) { - - referenceSpace = value; - - animation.setContext( session ); - animation.start(); - - scope.isPresenting = true; - - scope.dispatchEvent( { type: 'sessionstart' } ); - - } - - this.setFramebufferScaleFactor = function ( value ) { - - framebufferScaleFactor = value; - - if ( scope.isPresenting === true ) { - - console.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' ); - - } - - }; - - this.setReferenceSpaceType = function ( value ) { - - referenceSpaceType = value; - - if ( scope.isPresenting === true ) { - - console.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' ); - - } - - }; - - this.getReferenceSpace = function () { - - return referenceSpace; - - }; - - this.getSession = function () { - - return session; - - }; - - this.setSession = function ( value ) { - - session = value; - - if ( session !== null ) { - - session.addEventListener( 'select', onSessionEvent ); - session.addEventListener( 'selectstart', onSessionEvent ); - session.addEventListener( 'selectend', onSessionEvent ); - session.addEventListener( 'squeeze', onSessionEvent ); - session.addEventListener( 'squeezestart', onSessionEvent ); - session.addEventListener( 'squeezeend', onSessionEvent ); - session.addEventListener( 'end', onSessionEnd ); - - const attributes = gl.getContextAttributes(); - - if ( attributes.xrCompatible !== true ) { - - gl.makeXRCompatible(); - - } - - const layerInit = { - antialias: attributes.antialias, - alpha: attributes.alpha, - depth: attributes.depth, - stencil: attributes.stencil, - framebufferScaleFactor: framebufferScaleFactor - }; - - // eslint-disable-next-line no-undef - const baseLayer = new XRWebGLLayer( session, gl, layerInit ); - - session.updateRenderState( { baseLayer: baseLayer } ); - - session.requestReferenceSpace( referenceSpaceType ).then( onRequestReferenceSpace ); - - // - - session.addEventListener( 'inputsourceschange', updateInputSources ); - - } - - }; - - function updateInputSources( event ) { - - const inputSources = session.inputSources; - - // Assign inputSources to available controllers - - for ( let i = 0; i < controllers.length; i ++ ) { - - inputSourcesMap.set( inputSources[ i ], controllers[ i ] ); - - } - - // Notify disconnected - - for ( let i = 0; i < event.removed.length; i ++ ) { - - const inputSource = event.removed[ i ]; - const controller = inputSourcesMap.get( inputSource ); - - if ( controller ) { - - controller.dispatchEvent( { type: 'disconnected', data: inputSource } ); - inputSourcesMap.delete( inputSource ); - - } - - } - - // Notify connected - - for ( let i = 0; i < event.added.length; i ++ ) { - - const inputSource = event.added[ i ]; - const controller = inputSourcesMap.get( inputSource ); - - if ( controller ) { - - controller.dispatchEvent( { type: 'connected', data: inputSource } ); - - } - - } - - } - - // - - const cameraLPos = new Vector3(); - const cameraRPos = new Vector3(); - - /** - * Assumes 2 cameras that are parallel and share an X-axis, and that - * the cameras' projection and world matrices have already been set. - * And that near and far planes are identical for both cameras. - * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765 - */ - function setProjectionFromUnion( camera, cameraL, cameraR ) { - - cameraLPos.setFromMatrixPosition( cameraL.matrixWorld ); - cameraRPos.setFromMatrixPosition( cameraR.matrixWorld ); - - const ipd = cameraLPos.distanceTo( cameraRPos ); - - const projL = cameraL.projectionMatrix.elements; - const projR = cameraR.projectionMatrix.elements; - - // VR systems will have identical far and near planes, and - // most likely identical top and bottom frustum extents. - // Use the left camera for these values. - const near = projL[ 14 ] / ( projL[ 10 ] - 1 ); - const far = projL[ 14 ] / ( projL[ 10 ] + 1 ); - const topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ]; - const bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ]; - - const leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ]; - const rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ]; - const left = near * leftFov; - const right = near * rightFov; - - // Calculate the new camera's position offset from the - // left camera. xOffset should be roughly half `ipd`. - const zOffset = ipd / ( - leftFov + rightFov ); - const xOffset = zOffset * - leftFov; - - // TODO: Better way to apply this offset? - cameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale ); - camera.translateX( xOffset ); - camera.translateZ( zOffset ); - camera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale ); - camera.matrixWorldInverse.copy( camera.matrixWorld ).invert(); - - // Find the union of the frustum values of the cameras and scale - // the values so that the near plane's position does not change in world space, - // although must now be relative to the new union camera. - const near2 = near + zOffset; - const far2 = far + zOffset; - const left2 = left - xOffset; - const right2 = right + ( ipd - xOffset ); - const top2 = topFov * far / far2 * near2; - const bottom2 = bottomFov * far / far2 * near2; - - camera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 ); - - } - - function updateCamera( camera, parent ) { - - if ( parent === null ) { - - camera.matrixWorld.copy( camera.matrix ); - - } else { - - camera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix ); - - } - - camera.matrixWorldInverse.copy( camera.matrixWorld ).invert(); - - } - - this.getCamera = function ( camera ) { - - cameraVR.near = cameraR.near = cameraL.near = camera.near; - cameraVR.far = cameraR.far = cameraL.far = camera.far; - - if ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) { - - // Note that the new renderState won't apply until the next frame. See #18320 - - session.updateRenderState( { - depthNear: cameraVR.near, - depthFar: cameraVR.far - } ); - - _currentDepthNear = cameraVR.near; - _currentDepthFar = cameraVR.far; - - } - - const parent = camera.parent; - const cameras = cameraVR.cameras; - - updateCamera( cameraVR, parent ); - - for ( let i = 0; i < cameras.length; i ++ ) { - - updateCamera( cameras[ i ], parent ); - - } - - // update camera and its children - - camera.matrixWorld.copy( cameraVR.matrixWorld ); - - const children = camera.children; - - for ( let i = 0, l = children.length; i < l; i ++ ) { - - children[ i ].updateMatrixWorld( true ); - - } - - // update projection matrix for proper view frustum culling - - if ( cameras.length === 2 ) { - - setProjectionFromUnion( cameraVR, cameraL, cameraR ); - - } else { - - // assume single camera setup (AR) - - cameraVR.projectionMatrix.copy( cameraL.projectionMatrix ); - - } - - return cameraVR; - - }; - - // Animation Loop - - let onAnimationFrameCallback = null; - - function onAnimationFrame( time, frame ) { - - pose = frame.getViewerPose( referenceSpace ); - - if ( pose !== null ) { - - const views = pose.views; - const baseLayer = session.renderState.baseLayer; - - renderer.setFramebuffer( baseLayer.framebuffer ); - - let cameraVRNeedsUpdate = false; - - // check if it's necessary to rebuild cameraVR's camera list - - if ( views.length !== cameraVR.cameras.length ) { - - cameraVR.cameras.length = 0; - cameraVRNeedsUpdate = true; - - } - - for ( let i = 0; i < views.length; i ++ ) { - - const view = views[ i ]; - const viewport = baseLayer.getViewport( view ); - - const camera = cameras[ i ]; - camera.matrix.fromArray( view.transform.matrix ); - camera.projectionMatrix.fromArray( view.projectionMatrix ); - camera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height ); - - if ( i === 0 ) { - - cameraVR.matrix.copy( camera.matrix ); - - } - - if ( cameraVRNeedsUpdate === true ) { - - cameraVR.cameras.push( camera ); - - } - - } - - } - - // - - const inputSources = session.inputSources; - - for ( let i = 0; i < controllers.length; i ++ ) { - - const controller = controllers[ i ]; - const inputSource = inputSources[ i ]; - - controller.update( inputSource, frame, referenceSpace ); - - } - - if ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame ); - - } - - const animation = new WebGLAnimation(); - animation.setAnimationLoop( onAnimationFrame ); - - this.setAnimationLoop = function ( callback ) { - - onAnimationFrameCallback = callback; - - }; - - this.dispose = function () {}; - - } - - Object.assign( WebXRManager.prototype, EventDispatcher.prototype ); - - function WebGLMaterials( properties ) { - - function refreshFogUniforms( uniforms, fog ) { - - uniforms.fogColor.value.copy( fog.color ); - - if ( fog.isFog ) { - - uniforms.fogNear.value = fog.near; - uniforms.fogFar.value = fog.far; - - } else if ( fog.isFogExp2 ) { - - uniforms.fogDensity.value = fog.density; - - } - - } - - function refreshMaterialUniforms( uniforms, material, pixelRatio, height ) { - - if ( material.isMeshBasicMaterial ) { - - refreshUniformsCommon( uniforms, material ); - - } else if ( material.isMeshLambertMaterial ) { - - refreshUniformsCommon( uniforms, material ); - refreshUniformsLambert( uniforms, material ); - - } else if ( material.isMeshToonMaterial ) { - - refreshUniformsCommon( uniforms, material ); - refreshUniformsToon( uniforms, material ); - - } else if ( material.isMeshPhongMaterial ) { - - refreshUniformsCommon( uniforms, material ); - refreshUniformsPhong( uniforms, material ); - - } else if ( material.isMeshStandardMaterial ) { - - refreshUniformsCommon( uniforms, material ); - - if ( material.isMeshPhysicalMaterial ) { - - refreshUniformsPhysical( uniforms, material ); - - } else { - - refreshUniformsStandard( uniforms, material ); - - } - - } else if ( material.isMeshMatcapMaterial ) { - - refreshUniformsCommon( uniforms, material ); - refreshUniformsMatcap( uniforms, material ); - - } else if ( material.isMeshDepthMaterial ) { - - refreshUniformsCommon( uniforms, material ); - refreshUniformsDepth( uniforms, material ); - - } else if ( material.isMeshDistanceMaterial ) { - - refreshUniformsCommon( uniforms, material ); - refreshUniformsDistance( uniforms, material ); - - } else if ( material.isMeshNormalMaterial ) { - - refreshUniformsCommon( uniforms, material ); - refreshUniformsNormal( uniforms, material ); - - } else if ( material.isLineBasicMaterial ) { - - refreshUniformsLine( uniforms, material ); - - if ( material.isLineDashedMaterial ) { - - refreshUniformsDash( uniforms, material ); - - } - - } else if ( material.isPointsMaterial ) { - - refreshUniformsPoints( uniforms, material, pixelRatio, height ); - - } else if ( material.isSpriteMaterial ) { - - refreshUniformsSprites( uniforms, material ); - - } else if ( material.isShadowMaterial ) { - - uniforms.color.value.copy( material.color ); - uniforms.opacity.value = material.opacity; - - } else if ( material.isShaderMaterial ) { - - material.uniformsNeedUpdate = false; // #15581 - - } - - } - - function refreshUniformsCommon( uniforms, material ) { - - uniforms.opacity.value = material.opacity; - - if ( material.color ) { - - uniforms.diffuse.value.copy( material.color ); - - } - - if ( material.emissive ) { - - uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity ); - - } - - if ( material.map ) { - - uniforms.map.value = material.map; - - } - - if ( material.alphaMap ) { - - uniforms.alphaMap.value = material.alphaMap; - - } - - if ( material.specularMap ) { - - uniforms.specularMap.value = material.specularMap; - - } - - const envMap = properties.get( material ).envMap; - - if ( envMap ) { - - uniforms.envMap.value = envMap; - - uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap._needsFlipEnvMap ) ? - 1 : 1; - - uniforms.reflectivity.value = material.reflectivity; - uniforms.refractionRatio.value = material.refractionRatio; - - const maxMipLevel = properties.get( envMap ).__maxMipLevel; - - if ( maxMipLevel !== undefined ) { - - uniforms.maxMipLevel.value = maxMipLevel; - - } - - } - - if ( material.lightMap ) { - - uniforms.lightMap.value = material.lightMap; - uniforms.lightMapIntensity.value = material.lightMapIntensity; - - } - - if ( material.aoMap ) { - - uniforms.aoMap.value = material.aoMap; - uniforms.aoMapIntensity.value = material.aoMapIntensity; - - } - - // uv repeat and offset setting priorities - // 1. color map - // 2. specular map - // 3. displacementMap map - // 4. normal map - // 5. bump map - // 6. roughnessMap map - // 7. metalnessMap map - // 8. alphaMap map - // 9. emissiveMap map - // 10. clearcoat map - // 11. clearcoat normal map - // 12. clearcoat roughnessMap map - - let uvScaleMap; - - if ( material.map ) { - - uvScaleMap = material.map; - - } else if ( material.specularMap ) { - - uvScaleMap = material.specularMap; - - } else if ( material.displacementMap ) { - - uvScaleMap = material.displacementMap; - - } else if ( material.normalMap ) { - - uvScaleMap = material.normalMap; - - } else if ( material.bumpMap ) { - - uvScaleMap = material.bumpMap; - - } else if ( material.roughnessMap ) { - - uvScaleMap = material.roughnessMap; - - } else if ( material.metalnessMap ) { - - uvScaleMap = material.metalnessMap; - - } else if ( material.alphaMap ) { - - uvScaleMap = material.alphaMap; - - } else if ( material.emissiveMap ) { - - uvScaleMap = material.emissiveMap; - - } else if ( material.clearcoatMap ) { - - uvScaleMap = material.clearcoatMap; - - } else if ( material.clearcoatNormalMap ) { - - uvScaleMap = material.clearcoatNormalMap; - - } else if ( material.clearcoatRoughnessMap ) { - - uvScaleMap = material.clearcoatRoughnessMap; - - } - - if ( uvScaleMap !== undefined ) { - - // backwards compatibility - if ( uvScaleMap.isWebGLRenderTarget ) { - - uvScaleMap = uvScaleMap.texture; - - } - - if ( uvScaleMap.matrixAutoUpdate === true ) { - - uvScaleMap.updateMatrix(); - - } - - uniforms.uvTransform.value.copy( uvScaleMap.matrix ); - - } - - // uv repeat and offset setting priorities for uv2 - // 1. ao map - // 2. light map - - let uv2ScaleMap; - - if ( material.aoMap ) { - - uv2ScaleMap = material.aoMap; - - } else if ( material.lightMap ) { - - uv2ScaleMap = material.lightMap; - - } - - if ( uv2ScaleMap !== undefined ) { - - // backwards compatibility - if ( uv2ScaleMap.isWebGLRenderTarget ) { - - uv2ScaleMap = uv2ScaleMap.texture; - - } - - if ( uv2ScaleMap.matrixAutoUpdate === true ) { - - uv2ScaleMap.updateMatrix(); - - } - - uniforms.uv2Transform.value.copy( uv2ScaleMap.matrix ); - - } - - } - - function refreshUniformsLine( uniforms, material ) { - - uniforms.diffuse.value.copy( material.color ); - uniforms.opacity.value = material.opacity; - - } - - function refreshUniformsDash( uniforms, material ) { - - uniforms.dashSize.value = material.dashSize; - uniforms.totalSize.value = material.dashSize + material.gapSize; - uniforms.scale.value = material.scale; - - } - - function refreshUniformsPoints( uniforms, material, pixelRatio, height ) { - - uniforms.diffuse.value.copy( material.color ); - uniforms.opacity.value = material.opacity; - uniforms.size.value = material.size * pixelRatio; - uniforms.scale.value = height * 0.5; - - if ( material.map ) { - - uniforms.map.value = material.map; - - } - - if ( material.alphaMap ) { - - uniforms.alphaMap.value = material.alphaMap; - - } - - // uv repeat and offset setting priorities - // 1. color map - // 2. alpha map - - let uvScaleMap; - - if ( material.map ) { - - uvScaleMap = material.map; - - } else if ( material.alphaMap ) { - - uvScaleMap = material.alphaMap; - - } - - if ( uvScaleMap !== undefined ) { - - if ( uvScaleMap.matrixAutoUpdate === true ) { - - uvScaleMap.updateMatrix(); - - } - - uniforms.uvTransform.value.copy( uvScaleMap.matrix ); - - } - - } - - function refreshUniformsSprites( uniforms, material ) { - - uniforms.diffuse.value.copy( material.color ); - uniforms.opacity.value = material.opacity; - uniforms.rotation.value = material.rotation; - - if ( material.map ) { - - uniforms.map.value = material.map; - - } - - if ( material.alphaMap ) { - - uniforms.alphaMap.value = material.alphaMap; - - } - - // uv repeat and offset setting priorities - // 1. color map - // 2. alpha map - - let uvScaleMap; - - if ( material.map ) { - - uvScaleMap = material.map; - - } else if ( material.alphaMap ) { - - uvScaleMap = material.alphaMap; - - } - - if ( uvScaleMap !== undefined ) { - - if ( uvScaleMap.matrixAutoUpdate === true ) { - - uvScaleMap.updateMatrix(); - - } - - uniforms.uvTransform.value.copy( uvScaleMap.matrix ); - - } - - } - - function refreshUniformsLambert( uniforms, material ) { - - if ( material.emissiveMap ) { - - uniforms.emissiveMap.value = material.emissiveMap; - - } - - } - - function refreshUniformsPhong( uniforms, material ) { - - uniforms.specular.value.copy( material.specular ); - uniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 ) - - if ( material.emissiveMap ) { - - uniforms.emissiveMap.value = material.emissiveMap; - - } - - if ( material.bumpMap ) { - - uniforms.bumpMap.value = material.bumpMap; - uniforms.bumpScale.value = material.bumpScale; - if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; - - } - - if ( material.normalMap ) { - - uniforms.normalMap.value = material.normalMap; - uniforms.normalScale.value.copy( material.normalScale ); - if ( material.side === BackSide ) uniforms.normalScale.value.negate(); - - } - - if ( material.displacementMap ) { - - uniforms.displacementMap.value = material.displacementMap; - uniforms.displacementScale.value = material.displacementScale; - uniforms.displacementBias.value = material.displacementBias; - - } - - } - - function refreshUniformsToon( uniforms, material ) { - - if ( material.gradientMap ) { - - uniforms.gradientMap.value = material.gradientMap; - - } - - if ( material.emissiveMap ) { - - uniforms.emissiveMap.value = material.emissiveMap; - - } - - if ( material.bumpMap ) { - - uniforms.bumpMap.value = material.bumpMap; - uniforms.bumpScale.value = material.bumpScale; - if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; - - } - - if ( material.normalMap ) { - - uniforms.normalMap.value = material.normalMap; - uniforms.normalScale.value.copy( material.normalScale ); - if ( material.side === BackSide ) uniforms.normalScale.value.negate(); - - } - - if ( material.displacementMap ) { - - uniforms.displacementMap.value = material.displacementMap; - uniforms.displacementScale.value = material.displacementScale; - uniforms.displacementBias.value = material.displacementBias; - - } - - } - - function refreshUniformsStandard( uniforms, material ) { - - uniforms.roughness.value = material.roughness; - uniforms.metalness.value = material.metalness; - - if ( material.roughnessMap ) { - - uniforms.roughnessMap.value = material.roughnessMap; - - } - - if ( material.metalnessMap ) { - - uniforms.metalnessMap.value = material.metalnessMap; - - } - - if ( material.emissiveMap ) { - - uniforms.emissiveMap.value = material.emissiveMap; - - } - - if ( material.bumpMap ) { - - uniforms.bumpMap.value = material.bumpMap; - uniforms.bumpScale.value = material.bumpScale; - if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; - - } - - if ( material.normalMap ) { - - uniforms.normalMap.value = material.normalMap; - uniforms.normalScale.value.copy( material.normalScale ); - if ( material.side === BackSide ) uniforms.normalScale.value.negate(); - - } - - if ( material.displacementMap ) { - - uniforms.displacementMap.value = material.displacementMap; - uniforms.displacementScale.value = material.displacementScale; - uniforms.displacementBias.value = material.displacementBias; - - } - - const envMap = properties.get( material ).envMap; - - if ( envMap ) { - - //uniforms.envMap.value = material.envMap; // part of uniforms common - uniforms.envMapIntensity.value = material.envMapIntensity; - - } - - } - - function refreshUniformsPhysical( uniforms, material ) { - - refreshUniformsStandard( uniforms, material ); - - uniforms.reflectivity.value = material.reflectivity; // also part of uniforms common - - uniforms.clearcoat.value = material.clearcoat; - uniforms.clearcoatRoughness.value = material.clearcoatRoughness; - if ( material.sheen ) uniforms.sheen.value.copy( material.sheen ); - - if ( material.clearcoatMap ) { - - uniforms.clearcoatMap.value = material.clearcoatMap; - - } - - if ( material.clearcoatRoughnessMap ) { - - uniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap; - - } - - if ( material.clearcoatNormalMap ) { - - uniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale ); - uniforms.clearcoatNormalMap.value = material.clearcoatNormalMap; - - if ( material.side === BackSide ) { - - uniforms.clearcoatNormalScale.value.negate(); - - } - - } - - uniforms.transmission.value = material.transmission; - - if ( material.transmissionMap ) { - - uniforms.transmissionMap.value = material.transmissionMap; - - } - - } - - function refreshUniformsMatcap( uniforms, material ) { - - if ( material.matcap ) { - - uniforms.matcap.value = material.matcap; - - } - - if ( material.bumpMap ) { - - uniforms.bumpMap.value = material.bumpMap; - uniforms.bumpScale.value = material.bumpScale; - if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; - - } - - if ( material.normalMap ) { - - uniforms.normalMap.value = material.normalMap; - uniforms.normalScale.value.copy( material.normalScale ); - if ( material.side === BackSide ) uniforms.normalScale.value.negate(); - - } - - if ( material.displacementMap ) { - - uniforms.displacementMap.value = material.displacementMap; - uniforms.displacementScale.value = material.displacementScale; - uniforms.displacementBias.value = material.displacementBias; - - } - - } - - function refreshUniformsDepth( uniforms, material ) { - - if ( material.displacementMap ) { - - uniforms.displacementMap.value = material.displacementMap; - uniforms.displacementScale.value = material.displacementScale; - uniforms.displacementBias.value = material.displacementBias; - - } - - } - - function refreshUniformsDistance( uniforms, material ) { - - if ( material.displacementMap ) { - - uniforms.displacementMap.value = material.displacementMap; - uniforms.displacementScale.value = material.displacementScale; - uniforms.displacementBias.value = material.displacementBias; - - } - - uniforms.referencePosition.value.copy( material.referencePosition ); - uniforms.nearDistance.value = material.nearDistance; - uniforms.farDistance.value = material.farDistance; - - } - - function refreshUniformsNormal( uniforms, material ) { - - if ( material.bumpMap ) { - - uniforms.bumpMap.value = material.bumpMap; - uniforms.bumpScale.value = material.bumpScale; - if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; - - } - - if ( material.normalMap ) { - - uniforms.normalMap.value = material.normalMap; - uniforms.normalScale.value.copy( material.normalScale ); - if ( material.side === BackSide ) uniforms.normalScale.value.negate(); - - } - - if ( material.displacementMap ) { - - uniforms.displacementMap.value = material.displacementMap; - uniforms.displacementScale.value = material.displacementScale; - uniforms.displacementBias.value = material.displacementBias; - - } - - } - - return { - refreshFogUniforms: refreshFogUniforms, - refreshMaterialUniforms: refreshMaterialUniforms - }; - - } - - function createCanvasElement() { - - const canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); - canvas.style.display = 'block'; - return canvas; - - } - - function WebGLRenderer( parameters ) { - - parameters = parameters || {}; - - const _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(), - _context = parameters.context !== undefined ? parameters.context : null, - - _alpha = parameters.alpha !== undefined ? parameters.alpha : false, - _depth = parameters.depth !== undefined ? parameters.depth : true, - _stencil = parameters.stencil !== undefined ? parameters.stencil : true, - _antialias = parameters.antialias !== undefined ? parameters.antialias : false, - _premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true, - _preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false, - _powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default', - _failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false; - - let currentRenderList = null; - let currentRenderState = null; - - // public properties - - this.domElement = _canvas; - - // Debug configuration container - this.debug = { - - /** - * Enables error checking and reporting when shader programs are being compiled - * @type {boolean} - */ - checkShaderErrors: true - }; - - // clearing - - this.autoClear = true; - this.autoClearColor = true; - this.autoClearDepth = true; - this.autoClearStencil = true; - - // scene graph - - this.sortObjects = true; - - // user-defined clipping - - this.clippingPlanes = []; - this.localClippingEnabled = false; - - // physically based shading - - this.gammaFactor = 2.0; // for backwards compatibility - this.outputEncoding = LinearEncoding; - - // physical lights - - this.physicallyCorrectLights = false; - - // tone mapping - - this.toneMapping = NoToneMapping; - this.toneMappingExposure = 1.0; - - // morphs - - this.maxMorphTargets = 8; - this.maxMorphNormals = 4; - - // internal properties - - const _this = this; - - let _isContextLost = false; - - // internal state cache - - let _framebuffer = null; - - let _currentActiveCubeFace = 0; - let _currentActiveMipmapLevel = 0; - let _currentRenderTarget = null; - let _currentFramebuffer = null; - let _currentMaterialId = - 1; - - let _currentCamera = null; - let _currentArrayCamera = null; - - const _currentViewport = new Vector4(); - const _currentScissor = new Vector4(); - let _currentScissorTest = null; - - // - - let _width = _canvas.width; - let _height = _canvas.height; - - let _pixelRatio = 1; - let _opaqueSort = null; - let _transparentSort = null; - - const _viewport = new Vector4( 0, 0, _width, _height ); - const _scissor = new Vector4( 0, 0, _width, _height ); - let _scissorTest = false; - - // frustum - - const _frustum = new Frustum(); - - // clipping - - let _clippingEnabled = false; - let _localClippingEnabled = false; - - // camera matrices cache - - const _projScreenMatrix = new Matrix4(); - - const _vector3 = new Vector3(); - - const _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true }; - - function getTargetPixelRatio() { - - return _currentRenderTarget === null ? _pixelRatio : 1; - - } - - // initialize - - let _gl = _context; - - function getContext( contextNames, contextAttributes ) { - - for ( let i = 0; i < contextNames.length; i ++ ) { - - const contextName = contextNames[ i ]; - const context = _canvas.getContext( contextName, contextAttributes ); - if ( context !== null ) return context; - - } - - return null; - - } - - try { - - const contextAttributes = { - alpha: _alpha, - depth: _depth, - stencil: _stencil, - antialias: _antialias, - premultipliedAlpha: _premultipliedAlpha, - preserveDrawingBuffer: _preserveDrawingBuffer, - powerPreference: _powerPreference, - failIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat - }; - - // event listeners must be registered before WebGL context is created, see #12753 - - _canvas.addEventListener( 'webglcontextlost', onContextLost, false ); - _canvas.addEventListener( 'webglcontextrestored', onContextRestore, false ); - - if ( _gl === null ) { - - const contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ]; - - if ( _this.isWebGL1Renderer === true ) { - - contextNames.shift(); - - } - - _gl = getContext( contextNames, contextAttributes ); - - if ( _gl === null ) { - - if ( getContext( contextNames ) ) { - - throw new Error( 'Error creating WebGL context with your selected attributes.' ); - - } else { - - throw new Error( 'Error creating WebGL context.' ); - - } - - } - - } - - // Some experimental-webgl implementations do not have getShaderPrecisionFormat - - if ( _gl.getShaderPrecisionFormat === undefined ) { - - _gl.getShaderPrecisionFormat = function () { - - return { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 }; - - }; - - } - - } catch ( error ) { - - console.error( 'THREE.WebGLRenderer: ' + error.message ); - throw error; - - } - - let extensions, capabilities, state, info; - let properties, textures, cubemaps, attributes, geometries, objects; - let programCache, materials, renderLists, renderStates, clipping; - - let background, morphtargets, bufferRenderer, indexedBufferRenderer; - - let utils, bindingStates; - - function initGLContext() { - - extensions = new WebGLExtensions( _gl ); - - capabilities = new WebGLCapabilities( _gl, extensions, parameters ); - - if ( capabilities.isWebGL2 === false ) { - - extensions.get( 'WEBGL_depth_texture' ); - extensions.get( 'OES_texture_float' ); - extensions.get( 'OES_texture_half_float' ); - extensions.get( 'OES_texture_half_float_linear' ); - extensions.get( 'OES_standard_derivatives' ); - extensions.get( 'OES_element_index_uint' ); - extensions.get( 'OES_vertex_array_object' ); - extensions.get( 'ANGLE_instanced_arrays' ); - - } - - extensions.get( 'OES_texture_float_linear' ); - - utils = new WebGLUtils( _gl, extensions, capabilities ); - - state = new WebGLState( _gl, extensions, capabilities ); - state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() ); - state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() ); - - info = new WebGLInfo( _gl ); - properties = new WebGLProperties(); - textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ); - cubemaps = new WebGLCubeMaps( _this ); - attributes = new WebGLAttributes( _gl, capabilities ); - bindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities ); - geometries = new WebGLGeometries( _gl, attributes, info, bindingStates ); - objects = new WebGLObjects( _gl, geometries, attributes, info ); - morphtargets = new WebGLMorphtargets( _gl ); - clipping = new WebGLClipping( properties ); - programCache = new WebGLPrograms( _this, cubemaps, extensions, capabilities, bindingStates, clipping ); - materials = new WebGLMaterials( properties ); - renderLists = new WebGLRenderLists( properties ); - renderStates = new WebGLRenderStates( extensions, capabilities ); - background = new WebGLBackground( _this, cubemaps, state, objects, _premultipliedAlpha ); - - bufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities ); - indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities ); - - info.programs = programCache.programs; - - _this.capabilities = capabilities; - _this.extensions = extensions; - _this.properties = properties; - _this.renderLists = renderLists; - _this.state = state; - _this.info = info; - - } - - initGLContext(); - - // xr - - const xr = new WebXRManager( _this, _gl ); - - this.xr = xr; - - // shadow map - - const shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize ); - - this.shadowMap = shadowMap; - - // API - - this.getContext = function () { - - return _gl; - - }; - - this.getContextAttributes = function () { - - return _gl.getContextAttributes(); - - }; - - this.forceContextLoss = function () { - - const extension = extensions.get( 'WEBGL_lose_context' ); - if ( extension ) extension.loseContext(); - - }; - - this.forceContextRestore = function () { - - const extension = extensions.get( 'WEBGL_lose_context' ); - if ( extension ) extension.restoreContext(); - - }; - - this.getPixelRatio = function () { - - return _pixelRatio; - - }; - - this.setPixelRatio = function ( value ) { - - if ( value === undefined ) return; - - _pixelRatio = value; - - this.setSize( _width, _height, false ); - - }; - - this.getSize = function ( target ) { - - if ( target === undefined ) { - - console.warn( 'WebGLRenderer: .getsize() now requires a Vector2 as an argument' ); - - target = new Vector2(); - - } - - return target.set( _width, _height ); - - }; - - this.setSize = function ( width, height, updateStyle ) { - - if ( xr.isPresenting ) { - - console.warn( 'THREE.WebGLRenderer: Can\'t change size while VR device is presenting.' ); - return; - - } - - _width = width; - _height = height; - - _canvas.width = Math.floor( width * _pixelRatio ); - _canvas.height = Math.floor( height * _pixelRatio ); - - if ( updateStyle !== false ) { - - _canvas.style.width = width + 'px'; - _canvas.style.height = height + 'px'; - - } - - this.setViewport( 0, 0, width, height ); - - }; - - this.getDrawingBufferSize = function ( target ) { - - if ( target === undefined ) { - - console.warn( 'WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument' ); - - target = new Vector2(); - - } - - return target.set( _width * _pixelRatio, _height * _pixelRatio ).floor(); - - }; - - this.setDrawingBufferSize = function ( width, height, pixelRatio ) { - - _width = width; - _height = height; - - _pixelRatio = pixelRatio; - - _canvas.width = Math.floor( width * pixelRatio ); - _canvas.height = Math.floor( height * pixelRatio ); - - this.setViewport( 0, 0, width, height ); - - }; - - this.getCurrentViewport = function ( target ) { - - if ( target === undefined ) { - - console.warn( 'WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument' ); - - target = new Vector4(); - - } - - return target.copy( _currentViewport ); - - }; - - this.getViewport = function ( target ) { - - return target.copy( _viewport ); - - }; - - this.setViewport = function ( x, y, width, height ) { - - if ( x.isVector4 ) { - - _viewport.set( x.x, x.y, x.z, x.w ); - - } else { - - _viewport.set( x, y, width, height ); - - } - - state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() ); - - }; - - this.getScissor = function ( target ) { - - return target.copy( _scissor ); - - }; - - this.setScissor = function ( x, y, width, height ) { - - if ( x.isVector4 ) { - - _scissor.set( x.x, x.y, x.z, x.w ); - - } else { - - _scissor.set( x, y, width, height ); - - } - - state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() ); - - }; - - this.getScissorTest = function () { - - return _scissorTest; - - }; - - this.setScissorTest = function ( boolean ) { - - state.setScissorTest( _scissorTest = boolean ); - - }; - - this.setOpaqueSort = function ( method ) { - - _opaqueSort = method; - - }; - - this.setTransparentSort = function ( method ) { - - _transparentSort = method; - - }; - - // Clearing - - this.getClearColor = function () { - - return background.getClearColor(); - - }; - - this.setClearColor = function () { - - background.setClearColor.apply( background, arguments ); - - }; - - this.getClearAlpha = function () { - - return background.getClearAlpha(); - - }; - - this.setClearAlpha = function () { - - background.setClearAlpha.apply( background, arguments ); - - }; - - this.clear = function ( color, depth, stencil ) { - - let bits = 0; - - if ( color === undefined || color ) bits |= 16384; - if ( depth === undefined || depth ) bits |= 256; - if ( stencil === undefined || stencil ) bits |= 1024; - - _gl.clear( bits ); - - }; - - this.clearColor = function () { - - this.clear( true, false, false ); - - }; - - this.clearDepth = function () { - - this.clear( false, true, false ); - - }; - - this.clearStencil = function () { - - this.clear( false, false, true ); - - }; - - // - - this.dispose = function () { - - _canvas.removeEventListener( 'webglcontextlost', onContextLost, false ); - _canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false ); - - renderLists.dispose(); - renderStates.dispose(); - properties.dispose(); - cubemaps.dispose(); - objects.dispose(); - bindingStates.dispose(); - - xr.dispose(); - - animation.stop(); - - }; - - // Events - - function onContextLost( event ) { - - event.preventDefault(); - - console.log( 'THREE.WebGLRenderer: Context Lost.' ); - - _isContextLost = true; - - } - - function onContextRestore( /* event */ ) { - - console.log( 'THREE.WebGLRenderer: Context Restored.' ); - - _isContextLost = false; - - initGLContext(); - - } - - function onMaterialDispose( event ) { - - const material = event.target; - - material.removeEventListener( 'dispose', onMaterialDispose ); - - deallocateMaterial( material ); - - } - - // Buffer deallocation - - function deallocateMaterial( material ) { - - releaseMaterialProgramReference( material ); - - properties.remove( material ); - - } - - - function releaseMaterialProgramReference( material ) { - - const programInfo = properties.get( material ).program; - - if ( programInfo !== undefined ) { - - programCache.releaseProgram( programInfo ); - - } - - } - - // Buffer rendering - - function renderObjectImmediate( object, program ) { - - object.render( function ( object ) { - - _this.renderBufferImmediate( object, program ); - - } ); - - } - - this.renderBufferImmediate = function ( object, program ) { - - bindingStates.initAttributes(); - - const buffers = properties.get( object ); - - if ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer(); - if ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer(); - if ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer(); - if ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer(); - - const programAttributes = program.getAttributes(); - - if ( object.hasPositions ) { - - _gl.bindBuffer( 34962, buffers.position ); - _gl.bufferData( 34962, object.positionArray, 35048 ); - - bindingStates.enableAttribute( programAttributes.position ); - _gl.vertexAttribPointer( programAttributes.position, 3, 5126, false, 0, 0 ); - - } - - if ( object.hasNormals ) { - - _gl.bindBuffer( 34962, buffers.normal ); - _gl.bufferData( 34962, object.normalArray, 35048 ); - - bindingStates.enableAttribute( programAttributes.normal ); - _gl.vertexAttribPointer( programAttributes.normal, 3, 5126, false, 0, 0 ); - - } - - if ( object.hasUvs ) { - - _gl.bindBuffer( 34962, buffers.uv ); - _gl.bufferData( 34962, object.uvArray, 35048 ); - - bindingStates.enableAttribute( programAttributes.uv ); - _gl.vertexAttribPointer( programAttributes.uv, 2, 5126, false, 0, 0 ); - - } - - if ( object.hasColors ) { - - _gl.bindBuffer( 34962, buffers.color ); - _gl.bufferData( 34962, object.colorArray, 35048 ); - - bindingStates.enableAttribute( programAttributes.color ); - _gl.vertexAttribPointer( programAttributes.color, 3, 5126, false, 0, 0 ); - - } - - bindingStates.disableUnusedAttributes(); - - _gl.drawArrays( 4, 0, object.count ); - - object.count = 0; - - }; - - this.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) { - - if ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null) - - const frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 ); - - const program = setProgram( camera, scene, material, object ); - - state.setMaterial( material, frontFaceCW ); - - // - - let index = geometry.index; - const position = geometry.attributes.position; - - // - - if ( index === null ) { - - if ( position === undefined || position.count === 0 ) return; - - } else if ( index.count === 0 ) { - - return; - - } - - // - - let rangeFactor = 1; - - if ( material.wireframe === true ) { - - index = geometries.getWireframeAttribute( geometry ); - rangeFactor = 2; - - } - - if ( material.morphTargets || material.morphNormals ) { - - morphtargets.update( object, geometry, material, program ); - - } - - bindingStates.setup( object, material, program, geometry, index ); - - let attribute; - let renderer = bufferRenderer; - - if ( index !== null ) { - - attribute = attributes.get( index ); - - renderer = indexedBufferRenderer; - renderer.setIndex( attribute ); - - } - - // - - const dataCount = ( index !== null ) ? index.count : position.count; - - const rangeStart = geometry.drawRange.start * rangeFactor; - const rangeCount = geometry.drawRange.count * rangeFactor; - - const groupStart = group !== null ? group.start * rangeFactor : 0; - const groupCount = group !== null ? group.count * rangeFactor : Infinity; - - const drawStart = Math.max( rangeStart, groupStart ); - const drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1; - - const drawCount = Math.max( 0, drawEnd - drawStart + 1 ); - - if ( drawCount === 0 ) return; - - // - - if ( object.isMesh ) { - - if ( material.wireframe === true ) { - - state.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() ); - renderer.setMode( 1 ); - - } else { - - renderer.setMode( 4 ); - - } - - } else if ( object.isLine ) { - - let lineWidth = material.linewidth; - - if ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material - - state.setLineWidth( lineWidth * getTargetPixelRatio() ); - - if ( object.isLineSegments ) { - - renderer.setMode( 1 ); - - } else if ( object.isLineLoop ) { - - renderer.setMode( 2 ); - - } else { - - renderer.setMode( 3 ); - - } - - } else if ( object.isPoints ) { - - renderer.setMode( 0 ); - - } else if ( object.isSprite ) { - - renderer.setMode( 4 ); - - } - - if ( object.isInstancedMesh ) { - - renderer.renderInstances( drawStart, drawCount, object.count ); - - } else if ( geometry.isInstancedBufferGeometry ) { - - const instanceCount = Math.min( geometry.instanceCount, geometry._maxInstanceCount ); - - renderer.renderInstances( drawStart, drawCount, instanceCount ); - - } else { - - renderer.render( drawStart, drawCount ); - - } - - }; - - // Compile - - this.compile = function ( scene, camera ) { - - currentRenderState = renderStates.get( scene, camera ); - currentRenderState.init(); - - scene.traverseVisible( function ( object ) { - - if ( object.isLight && object.layers.test( camera.layers ) ) { - - currentRenderState.pushLight( object ); - - if ( object.castShadow ) { - - currentRenderState.pushShadow( object ); - - } - - } - - } ); - - currentRenderState.setupLights( camera ); - - const compiled = new WeakMap(); - - scene.traverse( function ( object ) { - - const material = object.material; - - if ( material ) { - - if ( Array.isArray( material ) ) { - - for ( let i = 0; i < material.length; i ++ ) { - - const material2 = material[ i ]; - - if ( compiled.has( material2 ) === false ) { - - initMaterial( material2, scene, object ); - compiled.set( material2 ); - - } - - } - - } else if ( compiled.has( material ) === false ) { - - initMaterial( material, scene, object ); - compiled.set( material ); - - } - - } - - } ); - - }; - - // Animation Loop - - let onAnimationFrameCallback = null; - - function onAnimationFrame( time ) { - - if ( xr.isPresenting ) return; - if ( onAnimationFrameCallback ) onAnimationFrameCallback( time ); - - } - - const animation = new WebGLAnimation(); - animation.setAnimationLoop( onAnimationFrame ); - - if ( typeof window !== 'undefined' ) animation.setContext( window ); - - this.setAnimationLoop = function ( callback ) { - - onAnimationFrameCallback = callback; - xr.setAnimationLoop( callback ); - - ( callback === null ) ? animation.stop() : animation.start(); - - }; - - // Rendering - - this.render = function ( scene, camera ) { - - let renderTarget, forceClear; - - if ( arguments[ 2 ] !== undefined ) { - - console.warn( 'THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.' ); - renderTarget = arguments[ 2 ]; - - } - - if ( arguments[ 3 ] !== undefined ) { - - console.warn( 'THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead.' ); - forceClear = arguments[ 3 ]; - - } - - if ( camera !== undefined && camera.isCamera !== true ) { - - console.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' ); - return; - - } - - if ( _isContextLost === true ) return; - - // reset caching for this frame - - bindingStates.resetDefaultState(); - _currentMaterialId = - 1; - _currentCamera = null; - - // update scene graph - - if ( scene.autoUpdate === true ) scene.updateMatrixWorld(); - - // update camera matrices and frustum - - if ( camera.parent === null ) camera.updateMatrixWorld(); - - if ( xr.enabled === true && xr.isPresenting === true ) { - - camera = xr.getCamera( camera ); - - } - - // - if ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, renderTarget || _currentRenderTarget ); - - currentRenderState = renderStates.get( scene, camera ); - currentRenderState.init(); - - _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); - _frustum.setFromProjectionMatrix( _projScreenMatrix ); - - _localClippingEnabled = this.localClippingEnabled; - _clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled, camera ); - - currentRenderList = renderLists.get( scene, camera ); - currentRenderList.init(); - - projectObject( scene, camera, 0, _this.sortObjects ); - - currentRenderList.finish(); - - if ( _this.sortObjects === true ) { - - currentRenderList.sort( _opaqueSort, _transparentSort ); - - } - - // - - if ( _clippingEnabled === true ) clipping.beginShadows(); - - const shadowsArray = currentRenderState.state.shadowsArray; - - shadowMap.render( shadowsArray, scene, camera ); - - currentRenderState.setupLights( camera ); - - if ( _clippingEnabled === true ) clipping.endShadows(); - - // - - if ( this.info.autoReset === true ) this.info.reset(); - - if ( renderTarget !== undefined ) { - - this.setRenderTarget( renderTarget ); - - } - - // - - background.render( currentRenderList, scene, camera, forceClear ); - - // render scene - - const opaqueObjects = currentRenderList.opaque; - const transparentObjects = currentRenderList.transparent; - - if ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera ); - if ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera ); - - // - - if ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera ); - - // - - if ( _currentRenderTarget !== null ) { - - // Generate mipmap if we're using any kind of mipmap filtering - - textures.updateRenderTargetMipmap( _currentRenderTarget ); - - // resolve multisample renderbuffers to a single-sample texture if necessary - - textures.updateMultisampleRenderTarget( _currentRenderTarget ); - - } - - // Ensure depth buffer writing is enabled so it can be cleared on next render - - state.buffers.depth.setTest( true ); - state.buffers.depth.setMask( true ); - state.buffers.color.setMask( true ); - - state.setPolygonOffset( false ); - - // _gl.finish(); - - currentRenderList = null; - currentRenderState = null; - - }; - - function projectObject( object, camera, groupOrder, sortObjects ) { - - if ( object.visible === false ) return; - - const visible = object.layers.test( camera.layers ); - - if ( visible ) { - - if ( object.isGroup ) { - - groupOrder = object.renderOrder; - - } else if ( object.isLOD ) { - - if ( object.autoUpdate === true ) object.update( camera ); - - } else if ( object.isLight ) { - - currentRenderState.pushLight( object ); - - if ( object.castShadow ) { - - currentRenderState.pushShadow( object ); - - } - - } else if ( object.isSprite ) { - - if ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) { - - if ( sortObjects ) { - - _vector3.setFromMatrixPosition( object.matrixWorld ) - .applyMatrix4( _projScreenMatrix ); - - } - - const geometry = objects.update( object ); - const material = object.material; - - if ( material.visible ) { - - currentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null ); - - } - - } - - } else if ( object.isImmediateRenderObject ) { - - if ( sortObjects ) { - - _vector3.setFromMatrixPosition( object.matrixWorld ) - .applyMatrix4( _projScreenMatrix ); - - } - - currentRenderList.push( object, null, object.material, groupOrder, _vector3.z, null ); - - } else if ( object.isMesh || object.isLine || object.isPoints ) { - - if ( object.isSkinnedMesh ) { - - // update skeleton only once in a frame - - if ( object.skeleton.frame !== info.render.frame ) { - - object.skeleton.update(); - object.skeleton.frame = info.render.frame; - - } - - } - - if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) { - - if ( sortObjects ) { - - _vector3.setFromMatrixPosition( object.matrixWorld ) - .applyMatrix4( _projScreenMatrix ); - - } - - const geometry = objects.update( object ); - const material = object.material; - - if ( Array.isArray( material ) ) { - - const groups = geometry.groups; - - for ( let i = 0, l = groups.length; i < l; i ++ ) { - - const group = groups[ i ]; - const groupMaterial = material[ group.materialIndex ]; - - if ( groupMaterial && groupMaterial.visible ) { - - currentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group ); - - } - - } - - } else if ( material.visible ) { - - currentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null ); - - } - - } - - } - - } - - const children = object.children; - - for ( let i = 0, l = children.length; i < l; i ++ ) { - - projectObject( children[ i ], camera, groupOrder, sortObjects ); - - } - - } - - function renderObjects( renderList, scene, camera ) { - - const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null; - - for ( let i = 0, l = renderList.length; i < l; i ++ ) { - - const renderItem = renderList[ i ]; - - const object = renderItem.object; - const geometry = renderItem.geometry; - const material = overrideMaterial === null ? renderItem.material : overrideMaterial; - const group = renderItem.group; - - if ( camera.isArrayCamera ) { - - _currentArrayCamera = camera; - - const cameras = camera.cameras; - - for ( let j = 0, jl = cameras.length; j < jl; j ++ ) { - - const camera2 = cameras[ j ]; - - if ( object.layers.test( camera2.layers ) ) { - - state.viewport( _currentViewport.copy( camera2.viewport ) ); - - currentRenderState.setupLights( camera2 ); - - renderObject( object, scene, camera2, geometry, material, group ); - - } - - } - - } else { - - _currentArrayCamera = null; - - renderObject( object, scene, camera, geometry, material, group ); - - } - - } - - } - - function renderObject( object, scene, camera, geometry, material, group ) { - - object.onBeforeRender( _this, scene, camera, geometry, material, group ); - currentRenderState = renderStates.get( scene, _currentArrayCamera || camera ); - - object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld ); - object.normalMatrix.getNormalMatrix( object.modelViewMatrix ); - - if ( object.isImmediateRenderObject ) { - - const program = setProgram( camera, scene, material, object ); - - state.setMaterial( material ); - - bindingStates.reset(); - - renderObjectImmediate( object, program ); - - } else { - - _this.renderBufferDirect( camera, scene, geometry, material, object, group ); - - } - - object.onAfterRender( _this, scene, camera, geometry, material, group ); - currentRenderState = renderStates.get( scene, _currentArrayCamera || camera ); - - } - - function initMaterial( material, scene, object ) { - - if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ... - - const materialProperties = properties.get( material ); - - const lights = currentRenderState.state.lights; - const shadowsArray = currentRenderState.state.shadowsArray; - - const lightsStateVersion = lights.state.version; - - const parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object ); - const programCacheKey = programCache.getProgramCacheKey( parameters ); - - let program = materialProperties.program; - let programChange = true; - - if ( program === undefined ) { - - // new material - material.addEventListener( 'dispose', onMaterialDispose ); - - } else if ( program.cacheKey !== programCacheKey ) { - - // changed glsl or parameters - releaseMaterialProgramReference( material ); - - } else if ( materialProperties.lightsStateVersion !== lightsStateVersion ) { - - programChange = false; - - } else if ( parameters.shaderID !== undefined ) { - - // same glsl and uniform list, envMap still needs the update here to avoid a frame-late effect - - const environment = material.isMeshStandardMaterial ? scene.environment : null; - materialProperties.envMap = cubemaps.get( material.envMap || environment ); - - return; - - } else { - - // only rebuild uniform list - programChange = false; - - } - - if ( programChange ) { - - parameters.uniforms = programCache.getUniforms( material ); - - material.onBeforeCompile( parameters, _this ); - - program = programCache.acquireProgram( parameters, programCacheKey ); - - materialProperties.program = program; - materialProperties.uniforms = parameters.uniforms; - materialProperties.outputEncoding = parameters.outputEncoding; - - } - - const uniforms = materialProperties.uniforms; - - if ( ! material.isShaderMaterial && - ! material.isRawShaderMaterial || - material.clipping === true ) { - - materialProperties.numClippingPlanes = clipping.numPlanes; - materialProperties.numIntersection = clipping.numIntersection; - uniforms.clippingPlanes = clipping.uniform; - - } - - materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null; - materialProperties.fog = scene.fog; - materialProperties.envMap = cubemaps.get( material.envMap || materialProperties.environment ); - - // store the light setup it was created for - - materialProperties.needsLights = materialNeedsLights( material ); - materialProperties.lightsStateVersion = lightsStateVersion; - - if ( materialProperties.needsLights ) { - - // wire up the material to this renderer's lighting state - - uniforms.ambientLightColor.value = lights.state.ambient; - uniforms.lightProbe.value = lights.state.probe; - uniforms.directionalLights.value = lights.state.directional; - uniforms.directionalLightShadows.value = lights.state.directionalShadow; - uniforms.spotLights.value = lights.state.spot; - uniforms.spotLightShadows.value = lights.state.spotShadow; - uniforms.rectAreaLights.value = lights.state.rectArea; - uniforms.ltc_1.value = lights.state.rectAreaLTC1; - uniforms.ltc_2.value = lights.state.rectAreaLTC2; - uniforms.pointLights.value = lights.state.point; - uniforms.pointLightShadows.value = lights.state.pointShadow; - uniforms.hemisphereLights.value = lights.state.hemi; - - uniforms.directionalShadowMap.value = lights.state.directionalShadowMap; - uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix; - uniforms.spotShadowMap.value = lights.state.spotShadowMap; - uniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix; - uniforms.pointShadowMap.value = lights.state.pointShadowMap; - uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix; - // TODO (abelnation): add area lights shadow info to uniforms - - } - - const progUniforms = materialProperties.program.getUniforms(); - const uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms ); - - materialProperties.uniformsList = uniformsList; - - } - - function setProgram( camera, scene, material, object ) { - - if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ... - - textures.resetTextureUnits(); - - const fog = scene.fog; - const environment = material.isMeshStandardMaterial ? scene.environment : null; - const encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : _currentRenderTarget.texture.encoding; - const envMap = cubemaps.get( material.envMap || environment ); - - const materialProperties = properties.get( material ); - const lights = currentRenderState.state.lights; - - if ( _clippingEnabled === true ) { - - if ( _localClippingEnabled === true || camera !== _currentCamera ) { - - const useCache = - camera === _currentCamera && - material.id === _currentMaterialId; - - // we might want to call this function with some ClippingGroup - // object instead of the material, once it becomes feasible - // (#8465, #8379) - clipping.setState( material, camera, useCache ); - - } - - } - - if ( material.version === materialProperties.__version ) { - - if ( material.fog && materialProperties.fog !== fog ) { - - initMaterial( material, scene, object ); - - } else if ( materialProperties.environment !== environment ) { - - initMaterial( material, scene, object ); - - } else if ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) { - - initMaterial( material, scene, object ); - - } else if ( materialProperties.numClippingPlanes !== undefined && - ( materialProperties.numClippingPlanes !== clipping.numPlanes || - materialProperties.numIntersection !== clipping.numIntersection ) ) { - - initMaterial( material, scene, object ); - - } else if ( materialProperties.outputEncoding !== encoding ) { - - initMaterial( material, scene, object ); - - } else if ( materialProperties.envMap !== envMap ) { - - initMaterial( material, scene, object ); - - } - - } else { - - initMaterial( material, scene, object ); - materialProperties.__version = material.version; - - } - - let refreshProgram = false; - let refreshMaterial = false; - let refreshLights = false; - - const program = materialProperties.program, - p_uniforms = program.getUniforms(), - m_uniforms = materialProperties.uniforms; - - if ( state.useProgram( program.program ) ) { - - refreshProgram = true; - refreshMaterial = true; - refreshLights = true; - - } - - if ( material.id !== _currentMaterialId ) { - - _currentMaterialId = material.id; - - refreshMaterial = true; - - } - - if ( refreshProgram || _currentCamera !== camera ) { - - p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix ); - - if ( capabilities.logarithmicDepthBuffer ) { - - p_uniforms.setValue( _gl, 'logDepthBufFC', - 2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) ); - - } - - if ( _currentCamera !== camera ) { - - _currentCamera = camera; - - // lighting uniforms depend on the camera so enforce an update - // now, in case this material supports lights - or later, when - // the next material that does gets activated: - - refreshMaterial = true; // set to true on material change - refreshLights = true; // remains set until update done - - } - - // load material specific uniforms - // (shader material also gets them for the sake of genericity) - - if ( material.isShaderMaterial || - material.isMeshPhongMaterial || - material.isMeshToonMaterial || - material.isMeshStandardMaterial || - material.envMap ) { - - const uCamPos = p_uniforms.map.cameraPosition; - - if ( uCamPos !== undefined ) { - - uCamPos.setValue( _gl, - _vector3.setFromMatrixPosition( camera.matrixWorld ) ); - - } - - } - - if ( material.isMeshPhongMaterial || - material.isMeshToonMaterial || - material.isMeshLambertMaterial || - material.isMeshBasicMaterial || - material.isMeshStandardMaterial || - material.isShaderMaterial ) { - - p_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true ); - - } - - if ( material.isMeshPhongMaterial || - material.isMeshToonMaterial || - material.isMeshLambertMaterial || - material.isMeshBasicMaterial || - material.isMeshStandardMaterial || - material.isShaderMaterial || - material.isShadowMaterial || - material.skinning ) { - - p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse ); - - } - - } - - // skinning uniforms must be set even if material didn't change - // auto-setting of texture unit for bone texture must go before other textures - // otherwise textures used for skinning can take over texture units reserved for other material textures - - if ( material.skinning ) { - - p_uniforms.setOptional( _gl, object, 'bindMatrix' ); - p_uniforms.setOptional( _gl, object, 'bindMatrixInverse' ); - - const skeleton = object.skeleton; - - if ( skeleton ) { - - const bones = skeleton.bones; - - if ( capabilities.floatVertexTextures ) { - - if ( skeleton.boneTexture === null ) { - - // layout (1 matrix = 4 pixels) - // RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4) - // with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8) - // 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16) - // 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32) - // 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64) - - - let size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix - size = MathUtils.ceilPowerOfTwo( size ); - size = Math.max( size, 4 ); - - const boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel - boneMatrices.set( skeleton.boneMatrices ); // copy current values - - const boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType ); - - skeleton.boneMatrices = boneMatrices; - skeleton.boneTexture = boneTexture; - skeleton.boneTextureSize = size; - - } - - p_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures ); - p_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize ); - - } else { - - p_uniforms.setOptional( _gl, skeleton, 'boneMatrices' ); - - } - - } - - } - - if ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) { - - materialProperties.receiveShadow = object.receiveShadow; - p_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow ); - - } - - if ( refreshMaterial ) { - - p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure ); - - if ( materialProperties.needsLights ) { - - // the current material requires lighting info - - // note: all lighting uniforms are always set correctly - // they simply reference the renderer's state for their - // values - // - // use the current material's .needsUpdate flags to set - // the GL state when required - - markUniformsLightsNeedsUpdate( m_uniforms, refreshLights ); - - } - - // refresh uniforms common to several materials - - if ( fog && material.fog ) { - - materials.refreshFogUniforms( m_uniforms, fog ); - - } - - materials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height ); - - WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures ); - - } - - if ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) { - - WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures ); - material.uniformsNeedUpdate = false; - - } - - if ( material.isSpriteMaterial ) { - - p_uniforms.setValue( _gl, 'center', object.center ); - - } - - // common matrices - - p_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix ); - p_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix ); - p_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld ); - - return program; - - } - - // If uniforms are marked as clean, they don't need to be loaded to the GPU. - - function markUniformsLightsNeedsUpdate( uniforms, value ) { - - uniforms.ambientLightColor.needsUpdate = value; - uniforms.lightProbe.needsUpdate = value; - - uniforms.directionalLights.needsUpdate = value; - uniforms.directionalLightShadows.needsUpdate = value; - uniforms.pointLights.needsUpdate = value; - uniforms.pointLightShadows.needsUpdate = value; - uniforms.spotLights.needsUpdate = value; - uniforms.spotLightShadows.needsUpdate = value; - uniforms.rectAreaLights.needsUpdate = value; - uniforms.hemisphereLights.needsUpdate = value; - - } - - function materialNeedsLights( material ) { - - return material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial || - material.isMeshStandardMaterial || material.isShadowMaterial || - ( material.isShaderMaterial && material.lights === true ); - - } - - // - this.setFramebuffer = function ( value ) { - - if ( _framebuffer !== value && _currentRenderTarget === null ) _gl.bindFramebuffer( 36160, value ); - - _framebuffer = value; - - }; - - this.getActiveCubeFace = function () { - - return _currentActiveCubeFace; - - }; - - this.getActiveMipmapLevel = function () { - - return _currentActiveMipmapLevel; - - }; - - this.getRenderList = function () { - - return currentRenderList; - - }; - - this.setRenderList = function ( renderList ) { - - currentRenderList = renderList; - - }; - - this.getRenderState = function () { - - return currentRenderState; - - }; - - this.setRenderState = function ( renderState ) { - - currentRenderState = renderState; - - }; - - this.getRenderTarget = function () { - - return _currentRenderTarget; - - }; - - this.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) { - - _currentRenderTarget = renderTarget; - _currentActiveCubeFace = activeCubeFace; - _currentActiveMipmapLevel = activeMipmapLevel; - - if ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) { - - textures.setupRenderTarget( renderTarget ); - - } - - let framebuffer = _framebuffer; - let isCube = false; - - if ( renderTarget ) { - - const __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer; - - if ( renderTarget.isWebGLCubeRenderTarget ) { - - framebuffer = __webglFramebuffer[ activeCubeFace ]; - isCube = true; - - } else if ( renderTarget.isWebGLMultisampleRenderTarget ) { - - framebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer; - - } else { - - framebuffer = __webglFramebuffer; - - } - - _currentViewport.copy( renderTarget.viewport ); - _currentScissor.copy( renderTarget.scissor ); - _currentScissorTest = renderTarget.scissorTest; - - } else { - - _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor(); - _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor(); - _currentScissorTest = _scissorTest; - - } - - if ( _currentFramebuffer !== framebuffer ) { - - _gl.bindFramebuffer( 36160, framebuffer ); - _currentFramebuffer = framebuffer; - - } - - state.viewport( _currentViewport ); - state.scissor( _currentScissor ); - state.setScissorTest( _currentScissorTest ); - - if ( isCube ) { - - const textureProperties = properties.get( renderTarget.texture ); - _gl.framebufferTexture2D( 36160, 36064, 34069 + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel ); - - } - - }; - - this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) { - - if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) { - - console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' ); - return; - - } - - let framebuffer = properties.get( renderTarget ).__webglFramebuffer; - - if ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) { - - framebuffer = framebuffer[ activeCubeFaceIndex ]; - - } - - if ( framebuffer ) { - - let restore = false; - - if ( framebuffer !== _currentFramebuffer ) { - - _gl.bindFramebuffer( 36160, framebuffer ); - - restore = true; - - } - - try { - - const texture = renderTarget.texture; - const textureFormat = texture.format; - const textureType = texture.type; - - if ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( 35739 ) ) { - - console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' ); - return; - - } - - if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( 35738 ) && // IE11, Edge and Chrome Mac < 52 (#9513) - ! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox - ! ( textureType === HalfFloatType && ( capabilities.isWebGL2 ? extensions.get( 'EXT_color_buffer_float' ) : extensions.get( 'EXT_color_buffer_half_float' ) ) ) ) { - - console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' ); - return; - - } - - if ( _gl.checkFramebufferStatus( 36160 ) === 36053 ) { - - // the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604) - - if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) { - - _gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer ); - - } - - } else { - - console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' ); - - } - - } finally { - - if ( restore ) { - - _gl.bindFramebuffer( 36160, _currentFramebuffer ); - - } - - } - - } - - }; - - this.copyFramebufferToTexture = function ( position, texture, level = 0 ) { - - const levelScale = Math.pow( 2, - level ); - const width = Math.floor( texture.image.width * levelScale ); - const height = Math.floor( texture.image.height * levelScale ); - const glFormat = utils.convert( texture.format ); - - textures.setTexture2D( texture, 0 ); - - _gl.copyTexImage2D( 3553, level, glFormat, position.x, position.y, width, height, 0 ); - - state.unbindTexture(); - - }; - - this.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) { - - const width = srcTexture.image.width; - const height = srcTexture.image.height; - const glFormat = utils.convert( dstTexture.format ); - const glType = utils.convert( dstTexture.type ); - - textures.setTexture2D( dstTexture, 0 ); - - // As another texture upload may have changed pixelStorei - // parameters, make sure they are correct for the dstTexture - _gl.pixelStorei( 37440, dstTexture.flipY ); - _gl.pixelStorei( 37441, dstTexture.premultiplyAlpha ); - _gl.pixelStorei( 3317, dstTexture.unpackAlignment ); - - if ( srcTexture.isDataTexture ) { - - _gl.texSubImage2D( 3553, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data ); - - } else { - - if ( srcTexture.isCompressedTexture ) { - - _gl.compressedTexSubImage2D( 3553, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data ); - - } else { - - _gl.texSubImage2D( 3553, level, position.x, position.y, glFormat, glType, srcTexture.image ); - - } - - } - - // Generate mipmaps only when copying level 0 - if ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( 3553 ); - - state.unbindTexture(); - - }; - - this.initTexture = function ( texture ) { - - textures.setTexture2D( texture, 0 ); - - state.unbindTexture(); - - }; - - if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { - - __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef - - } - - } - - function WebGL1Renderer( parameters ) { - - WebGLRenderer.call( this, parameters ); - - } - - WebGL1Renderer.prototype = Object.assign( Object.create( WebGLRenderer.prototype ), { - - constructor: WebGL1Renderer, - - isWebGL1Renderer: true - - } ); - - class Scene extends Object3D { - - constructor() { - - super(); - - Object.defineProperty( this, 'isScene', { value: true } ); - - this.type = 'Scene'; - - this.background = null; - this.environment = null; - this.fog = null; - - this.overrideMaterial = null; - - this.autoUpdate = true; // checked by the renderer - - if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { - - __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef - - } - - } - - copy( source, recursive ) { - - super.copy( source, recursive ); - - if ( source.background !== null ) this.background = source.background.clone(); - if ( source.environment !== null ) this.environment = source.environment.clone(); - if ( source.fog !== null ) this.fog = source.fog.clone(); - - if ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone(); - - this.autoUpdate = source.autoUpdate; - this.matrixAutoUpdate = source.matrixAutoUpdate; - - return this; - - } - - toJSON( meta ) { - - const data = super.toJSON( meta ); - - if ( this.background !== null ) data.object.background = this.background.toJSON( meta ); - if ( this.environment !== null ) data.object.environment = this.environment.toJSON( meta ); - if ( this.fog !== null ) data.object.fog = this.fog.toJSON(); - - return data; - - } - - } - - function InterleavedBuffer( array, stride ) { - - this.array = array; - this.stride = stride; - this.count = array !== undefined ? array.length / stride : 0; - - this.usage = StaticDrawUsage; - this.updateRange = { offset: 0, count: - 1 }; - - this.version = 0; - - this.uuid = MathUtils.generateUUID(); - - } - - Object.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', { - - set: function ( value ) { - - if ( value === true ) this.version ++; - - } - - } ); - - Object.assign( InterleavedBuffer.prototype, { - - isInterleavedBuffer: true, - - onUploadCallback: function () {}, - - setUsage: function ( value ) { - - this.usage = value; - - return this; - - }, - - copy: function ( source ) { - - this.array = new source.array.constructor( source.array ); - this.count = source.count; - this.stride = source.stride; - this.usage = source.usage; - - return this; - - }, - - copyAt: function ( index1, attribute, index2 ) { - - index1 *= this.stride; - index2 *= attribute.stride; - - for ( let i = 0, l = this.stride; i < l; i ++ ) { - - this.array[ index1 + i ] = attribute.array[ index2 + i ]; - - } - - return this; - - }, - - set: function ( value, offset = 0 ) { - - this.array.set( value, offset ); - - return this; - - }, - - clone: function ( data ) { - - if ( data.arrayBuffers === undefined ) { - - data.arrayBuffers = {}; - - } - - if ( this.array.buffer._uuid === undefined ) { - - this.array.buffer._uuid = MathUtils.generateUUID(); - - } - - if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) { - - data.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer; - - } - - const array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] ); - - const ib = new InterleavedBuffer( array, this.stride ); - ib.setUsage( this.usage ); - - return ib; - - }, - - onUpload: function ( callback ) { - - this.onUploadCallback = callback; - - return this; - - }, - - toJSON: function ( data ) { - - if ( data.arrayBuffers === undefined ) { - - data.arrayBuffers = {}; - - } - - // generate UUID for array buffer if necessary - - if ( this.array.buffer._uuid === undefined ) { - - this.array.buffer._uuid = MathUtils.generateUUID(); - - } - - if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) { - - data.arrayBuffers[ this.array.buffer._uuid ] = Array.prototype.slice.call( new Uint32Array( this.array.buffer ) ); - - } - - // - - return { - uuid: this.uuid, - buffer: this.array.buffer._uuid, - type: this.array.constructor.name, - stride: this.stride - }; - - } - - } ); - - const _vector$6 = new Vector3(); - - function InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) { - - this.name = ''; - - this.data = interleavedBuffer; - this.itemSize = itemSize; - this.offset = offset; - - this.normalized = normalized === true; - - } - - Object.defineProperties( InterleavedBufferAttribute.prototype, { - - count: { - - get: function () { - - return this.data.count; - - } - - }, - - array: { - - get: function () { - - return this.data.array; - - } - - }, - - needsUpdate: { - - set: function ( value ) { - - this.data.needsUpdate = value; - - } - - } - - } ); - - Object.assign( InterleavedBufferAttribute.prototype, { - - isInterleavedBufferAttribute: true, - - applyMatrix4: function ( m ) { - - for ( let i = 0, l = this.data.count; i < l; i ++ ) { - - _vector$6.x = this.getX( i ); - _vector$6.y = this.getY( i ); - _vector$6.z = this.getZ( i ); - - _vector$6.applyMatrix4( m ); - - this.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z ); - - } - - return this; - - }, - - setX: function ( index, x ) { - - this.data.array[ index * this.data.stride + this.offset ] = x; - - return this; - - }, - - setY: function ( index, y ) { - - this.data.array[ index * this.data.stride + this.offset + 1 ] = y; - - return this; - - }, - - setZ: function ( index, z ) { - - this.data.array[ index * this.data.stride + this.offset + 2 ] = z; - - return this; - - }, - - setW: function ( index, w ) { - - this.data.array[ index * this.data.stride + this.offset + 3 ] = w; - - return this; - - }, - - getX: function ( index ) { - - return this.data.array[ index * this.data.stride + this.offset ]; - - }, - - getY: function ( index ) { - - return this.data.array[ index * this.data.stride + this.offset + 1 ]; - - }, - - getZ: function ( index ) { - - return this.data.array[ index * this.data.stride + this.offset + 2 ]; - - }, - - getW: function ( index ) { - - return this.data.array[ index * this.data.stride + this.offset + 3 ]; - - }, - - setXY: function ( index, x, y ) { - - index = index * this.data.stride + this.offset; - - this.data.array[ index + 0 ] = x; - this.data.array[ index + 1 ] = y; - - return this; - - }, - - setXYZ: function ( index, x, y, z ) { - - index = index * this.data.stride + this.offset; - - this.data.array[ index + 0 ] = x; - this.data.array[ index + 1 ] = y; - this.data.array[ index + 2 ] = z; - - return this; - - }, - - setXYZW: function ( index, x, y, z, w ) { - - index = index * this.data.stride + this.offset; - - this.data.array[ index + 0 ] = x; - this.data.array[ index + 1 ] = y; - this.data.array[ index + 2 ] = z; - this.data.array[ index + 3 ] = w; - - return this; - - }, - - clone: function ( data ) { - - if ( data === undefined ) { - - console.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.' ); - - const array = []; - - for ( let i = 0; i < this.count; i ++ ) { - - const index = i * this.data.stride + this.offset; - - for ( let j = 0; j < this.itemSize; j ++ ) { - - array.push( this.data.array[ index + j ] ); - - } - - } - - return new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized ); - - } else { - - if ( data.interleavedBuffers === undefined ) { - - data.interleavedBuffers = {}; - - } - - if ( data.interleavedBuffers[ this.data.uuid ] === undefined ) { - - data.interleavedBuffers[ this.data.uuid ] = this.data.clone( data ); - - } - - return new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized ); - - } - - }, - - toJSON: function ( data ) { - - if ( data === undefined ) { - - console.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.' ); - - const array = []; - - for ( let i = 0; i < this.count; i ++ ) { - - const index = i * this.data.stride + this.offset; - - for ( let j = 0; j < this.itemSize; j ++ ) { - - array.push( this.data.array[ index + j ] ); - - } - - } - - // deinterleave data and save it as an ordinary buffer attribute for now - - return { - itemSize: this.itemSize, - type: this.array.constructor.name, - array: array, - normalized: this.normalized - }; - - } else { - - // save as true interlaved attribtue - - if ( data.interleavedBuffers === undefined ) { - - data.interleavedBuffers = {}; - - } - - if ( data.interleavedBuffers[ this.data.uuid ] === undefined ) { - - data.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data ); - - } - - return { - isInterleavedBufferAttribute: true, - itemSize: this.itemSize, - data: this.data.uuid, - offset: this.offset, - normalized: this.normalized - }; - - } - - } - - } ); - - /** - * parameters = { - * color: , - * map: new THREE.Texture( ), - * alphaMap: new THREE.Texture( ), - * rotation: , - * sizeAttenuation: - * } - */ - - function SpriteMaterial( parameters ) { - - Material.call( this ); - - this.type = 'SpriteMaterial'; - - this.color = new Color( 0xffffff ); - - this.map = null; - - this.alphaMap = null; - - this.rotation = 0; - - this.sizeAttenuation = true; - - this.transparent = true; - - this.setValues( parameters ); - - } - - SpriteMaterial.prototype = Object.create( Material.prototype ); - SpriteMaterial.prototype.constructor = SpriteMaterial; - SpriteMaterial.prototype.isSpriteMaterial = true; - - SpriteMaterial.prototype.copy = function ( source ) { - - Material.prototype.copy.call( this, source ); - - this.color.copy( source.color ); - - this.map = source.map; - - this.alphaMap = source.alphaMap; - - this.rotation = source.rotation; - - this.sizeAttenuation = source.sizeAttenuation; - - return this; - - }; - - let _geometry; - - const _intersectPoint = new Vector3(); - const _worldScale = new Vector3(); - const _mvPosition = new Vector3(); - - const _alignedPosition = new Vector2(); - const _rotatedPosition = new Vector2(); - const _viewWorldMatrix = new Matrix4(); - - const _vA$1 = new Vector3(); - const _vB$1 = new Vector3(); - const _vC$1 = new Vector3(); - - const _uvA$1 = new Vector2(); - const _uvB$1 = new Vector2(); - const _uvC$1 = new Vector2(); - - function Sprite( material ) { - - Object3D.call( this ); - - this.type = 'Sprite'; - - if ( _geometry === undefined ) { - - _geometry = new BufferGeometry(); - - const float32Array = new Float32Array( [ - - 0.5, - 0.5, 0, 0, 0, - 0.5, - 0.5, 0, 1, 0, - 0.5, 0.5, 0, 1, 1, - - 0.5, 0.5, 0, 0, 1 - ] ); - - const interleavedBuffer = new InterleavedBuffer( float32Array, 5 ); - - _geometry.setIndex( [ 0, 1, 2, 0, 2, 3 ] ); - _geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) ); - _geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) ); - - } - - this.geometry = _geometry; - this.material = ( material !== undefined ) ? material : new SpriteMaterial(); - - this.center = new Vector2( 0.5, 0.5 ); - - } - - Sprite.prototype = Object.assign( Object.create( Object3D.prototype ), { - - constructor: Sprite, - - isSprite: true, - - raycast: function ( raycaster, intersects ) { - - if ( raycaster.camera === null ) { - - console.error( 'THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.' ); - - } - - _worldScale.setFromMatrixScale( this.matrixWorld ); - - _viewWorldMatrix.copy( raycaster.camera.matrixWorld ); - this.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld ); - - _mvPosition.setFromMatrixPosition( this.modelViewMatrix ); - - if ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) { - - _worldScale.multiplyScalar( - _mvPosition.z ); - - } - - const rotation = this.material.rotation; - let sin, cos; - - if ( rotation !== 0 ) { - - cos = Math.cos( rotation ); - sin = Math.sin( rotation ); - - } - - const center = this.center; - - transformVertex( _vA$1.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); - transformVertex( _vB$1.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); - transformVertex( _vC$1.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); - - _uvA$1.set( 0, 0 ); - _uvB$1.set( 1, 0 ); - _uvC$1.set( 1, 1 ); - - // check first triangle - let intersect = raycaster.ray.intersectTriangle( _vA$1, _vB$1, _vC$1, false, _intersectPoint ); - - if ( intersect === null ) { - - // check second triangle - transformVertex( _vB$1.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); - _uvB$1.set( 0, 1 ); - - intersect = raycaster.ray.intersectTriangle( _vA$1, _vC$1, _vB$1, false, _intersectPoint ); - if ( intersect === null ) { - - return; - - } - - } - - const distance = raycaster.ray.origin.distanceTo( _intersectPoint ); - - if ( distance < raycaster.near || distance > raycaster.far ) return; - - intersects.push( { - - distance: distance, - point: _intersectPoint.clone(), - uv: Triangle.getUV( _intersectPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() ), - face: null, - object: this - - } ); - - }, - - copy: function ( source ) { - - Object3D.prototype.copy.call( this, source ); - - if ( source.center !== undefined ) this.center.copy( source.center ); - - this.material = source.material; - - return this; - - } - - } ); - - function transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) { - - // compute position in camera space - _alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale ); - - // to check if rotation is not zero - if ( sin !== undefined ) { - - _rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y ); - _rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y ); - - } else { - - _rotatedPosition.copy( _alignedPosition ); - - } - - - vertexPosition.copy( mvPosition ); - vertexPosition.x += _rotatedPosition.x; - vertexPosition.y += _rotatedPosition.y; - - // transform to world space - vertexPosition.applyMatrix4( _viewWorldMatrix ); - - } - - const _v1$4 = new Vector3(); - const _v2$2 = new Vector3(); - - function LOD() { - - Object3D.call( this ); - - this._currentLevel = 0; - - this.type = 'LOD'; - - Object.defineProperties( this, { - levels: { - enumerable: true, - value: [] - } - } ); - - this.autoUpdate = true; - - } - - LOD.prototype = Object.assign( Object.create( Object3D.prototype ), { - - constructor: LOD, - - isLOD: true, - - copy: function ( source ) { - - Object3D.prototype.copy.call( this, source, false ); - - const levels = source.levels; - - for ( let i = 0, l = levels.length; i < l; i ++ ) { - - const level = levels[ i ]; - - this.addLevel( level.object.clone(), level.distance ); - - } - - this.autoUpdate = source.autoUpdate; - - return this; - - }, - - addLevel: function ( object, distance = 0 ) { - - distance = Math.abs( distance ); - - const levels = this.levels; - - let l; - - for ( l = 0; l < levels.length; l ++ ) { - - if ( distance < levels[ l ].distance ) { - - break; - - } - - } - - levels.splice( l, 0, { distance: distance, object: object } ); - - this.add( object ); - - return this; - - }, - - getCurrentLevel: function () { - - return this._currentLevel; - - }, - - getObjectForDistance: function ( distance ) { - - const levels = this.levels; - - if ( levels.length > 0 ) { - - let i, l; - - for ( i = 1, l = levels.length; i < l; i ++ ) { - - if ( distance < levels[ i ].distance ) { - - break; - - } - - } - - return levels[ i - 1 ].object; - - } - - return null; - - }, - - raycast: function ( raycaster, intersects ) { - - const levels = this.levels; - - if ( levels.length > 0 ) { - - _v1$4.setFromMatrixPosition( this.matrixWorld ); - - const distance = raycaster.ray.origin.distanceTo( _v1$4 ); - - this.getObjectForDistance( distance ).raycast( raycaster, intersects ); - - } - - }, - - update: function ( camera ) { - - const levels = this.levels; - - if ( levels.length > 1 ) { - - _v1$4.setFromMatrixPosition( camera.matrixWorld ); - _v2$2.setFromMatrixPosition( this.matrixWorld ); - - const distance = _v1$4.distanceTo( _v2$2 ) / camera.zoom; - - levels[ 0 ].object.visible = true; - - let i, l; - - for ( i = 1, l = levels.length; i < l; i ++ ) { - - if ( distance >= levels[ i ].distance ) { - - levels[ i - 1 ].object.visible = false; - levels[ i ].object.visible = true; - - } else { - - break; - - } - - } - - this._currentLevel = i - 1; - - for ( ; i < l; i ++ ) { - - levels[ i ].object.visible = false; - - } - - } - - }, - - toJSON: function ( meta ) { - - const data = Object3D.prototype.toJSON.call( this, meta ); - - if ( this.autoUpdate === false ) data.object.autoUpdate = false; - - data.object.levels = []; - - const levels = this.levels; - - for ( let i = 0, l = levels.length; i < l; i ++ ) { - - const level = levels[ i ]; - - data.object.levels.push( { - object: level.object.uuid, - distance: level.distance - } ); - - } - - return data; - - } - - } ); - - function SkinnedMesh( geometry, material ) { - - if ( geometry && geometry.isGeometry ) { - - console.error( 'THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' ); - - } - - Mesh.call( this, geometry, material ); - - this.type = 'SkinnedMesh'; - - this.bindMode = 'attached'; - this.bindMatrix = new Matrix4(); - this.bindMatrixInverse = new Matrix4(); - - } - - SkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), { - - constructor: SkinnedMesh, - - isSkinnedMesh: true, - - copy: function ( source ) { - - Mesh.prototype.copy.call( this, source ); - - this.bindMode = source.bindMode; - this.bindMatrix.copy( source.bindMatrix ); - this.bindMatrixInverse.copy( source.bindMatrixInverse ); - - this.skeleton = source.skeleton; - - return this; - - }, - - bind: function ( skeleton, bindMatrix ) { - - this.skeleton = skeleton; - - if ( bindMatrix === undefined ) { - - this.updateMatrixWorld( true ); - - this.skeleton.calculateInverses(); - - bindMatrix = this.matrixWorld; - - } - - this.bindMatrix.copy( bindMatrix ); - this.bindMatrixInverse.copy( bindMatrix ).invert(); - - }, - - pose: function () { - - this.skeleton.pose(); - - }, - - normalizeSkinWeights: function () { - - const vector = new Vector4(); - - const skinWeight = this.geometry.attributes.skinWeight; - - for ( let i = 0, l = skinWeight.count; i < l; i ++ ) { - - vector.x = skinWeight.getX( i ); - vector.y = skinWeight.getY( i ); - vector.z = skinWeight.getZ( i ); - vector.w = skinWeight.getW( i ); - - const scale = 1.0 / vector.manhattanLength(); - - if ( scale !== Infinity ) { - - vector.multiplyScalar( scale ); - - } else { - - vector.set( 1, 0, 0, 0 ); // do something reasonable - - } - - skinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w ); - - } - - }, - - updateMatrixWorld: function ( force ) { - - Mesh.prototype.updateMatrixWorld.call( this, force ); - - if ( this.bindMode === 'attached' ) { - - this.bindMatrixInverse.copy( this.matrixWorld ).invert(); - - } else if ( this.bindMode === 'detached' ) { - - this.bindMatrixInverse.copy( this.bindMatrix ).invert(); - - } else { - - console.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode ); - - } - - }, - - boneTransform: ( function () { - - const basePosition = new Vector3(); - - const skinIndex = new Vector4(); - const skinWeight = new Vector4(); - - const vector = new Vector3(); - const matrix = new Matrix4(); - - return function ( index, target ) { - - const skeleton = this.skeleton; - const geometry = this.geometry; - - skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index ); - skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index ); - - basePosition.fromBufferAttribute( geometry.attributes.position, index ).applyMatrix4( this.bindMatrix ); - - target.set( 0, 0, 0 ); - - for ( let i = 0; i < 4; i ++ ) { - - const weight = skinWeight.getComponent( i ); - - if ( weight !== 0 ) { - - const boneIndex = skinIndex.getComponent( i ); - - matrix.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] ); - - target.addScaledVector( vector.copy( basePosition ).applyMatrix4( matrix ), weight ); - - } - - } - - return target.applyMatrix4( this.bindMatrixInverse ); - - }; - - }() ) - - } ); - - function Bone() { - - Object3D.call( this ); - - this.type = 'Bone'; - - } - - Bone.prototype = Object.assign( Object.create( Object3D.prototype ), { - - constructor: Bone, - - isBone: true - - } ); - - const _offsetMatrix = new Matrix4(); - const _identityMatrix = new Matrix4(); - - function Skeleton( bones = [], boneInverses = [] ) { - - this.uuid = MathUtils.generateUUID(); - - this.bones = bones.slice( 0 ); - this.boneInverses = boneInverses; - this.boneMatrices = null; - - this.boneTexture = null; - this.boneTextureSize = 0; - - this.frame = - 1; - - this.init(); - - } - - Object.assign( Skeleton.prototype, { - - init: function () { - - const bones = this.bones; - const boneInverses = this.boneInverses; - - this.boneMatrices = new Float32Array( bones.length * 16 ); - - // calculate inverse bone matrices if necessary - - if ( boneInverses.length === 0 ) { - - this.calculateInverses(); - - } else { - - // handle special case - - if ( bones.length !== boneInverses.length ) { - - console.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' ); - - this.boneInverses = []; - - for ( let i = 0, il = this.bones.length; i < il; i ++ ) { - - this.boneInverses.push( new Matrix4() ); - - } - - } - - } - - }, - - calculateInverses: function () { - - this.boneInverses.length = 0; - - for ( let i = 0, il = this.bones.length; i < il; i ++ ) { - - const inverse = new Matrix4(); - - if ( this.bones[ i ] ) { - - inverse.copy( this.bones[ i ].matrixWorld ).invert(); - - } - - this.boneInverses.push( inverse ); - - } - - }, - - pose: function () { - - // recover the bind-time world matrices - - for ( let i = 0, il = this.bones.length; i < il; i ++ ) { - - const bone = this.bones[ i ]; - - if ( bone ) { - - bone.matrixWorld.copy( this.boneInverses[ i ] ).invert(); - - } - - } - - // compute the local matrices, positions, rotations and scales - - for ( let i = 0, il = this.bones.length; i < il; i ++ ) { - - const bone = this.bones[ i ]; - - if ( bone ) { - - if ( bone.parent && bone.parent.isBone ) { - - bone.matrix.copy( bone.parent.matrixWorld ).invert(); - bone.matrix.multiply( bone.matrixWorld ); - - } else { - - bone.matrix.copy( bone.matrixWorld ); - - } - - bone.matrix.decompose( bone.position, bone.quaternion, bone.scale ); - - } - - } - - }, - - update: function () { - - const bones = this.bones; - const boneInverses = this.boneInverses; - const boneMatrices = this.boneMatrices; - const boneTexture = this.boneTexture; - - // flatten bone matrices to array - - for ( let i = 0, il = bones.length; i < il; i ++ ) { - - // compute the offset between the current and the original transform - - const matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix; - - _offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] ); - _offsetMatrix.toArray( boneMatrices, i * 16 ); - - } - - if ( boneTexture !== null ) { - - boneTexture.needsUpdate = true; - - } - - }, - - clone: function () { - - return new Skeleton( this.bones, this.boneInverses ); - - }, - - getBoneByName: function ( name ) { - - for ( let i = 0, il = this.bones.length; i < il; i ++ ) { - - const bone = this.bones[ i ]; - - if ( bone.name === name ) { - - return bone; - - } - - } - - return undefined; - - }, - - dispose: function ( ) { - - if ( this.boneTexture !== null ) { - - this.boneTexture.dispose(); - - this.boneTexture = null; - - } - - }, - - fromJSON: function ( json, bones ) { - - this.uuid = json.uuid; - - for ( let i = 0, l = json.bones.length; i < l; i ++ ) { - - const uuid = json.bones[ i ]; - let bone = bones[ uuid ]; - - if ( bone === undefined ) { - - console.warn( 'THREE.Skeleton: No bone found with UUID:', uuid ); - bone = new Bone(); - - } - - this.bones.push( bone ); - this.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) ); - - } - - this.init(); - - return this; - - }, - - toJSON: function () { - - const data = { - metadata: { - version: 4.5, - type: 'Skeleton', - generator: 'Skeleton.toJSON' - }, - bones: [], - boneInverses: [] - }; - - data.uuid = this.uuid; - - const bones = this.bones; - const boneInverses = this.boneInverses; - - for ( let i = 0, l = bones.length; i < l; i ++ ) { - - const bone = bones[ i ]; - data.bones.push( bone.uuid ); - - const boneInverse = boneInverses[ i ]; - data.boneInverses.push( boneInverse.toArray() ); - - } - - return data; - - } - - } ); - - const _instanceLocalMatrix = new Matrix4(); - const _instanceWorldMatrix = new Matrix4(); - - const _instanceIntersects = []; - - const _mesh = new Mesh(); - - function InstancedMesh( geometry, material, count ) { - - Mesh.call( this, geometry, material ); - - this.instanceMatrix = new BufferAttribute( new Float32Array( count * 16 ), 16 ); - this.instanceColor = null; - - this.count = count; - - this.frustumCulled = false; - - } - - InstancedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), { - - constructor: InstancedMesh, - - isInstancedMesh: true, - - copy: function ( source ) { - - Mesh.prototype.copy.call( this, source ); - - this.instanceMatrix.copy( source.instanceMatrix ); - this.count = source.count; - - return this; - - }, - - getColorAt: function ( index, color ) { - - color.fromArray( this.instanceColor.array, index * 3 ); - - }, - - getMatrixAt: function ( index, matrix ) { - - matrix.fromArray( this.instanceMatrix.array, index * 16 ); - - }, - - raycast: function ( raycaster, intersects ) { - - const matrixWorld = this.matrixWorld; - const raycastTimes = this.count; - - _mesh.geometry = this.geometry; - _mesh.material = this.material; - - if ( _mesh.material === undefined ) return; - - for ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) { - - // calculate the world matrix for each instance - - this.getMatrixAt( instanceId, _instanceLocalMatrix ); - - _instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix ); - - // the mesh represents this single instance - - _mesh.matrixWorld = _instanceWorldMatrix; - - _mesh.raycast( raycaster, _instanceIntersects ); - - // process the result of raycast - - for ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) { - - const intersect = _instanceIntersects[ i ]; - intersect.instanceId = instanceId; - intersect.object = this; - intersects.push( intersect ); - - } - - _instanceIntersects.length = 0; - - } - - }, - - setColorAt: function ( index, color ) { - - if ( this.instanceColor === null ) { - - this.instanceColor = new BufferAttribute( new Float32Array( this.count * 3 ), 3 ); - - } - - color.toArray( this.instanceColor.array, index * 3 ); - - }, - - setMatrixAt: function ( index, matrix ) { - - matrix.toArray( this.instanceMatrix.array, index * 16 ); - - }, - - updateMorphTargets: function () { - - } - - } ); - - /** - * parameters = { - * color: , - * opacity: , - * - * linewidth: , - * linecap: "round", - * linejoin: "round" - * } - */ - - function LineBasicMaterial( parameters ) { - - Material.call( this ); - - this.type = 'LineBasicMaterial'; - - this.color = new Color( 0xffffff ); - - this.linewidth = 1; - this.linecap = 'round'; - this.linejoin = 'round'; - - this.morphTargets = false; - - this.setValues( parameters ); - - } - - LineBasicMaterial.prototype = Object.create( Material.prototype ); - LineBasicMaterial.prototype.constructor = LineBasicMaterial; - - LineBasicMaterial.prototype.isLineBasicMaterial = true; - - LineBasicMaterial.prototype.copy = function ( source ) { - - Material.prototype.copy.call( this, source ); - - this.color.copy( source.color ); - - this.linewidth = source.linewidth; - this.linecap = source.linecap; - this.linejoin = source.linejoin; - - this.morphTargets = source.morphTargets; - - return this; - - }; - - const _start = new Vector3(); - const _end = new Vector3(); - const _inverseMatrix$1 = new Matrix4(); - const _ray$1 = new Ray(); - const _sphere$2 = new Sphere(); - - function Line( geometry, material, mode ) { - - if ( mode === 1 ) { - - console.error( 'THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead.' ); - - } - - Object3D.call( this ); - - this.type = 'Line'; - - this.geometry = geometry !== undefined ? geometry : new BufferGeometry(); - this.material = material !== undefined ? material : new LineBasicMaterial(); - - this.updateMorphTargets(); - - } - - Line.prototype = Object.assign( Object.create( Object3D.prototype ), { - - constructor: Line, - - isLine: true, - - copy: function ( source ) { - - Object3D.prototype.copy.call( this, source ); - - this.material = source.material; - this.geometry = source.geometry; - - return this; - - }, - - computeLineDistances: function () { - - const geometry = this.geometry; - - if ( geometry.isBufferGeometry ) { - - // we assume non-indexed geometry - - if ( geometry.index === null ) { - - const positionAttribute = geometry.attributes.position; - const lineDistances = [ 0 ]; - - for ( let i = 1, l = positionAttribute.count; i < l; i ++ ) { - - _start.fromBufferAttribute( positionAttribute, i - 1 ); - _end.fromBufferAttribute( positionAttribute, i ); - - lineDistances[ i ] = lineDistances[ i - 1 ]; - lineDistances[ i ] += _start.distanceTo( _end ); - - } - - geometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) ); - - } else { - - console.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' ); - - } - - } else if ( geometry.isGeometry ) { - - const vertices = geometry.vertices; - const lineDistances = geometry.lineDistances; - - lineDistances[ 0 ] = 0; - - for ( let i = 1, l = vertices.length; i < l; i ++ ) { - - lineDistances[ i ] = lineDistances[ i - 1 ]; - lineDistances[ i ] += vertices[ i - 1 ].distanceTo( vertices[ i ] ); - - } - - } - - return this; - - }, - - raycast: function ( raycaster, intersects ) { - - const geometry = this.geometry; - const matrixWorld = this.matrixWorld; - const threshold = raycaster.params.Line.threshold; - - // Checking boundingSphere distance to ray - - if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); - - _sphere$2.copy( geometry.boundingSphere ); - _sphere$2.applyMatrix4( matrixWorld ); - _sphere$2.radius += threshold; - - if ( raycaster.ray.intersectsSphere( _sphere$2 ) === false ) return; - - // - - _inverseMatrix$1.copy( matrixWorld ).invert(); - _ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 ); - - const localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ); - const localThresholdSq = localThreshold * localThreshold; - - const vStart = new Vector3(); - const vEnd = new Vector3(); - const interSegment = new Vector3(); - const interRay = new Vector3(); - const step = this.isLineSegments ? 2 : 1; - - if ( geometry.isBufferGeometry ) { - - const index = geometry.index; - const attributes = geometry.attributes; - const positionAttribute = attributes.position; - - if ( index !== null ) { - - const indices = index.array; - - for ( let i = 0, l = indices.length - 1; i < l; i += step ) { - - const a = indices[ i ]; - const b = indices[ i + 1 ]; - - vStart.fromBufferAttribute( positionAttribute, a ); - vEnd.fromBufferAttribute( positionAttribute, b ); - - const distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); - - if ( distSq > localThresholdSq ) continue; - - interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation - - const distance = raycaster.ray.origin.distanceTo( interRay ); - - if ( distance < raycaster.near || distance > raycaster.far ) continue; - - intersects.push( { - - distance: distance, - // What do we want? intersection point on the ray or on the segment?? - // point: raycaster.ray.at( distance ), - point: interSegment.clone().applyMatrix4( this.matrixWorld ), - index: i, - face: null, - faceIndex: null, - object: this - - } ); - - } - - } else { - - for ( let i = 0, l = positionAttribute.count - 1; i < l; i += step ) { - - vStart.fromBufferAttribute( positionAttribute, i ); - vEnd.fromBufferAttribute( positionAttribute, i + 1 ); - - const distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); - - if ( distSq > localThresholdSq ) continue; - - interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation - - const distance = raycaster.ray.origin.distanceTo( interRay ); - - if ( distance < raycaster.near || distance > raycaster.far ) continue; - - intersects.push( { - - distance: distance, - // What do we want? intersection point on the ray or on the segment?? - // point: raycaster.ray.at( distance ), - point: interSegment.clone().applyMatrix4( this.matrixWorld ), - index: i, - face: null, - faceIndex: null, - object: this - - } ); - - } - - } - - } else if ( geometry.isGeometry ) { - - const vertices = geometry.vertices; - const nbVertices = vertices.length; - - for ( let i = 0; i < nbVertices - 1; i += step ) { - - const distSq = _ray$1.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment ); - - if ( distSq > localThresholdSq ) continue; - - interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation - - const distance = raycaster.ray.origin.distanceTo( interRay ); - - if ( distance < raycaster.near || distance > raycaster.far ) continue; - - intersects.push( { - - distance: distance, - // What do we want? intersection point on the ray or on the segment?? - // point: raycaster.ray.at( distance ), - point: interSegment.clone().applyMatrix4( this.matrixWorld ), - index: i, - face: null, - faceIndex: null, - object: this - - } ); - - } - - } - - }, - - updateMorphTargets: function () { - - const geometry = this.geometry; - - if ( geometry.isBufferGeometry ) { - - 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; - - } - - } - - } - - } else { - - const morphTargets = geometry.morphTargets; - - if ( morphTargets !== undefined && morphTargets.length > 0 ) { - - console.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' ); - - } - - } - - } - - } ); - - const _start$1 = new Vector3(); - const _end$1 = new Vector3(); - - function LineSegments( geometry, material ) { - - Line.call( this, geometry, material ); - - this.type = 'LineSegments'; - - } - - LineSegments.prototype = Object.assign( Object.create( Line.prototype ), { - - constructor: LineSegments, - - isLineSegments: true, - - computeLineDistances: function () { - - const geometry = this.geometry; - - if ( geometry.isBufferGeometry ) { - - // we assume non-indexed geometry - - if ( geometry.index === null ) { - - const positionAttribute = geometry.attributes.position; - const lineDistances = []; - - for ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) { - - _start$1.fromBufferAttribute( positionAttribute, i ); - _end$1.fromBufferAttribute( positionAttribute, i + 1 ); - - lineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ]; - lineDistances[ i + 1 ] = lineDistances[ i ] + _start$1.distanceTo( _end$1 ); - - } - - geometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) ); - - } else { - - console.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' ); - - } - - } else if ( geometry.isGeometry ) { - - const vertices = geometry.vertices; - const lineDistances = geometry.lineDistances; - - for ( let i = 0, l = vertices.length; i < l; i += 2 ) { - - _start$1.copy( vertices[ i ] ); - _end$1.copy( vertices[ i + 1 ] ); - - lineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ]; - lineDistances[ i + 1 ] = lineDistances[ i ] + _start$1.distanceTo( _end$1 ); - - } - - } - - return this; - - } - - } ); - - function LineLoop( geometry, material ) { - - Line.call( this, geometry, material ); - - this.type = 'LineLoop'; - - } - - LineLoop.prototype = Object.assign( Object.create( Line.prototype ), { - - constructor: LineLoop, - - isLineLoop: true, - - } ); - - /** - * parameters = { - * color: , - * opacity: , - * map: new THREE.Texture( ), - * alphaMap: new THREE.Texture( ), - * - * size: , - * sizeAttenuation: - * - * morphTargets: - * } - */ - - function PointsMaterial( parameters ) { - - Material.call( this ); - - this.type = 'PointsMaterial'; - - this.color = new Color( 0xffffff ); - - this.map = null; - - this.alphaMap = null; - - this.size = 1; - this.sizeAttenuation = true; - - this.morphTargets = false; - - this.setValues( parameters ); - - } - - PointsMaterial.prototype = Object.create( Material.prototype ); - PointsMaterial.prototype.constructor = PointsMaterial; - - PointsMaterial.prototype.isPointsMaterial = true; - - PointsMaterial.prototype.copy = function ( source ) { - - Material.prototype.copy.call( this, source ); - - this.color.copy( source.color ); - - this.map = source.map; - - this.alphaMap = source.alphaMap; - - this.size = source.size; - this.sizeAttenuation = source.sizeAttenuation; - - this.morphTargets = source.morphTargets; - - return this; - - }; - - const _inverseMatrix$2 = new Matrix4(); - const _ray$2 = new Ray(); - const _sphere$3 = new Sphere(); - const _position$1 = new Vector3(); - - function Points( geometry, material ) { - - Object3D.call( this ); - - this.type = 'Points'; - - this.geometry = geometry !== undefined ? geometry : new BufferGeometry(); - this.material = material !== undefined ? material : new PointsMaterial(); - - this.updateMorphTargets(); - - } - - Points.prototype = Object.assign( Object.create( Object3D.prototype ), { - - constructor: Points, - - isPoints: true, - - copy: function ( source ) { - - Object3D.prototype.copy.call( this, source ); - - this.material = source.material; - this.geometry = source.geometry; - - return this; - - }, - - raycast: function ( raycaster, intersects ) { - - const geometry = this.geometry; - const matrixWorld = this.matrixWorld; - const threshold = raycaster.params.Points.threshold; - - // Checking boundingSphere distance to ray - - if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); - - _sphere$3.copy( geometry.boundingSphere ); - _sphere$3.applyMatrix4( matrixWorld ); - _sphere$3.radius += threshold; - - if ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return; - - // - - _inverseMatrix$2.copy( matrixWorld ).invert(); - _ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 ); - - const localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ); - const localThresholdSq = localThreshold * localThreshold; - - if ( geometry.isBufferGeometry ) { - - const index = geometry.index; - const attributes = geometry.attributes; - const positionAttribute = attributes.position; - - if ( index !== null ) { - - const indices = index.array; - - for ( let i = 0, il = indices.length; i < il; i ++ ) { - - const a = indices[ i ]; - - _position$1.fromBufferAttribute( positionAttribute, a ); - - testPoint( _position$1, a, localThresholdSq, matrixWorld, raycaster, intersects, this ); - - } - - } else { - - for ( let i = 0, l = positionAttribute.count; i < l; i ++ ) { - - _position$1.fromBufferAttribute( positionAttribute, i ); - - testPoint( _position$1, i, localThresholdSq, matrixWorld, raycaster, intersects, this ); - - } - - } - - } else { - - const vertices = geometry.vertices; - - for ( let i = 0, l = vertices.length; i < l; i ++ ) { - - testPoint( vertices[ i ], i, localThresholdSq, matrixWorld, raycaster, intersects, this ); - - } - - } - - }, - - updateMorphTargets: function () { - - const geometry = this.geometry; - - if ( geometry.isBufferGeometry ) { - - 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; - - } - - } - - } - - } else { - - const morphTargets = geometry.morphTargets; - - if ( morphTargets !== undefined && morphTargets.length > 0 ) { - - console.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' ); - - } - - } - - } - - } ); - - function testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) { - - const rayPointDistanceSq = _ray$2.distanceSqToPoint( point ); - - if ( rayPointDistanceSq < localThresholdSq ) { - - const intersectPoint = new Vector3(); - - _ray$2.closestPointToPoint( point, intersectPoint ); - intersectPoint.applyMatrix4( matrixWorld ); - - const distance = raycaster.ray.origin.distanceTo( intersectPoint ); - - if ( distance < raycaster.near || distance > raycaster.far ) return; - - intersects.push( { - - distance: distance, - distanceToRay: Math.sqrt( rayPointDistanceSq ), - point: intersectPoint, - index: index, - face: null, - object: object - - } ); - - } - - } - - function VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { - - Texture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); - - this.format = format !== undefined ? format : RGBFormat; - - this.minFilter = minFilter !== undefined ? minFilter : LinearFilter; - this.magFilter = magFilter !== undefined ? magFilter : LinearFilter; - - this.generateMipmaps = false; - - const scope = this; - - function updateVideo() { - - scope.needsUpdate = true; - video.requestVideoFrameCallback( updateVideo ); - - } - - if ( 'requestVideoFrameCallback' in video ) { - - video.requestVideoFrameCallback( updateVideo ); - - } - - } - - VideoTexture.prototype = Object.assign( Object.create( Texture.prototype ), { - - constructor: VideoTexture, - - clone: function () { - - return new this.constructor( this.image ).copy( this ); - - }, - - isVideoTexture: true, - - update: function () { - - const video = this.image; - const hasVideoFrameCallback = 'requestVideoFrameCallback' in video; - - if ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) { - - this.needsUpdate = true; - - } - - } - - } ); - - function CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { - - Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); - - this.image = { width: width, height: height }; - this.mipmaps = mipmaps; - - // no flipping for cube textures - // (also flipping doesn't work for compressed textures ) - - this.flipY = false; - - // can't generate mipmaps for compressed textures - // mips must be embedded in DDS files - - this.generateMipmaps = false; - - } - - CompressedTexture.prototype = Object.create( Texture.prototype ); - CompressedTexture.prototype.constructor = CompressedTexture; - - CompressedTexture.prototype.isCompressedTexture = true; - - function CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { - - Texture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); - - this.needsUpdate = true; - - } - - CanvasTexture.prototype = Object.create( Texture.prototype ); - CanvasTexture.prototype.constructor = CanvasTexture; - CanvasTexture.prototype.isCanvasTexture = true; - - function DepthTexture( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) { - - format = format !== undefined ? format : DepthFormat; - - if ( format !== DepthFormat && format !== DepthStencilFormat ) { - - throw new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' ); - - } - - if ( type === undefined && format === DepthFormat ) type = UnsignedShortType; - if ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type; - - Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); - - this.image = { width: width, height: height }; - - this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; - this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; - - this.flipY = false; - this.generateMipmaps = false; - - } - - DepthTexture.prototype = Object.create( Texture.prototype ); - DepthTexture.prototype.constructor = DepthTexture; - DepthTexture.prototype.isDepthTexture = true; - - let _geometryId = 0; // Geometry uses even numbers as Id - const _m1$3 = new Matrix4(); - const _obj$1 = new Object3D(); - const _offset$1 = new Vector3(); - - function Geometry() { - - Object.defineProperty( this, 'id', { value: _geometryId += 2 } ); - - this.uuid = MathUtils.generateUUID(); - - this.name = ''; - this.type = 'Geometry'; - - this.vertices = []; - this.colors = []; - this.faces = []; - this.faceVertexUvs = [[]]; - - this.morphTargets = []; - this.morphNormals = []; - - this.skinWeights = []; - this.skinIndices = []; - - this.lineDistances = []; - - this.boundingBox = null; - this.boundingSphere = null; - - // update flags - - this.elementsNeedUpdate = false; - this.verticesNeedUpdate = false; - this.uvsNeedUpdate = false; - this.normalsNeedUpdate = false; - this.colorsNeedUpdate = false; - this.lineDistancesNeedUpdate = false; - this.groupsNeedUpdate = false; - - } - - Geometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { - - constructor: Geometry, - - isGeometry: true, - - applyMatrix4: function ( matrix ) { - - const normalMatrix = new Matrix3().getNormalMatrix( matrix ); - - for ( let i = 0, il = this.vertices.length; i < il; i ++ ) { - - const vertex = this.vertices[ i ]; - vertex.applyMatrix4( matrix ); - - } - - for ( let i = 0, il = this.faces.length; i < il; i ++ ) { - - const face = this.faces[ i ]; - face.normal.applyMatrix3( normalMatrix ).normalize(); - - for ( let j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) { - - face.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize(); - - } - - } - - if ( this.boundingBox !== null ) { - - this.computeBoundingBox(); - - } - - if ( this.boundingSphere !== null ) { - - this.computeBoundingSphere(); - - } - - this.verticesNeedUpdate = true; - this.normalsNeedUpdate = true; - - return this; - - }, - - rotateX: function ( angle ) { - - // rotate geometry around world x-axis - - _m1$3.makeRotationX( angle ); - - this.applyMatrix4( _m1$3 ); - - return this; - - }, - - rotateY: function ( angle ) { - - // rotate geometry around world y-axis - - _m1$3.makeRotationY( angle ); - - this.applyMatrix4( _m1$3 ); - - return this; - - }, - - rotateZ: function ( angle ) { - - // rotate geometry around world z-axis - - _m1$3.makeRotationZ( angle ); - - this.applyMatrix4( _m1$3 ); - - return this; - - }, - - translate: function ( x, y, z ) { - - // translate geometry - - _m1$3.makeTranslation( x, y, z ); - - this.applyMatrix4( _m1$3 ); - - return this; - - }, - - scale: function ( x, y, z ) { - - // scale geometry - - _m1$3.makeScale( x, y, z ); - - this.applyMatrix4( _m1$3 ); - - return this; - - }, - - lookAt: function ( vector ) { - - _obj$1.lookAt( vector ); - - _obj$1.updateMatrix(); - - this.applyMatrix4( _obj$1.matrix ); - - return this; - - }, - - fromBufferGeometry: function ( geometry ) { - - const scope = this; - - const index = geometry.index !== null ? geometry.index : undefined; - const attributes = geometry.attributes; - - if ( attributes.position === undefined ) { - - console.error( 'THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.' ); - return this; - - } - - const position = attributes.position; - const normal = attributes.normal; - const color = attributes.color; - const uv = attributes.uv; - const uv2 = attributes.uv2; - - if ( uv2 !== undefined ) this.faceVertexUvs[ 1 ] = []; - - for ( let i = 0; i < position.count; i ++ ) { - - scope.vertices.push( new Vector3().fromBufferAttribute( position, i ) ); - - if ( color !== undefined ) { - - scope.colors.push( new Color().fromBufferAttribute( color, i ) ); - - } - - } - - function addFace( a, b, c, materialIndex ) { - - const vertexColors = ( color === undefined ) ? [] : [ - scope.colors[ a ].clone(), - scope.colors[ b ].clone(), - scope.colors[ c ].clone() - ]; - - const vertexNormals = ( normal === undefined ) ? [] : [ - new Vector3().fromBufferAttribute( normal, a ), - new Vector3().fromBufferAttribute( normal, b ), - new Vector3().fromBufferAttribute( normal, c ) - ]; - - const face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex ); - - scope.faces.push( face ); - - if ( uv !== undefined ) { - - scope.faceVertexUvs[ 0 ].push( [ - new Vector2().fromBufferAttribute( uv, a ), - new Vector2().fromBufferAttribute( uv, b ), - new Vector2().fromBufferAttribute( uv, c ) - ] ); - - } - - if ( uv2 !== undefined ) { - - scope.faceVertexUvs[ 1 ].push( [ - new Vector2().fromBufferAttribute( uv2, a ), - new Vector2().fromBufferAttribute( uv2, b ), - new Vector2().fromBufferAttribute( uv2, c ) - ] ); - - } - - } - - const groups = geometry.groups; - - if ( groups.length > 0 ) { - - for ( let i = 0; i < groups.length; i ++ ) { - - const group = groups[ i ]; - - const start = group.start; - const count = group.count; - - for ( let j = start, jl = start + count; j < jl; j += 3 ) { - - if ( index !== undefined ) { - - addFace( index.getX( j ), index.getX( j + 1 ), index.getX( j + 2 ), group.materialIndex ); - - } else { - - addFace( j, j + 1, j + 2, group.materialIndex ); - - } - - } - - } - - } else { - - if ( index !== undefined ) { - - for ( let i = 0; i < index.count; i += 3 ) { - - addFace( index.getX( i ), index.getX( i + 1 ), index.getX( i + 2 ) ); - - } - - } else { - - for ( let i = 0; i < position.count; i += 3 ) { - - addFace( i, i + 1, i + 2 ); - - } - - } - - } - - this.computeFaceNormals(); - - if ( geometry.boundingBox !== null ) { - - this.boundingBox = geometry.boundingBox.clone(); - - } - - if ( geometry.boundingSphere !== null ) { - - this.boundingSphere = geometry.boundingSphere.clone(); - - } - - return this; - - }, - - center: function () { - - this.computeBoundingBox(); - - this.boundingBox.getCenter( _offset$1 ).negate(); - - this.translate( _offset$1.x, _offset$1.y, _offset$1.z ); - - return this; - - }, - - normalize: function () { - - this.computeBoundingSphere(); - - const center = this.boundingSphere.center; - const radius = this.boundingSphere.radius; - - const s = radius === 0 ? 1 : 1.0 / radius; - - const matrix = new Matrix4(); - matrix.set( - s, 0, 0, - s * center.x, - 0, s, 0, - s * center.y, - 0, 0, s, - s * center.z, - 0, 0, 0, 1 - ); - - this.applyMatrix4( matrix ); - - return this; - - }, - - computeFaceNormals: function () { - - const cb = new Vector3(), ab = new Vector3(); - - for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { - - const face = this.faces[ f ]; - - const vA = this.vertices[ face.a ]; - const vB = this.vertices[ face.b ]; - const vC = this.vertices[ face.c ]; - - cb.subVectors( vC, vB ); - ab.subVectors( vA, vB ); - cb.cross( ab ); - - cb.normalize(); - - face.normal.copy( cb ); - - } - - }, - - computeVertexNormals: function ( areaWeighted = true ) { - - const vertices = new Array( this.vertices.length ); - - for ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) { - - vertices[ v ] = new Vector3(); - - } - - if ( areaWeighted ) { - - // vertex normals weighted by triangle areas - // http://www.iquilezles.org/www/articles/normals/normals.htm - - const cb = new Vector3(), ab = new Vector3(); - - for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { - - const face = this.faces[ f ]; - - const vA = this.vertices[ face.a ]; - const vB = this.vertices[ face.b ]; - const vC = this.vertices[ face.c ]; - - cb.subVectors( vC, vB ); - ab.subVectors( vA, vB ); - cb.cross( ab ); - - vertices[ face.a ].add( cb ); - vertices[ face.b ].add( cb ); - vertices[ face.c ].add( cb ); - - } - - } else { - - this.computeFaceNormals(); - - for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { - - const face = this.faces[ f ]; - - vertices[ face.a ].add( face.normal ); - vertices[ face.b ].add( face.normal ); - vertices[ face.c ].add( face.normal ); - - } - - } - - for ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) { - - vertices[ v ].normalize(); - - } - - for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { - - const face = this.faces[ f ]; - - const vertexNormals = face.vertexNormals; - - if ( vertexNormals.length === 3 ) { - - vertexNormals[ 0 ].copy( vertices[ face.a ] ); - vertexNormals[ 1 ].copy( vertices[ face.b ] ); - vertexNormals[ 2 ].copy( vertices[ face.c ] ); - - } else { - - vertexNormals[ 0 ] = vertices[ face.a ].clone(); - vertexNormals[ 1 ] = vertices[ face.b ].clone(); - vertexNormals[ 2 ] = vertices[ face.c ].clone(); - - } - - } - - if ( this.faces.length > 0 ) { - - this.normalsNeedUpdate = true; - - } - - }, - - computeFlatVertexNormals: function () { - - this.computeFaceNormals(); - - for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { - - const face = this.faces[ f ]; - - const vertexNormals = face.vertexNormals; - - if ( vertexNormals.length === 3 ) { - - vertexNormals[ 0 ].copy( face.normal ); - vertexNormals[ 1 ].copy( face.normal ); - vertexNormals[ 2 ].copy( face.normal ); - - } else { - - vertexNormals[ 0 ] = face.normal.clone(); - vertexNormals[ 1 ] = face.normal.clone(); - vertexNormals[ 2 ] = face.normal.clone(); - - } - - } - - if ( this.faces.length > 0 ) { - - this.normalsNeedUpdate = true; - - } - - }, - - computeMorphNormals: function () { - - // save original normals - // - create temp variables on first access - // otherwise just copy (for faster repeated calls) - - for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { - - const face = this.faces[ f ]; - - if ( ! face.__originalFaceNormal ) { - - face.__originalFaceNormal = face.normal.clone(); - - } else { - - face.__originalFaceNormal.copy( face.normal ); - - } - - if ( ! face.__originalVertexNormals ) face.__originalVertexNormals = []; - - for ( let i = 0, il = face.vertexNormals.length; i < il; i ++ ) { - - if ( ! face.__originalVertexNormals[ i ] ) { - - face.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone(); - - } else { - - face.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] ); - - } - - } - - } - - // use temp geometry to compute face and vertex normals for each morph - - const tmpGeo = new Geometry(); - tmpGeo.faces = this.faces; - - for ( let i = 0, il = this.morphTargets.length; i < il; i ++ ) { - - // create on first access - - if ( ! this.morphNormals[ i ] ) { - - this.morphNormals[ i ] = {}; - this.morphNormals[ i ].faceNormals = []; - this.morphNormals[ i ].vertexNormals = []; - - const dstNormalsFace = this.morphNormals[ i ].faceNormals; - const dstNormalsVertex = this.morphNormals[ i ].vertexNormals; - - for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { - - const faceNormal = new Vector3(); - const vertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() }; - - dstNormalsFace.push( faceNormal ); - dstNormalsVertex.push( vertexNormals ); - - } - - } - - const morphNormals = this.morphNormals[ i ]; - - // set vertices to morph target - - tmpGeo.vertices = this.morphTargets[ i ].vertices; - - // compute morph normals - - tmpGeo.computeFaceNormals(); - tmpGeo.computeVertexNormals(); - - // store morph normals - - for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { - - const face = this.faces[ f ]; - - const faceNormal = morphNormals.faceNormals[ f ]; - const vertexNormals = morphNormals.vertexNormals[ f ]; - - faceNormal.copy( face.normal ); - - vertexNormals.a.copy( face.vertexNormals[ 0 ] ); - vertexNormals.b.copy( face.vertexNormals[ 1 ] ); - vertexNormals.c.copy( face.vertexNormals[ 2 ] ); - - } - - } - - // restore original normals - - for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { - - const face = this.faces[ f ]; - - face.normal = face.__originalFaceNormal; - face.vertexNormals = face.__originalVertexNormals; - - } - - }, - - computeBoundingBox: function () { - - if ( this.boundingBox === null ) { - - this.boundingBox = new Box3(); - - } - - this.boundingBox.setFromPoints( this.vertices ); - - }, - - computeBoundingSphere: function () { - - if ( this.boundingSphere === null ) { - - this.boundingSphere = new Sphere(); - - } - - this.boundingSphere.setFromPoints( this.vertices ); - - }, - - merge: function ( geometry, matrix, materialIndexOffset = 0 ) { - - if ( ! ( geometry && geometry.isGeometry ) ) { - - console.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry ); - return; - - } - - let normalMatrix; - const vertexOffset = this.vertices.length, - vertices1 = this.vertices, - vertices2 = geometry.vertices, - faces1 = this.faces, - faces2 = geometry.faces, - colors1 = this.colors, - colors2 = geometry.colors; - - if ( matrix !== undefined ) { - - normalMatrix = new Matrix3().getNormalMatrix( matrix ); - - } - - // vertices - - for ( let i = 0, il = vertices2.length; i < il; i ++ ) { - - const vertex = vertices2[ i ]; - - const vertexCopy = vertex.clone(); - - if ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix ); - - vertices1.push( vertexCopy ); - - } - - // colors - - for ( let i = 0, il = colors2.length; i < il; i ++ ) { - - colors1.push( colors2[ i ].clone() ); - - } - - // faces - - for ( let i = 0, il = faces2.length; i < il; i ++ ) { - - const face = faces2[ i ]; - let normal, color; - const faceVertexNormals = face.vertexNormals, - faceVertexColors = face.vertexColors; - - const faceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset ); - faceCopy.normal.copy( face.normal ); - - if ( normalMatrix !== undefined ) { - - faceCopy.normal.applyMatrix3( normalMatrix ).normalize(); - - } - - for ( let j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) { - - normal = faceVertexNormals[ j ].clone(); - - if ( normalMatrix !== undefined ) { - - normal.applyMatrix3( normalMatrix ).normalize(); - - } - - faceCopy.vertexNormals.push( normal ); - - } - - faceCopy.color.copy( face.color ); - - for ( let j = 0, jl = faceVertexColors.length; j < jl; j ++ ) { - - color = faceVertexColors[ j ]; - faceCopy.vertexColors.push( color.clone() ); - - } - - faceCopy.materialIndex = face.materialIndex + materialIndexOffset; - - faces1.push( faceCopy ); - - } - - // uvs - - for ( let i = 0, il = geometry.faceVertexUvs.length; i < il; i ++ ) { - - const faceVertexUvs2 = geometry.faceVertexUvs[ i ]; - - if ( this.faceVertexUvs[ i ] === undefined ) this.faceVertexUvs[ i ] = []; - - for ( let j = 0, jl = faceVertexUvs2.length; j < jl; j ++ ) { - - const uvs2 = faceVertexUvs2[ j ], uvsCopy = []; - - for ( let k = 0, kl = uvs2.length; k < kl; k ++ ) { - - uvsCopy.push( uvs2[ k ].clone() ); - - } - - this.faceVertexUvs[ i ].push( uvsCopy ); - - } - - } - - }, - - mergeMesh: function ( mesh ) { - - if ( ! ( mesh && mesh.isMesh ) ) { - - console.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh ); - return; - - } - - if ( mesh.matrixAutoUpdate ) mesh.updateMatrix(); - - this.merge( mesh.geometry, mesh.matrix ); - - }, - - /* - * Checks for duplicate vertices with hashmap. - * Duplicated vertices are removed - * and faces' vertices are updated. - */ - - mergeVertices: function ( precisionPoints = 4 ) { - - const verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique) - const unique = [], changes = []; - - const precision = Math.pow( 10, precisionPoints ); - - for ( let i = 0, il = this.vertices.length; i < il; i ++ ) { - - const v = this.vertices[ i ]; - const key = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision ); - - if ( verticesMap[ key ] === undefined ) { - - verticesMap[ key ] = i; - unique.push( this.vertices[ i ] ); - changes[ i ] = unique.length - 1; - - } else { - - //console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]); - changes[ i ] = changes[ verticesMap[ key ] ]; - - } - - } - - - // if faces are completely degenerate after merging vertices, we - // have to remove them from the geometry. - const faceIndicesToRemove = []; - - for ( let i = 0, il = this.faces.length; i < il; i ++ ) { - - const face = this.faces[ i ]; - - face.a = changes[ face.a ]; - face.b = changes[ face.b ]; - face.c = changes[ face.c ]; - - const indices = [ face.a, face.b, face.c ]; - - // if any duplicate vertices are found in a Face3 - // we have to remove the face as nothing can be saved - for ( let n = 0; n < 3; n ++ ) { - - if ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) { - - faceIndicesToRemove.push( i ); - break; - - } - - } - - } - - for ( let i = faceIndicesToRemove.length - 1; i >= 0; i -- ) { - - const idx = faceIndicesToRemove[ i ]; - - this.faces.splice( idx, 1 ); - - for ( let j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) { - - this.faceVertexUvs[ j ].splice( idx, 1 ); - - } - - } - - // Use unique set of vertices - - const diff = this.vertices.length - unique.length; - this.vertices = unique; - return diff; - - }, - - setFromPoints: function ( points ) { - - this.vertices = []; - - for ( let i = 0, l = points.length; i < l; i ++ ) { - - const point = points[ i ]; - this.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) ); - - } - - return this; - - }, - - sortFacesByMaterialIndex: function () { - - const faces = this.faces; - const length = faces.length; - - // tag faces - - for ( let i = 0; i < length; i ++ ) { - - faces[ i ]._id = i; - - } - - // sort faces - - function materialIndexSort( a, b ) { - - return a.materialIndex - b.materialIndex; - - } - - faces.sort( materialIndexSort ); - - // sort uvs - - const uvs1 = this.faceVertexUvs[ 0 ]; - const uvs2 = this.faceVertexUvs[ 1 ]; - - let newUvs1, newUvs2; - - if ( uvs1 && uvs1.length === length ) newUvs1 = []; - if ( uvs2 && uvs2.length === length ) newUvs2 = []; - - for ( let i = 0; i < length; i ++ ) { - - const id = faces[ i ]._id; - - if ( newUvs1 ) newUvs1.push( uvs1[ id ] ); - if ( newUvs2 ) newUvs2.push( uvs2[ id ] ); - - } - - if ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1; - if ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2; - - }, - - toJSON: function () { - - const data = { - metadata: { - version: 4.5, - type: 'Geometry', - generator: 'Geometry.toJSON' - } - }; - - // standard Geometry serialization - - data.uuid = this.uuid; - data.type = this.type; - if ( this.name !== '' ) data.name = this.name; - - if ( this.parameters !== undefined ) { - - const parameters = this.parameters; - - for ( const key in parameters ) { - - if ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ]; - - } - - return data; - - } - - const vertices = []; - - for ( let i = 0; i < this.vertices.length; i ++ ) { - - const vertex = this.vertices[ i ]; - vertices.push( vertex.x, vertex.y, vertex.z ); - - } - - const faces = []; - const normals = []; - const normalsHash = {}; - const colors = []; - const colorsHash = {}; - const uvs = []; - const uvsHash = {}; - - for ( let i = 0; i < this.faces.length; i ++ ) { - - const face = this.faces[ i ]; - - const hasMaterial = true; - const hasFaceUv = false; // deprecated - const hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined; - const hasFaceNormal = face.normal.length() > 0; - const hasFaceVertexNormal = face.vertexNormals.length > 0; - const hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1; - const hasFaceVertexColor = face.vertexColors.length > 0; - - let faceType = 0; - - faceType = setBit( faceType, 0, 0 ); // isQuad - faceType = setBit( faceType, 1, hasMaterial ); - faceType = setBit( faceType, 2, hasFaceUv ); - faceType = setBit( faceType, 3, hasFaceVertexUv ); - faceType = setBit( faceType, 4, hasFaceNormal ); - faceType = setBit( faceType, 5, hasFaceVertexNormal ); - faceType = setBit( faceType, 6, hasFaceColor ); - faceType = setBit( faceType, 7, hasFaceVertexColor ); - - faces.push( faceType ); - faces.push( face.a, face.b, face.c ); - faces.push( face.materialIndex ); - - if ( hasFaceVertexUv ) { - - const faceVertexUvs = this.faceVertexUvs[ 0 ][ i ]; - - faces.push( - getUvIndex( faceVertexUvs[ 0 ] ), - getUvIndex( faceVertexUvs[ 1 ] ), - getUvIndex( faceVertexUvs[ 2 ] ) - ); - - } - - if ( hasFaceNormal ) { - - faces.push( getNormalIndex( face.normal ) ); - - } - - if ( hasFaceVertexNormal ) { - - const vertexNormals = face.vertexNormals; - - faces.push( - getNormalIndex( vertexNormals[ 0 ] ), - getNormalIndex( vertexNormals[ 1 ] ), - getNormalIndex( vertexNormals[ 2 ] ) - ); - - } - - if ( hasFaceColor ) { - - faces.push( getColorIndex( face.color ) ); - - } - - if ( hasFaceVertexColor ) { - - const vertexColors = face.vertexColors; - - faces.push( - getColorIndex( vertexColors[ 0 ] ), - getColorIndex( vertexColors[ 1 ] ), - getColorIndex( vertexColors[ 2 ] ) - ); - - } - - } - - function setBit( value, position, enabled ) { - - return enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) ); - - } - - function getNormalIndex( normal ) { - - const hash = normal.x.toString() + normal.y.toString() + normal.z.toString(); - - if ( normalsHash[ hash ] !== undefined ) { - - return normalsHash[ hash ]; - - } - - normalsHash[ hash ] = normals.length / 3; - normals.push( normal.x, normal.y, normal.z ); - - return normalsHash[ hash ]; - - } - - function getColorIndex( color ) { - - const hash = color.r.toString() + color.g.toString() + color.b.toString(); - - if ( colorsHash[ hash ] !== undefined ) { - - return colorsHash[ hash ]; - - } - - colorsHash[ hash ] = colors.length; - colors.push( color.getHex() ); - - return colorsHash[ hash ]; - - } - - function getUvIndex( uv ) { - - const hash = uv.x.toString() + uv.y.toString(); - - if ( uvsHash[ hash ] !== undefined ) { - - return uvsHash[ hash ]; - - } - - uvsHash[ hash ] = uvs.length / 2; - uvs.push( uv.x, uv.y ); - - return uvsHash[ hash ]; - - } - - data.data = {}; - - data.data.vertices = vertices; - data.data.normals = normals; - if ( colors.length > 0 ) data.data.colors = colors; - if ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility - data.data.faces = faces; - - return data; - - }, - - clone: function () { - - /* - // Handle primitives - - const parameters = this.parameters; - - if ( parameters !== undefined ) { - - const values = []; - - for ( const key in parameters ) { - - values.push( parameters[ key ] ); - - } - - const geometry = Object.create( this.constructor.prototype ); - this.constructor.apply( geometry, values ); - return geometry; - - } - - return new this.constructor().copy( this ); - */ - - return new Geometry().copy( this ); - - }, - - copy: function ( source ) { - - // reset - - this.vertices = []; - this.colors = []; - this.faces = []; - this.faceVertexUvs = [[]]; - this.morphTargets = []; - this.morphNormals = []; - this.skinWeights = []; - this.skinIndices = []; - this.lineDistances = []; - this.boundingBox = null; - this.boundingSphere = null; - - // name - - this.name = source.name; - - // vertices - - const vertices = source.vertices; - - for ( let i = 0, il = vertices.length; i < il; i ++ ) { - - this.vertices.push( vertices[ i ].clone() ); - - } - - // colors - - const colors = source.colors; - - for ( let i = 0, il = colors.length; i < il; i ++ ) { - - this.colors.push( colors[ i ].clone() ); - - } - - // faces - - const faces = source.faces; - - for ( let i = 0, il = faces.length; i < il; i ++ ) { - - this.faces.push( faces[ i ].clone() ); - - } - - // face vertex uvs - - for ( let i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) { - - const faceVertexUvs = source.faceVertexUvs[ i ]; - - if ( this.faceVertexUvs[ i ] === undefined ) { - - this.faceVertexUvs[ i ] = []; - - } - - for ( let j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) { - - const uvs = faceVertexUvs[ j ], uvsCopy = []; - - for ( let k = 0, kl = uvs.length; k < kl; k ++ ) { - - const uv = uvs[ k ]; - - uvsCopy.push( uv.clone() ); - - } - - this.faceVertexUvs[ i ].push( uvsCopy ); - - } - - } - - // morph targets - - const morphTargets = source.morphTargets; - - for ( let i = 0, il = morphTargets.length; i < il; i ++ ) { - - const morphTarget = {}; - morphTarget.name = morphTargets[ i ].name; - - // vertices - - if ( morphTargets[ i ].vertices !== undefined ) { - - morphTarget.vertices = []; - - for ( let j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) { - - morphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() ); - - } - - } - - // normals - - if ( morphTargets[ i ].normals !== undefined ) { - - morphTarget.normals = []; - - for ( let j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) { - - morphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() ); - - } - - } - - this.morphTargets.push( morphTarget ); - - } - - // morph normals - - const morphNormals = source.morphNormals; - - for ( let i = 0, il = morphNormals.length; i < il; i ++ ) { - - const morphNormal = {}; - - // vertex normals - - if ( morphNormals[ i ].vertexNormals !== undefined ) { - - morphNormal.vertexNormals = []; - - for ( let j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) { - - const srcVertexNormal = morphNormals[ i ].vertexNormals[ j ]; - const destVertexNormal = {}; - - destVertexNormal.a = srcVertexNormal.a.clone(); - destVertexNormal.b = srcVertexNormal.b.clone(); - destVertexNormal.c = srcVertexNormal.c.clone(); - - morphNormal.vertexNormals.push( destVertexNormal ); - - } - - } - - // face normals - - if ( morphNormals[ i ].faceNormals !== undefined ) { - - morphNormal.faceNormals = []; - - for ( let j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) { - - morphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() ); - - } - - } - - this.morphNormals.push( morphNormal ); - - } - - // skin weights - - const skinWeights = source.skinWeights; - - for ( let i = 0, il = skinWeights.length; i < il; i ++ ) { - - this.skinWeights.push( skinWeights[ i ].clone() ); - - } - - // skin indices - - const skinIndices = source.skinIndices; - - for ( let i = 0, il = skinIndices.length; i < il; i ++ ) { - - this.skinIndices.push( skinIndices[ i ].clone() ); - - } - - // line distances - - const lineDistances = source.lineDistances; - - for ( let i = 0, il = lineDistances.length; i < il; i ++ ) { - - this.lineDistances.push( lineDistances[ i ] ); - - } - - // 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(); - - } - - // update flags - - this.elementsNeedUpdate = source.elementsNeedUpdate; - this.verticesNeedUpdate = source.verticesNeedUpdate; - this.uvsNeedUpdate = source.uvsNeedUpdate; - this.normalsNeedUpdate = source.normalsNeedUpdate; - this.colorsNeedUpdate = source.colorsNeedUpdate; - this.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate; - this.groupsNeedUpdate = source.groupsNeedUpdate; - - return this; - - }, - - dispose: function () { - - this.dispatchEvent( { type: 'dispose' } ); - - } - - } ); - - class CylinderBufferGeometry extends BufferGeometry { - - constructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) { - - super(); - this.type = 'CylinderBufferGeometry'; - - this.parameters = { - radiusTop: radiusTop, - radiusBottom: radiusBottom, - height: height, - radialSegments: radialSegments, - heightSegments: heightSegments, - openEnded: openEnded, - thetaStart: thetaStart, - thetaLength: thetaLength - }; - - const scope = this; - - radialSegments = Math.floor( radialSegments ); - heightSegments = Math.floor( heightSegments ); - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // helper variables - - let index = 0; - const indexArray = []; - const halfHeight = height / 2; - let groupStart = 0; - - // generate geometry - - generateTorso(); - - if ( openEnded === false ) { - - if ( radiusTop > 0 ) generateCap( true ); - if ( radiusBottom > 0 ) generateCap( false ); - - } - - // 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 generateTorso() { - - const normal = new Vector3(); - const vertex = new Vector3(); - - let groupCount = 0; - - // this will be used to calculate the normal - const slope = ( radiusBottom - radiusTop ) / height; - - // generate vertices, normals and uvs - - for ( let y = 0; y <= heightSegments; y ++ ) { - - const indexRow = []; - - const v = y / heightSegments; - - // calculate the radius of the current row - - const radius = v * ( radiusBottom - radiusTop ) + radiusTop; - - for ( let x = 0; x <= radialSegments; x ++ ) { - - const u = x / radialSegments; - - const theta = u * thetaLength + thetaStart; - - const sinTheta = Math.sin( theta ); - const cosTheta = Math.cos( theta ); - - // vertex - - vertex.x = radius * sinTheta; - vertex.y = - v * height + halfHeight; - vertex.z = radius * cosTheta; - vertices.push( vertex.x, vertex.y, vertex.z ); - - // normal - - normal.set( sinTheta, slope, cosTheta ).normalize(); - normals.push( normal.x, normal.y, normal.z ); - - // uv - - uvs.push( u, 1 - v ); - - // save index of vertex in respective row - - indexRow.push( index ++ ); - - } - - // now save vertices of the row in our index array - - indexArray.push( indexRow ); - - } - - // generate indices - - for ( let x = 0; x < radialSegments; x ++ ) { - - for ( let y = 0; y < heightSegments; y ++ ) { - - // we use the index array to access the correct indices - - const a = indexArray[ y ][ x ]; - const b = indexArray[ y + 1 ][ x ]; - const c = indexArray[ y + 1 ][ x + 1 ]; - const d = indexArray[ y ][ x + 1 ]; - - // faces - - indices.push( a, b, d ); - indices.push( b, c, d ); - - // update group counter - - groupCount += 6; - - } - - } - - // add a group to the geometry. this will ensure multi material support - - scope.addGroup( groupStart, groupCount, 0 ); - - // calculate new start value for groups - - groupStart += groupCount; - - } - - function generateCap( top ) { - - // save the index of the first center vertex - const centerIndexStart = index; - - const uv = new Vector2(); - const vertex = new Vector3(); - - let groupCount = 0; - - const radius = ( top === true ) ? radiusTop : radiusBottom; - const sign = ( top === true ) ? 1 : - 1; - - // first we generate the center vertex data of the cap. - // because the geometry needs one set of uvs per face, - // we must generate a center vertex per face/segment - - for ( let x = 1; x <= radialSegments; x ++ ) { - - // vertex - - vertices.push( 0, halfHeight * sign, 0 ); - - // normal - - normals.push( 0, sign, 0 ); - - // uv - - uvs.push( 0.5, 0.5 ); - - // increase index - - index ++; - - } - - // save the index of the last center vertex - const centerIndexEnd = index; - - // now we generate the surrounding vertices, normals and uvs - - for ( let x = 0; x <= radialSegments; x ++ ) { - - const u = x / radialSegments; - const theta = u * thetaLength + thetaStart; - - const cosTheta = Math.cos( theta ); - const sinTheta = Math.sin( theta ); - - // vertex - - vertex.x = radius * sinTheta; - vertex.y = halfHeight * sign; - vertex.z = radius * cosTheta; - vertices.push( vertex.x, vertex.y, vertex.z ); - - // normal - - normals.push( 0, sign, 0 ); - - // uv - - uv.x = ( cosTheta * 0.5 ) + 0.5; - uv.y = ( sinTheta * 0.5 * sign ) + 0.5; - uvs.push( uv.x, uv.y ); - - // increase index - - index ++; - - } - - // generate indices - - for ( let x = 0; x < radialSegments; x ++ ) { - - const c = centerIndexStart + x; - const i = centerIndexEnd + x; - - if ( top === true ) { - - // face top - - indices.push( i, i + 1, c ); - - } else { - - // face bottom - - indices.push( i + 1, i, c ); - - } - - groupCount += 3; - - } - - // add a group to the geometry. this will ensure multi material support - - scope.addGroup( groupStart, groupCount, top === true ? 1 : 2 ); - - // calculate new start value for groups - - groupStart += groupCount; - - } - - } - - } - - class ConeBufferGeometry extends CylinderBufferGeometry { - - constructor( radius = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) { - - super( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); - - this.type = 'ConeBufferGeometry'; - - this.parameters = { - radius: radius, - height: height, - radialSegments: radialSegments, - heightSegments: heightSegments, - openEnded: openEnded, - thetaStart: thetaStart, - thetaLength: thetaLength - }; - - } - - } - - new Vector3(); - new Vector3(); - new Vector3(); - new Triangle(); - - /** - * Port from https://github.com/mapbox/earcut (v2.2.2) - */ - - const Earcut = { - - triangulate: function ( data, holeIndices, dim ) { - - dim = dim || 2; - - const hasHoles = holeIndices && holeIndices.length; - const outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length; - let outerNode = linkedList( data, 0, outerLen, dim, true ); - const triangles = []; - - if ( ! outerNode || outerNode.next === outerNode.prev ) return triangles; - - let minX, minY, maxX, maxY, x, y, invSize; - - if ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim ); - - // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox - if ( data.length > 80 * dim ) { - - minX = maxX = data[ 0 ]; - minY = maxY = data[ 1 ]; - - for ( let i = dim; i < outerLen; i += dim ) { - - x = data[ i ]; - y = data[ i + 1 ]; - if ( x < minX ) minX = x; - if ( y < minY ) minY = y; - if ( x > maxX ) maxX = x; - if ( y > maxY ) maxY = y; - - } - - // minX, minY and invSize are later used to transform coords into integers for z-order calculation - invSize = Math.max( maxX - minX, maxY - minY ); - invSize = invSize !== 0 ? 1 / invSize : 0; - - } - - earcutLinked( outerNode, triangles, dim, minX, minY, invSize ); - - return triangles; - - } - - }; - - // create a circular doubly linked list from polygon points in the specified winding order - function linkedList( data, start, end, dim, clockwise ) { - - let i, last; - - if ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) { - - for ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last ); - - } else { - - for ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last ); - - } - - if ( last && equals( last, last.next ) ) { - - removeNode( last ); - last = last.next; - - } - - return last; - - } - - // eliminate colinear or duplicate points - function filterPoints( start, end ) { - - if ( ! start ) return start; - if ( ! end ) end = start; - - let p = start, - again; - do { - - again = false; - - if ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) { - - removeNode( p ); - p = end = p.prev; - if ( p === p.next ) break; - again = true; - - } else { - - p = p.next; - - } - - } while ( again || p !== end ); - - return end; - - } - - // main ear slicing loop which triangulates a polygon (given as a linked list) - function earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) { - - if ( ! ear ) return; - - // interlink polygon nodes in z-order - if ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize ); - - let stop = ear, - prev, next; - - // iterate through ears, slicing them one by one - while ( ear.prev !== ear.next ) { - - prev = ear.prev; - next = ear.next; - - if ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) { - - // cut off the triangle - triangles.push( prev.i / dim ); - triangles.push( ear.i / dim ); - triangles.push( next.i / dim ); - - removeNode( ear ); - - // skipping the next vertex leads to less sliver triangles - ear = next.next; - stop = next.next; - - continue; - - } - - ear = next; - - // if we looped through the whole remaining polygon and can't find any more ears - if ( ear === stop ) { - - // try filtering points and slicing again - if ( ! pass ) { - - earcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 ); - - // if this didn't work, try curing all small self-intersections locally - - } else if ( pass === 1 ) { - - ear = cureLocalIntersections( filterPoints( ear ), triangles, dim ); - earcutLinked( ear, triangles, dim, minX, minY, invSize, 2 ); - - // as a last resort, try splitting the remaining polygon into two - - } else if ( pass === 2 ) { - - splitEarcut( ear, triangles, dim, minX, minY, invSize ); - - } - - break; - - } - - } - - } - - // check whether a polygon node forms a valid ear with adjacent nodes - function isEar( ear ) { - - const a = ear.prev, - b = ear, - c = ear.next; - - if ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear - - // now make sure we don't have other points inside the potential ear - let p = ear.next.next; - - while ( p !== ear.prev ) { - - if ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && - area( p.prev, p, p.next ) >= 0 ) return false; - p = p.next; - - } - - return true; - - } - - function isEarHashed( ear, minX, minY, invSize ) { - - const a = ear.prev, - b = ear, - c = ear.next; - - if ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear - - // triangle bbox; min & max are calculated like this for speed - const minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ), - minTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ), - maxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ), - maxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y ); - - // z-order range for the current triangle bbox; - const minZ = zOrder( minTX, minTY, minX, minY, invSize ), - maxZ = zOrder( maxTX, maxTY, minX, minY, invSize ); - - let p = ear.prevZ, - n = ear.nextZ; - - // look for points inside the triangle in both directions - while ( p && p.z >= minZ && n && n.z <= maxZ ) { - - if ( p !== ear.prev && p !== ear.next && - pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && - area( p.prev, p, p.next ) >= 0 ) return false; - p = p.prevZ; - - if ( n !== ear.prev && n !== ear.next && - pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) && - area( n.prev, n, n.next ) >= 0 ) return false; - n = n.nextZ; - - } - - // look for remaining points in decreasing z-order - while ( p && p.z >= minZ ) { - - if ( p !== ear.prev && p !== ear.next && - pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && - area( p.prev, p, p.next ) >= 0 ) return false; - p = p.prevZ; - - } - - // look for remaining points in increasing z-order - while ( n && n.z <= maxZ ) { - - if ( n !== ear.prev && n !== ear.next && - pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) && - area( n.prev, n, n.next ) >= 0 ) return false; - n = n.nextZ; - - } - - return true; - - } - - // go through all polygon nodes and cure small local self-intersections - function cureLocalIntersections( start, triangles, dim ) { - - let p = start; - do { - - const a = p.prev, - b = p.next.next; - - if ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) { - - triangles.push( a.i / dim ); - triangles.push( p.i / dim ); - triangles.push( b.i / dim ); - - // remove two nodes involved - removeNode( p ); - removeNode( p.next ); - - p = start = b; - - } - - p = p.next; - - } while ( p !== start ); - - return filterPoints( p ); - - } - - // try splitting polygon into two and triangulate them independently - function splitEarcut( start, triangles, dim, minX, minY, invSize ) { - - // look for a valid diagonal that divides the polygon into two - let a = start; - do { - - let b = a.next.next; - while ( b !== a.prev ) { - - if ( a.i !== b.i && isValidDiagonal( a, b ) ) { - - // split the polygon in two by the diagonal - let c = splitPolygon( a, b ); - - // filter colinear points around the cuts - a = filterPoints( a, a.next ); - c = filterPoints( c, c.next ); - - // run earcut on each half - earcutLinked( a, triangles, dim, minX, minY, invSize ); - earcutLinked( c, triangles, dim, minX, minY, invSize ); - return; - - } - - b = b.next; - - } - - a = a.next; - - } while ( a !== start ); - - } - - // link every hole into the outer loop, producing a single-ring polygon without holes - function eliminateHoles( data, holeIndices, outerNode, dim ) { - - const queue = []; - let i, len, start, end, list; - - for ( i = 0, len = holeIndices.length; i < len; i ++ ) { - - start = holeIndices[ i ] * dim; - end = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length; - list = linkedList( data, start, end, dim, false ); - if ( list === list.next ) list.steiner = true; - queue.push( getLeftmost( list ) ); - - } - - queue.sort( compareX ); - - // process holes from left to right - for ( i = 0; i < queue.length; i ++ ) { - - eliminateHole( queue[ i ], outerNode ); - outerNode = filterPoints( outerNode, outerNode.next ); - - } - - return outerNode; - - } - - function compareX( a, b ) { - - return a.x - b.x; - - } - - // find a bridge between vertices that connects hole with an outer ring and and link it - function eliminateHole( hole, outerNode ) { - - outerNode = findHoleBridge( hole, outerNode ); - if ( outerNode ) { - - const b = splitPolygon( outerNode, hole ); - - // filter collinear points around the cuts - filterPoints( outerNode, outerNode.next ); - filterPoints( b, b.next ); - - } - - } - - // David Eberly's algorithm for finding a bridge between hole and outer polygon - function findHoleBridge( hole, outerNode ) { - - let p = outerNode; - const hx = hole.x; - const hy = hole.y; - let qx = - Infinity, m; - - // find a segment intersected by a ray from the hole's leftmost point to the left; - // segment's endpoint with lesser x will be potential connection point - do { - - if ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) { - - const x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y ); - if ( x <= hx && x > qx ) { - - qx = x; - if ( x === hx ) { - - if ( hy === p.y ) return p; - if ( hy === p.next.y ) return p.next; - - } - - m = p.x < p.next.x ? p : p.next; - - } - - } - - p = p.next; - - } while ( p !== outerNode ); - - if ( ! m ) return null; - - if ( hx === qx ) return m; // hole touches outer segment; pick leftmost endpoint - - // look for points inside the triangle of hole point, segment intersection and endpoint; - // if there are no points found, we have a valid connection; - // otherwise choose the point of the minimum angle with the ray as connection point - - const stop = m, - mx = m.x, - my = m.y; - let tanMin = Infinity, tan; - - p = m; - - do { - - if ( hx >= p.x && p.x >= mx && hx !== p.x && - pointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) { - - tan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential - - if ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) { - - m = p; - tanMin = tan; - - } - - } - - p = p.next; - - } while ( p !== stop ); - - return m; - - } - - // whether sector in vertex m contains sector in vertex p in the same coordinates - function sectorContainsSector( m, p ) { - - return area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0; - - } - - // interlink polygon nodes in z-order - function indexCurve( start, minX, minY, invSize ) { - - let p = start; - do { - - if ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize ); - p.prevZ = p.prev; - p.nextZ = p.next; - p = p.next; - - } while ( p !== start ); - - p.prevZ.nextZ = null; - p.prevZ = null; - - sortLinked( p ); - - } - - // Simon Tatham's linked list merge sort algorithm - // http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html - function sortLinked( list ) { - - let i, p, q, e, tail, numMerges, pSize, qSize, - inSize = 1; - - do { - - p = list; - list = null; - tail = null; - numMerges = 0; - - while ( p ) { - - numMerges ++; - q = p; - pSize = 0; - for ( i = 0; i < inSize; i ++ ) { - - pSize ++; - q = q.nextZ; - if ( ! q ) break; - - } - - qSize = inSize; - - while ( pSize > 0 || ( qSize > 0 && q ) ) { - - if ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) { - - e = p; - p = p.nextZ; - pSize --; - - } else { - - e = q; - q = q.nextZ; - qSize --; - - } - - if ( tail ) tail.nextZ = e; - else list = e; - - e.prevZ = tail; - tail = e; - - } - - p = q; - - } - - tail.nextZ = null; - inSize *= 2; - - } while ( numMerges > 1 ); - - return list; - - } - - // z-order of a point given coords and inverse of the longer side of data bbox - function zOrder( x, y, minX, minY, invSize ) { - - // coords are transformed into non-negative 15-bit integer range - x = 32767 * ( x - minX ) * invSize; - y = 32767 * ( y - minY ) * invSize; - - x = ( x | ( x << 8 ) ) & 0x00FF00FF; - x = ( x | ( x << 4 ) ) & 0x0F0F0F0F; - x = ( x | ( x << 2 ) ) & 0x33333333; - x = ( x | ( x << 1 ) ) & 0x55555555; - - y = ( y | ( y << 8 ) ) & 0x00FF00FF; - y = ( y | ( y << 4 ) ) & 0x0F0F0F0F; - y = ( y | ( y << 2 ) ) & 0x33333333; - y = ( y | ( y << 1 ) ) & 0x55555555; - - return x | ( y << 1 ); - - } - - // find the leftmost node of a polygon ring - function getLeftmost( start ) { - - let p = start, - leftmost = start; - do { - - if ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p; - p = p.next; - - } while ( p !== start ); - - return leftmost; - - } - - // check if a point lies within a convex triangle - function pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) { - - return ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 && - ( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 && - ( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0; - - } - - // check if a diagonal between two polygon nodes is valid (lies in polygon interior) - function isValidDiagonal( a, b ) { - - return a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges - ( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible - ( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors - equals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case - - } - - // signed area of a triangle - function area( p, q, r ) { - - return ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y ); - - } - - // check if two points are equal - function equals( p1, p2 ) { - - return p1.x === p2.x && p1.y === p2.y; - - } - - // check if two segments intersect - function intersects( p1, q1, p2, q2 ) { - - const o1 = sign( area( p1, q1, p2 ) ); - const o2 = sign( area( p1, q1, q2 ) ); - const o3 = sign( area( p2, q2, p1 ) ); - const o4 = sign( area( p2, q2, q1 ) ); - - if ( o1 !== o2 && o3 !== o4 ) return true; // general case - - if ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1 - if ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1 - if ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2 - if ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2 - - return false; - - } - - // for collinear points p, q, r, check if point q lies on segment pr - function onSegment( p, q, r ) { - - return q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y ); - - } - - function sign( num ) { - - return num > 0 ? 1 : num < 0 ? - 1 : 0; - - } - - // check if a polygon diagonal intersects any polygon segments - function intersectsPolygon( a, b ) { - - let p = a; - do { - - if ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && - intersects( p, p.next, a, b ) ) return true; - p = p.next; - - } while ( p !== a ); - - return false; - - } - - // check if a polygon diagonal is locally inside the polygon - function locallyInside( a, b ) { - - return area( a.prev, a, a.next ) < 0 ? - area( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 : - area( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0; - - } - - // check if the middle point of a polygon diagonal is inside the polygon - function middleInside( a, b ) { - - let p = a, - inside = false; - const px = ( a.x + b.x ) / 2, - py = ( a.y + b.y ) / 2; - do { - - if ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y && - ( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) ) - inside = ! inside; - p = p.next; - - } while ( p !== a ); - - return inside; - - } - - // link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two; - // if one belongs to the outer ring and another to a hole, it merges it into a single ring - function splitPolygon( a, b ) { - - const a2 = new Node$1( a.i, a.x, a.y ), - b2 = new Node$1( b.i, b.x, b.y ), - an = a.next, - bp = b.prev; - - a.next = b; - b.prev = a; - - a2.next = an; - an.prev = a2; - - b2.next = a2; - a2.prev = b2; - - bp.next = b2; - b2.prev = bp; - - return b2; - - } - - // create a node and optionally link it with previous one (in a circular doubly linked list) - function insertNode( i, x, y, last ) { - - const p = new Node$1( i, x, y ); - - if ( ! last ) { - - p.prev = p; - p.next = p; - - } else { - - p.next = last.next; - p.prev = last; - last.next.prev = p; - last.next = p; - - } - - return p; - - } - - function removeNode( p ) { - - p.next.prev = p.prev; - p.prev.next = p.next; - - if ( p.prevZ ) p.prevZ.nextZ = p.nextZ; - if ( p.nextZ ) p.nextZ.prevZ = p.prevZ; - - } - - function Node$1( i, x, y ) { - - // vertex index in coordinates array - this.i = i; - - // vertex coordinates - this.x = x; - this.y = y; - - // previous and next vertex nodes in a polygon ring - this.prev = null; - this.next = null; - - // z-order curve value - this.z = null; - - // previous and next nodes in z-order - this.prevZ = null; - this.nextZ = null; - - // indicates whether this is a steiner point - this.steiner = false; - - } - - function signedArea( data, start, end, dim ) { - - let sum = 0; - for ( let i = start, j = end - dim; i < end; i += dim ) { - - sum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] ); - j = i; - - } - - return sum; - - } - - const ShapeUtils = { - - // calculate area of the contour polygon - - area: function ( contour ) { - - const n = contour.length; - let a = 0.0; - - for ( let p = n - 1, q = 0; q < n; p = q ++ ) { - - a += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y; - - } - - return a * 0.5; - - }, - - isClockWise: function ( pts ) { - - return ShapeUtils.area( pts ) < 0; - - }, - - triangulateShape: function ( contour, holes ) { - - const vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ] - const holeIndices = []; // array of hole indices - const faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ] - - removeDupEndPts( contour ); - addContour( vertices, contour ); - - // - - let holeIndex = contour.length; - - holes.forEach( removeDupEndPts ); - - for ( let i = 0; i < holes.length; i ++ ) { - - holeIndices.push( holeIndex ); - holeIndex += holes[ i ].length; - addContour( vertices, holes[ i ] ); - - } - - // - - const triangles = Earcut.triangulate( vertices, holeIndices ); - - // - - for ( let i = 0; i < triangles.length; i += 3 ) { - - faces.push( triangles.slice( i, i + 3 ) ); - - } - - return faces; - - } - - }; - - function removeDupEndPts( points ) { - - const l = points.length; - - if ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) { - - points.pop(); - - } - - } - - function addContour( vertices, contour ) { - - for ( let i = 0; i < contour.length; i ++ ) { - - vertices.push( contour[ i ].x ); - vertices.push( contour[ i ].y ); - - } - - } - - /** - * Creates extruded geometry from a path shape. - * - * parameters = { - * - * curveSegments: , // number of points on the curves - * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too - * depth: , // Depth to extrude the shape - * - * bevelEnabled: , // turn on bevel - * bevelThickness: , // how deep into the original shape bevel goes - * bevelSize: , // how far from shape outline (including bevelOffset) is bevel - * bevelOffset: , // how far from shape outline does bevel start - * bevelSegments: , // number of bevel layers - * - * extrudePath: // curve to extrude shape along - * - * UVGenerator: // object that provides UV generator functions - * - * } - */ - - class ExtrudeBufferGeometry extends BufferGeometry { - - constructor( shapes, options ) { - - super(); - - this.type = 'ExtrudeBufferGeometry'; - - this.parameters = { - shapes: shapes, - options: options - }; - - shapes = Array.isArray( shapes ) ? shapes : [ shapes ]; - - const scope = this; - - const verticesArray = []; - const uvArray = []; - - for ( let i = 0, l = shapes.length; i < l; i ++ ) { - - const shape = shapes[ i ]; - addShape( shape ); - - } - - // build geometry - - this.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) ); - this.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) ); - - this.computeVertexNormals(); - - // functions - - function addShape( shape ) { - - const placeholder = []; - - // options - - const curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12; - const steps = options.steps !== undefined ? options.steps : 1; - let depth = options.depth !== undefined ? options.depth : 100; - - let bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; - let bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6; - let bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2; - let bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0; - let bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3; - - const extrudePath = options.extrudePath; - - const uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator; - - // deprecated options - - if ( options.amount !== undefined ) { - - console.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' ); - depth = options.amount; - - } - - // - - let extrudePts, extrudeByPath = false; - let splineTube, binormal, normal, position2; - - if ( extrudePath ) { - - extrudePts = extrudePath.getSpacedPoints( steps ); - - extrudeByPath = true; - bevelEnabled = false; // bevels not supported for path extrusion - - // SETUP TNB variables - - // TODO1 - have a .isClosed in spline? - - splineTube = extrudePath.computeFrenetFrames( steps, false ); - - // console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length); - - binormal = new Vector3(); - normal = new Vector3(); - position2 = new Vector3(); - - } - - // Safeguards if bevels are not enabled - - if ( ! bevelEnabled ) { - - bevelSegments = 0; - bevelThickness = 0; - bevelSize = 0; - bevelOffset = 0; - - } - - // Variables initialization - - const shapePoints = shape.extractPoints( curveSegments ); - - let vertices = shapePoints.shape; - const holes = shapePoints.holes; - - const reverse = ! ShapeUtils.isClockWise( vertices ); - - if ( reverse ) { - - vertices = vertices.reverse(); - - // Maybe we should also check if holes are in the opposite direction, just to be safe ... - - for ( let h = 0, hl = holes.length; h < hl; h ++ ) { - - const ahole = holes[ h ]; - - if ( ShapeUtils.isClockWise( ahole ) ) { - - holes[ h ] = ahole.reverse(); - - } - - } - - } - - - const faces = ShapeUtils.triangulateShape( vertices, holes ); - - /* Vertices */ - - const contour = vertices; // vertices has all points but contour has only points of circumference - - for ( let h = 0, hl = holes.length; h < hl; h ++ ) { - - const ahole = holes[ h ]; - - vertices = vertices.concat( ahole ); - - } - - - function scalePt2( pt, vec, size ) { - - if ( ! vec ) console.error( "THREE.ExtrudeGeometry: vec does not exist" ); - - return vec.clone().multiplyScalar( size ).add( pt ); - - } - - const vlen = vertices.length, flen = faces.length; - - - // Find directions for point movement - - - function getBevelVec( inPt, inPrev, inNext ) { - - // computes for inPt the corresponding point inPt' on a new contour - // shifted by 1 unit (length of normalized vector) to the left - // if we walk along contour clockwise, this new contour is outside the old one - // - // inPt' is the intersection of the two lines parallel to the two - // adjacent edges of inPt at a distance of 1 unit on the left side. - - let v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt - - // good reading for geometry algorithms (here: line-line intersection) - // http://geomalgorithms.com/a05-_intersect-1.html - - const v_prev_x = inPt.x - inPrev.x, - v_prev_y = inPt.y - inPrev.y; - const v_next_x = inNext.x - inPt.x, - v_next_y = inNext.y - inPt.y; - - const v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y ); - - // check for collinear edges - const collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x ); - - if ( Math.abs( collinear0 ) > Number.EPSILON ) { - - // not collinear - - // length of vectors for normalizing - - const v_prev_len = Math.sqrt( v_prev_lensq ); - const v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y ); - - // shift adjacent points by unit vectors to the left - - const ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len ); - const ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len ); - - const ptNextShift_x = ( inNext.x - v_next_y / v_next_len ); - const ptNextShift_y = ( inNext.y + v_next_x / v_next_len ); - - // scaling factor for v_prev to intersection point - - const sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y - - ( ptNextShift_y - ptPrevShift_y ) * v_next_x ) / - ( v_prev_x * v_next_y - v_prev_y * v_next_x ); - - // vector from inPt to intersection point - - v_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x ); - v_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y ); - - // Don't normalize!, otherwise sharp corners become ugly - // but prevent crazy spikes - const v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y ); - if ( v_trans_lensq <= 2 ) { - - return new Vector2( v_trans_x, v_trans_y ); - - } else { - - shrink_by = Math.sqrt( v_trans_lensq / 2 ); - - } - - } else { - - // handle special case of collinear edges - - let direction_eq = false; // assumes: opposite - - if ( v_prev_x > Number.EPSILON ) { - - if ( v_next_x > Number.EPSILON ) { - - direction_eq = true; - - } - - } else { - - if ( v_prev_x < - Number.EPSILON ) { - - if ( v_next_x < - Number.EPSILON ) { - - direction_eq = true; - - } - - } else { - - if ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) { - - direction_eq = true; - - } - - } - - } - - if ( direction_eq ) { - - // console.log("Warning: lines are a straight sequence"); - v_trans_x = - v_prev_y; - v_trans_y = v_prev_x; - shrink_by = Math.sqrt( v_prev_lensq ); - - } else { - - // console.log("Warning: lines are a straight spike"); - v_trans_x = v_prev_x; - v_trans_y = v_prev_y; - shrink_by = Math.sqrt( v_prev_lensq / 2 ); - - } - - } - - return new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by ); - - } - - - const contourMovements = []; - - for ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { - - if ( j === il ) j = 0; - if ( k === il ) k = 0; - - // (j)---(i)---(k) - // console.log('i,j,k', i, j , k) - - contourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] ); - - } - - const holesMovements = []; - let oneHoleMovements, verticesMovements = contourMovements.concat(); - - for ( let h = 0, hl = holes.length; h < hl; h ++ ) { - - const ahole = holes[ h ]; - - oneHoleMovements = []; - - for ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { - - if ( j === il ) j = 0; - if ( k === il ) k = 0; - - // (j)---(i)---(k) - oneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] ); - - } - - holesMovements.push( oneHoleMovements ); - verticesMovements = verticesMovements.concat( oneHoleMovements ); - - } - - - // Loop bevelSegments, 1 for the front, 1 for the back - - for ( let b = 0; b < bevelSegments; b ++ ) { - - //for ( b = bevelSegments; b > 0; b -- ) { - - const t = b / bevelSegments; - const z = bevelThickness * Math.cos( t * Math.PI / 2 ); - const bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset; - - // contract shape - - for ( let i = 0, il = contour.length; i < il; i ++ ) { - - const vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); - - v( vert.x, vert.y, - z ); - - } - - // expand holes - - for ( let h = 0, hl = holes.length; h < hl; h ++ ) { - - const ahole = holes[ h ]; - oneHoleMovements = holesMovements[ h ]; - - for ( let i = 0, il = ahole.length; i < il; i ++ ) { - - const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); - - v( vert.x, vert.y, - z ); - - } - - } - - } - - const bs = bevelSize + bevelOffset; - - // Back facing vertices - - for ( let i = 0; i < vlen; i ++ ) { - - const vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; - - if ( ! extrudeByPath ) { - - v( vert.x, vert.y, 0 ); - - } else { - - // v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x ); - - normal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x ); - binormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y ); - - position2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal ); - - v( position2.x, position2.y, position2.z ); - - } - - } - - // Add stepped vertices... - // Including front facing vertices - - for ( let s = 1; s <= steps; s ++ ) { - - for ( let i = 0; i < vlen; i ++ ) { - - const vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; - - if ( ! extrudeByPath ) { - - v( vert.x, vert.y, depth / steps * s ); - - } else { - - // v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x ); - - normal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x ); - binormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y ); - - position2.copy( extrudePts[ s ] ).add( normal ).add( binormal ); - - v( position2.x, position2.y, position2.z ); - - } - - } - - } - - - // Add bevel segments planes - - //for ( b = 1; b <= bevelSegments; b ++ ) { - for ( let b = bevelSegments - 1; b >= 0; b -- ) { - - const t = b / bevelSegments; - const z = bevelThickness * Math.cos( t * Math.PI / 2 ); - const bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset; - - // contract shape - - for ( let i = 0, il = contour.length; i < il; i ++ ) { - - const vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); - v( vert.x, vert.y, depth + z ); - - } - - // expand holes - - for ( let h = 0, hl = holes.length; h < hl; h ++ ) { - - const ahole = holes[ h ]; - oneHoleMovements = holesMovements[ h ]; - - for ( let i = 0, il = ahole.length; i < il; i ++ ) { - - const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); - - if ( ! extrudeByPath ) { - - v( vert.x, vert.y, depth + z ); - - } else { - - v( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z ); - - } - - } - - } - - } - - /* Faces */ - - // Top and bottom faces - - buildLidFaces(); - - // Sides faces - - buildSideFaces(); - - - ///// Internal functions - - function buildLidFaces() { - - const start = verticesArray.length / 3; - - if ( bevelEnabled ) { - - let layer = 0; // steps + 1 - let offset = vlen * layer; - - // Bottom faces - - for ( let i = 0; i < flen; i ++ ) { - - const face = faces[ i ]; - f3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset ); - - } - - layer = steps + bevelSegments * 2; - offset = vlen * layer; - - // Top faces - - for ( let i = 0; i < flen; i ++ ) { - - const face = faces[ i ]; - f3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset ); - - } - - } else { - - // Bottom faces - - for ( let i = 0; i < flen; i ++ ) { - - const face = faces[ i ]; - f3( face[ 2 ], face[ 1 ], face[ 0 ] ); - - } - - // Top faces - - for ( let i = 0; i < flen; i ++ ) { - - const face = faces[ i ]; - f3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps ); - - } - - } - - scope.addGroup( start, verticesArray.length / 3 - start, 0 ); - - } - - // Create faces for the z-sides of the shape - - function buildSideFaces() { - - const start = verticesArray.length / 3; - let layeroffset = 0; - sidewalls( contour, layeroffset ); - layeroffset += contour.length; - - for ( let h = 0, hl = holes.length; h < hl; h ++ ) { - - const ahole = holes[ h ]; - sidewalls( ahole, layeroffset ); - - //, true - layeroffset += ahole.length; - - } - - - scope.addGroup( start, verticesArray.length / 3 - start, 1 ); - - - } - - function sidewalls( contour, layeroffset ) { - - let i = contour.length; - - while ( -- i >= 0 ) { - - const j = i; - let k = i - 1; - if ( k < 0 ) k = contour.length - 1; - - //console.log('b', i,j, i-1, k,vertices.length); - - for ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) { - - const slen1 = vlen * s; - const slen2 = vlen * ( s + 1 ); - - const a = layeroffset + j + slen1, - b = layeroffset + k + slen1, - c = layeroffset + k + slen2, - d = layeroffset + j + slen2; - - f4( a, b, c, d ); - - } - - } - - } - - function v( x, y, z ) { - - placeholder.push( x ); - placeholder.push( y ); - placeholder.push( z ); - - } - - - function f3( a, b, c ) { - - addVertex( a ); - addVertex( b ); - addVertex( c ); - - const nextIndex = verticesArray.length / 3; - const uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); - - addUV( uvs[ 0 ] ); - addUV( uvs[ 1 ] ); - addUV( uvs[ 2 ] ); - - } - - function f4( a, b, c, d ) { - - addVertex( a ); - addVertex( b ); - addVertex( d ); - - addVertex( b ); - addVertex( c ); - addVertex( d ); - - - const nextIndex = verticesArray.length / 3; - const uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); - - addUV( uvs[ 0 ] ); - addUV( uvs[ 1 ] ); - addUV( uvs[ 3 ] ); - - addUV( uvs[ 1 ] ); - addUV( uvs[ 2 ] ); - addUV( uvs[ 3 ] ); - - } - - function addVertex( index ) { - - verticesArray.push( placeholder[ index * 3 + 0 ] ); - verticesArray.push( placeholder[ index * 3 + 1 ] ); - verticesArray.push( placeholder[ index * 3 + 2 ] ); - - } - - - function addUV( vector2 ) { - - uvArray.push( vector2.x ); - uvArray.push( vector2.y ); - - } - - } - - } - - toJSON() { - - const data = BufferGeometry.prototype.toJSON.call( this ); - - const shapes = this.parameters.shapes; - const options = this.parameters.options; - - return toJSON( shapes, options, data ); - - } - - } - - const WorldUVGenerator = { - - generateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) { - - const a_x = vertices[ indexA * 3 ]; - const a_y = vertices[ indexA * 3 + 1 ]; - const b_x = vertices[ indexB * 3 ]; - const b_y = vertices[ indexB * 3 + 1 ]; - const c_x = vertices[ indexC * 3 ]; - const c_y = vertices[ indexC * 3 + 1 ]; - - return [ - new Vector2( a_x, a_y ), - new Vector2( b_x, b_y ), - new Vector2( c_x, c_y ) - ]; - - }, - - generateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) { - - const a_x = vertices[ indexA * 3 ]; - const a_y = vertices[ indexA * 3 + 1 ]; - const a_z = vertices[ indexA * 3 + 2 ]; - const b_x = vertices[ indexB * 3 ]; - const b_y = vertices[ indexB * 3 + 1 ]; - const b_z = vertices[ indexB * 3 + 2 ]; - const c_x = vertices[ indexC * 3 ]; - const c_y = vertices[ indexC * 3 + 1 ]; - const c_z = vertices[ indexC * 3 + 2 ]; - const d_x = vertices[ indexD * 3 ]; - const d_y = vertices[ indexD * 3 + 1 ]; - const d_z = vertices[ indexD * 3 + 2 ]; - - if ( Math.abs( a_y - b_y ) < 0.01 ) { - - return [ - new Vector2( a_x, 1 - a_z ), - new Vector2( b_x, 1 - b_z ), - new Vector2( c_x, 1 - c_z ), - new Vector2( d_x, 1 - d_z ) - ]; - - } else { - - return [ - new Vector2( a_y, 1 - a_z ), - new Vector2( b_y, 1 - b_z ), - new Vector2( c_y, 1 - c_z ), - new Vector2( d_y, 1 - d_z ) - ]; - - } - - } - - }; - - function toJSON( shapes, options, data ) { - - data.shapes = []; - - if ( Array.isArray( shapes ) ) { - - for ( let i = 0, l = shapes.length; i < l; i ++ ) { - - const shape = shapes[ i ]; - - data.shapes.push( shape.uuid ); - - } - - } else { - - data.shapes.push( shapes.uuid ); - - } - - if ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON(); - - return data; - - } - - /** - * Creates extruded geometry from a path shape. - * - * parameters = { - * - * curveSegments: , // number of points on the curves - * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too - * depth: , // Depth to extrude the shape - * - * bevelEnabled: , // turn on bevel - * bevelThickness: , // how deep into the original shape bevel goes - * bevelSize: , // how far from shape outline (including bevelOffset) is bevel - * bevelOffset: , // how far from shape outline does bevel start - * bevelSegments: , // number of bevel layers - * - * extrudePath: // curve to extrude shape along - * - * UVGenerator: // object that provides UV generator functions - * - * } - */ - - class ExtrudeGeometry extends Geometry { - - constructor( shapes, options ) { - - super(); - - this.type = 'ExtrudeGeometry'; - - this.parameters = { - shapes: shapes, - options: options - }; - - this.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) ); - this.mergeVertices(); - - } - - toJSON() { - - const data = super.toJSON(); - - const shapes = this.parameters.shapes; - const options = this.parameters.options; - - return toJSON$1( shapes, options, data ); - - } - - } - - function toJSON$1( shapes, options, data ) { - - data.shapes = []; - - if ( Array.isArray( shapes ) ) { - - for ( let i = 0, l = shapes.length; i < l; i ++ ) { - - const shape = shapes[ i ]; - - data.shapes.push( shape.uuid ); - - } - - } else { - - data.shapes.push( shapes.uuid ); - - } - - if ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON(); - - return data; - - } - - /** - * Parametric Surfaces Geometry - * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html - */ - - function ParametricBufferGeometry( func, slices, stacks ) { - - BufferGeometry.call( this ); - - this.type = 'ParametricBufferGeometry'; - - this.parameters = { - func: func, - slices: slices, - stacks: stacks - }; - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - const EPS = 0.00001; - - const normal = new Vector3(); - - const p0 = new Vector3(), p1 = new Vector3(); - const pu = new Vector3(), pv = new Vector3(); - - if ( func.length < 3 ) { - - console.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' ); - - } - - // generate vertices, normals and uvs - - const sliceCount = slices + 1; - - for ( let i = 0; i <= stacks; i ++ ) { - - const v = i / stacks; - - for ( let j = 0; j <= slices; j ++ ) { - - const u = j / slices; - - // vertex - - func( u, v, p0 ); - vertices.push( p0.x, p0.y, p0.z ); - - // normal - - // approximate tangent vectors via finite differences - - if ( u - EPS >= 0 ) { - - func( u - EPS, v, p1 ); - pu.subVectors( p0, p1 ); - - } else { - - func( u + EPS, v, p1 ); - pu.subVectors( p1, p0 ); - - } - - if ( v - EPS >= 0 ) { - - func( u, v - EPS, p1 ); - pv.subVectors( p0, p1 ); - - } else { - - func( u, v + EPS, p1 ); - pv.subVectors( p1, p0 ); - - } - - // cross product of tangent vectors returns surface normal - - normal.crossVectors( pu, pv ).normalize(); - normals.push( normal.x, normal.y, normal.z ); - - // uv - - uvs.push( u, v ); - - } - - } - - // generate indices - - for ( let i = 0; i < stacks; i ++ ) { - - for ( let j = 0; j < slices; j ++ ) { - - const a = i * sliceCount + j; - const b = i * sliceCount + j + 1; - const c = ( i + 1 ) * sliceCount + j + 1; - const d = ( i + 1 ) * sliceCount + j; - - // faces one and two - - indices.push( a, b, d ); - indices.push( b, c, d ); - - } - - } - - // 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 ) ); - - } - - ParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); - ParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry; - - /** - * Parametric Surfaces Geometry - * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html - */ - - function ParametricGeometry( func, slices, stacks ) { - - Geometry.call( this ); - - this.type = 'ParametricGeometry'; - - this.parameters = { - func: func, - slices: slices, - stacks: stacks - }; - - this.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) ); - this.mergeVertices(); - - } - - ParametricGeometry.prototype = Object.create( Geometry.prototype ); - ParametricGeometry.prototype.constructor = ParametricGeometry; - - class ShapeBufferGeometry extends BufferGeometry { - - constructor( shapes, curveSegments = 12 ) { - - super(); - this.type = 'ShapeBufferGeometry'; - - this.parameters = { - shapes: shapes, - curveSegments: curveSegments - }; - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // helper variables - - let groupStart = 0; - let groupCount = 0; - - // allow single and array values for "shapes" parameter - - if ( Array.isArray( shapes ) === false ) { - - addShape( shapes ); - - } else { - - for ( let i = 0; i < shapes.length; i ++ ) { - - addShape( shapes[ i ] ); - - this.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support - - groupStart += groupCount; - groupCount = 0; - - } - - } - - // 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 ) ); - - - // helper functions - - function addShape( shape ) { - - const indexOffset = vertices.length / 3; - const points = shape.extractPoints( curveSegments ); - - let shapeVertices = points.shape; - const shapeHoles = points.holes; - - // check direction of vertices - - if ( ShapeUtils.isClockWise( shapeVertices ) === false ) { - - shapeVertices = shapeVertices.reverse(); - - } - - for ( let i = 0, l = shapeHoles.length; i < l; i ++ ) { - - const shapeHole = shapeHoles[ i ]; - - if ( ShapeUtils.isClockWise( shapeHole ) === true ) { - - shapeHoles[ i ] = shapeHole.reverse(); - - } - - } - - const faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles ); - - // join vertices of inner and outer paths to a single array - - for ( let i = 0, l = shapeHoles.length; i < l; i ++ ) { - - const shapeHole = shapeHoles[ i ]; - shapeVertices = shapeVertices.concat( shapeHole ); - - } - - // vertices, normals, uvs - - for ( let i = 0, l = shapeVertices.length; i < l; i ++ ) { - - const vertex = shapeVertices[ i ]; - - vertices.push( vertex.x, vertex.y, 0 ); - normals.push( 0, 0, 1 ); - uvs.push( vertex.x, vertex.y ); // world uvs - - } - - // incides - - for ( let i = 0, l = faces.length; i < l; i ++ ) { - - const face = faces[ i ]; - - const a = face[ 0 ] + indexOffset; - const b = face[ 1 ] + indexOffset; - const c = face[ 2 ] + indexOffset; - - indices.push( a, b, c ); - groupCount += 3; - - } - - } - - } - - toJSON() { - - const data = BufferGeometry.prototype.toJSON.call( this ); - - const shapes = this.parameters.shapes; - - return toJSON$2( shapes, data ); - - } - - } - - function toJSON$2( shapes, data ) { - - data.shapes = []; - - if ( Array.isArray( shapes ) ) { - - for ( let i = 0, l = shapes.length; i < l; i ++ ) { - - const shape = shapes[ i ]; - - data.shapes.push( shape.uuid ); - - } - - } else { - - data.shapes.push( shapes.uuid ); - - } - - return data; - - } - - class ShapeGeometry extends Geometry { - - constructor( shapes, curveSegments ) { - - super(); - this.type = 'ShapeGeometry'; - - if ( typeof curveSegments === 'object' ) { - - console.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' ); - - curveSegments = curveSegments.curveSegments; - - } - - this.parameters = { - shapes: shapes, - curveSegments: curveSegments - }; - - this.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) ); - this.mergeVertices(); - - } - - toJSON() { - - const data = Geometry.prototype.toJSON.call( this ); - - const shapes = this.parameters.shapes; - - return toJSON$3( shapes, data ); - - } - - } - - function toJSON$3( shapes, data ) { - - data.shapes = []; - - if ( Array.isArray( shapes ) ) { - - for ( let i = 0, l = shapes.length; i < l; i ++ ) { - - const shape = shapes[ i ]; - - data.shapes.push( shape.uuid ); - - } - - } else { - - data.shapes.push( shapes.uuid ); - - } - - return data; - - } - - class SphereBufferGeometry extends BufferGeometry { - - constructor( radius = 1, widthSegments = 8, heightSegments = 6, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) { - - super(); - this.type = 'SphereBufferGeometry'; - - this.parameters = { - radius: radius, - widthSegments: widthSegments, - heightSegments: heightSegments, - phiStart: phiStart, - phiLength: phiLength, - thetaStart: thetaStart, - thetaLength: thetaLength - }; - - widthSegments = Math.max( 3, Math.floor( widthSegments ) ); - heightSegments = Math.max( 2, Math.floor( heightSegments ) ); - - const thetaEnd = Math.min( thetaStart + thetaLength, Math.PI ); - - let index = 0; - const grid = []; - - const vertex = new Vector3(); - const normal = new Vector3(); - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // generate vertices, normals and uvs - - for ( let iy = 0; iy <= heightSegments; iy ++ ) { - - const verticesRow = []; - - const v = iy / heightSegments; - - // special case for the poles - - let uOffset = 0; - - if ( iy == 0 && thetaStart == 0 ) { - - uOffset = 0.5 / widthSegments; - - } else if ( iy == heightSegments && thetaEnd == Math.PI ) { - - uOffset = - 0.5 / widthSegments; - - } - - for ( let ix = 0; ix <= widthSegments; ix ++ ) { - - const u = ix / widthSegments; - - // vertex - - vertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); - vertex.y = radius * Math.cos( thetaStart + v * thetaLength ); - vertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); - - vertices.push( vertex.x, vertex.y, vertex.z ); - - // normal - - normal.copy( vertex ).normalize(); - normals.push( normal.x, normal.y, normal.z ); - - // uv - - uvs.push( u + uOffset, 1 - v ); - - verticesRow.push( index ++ ); - - } - - grid.push( verticesRow ); - - } - - // indices - - for ( let iy = 0; iy < heightSegments; iy ++ ) { - - for ( let ix = 0; ix < widthSegments; ix ++ ) { - - const a = grid[ iy ][ ix + 1 ]; - const b = grid[ iy ][ ix ]; - const c = grid[ iy + 1 ][ ix ]; - const d = grid[ iy + 1 ][ ix + 1 ]; - - if ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d ); - if ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d ); - - } - - } - - // 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 ) ); - - } - - } - - class SphereGeometry extends Geometry { - - constructor( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) { - - super(); - this.type = 'SphereGeometry'; - - this.parameters = { - radius: radius, - widthSegments: widthSegments, - heightSegments: heightSegments, - phiStart: phiStart, - phiLength: phiLength, - thetaStart: thetaStart, - thetaLength: thetaLength - }; - - this.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) ); - this.mergeVertices(); - - } - - } - - class TubeBufferGeometry extends BufferGeometry { - - constructor( path, tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) { - - super(); - this.type = 'TubeBufferGeometry'; - - this.parameters = { - path: path, - tubularSegments: tubularSegments, - radius: radius, - radialSegments: radialSegments, - closed: closed - }; - - const frames = path.computeFrenetFrames( tubularSegments, closed ); - - // expose internals - - this.tangents = frames.tangents; - this.normals = frames.normals; - this.binormals = frames.binormals; - - // helper variables - - const vertex = new Vector3(); - const normal = new Vector3(); - const uv = new Vector2(); - let P = new Vector3(); - - // buffer - - const vertices = []; - const normals = []; - const uvs = []; - const indices = []; - - // create buffer data - - generateBufferData(); - - // 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 ) ); - - // functions - - function generateBufferData() { - - for ( let i = 0; i < tubularSegments; i ++ ) { - - generateSegment( i ); - - } - - // if the geometry is not closed, generate the last row of vertices and normals - // at the regular position on the given path - // - // if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ) - - generateSegment( ( closed === false ) ? tubularSegments : 0 ); - - // uvs are generated in a separate function. - // this makes it easy compute correct values for closed geometries - - generateUVs(); - - // finally create faces - - generateIndices(); - - } - - function generateSegment( i ) { - - // we use getPointAt to sample evenly distributed points from the given path - - P = path.getPointAt( i / tubularSegments, P ); - - // retrieve corresponding normal and binormal - - const N = frames.normals[ i ]; - const B = frames.binormals[ i ]; - - // generate normals and vertices for the current segment - - for ( let j = 0; j <= radialSegments; j ++ ) { - - const v = j / radialSegments * Math.PI * 2; - - const sin = Math.sin( v ); - const cos = - Math.cos( v ); - - // normal - - normal.x = ( cos * N.x + sin * B.x ); - normal.y = ( cos * N.y + sin * B.y ); - normal.z = ( cos * N.z + sin * B.z ); - normal.normalize(); - - normals.push( normal.x, normal.y, normal.z ); - - // vertex - - vertex.x = P.x + radius * normal.x; - vertex.y = P.y + radius * normal.y; - vertex.z = P.z + radius * normal.z; - - vertices.push( vertex.x, vertex.y, vertex.z ); - - } - - } - - function generateIndices() { - - for ( let j = 1; j <= tubularSegments; j ++ ) { - - for ( let i = 1; i <= radialSegments; i ++ ) { - - const a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); - const b = ( radialSegments + 1 ) * j + ( i - 1 ); - const c = ( radialSegments + 1 ) * j + i; - const d = ( radialSegments + 1 ) * ( j - 1 ) + i; - - // faces - - indices.push( a, b, d ); - indices.push( b, c, d ); - - } - - } - - } - - function generateUVs() { - - for ( let i = 0; i <= tubularSegments; i ++ ) { - - for ( let j = 0; j <= radialSegments; j ++ ) { - - uv.x = i / tubularSegments; - uv.y = j / radialSegments; - - uvs.push( uv.x, uv.y ); - - } - - } - - } - - } - toJSON() { - - const data = BufferGeometry.prototype.toJSON.call( this ); - - data.path = this.parameters.path.toJSON(); - - return data; - - } - - } - - /** - * parameters = { - * color: - * } - */ - - function ShadowMaterial( parameters ) { - - Material.call( this ); - - this.type = 'ShadowMaterial'; - - this.color = new Color( 0x000000 ); - this.transparent = true; - - this.setValues( parameters ); - - } - - ShadowMaterial.prototype = Object.create( Material.prototype ); - ShadowMaterial.prototype.constructor = ShadowMaterial; - - ShadowMaterial.prototype.isShadowMaterial = true; - - ShadowMaterial.prototype.copy = function ( source ) { - - Material.prototype.copy.call( this, source ); - - this.color.copy( source.color ); - - return this; - - }; - - function RawShaderMaterial( parameters ) { - - ShaderMaterial.call( this, parameters ); - - this.type = 'RawShaderMaterial'; - - } - - RawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype ); - RawShaderMaterial.prototype.constructor = RawShaderMaterial; - - RawShaderMaterial.prototype.isRawShaderMaterial = true; - - /** - * parameters = { - * color: , - * roughness: , - * metalness: , - * opacity: , - * - * map: new THREE.Texture( ), - * - * lightMap: new THREE.Texture( ), - * lightMapIntensity: - * - * aoMap: new THREE.Texture( ), - * aoMapIntensity: - * - * emissive: , - * emissiveIntensity: - * emissiveMap: new THREE.Texture( ), - * - * bumpMap: new THREE.Texture( ), - * bumpScale: , - * - * normalMap: new THREE.Texture( ), - * normalMapType: THREE.TangentSpaceNormalMap, - * normalScale: , - * - * displacementMap: new THREE.Texture( ), - * displacementScale: , - * displacementBias: , - * - * roughnessMap: new THREE.Texture( ), - * - * metalnessMap: new THREE.Texture( ), - * - * alphaMap: new THREE.Texture( ), - * - * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), - * envMapIntensity: - * - * refractionRatio: , - * - * wireframe: , - * wireframeLinewidth: , - * - * skinning: , - * morphTargets: , - * morphNormals: - * } - */ - - function MeshStandardMaterial( parameters ) { - - Material.call( this ); - - this.defines = { 'STANDARD': '' }; - - this.type = 'MeshStandardMaterial'; - - this.color = new Color( 0xffffff ); // diffuse - this.roughness = 1.0; - this.metalness = 0.0; - - this.map = null; - - this.lightMap = null; - this.lightMapIntensity = 1.0; - - this.aoMap = null; - this.aoMapIntensity = 1.0; - - this.emissive = new Color( 0x000000 ); - this.emissiveIntensity = 1.0; - this.emissiveMap = null; - - this.bumpMap = null; - this.bumpScale = 1; - - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2( 1, 1 ); - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.roughnessMap = null; - - this.metalnessMap = null; - - this.alphaMap = null; - - this.envMap = null; - this.envMapIntensity = 1.0; - - this.refractionRatio = 0.98; - - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - - this.skinning = false; - this.morphTargets = false; - this.morphNormals = false; - - this.vertexTangents = false; - - this.setValues( parameters ); - - } - - MeshStandardMaterial.prototype = Object.create( Material.prototype ); - MeshStandardMaterial.prototype.constructor = MeshStandardMaterial; - - MeshStandardMaterial.prototype.isMeshStandardMaterial = true; - - MeshStandardMaterial.prototype.copy = function ( source ) { - - Material.prototype.copy.call( this, source ); - - this.defines = { 'STANDARD': '' }; - - this.color.copy( source.color ); - this.roughness = source.roughness; - this.metalness = source.metalness; - - this.map = source.map; - - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - - this.emissive.copy( source.emissive ); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy( source.normalScale ); - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.roughnessMap = source.roughnessMap; - - this.metalnessMap = source.metalnessMap; - - this.alphaMap = source.alphaMap; - - this.envMap = source.envMap; - this.envMapIntensity = source.envMapIntensity; - - this.refractionRatio = source.refractionRatio; - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - - this.skinning = source.skinning; - this.morphTargets = source.morphTargets; - this.morphNormals = source.morphNormals; - - this.vertexTangents = source.vertexTangents; - - return this; - - }; - - /** - * parameters = { - * clearcoat: , - * clearcoatMap: new THREE.Texture( ), - * clearcoatRoughness: , - * clearcoatRoughnessMap: new THREE.Texture( ), - * clearcoatNormalScale: , - * clearcoatNormalMap: new THREE.Texture( ), - * - * reflectivity: , - * ior: , - * - * sheen: , - * - * transmission: , - * transmissionMap: new THREE.Texture( ) - * } - */ - - function MeshPhysicalMaterial( parameters ) { - - MeshStandardMaterial.call( this ); - - this.defines = { - - 'STANDARD': '', - 'PHYSICAL': '' - - }; - - this.type = 'MeshPhysicalMaterial'; - - this.clearcoat = 0.0; - this.clearcoatMap = null; - this.clearcoatRoughness = 0.0; - this.clearcoatRoughnessMap = null; - this.clearcoatNormalScale = new Vector2( 1, 1 ); - this.clearcoatNormalMap = null; - - this.reflectivity = 0.5; // maps to F0 = 0.04 - - Object.defineProperty( this, 'ior', { - get: function () { - - return ( 1 + 0.4 * this.reflectivity ) / ( 1 - 0.4 * this.reflectivity ); - - }, - set: function ( ior ) { - - this.reflectivity = MathUtils.clamp( 2.5 * ( ior - 1 ) / ( ior + 1 ), 0, 1 ); - - } - } ); - - this.sheen = null; // null will disable sheen bsdf - - this.transmission = 0.0; - this.transmissionMap = null; - - this.setValues( parameters ); - - } - - MeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype ); - MeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial; - - MeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true; - - MeshPhysicalMaterial.prototype.copy = function ( source ) { - - MeshStandardMaterial.prototype.copy.call( this, source ); - - this.defines = { - - 'STANDARD': '', - 'PHYSICAL': '' - - }; - - this.clearcoat = source.clearcoat; - this.clearcoatMap = source.clearcoatMap; - this.clearcoatRoughness = source.clearcoatRoughness; - this.clearcoatRoughnessMap = source.clearcoatRoughnessMap; - this.clearcoatNormalMap = source.clearcoatNormalMap; - this.clearcoatNormalScale.copy( source.clearcoatNormalScale ); - - this.reflectivity = source.reflectivity; - - if ( source.sheen ) { - - this.sheen = ( this.sheen || new Color() ).copy( source.sheen ); - - } else { - - this.sheen = null; - - } - - this.transmission = source.transmission; - this.transmissionMap = source.transmissionMap; - - return this; - - }; - - /** - * parameters = { - * color: , - * specular: , - * shininess: , - * opacity: , - * - * map: new THREE.Texture( ), - * - * lightMap: new THREE.Texture( ), - * lightMapIntensity: - * - * aoMap: new THREE.Texture( ), - * aoMapIntensity: - * - * emissive: , - * emissiveIntensity: - * emissiveMap: new THREE.Texture( ), - * - * bumpMap: new THREE.Texture( ), - * bumpScale: , - * - * normalMap: new THREE.Texture( ), - * normalMapType: THREE.TangentSpaceNormalMap, - * normalScale: , - * - * displacementMap: new THREE.Texture( ), - * displacementScale: , - * displacementBias: , - * - * specularMap: new THREE.Texture( ), - * - * alphaMap: new THREE.Texture( ), - * - * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), - * combine: THREE.MultiplyOperation, - * reflectivity: , - * refractionRatio: , - * - * wireframe: , - * wireframeLinewidth: , - * - * skinning: , - * morphTargets: , - * morphNormals: - * } - */ - - function MeshPhongMaterial( parameters ) { - - Material.call( this ); - - this.type = 'MeshPhongMaterial'; - - this.color = new Color( 0xffffff ); // diffuse - this.specular = new Color( 0x111111 ); - this.shininess = 30; - - this.map = null; - - this.lightMap = null; - this.lightMapIntensity = 1.0; - - this.aoMap = null; - this.aoMapIntensity = 1.0; - - this.emissive = new Color( 0x000000 ); - this.emissiveIntensity = 1.0; - this.emissiveMap = null; - - this.bumpMap = null; - this.bumpScale = 1; - - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2( 1, 1 ); - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.specularMap = null; - - this.alphaMap = null; - - this.envMap = null; - this.combine = MultiplyOperation; - this.reflectivity = 1; - this.refractionRatio = 0.98; - - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - - this.skinning = false; - this.morphTargets = false; - this.morphNormals = false; - - this.setValues( parameters ); - - } - - MeshPhongMaterial.prototype = Object.create( Material.prototype ); - MeshPhongMaterial.prototype.constructor = MeshPhongMaterial; - - MeshPhongMaterial.prototype.isMeshPhongMaterial = true; - - MeshPhongMaterial.prototype.copy = function ( source ) { - - Material.prototype.copy.call( this, source ); - - this.color.copy( source.color ); - this.specular.copy( source.specular ); - this.shininess = source.shininess; - - this.map = source.map; - - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - - this.emissive.copy( source.emissive ); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy( source.normalScale ); - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.specularMap = source.specularMap; - - this.alphaMap = source.alphaMap; - - this.envMap = source.envMap; - 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.skinning = source.skinning; - this.morphTargets = source.morphTargets; - this.morphNormals = source.morphNormals; - - return this; - - }; - - /** - * parameters = { - * color: , - * - * map: new THREE.Texture( ), - * gradientMap: new THREE.Texture( ), - * - * lightMap: new THREE.Texture( ), - * lightMapIntensity: - * - * aoMap: new THREE.Texture( ), - * aoMapIntensity: - * - * emissive: , - * emissiveIntensity: - * emissiveMap: new THREE.Texture( ), - * - * bumpMap: new THREE.Texture( ), - * bumpScale: , - * - * normalMap: new THREE.Texture( ), - * normalMapType: THREE.TangentSpaceNormalMap, - * normalScale: , - * - * displacementMap: new THREE.Texture( ), - * displacementScale: , - * displacementBias: , - * - * alphaMap: new THREE.Texture( ), - * - * wireframe: , - * wireframeLinewidth: , - * - * skinning: , - * morphTargets: , - * morphNormals: - * } - */ - - function MeshToonMaterial( parameters ) { - - Material.call( this ); - - this.defines = { 'TOON': '' }; - - this.type = 'MeshToonMaterial'; - - this.color = new Color( 0xffffff ); - - this.map = null; - this.gradientMap = null; - - this.lightMap = null; - this.lightMapIntensity = 1.0; - - this.aoMap = null; - this.aoMapIntensity = 1.0; - - this.emissive = new Color( 0x000000 ); - this.emissiveIntensity = 1.0; - this.emissiveMap = null; - - this.bumpMap = null; - this.bumpScale = 1; - - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2( 1, 1 ); - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.alphaMap = null; - - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - - this.skinning = false; - this.morphTargets = false; - this.morphNormals = false; - - this.setValues( parameters ); - - } - - MeshToonMaterial.prototype = Object.create( Material.prototype ); - MeshToonMaterial.prototype.constructor = MeshToonMaterial; - - MeshToonMaterial.prototype.isMeshToonMaterial = true; - - MeshToonMaterial.prototype.copy = function ( source ) { - - Material.prototype.copy.call( this, source ); - - this.color.copy( source.color ); - - this.map = source.map; - this.gradientMap = source.gradientMap; - - this.lightMap = source.lightMap; - this.lightMapIntensity = source.lightMapIntensity; - - this.aoMap = source.aoMap; - this.aoMapIntensity = source.aoMapIntensity; - - this.emissive.copy( source.emissive ); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy( source.normalScale ); - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.alphaMap = source.alphaMap; - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - this.wireframeLinecap = source.wireframeLinecap; - this.wireframeLinejoin = source.wireframeLinejoin; - - this.skinning = source.skinning; - this.morphTargets = source.morphTargets; - this.morphNormals = source.morphNormals; - - return this; - - }; - - /** - * parameters = { - * opacity: , - * - * bumpMap: new THREE.Texture( ), - * bumpScale: , - * - * normalMap: new THREE.Texture( ), - * normalMapType: THREE.TangentSpaceNormalMap, - * normalScale: , - * - * displacementMap: new THREE.Texture( ), - * displacementScale: , - * displacementBias: , - * - * wireframe: , - * wireframeLinewidth: - * - * skinning: , - * morphTargets: , - * morphNormals: - * } - */ - - function MeshNormalMaterial( parameters ) { - - Material.call( this ); - - this.type = 'MeshNormalMaterial'; - - this.bumpMap = null; - this.bumpScale = 1; - - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2( 1, 1 ); - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.wireframe = false; - this.wireframeLinewidth = 1; - - this.fog = false; - - this.skinning = false; - this.morphTargets = false; - this.morphNormals = false; - - this.setValues( parameters ); - - } - - MeshNormalMaterial.prototype = Object.create( Material.prototype ); - MeshNormalMaterial.prototype.constructor = MeshNormalMaterial; - - MeshNormalMaterial.prototype.isMeshNormalMaterial = true; - - MeshNormalMaterial.prototype.copy = function ( source ) { - - Material.prototype.copy.call( this, source ); - - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy( source.normalScale ); - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.wireframe = source.wireframe; - this.wireframeLinewidth = source.wireframeLinewidth; - - this.skinning = source.skinning; - this.morphTargets = source.morphTargets; - this.morphNormals = source.morphNormals; - - return this; - - }; - - /** - * parameters = { - * color: , - * opacity: , - * - * map: new THREE.Texture( ), - * - * lightMap: new THREE.Texture( ), - * lightMapIntensity: - * - * aoMap: new THREE.Texture( ), - * aoMapIntensity: - * - * emissive: , - * emissiveIntensity: - * emissiveMap: new THREE.Texture( ), - * - * specularMap: new THREE.Texture( ), - * - * alphaMap: new THREE.Texture( ), - * - * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), - * combine: THREE.Multiply, - * reflectivity: , - * refractionRatio: , - * - * wireframe: , - * wireframeLinewidth: , - * - * skinning: , - * morphTargets: , - * morphNormals: - * } - */ - - function MeshLambertMaterial( parameters ) { - - Material.call( this ); - - this.type = 'MeshLambertMaterial'; - - this.color = new Color( 0xffffff ); // diffuse - - this.map = null; - - this.lightMap = null; - this.lightMapIntensity = 1.0; - - this.aoMap = null; - this.aoMapIntensity = 1.0; - - this.emissive = new Color( 0x000000 ); - this.emissiveIntensity = 1.0; - this.emissiveMap = null; - - this.specularMap = null; - - this.alphaMap = null; - - this.envMap = null; - this.combine = MultiplyOperation; - this.reflectivity = 1; - this.refractionRatio = 0.98; - - this.wireframe = false; - this.wireframeLinewidth = 1; - this.wireframeLinecap = 'round'; - this.wireframeLinejoin = 'round'; - - this.skinning = false; - this.morphTargets = false; - this.morphNormals = false; - - this.setValues( parameters ); - - } - - MeshLambertMaterial.prototype = Object.create( Material.prototype ); - MeshLambertMaterial.prototype.constructor = MeshLambertMaterial; - - MeshLambertMaterial.prototype.isMeshLambertMaterial = true; - - MeshLambertMaterial.prototype.copy = function ( source ) { - - Material.prototype.copy.call( this, 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.emissive.copy( source.emissive ); - this.emissiveMap = source.emissiveMap; - this.emissiveIntensity = source.emissiveIntensity; - - this.specularMap = source.specularMap; - - this.alphaMap = source.alphaMap; - - this.envMap = source.envMap; - 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.skinning = source.skinning; - this.morphTargets = source.morphTargets; - this.morphNormals = source.morphNormals; - - return this; - - }; - - /** - * parameters = { - * color: , - * opacity: , - * - * matcap: new THREE.Texture( ), - * - * map: new THREE.Texture( ), - * - * bumpMap: new THREE.Texture( ), - * bumpScale: , - * - * normalMap: new THREE.Texture( ), - * normalMapType: THREE.TangentSpaceNormalMap, - * normalScale: , - * - * displacementMap: new THREE.Texture( ), - * displacementScale: , - * displacementBias: , - * - * alphaMap: new THREE.Texture( ), - * - * skinning: , - * morphTargets: , - * morphNormals: - * } - */ - - function MeshMatcapMaterial( parameters ) { - - Material.call( this ); - - this.defines = { 'MATCAP': '' }; - - this.type = 'MeshMatcapMaterial'; - - this.color = new Color( 0xffffff ); // diffuse - - this.matcap = null; - - this.map = null; - - this.bumpMap = null; - this.bumpScale = 1; - - this.normalMap = null; - this.normalMapType = TangentSpaceNormalMap; - this.normalScale = new Vector2( 1, 1 ); - - this.displacementMap = null; - this.displacementScale = 1; - this.displacementBias = 0; - - this.alphaMap = null; - - this.skinning = false; - this.morphTargets = false; - this.morphNormals = false; - - this.setValues( parameters ); - - } - - MeshMatcapMaterial.prototype = Object.create( Material.prototype ); - MeshMatcapMaterial.prototype.constructor = MeshMatcapMaterial; - - MeshMatcapMaterial.prototype.isMeshMatcapMaterial = true; - - MeshMatcapMaterial.prototype.copy = function ( source ) { - - Material.prototype.copy.call( this, source ); - - this.defines = { 'MATCAP': '' }; - - this.color.copy( source.color ); - - this.matcap = source.matcap; - - this.map = source.map; - - this.bumpMap = source.bumpMap; - this.bumpScale = source.bumpScale; - - this.normalMap = source.normalMap; - this.normalMapType = source.normalMapType; - this.normalScale.copy( source.normalScale ); - - this.displacementMap = source.displacementMap; - this.displacementScale = source.displacementScale; - this.displacementBias = source.displacementBias; - - this.alphaMap = source.alphaMap; - - this.skinning = source.skinning; - this.morphTargets = source.morphTargets; - this.morphNormals = source.morphNormals; - - return this; - - }; - - /** - * parameters = { - * color: , - * opacity: , - * - * linewidth: , - * - * scale: , - * dashSize: , - * gapSize: - * } - */ - - function LineDashedMaterial( parameters ) { - - LineBasicMaterial.call( this ); - - this.type = 'LineDashedMaterial'; - - this.scale = 1; - this.dashSize = 3; - this.gapSize = 1; - - this.setValues( parameters ); - - } - - LineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype ); - LineDashedMaterial.prototype.constructor = LineDashedMaterial; - - LineDashedMaterial.prototype.isLineDashedMaterial = true; - - LineDashedMaterial.prototype.copy = function ( source ) { - - LineBasicMaterial.prototype.copy.call( this, source ); - - this.scale = source.scale; - this.dashSize = source.dashSize; - this.gapSize = source.gapSize; - - return this; - - }; - - var Materials = /*#__PURE__*/Object.freeze({ - __proto__: null, - ShadowMaterial: ShadowMaterial, - SpriteMaterial: SpriteMaterial, - RawShaderMaterial: RawShaderMaterial, - ShaderMaterial: ShaderMaterial, - PointsMaterial: PointsMaterial, - MeshPhysicalMaterial: MeshPhysicalMaterial, - MeshStandardMaterial: MeshStandardMaterial, - MeshPhongMaterial: MeshPhongMaterial, - MeshToonMaterial: MeshToonMaterial, - MeshNormalMaterial: MeshNormalMaterial, - MeshLambertMaterial: MeshLambertMaterial, - MeshDepthMaterial: MeshDepthMaterial, - MeshDistanceMaterial: MeshDistanceMaterial, - MeshBasicMaterial: MeshBasicMaterial, - MeshMatcapMaterial: MeshMatcapMaterial, - LineDashedMaterial: LineDashedMaterial, - LineBasicMaterial: LineBasicMaterial, - Material: Material - }); - - const AnimationUtils = { - - // same as Array.prototype.slice, but also works on typed arrays - arraySlice: function ( array, from, to ) { - - if ( AnimationUtils.isTypedArray( array ) ) { - - // in ios9 array.subarray(from, undefined) will return empty array - // but array.subarray(from) or array.subarray(from, len) is correct - return new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) ); - - } - - return array.slice( from, to ); - - }, - - // converts an array to a specific type - convertArray: function ( array, type, forceClone ) { - - if ( ! array || // let 'undefined' and 'null' pass - ! forceClone && array.constructor === type ) return array; - - if ( typeof type.BYTES_PER_ELEMENT === 'number' ) { - - return new type( array ); // create typed array - - } - - return Array.prototype.slice.call( array ); // create Array - - }, - - isTypedArray: function ( object ) { - - return ArrayBuffer.isView( object ) && - ! ( object instanceof DataView ); - - }, - - // returns an array by which times and values can be sorted - getKeyframeOrder: function ( times ) { - - function compareTime( i, j ) { - - return times[ i ] - times[ j ]; - - } - - const n = times.length; - const result = new Array( n ); - for ( let i = 0; i !== n; ++ i ) result[ i ] = i; - - result.sort( compareTime ); - - return result; - - }, - - // uses the array previously returned by 'getKeyframeOrder' to sort data - sortedArray: function ( values, stride, order ) { - - const nValues = values.length; - const result = new values.constructor( nValues ); - - for ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) { - - const srcOffset = order[ i ] * stride; - - for ( let j = 0; j !== stride; ++ j ) { - - result[ dstOffset ++ ] = values[ srcOffset + j ]; - - } - - } - - return result; - - }, - - // function for parsing AOS keyframe formats - flattenJSON: function ( jsonKeys, times, values, valuePropertyName ) { - - let i = 1, key = jsonKeys[ 0 ]; - - while ( key !== undefined && key[ valuePropertyName ] === undefined ) { - - key = jsonKeys[ i ++ ]; - - } - - if ( key === undefined ) return; // no data - - let value = key[ valuePropertyName ]; - if ( value === undefined ) return; // no data - - if ( Array.isArray( value ) ) { - - do { - - value = key[ valuePropertyName ]; - - if ( value !== undefined ) { - - times.push( key.time ); - values.push.apply( values, value ); // push all elements - - } - - key = jsonKeys[ i ++ ]; - - } while ( key !== undefined ); - - } else if ( value.toArray !== undefined ) { - - // ...assume THREE.Math-ish - - do { - - value = key[ valuePropertyName ]; - - if ( value !== undefined ) { - - times.push( key.time ); - value.toArray( values, values.length ); - - } - - key = jsonKeys[ i ++ ]; - - } while ( key !== undefined ); - - } else { - - // otherwise push as-is - - do { - - value = key[ valuePropertyName ]; - - if ( value !== undefined ) { - - times.push( key.time ); - values.push( value ); - - } - - key = jsonKeys[ i ++ ]; - - } while ( key !== undefined ); - - } - - }, - - subclip: function ( sourceClip, name, startFrame, endFrame, fps = 30 ) { - - const clip = sourceClip.clone(); - - clip.name = name; - - const tracks = []; - - for ( let i = 0; i < clip.tracks.length; ++ i ) { - - const track = clip.tracks[ i ]; - const valueSize = track.getValueSize(); - - const times = []; - const values = []; - - for ( let j = 0; j < track.times.length; ++ j ) { - - const frame = track.times[ j ] * fps; - - if ( frame < startFrame || frame >= endFrame ) continue; - - times.push( track.times[ j ] ); - - for ( let k = 0; k < valueSize; ++ k ) { - - values.push( track.values[ j * valueSize + k ] ); - - } - - } - - if ( times.length === 0 ) continue; - - track.times = AnimationUtils.convertArray( times, track.times.constructor ); - track.values = AnimationUtils.convertArray( values, track.values.constructor ); - - tracks.push( track ); - - } - - clip.tracks = tracks; - - // find minimum .times value across all tracks in the trimmed clip - - let minStartTime = Infinity; - - for ( let i = 0; i < clip.tracks.length; ++ i ) { - - if ( minStartTime > clip.tracks[ i ].times[ 0 ] ) { - - minStartTime = clip.tracks[ i ].times[ 0 ]; - - } - - } - - // shift all tracks such that clip begins at t=0 - - for ( let i = 0; i < clip.tracks.length; ++ i ) { - - clip.tracks[ i ].shift( - 1 * minStartTime ); - - } - - clip.resetDuration(); - - return clip; - - }, - - makeClipAdditive: function ( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) { - - if ( fps <= 0 ) fps = 30; - - const numTracks = referenceClip.tracks.length; - const referenceTime = referenceFrame / fps; - - // Make each track's values relative to the values at the reference frame - for ( let i = 0; i < numTracks; ++ i ) { - - const referenceTrack = referenceClip.tracks[ i ]; - const referenceTrackType = referenceTrack.ValueTypeName; - - // Skip this track if it's non-numeric - if ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue; - - // Find the track in the target clip whose name and type matches the reference track - const targetTrack = targetClip.tracks.find( function ( track ) { - - return track.name === referenceTrack.name - && track.ValueTypeName === referenceTrackType; - - } ); - - if ( targetTrack === undefined ) continue; - - let referenceOffset = 0; - const referenceValueSize = referenceTrack.getValueSize(); - - if ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) { - - referenceOffset = referenceValueSize / 3; - - } - - let targetOffset = 0; - const targetValueSize = targetTrack.getValueSize(); - - if ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) { - - targetOffset = targetValueSize / 3; - - } - - const lastIndex = referenceTrack.times.length - 1; - let referenceValue; - - // Find the value to subtract out of the track - if ( referenceTime <= referenceTrack.times[ 0 ] ) { - - // Reference frame is earlier than the first keyframe, so just use the first keyframe - const startIndex = referenceOffset; - const endIndex = referenceValueSize - referenceOffset; - referenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex ); - - } else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) { - - // Reference frame is after the last keyframe, so just use the last keyframe - const startIndex = lastIndex * referenceValueSize + referenceOffset; - const endIndex = startIndex + referenceValueSize - referenceOffset; - referenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex ); - - } else { - - // Interpolate to the reference value - const interpolant = referenceTrack.createInterpolant(); - const startIndex = referenceOffset; - const endIndex = referenceValueSize - referenceOffset; - interpolant.evaluate( referenceTime ); - referenceValue = AnimationUtils.arraySlice( interpolant.resultBuffer, startIndex, endIndex ); - - } - - // Conjugate the quaternion - if ( referenceTrackType === 'quaternion' ) { - - const referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate(); - referenceQuat.toArray( referenceValue ); - - } - - // Subtract the reference value from all of the track values - - const numTimes = targetTrack.times.length; - for ( let j = 0; j < numTimes; ++ j ) { - - const valueStart = j * targetValueSize + targetOffset; - - if ( referenceTrackType === 'quaternion' ) { - - // Multiply the conjugate for quaternion track types - Quaternion.multiplyQuaternionsFlat( - targetTrack.values, - valueStart, - referenceValue, - 0, - targetTrack.values, - valueStart - ); - - } else { - - const valueEnd = targetValueSize - targetOffset * 2; - - // Subtract each value for all other numeric track types - for ( let k = 0; k < valueEnd; ++ k ) { - - targetTrack.values[ valueStart + k ] -= referenceValue[ k ]; - - } - - } - - } - - } - - targetClip.blendMode = AdditiveAnimationBlendMode; - - return targetClip; - - } - - }; - - /** - * Abstract base class of interpolants over parametric samples. - * - * The parameter domain is one dimensional, typically the time or a path - * along a curve defined by the data. - * - * The sample values can have any dimensionality and derived classes may - * apply special interpretations to the data. - * - * This class provides the interval seek in a Template Method, deferring - * the actual interpolation to derived classes. - * - * Time complexity is O(1) for linear access crossing at most two points - * and O(log N) for random access, where N is the number of positions. - * - * References: - * - * http://www.oodesign.com/template-method-pattern.html - * - */ - - function Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { - - this.parameterPositions = parameterPositions; - this._cachedIndex = 0; - - this.resultBuffer = resultBuffer !== undefined ? - resultBuffer : new sampleValues.constructor( sampleSize ); - this.sampleValues = sampleValues; - this.valueSize = sampleSize; - - } - - Object.assign( Interpolant.prototype, { - - evaluate: function ( t ) { - - const pp = this.parameterPositions; - let i1 = this._cachedIndex, - t1 = pp[ i1 ], - t0 = pp[ i1 - 1 ]; - - validate_interval: { - - seek: { - - let right; - - linear_scan: { - - //- See http://jsperf.com/comparison-to-undefined/3 - //- slower code: - //- - //- if ( t >= t1 || t1 === undefined ) { - forward_scan: if ( ! ( t < t1 ) ) { - - for ( let giveUpAt = i1 + 2; ; ) { - - if ( t1 === undefined ) { - - if ( t < t0 ) break forward_scan; - - // after end - - i1 = pp.length; - this._cachedIndex = i1; - return this.afterEnd_( i1 - 1, t, t0 ); - - } - - if ( i1 === giveUpAt ) break; // this loop - - t0 = t1; - t1 = pp[ ++ i1 ]; - - if ( t < t1 ) { - - // we have arrived at the sought interval - break seek; - - } - - } - - // prepare binary search on the right side of the index - right = pp.length; - break linear_scan; - - } - - //- slower code: - //- if ( t < t0 || t0 === undefined ) { - if ( ! ( t >= t0 ) ) { - - // looping? - - const t1global = pp[ 1 ]; - - if ( t < t1global ) { - - i1 = 2; // + 1, using the scan for the details - t0 = t1global; - - } - - // linear reverse scan - - for ( let giveUpAt = i1 - 2; ; ) { - - if ( t0 === undefined ) { - - // before start - - this._cachedIndex = 0; - return this.beforeStart_( 0, t, t1 ); - - } - - if ( i1 === giveUpAt ) break; // this loop - - t1 = t0; - t0 = pp[ -- i1 - 1 ]; - - if ( t >= t0 ) { - - // we have arrived at the sought interval - break seek; - - } - - } - - // prepare binary search on the left side of the index - right = i1; - i1 = 0; - break linear_scan; - - } - - // the interval is valid - - break validate_interval; - - } // linear scan - - // binary search - - while ( i1 < right ) { - - const mid = ( i1 + right ) >>> 1; - - if ( t < pp[ mid ] ) { - - right = mid; - - } else { - - i1 = mid + 1; - - } - - } - - t1 = pp[ i1 ]; - t0 = pp[ i1 - 1 ]; - - // check boundary cases, again - - if ( t0 === undefined ) { - - this._cachedIndex = 0; - return this.beforeStart_( 0, t, t1 ); - - } - - if ( t1 === undefined ) { - - i1 = pp.length; - this._cachedIndex = i1; - return this.afterEnd_( i1 - 1, t0, t ); - - } - - } // seek - - this._cachedIndex = i1; - - this.intervalChanged_( i1, t0, t1 ); - - } // validate_interval - - return this.interpolate_( i1, t0, t, t1 ); - - }, - - settings: null, // optional, subclass-specific settings structure - // Note: The indirection allows central control of many interpolants. - - // --- Protected interface - - DefaultSettings_: {}, - - getSettings_: function () { - - return this.settings || this.DefaultSettings_; - - }, - - copySampleValue_: function ( index ) { - - // copies a sample value to the result buffer - - const result = this.resultBuffer, - values = this.sampleValues, - stride = this.valueSize, - offset = index * stride; - - for ( let i = 0; i !== stride; ++ i ) { - - result[ i ] = values[ offset + i ]; - - } - - return result; - - }, - - // Template methods for derived classes: - - interpolate_: function ( /* i1, t0, t, t1 */ ) { - - throw new Error( 'call to abstract method' ); - // implementations shall return this.resultBuffer - - }, - - intervalChanged_: function ( /* i1, t0, t1 */ ) { - - // empty - - } - - } ); - - // DECLARE ALIAS AFTER assign prototype - Object.assign( Interpolant.prototype, { - - //( 0, t, t0 ), returns this.resultBuffer - beforeStart_: Interpolant.prototype.copySampleValue_, - - //( N-1, tN-1, t ), returns this.resultBuffer - afterEnd_: Interpolant.prototype.copySampleValue_, - - } ); - - /** - * Fast and simple cubic spline interpolant. - * - * It was derived from a Hermitian construction setting the first derivative - * at each sample position to the linear slope between neighboring positions - * over their parameter interval. - */ - - function CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { - - Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); - - this._weightPrev = - 0; - this._offsetPrev = - 0; - this._weightNext = - 0; - this._offsetNext = - 0; - - } - - CubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { - - constructor: CubicInterpolant, - - DefaultSettings_: { - - endingStart: ZeroCurvatureEnding, - endingEnd: ZeroCurvatureEnding - - }, - - intervalChanged_: function ( i1, t0, t1 ) { - - const pp = this.parameterPositions; - let iPrev = i1 - 2, - iNext = i1 + 1, - - tPrev = pp[ iPrev ], - tNext = pp[ iNext ]; - - if ( tPrev === undefined ) { - - switch ( this.getSettings_().endingStart ) { - - case ZeroSlopeEnding: - - // f'(t0) = 0 - iPrev = i1; - tPrev = 2 * t0 - t1; - - break; - - case WrapAroundEnding: - - // use the other end of the curve - iPrev = pp.length - 2; - tPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ]; - - break; - - default: // ZeroCurvatureEnding - - // f''(t0) = 0 a.k.a. Natural Spline - iPrev = i1; - tPrev = t1; - - } - - } - - if ( tNext === undefined ) { - - switch ( this.getSettings_().endingEnd ) { - - case ZeroSlopeEnding: - - // f'(tN) = 0 - iNext = i1; - tNext = 2 * t1 - t0; - - break; - - case WrapAroundEnding: - - // use the other end of the curve - iNext = 1; - tNext = t1 + pp[ 1 ] - pp[ 0 ]; - - break; - - default: // ZeroCurvatureEnding - - // f''(tN) = 0, a.k.a. Natural Spline - iNext = i1 - 1; - tNext = t0; - - } - - } - - const halfDt = ( t1 - t0 ) * 0.5, - stride = this.valueSize; - - this._weightPrev = halfDt / ( t0 - tPrev ); - this._weightNext = halfDt / ( tNext - t1 ); - this._offsetPrev = iPrev * stride; - this._offsetNext = iNext * stride; - - }, - - interpolate_: function ( i1, t0, t, t1 ) { - - const result = this.resultBuffer, - values = this.sampleValues, - stride = this.valueSize, - - o1 = i1 * stride, o0 = o1 - stride, - oP = this._offsetPrev, oN = this._offsetNext, - wP = this._weightPrev, wN = this._weightNext, - - p = ( t - t0 ) / ( t1 - t0 ), - pp = p * p, - ppp = pp * p; - - // evaluate polynomials - - const sP = - wP * ppp + 2 * wP * pp - wP * p; - const s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1; - const s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p; - const sN = wN * ppp - wN * pp; - - // combine data linearly - - for ( let i = 0; i !== stride; ++ i ) { - - result[ i ] = - sP * values[ oP + i ] + - s0 * values[ o0 + i ] + - s1 * values[ o1 + i ] + - sN * values[ oN + i ]; - - } - - return result; - - } - - } ); - - function LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { - - Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); - - } - - LinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { - - constructor: LinearInterpolant, - - interpolate_: function ( i1, t0, t, t1 ) { - - const result = this.resultBuffer, - values = this.sampleValues, - stride = this.valueSize, - - offset1 = i1 * stride, - offset0 = offset1 - stride, - - weight1 = ( t - t0 ) / ( t1 - t0 ), - weight0 = 1 - weight1; - - for ( let i = 0; i !== stride; ++ i ) { - - result[ i ] = - values[ offset0 + i ] * weight0 + - values[ offset1 + i ] * weight1; - - } - - return result; - - } - - } ); - - /** - * - * Interpolant that evaluates to the sample value at the position preceeding - * the parameter. - */ - - function DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { - - Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); - - } - - DiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { - - constructor: DiscreteInterpolant, - - interpolate_: function ( i1 /*, t0, t, t1 */ ) { - - return this.copySampleValue_( i1 - 1 ); - - } - - } ); - - function KeyframeTrack( name, times, values, interpolation ) { - - if ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' ); - if ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name ); - - this.name = name; - - this.times = AnimationUtils.convertArray( times, this.TimeBufferType ); - this.values = AnimationUtils.convertArray( values, this.ValueBufferType ); - - this.setInterpolation( interpolation || this.DefaultInterpolation ); - - } - - // Static methods - - Object.assign( KeyframeTrack, { - - // Serialization (in static context, because of constructor invocation - // and automatic invocation of .toJSON): - - toJSON: function ( track ) { - - const trackType = track.constructor; - - let json; - - // derived classes can define a static toJSON method - if ( trackType.toJSON !== undefined ) { - - json = trackType.toJSON( track ); - - } else { - - // by default, we assume the data can be serialized as-is - json = { - - 'name': track.name, - 'times': AnimationUtils.convertArray( track.times, Array ), - 'values': AnimationUtils.convertArray( track.values, Array ) - - }; - - const interpolation = track.getInterpolation(); - - if ( interpolation !== track.DefaultInterpolation ) { - - json.interpolation = interpolation; - - } - - } - - json.type = track.ValueTypeName; // mandatory - - return json; - - } - - } ); - - Object.assign( KeyframeTrack.prototype, { - - constructor: KeyframeTrack, - - TimeBufferType: Float32Array, - - ValueBufferType: Float32Array, - - DefaultInterpolation: InterpolateLinear, - - InterpolantFactoryMethodDiscrete: function ( result ) { - - return new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result ); - - }, - - InterpolantFactoryMethodLinear: function ( result ) { - - return new LinearInterpolant( this.times, this.values, this.getValueSize(), result ); - - }, - - InterpolantFactoryMethodSmooth: function ( result ) { - - return new CubicInterpolant( this.times, this.values, this.getValueSize(), result ); - - }, - - setInterpolation: function ( interpolation ) { - - let factoryMethod; - - switch ( interpolation ) { - - case InterpolateDiscrete: - - factoryMethod = this.InterpolantFactoryMethodDiscrete; - - break; - - case InterpolateLinear: - - factoryMethod = this.InterpolantFactoryMethodLinear; - - break; - - case InterpolateSmooth: - - factoryMethod = this.InterpolantFactoryMethodSmooth; - - break; - - } - - if ( factoryMethod === undefined ) { - - const message = "unsupported interpolation for " + - this.ValueTypeName + " keyframe track named " + this.name; - - if ( this.createInterpolant === undefined ) { - - // fall back to default, unless the default itself is messed up - if ( interpolation !== this.DefaultInterpolation ) { - - this.setInterpolation( this.DefaultInterpolation ); - - } else { - - throw new Error( message ); // fatal, in this case - - } - - } - - console.warn( 'THREE.KeyframeTrack:', message ); - return this; - - } - - this.createInterpolant = factoryMethod; - - return this; - - }, - - getInterpolation: function () { - - switch ( this.createInterpolant ) { - - case this.InterpolantFactoryMethodDiscrete: - - return InterpolateDiscrete; - - case this.InterpolantFactoryMethodLinear: - - return InterpolateLinear; - - case this.InterpolantFactoryMethodSmooth: - - return InterpolateSmooth; - - } - - }, - - getValueSize: function () { - - return this.values.length / this.times.length; - - }, - - // move all keyframes either forwards or backwards in time - shift: function ( timeOffset ) { - - if ( timeOffset !== 0.0 ) { - - const times = this.times; - - for ( let i = 0, n = times.length; i !== n; ++ i ) { - - times[ i ] += timeOffset; - - } - - } - - return this; - - }, - - // scale all keyframe times by a factor (useful for frame <-> seconds conversions) - scale: function ( timeScale ) { - - if ( timeScale !== 1.0 ) { - - const times = this.times; - - for ( let i = 0, n = times.length; i !== n; ++ i ) { - - times[ i ] *= timeScale; - - } - - } - - return this; - - }, - - // removes keyframes before and after animation without changing any values within the range [startTime, endTime]. - // IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values - trim: function ( startTime, endTime ) { - - const times = this.times, - nKeys = times.length; - - let from = 0, - to = nKeys - 1; - - while ( from !== nKeys && times[ from ] < startTime ) { - - ++ from; - - } - - while ( to !== - 1 && times[ to ] > endTime ) { - - -- to; - - } - - ++ to; // inclusive -> exclusive bound - - if ( from !== 0 || to !== nKeys ) { - - // empty tracks are forbidden, so keep at least one keyframe - if ( from >= to ) { - - to = Math.max( to, 1 ); - from = to - 1; - - } - - const stride = this.getValueSize(); - this.times = AnimationUtils.arraySlice( times, from, to ); - this.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride ); - - } - - return this; - - }, - - // ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable - validate: function () { - - let valid = true; - - const valueSize = this.getValueSize(); - if ( valueSize - Math.floor( valueSize ) !== 0 ) { - - console.error( 'THREE.KeyframeTrack: Invalid value size in track.', this ); - valid = false; - - } - - const times = this.times, - values = this.values, - - nKeys = times.length; - - if ( nKeys === 0 ) { - - console.error( 'THREE.KeyframeTrack: Track is empty.', this ); - valid = false; - - } - - let prevTime = null; - - for ( let i = 0; i !== nKeys; i ++ ) { - - const currTime = times[ i ]; - - if ( typeof currTime === 'number' && isNaN( currTime ) ) { - - console.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime ); - valid = false; - break; - - } - - if ( prevTime !== null && prevTime > currTime ) { - - console.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime ); - valid = false; - break; - - } - - prevTime = currTime; - - } - - if ( values !== undefined ) { - - if ( AnimationUtils.isTypedArray( values ) ) { - - for ( let i = 0, n = values.length; i !== n; ++ i ) { - - const value = values[ i ]; - - if ( isNaN( value ) ) { - - console.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value ); - valid = false; - break; - - } - - } - - } - - } - - return valid; - - }, - - // removes equivalent sequential keys as common in morph target sequences - // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0) - optimize: function () { - - // times or values may be shared with other tracks, so overwriting is unsafe - const times = AnimationUtils.arraySlice( this.times ), - values = AnimationUtils.arraySlice( this.values ), - stride = this.getValueSize(), - - smoothInterpolation = this.getInterpolation() === InterpolateSmooth, - - lastIndex = times.length - 1; - - let writeIndex = 1; - - for ( let i = 1; i < lastIndex; ++ i ) { - - let keep = false; - - const time = times[ i ]; - const timeNext = times[ i + 1 ]; - - // remove adjacent keyframes scheduled at the same time - - if ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) { - - if ( ! smoothInterpolation ) { - - // remove unnecessary keyframes same as their neighbors - - const offset = i * stride, - offsetP = offset - stride, - offsetN = offset + stride; - - for ( let j = 0; j !== stride; ++ j ) { - - const value = values[ offset + j ]; - - if ( value !== values[ offsetP + j ] || - value !== values[ offsetN + j ] ) { - - keep = true; - break; - - } - - } - - } else { - - keep = true; - - } - - } - - // in-place compaction - - if ( keep ) { - - if ( i !== writeIndex ) { - - times[ writeIndex ] = times[ i ]; - - const readOffset = i * stride, - writeOffset = writeIndex * stride; - - for ( let j = 0; j !== stride; ++ j ) { - - values[ writeOffset + j ] = values[ readOffset + j ]; - - } - - } - - ++ writeIndex; - - } - - } - - // flush last keyframe (compaction looks ahead) - - if ( lastIndex > 0 ) { - - times[ writeIndex ] = times[ lastIndex ]; - - for ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) { - - values[ writeOffset + j ] = values[ readOffset + j ]; - - } - - ++ writeIndex; - - } - - if ( writeIndex !== times.length ) { - - this.times = AnimationUtils.arraySlice( times, 0, writeIndex ); - this.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride ); - - } else { - - this.times = times; - this.values = values; - - } - - return this; - - }, - - clone: function () { - - const times = AnimationUtils.arraySlice( this.times, 0 ); - const values = AnimationUtils.arraySlice( this.values, 0 ); - - const TypedKeyframeTrack = this.constructor; - const track = new TypedKeyframeTrack( this.name, times, values ); - - // Interpolant argument to constructor is not saved, so copy the factory method directly. - track.createInterpolant = this.createInterpolant; - - return track; - - } - - } ); - - /** - * A Track of Boolean keyframe values. - */ - - function BooleanKeyframeTrack( name, times, values ) { - - KeyframeTrack.call( this, name, times, values ); - - } - - BooleanKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { - - constructor: BooleanKeyframeTrack, - - ValueTypeName: 'bool', - ValueBufferType: Array, - - DefaultInterpolation: InterpolateDiscrete, - - InterpolantFactoryMethodLinear: undefined, - InterpolantFactoryMethodSmooth: undefined - - // Note: Actually this track could have a optimized / compressed - // representation of a single value and a custom interpolant that - // computes "firstValue ^ isOdd( index )". - - } ); - - /** - * A Track of keyframe values that represent color. - */ - - function ColorKeyframeTrack( name, times, values, interpolation ) { - - KeyframeTrack.call( this, name, times, values, interpolation ); - - } - - ColorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { - - constructor: ColorKeyframeTrack, - - ValueTypeName: 'color' - - // ValueBufferType is inherited - - // DefaultInterpolation is inherited - - // Note: Very basic implementation and nothing special yet. - // However, this is the place for color space parameterization. - - } ); - - /** - * A Track of numeric keyframe values. - */ - - function NumberKeyframeTrack( name, times, values, interpolation ) { - - KeyframeTrack.call( this, name, times, values, interpolation ); - - } - - NumberKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { - - constructor: NumberKeyframeTrack, - - ValueTypeName: 'number' - - // ValueBufferType is inherited - - // DefaultInterpolation is inherited - - } ); - - /** - * Spherical linear unit quaternion interpolant. - */ - - function QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { - - Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); - - } - - QuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { - - constructor: QuaternionLinearInterpolant, - - interpolate_: function ( i1, t0, t, t1 ) { - - const result = this.resultBuffer, - values = this.sampleValues, - stride = this.valueSize, - - alpha = ( t - t0 ) / ( t1 - t0 ); - - let offset = i1 * stride; - - for ( let end = offset + stride; offset !== end; offset += 4 ) { - - Quaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha ); - - } - - return result; - - } - - } ); - - /** - * A Track of quaternion keyframe values. - */ - - function QuaternionKeyframeTrack( name, times, values, interpolation ) { - - KeyframeTrack.call( this, name, times, values, interpolation ); - - } - - QuaternionKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { - - constructor: QuaternionKeyframeTrack, - - ValueTypeName: 'quaternion', - - // ValueBufferType is inherited - - DefaultInterpolation: InterpolateLinear, - - InterpolantFactoryMethodLinear: function ( result ) { - - return new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result ); - - }, - - InterpolantFactoryMethodSmooth: undefined // not yet implemented - - } ); - - /** - * A Track that interpolates Strings - */ - - function StringKeyframeTrack( name, times, values, interpolation ) { - - KeyframeTrack.call( this, name, times, values, interpolation ); - - } - - StringKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { - - constructor: StringKeyframeTrack, - - ValueTypeName: 'string', - ValueBufferType: Array, - - DefaultInterpolation: InterpolateDiscrete, - - InterpolantFactoryMethodLinear: undefined, - - InterpolantFactoryMethodSmooth: undefined - - } ); - - /** - * A Track of vectored keyframe values. - */ - - function VectorKeyframeTrack( name, times, values, interpolation ) { - - KeyframeTrack.call( this, name, times, values, interpolation ); - - } - - VectorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { - - constructor: VectorKeyframeTrack, - - ValueTypeName: 'vector' - - // ValueBufferType is inherited - - // DefaultInterpolation is inherited - - } ); - - function AnimationClip( name, duration, tracks, blendMode ) { - - this.name = name; - this.tracks = tracks; - this.duration = ( duration !== undefined ) ? duration : - 1; - this.blendMode = ( blendMode !== undefined ) ? blendMode : NormalAnimationBlendMode; - - this.uuid = MathUtils.generateUUID(); - - // this means it should figure out its duration by scanning the tracks - if ( this.duration < 0 ) { - - this.resetDuration(); - - } - - } - - function getTrackTypeForValueTypeName( typeName ) { - - switch ( typeName.toLowerCase() ) { - - case 'scalar': - case 'double': - case 'float': - case 'number': - case 'integer': - - return NumberKeyframeTrack; - - case 'vector': - case 'vector2': - case 'vector3': - case 'vector4': - - return VectorKeyframeTrack; - - case 'color': - - return ColorKeyframeTrack; - - case 'quaternion': - - return QuaternionKeyframeTrack; - - case 'bool': - case 'boolean': - - return BooleanKeyframeTrack; - - case 'string': - - return StringKeyframeTrack; - - } - - throw new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName ); - - } - - function parseKeyframeTrack( json ) { - - if ( json.type === undefined ) { - - throw new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' ); - - } - - const trackType = getTrackTypeForValueTypeName( json.type ); - - if ( json.times === undefined ) { - - const times = [], values = []; - - AnimationUtils.flattenJSON( json.keys, times, values, 'value' ); - - json.times = times; - json.values = values; - - } - - // derived classes can define a static parse method - if ( trackType.parse !== undefined ) { - - return trackType.parse( json ); - - } else { - - // by default, we assume a constructor compatible with the base - return new trackType( json.name, json.times, json.values, json.interpolation ); - - } - - } - - Object.assign( AnimationClip, { - - parse: function ( json ) { - - const tracks = [], - jsonTracks = json.tracks, - frameTime = 1.0 / ( json.fps || 1.0 ); - - for ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) { - - tracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) ); - - } - - const clip = new AnimationClip( json.name, json.duration, tracks, json.blendMode ); - clip.uuid = json.uuid; - - return clip; - - }, - - toJSON: function ( clip ) { - - const tracks = [], - clipTracks = clip.tracks; - - const json = { - - 'name': clip.name, - 'duration': clip.duration, - 'tracks': tracks, - 'uuid': clip.uuid, - 'blendMode': clip.blendMode - - }; - - for ( let i = 0, n = clipTracks.length; i !== n; ++ i ) { - - tracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) ); - - } - - return json; - - }, - - CreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) { - - const numMorphTargets = morphTargetSequence.length; - const tracks = []; - - for ( let i = 0; i < numMorphTargets; i ++ ) { - - let times = []; - let values = []; - - times.push( - ( i + numMorphTargets - 1 ) % numMorphTargets, - i, - ( i + 1 ) % numMorphTargets ); - - values.push( 0, 1, 0 ); - - const order = AnimationUtils.getKeyframeOrder( times ); - times = AnimationUtils.sortedArray( times, 1, order ); - values = AnimationUtils.sortedArray( values, 1, order ); - - // if there is a key at the first frame, duplicate it as the - // last frame as well for perfect loop. - if ( ! noLoop && times[ 0 ] === 0 ) { - - times.push( numMorphTargets ); - values.push( values[ 0 ] ); - - } - - tracks.push( - new NumberKeyframeTrack( - '.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']', - times, values - ).scale( 1.0 / fps ) ); - - } - - return new AnimationClip( name, - 1, tracks ); - - }, - - findByName: function ( objectOrClipArray, name ) { - - let clipArray = objectOrClipArray; - - if ( ! Array.isArray( objectOrClipArray ) ) { - - const o = objectOrClipArray; - clipArray = o.geometry && o.geometry.animations || o.animations; - - } - - for ( let i = 0; i < clipArray.length; i ++ ) { - - if ( clipArray[ i ].name === name ) { - - return clipArray[ i ]; - - } - - } - - return null; - - }, - - CreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) { - - const animationToMorphTargets = {}; - - // tested with https://regex101.com/ on trick sequences - // such flamingo_flyA_003, flamingo_run1_003, crdeath0059 - const pattern = /^([\w-]*?)([\d]+)$/; - - // sort morph target names into animation groups based - // patterns like Walk_001, Walk_002, Run_001, Run_002 - for ( let i = 0, il = morphTargets.length; i < il; i ++ ) { - - const morphTarget = morphTargets[ i ]; - const parts = morphTarget.name.match( pattern ); - - if ( parts && parts.length > 1 ) { - - const name = parts[ 1 ]; - - let animationMorphTargets = animationToMorphTargets[ name ]; - - if ( ! animationMorphTargets ) { - - animationToMorphTargets[ name ] = animationMorphTargets = []; - - } - - animationMorphTargets.push( morphTarget ); - - } - - } - - const clips = []; - - for ( const name in animationToMorphTargets ) { - - clips.push( AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) ); - - } - - return clips; - - }, - - // parse the animation.hierarchy format - parseAnimation: function ( animation, bones ) { - - if ( ! animation ) { - - console.error( 'THREE.AnimationClip: No animation in JSONLoader data.' ); - return null; - - } - - const addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) { - - // only return track if there are actually keys. - if ( animationKeys.length !== 0 ) { - - const times = []; - const values = []; - - AnimationUtils.flattenJSON( animationKeys, times, values, propertyName ); - - // empty keys are filtered out, so check again - if ( times.length !== 0 ) { - - destTracks.push( new trackType( trackName, times, values ) ); - - } - - } - - }; - - const tracks = []; - - const clipName = animation.name || 'default'; - const fps = animation.fps || 30; - const blendMode = animation.blendMode; - - // automatic length determination in AnimationClip. - let duration = animation.length || - 1; - - const hierarchyTracks = animation.hierarchy || []; - - for ( let h = 0; h < hierarchyTracks.length; h ++ ) { - - const animationKeys = hierarchyTracks[ h ].keys; - - // skip empty tracks - if ( ! animationKeys || animationKeys.length === 0 ) continue; - - // process morph targets - if ( animationKeys[ 0 ].morphTargets ) { - - // figure out all morph targets used in this track - const morphTargetNames = {}; - - let k; - - for ( k = 0; k < animationKeys.length; k ++ ) { - - if ( animationKeys[ k ].morphTargets ) { - - for ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) { - - morphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1; - - } - - } - - } - - // create a track for each morph target with all zero - // morphTargetInfluences except for the keys in which - // the morphTarget is named. - for ( const morphTargetName in morphTargetNames ) { - - const times = []; - const values = []; - - for ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) { - - const animationKey = animationKeys[ k ]; - - times.push( animationKey.time ); - values.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 ); - - } - - tracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) ); - - } - - duration = morphTargetNames.length * ( fps || 1.0 ); - - } else { - - // ...assume skeletal animation - - const boneName = '.bones[' + bones[ h ].name + ']'; - - addNonemptyTrack( - VectorKeyframeTrack, boneName + '.position', - animationKeys, 'pos', tracks ); - - addNonemptyTrack( - QuaternionKeyframeTrack, boneName + '.quaternion', - animationKeys, 'rot', tracks ); - - addNonemptyTrack( - VectorKeyframeTrack, boneName + '.scale', - animationKeys, 'scl', tracks ); - - } - - } - - if ( tracks.length === 0 ) { - - return null; - - } - - const clip = new AnimationClip( clipName, duration, tracks, blendMode ); - - return clip; - - } - - } ); - - Object.assign( AnimationClip.prototype, { - - resetDuration: function () { - - const tracks = this.tracks; - let duration = 0; - - for ( let i = 0, n = tracks.length; i !== n; ++ i ) { - - const track = this.tracks[ i ]; - - duration = Math.max( duration, track.times[ track.times.length - 1 ] ); - - } - - this.duration = duration; - - return this; - - }, - - trim: function () { - - for ( let i = 0; i < this.tracks.length; i ++ ) { - - this.tracks[ i ].trim( 0, this.duration ); - - } - - return this; - - }, - - validate: function () { - - let valid = true; - - for ( let i = 0; i < this.tracks.length; i ++ ) { - - valid = valid && this.tracks[ i ].validate(); - - } - - return valid; - - }, - - optimize: function () { - - for ( let i = 0; i < this.tracks.length; i ++ ) { - - this.tracks[ i ].optimize(); - - } - - return this; - - }, - - clone: function () { - - const tracks = []; - - for ( let i = 0; i < this.tracks.length; i ++ ) { - - tracks.push( this.tracks[ i ].clone() ); - - } - - return new AnimationClip( this.name, this.duration, tracks, this.blendMode ); - - }, - - toJSON: function () { - - return AnimationClip.toJSON( this ); - - } - - } ); - - const Cache = { - - enabled: false, - - files: {}, - - add: function ( key, file ) { - - if ( this.enabled === false ) return; - - // console.log( 'THREE.Cache', 'Adding key:', key ); - - this.files[ key ] = file; - - }, - - get: function ( key ) { - - if ( this.enabled === false ) return; - - // console.log( 'THREE.Cache', 'Checking key:', key ); - - return this.files[ key ]; - - }, - - remove: function ( key ) { - - delete this.files[ key ]; - - }, - - clear: function () { - - this.files = {}; - - } - - }; - - function LoadingManager( onLoad, onProgress, onError ) { - - const scope = this; - - let isLoading = false; - let itemsLoaded = 0; - let itemsTotal = 0; - let urlModifier = undefined; - const handlers = []; - - // Refer to #5689 for the reason why we don't set .onStart - // in the constructor - - this.onStart = undefined; - this.onLoad = onLoad; - this.onProgress = onProgress; - this.onError = onError; - - this.itemStart = function ( url ) { - - itemsTotal ++; - - if ( isLoading === false ) { - - if ( scope.onStart !== undefined ) { - - scope.onStart( url, itemsLoaded, itemsTotal ); - - } - - } - - isLoading = true; - - }; - - this.itemEnd = function ( url ) { - - itemsLoaded ++; - - if ( scope.onProgress !== undefined ) { - - scope.onProgress( url, itemsLoaded, itemsTotal ); - - } - - if ( itemsLoaded === itemsTotal ) { - - isLoading = false; - - if ( scope.onLoad !== undefined ) { - - scope.onLoad(); - - } - - } - - }; - - this.itemError = function ( url ) { - - if ( scope.onError !== undefined ) { - - scope.onError( url ); - - } - - }; - - this.resolveURL = function ( url ) { - - if ( urlModifier ) { - - return urlModifier( url ); - - } - - return url; - - }; - - this.setURLModifier = function ( transform ) { - - urlModifier = transform; - - return this; - - }; - - this.addHandler = function ( regex, loader ) { - - handlers.push( regex, loader ); - - return this; - - }; - - this.removeHandler = function ( regex ) { - - const index = handlers.indexOf( regex ); - - if ( index !== - 1 ) { - - handlers.splice( index, 2 ); - - } - - return this; - - }; - - this.getHandler = function ( file ) { - - for ( let i = 0, l = handlers.length; i < l; i += 2 ) { - - const regex = handlers[ i ]; - const loader = handlers[ i + 1 ]; - - if ( regex.global ) regex.lastIndex = 0; // see #17920 - - if ( regex.test( file ) ) { - - return loader; - - } - - } - - return null; - - }; - - } - - const DefaultLoadingManager = new LoadingManager(); - - function Loader( manager ) { - - this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; - - this.crossOrigin = 'anonymous'; - this.withCredentials = false; - this.path = ''; - this.resourcePath = ''; - this.requestHeader = {}; - - } - - Object.assign( Loader.prototype, { - - load: function ( /* url, onLoad, onProgress, onError */ ) {}, - - loadAsync: function ( url, onProgress ) { - - const scope = this; - - return new Promise( function ( resolve, reject ) { - - scope.load( url, resolve, onProgress, reject ); - - } ); - - }, - - parse: function ( /* data */ ) {}, - - setCrossOrigin: function ( crossOrigin ) { - - this.crossOrigin = crossOrigin; - return this; - - }, - - setWithCredentials: function ( value ) { - - this.withCredentials = value; - return this; - - }, - - setPath: function ( path ) { - - this.path = path; - return this; - - }, - - setResourcePath: function ( resourcePath ) { - - this.resourcePath = resourcePath; - return this; - - }, - - setRequestHeader: function ( requestHeader ) { - - this.requestHeader = requestHeader; - return this; - - } - - } ); - - const loading = {}; - - function FileLoader( manager ) { - - Loader.call( this, manager ); - - } - - FileLoader.prototype = Object.assign( Object.create( Loader.prototype ), { - - constructor: FileLoader, - - load: function ( url, onLoad, onProgress, onError ) { - - if ( url === undefined ) url = ''; - - if ( this.path !== undefined ) url = this.path + url; - - url = this.manager.resolveURL( url ); - - const scope = this; - - const cached = Cache.get( url ); - - if ( cached !== undefined ) { - - scope.manager.itemStart( url ); - - setTimeout( function () { - - if ( onLoad ) onLoad( cached ); - - scope.manager.itemEnd( url ); - - }, 0 ); - - return cached; - - } - - // Check if request is duplicate - - if ( loading[ url ] !== undefined ) { - - loading[ url ].push( { - - onLoad: onLoad, - onProgress: onProgress, - onError: onError - - } ); - - return; - - } - - // Check for data: URI - const dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/; - const dataUriRegexResult = url.match( dataUriRegex ); - let request; - - // Safari can not handle Data URIs through XMLHttpRequest so process manually - if ( dataUriRegexResult ) { - - const mimeType = dataUriRegexResult[ 1 ]; - const isBase64 = !! dataUriRegexResult[ 2 ]; - - let data = dataUriRegexResult[ 3 ]; - data = decodeURIComponent( data ); - - if ( isBase64 ) data = atob( data ); - - try { - - let response; - const responseType = ( this.responseType || '' ).toLowerCase(); - - switch ( responseType ) { - - case 'arraybuffer': - case 'blob': - - const view = new Uint8Array( data.length ); - - for ( let i = 0; i < data.length; i ++ ) { - - view[ i ] = data.charCodeAt( i ); - - } - - if ( responseType === 'blob' ) { - - response = new Blob( [ view.buffer ], { type: mimeType } ); - - } else { - - response = view.buffer; - - } - - break; - - case 'document': - - const parser = new DOMParser(); - response = parser.parseFromString( data, mimeType ); - - break; - - case 'json': - - response = JSON.parse( data ); - - break; - - default: // 'text' or other - - response = data; - - break; - - } - - // Wait for next browser tick like standard XMLHttpRequest event dispatching does - setTimeout( function () { - - if ( onLoad ) onLoad( response ); - - scope.manager.itemEnd( url ); - - }, 0 ); - - } catch ( error ) { - - // Wait for next browser tick like standard XMLHttpRequest event dispatching does - setTimeout( function () { - - if ( onError ) onError( error ); - - scope.manager.itemError( url ); - scope.manager.itemEnd( url ); - - }, 0 ); - - } - - } else { - - // Initialise array for duplicate requests - - loading[ url ] = []; - - loading[ url ].push( { - - onLoad: onLoad, - onProgress: onProgress, - onError: onError - - } ); - - request = new XMLHttpRequest(); - - request.open( 'GET', url, true ); - - request.addEventListener( 'load', function ( event ) { - - const response = this.response; - - const callbacks = loading[ url ]; - - delete loading[ url ]; - - if ( this.status === 200 || this.status === 0 ) { - - // Some browsers return HTTP Status 0 when using non-http protocol - // e.g. 'file://' or 'data://'. Handle as success. - - if ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' ); - - // Add to cache only on HTTP success, so that we do not cache - // error response bodies as proper responses to requests. - Cache.add( url, response ); - - for ( let i = 0, il = callbacks.length; i < il; i ++ ) { - - const callback = callbacks[ i ]; - if ( callback.onLoad ) callback.onLoad( response ); - - } - - scope.manager.itemEnd( url ); - - } else { - - for ( let i = 0, il = callbacks.length; i < il; i ++ ) { - - const callback = callbacks[ i ]; - if ( callback.onError ) callback.onError( event ); - - } - - scope.manager.itemError( url ); - scope.manager.itemEnd( url ); - - } - - }, false ); - - request.addEventListener( 'progress', function ( event ) { - - const callbacks = loading[ url ]; - - for ( let i = 0, il = callbacks.length; i < il; i ++ ) { - - const callback = callbacks[ i ]; - if ( callback.onProgress ) callback.onProgress( event ); - - } - - }, false ); - - request.addEventListener( 'error', function ( event ) { - - const callbacks = loading[ url ]; - - delete loading[ url ]; - - for ( let i = 0, il = callbacks.length; i < il; i ++ ) { - - const callback = callbacks[ i ]; - if ( callback.onError ) callback.onError( event ); - - } - - scope.manager.itemError( url ); - scope.manager.itemEnd( url ); - - }, false ); - - request.addEventListener( 'abort', function ( event ) { - - const callbacks = loading[ url ]; - - delete loading[ url ]; - - for ( let i = 0, il = callbacks.length; i < il; i ++ ) { - - const callback = callbacks[ i ]; - if ( callback.onError ) callback.onError( event ); - - } - - scope.manager.itemError( url ); - scope.manager.itemEnd( url ); - - }, false ); - - if ( this.responseType !== undefined ) request.responseType = this.responseType; - if ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials; - - if ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' ); - - for ( const header in this.requestHeader ) { - - request.setRequestHeader( header, this.requestHeader[ header ] ); - - } - - request.send( null ); - - } - - scope.manager.itemStart( url ); - - return request; - - }, - - setResponseType: function ( value ) { - - this.responseType = value; - return this; - - }, - - setMimeType: function ( value ) { - - this.mimeType = value; - return this; - - } - - } ); - - function AnimationLoader( manager ) { - - Loader.call( this, manager ); - - } - - AnimationLoader.prototype = Object.assign( Object.create( Loader.prototype ), { - - constructor: AnimationLoader, - - load: function ( url, onLoad, onProgress, onError ) { - - const scope = this; - - const loader = new FileLoader( scope.manager ); - loader.setPath( scope.path ); - loader.setRequestHeader( scope.requestHeader ); - loader.setWithCredentials( scope.withCredentials ); - loader.load( url, function ( text ) { - - try { - - onLoad( scope.parse( JSON.parse( text ) ) ); - - } catch ( e ) { - - if ( onError ) { - - onError( e ); - - } else { - - console.error( e ); - - } - - scope.manager.itemError( url ); - - } - - }, onProgress, onError ); - - }, - - parse: function ( json ) { - - const animations = []; - - for ( let i = 0; i < json.length; i ++ ) { - - const clip = AnimationClip.parse( json[ i ] ); - - animations.push( clip ); - - } - - return animations; - - } - - } ); - - /** - * Abstract Base class to block based textures loader (dds, pvr, ...) - * - * Sub classes have to implement the parse() method which will be used in load(). - */ - - function CompressedTextureLoader( manager ) { - - Loader.call( this, manager ); - - } - - CompressedTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { - - constructor: CompressedTextureLoader, - - load: function ( url, onLoad, onProgress, onError ) { - - const scope = this; - - const images = []; - - const texture = new CompressedTexture(); - texture.image = images; - - const loader = new FileLoader( this.manager ); - loader.setPath( this.path ); - loader.setResponseType( 'arraybuffer' ); - loader.setRequestHeader( this.requestHeader ); - loader.setWithCredentials( scope.withCredentials ); - - let loaded = 0; - - function loadTexture( i ) { - - loader.load( url[ i ], function ( buffer ) { - - const texDatas = scope.parse( buffer, true ); - - images[ i ] = { - width: texDatas.width, - height: texDatas.height, - format: texDatas.format, - mipmaps: texDatas.mipmaps - }; - - loaded += 1; - - if ( loaded === 6 ) { - - if ( texDatas.mipmapCount === 1 ) - texture.minFilter = LinearFilter; - - texture.format = texDatas.format; - texture.needsUpdate = true; - - if ( onLoad ) onLoad( texture ); - - } - - }, onProgress, onError ); - - } - - if ( Array.isArray( url ) ) { - - for ( let i = 0, il = url.length; i < il; ++ i ) { - - loadTexture( i ); - - } - - } else { - - // compressed cubemap texture stored in a single DDS file - - loader.load( url, function ( buffer ) { - - const texDatas = scope.parse( buffer, true ); - - if ( texDatas.isCubemap ) { - - const faces = texDatas.mipmaps.length / texDatas.mipmapCount; - - for ( let f = 0; f < faces; f ++ ) { - - images[ f ] = { mipmaps: [] }; - - for ( let i = 0; i < texDatas.mipmapCount; i ++ ) { - - images[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] ); - images[ f ].format = texDatas.format; - images[ f ].width = texDatas.width; - images[ f ].height = texDatas.height; - - } - - } - - } else { - - texture.image.width = texDatas.width; - texture.image.height = texDatas.height; - texture.mipmaps = texDatas.mipmaps; - - } - - if ( texDatas.mipmapCount === 1 ) { - - texture.minFilter = LinearFilter; - - } - - texture.format = texDatas.format; - texture.needsUpdate = true; - - if ( onLoad ) onLoad( texture ); - - }, onProgress, onError ); - - } - - return texture; - - } - - } ); - - function ImageLoader( manager ) { - - Loader.call( this, manager ); - - } - - ImageLoader.prototype = Object.assign( Object.create( Loader.prototype ), { - - constructor: ImageLoader, - - load: function ( url, onLoad, onProgress, onError ) { - - if ( this.path !== undefined ) url = this.path + url; - - url = this.manager.resolveURL( url ); - - const scope = this; - - const cached = Cache.get( url ); - - if ( cached !== undefined ) { - - scope.manager.itemStart( url ); - - setTimeout( function () { - - if ( onLoad ) onLoad( cached ); - - scope.manager.itemEnd( url ); - - }, 0 ); - - return cached; - - } - - const image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' ); - - function onImageLoad() { - - image.removeEventListener( 'load', onImageLoad, false ); - image.removeEventListener( 'error', onImageError, false ); - - Cache.add( url, this ); - - if ( onLoad ) onLoad( this ); - - scope.manager.itemEnd( url ); - - } - - function onImageError( event ) { - - image.removeEventListener( 'load', onImageLoad, false ); - image.removeEventListener( 'error', onImageError, false ); - - if ( onError ) onError( event ); - - scope.manager.itemError( url ); - scope.manager.itemEnd( url ); - - } - - image.addEventListener( 'load', onImageLoad, false ); - image.addEventListener( 'error', onImageError, false ); - - if ( url.substr( 0, 5 ) !== 'data:' ) { - - if ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin; - - } - - scope.manager.itemStart( url ); - - image.src = url; - - return image; - - } - - } ); - - function CubeTextureLoader( manager ) { - - Loader.call( this, manager ); - - } - - CubeTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { - - constructor: CubeTextureLoader, - - load: function ( urls, onLoad, onProgress, onError ) { - - const texture = new CubeTexture(); - - const loader = new ImageLoader( this.manager ); - loader.setCrossOrigin( this.crossOrigin ); - loader.setPath( this.path ); - - let loaded = 0; - - function loadTexture( i ) { - - loader.load( urls[ i ], function ( image ) { - - texture.images[ i ] = image; - - loaded ++; - - if ( loaded === 6 ) { - - texture.needsUpdate = true; - - if ( onLoad ) onLoad( texture ); - - } - - }, undefined, onError ); - - } - - for ( let i = 0; i < urls.length; ++ i ) { - - loadTexture( i ); - - } - - return texture; - - } - - } ); - - /** - * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...) - * - * Sub classes have to implement the parse() method which will be used in load(). - */ - - function DataTextureLoader( manager ) { - - Loader.call( this, manager ); - - } - - DataTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { - - constructor: DataTextureLoader, - - load: function ( url, onLoad, onProgress, onError ) { - - const scope = this; - - const texture = new DataTexture(); - - const loader = new FileLoader( this.manager ); - loader.setResponseType( 'arraybuffer' ); - loader.setRequestHeader( this.requestHeader ); - loader.setPath( this.path ); - loader.setWithCredentials( scope.withCredentials ); - loader.load( url, function ( buffer ) { - - const texData = scope.parse( buffer ); - - if ( ! texData ) return; - - if ( texData.image !== undefined ) { - - texture.image = texData.image; - - } else if ( texData.data !== undefined ) { - - texture.image.width = texData.width; - texture.image.height = texData.height; - texture.image.data = texData.data; - - } - - texture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping; - texture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping; - - texture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter; - texture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter; - - texture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1; - - if ( texData.format !== undefined ) { - - texture.format = texData.format; - - } - - if ( texData.type !== undefined ) { - - texture.type = texData.type; - - } - - if ( texData.mipmaps !== undefined ) { - - texture.mipmaps = texData.mipmaps; - texture.minFilter = LinearMipmapLinearFilter; // presumably... - - } - - if ( texData.mipmapCount === 1 ) { - - texture.minFilter = LinearFilter; - - } - - texture.needsUpdate = true; - - if ( onLoad ) onLoad( texture, texData ); - - }, onProgress, onError ); - - - return texture; - - } - - } ); - - function TextureLoader( manager ) { - - Loader.call( this, manager ); - - } - - TextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { - - constructor: TextureLoader, - - load: function ( url, onLoad, onProgress, onError ) { - - const texture = new Texture(); - - const loader = new ImageLoader( this.manager ); - loader.setCrossOrigin( this.crossOrigin ); - loader.setPath( this.path ); - - loader.load( url, function ( image ) { - - texture.image = image; - - // JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB. - const isJPEG = url.search( /\.jpe?g($|\?)/i ) > 0 || url.search( /^data\:image\/jpeg/ ) === 0; - - texture.format = isJPEG ? RGBFormat : RGBAFormat; - texture.needsUpdate = true; - - if ( onLoad !== undefined ) { - - onLoad( texture ); - - } - - }, onProgress, onError ); - - return texture; - - } - - } ); - - /** - * Extensible curve object. - * - * Some common of curve methods: - * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget ) - * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget ) - * .getPoints(), .getSpacedPoints() - * .getLength() - * .updateArcLengths() - * - * This following curves inherit from THREE.Curve: - * - * -- 2D curves -- - * THREE.ArcCurve - * THREE.CubicBezierCurve - * THREE.EllipseCurve - * THREE.LineCurve - * THREE.QuadraticBezierCurve - * THREE.SplineCurve - * - * -- 3D curves -- - * THREE.CatmullRomCurve3 - * THREE.CubicBezierCurve3 - * THREE.LineCurve3 - * THREE.QuadraticBezierCurve3 - * - * A series of curves can be represented as a THREE.CurvePath. - * - **/ - - function Curve() { - - this.type = 'Curve'; - - this.arcLengthDivisions = 200; - - } - - Object.assign( Curve.prototype, { - - // Virtual base class method to overwrite and implement in subclasses - // - t [0 .. 1] - - getPoint: function ( /* t, optionalTarget */ ) { - - console.warn( 'THREE.Curve: .getPoint() not implemented.' ); - return null; - - }, - - // Get point at relative position in curve according to arc length - // - u [0 .. 1] - - getPointAt: function ( u, optionalTarget ) { - - const t = this.getUtoTmapping( u ); - return this.getPoint( t, optionalTarget ); - - }, - - // Get sequence of points using getPoint( t ) - - getPoints: function ( divisions = 5 ) { - - const points = []; - - for ( let d = 0; d <= divisions; d ++ ) { - - points.push( this.getPoint( d / divisions ) ); - - } - - return points; - - }, - - // Get sequence of points using getPointAt( u ) - - getSpacedPoints: function ( divisions = 5 ) { - - const points = []; - - for ( let d = 0; d <= divisions; d ++ ) { - - points.push( this.getPointAt( d / divisions ) ); - - } - - return points; - - }, - - // Get total curve arc length - - getLength: function () { - - const lengths = this.getLengths(); - return lengths[ lengths.length - 1 ]; - - }, - - // Get list of cumulative segment lengths - - getLengths: function ( divisions ) { - - if ( divisions === undefined ) divisions = this.arcLengthDivisions; - - if ( this.cacheArcLengths && - ( this.cacheArcLengths.length === divisions + 1 ) && - ! this.needsUpdate ) { - - return this.cacheArcLengths; - - } - - this.needsUpdate = false; - - const cache = []; - let current, last = this.getPoint( 0 ); - let sum = 0; - - cache.push( 0 ); - - for ( let p = 1; p <= divisions; p ++ ) { - - current = this.getPoint( p / divisions ); - sum += current.distanceTo( last ); - cache.push( sum ); - last = current; - - } - - this.cacheArcLengths = cache; - - return cache; // { sums: cache, sum: sum }; Sum is in the last element. - - }, - - updateArcLengths: function () { - - this.needsUpdate = true; - this.getLengths(); - - }, - - // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant - - getUtoTmapping: function ( u, distance ) { - - const arcLengths = this.getLengths(); - - let i = 0; - const il = arcLengths.length; - - let targetArcLength; // The targeted u distance value to get - - if ( distance ) { - - targetArcLength = distance; - - } else { - - targetArcLength = u * arcLengths[ il - 1 ]; - - } - - // binary search for the index with largest value smaller than target u distance - - let low = 0, high = il - 1, comparison; - - while ( low <= high ) { - - i = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats - - comparison = arcLengths[ i ] - targetArcLength; - - if ( comparison < 0 ) { - - low = i + 1; - - } else if ( comparison > 0 ) { - - high = i - 1; - - } else { - - high = i; - break; - - // DONE - - } - - } - - i = high; - - if ( arcLengths[ i ] === targetArcLength ) { - - return i / ( il - 1 ); - - } - - // we could get finer grain at lengths, or use simple interpolation between two points - - const lengthBefore = arcLengths[ i ]; - const lengthAfter = arcLengths[ i + 1 ]; - - const segmentLength = lengthAfter - lengthBefore; - - // determine where we are between the 'before' and 'after' points - - const segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength; - - // add that fractional amount to t - - const t = ( i + segmentFraction ) / ( il - 1 ); - - return t; - - }, - - // Returns a unit vector tangent at t - // In case any sub curve does not implement its tangent derivation, - // 2 points a small delta apart will be used to find its gradient - // which seems to give a reasonable approximation - - getTangent: function ( t, optionalTarget ) { - - const delta = 0.0001; - let t1 = t - delta; - let t2 = t + delta; - - // Capping in case of danger - - if ( t1 < 0 ) t1 = 0; - if ( t2 > 1 ) t2 = 1; - - const pt1 = this.getPoint( t1 ); - const pt2 = this.getPoint( t2 ); - - const tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() ); - - tangent.copy( pt2 ).sub( pt1 ).normalize(); - - return tangent; - - }, - - getTangentAt: function ( u, optionalTarget ) { - - const t = this.getUtoTmapping( u ); - return this.getTangent( t, optionalTarget ); - - }, - - computeFrenetFrames: function ( segments, closed ) { - - // see http://www.cs.indiana.edu/pub/techreports/TR425.pdf - - const normal = new Vector3(); - - const tangents = []; - const normals = []; - const binormals = []; - - const vec = new Vector3(); - const mat = new Matrix4(); - - // compute the tangent vectors for each segment on the curve - - for ( let i = 0; i <= segments; i ++ ) { - - const u = i / segments; - - tangents[ i ] = this.getTangentAt( u, new Vector3() ); - tangents[ i ].normalize(); - - } - - // select an initial normal vector perpendicular to the first tangent vector, - // and in the direction of the minimum tangent xyz component - - normals[ 0 ] = new Vector3(); - binormals[ 0 ] = new Vector3(); - let min = Number.MAX_VALUE; - const tx = Math.abs( tangents[ 0 ].x ); - const ty = Math.abs( tangents[ 0 ].y ); - const tz = Math.abs( tangents[ 0 ].z ); - - if ( tx <= min ) { - - min = tx; - normal.set( 1, 0, 0 ); - - } - - if ( ty <= min ) { - - min = ty; - normal.set( 0, 1, 0 ); - - } - - if ( tz <= min ) { - - normal.set( 0, 0, 1 ); - - } - - vec.crossVectors( tangents[ 0 ], normal ).normalize(); - - normals[ 0 ].crossVectors( tangents[ 0 ], vec ); - binormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] ); - - - // compute the slowly-varying normal and binormal vectors for each segment on the curve - - for ( let i = 1; i <= segments; i ++ ) { - - normals[ i ] = normals[ i - 1 ].clone(); - - binormals[ i ] = binormals[ i - 1 ].clone(); - - vec.crossVectors( tangents[ i - 1 ], tangents[ i ] ); - - if ( vec.length() > Number.EPSILON ) { - - vec.normalize(); - - const theta = Math.acos( MathUtils.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors - - normals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) ); - - } - - binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); - - } - - // if the curve is closed, postprocess the vectors so the first and last normal vectors are the same - - if ( closed === true ) { - - let theta = Math.acos( MathUtils.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) ); - theta /= segments; - - if ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) { - - theta = - theta; - - } - - for ( let i = 1; i <= segments; i ++ ) { - - // twist a little... - normals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) ); - binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); - - } - - } - - return { - tangents: tangents, - normals: normals, - binormals: binormals - }; - - }, - - clone: function () { - - return new this.constructor().copy( this ); - - }, - - copy: function ( source ) { - - this.arcLengthDivisions = source.arcLengthDivisions; - - return this; - - }, - - toJSON: function () { - - const data = { - metadata: { - version: 4.5, - type: 'Curve', - generator: 'Curve.toJSON' - } - }; - - data.arcLengthDivisions = this.arcLengthDivisions; - data.type = this.type; - - return data; - - }, - - fromJSON: function ( json ) { - - this.arcLengthDivisions = json.arcLengthDivisions; - - return this; - - } - - } ); - - function EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { - - Curve.call( this ); - - this.type = 'EllipseCurve'; - - this.aX = aX || 0; - this.aY = aY || 0; - - this.xRadius = xRadius || 1; - this.yRadius = yRadius || 1; - - this.aStartAngle = aStartAngle || 0; - this.aEndAngle = aEndAngle || 2 * Math.PI; - - this.aClockwise = aClockwise || false; - - this.aRotation = aRotation || 0; - - } - - EllipseCurve.prototype = Object.create( Curve.prototype ); - EllipseCurve.prototype.constructor = EllipseCurve; - - EllipseCurve.prototype.isEllipseCurve = true; - - EllipseCurve.prototype.getPoint = function ( t, optionalTarget ) { - - const point = optionalTarget || new Vector2(); - - const twoPi = Math.PI * 2; - let deltaAngle = this.aEndAngle - this.aStartAngle; - const samePoints = Math.abs( deltaAngle ) < Number.EPSILON; - - // ensures that deltaAngle is 0 .. 2 PI - while ( deltaAngle < 0 ) deltaAngle += twoPi; - while ( deltaAngle > twoPi ) deltaAngle -= twoPi; - - if ( deltaAngle < Number.EPSILON ) { - - if ( samePoints ) { - - deltaAngle = 0; - - } else { - - deltaAngle = twoPi; - - } - - } - - if ( this.aClockwise === true && ! samePoints ) { - - if ( deltaAngle === twoPi ) { - - deltaAngle = - twoPi; - - } else { - - deltaAngle = deltaAngle - twoPi; - - } - - } - - const angle = this.aStartAngle + t * deltaAngle; - let x = this.aX + this.xRadius * Math.cos( angle ); - let y = this.aY + this.yRadius * Math.sin( angle ); - - if ( this.aRotation !== 0 ) { - - const cos = Math.cos( this.aRotation ); - const sin = Math.sin( this.aRotation ); - - const tx = x - this.aX; - const ty = y - this.aY; - - // Rotate the point about the center of the ellipse. - x = tx * cos - ty * sin + this.aX; - y = tx * sin + ty * cos + this.aY; - - } - - return point.set( x, y ); - - }; - - EllipseCurve.prototype.copy = function ( source ) { - - Curve.prototype.copy.call( this, source ); - - this.aX = source.aX; - this.aY = source.aY; - - this.xRadius = source.xRadius; - this.yRadius = source.yRadius; - - this.aStartAngle = source.aStartAngle; - this.aEndAngle = source.aEndAngle; - - this.aClockwise = source.aClockwise; - - this.aRotation = source.aRotation; - - return this; - - }; - - - EllipseCurve.prototype.toJSON = function () { - - const data = Curve.prototype.toJSON.call( this ); - - data.aX = this.aX; - data.aY = this.aY; - - data.xRadius = this.xRadius; - data.yRadius = this.yRadius; - - data.aStartAngle = this.aStartAngle; - data.aEndAngle = this.aEndAngle; - - data.aClockwise = this.aClockwise; - - data.aRotation = this.aRotation; - - return data; - - }; - - EllipseCurve.prototype.fromJSON = function ( json ) { - - Curve.prototype.fromJSON.call( this, json ); - - this.aX = json.aX; - this.aY = json.aY; - - this.xRadius = json.xRadius; - this.yRadius = json.yRadius; - - this.aStartAngle = json.aStartAngle; - this.aEndAngle = json.aEndAngle; - - this.aClockwise = json.aClockwise; - - this.aRotation = json.aRotation; - - return this; - - }; - - function ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { - - EllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); - - this.type = 'ArcCurve'; - - } - - ArcCurve.prototype = Object.create( EllipseCurve.prototype ); - ArcCurve.prototype.constructor = ArcCurve; - - ArcCurve.prototype.isArcCurve = true; - - /** - * Centripetal CatmullRom Curve - which is useful for avoiding - * cusps and self-intersections in non-uniform catmull rom curves. - * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf - * - * curve.type accepts centripetal(default), chordal and catmullrom - * curve.tension is used for catmullrom which defaults to 0.5 - */ - - - /* - Based on an optimized c++ solution in - - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/ - - http://ideone.com/NoEbVM - - This CubicPoly class could be used for reusing some variables and calculations, - but for three.js curve use, it could be possible inlined and flatten into a single function call - which can be placed in CurveUtils. - */ - - function CubicPoly() { - - let c0 = 0, c1 = 0, c2 = 0, c3 = 0; - - /* - * Compute coefficients for a cubic polynomial - * p(s) = c0 + c1*s + c2*s^2 + c3*s^3 - * such that - * p(0) = x0, p(1) = x1 - * and - * p'(0) = t0, p'(1) = t1. - */ - function init( x0, x1, t0, t1 ) { - - c0 = x0; - c1 = t0; - c2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1; - c3 = 2 * x0 - 2 * x1 + t0 + t1; - - } - - return { - - initCatmullRom: function ( x0, x1, x2, x3, tension ) { - - init( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) ); - - }, - - initNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) { - - // compute tangents when parameterized in [t1,t2] - let t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1; - let t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2; - - // rescale tangents for parametrization in [0,1] - t1 *= dt1; - t2 *= dt1; - - init( x1, x2, t1, t2 ); - - }, - - calc: function ( t ) { - - const t2 = t * t; - const t3 = t2 * t; - return c0 + c1 * t + c2 * t2 + c3 * t3; - - } - - }; - - } - - // - - const tmp = new Vector3(); - const px = new CubicPoly(), py = new CubicPoly(), pz = new CubicPoly(); - - function CatmullRomCurve3( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) { - - Curve.call( this ); - - this.type = 'CatmullRomCurve3'; - - this.points = points; - this.closed = closed; - this.curveType = curveType; - this.tension = tension; - - } - - CatmullRomCurve3.prototype = Object.create( Curve.prototype ); - CatmullRomCurve3.prototype.constructor = CatmullRomCurve3; - - CatmullRomCurve3.prototype.isCatmullRomCurve3 = true; - - CatmullRomCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) { - - const point = optionalTarget; - - const points = this.points; - const l = points.length; - - const p = ( l - ( this.closed ? 0 : 1 ) ) * t; - let intPoint = Math.floor( p ); - let weight = p - intPoint; - - if ( this.closed ) { - - intPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l; - - } else if ( weight === 0 && intPoint === l - 1 ) { - - intPoint = l - 2; - weight = 1; - - } - - let p0, p3; // 4 points (p1 & p2 defined below) - - if ( this.closed || intPoint > 0 ) { - - p0 = points[ ( intPoint - 1 ) % l ]; - - } else { - - // extrapolate first point - tmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] ); - p0 = tmp; - - } - - const p1 = points[ intPoint % l ]; - const p2 = points[ ( intPoint + 1 ) % l ]; - - if ( this.closed || intPoint + 2 < l ) { - - p3 = points[ ( intPoint + 2 ) % l ]; - - } else { - - // extrapolate last point - tmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] ); - p3 = tmp; - - } - - if ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) { - - // init Centripetal / Chordal Catmull-Rom - const pow = this.curveType === 'chordal' ? 0.5 : 0.25; - let dt0 = Math.pow( p0.distanceToSquared( p1 ), pow ); - let dt1 = Math.pow( p1.distanceToSquared( p2 ), pow ); - let dt2 = Math.pow( p2.distanceToSquared( p3 ), pow ); - - // safety check for repeated points - if ( dt1 < 1e-4 ) dt1 = 1.0; - if ( dt0 < 1e-4 ) dt0 = dt1; - if ( dt2 < 1e-4 ) dt2 = dt1; - - px.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 ); - py.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 ); - pz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 ); - - } else if ( this.curveType === 'catmullrom' ) { - - px.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension ); - py.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension ); - pz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension ); - - } - - point.set( - px.calc( weight ), - py.calc( weight ), - pz.calc( weight ) - ); - - return point; - - }; - - CatmullRomCurve3.prototype.copy = function ( source ) { - - Curve.prototype.copy.call( this, source ); - - this.points = []; - - for ( let i = 0, l = source.points.length; i < l; i ++ ) { - - const point = source.points[ i ]; - - this.points.push( point.clone() ); - - } - - this.closed = source.closed; - this.curveType = source.curveType; - this.tension = source.tension; - - return this; - - }; - - CatmullRomCurve3.prototype.toJSON = function () { - - const data = Curve.prototype.toJSON.call( this ); - - data.points = []; - - for ( let i = 0, l = this.points.length; i < l; i ++ ) { - - const point = this.points[ i ]; - data.points.push( point.toArray() ); - - } - - data.closed = this.closed; - data.curveType = this.curveType; - data.tension = this.tension; - - return data; - - }; - - CatmullRomCurve3.prototype.fromJSON = function ( json ) { - - Curve.prototype.fromJSON.call( this, json ); - - this.points = []; - - for ( let i = 0, l = json.points.length; i < l; i ++ ) { - - const point = json.points[ i ]; - this.points.push( new Vector3().fromArray( point ) ); - - } - - this.closed = json.closed; - this.curveType = json.curveType; - this.tension = json.tension; - - return this; - - }; - - /** - * Bezier Curves formulas obtained from - * http://en.wikipedia.org/wiki/Bézier_curve - */ - - function CatmullRom( t, p0, p1, p2, p3 ) { - - const v0 = ( p2 - p0 ) * 0.5; - const v1 = ( p3 - p1 ) * 0.5; - const t2 = t * t; - const t3 = t * t2; - return ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1; - - } - - // - - function QuadraticBezierP0( t, p ) { - - const k = 1 - t; - return k * k * p; - - } - - function QuadraticBezierP1( t, p ) { - - return 2 * ( 1 - t ) * t * p; - - } - - function QuadraticBezierP2( t, p ) { - - return t * t * p; - - } - - function QuadraticBezier( t, p0, p1, p2 ) { - - return QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) + - QuadraticBezierP2( t, p2 ); - - } - - // - - function CubicBezierP0( t, p ) { - - const k = 1 - t; - return k * k * k * p; - - } - - function CubicBezierP1( t, p ) { - - const k = 1 - t; - return 3 * k * k * t * p; - - } - - function CubicBezierP2( t, p ) { - - return 3 * ( 1 - t ) * t * t * p; - - } - - function CubicBezierP3( t, p ) { - - return t * t * t * p; - - } - - function CubicBezier( t, p0, p1, p2, p3 ) { - - return CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) + - CubicBezierP3( t, p3 ); - - } - - function CubicBezierCurve( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) { - - Curve.call( this ); - - this.type = 'CubicBezierCurve'; - - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - this.v3 = v3; - - } - - CubicBezierCurve.prototype = Object.create( Curve.prototype ); - CubicBezierCurve.prototype.constructor = CubicBezierCurve; - - CubicBezierCurve.prototype.isCubicBezierCurve = true; - - CubicBezierCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) { - - const point = optionalTarget; - - const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; - - point.set( - CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), - CubicBezier( t, v0.y, v1.y, v2.y, v3.y ) - ); - - return point; - - }; - - CubicBezierCurve.prototype.copy = function ( source ) { - - Curve.prototype.copy.call( this, source ); - - this.v0.copy( source.v0 ); - this.v1.copy( source.v1 ); - this.v2.copy( source.v2 ); - this.v3.copy( source.v3 ); - - return this; - - }; - - CubicBezierCurve.prototype.toJSON = function () { - - const data = Curve.prototype.toJSON.call( this ); - - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - data.v3 = this.v3.toArray(); - - return data; - - }; - - CubicBezierCurve.prototype.fromJSON = function ( json ) { - - Curve.prototype.fromJSON.call( this, json ); - - this.v0.fromArray( json.v0 ); - this.v1.fromArray( json.v1 ); - this.v2.fromArray( json.v2 ); - this.v3.fromArray( json.v3 ); - - return this; - - }; - - function CubicBezierCurve3( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) { - - Curve.call( this ); - - this.type = 'CubicBezierCurve3'; - - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - this.v3 = v3; - - } - - CubicBezierCurve3.prototype = Object.create( Curve.prototype ); - CubicBezierCurve3.prototype.constructor = CubicBezierCurve3; - - CubicBezierCurve3.prototype.isCubicBezierCurve3 = true; - - CubicBezierCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) { - - const point = optionalTarget; - - const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; - - point.set( - CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), - CubicBezier( t, v0.y, v1.y, v2.y, v3.y ), - CubicBezier( t, v0.z, v1.z, v2.z, v3.z ) - ); - - return point; - - }; - - CubicBezierCurve3.prototype.copy = function ( source ) { - - Curve.prototype.copy.call( this, source ); - - this.v0.copy( source.v0 ); - this.v1.copy( source.v1 ); - this.v2.copy( source.v2 ); - this.v3.copy( source.v3 ); - - return this; - - }; - - CubicBezierCurve3.prototype.toJSON = function () { - - const data = Curve.prototype.toJSON.call( this ); - - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - data.v3 = this.v3.toArray(); - - return data; - - }; - - CubicBezierCurve3.prototype.fromJSON = function ( json ) { - - Curve.prototype.fromJSON.call( this, json ); - - this.v0.fromArray( json.v0 ); - this.v1.fromArray( json.v1 ); - this.v2.fromArray( json.v2 ); - this.v3.fromArray( json.v3 ); - - return this; - - }; - - function LineCurve( v1 = new Vector2(), v2 = new Vector2() ) { - - Curve.call( this ); - - this.type = 'LineCurve'; - - this.v1 = v1; - this.v2 = v2; - - } - - LineCurve.prototype = Object.create( Curve.prototype ); - LineCurve.prototype.constructor = LineCurve; - - LineCurve.prototype.isLineCurve = true; - - LineCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) { - - const point = optionalTarget; - - if ( t === 1 ) { - - point.copy( this.v2 ); - - } else { - - point.copy( this.v2 ).sub( this.v1 ); - point.multiplyScalar( t ).add( this.v1 ); - - } - - return point; - - }; - - // Line curve is linear, so we can overwrite default getPointAt - - LineCurve.prototype.getPointAt = function ( u, optionalTarget ) { - - return this.getPoint( u, optionalTarget ); - - }; - - LineCurve.prototype.getTangent = function ( t, optionalTarget ) { - - const tangent = optionalTarget || new Vector2(); - - tangent.copy( this.v2 ).sub( this.v1 ).normalize(); - - return tangent; - - }; - - LineCurve.prototype.copy = function ( source ) { - - Curve.prototype.copy.call( this, source ); - - this.v1.copy( source.v1 ); - this.v2.copy( source.v2 ); - - return this; - - }; - - LineCurve.prototype.toJSON = function () { - - const data = Curve.prototype.toJSON.call( this ); - - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - - return data; - - }; - - LineCurve.prototype.fromJSON = function ( json ) { - - Curve.prototype.fromJSON.call( this, json ); - - this.v1.fromArray( json.v1 ); - this.v2.fromArray( json.v2 ); - - return this; - - }; - - function LineCurve3( v1 = new Vector3(), v2 = new Vector3() ) { - - Curve.call( this ); - - this.type = 'LineCurve3'; - - this.v1 = v1; - this.v2 = v2; - - } - - LineCurve3.prototype = Object.create( Curve.prototype ); - LineCurve3.prototype.constructor = LineCurve3; - - LineCurve3.prototype.isLineCurve3 = true; - - LineCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) { - - const point = optionalTarget; - - if ( t === 1 ) { - - point.copy( this.v2 ); - - } else { - - point.copy( this.v2 ).sub( this.v1 ); - point.multiplyScalar( t ).add( this.v1 ); - - } - - return point; - - }; - - // Line curve is linear, so we can overwrite default getPointAt - - LineCurve3.prototype.getPointAt = function ( u, optionalTarget ) { - - return this.getPoint( u, optionalTarget ); - - }; - - LineCurve3.prototype.copy = function ( source ) { - - Curve.prototype.copy.call( this, source ); - - this.v1.copy( source.v1 ); - this.v2.copy( source.v2 ); - - return this; - - }; - - LineCurve3.prototype.toJSON = function () { - - const data = Curve.prototype.toJSON.call( this ); - - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - - return data; - - }; - - LineCurve3.prototype.fromJSON = function ( json ) { - - Curve.prototype.fromJSON.call( this, json ); - - this.v1.fromArray( json.v1 ); - this.v2.fromArray( json.v2 ); - - return this; - - }; - - function QuadraticBezierCurve( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) { - - Curve.call( this ); - - this.type = 'QuadraticBezierCurve'; - - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - - } - - QuadraticBezierCurve.prototype = Object.create( Curve.prototype ); - QuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve; - - QuadraticBezierCurve.prototype.isQuadraticBezierCurve = true; - - QuadraticBezierCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) { - - const point = optionalTarget; - - const v0 = this.v0, v1 = this.v1, v2 = this.v2; - - point.set( - QuadraticBezier( t, v0.x, v1.x, v2.x ), - QuadraticBezier( t, v0.y, v1.y, v2.y ) - ); - - return point; - - }; - - QuadraticBezierCurve.prototype.copy = function ( source ) { - - Curve.prototype.copy.call( this, source ); - - this.v0.copy( source.v0 ); - this.v1.copy( source.v1 ); - this.v2.copy( source.v2 ); - - return this; - - }; - - QuadraticBezierCurve.prototype.toJSON = function () { - - const data = Curve.prototype.toJSON.call( this ); - - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - - return data; - - }; - - QuadraticBezierCurve.prototype.fromJSON = function ( json ) { - - Curve.prototype.fromJSON.call( this, json ); - - this.v0.fromArray( json.v0 ); - this.v1.fromArray( json.v1 ); - this.v2.fromArray( json.v2 ); - - return this; - - }; - - function QuadraticBezierCurve3( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) { - - Curve.call( this ); - - this.type = 'QuadraticBezierCurve3'; - - this.v0 = v0; - this.v1 = v1; - this.v2 = v2; - - } - - QuadraticBezierCurve3.prototype = Object.create( Curve.prototype ); - QuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3; - - QuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true; - - QuadraticBezierCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) { - - const point = optionalTarget; - - const v0 = this.v0, v1 = this.v1, v2 = this.v2; - - point.set( - QuadraticBezier( t, v0.x, v1.x, v2.x ), - QuadraticBezier( t, v0.y, v1.y, v2.y ), - QuadraticBezier( t, v0.z, v1.z, v2.z ) - ); - - return point; - - }; - - QuadraticBezierCurve3.prototype.copy = function ( source ) { - - Curve.prototype.copy.call( this, source ); - - this.v0.copy( source.v0 ); - this.v1.copy( source.v1 ); - this.v2.copy( source.v2 ); - - return this; - - }; - - QuadraticBezierCurve3.prototype.toJSON = function () { - - const data = Curve.prototype.toJSON.call( this ); - - data.v0 = this.v0.toArray(); - data.v1 = this.v1.toArray(); - data.v2 = this.v2.toArray(); - - return data; - - }; - - QuadraticBezierCurve3.prototype.fromJSON = function ( json ) { - - Curve.prototype.fromJSON.call( this, json ); - - this.v0.fromArray( json.v0 ); - this.v1.fromArray( json.v1 ); - this.v2.fromArray( json.v2 ); - - return this; - - }; - - function SplineCurve( points = [] ) { - - Curve.call( this ); - - this.type = 'SplineCurve'; - - this.points = points; - - } - - SplineCurve.prototype = Object.create( Curve.prototype ); - SplineCurve.prototype.constructor = SplineCurve; - - SplineCurve.prototype.isSplineCurve = true; - - SplineCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) { - - const point = optionalTarget; - - const points = this.points; - const p = ( points.length - 1 ) * t; - - const intPoint = Math.floor( p ); - const weight = p - intPoint; - - const p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ]; - const p1 = points[ intPoint ]; - const p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ]; - const p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ]; - - point.set( - CatmullRom( weight, p0.x, p1.x, p2.x, p3.x ), - CatmullRom( weight, p0.y, p1.y, p2.y, p3.y ) - ); - - return point; - - }; - - SplineCurve.prototype.copy = function ( source ) { - - Curve.prototype.copy.call( this, source ); - - this.points = []; - - for ( let i = 0, l = source.points.length; i < l; i ++ ) { - - const point = source.points[ i ]; - - this.points.push( point.clone() ); - - } - - return this; - - }; - - SplineCurve.prototype.toJSON = function () { - - const data = Curve.prototype.toJSON.call( this ); - - data.points = []; - - for ( let i = 0, l = this.points.length; i < l; i ++ ) { - - const point = this.points[ i ]; - data.points.push( point.toArray() ); - - } - - return data; - - }; - - SplineCurve.prototype.fromJSON = function ( json ) { - - Curve.prototype.fromJSON.call( this, json ); - - this.points = []; - - for ( let i = 0, l = json.points.length; i < l; i ++ ) { - - const point = json.points[ i ]; - this.points.push( new Vector2().fromArray( point ) ); - - } - - return this; - - }; - - var Curves = /*#__PURE__*/Object.freeze({ - __proto__: null, - ArcCurve: ArcCurve, - CatmullRomCurve3: CatmullRomCurve3, - CubicBezierCurve: CubicBezierCurve, - CubicBezierCurve3: CubicBezierCurve3, - EllipseCurve: EllipseCurve, - LineCurve: LineCurve, - LineCurve3: LineCurve3, - QuadraticBezierCurve: QuadraticBezierCurve, - QuadraticBezierCurve3: QuadraticBezierCurve3, - SplineCurve: SplineCurve - }); - - /************************************************************** - * Curved Path - a curve path is simply a array of connected - * curves, but retains the api of a curve - **************************************************************/ - - function CurvePath() { - - Curve.call( this ); - - this.type = 'CurvePath'; - - this.curves = []; - this.autoClose = false; // Automatically closes the path - - } - - CurvePath.prototype = Object.assign( Object.create( Curve.prototype ), { - - constructor: CurvePath, - - add: function ( curve ) { - - this.curves.push( curve ); - - }, - - closePath: function () { - - // Add a line curve if start and end of lines are not connected - const startPoint = this.curves[ 0 ].getPoint( 0 ); - const endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 ); - - if ( ! startPoint.equals( endPoint ) ) { - - this.curves.push( new LineCurve( endPoint, startPoint ) ); - - } - - }, - - // To get accurate point with reference to - // entire path distance at time t, - // following has to be done: - - // 1. Length of each sub path have to be known - // 2. Locate and identify type of curve - // 3. Get t for the curve - // 4. Return curve.getPointAt(t') - - getPoint: function ( t ) { - - const d = t * this.getLength(); - const curveLengths = this.getCurveLengths(); - let i = 0; - - // To think about boundaries points. - - while ( i < curveLengths.length ) { - - if ( curveLengths[ i ] >= d ) { - - const diff = curveLengths[ i ] - d; - const curve = this.curves[ i ]; - - const segmentLength = curve.getLength(); - const u = segmentLength === 0 ? 0 : 1 - diff / segmentLength; - - return curve.getPointAt( u ); - - } - - i ++; - - } - - return null; - - // loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) { - - points.push( points[ 0 ] ); - - } - - return points; - - }, - - copy: function ( source ) { - - Curve.prototype.copy.call( this, source ); - - this.curves = []; - - for ( let i = 0, l = source.curves.length; i < l; i ++ ) { - - const curve = source.curves[ i ]; - - this.curves.push( curve.clone() ); - - } - - this.autoClose = source.autoClose; - - return this; - - }, - - toJSON: function () { - - const data = Curve.prototype.toJSON.call( this ); - - data.autoClose = this.autoClose; - data.curves = []; - - for ( let i = 0, l = this.curves.length; i < l; i ++ ) { - - const curve = this.curves[ i ]; - data.curves.push( curve.toJSON() ); - - } - - return data; - - }, - - fromJSON: function ( json ) { - - Curve.prototype.fromJSON.call( this, json ); - - this.autoClose = json.autoClose; - this.curves = []; - - for ( let i = 0, l = json.curves.length; i < l; i ++ ) { - - const curve = json.curves[ i ]; - this.curves.push( new Curves[ curve.type ]().fromJSON( curve ) ); - - } - - return this; - - } - - } ); - - function Path( points ) { - - CurvePath.call( this ); - - this.type = 'Path'; - - this.currentPoint = new Vector2(); - - if ( points ) { - - this.setFromPoints( points ); - - } - - } - - Path.prototype = Object.assign( Object.create( CurvePath.prototype ), { - - constructor: Path, - - setFromPoints: function ( points ) { - - this.moveTo( points[ 0 ].x, points[ 0 ].y ); - - for ( let i = 1, l = points.length; i < l; i ++ ) { - - this.lineTo( points[ i ].x, points[ i ].y ); - - } - - return this; - - }, - - moveTo: function ( x, y ) { - - this.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying? - - return this; - - }, - - lineTo: function ( x, y ) { - - const curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) ); - this.curves.push( curve ); - - this.currentPoint.set( x, y ); - - return this; - - }, - - quadraticCurveTo: function ( aCPx, aCPy, aX, aY ) { - - const curve = new QuadraticBezierCurve( - this.currentPoint.clone(), - new Vector2( aCPx, aCPy ), - new Vector2( aX, aY ) - ); - - this.curves.push( curve ); - - this.currentPoint.set( aX, aY ); - - return this; - - }, - - bezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { - - const curve = new CubicBezierCurve( - this.currentPoint.clone(), - new Vector2( aCP1x, aCP1y ), - new Vector2( aCP2x, aCP2y ), - new Vector2( aX, aY ) - ); - - this.curves.push( curve ); - - this.currentPoint.set( aX, aY ); - - return this; - - }, - - splineThru: function ( pts /*Array of Vector*/ ) { - - const npts = [ this.currentPoint.clone() ].concat( pts ); - - const curve = new SplineCurve( npts ); - this.curves.push( curve ); - - this.currentPoint.copy( pts[ pts.length - 1 ] ); - - return this; - - }, - - arc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { - - const x0 = this.currentPoint.x; - const y0 = this.currentPoint.y; - - this.absarc( aX + x0, aY + y0, aRadius, - aStartAngle, aEndAngle, aClockwise ); - - return this; - - }, - - absarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { - - this.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); - - return this; - - }, - - ellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { - - const x0 = this.currentPoint.x; - const y0 = this.currentPoint.y; - - this.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); - - return this; - - }, - - absellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { - - const curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); - - if ( this.curves.length > 0 ) { - - // if a previous curve is present, attempt to join - const firstPoint = curve.getPoint( 0 ); - - if ( ! firstPoint.equals( this.currentPoint ) ) { - - this.lineTo( firstPoint.x, firstPoint.y ); - - } - - } - - this.curves.push( curve ); - - const lastPoint = curve.getPoint( 1 ); - this.currentPoint.copy( lastPoint ); - - return this; - - }, - - copy: function ( source ) { - - CurvePath.prototype.copy.call( this, source ); - - this.currentPoint.copy( source.currentPoint ); - - return this; - - }, - - toJSON: function () { - - const data = CurvePath.prototype.toJSON.call( this ); - - data.currentPoint = this.currentPoint.toArray(); - - return data; - - }, - - fromJSON: function ( json ) { - - CurvePath.prototype.fromJSON.call( this, json ); - - this.currentPoint.fromArray( json.currentPoint ); - - return this; - - } - - } ); - - function Shape( points ) { - - Path.call( this, points ); - - this.uuid = MathUtils.generateUUID(); - - this.type = 'Shape'; - - this.holes = []; - - } - - Shape.prototype = Object.assign( Object.create( Path.prototype ), { - - constructor: Shape, - - getPointsHoles: function ( divisions ) { - - const holesPts = []; - - for ( let i = 0, l = this.holes.length; i < l; i ++ ) { - - holesPts[ i ] = this.holes[ i ].getPoints( divisions ); - - } - - return holesPts; - - }, - - // get points of shape and holes (keypoints based on segments parameter) - - extractPoints: function ( divisions ) { - - return { - - shape: this.getPoints( divisions ), - holes: this.getPointsHoles( divisions ) - - }; - - }, - - copy: function ( source ) { - - Path.prototype.copy.call( this, source ); - - this.holes = []; - - for ( let i = 0, l = source.holes.length; i < l; i ++ ) { - - const hole = source.holes[ i ]; - - this.holes.push( hole.clone() ); - - } - - return this; - - }, - - toJSON: function () { - - const data = Path.prototype.toJSON.call( this ); - - data.uuid = this.uuid; - data.holes = []; - - for ( let i = 0, l = this.holes.length; i < l; i ++ ) { - - const hole = this.holes[ i ]; - data.holes.push( hole.toJSON() ); - - } - - return data; - - }, - - fromJSON: function ( json ) { - - Path.prototype.fromJSON.call( this, json ); - - this.uuid = json.uuid; - this.holes = []; - - for ( let i = 0, l = json.holes.length; i < l; i ++ ) { - - const hole = json.holes[ i ]; - this.holes.push( new Path().fromJSON( hole ) ); - - } - - return this; - - } - - } ); - - function Light( color, intensity = 1 ) { - - Object3D.call( this ); - - this.type = 'Light'; - - this.color = new Color( color ); - this.intensity = intensity; - - } - - Light.prototype = Object.assign( Object.create( Object3D.prototype ), { - - constructor: Light, - - isLight: true, - - copy: function ( source ) { - - Object3D.prototype.copy.call( this, source ); - - this.color.copy( source.color ); - this.intensity = source.intensity; - - return this; - - }, - - toJSON: function ( meta ) { - - const data = Object3D.prototype.toJSON.call( this, meta ); - - data.object.color = this.color.getHex(); - data.object.intensity = this.intensity; - - if ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex(); - - if ( this.distance !== undefined ) data.object.distance = this.distance; - if ( this.angle !== undefined ) data.object.angle = this.angle; - if ( this.decay !== undefined ) data.object.decay = this.decay; - if ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra; - - if ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON(); - - return data; - - } - - } ); - - function HemisphereLight( skyColor, groundColor, intensity ) { - - Light.call( this, skyColor, intensity ); - - this.type = 'HemisphereLight'; - - this.position.copy( Object3D.DefaultUp ); - this.updateMatrix(); - - this.groundColor = new Color( groundColor ); - - } - - HemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), { - - constructor: HemisphereLight, - - isHemisphereLight: true, - - copy: function ( source ) { - - Light.prototype.copy.call( this, source ); - - this.groundColor.copy( source.groundColor ); - - return this; - - } - - } ); - - function LightShadow( camera ) { - - this.camera = camera; - - this.bias = 0; - this.normalBias = 0; - this.radius = 1; - - this.mapSize = new Vector2( 512, 512 ); - - this.map = null; - this.mapPass = null; - this.matrix = new Matrix4(); - - this.autoUpdate = true; - this.needsUpdate = false; - - this._frustum = new Frustum(); - this._frameExtents = new Vector2( 1, 1 ); - - this._viewportCount = 1; - - this._viewports = [ - - new Vector4( 0, 0, 1, 1 ) - - ]; - - } - - Object.assign( LightShadow.prototype, { - - _projScreenMatrix: new Matrix4(), - - _lightPositionWorld: new Vector3(), - - _lookTarget: new Vector3(), - - getViewportCount: function () { - - return this._viewportCount; - - }, - - getFrustum: function () { - - return this._frustum; - - }, - - updateMatrices: function ( light ) { - - const shadowCamera = this.camera, - shadowMatrix = this.matrix, - projScreenMatrix = this._projScreenMatrix, - lookTarget = this._lookTarget, - lightPositionWorld = this._lightPositionWorld; - - lightPositionWorld.setFromMatrixPosition( light.matrixWorld ); - shadowCamera.position.copy( lightPositionWorld ); - - lookTarget.setFromMatrixPosition( light.target.matrixWorld ); - shadowCamera.lookAt( lookTarget ); - shadowCamera.updateMatrixWorld(); - - projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse ); - this._frustum.setFromProjectionMatrix( projScreenMatrix ); - - shadowMatrix.set( - 0.5, 0.0, 0.0, 0.5, - 0.0, 0.5, 0.0, 0.5, - 0.0, 0.0, 0.5, 0.5, - 0.0, 0.0, 0.0, 1.0 - ); - - shadowMatrix.multiply( shadowCamera.projectionMatrix ); - shadowMatrix.multiply( shadowCamera.matrixWorldInverse ); - - }, - - getViewport: function ( viewportIndex ) { - - return this._viewports[ viewportIndex ]; - - }, - - getFrameExtents: function () { - - return this._frameExtents; - - }, - - copy: function ( source ) { - - this.camera = source.camera.clone(); - - this.bias = source.bias; - this.radius = source.radius; - - this.mapSize.copy( source.mapSize ); - - return this; - - }, - - clone: function () { - - return new this.constructor().copy( this ); - - }, - - toJSON: function () { - - const object = {}; - - if ( this.bias !== 0 ) object.bias = this.bias; - if ( this.normalBias !== 0 ) object.normalBias = this.normalBias; - if ( this.radius !== 1 ) object.radius = this.radius; - if ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray(); - - object.camera = this.camera.toJSON( false ).object; - delete object.camera.matrix; - - return object; - - } - - } ); - - function SpotLightShadow() { - - LightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) ); - - this.focus = 1; - - } - - SpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { - - constructor: SpotLightShadow, - - isSpotLightShadow: true, - - updateMatrices: function ( light ) { - - const camera = this.camera; - - const fov = MathUtils.RAD2DEG * 2 * light.angle * this.focus; - const aspect = this.mapSize.width / this.mapSize.height; - const far = light.distance || camera.far; - - if ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) { - - camera.fov = fov; - camera.aspect = aspect; - camera.far = far; - camera.updateProjectionMatrix(); - - } - - LightShadow.prototype.updateMatrices.call( this, light ); - - } - - } ); - - function SpotLight( color, intensity, distance, angle, penumbra, decay ) { - - Light.call( this, color, intensity ); - - this.type = 'SpotLight'; - - this.position.copy( Object3D.DefaultUp ); - this.updateMatrix(); - - this.target = new Object3D(); - - Object.defineProperty( this, 'power', { - get: function () { - - // intensity = power per solid angle. - // ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf - return this.intensity * Math.PI; - - }, - set: function ( power ) { - - // intensity = power per solid angle. - // ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf - this.intensity = power / Math.PI; - - } - } ); - - this.distance = ( distance !== undefined ) ? distance : 0; - this.angle = ( angle !== undefined ) ? angle : Math.PI / 3; - this.penumbra = ( penumbra !== undefined ) ? penumbra : 0; - this.decay = ( decay !== undefined ) ? decay : 1; // for physically correct lights, should be 2. - - this.shadow = new SpotLightShadow(); - - } - - SpotLight.prototype = Object.assign( Object.create( Light.prototype ), { - - constructor: SpotLight, - - isSpotLight: true, - - copy: function ( source ) { - - Light.prototype.copy.call( this, source ); - - this.distance = source.distance; - this.angle = source.angle; - this.penumbra = source.penumbra; - this.decay = source.decay; - - this.target = source.target.clone(); - - this.shadow = source.shadow.clone(); - - return this; - - } - - } ); - - function PointLightShadow() { - - LightShadow.call( this, new PerspectiveCamera( 90, 1, 0.5, 500 ) ); - - this._frameExtents = new Vector2( 4, 2 ); - - this._viewportCount = 6; - - this._viewports = [ - // These viewports map a cube-map onto a 2D texture with the - // following orientation: - // - // xzXZ - // y Y - // - // X - Positive x direction - // x - Negative x direction - // Y - Positive y direction - // y - Negative y direction - // Z - Positive z direction - // z - Negative z direction - - // positive X - new Vector4( 2, 1, 1, 1 ), - // negative X - new Vector4( 0, 1, 1, 1 ), - // positive Z - new Vector4( 3, 1, 1, 1 ), - // negative Z - new Vector4( 1, 1, 1, 1 ), - // positive Y - new Vector4( 3, 0, 1, 1 ), - // negative Y - new Vector4( 1, 0, 1, 1 ) - ]; - - this._cubeDirections = [ - new Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ), - new Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 ) - ]; - - this._cubeUps = [ - new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), - new Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ), new Vector3( 0, 0, - 1 ) - ]; - - } - - PointLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { - - constructor: PointLightShadow, - - isPointLightShadow: true, - - updateMatrices: function ( light, viewportIndex = 0 ) { - - const camera = this.camera, - shadowMatrix = this.matrix, - lightPositionWorld = this._lightPositionWorld, - lookTarget = this._lookTarget, - projScreenMatrix = this._projScreenMatrix; - - lightPositionWorld.setFromMatrixPosition( light.matrixWorld ); - camera.position.copy( lightPositionWorld ); - - lookTarget.copy( camera.position ); - lookTarget.add( this._cubeDirections[ viewportIndex ] ); - camera.up.copy( this._cubeUps[ viewportIndex ] ); - camera.lookAt( lookTarget ); - camera.updateMatrixWorld(); - - shadowMatrix.makeTranslation( - lightPositionWorld.x, - lightPositionWorld.y, - lightPositionWorld.z ); - - projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); - this._frustum.setFromProjectionMatrix( projScreenMatrix ); - - } - - } ); - - function PointLight( color, intensity, distance, decay ) { - - Light.call( this, color, intensity ); - - this.type = 'PointLight'; - - Object.defineProperty( this, 'power', { - get: function () { - - // intensity = power per solid angle. - // ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf - return this.intensity * 4 * Math.PI; - - }, - set: function ( power ) { - - // intensity = power per solid angle. - // ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf - this.intensity = power / ( 4 * Math.PI ); - - } - } ); - - this.distance = ( distance !== undefined ) ? distance : 0; - this.decay = ( decay !== undefined ) ? decay : 1; // for physically correct lights, should be 2. - - this.shadow = new PointLightShadow(); - - } - - PointLight.prototype = Object.assign( Object.create( Light.prototype ), { - - constructor: PointLight, - - isPointLight: true, - - copy: function ( source ) { - - Light.prototype.copy.call( this, source ); - - this.distance = source.distance; - this.decay = source.decay; - - this.shadow = source.shadow.clone(); - - return this; - - } - - } ); - - function OrthographicCamera( left, right, top, bottom, near, far ) { - - Camera.call( this ); - - this.type = 'OrthographicCamera'; - - this.zoom = 1; - this.view = null; - - this.left = ( left !== undefined ) ? left : - 1; - this.right = ( right !== undefined ) ? right : 1; - this.top = ( top !== undefined ) ? top : 1; - this.bottom = ( bottom !== undefined ) ? bottom : - 1; - - this.near = ( near !== undefined ) ? near : 0.1; - this.far = ( far !== undefined ) ? far : 2000; - - this.updateProjectionMatrix(); - - } - - OrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), { - - constructor: OrthographicCamera, - - isOrthographicCamera: true, - - copy: function ( source, recursive ) { - - Camera.prototype.copy.call( this, source, recursive ); - - this.left = source.left; - this.right = source.right; - this.top = source.top; - this.bottom = source.bottom; - this.near = source.near; - this.far = source.far; - - this.zoom = source.zoom; - this.view = source.view === null ? null : Object.assign( {}, source.view ); - - return this; - - }, - - setViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) { - - 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: function () { - - if ( this.view !== null ) { - - this.view.enabled = false; - - } - - this.updateProjectionMatrix(); - - }, - - updateProjectionMatrix: function () { - - const dx = ( this.right - this.left ) / ( 2 * this.zoom ); - const dy = ( this.top - this.bottom ) / ( 2 * this.zoom ); - const cx = ( this.right + this.left ) / 2; - const cy = ( this.top + this.bottom ) / 2; - - let left = cx - dx; - let right = cx + dx; - let top = cy + dy; - let bottom = cy - dy; - - if ( this.view !== null && this.view.enabled ) { - - const scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom; - const scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom; - - left += scaleW * this.view.offsetX; - right = left + scaleW * this.view.width; - top -= scaleH * this.view.offsetY; - bottom = top - scaleH * this.view.height; - - } - - this.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far ); - - this.projectionMatrixInverse.copy( this.projectionMatrix ).invert(); - - }, - - toJSON: function ( meta ) { - - const data = Object3D.prototype.toJSON.call( this, meta ); - - data.object.zoom = this.zoom; - data.object.left = this.left; - data.object.right = this.right; - data.object.top = this.top; - data.object.bottom = this.bottom; - data.object.near = this.near; - data.object.far = this.far; - - if ( this.view !== null ) data.object.view = Object.assign( {}, this.view ); - - return data; - - } - - } ); - - function DirectionalLightShadow() { - - LightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) ); - - } - - DirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { - - constructor: DirectionalLightShadow, - - isDirectionalLightShadow: true, - - updateMatrices: function ( light ) { - - LightShadow.prototype.updateMatrices.call( this, light ); - - } - - } ); - - function DirectionalLight( color, intensity ) { - - Light.call( this, color, intensity ); - - this.type = 'DirectionalLight'; - - this.position.copy( Object3D.DefaultUp ); - this.updateMatrix(); - - this.target = new Object3D(); - - this.shadow = new DirectionalLightShadow(); - - } - - DirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), { - - constructor: DirectionalLight, - - isDirectionalLight: true, - - copy: function ( source ) { - - Light.prototype.copy.call( this, source ); - - this.target = source.target.clone(); - - this.shadow = source.shadow.clone(); - - return this; - - } - - } ); - - function AmbientLight( color, intensity ) { - - Light.call( this, color, intensity ); - - this.type = 'AmbientLight'; - - } - - AmbientLight.prototype = Object.assign( Object.create( Light.prototype ), { - - constructor: AmbientLight, - - isAmbientLight: true - - } ); - - function RectAreaLight( color, intensity, width, height ) { - - Light.call( this, color, intensity ); - - this.type = 'RectAreaLight'; - - this.width = ( width !== undefined ) ? width : 10; - this.height = ( height !== undefined ) ? height : 10; - - } - - RectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), { - - constructor: RectAreaLight, - - isRectAreaLight: true, - - copy: function ( source ) { - - Light.prototype.copy.call( this, source ); - - this.width = source.width; - this.height = source.height; - - return this; - - }, - - toJSON: function ( meta ) { - - const data = Light.prototype.toJSON.call( this, meta ); - - data.object.width = this.width; - data.object.height = this.height; - - return data; - - } - - } ); - - /** - * Primary reference: - * https://graphics.stanford.edu/papers/envmap/envmap.pdf - * - * Secondary reference: - * https://www.ppsloan.org/publications/StupidSH36.pdf - */ - - // 3-band SH defined by 9 coefficients - - class SphericalHarmonics3 { - - constructor() { - - Object.defineProperty( this, 'isSphericalHarmonics3', { value: true } ); - - this.coefficients = []; - - for ( let i = 0; i < 9; i ++ ) { - - this.coefficients.push( new Vector3() ); - - } - - } - - set( coefficients ) { - - for ( let i = 0; i < 9; i ++ ) { - - this.coefficients[ i ].copy( coefficients[ i ] ); - - } - - return this; - - } - - zero() { - - for ( let i = 0; i < 9; i ++ ) { - - this.coefficients[ i ].set( 0, 0, 0 ); - - } - - return this; - - } - - // get the radiance in the direction of the normal - // target is a Vector3 - getAt( normal, target ) { - - // normal is assumed to be unit length - - const x = normal.x, y = normal.y, z = normal.z; - - const coeff = this.coefficients; - - // band 0 - target.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 ); - - // band 1 - target.addScaledVector( coeff[ 1 ], 0.488603 * y ); - target.addScaledVector( coeff[ 2 ], 0.488603 * z ); - target.addScaledVector( coeff[ 3 ], 0.488603 * x ); - - // band 2 - target.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) ); - target.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) ); - target.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) ); - target.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) ); - target.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) ); - - return target; - - } - - // get the irradiance (radiance convolved with cosine lobe) in the direction of the normal - // target is a Vector3 - // https://graphics.stanford.edu/papers/envmap/envmap.pdf - getIrradianceAt( normal, target ) { - - // normal is assumed to be unit length - - const x = normal.x, y = normal.y, z = normal.z; - - const coeff = this.coefficients; - - // band 0 - target.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095 - - // band 1 - target.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603 - target.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z ); - target.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x ); - - // band 2 - target.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548 - target.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z ); - target.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3 - target.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z ); - target.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274 - - return target; - - } - - add( sh ) { - - for ( let i = 0; i < 9; i ++ ) { - - this.coefficients[ i ].add( sh.coefficients[ i ] ); - - } - - return this; - - } - - addScaledSH( sh, s ) { - - for ( let i = 0; i < 9; i ++ ) { - - this.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s ); - - } - - return this; - - } - - scale( s ) { - - for ( let i = 0; i < 9; i ++ ) { - - this.coefficients[ i ].multiplyScalar( s ); - - } - - return this; - - } - - lerp( sh, alpha ) { - - for ( let i = 0; i < 9; i ++ ) { - - this.coefficients[ i ].lerp( sh.coefficients[ i ], alpha ); - - } - - return this; - - } - - equals( sh ) { - - for ( let i = 0; i < 9; i ++ ) { - - if ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) { - - return false; - - } - - } - - return true; - - } - - copy( sh ) { - - return this.set( sh.coefficients ); - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - fromArray( array, offset = 0 ) { - - const coefficients = this.coefficients; - - for ( let i = 0; i < 9; i ++ ) { - - coefficients[ i ].fromArray( array, offset + ( i * 3 ) ); - - } - - return this; - - } - - toArray( array = [], offset = 0 ) { - - const coefficients = this.coefficients; - - for ( let i = 0; i < 9; i ++ ) { - - coefficients[ i ].toArray( array, offset + ( i * 3 ) ); - - } - - return array; - - } - - // evaluate the basis functions - // shBasis is an Array[ 9 ] - static getBasisAt( normal, shBasis ) { - - // normal is assumed to be unit length - - const x = normal.x, y = normal.y, z = normal.z; - - // band 0 - shBasis[ 0 ] = 0.282095; - - // band 1 - shBasis[ 1 ] = 0.488603 * y; - shBasis[ 2 ] = 0.488603 * z; - shBasis[ 3 ] = 0.488603 * x; - - // band 2 - shBasis[ 4 ] = 1.092548 * x * y; - shBasis[ 5 ] = 1.092548 * y * z; - shBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 ); - shBasis[ 7 ] = 1.092548 * x * z; - shBasis[ 8 ] = 0.546274 * ( x * x - y * y ); - - } - - } - - function LightProbe( sh, intensity ) { - - Light.call( this, undefined, intensity ); - - this.type = 'LightProbe'; - - this.sh = ( sh !== undefined ) ? sh : new SphericalHarmonics3(); - - } - - LightProbe.prototype = Object.assign( Object.create( Light.prototype ), { - - constructor: LightProbe, - - isLightProbe: true, - - copy: function ( source ) { - - Light.prototype.copy.call( this, source ); - - this.sh.copy( source.sh ); - - return this; - - }, - - fromJSON: function ( json ) { - - this.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON(); - this.sh.fromArray( json.sh ); - - return this; - - }, - - toJSON: function ( meta ) { - - const data = Light.prototype.toJSON.call( this, meta ); - - data.object.sh = this.sh.toArray(); - - return data; - - } - - } ); - - function MaterialLoader( manager ) { - - Loader.call( this, manager ); - - this.textures = {}; - - } - - MaterialLoader.prototype = Object.assign( Object.create( Loader.prototype ), { - - constructor: MaterialLoader, - - load: function ( url, onLoad, onProgress, onError ) { - - const scope = this; - - const loader = new FileLoader( scope.manager ); - loader.setPath( scope.path ); - loader.setRequestHeader( scope.requestHeader ); - loader.setWithCredentials( scope.withCredentials ); - loader.load( url, function ( text ) { - - try { - - onLoad( scope.parse( JSON.parse( text ) ) ); - - } catch ( e ) { - - if ( onError ) { - - onError( e ); - - } else { - - console.error( e ); - - } - - scope.manager.itemError( url ); - - } - - }, onProgress, onError ); - - }, - - parse: function ( json ) { - - const textures = this.textures; - - function getTexture( name ) { - - if ( textures[ name ] === undefined ) { - - console.warn( 'THREE.MaterialLoader: Undefined texture', name ); - - } - - return textures[ name ]; - - } - - const material = new Materials[ json.type ](); - - if ( json.uuid !== undefined ) material.uuid = json.uuid; - if ( json.name !== undefined ) material.name = json.name; - if ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color ); - if ( json.roughness !== undefined ) material.roughness = json.roughness; - if ( json.metalness !== undefined ) material.metalness = json.metalness; - if ( json.sheen !== undefined ) material.sheen = new Color().setHex( json.sheen ); - if ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive ); - if ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular ); - if ( json.shininess !== undefined ) material.shininess = json.shininess; - if ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat; - if ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness; - if ( json.fog !== undefined ) material.fog = json.fog; - if ( json.flatShading !== undefined ) material.flatShading = json.flatShading; - if ( json.blending !== undefined ) material.blending = json.blending; - if ( json.combine !== undefined ) material.combine = json.combine; - if ( json.side !== undefined ) material.side = json.side; - if ( json.opacity !== undefined ) material.opacity = json.opacity; - if ( json.transparent !== undefined ) material.transparent = json.transparent; - if ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest; - if ( json.depthTest !== undefined ) material.depthTest = json.depthTest; - if ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite; - if ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite; - - if ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite; - if ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask; - if ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc; - if ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef; - if ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask; - if ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail; - if ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail; - if ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass; - - if ( json.wireframe !== undefined ) material.wireframe = json.wireframe; - if ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth; - if ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap; - if ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin; - - if ( json.rotation !== undefined ) material.rotation = json.rotation; - - if ( json.linewidth !== 1 ) material.linewidth = json.linewidth; - if ( json.dashSize !== undefined ) material.dashSize = json.dashSize; - if ( json.gapSize !== undefined ) material.gapSize = json.gapSize; - if ( json.scale !== undefined ) material.scale = json.scale; - - if ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset; - if ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor; - if ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits; - - if ( json.skinning !== undefined ) material.skinning = json.skinning; - if ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets; - if ( json.morphNormals !== undefined ) material.morphNormals = json.morphNormals; - if ( json.dithering !== undefined ) material.dithering = json.dithering; - - if ( json.vertexTangents !== undefined ) material.vertexTangents = json.vertexTangents; - - if ( json.visible !== undefined ) material.visible = json.visible; - - if ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped; - - if ( json.userData !== undefined ) material.userData = json.userData; - - if ( json.vertexColors !== undefined ) { - - if ( typeof json.vertexColors === 'number' ) { - - material.vertexColors = ( json.vertexColors > 0 ) ? true : false; - - } else { - - material.vertexColors = json.vertexColors; - - } - - } - - // Shader Material - - if ( json.uniforms !== undefined ) { - - for ( const name in json.uniforms ) { - - const uniform = json.uniforms[ name ]; - - material.uniforms[ name ] = {}; - - switch ( uniform.type ) { - - case 't': - material.uniforms[ name ].value = getTexture( uniform.value ); - break; - - case 'c': - material.uniforms[ name ].value = new Color().setHex( uniform.value ); - break; - - case 'v2': - material.uniforms[ name ].value = new Vector2().fromArray( uniform.value ); - break; - - case 'v3': - material.uniforms[ name ].value = new Vector3().fromArray( uniform.value ); - break; - - case 'v4': - material.uniforms[ name ].value = new Vector4().fromArray( uniform.value ); - break; - - case 'm3': - material.uniforms[ name ].value = new Matrix3().fromArray( uniform.value ); - break; - - case 'm4': - material.uniforms[ name ].value = new Matrix4().fromArray( uniform.value ); - break; - - default: - material.uniforms[ name ].value = uniform.value; - - } - - } - - } - - if ( json.defines !== undefined ) material.defines = json.defines; - if ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader; - if ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader; - - if ( json.extensions !== undefined ) { - - for ( const key in json.extensions ) { - - material.extensions[ key ] = json.extensions[ key ]; - - } - - } - - // Deprecated - - if ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading - - // for PointsMaterial - - if ( json.size !== undefined ) material.size = json.size; - if ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation; - - // maps - - if ( json.map !== undefined ) material.map = getTexture( json.map ); - if ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap ); - - if ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap ); - - if ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap ); - if ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale; - - if ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap ); - if ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType; - if ( json.normalScale !== undefined ) { - - let normalScale = json.normalScale; - - if ( Array.isArray( normalScale ) === false ) { - - // Blender exporter used to export a scalar. See #7459 - - normalScale = [ normalScale, normalScale ]; - - } - - material.normalScale = new Vector2().fromArray( normalScale ); - - } - - if ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap ); - if ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale; - if ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias; - - if ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap ); - if ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap ); - - if ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap ); - if ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity; - - if ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap ); - - if ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap ); - if ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity; - - if ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity; - if ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio; - - if ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap ); - if ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity; - - if ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap ); - if ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity; - - if ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap ); - - if ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap ); - if ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap ); - if ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap ); - if ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale ); - - if ( json.transmission !== undefined ) material.transmission = json.transmission; - if ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap ); - - return material; - - }, - - setTextures: function ( value ) { - - this.textures = value; - return this; - - } - - } ); - - const LoaderUtils = { - - decodeText: function ( array ) { - - if ( typeof TextDecoder !== 'undefined' ) { - - return new TextDecoder().decode( array ); - - } - - // Avoid the String.fromCharCode.apply(null, array) shortcut, which - // throws a "maximum call stack size exceeded" error for large arrays. - - let s = ''; - - for ( let i = 0, il = array.length; i < il; i ++ ) { - - // Implicitly assumes little-endian. - s += String.fromCharCode( array[ i ] ); - - } - - try { - - // merges multi-byte utf-8 characters. - - return decodeURIComponent( escape( s ) ); - - } catch ( e ) { // see #16358 - - return s; - - } - - }, - - extractUrlBase: function ( url ) { - - const index = url.lastIndexOf( '/' ); - - if ( index === - 1 ) return './'; - - return url.substr( 0, index + 1 ); - - } - - }; - - function InstancedBufferGeometry() { - - BufferGeometry.call( this ); - - this.type = 'InstancedBufferGeometry'; - this.instanceCount = Infinity; - - } - - InstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), { - - constructor: InstancedBufferGeometry, - - isInstancedBufferGeometry: true, - - copy: function ( source ) { - - BufferGeometry.prototype.copy.call( this, source ); - - this.instanceCount = source.instanceCount; - - return this; - - }, - - clone: function () { - - return new this.constructor().copy( this ); - - }, - - toJSON: function () { - - const data = BufferGeometry.prototype.toJSON.call( this ); - - data.instanceCount = this.instanceCount; - - data.isInstancedBufferGeometry = true; - - return data; - - } - - } ); - - function InstancedBufferAttribute( array, itemSize, normalized, meshPerAttribute ) { - - if ( typeof ( normalized ) === 'number' ) { - - meshPerAttribute = normalized; - - normalized = false; - - console.error( 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.' ); - - } - - BufferAttribute.call( this, array, itemSize, normalized ); - - this.meshPerAttribute = meshPerAttribute || 1; - - } - - InstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), { - - constructor: InstancedBufferAttribute, - - isInstancedBufferAttribute: true, - - copy: function ( source ) { - - BufferAttribute.prototype.copy.call( this, source ); - - this.meshPerAttribute = source.meshPerAttribute; - - return this; - - }, - - toJSON: function () { - - const data = BufferAttribute.prototype.toJSON.call( this ); - - data.meshPerAttribute = this.meshPerAttribute; - - data.isInstancedBufferAttribute = true; - - return data; - - } - - } ); - - function BufferGeometryLoader( manager ) { - - Loader.call( this, manager ); - - } - - BufferGeometryLoader.prototype = Object.assign( Object.create( Loader.prototype ), { - - constructor: BufferGeometryLoader, - - load: function ( url, onLoad, onProgress, onError ) { - - const scope = this; - - const loader = new FileLoader( scope.manager ); - loader.setPath( scope.path ); - loader.setRequestHeader( scope.requestHeader ); - loader.setWithCredentials( scope.withCredentials ); - loader.load( url, function ( text ) { - - try { - - onLoad( scope.parse( JSON.parse( text ) ) ); - - } catch ( e ) { - - if ( onError ) { - - onError( e ); - - } else { - - console.error( e ); - - } - - scope.manager.itemError( url ); - - } - - }, onProgress, onError ); - - }, - - parse: function ( json ) { - - const interleavedBufferMap = {}; - const arrayBufferMap = {}; - - function getInterleavedBuffer( json, uuid ) { - - if ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ]; - - const interleavedBuffers = json.interleavedBuffers; - const interleavedBuffer = interleavedBuffers[ uuid ]; - - const buffer = getArrayBuffer( json, interleavedBuffer.buffer ); - - const array = getTypedArray( interleavedBuffer.type, buffer ); - const ib = new InterleavedBuffer( array, interleavedBuffer.stride ); - ib.uuid = interleavedBuffer.uuid; - - interleavedBufferMap[ uuid ] = ib; - - return ib; - - } - - function getArrayBuffer( json, uuid ) { - - if ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ]; - - const arrayBuffers = json.arrayBuffers; - const arrayBuffer = arrayBuffers[ uuid ]; - - const ab = new Uint32Array( arrayBuffer ).buffer; - - arrayBufferMap[ uuid ] = ab; - - return ab; - - } - - const geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry(); - - const index = json.data.index; - - if ( index !== undefined ) { - - const typedArray = getTypedArray( index.type, index.array ); - geometry.setIndex( new BufferAttribute( typedArray, 1 ) ); - - } - - const attributes = json.data.attributes; - - for ( const key in attributes ) { - - const attribute = attributes[ key ]; - let bufferAttribute; - - if ( attribute.isInterleavedBufferAttribute ) { - - const interleavedBuffer = getInterleavedBuffer( json.data, attribute.data ); - bufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized ); - - } else { - - const typedArray = getTypedArray( attribute.type, attribute.array ); - const bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute; - bufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized ); - - } - - if ( attribute.name !== undefined ) bufferAttribute.name = attribute.name; - geometry.setAttribute( key, bufferAttribute ); - - } - - const morphAttributes = json.data.morphAttributes; - - if ( morphAttributes ) { - - for ( const key in morphAttributes ) { - - const attributeArray = morphAttributes[ key ]; - - const array = []; - - for ( let i = 0, il = attributeArray.length; i < il; i ++ ) { - - const attribute = attributeArray[ i ]; - let bufferAttribute; - - if ( attribute.isInterleavedBufferAttribute ) { - - const interleavedBuffer = getInterleavedBuffer( json.data, attribute.data ); - bufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized ); - - } else { - - const typedArray = getTypedArray( attribute.type, attribute.array ); - bufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ); - - } - - if ( attribute.name !== undefined ) bufferAttribute.name = attribute.name; - array.push( bufferAttribute ); - - } - - geometry.morphAttributes[ key ] = array; - - } - - } - - const morphTargetsRelative = json.data.morphTargetsRelative; - - if ( morphTargetsRelative ) { - - geometry.morphTargetsRelative = true; - - } - - const groups = json.data.groups || json.data.drawcalls || json.data.offsets; - - if ( groups !== undefined ) { - - for ( let i = 0, n = groups.length; i !== n; ++ i ) { - - const group = groups[ i ]; - - geometry.addGroup( group.start, group.count, group.materialIndex ); - - } - - } - - const boundingSphere = json.data.boundingSphere; - - if ( boundingSphere !== undefined ) { - - const center = new Vector3(); - - if ( boundingSphere.center !== undefined ) { - - center.fromArray( boundingSphere.center ); - - } - - geometry.boundingSphere = new Sphere( center, boundingSphere.radius ); - - } - - if ( json.name ) geometry.name = json.name; - if ( json.userData ) geometry.userData = json.userData; - - return geometry; - - } - - } ); - - function ImageBitmapLoader( manager ) { - - if ( typeof createImageBitmap === 'undefined' ) { - - console.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' ); - - } - - if ( typeof fetch === 'undefined' ) { - - console.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' ); - - } - - Loader.call( this, manager ); - - this.options = { premultiplyAlpha: 'none' }; - - } - - ImageBitmapLoader.prototype = Object.assign( Object.create( Loader.prototype ), { - - constructor: ImageBitmapLoader, - - isImageBitmapLoader: true, - - setOptions: function setOptions( options ) { - - this.options = options; - - return this; - - }, - - load: function ( url, onLoad, onProgress, onError ) { - - if ( url === undefined ) url = ''; - - if ( this.path !== undefined ) url = this.path + url; - - url = this.manager.resolveURL( url ); - - const scope = this; - - const cached = Cache.get( url ); - - if ( cached !== undefined ) { - - scope.manager.itemStart( url ); - - setTimeout( function () { - - if ( onLoad ) onLoad( cached ); - - scope.manager.itemEnd( url ); - - }, 0 ); - - return cached; - - } - - const fetchOptions = {}; - fetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include'; - - fetch( url, fetchOptions ).then( function ( res ) { - - return res.blob(); - - } ).then( function ( blob ) { - - return createImageBitmap( blob, scope.options ); - - } ).then( function ( imageBitmap ) { - - Cache.add( url, imageBitmap ); - - if ( onLoad ) onLoad( imageBitmap ); - - scope.manager.itemEnd( url ); - - } ).catch( function ( e ) { - - if ( onError ) onError( e ); - - scope.manager.itemError( url ); - scope.manager.itemEnd( url ); - - } ); - - scope.manager.itemStart( url ); - - } - - } ); - - function ShapePath() { - - this.type = 'ShapePath'; - - this.color = new Color(); - - this.subPaths = []; - this.currentPath = null; - - } - - Object.assign( ShapePath.prototype, { - - moveTo: function ( x, y ) { - - this.currentPath = new Path(); - this.subPaths.push( this.currentPath ); - this.currentPath.moveTo( x, y ); - - return this; - - }, - - lineTo: function ( x, y ) { - - this.currentPath.lineTo( x, y ); - - return this; - - }, - - quadraticCurveTo: function ( aCPx, aCPy, aX, aY ) { - - this.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY ); - - return this; - - }, - - bezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { - - this.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ); - - return this; - - }, - - splineThru: function ( pts ) { - - this.currentPath.splineThru( pts ); - - return this; - - }, - - toShapes: function ( isCCW, noHoles ) { - - function toShapesNoHoles( inSubpaths ) { - - const shapes = []; - - for ( let i = 0, l = inSubpaths.length; i < l; i ++ ) { - - const tmpPath = inSubpaths[ i ]; - - const tmpShape = new Shape(); - tmpShape.curves = tmpPath.curves; - - shapes.push( tmpShape ); - - } - - return shapes; - - } - - function isPointInsidePolygon( inPt, inPolygon ) { - - const polyLen = inPolygon.length; - - // inPt on polygon contour => immediate success or - // toggling of inside/outside at every single! intersection point of an edge - // with the horizontal line through inPt, left of inPt - // not counting lowerY endpoints of edges and whole edges on that line - let inside = false; - for ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) { - - let edgeLowPt = inPolygon[ p ]; - let edgeHighPt = inPolygon[ q ]; - - let edgeDx = edgeHighPt.x - edgeLowPt.x; - let edgeDy = edgeHighPt.y - edgeLowPt.y; - - if ( Math.abs( edgeDy ) > Number.EPSILON ) { - - // not parallel - if ( edgeDy < 0 ) { - - edgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx; - edgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy; - - } - - if ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) continue; - - if ( inPt.y === edgeLowPt.y ) { - - if ( inPt.x === edgeLowPt.x ) return true; // inPt is on contour ? - // continue; // no intersection or edgeLowPt => doesn't count !!! - - } else { - - const perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y ); - if ( perpEdge === 0 ) return true; // inPt is on contour ? - if ( perpEdge < 0 ) continue; - inside = ! inside; // true intersection left of inPt - - } - - } else { - - // parallel or collinear - if ( inPt.y !== edgeLowPt.y ) continue; // parallel - // edge lies on the same horizontal line as inPt - if ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) || - ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) ) return true; // inPt: Point on contour ! - // continue; - - } - - } - - return inside; - - } - - const isClockWise = ShapeUtils.isClockWise; - - const subPaths = this.subPaths; - if ( subPaths.length === 0 ) return []; - - if ( noHoles === true ) return toShapesNoHoles( subPaths ); - - - let solid, tmpPath, tmpShape; - const shapes = []; - - if ( subPaths.length === 1 ) { - - tmpPath = subPaths[ 0 ]; - tmpShape = new Shape(); - tmpShape.curves = tmpPath.curves; - shapes.push( tmpShape ); - return shapes; - - } - - let holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() ); - holesFirst = isCCW ? ! holesFirst : holesFirst; - - // console.log("Holes first", holesFirst); - - const betterShapeHoles = []; - const newShapes = []; - let newShapeHoles = []; - let mainIdx = 0; - let tmpPoints; - - newShapes[ mainIdx ] = undefined; - newShapeHoles[ mainIdx ] = []; - - for ( let i = 0, l = subPaths.length; i < l; i ++ ) { - - tmpPath = subPaths[ i ]; - tmpPoints = tmpPath.getPoints(); - solid = isClockWise( tmpPoints ); - solid = isCCW ? ! solid : solid; - - if ( solid ) { - - if ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) ) mainIdx ++; - - newShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints }; - newShapes[ mainIdx ].s.curves = tmpPath.curves; - - if ( holesFirst ) mainIdx ++; - newShapeHoles[ mainIdx ] = []; - - //console.log('cw', i); - - } else { - - newShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } ); - - //console.log('ccw', i); - - } - - } - - // only Holes? -> probably all Shapes with wrong orientation - if ( ! newShapes[ 0 ] ) return toShapesNoHoles( subPaths ); - - - if ( newShapes.length > 1 ) { - - let ambiguous = false; - const toChange = []; - - for ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { - - betterShapeHoles[ sIdx ] = []; - - } - - for ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { - - const sho = newShapeHoles[ sIdx ]; - - for ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) { - - const ho = sho[ hIdx ]; - let hole_unassigned = true; - - for ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) { - - if ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) { - - if ( sIdx !== s2Idx ) toChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } ); - if ( hole_unassigned ) { - - hole_unassigned = false; - betterShapeHoles[ s2Idx ].push( ho ); - - } else { - - ambiguous = true; - - } - - } - - } - - if ( hole_unassigned ) { - - betterShapeHoles[ sIdx ].push( ho ); - - } - - } - - } - // console.log("ambiguous: ", ambiguous); - - if ( toChange.length > 0 ) { - - // console.log("to change: ", toChange); - if ( ! ambiguous ) newShapeHoles = betterShapeHoles; - - } - - } - - let tmpHoles; - - for ( let i = 0, il = newShapes.length; i < il; i ++ ) { - - tmpShape = newShapes[ i ].s; - shapes.push( tmpShape ); - tmpHoles = newShapeHoles[ i ]; - - for ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) { - - tmpShape.holes.push( tmpHoles[ j ].h ); - - } - - } - - //console.log("shape", shapes); - - return shapes; - - } - - } ); - - function Font( data ) { - - this.type = 'Font'; - - this.data = data; - - } - - Object.assign( Font.prototype, { - - isFont: true, - - generateShapes: function ( text, size = 100 ) { - - const shapes = []; - const paths = createPaths( text, size, this.data ); - - for ( let p = 0, pl = paths.length; p < pl; p ++ ) { - - Array.prototype.push.apply( shapes, paths[ p ].toShapes() ); - - } - - return shapes; - - } - - } ); - - function createPaths( text, size, data ) { - - const chars = Array.from ? Array.from( text ) : String( text ).split( '' ); // workaround for IE11, see #13988 - const scale = size / data.resolution; - const line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale; - - const paths = []; - - let offsetX = 0, offsetY = 0; - - for ( let i = 0; i < chars.length; i ++ ) { - - const char = chars[ i ]; - - if ( char === '\n' ) { - - offsetX = 0; - offsetY -= line_height; - - } else { - - const ret = createPath( char, scale, offsetX, offsetY, data ); - offsetX += ret.offsetX; - paths.push( ret.path ); - - } - - } - - return paths; - - } - - function createPath( char, scale, offsetX, offsetY, data ) { - - const glyph = data.glyphs[ char ] || data.glyphs[ '?' ]; - - if ( ! glyph ) { - - console.error( 'THREE.Font: character "' + char + '" does not exists in font family ' + data.familyName + '.' ); - - return; - - } - - const path = new ShapePath(); - - let x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2; - - if ( glyph.o ) { - - const outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) ); - - for ( let i = 0, l = outline.length; i < l; ) { - - const action = outline[ i ++ ]; - - switch ( action ) { - - case 'm': // moveTo - - x = outline[ i ++ ] * scale + offsetX; - y = outline[ i ++ ] * scale + offsetY; - - path.moveTo( x, y ); - - break; - - case 'l': // lineTo - - x = outline[ i ++ ] * scale + offsetX; - y = outline[ i ++ ] * scale + offsetY; - - path.lineTo( x, y ); - - break; - - case 'q': // quadraticCurveTo - - cpx = outline[ i ++ ] * scale + offsetX; - cpy = outline[ i ++ ] * scale + offsetY; - cpx1 = outline[ i ++ ] * scale + offsetX; - cpy1 = outline[ i ++ ] * scale + offsetY; - - path.quadraticCurveTo( cpx1, cpy1, cpx, cpy ); - - break; - - case 'b': // bezierCurveTo - - cpx = outline[ i ++ ] * scale + offsetX; - cpy = outline[ i ++ ] * scale + offsetY; - cpx1 = outline[ i ++ ] * scale + offsetX; - cpy1 = outline[ i ++ ] * scale + offsetY; - cpx2 = outline[ i ++ ] * scale + offsetX; - cpy2 = outline[ i ++ ] * scale + offsetY; - - path.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy ); - - break; - - } - - } - - } - - return { offsetX: glyph.ha * scale, path: path }; - - } - - function FontLoader( manager ) { - - Loader.call( this, manager ); - - } - - FontLoader.prototype = Object.assign( Object.create( Loader.prototype ), { - - constructor: FontLoader, - - load: function ( url, onLoad, onProgress, onError ) { - - const scope = this; - - const loader = new FileLoader( this.manager ); - loader.setPath( this.path ); - loader.setRequestHeader( this.requestHeader ); - loader.setWithCredentials( scope.withCredentials ); - loader.load( url, function ( text ) { - - let json; - - try { - - json = JSON.parse( text ); - - } catch ( e ) { - - console.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' ); - json = JSON.parse( text.substring( 65, text.length - 2 ) ); - - } - - const font = scope.parse( json ); - - if ( onLoad ) onLoad( font ); - - }, onProgress, onError ); - - }, - - parse: function ( json ) { - - return new Font( json ); - - } - - } ); - - let _context; - - const AudioContext = { - - getContext: function () { - - if ( _context === undefined ) { - - _context = new ( window.AudioContext || window.webkitAudioContext )(); - - } - - return _context; - - }, - - setContext: function ( value ) { - - _context = value; - - } - - }; - - function AudioLoader( manager ) { - - Loader.call( this, manager ); - - } - - AudioLoader.prototype = Object.assign( Object.create( Loader.prototype ), { - - constructor: AudioLoader, - - load: function ( url, onLoad, onProgress, onError ) { - - const scope = this; - - const loader = new FileLoader( scope.manager ); - loader.setResponseType( 'arraybuffer' ); - loader.setPath( scope.path ); - loader.setRequestHeader( scope.requestHeader ); - loader.setWithCredentials( scope.withCredentials ); - loader.load( url, function ( buffer ) { - - try { - - // Create a copy of the buffer. The `decodeAudioData` method - // detaches the buffer when complete, preventing reuse. - const bufferCopy = buffer.slice( 0 ); - - const context = AudioContext.getContext(); - context.decodeAudioData( bufferCopy, function ( audioBuffer ) { - - onLoad( audioBuffer ); - - } ); - - } catch ( e ) { - - if ( onError ) { - - onError( e ); - - } else { - - console.error( e ); - - } - - scope.manager.itemError( url ); - - } - - }, onProgress, onError ); - - } - - } ); - - function HemisphereLightProbe( skyColor, groundColor, intensity ) { - - LightProbe.call( this, undefined, intensity ); - - const color1 = new Color().set( skyColor ); - const color2 = new Color().set( groundColor ); - - const sky = new Vector3( color1.r, color1.g, color1.b ); - const ground = new Vector3( color2.r, color2.g, color2.b ); - - // without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI ); - const c0 = Math.sqrt( Math.PI ); - const c1 = c0 * Math.sqrt( 0.75 ); - - this.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 ); - this.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 ); - - } - - HemisphereLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), { - - constructor: HemisphereLightProbe, - - isHemisphereLightProbe: true, - - copy: function ( source ) { // modifying colors not currently supported - - LightProbe.prototype.copy.call( this, source ); - - return this; - - }, - - toJSON: function ( meta ) { - - const data = LightProbe.prototype.toJSON.call( this, meta ); - - // data.sh = this.sh.toArray(); // todo - - return data; - - } - - } ); - - function AmbientLightProbe( color, intensity ) { - - LightProbe.call( this, undefined, intensity ); - - const color1 = new Color().set( color ); - - // without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI ); - this.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) ); - - } - - AmbientLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), { - - constructor: AmbientLightProbe, - - isAmbientLightProbe: true, - - copy: function ( source ) { // modifying color not currently supported - - LightProbe.prototype.copy.call( this, source ); - - return this; - - }, - - toJSON: function ( meta ) { - - const data = LightProbe.prototype.toJSON.call( this, meta ); - - // data.sh = this.sh.toArray(); // todo - - return data; - - } - - } ); - - const _eyeRight = new Matrix4(); - const _eyeLeft = new Matrix4(); - - function StereoCamera() { - - this.type = 'StereoCamera'; - - this.aspect = 1; - - this.eyeSep = 0.064; - - this.cameraL = new PerspectiveCamera(); - this.cameraL.layers.enable( 1 ); - this.cameraL.matrixAutoUpdate = false; - - this.cameraR = new PerspectiveCamera(); - this.cameraR.layers.enable( 2 ); - this.cameraR.matrixAutoUpdate = false; - - this._cache = { - focus: null, - fov: null, - aspect: null, - near: null, - far: null, - zoom: null, - eyeSep: null - }; - - } - - Object.assign( StereoCamera.prototype, { - - update: function ( camera ) { - - const cache = this._cache; - - const needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov || - cache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near || - cache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep; - - if ( needsUpdate ) { - - cache.focus = camera.focus; - cache.fov = camera.fov; - cache.aspect = camera.aspect * this.aspect; - cache.near = camera.near; - cache.far = camera.far; - cache.zoom = camera.zoom; - cache.eyeSep = this.eyeSep; - - // Off-axis stereoscopic effect based on - // http://paulbourke.net/stereographics/stereorender/ - - const projectionMatrix = camera.projectionMatrix.clone(); - const eyeSepHalf = cache.eyeSep / 2; - const eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus; - const ymax = ( cache.near * Math.tan( MathUtils.DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom; - let xmin, xmax; - - // translate xOffset - - _eyeLeft.elements[ 12 ] = - eyeSepHalf; - _eyeRight.elements[ 12 ] = eyeSepHalf; - - // for left eye - - xmin = - ymax * cache.aspect + eyeSepOnProjection; - xmax = ymax * cache.aspect + eyeSepOnProjection; - - projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin ); - projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); - - this.cameraL.projectionMatrix.copy( projectionMatrix ); - - // for right eye - - xmin = - ymax * cache.aspect - eyeSepOnProjection; - xmax = ymax * cache.aspect - eyeSepOnProjection; - - projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin ); - projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); - - this.cameraR.projectionMatrix.copy( projectionMatrix ); - - } - - this.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft ); - this.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight ); - - } - - } ); - - class Clock { - - constructor( autoStart ) { - - this.autoStart = ( autoStart !== undefined ) ? autoStart : true; - - this.startTime = 0; - this.oldTime = 0; - this.elapsedTime = 0; - - this.running = false; - - } - - start() { - - this.startTime = now$3(); - - this.oldTime = this.startTime; - this.elapsedTime = 0; - this.running = true; - - } - - stop() { - - this.getElapsedTime(); - this.running = false; - this.autoStart = false; - - } - - getElapsedTime() { - - this.getDelta(); - return this.elapsedTime; - - } - - getDelta() { - - let diff = 0; - - if ( this.autoStart && ! this.running ) { - - this.start(); - return 0; - - } - - if ( this.running ) { - - const newTime = now$3(); - - diff = ( newTime - this.oldTime ) / 1000; - this.oldTime = newTime; - - this.elapsedTime += diff; - - } - - return diff; - - } - - } - - function now$3() { - - return ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732 - - } - - class Audio extends Object3D { - - constructor( listener ) { - - super(); - - this.type = 'Audio'; - - this.listener = listener; - this.context = listener.context; - - this.gain = this.context.createGain(); - this.gain.connect( listener.getInput() ); - - this.autoplay = false; - - this.buffer = null; - this.detune = 0; - this.loop = false; - this.loopStart = 0; - this.loopEnd = 0; - this.offset = 0; - this.duration = undefined; - this.playbackRate = 1; - this.isPlaying = false; - this.hasPlaybackControl = true; - this.source = null; - this.sourceType = 'empty'; - - this._startedAt = 0; - this._progress = 0; - this._connected = false; - - this.filters = []; - - } - - getOutput() { - - return this.gain; - - } - - setNodeSource( audioNode ) { - - this.hasPlaybackControl = false; - this.sourceType = 'audioNode'; - this.source = audioNode; - this.connect(); - - return this; - - } - - setMediaElementSource( mediaElement ) { - - this.hasPlaybackControl = false; - this.sourceType = 'mediaNode'; - this.source = this.context.createMediaElementSource( mediaElement ); - this.connect(); - - return this; - - } - - setMediaStreamSource( mediaStream ) { - - this.hasPlaybackControl = false; - this.sourceType = 'mediaStreamNode'; - this.source = this.context.createMediaStreamSource( mediaStream ); - this.connect(); - - return this; - - } - - setBuffer( audioBuffer ) { - - this.buffer = audioBuffer; - this.sourceType = 'buffer'; - - if ( this.autoplay ) this.play(); - - return this; - - } - - play( delay = 0 ) { - - if ( this.isPlaying === true ) { - - console.warn( 'THREE.Audio: Audio is already playing.' ); - return; - - } - - if ( this.hasPlaybackControl === false ) { - - console.warn( 'THREE.Audio: this Audio has no playback control.' ); - return; - - } - - this._startedAt = this.context.currentTime + delay; - - const source = this.context.createBufferSource(); - source.buffer = this.buffer; - source.loop = this.loop; - source.loopStart = this.loopStart; - source.loopEnd = this.loopEnd; - source.onended = this.onEnded.bind( this ); - source.start( this._startedAt, this._progress + this.offset, this.duration ); - - this.isPlaying = true; - - this.source = source; - - this.setDetune( this.detune ); - this.setPlaybackRate( this.playbackRate ); - - return this.connect(); - - } - - pause() { - - if ( this.hasPlaybackControl === false ) { - - console.warn( 'THREE.Audio: this Audio has no playback control.' ); - return; - - } - - if ( this.isPlaying === true ) { - - // update current progress - - this._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate; - - if ( this.loop === true ) { - - // ensure _progress does not exceed duration with looped audios - - this._progress = this._progress % ( this.duration || this.buffer.duration ); - - } - - this.source.stop(); - this.source.onended = null; - - this.isPlaying = false; - - } - - return this; - - } - - stop() { - - if ( this.hasPlaybackControl === false ) { - - console.warn( 'THREE.Audio: this Audio has no playback control.' ); - return; - - } - - this._progress = 0; - - this.source.stop(); - this.source.onended = null; - this.isPlaying = false; - - return this; - - } - - connect() { - - if ( this.filters.length > 0 ) { - - this.source.connect( this.filters[ 0 ] ); - - for ( let i = 1, l = this.filters.length; i < l; i ++ ) { - - this.filters[ i - 1 ].connect( this.filters[ i ] ); - - } - - this.filters[ this.filters.length - 1 ].connect( this.getOutput() ); - - } else { - - this.source.connect( this.getOutput() ); - - } - - this._connected = true; - - return this; - - } - - disconnect() { - - if ( this.filters.length > 0 ) { - - this.source.disconnect( this.filters[ 0 ] ); - - for ( let i = 1, l = this.filters.length; i < l; i ++ ) { - - this.filters[ i - 1 ].disconnect( this.filters[ i ] ); - - } - - this.filters[ this.filters.length - 1 ].disconnect( this.getOutput() ); - - } else { - - this.source.disconnect( this.getOutput() ); - - } - - this._connected = false; - - return this; - - } - - getFilters() { - - return this.filters; - - } - - setFilters( value ) { - - if ( ! value ) value = []; - - if ( this._connected === true ) { - - this.disconnect(); - this.filters = value.slice(); - this.connect(); - - } else { - - this.filters = value.slice(); - - } - - return this; - - } - - setDetune( value ) { - - this.detune = value; - - if ( this.source.detune === undefined ) return; // only set detune when available - - if ( this.isPlaying === true ) { - - this.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 ); - - } - - return this; - - } - - getDetune() { - - return this.detune; - - } - - getFilter() { - - return this.getFilters()[ 0 ]; - - } - - setFilter( filter ) { - - return this.setFilters( filter ? [ filter ] : [] ); - - } - - setPlaybackRate( value ) { - - if ( this.hasPlaybackControl === false ) { - - console.warn( 'THREE.Audio: this Audio has no playback control.' ); - return; - - } - - this.playbackRate = value; - - if ( this.isPlaying === true ) { - - this.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 ); - - } - - return this; - - } - - getPlaybackRate() { - - return this.playbackRate; - - } - - onEnded() { - - this.isPlaying = false; - - } - - getLoop() { - - if ( this.hasPlaybackControl === false ) { - - console.warn( 'THREE.Audio: this Audio has no playback control.' ); - return false; - - } - - return this.loop; - - } - - setLoop( value ) { - - if ( this.hasPlaybackControl === false ) { - - console.warn( 'THREE.Audio: this Audio has no playback control.' ); - return; - - } - - this.loop = value; - - if ( this.isPlaying === true ) { - - this.source.loop = this.loop; - - } - - return this; - - } - - setLoopStart( value ) { - - this.loopStart = value; - - return this; - - } - - setLoopEnd( value ) { - - this.loopEnd = value; - - return this; - - } - - getVolume() { - - return this.gain.gain.value; - - } - - setVolume( value ) { - - this.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 ); - - return this; - - } - - } - - function PropertyMixer( binding, typeName, valueSize ) { - - this.binding = binding; - this.valueSize = valueSize; - - let mixFunction, - mixFunctionAdditive, - setIdentity; - - // buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ] - // - // interpolators can use .buffer as their .result - // the data then goes to 'incoming' - // - // 'accu0' and 'accu1' are used frame-interleaved for - // the cumulative result and are compared to detect - // changes - // - // 'orig' stores the original state of the property - // - // 'add' is used for additive cumulative results - // - // 'work' is optional and is only present for quaternion types. It is used - // to store intermediate quaternion multiplication results - - switch ( typeName ) { - - case 'quaternion': - mixFunction = this._slerp; - mixFunctionAdditive = this._slerpAdditive; - setIdentity = this._setAdditiveIdentityQuaternion; - - this.buffer = new Float64Array( valueSize * 6 ); - this._workIndex = 5; - break; - - case 'string': - case 'bool': - mixFunction = this._select; - - // Use the regular mix function and for additive on these types, - // additive is not relevant for non-numeric types - mixFunctionAdditive = this._select; - - setIdentity = this._setAdditiveIdentityOther; - - this.buffer = new Array( valueSize * 5 ); - break; - - default: - mixFunction = this._lerp; - mixFunctionAdditive = this._lerpAdditive; - setIdentity = this._setAdditiveIdentityNumeric; - - this.buffer = new Float64Array( valueSize * 5 ); - - } - - this._mixBufferRegion = mixFunction; - this._mixBufferRegionAdditive = mixFunctionAdditive; - this._setIdentity = setIdentity; - this._origIndex = 3; - this._addIndex = 4; - - this.cumulativeWeight = 0; - this.cumulativeWeightAdditive = 0; - - this.useCount = 0; - this.referenceCount = 0; - - } - - Object.assign( PropertyMixer.prototype, { - - // accumulate data in the 'incoming' region into 'accu' - accumulate: function ( accuIndex, weight ) { - - // note: happily accumulating nothing when weight = 0, the caller knows - // the weight and shouldn't have made the call in the first place - - const buffer = this.buffer, - stride = this.valueSize, - offset = accuIndex * stride + stride; - - let currentWeight = this.cumulativeWeight; - - if ( currentWeight === 0 ) { - - // accuN := incoming * weight - - for ( let i = 0; i !== stride; ++ i ) { - - buffer[ offset + i ] = buffer[ i ]; - - } - - currentWeight = weight; - - } else { - - // accuN := accuN + incoming * weight - - currentWeight += weight; - const mix = weight / currentWeight; - this._mixBufferRegion( buffer, offset, 0, mix, stride ); - - } - - this.cumulativeWeight = currentWeight; - - }, - - // accumulate data in the 'incoming' region into 'add' - accumulateAdditive: function ( weight ) { - - const buffer = this.buffer, - stride = this.valueSize, - offset = stride * this._addIndex; - - if ( this.cumulativeWeightAdditive === 0 ) { - - // add = identity - - this._setIdentity(); - - } - - // add := add + incoming * weight - - this._mixBufferRegionAdditive( buffer, offset, 0, weight, stride ); - this.cumulativeWeightAdditive += weight; - - }, - - // apply the state of 'accu' to the binding when accus differ - apply: function ( accuIndex ) { - - const stride = this.valueSize, - buffer = this.buffer, - offset = accuIndex * stride + stride, - - weight = this.cumulativeWeight, - weightAdditive = this.cumulativeWeightAdditive, - - binding = this.binding; - - this.cumulativeWeight = 0; - this.cumulativeWeightAdditive = 0; - - if ( weight < 1 ) { - - // accuN := accuN + original * ( 1 - cumulativeWeight ) - - const originalValueOffset = stride * this._origIndex; - - this._mixBufferRegion( - buffer, offset, originalValueOffset, 1 - weight, stride ); - - } - - if ( weightAdditive > 0 ) { - - // accuN := accuN + additive accuN - - this._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride ); - - } - - for ( let i = stride, e = stride + stride; i !== e; ++ i ) { - - if ( buffer[ i ] !== buffer[ i + stride ] ) { - - // value has changed -> update scene graph - - binding.setValue( buffer, offset ); - break; - - } - - } - - }, - - // remember the state of the bound property and copy it to both accus - saveOriginalState: function () { - - const binding = this.binding; - - const buffer = this.buffer, - stride = this.valueSize, - - originalValueOffset = stride * this._origIndex; - - binding.getValue( buffer, originalValueOffset ); - - // accu[0..1] := orig -- initially detect changes against the original - for ( let i = stride, e = originalValueOffset; i !== e; ++ i ) { - - buffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ]; - - } - - // Add to identity for additive - this._setIdentity(); - - this.cumulativeWeight = 0; - this.cumulativeWeightAdditive = 0; - - }, - - // apply the state previously taken via 'saveOriginalState' to the binding - restoreOriginalState: function () { - - const originalValueOffset = this.valueSize * 3; - this.binding.setValue( this.buffer, originalValueOffset ); - - }, - - _setAdditiveIdentityNumeric: function () { - - const startIndex = this._addIndex * this.valueSize; - const endIndex = startIndex + this.valueSize; - - for ( let i = startIndex; i < endIndex; i ++ ) { - - this.buffer[ i ] = 0; - - } - - }, - - _setAdditiveIdentityQuaternion: function () { - - this._setAdditiveIdentityNumeric(); - this.buffer[ this._addIndex * this.valueSize + 3 ] = 1; - - }, - - _setAdditiveIdentityOther: function () { - - const startIndex = this._origIndex * this.valueSize; - const targetIndex = this._addIndex * this.valueSize; - - for ( let i = 0; i < this.valueSize; i ++ ) { - - this.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ]; - - } - - }, - - - // mix functions - - _select: function ( buffer, dstOffset, srcOffset, t, stride ) { - - if ( t >= 0.5 ) { - - for ( let i = 0; i !== stride; ++ i ) { - - buffer[ dstOffset + i ] = buffer[ srcOffset + i ]; - - } - - } - - }, - - _slerp: function ( buffer, dstOffset, srcOffset, t ) { - - Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t ); - - }, - - _slerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) { - - const workOffset = this._workIndex * stride; - - // Store result in intermediate buffer offset - Quaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset ); - - // Slerp to the intermediate result - Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t ); - - }, - - _lerp: function ( buffer, dstOffset, srcOffset, t, stride ) { - - const s = 1 - t; - - for ( let i = 0; i !== stride; ++ i ) { - - const j = dstOffset + i; - - buffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t; - - } - - }, - - _lerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) { - - for ( let i = 0; i !== stride; ++ i ) { - - const j = dstOffset + i; - - buffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t; - - } - - } - - } ); - - // Characters [].:/ are reserved for track binding syntax. - const _RESERVED_CHARS_RE = '\\[\\]\\.:\\/'; - const _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' ); - - // Attempts to allow node names from any language. ES5's `\w` regexp matches - // only latin characters, and the unicode \p{L} is not yet supported. So - // instead, we exclude reserved characters and match everything else. - const _wordChar = '[^' + _RESERVED_CHARS_RE + ']'; - const _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\.', '' ) + ']'; - - // Parent directories, delimited by '/' or ':'. Currently unused, but must - // be matched to parse the rest of the track name. - const _directoryRe = /((?:WC+[\/:])*)/.source.replace( 'WC', _wordChar ); - - // Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'. - const _nodeRe = /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot ); - - // Object on target node, and accessor. May not contain reserved - // characters. Accessor may contain any character except closing bracket. - const _objectRe = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace( 'WC', _wordChar ); - - // Property and accessor. May not contain reserved characters. Accessor may - // contain any non-bracket characters. - const _propertyRe = /\.(WC+)(?:\[(.+)\])?/.source.replace( 'WC', _wordChar ); - - const _trackRe = new RegExp( '' - + '^' - + _directoryRe - + _nodeRe - + _objectRe - + _propertyRe - + '$' - ); - - const _supportedObjectNames = [ 'material', 'materials', 'bones' ]; - - function Composite( targetGroup, path, optionalParsedPath ) { - - const parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path ); - - this._targetGroup = targetGroup; - this._bindings = targetGroup.subscribe_( path, parsedPath ); - - } - - Object.assign( Composite.prototype, { - - getValue: function ( array, offset ) { - - this.bind(); // bind all binding - - const firstValidIndex = this._targetGroup.nCachedObjects_, - binding = this._bindings[ firstValidIndex ]; - - // and only call .getValue on the first - if ( binding !== undefined ) binding.getValue( array, offset ); - - }, - - setValue: function ( array, offset ) { - - const bindings = this._bindings; - - for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { - - bindings[ i ].setValue( array, offset ); - - } - - }, - - bind: function () { - - const bindings = this._bindings; - - for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { - - bindings[ i ].bind(); - - } - - }, - - unbind: function () { - - const bindings = this._bindings; - - for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { - - bindings[ i ].unbind(); - - } - - } - - } ); - - - function PropertyBinding( rootNode, path, parsedPath ) { - - this.path = path; - this.parsedPath = parsedPath || PropertyBinding.parseTrackName( path ); - - this.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode; - - this.rootNode = rootNode; - - } - - Object.assign( PropertyBinding, { - - Composite: Composite, - - create: function ( root, path, parsedPath ) { - - if ( ! ( root && root.isAnimationObjectGroup ) ) { - - return new PropertyBinding( root, path, parsedPath ); - - } else { - - return new PropertyBinding.Composite( root, path, parsedPath ); - - } - - }, - - /** - * Replaces spaces with underscores and removes unsupported characters from - * node names, to ensure compatibility with parseTrackName(). - * - * @param {string} name Node name to be sanitized. - * @return {string} - */ - sanitizeNodeName: function ( name ) { - - return name.replace( /\s/g, '_' ).replace( _reservedRe, '' ); - - }, - - parseTrackName: function ( trackName ) { - - const matches = _trackRe.exec( trackName ); - - if ( ! matches ) { - - throw new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName ); - - } - - const results = { - // directoryName: matches[ 1 ], // (tschw) currently unused - nodeName: matches[ 2 ], - objectName: matches[ 3 ], - objectIndex: matches[ 4 ], - propertyName: matches[ 5 ], // required - propertyIndex: matches[ 6 ] - }; - - const lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' ); - - if ( lastDot !== undefined && lastDot !== - 1 ) { - - const objectName = results.nodeName.substring( lastDot + 1 ); - - // Object names must be checked against an allowlist. Otherwise, there - // is no way to parse 'foo.bar.baz': 'baz' must be a property, but - // 'bar' could be the objectName, or part of a nodeName (which can - // include '.' characters). - if ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) { - - results.nodeName = results.nodeName.substring( 0, lastDot ); - results.objectName = objectName; - - } - - } - - if ( results.propertyName === null || results.propertyName.length === 0 ) { - - throw new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName ); - - } - - return results; - - }, - - findNode: function ( root, nodeName ) { - - if ( ! nodeName || nodeName === "" || nodeName === "." || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) { - - return root; - - } - - // search into skeleton bones. - if ( root.skeleton ) { - - const bone = root.skeleton.getBoneByName( nodeName ); - - if ( bone !== undefined ) { - - return bone; - - } - - } - - // search into node subtree. - if ( root.children ) { - - const searchNodeSubtree = function ( children ) { - - for ( let i = 0; i < children.length; i ++ ) { - - const childNode = children[ i ]; - - if ( childNode.name === nodeName || childNode.uuid === nodeName ) { - - return childNode; - - } - - const result = searchNodeSubtree( childNode.children ); - - if ( result ) return result; - - } - - return null; - - }; - - const subTreeNode = searchNodeSubtree( root.children ); - - if ( subTreeNode ) { - - return subTreeNode; - - } - - } - - return null; - - } - - } ); - - Object.assign( PropertyBinding.prototype, { // prototype, continued - - // these are used to "bind" a nonexistent property - _getValue_unavailable: function () {}, - _setValue_unavailable: function () {}, - - BindingType: { - Direct: 0, - EntireArray: 1, - ArrayElement: 2, - HasFromToArray: 3 - }, - - Versioning: { - None: 0, - NeedsUpdate: 1, - MatrixWorldNeedsUpdate: 2 - }, - - GetterByBindingType: [ - - function getValue_direct( buffer, offset ) { - - buffer[ offset ] = this.node[ this.propertyName ]; - - }, - - function getValue_array( buffer, offset ) { - - const source = this.resolvedProperty; - - for ( let i = 0, n = source.length; i !== n; ++ i ) { - - buffer[ offset ++ ] = source[ i ]; - - } - - }, - - function getValue_arrayElement( buffer, offset ) { - - buffer[ offset ] = this.resolvedProperty[ this.propertyIndex ]; - - }, - - function getValue_toArray( buffer, offset ) { - - this.resolvedProperty.toArray( buffer, offset ); - - } - - ], - - SetterByBindingTypeAndVersioning: [ - - [ - // Direct - - function setValue_direct( buffer, offset ) { - - this.targetObject[ this.propertyName ] = buffer[ offset ]; - - }, - - function setValue_direct_setNeedsUpdate( buffer, offset ) { - - this.targetObject[ this.propertyName ] = buffer[ offset ]; - this.targetObject.needsUpdate = true; - - }, - - function setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) { - - this.targetObject[ this.propertyName ] = buffer[ offset ]; - this.targetObject.matrixWorldNeedsUpdate = true; - - } - - ], [ - - // EntireArray - - function setValue_array( buffer, offset ) { - - const dest = this.resolvedProperty; - - for ( let i = 0, n = dest.length; i !== n; ++ i ) { - - dest[ i ] = buffer[ offset ++ ]; - - } - - }, - - function setValue_array_setNeedsUpdate( buffer, offset ) { - - const dest = this.resolvedProperty; - - for ( let i = 0, n = dest.length; i !== n; ++ i ) { - - dest[ i ] = buffer[ offset ++ ]; - - } - - this.targetObject.needsUpdate = true; - - }, - - function setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) { - - const dest = this.resolvedProperty; - - for ( let i = 0, n = dest.length; i !== n; ++ i ) { - - dest[ i ] = buffer[ offset ++ ]; - - } - - this.targetObject.matrixWorldNeedsUpdate = true; - - } - - ], [ - - // ArrayElement - - function setValue_arrayElement( buffer, offset ) { - - this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; - - }, - - function setValue_arrayElement_setNeedsUpdate( buffer, offset ) { - - this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; - this.targetObject.needsUpdate = true; - - }, - - function setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) { - - this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; - this.targetObject.matrixWorldNeedsUpdate = true; - - } - - ], [ - - // HasToFromArray - - function setValue_fromArray( buffer, offset ) { - - this.resolvedProperty.fromArray( buffer, offset ); - - }, - - function setValue_fromArray_setNeedsUpdate( buffer, offset ) { - - this.resolvedProperty.fromArray( buffer, offset ); - this.targetObject.needsUpdate = true; - - }, - - function setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) { - - this.resolvedProperty.fromArray( buffer, offset ); - this.targetObject.matrixWorldNeedsUpdate = true; - - } - - ] - - ], - - getValue: function getValue_unbound( targetArray, offset ) { - - this.bind(); - this.getValue( targetArray, offset ); - - // Note: This class uses a State pattern on a per-method basis: - // 'bind' sets 'this.getValue' / 'setValue' and shadows the - // prototype version of these methods with one that represents - // the bound state. When the property is not found, the methods - // become no-ops. - - }, - - setValue: function getValue_unbound( sourceArray, offset ) { - - this.bind(); - this.setValue( sourceArray, offset ); - - }, - - // create getter / setter pair for a property in the scene graph - bind: function () { - - let targetObject = this.node; - const parsedPath = this.parsedPath; - - const objectName = parsedPath.objectName; - const propertyName = parsedPath.propertyName; - let propertyIndex = parsedPath.propertyIndex; - - if ( ! targetObject ) { - - targetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode; - - this.node = targetObject; - - } - - // set fail state so we can just 'return' on error - this.getValue = this._getValue_unavailable; - this.setValue = this._setValue_unavailable; - - // ensure there is a value node - if ( ! targetObject ) { - - console.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\'t found.' ); - return; - - } - - if ( objectName ) { - - let objectIndex = parsedPath.objectIndex; - - // special cases were we need to reach deeper into the hierarchy to get the face materials.... - switch ( objectName ) { - - case 'materials': - - if ( ! targetObject.material ) { - - console.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this ); - return; - - } - - if ( ! targetObject.material.materials ) { - - console.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this ); - return; - - } - - targetObject = targetObject.material.materials; - - break; - - case 'bones': - - if ( ! targetObject.skeleton ) { - - console.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this ); - return; - - } - - // potential future optimization: skip this if propertyIndex is already an integer - // and convert the integer string to a true integer. - - targetObject = targetObject.skeleton.bones; - - // support resolving morphTarget names into indices. - for ( let i = 0; i < targetObject.length; i ++ ) { - - if ( targetObject[ i ].name === objectIndex ) { - - objectIndex = i; - break; - - } - - } - - break; - - default: - - if ( targetObject[ objectName ] === undefined ) { - - console.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this ); - return; - - } - - targetObject = targetObject[ objectName ]; - - } - - - if ( objectIndex !== undefined ) { - - if ( targetObject[ objectIndex ] === undefined ) { - - console.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject ); - return; - - } - - targetObject = targetObject[ objectIndex ]; - - } - - } - - // resolve property - const nodeProperty = targetObject[ propertyName ]; - - if ( nodeProperty === undefined ) { - - const nodeName = parsedPath.nodeName; - - console.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName + - '.' + propertyName + ' but it wasn\'t found.', targetObject ); - return; - - } - - // determine versioning scheme - let versioning = this.Versioning.None; - - this.targetObject = targetObject; - - if ( targetObject.needsUpdate !== undefined ) { // material - - versioning = this.Versioning.NeedsUpdate; - - } else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform - - versioning = this.Versioning.MatrixWorldNeedsUpdate; - - } - - // determine how the property gets bound - let bindingType = this.BindingType.Direct; - - if ( propertyIndex !== undefined ) { - - // access a sub element of the property array (only primitives are supported right now) - - if ( propertyName === "morphTargetInfluences" ) { - - // potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer. - - // support resolving morphTarget names into indices. - if ( ! targetObject.geometry ) { - - console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this ); - return; - - } - - if ( targetObject.geometry.isBufferGeometry ) { - - if ( ! targetObject.geometry.morphAttributes ) { - - console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this ); - return; - - } - - if ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) { - - propertyIndex = targetObject.morphTargetDictionary[ propertyIndex ]; - - } - - - } else { - - console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', this ); - return; - - } - - } - - bindingType = this.BindingType.ArrayElement; - - this.resolvedProperty = nodeProperty; - this.propertyIndex = propertyIndex; - - } else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) { - - // must use copy for Object3D.Euler/Quaternion - - bindingType = this.BindingType.HasFromToArray; - - this.resolvedProperty = nodeProperty; - - } else if ( Array.isArray( nodeProperty ) ) { - - bindingType = this.BindingType.EntireArray; - - this.resolvedProperty = nodeProperty; - - } else { - - this.propertyName = propertyName; - - } - - // select getter / setter - this.getValue = this.GetterByBindingType[ bindingType ]; - this.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ]; - - }, - - unbind: function () { - - this.node = null; - - // back to the prototype version of getValue / setValue - // note: avoiding to mutate the shape of 'this' via 'delete' - this.getValue = this._getValue_unbound; - this.setValue = this._setValue_unbound; - - } - - } ); - - // DECLARE ALIAS AFTER assign prototype - Object.assign( PropertyBinding.prototype, { - - // initial state of these methods that calls 'bind' - _getValue_unbound: PropertyBinding.prototype.getValue, - _setValue_unbound: PropertyBinding.prototype.setValue, - - } ); - - /** - * - * A group of objects that receives a shared animation state. - * - * Usage: - * - * - Add objects you would otherwise pass as 'root' to the - * constructor or the .clipAction method of AnimationMixer. - * - * - Instead pass this object as 'root'. - * - * - You can also add and remove objects later when the mixer - * is running. - * - * Note: - * - * Objects of this class appear as one object to the mixer, - * so cache control of the individual objects must be done - * on the group. - * - * Limitation: - * - * - The animated properties must be compatible among the - * all objects in the group. - * - * - A single property can either be controlled through a - * target group or directly, but not both. - */ - - function AnimationObjectGroup() { - - this.uuid = MathUtils.generateUUID(); - - // cached objects followed by the active ones - this._objects = Array.prototype.slice.call( arguments ); - - this.nCachedObjects_ = 0; // threshold - // note: read by PropertyBinding.Composite - - const indices = {}; - this._indicesByUUID = indices; // for bookkeeping - - for ( let i = 0, n = arguments.length; i !== n; ++ i ) { - - indices[ arguments[ i ].uuid ] = i; - - } - - this._paths = []; // inside: string - this._parsedPaths = []; // inside: { we don't care, here } - this._bindings = []; // inside: Array< PropertyBinding > - this._bindingsIndicesByPath = {}; // inside: indices in these arrays - - const scope = this; - - this.stats = { - - objects: { - get total() { - - return scope._objects.length; - - }, - get inUse() { - - return this.total - scope.nCachedObjects_; - - } - }, - get bindingsPerObject() { - - return scope._bindings.length; - - } - - }; - - } - - Object.assign( AnimationObjectGroup.prototype, { - - isAnimationObjectGroup: true, - - add: function () { - - const objects = this._objects, - indicesByUUID = this._indicesByUUID, - paths = this._paths, - parsedPaths = this._parsedPaths, - bindings = this._bindings, - nBindings = bindings.length; - - let knownObject = undefined, - nObjects = objects.length, - nCachedObjects = this.nCachedObjects_; - - for ( let i = 0, n = arguments.length; i !== n; ++ i ) { - - const object = arguments[ i ], - uuid = object.uuid; - let index = indicesByUUID[ uuid ]; - - if ( index === undefined ) { - - // unknown object -> add it to the ACTIVE region - - index = nObjects ++; - indicesByUUID[ uuid ] = index; - objects.push( object ); - - // accounting is done, now do the same for all bindings - - for ( let j = 0, m = nBindings; j !== m; ++ j ) { - - bindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) ); - - } - - } else if ( index < nCachedObjects ) { - - knownObject = objects[ index ]; - - // move existing object to the ACTIVE region - - const firstActiveIndex = -- nCachedObjects, - lastCachedObject = objects[ firstActiveIndex ]; - - indicesByUUID[ lastCachedObject.uuid ] = index; - objects[ index ] = lastCachedObject; - - indicesByUUID[ uuid ] = firstActiveIndex; - objects[ firstActiveIndex ] = object; - - // accounting is done, now do the same for all bindings - - for ( let j = 0, m = nBindings; j !== m; ++ j ) { - - const bindingsForPath = bindings[ j ], - lastCached = bindingsForPath[ firstActiveIndex ]; - - let binding = bindingsForPath[ index ]; - - bindingsForPath[ index ] = lastCached; - - if ( binding === undefined ) { - - // since we do not bother to create new bindings - // for objects that are cached, the binding may - // or may not exist - - binding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ); - - } - - bindingsForPath[ firstActiveIndex ] = binding; - - } - - } else if ( objects[ index ] !== knownObject ) { - - console.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' + - 'detected. Clean the caches or recreate your infrastructure when reloading scenes.' ); - - } // else the object is already where we want it to be - - } // for arguments - - this.nCachedObjects_ = nCachedObjects; - - }, - - remove: function () { - - const objects = this._objects, - indicesByUUID = this._indicesByUUID, - bindings = this._bindings, - nBindings = bindings.length; - - let nCachedObjects = this.nCachedObjects_; - - for ( let i = 0, n = arguments.length; i !== n; ++ i ) { - - const object = arguments[ i ], - uuid = object.uuid, - index = indicesByUUID[ uuid ]; - - if ( index !== undefined && index >= nCachedObjects ) { - - // move existing object into the CACHED region - - const lastCachedIndex = nCachedObjects ++, - firstActiveObject = objects[ lastCachedIndex ]; - - indicesByUUID[ firstActiveObject.uuid ] = index; - objects[ index ] = firstActiveObject; - - indicesByUUID[ uuid ] = lastCachedIndex; - objects[ lastCachedIndex ] = object; - - // accounting is done, now do the same for all bindings - - for ( let j = 0, m = nBindings; j !== m; ++ j ) { - - const bindingsForPath = bindings[ j ], - firstActive = bindingsForPath[ lastCachedIndex ], - binding = bindingsForPath[ index ]; - - bindingsForPath[ index ] = firstActive; - bindingsForPath[ lastCachedIndex ] = binding; - - } - - } - - } // for arguments - - this.nCachedObjects_ = nCachedObjects; - - }, - - // remove & forget - uncache: function () { - - const objects = this._objects, - indicesByUUID = this._indicesByUUID, - bindings = this._bindings, - nBindings = bindings.length; - - let nCachedObjects = this.nCachedObjects_, - nObjects = objects.length; - - for ( let i = 0, n = arguments.length; i !== n; ++ i ) { - - const object = arguments[ i ], - uuid = object.uuid, - index = indicesByUUID[ uuid ]; - - if ( index !== undefined ) { - - delete indicesByUUID[ uuid ]; - - if ( index < nCachedObjects ) { - - // object is cached, shrink the CACHED region - - const firstActiveIndex = -- nCachedObjects, - lastCachedObject = objects[ firstActiveIndex ], - lastIndex = -- nObjects, - lastObject = objects[ lastIndex ]; - - // last cached object takes this object's place - indicesByUUID[ lastCachedObject.uuid ] = index; - objects[ index ] = lastCachedObject; - - // last object goes to the activated slot and pop - indicesByUUID[ lastObject.uuid ] = firstActiveIndex; - objects[ firstActiveIndex ] = lastObject; - objects.pop(); - - // accounting is done, now do the same for all bindings - - for ( let j = 0, m = nBindings; j !== m; ++ j ) { - - const bindingsForPath = bindings[ j ], - lastCached = bindingsForPath[ firstActiveIndex ], - last = bindingsForPath[ lastIndex ]; - - bindingsForPath[ index ] = lastCached; - bindingsForPath[ firstActiveIndex ] = last; - bindingsForPath.pop(); - - } - - } else { - - // object is active, just swap with the last and pop - - const lastIndex = -- nObjects, - lastObject = objects[ lastIndex ]; - - if ( lastIndex > 0 ) { - - indicesByUUID[ lastObject.uuid ] = index; - - } - - objects[ index ] = lastObject; - objects.pop(); - - // accounting is done, now do the same for all bindings - - for ( let j = 0, m = nBindings; j !== m; ++ j ) { - - const bindingsForPath = bindings[ j ]; - - bindingsForPath[ index ] = bindingsForPath[ lastIndex ]; - bindingsForPath.pop(); - - } - - } // cached or active - - } // if object is known - - } // for arguments - - this.nCachedObjects_ = nCachedObjects; - - }, - - // Internal interface used by befriended PropertyBinding.Composite: - - subscribe_: function ( path, parsedPath ) { - - // returns an array of bindings for the given path that is changed - // according to the contained objects in the group - - const indicesByPath = this._bindingsIndicesByPath; - let index = indicesByPath[ path ]; - const bindings = this._bindings; - - if ( index !== undefined ) return bindings[ index ]; - - const paths = this._paths, - parsedPaths = this._parsedPaths, - objects = this._objects, - nObjects = objects.length, - nCachedObjects = this.nCachedObjects_, - bindingsForPath = new Array( nObjects ); - - index = bindings.length; - - indicesByPath[ path ] = index; - - paths.push( path ); - parsedPaths.push( parsedPath ); - bindings.push( bindingsForPath ); - - for ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) { - - const object = objects[ i ]; - bindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath ); - - } - - return bindingsForPath; - - }, - - unsubscribe_: function ( path ) { - - // tells the group to forget about a property path and no longer - // update the array previously obtained with 'subscribe_' - - const indicesByPath = this._bindingsIndicesByPath, - index = indicesByPath[ path ]; - - if ( index !== undefined ) { - - const paths = this._paths, - parsedPaths = this._parsedPaths, - bindings = this._bindings, - lastBindingsIndex = bindings.length - 1, - lastBindings = bindings[ lastBindingsIndex ], - lastBindingsPath = path[ lastBindingsIndex ]; - - indicesByPath[ lastBindingsPath ] = index; - - bindings[ index ] = lastBindings; - bindings.pop(); - - parsedPaths[ index ] = parsedPaths[ lastBindingsIndex ]; - parsedPaths.pop(); - - paths[ index ] = paths[ lastBindingsIndex ]; - paths.pop(); - - } - - } - - } ); - - class AnimationAction { - - constructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) { - - this._mixer = mixer; - this._clip = clip; - this._localRoot = localRoot; - this.blendMode = blendMode; - - const tracks = clip.tracks, - nTracks = tracks.length, - interpolants = new Array( nTracks ); - - const interpolantSettings = { - endingStart: ZeroCurvatureEnding, - endingEnd: ZeroCurvatureEnding - }; - - for ( let i = 0; i !== nTracks; ++ i ) { - - const interpolant = tracks[ i ].createInterpolant( null ); - interpolants[ i ] = interpolant; - interpolant.settings = interpolantSettings; - - } - - this._interpolantSettings = interpolantSettings; - - this._interpolants = interpolants; // bound by the mixer - - // inside: PropertyMixer (managed by the mixer) - this._propertyBindings = new Array( nTracks ); - - this._cacheIndex = null; // for the memory manager - this._byClipCacheIndex = null; // for the memory manager - - this._timeScaleInterpolant = null; - this._weightInterpolant = null; - - this.loop = LoopRepeat; - this._loopCount = - 1; - - // global mixer time when the action is to be started - // it's set back to 'null' upon start of the action - this._startTime = null; - - // scaled local time of the action - // gets clamped or wrapped to 0..clip.duration according to loop - this.time = 0; - - this.timeScale = 1; - this._effectiveTimeScale = 1; - - this.weight = 1; - this._effectiveWeight = 1; - - this.repetitions = Infinity; // no. of repetitions when looping - - this.paused = false; // true -> zero effective time scale - this.enabled = true; // false -> zero effective weight - - this.clampWhenFinished = false;// keep feeding the last frame? - - this.zeroSlopeAtStart = true;// for smooth interpolation w/o separate - this.zeroSlopeAtEnd = true;// clips for start, loop and end - - } - - // State & Scheduling - - play() { - - this._mixer._activateAction( this ); - - return this; - - } - - stop() { - - this._mixer._deactivateAction( this ); - - return this.reset(); - - } - - reset() { - - this.paused = false; - this.enabled = true; - - this.time = 0; // restart clip - this._loopCount = - 1;// forget previous loops - this._startTime = null;// forget scheduling - - return this.stopFading().stopWarping(); - - } - - isRunning() { - - return this.enabled && ! this.paused && this.timeScale !== 0 && - this._startTime === null && this._mixer._isActiveAction( this ); - - } - - // return true when play has been called - isScheduled() { - - return this._mixer._isActiveAction( this ); - - } - - startAt( time ) { - - this._startTime = time; - - return this; - - } - - setLoop( mode, repetitions ) { - - this.loop = mode; - this.repetitions = repetitions; - - return this; - - } - - // Weight - - // set the weight stopping any scheduled fading - // although .enabled = false yields an effective weight of zero, this - // method does *not* change .enabled, because it would be confusing - setEffectiveWeight( weight ) { - - this.weight = weight; - - // note: same logic as when updated at runtime - this._effectiveWeight = this.enabled ? weight : 0; - - return this.stopFading(); - - } - - // return the weight considering fading and .enabled - getEffectiveWeight() { - - return this._effectiveWeight; - - } - - fadeIn( duration ) { - - return this._scheduleFading( duration, 0, 1 ); - - } - - fadeOut( duration ) { - - return this._scheduleFading( duration, 1, 0 ); - - } - - crossFadeFrom( fadeOutAction, duration, warp ) { - - fadeOutAction.fadeOut( duration ); - this.fadeIn( duration ); - - if ( warp ) { - - const fadeInDuration = this._clip.duration, - fadeOutDuration = fadeOutAction._clip.duration, - - startEndRatio = fadeOutDuration / fadeInDuration, - endStartRatio = fadeInDuration / fadeOutDuration; - - fadeOutAction.warp( 1.0, startEndRatio, duration ); - this.warp( endStartRatio, 1.0, duration ); - - } - - return this; - - } - - crossFadeTo( fadeInAction, duration, warp ) { - - return fadeInAction.crossFadeFrom( this, duration, warp ); - - } - - stopFading() { - - const weightInterpolant = this._weightInterpolant; - - if ( weightInterpolant !== null ) { - - this._weightInterpolant = null; - this._mixer._takeBackControlInterpolant( weightInterpolant ); - - } - - return this; - - } - - // Time Scale Control - - // set the time scale stopping any scheduled warping - // although .paused = true yields an effective time scale of zero, this - // method does *not* change .paused, because it would be confusing - setEffectiveTimeScale( timeScale ) { - - this.timeScale = timeScale; - this._effectiveTimeScale = this.paused ? 0 : timeScale; - - return this.stopWarping(); - - } - - // return the time scale considering warping and .paused - getEffectiveTimeScale() { - - return this._effectiveTimeScale; - - } - - setDuration( duration ) { - - this.timeScale = this._clip.duration / duration; - - return this.stopWarping(); - - } - - syncWith( action ) { - - this.time = action.time; - this.timeScale = action.timeScale; - - return this.stopWarping(); - - } - - halt( duration ) { - - return this.warp( this._effectiveTimeScale, 0, duration ); - - } - - warp( startTimeScale, endTimeScale, duration ) { - - const mixer = this._mixer, - now = mixer.time, - timeScale = this.timeScale; - - let interpolant = this._timeScaleInterpolant; - - if ( interpolant === null ) { - - interpolant = mixer._lendControlInterpolant(); - this._timeScaleInterpolant = interpolant; - - } - - const times = interpolant.parameterPositions, - values = interpolant.sampleValues; - - times[ 0 ] = now; - times[ 1 ] = now + duration; - - values[ 0 ] = startTimeScale / timeScale; - values[ 1 ] = endTimeScale / timeScale; - - return this; - - } - - stopWarping() { - - const timeScaleInterpolant = this._timeScaleInterpolant; - - if ( timeScaleInterpolant !== null ) { - - this._timeScaleInterpolant = null; - this._mixer._takeBackControlInterpolant( timeScaleInterpolant ); - - } - - return this; - - } - - // Object Accessors - - getMixer() { - - return this._mixer; - - } - - getClip() { - - return this._clip; - - } - - getRoot() { - - return this._localRoot || this._mixer._root; - - } - - // Interna - - _update( time, deltaTime, timeDirection, accuIndex ) { - - // called by the mixer - - if ( ! this.enabled ) { - - // call ._updateWeight() to update ._effectiveWeight - - this._updateWeight( time ); - return; - - } - - const startTime = this._startTime; - - if ( startTime !== null ) { - - // check for scheduled start of action - - const timeRunning = ( time - startTime ) * timeDirection; - if ( timeRunning < 0 || timeDirection === 0 ) { - - return; // yet to come / don't decide when delta = 0 - - } - - // start - - this._startTime = null; // unschedule - deltaTime = timeDirection * timeRunning; - - } - - // apply time scale and advance time - - deltaTime *= this._updateTimeScale( time ); - const clipTime = this._updateTime( deltaTime ); - - // note: _updateTime may disable the action resulting in - // an effective weight of 0 - - const weight = this._updateWeight( time ); - - if ( weight > 0 ) { - - const interpolants = this._interpolants; - const propertyMixers = this._propertyBindings; - - switch ( this.blendMode ) { - - case AdditiveAnimationBlendMode: - - for ( let j = 0, m = interpolants.length; j !== m; ++ j ) { - - interpolants[ j ].evaluate( clipTime ); - propertyMixers[ j ].accumulateAdditive( weight ); - - } - - break; - - case NormalAnimationBlendMode: - default: - - for ( let j = 0, m = interpolants.length; j !== m; ++ j ) { - - interpolants[ j ].evaluate( clipTime ); - propertyMixers[ j ].accumulate( accuIndex, weight ); - - } - - } - - } - - } - - _updateWeight( time ) { - - let weight = 0; - - if ( this.enabled ) { - - weight = this.weight; - const interpolant = this._weightInterpolant; - - if ( interpolant !== null ) { - - const interpolantValue = interpolant.evaluate( time )[ 0 ]; - - weight *= interpolantValue; - - if ( time > interpolant.parameterPositions[ 1 ] ) { - - this.stopFading(); - - if ( interpolantValue === 0 ) { - - // faded out, disable - this.enabled = false; - - } - - } - - } - - } - - this._effectiveWeight = weight; - return weight; - - } - - _updateTimeScale( time ) { - - let timeScale = 0; - - if ( ! this.paused ) { - - timeScale = this.timeScale; - - const interpolant = this._timeScaleInterpolant; - - if ( interpolant !== null ) { - - const interpolantValue = interpolant.evaluate( time )[ 0 ]; - - timeScale *= interpolantValue; - - if ( time > interpolant.parameterPositions[ 1 ] ) { - - this.stopWarping(); - - if ( timeScale === 0 ) { - - // motion has halted, pause - this.paused = true; - - } else { - - // warp done - apply final time scale - this.timeScale = timeScale; - - } - - } - - } - - } - - this._effectiveTimeScale = timeScale; - return timeScale; - - } - - _updateTime( deltaTime ) { - - const duration = this._clip.duration; - const loop = this.loop; - - let time = this.time + deltaTime; - let loopCount = this._loopCount; - - const pingPong = ( loop === LoopPingPong ); - - if ( deltaTime === 0 ) { - - if ( loopCount === - 1 ) return time; - - return ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time; - - } - - if ( loop === LoopOnce ) { - - if ( loopCount === - 1 ) { - - // just started - - this._loopCount = 0; - this._setEndings( true, true, false ); - - } - - handle_stop: { - - if ( time >= duration ) { - - time = duration; - - } else if ( time < 0 ) { - - time = 0; - - } else { - - this.time = time; - - break handle_stop; - - } - - if ( this.clampWhenFinished ) this.paused = true; - else this.enabled = false; - - this.time = time; - - this._mixer.dispatchEvent( { - type: 'finished', action: this, - direction: deltaTime < 0 ? - 1 : 1 - } ); - - } - - } else { // repetitive Repeat or PingPong - - if ( loopCount === - 1 ) { - - // just started - - if ( deltaTime >= 0 ) { - - loopCount = 0; - - this._setEndings( true, this.repetitions === 0, pingPong ); - - } else { - - // when looping in reverse direction, the initial - // transition through zero counts as a repetition, - // so leave loopCount at -1 - - this._setEndings( this.repetitions === 0, true, pingPong ); - - } - - } - - if ( time >= duration || time < 0 ) { - - // wrap around - - const loopDelta = Math.floor( time / duration ); // signed - time -= duration * loopDelta; - - loopCount += Math.abs( loopDelta ); - - const pending = this.repetitions - loopCount; - - if ( pending <= 0 ) { - - // have to stop (switch state, clamp time, fire event) - - if ( this.clampWhenFinished ) this.paused = true; - else this.enabled = false; - - time = deltaTime > 0 ? duration : 0; - - this.time = time; - - this._mixer.dispatchEvent( { - type: 'finished', action: this, - direction: deltaTime > 0 ? 1 : - 1 - } ); - - } else { - - // keep running - - if ( pending === 1 ) { - - // entering the last round - - const atStart = deltaTime < 0; - this._setEndings( atStart, ! atStart, pingPong ); - - } else { - - this._setEndings( false, false, pingPong ); - - } - - this._loopCount = loopCount; - - this.time = time; - - this._mixer.dispatchEvent( { - type: 'loop', action: this, loopDelta: loopDelta - } ); - - } - - } else { - - this.time = time; - - } - - if ( pingPong && ( loopCount & 1 ) === 1 ) { - - // invert time for the "pong round" - - return duration - time; - - } - - } - - return time; - - } - - _setEndings( atStart, atEnd, pingPong ) { - - const settings = this._interpolantSettings; - - if ( pingPong ) { - - settings.endingStart = ZeroSlopeEnding; - settings.endingEnd = ZeroSlopeEnding; - - } else { - - // assuming for LoopOnce atStart == atEnd == true - - if ( atStart ) { - - settings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding; - - } else { - - settings.endingStart = WrapAroundEnding; - - } - - if ( atEnd ) { - - settings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding; - - } else { - - settings.endingEnd = WrapAroundEnding; - - } - - } - - } - - _scheduleFading( duration, weightNow, weightThen ) { - - const mixer = this._mixer, now = mixer.time; - let interpolant = this._weightInterpolant; - - if ( interpolant === null ) { - - interpolant = mixer._lendControlInterpolant(); - this._weightInterpolant = interpolant; - - } - - const times = interpolant.parameterPositions, - values = interpolant.sampleValues; - - times[ 0 ] = now; - values[ 0 ] = weightNow; - times[ 1 ] = now + duration; - values[ 1 ] = weightThen; - - return this; - - } - - } - - function AnimationMixer( root ) { - - this._root = root; - this._initMemoryManager(); - this._accuIndex = 0; - - this.time = 0; - - this.timeScale = 1.0; - - } - - AnimationMixer.prototype = Object.assign( Object.create( EventDispatcher.prototype ), { - - constructor: AnimationMixer, - - _bindAction: function ( action, prototypeAction ) { - - const root = action._localRoot || this._root, - tracks = action._clip.tracks, - nTracks = tracks.length, - bindings = action._propertyBindings, - interpolants = action._interpolants, - rootUuid = root.uuid, - bindingsByRoot = this._bindingsByRootAndName; - - let bindingsByName = bindingsByRoot[ rootUuid ]; - - if ( bindingsByName === undefined ) { - - bindingsByName = {}; - bindingsByRoot[ rootUuid ] = bindingsByName; - - } - - for ( let i = 0; i !== nTracks; ++ i ) { - - const track = tracks[ i ], - trackName = track.name; - - let binding = bindingsByName[ trackName ]; - - if ( binding !== undefined ) { - - bindings[ i ] = binding; - - } else { - - binding = bindings[ i ]; - - if ( binding !== undefined ) { - - // existing binding, make sure the cache knows - - if ( binding._cacheIndex === null ) { - - ++ binding.referenceCount; - this._addInactiveBinding( binding, rootUuid, trackName ); - - } - - continue; - - } - - const path = prototypeAction && prototypeAction. - _propertyBindings[ i ].binding.parsedPath; - - binding = new PropertyMixer( - PropertyBinding.create( root, trackName, path ), - track.ValueTypeName, track.getValueSize() ); - - ++ binding.referenceCount; - this._addInactiveBinding( binding, rootUuid, trackName ); - - bindings[ i ] = binding; - - } - - interpolants[ i ].resultBuffer = binding.buffer; - - } - - }, - - _activateAction: function ( action ) { - - if ( ! this._isActiveAction( action ) ) { - - if ( action._cacheIndex === null ) { - - // this action has been forgotten by the cache, but the user - // appears to be still using it -> rebind - - const rootUuid = ( action._localRoot || this._root ).uuid, - clipUuid = action._clip.uuid, - actionsForClip = this._actionsByClip[ clipUuid ]; - - this._bindAction( action, - actionsForClip && actionsForClip.knownActions[ 0 ] ); - - this._addInactiveAction( action, clipUuid, rootUuid ); - - } - - const bindings = action._propertyBindings; - - // increment reference counts / sort out state - for ( let i = 0, n = bindings.length; i !== n; ++ i ) { - - const binding = bindings[ i ]; - - if ( binding.useCount ++ === 0 ) { - - this._lendBinding( binding ); - binding.saveOriginalState(); - - } - - } - - this._lendAction( action ); - - } - - }, - - _deactivateAction: function ( action ) { - - if ( this._isActiveAction( action ) ) { - - const bindings = action._propertyBindings; - - // decrement reference counts / sort out state - for ( let i = 0, n = bindings.length; i !== n; ++ i ) { - - const binding = bindings[ i ]; - - if ( -- binding.useCount === 0 ) { - - binding.restoreOriginalState(); - this._takeBackBinding( binding ); - - } - - } - - this._takeBackAction( action ); - - } - - }, - - // Memory manager - - _initMemoryManager: function () { - - this._actions = []; // 'nActiveActions' followed by inactive ones - this._nActiveActions = 0; - - this._actionsByClip = {}; - // inside: - // { - // knownActions: Array< AnimationAction > - used as prototypes - // actionByRoot: AnimationAction - lookup - // } - - - this._bindings = []; // 'nActiveBindings' followed by inactive ones - this._nActiveBindings = 0; - - this._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer > - - - this._controlInterpolants = []; // same game as above - this._nActiveControlInterpolants = 0; - - const scope = this; - - this.stats = { - - actions: { - get total() { - - return scope._actions.length; - - }, - get inUse() { - - return scope._nActiveActions; - - } - }, - bindings: { - get total() { - - return scope._bindings.length; - - }, - get inUse() { - - return scope._nActiveBindings; - - } - }, - controlInterpolants: { - get total() { - - return scope._controlInterpolants.length; - - }, - get inUse() { - - return scope._nActiveControlInterpolants; - - } - } - - }; - - }, - - // Memory management for AnimationAction objects - - _isActiveAction: function ( action ) { - - const index = action._cacheIndex; - return index !== null && index < this._nActiveActions; - - }, - - _addInactiveAction: function ( action, clipUuid, rootUuid ) { - - const actions = this._actions, - actionsByClip = this._actionsByClip; - - let actionsForClip = actionsByClip[ clipUuid ]; - - if ( actionsForClip === undefined ) { - - actionsForClip = { - - knownActions: [ action ], - actionByRoot: {} - - }; - - action._byClipCacheIndex = 0; - - actionsByClip[ clipUuid ] = actionsForClip; - - } else { - - const knownActions = actionsForClip.knownActions; - - action._byClipCacheIndex = knownActions.length; - knownActions.push( action ); - - } - - action._cacheIndex = actions.length; - actions.push( action ); - - actionsForClip.actionByRoot[ rootUuid ] = action; - - }, - - _removeInactiveAction: function ( action ) { - - const actions = this._actions, - lastInactiveAction = actions[ actions.length - 1 ], - cacheIndex = action._cacheIndex; - - lastInactiveAction._cacheIndex = cacheIndex; - actions[ cacheIndex ] = lastInactiveAction; - actions.pop(); - - action._cacheIndex = null; - - - const clipUuid = action._clip.uuid, - actionsByClip = this._actionsByClip, - actionsForClip = actionsByClip[ clipUuid ], - knownActionsForClip = actionsForClip.knownActions, - - lastKnownAction = - knownActionsForClip[ knownActionsForClip.length - 1 ], - - byClipCacheIndex = action._byClipCacheIndex; - - lastKnownAction._byClipCacheIndex = byClipCacheIndex; - knownActionsForClip[ byClipCacheIndex ] = lastKnownAction; - knownActionsForClip.pop(); - - action._byClipCacheIndex = null; - - - const actionByRoot = actionsForClip.actionByRoot, - rootUuid = ( action._localRoot || this._root ).uuid; - - delete actionByRoot[ rootUuid ]; - - if ( knownActionsForClip.length === 0 ) { - - delete actionsByClip[ clipUuid ]; - - } - - this._removeInactiveBindingsForAction( action ); - - }, - - _removeInactiveBindingsForAction: function ( action ) { - - const bindings = action._propertyBindings; - - for ( let i = 0, n = bindings.length; i !== n; ++ i ) { - - const binding = bindings[ i ]; - - if ( -- binding.referenceCount === 0 ) { - - this._removeInactiveBinding( binding ); - - } - - } - - }, - - _lendAction: function ( action ) { - - // [ active actions | inactive actions ] - // [ active actions >| inactive actions ] - // s a - // <-swap-> - // a s - - const actions = this._actions, - prevIndex = action._cacheIndex, - - lastActiveIndex = this._nActiveActions ++, - - firstInactiveAction = actions[ lastActiveIndex ]; - - action._cacheIndex = lastActiveIndex; - actions[ lastActiveIndex ] = action; - - firstInactiveAction._cacheIndex = prevIndex; - actions[ prevIndex ] = firstInactiveAction; - - }, - - _takeBackAction: function ( action ) { - - // [ active actions | inactive actions ] - // [ active actions |< inactive actions ] - // a s - // <-swap-> - // s a - - const actions = this._actions, - prevIndex = action._cacheIndex, - - firstInactiveIndex = -- this._nActiveActions, - - lastActiveAction = actions[ firstInactiveIndex ]; - - action._cacheIndex = firstInactiveIndex; - actions[ firstInactiveIndex ] = action; - - lastActiveAction._cacheIndex = prevIndex; - actions[ prevIndex ] = lastActiveAction; - - }, - - // Memory management for PropertyMixer objects - - _addInactiveBinding: function ( binding, rootUuid, trackName ) { - - const bindingsByRoot = this._bindingsByRootAndName, - bindings = this._bindings; - - let bindingByName = bindingsByRoot[ rootUuid ]; - - if ( bindingByName === undefined ) { - - bindingByName = {}; - bindingsByRoot[ rootUuid ] = bindingByName; - - } - - bindingByName[ trackName ] = binding; - - binding._cacheIndex = bindings.length; - bindings.push( binding ); - - }, - - _removeInactiveBinding: function ( binding ) { - - const bindings = this._bindings, - propBinding = binding.binding, - rootUuid = propBinding.rootNode.uuid, - trackName = propBinding.path, - bindingsByRoot = this._bindingsByRootAndName, - bindingByName = bindingsByRoot[ rootUuid ], - - lastInactiveBinding = bindings[ bindings.length - 1 ], - cacheIndex = binding._cacheIndex; - - lastInactiveBinding._cacheIndex = cacheIndex; - bindings[ cacheIndex ] = lastInactiveBinding; - bindings.pop(); - - delete bindingByName[ trackName ]; - - if ( Object.keys( bindingByName ).length === 0 ) { - - delete bindingsByRoot[ rootUuid ]; - - } - - }, - - _lendBinding: function ( binding ) { - - const bindings = this._bindings, - prevIndex = binding._cacheIndex, - - lastActiveIndex = this._nActiveBindings ++, - - firstInactiveBinding = bindings[ lastActiveIndex ]; - - binding._cacheIndex = lastActiveIndex; - bindings[ lastActiveIndex ] = binding; - - firstInactiveBinding._cacheIndex = prevIndex; - bindings[ prevIndex ] = firstInactiveBinding; - - }, - - _takeBackBinding: function ( binding ) { - - const bindings = this._bindings, - prevIndex = binding._cacheIndex, - - firstInactiveIndex = -- this._nActiveBindings, - - lastActiveBinding = bindings[ firstInactiveIndex ]; - - binding._cacheIndex = firstInactiveIndex; - bindings[ firstInactiveIndex ] = binding; - - lastActiveBinding._cacheIndex = prevIndex; - bindings[ prevIndex ] = lastActiveBinding; - - }, - - - // Memory management of Interpolants for weight and time scale - - _lendControlInterpolant: function () { - - const interpolants = this._controlInterpolants, - lastActiveIndex = this._nActiveControlInterpolants ++; - - let interpolant = interpolants[ lastActiveIndex ]; - - if ( interpolant === undefined ) { - - interpolant = new LinearInterpolant( - new Float32Array( 2 ), new Float32Array( 2 ), - 1, this._controlInterpolantsResultBuffer ); - - interpolant.__cacheIndex = lastActiveIndex; - interpolants[ lastActiveIndex ] = interpolant; - - } - - return interpolant; - - }, - - _takeBackControlInterpolant: function ( interpolant ) { - - const interpolants = this._controlInterpolants, - prevIndex = interpolant.__cacheIndex, - - firstInactiveIndex = -- this._nActiveControlInterpolants, - - lastActiveInterpolant = interpolants[ firstInactiveIndex ]; - - interpolant.__cacheIndex = firstInactiveIndex; - interpolants[ firstInactiveIndex ] = interpolant; - - lastActiveInterpolant.__cacheIndex = prevIndex; - interpolants[ prevIndex ] = lastActiveInterpolant; - - }, - - _controlInterpolantsResultBuffer: new Float32Array( 1 ), - - // return an action for a clip optionally using a custom root target - // object (this method allocates a lot of dynamic memory in case a - // previously unknown clip/root combination is specified) - clipAction: function ( clip, optionalRoot, blendMode ) { - - const root = optionalRoot || this._root, - rootUuid = root.uuid; - - let clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip; - - const clipUuid = clipObject !== null ? clipObject.uuid : clip; - - const actionsForClip = this._actionsByClip[ clipUuid ]; - let prototypeAction = null; - - if ( blendMode === undefined ) { - - if ( clipObject !== null ) { - - blendMode = clipObject.blendMode; - - } else { - - blendMode = NormalAnimationBlendMode; - - } - - } - - if ( actionsForClip !== undefined ) { - - const existingAction = actionsForClip.actionByRoot[ rootUuid ]; - - if ( existingAction !== undefined && existingAction.blendMode === blendMode ) { - - return existingAction; - - } - - // we know the clip, so we don't have to parse all - // the bindings again but can just copy - prototypeAction = actionsForClip.knownActions[ 0 ]; - - // also, take the clip from the prototype action - if ( clipObject === null ) - clipObject = prototypeAction._clip; - - } - - // clip must be known when specified via string - if ( clipObject === null ) return null; - - // allocate all resources required to run it - const newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode ); - - this._bindAction( newAction, prototypeAction ); - - // and make the action known to the memory manager - this._addInactiveAction( newAction, clipUuid, rootUuid ); - - return newAction; - - }, - - // get an existing action - existingAction: function ( clip, optionalRoot ) { - - const root = optionalRoot || this._root, - rootUuid = root.uuid, - - clipObject = typeof clip === 'string' ? - AnimationClip.findByName( root, clip ) : clip, - - clipUuid = clipObject ? clipObject.uuid : clip, - - actionsForClip = this._actionsByClip[ clipUuid ]; - - if ( actionsForClip !== undefined ) { - - return actionsForClip.actionByRoot[ rootUuid ] || null; - - } - - return null; - - }, - - // deactivates all previously scheduled actions - stopAllAction: function () { - - const actions = this._actions, - nActions = this._nActiveActions; - - for ( let i = nActions - 1; i >= 0; -- i ) { - - actions[ i ].stop(); - - } - - return this; - - }, - - // advance the time and update apply the animation - update: function ( deltaTime ) { - - deltaTime *= this.timeScale; - - const actions = this._actions, - nActions = this._nActiveActions, - - time = this.time += deltaTime, - timeDirection = Math.sign( deltaTime ), - - accuIndex = this._accuIndex ^= 1; - - // run active actions - - for ( let i = 0; i !== nActions; ++ i ) { - - const action = actions[ i ]; - - action._update( time, deltaTime, timeDirection, accuIndex ); - - } - - // update scene graph - - const bindings = this._bindings, - nBindings = this._nActiveBindings; - - for ( let i = 0; i !== nBindings; ++ i ) { - - bindings[ i ].apply( accuIndex ); - - } - - return this; - - }, - - // Allows you to seek to a specific time in an animation. - setTime: function ( timeInSeconds ) { - - this.time = 0; // Zero out time attribute for AnimationMixer object; - for ( let i = 0; i < this._actions.length; i ++ ) { - - this._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects. - - } - - return this.update( timeInSeconds ); // Update used to set exact time. Returns "this" AnimationMixer object. - - }, - - // return this mixer's root target object - getRoot: function () { - - return this._root; - - }, - - // free all resources specific to a particular clip - uncacheClip: function ( clip ) { - - const actions = this._actions, - clipUuid = clip.uuid, - actionsByClip = this._actionsByClip, - actionsForClip = actionsByClip[ clipUuid ]; - - if ( actionsForClip !== undefined ) { - - // note: just calling _removeInactiveAction would mess up the - // iteration state and also require updating the state we can - // just throw away - - const actionsToRemove = actionsForClip.knownActions; - - for ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) { - - const action = actionsToRemove[ i ]; - - this._deactivateAction( action ); - - const cacheIndex = action._cacheIndex, - lastInactiveAction = actions[ actions.length - 1 ]; - - action._cacheIndex = null; - action._byClipCacheIndex = null; - - lastInactiveAction._cacheIndex = cacheIndex; - actions[ cacheIndex ] = lastInactiveAction; - actions.pop(); - - this._removeInactiveBindingsForAction( action ); - - } - - delete actionsByClip[ clipUuid ]; - - } - - }, - - // free all resources specific to a particular root target object - uncacheRoot: function ( root ) { - - const rootUuid = root.uuid, - actionsByClip = this._actionsByClip; - - for ( const clipUuid in actionsByClip ) { - - const actionByRoot = actionsByClip[ clipUuid ].actionByRoot, - action = actionByRoot[ rootUuid ]; - - if ( action !== undefined ) { - - this._deactivateAction( action ); - this._removeInactiveAction( action ); - - } - - } - - const bindingsByRoot = this._bindingsByRootAndName, - bindingByName = bindingsByRoot[ rootUuid ]; - - if ( bindingByName !== undefined ) { - - for ( const trackName in bindingByName ) { - - const binding = bindingByName[ trackName ]; - binding.restoreOriginalState(); - this._removeInactiveBinding( binding ); - - } - - } - - }, - - // remove a targeted clip from the cache - uncacheAction: function ( clip, optionalRoot ) { - - const action = this.existingAction( clip, optionalRoot ); - - if ( action !== null ) { - - this._deactivateAction( action ); - this._removeInactiveAction( action ); - - } - - } - - } ); - - class Uniform { - - constructor( value ) { - - if ( typeof value === 'string' ) { - - console.warn( 'THREE.Uniform: Type parameter is no longer needed.' ); - value = arguments[ 1 ]; - - } - - this.value = value; - - } - - clone() { - - return new Uniform( this.value.clone === undefined ? this.value : this.value.clone() ); - - } - - } - - function InstancedInterleavedBuffer( array, stride, meshPerAttribute ) { - - InterleavedBuffer.call( this, array, stride ); - - this.meshPerAttribute = meshPerAttribute || 1; - - } - - InstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), { - - constructor: InstancedInterleavedBuffer, - - isInstancedInterleavedBuffer: true, - - copy: function ( source ) { - - InterleavedBuffer.prototype.copy.call( this, source ); - - this.meshPerAttribute = source.meshPerAttribute; - - return this; - - }, - - clone: function ( data ) { - - const ib = InterleavedBuffer.prototype.clone.call( this, data ); - - ib.meshPerAttribute = this.meshPerAttribute; - - return ib; - - }, - - toJSON: function ( data ) { - - const json = InterleavedBuffer.prototype.toJSON.call( this, data ); - - json.isInstancedInterleavedBuffer = true; - json.meshPerAttribute = this.meshPerAttribute; - - return json; - - } - - } ); - - function GLBufferAttribute( buffer, type, itemSize, elementSize, count ) { - - this.buffer = buffer; - this.type = type; - this.itemSize = itemSize; - this.elementSize = elementSize; - this.count = count; - - this.version = 0; - - } - - Object.defineProperty( GLBufferAttribute.prototype, 'needsUpdate', { - - set: function ( value ) { - - if ( value === true ) this.version ++; - - } - - } ); - - Object.assign( GLBufferAttribute.prototype, { - - isGLBufferAttribute: true, - - setBuffer: function ( buffer ) { - - this.buffer = buffer; - - return this; - - }, - - setType: function ( type, elementSize ) { - - this.type = type; - this.elementSize = elementSize; - - return this; - - }, - - setItemSize: function ( itemSize ) { - - this.itemSize = itemSize; - - return this; - - }, - - setCount: function ( count ) { - - this.count = count; - - return this; - - }, - - } ); - - function Raycaster( origin, direction, near, far ) { - - this.ray = new Ray( origin, direction ); - // direction is assumed to be normalized (for accurate distance calculations) - - this.near = near || 0; - this.far = far || Infinity; - this.camera = null; - this.layers = new Layers(); - - this.params = { - Mesh: {}, - Line: { threshold: 1 }, - LOD: {}, - Points: { threshold: 1 }, - Sprite: {} - }; - - Object.defineProperties( this.params, { - PointCloud: { - get: function () { - - console.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' ); - return this.Points; - - } - } - } ); - - } - - function ascSort( a, b ) { - - return a.distance - b.distance; - - } - - function intersectObject( object, raycaster, intersects, recursive ) { - - if ( object.layers.test( raycaster.layers ) ) { - - object.raycast( raycaster, intersects ); - - } - - if ( recursive === true ) { - - const children = object.children; - - for ( let i = 0, l = children.length; i < l; i ++ ) { - - intersectObject( children[ i ], raycaster, intersects, true ); - - } - - } - - } - - Object.assign( Raycaster.prototype, { - - set: function ( origin, direction ) { - - // direction is assumed to be normalized (for accurate distance calculations) - - this.ray.set( origin, direction ); - - }, - - setFromCamera: function ( coords, camera ) { - - if ( ( camera && camera.isPerspectiveCamera ) ) { - - this.ray.origin.setFromMatrixPosition( camera.matrixWorld ); - this.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize(); - this.camera = camera; - - } else if ( ( camera && camera.isOrthographicCamera ) ) { - - this.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera - this.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ); - this.camera = camera; - - } else { - - console.error( 'THREE.Raycaster: Unsupported camera type.' ); - - } - - }, - - intersectObject: function ( object, recursive, optionalTarget ) { - - const intersects = optionalTarget || []; - - intersectObject( object, this, intersects, recursive ); - - intersects.sort( ascSort ); - - return intersects; - - }, - - intersectObjects: function ( objects, recursive, optionalTarget ) { - - const intersects = optionalTarget || []; - - if ( Array.isArray( objects ) === false ) { - - console.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' ); - return intersects; - - } - - for ( let i = 0, l = objects.length; i < l; i ++ ) { - - intersectObject( objects[ i ], this, intersects, recursive ); - - } - - intersects.sort( ascSort ); - - return intersects; - - } - - } ); - - /** - * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system - * - * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up. - * The azimuthal angle (theta) is measured from the positive z-axis. - */ - - class Spherical { - - constructor( radius = 1, phi = 0, theta = 0 ) { - - this.radius = radius; - this.phi = phi; // polar angle - this.theta = theta; // azimuthal angle - - return this; - - } - - set( radius, phi, theta ) { - - this.radius = radius; - this.phi = phi; - this.theta = theta; - - return this; - - } - - clone() { - - return new this.constructor().copy( this ); - - } - - copy( other ) { - - this.radius = other.radius; - this.phi = other.phi; - this.theta = other.theta; - - return this; - - } - - // restrict phi to be betwee EPS and PI-EPS - makeSafe() { - - const EPS = 0.000001; - this.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) ); - - return this; - - } - - setFromVector3( v ) { - - return this.setFromCartesianCoords( v.x, v.y, v.z ); - - } - - setFromCartesianCoords( x, y, z ) { - - this.radius = Math.sqrt( x * x + y * y + z * z ); - - if ( this.radius === 0 ) { - - this.theta = 0; - this.phi = 0; - - } else { - - this.theta = Math.atan2( x, z ); - this.phi = Math.acos( MathUtils.clamp( y / this.radius, - 1, 1 ) ); - - } - - return this; - - } - - } - - const _vector$7 = /*@__PURE__*/ new Vector2(); - - class Box2 { - - constructor( min, max ) { - - Object.defineProperty( this, 'isBox2', { value: true } ); - - this.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity ); - this.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity ); - - } - - set( min, max ) { - - this.min.copy( min ); - this.max.copy( max ); - - 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$7.copy( size ).multiplyScalar( 0.5 ); - this.min.copy( center ).sub( halfSize ); - this.max.copy( center ).add( halfSize ); - - return this; - - } - - 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 = + Infinity; - this.max.x = this.max.y = - 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 ); - - } - - getCenter( target ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Box2: .getCenter() target is now required' ); - target = new Vector2(); - - } - - return this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); - - } - - getSize( target ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Box2: .getSize() target is now required' ); - target = new Vector2(); - - } - - return this.isEmpty() ? target.set( 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; - - } - - containsPoint( point ) { - - return point.x < this.min.x || point.x > this.max.x || - point.y < this.min.y || point.y > this.max.y ? 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; - - } - - getParameter( point, target ) { - - // This can potentially have a divide by zero if the box - // has a size dimension of 0. - - if ( target === undefined ) { - - console.warn( 'THREE.Box2: .getParameter() target is now required' ); - target = new Vector2(); - - } - - 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 ) - ); - - } - - intersectsBox( box ) { - - // using 4 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 ? false : true; - - } - - clampPoint( point, target ) { - - if ( target === undefined ) { - - console.warn( 'THREE.Box2: .clampPoint() target is now required' ); - target = new Vector2(); - - } - - return target.copy( point ).clamp( this.min, this.max ); - - } - - distanceToPoint( point ) { - - const clampedPoint = _vector$7.copy( point ).clamp( this.min, this.max ); - return clampedPoint.sub( point ).length(); - - } - - intersect( box ) { - - this.min.max( box.min ); - this.max.min( box.max ); - - return this; - - } - - union( box ) { - - this.min.min( box.min ); - this.max.max( box.max ); - - 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 ); - - } - - } - - function ImmediateRenderObject( material ) { - - Object3D.call( this ); - - this.material = material; - this.render = function ( /* renderCallback */ ) {}; - - this.hasPositions = false; - this.hasNormals = false; - this.hasColors = false; - this.hasUvs = false; - - this.positionArray = null; - this.normalArray = null; - this.colorArray = null; - this.uvArray = null; - - this.count = 0; - - } - - ImmediateRenderObject.prototype = Object.create( Object3D.prototype ); - ImmediateRenderObject.prototype.constructor = ImmediateRenderObject; - - ImmediateRenderObject.prototype.isImmediateRenderObject = true; - - const _vector$9 = /*@__PURE__*/ new Vector3(); - const _boneMatrix = /*@__PURE__*/ new Matrix4(); - const _matrixWorldInv = /*@__PURE__*/ new Matrix4(); - - - class SkeletonHelper extends LineSegments { - - constructor( object ) { - - const bones = getBoneList( object ); - - const geometry = new BufferGeometry(); - - const vertices = []; - const colors = []; - - const color1 = new Color( 0, 0, 1 ); - const color2 = new Color( 0, 1, 0 ); - - for ( let i = 0; i < bones.length; i ++ ) { - - const bone = bones[ i ]; - - if ( bone.parent && bone.parent.isBone ) { - - vertices.push( 0, 0, 0 ); - vertices.push( 0, 0, 0 ); - colors.push( color1.r, color1.g, color1.b ); - colors.push( color2.r, color2.g, color2.b ); - - } - - } - - geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); - - const material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } ); - - super( geometry, material ); - - this.type = 'SkeletonHelper'; - this.isSkeletonHelper = true; - - this.root = object; - this.bones = bones; - - this.matrix = object.matrixWorld; - this.matrixAutoUpdate = false; - - } - - updateMatrixWorld( force ) { - - const bones = this.bones; - - const geometry = this.geometry; - const position = geometry.getAttribute( 'position' ); - - _matrixWorldInv.copy( this.root.matrixWorld ).invert(); - - for ( let i = 0, j = 0; i < bones.length; i ++ ) { - - const bone = bones[ i ]; - - if ( bone.parent && bone.parent.isBone ) { - - _boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld ); - _vector$9.setFromMatrixPosition( _boneMatrix ); - position.setXYZ( j, _vector$9.x, _vector$9.y, _vector$9.z ); - - _boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld ); - _vector$9.setFromMatrixPosition( _boneMatrix ); - position.setXYZ( j + 1, _vector$9.x, _vector$9.y, _vector$9.z ); - - j += 2; - - } - - } - - geometry.getAttribute( 'position' ).needsUpdate = true; - - super.updateMatrixWorld( force ); - - } - - } - - - function getBoneList( object ) { - - const boneList = []; - - if ( object && object.isBone ) { - - boneList.push( object ); - - } - - for ( let i = 0; i < object.children.length; i ++ ) { - - boneList.push.apply( boneList, getBoneList( object.children[ i ] ) ); - - } - - return boneList; - - } - - class GridHelper extends LineSegments { - - constructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) { - - color1 = new Color( color1 ); - color2 = new Color( color2 ); - - const center = divisions / 2; - const step = size / divisions; - const halfSize = size / 2; - - const vertices = [], colors = []; - - for ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) { - - vertices.push( - halfSize, 0, k, halfSize, 0, k ); - vertices.push( k, 0, - halfSize, k, 0, halfSize ); - - const color = i === center ? color1 : color2; - - color.toArray( colors, j ); j += 3; - color.toArray( colors, j ); j += 3; - color.toArray( colors, j ); j += 3; - color.toArray( colors, j ); j += 3; - - } - - const geometry = new BufferGeometry(); - geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); - geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); - - const material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } ); - - super( geometry, material ); - - this.type = 'GridHelper'; - - } - - } - - const _floatView = new Float32Array( 1 ); - new Int32Array( _floatView.buffer ); - - // - - Curve.create = function ( construct, getPoint ) { - - console.log( 'THREE.Curve.create() has been deprecated' ); - - construct.prototype = Object.create( Curve.prototype ); - construct.prototype.constructor = construct; - construct.prototype.getPoint = getPoint; - - return construct; - - }; - - // - - Object.assign( CurvePath.prototype, { - - createPointsGeometry: function ( divisions ) { - - console.warn( 'THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' ); - - // generate geometry from path points (for Line or Points objects) - - const pts = this.getPoints( divisions ); - return this.createGeometry( pts ); - - }, - - createSpacedPointsGeometry: function ( divisions ) { - - console.warn( 'THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' ); - - // generate geometry from equidistant sampling along the path - - const pts = this.getSpacedPoints( divisions ); - return this.createGeometry( pts ); - - }, - - createGeometry: function ( points ) { - - console.warn( 'THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' ); - - const geometry = new Geometry(); - - for ( let i = 0, l = points.length; i < l; i ++ ) { - - const point = points[ i ]; - geometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) ); - - } - - return geometry; - - } - - } ); - - // - - Object.assign( Path.prototype, { - - fromPoints: function ( points ) { - - console.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' ); - return this.setFromPoints( points ); - - } - - } ); - - // - - function Spline( points ) { - - console.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' ); - - CatmullRomCurve3.call( this, points ); - this.type = 'catmullrom'; - - } - - Spline.prototype = Object.create( CatmullRomCurve3.prototype ); - - Object.assign( Spline.prototype, { - - initFromArray: function ( /* a */ ) { - - console.error( 'THREE.Spline: .initFromArray() has been removed.' ); - - }, - getControlPointsArray: function ( /* optionalTarget */ ) { - - console.error( 'THREE.Spline: .getControlPointsArray() has been removed.' ); - - }, - reparametrizeByArcLength: function ( /* samplingCoef */ ) { - - console.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' ); - - } - - } ); - - GridHelper.prototype.setColors = function () { - - console.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' ); - - }; - - SkeletonHelper.prototype.update = function () { - - console.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' ); - - }; - - // - - Object.assign( Loader.prototype, { - - extractUrlBase: function ( url ) { - - console.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' ); - return LoaderUtils.extractUrlBase( url ); - - } - - } ); - - Loader.Handlers = { - - add: function ( /* regex, loader */ ) { - - console.error( 'THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.' ); - - }, - - get: function ( /* file */ ) { - - console.error( 'THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.' ); - - } - - }; - - // - - Object.assign( Box2.prototype, { - - center: function ( optionalTarget ) { - - console.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' ); - return this.getCenter( optionalTarget ); - - }, - empty: function () { - - console.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' ); - return this.isEmpty(); - - }, - isIntersectionBox: function ( box ) { - - console.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' ); - return this.intersectsBox( box ); - - }, - size: function ( optionalTarget ) { - - console.warn( 'THREE.Box2: .size() has been renamed to .getSize().' ); - return this.getSize( optionalTarget ); - - } - } ); - - Object.assign( Box3.prototype, { - - center: function ( optionalTarget ) { - - console.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' ); - return this.getCenter( optionalTarget ); - - }, - empty: function () { - - console.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' ); - return this.isEmpty(); - - }, - isIntersectionBox: function ( box ) { - - console.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' ); - return this.intersectsBox( box ); - - }, - isIntersectionSphere: function ( sphere ) { - - console.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); - return this.intersectsSphere( sphere ); - - }, - size: function ( optionalTarget ) { - - console.warn( 'THREE.Box3: .size() has been renamed to .getSize().' ); - return this.getSize( optionalTarget ); - - } - } ); - - Object.assign( Sphere.prototype, { - - empty: function () { - - console.warn( 'THREE.Sphere: .empty() has been renamed to .isEmpty().' ); - return this.isEmpty(); - - }, - - } ); - - Frustum.prototype.setFromMatrix = function ( m ) { - - console.warn( 'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().' ); - return this.setFromProjectionMatrix( m ); - - }; - - Object.assign( MathUtils, { - - random16: function () { - - console.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' ); - return Math.random(); - - }, - - nearestPowerOfTwo: function ( value ) { - - console.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' ); - return MathUtils.floorPowerOfTwo( value ); - - }, - - nextPowerOfTwo: function ( value ) { - - console.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' ); - return MathUtils.ceilPowerOfTwo( value ); - - } - - } ); - - Object.assign( Matrix3.prototype, { - - flattenToArrayOffset: function ( array, offset ) { - - console.warn( "THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead." ); - return this.toArray( array, offset ); - - }, - multiplyVector3: function ( vector ) { - - console.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' ); - return vector.applyMatrix3( this ); - - }, - multiplyVector3Array: function ( /* a */ ) { - - console.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' ); - - }, - applyToBufferAttribute: function ( attribute ) { - - console.warn( 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.' ); - return attribute.applyMatrix3( this ); - - }, - applyToVector3Array: function ( /* array, offset, length */ ) { - - console.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' ); - - }, - getInverse: function ( matrix ) { - - console.warn( 'THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' ); - return this.copy( matrix ).invert(); - - } - - } ); - - Object.assign( Matrix4.prototype, { - - extractPosition: function ( m ) { - - console.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' ); - return this.copyPosition( m ); - - }, - flattenToArrayOffset: function ( array, offset ) { - - console.warn( "THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead." ); - return this.toArray( array, offset ); - - }, - getPosition: function () { - - console.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' ); - return new Vector3().setFromMatrixColumn( this, 3 ); - - }, - setRotationFromQuaternion: function ( q ) { - - console.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' ); - return this.makeRotationFromQuaternion( q ); - - }, - multiplyToArray: function () { - - console.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' ); - - }, - multiplyVector3: function ( vector ) { - - console.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); - return vector.applyMatrix4( this ); - - }, - multiplyVector4: function ( vector ) { - - console.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); - return vector.applyMatrix4( this ); - - }, - multiplyVector3Array: function ( /* a */ ) { - - console.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' ); - - }, - rotateAxis: function ( v ) { - - console.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' ); - v.transformDirection( this ); - - }, - crossVector: function ( vector ) { - - console.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); - return vector.applyMatrix4( this ); - - }, - translate: function () { - - console.error( 'THREE.Matrix4: .translate() has been removed.' ); - - }, - rotateX: function () { - - console.error( 'THREE.Matrix4: .rotateX() has been removed.' ); - - }, - rotateY: function () { - - console.error( 'THREE.Matrix4: .rotateY() has been removed.' ); - - }, - rotateZ: function () { - - console.error( 'THREE.Matrix4: .rotateZ() has been removed.' ); - - }, - rotateByAxis: function () { - - console.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' ); - - }, - applyToBufferAttribute: function ( attribute ) { - - console.warn( 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.' ); - return attribute.applyMatrix4( this ); - - }, - applyToVector3Array: function ( /* array, offset, length */ ) { - - console.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' ); - - }, - makeFrustum: function ( left, right, bottom, top, near, far ) { - - console.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' ); - return this.makePerspective( left, right, top, bottom, near, far ); - - }, - getInverse: function ( matrix ) { - - console.warn( 'THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' ); - return this.copy( matrix ).invert(); - - } - - } ); - - Plane.prototype.isIntersectionLine = function ( line ) { - - console.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' ); - return this.intersectsLine( line ); - - }; - - Object.assign( Quaternion.prototype, { - - multiplyVector3: function ( vector ) { - - console.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' ); - return vector.applyQuaternion( this ); - - }, - inverse: function ( ) { - - console.warn( 'THREE.Quaternion: .inverse() has been renamed to invert().' ); - return this.invert(); - - } - - } ); - - Object.assign( Ray.prototype, { - - isIntersectionBox: function ( box ) { - - console.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' ); - return this.intersectsBox( box ); - - }, - isIntersectionPlane: function ( plane ) { - - console.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' ); - return this.intersectsPlane( plane ); - - }, - isIntersectionSphere: function ( sphere ) { - - console.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); - return this.intersectsSphere( sphere ); - - } - - } ); - - Object.assign( Triangle.prototype, { - - area: function () { - - console.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' ); - return this.getArea(); - - }, - barycoordFromPoint: function ( point, target ) { - - console.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' ); - return this.getBarycoord( point, target ); - - }, - midpoint: function ( target ) { - - console.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' ); - return this.getMidpoint( target ); - - }, - normal: function ( target ) { - - console.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' ); - return this.getNormal( target ); - - }, - plane: function ( target ) { - - console.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' ); - return this.getPlane( target ); - - } - - } ); - - Object.assign( Triangle, { - - barycoordFromPoint: function ( point, a, b, c, target ) { - - console.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' ); - return Triangle.getBarycoord( point, a, b, c, target ); - - }, - normal: function ( a, b, c, target ) { - - console.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' ); - return Triangle.getNormal( a, b, c, target ); - - } - - } ); - - Object.assign( Shape.prototype, { - - extractAllPoints: function ( divisions ) { - - console.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' ); - return this.extractPoints( divisions ); - - }, - extrude: function ( options ) { - - console.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' ); - return new ExtrudeGeometry( this, options ); - - }, - makeGeometry: function ( options ) { - - console.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' ); - return new ShapeGeometry( this, options ); - - } - - } ); - - Object.assign( Vector2.prototype, { - - fromAttribute: function ( attribute, index, offset ) { - - console.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' ); - return this.fromBufferAttribute( attribute, index, offset ); - - }, - distanceToManhattan: function ( v ) { - - console.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' ); - return this.manhattanDistanceTo( v ); - - }, - lengthManhattan: function () { - - console.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' ); - return this.manhattanLength(); - - } - - } ); - - Object.assign( Vector3.prototype, { - - setEulerFromRotationMatrix: function () { - - console.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' ); - - }, - setEulerFromQuaternion: function () { - - console.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' ); - - }, - getPositionFromMatrix: function ( m ) { - - console.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' ); - return this.setFromMatrixPosition( m ); - - }, - getScaleFromMatrix: function ( m ) { - - console.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' ); - return this.setFromMatrixScale( m ); - - }, - getColumnFromMatrix: function ( index, matrix ) { - - console.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' ); - return this.setFromMatrixColumn( matrix, index ); - - }, - applyProjection: function ( m ) { - - console.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' ); - return this.applyMatrix4( m ); - - }, - fromAttribute: function ( attribute, index, offset ) { - - console.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' ); - return this.fromBufferAttribute( attribute, index, offset ); - - }, - distanceToManhattan: function ( v ) { - - console.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' ); - return this.manhattanDistanceTo( v ); - - }, - lengthManhattan: function () { - - console.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' ); - return this.manhattanLength(); - - } - - } ); - - Object.assign( Vector4.prototype, { - - fromAttribute: function ( attribute, index, offset ) { - - console.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' ); - return this.fromBufferAttribute( attribute, index, offset ); - - }, - lengthManhattan: function () { - - console.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' ); - return this.manhattanLength(); - - } - - } ); - - // - - Object.assign( Geometry.prototype, { - - computeTangents: function () { - - console.error( 'THREE.Geometry: .computeTangents() has been removed.' ); - - }, - computeLineDistances: function () { - - console.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' ); - - }, - applyMatrix: function ( matrix ) { - - console.warn( 'THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().' ); - return this.applyMatrix4( matrix ); - - } - - } ); - - Object.assign( Object3D.prototype, { - - getChildByName: function ( name ) { - - console.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' ); - return this.getObjectByName( name ); - - }, - renderDepth: function () { - - console.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' ); - - }, - translate: function ( distance, axis ) { - - console.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' ); - return this.translateOnAxis( axis, distance ); - - }, - getWorldRotation: function () { - - console.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' ); - - }, - applyMatrix: function ( matrix ) { - - console.warn( 'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().' ); - return this.applyMatrix4( matrix ); - - } - - } ); - - Object.defineProperties( Object3D.prototype, { - - eulerOrder: { - get: function () { - - console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); - return this.rotation.order; - - }, - set: function ( value ) { - - console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); - this.rotation.order = value; - - } - }, - useQuaternion: { - get: function () { - - console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); - - }, - set: function () { - - console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); - - } - } - - } ); - - Object.assign( Mesh.prototype, { - - setDrawMode: function () { - - console.error( 'THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' ); - - }, - - } ); - - Object.defineProperties( Mesh.prototype, { - - drawMode: { - get: function () { - - console.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.' ); - return TrianglesDrawMode; - - }, - set: function () { - - console.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' ); - - } - } - - } ); - - Object.defineProperties( LOD.prototype, { - - objects: { - get: function () { - - console.warn( 'THREE.LOD: .objects has been renamed to .levels.' ); - return this.levels; - - } - } - - } ); - - Object.defineProperty( Skeleton.prototype, 'useVertexTexture', { - - get: function () { - - console.warn( 'THREE.Skeleton: useVertexTexture has been removed.' ); - - }, - set: function () { - - console.warn( 'THREE.Skeleton: useVertexTexture has been removed.' ); - - } - - } ); - - SkinnedMesh.prototype.initBones = function () { - - console.error( 'THREE.SkinnedMesh: initBones() has been removed.' ); - - }; - - Object.defineProperty( Curve.prototype, '__arcLengthDivisions', { - - get: function () { - - console.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' ); - return this.arcLengthDivisions; - - }, - set: function ( value ) { - - console.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' ); - this.arcLengthDivisions = value; - - } - - } ); - - // - - PerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) { - - console.warn( "THREE.PerspectiveCamera.setLens is deprecated. " + - "Use .setFocalLength and .filmGauge for a photographic setup." ); - - if ( filmGauge !== undefined ) this.filmGauge = filmGauge; - this.setFocalLength( focalLength ); - - }; - - // - - Object.defineProperties( Light.prototype, { - onlyShadow: { - set: function () { - - console.warn( 'THREE.Light: .onlyShadow has been removed.' ); - - } - }, - shadowCameraFov: { - set: function ( value ) { - - console.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' ); - this.shadow.camera.fov = value; - - } - }, - shadowCameraLeft: { - set: function ( value ) { - - console.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' ); - this.shadow.camera.left = value; - - } - }, - shadowCameraRight: { - set: function ( value ) { - - console.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' ); - this.shadow.camera.right = value; - - } - }, - shadowCameraTop: { - set: function ( value ) { - - console.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' ); - this.shadow.camera.top = value; - - } - }, - shadowCameraBottom: { - set: function ( value ) { - - console.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' ); - this.shadow.camera.bottom = value; - - } - }, - shadowCameraNear: { - set: function ( value ) { - - console.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' ); - this.shadow.camera.near = value; - - } - }, - shadowCameraFar: { - set: function ( value ) { - - console.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' ); - this.shadow.camera.far = value; - - } - }, - shadowCameraVisible: { - set: function () { - - console.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' ); - - } - }, - shadowBias: { - set: function ( value ) { - - console.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' ); - this.shadow.bias = value; - - } - }, - shadowDarkness: { - set: function () { - - console.warn( 'THREE.Light: .shadowDarkness has been removed.' ); - - } - }, - shadowMapWidth: { - set: function ( value ) { - - console.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' ); - this.shadow.mapSize.width = value; - - } - }, - shadowMapHeight: { - set: function ( value ) { - - console.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' ); - this.shadow.mapSize.height = value; - - } - } - } ); - - // - - Object.defineProperties( BufferAttribute.prototype, { - - length: { - get: function () { - - console.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' ); - return this.array.length; - - } - }, - dynamic: { - get: function () { - - console.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' ); - return this.usage === DynamicDrawUsage; - - }, - set: function ( /* value */ ) { - - console.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' ); - this.setUsage( DynamicDrawUsage ); - - } - } - - } ); - - Object.assign( BufferAttribute.prototype, { - setDynamic: function ( value ) { - - console.warn( 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.' ); - this.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage ); - return this; - - }, - copyIndicesArray: function ( /* indices */ ) { - - console.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' ); - - }, - setArray: function ( /* array */ ) { - - console.error( 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' ); - - } - } ); - - Object.assign( BufferGeometry.prototype, { - - addIndex: function ( index ) { - - console.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' ); - this.setIndex( index ); - - }, - addAttribute: function ( name, attribute ) { - - console.warn( 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().' ); - - if ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) { - - console.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' ); - - return this.setAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) ); - - } - - if ( name === 'index' ) { - - console.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' ); - this.setIndex( attribute ); - - return this; - - } - - return this.setAttribute( name, attribute ); - - }, - addDrawCall: function ( start, count, indexOffset ) { - - if ( indexOffset !== undefined ) { - - console.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' ); - - } - - console.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' ); - this.addGroup( start, count ); - - }, - clearDrawCalls: function () { - - console.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' ); - this.clearGroups(); - - }, - computeTangents: function () { - - console.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' ); - - }, - computeOffsets: function () { - - console.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' ); - - }, - removeAttribute: function ( name ) { - - console.warn( 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().' ); - - return this.deleteAttribute( name ); - - }, - applyMatrix: function ( matrix ) { - - console.warn( 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().' ); - return this.applyMatrix4( matrix ); - - } - - } ); - - Object.defineProperties( BufferGeometry.prototype, { - - drawcalls: { - get: function () { - - console.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' ); - return this.groups; - - } - }, - offsets: { - get: function () { - - console.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' ); - return this.groups; - - } - } - - } ); - - Object.defineProperties( InstancedBufferGeometry.prototype, { - - maxInstancedCount: { - get: function () { - - console.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' ); - return this.instanceCount; - - }, - set: function ( value ) { - - console.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' ); - this.instanceCount = value; - - } - } - - } ); - - Object.defineProperties( Raycaster.prototype, { - - linePrecision: { - get: function () { - - console.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' ); - return this.params.Line.threshold; - - }, - set: function ( value ) { - - console.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' ); - this.params.Line.threshold = value; - - } - } - - } ); - - Object.defineProperties( InterleavedBuffer.prototype, { - - dynamic: { - get: function () { - - console.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' ); - return this.usage === DynamicDrawUsage; - - }, - set: function ( value ) { - - console.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' ); - this.setUsage( value ); - - } - } - - } ); - - Object.assign( InterleavedBuffer.prototype, { - setDynamic: function ( value ) { - - console.warn( 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.' ); - this.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage ); - return this; - - }, - setArray: function ( /* array */ ) { - - console.error( 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' ); - - } - } ); - - // - - Object.assign( ExtrudeBufferGeometry.prototype, { - - getArrays: function () { - - console.error( 'THREE.ExtrudeBufferGeometry: .getArrays() has been removed.' ); - - }, - - addShapeList: function () { - - console.error( 'THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.' ); - - }, - - addShape: function () { - - console.error( 'THREE.ExtrudeBufferGeometry: .addShape() has been removed.' ); - - } - - } ); - - // - - Object.assign( Scene.prototype, { - - dispose: function () { - - console.error( 'THREE.Scene: .dispose() has been removed.' ); - - } - - } ); - - // - - Object.defineProperties( Uniform.prototype, { - - dynamic: { - set: function () { - - console.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' ); - - } - }, - onUpdate: { - value: function () { - - console.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' ); - return this; - - } - } - - } ); - - // - - Object.defineProperties( Material.prototype, { - - wrapAround: { - get: function () { - - console.warn( 'THREE.Material: .wrapAround has been removed.' ); - - }, - set: function () { - - console.warn( 'THREE.Material: .wrapAround has been removed.' ); - - } - }, - - overdraw: { - get: function () { - - console.warn( 'THREE.Material: .overdraw has been removed.' ); - - }, - set: function () { - - console.warn( 'THREE.Material: .overdraw has been removed.' ); - - } - }, - - wrapRGB: { - get: function () { - - console.warn( 'THREE.Material: .wrapRGB has been removed.' ); - return new Color(); - - } - }, - - shading: { - get: function () { - - console.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); - - }, - set: function ( value ) { - - console.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); - this.flatShading = ( value === FlatShading ); - - } - }, - - stencilMask: { - get: function () { - - console.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' ); - return this.stencilFuncMask; - - }, - set: function ( value ) { - - console.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' ); - this.stencilFuncMask = value; - - } - } - - } ); - - Object.defineProperties( MeshPhongMaterial.prototype, { - - metal: { - get: function () { - - console.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' ); - return false; - - }, - set: function () { - - console.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' ); - - } - } - - } ); - - Object.defineProperties( MeshPhysicalMaterial.prototype, { - - transparency: { - get: function () { - - console.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' ); - return this.transmission; - - }, - set: function ( value ) { - - console.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' ); - this.transmission = value; - - } - } - - } ); - - Object.defineProperties( ShaderMaterial.prototype, { - - derivatives: { - get: function () { - - console.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); - return this.extensions.derivatives; - - }, - set: function ( value ) { - - console.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); - this.extensions.derivatives = value; - - } - } - - } ); - - // - - Object.assign( WebGLRenderer.prototype, { - - clearTarget: function ( renderTarget, color, depth, stencil ) { - - console.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' ); - this.setRenderTarget( renderTarget ); - this.clear( color, depth, stencil ); - - }, - animate: function ( callback ) { - - console.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' ); - this.setAnimationLoop( callback ); - - }, - getCurrentRenderTarget: function () { - - console.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' ); - return this.getRenderTarget(); - - }, - getMaxAnisotropy: function () { - - console.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' ); - return this.capabilities.getMaxAnisotropy(); - - }, - getPrecision: function () { - - console.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' ); - return this.capabilities.precision; - - }, - resetGLState: function () { - - console.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' ); - return this.state.reset(); - - }, - supportsFloatTextures: function () { - - console.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \'OES_texture_float\' ).' ); - return this.extensions.get( 'OES_texture_float' ); - - }, - supportsHalfFloatTextures: function () { - - console.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \'OES_texture_half_float\' ).' ); - return this.extensions.get( 'OES_texture_half_float' ); - - }, - supportsStandardDerivatives: function () { - - console.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \'OES_standard_derivatives\' ).' ); - return this.extensions.get( 'OES_standard_derivatives' ); - - }, - supportsCompressedTextureS3TC: function () { - - console.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \'WEBGL_compressed_texture_s3tc\' ).' ); - return this.extensions.get( 'WEBGL_compressed_texture_s3tc' ); - - }, - supportsCompressedTexturePVRTC: function () { - - console.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \'WEBGL_compressed_texture_pvrtc\' ).' ); - return this.extensions.get( 'WEBGL_compressed_texture_pvrtc' ); - - }, - supportsBlendMinMax: function () { - - console.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \'EXT_blend_minmax\' ).' ); - return this.extensions.get( 'EXT_blend_minmax' ); - - }, - supportsVertexTextures: function () { - - console.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' ); - return this.capabilities.vertexTextures; - - }, - supportsInstancedArrays: function () { - - console.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \'ANGLE_instanced_arrays\' ).' ); - return this.extensions.get( 'ANGLE_instanced_arrays' ); - - }, - enableScissorTest: function ( boolean ) { - - console.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' ); - this.setScissorTest( boolean ); - - }, - initMaterial: function () { - - console.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' ); - - }, - addPrePlugin: function () { - - console.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' ); - - }, - addPostPlugin: function () { - - console.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' ); - - }, - updateShadowMap: function () { - - console.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' ); - - }, - setFaceCulling: function () { - - console.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' ); - - }, - allocTextureUnit: function () { - - console.warn( 'THREE.WebGLRenderer: .allocTextureUnit() has been removed.' ); - - }, - setTexture: function () { - - console.warn( 'THREE.WebGLRenderer: .setTexture() has been removed.' ); - - }, - setTexture2D: function () { - - console.warn( 'THREE.WebGLRenderer: .setTexture2D() has been removed.' ); - - }, - setTextureCube: function () { - - console.warn( 'THREE.WebGLRenderer: .setTextureCube() has been removed.' ); - - }, - getActiveMipMapLevel: function () { - - console.warn( 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().' ); - return this.getActiveMipmapLevel(); - - } - - } ); - - Object.defineProperties( WebGLRenderer.prototype, { - - shadowMapEnabled: { - get: function () { - - return this.shadowMap.enabled; - - }, - set: function ( value ) { - - console.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' ); - this.shadowMap.enabled = value; - - } - }, - shadowMapType: { - get: function () { - - return this.shadowMap.type; - - }, - set: function ( value ) { - - console.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' ); - this.shadowMap.type = value; - - } - }, - shadowMapCullFace: { - get: function () { - - console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' ); - return undefined; - - }, - set: function ( /* value */ ) { - - console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' ); - - } - }, - context: { - get: function () { - - console.warn( 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' ); - return this.getContext(); - - } - }, - vr: { - get: function () { - - console.warn( 'THREE.WebGLRenderer: .vr has been renamed to .xr' ); - return this.xr; - - } - }, - gammaInput: { - get: function () { - - console.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' ); - return false; - - }, - set: function () { - - console.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' ); - - } - }, - gammaOutput: { - get: function () { - - console.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' ); - return false; - - }, - set: function ( value ) { - - console.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' ); - this.outputEncoding = ( value === true ) ? sRGBEncoding : LinearEncoding; - - } - }, - toneMappingWhitePoint: { - get: function () { - - console.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' ); - return 1.0; - - }, - set: function () { - - console.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' ); - - } - }, - - } ); - - Object.defineProperties( WebGLShadowMap.prototype, { - - cullFace: { - get: function () { - - console.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' ); - return undefined; - - }, - set: function ( /* cullFace */ ) { - - console.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' ); - - } - }, - renderReverseSided: { - get: function () { - - console.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' ); - return undefined; - - }, - set: function () { - - console.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' ); - - } - }, - renderSingleSided: { - get: function () { - - console.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' ); - return undefined; - - }, - set: function () { - - console.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' ); - - } - } - - } ); - - // - - Object.defineProperties( WebGLRenderTarget.prototype, { - - wrapS: { - get: function () { - - console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); - return this.texture.wrapS; - - }, - set: function ( value ) { - - console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); - this.texture.wrapS = value; - - } - }, - wrapT: { - get: function () { - - console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); - return this.texture.wrapT; - - }, - set: function ( value ) { - - console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); - this.texture.wrapT = value; - - } - }, - magFilter: { - get: function () { - - console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); - return this.texture.magFilter; - - }, - set: function ( value ) { - - console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); - this.texture.magFilter = value; - - } - }, - minFilter: { - get: function () { - - console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); - return this.texture.minFilter; - - }, - set: function ( value ) { - - console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); - this.texture.minFilter = value; - - } - }, - anisotropy: { - get: function () { - - console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); - return this.texture.anisotropy; - - }, - set: function ( value ) { - - console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); - this.texture.anisotropy = value; - - } - }, - offset: { - get: function () { - - console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); - return this.texture.offset; - - }, - set: function ( value ) { - - console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); - this.texture.offset = value; - - } - }, - repeat: { - get: function () { - - console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); - return this.texture.repeat; - - }, - set: function ( value ) { - - console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); - this.texture.repeat = value; - - } - }, - format: { - get: function () { - - console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); - return this.texture.format; - - }, - set: function ( value ) { - - console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); - this.texture.format = value; - - } - }, - type: { - get: function () { - - console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); - return this.texture.type; - - }, - set: function ( value ) { - - console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); - this.texture.type = value; - - } - }, - generateMipmaps: { - get: function () { - - console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); - return this.texture.generateMipmaps; - - }, - set: function ( value ) { - - console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); - this.texture.generateMipmaps = value; - - } - } - - } ); - - // - - Object.defineProperties( Audio.prototype, { - - load: { - value: function ( file ) { - - console.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' ); - const scope = this; - const audioLoader = new AudioLoader(); - audioLoader.load( file, function ( buffer ) { - - scope.setBuffer( buffer ); - - } ); - return this; - - } - }, - startTime: { - set: function () { - - console.warn( 'THREE.Audio: .startTime is now .play( delay ).' ); - - } - } - - } ); - - // - - CubeCamera.prototype.updateCubeMap = function ( renderer, scene ) { - - console.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' ); - return this.update( renderer, scene ); - - }; - - CubeCamera.prototype.clear = function ( renderer, color, depth, stencil ) { - - console.warn( 'THREE.CubeCamera: .clear() is now .renderTarget.clear().' ); - return this.renderTarget.clear( renderer, color, depth, stencil ); - - }; - - ImageUtils.crossOrigin = undefined; - - ImageUtils.loadTexture = function ( url, mapping, onLoad, onError ) { - - console.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' ); - - const loader = new TextureLoader(); - loader.setCrossOrigin( this.crossOrigin ); - - const texture = loader.load( url, onLoad, undefined, onError ); - - if ( mapping ) texture.mapping = mapping; - - return texture; - - }; - - ImageUtils.loadTextureCube = function ( urls, mapping, onLoad, onError ) { - - console.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' ); - - const loader = new CubeTextureLoader(); - loader.setCrossOrigin( this.crossOrigin ); - - const texture = loader.load( urls, onLoad, undefined, onError ); - - if ( mapping ) texture.mapping = mapping; - - return texture; - - }; - - ImageUtils.loadCompressedTexture = function () { - - console.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' ); - - }; - - ImageUtils.loadCompressedTextureCube = function () { - - console.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' ); - - }; - - if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { - - /* eslint-disable no-undef */ - __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: { - revision: REVISION, - } } ) ); - /* eslint-enable no-undef */ - - } - - var DragControls = function ( _objects, _camera, _domElement ) { - - var _plane = new Plane(); - var _raycaster = new Raycaster(); - - var _mouse = new Vector2(); - var _offset = new Vector3(); - var _intersection = new Vector3(); - var _worldPosition = new Vector3(); - var _inverseMatrix = new Matrix4(); - var _intersections = []; - - var _selected = null, _hovered = null; - - // - - var scope = this; - - function activate() { - - _domElement.addEventListener( 'pointermove', onPointerMove, false ); - _domElement.addEventListener( 'pointerdown', onPointerDown, false ); - _domElement.addEventListener( 'pointerup', onPointerCancel, false ); - _domElement.addEventListener( 'pointerleave', onPointerCancel, false ); - _domElement.addEventListener( 'touchmove', onTouchMove, false ); - _domElement.addEventListener( 'touchstart', onTouchStart, false ); - _domElement.addEventListener( 'touchend', onTouchEnd, false ); - - } - - function deactivate() { - - _domElement.removeEventListener( 'pointermove', onPointerMove, false ); - _domElement.removeEventListener( 'pointerdown', onPointerDown, false ); - _domElement.removeEventListener( 'pointerup', onPointerCancel, false ); - _domElement.removeEventListener( 'pointerleave', onPointerCancel, false ); - _domElement.removeEventListener( 'touchmove', onTouchMove, false ); - _domElement.removeEventListener( 'touchstart', onTouchStart, false ); - _domElement.removeEventListener( 'touchend', onTouchEnd, false ); - - _domElement.style.cursor = ''; - - } - - function dispose() { - - deactivate(); - - } - - function getObjects() { - - return _objects; - - } - - function onPointerMove( event ) { - - event.preventDefault(); - - switch ( event.pointerType ) { - - case 'mouse': - case 'pen': - onMouseMove( event ); - break; - - // TODO touch - - } - - } - - function onMouseMove( event ) { - - var rect = _domElement.getBoundingClientRect(); - - _mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1; - _mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1; - - _raycaster.setFromCamera( _mouse, _camera ); - - if ( _selected && scope.enabled ) { - - if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) { - - _selected.position.copy( _intersection.sub( _offset ).applyMatrix4( _inverseMatrix ) ); - - } - - scope.dispatchEvent( { type: 'drag', object: _selected } ); - - return; - - } - - _intersections.length = 0; - - _raycaster.setFromCamera( _mouse, _camera ); - _raycaster.intersectObjects( _objects, true, _intersections ); - - if ( _intersections.length > 0 ) { - - var object = _intersections[ 0 ].object; - - _plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( object.matrixWorld ) ); - - if ( _hovered !== object ) { - - scope.dispatchEvent( { type: 'hoveron', object: object } ); - - _domElement.style.cursor = 'pointer'; - _hovered = object; - - } - - } else { - - if ( _hovered !== null ) { - - scope.dispatchEvent( { type: 'hoveroff', object: _hovered } ); - - _domElement.style.cursor = 'auto'; - _hovered = null; - - } - - } - - } - - function onPointerDown( event ) { - - event.preventDefault(); - - switch ( event.pointerType ) { - - case 'mouse': - case 'pen': - onMouseDown( event ); - break; - - // TODO touch - - } - - } - - function onMouseDown( event ) { - - event.preventDefault(); - - _intersections.length = 0; - - _raycaster.setFromCamera( _mouse, _camera ); - _raycaster.intersectObjects( _objects, true, _intersections ); - - if ( _intersections.length > 0 ) { - - _selected = ( scope.transformGroup === true ) ? _objects[ 0 ] : _intersections[ 0 ].object; - - if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) { - - _inverseMatrix.copy( _selected.parent.matrixWorld ).invert(); - _offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) ); - - } - - _domElement.style.cursor = 'move'; - - scope.dispatchEvent( { type: 'dragstart', object: _selected } ); - - } - - - } - - function onPointerCancel( event ) { - - event.preventDefault(); - - switch ( event.pointerType ) { - - case 'mouse': - case 'pen': - onMouseCancel( event ); - break; - - // TODO touch - - } - - } - - function onMouseCancel( event ) { - - event.preventDefault(); - - if ( _selected ) { - - scope.dispatchEvent( { type: 'dragend', object: _selected } ); - - _selected = null; - - } - - _domElement.style.cursor = _hovered ? 'pointer' : 'auto'; - - } - - function onTouchMove( event ) { - - event.preventDefault(); - event = event.changedTouches[ 0 ]; - - var rect = _domElement.getBoundingClientRect(); - - _mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1; - _mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1; - - _raycaster.setFromCamera( _mouse, _camera ); - - if ( _selected && scope.enabled ) { - - if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) { - - _selected.position.copy( _intersection.sub( _offset ).applyMatrix4( _inverseMatrix ) ); - - } - - scope.dispatchEvent( { type: 'drag', object: _selected } ); - - return; - - } - - } - - function onTouchStart( event ) { - - event.preventDefault(); - event = event.changedTouches[ 0 ]; - - var rect = _domElement.getBoundingClientRect(); - - _mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1; - _mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1; - - _intersections.length = 0; - - _raycaster.setFromCamera( _mouse, _camera ); - _raycaster.intersectObjects( _objects, true, _intersections ); - - if ( _intersections.length > 0 ) { - - _selected = ( scope.transformGroup === true ) ? _objects[ 0 ] : _intersections[ 0 ].object; - - _plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) ); - - if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) { - - _inverseMatrix.copy( _selected.parent.matrixWorld ).invert(); - _offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) ); - - } - - _domElement.style.cursor = 'move'; - - scope.dispatchEvent( { type: 'dragstart', object: _selected } ); - - } - - - } - - function onTouchEnd( event ) { - - event.preventDefault(); - - if ( _selected ) { - - scope.dispatchEvent( { type: 'dragend', object: _selected } ); - - _selected = null; - - } - - _domElement.style.cursor = 'auto'; - - } - - activate(); - - // API - - this.enabled = true; - this.transformGroup = false; - - this.activate = activate; - this.deactivate = deactivate; - this.dispose = dispose; - this.getObjects = getObjects; - - }; - - DragControls.prototype = Object.create( EventDispatcher.prototype ); - DragControls.prototype.constructor = DragControls; - - function forceCenter(x, y, z) { - var nodes, strength = 1; - - if (x == null) x = 0; - if (y == null) y = 0; - if (z == null) z = 0; - - function force() { - var i, - n = nodes.length, - node, - sx = 0, - sy = 0, - sz = 0; - - for (i = 0; i < n; ++i) { - node = nodes[i], sx += node.x || 0, sy += node.y || 0, sz += node.z || 0; - } - - for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, sz = (sz / n - z) * strength, i = 0; i < n; ++i) { - node = nodes[i]; - if (sx) { node.x -= sx; } - if (sy) { node.y -= sy; } - if (sz) { node.z -= sz; } - } - } - - force.initialize = function(_) { - nodes = _; - }; - - force.x = function(_) { - return arguments.length ? (x = +_, force) : x; - }; - - force.y = function(_) { - return arguments.length ? (y = +_, force) : y; - }; - - force.z = function(_) { - return arguments.length ? (z = +_, force) : z; - }; - - force.strength = function(_) { - return arguments.length ? (strength = +_, force) : strength; - }; - - return force; - } - - function tree_add$2(d) { - var x = +this._x.call(null, d); - return add$3(this.cover(x), x, d); - } - - function add$3(tree, x, d) { - if (isNaN(x)) return tree; // ignore invalid points - - var parent, - node = tree._root, - leaf = {data: d}, - x0 = tree._x0, - x1 = tree._x1, - xm, - xp, - right, - i, - j; - - // If the tree is empty, initialize the root as a leaf. - if (!node) return tree._root = leaf, tree; - - // Find the existing leaf for the new point, or add it. - while (node.length) { - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (parent = node, !(node = node[i = +right])) return parent[i] = leaf, tree; - } - - // Is the new point is exactly coincident with the existing point? - xp = +tree._x.call(null, node.data); - if (x === xp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; - - // Otherwise, split the leaf node until the old and new point are separated. - do { - parent = parent ? parent[i] = new Array(2) : tree._root = new Array(2); - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - } while ((i = +right) === (j = +(xp >= xm))); - return parent[j] = node, parent[i] = leaf, tree; - } - - function addAll$2(data) { - var i, n = data.length, - x, - xz = new Array(n), - x0 = Infinity, - x1 = -Infinity; - - // Compute the points and their extent. - for (i = 0; i < n; ++i) { - if (isNaN(x = +this._x.call(null, data[i]))) continue; - xz[i] = x; - if (x < x0) x0 = x; - if (x > x1) x1 = x; - } - - // If there were no (valid) points, inherit the existing extent. - if (x1 < x0) x0 = this._x0, x1 = this._x1; - - // Expand the tree to cover the new points. - this.cover(x0).cover(x1); - - // Add the new points. - for (i = 0; i < n; ++i) { - add$3(this, xz[i], data[i]); - } - - return this; - } - - function tree_cover$2(x) { - if (isNaN(x = +x)) return this; // ignore invalid points - - var x0 = this._x0, - x1 = this._x1; - - // If the binarytree has no extent, initialize them. - // Integer extent are necessary so that if we later double the extent, - // the existing half boundaries don’t change due to floating point error! - if (isNaN(x0)) { - x1 = (x0 = Math.floor(x)) + 1; - } - - // Otherwise, double repeatedly to cover. - else if (x0 > x || x > x1) { - var z = x1 - x0, - node = this._root, - parent, - i; - - switch (i = +(x < (x0 + x1) / 2)) { - case 0: { - do parent = new Array(2), parent[i] = node, node = parent; - while (z *= 2, x1 = x0 + z, x > x1); - break; - } - case 1: { - do parent = new Array(2), parent[i] = node, node = parent; - while (z *= 2, x0 = x1 - z, x0 > x); - break; - } - } - - if (this._root && this._root.length) this._root = node; - } - - // If the binarytree covers the point already, just return. - else return this; - - this._x0 = x0; - this._x1 = x1; - return this; - } - - function tree_data$2() { - var data = []; - this.visit(function(node) { - if (!node.length) do data.push(node.data); while (node = node.next) - }); - return data; - } - - function tree_extent$2(_) { - return arguments.length - ? this.cover(+_[0][0]).cover(+_[1][0]) - : isNaN(this._x0) ? undefined : [[this._x0], [this._x1]]; - } - - function Half(node, x0, x1) { - this.node = node; - this.x0 = x0; - this.x1 = x1; - } - - function tree_find$2(x, radius) { - var data, - x0 = this._x0, - x1, - x2, - x3 = this._x1, - halves = [], - node = this._root, - q, - i; - - if (node) halves.push(new Half(node, x0, x3)); - if (radius == null) radius = Infinity; - else { - x0 = x - radius; - x3 = x + radius; - } - - while (q = halves.pop()) { - - // Stop searching if this half can’t contain a closer node. - if (!(node = q.node) - || (x1 = q.x0) > x3 - || (x2 = q.x1) < x0) continue; - - // Bisect the current half. - if (node.length) { - var xm = (x1 + x2) / 2; - - halves.push( - new Half(node[1], xm, x2), - new Half(node[0], x1, xm) - ); - - // Visit the closest half first. - if (i = +(x >= xm)) { - q = halves[halves.length - 1]; - halves[halves.length - 1] = halves[halves.length - 1 - i]; - halves[halves.length - 1 - i] = q; - } - } - - // Visit this point. (Visiting coincident points isn’t necessary!) - else { - var d = Math.abs(x - +this._x.call(null, node.data)); - if (d < radius) { - radius = d; - x0 = x - d; - x3 = x + d; - data = node.data; - } - } - } - - return data; - } - - function tree_remove$2(d) { - if (isNaN(x = +this._x.call(null, d))) return this; // ignore invalid points - - var parent, - node = this._root, - retainer, - previous, - next, - x0 = this._x0, - x1 = this._x1, - x, - xm, - right, - i, - j; - - // If the tree is empty, initialize the root as a leaf. - if (!node) return this; - - // Find the leaf node for the point. - // While descending, also retain the deepest parent with a non-removed sibling. - if (node.length) while (true) { - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (!(parent = node, node = node[i = +right])) return this; - if (!node.length) break; - if (parent[(i + 1) & 1]) retainer = parent, j = i; - } - - // Find the point to remove. - while (node.data !== d) if (!(previous = node, node = node.next)) return this; - if (next = node.next) delete node.next; - - // If there are multiple coincident points, remove just the point. - if (previous) return (next ? previous.next = next : delete previous.next), this; - - // If this is the root point, remove it. - if (!parent) return this._root = next, this; - - // Remove this leaf. - next ? parent[i] = next : delete parent[i]; - - // If the parent now contains exactly one leaf, collapse superfluous parents. - if ((node = parent[0] || parent[1]) - && node === (parent[1] || parent[0]) - && !node.length) { - if (retainer) retainer[j] = node; - else this._root = node; - } - - return this; - } - - function removeAll$3(data) { - for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]); - return this; - } - - function tree_root$2() { - return this._root; - } - - function tree_size$2() { - var size = 0; - this.visit(function(node) { - if (!node.length) do ++size; while (node = node.next) - }); - return size; - } - - function tree_visit$2(callback) { - var halves = [], q, node = this._root, child, x0, x1; - if (node) halves.push(new Half(node, this._x0, this._x1)); - while (q = halves.pop()) { - if (!callback(node = q.node, x0 = q.x0, x1 = q.x1) && node.length) { - var xm = (x0 + x1) / 2; - if (child = node[1]) halves.push(new Half(child, xm, x1)); - if (child = node[0]) halves.push(new Half(child, x0, xm)); - } - } - return this; - } - - function tree_visitAfter$2(callback) { - var halves = [], next = [], q; - if (this._root) halves.push(new Half(this._root, this._x0, this._x1)); - while (q = halves.pop()) { - var node = q.node; - if (node.length) { - var child, x0 = q.x0, x1 = q.x1, xm = (x0 + x1) / 2; - if (child = node[0]) halves.push(new Half(child, x0, xm)); - if (child = node[1]) halves.push(new Half(child, xm, x1)); - } - next.push(q); - } - while (q = next.pop()) { - callback(q.node, q.x0, q.x1); - } - return this; - } - - function defaultX$2(d) { - return d[0]; - } - - function tree_x$2(_) { - return arguments.length ? (this._x = _, this) : this._x; - } - - function binarytree(nodes, x) { - var tree = new Binarytree(x == null ? defaultX$2 : x, NaN, NaN); - return nodes == null ? tree : tree.addAll(nodes); - } - - function Binarytree(x, x0, x1) { - this._x = x; - this._x0 = x0; - this._x1 = x1; - this._root = undefined; - } - - function leaf_copy$2(leaf) { - var copy = {data: leaf.data}, next = copy; - while (leaf = leaf.next) next = next.next = {data: leaf.data}; - return copy; - } - - var treeProto$2 = binarytree.prototype = Binarytree.prototype; - - treeProto$2.copy = function() { - var copy = new Binarytree(this._x, this._x0, this._x1), - node = this._root, - nodes, - child; - - if (!node) return copy; - - if (!node.length) return copy._root = leaf_copy$2(node), copy; - - nodes = [{source: node, target: copy._root = new Array(2)}]; - while (node = nodes.pop()) { - for (var i = 0; i < 2; ++i) { - if (child = node.source[i]) { - if (child.length) nodes.push({source: child, target: node.target[i] = new Array(2)}); - else node.target[i] = leaf_copy$2(child); - } - } - } - - return copy; - }; - - treeProto$2.add = tree_add$2; - treeProto$2.addAll = addAll$2; - treeProto$2.cover = tree_cover$2; - treeProto$2.data = tree_data$2; - treeProto$2.extent = tree_extent$2; - treeProto$2.find = tree_find$2; - treeProto$2.remove = tree_remove$2; - treeProto$2.removeAll = removeAll$3; - treeProto$2.root = tree_root$2; - treeProto$2.size = tree_size$2; - treeProto$2.visit = tree_visit$2; - treeProto$2.visitAfter = tree_visitAfter$2; - treeProto$2.x = tree_x$2; - - function tree_add$1(d) { - const x = +this._x.call(null, d), - y = +this._y.call(null, d); - return add$2(this.cover(x, y), x, y, d); - } - - function add$2(tree, x, y, d) { - if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points - - var parent, - node = tree._root, - leaf = {data: d}, - x0 = tree._x0, - y0 = tree._y0, - x1 = tree._x1, - y1 = tree._y1, - xm, - ym, - xp, - yp, - right, - bottom, - i, - j; - - // If the tree is empty, initialize the root as a leaf. - if (!node) return tree._root = leaf, tree; - - // Find the existing leaf for the new point, or add it. - while (node.length) { - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; - if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree; - } - - // Is the new point is exactly coincident with the existing point? - xp = +tree._x.call(null, node.data); - yp = +tree._y.call(null, node.data); - if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; - - // Otherwise, split the leaf node until the old and new point are separated. - do { - parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4); - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; - } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm))); - return parent[j] = node, parent[i] = leaf, tree; - } - - function addAll$1(data) { - var d, i, n = data.length, - x, - y, - xz = new Array(n), - yz = new Array(n), - x0 = Infinity, - y0 = Infinity, - x1 = -Infinity, - y1 = -Infinity; - - // Compute the points and their extent. - for (i = 0; i < n; ++i) { - if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue; - xz[i] = x; - yz[i] = y; - if (x < x0) x0 = x; - if (x > x1) x1 = x; - if (y < y0) y0 = y; - if (y > y1) y1 = y; - } - - // If there were no (valid) points, abort. - if (x0 > x1 || y0 > y1) return this; - - // Expand the tree to cover the new points. - this.cover(x0, y0).cover(x1, y1); - - // Add the new points. - for (i = 0; i < n; ++i) { - add$2(this, xz[i], yz[i], data[i]); - } - - return this; - } - - function tree_cover$1(x, y) { - if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points - - var x0 = this._x0, - y0 = this._y0, - x1 = this._x1, - y1 = this._y1; - - // If the quadtree has no extent, initialize them. - // Integer extent are necessary so that if we later double the extent, - // the existing quadrant boundaries don’t change due to floating point error! - if (isNaN(x0)) { - x1 = (x0 = Math.floor(x)) + 1; - y1 = (y0 = Math.floor(y)) + 1; - } - - // Otherwise, double repeatedly to cover. - else { - var z = x1 - x0 || 1, - node = this._root, - parent, - i; - - while (x0 > x || x >= x1 || y0 > y || y >= y1) { - i = (y < y0) << 1 | (x < x0); - parent = new Array(4), parent[i] = node, node = parent, z *= 2; - switch (i) { - case 0: x1 = x0 + z, y1 = y0 + z; break; - case 1: x0 = x1 - z, y1 = y0 + z; break; - case 2: x1 = x0 + z, y0 = y1 - z; break; - case 3: x0 = x1 - z, y0 = y1 - z; break; - } - } - - if (this._root && this._root.length) this._root = node; - } - - this._x0 = x0; - this._y0 = y0; - this._x1 = x1; - this._y1 = y1; - return this; - } - - function tree_data$1() { - var data = []; - this.visit(function(node) { - if (!node.length) do data.push(node.data); while (node = node.next) - }); - return data; - } - - function tree_extent$1(_) { - return arguments.length - ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1]) - : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]]; - } - - function Quad(node, x0, y0, x1, y1) { - this.node = node; - this.x0 = x0; - this.y0 = y0; - this.x1 = x1; - this.y1 = y1; - } - - function tree_find$1(x, y, radius) { - var data, - x0 = this._x0, - y0 = this._y0, - x1, - y1, - x2, - y2, - x3 = this._x1, - y3 = this._y1, - quads = [], - node = this._root, - q, - i; - - if (node) quads.push(new Quad(node, x0, y0, x3, y3)); - if (radius == null) radius = Infinity; - else { - x0 = x - radius, y0 = y - radius; - x3 = x + radius, y3 = y + radius; - radius *= radius; - } - - while (q = quads.pop()) { - - // Stop searching if this quadrant can’t contain a closer node. - if (!(node = q.node) - || (x1 = q.x0) > x3 - || (y1 = q.y0) > y3 - || (x2 = q.x1) < x0 - || (y2 = q.y1) < y0) continue; - - // Bisect the current quadrant. - if (node.length) { - var xm = (x1 + x2) / 2, - ym = (y1 + y2) / 2; - - quads.push( - new Quad(node[3], xm, ym, x2, y2), - new Quad(node[2], x1, ym, xm, y2), - new Quad(node[1], xm, y1, x2, ym), - new Quad(node[0], x1, y1, xm, ym) - ); - - // Visit the closest quadrant first. - if (i = (y >= ym) << 1 | (x >= xm)) { - q = quads[quads.length - 1]; - quads[quads.length - 1] = quads[quads.length - 1 - i]; - quads[quads.length - 1 - i] = q; - } - } - - // Visit this point. (Visiting coincident points isn’t necessary!) - else { - var dx = x - +this._x.call(null, node.data), - dy = y - +this._y.call(null, node.data), - d2 = dx * dx + dy * dy; - if (d2 < radius) { - var d = Math.sqrt(radius = d2); - x0 = x - d, y0 = y - d; - x3 = x + d, y3 = y + d; - data = node.data; - } - } - } - - return data; - } - - function tree_remove$1(d) { - if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points - - var parent, - node = this._root, - retainer, - previous, - next, - x0 = this._x0, - y0 = this._y0, - x1 = this._x1, - y1 = this._y1, - x, - y, - xm, - ym, - right, - bottom, - i, - j; - - // If the tree is empty, initialize the root as a leaf. - if (!node) return this; - - // Find the leaf node for the point. - // While descending, also retain the deepest parent with a non-removed sibling. - if (node.length) while (true) { - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; - if (!(parent = node, node = node[i = bottom << 1 | right])) return this; - if (!node.length) break; - if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i; - } - - // Find the point to remove. - while (node.data !== d) if (!(previous = node, node = node.next)) return this; - if (next = node.next) delete node.next; - - // If there are multiple coincident points, remove just the point. - if (previous) return (next ? previous.next = next : delete previous.next), this; - - // If this is the root point, remove it. - if (!parent) return this._root = next, this; - - // Remove this leaf. - next ? parent[i] = next : delete parent[i]; - - // If the parent now contains exactly one leaf, collapse superfluous parents. - if ((node = parent[0] || parent[1] || parent[2] || parent[3]) - && node === (parent[3] || parent[2] || parent[1] || parent[0]) - && !node.length) { - if (retainer) retainer[j] = node; - else this._root = node; - } - - return this; - } - - function removeAll$2(data) { - for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]); - return this; - } - - function tree_root$1() { - return this._root; - } - - function tree_size$1() { - var size = 0; - this.visit(function(node) { - if (!node.length) do ++size; while (node = node.next) - }); - return size; - } - - function tree_visit$1(callback) { - var quads = [], q, node = this._root, child, x0, y0, x1, y1; - if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1)); - while (q = quads.pop()) { - if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) { - var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; - if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1)); - if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1)); - if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym)); - if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym)); - } - } - return this; - } - - function tree_visitAfter$1(callback) { - var quads = [], next = [], q; - if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1)); - while (q = quads.pop()) { - var node = q.node; - if (node.length) { - var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; - if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym)); - if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym)); - if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1)); - if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1)); - } - next.push(q); - } - while (q = next.pop()) { - callback(q.node, q.x0, q.y0, q.x1, q.y1); - } - return this; - } - - function defaultX$1(d) { - return d[0]; - } - - function tree_x$1(_) { - return arguments.length ? (this._x = _, this) : this._x; - } - - function defaultY$1(d) { - return d[1]; - } - - function tree_y$1(_) { - return arguments.length ? (this._y = _, this) : this._y; - } - - function quadtree(nodes, x, y) { - var tree = new Quadtree(x == null ? defaultX$1 : x, y == null ? defaultY$1 : y, NaN, NaN, NaN, NaN); - return nodes == null ? tree : tree.addAll(nodes); - } - - function Quadtree(x, y, x0, y0, x1, y1) { - this._x = x; - this._y = y; - this._x0 = x0; - this._y0 = y0; - this._x1 = x1; - this._y1 = y1; - this._root = undefined; - } - - function leaf_copy$1(leaf) { - var copy = {data: leaf.data}, next = copy; - while (leaf = leaf.next) next = next.next = {data: leaf.data}; - return copy; - } - - var treeProto$1 = quadtree.prototype = Quadtree.prototype; - - treeProto$1.copy = function() { - var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1), - node = this._root, - nodes, - child; - - if (!node) return copy; - - if (!node.length) return copy._root = leaf_copy$1(node), copy; - - nodes = [{source: node, target: copy._root = new Array(4)}]; - while (node = nodes.pop()) { - for (var i = 0; i < 4; ++i) { - if (child = node.source[i]) { - if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)}); - else node.target[i] = leaf_copy$1(child); - } - } - } - - return copy; - }; - - treeProto$1.add = tree_add$1; - treeProto$1.addAll = addAll$1; - treeProto$1.cover = tree_cover$1; - treeProto$1.data = tree_data$1; - treeProto$1.extent = tree_extent$1; - treeProto$1.find = tree_find$1; - treeProto$1.remove = tree_remove$1; - treeProto$1.removeAll = removeAll$2; - treeProto$1.root = tree_root$1; - treeProto$1.size = tree_size$1; - treeProto$1.visit = tree_visit$1; - treeProto$1.visitAfter = tree_visitAfter$1; - treeProto$1.x = tree_x$1; - treeProto$1.y = tree_y$1; - - function tree_add(d) { - var x = +this._x.call(null, d), - y = +this._y.call(null, d), - z = +this._z.call(null, d); - return add$1(this.cover(x, y, z), x, y, z, d); - } - - function add$1(tree, x, y, z, d) { - if (isNaN(x) || isNaN(y) || isNaN(z)) return tree; // ignore invalid points - - var parent, - node = tree._root, - leaf = {data: d}, - x0 = tree._x0, - y0 = tree._y0, - z0 = tree._z0, - x1 = tree._x1, - y1 = tree._y1, - z1 = tree._z1, - xm, - ym, - zm, - xp, - yp, - zp, - right, - bottom, - deep, - i, - j; - - // If the tree is empty, initialize the root as a leaf. - if (!node) return tree._root = leaf, tree; - - // Find the existing leaf for the new point, or add it. - while (node.length) { - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; - if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm; else z1 = zm; - if (parent = node, !(node = node[i = deep << 2 | bottom << 1 | right])) return parent[i] = leaf, tree; - } - - // Is the new point is exactly coincident with the existing point? - xp = +tree._x.call(null, node.data); - yp = +tree._y.call(null, node.data); - zp = +tree._z.call(null, node.data); - if (x === xp && y === yp && z === zp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; - - // Otherwise, split the leaf node until the old and new point are separated. - do { - parent = parent ? parent[i] = new Array(8) : tree._root = new Array(8); - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; - if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm; else z1 = zm; - } while ((i = deep << 2 | bottom << 1 | right) === (j = (zp >= zm) << 2 | (yp >= ym) << 1 | (xp >= xm))); - return parent[j] = node, parent[i] = leaf, tree; - } - - function addAll(data) { - var d, i, n = data.length, - x, - y, - z, - xz = new Array(n), - yz = new Array(n), - zz = new Array(n), - x0 = Infinity, - y0 = Infinity, - z0 = Infinity, - x1 = -Infinity, - y1 = -Infinity, - z1 = -Infinity; - - // Compute the points and their extent. - for (i = 0; i < n; ++i) { - if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d)) || isNaN(z = +this._z.call(null, d))) continue; - xz[i] = x; - yz[i] = y; - zz[i] = z; - if (x < x0) x0 = x; - if (x > x1) x1 = x; - if (y < y0) y0 = y; - if (y > y1) y1 = y; - if (z < z0) z0 = z; - if (z > z1) z1 = z; - } - - // If there were no (valid) points, inherit the existing extent. - if (x1 < x0) x0 = this._x0, x1 = this._x1; - if (y1 < y0) y0 = this._y0, y1 = this._y1; - if (z1 < z0) z0 = this._z0, z1 = this._z1; - - // Expand the tree to cover the new points. - this.cover(x0, y0, z0).cover(x1, y1, z1); - - // Add the new points. - for (i = 0; i < n; ++i) { - add$1(this, xz[i], yz[i], zz[i], data[i]); - } - - return this; - } - - function tree_cover(x, y, z) { - if (isNaN(x = +x) || isNaN(y = +y) || isNaN(z = +z)) return this; // ignore invalid points - - var x0 = this._x0, - y0 = this._y0, - z0 = this._z0, - x1 = this._x1, - y1 = this._y1, - z1 = this._z1; - - // If the octree has no extent, initialize them. - // Integer extent are necessary so that if we later double the extent, - // the existing octant boundaries don’t change due to floating point error! - if (isNaN(x0)) { - x1 = (x0 = Math.floor(x)) + 1; - y1 = (y0 = Math.floor(y)) + 1; - z1 = (z0 = Math.floor(z)) + 1; - } - - // Otherwise, double repeatedly to cover. - else if (x0 > x || x > x1 || y0 > y || y > y1 || z0 > z || z > z1) { - var t = x1 - x0, - node = this._root, - parent, - i; - - switch (i = (z < (z0 + z1) / 2) << 2 | (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) { - case 0: { - do parent = new Array(8), parent[i] = node, node = parent; - while (t *= 2, x1 = x0 + t, y1 = y0 + t, z1 = z0 + t, x > x1 || y > y1 || z > z1); - break; - } - case 1: { - do parent = new Array(8), parent[i] = node, node = parent; - while (t *= 2, x0 = x1 - t, y1 = y0 + t, z1 = z0 + t, x0 > x || y > y1 || z > z1); - break; - } - case 2: { - do parent = new Array(8), parent[i] = node, node = parent; - while (t *= 2, x1 = x0 + t, y0 = y1 - t, z1 = z0 + t, x > x1 || y0 > y || z > z1); - break; - } - case 3: { - do parent = new Array(8), parent[i] = node, node = parent; - while (t *= 2, x0 = x1 - t, y0 = y1 - t, z1 = z0 + t, x0 > x || y0 > y || z > z1); - break; - } - case 4: { - do parent = new Array(8), parent[i] = node, node = parent; - while (t *= 2, x1 = x0 + t, y1 = y0 + t, z0 = z1 - t, x > x1 || y > y1 || z0 > z); - break; - } - case 5: { - do parent = new Array(8), parent[i] = node, node = parent; - while (t *= 2, x0 = x1 - t, y1 = y0 + t, z0 = z1 - t, x0 > x || y > y1 || z0 > z); - break; - } - case 6: { - do parent = new Array(8), parent[i] = node, node = parent; - while (t *= 2, x1 = x0 + t, y0 = y1 - t, z0 = z1 - t, x > x1 || y0 > y || z0 > z); - break; - } - case 7: { - do parent = new Array(8), parent[i] = node, node = parent; - while (t *= 2, x0 = x1 - t, y0 = y1 - t, z0 = z1 - t, x0 > x || y0 > y || z0 > z); - break; - } - } - - if (this._root && this._root.length) this._root = node; - } - - // If the octree covers the point already, just return. - else return this; - - this._x0 = x0; - this._y0 = y0; - this._z0 = z0; - this._x1 = x1; - this._y1 = y1; - this._z1 = z1; - return this; - } - - function tree_data() { - var data = []; - this.visit(function(node) { - if (!node.length) do data.push(node.data); while (node = node.next) - }); - return data; - } - - function tree_extent(_) { - return arguments.length - ? this.cover(+_[0][0], +_[0][1], +_[0][2]).cover(+_[1][0], +_[1][1], +_[1][2]) - : isNaN(this._x0) ? undefined : [[this._x0, this._y0, this._z0], [this._x1, this._y1, this._z1]]; - } - - function Octant(node, x0, y0, z0, x1, y1, z1) { - this.node = node; - this.x0 = x0; - this.y0 = y0; - this.z0 = z0; - this.x1 = x1; - this.y1 = y1; - this.z1 = z1; - } - - function tree_find(x, y, z, radius) { - var data, - x0 = this._x0, - y0 = this._y0, - z0 = this._z0, - x1, - y1, - z1, - x2, - y2, - z2, - x3 = this._x1, - y3 = this._y1, - z3 = this._z1, - octs = [], - node = this._root, - q, - i; - - if (node) octs.push(new Octant(node, x0, y0, z0, x3, y3, z3)); - if (radius == null) radius = Infinity; - else { - x0 = x - radius, y0 = y - radius, z0 = z - radius; - x3 = x + radius, y3 = y + radius, z3 = z + radius; - radius *= radius; - } - - while (q = octs.pop()) { - - // Stop searching if this octant can’t contain a closer node. - if (!(node = q.node) - || (x1 = q.x0) > x3 - || (y1 = q.y0) > y3 - || (z1 = q.z0) > z3 - || (x2 = q.x1) < x0 - || (y2 = q.y1) < y0 - || (z2 = q.z1) < z0) continue; - - // Bisect the current octant. - if (node.length) { - var xm = (x1 + x2) / 2, - ym = (y1 + y2) / 2, - zm = (z1 + z2) / 2; - - octs.push( - new Octant(node[7], xm, ym, zm, x2, y2, z2), - new Octant(node[6], x1, ym, zm, xm, y2, z2), - new Octant(node[5], xm, y1, zm, x2, ym, z2), - new Octant(node[4], x1, y1, zm, xm, ym, z2), - new Octant(node[3], xm, ym, z1, x2, y2, zm), - new Octant(node[2], x1, ym, z1, xm, y2, zm), - new Octant(node[1], xm, y1, z1, x2, ym, zm), - new Octant(node[0], x1, y1, z1, xm, ym, zm) - ); - - // Visit the closest octant first. - if (i = (z >= zm) << 2 | (y >= ym) << 1 | (x >= xm)) { - q = octs[octs.length - 1]; - octs[octs.length - 1] = octs[octs.length - 1 - i]; - octs[octs.length - 1 - i] = q; - } - } - - // Visit this point. (Visiting coincident points isn’t necessary!) - else { - var dx = x - +this._x.call(null, node.data), - dy = y - +this._y.call(null, node.data), - dz = z - +this._z.call(null, node.data), - d2 = dx * dx + dy * dy + dz * dz; - if (d2 < radius) { - var d = Math.sqrt(radius = d2); - x0 = x - d, y0 = y - d, z0 = z - d; - x3 = x + d, y3 = y + d, z3 = z + d; - data = node.data; - } - } - } - - return data; - } - - function tree_remove(d) { - if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d)) || isNaN(z = +this._z.call(null, d))) return this; // ignore invalid points - - var parent, - node = this._root, - retainer, - previous, - next, - x0 = this._x0, - y0 = this._y0, - z0 = this._z0, - x1 = this._x1, - y1 = this._y1, - z1 = this._z1, - x, - y, - z, - xm, - ym, - zm, - right, - bottom, - deep, - i, - j; - - // If the tree is empty, initialize the root as a leaf. - if (!node) return this; - - // Find the leaf node for the point. - // While descending, also retain the deepest parent with a non-removed sibling. - if (node.length) while (true) { - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; - if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm; else z1 = zm; - if (!(parent = node, node = node[i = deep << 2 | bottom << 1 | right])) return this; - if (!node.length) break; - if (parent[(i + 1) & 7] || parent[(i + 2) & 7] || parent[(i + 3) & 7] || parent[(i + 4) & 7] || parent[(i + 5) & 7] || parent[(i + 6) & 7] || parent[(i + 7) & 7]) retainer = parent, j = i; - } - - // Find the point to remove. - while (node.data !== d) if (!(previous = node, node = node.next)) return this; - if (next = node.next) delete node.next; - - // If there are multiple coincident points, remove just the point. - if (previous) return (next ? previous.next = next : delete previous.next), this; - - // If this is the root point, remove it. - if (!parent) return this._root = next, this; - - // Remove this leaf. - next ? parent[i] = next : delete parent[i]; - - // If the parent now contains exactly one leaf, collapse superfluous parents. - if ((node = parent[0] || parent[1] || parent[2] || parent[3] || parent[4] || parent[5] || parent[6] || parent[7]) - && node === (parent[7] || parent[6] || parent[5] || parent[4] || parent[3] || parent[2] || parent[1] || parent[0]) - && !node.length) { - if (retainer) retainer[j] = node; - else this._root = node; - } - - return this; - } - - function removeAll$1(data) { - for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]); - return this; - } - - function tree_root() { - return this._root; - } - - function tree_size() { - var size = 0; - this.visit(function(node) { - if (!node.length) do ++size; while (node = node.next) - }); - return size; - } - - function tree_visit(callback) { - var octs = [], q, node = this._root, child, x0, y0, z0, x1, y1, z1; - if (node) octs.push(new Octant(node, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1)); - while (q = octs.pop()) { - if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, z0 = q.z0, x1 = q.x1, y1 = q.y1, z1 = q.z1) && node.length) { - var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2, zm = (z0 + z1) / 2; - if (child = node[7]) octs.push(new Octant(child, xm, ym, zm, x1, y1, z1)); - if (child = node[6]) octs.push(new Octant(child, x0, ym, zm, xm, y1, z1)); - if (child = node[5]) octs.push(new Octant(child, xm, y0, zm, x1, ym, z1)); - if (child = node[4]) octs.push(new Octant(child, x0, y0, zm, xm, ym, z1)); - if (child = node[3]) octs.push(new Octant(child, xm, ym, z0, x1, y1, zm)); - if (child = node[2]) octs.push(new Octant(child, x0, ym, z0, xm, y1, zm)); - if (child = node[1]) octs.push(new Octant(child, xm, y0, z0, x1, ym, zm)); - if (child = node[0]) octs.push(new Octant(child, x0, y0, z0, xm, ym, zm)); - } - } - return this; - } - - function tree_visitAfter(callback) { - var octs = [], next = [], q; - if (this._root) octs.push(new Octant(this._root, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1)); - while (q = octs.pop()) { - var node = q.node; - if (node.length) { - var child, x0 = q.x0, y0 = q.y0, z0 = q.z0, x1 = q.x1, y1 = q.y1, z1 = q.z1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2, zm = (z0 + z1) / 2; - if (child = node[0]) octs.push(new Octant(child, x0, y0, z0, xm, ym, zm)); - if (child = node[1]) octs.push(new Octant(child, xm, y0, z0, x1, ym, zm)); - if (child = node[2]) octs.push(new Octant(child, x0, ym, z0, xm, y1, zm)); - if (child = node[3]) octs.push(new Octant(child, xm, ym, z0, x1, y1, zm)); - if (child = node[4]) octs.push(new Octant(child, x0, y0, zm, xm, ym, z1)); - if (child = node[5]) octs.push(new Octant(child, xm, y0, zm, x1, ym, z1)); - if (child = node[6]) octs.push(new Octant(child, x0, ym, zm, xm, y1, z1)); - if (child = node[7]) octs.push(new Octant(child, xm, ym, zm, x1, y1, z1)); - } - next.push(q); - } - while (q = next.pop()) { - callback(q.node, q.x0, q.y0, q.z0, q.x1, q.y1, q.z1); - } - return this; - } - - function defaultX(d) { - return d[0]; - } - - function tree_x(_) { - return arguments.length ? (this._x = _, this) : this._x; - } - - function defaultY(d) { - return d[1]; - } - - function tree_y(_) { - return arguments.length ? (this._y = _, this) : this._y; - } - - function defaultZ(d) { - return d[2]; - } - - function tree_z(_) { - return arguments.length ? (this._z = _, this) : this._z; - } - - function octree(nodes, x, y, z) { - var tree = new Octree(x == null ? defaultX : x, y == null ? defaultY : y, z == null ? defaultZ : z, NaN, NaN, NaN, NaN, NaN, NaN); - return nodes == null ? tree : tree.addAll(nodes); - } - - function Octree(x, y, z, x0, y0, z0, x1, y1, z1) { - this._x = x; - this._y = y; - this._z = z; - this._x0 = x0; - this._y0 = y0; - this._z0 = z0; - this._x1 = x1; - this._y1 = y1; - this._z1 = z1; - this._root = undefined; - } - - function leaf_copy(leaf) { - var copy = {data: leaf.data}, next = copy; - while (leaf = leaf.next) next = next.next = {data: leaf.data}; - return copy; - } - - var treeProto = octree.prototype = Octree.prototype; - - treeProto.copy = function() { - var copy = new Octree(this._x, this._y, this._z, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1), - node = this._root, - nodes, - child; - - if (!node) return copy; - - if (!node.length) return copy._root = leaf_copy(node), copy; - - nodes = [{source: node, target: copy._root = new Array(8)}]; - while (node = nodes.pop()) { - for (var i = 0; i < 8; ++i) { - if (child = node.source[i]) { - if (child.length) nodes.push({source: child, target: node.target[i] = new Array(8)}); - else node.target[i] = leaf_copy(child); - } - } - } - - return copy; - }; - - treeProto.add = tree_add; - treeProto.addAll = addAll; - treeProto.cover = tree_cover; - treeProto.data = tree_data; - treeProto.extent = tree_extent; - treeProto.find = tree_find; - treeProto.remove = tree_remove; - treeProto.removeAll = removeAll$1; - treeProto.root = tree_root; - treeProto.size = tree_size; - treeProto.visit = tree_visit; - treeProto.visitAfter = tree_visitAfter; - treeProto.x = tree_x; - treeProto.y = tree_y; - treeProto.z = tree_z; - - function constant(x) { - return function() { - return x; - }; - } - - function jiggle(random) { - return (random() - 0.5) * 1e-6; - } - - function index$3(d) { - return d.index; - } - - function find(nodeById, nodeId) { - var node = nodeById.get(nodeId); - if (!node) throw new Error("node not found: " + nodeId); - return node; - } - - function forceLink(links) { - var id = index$3, - strength = defaultStrength, - strengths, - distance = constant(30), - distances, - nodes, - nDim, - count, - bias, - random, - iterations = 1; - - if (links == null) links = []; - - function defaultStrength(link) { - return 1 / Math.min(count[link.source.index], count[link.target.index]); - } - - function force(alpha) { - for (var k = 0, n = links.length; k < iterations; ++k) { - for (var i = 0, link, source, target, x = 0, y = 0, z = 0, l, b; i < n; ++i) { - link = links[i], source = link.source, target = link.target; - x = target.x + target.vx - source.x - source.vx || jiggle(random); - if (nDim > 1) { y = target.y + target.vy - source.y - source.vy || jiggle(random); } - if (nDim > 2) { z = target.z + target.vz - source.z - source.vz || jiggle(random); } - l = Math.sqrt(x * x + y * y + z * z); - l = (l - distances[i]) / l * alpha * strengths[i]; - x *= l, y *= l, z *= l; - - target.vx -= x * (b = bias[i]); - if (nDim > 1) { target.vy -= y * b; } - if (nDim > 2) { target.vz -= z * b; } - - source.vx += x * (b = 1 - b); - if (nDim > 1) { source.vy += y * b; } - if (nDim > 2) { source.vz += z * b; } - } - } - } - - function initialize() { - if (!nodes) return; - - var i, - n = nodes.length, - m = links.length, - nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])), - link; - - for (i = 0, count = new Array(n); i < m; ++i) { - link = links[i], link.index = i; - if (typeof link.source !== "object") link.source = find(nodeById, link.source); - if (typeof link.target !== "object") link.target = find(nodeById, link.target); - count[link.source.index] = (count[link.source.index] || 0) + 1; - count[link.target.index] = (count[link.target.index] || 0) + 1; - } - - for (i = 0, bias = new Array(m); i < m; ++i) { - link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]); - } - - strengths = new Array(m), initializeStrength(); - distances = new Array(m), initializeDistance(); - } - - function initializeStrength() { - if (!nodes) return; - - for (var i = 0, n = links.length; i < n; ++i) { - strengths[i] = +strength(links[i], i, links); - } - } - - function initializeDistance() { - if (!nodes) return; - - for (var i = 0, n = links.length; i < n; ++i) { - distances[i] = +distance(links[i], i, links); - } - } - - force.initialize = function(_nodes, _numDimensions, _random) { - nodes = _nodes; - nDim = _numDimensions; - random = _random; - initialize(); - }; - - force.links = function(_) { - return arguments.length ? (links = _, initialize(), force) : links; - }; - - force.id = function(_) { - return arguments.length ? (id = _, force) : id; - }; - - force.iterations = function(_) { - return arguments.length ? (iterations = +_, force) : iterations; - }; - - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initializeStrength(), force) : strength; - }; - - force.distance = function(_) { - return arguments.length ? (distance = typeof _ === "function" ? _ : constant(+_), initializeDistance(), force) : distance; - }; - - return force; - } - - var noop$1 = {value: () => {}}; - - function dispatch() { - for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { - if (!(t = arguments[i] + "") || (t in _) || /[\s.]/.test(t)) throw new Error("illegal type: " + t); - _[t] = []; - } - return new Dispatch(_); - } - - function Dispatch(_) { - this._ = _; - } - - function parseTypenames(typenames, types) { - return typenames.trim().split(/^|\s+/).map(function(t) { - var name = "", i = t.indexOf("."); - if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); - if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); - return {type: t, name: name}; - }); - } - - Dispatch.prototype = dispatch.prototype = { - constructor: Dispatch, - on: function(typename, callback) { - var _ = this._, - T = parseTypenames(typename + "", _), - t, - i = -1, - n = T.length; - - // If no callback was specified, return the callback of the given type and name. - if (arguments.length < 2) { - while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t; - return; - } - - // If a type was specified, set the callback for the given type and name. - // Otherwise, if a null callback was specified, remove callbacks of the given name. - if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); - while (++i < n) { - if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback); - else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null); - } - - return this; - }, - copy: function() { - var copy = {}, _ = this._; - for (var t in _) copy[t] = _[t].slice(); - return new Dispatch(copy); - }, - call: function(type, that) { - if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; - if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); - for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); - }, - apply: function(type, that, args) { - if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); - for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); - } - }; - - function get(type, name) { - for (var i = 0, n = type.length, c; i < n; ++i) { - if ((c = type[i]).name === name) { - return c.value; - } - } - } - - function set(type, name, callback) { - for (var i = 0, n = type.length; i < n; ++i) { - if (type[i].name === name) { - type[i] = noop$1, type = type.slice(0, i).concat(type.slice(i + 1)); - break; - } - } - if (callback != null) type.push({name: name, value: callback}); - return type; - } - - var frame = 0, // is an animation frame pending? - timeout = 0, // is a timeout pending? - interval = 0, // are any timers active? - pokeDelay = 1000, // how frequently we check for clock skew - taskHead, - taskTail, - clockLast = 0, - clockNow = 0, - clockSkew = 0, - clock = typeof performance === "object" && performance.now ? performance : Date, - setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); }; - - function now$2() { - return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew); - } - - function clearNow() { - clockNow = 0; - } - - function Timer() { - this._call = - this._time = - this._next = null; - } - - Timer.prototype = timer.prototype = { - constructor: Timer, - restart: function(callback, delay, time) { - if (typeof callback !== "function") throw new TypeError("callback is not a function"); - time = (time == null ? now$2() : +time) + (delay == null ? 0 : +delay); - if (!this._next && taskTail !== this) { - if (taskTail) taskTail._next = this; - else taskHead = this; - taskTail = this; - } - this._call = callback; - this._time = time; - sleep(); - }, - stop: function() { - if (this._call) { - this._call = null; - this._time = Infinity; - sleep(); - } - } - }; - - function timer(callback, delay, time) { - var t = new Timer; - t.restart(callback, delay, time); - return t; - } - - function timerFlush() { - now$2(); // Get the current time, if not already set. - ++frame; // Pretend we’ve set an alarm, if we haven’t already. - var t = taskHead, e; - while (t) { - if ((e = clockNow - t._time) >= 0) t._call.call(null, e); - t = t._next; - } - --frame; - } - - function wake() { - clockNow = (clockLast = clock.now()) + clockSkew; - frame = timeout = 0; - try { - timerFlush(); - } finally { - frame = 0; - nap(); - clockNow = 0; - } - } - - function poke() { - var now = clock.now(), delay = now - clockLast; - if (delay > pokeDelay) clockSkew -= delay, clockLast = now; - } - - function nap() { - var t0, t1 = taskHead, t2, time = Infinity; - while (t1) { - if (t1._call) { - if (time > t1._time) time = t1._time; - t0 = t1, t1 = t1._next; - } else { - t2 = t1._next, t1._next = null; - t1 = t0 ? t0._next = t2 : taskHead = t2; - } - } - taskTail = t0; - sleep(time); - } - - function sleep(time) { - if (frame) return; // Soonest alarm already set, or will be. - if (timeout) timeout = clearTimeout(timeout); - var delay = time - clockNow; // Strictly less than if we recomputed clockNow. - if (delay > 24) { - if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew); - if (interval) interval = clearInterval(interval); - } else { - if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay); - frame = 1, setFrame(wake); - } - } - - // https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use - const a = 1664525; - const c = 1013904223; - const m = 4294967296; // 2^32 - - function lcg() { - let s = 1; - return () => (s = (a * s + c) % m) / m; - } - - var MAX_DIMENSIONS = 3; - - function x(d) { - return d.x; - } - - function y(d) { - return d.y; - } - - function z(d) { - return d.z; - } - - var initialRadius = 10, - initialAngleRoll = Math.PI * (3 - Math.sqrt(5)), // Golden ratio angle - initialAngleYaw = Math.PI * 20 / (9 + Math.sqrt(221)); // Markov irrational number - - function forceSimulation(nodes, numDimensions) { - numDimensions = numDimensions || 2; - - var nDim = Math.min(MAX_DIMENSIONS, Math.max(1, Math.round(numDimensions))), - simulation, - alpha = 1, - alphaMin = 0.001, - alphaDecay = 1 - Math.pow(alphaMin, 1 / 300), - alphaTarget = 0, - velocityDecay = 0.6, - forces = new Map(), - stepper = timer(step), - event = dispatch("tick", "end"), - random = lcg(); - - if (nodes == null) nodes = []; - - function step() { - tick(); - event.call("tick", simulation); - if (alpha < alphaMin) { - stepper.stop(); - event.call("end", simulation); - } - } - - function tick(iterations) { - var i, n = nodes.length, node; - - if (iterations === undefined) iterations = 1; - - for (var k = 0; k < iterations; ++k) { - alpha += (alphaTarget - alpha) * alphaDecay; - - forces.forEach(function (force) { - force(alpha); - }); - - for (i = 0; i < n; ++i) { - node = nodes[i]; - if (node.fx == null) node.x += node.vx *= velocityDecay; - else node.x = node.fx, node.vx = 0; - if (nDim > 1) { - if (node.fy == null) node.y += node.vy *= velocityDecay; - else node.y = node.fy, node.vy = 0; - } - if (nDim > 2) { - if (node.fz == null) node.z += node.vz *= velocityDecay; - else node.z = node.fz, node.vz = 0; - } - } - } - - return simulation; - } - - function initializeNodes() { - for (var i = 0, n = nodes.length, node; i < n; ++i) { - node = nodes[i], node.index = i; - if (node.fx != null) node.x = node.fx; - if (node.fy != null) node.y = node.fy; - if (node.fz != null) node.z = node.fz; - if (isNaN(node.x) || (nDim > 1 && isNaN(node.y)) || (nDim > 2 && isNaN(node.z))) { - var radius = initialRadius * (nDim > 2 ? Math.cbrt(0.5 + i) : (nDim > 1 ? Math.sqrt(0.5 + i) : i)), - rollAngle = i * initialAngleRoll, - yawAngle = i * initialAngleYaw; - - if (nDim === 1) { - node.x = radius; - } else if (nDim === 2) { - node.x = radius * Math.cos(rollAngle); - node.y = radius * Math.sin(rollAngle); - } else { // 3 dimensions: use spherical distribution along 2 irrational number angles - node.x = radius * Math.sin(rollAngle) * Math.cos(yawAngle); - node.y = radius * Math.cos(rollAngle); - node.z = radius * Math.sin(rollAngle) * Math.sin(yawAngle); - } - } - if (isNaN(node.vx) || (nDim > 1 && isNaN(node.vy)) || (nDim > 2 && isNaN(node.vz))) { - node.vx = 0; - if (nDim > 1) { node.vy = 0; } - if (nDim > 2) { node.vz = 0; } - } - } - } - - function initializeForce(force) { - if (force.initialize) force.initialize(nodes, nDim, random); - return force; - } - - initializeNodes(); - - return simulation = { - tick: tick, - - restart: function() { - return stepper.restart(step), simulation; - }, - - stop: function() { - return stepper.stop(), simulation; - }, - - numDimensions: function(_) { - return arguments.length - ? (nDim = Math.min(MAX_DIMENSIONS, Math.max(1, Math.round(_))), forces.forEach(initializeForce), simulation) - : nDim; - }, - - nodes: function(_) { - return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes; - }, - - alpha: function(_) { - return arguments.length ? (alpha = +_, simulation) : alpha; - }, - - alphaMin: function(_) { - return arguments.length ? (alphaMin = +_, simulation) : alphaMin; - }, - - alphaDecay: function(_) { - return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay; - }, - - alphaTarget: function(_) { - return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget; - }, - - velocityDecay: function(_) { - return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay; - }, - - randomSource: function(_) { - return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random; - }, - - force: function(name, _) { - return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name); - }, - - find: function() { - var args = Array.prototype.slice.call(arguments); - var x = args.shift() || 0, - y = (nDim > 1 ? args.shift() : null) || 0, - z = (nDim > 2 ? args.shift() : null) || 0, - radius = args.shift() || Infinity; - - var i = 0, - n = nodes.length, - dx, - dy, - dz, - d2, - node, - closest; - - radius *= radius; - - for (i = 0; i < n; ++i) { - node = nodes[i]; - dx = x - node.x; - dy = y - (node.y || 0); - dz = z - (node.z ||0); - d2 = dx * dx + dy * dy + dz * dz; - if (d2 < radius) closest = node, radius = d2; - } - - return closest; - }, - - on: function(name, _) { - return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name); - } - }; - } - - function forceManyBody() { - var nodes, - nDim, - node, - random, - alpha, - strength = constant(-30), - strengths, - distanceMin2 = 1, - distanceMax2 = Infinity, - theta2 = 0.81; - - function force(_) { - var i, - n = nodes.length, - tree = - (nDim === 1 ? binarytree(nodes, x) - :(nDim === 2 ? quadtree(nodes, x, y) - :(nDim === 3 ? octree(nodes, x, y, z) - :null - ))).visitAfter(accumulate); - - for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply); - } - - function initialize() { - if (!nodes) return; - var i, n = nodes.length, node; - strengths = new Array(n); - for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes); - } - - function accumulate(treeNode) { - var strength = 0, q, c, weight = 0, x, y, z, i; - var numChildren = treeNode.length; - - // For internal nodes, accumulate forces from children. - if (numChildren) { - for (x = y = z = i = 0; i < numChildren; ++i) { - if ((q = treeNode[i]) && (c = Math.abs(q.value))) { - strength += q.value, weight += c, x += c * (q.x || 0), y += c * (q.y || 0), z += c * (q.z || 0); - } - } - strength *= Math.sqrt(4 / numChildren); // scale accumulated strength according to number of dimensions - - treeNode.x = x / weight; - if (nDim > 1) { treeNode.y = y / weight; } - if (nDim > 2) { treeNode.z = z / weight; } - } - - // For leaf nodes, accumulate forces from coincident nodes. - else { - q = treeNode; - q.x = q.data.x; - if (nDim > 1) { q.y = q.data.y; } - if (nDim > 2) { q.z = q.data.z; } - do strength += strengths[q.data.index]; - while (q = q.next); - } - - treeNode.value = strength; - } - - function apply(treeNode, x1, arg1, arg2, arg3) { - if (!treeNode.value) return true; - var x2 = [arg1, arg2, arg3][nDim-1]; - - var x = treeNode.x - node.x, - y = (nDim > 1 ? treeNode.y - node.y : 0), - z = (nDim > 2 ? treeNode.z - node.z : 0), - w = x2 - x1, - l = x * x + y * y + z * z; - - // Apply the Barnes-Hut approximation if possible. - // Limit forces for very close nodes; randomize direction if coincident. - if (w * w / theta2 < l) { - if (l < distanceMax2) { - if (x === 0) x = jiggle(random), l += x * x; - if (nDim > 1 && y === 0) y = jiggle(random), l += y * y; - if (nDim > 2 && z === 0) z = jiggle(random), l += z * z; - if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); - node.vx += x * treeNode.value * alpha / l; - if (nDim > 1) { node.vy += y * treeNode.value * alpha / l; } - if (nDim > 2) { node.vz += z * treeNode.value * alpha / l; } - } - return true; - } - - // Otherwise, process points directly. - else if (treeNode.length || l >= distanceMax2) return; - - // Limit forces for very close nodes; randomize direction if coincident. - if (treeNode.data !== node || treeNode.next) { - if (x === 0) x = jiggle(random), l += x * x; - if (nDim > 1 && y === 0) y = jiggle(random), l += y * y; - if (nDim > 2 && z === 0) z = jiggle(random), l += z * z; - if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); - } - - do if (treeNode.data !== node) { - w = strengths[treeNode.data.index] * alpha / l; - node.vx += x * w; - if (nDim > 1) { node.vy += y * w; } - if (nDim > 2) { node.vz += z * w; } - } while (treeNode = treeNode.next); - } - - force.initialize = function(_nodes, _numDimensions, _random) { - nodes = _nodes; - nDim = _numDimensions; - random = _random; - initialize(); - }; - - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initialize(), force) : strength; - }; - - force.distanceMin = function(_) { - return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2); - }; - - force.distanceMax = function(_) { - return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2); - }; - - force.theta = function(_) { - return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2); - }; - - return force; - } - - function forceRadial(radius, x, y, z) { - var nodes, - nDim, - strength = constant(0.1), - strengths, - radiuses; - - if (typeof radius !== "function") radius = constant(+radius); - if (x == null) x = 0; - if (y == null) y = 0; - if (z == null) z = 0; - - function force(alpha) { - for (var i = 0, n = nodes.length; i < n; ++i) { - var node = nodes[i], - dx = node.x - x || 1e-6, - dy = (node.y || 0) - y || 1e-6, - dz = (node.z || 0) - z || 1e-6, - r = Math.sqrt(dx * dx + dy * dy + dz * dz), - k = (radiuses[i] - r) * strengths[i] * alpha / r; - node.vx += dx * k; - if (nDim>1) { node.vy += dy * k; } - if (nDim>2) { node.vz += dz * k; } - } - } - - function initialize() { - if (!nodes) return; - var i, n = nodes.length; - strengths = new Array(n); - radiuses = new Array(n); - for (i = 0; i < n; ++i) { - radiuses[i] = +radius(nodes[i], i, nodes); - strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes); - } - } - - force.initialize = function(initNodes, numDimensions) { - nodes = initNodes; - nDim = numDimensions; - initialize(); - }; - - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initialize(), force) : strength; - }; - - force.radius = function(_) { - return arguments.length ? (radius = typeof _ === "function" ? _ : constant(+_), initialize(), force) : radius; - }; - - force.x = function(_) { - return arguments.length ? (x = +_, force) : x; - }; - - force.y = function(_) { - return arguments.length ? (y = +_, force) : y; - }; - - force.z = function(_) { - return arguments.length ? (z = +_, force) : z; - }; - - return force; - } - - var ngraph_events = function eventify(subject) { - validateSubject(subject); - - var eventsStorage = createEventsStorage(subject); - subject.on = eventsStorage.on; - subject.off = eventsStorage.off; - subject.fire = eventsStorage.fire; - return subject; - }; - - function createEventsStorage(subject) { - // Store all event listeners to this hash. Key is event name, value is array - // of callback records. - // - // A callback record consists of callback function and its optional context: - // { 'eventName' => [{callback: function, ctx: object}] } - var registeredEvents = Object.create(null); - - return { - on: function (eventName, callback, ctx) { - if (typeof callback !== 'function') { - throw new Error('callback is expected to be a function'); - } - var handlers = registeredEvents[eventName]; - if (!handlers) { - handlers = registeredEvents[eventName] = []; - } - handlers.push({callback: callback, ctx: ctx}); - - return subject; - }, - - off: function (eventName, callback) { - var wantToRemoveAll = (typeof eventName === 'undefined'); - if (wantToRemoveAll) { - // Killing old events storage should be enough in this case: - registeredEvents = Object.create(null); - return subject; - } - - if (registeredEvents[eventName]) { - var deleteAllCallbacksForEvent = (typeof callback !== 'function'); - if (deleteAllCallbacksForEvent) { - delete registeredEvents[eventName]; - } else { - var callbacks = registeredEvents[eventName]; - for (var i = 0; i < callbacks.length; ++i) { - if (callbacks[i].callback === callback) { - callbacks.splice(i, 1); - } - } - } - } - - return subject; - }, - - fire: function (eventName) { - var callbacks = registeredEvents[eventName]; - if (!callbacks) { - return subject; - } - - var fireArguments; - if (arguments.length > 1) { - fireArguments = Array.prototype.splice.call(arguments, 1); - } - for(var i = 0; i < callbacks.length; ++i) { - var callbackInfo = callbacks[i]; - callbackInfo.callback.apply(callbackInfo.ctx, fireArguments); - } - - return subject; - } - }; - } - - function validateSubject(subject) { - if (!subject) { - throw new Error('Eventify cannot use falsy object as events subject'); - } - var reservedWords = ['on', 'fire', 'off']; - for (var i = 0; i < reservedWords.length; ++i) { - if (subject.hasOwnProperty(reservedWords[i])) { - throw new Error("Subject cannot be eventified, since it already has property '" + reservedWords[i] + "'"); - } - } - } - - /** - * @fileOverview Contains definition of the core graph object. - */ - - // TODO: need to change storage layer: - // 1. Be able to get all nodes O(1) - // 2. Be able to get number of links O(1) - - /** - * @example - * var graph = require('ngraph.graph')(); - * graph.addNode(1); // graph has one node. - * graph.addLink(2, 3); // now graph contains three nodes and one link. - * - */ - var ngraph_graph = createGraph; - - var eventify$1 = ngraph_events; - - /** - * Creates a new graph - */ - function createGraph(options) { - // Graph structure is maintained as dictionary of nodes - // and array of links. Each node has 'links' property which - // hold all links related to that node. And general links - // array is used to speed up all links enumeration. This is inefficient - // in terms of memory, but simplifies coding. - options = options || {}; - if ('uniqueLinkId' in options) { - console.warn( - 'ngraph.graph: Starting from version 0.14 `uniqueLinkId` is deprecated.\n' + - 'Use `multigraph` option instead\n', - '\n', - 'Note: there is also change in default behavior: From now on each graph\n'+ - 'is considered to be not a multigraph by default (each edge is unique).' - ); - - options.multigraph = options.uniqueLinkId; - } - - // Dear reader, the non-multigraphs do not guarantee that there is only - // one link for a given pair of node. When this option is set to false - // we can save some memory and CPU (18% faster for non-multigraph); - if (options.multigraph === undefined) options.multigraph = false; - - if (typeof Map !== 'function') { - // TODO: Should we polyfill it ourselves? We don't use much operations there.. - throw new Error('ngraph.graph requires `Map` to be defined. Please polyfill it before using ngraph'); - } - - var nodes = new Map(); - var links = [], - // Hash of multi-edges. Used to track ids of edges between same nodes - multiEdges = {}, - suspendEvents = 0, - - createLink = options.multigraph ? createUniqueLink : createSingleLink, - - // Our graph API provides means to listen to graph changes. Users can subscribe - // to be notified about changes in the graph by using `on` method. However - // in some cases they don't use it. To avoid unnecessary memory consumption - // we will not record graph changes until we have at least one subscriber. - // Code below supports this optimization. - // - // Accumulates all changes made during graph updates. - // Each change element contains: - // changeType - one of the strings: 'add', 'remove' or 'update'; - // node - if change is related to node this property is set to changed graph's node; - // link - if change is related to link this property is set to changed graph's link; - changes = [], - recordLinkChange = noop, - recordNodeChange = noop, - enterModification = noop, - exitModification = noop; - - // this is our public API: - var graphPart = { - /** - * Adds node to the graph. If node with given id already exists in the graph - * its data is extended with whatever comes in 'data' argument. - * - * @param nodeId the node's identifier. A string or number is preferred. - * @param [data] additional data for the node being added. If node already - * exists its data object is augmented with the new one. - * - * @return {node} The newly added node or node with given id if it already exists. - */ - addNode: addNode, - - /** - * Adds a link to the graph. The function always create a new - * link between two nodes. If one of the nodes does not exists - * a new node is created. - * - * @param fromId link start node id; - * @param toId link end node id; - * @param [data] additional data to be set on the new link; - * - * @return {link} The newly created link - */ - addLink: addLink, - - /** - * Removes link from the graph. If link does not exist does nothing. - * - * @param link - object returned by addLink() or getLinks() methods. - * - * @returns true if link was removed; false otherwise. - */ - removeLink: removeLink, - - /** - * Removes node with given id from the graph. If node does not exist in the graph - * does nothing. - * - * @param nodeId node's identifier passed to addNode() function. - * - * @returns true if node was removed; false otherwise. - */ - removeNode: removeNode, - - /** - * Gets node with given identifier. If node does not exist undefined value is returned. - * - * @param nodeId requested node identifier; - * - * @return {node} in with requested identifier or undefined if no such node exists. - */ - getNode: getNode, - - /** - * Gets number of nodes in this graph. - * - * @return number of nodes in the graph. - */ - getNodeCount: getNodeCount, - - /** - * Gets total number of links in the graph. - */ - getLinkCount: getLinkCount, - - /** - * Synonym for `getLinkCount()` - */ - getLinksCount: getLinkCount, - - /** - * Synonym for `getNodeCount()` - */ - getNodesCount: getNodeCount, - - /** - * Gets all links (inbound and outbound) from the node with given id. - * If node with given id is not found null is returned. - * - * @param nodeId requested node identifier. - * - * @return Array of links from and to requested node if such node exists; - * otherwise null is returned. - */ - getLinks: getLinks, - - /** - * Invokes callback on each node of the graph. - * - * @param {Function(node)} callback Function to be invoked. The function - * is passed one argument: visited node. - */ - forEachNode: forEachNode, - - /** - * Invokes callback on every linked (adjacent) node to the given one. - * - * @param nodeId Identifier of the requested node. - * @param {Function(node, link)} callback Function to be called on all linked nodes. - * The function is passed two parameters: adjacent node and link object itself. - * @param oriented if true graph treated as oriented. - */ - forEachLinkedNode: forEachLinkedNode, - - /** - * Enumerates all links in the graph - * - * @param {Function(link)} callback Function to be called on all links in the graph. - * The function is passed one parameter: graph's link object. - * - * Link object contains at least the following fields: - * fromId - node id where link starts; - * toId - node id where link ends, - * data - additional data passed to graph.addLink() method. - */ - forEachLink: forEachLink, - - /** - * Suspend all notifications about graph changes until - * endUpdate is called. - */ - beginUpdate: enterModification, - - /** - * Resumes all notifications about graph changes and fires - * graph 'changed' event in case there are any pending changes. - */ - endUpdate: exitModification, - - /** - * Removes all nodes and links from the graph. - */ - clear: clear, - - /** - * Detects whether there is a link between two nodes. - * Operation complexity is O(n) where n - number of links of a node. - * NOTE: this function is synonim for getLink() - * - * @returns link if there is one. null otherwise. - */ - hasLink: getLink, - - /** - * Detects whether there is a node with given id - * - * Operation complexity is O(1) - * NOTE: this function is synonim for getNode() - * - * @returns node if there is one; Falsy value otherwise. - */ - hasNode: getNode, - - /** - * Gets an edge between two nodes. - * Operation complexity is O(n) where n - number of links of a node. - * - * @param {string} fromId link start identifier - * @param {string} toId link end identifier - * - * @returns link if there is one. null otherwise. - */ - getLink: getLink - }; - - // this will add `on()` and `fire()` methods. - eventify$1(graphPart); - - monitorSubscribers(); - - return graphPart; - - function monitorSubscribers() { - var realOn = graphPart.on; - - // replace real `on` with our temporary on, which will trigger change - // modification monitoring: - graphPart.on = on; - - function on() { - // now it's time to start tracking stuff: - graphPart.beginUpdate = enterModification = enterModificationReal; - graphPart.endUpdate = exitModification = exitModificationReal; - recordLinkChange = recordLinkChangeReal; - recordNodeChange = recordNodeChangeReal; - - // this will replace current `on` method with real pub/sub from `eventify`. - graphPart.on = realOn; - // delegate to real `on` handler: - return realOn.apply(graphPart, arguments); - } - } - - function recordLinkChangeReal(link, changeType) { - changes.push({ - link: link, - changeType: changeType - }); - } - - function recordNodeChangeReal(node, changeType) { - changes.push({ - node: node, - changeType: changeType - }); - } - - function addNode(nodeId, data) { - if (nodeId === undefined) { - throw new Error('Invalid node identifier'); - } - - enterModification(); - - var node = getNode(nodeId); - if (!node) { - node = new Node(nodeId, data); - recordNodeChange(node, 'add'); - } else { - node.data = data; - recordNodeChange(node, 'update'); - } - - nodes.set(nodeId, node); - - exitModification(); - return node; - } - - function getNode(nodeId) { - return nodes.get(nodeId); - } - - function removeNode(nodeId) { - var node = getNode(nodeId); - if (!node) { - return false; - } - - enterModification(); - - var prevLinks = node.links; - if (prevLinks) { - node.links = null; - for(var i = 0; i < prevLinks.length; ++i) { - removeLink(prevLinks[i]); - } - } - - nodes.delete(nodeId); - - recordNodeChange(node, 'remove'); - - exitModification(); - - return true; - } - - - function addLink(fromId, toId, data) { - enterModification(); - - var fromNode = getNode(fromId) || addNode(fromId); - var toNode = getNode(toId) || addNode(toId); - - var link = createLink(fromId, toId, data); - - links.push(link); - - // TODO: this is not cool. On large graphs potentially would consume more memory. - addLinkToNode(fromNode, link); - if (fromId !== toId) { - // make sure we are not duplicating links for self-loops - addLinkToNode(toNode, link); - } - - recordLinkChange(link, 'add'); - - exitModification(); - - return link; - } - - function createSingleLink(fromId, toId, data) { - var linkId = makeLinkId(fromId, toId); - return new Link(fromId, toId, data, linkId); - } - - function createUniqueLink(fromId, toId, data) { - // TODO: Get rid of this method. - var linkId = makeLinkId(fromId, toId); - var isMultiEdge = multiEdges.hasOwnProperty(linkId); - if (isMultiEdge || getLink(fromId, toId)) { - if (!isMultiEdge) { - multiEdges[linkId] = 0; - } - var suffix = '@' + (++multiEdges[linkId]); - linkId = makeLinkId(fromId + suffix, toId + suffix); - } - - return new Link(fromId, toId, data, linkId); - } - - function getNodeCount() { - return nodes.size; - } - - function getLinkCount() { - return links.length; - } - - function getLinks(nodeId) { - var node = getNode(nodeId); - return node ? node.links : null; - } - - function removeLink(link) { - if (!link) { - return false; - } - var idx = indexOfElementInArray(link, links); - if (idx < 0) { - return false; - } - - enterModification(); - - links.splice(idx, 1); - - var fromNode = getNode(link.fromId); - var toNode = getNode(link.toId); - - if (fromNode) { - idx = indexOfElementInArray(link, fromNode.links); - if (idx >= 0) { - fromNode.links.splice(idx, 1); - } - } - - if (toNode) { - idx = indexOfElementInArray(link, toNode.links); - if (idx >= 0) { - toNode.links.splice(idx, 1); - } - } - - recordLinkChange(link, 'remove'); - - exitModification(); - - return true; - } - - function getLink(fromNodeId, toNodeId) { - // TODO: Use sorted links to speed this up - var node = getNode(fromNodeId), - i; - if (!node || !node.links) { - return null; - } - - for (i = 0; i < node.links.length; ++i) { - var link = node.links[i]; - if (link.fromId === fromNodeId && link.toId === toNodeId) { - return link; - } - } - - return null; // no link. - } - - function clear() { - enterModification(); - forEachNode(function(node) { - removeNode(node.id); - }); - exitModification(); - } - - function forEachLink(callback) { - var i, length; - if (typeof callback === 'function') { - for (i = 0, length = links.length; i < length; ++i) { - callback(links[i]); - } - } - } - - function forEachLinkedNode(nodeId, callback, oriented) { - var node = getNode(nodeId); - - if (node && node.links && typeof callback === 'function') { - if (oriented) { - return forEachOrientedLink(node.links, nodeId, callback); - } else { - return forEachNonOrientedLink(node.links, nodeId, callback); - } - } - } - - function forEachNonOrientedLink(links, nodeId, callback) { - var quitFast; - for (var i = 0; i < links.length; ++i) { - var link = links[i]; - var linkedNodeId = link.fromId === nodeId ? link.toId : link.fromId; - - quitFast = callback(nodes.get(linkedNodeId), link); - if (quitFast) { - return true; // Client does not need more iterations. Break now. - } - } - } - - function forEachOrientedLink(links, nodeId, callback) { - var quitFast; - for (var i = 0; i < links.length; ++i) { - var link = links[i]; - if (link.fromId === nodeId) { - quitFast = callback(nodes.get(link.toId), link); - if (quitFast) { - return true; // Client does not need more iterations. Break now. - } - } - } - } - - // we will not fire anything until users of this library explicitly call `on()` - // method. - function noop() {} - - // Enter, Exit modification allows bulk graph updates without firing events. - function enterModificationReal() { - suspendEvents += 1; - } - - function exitModificationReal() { - suspendEvents -= 1; - if (suspendEvents === 0 && changes.length > 0) { - graphPart.fire('changed', changes); - changes.length = 0; - } - } - - function forEachNode(callback) { - if (typeof callback !== 'function') { - throw new Error('Function is expected to iterate over graph nodes. You passed ' + callback); - } - - var valuesIterator = nodes.values(); - var nextValue = valuesIterator.next(); - while (!nextValue.done) { - if (callback(nextValue.value)) { - return true; // client doesn't want to proceed. Return. - } - nextValue = valuesIterator.next(); - } - } - } - - // need this for old browsers. Should this be a separate module? - function indexOfElementInArray(element, array) { - if (!array) return -1; - - if (array.indexOf) { - return array.indexOf(element); - } - - var len = array.length, - i; - - for (i = 0; i < len; i += 1) { - if (array[i] === element) { - return i; - } - } - - return -1; - } - - /** - * Internal structure to represent node; - */ - function Node(id, data) { - this.id = id; - this.links = null; - this.data = data; - } - - function addLinkToNode(node, link) { - if (node.links) { - node.links.push(link); - } else { - node.links = [link]; - } - } - - /** - * Internal structure to represent links; - */ - function Link(fromId, toId, data, id) { - this.fromId = fromId; - this.toId = toId; - this.data = data; - this.id = id; - } - - function makeLinkId(fromId, toId) { - return fromId.toString() + '👉 ' + toId.toString(); - } - - var ngraph_forcelayout = {exports: {}}; - - var generateCreateBody = {exports: {}}; - - var getVariableName$2 = function getVariableName(index) { - if (index === 0) return 'x'; - if (index === 1) return 'y'; - if (index === 2) return 'z'; - return 'c' + (index + 1); - }; - - const getVariableName$1 = getVariableName$2; - - var createPatternBuilder$6 = function createPatternBuilder(dimension) { - - return pattern; - - function pattern(template, config) { - let indent = (config && config.indent) || 0; - let join = (config && config.join !== undefined) ? config.join : '\n'; - let indentString = Array(indent + 1).join(' '); - let buffer = []; - for (let i = 0; i < dimension; ++i) { - let variableName = getVariableName$1(i); - let prefix = (i === 0) ? '' : indentString; - buffer.push(prefix + template.replace(/{var}/g, variableName)); - } - return buffer.join(join); - } - }; - - const createPatternBuilder$5 = createPatternBuilder$6; - - generateCreateBody.exports = generateCreateBodyFunction$1; - generateCreateBody.exports.generateCreateBodyFunctionBody = generateCreateBodyFunctionBody; - - // InlineTransform: getVectorCode - generateCreateBody.exports.getVectorCode = getVectorCode; - // InlineTransform: getBodyCode - generateCreateBody.exports.getBodyCode = getBodyCode; - // InlineTransformExport: module.exports = function() { return Body; } - - function generateCreateBodyFunction$1(dimension, debugSetters) { - let code = generateCreateBodyFunctionBody(dimension, debugSetters); - let {Body} = (new Function(code))(); - return Body; - } - - function generateCreateBodyFunctionBody(dimension, debugSetters) { - let code = ` -${getVectorCode(dimension, debugSetters)} -${getBodyCode(dimension)} -return {Body: Body, Vector: Vector}; -`; - return code; - } - - function getBodyCode(dimension) { - let pattern = createPatternBuilder$5(dimension); - let variableList = pattern('{var}', {join: ', '}); - return ` -function Body(${variableList}) { - this.isPinned = false; - this.pos = new Vector(${variableList}); - this.force = new Vector(); - this.velocity = new Vector(); - this.mass = 1; - - this.springCount = 0; - this.springLength = 0; -} - -Body.prototype.reset = function() { - this.force.reset(); - this.springCount = 0; - this.springLength = 0; -} - -Body.prototype.setPosition = function (${variableList}) { - ${pattern('this.pos.{var} = {var} || 0;', {indent: 2})} -};`; - } - - function getVectorCode(dimension, debugSetters) { - let pattern = createPatternBuilder$5(dimension); - let setters = ''; - if (debugSetters) { - setters = `${pattern("\n\ - var v{var};\n\ -Object.defineProperty(this, '{var}', {\n\ - set: function(v) { \n\ - if (!Number.isFinite(v)) throw new Error('Cannot set non-numbers to {var}');\n\ - v{var} = v; \n\ - },\n\ - get: function() { return v{var}; }\n\ -});")}`; - } - - let variableList = pattern('{var}', {join: ', '}); - return `function Vector(${variableList}) { - ${setters} - if (typeof arguments[0] === 'object') { - // could be another vector - let v = arguments[0]; - ${pattern('if (!Number.isFinite(v.{var})) throw new Error("Expected value is not a finite number at Vector constructor ({var})");', {indent: 4})} - ${pattern('this.{var} = v.{var};', {indent: 4})} - } else { - ${pattern('this.{var} = typeof {var} === "number" ? {var} : 0;', {indent: 4})} - } - } - - Vector.prototype.reset = function () { - ${pattern('this.{var} = ', {join: ''})}0; - };`; - } - - var generateQuadTree = {exports: {}}; - - const createPatternBuilder$4 = createPatternBuilder$6; - const getVariableName = getVariableName$2; - - generateQuadTree.exports = generateQuadTreeFunction$1; - generateQuadTree.exports.generateQuadTreeFunctionBody = generateQuadTreeFunctionBody; - - // These exports are for InlineTransform tool. - // InlineTransform: getInsertStackCode - generateQuadTree.exports.getInsertStackCode = getInsertStackCode; - // InlineTransform: getQuadNodeCode - generateQuadTree.exports.getQuadNodeCode = getQuadNodeCode; - // InlineTransform: isSamePosition - generateQuadTree.exports.isSamePosition = isSamePosition; - // InlineTransform: getChildBodyCode - generateQuadTree.exports.getChildBodyCode = getChildBodyCode; - // InlineTransform: setChildBodyCode - generateQuadTree.exports.setChildBodyCode = setChildBodyCode; - - function generateQuadTreeFunction$1(dimension) { - let code = generateQuadTreeFunctionBody(dimension); - return (new Function(code))(); - } - - function generateQuadTreeFunctionBody(dimension) { - let pattern = createPatternBuilder$4(dimension); - let quadCount = Math.pow(2, dimension); - - let code = ` -${getInsertStackCode()} -${getQuadNodeCode(dimension)} -${isSamePosition(dimension)} -${getChildBodyCode(dimension)} -${setChildBodyCode(dimension)} - -function createQuadTree(options, random) { - options = options || {}; - options.gravity = typeof options.gravity === 'number' ? options.gravity : -1; - options.theta = typeof options.theta === 'number' ? options.theta : 0.8; - - var gravity = options.gravity; - var updateQueue = []; - var insertStack = new InsertStack(); - var theta = options.theta; - - var nodesCache = []; - var currentInCache = 0; - var root = newNode(); - - return { - insertBodies: insertBodies, - - /** - * Gets root node if it is present - */ - getRoot: function() { - return root; - }, - - updateBodyForce: update, - - options: function(newOptions) { - if (newOptions) { - if (typeof newOptions.gravity === 'number') { - gravity = newOptions.gravity; - } - if (typeof newOptions.theta === 'number') { - theta = newOptions.theta; - } - - return this; - } - - return { - gravity: gravity, - theta: theta - }; - } - }; - - function newNode() { - // To avoid pressure on GC we reuse nodes. - var node = nodesCache[currentInCache]; - if (node) { -${assignQuads(' node.')} - node.body = null; - node.mass = ${pattern('node.mass_{var} = ', {join: ''})}0; - ${pattern('node.min_{var} = node.max_{var} = ', {join: ''})}0; - } else { - node = new QuadNode(); - nodesCache[currentInCache] = node; - } - - ++currentInCache; - return node; - } - - function update(sourceBody) { - var queue = updateQueue; - var v; - ${pattern('var d{var};', {indent: 4})} - var r; - ${pattern('var f{var} = 0;', {indent: 4})} - var queueLength = 1; - var shiftIdx = 0; - var pushIdx = 1; - - queue[0] = root; - - while (queueLength) { - var node = queue[shiftIdx]; - var body = node.body; - - queueLength -= 1; - shiftIdx += 1; - var differentBody = (body !== sourceBody); - if (body && differentBody) { - // If the current node is a leaf node (and it is not source body), - // calculate the force exerted by the current node on body, and add this - // amount to body's net force. - ${pattern('d{var} = body.pos.{var} - sourceBody.pos.{var};', {indent: 8})} - r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})}); - - if (r === 0) { - // Poor man's protection against zero distance. - ${pattern('d{var} = (random.nextDouble() - 0.5) / 50;', {indent: 10})} - r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})}); - } - - // This is standard gravitation force calculation but we divide - // by r^3 to save two operations when normalizing force vector. - v = gravity * body.mass * sourceBody.mass / (r * r * r); - ${pattern('f{var} += v * d{var};', {indent: 8})} - } else if (differentBody) { - // Otherwise, calculate the ratio s / r, where s is the width of the region - // represented by the internal node, and r is the distance between the body - // and the node's center-of-mass - ${pattern('d{var} = node.mass_{var} / node.mass - sourceBody.pos.{var};', {indent: 8})} - r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})}); - - if (r === 0) { - // Sorry about code duplication. I don't want to create many functions - // right away. Just want to see performance first. - ${pattern('d{var} = (random.nextDouble() - 0.5) / 50;', {indent: 10})} - r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})}); - } - // If s / r < θ, treat this internal node as a single body, and calculate the - // force it exerts on sourceBody, and add this amount to sourceBody's net force. - if ((node.max_${getVariableName(0)} - node.min_${getVariableName(0)}) / r < theta) { - // in the if statement above we consider node's width only - // because the region was made into square during tree creation. - // Thus there is no difference between using width or height. - v = gravity * node.mass * sourceBody.mass / (r * r * r); - ${pattern('f{var} += v * d{var};', {indent: 10})} - } else { - // Otherwise, run the procedure recursively on each of the current node's children. - - // I intentionally unfolded this loop, to save several CPU cycles. -${runRecursiveOnChildren()} - } - } - } - - ${pattern('sourceBody.force.{var} += f{var};', {indent: 4})} - } - - function insertBodies(bodies) { - ${pattern('var {var}min = Number.MAX_VALUE;', {indent: 4})} - ${pattern('var {var}max = Number.MIN_VALUE;', {indent: 4})} - var i = bodies.length; - - // To reduce quad tree depth we are looking for exact bounding box of all particles. - while (i--) { - var pos = bodies[i].pos; - ${pattern('if (pos.{var} < {var}min) {var}min = pos.{var};', {indent: 6})} - ${pattern('if (pos.{var} > {var}max) {var}max = pos.{var};', {indent: 6})} - } - - // Makes the bounds square. - var maxSideLength = -Infinity; - ${pattern('if ({var}max - {var}min > maxSideLength) maxSideLength = {var}max - {var}min ;', {indent: 4})} - - currentInCache = 0; - root = newNode(); - ${pattern('root.min_{var} = {var}min;', {indent: 4})} - ${pattern('root.max_{var} = {var}min + maxSideLength;', {indent: 4})} - - i = bodies.length - 1; - if (i >= 0) { - root.body = bodies[i]; - } - while (i--) { - insert(bodies[i], root); - } - } - - function insert(newBody) { - insertStack.reset(); - insertStack.push(root, newBody); - - while (!insertStack.isEmpty()) { - var stackItem = insertStack.pop(); - var node = stackItem.node; - var body = stackItem.body; - - if (!node.body) { - // This is internal node. Update the total mass of the node and center-of-mass. - ${pattern('var {var} = body.pos.{var};', {indent: 8})} - node.mass += body.mass; - ${pattern('node.mass_{var} += body.mass * {var};', {indent: 8})} - - // Recursively insert the body in the appropriate quadrant. - // But first find the appropriate quadrant. - var quadIdx = 0; // Assume we are in the 0's quad. - ${pattern('var min_{var} = node.min_{var};', {indent: 8})} - ${pattern('var max_{var} = (min_{var} + node.max_{var}) / 2;', {indent: 8})} - -${assignInsertionQuadIndex(8)} - - var child = getChild(node, quadIdx); - - if (!child) { - // The node is internal but this quadrant is not taken. Add - // subnode to it. - child = newNode(); - ${pattern('child.min_{var} = min_{var};', {indent: 10})} - ${pattern('child.max_{var} = max_{var};', {indent: 10})} - child.body = body; - - setChild(node, quadIdx, child); - } else { - // continue searching in this quadrant. - insertStack.push(child, body); - } - } else { - // We are trying to add to the leaf node. - // We have to convert current leaf into internal node - // and continue adding two nodes. - var oldBody = node.body; - node.body = null; // internal nodes do not cary bodies - - if (isSamePosition(oldBody.pos, body.pos)) { - // Prevent infinite subdivision by bumping one node - // anywhere in this quadrant - var retriesCount = 3; - do { - var offset = random.nextDouble(); - ${pattern('var d{var} = (node.max_{var} - node.min_{var}) * offset;', {indent: 12})} - - ${pattern('oldBody.pos.{var} = node.min_{var} + d{var};', {indent: 12})} - retriesCount -= 1; - // Make sure we don't bump it out of the box. If we do, next iteration should fix it - } while (retriesCount > 0 && isSamePosition(oldBody.pos, body.pos)); - - if (retriesCount === 0 && isSamePosition(oldBody.pos, body.pos)) { - // This is very bad, we ran out of precision. - // if we do not return from the method we'll get into - // infinite loop here. So we sacrifice correctness of layout, and keep the app running - // Next layout iteration should get larger bounding box in the first step and fix this - return; - } - } - // Next iteration should subdivide node further. - insertStack.push(node, oldBody); - insertStack.push(node, body); - } - } - } -} -return createQuadTree; - -`; - return code; - - - function assignInsertionQuadIndex(indentCount) { - let insertionCode = []; - let indent = Array(indentCount + 1).join(' '); - for (let i = 0; i < dimension; ++i) { - insertionCode.push(indent + `if (${getVariableName(i)} > max_${getVariableName(i)}) {`); - insertionCode.push(indent + ` quadIdx = quadIdx + ${Math.pow(2, i)};`); - insertionCode.push(indent + ` min_${getVariableName(i)} = max_${getVariableName(i)};`); - insertionCode.push(indent + ` max_${getVariableName(i)} = node.max_${getVariableName(i)};`); - insertionCode.push(indent + `}`); - } - return insertionCode.join('\n'); - // if (x > max_x) { // somewhere in the eastern part. - // quadIdx = quadIdx + 1; - // left = right; - // right = node.right; - // } - } - - function runRecursiveOnChildren() { - let indent = Array(11).join(' '); - let recursiveCode = []; - for (let i = 0; i < quadCount; ++i) { - recursiveCode.push(indent + `if (node.quad${i}) {`); - recursiveCode.push(indent + ` queue[pushIdx] = node.quad${i};`); - recursiveCode.push(indent + ` queueLength += 1;`); - recursiveCode.push(indent + ` pushIdx += 1;`); - recursiveCode.push(indent + `}`); - } - return recursiveCode.join('\n'); - // if (node.quad0) { - // queue[pushIdx] = node.quad0; - // queueLength += 1; - // pushIdx += 1; - // } - } - - function assignQuads(indent) { - // this.quad0 = null; - // this.quad1 = null; - // this.quad2 = null; - // this.quad3 = null; - let quads = []; - for (let i = 0; i < quadCount; ++i) { - quads.push(`${indent}quad${i} = null;`); - } - return quads.join('\n'); - } - } - - function isSamePosition(dimension) { - let pattern = createPatternBuilder$4(dimension); - return ` - function isSamePosition(point1, point2) { - ${pattern('var d{var} = Math.abs(point1.{var} - point2.{var});', {indent: 2})} - - return ${pattern('d{var} < 1e-8', {join: ' && '})}; - } -`; - } - - function setChildBodyCode(dimension) { - var quadCount = Math.pow(2, dimension); - return ` -function setChild(node, idx, child) { - ${setChildBody()} -}`; - function setChildBody() { - let childBody = []; - for (let i = 0; i < quadCount; ++i) { - let prefix = (i === 0) ? ' ' : ' else '; - childBody.push(`${prefix}if (idx === ${i}) node.quad${i} = child;`); - } - - return childBody.join('\n'); - // if (idx === 0) node.quad0 = child; - // else if (idx === 1) node.quad1 = child; - // else if (idx === 2) node.quad2 = child; - // else if (idx === 3) node.quad3 = child; - } - } - - function getChildBodyCode(dimension) { - return `function getChild(node, idx) { -${getChildBody()} - return null; -}`; - - function getChildBody() { - let childBody = []; - let quadCount = Math.pow(2, dimension); - for (let i = 0; i < quadCount; ++i) { - childBody.push(` if (idx === ${i}) return node.quad${i};`); - } - - return childBody.join('\n'); - // if (idx === 0) return node.quad0; - // if (idx === 1) return node.quad1; - // if (idx === 2) return node.quad2; - // if (idx === 3) return node.quad3; - } - } - - function getQuadNodeCode(dimension) { - let pattern = createPatternBuilder$4(dimension); - let quadCount = Math.pow(2, dimension); - var quadNodeCode = ` -function QuadNode() { - // body stored inside this node. In quad tree only leaf nodes (by construction) - // contain bodies: - this.body = null; - - // Child nodes are stored in quads. Each quad is presented by number: - // 0 | 1 - // ----- - // 2 | 3 -${assignQuads(' this.')} - - // Total mass of current node - this.mass = 0; - - // Center of mass coordinates - ${pattern('this.mass_{var} = 0;', {indent: 2})} - - // bounding box coordinates - ${pattern('this.min_{var} = 0;', {indent: 2})} - ${pattern('this.max_{var} = 0;', {indent: 2})} -} -`; - return quadNodeCode; - - function assignQuads(indent) { - // this.quad0 = null; - // this.quad1 = null; - // this.quad2 = null; - // this.quad3 = null; - let quads = []; - for (let i = 0; i < quadCount; ++i) { - quads.push(`${indent}quad${i} = null;`); - } - return quads.join('\n'); - } - } - - function getInsertStackCode() { - return ` -/** - * Our implementation of QuadTree is non-recursive to avoid GC hit - * This data structure represent stack of elements - * which we are trying to insert into quad tree. - */ -function InsertStack () { - this.stack = []; - this.popIdx = 0; -} - -InsertStack.prototype = { - isEmpty: function() { - return this.popIdx === 0; - }, - push: function (node, body) { - var item = this.stack[this.popIdx]; - if (!item) { - // we are trying to avoid memory pressure: create new element - // only when absolutely necessary - this.stack[this.popIdx] = new InsertStackElement(node, body); - } else { - item.node = node; - item.body = body; - } - ++this.popIdx; - }, - pop: function () { - if (this.popIdx > 0) { - return this.stack[--this.popIdx]; - } - }, - reset: function () { - this.popIdx = 0; - } -}; - -function InsertStackElement(node, body) { - this.node = node; // QuadTree node - this.body = body; // physical body which needs to be inserted to node -} -`; - } - - var generateBounds = {exports: {}}; - - generateBounds.exports = generateBoundsFunction$1; - generateBounds.exports.generateFunctionBody = generateBoundsFunctionBody; - - const createPatternBuilder$3 = createPatternBuilder$6; - - function generateBoundsFunction$1(dimension) { - let code = generateBoundsFunctionBody(dimension); - return new Function('bodies', 'settings', 'random', code); - } - - function generateBoundsFunctionBody(dimension) { - let pattern = createPatternBuilder$3(dimension); - - let code = ` - var boundingBox = { - ${pattern('min_{var}: 0, max_{var}: 0,', {indent: 4})} - }; - - return { - box: boundingBox, - - update: updateBoundingBox, - - reset: resetBoundingBox, - - getBestNewPosition: function (neighbors) { - var ${pattern('base_{var} = 0', {join: ', '})}; - - if (neighbors.length) { - for (var i = 0; i < neighbors.length; ++i) { - let neighborPos = neighbors[i].pos; - ${pattern('base_{var} += neighborPos.{var};', {indent: 10})} - } - - ${pattern('base_{var} /= neighbors.length;', {indent: 8})} - } else { - ${pattern('base_{var} = (boundingBox.min_{var} + boundingBox.max_{var}) / 2;', {indent: 8})} - } - - var springLength = settings.springLength; - return { - ${pattern('{var}: base_{var} + (random.nextDouble() - 0.5) * springLength,', {indent: 8})} - }; - } - }; - - function updateBoundingBox() { - var i = bodies.length; - if (i === 0) return; // No bodies - no borders. - - ${pattern('var max_{var} = -Infinity;', {indent: 4})} - ${pattern('var min_{var} = Infinity;', {indent: 4})} - - while(i--) { - // this is O(n), it could be done faster with quadtree, if we check the root node bounds - var bodyPos = bodies[i].pos; - ${pattern('if (bodyPos.{var} < min_{var}) min_{var} = bodyPos.{var};', {indent: 6})} - ${pattern('if (bodyPos.{var} > max_{var}) max_{var} = bodyPos.{var};', {indent: 6})} - } - - ${pattern('boundingBox.min_{var} = min_{var};', {indent: 4})} - ${pattern('boundingBox.max_{var} = max_{var};', {indent: 4})} - } - - function resetBoundingBox() { - ${pattern('boundingBox.min_{var} = boundingBox.max_{var} = 0;', {indent: 4})} - } -`; - return code; - } - - var generateCreateDragForce = {exports: {}}; - - const createPatternBuilder$2 = createPatternBuilder$6; - - generateCreateDragForce.exports = generateCreateDragForceFunction$1; - generateCreateDragForce.exports.generateCreateDragForceFunctionBody = generateCreateDragForceFunctionBody; - - function generateCreateDragForceFunction$1(dimension) { - let code = generateCreateDragForceFunctionBody(dimension); - return new Function('options', code); - } - - function generateCreateDragForceFunctionBody(dimension) { - let pattern = createPatternBuilder$2(dimension); - let code = ` - if (!Number.isFinite(options.dragCoefficient)) throw new Error('dragCoefficient is not a finite number'); - - return { - update: function(body) { - ${pattern('body.force.{var} -= options.dragCoefficient * body.velocity.{var};', {indent: 6})} - } - }; -`; - return code; - } - - var generateCreateSpringForce = {exports: {}}; - - const createPatternBuilder$1 = createPatternBuilder$6; - - generateCreateSpringForce.exports = generateCreateSpringForceFunction$1; - generateCreateSpringForce.exports.generateCreateSpringForceFunctionBody = generateCreateSpringForceFunctionBody; - - function generateCreateSpringForceFunction$1(dimension) { - let code = generateCreateSpringForceFunctionBody(dimension); - return new Function('options', 'random', code); - } - - function generateCreateSpringForceFunctionBody(dimension) { - let pattern = createPatternBuilder$1(dimension); - let code = ` - if (!Number.isFinite(options.springCoefficient)) throw new Error('Spring coefficient is not a number'); - if (!Number.isFinite(options.springLength)) throw new Error('Spring length is not a number'); - - return { - /** - * Updates forces acting on a spring - */ - update: function (spring) { - var body1 = spring.from; - var body2 = spring.to; - var length = spring.length < 0 ? options.springLength : spring.length; - ${pattern('var d{var} = body2.pos.{var} - body1.pos.{var};', {indent: 6})} - var r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})}); - - if (r === 0) { - ${pattern('d{var} = (random.nextDouble() - 0.5) / 50;', {indent: 8})} - r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})}); - } - - var d = r - length; - var coefficient = ((spring.coefficient > 0) ? spring.coefficient : options.springCoefficient) * d / r; - - ${pattern('body1.force.{var} += coefficient * d{var}', {indent: 6})}; - body1.springCount += 1; - body1.springLength += r; - - ${pattern('body2.force.{var} -= coefficient * d{var}', {indent: 6})}; - body2.springCount += 1; - body2.springLength += r; - } - }; -`; - return code; - } - - var generateIntegrator = {exports: {}}; - - const createPatternBuilder = createPatternBuilder$6; - - generateIntegrator.exports = generateIntegratorFunction$1; - generateIntegrator.exports.generateIntegratorFunctionBody = generateIntegratorFunctionBody; - - function generateIntegratorFunction$1(dimension) { - let code = generateIntegratorFunctionBody(dimension); - return new Function('bodies', 'timeStep', 'adaptiveTimeStepWeight', code); - } - - function generateIntegratorFunctionBody(dimension) { - let pattern = createPatternBuilder(dimension); - let code = ` - var length = bodies.length; - if (length === 0) return 0; - - ${pattern('var d{var} = 0, t{var} = 0;', {indent: 2})} - - for (var i = 0; i < length; ++i) { - var body = bodies[i]; - if (body.isPinned) continue; - - if (adaptiveTimeStepWeight && body.springCount) { - timeStep = (adaptiveTimeStepWeight * body.springLength/body.springCount); - } - - var coeff = timeStep / body.mass; - - ${pattern('body.velocity.{var} += coeff * body.force.{var};', {indent: 4})} - ${pattern('var v{var} = body.velocity.{var};', {indent: 4})} - var v = Math.sqrt(${pattern('v{var} * v{var}', {join: ' + '})}); - - if (v > 1) { - // We normalize it so that we move within timeStep range. - // for the case when v <= 1 - we let velocity to fade out. - ${pattern('body.velocity.{var} = v{var} / v;', {indent: 6})} - } - - ${pattern('d{var} = timeStep * body.velocity.{var};', {indent: 4})} - - ${pattern('body.pos.{var} += d{var};', {indent: 4})} - - ${pattern('t{var} += Math.abs(d{var});', {indent: 4})} - } - - return (${pattern('t{var} * t{var}', {join: ' + '})})/length; -`; - return code; - } - - var spring = Spring; - - /** - * Represents a physical spring. Spring connects two bodies, has rest length - * stiffness coefficient and optional weight - */ - function Spring(fromBody, toBody, length, springCoefficient) { - this.from = fromBody; - this.to = toBody; - this.length = length; - this.coefficient = springCoefficient; - } - - var ngraph_merge = merge; - - /** - * Augments `target` with properties in `options`. Does not override - * target's properties if they are defined and matches expected type in - * options - * - * @returns {Object} merged object - */ - function merge(target, options) { - var key; - if (!target) { target = {}; } - if (options) { - for (key in options) { - if (options.hasOwnProperty(key)) { - var targetHasIt = target.hasOwnProperty(key), - optionsValueType = typeof options[key], - shouldReplace = !targetHasIt || (typeof target[key] !== optionsValueType); - - if (shouldReplace) { - target[key] = options[key]; - } else if (optionsValueType === 'object') { - // go deep, don't care about loops here, we are simple API!: - target[key] = merge(target[key], options[key]); - } - } - } - } - - return target; - } - - var ngraph_random = {exports: {}}; - - ngraph_random.exports = random; - - // TODO: Deprecate? - ngraph_random.exports.random = random, - ngraph_random.exports.randomIterator = randomIterator; - - /** - * Creates seeded PRNG with two methods: - * next() and nextDouble() - */ - function random(inputSeed) { - var seed = typeof inputSeed === 'number' ? inputSeed : (+new Date()); - return new Generator(seed) - } - - function Generator(seed) { - this.seed = seed; - } - - /** - * Generates random integer number in the range from 0 (inclusive) to maxValue (exclusive) - * - * @param maxValue Number REQUIRED. Omitting this number will result in NaN values from PRNG. - */ - Generator.prototype.next = next; - - /** - * Generates random double number in the range from 0 (inclusive) to 1 (exclusive) - * This function is the same as Math.random() (except that it could be seeded) - */ - Generator.prototype.nextDouble = nextDouble; - - /** - * Returns a random real number from uniform distribution in [0, 1) - */ - Generator.prototype.uniform = nextDouble; - - /** - * Returns a random real number from a Gaussian distribution - * with 0 as a mean, and 1 as standard deviation u ~ N(0,1) - */ - Generator.prototype.gaussian = gaussian; - - function gaussian() { - // use the polar form of the Box-Muller transform - // based on https://introcs.cs.princeton.edu/java/23recursion/StdRandom.java - var r, x, y; - do { - x = this.nextDouble() * 2 - 1; - y = this.nextDouble() * 2 - 1; - r = x * x + y * y; - } while (r >= 1 || r === 0); - - return x * Math.sqrt(-2 * Math.log(r)/r); - } - - /** - * See https://twitter.com/anvaka/status/1296182534150135808 - */ - Generator.prototype.levy = levy; - - function levy() { - var beta = 3 / 2; - var sigma = Math.pow( - gamma( 1 + beta ) * Math.sin(Math.PI * beta / 2) / - (gamma((1 + beta) / 2) * beta * Math.pow(2, (beta - 1) / 2)), - 1/beta - ); - return this.gaussian() * sigma / Math.pow(Math.abs(this.gaussian()), 1/beta); - } - - // gamma function approximation - function gamma(z) { - return Math.sqrt(2 * Math.PI / z) * Math.pow((1 / Math.E) * (z + 1 / (12 * z - 1 / (10 * z))), z); - } - - function nextDouble() { - var seed = this.seed; - // Robert Jenkins' 32 bit integer hash function. - seed = ((seed + 0x7ed55d16) + (seed << 12)) & 0xffffffff; - seed = ((seed ^ 0xc761c23c) ^ (seed >>> 19)) & 0xffffffff; - seed = ((seed + 0x165667b1) + (seed << 5)) & 0xffffffff; - seed = ((seed + 0xd3a2646c) ^ (seed << 9)) & 0xffffffff; - seed = ((seed + 0xfd7046c5) + (seed << 3)) & 0xffffffff; - seed = ((seed ^ 0xb55a4f09) ^ (seed >>> 16)) & 0xffffffff; - this.seed = seed; - return (seed & 0xfffffff) / 0x10000000; - } - - function next(maxValue) { - return Math.floor(this.nextDouble() * maxValue); - } - - /* - * Creates iterator over array, which returns items of array in random order - * Time complexity is guaranteed to be O(n); - */ - function randomIterator(array, customRandom) { - var localRandom = customRandom || random(); - if (typeof localRandom.next !== 'function') { - throw new Error('customRandom does not match expected API: next() function is missing'); - } - - return { - forEach: forEach, - - /** - * Shuffles array randomly, in place. - */ - shuffle: shuffle - }; - - function shuffle() { - var i, j, t; - for (i = array.length - 1; i > 0; --i) { - j = localRandom.next(i + 1); // i inclusive - t = array[j]; - array[j] = array[i]; - array[i] = t; - } - - return array; - } - - function forEach(callback) { - var i, j, t; - for (i = array.length - 1; i > 0; --i) { - j = localRandom.next(i + 1); // i inclusive - t = array[j]; - array[j] = array[i]; - array[i] = t; - - callback(t); - } - - if (array.length) { - callback(array[0]); - } - } - } - - /** - * Manages a simulation of physical forces acting on bodies and springs. - */ - - var createPhysicsSimulator_1 = createPhysicsSimulator; - - var generateCreateBodyFunction = generateCreateBody.exports; - var generateQuadTreeFunction = generateQuadTree.exports; - var generateBoundsFunction = generateBounds.exports; - var generateCreateDragForceFunction = generateCreateDragForce.exports; - var generateCreateSpringForceFunction = generateCreateSpringForce.exports; - var generateIntegratorFunction = generateIntegrator.exports; - - var dimensionalCache = {}; - - function createPhysicsSimulator(settings) { - var Spring = spring; - var merge = ngraph_merge; - var eventify = ngraph_events; - if (settings) { - // Check for names from older versions of the layout - if (settings.springCoeff !== undefined) throw new Error('springCoeff was renamed to springCoefficient'); - if (settings.dragCoeff !== undefined) throw new Error('dragCoeff was renamed to dragCoefficient'); - } - - settings = merge(settings, { - /** - * Ideal length for links (springs in physical model). - */ - springLength: 10, - - /** - * Hook's law coefficient. 1 - solid spring. - */ - springCoefficient: 0.8, - - /** - * Coulomb's law coefficient. It's used to repel nodes thus should be negative - * if you make it positive nodes start attract each other :). - */ - gravity: -12, - - /** - * Theta coefficient from Barnes Hut simulation. Ranged between (0, 1). - * The closer it's to 1 the more nodes algorithm will have to go through. - * Setting it to one makes Barnes Hut simulation no different from - * brute-force forces calculation (each node is considered). - */ - theta: 0.8, - - /** - * Drag force coefficient. Used to slow down system, thus should be less than 1. - * The closer it is to 0 the less tight system will be. - */ - dragCoefficient: 0.9, // TODO: Need to rename this to something better. E.g. `dragCoefficient` - - /** - * Default time step (dt) for forces integration - */ - timeStep : 0.5, - - /** - * Adaptive time step uses average spring length to compute actual time step: - * See: https://twitter.com/anvaka/status/1293067160755957760 - */ - adaptiveTimeStepWeight: 0, - - /** - * This parameter defines number of dimensions of the space where simulation - * is performed. - */ - dimensions: 2, - - /** - * In debug mode more checks are performed, this will help you catch errors - * quickly, however for production build it is recommended to turn off this flag - * to speed up computation. - */ - debug: false - }); - - var factory = dimensionalCache[settings.dimensions]; - if (!factory) { - var dimensions = settings.dimensions; - factory = { - Body: generateCreateBodyFunction(dimensions, settings.debug), - createQuadTree: generateQuadTreeFunction(dimensions), - createBounds: generateBoundsFunction(dimensions), - createDragForce: generateCreateDragForceFunction(dimensions), - createSpringForce: generateCreateSpringForceFunction(dimensions), - integrate: generateIntegratorFunction(dimensions), - }; - dimensionalCache[dimensions] = factory; - } - - var Body = factory.Body; - var createQuadTree = factory.createQuadTree; - var createBounds = factory.createBounds; - var createDragForce = factory.createDragForce; - var createSpringForce = factory.createSpringForce; - var integrate = factory.integrate; - var createBody = pos => new Body(pos); - - var random = ngraph_random.exports.random(42); - var bodies = []; // Bodies in this simulation. - var springs = []; // Springs in this simulation. - - var quadTree = createQuadTree(settings, random); - var bounds = createBounds(bodies, settings, random); - var springForce = createSpringForce(settings, random); - var dragForce = createDragForce(settings); - - var totalMovement = 0; // how much movement we made on last step - var forces = []; - var forceMap = new Map(); - var iterationNumber = 0; - - addForce('nbody', nbodyForce); - addForce('spring', updateSpringForce); - - var publicApi = { - /** - * Array of bodies, registered with current simulator - * - * Note: To add new body, use addBody() method. This property is only - * exposed for testing/performance purposes. - */ - bodies: bodies, - - quadTree: quadTree, - - /** - * Array of springs, registered with current simulator - * - * Note: To add new spring, use addSpring() method. This property is only - * exposed for testing/performance purposes. - */ - springs: springs, - - /** - * Returns settings with which current simulator was initialized - */ - settings: settings, - - /** - * Adds a new force to simulation - */ - addForce: addForce, - - /** - * Removes a force from the simulation. - */ - removeForce: removeForce, - - /** - * Returns a map of all registered forces. - */ - getForces: getForces, - - /** - * Performs one step of force simulation. - * - * @returns {boolean} true if system is considered stable; False otherwise. - */ - step: function () { - for (var i = 0; i < forces.length; ++i) { - forces[i](iterationNumber); - } - var movement = integrate(bodies, settings.timeStep, settings.adaptiveTimeStepWeight); - iterationNumber += 1; - return movement; - }, - - /** - * Adds body to the system - * - * @param {ngraph.physics.primitives.Body} body physical body - * - * @returns {ngraph.physics.primitives.Body} added body - */ - addBody: function (body) { - if (!body) { - throw new Error('Body is required'); - } - bodies.push(body); - - return body; - }, - - /** - * Adds body to the system at given position - * - * @param {Object} pos position of a body - * - * @returns {ngraph.physics.primitives.Body} added body - */ - addBodyAt: function (pos) { - if (!pos) { - throw new Error('Body position is required'); - } - var body = createBody(pos); - bodies.push(body); - - return body; - }, - - /** - * Removes body from the system - * - * @param {ngraph.physics.primitives.Body} body to remove - * - * @returns {Boolean} true if body found and removed. falsy otherwise; - */ - removeBody: function (body) { - if (!body) { return; } - - var idx = bodies.indexOf(body); - if (idx < 0) { return; } - - bodies.splice(idx, 1); - if (bodies.length === 0) { - bounds.reset(); - } - return true; - }, - - /** - * Adds a spring to this simulation. - * - * @returns {Object} - a handle for a spring. If you want to later remove - * spring pass it to removeSpring() method. - */ - addSpring: function (body1, body2, springLength, springCoefficient) { - if (!body1 || !body2) { - throw new Error('Cannot add null spring to force simulator'); - } - - if (typeof springLength !== 'number') { - springLength = -1; // assume global configuration - } - - var spring = new Spring(body1, body2, springLength, springCoefficient >= 0 ? springCoefficient : -1); - springs.push(spring); - - // TODO: could mark simulator as dirty. - return spring; - }, - - /** - * Returns amount of movement performed on last step() call - */ - getTotalMovement: function () { - return totalMovement; - }, - - /** - * Removes spring from the system - * - * @param {Object} spring to remove. Spring is an object returned by addSpring - * - * @returns {Boolean} true if spring found and removed. falsy otherwise; - */ - removeSpring: function (spring) { - if (!spring) { return; } - var idx = springs.indexOf(spring); - if (idx > -1) { - springs.splice(idx, 1); - return true; - } - }, - - getBestNewBodyPosition: function (neighbors) { - return bounds.getBestNewPosition(neighbors); - }, - - /** - * Returns bounding box which covers all bodies - */ - getBBox: getBoundingBox, - getBoundingBox: getBoundingBox, - - invalidateBBox: function () { - console.warn('invalidateBBox() is deprecated, bounds always recomputed on `getBBox()` call'); - }, - - // TODO: Move the force specific stuff to force - gravity: function (value) { - if (value !== undefined) { - settings.gravity = value; - quadTree.options({gravity: value}); - return this; - } else { - return settings.gravity; - } - }, - - theta: function (value) { - if (value !== undefined) { - settings.theta = value; - quadTree.options({theta: value}); - return this; - } else { - return settings.theta; - } - }, - - /** - * Returns pseudo-random number generator instance. - */ - random: random - }; - - // allow settings modification via public API: - expose(settings, publicApi); - - eventify(publicApi); - - return publicApi; - - function getBoundingBox() { - bounds.update(); - return bounds.box; - } - - function addForce(forceName, forceFunction) { - if (forceMap.has(forceName)) throw new Error('Force ' + forceName + ' is already added'); - - forceMap.set(forceName, forceFunction); - forces.push(forceFunction); - } - - function removeForce(forceName) { - var forceIndex = forces.indexOf(forceMap.get(forceName)); - if (forceIndex < 0) return; - forces.splice(forceIndex, 1); - forceMap.delete(forceName); - } - - function getForces() { - // TODO: Should I trust them or clone the forces? - return forceMap; - } - - function nbodyForce(/* iterationUmber */) { - if (bodies.length === 0) return; - - quadTree.insertBodies(bodies); - var i = bodies.length; - while (i--) { - var body = bodies[i]; - if (!body.isPinned) { - body.reset(); - quadTree.updateBodyForce(body); - dragForce.update(body); - } - } - } - - function updateSpringForce() { - var i = springs.length; - while (i--) { - springForce.update(springs[i]); - } - } - - } - - function expose(settings, target) { - for (var key in settings) { - augment(settings, target, key); - } - } - - function augment(source, target, key) { - if (!source.hasOwnProperty(key)) return; - if (typeof target[key] === 'function') { - // this accessor is already defined. Ignore it - return; - } - var sourceIsNumber = Number.isFinite(source[key]); - - if (sourceIsNumber) { - target[key] = function (value) { - if (value !== undefined) { - if (!Number.isFinite(value)) throw new Error('Value of ' + key + ' should be a valid number.'); - source[key] = value; - return target; - } - return source[key]; - }; - } else { - target[key] = function (value) { - if (value !== undefined) { - source[key] = value; - return target; - } - return source[key]; - }; - } - } - - ngraph_forcelayout.exports = createLayout; - ngraph_forcelayout.exports.simulator = createPhysicsSimulator_1; - - var eventify = ngraph_events; - - /** - * Creates force based layout for a given graph. - * - * @param {ngraph.graph} graph which needs to be laid out - * @param {object} physicsSettings if you need custom settings - * for physics simulator you can pass your own settings here. If it's not passed - * a default one will be created. - */ - function createLayout(graph, physicsSettings) { - if (!graph) { - throw new Error('Graph structure cannot be undefined'); - } - - var createSimulator = (physicsSettings && physicsSettings.createSimulator) || createPhysicsSimulator_1; - var physicsSimulator = createSimulator(physicsSettings); - if (Array.isArray(physicsSettings)) throw new Error('Physics settings is expected to be an object'); - - var nodeMass = defaultNodeMass; - if (physicsSettings && typeof physicsSettings.nodeMass === 'function') { - nodeMass = physicsSettings.nodeMass; - } - - var nodeBodies = new Map(); - var springs = {}; - var bodiesCount = 0; - - var springTransform = physicsSimulator.settings.springTransform || noop; - - // Initialize physics with what we have in the graph: - initPhysics(); - listenToEvents(); - - var wasStable = false; - - var api = { - /** - * Performs one step of iterative layout algorithm - * - * @returns {boolean} true if the system should be considered stable; False otherwise. - * The system is stable if no further call to `step()` can improve the layout. - */ - step: function() { - if (bodiesCount === 0) { - updateStableStatus(true); - return true; - } - - var lastMove = physicsSimulator.step(); - - // Save the movement in case if someone wants to query it in the step - // callback. - api.lastMove = lastMove; - - // Allow listeners to perform low-level actions after nodes are updated. - api.fire('step'); - - var ratio = lastMove/bodiesCount; - var isStableNow = ratio <= 0.01; // TODO: The number is somewhat arbitrary... - updateStableStatus(isStableNow); - - - return isStableNow; - }, - - /** - * For a given `nodeId` returns position - */ - getNodePosition: function (nodeId) { - return getInitializedBody(nodeId).pos; - }, - - /** - * Sets position of a node to a given coordinates - * @param {string} nodeId node identifier - * @param {number} x position of a node - * @param {number} y position of a node - * @param {number=} z position of node (only if applicable to body) - */ - setNodePosition: function (nodeId) { - var body = getInitializedBody(nodeId); - body.setPosition.apply(body, Array.prototype.slice.call(arguments, 1)); - }, - - /** - * @returns {Object} Link position by link id - * @returns {Object.from} {x, y} coordinates of link start - * @returns {Object.to} {x, y} coordinates of link end - */ - getLinkPosition: function (linkId) { - var spring = springs[linkId]; - if (spring) { - return { - from: spring.from.pos, - to: spring.to.pos - }; - } - }, - - /** - * @returns {Object} area required to fit in the graph. Object contains - * `x1`, `y1` - top left coordinates - * `x2`, `y2` - bottom right coordinates - */ - getGraphRect: function () { - return physicsSimulator.getBBox(); - }, - - /** - * Iterates over each body in the layout simulator and performs a callback(body, nodeId) - */ - forEachBody: forEachBody, - - /* - * Requests layout algorithm to pin/unpin node to its current position - * Pinned nodes should not be affected by layout algorithm and always - * remain at their position - */ - pinNode: function (node, isPinned) { - var body = getInitializedBody(node.id); - body.isPinned = !!isPinned; - }, - - /** - * Checks whether given graph's node is currently pinned - */ - isNodePinned: function (node) { - return getInitializedBody(node.id).isPinned; - }, - - /** - * Request to release all resources - */ - dispose: function() { - graph.off('changed', onGraphChanged); - api.fire('disposed'); - }, - - /** - * Gets physical body for a given node id. If node is not found undefined - * value is returned. - */ - getBody: getBody, - - /** - * Gets spring for a given edge. - * - * @param {string} linkId link identifer. If two arguments are passed then - * this argument is treated as formNodeId - * @param {string=} toId when defined this parameter denotes head of the link - * and first argument is treated as tail of the link (fromId) - */ - getSpring: getSpring, - - /** - * Returns length of cumulative force vector. The closer this to zero - the more stable the system is - */ - getForceVectorLength: getForceVectorLength, - - /** - * [Read only] Gets current physics simulator - */ - simulator: physicsSimulator, - - /** - * Gets the graph that was used for layout - */ - graph: graph, - - /** - * Gets amount of movement performed during last step operation - */ - lastMove: 0 - }; - - eventify(api); - - return api; - - function updateStableStatus(isStableNow) { - if (wasStable !== isStableNow) { - wasStable = isStableNow; - onStableChanged(isStableNow); - } - } - - function forEachBody(cb) { - nodeBodies.forEach(cb); - } - - function getForceVectorLength() { - var fx = 0, fy = 0; - forEachBody(function(body) { - fx += Math.abs(body.force.x); - fy += Math.abs(body.force.y); - }); - return Math.sqrt(fx * fx + fy * fy); - } - - function getSpring(fromId, toId) { - var linkId; - if (toId === undefined) { - if (typeof fromId !== 'object') { - // assume fromId as a linkId: - linkId = fromId; - } else { - // assume fromId to be a link object: - linkId = fromId.id; - } - } else { - // toId is defined, should grab link: - var link = graph.hasLink(fromId, toId); - if (!link) return; - linkId = link.id; - } - - return springs[linkId]; - } - - function getBody(nodeId) { - return nodeBodies.get(nodeId); - } - - function listenToEvents() { - graph.on('changed', onGraphChanged); - } - - function onStableChanged(isStable) { - api.fire('stable', isStable); - } - - function onGraphChanged(changes) { - for (var i = 0; i < changes.length; ++i) { - var change = changes[i]; - if (change.changeType === 'add') { - if (change.node) { - initBody(change.node.id); - } - if (change.link) { - initLink(change.link); - } - } else if (change.changeType === 'remove') { - if (change.node) { - releaseNode(change.node); - } - if (change.link) { - releaseLink(change.link); - } - } - } - bodiesCount = graph.getNodesCount(); - } - - function initPhysics() { - bodiesCount = 0; - - graph.forEachNode(function (node) { - initBody(node.id); - bodiesCount += 1; - }); - - graph.forEachLink(initLink); - } - - function initBody(nodeId) { - var body = nodeBodies.get(nodeId); - if (!body) { - var node = graph.getNode(nodeId); - if (!node) { - throw new Error('initBody() was called with unknown node id'); - } - - var pos = node.position; - if (!pos) { - var neighbors = getNeighborBodies(node); - pos = physicsSimulator.getBestNewBodyPosition(neighbors); - } - - body = physicsSimulator.addBodyAt(pos); - body.id = nodeId; - - nodeBodies.set(nodeId, body); - updateBodyMass(nodeId); - - if (isNodeOriginallyPinned(node)) { - body.isPinned = true; - } - } - } - - function releaseNode(node) { - var nodeId = node.id; - var body = nodeBodies.get(nodeId); - if (body) { - nodeBodies.delete(nodeId); - physicsSimulator.removeBody(body); - } - } - - function initLink(link) { - updateBodyMass(link.fromId); - updateBodyMass(link.toId); - - var fromBody = nodeBodies.get(link.fromId), - toBody = nodeBodies.get(link.toId), - spring = physicsSimulator.addSpring(fromBody, toBody, link.length); - - springTransform(link, spring); - - springs[link.id] = spring; - } - - function releaseLink(link) { - var spring = springs[link.id]; - if (spring) { - var from = graph.getNode(link.fromId), - to = graph.getNode(link.toId); - - if (from) updateBodyMass(from.id); - if (to) updateBodyMass(to.id); - - delete springs[link.id]; - - physicsSimulator.removeSpring(spring); - } - } - - function getNeighborBodies(node) { - // TODO: Could probably be done better on memory - var neighbors = []; - if (!node.links) { - return neighbors; - } - var maxNeighbors = Math.min(node.links.length, 2); - for (var i = 0; i < maxNeighbors; ++i) { - var link = node.links[i]; - var otherBody = link.fromId !== node.id ? nodeBodies.get(link.fromId) : nodeBodies.get(link.toId); - if (otherBody && otherBody.pos) { - neighbors.push(otherBody); - } - } - - return neighbors; - } - - function updateBodyMass(nodeId) { - var body = nodeBodies.get(nodeId); - body.mass = nodeMass(nodeId); - if (Number.isNaN(body.mass)) { - throw new Error('Node mass should be a number'); - } - } - - /** - * Checks whether graph node has in its settings pinned attribute, - * which means layout algorithm cannot move it. Node can be marked - * as pinned, if it has "isPinned" attribute, or when node.data has it. - * - * @param {Object} node a graph node to check - * @return {Boolean} true if node should be treated as pinned; false otherwise. - */ - function isNodeOriginallyPinned(node) { - return (node && (node.isPinned || (node.data && node.data.isPinned))); - } - - function getInitializedBody(nodeId) { - var body = nodeBodies.get(nodeId); - if (!body) { - initBody(nodeId); - body = nodeBodies.get(nodeId); - } - return body; - } - - /** - * Calculates mass of a body, which corresponds to node with given id. - * - * @param {String|Number} nodeId identifier of a node, for which body mass needs to be calculated - * @returns {Number} recommended mass of the body; - */ - function defaultNodeMass(nodeId) { - var links = graph.getLinks(nodeId); - if (!links) return 1; - return 1 + links.length / 3.0; - } - } - - function noop() { } - - var forcelayout = ngraph_forcelayout.exports; - - /** - * Returns a function, that, as long as it continues to be invoked, will not - * be triggered. The function will be called after it stops being called for - * N milliseconds. If `immediate` is passed, trigger the function on the - * leading edge, instead of the trailing. The function also has a property 'clear' - * that is a function which will clear the timer to prevent previously scheduled executions. - * - * @source underscore.js - * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/ - * @param {Function} function to wrap - * @param {Number} timeout in ms (`100`) - * @param {Boolean} whether to execute at the beginning (`false`) - * @api public - */ - - function debounce(func, wait, immediate){ - var timeout, args, context, timestamp, result; - if (null == wait) wait = 100; - - function later() { - var last = Date.now() - timestamp; - - if (last < wait && last >= 0) { - timeout = setTimeout(later, wait - last); - } else { - timeout = null; - if (!immediate) { - result = func.apply(context, args); - context = args = null; - } - } - } - var debounced = function(){ - context = this; - args = arguments; - timestamp = Date.now(); - var callNow = immediate && !timeout; - if (!timeout) timeout = setTimeout(later, wait); - if (callNow) { - result = func.apply(context, args); - context = args = null; - } - - return result; - }; - - debounced.clear = function() { - if (timeout) { - clearTimeout(timeout); - timeout = null; - } - }; - - debounced.flush = function() { - if (timeout) { - result = func.apply(context, args); - context = args = null; - - clearTimeout(timeout); - timeout = null; - } - }; - - return debounced; - } - // Adds compatibility for ES modules - debounce.debounce = debounce; - - var debounce_1 = debounce; - - function _classCallCheck$1(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - function _slicedToArray$4(arr, i) { - return _arrayWithHoles$4(arr) || _iterableToArrayLimit$4(arr, i) || _nonIterableRest$4(); - } - - function _arrayWithHoles$4(arr) { - if (Array.isArray(arr)) return arr; - } - - function _iterableToArrayLimit$4(arr, i) { - if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { - return; - } - - var _arr = []; - var _n = true; - var _d = false; - var _e = undefined; - - try { - for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"] != null) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; - } - - function _nonIterableRest$4() { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); - } - - var Prop = function Prop(name, _ref) { - var _ref$default = _ref["default"], - defaultVal = _ref$default === void 0 ? null : _ref$default, - _ref$triggerUpdate = _ref.triggerUpdate, - triggerUpdate = _ref$triggerUpdate === void 0 ? true : _ref$triggerUpdate, - _ref$onChange = _ref.onChange, - onChange = _ref$onChange === void 0 ? function (newVal, state) {} : _ref$onChange; - - _classCallCheck$1(this, Prop); - - this.name = name; - this.defaultVal = defaultVal; - this.triggerUpdate = triggerUpdate; - this.onChange = onChange; - }; - - function index$2 (_ref2) { - var _ref2$stateInit = _ref2.stateInit, - stateInit = _ref2$stateInit === void 0 ? function () { - return {}; - } : _ref2$stateInit, - _ref2$props = _ref2.props, - rawProps = _ref2$props === void 0 ? {} : _ref2$props, - _ref2$methods = _ref2.methods, - methods = _ref2$methods === void 0 ? {} : _ref2$methods, - _ref2$aliases = _ref2.aliases, - aliases = _ref2$aliases === void 0 ? {} : _ref2$aliases, - _ref2$init = _ref2.init, - initFn = _ref2$init === void 0 ? function () {} : _ref2$init, - _ref2$update = _ref2.update, - updateFn = _ref2$update === void 0 ? function () {} : _ref2$update; - // Parse props into Prop instances - var props = Object.keys(rawProps).map(function (propName) { - return new Prop(propName, rawProps[propName]); - }); - return function () { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - // Holds component state - var state = Object.assign({}, stateInit instanceof Function ? stateInit(options) : stateInit, // Support plain objects for backwards compatibility - { - initialised: false - }); // keeps track of which props triggered an update - - var changedProps = {}; // Component constructor - - function comp(nodeElement) { - initStatic(nodeElement, options); - digest(); - return comp; - } - - var initStatic = function initStatic(nodeElement, options) { - initFn.call(comp, nodeElement, state, options); - state.initialised = true; - }; - - var digest = debounce_1(function () { - if (!state.initialised) { - return; - } - - updateFn.call(comp, state, changedProps); - changedProps = {}; - }, 1); // Getter/setter methods - - props.forEach(function (prop) { - comp[prop.name] = getSetProp(prop); - - function getSetProp(_ref3) { - var prop = _ref3.name, - _ref3$triggerUpdate = _ref3.triggerUpdate, - redigest = _ref3$triggerUpdate === void 0 ? false : _ref3$triggerUpdate, - _ref3$onChange = _ref3.onChange, - onChange = _ref3$onChange === void 0 ? function (newVal, state) {} : _ref3$onChange, - _ref3$defaultVal = _ref3.defaultVal, - defaultVal = _ref3$defaultVal === void 0 ? null : _ref3$defaultVal; - return function (_) { - var curVal = state[prop]; - - if (!arguments.length) { - return curVal; - } // Getter mode - - - var val = _ === undefined ? defaultVal : _; // pick default if value passed is undefined - - state[prop] = val; - onChange.call(comp, val, state, curVal); // track changed props - - !changedProps.hasOwnProperty(prop) && (changedProps[prop] = curVal); - - if (redigest) { - digest(); - } - - return comp; - }; - } - }); // Other methods - - Object.keys(methods).forEach(function (methodName) { - comp[methodName] = function () { - var _methods$methodName; - - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return (_methods$methodName = methods[methodName]).call.apply(_methods$methodName, [comp, state].concat(args)); - }; - }); // Link aliases - - Object.entries(aliases).forEach(function (_ref4) { - var _ref5 = _slicedToArray$4(_ref4, 2), - alias = _ref5[0], - target = _ref5[1]; - - return comp[alias] = comp[target]; - }); // Reset all component props to their default value - - comp.resetProps = function () { - props.forEach(function (prop) { - comp[prop.name](prop.defaultVal); - }); - return comp; - }; // - - - comp.resetProps(); // Apply all prop defaults - - state._rerender = digest; // Expose digest method - - return comp; - }; - } - - var index$1 = (function (p) { - return p instanceof Function ? p // fn - : typeof p === 'string' ? function (obj) { - return obj[p]; - } // property name - : function (obj) { - return p; - }; - }); // constant - - function max(values, valueof) { - let max; - if (valueof === undefined) { - for (const value of values) { - if (value != null - && (max < value || (max === undefined && value >= value))) { - max = value; - } - } - } else { - let index = -1; - for (let value of values) { - if ((value = valueof(value, ++index, values)) != null - && (max < value || (max === undefined && value >= value))) { - max = value; - } - } - } - return max; - } - - function min(values, valueof) { - let min; - if (valueof === undefined) { - for (const value of values) { - if (value != null - && (min > value || (min === undefined && value >= value))) { - min = value; - } - } - } else { - let index = -1; - for (let value of values) { - if ((value = valueof(value, ++index, values)) != null - && (min > value || (min === undefined && value >= value))) { - min = value; - } - } - } - return min; - } - - function _objectWithoutPropertiesLoose$2(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; - } - - return target; - } - - function _objectWithoutProperties$2(source, excluded) { - if (source == null) return {}; - - var target = _objectWithoutPropertiesLoose$2(source, excluded); - - var key, i; - - if (Object.getOwnPropertySymbols) { - var sourceSymbolKeys = Object.getOwnPropertySymbols(source); - - for (i = 0; i < sourceSymbolKeys.length; i++) { - key = sourceSymbolKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - } - - return target; - } - - function _slicedToArray$3(arr, i) { - return _arrayWithHoles$3(arr) || _iterableToArrayLimit$3(arr, i) || _nonIterableRest$3(); - } - - function _toConsumableArray$3(arr) { - return _arrayWithoutHoles$3(arr) || _iterableToArray$3(arr) || _nonIterableSpread$3(); - } - - function _arrayWithoutHoles$3(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } - } - - function _arrayWithHoles$3(arr) { - if (Array.isArray(arr)) return arr; - } - - function _iterableToArray$3(iter) { - if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); - } - - function _iterableToArrayLimit$3(arr, i) { - if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { - return; - } - - var _arr = []; - var _n = true; - var _d = false; - var _e = undefined; - - try { - for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"] != null) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; - } - - function _nonIterableSpread$3() { - throw new TypeError("Invalid attempt to spread non-iterable instance"); - } - - function _nonIterableRest$3() { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); - } - - function _toPrimitive(input, hint) { - if (typeof input !== "object" || input === null) return input; - var prim = input[Symbol.toPrimitive]; - - if (prim !== undefined) { - var res = prim.call(input, hint || "default"); - if (typeof res !== "object") return res; - throw new TypeError("@@toPrimitive must return a primitive value."); - } - - return (hint === "string" ? String : Number)(input); - } - - function _toPropertyKey(arg) { - var key = _toPrimitive(arg, "string"); - - return typeof key === "symbol" ? key : String(key); - } - - var index = (function () { - var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var keyAccessors = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - var multiItem = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - var flattenKeys = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - var keys = (keyAccessors instanceof Array ? keyAccessors.length ? keyAccessors : [undefined] : [keyAccessors]).map(function (key) { - return { - keyAccessor: key, - isProp: !(key instanceof Function) - }; - }); - var indexedResult = list.reduce(function (res, item) { - var iterObj = res; - var itemVal = item; - keys.forEach(function (_ref, idx) { - var keyAccessor = _ref.keyAccessor, - isProp = _ref.isProp; - var key; - - if (isProp) { - var _itemVal = itemVal, - propVal = _itemVal[keyAccessor], - rest = _objectWithoutProperties$2(_itemVal, [keyAccessor].map(_toPropertyKey)); - - key = propVal; - itemVal = rest; - } else { - key = keyAccessor(itemVal, idx); - } - - if (idx + 1 < keys.length) { - if (!iterObj.hasOwnProperty(key)) { - iterObj[key] = {}; - } - - iterObj = iterObj[key]; - } else { - // Leaf key - if (multiItem) { - if (!iterObj.hasOwnProperty(key)) { - iterObj[key] = []; - } - - iterObj[key].push(itemVal); - } else { - iterObj[key] = itemVal; - } - } - }); - return res; - }, {}); - - if (multiItem instanceof Function) { - // Reduce leaf multiple values - (function reduce(node) { - var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; - - if (level === keys.length) { - Object.keys(node).forEach(function (k) { - return node[k] = multiItem(node[k]); - }); - } else { - Object.values(node).forEach(function (child) { - return reduce(child, level + 1); - }); - } - })(indexedResult); // IIFE - - } - - var result = indexedResult; - - if (flattenKeys) { - // flatten into array - result = []; - - (function flatten(node) { - var accKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - - if (accKeys.length === keys.length) { - result.push({ - keys: accKeys, - vals: node - }); - } else { - Object.entries(node).forEach(function (_ref2) { - var _ref3 = _slicedToArray$3(_ref2, 2), - key = _ref3[0], - val = _ref3[1]; - - return flatten(val, [].concat(_toConsumableArray$3(accKeys), [key])); - }); - } - })(indexedResult); //IIFE - - - if (keyAccessors instanceof Array && keyAccessors.length === 0 && result.length === 1) { - // clear keys if there's no key accessors (single result) - result[0].keys = []; - } - } - - return result; - }); - - function _defineProperty$2(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - } - - function ownKeys$1(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys.push.apply(keys, symbols); - } - - return keys; - } - - function _objectSpread2$1(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys$1(Object(source), true).forEach(function (key) { - _defineProperty$2(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys$1(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; - } - - function _objectWithoutPropertiesLoose$1(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; - } - - return target; - } - - function _objectWithoutProperties$1(source, excluded) { - if (source == null) return {}; - - var target = _objectWithoutPropertiesLoose$1(source, excluded); - - var key, i; - - if (Object.getOwnPropertySymbols) { - var sourceSymbolKeys = Object.getOwnPropertySymbols(source); - - for (i = 0; i < sourceSymbolKeys.length; i++) { - key = sourceSymbolKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - } - - return target; - } - - function _slicedToArray$2(arr, i) { - return _arrayWithHoles$2(arr) || _iterableToArrayLimit$2(arr, i) || _nonIterableRest$2(); - } - - function _toConsumableArray$2(arr) { - return _arrayWithoutHoles$2(arr) || _iterableToArray$2(arr) || _nonIterableSpread$2(); - } - - function _arrayWithoutHoles$2(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } - } - - function _arrayWithHoles$2(arr) { - if (Array.isArray(arr)) return arr; - } - - function _iterableToArray$2(iter) { - if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); - } - - function _iterableToArrayLimit$2(arr, i) { - if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { - return; - } - - var _arr = []; - var _n = true; - var _d = false; - var _e = undefined; - - try { - for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"] != null) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; - } - - function _nonIterableSpread$2() { - throw new TypeError("Invalid attempt to spread non-iterable instance"); - } - - function _nonIterableRest$2() { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); - } - - function diffArrays(prev, next, idAccessor) { - var result = { - enter: [], - update: [], - exit: [] - }; - - if (!idAccessor) { - // use object references for comparison - var prevSet = new Set(prev); - var nextSet = new Set(next); - new Set([].concat(_toConsumableArray$2(prevSet), _toConsumableArray$2(nextSet))).forEach(function (item) { - var type = !prevSet.has(item) ? 'enter' : !nextSet.has(item) ? 'exit' : 'update'; - result[type].push(type === 'update' ? [item, item] : item); - }); - } else { - // compare by id (duplicate keys are ignored) - var prevById = index(prev, idAccessor, false); - var nextById = index(next, idAccessor, false); - var byId = Object.assign({}, prevById, nextById); - Object.entries(byId).forEach(function (_ref) { - var _ref2 = _slicedToArray$2(_ref, 2), - id = _ref2[0], - item = _ref2[1]; - - var type = !prevById.hasOwnProperty(id) ? 'enter' : !nextById.hasOwnProperty(id) ? 'exit' : 'update'; - result[type].push(type === 'update' ? [prevById[id], nextById[id]] : item); - }); - } - - return result; - } - - function dataBindDiff(data, existingObjs, _ref3) { - var _ref3$objBindAttr = _ref3.objBindAttr, - objBindAttr = _ref3$objBindAttr === void 0 ? '__obj' : _ref3$objBindAttr, - _ref3$dataBindAttr = _ref3.dataBindAttr, - dataBindAttr = _ref3$dataBindAttr === void 0 ? '__data' : _ref3$dataBindAttr, - idAccessor = _ref3.idAccessor, - _ref3$purge = _ref3.purge, - purge = _ref3$purge === void 0 ? false : _ref3$purge; - - var isObjValid = function isObjValid(obj) { - return obj.hasOwnProperty(dataBindAttr); - }; - - var removeObjs = existingObjs.filter(function (obj) { - return !isObjValid(obj); - }); - var prevD = existingObjs.filter(isObjValid).map(function (obj) { - return obj[dataBindAttr]; - }); - var nextD = data; - var diff = purge ? { - enter: nextD, - exit: prevD, - update: [] - } // don't diff data in purge mode - : diffArrays(prevD, nextD, idAccessor); - diff.update = diff.update.map(function (_ref4) { - var _ref5 = _slicedToArray$2(_ref4, 2), - prevD = _ref5[0], - nextD = _ref5[1]; - - if (prevD !== nextD) { - // transfer obj to new data point (if different) - nextD[objBindAttr] = prevD[objBindAttr]; - nextD[objBindAttr][dataBindAttr] = nextD; - } - - return nextD; - }); - diff.exit = diff.exit.concat(removeObjs.map(function (obj) { - return _defineProperty$2({}, objBindAttr, obj); - })); - return diff; - } - - function viewDigest(data, existingObjs, // list - appendObj, // item => {...} function - removeObj, // item => {...} function - _ref7) { - var _ref7$createObj = _ref7.createObj, - createObj = _ref7$createObj === void 0 ? function (d) { - return {}; - } : _ref7$createObj, - _ref7$updateObj = _ref7.updateObj, - updateObj = _ref7$updateObj === void 0 ? function (obj, d) {} : _ref7$updateObj, - _ref7$exitObj = _ref7.exitObj, - exitObj = _ref7$exitObj === void 0 ? function (obj) {} : _ref7$exitObj, - _ref7$objBindAttr = _ref7.objBindAttr, - objBindAttr = _ref7$objBindAttr === void 0 ? '__obj' : _ref7$objBindAttr, - _ref7$dataBindAttr = _ref7.dataBindAttr, - dataBindAttr = _ref7$dataBindAttr === void 0 ? '__data' : _ref7$dataBindAttr, - dataDiffOptions = _objectWithoutProperties$1(_ref7, ["createObj", "updateObj", "exitObj", "objBindAttr", "dataBindAttr"]); - - var _dataBindDiff = dataBindDiff(data, existingObjs, _objectSpread2$1({ - objBindAttr: objBindAttr, - dataBindAttr: dataBindAttr - }, dataDiffOptions)), - enter = _dataBindDiff.enter, - update = _dataBindDiff.update, - exit = _dataBindDiff.exit; // Remove exiting points - - - exit.forEach(function (d) { - var obj = d[objBindAttr]; - delete d[objBindAttr]; // unbind obj - - exitObj(obj); - removeObj(obj); - }); - var newObjs = createObjs(enter); - var pointsData = [].concat(_toConsumableArray$2(enter), _toConsumableArray$2(update)); - updateObjs(pointsData); // Add new points - - newObjs.forEach(appendObj); // - - function createObjs(data) { - var newObjs = []; - data.forEach(function (d) { - var obj = createObj(d); - - if (obj) { - obj[dataBindAttr] = d; - d[objBindAttr] = obj; - newObjs.push(obj); - } - }); - return newObjs; - } - - function updateObjs(data) { - data.forEach(function (d) { - var obj = d[objBindAttr]; - - if (obj) { - obj[dataBindAttr] = d; - updateObj(obj, d); - } - }); - } - } - - function initRange(domain, range) { - switch (arguments.length) { - case 0: break; - case 1: this.range(domain); break; - default: this.range(range).domain(domain); break; - } - return this; - } - - const implicit = Symbol("implicit"); - - function ordinal() { - var index = new Map(), - domain = [], - range = [], - unknown = implicit; - - function scale(d) { - var key = d + "", i = index.get(key); - if (!i) { - if (unknown !== implicit) return unknown; - index.set(key, i = domain.push(d)); - } - return range[(i - 1) % range.length]; - } - - scale.domain = function(_) { - if (!arguments.length) return domain.slice(); - domain = [], index = new Map(); - for (const value of _) { - const key = value + ""; - if (index.has(key)) continue; - index.set(key, domain.push(value)); - } - return scale; - }; - - scale.range = function(_) { - return arguments.length ? (range = Array.from(_), scale) : range.slice(); - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : unknown; - }; - - scale.copy = function() { - return ordinal(domain, range).unknown(unknown); - }; - - initRange.apply(scale, arguments); - - return scale; - } - - function colors(specifier) { - var n = specifier.length / 6 | 0, colors = new Array(n), i = 0; - while (i < n) colors[i] = "#" + specifier.slice(i * 6, ++i * 6); - return colors; - } - - var schemePaired = colors("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"); - - var tinycolor = {exports: {}}; - - (function (module) { - // TinyColor v1.4.2 - // https://github.com/bgrins/TinyColor - // Brian Grinstead, MIT License - - (function(Math) { - - var trimLeft = /^\s+/, - trimRight = /\s+$/, - tinyCounter = 0, - mathRound = Math.round, - mathMin = Math.min, - mathMax = Math.max, - mathRandom = Math.random; - - function tinycolor (color, opts) { - - color = (color) ? color : ''; - opts = opts || { }; - - // If input is already a tinycolor, return itself - if (color instanceof tinycolor) { - return color; - } - // If we are called as a function, call using new instead - if (!(this instanceof tinycolor)) { - return new tinycolor(color, opts); - } - - var rgb = inputToRGB(color); - this._originalInput = color, - this._r = rgb.r, - this._g = rgb.g, - this._b = rgb.b, - this._a = rgb.a, - this._roundA = mathRound(100*this._a) / 100, - this._format = opts.format || rgb.format; - this._gradientType = opts.gradientType; - - // Don't let the range of [0,255] come back in [0,1]. - // Potentially lose a little bit of precision here, but will fix issues where - // .5 gets interpreted as half of the total, instead of half of 1 - // If it was supposed to be 128, this was already taken care of by `inputToRgb` - if (this._r < 1) { this._r = mathRound(this._r); } - if (this._g < 1) { this._g = mathRound(this._g); } - if (this._b < 1) { this._b = mathRound(this._b); } - - this._ok = rgb.ok; - this._tc_id = tinyCounter++; - } - - tinycolor.prototype = { - isDark: function() { - return this.getBrightness() < 128; - }, - isLight: function() { - return !this.isDark(); - }, - isValid: function() { - return this._ok; - }, - getOriginalInput: function() { - return this._originalInput; - }, - getFormat: function() { - return this._format; - }, - getAlpha: function() { - return this._a; - }, - getBrightness: function() { - //http://www.w3.org/TR/AERT#color-contrast - var rgb = this.toRgb(); - return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000; - }, - getLuminance: function() { - //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef - var rgb = this.toRgb(); - var RsRGB, GsRGB, BsRGB, R, G, B; - RsRGB = rgb.r/255; - GsRGB = rgb.g/255; - BsRGB = rgb.b/255; - - if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);} - if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);} - if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);} - return (0.2126 * R) + (0.7152 * G) + (0.0722 * B); - }, - setAlpha: function(value) { - this._a = boundAlpha(value); - this._roundA = mathRound(100*this._a) / 100; - return this; - }, - toHsv: function() { - var hsv = rgbToHsv(this._r, this._g, this._b); - return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a }; - }, - toHsvString: function() { - var hsv = rgbToHsv(this._r, this._g, this._b); - var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100); - return (this._a == 1) ? - "hsv(" + h + ", " + s + "%, " + v + "%)" : - "hsva(" + h + ", " + s + "%, " + v + "%, "+ this._roundA + ")"; - }, - toHsl: function() { - var hsl = rgbToHsl(this._r, this._g, this._b); - return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a }; - }, - toHslString: function() { - var hsl = rgbToHsl(this._r, this._g, this._b); - var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100); - return (this._a == 1) ? - "hsl(" + h + ", " + s + "%, " + l + "%)" : - "hsla(" + h + ", " + s + "%, " + l + "%, "+ this._roundA + ")"; - }, - toHex: function(allow3Char) { - return rgbToHex(this._r, this._g, this._b, allow3Char); - }, - toHexString: function(allow3Char) { - return '#' + this.toHex(allow3Char); - }, - toHex8: function(allow4Char) { - return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char); - }, - toHex8String: function(allow4Char) { - return '#' + this.toHex8(allow4Char); - }, - toRgb: function() { - return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a }; - }, - toRgbString: function() { - return (this._a == 1) ? - "rgb(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" : - "rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")"; - }, - toPercentageRgb: function() { - return { r: mathRound(bound01(this._r, 255) * 100) + "%", g: mathRound(bound01(this._g, 255) * 100) + "%", b: mathRound(bound01(this._b, 255) * 100) + "%", a: this._a }; - }, - toPercentageRgbString: function() { - return (this._a == 1) ? - "rgb(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" : - "rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")"; - }, - toName: function() { - if (this._a === 0) { - return "transparent"; - } - - if (this._a < 1) { - return false; - } - - return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false; - }, - toFilter: function(secondColor) { - var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a); - var secondHex8String = hex8String; - var gradientType = this._gradientType ? "GradientType = 1, " : ""; - - if (secondColor) { - var s = tinycolor(secondColor); - secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a); - } - - return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")"; - }, - toString: function(format) { - var formatSet = !!format; - format = format || this._format; - - var formattedString = false; - var hasAlpha = this._a < 1 && this._a >= 0; - var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "hex4" || format === "hex8" || format === "name"); - - if (needsAlphaFormat) { - // Special case for "transparent", all other non-alpha formats - // will return rgba when there is transparency. - if (format === "name" && this._a === 0) { - return this.toName(); - } - return this.toRgbString(); - } - if (format === "rgb") { - formattedString = this.toRgbString(); - } - if (format === "prgb") { - formattedString = this.toPercentageRgbString(); - } - if (format === "hex" || format === "hex6") { - formattedString = this.toHexString(); - } - if (format === "hex3") { - formattedString = this.toHexString(true); - } - if (format === "hex4") { - formattedString = this.toHex8String(true); - } - if (format === "hex8") { - formattedString = this.toHex8String(); - } - if (format === "name") { - formattedString = this.toName(); - } - if (format === "hsl") { - formattedString = this.toHslString(); - } - if (format === "hsv") { - formattedString = this.toHsvString(); - } - - return formattedString || this.toHexString(); - }, - clone: function() { - return tinycolor(this.toString()); - }, - - _applyModification: function(fn, args) { - var color = fn.apply(null, [this].concat([].slice.call(args))); - this._r = color._r; - this._g = color._g; - this._b = color._b; - this.setAlpha(color._a); - return this; - }, - lighten: function() { - return this._applyModification(lighten, arguments); - }, - brighten: function() { - return this._applyModification(brighten, arguments); - }, - darken: function() { - return this._applyModification(darken, arguments); - }, - desaturate: function() { - return this._applyModification(desaturate, arguments); - }, - saturate: function() { - return this._applyModification(saturate, arguments); - }, - greyscale: function() { - return this._applyModification(greyscale, arguments); - }, - spin: function() { - return this._applyModification(spin, arguments); - }, - - _applyCombination: function(fn, args) { - return fn.apply(null, [this].concat([].slice.call(args))); - }, - analogous: function() { - return this._applyCombination(analogous, arguments); - }, - complement: function() { - return this._applyCombination(complement, arguments); - }, - monochromatic: function() { - return this._applyCombination(monochromatic, arguments); - }, - splitcomplement: function() { - return this._applyCombination(splitcomplement, arguments); - }, - triad: function() { - return this._applyCombination(triad, arguments); - }, - tetrad: function() { - return this._applyCombination(tetrad, arguments); - } - }; - - // If input is an object, force 1 into "1.0" to handle ratios properly - // String input requires "1.0" as input, so 1 will be treated as 1 - tinycolor.fromRatio = function(color, opts) { - if (typeof color == "object") { - var newColor = {}; - for (var i in color) { - if (color.hasOwnProperty(i)) { - if (i === "a") { - newColor[i] = color[i]; - } - else { - newColor[i] = convertToPercentage(color[i]); - } - } - } - color = newColor; - } - - return tinycolor(color, opts); - }; - - // Given a string or object, convert that input to RGB - // Possible string inputs: - // - // "red" - // "#f00" or "f00" - // "#ff0000" or "ff0000" - // "#ff000000" or "ff000000" - // "rgb 255 0 0" or "rgb (255, 0, 0)" - // "rgb 1.0 0 0" or "rgb (1, 0, 0)" - // "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1" - // "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1" - // "hsl(0, 100%, 50%)" or "hsl 0 100% 50%" - // "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1" - // "hsv(0, 100%, 100%)" or "hsv 0 100% 100%" - // - function inputToRGB(color) { - - var rgb = { r: 0, g: 0, b: 0 }; - var a = 1; - var s = null; - var v = null; - var l = null; - var ok = false; - var format = false; - - if (typeof color == "string") { - color = stringInputToObject(color); - } - - if (typeof color == "object") { - if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) { - rgb = rgbToRgb(color.r, color.g, color.b); - ok = true; - format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; - } - else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) { - s = convertToPercentage(color.s); - v = convertToPercentage(color.v); - rgb = hsvToRgb(color.h, s, v); - ok = true; - format = "hsv"; - } - else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) { - s = convertToPercentage(color.s); - l = convertToPercentage(color.l); - rgb = hslToRgb(color.h, s, l); - ok = true; - format = "hsl"; - } - - if (color.hasOwnProperty("a")) { - a = color.a; - } - } - - a = boundAlpha(a); - - return { - ok: ok, - format: color.format || format, - r: mathMin(255, mathMax(rgb.r, 0)), - g: mathMin(255, mathMax(rgb.g, 0)), - b: mathMin(255, mathMax(rgb.b, 0)), - a: a - }; - } - - - // Conversion Functions - // -------------------- - - // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from: - // - - // `rgbToRgb` - // Handle bounds / percentage checking to conform to CSS color spec - // - // *Assumes:* r, g, b in [0, 255] or [0, 1] - // *Returns:* { r, g, b } in [0, 255] - function rgbToRgb(r, g, b){ - return { - r: bound01(r, 255) * 255, - g: bound01(g, 255) * 255, - b: bound01(b, 255) * 255 - }; - } - - // `rgbToHsl` - // Converts an RGB color value to HSL. - // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1] - // *Returns:* { h, s, l } in [0,1] - function rgbToHsl(r, g, b) { - - r = bound01(r, 255); - g = bound01(g, 255); - b = bound01(b, 255); - - var max = mathMax(r, g, b), min = mathMin(r, g, b); - var h, s, l = (max + min) / 2; - - if(max == min) { - h = s = 0; // achromatic - } - else { - var d = max - min; - s = l > 0.5 ? d / (2 - max - min) : d / (max + min); - switch(max) { - case r: h = (g - b) / d + (g < b ? 6 : 0); break; - case g: h = (b - r) / d + 2; break; - case b: h = (r - g) / d + 4; break; - } - - h /= 6; - } - - return { h: h, s: s, l: l }; - } - - // `hslToRgb` - // Converts an HSL color value to RGB. - // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100] - // *Returns:* { r, g, b } in the set [0, 255] - function hslToRgb(h, s, l) { - var r, g, b; - - h = bound01(h, 360); - s = bound01(s, 100); - l = bound01(l, 100); - - 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) * (2/3 - t) * 6; - return p; - } - - if(s === 0) { - r = g = b = l; // achromatic - } - else { - var q = l < 0.5 ? l * (1 + s) : l + s - l * s; - var p = 2 * l - q; - r = hue2rgb(p, q, h + 1/3); - g = hue2rgb(p, q, h); - b = hue2rgb(p, q, h - 1/3); - } - - return { r: r * 255, g: g * 255, b: b * 255 }; - } - - // `rgbToHsv` - // Converts an RGB color value to HSV - // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1] - // *Returns:* { h, s, v } in [0,1] - function rgbToHsv(r, g, b) { - - r = bound01(r, 255); - g = bound01(g, 255); - b = bound01(b, 255); - - var max = mathMax(r, g, b), min = mathMin(r, g, b); - var h, s, v = max; - - var d = max - min; - s = max === 0 ? 0 : d / max; - - if(max == min) { - h = 0; // achromatic - } - else { - switch(max) { - case r: h = (g - b) / d + (g < b ? 6 : 0); break; - case g: h = (b - r) / d + 2; break; - case b: h = (r - g) / d + 4; break; - } - h /= 6; - } - return { h: h, s: s, v: v }; - } - - // `hsvToRgb` - // Converts an HSV color value to RGB. - // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100] - // *Returns:* { r, g, b } in the set [0, 255] - function hsvToRgb(h, s, v) { - - h = bound01(h, 360) * 6; - s = bound01(s, 100); - v = bound01(v, 100); - - var i = Math.floor(h), - f = h - i, - p = v * (1 - s), - q = v * (1 - f * s), - t = v * (1 - (1 - f) * s), - mod = i % 6, - r = [v, q, p, p, t, v][mod], - g = [t, v, v, q, p, p][mod], - b = [p, p, t, v, v, q][mod]; - - return { r: r * 255, g: g * 255, b: b * 255 }; - } - - // `rgbToHex` - // Converts an RGB color to hex - // Assumes r, g, and b are contained in the set [0, 255] - // Returns a 3 or 6 character hex - function rgbToHex(r, g, b, allow3Char) { - - var hex = [ - pad2(mathRound(r).toString(16)), - pad2(mathRound(g).toString(16)), - pad2(mathRound(b).toString(16)) - ]; - - // Return a 3 character hex if possible - if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) { - return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); - } - - return hex.join(""); - } - - // `rgbaToHex` - // Converts an RGBA color plus alpha transparency to hex - // Assumes r, g, b are contained in the set [0, 255] and - // a in [0, 1]. Returns a 4 or 8 character rgba hex - function rgbaToHex(r, g, b, a, allow4Char) { - - var hex = [ - pad2(mathRound(r).toString(16)), - pad2(mathRound(g).toString(16)), - pad2(mathRound(b).toString(16)), - pad2(convertDecimalToHex(a)) - ]; - - // Return a 4 character hex if possible - if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) { - return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0); - } - - return hex.join(""); - } - - // `rgbaToArgbHex` - // Converts an RGBA color to an ARGB Hex8 string - // Rarely used, but required for "toFilter()" - function rgbaToArgbHex(r, g, b, a) { - - var hex = [ - pad2(convertDecimalToHex(a)), - pad2(mathRound(r).toString(16)), - pad2(mathRound(g).toString(16)), - pad2(mathRound(b).toString(16)) - ]; - - return hex.join(""); - } - - // `equals` - // Can be called with any tinycolor input - tinycolor.equals = function (color1, color2) { - if (!color1 || !color2) { return false; } - return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString(); - }; - - tinycolor.random = function() { - return tinycolor.fromRatio({ - r: mathRandom(), - g: mathRandom(), - b: mathRandom() - }); - }; - - - // Modification Functions - // ---------------------- - // Thanks to less.js for some of the basics here - // - - function desaturate(color, amount) { - amount = (amount === 0) ? 0 : (amount || 10); - var hsl = tinycolor(color).toHsl(); - hsl.s -= amount / 100; - hsl.s = clamp01(hsl.s); - return tinycolor(hsl); - } - - function saturate(color, amount) { - amount = (amount === 0) ? 0 : (amount || 10); - var hsl = tinycolor(color).toHsl(); - hsl.s += amount / 100; - hsl.s = clamp01(hsl.s); - return tinycolor(hsl); - } - - function greyscale(color) { - return tinycolor(color).desaturate(100); - } - - function lighten (color, amount) { - amount = (amount === 0) ? 0 : (amount || 10); - var hsl = tinycolor(color).toHsl(); - hsl.l += amount / 100; - hsl.l = clamp01(hsl.l); - return tinycolor(hsl); - } - - function brighten(color, amount) { - amount = (amount === 0) ? 0 : (amount || 10); - var rgb = tinycolor(color).toRgb(); - rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100)))); - rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100)))); - rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100)))); - return tinycolor(rgb); - } - - function darken (color, amount) { - amount = (amount === 0) ? 0 : (amount || 10); - var hsl = tinycolor(color).toHsl(); - hsl.l -= amount / 100; - hsl.l = clamp01(hsl.l); - return tinycolor(hsl); - } - - // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue. - // Values outside of this range will be wrapped into this range. - function spin(color, amount) { - var hsl = tinycolor(color).toHsl(); - var hue = (hsl.h + amount) % 360; - hsl.h = hue < 0 ? 360 + hue : hue; - return tinycolor(hsl); - } - - // Combination Functions - // --------------------- - // Thanks to jQuery xColor for some of the ideas behind these - // - - function complement(color) { - var hsl = tinycolor(color).toHsl(); - hsl.h = (hsl.h + 180) % 360; - return tinycolor(hsl); - } - - function triad(color) { - var hsl = tinycolor(color).toHsl(); - var h = hsl.h; - return [ - tinycolor(color), - tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }), - tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l }) - ]; - } - - function tetrad(color) { - var hsl = tinycolor(color).toHsl(); - var h = hsl.h; - return [ - tinycolor(color), - tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }), - tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }), - tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l }) - ]; - } - - function splitcomplement(color) { - var hsl = tinycolor(color).toHsl(); - var h = hsl.h; - return [ - tinycolor(color), - tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}), - tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l}) - ]; - } - - function analogous(color, results, slices) { - results = results || 6; - slices = slices || 30; - - var hsl = tinycolor(color).toHsl(); - var part = 360 / slices; - var ret = [tinycolor(color)]; - - for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) { - hsl.h = (hsl.h + part) % 360; - ret.push(tinycolor(hsl)); - } - return ret; - } - - function monochromatic(color, results) { - results = results || 6; - var hsv = tinycolor(color).toHsv(); - var h = hsv.h, s = hsv.s, v = hsv.v; - var ret = []; - var modification = 1 / results; - - while (results--) { - ret.push(tinycolor({ h: h, s: s, v: v})); - v = (v + modification) % 1; - } - - return ret; - } - - // Utility Functions - // --------------------- - - tinycolor.mix = function(color1, color2, amount) { - amount = (amount === 0) ? 0 : (amount || 50); - - var rgb1 = tinycolor(color1).toRgb(); - var rgb2 = tinycolor(color2).toRgb(); - - var p = amount / 100; - - var rgba = { - r: ((rgb2.r - rgb1.r) * p) + rgb1.r, - g: ((rgb2.g - rgb1.g) * p) + rgb1.g, - b: ((rgb2.b - rgb1.b) * p) + rgb1.b, - a: ((rgb2.a - rgb1.a) * p) + rgb1.a - }; - - return tinycolor(rgba); - }; - - - // Readability Functions - // --------------------- - // false - // tinycolor.isReadable("#000", "#111",{level:"AA",size:"large"}) => false - tinycolor.isReadable = function(color1, color2, wcag2) { - var readability = tinycolor.readability(color1, color2); - var wcag2Parms, out; - - out = false; - - wcag2Parms = validateWCAG2Parms(wcag2); - switch (wcag2Parms.level + wcag2Parms.size) { - case "AAsmall": - case "AAAlarge": - out = readability >= 4.5; - break; - case "AAlarge": - out = readability >= 3; - break; - case "AAAsmall": - out = readability >= 7; - break; - } - return out; - - }; - - // `mostReadable` - // Given a base color and a list of possible foreground or background - // colors for that base, returns the most readable color. - // Optionally returns Black or White if the most readable color is unreadable. - // *Example* - // tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:false}).toHexString(); // "#112255" - // tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:true}).toHexString(); // "#ffffff" - // tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"large"}).toHexString(); // "#faf3f3" - // tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"small"}).toHexString(); // "#ffffff" - tinycolor.mostReadable = function(baseColor, colorList, args) { - var bestColor = null; - var bestScore = 0; - var readability; - var includeFallbackColors, level, size ; - args = args || {}; - includeFallbackColors = args.includeFallbackColors ; - level = args.level; - size = args.size; - - for (var i= 0; i < colorList.length ; i++) { - readability = tinycolor.readability(baseColor, colorList[i]); - if (readability > bestScore) { - bestScore = readability; - bestColor = tinycolor(colorList[i]); - } - } - - if (tinycolor.isReadable(baseColor, bestColor, {"level":level,"size":size}) || !includeFallbackColors) { - return bestColor; - } - else { - args.includeFallbackColors=false; - return tinycolor.mostReadable(baseColor,["#fff", "#000"],args); - } - }; - - - // Big List of Colors - // ------------------ - // - var names = tinycolor.names = { - aliceblue: "f0f8ff", - antiquewhite: "faebd7", - aqua: "0ff", - aquamarine: "7fffd4", - azure: "f0ffff", - beige: "f5f5dc", - bisque: "ffe4c4", - black: "000", - blanchedalmond: "ffebcd", - blue: "00f", - blueviolet: "8a2be2", - brown: "a52a2a", - burlywood: "deb887", - burntsienna: "ea7e5d", - cadetblue: "5f9ea0", - chartreuse: "7fff00", - chocolate: "d2691e", - coral: "ff7f50", - cornflowerblue: "6495ed", - cornsilk: "fff8dc", - crimson: "dc143c", - cyan: "0ff", - darkblue: "00008b", - darkcyan: "008b8b", - darkgoldenrod: "b8860b", - darkgray: "a9a9a9", - darkgreen: "006400", - darkgrey: "a9a9a9", - darkkhaki: "bdb76b", - darkmagenta: "8b008b", - darkolivegreen: "556b2f", - darkorange: "ff8c00", - darkorchid: "9932cc", - darkred: "8b0000", - darksalmon: "e9967a", - darkseagreen: "8fbc8f", - darkslateblue: "483d8b", - darkslategray: "2f4f4f", - darkslategrey: "2f4f4f", - darkturquoise: "00ced1", - darkviolet: "9400d3", - deeppink: "ff1493", - deepskyblue: "00bfff", - dimgray: "696969", - dimgrey: "696969", - dodgerblue: "1e90ff", - firebrick: "b22222", - floralwhite: "fffaf0", - forestgreen: "228b22", - fuchsia: "f0f", - gainsboro: "dcdcdc", - ghostwhite: "f8f8ff", - gold: "ffd700", - goldenrod: "daa520", - gray: "808080", - green: "008000", - greenyellow: "adff2f", - grey: "808080", - honeydew: "f0fff0", - hotpink: "ff69b4", - indianred: "cd5c5c", - indigo: "4b0082", - ivory: "fffff0", - khaki: "f0e68c", - lavender: "e6e6fa", - lavenderblush: "fff0f5", - lawngreen: "7cfc00", - lemonchiffon: "fffacd", - lightblue: "add8e6", - lightcoral: "f08080", - lightcyan: "e0ffff", - lightgoldenrodyellow: "fafad2", - lightgray: "d3d3d3", - lightgreen: "90ee90", - lightgrey: "d3d3d3", - lightpink: "ffb6c1", - lightsalmon: "ffa07a", - lightseagreen: "20b2aa", - lightskyblue: "87cefa", - lightslategray: "789", - lightslategrey: "789", - lightsteelblue: "b0c4de", - lightyellow: "ffffe0", - lime: "0f0", - limegreen: "32cd32", - linen: "faf0e6", - magenta: "f0f", - maroon: "800000", - mediumaquamarine: "66cdaa", - mediumblue: "0000cd", - mediumorchid: "ba55d3", - mediumpurple: "9370db", - mediumseagreen: "3cb371", - mediumslateblue: "7b68ee", - mediumspringgreen: "00fa9a", - mediumturquoise: "48d1cc", - mediumvioletred: "c71585", - midnightblue: "191970", - mintcream: "f5fffa", - mistyrose: "ffe4e1", - moccasin: "ffe4b5", - navajowhite: "ffdead", - navy: "000080", - oldlace: "fdf5e6", - olive: "808000", - olivedrab: "6b8e23", - orange: "ffa500", - orangered: "ff4500", - orchid: "da70d6", - palegoldenrod: "eee8aa", - palegreen: "98fb98", - paleturquoise: "afeeee", - palevioletred: "db7093", - papayawhip: "ffefd5", - peachpuff: "ffdab9", - peru: "cd853f", - pink: "ffc0cb", - plum: "dda0dd", - powderblue: "b0e0e6", - purple: "800080", - rebeccapurple: "663399", - red: "f00", - rosybrown: "bc8f8f", - royalblue: "4169e1", - saddlebrown: "8b4513", - salmon: "fa8072", - sandybrown: "f4a460", - seagreen: "2e8b57", - seashell: "fff5ee", - sienna: "a0522d", - silver: "c0c0c0", - skyblue: "87ceeb", - slateblue: "6a5acd", - slategray: "708090", - slategrey: "708090", - snow: "fffafa", - springgreen: "00ff7f", - steelblue: "4682b4", - tan: "d2b48c", - teal: "008080", - thistle: "d8bfd8", - tomato: "ff6347", - turquoise: "40e0d0", - violet: "ee82ee", - wheat: "f5deb3", - white: "fff", - whitesmoke: "f5f5f5", - yellow: "ff0", - yellowgreen: "9acd32" - }; - - // Make it easy to access colors via `hexNames[hex]` - var hexNames = tinycolor.hexNames = flip(names); - - - // Utilities - // --------- - - // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }` - function flip(o) { - var flipped = { }; - for (var i in o) { - if (o.hasOwnProperty(i)) { - flipped[o[i]] = i; - } - } - return flipped; - } - - // Return a valid alpha value [0,1] with all invalid values being set to 1 - function boundAlpha(a) { - a = parseFloat(a); - - if (isNaN(a) || a < 0 || a > 1) { - a = 1; - } - - return a; - } - - // Take input from [0, n] and return it as [0, 1] - function bound01(n, max) { - if (isOnePointZero(n)) { n = "100%"; } - - var processPercent = isPercentage(n); - n = mathMin(max, mathMax(0, parseFloat(n))); - - // Automatically convert percentage into number - if (processPercent) { - n = parseInt(n * max, 10) / 100; - } - - // Handle floating point rounding errors - if ((Math.abs(n - max) < 0.000001)) { - return 1; - } - - // Convert into [0, 1] range if it isn't already - return (n % max) / parseFloat(max); - } - - // Force a number between 0 and 1 - function clamp01(val) { - return mathMin(1, mathMax(0, val)); - } - - // Parse a base-16 hex value into a base-10 integer - function parseIntFromHex(val) { - return parseInt(val, 16); - } - - // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1 - // - function isOnePointZero(n) { - return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1; - } - - // Check to see if string passed in is a percentage - function isPercentage(n) { - return typeof n === "string" && n.indexOf('%') != -1; - } - - // Force a hex value to have 2 characters - function pad2(c) { - return c.length == 1 ? '0' + c : '' + c; - } - - // Replace a decimal with it's percentage value - function convertToPercentage(n) { - if (n <= 1) { - n = (n * 100) + "%"; - } - - return n; - } - - // Converts a decimal to a hex value - function convertDecimalToHex(d) { - return Math.round(parseFloat(d) * 255).toString(16); - } - // Converts a hex value to a decimal - function convertHexToDecimal(h) { - return (parseIntFromHex(h) / 255); - } - - var matchers = (function() { - - // - var CSS_INTEGER = "[-\\+]?\\d+%?"; - - // - var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; - - // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome. - var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")"; - - // Actual matching. - // Parentheses and commas are optional, but not required. - // Whitespace can take the place of commas or opening paren - var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; - var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; - - return { - CSS_UNIT: new RegExp(CSS_UNIT), - rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), - rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), - hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), - hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), - hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), - hsva: new RegExp("hsva" + PERMISSIVE_MATCH4), - hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, - hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, - hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, - hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ - }; - })(); - - // `isValidCSSUnit` - // Take in a single string / number and check to see if it looks like a CSS unit - // (see `matchers` above for definition). - function isValidCSSUnit(color) { - return !!matchers.CSS_UNIT.exec(color); - } - - // `stringInputToObject` - // Permissive string parsing. Take in a number of formats, and output an object - // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}` - function stringInputToObject(color) { - - color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase(); - var named = false; - if (names[color]) { - color = names[color]; - named = true; - } - else if (color == 'transparent') { - return { r: 0, g: 0, b: 0, a: 0, format: "name" }; - } - - // Try to match string input using regular expressions. - // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360] - // Just return an object and let the conversion functions handle that. - // This way the result will be the same whether the tinycolor is initialized with string or object. - var match; - if ((match = matchers.rgb.exec(color))) { - return { r: match[1], g: match[2], b: match[3] }; - } - if ((match = matchers.rgba.exec(color))) { - return { r: match[1], g: match[2], b: match[3], a: match[4] }; - } - if ((match = matchers.hsl.exec(color))) { - return { h: match[1], s: match[2], l: match[3] }; - } - if ((match = matchers.hsla.exec(color))) { - return { h: match[1], s: match[2], l: match[3], a: match[4] }; - } - if ((match = matchers.hsv.exec(color))) { - return { h: match[1], s: match[2], v: match[3] }; - } - if ((match = matchers.hsva.exec(color))) { - return { h: match[1], s: match[2], v: match[3], a: match[4] }; - } - if ((match = matchers.hex8.exec(color))) { - return { - r: parseIntFromHex(match[1]), - g: parseIntFromHex(match[2]), - b: parseIntFromHex(match[3]), - a: convertHexToDecimal(match[4]), - format: named ? "name" : "hex8" - }; - } - if ((match = matchers.hex6.exec(color))) { - return { - r: parseIntFromHex(match[1]), - g: parseIntFromHex(match[2]), - b: parseIntFromHex(match[3]), - format: named ? "name" : "hex" - }; - } - if ((match = matchers.hex4.exec(color))) { - return { - r: parseIntFromHex(match[1] + '' + match[1]), - g: parseIntFromHex(match[2] + '' + match[2]), - b: parseIntFromHex(match[3] + '' + match[3]), - a: convertHexToDecimal(match[4] + '' + match[4]), - format: named ? "name" : "hex8" - }; - } - if ((match = matchers.hex3.exec(color))) { - return { - r: parseIntFromHex(match[1] + '' + match[1]), - g: parseIntFromHex(match[2] + '' + match[2]), - b: parseIntFromHex(match[3] + '' + match[3]), - format: named ? "name" : "hex" - }; - } - - return false; - } - - function validateWCAG2Parms(parms) { - // return valid WCAG2 parms for isReadable. - // If input parms are invalid, return {"level":"AA", "size":"small"} - var level, size; - parms = parms || {"level":"AA", "size":"small"}; - level = (parms.level || "AA").toUpperCase(); - size = (parms.size || "small").toLowerCase(); - if (level !== "AA" && level !== "AAA") { - level = "AA"; - } - if (size !== "small" && size !== "large") { - size = "small"; - } - return {"level":level, "size":size}; - } - - // Node: Export function - if (module.exports) { - module.exports = tinycolor; - } - // AMD/requirejs: Define the module - else { - window.tinycolor = tinycolor; - } - - })(Math); - }(tinycolor)); - - var tinyColor = tinycolor.exports; - - function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - - if (enumerableOnly) { - symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - } - - keys.push.apply(keys, symbols); - } - - return keys; - } - - function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys(Object(source), true).forEach(function (key) { - _defineProperty$1(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; - } - - function _typeof(obj) { - "@babel/helpers - typeof"; - - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - function _defineProperty$1(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - } - - function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function"); - } - - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - writable: true, - configurable: true - } - }); - if (superClass) _setPrototypeOf$1(subClass, superClass); - } - - function _getPrototypeOf$1(o) { - _getPrototypeOf$1 = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { - return o.__proto__ || Object.getPrototypeOf(o); - }; - return _getPrototypeOf$1(o); - } - - function _setPrototypeOf$1(o, p) { - _setPrototypeOf$1 = Object.setPrototypeOf || function _setPrototypeOf(o, p) { - o.__proto__ = p; - return o; - }; - - return _setPrototypeOf$1(o, p); - } - - function _isNativeReflectConstruct$1() { - if (typeof Reflect === "undefined" || !Reflect.construct) return false; - if (Reflect.construct.sham) return false; - if (typeof Proxy === "function") return true; - - try { - Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); - return true; - } catch (e) { - return false; - } - } - - function _construct$1(Parent, args, Class) { - if (_isNativeReflectConstruct$1()) { - _construct$1 = Reflect.construct; - } else { - _construct$1 = function _construct(Parent, args, Class) { - var a = [null]; - a.push.apply(a, args); - var Constructor = Function.bind.apply(Parent, a); - var instance = new Constructor(); - if (Class) _setPrototypeOf$1(instance, Class.prototype); - return instance; - }; - } - - return _construct$1.apply(null, arguments); - } - - function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; - } - - return target; - } - - function _objectWithoutProperties(source, excluded) { - if (source == null) return {}; - - var target = _objectWithoutPropertiesLoose(source, excluded); - - var key, i; - - if (Object.getOwnPropertySymbols) { - var sourceSymbolKeys = Object.getOwnPropertySymbols(source); - - for (i = 0; i < sourceSymbolKeys.length; i++) { - key = sourceSymbolKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; - target[key] = source[key]; - } - } - - return target; - } - - function _assertThisInitialized$1(self) { - if (self === void 0) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - - return self; - } - - function _possibleConstructorReturn(self, call) { - if (call && (typeof call === "object" || typeof call === "function")) { - return call; - } - - return _assertThisInitialized$1(self); - } - - function _createSuper(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct$1(); - - return function _createSuperInternal() { - var Super = _getPrototypeOf$1(Derived), - result; - - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf$1(this).constructor; - - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - - return _possibleConstructorReturn(this, result); - }; - } - - function _slicedToArray$1(arr, i) { - return _arrayWithHoles$1(arr) || _iterableToArrayLimit$1(arr, i) || _unsupportedIterableToArray$1(arr, i) || _nonIterableRest$1(); - } - - function _toConsumableArray$1(arr) { - return _arrayWithoutHoles$1(arr) || _iterableToArray$1(arr) || _unsupportedIterableToArray$1(arr) || _nonIterableSpread$1(); - } - - function _arrayWithoutHoles$1(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray$1(arr); - } - - function _arrayWithHoles$1(arr) { - if (Array.isArray(arr)) return arr; - } - - function _iterableToArray$1(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); - } - - function _iterableToArrayLimit$1(arr, i) { - var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; - - if (_i == null) return; - var _arr = []; - var _n = true; - var _d = false; - - var _s, _e; - - try { - for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"] != null) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; - } - - function _unsupportedIterableToArray$1(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray$1(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray$1(o, minLen); - } - - function _arrayLikeToArray$1(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - - return arr2; - } - - function _nonIterableSpread$1() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - - function _nonIterableRest$1() { - throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - - var materialDispose = function materialDispose(material) { - if (material instanceof Array) { - material.forEach(materialDispose); - } else { - if (material.map) { - material.map.dispose(); - } - - material.dispose(); - } - }; - - var deallocate = function deallocate(obj) { - if (obj.geometry) { - obj.geometry.dispose(); - } - - if (obj.material) { - materialDispose(obj.material); - } - - if (obj.texture) { - obj.texture.dispose(); - } - - if (obj.children) { - obj.children.forEach(deallocate); - } - }; - - var emptyObject = function emptyObject(obj) { - while (obj.children.length) { - var childObj = obj.children[0]; - obj.remove(childObj); - deallocate(childObj); - } - }; - - var _excluded = ["objFilter"]; - - function threeDigest(data, scene) { - var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - var _ref$objFilter = _ref.objFilter, - objFilter = _ref$objFilter === void 0 ? function () { - return true; - } : _ref$objFilter, - options = _objectWithoutProperties(_ref, _excluded); - - return viewDigest(data, scene.children.filter(objFilter), function (obj) { - return scene.add(obj); - }, function (obj) { - scene.remove(obj); - emptyObject(obj); - }, _objectSpread2({ - objBindAttr: '__threeObj' - }, options)); - } - - var colorStr2Hex = function colorStr2Hex(str) { - return isNaN(str) ? parseInt(tinyColor(str).toHex(), 16) : str; - }; - - var colorAlpha = function colorAlpha(str) { - return isNaN(str) ? tinyColor(str).getAlpha() : 1; - }; - - var autoColorScale = ordinal(schemePaired); // Autoset attribute colorField by colorByAccessor property - // If an object has already a color, don't set it - // Objects can be nodes or links - - function autoColorObjects(objects, colorByAccessor, colorField) { - if (!colorByAccessor || typeof colorField !== 'string') return; - objects.filter(function (obj) { - return !obj[colorField]; - }).forEach(function (obj) { - obj[colorField] = autoColorScale(colorByAccessor(obj)); - }); - } - - function getDagDepths (_ref, idAccessor) { - var nodes = _ref.nodes, - links = _ref.links; - - var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, - _ref2$nodeFilter = _ref2.nodeFilter, - nodeFilter = _ref2$nodeFilter === void 0 ? function () { - return true; - } : _ref2$nodeFilter, - _ref2$onLoopError = _ref2.onLoopError, - onLoopError = _ref2$onLoopError === void 0 ? function (loopIds) { - throw "Invalid DAG structure! Found cycle in node path: ".concat(loopIds.join(' -> '), "."); - } : _ref2$onLoopError; - - // linked graph - var graph = {}; - nodes.forEach(function (node) { - return graph[idAccessor(node)] = { - data: node, - out: [], - depth: -1, - skip: !nodeFilter(node) - }; - }); - links.forEach(function (_ref3) { - var source = _ref3.source, - target = _ref3.target; - var sourceId = getNodeId(source); - var targetId = getNodeId(target); - if (!graph.hasOwnProperty(sourceId)) throw "Missing source node with id: ".concat(sourceId); - if (!graph.hasOwnProperty(targetId)) throw "Missing target node with id: ".concat(targetId); - var sourceNode = graph[sourceId]; - var targetNode = graph[targetId]; - sourceNode.out.push(targetNode); - - function getNodeId(node) { - return _typeof(node) === 'object' ? idAccessor(node) : node; - } - }); - var foundLoops = []; - traverse(Object.values(graph)); - var nodeDepths = Object.assign.apply(Object, [{}].concat(_toConsumableArray$1(Object.entries(graph).filter(function (_ref4) { - var _ref5 = _slicedToArray$1(_ref4, 2), - node = _ref5[1]; - - return !node.skip; - }).map(function (_ref6) { - var _ref7 = _slicedToArray$1(_ref6, 2), - id = _ref7[0], - node = _ref7[1]; - - return _defineProperty$1({}, id, node.depth); - })))); - return nodeDepths; - - function traverse(nodes) { - var nodeStack = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - var currentDepth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - - for (var i = 0, l = nodes.length; i < l; i++) { - var node = nodes[i]; - - if (nodeStack.indexOf(node) !== -1) { - var _ret = function () { - var loop = [].concat(_toConsumableArray$1(nodeStack.slice(nodeStack.indexOf(node))), [node]).map(function (d) { - return idAccessor(d.data); - }); - - if (!foundLoops.some(function (foundLoop) { - return foundLoop.length === loop.length && foundLoop.every(function (id, idx) { - return id === loop[idx]; - }); - })) { - foundLoops.push(loop); - onLoopError(loop); - } - - return "continue"; - }(); - - if (_ret === "continue") continue; - } - - if (currentDepth > node.depth) { - // Don't unnecessarily revisit chunks of the graph - node.depth = currentDepth; - traverse(node.out, [].concat(_toConsumableArray$1(nodeStack), [node]), currentDepth + (node.skip ? 0 : 1)); - } - } - } - } - - var three$1$1 = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists - : { - Group: Group$1, - Mesh: Mesh, - MeshLambertMaterial: MeshLambertMaterial, - Color: Color, - BufferGeometry: BufferGeometry, - BufferAttribute: BufferAttribute, - Matrix4: Matrix4, - Vector3: Vector3, - SphereBufferGeometry: SphereBufferGeometry, - CylinderBufferGeometry: CylinderBufferGeometry, - TubeBufferGeometry: TubeBufferGeometry, - ConeBufferGeometry: ConeBufferGeometry, - Line: Line, - LineBasicMaterial: LineBasicMaterial, - QuadraticBezierCurve3: QuadraticBezierCurve3, - CubicBezierCurve3: CubicBezierCurve3, - Box3: Box3 - }; - var ngraph = { - graph: ngraph_graph, - forcelayout: forcelayout - }; - - var DAG_LEVEL_NODE_RATIO = 2; // support multiple method names for backwards threejs compatibility - - var setAttributeFn = new three$1$1.BufferGeometry().setAttribute ? 'setAttribute' : 'addAttribute'; - var applyMatrix4Fn = new three$1$1.BufferGeometry().applyMatrix4 ? 'applyMatrix4' : 'applyMatrix'; - var ForceGraph = index$2({ - props: { - jsonUrl: { - onChange: function onChange(jsonUrl, state) { - var _this = this; - - if (jsonUrl && !state.fetchingJson) { - // Load data asynchronously - state.fetchingJson = true; - state.onLoading(); - fetch(jsonUrl).then(function (r) { - return r.json(); - }).then(function (json) { - state.fetchingJson = false; - state.onFinishLoading(json); - - _this.graphData(json); - }); - } - }, - triggerUpdate: false - }, - graphData: { - "default": { - nodes: [], - links: [] - }, - onChange: function onChange(graphData, state) { - state.engineRunning = false; // Pause simulation immediately - } - }, - numDimensions: { - "default": 3, - onChange: function onChange(numDim, state) { - var chargeForce = state.d3ForceLayout.force('charge'); // Increase repulsion on 3D mode for improved spatial separation - - if (chargeForce) { - chargeForce.strength(numDim > 2 ? -60 : -30); - } - - if (numDim < 3) { - eraseDimension(state.graphData.nodes, 'z'); - } - - if (numDim < 2) { - eraseDimension(state.graphData.nodes, 'y'); - } - - function eraseDimension(nodes, dim) { - nodes.forEach(function (d) { - delete d[dim]; // position - - delete d["v".concat(dim)]; // velocity - }); - } - } - }, - dagMode: { - onChange: function onChange(dagMode, state) { - // td, bu, lr, rl, zin, zout, radialin, radialout - !dagMode && state.forceEngine === 'd3' && (state.graphData.nodes || []).forEach(function (n) { - return n.fx = n.fy = n.fz = undefined; - }); // unfix nodes when disabling dag mode - } - }, - dagLevelDistance: {}, - dagNodeFilter: { - "default": function _default(node) { - return true; - } - }, - onDagError: { - triggerUpdate: false - }, - nodeRelSize: { - "default": 4 - }, - // volume per val unit - nodeId: { - "default": 'id' - }, - nodeVal: { - "default": 'val' - }, - nodeResolution: { - "default": 8 - }, - // how many slice segments in the sphere's circumference - nodeColor: { - "default": 'color' - }, - nodeAutoColorBy: {}, - nodeOpacity: { - "default": 0.75 - }, - nodeVisibility: { - "default": true - }, - nodeThreeObject: {}, - nodeThreeObjectExtend: { - "default": false - }, - linkSource: { - "default": 'source' - }, - linkTarget: { - "default": 'target' - }, - linkVisibility: { - "default": true - }, - linkColor: { - "default": 'color' - }, - linkAutoColorBy: {}, - linkOpacity: { - "default": 0.2 - }, - linkWidth: {}, - // Rounded to nearest decimal. For falsy values use dimensionless line with 1px regardless of distance. - linkResolution: { - "default": 6 - }, - // how many radial segments in each line tube's geometry - linkCurvature: { - "default": 0, - triggerUpdate: false - }, - // line curvature radius (0: straight, 1: semi-circle) - linkCurveRotation: { - "default": 0, - triggerUpdate: false - }, - // line curve rotation along the line axis (0: interection with XY plane, PI: upside down) - linkMaterial: {}, - linkThreeObject: {}, - linkThreeObjectExtend: { - "default": false - }, - linkPositionUpdate: { - triggerUpdate: false - }, - // custom function to call for updating the link's position. Signature: (threeObj, { start: { x, y, z}, end: { x, y, z }}, link). If the function returns a truthy value, the regular link position update will not run. - linkDirectionalArrowLength: { - "default": 0 - }, - linkDirectionalArrowColor: {}, - linkDirectionalArrowRelPos: { - "default": 0.5, - triggerUpdate: false - }, - // value between 0<>1 indicating the relative pos along the (exposed) line - linkDirectionalArrowResolution: { - "default": 8 - }, - // how many slice segments in the arrow's conic circumference - linkDirectionalParticles: { - "default": 0 - }, - // animate photons travelling in the link direction - linkDirectionalParticleSpeed: { - "default": 0.01, - triggerUpdate: false - }, - // in link length ratio per frame - linkDirectionalParticleWidth: { - "default": 0.5 - }, - linkDirectionalParticleColor: {}, - linkDirectionalParticleResolution: { - "default": 4 - }, - // how many slice segments in the particle sphere's circumference - forceEngine: { - "default": 'd3' - }, - // d3 or ngraph - d3AlphaMin: { - "default": 0 - }, - d3AlphaDecay: { - "default": 0.0228, - triggerUpdate: false, - onChange: function onChange(alphaDecay, state) { - state.d3ForceLayout.alphaDecay(alphaDecay); - } - }, - d3AlphaTarget: { - "default": 0, - triggerUpdate: false, - onChange: function onChange(alphaTarget, state) { - state.d3ForceLayout.alphaTarget(alphaTarget); - } - }, - d3VelocityDecay: { - "default": 0.4, - triggerUpdate: false, - onChange: function onChange(velocityDecay, state) { - state.d3ForceLayout.velocityDecay(velocityDecay); - } - }, - ngraphPhysics: { - "default": { - // defaults from https://github.com/anvaka/ngraph.physics.simulator/blob/master/index.js - timeStep: 20, - gravity: -1.2, - theta: 0.8, - springLength: 30, - springCoefficient: 0.0008, - dragCoefficient: 0.02 - } - }, - warmupTicks: { - "default": 0, - triggerUpdate: false - }, - // how many times to tick the force engine at init before starting to render - cooldownTicks: { - "default": Infinity, - triggerUpdate: false - }, - cooldownTime: { - "default": 15000, - triggerUpdate: false - }, - // ms - onLoading: { - "default": function _default() {}, - triggerUpdate: false - }, - onFinishLoading: { - "default": function _default() {}, - triggerUpdate: false - }, - onUpdate: { - "default": function _default() {}, - triggerUpdate: false - }, - onFinishUpdate: { - "default": function _default() {}, - triggerUpdate: false - }, - onEngineTick: { - "default": function _default() {}, - triggerUpdate: false - }, - onEngineStop: { - "default": function _default() {}, - triggerUpdate: false - } - }, - methods: { - refresh: function refresh(state) { - state._flushObjects = true; - - state._rerender(); - - return this; - }, - // Expose d3 forces for external manipulation - d3Force: function d3Force(state, forceName, forceFn) { - if (forceFn === undefined) { - return state.d3ForceLayout.force(forceName); // Force getter - } - - state.d3ForceLayout.force(forceName, forceFn); // Force setter - - return this; - }, - d3ReheatSimulation: function d3ReheatSimulation(state) { - state.d3ForceLayout.alpha(1); - this.resetCountdown(); - return this; - }, - // reset cooldown state - resetCountdown: function resetCountdown(state) { - state.cntTicks = 0; - state.startTickTime = new Date(); - state.engineRunning = true; - return this; - }, - tickFrame: function tickFrame(state) { - var isD3Sim = state.forceEngine !== 'ngraph'; - - if (state.engineRunning) { - layoutTick(); - } - - updateArrows(); - updatePhotons(); - return this; // - - function layoutTick() { - if (++state.cntTicks > state.cooldownTicks || new Date() - state.startTickTime > state.cooldownTime || isD3Sim && state.d3AlphaMin > 0 && state.d3ForceLayout.alpha() < state.d3AlphaMin) { - state.engineRunning = false; // Stop ticking graph - - state.onEngineStop(); - } else { - state.layout[isD3Sim ? 'tick' : 'step'](); // Tick it - - state.onEngineTick(); - } // Update nodes position - - - state.graphData.nodes.forEach(function (node) { - var obj = node.__threeObj; - if (!obj) return; - var pos = isD3Sim ? node : state.layout.getNodePosition(node[state.nodeId]); - obj.position.x = pos.x; - obj.position.y = pos.y || 0; - obj.position.z = pos.z || 0; - }); // Update links position - - var linkWidthAccessor = index$1(state.linkWidth); - var linkCurvatureAccessor = index$1(state.linkCurvature); - var linkCurveRotationAccessor = index$1(state.linkCurveRotation); - var linkThreeObjectExtendAccessor = index$1(state.linkThreeObjectExtend); - state.graphData.links.forEach(function (link) { - var lineObj = link.__lineObj; - if (!lineObj) return; - var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id); - var start = pos[isD3Sim ? 'source' : 'from']; - var end = pos[isD3Sim ? 'target' : 'to']; - if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link - - calcLinkCurve(link); // calculate link curve for all links, including custom replaced, so it can be used in directional functionality - - var extendedObj = linkThreeObjectExtendAccessor(link); - - if (state.linkPositionUpdate && state.linkPositionUpdate(extendedObj ? lineObj.children[1] : lineObj, // pass child custom object if extending the default - { - start: { - x: start.x, - y: start.y, - z: start.z - }, - end: { - x: end.x, - y: end.y, - z: end.z - } - }, link) && !extendedObj) { - // exit if successfully custom updated position of non-extended obj - return; - } - - var curveResolution = 30; // # line segments - - var curve = link.__curve; // select default line obj if it's an extended group - - var line = lineObj.children.length ? lineObj.children[0] : lineObj; - - if (line.type === 'Line') { - // Update line geometry - if (!curve) { - // straight line - var linePos = line.geometry.getAttribute('position'); - - if (!linePos || !linePos.array || linePos.array.length !== 6) { - line.geometry[setAttributeFn]('position', linePos = new three$1$1.BufferAttribute(new Float32Array(2 * 3), 3)); - } - - linePos.array[0] = start.x; - linePos.array[1] = start.y || 0; - linePos.array[2] = start.z || 0; - linePos.array[3] = end.x; - linePos.array[4] = end.y || 0; - linePos.array[5] = end.z || 0; - linePos.needsUpdate = true; - } else { - // bezier curve line - line.geometry.setFromPoints(curve.getPoints(curveResolution)); - } - - line.geometry.computeBoundingSphere(); - } else if (line.type === 'Mesh') { - // Update cylinder geometry - if (!curve) { - // straight tube - if (!line.geometry.type.match(/^Cylinder(Buffer)?Geometry$/)) { - var linkWidth = Math.ceil(linkWidthAccessor(link) * 10) / 10; - var r = linkWidth / 2; - var geometry = new three$1$1.CylinderBufferGeometry(r, r, 1, state.linkResolution, 1, false); - geometry[applyMatrix4Fn](new three$1$1.Matrix4().makeTranslation(0, 1 / 2, 0)); - geometry[applyMatrix4Fn](new three$1$1.Matrix4().makeRotationX(Math.PI / 2)); - line.geometry.dispose(); - line.geometry = geometry; - } - - var vStart = new three$1$1.Vector3(start.x, start.y || 0, start.z || 0); - var vEnd = new three$1$1.Vector3(end.x, end.y || 0, end.z || 0); - var distance = vStart.distanceTo(vEnd); - line.position.x = vStart.x; - line.position.y = vStart.y; - line.position.z = vStart.z; - line.scale.z = distance; - line.parent.localToWorld(vEnd); // lookAt requires world coords - - line.lookAt(vEnd); - } else { - // curved tube - if (!line.geometry.type.match(/^Tube(Buffer)?Geometry$/)) { - // reset object positioning - line.position.set(0, 0, 0); - line.rotation.set(0, 0, 0); - line.scale.set(1, 1, 1); - } - - var _linkWidth = Math.ceil(linkWidthAccessor(link) * 10) / 10; - - var _r = _linkWidth / 2; - - var _geometry = new three$1$1.TubeBufferGeometry(curve, curveResolution, _r, state.linkResolution, false); - - line.geometry.dispose(); - line.geometry = _geometry; - } - } - }); // - - function calcLinkCurve(link) { - var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id); - var start = pos[isD3Sim ? 'source' : 'from']; - var end = pos[isD3Sim ? 'target' : 'to']; - if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link - - var curvature = linkCurvatureAccessor(link); - - if (!curvature) { - link.__curve = null; // Straight line - } else { - // bezier curve line (only for line types) - var vStart = new three$1$1.Vector3(start.x, start.y || 0, start.z || 0); - var vEnd = new three$1$1.Vector3(end.x, end.y || 0, end.z || 0); - var l = vStart.distanceTo(vEnd); // line length - - var curve; - var curveRotation = linkCurveRotationAccessor(link); - - if (l > 0) { - var dx = end.x - start.x; - var dy = end.y - start.y || 0; - var vLine = new three$1$1.Vector3().subVectors(vEnd, vStart); - var cp = vLine.clone().multiplyScalar(curvature).cross(dx !== 0 || dy !== 0 ? new three$1$1.Vector3(0, 0, 1) : new three$1$1.Vector3(0, 1, 0)) // avoid cross-product of parallel vectors (prefer Z, fallback to Y) - .applyAxisAngle(vLine.normalize(), curveRotation) // rotate along line axis according to linkCurveRotation - .add(new three$1$1.Vector3().addVectors(vStart, vEnd).divideScalar(2)); - curve = new three$1$1.QuadraticBezierCurve3(vStart, cp, vEnd); - } else { - // Same point, draw a loop - var d = curvature * 70; - var endAngle = -curveRotation; // Rotate clockwise (from Z angle perspective) - - var startAngle = endAngle + Math.PI / 2; - curve = new three$1$1.CubicBezierCurve3(vStart, new three$1$1.Vector3(d * Math.cos(startAngle), d * Math.sin(startAngle), 0).add(vStart), new three$1$1.Vector3(d * Math.cos(endAngle), d * Math.sin(endAngle), 0).add(vStart), vEnd); - } - - link.__curve = curve; - } - } - } - - function updateArrows() { - // update link arrow position - var arrowRelPosAccessor = index$1(state.linkDirectionalArrowRelPos); - var arrowLengthAccessor = index$1(state.linkDirectionalArrowLength); - var nodeValAccessor = index$1(state.nodeVal); - state.graphData.links.forEach(function (link) { - var arrowObj = link.__arrowObj; - if (!arrowObj) return; - var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id); - var start = pos[isD3Sim ? 'source' : 'from']; - var end = pos[isD3Sim ? 'target' : 'to']; - if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link - - var startR = Math.sqrt(Math.max(0, nodeValAccessor(start) || 1)) * state.nodeRelSize; - var endR = Math.sqrt(Math.max(0, nodeValAccessor(end) || 1)) * state.nodeRelSize; - var arrowLength = arrowLengthAccessor(link); - var arrowRelPos = arrowRelPosAccessor(link); - var getPosAlongLine = link.__curve ? function (t) { - return link.__curve.getPoint(t); - } // interpolate along bezier curve - : function (t) { - // straight line: interpolate linearly - var iplt = function iplt(dim, start, end, t) { - return start[dim] + (end[dim] - start[dim]) * t || 0; - }; - - return { - x: iplt('x', start, end, t), - y: iplt('y', start, end, t), - z: iplt('z', start, end, t) - }; - }; - var lineLen = link.__curve ? link.__curve.getLength() : Math.sqrt(['x', 'y', 'z'].map(function (dim) { - return Math.pow((end[dim] || 0) - (start[dim] || 0), 2); - }).reduce(function (acc, v) { - return acc + v; - }, 0)); - var posAlongLine = startR + arrowLength + (lineLen - startR - endR - arrowLength) * arrowRelPos; - var arrowHead = getPosAlongLine(posAlongLine / lineLen); - var arrowTail = getPosAlongLine((posAlongLine - arrowLength) / lineLen); - ['x', 'y', 'z'].forEach(function (dim) { - return arrowObj.position[dim] = arrowTail[dim]; - }); - - var headVec = _construct$1(three$1$1.Vector3, _toConsumableArray$1(['x', 'y', 'z'].map(function (c) { - return arrowHead[c]; - }))); - - arrowObj.parent.localToWorld(headVec); // lookAt requires world coords - - arrowObj.lookAt(headVec); - }); - } - - function updatePhotons() { - // update link particle positions - var particleSpeedAccessor = index$1(state.linkDirectionalParticleSpeed); - state.graphData.links.forEach(function (link) { - var cyclePhotons = link.__photonsObj && link.__photonsObj.children; - var singleHopPhotons = link.__singleHopPhotonsObj && link.__singleHopPhotonsObj.children; - if ((!singleHopPhotons || !singleHopPhotons.length) && (!cyclePhotons || !cyclePhotons.length)) return; - var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id); - var start = pos[isD3Sim ? 'source' : 'from']; - var end = pos[isD3Sim ? 'target' : 'to']; - if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link - - var particleSpeed = particleSpeedAccessor(link); - var getPhotonPos = link.__curve ? function (t) { - return link.__curve.getPoint(t); - } // interpolate along bezier curve - : function (t) { - // straight line: interpolate linearly - var iplt = function iplt(dim, start, end, t) { - return start[dim] + (end[dim] - start[dim]) * t || 0; - }; - - return { - x: iplt('x', start, end, t), - y: iplt('y', start, end, t), - z: iplt('z', start, end, t) - }; - }; - var photons = [].concat(_toConsumableArray$1(cyclePhotons || []), _toConsumableArray$1(singleHopPhotons || [])); - photons.forEach(function (photon, idx) { - var singleHop = photon.parent.__linkThreeObjType === 'singleHopPhotons'; - - if (!photon.hasOwnProperty('__progressRatio')) { - photon.__progressRatio = singleHop ? 0 : idx / cyclePhotons.length; - } - - photon.__progressRatio += particleSpeed; - - if (photon.__progressRatio >= 1) { - if (!singleHop) { - photon.__progressRatio = photon.__progressRatio % 1; - } else { - // remove particle - photon.parent.remove(photon); - emptyObject(photon); - return; - } - } - - var photonPosRatio = photon.__progressRatio; - var pos = getPhotonPos(photonPosRatio); - ['x', 'y', 'z'].forEach(function (dim) { - return photon.position[dim] = pos[dim]; - }); - }); - }); - } - }, - emitParticle: function emitParticle(state, link) { - if (link) { - if (!link.__singleHopPhotonsObj) { - var obj = new three$1$1.Group(); - obj.__linkThreeObjType = 'singleHopPhotons'; - link.__singleHopPhotonsObj = obj; - state.graphScene.add(obj); - } - - var particleWidthAccessor = index$1(state.linkDirectionalParticleWidth); - var photonR = Math.ceil(particleWidthAccessor(link) * 10) / 10 / 2; - var numSegments = state.linkDirectionalParticleResolution; - var particleGeometry = new three$1$1.SphereBufferGeometry(photonR, numSegments, numSegments); - var linkColorAccessor = index$1(state.linkColor); - var particleColorAccessor = index$1(state.linkDirectionalParticleColor); - var photonColor = particleColorAccessor(link) || linkColorAccessor(link) || '#f0f0f0'; - var materialColor = new three$1$1.Color(colorStr2Hex(photonColor)); - var opacity = state.linkOpacity * 3; - var particleMaterial = new three$1$1.MeshLambertMaterial({ - color: materialColor, - transparent: true, - opacity: opacity - }); // add a single hop particle - - link.__singleHopPhotonsObj.add(new three$1$1.Mesh(particleGeometry, particleMaterial)); - } - - return this; - }, - getGraphBbox: function getGraphBbox(state) { - var nodeFilter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () { - return true; - }; - if (!state.initialised) return null; // recursively collect all nested geometries bboxes - - var bboxes = function getBboxes(obj) { - var bboxes = []; - - if (obj.geometry) { - obj.geometry.computeBoundingBox(); - var box = new three$1$1.Box3(); - box.copy(obj.geometry.boundingBox).applyMatrix4(obj.matrixWorld); - bboxes.push(box); - } - - return bboxes.concat.apply(bboxes, _toConsumableArray$1((obj.children || []).filter(function (obj) { - return !obj.hasOwnProperty('__graphObjType') || obj.__graphObjType === 'node' && nodeFilter(obj.__data); - } // exclude filtered out nodes - ).map(getBboxes))); - }(state.graphScene); - - if (!bboxes.length) return null; // extract global x,y,z min/max - - return Object.assign.apply(Object, _toConsumableArray$1(['x', 'y', 'z'].map(function (c) { - return _defineProperty$1({}, c, [min(bboxes, function (bb) { - return bb.min[c]; - }), max(bboxes, function (bb) { - return bb.max[c]; - })]); - }))); - } - }, - stateInit: function stateInit() { - return { - d3ForceLayout: forceSimulation().force('link', forceLink()).force('charge', forceManyBody()).force('center', forceCenter()).force('dagRadial', null).stop(), - engineRunning: false - }; - }, - init: function init(threeObj, state) { - // Main three object to manipulate - state.graphScene = threeObj; - }, - update: function update(state, changedProps) { - var hasAnyPropChanged = function hasAnyPropChanged(propList) { - return propList.some(function (p) { - return changedProps.hasOwnProperty(p); - }); - }; - - state.engineRunning = false; // pause simulation - - state.onUpdate(); - - if (state.nodeAutoColorBy !== null && hasAnyPropChanged(['nodeAutoColorBy', 'graphData', 'nodeColor'])) { - // Auto add color to uncolored nodes - autoColorObjects(state.graphData.nodes, index$1(state.nodeAutoColorBy), state.nodeColor); - } - - if (state.linkAutoColorBy !== null && hasAnyPropChanged(['linkAutoColorBy', 'graphData', 'linkColor'])) { - // Auto add color to uncolored links - autoColorObjects(state.graphData.links, index$1(state.linkAutoColorBy), state.linkColor); - } // Digest nodes WebGL objects - - - if (state._flushObjects || hasAnyPropChanged(['graphData', 'nodeThreeObject', 'nodeThreeObjectExtend', 'nodeVal', 'nodeColor', 'nodeVisibility', 'nodeRelSize', 'nodeResolution', 'nodeOpacity'])) { - var customObjectAccessor = index$1(state.nodeThreeObject); - var customObjectExtendAccessor = index$1(state.nodeThreeObjectExtend); - var valAccessor = index$1(state.nodeVal); - var colorAccessor = index$1(state.nodeColor); - var visibilityAccessor = index$1(state.nodeVisibility); - var sphereGeometries = {}; // indexed by node value - - var sphereMaterials = {}; // indexed by color - - threeDigest(state.graphData.nodes.filter(visibilityAccessor), state.graphScene, { - purge: state._flushObjects || hasAnyPropChanged([// recreate objects if any of these props have changed - 'nodeThreeObject', 'nodeThreeObjectExtend']), - objFilter: function objFilter(obj) { - return obj.__graphObjType === 'node'; - }, - createObj: function createObj(node) { - var customObj = customObjectAccessor(node); - var extendObj = customObjectExtendAccessor(node); - - if (customObj && state.nodeThreeObject === customObj) { - // clone object if it's a shared object among all nodes - customObj = customObj.clone(); - } - - var obj; - - if (customObj && !extendObj) { - obj = customObj; - } else { - // Add default object (sphere mesh) - obj = new three$1$1.Mesh(); - obj.__graphDefaultObj = true; - - if (customObj && extendObj) { - obj.add(customObj); // extend default with custom - } - } - - obj.__graphObjType = 'node'; // Add object type - - return obj; - }, - updateObj: function updateObj(obj, node) { - if (obj.__graphDefaultObj) { - // bypass internal updates for custom node objects - var val = valAccessor(node) || 1; - var radius = Math.cbrt(val) * state.nodeRelSize; - var numSegments = state.nodeResolution; - - if (!obj.geometry.type.match(/^Sphere(Buffer)?Geometry$/) || obj.geometry.parameters.radius !== radius || obj.geometry.parameters.widthSegments !== numSegments) { - if (!sphereGeometries.hasOwnProperty(val)) { - sphereGeometries[val] = new three$1$1.SphereBufferGeometry(radius, numSegments, numSegments); - } - - obj.geometry.dispose(); - obj.geometry = sphereGeometries[val]; - } - - var color = colorAccessor(node); - var materialColor = new three$1$1.Color(colorStr2Hex(color || '#ffffaa')); - var opacity = state.nodeOpacity * colorAlpha(color); - - if (obj.material.type !== 'MeshLambertMaterial' || !obj.material.color.equals(materialColor) || obj.material.opacity !== opacity) { - if (!sphereMaterials.hasOwnProperty(color)) { - sphereMaterials[color] = new three$1$1.MeshLambertMaterial({ - color: materialColor, - transparent: true, - opacity: opacity - }); - } - - obj.material.dispose(); - obj.material = sphereMaterials[color]; - } - } - } - }); - } // Digest links WebGL objects - - - if (state._flushObjects || hasAnyPropChanged(['graphData', 'linkThreeObject', 'linkThreeObjectExtend', 'linkMaterial', 'linkColor', 'linkWidth', 'linkVisibility', 'linkResolution', 'linkOpacity', 'linkDirectionalArrowLength', 'linkDirectionalArrowColor', 'linkDirectionalArrowResolution', 'linkDirectionalParticles', 'linkDirectionalParticleWidth', 'linkDirectionalParticleColor', 'linkDirectionalParticleResolution'])) { - var _customObjectAccessor = index$1(state.linkThreeObject); - - var _customObjectExtendAccessor = index$1(state.linkThreeObjectExtend); - - var customMaterialAccessor = index$1(state.linkMaterial); - - var _visibilityAccessor = index$1(state.linkVisibility); - - var _colorAccessor = index$1(state.linkColor); - - var widthAccessor = index$1(state.linkWidth); - var cylinderGeometries = {}; // indexed by link width - - var lambertLineMaterials = {}; // for cylinder objects, indexed by link color - - var basicLineMaterials = {}; // for line objects, indexed by link color - - var visibleLinks = state.graphData.links.filter(_visibilityAccessor); // lines digest cycle - - threeDigest(visibleLinks, state.graphScene, { - objBindAttr: '__lineObj', - purge: state._flushObjects || hasAnyPropChanged([// recreate objects if any of these props have changed - 'linkThreeObject', 'linkThreeObjectExtend', 'linkWidth']), - objFilter: function objFilter(obj) { - return obj.__graphObjType === 'link'; - }, - createObj: function createObj(link) { - var customObj = _customObjectAccessor(link); - - var extendObj = _customObjectExtendAccessor(link); - - if (customObj && state.linkThreeObject === customObj) { - // clone object if it's a shared object among all links - customObj = customObj.clone(); - } - - var defaultObj; - - if (!customObj || extendObj) { - // construct default line obj - var useCylinder = !!widthAccessor(link); - - if (useCylinder) { - defaultObj = new three$1$1.Mesh(); - } else { - // Use plain line (constant width) - var lineGeometry = new three$1$1.BufferGeometry(); - lineGeometry[setAttributeFn]('position', new three$1$1.BufferAttribute(new Float32Array(2 * 3), 3)); - defaultObj = new three$1$1.Line(lineGeometry); - } - } - - var obj; - - if (!customObj) { - obj = defaultObj; - obj.__graphDefaultObj = true; - } else { - if (!extendObj) { - // use custom object - obj = customObj; - } else { - // extend default with custom in a group - obj = new three$1$1.Group(); - obj.__graphDefaultObj = true; - obj.add(defaultObj); - obj.add(customObj); - } - } - - obj.renderOrder = 10; // Prevent visual glitches of dark lines on top of nodes by rendering them last - - obj.__graphObjType = 'link'; // Add object type - - return obj; - }, - updateObj: function updateObj(updObj, link) { - if (updObj.__graphDefaultObj) { - // bypass internal updates for custom link objects - // select default object if it's an extended group - var obj = updObj.children.length ? updObj.children[0] : updObj; - var linkWidth = Math.ceil(widthAccessor(link) * 10) / 10; - var useCylinder = !!linkWidth; - - if (useCylinder) { - var r = linkWidth / 2; - var numSegments = state.linkResolution; - - if (!obj.geometry.type.match(/^Cylinder(Buffer)?Geometry$/) || obj.geometry.parameters.radiusTop !== r || obj.geometry.parameters.radialSegments !== numSegments) { - if (!cylinderGeometries.hasOwnProperty(linkWidth)) { - var geometry = new three$1$1.CylinderBufferGeometry(r, r, 1, numSegments, 1, false); - geometry[applyMatrix4Fn](new three$1$1.Matrix4().makeTranslation(0, 1 / 2, 0)); - geometry[applyMatrix4Fn](new three$1$1.Matrix4().makeRotationX(Math.PI / 2)); - cylinderGeometries[linkWidth] = geometry; - } - - obj.geometry.dispose(); - obj.geometry = cylinderGeometries[linkWidth]; - } - } - - var customMaterial = customMaterialAccessor(link); - - if (customMaterial) { - obj.material = customMaterial; - } else { - var color = _colorAccessor(link); - - var materialColor = new three$1$1.Color(colorStr2Hex(color || '#f0f0f0')); - var opacity = state.linkOpacity * colorAlpha(color); - var materialType = useCylinder ? 'MeshLambertMaterial' : 'LineBasicMaterial'; - - if (obj.material.type !== materialType || !obj.material.color.equals(materialColor) || obj.material.opacity !== opacity) { - var lineMaterials = useCylinder ? lambertLineMaterials : basicLineMaterials; - - if (!lineMaterials.hasOwnProperty(color)) { - lineMaterials[color] = new three$1$1[materialType]({ - color: materialColor, - transparent: opacity < 1, - opacity: opacity, - depthWrite: opacity >= 1 // Prevent transparency issues - - }); - } - - obj.material.dispose(); - obj.material = lineMaterials[color]; - } - } - } - } - }); // Arrows digest cycle - - if (state.linkDirectionalArrowLength || changedProps.hasOwnProperty('linkDirectionalArrowLength')) { - var arrowLengthAccessor = index$1(state.linkDirectionalArrowLength); - var arrowColorAccessor = index$1(state.linkDirectionalArrowColor); - threeDigest(visibleLinks.filter(arrowLengthAccessor), state.graphScene, { - objBindAttr: '__arrowObj', - objFilter: function objFilter(obj) { - return obj.__linkThreeObjType === 'arrow'; - }, - createObj: function createObj() { - var obj = new three$1$1.Mesh(undefined, new three$1$1.MeshLambertMaterial({ - transparent: true - })); - obj.__linkThreeObjType = 'arrow'; // Add object type - - return obj; - }, - updateObj: function updateObj(obj, link) { - var arrowLength = arrowLengthAccessor(link); - var numSegments = state.linkDirectionalArrowResolution; - - if (!obj.geometry.type.match(/^Cone(Buffer)?Geometry$/) || obj.geometry.parameters.height !== arrowLength || obj.geometry.parameters.radialSegments !== numSegments) { - var coneGeometry = new three$1$1.ConeBufferGeometry(arrowLength * 0.25, arrowLength, numSegments); // Correct orientation - - coneGeometry.translate(0, arrowLength / 2, 0); - coneGeometry.rotateX(Math.PI / 2); - obj.geometry.dispose(); - obj.geometry = coneGeometry; - } - - obj.material.color = new three$1$1.Color(arrowColorAccessor(link) || _colorAccessor(link) || '#f0f0f0'); - obj.material.opacity = state.linkOpacity * 3; - } - }); - } // Photon particles digest cycle - - - if (state.linkDirectionalParticles || changedProps.hasOwnProperty('linkDirectionalParticles')) { - var particlesAccessor = index$1(state.linkDirectionalParticles); - var particleWidthAccessor = index$1(state.linkDirectionalParticleWidth); - var particleColorAccessor = index$1(state.linkDirectionalParticleColor); - var particleMaterials = {}; // indexed by link color - - var particleGeometries = {}; // indexed by particle width - - threeDigest(visibleLinks.filter(particlesAccessor), state.graphScene, { - objBindAttr: '__photonsObj', - objFilter: function objFilter(obj) { - return obj.__linkThreeObjType === 'photons'; - }, - createObj: function createObj() { - var obj = new three$1$1.Group(); - obj.__linkThreeObjType = 'photons'; // Add object type - - return obj; - }, - updateObj: function updateObj(obj, link) { - var numPhotons = Math.round(Math.abs(particlesAccessor(link))); - var curPhoton = !!obj.children.length && obj.children[0]; - var photonR = Math.ceil(particleWidthAccessor(link) * 10) / 10 / 2; - var numSegments = state.linkDirectionalParticleResolution; - var particleGeometry; - - if (curPhoton && curPhoton.geometry.parameters.radius === photonR && curPhoton.geometry.parameters.widthSegments === numSegments) { - particleGeometry = curPhoton.geometry; - } else { - if (!particleGeometries.hasOwnProperty(photonR)) { - particleGeometries[photonR] = new three$1$1.SphereBufferGeometry(photonR, numSegments, numSegments); - } - - particleGeometry = particleGeometries[photonR]; - curPhoton && curPhoton.geometry.dispose(); - } - - var photonColor = particleColorAccessor(link) || _colorAccessor(link) || '#f0f0f0'; - var materialColor = new three$1$1.Color(colorStr2Hex(photonColor)); - var opacity = state.linkOpacity * 3; - var particleMaterial; - - if (curPhoton && curPhoton.material.color.equals(materialColor) && curPhoton.material.opacity === opacity) { - particleMaterial = curPhoton.material; - } else { - if (!particleMaterials.hasOwnProperty(photonColor)) { - particleMaterials[photonColor] = new three$1$1.MeshLambertMaterial({ - color: materialColor, - transparent: true, - opacity: opacity - }); - } - - particleMaterial = particleMaterials[photonColor]; - curPhoton && curPhoton.material.dispose(); - } // digest cycle for each photon - - - threeDigest(_toConsumableArray$1(new Array(numPhotons)).map(function (_, idx) { - return { - idx: idx - }; - }), obj, { - idAccessor: function idAccessor(d) { - return d.idx; - }, - createObj: function createObj() { - return new three$1$1.Mesh(particleGeometry, particleMaterial); - }, - updateObj: function updateObj(obj) { - obj.geometry = particleGeometry; - obj.material = particleMaterial; - } - }); - } - }); - } - } - - state._flushObjects = false; // reset objects refresh flag - // simulation engine - - if (hasAnyPropChanged(['graphData', 'nodeId', 'linkSource', 'linkTarget', 'numDimensions', 'forceEngine', 'dagMode', 'dagNodeFilter', 'dagLevelDistance'])) { - state.engineRunning = false; // Pause simulation - // parse links - - state.graphData.links.forEach(function (link) { - link.source = link[state.linkSource]; - link.target = link[state.linkTarget]; - }); // Feed data to force-directed layout - - var isD3Sim = state.forceEngine !== 'ngraph'; - var layout; - - if (isD3Sim) { - // D3-force - (layout = state.d3ForceLayout).stop().alpha(1) // re-heat the simulation - .numDimensions(state.numDimensions).nodes(state.graphData.nodes); // add links (if link force is still active) - - var linkForce = state.d3ForceLayout.force('link'); - - if (linkForce) { - linkForce.id(function (d) { - return d[state.nodeId]; - }).links(state.graphData.links); - } // setup dag force constraints - - - var nodeDepths = state.dagMode && getDagDepths(state.graphData, function (node) { - return node[state.nodeId]; - }, { - nodeFilter: state.dagNodeFilter, - onLoopError: state.onDagError || undefined - }); - var maxDepth = Math.max.apply(Math, _toConsumableArray$1(Object.values(nodeDepths || []))); - var dagLevelDistance = state.dagLevelDistance || state.graphData.nodes.length / (maxDepth || 1) * DAG_LEVEL_NODE_RATIO * (['radialin', 'radialout'].indexOf(state.dagMode) !== -1 ? 0.7 : 1); // Fix nodes to x,y,z for dag mode - - if (state.dagMode) { - var getFFn = function getFFn(fix, invert) { - return function (node) { - return !fix ? undefined : (nodeDepths[node[state.nodeId]] - maxDepth / 2) * dagLevelDistance * (invert ? -1 : 1); - }; - }; - - var fxFn = getFFn(['lr', 'rl'].indexOf(state.dagMode) !== -1, state.dagMode === 'rl'); - var fyFn = getFFn(['td', 'bu'].indexOf(state.dagMode) !== -1, state.dagMode === 'td'); - var fzFn = getFFn(['zin', 'zout'].indexOf(state.dagMode) !== -1, state.dagMode === 'zout'); - state.graphData.nodes.filter(state.dagNodeFilter).forEach(function (node) { - node.fx = fxFn(node); - node.fy = fyFn(node); - node.fz = fzFn(node); - }); - } // Use radial force for radial dags - - - state.d3ForceLayout.force('dagRadial', ['radialin', 'radialout'].indexOf(state.dagMode) !== -1 ? forceRadial(function (node) { - var nodeDepth = nodeDepths[node[state.nodeId]] || -1; - return (state.dagMode === 'radialin' ? maxDepth - nodeDepth : nodeDepth) * dagLevelDistance; - }).strength(function (node) { - return state.dagNodeFilter(node) ? 1 : 0; - }) : null); - } else { - // ngraph - var _graph = ngraph.graph(); - - state.graphData.nodes.forEach(function (node) { - _graph.addNode(node[state.nodeId]); - }); - state.graphData.links.forEach(function (link) { - _graph.addLink(link.source, link.target); - }); - layout = ngraph.forcelayout(_graph, _objectSpread2({ - dimensions: state.numDimensions - }, state.ngraphPhysics)); - layout.graph = _graph; // Attach graph reference to layout - } - - for (var i = 0; i < state.warmupTicks && !(isD3Sim && state.d3AlphaMin > 0 && state.d3ForceLayout.alpha() < state.d3AlphaMin); i++) { - layout[isD3Sim ? "tick" : "step"](); - } // Initial ticks before starting to render - - - state.layout = layout; - this.resetCountdown(); - } - - state.engineRunning = true; // resume simulation - - state.onFinishUpdate(); - } - }); - - function fromKapsule (kapsule) { - var baseClass = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Object; - var initKapsuleWithSelf = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - var FromKapsule = /*#__PURE__*/function (_baseClass) { - _inherits(FromKapsule, _baseClass); - - var _super = _createSuper(FromKapsule); - - function FromKapsule() { - var _this; - - _classCallCheck(this, FromKapsule); - - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - _this = _super.call.apply(_super, [this].concat(args)); - _this.__kapsuleInstance = kapsule().apply(void 0, [].concat(_toConsumableArray$1(initKapsuleWithSelf ? [_assertThisInitialized$1(_this)] : []), args)); - return _this; - } - - return FromKapsule; - }(baseClass); // attach kapsule props/methods to class prototype - - - Object.keys(kapsule()).forEach(function (m) { - return FromKapsule.prototype[m] = function () { - var _this$__kapsuleInstan; - - var returnVal = (_this$__kapsuleInstan = this.__kapsuleInstance)[m].apply(_this$__kapsuleInstan, arguments); - - return returnVal === this.__kapsuleInstance ? this // chain based on this class, not the kapsule obj - : returnVal; - }; - }); - return FromKapsule; - } - - var three$2 = window.THREE ? window.THREE : { - Group: Group$1 - }; // Prefer consumption from global THREE, if exists - var threeForcegraph = fromKapsule(ForceGraph, three$2.Group, true); - - var TrackballControls = function ( object, domElement ) { - - if ( domElement === undefined ) console.warn( 'THREE.TrackballControls: The second parameter "domElement" is now mandatory.' ); - if ( domElement === document ) console.error( 'THREE.TrackballControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.' ); - - var scope = this; - var STATE = { NONE: - 1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4 }; - - this.object = object; - this.domElement = domElement; - - // API - - this.enabled = true; - - this.screen = { left: 0, top: 0, width: 0, height: 0 }; - - this.rotateSpeed = 1.0; - this.zoomSpeed = 1.2; - this.panSpeed = 0.3; - - this.noRotate = false; - this.noZoom = false; - this.noPan = false; - - this.staticMoving = false; - this.dynamicDampingFactor = 0.2; - - this.minDistance = 0; - this.maxDistance = Infinity; - - this.keys = [ 65 /*A*/, 83 /*S*/, 68 /*D*/ ]; - - this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.ZOOM, RIGHT: MOUSE.PAN }; - - // internals - - this.target = new Vector3(); - - var EPS = 0.000001; - - var lastPosition = new Vector3(); - var lastZoom = 1; - - var _state = STATE.NONE, - _keyState = STATE.NONE, - - _eye = new Vector3(), - - _movePrev = new Vector2(), - _moveCurr = new Vector2(), - - _lastAxis = new Vector3(), - _lastAngle = 0, - - _zoomStart = new Vector2(), - _zoomEnd = new Vector2(), - - _touchZoomDistanceStart = 0, - _touchZoomDistanceEnd = 0, - - _panStart = new Vector2(), - _panEnd = new Vector2(); - - // for reset - - this.target0 = this.target.clone(); - this.position0 = this.object.position.clone(); - this.up0 = this.object.up.clone(); - this.zoom0 = this.object.zoom; - - // events - - var changeEvent = { type: 'change' }; - var startEvent = { type: 'start' }; - var endEvent = { type: 'end' }; - - - // methods - - this.handleResize = function () { - - var box = scope.domElement.getBoundingClientRect(); - // adjustments come from similar code in the jquery offset() function - var d = scope.domElement.ownerDocument.documentElement; - scope.screen.left = box.left + window.pageXOffset - d.clientLeft; - scope.screen.top = box.top + window.pageYOffset - d.clientTop; - scope.screen.width = box.width; - scope.screen.height = box.height; - - }; - - var getMouseOnScreen = ( function () { - - var vector = new Vector2(); - - return function getMouseOnScreen( pageX, pageY ) { - - vector.set( - ( pageX - scope.screen.left ) / scope.screen.width, - ( pageY - scope.screen.top ) / scope.screen.height - ); - - return vector; - - }; - - }() ); - - var getMouseOnCircle = ( function () { - - var vector = new Vector2(); - - return function getMouseOnCircle( pageX, pageY ) { - - vector.set( - ( ( pageX - scope.screen.width * 0.5 - scope.screen.left ) / ( scope.screen.width * 0.5 ) ), - ( ( scope.screen.height + 2 * ( scope.screen.top - pageY ) ) / scope.screen.width ) // screen.width intentional - ); - - return vector; - - }; - - }() ); - - this.rotateCamera = ( function () { - - var axis = new Vector3(), - quaternion = new Quaternion(), - eyeDirection = new Vector3(), - objectUpDirection = new Vector3(), - objectSidewaysDirection = new Vector3(), - moveDirection = new Vector3(), - angle; - - return function rotateCamera() { - - moveDirection.set( _moveCurr.x - _movePrev.x, _moveCurr.y - _movePrev.y, 0 ); - angle = moveDirection.length(); - - if ( angle ) { - - _eye.copy( scope.object.position ).sub( scope.target ); - - eyeDirection.copy( _eye ).normalize(); - objectUpDirection.copy( scope.object.up ).normalize(); - objectSidewaysDirection.crossVectors( objectUpDirection, eyeDirection ).normalize(); - - objectUpDirection.setLength( _moveCurr.y - _movePrev.y ); - objectSidewaysDirection.setLength( _moveCurr.x - _movePrev.x ); - - moveDirection.copy( objectUpDirection.add( objectSidewaysDirection ) ); - - axis.crossVectors( moveDirection, _eye ).normalize(); - - angle *= scope.rotateSpeed; - quaternion.setFromAxisAngle( axis, angle ); - - _eye.applyQuaternion( quaternion ); - scope.object.up.applyQuaternion( quaternion ); - - _lastAxis.copy( axis ); - _lastAngle = angle; - - } else if ( ! scope.staticMoving && _lastAngle ) { - - _lastAngle *= Math.sqrt( 1.0 - scope.dynamicDampingFactor ); - _eye.copy( scope.object.position ).sub( scope.target ); - quaternion.setFromAxisAngle( _lastAxis, _lastAngle ); - _eye.applyQuaternion( quaternion ); - scope.object.up.applyQuaternion( quaternion ); - - } - - _movePrev.copy( _moveCurr ); - - }; - - }() ); - - - this.zoomCamera = function () { - - var factor; - - if ( _state === STATE.TOUCH_ZOOM_PAN ) { - - factor = _touchZoomDistanceStart / _touchZoomDistanceEnd; - _touchZoomDistanceStart = _touchZoomDistanceEnd; - - if ( scope.object.isPerspectiveCamera ) { - - _eye.multiplyScalar( factor ); - - } else if ( scope.object.isOrthographicCamera ) { - - scope.object.zoom *= factor; - scope.object.updateProjectionMatrix(); - - } else { - - console.warn( 'THREE.TrackballControls: Unsupported camera type' ); - - } - - } else { - - factor = 1.0 + ( _zoomEnd.y - _zoomStart.y ) * scope.zoomSpeed; - - if ( factor !== 1.0 && factor > 0.0 ) { - - if ( scope.object.isPerspectiveCamera ) { - - _eye.multiplyScalar( factor ); - - } else if ( scope.object.isOrthographicCamera ) { - - scope.object.zoom /= factor; - scope.object.updateProjectionMatrix(); - - } else { - - console.warn( 'THREE.TrackballControls: Unsupported camera type' ); - - } - - } - - if ( scope.staticMoving ) { - - _zoomStart.copy( _zoomEnd ); - - } else { - - _zoomStart.y += ( _zoomEnd.y - _zoomStart.y ) * this.dynamicDampingFactor; - - } - - } - - }; - - this.panCamera = ( function () { - - var mouseChange = new Vector2(), - objectUp = new Vector3(), - pan = new Vector3(); - - return function panCamera() { - - mouseChange.copy( _panEnd ).sub( _panStart ); - - if ( mouseChange.lengthSq() ) { - - if ( scope.object.isOrthographicCamera ) { - - var scale_x = ( scope.object.right - scope.object.left ) / scope.object.zoom / scope.domElement.clientWidth; - var scale_y = ( scope.object.top - scope.object.bottom ) / scope.object.zoom / scope.domElement.clientWidth; - - mouseChange.x *= scale_x; - mouseChange.y *= scale_y; - - } - - mouseChange.multiplyScalar( _eye.length() * scope.panSpeed ); - - pan.copy( _eye ).cross( scope.object.up ).setLength( mouseChange.x ); - pan.add( objectUp.copy( scope.object.up ).setLength( mouseChange.y ) ); - - scope.object.position.add( pan ); - scope.target.add( pan ); - - if ( scope.staticMoving ) { - - _panStart.copy( _panEnd ); - - } else { - - _panStart.add( mouseChange.subVectors( _panEnd, _panStart ).multiplyScalar( scope.dynamicDampingFactor ) ); - - } - - } - - }; - - }() ); - - this.checkDistances = function () { - - if ( ! scope.noZoom || ! scope.noPan ) { - - if ( _eye.lengthSq() > scope.maxDistance * scope.maxDistance ) { - - scope.object.position.addVectors( scope.target, _eye.setLength( scope.maxDistance ) ); - _zoomStart.copy( _zoomEnd ); - - } - - if ( _eye.lengthSq() < scope.minDistance * scope.minDistance ) { - - scope.object.position.addVectors( scope.target, _eye.setLength( scope.minDistance ) ); - _zoomStart.copy( _zoomEnd ); - - } - - } - - }; - - this.update = function () { - - _eye.subVectors( scope.object.position, scope.target ); - - if ( ! scope.noRotate ) { - - scope.rotateCamera(); - - } - - if ( ! scope.noZoom ) { - - scope.zoomCamera(); - - } - - if ( ! scope.noPan ) { - - scope.panCamera(); - - } - - scope.object.position.addVectors( scope.target, _eye ); - - if ( scope.object.isPerspectiveCamera ) { - - scope.checkDistances(); - - scope.object.lookAt( scope.target ); - - if ( lastPosition.distanceToSquared( scope.object.position ) > EPS ) { - - scope.dispatchEvent( changeEvent ); - - lastPosition.copy( scope.object.position ); - - } - - } else if ( scope.object.isOrthographicCamera ) { - - scope.object.lookAt( scope.target ); - - if ( lastPosition.distanceToSquared( scope.object.position ) > EPS || lastZoom !== scope.object.zoom ) { - - scope.dispatchEvent( changeEvent ); - - lastPosition.copy( scope.object.position ); - lastZoom = scope.object.zoom; - - } - - } else { - - console.warn( 'THREE.TrackballControls: Unsupported camera type' ); - - } - - }; - - this.reset = function () { - - _state = STATE.NONE; - _keyState = STATE.NONE; - - scope.target.copy( scope.target0 ); - scope.object.position.copy( scope.position0 ); - scope.object.up.copy( scope.up0 ); - scope.object.zoom = scope.zoom0; - - scope.object.updateProjectionMatrix(); - - _eye.subVectors( scope.object.position, scope.target ); - - scope.object.lookAt( scope.target ); - - scope.dispatchEvent( changeEvent ); - - lastPosition.copy( scope.object.position ); - lastZoom = scope.object.zoom; - - }; - - // listeners - - function onPointerDown( event ) { - - if ( scope.enabled === false ) return; - - switch ( event.pointerType ) { - - case 'mouse': - case 'pen': - onMouseDown( event ); - break; - - // TODO touch - - } - - } - - function onPointerMove( event ) { - - if ( scope.enabled === false ) return; - - switch ( event.pointerType ) { - - case 'mouse': - case 'pen': - onMouseMove( event ); - break; - - // TODO touch - - } - - } - - function onPointerUp( event ) { - - if ( scope.enabled === false ) return; - - switch ( event.pointerType ) { - - case 'mouse': - case 'pen': - onMouseUp( event ); - break; - - // TODO touch - - } - - } - - function keydown( event ) { - - if ( scope.enabled === false ) return; - - window.removeEventListener( 'keydown', keydown ); - - if ( _keyState !== STATE.NONE ) { - - return; - - } else if ( event.keyCode === scope.keys[ STATE.ROTATE ] && ! scope.noRotate ) { - - _keyState = STATE.ROTATE; - - } else if ( event.keyCode === scope.keys[ STATE.ZOOM ] && ! scope.noZoom ) { - - _keyState = STATE.ZOOM; - - } else if ( event.keyCode === scope.keys[ STATE.PAN ] && ! scope.noPan ) { - - _keyState = STATE.PAN; - - } - - } - - function keyup() { - - if ( scope.enabled === false ) return; - - _keyState = STATE.NONE; - - window.addEventListener( 'keydown', keydown, false ); - - } - - function onMouseDown( event ) { - - event.preventDefault(); - event.stopPropagation(); - - if ( _state === STATE.NONE ) { - - switch ( event.button ) { - - case scope.mouseButtons.LEFT: - _state = STATE.ROTATE; - break; - - case scope.mouseButtons.MIDDLE: - _state = STATE.ZOOM; - break; - - case scope.mouseButtons.RIGHT: - _state = STATE.PAN; - break; - - default: - _state = STATE.NONE; - - } - - } - - var state = ( _keyState !== STATE.NONE ) ? _keyState : _state; - - if ( state === STATE.ROTATE && ! scope.noRotate ) { - - _moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) ); - _movePrev.copy( _moveCurr ); - - } else if ( state === STATE.ZOOM && ! scope.noZoom ) { - - _zoomStart.copy( getMouseOnScreen( event.pageX, event.pageY ) ); - _zoomEnd.copy( _zoomStart ); - - } else if ( state === STATE.PAN && ! scope.noPan ) { - - _panStart.copy( getMouseOnScreen( event.pageX, event.pageY ) ); - _panEnd.copy( _panStart ); - - } - - scope.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove, false ); - scope.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp, false ); - - scope.dispatchEvent( startEvent ); - - } - - function onMouseMove( event ) { - - if ( scope.enabled === false ) return; - - event.preventDefault(); - event.stopPropagation(); - - var state = ( _keyState !== STATE.NONE ) ? _keyState : _state; - - if ( state === STATE.ROTATE && ! scope.noRotate ) { - - _movePrev.copy( _moveCurr ); - _moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) ); - - } else if ( state === STATE.ZOOM && ! scope.noZoom ) { - - _zoomEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) ); - - } else if ( state === STATE.PAN && ! scope.noPan ) { - - _panEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) ); - - } - - } - - function onMouseUp( event ) { - - if ( scope.enabled === false ) return; - - event.preventDefault(); - event.stopPropagation(); - - _state = STATE.NONE; - - scope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove ); - scope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp ); - - scope.dispatchEvent( endEvent ); - - } - - function mousewheel( event ) { - - if ( scope.enabled === false ) return; - - if ( scope.noZoom === true ) return; - - event.preventDefault(); - event.stopPropagation(); - - switch ( event.deltaMode ) { - - case 2: - // Zoom in pages - _zoomStart.y -= event.deltaY * 0.025; - break; - - case 1: - // Zoom in lines - _zoomStart.y -= event.deltaY * 0.01; - break; - - default: - // undefined, 0, assume pixels - _zoomStart.y -= event.deltaY * 0.00025; - break; - - } - - scope.dispatchEvent( startEvent ); - scope.dispatchEvent( endEvent ); - - } - - function touchstart( event ) { - - if ( scope.enabled === false ) return; - - event.preventDefault(); - - switch ( event.touches.length ) { - - case 1: - _state = STATE.TOUCH_ROTATE; - _moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) ); - _movePrev.copy( _moveCurr ); - break; - - default: // 2 or more - _state = STATE.TOUCH_ZOOM_PAN; - var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; - var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; - _touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy ); - - var x = ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ) / 2; - var y = ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ) / 2; - _panStart.copy( getMouseOnScreen( x, y ) ); - _panEnd.copy( _panStart ); - break; - - } - - scope.dispatchEvent( startEvent ); - - } - - function touchmove( event ) { - - if ( scope.enabled === false ) return; - - event.preventDefault(); - event.stopPropagation(); - - switch ( event.touches.length ) { - - case 1: - _movePrev.copy( _moveCurr ); - _moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) ); - break; - - default: // 2 or more - var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; - var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; - _touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy ); - - var x = ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ) / 2; - var y = ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ) / 2; - _panEnd.copy( getMouseOnScreen( x, y ) ); - break; - - } - - } - - function touchend( event ) { - - if ( scope.enabled === false ) return; - - switch ( event.touches.length ) { - - case 0: - _state = STATE.NONE; - break; - - case 1: - _state = STATE.TOUCH_ROTATE; - _moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) ); - _movePrev.copy( _moveCurr ); - break; - - } - - scope.dispatchEvent( endEvent ); - - } - - function contextmenu( event ) { - - if ( scope.enabled === false ) return; - - event.preventDefault(); - - } - - this.dispose = function () { - - scope.domElement.removeEventListener( 'contextmenu', contextmenu, false ); - - scope.domElement.removeEventListener( 'pointerdown', onPointerDown, false ); - scope.domElement.removeEventListener( 'wheel', mousewheel, false ); - - scope.domElement.removeEventListener( 'touchstart', touchstart, false ); - scope.domElement.removeEventListener( 'touchend', touchend, false ); - scope.domElement.removeEventListener( 'touchmove', touchmove, false ); - - scope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove, false ); - scope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp, false ); - - window.removeEventListener( 'keydown', keydown, false ); - window.removeEventListener( 'keyup', keyup, false ); - - }; - - this.domElement.addEventListener( 'contextmenu', contextmenu, false ); - - this.domElement.addEventListener( 'pointerdown', onPointerDown, false ); - this.domElement.addEventListener( 'wheel', mousewheel, false ); - - this.domElement.addEventListener( 'touchstart', touchstart, false ); - this.domElement.addEventListener( 'touchend', touchend, false ); - this.domElement.addEventListener( 'touchmove', touchmove, false ); - - this.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove, false ); - this.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp, false ); - - window.addEventListener( 'keydown', keydown, false ); - window.addEventListener( 'keyup', keyup, false ); - - this.handleResize(); - - // force an update at start - this.update(); - - }; - - TrackballControls.prototype = Object.create( EventDispatcher.prototype ); - TrackballControls.prototype.constructor = TrackballControls; - - // This set of controls performs orbiting, dollying (zooming), and panning. - // Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default). - // - // Orbit - left mouse / touch: one-finger move - // Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish - // Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move - - var OrbitControls = function ( object, domElement ) { - - if ( domElement === undefined ) console.warn( 'THREE.OrbitControls: The second parameter "domElement" is now mandatory.' ); - if ( domElement === document ) console.error( 'THREE.OrbitControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.' ); - - this.object = object; - this.domElement = domElement; - - // Set to false to disable this control - this.enabled = true; - - // "target" sets the location of focus, where the object orbits around - this.target = new Vector3(); - - // How far you can dolly in and out ( PerspectiveCamera only ) - this.minDistance = 0; - this.maxDistance = Infinity; - - // How far you can zoom in and out ( OrthographicCamera only ) - this.minZoom = 0; - this.maxZoom = Infinity; - - // How far you can orbit vertically, upper and lower limits. - // Range is 0 to Math.PI radians. - this.minPolarAngle = 0; // radians - this.maxPolarAngle = Math.PI; // radians - - // How far you can orbit horizontally, upper and lower limits. - // If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI ) - this.minAzimuthAngle = - Infinity; // radians - this.maxAzimuthAngle = Infinity; // radians - - // Set to true to enable damping (inertia) - // If damping is enabled, you must call controls.update() in your animation loop - this.enableDamping = false; - this.dampingFactor = 0.05; - - // This option actually enables dollying in and out; left as "zoom" for backwards compatibility. - // Set to false to disable zooming - this.enableZoom = true; - this.zoomSpeed = 1.0; - - // Set to false to disable rotating - this.enableRotate = true; - this.rotateSpeed = 1.0; - - // Set to false to disable panning - this.enablePan = true; - this.panSpeed = 1.0; - this.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up - this.keyPanSpeed = 7.0; // pixels moved per arrow key push - - // Set to true to automatically rotate around the target - // If auto-rotate is enabled, you must call controls.update() in your animation loop - this.autoRotate = false; - this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60 - - // Set to false to disable use of the keys - this.enableKeys = true; - - // The four arrow keys - this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 }; - - // Mouse buttons - this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN }; - - // Touch fingers - this.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN }; - - // for reset - this.target0 = this.target.clone(); - this.position0 = this.object.position.clone(); - this.zoom0 = this.object.zoom; - - // - // public methods - // - - this.getPolarAngle = function () { - - return spherical.phi; - - }; - - this.getAzimuthalAngle = function () { - - return spherical.theta; - - }; - - this.saveState = function () { - - scope.target0.copy( scope.target ); - scope.position0.copy( scope.object.position ); - scope.zoom0 = scope.object.zoom; - - }; - - this.reset = function () { - - scope.target.copy( scope.target0 ); - scope.object.position.copy( scope.position0 ); - scope.object.zoom = scope.zoom0; - - scope.object.updateProjectionMatrix(); - scope.dispatchEvent( changeEvent ); - - scope.update(); - - state = STATE.NONE; - - }; - - // this method is exposed, but perhaps it would be better if we can make it private... - this.update = function () { - - var offset = new Vector3(); - - // so camera.up is the orbit axis - var quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) ); - var quatInverse = quat.clone().invert(); - - var lastPosition = new Vector3(); - var lastQuaternion = new Quaternion(); - - var twoPI = 2 * Math.PI; - - return function update() { - - var position = scope.object.position; - - offset.copy( position ).sub( scope.target ); - - // rotate offset to "y-axis-is-up" space - offset.applyQuaternion( quat ); - - // angle from z-axis around y-axis - spherical.setFromVector3( offset ); - - if ( scope.autoRotate && state === STATE.NONE ) { - - rotateLeft( getAutoRotationAngle() ); - - } - - if ( scope.enableDamping ) { - - spherical.theta += sphericalDelta.theta * scope.dampingFactor; - spherical.phi += sphericalDelta.phi * scope.dampingFactor; - - } else { - - spherical.theta += sphericalDelta.theta; - spherical.phi += sphericalDelta.phi; - - } - - // restrict theta to be between desired limits - - var min = scope.minAzimuthAngle; - var max = scope.maxAzimuthAngle; - - if ( isFinite( min ) && isFinite( max ) ) { - - if ( min < - Math.PI ) min += twoPI; else if ( min > Math.PI ) min -= twoPI; - - if ( max < - Math.PI ) max += twoPI; else if ( max > Math.PI ) max -= twoPI; - - if ( min <= max ) { - - spherical.theta = Math.max( min, Math.min( max, spherical.theta ) ); - - } else { - - spherical.theta = ( spherical.theta > ( min + max ) / 2 ) ? - Math.max( min, spherical.theta ) : - Math.min( max, spherical.theta ); - - } - - } - - // restrict phi to be between desired limits - spherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) ); - - spherical.makeSafe(); - - - spherical.radius *= scale; - - // restrict radius to be between desired limits - spherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) ); - - // move target to panned location - - if ( scope.enableDamping === true ) { - - scope.target.addScaledVector( panOffset, scope.dampingFactor ); - - } else { - - scope.target.add( panOffset ); - - } - - offset.setFromSpherical( spherical ); - - // rotate offset back to "camera-up-vector-is-up" space - offset.applyQuaternion( quatInverse ); - - position.copy( scope.target ).add( offset ); - - scope.object.lookAt( scope.target ); - - if ( scope.enableDamping === true ) { - - sphericalDelta.theta *= ( 1 - scope.dampingFactor ); - sphericalDelta.phi *= ( 1 - scope.dampingFactor ); - - panOffset.multiplyScalar( 1 - scope.dampingFactor ); - - } else { - - sphericalDelta.set( 0, 0, 0 ); - - panOffset.set( 0, 0, 0 ); - - } - - scale = 1; - - // update condition is: - // min(camera displacement, camera rotation in radians)^2 > EPS - // using small-angle approximation cos(x/2) = 1 - x^2 / 8 - - if ( zoomChanged || - lastPosition.distanceToSquared( scope.object.position ) > EPS || - 8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) { - - scope.dispatchEvent( changeEvent ); - - lastPosition.copy( scope.object.position ); - lastQuaternion.copy( scope.object.quaternion ); - zoomChanged = false; - - return true; - - } - - return false; - - }; - - }(); - - this.dispose = function () { - - scope.domElement.removeEventListener( 'contextmenu', onContextMenu, false ); - - scope.domElement.removeEventListener( 'pointerdown', onPointerDown, false ); - scope.domElement.removeEventListener( 'wheel', onMouseWheel, false ); - - scope.domElement.removeEventListener( 'touchstart', onTouchStart, false ); - scope.domElement.removeEventListener( 'touchend', onTouchEnd, false ); - scope.domElement.removeEventListener( 'touchmove', onTouchMove, false ); - - scope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove, false ); - scope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp, false ); - - scope.domElement.removeEventListener( 'keydown', onKeyDown, false ); - - //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here? - - }; - - // - // internals - // - - var scope = this; - - var changeEvent = { type: 'change' }; - var startEvent = { type: 'start' }; - var endEvent = { type: 'end' }; - - var STATE = { - NONE: - 1, - ROTATE: 0, - DOLLY: 1, - PAN: 2, - TOUCH_ROTATE: 3, - TOUCH_PAN: 4, - TOUCH_DOLLY_PAN: 5, - TOUCH_DOLLY_ROTATE: 6 - }; - - var state = STATE.NONE; - - var EPS = 0.000001; - - // current position in spherical coordinates - var spherical = new Spherical(); - var sphericalDelta = new Spherical(); - - var scale = 1; - var panOffset = new Vector3(); - var zoomChanged = false; - - var rotateStart = new Vector2(); - var rotateEnd = new Vector2(); - var rotateDelta = new Vector2(); - - var panStart = new Vector2(); - var panEnd = new Vector2(); - var panDelta = new Vector2(); - - var dollyStart = new Vector2(); - var dollyEnd = new Vector2(); - var dollyDelta = new Vector2(); - - function getAutoRotationAngle() { - - return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed; - - } - - function getZoomScale() { - - return Math.pow( 0.95, scope.zoomSpeed ); - - } - - function rotateLeft( angle ) { - - sphericalDelta.theta -= angle; - - } - - function rotateUp( angle ) { - - sphericalDelta.phi -= angle; - - } - - var panLeft = function () { - - var v = new Vector3(); - - return function panLeft( distance, objectMatrix ) { - - v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix - v.multiplyScalar( - distance ); - - panOffset.add( v ); - - }; - - }(); - - var panUp = function () { - - var v = new Vector3(); - - return function panUp( distance, objectMatrix ) { - - if ( scope.screenSpacePanning === true ) { - - v.setFromMatrixColumn( objectMatrix, 1 ); - - } else { - - v.setFromMatrixColumn( objectMatrix, 0 ); - v.crossVectors( scope.object.up, v ); - - } - - v.multiplyScalar( distance ); - - panOffset.add( v ); - - }; - - }(); - - // deltaX and deltaY are in pixels; right and down are positive - var pan = function () { - - var offset = new Vector3(); - - return function pan( deltaX, deltaY ) { - - var element = scope.domElement; - - if ( scope.object.isPerspectiveCamera ) { - - // perspective - var position = scope.object.position; - offset.copy( position ).sub( scope.target ); - var targetDistance = offset.length(); - - // half of the fov is center to top of screen - targetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 ); - - // we use only clientHeight here so aspect ratio does not distort speed - panLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix ); - panUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix ); - - } else if ( scope.object.isOrthographicCamera ) { - - // orthographic - panLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix ); - panUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix ); - - } else { - - // camera neither orthographic nor perspective - console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' ); - scope.enablePan = false; - - } - - }; - - }(); - - function dollyOut( dollyScale ) { - - if ( scope.object.isPerspectiveCamera ) { - - scale /= dollyScale; - - } else if ( scope.object.isOrthographicCamera ) { - - scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) ); - scope.object.updateProjectionMatrix(); - zoomChanged = true; - - } else { - - console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' ); - scope.enableZoom = false; - - } - - } - - function dollyIn( dollyScale ) { - - if ( scope.object.isPerspectiveCamera ) { - - scale *= dollyScale; - - } else if ( scope.object.isOrthographicCamera ) { - - scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) ); - scope.object.updateProjectionMatrix(); - zoomChanged = true; - - } else { - - console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' ); - scope.enableZoom = false; - - } - - } - - // - // event callbacks - update the object state - // - - function handleMouseDownRotate( event ) { - - rotateStart.set( event.clientX, event.clientY ); - - } - - function handleMouseDownDolly( event ) { - - dollyStart.set( event.clientX, event.clientY ); - - } - - function handleMouseDownPan( event ) { - - panStart.set( event.clientX, event.clientY ); - - } - - function handleMouseMoveRotate( event ) { - - rotateEnd.set( event.clientX, event.clientY ); - - rotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed ); - - var element = scope.domElement; - - rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height - - rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight ); - - rotateStart.copy( rotateEnd ); - - scope.update(); - - } - - function handleMouseMoveDolly( event ) { - - dollyEnd.set( event.clientX, event.clientY ); - - dollyDelta.subVectors( dollyEnd, dollyStart ); - - if ( dollyDelta.y > 0 ) { - - dollyOut( getZoomScale() ); - - } else if ( dollyDelta.y < 0 ) { - - dollyIn( getZoomScale() ); - - } - - dollyStart.copy( dollyEnd ); - - scope.update(); - - } - - function handleMouseMovePan( event ) { - - panEnd.set( event.clientX, event.clientY ); - - panDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed ); - - pan( panDelta.x, panDelta.y ); - - panStart.copy( panEnd ); - - scope.update(); - - } - - function handleMouseWheel( event ) { - - if ( event.deltaY < 0 ) { - - dollyIn( getZoomScale() ); - - } else if ( event.deltaY > 0 ) { - - dollyOut( getZoomScale() ); - - } - - scope.update(); - - } - - function handleKeyDown( event ) { - - var needsUpdate = false; - - switch ( event.keyCode ) { - - case scope.keys.UP: - pan( 0, scope.keyPanSpeed ); - needsUpdate = true; - break; - - case scope.keys.BOTTOM: - pan( 0, - scope.keyPanSpeed ); - needsUpdate = true; - break; - - case scope.keys.LEFT: - pan( scope.keyPanSpeed, 0 ); - needsUpdate = true; - break; - - case scope.keys.RIGHT: - pan( - scope.keyPanSpeed, 0 ); - needsUpdate = true; - break; - - } - - if ( needsUpdate ) { - - // prevent the browser from scrolling on cursor keys - event.preventDefault(); - - scope.update(); - - } - - - } - - function handleTouchStartRotate( event ) { - - if ( event.touches.length == 1 ) { - - rotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); - - } else { - - var x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ); - var y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ); - - rotateStart.set( x, y ); - - } - - } - - function handleTouchStartPan( event ) { - - if ( event.touches.length == 1 ) { - - panStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); - - } else { - - var x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ); - var y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ); - - panStart.set( x, y ); - - } - - } - - function handleTouchStartDolly( event ) { - - var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; - var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; - - var distance = Math.sqrt( dx * dx + dy * dy ); - - dollyStart.set( 0, distance ); - - } - - function handleTouchStartDollyPan( event ) { - - if ( scope.enableZoom ) handleTouchStartDolly( event ); - - if ( scope.enablePan ) handleTouchStartPan( event ); - - } - - function handleTouchStartDollyRotate( event ) { - - if ( scope.enableZoom ) handleTouchStartDolly( event ); - - if ( scope.enableRotate ) handleTouchStartRotate( event ); - - } - - function handleTouchMoveRotate( event ) { - - if ( event.touches.length == 1 ) { - - rotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); - - } else { - - var x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ); - var y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ); - - rotateEnd.set( x, y ); - - } - - rotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed ); - - var element = scope.domElement; - - rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height - - rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight ); - - rotateStart.copy( rotateEnd ); - - } - - function handleTouchMovePan( event ) { - - if ( event.touches.length == 1 ) { - - panEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); - - } else { - - var x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ); - var y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ); - - panEnd.set( x, y ); - - } - - panDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed ); - - pan( panDelta.x, panDelta.y ); - - panStart.copy( panEnd ); - - } - - function handleTouchMoveDolly( event ) { - - var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; - var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; - - var distance = Math.sqrt( dx * dx + dy * dy ); - - dollyEnd.set( 0, distance ); - - dollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) ); - - dollyOut( dollyDelta.y ); - - dollyStart.copy( dollyEnd ); - - } - - function handleTouchMoveDollyPan( event ) { - - if ( scope.enableZoom ) handleTouchMoveDolly( event ); - - if ( scope.enablePan ) handleTouchMovePan( event ); - - } - - function handleTouchMoveDollyRotate( event ) { - - if ( scope.enableZoom ) handleTouchMoveDolly( event ); - - if ( scope.enableRotate ) handleTouchMoveRotate( event ); - - } - - // - // event handlers - FSM: listen for events and reset state - // - - function onPointerDown( event ) { - - if ( scope.enabled === false ) return; - - switch ( event.pointerType ) { - - case 'mouse': - case 'pen': - onMouseDown( event ); - break; - - // TODO touch - - } - - } - - function onPointerMove( event ) { - - if ( scope.enabled === false ) return; - - switch ( event.pointerType ) { - - case 'mouse': - case 'pen': - onMouseMove( event ); - break; - - // TODO touch - - } - - } - - function onPointerUp( event ) { - - switch ( event.pointerType ) { - - case 'mouse': - case 'pen': - onMouseUp(); - break; - - // TODO touch - - } - - } - - function onMouseDown( event ) { - - // Prevent the browser from scrolling. - event.preventDefault(); - - // Manually set the focus since calling preventDefault above - // prevents the browser from setting it automatically. - - scope.domElement.focus ? scope.domElement.focus() : window.focus(); - - var mouseAction; - - switch ( event.button ) { - - case 0: - - mouseAction = scope.mouseButtons.LEFT; - break; - - case 1: - - mouseAction = scope.mouseButtons.MIDDLE; - break; - - case 2: - - mouseAction = scope.mouseButtons.RIGHT; - break; - - default: - - mouseAction = - 1; - - } - - switch ( mouseAction ) { - - case MOUSE.DOLLY: - - if ( scope.enableZoom === false ) return; - - handleMouseDownDolly( event ); - - state = STATE.DOLLY; - - break; - - case MOUSE.ROTATE: - - if ( event.ctrlKey || event.metaKey || event.shiftKey ) { - - if ( scope.enablePan === false ) return; - - handleMouseDownPan( event ); - - state = STATE.PAN; - - } else { - - if ( scope.enableRotate === false ) return; - - handleMouseDownRotate( event ); - - state = STATE.ROTATE; - - } - - break; - - case MOUSE.PAN: - - if ( event.ctrlKey || event.metaKey || event.shiftKey ) { - - if ( scope.enableRotate === false ) return; - - handleMouseDownRotate( event ); - - state = STATE.ROTATE; - - } else { - - if ( scope.enablePan === false ) return; - - handleMouseDownPan( event ); - - state = STATE.PAN; - - } - - break; - - default: - - state = STATE.NONE; - - } - - if ( state !== STATE.NONE ) { - - scope.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove, false ); - scope.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp, false ); - - scope.dispatchEvent( startEvent ); - - } - - } - - function onMouseMove( event ) { - - if ( scope.enabled === false ) return; - - event.preventDefault(); - - switch ( state ) { - - case STATE.ROTATE: - - if ( scope.enableRotate === false ) return; - - handleMouseMoveRotate( event ); - - break; - - case STATE.DOLLY: - - if ( scope.enableZoom === false ) return; - - handleMouseMoveDolly( event ); - - break; - - case STATE.PAN: - - if ( scope.enablePan === false ) return; - - handleMouseMovePan( event ); - - break; - - } - - } - - function onMouseUp( event ) { - - scope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove, false ); - scope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp, false ); - - if ( scope.enabled === false ) return; - - scope.dispatchEvent( endEvent ); - - state = STATE.NONE; - - } - - function onMouseWheel( event ) { - - if ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return; - - event.preventDefault(); - event.stopPropagation(); - - scope.dispatchEvent( startEvent ); - - handleMouseWheel( event ); - - scope.dispatchEvent( endEvent ); - - } - - function onKeyDown( event ) { - - if ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return; - - handleKeyDown( event ); - - } - - function onTouchStart( event ) { - - if ( scope.enabled === false ) return; - - event.preventDefault(); // prevent scrolling - - switch ( event.touches.length ) { - - case 1: - - switch ( scope.touches.ONE ) { - - case TOUCH.ROTATE: - - if ( scope.enableRotate === false ) return; - - handleTouchStartRotate( event ); - - state = STATE.TOUCH_ROTATE; - - break; - - case TOUCH.PAN: - - if ( scope.enablePan === false ) return; - - handleTouchStartPan( event ); - - state = STATE.TOUCH_PAN; - - break; - - default: - - state = STATE.NONE; - - } - - break; - - case 2: - - switch ( scope.touches.TWO ) { - - case TOUCH.DOLLY_PAN: - - if ( scope.enableZoom === false && scope.enablePan === false ) return; - - handleTouchStartDollyPan( event ); - - state = STATE.TOUCH_DOLLY_PAN; - - break; - - case TOUCH.DOLLY_ROTATE: - - if ( scope.enableZoom === false && scope.enableRotate === false ) return; - - handleTouchStartDollyRotate( event ); - - state = STATE.TOUCH_DOLLY_ROTATE; - - break; - - default: - - state = STATE.NONE; - - } - - break; - - default: - - state = STATE.NONE; - - } - - if ( state !== STATE.NONE ) { - - scope.dispatchEvent( startEvent ); - - } - - } - - function onTouchMove( event ) { - - if ( scope.enabled === false ) return; - - event.preventDefault(); // prevent scrolling - event.stopPropagation(); - - switch ( state ) { - - case STATE.TOUCH_ROTATE: - - if ( scope.enableRotate === false ) return; - - handleTouchMoveRotate( event ); - - scope.update(); - - break; - - case STATE.TOUCH_PAN: - - if ( scope.enablePan === false ) return; - - handleTouchMovePan( event ); - - scope.update(); - - break; - - case STATE.TOUCH_DOLLY_PAN: - - if ( scope.enableZoom === false && scope.enablePan === false ) return; - - handleTouchMoveDollyPan( event ); - - scope.update(); - - break; - - case STATE.TOUCH_DOLLY_ROTATE: - - if ( scope.enableZoom === false && scope.enableRotate === false ) return; - - handleTouchMoveDollyRotate( event ); - - scope.update(); - - break; - - default: - - state = STATE.NONE; - - } - - } - - function onTouchEnd( event ) { - - if ( scope.enabled === false ) return; - - scope.dispatchEvent( endEvent ); - - state = STATE.NONE; - - } - - function onContextMenu( event ) { - - if ( scope.enabled === false ) return; - - event.preventDefault(); - - } - - // - - scope.domElement.addEventListener( 'contextmenu', onContextMenu, false ); - - scope.domElement.addEventListener( 'pointerdown', onPointerDown, false ); - scope.domElement.addEventListener( 'wheel', onMouseWheel, false ); - - scope.domElement.addEventListener( 'touchstart', onTouchStart, false ); - scope.domElement.addEventListener( 'touchend', onTouchEnd, false ); - scope.domElement.addEventListener( 'touchmove', onTouchMove, false ); - - scope.domElement.addEventListener( 'keydown', onKeyDown, false ); - - // force an update at start - - this.update(); - - }; - - OrbitControls.prototype = Object.create( EventDispatcher.prototype ); - OrbitControls.prototype.constructor = OrbitControls; - - - // This set of controls performs orbiting, dollying (zooming), and panning. - // Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default). - // This is very similar to OrbitControls, another set of touch behavior - // - // Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate - // Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish - // Pan - left mouse, or arrow keys / touch: one-finger move - - var MapControls = function ( object, domElement ) { - - OrbitControls.call( this, object, domElement ); - - this.screenSpacePanning = false; // pan orthogonal to world-space direction camera.up - - this.mouseButtons.LEFT = MOUSE.PAN; - this.mouseButtons.RIGHT = MOUSE.ROTATE; - - this.touches.ONE = TOUCH.PAN; - this.touches.TWO = TOUCH.DOLLY_ROTATE; - - }; - - MapControls.prototype = Object.create( EventDispatcher.prototype ); - MapControls.prototype.constructor = MapControls; - - var FlyControls = function ( object, domElement ) { - - if ( domElement === undefined ) { - - console.warn( 'THREE.FlyControls: The second parameter "domElement" is now mandatory.' ); - domElement = document; - - } - - this.object = object; - this.domElement = domElement; - - if ( domElement ) this.domElement.setAttribute( 'tabindex', - 1 ); - - // API - - this.movementSpeed = 1.0; - this.rollSpeed = 0.005; - - this.dragToLook = false; - this.autoForward = false; - - // disable default target object behavior - - // internals - - var scope = this; - var changeEvent = { type: "change" }; - var EPS = 0.000001; - - this.tmpQuaternion = new Quaternion(); - - this.mouseStatus = 0; - - this.moveState = { up: 0, down: 0, left: 0, right: 0, forward: 0, back: 0, pitchUp: 0, pitchDown: 0, yawLeft: 0, yawRight: 0, rollLeft: 0, rollRight: 0 }; - this.moveVector = new Vector3( 0, 0, 0 ); - this.rotationVector = new Vector3( 0, 0, 0 ); - - this.keydown = function ( event ) { - - if ( event.altKey ) { - - return; - - } - - //event.preventDefault(); - - switch ( event.keyCode ) { - - case 16: /* shift */ this.movementSpeedMultiplier = .1; break; - - case 87: /*W*/ this.moveState.forward = 1; break; - case 83: /*S*/ this.moveState.back = 1; break; - - case 65: /*A*/ this.moveState.left = 1; break; - case 68: /*D*/ this.moveState.right = 1; break; - - case 82: /*R*/ this.moveState.up = 1; break; - case 70: /*F*/ this.moveState.down = 1; break; - - case 38: /*up*/ this.moveState.pitchUp = 1; break; - case 40: /*down*/ this.moveState.pitchDown = 1; break; - - case 37: /*left*/ this.moveState.yawLeft = 1; break; - case 39: /*right*/ this.moveState.yawRight = 1; break; - - case 81: /*Q*/ this.moveState.rollLeft = 1; break; - case 69: /*E*/ this.moveState.rollRight = 1; break; - - } - - this.updateMovementVector(); - this.updateRotationVector(); - - }; - - this.keyup = function ( event ) { - - switch ( event.keyCode ) { - - case 16: /* shift */ this.movementSpeedMultiplier = 1; break; - - case 87: /*W*/ this.moveState.forward = 0; break; - case 83: /*S*/ this.moveState.back = 0; break; - - case 65: /*A*/ this.moveState.left = 0; break; - case 68: /*D*/ this.moveState.right = 0; break; - - case 82: /*R*/ this.moveState.up = 0; break; - case 70: /*F*/ this.moveState.down = 0; break; - - case 38: /*up*/ this.moveState.pitchUp = 0; break; - case 40: /*down*/ this.moveState.pitchDown = 0; break; - - case 37: /*left*/ this.moveState.yawLeft = 0; break; - case 39: /*right*/ this.moveState.yawRight = 0; break; - - case 81: /*Q*/ this.moveState.rollLeft = 0; break; - case 69: /*E*/ this.moveState.rollRight = 0; break; - - } - - this.updateMovementVector(); - this.updateRotationVector(); - - }; - - this.mousedown = function ( event ) { - - if ( this.domElement !== document ) { - - this.domElement.focus(); - - } - - event.preventDefault(); - event.stopPropagation(); - - if ( this.dragToLook ) { - - this.mouseStatus ++; - - } else { - - switch ( event.button ) { - - case 0: this.moveState.forward = 1; break; - case 2: this.moveState.back = 1; break; - - } - - this.updateMovementVector(); - - } - - }; - - this.mousemove = function ( event ) { - - if ( ! this.dragToLook || this.mouseStatus > 0 ) { - - var container = this.getContainerDimensions(); - var halfWidth = container.size[ 0 ] / 2; - var halfHeight = container.size[ 1 ] / 2; - - this.moveState.yawLeft = - ( ( event.pageX - container.offset[ 0 ] ) - halfWidth ) / halfWidth; - this.moveState.pitchDown = ( ( event.pageY - container.offset[ 1 ] ) - halfHeight ) / halfHeight; - - this.updateRotationVector(); - - } - - }; - - this.mouseup = function ( event ) { - - event.preventDefault(); - event.stopPropagation(); - - if ( this.dragToLook ) { - - this.mouseStatus --; - - this.moveState.yawLeft = this.moveState.pitchDown = 0; - - } else { - - switch ( event.button ) { - - case 0: this.moveState.forward = 0; break; - case 2: this.moveState.back = 0; break; - - } - - this.updateMovementVector(); - - } - - this.updateRotationVector(); - - }; - - this.update = function () { - - var lastQuaternion = new Quaternion(); - var lastPosition = new Vector3(); - - return function ( delta ) { - - var moveMult = delta * scope.movementSpeed; - var rotMult = delta * scope.rollSpeed; - - scope.object.translateX( scope.moveVector.x * moveMult ); - scope.object.translateY( scope.moveVector.y * moveMult ); - scope.object.translateZ( scope.moveVector.z * moveMult ); - - scope.tmpQuaternion.set( scope.rotationVector.x * rotMult, scope.rotationVector.y * rotMult, scope.rotationVector.z * rotMult, 1 ).normalize(); - scope.object.quaternion.multiply( scope.tmpQuaternion ); - - if ( - lastPosition.distanceToSquared( scope.object.position ) > EPS || - 8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS - ) { - - scope.dispatchEvent( changeEvent ); - lastQuaternion.copy( scope.object.quaternion ); - lastPosition.copy( scope.object.position ); - - } - - }; - - }(); - - this.updateMovementVector = function () { - - var forward = ( this.moveState.forward || ( this.autoForward && ! this.moveState.back ) ) ? 1 : 0; - - this.moveVector.x = ( - this.moveState.left + this.moveState.right ); - this.moveVector.y = ( - this.moveState.down + this.moveState.up ); - this.moveVector.z = ( - forward + this.moveState.back ); - - //console.log( 'move:', [ this.moveVector.x, this.moveVector.y, this.moveVector.z ] ); - - }; - - this.updateRotationVector = function () { - - this.rotationVector.x = ( - this.moveState.pitchDown + this.moveState.pitchUp ); - this.rotationVector.y = ( - this.moveState.yawRight + this.moveState.yawLeft ); - this.rotationVector.z = ( - this.moveState.rollRight + this.moveState.rollLeft ); - - //console.log( 'rotate:', [ this.rotationVector.x, this.rotationVector.y, this.rotationVector.z ] ); - - }; - - this.getContainerDimensions = function () { - - if ( this.domElement != document ) { - - return { - size: [ this.domElement.offsetWidth, this.domElement.offsetHeight ], - offset: [ this.domElement.offsetLeft, this.domElement.offsetTop ] - }; - - } else { - - return { - size: [ window.innerWidth, window.innerHeight ], - offset: [ 0, 0 ] - }; - - } - - }; - - function bind( scope, fn ) { - - return function () { - - fn.apply( scope, arguments ); - - }; - - } - - function contextmenu( event ) { - - event.preventDefault(); - - } - - this.dispose = function () { - - this.domElement.removeEventListener( 'contextmenu', contextmenu, false ); - this.domElement.removeEventListener( 'mousedown', _mousedown, false ); - this.domElement.removeEventListener( 'mousemove', _mousemove, false ); - this.domElement.removeEventListener( 'mouseup', _mouseup, false ); - - window.removeEventListener( 'keydown', _keydown, false ); - window.removeEventListener( 'keyup', _keyup, false ); - - }; - - var _mousemove = bind( this, this.mousemove ); - var _mousedown = bind( this, this.mousedown ); - var _mouseup = bind( this, this.mouseup ); - var _keydown = bind( this, this.keydown ); - var _keyup = bind( this, this.keyup ); - - this.domElement.addEventListener( 'contextmenu', contextmenu, false ); - - this.domElement.addEventListener( 'mousemove', _mousemove, false ); - this.domElement.addEventListener( 'mousedown', _mousedown, false ); - this.domElement.addEventListener( 'mouseup', _mouseup, false ); - - window.addEventListener( 'keydown', _keydown, false ); - window.addEventListener( 'keyup', _keyup, false ); - - this.updateMovementVector(); - this.updateRotationVector(); - - }; - - FlyControls.prototype = Object.create( EventDispatcher.prototype ); - FlyControls.prototype.constructor = FlyControls; - - /** - * Full-screen textured quad shader - */ - - var CopyShader = { - - uniforms: { - - "tDiffuse": { value: null }, - "opacity": { value: 1.0 } - - }, - - vertexShader: [ - - "varying vec2 vUv;", - - "void main() {", - - " vUv = uv;", - " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", - - "}" - - ].join( "\n" ), - - fragmentShader: [ - - "uniform float opacity;", - - "uniform sampler2D tDiffuse;", - - "varying vec2 vUv;", - - "void main() {", - - " vec4 texel = texture2D( tDiffuse, vUv );", - " gl_FragColor = opacity * texel;", - - "}" - - ].join( "\n" ) - - }; - - function Pass$1() { - - // if set to true, the pass is processed by the composer - this.enabled = true; - - // if set to true, the pass indicates to swap read and write buffer after rendering - this.needsSwap = true; - - // if set to true, the pass clears its buffer before rendering - this.clear = false; - - // if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer. - this.renderToScreen = false; - - } - - Object.assign( Pass$1.prototype, { - - setSize: function ( /* width, height */ ) {}, - - render: function ( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) { - - console.error( 'THREE.Pass: .render() must be implemented in derived pass.' ); - - } - - } ); - - // Helper for passes that need to fill the viewport with a single quad. - - // Important: It's actually a hack to put FullScreenQuad into the Pass namespace. This is only - // done to make examples/js code work. Normally, FullScreenQuad should be exported - // from this module like Pass. - - Pass$1.FullScreenQuad = ( function () { - - var camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 ); - var geometry = new PlaneBufferGeometry( 2, 2 ); - - var FullScreenQuad = function ( material ) { - - this._mesh = new Mesh( geometry, material ); - - }; - - Object.defineProperty( FullScreenQuad.prototype, 'material', { - - get: function () { - - return this._mesh.material; - - }, - - set: function ( value ) { - - this._mesh.material = value; - - } - - } ); - - Object.assign( FullScreenQuad.prototype, { - - dispose: function () { - - this._mesh.geometry.dispose(); - - }, - - render: function ( renderer ) { - - renderer.render( this._mesh, camera ); - - } - - } ); - - return FullScreenQuad; - - } )(); - - var ShaderPass = function ( shader, textureID ) { - - Pass$1.call( this ); - - this.textureID = ( textureID !== undefined ) ? textureID : "tDiffuse"; - - if ( shader instanceof ShaderMaterial ) { - - this.uniforms = shader.uniforms; - - this.material = shader; - - } else if ( shader ) { - - this.uniforms = UniformsUtils.clone( shader.uniforms ); - - this.material = new ShaderMaterial( { - - defines: Object.assign( {}, shader.defines ), - uniforms: this.uniforms, - vertexShader: shader.vertexShader, - fragmentShader: shader.fragmentShader - - } ); - - } - - this.fsQuad = new Pass$1.FullScreenQuad( this.material ); - - }; - - ShaderPass.prototype = Object.assign( Object.create( Pass$1.prototype ), { - - constructor: ShaderPass, - - render: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) { - - if ( this.uniforms[ this.textureID ] ) { - - this.uniforms[ this.textureID ].value = readBuffer.texture; - - } - - this.fsQuad.material = this.material; - - if ( this.renderToScreen ) { - - renderer.setRenderTarget( null ); - this.fsQuad.render( renderer ); - - } else { - - renderer.setRenderTarget( writeBuffer ); - // TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600 - if ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil ); - this.fsQuad.render( renderer ); - - } - - } - - } ); - - var MaskPass = function ( scene, camera ) { - - Pass$1.call( this ); - - this.scene = scene; - this.camera = camera; - - this.clear = true; - this.needsSwap = false; - - this.inverse = false; - - }; - - MaskPass.prototype = Object.assign( Object.create( Pass$1.prototype ), { - - constructor: MaskPass, - - render: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) { - - var context = renderer.getContext(); - var state = renderer.state; - - // don't update color or depth - - state.buffers.color.setMask( false ); - state.buffers.depth.setMask( false ); - - // lock buffers - - state.buffers.color.setLocked( true ); - state.buffers.depth.setLocked( true ); - - // set up stencil - - var writeValue, clearValue; - - if ( this.inverse ) { - - writeValue = 0; - clearValue = 1; - - } else { - - writeValue = 1; - clearValue = 0; - - } - - state.buffers.stencil.setTest( true ); - state.buffers.stencil.setOp( context.REPLACE, context.REPLACE, context.REPLACE ); - state.buffers.stencil.setFunc( context.ALWAYS, writeValue, 0xffffffff ); - state.buffers.stencil.setClear( clearValue ); - state.buffers.stencil.setLocked( true ); - - // draw into the stencil buffer - - renderer.setRenderTarget( readBuffer ); - if ( this.clear ) renderer.clear(); - renderer.render( this.scene, this.camera ); - - renderer.setRenderTarget( writeBuffer ); - if ( this.clear ) renderer.clear(); - renderer.render( this.scene, this.camera ); - - // unlock color and depth buffer for subsequent rendering - - state.buffers.color.setLocked( false ); - state.buffers.depth.setLocked( false ); - - // only render where stencil is set to 1 - - state.buffers.stencil.setLocked( false ); - state.buffers.stencil.setFunc( context.EQUAL, 1, 0xffffffff ); // draw if == 1 - state.buffers.stencil.setOp( context.KEEP, context.KEEP, context.KEEP ); - state.buffers.stencil.setLocked( true ); - - } - - } ); - - - var ClearMaskPass = function () { - - Pass$1.call( this ); - - this.needsSwap = false; - - }; - - ClearMaskPass.prototype = Object.create( Pass$1.prototype ); - - Object.assign( ClearMaskPass.prototype, { - - render: function ( renderer /*, writeBuffer, readBuffer, deltaTime, maskActive */ ) { - - renderer.state.buffers.stencil.setLocked( false ); - renderer.state.buffers.stencil.setTest( false ); - - } - - } ); - - var EffectComposer = function ( renderer, renderTarget ) { - - this.renderer = renderer; - - if ( renderTarget === undefined ) { - - var parameters = { - minFilter: LinearFilter, - magFilter: LinearFilter, - format: RGBAFormat - }; - - var size = renderer.getSize( new Vector2() ); - this._pixelRatio = renderer.getPixelRatio(); - this._width = size.width; - this._height = size.height; - - renderTarget = new WebGLRenderTarget( this._width * this._pixelRatio, this._height * this._pixelRatio, parameters ); - renderTarget.texture.name = 'EffectComposer.rt1'; - - } else { - - this._pixelRatio = 1; - this._width = renderTarget.width; - this._height = renderTarget.height; - - } - - this.renderTarget1 = renderTarget; - this.renderTarget2 = renderTarget.clone(); - this.renderTarget2.texture.name = 'EffectComposer.rt2'; - - this.writeBuffer = this.renderTarget1; - this.readBuffer = this.renderTarget2; - - this.renderToScreen = true; - - this.passes = []; - - // dependencies - - if ( CopyShader === undefined ) { - - console.error( 'THREE.EffectComposer relies on CopyShader' ); - - } - - if ( ShaderPass === undefined ) { - - console.error( 'THREE.EffectComposer relies on ShaderPass' ); - - } - - this.copyPass = new ShaderPass( CopyShader ); - - this.clock = new Clock(); - - }; - - Object.assign( EffectComposer.prototype, { - - swapBuffers: function () { - - var tmp = this.readBuffer; - this.readBuffer = this.writeBuffer; - this.writeBuffer = tmp; - - }, - - addPass: function ( pass ) { - - this.passes.push( pass ); - pass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio ); - - }, - - insertPass: function ( pass, index ) { - - this.passes.splice( index, 0, pass ); - pass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio ); - - }, - - removePass: function ( pass ) { - - const index = this.passes.indexOf( pass ); - - if ( index !== - 1 ) { - - this.passes.splice( index, 1 ); - - } - - }, - - isLastEnabledPass: function ( passIndex ) { - - for ( var i = passIndex + 1; i < this.passes.length; i ++ ) { - - if ( this.passes[ i ].enabled ) { - - return false; - - } - - } - - return true; - - }, - - render: function ( deltaTime ) { - - // deltaTime value is in seconds - - if ( deltaTime === undefined ) { - - deltaTime = this.clock.getDelta(); - - } - - var currentRenderTarget = this.renderer.getRenderTarget(); - - var maskActive = false; - - var pass, i, il = this.passes.length; - - for ( i = 0; i < il; i ++ ) { - - pass = this.passes[ i ]; - - if ( pass.enabled === false ) continue; - - pass.renderToScreen = ( this.renderToScreen && this.isLastEnabledPass( i ) ); - pass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive ); - - if ( pass.needsSwap ) { - - if ( maskActive ) { - - var context = this.renderer.getContext(); - var stencil = this.renderer.state.buffers.stencil; - - //context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff ); - stencil.setFunc( context.NOTEQUAL, 1, 0xffffffff ); - - this.copyPass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime ); - - //context.stencilFunc( context.EQUAL, 1, 0xffffffff ); - stencil.setFunc( context.EQUAL, 1, 0xffffffff ); - - } - - this.swapBuffers(); - - } - - if ( MaskPass !== undefined ) { - - if ( pass instanceof MaskPass ) { - - maskActive = true; - - } else if ( pass instanceof ClearMaskPass ) { - - maskActive = false; - - } - - } - - } - - this.renderer.setRenderTarget( currentRenderTarget ); - - }, - - reset: function ( renderTarget ) { - - if ( renderTarget === undefined ) { - - var size = this.renderer.getSize( new Vector2() ); - this._pixelRatio = this.renderer.getPixelRatio(); - this._width = size.width; - this._height = size.height; - - renderTarget = this.renderTarget1.clone(); - renderTarget.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio ); - - } - - this.renderTarget1.dispose(); - this.renderTarget2.dispose(); - this.renderTarget1 = renderTarget; - this.renderTarget2 = renderTarget.clone(); - - this.writeBuffer = this.renderTarget1; - this.readBuffer = this.renderTarget2; - - }, - - setSize: function ( width, height ) { - - this._width = width; - this._height = height; - - var effectiveWidth = this._width * this._pixelRatio; - var effectiveHeight = this._height * this._pixelRatio; - - this.renderTarget1.setSize( effectiveWidth, effectiveHeight ); - this.renderTarget2.setSize( effectiveWidth, effectiveHeight ); - - for ( var i = 0; i < this.passes.length; i ++ ) { - - this.passes[ i ].setSize( effectiveWidth, effectiveHeight ); - - } - - }, - - setPixelRatio: function ( pixelRatio ) { - - this._pixelRatio = pixelRatio; - - this.setSize( this._width, this._height ); - - } - - } ); - - - var Pass = function () { - - // if set to true, the pass is processed by the composer - this.enabled = true; - - // if set to true, the pass indicates to swap read and write buffer after rendering - this.needsSwap = true; - - // if set to true, the pass clears its buffer before rendering - this.clear = false; - - // if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer. - this.renderToScreen = false; - - }; - - Object.assign( Pass.prototype, { - - setSize: function ( /* width, height */ ) {}, - - render: function ( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) { - - console.error( 'THREE.Pass: .render() must be implemented in derived pass.' ); - - } - - } ); - - // Helper for passes that need to fill the viewport with a single quad. - Pass.FullScreenQuad = ( function () { - - var camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 ); - var geometry = new PlaneBufferGeometry( 2, 2 ); - - var FullScreenQuad = function ( material ) { - - this._mesh = new Mesh( geometry, material ); - - }; - - Object.defineProperty( FullScreenQuad.prototype, 'material', { - - get: function () { - - return this._mesh.material; - - }, - - set: function ( value ) { - - this._mesh.material = value; - - } - - } ); - - Object.assign( FullScreenQuad.prototype, { - - dispose: function () { - - this._mesh.geometry.dispose(); - - }, - - render: function ( renderer ) { - - renderer.render( this._mesh, camera ); - - } - - } ); - - return FullScreenQuad; - - } )(); - - var RenderPass = function ( scene, camera, overrideMaterial, clearColor, clearAlpha ) { - - Pass$1.call( this ); - - this.scene = scene; - this.camera = camera; - - this.overrideMaterial = overrideMaterial; - - this.clearColor = clearColor; - this.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0; - - this.clear = true; - this.clearDepth = false; - this.needsSwap = false; - - }; - - RenderPass.prototype = Object.assign( Object.create( Pass$1.prototype ), { - - constructor: RenderPass, - - render: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) { - - var oldAutoClear = renderer.autoClear; - renderer.autoClear = false; - - var oldClearColor, oldClearAlpha, oldOverrideMaterial; - - if ( this.overrideMaterial !== undefined ) { - - oldOverrideMaterial = this.scene.overrideMaterial; - - this.scene.overrideMaterial = this.overrideMaterial; - - } - - if ( this.clearColor ) { - - oldClearColor = renderer.getClearColor().getHex(); - oldClearAlpha = renderer.getClearAlpha(); - - renderer.setClearColor( this.clearColor, this.clearAlpha ); - - } - - if ( this.clearDepth ) { - - renderer.clearDepth(); - - } - - renderer.setRenderTarget( this.renderToScreen ? null : readBuffer ); - - // TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600 - if ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil ); - renderer.render( this.scene, this.camera ); - - if ( this.clearColor ) { - - renderer.setClearColor( oldClearColor, oldClearAlpha ); - - } - - if ( this.overrideMaterial !== undefined ) { - - this.scene.overrideMaterial = oldOverrideMaterial; - - } - - renderer.autoClear = oldAutoClear; - - } - - } ); - - function _extends() { - _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - return _extends.apply(this, arguments); - } - - function _assertThisInitialized(self) { - if (self === void 0) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - - return self; - } - - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { - o.__proto__ = p; - return o; - }; - - return _setPrototypeOf(o, p); - } - - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - _setPrototypeOf(subClass, superClass); - } - - function _getPrototypeOf(o) { - _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { - return o.__proto__ || Object.getPrototypeOf(o); - }; - return _getPrototypeOf(o); - } - - function _isNativeFunction(fn) { - return Function.toString.call(fn).indexOf("[native code]") !== -1; - } - - function _isNativeReflectConstruct() { - if (typeof Reflect === "undefined" || !Reflect.construct) return false; - if (Reflect.construct.sham) return false; - if (typeof Proxy === "function") return true; - - try { - Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); - return true; - } catch (e) { - return false; - } - } - - function _construct(Parent, args, Class) { - if (_isNativeReflectConstruct()) { - _construct = Reflect.construct; - } else { - _construct = function _construct(Parent, args, Class) { - var a = [null]; - a.push.apply(a, args); - var Constructor = Function.bind.apply(Parent, a); - var instance = new Constructor(); - if (Class) _setPrototypeOf(instance, Class.prototype); - return instance; - }; - } - - return _construct.apply(null, arguments); - } - - function _wrapNativeSuper(Class) { - var _cache = typeof Map === "function" ? new Map() : undefined; - - _wrapNativeSuper = function _wrapNativeSuper(Class) { - if (Class === null || !_isNativeFunction(Class)) return Class; - - if (typeof Class !== "function") { - throw new TypeError("Super expression must either be null or a function"); - } - - if (typeof _cache !== "undefined") { - if (_cache.has(Class)) return _cache.get(Class); - - _cache.set(Class, Wrapper); - } - - function Wrapper() { - return _construct(Class, arguments, _getPrototypeOf(this).constructor); - } - - Wrapper.prototype = Object.create(Class.prototype, { - constructor: { - value: Wrapper, - enumerable: false, - writable: true, - configurable: true - } - }); - return _setPrototypeOf(Wrapper, Class); - }; - - return _wrapNativeSuper(Class); - } - - // based on https://github.com/styled-components/styled-components/blob/fcf6f3804c57a14dd7984dfab7bc06ee2edca044/src/utils/error.js - - /** - * Parse errors.md and turn it into a simple hash of code: message - * @private - */ - var ERRORS = { - "1": "Passed invalid arguments to hsl, please pass multiple numbers e.g. hsl(360, 0.75, 0.4) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75 }).\n\n", - "2": "Passed invalid arguments to hsla, please pass multiple numbers e.g. hsla(360, 0.75, 0.4, 0.7) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75, alpha: 0.7 }).\n\n", - "3": "Passed an incorrect argument to a color function, please pass a string representation of a color.\n\n", - "4": "Couldn't generate valid rgb string from %s, it returned %s.\n\n", - "5": "Couldn't parse the color string. Please provide the color as a string in hex, rgb, rgba, hsl or hsla notation.\n\n", - "6": "Passed invalid arguments to rgb, please pass multiple numbers e.g. rgb(255, 205, 100) or an object e.g. rgb({ red: 255, green: 205, blue: 100 }).\n\n", - "7": "Passed invalid arguments to rgba, please pass multiple numbers e.g. rgb(255, 205, 100, 0.75) or an object e.g. rgb({ red: 255, green: 205, blue: 100, alpha: 0.75 }).\n\n", - "8": "Passed invalid argument to toColorString, please pass a RgbColor, RgbaColor, HslColor or HslaColor object.\n\n", - "9": "Please provide a number of steps to the modularScale helper.\n\n", - "10": "Please pass a number or one of the predefined scales to the modularScale helper as the ratio.\n\n", - "11": "Invalid value passed as base to modularScale, expected number or em string but got \"%s\"\n\n", - "12": "Expected a string ending in \"px\" or a number passed as the first argument to %s(), got \"%s\" instead.\n\n", - "13": "Expected a string ending in \"px\" or a number passed as the second argument to %s(), got \"%s\" instead.\n\n", - "14": "Passed invalid pixel value (\"%s\") to %s(), please pass a value like \"12px\" or 12.\n\n", - "15": "Passed invalid base value (\"%s\") to %s(), please pass a value like \"12px\" or 12.\n\n", - "16": "You must provide a template to this method.\n\n", - "17": "You passed an unsupported selector state to this method.\n\n", - "18": "minScreen and maxScreen must be provided as stringified numbers with the same units.\n\n", - "19": "fromSize and toSize must be provided as stringified numbers with the same units.\n\n", - "20": "expects either an array of objects or a single object with the properties prop, fromSize, and toSize.\n\n", - "21": "expects the objects in the first argument array to have the properties `prop`, `fromSize`, and `toSize`.\n\n", - "22": "expects the first argument object to have the properties `prop`, `fromSize`, and `toSize`.\n\n", - "23": "fontFace expects a name of a font-family.\n\n", - "24": "fontFace expects either the path to the font file(s) or a name of a local copy.\n\n", - "25": "fontFace expects localFonts to be an array.\n\n", - "26": "fontFace expects fileFormats to be an array.\n\n", - "27": "radialGradient requries at least 2 color-stops to properly render.\n\n", - "28": "Please supply a filename to retinaImage() as the first argument.\n\n", - "29": "Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.\n\n", - "30": "Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\n\n", - "31": "The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation\n\n", - "32": "To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])\nTo pass a single animation please supply them in simple values, e.g. animation('rotate', '2s')\n\n", - "33": "The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation\n\n", - "34": "borderRadius expects a radius value as a string or number as the second argument.\n\n", - "35": "borderRadius expects one of \"top\", \"bottom\", \"left\" or \"right\" as the first argument.\n\n", - "36": "Property must be a string value.\n\n", - "37": "Syntax Error at %s.\n\n", - "38": "Formula contains a function that needs parentheses at %s.\n\n", - "39": "Formula is missing closing parenthesis at %s.\n\n", - "40": "Formula has too many closing parentheses at %s.\n\n", - "41": "All values in a formula must have the same unit or be unitless.\n\n", - "42": "Please provide a number of steps to the modularScale helper.\n\n", - "43": "Please pass a number or one of the predefined scales to the modularScale helper as the ratio.\n\n", - "44": "Invalid value passed as base to modularScale, expected number or em/rem string but got %s.\n\n", - "45": "Passed invalid argument to hslToColorString, please pass a HslColor or HslaColor object.\n\n", - "46": "Passed invalid argument to rgbToColorString, please pass a RgbColor or RgbaColor object.\n\n", - "47": "minScreen and maxScreen must be provided as stringified numbers with the same units.\n\n", - "48": "fromSize and toSize must be provided as stringified numbers with the same units.\n\n", - "49": "Expects either an array of objects or a single object with the properties prop, fromSize, and toSize.\n\n", - "50": "Expects the objects in the first argument array to have the properties prop, fromSize, and toSize.\n\n", - "51": "Expects the first argument object to have the properties prop, fromSize, and toSize.\n\n", - "52": "fontFace expects either the path to the font file(s) or a name of a local copy.\n\n", - "53": "fontFace expects localFonts to be an array.\n\n", - "54": "fontFace expects fileFormats to be an array.\n\n", - "55": "fontFace expects a name of a font-family.\n\n", - "56": "linearGradient requries at least 2 color-stops to properly render.\n\n", - "57": "radialGradient requries at least 2 color-stops to properly render.\n\n", - "58": "Please supply a filename to retinaImage() as the first argument.\n\n", - "59": "Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.\n\n", - "60": "Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\n\n", - "61": "Property must be a string value.\n\n", - "62": "borderRadius expects a radius value as a string or number as the second argument.\n\n", - "63": "borderRadius expects one of \"top\", \"bottom\", \"left\" or \"right\" as the first argument.\n\n", - "64": "The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation.\n\n", - "65": "To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])\\nTo pass a single animation please supply them in simple values, e.g. animation('rotate', '2s').\n\n", - "66": "The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation.\n\n", - "67": "You must provide a template to this method.\n\n", - "68": "You passed an unsupported selector state to this method.\n\n", - "69": "Expected a string ending in \"px\" or a number passed as the first argument to %s(), got %s instead.\n\n", - "70": "Expected a string ending in \"px\" or a number passed as the second argument to %s(), got %s instead.\n\n", - "71": "Passed invalid pixel value %s to %s(), please pass a value like \"12px\" or 12.\n\n", - "72": "Passed invalid base value %s to %s(), please pass a value like \"12px\" or 12.\n\n", - "73": "Please provide a valid CSS variable.\n\n", - "74": "CSS variable not found and no default was provided.\n\n", - "75": "important requires a valid style object, got a %s instead.\n\n", - "76": "fromSize and toSize must be provided as stringified numbers with the same units as minScreen and maxScreen.\n\n", - "77": "remToPx expects a value in \"rem\" but you provided it in \"%s\".\n\n", - "78": "base must be set in \"px\" or \"%\" but you set it in \"%s\".\n" - }; - /** - * super basic version of sprintf - * @private - */ - - function format() { - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - var a = args[0]; - var b = []; - var c; - - for (c = 1; c < args.length; c += 1) { - b.push(args[c]); - } - - b.forEach(function (d) { - a = a.replace(/%[a-z]/, d); - }); - return a; - } - /** - * Create an error file out of errors.md for development and a simple web link to the full errors - * in production mode. - * @private - */ - - - var PolishedError = /*#__PURE__*/function (_Error) { - _inheritsLoose(PolishedError, _Error); - - function PolishedError(code) { - var _this; - - if (process.env.NODE_ENV === 'production') { - _this = _Error.call(this, "An error occurred. See https://github.com/styled-components/polished/blob/main/src/internalHelpers/errors.md#" + code + " for more information.") || this; - } else { - for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { - args[_key2 - 1] = arguments[_key2]; - } - - _this = _Error.call(this, format.apply(void 0, [ERRORS[code]].concat(args))) || this; - } - - return _assertThisInitialized(_this); - } - - return PolishedError; - }( /*#__PURE__*/_wrapNativeSuper(Error)); - - function colorToInt(color) { - return Math.round(color * 255); - } - - function convertToInt(red, green, blue) { - return colorToInt(red) + "," + colorToInt(green) + "," + colorToInt(blue); - } - - function hslToRgb(hue, saturation, lightness, convert) { - if (convert === void 0) { - convert = convertToInt; - } - - if (saturation === 0) { - // achromatic - return convert(lightness, lightness, lightness); - } // formulae from https://en.wikipedia.org/wiki/HSL_and_HSV - - - var huePrime = (hue % 360 + 360) % 360 / 60; - var chroma = (1 - Math.abs(2 * lightness - 1)) * saturation; - var secondComponent = chroma * (1 - Math.abs(huePrime % 2 - 1)); - var red = 0; - var green = 0; - var blue = 0; - - if (huePrime >= 0 && huePrime < 1) { - red = chroma; - green = secondComponent; - } else if (huePrime >= 1 && huePrime < 2) { - red = secondComponent; - green = chroma; - } else if (huePrime >= 2 && huePrime < 3) { - green = chroma; - blue = secondComponent; - } else if (huePrime >= 3 && huePrime < 4) { - green = secondComponent; - blue = chroma; - } else if (huePrime >= 4 && huePrime < 5) { - red = secondComponent; - blue = chroma; - } else if (huePrime >= 5 && huePrime < 6) { - red = chroma; - blue = secondComponent; - } - - var lightnessModification = lightness - chroma / 2; - var finalRed = red + lightnessModification; - var finalGreen = green + lightnessModification; - var finalBlue = blue + lightnessModification; - return convert(finalRed, finalGreen, finalBlue); - } - - var namedColorMap = { - aliceblue: 'f0f8ff', - antiquewhite: 'faebd7', - aqua: '00ffff', - aquamarine: '7fffd4', - azure: 'f0ffff', - beige: 'f5f5dc', - bisque: 'ffe4c4', - black: '000', - blanchedalmond: 'ffebcd', - blue: '0000ff', - blueviolet: '8a2be2', - brown: 'a52a2a', - burlywood: 'deb887', - cadetblue: '5f9ea0', - chartreuse: '7fff00', - chocolate: 'd2691e', - coral: 'ff7f50', - cornflowerblue: '6495ed', - cornsilk: 'fff8dc', - crimson: 'dc143c', - cyan: '00ffff', - darkblue: '00008b', - darkcyan: '008b8b', - darkgoldenrod: 'b8860b', - darkgray: 'a9a9a9', - darkgreen: '006400', - darkgrey: 'a9a9a9', - darkkhaki: 'bdb76b', - darkmagenta: '8b008b', - darkolivegreen: '556b2f', - darkorange: 'ff8c00', - darkorchid: '9932cc', - darkred: '8b0000', - darksalmon: 'e9967a', - darkseagreen: '8fbc8f', - darkslateblue: '483d8b', - darkslategray: '2f4f4f', - darkslategrey: '2f4f4f', - darkturquoise: '00ced1', - darkviolet: '9400d3', - deeppink: 'ff1493', - deepskyblue: '00bfff', - dimgray: '696969', - dimgrey: '696969', - dodgerblue: '1e90ff', - firebrick: 'b22222', - floralwhite: 'fffaf0', - forestgreen: '228b22', - fuchsia: 'ff00ff', - gainsboro: 'dcdcdc', - ghostwhite: 'f8f8ff', - gold: 'ffd700', - goldenrod: 'daa520', - gray: '808080', - green: '008000', - greenyellow: 'adff2f', - grey: '808080', - honeydew: 'f0fff0', - hotpink: 'ff69b4', - indianred: 'cd5c5c', - indigo: '4b0082', - ivory: 'fffff0', - khaki: 'f0e68c', - lavender: 'e6e6fa', - lavenderblush: 'fff0f5', - lawngreen: '7cfc00', - lemonchiffon: 'fffacd', - lightblue: 'add8e6', - lightcoral: 'f08080', - lightcyan: 'e0ffff', - lightgoldenrodyellow: 'fafad2', - lightgray: 'd3d3d3', - lightgreen: '90ee90', - lightgrey: 'd3d3d3', - lightpink: 'ffb6c1', - lightsalmon: 'ffa07a', - lightseagreen: '20b2aa', - lightskyblue: '87cefa', - lightslategray: '789', - lightslategrey: '789', - lightsteelblue: 'b0c4de', - lightyellow: 'ffffe0', - lime: '0f0', - limegreen: '32cd32', - linen: 'faf0e6', - magenta: 'f0f', - maroon: '800000', - mediumaquamarine: '66cdaa', - mediumblue: '0000cd', - mediumorchid: 'ba55d3', - mediumpurple: '9370db', - mediumseagreen: '3cb371', - mediumslateblue: '7b68ee', - mediumspringgreen: '00fa9a', - mediumturquoise: '48d1cc', - mediumvioletred: 'c71585', - midnightblue: '191970', - mintcream: 'f5fffa', - mistyrose: 'ffe4e1', - moccasin: 'ffe4b5', - navajowhite: 'ffdead', - navy: '000080', - oldlace: 'fdf5e6', - olive: '808000', - olivedrab: '6b8e23', - orange: 'ffa500', - orangered: 'ff4500', - orchid: 'da70d6', - palegoldenrod: 'eee8aa', - palegreen: '98fb98', - paleturquoise: 'afeeee', - palevioletred: 'db7093', - papayawhip: 'ffefd5', - peachpuff: 'ffdab9', - peru: 'cd853f', - pink: 'ffc0cb', - plum: 'dda0dd', - powderblue: 'b0e0e6', - purple: '800080', - rebeccapurple: '639', - red: 'f00', - rosybrown: 'bc8f8f', - royalblue: '4169e1', - saddlebrown: '8b4513', - salmon: 'fa8072', - sandybrown: 'f4a460', - seagreen: '2e8b57', - seashell: 'fff5ee', - sienna: 'a0522d', - silver: 'c0c0c0', - skyblue: '87ceeb', - slateblue: '6a5acd', - slategray: '708090', - slategrey: '708090', - snow: 'fffafa', - springgreen: '00ff7f', - steelblue: '4682b4', - tan: 'd2b48c', - teal: '008080', - thistle: 'd8bfd8', - tomato: 'ff6347', - turquoise: '40e0d0', - violet: 'ee82ee', - wheat: 'f5deb3', - white: 'fff', - whitesmoke: 'f5f5f5', - yellow: 'ff0', - yellowgreen: '9acd32' - }; - /** - * Checks if a string is a CSS named color and returns its equivalent hex value, otherwise returns the original color. - * @private - */ - - function nameToHex(color) { - if (typeof color !== 'string') return color; - var normalizedColorName = color.toLowerCase(); - return namedColorMap[normalizedColorName] ? "#" + namedColorMap[normalizedColorName] : color; - } - - var hexRegex = /^#[a-fA-F0-9]{6}$/; - var hexRgbaRegex = /^#[a-fA-F0-9]{8}$/; - var reducedHexRegex = /^#[a-fA-F0-9]{3}$/; - var reducedRgbaHexRegex = /^#[a-fA-F0-9]{4}$/; - var rgbRegex = /^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/i; - var rgbaRegex = /^rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*([-+]?[0-9]*[.]?[0-9]+)\s*\)$/i; - var hslRegex = /^hsl\(\s*(\d{0,3}[.]?[0-9]+)\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*\)$/i; - var hslaRegex = /^hsla\(\s*(\d{0,3}[.]?[0-9]+)\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*,\s*([-+]?[0-9]*[.]?[0-9]+)\s*\)$/i; - /** - * Returns an RgbColor or RgbaColor object. This utility function is only useful - * if want to extract a color component. With the color util `toColorString` you - * can convert a RgbColor or RgbaColor object back to a string. - * - * @example - * // Assigns `{ red: 255, green: 0, blue: 0 }` to color1 - * const color1 = parseToRgb('rgb(255, 0, 0)'); - * // Assigns `{ red: 92, green: 102, blue: 112, alpha: 0.75 }` to color2 - * const color2 = parseToRgb('hsla(210, 10%, 40%, 0.75)'); - */ - - function parseToRgb(color) { - if (typeof color !== 'string') { - throw new PolishedError(3); - } - - var normalizedColor = nameToHex(color); - - if (normalizedColor.match(hexRegex)) { - return { - red: parseInt("" + normalizedColor[1] + normalizedColor[2], 16), - green: parseInt("" + normalizedColor[3] + normalizedColor[4], 16), - blue: parseInt("" + normalizedColor[5] + normalizedColor[6], 16) - }; - } - - if (normalizedColor.match(hexRgbaRegex)) { - var alpha = parseFloat((parseInt("" + normalizedColor[7] + normalizedColor[8], 16) / 255).toFixed(2)); - return { - red: parseInt("" + normalizedColor[1] + normalizedColor[2], 16), - green: parseInt("" + normalizedColor[3] + normalizedColor[4], 16), - blue: parseInt("" + normalizedColor[5] + normalizedColor[6], 16), - alpha: alpha - }; - } - - if (normalizedColor.match(reducedHexRegex)) { - return { - red: parseInt("" + normalizedColor[1] + normalizedColor[1], 16), - green: parseInt("" + normalizedColor[2] + normalizedColor[2], 16), - blue: parseInt("" + normalizedColor[3] + normalizedColor[3], 16) - }; - } - - if (normalizedColor.match(reducedRgbaHexRegex)) { - var _alpha = parseFloat((parseInt("" + normalizedColor[4] + normalizedColor[4], 16) / 255).toFixed(2)); - - return { - red: parseInt("" + normalizedColor[1] + normalizedColor[1], 16), - green: parseInt("" + normalizedColor[2] + normalizedColor[2], 16), - blue: parseInt("" + normalizedColor[3] + normalizedColor[3], 16), - alpha: _alpha - }; - } - - var rgbMatched = rgbRegex.exec(normalizedColor); - - if (rgbMatched) { - return { - red: parseInt("" + rgbMatched[1], 10), - green: parseInt("" + rgbMatched[2], 10), - blue: parseInt("" + rgbMatched[3], 10) - }; - } - - var rgbaMatched = rgbaRegex.exec(normalizedColor.substring(0, 50)); - - if (rgbaMatched) { - return { - red: parseInt("" + rgbaMatched[1], 10), - green: parseInt("" + rgbaMatched[2], 10), - blue: parseInt("" + rgbaMatched[3], 10), - alpha: parseFloat("" + rgbaMatched[4]) - }; - } - - var hslMatched = hslRegex.exec(normalizedColor); - - if (hslMatched) { - var hue = parseInt("" + hslMatched[1], 10); - var saturation = parseInt("" + hslMatched[2], 10) / 100; - var lightness = parseInt("" + hslMatched[3], 10) / 100; - var rgbColorString = "rgb(" + hslToRgb(hue, saturation, lightness) + ")"; - var hslRgbMatched = rgbRegex.exec(rgbColorString); - - if (!hslRgbMatched) { - throw new PolishedError(4, normalizedColor, rgbColorString); - } - - return { - red: parseInt("" + hslRgbMatched[1], 10), - green: parseInt("" + hslRgbMatched[2], 10), - blue: parseInt("" + hslRgbMatched[3], 10) - }; - } - - var hslaMatched = hslaRegex.exec(normalizedColor.substring(0, 50)); - - if (hslaMatched) { - var _hue = parseInt("" + hslaMatched[1], 10); - - var _saturation = parseInt("" + hslaMatched[2], 10) / 100; - - var _lightness = parseInt("" + hslaMatched[3], 10) / 100; - - var _rgbColorString = "rgb(" + hslToRgb(_hue, _saturation, _lightness) + ")"; - - var _hslRgbMatched = rgbRegex.exec(_rgbColorString); - - if (!_hslRgbMatched) { - throw new PolishedError(4, normalizedColor, _rgbColorString); - } - - return { - red: parseInt("" + _hslRgbMatched[1], 10), - green: parseInt("" + _hslRgbMatched[2], 10), - blue: parseInt("" + _hslRgbMatched[3], 10), - alpha: parseFloat("" + hslaMatched[4]) - }; - } - - throw new PolishedError(5); - } - - /** - * Reduces hex values if possible e.g. #ff8866 to #f86 - * @private - */ - var reduceHexValue = function reduceHexValue(value) { - if (value.length === 7 && value[1] === value[2] && value[3] === value[4] && value[5] === value[6]) { - return "#" + value[1] + value[3] + value[5]; - } - - return value; - }; - - function numberToHex(value) { - var hex = value.toString(16); - return hex.length === 1 ? "0" + hex : hex; - } - - /** - * Returns a string value for the color. The returned result is the smallest possible hex notation. - * - * @example - * // Styles as object usage - * const styles = { - * background: rgb(255, 205, 100), - * background: rgb({ red: 255, green: 205, blue: 100 }), - * } - * - * // styled-components usage - * const div = styled.div` - * background: ${rgb(255, 205, 100)}; - * background: ${rgb({ red: 255, green: 205, blue: 100 })}; - * ` - * - * // CSS in JS Output - * - * element { - * background: "#ffcd64"; - * background: "#ffcd64"; - * } - */ - function rgb(value, green, blue) { - if (typeof value === 'number' && typeof green === 'number' && typeof blue === 'number') { - return reduceHexValue("#" + numberToHex(value) + numberToHex(green) + numberToHex(blue)); - } else if (typeof value === 'object' && green === undefined && blue === undefined) { - return reduceHexValue("#" + numberToHex(value.red) + numberToHex(value.green) + numberToHex(value.blue)); - } - - throw new PolishedError(6); - } - - /** - * Returns a string value for the color. The returned result is the smallest possible rgba or hex notation. - * - * Can also be used to fade a color by passing a hex value or named CSS color along with an alpha value. - * - * @example - * // Styles as object usage - * const styles = { - * background: rgba(255, 205, 100, 0.7), - * background: rgba({ red: 255, green: 205, blue: 100, alpha: 0.7 }), - * background: rgba(255, 205, 100, 1), - * background: rgba('#ffffff', 0.4), - * background: rgba('black', 0.7), - * } - * - * // styled-components usage - * const div = styled.div` - * background: ${rgba(255, 205, 100, 0.7)}; - * background: ${rgba({ red: 255, green: 205, blue: 100, alpha: 0.7 })}; - * background: ${rgba(255, 205, 100, 1)}; - * background: ${rgba('#ffffff', 0.4)}; - * background: ${rgba('black', 0.7)}; - * ` - * - * // CSS in JS Output - * - * element { - * background: "rgba(255,205,100,0.7)"; - * background: "rgba(255,205,100,0.7)"; - * background: "#ffcd64"; - * background: "rgba(255,255,255,0.4)"; - * background: "rgba(0,0,0,0.7)"; - * } - */ - function rgba(firstValue, secondValue, thirdValue, fourthValue) { - if (typeof firstValue === 'string' && typeof secondValue === 'number') { - var rgbValue = parseToRgb(firstValue); - return "rgba(" + rgbValue.red + "," + rgbValue.green + "," + rgbValue.blue + "," + secondValue + ")"; - } else if (typeof firstValue === 'number' && typeof secondValue === 'number' && typeof thirdValue === 'number' && typeof fourthValue === 'number') { - return fourthValue >= 1 ? rgb(firstValue, secondValue, thirdValue) : "rgba(" + firstValue + "," + secondValue + "," + thirdValue + "," + fourthValue + ")"; - } else if (typeof firstValue === 'object' && secondValue === undefined && thirdValue === undefined && fourthValue === undefined) { - return firstValue.alpha >= 1 ? rgb(firstValue.red, firstValue.green, firstValue.blue) : "rgba(" + firstValue.red + "," + firstValue.green + "," + firstValue.blue + "," + firstValue.alpha + ")"; - } - - throw new PolishedError(7); - } - - // Type definitions taken from https://github.com/gcanti/flow-static-land/blob/master/src/Fun.js - // eslint-disable-next-line no-unused-vars - // eslint-disable-next-line no-unused-vars - // eslint-disable-next-line no-redeclare - function curried(f, length, acc) { - return function fn() { - // eslint-disable-next-line prefer-rest-params - var combined = acc.concat(Array.prototype.slice.call(arguments)); - return combined.length >= length ? f.apply(this, combined) : curried(f, length, combined); - }; - } // eslint-disable-next-line no-redeclare - - - function curry(f) { - // eslint-disable-line no-redeclare - return curried(f, f.length, []); - } - - function guard(lowerBoundary, upperBoundary, value) { - return Math.max(lowerBoundary, Math.min(upperBoundary, value)); - } - - /** - * Increases the opacity of a color. Its range for the amount is between 0 to 1. - * - * - * @example - * // Styles as object usage - * const styles = { - * background: opacify(0.1, 'rgba(255, 255, 255, 0.9)'); - * background: opacify(0.2, 'hsla(0, 0%, 100%, 0.5)'), - * background: opacify('0.5', 'rgba(255, 0, 0, 0.2)'), - * } - * - * // styled-components usage - * const div = styled.div` - * background: ${opacify(0.1, 'rgba(255, 255, 255, 0.9)')}; - * background: ${opacify(0.2, 'hsla(0, 0%, 100%, 0.5)')}, - * background: ${opacify('0.5', 'rgba(255, 0, 0, 0.2)')}, - * ` - * - * // CSS in JS Output - * - * element { - * background: "#fff"; - * background: "rgba(255,255,255,0.7)"; - * background: "rgba(255,0,0,0.7)"; - * } - */ - - function opacify(amount, color) { - if (color === 'transparent') return color; - var parsedColor = parseToRgb(color); - var alpha = typeof parsedColor.alpha === 'number' ? parsedColor.alpha : 1; - - var colorWithAlpha = _extends({}, parsedColor, { - alpha: guard(0, 1, (alpha * 100 + parseFloat(amount) * 100) / 100) - }); - - return rgba(colorWithAlpha); - } // prettier-ignore - - - var curriedOpacify = /*#__PURE__*/curry - /* :: */ - (opacify); - - /** - * The Ease class provides a collection of easing functions for use with tween.js. - */ - var Easing = { - Linear: { - None: function (amount) { - return amount; - }, - }, - Quadratic: { - In: function (amount) { - return amount * amount; - }, - Out: function (amount) { - return amount * (2 - amount); - }, - InOut: function (amount) { - if ((amount *= 2) < 1) { - return 0.5 * amount * amount; - } - return -0.5 * (--amount * (amount - 2) - 1); - }, - }, - Cubic: { - In: function (amount) { - return amount * amount * amount; - }, - Out: function (amount) { - return --amount * amount * amount + 1; - }, - InOut: function (amount) { - if ((amount *= 2) < 1) { - return 0.5 * amount * amount * amount; - } - return 0.5 * ((amount -= 2) * amount * amount + 2); - }, - }, - Quartic: { - In: function (amount) { - return amount * amount * amount * amount; - }, - Out: function (amount) { - return 1 - --amount * amount * amount * amount; - }, - InOut: function (amount) { - if ((amount *= 2) < 1) { - return 0.5 * amount * amount * amount * amount; - } - return -0.5 * ((amount -= 2) * amount * amount * amount - 2); - }, - }, - Quintic: { - In: function (amount) { - return amount * amount * amount * amount * amount; - }, - Out: function (amount) { - return --amount * amount * amount * amount * amount + 1; - }, - InOut: function (amount) { - if ((amount *= 2) < 1) { - return 0.5 * amount * amount * amount * amount * amount; - } - return 0.5 * ((amount -= 2) * amount * amount * amount * amount + 2); - }, - }, - Sinusoidal: { - In: function (amount) { - return 1 - Math.cos((amount * Math.PI) / 2); - }, - Out: function (amount) { - return Math.sin((amount * Math.PI) / 2); - }, - InOut: function (amount) { - return 0.5 * (1 - Math.cos(Math.PI * amount)); - }, - }, - Exponential: { - In: function (amount) { - return amount === 0 ? 0 : Math.pow(1024, amount - 1); - }, - Out: function (amount) { - return amount === 1 ? 1 : 1 - Math.pow(2, -10 * amount); - }, - InOut: function (amount) { - if (amount === 0) { - return 0; - } - if (amount === 1) { - return 1; - } - if ((amount *= 2) < 1) { - return 0.5 * Math.pow(1024, amount - 1); - } - return 0.5 * (-Math.pow(2, -10 * (amount - 1)) + 2); - }, - }, - Circular: { - In: function (amount) { - return 1 - Math.sqrt(1 - amount * amount); - }, - Out: function (amount) { - return Math.sqrt(1 - --amount * amount); - }, - InOut: function (amount) { - if ((amount *= 2) < 1) { - return -0.5 * (Math.sqrt(1 - amount * amount) - 1); - } - return 0.5 * (Math.sqrt(1 - (amount -= 2) * amount) + 1); - }, - }, - Elastic: { - In: function (amount) { - if (amount === 0) { - return 0; - } - if (amount === 1) { - return 1; - } - return -Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI); - }, - Out: function (amount) { - if (amount === 0) { - return 0; - } - if (amount === 1) { - return 1; - } - return Math.pow(2, -10 * amount) * Math.sin((amount - 0.1) * 5 * Math.PI) + 1; - }, - InOut: function (amount) { - if (amount === 0) { - return 0; - } - if (amount === 1) { - return 1; - } - amount *= 2; - if (amount < 1) { - return -0.5 * Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI); - } - return 0.5 * Math.pow(2, -10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI) + 1; - }, - }, - Back: { - In: function (amount) { - var s = 1.70158; - return amount * amount * ((s + 1) * amount - s); - }, - Out: function (amount) { - var s = 1.70158; - return --amount * amount * ((s + 1) * amount + s) + 1; - }, - InOut: function (amount) { - var s = 1.70158 * 1.525; - if ((amount *= 2) < 1) { - return 0.5 * (amount * amount * ((s + 1) * amount - s)); - } - return 0.5 * ((amount -= 2) * amount * ((s + 1) * amount + s) + 2); - }, - }, - Bounce: { - In: function (amount) { - return 1 - Easing.Bounce.Out(1 - amount); - }, - Out: function (amount) { - if (amount < 1 / 2.75) { - return 7.5625 * amount * amount; - } - else if (amount < 2 / 2.75) { - return 7.5625 * (amount -= 1.5 / 2.75) * amount + 0.75; - } - else if (amount < 2.5 / 2.75) { - return 7.5625 * (amount -= 2.25 / 2.75) * amount + 0.9375; - } - else { - return 7.5625 * (amount -= 2.625 / 2.75) * amount + 0.984375; - } - }, - InOut: function (amount) { - if (amount < 0.5) { - return Easing.Bounce.In(amount * 2) * 0.5; - } - return Easing.Bounce.Out(amount * 2 - 1) * 0.5 + 0.5; - }, - }, - }; - - var now; - // Include a performance.now polyfill. - // In node.js, use process.hrtime. - // eslint-disable-next-line - // @ts-ignore - if (typeof self === 'undefined' && typeof process !== 'undefined' && process.hrtime) { - now = function () { - // eslint-disable-next-line - // @ts-ignore - var time = process.hrtime(); - // Convert [seconds, nanoseconds] to milliseconds. - return time[0] * 1000 + time[1] / 1000000; - }; - } - // In a browser, use self.performance.now if it is available. - else if (typeof self !== 'undefined' && self.performance !== undefined && self.performance.now !== undefined) { - // This must be bound, because directly assigning this function - // leads to an invocation exception in Chrome. - now = self.performance.now.bind(self.performance); - } - // Use Date.now if it is available. - else if (Date.now !== undefined) { - now = Date.now; - } - // Otherwise, use 'new Date().getTime()'. - else { - now = function () { - return new Date().getTime(); - }; - } - var now$1 = now; - - /** - * Controlling groups of tweens - * - * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components. - * In these cases, you may want to create your own smaller groups of tween - */ - var Group = /** @class */ (function () { - function Group() { - this._tweens = {}; - this._tweensAddedDuringUpdate = {}; - } - Group.prototype.getAll = function () { - var _this = this; - return Object.keys(this._tweens).map(function (tweenId) { - return _this._tweens[tweenId]; - }); - }; - Group.prototype.removeAll = function () { - this._tweens = {}; - }; - Group.prototype.add = function (tween) { - this._tweens[tween.getId()] = tween; - this._tweensAddedDuringUpdate[tween.getId()] = tween; - }; - Group.prototype.remove = function (tween) { - delete this._tweens[tween.getId()]; - delete this._tweensAddedDuringUpdate[tween.getId()]; - }; - Group.prototype.update = function (time, preserve) { - if (time === void 0) { time = now$1(); } - if (preserve === void 0) { preserve = false; } - var tweenIds = Object.keys(this._tweens); - if (tweenIds.length === 0) { - return false; - } - // Tweens are updated in "batches". If you add a new tween during an - // update, then the new tween will be updated in the next batch. - // If you remove a tween during an update, it may or may not be updated. - // However, if the removed tween was added during the current batch, - // then it will not be updated. - while (tweenIds.length > 0) { - this._tweensAddedDuringUpdate = {}; - for (var i = 0; i < tweenIds.length; i++) { - var tween = this._tweens[tweenIds[i]]; - var autoStart = !preserve; - if (tween && tween.update(time, autoStart) === false && !preserve) { - delete this._tweens[tweenIds[i]]; - } - } - tweenIds = Object.keys(this._tweensAddedDuringUpdate); - } - return true; - }; - return Group; - }()); - - /** - * - */ - var Interpolation = { - Linear: function (v, k) { - var m = v.length - 1; - var f = m * k; - var i = Math.floor(f); - var fn = Interpolation.Utils.Linear; - if (k < 0) { - return fn(v[0], v[1], f); - } - if (k > 1) { - return fn(v[m], v[m - 1], m - f); - } - return fn(v[i], v[i + 1 > m ? m : i + 1], f - i); - }, - Bezier: function (v, k) { - var b = 0; - var n = v.length - 1; - var pw = Math.pow; - var bn = Interpolation.Utils.Bernstein; - for (var i = 0; i <= n; i++) { - b += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i); - } - return b; - }, - CatmullRom: function (v, k) { - var m = v.length - 1; - var f = m * k; - var i = Math.floor(f); - var fn = Interpolation.Utils.CatmullRom; - if (v[0] === v[m]) { - if (k < 0) { - i = Math.floor((f = m * (1 + k))); - } - return fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i); - } - else { - if (k < 0) { - return v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]); - } - if (k > 1) { - return v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]); - } - return fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i); - } - }, - Utils: { - Linear: function (p0, p1, t) { - return (p1 - p0) * t + p0; - }, - Bernstein: function (n, i) { - var fc = Interpolation.Utils.Factorial; - return fc(n) / fc(i) / fc(n - i); - }, - Factorial: (function () { - var a = [1]; - return function (n) { - var s = 1; - if (a[n]) { - return a[n]; - } - for (var i = n; i > 1; i--) { - s *= i; - } - a[n] = s; - return s; - }; - })(), - CatmullRom: function (p0, p1, p2, p3, t) { - var v0 = (p2 - p0) * 0.5; - var v1 = (p3 - p1) * 0.5; - var t2 = t * t; - var t3 = t * t2; - return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1; - }, - }, - }; - - /** - * Utils - */ - var Sequence = /** @class */ (function () { - function Sequence() { - } - Sequence.nextId = function () { - return Sequence._nextId++; - }; - Sequence._nextId = 0; - return Sequence; - }()); - - var mainGroup = new Group(); - - /** - * Tween.js - Licensed under the MIT license - * https://github.com/tweenjs/tween.js - * ---------------------------------------------- - * - * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors. - * Thank you all, you're awesome! - */ - var Tween = /** @class */ (function () { - function Tween(_object, _group) { - if (_group === void 0) { _group = mainGroup; } - this._object = _object; - this._group = _group; - this._isPaused = false; - this._pauseStart = 0; - this._valuesStart = {}; - this._valuesEnd = {}; - this._valuesStartRepeat = {}; - this._duration = 1000; - this._initialRepeat = 0; - this._repeat = 0; - this._yoyo = false; - this._isPlaying = false; - this._reversed = false; - this._delayTime = 0; - this._startTime = 0; - this._easingFunction = Easing.Linear.None; - this._interpolationFunction = Interpolation.Linear; - this._chainedTweens = []; - this._onStartCallbackFired = false; - this._id = Sequence.nextId(); - this._isChainStopped = false; - this._goToEnd = false; - } - Tween.prototype.getId = function () { - return this._id; - }; - Tween.prototype.isPlaying = function () { - return this._isPlaying; - }; - Tween.prototype.isPaused = function () { - return this._isPaused; - }; - Tween.prototype.to = function (properties, duration) { - // TODO? restore this, then update the 07_dynamic_to example to set fox - // tween's to on each update. That way the behavior is opt-in (there's - // currently no opt-out). - // for (const prop in properties) this._valuesEnd[prop] = properties[prop] - this._valuesEnd = Object.create(properties); - if (duration !== undefined) { - this._duration = duration; - } - return this; - }; - Tween.prototype.duration = function (d) { - this._duration = d; - return this; - }; - Tween.prototype.start = function (time) { - if (this._isPlaying) { - return this; - } - // eslint-disable-next-line - this._group && this._group.add(this); - this._repeat = this._initialRepeat; - if (this._reversed) { - // If we were reversed (f.e. using the yoyo feature) then we need to - // flip the tween direction back to forward. - this._reversed = false; - for (var property in this._valuesStartRepeat) { - this._swapEndStartRepeatValues(property); - this._valuesStart[property] = this._valuesStartRepeat[property]; - } - } - this._isPlaying = true; - this._isPaused = false; - this._onStartCallbackFired = false; - this._isChainStopped = false; - this._startTime = time !== undefined ? (typeof time === 'string' ? now$1() + parseFloat(time) : time) : now$1(); - this._startTime += this._delayTime; - this._setupProperties(this._object, this._valuesStart, this._valuesEnd, this._valuesStartRepeat); - return this; - }; - Tween.prototype._setupProperties = function (_object, _valuesStart, _valuesEnd, _valuesStartRepeat) { - for (var property in _valuesEnd) { - var startValue = _object[property]; - var startValueIsArray = Array.isArray(startValue); - var propType = startValueIsArray ? 'array' : typeof startValue; - var isInterpolationList = !startValueIsArray && Array.isArray(_valuesEnd[property]); - // If `to()` specifies a property that doesn't exist in the source object, - // we should not set that property in the object - if (propType === 'undefined' || propType === 'function') { - continue; - } - // Check if an Array was provided as property value - if (isInterpolationList) { - var endValues = _valuesEnd[property]; - if (endValues.length === 0) { - continue; - } - // handle an array of relative values - endValues = endValues.map(this._handleRelativeValue.bind(this, startValue)); - // Create a local copy of the Array with the start value at the front - _valuesEnd[property] = [startValue].concat(endValues); - } - // handle the deepness of the values - if ((propType === 'object' || startValueIsArray) && startValue && !isInterpolationList) { - _valuesStart[property] = startValueIsArray ? [] : {}; - // eslint-disable-next-line - for (var prop in startValue) { - // eslint-disable-next-line - // @ts-ignore FIXME? - _valuesStart[property][prop] = startValue[prop]; - } - _valuesStartRepeat[property] = startValueIsArray ? [] : {}; // TODO? repeat nested values? And yoyo? And array values? - // eslint-disable-next-line - // @ts-ignore FIXME? - this._setupProperties(startValue, _valuesStart[property], _valuesEnd[property], _valuesStartRepeat[property]); - } - else { - // Save the starting value, but only once. - if (typeof _valuesStart[property] === 'undefined') { - _valuesStart[property] = startValue; - } - if (!startValueIsArray) { - // eslint-disable-next-line - // @ts-ignore FIXME? - _valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings - } - if (isInterpolationList) { - // eslint-disable-next-line - // @ts-ignore FIXME? - _valuesStartRepeat[property] = _valuesEnd[property].slice().reverse(); - } - else { - _valuesStartRepeat[property] = _valuesStart[property] || 0; - } - } - } - }; - Tween.prototype.stop = function () { - if (!this._isChainStopped) { - this._isChainStopped = true; - this.stopChainedTweens(); - } - if (!this._isPlaying) { - return this; - } - // eslint-disable-next-line - this._group && this._group.remove(this); - this._isPlaying = false; - this._isPaused = false; - if (this._onStopCallback) { - this._onStopCallback(this._object); - } - return this; - }; - Tween.prototype.end = function () { - this._goToEnd = true; - this.update(Infinity); - return this; - }; - Tween.prototype.pause = function (time) { - if (time === void 0) { time = now$1(); } - if (this._isPaused || !this._isPlaying) { - return this; - } - this._isPaused = true; - this._pauseStart = time; - // eslint-disable-next-line - this._group && this._group.remove(this); - return this; - }; - Tween.prototype.resume = function (time) { - if (time === void 0) { time = now$1(); } - if (!this._isPaused || !this._isPlaying) { - return this; - } - this._isPaused = false; - this._startTime += time - this._pauseStart; - this._pauseStart = 0; - // eslint-disable-next-line - this._group && this._group.add(this); - return this; - }; - Tween.prototype.stopChainedTweens = function () { - for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) { - this._chainedTweens[i].stop(); - } - return this; - }; - Tween.prototype.group = function (group) { - this._group = group; - return this; - }; - Tween.prototype.delay = function (amount) { - this._delayTime = amount; - return this; - }; - Tween.prototype.repeat = function (times) { - this._initialRepeat = times; - this._repeat = times; - return this; - }; - Tween.prototype.repeatDelay = function (amount) { - this._repeatDelayTime = amount; - return this; - }; - Tween.prototype.yoyo = function (yoyo) { - this._yoyo = yoyo; - return this; - }; - Tween.prototype.easing = function (easingFunction) { - this._easingFunction = easingFunction; - return this; - }; - Tween.prototype.interpolation = function (interpolationFunction) { - this._interpolationFunction = interpolationFunction; - return this; - }; - Tween.prototype.chain = function () { - var tweens = []; - for (var _i = 0; _i < arguments.length; _i++) { - tweens[_i] = arguments[_i]; - } - this._chainedTweens = tweens; - return this; - }; - Tween.prototype.onStart = function (callback) { - this._onStartCallback = callback; - return this; - }; - Tween.prototype.onUpdate = function (callback) { - this._onUpdateCallback = callback; - return this; - }; - Tween.prototype.onRepeat = function (callback) { - this._onRepeatCallback = callback; - return this; - }; - Tween.prototype.onComplete = function (callback) { - this._onCompleteCallback = callback; - return this; - }; - Tween.prototype.onStop = function (callback) { - this._onStopCallback = callback; - return this; - }; - /** - * @returns true if the tween is still playing after the update, false - * otherwise (calling update on a paused tween still returns true because - * it is still playing, just paused). - */ - Tween.prototype.update = function (time, autoStart) { - if (time === void 0) { time = now$1(); } - if (autoStart === void 0) { autoStart = true; } - if (this._isPaused) - return true; - var property; - var elapsed; - var endTime = this._startTime + this._duration; - if (!this._goToEnd && !this._isPlaying) { - if (time > endTime) - return false; - if (autoStart) - this.start(time); - } - this._goToEnd = false; - if (time < this._startTime) { - return true; - } - if (this._onStartCallbackFired === false) { - if (this._onStartCallback) { - this._onStartCallback(this._object); - } - this._onStartCallbackFired = true; - } - elapsed = (time - this._startTime) / this._duration; - elapsed = this._duration === 0 || elapsed > 1 ? 1 : elapsed; - var value = this._easingFunction(elapsed); - // properties transformations - this._updateProperties(this._object, this._valuesStart, this._valuesEnd, value); - if (this._onUpdateCallback) { - this._onUpdateCallback(this._object, elapsed); - } - if (elapsed === 1) { - if (this._repeat > 0) { - if (isFinite(this._repeat)) { - this._repeat--; - } - // Reassign starting values, restart by making startTime = now - for (property in this._valuesStartRepeat) { - if (!this._yoyo && typeof this._valuesEnd[property] === 'string') { - this._valuesStartRepeat[property] = - // eslint-disable-next-line - // @ts-ignore FIXME? - this._valuesStartRepeat[property] + parseFloat(this._valuesEnd[property]); - } - if (this._yoyo) { - this._swapEndStartRepeatValues(property); - } - this._valuesStart[property] = this._valuesStartRepeat[property]; - } - if (this._yoyo) { - this._reversed = !this._reversed; - } - if (this._repeatDelayTime !== undefined) { - this._startTime = time + this._repeatDelayTime; - } - else { - this._startTime = time + this._delayTime; - } - if (this._onRepeatCallback) { - this._onRepeatCallback(this._object); - } - return true; - } - else { - if (this._onCompleteCallback) { - this._onCompleteCallback(this._object); - } - for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) { - // Make the chained tweens start exactly at the time they should, - // even if the `update()` method was called way past the duration of the tween - this._chainedTweens[i].start(this._startTime + this._duration); - } - this._isPlaying = false; - return false; - } - } - return true; - }; - Tween.prototype._updateProperties = function (_object, _valuesStart, _valuesEnd, value) { - for (var property in _valuesEnd) { - // Don't update properties that do not exist in the source object - if (_valuesStart[property] === undefined) { - continue; - } - var start = _valuesStart[property] || 0; - var end = _valuesEnd[property]; - var startIsArray = Array.isArray(_object[property]); - var endIsArray = Array.isArray(end); - var isInterpolationList = !startIsArray && endIsArray; - if (isInterpolationList) { - _object[property] = this._interpolationFunction(end, value); - } - else if (typeof end === 'object' && end) { - // eslint-disable-next-line - // @ts-ignore FIXME? - this._updateProperties(_object[property], start, end, value); - } - else { - // Parses relative end values with start as base (e.g.: +10, -3) - end = this._handleRelativeValue(start, end); - // Protect against non numeric properties. - if (typeof end === 'number') { - // eslint-disable-next-line - // @ts-ignore FIXME? - _object[property] = start + (end - start) * value; - } - } - } - }; - Tween.prototype._handleRelativeValue = function (start, end) { - if (typeof end !== 'string') { - return end; - } - if (end.charAt(0) === '+' || end.charAt(0) === '-') { - return start + parseFloat(end); - } - else { - return parseFloat(end); - } - }; - Tween.prototype._swapEndStartRepeatValues = function (property) { - var tmp = this._valuesStartRepeat[property]; - var endValue = this._valuesEnd[property]; - if (typeof endValue === 'string') { - this._valuesStartRepeat[property] = this._valuesStartRepeat[property] + parseFloat(endValue); - } - else { - this._valuesStartRepeat[property] = this._valuesEnd[property]; - } - this._valuesEnd[property] = tmp; - }; - return Tween; - }()); - - var VERSION = '18.6.4'; - - /** - * Tween.js - Licensed under the MIT license - * https://github.com/tweenjs/tween.js - * ---------------------------------------------- - * - * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors. - * Thank you all, you're awesome! - */ - var nextId = Sequence.nextId; - /** - * Controlling groups of tweens - * - * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components. - * In these cases, you may want to create your own smaller groups of tweens. - */ - var TWEEN = mainGroup; - // This is the best way to export things in a way that's compatible with both ES - // Modules and CommonJS, without build hacks, and so as not to break the - // existing API. - // https://github.com/rollup/rollup/issues/1961#issuecomment-423037881 - var getAll = TWEEN.getAll.bind(TWEEN); - var removeAll = TWEEN.removeAll.bind(TWEEN); - var add = TWEEN.add.bind(TWEEN); - var remove = TWEEN.remove.bind(TWEEN); - var update = TWEEN.update.bind(TWEEN); - var exports$1 = { - Easing: Easing, - Group: Group, - Interpolation: Interpolation, - now: now$1, - Sequence: Sequence, - nextId: nextId, - Tween: Tween, - VERSION: VERSION, - getAll: getAll, - removeAll: removeAll, - add: add, - remove: remove, - update: update, - }; - - function styleInject(css, ref) { - if (ref === void 0) ref = {}; - var insertAt = ref.insertAt; - - if (!css || typeof document === 'undefined') { - return; - } - - var head = document.head || document.getElementsByTagName('head')[0]; - var style = document.createElement('style'); - style.type = 'text/css'; - - if (insertAt === 'top') { - if (head.firstChild) { - head.insertBefore(style, head.firstChild); - } else { - head.appendChild(style); - } - } else { - head.appendChild(style); - } - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - style.appendChild(document.createTextNode(css)); - } - } - - var css_248z = ".scene-nav-info {\n bottom: 5px;\n width: 100%;\n text-align: center;\n color: slategrey;\n opacity: 0.7;\n font-size: 10px;\n}\n\n.scene-tooltip {\n color: lavender;\n font-size: 15px;\n}\n\n.scene-nav-info, .scene-tooltip {\n position: absolute;\n font-family: sans-serif;\n pointer-events: none;\n}\n\n.scene-container canvas:focus {\n outline: none;\n}"; - styleInject(css_248z); - - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - } - - function _slicedToArray(arr, i) { - return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); - } - - function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); - } - - function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); - } - - function _arrayWithHoles(arr) { - if (Array.isArray(arr)) return arr; - } - - function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); - } - - function _iterableToArrayLimit(arr, i) { - var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; - - if (_i == null) return; - var _arr = []; - var _n = true; - var _d = false; - - var _s, _e; - - try { - for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"] != null) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; - } - - function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); - } - - function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - - return arr2; - } - - function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - - function _nonIterableRest() { - throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - - var three$1 = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists - : { - WebGLRenderer: WebGLRenderer, - Scene: Scene, - // PerspectiveCamera, - OrthographicCamera: OrthographicCamera, - Raycaster: Raycaster, - TextureLoader: TextureLoader, - Vector2: Vector2, - Vector3: Vector3, - Box3: Box3, - Color: Color, - Mesh: Mesh, - SphereGeometry: SphereGeometry, - MeshBasicMaterial: MeshBasicMaterial, - BackSide: BackSide, - EventDispatcher: EventDispatcher, - MOUSE: MOUSE, - Quaternion: Quaternion, - Spherical: Spherical, - Clock: Clock - }; - var threeRenderObjects = index$2({ - props: { - width: { - "default": window.innerWidth, - onChange: function onChange(width, state, prevWidth) { - isNaN(width) && (state.width = prevWidth); - } - }, - height: { - "default": window.innerHeight, - onChange: function onChange(height, state, prevHeight) { - isNaN(height) && (state.height = prevHeight); - } - }, - backgroundColor: { - "default": '#000011' - }, - backgroundImageUrl: {}, - onBackgroundImageLoaded: {}, - showNavInfo: { - "default": true - }, - skyRadius: { - "default": 50000 - }, - objects: { - "default": [] - }, - enablePointerInteraction: { - "default": true, - onChange: function onChange(_, state) { - // Reset hover state - state.hoverObj = null; - if (state.toolTipElem) state.toolTipElem.innerHTML = ''; - }, - triggerUpdate: false - }, - lineHoverPrecision: { - "default": 1, - triggerUpdate: false - }, - hoverOrderComparator: { - "default": function _default() { - return -1; - }, - triggerUpdate: false - }, - // keep existing order by default - hoverFilter: { - "default": function _default() { - return true; - }, - triggerUpdate: false - }, - // exclude objects from interaction - tooltipContent: { - triggerUpdate: false - }, - hoverDuringDrag: { - "default": false, - triggerUpdate: false - }, - clickAfterDrag: { - "default": false, - triggerUpdate: false - }, - onHover: { - "default": function _default() {}, - triggerUpdate: false - }, - onClick: { - "default": function _default() {}, - triggerUpdate: false - }, - onRightClick: { - triggerUpdate: false - } - }, - methods: { - tick: function tick(state) { - if (state.initialised) { - state.controls.update && state.controls.update(state.clock.getDelta()); // timedelta is required for fly controls - - state.postProcessingComposer ? state.postProcessingComposer.render() // if using postprocessing, switch the output to it - : state.renderer.render(state.scene, state.camera); - state.extraRenderers.forEach(function (r) { - return r.render(state.scene, state.camera); - }); - - if (state.enablePointerInteraction) { - // Update tooltip and trigger onHover events - var topObject = null; - - if (state.hoverDuringDrag || !state.isPointerDragging) { - var intersects = this.intersectingObjects(state.pointerPos.x, state.pointerPos.y).filter(function (d) { - return state.hoverFilter(d.object); - }).sort(function (a, b) { - return state.hoverOrderComparator(a.object, b.object); - }); - var topIntersect = intersects.length ? intersects[0] : null; - topObject = topIntersect ? topIntersect.object : null; - state.intersectionPoint = topIntersect ? topIntersect.point : null; - } - - if (topObject !== state.hoverObj) { - state.onHover(topObject, state.hoverObj); - state.toolTipElem.innerHTML = topObject ? index$1(state.tooltipContent)(topObject) || '' : ''; - state.hoverObj = topObject; - } - } - - exports$1.update(); // update camera animation tweens - } - - return this; - }, - getPointerPos: function getPointerPos(state) { - var _state$pointerPos = state.pointerPos, - x = _state$pointerPos.x, - y = _state$pointerPos.y; - return { - x: x, - y: y - }; - }, - cameraPosition: function cameraPosition(state, position, lookAt, transitionDuration) { - var camera = state.camera; // Setter - - if (position && state.initialised) { - var finalPos = position; - var finalLookAt = lookAt || { - x: 0, - y: 0, - z: 0 - }; - - if (!transitionDuration) { - // no animation - setCameraPos(finalPos); - setLookAt(finalLookAt); - } else { - var camPos = Object.assign({}, camera.position); - var camLookAt = getLookAt(); - new exports$1.Tween(camPos).to(finalPos, transitionDuration).easing(exports$1.Easing.Quadratic.Out).onUpdate(setCameraPos).start(); // Face direction in 1/3rd of time - - new exports$1.Tween(camLookAt).to(finalLookAt, transitionDuration / 3).easing(exports$1.Easing.Quadratic.Out).onUpdate(setLookAt).start(); - } - - return this; - } // Getter - - - return Object.assign({}, camera.position, { - lookAt: getLookAt() - }); // - - function setCameraPos(pos) { - var x = pos.x, - y = pos.y, - z = pos.z; - if (x !== undefined) camera.position.x = x; - if (y !== undefined) camera.position.y = y; - if (z !== undefined) camera.position.z = z; - } - - function setLookAt(lookAt) { - state.controls.target = new three$1.Vector3(lookAt.x, lookAt.y, lookAt.z); - } - - function getLookAt() { - return Object.assign(new three$1.Vector3(0, 0, -1000).applyQuaternion(camera.quaternion).add(camera.position)); - } - }, - zoomToFit: function zoomToFit(state) { - var transitionDuration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - var padding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10; - - for (var _len = arguments.length, bboxArgs = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { - bboxArgs[_key - 3] = arguments[_key]; - } - - return this.fitToBbox(this.getBbox.apply(this, bboxArgs), transitionDuration, padding); - }, - fitToBbox: function fitToBbox(state, bbox) { - var transitionDuration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; - var padding = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10; - // based on https://discourse.threejs.org/t/camera-zoom-to-fit-object/936/24 - var camera = state.camera; - - if (bbox) { - var center = new three$1.Vector3(0, 0, 0); // reset camera aim to center - - var maxBoxSide = Math.max.apply(Math, _toConsumableArray(Object.entries(bbox).map(function (_ref) { - var _ref2 = _slicedToArray(_ref, 2), - coordType = _ref2[0], - coords = _ref2[1]; - - return Math.max.apply(Math, _toConsumableArray(coords.map(function (c) { - return Math.abs(center[coordType] - c); - }))); - }))) * 2; // find distance that fits whole bbox within padded fov - - var paddedFov = (1 - padding * 2 / state.height) * camera.fov; - var fitHeightDistance = maxBoxSide / Math.atan(paddedFov * Math.PI / 180); - var fitWidthDistance = fitHeightDistance / camera.aspect; - var distance = Math.max(fitHeightDistance, fitWidthDistance); - - if (distance > 0) { - var newCameraPosition = center.clone().sub(camera.position).normalize().multiplyScalar(-distance); - this.cameraPosition(newCameraPosition, center, transitionDuration); - } - } - - return this; - }, - getBbox: function getBbox(state) { - var objFilter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () { - return true; - }; - var box = new three$1.Box3(new three$1.Vector3(0, 0, 0), new three$1.Vector3(0, 0, 0)); - var objs = state.objects.filter(objFilter); - if (!objs.length) return null; - objs.forEach(function (obj) { - return box.expandByObject(obj); - }); // extract global x,y,z min/max - - return Object.assign.apply(Object, _toConsumableArray(['x', 'y', 'z'].map(function (c) { - return _defineProperty({}, c, [box.min[c], box.max[c]]); - }))); - }, - getScreenCoords: function getScreenCoords(state, x, y, z) { - var vec = new three$1.Vector3(x, y, z); - vec.project(this.camera()); // project to the camera plane - - return { - // align relative pos to canvas dimensions - x: (vec.x + 1) * state.width / 2, - y: -(vec.y - 1) * state.height / 2 - }; - }, - getSceneCoords: function getSceneCoords(state, screenX, screenY) { - var distance = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; - var relCoords = new three$1.Vector2(screenX / state.width * 2 - 1, -(screenY / state.height) * 2 + 1); - var raycaster = new three$1.Raycaster(); - raycaster.setFromCamera(relCoords, state.camera); - return Object.assign({}, raycaster.ray.at(distance, new three$1.Vector3())); - }, - intersectingObjects: function intersectingObjects(state, x, y) { - var relCoords = new three$1.Vector2(x / state.width * 2 - 1, -(y / state.height) * 2 + 1); - var raycaster = new three$1.Raycaster(); - raycaster.params.Line.threshold = state.lineHoverPrecision; // set linePrecision - - raycaster.setFromCamera(relCoords, state.camera); - return raycaster.intersectObjects(state.objects, true); - }, - renderer: function renderer(state) { - return state.renderer; - }, - scene: function scene(state) { - return state.scene; - }, - camera: function camera(state) { - return state.camera; - }, - postProcessingComposer: function postProcessingComposer(state) { - return state.postProcessingComposer; - }, - controls: function controls(state) { - return state.controls; - }, - tbControls: function tbControls(state) { - return state.controls; - } // to be deprecated - - }, - stateInit: function stateInit() { - return { - scene: new three$1.Scene(), - camera: new three$1.OrthographicCamera(), - clock: new three$1.Clock() - }; - }, - init: function init(domNode, state) { - var _ref4 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, - _ref4$controlType = _ref4.controlType, - controlType = _ref4$controlType === void 0 ? 'trackball' : _ref4$controlType, - _ref4$rendererConfig = _ref4.rendererConfig, - rendererConfig = _ref4$rendererConfig === void 0 ? {} : _ref4$rendererConfig, - _ref4$extraRenderers = _ref4.extraRenderers, - extraRenderers = _ref4$extraRenderers === void 0 ? [] : _ref4$extraRenderers, - _ref4$waitForLoadComp = _ref4.waitForLoadComplete, - waitForLoadComplete = _ref4$waitForLoadComp === void 0 ? true : _ref4$waitForLoadComp; - - // Wipe DOM - domNode.innerHTML = ''; // Add relative container - - domNode.appendChild(state.container = document.createElement('div')); - state.container.className = 'scene-container'; - state.container.style.position = 'relative'; // Add nav info section - - state.container.appendChild(state.navInfo = document.createElement('div')); - state.navInfo.className = 'scene-nav-info'; - state.navInfo.textContent = { - orbit: 'Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan', - trackball: 'Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan', - fly: 'WASD: move, R|F: up | down, Q|E: roll, up|down: pitch, left|right: yaw' - }[controlType] || ''; - state.navInfo.style.display = state.showNavInfo ? null : 'none'; // Setup tooltip - - state.toolTipElem = document.createElement('div'); - state.toolTipElem.classList.add('scene-tooltip'); - state.container.appendChild(state.toolTipElem); // Capture pointer coords on move or touchstart - - state.pointerPos = new three$1.Vector2(); - state.pointerPos.x = -2; // Initialize off canvas - - state.pointerPos.y = -2; - ['pointermove', 'pointerdown'].forEach(function (evType) { - return state.container.addEventListener(evType, function (ev) { - // track click state - evType === 'pointerdown' && (state.isPointerPressed = true); // detect point drag - - !state.isPointerDragging && ev.type === 'pointermove' && (ev.pressure > 0 || state.isPointerPressed) // ev.pressure always 0 on Safari, so we used the isPointerPressed tracker - && (ev.pointerType !== 'touch' || ev.movementX === undefined || [ev.movementX, ev.movementY].some(function (m) { - return Math.abs(m) > 1; - })) // relax drag trigger sensitivity on touch events - && (state.isPointerDragging = true); - - if (state.enablePointerInteraction) { - // update the pointer pos - var offset = getOffset(state.container); - state.pointerPos.x = ev.pageX - offset.left; - state.pointerPos.y = ev.pageY - offset.top; // Move tooltip - - state.toolTipElem.style.top = "".concat(state.pointerPos.y, "px"); - state.toolTipElem.style.left = "".concat(state.pointerPos.x, "px"); - state.toolTipElem.style.transform = "translate(-".concat(state.pointerPos.x / state.width * 100, "%, 21px)"); // adjust horizontal position to not exceed canvas boundaries - } - - function getOffset(el) { - var rect = el.getBoundingClientRect(), - scrollLeft = window.pageXOffset || document.documentElement.scrollLeft, - scrollTop = window.pageYOffset || document.documentElement.scrollTop; - return { - top: rect.top + scrollTop, - left: rect.left + scrollLeft - }; - } - }, { - passive: true - }); - }); // Handle click events on objs - - state.container.addEventListener('pointerup', function (ev) { - state.isPointerPressed = false; - - if (state.isPointerDragging) { - state.isPointerDragging = false; - if (!state.clickAfterDrag) return; // don't trigger onClick after pointer drag (camera motion via controls) - } - - requestAnimationFrame(function () { - // trigger click events asynchronously, to allow hoverObj to be set (on frame) - if (ev.button === 0) { - // left-click - state.onClick(state.hoverObj || null, ev, state.intersectionPoint); // trigger background clicks with null - } - - if (ev.button === 2 && state.onRightClick) { - // right-click - state.onRightClick(state.hoverObj || null, ev, state.intersectionPoint); - } - }); - }, { - passive: true, - capture: true - }); // use capture phase to prevent propagation blocking from controls (specifically for fly) - - state.container.addEventListener('contextmenu', function (ev) { - if (state.onRightClick) ev.preventDefault(); // prevent default contextmenu behavior and allow pointerup to fire instead - }); // Setup renderer, camera and controls - - state.renderer = new three$1.WebGLRenderer(Object.assign({ - antialias: true, - alpha: true - }, rendererConfig)); - state.renderer.setPixelRatio(Math.min(2, window.devicePixelRatio)); // clamp device pixel ratio - - state.container.appendChild(state.renderer.domElement); // Setup extra renderers - - state.extraRenderers = extraRenderers; - state.extraRenderers.forEach(function (r) { - // overlay them on top of main renderer - r.domElement.style.position = 'absolute'; - r.domElement.style.top = '0px'; - r.domElement.style.pointerEvents = 'none'; - state.container.appendChild(r.domElement); - }); // configure post-processing composer - - state.postProcessingComposer = new EffectComposer(state.renderer); - state.postProcessingComposer.addPass(new RenderPass(state.scene, state.camera)); // render scene as first pass - // configure controls - - state.controls = new { - trackball: TrackballControls, - orbit: OrbitControls, - fly: FlyControls - }[controlType](state.camera, state.renderer.domElement); - - if (controlType === 'fly') { - state.controls.movementSpeed = 300; - state.controls.rollSpeed = Math.PI / 6; - state.controls.dragToLook = true; - } - - if (controlType === 'trackball' || controlType === 'orbit') { - state.controls.minDistance = 0.1; - state.controls.maxDistance = state.skyRadius; - state.controls.addEventListener('start', function () { - state.controlsEngaged = true; - }); - state.controls.addEventListener('change', function () { - if (state.controlsEngaged) { - state.controlsDragging = true; - } - }); - state.controls.addEventListener('end', function () { - state.controlsEngaged = false; - state.controlsDragging = false; - }); - } - - [state.renderer, state.postProcessingComposer].concat(_toConsumableArray(state.extraRenderers)).forEach(function (r) { - return r.setSize(state.width, state.height); - }); - state.renderer.setSize(state.width, state.height); - state.postProcessingComposer.setSize(state.width, state.height); // state.camera.aspect = state.width/state.height; - // state.camera.updateProjectionMatrix(); - // state.camera.position.z = 1000; - // add sky - - state.scene.add(state.skysphere = new three$1.Mesh()); - state.skysphere.visible = false; - state.loadComplete = state.scene.visible = !waitForLoadComplete; - window.scene = state.scene; - }, - update: function update(state, changedProps) { - // resize canvas - if (state.width && state.height && (changedProps.hasOwnProperty('width') || changedProps.hasOwnProperty('height'))) { - state.container.style.width = state.width; - state.container.style.height = state.height; - [state.renderer, state.postProcessingComposer].concat(_toConsumableArray(state.extraRenderers)).forEach(function (r) { - return r.setSize(state.width, state.height); - }); - state.camera.aspect = state.width / state.height; - state.camera.updateProjectionMatrix(); - } - - if (changedProps.hasOwnProperty('skyRadius') && state.skyRadius) { - state.controls.hasOwnProperty('maxDistance') && changedProps.skyRadius && (state.controls.maxDistance = state.skyRadius); - state.camera.far = state.skyRadius * 2.5; - state.camera.updateProjectionMatrix(); - state.skysphere.geometry = new three$1.SphereGeometry(state.skyRadius); - } - - if (changedProps.hasOwnProperty('backgroundColor')) { - var alpha = parseToRgb(state.backgroundColor).alpha; - if (alpha === undefined) alpha = 1; - state.renderer.setClearColor(new three$1.Color(curriedOpacify(1, state.backgroundColor)), alpha); - } - - if (changedProps.hasOwnProperty('backgroundImageUrl')) { - if (!state.backgroundImageUrl) { - state.skysphere.visible = false; - state.skysphere.material.map = null; - !state.loadComplete && finishLoad(); - } else { - new three$1.TextureLoader().load(state.backgroundImageUrl, function (texture) { - state.skysphere.material = new three$1.MeshBasicMaterial({ - map: texture, - side: three$1.BackSide - }); - state.skysphere.visible = true; // triggered when background image finishes loading (asynchronously to allow 1 frame to load texture) - - state.onBackgroundImageLoaded && setTimeout(state.onBackgroundImageLoaded); - !state.loadComplete && finishLoad(); - }); - } - } - - changedProps.hasOwnProperty('showNavInfo') && (state.navInfo.style.display = state.showNavInfo ? null : 'none'); - - if (changedProps.hasOwnProperty('objects')) { - (changedProps.objects || []).forEach(function (obj) { - return state.scene.remove(obj); - }); // Clear the place - - state.objects.forEach(function (obj) { - return state.scene.add(obj); - }); // Add to scene - } // - - - function finishLoad() { - state.loadComplete = state.scene.visible = true; - } - } - }); - - function linkKapsule (kapsulePropName, kapsuleType) { - var dummyK = new kapsuleType(); // To extract defaults - - return { - linkProp: function linkProp(prop) { - // link property config - return { - "default": dummyK[prop](), - onChange: function onChange(v, state) { - state[kapsulePropName][prop](v); - }, - triggerUpdate: false - }; - }, - linkMethod: function linkMethod(method) { - // link method pass-through - return function (state) { - var kapsuleInstance = state[kapsulePropName]; - - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - var returnVal = kapsuleInstance[method].apply(kapsuleInstance, args); - return returnVal === kapsuleInstance ? this // chain based on the parent object, not the inner kapsule - : returnVal; - }; - } - }; - } - - var three = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists - : { - AmbientLight: AmbientLight, - DirectionalLight: DirectionalLight, - Vector3: Vector3 - }; - - var CAMERA_DISTANCE2NODES_FACTOR = 170; // - // Expose config from forceGraph - - var bindFG = linkKapsule('forceGraph', threeForcegraph); - var linkedFGProps = Object.assign.apply(Object, _toConsumableArray$4(['jsonUrl', 'graphData', 'numDimensions', 'dagMode', 'dagLevelDistance', 'dagNodeFilter', 'onDagError', 'nodeRelSize', 'nodeId', 'nodeVal', 'nodeResolution', 'nodeColor', 'nodeAutoColorBy', 'nodeOpacity', 'nodeVisibility', 'nodeThreeObject', 'nodeThreeObjectExtend', 'linkSource', 'linkTarget', 'linkVisibility', 'linkColor', 'linkAutoColorBy', 'linkOpacity', 'linkWidth', 'linkResolution', 'linkCurvature', 'linkCurveRotation', 'linkMaterial', 'linkThreeObject', 'linkThreeObjectExtend', 'linkPositionUpdate', 'linkDirectionalArrowLength', 'linkDirectionalArrowColor', 'linkDirectionalArrowRelPos', 'linkDirectionalArrowResolution', 'linkDirectionalParticles', 'linkDirectionalParticleSpeed', 'linkDirectionalParticleWidth', 'linkDirectionalParticleColor', 'linkDirectionalParticleResolution', 'forceEngine', 'd3AlphaDecay', 'd3VelocityDecay', 'd3AlphaMin', 'ngraphPhysics', 'warmupTicks', 'cooldownTicks', 'cooldownTime', 'onEngineTick', 'onEngineStop'].map(function (p) { - return _defineProperty$3({}, p, bindFG.linkProp(p)); - }))); - var linkedFGMethods = Object.assign.apply(Object, _toConsumableArray$4(['refresh', 'getGraphBbox', 'd3Force', 'd3ReheatSimulation', 'emitParticle'].map(function (p) { - return _defineProperty$3({}, p, bindFG.linkMethod(p)); - }))); // Expose config from renderObjs - - var bindRenderObjs = linkKapsule('renderObjs', threeRenderObjects); - var linkedRenderObjsProps = Object.assign.apply(Object, _toConsumableArray$4(['width', 'height', 'backgroundColor', 'showNavInfo', 'enablePointerInteraction'].map(function (p) { - return _defineProperty$3({}, p, bindRenderObjs.linkProp(p)); - }))); - var linkedRenderObjsMethods = Object.assign.apply(Object, _toConsumableArray$4(['cameraPosition', 'postProcessingComposer'].map(function (p) { - return _defineProperty$3({}, p, bindRenderObjs.linkMethod(p)); - })).concat([{ - graph2ScreenCoords: bindRenderObjs.linkMethod('getScreenCoords'), - screen2GraphCoords: bindRenderObjs.linkMethod('getSceneCoords') - }])); // - - var _3dForceGraph = index$2({ - props: _objectSpread2$2(_objectSpread2$2({ - nodeLabel: { - "default": 'name', - triggerUpdate: false - }, - linkLabel: { - "default": 'name', - triggerUpdate: false - }, - linkHoverPrecision: { - "default": 1, - onChange: function onChange(p, state) { - return state.renderObjs.lineHoverPrecision(p); - }, - triggerUpdate: false - }, - enableNavigationControls: { - "default": true, - onChange: function onChange(enable, state) { - var controls = state.renderObjs.controls(); - - if (controls) { - controls.enabled = enable; - } - }, - triggerUpdate: false - }, - enableNodeDrag: { - "default": true, - triggerUpdate: false - }, - onNodeDrag: { - "default": function _default() {}, - triggerUpdate: false - }, - onNodeDragEnd: { - "default": function _default() {}, - triggerUpdate: false - }, - onNodeClick: { - triggerUpdate: false - }, - onNodeRightClick: { - triggerUpdate: false - }, - onNodeHover: { - triggerUpdate: false - }, - onLinkClick: { - triggerUpdate: false - }, - onLinkRightClick: { - triggerUpdate: false - }, - onLinkHover: { - triggerUpdate: false - }, - onBackgroundClick: { - triggerUpdate: false - }, - onBackgroundRightClick: { - triggerUpdate: false - } - }, linkedFGProps), linkedRenderObjsProps), - methods: _objectSpread2$2(_objectSpread2$2({ - zoomToFit: function zoomToFit(state, transitionDuration, padding) { - var _state$forceGraph; - - for (var _len = arguments.length, bboxArgs = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { - bboxArgs[_key - 3] = arguments[_key]; - } - - state.renderObjs.fitToBbox((_state$forceGraph = state.forceGraph).getGraphBbox.apply(_state$forceGraph, bboxArgs), transitionDuration, padding); - return this; - }, - pauseAnimation: function pauseAnimation(state) { - if (state.animationFrameRequestId !== null) { - cancelAnimationFrame(state.animationFrameRequestId); - state.animationFrameRequestId = null; - } - - return this; - }, - resumeAnimation: function resumeAnimation(state) { - if (state.animationFrameRequestId === null) { - this._animationCycle(); - } - - return this; - }, - _animationCycle: function _animationCycle(state) { - if (state.enablePointerInteraction) { - // reset canvas cursor (override dragControls cursor) - this.renderer().domElement.style.cursor = null; - } // Frame cycle - - - state.forceGraph.tickFrame(); - state.renderObjs.tick(); - state.animationFrameRequestId = requestAnimationFrame(this._animationCycle); - }, - scene: function scene(state) { - return state.renderObjs.scene(); - }, - // Expose scene - camera: function camera(state) { - return state.renderObjs.camera(); - }, - // Expose camera - renderer: function renderer(state) { - return state.renderObjs.renderer(); - }, - // Expose renderer - controls: function controls(state) { - return state.renderObjs.controls(); - }, - // Expose controls - tbControls: function tbControls(state) { - return state.renderObjs.tbControls(); - }, - // To be deprecated - _destructor: function _destructor() { - this.pauseAnimation(); - this.graphData({ - nodes: [], - links: [] - }); - } - }, linkedFGMethods), linkedRenderObjsMethods), - stateInit: function stateInit(_ref5) { - var controlType = _ref5.controlType, - rendererConfig = _ref5.rendererConfig, - extraRenderers = _ref5.extraRenderers; - return { - forceGraph: new threeForcegraph(), - renderObjs: threeRenderObjects({ - controlType: controlType, - rendererConfig: rendererConfig, - extraRenderers: extraRenderers - }) - }; - }, - init: function init(domNode, state) { - // Wipe DOM - domNode.innerHTML = ''; // Add relative container - - domNode.appendChild(state.container = document.createElement('div')); - state.container.style.position = 'relative'; // Add renderObjs - - var roDomNode = document.createElement('div'); - state.container.appendChild(roDomNode); - state.renderObjs(roDomNode); - var camera = state.renderObjs.camera(); - var renderer = state.renderObjs.renderer(); - var controls = state.renderObjs.controls(); - controls.enabled = !!state.enableNavigationControls; - state.lastSetCameraZ = camera.position.z; // Add info space - - var infoElem; - state.container.appendChild(infoElem = document.createElement('div')); - infoElem.className = 'graph-info-msg'; - infoElem.textContent = ''; // config forcegraph - - state.forceGraph.onLoading(function () { - infoElem.textContent = 'Loading...'; - }).onFinishLoading(function () { - infoElem.textContent = ''; - }).onUpdate(function () { - // sync graph data structures - state.graphData = state.forceGraph.graphData(); // re-aim camera, if still in default position (not user modified) - - if (camera.position.x === 0 && camera.position.y === 0 && camera.position.z === state.lastSetCameraZ && state.graphData.nodes.length) { - camera.lookAt(state.forceGraph.position); - state.lastSetCameraZ = camera.position.z = Math.cbrt(state.graphData.nodes.length) * CAMERA_DISTANCE2NODES_FACTOR; - } - }).onFinishUpdate(function () { - // Setup node drag interaction - if (state._dragControls) { - var curNodeDrag = state.graphData.nodes.find(function (node) { - return node.__initialFixedPos && !node.__disposeControlsAfterDrag; - }); // detect if there's a node being dragged using the existing drag controls - - if (curNodeDrag) { - curNodeDrag.__disposeControlsAfterDrag = true; // postpone previous controls disposal until drag ends - } else { - state._dragControls.dispose(); // cancel previous drag controls - - } - - state._dragControls = undefined; - } - - if (state.enableNodeDrag && state.enablePointerInteraction && state.forceEngine === 'd3') { - // Can't access node positions programatically in ngraph - var dragControls = state._dragControls = new DragControls(state.graphData.nodes.map(function (node) { - return node.__threeObj; - }).filter(function (obj) { - return obj; - }), camera, renderer.domElement); - dragControls.addEventListener('dragstart', function (event) { - controls.enabled = false; // Disable controls while dragging - // track drag object movement - - event.object.__initialPos = event.object.position.clone(); - event.object.__prevPos = event.object.position.clone(); - - var node = getGraphObj(event.object).__data; - - !node.__initialFixedPos && (node.__initialFixedPos = { - fx: node.fx, - fy: node.fy, - fz: node.fz - }); - !node.__initialPos && (node.__initialPos = { - x: node.x, - y: node.y, - z: node.z - }); // lock node - - ['x', 'y', 'z'].forEach(function (c) { - return node["f".concat(c)] = node[c]; - }); // drag cursor - - renderer.domElement.classList.add('grabbable'); - }); - dragControls.addEventListener('drag', function (event) { - var nodeObj = getGraphObj(event.object); - - if (!event.object.hasOwnProperty('__graphObjType')) { - // If dragging a child of the node, update the node object instead - var initPos = event.object.__initialPos; - var prevPos = event.object.__prevPos; - var _newPos = event.object.position; - nodeObj.position.add(_newPos.clone().sub(prevPos)); // translate node object by the motion delta - - prevPos.copy(_newPos); - - _newPos.copy(initPos); // reset child back to its initial position - - } - - var node = nodeObj.__data; - var newPos = nodeObj.position; - var translate = { - x: newPos.x - node.x, - y: newPos.y - node.y, - z: newPos.z - node.z - }; // Move fx/fy/fz (and x/y/z) of nodes based on object new position - - ['x', 'y', 'z'].forEach(function (c) { - return node["f".concat(c)] = node[c] = newPos[c]; - }); - state.forceGraph.d3AlphaTarget(0.3) // keep engine running at low intensity throughout drag - .resetCountdown(); // prevent freeze while dragging - - node.__dragged = true; - state.onNodeDrag(node, translate); - }); - dragControls.addEventListener('dragend', function (event) { - delete event.object.__initialPos; // remove tracking attributes - - delete event.object.__prevPos; - - var node = getGraphObj(event.object).__data; // dispose previous controls if needed - - - if (node.__disposeControlsAfterDrag) { - dragControls.dispose(); - delete node.__disposeControlsAfterDrag; - } - - var initFixedPos = node.__initialFixedPos; - var initPos = node.__initialPos; - var translate = { - x: initPos.x - node.x, - y: initPos.y - node.y, - z: initPos.z - node.z - }; - - if (initFixedPos) { - ['x', 'y', 'z'].forEach(function (c) { - var fc = "f".concat(c); - - if (initFixedPos[fc] === undefined) { - delete node[fc]; - } - }); - delete node.__initialFixedPos; - delete node.__initialPos; - - if (node.__dragged) { - delete node.__dragged; - state.onNodeDragEnd(node, translate); - } - } - - state.forceGraph.d3AlphaTarget(0) // release engine low intensity - .resetCountdown(); // let the engine readjust after releasing fixed nodes - - if (state.enableNavigationControls) { - controls.enabled = true; // Re-enable controls - - controls.domElement && controls.domElement.ownerDocument && controls.domElement.ownerDocument.dispatchEvent( // simulate mouseup to ensure the controls don't take over after dragend - new PointerEvent('pointerup', { - pointerType: 'mouse' - })); - } // clear cursor - - - renderer.domElement.classList.remove('grabbable'); - }); - } - }); // config renderObjs - - state.renderObjs.objects([// Populate scene - new three.AmbientLight(0xbbbbbb), new three.DirectionalLight(0xffffff, 0.6), state.forceGraph]).hoverOrderComparator(function (a, b) { - // Prioritize graph objects - var aObj = getGraphObj(a); - if (!aObj) return 1; - var bObj = getGraphObj(b); - if (!bObj) return -1; // Prioritize nodes over links - - var isNode = function isNode(o) { - return o.__graphObjType === 'node'; - }; - - return isNode(bObj) - isNode(aObj); - }).tooltipContent(function (obj) { - var graphObj = getGraphObj(obj); - return graphObj ? index$1(state["".concat(graphObj.__graphObjType, "Label")])(graphObj.__data) || '' : ''; - }).hoverDuringDrag(false).onHover(function (obj) { - // Update tooltip and trigger onHover events - var hoverObj = getGraphObj(obj); - - if (hoverObj !== state.hoverObj) { - var prevObjType = state.hoverObj ? state.hoverObj.__graphObjType : null; - var prevObjData = state.hoverObj ? state.hoverObj.__data : null; - var objType = hoverObj ? hoverObj.__graphObjType : null; - var objData = hoverObj ? hoverObj.__data : null; - - if (prevObjType && prevObjType !== objType) { - // Hover out - var fn = state["on".concat(prevObjType === 'node' ? 'Node' : 'Link', "Hover")]; - fn && fn(null, prevObjData); - } - - if (objType) { - // Hover in - var _fn = state["on".concat(objType === 'node' ? 'Node' : 'Link', "Hover")]; - _fn && _fn(objData, prevObjType === objType ? prevObjData : null); - } // set pointer if hovered object is clickable - - - renderer.domElement.classList[hoverObj && state["on".concat(objType === 'node' ? 'Node' : 'Link', "Click")] || !hoverObj && state.onBackgroundClick ? 'add' : 'remove']('clickable'); - state.hoverObj = hoverObj; - } - }).clickAfterDrag(false).onClick(function (obj, ev) { - var graphObj = getGraphObj(obj); - - if (graphObj) { - var fn = state["on".concat(graphObj.__graphObjType === 'node' ? 'Node' : 'Link', "Click")]; - fn && fn(graphObj.__data, ev); - } else { - state.onBackgroundClick && state.onBackgroundClick(ev); - } - }).onRightClick(function (obj, ev) { - // Handle right-click events - var graphObj = getGraphObj(obj); - - if (graphObj) { - var fn = state["on".concat(graphObj.__graphObjType === 'node' ? 'Node' : 'Link', "RightClick")]; - fn && fn(graphObj.__data, ev); - } else { - state.onBackgroundRightClick && state.onBackgroundRightClick(ev); - } - }); // - // Kick-off renderer - - this._animationCycle(); - } - }); // - - function getGraphObj(object) { - var obj = object; // recurse up object chain until finding the graph object - - while (obj && !obj.hasOwnProperty('__graphObjType')) { - obj = obj.parent; - } - - return obj; - } - - return _3dForceGraph; - -}))); -//# sourceMappingURL=3d-force-graph.js.map diff --git a/src/citationnet/static/lib/3d-force-graph.js.map b/src/citationnet/static/lib/3d-force-graph.js.map deleted file mode 100644 index 95802c9..0000000 --- a/src/citationnet/static/lib/3d-force-graph.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"3d-force-graph.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../node_modules/three/build/three.module.js","../node_modules/three/examples/jsm/controls/DragControls.js","../node_modules/d3-force-3d/src/center.js","../node_modules/d3-binarytree/src/add.js","../node_modules/d3-binarytree/src/cover.js","../node_modules/d3-binarytree/src/data.js","../node_modules/d3-binarytree/src/extent.js","../node_modules/d3-binarytree/src/half.js","../node_modules/d3-binarytree/src/find.js","../node_modules/d3-binarytree/src/remove.js","../node_modules/d3-binarytree/src/root.js","../node_modules/d3-binarytree/src/size.js","../node_modules/d3-binarytree/src/visit.js","../node_modules/d3-binarytree/src/visitAfter.js","../node_modules/d3-binarytree/src/x.js","../node_modules/d3-binarytree/src/binarytree.js","../node_modules/d3-quadtree/src/add.js","../node_modules/d3-quadtree/src/cover.js","../node_modules/d3-quadtree/src/data.js","../node_modules/d3-quadtree/src/extent.js","../node_modules/d3-quadtree/src/quad.js","../node_modules/d3-quadtree/src/find.js","../node_modules/d3-quadtree/src/remove.js","../node_modules/d3-quadtree/src/root.js","../node_modules/d3-quadtree/src/size.js","../node_modules/d3-quadtree/src/visit.js","../node_modules/d3-quadtree/src/visitAfter.js","../node_modules/d3-quadtree/src/x.js","../node_modules/d3-quadtree/src/y.js","../node_modules/d3-quadtree/src/quadtree.js","../node_modules/d3-octree/src/add.js","../node_modules/d3-octree/src/cover.js","../node_modules/d3-octree/src/data.js","../node_modules/d3-octree/src/extent.js","../node_modules/d3-octree/src/octant.js","../node_modules/d3-octree/src/find.js","../node_modules/d3-octree/src/remove.js","../node_modules/d3-octree/src/root.js","../node_modules/d3-octree/src/size.js","../node_modules/d3-octree/src/visit.js","../node_modules/d3-octree/src/visitAfter.js","../node_modules/d3-octree/src/x.js","../node_modules/d3-octree/src/y.js","../node_modules/d3-octree/src/z.js","../node_modules/d3-octree/src/octree.js","../node_modules/d3-force-3d/src/constant.js","../node_modules/d3-force-3d/src/jiggle.js","../node_modules/d3-force-3d/src/link.js","../node_modules/d3-dispatch/src/dispatch.js","../node_modules/d3-timer/src/timer.js","../node_modules/d3-force-3d/src/lcg.js","../node_modules/d3-force-3d/src/simulation.js","../node_modules/d3-force-3d/src/manyBody.js","../node_modules/d3-force-3d/src/radial.js","../node_modules/ngraph.events/index.js","../node_modules/ngraph.graph/index.js","../node_modules/ngraph.forcelayout/lib/codeGenerators/getVariableName.js","../node_modules/ngraph.forcelayout/lib/codeGenerators/createPatternBuilder.js","../node_modules/ngraph.forcelayout/lib/codeGenerators/generateCreateBody.js","../node_modules/ngraph.forcelayout/lib/codeGenerators/generateQuadTree.js","../node_modules/ngraph.forcelayout/lib/codeGenerators/generateBounds.js","../node_modules/ngraph.forcelayout/lib/codeGenerators/generateCreateDragForce.js","../node_modules/ngraph.forcelayout/lib/codeGenerators/generateCreateSpringForce.js","../node_modules/ngraph.forcelayout/lib/codeGenerators/generateIntegrator.js","../node_modules/ngraph.forcelayout/lib/spring.js","../node_modules/ngraph.merge/index.js","../node_modules/ngraph.random/index.js","../node_modules/ngraph.forcelayout/lib/createPhysicsSimulator.js","../node_modules/ngraph.forcelayout/index.js","../node_modules/debounce/index.js","../node_modules/kapsule/dist/kapsule.module.js","../node_modules/accessor-fn/dist/accessor-fn.module.js","../node_modules/d3-array/src/max.js","../node_modules/d3-array/src/min.js","../node_modules/index-array-by/dist/index-array-by.module.js","../node_modules/data-joint/dist/data-joint.module.js","../node_modules/d3-scale/src/init.js","../node_modules/d3-scale/src/ordinal.js","../node_modules/d3-scale-chromatic/src/colors.js","../node_modules/d3-scale-chromatic/src/categorical/Paired.js","../node_modules/tinycolor2/tinycolor.js","../node_modules/three-forcegraph/dist/three-forcegraph.module.js","../node_modules/three/examples/jsm/controls/TrackballControls.js","../node_modules/three/examples/jsm/controls/OrbitControls.js","../node_modules/three/examples/jsm/controls/FlyControls.js","../node_modules/three/examples/jsm/shaders/CopyShader.js","../node_modules/three/examples/jsm/postprocessing/Pass.js","../node_modules/three/examples/jsm/postprocessing/ShaderPass.js","../node_modules/three/examples/jsm/postprocessing/MaskPass.js","../node_modules/three/examples/jsm/postprocessing/EffectComposer.js","../node_modules/three/examples/jsm/postprocessing/RenderPass.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/esm/construct.js","../node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../node_modules/polished/dist/polished.esm.js","../node_modules/@tweenjs/tween.js/dist/tween.esm.js","../node_modules/three-render-objects/dist/three-render-objects.module.js","../src/kapsule-link.js","../src/3d-force-graph.js"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","// threejs.org/license\nconst REVISION = '123';\nconst MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };\nconst TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };\nconst CullFaceNone = 0;\nconst CullFaceBack = 1;\nconst CullFaceFront = 2;\nconst CullFaceFrontBack = 3;\nconst BasicShadowMap = 0;\nconst PCFShadowMap = 1;\nconst PCFSoftShadowMap = 2;\nconst VSMShadowMap = 3;\nconst FrontSide = 0;\nconst BackSide = 1;\nconst DoubleSide = 2;\nconst FlatShading = 1;\nconst SmoothShading = 2;\nconst NoBlending = 0;\nconst NormalBlending = 1;\nconst AdditiveBlending = 2;\nconst SubtractiveBlending = 3;\nconst MultiplyBlending = 4;\nconst CustomBlending = 5;\nconst AddEquation = 100;\nconst SubtractEquation = 101;\nconst ReverseSubtractEquation = 102;\nconst MinEquation = 103;\nconst MaxEquation = 104;\nconst ZeroFactor = 200;\nconst OneFactor = 201;\nconst SrcColorFactor = 202;\nconst OneMinusSrcColorFactor = 203;\nconst SrcAlphaFactor = 204;\nconst OneMinusSrcAlphaFactor = 205;\nconst DstAlphaFactor = 206;\nconst OneMinusDstAlphaFactor = 207;\nconst DstColorFactor = 208;\nconst OneMinusDstColorFactor = 209;\nconst SrcAlphaSaturateFactor = 210;\nconst NeverDepth = 0;\nconst AlwaysDepth = 1;\nconst LessDepth = 2;\nconst LessEqualDepth = 3;\nconst EqualDepth = 4;\nconst GreaterEqualDepth = 5;\nconst GreaterDepth = 6;\nconst NotEqualDepth = 7;\nconst MultiplyOperation = 0;\nconst MixOperation = 1;\nconst AddOperation = 2;\nconst NoToneMapping = 0;\nconst LinearToneMapping = 1;\nconst ReinhardToneMapping = 2;\nconst CineonToneMapping = 3;\nconst ACESFilmicToneMapping = 4;\nconst CustomToneMapping = 5;\n\nconst UVMapping = 300;\nconst CubeReflectionMapping = 301;\nconst CubeRefractionMapping = 302;\nconst EquirectangularReflectionMapping = 303;\nconst EquirectangularRefractionMapping = 304;\nconst CubeUVReflectionMapping = 306;\nconst CubeUVRefractionMapping = 307;\nconst RepeatWrapping = 1000;\nconst ClampToEdgeWrapping = 1001;\nconst MirroredRepeatWrapping = 1002;\nconst NearestFilter = 1003;\nconst NearestMipmapNearestFilter = 1004;\nconst NearestMipMapNearestFilter = 1004;\nconst NearestMipmapLinearFilter = 1005;\nconst NearestMipMapLinearFilter = 1005;\nconst LinearFilter = 1006;\nconst LinearMipmapNearestFilter = 1007;\nconst LinearMipMapNearestFilter = 1007;\nconst LinearMipmapLinearFilter = 1008;\nconst LinearMipMapLinearFilter = 1008;\nconst UnsignedByteType = 1009;\nconst ByteType = 1010;\nconst ShortType = 1011;\nconst UnsignedShortType = 1012;\nconst IntType = 1013;\nconst UnsignedIntType = 1014;\nconst FloatType = 1015;\nconst HalfFloatType = 1016;\nconst UnsignedShort4444Type = 1017;\nconst UnsignedShort5551Type = 1018;\nconst UnsignedShort565Type = 1019;\nconst UnsignedInt248Type = 1020;\nconst AlphaFormat = 1021;\nconst RGBFormat = 1022;\nconst RGBAFormat = 1023;\nconst LuminanceFormat = 1024;\nconst LuminanceAlphaFormat = 1025;\nconst RGBEFormat = RGBAFormat;\nconst DepthFormat = 1026;\nconst DepthStencilFormat = 1027;\nconst RedFormat = 1028;\nconst RedIntegerFormat = 1029;\nconst RGFormat = 1030;\nconst RGIntegerFormat = 1031;\nconst RGBIntegerFormat = 1032;\nconst RGBAIntegerFormat = 1033;\n\nconst RGB_S3TC_DXT1_Format = 33776;\nconst RGBA_S3TC_DXT1_Format = 33777;\nconst RGBA_S3TC_DXT3_Format = 33778;\nconst RGBA_S3TC_DXT5_Format = 33779;\nconst RGB_PVRTC_4BPPV1_Format = 35840;\nconst RGB_PVRTC_2BPPV1_Format = 35841;\nconst RGBA_PVRTC_4BPPV1_Format = 35842;\nconst RGBA_PVRTC_2BPPV1_Format = 35843;\nconst RGB_ETC1_Format = 36196;\nconst RGB_ETC2_Format = 37492;\nconst RGBA_ETC2_EAC_Format = 37496;\nconst RGBA_ASTC_4x4_Format = 37808;\nconst RGBA_ASTC_5x4_Format = 37809;\nconst RGBA_ASTC_5x5_Format = 37810;\nconst RGBA_ASTC_6x5_Format = 37811;\nconst RGBA_ASTC_6x6_Format = 37812;\nconst RGBA_ASTC_8x5_Format = 37813;\nconst RGBA_ASTC_8x6_Format = 37814;\nconst RGBA_ASTC_8x8_Format = 37815;\nconst RGBA_ASTC_10x5_Format = 37816;\nconst RGBA_ASTC_10x6_Format = 37817;\nconst RGBA_ASTC_10x8_Format = 37818;\nconst RGBA_ASTC_10x10_Format = 37819;\nconst RGBA_ASTC_12x10_Format = 37820;\nconst RGBA_ASTC_12x12_Format = 37821;\nconst RGBA_BPTC_Format = 36492;\nconst SRGB8_ALPHA8_ASTC_4x4_Format = 37840;\nconst SRGB8_ALPHA8_ASTC_5x4_Format = 37841;\nconst SRGB8_ALPHA8_ASTC_5x5_Format = 37842;\nconst SRGB8_ALPHA8_ASTC_6x5_Format = 37843;\nconst SRGB8_ALPHA8_ASTC_6x6_Format = 37844;\nconst SRGB8_ALPHA8_ASTC_8x5_Format = 37845;\nconst SRGB8_ALPHA8_ASTC_8x6_Format = 37846;\nconst SRGB8_ALPHA8_ASTC_8x8_Format = 37847;\nconst SRGB8_ALPHA8_ASTC_10x5_Format = 37848;\nconst SRGB8_ALPHA8_ASTC_10x6_Format = 37849;\nconst SRGB8_ALPHA8_ASTC_10x8_Format = 37850;\nconst SRGB8_ALPHA8_ASTC_10x10_Format = 37851;\nconst SRGB8_ALPHA8_ASTC_12x10_Format = 37852;\nconst SRGB8_ALPHA8_ASTC_12x12_Format = 37853;\nconst LoopOnce = 2200;\nconst LoopRepeat = 2201;\nconst LoopPingPong = 2202;\nconst InterpolateDiscrete = 2300;\nconst InterpolateLinear = 2301;\nconst InterpolateSmooth = 2302;\nconst ZeroCurvatureEnding = 2400;\nconst ZeroSlopeEnding = 2401;\nconst WrapAroundEnding = 2402;\nconst NormalAnimationBlendMode = 2500;\nconst AdditiveAnimationBlendMode = 2501;\nconst TrianglesDrawMode = 0;\nconst TriangleStripDrawMode = 1;\nconst TriangleFanDrawMode = 2;\nconst LinearEncoding = 3000;\nconst sRGBEncoding = 3001;\nconst GammaEncoding = 3007;\nconst RGBEEncoding = 3002;\nconst LogLuvEncoding = 3003;\nconst RGBM7Encoding = 3004;\nconst RGBM16Encoding = 3005;\nconst RGBDEncoding = 3006;\nconst BasicDepthPacking = 3200;\nconst RGBADepthPacking = 3201;\nconst TangentSpaceNormalMap = 0;\nconst ObjectSpaceNormalMap = 1;\n\nconst ZeroStencilOp = 0;\nconst KeepStencilOp = 7680;\nconst ReplaceStencilOp = 7681;\nconst IncrementStencilOp = 7682;\nconst DecrementStencilOp = 7683;\nconst IncrementWrapStencilOp = 34055;\nconst DecrementWrapStencilOp = 34056;\nconst InvertStencilOp = 5386;\n\nconst NeverStencilFunc = 512;\nconst LessStencilFunc = 513;\nconst EqualStencilFunc = 514;\nconst LessEqualStencilFunc = 515;\nconst GreaterStencilFunc = 516;\nconst NotEqualStencilFunc = 517;\nconst GreaterEqualStencilFunc = 518;\nconst AlwaysStencilFunc = 519;\n\nconst StaticDrawUsage = 35044;\nconst DynamicDrawUsage = 35048;\nconst StreamDrawUsage = 35040;\nconst StaticReadUsage = 35045;\nconst DynamicReadUsage = 35049;\nconst StreamReadUsage = 35041;\nconst StaticCopyUsage = 35046;\nconst DynamicCopyUsage = 35050;\nconst StreamCopyUsage = 35042;\n\nconst GLSL1 = \"100\";\nconst GLSL3 = \"300 es\";\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nfunction EventDispatcher() {}\n\nObject.assign( EventDispatcher.prototype, {\n\n\taddEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t},\n\n\thasEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tconst listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t},\n\n\tremoveEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tconst index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tdispatchEvent: function ( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nconst _lut = [];\n\nfor ( let i = 0; i < 256; i ++ ) {\n\n\t_lut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 );\n\n}\n\nlet _seed = 1234567;\n\nconst MathUtils = {\n\n\tDEG2RAD: Math.PI / 180,\n\tRAD2DEG: 180 / Math.PI,\n\n\tgenerateUUID: function () {\n\n\t\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n\t\tconst d0 = Math.random() * 0xffffffff | 0;\n\t\tconst d1 = Math.random() * 0xffffffff | 0;\n\t\tconst d2 = Math.random() * 0xffffffff | 0;\n\t\tconst d3 = Math.random() * 0xffffffff | 0;\n\t\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t\t// .toUpperCase() here flattens concatenated strings to save heap memory space.\n\t\treturn uuid.toUpperCase();\n\n\t},\n\n\tclamp: function ( value, min, max ) {\n\n\t\treturn Math.max( min, Math.min( max, value ) );\n\n\t},\n\n\t// compute euclidian modulo of m % n\n\t// https://en.wikipedia.org/wiki/Modulo_operation\n\n\teuclideanModulo: function ( n, m ) {\n\n\t\treturn ( ( n % m ) + m ) % m;\n\n\t},\n\n\t// Linear mapping from range to range \n\n\tmapLinear: function ( x, a1, a2, b1, b2 ) {\n\n\t\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n\t},\n\n\t// https://en.wikipedia.org/wiki/Linear_interpolation\n\n\tlerp: function ( x, y, t ) {\n\n\t\treturn ( 1 - t ) * x + t * y;\n\n\t},\n\n\t// http://en.wikipedia.org/wiki/Smoothstep\n\n\tsmoothstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * ( 3 - 2 * x );\n\n\t},\n\n\tsmootherstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n\t},\n\n\t// Random integer from interval\n\n\trandInt: function ( low, high ) {\n\n\t\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n\t},\n\n\t// Random float from interval\n\n\trandFloat: function ( low, high ) {\n\n\t\treturn low + Math.random() * ( high - low );\n\n\t},\n\n\t// Random float from <-range/2, range/2> interval\n\n\trandFloatSpread: function ( range ) {\n\n\t\treturn range * ( 0.5 - Math.random() );\n\n\t},\n\n\t// Deterministic pseudo-random float in the interval [ 0, 1 ]\n\n\tseededRandom: function ( s ) {\n\n\t\tif ( s !== undefined ) _seed = s % 2147483647;\n\n\t\t// Park-Miller algorithm\n\n\t\t_seed = _seed * 16807 % 2147483647;\n\n\t\treturn ( _seed - 1 ) / 2147483646;\n\n\t},\n\n\tdegToRad: function ( degrees ) {\n\n\t\treturn degrees * MathUtils.DEG2RAD;\n\n\t},\n\n\tradToDeg: function ( radians ) {\n\n\t\treturn radians * MathUtils.RAD2DEG;\n\n\t},\n\n\tisPowerOfTwo: function ( value ) {\n\n\t\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n\t},\n\n\tceilPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n\t},\n\n\tfloorPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n\t},\n\n\tsetQuaternionFromProperEuler: function ( q, a, b, c, order ) {\n\n\t\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t\t// rotations are applied to the axes in the order specified by 'order'\n\t\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t\t// angles are in radians\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c2 = cos( b / 2 );\n\t\tconst s2 = sin( b / 2 );\n\n\t\tconst c13 = cos( ( a + c ) / 2 );\n\t\tconst s13 = sin( ( a + c ) / 2 );\n\n\t\tconst c1_3 = cos( ( a - c ) / 2 );\n\t\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\t\tconst c3_1 = cos( ( c - a ) / 2 );\n\t\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYX':\n\t\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZY':\n\t\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXZ':\n\t\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZX':\n\t\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXY':\n\t\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYZ':\n\t\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t}\n\n};\n\nclass Vector2 {\n\n\tconstructor( x = 0, y = 0 ) {\n\n\t\tObject.defineProperty( this, 'isVector2', { value: true } );\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.x;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.x = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.y;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.y = value;\n\n\t}\n\n\tset( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tangle() {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tconst angle = Math.atan2( - this.y, - this.x ) + Math.PI;\n\n\t\treturn angle;\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t}\n\n\trotateAround( center, angle ) {\n\n\t\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tconst x = this.x - center.x;\n\t\tconst y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Matrix3 {\n\n\tconstructor() {\n\n\t\tObject.defineProperty( this, 'isMatrix3', { value: true } );\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t];\n\n\t\tif ( arguments.length > 0 ) {\n\n\t\t\tconsole.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix4( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t}\n\n\tinvert() {\n\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\ttranspose() {\n\n\t\tlet tmp;\n\t\tconst m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tgetNormalMatrix( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).copy( this ).invert().transpose();\n\n\t}\n\n\ttransposeIntoArray( r ) {\n\n\t\tconst m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tconst c = Math.cos( rotation );\n\t\tconst s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t}\n\n\tscale( sx, sy ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx;\n\t\tte[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy;\n\n\t\treturn this;\n\n\t}\n\n\trotate( theta ) {\n\n\t\tconst c = Math.cos( theta );\n\t\tconst s = Math.sin( theta );\n\n\t\tconst te = this.elements;\n\n\t\tconst a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];\n\t\tconst a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ];\n\n\t\tte[ 0 ] = c * a11 + s * a21;\n\t\tte[ 3 ] = c * a12 + s * a22;\n\t\tte[ 6 ] = c * a13 + s * a23;\n\n\t\tte[ 1 ] = - s * a11 + c * a21;\n\t\tte[ 4 ] = - s * a12 + c * a22;\n\t\tte[ 7 ] = - s * a13 + c * a23;\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( tx, ty ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ];\n\t\tte[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nlet _canvas;\n\nconst ImageUtils = {\n\n\tgetDataURL: function ( image ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement == 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n};\n\nlet textureId = 0;\n\nfunction Texture( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1, encoding = LinearEncoding ) {\n\n\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\n\tthis.image = image;\n\tthis.mipmaps = [];\n\n\tthis.mapping = mapping;\n\n\tthis.wrapS = wrapS;\n\tthis.wrapT = wrapT;\n\n\tthis.magFilter = magFilter;\n\tthis.minFilter = minFilter;\n\n\tthis.anisotropy = anisotropy;\n\n\tthis.format = format;\n\tthis.internalFormat = null;\n\tthis.type = type;\n\n\tthis.offset = new Vector2( 0, 0 );\n\tthis.repeat = new Vector2( 1, 1 );\n\tthis.center = new Vector2( 0, 0 );\n\tthis.rotation = 0;\n\n\tthis.matrixAutoUpdate = true;\n\tthis.matrix = new Matrix3();\n\n\tthis.generateMipmaps = true;\n\tthis.premultiplyAlpha = false;\n\tthis.flipY = true;\n\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t//\n\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\tthis.encoding = encoding;\n\n\tthis.version = 0;\n\tthis.onUpdate = null;\n\n}\n\nTexture.DEFAULT_IMAGE = undefined;\nTexture.DEFAULT_MAPPING = UVMapping;\n\nTexture.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Texture,\n\n\tisTexture: true,\n\n\tupdateMatrix: function () {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.image = source.image;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.internalFormat = source.internalFormat;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.encoding = source.encoding;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\tmapping: this.mapping,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\ttype: this.type,\n\t\t\tencoding: this.encoding,\n\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY,\n\n\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\n\n\t\t};\n\n\t\tif ( this.image !== undefined ) {\n\n\t\t\t// TODO: Move to THREE.Image\n\n\t\t\tconst image = this.image;\n\n\t\t\tif ( image.uuid === undefined ) {\n\n\t\t\t\timage.uuid = MathUtils.generateUUID(); // UGH\n\n\t\t\t}\n\n\t\t\tif ( ! isRootObject && meta.images[ image.uuid ] === undefined ) {\n\n\t\t\t\tlet url;\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\t// process array of images e.g. CubeTexture\n\n\t\t\t\t\turl = [];\n\n\t\t\t\t\tfor ( let i = 0, l = image.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t// check cube texture with data textures\n\n\t\t\t\t\t\tif ( image[ i ].isDataTexture ) {\n\n\t\t\t\t\t\t\turl.push( serializeImage( image[ i ].image ) );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\turl.push( serializeImage( image[ i ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// process single image\n\n\t\t\t\t\turl = serializeImage( image );\n\n\t\t\t\t}\n\n\t\t\t\tmeta.images[ image.uuid ] = {\n\t\t\t\t\tuuid: image.uuid,\n\t\t\t\t\turl: url\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\toutput.image = image.uuid;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t},\n\n\ttransformUv: function ( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t\treturn uv;\n\n\t}\n\n} );\n\nObject.defineProperty( Texture.prototype, \"needsUpdate\", {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.prototype.slice.call( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nclass Vector4 {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tObject.defineProperty( this, 'isVector4', { value: true } );\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.z;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.z = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.w;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.w = value;\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tsetAxisAngleFromQuaternion( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tconst s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetAxisAngleFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tlet angle, x, y, z; // variables for result\n\t\tconst epsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tconst xx = ( m11 + 1 ) / 2;\n\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\tconst yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\t\t( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\t\tthis.w = Math.max( minVal, Math.min( maxVal, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\t\tthis.w = Math.random();\n\n\t\treturn this;\n\n\t}\n\n}\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nfunction WebGLRenderTarget( width, height, options ) {\n\n\tthis.width = width;\n\tthis.height = height;\n\n\tthis.scissor = new Vector4( 0, 0, width, height );\n\tthis.scissorTest = false;\n\n\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\toptions = options || {};\n\n\tthis.texture = new Texture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\tthis.texture.image = {};\n\tthis.texture.image.width = width;\n\tthis.texture.image.height = height;\n\n\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false;\n\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n}\n\nWebGLRenderTarget.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: WebGLRenderTarget,\n\n\tisWebGLRenderTarget: true,\n\n\tsetSize: function ( width, height ) {\n\n\t\tif ( this.width !== width || this.height !== height ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\n\t\t\tthis.texture.image.width = width;\n\t\t\tthis.texture.image.height = height;\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.texture = source.texture.clone();\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\t\tthis.depthTexture = source.depthTexture;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\nfunction WebGLMultisampleRenderTarget( width, height, options ) {\n\n\tWebGLRenderTarget.call( this, width, height, options );\n\n\tthis.samples = 4;\n\n}\n\nWebGLMultisampleRenderTarget.prototype = Object.assign( Object.create( WebGLRenderTarget.prototype ), {\n\n\tconstructor: WebGLMultisampleRenderTarget,\n\n\tisWebGLMultisampleRenderTarget: true,\n\n\tcopy: function ( source ) {\n\n\t\tWebGLRenderTarget.prototype.copy.call( this, source );\n\n\t\tthis.samples = source.samples;\n\n\t\treturn this;\n\n\t}\n\n} );\n\nclass Quaternion {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tObject.defineProperty( this, 'isQuaternion', { value: true } );\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\tstatic slerp( qa, qb, qm, t ) {\n\n\t\treturn qm.copy( qa ).slerp( qb, t );\n\n\t}\n\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tconst sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tconst tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\tcopy( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromEuler( euler, update ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tthrow new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update !== false ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAxisAngle( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tconst EPS = 0.000001;\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < EPS ) {\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( MathUtils.clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\tinvert() {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t}\n\n\tconjugate() {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t}\n\n\tnormalize() {\n\n\t\tlet l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( q, p ) {\n\n\t\tif ( p !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );\n\t\t\treturn this.multiplyQuaternions( q, p );\n\n\t\t}\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t}\n\n\tpremultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerp( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tconst x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tlet cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize();\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tequals( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis._x = attribute.getX( index );\n\t\tthis._y = attribute.getY( index );\n\t\tthis._z = attribute.getZ( index );\n\t\tthis._w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n}\n\nclass Vector3 {\n\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\tObject.defineProperty( this, 'isVector3', { value: true } );\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t}\n\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );\n\t\t\treturn this.multiplyVectors( v, w );\n\n\t\t}\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyVectors( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyEuler( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\treturn this.applyQuaternion( _quaternion.setFromEuler( euler ) );\n\n\t}\n\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tconst ix = qw * x + qy * z - qz * y;\n\t\tconst iy = qw * y + qz * x - qx * z;\n\t\tconst iz = qw * z + qx * y - qy * x;\n\t\tconst iw = - qx * x - qy * y - qz * z;\n\n\t\t// calculate result * inverse quat\n\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\treturn this;\n\n\t}\n\n\tproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t}\n\n\t// TODO lengthSquared?\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tcross( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );\n\t\t\treturn this.crossVectors( v, w );\n\n\t\t}\n\n\t\treturn this.crossVectors( this, v );\n\n\t}\n\n\tcrossVectors( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t}\n\n\tprojectOnVector( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector );\n\n\t}\n\n\treflect( normal ) {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\treturn this.sub( _vector.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( MathUtils.clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t}\n\n\tsetFromSpherical( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixScale( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixColumn( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\n\nclass Box3 {\n\n\tconstructor( min, max ) {\n\n\t\tObject.defineProperty( this, 'isBox3', { value: true } );\n\n\t\tthis.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity );\n\t\tthis.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity );\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromArray( array ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tconst x = array[ i ];\n\t\t\tconst y = array[ i + 1 ];\n\t\t\tconst z = array[ i + 2 ];\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromBufferAttribute( attribute ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\tconst x = attribute.getX( i );\n\t\t\tconst y = attribute.getY( i );\n\t\t\tconst z = attribute.getZ( i );\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$1.copy( size ).multiplyScalar( 0.5 );\n\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getSize() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\texpandByObject( object ) {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t}\n\n\t\t\t_box.copy( geometry.boundingBox );\n\t\t\t_box.applyMatrix4( object.matrixWorld );\n\n\t\t\tthis.union( _box );\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis.expandByObject( children[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getParameter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector$1 );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector$1.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tlet min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t}\n\n\tintersectsTriangle( triangle ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// compute box center and extents\n\t\tthis.getCenter( _center );\n\t\t_extents.subVectors( this.max, _center );\n\n\t\t// translate triangle to aabb origin\n\t\t_v0.subVectors( triangle.a, _center );\n\t\t_v1.subVectors( triangle.b, _center );\n\t\t_v2.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1, _v0 );\n\t\t_f1.subVectors( _v2, _v1 );\n\t\t_f2.subVectors( _v0, _v2 );\n\n\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t// 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\n\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\tlet axes = [\n\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t];\n\t\tif ( ! satForAxes( axes, _v0, _v1, _v2, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// test 3 face normals from the aabb\n\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\tif ( ! satForAxes( axes, _v0, _v1, _v2, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// finally testing the face normal of the triangle\n\t\t// use already existing triangle edge vectors here\n\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\treturn satForAxes( axes, _v0, _v1, _v2, _extents );\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\tconst clampedPoint = _vector$1.copy( point ).clamp( this.min, this.max );\n\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tgetBoundingSphere( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Box3: .getBoundingSphere() target is now required' );\n\t\t\t//target = new Sphere(); // removed to avoid cyclic dependency\n\n\t\t}\n\n\t\tthis.getCenter( target.center );\n\n\t\ttarget.radius = this.getSize( _vector$1 ).length() * 0.5;\n\n\t\treturn target;\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// 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.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty() ) return this;\n\n\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\tthis.setFromPoints( _points );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t_testAxis.fromArray( axes, i );\n\t\t// project the aabb onto the seperating axis\n\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t// project all 3 vertices of the triangle onto the seperating axis\n\t\tconst p0 = v0.dot( _testAxis );\n\t\tconst p1 = v1.dot( _testAxis );\n\t\tconst p2 = v2.dot( _testAxis );\n\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t// the axis is seperating and we can exit\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nconst _points = [\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3()\n];\n\nconst _vector$1 = /*@__PURE__*/ new Vector3();\n\nconst _box = /*@__PURE__*/ new Box3();\n\n// triangle centered vertices\n\nconst _v0 = /*@__PURE__*/ new Vector3();\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = /*@__PURE__*/ new Vector3();\nconst _f1 = /*@__PURE__*/ new Vector3();\nconst _f2 = /*@__PURE__*/ new Vector3();\n\nconst _center = /*@__PURE__*/ new Vector3();\nconst _extents = /*@__PURE__*/ new Vector3();\nconst _triangleNormal = /*@__PURE__*/ new Vector3();\nconst _testAxis = /*@__PURE__*/ new Vector3();\n\nconst _box$1 = /*@__PURE__*/ new Box3();\n\nclass Sphere {\n\n\tconstructor( center, radius ) {\n\n\t\tthis.center = ( center !== undefined ) ? center : new Vector3();\n\t\tthis.radius = ( radius !== undefined ) ? radius : - 1;\n\n\t}\n\n\tset( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points, optionalCenter ) {\n\n\t\tconst center = this.center;\n\n\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\tcenter.copy( optionalCenter );\n\n\t\t} else {\n\n\t\t\t_box$1.setFromPoints( points ).getCenter( center );\n\n\t\t}\n\n\t\tlet maxRadiusSq = 0;\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t}\n\n\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\treturn ( this.radius < 0 );\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.center.set( 0, 0, 0 );\n\t\tthis.radius = - 1;\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tconst deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .getBoundingBox() target is now required' );\n\t\t\ttarget = new Box3();\n\n\t\t}\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\t// Empty sphere produces empty bounding box\n\t\t\ttarget.makeEmpty();\n\t\t\treturn target;\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n}\n\nconst _vector$2 = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal = /*@__PURE__*/ new Vector3();\n\nclass Ray {\n\n\tconstructor( origin, direction ) {\n\n\t\tthis.origin = ( origin !== undefined ) ? origin : new Vector3();\n\t\tthis.direction = ( direction !== undefined ) ? direction : new Vector3( 0, 0, - 1 );\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t}\n\n\tat( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t}\n\n\tlookAt( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector$2 ) );\n\n\t\treturn this;\n\n\t}\n\n\tclosestPointToPoint( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tconst directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector$2.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector$2.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\treturn _vector$2.distanceToSquared( point );\n\n\t}\n\n\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segDir ).multiplyScalar( s1 ).add( _segCenter );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t}\n\n\tintersectSphere( sphere, target ) {\n\n\t\t_vector$2.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector$2.dot( this.direction );\n\t\tconst d2 = _vector$2.dot( _vector$2 ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tdistanceToPlane( plane ) {\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t}\n\n\tintersectPlane( plane, target ) {\n\n\t\tconst t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t}\n\n\tintersectBox( box, target ) {\n\n\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\t// These lines also handle the case where tmin or tmax is NaN\n\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\n\n\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\n\n\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn this.intersectBox( box, _vector$2 ) !== null;\n\n\t}\n\n\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = - 1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\n\n\t}\n\n\tapplyMatrix4( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t}\n\n\tequals( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n}\n\nclass Matrix4 {\n\n\tconstructor() {\n\n\t\tObject.defineProperty( this, 'isMatrix4', { value: true } );\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t];\n\n\t\tif ( arguments.length > 0 ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tcopyPosition( m ) {\n\n\t\tconst te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmakeBasis( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractRotation( m ) {\n\n\t\t// this method does not support reflection matrices\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tconst scaleX = 1 / _v1$1.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1$1.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1$1.setFromMatrixColumn( m, 2 ).length();\n\n\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromEuler( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tconst te = this.elements;\n\n\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromQuaternion( q ) {\n\n\t\treturn this.compose( _zero, q, _one );\n\n\t}\n\n\tlookAt( eye, target, up ) {\n\n\t\tconst te = this.elements;\n\n\t\t_z.subVectors( eye, target );\n\n\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t// eye and target are in the same position\n\n\t\t\t_z.z = 1;\n\n\t\t}\n\n\t\t_z.normalize();\n\t\t_x.crossVectors( up, _z );\n\n\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t// up and z are parallel\n\n\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t_z.x += 0.0001;\n\n\t\t\t} else {\n\n\t\t\t\t_z.z += 0.0001;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t}\n\n\t\t_x.normalize();\n\t\t_y.crossVectors( _z, _x );\n\n\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m, n ) {\n\n\t\tif ( n !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );\n\t\t\treturn this.multiplyMatrices( m, n );\n\n\t\t}\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tconst b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tconst n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t}\n\n\ttranspose() {\n\n\t\tconst te = this.elements;\n\t\tlet tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tsetPosition( x, y, z ) {\n\n\t\tconst te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tinvert() {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tconst det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\tscale( v ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxScaleOnAxis() {\n\n\t\tconst te = this.elements;\n\n\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tconst scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t}\n\n\tmakeTranslation( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, x,\n\t\t\t0, 1, 0, y,\n\t\t\t0, 0, 1, z,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationX( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationY( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationZ( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationAxis( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tconst c = Math.cos( angle );\n\t\tconst s = Math.sin( angle );\n\t\tconst t = 1 - c;\n\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\tconst tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeShear( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, y, z, 0,\n\t\t\tx, 1, z, 0,\n\t\t\tx, y, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tdecompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tlet sx = _v1$1.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tconst sy = _v1$1.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tconst sz = _v1$1.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t// if determine is negative, we need to invert one scale\n\t\tconst det = this.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\tposition.x = te[ 12 ];\n\t\tposition.y = te[ 13 ];\n\t\tposition.z = te[ 14 ];\n\n\t\t// scale the rotation part\n\t\t_m1.copy( this );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\t_m1.elements[ 0 ] *= invSX;\n\t\t_m1.elements[ 1 ] *= invSX;\n\t\t_m1.elements[ 2 ] *= invSX;\n\n\t\t_m1.elements[ 4 ] *= invSY;\n\t\t_m1.elements[ 5 ] *= invSY;\n\t\t_m1.elements[ 6 ] *= invSY;\n\n\t\t_m1.elements[ 8 ] *= invSZ;\n\t\t_m1.elements[ 9 ] *= invSZ;\n\t\t_m1.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1 );\n\n\t\tscale.x = sx;\n\t\tscale.y = sy;\n\t\tscale.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tmakePerspective( left, right, top, bottom, near, far ) {\n\n\t\tif ( far === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' );\n\n\t\t}\n\n\t\tconst te = this.elements;\n\t\tconst x = 2 * near / ( right - left );\n\t\tconst y = 2 * near / ( top - bottom );\n\n\t\tconst a = ( right + left ) / ( right - left );\n\t\tconst b = ( top + bottom ) / ( top - bottom );\n\t\tconst c = - ( far + near ) / ( far - near );\n\t\tconst d = - 2 * far * near / ( far - near );\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t}\n\n\tmakeOrthographic( left, right, top, bottom, near, far ) {\n\n\t\tconst te = this.elements;\n\t\tconst w = 1.0 / ( right - left );\n\t\tconst h = 1.0 / ( top - bottom );\n\t\tconst p = 1.0 / ( far - near );\n\n\t\tconst x = ( right + left ) * w;\n\t\tconst y = ( top + bottom ) * h;\n\t\tconst z = ( far + near ) * p;\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nconst _v1$1 = /*@__PURE__*/ new Vector3();\nconst _m1 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\nconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nclass Euler {\n\n\tconstructor( x = 0, y = 0, z = 0, order = Euler.DefaultOrder ) {\n\n\t\tObject.defineProperty( this, 'isEuler', { value: true } );\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget order() {\n\n\t\treturn this._order;\n\n\t}\n\n\tset order( value ) {\n\n\t\tthis._order = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order || this._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t}\n\n\tcopy( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m, order, update ) {\n\n\t\tconst clamp = MathUtils.clamp;\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements;\n\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\torder = order || this._order;\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update !== false ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromQuaternion( q, order, update ) {\n\n\t\t_matrix.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix, order, update );\n\n\t}\n\n\tsetFromVector3( v, order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order || this._order );\n\n\t}\n\n\treorder( newOrder ) {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t_quaternion$1.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion$1, newOrder );\n\n\t}\n\n\tequals( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t}\n\n\tfromArray( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t}\n\n\ttoVector3( optionalResult ) {\n\n\t\tif ( optionalResult ) {\n\n\t\t\treturn optionalResult.set( this._x, this._y, this._z );\n\n\t\t} else {\n\n\t\t\treturn new Vector3( this._x, this._y, this._z );\n\n\t\t}\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n}\n\nEuler.DefaultOrder = 'XYZ';\nEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\nconst _matrix = /*@__PURE__*/ new Matrix4();\nconst _quaternion$1 = /*@__PURE__*/ new Quaternion();\n\nclass Layers {\n\n\tconstructor() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tset( channel ) {\n\n\t\tthis.mask = 1 << channel | 0;\n\n\t}\n\n\tenable( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t}\n\n\tenableAll() {\n\n\t\tthis.mask = 0xffffffff | 0;\n\n\t}\n\n\ttoggle( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t}\n\n\tdisable( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t}\n\n\tdisableAll() {\n\n\t\tthis.mask = 0;\n\n\t}\n\n\ttest( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n}\n\nlet _object3DId = 0;\n\nconst _v1$2 = new Vector3();\nconst _q1 = new Quaternion();\nconst _m1$1 = new Matrix4();\nconst _target = new Vector3();\n\nconst _position = new Vector3();\nconst _scale = new Vector3();\nconst _quaternion$2 = new Quaternion();\n\nconst _xAxis = new Vector3( 1, 0, 0 );\nconst _yAxis = new Vector3( 0, 1, 0 );\nconst _zAxis = new Vector3( 0, 0, 1 );\n\nconst _addedEvent = { type: 'added' };\nconst _removedEvent = { type: 'removed' };\n\nfunction Object3D() {\n\n\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Object3D';\n\n\tthis.parent = null;\n\tthis.children = [];\n\n\tthis.up = Object3D.DefaultUp.clone();\n\n\tconst position = new Vector3();\n\tconst rotation = new Euler();\n\tconst quaternion = new Quaternion();\n\tconst scale = new Vector3( 1, 1, 1 );\n\n\tfunction onRotationChange() {\n\n\t\tquaternion.setFromEuler( rotation, false );\n\n\t}\n\n\tfunction onQuaternionChange() {\n\n\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t}\n\n\trotation._onChange( onRotationChange );\n\tquaternion._onChange( onQuaternionChange );\n\n\tObject.defineProperties( this, {\n\t\tposition: {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: position\n\t\t},\n\t\trotation: {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: rotation\n\t\t},\n\t\tquaternion: {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: quaternion\n\t\t},\n\t\tscale: {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: scale\n\t\t},\n\t\tmodelViewMatrix: {\n\t\t\tvalue: new Matrix4()\n\t\t},\n\t\tnormalMatrix: {\n\t\t\tvalue: new Matrix3()\n\t\t}\n\t} );\n\n\tthis.matrix = new Matrix4();\n\tthis.matrixWorld = new Matrix4();\n\n\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\tthis.matrixWorldNeedsUpdate = false;\n\n\tthis.layers = new Layers();\n\tthis.visible = true;\n\n\tthis.castShadow = false;\n\tthis.receiveShadow = false;\n\n\tthis.frustumCulled = true;\n\tthis.renderOrder = 0;\n\n\tthis.animations = [];\n\n\tthis.userData = {};\n\n}\n\nObject3D.DefaultUp = new Vector3( 0, 1, 0 );\nObject3D.DefaultMatrixAutoUpdate = true;\n\nObject3D.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Object3D,\n\n\tisObject3D: true,\n\n\tonBeforeRender: function () {},\n\tonAfterRender: function () {},\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tthis.matrix.premultiply( matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t},\n\n\tapplyQuaternion: function ( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t},\n\n\tsetRotationFromAxisAngle: function ( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t},\n\n\tsetRotationFromEuler: function ( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t},\n\n\tsetRotationFromMatrix: function ( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t},\n\n\tsetRotationFromQuaternion: function ( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t},\n\n\trotateOnAxis: function ( axis, angle ) {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.multiply( _q1 );\n\n\t\treturn this;\n\n\t},\n\n\trotateOnWorldAxis: function ( axis, angle ) {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.premultiply( _q1 );\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function ( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t},\n\n\trotateY: function ( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t},\n\n\trotateZ: function ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t},\n\n\ttranslateOnAxis: function ( axis, distance ) {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_v1$2.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1$2.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t},\n\n\ttranslateX: function ( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t},\n\n\ttranslateY: function ( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t},\n\n\ttranslateZ: function ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t},\n\n\tlocalToWorld: function ( vector ) {\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t},\n\n\tworldToLocal: function ( vector ) {\n\n\t\treturn vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() );\n\n\t},\n\n\tlookAt: function ( x, y, z ) {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\t_target.copy( x );\n\n\t\t} else {\n\n\t\t\t_target.set( x, y, z );\n\n\t\t}\n\n\t\tconst parent = this.parent;\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_position.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1$1.lookAt( _position, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1$1.lookAt( _target, _position, this.up );\n\n\t\t}\n\n\t\tthis.quaternion.setFromRotationMatrix( _m1$1 );\n\n\t\tif ( parent ) {\n\n\t\t\t_m1$1.extractRotation( parent.matrixWorld );\n\t\t\t_q1.setFromRotationMatrix( _m1$1 );\n\t\t\tthis.quaternion.premultiply( _q1.invert() );\n\n\t\t}\n\n\t},\n\n\tadd: function ( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( \"THREE.Object3D.add: object can't be added as a child of itself.\", object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( ( object && object.isObject3D ) ) {\n\n\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\tobject.parent.remove( object );\n\n\t\t\t}\n\n\t\t\tobject.parent = this;\n\t\t\tthis.children.push( object );\n\n\t\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t} else {\n\n\t\t\tconsole.error( \"THREE.Object3D.add: object not an instance of THREE.Object3D.\", object );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tremove: function ( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tclear: function () {\n\n\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\tconst object = this.children[ i ];\n\n\t\t\tobject.parent = null;\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\tthis.children.length = 0;\n\n\t\treturn this;\n\n\n\t},\n\n\tattach: function ( object ) {\n\n\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_m1$1.copy( this.matrixWorld ).invert();\n\n\t\tif ( object.parent !== null ) {\n\n\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t_m1$1.multiply( object.parent.matrixWorld );\n\n\t\t}\n\n\t\tobject.applyMatrix4( _m1$1 );\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tthis.add( object );\n\n\t\treturn this;\n\n\t},\n\n\tgetObjectById: function ( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t},\n\n\tgetObjectByName: function ( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t},\n\n\tgetObjectByProperty: function ( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = this.children[ i ];\n\t\t\tconst object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t},\n\n\tgetWorldPosition: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldPosition() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t},\n\n\tgetWorldQuaternion: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldQuaternion() target is now required' );\n\t\t\ttarget = new Quaternion();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position, target, _scale );\n\n\t\treturn target;\n\n\t},\n\n\tgetWorldScale: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldScale() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion$2, target );\n\n\t\treturn target;\n\n\t},\n\n\tgetWorldDirection: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldDirection() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t},\n\n\traycast: function () {},\n\n\ttraverse: function ( callback ) {\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t},\n\n\ttraverseVisible: function ( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t},\n\n\ttraverseAncestors: function ( callback ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t},\n\n\tupdateMatrix: function () {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// update children\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].updateMatrixWorld( force );\n\n\t\t}\n\n\t},\n\n\tupdateWorldMatrix: function ( updateParents, updateChildren ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.parent === null ) {\n\n\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t} else {\n\n\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t}\n\n\t\t// update children\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateWorldMatrix( false, true );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tconst output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {},\n\t\t\t\tskeletons: {},\n\t\t\t\tanimations: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tconst object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData;\n\n\t\tobject.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t// object specific properties\n\n\t\tif ( this.isInstancedMesh ) {\n\n\t\t\tobject.type = 'InstancedMesh';\n\t\t\tobject.count = this.count;\n\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\n\t\t}\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.isSkinnedMesh ) {\n\n\t\t\tobject.bindMode = this.bindMode;\n\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\tobject.skeleton = this.skeleton.uuid;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tconst uuids = [];\n\n\t\t\t\tfor ( let i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.animations.length > 0 ) {\n\n\t\t\tobject.animations = [];\n\n\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst geometries = extractFromCache( meta.geometries );\n\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst shapes = extractFromCache( meta.shapes );\n\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\tconst animations = extractFromCache( meta.animations );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\tif ( animations.length > 0 ) output.animations = animations;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t},\n\n\tclone: function ( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t},\n\n\tcopy: function ( source, recursive = true ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.rotation.order = source.rotation.order;\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tconst child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\nconst _vector1 = /*@__PURE__*/ new Vector3();\nconst _vector2 = /*@__PURE__*/ new Vector3();\nconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\nclass Plane {\n\n\tconstructor( normal, constant ) {\n\n\t\tObject.defineProperty( this, 'isPlane', { value: true } );\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 );\n\t\tthis.constant = ( constant !== undefined ) ? constant : 0;\n\n\t}\n\n\tset( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponents( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromNormalAndCoplanarPoint( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCoplanarPoints( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();\n\n\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t}\n\n\tnormalize() {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tconst inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t}\n\n\tdistanceToSphere( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t}\n\n\tprojectPoint( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .projectPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point );\n\n\t}\n\n\tintersectLine( line, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .intersectLine() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tconst direction = line.delta( _vector1 );\n\n\t\tconst denominator = this.normal.dot( direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\treturn target.copy( line.start );\n\n\t\t\t}\n\n\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\treturn undefined;\n\n\t\t}\n\n\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\treturn undefined;\n\n\t\t}\n\n\t\treturn target.copy( direction ).multiplyScalar( t ).add( line.start );\n\n\t}\n\n\tintersectsLine( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tconst startSign = this.distanceToPoint( line.start );\n\t\tconst endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t}\n\n\tcoplanarPoint( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .coplanarPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t}\n\n\tapplyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tequals( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n}\n\nconst _v0$1 = /*@__PURE__*/ new Vector3();\nconst _v1$3 = /*@__PURE__*/ new Vector3();\nconst _v2$1 = /*@__PURE__*/ new Vector3();\nconst _v3 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nclass Triangle {\n\n\tconstructor( a, b, c ) {\n\n\t\tthis.a = ( a !== undefined ) ? a : new Vector3();\n\t\tthis.b = ( b !== undefined ) ? b : new Vector3();\n\t\tthis.c = ( c !== undefined ) ? c : new Vector3();\n\n\t}\n\n\tstatic getNormal( a, b, c, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getNormal() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0$1.subVectors( a, b );\n\t\ttarget.cross( _v0$1 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\n\n\t}\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t_v0$1.subVectors( c, a );\n\t\t_v1$3.subVectors( b, a );\n\t\t_v2$1.subVectors( point, a );\n\n\t\tconst dot00 = _v0$1.dot( _v0$1 );\n\t\tconst dot01 = _v0$1.dot( _v1$3 );\n\t\tconst dot02 = _v0$1.dot( _v2$1 );\n\t\tconst dot11 = _v1$3.dot( _v1$3 );\n\t\tconst dot12 = _v1$3.dot( _v2$1 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getBarycoord() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\t// arbitrary location outside of triangle?\n\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t}\n\n\tstatic containsPoint( point, a, b, c ) {\n\n\t\tthis.getBarycoord( point, a, b, c, _v3 );\n\n\t\treturn ( _v3.x >= 0 ) && ( _v3.y >= 0 ) && ( ( _v3.x + _v3.y ) <= 1 );\n\n\t}\n\n\tstatic getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) {\n\n\t\tthis.getBarycoord( point, p1, p2, p3, _v3 );\n\n\t\ttarget.set( 0, 0 );\n\t\ttarget.addScaledVector( uv1, _v3.x );\n\t\ttarget.addScaledVector( uv2, _v3.y );\n\t\ttarget.addScaledVector( uv3, _v3.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t_v0$1.subVectors( c, b );\n\t\t_v1$3.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn ( _v0$1.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;\n\n\t}\n\n\tset( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPointsAndIndices( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t}\n\n\tgetArea() {\n\n\t\t_v0$1.subVectors( this.c, this.b );\n\t\t_v1$3.subVectors( this.a, this.b );\n\n\t\treturn _v0$1.cross( _v1$3 ).length() * 0.5;\n\n\t}\n\n\tgetMidpoint( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getMidpoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t}\n\n\tgetNormal( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\tgetPlane( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getPlane() target is now required' );\n\t\t\ttarget = new Plane();\n\n\t\t}\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t}\n\n\tgetBarycoord( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\tgetUV( point, uv1, uv2, uv3, target ) {\n\n\t\treturn Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\tclosestPointToPoint( p, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t}\n\n\tequals( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n}\n\nconst _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\n\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\nfunction SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nfunction LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n}\n\nclass Color {\n\n\tconstructor( r, g, b ) {\n\n\t\tObject.defineProperty( this, 'isColor', { value: true } );\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\t\t\treturn this.set( r );\n\n\t\t}\n\n\t\treturn this.setRGB( r, g, b );\n\n\t}\n\n\tset( value ) {\n\n\t\tif ( value && value.isColor ) {\n\n\t\t\tthis.copy( value );\n\n\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\tthis.setHex( value );\n\n\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\tthis.setStyle( value );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetHex( hex ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\treturn this;\n\n\t}\n\n\tsetRGB( r, g, b ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\treturn this;\n\n\t}\n\n\tsetHSL( h, s, l ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = MathUtils.euclideanModulo( h, 1 );\n\t\ts = MathUtils.clamp( s, 0, 1 );\n\t\tl = MathUtils.clamp( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetStyle( style ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tlet m;\n\n\t\tif ( m = /^((?:rgb|hsl)a?)\\(\\s*([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^([0-9]*\\.?[0-9]+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\tconst h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\tconst s = parseInt( color[ 2 ], 10 ) / 100;\n\t\t\t\t\t\tconst l = parseInt( color[ 3 ], 10 ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this.setHSL( h, s, l );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f0-9]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tconst hex = m[ 1 ];\n\t\t\tconst size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( style && style.length > 0 ) {\n\n\t\t\treturn this.setColorName( style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetColorName( style ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\tcopy( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t}\n\n\tcopyGammaToLinear( color, gammaFactor = 2.0 ) {\n\n\t\tthis.r = Math.pow( color.r, gammaFactor );\n\t\tthis.g = Math.pow( color.g, gammaFactor );\n\t\tthis.b = Math.pow( color.b, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToGamma( color, gammaFactor = 2.0 ) {\n\n\t\tconst safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0;\n\n\t\tthis.r = Math.pow( color.r, safeInverse );\n\t\tthis.g = Math.pow( color.g, safeInverse );\n\t\tthis.b = Math.pow( color.b, safeInverse );\n\n\t\treturn this;\n\n\t}\n\n\tconvertGammaToLinear( gammaFactor ) {\n\n\t\tthis.copyGammaToLinear( this, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToGamma( gammaFactor ) {\n\n\t\tthis.copyLinearToGamma( this, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tcopySRGBToLinear( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToSRGB( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tconvertSRGBToLinear() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\tgetHex() {\n\n\t\treturn ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0;\n\n\t}\n\n\tgetHexString() {\n\n\t\treturn ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 );\n\n\t}\n\n\tgetHSL( target ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Color: .getHSL() target is now required' );\n\t\t\ttarget = { h: 0, s: 0, l: 0 };\n\n\t\t}\n\n\t\tconst r = this.r, g = this.g, b = this.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tconst delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t}\n\n\tgetStyle() {\n\n\t\treturn 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';\n\n\t}\n\n\toffsetHSL( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\t_hslA.h += h; _hslA.s += s; _hslA.l += l;\n\n\t\tthis.setHSL( _hslA.h, _hslA.s, _hslA.l );\n\n\t\treturn this;\n\n\t}\n\n\tadd( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t}\n\n\taddColors( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t}\n\n\tlerp( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = MathUtils.lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = MathUtils.lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = MathUtils.lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\n\n\t\treturn this;\n\n\t}\n\n\tequals( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\tif ( attribute.normalized === true ) {\n\n\t\t\t// assuming Uint8Array\n\n\t\t\tthis.r /= 255;\n\t\t\tthis.g /= 255;\n\t\t\tthis.b /= 255;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.getHex();\n\n\t}\n\n}\n\nColor.NAMES = _colorKeywords;\nColor.prototype.r = 1;\nColor.prototype.g = 1;\nColor.prototype.b = 1;\n\nclass Face3 {\n\n\tconstructor( a, b, c, normal, color, materialIndex = 0 ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t\tthis.normal = ( normal && normal.isVector3 ) ? normal : new Vector3();\n\t\tthis.vertexNormals = Array.isArray( normal ) ? normal : [];\n\n\t\tthis.color = ( color && color.isColor ) ? color : new Color();\n\t\tthis.vertexColors = Array.isArray( color ) ? color : [];\n\n\t\tthis.materialIndex = materialIndex;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.a = source.a;\n\t\tthis.b = source.b;\n\t\tthis.c = source.c;\n\n\t\tthis.normal.copy( source.normal );\n\t\tthis.color.copy( source.color );\n\n\t\tthis.materialIndex = source.materialIndex;\n\n\t\tfor ( let i = 0, il = source.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexNormals[ i ] = source.vertexNormals[ i ].clone();\n\n\t\t}\n\n\t\tfor ( let i = 0, il = source.vertexColors.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexColors[ i ] = source.vertexColors[ i ].clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nlet materialId = 0;\n\nfunction Material() {\n\n\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Material';\n\n\tthis.fog = true;\n\n\tthis.blending = NormalBlending;\n\tthis.side = FrontSide;\n\tthis.flatShading = false;\n\tthis.vertexColors = false;\n\n\tthis.opacity = 1;\n\tthis.transparent = false;\n\n\tthis.blendSrc = SrcAlphaFactor;\n\tthis.blendDst = OneMinusSrcAlphaFactor;\n\tthis.blendEquation = AddEquation;\n\tthis.blendSrcAlpha = null;\n\tthis.blendDstAlpha = null;\n\tthis.blendEquationAlpha = null;\n\n\tthis.depthFunc = LessEqualDepth;\n\tthis.depthTest = true;\n\tthis.depthWrite = true;\n\n\tthis.stencilWriteMask = 0xff;\n\tthis.stencilFunc = AlwaysStencilFunc;\n\tthis.stencilRef = 0;\n\tthis.stencilFuncMask = 0xff;\n\tthis.stencilFail = KeepStencilOp;\n\tthis.stencilZFail = KeepStencilOp;\n\tthis.stencilZPass = KeepStencilOp;\n\tthis.stencilWrite = false;\n\n\tthis.clippingPlanes = null;\n\tthis.clipIntersection = false;\n\tthis.clipShadows = false;\n\n\tthis.shadowSide = null;\n\n\tthis.colorWrite = true;\n\n\tthis.precision = null; // override the renderer's default precision for this material\n\n\tthis.polygonOffset = false;\n\tthis.polygonOffsetFactor = 0;\n\tthis.polygonOffsetUnits = 0;\n\n\tthis.dithering = false;\n\n\tthis.alphaTest = 0;\n\tthis.premultipliedAlpha = false;\n\n\tthis.visible = true;\n\n\tthis.toneMapped = true;\n\n\tthis.userData = {};\n\n\tthis.version = 0;\n\n}\n\nMaterial.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Material,\n\n\tisMaterial: true,\n\n\tonBeforeCompile: function ( /* shaderobject, renderer */ ) {},\n\n\tcustomProgramCacheKey: function () {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t},\n\n\tsetValues: function ( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( \"THREE.Material: '\" + key + \"' parameter is undefined.\" );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// for backward compatability if shading is set in the constructor\n\t\t\tif ( key === 'shading' ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\t\tthis.flatShading = ( newValue === FlatShading ) ? true : false;\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( \"THREE.\" + this.type + \": '\" + key + \"' is not a property of this material.\" );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst isRoot = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRoot ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.sheen && this.sheen.isColor ) data.sheen = this.sheen.getHex();\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;\n\t\tif ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\tif ( this.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\t\tif ( this.lightMap && this.lightMap.isTexture ) data.lightMap = this.lightMap.toJSON( meta ).uuid;\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\t\t\tdata.reflectivity = this.reflectivity; // Scale behind envMap\n\t\t\tdata.refractionRatio = this.refractionRatio;\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\t\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\n\t\t}\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors ) data.vertexColors = true;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\tdata.depthFunc = this.depthFunc;\n\t\tdata.depthTest = this.depthTest;\n\t\tdata.depthWrite = this.depthWrite;\n\n\t\tdata.stencilWrite = this.stencilWrite;\n\t\tdata.stencilWriteMask = this.stencilWriteMask;\n\t\tdata.stencilFunc = this.stencilFunc;\n\t\tdata.stencilRef = this.stencilRef;\n\t\tdata.stencilFuncMask = this.stencilFuncMask;\n\t\tdata.stencilFail = this.stencilFail;\n\t\tdata.stencilZFail = this.stencilZFail;\n\t\tdata.stencilZPass = this.stencilZPass;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth && this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\n\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.morphTargets === true ) data.morphTargets = true;\n\t\tif ( this.morphNormals === true ) data.morphNormals = true;\n\t\tif ( this.skinning === true ) data.skinning = true;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRoot ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.fog = source.fog;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.flatShading = source.flatShading;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\tthis.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\nObject.defineProperty( Material.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * depthTest: ,\n * depthWrite: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: \n * }\n */\n\nfunction MeshBasicMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshBasicMaterial';\n\n\tthis.color = new Color( 0xffffff ); // emissive\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshBasicMaterial.prototype = Object.create( Material.prototype );\nMeshBasicMaterial.prototype.constructor = MeshBasicMaterial;\n\nMeshBasicMaterial.prototype.isMeshBasicMaterial = true;\n\nMeshBasicMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\treturn this;\n\n};\n\nconst _vector$3 = new Vector3();\nconst _vector2$1 = new Vector2();\n\nfunction BufferAttribute( array, itemSize, normalized ) {\n\n\tif ( Array.isArray( array ) ) {\n\n\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t}\n\n\tthis.name = '';\n\n\tthis.array = array;\n\tthis.itemSize = itemSize;\n\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\tthis.normalized = normalized === true;\n\n\tthis.usage = StaticDrawUsage;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n}\n\nObject.defineProperty( BufferAttribute.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( BufferAttribute.prototype, {\n\n\tisBufferAttribute: true,\n\n\tonUploadCallback: function () {},\n\n\tsetUsage: function ( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t},\n\n\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( let i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyArray: function ( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t},\n\n\tcopyColorsArray: function ( colors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\tlet color = colors[ i ];\n\n\t\t\tif ( color === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i );\n\t\t\t\tcolor = new Color();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = color.r;\n\t\t\tarray[ offset ++ ] = color.g;\n\t\t\tarray[ offset ++ ] = color.b;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector2sArray: function ( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector2();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector3sArray: function ( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector3();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector4sArray: function ( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector4();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\t\t\tarray[ offset ++ ] = vector.w;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix3: function ( m ) {\n\n\t\tif ( this.itemSize === 2 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector2$1.fromBufferAttribute( this, i );\n\t\t\t\t_vector2$1.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2$1.x, _vector2$1.y );\n\n\t\t\t}\n\n\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$3.fromBufferAttribute( this, i );\n\t\t\t\t_vector$3.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$3.x = this.getX( i );\n\t\t\t_vector$3.y = this.getY( i );\n\t\t\t_vector$3.z = this.getZ( i );\n\n\t\t\t_vector$3.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tapplyNormalMatrix: function ( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$3.x = this.getX( i );\n\t\t\t_vector$3.y = this.getY( i );\n\t\t\t_vector$3.z = this.getZ( i );\n\n\t\t\t_vector$3.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttransformDirection: function ( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$3.x = this.getX( i );\n\t\t\t_vector$3.y = this.getY( i );\n\t\t\t_vector$3.z = this.getZ( i );\n\n\t\t\t_vector$3.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tset: function ( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t},\n\n\tgetX: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize ];\n\n\t},\n\n\tsetX: function ( index, x ) {\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t},\n\n\tgetY: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 1 ];\n\n\t},\n\n\tsetY: function ( index, y ) {\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tgetZ: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 2 ];\n\n\t},\n\n\tsetZ: function ( index, z ) {\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tgetW: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 3 ];\n\n\t},\n\n\tsetW: function ( index, w ) {\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetXY: function ( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZ: function ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t},\n\n\ttoJSON: function () {\n\n\t\treturn {\n\t\t\titemSize: this.itemSize,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tarray: Array.prototype.slice.call( this.array ),\n\t\t\tnormalized: this.normalized\n\t\t};\n\n\t}\n\n} );\n\n//\n\nfunction Int8BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int8Array( array ), itemSize, normalized );\n\n}\n\nInt8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt8BufferAttribute.prototype.constructor = Int8BufferAttribute;\n\n\nfunction Uint8BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint8Array( array ), itemSize, normalized );\n\n}\n\nUint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint8BufferAttribute.prototype.constructor = Uint8BufferAttribute;\n\n\nfunction Uint8ClampedBufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize, normalized );\n\n}\n\nUint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute;\n\n\nfunction Int16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int16Array( array ), itemSize, normalized );\n\n}\n\nInt16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt16BufferAttribute.prototype.constructor = Int16BufferAttribute;\n\n\nfunction Uint16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized );\n\n}\n\nUint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint16BufferAttribute.prototype.constructor = Uint16BufferAttribute;\n\n\nfunction Int32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int32Array( array ), itemSize, normalized );\n\n}\n\nInt32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt32BufferAttribute.prototype.constructor = Int32BufferAttribute;\n\n\nfunction Uint32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint32Array( array ), itemSize, normalized );\n\n}\n\nUint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint32BufferAttribute.prototype.constructor = Uint32BufferAttribute;\n\nfunction Float16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized );\n\n}\n\nFloat16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat16BufferAttribute.prototype.constructor = Float16BufferAttribute;\nFloat16BufferAttribute.prototype.isFloat16BufferAttribute = true;\n\nfunction Float32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Float32Array( array ), itemSize, normalized );\n\n}\n\nFloat32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat32BufferAttribute.prototype.constructor = Float32BufferAttribute;\n\n\nfunction Float64BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Float64Array( array ), itemSize, normalized );\n\n}\n\nFloat64BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat64BufferAttribute.prototype.constructor = Float64BufferAttribute;\n\nclass DirectGeometry {\n\n\tconstructor() {\n\n\t\tthis.vertices = [];\n\t\tthis.normals = [];\n\t\tthis.colors = [];\n\t\tthis.uvs = [];\n\t\tthis.uvs2 = [];\n\n\t\tthis.groups = [];\n\n\t\tthis.morphTargets = {};\n\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\n\t\t// this.lineDistances = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// update flags\n\n\t\tthis.verticesNeedUpdate = false;\n\t\tthis.normalsNeedUpdate = false;\n\t\tthis.colorsNeedUpdate = false;\n\t\tthis.uvsNeedUpdate = false;\n\t\tthis.groupsNeedUpdate = false;\n\n\t}\n\n\tcomputeGroups( geometry ) {\n\n\t\tconst groups = [];\n\n\t\tlet group, i;\n\t\tlet materialIndex = undefined;\n\n\t\tconst faces = geometry.faces;\n\n\t\tfor ( i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\tthis.groups = groups;\n\n\t}\n\n\tfromGeometry( geometry ) {\n\n\t\tconst faces = geometry.faces;\n\t\tconst vertices = geometry.vertices;\n\t\tconst faceVertexUvs = geometry.faceVertexUvs;\n\n\t\tconst hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\n\t\tconst hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\n\n\t\t// morphs\n\n\t\tconst morphTargets = geometry.morphTargets;\n\t\tconst morphTargetsLength = morphTargets.length;\n\n\t\tlet morphTargetsPosition;\n\n\t\tif ( morphTargetsLength > 0 ) {\n\n\t\t\tmorphTargetsPosition = [];\n\n\t\t\tfor ( let i = 0; i < morphTargetsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsPosition[ i ] = {\n\t\t\t\t\tname: morphTargets[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.position = morphTargetsPosition;\n\n\t\t}\n\n\t\tconst morphNormals = geometry.morphNormals;\n\t\tconst morphNormalsLength = morphNormals.length;\n\n\t\tlet morphTargetsNormal;\n\n\t\tif ( morphNormalsLength > 0 ) {\n\n\t\t\tmorphTargetsNormal = [];\n\n\t\t\tfor ( let i = 0; i < morphNormalsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsNormal[ i ] = {\n\t\t\t\t\tname: morphNormals[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.normal = morphTargetsNormal;\n\n\t\t}\n\n\t\t// skins\n\n\t\tconst skinIndices = geometry.skinIndices;\n\t\tconst skinWeights = geometry.skinWeights;\n\n\t\tconst hasSkinIndices = skinIndices.length === vertices.length;\n\t\tconst hasSkinWeights = skinWeights.length === vertices.length;\n\n\t\t//\n\n\t\tif ( vertices.length > 0 && faces.length === 0 ) {\n\n\t\t\tconsole.error( 'THREE.DirectGeometry: Faceless geometries are not supported.' );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\tthis.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] );\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tthis.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tconst normal = face.normal;\n\n\t\t\t\tthis.normals.push( normal, normal, normal );\n\n\t\t\t}\n\n\t\t\tconst vertexColors = face.vertexColors;\n\n\t\t\tif ( vertexColors.length === 3 ) {\n\n\t\t\t\tthis.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tconst color = face.color;\n\n\t\t\t\tthis.colors.push( color, color, color );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv === true ) {\n\n\t\t\t\tconst vertexUvs = faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i );\n\n\t\t\t\t\tthis.uvs.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv2 === true ) {\n\n\t\t\t\tconst vertexUvs = faceVertexUvs[ 1 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i );\n\n\t\t\t\t\tthis.uvs2.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// morphs\n\n\t\t\tfor ( let j = 0; j < morphTargetsLength; j ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ j ].vertices;\n\n\t\t\t\tmorphTargetsPosition[ j ].data.push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] );\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0; j < morphNormalsLength; j ++ ) {\n\n\t\t\t\tconst morphNormal = morphNormals[ j ].vertexNormals[ i ];\n\n\t\t\t\tmorphTargetsNormal[ j ].data.push( morphNormal.a, morphNormal.b, morphNormal.c );\n\n\t\t\t}\n\n\t\t\t// skins\n\n\t\t\tif ( hasSkinIndices ) {\n\n\t\t\t\tthis.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] );\n\n\t\t\t}\n\n\t\t\tif ( hasSkinWeights ) {\n\n\t\t\t\tthis.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeGroups( geometry );\n\n\t\tthis.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\tthis.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\tthis.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\tthis.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction arrayMax( array ) {\n\n\tif ( array.length === 0 ) return - Infinity;\n\n\tlet max = array[ 0 ];\n\n\tfor ( let i = 1, l = array.length; i < l; ++ i ) {\n\n\t\tif ( array[ i ] > max ) max = array[ i ];\n\n\t}\n\n\treturn max;\n\n}\n\nconst TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\t// Workaround for IE11 pre KB2929437. See #11440\n\tUint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\nfunction getTypedArray( type, buffer ) {\n\n\treturn new TYPED_ARRAYS[ type ]( buffer );\n\n}\n\nlet _bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id\n\nconst _m1$2 = new Matrix4();\nconst _obj = new Object3D();\nconst _offset = new Vector3();\nconst _box$2 = new Box3();\nconst _boxMorphTargets = new Box3();\nconst _vector$4 = new Vector3();\n\nfunction BufferGeometry() {\n\n\tObject.defineProperty( this, 'id', { value: _bufferGeometryId += 2 } );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'BufferGeometry';\n\n\tthis.index = null;\n\tthis.attributes = {};\n\n\tthis.morphAttributes = {};\n\tthis.morphTargetsRelative = false;\n\n\tthis.groups = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\tthis.drawRange = { start: 0, count: Infinity };\n\n\tthis.userData = {};\n\n}\n\nBufferGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: BufferGeometry,\n\n\tisBufferGeometry: true,\n\n\tgetIndex: function () {\n\n\t\treturn this.index;\n\n\t},\n\n\tsetIndex: function ( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetAttribute: function ( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t},\n\n\tsetAttribute: function ( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t},\n\n\tdeleteAttribute: function ( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t},\n\n\thasAttribute: function ( name ) {\n\n\t\treturn this.attributes[ name ] !== undefined;\n\n\t},\n\n\taddGroup: function ( start, count, materialIndex = 0 ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex\n\n\t\t} );\n\n\t},\n\n\tclearGroups: function () {\n\n\t\tthis.groups = [];\n\n\t},\n\n\tsetDrawRange: function ( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t},\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tconst position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tconst normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tconst tangent = this.attributes.tangent;\n\n\t\tif ( tangent !== undefined ) {\n\n\t\t\ttangent.transformDirection( matrix );\n\n\t\t\ttangent.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function ( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1$2.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\trotateY: function ( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1$2.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\trotateZ: function ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1$2.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1$2.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1$2.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\tlookAt: function ( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcenter: function () {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromObject: function ( object ) {\n\n\t\t// console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( object.isPoints || object.isLine ) {\n\n\t\t\tconst positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 );\n\t\t\tconst colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 );\n\n\t\t\tthis.setAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) );\n\t\t\tthis.setAttribute( 'color', colors.copyColorsArray( geometry.colors ) );\n\n\t\t\tif ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) {\n\n\t\t\t\tconst lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 );\n\n\t\t\t\tthis.setAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t\t}\n\n\t\t} else if ( object.isMesh ) {\n\n\t\t\tif ( geometry && geometry.isGeometry ) {\n\n\t\t\t\tthis.fromGeometry( geometry );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tconst position = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t},\n\n\tupdateFromObject: function ( object ) {\n\n\t\tlet geometry = object.geometry;\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tlet direct = geometry.__directGeometry;\n\n\t\t\tif ( geometry.elementsNeedUpdate === true ) {\n\n\t\t\t\tdirect = undefined;\n\t\t\t\tgeometry.elementsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( direct === undefined ) {\n\n\t\t\t\treturn this.fromGeometry( geometry );\n\n\t\t\t}\n\n\t\t\tdirect.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\t\tdirect.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\t\tdirect.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\t\tdirect.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\t\tdirect.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\t\tgeometry.verticesNeedUpdate = false;\n\t\t\tgeometry.normalsNeedUpdate = false;\n\t\t\tgeometry.colorsNeedUpdate = false;\n\t\t\tgeometry.uvsNeedUpdate = false;\n\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t\tgeometry = direct;\n\n\t\t}\n\n\t\tif ( geometry.verticesNeedUpdate === true ) {\n\n\t\t\tconst attribute = this.attributes.position;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector3sArray( geometry.vertices );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.verticesNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.normalsNeedUpdate === true ) {\n\n\t\t\tconst attribute = this.attributes.normal;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector3sArray( geometry.normals );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.normalsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.colorsNeedUpdate === true ) {\n\n\t\t\tconst attribute = this.attributes.color;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyColorsArray( geometry.colors );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.colorsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.uvsNeedUpdate ) {\n\n\t\t\tconst attribute = this.attributes.uv;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector2sArray( geometry.uvs );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.uvsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.lineDistancesNeedUpdate ) {\n\n\t\t\tconst attribute = this.attributes.lineDistance;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyArray( geometry.lineDistances );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.lineDistancesNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.groupsNeedUpdate ) {\n\n\t\t\tgeometry.computeGroups( object.geometry );\n\t\t\tthis.groups = geometry.groups;\n\n\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tfromGeometry: function ( geometry ) {\n\n\t\tgeometry.__directGeometry = new DirectGeometry().fromGeometry( geometry );\n\n\t\treturn this.fromDirectGeometry( geometry.__directGeometry );\n\n\t},\n\n\tfromDirectGeometry: function ( geometry ) {\n\n\t\tconst positions = new Float32Array( geometry.vertices.length * 3 );\n\t\tthis.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) );\n\n\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\tconst normals = new Float32Array( geometry.normals.length * 3 );\n\t\t\tthis.setAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) );\n\n\t\t}\n\n\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\tconst colors = new Float32Array( geometry.colors.length * 3 );\n\t\t\tthis.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs.length > 0 ) {\n\n\t\t\tconst uvs = new Float32Array( geometry.uvs.length * 2 );\n\t\t\tthis.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs2.length > 0 ) {\n\n\t\t\tconst uvs2 = new Float32Array( geometry.uvs2.length * 2 );\n\t\t\tthis.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) );\n\n\t\t}\n\n\t\t// groups\n\n\t\tthis.groups = geometry.groups;\n\n\t\t// morphs\n\n\t\tfor ( const name in geometry.morphTargets ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphTargets = geometry.morphTargets[ name ];\n\n\t\t\tfor ( let i = 0, l = morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ i ];\n\n\t\t\t\tconst attribute = new Float32BufferAttribute( morphTarget.data.length * 3, 3 );\n\t\t\t\tattribute.name = morphTarget.name;\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget.data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// skinning\n\n\t\tif ( geometry.skinIndices.length > 0 ) {\n\n\t\t\tconst skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 );\n\t\t\tthis.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );\n\n\t\t}\n\n\t\tif ( geometry.skinWeights.length > 0 ) {\n\n\t\t\tconst skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 );\n\t\t\tthis.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingBox.set(\n\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t);\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_box$2.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$4.addVectors( this.boundingBox.min, _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$4 );\n\n\t\t\t\t\t\t_vector$4.addVectors( this.boundingBox.max, _box$2.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$4 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position ) {\n\n\t\t\t// first, find the center of the bounding sphere\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t_box$2.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$4.addVectors( _box$2.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$4 );\n\n\t\t\t\t\t\t_vector$4.addVectors( _box$2.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$4 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_box$2.getCenter( center );\n\n\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t_vector$4.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) );\n\n\t\t\t}\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t_vector$4.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t_vector$4.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tcomputeFaceNormals: function () {\n\n\t\t// backwards compatibility\n\n\t},\n\n\tcomputeVertexNormals: function () {\n\n\t\tconst index = this.index;\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\tnA.add( cb );\n\t\t\t\t\tnB.add( cb );\n\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.needsUpdate = true;\n\n\t\t}\n\n\t},\n\n\tmerge: function ( geometry, offset ) {\n\n\t\tif ( ! ( geometry && geometry.isBufferGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( offset === undefined ) {\n\n\t\t\toffset = 0;\n\n\t\t\tconsole.warn(\n\t\t\t\t'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. '\n\t\t\t\t+ 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.'\n\t\t\t);\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tif ( geometry.attributes[ key ] === undefined ) continue;\n\n\t\t\tconst attribute1 = attributes[ key ];\n\t\t\tconst attributeArray1 = attribute1.array;\n\n\t\t\tconst attribute2 = geometry.attributes[ key ];\n\t\t\tconst attributeArray2 = attribute2.array;\n\n\t\t\tconst attributeOffset = attribute2.itemSize * offset;\n\t\t\tconst length = Math.min( attributeArray2.length, attributeArray1.length - attributeOffset );\n\n\t\t\tfor ( let i = 0, j = attributeOffset; i < length; i ++, j ++ ) {\n\n\t\t\t\tattributeArray1[ j ] = attributeArray2[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tnormalizeNormals: function () {\n\n\t\tconst normals = this.attributes.normal;\n\n\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t_vector$4.fromBufferAttribute( normals, i );\n\n\t\t\t_vector$4.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector$4.x, _vector$4.y, _vector$4.z );\n\n\t\t}\n\n\t},\n\n\ttoNonIndexed: function () {\n\n\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\t\t\tconst normalized = attribute.normalized;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( array2, itemSize, normalized );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tconst indices = this.index.array;\n\t\tconst attributes = this.attributes;\n\n\t\t// attributes\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = this.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst morphArray = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t}\n\n\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = this.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tdata.data = { attributes: {} };\n\n\t\tconst index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t};\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tconst attributeData = attribute.toJSON( data.data );\n\n\t\t\tif ( attribute.name !== '' ) attributeData.name = attribute.name;\n\n\t\t\tdata.data.attributes[ key ] = attributeData;\n\n\t\t}\n\n\t\tconst morphAttributes = {};\n\t\tlet hasMorphAttributes = false;\n\n\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\tconst attributeData = attribute.toJSON( data.data );\n\n\t\t\t\tif ( attribute.name !== '' ) attributeData.name = attribute.name;\n\n\t\t\t\tarray.push( attributeData );\n\n\t\t\t}\n\n\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\thasMorphAttributes = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphAttributes ) {\n\n\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t}\n\n\t\tconst groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t const parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t const values = [];\n\n\t\t for ( const key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t const geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new BufferGeometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// used for storing cloned, shared data\n\n\t\tconst data = {};\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tconst index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone( data ) );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tconst attributes = source.attributes;\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = source.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = source.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\nconst _inverseMatrix = new Matrix4();\nconst _ray = new Ray();\nconst _sphere = new Sphere();\n\nconst _vA = new Vector3();\nconst _vB = new Vector3();\nconst _vC = new Vector3();\n\nconst _tempA = new Vector3();\nconst _tempB = new Vector3();\nconst _tempC = new Vector3();\n\nconst _morphA = new Vector3();\nconst _morphB = new Vector3();\nconst _morphC = new Vector3();\n\nconst _uvA = new Vector2();\nconst _uvB = new Vector2();\nconst _uvC = new Vector2();\n\nconst _intersectionPoint = new Vector3();\nconst _intersectionPointWorld = new Vector3();\n\nfunction Mesh( geometry, material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Mesh';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new MeshBasicMaterial();\n\n\tthis.updateMorphTargets();\n\n}\n\nMesh.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Mesh,\n\n\tisMesh: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\t// Check boundingBox before continuing\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\tlet intersection;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\t\t\tconst uv = geometry.attributes.uv;\n\t\t\tconst uv2 = geometry.attributes.uv2;\n\t\t\tconst groups = geometry.groups;\n\t\t\tconst drawRange = geometry.drawRange;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\t// indexed buffer geometry\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\tconst end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( position !== undefined ) {\n\n\t\t\t\t// non-indexed buffer geometry\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\tconst end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\tconst a = i;\n\t\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconst isMultiMaterial = Array.isArray( material );\n\n\t\t\tconst vertices = geometry.vertices;\n\t\t\tconst faces = geometry.faces;\n\t\t\tlet uvs;\n\n\t\t\tconst faceVertexUvs = geometry.faceVertexUvs[ 0 ];\n\t\t\tif ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs;\n\n\t\t\tfor ( let f = 0, fl = faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = faces[ f ];\n\t\t\t\tconst faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material;\n\n\t\t\t\tif ( faceMaterial === undefined ) continue;\n\n\t\t\t\tconst fvA = vertices[ face.a ];\n\t\t\t\tconst fvB = vertices[ face.b ];\n\t\t\t\tconst fvC = vertices[ face.c ];\n\n\t\t\t\tintersection = checkIntersection( this, faceMaterial, raycaster, _ray, fvA, fvB, fvC, _intersectionPoint );\n\n\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\tif ( uvs && uvs[ f ] ) {\n\n\t\t\t\t\t\tconst uvs_f = uvs[ f ];\n\t\t\t\t\t\t_uvA.copy( uvs_f[ 0 ] );\n\t\t\t\t\t\t_uvB.copy( uvs_f[ 1 ] );\n\t\t\t\t\t\t_uvC.copy( uvs_f[ 2 ] );\n\n\t\t\t\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, fvA, fvB, fvC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tintersection.face = face;\n\t\t\t\t\tintersection.faceIndex = f;\n\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkBufferGeometryIntersection( object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ) {\n\n\t_vA.fromBufferAttribute( position, a );\n\t_vB.fromBufferAttribute( position, b );\n\t_vC.fromBufferAttribute( position, c );\n\n\tconst morphInfluences = object.morphTargetInfluences;\n\n\tif ( material.morphTargets && morphPosition && morphInfluences ) {\n\n\t\t_morphA.set( 0, 0, 0 );\n\t\t_morphB.set( 0, 0, 0 );\n\t\t_morphC.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\tconst influence = morphInfluences[ i ];\n\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t_tempA.fromBufferAttribute( morphAttribute, a );\n\t\t\t_tempB.fromBufferAttribute( morphAttribute, b );\n\t\t\t_tempC.fromBufferAttribute( morphAttribute, c );\n\n\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t} else {\n\n\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA ), influence );\n\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB ), influence );\n\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC ), influence );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_vA.add( _morphA );\n\t\t_vB.add( _morphB );\n\t\t_vC.add( _morphC );\n\n\t}\n\n\tif ( object.isSkinnedMesh ) {\n\n\t\tobject.boneTransform( a, _vA );\n\t\tobject.boneTransform( b, _vB );\n\t\tobject.boneTransform( c, _vC );\n\n\t}\n\n\tconst intersection = checkIntersection( object, material, raycaster, ray, _vA, _vB, _vC, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA.fromBufferAttribute( uv, a );\n\t\t\t_uvB.fromBufferAttribute( uv, b );\n\t\t\t_uvC.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv2 ) {\n\n\t\t\t_uvA.fromBufferAttribute( uv2, a );\n\t\t\t_uvB.fromBufferAttribute( uv2, b );\n\t\t\t_uvC.fromBufferAttribute( uv2, c );\n\n\t\t\tintersection.uv2 = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t}\n\n\t\tconst face = new Face3( a, b, c );\n\t\tTriangle.getNormal( _vA, _vB, _vC, face.normal );\n\n\t\tintersection.face = face;\n\n\t}\n\n\treturn intersection;\n\n}\n\nclass BoxBufferGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tconst scope = this;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet numberOfVertices = 0;\n\t\tlet groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tconst segmentWidth = width / gridX;\n\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\tconst widthHalf = width / 2;\n\t\t\tconst heightHalf = height / 2;\n\t\t\tconst depthHalf = depth / 2;\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tlet vertexCounter = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Uniform Utilities\n */\n\nfunction cloneUniforms( src ) {\n\n\tconst dst = {};\n\n\tfor ( const u in src ) {\n\n\t\tdst[ u ] = {};\n\n\t\tfor ( const p in src[ u ] ) {\n\n\t\t\tconst property = src[ u ][ p ];\n\n\t\t\tif ( property && ( property.isColor ||\n\t\t\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\t\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\t\t\tproperty.isTexture ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t} else {\n\n\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction mergeUniforms( uniforms ) {\n\n\tconst merged = {};\n\n\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\tfor ( const p in tmp ) {\n\n\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t}\n\n\t}\n\n\treturn merged;\n\n}\n\n// Legacy\n\nconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\nvar default_vertex = \"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";\n\nvar default_fragment = \"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";\n\n/**\n * parameters = {\n * defines: { \"label\" : \"value\" },\n * uniforms: { \"parameter1\": { value: 1.0 }, \"parameter2\": { value2: 2 } },\n *\n * fragmentShader: ,\n * vertexShader: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * lights: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction ShaderMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'ShaderMaterial';\n\n\tthis.defines = {};\n\tthis.uniforms = {};\n\n\tthis.vertexShader = default_vertex;\n\tthis.fragmentShader = default_fragment;\n\n\tthis.linewidth = 1;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false; // set to use scene fog\n\tthis.lights = false; // set to use scene lights\n\tthis.clipping = false; // set to use user-defined clipping planes\n\n\tthis.skinning = false; // set to use skinning attribute streams\n\tthis.morphTargets = false; // set to use morph targets\n\tthis.morphNormals = false; // set to use morph normals\n\n\tthis.extensions = {\n\t\tderivatives: false, // set to use derivatives\n\t\tfragDepth: false, // set to use fragment depth values\n\t\tdrawBuffers: false, // set to use draw buffers\n\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t};\n\n\t// When rendered geometry doesn't include these attributes but the material does,\n\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\tthis.defaultAttributeValues = {\n\t\t'color': [ 1, 1, 1 ],\n\t\t'uv': [ 0, 0 ],\n\t\t'uv2': [ 0, 0 ]\n\t};\n\n\tthis.index0AttributeName = undefined;\n\tthis.uniformsNeedUpdate = false;\n\n\tthis.glslVersion = null;\n\n\tif ( parameters !== undefined ) {\n\n\t\tif ( parameters.attributes !== undefined ) {\n\n\t\t\tconsole.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n}\n\nShaderMaterial.prototype = Object.create( Material.prototype );\nShaderMaterial.prototype.constructor = ShaderMaterial;\n\nShaderMaterial.prototype.isShaderMaterial = true;\n\nShaderMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.fragmentShader = source.fragmentShader;\n\tthis.vertexShader = source.vertexShader;\n\n\tthis.uniforms = cloneUniforms( source.uniforms );\n\n\tthis.defines = Object.assign( {}, source.defines );\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\tthis.lights = source.lights;\n\tthis.clipping = source.clipping;\n\n\tthis.skinning = source.skinning;\n\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\tthis.extensions = Object.assign( {}, source.extensions );\n\n\tthis.glslVersion = source.glslVersion;\n\n\treturn this;\n\n};\n\nShaderMaterial.prototype.toJSON = function ( meta ) {\n\n\tconst data = Material.prototype.toJSON.call( this, meta );\n\n\tdata.glslVersion = this.glslVersion;\n\tdata.uniforms = {};\n\n\tfor ( const name in this.uniforms ) {\n\n\t\tconst uniform = this.uniforms[ name ];\n\t\tconst value = uniform.value;\n\n\t\tif ( value && value.isTexture ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 't',\n\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t};\n\n\t\t} else if ( value && value.isColor ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'c',\n\t\t\t\tvalue: value.getHex()\n\t\t\t};\n\n\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'v2',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'v3',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'v4',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'm3',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'm4',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\tvalue: value\n\t\t\t};\n\n\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t}\n\n\t}\n\n\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\tdata.vertexShader = this.vertexShader;\n\tdata.fragmentShader = this.fragmentShader;\n\n\tconst extensions = {};\n\n\tfor ( const key in this.extensions ) {\n\n\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t}\n\n\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\treturn data;\n\n};\n\nfunction Camera() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Camera';\n\n\tthis.matrixWorldInverse = new Matrix4();\n\n\tthis.projectionMatrix = new Matrix4();\n\tthis.projectionMatrixInverse = new Matrix4();\n\n}\n\nCamera.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Camera,\n\n\tisCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\treturn this;\n\n\t},\n\n\tgetWorldDirection: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Camera: .getWorldDirection() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t},\n\n\tupdateWorldMatrix: function ( updateParents, updateChildren ) {\n\n\t\tObject3D.prototype.updateWorldMatrix.call( this, updateParents, updateChildren );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n} );\n\nfunction PerspectiveCamera( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\tCamera.call( this );\n\n\tthis.type = 'PerspectiveCamera';\n\n\tthis.fov = fov;\n\tthis.zoom = 1;\n\n\tthis.near = near;\n\tthis.far = far;\n\tthis.focus = 10;\n\n\tthis.aspect = aspect;\n\tthis.view = null;\n\n\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\tthis.updateProjectionMatrix();\n\n}\n\nPerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\tconstructor: PerspectiveCamera,\n\n\tisPerspectiveCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength: function ( focalLength ) {\n\n\t\t// see http://www.bobatkins.com/photography/technical/field_of_view.html\n\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = MathUtils.RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength: function () {\n\n\t\tconst vExtentSlope = Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t},\n\n\tgetEffectiveFOV: function () {\n\n\t\treturn MathUtils.RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( MathUtils.DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t},\n\n\tgetFilmWidth: function () {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t},\n\n\tgetFilmHeight: function () {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t},\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t * +---+---+---+\n\t * | A | B | C |\n\t * +---+---+---+\n\t * | D | E | F |\n\t * +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t * const w = 1920;\n\t * const h = 1080;\n\t * const fullWidth = w * 3;\n\t * const fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t * Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tclearViewOffset: function () {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tupdateProjectionMatrix: function () {\n\n\t\tconst near = this.near;\n\t\tlet top = near * Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\tlet height = 2 * top;\n\t\tlet width = this.aspect * height;\n\t\tlet left = - 0.5 * width;\n\t\tconst view = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tconst skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n} );\n\nconst fov = 90, aspect = 1;\n\nfunction CubeCamera( near, far, renderTarget ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'CubeCamera';\n\n\tif ( renderTarget.isWebGLCubeRenderTarget !== true ) {\n\n\t\tconsole.error( 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.' );\n\t\treturn;\n\n\t}\n\n\tthis.renderTarget = renderTarget;\n\n\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPX.layers = this.layers;\n\tcameraPX.up.set( 0, - 1, 0 );\n\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\tthis.add( cameraPX );\n\n\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNX.layers = this.layers;\n\tcameraNX.up.set( 0, - 1, 0 );\n\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\tthis.add( cameraNX );\n\n\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPY.layers = this.layers;\n\tcameraPY.up.set( 0, 0, 1 );\n\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\tthis.add( cameraPY );\n\n\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNY.layers = this.layers;\n\tcameraNY.up.set( 0, 0, - 1 );\n\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\tthis.add( cameraNY );\n\n\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPZ.layers = this.layers;\n\tcameraPZ.up.set( 0, - 1, 0 );\n\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\tthis.add( cameraPZ );\n\n\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNZ.layers = this.layers;\n\tcameraNZ.up.set( 0, - 1, 0 );\n\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\tthis.add( cameraNZ );\n\n\tthis.update = function ( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\trenderer.xr.enabled = false;\n\n\t\tconst generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderer.setRenderTarget( renderTarget, 0 );\n\t\trenderer.render( scene, cameraPX );\n\n\t\trenderer.setRenderTarget( renderTarget, 1 );\n\t\trenderer.render( scene, cameraNX );\n\n\t\trenderer.setRenderTarget( renderTarget, 2 );\n\t\trenderer.render( scene, cameraPY );\n\n\t\trenderer.setRenderTarget( renderTarget, 3 );\n\t\trenderer.render( scene, cameraNY );\n\n\t\trenderer.setRenderTarget( renderTarget, 4 );\n\t\trenderer.render( scene, cameraPZ );\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderer.setRenderTarget( renderTarget, 5 );\n\t\trenderer.render( scene, cameraNZ );\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\trenderer.xr.enabled = currentXrEnabled;\n\n\t};\n\n}\n\nCubeCamera.prototype = Object.create( Object3D.prototype );\nCubeCamera.prototype.constructor = CubeCamera;\n\nfunction CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\timages = images !== undefined ? images : [];\n\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\tformat = format !== undefined ? format : RGBFormat;\n\n\tTexture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.flipY = false;\n\n\t// Why CubeTexture._needsFlipEnvMap is necessary:\n\t//\n\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t// and the flag _needsFlipEnvMap controls this conversion. The flip is not required (and thus _needsFlipEnvMap is set to false)\n\t// when using WebGLCubeRenderTarget.texture as a cube texture.\n\n\tthis._needsFlipEnvMap = true;\n\n}\n\nCubeTexture.prototype = Object.create( Texture.prototype );\nCubeTexture.prototype.constructor = CubeTexture;\n\nCubeTexture.prototype.isCubeTexture = true;\n\nObject.defineProperty( CubeTexture.prototype, 'images', {\n\n\tget: function () {\n\n\t\treturn this.image;\n\n\t},\n\n\tset: function ( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n} );\n\nfunction WebGLCubeRenderTarget( size, options, dummy ) {\n\n\tif ( Number.isInteger( options ) ) {\n\n\t\tconsole.warn( 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )' );\n\n\t\toptions = dummy;\n\n\t}\n\n\tWebGLRenderTarget.call( this, size, size, options );\n\n\toptions = options || {};\n\n\tthis.texture = new CubeTexture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\tthis.texture._needsFlipEnvMap = false;\n\n}\n\nWebGLCubeRenderTarget.prototype = Object.create( WebGLRenderTarget.prototype );\nWebGLCubeRenderTarget.prototype.constructor = WebGLCubeRenderTarget;\n\nWebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true;\n\nWebGLCubeRenderTarget.prototype.fromEquirectangularTexture = function ( renderer, texture ) {\n\n\tthis.texture.type = texture.type;\n\tthis.texture.format = RGBAFormat; // see #18859\n\tthis.texture.encoding = texture.encoding;\n\n\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\tthis.texture.minFilter = texture.minFilter;\n\tthis.texture.magFilter = texture.magFilter;\n\n\tconst shader = {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: /* glsl */`\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t#include \n\t\t\t\t#include \n\n\t\t\t}\n\t\t`,\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tuniform sampler2D tEquirect;\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t}\n\t\t`\n\t};\n\n\tconst geometry = new BoxBufferGeometry( 5, 5, 5 );\n\n\tconst material = new ShaderMaterial( {\n\n\t\tname: 'CubemapFromEquirect',\n\n\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\tvertexShader: shader.vertexShader,\n\t\tfragmentShader: shader.fragmentShader,\n\t\tside: BackSide,\n\t\tblending: NoBlending\n\n\t} );\n\n\tmaterial.uniforms.tEquirect.value = texture;\n\n\tconst mesh = new Mesh( geometry, material );\n\n\tconst currentMinFilter = texture.minFilter;\n\n\t// Avoid blurred poles\n\tif ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;\n\n\tconst camera = new CubeCamera( 1, 10, this );\n\tcamera.update( renderer, mesh );\n\n\ttexture.minFilter = currentMinFilter;\n\n\tmesh.geometry.dispose();\n\tmesh.material.dispose();\n\n\treturn this;\n\n};\n\nWebGLCubeRenderTarget.prototype.clear = function ( renderer, color, depth, stencil ) {\n\n\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\trenderer.setRenderTarget( this, i );\n\n\t\trenderer.clear( color, depth, stencil );\n\n\t}\n\n\trenderer.setRenderTarget( currentRenderTarget );\n\n};\n\nfunction DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.image = { data: data || null, width: width || 1, height: height || 1 };\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\tthis.generateMipmaps = false;\n\tthis.flipY = false;\n\tthis.unpackAlignment = 1;\n\n\tthis.needsUpdate = true;\n\n}\n\nDataTexture.prototype = Object.create( Texture.prototype );\nDataTexture.prototype.constructor = DataTexture;\n\nDataTexture.prototype.isDataTexture = true;\n\nconst _sphere$1 = /*@__PURE__*/ new Sphere();\nconst _vector$5 = /*@__PURE__*/ new Vector3();\n\nclass Frustum {\n\n\tconstructor( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tthis.planes = [\n\n\t\t\t( p0 !== undefined ) ? p0 : new Plane(),\n\t\t\t( p1 !== undefined ) ? p1 : new Plane(),\n\t\t\t( p2 !== undefined ) ? p2 : new Plane(),\n\t\t\t( p3 !== undefined ) ? p3 : new Plane(),\n\t\t\t( p4 !== undefined ) ? p4 : new Plane(),\n\t\t\t( p5 !== undefined ) ? p5 : new Plane()\n\n\t\t];\n\n\t}\n\n\tset( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tconst planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( frustum ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromProjectionMatrix( m ) {\n\n\t\tconst planes = this.planes;\n\t\tconst me = m.elements;\n\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tconst me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\tintersectsObject( object ) {\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$1.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$1 );\n\n\t}\n\n\tintersectsSprite( sprite ) {\n\n\t\t_sphere$1.center.set( 0, 0, 0 );\n\t\t_sphere$1.radius = 0.7071067811865476;\n\t\t_sphere$1.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$1 );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst planes = this.planes;\n\t\tconst center = sphere.center;\n\t\tconst negRadius = - sphere.radius;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\n\t\t\t// corner at max distance\n\n\t\t\t_vector$5.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector$5.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector$5.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector$5 ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n}\n\nfunction WebGLAnimation() {\n\n\tlet context = null;\n\tlet isAnimating = false;\n\tlet animationLoop = null;\n\tlet requestId = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tanimationLoop( time, frame );\n\n\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tcontext.cancelAnimationFrame( requestId );\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLAttributes( gl, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tconst buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst usage = attribute.usage;\n\n\t\tconst buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tlet type = 5126;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = 5126;\n\n\t\t} else if ( array instanceof Float64Array ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' );\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\ttype = 5131;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\ttype = 5123;\n\n\t\t\t}\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = 5122;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = 5125;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = 5124;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = 5120;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = 5121;\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst updateRange = attribute.updateRange;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( updateRange.count === - 1 ) {\n\n\t\t\t// Not using update ranges\n\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t} else {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray, updateRange.offset, updateRange.count );\n\n\t\t\t} else {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\t}\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isGLBufferAttribute ) {\n\n\t\t\tconst cached = buffers.get( attribute );\n\n\t\t\tif ( ! cached || cached.version < attribute.version ) {\n\n\t\t\t\tbuffers.set( attribute, {\n\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\tversion: attribute.version\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\nclass PlaneBufferGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {\n\n\t\tsuper();\n\t\tthis.type = 'PlaneBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tconst width_half = width / 2;\n\t\tconst height_half = height / 2;\n\n\t\tconst gridX = Math.floor( widthSegments );\n\t\tconst gridY = Math.floor( heightSegments );\n\n\t\tconst gridX1 = gridX + 1;\n\t\tconst gridY1 = gridY + 1;\n\n\t\tconst segment_width = width / gridX;\n\t\tconst segment_height = height / gridY;\n\n\t\t//\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tconst y = iy * segment_height - height_half;\n\n\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tconst x = ix * segment_width - width_half;\n\n\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tconst a = ix + gridX1 * iy;\n\t\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tconst d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar alphatest_fragment = \"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\";\n\nvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\\n\\t#endif\\n#endif\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar begin_vertex = \"vec3 transformed = vec3( position );\";\n\nvar beginnormal_vertex = \"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\";\n\nvar bsdfs = \"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\\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\\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\\n}\\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\tif( cutoffDistance > 0.0 ) {\\n\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t}\\n\\treturn distanceFalloff;\\n#else\\n\\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n\\t}\\n\\treturn 1.0;\\n#endif\\n}\\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\\n\\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\\n}\\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\\n\\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\\n\\treturn Fr * fresnel + F0;\\n}\\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\treturn 1.0 / ( gl * gv );\\n}\\nfloat G_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}\\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( G * 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}\\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\treturn specularColor * brdf.x + brdf.y;\\n}\\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\tvec3 FssEss = F * brdf.x + brdf.y;\\n\\tfloat Ess = brdf.x + brdf.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\nfloat 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_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\\n\\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\\n}\\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\\n\\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie(float roughness, float NoH) {\\n\\tfloat invAlpha = 1.0 / roughness;\\n\\tfloat cos2h = NoH * NoH;\\n\\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\\n}\\nfloat V_Neubelt(float NoV, float NoL) {\\n\\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\\n}\\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\\n\\tvec3 N = geometry.normal;\\n\\tvec3 V = geometry.viewDir;\\n\\tvec3 H = normalize( V + L );\\n\\tfloat dotNH = saturate( dot( N, H ) );\\n\\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\\n}\\n#endif\";\n\nvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\\n\\t\\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\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 );\\n\\t\\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\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\";\n\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\";\n\nvar color_fragment = \"#ifdef USE_COLOR\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_pars_vertex = \"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_vertex = \"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvColor = vec3( 1.0 );\\n#endif\\n#ifdef USE_COLOR\\n\\tvColor.xyz *= color.xyz;\\n#endif\\n#ifdef USE_INSTANCING_COLOR\\n\\tvColor.xyz *= instanceColor.xyz;\\n#endif\";\n\nvar 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; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\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 max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\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};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal;\\n#endif\\n};\\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}\\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\tfloat distance = dot( planeNormal, point - pointOnPlane );\\n\\treturn - distance * planeNormal + point;\\n}\\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn sign( dot( point - pointOnPlane, planeNormal ) );\\n}\\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\\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 linearToRelativeLuminance( const in vec3 color ) {\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\treturn dot( weights, color.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}\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_maxMipLevel 8.0\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_maxTileSize 256.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\\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\\n\\t\\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\\n\\t\\tvec2 f = fract( uv );\\n\\t\\tuv += 0.5 - f;\\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\\tif ( mipInt < cubeUV_maxMipLevel ) {\\n\\t\\t\\tuv.y += 2.0 * cubeUV_maxTileSize;\\n\\t\\t}\\n\\t\\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\\n\\t\\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\\n\\t\\tuv *= texelSize;\\n\\t\\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x += texelSize;\\n\\t\\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.y += texelSize;\\n\\t\\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x -= texelSize;\\n\\t\\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tvec3 tm = mix( tl, tr, f.x );\\n\\t\\tvec3 bm = mix( bl, br, f.x );\\n\\t\\treturn mix( tm, bm, f.y );\\n\\t}\\n\\t#define r0 1.0\\n\\t#define v0 0.339\\n\\t#define m0 - 2.0\\n\\t#define r1 0.8\\n\\t#define v1 0.276\\n\\t#define m1 - 1.0\\n\\t#define r4 0.4\\n\\t#define v4 0.046\\n\\t#define m4 2.0\\n\\t#define r5 0.305\\n\\t#define v5 0.016\\n\\t#define m5 3.0\\n\\t#define r6 0.21\\n\\t#define v6 0.0038\\n\\t#define m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= r1 ) {\\n\\t\\t\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\n\\t\\t} else if ( roughness >= r4 ) {\\n\\t\\t\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\n\\t\\t} else if ( roughness >= r5 ) {\\n\\t\\t\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\n\\t\\t} else if ( roughness >= r6 ) {\\n\\t\\t\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + 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 ), m0, cubeUV_maxMipLevel );\\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\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = objectNormal;\\n#ifdef USE_INSTANCING\\n\\tmat3 m = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\n\\ttransformedNormal = m * transformedNormal;\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\n#endif\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\";\n\nvar encodings_fragment = \"gl_FragColor = linearToOutputTexel( gl_FragColor );\";\n\nvar encodings_pars_fragment = \"\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\\n}\\nvec4 LinearTosRGB( 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 RGBEToLinear( in vec4 value ) {\\n\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\n\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n\\tM = ceil( M * 255.0 ) / 255.0;\\n\\treturn vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\\n\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value ) {\\n\\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\\n\\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\\n\\tvec4 vResult;\\n\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n\\tvResult.w = fract( Le );\\n\\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\\n\\treturn vResult;\\n}\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n\\tfloat Le = value.z * 255.0 + value.w;\\n\\tvec3 Xp_Y_XYZp;\\n\\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\\n\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n\\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\\n\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\n}\";\n\nvar 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, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifndef ENVMAP_TYPE_CUBE_UV\\n\\t\\tenvColor = envMapTexelToLinear( envColor );\\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\";\n\nvar envmap_common_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform int maxMipLevel;\\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\";\n\nvar envmap_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\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\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\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\";\n\nvar 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\";\n\nvar fog_vertex = \"#ifdef USE_FOG\\n\\tfogDepth = - mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float fogDepth;\\n#endif\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\";\n\nvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float fogDepth;\\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\";\n\nvar 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 texture2D( gradientMap, coord ).rgb;\\n\\t#else\\n\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t#endif\\n}\";\n\nvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n#endif\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar lights_lambert_vertex = \"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\nvIndirectFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n\\tvIndirectBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\\n#ifdef DOUBLE_SIDED\\n\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\n\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\";\n\nvar lights_pars_begin = \"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\nuniform vec3 lightProbe[ 9 ];\\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 GeometricContext geometry ) {\\n\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treturn irradiance;\\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 getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tdirectLight.color = directionalLight.color;\\n\\t\\tdirectLight.direction = directionalLight.direction;\\n\\t\\tdirectLight.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 getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tdirectLight.color = pointLight.color;\\n\\t\\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tdirectLight.visible = ( directLight.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 getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tfloat angleCos = dot( directLight.direction, spotLight.direction );\\n\\t\\tif ( angleCos > spotLight.coneCos ) {\\n\\t\\t\\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\t\\tdirectLight.color = spotLight.color;\\n\\t\\t\\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tdirectLight.visible = true;\\n\\t\\t} else {\\n\\t\\t\\tdirectLight.color = vec3( 0.0 );\\n\\t\\t\\tdirectLight.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 GeometricContext geometry ) {\\n\\t\\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tirradiance *= PI;\\n\\t\\t#endif\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\";\n\nvar envmap_physical_pars_fragment = \"#if defined( USE_ENVMAP )\\n\\t#ifdef ENVMAP_MODE_REFRACTION\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n\\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\\n\\t\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\n\\t\\t#else\\n\\t\\t\\tvec4 envMapColor = vec4( 0.0 );\\n\\t\\t#endif\\n\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t}\\n\\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\\n\\t\\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\\t\\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\\n\\t\\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\\n\\t\\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\\t}\\n\\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( -viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\\n\\t\\t#endif\\n\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\n\\t\\t#endif\\n\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t}\\n#endif\";\n\nvar lights_toon_fragment = \"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\";\n\nvar lights_toon_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\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 GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\\n#ifdef REFLECTIVITY\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\\n#endif\\n#ifdef CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).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_SHEEN\\n\\tmaterial.sheenColor = sheen;\\n#endif\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularRoughness;\\n\\tvec3 specularColor;\\n#ifdef CLEARCOAT\\n\\tfloat clearcoat;\\n\\tfloat clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tvec3 sheenColor;\\n#endif\\n};\\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\\n\\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\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.specularRoughness;\\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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = ccDotNL * directLight.color;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tccIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t\\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\\n\\t\\t\\tmaterial.specularRoughness,\\n\\t\\t\\tdirectLight.direction,\\n\\t\\t\\tgeometry,\\n\\t\\t\\tmaterial.sheenColor\\n\\t\\t);\\n\\t#else\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\\n\\t#endif\\n\\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t\\tfloat ccDotNL = ccDotNV;\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\tfloat clearcoatInv = 1.0 - clearcoatDHR;\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\n\\treflectedLight.indirectSpecular += clearcoatInv * 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}\";\n\nvar lights_fragment_begin = \"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n#ifdef CLEARCOAT\\n\\tgeometry.clearcoatNormal = clearcoatNormal;\\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\\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( 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, geometry, 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\\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\\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, 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\\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( 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, geometry, 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, geometry, 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\\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\\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 ], geometry );\\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\";\n\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\\n\\t#ifdef CLEARCOAT\\n\\t\\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\\n\\t#endif\\n#endif\";\n\nvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\n#endif\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t\\tvarying float vIsPerspective;\\n\\t#else\\n\\t\\tuniform float logDepthBufFC;\\n\\t#endif\\n#endif\";\n\nvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n\\t#else\\n\\t\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\n\\t\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\t\\tgl_Position.z *= gl_Position.w;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\";\n\nvar map_particle_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\";\n\nvar map_particle_pars_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tuniform mat3 uvTransform;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\n\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\n\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\n\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\n#endif\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\tuniform float morphTargetBaseInfluence;\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\tuniform float morphTargetInfluences[ 8 ];\\n\\t#else\\n\\t\\tuniform float morphTargetInfluences[ 4 ];\\n\\t#endif\\n#endif\";\n\nvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\n\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\n\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\n\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\n\\t\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\n\\t\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\n\\t\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\n\\t#endif\\n#endif\";\n\nvar normal_fragment_begin = \"#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t#endif\\n\\t#ifdef USE_TANGENT\\n\\t\\tvec3 tangent = normalize( vTangent );\\n\\t\\tvec3 bitangent = normalize( vBitangent );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\t\\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\t#endif\\n\\t\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\nvec3 geometryNormal = normal;\";\n\nvar normal_fragment_maps = \"#ifdef OBJECTSPACE_NORMALMAP\\n\\tnormal = texture2D( normalMap, vUv ).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 * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t#endif\\n\\tnormal = normalize( normalMatrix * normal );\\n#elif defined( TANGENTSPACE_NORMALMAP )\\n\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tnormal = normalize( vTBN * mapN );\\n\\t#else\\n\\t\\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\\n\\t#endif\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\\n#endif\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef OBJECTSPACE_NORMALMAP\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\\n\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.st );\\n\\t\\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\\n\\t\\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\\n\\t\\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\\n\\t\\tvec3 N = normalize( surf_norm );\\n\\t\\tmat3 tsn = mat3( S, T, N );\\n\\t\\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\treturn normalize( tsn * mapN );\\n\\t}\\n#endif\";\n\nvar clearcoat_normal_fragment_begin = \"#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal = geometryNormal;\\n#endif\";\n\nvar clearcoat_normal_fragment_maps = \"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\n\\t#else\\n\\t\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\\n\\t#endif\\n#endif\";\n\nvar clearcoat_pars_fragment = \"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\";\n\nvar 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}\\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 linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( 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 invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\";\n\nvar project_vertex = \"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\";\n\nvar dithering_fragment = \"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\";\n\nvar 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\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar shadowmap_pars_fragment = \"#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\\tvarying vec4 vSpotShadowCoord[ 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\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn shadow;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar shadowmap_pars_vertex = \"#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\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ 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 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\";\n\nvar shadowmap_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\tvec4 shadowWorldPosition;\\n\\t#endif\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\";\n\nvar 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, vSpotShadowCoord[ 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}\";\n\nvar 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\";\n\nvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\t#ifdef BONE_TEXTURE\\n\\t\\tuniform highp sampler2D boneTexture;\\n\\t\\tuniform int boneTextureSize;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#else\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar 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\";\n\nvar 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\";\n\nvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\";\n\nvar 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 toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3( 1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108, 1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605, 1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\";\n\nvar transmissionmap_fragment = \"#ifdef USE_TRANSMISSIONMAP\\n\\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\\n#endif\";\n\nvar transmissionmap_pars_fragment = \"#ifdef USE_TRANSMISSIONMAP\\n\\tuniform sampler2D transmissionMap;\\n#endif\";\n\nvar uv_pars_fragment = \"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\\n\\tvarying vec2 vUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#ifdef USE_UV\\n\\t#ifdef UVS_VERTEX_ONLY\\n\\t\\tvec2 vUv;\\n\\t#else\\n\\t\\tvarying vec2 vUv;\\n\\t#endif\\n\\tuniform mat3 uvTransform;\\n#endif\";\n\nvar uv_vertex = \"#ifdef USE_UV\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\";\n\nvar uv2_pars_fragment = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\";\n\nvar uv2_pars_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n\\tuniform mat3 uv2Transform;\\n#endif\";\n\nvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\";\n\nvar background_frag = \"uniform sampler2D t2D;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include \\n\\t#include \\n}\";\n\nvar background_vert = \"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}\";\n\nvar cube_frag = \"#include \\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 vReflect = vWorldDirection;\\n\\t#include \\n\\tgl_FragColor = envColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include \\n\\t#include \\n}\";\n\nvar cube_vert = \"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}\";\n\nvar depth_frag = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\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\\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}\";\n\nvar depth_vert = \"#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#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}\";\n\nvar distanceRGBA_frag = \"#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 \\nvoid main () {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\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}\";\n\nvar distanceRGBA_vert = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\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}\";\n\nvar equirect_frag = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tvec4 texColor = texture2D( tEquirect, sampleUV );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include \\n\\t#include \\n}\";\n\nvar equirect_vert = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n}\";\n\nvar linedashed_frag = \"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 \\nvoid main() {\\n\\t#include \\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar linedashed_vert = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\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}\";\n\nvar meshbasic_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshbasic_vert = \"#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#ifdef USE_ENVMAP\\n\\t#include \\n\\t#include \\n\\t#include \\n\\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 \\n}\";\n\nvar meshlambert_frag = \"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vIndirectFront;\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshlambert_vert = \"#define LAMBERT\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include \\n#include \\n#include \\n#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#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\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshmatcap_frag = \"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t\\tmatcapColor = matcapTexelToLinear( matcapColor );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshmatcap_vert = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\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#include \\n\\t#include \\n\\t#ifndef FLAT_SHADED\\n\\t\\tvNormal = normalize( transformedNormal );\\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\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\nvar meshtoon_frag = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\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\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshtoon_vert = \"#define TOON\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#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#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphong_frag = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\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\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphong_vert = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#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#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphysical_frag = \"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define REFLECTIVITY\\n\\t#define CLEARCOAT\\n\\t#define TRANSMISSION\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef TRANSMISSION\\n\\tuniform float transmission;\\n#endif\\n#ifdef REFLECTIVITY\\n\\tuniform float reflectivity;\\n#endif\\n#ifdef CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheen;\\n#endif\\nvarying vec3 vViewPosition;\\n#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\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#ifdef TRANSMISSION\\n\\t\\tfloat totalTransmission = transmission;\\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 \\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\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#ifdef TRANSMISSION\\n\\t\\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\\n\\t#endif\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphysical_vert = \"#define STANDARD\\nvarying vec3 vViewPosition;\\n#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\\n#include \\n#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#include \\n\\t#include \\n\\t#include \\n#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\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar normal_frag = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#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\\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\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\";\n\nvar normal_vert = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#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\\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#include \\n#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\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\";\n\nvar points_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar points_vert = \"uniform float size;\\nuniform float scale;\\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\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar shadow_frag = \"uniform vec3 color;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar shadow_vert = \"#include \\n#include \\n#include \\nvoid main() {\\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}\";\n\nvar sprite_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar sprite_vert = \"uniform float rotation;\\nuniform vec2 center;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst ShaderChunk = {\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tencodings_fragment: encodings_fragment,\n\tencodings_pars_fragment: encodings_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_common_pars_fragment: envmap_common_pars_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_fragment: lightmap_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_vertex: lights_lambert_vertex,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_toon_fragment: lights_toon_fragment,\n\tlights_toon_pars_fragment: lights_toon_pars_fragment,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\tclearcoat_pars_fragment: clearcoat_pars_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\ttransmissionmap_fragment: transmissionmap_fragment,\n\ttransmissionmap_pars_fragment: transmissionmap_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tuv2_pars_fragment: uv2_pars_fragment,\n\tuv2_pars_vertex: uv2_pars_vertex,\n\tuv2_vertex: uv2_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tbackground_frag: background_frag,\n\tbackground_vert: background_vert,\n\tcube_frag: cube_frag,\n\tcube_vert: cube_vert,\n\tdepth_frag: depth_frag,\n\tdepth_vert: depth_vert,\n\tdistanceRGBA_frag: distanceRGBA_frag,\n\tdistanceRGBA_vert: distanceRGBA_vert,\n\tequirect_frag: equirect_frag,\n\tequirect_vert: equirect_vert,\n\tlinedashed_frag: linedashed_frag,\n\tlinedashed_vert: linedashed_vert,\n\tmeshbasic_frag: meshbasic_frag,\n\tmeshbasic_vert: meshbasic_vert,\n\tmeshlambert_frag: meshlambert_frag,\n\tmeshlambert_vert: meshlambert_vert,\n\tmeshmatcap_frag: meshmatcap_frag,\n\tmeshmatcap_vert: meshmatcap_vert,\n\tmeshtoon_frag: meshtoon_frag,\n\tmeshtoon_vert: meshtoon_vert,\n\tmeshphong_frag: meshphong_frag,\n\tmeshphong_vert: meshphong_vert,\n\tmeshphysical_frag: meshphysical_frag,\n\tmeshphysical_vert: meshphysical_vert,\n\tnormal_frag: normal_frag,\n\tnormal_vert: normal_vert,\n\tpoints_frag: points_frag,\n\tpoints_vert: points_vert,\n\tshadow_frag: shadow_frag,\n\tshadow_vert: shadow_vert,\n\tsprite_frag: sprite_frag,\n\tsprite_vert: sprite_vert\n};\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nconst UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tuvTransform: { value: new Matrix3() },\n\t\tuv2Transform: { value: new Matrix3() },\n\n\t\talphaMap: { value: null },\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 },\n\t\trefractionRatio: { value: 0.98 },\n\t\tmaxMipLevel: { value: 0 }\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalScale: { value: new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tlightProbe: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {}\n\t\t} },\n\n\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {}\n\t\t} },\n\n\t\tspotLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotShadowMap: { value: [] },\n\t\tspotShadowMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {}\n\t\t} },\n\n\t\tpointLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} },\n\n\t\tltc_1: { value: null },\n\t\tltc_2: { value: null }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t}\n\n};\n\nconst ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 1.0 },\n\t\t\t\tmetalness: { value: 0.0 },\n\t\t\t\tenvMapIntensity: { value: 1 } // temporary\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\ttoon: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.normal_vert,\n\t\tfragmentShader: ShaderChunk.normal_frag\n\n\t},\n\n\tsprite: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tuvTransform: { value: new Matrix3() },\n\t\t\tt2D: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\t/* -------------------------------------------------------------------------\n\t//\tCube map shader\n\t ------------------------------------------------------------------------- */\n\n\tcube: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.envmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: mergeUniforms( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearcoat: { value: 0 },\n\t\t\tclearcoatMap: { value: null },\n\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\tclearcoatNormalScale: { value: new Vector2( 1, 1 ) },\n\t\t\tclearcoatNormalMap: { value: null },\n\t\t\tsheen: { value: new Color( 0x000000 ) },\n\t\t\ttransmission: { value: 0 },\n\t\t\ttransmissionMap: { value: null },\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\nfunction WebGLBackground( renderer, cubemaps, state, objects, premultipliedAlpha ) {\n\n\tconst clearColor = new Color( 0x000000 );\n\tlet clearAlpha = 0;\n\n\tlet planeMesh;\n\tlet boxMesh;\n\n\tlet currentBackground = null;\n\tlet currentBackgroundVersion = 0;\n\tlet currentTonemapping = null;\n\n\tfunction render( renderList, scene, camera, forceClear ) {\n\n\t\tlet background = scene.isScene === true ? scene.background : null;\n\n\t\tif ( background && background.isTexture ) {\n\n\t\t\tbackground = cubemaps.get( background );\n\n\t\t}\n\n\t\t// Ignore background in AR\n\t\t// TODO: Reconsider this.\n\n\t\tconst xr = renderer.xr;\n\t\tconst session = xr.getSession && xr.getSession();\n\n\t\tif ( session && session.environmentBlendMode === 'additive' ) {\n\n\t\t\tbackground = null;\n\n\t\t}\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\tif ( background && ( background.isCubeTexture || background.isWebGLCubeRenderTarget || background.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxBufferGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.cube.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.cube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.cube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\t// enable code injection for non-built-in material\n\t\t\t\tObject.defineProperty( boxMesh.material, 'envMap', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\tif ( background.isWebGLCubeRenderTarget ) {\n\n\t\t\t\t// TODO Deprecate\n\n\t\t\t\tbackground = background.texture;\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\tboxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background._needsFlipEnvMap ) ? - 1 : 1;\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tboxMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneBufferGeometry( 2, 2 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.background.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tplaneMesh.geometry.deleteAttribute( 'normal' );\n\n\t\t\t\t// enable code injection for non-built-in material\n\t\t\t\tObject.defineProperty( planeMesh.material, 'map', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\n\t\t\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\tbackground.updateMatrix();\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tplaneMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tstate.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha = 1 ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render\n\n\t};\n\n}\n\nfunction WebGLBindingStates( gl, extensions, attributes, capabilities ) {\n\n\tconst maxVertexAttributes = gl.getParameter( 34921 );\n\n\tconst extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' );\n\tconst vaoAvailable = capabilities.isWebGL2 || extension !== null;\n\n\tconst bindingStates = {};\n\n\tconst defaultState = createBindingState( null );\n\tlet currentState = defaultState;\n\n\tfunction setup( object, material, program, geometry, index ) {\n\n\t\tlet updateBuffers = false;\n\n\t\tif ( vaoAvailable ) {\n\n\t\t\tconst state = getBindingState( geometry, program, material );\n\n\t\t\tif ( currentState !== state ) {\n\n\t\t\t\tcurrentState = state;\n\t\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t\t}\n\n\t\t\tupdateBuffers = needsUpdate( geometry, index );\n\n\t\t\tif ( updateBuffers ) saveCache( geometry, index );\n\n\t\t} else {\n\n\t\t\tconst wireframe = ( material.wireframe === true );\n\n\t\t\tif ( currentState.geometry !== geometry.id ||\n\t\t\t\tcurrentState.program !== program.id ||\n\t\t\t\tcurrentState.wireframe !== wireframe ) {\n\n\t\t\t\tcurrentState.geometry = geometry.id;\n\t\t\t\tcurrentState.program = program.id;\n\t\t\t\tcurrentState.wireframe = wireframe;\n\n\t\t\t\tupdateBuffers = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh === true ) {\n\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, 34963 );\n\n\t\t}\n\n\t\tif ( updateBuffers ) {\n\n\t\t\tsetupVertexAttributes( object, material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tgl.bindBuffer( 34963, attributes.get( index ).buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createVertexArrayObject() {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.createVertexArray();\n\n\t\treturn extension.createVertexArrayOES();\n\n\t}\n\n\tfunction bindVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao );\n\n\t\treturn extension.bindVertexArrayOES( vao );\n\n\t}\n\n\tfunction deleteVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao );\n\n\t\treturn extension.deleteVertexArrayOES( vao );\n\n\t}\n\n\tfunction getBindingState( geometry, program, material ) {\n\n\t\tconst wireframe = ( material.wireframe === true );\n\n\t\tlet programMap = bindingStates[ geometry.id ];\n\n\t\tif ( programMap === undefined ) {\n\n\t\t\tprogramMap = {};\n\t\t\tbindingStates[ geometry.id ] = programMap;\n\n\t\t}\n\n\t\tlet stateMap = programMap[ program.id ];\n\n\t\tif ( stateMap === undefined ) {\n\n\t\t\tstateMap = {};\n\t\t\tprogramMap[ program.id ] = stateMap;\n\n\t\t}\n\n\t\tlet state = stateMap[ wireframe ];\n\n\t\tif ( state === undefined ) {\n\n\t\t\tstate = createBindingState( createVertexArrayObject() );\n\t\t\tstateMap[ wireframe ] = state;\n\n\t\t}\n\n\t\treturn state;\n\n\t}\n\n\tfunction createBindingState( vao ) {\n\n\t\tconst newAttributes = [];\n\t\tconst enabledAttributes = [];\n\t\tconst attributeDivisors = [];\n\n\t\tfor ( let i = 0; i < maxVertexAttributes; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\t\t\tenabledAttributes[ i ] = 0;\n\t\t\tattributeDivisors[ i ] = 0;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\tgeometry: null,\n\t\t\tprogram: null,\n\t\t\twireframe: false,\n\n\t\t\tnewAttributes: newAttributes,\n\t\t\tenabledAttributes: enabledAttributes,\n\t\t\tattributeDivisors: attributeDivisors,\n\t\t\tobject: vao,\n\t\t\tattributes: {},\n\t\t\tindex: null\n\n\t\t};\n\n\t}\n\n\tfunction needsUpdate( geometry, index ) {\n\n\t\tconst cachedAttributes = currentState.attributes;\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tlet attributesNum = 0;\n\n\t\tfor ( const key in geometryAttributes ) {\n\n\t\t\tconst cachedAttribute = cachedAttributes[ key ];\n\t\t\tconst geometryAttribute = geometryAttributes[ key ];\n\n\t\t\tif ( cachedAttribute === undefined ) return true;\n\n\t\t\tif ( cachedAttribute.attribute !== geometryAttribute ) return true;\n\n\t\t\tif ( cachedAttribute.data !== geometryAttribute.data ) return true;\n\n\t\t\tattributesNum ++;\n\n\t\t}\n\n\t\tif ( currentState.attributesNum !== attributesNum ) return true;\n\n\t\tif ( currentState.index !== index ) return true;\n\n\t\treturn false;\n\n\t}\n\n\tfunction saveCache( geometry, index ) {\n\n\t\tconst cache = {};\n\t\tconst attributes = geometry.attributes;\n\t\tlet attributesNum = 0;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tconst data = {};\n\t\t\tdata.attribute = attribute;\n\n\t\t\tif ( attribute.data ) {\n\n\t\t\t\tdata.data = attribute.data;\n\n\t\t\t}\n\n\t\t\tcache[ key ] = data;\n\n\t\t\tattributesNum ++;\n\n\t\t}\n\n\t\tcurrentState.attributes = cache;\n\t\tcurrentState.attributesNum = attributesNum;\n\n\t\tcurrentState.index = index;\n\n\t}\n\n\tfunction initAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\n\t\tfor ( let i = 0, il = newAttributes.length; i < il; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\t\tconst attributeDivisors = currentState.attributeDivisors;\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tconst extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\n\t\tfor ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction vertexAttribPointer( index, size, type, normalized, stride, offset ) {\n\n\t\tif ( capabilities.isWebGL2 === true && ( type === 5124 || type === 5125 ) ) {\n\n\t\t\tgl.vertexAttribIPointer( index, size, type, stride, offset );\n\n\t\t} else {\n\n\t\t\tgl.vertexAttribPointer( index, size, type, normalized, stride, offset );\n\n\t\t}\n\n\t}\n\n\tfunction setupVertexAttributes( object, material, program, geometry ) {\n\n\t\tif ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) {\n\n\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return;\n\n\t\t}\n\n\t\tinitAttributes();\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tconst materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute >= 0 ) {\n\n\t\t\t\tconst geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tconst normalized = geometryAttribute.normalized;\n\t\t\t\t\tconst size = geometryAttribute.itemSize;\n\n\t\t\t\t\tconst attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\t\t\t\t\tconst bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst data = geometryAttribute.data;\n\t\t\t\t\t\tconst stride = data.stride;\n\t\t\t\t\t\tconst offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data && data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute, data.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tenableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\t\t\t\t\t\tvertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tenableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\t\t\t\t\t\tvertexAttribPointer( programAttribute, size, type, normalized, 0, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( name === 'instanceMatrix' ) {\n\n\t\t\t\t\tconst attribute = attributes.get( object.instanceMatrix );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 0, 1 );\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 1, 1 );\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 2, 1 );\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 3, 1 );\n\n\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 0, 4, type, false, 64, 0 );\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 1, 4, type, false, 64, 16 );\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 2, 4, type, false, 64, 32 );\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 3, 4, type, false, 64, 48 );\n\n\t\t\t\t} else if ( name === 'instanceColor' ) {\n\n\t\t\t\t\tconst attribute = attributes.get( object.instanceColor );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute, 1 );\n\n\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute, 3, type, false, 12, 0 );\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tconst value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\tgl.vertexAttrib2fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\tgl.vertexAttrib3fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\tgl.vertexAttrib4fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tgl.vertexAttrib1fv( programAttribute, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tdisableUnusedAttributes();\n\n\t}\n\n\tfunction dispose() {\n\n\t\treset();\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t}\n\n\t}\n\n\tfunction releaseStatesOfGeometry( geometry ) {\n\n\t\tif ( bindingStates[ geometry.id ] === undefined ) return;\n\n\t\tconst programMap = bindingStates[ geometry.id ];\n\n\t\tfor ( const programId in programMap ) {\n\n\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ programId ];\n\n\t\t}\n\n\t\tdelete bindingStates[ geometry.id ];\n\n\t}\n\n\tfunction releaseStatesOfProgram( program ) {\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tif ( programMap[ program.id ] === undefined ) continue;\n\n\t\t\tconst stateMap = programMap[ program.id ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ program.id ];\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\tresetDefaultState();\n\n\t\tif ( currentState === defaultState ) return;\n\n\t\tcurrentState = defaultState;\n\t\tbindVertexArrayObject( currentState.object );\n\n\t}\n\n\t// for backward-compatilibity\n\n\tfunction resetDefaultState() {\n\n\t\tdefaultState.geometry = null;\n\t\tdefaultState.program = null;\n\t\tdefaultState.wireframe = false;\n\n\t}\n\n\treturn {\n\n\t\tsetup: setup,\n\t\treset: reset,\n\t\tresetDefaultState: resetDefaultState,\n\t\tdispose: dispose,\n\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tdisableUnusedAttributes: disableUnusedAttributes\n\n\t};\n\n}\n\nfunction WebGLBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawArraysInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawArraysInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ methodName ]( mode, start, count, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\nfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\tlet maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( 35633, 36338 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36338 ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( 35633, 36337 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36337 ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\t/* eslint-disable no-undef */\n\tconst isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ) ||\n\t\t( typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext );\n\t/* eslint-enable no-undef */\n\n\tlet precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tconst maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tconst maxTextures = gl.getParameter( 34930 );\n\tconst maxVertexTextures = gl.getParameter( 35660 );\n\tconst maxTextureSize = gl.getParameter( 3379 );\n\tconst maxCubemapSize = gl.getParameter( 34076 );\n\n\tconst maxAttributes = gl.getParameter( 34921 );\n\tconst maxVertexUniforms = gl.getParameter( 36347 );\n\tconst maxVaryings = gl.getParameter( 36348 );\n\tconst maxFragmentUniforms = gl.getParameter( 36349 );\n\n\tconst vertexTextures = maxVertexTextures > 0;\n\tconst floatFragmentTextures = isWebGL2 || !! extensions.get( 'OES_texture_float' );\n\tconst floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\tconst maxSamples = isWebGL2 ? gl.getParameter( 36183 ) : 0;\n\n\treturn {\n\n\t\tisWebGL2: isWebGL2,\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\tfloatVertexTextures: floatVertexTextures,\n\n\t\tmaxSamples: maxSamples\n\n\t};\n\n}\n\nfunction WebGLClipping( properties ) {\n\n\tconst scope = this;\n\n\tlet globalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false;\n\n\tconst plane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping, camera ) {\n\n\t\tconst enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\t\tresetGlobalState();\n\n\t};\n\n\tthis.setState = function ( material, camera, useCache ) {\n\n\t\tconst planes = material.clippingPlanes,\n\t\t\tclipIntersection = material.clipIntersection,\n\t\t\tclipShadows = material.clipShadows;\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4;\n\n\t\t\tlet dstArray = materialProperties.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, useCache );\n\n\t\t\tfor ( let i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tmaterialProperties.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tconst nPlanes = planes !== null ? planes.length : 0;\n\t\tlet dstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tconst flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\t\tscope.numIntersection = 0;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\nfunction WebGLCubeMaps( renderer ) {\n\n\tlet cubemaps = new WeakMap();\n\n\tfunction mapTextureMapping( texture, mapping ) {\n\n\t\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\t\ttexture.mapping = CubeReflectionMapping;\n\n\t\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\t\ttexture.mapping = CubeRefractionMapping;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\tif ( cubemaps.has( texture ) ) {\n\n\t\t\t\t\tconst cubemap = cubemaps.get( texture ).texture;\n\t\t\t\t\treturn mapTextureMapping( cubemap, texture.mapping );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( image && image.height > 0 ) {\n\n\t\t\t\t\t\tconst currentRenderList = renderer.getRenderList();\n\t\t\t\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\t\t\t\t\tconst currentRenderState = renderer.getRenderState();\n\n\t\t\t\t\t\tconst renderTarget = new WebGLCubeRenderTarget( image.height / 2 );\n\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\t\t\t\t\t\tcubemaps.set( texture, renderTarget );\n\n\t\t\t\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\t\t\t\t\t\trenderer.setRenderList( currentRenderList );\n\t\t\t\t\t\trenderer.setRenderState( currentRenderState );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\treturn mapTextureMapping( renderTarget.texture, texture.mapping );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemap = cubemaps.get( texture );\n\n\t\tif ( cubemap !== undefined ) {\n\n\t\t\tcubemaps.delete( texture );\n\t\t\tcubemap.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubemaps = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLExtensions( gl ) {\n\n\tconst extensions = {};\n\n\treturn {\n\n\t\thas: function ( name ) {\n\n\t\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\t\treturn extensions[ name ] !== null;\n\n\t\t\t}\n\n\t\t\tlet extension;\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\textension = gl.getExtension( name );\n\n\t\t\t}\n\n\t\t\textensions[ name ] = extension;\n\n\t\t\treturn extension !== null;\n\n\t\t},\n\n\t\tget: function ( name ) {\n\n\t\t\tif ( ! this.has( name ) ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\treturn extensions[ name ];\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\tconst geometries = new WeakMap();\n\tconst wireframeAttributes = new WeakMap();\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tconst geometry = event.target;\n\t\tconst buffergeometry = geometries.get( geometry );\n\n\t\tif ( buffergeometry.index !== null ) {\n\n\t\t\tattributes.remove( buffergeometry.index );\n\n\t\t}\n\n\t\tfor ( const name in buffergeometry.attributes ) {\n\n\t\t\tattributes.remove( buffergeometry.attributes[ name ] );\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tgeometries.delete( geometry );\n\n\t\tconst attribute = wireframeAttributes.get( buffergeometry );\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\twireframeAttributes.delete( buffergeometry );\n\n\t\t}\n\n\t\tbindingStates.releaseStatesOfGeometry( buffergeometry );\n\n\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\tdelete geometry._maxInstanceCount;\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tlet buffergeometry = geometries.get( geometry );\n\n\t\tif ( buffergeometry ) return buffergeometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tbuffergeometry = geometry;\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tif ( geometry._bufferGeometry === undefined ) {\n\n\t\t\t\tgeometry._bufferGeometry = new BufferGeometry().setFromObject( object );\n\n\t\t\t}\n\n\t\t\tbuffergeometry = geometry._bufferGeometry;\n\n\t\t}\n\n\t\tgeometries.set( geometry, buffergeometry );\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\tfor ( const name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], 34962 );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateWireframeAttribute( geometry ) {\n\n\t\tconst indices = [];\n\n\t\tconst geometryIndex = geometry.index;\n\t\tconst geometryPosition = geometry.attributes.position;\n\t\tlet version = 0;\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tconst array = geometryIndex.array;\n\t\t\tversion = geometryIndex.version;\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = array[ i + 0 ];\n\t\t\t\tconst b = array[ i + 1 ];\n\t\t\t\tconst c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst array = geometryPosition.array;\n\t\t\tversion = geometryPosition.version;\n\n\t\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tconst a = i + 0;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\t\tattribute.version = version;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates\n\n\t\t//\n\n\t\tconst previousAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( previousAttribute ) attributes.remove( previousAttribute );\n\n\t\t//\n\n\t\twireframeAttributes.set( geometry, attribute );\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tconst currentAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( currentAttribute ) {\n\n\t\t\tconst geometryIndex = geometry.index;\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\t// if the attribute is obsolete, create a new one\n\n\t\t\t\tif ( currentAttribute.version < geometryIndex.version ) {\n\n\t\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t}\n\n\t\treturn wireframeAttributes.get( geometry );\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tlet type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawElementsInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawElementsInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ methodName ]( mode, count, type, start * bytesPerElement, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\nfunction WebGLInfo( gl ) {\n\n\tconst memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tconst render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase 4:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 3:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase 0:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.frame ++;\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\nfunction numericalSort( a, b ) {\n\n\treturn a[ 0 ] - b[ 0 ];\n\n}\n\nfunction absNumericalSort( a, b ) {\n\n\treturn Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );\n\n}\n\nfunction WebGLMorphtargets( gl ) {\n\n\tconst influencesList = {};\n\tconst morphInfluences = new Float32Array( 8 );\n\n\tconst workInfluences = [];\n\n\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\tworkInfluences[ i ] = [ i, 0 ];\n\n\t}\n\n\tfunction update( object, geometry, material, program ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\t// When object doesn't have morph target influences defined, we treat it as a 0-length array\n\t\t// This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences\n\n\t\tconst length = objectInfluences === undefined ? 0 : objectInfluences.length;\n\n\t\tlet influences = influencesList[ geometry.id ];\n\n\t\tif ( influences === undefined ) {\n\n\t\t\t// initialise list\n\n\t\t\tinfluences = [];\n\n\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\tinfluences[ i ] = [ i, 0 ];\n\n\t\t\t}\n\n\t\t\tinfluencesList[ geometry.id ] = influences;\n\n\t\t}\n\n\t\t// Collect influences\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst influence = influences[ i ];\n\n\t\t\tinfluence[ 0 ] = i;\n\t\t\tinfluence[ 1 ] = objectInfluences[ i ];\n\n\t\t}\n\n\t\tinfluences.sort( absNumericalSort );\n\n\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\tif ( i < length && influences[ i ][ 1 ] ) {\n\n\t\t\t\tworkInfluences[ i ][ 0 ] = influences[ i ][ 0 ];\n\t\t\t\tworkInfluences[ i ][ 1 ] = influences[ i ][ 1 ];\n\n\t\t\t} else {\n\n\t\t\t\tworkInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER;\n\t\t\t\tworkInfluences[ i ][ 1 ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tworkInfluences.sort( numericalSort );\n\n\t\tconst morphTargets = material.morphTargets && geometry.morphAttributes.position;\n\t\tconst morphNormals = material.morphNormals && geometry.morphAttributes.normal;\n\n\t\tlet morphInfluencesSum = 0;\n\n\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\tconst influence = workInfluences[ i ];\n\t\t\tconst index = influence[ 0 ];\n\t\t\tconst value = influence[ 1 ];\n\n\t\t\tif ( index !== Number.MAX_SAFE_INTEGER && value ) {\n\n\t\t\t\tif ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t}\n\n\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\tmorphInfluencesSum += value;\n\n\t\t\t} else {\n\n\t\t\t\tif ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) {\n\n\t\t\t\t\tgeometry.deleteAttribute( 'morphTarget' + i );\n\n\t\t\t\t}\n\n\t\t\t\tif ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) {\n\n\t\t\t\t\tgeometry.deleteAttribute( 'morphNormal' + i );\n\n\t\t\t\t}\n\n\t\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// GLSL shader uses formula baseinfluence * base + sum(target * influence)\n\t\t// This allows us to switch between absolute morphs and relative morphs without changing shader code\n\t\t// When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence)\n\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\nfunction WebGLObjects( gl, geometries, attributes, info ) {\n\n\tlet updateMap = new WeakMap();\n\n\tfunction update( object ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\tconst geometry = object.geometry;\n\t\tconst buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateMap.get( buffergeometry ) !== frame ) {\n\n\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\tbuffergeometry.updateFromObject( object );\n\n\t\t\t}\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateMap.set( buffergeometry, frame );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\tattributes.update( object.instanceMatrix, 34962 );\n\n\t\t\tif ( object.instanceColor !== null ) {\n\n\t\t\t\tattributes.update( object.instanceColor, 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateMap = new WeakMap();\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\nfunction DataTexture2DArray( data = null, width = 1, height = 1, depth = 1 ) {\n\n\tTexture.call( this, null );\n\n\tthis.image = { data, width, height, depth };\n\n\tthis.magFilter = NearestFilter;\n\tthis.minFilter = NearestFilter;\n\n\tthis.wrapR = ClampToEdgeWrapping;\n\n\tthis.generateMipmaps = false;\n\tthis.flipY = false;\n\n\tthis.needsUpdate = true;\n\n}\n\nDataTexture2DArray.prototype = Object.create( Texture.prototype );\nDataTexture2DArray.prototype.constructor = DataTexture2DArray;\nDataTexture2DArray.prototype.isDataTexture2DArray = true;\n\nfunction DataTexture3D( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t// We're going to add .setXXX() methods for setting properties later.\n\t// Users can still set in DataTexture3D directly.\n\t//\n\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t// \ttexture.anisotropy = 16;\n\t//\n\t// See #14839\n\n\tTexture.call( this, null );\n\n\tthis.image = { data, width, height, depth };\n\n\tthis.magFilter = NearestFilter;\n\tthis.minFilter = NearestFilter;\n\n\tthis.wrapR = ClampToEdgeWrapping;\n\n\tthis.generateMipmaps = false;\n\tthis.flipY = false;\n\n\tthis.needsUpdate = true;\n\n\n}\n\nDataTexture3D.prototype = Object.create( Texture.prototype );\nDataTexture3D.prototype.constructor = DataTexture3D;\nDataTexture3D.prototype.isDataTexture3D = true;\n\n/**\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [textures] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'textures' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (textures factorizations):\n *\n * .upload( gl, seq, values, textures )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (textures factorizations):\n *\n * .setValue( gl, name, value, textures )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\nconst emptyTexture = new Texture();\nconst emptyTexture2dArray = new DataTexture2DArray();\nconst emptyTexture3d = new DataTexture3D();\nconst emptyCubeTexture = new CubeTexture();\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nconst arrayCacheF32 = [];\nconst arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nconst mat4array = new Float32Array( 16 );\nconst mat3array = new Float32Array( 9 );\nconst mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tconst firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tconst n = nBlocks * blockSize;\n\tlet r = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( let i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( let i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( textures, n ) {\n\n\tlet r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\tr[ i ] = textures.allocateTextureUnit();\n\n\t}\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValueV1f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValueV2f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or MatrixN)\n\nfunction setValueM2( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM3( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM4( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.safeSetTexture2D( v || emptyTexture, unit );\n\n}\n\nfunction setValueT2DArray1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2DArray( v || emptyTexture2dArray, unit );\n\n}\n\nfunction setValueT3D1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture3D( v || emptyTexture3d, unit );\n\n}\n\nfunction setValueT6( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.safeSetTextureCube( v || emptyCubeTexture, unit );\n\n}\n\n// Integer / Boolean vectors or arrays thereof (always flat arrays)\n\nfunction setValueV1i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\nfunction setValueV2i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform2iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV3i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform3iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV4i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform4iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\n// uint\n\nfunction setValueV1ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1ui( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1f; // FLOAT\n\t\tcase 0x8b50: return setValueV2f; // _VEC2\n\t\tcase 0x8b51: return setValueV3f; // _VEC3\n\t\tcase 0x8b52: return setValueV4f; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2; // _MAT2\n\t\tcase 0x8b5b: return setValueM3; // _MAT3\n\t\tcase 0x8b5c: return setValueM4; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2i; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3i; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4i; // _VEC4\n\n\t\tcase 0x1405: return setValueV1ui; // UINT\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3D1;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArray1;\n\n\t}\n\n}\n\n// Array of scalars\nfunction setValueV1fArray( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\n\n// Integer / Boolean vectors or arrays thereof (always flat arrays)\nfunction setValueV1iArray( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\nfunction setValueV2iArray( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValueV3iArray( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValueV4iArray( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n\n// Array of vectors (flat or from THREE classes)\n\nfunction setValueV2fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 2 );\n\n\tgl.uniform2fv( this.addr, data );\n\n}\n\nfunction setValueV3fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 3 );\n\n\tgl.uniform3fv( this.addr, data );\n\n}\n\nfunction setValueV4fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniform4fv( this.addr, data );\n\n}\n\n// Array of matrices (flat or from THREE clases)\n\nfunction setValueM2Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n}\n\nfunction setValueM3Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 9 );\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n}\n\nfunction setValueM4Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 16 );\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n}\n\n// Array of textures (2D / Cube)\n\nfunction setValueT1Array( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.safeSetTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6Array( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.safeSetTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1fArray; // FLOAT\n\t\tcase 0x8b50: return setValueV2fArray; // _VEC2\n\t\tcase 0x8b51: return setValueV3fArray; // _VEC3\n\t\tcase 0x8b52: return setValueV4fArray; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2Array; // _MAT2\n\t\tcase 0x8b5b: return setValueM3Array; // _MAT3\n\t\tcase 0x8b5c: return setValueM4Array; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1Array;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6Array;\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nfunction SingleUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.cache = [];\n\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nfunction PureArrayUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.cache = [];\n\tthis.size = activeInfo.size;\n\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nPureArrayUniform.prototype.updateCache = function ( data ) {\n\n\tconst cache = this.cache;\n\n\tif ( data instanceof Float32Array && cache.length !== data.length ) {\n\n\t\tthis.cache = new Float32Array( data.length );\n\n\t}\n\n\tcopyArray( cache, data );\n\n};\n\nfunction StructuredUniform( id ) {\n\n\tthis.id = id;\n\n\tthis.seq = [];\n\tthis.map = {};\n\n}\n\nStructuredUniform.prototype.setValue = function ( gl, value, textures ) {\n\n\tconst seq = this.seq;\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ];\n\t\tu.setValue( gl, value[ u.id ], textures );\n\n\t}\n\n};\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nconst RePathPart = /([\\w\\d_]+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n// - followed by an optional right bracket (found when array index)\n// - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tconst path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\twhile ( true ) {\n\n\t\tconst match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex;\n\n\t\tlet id = match[ 1 ];\n\t\tconst idIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tconst map = container.map;\n\t\t\tlet next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nfunction WebGLUniforms( gl, program ) {\n\n\tthis.seq = [];\n\tthis.map = {};\n\n\tconst n = gl.getProgramParameter( program, 35718 );\n\n\tfor ( let i = 0; i < n; ++ i ) {\n\n\t\tconst info = gl.getActiveUniform( program, i ),\n\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\tparseUniform( info, addr, this );\n\n\t}\n\n}\n\nWebGLUniforms.prototype.setValue = function ( gl, name, value, textures ) {\n\n\tconst u = this.map[ name ];\n\n\tif ( u !== undefined ) u.setValue( gl, value, textures );\n\n};\n\nWebGLUniforms.prototype.setOptional = function ( gl, object, name ) {\n\n\tconst v = object[ name ];\n\n\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n};\n\n\n// Static interface\n\nWebGLUniforms.upload = function ( gl, seq, values, textures ) {\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ],\n\t\t\tv = values[ u.id ];\n\n\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\tu.setValue( gl, v.value, textures );\n\n\t\t}\n\n\t}\n\n};\n\nWebGLUniforms.seqWithValue = function ( seq, values ) {\n\n\tconst r = [];\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ];\n\t\tif ( u.id in values ) r.push( u );\n\n\t}\n\n\treturn r;\n\n};\n\nfunction WebGLShader( gl, type, string ) {\n\n\tconst shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\treturn shader;\n\n}\n\nlet programIdCount = 0;\n\nfunction addLineNumbers( string ) {\n\n\tconst lines = string.split( '\\n' );\n\n\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\tlines[ i ] = ( i + 1 ) + ': ' + lines[ i ];\n\n\t}\n\n\treturn lines.join( '\\n' );\n\n}\n\nfunction getEncodingComponents( encoding ) {\n\n\tswitch ( encoding ) {\n\n\t\tcase LinearEncoding:\n\t\t\treturn [ 'Linear', '( value )' ];\n\t\tcase sRGBEncoding:\n\t\t\treturn [ 'sRGB', '( value )' ];\n\t\tcase RGBEEncoding:\n\t\t\treturn [ 'RGBE', '( value )' ];\n\t\tcase RGBM7Encoding:\n\t\t\treturn [ 'RGBM', '( value, 7.0 )' ];\n\t\tcase RGBM16Encoding:\n\t\t\treturn [ 'RGBM', '( value, 16.0 )' ];\n\t\tcase RGBDEncoding:\n\t\t\treturn [ 'RGBD', '( value, 256.0 )' ];\n\t\tcase GammaEncoding:\n\t\t\treturn [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ];\n\t\tcase LogLuvEncoding:\n\t\t\treturn [ 'LogLuv', '( value )' ];\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding );\n\t\t\treturn [ 'Linear', '( value )' ];\n\n\t}\n\n}\n\nfunction getShaderErrors( gl, shader, type ) {\n\n\tconst status = gl.getShaderParameter( shader, 35713 );\n\tconst log = gl.getShaderInfoLog( shader ).trim();\n\n\tif ( status && log === '' ) return '';\n\n\t// --enable-privileged-webgl-extension\n\t// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\tconst source = gl.getShaderSource( shader );\n\n\treturn 'THREE.WebGLShader: gl.getShaderInfoLog() ' + type + '\\n' + log + addLineNumbers( source );\n\n}\n\nfunction getTexelDecodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }';\n\n}\n\nfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tlet toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tcase ACESFilmicToneMapping:\n\t\t\ttoneMappingName = 'ACESFilmic';\n\t\t\tbreak;\n\n\t\tcase CustomToneMapping:\n\t\t\ttoneMappingName = 'Custom';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );\n\t\t\ttoneMappingName = 'Linear';\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nfunction generateExtensions( parameters ) {\n\n\tconst chunks = [\n\t\t( parameters.extensionDerivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tconst chunks = [];\n\n\tfor ( const name in defines ) {\n\n\t\tconst value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tconst attributes = {};\n\n\tconst n = gl.getProgramParameter( program, 35721 );\n\n\tfor ( let i = 0; i < n; i ++ ) {\n\n\t\tconst info = gl.getActiveAttrib( program, i );\n\t\tconst name = info.name;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = gl.getAttribLocation( program, name );\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )\n\t\t.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )\n\t\t.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\n// Resolve Includes\n\nconst includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\nfunction resolveIncludes( string ) {\n\n\treturn string.replace( includePattern, includeReplacer );\n\n}\n\nfunction includeReplacer( match, include ) {\n\n\tconst string = ShaderChunk[ include ];\n\n\tif ( string === undefined ) {\n\n\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t}\n\n\treturn resolveIncludes( string );\n\n}\n\n// Unroll Loops\n\nconst deprecatedUnrollLoopPattern = /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\nconst unrollLoopPattern = /#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;\n\nfunction unrollLoops( string ) {\n\n\treturn string\n\t\t.replace( unrollLoopPattern, loopReplacer )\n\t\t.replace( deprecatedUnrollLoopPattern, deprecatedLoopReplacer );\n\n}\n\nfunction deprecatedLoopReplacer( match, start, end, snippet ) {\n\n\tconsole.warn( 'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.' );\n\treturn loopReplacer( match, start, end, snippet );\n\n}\n\nfunction loopReplacer( match, start, end, snippet ) {\n\n\tlet string = '';\n\n\tfor ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\tstring += snippet\n\t\t\t.replace( /\\[\\s*i\\s*\\]/g, '[ ' + i + ' ]' )\n\t\t\t.replace( /UNROLLED_LOOP_INDEX/g, i );\n\n\t}\n\n\treturn string;\n\n}\n\n//\n\nfunction generatePrecision( parameters ) {\n\n\tlet precisionstring = \"precision \" + parameters.precision + \" float;\\nprecision \" + parameters.precision + \" int;\";\n\n\tif ( parameters.precision === \"highp\" ) {\n\n\t\tprecisionstring += \"\\n#define HIGH_PRECISION\";\n\n\t} else if ( parameters.precision === \"mediump\" ) {\n\n\t\tprecisionstring += \"\\n#define MEDIUM_PRECISION\";\n\n\t} else if ( parameters.precision === \"lowp\" ) {\n\n\t\tprecisionstring += \"\\n#define LOW_PRECISION\";\n\n\t}\n\n\treturn precisionstring;\n\n}\n\nfunction generateShadowMapTypeDefine( parameters ) {\n\n\tlet shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t} else if ( parameters.shadowMapType === VSMShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';\n\n\t}\n\n\treturn shadowMapTypeDefine;\n\n}\n\nfunction generateEnvMapTypeDefine( parameters ) {\n\n\tlet envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapTypeDefine;\n\n}\n\nfunction generateEnvMapModeDefine( parameters ) {\n\n\tlet envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeRefractionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapModeDefine;\n\n}\n\nfunction generateEnvMapBlendingDefine( parameters ) {\n\n\tlet envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapBlendingDefine;\n\n}\n\nfunction WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {\n\n\tconst gl = renderer.getContext();\n\n\tconst defines = parameters.defines;\n\n\tlet vertexShader = parameters.vertexShader;\n\tlet fragmentShader = parameters.fragmentShader;\n\n\tconst shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );\n\tconst envMapTypeDefine = generateEnvMapTypeDefine( parameters );\n\tconst envMapModeDefine = generateEnvMapModeDefine( parameters );\n\tconst envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );\n\n\n\tconst gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;\n\n\tconst customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );\n\n\tconst customDefines = generateDefines( defines );\n\n\tconst program = gl.createProgram();\n\n\tlet prefixVertex, prefixFragment;\n\tlet versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + \"\\n\" : '';\n\n\tif ( parameters.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.instancing ? '#define USE_INSTANCING' : '',\n\t\t\tparameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',\n\n\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t'#define MAX_BONES ' + parameters.maxBones,\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\t\t\tparameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '',\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\t\t\tparameters.useVertexTexture ? '#define BONE_TEXTURE' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t'#ifdef USE_INSTANCING',\n\n\t\t\t'\tattribute mat4 instanceMatrix;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_COLOR',\n\n\t\t\t'\tattribute vec3 instanceColor;',\n\n\t\t\t'#endif',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_TANGENT',\n\n\t\t\t'\tattribute vec4 tangent;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_COLOR',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_MORPHTARGETS',\n\n\t\t\t'\tattribute vec3 morphTarget0;',\n\t\t\t'\tattribute vec3 morphTarget1;',\n\t\t\t'\tattribute vec3 morphTarget2;',\n\t\t\t'\tattribute vec3 morphTarget3;',\n\n\t\t\t'\t#ifdef USE_MORPHNORMALS',\n\n\t\t\t'\t\tattribute vec3 morphNormal0;',\n\t\t\t'\t\tattribute vec3 morphNormal1;',\n\t\t\t'\t\tattribute vec3 morphNormal2;',\n\t\t\t'\t\tattribute vec3 morphNormal3;',\n\n\t\t\t'\t#else',\n\n\t\t\t'\t\tattribute vec3 morphTarget4;',\n\t\t\t'\t\tattribute vec3 morphTarget5;',\n\t\t\t'\t\tattribute vec3 morphTarget6;',\n\t\t\t'\t\tattribute vec3 morphTarget7;',\n\n\t\t\t'\t#endif',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest + ( parameters.alphaTest % 1 ? '' : '.0' ) : '', // add '.0' if integer\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.matcap ? '#define USE_MATCAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\n\t\t\tparameters.sheen ? '#define USE_SHEEN' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t( ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ) ? '#define TEXTURE_LOD_EXT' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\n\t\t\tShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tparameters.map ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',\n\t\t\tparameters.matcap ? getTexelDecodingFunction( 'matcapTexelToLinear', parameters.matcapEncoding ) : '',\n\t\t\tparameters.envMap ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',\n\t\t\tparameters.emissiveMap ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',\n\t\t\tparameters.lightMap ? getTexelDecodingFunction( 'lightMapTexelToLinear', parameters.lightMapEncoding ) : '',\n\t\t\tgetTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ),\n\n\t\t\tparameters.depthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = resolveIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = resolveIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tif ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) {\n\n\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\n\t\tversionString = '#version 300 es\\n';\n\n\t\tprefixVertex = [\n\t\t\t'#define attribute in',\n\t\t\t'#define varying out',\n\t\t\t'#define texture2D texture'\n\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\tprefixFragment = [\n\t\t\t'#define varying in',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : 'out highp vec4 pc_fragColor;',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',\n\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t'#define texture2D texture',\n\t\t\t'#define textureCube texture',\n\t\t\t'#define texture2DProj textureProj',\n\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t}\n\n\tconst vertexGlsl = versionString + prefixVertex + vertexShader;\n\tconst fragmentGlsl = versionString + prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tconst glVertexShader = WebGLShader( gl, 35633, vertexGlsl );\n\tconst glFragmentShader = WebGLShader( gl, 35632, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( parameters.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, parameters.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\t// check for link errors\n\tif ( renderer.debug.checkShaderErrors ) {\n\n\t\tconst programLog = gl.getProgramInfoLog( program ).trim();\n\t\tconst vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\t\tconst fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\t\tlet runnable = true;\n\t\tlet haveDiagnostics = true;\n\n\t\tif ( gl.getProgramParameter( program, 35714 ) === false ) {\n\n\t\t\trunnable = false;\n\n\t\t\tconst vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\tconst fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\tconsole.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), '35715', gl.getProgramParameter( program, 35715 ), 'gl.getProgramInfoLog', programLog, vertexErrors, fragmentErrors );\n\n\t\t} else if ( programLog !== '' ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog );\n\n\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\thaveDiagnostics = false;\n\n\t\t}\n\n\t\tif ( haveDiagnostics ) {\n\n\t\t\tthis.diagnostics = {\n\n\t\t\t\trunnable: runnable,\n\n\t\t\t\tprogramLog: programLog,\n\n\t\t\t\tvertexShader: {\n\n\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t},\n\n\t\t\t\tfragmentShader: {\n\n\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\tprefix: prefixFragment\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\t// Clean up\n\n\t// Crashes in iOS9 and iOS10. #18402\n\t// gl.detachShader( program, glVertexShader );\n\t// gl.detachShader( program, glFragmentShader );\n\n\tgl.deleteShader( glVertexShader );\n\tgl.deleteShader( glFragmentShader );\n\n\t// set up caching for uniform locations\n\n\tlet cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\tcachedUniforms = new WebGLUniforms( gl, program );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tlet cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tbindingStates.releaseStatesOfProgram( this );\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t//\n\n\tthis.name = parameters.shaderName;\n\tthis.id = programIdCount ++;\n\tthis.cacheKey = cacheKey;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\nfunction WebGLPrograms( renderer, cubemaps, extensions, capabilities, bindingStates, clipping ) {\n\n\tconst programs = [];\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\tconst floatVertexTextures = capabilities.floatVertexTextures;\n\tconst maxVertexUniforms = capabilities.maxVertexUniforms;\n\tconst vertexTextures = capabilities.vertexTextures;\n\n\tlet precision = capabilities.precision;\n\n\tconst shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'toon',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tMeshMatcapMaterial: 'matcap',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow',\n\t\tSpriteMaterial: 'sprite'\n\t};\n\n\tconst parameterNames = [\n\t\t\"precision\", \"isWebGL2\", \"supportsVertexTextures\", \"outputEncoding\", \"instancing\", \"instancingColor\",\n\t\t\"map\", \"mapEncoding\", \"matcap\", \"matcapEncoding\", \"envMap\", \"envMapMode\", \"envMapEncoding\", \"envMapCubeUV\",\n\t\t\"lightMap\", \"lightMapEncoding\", \"aoMap\", \"emissiveMap\", \"emissiveMapEncoding\", \"bumpMap\", \"normalMap\", \"objectSpaceNormalMap\", \"tangentSpaceNormalMap\", \"clearcoatMap\", \"clearcoatRoughnessMap\", \"clearcoatNormalMap\", \"displacementMap\", \"specularMap\",\n\t\t\"roughnessMap\", \"metalnessMap\", \"gradientMap\",\n\t\t\"alphaMap\", \"combine\", \"vertexColors\", \"vertexTangents\", \"vertexUvs\", \"uvsVertexOnly\", \"fog\", \"useFog\", \"fogExp2\",\n\t\t\"flatShading\", \"sizeAttenuation\", \"logarithmicDepthBuffer\", \"skinning\",\n\t\t\"maxBones\", \"useVertexTexture\", \"morphTargets\", \"morphNormals\",\n\t\t\"maxMorphTargets\", \"maxMorphNormals\", \"premultipliedAlpha\",\n\t\t\"numDirLights\", \"numPointLights\", \"numSpotLights\", \"numHemiLights\", \"numRectAreaLights\",\n\t\t\"numDirLightShadows\", \"numPointLightShadows\", \"numSpotLightShadows\",\n\t\t\"shadowMapEnabled\", \"shadowMapType\", \"toneMapping\", 'physicallyCorrectLights',\n\t\t\"alphaTest\", \"doubleSided\", \"flipSided\", \"numClippingPlanes\", \"numClipIntersection\", \"depthPacking\", \"dithering\",\n\t\t\"sheen\", \"transmissionMap\"\n\t];\n\n\tfunction getMaxBones( object ) {\n\n\t\tconst skeleton = object.skeleton;\n\t\tconst bones = skeleton.bones;\n\n\t\tif ( floatVertexTextures ) {\n\n\t\t\treturn 1024;\n\n\t\t} else {\n\n\t\t\t// default for when object is not specified\n\t\t\t// ( for example when prebuilding shader to be used with multiple objects )\n\t\t\t//\n\t\t\t// - leave some extra space for other uniforms\n\t\t\t// - limit here is ANGLE's 254 max uniform vectors\n\t\t\t// (up to 54 should be safe)\n\n\t\t\tconst nVertexUniforms = maxVertexUniforms;\n\t\t\tconst nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );\n\n\t\t\tconst maxBones = Math.min( nVertexMatrices, bones.length );\n\n\t\t\tif ( maxBones < bones.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' );\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\treturn maxBones;\n\n\t\t}\n\n\t}\n\n\tfunction getTextureEncodingFromMap( map ) {\n\n\t\tlet encoding;\n\n\t\tif ( ! map ) {\n\n\t\t\tencoding = LinearEncoding;\n\n\t\t} else if ( map.isTexture ) {\n\n\t\t\tencoding = map.encoding;\n\n\t\t} else if ( map.isWebGLRenderTarget ) {\n\n\t\t\tconsole.warn( \"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\tencoding = map.texture.encoding;\n\n\t\t}\n\n\t\treturn encoding;\n\n\t}\n\n\tfunction getParameters( material, lights, shadows, scene, object ) {\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\n\t\tconst envMap = cubemaps.get( material.envMap || environment );\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tconst maxBones = object.isSkinnedMesh ? getMaxBones( object ) : 0;\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet vertexShader, fragmentShader;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\n\t\t\tvertexShader = shader.vertexShader;\n\t\t\tfragmentShader = shader.fragmentShader;\n\n\t\t} else {\n\n\t\t\tvertexShader = material.vertexShader;\n\t\t\tfragmentShader = material.fragmentShader;\n\n\t\t}\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tconst parameters = {\n\n\t\t\tisWebGL2: isWebGL2,\n\n\t\t\tshaderID: shaderID,\n\t\t\tshaderName: material.type,\n\n\t\t\tvertexShader: vertexShader,\n\t\t\tfragmentShader: fragmentShader,\n\t\t\tdefines: material.defines,\n\n\t\t\tisRawShaderMaterial: material.isRawShaderMaterial === true,\n\t\t\tglslVersion: material.glslVersion,\n\n\t\t\tprecision: precision,\n\n\t\t\tinstancing: object.isInstancedMesh === true,\n\t\t\tinstancingColor: object.isInstancedMesh === true && object.instanceColor !== null,\n\n\t\t\tsupportsVertexTextures: vertexTextures,\n\t\t\toutputEncoding: ( currentRenderTarget !== null ) ? getTextureEncodingFromMap( currentRenderTarget.texture ) : renderer.outputEncoding,\n\t\t\tmap: !! material.map,\n\t\t\tmapEncoding: getTextureEncodingFromMap( material.map ),\n\t\t\tmatcap: !! material.matcap,\n\t\t\tmatcapEncoding: getTextureEncodingFromMap( material.matcap ),\n\t\t\tenvMap: !! envMap,\n\t\t\tenvMapMode: envMap && envMap.mapping,\n\t\t\tenvMapEncoding: getTextureEncodingFromMap( envMap ),\n\t\t\tenvMapCubeUV: ( !! envMap ) && ( ( envMap.mapping === CubeUVReflectionMapping ) || ( envMap.mapping === CubeUVRefractionMapping ) ),\n\t\t\tlightMap: !! material.lightMap,\n\t\t\tlightMapEncoding: getTextureEncodingFromMap( material.lightMap ),\n\t\t\taoMap: !! material.aoMap,\n\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\temissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap ),\n\t\t\tbumpMap: !! material.bumpMap,\n\t\t\tnormalMap: !! material.normalMap,\n\t\t\tobjectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap,\n\t\t\ttangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap,\n\t\t\tclearcoatMap: !! material.clearcoatMap,\n\t\t\tclearcoatRoughnessMap: !! material.clearcoatRoughnessMap,\n\t\t\tclearcoatNormalMap: !! material.clearcoatNormalMap,\n\t\t\tdisplacementMap: !! material.displacementMap,\n\t\t\troughnessMap: !! material.roughnessMap,\n\t\t\tmetalnessMap: !! material.metalnessMap,\n\t\t\tspecularMap: !! material.specularMap,\n\t\t\talphaMap: !! material.alphaMap,\n\n\t\t\tgradientMap: !! material.gradientMap,\n\n\t\t\tsheen: !! material.sheen,\n\n\t\t\ttransmissionMap: !! material.transmissionMap,\n\n\t\t\tcombine: material.combine,\n\n\t\t\tvertexTangents: ( material.normalMap && material.vertexTangents ),\n\t\t\tvertexColors: material.vertexColors,\n\t\t\tvertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmissionMap,\n\t\t\tuvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.transmissionMap ) && !! material.displacementMap,\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog,\n\t\t\tfogExp2: ( fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: material.flatShading,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\tskinning: material.skinning && maxBones > 0,\n\t\t\tmaxBones: maxBones,\n\t\t\tuseVertexTexture: floatVertexTextures,\n\n\t\t\tmorphTargets: material.morphTargets,\n\t\t\tmorphNormals: material.morphNormals,\n\t\t\tmaxMorphTargets: renderer.maxMorphTargets,\n\t\t\tmaxMorphNormals: renderer.maxMorphNormals,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\tnumSpotLightShadows: lights.spotShadowMap.length,\n\n\t\t\tnumClippingPlanes: clipping.numPlanes,\n\t\t\tnumClipIntersection: clipping.numIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping,\n\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\talphaTest: material.alphaTest,\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tdepthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false,\n\n\t\t\tindex0AttributeName: material.index0AttributeName,\n\n\t\t\textensionDerivatives: material.extensions && material.extensions.derivatives,\n\t\t\textensionFragDepth: material.extensions && material.extensions.fragDepth,\n\t\t\textensionDrawBuffers: material.extensions && material.extensions.drawBuffers,\n\t\t\textensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD,\n\n\t\t\trendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ),\n\t\t\trendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ),\n\t\t\trendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ),\n\n\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\n\t\t};\n\n\t\treturn parameters;\n\n\t}\n\n\tfunction getProgramCacheKey( parameters ) {\n\n\t\tconst array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( parameters.fragmentShader );\n\t\t\tarray.push( parameters.vertexShader );\n\n\t\t}\n\n\t\tif ( parameters.defines !== undefined ) {\n\n\t\t\tfor ( const name in parameters.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( parameters.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.isRawShaderMaterial === false ) {\n\n\t\t\tfor ( let i = 0; i < parameterNames.length; i ++ ) {\n\n\t\t\t\tarray.push( parameters[ parameterNames[ i ] ] );\n\n\t\t\t}\n\n\t\t\tarray.push( renderer.outputEncoding );\n\t\t\tarray.push( renderer.gammaFactor );\n\n\t\t}\n\n\t\tarray.push( parameters.customProgramCacheKey );\n\n\t\treturn array.join();\n\n\t}\n\n\tfunction getUniforms( material ) {\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\t\tlet uniforms;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\t\t\tuniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t} else {\n\n\t\t\tuniforms = material.uniforms;\n\n\t\t}\n\n\t\treturn uniforms;\n\n\t}\n\n\tfunction acquireProgram( parameters, cacheKey ) {\n\n\t\tlet program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( let p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tconst preexistingProgram = programs[ p ];\n\n\t\t\tif ( preexistingProgram.cacheKey === cacheKey ) {\n\n\t\t\t\tprogram = preexistingProgram;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\tfunction releaseProgram( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tconst i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tgetParameters: getParameters,\n\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\tgetUniforms: getUniforms,\n\t\tacquireProgram: acquireProgram,\n\t\treleaseProgram: releaseProgram,\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tprograms: programs\n\t};\n\n}\n\nfunction WebGLProperties() {\n\n\tlet properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tlet map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.program !== b.program ) {\n\n\t\treturn a.program.id - b.program.id;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\n\nfunction WebGLRenderList( properties ) {\n\n\tconst renderItems = [];\n\tlet renderItemsIndex = 0;\n\n\tconst opaque = [];\n\tconst transparent = [];\n\n\tconst defaultProgram = { id: - 1 };\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction getNextRenderItem( object, geometry, material, groupOrder, z, group ) {\n\n\t\tlet renderItem = renderItems[ renderItemsIndex ];\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tprogram: materialProperties.program || defaultProgram,\n\t\t\t\tgroupOrder: groupOrder,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.program = materialProperties.program || defaultProgram;\n\t\t\trenderItem.groupOrder = groupOrder;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\trenderItemsIndex ++;\n\n\t\treturn renderItem;\n\n\t}\n\n\tfunction push( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\t( material.transparent === true ? transparent : opaque ).push( renderItem );\n\n\t}\n\n\tfunction unshift( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\t( material.transparent === true ? transparent : opaque ).unshift( renderItem );\n\n\t}\n\n\tfunction sort( customOpaqueSort, customTransparentSort ) {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t}\n\n\tfunction finish() {\n\n\t\t// Clear references from inactive renderItems in the list\n\n\t\tfor ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {\n\n\t\t\tconst renderItem = renderItems[ i ];\n\n\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\trenderItem.id = null;\n\t\t\trenderItem.object = null;\n\t\t\trenderItem.geometry = null;\n\t\t\trenderItem.material = null;\n\t\t\trenderItem.program = null;\n\t\t\trenderItem.group = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\topaque: opaque,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\t\tunshift: unshift,\n\t\tfinish: finish,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists( properties ) {\n\n\tlet lists = new WeakMap();\n\n\tfunction get( scene, camera ) {\n\n\t\tconst cameras = lists.get( scene );\n\t\tlet list;\n\n\t\tif ( cameras === undefined ) {\n\n\t\t\tlist = new WebGLRenderList( properties );\n\t\t\tlists.set( scene, new WeakMap() );\n\t\t\tlists.get( scene ).set( camera, list );\n\n\t\t} else {\n\n\t\t\tlist = cameras.get( camera );\n\t\t\tif ( list === undefined ) {\n\n\t\t\t\tlist = new WebGLRenderList( properties );\n\t\t\t\tcameras.set( camera, list );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction UniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nfunction ShadowUniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\n\n\nlet nextVersion = 0;\n\nfunction shadowCastingLightsFirst( lightA, lightB ) {\n\n\treturn ( lightB.castShadow ? 1 : 0 ) - ( lightA.castShadow ? 1 : 0 );\n\n}\n\nfunction WebGLLights( extensions, capabilities ) {\n\n\tconst cache = new UniformsCache();\n\n\tconst shadowCache = ShadowUniformsCache();\n\n\tconst state = {\n\n\t\tversion: 0,\n\n\t\thash: {\n\t\t\tdirectionalLength: - 1,\n\t\t\tpointLength: - 1,\n\t\t\tspotLength: - 1,\n\t\t\trectAreaLength: - 1,\n\t\t\themiLength: - 1,\n\n\t\t\tnumDirectionalShadows: - 1,\n\t\t\tnumPointShadows: - 1,\n\t\t\tnumSpotShadows: - 1\n\t\t},\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tprobe: [],\n\t\tdirectional: [],\n\t\tdirectionalShadow: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotShadow: [],\n\t\tspotShadowMap: [],\n\t\tspotShadowMatrix: [],\n\t\trectArea: [],\n\t\trectAreaLTC1: null,\n\t\trectAreaLTC2: null,\n\t\tpoint: [],\n\t\tpointShadow: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: []\n\n\t};\n\n\tfor ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );\n\n\tconst vector3 = new Vector3();\n\tconst matrix4 = new Matrix4();\n\tconst matrix42 = new Matrix4();\n\n\tfunction setup( lights, shadows, camera ) {\n\n\t\tlet r = 0, g = 0, b = 0;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tlet numDirectionalShadows = 0;\n\t\tlet numPointShadows = 0;\n\t\tlet numSpotShadows = 0;\n\n\t\tconst viewMatrix = camera.matrixWorldInverse;\n\n\t\tlights.sort( shadowCastingLightsFirst );\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tconst color = light.color;\n\t\t\tconst intensity = light.intensity;\n\t\t\tconst distance = light.distance;\n\n\t\t\tconst shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity;\n\t\t\t\tg += color.g * intensity;\n\t\t\t\tb += color.b * intensity;\n\n\t\t\t} else if ( light.isLightProbe ) {\n\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tstate.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );\n\n\t\t\t\t}\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.directionalShadow[ directionalLength ] = shadowUniforms;\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumDirectionalShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.spotShadow[ spotLength ] = shadowUniforms;\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\t\t\t\t\tstate.spotShadowMatrix[ spotLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumSpotShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\t// (a) intensity is the total visible light emitted\n\t\t\t\t//uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) );\n\n\t\t\t\t// (b) intensity is the brightness of the light\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\t// TODO (abelnation): RectAreaLight distance?\n\t\t\t\t// uniforms.distance = distance;\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tshadowUniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tshadowUniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\tstate.pointShadow[ pointLength ] = shadowUniforms;\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumPointShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\t\t\t\tuniforms.direction.normalize();\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( rectAreaLength > 0 ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\t// WebGL 2\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t} else {\n\n\t\t\t\t// WebGL 1\n\n\t\t\t\tif ( extensions.has( 'OES_texture_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t\t} else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tconst hash = state.hash;\n\n\t\tif ( hash.directionalLength !== directionalLength ||\n\t\t\thash.pointLength !== pointLength ||\n\t\t\thash.spotLength !== spotLength ||\n\t\t\thash.rectAreaLength !== rectAreaLength ||\n\t\t\thash.hemiLength !== hemiLength ||\n\t\t\thash.numDirectionalShadows !== numDirectionalShadows ||\n\t\t\thash.numPointShadows !== numPointShadows ||\n\t\t\thash.numSpotShadows !== numSpotShadows ) {\n\n\t\t\tstate.directional.length = directionalLength;\n\t\t\tstate.spot.length = spotLength;\n\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\tstate.point.length = pointLength;\n\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\tstate.spotShadowMatrix.length = numSpotShadows;\n\n\t\t\thash.directionalLength = directionalLength;\n\t\t\thash.pointLength = pointLength;\n\t\t\thash.spotLength = spotLength;\n\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\thash.hemiLength = hemiLength;\n\n\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\thash.numPointShadows = numPointShadows;\n\t\t\thash.numSpotShadows = numSpotShadows;\n\n\t\t\tstate.version = nextVersion ++;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tstate: state\n\t};\n\n}\n\nfunction WebGLRenderState( extensions, capabilities ) {\n\n\tconst lights = new WebGLLights( extensions, capabilities );\n\n\tconst lightsArray = [];\n\tconst shadowsArray = [];\n\n\tfunction init() {\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction setupLights( camera ) {\n\n\t\tlights.setup( lightsArray, shadowsArray, camera );\n\n\t}\n\n\tconst state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\n\t\tlights: lights\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow\n\t};\n\n}\n\nfunction WebGLRenderStates( extensions, capabilities ) {\n\n\tlet renderStates = new WeakMap();\n\n\tfunction get( scene, camera ) {\n\n\t\tlet renderState;\n\n\t\tif ( renderStates.has( scene ) === false ) {\n\n\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\trenderStates.set( scene, new WeakMap() );\n\t\t\trenderStates.get( scene ).set( camera, renderState );\n\n\t\t} else {\n\n\t\t\tif ( renderStates.get( scene ).has( camera ) === false ) {\n\n\t\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\t\trenderStates.get( scene ).set( camera, renderState );\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStates.get( scene ).get( camera );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * parameters = {\n *\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * wireframe: ,\n * wireframeLinewidth: \n * }\n */\n\nfunction MeshDepthMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshDepthMaterial';\n\n\tthis.depthPacking = BasicDepthPacking;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshDepthMaterial.prototype = Object.create( Material.prototype );\nMeshDepthMaterial.prototype.constructor = MeshDepthMaterial;\n\nMeshDepthMaterial.prototype.isMeshDepthMaterial = true;\n\nMeshDepthMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.depthPacking = source.depthPacking;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n *\n * referencePosition: ,\n * nearDistance: ,\n * farDistance: ,\n *\n * skinning: ,\n * morphTargets: ,\n *\n * map: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: \n *\n * }\n */\n\nfunction MeshDistanceMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshDistanceMaterial';\n\n\tthis.referencePosition = new Vector3();\n\tthis.nearDistance = 1;\n\tthis.farDistance = 1000;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.fog = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshDistanceMaterial.prototype = Object.create( Material.prototype );\nMeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial;\n\nMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\n\nMeshDistanceMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.referencePosition.copy( source.referencePosition );\n\tthis.nearDistance = source.nearDistance;\n\tthis.farDistance = source.farDistance;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\treturn this;\n\n};\n\nvar vsm_frag = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include \\nvoid main() {\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\\n\\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\\n\\t\\t#ifdef HORIZONAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean * HALF_SAMPLE_RATE;\\n\\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\";\n\nvar vsm_vert = \"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\";\n\nfunction WebGLShadowMap( _renderer, _objects, maxTextureSize ) {\n\n\tlet _frustum = new Frustum();\n\n\tconst _shadowMapSize = new Vector2(),\n\t\t_viewportSize = new Vector2(),\n\n\t\t_viewport = new Vector4(),\n\n\t\t_depthMaterials = [],\n\t\t_distanceMaterials = [],\n\n\t\t_materialCache = {};\n\n\tconst shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };\n\n\tconst shadowMaterialVertical = new ShaderMaterial( {\n\n\t\tdefines: {\n\t\t\tSAMPLE_RATE: 2.0 / 8.0,\n\t\t\tHALF_SAMPLE_RATE: 1.0 / 8.0\n\t\t},\n\n\t\tuniforms: {\n\t\t\tshadow_pass: { value: null },\n\t\t\tresolution: { value: new Vector2() },\n\t\t\tradius: { value: 4.0 }\n\t\t},\n\n\t\tvertexShader: vsm_vert,\n\n\t\tfragmentShader: vsm_frag\n\n\t} );\n\n\tconst shadowMaterialHorizonal = shadowMaterialVertical.clone();\n\tshadowMaterialHorizonal.defines.HORIZONAL_PASS = 1;\n\n\tconst fullScreenTri = new BufferGeometry();\n\tfullScreenTri.setAttribute(\n\t\t\"position\",\n\t\tnew BufferAttribute(\n\t\t\tnew Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ),\n\t\t\t3\n\t\t)\n\t);\n\n\tconst fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );\n\n\tconst scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\tconst currentRenderTarget = _renderer.getRenderTarget();\n\t\tconst activeCubeFace = _renderer.getActiveCubeFace();\n\t\tconst activeMipmapLevel = _renderer.getActiveMipmapLevel();\n\n\t\tconst _state = _renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.setBlending( NoBlending );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// render depth map\n\n\t\tfor ( let i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadow = light.shadow;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\n\t\t\tconst shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t_shadowMapSize.multiply( shadowFrameExtents );\n\n\t\t\t_viewportSize.copy( shadow.mapSize );\n\n\t\t\tif ( _shadowMapSize.x > maxTextureSize || _shadowMapSize.y > maxTextureSize ) {\n\n\t\t\t\tif ( _shadowMapSize.x > maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.x = Math.floor( maxTextureSize / shadowFrameExtents.x );\n\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _shadowMapSize.y > maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.y = Math.floor( maxTextureSize / shadowFrameExtents.y );\n\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null && ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {\n\n\t\t\t\tconst pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat };\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + \".shadowMap\";\n\n\t\t\t\tshadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\tconst pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + \".shadowMap\";\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\t_renderer.setRenderTarget( shadow.map );\n\t\t\t_renderer.clear();\n\n\t\t\tconst viewportCount = shadow.getViewportCount();\n\n\t\t\tfor ( let vp = 0; vp < viewportCount; vp ++ ) {\n\n\t\t\t\tconst viewport = shadow.getViewport( vp );\n\n\t\t\t\t_viewport.set(\n\t\t\t\t\t_viewportSize.x * viewport.x,\n\t\t\t\t\t_viewportSize.y * viewport.y,\n\t\t\t\t\t_viewportSize.x * viewport.z,\n\t\t\t\t\t_viewportSize.y * viewport.w\n\t\t\t\t);\n\n\t\t\t\t_state.viewport( _viewport );\n\n\t\t\t\tshadow.updateMatrices( light, vp );\n\n\t\t\t\t_frustum = shadow.getFrustum();\n\n\t\t\t\trenderObject( scene, camera, shadow.camera, light, this.type );\n\n\t\t\t}\n\n\t\t\t// do blur pass for VSM\n\n\t\t\tif ( ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {\n\n\t\t\t\tVSMPass( shadow, camera );\n\n\t\t\t}\n\n\t\t\tshadow.needsUpdate = false;\n\n\t\t}\n\n\t\tscope.needsUpdate = false;\n\n\t\t_renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t};\n\n\tfunction VSMPass( shadow, camera ) {\n\n\t\tconst geometry = _objects.update( fullScreenMesh );\n\n\t\t// vertical pass\n\n\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;\n\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.mapPass );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );\n\n\t\t// horizonal pass\n\n\t\tshadowMaterialHorizonal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\tshadowMaterialHorizonal.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialHorizonal.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.map );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizonal, fullScreenMesh, null );\n\n\t}\n\n\tfunction getDepthMaterialVariant( useMorphing, useSkinning, useInstancing ) {\n\n\t\tconst index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2;\n\n\t\tlet material = _depthMaterials[ index ];\n\n\t\tif ( material === undefined ) {\n\n\t\t\tmaterial = new MeshDepthMaterial( {\n\n\t\t\t\tdepthPacking: RGBADepthPacking,\n\n\t\t\t\tmorphTargets: useMorphing,\n\t\t\t\tskinning: useSkinning\n\n\t\t\t} );\n\n\t\t\t_depthMaterials[ index ] = material;\n\n\t\t}\n\n\t\treturn material;\n\n\t}\n\n\tfunction getDistanceMaterialVariant( useMorphing, useSkinning, useInstancing ) {\n\n\t\tconst index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2;\n\n\t\tlet material = _distanceMaterials[ index ];\n\n\t\tif ( material === undefined ) {\n\n\t\t\tmaterial = new MeshDistanceMaterial( {\n\n\t\t\t\tmorphTargets: useMorphing,\n\t\t\t\tskinning: useSkinning\n\n\t\t\t} );\n\n\t\t\t_distanceMaterials[ index ] = material;\n\n\t\t}\n\n\t\treturn material;\n\n\t}\n\n\tfunction getDepthMaterial( object, geometry, material, light, shadowCameraNear, shadowCameraFar, type ) {\n\n\t\tlet result = null;\n\n\t\tlet getMaterialVariant = getDepthMaterialVariant;\n\t\tlet customMaterial = object.customDepthMaterial;\n\n\t\tif ( light.isPointLight === true ) {\n\n\t\t\tgetMaterialVariant = getDistanceMaterialVariant;\n\t\t\tcustomMaterial = object.customDistanceMaterial;\n\n\t\t}\n\n\t\tif ( customMaterial === undefined ) {\n\n\t\t\tlet useMorphing = false;\n\n\t\t\tif ( material.morphTargets === true ) {\n\n\t\t\t\tuseMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0;\n\n\t\t\t}\n\n\t\t\tlet useSkinning = false;\n\n\t\t\tif ( object.isSkinnedMesh === true ) {\n\n\t\t\t\tif ( material.skinning === true ) {\n\n\t\t\t\t\tuseSkinning = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst useInstancing = object.isInstancedMesh === true;\n\n\t\t\tresult = getMaterialVariant( useMorphing, useSkinning, useInstancing );\n\n\t\t} else {\n\n\t\t\tresult = customMaterial;\n\n\t\t}\n\n\t\tif ( _renderer.localClippingEnabled &&\n\t\t\t\tmaterial.clipShadows === true &&\n\t\t\t\tmaterial.clippingPlanes.length !== 0 ) {\n\n\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t// appropriate state\n\n\t\t\tconst keyA = result.uuid, keyB = material.uuid;\n\n\t\t\tlet materialsForVariant = _materialCache[ keyA ];\n\n\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t}\n\n\t\t\tlet cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\n\t\t\t}\n\n\t\t\tresult = cachedMaterial;\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tif ( type === VSMShadowMap ) {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t} else {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t}\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {\n\n\t\t\tresult.referencePosition.setFromMatrixPosition( light.matrixWorld );\n\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\tresult.farDistance = shadowCameraFar;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, light, type ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tconst geometry = _objects.update( object );\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tfor ( let k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ k ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, geometry, groupMaterial, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, geometry, material, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, light, type );\n\n\t\t}\n\n\t}\n\n}\n\nfunction WebGLState( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction ColorBuffer() {\n\n\t\tlet locked = false;\n\n\t\tconst color = new Vector4();\n\t\tlet currentColorMask = null;\n\t\tconst currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentDepthMask = null;\n\t\tlet currentDepthFunc = null;\n\t\tlet currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( 2929 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( 2929 );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tif ( depthFunc ) {\n\n\t\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 512 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 519 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 513 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 514 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 518 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 516 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 517 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.depthFunc( 515 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentStencilMask = null;\n\t\tlet currentStencilFunc = null;\n\t\tlet currentStencilRef = null;\n\t\tlet currentStencilFuncMask = null;\n\t\tlet currentStencilFail = null;\n\t\tlet currentStencilZFail = null;\n\t\tlet currentStencilZPass = null;\n\t\tlet currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( ! locked ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( 2960 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( 2960 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t currentStencilRef !== stencilRef ||\n\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail !== stencilFail ||\n\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tconst colorBuffer = new ColorBuffer();\n\tconst depthBuffer = new DepthBuffer();\n\tconst stencilBuffer = new StencilBuffer();\n\n\tlet enabledCapabilities = {};\n\n\tlet currentProgram = null;\n\n\tlet currentBlendingEnabled = null;\n\tlet currentBlending = null;\n\tlet currentBlendEquation = null;\n\tlet currentBlendSrc = null;\n\tlet currentBlendDst = null;\n\tlet currentBlendEquationAlpha = null;\n\tlet currentBlendSrcAlpha = null;\n\tlet currentBlendDstAlpha = null;\n\tlet currentPremultipledAlpha = false;\n\n\tlet currentFlipSided = null;\n\tlet currentCullFace = null;\n\n\tlet currentLineWidth = null;\n\n\tlet currentPolygonOffsetFactor = null;\n\tlet currentPolygonOffsetUnits = null;\n\n\tconst maxTextures = gl.getParameter( 35661 );\n\n\tlet lineWidthAvailable = false;\n\tlet version = 0;\n\tconst glVersion = gl.getParameter( 7938 );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL\\ ([0-9])/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL\\ ES\\ ([0-9])/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tlet currentTextureSlot = null;\n\tlet currentBoundTextures = {};\n\n\tconst currentScissor = new Vector4();\n\tconst currentViewport = new Vector4();\n\n\tfunction createTexture( type, target, count ) {\n\n\t\tconst data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tconst texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, 10241, 9728 );\n\t\tgl.texParameteri( type, 10240, 9728 );\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tgl.texImage2D( target + i, 0, 6408, 1, 1, 0, 6408, 5121, data );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tconst emptyTextures = {};\n\temptyTextures[ 3553 ] = createTexture( 3553, 3553, 1 );\n\temptyTextures[ 34067 ] = createTexture( 34067, 34069, 6 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( 2929 );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( 2884 );\n\n\tsetBlending( NoBlending );\n\n\t//\n\n\tfunction enable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tconst equationToGL = {\n\t\t[ AddEquation ]: 32774,\n\t\t[ SubtractEquation ]: 32778,\n\t\t[ ReverseSubtractEquation ]: 32779\n\t};\n\n\tif ( isWebGL2 ) {\n\n\t\tequationToGL[ MinEquation ] = 32775;\n\t\tequationToGL[ MaxEquation ] = 32776;\n\n\t} else {\n\n\t\tconst extension = extensions.get( 'EXT_blend_minmax' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tequationToGL[ MinEquation ] = extension.MIN_EXT;\n\t\t\tequationToGL[ MaxEquation ] = extension.MAX_EXT;\n\n\t\t}\n\n\t}\n\n\tconst factorToGL = {\n\t\t[ ZeroFactor ]: 0,\n\t\t[ OneFactor ]: 1,\n\t\t[ SrcColorFactor ]: 768,\n\t\t[ SrcAlphaFactor ]: 770,\n\t\t[ SrcAlphaSaturateFactor ]: 776,\n\t\t[ DstColorFactor ]: 774,\n\t\t[ DstAlphaFactor ]: 772,\n\t\t[ OneMinusSrcColorFactor ]: 769,\n\t\t[ OneMinusSrcAlphaFactor ]: 771,\n\t\t[ OneMinusDstColorFactor ]: 775,\n\t\t[ OneMinusDstAlphaFactor ]: 773\n\t};\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( currentBlendingEnabled ) {\n\n\t\t\t\tdisable( 3042 );\n\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( ! currentBlendingEnabled ) {\n\n\t\t\tenable( 3042 );\n\t\t\tcurrentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( 32774 );\n\n\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 1, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 1, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 0, 769, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 768, 0, 770 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 770, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 770, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 0, 769 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 0, 768 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t\t\tcurrentBlending = blending;\n\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\tcurrentBlendDst = blendDst;\n\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = null;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( 2884 )\n\t\t\t: enable( 2884 );\n\n\t\tlet flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tconst stencilWrite = material.stencilWrite;\n\t\tstencilBuffer.setTest( stencilWrite );\n\t\tif ( stencilWrite ) {\n\n\t\t\tstencilBuffer.setMask( material.stencilWriteMask );\n\t\t\tstencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\tstencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t}\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( 2304 );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( 2305 );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( 2884 );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( 1029 );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( 1028 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( 1032 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 2884 );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( 32823 );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 32823 );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( 3089 );\n\n\t\t} else {\n\n\t\t\tdisable( 3089 );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = 33984 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture ) {\n\n\t\tif ( currentTextureSlot === null ) {\n\n\t\t\tactiveTexture();\n\n\t\t}\n\n\t\tlet boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ currentTextureSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction unbindTexture() {\n\n\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\tboundTexture.type = undefined;\n\t\t\tboundTexture.texture = undefined;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\tenabledCapabilities = {};\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlendingEnabled = null;\n\t\tcurrentBlending = null;\n\t\tcurrentBlendEquation = null;\n\t\tcurrentBlendSrc = null;\n\t\tcurrentBlendDst = null;\n\t\tcurrentBlendEquationAlpha = null;\n\t\tcurrentBlendSrcAlpha = null;\n\t\tcurrentBlendDstAlpha = null;\n\t\tcurrentPremultipledAlpha = false;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcurrentLineWidth = null;\n\n\t\tcurrentPolygonOffsetFactor = null;\n\t\tcurrentPolygonOffsetUnits = null;\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tenable: enable,\n\t\tdisable: disable,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tunbindTexture: unbindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\ttexImage2D: texImage2D,\n\t\ttexImage3D: texImage3D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst maxTextures = capabilities.maxTextures;\n\tconst maxCubemapSize = capabilities.maxCubemapSize;\n\tconst maxTextureSize = capabilities.maxTextureSize;\n\tconst maxSamples = capabilities.maxSamples;\n\n\tconst _videoTextures = new WeakMap();\n\tlet _canvas;\n\n\t// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\tlet useOffscreenCanvas = false;\n\n\ttry {\n\n\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'\n\t\t\t&& ( new OffscreenCanvas( 1, 1 ).getContext( \"2d\" ) ) !== null;\n\n\t} catch ( err ) {\n\n\t\t// Ignore any errors\n\n\t}\n\n\tfunction createCanvas( width, height ) {\n\n\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\n\t\treturn useOffscreenCanvas ?\n\t\t\tnew OffscreenCanvas( width, height ) :\n\t\t\tdocument.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t}\n\n\tfunction resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) {\n\n\t\tlet scale = 1;\n\n\t\t// handle case if texture exceeds max size\n\n\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\tscale = maxSize / Math.max( image.width, image.height );\n\n\t\t}\n\n\t\t// only perform resize if necessary\n\n\t\tif ( scale < 1 || needsPowerOfTwo === true ) {\n\n\t\t\t// only perform resize for certain image types\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t\tconst floor = needsPowerOfTwo ? MathUtils.floorPowerOfTwo : Math.floor;\n\n\t\t\t\tconst width = floor( scale * image.width );\n\t\t\t\tconst height = floor( scale * image.height );\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = createCanvas( width, height );\n\n\t\t\t\t// cube textures can't reuse the same canvas\n\n\t\t\t\tconst canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;\n\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' );\n\n\t\t\t\treturn canvas;\n\n\t\t\t} else {\n\n\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );\n\n\t\t\t\t}\n\n\t\t\t\treturn image;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction isPowerOfTwo( image ) {\n\n\t\treturn MathUtils.isPowerOfTwo( image.width ) && MathUtils.isPowerOfTwo( image.height );\n\n\t}\n\n\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\tif ( isWebGL2 ) return false;\n\n\t\treturn ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||\n\t\t\t( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture, supportsMips ) {\n\n\t\treturn texture.generateMipmaps && supportsMips &&\n\t\t\ttexture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t}\n\n\tfunction generateMipmap( target, texture, width, height ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\t// Note: Math.log( x ) * Math.LOG2E used instead of Math.log2( x ) which is not supported by IE11\n\t\ttextureProperties.__maxMipLevel = Math.log( Math.max( width, height ) ) * Math.LOG2E;\n\n\t}\n\n\tfunction getInternalFormat( internalFormatName, glFormat, glType ) {\n\n\t\tif ( isWebGL2 === false ) return glFormat;\n\n\t\tif ( internalFormatName !== null ) {\n\n\t\t\tif ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t}\n\n\t\tlet internalFormat = glFormat;\n\n\t\tif ( glFormat === 6403 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 33326;\n\t\t\tif ( glType === 5131 ) internalFormat = 33325;\n\t\t\tif ( glType === 5121 ) internalFormat = 33321;\n\n\t\t}\n\n\t\tif ( glFormat === 6407 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 34837;\n\t\t\tif ( glType === 5131 ) internalFormat = 34843;\n\t\t\tif ( glType === 5121 ) internalFormat = 32849;\n\n\t\t}\n\n\t\tif ( glFormat === 6408 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 34836;\n\t\t\tif ( glType === 5131 ) internalFormat = 34842;\n\t\t\tif ( glType === 5121 ) internalFormat = 32856;\n\n\t\t}\n\n\t\tif ( internalFormat === 33325 || internalFormat === 33326 ||\n\t\t\tinternalFormat === 34842 || internalFormat === 34836 ) {\n\n\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t}\n\n\t\treturn internalFormat;\n\n\t}\n\n\t// Fallback filters for non-power-of-2 textures\n\n\tfunction filterFallback( f ) {\n\n\t\tif ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) {\n\n\t\t\treturn 9728;\n\n\t\t}\n\n\t\treturn 9729;\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\t_videoTextures.delete( texture );\n\n\t\t}\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tconst renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( renderTarget.texture );\n\n\t\tif ( ! renderTarget ) return;\n\n\t\tif ( textureProperties.__webglTexture !== undefined ) {\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t}\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\t\t\tif ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );\n\n\t\t}\n\n\t\tproperties.remove( renderTarget.texture );\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\tlet textureUnits = 0;\n\n\tfunction resetTextureUnits() {\n\n\t\ttextureUnits = 0;\n\n\t}\n\n\tfunction allocateTextureUnit() {\n\n\t\tconst textureUnit = textureUnits;\n\n\t\tif ( textureUnit >= maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures );\n\n\t\t}\n\n\t\ttextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\t//\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tconst image = texture.image;\n\n\t\t\tif ( image === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined' );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 3553, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture2DArray( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 35866, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture3D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 32879, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadCubeTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t}\n\n\tconst wrappingToGL = {\n\t\t[ RepeatWrapping ]: 10497,\n\t\t[ ClampToEdgeWrapping ]: 33071,\n\t\t[ MirroredRepeatWrapping ]: 33648\n\t};\n\n\tconst filterToGL = {\n\t\t[ NearestFilter ]: 9728,\n\t\t[ NearestMipmapNearestFilter ]: 9984,\n\t\t[ NearestMipmapLinearFilter ]: 9986,\n\n\t\t[ LinearFilter ]: 9729,\n\t\t[ LinearMipmapNearestFilter ]: 9985,\n\t\t[ LinearMipmapLinearFilter ]: 9987\n\t};\n\n\tfunction setTextureParameters( textureType, texture, supportsMips ) {\n\n\t\tif ( supportsMips ) {\n\n\t\t\t_gl.texParameteri( textureType, 10242, wrappingToGL[ texture.wrapS ] );\n\t\t\t_gl.texParameteri( textureType, 10243, wrappingToGL[ texture.wrapT ] );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, wrappingToGL[ texture.wrapR ] );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterToGL[ texture.magFilter ] );\n\t\t\t_gl.texParameteri( textureType, 10241, filterToGL[ texture.minFilter ] );\n\n\t\t} else {\n\n\t\t\t_gl.texParameteri( textureType, 10242, 33071 );\n\t\t\t_gl.texParameteri( textureType, 10243, 33071 );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, 33071 );\n\n\t\t\t}\n\n\t\t\tif ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterFallback( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, 10241, filterFallback( texture.minFilter ) );\n\n\t\t\tif ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\tif ( extension ) {\n\n\t\t\tif ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return;\n\t\t\tif ( texture.type === HalfFloatType && ( isWebGL2 || extensions.get( 'OES_texture_half_float_linear' ) ) === null ) return;\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction initTexture( textureProperties, texture ) {\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tlet textureType = 3553;\n\n\t\tif ( texture.isDataTexture2DArray ) textureType = 35866;\n\t\tif ( texture.isDataTexture3D ) textureType = 32879;\n\n\t\tinitTexture( textureProperties, texture );\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( 37440, texture.flipY );\n\t\t_gl.pixelStorei( 37441, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, texture.unpackAlignment );\n\n\t\tconst needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( texture.image ) === false;\n\t\tconst image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );\n\n\t\tconst supportsMips = isPowerOfTwo( image ) || isWebGL2,\n\t\t\tglFormat = utils.convert( texture.format );\n\n\t\tlet glType = utils.convert( texture.type ),\n\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\tsetTextureParameters( textureType, texture, supportsMips );\n\n\t\tlet mipmap;\n\t\tconst mipmaps = texture.mipmaps;\n\n\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t// populate depth texture with dummy data\n\n\t\t\tglInternalFormat = 6402;\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t} else if ( texture.type === UnsignedIntType ) {\n\n\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t} else if ( texture.type === UnsignedInt248Type ) {\n\n\t\t\t\t\tglInternalFormat = 35056;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tglInternalFormat = 33189; // WebGL2 requires sized internalformat for glTexImage2D\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\tconsole.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// validation checks for WebGL 1\n\n\t\t\tif ( texture.format === DepthFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedShortType;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( texture.format === DepthStencilFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tglInternalFormat = 34041;\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedInt248Type ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedInt248Type;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\tstate.compressedTexImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t} else if ( texture.isDataTexture2DArray ) {\n\n\t\t\tstate.texImage3D( 35866, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t} else if ( texture.isDataTexture3D ) {\n\n\t\t\tstate.texImage3D( 32879, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t} else {\n\n\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, glFormat, glType, mipmap );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, glFormat, glType, image );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\tgenerateMipmap( textureType, texture, image.width, image.height );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t}\n\n\tfunction uploadCubeTexture( textureProperties, texture, slot ) {\n\n\t\tif ( texture.image.length !== 6 ) return;\n\n\t\tinitTexture( textureProperties, texture );\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( 37440, texture.flipY );\n\n\t\tconst isCompressed = ( texture && ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture ) );\n\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\tconst cubeImage = [];\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize );\n\n\t\t\t} else {\n\n\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst image = cubeImage[ 0 ],\n\t\t\tsupportsMips = isPowerOfTwo( image ) || isWebGL2,\n\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\tglType = utils.convert( texture.type ),\n\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\tsetTextureParameters( 34067, texture, supportsMips );\n\n\t\tlet mipmaps;\n\n\t\tif ( isCompressed ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\tstate.compressedTexImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t} else {\n\n\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length;\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t// We assume images for cube map have the same size.\n\t\t\tgenerateMipmap( 34067, texture, image.width, image.height );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) {\n\n\t\tconst glFormat = utils.convert( renderTarget.texture.format );\n\t\tconst glType = utils.convert( renderTarget.texture.type );\n\t\tconst glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType );\n\t\tstate.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\t\t_gl.bindFramebuffer( 36160, framebuffer );\n\t\t_gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 );\n\t\t_gl.bindFramebuffer( 36160, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {\n\n\t\t_gl.bindRenderbuffer( 36161, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\tlet glInternalFormat = 33189;\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst depthTexture = renderTarget.depthTexture;\n\n\t\t\t\tif ( depthTexture && depthTexture.isDepthTexture ) {\n\n\t\t\t\t\tif ( depthTexture.type === FloatType ) {\n\n\t\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t\t} else if ( depthTexture.type === UnsignedIntType ) {\n\n\t\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 36096, 36161, renderbuffer );\n\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, 35056, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, 34041, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 33306, 36161, renderbuffer );\n\n\t\t} else {\n\n\t\t\tconst glFormat = utils.convert( renderTarget.texture.format );\n\t\t\tconst glType = utils.convert( renderTarget.texture.type );\n\t\t\tconst glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType );\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tconst isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\t_gl.bindFramebuffer( 36160, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tconst webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( 36160, 36096, 3553, webglDepthTexture, 0 );\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( 36160, 33306, 3553, webglDepthTexture, 0 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindFramebuffer( 36160, null );\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( renderTarget.texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\tinfo.memory.textures ++;\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\tconst isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true );\n\t\tconst supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;\n\n\t\t// Handles WebGL2 RGBFormat fallback - #18858\n\n\t\tif ( isWebGL2 && renderTarget.texture.format === RGBFormat && ( renderTarget.texture.type === FloatType || renderTarget.texture.type === HalfFloatType ) ) {\n\n\t\t\trenderTarget.texture.format = RGBAFormat;\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.' );\n\n\t\t}\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer();\n\n\t\t\t\t\t_gl.bindRenderbuffer( 36161, renderTargetProperties.__webglColorRenderbuffer );\n\n\t\t\t\t\tconst glFormat = utils.convert( renderTarget.texture.format );\n\t\t\t\t\tconst glType = utils.convert( renderTarget.texture.type );\n\t\t\t\t\tconst glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType );\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t_gl.framebufferRenderbuffer( 36160, 36064, 36161, renderTargetProperties.__webglColorRenderbuffer );\n\t\t\t\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_gl.bindFramebuffer( 36160, null );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( 34067, renderTarget.texture, supportsMips );\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, 36064, 34069 + i );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( 34067, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( 34067, null );\n\n\t\t} else {\n\n\t\t\tstate.bindTexture( 3553, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( 3553, renderTarget.texture, supportsMips );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, 36064, 3553 );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( 3553, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( 3553, null );\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\t\tconst supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\tconst target = renderTarget.isWebGLCubeRenderTarget ? 34067 : 3553;\n\t\t\tconst webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\tgenerateMipmap( target, texture, renderTarget.width, renderTarget.height );\n\t\t\tstate.bindTexture( target, null );\n\n\t\t}\n\n\t}\n\n\tfunction updateMultisampleRenderTarget( renderTarget ) {\n\n\t\tif ( renderTarget.isWebGLMultisampleRenderTarget ) {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\t\t_gl.bindFramebuffer( 36008, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t_gl.bindFramebuffer( 36009, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\tconst width = renderTarget.width;\n\t\t\t\tconst height = renderTarget.height;\n\t\t\t\tlet mask = 16384;\n\n\t\t\t\tif ( renderTarget.depthBuffer ) mask |= 256;\n\t\t\t\tif ( renderTarget.stencilBuffer ) mask |= 1024;\n\n\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, 9728 );\n\n\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer ); // see #18905\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getRenderTargetSamples( renderTarget ) {\n\n\t\treturn ( isWebGL2 && renderTarget.isWebGLMultisampleRenderTarget ) ?\n\t\t\tMath.min( maxSamples, renderTarget.samples ) : 0;\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures.get( texture ) !== frame ) {\n\n\t\t\t_videoTextures.set( texture, frame );\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\t// backwards compatibility\n\n\tlet warnedTexture2D = false;\n\tlet warnedTextureCube = false;\n\n\tfunction safeSetTexture2D( texture, slot ) {\n\n\t\tif ( texture && texture.isWebGLRenderTarget ) {\n\n\t\t\tif ( warnedTexture2D === false ) {\n\n\t\t\t\tconsole.warn( \"THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\t\twarnedTexture2D = true;\n\n\t\t\t}\n\n\t\t\ttexture = texture.texture;\n\n\t\t}\n\n\t\tsetTexture2D( texture, slot );\n\n\t}\n\n\tfunction safeSetTextureCube( texture, slot ) {\n\n\t\tif ( texture && texture.isWebGLCubeRenderTarget ) {\n\n\t\t\tif ( warnedTextureCube === false ) {\n\n\t\t\t\tconsole.warn( \"THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead.\" );\n\t\t\t\twarnedTextureCube = true;\n\n\t\t\t}\n\n\t\t\ttexture = texture.texture;\n\n\t\t}\n\n\n\t\tsetTextureCube( texture, slot );\n\n\t}\n\n\t//\n\n\tthis.allocateTextureUnit = allocateTextureUnit;\n\tthis.resetTextureUnits = resetTextureUnits;\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTexture2DArray = setTexture2DArray;\n\tthis.setTexture3D = setTexture3D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\n\tthis.safeSetTexture2D = safeSetTexture2D;\n\tthis.safeSetTextureCube = safeSetTextureCube;\n\n}\n\nfunction WebGLUtils( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction convert( p ) {\n\n\t\tlet extension;\n\n\t\tif ( p === UnsignedByteType ) return 5121;\n\t\tif ( p === UnsignedShort4444Type ) return 32819;\n\t\tif ( p === UnsignedShort5551Type ) return 32820;\n\t\tif ( p === UnsignedShort565Type ) return 33635;\n\n\t\tif ( p === ByteType ) return 5120;\n\t\tif ( p === ShortType ) return 5122;\n\t\tif ( p === UnsignedShortType ) return 5123;\n\t\tif ( p === IntType ) return 5124;\n\t\tif ( p === UnsignedIntType ) return 5125;\n\t\tif ( p === FloatType ) return 5126;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\tif ( isWebGL2 ) return 5131;\n\n\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.HALF_FLOAT_OES;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === AlphaFormat ) return 6406;\n\t\tif ( p === RGBFormat ) return 6407;\n\t\tif ( p === RGBAFormat ) return 6408;\n\t\tif ( p === LuminanceFormat ) return 6409;\n\t\tif ( p === LuminanceAlphaFormat ) return 6410;\n\t\tif ( p === DepthFormat ) return 6402;\n\t\tif ( p === DepthStencilFormat ) return 34041;\n\t\tif ( p === RedFormat ) return 6403;\n\n\t\t// WebGL2 formats.\n\n\t\tif ( p === RedIntegerFormat ) return 36244;\n\t\tif ( p === RGFormat ) return 33319;\n\t\tif ( p === RGIntegerFormat ) return 33320;\n\t\tif ( p === RGBIntegerFormat ) return 36248;\n\t\tif ( p === RGBAIntegerFormat ) return 36249;\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format ||\n\t\t\tp === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format ||\n\t\t\tp === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_ETC2_Format ) return extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return extension.COMPRESSED_RGBA8_ETC2_EAC;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_4x4_Format || p === SRGB8_ALPHA8_ASTC_5x4_Format || p === SRGB8_ALPHA8_ASTC_5x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_6x5_Format || p === SRGB8_ALPHA8_ASTC_6x6_Format || p === SRGB8_ALPHA8_ASTC_8x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_8x6_Format || p === SRGB8_ALPHA8_ASTC_8x8_Format || p === SRGB8_ALPHA8_ASTC_10x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_10x6_Format || p === SRGB8_ALPHA8_ASTC_10x8_Format || p === SRGB8_ALPHA8_ASTC_10x10_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_12x10_Format || p === SRGB8_ALPHA8_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\t// TODO Complete?\n\n\t\t\t\treturn p;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGBA_BPTC_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\t// TODO Complete?\n\n\t\t\t\treturn p;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\tif ( isWebGL2 ) return 34042;\n\n\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\nfunction ArrayCamera( array = [] ) {\n\n\tPerspectiveCamera.call( this );\n\n\tthis.cameras = array;\n\n}\n\nArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), {\n\n\tconstructor: ArrayCamera,\n\n\tisArrayCamera: true\n\n} );\n\nfunction Group() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Group';\n\n}\n\nGroup.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Group,\n\n\tisGroup: true\n\n} );\n\nfunction WebXRController() {\n\n\tthis._targetRay = null;\n\tthis._grip = null;\n\tthis._hand = null;\n\n}\n\nObject.assign( WebXRController.prototype, {\n\n\tconstructor: WebXRController,\n\n\tgetHandSpace: function () {\n\n\t\tif ( this._hand === null ) {\n\n\t\t\tthis._hand = new Group();\n\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\tthis._hand.visible = false;\n\n\t\t\tthis._hand.joints = [];\n\t\t\tthis._hand.inputState = { pinching: false };\n\n\t\t\tif ( window.XRHand ) {\n\n\t\t\t\tfor ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) {\n\n\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\tconst joint = new Group();\n\t\t\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\t\t\tjoint.visible = false;\n\t\t\t\t\tthis._hand.joints.push( joint );\n\t\t\t\t\t// ??\n\t\t\t\t\tthis._hand.add( joint );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this._hand;\n\n\t},\n\n\tgetTargetRaySpace: function () {\n\n\t\tif ( this._targetRay === null ) {\n\n\t\t\tthis._targetRay = new Group();\n\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\treturn this._targetRay;\n\n\t},\n\n\tgetGripSpace: function () {\n\n\t\tif ( this._grip === null ) {\n\n\t\t\tthis._grip = new Group();\n\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\treturn this._grip;\n\n\t},\n\n\tdispatchEvent: function ( event ) {\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.dispatchEvent( event );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tdisconnect: function ( inputSource ) {\n\n\t\tthis.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.visible = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tupdate: function ( inputSource, frame, referenceSpace ) {\n\n\t\tlet inputPose = null;\n\t\tlet gripPose = null;\n\t\tlet handPose = null;\n\n\t\tconst targetRay = this._targetRay;\n\t\tconst grip = this._grip;\n\t\tconst hand = this._hand;\n\n\t\tif ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {\n\n\t\t\tif ( hand && inputSource.hand ) {\n\n\t\t\t\thandPose = true;\n\n\t\t\t\tfor ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) {\n\n\t\t\t\t\tif ( inputSource.hand[ i ] ) {\n\n\t\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\t\tconst jointPose = frame.getJointPose( inputSource.hand[ i ], referenceSpace );\n\t\t\t\t\t\tconst joint = hand.joints[ i ];\n\n\t\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t\t\t// Custom events\n\n\t\t\t\t\t\t// Check pinch\n\t\t\t\t\t\tconst indexTip = hand.joints[ window.XRHand.INDEX_PHALANX_TIP ];\n\t\t\t\t\t\tconst thumbTip = hand.joints[ window.XRHand.THUMB_PHALANX_TIP ];\n\t\t\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\t\t\ttype: \"pinchend\",\n\t\t\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\t\t\ttarget: this\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\t\t\ttype: \"pinchstart\",\n\t\t\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\t\t\ttarget: this\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( grip !== null && inputSource.gripSpace ) {\n\n\t\t\t\t\tgripPose = frame.getPose( inputSource.gripSpace, referenceSpace );\n\n\t\t\t\t\tif ( gripPose !== null ) {\n\n\t\t\t\t\t\tgrip.matrix.fromArray( gripPose.transform.matrix );\n\t\t\t\t\t\tgrip.matrix.decompose( grip.position, grip.rotation, grip.scale );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( targetRay !== null ) {\n\n\t\t\ttargetRay.visible = ( inputPose !== null );\n\n\t\t}\n\n\t\tif ( grip !== null ) {\n\n\t\t\tgrip.visible = ( gripPose !== null );\n\n\t\t}\n\n\t\tif ( hand !== null ) {\n\n\t\t\thand.visible = ( handPose !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction WebXRManager( renderer, gl ) {\n\n\tconst scope = this;\n\n\tlet session = null;\n\n\tlet framebufferScaleFactor = 1.0;\n\n\tlet referenceSpace = null;\n\tlet referenceSpaceType = 'local-floor';\n\n\tlet pose = null;\n\n\tconst controllers = [];\n\tconst inputSourcesMap = new Map();\n\n\t//\n\n\tconst cameraL = new PerspectiveCamera();\n\tcameraL.layers.enable( 1 );\n\tcameraL.viewport = new Vector4();\n\n\tconst cameraR = new PerspectiveCamera();\n\tcameraR.layers.enable( 2 );\n\tcameraR.viewport = new Vector4();\n\n\tconst cameras = [ cameraL, cameraR ];\n\n\tconst cameraVR = new ArrayCamera();\n\tcameraVR.layers.enable( 1 );\n\tcameraVR.layers.enable( 2 );\n\n\tlet _currentDepthNear = null;\n\tlet _currentDepthFar = null;\n\n\t//\n\n\tthis.enabled = false;\n\n\tthis.isPresenting = false;\n\n\tthis.getController = function ( index ) {\n\n\t\tlet controller = controllers[ index ];\n\n\t\tif ( controller === undefined ) {\n\n\t\t\tcontroller = new WebXRController();\n\t\t\tcontrollers[ index ] = controller;\n\n\t\t}\n\n\t\treturn controller.getTargetRaySpace();\n\n\t};\n\n\tthis.getControllerGrip = function ( index ) {\n\n\t\tlet controller = controllers[ index ];\n\n\t\tif ( controller === undefined ) {\n\n\t\t\tcontroller = new WebXRController();\n\t\t\tcontrollers[ index ] = controller;\n\n\t\t}\n\n\t\treturn controller.getGripSpace();\n\n\t};\n\n\tthis.getHand = function ( index ) {\n\n\t\tlet controller = controllers[ index ];\n\n\t\tif ( controller === undefined ) {\n\n\t\t\tcontroller = new WebXRController();\n\t\t\tcontrollers[ index ] = controller;\n\n\t\t}\n\n\t\treturn controller.getHandSpace();\n\n\t};\n\n\t//\n\n\tfunction onSessionEvent( event ) {\n\n\t\tconst controller = inputSourcesMap.get( event.inputSource );\n\n\t\tif ( controller ) {\n\n\t\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t\t}\n\n\t}\n\n\tfunction onSessionEnd() {\n\n\t\tinputSourcesMap.forEach( function ( controller, inputSource ) {\n\n\t\t\tcontroller.disconnect( inputSource );\n\n\t\t} );\n\n\t\tinputSourcesMap.clear();\n\n\t\t//\n\n\t\trenderer.setFramebuffer( null );\n\t\trenderer.setRenderTarget( renderer.getRenderTarget() ); // Hack #15830\n\t\tanimation.stop();\n\n\t\tscope.isPresenting = false;\n\n\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t}\n\n\tfunction onRequestReferenceSpace( value ) {\n\n\t\treferenceSpace = value;\n\n\t\tanimation.setContext( session );\n\t\tanimation.start();\n\n\t\tscope.isPresenting = true;\n\n\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t}\n\n\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\tframebufferScaleFactor = value;\n\n\t\tif ( scope.isPresenting === true ) {\n\n\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t}\n\n\t};\n\n\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\treferenceSpaceType = value;\n\n\t\tif ( scope.isPresenting === true ) {\n\n\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t}\n\n\t};\n\n\tthis.getReferenceSpace = function () {\n\n\t\treturn referenceSpace;\n\n\t};\n\n\tthis.getSession = function () {\n\n\t\treturn session;\n\n\t};\n\n\tthis.setSession = function ( value ) {\n\n\t\tsession = value;\n\n\t\tif ( session !== null ) {\n\n\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\n\t\t\tconst attributes = gl.getContextAttributes();\n\n\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\tgl.makeXRCompatible();\n\n\t\t\t}\n\n\t\t\tconst layerInit = {\n\t\t\t\tantialias: attributes.antialias,\n\t\t\t\talpha: attributes.alpha,\n\t\t\t\tdepth: attributes.depth,\n\t\t\t\tstencil: attributes.stencil,\n\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t};\n\n\t\t\t// eslint-disable-next-line no-undef\n\t\t\tconst baseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\tsession.updateRenderState( { baseLayer: baseLayer } );\n\n\t\t\tsession.requestReferenceSpace( referenceSpaceType ).then( onRequestReferenceSpace );\n\n\t\t\t//\n\n\t\t\tsession.addEventListener( 'inputsourceschange', updateInputSources );\n\n\t\t}\n\n\t};\n\n\tfunction updateInputSources( event ) {\n\n\t\tconst inputSources = session.inputSources;\n\n\t\t// Assign inputSources to available controllers\n\n\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\tinputSourcesMap.set( inputSources[ i ], controllers[ i ] );\n\n\t\t}\n\n\t\t// Notify disconnected\n\n\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\tconst inputSource = event.removed[ i ];\n\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\tif ( controller ) {\n\n\t\t\t\tcontroller.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\t\t\t\tinputSourcesMap.delete( inputSource );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Notify connected\n\n\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\tconst inputSource = event.added[ i ];\n\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\tif ( controller ) {\n\n\t\t\t\tcontroller.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t//\n\n\tconst cameraLPos = new Vector3();\n\tconst cameraRPos = new Vector3();\n\n\t/**\n\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t * the cameras' projection and world matrices have already been set.\n\t * And that near and far planes are identical for both cameras.\n\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t */\n\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t// VR systems will have identical far and near planes, and\n\t\t// most likely identical top and bottom frustum extents.\n\t\t// Use the left camera for these values.\n\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\tconst left = near * leftFov;\n\t\tconst right = near * rightFov;\n\n\t\t// Calculate the new camera's position offset from the\n\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t// TODO: Better way to apply this offset?\n\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\tcamera.translateX( xOffset );\n\t\tcamera.translateZ( zOffset );\n\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t// Find the union of the frustum values of the cameras and scale\n\t\t// the values so that the near plane's position does not change in world space,\n\t\t// although must now be relative to the new union camera.\n\t\tconst near2 = near + zOffset;\n\t\tconst far2 = far + zOffset;\n\t\tconst left2 = left - xOffset;\n\t\tconst right2 = right + ( ipd - xOffset );\n\t\tconst top2 = topFov * far / far2 * near2;\n\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\n\t}\n\n\tfunction updateCamera( camera, parent ) {\n\n\t\tif ( parent === null ) {\n\n\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t} else {\n\n\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t}\n\n\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t}\n\n\tthis.getCamera = function ( camera ) {\n\n\t\tcameraVR.near = cameraR.near = cameraL.near = camera.near;\n\t\tcameraVR.far = cameraR.far = cameraL.far = camera.far;\n\n\t\tif ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) {\n\n\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\tsession.updateRenderState( {\n\t\t\t\tdepthNear: cameraVR.near,\n\t\t\t\tdepthFar: cameraVR.far\n\t\t\t} );\n\n\t\t\t_currentDepthNear = cameraVR.near;\n\t\t\t_currentDepthFar = cameraVR.far;\n\n\t\t}\n\n\t\tconst parent = camera.parent;\n\t\tconst cameras = cameraVR.cameras;\n\n\t\tupdateCamera( cameraVR, parent );\n\n\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t}\n\n\t\t// update camera and its children\n\n\t\tcamera.matrixWorld.copy( cameraVR.matrixWorld );\n\n\t\tconst children = camera.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].updateMatrixWorld( true );\n\n\t\t}\n\n\t\t// update projection matrix for proper view frustum culling\n\n\t\tif ( cameras.length === 2 ) {\n\n\t\t\tsetProjectionFromUnion( cameraVR, cameraL, cameraR );\n\n\t\t} else {\n\n\t\t\t// assume single camera setup (AR)\n\n\t\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t}\n\n\t\treturn cameraVR;\n\n\t};\n\n\t// Animation Loop\n\n\tlet onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tpose = frame.getViewerPose( referenceSpace );\n\n\t\tif ( pose !== null ) {\n\n\t\t\tconst views = pose.views;\n\t\t\tconst baseLayer = session.renderState.baseLayer;\n\n\t\t\trenderer.setFramebuffer( baseLayer.framebuffer );\n\n\t\t\tlet cameraVRNeedsUpdate = false;\n\n\t\t\t// check if it's necessary to rebuild cameraVR's camera list\n\n\t\t\tif ( views.length !== cameraVR.cameras.length ) {\n\n\t\t\t\tcameraVR.cameras.length = 0;\n\t\t\t\tcameraVRNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\tconst view = views[ i ];\n\t\t\t\tconst viewport = baseLayer.getViewport( view );\n\n\t\t\t\tconst camera = cameras[ i ];\n\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\tcameraVR.matrix.copy( camera.matrix );\n\n\t\t\t\t}\n\n\t\t\t\tif ( cameraVRNeedsUpdate === true ) {\n\n\t\t\t\t\tcameraVR.cameras.push( camera );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst inputSources = session.inputSources;\n\n\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\tconst controller = controllers[ i ];\n\t\t\tconst inputSource = inputSources[ i ];\n\n\t\t\tcontroller.update( inputSource, frame, referenceSpace );\n\n\t\t}\n\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t}\n\n\tconst animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\n\t};\n\n\tthis.dispose = function () {};\n\n}\n\nObject.assign( WebXRManager.prototype, EventDispatcher.prototype );\n\nfunction WebGLMaterials( properties ) {\n\n\tfunction refreshFogUniforms( uniforms, fog ) {\n\n\t\tuniforms.fogColor.value.copy( fog.color );\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshMaterialUniforms( uniforms, material, pixelRatio, height ) {\n\n\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsLambert( uniforms, material );\n\n\t\t} else if ( material.isMeshToonMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsToon( uniforms, material );\n\n\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\trefreshUniformsPhysical( uniforms, material );\n\n\t\t\t} else {\n\n\t\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsMatcap( uniforms, material );\n\n\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDepth( uniforms, material );\n\n\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDistance( uniforms, material );\n\n\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsNormal( uniforms, material );\n\n\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\trefreshUniformsLine( uniforms, material );\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\trefreshUniformsDash( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\trefreshUniformsPoints( uniforms, material, pixelRatio, height );\n\n\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\trefreshUniformsSprites( uniforms, material );\n\n\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\tuniforms.color.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t} else if ( material.isShaderMaterial ) {\n\n\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value.copy( material.color );\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t}\n\n\t\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\tuniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap._needsFlipEnvMap ) ? - 1 : 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\tconst maxMipLevel = properties.get( envMap ).__maxMipLevel;\n\n\t\t\tif ( maxMipLevel !== undefined ) {\n\n\t\t\t\tuniforms.maxMipLevel.value = maxMipLevel;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. specular map\n\t\t// 3. displacementMap map\n\t\t// 4. normal map\n\t\t// 5. bump map\n\t\t// 6. roughnessMap map\n\t\t// 7. metalnessMap map\n\t\t// 8. alphaMap map\n\t\t// 9. emissiveMap map\n\t\t// 10. clearcoat map\n\t\t// 11. clearcoat normal map\n\t\t// 12. clearcoat roughnessMap map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.specularMap ) {\n\n\t\t\tuvScaleMap = material.specularMap;\n\n\t\t} else if ( material.displacementMap ) {\n\n\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t} else if ( material.normalMap ) {\n\n\t\t\tuvScaleMap = material.normalMap;\n\n\t\t} else if ( material.bumpMap ) {\n\n\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t} else if ( material.roughnessMap ) {\n\n\t\t\tuvScaleMap = material.roughnessMap;\n\n\t\t} else if ( material.metalnessMap ) {\n\n\t\t\tuvScaleMap = material.metalnessMap;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t} else if ( material.emissiveMap ) {\n\n\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t} else if ( material.clearcoatMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatMap;\n\n\t\t} else if ( material.clearcoatNormalMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatNormalMap;\n\n\t\t} else if ( material.clearcoatRoughnessMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatRoughnessMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities for uv2\n\t\t// 1. ao map\n\t\t// 2. light map\n\n\t\tlet uv2ScaleMap;\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuv2ScaleMap = material.aoMap;\n\n\t\t} else if ( material.lightMap ) {\n\n\t\t\tuv2ScaleMap = material.lightMap;\n\n\t\t}\n\n\t\tif ( uv2ScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uv2ScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuv2ScaleMap = uv2ScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uv2ScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuv2ScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uv2Transform.value.copy( uv2ScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material, pixelRatio, height ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * pixelRatio;\n\t\tuniforms.scale.value = height * 0.5;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsSprites( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.rotation.value = material.rotation;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLambert( uniforms, material ) {\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value.copy( material.specular );\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.roughness.value = material.roughness;\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t}\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material ) {\n\n\t\trefreshUniformsStandard( uniforms, material );\n\n\t\tuniforms.reflectivity.value = material.reflectivity; // also part of uniforms common\n\n\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\t\tif ( material.sheen ) uniforms.sheen.value.copy( material.sheen );\n\n\t\tif ( material.clearcoatMap ) {\n\n\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\n\t\t}\n\n\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\n\t\t}\n\n\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\tuniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );\n\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\n\t\t\t}\n\n\t\t}\n\n\t\tuniforms.transmission.value = material.transmission;\n\n\t\tif ( material.transmissionMap ) {\n\n\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\tif ( material.matcap ) {\n\n\t\t\tuniforms.matcap.value = material.matcap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDepth( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tuniforms.referencePosition.value.copy( material.referencePosition );\n\t\tuniforms.nearDistance.value = material.nearDistance;\n\t\tuniforms.farDistance.value = material.farDistance;\n\n\t}\n\n\tfunction refreshUniformsNormal( uniforms, material ) {\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\trefreshFogUniforms: refreshFogUniforms,\n\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t};\n\n}\n\nfunction createCanvasElement() {\n\n\tconst canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\tcanvas.style.display = 'block';\n\treturn canvas;\n\n}\n\nfunction WebGLRenderer( parameters ) {\n\n\tparameters = parameters || {};\n\n\tconst _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(),\n\t\t_context = parameters.context !== undefined ? parameters.context : null,\n\n\t\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false,\n\t\t_depth = parameters.depth !== undefined ? parameters.depth : true,\n\t\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\n\t\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\n\t\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\n\t\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,\n\t\t_powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default',\n\t\t_failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false;\n\n\tlet currentRenderList = null;\n\tlet currentRenderState = null;\n\n\t// public properties\n\n\tthis.domElement = _canvas;\n\n\t// Debug configuration container\n\tthis.debug = {\n\n\t\t/**\n\t\t * Enables error checking and reporting when shader programs are being compiled\n\t\t * @type {boolean}\n\t\t */\n\t\tcheckShaderErrors: true\n\t};\n\n\t// clearing\n\n\tthis.autoClear = true;\n\tthis.autoClearColor = true;\n\tthis.autoClearDepth = true;\n\tthis.autoClearStencil = true;\n\n\t// scene graph\n\n\tthis.sortObjects = true;\n\n\t// user-defined clipping\n\n\tthis.clippingPlanes = [];\n\tthis.localClippingEnabled = false;\n\n\t// physically based shading\n\n\tthis.gammaFactor = 2.0;\t// for backwards compatibility\n\tthis.outputEncoding = LinearEncoding;\n\n\t// physical lights\n\n\tthis.physicallyCorrectLights = false;\n\n\t// tone mapping\n\n\tthis.toneMapping = NoToneMapping;\n\tthis.toneMappingExposure = 1.0;\n\n\t// morphs\n\n\tthis.maxMorphTargets = 8;\n\tthis.maxMorphNormals = 4;\n\n\t// internal properties\n\n\tconst _this = this;\n\n\tlet _isContextLost = false;\n\n\t// internal state cache\n\n\tlet _framebuffer = null;\n\n\tlet _currentActiveCubeFace = 0;\n\tlet _currentActiveMipmapLevel = 0;\n\tlet _currentRenderTarget = null;\n\tlet _currentFramebuffer = null;\n\tlet _currentMaterialId = - 1;\n\n\tlet _currentCamera = null;\n\tlet _currentArrayCamera = null;\n\n\tconst _currentViewport = new Vector4();\n\tconst _currentScissor = new Vector4();\n\tlet _currentScissorTest = null;\n\n\t//\n\n\tlet _width = _canvas.width;\n\tlet _height = _canvas.height;\n\n\tlet _pixelRatio = 1;\n\tlet _opaqueSort = null;\n\tlet _transparentSort = null;\n\n\tconst _viewport = new Vector4( 0, 0, _width, _height );\n\tconst _scissor = new Vector4( 0, 0, _width, _height );\n\tlet _scissorTest = false;\n\n\t// frustum\n\n\tconst _frustum = new Frustum();\n\n\t// clipping\n\n\tlet _clippingEnabled = false;\n\tlet _localClippingEnabled = false;\n\n\t// camera matrices cache\n\n\tconst _projScreenMatrix = new Matrix4();\n\n\tconst _vector3 = new Vector3();\n\n\tconst _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };\n\n\tfunction getTargetPixelRatio() {\n\n\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t}\n\n\t// initialize\n\n\tlet _gl = _context;\n\n\tfunction getContext( contextNames, contextAttributes ) {\n\n\t\tfor ( let i = 0; i < contextNames.length; i ++ ) {\n\n\t\t\tconst contextName = contextNames[ i ];\n\t\t\tconst context = _canvas.getContext( contextName, contextAttributes );\n\t\t\tif ( context !== null ) return context;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\ttry {\n\n\t\tconst contextAttributes = {\n\t\t\talpha: _alpha,\n\t\t\tdepth: _depth,\n\t\t\tstencil: _stencil,\n\t\t\tantialias: _antialias,\n\t\t\tpremultipliedAlpha: _premultipliedAlpha,\n\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer,\n\t\t\tpowerPreference: _powerPreference,\n\t\t\tfailIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat\n\t\t};\n\n\t\t// event listeners must be registered before WebGL context is created, see #12753\n\n\t\t_canvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\tif ( _gl === null ) {\n\n\t\t\tconst contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ];\n\n\t\t\tif ( _this.isWebGL1Renderer === true ) {\n\n\t\t\t\tcontextNames.shift();\n\n\t\t\t}\n\n\t\t\t_gl = getContext( contextNames, contextAttributes );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tif ( getContext( contextNames ) ) {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Some experimental-webgl implementations do not have getShaderPrecisionFormat\n\n\t\tif ( _gl.getShaderPrecisionFormat === undefined ) {\n\n\t\t\t_gl.getShaderPrecisionFormat = function () {\n\n\t\t\t\treturn { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };\n\n\t\t\t};\n\n\t\t}\n\n\t} catch ( error ) {\n\n\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\t\tthrow error;\n\n\t}\n\n\tlet extensions, capabilities, state, info;\n\tlet properties, textures, cubemaps, attributes, geometries, objects;\n\tlet programCache, materials, renderLists, renderStates, clipping;\n\n\tlet background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\tlet utils, bindingStates;\n\n\tfunction initGLContext() {\n\n\t\textensions = new WebGLExtensions( _gl );\n\n\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\tif ( capabilities.isWebGL2 === false ) {\n\n\t\t\textensions.get( 'WEBGL_depth_texture' );\n\t\t\textensions.get( 'OES_texture_float' );\n\t\t\textensions.get( 'OES_texture_half_float' );\n\t\t\textensions.get( 'OES_texture_half_float_linear' );\n\t\t\textensions.get( 'OES_standard_derivatives' );\n\t\t\textensions.get( 'OES_element_index_uint' );\n\t\t\textensions.get( 'OES_vertex_array_object' );\n\t\t\textensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t}\n\n\t\textensions.get( 'OES_texture_float_linear' );\n\n\t\tutils = new WebGLUtils( _gl, extensions, capabilities );\n\n\t\tstate = new WebGLState( _gl, extensions, capabilities );\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );\n\n\t\tinfo = new WebGLInfo( _gl );\n\t\tproperties = new WebGLProperties();\n\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\tcubemaps = new WebGLCubeMaps( _this );\n\t\tattributes = new WebGLAttributes( _gl, capabilities );\n\t\tbindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities );\n\t\tgeometries = new WebGLGeometries( _gl, attributes, info, bindingStates );\n\t\tobjects = new WebGLObjects( _gl, geometries, attributes, info );\n\t\tmorphtargets = new WebGLMorphtargets( _gl );\n\t\tclipping = new WebGLClipping( properties );\n\t\tprogramCache = new WebGLPrograms( _this, cubemaps, extensions, capabilities, bindingStates, clipping );\n\t\tmaterials = new WebGLMaterials( properties );\n\t\trenderLists = new WebGLRenderLists( properties );\n\t\trenderStates = new WebGLRenderStates( extensions, capabilities );\n\t\tbackground = new WebGLBackground( _this, cubemaps, state, objects, _premultipliedAlpha );\n\n\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities );\n\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );\n\n\t\tinfo.programs = programCache.programs;\n\n\t\t_this.capabilities = capabilities;\n\t\t_this.extensions = extensions;\n\t\t_this.properties = properties;\n\t\t_this.renderLists = renderLists;\n\t\t_this.state = state;\n\t\t_this.info = info;\n\n\t}\n\n\tinitGLContext();\n\n\t// xr\n\n\tconst xr = new WebXRManager( _this, _gl );\n\n\tthis.xr = xr;\n\n\t// shadow map\n\n\tconst shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize );\n\n\tthis.shadowMap = shadowMap;\n\n\t// API\n\n\tthis.getContext = function () {\n\n\t\treturn _gl;\n\n\t};\n\n\tthis.getContextAttributes = function () {\n\n\t\treturn _gl.getContextAttributes();\n\n\t};\n\n\tthis.forceContextLoss = function () {\n\n\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.loseContext();\n\n\t};\n\n\tthis.forceContextRestore = function () {\n\n\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.restoreContext();\n\n\t};\n\n\tthis.getPixelRatio = function () {\n\n\t\treturn _pixelRatio;\n\n\t};\n\n\tthis.setPixelRatio = function ( value ) {\n\n\t\tif ( value === undefined ) return;\n\n\t\t_pixelRatio = value;\n\n\t\tthis.setSize( _width, _height, false );\n\n\t};\n\n\tthis.getSize = function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getsize() now requires a Vector2 as an argument' );\n\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set( _width, _height );\n\n\t};\n\n\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\tif ( xr.isPresenting ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_canvas.width = Math.floor( width * _pixelRatio );\n\t\t_canvas.height = Math.floor( height * _pixelRatio );\n\n\t\tif ( updateStyle !== false ) {\n\n\t\t\t_canvas.style.width = width + 'px';\n\t\t\t_canvas.style.height = height + 'px';\n\n\t\t}\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getDrawingBufferSize = function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument' );\n\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();\n\n\t};\n\n\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_pixelRatio = pixelRatio;\n\n\t\t_canvas.width = Math.floor( width * pixelRatio );\n\t\t_canvas.height = Math.floor( height * pixelRatio );\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getCurrentViewport = function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument' );\n\n\t\t\ttarget = new Vector4();\n\n\t\t}\n\n\t\treturn target.copy( _currentViewport );\n\n\t};\n\n\tthis.getViewport = function ( target ) {\n\n\t\treturn target.copy( _viewport );\n\n\t};\n\n\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_viewport.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_viewport.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissor = function ( target ) {\n\n\t\treturn target.copy( _scissor );\n\n\t};\n\n\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_scissor.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_scissor.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissorTest = function () {\n\n\t\treturn _scissorTest;\n\n\t};\n\n\tthis.setScissorTest = function ( boolean ) {\n\n\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t};\n\n\tthis.setOpaqueSort = function ( method ) {\n\n\t\t_opaqueSort = method;\n\n\t};\n\n\tthis.setTransparentSort = function ( method ) {\n\n\t\t_transparentSort = method;\n\n\t};\n\n\t// Clearing\n\n\tthis.getClearColor = function () {\n\n\t\treturn background.getClearColor();\n\n\t};\n\n\tthis.setClearColor = function () {\n\n\t\tbackground.setClearColor.apply( background, arguments );\n\n\t};\n\n\tthis.getClearAlpha = function () {\n\n\t\treturn background.getClearAlpha();\n\n\t};\n\n\tthis.setClearAlpha = function () {\n\n\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t};\n\n\tthis.clear = function ( color, depth, stencil ) {\n\n\t\tlet bits = 0;\n\n\t\tif ( color === undefined || color ) bits |= 16384;\n\t\tif ( depth === undefined || depth ) bits |= 256;\n\t\tif ( stencil === undefined || stencil ) bits |= 1024;\n\n\t\t_gl.clear( bits );\n\n\t};\n\n\tthis.clearColor = function () {\n\n\t\tthis.clear( true, false, false );\n\n\t};\n\n\tthis.clearDepth = function () {\n\n\t\tthis.clear( false, true, false );\n\n\t};\n\n\tthis.clearStencil = function () {\n\n\t\tthis.clear( false, false, true );\n\n\t};\n\n\t//\n\n\tthis.dispose = function () {\n\n\t\t_canvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\trenderLists.dispose();\n\t\trenderStates.dispose();\n\t\tproperties.dispose();\n\t\tcubemaps.dispose();\n\t\tobjects.dispose();\n\t\tbindingStates.dispose();\n\n\t\txr.dispose();\n\n\t\tanimation.stop();\n\n\t};\n\n\t// Events\n\n\tfunction onContextLost( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t_isContextLost = true;\n\n\t}\n\n\tfunction onContextRestore( /* event */ ) {\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t_isContextLost = false;\n\n\t\tinitGLContext();\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tconst material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\tdeallocateMaterial( material );\n\n\t}\n\n\t// Buffer deallocation\n\n\tfunction deallocateMaterial( material ) {\n\n\t\treleaseMaterialProgramReference( material );\n\n\t\tproperties.remove( material );\n\n\t}\n\n\n\tfunction releaseMaterialProgramReference( material ) {\n\n\t\tconst programInfo = properties.get( material ).program;\n\n\t\tif ( programInfo !== undefined ) {\n\n\t\t\tprogramCache.releaseProgram( programInfo );\n\n\t\t}\n\n\t}\n\n\t// Buffer rendering\n\n\tfunction renderObjectImmediate( object, program ) {\n\n\t\tobject.render( function ( object ) {\n\n\t\t\t_this.renderBufferImmediate( object, program );\n\n\t\t} );\n\n\t}\n\n\tthis.renderBufferImmediate = function ( object, program ) {\n\n\t\tbindingStates.initAttributes();\n\n\t\tconst buffers = properties.get( object );\n\n\t\tif ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer();\n\t\tif ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer();\n\t\tif ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer();\n\t\tif ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer();\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tif ( object.hasPositions ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.position );\n\t\t\t_gl.bufferData( 34962, object.positionArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.position );\n\t\t\t_gl.vertexAttribPointer( programAttributes.position, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasNormals ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.normal );\n\t\t\t_gl.bufferData( 34962, object.normalArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.normal );\n\t\t\t_gl.vertexAttribPointer( programAttributes.normal, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasUvs ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.uv );\n\t\t\t_gl.bufferData( 34962, object.uvArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.uv );\n\t\t\t_gl.vertexAttribPointer( programAttributes.uv, 2, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasColors ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.color );\n\t\t\t_gl.bufferData( 34962, object.colorArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.color );\n\t\t\t_gl.vertexAttribPointer( programAttributes.color, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tbindingStates.disableUnusedAttributes();\n\n\t\t_gl.drawArrays( 4, 0, object.count );\n\n\t\tobject.count = 0;\n\n\t};\n\n\tthis.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {\n\n\t\tif ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\tconst program = setProgram( camera, scene, material, object );\n\n\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t//\n\n\t\tlet index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\n\t\t//\n\n\t\tif ( index === null ) {\n\n\t\t\tif ( position === undefined || position.count === 0 ) return;\n\n\t\t} else if ( index.count === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t//\n\n\t\tlet rangeFactor = 1;\n\n\t\tif ( material.wireframe === true ) {\n\n\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\t\t\trangeFactor = 2;\n\n\t\t}\n\n\t\tif ( material.morphTargets || material.morphNormals ) {\n\n\t\t\tmorphtargets.update( object, geometry, material, program );\n\n\t\t}\n\n\t\tbindingStates.setup( object, material, program, geometry, index );\n\n\t\tlet attribute;\n\t\tlet renderer = bufferRenderer;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattribute = attributes.get( index );\n\n\t\t\trenderer = indexedBufferRenderer;\n\t\t\trenderer.setIndex( attribute );\n\n\t\t}\n\n\t\t//\n\n\t\tconst dataCount = ( index !== null ) ? index.count : position.count;\n\n\t\tconst rangeStart = geometry.drawRange.start * rangeFactor;\n\t\tconst rangeCount = geometry.drawRange.count * rangeFactor;\n\n\t\tconst groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\tconst groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\tconst drawStart = Math.max( rangeStart, groupStart );\n\t\tconst drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\tconst drawCount = Math.max( 0, drawEnd - drawStart + 1 );\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\t//\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\trenderer.setMode( 1 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 4 );\n\n\t\t\t}\n\n\t\t} else if ( object.isLine ) {\n\n\t\t\tlet lineWidth = material.linewidth;\n\n\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\trenderer.setMode( 1 );\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\trenderer.setMode( 2 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 3 );\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\trenderer.setMode( 0 );\n\n\t\t} else if ( object.isSprite ) {\n\n\t\t\trenderer.setMode( 4 );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, object.count );\n\n\t\t} else if ( geometry.isInstancedBufferGeometry ) {\n\n\t\t\tconst instanceCount = Math.min( geometry.instanceCount, geometry._maxInstanceCount );\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, instanceCount );\n\n\t\t} else {\n\n\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t}\n\n\t};\n\n\t// Compile\n\n\tthis.compile = function ( scene, camera ) {\n\n\t\tcurrentRenderState = renderStates.get( scene, camera );\n\t\tcurrentRenderState.init();\n\n\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tcurrentRenderState.setupLights( camera );\n\n\t\tconst compiled = new WeakMap();\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tconst material = object.material;\n\n\t\t\tif ( material ) {\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0; i < material.length; i ++ ) {\n\n\t\t\t\t\t\tconst material2 = material[ i ];\n\n\t\t\t\t\t\tif ( compiled.has( material2 ) === false ) {\n\n\t\t\t\t\t\t\tinitMaterial( material2, scene, object );\n\t\t\t\t\t\t\tcompiled.set( material2 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( compiled.has( material ) === false ) {\n\n\t\t\t\t\tinitMaterial( material, scene, object );\n\t\t\t\t\tcompiled.set( material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t};\n\n\t// Animation Loop\n\n\tlet onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time ) {\n\n\t\tif ( xr.isPresenting ) return;\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t}\n\n\tconst animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tif ( typeof window !== 'undefined' ) animation.setContext( window );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\t\txr.setAnimationLoop( callback );\n\n\t\t( callback === null ) ? animation.stop() : animation.start();\n\n\t};\n\n\t// Rendering\n\n\tthis.render = function ( scene, camera ) {\n\n\t\tlet renderTarget, forceClear;\n\n\t\tif ( arguments[ 2 ] !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.' );\n\t\t\trenderTarget = arguments[ 2 ];\n\n\t\t}\n\n\t\tif ( arguments[ 3 ] !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead.' );\n\t\t\tforceClear = arguments[ 3 ];\n\n\t\t}\n\n\t\tif ( camera !== undefined && camera.isCamera !== true ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( _isContextLost === true ) return;\n\n\t\t// reset caching for this frame\n\n\t\tbindingStates.resetDefaultState();\n\t\t_currentMaterialId = - 1;\n\t\t_currentCamera = null;\n\n\t\t// update scene graph\n\n\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t// update camera matrices and frustum\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\tcamera = xr.getCamera( camera );\n\n\t\t}\n\n\t\t//\n\t\tif ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, renderTarget || _currentRenderTarget );\n\n\t\tcurrentRenderState = renderStates.get( scene, camera );\n\t\tcurrentRenderState.init();\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t_frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled, camera );\n\n\t\tcurrentRenderList = renderLists.get( scene, camera );\n\t\tcurrentRenderList.init();\n\n\t\tprojectObject( scene, camera, 0, _this.sortObjects );\n\n\t\tcurrentRenderList.finish();\n\n\t\tif ( _this.sortObjects === true ) {\n\n\t\t\tcurrentRenderList.sort( _opaqueSort, _transparentSort );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _clippingEnabled === true ) clipping.beginShadows();\n\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\tcurrentRenderState.setupLights( camera );\n\n\t\tif ( _clippingEnabled === true ) clipping.endShadows();\n\n\t\t//\n\n\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n\t\tif ( renderTarget !== undefined ) {\n\n\t\t\tthis.setRenderTarget( renderTarget );\n\n\t\t}\n\n\t\t//\n\n\t\tbackground.render( currentRenderList, scene, camera, forceClear );\n\n\t\t// render scene\n\n\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\tconst transparentObjects = currentRenderList.transparent;\n\n\t\tif ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );\n\t\tif ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );\n\n\t\t//\n\n\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\n\n\t\t//\n\n\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\ttextures.updateRenderTargetMipmap( _currentRenderTarget );\n\n\t\t\t// resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\ttextures.updateMultisampleRenderTarget( _currentRenderTarget );\n\n\t\t}\n\n\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\tstate.buffers.depth.setTest( true );\n\t\tstate.buffers.depth.setMask( true );\n\t\tstate.buffers.color.setMask( true );\n\n\t\tstate.setPolygonOffset( false );\n\n\t\t// _gl.finish();\n\n\t\tcurrentRenderList = null;\n\t\tcurrentRenderState = null;\n\n\t};\n\n\tfunction projectObject( object, camera, groupOrder, sortObjects ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible ) {\n\n\t\t\tif ( object.isGroup ) {\n\n\t\t\t\tgroupOrder = object.renderOrder;\n\n\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t} else if ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isImmediateRenderObject ) {\n\n\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t}\n\n\t\t\t\tcurrentRenderList.push( object, null, object.material, groupOrder, _vector3.z, null );\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\t// update skeleton only once in a frame\n\n\t\t\t\t\tif ( object.skeleton.frame !== info.render.frame ) {\n\n\t\t\t\t\t\tobject.skeleton.update();\n\t\t\t\t\t\tobject.skeleton.frame = info.render.frame;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tprojectObject( children[ i ], camera, groupOrder, sortObjects );\n\n\t\t}\n\n\t}\n\n\tfunction renderObjects( renderList, scene, camera ) {\n\n\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\tfor ( let i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\tconst renderItem = renderList[ i ];\n\n\t\t\tconst object = renderItem.object;\n\t\t\tconst geometry = renderItem.geometry;\n\t\t\tconst material = overrideMaterial === null ? renderItem.material : overrideMaterial;\n\t\t\tconst group = renderItem.group;\n\n\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\t_currentArrayCamera = camera;\n\n\t\t\t\tconst cameras = camera.cameras;\n\n\t\t\t\tfor ( let j = 0, jl = cameras.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst camera2 = cameras[ j ];\n\n\t\t\t\t\tif ( object.layers.test( camera2.layers ) ) {\n\n\t\t\t\t\t\tstate.viewport( _currentViewport.copy( camera2.viewport ) );\n\n\t\t\t\t\t\tcurrentRenderState.setupLights( camera2 );\n\n\t\t\t\t\t\trenderObject( object, scene, camera2, geometry, material, group );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_currentArrayCamera = null;\n\n\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\t\tcurrentRenderState = renderStates.get( scene, _currentArrayCamera || camera );\n\n\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\tif ( object.isImmediateRenderObject ) {\n\n\t\t\tconst program = setProgram( camera, scene, material, object );\n\n\t\t\tstate.setMaterial( material );\n\n\t\t\tbindingStates.reset();\n\n\t\t\trenderObjectImmediate( object, program );\n\n\t\t} else {\n\n\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t}\n\n\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\t\tcurrentRenderState = renderStates.get( scene, _currentArrayCamera || camera );\n\n\t}\n\n\tfunction initMaterial( material, scene, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tconst lights = currentRenderState.state.lights;\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tconst lightsStateVersion = lights.state.version;\n\n\t\tconst parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );\n\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n\t\tlet program = materialProperties.program;\n\t\tlet programChange = true;\n\n\t\tif ( program === undefined ) {\n\n\t\t\t// new material\n\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t} else if ( program.cacheKey !== programCacheKey ) {\n\n\t\t\t// changed glsl or parameters\n\t\t\treleaseMaterialProgramReference( material );\n\n\t\t} else if ( materialProperties.lightsStateVersion !== lightsStateVersion ) {\n\n\t\t\tprogramChange = false;\n\n\t\t} else if ( parameters.shaderID !== undefined ) {\n\n\t\t\t// same glsl and uniform list, envMap still needs the update here to avoid a frame-late effect\n\n\t\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\tmaterialProperties.envMap = cubemaps.get( material.envMap || environment );\n\n\t\t\treturn;\n\n\t\t} else {\n\n\t\t\t// only rebuild uniform list\n\t\t\tprogramChange = false;\n\n\t\t}\n\n\t\tif ( programChange ) {\n\n\t\t\tparameters.uniforms = programCache.getUniforms( material );\n\n\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\n\t\t\tmaterialProperties.program = program;\n\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\t\t\tmaterialProperties.outputEncoding = parameters.outputEncoding;\n\n\t\t}\n\n\t\tconst uniforms = materialProperties.uniforms;\n\n\t\tif ( ! material.isShaderMaterial &&\n\t\t\t! material.isRawShaderMaterial ||\n\t\t\tmaterial.clipping === true ) {\n\n\t\t\tmaterialProperties.numClippingPlanes = clipping.numPlanes;\n\t\t\tmaterialProperties.numIntersection = clipping.numIntersection;\n\t\t\tuniforms.clippingPlanes = clipping.uniform;\n\n\t\t}\n\n\t\tmaterialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tmaterialProperties.fog = scene.fog;\n\t\tmaterialProperties.envMap = cubemaps.get( material.envMap || materialProperties.environment );\n\n\t\t// store the light setup it was created for\n\n\t\tmaterialProperties.needsLights = materialNeedsLights( material );\n\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\tuniforms.lightProbe.value = lights.state.probe;\n\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\tuniforms.directionalLightShadows.value = lights.state.directionalShadow;\n\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\tuniforms.spotLightShadows.value = lights.state.spotShadow;\n\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\tuniforms.ltc_1.value = lights.state.rectAreaLTC1;\n\t\t\tuniforms.ltc_2.value = lights.state.rectAreaLTC2;\n\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\tuniforms.pointLightShadows.value = lights.state.pointShadow;\n\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\tuniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix;\n\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t}\n\n\t\tconst progUniforms = materialProperties.program.getUniforms();\n\t\tconst uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n\t\tmaterialProperties.uniformsList = uniformsList;\n\n\t}\n\n\tfunction setProgram( camera, scene, material, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\ttextures.resetTextureUnits();\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tconst encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : _currentRenderTarget.texture.encoding;\n\t\tconst envMap = cubemaps.get( material.envMap || environment );\n\n\t\tconst materialProperties = properties.get( material );\n\t\tconst lights = currentRenderState.state.lights;\n\n\t\tif ( _clippingEnabled === true ) {\n\n\t\t\tif ( _localClippingEnabled === true || camera !== _currentCamera ) {\n\n\t\t\t\tconst useCache =\n\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t// (#8465, #8379)\n\t\t\t\tclipping.setState( material, camera, useCache );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.version === materialProperties.__version ) {\n\n\t\t\tif ( material.fog && materialProperties.fog !== fog ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( materialProperties.environment !== environment ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t( materialProperties.numClippingPlanes !== clipping.numPlanes ||\n\t\t\t\tmaterialProperties.numIntersection !== clipping.numIntersection ) ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( materialProperties.outputEncoding !== encoding ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( materialProperties.envMap !== envMap ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tinitMaterial( material, scene, object );\n\t\t\tmaterialProperties.__version = material.version;\n\n\t\t}\n\n\t\tlet refreshProgram = false;\n\t\tlet refreshMaterial = false;\n\t\tlet refreshLights = false;\n\n\t\tconst program = materialProperties.program,\n\t\t\tp_uniforms = program.getUniforms(),\n\t\t\tm_uniforms = materialProperties.uniforms;\n\n\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\trefreshProgram = true;\n\t\t\trefreshMaterial = true;\n\t\t\trefreshLights = true;\n\n\t\t}\n\n\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t_currentMaterialId = material.id;\n\n\t\t\trefreshMaterial = true;\n\n\t\t}\n\n\t\tif ( refreshProgram || _currentCamera !== camera ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t}\n\n\t\t\tif ( _currentCamera !== camera ) {\n\n\t\t\t\t_currentCamera = camera;\n\n\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t}\n\n\t\t\t// load material specific uniforms\n\t\t\t// (shader material also gets them for the sake of genericity)\n\n\t\t\tif ( material.isShaderMaterial ||\n\t\t\t\tmaterial.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.envMap ) {\n\n\t\t\t\tconst uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl,\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ||\n\t\t\t\tmaterial.isShadowMaterial ||\n\t\t\t\tmaterial.skinning ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// skinning uniforms must be set even if material didn't change\n\t\t// auto-setting of texture unit for bone texture must go before other textures\n\t\t// otherwise textures used for skinning can take over texture units reserved for other material textures\n\n\t\tif ( material.skinning ) {\n\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\tconst skeleton = object.skeleton;\n\n\t\t\tif ( skeleton ) {\n\n\t\t\t\tconst bones = skeleton.bones;\n\n\t\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === null ) {\n\n\t\t\t\t\t\t// layout (1 matrix = 4 pixels)\n\t\t\t\t\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t\t\t\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\n\t\t\t\t\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\n\t\t\t\t\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\n\t\t\t\t\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\n\t\t\t\t\t\tlet size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\t\t\t\t\tsize = MathUtils.ceilPowerOfTwo( size );\n\t\t\t\t\t\tsize = Math.max( size, 4 );\n\n\t\t\t\t\t\tconst boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\t\t\t\t\tboneMatrices.set( skeleton.boneMatrices ); // copy current values\n\n\t\t\t\t\t\tconst boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\n\t\t\t\t\t\tskeleton.boneMatrices = boneMatrices;\n\t\t\t\t\t\tskeleton.boneTexture = boneTexture;\n\t\t\t\t\t\tskeleton.boneTextureSize = size;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tp_uniforms.setOptional( _gl, skeleton, 'boneMatrices' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {\n\n\t\t\tmaterialProperties.receiveShadow = object.receiveShadow;\n\t\t\tp_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );\n\n\t\t}\n\n\t\tif ( refreshMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\n\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t// values\n\t\t\t\t//\n\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t// the GL state when required\n\n\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t}\n\n\t\t\t// refresh uniforms common to several materials\n\n\t\t\tif ( fog && material.fog ) {\n\n\t\t\t\tmaterials.refreshFogUniforms( m_uniforms, fog );\n\n\t\t\t}\n\n\t\t\tmaterials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height );\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\n\t\t}\n\n\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\n\n\t\t}\n\n\t\t// common matrices\n\n\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\treturn program;\n\n\t}\n\n\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\tuniforms.ambientLightColor.needsUpdate = value;\n\t\tuniforms.lightProbe.needsUpdate = value;\n\n\t\tuniforms.directionalLights.needsUpdate = value;\n\t\tuniforms.directionalLightShadows.needsUpdate = value;\n\t\tuniforms.pointLights.needsUpdate = value;\n\t\tuniforms.pointLightShadows.needsUpdate = value;\n\t\tuniforms.spotLights.needsUpdate = value;\n\t\tuniforms.spotLightShadows.needsUpdate = value;\n\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t}\n\n\tfunction materialNeedsLights( material ) {\n\n\t\treturn material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||\n\t\t\tmaterial.isMeshStandardMaterial || material.isShadowMaterial ||\n\t\t\t( material.isShaderMaterial && material.lights === true );\n\n\t}\n\n\t//\n\tthis.setFramebuffer = function ( value ) {\n\n\t\tif ( _framebuffer !== value && _currentRenderTarget === null ) _gl.bindFramebuffer( 36160, value );\n\n\t\t_framebuffer = value;\n\n\t};\n\n\tthis.getActiveCubeFace = function () {\n\n\t\treturn _currentActiveCubeFace;\n\n\t};\n\n\tthis.getActiveMipmapLevel = function () {\n\n\t\treturn _currentActiveMipmapLevel;\n\n\t};\n\n\tthis.getRenderList = function () {\n\n\t\treturn currentRenderList;\n\n\t};\n\n\tthis.setRenderList = function ( renderList ) {\n\n\t\tcurrentRenderList = renderList;\n\n\t};\n\n\tthis.getRenderState = function () {\n\n\t\treturn currentRenderState;\n\n\t};\n\n\tthis.setRenderState = function ( renderState ) {\n\n\t\tcurrentRenderState = renderState;\n\n\t};\n\n\tthis.getRenderTarget = function () {\n\n\t\treturn _currentRenderTarget;\n\n\t};\n\n\tthis.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {\n\n\t\t_currentRenderTarget = renderTarget;\n\t\t_currentActiveCubeFace = activeCubeFace;\n\t\t_currentActiveMipmapLevel = activeMipmapLevel;\n\n\t\tif ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {\n\n\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t}\n\n\t\tlet framebuffer = _framebuffer;\n\t\tlet isCube = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tconst __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ];\n\t\t\t\tisCube = true;\n\n\t\t\t} else if ( renderTarget.isWebGLMultisampleRenderTarget ) {\n\n\t\t\t\tframebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;\n\n\t\t\t} else {\n\n\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t}\n\n\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t} else {\n\n\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t}\n\n\t\tif ( _currentFramebuffer !== framebuffer ) {\n\n\t\t\t_gl.bindFramebuffer( 36160, framebuffer );\n\t\t\t_currentFramebuffer = framebuffer;\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport );\n\t\tstate.scissor( _currentScissor );\n\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\tif ( isCube ) {\n\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t_gl.framebufferTexture2D( 36160, 36064, 34069 + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t}\n\n\t};\n\n\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t}\n\n\t\tif ( framebuffer ) {\n\n\t\t\tlet restore = false;\n\n\t\t\tif ( framebuffer !== _currentFramebuffer ) {\n\n\t\t\t\t_gl.bindFramebuffer( 36160, framebuffer );\n\n\t\t\t\trestore = true;\n\n\t\t\t}\n\n\t\t\ttry {\n\n\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( 35739 ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( 35738 ) && // IE11, Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t! ( textureType === HalfFloatType && ( capabilities.isWebGL2 ? extensions.get( 'EXT_color_buffer_float' ) : extensions.get( 'EXT_color_buffer_half_float' ) ) ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _gl.checkFramebufferStatus( 36160 ) === 36053 ) {\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' );\n\n\t\t\t\t}\n\n\t\t\t} finally {\n\n\t\t\t\tif ( restore ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( 36160, _currentFramebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.copyFramebufferToTexture = function ( position, texture, level = 0 ) {\n\n\t\tconst levelScale = Math.pow( 2, - level );\n\t\tconst width = Math.floor( texture.image.width * levelScale );\n\t\tconst height = Math.floor( texture.image.height * levelScale );\n\t\tconst glFormat = utils.convert( texture.format );\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t_gl.copyTexImage2D( 3553, level, glFormat, position.x, position.y, width, height, 0 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) {\n\n\t\tconst width = srcTexture.image.width;\n\t\tconst height = srcTexture.image.height;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n\n\t\ttextures.setTexture2D( dstTexture, 0 );\n\n\t\t// As another texture upload may have changed pixelStorei\n\t\t// parameters, make sure they are correct for the dstTexture\n\t\t_gl.pixelStorei( 37440, dstTexture.flipY );\n\t\t_gl.pixelStorei( 37441, dstTexture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, dstTexture.unpackAlignment );\n\n\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data );\n\n\t\t} else {\n\n\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t_gl.compressedTexSubImage2D( 3553, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, glFormat, glType, srcTexture.image );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( 3553 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.initTexture = function ( texture ) {\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t}\n\n}\n\nfunction WebGL1Renderer( parameters ) {\n\n\tWebGLRenderer.call( this, parameters );\n\n}\n\nWebGL1Renderer.prototype = Object.assign( Object.create( WebGLRenderer.prototype ), {\n\n\tconstructor: WebGL1Renderer,\n\n\tisWebGL1Renderer: true\n\n} );\n\nclass FogExp2 {\n\n\tconstructor( color, density ) {\n\n\t\tObject.defineProperty( this, 'isFogExp2', { value: true } );\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\t\tthis.density = ( density !== undefined ) ? density : 0.00025;\n\n\t}\n\n\tclone() {\n\n\t\treturn new FogExp2( this.color, this.density );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'FogExp2',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tdensity: this.density\n\t\t};\n\n\t}\n\n}\n\nclass Fog {\n\n\tconstructor( color, near, far ) {\n\n\t\tObject.defineProperty( this, 'isFog', { value: true } );\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\n\t\tthis.near = ( near !== undefined ) ? near : 1;\n\t\tthis.far = ( far !== undefined ) ? far : 1000;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Fog( this.color, this.near, this.far );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'Fog',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tnear: this.near,\n\t\t\tfar: this.far\n\t\t};\n\n\t}\n\n}\n\nclass Scene extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'isScene', { value: true } );\n\n\t\tthis.type = 'Scene';\n\n\t\tthis.background = null;\n\t\tthis.environment = null;\n\t\tthis.fog = null;\n\n\t\tthis.overrideMaterial = null;\n\n\t\tthis.autoUpdate = true; // checked by the renderer\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.environment !== null ) this.environment = source.environment.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.background !== null ) data.object.background = this.background.toJSON( meta );\n\t\tif ( this.environment !== null ) data.object.environment = this.environment.toJSON( meta );\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\nfunction InterleavedBuffer( array, stride ) {\n\n\tthis.array = array;\n\tthis.stride = stride;\n\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\tthis.usage = StaticDrawUsage;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n\tthis.uuid = MathUtils.generateUUID();\n\n}\n\nObject.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( InterleavedBuffer.prototype, {\n\n\tisInterleavedBuffer: true,\n\n\tonUploadCallback: function () {},\n\n\tsetUsage: function ( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t},\n\n\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( let i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tset: function ( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function ( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = MathUtils.generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t}\n\n\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\tconst ib = new InterleavedBuffer( array, this.stride );\n\t\tib.setUsage( this.usage );\n\n\t\treturn ib;\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\t// generate UUID for array buffer if necessary\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = MathUtils.generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.prototype.slice.call( new Uint32Array( this.array.buffer ) );\n\n\t\t}\n\n\t\t//\n\n\t\treturn {\n\t\t\tuuid: this.uuid,\n\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tstride: this.stride\n\t\t};\n\n\t}\n\n} );\n\nconst _vector$6 = new Vector3();\n\nfunction InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) {\n\n\tthis.name = '';\n\n\tthis.data = interleavedBuffer;\n\tthis.itemSize = itemSize;\n\tthis.offset = offset;\n\n\tthis.normalized = normalized === true;\n\n}\n\nObject.defineProperties( InterleavedBufferAttribute.prototype, {\n\n\tcount: {\n\n\t\tget: function () {\n\n\t\t\treturn this.data.count;\n\n\t\t}\n\n\t},\n\n\tarray: {\n\n\t\tget: function () {\n\n\t\t\treturn this.data.array;\n\n\t\t}\n\n\t},\n\n\tneedsUpdate: {\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.data.needsUpdate = value;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( InterleavedBufferAttribute.prototype, {\n\n\tisInterleavedBufferAttribute: true,\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.x = this.getX( i );\n\t\t\t_vector$6.y = this.getY( i );\n\t\t\t_vector$6.z = this.getZ( i );\n\n\t\t\t_vector$6.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( index, x ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( index, y ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( index, z ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetW: function ( index, w ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tgetX: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset ];\n\n\t},\n\n\tgetY: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t},\n\n\tgetZ: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t},\n\n\tgetW: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t},\n\n\tsetXY: function ( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZ: function ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function ( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t} else {\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t}\n\n\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// deinterleave data and save it as an ordinary buffer attribute for now\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t} else {\n\n\t\t\t// save as true interlaved attribtue\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\tdata: this.data.uuid,\n\t\t\t\toffset: this.offset,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * parameters = {\n * color: ,\n * map: new THREE.Texture( ),\n * alphaMap: new THREE.Texture( ),\n * rotation: ,\n * sizeAttenuation: \n * }\n */\n\nfunction SpriteMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'SpriteMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.rotation = 0;\n\n\tthis.sizeAttenuation = true;\n\n\tthis.transparent = true;\n\n\tthis.setValues( parameters );\n\n}\n\nSpriteMaterial.prototype = Object.create( Material.prototype );\nSpriteMaterial.prototype.constructor = SpriteMaterial;\nSpriteMaterial.prototype.isSpriteMaterial = true;\n\nSpriteMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.rotation = source.rotation;\n\n\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\treturn this;\n\n};\n\nlet _geometry;\n\nconst _intersectPoint = new Vector3();\nconst _worldScale = new Vector3();\nconst _mvPosition = new Vector3();\n\nconst _alignedPosition = new Vector2();\nconst _rotatedPosition = new Vector2();\nconst _viewWorldMatrix = new Matrix4();\n\nconst _vA$1 = new Vector3();\nconst _vB$1 = new Vector3();\nconst _vC$1 = new Vector3();\n\nconst _uvA$1 = new Vector2();\nconst _uvB$1 = new Vector2();\nconst _uvC$1 = new Vector2();\n\nfunction Sprite( material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Sprite';\n\n\tif ( _geometry === undefined ) {\n\n\t\t_geometry = new BufferGeometry();\n\n\t\tconst float32Array = new Float32Array( [\n\t\t\t- 0.5, - 0.5, 0, 0, 0,\n\t\t\t0.5, - 0.5, 0, 1, 0,\n\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t- 0.5, 0.5, 0, 0, 1\n\t\t] );\n\n\t\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\t\t_geometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\t_geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\t_geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t}\n\n\tthis.geometry = _geometry;\n\tthis.material = ( material !== undefined ) ? material : new SpriteMaterial();\n\n\tthis.center = new Vector2( 0.5, 0.5 );\n\n}\n\nSprite.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Sprite,\n\n\tisSprite: true,\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tif ( raycaster.camera === null ) {\n\n\t\t\tconsole.error( 'THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.' );\n\n\t\t}\n\n\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\n\t\t_viewWorldMatrix.copy( raycaster.camera.matrixWorld );\n\t\tthis.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld );\n\n\t\t_mvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\tif ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) {\n\n\t\t\t_worldScale.multiplyScalar( - _mvPosition.z );\n\n\t\t}\n\n\t\tconst rotation = this.material.rotation;\n\t\tlet sin, cos;\n\n\t\tif ( rotation !== 0 ) {\n\n\t\t\tcos = Math.cos( rotation );\n\t\t\tsin = Math.sin( rotation );\n\n\t\t}\n\n\t\tconst center = this.center;\n\n\t\ttransformVertex( _vA$1.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vB$1.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vC$1.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\n\t\t_uvA$1.set( 0, 0 );\n\t\t_uvB$1.set( 1, 0 );\n\t\t_uvC$1.set( 1, 1 );\n\n\t\t// check first triangle\n\t\tlet intersect = raycaster.ray.intersectTriangle( _vA$1, _vB$1, _vC$1, false, _intersectPoint );\n\n\t\tif ( intersect === null ) {\n\n\t\t\t// check second triangle\n\t\t\ttransformVertex( _vB$1.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\t_uvB$1.set( 0, 1 );\n\n\t\t\tintersect = raycaster.ray.intersectTriangle( _vA$1, _vC$1, _vB$1, false, _intersectPoint );\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( _intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tpoint: _intersectPoint.clone(),\n\t\t\tuv: Triangle.getUV( _intersectPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() ),\n\t\t\tface: null,\n\t\t\tobject: this\n\n\t\t} );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\tthis.material = source.material;\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t// compute position in camera space\n\t_alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t// to check if rotation is not zero\n\tif ( sin !== undefined ) {\n\n\t\t_rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y );\n\t\t_rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y );\n\n\t} else {\n\n\t\t_rotatedPosition.copy( _alignedPosition );\n\n\t}\n\n\n\tvertexPosition.copy( mvPosition );\n\tvertexPosition.x += _rotatedPosition.x;\n\tvertexPosition.y += _rotatedPosition.y;\n\n\t// transform to world space\n\tvertexPosition.applyMatrix4( _viewWorldMatrix );\n\n}\n\nconst _v1$4 = new Vector3();\nconst _v2$2 = new Vector3();\n\nfunction LOD() {\n\n\tObject3D.call( this );\n\n\tthis._currentLevel = 0;\n\n\tthis.type = 'LOD';\n\n\tObject.defineProperties( this, {\n\t\tlevels: {\n\t\t\tenumerable: true,\n\t\t\tvalue: []\n\t\t}\n\t} );\n\n\tthis.autoUpdate = true;\n\n}\n\nLOD.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: LOD,\n\n\tisLOD: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source, false );\n\n\t\tconst levels = source.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance );\n\n\t\t}\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\n\t\treturn this;\n\n\t},\n\n\taddLevel: function ( object, distance = 0 ) {\n\n\t\tdistance = Math.abs( distance );\n\n\t\tconst levels = this.levels;\n\n\t\tlet l;\n\n\t\tfor ( l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, object: object } );\n\n\t\tthis.add( object );\n\n\t\treturn this;\n\n\t},\n\n\tgetCurrentLevel: function () {\n\n\t\treturn this._currentLevel;\n\n\t},\n\n\tgetObjectForDistance: function ( distance ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance < levels[ i ].distance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn levels[ i - 1 ].object;\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\t_v1$4.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( _v1$4 );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t}\n\n\t},\n\n\tupdate: function ( camera ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 1 ) {\n\n\t\t\t_v1$4.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t_v2$2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = _v1$4.distanceTo( _v2$2 ) / camera.zoom;\n\n\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance >= levels[ i ].distance ) {\n\n\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._currentLevel = i - 1;\n\n\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tif ( this.autoUpdate === false ) data.object.autoUpdate = false;\n\n\t\tdata.object.levels = [];\n\n\t\tconst levels = this.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction SkinnedMesh( geometry, material ) {\n\n\tif ( geometry && geometry.isGeometry ) {\n\n\t\tconsole.error( 'THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t}\n\n\tMesh.call( this, geometry, material );\n\n\tthis.type = 'SkinnedMesh';\n\n\tthis.bindMode = 'attached';\n\tthis.bindMatrix = new Matrix4();\n\tthis.bindMatrixInverse = new Matrix4();\n\n}\n\nSkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\tconstructor: SkinnedMesh,\n\n\tisSkinnedMesh: true,\n\n\tcopy: function ( source ) {\n\n\t\tMesh.prototype.copy.call( this, source );\n\n\t\tthis.bindMode = source.bindMode;\n\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\tthis.skeleton = source.skeleton;\n\n\t\treturn this;\n\n\t},\n\n\tbind: function ( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.copy( bindMatrix ).invert();\n\n\t},\n\n\tpose: function () {\n\n\t\tthis.skeleton.pose();\n\n\t},\n\n\tnormalizeSkinWeights: function () {\n\n\t\tconst vector = new Vector4();\n\n\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\tvector.x = skinWeight.getX( i );\n\t\t\tvector.y = skinWeight.getY( i );\n\t\t\tvector.z = skinWeight.getZ( i );\n\t\t\tvector.w = skinWeight.getW( i );\n\n\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t}\n\n\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\n\n\t\t}\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tMesh.prototype.updateMatrixWorld.call( this, force );\n\n\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t},\n\n\tboneTransform: ( function () {\n\n\t\tconst basePosition = new Vector3();\n\n\t\tconst skinIndex = new Vector4();\n\t\tconst skinWeight = new Vector4();\n\n\t\tconst vector = new Vector3();\n\t\tconst matrix = new Matrix4();\n\n\t\treturn function ( index, target ) {\n\n\t\t\tconst skeleton = this.skeleton;\n\t\t\tconst geometry = this.geometry;\n\n\t\t\tskinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t\tskinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t\tbasePosition.fromBufferAttribute( geometry.attributes.position, index ).applyMatrix4( this.bindMatrix );\n\n\t\t\ttarget.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\t\tconst weight = skinWeight.getComponent( i );\n\n\t\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\t\tconst boneIndex = skinIndex.getComponent( i );\n\n\t\t\t\t\tmatrix.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\t\ttarget.addScaledVector( vector.copy( basePosition ).applyMatrix4( matrix ), weight );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn target.applyMatrix4( this.bindMatrixInverse );\n\n\t\t};\n\n\t}() )\n\n} );\n\nfunction Bone() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Bone';\n\n}\n\nBone.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Bone,\n\n\tisBone: true\n\n} );\n\nconst _offsetMatrix = new Matrix4();\nconst _identityMatrix = new Matrix4();\n\nfunction Skeleton( bones = [], boneInverses = [] ) {\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.bones = bones.slice( 0 );\n\tthis.boneInverses = boneInverses;\n\tthis.boneMatrices = null;\n\n\tthis.boneTexture = null;\n\tthis.boneTextureSize = 0;\n\n\tthis.frame = - 1;\n\n\tthis.init();\n\n}\n\nObject.assign( Skeleton.prototype, {\n\n\tinit: function () {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t// calculate inverse bone matrices if necessary\n\n\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\t// handle special case\n\n\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tcalculateInverses: function () {\n\n\t\tthis.boneInverses.length = 0;\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t},\n\n\tpose: function () {\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.copy( this.boneInverses[ i ] ).invert();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdate: function () {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\t\tconst boneMatrices = this.boneMatrices;\n\t\tconst boneTexture = this.boneTexture;\n\n\t\t// flatten bone matrices to array\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t// compute the offset between the current and the original transform\n\n\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix;\n\n\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( boneTexture !== null ) {\n\n\t\t\tboneTexture.needsUpdate = true;\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t},\n\n\tgetBoneByName: function ( name ) {\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t},\n\n\tdispose: function ( ) {\n\n\t\tif ( this.boneTexture !== null ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = null;\n\n\t\t}\n\n\t},\n\n\tfromJSON: function ( json, bones ) {\n\n\t\tthis.uuid = json.uuid;\n\n\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\tconst uuid = json.bones[ i ];\n\t\t\tlet bone = bones[ uuid ];\n\n\t\t\tif ( bone === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );\n\t\t\t\tbone = new Bone();\n\n\t\t\t}\n\n\t\t\tthis.bones.push( bone );\n\t\t\tthis.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t}\n\n\t\tthis.init();\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Skeleton',\n\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t},\n\t\t\tbones: [],\n\t\t\tboneInverses: []\n\t\t};\n\n\t\tdata.uuid = this.uuid;\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n} );\n\nconst _instanceLocalMatrix = new Matrix4();\nconst _instanceWorldMatrix = new Matrix4();\n\nconst _instanceIntersects = [];\n\nconst _mesh = new Mesh();\n\nfunction InstancedMesh( geometry, material, count ) {\n\n\tMesh.call( this, geometry, material );\n\n\tthis.instanceMatrix = new BufferAttribute( new Float32Array( count * 16 ), 16 );\n\tthis.instanceColor = null;\n\n\tthis.count = count;\n\n\tthis.frustumCulled = false;\n\n}\n\nInstancedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\tconstructor: InstancedMesh,\n\n\tisInstancedMesh: true,\n\n\tcopy: function ( source ) {\n\n\t\tMesh.prototype.copy.call( this, source );\n\n\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\t\tthis.count = source.count;\n\n\t\treturn this;\n\n\t},\n\n\tgetColorAt: function ( index, color ) {\n\n\t\tcolor.fromArray( this.instanceColor.array, index * 3 );\n\n\t},\n\n\tgetMatrixAt: function ( index, matrix ) {\n\n\t\tmatrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst raycastTimes = this.count;\n\n\t\t_mesh.geometry = this.geometry;\n\t\t_mesh.material = this.material;\n\n\t\tif ( _mesh.material === undefined ) return;\n\n\t\tfor ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {\n\n\t\t\t// calculate the world matrix for each instance\n\n\t\t\tthis.getMatrixAt( instanceId, _instanceLocalMatrix );\n\n\t\t\t_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );\n\n\t\t\t// the mesh represents this single instance\n\n\t\t\t_mesh.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t_mesh.raycast( raycaster, _instanceIntersects );\n\n\t\t\t// process the result of raycast\n\n\t\t\tfor ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {\n\n\t\t\t\tconst intersect = _instanceIntersects[ i ];\n\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_instanceIntersects.length = 0;\n\n\t\t}\n\n\t},\n\n\tsetColorAt: function ( index, color ) {\n\n\t\tif ( this.instanceColor === null ) {\n\n\t\t\tthis.instanceColor = new BufferAttribute( new Float32Array( this.count * 3 ), 3 );\n\n\t\t}\n\n\t\tcolor.toArray( this.instanceColor.array, index * 3 );\n\n\t},\n\n\tsetMatrixAt: function ( index, matrix ) {\n\n\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t}\n\n} );\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * linewidth: ,\n * linecap: \"round\",\n * linejoin: \"round\"\n * }\n */\n\nfunction LineBasicMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'LineBasicMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.linewidth = 1;\n\tthis.linecap = 'round';\n\tthis.linejoin = 'round';\n\n\tthis.morphTargets = false;\n\n\tthis.setValues( parameters );\n\n}\n\nLineBasicMaterial.prototype = Object.create( Material.prototype );\nLineBasicMaterial.prototype.constructor = LineBasicMaterial;\n\nLineBasicMaterial.prototype.isLineBasicMaterial = true;\n\nLineBasicMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.linewidth = source.linewidth;\n\tthis.linecap = source.linecap;\n\tthis.linejoin = source.linejoin;\n\n\tthis.morphTargets = source.morphTargets;\n\n\treturn this;\n\n};\n\nconst _start = new Vector3();\nconst _end = new Vector3();\nconst _inverseMatrix$1 = new Matrix4();\nconst _ray$1 = new Ray();\nconst _sphere$2 = new Sphere();\n\nfunction Line( geometry, material, mode ) {\n\n\tif ( mode === 1 ) {\n\n\t\tconsole.error( 'THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead.' );\n\n\t}\n\n\tObject3D.call( this );\n\n\tthis.type = 'Line';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new LineBasicMaterial();\n\n\tthis.updateMorphTargets();\n\n}\n\nLine.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Line,\n\n\tisLine: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t},\n\n\tcomputeLineDistances: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconst vertices = geometry.vertices;\n\t\t\tconst lineDistances = geometry.lineDistances;\n\n\t\t\tlineDistances[ 0 ] = 0;\n\n\t\t\tfor ( let i = 1, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i ] += vertices[ i - 1 ].distanceTo( vertices[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$2.copy( geometry.boundingSphere );\n\t\t_sphere$2.applyMatrix4( matrixWorld );\n\t\t_sphere$2.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$2 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$1.copy( matrixWorld ).invert();\n\t\t_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst vStart = new Vector3();\n\t\tconst vEnd = new Vector3();\n\t\tconst interSegment = new Vector3();\n\t\tconst interRay = new Vector3();\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst indices = index.array;\n\n\t\t\t\tfor ( let i = 0, l = indices.length - 1; i < l; i += step ) {\n\n\t\t\t\t\tconst a = indices[ i ];\n\t\t\t\t\tconst b = indices[ i + 1 ];\n\n\t\t\t\t\tvStart.fromBufferAttribute( positionAttribute, a );\n\t\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, b );\n\n\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count - 1; i < l; i += step ) {\n\n\t\t\t\t\tvStart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconst vertices = geometry.vertices;\n\t\t\tconst nbVertices = vertices.length;\n\n\t\t\tfor ( let i = 0; i < nbVertices - 1; i += step ) {\n\n\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );\n\n\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\tintersects.push( {\n\n\t\t\t\t\tdistance: distance,\n\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\tindex: i,\n\t\t\t\t\tface: null,\n\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\tobject: this\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nconst _start$1 = new Vector3();\nconst _end$1 = new Vector3();\n\nfunction LineSegments( geometry, material ) {\n\n\tLine.call( this, geometry, material );\n\n\tthis.type = 'LineSegments';\n\n}\n\nLineSegments.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\tconstructor: LineSegments,\n\n\tisLineSegments: true,\n\n\tcomputeLineDistances: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [];\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t_start$1.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t_end$1.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start$1.distanceTo( _end$1 );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconst vertices = geometry.vertices;\n\t\t\tconst lineDistances = geometry.lineDistances;\n\n\t\t\tfor ( let i = 0, l = vertices.length; i < l; i += 2 ) {\n\n\t\t\t\t_start$1.copy( vertices[ i ] );\n\t\t\t\t_end$1.copy( vertices[ i + 1 ] );\n\n\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start$1.distanceTo( _end$1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction LineLoop( geometry, material ) {\n\n\tLine.call( this, geometry, material );\n\n\tthis.type = 'LineLoop';\n\n}\n\nLineLoop.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\tconstructor: LineLoop,\n\n\tisLineLoop: true,\n\n} );\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n * alphaMap: new THREE.Texture( ),\n *\n * size: ,\n * sizeAttenuation: \n *\n * morphTargets: \n * }\n */\n\nfunction PointsMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'PointsMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.size = 1;\n\tthis.sizeAttenuation = true;\n\n\tthis.morphTargets = false;\n\n\tthis.setValues( parameters );\n\n}\n\nPointsMaterial.prototype = Object.create( Material.prototype );\nPointsMaterial.prototype.constructor = PointsMaterial;\n\nPointsMaterial.prototype.isPointsMaterial = true;\n\nPointsMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.size = source.size;\n\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\tthis.morphTargets = source.morphTargets;\n\n\treturn this;\n\n};\n\nconst _inverseMatrix$2 = new Matrix4();\nconst _ray$2 = new Ray();\nconst _sphere$3 = new Sphere();\nconst _position$1 = new Vector3();\n\nfunction Points( geometry, material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Points';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new PointsMaterial();\n\n\tthis.updateMorphTargets();\n\n}\n\nPoints.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Points,\n\n\tisPoints: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$3.copy( geometry.boundingSphere );\n\t\t_sphere$3.applyMatrix4( matrixWorld );\n\t\t_sphere$3.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$2.copy( matrixWorld ).invert();\n\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst indices = index.array;\n\n\t\t\t\tfor ( let i = 0, il = indices.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst a = indices[ i ];\n\n\t\t\t\t\t_position$1.fromBufferAttribute( positionAttribute, a );\n\n\t\t\t\t\ttestPoint( _position$1, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t_position$1.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\ttestPoint( _position$1, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst vertices = geometry.vertices;\n\n\t\t\tfor ( let i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\ttestPoint( vertices[ i ], i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray$2.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray$2.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nfunction VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\tTexture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.format = format !== undefined ? format : RGBFormat;\n\n\tthis.minFilter = minFilter !== undefined ? minFilter : LinearFilter;\n\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\n\tthis.generateMipmaps = false;\n\n\tconst scope = this;\n\n\tfunction updateVideo() {\n\n\t\tscope.needsUpdate = true;\n\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t}\n\n\tif ( 'requestVideoFrameCallback' in video ) {\n\n\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t}\n\n}\n\nVideoTexture.prototype = Object.assign( Object.create( Texture.prototype ), {\n\n\tconstructor: VideoTexture,\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.image ).copy( this );\n\n\t},\n\n\tisVideoTexture: true,\n\n\tupdate: function () {\n\n\t\tconst video = this.image;\n\t\tconst hasVideoFrameCallback = 'requestVideoFrameCallback' in video;\n\n\t\tif ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n} );\n\nfunction CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.image = { width: width, height: height };\n\tthis.mipmaps = mipmaps;\n\n\t// no flipping for cube textures\n\t// (also flipping doesn't work for compressed textures )\n\n\tthis.flipY = false;\n\n\t// can't generate mipmaps for compressed textures\n\t// mips must be embedded in DDS files\n\n\tthis.generateMipmaps = false;\n\n}\n\nCompressedTexture.prototype = Object.create( Texture.prototype );\nCompressedTexture.prototype.constructor = CompressedTexture;\n\nCompressedTexture.prototype.isCompressedTexture = true;\n\nfunction CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\tTexture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.needsUpdate = true;\n\n}\n\nCanvasTexture.prototype = Object.create( Texture.prototype );\nCanvasTexture.prototype.constructor = CanvasTexture;\nCanvasTexture.prototype.isCanvasTexture = true;\n\nfunction DepthTexture( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {\n\n\tformat = format !== undefined ? format : DepthFormat;\n\n\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t}\n\n\tif ( type === undefined && format === DepthFormat ) type = UnsignedShortType;\n\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.image = { width: width, height: height };\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\tthis.flipY = false;\n\tthis.generateMipmaps = false;\n\n}\n\nDepthTexture.prototype = Object.create( Texture.prototype );\nDepthTexture.prototype.constructor = DepthTexture;\nDepthTexture.prototype.isDepthTexture = true;\n\nlet _geometryId = 0; // Geometry uses even numbers as Id\nconst _m1$3 = new Matrix4();\nconst _obj$1 = new Object3D();\nconst _offset$1 = new Vector3();\n\nfunction Geometry() {\n\n\tObject.defineProperty( this, 'id', { value: _geometryId += 2 } );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Geometry';\n\n\tthis.vertices = [];\n\tthis.colors = [];\n\tthis.faces = [];\n\tthis.faceVertexUvs = [[]];\n\n\tthis.morphTargets = [];\n\tthis.morphNormals = [];\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\tthis.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.elementsNeedUpdate = false;\n\tthis.verticesNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.lineDistancesNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\n}\n\nGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Geometry,\n\n\tisGeometry: true,\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tvertex.applyMatrix4( matrix );\n\n\t\t}\n\n\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tfor ( let j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.verticesNeedUpdate = true;\n\t\tthis.normalsNeedUpdate = true;\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function ( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1$3.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\trotateY: function ( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1$3.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\trotateZ: function ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1$3.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1$3.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1$3.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\tlookAt: function ( vector ) {\n\n\t\t_obj$1.lookAt( vector );\n\n\t\t_obj$1.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj$1.matrix );\n\n\t\treturn this;\n\n\t},\n\n\tfromBufferGeometry: function ( geometry ) {\n\n\t\tconst scope = this;\n\n\t\tconst index = geometry.index !== null ? geometry.index : undefined;\n\t\tconst attributes = geometry.attributes;\n\n\t\tif ( attributes.position === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst position = attributes.position;\n\t\tconst normal = attributes.normal;\n\t\tconst color = attributes.color;\n\t\tconst uv = attributes.uv;\n\t\tconst uv2 = attributes.uv2;\n\n\t\tif ( uv2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\n\n\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\tscope.vertices.push( new Vector3().fromBufferAttribute( position, i ) );\n\n\t\t\tif ( color !== undefined ) {\n\n\t\t\t\tscope.colors.push( new Color().fromBufferAttribute( color, i ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\tconst vertexColors = ( color === undefined ) ? [] : [\n\t\t\t\tscope.colors[ a ].clone(),\n\t\t\t\tscope.colors[ b ].clone(),\n\t\t\t\tscope.colors[ c ].clone()\n\t\t\t];\n\n\t\t\tconst vertexNormals = ( normal === undefined ) ? [] : [\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, a ),\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, b ),\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, c )\n\t\t\t];\n\n\t\t\tconst face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\n\n\t\t\tscope.faces.push( face );\n\n\t\t\tif ( uv !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 0 ].push( [\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, a ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, b ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, c )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t\tif ( uv2 !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 1 ].push( [\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, a ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, b ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, c )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst groups = geometry.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tconst start = group.start;\n\t\t\t\tconst count = group.count;\n\n\t\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\t\tif ( index !== undefined ) {\n\n\t\t\t\t\t\taddFace( index.getX( j ), index.getX( j + 1 ), index.getX( j + 2 ), group.materialIndex );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\taddFace( j, j + 1, j + 2, group.materialIndex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < index.count; i += 3 ) {\n\n\t\t\t\t\taddFace( index.getX( i ), index.getX( i + 1 ), index.getX( i + 2 ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i += 3 ) {\n\n\t\t\t\t\taddFace( i, i + 1, i + 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeFaceNormals();\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcenter: function () {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset$1 ).negate();\n\n\t\tthis.translate( _offset$1.x, _offset$1.y, _offset$1.z );\n\n\t\treturn this;\n\n\t},\n\n\tnormalize: function () {\n\n\t\tthis.computeBoundingSphere();\n\n\t\tconst center = this.boundingSphere.center;\n\t\tconst radius = this.boundingSphere.radius;\n\n\t\tconst s = radius === 0 ? 1 : 1.0 / radius;\n\n\t\tconst matrix = new Matrix4();\n\t\tmatrix.set(\n\t\t\ts, 0, 0, - s * center.x,\n\t\t\t0, s, 0, - s * center.y,\n\t\t\t0, 0, s, - s * center.z,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\tthis.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcomputeFaceNormals: function () {\n\n\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\tconst vC = this.vertices[ face.c ];\n\n\t\t\tcb.subVectors( vC, vB );\n\t\t\tab.subVectors( vA, vB );\n\t\t\tcb.cross( ab );\n\n\t\t\tcb.normalize();\n\n\t\t\tface.normal.copy( cb );\n\n\t\t}\n\n\t},\n\n\tcomputeVertexNormals: function ( areaWeighted = true ) {\n\n\t\tconst vertices = new Array( this.vertices.length );\n\n\t\tfor ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ] = new Vector3();\n\n\t\t}\n\n\t\tif ( areaWeighted ) {\n\n\t\t\t// vertex normals weighted by triangle areas\n\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\n\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\t\tconst vC = this.vertices[ face.c ];\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tvertices[ face.a ].add( cb );\n\t\t\t\tvertices[ face.b ].add( cb );\n\t\t\t\tvertices[ face.c ].add( cb );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tvertices[ face.a ].add( face.normal );\n\t\t\t\tvertices[ face.b ].add( face.normal );\n\t\t\t\tvertices[ face.c ].add( face.normal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ].normalize();\n\n\t\t}\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( vertices[ face.a ] );\n\t\t\t\tvertexNormals[ 1 ].copy( vertices[ face.b ] );\n\t\t\t\tvertexNormals[ 2 ].copy( vertices[ face.c ] );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = vertices[ face.a ].clone();\n\t\t\t\tvertexNormals[ 1 ] = vertices[ face.b ].clone();\n\t\t\t\tvertexNormals[ 2 ] = vertices[ face.c ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeFlatVertexNormals: function () {\n\n\t\tthis.computeFaceNormals();\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 1 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 2 ].copy( face.normal );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 1 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 2 ] = face.normal.clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeMorphNormals: function () {\n\n\t\t// save original normals\n\t\t// - create temp variables on first access\n\t\t// otherwise just copy (for faster repeated calls)\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tif ( ! face.__originalFaceNormal ) {\n\n\t\t\t\tface.__originalFaceNormal = face.normal.clone();\n\n\t\t\t} else {\n\n\t\t\t\tface.__originalFaceNormal.copy( face.normal );\n\n\t\t\t}\n\n\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\n\n\t\t\tfor ( let i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// use temp geometry to compute face and vertex normals for each morph\n\n\t\tconst tmpGeo = new Geometry();\n\t\ttmpGeo.faces = this.faces;\n\n\t\tfor ( let i = 0, il = this.morphTargets.length; i < il; i ++ ) {\n\n\t\t\t// create on first access\n\n\t\t\tif ( ! this.morphNormals[ i ] ) {\n\n\t\t\t\tthis.morphNormals[ i ] = {};\n\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\n\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\n\n\t\t\t\tconst dstNormalsFace = this.morphNormals[ i ].faceNormals;\n\t\t\t\tconst dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\n\n\t\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tconst faceNormal = new Vector3();\n\t\t\t\t\tconst vertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() };\n\n\t\t\t\t\tdstNormalsFace.push( faceNormal );\n\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphNormals = this.morphNormals[ i ];\n\n\t\t\t// set vertices to morph target\n\n\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\n\n\t\t\t// compute morph normals\n\n\t\t\ttmpGeo.computeFaceNormals();\n\t\t\ttmpGeo.computeVertexNormals();\n\n\t\t\t// store morph normals\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst faceNormal = morphNormals.faceNormals[ f ];\n\t\t\t\tconst vertexNormals = morphNormals.vertexNormals[ f ];\n\n\t\t\t\tfaceNormal.copy( face.normal );\n\n\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\n\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\n\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restore original normals\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tface.normal = face.__originalFaceNormal;\n\t\t\tface.vertexNormals = face.__originalVertexNormals;\n\n\t\t}\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.setFromPoints( this.vertices );\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.setFromPoints( this.vertices );\n\n\t},\n\n\tmerge: function ( geometry, matrix, materialIndexOffset = 0 ) {\n\n\t\tif ( ! ( geometry && geometry.isGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet normalMatrix;\n\t\tconst vertexOffset = this.vertices.length,\n\t\t\tvertices1 = this.vertices,\n\t\t\tvertices2 = geometry.vertices,\n\t\t\tfaces1 = this.faces,\n\t\t\tfaces2 = geometry.faces,\n\t\t\tcolors1 = this.colors,\n\t\t\tcolors2 = geometry.colors;\n\n\t\tif ( matrix !== undefined ) {\n\n\t\t\tnormalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t}\n\n\t\t// vertices\n\n\t\tfor ( let i = 0, il = vertices2.length; i < il; i ++ ) {\n\n\t\t\tconst vertex = vertices2[ i ];\n\n\t\t\tconst vertexCopy = vertex.clone();\n\n\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\n\n\t\t\tvertices1.push( vertexCopy );\n\n\t\t}\n\n\t\t// colors\n\n\t\tfor ( let i = 0, il = colors2.length; i < il; i ++ ) {\n\n\t\t\tcolors1.push( colors2[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tfor ( let i = 0, il = faces2.length; i < il; i ++ ) {\n\n\t\t\tconst face = faces2[ i ];\n\t\t\tlet normal, color;\n\t\t\tconst faceVertexNormals = face.vertexNormals,\n\t\t\t\tfaceVertexColors = face.vertexColors;\n\n\t\t\tconst faceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\n\t\t\tfaceCopy.normal.copy( face.normal );\n\n\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tnormal = faceVertexNormals[ j ].clone();\n\n\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.vertexNormals.push( normal );\n\n\t\t\t}\n\n\t\t\tfaceCopy.color.copy( face.color );\n\n\t\t\tfor ( let j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\n\n\t\t\t\tcolor = faceVertexColors[ j ];\n\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\n\n\t\t\t}\n\n\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n\n\t\t\tfaces1.push( faceCopy );\n\n\t\t}\n\n\t\t// uvs\n\n\t\tfor ( let i = 0, il = geometry.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tconst faceVertexUvs2 = geometry.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) this.faceVertexUvs[ i ] = [];\n\n\t\t\tfor ( let j = 0, jl = faceVertexUvs2.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uvs2 = faceVertexUvs2[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( let k = 0, kl = uvs2.length; k < kl; k ++ ) {\n\n\t\t\t\t\tuvsCopy.push( uvs2[ k ].clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tmergeMesh: function ( mesh ) {\n\n\t\tif ( ! ( mesh && mesh.isMesh ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( mesh.matrixAutoUpdate ) mesh.updateMatrix();\n\n\t\tthis.merge( mesh.geometry, mesh.matrix );\n\n\t},\n\n\t/*\n\t * Checks for duplicate vertices with hashmap.\n\t * Duplicated vertices are removed\n\t * and faces' vertices are updated.\n\t */\n\n\tmergeVertices: function ( precisionPoints = 4 ) {\n\n\t\tconst verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\t\tconst unique = [], changes = [];\n\n\t\tconst precision = Math.pow( 10, precisionPoints );\n\n\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tconst v = this.vertices[ i ];\n\t\t\tconst key = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\n\n\t\t\tif ( verticesMap[ key ] === undefined ) {\n\n\t\t\t\tverticesMap[ key ] = i;\n\t\t\t\tunique.push( this.vertices[ i ] );\n\t\t\t\tchanges[ i ] = unique.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\n\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// if faces are completely degenerate after merging vertices, we\n\t\t// have to remove them from the geometry.\n\t\tconst faceIndicesToRemove = [];\n\n\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tface.a = changes[ face.a ];\n\t\t\tface.b = changes[ face.b ];\n\t\t\tface.c = changes[ face.c ];\n\n\t\t\tconst indices = [ face.a, face.b, face.c ];\n\n\t\t\t// if any duplicate vertices are found in a Face3\n\t\t\t// we have to remove the face as nothing can be saved\n\t\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\t\tif ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) {\n\n\t\t\t\t\tfaceIndicesToRemove.push( i );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\n\n\t\t\tconst idx = faceIndicesToRemove[ i ];\n\n\t\t\tthis.faces.splice( idx, 1 );\n\n\t\t\tfor ( let j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Use unique set of vertices\n\n\t\tconst diff = this.vertices.length - unique.length;\n\t\tthis.vertices = unique;\n\t\treturn diff;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.vertices = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tthis.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsortFacesByMaterialIndex: function () {\n\n\t\tconst faces = this.faces;\n\t\tconst length = faces.length;\n\n\t\t// tag faces\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tfaces[ i ]._id = i;\n\n\t\t}\n\n\t\t// sort faces\n\n\t\tfunction materialIndexSort( a, b ) {\n\n\t\t\treturn a.materialIndex - b.materialIndex;\n\n\t\t}\n\n\t\tfaces.sort( materialIndexSort );\n\n\t\t// sort uvs\n\n\t\tconst uvs1 = this.faceVertexUvs[ 0 ];\n\t\tconst uvs2 = this.faceVertexUvs[ 1 ];\n\n\t\tlet newUvs1, newUvs2;\n\n\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\n\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst id = faces[ i ]._id;\n\n\t\t\tif ( newUvs1 ) newUvs1.push( uvs1[ id ] );\n\t\t\tif ( newUvs2 ) newUvs2.push( uvs2[ id ] );\n\n\t\t}\n\n\t\tif ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1;\n\t\tif ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Geometry',\n\t\t\t\tgenerator: 'Geometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Geometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tconst vertices = [];\n\n\t\tfor ( let i = 0; i < this.vertices.length; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tconst faces = [];\n\t\tconst normals = [];\n\t\tconst normalsHash = {};\n\t\tconst colors = [];\n\t\tconst colorsHash = {};\n\t\tconst uvs = [];\n\t\tconst uvsHash = {};\n\n\t\tfor ( let i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tconst hasMaterial = true;\n\t\t\tconst hasFaceUv = false; // deprecated\n\t\t\tconst hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\n\t\t\tconst hasFaceNormal = face.normal.length() > 0;\n\t\t\tconst hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\tconst hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\tconst hasFaceVertexColor = face.vertexColors.length > 0;\n\n\t\t\tlet faceType = 0;\n\n\t\t\tfaceType = setBit( faceType, 0, 0 ); // isQuad\n\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\n\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\n\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\n\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\n\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\n\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\n\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\n\n\t\t\tfaces.push( faceType );\n\t\t\tfaces.push( face.a, face.b, face.c );\n\t\t\tfaces.push( face.materialIndex );\n\n\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\tconst faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\tfaces.push( getColorIndex( face.color ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\tconst vertexColors = face.vertexColors;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setBit( value, position, enabled ) {\n\n\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) );\n\n\t\t}\n\n\t\tfunction getNormalIndex( normal ) {\n\n\t\t\tconst hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n\n\t\t\tif ( normalsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tnormalsHash[ hash ] = normals.length / 3;\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\treturn normalsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getColorIndex( color ) {\n\n\t\t\tconst hash = color.r.toString() + color.g.toString() + color.b.toString();\n\n\t\t\tif ( colorsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tcolorsHash[ hash ] = colors.length;\n\t\t\tcolors.push( color.getHex() );\n\n\t\t\treturn colorsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getUvIndex( uv ) {\n\n\t\t\tconst hash = uv.x.toString() + uv.y.toString();\n\n\t\t\tif ( uvsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tuvsHash[ hash ] = uvs.length / 2;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\treturn uvsHash[ hash ];\n\n\t\t}\n\n\t\tdata.data = {};\n\n\t\tdata.data.vertices = vertices;\n\t\tdata.data.normals = normals;\n\t\tif ( colors.length > 0 ) data.data.colors = colors;\n\t\tif ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility\n\t\tdata.data.faces = faces;\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t const parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t const values = [];\n\n\t\t for ( const key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t const geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new Geometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\t// reset\n\n\t\tthis.vertices = [];\n\t\tthis.colors = [];\n\t\tthis.faces = [];\n\t\tthis.faceVertexUvs = [[]];\n\t\tthis.morphTargets = [];\n\t\tthis.morphNormals = [];\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\t\tthis.lineDistances = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// vertices\n\n\t\tconst vertices = source.vertices;\n\n\t\tfor ( let i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\tthis.vertices.push( vertices[ i ].clone() );\n\n\t\t}\n\n\t\t// colors\n\n\t\tconst colors = source.colors;\n\n\t\tfor ( let i = 0, il = colors.length; i < il; i ++ ) {\n\n\t\t\tthis.colors.push( colors[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tconst faces = source.faces;\n\n\t\tfor ( let i = 0, il = faces.length; i < il; i ++ ) {\n\n\t\t\tthis.faces.push( faces[ i ].clone() );\n\n\t\t}\n\n\t\t// face vertex uvs\n\n\t\tfor ( let i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tconst faceVertexUvs = source.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) {\n\n\t\t\t\tthis.faceVertexUvs[ i ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uvs = faceVertexUvs[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( let k = 0, kl = uvs.length; k < kl; k ++ ) {\n\n\t\t\t\t\tconst uv = uvs[ k ];\n\n\t\t\t\t\tuvsCopy.push( uv.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphTargets = source.morphTargets;\n\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = {};\n\t\t\tmorphTarget.name = morphTargets[ i ].name;\n\n\t\t\t// vertices\n\n\t\t\tif ( morphTargets[ i ].vertices !== undefined ) {\n\n\t\t\t\tmorphTarget.vertices = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// normals\n\n\t\t\tif ( morphTargets[ i ].normals !== undefined ) {\n\n\t\t\t\tmorphTarget.normals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.push( morphTarget );\n\n\t\t}\n\n\t\t// morph normals\n\n\t\tconst morphNormals = source.morphNormals;\n\n\t\tfor ( let i = 0, il = morphNormals.length; i < il; i ++ ) {\n\n\t\t\tconst morphNormal = {};\n\n\t\t\t// vertex normals\n\n\t\t\tif ( morphNormals[ i ].vertexNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.vertexNormals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst srcVertexNormal = morphNormals[ i ].vertexNormals[ j ];\n\t\t\t\t\tconst destVertexNormal = {};\n\n\t\t\t\t\tdestVertexNormal.a = srcVertexNormal.a.clone();\n\t\t\t\t\tdestVertexNormal.b = srcVertexNormal.b.clone();\n\t\t\t\t\tdestVertexNormal.c = srcVertexNormal.c.clone();\n\n\t\t\t\t\tmorphNormal.vertexNormals.push( destVertexNormal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// face normals\n\n\t\t\tif ( morphNormals[ i ].faceNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.faceNormals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphNormals.push( morphNormal );\n\n\t\t}\n\n\t\t// skin weights\n\n\t\tconst skinWeights = source.skinWeights;\n\n\t\tfor ( let i = 0, il = skinWeights.length; i < il; i ++ ) {\n\n\t\t\tthis.skinWeights.push( skinWeights[ i ].clone() );\n\n\t\t}\n\n\t\t// skin indices\n\n\t\tconst skinIndices = source.skinIndices;\n\n\t\tfor ( let i = 0, il = skinIndices.length; i < il; i ++ ) {\n\n\t\t\tthis.skinIndices.push( skinIndices[ i ].clone() );\n\n\t\t}\n\n\t\t// line distances\n\n\t\tconst lineDistances = source.lineDistances;\n\n\t\tfor ( let i = 0, il = lineDistances.length; i < il; i ++ ) {\n\n\t\t\tthis.lineDistances.push( lineDistances[ i ] );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// update flags\n\n\t\tthis.elementsNeedUpdate = source.elementsNeedUpdate;\n\t\tthis.verticesNeedUpdate = source.verticesNeedUpdate;\n\t\tthis.uvsNeedUpdate = source.uvsNeedUpdate;\n\t\tthis.normalsNeedUpdate = source.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = source.colorsNeedUpdate;\n\t\tthis.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n\t\tthis.groupsNeedUpdate = source.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\nclass BoxGeometry extends Geometry {\n\n\tconstructor( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tthis.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass CircleBufferGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, segments = 8, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CircleBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tsegments = Math.max( 3, segments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// center point\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tnormals.push( 0, 0, 1 );\n\t\tuvs.push( 0.5, 0.5 );\n\n\t\tfor ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\tconst segment = thetaStart + s / segments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uvs\n\n\t\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tindices.push( i, i + 1, 0 );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nclass CircleGeometry extends Geometry {\n\n\tconstructor( radius, segments, thetaStart, thetaLength ) {\n\n\t\tsuper();\n\t\tthis.type = 'CircleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass CylinderBufferGeometry extends BufferGeometry {\n\n\tconstructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\t\tthis.type = 'CylinderBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tconst scope = this;\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet index = 0;\n\t\tconst indexArray = [];\n\t\tconst halfHeight = height / 2;\n\t\tlet groupStart = 0;\n\n\t\t// generate geometry\n\n\t\tgenerateTorso();\n\n\t\tif ( openEnded === false ) {\n\n\t\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction generateTorso() {\n\n\t\t\tconst normal = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\t// this will be used to calculate the normal\n\t\t\tconst slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\tconst indexRow = [];\n\n\t\t\t\tconst v = y / heightSegments;\n\n\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\tconst radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tconst u = x / radialSegments;\n\n\t\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\t\tconst cosTheta = Math.cos( theta );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t\t}\n\n\t\t\t\t// now save vertices of the row in our index array\n\n\t\t\t\tindexArray.push( indexRow );\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\t\tconst a = indexArray[ y ][ x ];\n\t\t\t\t\tconst b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\tconst c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\tconst d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// update group counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t\tfunction generateCap( top ) {\n\n\t\t\t// save the index of the first center vertex\n\t\t\tconst centerIndexStart = index;\n\n\t\t\tconst uv = new Vector2();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\tconst sign = ( top === true ) ? 1 : - 1;\n\n\t\t\t// first we generate the center vertex data of the cap.\n\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\tfor ( let x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// save the index of the last center vertex\n\t\t\tconst centerIndexEnd = index;\n\n\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tconst u = x / radialSegments;\n\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\tconst cosTheta = Math.cos( theta );\n\t\t\t\tconst sinTheta = Math.sin( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = halfHeight * sign;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tconst c = centerIndexStart + x;\n\t\t\t\tconst i = centerIndexEnd + x;\n\n\t\t\t\tif ( top === true ) {\n\n\t\t\t\t\t// face top\n\n\t\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// face bottom\n\n\t\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t\t}\n\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t}\n\n}\n\nclass CylinderGeometry extends Geometry {\n\n\tconstructor( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\tsuper();\n\t\tthis.type = 'CylinderGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass ConeGeometry extends CylinderGeometry {\n\n\tconstructor( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\t\tthis.type = 'ConeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n}\n\nclass ConeBufferGeometry extends CylinderBufferGeometry {\n\n\tconstructor( radius = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n}\n\nclass PolyhedronBufferGeometry extends BufferGeometry {\n\n\tconstructor( vertices, indices, radius = 1, detail = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\t// default buffer data\n\n\t\tconst vertexBuffer = [];\n\t\tconst uvBuffer = [];\n\n\t\t// the subdivision creates the vertex buffer data\n\n\t\tsubdivide( detail );\n\n\t\t// all vertices should lie on a conceptual sphere with a given radius\n\n\t\tapplyRadius( radius );\n\n\t\t// finally, create the uv data\n\n\t\tgenerateUVs();\n\n\t\t// build non-indexed geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\t\tif ( detail === 0 ) {\n\n\t\t\tthis.computeVertexNormals(); // flat normals\n\n\t\t} else {\n\n\t\t\tthis.normalizeNormals(); // smooth normals\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction subdivide( detail ) {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\t// iterate over all faces and apply a subdivison with the given detail value\n\n\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t// get the vertices of the face\n\n\t\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t\t// perform subdivision\n\n\t\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\t\tconst cols = detail + 1;\n\n\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\tconst v = [];\n\n\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\tfor ( let i = 0; i <= cols; i ++ ) {\n\n\t\t\t\tv[ i ] = [];\n\n\t\t\t\tconst aj = a.clone().lerp( c, i / cols );\n\t\t\t\tconst bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\tconst rows = cols - i;\n\n\t\t\t\tfor ( let j = 0; j <= rows; j ++ ) {\n\n\t\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// construct all of the faces\n\n\t\t\tfor ( let i = 0; i < cols; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\tconst k = Math.floor( j / 2 );\n\n\t\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction applyRadius( radius ) {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tconst u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\tconst v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t\t}\n\n\t\t\tcorrectUVs();\n\n\t\t\tcorrectSeam();\n\n\t\t}\n\n\t\tfunction correctSeam() {\n\n\t\t\t// handle case when face straddles the seam, see #3269\n\n\t\t\tfor ( let i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t// uv data of a single face\n\n\t\t\t\tconst x0 = uvBuffer[ i + 0 ];\n\t\t\t\tconst x1 = uvBuffer[ i + 2 ];\n\t\t\t\tconst x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\tconst max = Math.max( x0, x1, x2 );\n\t\t\t\tconst min = Math.min( x0, x1, x2 );\n\n\t\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushVertex( vertex ) {\n\n\t\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tfunction getVertexByIndex( index, vertex ) {\n\n\t\t\tconst stride = index * 3;\n\n\t\t\tvertex.x = vertices[ stride + 0 ];\n\t\t\tvertex.y = vertices[ stride + 1 ];\n\t\t\tvertex.z = vertices[ stride + 2 ];\n\n\t\t}\n\n\t\tfunction correctUVs() {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\tconst centroid = new Vector3();\n\n\t\t\tconst uvA = new Vector2();\n\t\t\tconst uvB = new Vector2();\n\t\t\tconst uvC = new Vector2();\n\n\t\t\tfor ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\t\tconst azi = azimuth( centroid );\n\n\t\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t\t}\n\n\t\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\t\tfunction azimuth( vector ) {\n\n\t\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t\t}\n\n\n\t\t// Angle above the XZ plane.\n\n\t\tfunction inclination( vector ) {\n\n\t\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t\t}\n\n\t}\n\n}\n\nclass DodecahedronBufferGeometry extends PolyhedronBufferGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\tconst r = 1 / t;\n\n\t\tconst vertices = [\n\n\t\t\t// (±1, ±1, ±1)\n\t\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t\t// (0, ±1/φ, ±φ)\n\t\t\t0, - r, - t, 0, - r, t,\n\t\t\t0, r, - t, 0, r, t,\n\n\t\t\t// (±1/φ, ±φ, 0)\n\t\t\t- r, - t, 0, - r, t, 0,\n\t\t\tr, - t, 0, r, t, 0,\n\n\t\t\t// (±φ, 0, ±1/φ)\n\t\t\t- t, 0, - r, t, 0, - r,\n\t\t\t- t, 0, r, t, 0, r\n\t\t];\n\n\t\tconst indices = [\n\t\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'DodecahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\nclass DodecahedronGeometry extends Geometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tsuper();\n\t\tthis.type = 'DodecahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new DodecahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nconst _v0$2 = new Vector3();\nconst _v1$5 = new Vector3();\nconst _normal$1 = new Vector3();\nconst _triangle = new Triangle();\n\nclass EdgesGeometry extends BufferGeometry {\n\n\tconstructor( geometry, thresholdAngle ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EdgesGeometry';\n\n\t\tthis.parameters = {\n\t\t\tthresholdAngle: thresholdAngle\n\t\t};\n\n\t\tthresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1;\n\n\t\tif ( geometry.isGeometry ) {\n\n\t\t\tgeometry = new BufferGeometry().fromGeometry( geometry );\n\n\t\t}\n\n\t\tconst precisionPoints = 4;\n\t\tconst precision = Math.pow( 10, precisionPoints );\n\t\tconst thresholdDot = Math.cos( MathUtils.DEG2RAD * thresholdAngle );\n\n\t\tconst indexAttr = geometry.getIndex();\n\t\tconst positionAttr = geometry.getAttribute( 'position' );\n\t\tconst indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\n\t\tconst indexArr = [ 0, 0, 0 ];\n\t\tconst vertKeys = [ 'a', 'b', 'c' ];\n\t\tconst hashes = new Array( 3 );\n\n\t\tconst edgeData = {};\n\t\tconst vertices = [];\n\t\tfor ( let i = 0; i < indexCount; i += 3 ) {\n\n\t\t\tif ( indexAttr ) {\n\n\t\t\t\tindexArr[ 0 ] = indexAttr.getX( i );\n\t\t\t\tindexArr[ 1 ] = indexAttr.getX( i + 1 );\n\t\t\t\tindexArr[ 2 ] = indexAttr.getX( i + 2 );\n\n\t\t\t} else {\n\n\t\t\t\tindexArr[ 0 ] = i;\n\t\t\t\tindexArr[ 1 ] = i + 1;\n\t\t\t\tindexArr[ 2 ] = i + 2;\n\n\t\t\t}\n\n\t\t\tconst { a, b, c } = _triangle;\n\t\t\ta.fromBufferAttribute( positionAttr, indexArr[ 0 ] );\n\t\t\tb.fromBufferAttribute( positionAttr, indexArr[ 1 ] );\n\t\t\tc.fromBufferAttribute( positionAttr, indexArr[ 2 ] );\n\t\t\t_triangle.getNormal( _normal$1 );\n\n\t\t\t// create hashes for the edge from the vertices\n\t\t\thashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;\n\t\t\thashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;\n\t\t\thashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;\n\n\t\t\t// skip degenerate triangles\n\t\t\tif ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// iterate over every edge\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t// get the first and next vertex making up the edge\n\t\t\t\tconst jNext = ( j + 1 ) % 3;\n\t\t\t\tconst vecHash0 = hashes[ j ];\n\t\t\t\tconst vecHash1 = hashes[ jNext ];\n\t\t\t\tconst v0 = _triangle[ vertKeys[ j ] ];\n\t\t\t\tconst v1 = _triangle[ vertKeys[ jNext ] ];\n\n\t\t\t\tconst hash = `${ vecHash0 }_${ vecHash1 }`;\n\t\t\t\tconst reverseHash = `${ vecHash1 }_${ vecHash0 }`;\n\n\t\t\t\tif ( reverseHash in edgeData && edgeData[ reverseHash ] ) {\n\n\t\t\t\t\t// if we found a sibling edge add it into the vertex array if\n\t\t\t\t\t// it meets the angle threshold and delete the edge from the map.\n\t\t\t\t\tif ( _normal$1.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {\n\n\t\t\t\t\t\tvertices.push( v0.x, v0.y, v0.z );\n\t\t\t\t\t\tvertices.push( v1.x, v1.y, v1.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tedgeData[ reverseHash ] = null;\n\n\t\t\t\t} else if ( ! ( hash in edgeData ) ) {\n\n\t\t\t\t\t// if we've already got an edge here then skip adding a new one\n\t\t\t\t\tedgeData[ hash ] = {\n\n\t\t\t\t\t\tindex0: indexArr[ j ],\n\t\t\t\t\t\tindex1: indexArr[ jNext ],\n\t\t\t\t\t\tnormal: _normal$1.clone(),\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// iterate over all remaining, unmatched edges and add them to the vertex array\n\t\tfor ( const key in edgeData ) {\n\n\t\t\tif ( edgeData[ key ] ) {\n\n\t\t\t\tconst { index0, index1 } = edgeData[ key ];\n\t\t\t\t_v0$2.fromBufferAttribute( positionAttr, index0 );\n\t\t\t\t_v1$5.fromBufferAttribute( positionAttr, index1 );\n\n\t\t\t\tvertices.push( _v0$2.x, _v0$2.y, _v0$2.z );\n\t\t\t\tvertices.push( _v1$5.x, _v1$5.y, _v1$5.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n}\n\n/**\n * Port from https://github.com/mapbox/earcut (v2.2.2)\n */\n\nconst Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim ) {\n\n\t\tdim = dim || 2;\n\n\t\tconst hasHoles = holeIndices && holeIndices.length;\n\t\tconst outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length;\n\t\tlet outerNode = linkedList( data, 0, outerLen, dim, true );\n\t\tconst triangles = [];\n\n\t\tif ( ! outerNode || outerNode.next === outerNode.prev ) return triangles;\n\n\t\tlet minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( let i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 1 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tlet i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tlet p = start,\n\t\tagain;\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tlet stop = ear,\n\t\tprev, next;\n\n\t// iterate through ears, slicing them one by one\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim );\n\t\t\ttriangles.push( ear.i / dim );\n\t\t\ttriangles.push( next.i / dim );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertex leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( filterPoints( ear ), triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar( ear ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tlet p = ear.next.next;\n\n\twhile ( p !== ear.prev ) {\n\n\t\tif ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ),\n\t\tminTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ),\n\t\tmaxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ),\n\t\tmaxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y );\n\n\t// z-order range for the current triangle bbox;\n\tconst minZ = zOrder( minTX, minTY, minX, minY, invSize ),\n\t\tmaxZ = zOrder( maxTX, maxTY, minX, minY, invSize );\n\n\tlet p = ear.prevZ,\n\t\tn = ear.nextZ;\n\n\t// look for points inside the triangle in both directions\n\twhile ( p && p.z >= minZ && n && n.z <= maxZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\t// look for remaining points in decreasing z-order\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t}\n\n\t// look for remaining points in increasing z-order\n\twhile ( n && n.z <= maxZ ) {\n\n\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tconst a = p.prev,\n\t\t\tb = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim );\n\t\t\ttriangles.push( p.i / dim );\n\t\t\ttriangles.push( b.i / dim );\n\n\t\t\t// remove two nodes involved\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn filterPoints( p );\n\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\tlet a = start;\n\tdo {\n\n\t\tlet b = a.next.next;\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\t\t\t\tlet c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tconst queue = [];\n\tlet i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\teliminateHole( queue[ i ], outerNode );\n\t\touterNode = filterPoints( outerNode, outerNode.next );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole( hole, outerNode ) {\n\n\touterNode = findHoleBridge( hole, outerNode );\n\tif ( outerNode ) {\n\n\t\tconst b = splitPolygon( outerNode, hole );\n\n\t\t// filter collinear points around the cuts\n\t\tfilterPoints( outerNode, outerNode.next );\n\t\tfilterPoints( b, b.next );\n\n\t}\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge( hole, outerNode ) {\n\n\tlet p = outerNode;\n\tconst hx = hole.x;\n\tconst hy = hole.y;\n\tlet qx = - Infinity, m;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tconst x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\t\t\t\tif ( x === hx ) {\n\n\t\t\t\t\tif ( hy === p.y ) return p;\n\t\t\t\t\tif ( hy === p.next.y ) return p.next;\n\n\t\t\t\t}\n\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\tif ( hx === qx ) return m; // hole touches outer segment; pick leftmost endpoint\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tconst stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y;\n\tlet tanMin = Infinity, tan;\n\n\tp = m;\n\n\tdo {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== stop );\n\n\treturn m;\n\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector( m, p ) {\n\n\treturn area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0;\n\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tif ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked( list ) {\n\n\tlet i, p, q, e, tail, numMerges, pSize, qSize,\n\t\tinSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\tx = 32767 * ( x - minX ) * invSize;\n\ty = 32767 * ( y - minY ) * invSize;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost( start ) {\n\n\tlet p = start,\n\t\tleftmost = start;\n\tdo {\n\n\t\tif ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 &&\n\t\t\t( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 &&\n\t\t\t( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0;\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges\n\t\t( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible\n\t\t( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors\n\t\tequals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case\n\n}\n\n// signed area of a triangle\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tconst o1 = sign( area( p1, q1, p2 ) );\n\tconst o2 = sign( area( p1, q1, q2 ) );\n\tconst o3 = sign( area( p2, q2, p1 ) );\n\tconst o4 = sign( area( p2, q2, q1 ) );\n\n\tif ( o1 !== o2 && o3 !== o4 ) return true; // general case\n\n\tif ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n\tif ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n\tif ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n\tif ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n\treturn false;\n\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment( p, q, r ) {\n\n\treturn q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y );\n\n}\n\nfunction sign( num ) {\n\n\treturn num > 0 ? 1 : num < 0 ? - 1 : 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon( a, b ) {\n\n\tlet p = a;\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\t\tintersects( p, p.next, a, b ) ) return true;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside( a, b ) {\n\n\tlet p = a,\n\t\tinside = false;\n\tconst px = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) )\n\t\t\tinside = ! inside;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon( a, b ) {\n\n\tconst a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode( i, x, y, last ) {\n\n\tconst p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertex index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertex nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = null;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tlet sum = 0;\n\tfor ( let i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\nconst ShapeUtils = {\n\n\t// calculate area of the contour polygon\n\n\tarea: function ( contour ) {\n\n\t\tconst n = contour.length;\n\t\tlet a = 0.0;\n\n\t\tfor ( let p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t},\n\n\tisClockWise: function ( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t},\n\n\ttriangulateShape: function ( contour, holes ) {\n\n\t\tconst vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tconst holeIndices = []; // array of hole indices\n\t\tconst faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tlet holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( let i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tconst triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( let i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n};\n\nfunction removeDupEndPts( points ) {\n\n\tconst l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( let i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline (including bevelOffset) is bevel\n * bevelOffset: , // how far from shape outline does bevel start\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // object that provides UV generator functions\n *\n * }\n */\n\nclass ExtrudeBufferGeometry extends BufferGeometry {\n\n\tconstructor( shapes, options ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\tconst scope = this;\n\n\t\tconst verticesArray = [];\n\t\tconst uvArray = [];\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\t\t\taddShape( shape );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\t\tthis.computeVertexNormals();\n\n\t\t// functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst placeholder = [];\n\n\t\t\t// options\n\n\t\t\tconst curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\tconst steps = options.steps !== undefined ? options.steps : 1;\n\t\t\tlet depth = options.depth !== undefined ? options.depth : 100;\n\n\t\t\tlet bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\tlet bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6;\n\t\t\tlet bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2;\n\t\t\tlet bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\t\tlet bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\t\tconst extrudePath = options.extrudePath;\n\n\t\t\tconst uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t\t// deprecated options\n\n\t\t\tif ( options.amount !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' );\n\t\t\t\tdepth = options.amount;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet extrudePts, extrudeByPath = false;\n\t\t\tlet splineTube, binormal, normal, position2;\n\n\t\t\tif ( extrudePath ) {\n\n\t\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\t\textrudeByPath = true;\n\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t\t// SETUP TNB variables\n\n\t\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\tbinormal = new Vector3();\n\t\t\t\tnormal = new Vector3();\n\t\t\t\tposition2 = new Vector3();\n\n\t\t\t}\n\n\t\t\t// Safeguards if bevels are not enabled\n\n\t\t\tif ( ! bevelEnabled ) {\n\n\t\t\t\tbevelSegments = 0;\n\t\t\t\tbevelThickness = 0;\n\t\t\t\tbevelSize = 0;\n\t\t\t\tbevelOffset = 0;\n\n\t\t\t}\n\n\t\t\t// Variables initialization\n\n\t\t\tconst shapePoints = shape.extractPoints( curveSegments );\n\n\t\t\tlet vertices = shapePoints.shape;\n\t\t\tconst holes = shapePoints.holes;\n\n\t\t\tconst reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\t\tif ( reverse ) {\n\n\t\t\t\tvertices = vertices.reverse();\n\n\t\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t\t/* Vertices */\n\n\t\t\tconst contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\tvertices = vertices.concat( ahole );\n\n\t\t\t}\n\n\n\t\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\t\tif ( ! vec ) console.error( \"THREE.ExtrudeGeometry: vec does not exist\" );\n\n\t\t\t\treturn vec.clone().multiplyScalar( size ).add( pt );\n\n\t\t\t}\n\n\t\t\tconst vlen = vertices.length, flen = faces.length;\n\n\n\t\t\t// Find directions for point movement\n\n\n\t\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t//\n\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\t\tlet v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\tconst v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\tconst v_next_x = inNext.x - inPt.x,\n\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\t\tconst v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t\t// check for collinear edges\n\t\t\t\tconst collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not collinear\n\n\t\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\t\tconst v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\t\tconst v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\t\tconst ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\t\tconst ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\t\tconst ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\t\tconst ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\t\tconst sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t// but prevent crazy spikes\n\t\t\t\t\tconst v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\t\tlet direction_eq = false; // assumes: opposite\n\n\t\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t\t}\n\n\n\t\t\tconst contourMovements = [];\n\n\t\t\tfor ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t\t}\n\n\t\t\tconst holesMovements = [];\n\t\t\tlet oneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\toneHoleMovements = [];\n\n\t\t\t\tfor ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t\t}\n\n\t\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t\t}\n\n\n\t\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\t\tfor ( let b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst bs = bevelSize + bevelOffset;\n\n\t\t\t// Back facing vertices\n\n\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Add stepped vertices...\n\t\t\t// Including front facing vertices\n\n\t\t\tfor ( let s = 1; s <= steps; s ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// Add bevel segments planes\n\n\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\t\tfor ( let b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t/* Faces */\n\n\t\t\t// Top and bottom faces\n\n\t\t\tbuildLidFaces();\n\n\t\t\t// Sides faces\n\n\t\t\tbuildSideFaces();\n\n\n\t\t\t///// Internal functions\n\n\t\t\tfunction buildLidFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\n\t\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\t\tlet layer = 0; // steps + 1\n\t\t\t\t\tlet offset = vlen * layer;\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t\t}\n\n\t\t\t// Create faces for the z-sides of the shape\n\n\t\t\tfunction buildSideFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\t\t\t\tlet layeroffset = 0;\n\t\t\t\tsidewalls( contour, layeroffset );\n\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t\t//, true\n\t\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t\t}\n\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t\t}\n\n\t\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\t\tlet i = contour.length;\n\n\t\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\t\tconst j = i;\n\t\t\t\t\tlet k = i - 1;\n\t\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\tfor ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {\n\n\t\t\t\t\t\tconst slen1 = vlen * s;\n\t\t\t\t\t\tconst slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\t\tconst a = layeroffset + j + slen1,\n\t\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction v( x, y, z ) {\n\n\t\t\t\tplaceholder.push( x );\n\t\t\t\tplaceholder.push( y );\n\t\t\t\tplaceholder.push( z );\n\n\t\t\t}\n\n\n\t\t\tfunction f3( a, b, c ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\n\t\t\t}\n\n\t\t\tfunction f4( a, b, c, d ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( d );\n\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\t\t\t\taddVertex( d );\n\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t}\n\n\t\t\tfunction addVertex( index ) {\n\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t\t}\n\n\n\t\t\tfunction addUV( vector2 ) {\n\n\t\t\t\tuvArray.push( vector2.x );\n\t\t\t\tuvArray.push( vector2.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON( shapes, options, data );\n\n\t}\n\n}\n\nconst WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst a_z = vertices[ indexA * 3 + 2 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst b_z = vertices[ indexB * 3 + 2 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\t\tconst c_z = vertices[ indexC * 3 + 2 ];\n\t\tconst d_x = vertices[ indexD * 3 ];\n\t\tconst d_y = vertices[ indexD * 3 + 1 ];\n\t\tconst d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < 0.01 ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n\n};\n\nfunction toJSON( shapes, options, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\n/**\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline (including bevelOffset) is bevel\n * bevelOffset: , // how far from shape outline does bevel start\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // object that provides UV generator functions\n *\n * }\n */\n\nclass ExtrudeGeometry extends Geometry {\n\n\tconstructor( shapes, options ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tthis.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON$1( shapes, options, data );\n\n\t}\n\n}\n\nfunction toJSON$1( shapes, options, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\nclass IcosahedronBufferGeometry extends PolyhedronBufferGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\tconst vertices = [\n\t\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t\t0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t\tt, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'IcosahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\nclass IcosahedronGeometry extends Geometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'IcosahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new IcosahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass LatheBufferGeometry extends BufferGeometry {\n\n\tconstructor( points, segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tsegments = Math.floor( segments );\n\n\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\tphiLength = MathUtils.clamp( phiLength, 0, Math.PI * 2 );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst inverseSegments = 1.0 / segments;\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices and uvs\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\tconst sin = Math.sin( phi );\n\t\t\tconst cos = Math.cos( phi );\n\n\t\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\t\tvertex.y = points[ j ].y;\n\t\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = i / segments;\n\t\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 0; i < segments; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\tconst base = j + i * points.length;\n\n\t\t\t\tconst a = base;\n\t\t\t\tconst b = base + points.length;\n\t\t\t\tconst c = base + points.length + 1;\n\t\t\t\tconst d = base + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// generate normals\n\n\t\tthis.computeVertexNormals();\n\n\t\t// if the geometry is closed, we need to average the normals along the seam.\n\t\t// because the corresponding vertices are identical (but still have different UVs).\n\n\t\tif ( phiLength === Math.PI * 2 ) {\n\n\t\t\tconst normals = this.attributes.normal.array;\n\t\t\tconst n1 = new Vector3();\n\t\t\tconst n2 = new Vector3();\n\t\t\tconst n = new Vector3();\n\n\t\t\t// this is the buffer offset for the last line of vertices\n\n\t\t\tconst base = segments * points.length * 3;\n\n\t\t\tfor ( let i = 0, j = 0; i < points.length; i ++, j += 3 ) {\n\n\t\t\t\t// select the normal of the vertex in the first line\n\n\t\t\t\tn1.x = normals[ j + 0 ];\n\t\t\t\tn1.y = normals[ j + 1 ];\n\t\t\t\tn1.z = normals[ j + 2 ];\n\n\t\t\t\t// select the normal of the vertex in the last line\n\n\t\t\t\tn2.x = normals[ base + j + 0 ];\n\t\t\t\tn2.y = normals[ base + j + 1 ];\n\t\t\t\tn2.z = normals[ base + j + 2 ];\n\n\t\t\t\t// average normals\n\n\t\t\t\tn.addVectors( n1, n2 ).normalize();\n\n\t\t\t\t// assign the new values to both normals\n\n\t\t\t\tnormals[ j + 0 ] = normals[ base + j + 0 ] = n.x;\n\t\t\t\tnormals[ j + 1 ] = normals[ base + j + 1 ] = n.y;\n\t\t\t\tnormals[ j + 2 ] = normals[ base + j + 2 ] = n.z;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nclass LatheGeometry extends Geometry {\n\n\tconstructor( points, segments, phiStart, phiLength ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new LatheBufferGeometry( points, segments, phiStart, phiLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass OctahedronBufferGeometry extends PolyhedronBufferGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t\t1, 3, 4,\t1, 4, 2\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'OctahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\nclass OctahedronGeometry extends Geometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'OctahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new OctahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\n/**\n * Parametric Surfaces Geometry\n * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html\n */\n\nfunction ParametricBufferGeometry( func, slices, stacks ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'ParametricBufferGeometry';\n\n\tthis.parameters = {\n\t\tfunc: func,\n\t\tslices: slices,\n\t\tstacks: stacks\n\t};\n\n\t// buffers\n\n\tconst indices = [];\n\tconst vertices = [];\n\tconst normals = [];\n\tconst uvs = [];\n\n\tconst EPS = 0.00001;\n\n\tconst normal = new Vector3();\n\n\tconst p0 = new Vector3(), p1 = new Vector3();\n\tconst pu = new Vector3(), pv = new Vector3();\n\n\tif ( func.length < 3 ) {\n\n\t\tconsole.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' );\n\n\t}\n\n\t// generate vertices, normals and uvs\n\n\tconst sliceCount = slices + 1;\n\n\tfor ( let i = 0; i <= stacks; i ++ ) {\n\n\t\tconst v = i / stacks;\n\n\t\tfor ( let j = 0; j <= slices; j ++ ) {\n\n\t\t\tconst u = j / slices;\n\n\t\t\t// vertex\n\n\t\t\tfunc( u, v, p0 );\n\t\t\tvertices.push( p0.x, p0.y, p0.z );\n\n\t\t\t// normal\n\n\t\t\t// approximate tangent vectors via finite differences\n\n\t\t\tif ( u - EPS >= 0 ) {\n\n\t\t\t\tfunc( u - EPS, v, p1 );\n\t\t\t\tpu.subVectors( p0, p1 );\n\n\t\t\t} else {\n\n\t\t\t\tfunc( u + EPS, v, p1 );\n\t\t\t\tpu.subVectors( p1, p0 );\n\n\t\t\t}\n\n\t\t\tif ( v - EPS >= 0 ) {\n\n\t\t\t\tfunc( u, v - EPS, p1 );\n\t\t\t\tpv.subVectors( p0, p1 );\n\n\t\t\t} else {\n\n\t\t\t\tfunc( u, v + EPS, p1 );\n\t\t\t\tpv.subVectors( p1, p0 );\n\n\t\t\t}\n\n\t\t\t// cross product of tangent vectors returns surface normal\n\n\t\t\tnormal.crossVectors( pu, pv ).normalize();\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( u, v );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( let i = 0; i < stacks; i ++ ) {\n\n\t\tfor ( let j = 0; j < slices; j ++ ) {\n\n\t\t\tconst a = i * sliceCount + j;\n\t\t\tconst b = i * sliceCount + j + 1;\n\t\t\tconst c = ( i + 1 ) * sliceCount + j + 1;\n\t\t\tconst d = ( i + 1 ) * sliceCount + j;\n\n\t\t\t// faces one and two\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry;\n\n/**\n * Parametric Surfaces Geometry\n * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html\n */\n\nfunction ParametricGeometry( func, slices, stacks ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'ParametricGeometry';\n\n\tthis.parameters = {\n\t\tfunc: func,\n\t\tslices: slices,\n\t\tstacks: stacks\n\t};\n\n\tthis.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) );\n\tthis.mergeVertices();\n\n}\n\nParametricGeometry.prototype = Object.create( Geometry.prototype );\nParametricGeometry.prototype.constructor = ParametricGeometry;\n\nclass PlaneGeometry extends Geometry {\n\n\tconstructor( width, height, widthSegments, heightSegments ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PlaneGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tthis.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass PolyhedronGeometry extends Geometry {\n\n\tconstructor( vertices, indices, radius, detail ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new PolyhedronBufferGeometry( vertices, indices, radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass RingBufferGeometry extends BufferGeometry {\n\n\tconstructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 8, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthetaSegments = Math.max( 3, thetaSegments );\n\t\tphiSegments = Math.max( 1, phiSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// some helper variables\n\n\t\tlet radius = innerRadius;\n\t\tconst radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\t\tconst segment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t\t// increase the radius for next row of vertices\n\n\t\t\tradius += radiusStep;\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let j = 0; j < phiSegments; j ++ ) {\n\n\t\t\tconst thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\tfor ( let i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\tconst segment = i + thetaSegmentLevel;\n\n\t\t\t\tconst a = segment;\n\t\t\t\tconst b = segment + thetaSegments + 1;\n\t\t\t\tconst c = segment + thetaSegments + 2;\n\t\t\t\tconst d = segment + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nclass RingGeometry extends Geometry {\n\n\tconstructor( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass ShapeBufferGeometry extends BufferGeometry {\n\n\tconstructor( shapes, curveSegments = 12 ) {\n\n\t\tsuper();\n\t\tthis.type = 'ShapeBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet groupStart = 0;\n\t\tlet groupCount = 0;\n\n\t\t// allow single and array values for \"shapes\" parameter\n\n\t\tif ( Array.isArray( shapes ) === false ) {\n\n\t\t\taddShape( shapes );\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < shapes.length; i ++ ) {\n\n\t\t\t\taddShape( shapes[ i ] );\n\n\t\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t\tgroupCount = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t// helper functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst indexOffset = vertices.length / 3;\n\t\t\tconst points = shape.extractPoints( curveSegments );\n\n\t\t\tlet shapeVertices = points.shape;\n\t\t\tconst shapeHoles = points.holes;\n\n\t\t\t// check direction of vertices\n\n\t\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t\t// join vertices of inner and outer paths to a single array\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\t\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t\t}\n\n\t\t\t// vertices, normals, uvs\n\n\t\t\tfor ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\tconst vertex = shapeVertices[ i ];\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\t\tnormals.push( 0, 0, 1 );\n\t\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t\t}\n\n\t\t\t// incides\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tconst a = face[ 0 ] + indexOffset;\n\t\t\t\tconst b = face[ 1 ] + indexOffset;\n\t\t\t\tconst c = face[ 2 ] + indexOffset;\n\n\t\t\t\tindices.push( a, b, c );\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON$2( shapes, data );\n\n\t}\n\n}\n\nfunction toJSON$2( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\nclass ShapeGeometry extends Geometry {\n\n\tconstructor( shapes, curveSegments ) {\n\n\t\tsuper();\n\t\tthis.type = 'ShapeGeometry';\n\n\t\tif ( typeof curveSegments === 'object' ) {\n\n\t\t\tconsole.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' );\n\n\t\t\tcurveSegments = curveSegments.curveSegments;\n\n\t\t}\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\tthis.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = Geometry.prototype.toJSON.call( this );\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON$3( shapes, data );\n\n\t}\n\n}\n\nfunction toJSON$3( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\nclass SphereBufferGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, widthSegments = 8, heightSegments = 6, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) {\n\n\t\tsuper();\n\t\tthis.type = 'SphereBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) );\n\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) );\n\n\t\tconst thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );\n\n\t\tlet index = 0;\n\t\tconst grid = [];\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\tconst verticesRow = [];\n\n\t\t\tconst v = iy / heightSegments;\n\n\t\t\t// special case for the poles\n\n\t\t\tlet uOffset = 0;\n\n\t\t\tif ( iy == 0 && thetaStart == 0 ) {\n\n\t\t\t\tuOffset = 0.5 / widthSegments;\n\n\t\t\t} else if ( iy == heightSegments && thetaEnd == Math.PI ) {\n\n\t\t\t\tuOffset = - 0.5 / widthSegments;\n\n\t\t\t}\n\n\t\t\tfor ( let ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\tconst u = ix / widthSegments;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.copy( vertex ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u + uOffset, 1 - v );\n\n\t\t\t\tverticesRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\tgrid.push( verticesRow );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\tconst a = grid[ iy ][ ix + 1 ];\n\t\t\t\tconst b = grid[ iy ][ ix ];\n\t\t\t\tconst c = grid[ iy + 1 ][ ix ];\n\t\t\t\tconst d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nclass SphereGeometry extends Geometry {\n\n\tconstructor( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\t\tsuper();\n\t\tthis.type = 'SphereGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass TetrahedronBufferGeometry extends PolyhedronBufferGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'TetrahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\nclass TetrahedronGeometry extends Geometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tsuper();\n\t\tthis.type = 'TetrahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new TetrahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\n/**\n * Text = 3D Text\n *\n * parameters = {\n * font: , // font\n *\n * size: , // size of the text\n * height: , // thickness to extrude text\n * curveSegments: , // number of points on the curves\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into text bevel goes\n * bevelSize: , // how far from text outline (including bevelOffset) is bevel\n * bevelOffset: // how far from text outline does bevel start\n * }\n */\n\nclass TextBufferGeometry extends ExtrudeBufferGeometry {\n\n\tconstructor( text, parameters = {} ) {\n\n\t\tconst font = parameters.font;\n\n\t\tif ( ! ( font && font.isFont ) ) {\n\n\t\t\tconsole.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' );\n\t\t\treturn new BufferGeometry();\n\n\t\t}\n\n\t\tconst shapes = font.generateShapes( text, parameters.size );\n\n\t\t// translate parameters to ExtrudeGeometry API\n\n\t\tparameters.depth = parameters.height !== undefined ? parameters.height : 50;\n\n\t\t// defaults\n\n\t\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\n\t\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\n\t\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\n\n\t\tsuper( shapes, parameters );\n\n\t\tthis.type = 'TextBufferGeometry';\n\n\t}\n\n}\n\n/**\n * Text = 3D Text\n *\n * parameters = {\n * font: , // font\n *\n * size: , // size of the text\n * height: , // thickness to extrude text\n * curveSegments: , // number of points on the curves\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into text bevel goes\n * bevelSize: , // how far from text outline (including bevelOffset) is bevel\n * bevelOffset: // how far from text outline does bevel start\n * }\n */\n\nclass TextGeometry extends Geometry {\n\n\tconstructor( text, parameters ) {\n\n\t\tsuper();\n\t\tthis.type = 'TextGeometry';\n\n\t\tthis.parameters = {\n\t\t\ttext: text,\n\t\t\tparameters: parameters\n\t\t};\n\n\t\tthis.fromBufferGeometry( new TextBufferGeometry( text, parameters ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass TorusBufferGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, radialSegments = 8, tubularSegments = 6, arc = Math.PI * 2 ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\ttubularSegments = Math.floor( tubularSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst center = new Vector3();\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tconst u = i / tubularSegments * arc;\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\tconst b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\tconst c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\tconst d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nclass TorusGeometry extends Geometry {\n\n\tconstructor( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tthis.fromBufferGeometry( new TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass TorusKnotBufferGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusKnotBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\ttubularSegments = Math.floor( tubularSegments );\n\t\tradialSegments = Math.floor( radialSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tconst P1 = new Vector3();\n\t\tconst P2 = new Vector3();\n\n\t\tconst B = new Vector3();\n\t\tconst T = new Vector3();\n\t\tconst N = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segement\n\n\t\t\tconst u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t\t// calculate orthonormal basis\n\n\t\t\tT.subVectors( P2, P1 );\n\t\t\tN.addVectors( P2, P1 );\n\t\t\tB.crossVectors( T, N );\n\t\t\tN.crossVectors( B, T );\n\n\t\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\t\tB.normalize();\n\t\t\tN.normalize();\n\n\t\t\tfor ( let j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\t\t\t\tconst cx = - tube * Math.cos( v );\n\t\t\t\tconst cy = tube * Math.sin( v );\n\n\t\t\t\t// now calculate the final vertex position.\n\t\t\t\t// first we orient the extrusion with our basis vectos, then we add it to the current position on the curve\n\n\t\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// this function calculates the current position on the torus curve\n\n\t\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\t\tconst cu = Math.cos( u );\n\t\t\tconst su = Math.sin( u );\n\t\t\tconst quOverP = q / p * u;\n\t\t\tconst cs = Math.cos( quOverP );\n\n\t\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t\t}\n\n\t}\n\n}\n\nclass TorusKnotGeometry extends Geometry {\n\n\tconstructor( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusKnotGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\tif ( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' );\n\n\t\tthis.fromBufferGeometry( new TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass TubeBufferGeometry extends BufferGeometry {\n\n\tconstructor( path, tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) {\n\n\t\tsuper();\n\t\tthis.type = 'TubeBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tconst frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = frames.tangents;\n\t\tthis.normals = frames.normals;\n\t\tthis.binormals = frames.binormals;\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tlet P = new Vector3();\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\t\tconst indices = [];\n\n\t\t// create buffer data\n\n\t\tgenerateBufferData();\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// functions\n\n\t\tfunction generateBufferData() {\n\n\t\t\tfor ( let i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\t\tgenerateSegment( i );\n\n\t\t\t}\n\n\t\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t// at the regular position on the given path\n\t\t\t//\n\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t\t// uvs are generated in a separate function.\n\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\tgenerateUVs();\n\n\t\t\t// finally create faces\n\n\t\t\tgenerateIndices();\n\n\t\t}\n\n\t\tfunction generateSegment( i ) {\n\n\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t\t// retrieve corresponding normal and binormal\n\n\t\t\tconst N = frames.normals[ i ];\n\t\t\tconst B = frames.binormals[ i ];\n\n\t\t\t// generate normals and vertices for the current segment\n\n\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\tconst sin = Math.sin( v );\n\t\t\t\tconst cos = - Math.cos( v );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\t\tnormal.normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateIndices() {\n\n\t\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\ttoJSON() {\n\n\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\tdata.path = this.parameters.path.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass TubeGeometry extends Geometry {\n\n\tconstructor( path, tubularSegments, radius, radialSegments, closed, taper ) {\n\n\t\tsuper();\n\t\tthis.type = 'TubeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tif ( taper !== undefined ) console.warn( 'THREE.TubeGeometry: taper has been removed.' );\n\n\t\tconst bufferGeometry = new TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = bufferGeometry.tangents;\n\t\tthis.normals = bufferGeometry.normals;\n\t\tthis.binormals = bufferGeometry.binormals;\n\n\t\t// create geometry\n\n\t\tthis.fromBufferGeometry( bufferGeometry );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass WireframeGeometry extends BufferGeometry {\n\n\tconstructor( geometry ) {\n\n\t\tsuper();\n\t\tthis.type = 'WireframeGeometry';\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\n\t\t// helper variables\n\n\t\tconst edge = [ 0, 0 ], edges = {};\n\t\tconst keys = [ 'a', 'b', 'c' ];\n\n\t\t// different logic for Geometry and BufferGeometry\n\n\t\tif ( geometry && geometry.isGeometry ) {\n\n\t\t\t// create a data structure that contains all edges without duplicates\n\n\t\t\tconst faces = geometry.faces;\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\tconst edge1 = face[ keys[ j ] ];\n\t\t\t\t\tconst edge2 = face[ keys[ ( j + 1 ) % 3 ] ];\n\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\tconst key = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// generate vertices\n\n\t\t\tfor ( const key in edges ) {\n\n\t\t\t\tconst e = edges[ key ];\n\n\t\t\t\tlet vertex = geometry.vertices[ e.index1 ];\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\tvertex = geometry.vertices[ e.index2 ];\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t} else if ( geometry && geometry.isBufferGeometry ) {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t// indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\tconst indices = geometry.index;\n\t\t\t\tlet groups = geometry.groups;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t\t}\n\n\t\t\t\t// create a data structure that contains all eges without duplicates\n\n\t\t\t\tfor ( let o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\t\tconst group = groups[ o ];\n\n\t\t\t\t\tconst start = group.start;\n\t\t\t\t\tconst count = group.count;\n\n\t\t\t\t\tfor ( let i = start, l = ( start + count ); i < l; i += 3 ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\tconst edge1 = indices.getX( i + j );\n\t\t\t\t\t\t\tconst edge2 = indices.getX( i + ( j + 1 ) % 3 );\n\t\t\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\t\t\tconst key = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// generate vertices\n\n\t\t\t\tfor ( const key in edges ) {\n\n\t\t\t\t\tconst e = edges[ key ];\n\n\t\t\t\t\tvertex.fromBufferAttribute( position, e.index1 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\tvertex.fromBufferAttribute( position, e.index2 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\n\t\t\t\tfor ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\t\tconst index1 = 3 * i + j;\n\t\t\t\t\t\tvertex.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t\tconst index2 = 3 * i + ( ( j + 1 ) % 3 );\n\t\t\t\t\t\tvertex.fromBufferAttribute( position, index2 );\n\t\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n}\n\nvar Geometries = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBoxGeometry: BoxGeometry,\n\tBoxBufferGeometry: BoxBufferGeometry,\n\tCircleGeometry: CircleGeometry,\n\tCircleBufferGeometry: CircleBufferGeometry,\n\tConeGeometry: ConeGeometry,\n\tConeBufferGeometry: ConeBufferGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tCylinderBufferGeometry: CylinderBufferGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tDodecahedronBufferGeometry: DodecahedronBufferGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tExtrudeBufferGeometry: ExtrudeBufferGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tIcosahedronBufferGeometry: IcosahedronBufferGeometry,\n\tLatheGeometry: LatheGeometry,\n\tLatheBufferGeometry: LatheBufferGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tOctahedronBufferGeometry: OctahedronBufferGeometry,\n\tParametricGeometry: ParametricGeometry,\n\tParametricBufferGeometry: ParametricBufferGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPlaneBufferGeometry: PlaneBufferGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tPolyhedronBufferGeometry: PolyhedronBufferGeometry,\n\tRingGeometry: RingGeometry,\n\tRingBufferGeometry: RingBufferGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tShapeBufferGeometry: ShapeBufferGeometry,\n\tSphereGeometry: SphereGeometry,\n\tSphereBufferGeometry: SphereBufferGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTetrahedronBufferGeometry: TetrahedronBufferGeometry,\n\tTextGeometry: TextGeometry,\n\tTextBufferGeometry: TextBufferGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusBufferGeometry: TorusBufferGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTorusKnotBufferGeometry: TorusKnotBufferGeometry,\n\tTubeGeometry: TubeGeometry,\n\tTubeBufferGeometry: TubeBufferGeometry,\n\tWireframeGeometry: WireframeGeometry\n});\n\n/**\n * parameters = {\n * color: \n * }\n */\n\nfunction ShadowMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'ShadowMaterial';\n\n\tthis.color = new Color( 0x000000 );\n\tthis.transparent = true;\n\n\tthis.setValues( parameters );\n\n}\n\nShadowMaterial.prototype = Object.create( Material.prototype );\nShadowMaterial.prototype.constructor = ShadowMaterial;\n\nShadowMaterial.prototype.isShadowMaterial = true;\n\nShadowMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\treturn this;\n\n};\n\nfunction RawShaderMaterial( parameters ) {\n\n\tShaderMaterial.call( this, parameters );\n\n\tthis.type = 'RawShaderMaterial';\n\n}\n\nRawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype );\nRawShaderMaterial.prototype.constructor = RawShaderMaterial;\n\nRawShaderMaterial.prototype.isRawShaderMaterial = true;\n\n/**\n * parameters = {\n * color: ,\n * roughness: ,\n * metalness: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * roughnessMap: new THREE.Texture( ),\n *\n * metalnessMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * envMapIntensity: \n *\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshStandardMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.defines = { 'STANDARD': '' };\n\n\tthis.type = 'MeshStandardMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\tthis.roughness = 1.0;\n\tthis.metalness = 0.0;\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.roughnessMap = null;\n\n\tthis.metalnessMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.envMapIntensity = 1.0;\n\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.vertexTangents = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshStandardMaterial.prototype = Object.create( Material.prototype );\nMeshStandardMaterial.prototype.constructor = MeshStandardMaterial;\n\nMeshStandardMaterial.prototype.isMeshStandardMaterial = true;\n\nMeshStandardMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = { 'STANDARD': '' };\n\n\tthis.color.copy( source.color );\n\tthis.roughness = source.roughness;\n\tthis.metalness = source.metalness;\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.roughnessMap = source.roughnessMap;\n\n\tthis.metalnessMap = source.metalnessMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.envMapIntensity = source.envMapIntensity;\n\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\tthis.vertexTangents = source.vertexTangents;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n * clearcoat: ,\n * clearcoatMap: new THREE.Texture( ),\n * clearcoatRoughness: ,\n * clearcoatRoughnessMap: new THREE.Texture( ),\n * clearcoatNormalScale: ,\n * clearcoatNormalMap: new THREE.Texture( ),\n *\n * reflectivity: ,\n * ior: ,\n *\n * sheen: ,\n *\n * transmission: ,\n * transmissionMap: new THREE.Texture( )\n * }\n */\n\nfunction MeshPhysicalMaterial( parameters ) {\n\n\tMeshStandardMaterial.call( this );\n\n\tthis.defines = {\n\n\t\t'STANDARD': '',\n\t\t'PHYSICAL': ''\n\n\t};\n\n\tthis.type = 'MeshPhysicalMaterial';\n\n\tthis.clearcoat = 0.0;\n\tthis.clearcoatMap = null;\n\tthis.clearcoatRoughness = 0.0;\n\tthis.clearcoatRoughnessMap = null;\n\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\tthis.clearcoatNormalMap = null;\n\n\tthis.reflectivity = 0.5; // maps to F0 = 0.04\n\n\tObject.defineProperty( this, 'ior', {\n\t\tget: function () {\n\n\t\t\treturn ( 1 + 0.4 * this.reflectivity ) / ( 1 - 0.4 * this.reflectivity );\n\n\t\t},\n\t\tset: function ( ior ) {\n\n\t\t\tthis.reflectivity = MathUtils.clamp( 2.5 * ( ior - 1 ) / ( ior + 1 ), 0, 1 );\n\n\t\t}\n\t} );\n\n\tthis.sheen = null; // null will disable sheen bsdf\n\n\tthis.transmission = 0.0;\n\tthis.transmissionMap = null;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype );\nMeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial;\n\nMeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true;\n\nMeshPhysicalMaterial.prototype.copy = function ( source ) {\n\n\tMeshStandardMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = {\n\n\t\t'STANDARD': '',\n\t\t'PHYSICAL': ''\n\n\t};\n\n\tthis.clearcoat = source.clearcoat;\n\tthis.clearcoatMap = source.clearcoatMap;\n\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\tthis.reflectivity = source.reflectivity;\n\n\tif ( source.sheen ) {\n\n\t\tthis.sheen = ( this.sheen || new Color() ).copy( source.sheen );\n\n\t} else {\n\n\t\tthis.sheen = null;\n\n\t}\n\n\tthis.transmission = source.transmission;\n\tthis.transmissionMap = source.transmissionMap;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n * color: ,\n * specular: ,\n * shininess: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.MultiplyOperation,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshPhongMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshPhongMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\tthis.specular = new Color( 0x111111 );\n\tthis.shininess = 30;\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshPhongMaterial.prototype = Object.create( Material.prototype );\nMeshPhongMaterial.prototype.constructor = MeshPhongMaterial;\n\nMeshPhongMaterial.prototype.isMeshPhongMaterial = true;\n\nMeshPhongMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\tthis.specular.copy( source.specular );\n\tthis.shininess = source.shininess;\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n * color: ,\n *\n * map: new THREE.Texture( ),\n * gradientMap: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * alphaMap: new THREE.Texture( ),\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshToonMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.defines = { 'TOON': '' };\n\n\tthis.type = 'MeshToonMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.map = null;\n\tthis.gradientMap = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.alphaMap = null;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshToonMaterial.prototype = Object.create( Material.prototype );\nMeshToonMaterial.prototype.constructor = MeshToonMaterial;\n\nMeshToonMaterial.prototype.isMeshToonMaterial = true;\n\nMeshToonMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\tthis.gradientMap = source.gradientMap;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n * opacity: ,\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * wireframe: ,\n * wireframeLinewidth: \n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshNormalMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshNormalMaterial';\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshNormalMaterial.prototype = Object.create( Material.prototype );\nMeshNormalMaterial.prototype.constructor = MeshNormalMaterial;\n\nMeshNormalMaterial.prototype.isMeshNormalMaterial = true;\n\nMeshNormalMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshLambertMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshLambertMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshLambertMaterial.prototype = Object.create( Material.prototype );\nMeshLambertMaterial.prototype.constructor = MeshLambertMaterial;\n\nMeshLambertMaterial.prototype.isMeshLambertMaterial = true;\n\nMeshLambertMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * matcap: new THREE.Texture( ),\n *\n * map: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * alphaMap: new THREE.Texture( ),\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshMatcapMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.defines = { 'MATCAP': '' };\n\n\tthis.type = 'MeshMatcapMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\n\tthis.matcap = null;\n\n\tthis.map = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.alphaMap = null;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshMatcapMaterial.prototype = Object.create( Material.prototype );\nMeshMatcapMaterial.prototype.constructor = MeshMatcapMaterial;\n\nMeshMatcapMaterial.prototype.isMeshMatcapMaterial = true;\n\nMeshMatcapMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = { 'MATCAP': '' };\n\n\tthis.color.copy( source.color );\n\n\tthis.matcap = source.matcap;\n\n\tthis.map = source.map;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * linewidth: ,\n *\n * scale: ,\n * dashSize: ,\n * gapSize: \n * }\n */\n\nfunction LineDashedMaterial( parameters ) {\n\n\tLineBasicMaterial.call( this );\n\n\tthis.type = 'LineDashedMaterial';\n\n\tthis.scale = 1;\n\tthis.dashSize = 3;\n\tthis.gapSize = 1;\n\n\tthis.setValues( parameters );\n\n}\n\nLineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype );\nLineDashedMaterial.prototype.constructor = LineDashedMaterial;\n\nLineDashedMaterial.prototype.isLineDashedMaterial = true;\n\nLineDashedMaterial.prototype.copy = function ( source ) {\n\n\tLineBasicMaterial.prototype.copy.call( this, source );\n\n\tthis.scale = source.scale;\n\tthis.dashSize = source.dashSize;\n\tthis.gapSize = source.gapSize;\n\n\treturn this;\n\n};\n\nvar Materials = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tShadowMaterial: ShadowMaterial,\n\tSpriteMaterial: SpriteMaterial,\n\tRawShaderMaterial: RawShaderMaterial,\n\tShaderMaterial: ShaderMaterial,\n\tPointsMaterial: PointsMaterial,\n\tMeshPhysicalMaterial: MeshPhysicalMaterial,\n\tMeshStandardMaterial: MeshStandardMaterial,\n\tMeshPhongMaterial: MeshPhongMaterial,\n\tMeshToonMaterial: MeshToonMaterial,\n\tMeshNormalMaterial: MeshNormalMaterial,\n\tMeshLambertMaterial: MeshLambertMaterial,\n\tMeshDepthMaterial: MeshDepthMaterial,\n\tMeshDistanceMaterial: MeshDistanceMaterial,\n\tMeshBasicMaterial: MeshBasicMaterial,\n\tMeshMatcapMaterial: MeshMatcapMaterial,\n\tLineDashedMaterial: LineDashedMaterial,\n\tLineBasicMaterial: LineBasicMaterial,\n\tMaterial: Material\n});\n\nconst AnimationUtils = {\n\n\t// same as Array.prototype.slice, but also works on typed arrays\n\tarraySlice: function ( array, from, to ) {\n\n\t\tif ( AnimationUtils.isTypedArray( array ) ) {\n\n\t\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\t\treturn new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );\n\n\t\t}\n\n\t\treturn array.slice( from, to );\n\n\t},\n\n\t// converts an array to a specific type\n\tconvertArray: function ( array, type, forceClone ) {\n\n\t\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t\t! forceClone && array.constructor === type ) return array;\n\n\t\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\t\treturn new type( array ); // create typed array\n\n\t\t}\n\n\t\treturn Array.prototype.slice.call( array ); // create Array\n\n\t},\n\n\tisTypedArray: function ( object ) {\n\n\t\treturn ArrayBuffer.isView( object ) &&\n\t\t\t! ( object instanceof DataView );\n\n\t},\n\n\t// returns an array by which times and values can be sorted\n\tgetKeyframeOrder: function ( times ) {\n\n\t\tfunction compareTime( i, j ) {\n\n\t\t\treturn times[ i ] - times[ j ];\n\n\t\t}\n\n\t\tconst n = times.length;\n\t\tconst result = new Array( n );\n\t\tfor ( let i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\t\tresult.sort( compareTime );\n\n\t\treturn result;\n\n\t},\n\n\t// uses the array previously returned by 'getKeyframeOrder' to sort data\n\tsortedArray: function ( values, stride, order ) {\n\n\t\tconst nValues = values.length;\n\t\tconst result = new values.constructor( nValues );\n\n\t\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\t\tconst srcOffset = order[ i ] * stride;\n\n\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// function for parsing AOS keyframe formats\n\tflattenJSON: function ( jsonKeys, times, values, valuePropertyName ) {\n\n\t\tlet i = 1, key = jsonKeys[ 0 ];\n\n\t\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t}\n\n\t\tif ( key === undefined ) return; // no data\n\n\t\tlet value = key[ valuePropertyName ];\n\t\tif ( value === undefined ) return; // no data\n\n\t\tif ( Array.isArray( value ) ) {\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else if ( value.toArray !== undefined ) {\n\n\t\t\t// ...assume THREE.Math-ish\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else {\n\n\t\t\t// otherwise push as-is\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push( value );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t}\n\n\t},\n\n\tsubclip: function ( sourceClip, name, startFrame, endFrame, fps = 30 ) {\n\n\t\tconst clip = sourceClip.clone();\n\n\t\tclip.name = name;\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tconst track = clip.tracks[ i ];\n\t\t\tconst valueSize = track.getValueSize();\n\n\t\t\tconst times = [];\n\t\t\tconst values = [];\n\n\t\t\tfor ( let j = 0; j < track.times.length; ++ j ) {\n\n\t\t\t\tconst frame = track.times[ j ] * fps;\n\n\t\t\t\tif ( frame < startFrame || frame >= endFrame ) continue;\n\n\t\t\t\ttimes.push( track.times[ j ] );\n\n\t\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\t\tvalues.push( track.values[ j * valueSize + k ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( times.length === 0 ) continue;\n\n\t\t\ttrack.times = AnimationUtils.convertArray( times, track.times.constructor );\n\t\t\ttrack.values = AnimationUtils.convertArray( values, track.values.constructor );\n\n\t\t\ttracks.push( track );\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\t// find minimum .times value across all tracks in the trimmed clip\n\n\t\tlet minStartTime = Infinity;\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tif ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {\n\n\t\t\t\tminStartTime = clip.tracks[ i ].times[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// shift all tracks such that clip begins at t=0\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tclip.tracks[ i ].shift( - 1 * minStartTime );\n\n\t\t}\n\n\t\tclip.resetDuration();\n\n\t\treturn clip;\n\n\t},\n\n\tmakeClipAdditive: function ( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {\n\n\t\tif ( fps <= 0 ) fps = 30;\n\n\t\tconst numTracks = referenceClip.tracks.length;\n\t\tconst referenceTime = referenceFrame / fps;\n\n\t\t// Make each track's values relative to the values at the reference frame\n\t\tfor ( let i = 0; i < numTracks; ++ i ) {\n\n\t\t\tconst referenceTrack = referenceClip.tracks[ i ];\n\t\t\tconst referenceTrackType = referenceTrack.ValueTypeName;\n\n\t\t\t// Skip this track if it's non-numeric\n\t\t\tif ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;\n\n\t\t\t// Find the track in the target clip whose name and type matches the reference track\n\t\t\tconst targetTrack = targetClip.tracks.find( function ( track ) {\n\n\t\t\t\treturn track.name === referenceTrack.name\n\t\t\t\t\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t\t} );\n\n\t\t\tif ( targetTrack === undefined ) continue;\n\n\t\t\tlet referenceOffset = 0;\n\t\t\tconst referenceValueSize = referenceTrack.getValueSize();\n\n\t\t\tif ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\treferenceOffset = referenceValueSize / 3;\n\n\t\t\t}\n\n\t\t\tlet targetOffset = 0;\n\t\t\tconst targetValueSize = targetTrack.getValueSize();\n\n\t\t\tif ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\ttargetOffset = targetValueSize / 3;\n\n\t\t\t}\n\n\t\t\tconst lastIndex = referenceTrack.times.length - 1;\n\t\t\tlet referenceValue;\n\n\t\t\t// Find the value to subtract out of the track\n\t\t\tif ( referenceTime <= referenceTrack.times[ 0 ] ) {\n\n\t\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\t\tconst startIndex = referenceOffset;\n\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t\t} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {\n\n\t\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\t\tconst startIndex = lastIndex * referenceValueSize + referenceOffset;\n\t\t\t\tconst endIndex = startIndex + referenceValueSize - referenceOffset;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t\t} else {\n\n\t\t\t\t// Interpolate to the reference value\n\t\t\t\tconst interpolant = referenceTrack.createInterpolant();\n\t\t\t\tconst startIndex = referenceOffset;\n\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( interpolant.resultBuffer, startIndex, endIndex );\n\n\t\t\t}\n\n\t\t\t// Conjugate the quaternion\n\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\tconst referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate();\n\t\t\t\treferenceQuat.toArray( referenceValue );\n\n\t\t\t}\n\n\t\t\t// Subtract the reference value from all of the track values\n\n\t\t\tconst numTimes = targetTrack.times.length;\n\t\t\tfor ( let j = 0; j < numTimes; ++ j ) {\n\n\t\t\t\tconst valueStart = j * targetValueSize + targetOffset;\n\n\t\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\t\tQuaternion.multiplyQuaternionsFlat(\n\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\tvalueStart,\n\t\t\t\t\t\treferenceValue,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\tvalueStart\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst valueEnd = targetValueSize - targetOffset * 2;\n\n\t\t\t\t\t// Subtract each value for all other numeric track types\n\t\t\t\t\tfor ( let k = 0; k < valueEnd; ++ k ) {\n\n\t\t\t\t\t\ttargetTrack.values[ valueStart + k ] -= referenceValue[ k ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\ttargetClip.blendMode = AdditiveAnimationBlendMode;\n\n\t\treturn targetClip;\n\n\t}\n\n};\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n */\n\nfunction Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tthis.parameterPositions = parameterPositions;\n\tthis._cachedIndex = 0;\n\n\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\tthis.sampleValues = sampleValues;\n\tthis.valueSize = sampleSize;\n\n}\n\nObject.assign( Interpolant.prototype, {\n\n\tevaluate: function ( t ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet i1 = this._cachedIndex,\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tlet right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t, t0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tconst t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tconst mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.afterEnd_( i1 - 1, t0, t );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t},\n\n\tsettings: null, // optional, subclass-specific settings structure\n\t// Note: The indirection allows central control of many interpolants.\n\n\t// --- Protected interface\n\n\tDefaultSettings_: {},\n\n\tgetSettings_: function () {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t},\n\n\tcopySampleValue_: function ( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// Template methods for derived classes:\n\n\tinterpolate_: function ( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t},\n\n\tintervalChanged_: function ( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n} );\n\n// DECLARE ALIAS AFTER assign prototype\nObject.assign( Interpolant.prototype, {\n\n\t//( 0, t, t0 ), returns this.resultBuffer\n\tbeforeStart_: Interpolant.prototype.copySampleValue_,\n\n\t//( N-1, tN-1, t ), returns this.resultBuffer\n\tafterEnd_: Interpolant.prototype.copySampleValue_,\n\n} );\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n */\n\nfunction CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\tthis._weightPrev = - 0;\n\tthis._offsetPrev = - 0;\n\tthis._weightNext = - 0;\n\tthis._offsetNext = - 0;\n\n}\n\nCubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: CubicInterpolant,\n\n\tDefaultSettings_: {\n\n\t\tendingStart: ZeroCurvatureEnding,\n\t\tendingEnd: ZeroCurvatureEnding\n\n\t},\n\n\tintervalChanged_: function ( i1, t0, t1 ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet iPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t},\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tconst s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tconst s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\nfunction LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: LinearInterpolant,\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceeding\n * the parameter.\n */\n\nfunction DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nDiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: DiscreteInterpolant,\n\n\tinterpolate_: function ( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n} );\n\nfunction KeyframeTrack( name, times, values, interpolation ) {\n\n\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\tthis.name = name;\n\n\tthis.times = AnimationUtils.convertArray( times, this.TimeBufferType );\n\tthis.values = AnimationUtils.convertArray( values, this.ValueBufferType );\n\n\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n}\n\n// Static methods\n\nObject.assign( KeyframeTrack, {\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\ttoJSON: function ( track ) {\n\n\t\tconst trackType = track.constructor;\n\n\t\tlet json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== undefined ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': AnimationUtils.convertArray( track.times, Array ),\n\t\t\t\t'values': AnimationUtils.convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tconst interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t}\n\n} );\n\nObject.assign( KeyframeTrack.prototype, {\n\n\tconstructor: KeyframeTrack,\n\n\tTimeBufferType: Float32Array,\n\n\tValueBufferType: Float32Array,\n\n\tDefaultInterpolation: InterpolateLinear,\n\n\tInterpolantFactoryMethodDiscrete: function ( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodSmooth: function ( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tsetInterpolation: function ( interpolation ) {\n\n\t\tlet factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tconst message = \"unsupported interpolation for \" +\n\t\t\t\tthis.ValueTypeName + \" keyframe track named \" + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\n\n\t},\n\n\tgetInterpolation: function () {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t},\n\n\tgetValueSize: function () {\n\n\t\treturn this.values.length / this.times.length;\n\n\t},\n\n\t// move all keyframes either forwards or backwards in time\n\tshift: function ( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale: function ( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim: function ( startTime, endTime ) {\n\n\t\tconst times = this.times,\n\t\t\tnKeys = times.length;\n\n\t\tlet from = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) {\n\n\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\tfrom = to - 1;\n\n\t\t\t}\n\n\t\t\tconst stride = this.getValueSize();\n\t\t\tthis.times = AnimationUtils.arraySlice( times, from, to );\n\t\t\tthis.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate: function () {\n\n\t\tlet valid = true;\n\n\t\tconst valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tconst times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tlet prevTime = null;\n\n\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tconst currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( AnimationUtils.isTypedArray( values ) ) {\n\n\t\t\t\tfor ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t},\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize: function () {\n\n\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\tconst times = AnimationUtils.arraySlice( this.times ),\n\t\t\tvalues = AnimationUtils.arraySlice( this.values ),\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\tlastIndex = times.length - 1;\n\n\t\tlet writeIndex = 1;\n\n\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tlet keep = false;\n\n\t\t\tconst time = times[ i ];\n\t\t\tconst timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tconst offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tconst value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tconst readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = AnimationUtils.arraySlice( times, 0, writeIndex );\n\t\t\tthis.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride );\n\n\t\t} else {\n\n\t\t\tthis.times = times;\n\t\t\tthis.values = values;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\tconst times = AnimationUtils.arraySlice( this.times, 0 );\n\t\tconst values = AnimationUtils.arraySlice( this.values, 0 );\n\n\t\tconst TypedKeyframeTrack = this.constructor;\n\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\treturn track;\n\n\t}\n\n} );\n\n/**\n * A Track of Boolean keyframe values.\n */\n\nfunction BooleanKeyframeTrack( name, times, values ) {\n\n\tKeyframeTrack.call( this, name, times, values );\n\n}\n\nBooleanKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: BooleanKeyframeTrack,\n\n\tValueTypeName: 'bool',\n\tValueBufferType: Array,\n\n\tDefaultInterpolation: InterpolateDiscrete,\n\n\tInterpolantFactoryMethodLinear: undefined,\n\tInterpolantFactoryMethodSmooth: undefined\n\n\t// Note: Actually this track could have a optimized / compressed\n\t// representation of a single value and a custom interpolant that\n\t// computes \"firstValue ^ isOdd( index )\".\n\n} );\n\n/**\n * A Track of keyframe values that represent color.\n */\n\nfunction ColorKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nColorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: ColorKeyframeTrack,\n\n\tValueTypeName: 'color'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n\t// Note: Very basic implementation and nothing special yet.\n\t// However, this is the place for color space parameterization.\n\n} );\n\n/**\n * A Track of numeric keyframe values.\n */\n\nfunction NumberKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nNumberKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: NumberKeyframeTrack,\n\n\tValueTypeName: 'number'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n} );\n\n/**\n * Spherical linear unit quaternion interpolant.\n */\n\nfunction QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nQuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: QuaternionLinearInterpolant,\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tlet offset = i1 * stride;\n\n\t\tfor ( let end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n * A Track of quaternion keyframe values.\n */\n\nfunction QuaternionKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nQuaternionKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: QuaternionKeyframeTrack,\n\n\tValueTypeName: 'quaternion',\n\n\t// ValueBufferType is inherited\n\n\tDefaultInterpolation: InterpolateLinear,\n\n\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodSmooth: undefined // not yet implemented\n\n} );\n\n/**\n * A Track that interpolates Strings\n */\n\nfunction StringKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nStringKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: StringKeyframeTrack,\n\n\tValueTypeName: 'string',\n\tValueBufferType: Array,\n\n\tDefaultInterpolation: InterpolateDiscrete,\n\n\tInterpolantFactoryMethodLinear: undefined,\n\n\tInterpolantFactoryMethodSmooth: undefined\n\n} );\n\n/**\n * A Track of vectored keyframe values.\n */\n\nfunction VectorKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nVectorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: VectorKeyframeTrack,\n\n\tValueTypeName: 'vector'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n} );\n\nfunction AnimationClip( name, duration, tracks, blendMode ) {\n\n\tthis.name = name;\n\tthis.tracks = tracks;\n\tthis.duration = ( duration !== undefined ) ? duration : - 1;\n\tthis.blendMode = ( blendMode !== undefined ) ? blendMode : NormalAnimationBlendMode;\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\t// this means it should figure out its duration by scanning the tracks\n\tif ( this.duration < 0 ) {\n\n\t\tthis.resetDuration();\n\n\t}\n\n}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tconst times = [], values = [];\n\n\t\tAnimationUtils.flattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\nObject.assign( AnimationClip, {\n\n\tparse: function ( json ) {\n\n\t\tconst tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\tconst clip = new AnimationClip( json.name, json.duration, tracks, json.blendMode );\n\t\tclip.uuid = json.uuid;\n\n\t\treturn clip;\n\n\t},\n\n\ttoJSON: function ( clip ) {\n\n\t\tconst tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tconst json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid,\n\t\t\t'blendMode': clip.blendMode\n\n\t\t};\n\n\t\tfor ( let i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t},\n\n\tCreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tconst numMorphTargets = morphTargetSequence.length;\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tlet times = [];\n\t\t\tlet values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tconst order = AnimationUtils.getKeyframeOrder( times );\n\t\t\ttimes = AnimationUtils.sortedArray( times, 1, order );\n\t\t\tvalues = AnimationUtils.sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new AnimationClip( name, - 1, tracks );\n\n\t},\n\n\tfindByName: function ( objectOrClipArray, name ) {\n\n\t\tlet clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tconst o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\tCreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) {\n\n\t\tconst animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tconst pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst clips = [];\n\n\t\tfor ( const name in animationToMorphTargets ) {\n\n\t\t\tclips.push( AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t},\n\n\t// parse the animation.hierarchy format\n\tparseAnimation: function ( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst values = [];\n\n\t\t\t\tAnimationUtils.flattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tconst tracks = [];\n\n\t\tconst clipName = animation.name || 'default';\n\t\tconst fps = animation.fps || 30;\n\t\tconst blendMode = animation.blendMode;\n\n\t\t// automatic length determination in AnimationClip.\n\t\tlet duration = animation.length || - 1;\n\n\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tconst animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tconst morphTargetNames = {};\n\n\t\t\t\tlet k;\n\n\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tconst animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * ( fps || 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tconst boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst clip = new AnimationClip( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n} );\n\nObject.assign( AnimationClip.prototype, {\n\n\tresetDuration: function () {\n\n\t\tconst tracks = this.tracks;\n\t\tlet duration = 0;\n\n\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tconst track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t\treturn this;\n\n\t},\n\n\ttrim: function () {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tvalidate: function () {\n\n\t\tlet valid = true;\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t},\n\n\toptimize: function () {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t}\n\n\t\treturn new AnimationClip( this.name, this.duration, tracks, this.blendMode );\n\n\t},\n\n\ttoJSON: function () {\n\n\t\treturn AnimationClip.toJSON( this );\n\n\t}\n\n} );\n\nconst Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\nfunction LoadingManager( onLoad, onProgress, onError ) {\n\n\tconst scope = this;\n\n\tlet isLoading = false;\n\tlet itemsLoaded = 0;\n\tlet itemsTotal = 0;\n\tlet urlModifier = undefined;\n\tconst handlers = [];\n\n\t// Refer to #5689 for the reason why we don't set .onStart\n\t// in the constructor\n\n\tthis.onStart = undefined;\n\tthis.onLoad = onLoad;\n\tthis.onProgress = onProgress;\n\tthis.onError = onError;\n\n\tthis.itemStart = function ( url ) {\n\n\t\titemsTotal ++;\n\n\t\tif ( isLoading === false ) {\n\n\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tisLoading = true;\n\n\t};\n\n\tthis.itemEnd = function ( url ) {\n\n\t\titemsLoaded ++;\n\n\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t}\n\n\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\tisLoading = false;\n\n\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\tscope.onLoad();\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.itemError = function ( url ) {\n\n\t\tif ( scope.onError !== undefined ) {\n\n\t\t\tscope.onError( url );\n\n\t\t}\n\n\t};\n\n\tthis.resolveURL = function ( url ) {\n\n\t\tif ( urlModifier ) {\n\n\t\t\treturn urlModifier( url );\n\n\t\t}\n\n\t\treturn url;\n\n\t};\n\n\tthis.setURLModifier = function ( transform ) {\n\n\t\turlModifier = transform;\n\n\t\treturn this;\n\n\t};\n\n\tthis.addHandler = function ( regex, loader ) {\n\n\t\thandlers.push( regex, loader );\n\n\t\treturn this;\n\n\t};\n\n\tthis.removeHandler = function ( regex ) {\n\n\t\tconst index = handlers.indexOf( regex );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\thandlers.splice( index, 2 );\n\n\t\t}\n\n\t\treturn this;\n\n\t};\n\n\tthis.getHandler = function ( file ) {\n\n\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\tconst regex = handlers[ i ];\n\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\treturn loader;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t};\n\n}\n\nconst DefaultLoadingManager = new LoadingManager();\n\nfunction Loader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\tthis.crossOrigin = 'anonymous';\n\tthis.withCredentials = false;\n\tthis.path = '';\n\tthis.resourcePath = '';\n\tthis.requestHeader = {};\n\n}\n\nObject.assign( Loader.prototype, {\n\n\tload: function ( /* url, onLoad, onProgress, onError */ ) {},\n\n\tloadAsync: function ( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t},\n\n\tparse: function ( /* data */ ) {},\n\n\tsetCrossOrigin: function ( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t},\n\n\tsetWithCredentials: function ( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t},\n\n\tsetResourcePath: function ( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t},\n\n\tsetRequestHeader: function ( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n} );\n\nconst loading = {};\n\nfunction FileLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nFileLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: FileLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Check for data: URI\n\t\tconst dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\t\tconst dataUriRegexResult = url.match( dataUriRegex );\n\t\tlet request;\n\n\t\t// Safari can not handle Data URIs through XMLHttpRequest so process manually\n\t\tif ( dataUriRegexResult ) {\n\n\t\t\tconst mimeType = dataUriRegexResult[ 1 ];\n\t\t\tconst isBase64 = !! dataUriRegexResult[ 2 ];\n\n\t\t\tlet data = dataUriRegexResult[ 3 ];\n\t\t\tdata = decodeURIComponent( data );\n\n\t\t\tif ( isBase64 ) data = atob( data );\n\n\t\t\ttry {\n\n\t\t\t\tlet response;\n\t\t\t\tconst responseType = ( this.responseType || '' ).toLowerCase();\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\tconst view = new Uint8Array( data.length );\n\n\t\t\t\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\t\t\t\tview[ i ] = data.charCodeAt( i );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( responseType === 'blob' ) {\n\n\t\t\t\t\t\t\tresponse = new Blob( [ view.buffer ], { type: mimeType } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tresponse = view.buffer;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\tconst parser = new DOMParser();\n\t\t\t\t\t\tresponse = parser.parseFromString( data, mimeType );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\tresponse = JSON.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault: // 'text' or other\n\n\t\t\t\t\t\tresponse = data;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( response );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Initialise array for duplicate requests\n\n\t\t\tloading[ url ] = [];\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\trequest = new XMLHttpRequest();\n\n\t\t\trequest.open( 'GET', url, true );\n\n\t\t\trequest.addEventListener( 'load', function ( event ) {\n\n\t\t\t\tconst response = this.response;\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tif ( this.status === 200 || this.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\t\tCache.add( url, response );\n\n\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'progress', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'error', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'abort', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, false );\n\n\t\t\tif ( this.responseType !== undefined ) request.responseType = this.responseType;\n\t\t\tif ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;\n\n\t\t\tif ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' );\n\n\t\t\tfor ( const header in this.requestHeader ) {\n\n\t\t\t\trequest.setRequestHeader( header, this.requestHeader[ header ] );\n\n\t\t\t}\n\n\t\t\trequest.send( null );\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\treturn request;\n\n\t},\n\n\tsetResponseType: function ( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t},\n\n\tsetMimeType: function ( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction AnimationLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nAnimationLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: AnimationLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tconst animations = [];\n\n\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\tconst clip = AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n} );\n\n/**\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nfunction CompressedTextureLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nCompressedTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: CompressedTextureLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst images = [];\n\n\t\tconst texture = new CompressedTexture();\n\t\ttexture.image = images;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 )\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tfor ( let i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tconst faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( let f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( let i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n} );\n\nfunction ImageLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nImageLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: ImageLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.substr( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t}\n\n} );\n\nfunction CubeTextureLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nCubeTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: CubeTextureLoader,\n\n\tload: function ( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n} );\n\n/**\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nfunction DataTextureLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nDataTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: DataTextureLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst texture = new DataTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tconst texData = scope.parse( buffer );\n\n\t\t\tif ( ! texData ) return;\n\n\t\t\tif ( texData.image !== undefined ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( texData.data !== undefined ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;\n\n\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\n\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter; // presumably...\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmapCount === 1 ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n} );\n\nfunction TextureLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: TextureLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new Texture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\n\t\t\t// JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB.\n\t\t\tconst isJPEG = url.search( /\\.jpe?g($|\\?)/i ) > 0 || url.search( /^data\\:image\\/jpeg/ ) === 0;\n\n\t\t\ttexture.format = isJPEG ? RGBFormat : RGBAFormat;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n} );\n\n/**\n * Extensible curve object.\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\nfunction Curve() {\n\n\tthis.type = 'Curve';\n\n\tthis.arcLengthDivisions = 200;\n\n}\n\nObject.assign( Curve.prototype, {\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint: function ( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t},\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt: function ( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t},\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints: function ( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints: function ( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\t// Get total curve arc length\n\n\tgetLength: function () {\n\n\t\tconst lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t},\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = this.arcLengthDivisions;\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tconst cache = [];\n\t\tlet current, last = this.getPoint( 0 );\n\t\tlet sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( let p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t},\n\n\tupdateArcLengths: function () {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t},\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping: function ( u, distance ) {\n\n\t\tconst arcLengths = this.getLengths();\n\n\t\tlet i = 0;\n\t\tconst il = arcLengths.length;\n\n\t\tlet targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tlet low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tconst lengthBefore = arcLengths[ i ];\n\t\tconst lengthAfter = arcLengths[ i + 1 ];\n\n\t\tconst segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tconst segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tconst t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t},\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent: function ( t, optionalTarget ) {\n\n\t\tconst delta = 0.0001;\n\t\tlet t1 = t - delta;\n\t\tlet t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tconst pt1 = this.getPoint( t1 );\n\t\tconst pt2 = this.getPoint( t2 );\n\n\t\tconst tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() );\n\n\t\ttangent.copy( pt2 ).sub( pt1 ).normalize();\n\n\t\treturn tangent;\n\n\t},\n\n\tgetTangentAt: function ( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t, optionalTarget );\n\n\t},\n\n\tcomputeFrenetFrames: function ( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tconst normal = new Vector3();\n\n\t\tconst tangents = [];\n\t\tconst normals = [];\n\t\tconst binormals = [];\n\n\t\tconst vec = new Vector3();\n\t\tconst mat = new Matrix4();\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst u = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u, new Vector3() );\n\t\t\ttangents[ i ].normalize();\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tlet min = Number.MAX_VALUE;\n\t\tconst tx = Math.abs( tangents[ 0 ].x );\n\t\tconst ty = Math.abs( tangents[ 0 ].y );\n\t\tconst tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\tconst theta = Math.acos( MathUtils.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\tlet theta = Math.acos( MathUtils.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'EllipseCurve';\n\n\tthis.aX = aX || 0;\n\tthis.aY = aY || 0;\n\n\tthis.xRadius = xRadius || 1;\n\tthis.yRadius = yRadius || 1;\n\n\tthis.aStartAngle = aStartAngle || 0;\n\tthis.aEndAngle = aEndAngle || 2 * Math.PI;\n\n\tthis.aClockwise = aClockwise || false;\n\n\tthis.aRotation = aRotation || 0;\n\n}\n\nEllipseCurve.prototype = Object.create( Curve.prototype );\nEllipseCurve.prototype.constructor = EllipseCurve;\n\nEllipseCurve.prototype.isEllipseCurve = true;\n\nEllipseCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tconst point = optionalTarget || new Vector2();\n\n\tconst twoPi = Math.PI * 2;\n\tlet deltaAngle = this.aEndAngle - this.aStartAngle;\n\tconst samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t// ensures that deltaAngle is 0 .. 2 PI\n\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\tif ( samePoints ) {\n\n\t\t\tdeltaAngle = 0;\n\n\t\t} else {\n\n\t\t\tdeltaAngle = twoPi;\n\n\t\t}\n\n\t}\n\n\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\tdeltaAngle = - twoPi;\n\n\t\t} else {\n\n\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t}\n\n\t}\n\n\tconst angle = this.aStartAngle + t * deltaAngle;\n\tlet x = this.aX + this.xRadius * Math.cos( angle );\n\tlet y = this.aY + this.yRadius * Math.sin( angle );\n\n\tif ( this.aRotation !== 0 ) {\n\n\t\tconst cos = Math.cos( this.aRotation );\n\t\tconst sin = Math.sin( this.aRotation );\n\n\t\tconst tx = x - this.aX;\n\t\tconst ty = y - this.aY;\n\n\t\t// Rotate the point about the center of the ellipse.\n\t\tx = tx * cos - ty * sin + this.aX;\n\t\ty = tx * sin + ty * cos + this.aY;\n\n\t}\n\n\treturn point.set( x, y );\n\n};\n\nEllipseCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.aX = source.aX;\n\tthis.aY = source.aY;\n\n\tthis.xRadius = source.xRadius;\n\tthis.yRadius = source.yRadius;\n\n\tthis.aStartAngle = source.aStartAngle;\n\tthis.aEndAngle = source.aEndAngle;\n\n\tthis.aClockwise = source.aClockwise;\n\n\tthis.aRotation = source.aRotation;\n\n\treturn this;\n\n};\n\n\nEllipseCurve.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.aX = this.aX;\n\tdata.aY = this.aY;\n\n\tdata.xRadius = this.xRadius;\n\tdata.yRadius = this.yRadius;\n\n\tdata.aStartAngle = this.aStartAngle;\n\tdata.aEndAngle = this.aEndAngle;\n\n\tdata.aClockwise = this.aClockwise;\n\n\tdata.aRotation = this.aRotation;\n\n\treturn data;\n\n};\n\nEllipseCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.aX = json.aX;\n\tthis.aY = json.aY;\n\n\tthis.xRadius = json.xRadius;\n\tthis.yRadius = json.yRadius;\n\n\tthis.aStartAngle = json.aStartAngle;\n\tthis.aEndAngle = json.aEndAngle;\n\n\tthis.aClockwise = json.aClockwise;\n\n\tthis.aRotation = json.aRotation;\n\n\treturn this;\n\n};\n\nfunction ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\tEllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\tthis.type = 'ArcCurve';\n\n}\n\nArcCurve.prototype = Object.create( EllipseCurve.prototype );\nArcCurve.prototype.constructor = ArcCurve;\n\nArcCurve.prototype.isArcCurve = true;\n\n/**\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tlet c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t * p(0) = x0, p(1) = x1\n\t * and\n\t * p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tlet t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tlet t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tconst t2 = t * t;\n\t\t\tconst t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nconst tmp = new Vector3();\nconst px = new CubicPoly(), py = new CubicPoly(), pz = new CubicPoly();\n\nfunction CatmullRomCurve3( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CatmullRomCurve3';\n\n\tthis.points = points;\n\tthis.closed = closed;\n\tthis.curveType = curveType;\n\tthis.tension = tension;\n\n}\n\nCatmullRomCurve3.prototype = Object.create( Curve.prototype );\nCatmullRomCurve3.prototype.constructor = CatmullRomCurve3;\n\nCatmullRomCurve3.prototype.isCatmullRomCurve3 = true;\n\nCatmullRomCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) {\n\n\tconst point = optionalTarget;\n\n\tconst points = this.points;\n\tconst l = points.length;\n\n\tconst p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\tlet intPoint = Math.floor( p );\n\tlet weight = p - intPoint;\n\n\tif ( this.closed ) {\n\n\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\tintPoint = l - 2;\n\t\tweight = 1;\n\n\t}\n\n\tlet p0, p3; // 4 points (p1 & p2 defined below)\n\n\tif ( this.closed || intPoint > 0 ) {\n\n\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t} else {\n\n\t\t// extrapolate first point\n\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\tp0 = tmp;\n\n\t}\n\n\tconst p1 = points[ intPoint % l ];\n\tconst p2 = points[ ( intPoint + 1 ) % l ];\n\n\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t} else {\n\n\t\t// extrapolate last point\n\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\tp3 = tmp;\n\n\t}\n\n\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t// init Centripetal / Chordal Catmull-Rom\n\t\tconst pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\tlet dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\tlet dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\tlet dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t// safety check for repeated points\n\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t}\n\n\tpoint.set(\n\t\tpx.calc( weight ),\n\t\tpy.calc( weight ),\n\t\tpz.calc( weight )\n\t);\n\n\treturn point;\n\n};\n\nCatmullRomCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.points = [];\n\n\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\tconst point = source.points[ i ];\n\n\t\tthis.points.push( point.clone() );\n\n\t}\n\n\tthis.closed = source.closed;\n\tthis.curveType = source.curveType;\n\tthis.tension = source.tension;\n\n\treturn this;\n\n};\n\nCatmullRomCurve3.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.points = [];\n\n\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\tconst point = this.points[ i ];\n\t\tdata.points.push( point.toArray() );\n\n\t}\n\n\tdata.closed = this.closed;\n\tdata.curveType = this.curveType;\n\tdata.tension = this.tension;\n\n\treturn data;\n\n};\n\nCatmullRomCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.points = [];\n\n\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\tconst point = json.points[ i ];\n\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t}\n\n\tthis.closed = json.closed;\n\tthis.curveType = json.curveType;\n\tthis.tension = json.tension;\n\n\treturn this;\n\n};\n\n/**\n * Bezier Curves formulas obtained from\n * http://en.wikipedia.org/wiki/Bézier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tconst v0 = ( p2 - p0 ) * 0.5;\n\tconst v1 = ( p3 - p1 ) * 0.5;\n\tconst t2 = t * t;\n\tconst t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tconst k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\nfunction CubicBezierCurve( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CubicBezierCurve';\n\n\tthis.v0 = v0;\n\tthis.v1 = v1;\n\tthis.v2 = v2;\n\tthis.v3 = v3;\n\n}\n\nCubicBezierCurve.prototype = Object.create( Curve.prototype );\nCubicBezierCurve.prototype.constructor = CubicBezierCurve;\n\nCubicBezierCurve.prototype.isCubicBezierCurve = true;\n\nCubicBezierCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) {\n\n\tconst point = optionalTarget;\n\n\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\tpoint.set(\n\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t);\n\n\treturn point;\n\n};\n\nCubicBezierCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\tthis.v3.copy( source.v3 );\n\n\treturn this;\n\n};\n\nCubicBezierCurve.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\tdata.v3 = this.v3.toArray();\n\n\treturn data;\n\n};\n\nCubicBezierCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\tthis.v3.fromArray( json.v3 );\n\n\treturn this;\n\n};\n\nfunction CubicBezierCurve3( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CubicBezierCurve3';\n\n\tthis.v0 = v0;\n\tthis.v1 = v1;\n\tthis.v2 = v2;\n\tthis.v3 = v3;\n\n}\n\nCubicBezierCurve3.prototype = Object.create( Curve.prototype );\nCubicBezierCurve3.prototype.constructor = CubicBezierCurve3;\n\nCubicBezierCurve3.prototype.isCubicBezierCurve3 = true;\n\nCubicBezierCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) {\n\n\tconst point = optionalTarget;\n\n\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\tpoint.set(\n\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t);\n\n\treturn point;\n\n};\n\nCubicBezierCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\tthis.v3.copy( source.v3 );\n\n\treturn this;\n\n};\n\nCubicBezierCurve3.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\tdata.v3 = this.v3.toArray();\n\n\treturn data;\n\n};\n\nCubicBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\tthis.v3.fromArray( json.v3 );\n\n\treturn this;\n\n};\n\nfunction LineCurve( v1 = new Vector2(), v2 = new Vector2() ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'LineCurve';\n\n\tthis.v1 = v1;\n\tthis.v2 = v2;\n\n}\n\nLineCurve.prototype = Object.create( Curve.prototype );\nLineCurve.prototype.constructor = LineCurve;\n\nLineCurve.prototype.isLineCurve = true;\n\nLineCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) {\n\n\tconst point = optionalTarget;\n\n\tif ( t === 1 ) {\n\n\t\tpoint.copy( this.v2 );\n\n\t} else {\n\n\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t}\n\n\treturn point;\n\n};\n\n// Line curve is linear, so we can overwrite default getPointAt\n\nLineCurve.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\treturn this.getPoint( u, optionalTarget );\n\n};\n\nLineCurve.prototype.getTangent = function ( t, optionalTarget ) {\n\n\tconst tangent = optionalTarget || new Vector2();\n\n\ttangent.copy( this.v2 ).sub( this.v1 ).normalize();\n\n\treturn tangent;\n\n};\n\nLineCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nLineCurve.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nLineCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction LineCurve3( v1 = new Vector3(), v2 = new Vector3() ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'LineCurve3';\n\n\tthis.v1 = v1;\n\tthis.v2 = v2;\n\n}\n\nLineCurve3.prototype = Object.create( Curve.prototype );\nLineCurve3.prototype.constructor = LineCurve3;\n\nLineCurve3.prototype.isLineCurve3 = true;\n\nLineCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) {\n\n\tconst point = optionalTarget;\n\n\tif ( t === 1 ) {\n\n\t\tpoint.copy( this.v2 );\n\n\t} else {\n\n\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t}\n\n\treturn point;\n\n};\n\n// Line curve is linear, so we can overwrite default getPointAt\n\nLineCurve3.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\treturn this.getPoint( u, optionalTarget );\n\n};\n\nLineCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nLineCurve3.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nLineCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction QuadraticBezierCurve( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'QuadraticBezierCurve';\n\n\tthis.v0 = v0;\n\tthis.v1 = v1;\n\tthis.v2 = v2;\n\n}\n\nQuadraticBezierCurve.prototype = Object.create( Curve.prototype );\nQuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve;\n\nQuadraticBezierCurve.prototype.isQuadraticBezierCurve = true;\n\nQuadraticBezierCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) {\n\n\tconst point = optionalTarget;\n\n\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\tpoint.set(\n\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t);\n\n\treturn point;\n\n};\n\nQuadraticBezierCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nQuadraticBezierCurve.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nQuadraticBezierCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction QuadraticBezierCurve3( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'QuadraticBezierCurve3';\n\n\tthis.v0 = v0;\n\tthis.v1 = v1;\n\tthis.v2 = v2;\n\n}\n\nQuadraticBezierCurve3.prototype = Object.create( Curve.prototype );\nQuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3;\n\nQuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true;\n\nQuadraticBezierCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) {\n\n\tconst point = optionalTarget;\n\n\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\tpoint.set(\n\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t);\n\n\treturn point;\n\n};\n\nQuadraticBezierCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nQuadraticBezierCurve3.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nQuadraticBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction SplineCurve( points = [] ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'SplineCurve';\n\n\tthis.points = points;\n\n}\n\nSplineCurve.prototype = Object.create( Curve.prototype );\nSplineCurve.prototype.constructor = SplineCurve;\n\nSplineCurve.prototype.isSplineCurve = true;\n\nSplineCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) {\n\n\tconst point = optionalTarget;\n\n\tconst points = this.points;\n\tconst p = ( points.length - 1 ) * t;\n\n\tconst intPoint = Math.floor( p );\n\tconst weight = p - intPoint;\n\n\tconst p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\tconst p1 = points[ intPoint ];\n\tconst p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\tconst p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\tpoint.set(\n\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t);\n\n\treturn point;\n\n};\n\nSplineCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.points = [];\n\n\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\tconst point = source.points[ i ];\n\n\t\tthis.points.push( point.clone() );\n\n\t}\n\n\treturn this;\n\n};\n\nSplineCurve.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.points = [];\n\n\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\tconst point = this.points[ i ];\n\t\tdata.points.push( point.toArray() );\n\n\t}\n\n\treturn data;\n\n};\n\nSplineCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.points = [];\n\n\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\tconst point = json.points[ i ];\n\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t}\n\n\treturn this;\n\n};\n\nvar Curves = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n * curves, but retains the api of a curve\n **************************************************************/\n\nfunction CurvePath() {\n\n\tCurve.call( this );\n\n\tthis.type = 'CurvePath';\n\n\tthis.curves = [];\n\tthis.autoClose = false; // Automatically closes the path\n\n}\n\nCurvePath.prototype = Object.assign( Object.create( Curve.prototype ), {\n\n\tconstructor: CurvePath,\n\n\tadd: function ( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t},\n\n\tclosePath: function () {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tconst startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tconst endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tthis.curves.push( new LineCurve( endPoint, startPoint ) );\n\n\t\t}\n\n\t},\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint: function ( t ) {\n\n\t\tconst d = t * this.getLength();\n\t\tconst curveLengths = this.getCurveLengths();\n\t\tlet i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tconst diff = curveLengths[ i ] - d;\n\t\t\t\tconst curve = this.curves[ i ];\n\n\t\t\t\tconst segmentLength = curve.getLength();\n\t\t\t\tconst u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction Path( points ) {\n\n\tCurvePath.call( this );\n\n\tthis.type = 'Path';\n\n\tthis.currentPoint = new Vector2();\n\n\tif ( points ) {\n\n\t\tthis.setFromPoints( points );\n\n\t}\n\n}\n\nPath.prototype = Object.assign( Object.create( CurvePath.prototype ), {\n\n\tconstructor: Path,\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( let i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tmoveTo: function ( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t\treturn this;\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tconst curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t\treturn this;\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tconst curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t},\n\n\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tconst curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t},\n\n\tsplineThru: function ( pts /*Array of Vector*/ ) {\n\n\t\tconst npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tconst curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\treturn this;\n\n\t},\n\n\tarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t},\n\n\tabsarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t},\n\n\tellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\treturn this;\n\n\t},\n\n\tabsellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tconst firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tconst lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tCurvePath.prototype.copy.call( this, source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = CurvePath.prototype.toJSON.call( this );\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tCurvePath.prototype.fromJSON.call( this, json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction Shape( points ) {\n\n\tPath.call( this, points );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.type = 'Shape';\n\n\tthis.holes = [];\n\n}\n\nShape.prototype = Object.assign( Object.create( Path.prototype ), {\n\n\tconstructor: Shape,\n\n\tgetPointsHoles: function ( divisions ) {\n\n\t\tconst holesPts = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t},\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints: function ( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tPath.prototype.copy.call( this, source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = Path.prototype.toJSON.call( this );\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tPath.prototype.fromJSON.call( this, json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction Light( color, intensity = 1 ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Light';\n\n\tthis.color = new Color( color );\n\tthis.intensity = intensity;\n\n}\n\nLight.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Light,\n\n\tisLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction HemisphereLight( skyColor, groundColor, intensity ) {\n\n\tLight.call( this, skyColor, intensity );\n\n\tthis.type = 'HemisphereLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.groundColor = new Color( groundColor );\n\n}\n\nHemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: HemisphereLight,\n\n\tisHemisphereLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction LightShadow( camera ) {\n\n\tthis.camera = camera;\n\n\tthis.bias = 0;\n\tthis.normalBias = 0;\n\tthis.radius = 1;\n\n\tthis.mapSize = new Vector2( 512, 512 );\n\n\tthis.map = null;\n\tthis.mapPass = null;\n\tthis.matrix = new Matrix4();\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis._frustum = new Frustum();\n\tthis._frameExtents = new Vector2( 1, 1 );\n\n\tthis._viewportCount = 1;\n\n\tthis._viewports = [\n\n\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t];\n\n}\n\nObject.assign( LightShadow.prototype, {\n\n\t_projScreenMatrix: new Matrix4(),\n\n\t_lightPositionWorld: new Vector3(),\n\n\t_lookTarget: new Vector3(),\n\n\tgetViewportCount: function () {\n\n\t\treturn this._viewportCount;\n\n\t},\n\n\tgetFrustum: function () {\n\n\t\treturn this._frustum;\n\n\t},\n\n\tupdateMatrices: function ( light ) {\n\n\t\tconst shadowCamera = this.camera,\n\t\t\tshadowMatrix = this.matrix,\n\t\t\tprojScreenMatrix = this._projScreenMatrix,\n\t\t\tlookTarget = this._lookTarget,\n\t\t\tlightPositionWorld = this._lightPositionWorld;\n\n\t\tlightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tshadowCamera.position.copy( lightPositionWorld );\n\n\t\tlookTarget.setFromMatrixPosition( light.target.matrixWorld );\n\t\tshadowCamera.lookAt( lookTarget );\n\t\tshadowCamera.updateMatrixWorld();\n\n\t\tprojScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( projScreenMatrix );\n\n\t\tshadowMatrix.set(\n\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t);\n\n\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\n\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\n\n\t},\n\n\tgetViewport: function ( viewportIndex ) {\n\n\t\treturn this._viewports[ viewportIndex ];\n\n\t},\n\n\tgetFrameExtents: function () {\n\n\t\treturn this._frameExtents;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst object = {};\n\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.normalBias !== 0 ) object.normalBias = this.normalBias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n} );\n\nfunction SpotLightShadow() {\n\n\tLightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\tthis.focus = 1;\n\n}\n\nSpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: SpotLightShadow,\n\n\tisSpotLightShadow: true,\n\n\tupdateMatrices: function ( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = MathUtils.RAD2DEG * 2 * light.angle * this.focus;\n\t\tconst aspect = this.mapSize.width / this.mapSize.height;\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\tLightShadow.prototype.updateMatrices.call( this, light );\n\n\t}\n\n} );\n\nfunction SpotLight( color, intensity, distance, angle, penumbra, decay ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'SpotLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.target = new Object3D();\n\n\tObject.defineProperty( this, 'power', {\n\t\tget: function () {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\treturn this.intensity * Math.PI;\n\n\t\t},\n\t\tset: function ( power ) {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\tthis.intensity = power / Math.PI;\n\n\t\t}\n\t} );\n\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\tthis.angle = ( angle !== undefined ) ? angle : Math.PI / 3;\n\tthis.penumbra = ( penumbra !== undefined ) ? penumbra : 0;\n\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\tthis.shadow = new SpotLightShadow();\n\n}\n\nSpotLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: SpotLight,\n\n\tisSpotLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction PointLightShadow() {\n\n\tLightShadow.call( this, new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\tthis._frameExtents = new Vector2( 4, 2 );\n\n\tthis._viewportCount = 6;\n\n\tthis._viewports = [\n\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t// following orientation:\n\t\t//\n\t\t// xzXZ\n\t\t// y Y\n\t\t//\n\t\t// X - Positive x direction\n\t\t// x - Negative x direction\n\t\t// Y - Positive y direction\n\t\t// y - Negative y direction\n\t\t// Z - Positive z direction\n\t\t// z - Negative z direction\n\n\t\t// positive X\n\t\tnew Vector4( 2, 1, 1, 1 ),\n\t\t// negative X\n\t\tnew Vector4( 0, 1, 1, 1 ),\n\t\t// positive Z\n\t\tnew Vector4( 3, 1, 1, 1 ),\n\t\t// negative Z\n\t\tnew Vector4( 1, 1, 1, 1 ),\n\t\t// positive Y\n\t\tnew Vector4( 3, 0, 1, 1 ),\n\t\t// negative Y\n\t\tnew Vector4( 1, 0, 1, 1 )\n\t];\n\n\tthis._cubeDirections = [\n\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t];\n\n\tthis._cubeUps = [\n\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t];\n\n}\n\nPointLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: PointLightShadow,\n\n\tisPointLightShadow: true,\n\n\tupdateMatrices: function ( light, viewportIndex = 0 ) {\n\n\t\tconst camera = this.camera,\n\t\t\tshadowMatrix = this.matrix,\n\t\t\tlightPositionWorld = this._lightPositionWorld,\n\t\t\tlookTarget = this._lookTarget,\n\t\t\tprojScreenMatrix = this._projScreenMatrix;\n\n\t\tlightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tcamera.position.copy( lightPositionWorld );\n\n\t\tlookTarget.copy( camera.position );\n\t\tlookTarget.add( this._cubeDirections[ viewportIndex ] );\n\t\tcamera.up.copy( this._cubeUps[ viewportIndex ] );\n\t\tcamera.lookAt( lookTarget );\n\t\tcamera.updateMatrixWorld();\n\n\t\tshadowMatrix.makeTranslation( - lightPositionWorld.x, - lightPositionWorld.y, - lightPositionWorld.z );\n\n\t\tprojScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( projScreenMatrix );\n\n\t}\n\n} );\n\nfunction PointLight( color, intensity, distance, decay ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'PointLight';\n\n\tObject.defineProperty( this, 'power', {\n\t\tget: function () {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\treturn this.intensity * 4 * Math.PI;\n\n\t\t},\n\t\tset: function ( power ) {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t\t}\n\t} );\n\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\tthis.shadow = new PointLightShadow();\n\n}\n\nPointLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: PointLight,\n\n\tisPointLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction OrthographicCamera( left, right, top, bottom, near, far ) {\n\n\tCamera.call( this );\n\n\tthis.type = 'OrthographicCamera';\n\n\tthis.zoom = 1;\n\tthis.view = null;\n\n\tthis.left = ( left !== undefined ) ? left : - 1;\n\tthis.right = ( right !== undefined ) ? right : 1;\n\tthis.top = ( top !== undefined ) ? top : 1;\n\tthis.bottom = ( bottom !== undefined ) ? bottom : - 1;\n\n\tthis.near = ( near !== undefined ) ? near : 0.1;\n\tthis.far = ( far !== undefined ) ? far : 2000;\n\n\tthis.updateProjectionMatrix();\n\n}\n\nOrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\tconstructor: OrthographicCamera,\n\n\tisOrthographicCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t},\n\n\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tclearViewOffset: function () {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tupdateProjectionMatrix: function () {\n\n\t\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tconst cx = ( this.right + this.left ) / 2;\n\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\tlet left = cx - dx;\n\t\tlet right = cx + dx;\n\t\tlet top = cy + dy;\n\t\tlet bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\tright = left + scaleW * this.view.width;\n\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction DirectionalLightShadow() {\n\n\tLightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n}\n\nDirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: DirectionalLightShadow,\n\n\tisDirectionalLightShadow: true,\n\n\tupdateMatrices: function ( light ) {\n\n\t\tLightShadow.prototype.updateMatrices.call( this, light );\n\n\t}\n\n} );\n\nfunction DirectionalLight( color, intensity ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'DirectionalLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.target = new Object3D();\n\n\tthis.shadow = new DirectionalLightShadow();\n\n}\n\nDirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: DirectionalLight,\n\n\tisDirectionalLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction AmbientLight( color, intensity ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'AmbientLight';\n\n}\n\nAmbientLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: AmbientLight,\n\n\tisAmbientLight: true\n\n} );\n\nfunction RectAreaLight( color, intensity, width, height ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'RectAreaLight';\n\n\tthis.width = ( width !== undefined ) ? width : 10;\n\tthis.height = ( height !== undefined ) ? height : 10;\n\n}\n\nRectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: RectAreaLight,\n\n\tisRectAreaLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Light.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * Primary reference:\n * https://graphics.stanford.edu/papers/envmap/envmap.pdf\n *\n * Secondary reference:\n * https://www.ppsloan.org/publications/StupidSH36.pdf\n */\n\n// 3-band SH defined by 9 coefficients\n\nclass SphericalHarmonics3 {\n\n\tconstructor() {\n\n\t\tObject.defineProperty( this, 'isSphericalHarmonics3', { value: true } );\n\n\t\tthis.coefficients = [];\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients.push( new Vector3() );\n\n\t\t}\n\n\t}\n\n\tset( coefficients ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].copy( coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tzero() {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].set( 0, 0, 0 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// get the radiance in the direction of the normal\n\t// target is a Vector3\n\tgetAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 );\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 0.488603 * y );\n\t\ttarget.addScaledVector( coeff[ 2 ], 0.488603 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 0.488603 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) );\n\t\ttarget.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) );\n\t\ttarget.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) );\n\n\t\treturn target;\n\n\t}\n\n\t// get the irradiance (radiance convolved with cosine lobe) in the direction of the normal\n\t// target is a Vector3\n\t// https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\tgetIrradianceAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603\n\t\ttarget.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548\n\t\ttarget.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3\n\t\ttarget.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274\n\n\t\treturn target;\n\n\t}\n\n\tadd( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].add( sh.coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\taddScaledSH( sh, s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tscale( s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].multiplyScalar( s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tlerp( sh, alpha ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].lerp( sh.coefficients[ i ], alpha );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcopy( sh ) {\n\n\t\treturn this.set( sh.coefficients );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].fromArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].toArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n\t// evaluate the basis functions\n\t// shBasis is an Array[ 9 ]\n\tstatic getBasisAt( normal, shBasis ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t// band 0\n\t\tshBasis[ 0 ] = 0.282095;\n\n\t\t// band 1\n\t\tshBasis[ 1 ] = 0.488603 * y;\n\t\tshBasis[ 2 ] = 0.488603 * z;\n\t\tshBasis[ 3 ] = 0.488603 * x;\n\n\t\t// band 2\n\t\tshBasis[ 4 ] = 1.092548 * x * y;\n\t\tshBasis[ 5 ] = 1.092548 * y * z;\n\t\tshBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 );\n\t\tshBasis[ 7 ] = 1.092548 * x * z;\n\t\tshBasis[ 8 ] = 0.546274 * ( x * x - y * y );\n\n\t}\n\n}\n\nfunction LightProbe( sh, intensity ) {\n\n\tLight.call( this, undefined, intensity );\n\n\tthis.type = 'LightProbe';\n\n\tthis.sh = ( sh !== undefined ) ? sh : new SphericalHarmonics3();\n\n}\n\nLightProbe.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: LightProbe,\n\n\tisLightProbe: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.sh.copy( source.sh );\n\n\t\treturn this;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tthis.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();\n\t\tthis.sh.fromArray( json.sh );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Light.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.sh = this.sh.toArray();\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction MaterialLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n\tthis.textures = {};\n\n}\n\nMaterialLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: MaterialLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tconst textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tconst material = new Materials[ json.type ]();\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.sheen !== undefined ) material.sheen = new Color().setHex( json.sheen );\n\t\tif ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;\n\t\tif ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.combine !== undefined ) material.combine = json.combine;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\n\t\tif ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;\n\t\tif ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;\n\t\tif ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;\n\t\tif ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;\n\t\tif ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask;\n\t\tif ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;\n\t\tif ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;\n\t\tif ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;\n\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== 1 ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.skinning !== undefined ) material.skinning = json.skinning;\n\t\tif ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets;\n\t\tif ( json.morphNormals !== undefined ) material.morphNormals = json.morphNormals;\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.vertexTangents !== undefined ) material.vertexTangents = json.vertexTangents;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\n\t\tif ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped;\n\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\tif ( json.vertexColors !== undefined ) {\n\n\t\t\tif ( typeof json.vertexColors === 'number' ) {\n\n\t\t\t\tmaterial.vertexColors = ( json.vertexColors > 0 ) ? true : false;\n\n\t\t\t} else {\n\n\t\t\t\tmaterial.vertexColors = json.vertexColors;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Shader Material\n\n\t\tif ( json.uniforms !== undefined ) {\n\n\t\t\tfor ( const name in json.uniforms ) {\n\n\t\t\t\tconst uniform = json.uniforms[ name ];\n\n\t\t\t\tmaterial.uniforms[ name ] = {};\n\n\t\t\t\tswitch ( uniform.type ) {\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = getTexture( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Color().setHex( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector2().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = uniform.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.defines !== undefined ) material.defines = json.defines;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\n\t\tif ( json.extensions !== undefined ) {\n\n\t\t\tfor ( const key in json.extensions ) {\n\n\t\t\t\tmaterial.extensions[ key ] = json.extensions[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Deprecated\n\n\t\tif ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\t\tif ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap );\n\n\t\tif ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap );\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tlet normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\t\tif ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\t\tif ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\tif ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap );\n\t\tif ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap );\n\t\tif ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap );\n\t\tif ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale );\n\n\t\tif ( json.transmission !== undefined ) material.transmission = json.transmission;\n\t\tif ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );\n\n\t\treturn material;\n\n\t},\n\n\tsetTextures: function ( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\n\n\t}\n\n} );\n\nconst LoaderUtils = {\n\n\tdecodeText: function ( array ) {\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tlet s = '';\n\n\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\t// merges multi-byte utf-8 characters.\n\n\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t} catch ( e ) { // see #16358\n\n\t\t\treturn s;\n\n\t\t}\n\n\t},\n\n\textractUrlBase: function ( url ) {\n\n\t\tconst index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.substr( 0, index + 1 );\n\n\t}\n\n};\n\nfunction InstancedBufferGeometry() {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'InstancedBufferGeometry';\n\tthis.instanceCount = Infinity;\n\n}\n\nInstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), {\n\n\tconstructor: InstancedBufferGeometry,\n\n\tisInstancedBufferGeometry: true,\n\n\tcopy: function ( source ) {\n\n\t\tBufferGeometry.prototype.copy.call( this, source );\n\n\t\tthis.instanceCount = source.instanceCount;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\tdata.instanceCount = this.instanceCount;\n\n\t\tdata.isInstancedBufferGeometry = true;\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction InstancedBufferAttribute( array, itemSize, normalized, meshPerAttribute ) {\n\n\tif ( typeof ( normalized ) === 'number' ) {\n\n\t\tmeshPerAttribute = normalized;\n\n\t\tnormalized = false;\n\n\t\tconsole.error( 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.' );\n\n\t}\n\n\tBufferAttribute.call( this, array, itemSize, normalized );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), {\n\n\tconstructor: InstancedBufferAttribute,\n\n\tisInstancedBufferAttribute: true,\n\n\tcopy: function ( source ) {\n\n\t\tBufferAttribute.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ()\t{\n\n\t\tconst data = BufferAttribute.prototype.toJSON.call( this );\n\n\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\tdata.isInstancedBufferAttribute = true;\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction BufferGeometryLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nBufferGeometryLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: BufferGeometryLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tconst interleavedBufferMap = {};\n\t\tconst arrayBufferMap = {};\n\n\t\tfunction getInterleavedBuffer( json, uuid ) {\n\n\t\t\tif ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ];\n\n\t\t\tconst interleavedBuffers = json.interleavedBuffers;\n\t\t\tconst interleavedBuffer = interleavedBuffers[ uuid ];\n\n\t\t\tconst buffer = getArrayBuffer( json, interleavedBuffer.buffer );\n\n\t\t\tconst array = getTypedArray( interleavedBuffer.type, buffer );\n\t\t\tconst ib = new InterleavedBuffer( array, interleavedBuffer.stride );\n\t\t\tib.uuid = interleavedBuffer.uuid;\n\n\t\t\tinterleavedBufferMap[ uuid ] = ib;\n\n\t\t\treturn ib;\n\n\t\t}\n\n\t\tfunction getArrayBuffer( json, uuid ) {\n\n\t\t\tif ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ];\n\n\t\t\tconst arrayBuffers = json.arrayBuffers;\n\t\t\tconst arrayBuffer = arrayBuffers[ uuid ];\n\n\t\t\tconst ab = new Uint32Array( arrayBuffer ).buffer;\n\n\t\t\tarrayBufferMap[ uuid ] = ab;\n\n\t\t\treturn ab;\n\n\t\t}\n\n\t\tconst geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry();\n\n\t\tconst index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst typedArray = getTypedArray( index.type, index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tconst attributes = json.data.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\t\t\tlet bufferAttribute;\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t} else {\n\n\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\tconst bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute;\n\t\t\t\tbufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\tgeometry.setAttribute( key, bufferAttribute );\n\n\t\t}\n\n\t\tconst morphAttributes = json.data.morphAttributes;\n\n\t\tif ( morphAttributes ) {\n\n\t\t\tfor ( const key in morphAttributes ) {\n\n\t\t\t\tconst attributeArray = morphAttributes[ key ];\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attribute = attributeArray[ i ];\n\t\t\t\t\tlet bufferAttribute;\n\n\t\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\t\t\tbufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\t\t\tarray.push( bufferAttribute );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.morphAttributes[ key ] = array;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst morphTargetsRelative = json.data.morphTargetsRelative;\n\n\t\tif ( morphTargetsRelative ) {\n\n\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t}\n\n\t\tconst groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( let i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tconst center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\tif ( json.name ) geometry.name = json.name;\n\t\tif ( json.userData ) geometry.userData = json.userData;\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\nclass ObjectLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json, onLoad ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\n\t\t//\n\n\t\tif ( onLoad !== undefined ) {\n\n\t\t\tlet hasImages = false;\n\n\t\t\tfor ( const uuid in images ) {\n\n\t\t\t\tif ( images[ uuid ] instanceof HTMLImageElement ) {\n\n\t\t\t\t\thasImages = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasImages === false ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tparseShapes( json ) {\n\n\t\tconst shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n\tparseSkeletons( json, object ) {\n\n\t\tconst skeletons = {};\n\t\tconst bones = {};\n\n\t\t// generate bone lookup table\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isBone ) bones[ child.uuid ] = child;\n\n\t\t} );\n\n\t\t// create skeletons\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst skeleton = new Skeleton().fromJSON( json[ i ], bones );\n\n\t\t\t\tskeletons[ skeleton.uuid ] = skeleton;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn skeletons;\n\n\t}\n\n\tparseGeometries( json, shapes ) {\n\n\t\tconst geometries = {};\n\t\tlet geometryShapes;\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tlet geometry;\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'PlaneGeometry':\n\t\t\t\t\tcase 'PlaneBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BoxGeometry':\n\t\t\t\t\tcase 'BoxBufferGeometry':\n\t\t\t\t\tcase 'CubeGeometry': // backwards compatible\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.depth,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.depthSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CircleGeometry':\n\t\t\t\t\tcase 'CircleBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CylinderGeometry':\n\t\t\t\t\tcase 'CylinderBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radiusTop,\n\t\t\t\t\t\t\tdata.radiusBottom,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ConeGeometry':\n\t\t\t\t\tcase 'ConeBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SphereGeometry':\n\t\t\t\t\tcase 'SphereBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'DodecahedronGeometry':\n\t\t\t\t\tcase 'DodecahedronBufferGeometry':\n\t\t\t\t\tcase 'IcosahedronGeometry':\n\t\t\t\t\tcase 'IcosahedronBufferGeometry':\n\t\t\t\t\tcase 'OctahedronGeometry':\n\t\t\t\t\tcase 'OctahedronBufferGeometry':\n\t\t\t\t\tcase 'TetrahedronGeometry':\n\t\t\t\t\tcase 'TetrahedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.detail\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RingGeometry':\n\t\t\t\t\tcase 'RingBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.innerRadius,\n\t\t\t\t\t\t\tdata.outerRadius,\n\t\t\t\t\t\t\tdata.thetaSegments,\n\t\t\t\t\t\t\tdata.phiSegments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusGeometry':\n\t\t\t\t\tcase 'TorusBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.arc\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusKnotGeometry':\n\t\t\t\t\tcase 'TorusKnotBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.p,\n\t\t\t\t\t\t\tdata.q\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TubeGeometry':\n\t\t\t\t\tcase 'TubeBufferGeometry':\n\n\t\t\t\t\t\t// This only works for built-in curves (e.g. CatmullRomCurve3).\n\t\t\t\t\t\t// User defined curves or instances of CurvePath will not be deserialized.\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tnew Curves[ data.path.type ]().fromJSON( data.path ),\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.closed\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LatheGeometry':\n\t\t\t\t\tcase 'LatheBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.points,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PolyhedronGeometry':\n\t\t\t\t\tcase 'PolyhedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.vertices,\n\t\t\t\t\t\t\tdata.indices,\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.details\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ShapeGeometry':\n\t\t\t\t\tcase 'ShapeBufferGeometry':\n\n\t\t\t\t\t\tgeometryShapes = [];\n\n\t\t\t\t\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.curveSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\tcase 'ExtrudeGeometry':\n\t\t\t\t\tcase 'ExtrudeBufferGeometry':\n\n\t\t\t\t\t\tgeometryShapes = [];\n\n\t\t\t\t\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst extrudePath = data.options.extrudePath;\n\n\t\t\t\t\t\tif ( extrudePath !== undefined ) {\n\n\t\t\t\t\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.options\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BufferGeometry':\n\t\t\t\t\tcase 'InstancedBufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Geometry':\n\n\t\t\t\t\t\tconsole.error( 'THREE.ObjectLoader: Loading \"Geometry\" is not supported anymore.' );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Unsupported geometry type \"' + data.type + '\"' );\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\tif ( geometry.isBufferGeometry === true && data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t}\n\n\tparseMaterials( json, textures ) {\n\n\t\tconst cache = {}; // MultiMaterial\n\t\tconst materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.type === 'MultiMaterial' ) {\n\n\t\t\t\t\t// Deprecated\n\n\t\t\t\t\tconst array = [];\n\n\t\t\t\t\tfor ( let j = 0; j < data.materials.length; j ++ ) {\n\n\t\t\t\t\t\tconst material = data.materials[ j ];\n\n\t\t\t\t\t\tif ( cache[ material.uuid ] === undefined ) {\n\n\t\t\t\t\t\t\tcache[ material.uuid ] = loader.parse( material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tarray.push( cache[ material.uuid ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = array;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( cache[ data.uuid ] === undefined ) {\n\n\t\t\t\t\t\tcache[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = cache[ data.uuid ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\tparseAnimations( json ) {\n\n\t\tconst animations = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tconst clip = AnimationClip.parse( data );\n\n\t\t\t\tanimations[ clip.uuid ] = clip;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n\tparseImages( json, onLoad ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn loadImage( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tconst manager = new LoadingManager( onLoad );\n\n\t\t\tloader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\timages[ image.uuid ] = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = deserializeImage( image.url );\n\n\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\timages[ image.uuid ] = deserializedImage;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tparseTextures( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tconst textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tlet texture;\n\t\t\t\tconst image = images[ data.image ];\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture( image );\n\n\t\t\t\t\tif ( image.length === 6 ) texture.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( image && image.data ) {\n\n\t\t\t\t\t\ttexture = new DataTexture( image.data, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture = new Texture( image );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( image ) texture.needsUpdate = true; // textures can have undefined image data\n\n\t\t\t\t}\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\t\t\t\tif ( data.type !== undefined ) texture.type = data.type;\n\t\t\t\tif ( data.encoding !== undefined ) texture.encoding = data.encoding;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\tif ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;\n\t\t\t\tif ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t}\n\n\tparseObject( data, geometries, materials, animations ) {\n\n\t\tlet object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tlet geometry, material;\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LightProbe':\n\n\t\t\t\tobject = new LightProbe().fromJSON( data );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t \tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\tif ( data.bindMode !== undefined ) object.bindMode = data.bindMode;\n\t\t\t\tif ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix );\n\t\t\t\tif ( data.skeleton !== undefined ) object.skeleton = data.skeleton;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'InstancedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\t\t\t\tconst count = data.count;\n\t\t\t\tconst instanceMatrix = data.instanceMatrix;\n\n\t\t\t\tobject = new InstancedMesh( geometry, material, count );\n\t\t\t\tobject.instanceMatrix = new BufferAttribute( new Float32Array( instanceMatrix.array ), 16 );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Bone':\n\n\t\t\t\tobject = new Bone();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials, animations ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.animations !== undefined ) {\n\n\t\t\tconst objectAnimations = data.animations;\n\n\t\t\tfor ( let i = 0; i < objectAnimations.length; i ++ ) {\n\n\t\t\t\tconst uuid = objectAnimations[ i ];\n\n\t\t\t\tobject.animations.push( animations[ uuid ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tif ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate;\n\n\t\t\tconst levels = data.levels;\n\n\t\t\tfor ( let l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tconst level = levels[ l ];\n\t\t\t\tconst child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tbindSkeletons( object, skeletons ) {\n\n\t\tif ( Object.keys( skeletons ).length === 0 ) return;\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isSkinnedMesh === true && child.skeleton !== undefined ) {\n\n\t\t\t\tconst skeleton = skeletons[ child.skeleton ];\n\n\t\t\t\tif ( skeleton === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.bind( skeleton, child.bindMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/* DEPRECATED */\n\n\tsetTexturePath( value ) {\n\n\t\tconsole.warn( 'THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().' );\n\t\treturn this.setResourcePath( value );\n\n\t}\n\n}\n\nconst TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping,\n\tCubeUVRefractionMapping: CubeUVRefractionMapping\n};\n\nconst TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nconst TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipmapNearestFilter: NearestMipmapNearestFilter,\n\tNearestMipmapLinearFilter: NearestMipmapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipmapNearestFilter: LinearMipmapNearestFilter,\n\tLinearMipmapLinearFilter: LinearMipmapLinearFilter\n};\n\nfunction ImageBitmapLoader( manager ) {\n\n\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t}\n\n\tif ( typeof fetch === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t}\n\n\tLoader.call( this, manager );\n\n\tthis.options = { premultiplyAlpha: 'none' };\n\n}\n\nImageBitmapLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: ImageBitmapLoader,\n\n\tisImageBitmapLoader: true,\n\n\tsetOptions: function setOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t},\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst fetchOptions = {};\n\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\n\t\tfetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, scope.options );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} );\n\n\t\tscope.manager.itemStart( url );\n\n\t}\n\n} );\n\nfunction ShapePath() {\n\n\tthis.type = 'ShapePath';\n\n\tthis.color = new Color();\n\n\tthis.subPaths = [];\n\tthis.currentPath = null;\n\n}\n\nObject.assign( ShapePath.prototype, {\n\n\tmoveTo: function ( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t\treturn this;\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t\treturn this;\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\treturn this;\n\n\t},\n\n\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t\treturn this;\n\n\t},\n\n\tsplineThru: function ( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t\treturn this;\n\n\t},\n\n\ttoShapes: function ( isCCW, noHoles ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tconst shapes = [];\n\n\t\t\tfor ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tconst tmpPath = inSubpaths[ i ];\n\n\t\t\t\tconst tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tconst polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tlet inside = false;\n\t\t\tfor ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tlet edgeLowPt = inPolygon[ p ];\n\t\t\t\tlet edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tlet edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tlet edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tconst isClockWise = ShapeUtils.isClockWise;\n\n\t\tconst subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tlet solid, tmpPath, tmpShape;\n\t\tconst shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tlet holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tconst betterShapeHoles = [];\n\t\tconst newShapes = [];\n\t\tlet newShapeHoles = [];\n\t\tlet mainIdx = 0;\n\t\tlet tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( let i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tlet ambiguous = false;\n\t\t\tconst toChange = [];\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tconst sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tconst ho = sho[ hIdx ];\n\t\t\t\t\tlet hole_unassigned = true;\n\n\t\t\t\t\tfor ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } );\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t// console.log(\"ambiguous: \", ambiguous);\n\n\t\t\tif ( toChange.length > 0 ) {\n\n\t\t\t\t// console.log(\"to change: \", toChange);\n\t\t\t\tif ( ! ambiguous )\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet tmpHoles;\n\n\t\tfor ( let i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n} );\n\nfunction Font( data ) {\n\n\tthis.type = 'Font';\n\n\tthis.data = data;\n\n}\n\nObject.assign( Font.prototype, {\n\n\tisFont: true,\n\n\tgenerateShapes: function ( text, size = 100 ) {\n\n\t\tconst shapes = [];\n\t\tconst paths = createPaths( text, size, this.data );\n\n\t\tfor ( let p = 0, pl = paths.length; p < pl; p ++ ) {\n\n\t\t\tArray.prototype.push.apply( shapes, paths[ p ].toShapes() );\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n} );\n\nfunction createPaths( text, size, data ) {\n\n\tconst chars = Array.from ? Array.from( text ) : String( text ).split( '' ); // workaround for IE11, see #13988\n\tconst scale = size / data.resolution;\n\tconst line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\tconst paths = [];\n\n\tlet offsetX = 0, offsetY = 0;\n\n\tfor ( let i = 0; i < chars.length; i ++ ) {\n\n\t\tconst char = chars[ i ];\n\n\t\tif ( char === '\\n' ) {\n\n\t\t\toffsetX = 0;\n\t\t\toffsetY -= line_height;\n\n\t\t} else {\n\n\t\t\tconst ret = createPath( char, scale, offsetX, offsetY, data );\n\t\t\toffsetX += ret.offsetX;\n\t\t\tpaths.push( ret.path );\n\n\t\t}\n\n\t}\n\n\treturn paths;\n\n}\n\nfunction createPath( char, scale, offsetX, offsetY, data ) {\n\n\tconst glyph = data.glyphs[ char ] || data.glyphs[ '?' ];\n\n\tif ( ! glyph ) {\n\n\t\tconsole.error( 'THREE.Font: character \"' + char + '\" does not exists in font family ' + data.familyName + '.' );\n\n\t\treturn;\n\n\t}\n\n\tconst path = new ShapePath();\n\n\tlet x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\tif ( glyph.o ) {\n\n\t\tconst outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\tfor ( let i = 0, l = outline.length; i < l; ) {\n\n\t\t\tconst action = outline[ i ++ ];\n\n\t\t\tswitch ( action ) {\n\n\t\t\t\tcase 'm': // moveTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'l': // lineTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'q': // quadraticCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'b': // bezierCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx2 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy2 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { offsetX: glyph.ha * scale, path: path };\n\n}\n\nfunction FontLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nFontLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: FontLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet json;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tconsole.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' );\n\t\t\t\tjson = JSON.parse( text.substring( 65, text.length - 2 ) );\n\n\t\t\t}\n\n\t\t\tconst font = scope.parse( json );\n\n\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\treturn new Font( json );\n\n\t}\n\n} );\n\nlet _context;\n\nconst AudioContext = {\n\n\tgetContext: function () {\n\n\t\tif ( _context === undefined ) {\n\n\t\t\t_context = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn _context;\n\n\t},\n\n\tsetContext: function ( value ) {\n\n\t\t_context = value;\n\n\t}\n\n};\n\nfunction AudioLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nAudioLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: AudioLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\t\tconst bufferCopy = buffer.slice( 0 );\n\n\t\t\t\tconst context = AudioContext.getContext();\n\t\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t\t} );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n} );\n\nfunction HemisphereLightProbe( skyColor, groundColor, intensity ) {\n\n\tLightProbe.call( this, undefined, intensity );\n\n\tconst color1 = new Color().set( skyColor );\n\tconst color2 = new Color().set( groundColor );\n\n\tconst sky = new Vector3( color1.r, color1.g, color1.b );\n\tconst ground = new Vector3( color2.r, color2.g, color2.b );\n\n\t// without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI );\n\tconst c0 = Math.sqrt( Math.PI );\n\tconst c1 = c0 * Math.sqrt( 0.75 );\n\n\tthis.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 );\n\tthis.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 );\n\n}\n\nHemisphereLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), {\n\n\tconstructor: HemisphereLightProbe,\n\n\tisHemisphereLightProbe: true,\n\n\tcopy: function ( source ) { // modifying colors not currently supported\n\n\t\tLightProbe.prototype.copy.call( this, source );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = LightProbe.prototype.toJSON.call( this, meta );\n\n\t\t// data.sh = this.sh.toArray(); // todo\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction AmbientLightProbe( color, intensity ) {\n\n\tLightProbe.call( this, undefined, intensity );\n\n\tconst color1 = new Color().set( color );\n\n\t// without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI );\n\tthis.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) );\n\n}\n\nAmbientLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), {\n\n\tconstructor: AmbientLightProbe,\n\n\tisAmbientLightProbe: true,\n\n\tcopy: function ( source ) { // modifying color not currently supported\n\n\t\tLightProbe.prototype.copy.call( this, source );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = LightProbe.prototype.toJSON.call( this, meta );\n\n\t\t// data.sh = this.sh.toArray(); // todo\n\n\t\treturn data;\n\n\t}\n\n} );\n\nconst _eyeRight = new Matrix4();\nconst _eyeLeft = new Matrix4();\n\nfunction StereoCamera() {\n\n\tthis.type = 'StereoCamera';\n\n\tthis.aspect = 1;\n\n\tthis.eyeSep = 0.064;\n\n\tthis.cameraL = new PerspectiveCamera();\n\tthis.cameraL.layers.enable( 1 );\n\tthis.cameraL.matrixAutoUpdate = false;\n\n\tthis.cameraR = new PerspectiveCamera();\n\tthis.cameraR.layers.enable( 2 );\n\tthis.cameraR.matrixAutoUpdate = false;\n\n\tthis._cache = {\n\t\tfocus: null,\n\t\tfov: null,\n\t\taspect: null,\n\t\tnear: null,\n\t\tfar: null,\n\t\tzoom: null,\n\t\teyeSep: null\n\t};\n\n}\n\nObject.assign( StereoCamera.prototype, {\n\n\tupdate: function ( camera ) {\n\n\t\tconst cache = this._cache;\n\n\t\tconst needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov ||\n\t\t\tcache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near ||\n\t\t\tcache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tcache.focus = camera.focus;\n\t\t\tcache.fov = camera.fov;\n\t\t\tcache.aspect = camera.aspect * this.aspect;\n\t\t\tcache.near = camera.near;\n\t\t\tcache.far = camera.far;\n\t\t\tcache.zoom = camera.zoom;\n\t\t\tcache.eyeSep = this.eyeSep;\n\n\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\tconst projectionMatrix = camera.projectionMatrix.clone();\n\t\t\tconst eyeSepHalf = cache.eyeSep / 2;\n\t\t\tconst eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;\n\t\t\tconst ymax = ( cache.near * Math.tan( MathUtils.DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom;\n\t\t\tlet xmin, xmax;\n\n\t\t\t// translate xOffset\n\n\t\t\t_eyeLeft.elements[ 12 ] = - eyeSepHalf;\n\t\t\t_eyeRight.elements[ 12 ] = eyeSepHalf;\n\n\t\t\t// for left eye\n\n\t\t\txmin = - ymax * cache.aspect + eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect + eyeSepOnProjection;\n\n\t\t\tprojectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t// for right eye\n\n\t\t\txmin = - ymax * cache.aspect - eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect - eyeSepOnProjection;\n\n\t\t\tprojectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t}\n\n\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft );\n\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight );\n\n\t}\n\n} );\n\nclass Clock {\n\n\tconstructor( autoStart ) {\n\n\t\tthis.autoStart = ( autoStart !== undefined ) ? autoStart : true;\n\n\t\tthis.startTime = 0;\n\t\tthis.oldTime = 0;\n\t\tthis.elapsedTime = 0;\n\n\t\tthis.running = false;\n\n\t}\n\n\tstart() {\n\n\t\tthis.startTime = now();\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t}\n\n\tstop() {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t}\n\n\tgetElapsedTime() {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t}\n\n\tgetDelta() {\n\n\t\tlet diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tconst newTime = now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n}\n\nfunction now() {\n\n\treturn ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n}\n\nconst _position$2 = /*@__PURE__*/ new Vector3();\nconst _quaternion$3 = /*@__PURE__*/ new Quaternion();\nconst _scale$1 = /*@__PURE__*/ new Vector3();\nconst _orientation = /*@__PURE__*/ new Vector3();\n\nclass AudioListener extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'AudioListener';\n\n\t\tthis.context = AudioContext.getContext();\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( this.context.destination );\n\n\t\tthis.filter = null;\n\n\t\tthis.timeDelta = 0;\n\n\t\t// private\n\n\t\tthis._clock = new Clock();\n\n\t}\n\n\tgetInput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tremoveFilter() {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.filter;\n\n\t}\n\n\tsetFilter( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t\treturn this;\n\n\t}\n\n\tgetMasterVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetMasterVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tconst listener = this.context.listener;\n\t\tconst up = this.up;\n\n\t\tthis.timeDelta = this._clock.getDelta();\n\n\t\tthis.matrixWorld.decompose( _position$2, _quaternion$3, _scale$1 );\n\n\t\t_orientation.set( 0, 0, - 1 ).applyQuaternion( _quaternion$3 );\n\n\t\tif ( listener.positionX ) {\n\n\t\t\t// code path for Chrome (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.timeDelta;\n\n\t\t\tlistener.positionX.linearRampToValueAtTime( _position$2.x, endTime );\n\t\t\tlistener.positionY.linearRampToValueAtTime( _position$2.y, endTime );\n\t\t\tlistener.positionZ.linearRampToValueAtTime( _position$2.z, endTime );\n\t\t\tlistener.forwardX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\tlistener.forwardY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\tlistener.forwardZ.linearRampToValueAtTime( _orientation.z, endTime );\n\t\t\tlistener.upX.linearRampToValueAtTime( up.x, endTime );\n\t\t\tlistener.upY.linearRampToValueAtTime( up.y, endTime );\n\t\t\tlistener.upZ.linearRampToValueAtTime( up.z, endTime );\n\n\t\t} else {\n\n\t\t\tlistener.setPosition( _position$2.x, _position$2.y, _position$2.z );\n\t\t\tlistener.setOrientation( _orientation.x, _orientation.y, _orientation.z, up.x, up.y, up.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass Audio extends Object3D {\n\n\tconstructor( listener ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Audio';\n\n\t\tthis.listener = listener;\n\t\tthis.context = listener.context;\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( listener.getInput() );\n\n\t\tthis.autoplay = false;\n\n\t\tthis.buffer = null;\n\t\tthis.detune = 0;\n\t\tthis.loop = false;\n\t\tthis.loopStart = 0;\n\t\tthis.loopEnd = 0;\n\t\tthis.offset = 0;\n\t\tthis.duration = undefined;\n\t\tthis.playbackRate = 1;\n\t\tthis.isPlaying = false;\n\t\tthis.hasPlaybackControl = true;\n\t\tthis.source = null;\n\t\tthis.sourceType = 'empty';\n\n\t\tthis._startedAt = 0;\n\t\tthis._progress = 0;\n\t\tthis._connected = false;\n\n\t\tthis.filters = [];\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tsetNodeSource( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaElementSource( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaStreamSource( mediaStream ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaStreamNode';\n\t\tthis.source = this.context.createMediaStreamSource( mediaStream );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetBuffer( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t}\n\n\tplay( delay = 0 ) {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._startedAt = this.context.currentTime + delay;\n\n\t\tconst source = this.context.createBufferSource();\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.loopStart = this.loopStart;\n\t\tsource.loopEnd = this.loopEnd;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.start( this._startedAt, this._progress + this.offset, this.duration );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\tthis.setDetune( this.detune );\n\t\tthis.setPlaybackRate( this.playbackRate );\n\n\t\treturn this.connect();\n\n\t}\n\n\tpause() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\t// update current progress\n\n\t\t\tthis._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate;\n\n\t\t\tif ( this.loop === true ) {\n\n\t\t\t\t// ensure _progress does not exceed duration with looped audios\n\n\t\t\t\tthis._progress = this._progress % ( this.duration || this.buffer.duration );\n\n\t\t\t}\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._progress = 0;\n\n\t\tthis.source.stop();\n\t\tthis.source.onended = null;\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t}\n\n\tconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = true;\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = false;\n\n\t\treturn this;\n\n\t}\n\n\tgetFilters() {\n\n\t\treturn this.filters;\n\n\t}\n\n\tsetFilters( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this._connected === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value.slice();\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetDetune( value ) {\n\n\t\tthis.detune = value;\n\n\t\tif ( this.source.detune === undefined ) return; // only set detune when available\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetDetune() {\n\n\t\treturn this.detune;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t}\n\n\tsetFilter( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t}\n\n\tsetPlaybackRate( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetPlaybackRate() {\n\n\t\treturn this.playbackRate;\n\n\t}\n\n\tonEnded() {\n\n\t\tthis.isPlaying = false;\n\n\t}\n\n\tgetLoop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t}\n\n\tsetLoop( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopStart( value ) {\n\n\t\tthis.loopStart = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopEnd( value ) {\n\n\t\tthis.loopEnd = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _position$3 = /*@__PURE__*/ new Vector3();\nconst _quaternion$4 = /*@__PURE__*/ new Quaternion();\nconst _scale$2 = /*@__PURE__*/ new Vector3();\nconst _orientation$1 = /*@__PURE__*/ new Vector3();\n\nclass PositionalAudio extends Audio {\n\n\tconstructor( listener ) {\n\n\t\tsuper( listener );\n\n\t\tthis.panner = this.context.createPanner();\n\t\tthis.panner.panningModel = 'HRTF';\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.panner;\n\n\t}\n\n\tgetRefDistance() {\n\n\t\treturn this.panner.refDistance;\n\n\t}\n\n\tsetRefDistance( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetRolloffFactor() {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t}\n\n\tsetRolloffFactor( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetDistanceModel() {\n\n\t\treturn this.panner.distanceModel;\n\n\t}\n\n\tsetDistanceModel( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxDistance() {\n\n\t\treturn this.panner.maxDistance;\n\n\t}\n\n\tsetMaxDistance( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.hasPlaybackControl === true && this.isPlaying === false ) return;\n\n\t\tthis.matrixWorld.decompose( _position$3, _quaternion$4, _scale$2 );\n\n\t\t_orientation$1.set( 0, 0, 1 ).applyQuaternion( _quaternion$4 );\n\n\t\tconst panner = this.panner;\n\n\t\tif ( panner.positionX ) {\n\n\t\t\t// code path for Chrome and Firefox (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.listener.timeDelta;\n\n\t\t\tpanner.positionX.linearRampToValueAtTime( _position$3.x, endTime );\n\t\t\tpanner.positionY.linearRampToValueAtTime( _position$3.y, endTime );\n\t\t\tpanner.positionZ.linearRampToValueAtTime( _position$3.z, endTime );\n\t\t\tpanner.orientationX.linearRampToValueAtTime( _orientation$1.x, endTime );\n\t\t\tpanner.orientationY.linearRampToValueAtTime( _orientation$1.y, endTime );\n\t\t\tpanner.orientationZ.linearRampToValueAtTime( _orientation$1.z, endTime );\n\n\t\t} else {\n\n\t\t\tpanner.setPosition( _position$3.x, _position$3.y, _position$3.z );\n\t\t\tpanner.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass AudioAnalyser {\n\n\tconstructor( audio, fftSize = 2048 ) {\n\n\t\tthis.analyser = audio.context.createAnalyser();\n\t\tthis.analyser.fftSize = fftSize;\n\n\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\taudio.getOutput().connect( this.analyser );\n\n\t}\n\n\n\tgetFrequencyData() {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t}\n\n\tgetAverageFrequency() {\n\n\t\tlet value = 0;\n\t\tconst data = this.getFrequencyData();\n\n\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n}\n\nfunction PropertyMixer( binding, typeName, valueSize ) {\n\n\tthis.binding = binding;\n\tthis.valueSize = valueSize;\n\n\tlet mixFunction,\n\t\tmixFunctionAdditive,\n\t\tsetIdentity;\n\n\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t//\n\t// interpolators can use .buffer as their .result\n\t// the data then goes to 'incoming'\n\t//\n\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t// the cumulative result and are compared to detect\n\t// changes\n\t//\n\t// 'orig' stores the original state of the property\n\t//\n\t// 'add' is used for additive cumulative results\n\t//\n\t// 'work' is optional and is only present for quaternion types. It is used\n\t// to store intermediate quaternion multiplication results\n\n\tswitch ( typeName ) {\n\n\t\tcase 'quaternion':\n\t\t\tmixFunction = this._slerp;\n\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\tthis._workIndex = 5;\n\t\t\tbreak;\n\n\t\tcase 'string':\n\t\tcase 'bool':\n\t\t\tmixFunction = this._select;\n\n\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t// additive is not relevant for non-numeric types\n\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tmixFunction = this._lerp;\n\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t}\n\n\tthis._mixBufferRegion = mixFunction;\n\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\tthis._setIdentity = setIdentity;\n\tthis._origIndex = 3;\n\tthis._addIndex = 4;\n\n\tthis.cumulativeWeight = 0;\n\tthis.cumulativeWeightAdditive = 0;\n\n\tthis.useCount = 0;\n\tthis.referenceCount = 0;\n\n}\n\nObject.assign( PropertyMixer.prototype, {\n\n\t// accumulate data in the 'incoming' region into 'accu'\n\taccumulate: function ( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride;\n\n\t\tlet currentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tconst mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t},\n\n\t// accumulate data in the 'incoming' region into 'add'\n\taccumulateAdditive: function ( weight ) {\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = stride * this._addIndex;\n\n\t\tif ( this.cumulativeWeightAdditive === 0 ) {\n\n\t\t\t// add = identity\n\n\t\t\tthis._setIdentity();\n\n\t\t}\n\n\t\t// add := add + incoming * weight\n\n\t\tthis._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );\n\t\tthis.cumulativeWeightAdditive += weight;\n\n\t},\n\n\t// apply the state of 'accu' to the binding when accus differ\n\tapply: function ( accuIndex ) {\n\n\t\tconst stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tconst originalValueOffset = stride * this._origIndex;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tif ( weightAdditive > 0 ) {\n\n\t\t\t// accuN := accuN + additive accuN\n\n\t\t\tthis._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );\n\n\t\t}\n\n\t\tfor ( let i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState: function () {\n\n\t\tconst binding = this.binding;\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * this._origIndex;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\t// Add to identity for additive\n\t\tthis._setIdentity();\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t},\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState: function () {\n\n\t\tconst originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t},\n\n\t_setAdditiveIdentityNumeric: function () {\n\n\t\tconst startIndex = this._addIndex * this.valueSize;\n\t\tconst endIndex = startIndex + this.valueSize;\n\n\t\tfor ( let i = startIndex; i < endIndex; i ++ ) {\n\n\t\t\tthis.buffer[ i ] = 0;\n\n\t\t}\n\n\t},\n\n\t_setAdditiveIdentityQuaternion: function () {\n\n\t\tthis._setAdditiveIdentityNumeric();\n\t\tthis.buffer[ this._addIndex * this.valueSize + 3 ] = 1;\n\n\t},\n\n\t_setAdditiveIdentityOther: function () {\n\n\t\tconst startIndex = this._origIndex * this.valueSize;\n\t\tconst targetIndex = this._addIndex * this.valueSize;\n\n\t\tfor ( let i = 0; i < this.valueSize; i ++ ) {\n\n\t\t\tthis.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];\n\n\t\t}\n\n\t},\n\n\n\t// mix functions\n\n\t_select: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_slerp: function ( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t},\n\n\t_slerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst workOffset = this._workIndex * stride;\n\n\t\t// Store result in intermediate buffer offset\n\t\tQuaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );\n\n\t\t// Slerp to the intermediate result\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );\n\n\t},\n\n\t_lerp: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst s = 1 - t;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t},\n\n\t_lerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n} );\n\n// Characters [].:/ are reserved for track binding syntax.\nconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\nconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n// only latin characters, and the unicode \\p{L} is not yet supported. So\n// instead, we exclude reserved characters and match everything else.\nconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\nconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n// Parent directories, delimited by '/' or ':'. Currently unused, but must\n// be matched to parse the rest of the track name.\nconst _directoryRe = /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\nconst _nodeRe = /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n// Object on target node, and accessor. May not contain reserved\n// characters. Accessor may contain any character except closing bracket.\nconst _objectRe = /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n// Property and accessor. May not contain reserved characters. Accessor may\n// contain any non-bracket characters.\nconst _propertyRe = /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\nconst _trackRe = new RegExp( ''\n\t+ '^'\n\t+ _directoryRe\n\t+ _nodeRe\n\t+ _objectRe\n\t+ _propertyRe\n\t+ '$'\n);\n\nconst _supportedObjectNames = [ 'material', 'materials', 'bones' ];\n\nfunction Composite( targetGroup, path, optionalParsedPath ) {\n\n\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\tthis._targetGroup = targetGroup;\n\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n}\n\nObject.assign( Composite.prototype, {\n\n\tgetValue: function ( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tconst firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t},\n\n\tsetValue: function ( array, offset ) {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t},\n\n\tbind: function () {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t},\n\n\tunbind: function () {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n} );\n\n\nfunction PropertyBinding( rootNode, path, parsedPath ) {\n\n\tthis.path = path;\n\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode;\n\n\tthis.rootNode = rootNode;\n\n}\n\nObject.assign( PropertyBinding, {\n\n\tComposite: Composite,\n\n\tcreate: function ( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tsanitizeNodeName: function ( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t},\n\n\tparseTrackName: function ( trackName ) {\n\n\t\tconst matches = _trackRe.exec( trackName );\n\n\t\tif ( ! matches ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t}\n\n\t\tconst results = {\n\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\tnodeName: matches[ 2 ],\n\t\t\tobjectName: matches[ 3 ],\n\t\t\tobjectIndex: matches[ 4 ],\n\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\tpropertyIndex: matches[ 6 ]\n\t\t};\n\n\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t// include '.' characters).\n\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\tresults.objectName = objectName;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t}\n\n\t\treturn results;\n\n\t},\n\n\tfindNode: function ( root, nodeName ) {\n\n\t\tif ( ! nodeName || nodeName === \"\" || nodeName === \".\" || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tconst bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tconst childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tconst subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n} );\n\nObject.assign( PropertyBinding.prototype, { // prototype, continued\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable: function () {},\n\t_setValue_unavailable: function () {},\n\n\tBindingType: {\n\t\tDirect: 0,\n\t\tEntireArray: 1,\n\t\tArrayElement: 2,\n\t\tHasFromToArray: 3\n\t},\n\n\tVersioning: {\n\t\tNone: 0,\n\t\tNeedsUpdate: 1,\n\t\tMatrixWorldNeedsUpdate: 2\n\t},\n\n\tGetterByBindingType: [\n\n\t\tfunction getValue_direct( buffer, offset ) {\n\n\t\t\tbuffer[ offset ] = this.node[ this.propertyName ];\n\n\t\t},\n\n\t\tfunction getValue_array( buffer, offset ) {\n\n\t\t\tconst source = this.resolvedProperty;\n\n\t\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t\t}\n\n\t\t},\n\n\t\tfunction getValue_arrayElement( buffer, offset ) {\n\n\t\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t\t},\n\n\t\tfunction getValue_toArray( buffer, offset ) {\n\n\t\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t\t}\n\n\t],\n\n\tSetterByBindingTypeAndVersioning: [\n\n\t\t[\n\t\t\t// Direct\n\n\t\t\tfunction setValue_direct( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t\t\t},\n\n\t\t\tfunction setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// EntireArray\n\n\t\t\tfunction setValue_array( buffer, offset ) {\n\n\t\t\t\tconst dest = this.resolvedProperty;\n\n\t\t\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tfunction setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tconst dest = this.resolvedProperty;\n\n\t\t\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tconst dest = this.resolvedProperty;\n\n\t\t\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// ArrayElement\n\n\t\t\tfunction setValue_arrayElement( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t\t\t},\n\n\t\t\tfunction setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// HasToFromArray\n\n\t\t\tfunction setValue_fromArray( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t\t\t},\n\n\t\t\tfunction setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t]\n\n\t],\n\n\tgetValue: function getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t\t// Note: This class uses a State pattern on a per-method basis:\n\t\t// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n\t\t// prototype version of these methods with one that represents\n\t\t// the bound state. When the property is not found, the methods\n\t\t// become no-ops.\n\n\t},\n\n\tsetValue: function getValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t},\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind: function () {\n\n\t\tlet targetObject = this.node;\n\t\tconst parsedPath = this.parsedPath;\n\n\t\tconst objectName = parsedPath.objectName;\n\t\tconst propertyName = parsedPath.propertyName;\n\t\tlet propertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode;\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\\'t found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tlet objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( let i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tconst nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tlet versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tlet bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === \"morphTargetInfluences\" ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.geometry.isBufferGeometry ) {\n\n\t\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t},\n\n\tunbind: function () {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n} );\n\n// DECLARE ALIAS AFTER assign prototype\nObject.assign( PropertyBinding.prototype, {\n\n\t// initial state of these methods that calls 'bind'\n\t_getValue_unbound: PropertyBinding.prototype.getValue,\n\t_setValue_unbound: PropertyBinding.prototype.setValue,\n\n} );\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * - Add objects you would otherwise pass as 'root' to the\n * constructor or the .clipAction method of AnimationMixer.\n *\n * - Instead pass this object as 'root'.\n *\n * - You can also add and remove objects later when the mixer\n * is running.\n *\n * Note:\n *\n * Objects of this class appear as one object to the mixer,\n * so cache control of the individual objects must be done\n * on the group.\n *\n * Limitation:\n *\n * - The animated properties must be compatible among the\n * all objects in the group.\n *\n * - A single property can either be controlled through a\n * target group or directly, but not both.\n */\n\nfunction AnimationObjectGroup() {\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\t// cached objects followed by the active ones\n\tthis._objects = Array.prototype.slice.call( arguments );\n\n\tthis.nCachedObjects_ = 0; // threshold\n\t// note: read by PropertyBinding.Composite\n\n\tconst indices = {};\n\tthis._indicesByUUID = indices; // for bookkeeping\n\n\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t}\n\n\tthis._paths = []; // inside: string\n\tthis._parsedPaths = []; // inside: { we don't care, here }\n\tthis._bindings = []; // inside: Array< PropertyBinding >\n\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\tconst scope = this;\n\n\tthis.stats = {\n\n\t\tobjects: {\n\t\t\tget total() {\n\n\t\t\t\treturn scope._objects.length;\n\n\t\t\t},\n\t\t\tget inUse() {\n\n\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t}\n\t\t},\n\t\tget bindingsPerObject() {\n\n\t\t\treturn scope._bindings.length;\n\n\t\t}\n\n\t};\n\n}\n\nObject.assign( AnimationObjectGroup.prototype, {\n\n\tisAnimationObjectGroup: true,\n\n\tadd: function () {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet knownObject = undefined,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid;\n\t\t\tlet index = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ];\n\n\t\t\t\t\tlet binding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\tremove: function () {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tconst lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\t// remove & forget\n\tuncache: function () {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_,\n\t\t\tnObjects = objects.length;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tconst lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_: function ( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath;\n\t\tlet index = indicesByPath[ path ];\n\t\tconst bindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tconst paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tconst object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t},\n\n\tunsubscribe_: function ( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n} );\n\nclass AnimationAction {\n\n\tconstructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot;\n\t\tthis.blendMode = blendMode;\n\n\t\tconst tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tconst interpolantSettings = {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst interpolant = tracks[ i ].createInterpolant( null );\n\t\t\tinterpolants[ i ] = interpolant;\n\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t}\n\n\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\tthis._interpolants = interpolants; // bound by the mixer\n\n\t\t// inside: PropertyMixer (managed by the mixer)\n\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\tthis._cacheIndex = null; // for the memory manager\n\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\tthis._timeScaleInterpolant = null;\n\t\tthis._weightInterpolant = null;\n\n\t\tthis.loop = LoopRepeat;\n\t\tthis._loopCount = - 1;\n\n\t\t// global mixer time when the action is to be started\n\t\t// it's set back to 'null' upon start of the action\n\t\tthis._startTime = null;\n\n\t\t// scaled local time of the action\n\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1;\n\t\tthis._effectiveTimeScale = 1;\n\n\t\tthis.weight = 1;\n\t\tthis._effectiveWeight = 1;\n\n\t\tthis.repetitions = Infinity; // no. of repetitions when looping\n\n\t\tthis.paused = false; // true -> zero effective time scale\n\t\tthis.enabled = true; // false -> zero effective weight\n\n\t\tthis.clampWhenFinished = false;// keep feeding the last frame?\n\n\t\tthis.zeroSlopeAtStart = true;// for smooth interpolation w/o separate\n\t\tthis.zeroSlopeAtEnd = true;// clips for start, loop and end\n\n\t}\n\n\t// State & Scheduling\n\n\tplay() {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t}\n\n\treset() {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0; // restart clip\n\t\tthis._loopCount = - 1;// forget previous loops\n\t\tthis._startTime = null;// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t}\n\n\tisRunning() {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t}\n\n\t// return true when play has been called\n\tisScheduled() {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t}\n\n\tstartAt( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoop( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t}\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t}\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight() {\n\n\t\treturn this._effectiveWeight;\n\n\t}\n\n\tfadeIn( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t}\n\n\tfadeOut( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t}\n\n\tcrossFadeFrom( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tconst fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcrossFadeTo( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t}\n\n\tstopFading() {\n\n\t\tconst weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale() {\n\n\t\treturn this._effectiveTimeScale;\n\n\t}\n\n\tsetDuration( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\tsyncWith( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\thalt( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t}\n\n\twarp( startTimeScale, endTimeScale, duration ) {\n\n\t\tconst mixer = this._mixer,\n\t\t\tnow = mixer.time,\n\t\t\ttimeScale = this.timeScale;\n\n\t\tlet interpolant = this._timeScaleInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t}\n\n\tstopWarping() {\n\n\t\tconst timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Object Accessors\n\n\tgetMixer() {\n\n\t\treturn this._mixer;\n\n\t}\n\n\tgetClip() {\n\n\t\treturn this._clip;\n\n\t}\n\n\tgetRoot() {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t}\n\n\t// Interna\n\n\t_update( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tconst timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\treturn; // yet to come / don't decide when delta = 0\n\n\t\t\t}\n\n\t\t\t// start\n\n\t\t\tthis._startTime = null; // unschedule\n\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tconst clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tconst weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tconst interpolants = this._interpolants;\n\t\t\tconst propertyMixers = this._propertyBindings;\n\n\t\t\tswitch ( this.blendMode ) {\n\n\t\t\t\tcase AdditiveAnimationBlendMode:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulateAdditive( weight );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase NormalAnimationBlendMode:\n\t\t\t\tdefault:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_updateWeight( time ) {\n\n\t\tlet weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tconst interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t}\n\n\t_updateTimeScale( time ) {\n\n\t\tlet timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tconst interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t}\n\n\t_updateTime( deltaTime ) {\n\n\t\tconst duration = this._clip.duration;\n\t\tconst loop = this.loop;\n\n\t\tlet time = this.time + deltaTime;\n\t\tlet loopCount = this._loopCount;\n\n\t\tconst pingPong = ( loop === LoopPingPong );\n\n\t\tif ( deltaTime === 0 ) {\n\n\t\t\tif ( loopCount === - 1 ) return time;\n\n\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t}\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tbreak handle_stop;\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis.time = time;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tconst loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tconst pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tconst atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.time = time;\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\t_setEndings( atStart, atEnd, pingPong ) {\n\n\t\tconst settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart = ZeroSlopeEnding;\n\t\t\tsettings.endingEnd = ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_scheduleFading( duration, weightNow, weightThen ) {\n\n\t\tconst mixer = this._mixer, now = mixer.time;\n\t\tlet interpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\n\t\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction AnimationMixer( root ) {\n\n\tthis._root = root;\n\tthis._initMemoryManager();\n\tthis._accuIndex = 0;\n\n\tthis.time = 0;\n\n\tthis.timeScale = 1.0;\n\n}\n\nAnimationMixer.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: AnimationMixer,\n\n\t_bindAction: function ( action, prototypeAction ) {\n\n\t\tconst root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName;\n\n\t\tlet bindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst track = tracks[ i ],\n\t\t\t\ttrackName = track.name;\n\n\t\t\tlet binding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tconst path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t},\n\n\t_activateAction: function ( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tconst rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t},\n\n\t_deactivateAction: function ( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t},\n\n\t// Memory manager\n\n\t_initMemoryManager: function () {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t// \tactionByRoot: AnimationAction - lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t},\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction: function ( action ) {\n\n\t\tconst index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t},\n\n\t_addInactiveAction: function ( action, clipUuid, rootUuid ) {\n\n\t\tconst actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tlet actionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tconst knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t},\n\n\t_removeInactiveAction: function ( action ) {\n\n\t\tconst actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tconst clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tconst actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t},\n\n\t_removeInactiveBindingsForAction: function ( action ) {\n\n\t\tconst bindings = action._propertyBindings;\n\n\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tconst binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_lendAction: function ( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions >| inactive actions ]\n\t\t// s a\n\t\t// <-swap->\n\t\t// a s\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t},\n\n\t_takeBackAction: function ( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions |< inactive actions ]\n\t\t// a s\n\t\t// <-swap->\n\t\t// s a\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t},\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding: function ( binding, rootUuid, trackName ) {\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindings = this._bindings;\n\n\t\tlet bindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t},\n\n\t_removeInactiveBinding: function ( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tif ( Object.keys( bindingByName ).length === 0 ) {\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t},\n\n\t_lendBinding: function ( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t},\n\n\t_takeBackBinding: function ( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t},\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant: function () {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++;\n\n\t\tlet interpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, this._controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t},\n\n\t_takeBackControlInterpolant: function ( interpolant ) {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t},\n\n\t_controlInterpolantsResultBuffer: new Float32Array( 1 ),\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction: function ( clip, optionalRoot, blendMode ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid;\n\n\t\tlet clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip;\n\n\t\tconst clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\n\t\tconst actionsForClip = this._actionsByClip[ clipUuid ];\n\t\tlet prototypeAction = null;\n\n\t\tif ( blendMode === undefined ) {\n\n\t\t\tif ( clipObject !== null ) {\n\n\t\t\t\tblendMode = clipObject.blendMode;\n\n\t\t\t} else {\n\n\t\t\t\tblendMode = NormalAnimationBlendMode;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tconst existingAction = actionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined && existingAction.blendMode === blendMode ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tconst newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t},\n\n\t// get an existing action\n\texistingAction: function ( clip, optionalRoot ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction: function () {\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions;\n\n\t\tfor ( let i = nActions - 1; i >= 0; -- i ) {\n\n\t\t\tactions[ i ].stop();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// advance the time and update apply the animation\n\tupdate: function ( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( let i = 0; i !== nActions; ++ i ) {\n\n\t\t\tconst action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tconst bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( let i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// Allows you to seek to a specific time in an animation.\n\tsetTime: function ( timeInSeconds ) {\n\n\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\t\tfor ( let i = 0; i < this._actions.length; i ++ ) {\n\n\t\t\tthis._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\n\t\t}\n\n\t\treturn this.update( timeInSeconds ); // Update used to set exact time. Returns \"this\" AnimationMixer object.\n\n\t},\n\n\t// return this mixer's root target object\n\tgetRoot: function () {\n\n\t\treturn this._root;\n\n\t},\n\n\t// free all resources specific to a particular clip\n\tuncacheClip: function ( clip ) {\n\n\t\tconst actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tconst actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tconst action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tconst cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t},\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot: function ( root ) {\n\n\t\tconst rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( const clipUuid in actionsByClip ) {\n\n\t\t\tconst actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( const trackName in bindingByName ) {\n\n\t\t\t\tconst binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t// remove a targeted clip from the cache\n\tuncacheAction: function ( clip, optionalRoot ) {\n\n\t\tconst action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n} );\n\nclass Uniform {\n\n\tconstructor( value ) {\n\n\t\tif ( typeof value === 'string' ) {\n\n\t\t\tconsole.warn( 'THREE.Uniform: Type parameter is no longer needed.' );\n\t\t\tvalue = arguments[ 1 ];\n\n\t\t}\n\n\t\tthis.value = value;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t}\n\n}\n\nfunction InstancedInterleavedBuffer( array, stride, meshPerAttribute ) {\n\n\tInterleavedBuffer.call( this, array, stride );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), {\n\n\tconstructor: InstancedInterleavedBuffer,\n\n\tisInstancedInterleavedBuffer: true,\n\n\tcopy: function ( source ) {\n\n\t\tInterleavedBuffer.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function ( data ) {\n\n\t\tconst ib = InterleavedBuffer.prototype.clone.call( this, data );\n\n\t\tib.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn ib;\n\n\t},\n\n\ttoJSON: function ( data ) {\n\n\t\tconst json = InterleavedBuffer.prototype.toJSON.call( this, data );\n\n\t\tjson.isInstancedInterleavedBuffer = true;\n\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn json;\n\n\t}\n\n} );\n\nfunction GLBufferAttribute( buffer, type, itemSize, elementSize, count ) {\n\n\tthis.buffer = buffer;\n\tthis.type = type;\n\tthis.itemSize = itemSize;\n\tthis.elementSize = elementSize;\n\tthis.count = count;\n\n\tthis.version = 0;\n\n}\n\nObject.defineProperty( GLBufferAttribute.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( GLBufferAttribute.prototype, {\n\n\tisGLBufferAttribute: true,\n\n\tsetBuffer: function ( buffer ) {\n\n\t\tthis.buffer = buffer;\n\n\t\treturn this;\n\n\t},\n\n\tsetType: function ( type, elementSize ) {\n\n\t\tthis.type = type;\n\t\tthis.elementSize = elementSize;\n\n\t\treturn this;\n\n\t},\n\n\tsetItemSize: function ( itemSize ) {\n\n\t\tthis.itemSize = itemSize;\n\n\t\treturn this;\n\n\t},\n\n\tsetCount: function ( count ) {\n\n\t\tthis.count = count;\n\n\t\treturn this;\n\n\t},\n\n} );\n\nfunction Raycaster( origin, direction, near, far ) {\n\n\tthis.ray = new Ray( origin, direction );\n\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\tthis.near = near || 0;\n\tthis.far = far || Infinity;\n\tthis.camera = null;\n\tthis.layers = new Layers();\n\n\tthis.params = {\n\t\tMesh: {},\n\t\tLine: { threshold: 1 },\n\t\tLOD: {},\n\t\tPoints: { threshold: 1 },\n\t\tSprite: {}\n\t};\n\n\tObject.defineProperties( this.params, {\n\t\tPointCloud: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' );\n\t\t\t\treturn this.Points;\n\n\t\t\t}\n\t\t}\n\t} );\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\tif ( object.layers.test( raycaster.layers ) ) {\n\n\t\tobject.raycast( raycaster, intersects );\n\n\t}\n\n\tif ( recursive === true ) {\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\nObject.assign( Raycaster.prototype, {\n\n\tset: function ( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t},\n\n\tsetFromCamera: function ( coords, camera ) {\n\n\t\tif ( ( camera && camera.isPerspectiveCamera ) ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\t\t\tthis.camera = camera;\n\n\t\t} else if ( ( camera && camera.isOrthographicCamera ) ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\t\t\tthis.camera = camera;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type.' );\n\n\t\t}\n\n\t},\n\n\tintersectObject: function ( object, recursive, optionalTarget ) {\n\n\t\tconst intersects = optionalTarget || [];\n\n\t\tintersectObject( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t},\n\n\tintersectObjects: function ( objects, recursive, optionalTarget ) {\n\n\t\tconst intersects = optionalTarget || [];\n\n\t\tif ( Array.isArray( objects ) === false ) {\n\n\t\t\tconsole.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' );\n\t\t\treturn intersects;\n\n\t\t}\n\n\t\tfor ( let i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n} );\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up.\n * The azimuthal angle (theta) is measured from the positive z-axis.\n */\n\nclass Spherical {\n\n\tconstructor( radius = 1, phi = 0, theta = 0 ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi; // polar angle\n\t\tthis.theta = theta; // azimuthal angle\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t}\n\n\t// restrict phi to be betwee EPS and PI-EPS\n\tmakeSafe() {\n\n\t\tconst EPS = 0.000001;\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + y * y + z * z );\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( x, z );\n\t\t\tthis.phi = Math.acos( MathUtils.clamp( y / this.radius, - 1, 1 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n */\n\nclass Cylindrical {\n\n\tconstructor( radius, theta, y ) {\n\n\t\tthis.radius = ( radius !== undefined ) ? radius : 1.0; // distance from the origin to a point in the x-z plane\n\t\tthis.theta = ( theta !== undefined ) ? theta : 0; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\t\tthis.y = ( y !== undefined ) ? y : 0; // height above the x-z plane\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + z * z );\n\t\tthis.theta = Math.atan2( x, z );\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vector$7 = /*@__PURE__*/ new Vector2();\n\nclass Box2 {\n\n\tconstructor( min, max ) {\n\n\t\tObject.defineProperty( this, 'isBox2', { value: true } );\n\n\t\tthis.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity );\n\t\tthis.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity );\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$7.copy( size ).multiplyScalar( 0.5 );\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getCenter() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getSize() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getParameter() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ? false : true;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\tconst clampedPoint = _vector$7.copy( point ).clamp( this.min, this.max );\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _startP = /*@__PURE__*/ new Vector3();\nconst _startEnd = /*@__PURE__*/ new Vector3();\n\nclass Line3 {\n\n\tconstructor( start, end ) {\n\n\t\tthis.start = ( start !== undefined ) ? start : new Vector3();\n\t\tthis.end = ( end !== undefined ) ? end : new Vector3();\n\n\t}\n\n\tset( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t}\n\n\tdelta( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .delta() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t}\n\n\tdistanceSq() {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t}\n\n\tdistance() {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t}\n\n\tat( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tclosestPointToPointParameter( point, clampToLine ) {\n\n\t\t_startP.subVectors( point, this.start );\n\t\t_startEnd.subVectors( this.end, this.start );\n\n\t\tconst startEnd2 = _startEnd.dot( _startEnd );\n\t\tconst startEnd_startP = _startEnd.dot( _startP );\n\n\t\tlet t = startEnd_startP / startEnd2;\n\n\t\tif ( clampToLine ) {\n\n\t\t\tt = MathUtils.clamp( t, 0, 1 );\n\n\t\t}\n\n\t\treturn t;\n\n\t}\n\n\tclosestPointToPoint( point, clampToLine, target ) {\n\n\t\tconst t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t}\n\n\tequals( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n}\n\nfunction ImmediateRenderObject( material ) {\n\n\tObject3D.call( this );\n\n\tthis.material = material;\n\tthis.render = function ( /* renderCallback */ ) {};\n\n\tthis.hasPositions = false;\n\tthis.hasNormals = false;\n\tthis.hasColors = false;\n\tthis.hasUvs = false;\n\n\tthis.positionArray = null;\n\tthis.normalArray = null;\n\tthis.colorArray = null;\n\tthis.uvArray = null;\n\n\tthis.count = 0;\n\n}\n\nImmediateRenderObject.prototype = Object.create( Object3D.prototype );\nImmediateRenderObject.prototype.constructor = ImmediateRenderObject;\n\nImmediateRenderObject.prototype.isImmediateRenderObject = true;\n\nconst _vector$8 = /*@__PURE__*/ new Vector3();\n\nclass SpotLightHelper extends Object3D {\n\n\tconstructor( light, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst positions = [\n\t\t\t0, 0, 0, \t0, 0, 1,\n\t\t\t0, 0, 0, \t1, 0, 1,\n\t\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t\t0, 0, 0, \t0, 1, 1,\n\t\t\t0, 0, 0, \t0, - 1, 1\n\t\t];\n\n\t\tfor ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\tconst p1 = ( i / l ) * Math.PI * 2;\n\t\t\tconst p2 = ( j / l ) * Math.PI * 2;\n\n\t\t\tpositions.push(\n\t\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t\t);\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.cone = new LineSegments( geometry, material );\n\t\tthis.add( this.cone );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateMatrixWorld();\n\n\t\tconst coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tconst coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t_vector$8.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( _vector$8 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t}\n\n}\n\nconst _vector$9 = /*@__PURE__*/ new Vector3();\nconst _boneMatrix = /*@__PURE__*/ new Matrix4();\nconst _matrixWorldInv = /*@__PURE__*/ new Matrix4();\n\n\nclass SkeletonHelper extends LineSegments {\n\n\tconstructor( object ) {\n\n\t\tconst bones = getBoneList( object );\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = new Color( 0, 0, 1 );\n\t\tconst color2 = new Color( 0, 1, 0 );\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'SkeletonHelper';\n\t\tthis.isSkeletonHelper = true;\n\n\t\tthis.root = object;\n\t\tthis.bones = bones;\n\n\t\tthis.matrix = object.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst bones = this.bones;\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t_matrixWorldInv.copy( this.root.matrixWorld ).invert();\n\n\t\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t\t_vector$9.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t_vector$9.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\n\nfunction getBoneList( object ) {\n\n\tconst boneList = [];\n\n\tif ( object && object.isBone ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( let i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nclass PointLightHelper extends Mesh {\n\n\tconstructor( light, sphereSize, color ) {\n\n\t\tconst geometry = new SphereBufferGeometry( sphereSize, 4, 2 );\n\t\tconst material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'PointLightHelper';\n\n\t\tthis.matrix = this.light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\n\t\t/*\n\t// TODO: delete this comment?\n\tconst distanceGeometry = new THREE.IcosahedronBufferGeometry( 1, 2 );\n\tconst distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tconst d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\t/*\n\t\tconst d = this.light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.visible = true;\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\t\t*/\n\n\t}\n\n}\n\nconst _vector$a = /*@__PURE__*/ new Vector3();\nconst _color1 = /*@__PURE__*/ new Color();\nconst _color2 = /*@__PURE__*/ new Color();\n\nclass HemisphereLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tconst geometry = new OctahedronBufferGeometry( size );\n\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\t\tif ( this.color === undefined ) this.material.vertexColors = true;\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\t\tconst colors = new Float32Array( position.count * 3 );\n\n\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\t\tthis.add( new Mesh( geometry, this.material ) );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tconst mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tconst colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t_color1.copy( this.light.color );\n\t\t\t_color2.copy( this.light.groundColor );\n\n\t\t\tfor ( let i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tconst color = ( i < ( l / 2 ) ) ? _color1 : _color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tmesh.lookAt( _vector$a.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t}\n\n}\n\nclass GridHelper extends LineSegments {\n\n\tconstructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst center = divisions / 2;\n\t\tconst step = size / divisions;\n\t\tconst halfSize = size / 2;\n\n\t\tconst vertices = [], colors = [];\n\n\t\tfor ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\t\tconst color = i === center ? color1 : color2;\n\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'GridHelper';\n\n\t}\n\n}\n\nclass PolarGridHelper extends LineSegments {\n\n\tconstructor( radius = 10, radials = 16, circles = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\t// create the radials\n\n\t\tfor ( let i = 0; i <= radials; i ++ ) {\n\n\t\t\tconst v = ( i / radials ) * ( Math.PI * 2 );\n\n\t\t\tconst x = Math.sin( v ) * radius;\n\t\t\tconst z = Math.cos( v ) * radius;\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tvertices.push( x, 0, z );\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tcolors.push( color.r, color.g, color.b );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t}\n\n\t\t// create the circles\n\n\t\tfor ( let i = 0; i <= circles; i ++ ) {\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tconst r = radius - ( radius / circles * i );\n\n\t\t\tfor ( let j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t// first vertex\n\n\t\t\t\tlet v = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tlet x = Math.sin( v ) * r;\n\t\t\t\tlet z = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t// second vertex\n\n\t\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'PolarGridHelper';\n\n\t}\n\n}\n\nconst _v1$6 = /*@__PURE__*/ new Vector3();\nconst _v2$3 = /*@__PURE__*/ new Vector3();\nconst _v3$1 = /*@__PURE__*/ new Vector3();\n\nclass DirectionalLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tif ( size === undefined ) size = 1;\n\n\t\tlet geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [\n\t\t\t- size, size, 0,\n\t\t\tsize, size, 0,\n\t\t\tsize, - size, 0,\n\t\t\t- size, - size, 0,\n\t\t\t- size, size, 0\n\t\t], 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.lightPlane = new Line( geometry, material );\n\t\tthis.add( this.lightPlane );\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\t\tthis.targetLine = new Line( geometry, material );\n\t\tthis.add( this.targetLine );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.lightPlane.geometry.dispose();\n\t\tthis.lightPlane.material.dispose();\n\t\tthis.targetLine.geometry.dispose();\n\t\tthis.targetLine.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\t_v1$6.setFromMatrixPosition( this.light.matrixWorld );\n\t\t_v2$3.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t_v3$1.subVectors( _v2$3, _v1$6 );\n\n\t\tthis.lightPlane.lookAt( _v2$3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( _v2$3 );\n\t\tthis.targetLine.scale.z = _v3$1.length();\n\n\t}\n\n}\n\nconst _vector$b = /*@__PURE__*/ new Vector3();\nconst _camera = /*@__PURE__*/ new Camera();\n\n/**\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttp://evanw.github.com/lightgl.js/tests/shadowmap.html\n */\n\nclass CameraHelper extends LineSegments {\n\n\tconstructor( camera ) {\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst pointMap = {};\n\n\t\t// colors\n\n\t\tconst colorFrustum = new Color( 0xffaa00 );\n\t\tconst colorCone = new Color( 0xff0000 );\n\t\tconst colorUp = new Color( 0x00aaff );\n\t\tconst colorTarget = new Color( 0xffffff );\n\t\tconst colorCross = new Color( 0x333333 );\n\n\t\t// near\n\n\t\taddLine( 'n1', 'n2', colorFrustum );\n\t\taddLine( 'n2', 'n4', colorFrustum );\n\t\taddLine( 'n4', 'n3', colorFrustum );\n\t\taddLine( 'n3', 'n1', colorFrustum );\n\n\t\t// far\n\n\t\taddLine( 'f1', 'f2', colorFrustum );\n\t\taddLine( 'f2', 'f4', colorFrustum );\n\t\taddLine( 'f4', 'f3', colorFrustum );\n\t\taddLine( 'f3', 'f1', colorFrustum );\n\n\t\t// sides\n\n\t\taddLine( 'n1', 'f1', colorFrustum );\n\t\taddLine( 'n2', 'f2', colorFrustum );\n\t\taddLine( 'n3', 'f3', colorFrustum );\n\t\taddLine( 'n4', 'f4', colorFrustum );\n\n\t\t// cone\n\n\t\taddLine( 'p', 'n1', colorCone );\n\t\taddLine( 'p', 'n2', colorCone );\n\t\taddLine( 'p', 'n3', colorCone );\n\t\taddLine( 'p', 'n4', colorCone );\n\n\t\t// up\n\n\t\taddLine( 'u1', 'u2', colorUp );\n\t\taddLine( 'u2', 'u3', colorUp );\n\t\taddLine( 'u3', 'u1', colorUp );\n\n\t\t// target\n\n\t\taddLine( 'c', 't', colorTarget );\n\t\taddLine( 'p', 'c', colorCross );\n\n\t\t// cross\n\n\t\taddLine( 'cn1', 'cn2', colorCross );\n\t\taddLine( 'cn3', 'cn4', colorCross );\n\n\t\taddLine( 'cf1', 'cf2', colorCross );\n\t\taddLine( 'cf3', 'cf4', colorCross );\n\n\t\tfunction addLine( a, b, color ) {\n\n\t\t\taddPoint( a, color );\n\t\t\taddPoint( b, color );\n\n\t\t}\n\n\t\tfunction addPoint( id, color ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\t\tpointMap[ id ] = [];\n\n\t\t\t}\n\n\t\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'CameraHelper';\n\n\t\tthis.camera = camera;\n\t\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\t\tthis.matrix = camera.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.pointMap = pointMap;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst pointMap = this.pointMap;\n\n\t\tconst w = 1, h = 1;\n\n\t\t// we need just camera projection matrix inverse\n\t\t// world matrix must be identity\n\n\t\t_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 );\n\t\tsetPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 );\n\t\tsetPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 );\n\t\tsetPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 );\n\t\tsetPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 );\n\t\tsetPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 );\n\t\tsetPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 );\n\t\tsetPoint( 'f4', pointMap, geometry, _camera, w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 );\n\t\tsetPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 );\n\t\tsetPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );\n\t\tsetPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );\n\n\t\tsetPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 );\n\t\tsetPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 );\n\t\tsetPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 );\n\t\tsetPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t}\n\n}\n\n\nfunction setPoint( point, pointMap, geometry, camera, x, y, z ) {\n\n\t_vector$b.set( x, y, z ).unproject( camera );\n\n\tconst points = pointMap[ point ];\n\n\tif ( points !== undefined ) {\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tposition.setXYZ( points[ i ], _vector$b.x, _vector$b.y, _vector$b.z );\n\n\t\t}\n\n\t}\n\n}\n\nconst _box$3 = /*@__PURE__*/ new Box3();\n\nclass BoxHelper extends LineSegments {\n\n\tconstructor( object, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\tconst positions = new Float32Array( 8 * 3 );\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.type = 'BoxHelper';\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\t_box$3.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( _box$3.isEmpty() ) return;\n\n\t\tconst min = _box$3.min;\n\t\tconst max = _box$3.max;\n\n\t\t/*\n\t\t\t5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tconst position = this.geometry.attributes.position;\n\t\tconst array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.object = object;\n\t\tthis.update();\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tLineSegments.prototype.copy.call( this, source );\n\n\t\tthis.object = source.object;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Box3Helper extends LineSegments {\n\n\tconstructor( box, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\t\tconst positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.box = box;\n\n\t\tthis.type = 'Box3Helper';\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst box = this.box;\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tbox.getCenter( this.position );\n\n\t\tbox.getSize( this.scale );\n\n\t\tthis.scale.multiplyScalar( 0.5 );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\nclass PlaneHelper extends Line {\n\n\tconstructor( plane, size = 1, hex = 0xffff00 ) {\n\n\t\tconst color = hex;\n\n\t\tconst positions = [ 1, - 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 ];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.computeBoundingSphere();\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.type = 'PlaneHelper';\n\n\t\tthis.plane = plane;\n\n\t\tthis.size = size;\n\n\t\tconst positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ];\n\n\t\tconst geometry2 = new BufferGeometry();\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\t\tgeometry2.computeBoundingSphere();\n\n\t\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tlet scale = - this.plane.constant;\n\n\t\tif ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter\n\n\t\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, scale );\n\n\t\tthis.children[ 0 ].material.side = ( scale < 0 ) ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here\n\n\t\tthis.lookAt( this.plane.normal );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\nconst _axis = /*@__PURE__*/ new Vector3();\nlet _lineGeometry, _coneGeometry;\n\nclass ArrowHelper extends Object3D {\n\n\tconstructor( dir, origin, length, color, headLength, headWidth ) {\n\n\t\tsuper();\n\t\t// dir is assumed to be normalized\n\n\t\tthis.type = 'ArrowHelper';\n\n\t\tif ( dir === undefined ) dir = new Vector3( 0, 0, 1 );\n\t\tif ( origin === undefined ) origin = new Vector3( 0, 0, 0 );\n\t\tif ( length === undefined ) length = 1;\n\t\tif ( color === undefined ) color = 0xffff00;\n\t\tif ( headLength === undefined ) headLength = 0.2 * length;\n\t\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\t\tif ( _lineGeometry === undefined ) {\n\n\t\t\t_lineGeometry = new BufferGeometry();\n\t\t\t_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\t_coneGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 );\n\t\t\t_coneGeometry.translate( 0, - 0.5, 0 );\n\n\t\t}\n\n\t\tthis.position.copy( origin );\n\n\t\tthis.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add( this.line );\n\n\t\tthis.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.cone.matrixAutoUpdate = false;\n\t\tthis.add( this.cone );\n\n\t\tthis.setDirection( dir );\n\t\tthis.setLength( length, headLength, headWidth );\n\n\t}\n\n\tsetDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\t_axis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tconst radians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( _axis, radians );\n\n\t\t}\n\n\t}\n\n\tsetLength( length, headLength, headWidth ) {\n\n\t\tif ( headLength === undefined ) headLength = 0.2 * length;\n\t\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\t\tthis.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458\n\t\tthis.line.updateMatrix();\n\n\t\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\t\tthis.cone.position.y = length;\n\t\tthis.cone.updateMatrix();\n\n\t}\n\n\tsetColor( color ) {\n\n\t\tthis.line.material.color.set( color );\n\t\tthis.cone.material.color.set( color );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tthis.line.copy( source.line );\n\t\tthis.cone.copy( source.cone );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AxesHelper extends LineSegments {\n\n\tconstructor( size = 1 ) {\n\n\t\tconst vertices = [\n\t\t\t0, 0, 0,\tsize, 0, 0,\n\t\t\t0, 0, 0,\t0, size, 0,\n\t\t\t0, 0, 0,\t0, 0, size\n\t\t];\n\n\t\tconst colors = [\n\t\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t\t0, 0, 1,\t0, 0.6, 1\n\t\t];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'AxesHelper';\n\n\t}\n\n}\n\nconst _floatView = new Float32Array( 1 );\nconst _int32View = new Int32Array( _floatView.buffer );\n\nconst DataUtils = {\n\n\t// Converts float32 to float16 (stored as uint16 value).\n\n\ttoHalfFloat: function ( val ) {\n\n\t\t// Source: http://gamedev.stackexchange.com/questions/17326/conversion-of-a-number-from-single-precision-floating-point-representation-to-a/17410#17410\n\n\t\t/* This method is faster than the OpenEXR implementation (very often\n\t\t* used, eg. in Ogre), with the additional benefit of rounding, inspired\n\t\t* by James Tursa?s half-precision code. */\n\n\t\t_floatView[ 0 ] = val;\n\t\tconst x = _int32View[ 0 ];\n\n\t\tlet bits = ( x >> 16 ) & 0x8000; /* Get the sign */\n\t\tlet m = ( x >> 12 ) & 0x07ff; /* Keep one extra bit for rounding */\n\t\tconst e = ( x >> 23 ) & 0xff; /* Using int is faster here */\n\n\t\t/* If zero, or denormal, or exponent underflows too much for a denormal\n\t\t\t* half, return signed zero. */\n\t\tif ( e < 103 ) return bits;\n\n\t\t/* If NaN, return NaN. If Inf or exponent overflow, return Inf. */\n\t\tif ( e > 142 ) {\n\n\t\t\tbits |= 0x7c00;\n\t\t\t/* If exponent was 0xff and one mantissa bit was set, it means NaN,\n\t\t\t\t\t\t* not Inf, so make sure we set one mantissa bit too. */\n\t\t\tbits |= ( ( e == 255 ) ? 0 : 1 ) && ( x & 0x007fffff );\n\t\t\treturn bits;\n\n\t\t}\n\n\t\t/* If exponent underflows but not too much, return a denormal */\n\t\tif ( e < 113 ) {\n\n\t\t\tm |= 0x0800;\n\t\t\t/* Extra rounding may overflow and set mantissa to 0 and exponent\n\t\t\t\t* to 1, which is OK. */\n\t\t\tbits |= ( m >> ( 114 - e ) ) + ( ( m >> ( 113 - e ) ) & 1 );\n\t\t\treturn bits;\n\n\t\t}\n\n\t\tbits |= ( ( e - 112 ) << 10 ) | ( m >> 1 );\n\t\t/* Extra rounding. An overflow will set mantissa to 0 and increment\n\t\t\t* the exponent, which is OK. */\n\t\tbits += m & 1;\n\t\treturn bits;\n\n\t}\n\n};\n\nconst LOD_MIN = 4;\nconst LOD_MAX = 8;\nconst SIZE_MAX = Math.pow( 2, LOD_MAX );\n\n// The standard deviations (radians) associated with the extra mips. These are\n// chosen to approximate a Trowbridge-Reitz distribution function times the\n// geometric shadowing function. These sigma values squared must match the\n// variance #defines in cube_uv_reflection_fragment.glsl.js.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\nconst TOTAL_LODS = LOD_MAX - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\nconst MAX_SAMPLES = 20;\n\nconst ENCODINGS = {\n\t[ LinearEncoding ]: 0,\n\t[ sRGBEncoding ]: 1,\n\t[ RGBEEncoding ]: 2,\n\t[ RGBM7Encoding ]: 3,\n\t[ RGBM16Encoding ]: 4,\n\t[ RGBDEncoding ]: 5,\n\t[ GammaEncoding ]: 6\n};\n\nconst _flatCamera = /*@__PURE__*/ new OrthographicCamera();\nconst { _lodPlanes, _sizeLods, _sigmas } = /*@__PURE__*/ _createPlanes();\nlet _oldTarget = null;\n\n// Golden Ratio\nconst PHI = ( 1 + Math.sqrt( 5 ) ) / 2;\nconst INV_PHI = 1 / PHI;\n\n// Vertices of a dodecahedron (except the opposites, which represent the\n// same axis), used as axis directions evenly spread on a sphere.\nconst _axisDirections = [\n\t/*@__PURE__*/ new Vector3( 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),\n\t/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ) ];\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n */\n\nclass PMREMGenerator {\n\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._blurMaterial = _getBlurShader( MAX_SAMPLES );\n\t\tthis._equirectShader = null;\n\t\tthis._cubemapShader = null;\n\n\t\tthis._compileMaterial( this._blurMaterial );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t * is placed at the origin).\n\t */\n\tfromScene( scene, sigma = 0, near = 0.1, far = 100 ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * (RGBFormat) or HDR (RGBEFormat). The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromEquirectangular( equirectangular ) {\n\n\t\treturn this._fromTexture( equirectangular );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * (RGBFormat) or HDR (RGBEFormat). The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromCubemap( cubemap ) {\n\n\t\treturn this._fromTexture( cubemap );\n\n\t}\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileCubemapShader() {\n\n\t\tif ( this._cubemapShader === null ) {\n\n\t\t\tthis._cubemapShader = _getCubemapShader();\n\t\t\tthis._compileMaterial( this._cubemapShader );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileEquirectangularShader() {\n\n\t\tif ( this._equirectShader === null ) {\n\n\t\t\tthis._equirectShader = _getEquirectShader();\n\t\t\tthis._compileMaterial( this._equirectShader );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose() {\n\n\t\tthis._blurMaterial.dispose();\n\n\t\tif ( this._cubemapShader !== null ) this._cubemapShader.dispose();\n\t\tif ( this._equirectShader !== null ) this._equirectShader.dispose();\n\n\t\tfor ( let i = 0; i < _lodPlanes.length; i ++ ) {\n\n\t\t\t_lodPlanes[ i ].dispose();\n\n\t\t}\n\n\t}\n\n\t// private interface\n\n\t_cleanup( outputTarget ) {\n\n\t\tthis._pingPongRenderTarget.dispose();\n\t\tthis._renderer.setRenderTarget( _oldTarget );\n\t\toutputTarget.scissorTest = false;\n\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t}\n\n\t_fromTexture( texture ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\tconst cubeUVRenderTarget = this._allocateTargets( texture );\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_allocateTargets( texture ) { // warning: null texture is valid\n\n\t\tconst params = {\n\t\t\tmagFilter: NearestFilter,\n\t\t\tminFilter: NearestFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\ttype: UnsignedByteType,\n\t\t\tformat: RGBEFormat,\n\t\t\tencoding: _isLDR( texture ) ? texture.encoding : RGBEEncoding,\n\t\t\tdepthBuffer: false\n\t\t};\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( params );\n\t\tcubeUVRenderTarget.depthBuffer = texture ? false : true;\n\t\tthis._pingPongRenderTarget = _createRenderTarget( params );\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_compileMaterial( material ) {\n\n\t\tconst tmpMesh = new Mesh( _lodPlanes[ 0 ], material );\n\t\tthis._renderer.compile( tmpMesh, _flatCamera );\n\n\t}\n\n\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {\n\n\t\tconst fov = 90;\n\t\tconst aspect = 1;\n\t\tconst cubeCamera = new PerspectiveCamera( fov, aspect, near, far );\n\t\tconst upSign = [ 1, - 1, 1, 1, 1, 1 ];\n\t\tconst forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];\n\t\tconst renderer = this._renderer;\n\n\t\tconst outputEncoding = renderer.outputEncoding;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\tconst clearColor = renderer.getClearColor();\n\t\tconst clearAlpha = renderer.getClearAlpha();\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.outputEncoding = LinearEncoding;\n\n\t\tlet background = scene.background;\n\t\tif ( background && background.isColor ) {\n\n\t\t\tbackground.convertSRGBToLinear();\n\t\t\t// Convert linear to RGBE\n\t\t\tconst maxComponent = Math.max( background.r, background.g, background.b );\n\t\t\tconst fExp = Math.min( Math.max( Math.ceil( Math.log2( maxComponent ) ), - 128.0 ), 127.0 );\n\t\t\tbackground = background.multiplyScalar( Math.pow( 2.0, - fExp ) );\n\t\t\tconst alpha = ( fExp + 128.0 ) / 255.0;\n\t\t\trenderer.setClearColor( background, alpha );\n\t\t\tscene.background = null;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\t\t\tif ( col == 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( forwardSign[ i ], 0, 0 );\n\n\t\t\t} else if ( col == 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.lookAt( 0, forwardSign[ i ], 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( 0, 0, forwardSign[ i ] );\n\n\t\t\t}\n\n\t\t\t_setViewport( cubeUVRenderTarget,\n\t\t\t\tcol * SIZE_MAX, i > 2 ? SIZE_MAX : 0, SIZE_MAX, SIZE_MAX );\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.outputEncoding = outputEncoding;\n\t\trenderer.setClearColor( clearColor, clearAlpha );\n\n\t}\n\n\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tif ( texture.isCubeTexture ) {\n\n\t\t\tif ( this._cubemapShader == null ) {\n\n\t\t\t\tthis._cubemapShader = _getCubemapShader();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( this._equirectShader == null ) {\n\n\t\t\t\tthis._equirectShader = _getEquirectShader();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = texture.isCubeTexture ? this._cubemapShader : this._equirectShader;\n\t\tconst mesh = new Mesh( _lodPlanes[ 0 ], material );\n\n\t\tconst uniforms = material.uniforms;\n\n\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\tif ( ! texture.isCubeTexture ) {\n\n\t\t\tuniforms[ 'texelSize' ].value.set( 1.0 / texture.image.width, 1.0 / texture.image.height );\n\n\t\t}\n\n\t\tuniforms[ 'inputEncoding' ].value = ENCODINGS[ texture.encoding ];\n\t\tuniforms[ 'outputEncoding' ].value = ENCODINGS[ cubeUVRenderTarget.texture.encoding ];\n\n\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * SIZE_MAX, 2 * SIZE_MAX );\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera );\n\n\t}\n\n\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tfor ( let i = 1; i < TOTAL_LODS; i ++ ) {\n\n\t\t\tconst sigma = Math.sqrt( _sigmas[ i ] * _sigmas[ i ] - _sigmas[ i - 1 ] * _sigmas[ i - 1 ] );\n\n\t\t\tconst poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];\n\n\t\t\tthis._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t}\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t */\n\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t}\n\n\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\tconsole.error(\n\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = new Mesh( _lodPlanes[ lodOut ], blurMaterial );\n\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\tconst pixels = _sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\tconsole.warn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i == 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\tblurUniforms[ 'samples' ].value = samples;\n\t\tblurUniforms[ 'weights' ].value = weights;\n\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t}\n\n\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\tblurUniforms[ 'mipInt' ].value = LOD_MAX - lodIn;\n\t\tblurUniforms[ 'inputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ];\n\t\tblurUniforms[ 'outputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ];\n\n\t\tconst outputSize = _sizeLods[ lodOut ];\n\t\tconst x = 3 * Math.max( 0, SIZE_MAX - 2 * outputSize );\n\t\tconst y = ( lodOut === 0 ? 0 : 2 * SIZE_MAX ) + 2 * outputSize * ( lodOut > LOD_MAX - LOD_MIN ? lodOut - LOD_MAX + LOD_MIN : 0 );\n\n\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera );\n\n\t}\n\n}\n\nfunction _isLDR( texture ) {\n\n\tif ( texture === undefined || texture.type !== UnsignedByteType ) return false;\n\n\treturn texture.encoding === LinearEncoding || texture.encoding === sRGBEncoding || texture.encoding === GammaEncoding;\n\n}\n\nfunction _createPlanes() {\n\n\tconst _lodPlanes = [];\n\tconst _sizeLods = [];\n\tconst _sigmas = [];\n\n\tlet lod = LOD_MAX;\n\n\tfor ( let i = 0; i < TOTAL_LODS; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\t_sizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > LOD_MAX - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - LOD_MAX + LOD_MIN - 1 ];\n\n\t\t} else if ( i == 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\t_sigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 1 );\n\t\tconst min = - texelSize / 2;\n\t\tconst max = 1 + texelSize / 2;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : - 1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t}\n\n\t\tconst planes = new BufferGeometry();\n\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\t_lodPlanes.push( planes );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { _lodPlanes, _sizeLods, _sigmas };\n\n}\n\nfunction _createRenderTarget( params ) {\n\n\tconst cubeUVRenderTarget = new WebGLRenderTarget( 3 * SIZE_MAX, 3 * SIZE_MAX, params );\n\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _setViewport( target, x, y, width, height ) {\n\n\ttarget.viewport.set( x, y, width, height );\n\ttarget.scissor.set( x, y, width, height );\n\n}\n\nfunction _getBlurShader( maxSamples ) {\n\n\tconst weights = new Float32Array( maxSamples );\n\tconst poleAxis = new Vector3( 0, 1, 0 );\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'SphericalGaussianBlur',\n\n\t\tdefines: { 'n': maxSamples },\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'samples': { value: 1 },\n\t\t\t'weights': { value: weights },\n\t\t\t'latitudinal': { value: false },\n\t\t\t'dTheta': { value: 0 },\n\t\t\t'mipInt': { value: 0 },\n\t\t\t'poleAxis': { value: poleAxis },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getEquirectShader() {\n\n\tconst texelSize = new Vector2( 1, 1 );\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'EquirectangularToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'texelSize': { value: texelSize },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getCubemapShader() {\n\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'CubemapToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getCommonVertexShader() {\n\n\treturn /* glsl */`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`;\n\n}\n\nfunction _getEncodings() {\n\n\treturn /* glsl */`\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t`;\n\n}\n\nfunction Face4( a, b, c, d, normal, color, materialIndex ) {\n\n\tconsole.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' );\n\treturn new Face3( a, b, c, normal, color, materialIndex );\n\n}\n\nconst LineStrip = 0;\nconst LinePieces = 1;\nconst NoColors = 0;\nconst FaceColors = 1;\nconst VertexColors = 2;\n\nfunction MeshFaceMaterial( materials ) {\n\n\tconsole.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' );\n\treturn materials;\n\n}\n\nfunction MultiMaterial( materials = [] ) {\n\n\tconsole.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' );\n\tmaterials.isMultiMaterial = true;\n\tmaterials.materials = materials;\n\tmaterials.clone = function () {\n\n\t\treturn materials.slice();\n\n\t};\n\n\treturn materials;\n\n}\n\nfunction PointCloud( geometry, material ) {\n\n\tconsole.warn( 'THREE.PointCloud has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction Particle( material ) {\n\n\tconsole.warn( 'THREE.Particle has been renamed to THREE.Sprite.' );\n\treturn new Sprite( material );\n\n}\n\nfunction ParticleSystem( geometry, material ) {\n\n\tconsole.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction PointCloudMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleBasicMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleSystemMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction Vertex( x, y, z ) {\n\n\tconsole.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' );\n\treturn new Vector3( x, y, z );\n\n}\n\n//\n\nfunction DynamicBufferAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.' );\n\treturn new BufferAttribute( array, itemSize ).setUsage( DynamicDrawUsage );\n\n}\n\nfunction Int8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' );\n\treturn new Int8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' );\n\treturn new Uint8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8ClampedAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' );\n\treturn new Uint8ClampedBufferAttribute( array, itemSize );\n\n}\n\nfunction Int16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' );\n\treturn new Int16BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' );\n\treturn new Uint16BufferAttribute( array, itemSize );\n\n}\n\nfunction Int32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' );\n\treturn new Int32BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' );\n\treturn new Uint32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' );\n\treturn new Float32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float64Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' );\n\treturn new Float64BufferAttribute( array, itemSize );\n\n}\n\n//\n\nCurve.create = function ( construct, getPoint ) {\n\n\tconsole.log( 'THREE.Curve.create() has been deprecated' );\n\n\tconstruct.prototype = Object.create( Curve.prototype );\n\tconstruct.prototype.constructor = construct;\n\tconstruct.prototype.getPoint = getPoint;\n\n\treturn construct;\n\n};\n\n//\n\nObject.assign( CurvePath.prototype, {\n\n\tcreatePointsGeometry: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t// generate geometry from path points (for Line or Points objects)\n\n\t\tconst pts = this.getPoints( divisions );\n\t\treturn this.createGeometry( pts );\n\n\t},\n\n\tcreateSpacedPointsGeometry: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t// generate geometry from equidistant sampling along the path\n\n\t\tconst pts = this.getSpacedPoints( divisions );\n\t\treturn this.createGeometry( pts );\n\n\t},\n\n\tcreateGeometry: function ( points ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\tconst geometry = new Geometry();\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tgeometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\n//\n\nObject.assign( Path.prototype, {\n\n\tfromPoints: function ( points ) {\n\n\t\tconsole.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' );\n\t\treturn this.setFromPoints( points );\n\n\t}\n\n} );\n\n//\n\nfunction ClosedSplineCurve3( points ) {\n\n\tconsole.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\tthis.closed = true;\n\n}\n\nClosedSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n//\n\nfunction SplineCurve3( points ) {\n\n\tconsole.warn( 'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\n}\n\nSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n//\n\nfunction Spline( points ) {\n\n\tconsole.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\n}\n\nSpline.prototype = Object.create( CatmullRomCurve3.prototype );\n\nObject.assign( Spline.prototype, {\n\n\tinitFromArray: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .initFromArray() has been removed.' );\n\n\t},\n\tgetControlPointsArray: function ( /* optionalTarget */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .getControlPointsArray() has been removed.' );\n\n\t},\n\treparametrizeByArcLength: function ( /* samplingCoef */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nfunction AxisHelper( size ) {\n\n\tconsole.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' );\n\treturn new AxesHelper( size );\n\n}\n\nfunction BoundingBoxHelper( object, color ) {\n\n\tconsole.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' );\n\treturn new BoxHelper( object, color );\n\n}\n\nfunction EdgesHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' );\n\treturn new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\nGridHelper.prototype.setColors = function () {\n\n\tconsole.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' );\n\n};\n\nSkeletonHelper.prototype.update = function () {\n\n\tconsole.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );\n\n};\n\nfunction WireframeHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' );\n\treturn new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\n//\n\nObject.assign( Loader.prototype, {\n\n\textractUrlBase: function ( url ) {\n\n\t\tconsole.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' );\n\t\treturn LoaderUtils.extractUrlBase( url );\n\n\t}\n\n} );\n\nLoader.Handlers = {\n\n\tadd: function ( /* regex, loader */ ) {\n\n\t\tconsole.error( 'THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.' );\n\n\t},\n\n\tget: function ( /* file */ ) {\n\n\t\tconsole.error( 'THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.' );\n\n\t}\n\n};\n\nfunction XHRLoader( manager ) {\n\n\tconsole.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' );\n\treturn new FileLoader( manager );\n\n}\n\nfunction BinaryTextureLoader( manager ) {\n\n\tconsole.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' );\n\treturn new DataTextureLoader( manager );\n\n}\n\n//\n\nObject.assign( Box2.prototype, {\n\n\tcenter: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t},\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tsize: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box2: .size() has been renamed to .getSize().' );\n\t\treturn this.getSize( optionalTarget );\n\n\t}\n} );\n\nObject.assign( Box3.prototype, {\n\n\tcenter: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t},\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tisIntersectionSphere: function ( sphere ) {\n\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\treturn this.intersectsSphere( sphere );\n\n\t},\n\tsize: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box3: .size() has been renamed to .getSize().' );\n\t\treturn this.getSize( optionalTarget );\n\n\t}\n} );\n\nObject.assign( Sphere.prototype, {\n\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Sphere: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\n} );\n\nFrustum.prototype.setFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().' );\n\treturn this.setFromProjectionMatrix( m );\n\n};\n\nLine3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\nObject.assign( MathUtils, {\n\n\trandom16: function () {\n\n\t\tconsole.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' );\n\t\treturn Math.random();\n\n\t},\n\n\tnearestPowerOfTwo: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' );\n\t\treturn MathUtils.floorPowerOfTwo( value );\n\n\t},\n\n\tnextPowerOfTwo: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' );\n\t\treturn MathUtils.ceilPowerOfTwo( value );\n\n\t}\n\n} );\n\nObject.assign( Matrix3.prototype, {\n\n\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\tconsole.warn( \"THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\treturn this.toArray( array, offset );\n\n\t},\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\n\t\treturn vector.applyMatrix3( this );\n\n\t},\n\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' );\n\n\t},\n\tapplyToBufferAttribute: function ( attribute ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.' );\n\t\treturn attribute.applyMatrix3( this );\n\n\t},\n\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\tconsole.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' );\n\n\t},\n\tgetInverse: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\t\treturn this.copy( matrix ).invert();\n\n\t}\n\n} );\n\nObject.assign( Matrix4.prototype, {\n\n\textractPosition: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\n\t\treturn this.copyPosition( m );\n\n\t},\n\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\tconsole.warn( \"THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\treturn this.toArray( array, offset );\n\n\t},\n\tgetPosition: function () {\n\n\t\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\t\treturn new Vector3().setFromMatrixColumn( this, 3 );\n\n\t},\n\tsetRotationFromQuaternion: function ( q ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\n\t\treturn this.makeRotationFromQuaternion( q );\n\n\t},\n\tmultiplyToArray: function () {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' );\n\n\t},\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\tmultiplyVector4: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' );\n\n\t},\n\trotateAxis: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\n\t\tv.transformDirection( this );\n\n\t},\n\tcrossVector: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\ttranslate: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\n\n\t},\n\trotateX: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\n\n\t},\n\trotateY: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\n\n\t},\n\trotateZ: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\n\n\t},\n\trotateByAxis: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\n\n\t},\n\tapplyToBufferAttribute: function ( attribute ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.' );\n\t\treturn attribute.applyMatrix4( this );\n\n\t},\n\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\tconsole.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' );\n\n\t},\n\tmakeFrustum: function ( left, right, bottom, top, near, far ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' );\n\t\treturn this.makePerspective( left, right, top, bottom, near, far );\n\n\t},\n\tgetInverse: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\t\treturn this.copy( matrix ).invert();\n\n\t}\n\n} );\n\nPlane.prototype.isIntersectionLine = function ( line ) {\n\n\tconsole.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' );\n\treturn this.intersectsLine( line );\n\n};\n\nObject.assign( Quaternion.prototype, {\n\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' );\n\t\treturn vector.applyQuaternion( this );\n\n\t},\n\tinverse: function ( ) {\n\n\t\tconsole.warn( 'THREE.Quaternion: .inverse() has been renamed to invert().' );\n\t\treturn this.invert();\n\n\t}\n\n} );\n\nObject.assign( Ray.prototype, {\n\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tisIntersectionPlane: function ( plane ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\n\t\treturn this.intersectsPlane( plane );\n\n\t},\n\tisIntersectionSphere: function ( sphere ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\treturn this.intersectsSphere( sphere );\n\n\t}\n\n} );\n\nObject.assign( Triangle.prototype, {\n\n\tarea: function () {\n\n\t\tconsole.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' );\n\t\treturn this.getArea();\n\n\t},\n\tbarycoordFromPoint: function ( point, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\treturn this.getBarycoord( point, target );\n\n\t},\n\tmidpoint: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' );\n\t\treturn this.getMidpoint( target );\n\n\t},\n\tnormal: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\treturn this.getNormal( target );\n\n\t},\n\tplane: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' );\n\t\treturn this.getPlane( target );\n\n\t}\n\n} );\n\nObject.assign( Triangle, {\n\n\tbarycoordFromPoint: function ( point, a, b, c, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\treturn Triangle.getBarycoord( point, a, b, c, target );\n\n\t},\n\tnormal: function ( a, b, c, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\treturn Triangle.getNormal( a, b, c, target );\n\n\t}\n\n} );\n\nObject.assign( Shape.prototype, {\n\n\textractAllPoints: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' );\n\t\treturn this.extractPoints( divisions );\n\n\t},\n\textrude: function ( options ) {\n\n\t\tconsole.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' );\n\t\treturn new ExtrudeGeometry( this, options );\n\n\t},\n\tmakeGeometry: function ( options ) {\n\n\t\tconsole.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' );\n\t\treturn new ShapeGeometry( this, options );\n\n\t}\n\n} );\n\nObject.assign( Vector2.prototype, {\n\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tdistanceToManhattan: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\treturn this.manhattanDistanceTo( v );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\nObject.assign( Vector3.prototype, {\n\n\tsetEulerFromRotationMatrix: function () {\n\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\n\n\t},\n\tsetEulerFromQuaternion: function () {\n\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\n\n\t},\n\tgetPositionFromMatrix: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\n\t\treturn this.setFromMatrixPosition( m );\n\n\t},\n\tgetScaleFromMatrix: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\n\t\treturn this.setFromMatrixScale( m );\n\n\t},\n\tgetColumnFromMatrix: function ( index, matrix ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\n\t\treturn this.setFromMatrixColumn( matrix, index );\n\n\t},\n\tapplyProjection: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' );\n\t\treturn this.applyMatrix4( m );\n\n\t},\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tdistanceToManhattan: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\treturn this.manhattanDistanceTo( v );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\nObject.assign( Vector4.prototype, {\n\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\n//\n\nObject.assign( Geometry.prototype, {\n\n\tcomputeTangents: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeTangents() has been removed.' );\n\n\t},\n\tcomputeLineDistances: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' );\n\n\t},\n\tapplyMatrix: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\treturn this.applyMatrix4( matrix );\n\n\t}\n\n} );\n\nObject.assign( Object3D.prototype, {\n\n\tgetChildByName: function ( name ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\n\t\treturn this.getObjectByName( name );\n\n\t},\n\trenderDepth: function () {\n\n\t\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\n\n\t},\n\ttranslate: function ( distance, axis ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\n\t\treturn this.translateOnAxis( axis, distance );\n\n\t},\n\tgetWorldRotation: function () {\n\n\t\tconsole.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' );\n\n\t},\n\tapplyMatrix: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\treturn this.applyMatrix4( matrix );\n\n\t}\n\n} );\n\nObject.defineProperties( Object3D.prototype, {\n\n\teulerOrder: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\treturn this.rotation.order;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\tthis.rotation.order = value;\n\n\t\t}\n\t},\n\tuseQuaternion: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t}\n\t}\n\n} );\n\nObject.assign( Mesh.prototype, {\n\n\tsetDrawMode: function () {\n\n\t\tconsole.error( 'THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n\t},\n\n} );\n\nObject.defineProperties( Mesh.prototype, {\n\n\tdrawMode: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.' );\n\t\t\treturn TrianglesDrawMode;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( LOD.prototype, {\n\n\tobjects: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.LOD: .objects has been renamed to .levels.' );\n\t\t\treturn this.levels;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperty( Skeleton.prototype, 'useVertexTexture', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t},\n\tset: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t}\n\n} );\n\nSkinnedMesh.prototype.initBones = function () {\n\n\tconsole.error( 'THREE.SkinnedMesh: initBones() has been removed.' );\n\n};\n\nObject.defineProperty( Curve.prototype, '__arcLengthDivisions', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\treturn this.arcLengthDivisions;\n\n\t},\n\tset: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\tthis.arcLengthDivisions = value;\n\n\t}\n\n} );\n\n//\n\nPerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) {\n\n\tconsole.warn( \"THREE.PerspectiveCamera.setLens is deprecated. \" +\n\t\t\t\"Use .setFocalLength and .filmGauge for a photographic setup.\" );\n\n\tif ( filmGauge !== undefined ) this.filmGauge = filmGauge;\n\tthis.setFocalLength( focalLength );\n\n};\n\n//\n\nObject.defineProperties( Light.prototype, {\n\tonlyShadow: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .onlyShadow has been removed.' );\n\n\t\t}\n\t},\n\tshadowCameraFov: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' );\n\t\t\tthis.shadow.camera.fov = value;\n\n\t\t}\n\t},\n\tshadowCameraLeft: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' );\n\t\t\tthis.shadow.camera.left = value;\n\n\t\t}\n\t},\n\tshadowCameraRight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' );\n\t\t\tthis.shadow.camera.right = value;\n\n\t\t}\n\t},\n\tshadowCameraTop: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' );\n\t\t\tthis.shadow.camera.top = value;\n\n\t\t}\n\t},\n\tshadowCameraBottom: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' );\n\t\t\tthis.shadow.camera.bottom = value;\n\n\t\t}\n\t},\n\tshadowCameraNear: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' );\n\t\t\tthis.shadow.camera.near = value;\n\n\t\t}\n\t},\n\tshadowCameraFar: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' );\n\t\t\tthis.shadow.camera.far = value;\n\n\t\t}\n\t},\n\tshadowCameraVisible: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' );\n\n\t\t}\n\t},\n\tshadowBias: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' );\n\t\t\tthis.shadow.bias = value;\n\n\t\t}\n\t},\n\tshadowDarkness: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowDarkness has been removed.' );\n\n\t\t}\n\t},\n\tshadowMapWidth: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' );\n\t\t\tthis.shadow.mapSize.width = value;\n\n\t\t}\n\t},\n\tshadowMapHeight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' );\n\t\t\tthis.shadow.mapSize.height = value;\n\n\t\t}\n\t}\n} );\n\n//\n\nObject.defineProperties( BufferAttribute.prototype, {\n\n\tlength: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' );\n\t\t\treturn this.array.length;\n\n\t\t}\n\t},\n\tdynamic: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\treturn this.usage === DynamicDrawUsage;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\tthis.setUsage( DynamicDrawUsage );\n\n\t\t}\n\t}\n\n} );\n\nObject.assign( BufferAttribute.prototype, {\n\tsetDynamic: function ( value ) {\n\n\t\tconsole.warn( 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\t\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\t\treturn this;\n\n\t},\n\tcopyIndicesArray: function ( /* indices */ ) {\n\n\t\tconsole.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' );\n\n\t},\n\tsetArray: function ( /* array */ ) {\n\n\t\tconsole.error( 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n\t}\n} );\n\nObject.assign( BufferGeometry.prototype, {\n\n\taddIndex: function ( index ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\n\t\tthis.setIndex( index );\n\n\t},\n\taddAttribute: function ( name, attribute ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().' );\n\n\t\tif ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\n\n\t\t\treturn this.setAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\n\n\t\t}\n\n\t\tif ( name === 'index' ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' );\n\t\t\tthis.setIndex( attribute );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\treturn this.setAttribute( name, attribute );\n\n\t},\n\taddDrawCall: function ( start, count, indexOffset ) {\n\n\t\tif ( indexOffset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\n\n\t\t}\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\n\t\tthis.addGroup( start, count );\n\n\t},\n\tclearDrawCalls: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\n\t\tthis.clearGroups();\n\n\t},\n\tcomputeTangents: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' );\n\n\t},\n\tcomputeOffsets: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\n\n\t},\n\tremoveAttribute: function ( name ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().' );\n\n\t\treturn this.deleteAttribute( name );\n\n\t},\n\tapplyMatrix: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\treturn this.applyMatrix4( matrix );\n\n\t}\n\n} );\n\nObject.defineProperties( BufferGeometry.prototype, {\n\n\tdrawcalls: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t},\n\toffsets: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( InstancedBufferGeometry.prototype, {\n\n\tmaxInstancedCount: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' );\n\t\t\treturn this.instanceCount;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' );\n\t\t\tthis.instanceCount = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( Raycaster.prototype, {\n\n\tlinePrecision: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' );\n\t\t\treturn this.params.Line.threshold;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' );\n\t\t\tthis.params.Line.threshold = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( InterleavedBuffer.prototype, {\n\n\tdynamic: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' );\n\t\t\treturn this.usage === DynamicDrawUsage;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' );\n\t\t\tthis.setUsage( value );\n\n\t\t}\n\t}\n\n} );\n\nObject.assign( InterleavedBuffer.prototype, {\n\tsetDynamic: function ( value ) {\n\n\t\tconsole.warn( 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\t\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\t\treturn this;\n\n\t},\n\tsetArray: function ( /* array */ ) {\n\n\t\tconsole.error( 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n\t}\n} );\n\n//\n\nObject.assign( ExtrudeBufferGeometry.prototype, {\n\n\tgetArrays: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .getArrays() has been removed.' );\n\n\t},\n\n\taddShapeList: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.' );\n\n\t},\n\n\taddShape: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShape() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nObject.assign( Scene.prototype, {\n\n\tdispose: function () {\n\n\t\tconsole.error( 'THREE.Scene: .dispose() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Uniform.prototype, {\n\n\tdynamic: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' );\n\n\t\t}\n\t},\n\tonUpdate: {\n\t\tvalue: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' );\n\t\t\treturn this;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Material.prototype, {\n\n\twrapAround: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t}\n\t},\n\n\toverdraw: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t}\n\t},\n\n\twrapRGB: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapRGB has been removed.' );\n\t\t\treturn new Color();\n\n\t\t}\n\t},\n\n\tshading: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\tthis.flatShading = ( value === FlatShading );\n\n\t\t}\n\t},\n\n\tstencilMask: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\treturn this.stencilFuncMask;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\tthis.stencilFuncMask = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( MeshPhongMaterial.prototype, {\n\n\tmetal: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( MeshPhysicalMaterial.prototype, {\n\n\ttransparency: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' );\n\t\t\treturn this.transmission;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' );\n\t\t\tthis.transmission = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( ShaderMaterial.prototype, {\n\n\tderivatives: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\treturn this.extensions.derivatives;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\tthis.extensions.derivatives = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.assign( WebGLRenderer.prototype, {\n\n\tclearTarget: function ( renderTarget, color, depth, stencil ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' );\n\t\tthis.setRenderTarget( renderTarget );\n\t\tthis.clear( color, depth, stencil );\n\n\t},\n\tanimate: function ( callback ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' );\n\t\tthis.setAnimationLoop( callback );\n\n\t},\n\tgetCurrentRenderTarget: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' );\n\t\treturn this.getRenderTarget();\n\n\t},\n\tgetMaxAnisotropy: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' );\n\t\treturn this.capabilities.getMaxAnisotropy();\n\n\t},\n\tgetPrecision: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' );\n\t\treturn this.capabilities.precision;\n\n\t},\n\tresetGLState: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' );\n\t\treturn this.state.reset();\n\n\t},\n\tsupportsFloatTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).' );\n\t\treturn this.extensions.get( 'OES_texture_float' );\n\n\t},\n\tsupportsHalfFloatTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).' );\n\t\treturn this.extensions.get( 'OES_texture_half_float' );\n\n\t},\n\tsupportsStandardDerivatives: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).' );\n\t\treturn this.extensions.get( 'OES_standard_derivatives' );\n\n\t},\n\tsupportsCompressedTextureS3TC: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).' );\n\t\treturn this.extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t},\n\tsupportsCompressedTexturePVRTC: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).' );\n\t\treturn this.extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t},\n\tsupportsBlendMinMax: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).' );\n\t\treturn this.extensions.get( 'EXT_blend_minmax' );\n\n\t},\n\tsupportsVertexTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' );\n\t\treturn this.capabilities.vertexTextures;\n\n\t},\n\tsupportsInstancedArrays: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).' );\n\t\treturn this.extensions.get( 'ANGLE_instanced_arrays' );\n\n\t},\n\tenableScissorTest: function ( boolean ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );\n\t\tthis.setScissorTest( boolean );\n\n\t},\n\tinitMaterial: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\n\n\t},\n\taddPrePlugin: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\n\n\t},\n\taddPostPlugin: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\n\n\t},\n\tupdateShadowMap: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\n\n\t},\n\tsetFaceCulling: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' );\n\n\t},\n\tallocTextureUnit: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .allocTextureUnit() has been removed.' );\n\n\t},\n\tsetTexture: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setTexture() has been removed.' );\n\n\t},\n\tsetTexture2D: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setTexture2D() has been removed.' );\n\n\t},\n\tsetTextureCube: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setTextureCube() has been removed.' );\n\n\t},\n\tgetActiveMipMapLevel: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().' );\n\t\treturn this.getActiveMipmapLevel();\n\n\t}\n\n} );\n\nObject.defineProperties( WebGLRenderer.prototype, {\n\n\tshadowMapEnabled: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.enabled;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' );\n\t\t\tthis.shadowMap.enabled = value;\n\n\t\t}\n\t},\n\tshadowMapType: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' );\n\t\t\tthis.shadowMap.type = value;\n\n\t\t}\n\t},\n\tshadowMapCullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\tcontext: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' );\n\t\t\treturn this.getContext();\n\n\t\t}\n\t},\n\tvr: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .vr has been renamed to .xr' );\n\t\t\treturn this.xr;\n\n\t\t}\n\t},\n\tgammaInput: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\n\t\t}\n\t},\n\tgammaOutput: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\tthis.outputEncoding = ( value === true ) ? sRGBEncoding : LinearEncoding;\n\n\t\t}\n\t},\n\ttoneMappingWhitePoint: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\t\t\treturn 1.0;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\n\t\t}\n\t},\n\n} );\n\nObject.defineProperties( WebGLShadowMap.prototype, {\n\n\tcullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* cullFace */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderReverseSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderSingleSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t}\n\n} );\n\nfunction WebGLRenderTargetCube( width, height, options ) {\n\n\tconsole.warn( 'THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).' );\n\treturn new WebGLCubeRenderTarget( width, options );\n\n}\n\n//\n\nObject.defineProperties( WebGLRenderTarget.prototype, {\n\n\twrapS: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\treturn this.texture.wrapS;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\tthis.texture.wrapS = value;\n\n\t\t}\n\t},\n\twrapT: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\treturn this.texture.wrapT;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\tthis.texture.wrapT = value;\n\n\t\t}\n\t},\n\tmagFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\treturn this.texture.magFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\tthis.texture.magFilter = value;\n\n\t\t}\n\t},\n\tminFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\treturn this.texture.minFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\tthis.texture.minFilter = value;\n\n\t\t}\n\t},\n\tanisotropy: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\treturn this.texture.anisotropy;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\tthis.texture.anisotropy = value;\n\n\t\t}\n\t},\n\toffset: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\treturn this.texture.offset;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\tthis.texture.offset = value;\n\n\t\t}\n\t},\n\trepeat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\treturn this.texture.repeat;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\tthis.texture.repeat = value;\n\n\t\t}\n\t},\n\tformat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\treturn this.texture.format;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\tthis.texture.format = value;\n\n\t\t}\n\t},\n\ttype: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\treturn this.texture.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\tthis.texture.type = value;\n\n\t\t}\n\t},\n\tgenerateMipmaps: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\treturn this.texture.generateMipmaps;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\tthis.texture.generateMipmaps = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Audio.prototype, {\n\n\tload: {\n\t\tvalue: function ( file ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' );\n\t\t\tconst scope = this;\n\t\t\tconst audioLoader = new AudioLoader();\n\t\t\taudioLoader.load( file, function ( buffer ) {\n\n\t\t\t\tscope.setBuffer( buffer );\n\n\t\t\t} );\n\t\t\treturn this;\n\n\t\t}\n\t},\n\tstartTime: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Audio: .startTime is now .play( delay ).' );\n\n\t\t}\n\t}\n\n} );\n\nAudioAnalyser.prototype.getData = function () {\n\n\tconsole.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' );\n\treturn this.getFrequencyData();\n\n};\n\n//\n\nCubeCamera.prototype.updateCubeMap = function ( renderer, scene ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' );\n\treturn this.update( renderer, scene );\n\n};\n\nCubeCamera.prototype.clear = function ( renderer, color, depth, stencil ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .clear() is now .renderTarget.clear().' );\n\treturn this.renderTarget.clear( renderer, color, depth, stencil );\n\n};\n\n//\n\nconst GeometryUtils = {\n\n\tmerge: function ( geometry1, geometry2, materialIndexOffset ) {\n\n\t\tconsole.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' );\n\t\tlet matrix;\n\n\t\tif ( geometry2.isMesh ) {\n\n\t\t\tgeometry2.matrixAutoUpdate && geometry2.updateMatrix();\n\n\t\t\tmatrix = geometry2.matrix;\n\t\t\tgeometry2 = geometry2.geometry;\n\n\t\t}\n\n\t\tgeometry1.merge( geometry2, matrix, materialIndexOffset );\n\n\t},\n\n\tcenter: function ( geometry ) {\n\n\t\tconsole.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' );\n\t\treturn geometry.center();\n\n\t}\n\n};\n\nImageUtils.crossOrigin = undefined;\n\nImageUtils.loadTexture = function ( url, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\n\n\tconst loader = new TextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tconst texture = loader.load( url, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\nImageUtils.loadTextureCube = function ( urls, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\n\n\tconst loader = new CubeTextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tconst texture = loader.load( urls, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\nImageUtils.loadCompressedTexture = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\nImageUtils.loadCompressedTextureCube = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\n//\n\nfunction CanvasRenderer() {\n\n\tconsole.error( 'THREE.CanvasRenderer has been removed' );\n\n}\n\n//\n\nfunction JSONLoader() {\n\n\tconsole.error( 'THREE.JSONLoader has been removed.' );\n\n}\n\n//\n\nconst SceneUtils = {\n\n\tcreateMultiMaterialObject: function ( /* geometry, materials */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t},\n\n\tdetach: function ( /* child, parent, scene */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t},\n\n\tattach: function ( /* child, scene, parent */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t}\n\n};\n\n//\n\nfunction LensFlare() {\n\n\tconsole.error( 'THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js' );\n\n}\n\nif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t/* eslint-disable no-undef */\n\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\trevision: REVISION,\n\t} } ) );\n\t/* eslint-enable no-undef */\n\n}\n\nexport { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AlphaFormat, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AmbientLightProbe, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, AxisHelper, BackSide, BasicDepthPacking, BasicShadowMap, BinaryTextureLoader, Bone, BooleanKeyframeTrack, BoundingBoxHelper, Box2, Box3, Box3Helper, BoxBufferGeometry, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasRenderer, CanvasTexture, CatmullRomCurve3, CineonToneMapping, CircleBufferGeometry, CircleGeometry, ClampToEdgeWrapping, Clock, ClosedSplineCurve3, Color, ColorKeyframeTrack, CompressedTexture, CompressedTextureLoader, ConeBufferGeometry, ConeGeometry, CubeCamera, BoxGeometry as CubeGeometry, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubeUVRefractionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderBufferGeometry, CylinderGeometry, Cylindrical, DataTexture, DataTexture2DArray, DataTexture3D, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronBufferGeometry, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicBufferAttribute, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EdgesHelper, EllipseCurve, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExtrudeBufferGeometry, ExtrudeGeometry, Face3, Face4, FaceColors, FileLoader, FlatShading, Float16BufferAttribute, Float32Attribute, Float32BufferAttribute, Float64Attribute, Float64BufferAttribute, FloatType, Fog, FogExp2, Font, FontLoader, FrontSide, Frustum, GLBufferAttribute, GLSL1, GLSL3, GammaEncoding, Geometry, GeometryUtils, GreaterDepth, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HalfFloatType, HemisphereLight, HemisphereLightHelper, HemisphereLightProbe, IcosahedronBufferGeometry, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, ImmediateRenderObject, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16Attribute, Int16BufferAttribute, Int32Attribute, Int32BufferAttribute, Int8Attribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InvertStencilOp, JSONLoader, KeepStencilOp, KeyframeTrack, LOD, LatheBufferGeometry, LatheGeometry, Layers, LensFlare, LessDepth, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LinePieces, LineSegments, LineStrip, LinearEncoding, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearToneMapping, Loader, LoaderUtils, LoadingManager, LogLuvEncoding, LoopOnce, LoopPingPong, LoopRepeat, LuminanceAlphaFormat, LuminanceFormat, MOUSE, Material, MaterialLoader, MathUtils as Math, MathUtils, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshFaceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiMaterial, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeverDepth, NeverStencilFunc, NoBlending, NoColors, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronBufferGeometry, OctahedronGeometry, OneFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, ParametricBufferGeometry, ParametricGeometry, Particle, ParticleBasicMaterial, ParticleSystem, ParticleSystemMaterial, Path, PerspectiveCamera, Plane, PlaneBufferGeometry, PlaneGeometry, PlaneHelper, PointCloud, PointCloudMaterial, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronBufferGeometry, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, REVISION, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBDEncoding, RGBEEncoding, RGBEFormat, RGBFormat, RGBIntegerFormat, RGBM16Encoding, RGBM7Encoding, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RingBufferGeometry, RingGeometry, SRGB8_ALPHA8_ASTC_10x10_Format, SRGB8_ALPHA8_ASTC_10x5_Format, SRGB8_ALPHA8_ASTC_10x6_Format, SRGB8_ALPHA8_ASTC_10x8_Format, SRGB8_ALPHA8_ASTC_12x10_Format, SRGB8_ALPHA8_ASTC_12x12_Format, SRGB8_ALPHA8_ASTC_4x4_Format, SRGB8_ALPHA8_ASTC_5x4_Format, SRGB8_ALPHA8_ASTC_5x5_Format, SRGB8_ALPHA8_ASTC_6x5_Format, SRGB8_ALPHA8_ASTC_6x6_Format, SRGB8_ALPHA8_ASTC_8x5_Format, SRGB8_ALPHA8_ASTC_8x6_Format, SRGB8_ALPHA8_ASTC_8x8_Format, Scene, SceneUtils, ShaderChunk, ShaderLib, ShaderMaterial, ShadowMaterial, Shape, ShapeBufferGeometry, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, SmoothShading, Sphere, SphereBufferGeometry, SphereGeometry, Spherical, SphericalHarmonics3, Spline, SplineCurve, SplineCurve3, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronBufferGeometry, TetrahedronGeometry, TextBufferGeometry, TextGeometry, Texture, TextureLoader, TorusBufferGeometry, TorusGeometry, TorusKnotBufferGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeBufferGeometry, TubeGeometry, UVMapping, Uint16Attribute, Uint16BufferAttribute, Uint32Attribute, Uint32BufferAttribute, Uint8Attribute, Uint8BufferAttribute, Uint8ClampedAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt248Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShort565Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, Vertex, VertexColors, VideoTexture, WebGL1Renderer, WebGLCubeRenderTarget, WebGLMultisampleRenderTarget, WebGLRenderTarget, WebGLRenderTargetCube, WebGLRenderer, WebGLUtils, WireframeGeometry, WireframeHelper, WrapAroundEnding, XHRLoader, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, sRGBEncoding };\n","import {\n\tEventDispatcher,\n\tMatrix4,\n\tPlane,\n\tRaycaster,\n\tVector2,\n\tVector3\n} from \"../../../build/three.module.js\";\n\nvar DragControls = function ( _objects, _camera, _domElement ) {\n\n\tvar _plane = new Plane();\n\tvar _raycaster = new Raycaster();\n\n\tvar _mouse = new Vector2();\n\tvar _offset = new Vector3();\n\tvar _intersection = new Vector3();\n\tvar _worldPosition = new Vector3();\n\tvar _inverseMatrix = new Matrix4();\n\tvar _intersections = [];\n\n\tvar _selected = null, _hovered = null;\n\n\t//\n\n\tvar scope = this;\n\n\tfunction activate() {\n\n\t\t_domElement.addEventListener( 'pointermove', onPointerMove, false );\n\t\t_domElement.addEventListener( 'pointerdown', onPointerDown, false );\n\t\t_domElement.addEventListener( 'pointerup', onPointerCancel, false );\n\t\t_domElement.addEventListener( 'pointerleave', onPointerCancel, false );\n\t\t_domElement.addEventListener( 'touchmove', onTouchMove, false );\n\t\t_domElement.addEventListener( 'touchstart', onTouchStart, false );\n\t\t_domElement.addEventListener( 'touchend', onTouchEnd, false );\n\n\t}\n\n\tfunction deactivate() {\n\n\t\t_domElement.removeEventListener( 'pointermove', onPointerMove, false );\n\t\t_domElement.removeEventListener( 'pointerdown', onPointerDown, false );\n\t\t_domElement.removeEventListener( 'pointerup', onPointerCancel, false );\n\t\t_domElement.removeEventListener( 'pointerleave', onPointerCancel, false );\n\t\t_domElement.removeEventListener( 'touchmove', onTouchMove, false );\n\t\t_domElement.removeEventListener( 'touchstart', onTouchStart, false );\n\t\t_domElement.removeEventListener( 'touchend', onTouchEnd, false );\n\n\t\t_domElement.style.cursor = '';\n\n\t}\n\n\tfunction dispose() {\n\n\t\tdeactivate();\n\n\t}\n\n\tfunction getObjects() {\n\n\t\treturn _objects;\n\n\t}\n\n\tfunction onPointerMove( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseMove( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onMouseMove( event ) {\n\n\t\tvar rect = _domElement.getBoundingClientRect();\n\n\t\t_mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;\n\t\t_mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;\n\n\t\t_raycaster.setFromCamera( _mouse, _camera );\n\n\t\tif ( _selected && scope.enabled ) {\n\n\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t_selected.position.copy( _intersection.sub( _offset ).applyMatrix4( _inverseMatrix ) );\n\n\t\t\t}\n\n\t\t\tscope.dispatchEvent( { type: 'drag', object: _selected } );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t_intersections.length = 0;\n\n\t\t_raycaster.setFromCamera( _mouse, _camera );\n\t\t_raycaster.intersectObjects( _objects, true, _intersections );\n\n\t\tif ( _intersections.length > 0 ) {\n\n\t\t\tvar object = _intersections[ 0 ].object;\n\n\t\t\t_plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( object.matrixWorld ) );\n\n\t\t\tif ( _hovered !== object ) {\n\n\t\t\t\tscope.dispatchEvent( { type: 'hoveron', object: object } );\n\n\t\t\t\t_domElement.style.cursor = 'pointer';\n\t\t\t\t_hovered = object;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( _hovered !== null ) {\n\n\t\t\t\tscope.dispatchEvent( { type: 'hoveroff', object: _hovered } );\n\n\t\t\t\t_domElement.style.cursor = 'auto';\n\t\t\t\t_hovered = null;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction onPointerDown( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseDown( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onMouseDown( event ) {\n\n\t\tevent.preventDefault();\n\n\t\t_intersections.length = 0;\n\n\t\t_raycaster.setFromCamera( _mouse, _camera );\n\t\t_raycaster.intersectObjects( _objects, true, _intersections );\n\n\t\tif ( _intersections.length > 0 ) {\n\n\t\t\t_selected = ( scope.transformGroup === true ) ? _objects[ 0 ] : _intersections[ 0 ].object;\n\n\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t_inverseMatrix.copy( _selected.parent.matrixWorld ).invert();\n\t\t\t\t_offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );\n\n\t\t\t}\n\n\t\t\t_domElement.style.cursor = 'move';\n\n\t\t\tscope.dispatchEvent( { type: 'dragstart', object: _selected } );\n\n\t\t}\n\n\n\t}\n\n\tfunction onPointerCancel( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseCancel( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onMouseCancel( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tif ( _selected ) {\n\n\t\t\tscope.dispatchEvent( { type: 'dragend', object: _selected } );\n\n\t\t\t_selected = null;\n\n\t\t}\n\n\t\t_domElement.style.cursor = _hovered ? 'pointer' : 'auto';\n\n\t}\n\n\tfunction onTouchMove( event ) {\n\n\t\tevent.preventDefault();\n\t\tevent = event.changedTouches[ 0 ];\n\n\t\tvar rect = _domElement.getBoundingClientRect();\n\n\t\t_mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;\n\t\t_mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;\n\n\t\t_raycaster.setFromCamera( _mouse, _camera );\n\n\t\tif ( _selected && scope.enabled ) {\n\n\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t_selected.position.copy( _intersection.sub( _offset ).applyMatrix4( _inverseMatrix ) );\n\n\t\t\t}\n\n\t\t\tscope.dispatchEvent( { type: 'drag', object: _selected } );\n\n\t\t\treturn;\n\n\t\t}\n\n\t}\n\n\tfunction onTouchStart( event ) {\n\n\t\tevent.preventDefault();\n\t\tevent = event.changedTouches[ 0 ];\n\n\t\tvar rect = _domElement.getBoundingClientRect();\n\n\t\t_mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;\n\t\t_mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;\n\n\t\t_intersections.length = 0;\n\n\t\t_raycaster.setFromCamera( _mouse, _camera );\n\t\t _raycaster.intersectObjects( _objects, true, _intersections );\n\n\t\tif ( _intersections.length > 0 ) {\n\n\t\t\t_selected = ( scope.transformGroup === true ) ? _objects[ 0 ] : _intersections[ 0 ].object;\n\n\t\t\t_plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );\n\n\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t_inverseMatrix.copy( _selected.parent.matrixWorld ).invert();\n\t\t\t\t_offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );\n\n\t\t\t}\n\n\t\t\t_domElement.style.cursor = 'move';\n\n\t\t\tscope.dispatchEvent( { type: 'dragstart', object: _selected } );\n\n\t\t}\n\n\n\t}\n\n\tfunction onTouchEnd( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tif ( _selected ) {\n\n\t\t\tscope.dispatchEvent( { type: 'dragend', object: _selected } );\n\n\t\t\t_selected = null;\n\n\t\t}\n\n\t\t_domElement.style.cursor = 'auto';\n\n\t}\n\n\tactivate();\n\n\t// API\n\n\tthis.enabled = true;\n\tthis.transformGroup = false;\n\n\tthis.activate = activate;\n\tthis.deactivate = deactivate;\n\tthis.dispose = dispose;\n\tthis.getObjects = getObjects;\n\n};\n\nDragControls.prototype = Object.create( EventDispatcher.prototype );\nDragControls.prototype.constructor = DragControls;\n\nexport { DragControls };\n","export default function(x, y, z) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n if (z == null) z = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0,\n sz = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x || 0, sy += node.y || 0, sz += node.z || 0;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, sz = (sz / n - z) * strength, i = 0; i < n; ++i) {\n node = nodes[i];\n if (sx) { node.x -= sx }\n if (sy) { node.y -= sy; }\n if (sz) { node.z -= sz; }\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.z = function(_) {\n return arguments.length ? (z = +_, force) : z;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n","export default function(d) {\n var x = +this._x.call(null, d);\n return add(this.cover(x), x, d);\n}\n\nfunction add(tree, x, d) {\n if (isNaN(x)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n x1 = tree._x1,\n xm,\n xp,\n right,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (parent = node, !(node = node[i = +right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n if (x === xp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(2) : tree._root = new Array(2);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n } while ((i = +right) === (j = +(xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var i, n = data.length,\n x,\n xz = new Array(n),\n x0 = Infinity,\n x1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, data[i]))) continue;\n xz[i] = x;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n }\n\n // If there were no (valid) points, inherit the existing extent.\n if (x1 < x0) x0 = this._x0, x1 = this._x1;\n\n // Expand the tree to cover the new points.\n this.cover(x0).cover(x1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x) {\n if (isNaN(x = +x)) return this; // ignore invalid points\n\n var x0 = this._x0,\n x1 = this._x1;\n\n // If the binarytree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing half boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else if (x0 > x || x > x1) {\n var z = x1 - x0,\n node = this._root,\n parent,\n i;\n\n switch (i = +(x < (x0 + x1) / 2)) {\n case 0: {\n do parent = new Array(2), parent[i] = node, node = parent;\n while (z *= 2, x1 = x0 + z, x > x1);\n break;\n }\n case 1: {\n do parent = new Array(2), parent[i] = node, node = parent;\n while (z *= 2, x0 = x1 - z, x0 > x);\n break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n // If the binarytree covers the point already, just return.\n else return this;\n\n this._x0 = x0;\n this._x1 = x1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0]).cover(+_[1][0])\n : isNaN(this._x0) ? undefined : [[this._x0], [this._x1]];\n}\n","export default function(node, x0, x1) {\n this.node = node;\n this.x0 = x0;\n this.x1 = x1;\n}\n","import Half from \"./half\";\n\nexport default function(x, radius) {\n var data,\n x0 = this._x0,\n x1,\n x2,\n x3 = this._x1,\n halves = [],\n node = this._root,\n q,\n i;\n\n if (node) halves.push(new Half(node, x0, x3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius;\n x3 = x + radius;\n }\n\n while (q = halves.pop()) {\n\n // Stop searching if this half can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (x2 = q.x1) < x0) continue;\n\n // Bisect the current half.\n if (node.length) {\n var xm = (x1 + x2) / 2;\n\n halves.push(\n new Half(node[1], xm, x2),\n new Half(node[0], x1, xm)\n );\n\n // Visit the closest half first.\n if (i = +(x >= xm)) {\n q = halves[halves.length - 1];\n halves[halves.length - 1] = halves[halves.length - 1 - i];\n halves[halves.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var d = Math.abs(x - +this._x.call(null, node.data));\n if (d < radius) {\n radius = d;\n x0 = x - d;\n x3 = x + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n x1 = this._x1,\n x,\n xm,\n right,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (!(parent = node, node = node[i = +right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 1]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1])\n && node === (parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Half from \"./half\";\n\nexport default function(callback) {\n var halves = [], q, node = this._root, child, x0, x1;\n if (node) halves.push(new Half(node, this._x0, this._x1));\n while (q = halves.pop()) {\n if (!callback(node = q.node, x0 = q.x0, x1 = q.x1) && node.length) {\n var xm = (x0 + x1) / 2;\n if (child = node[1]) halves.push(new Half(child, xm, x1));\n if (child = node[0]) halves.push(new Half(child, x0, xm));\n }\n }\n return this;\n}\n","import Half from \"./half\";\n\nexport default function(callback) {\n var halves = [], next = [], q;\n if (this._root) halves.push(new Half(this._root, this._x0, this._x1));\n while (q = halves.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, x1 = q.x1, xm = (x0 + x1) / 2;\n if (child = node[0]) halves.push(new Half(child, x0, xm));\n if (child = node[1]) halves.push(new Half(child, xm, x1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.x1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add\";\nimport tree_cover from \"./cover\";\nimport tree_data from \"./data\";\nimport tree_extent from \"./extent\";\nimport tree_find from \"./find\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove\";\nimport tree_root from \"./root\";\nimport tree_size from \"./size\";\nimport tree_visit from \"./visit\";\nimport tree_visitAfter from \"./visitAfter\";\nimport tree_x, {defaultX} from \"./x\";\n\nexport default function binarytree(nodes, x) {\n var tree = new Binarytree(x == null ? defaultX : x, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Binarytree(x, x0, x1) {\n this._x = x;\n this._x0 = x0;\n this._x1 = x1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = binarytree.prototype = Binarytree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Binarytree(this._x, this._x0, this._x1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(2)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 2; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(2)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;","export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(d) {\n var x = +this._x.call(null, d),\n y = +this._y.call(null, d),\n z = +this._z.call(null, d);\n return add(this.cover(x, y, z), x, y, z, d);\n}\n\nfunction add(tree, x, y, z, d) {\n if (isNaN(x) || isNaN(y) || isNaN(z)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n z0 = tree._z0,\n x1 = tree._x1,\n y1 = tree._y1,\n z1 = tree._z1,\n xm,\n ym,\n zm,\n xp,\n yp,\n zp,\n right,\n bottom,\n deep,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm; else z1 = zm;\n if (parent = node, !(node = node[i = deep << 2 | bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n zp = +tree._z.call(null, node.data);\n if (x === xp && y === yp && z === zp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(8) : tree._root = new Array(8);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm; else z1 = zm;\n } while ((i = deep << 2 | bottom << 1 | right) === (j = (zp >= zm) << 2 | (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n z,\n xz = new Array(n),\n yz = new Array(n),\n zz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n z0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity,\n z1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d)) || isNaN(z = +this._z.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n zz[i] = z;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n if (z < z0) z0 = z;\n if (z > z1) z1 = z;\n }\n\n // If there were no (valid) points, inherit the existing extent.\n if (x1 < x0) x0 = this._x0, x1 = this._x1;\n if (y1 < y0) y0 = this._y0, y1 = this._y1;\n if (z1 < z0) z0 = this._z0, z1 = this._z1;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0, z0).cover(x1, y1, z1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], zz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y, z) {\n if (isNaN(x = +x) || isNaN(y = +y) || isNaN(z = +z)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n z0 = this._z0,\n x1 = this._x1,\n y1 = this._y1,\n z1 = this._z1;\n\n // If the octree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing octant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n z1 = (z0 = Math.floor(z)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else if (x0 > x || x > x1 || y0 > y || y > y1 || z0 > z || z > z1) {\n var t = x1 - x0,\n node = this._root,\n parent,\n i;\n\n switch (i = (z < (z0 + z1) / 2) << 2 | (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) {\n case 0: {\n do parent = new Array(8), parent[i] = node, node = parent;\n while (t *= 2, x1 = x0 + t, y1 = y0 + t, z1 = z0 + t, x > x1 || y > y1 || z > z1);\n break;\n }\n case 1: {\n do parent = new Array(8), parent[i] = node, node = parent;\n while (t *= 2, x0 = x1 - t, y1 = y0 + t, z1 = z0 + t, x0 > x || y > y1 || z > z1);\n break;\n }\n case 2: {\n do parent = new Array(8), parent[i] = node, node = parent;\n while (t *= 2, x1 = x0 + t, y0 = y1 - t, z1 = z0 + t, x > x1 || y0 > y || z > z1);\n break;\n }\n case 3: {\n do parent = new Array(8), parent[i] = node, node = parent;\n while (t *= 2, x0 = x1 - t, y0 = y1 - t, z1 = z0 + t, x0 > x || y0 > y || z > z1);\n break;\n }\n case 4: {\n do parent = new Array(8), parent[i] = node, node = parent;\n while (t *= 2, x1 = x0 + t, y1 = y0 + t, z0 = z1 - t, x > x1 || y > y1 || z0 > z);\n break;\n }\n case 5: {\n do parent = new Array(8), parent[i] = node, node = parent;\n while (t *= 2, x0 = x1 - t, y1 = y0 + t, z0 = z1 - t, x0 > x || y > y1 || z0 > z);\n break;\n }\n case 6: {\n do parent = new Array(8), parent[i] = node, node = parent;\n while (t *= 2, x1 = x0 + t, y0 = y1 - t, z0 = z1 - t, x > x1 || y0 > y || z0 > z);\n break;\n }\n case 7: {\n do parent = new Array(8), parent[i] = node, node = parent;\n while (t *= 2, x0 = x1 - t, y0 = y1 - t, z0 = z1 - t, x0 > x || y0 > y || z0 > z);\n break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n // If the octree covers the point already, just return.\n else return this;\n\n this._x0 = x0;\n this._y0 = y0;\n this._z0 = z0;\n this._x1 = x1;\n this._y1 = y1;\n this._z1 = z1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1], +_[0][2]).cover(+_[1][0], +_[1][1], +_[1][2])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0, this._z0], [this._x1, this._y1, this._z1]];\n}\n","export default function(node, x0, y0, z0, x1, y1, z1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.z0 = z0;\n this.x1 = x1;\n this.y1 = y1;\n this.z1 = z1;\n}\n","import Octant from \"./octant\";\n\nexport default function(x, y, z, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n z0 = this._z0,\n x1,\n y1,\n z1,\n x2,\n y2,\n z2,\n x3 = this._x1,\n y3 = this._y1,\n z3 = this._z1,\n octs = [],\n node = this._root,\n q,\n i;\n\n if (node) octs.push(new Octant(node, x0, y0, z0, x3, y3, z3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius, z0 = z - radius;\n x3 = x + radius, y3 = y + radius, z3 = z + radius;\n radius *= radius;\n }\n\n while (q = octs.pop()) {\n\n // Stop searching if this octant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (z1 = q.z0) > z3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0\n || (z2 = q.z1) < z0) continue;\n\n // Bisect the current octant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2,\n zm = (z1 + z2) / 2;\n\n octs.push(\n new Octant(node[7], xm, ym, zm, x2, y2, z2),\n new Octant(node[6], x1, ym, zm, xm, y2, z2),\n new Octant(node[5], xm, y1, zm, x2, ym, z2),\n new Octant(node[4], x1, y1, zm, xm, ym, z2),\n new Octant(node[3], xm, ym, z1, x2, y2, zm),\n new Octant(node[2], x1, ym, z1, xm, y2, zm),\n new Octant(node[1], xm, y1, z1, x2, ym, zm),\n new Octant(node[0], x1, y1, z1, xm, ym, zm)\n );\n\n // Visit the closest octant first.\n if (i = (z >= zm) << 2 | (y >= ym) << 1 | (x >= xm)) {\n q = octs[octs.length - 1];\n octs[octs.length - 1] = octs[octs.length - 1 - i];\n octs[octs.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n dz = z - +this._z.call(null, node.data),\n d2 = dx * dx + dy * dy + dz * dz;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d, z0 = z - d;\n x3 = x + d, y3 = y + d, z3 = z + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d)) || isNaN(z = +this._z.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n z0 = this._z0,\n x1 = this._x1,\n y1 = this._y1,\n z1 = this._z1,\n x,\n y,\n z,\n xm,\n ym,\n zm,\n right,\n bottom,\n deep,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm; else z1 = zm;\n if (!(parent = node, node = node[i = deep << 2 | bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 7] || parent[(i + 2) & 7] || parent[(i + 3) & 7] || parent[(i + 4) & 7] || parent[(i + 5) & 7] || parent[(i + 6) & 7] || parent[(i + 7) & 7]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3] || parent[4] || parent[5] || parent[6] || parent[7])\n && node === (parent[7] || parent[6] || parent[5] || parent[4] || parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Octant from \"./octant\";\n\nexport default function(callback) {\n var octs = [], q, node = this._root, child, x0, y0, z0, x1, y1, z1;\n if (node) octs.push(new Octant(node, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1));\n while (q = octs.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, z0 = q.z0, x1 = q.x1, y1 = q.y1, z1 = q.z1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2, zm = (z0 + z1) / 2;\n if (child = node[7]) octs.push(new Octant(child, xm, ym, zm, x1, y1, z1));\n if (child = node[6]) octs.push(new Octant(child, x0, ym, zm, xm, y1, z1));\n if (child = node[5]) octs.push(new Octant(child, xm, y0, zm, x1, ym, z1));\n if (child = node[4]) octs.push(new Octant(child, x0, y0, zm, xm, ym, z1));\n if (child = node[3]) octs.push(new Octant(child, xm, ym, z0, x1, y1, zm));\n if (child = node[2]) octs.push(new Octant(child, x0, ym, z0, xm, y1, zm));\n if (child = node[1]) octs.push(new Octant(child, xm, y0, z0, x1, ym, zm));\n if (child = node[0]) octs.push(new Octant(child, x0, y0, z0, xm, ym, zm));\n }\n }\n return this;\n}\n","import Octant from \"./octant\";\n\nexport default function(callback) {\n var octs = [], next = [], q;\n if (this._root) octs.push(new Octant(this._root, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1));\n while (q = octs.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, z0 = q.z0, x1 = q.x1, y1 = q.y1, z1 = q.z1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2, zm = (z0 + z1) / 2;\n if (child = node[0]) octs.push(new Octant(child, x0, y0, z0, xm, ym, zm));\n if (child = node[1]) octs.push(new Octant(child, xm, y0, z0, x1, ym, zm));\n if (child = node[2]) octs.push(new Octant(child, x0, ym, z0, xm, y1, zm));\n if (child = node[3]) octs.push(new Octant(child, xm, ym, z0, x1, y1, zm));\n if (child = node[4]) octs.push(new Octant(child, x0, y0, zm, xm, ym, z1));\n if (child = node[5]) octs.push(new Octant(child, xm, y0, zm, x1, ym, z1));\n if (child = node[6]) octs.push(new Octant(child, x0, ym, zm, xm, y1, z1));\n if (child = node[7]) octs.push(new Octant(child, xm, ym, zm, x1, y1, z1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.z0, q.x1, q.y1, q.z1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","export function defaultZ(d) {\n return d[2];\n}\n\nexport default function(_) {\n return arguments.length ? (this._z = _, this) : this._z;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add\";\nimport tree_cover from \"./cover\";\nimport tree_data from \"./data\";\nimport tree_extent from \"./extent\";\nimport tree_find from \"./find\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove\";\nimport tree_root from \"./root\";\nimport tree_size from \"./size\";\nimport tree_visit from \"./visit\";\nimport tree_visitAfter from \"./visitAfter\";\nimport tree_x, {defaultX} from \"./x\";\nimport tree_y, {defaultY} from \"./y\";\nimport tree_z, {defaultZ} from \"./z\";\n\nexport default function octree(nodes, x, y, z) {\n var tree = new Octree(x == null ? defaultX : x, y == null ? defaultY : y, z == null ? defaultZ : z, NaN, NaN, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Octree(x, y, z, x0, y0, z0, x1, y1, z1) {\n this._x = x;\n this._y = y;\n this._z = z;\n this._x0 = x0;\n this._y0 = y0;\n this._z0 = z0;\n this._x1 = x1;\n this._y1 = y1;\n this._z1 = z1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = octree.prototype = Octree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Octree(this._x, this._y, this._z, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(8)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 8; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(8)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\ntreeProto.z = tree_z;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n nDim,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x = 0, y = 0, z = 0, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n if (nDim > 1) { y = target.y + target.vy - source.y - source.vy || jiggle(random); }\n if (nDim > 2) { z = target.z + target.vz - source.z - source.vz || jiggle(random); }\n l = Math.sqrt(x * x + y * y + z * z);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l, z *= l;\n\n target.vx -= x * (b = bias[i]);\n if (nDim > 1) { target.vy -= y * b; }\n if (nDim > 2) { target.vz -= z * b; }\n\n source.vx += x * (b = 1 - b);\n if (nDim > 1) { source.vy += y * b; }\n if (nDim > 2) { source.vz += z * b; }\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _numDimensions, _random) {\n nodes = _nodes;\n nDim = _numDimensions;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nvar MAX_DIMENSIONS = 3;\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nexport function z(d) {\n return d.z;\n}\n\nvar initialRadius = 10,\n initialAngleRoll = Math.PI * (3 - Math.sqrt(5)), // Golden ratio angle\n initialAngleYaw = Math.PI * 20 / (9 + Math.sqrt(221)); // Markov irrational number\n\nexport default function(nodes, numDimensions) {\n numDimensions = numDimensions || 2;\n\n var nDim = Math.min(MAX_DIMENSIONS, Math.max(1, Math.round(numDimensions))),\n simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function (force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (nDim > 1) {\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n if (nDim > 2) {\n if (node.fz == null) node.z += node.vz *= velocityDecay;\n else node.z = node.fz, node.vz = 0;\n }\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (node.fz != null) node.z = node.fz;\n if (isNaN(node.x) || (nDim > 1 && isNaN(node.y)) || (nDim > 2 && isNaN(node.z))) {\n var radius = initialRadius * (nDim > 2 ? Math.cbrt(0.5 + i) : (nDim > 1 ? Math.sqrt(0.5 + i) : i)),\n rollAngle = i * initialAngleRoll,\n yawAngle = i * initialAngleYaw;\n\n if (nDim === 1) {\n node.x = radius;\n } else if (nDim === 2) {\n node.x = radius * Math.cos(rollAngle);\n node.y = radius * Math.sin(rollAngle);\n } else { // 3 dimensions: use spherical distribution along 2 irrational number angles\n node.x = radius * Math.sin(rollAngle) * Math.cos(yawAngle);\n node.y = radius * Math.cos(rollAngle);\n node.z = radius * Math.sin(rollAngle) * Math.sin(yawAngle);\n }\n }\n if (isNaN(node.vx) || (nDim > 1 && isNaN(node.vy)) || (nDim > 2 && isNaN(node.vz))) {\n node.vx = 0;\n if (nDim > 1) { node.vy = 0; }\n if (nDim > 2) { node.vz = 0; }\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, nDim, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n numDimensions: function(_) {\n return arguments.length\n ? (nDim = Math.min(MAX_DIMENSIONS, Math.max(1, Math.round(_))), forces.forEach(initializeForce), simulation)\n : nDim;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function() {\n var args = Array.prototype.slice.call(arguments);\n var x = args.shift() || 0,\n y = (nDim > 1 ? args.shift() : null) || 0,\n z = (nDim > 2 ? args.shift() : null) || 0,\n radius = args.shift() || Infinity;\n\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n dz,\n d2,\n node,\n closest;\n\n radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - (node.y || 0);\n dz = z - (node.z ||0);\n d2 = dx * dx + dy * dy + dz * dz;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import {binarytree} from \"d3-binarytree\";\nimport {quadtree} from \"d3-quadtree\";\nimport {octree} from \"d3-octree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y, z} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n nDim,\n node,\n random,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i,\n n = nodes.length,\n tree =\n (nDim === 1 ? binarytree(nodes, x)\n :(nDim === 2 ? quadtree(nodes, x, y)\n :(nDim === 3 ? octree(nodes, x, y, z)\n :null\n ))).visitAfter(accumulate);\n\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(treeNode) {\n var strength = 0, q, c, weight = 0, x, y, z, i;\n var numChildren = treeNode.length;\n\n // For internal nodes, accumulate forces from children.\n if (numChildren) {\n for (x = y = z = i = 0; i < numChildren; ++i) {\n if ((q = treeNode[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * (q.x || 0), y += c * (q.y || 0), z += c * (q.z || 0);\n }\n }\n strength *= Math.sqrt(4 / numChildren); // scale accumulated strength according to number of dimensions\n\n treeNode.x = x / weight;\n if (nDim > 1) { treeNode.y = y / weight; }\n if (nDim > 2) { treeNode.z = z / weight; }\n }\n\n // For leaf nodes, accumulate forces from coincident nodes.\n else {\n q = treeNode;\n q.x = q.data.x;\n if (nDim > 1) { q.y = q.data.y; }\n if (nDim > 2) { q.z = q.data.z; }\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n treeNode.value = strength;\n }\n\n function apply(treeNode, x1, arg1, arg2, arg3) {\n if (!treeNode.value) return true;\n var x2 = [arg1, arg2, arg3][nDim-1];\n\n var x = treeNode.x - node.x,\n y = (nDim > 1 ? treeNode.y - node.y : 0),\n z = (nDim > 2 ? treeNode.z - node.z : 0),\n w = x2 - x1,\n l = x * x + y * y + z * z;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (nDim > 1 && y === 0) y = jiggle(random), l += y * y;\n if (nDim > 2 && z === 0) z = jiggle(random), l += z * z;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * treeNode.value * alpha / l;\n if (nDim > 1) { node.vy += y * treeNode.value * alpha / l; }\n if (nDim > 2) { node.vz += z * treeNode.value * alpha / l; }\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (treeNode.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (treeNode.data !== node || treeNode.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (nDim > 1 && y === 0) y = jiggle(random), l += y * y;\n if (nDim > 2 && z === 0) z = jiggle(random), l += z * z;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (treeNode.data !== node) {\n w = strengths[treeNode.data.index] * alpha / l;\n node.vx += x * w;\n if (nDim > 1) { node.vy += y * w; }\n if (nDim > 2) { node.vz += z * w; }\n } while (treeNode = treeNode.next);\n }\n\n force.initialize = function(_nodes, _numDimensions, _random) {\n nodes = _nodes;\n nDim = _numDimensions;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(radius, x, y, z) {\n var nodes,\n nDim,\n strength = constant(0.1),\n strengths,\n radiuses;\n\n if (typeof radius !== \"function\") radius = constant(+radius);\n if (x == null) x = 0;\n if (y == null) y = 0;\n if (z == null) z = 0;\n\n function force(alpha) {\n for (var i = 0, n = nodes.length; i < n; ++i) {\n var node = nodes[i],\n dx = node.x - x || 1e-6,\n dy = (node.y || 0) - y || 1e-6,\n dz = (node.z || 0) - z || 1e-6,\n r = Math.sqrt(dx * dx + dy * dy + dz * dz),\n k = (radiuses[i] - r) * strengths[i] * alpha / r;\n node.vx += dx * k;\n if (nDim>1) { node.vy += dy * k; }\n if (nDim>2) { node.vz += dz * k; }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n radiuses = new Array(n);\n for (i = 0; i < n; ++i) {\n radiuses[i] = +radius(nodes[i], i, nodes);\n strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(initNodes, numDimensions) {\n nodes = initNodes;\n nDim = numDimensions;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.z = function(_) {\n return arguments.length ? (z = +_, force) : z;\n };\n\n return force;\n}\n","module.exports = function eventify(subject) {\n validateSubject(subject);\n\n var eventsStorage = createEventsStorage(subject);\n subject.on = eventsStorage.on;\n subject.off = eventsStorage.off;\n subject.fire = eventsStorage.fire;\n return subject;\n};\n\nfunction createEventsStorage(subject) {\n // Store all event listeners to this hash. Key is event name, value is array\n // of callback records.\n //\n // A callback record consists of callback function and its optional context:\n // { 'eventName' => [{callback: function, ctx: object}] }\n var registeredEvents = Object.create(null);\n\n return {\n on: function (eventName, callback, ctx) {\n if (typeof callback !== 'function') {\n throw new Error('callback is expected to be a function');\n }\n var handlers = registeredEvents[eventName];\n if (!handlers) {\n handlers = registeredEvents[eventName] = [];\n }\n handlers.push({callback: callback, ctx: ctx});\n\n return subject;\n },\n\n off: function (eventName, callback) {\n var wantToRemoveAll = (typeof eventName === 'undefined');\n if (wantToRemoveAll) {\n // Killing old events storage should be enough in this case:\n registeredEvents = Object.create(null);\n return subject;\n }\n\n if (registeredEvents[eventName]) {\n var deleteAllCallbacksForEvent = (typeof callback !== 'function');\n if (deleteAllCallbacksForEvent) {\n delete registeredEvents[eventName];\n } else {\n var callbacks = registeredEvents[eventName];\n for (var i = 0; i < callbacks.length; ++i) {\n if (callbacks[i].callback === callback) {\n callbacks.splice(i, 1);\n }\n }\n }\n }\n\n return subject;\n },\n\n fire: function (eventName) {\n var callbacks = registeredEvents[eventName];\n if (!callbacks) {\n return subject;\n }\n\n var fireArguments;\n if (arguments.length > 1) {\n fireArguments = Array.prototype.splice.call(arguments, 1);\n }\n for(var i = 0; i < callbacks.length; ++i) {\n var callbackInfo = callbacks[i];\n callbackInfo.callback.apply(callbackInfo.ctx, fireArguments);\n }\n\n return subject;\n }\n };\n}\n\nfunction validateSubject(subject) {\n if (!subject) {\n throw new Error('Eventify cannot use falsy object as events subject');\n }\n var reservedWords = ['on', 'fire', 'off'];\n for (var i = 0; i < reservedWords.length; ++i) {\n if (subject.hasOwnProperty(reservedWords[i])) {\n throw new Error(\"Subject cannot be eventified, since it already has property '\" + reservedWords[i] + \"'\");\n }\n }\n}\n","/**\n * @fileOverview Contains definition of the core graph object.\n */\n\n// TODO: need to change storage layer:\n// 1. Be able to get all nodes O(1)\n// 2. Be able to get number of links O(1)\n\n/**\n * @example\n * var graph = require('ngraph.graph')();\n * graph.addNode(1); // graph has one node.\n * graph.addLink(2, 3); // now graph contains three nodes and one link.\n *\n */\nmodule.exports = createGraph;\n\nvar eventify = require('ngraph.events');\n\n/**\n * Creates a new graph\n */\nfunction createGraph(options) {\n // Graph structure is maintained as dictionary of nodes\n // and array of links. Each node has 'links' property which\n // hold all links related to that node. And general links\n // array is used to speed up all links enumeration. This is inefficient\n // in terms of memory, but simplifies coding.\n options = options || {};\n if ('uniqueLinkId' in options) {\n console.warn(\n 'ngraph.graph: Starting from version 0.14 `uniqueLinkId` is deprecated.\\n' +\n 'Use `multigraph` option instead\\n',\n '\\n',\n 'Note: there is also change in default behavior: From now on each graph\\n'+\n 'is considered to be not a multigraph by default (each edge is unique).'\n );\n\n options.multigraph = options.uniqueLinkId;\n }\n\n // Dear reader, the non-multigraphs do not guarantee that there is only\n // one link for a given pair of node. When this option is set to false\n // we can save some memory and CPU (18% faster for non-multigraph);\n if (options.multigraph === undefined) options.multigraph = false;\n\n if (typeof Map !== 'function') {\n // TODO: Should we polyfill it ourselves? We don't use much operations there..\n throw new Error('ngraph.graph requires `Map` to be defined. Please polyfill it before using ngraph');\n } \n\n var nodes = new Map();\n var links = [],\n // Hash of multi-edges. Used to track ids of edges between same nodes\n multiEdges = {},\n suspendEvents = 0,\n\n createLink = options.multigraph ? createUniqueLink : createSingleLink,\n\n // Our graph API provides means to listen to graph changes. Users can subscribe\n // to be notified about changes in the graph by using `on` method. However\n // in some cases they don't use it. To avoid unnecessary memory consumption\n // we will not record graph changes until we have at least one subscriber.\n // Code below supports this optimization.\n //\n // Accumulates all changes made during graph updates.\n // Each change element contains:\n // changeType - one of the strings: 'add', 'remove' or 'update';\n // node - if change is related to node this property is set to changed graph's node;\n // link - if change is related to link this property is set to changed graph's link;\n changes = [],\n recordLinkChange = noop,\n recordNodeChange = noop,\n enterModification = noop,\n exitModification = noop;\n\n // this is our public API:\n var graphPart = {\n /**\n * Adds node to the graph. If node with given id already exists in the graph\n * its data is extended with whatever comes in 'data' argument.\n *\n * @param nodeId the node's identifier. A string or number is preferred.\n * @param [data] additional data for the node being added. If node already\n * exists its data object is augmented with the new one.\n *\n * @return {node} The newly added node or node with given id if it already exists.\n */\n addNode: addNode,\n\n /**\n * Adds a link to the graph. The function always create a new\n * link between two nodes. If one of the nodes does not exists\n * a new node is created.\n *\n * @param fromId link start node id;\n * @param toId link end node id;\n * @param [data] additional data to be set on the new link;\n *\n * @return {link} The newly created link\n */\n addLink: addLink,\n\n /**\n * Removes link from the graph. If link does not exist does nothing.\n *\n * @param link - object returned by addLink() or getLinks() methods.\n *\n * @returns true if link was removed; false otherwise.\n */\n removeLink: removeLink,\n\n /**\n * Removes node with given id from the graph. If node does not exist in the graph\n * does nothing.\n *\n * @param nodeId node's identifier passed to addNode() function.\n *\n * @returns true if node was removed; false otherwise.\n */\n removeNode: removeNode,\n\n /**\n * Gets node with given identifier. If node does not exist undefined value is returned.\n *\n * @param nodeId requested node identifier;\n *\n * @return {node} in with requested identifier or undefined if no such node exists.\n */\n getNode: getNode,\n\n /**\n * Gets number of nodes in this graph.\n *\n * @return number of nodes in the graph.\n */\n getNodeCount: getNodeCount,\n\n /**\n * Gets total number of links in the graph.\n */\n getLinkCount: getLinkCount,\n\n /**\n * Synonym for `getLinkCount()`\n */\n getLinksCount: getLinkCount,\n \n /**\n * Synonym for `getNodeCount()`\n */\n getNodesCount: getNodeCount,\n\n /**\n * Gets all links (inbound and outbound) from the node with given id.\n * If node with given id is not found null is returned.\n *\n * @param nodeId requested node identifier.\n *\n * @return Array of links from and to requested node if such node exists;\n * otherwise null is returned.\n */\n getLinks: getLinks,\n\n /**\n * Invokes callback on each node of the graph.\n *\n * @param {Function(node)} callback Function to be invoked. The function\n * is passed one argument: visited node.\n */\n forEachNode: forEachNode,\n\n /**\n * Invokes callback on every linked (adjacent) node to the given one.\n *\n * @param nodeId Identifier of the requested node.\n * @param {Function(node, link)} callback Function to be called on all linked nodes.\n * The function is passed two parameters: adjacent node and link object itself.\n * @param oriented if true graph treated as oriented.\n */\n forEachLinkedNode: forEachLinkedNode,\n\n /**\n * Enumerates all links in the graph\n *\n * @param {Function(link)} callback Function to be called on all links in the graph.\n * The function is passed one parameter: graph's link object.\n *\n * Link object contains at least the following fields:\n * fromId - node id where link starts;\n * toId - node id where link ends,\n * data - additional data passed to graph.addLink() method.\n */\n forEachLink: forEachLink,\n\n /**\n * Suspend all notifications about graph changes until\n * endUpdate is called.\n */\n beginUpdate: enterModification,\n\n /**\n * Resumes all notifications about graph changes and fires\n * graph 'changed' event in case there are any pending changes.\n */\n endUpdate: exitModification,\n\n /**\n * Removes all nodes and links from the graph.\n */\n clear: clear,\n\n /**\n * Detects whether there is a link between two nodes.\n * Operation complexity is O(n) where n - number of links of a node.\n * NOTE: this function is synonim for getLink()\n *\n * @returns link if there is one. null otherwise.\n */\n hasLink: getLink,\n\n /**\n * Detects whether there is a node with given id\n * \n * Operation complexity is O(1)\n * NOTE: this function is synonim for getNode()\n *\n * @returns node if there is one; Falsy value otherwise.\n */\n hasNode: getNode,\n\n /**\n * Gets an edge between two nodes.\n * Operation complexity is O(n) where n - number of links of a node.\n *\n * @param {string} fromId link start identifier\n * @param {string} toId link end identifier\n *\n * @returns link if there is one. null otherwise.\n */\n getLink: getLink\n };\n\n // this will add `on()` and `fire()` methods.\n eventify(graphPart);\n\n monitorSubscribers();\n\n return graphPart;\n\n function monitorSubscribers() {\n var realOn = graphPart.on;\n\n // replace real `on` with our temporary on, which will trigger change\n // modification monitoring:\n graphPart.on = on;\n\n function on() {\n // now it's time to start tracking stuff:\n graphPart.beginUpdate = enterModification = enterModificationReal;\n graphPart.endUpdate = exitModification = exitModificationReal;\n recordLinkChange = recordLinkChangeReal;\n recordNodeChange = recordNodeChangeReal;\n\n // this will replace current `on` method with real pub/sub from `eventify`.\n graphPart.on = realOn;\n // delegate to real `on` handler:\n return realOn.apply(graphPart, arguments);\n }\n }\n\n function recordLinkChangeReal(link, changeType) {\n changes.push({\n link: link,\n changeType: changeType\n });\n }\n\n function recordNodeChangeReal(node, changeType) {\n changes.push({\n node: node,\n changeType: changeType\n });\n }\n\n function addNode(nodeId, data) {\n if (nodeId === undefined) {\n throw new Error('Invalid node identifier');\n }\n\n enterModification();\n\n var node = getNode(nodeId);\n if (!node) {\n node = new Node(nodeId, data);\n recordNodeChange(node, 'add');\n } else {\n node.data = data;\n recordNodeChange(node, 'update');\n }\n\n nodes.set(nodeId, node);\n\n exitModification();\n return node;\n }\n\n function getNode(nodeId) {\n return nodes.get(nodeId);\n }\n\n function removeNode(nodeId) {\n var node = getNode(nodeId);\n if (!node) {\n return false;\n }\n\n enterModification();\n\n var prevLinks = node.links;\n if (prevLinks) {\n node.links = null;\n for(var i = 0; i < prevLinks.length; ++i) {\n removeLink(prevLinks[i]);\n }\n }\n\n nodes.delete(nodeId)\n\n recordNodeChange(node, 'remove');\n\n exitModification();\n\n return true;\n }\n\n\n function addLink(fromId, toId, data) {\n enterModification();\n\n var fromNode = getNode(fromId) || addNode(fromId);\n var toNode = getNode(toId) || addNode(toId);\n\n var link = createLink(fromId, toId, data);\n\n links.push(link);\n\n // TODO: this is not cool. On large graphs potentially would consume more memory.\n addLinkToNode(fromNode, link);\n if (fromId !== toId) {\n // make sure we are not duplicating links for self-loops\n addLinkToNode(toNode, link);\n }\n\n recordLinkChange(link, 'add');\n\n exitModification();\n\n return link;\n }\n\n function createSingleLink(fromId, toId, data) {\n var linkId = makeLinkId(fromId, toId);\n return new Link(fromId, toId, data, linkId);\n }\n\n function createUniqueLink(fromId, toId, data) {\n // TODO: Get rid of this method.\n var linkId = makeLinkId(fromId, toId);\n var isMultiEdge = multiEdges.hasOwnProperty(linkId);\n if (isMultiEdge || getLink(fromId, toId)) {\n if (!isMultiEdge) {\n multiEdges[linkId] = 0;\n }\n var suffix = '@' + (++multiEdges[linkId]);\n linkId = makeLinkId(fromId + suffix, toId + suffix);\n }\n\n return new Link(fromId, toId, data, linkId);\n }\n\n function getNodeCount() {\n return nodes.size;\n }\n\n function getLinkCount() {\n return links.length;\n }\n\n function getLinks(nodeId) {\n var node = getNode(nodeId);\n return node ? node.links : null;\n }\n\n function removeLink(link) {\n if (!link) {\n return false;\n }\n var idx = indexOfElementInArray(link, links);\n if (idx < 0) {\n return false;\n }\n\n enterModification();\n\n links.splice(idx, 1);\n\n var fromNode = getNode(link.fromId);\n var toNode = getNode(link.toId);\n\n if (fromNode) {\n idx = indexOfElementInArray(link, fromNode.links);\n if (idx >= 0) {\n fromNode.links.splice(idx, 1);\n }\n }\n\n if (toNode) {\n idx = indexOfElementInArray(link, toNode.links);\n if (idx >= 0) {\n toNode.links.splice(idx, 1);\n }\n }\n\n recordLinkChange(link, 'remove');\n\n exitModification();\n\n return true;\n }\n\n function getLink(fromNodeId, toNodeId) {\n // TODO: Use sorted links to speed this up\n var node = getNode(fromNodeId),\n i;\n if (!node || !node.links) {\n return null;\n }\n\n for (i = 0; i < node.links.length; ++i) {\n var link = node.links[i];\n if (link.fromId === fromNodeId && link.toId === toNodeId) {\n return link;\n }\n }\n\n return null; // no link.\n }\n\n function clear() {\n enterModification();\n forEachNode(function(node) {\n removeNode(node.id);\n });\n exitModification();\n }\n\n function forEachLink(callback) {\n var i, length;\n if (typeof callback === 'function') {\n for (i = 0, length = links.length; i < length; ++i) {\n callback(links[i]);\n }\n }\n }\n\n function forEachLinkedNode(nodeId, callback, oriented) {\n var node = getNode(nodeId);\n\n if (node && node.links && typeof callback === 'function') {\n if (oriented) {\n return forEachOrientedLink(node.links, nodeId, callback);\n } else {\n return forEachNonOrientedLink(node.links, nodeId, callback);\n }\n }\n }\n\n function forEachNonOrientedLink(links, nodeId, callback) {\n var quitFast;\n for (var i = 0; i < links.length; ++i) {\n var link = links[i];\n var linkedNodeId = link.fromId === nodeId ? link.toId : link.fromId;\n\n quitFast = callback(nodes.get(linkedNodeId), link);\n if (quitFast) {\n return true; // Client does not need more iterations. Break now.\n }\n }\n }\n\n function forEachOrientedLink(links, nodeId, callback) {\n var quitFast;\n for (var i = 0; i < links.length; ++i) {\n var link = links[i];\n if (link.fromId === nodeId) {\n quitFast = callback(nodes.get(link.toId), link)\n if (quitFast) {\n return true; // Client does not need more iterations. Break now.\n }\n }\n }\n }\n\n // we will not fire anything until users of this library explicitly call `on()`\n // method.\n function noop() {}\n\n // Enter, Exit modification allows bulk graph updates without firing events.\n function enterModificationReal() {\n suspendEvents += 1;\n }\n\n function exitModificationReal() {\n suspendEvents -= 1;\n if (suspendEvents === 0 && changes.length > 0) {\n graphPart.fire('changed', changes);\n changes.length = 0;\n }\n }\n\n function forEachNode(callback) {\n if (typeof callback !== 'function') {\n throw new Error('Function is expected to iterate over graph nodes. You passed ' + callback);\n }\n\n var valuesIterator = nodes.values();\n var nextValue = valuesIterator.next();\n while (!nextValue.done) {\n if (callback(nextValue.value)) {\n return true; // client doesn't want to proceed. Return.\n }\n nextValue = valuesIterator.next();\n }\n }\n}\n\n// need this for old browsers. Should this be a separate module?\nfunction indexOfElementInArray(element, array) {\n if (!array) return -1;\n\n if (array.indexOf) {\n return array.indexOf(element);\n }\n\n var len = array.length,\n i;\n\n for (i = 0; i < len; i += 1) {\n if (array[i] === element) {\n return i;\n }\n }\n\n return -1;\n}\n\n/**\n * Internal structure to represent node;\n */\nfunction Node(id, data) {\n this.id = id;\n this.links = null;\n this.data = data;\n}\n\nfunction addLinkToNode(node, link) {\n if (node.links) {\n node.links.push(link);\n } else {\n node.links = [link];\n }\n}\n\n/**\n * Internal structure to represent links;\n */\nfunction Link(fromId, toId, data, id) {\n this.fromId = fromId;\n this.toId = toId;\n this.data = data;\n this.id = id;\n}\n\nfunction makeLinkId(fromId, toId) {\n return fromId.toString() + '👉 ' + toId.toString();\n}\n","module.exports = function getVariableName(index) {\n if (index === 0) return 'x';\n if (index === 1) return 'y';\n if (index === 2) return 'z';\n return 'c' + (index + 1);\n};","const getVariableName = require('./getVariableName');\n\nmodule.exports = function createPatternBuilder(dimension) {\n\n return pattern;\n \n function pattern(template, config) {\n let indent = (config && config.indent) || 0;\n let join = (config && config.join !== undefined) ? config.join : '\\n';\n let indentString = Array(indent + 1).join(' ');\n let buffer = [];\n for (let i = 0; i < dimension; ++i) {\n let variableName = getVariableName(i);\n let prefix = (i === 0) ? '' : indentString;\n buffer.push(prefix + template.replace(/{var}/g, variableName));\n }\n return buffer.join(join);\n }\n};\n","\nconst createPatternBuilder = require('./createPatternBuilder');\n\nmodule.exports = generateCreateBodyFunction;\nmodule.exports.generateCreateBodyFunctionBody = generateCreateBodyFunctionBody;\n\n// InlineTransform: getVectorCode\nmodule.exports.getVectorCode = getVectorCode;\n// InlineTransform: getBodyCode\nmodule.exports.getBodyCode = getBodyCode;\n// InlineTransformExport: module.exports = function() { return Body; }\n\nfunction generateCreateBodyFunction(dimension, debugSetters) {\n let code = generateCreateBodyFunctionBody(dimension, debugSetters);\n let {Body} = (new Function(code))();\n return Body;\n}\n\nfunction generateCreateBodyFunctionBody(dimension, debugSetters) {\n let code = `\n${getVectorCode(dimension, debugSetters)}\n${getBodyCode(dimension, debugSetters)}\nreturn {Body: Body, Vector: Vector};\n`;\n return code;\n}\n\nfunction getBodyCode(dimension) {\n let pattern = createPatternBuilder(dimension);\n let variableList = pattern('{var}', {join: ', '});\n return `\nfunction Body(${variableList}) {\n this.isPinned = false;\n this.pos = new Vector(${variableList});\n this.force = new Vector();\n this.velocity = new Vector();\n this.mass = 1;\n\n this.springCount = 0;\n this.springLength = 0;\n}\n\nBody.prototype.reset = function() {\n this.force.reset();\n this.springCount = 0;\n this.springLength = 0;\n}\n\nBody.prototype.setPosition = function (${variableList}) {\n ${pattern('this.pos.{var} = {var} || 0;', {indent: 2})}\n};`;\n}\n\nfunction getVectorCode(dimension, debugSetters) {\n let pattern = createPatternBuilder(dimension);\n let setters = '';\n if (debugSetters) {\n setters = `${pattern(\"\\n\\\n var v{var};\\n\\\nObject.defineProperty(this, '{var}', {\\n\\\n set: function(v) { \\n\\\n if (!Number.isFinite(v)) throw new Error('Cannot set non-numbers to {var}');\\n\\\n v{var} = v; \\n\\\n },\\n\\\n get: function() { return v{var}; }\\n\\\n});\")}`;\n }\n\n let variableList = pattern('{var}', {join: ', '});\n return `function Vector(${variableList}) {\n ${setters}\n if (typeof arguments[0] === 'object') {\n // could be another vector\n let v = arguments[0];\n ${pattern('if (!Number.isFinite(v.{var})) throw new Error(\"Expected value is not a finite number at Vector constructor ({var})\");', {indent: 4})}\n ${pattern('this.{var} = v.{var};', {indent: 4})}\n } else {\n ${pattern('this.{var} = typeof {var} === \"number\" ? {var} : 0;', {indent: 4})}\n }\n }\n \n Vector.prototype.reset = function () {\n ${pattern('this.{var} = ', {join: ''})}0;\n };`;\n}","const createPatternBuilder = require('./createPatternBuilder');\nconst getVariableName = require('./getVariableName');\n\nmodule.exports = generateQuadTreeFunction;\nmodule.exports.generateQuadTreeFunctionBody = generateQuadTreeFunctionBody;\n\n// These exports are for InlineTransform tool.\n// InlineTransform: getInsertStackCode\nmodule.exports.getInsertStackCode = getInsertStackCode;\n// InlineTransform: getQuadNodeCode\nmodule.exports.getQuadNodeCode = getQuadNodeCode;\n// InlineTransform: isSamePosition\nmodule.exports.isSamePosition = isSamePosition;\n// InlineTransform: getChildBodyCode\nmodule.exports.getChildBodyCode = getChildBodyCode;\n// InlineTransform: setChildBodyCode\nmodule.exports.setChildBodyCode = setChildBodyCode;\n\nfunction generateQuadTreeFunction(dimension) {\n let code = generateQuadTreeFunctionBody(dimension);\n return (new Function(code))();\n}\n\nfunction generateQuadTreeFunctionBody(dimension) {\n let pattern = createPatternBuilder(dimension);\n let quadCount = Math.pow(2, dimension);\n\n let code = `\n${getInsertStackCode()}\n${getQuadNodeCode(dimension)}\n${isSamePosition(dimension)}\n${getChildBodyCode(dimension)}\n${setChildBodyCode(dimension)}\n\nfunction createQuadTree(options, random) {\n options = options || {};\n options.gravity = typeof options.gravity === 'number' ? options.gravity : -1;\n options.theta = typeof options.theta === 'number' ? options.theta : 0.8;\n\n var gravity = options.gravity;\n var updateQueue = [];\n var insertStack = new InsertStack();\n var theta = options.theta;\n\n var nodesCache = [];\n var currentInCache = 0;\n var root = newNode();\n\n return {\n insertBodies: insertBodies,\n\n /**\n * Gets root node if it is present\n */\n getRoot: function() {\n return root;\n },\n\n updateBodyForce: update,\n\n options: function(newOptions) {\n if (newOptions) {\n if (typeof newOptions.gravity === 'number') {\n gravity = newOptions.gravity;\n }\n if (typeof newOptions.theta === 'number') {\n theta = newOptions.theta;\n }\n\n return this;\n }\n\n return {\n gravity: gravity,\n theta: theta\n };\n }\n };\n\n function newNode() {\n // To avoid pressure on GC we reuse nodes.\n var node = nodesCache[currentInCache];\n if (node) {\n${assignQuads(' node.')}\n node.body = null;\n node.mass = ${pattern('node.mass_{var} = ', {join: ''})}0;\n ${pattern('node.min_{var} = node.max_{var} = ', {join: ''})}0;\n } else {\n node = new QuadNode();\n nodesCache[currentInCache] = node;\n }\n\n ++currentInCache;\n return node;\n }\n\n function update(sourceBody) {\n var queue = updateQueue;\n var v;\n ${pattern('var d{var};', {indent: 4})}\n var r; \n ${pattern('var f{var} = 0;', {indent: 4})}\n var queueLength = 1;\n var shiftIdx = 0;\n var pushIdx = 1;\n\n queue[0] = root;\n\n while (queueLength) {\n var node = queue[shiftIdx];\n var body = node.body;\n\n queueLength -= 1;\n shiftIdx += 1;\n var differentBody = (body !== sourceBody);\n if (body && differentBody) {\n // If the current node is a leaf node (and it is not source body),\n // calculate the force exerted by the current node on body, and add this\n // amount to body's net force.\n ${pattern('d{var} = body.pos.{var} - sourceBody.pos.{var};', {indent: 8})}\n r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})});\n\n if (r === 0) {\n // Poor man's protection against zero distance.\n ${pattern('d{var} = (random.nextDouble() - 0.5) / 50;', {indent: 10})}\n r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})});\n }\n\n // This is standard gravitation force calculation but we divide\n // by r^3 to save two operations when normalizing force vector.\n v = gravity * body.mass * sourceBody.mass / (r * r * r);\n ${pattern('f{var} += v * d{var};', {indent: 8})}\n } else if (differentBody) {\n // Otherwise, calculate the ratio s / r, where s is the width of the region\n // represented by the internal node, and r is the distance between the body\n // and the node's center-of-mass\n ${pattern('d{var} = node.mass_{var} / node.mass - sourceBody.pos.{var};', {indent: 8})}\n r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})});\n\n if (r === 0) {\n // Sorry about code duplication. I don't want to create many functions\n // right away. Just want to see performance first.\n ${pattern('d{var} = (random.nextDouble() - 0.5) / 50;', {indent: 10})}\n r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})});\n }\n // If s / r < θ, treat this internal node as a single body, and calculate the\n // force it exerts on sourceBody, and add this amount to sourceBody's net force.\n if ((node.max_${getVariableName(0)} - node.min_${getVariableName(0)}) / r < theta) {\n // in the if statement above we consider node's width only\n // because the region was made into square during tree creation.\n // Thus there is no difference between using width or height.\n v = gravity * node.mass * sourceBody.mass / (r * r * r);\n ${pattern('f{var} += v * d{var};', {indent: 10})}\n } else {\n // Otherwise, run the procedure recursively on each of the current node's children.\n\n // I intentionally unfolded this loop, to save several CPU cycles.\n${runRecursiveOnChildren()}\n }\n }\n }\n\n ${pattern('sourceBody.force.{var} += f{var};', {indent: 4})}\n }\n\n function insertBodies(bodies) {\n ${pattern('var {var}min = Number.MAX_VALUE;', {indent: 4})}\n ${pattern('var {var}max = Number.MIN_VALUE;', {indent: 4})}\n var i = bodies.length;\n\n // To reduce quad tree depth we are looking for exact bounding box of all particles.\n while (i--) {\n var pos = bodies[i].pos;\n ${pattern('if (pos.{var} < {var}min) {var}min = pos.{var};', {indent: 6})}\n ${pattern('if (pos.{var} > {var}max) {var}max = pos.{var};', {indent: 6})}\n }\n\n // Makes the bounds square.\n var maxSideLength = -Infinity;\n ${pattern('if ({var}max - {var}min > maxSideLength) maxSideLength = {var}max - {var}min ;', {indent: 4})}\n\n currentInCache = 0;\n root = newNode();\n ${pattern('root.min_{var} = {var}min;', {indent: 4})}\n ${pattern('root.max_{var} = {var}min + maxSideLength;', {indent: 4})}\n\n i = bodies.length - 1;\n if (i >= 0) {\n root.body = bodies[i];\n }\n while (i--) {\n insert(bodies[i], root);\n }\n }\n\n function insert(newBody) {\n insertStack.reset();\n insertStack.push(root, newBody);\n\n while (!insertStack.isEmpty()) {\n var stackItem = insertStack.pop();\n var node = stackItem.node;\n var body = stackItem.body;\n\n if (!node.body) {\n // This is internal node. Update the total mass of the node and center-of-mass.\n ${pattern('var {var} = body.pos.{var};', {indent: 8})}\n node.mass += body.mass;\n ${pattern('node.mass_{var} += body.mass * {var};', {indent: 8})}\n\n // Recursively insert the body in the appropriate quadrant.\n // But first find the appropriate quadrant.\n var quadIdx = 0; // Assume we are in the 0's quad.\n ${pattern('var min_{var} = node.min_{var};', {indent: 8})}\n ${pattern('var max_{var} = (min_{var} + node.max_{var}) / 2;', {indent: 8})}\n\n${assignInsertionQuadIndex(8)}\n\n var child = getChild(node, quadIdx);\n\n if (!child) {\n // The node is internal but this quadrant is not taken. Add\n // subnode to it.\n child = newNode();\n ${pattern('child.min_{var} = min_{var};', {indent: 10})}\n ${pattern('child.max_{var} = max_{var};', {indent: 10})}\n child.body = body;\n\n setChild(node, quadIdx, child);\n } else {\n // continue searching in this quadrant.\n insertStack.push(child, body);\n }\n } else {\n // We are trying to add to the leaf node.\n // We have to convert current leaf into internal node\n // and continue adding two nodes.\n var oldBody = node.body;\n node.body = null; // internal nodes do not cary bodies\n\n if (isSamePosition(oldBody.pos, body.pos)) {\n // Prevent infinite subdivision by bumping one node\n // anywhere in this quadrant\n var retriesCount = 3;\n do {\n var offset = random.nextDouble();\n ${pattern('var d{var} = (node.max_{var} - node.min_{var}) * offset;', {indent: 12})}\n\n ${pattern('oldBody.pos.{var} = node.min_{var} + d{var};', {indent: 12})}\n retriesCount -= 1;\n // Make sure we don't bump it out of the box. If we do, next iteration should fix it\n } while (retriesCount > 0 && isSamePosition(oldBody.pos, body.pos));\n\n if (retriesCount === 0 && isSamePosition(oldBody.pos, body.pos)) {\n // This is very bad, we ran out of precision.\n // if we do not return from the method we'll get into\n // infinite loop here. So we sacrifice correctness of layout, and keep the app running\n // Next layout iteration should get larger bounding box in the first step and fix this\n return;\n }\n }\n // Next iteration should subdivide node further.\n insertStack.push(node, oldBody);\n insertStack.push(node, body);\n }\n }\n }\n}\nreturn createQuadTree;\n\n`;\n return code;\n\n\n function assignInsertionQuadIndex(indentCount) {\n let insertionCode = [];\n let indent = Array(indentCount + 1).join(' ');\n for (let i = 0; i < dimension; ++i) {\n insertionCode.push(indent + `if (${getVariableName(i)} > max_${getVariableName(i)}) {`);\n insertionCode.push(indent + ` quadIdx = quadIdx + ${Math.pow(2, i)};`);\n insertionCode.push(indent + ` min_${getVariableName(i)} = max_${getVariableName(i)};`);\n insertionCode.push(indent + ` max_${getVariableName(i)} = node.max_${getVariableName(i)};`);\n insertionCode.push(indent + `}`);\n }\n return insertionCode.join('\\n');\n // if (x > max_x) { // somewhere in the eastern part.\n // quadIdx = quadIdx + 1;\n // left = right;\n // right = node.right;\n // }\n }\n\n function runRecursiveOnChildren() {\n let indent = Array(11).join(' ');\n let recursiveCode = [];\n for (let i = 0; i < quadCount; ++i) {\n recursiveCode.push(indent + `if (node.quad${i}) {`);\n recursiveCode.push(indent + ` queue[pushIdx] = node.quad${i};`);\n recursiveCode.push(indent + ` queueLength += 1;`);\n recursiveCode.push(indent + ` pushIdx += 1;`);\n recursiveCode.push(indent + `}`);\n }\n return recursiveCode.join('\\n');\n // if (node.quad0) {\n // queue[pushIdx] = node.quad0;\n // queueLength += 1;\n // pushIdx += 1;\n // }\n }\n\n function assignQuads(indent) {\n // this.quad0 = null;\n // this.quad1 = null;\n // this.quad2 = null;\n // this.quad3 = null;\n let quads = [];\n for (let i = 0; i < quadCount; ++i) {\n quads.push(`${indent}quad${i} = null;`);\n }\n return quads.join('\\n');\n }\n}\n\nfunction isSamePosition(dimension) {\n let pattern = createPatternBuilder(dimension);\n return `\n function isSamePosition(point1, point2) {\n ${pattern('var d{var} = Math.abs(point1.{var} - point2.{var});', {indent: 2})}\n \n return ${pattern('d{var} < 1e-8', {join: ' && '})};\n } \n`;\n}\n\nfunction setChildBodyCode(dimension) {\n var quadCount = Math.pow(2, dimension);\n return `\nfunction setChild(node, idx, child) {\n ${setChildBody()}\n}`;\n function setChildBody() {\n let childBody = [];\n for (let i = 0; i < quadCount; ++i) {\n let prefix = (i === 0) ? ' ' : ' else ';\n childBody.push(`${prefix}if (idx === ${i}) node.quad${i} = child;`);\n }\n\n return childBody.join('\\n');\n // if (idx === 0) node.quad0 = child;\n // else if (idx === 1) node.quad1 = child;\n // else if (idx === 2) node.quad2 = child;\n // else if (idx === 3) node.quad3 = child;\n }\n}\n\nfunction getChildBodyCode(dimension) {\n return `function getChild(node, idx) {\n${getChildBody()}\n return null;\n}`;\n\n function getChildBody() {\n let childBody = [];\n let quadCount = Math.pow(2, dimension);\n for (let i = 0; i < quadCount; ++i) {\n childBody.push(` if (idx === ${i}) return node.quad${i};`);\n }\n\n return childBody.join('\\n');\n // if (idx === 0) return node.quad0;\n // if (idx === 1) return node.quad1;\n // if (idx === 2) return node.quad2;\n // if (idx === 3) return node.quad3;\n }\n}\n\nfunction getQuadNodeCode(dimension) {\n let pattern = createPatternBuilder(dimension);\n let quadCount = Math.pow(2, dimension);\n var quadNodeCode = `\nfunction QuadNode() {\n // body stored inside this node. In quad tree only leaf nodes (by construction)\n // contain bodies:\n this.body = null;\n\n // Child nodes are stored in quads. Each quad is presented by number:\n // 0 | 1\n // -----\n // 2 | 3\n${assignQuads(' this.')}\n\n // Total mass of current node\n this.mass = 0;\n\n // Center of mass coordinates\n ${pattern('this.mass_{var} = 0;', {indent: 2})}\n\n // bounding box coordinates\n ${pattern('this.min_{var} = 0;', {indent: 2})}\n ${pattern('this.max_{var} = 0;', {indent: 2})}\n}\n`;\n return quadNodeCode;\n\n function assignQuads(indent) {\n // this.quad0 = null;\n // this.quad1 = null;\n // this.quad2 = null;\n // this.quad3 = null;\n let quads = [];\n for (let i = 0; i < quadCount; ++i) {\n quads.push(`${indent}quad${i} = null;`);\n }\n return quads.join('\\n');\n }\n}\n\nfunction getInsertStackCode() {\n return `\n/**\n * Our implementation of QuadTree is non-recursive to avoid GC hit\n * This data structure represent stack of elements\n * which we are trying to insert into quad tree.\n */\nfunction InsertStack () {\n this.stack = [];\n this.popIdx = 0;\n}\n\nInsertStack.prototype = {\n isEmpty: function() {\n return this.popIdx === 0;\n },\n push: function (node, body) {\n var item = this.stack[this.popIdx];\n if (!item) {\n // we are trying to avoid memory pressure: create new element\n // only when absolutely necessary\n this.stack[this.popIdx] = new InsertStackElement(node, body);\n } else {\n item.node = node;\n item.body = body;\n }\n ++this.popIdx;\n },\n pop: function () {\n if (this.popIdx > 0) {\n return this.stack[--this.popIdx];\n }\n },\n reset: function () {\n this.popIdx = 0;\n }\n};\n\nfunction InsertStackElement(node, body) {\n this.node = node; // QuadTree node\n this.body = body; // physical body which needs to be inserted to node\n}\n`;\n}","\nmodule.exports = generateBoundsFunction;\nmodule.exports.generateFunctionBody = generateBoundsFunctionBody;\n\nconst createPatternBuilder = require('./createPatternBuilder');\n\nfunction generateBoundsFunction(dimension) {\n let code = generateBoundsFunctionBody(dimension);\n return new Function('bodies', 'settings', 'random', code);\n}\n\nfunction generateBoundsFunctionBody(dimension) {\n let pattern = createPatternBuilder(dimension);\n\n let code = `\n var boundingBox = {\n ${pattern('min_{var}: 0, max_{var}: 0,', {indent: 4})}\n };\n\n return {\n box: boundingBox,\n\n update: updateBoundingBox,\n\n reset: resetBoundingBox,\n\n getBestNewPosition: function (neighbors) {\n var ${pattern('base_{var} = 0', {join: ', '})};\n\n if (neighbors.length) {\n for (var i = 0; i < neighbors.length; ++i) {\n let neighborPos = neighbors[i].pos;\n ${pattern('base_{var} += neighborPos.{var};', {indent: 10})}\n }\n\n ${pattern('base_{var} /= neighbors.length;', {indent: 8})}\n } else {\n ${pattern('base_{var} = (boundingBox.min_{var} + boundingBox.max_{var}) / 2;', {indent: 8})}\n }\n\n var springLength = settings.springLength;\n return {\n ${pattern('{var}: base_{var} + (random.nextDouble() - 0.5) * springLength,', {indent: 8})}\n };\n }\n };\n\n function updateBoundingBox() {\n var i = bodies.length;\n if (i === 0) return; // No bodies - no borders.\n\n ${pattern('var max_{var} = -Infinity;', {indent: 4})}\n ${pattern('var min_{var} = Infinity;', {indent: 4})}\n\n while(i--) {\n // this is O(n), it could be done faster with quadtree, if we check the root node bounds\n var bodyPos = bodies[i].pos;\n ${pattern('if (bodyPos.{var} < min_{var}) min_{var} = bodyPos.{var};', {indent: 6})}\n ${pattern('if (bodyPos.{var} > max_{var}) max_{var} = bodyPos.{var};', {indent: 6})}\n }\n\n ${pattern('boundingBox.min_{var} = min_{var};', {indent: 4})}\n ${pattern('boundingBox.max_{var} = max_{var};', {indent: 4})}\n }\n\n function resetBoundingBox() {\n ${pattern('boundingBox.min_{var} = boundingBox.max_{var} = 0;', {indent: 4})}\n }\n`;\n return code;\n}\n","const createPatternBuilder = require('./createPatternBuilder');\n\nmodule.exports = generateCreateDragForceFunction;\nmodule.exports.generateCreateDragForceFunctionBody = generateCreateDragForceFunctionBody;\n\nfunction generateCreateDragForceFunction(dimension) {\n let code = generateCreateDragForceFunctionBody(dimension);\n return new Function('options', code);\n}\n\nfunction generateCreateDragForceFunctionBody(dimension) {\n let pattern = createPatternBuilder(dimension);\n let code = `\n if (!Number.isFinite(options.dragCoefficient)) throw new Error('dragCoefficient is not a finite number');\n\n return {\n update: function(body) {\n ${pattern('body.force.{var} -= options.dragCoefficient * body.velocity.{var};', {indent: 6})}\n }\n };\n`;\n return code;\n}\n","const createPatternBuilder = require('./createPatternBuilder');\n\nmodule.exports = generateCreateSpringForceFunction;\nmodule.exports.generateCreateSpringForceFunctionBody = generateCreateSpringForceFunctionBody;\n\nfunction generateCreateSpringForceFunction(dimension) {\n let code = generateCreateSpringForceFunctionBody(dimension);\n return new Function('options', 'random', code);\n}\n\nfunction generateCreateSpringForceFunctionBody(dimension) {\n let pattern = createPatternBuilder(dimension);\n let code = `\n if (!Number.isFinite(options.springCoefficient)) throw new Error('Spring coefficient is not a number');\n if (!Number.isFinite(options.springLength)) throw new Error('Spring length is not a number');\n\n return {\n /**\n * Updates forces acting on a spring\n */\n update: function (spring) {\n var body1 = spring.from;\n var body2 = spring.to;\n var length = spring.length < 0 ? options.springLength : spring.length;\n ${pattern('var d{var} = body2.pos.{var} - body1.pos.{var};', {indent: 6})}\n var r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})});\n\n if (r === 0) {\n ${pattern('d{var} = (random.nextDouble() - 0.5) / 50;', {indent: 8})}\n r = Math.sqrt(${pattern('d{var} * d{var}', {join: ' + '})});\n }\n\n var d = r - length;\n var coefficient = ((spring.coefficient > 0) ? spring.coefficient : options.springCoefficient) * d / r;\n\n ${pattern('body1.force.{var} += coefficient * d{var}', {indent: 6})};\n body1.springCount += 1;\n body1.springLength += r;\n\n ${pattern('body2.force.{var} -= coefficient * d{var}', {indent: 6})};\n body2.springCount += 1;\n body2.springLength += r;\n }\n };\n`;\n return code;\n}\n","const createPatternBuilder = require('./createPatternBuilder');\n\nmodule.exports = generateIntegratorFunction;\nmodule.exports.generateIntegratorFunctionBody = generateIntegratorFunctionBody;\n\nfunction generateIntegratorFunction(dimension) {\n let code = generateIntegratorFunctionBody(dimension);\n return new Function('bodies', 'timeStep', 'adaptiveTimeStepWeight', code);\n}\n\nfunction generateIntegratorFunctionBody(dimension) {\n let pattern = createPatternBuilder(dimension);\n let code = `\n var length = bodies.length;\n if (length === 0) return 0;\n\n ${pattern('var d{var} = 0, t{var} = 0;', {indent: 2})}\n\n for (var i = 0; i < length; ++i) {\n var body = bodies[i];\n if (body.isPinned) continue;\n\n if (adaptiveTimeStepWeight && body.springCount) {\n timeStep = (adaptiveTimeStepWeight * body.springLength/body.springCount);\n }\n\n var coeff = timeStep / body.mass;\n\n ${pattern('body.velocity.{var} += coeff * body.force.{var};', {indent: 4})}\n ${pattern('var v{var} = body.velocity.{var};', {indent: 4})}\n var v = Math.sqrt(${pattern('v{var} * v{var}', {join: ' + '})});\n\n if (v > 1) {\n // We normalize it so that we move within timeStep range. \n // for the case when v <= 1 - we let velocity to fade out.\n ${pattern('body.velocity.{var} = v{var} / v;', {indent: 6})}\n }\n\n ${pattern('d{var} = timeStep * body.velocity.{var};', {indent: 4})}\n\n ${pattern('body.pos.{var} += d{var};', {indent: 4})}\n\n ${pattern('t{var} += Math.abs(d{var});', {indent: 4})}\n }\n\n return (${pattern('t{var} * t{var}', {join: ' + '})})/length;\n`;\n return code;\n}\n","module.exports = Spring;\n\n/**\n * Represents a physical spring. Spring connects two bodies, has rest length\n * stiffness coefficient and optional weight\n */\nfunction Spring(fromBody, toBody, length, springCoefficient) {\n this.from = fromBody;\n this.to = toBody;\n this.length = length;\n this.coefficient = springCoefficient;\n}\n","module.exports = merge;\n\n/**\n * Augments `target` with properties in `options`. Does not override\n * target's properties if they are defined and matches expected type in \n * options\n *\n * @returns {Object} merged object\n */\nfunction merge(target, options) {\n var key;\n if (!target) { target = {}; }\n if (options) {\n for (key in options) {\n if (options.hasOwnProperty(key)) {\n var targetHasIt = target.hasOwnProperty(key),\n optionsValueType = typeof options[key],\n shouldReplace = !targetHasIt || (typeof target[key] !== optionsValueType);\n\n if (shouldReplace) {\n target[key] = options[key];\n } else if (optionsValueType === 'object') {\n // go deep, don't care about loops here, we are simple API!:\n target[key] = merge(target[key], options[key]);\n }\n }\n }\n }\n\n return target;\n}\n","module.exports = random;\n\n// TODO: Deprecate?\nmodule.exports.random = random,\nmodule.exports.randomIterator = randomIterator\n\n/**\n * Creates seeded PRNG with two methods:\n * next() and nextDouble()\n */\nfunction random(inputSeed) {\n var seed = typeof inputSeed === 'number' ? inputSeed : (+new Date());\n return new Generator(seed)\n}\n\nfunction Generator(seed) {\n this.seed = seed;\n}\n\n/**\n * Generates random integer number in the range from 0 (inclusive) to maxValue (exclusive)\n *\n * @param maxValue Number REQUIRED. Omitting this number will result in NaN values from PRNG.\n */\nGenerator.prototype.next = next;\n\n/**\n * Generates random double number in the range from 0 (inclusive) to 1 (exclusive)\n * This function is the same as Math.random() (except that it could be seeded)\n */\nGenerator.prototype.nextDouble = nextDouble;\n\n/**\n * Returns a random real number from uniform distribution in [0, 1)\n */\nGenerator.prototype.uniform = nextDouble;\n\n/**\n * Returns a random real number from a Gaussian distribution\n * with 0 as a mean, and 1 as standard deviation u ~ N(0,1)\n */\nGenerator.prototype.gaussian = gaussian;\n\nfunction gaussian() {\n // use the polar form of the Box-Muller transform\n // based on https://introcs.cs.princeton.edu/java/23recursion/StdRandom.java\n var r, x, y;\n do {\n x = this.nextDouble() * 2 - 1;\n y = this.nextDouble() * 2 - 1;\n r = x * x + y * y;\n } while (r >= 1 || r === 0);\n\n return x * Math.sqrt(-2 * Math.log(r)/r);\n}\n\n/**\n * See https://twitter.com/anvaka/status/1296182534150135808\n */\nGenerator.prototype.levy = levy;\n\nfunction levy() {\n var beta = 3 / 2;\n var sigma = Math.pow(\n gamma( 1 + beta ) * Math.sin(Math.PI * beta / 2) / \n (gamma((1 + beta) / 2) * beta * Math.pow(2, (beta - 1) / 2)),\n 1/beta\n );\n return this.gaussian() * sigma / Math.pow(Math.abs(this.gaussian()), 1/beta);\n}\n\n// gamma function approximation\nfunction gamma(z) {\n return Math.sqrt(2 * Math.PI / z) * Math.pow((1 / Math.E) * (z + 1 / (12 * z - 1 / (10 * z))), z);\n}\n\nfunction nextDouble() {\n var seed = this.seed;\n // Robert Jenkins' 32 bit integer hash function.\n seed = ((seed + 0x7ed55d16) + (seed << 12)) & 0xffffffff;\n seed = ((seed ^ 0xc761c23c) ^ (seed >>> 19)) & 0xffffffff;\n seed = ((seed + 0x165667b1) + (seed << 5)) & 0xffffffff;\n seed = ((seed + 0xd3a2646c) ^ (seed << 9)) & 0xffffffff;\n seed = ((seed + 0xfd7046c5) + (seed << 3)) & 0xffffffff;\n seed = ((seed ^ 0xb55a4f09) ^ (seed >>> 16)) & 0xffffffff;\n this.seed = seed;\n return (seed & 0xfffffff) / 0x10000000;\n}\n\nfunction next(maxValue) {\n return Math.floor(this.nextDouble() * maxValue);\n}\n\n/*\n * Creates iterator over array, which returns items of array in random order\n * Time complexity is guaranteed to be O(n);\n */\nfunction randomIterator(array, customRandom) {\n var localRandom = customRandom || random();\n if (typeof localRandom.next !== 'function') {\n throw new Error('customRandom does not match expected API: next() function is missing');\n }\n\n return {\n forEach: forEach,\n\n /**\n * Shuffles array randomly, in place.\n */\n shuffle: shuffle\n };\n\n function shuffle() {\n var i, j, t;\n for (i = array.length - 1; i > 0; --i) {\n j = localRandom.next(i + 1); // i inclusive\n t = array[j];\n array[j] = array[i];\n array[i] = t;\n }\n\n return array;\n }\n\n function forEach(callback) {\n var i, j, t;\n for (i = array.length - 1; i > 0; --i) {\n j = localRandom.next(i + 1); // i inclusive\n t = array[j];\n array[j] = array[i];\n array[i] = t;\n\n callback(t);\n }\n\n if (array.length) {\n callback(array[0]);\n }\n }\n}","/**\n * Manages a simulation of physical forces acting on bodies and springs.\n */\nmodule.exports = createPhysicsSimulator;\n\nvar generateCreateBodyFunction = require('./codeGenerators/generateCreateBody');\nvar generateQuadTreeFunction = require('./codeGenerators/generateQuadTree');\nvar generateBoundsFunction = require('./codeGenerators/generateBounds');\nvar generateCreateDragForceFunction = require('./codeGenerators/generateCreateDragForce');\nvar generateCreateSpringForceFunction = require('./codeGenerators/generateCreateSpringForce');\nvar generateIntegratorFunction = require('./codeGenerators/generateIntegrator');\n\nvar dimensionalCache = {};\n\nfunction createPhysicsSimulator(settings) {\n var Spring = require('./spring');\n var merge = require('ngraph.merge');\n var eventify = require('ngraph.events');\n if (settings) {\n // Check for names from older versions of the layout\n if (settings.springCoeff !== undefined) throw new Error('springCoeff was renamed to springCoefficient');\n if (settings.dragCoeff !== undefined) throw new Error('dragCoeff was renamed to dragCoefficient');\n }\n\n settings = merge(settings, {\n /**\n * Ideal length for links (springs in physical model).\n */\n springLength: 10,\n\n /**\n * Hook's law coefficient. 1 - solid spring.\n */\n springCoefficient: 0.8, \n\n /**\n * Coulomb's law coefficient. It's used to repel nodes thus should be negative\n * if you make it positive nodes start attract each other :).\n */\n gravity: -12,\n\n /**\n * Theta coefficient from Barnes Hut simulation. Ranged between (0, 1).\n * The closer it's to 1 the more nodes algorithm will have to go through.\n * Setting it to one makes Barnes Hut simulation no different from\n * brute-force forces calculation (each node is considered).\n */\n theta: 0.8,\n\n /**\n * Drag force coefficient. Used to slow down system, thus should be less than 1.\n * The closer it is to 0 the less tight system will be.\n */\n dragCoefficient: 0.9, // TODO: Need to rename this to something better. E.g. `dragCoefficient`\n\n /**\n * Default time step (dt) for forces integration\n */\n timeStep : 0.5,\n\n /**\n * Adaptive time step uses average spring length to compute actual time step:\n * See: https://twitter.com/anvaka/status/1293067160755957760\n */\n adaptiveTimeStepWeight: 0,\n\n /**\n * This parameter defines number of dimensions of the space where simulation\n * is performed. \n */\n dimensions: 2,\n\n /**\n * In debug mode more checks are performed, this will help you catch errors\n * quickly, however for production build it is recommended to turn off this flag\n * to speed up computation.\n */\n debug: false\n });\n\n var factory = dimensionalCache[settings.dimensions];\n if (!factory) {\n var dimensions = settings.dimensions;\n factory = {\n Body: generateCreateBodyFunction(dimensions, settings.debug),\n createQuadTree: generateQuadTreeFunction(dimensions),\n createBounds: generateBoundsFunction(dimensions),\n createDragForce: generateCreateDragForceFunction(dimensions),\n createSpringForce: generateCreateSpringForceFunction(dimensions),\n integrate: generateIntegratorFunction(dimensions),\n };\n dimensionalCache[dimensions] = factory;\n }\n\n var Body = factory.Body;\n var createQuadTree = factory.createQuadTree;\n var createBounds = factory.createBounds;\n var createDragForce = factory.createDragForce;\n var createSpringForce = factory.createSpringForce;\n var integrate = factory.integrate;\n var createBody = pos => new Body(pos);\n\n var random = require('ngraph.random').random(42);\n var bodies = []; // Bodies in this simulation.\n var springs = []; // Springs in this simulation.\n\n var quadTree = createQuadTree(settings, random);\n var bounds = createBounds(bodies, settings, random);\n var springForce = createSpringForce(settings, random);\n var dragForce = createDragForce(settings);\n\n var totalMovement = 0; // how much movement we made on last step\n var forces = [];\n var forceMap = new Map();\n var iterationNumber = 0;\n \n addForce('nbody', nbodyForce);\n addForce('spring', updateSpringForce);\n\n var publicApi = {\n /**\n * Array of bodies, registered with current simulator\n *\n * Note: To add new body, use addBody() method. This property is only\n * exposed for testing/performance purposes.\n */\n bodies: bodies,\n \n quadTree: quadTree,\n\n /**\n * Array of springs, registered with current simulator\n *\n * Note: To add new spring, use addSpring() method. This property is only\n * exposed for testing/performance purposes.\n */\n springs: springs,\n\n /**\n * Returns settings with which current simulator was initialized\n */\n settings: settings,\n\n /**\n * Adds a new force to simulation\n */\n addForce: addForce,\n \n /**\n * Removes a force from the simulation.\n */\n removeForce: removeForce,\n\n /**\n * Returns a map of all registered forces.\n */\n getForces: getForces,\n\n /**\n * Performs one step of force simulation.\n *\n * @returns {boolean} true if system is considered stable; False otherwise.\n */\n step: function () {\n for (var i = 0; i < forces.length; ++i) {\n forces[i](iterationNumber);\n }\n var movement = integrate(bodies, settings.timeStep, settings.adaptiveTimeStepWeight);\n iterationNumber += 1;\n return movement;\n },\n\n /**\n * Adds body to the system\n *\n * @param {ngraph.physics.primitives.Body} body physical body\n *\n * @returns {ngraph.physics.primitives.Body} added body\n */\n addBody: function (body) {\n if (!body) {\n throw new Error('Body is required');\n }\n bodies.push(body);\n\n return body;\n },\n\n /**\n * Adds body to the system at given position\n *\n * @param {Object} pos position of a body\n *\n * @returns {ngraph.physics.primitives.Body} added body\n */\n addBodyAt: function (pos) {\n if (!pos) {\n throw new Error('Body position is required');\n }\n var body = createBody(pos);\n bodies.push(body);\n\n return body;\n },\n\n /**\n * Removes body from the system\n *\n * @param {ngraph.physics.primitives.Body} body to remove\n *\n * @returns {Boolean} true if body found and removed. falsy otherwise;\n */\n removeBody: function (body) {\n if (!body) { return; }\n\n var idx = bodies.indexOf(body);\n if (idx < 0) { return; }\n\n bodies.splice(idx, 1);\n if (bodies.length === 0) {\n bounds.reset();\n }\n return true;\n },\n\n /**\n * Adds a spring to this simulation.\n *\n * @returns {Object} - a handle for a spring. If you want to later remove\n * spring pass it to removeSpring() method.\n */\n addSpring: function (body1, body2, springLength, springCoefficient) {\n if (!body1 || !body2) {\n throw new Error('Cannot add null spring to force simulator');\n }\n\n if (typeof springLength !== 'number') {\n springLength = -1; // assume global configuration\n }\n\n var spring = new Spring(body1, body2, springLength, springCoefficient >= 0 ? springCoefficient : -1);\n springs.push(spring);\n\n // TODO: could mark simulator as dirty.\n return spring;\n },\n\n /**\n * Returns amount of movement performed on last step() call\n */\n getTotalMovement: function () {\n return totalMovement;\n },\n\n /**\n * Removes spring from the system\n *\n * @param {Object} spring to remove. Spring is an object returned by addSpring\n *\n * @returns {Boolean} true if spring found and removed. falsy otherwise;\n */\n removeSpring: function (spring) {\n if (!spring) { return; }\n var idx = springs.indexOf(spring);\n if (idx > -1) {\n springs.splice(idx, 1);\n return true;\n }\n },\n\n getBestNewBodyPosition: function (neighbors) {\n return bounds.getBestNewPosition(neighbors);\n },\n\n /**\n * Returns bounding box which covers all bodies\n */\n getBBox: getBoundingBox, \n getBoundingBox: getBoundingBox, \n\n invalidateBBox: function () {\n console.warn('invalidateBBox() is deprecated, bounds always recomputed on `getBBox()` call');\n },\n\n // TODO: Move the force specific stuff to force\n gravity: function (value) {\n if (value !== undefined) {\n settings.gravity = value;\n quadTree.options({gravity: value});\n return this;\n } else {\n return settings.gravity;\n }\n },\n\n theta: function (value) {\n if (value !== undefined) {\n settings.theta = value;\n quadTree.options({theta: value});\n return this;\n } else {\n return settings.theta;\n }\n },\n\n /**\n * Returns pseudo-random number generator instance.\n */\n random: random\n };\n\n // allow settings modification via public API:\n expose(settings, publicApi);\n\n eventify(publicApi);\n\n return publicApi;\n\n function getBoundingBox() {\n bounds.update();\n return bounds.box;\n }\n\n function addForce(forceName, forceFunction) {\n if (forceMap.has(forceName)) throw new Error('Force ' + forceName + ' is already added');\n\n forceMap.set(forceName, forceFunction);\n forces.push(forceFunction);\n }\n\n function removeForce(forceName) {\n var forceIndex = forces.indexOf(forceMap.get(forceName));\n if (forceIndex < 0) return;\n forces.splice(forceIndex, 1);\n forceMap.delete(forceName);\n }\n\n function getForces() {\n // TODO: Should I trust them or clone the forces?\n return forceMap;\n }\n\n function nbodyForce(/* iterationUmber */) {\n if (bodies.length === 0) return;\n\n quadTree.insertBodies(bodies);\n var i = bodies.length;\n while (i--) {\n var body = bodies[i];\n if (!body.isPinned) {\n body.reset();\n quadTree.updateBodyForce(body);\n dragForce.update(body);\n }\n }\n }\n\n function updateSpringForce() {\n var i = springs.length;\n while (i--) {\n springForce.update(springs[i]);\n }\n }\n\n}\n\nfunction expose(settings, target) {\n for (var key in settings) {\n augment(settings, target, key);\n }\n}\n\nfunction augment(source, target, key) {\n if (!source.hasOwnProperty(key)) return;\n if (typeof target[key] === 'function') {\n // this accessor is already defined. Ignore it\n return;\n }\n var sourceIsNumber = Number.isFinite(source[key]);\n\n if (sourceIsNumber) {\n target[key] = function (value) {\n if (value !== undefined) {\n if (!Number.isFinite(value)) throw new Error('Value of ' + key + ' should be a valid number.');\n source[key] = value;\n return target;\n }\n return source[key];\n };\n } else {\n target[key] = function (value) {\n if (value !== undefined) {\n source[key] = value;\n return target;\n }\n return source[key];\n };\n }\n}\n","module.exports = createLayout;\nmodule.exports.simulator = require('./lib/createPhysicsSimulator');\n\nvar eventify = require('ngraph.events');\n\n/**\n * Creates force based layout for a given graph.\n *\n * @param {ngraph.graph} graph which needs to be laid out\n * @param {object} physicsSettings if you need custom settings\n * for physics simulator you can pass your own settings here. If it's not passed\n * a default one will be created.\n */\nfunction createLayout(graph, physicsSettings) {\n if (!graph) {\n throw new Error('Graph structure cannot be undefined');\n }\n\n var createSimulator = (physicsSettings && physicsSettings.createSimulator) || require('./lib/createPhysicsSimulator');\n var physicsSimulator = createSimulator(physicsSettings);\n if (Array.isArray(physicsSettings)) throw new Error('Physics settings is expected to be an object');\n\n var nodeMass = defaultNodeMass;\n if (physicsSettings && typeof physicsSettings.nodeMass === 'function') {\n nodeMass = physicsSettings.nodeMass;\n }\n\n var nodeBodies = new Map();\n var springs = {};\n var bodiesCount = 0;\n\n var springTransform = physicsSimulator.settings.springTransform || noop;\n\n // Initialize physics with what we have in the graph:\n initPhysics();\n listenToEvents();\n\n var wasStable = false;\n\n var api = {\n /**\n * Performs one step of iterative layout algorithm\n *\n * @returns {boolean} true if the system should be considered stable; False otherwise.\n * The system is stable if no further call to `step()` can improve the layout.\n */\n step: function() {\n if (bodiesCount === 0) {\n updateStableStatus(true);\n return true;\n }\n\n var lastMove = physicsSimulator.step();\n\n // Save the movement in case if someone wants to query it in the step\n // callback.\n api.lastMove = lastMove;\n\n // Allow listeners to perform low-level actions after nodes are updated.\n api.fire('step');\n\n var ratio = lastMove/bodiesCount;\n var isStableNow = ratio <= 0.01; // TODO: The number is somewhat arbitrary...\n updateStableStatus(isStableNow);\n\n\n return isStableNow;\n },\n\n /**\n * For a given `nodeId` returns position\n */\n getNodePosition: function (nodeId) {\n return getInitializedBody(nodeId).pos;\n },\n\n /**\n * Sets position of a node to a given coordinates\n * @param {string} nodeId node identifier\n * @param {number} x position of a node\n * @param {number} y position of a node\n * @param {number=} z position of node (only if applicable to body)\n */\n setNodePosition: function (nodeId) {\n var body = getInitializedBody(nodeId);\n body.setPosition.apply(body, Array.prototype.slice.call(arguments, 1));\n },\n\n /**\n * @returns {Object} Link position by link id\n * @returns {Object.from} {x, y} coordinates of link start\n * @returns {Object.to} {x, y} coordinates of link end\n */\n getLinkPosition: function (linkId) {\n var spring = springs[linkId];\n if (spring) {\n return {\n from: spring.from.pos,\n to: spring.to.pos\n };\n }\n },\n\n /**\n * @returns {Object} area required to fit in the graph. Object contains\n * `x1`, `y1` - top left coordinates\n * `x2`, `y2` - bottom right coordinates\n */\n getGraphRect: function () {\n return physicsSimulator.getBBox();\n },\n\n /**\n * Iterates over each body in the layout simulator and performs a callback(body, nodeId)\n */\n forEachBody: forEachBody,\n\n /*\n * Requests layout algorithm to pin/unpin node to its current position\n * Pinned nodes should not be affected by layout algorithm and always\n * remain at their position\n */\n pinNode: function (node, isPinned) {\n var body = getInitializedBody(node.id);\n body.isPinned = !!isPinned;\n },\n\n /**\n * Checks whether given graph's node is currently pinned\n */\n isNodePinned: function (node) {\n return getInitializedBody(node.id).isPinned;\n },\n\n /**\n * Request to release all resources\n */\n dispose: function() {\n graph.off('changed', onGraphChanged);\n api.fire('disposed');\n },\n\n /**\n * Gets physical body for a given node id. If node is not found undefined\n * value is returned.\n */\n getBody: getBody,\n\n /**\n * Gets spring for a given edge.\n *\n * @param {string} linkId link identifer. If two arguments are passed then\n * this argument is treated as formNodeId\n * @param {string=} toId when defined this parameter denotes head of the link\n * and first argument is treated as tail of the link (fromId)\n */\n getSpring: getSpring,\n\n /**\n * Returns length of cumulative force vector. The closer this to zero - the more stable the system is\n */\n getForceVectorLength: getForceVectorLength,\n\n /**\n * [Read only] Gets current physics simulator\n */\n simulator: physicsSimulator,\n\n /**\n * Gets the graph that was used for layout\n */\n graph: graph,\n\n /**\n * Gets amount of movement performed during last step operation\n */\n lastMove: 0\n };\n\n eventify(api);\n\n return api;\n\n function updateStableStatus(isStableNow) {\n if (wasStable !== isStableNow) {\n wasStable = isStableNow;\n onStableChanged(isStableNow);\n }\n }\n\n function forEachBody(cb) {\n nodeBodies.forEach(cb);\n }\n\n function getForceVectorLength() {\n var fx = 0, fy = 0;\n forEachBody(function(body) {\n fx += Math.abs(body.force.x);\n fy += Math.abs(body.force.y);\n });\n return Math.sqrt(fx * fx + fy * fy);\n }\n\n function getSpring(fromId, toId) {\n var linkId;\n if (toId === undefined) {\n if (typeof fromId !== 'object') {\n // assume fromId as a linkId:\n linkId = fromId;\n } else {\n // assume fromId to be a link object:\n linkId = fromId.id;\n }\n } else {\n // toId is defined, should grab link:\n var link = graph.hasLink(fromId, toId);\n if (!link) return;\n linkId = link.id;\n }\n\n return springs[linkId];\n }\n\n function getBody(nodeId) {\n return nodeBodies.get(nodeId);\n }\n\n function listenToEvents() {\n graph.on('changed', onGraphChanged);\n }\n\n function onStableChanged(isStable) {\n api.fire('stable', isStable);\n }\n\n function onGraphChanged(changes) {\n for (var i = 0; i < changes.length; ++i) {\n var change = changes[i];\n if (change.changeType === 'add') {\n if (change.node) {\n initBody(change.node.id);\n }\n if (change.link) {\n initLink(change.link);\n }\n } else if (change.changeType === 'remove') {\n if (change.node) {\n releaseNode(change.node);\n }\n if (change.link) {\n releaseLink(change.link);\n }\n }\n }\n bodiesCount = graph.getNodesCount();\n }\n\n function initPhysics() {\n bodiesCount = 0;\n\n graph.forEachNode(function (node) {\n initBody(node.id);\n bodiesCount += 1;\n });\n\n graph.forEachLink(initLink);\n }\n\n function initBody(nodeId) {\n var body = nodeBodies.get(nodeId);\n if (!body) {\n var node = graph.getNode(nodeId);\n if (!node) {\n throw new Error('initBody() was called with unknown node id');\n }\n\n var pos = node.position;\n if (!pos) {\n var neighbors = getNeighborBodies(node);\n pos = physicsSimulator.getBestNewBodyPosition(neighbors);\n }\n\n body = physicsSimulator.addBodyAt(pos);\n body.id = nodeId;\n\n nodeBodies.set(nodeId, body);\n updateBodyMass(nodeId);\n\n if (isNodeOriginallyPinned(node)) {\n body.isPinned = true;\n }\n }\n }\n\n function releaseNode(node) {\n var nodeId = node.id;\n var body = nodeBodies.get(nodeId);\n if (body) {\n nodeBodies.delete(nodeId);\n physicsSimulator.removeBody(body);\n }\n }\n\n function initLink(link) {\n updateBodyMass(link.fromId);\n updateBodyMass(link.toId);\n\n var fromBody = nodeBodies.get(link.fromId),\n toBody = nodeBodies.get(link.toId),\n spring = physicsSimulator.addSpring(fromBody, toBody, link.length);\n\n springTransform(link, spring);\n\n springs[link.id] = spring;\n }\n\n function releaseLink(link) {\n var spring = springs[link.id];\n if (spring) {\n var from = graph.getNode(link.fromId),\n to = graph.getNode(link.toId);\n\n if (from) updateBodyMass(from.id);\n if (to) updateBodyMass(to.id);\n\n delete springs[link.id];\n\n physicsSimulator.removeSpring(spring);\n }\n }\n\n function getNeighborBodies(node) {\n // TODO: Could probably be done better on memory\n var neighbors = [];\n if (!node.links) {\n return neighbors;\n }\n var maxNeighbors = Math.min(node.links.length, 2);\n for (var i = 0; i < maxNeighbors; ++i) {\n var link = node.links[i];\n var otherBody = link.fromId !== node.id ? nodeBodies.get(link.fromId) : nodeBodies.get(link.toId);\n if (otherBody && otherBody.pos) {\n neighbors.push(otherBody);\n }\n }\n\n return neighbors;\n }\n\n function updateBodyMass(nodeId) {\n var body = nodeBodies.get(nodeId);\n body.mass = nodeMass(nodeId);\n if (Number.isNaN(body.mass)) {\n throw new Error('Node mass should be a number');\n }\n }\n\n /**\n * Checks whether graph node has in its settings pinned attribute,\n * which means layout algorithm cannot move it. Node can be marked\n * as pinned, if it has \"isPinned\" attribute, or when node.data has it.\n *\n * @param {Object} node a graph node to check\n * @return {Boolean} true if node should be treated as pinned; false otherwise.\n */\n function isNodeOriginallyPinned(node) {\n return (node && (node.isPinned || (node.data && node.data.isPinned)));\n }\n\n function getInitializedBody(nodeId) {\n var body = nodeBodies.get(nodeId);\n if (!body) {\n initBody(nodeId);\n body = nodeBodies.get(nodeId);\n }\n return body;\n }\n\n /**\n * Calculates mass of a body, which corresponds to node with given id.\n *\n * @param {String|Number} nodeId identifier of a node, for which body mass needs to be calculated\n * @returns {Number} recommended mass of the body;\n */\n function defaultNodeMass(nodeId) {\n var links = graph.getLinks(nodeId);\n if (!links) return 1;\n return 1 + links.length / 3.0;\n }\n}\n\nfunction noop() { }\n","/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n };\n\n var debounced = function(){\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n \n debounced.flush = function() {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n \n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n","import debounce from 'debounce';\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nvar Prop = function Prop(name, _ref) {\n var _ref$default = _ref[\"default\"],\n defaultVal = _ref$default === void 0 ? null : _ref$default,\n _ref$triggerUpdate = _ref.triggerUpdate,\n triggerUpdate = _ref$triggerUpdate === void 0 ? true : _ref$triggerUpdate,\n _ref$onChange = _ref.onChange,\n onChange = _ref$onChange === void 0 ? function (newVal, state) {} : _ref$onChange;\n\n _classCallCheck(this, Prop);\n\n this.name = name;\n this.defaultVal = defaultVal;\n this.triggerUpdate = triggerUpdate;\n this.onChange = onChange;\n};\n\nfunction index (_ref2) {\n var _ref2$stateInit = _ref2.stateInit,\n stateInit = _ref2$stateInit === void 0 ? function () {\n return {};\n } : _ref2$stateInit,\n _ref2$props = _ref2.props,\n rawProps = _ref2$props === void 0 ? {} : _ref2$props,\n _ref2$methods = _ref2.methods,\n methods = _ref2$methods === void 0 ? {} : _ref2$methods,\n _ref2$aliases = _ref2.aliases,\n aliases = _ref2$aliases === void 0 ? {} : _ref2$aliases,\n _ref2$init = _ref2.init,\n initFn = _ref2$init === void 0 ? function () {} : _ref2$init,\n _ref2$update = _ref2.update,\n updateFn = _ref2$update === void 0 ? function () {} : _ref2$update;\n // Parse props into Prop instances\n var props = Object.keys(rawProps).map(function (propName) {\n return new Prop(propName, rawProps[propName]);\n });\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // Holds component state\n var state = Object.assign({}, stateInit instanceof Function ? stateInit(options) : stateInit, // Support plain objects for backwards compatibility\n {\n initialised: false\n }); // keeps track of which props triggered an update\n\n var changedProps = {}; // Component constructor\n\n function comp(nodeElement) {\n initStatic(nodeElement, options);\n digest();\n return comp;\n }\n\n var initStatic = function initStatic(nodeElement, options) {\n initFn.call(comp, nodeElement, state, options);\n state.initialised = true;\n };\n\n var digest = debounce(function () {\n if (!state.initialised) {\n return;\n }\n\n updateFn.call(comp, state, changedProps);\n changedProps = {};\n }, 1); // Getter/setter methods\n\n props.forEach(function (prop) {\n comp[prop.name] = getSetProp(prop);\n\n function getSetProp(_ref3) {\n var prop = _ref3.name,\n _ref3$triggerUpdate = _ref3.triggerUpdate,\n redigest = _ref3$triggerUpdate === void 0 ? false : _ref3$triggerUpdate,\n _ref3$onChange = _ref3.onChange,\n onChange = _ref3$onChange === void 0 ? function (newVal, state) {} : _ref3$onChange,\n _ref3$defaultVal = _ref3.defaultVal,\n defaultVal = _ref3$defaultVal === void 0 ? null : _ref3$defaultVal;\n return function (_) {\n var curVal = state[prop];\n\n if (!arguments.length) {\n return curVal;\n } // Getter mode\n\n\n var val = _ === undefined ? defaultVal : _; // pick default if value passed is undefined\n\n state[prop] = val;\n onChange.call(comp, val, state, curVal); // track changed props\n\n !changedProps.hasOwnProperty(prop) && (changedProps[prop] = curVal);\n\n if (redigest) {\n digest();\n }\n\n return comp;\n };\n }\n }); // Other methods\n\n Object.keys(methods).forEach(function (methodName) {\n comp[methodName] = function () {\n var _methods$methodName;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return (_methods$methodName = methods[methodName]).call.apply(_methods$methodName, [comp, state].concat(args));\n };\n }); // Link aliases\n\n Object.entries(aliases).forEach(function (_ref4) {\n var _ref5 = _slicedToArray(_ref4, 2),\n alias = _ref5[0],\n target = _ref5[1];\n\n return comp[alias] = comp[target];\n }); // Reset all component props to their default value\n\n comp.resetProps = function () {\n props.forEach(function (prop) {\n comp[prop.name](prop.defaultVal);\n });\n return comp;\n }; //\n\n\n comp.resetProps(); // Apply all prop defaults\n\n state._rerender = digest; // Expose digest method\n\n return comp;\n };\n}\n\nexport default index;\n","var index = (function (p) {\n return p instanceof Function ? p // fn\n : typeof p === 'string' ? function (obj) {\n return obj[p];\n } // property name\n : function (obj) {\n return p;\n };\n}); // constant\n\nexport default index;\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n\n return (hint === \"string\" ? String : Number)(input);\n}\n\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n\n return typeof key === \"symbol\" ? key : String(key);\n}\n\nvar index = (function () {\n var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var keyAccessors = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var multiItem = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var flattenKeys = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var keys = (keyAccessors instanceof Array ? keyAccessors.length ? keyAccessors : [undefined] : [keyAccessors]).map(function (key) {\n return {\n keyAccessor: key,\n isProp: !(key instanceof Function)\n };\n });\n var indexedResult = list.reduce(function (res, item) {\n var iterObj = res;\n var itemVal = item;\n keys.forEach(function (_ref, idx) {\n var keyAccessor = _ref.keyAccessor,\n isProp = _ref.isProp;\n var key;\n\n if (isProp) {\n var _itemVal = itemVal,\n propVal = _itemVal[keyAccessor],\n rest = _objectWithoutProperties(_itemVal, [keyAccessor].map(_toPropertyKey));\n\n key = propVal;\n itemVal = rest;\n } else {\n key = keyAccessor(itemVal, idx);\n }\n\n if (idx + 1 < keys.length) {\n if (!iterObj.hasOwnProperty(key)) {\n iterObj[key] = {};\n }\n\n iterObj = iterObj[key];\n } else {\n // Leaf key\n if (multiItem) {\n if (!iterObj.hasOwnProperty(key)) {\n iterObj[key] = [];\n }\n\n iterObj[key].push(itemVal);\n } else {\n iterObj[key] = itemVal;\n }\n }\n });\n return res;\n }, {});\n\n if (multiItem instanceof Function) {\n // Reduce leaf multiple values\n (function reduce(node) {\n var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n if (level === keys.length) {\n Object.keys(node).forEach(function (k) {\n return node[k] = multiItem(node[k]);\n });\n } else {\n Object.values(node).forEach(function (child) {\n return reduce(child, level + 1);\n });\n }\n })(indexedResult); // IIFE\n\n }\n\n var result = indexedResult;\n\n if (flattenKeys) {\n // flatten into array\n result = [];\n\n (function flatten(node) {\n var accKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n if (accKeys.length === keys.length) {\n result.push({\n keys: accKeys,\n vals: node\n });\n } else {\n Object.entries(node).forEach(function (_ref2) {\n var _ref3 = _slicedToArray(_ref2, 2),\n key = _ref3[0],\n val = _ref3[1];\n\n return flatten(val, [].concat(_toConsumableArray(accKeys), [key]));\n });\n }\n })(indexedResult); //IIFE\n\n\n if (keyAccessors instanceof Array && keyAccessors.length === 0 && result.length === 1) {\n // clear keys if there's no key accessors (single result)\n result[0].keys = [];\n }\n }\n\n return result;\n});\n\nexport default index;\n","import indexBy from 'index-array-by';\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nfunction diffArrays(prev, next, idAccessor) {\n var result = {\n enter: [],\n update: [],\n exit: []\n };\n\n if (!idAccessor) {\n // use object references for comparison\n var prevSet = new Set(prev);\n var nextSet = new Set(next);\n new Set([].concat(_toConsumableArray(prevSet), _toConsumableArray(nextSet))).forEach(function (item) {\n var type = !prevSet.has(item) ? 'enter' : !nextSet.has(item) ? 'exit' : 'update';\n result[type].push(type === 'update' ? [item, item] : item);\n });\n } else {\n // compare by id (duplicate keys are ignored)\n var prevById = indexBy(prev, idAccessor, false);\n var nextById = indexBy(next, idAccessor, false);\n var byId = Object.assign({}, prevById, nextById);\n Object.entries(byId).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n id = _ref2[0],\n item = _ref2[1];\n\n var type = !prevById.hasOwnProperty(id) ? 'enter' : !nextById.hasOwnProperty(id) ? 'exit' : 'update';\n result[type].push(type === 'update' ? [prevById[id], nextById[id]] : item);\n });\n }\n\n return result;\n}\n\nfunction dataBindDiff(data, existingObjs, _ref3) {\n var _ref3$objBindAttr = _ref3.objBindAttr,\n objBindAttr = _ref3$objBindAttr === void 0 ? '__obj' : _ref3$objBindAttr,\n _ref3$dataBindAttr = _ref3.dataBindAttr,\n dataBindAttr = _ref3$dataBindAttr === void 0 ? '__data' : _ref3$dataBindAttr,\n idAccessor = _ref3.idAccessor,\n _ref3$purge = _ref3.purge,\n purge = _ref3$purge === void 0 ? false : _ref3$purge;\n\n var isObjValid = function isObjValid(obj) {\n return obj.hasOwnProperty(dataBindAttr);\n };\n\n var removeObjs = existingObjs.filter(function (obj) {\n return !isObjValid(obj);\n });\n var prevD = existingObjs.filter(isObjValid).map(function (obj) {\n return obj[dataBindAttr];\n });\n var nextD = data;\n var diff = purge ? {\n enter: nextD,\n exit: prevD,\n update: []\n } // don't diff data in purge mode\n : diffArrays(prevD, nextD, idAccessor);\n diff.update = diff.update.map(function (_ref4) {\n var _ref5 = _slicedToArray(_ref4, 2),\n prevD = _ref5[0],\n nextD = _ref5[1];\n\n if (prevD !== nextD) {\n // transfer obj to new data point (if different)\n nextD[objBindAttr] = prevD[objBindAttr];\n nextD[objBindAttr][dataBindAttr] = nextD;\n }\n\n return nextD;\n });\n diff.exit = diff.exit.concat(removeObjs.map(function (obj) {\n return _defineProperty({}, objBindAttr, obj);\n }));\n return diff;\n}\n\nfunction viewDigest(data, existingObjs, // list\nappendObj, // item => {...} function\nremoveObj, // item => {...} function\n_ref7) {\n var _ref7$createObj = _ref7.createObj,\n createObj = _ref7$createObj === void 0 ? function (d) {\n return {};\n } : _ref7$createObj,\n _ref7$updateObj = _ref7.updateObj,\n updateObj = _ref7$updateObj === void 0 ? function (obj, d) {} : _ref7$updateObj,\n _ref7$exitObj = _ref7.exitObj,\n exitObj = _ref7$exitObj === void 0 ? function (obj) {} : _ref7$exitObj,\n _ref7$objBindAttr = _ref7.objBindAttr,\n objBindAttr = _ref7$objBindAttr === void 0 ? '__obj' : _ref7$objBindAttr,\n _ref7$dataBindAttr = _ref7.dataBindAttr,\n dataBindAttr = _ref7$dataBindAttr === void 0 ? '__data' : _ref7$dataBindAttr,\n dataDiffOptions = _objectWithoutProperties(_ref7, [\"createObj\", \"updateObj\", \"exitObj\", \"objBindAttr\", \"dataBindAttr\"]);\n\n var _dataBindDiff = dataBindDiff(data, existingObjs, _objectSpread2({\n objBindAttr: objBindAttr,\n dataBindAttr: dataBindAttr\n }, dataDiffOptions)),\n enter = _dataBindDiff.enter,\n update = _dataBindDiff.update,\n exit = _dataBindDiff.exit; // Remove exiting points\n\n\n exit.forEach(function (d) {\n var obj = d[objBindAttr];\n delete d[objBindAttr]; // unbind obj\n\n exitObj(obj);\n removeObj(obj);\n });\n var newObjs = createObjs(enter);\n var pointsData = [].concat(_toConsumableArray(enter), _toConsumableArray(update));\n updateObjs(pointsData); // Add new points\n\n newObjs.forEach(appendObj); //\n\n function createObjs(data) {\n var newObjs = [];\n data.forEach(function (d) {\n var obj = createObj(d);\n\n if (obj) {\n obj[dataBindAttr] = d;\n d[objBindAttr] = obj;\n newObjs.push(obj);\n }\n });\n return newObjs;\n }\n\n function updateObjs(data) {\n data.forEach(function (d) {\n var obj = d[objBindAttr];\n\n if (obj) {\n obj[dataBindAttr] = d;\n updateObj(obj, d);\n }\n });\n }\n}\n\nexport default viewDigest;\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new Map(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new Map();\n for (const value of _) {\n const key = value + \"\";\n if (index.has(key)) continue;\n index.set(key, domain.push(value));\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","// TinyColor v1.4.2\n// https://github.com/bgrins/TinyColor\n// Brian Grinstead, MIT License\n\n(function(Math) {\n\nvar trimLeft = /^\\s+/,\n trimRight = /\\s+$/,\n tinyCounter = 0,\n mathRound = Math.round,\n mathMin = Math.min,\n mathMax = Math.max,\n mathRandom = Math.random;\n\nfunction tinycolor (color, opts) {\n\n color = (color) ? color : '';\n opts = opts || { };\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n\n var rgb = inputToRGB(color);\n this._originalInput = color,\n this._r = rgb.r,\n this._g = rgb.g,\n this._b = rgb.b,\n this._a = rgb.a,\n this._roundA = mathRound(100*this._a) / 100,\n this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this._r < 1) { this._r = mathRound(this._r); }\n if (this._g < 1) { this._g = mathRound(this._g); }\n if (this._b < 1) { this._b = mathRound(this._b); }\n\n this._ok = rgb.ok;\n this._tc_id = tinyCounter++;\n}\n\ntinycolor.prototype = {\n isDark: function() {\n return this.getBrightness() < 128;\n },\n isLight: function() {\n return !this.isDark();\n },\n isValid: function() {\n return this._ok;\n },\n getOriginalInput: function() {\n return this._originalInput;\n },\n getFormat: function() {\n return this._format;\n },\n getAlpha: function() {\n return this._a;\n },\n getBrightness: function() {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function() {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r/255;\n GsRGB = rgb.g/255;\n BsRGB = rgb.b/255;\n\n if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);}\n if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);}\n if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);}\n return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);\n },\n setAlpha: function(value) {\n this._a = boundAlpha(value);\n this._roundA = mathRound(100*this._a) / 100;\n return this;\n },\n toHsv: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };\n },\n toHsvString: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);\n return (this._a == 1) ?\n \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" :\n \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \"+ this._roundA + \")\";\n },\n toHsl: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };\n },\n toHslString: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);\n return (this._a == 1) ?\n \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" :\n \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \"+ this._roundA + \")\";\n },\n toHex: function(allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function(allow3Char) {\n return '#' + this.toHex(allow3Char);\n },\n toHex8: function(allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function(allow4Char) {\n return '#' + this.toHex8(allow4Char);\n },\n toRgb: function() {\n return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };\n },\n toRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \")\" :\n \"rgba(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function() {\n return { r: mathRound(bound01(this._r, 255) * 100) + \"%\", g: mathRound(bound01(this._g, 255) * 100) + \"%\", b: mathRound(bound01(this._b, 255) * 100) + \"%\", a: this._a };\n },\n toPercentageRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%)\" :\n \"rgba(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function() {\n if (this._a === 0) {\n return \"transparent\";\n }\n\n if (this._a < 1) {\n return false;\n }\n\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function(secondColor) {\n var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n\n return \"progid:DXImageTransform.Microsoft.gradient(\"+gradientType+\"startColorstr=\"+hex8String+\",endColorstr=\"+secondHex8String+\")\";\n },\n toString: function(format) {\n var formatSet = !!format;\n format = format || this._format;\n\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n\n return formattedString || this.toHexString();\n },\n clone: function() {\n return tinycolor(this.toString());\n },\n\n _applyModification: function(fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function() {\n return this._applyModification(lighten, arguments);\n },\n brighten: function() {\n return this._applyModification(brighten, arguments);\n },\n darken: function() {\n return this._applyModification(darken, arguments);\n },\n desaturate: function() {\n return this._applyModification(desaturate, arguments);\n },\n saturate: function() {\n return this._applyModification(saturate, arguments);\n },\n greyscale: function() {\n return this._applyModification(greyscale, arguments);\n },\n spin: function() {\n return this._applyModification(spin, arguments);\n },\n\n _applyCombination: function(fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function() {\n return this._applyCombination(analogous, arguments);\n },\n complement: function() {\n return this._applyCombination(complement, arguments);\n },\n monochromatic: function() {\n return this._applyCombination(monochromatic, arguments);\n },\n splitcomplement: function() {\n return this._applyCombination(splitcomplement, arguments);\n },\n triad: function() {\n return this._applyCombination(triad, arguments);\n },\n tetrad: function() {\n return this._applyCombination(tetrad, arguments);\n }\n};\n\n// If input is an object, force 1 into \"1.0\" to handle ratios properly\n// String input requires \"1.0\" as input, so 1 will be treated as 1\ntinycolor.fromRatio = function(color, opts) {\n if (typeof color == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n }\n else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n\n return tinycolor(color, opts);\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n// \"red\"\n// \"#f00\" or \"f00\"\n// \"#ff0000\" or \"ff0000\"\n// \"#ff000000\" or \"ff000000\"\n// \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n// \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n// \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n// \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n// \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n// \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n// \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n\n var rgb = { r: 0, g: 0, b: 0 };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n\n if (typeof color == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n\n a = boundAlpha(a);\n\n return {\n ok: ok,\n format: color.format || format,\n r: mathMin(255, mathMax(rgb.r, 0)),\n g: mathMin(255, mathMax(rgb.g, 0)),\n b: mathMin(255, mathMax(rgb.b, 0)),\n a: a\n };\n}\n\n\n// Conversion Functions\n// --------------------\n\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// \n\n// `rgbToRgb`\n// Handle bounds / percentage checking to conform to CSS color spec\n// \n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b){\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n}\n\n// `rgbToHsl`\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, l = (max + min) / 2;\n\n if(max == min) {\n h = s = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n\n h /= 6;\n }\n\n return { h: h, s: s, l: l };\n}\n\n// `hslToRgb`\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n var r, g, b;\n\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n\n function hue2rgb(p, q, t) {\n if(t < 0) t += 1;\n if(t > 1) t -= 1;\n if(t < 1/6) return p + (q - p) * 6 * t;\n if(t < 1/2) return q;\n if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n return p;\n }\n\n if(s === 0) {\n r = g = b = l; // achromatic\n }\n else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nfunction rgbToHsv(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, v = max;\n\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n\n if(max == min) {\n h = 0; // achromatic\n }\n else {\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h /= 6;\n }\n return { h: h, s: s, v: v };\n}\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\n function hsvToRgb(h, s, v) {\n\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHex`\n// Converts an RGB color to hex\n// Assumes r, g, and b are contained in the set [0, 255]\n// Returns a 3 or 6 character hex\nfunction rgbToHex(r, g, b, allow3Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// `rgbaToHex`\n// Converts an RGBA color plus alpha transparency to hex\n// Assumes r, g, b are contained in the set [0, 255] and\n// a in [0, 1]. Returns a 4 or 8 character rgba hex\nfunction rgbaToHex(r, g, b, a, allow4Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16)),\n pad2(convertDecimalToHex(a))\n ];\n\n // Return a 4 character hex if possible\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// `rgbaToArgbHex`\n// Converts an RGBA color to an ARGB Hex8 string\n// Rarely used, but required for \"toFilter()\"\nfunction rgbaToArgbHex(r, g, b, a) {\n\n var hex = [\n pad2(convertDecimalToHex(a)),\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n return hex.join(\"\");\n}\n\n// `equals`\n// Can be called with any tinycolor input\ntinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) { return false; }\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n};\n\ntinycolor.random = function() {\n return tinycolor.fromRatio({\n r: mathRandom(),\n g: mathRandom(),\n b: mathRandom()\n });\n};\n\n\n// Modification Functions\n// ----------------------\n// Thanks to less.js for some of the basics here\n// \n\nfunction desaturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction saturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction greyscale(color) {\n return tinycolor(color).desaturate(100);\n}\n\nfunction lighten (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\nfunction brighten(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var rgb = tinycolor(color).toRgb();\n rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));\n rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));\n rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));\n return tinycolor(rgb);\n}\n\nfunction darken (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\n// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n// Values outside of this range will be wrapped into this range.\nfunction spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n}\n\n// Combination Functions\n// ---------------------\n// Thanks to jQuery xColor for some of the ideas behind these\n// \n\nfunction complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n}\n\nfunction triad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction tetrad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),\n tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})\n ];\n}\n\nfunction analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n\n for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n}\n\nfunction monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h, s = hsv.s, v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n\n while (results--) {\n ret.push(tinycolor({ h: h, s: s, v: v}));\n v = (v + modification) % 1;\n }\n\n return ret;\n}\n\n// Utility Functions\n// ---------------------\n\ntinycolor.mix = function(color1, color2, amount) {\n amount = (amount === 0) ? 0 : (amount || 50);\n\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n\n var p = amount / 100;\n\n var rgba = {\n r: ((rgb2.r - rgb1.r) * p) + rgb1.r,\n g: ((rgb2.g - rgb1.g) * p) + rgb1.g,\n b: ((rgb2.b - rgb1.b) * p) + rgb1.b,\n a: ((rgb2.a - rgb1.a) * p) + rgb1.a\n };\n\n return tinycolor(rgba);\n};\n\n\n// Readability Functions\n// ---------------------\n// false\n// tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\ntinycolor.isReadable = function(color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n\n out = false;\n\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n\n};\n\n// `mostReadable`\n// Given a base color and a list of possible foreground or background\n// colors for that base, returns the most readable color.\n// Optionally returns Black or White if the most readable color is unreadable.\n// *Example*\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\ntinycolor.mostReadable = function(baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size ;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors ;\n level = args.level;\n size = args.size;\n\n for (var i= 0; i < colorList.length ; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n\n if (tinycolor.isReadable(baseColor, bestColor, {\"level\":level,\"size\":size}) || !includeFallbackColors) {\n return bestColor;\n }\n else {\n args.includeFallbackColors=false;\n return tinycolor.mostReadable(baseColor,[\"#fff\", \"#000\"],args);\n }\n};\n\n\n// Big List of Colors\n// ------------------\n// \nvar names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n};\n\n// Make it easy to access colors via `hexNames[hex]`\nvar hexNames = tinycolor.hexNames = flip(names);\n\n\n// Utilities\n// ---------\n\n// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\nfunction flip(o) {\n var flipped = { };\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n}\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n a = parseFloat(a);\n\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n\n return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n if (isOnePointZero(n)) { n = \"100%\"; }\n\n var processPercent = isPercentage(n);\n n = mathMin(max, mathMax(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if ((Math.abs(n - max) < 0.000001)) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return (n % max) / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n return mathMin(1, mathMax(0, val));\n}\n\n// Parse a base-16 hex value into a base-10 integer\nfunction parseIntFromHex(val) {\n return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// \nfunction isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n return typeof n === \"string\" && n.indexOf('%') != -1;\n}\n\n// Force a hex value to have 2 characters\nfunction pad2(c) {\n return c.length == 1 ? '0' + c : '' + c;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n if (n <= 1) {\n n = (n * 100) + \"%\";\n }\n\n return n;\n}\n\n// Converts a decimal to a hex value\nfunction convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n// Converts a hex value to a decimal\nfunction convertHexToDecimal(h) {\n return (parseIntFromHex(h) / 255);\n}\n\nvar matchers = (function() {\n\n // \n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // \n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n})();\n\n// `isValidCSSUnit`\n// Take in a single string / number and check to see if it looks like a CSS unit\n// (see `matchers` above for definition).\nfunction isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n}\n\n// `stringInputToObject`\n// Permissive string parsing. Take in a number of formats, and output an object\n// based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\nfunction stringInputToObject(color) {\n\n color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n }\n else if (color == 'transparent') {\n return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if ((match = matchers.rgb.exec(color))) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n if ((match = matchers.rgba.exec(color))) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n if ((match = matchers.hsl.exec(color))) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n if ((match = matchers.hsla.exec(color))) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n if ((match = matchers.hsv.exec(color))) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n if ((match = matchers.hsva.exec(color))) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n if ((match = matchers.hex8.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex6.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if ((match = matchers.hex4.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n a: convertHexToDecimal(match[4] + '' + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex3.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n\n return false;\n}\n\nfunction validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\"level\":\"AA\", \"size\":\"small\"};\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return {\"level\":level, \"size\":size};\n}\n\n// Node: Export function\nif (typeof module !== \"undefined\" && module.exports) {\n module.exports = tinycolor;\n}\n// AMD/requirejs: Define the module\nelse if (typeof define === 'function' && define.amd) {\n define(function () {return tinycolor;});\n}\n// Browser: Expose to window\nelse {\n window.tinycolor = tinycolor;\n}\n\n})(Math);\n","import { Group, Mesh, MeshLambertMaterial, Color, BufferGeometry, BufferAttribute, Matrix4, Vector3, SphereBufferGeometry, CylinderBufferGeometry, TubeBufferGeometry, ConeBufferGeometry, Line, LineBasicMaterial, QuadraticBezierCurve3, CubicBezierCurve3, Box3 } from 'three';\nimport { forceSimulation, forceLink, forceManyBody, forceCenter, forceRadial } from 'd3-force-3d';\nimport graph from 'ngraph.graph';\nimport forcelayout from 'ngraph.forcelayout';\nimport Kapsule from 'kapsule';\nimport accessorFn from 'accessor-fn';\nimport { min, max } from 'd3-array';\nimport dataJoint from 'data-joint';\nimport { scaleOrdinal } from 'd3-scale';\nimport { schemePaired } from 'd3-scale-chromatic';\nimport tinyColor from 'tinycolor2';\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar materialDispose = function materialDispose(material) {\n if (material instanceof Array) {\n material.forEach(materialDispose);\n } else {\n if (material.map) {\n material.map.dispose();\n }\n\n material.dispose();\n }\n};\n\nvar deallocate = function deallocate(obj) {\n if (obj.geometry) {\n obj.geometry.dispose();\n }\n\n if (obj.material) {\n materialDispose(obj.material);\n }\n\n if (obj.texture) {\n obj.texture.dispose();\n }\n\n if (obj.children) {\n obj.children.forEach(deallocate);\n }\n};\n\nvar emptyObject = function emptyObject(obj) {\n while (obj.children.length) {\n var childObj = obj.children[0];\n obj.remove(childObj);\n deallocate(childObj);\n }\n};\n\nvar _excluded = [\"objFilter\"];\n\nfunction threeDigest(data, scene) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n var _ref$objFilter = _ref.objFilter,\n objFilter = _ref$objFilter === void 0 ? function () {\n return true;\n } : _ref$objFilter,\n options = _objectWithoutProperties(_ref, _excluded);\n\n return dataJoint(data, scene.children.filter(objFilter), function (obj) {\n return scene.add(obj);\n }, function (obj) {\n scene.remove(obj);\n emptyObject(obj);\n }, _objectSpread2({\n objBindAttr: '__threeObj'\n }, options));\n}\n\nvar colorStr2Hex = function colorStr2Hex(str) {\n return isNaN(str) ? parseInt(tinyColor(str).toHex(), 16) : str;\n};\n\nvar colorAlpha = function colorAlpha(str) {\n return isNaN(str) ? tinyColor(str).getAlpha() : 1;\n};\n\nvar autoColorScale = scaleOrdinal(schemePaired); // Autoset attribute colorField by colorByAccessor property\n// If an object has already a color, don't set it\n// Objects can be nodes or links\n\nfunction autoColorObjects(objects, colorByAccessor, colorField) {\n if (!colorByAccessor || typeof colorField !== 'string') return;\n objects.filter(function (obj) {\n return !obj[colorField];\n }).forEach(function (obj) {\n obj[colorField] = autoColorScale(colorByAccessor(obj));\n });\n}\n\nfunction getDagDepths (_ref, idAccessor) {\n var nodes = _ref.nodes,\n links = _ref.links;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$nodeFilter = _ref2.nodeFilter,\n nodeFilter = _ref2$nodeFilter === void 0 ? function () {\n return true;\n } : _ref2$nodeFilter,\n _ref2$onLoopError = _ref2.onLoopError,\n onLoopError = _ref2$onLoopError === void 0 ? function (loopIds) {\n throw \"Invalid DAG structure! Found cycle in node path: \".concat(loopIds.join(' -> '), \".\");\n } : _ref2$onLoopError;\n\n // linked graph\n var graph = {};\n nodes.forEach(function (node) {\n return graph[idAccessor(node)] = {\n data: node,\n out: [],\n depth: -1,\n skip: !nodeFilter(node)\n };\n });\n links.forEach(function (_ref3) {\n var source = _ref3.source,\n target = _ref3.target;\n var sourceId = getNodeId(source);\n var targetId = getNodeId(target);\n if (!graph.hasOwnProperty(sourceId)) throw \"Missing source node with id: \".concat(sourceId);\n if (!graph.hasOwnProperty(targetId)) throw \"Missing target node with id: \".concat(targetId);\n var sourceNode = graph[sourceId];\n var targetNode = graph[targetId];\n sourceNode.out.push(targetNode);\n\n function getNodeId(node) {\n return _typeof(node) === 'object' ? idAccessor(node) : node;\n }\n });\n var foundLoops = [];\n traverse(Object.values(graph));\n var nodeDepths = Object.assign.apply(Object, [{}].concat(_toConsumableArray(Object.entries(graph).filter(function (_ref4) {\n var _ref5 = _slicedToArray(_ref4, 2),\n node = _ref5[1];\n\n return !node.skip;\n }).map(function (_ref6) {\n var _ref7 = _slicedToArray(_ref6, 2),\n id = _ref7[0],\n node = _ref7[1];\n\n return _defineProperty({}, id, node.depth);\n }))));\n return nodeDepths;\n\n function traverse(nodes) {\n var nodeStack = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var currentDepth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n for (var i = 0, l = nodes.length; i < l; i++) {\n var node = nodes[i];\n\n if (nodeStack.indexOf(node) !== -1) {\n var _ret = function () {\n var loop = [].concat(_toConsumableArray(nodeStack.slice(nodeStack.indexOf(node))), [node]).map(function (d) {\n return idAccessor(d.data);\n });\n\n if (!foundLoops.some(function (foundLoop) {\n return foundLoop.length === loop.length && foundLoop.every(function (id, idx) {\n return id === loop[idx];\n });\n })) {\n foundLoops.push(loop);\n onLoopError(loop);\n }\n\n return \"continue\";\n }();\n\n if (_ret === \"continue\") continue;\n }\n\n if (currentDepth > node.depth) {\n // Don't unnecessarily revisit chunks of the graph\n node.depth = currentDepth;\n traverse(node.out, [].concat(_toConsumableArray(nodeStack), [node]), currentDepth + (node.skip ? 0 : 1));\n }\n }\n }\n}\n\nvar three$1 = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n Group: Group,\n Mesh: Mesh,\n MeshLambertMaterial: MeshLambertMaterial,\n Color: Color,\n BufferGeometry: BufferGeometry,\n BufferAttribute: BufferAttribute,\n Matrix4: Matrix4,\n Vector3: Vector3,\n SphereBufferGeometry: SphereBufferGeometry,\n CylinderBufferGeometry: CylinderBufferGeometry,\n TubeBufferGeometry: TubeBufferGeometry,\n ConeBufferGeometry: ConeBufferGeometry,\n Line: Line,\n LineBasicMaterial: LineBasicMaterial,\n QuadraticBezierCurve3: QuadraticBezierCurve3,\n CubicBezierCurve3: CubicBezierCurve3,\n Box3: Box3\n};\nvar ngraph = {\n graph: graph,\n forcelayout: forcelayout\n};\n\nvar DAG_LEVEL_NODE_RATIO = 2; // support multiple method names for backwards threejs compatibility\n\nvar setAttributeFn = new three$1.BufferGeometry().setAttribute ? 'setAttribute' : 'addAttribute';\nvar applyMatrix4Fn = new three$1.BufferGeometry().applyMatrix4 ? 'applyMatrix4' : 'applyMatrix';\nvar ForceGraph = Kapsule({\n props: {\n jsonUrl: {\n onChange: function onChange(jsonUrl, state) {\n var _this = this;\n\n if (jsonUrl && !state.fetchingJson) {\n // Load data asynchronously\n state.fetchingJson = true;\n state.onLoading();\n fetch(jsonUrl).then(function (r) {\n return r.json();\n }).then(function (json) {\n state.fetchingJson = false;\n state.onFinishLoading(json);\n\n _this.graphData(json);\n });\n }\n },\n triggerUpdate: false\n },\n graphData: {\n \"default\": {\n nodes: [],\n links: []\n },\n onChange: function onChange(graphData, state) {\n state.engineRunning = false; // Pause simulation immediately\n }\n },\n numDimensions: {\n \"default\": 3,\n onChange: function onChange(numDim, state) {\n var chargeForce = state.d3ForceLayout.force('charge'); // Increase repulsion on 3D mode for improved spatial separation\n\n if (chargeForce) {\n chargeForce.strength(numDim > 2 ? -60 : -30);\n }\n\n if (numDim < 3) {\n eraseDimension(state.graphData.nodes, 'z');\n }\n\n if (numDim < 2) {\n eraseDimension(state.graphData.nodes, 'y');\n }\n\n function eraseDimension(nodes, dim) {\n nodes.forEach(function (d) {\n delete d[dim]; // position\n\n delete d[\"v\".concat(dim)]; // velocity\n });\n }\n }\n },\n dagMode: {\n onChange: function onChange(dagMode, state) {\n // td, bu, lr, rl, zin, zout, radialin, radialout\n !dagMode && state.forceEngine === 'd3' && (state.graphData.nodes || []).forEach(function (n) {\n return n.fx = n.fy = n.fz = undefined;\n }); // unfix nodes when disabling dag mode\n }\n },\n dagLevelDistance: {},\n dagNodeFilter: {\n \"default\": function _default(node) {\n return true;\n }\n },\n onDagError: {\n triggerUpdate: false\n },\n nodeRelSize: {\n \"default\": 4\n },\n // volume per val unit\n nodeId: {\n \"default\": 'id'\n },\n nodeVal: {\n \"default\": 'val'\n },\n nodeResolution: {\n \"default\": 8\n },\n // how many slice segments in the sphere's circumference\n nodeColor: {\n \"default\": 'color'\n },\n nodeAutoColorBy: {},\n nodeOpacity: {\n \"default\": 0.75\n },\n nodeVisibility: {\n \"default\": true\n },\n nodeThreeObject: {},\n nodeThreeObjectExtend: {\n \"default\": false\n },\n linkSource: {\n \"default\": 'source'\n },\n linkTarget: {\n \"default\": 'target'\n },\n linkVisibility: {\n \"default\": true\n },\n linkColor: {\n \"default\": 'color'\n },\n linkAutoColorBy: {},\n linkOpacity: {\n \"default\": 0.2\n },\n linkWidth: {},\n // Rounded to nearest decimal. For falsy values use dimensionless line with 1px regardless of distance.\n linkResolution: {\n \"default\": 6\n },\n // how many radial segments in each line tube's geometry\n linkCurvature: {\n \"default\": 0,\n triggerUpdate: false\n },\n // line curvature radius (0: straight, 1: semi-circle)\n linkCurveRotation: {\n \"default\": 0,\n triggerUpdate: false\n },\n // line curve rotation along the line axis (0: interection with XY plane, PI: upside down)\n linkMaterial: {},\n linkThreeObject: {},\n linkThreeObjectExtend: {\n \"default\": false\n },\n linkPositionUpdate: {\n triggerUpdate: false\n },\n // custom function to call for updating the link's position. Signature: (threeObj, { start: { x, y, z}, end: { x, y, z }}, link). If the function returns a truthy value, the regular link position update will not run.\n linkDirectionalArrowLength: {\n \"default\": 0\n },\n linkDirectionalArrowColor: {},\n linkDirectionalArrowRelPos: {\n \"default\": 0.5,\n triggerUpdate: false\n },\n // value between 0<>1 indicating the relative pos along the (exposed) line\n linkDirectionalArrowResolution: {\n \"default\": 8\n },\n // how many slice segments in the arrow's conic circumference\n linkDirectionalParticles: {\n \"default\": 0\n },\n // animate photons travelling in the link direction\n linkDirectionalParticleSpeed: {\n \"default\": 0.01,\n triggerUpdate: false\n },\n // in link length ratio per frame\n linkDirectionalParticleWidth: {\n \"default\": 0.5\n },\n linkDirectionalParticleColor: {},\n linkDirectionalParticleResolution: {\n \"default\": 4\n },\n // how many slice segments in the particle sphere's circumference\n forceEngine: {\n \"default\": 'd3'\n },\n // d3 or ngraph\n d3AlphaMin: {\n \"default\": 0\n },\n d3AlphaDecay: {\n \"default\": 0.0228,\n triggerUpdate: false,\n onChange: function onChange(alphaDecay, state) {\n state.d3ForceLayout.alphaDecay(alphaDecay);\n }\n },\n d3AlphaTarget: {\n \"default\": 0,\n triggerUpdate: false,\n onChange: function onChange(alphaTarget, state) {\n state.d3ForceLayout.alphaTarget(alphaTarget);\n }\n },\n d3VelocityDecay: {\n \"default\": 0.4,\n triggerUpdate: false,\n onChange: function onChange(velocityDecay, state) {\n state.d3ForceLayout.velocityDecay(velocityDecay);\n }\n },\n ngraphPhysics: {\n \"default\": {\n // defaults from https://github.com/anvaka/ngraph.physics.simulator/blob/master/index.js\n timeStep: 20,\n gravity: -1.2,\n theta: 0.8,\n springLength: 30,\n springCoefficient: 0.0008,\n dragCoefficient: 0.02\n }\n },\n warmupTicks: {\n \"default\": 0,\n triggerUpdate: false\n },\n // how many times to tick the force engine at init before starting to render\n cooldownTicks: {\n \"default\": Infinity,\n triggerUpdate: false\n },\n cooldownTime: {\n \"default\": 15000,\n triggerUpdate: false\n },\n // ms\n onLoading: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onFinishLoading: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onUpdate: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onFinishUpdate: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onEngineTick: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onEngineStop: {\n \"default\": function _default() {},\n triggerUpdate: false\n }\n },\n methods: {\n refresh: function refresh(state) {\n state._flushObjects = true;\n\n state._rerender();\n\n return this;\n },\n // Expose d3 forces for external manipulation\n d3Force: function d3Force(state, forceName, forceFn) {\n if (forceFn === undefined) {\n return state.d3ForceLayout.force(forceName); // Force getter\n }\n\n state.d3ForceLayout.force(forceName, forceFn); // Force setter\n\n return this;\n },\n d3ReheatSimulation: function d3ReheatSimulation(state) {\n state.d3ForceLayout.alpha(1);\n this.resetCountdown();\n return this;\n },\n // reset cooldown state\n resetCountdown: function resetCountdown(state) {\n state.cntTicks = 0;\n state.startTickTime = new Date();\n state.engineRunning = true;\n return this;\n },\n tickFrame: function tickFrame(state) {\n var isD3Sim = state.forceEngine !== 'ngraph';\n\n if (state.engineRunning) {\n layoutTick();\n }\n\n updateArrows();\n updatePhotons();\n return this; //\n\n function layoutTick() {\n if (++state.cntTicks > state.cooldownTicks || new Date() - state.startTickTime > state.cooldownTime || isD3Sim && state.d3AlphaMin > 0 && state.d3ForceLayout.alpha() < state.d3AlphaMin) {\n state.engineRunning = false; // Stop ticking graph\n\n state.onEngineStop();\n } else {\n state.layout[isD3Sim ? 'tick' : 'step'](); // Tick it\n\n state.onEngineTick();\n } // Update nodes position\n\n\n state.graphData.nodes.forEach(function (node) {\n var obj = node.__threeObj;\n if (!obj) return;\n var pos = isD3Sim ? node : state.layout.getNodePosition(node[state.nodeId]);\n obj.position.x = pos.x;\n obj.position.y = pos.y || 0;\n obj.position.z = pos.z || 0;\n }); // Update links position\n\n var linkWidthAccessor = accessorFn(state.linkWidth);\n var linkCurvatureAccessor = accessorFn(state.linkCurvature);\n var linkCurveRotationAccessor = accessorFn(state.linkCurveRotation);\n var linkThreeObjectExtendAccessor = accessorFn(state.linkThreeObjectExtend);\n state.graphData.links.forEach(function (link) {\n var lineObj = link.__lineObj;\n if (!lineObj) return;\n var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id);\n var start = pos[isD3Sim ? 'source' : 'from'];\n var end = pos[isD3Sim ? 'target' : 'to'];\n if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link\n\n calcLinkCurve(link); // calculate link curve for all links, including custom replaced, so it can be used in directional functionality\n\n var extendedObj = linkThreeObjectExtendAccessor(link);\n\n if (state.linkPositionUpdate && state.linkPositionUpdate(extendedObj ? lineObj.children[1] : lineObj, // pass child custom object if extending the default\n {\n start: {\n x: start.x,\n y: start.y,\n z: start.z\n },\n end: {\n x: end.x,\n y: end.y,\n z: end.z\n }\n }, link) && !extendedObj) {\n // exit if successfully custom updated position of non-extended obj\n return;\n }\n\n var curveResolution = 30; // # line segments\n\n var curve = link.__curve; // select default line obj if it's an extended group\n\n var line = lineObj.children.length ? lineObj.children[0] : lineObj;\n\n if (line.type === 'Line') {\n // Update line geometry\n if (!curve) {\n // straight line\n var linePos = line.geometry.getAttribute('position');\n\n if (!linePos || !linePos.array || linePos.array.length !== 6) {\n line.geometry[setAttributeFn]('position', linePos = new three$1.BufferAttribute(new Float32Array(2 * 3), 3));\n }\n\n linePos.array[0] = start.x;\n linePos.array[1] = start.y || 0;\n linePos.array[2] = start.z || 0;\n linePos.array[3] = end.x;\n linePos.array[4] = end.y || 0;\n linePos.array[5] = end.z || 0;\n linePos.needsUpdate = true;\n } else {\n // bezier curve line\n line.geometry.setFromPoints(curve.getPoints(curveResolution));\n }\n\n line.geometry.computeBoundingSphere();\n } else if (line.type === 'Mesh') {\n // Update cylinder geometry\n if (!curve) {\n // straight tube\n if (!line.geometry.type.match(/^Cylinder(Buffer)?Geometry$/)) {\n var linkWidth = Math.ceil(linkWidthAccessor(link) * 10) / 10;\n var r = linkWidth / 2;\n var geometry = new three$1.CylinderBufferGeometry(r, r, 1, state.linkResolution, 1, false);\n geometry[applyMatrix4Fn](new three$1.Matrix4().makeTranslation(0, 1 / 2, 0));\n geometry[applyMatrix4Fn](new three$1.Matrix4().makeRotationX(Math.PI / 2));\n line.geometry.dispose();\n line.geometry = geometry;\n }\n\n var vStart = new three$1.Vector3(start.x, start.y || 0, start.z || 0);\n var vEnd = new three$1.Vector3(end.x, end.y || 0, end.z || 0);\n var distance = vStart.distanceTo(vEnd);\n line.position.x = vStart.x;\n line.position.y = vStart.y;\n line.position.z = vStart.z;\n line.scale.z = distance;\n line.parent.localToWorld(vEnd); // lookAt requires world coords\n\n line.lookAt(vEnd);\n } else {\n // curved tube\n if (!line.geometry.type.match(/^Tube(Buffer)?Geometry$/)) {\n // reset object positioning\n line.position.set(0, 0, 0);\n line.rotation.set(0, 0, 0);\n line.scale.set(1, 1, 1);\n }\n\n var _linkWidth = Math.ceil(linkWidthAccessor(link) * 10) / 10;\n\n var _r = _linkWidth / 2;\n\n var _geometry = new three$1.TubeBufferGeometry(curve, curveResolution, _r, state.linkResolution, false);\n\n line.geometry.dispose();\n line.geometry = _geometry;\n }\n }\n }); //\n\n function calcLinkCurve(link) {\n var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id);\n var start = pos[isD3Sim ? 'source' : 'from'];\n var end = pos[isD3Sim ? 'target' : 'to'];\n if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link\n\n var curvature = linkCurvatureAccessor(link);\n\n if (!curvature) {\n link.__curve = null; // Straight line\n } else {\n // bezier curve line (only for line types)\n var vStart = new three$1.Vector3(start.x, start.y || 0, start.z || 0);\n var vEnd = new three$1.Vector3(end.x, end.y || 0, end.z || 0);\n var l = vStart.distanceTo(vEnd); // line length\n\n var curve;\n var curveRotation = linkCurveRotationAccessor(link);\n\n if (l > 0) {\n var dx = end.x - start.x;\n var dy = end.y - start.y || 0;\n var vLine = new three$1.Vector3().subVectors(vEnd, vStart);\n var cp = vLine.clone().multiplyScalar(curvature).cross(dx !== 0 || dy !== 0 ? new three$1.Vector3(0, 0, 1) : new three$1.Vector3(0, 1, 0)) // avoid cross-product of parallel vectors (prefer Z, fallback to Y)\n .applyAxisAngle(vLine.normalize(), curveRotation) // rotate along line axis according to linkCurveRotation\n .add(new three$1.Vector3().addVectors(vStart, vEnd).divideScalar(2));\n curve = new three$1.QuadraticBezierCurve3(vStart, cp, vEnd);\n } else {\n // Same point, draw a loop\n var d = curvature * 70;\n var endAngle = -curveRotation; // Rotate clockwise (from Z angle perspective)\n\n var startAngle = endAngle + Math.PI / 2;\n curve = new three$1.CubicBezierCurve3(vStart, new three$1.Vector3(d * Math.cos(startAngle), d * Math.sin(startAngle), 0).add(vStart), new three$1.Vector3(d * Math.cos(endAngle), d * Math.sin(endAngle), 0).add(vStart), vEnd);\n }\n\n link.__curve = curve;\n }\n }\n }\n\n function updateArrows() {\n // update link arrow position\n var arrowRelPosAccessor = accessorFn(state.linkDirectionalArrowRelPos);\n var arrowLengthAccessor = accessorFn(state.linkDirectionalArrowLength);\n var nodeValAccessor = accessorFn(state.nodeVal);\n state.graphData.links.forEach(function (link) {\n var arrowObj = link.__arrowObj;\n if (!arrowObj) return;\n var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id);\n var start = pos[isD3Sim ? 'source' : 'from'];\n var end = pos[isD3Sim ? 'target' : 'to'];\n if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link\n\n var startR = Math.sqrt(Math.max(0, nodeValAccessor(start) || 1)) * state.nodeRelSize;\n var endR = Math.sqrt(Math.max(0, nodeValAccessor(end) || 1)) * state.nodeRelSize;\n var arrowLength = arrowLengthAccessor(link);\n var arrowRelPos = arrowRelPosAccessor(link);\n var getPosAlongLine = link.__curve ? function (t) {\n return link.__curve.getPoint(t);\n } // interpolate along bezier curve\n : function (t) {\n // straight line: interpolate linearly\n var iplt = function iplt(dim, start, end, t) {\n return start[dim] + (end[dim] - start[dim]) * t || 0;\n };\n\n return {\n x: iplt('x', start, end, t),\n y: iplt('y', start, end, t),\n z: iplt('z', start, end, t)\n };\n };\n var lineLen = link.__curve ? link.__curve.getLength() : Math.sqrt(['x', 'y', 'z'].map(function (dim) {\n return Math.pow((end[dim] || 0) - (start[dim] || 0), 2);\n }).reduce(function (acc, v) {\n return acc + v;\n }, 0));\n var posAlongLine = startR + arrowLength + (lineLen - startR - endR - arrowLength) * arrowRelPos;\n var arrowHead = getPosAlongLine(posAlongLine / lineLen);\n var arrowTail = getPosAlongLine((posAlongLine - arrowLength) / lineLen);\n ['x', 'y', 'z'].forEach(function (dim) {\n return arrowObj.position[dim] = arrowTail[dim];\n });\n\n var headVec = _construct(three$1.Vector3, _toConsumableArray(['x', 'y', 'z'].map(function (c) {\n return arrowHead[c];\n })));\n\n arrowObj.parent.localToWorld(headVec); // lookAt requires world coords\n\n arrowObj.lookAt(headVec);\n });\n }\n\n function updatePhotons() {\n // update link particle positions\n var particleSpeedAccessor = accessorFn(state.linkDirectionalParticleSpeed);\n state.graphData.links.forEach(function (link) {\n var cyclePhotons = link.__photonsObj && link.__photonsObj.children;\n var singleHopPhotons = link.__singleHopPhotonsObj && link.__singleHopPhotonsObj.children;\n if ((!singleHopPhotons || !singleHopPhotons.length) && (!cyclePhotons || !cyclePhotons.length)) return;\n var pos = isD3Sim ? link : state.layout.getLinkPosition(state.layout.graph.getLink(link.source, link.target).id);\n var start = pos[isD3Sim ? 'source' : 'from'];\n var end = pos[isD3Sim ? 'target' : 'to'];\n if (!start || !end || !start.hasOwnProperty('x') || !end.hasOwnProperty('x')) return; // skip invalid link\n\n var particleSpeed = particleSpeedAccessor(link);\n var getPhotonPos = link.__curve ? function (t) {\n return link.__curve.getPoint(t);\n } // interpolate along bezier curve\n : function (t) {\n // straight line: interpolate linearly\n var iplt = function iplt(dim, start, end, t) {\n return start[dim] + (end[dim] - start[dim]) * t || 0;\n };\n\n return {\n x: iplt('x', start, end, t),\n y: iplt('y', start, end, t),\n z: iplt('z', start, end, t)\n };\n };\n var photons = [].concat(_toConsumableArray(cyclePhotons || []), _toConsumableArray(singleHopPhotons || []));\n photons.forEach(function (photon, idx) {\n var singleHop = photon.parent.__linkThreeObjType === 'singleHopPhotons';\n\n if (!photon.hasOwnProperty('__progressRatio')) {\n photon.__progressRatio = singleHop ? 0 : idx / cyclePhotons.length;\n }\n\n photon.__progressRatio += particleSpeed;\n\n if (photon.__progressRatio >= 1) {\n if (!singleHop) {\n photon.__progressRatio = photon.__progressRatio % 1;\n } else {\n // remove particle\n photon.parent.remove(photon);\n emptyObject(photon);\n return;\n }\n }\n\n var photonPosRatio = photon.__progressRatio;\n var pos = getPhotonPos(photonPosRatio);\n ['x', 'y', 'z'].forEach(function (dim) {\n return photon.position[dim] = pos[dim];\n });\n });\n });\n }\n },\n emitParticle: function emitParticle(state, link) {\n if (link) {\n if (!link.__singleHopPhotonsObj) {\n var obj = new three$1.Group();\n obj.__linkThreeObjType = 'singleHopPhotons';\n link.__singleHopPhotonsObj = obj;\n state.graphScene.add(obj);\n }\n\n var particleWidthAccessor = accessorFn(state.linkDirectionalParticleWidth);\n var photonR = Math.ceil(particleWidthAccessor(link) * 10) / 10 / 2;\n var numSegments = state.linkDirectionalParticleResolution;\n var particleGeometry = new three$1.SphereBufferGeometry(photonR, numSegments, numSegments);\n var linkColorAccessor = accessorFn(state.linkColor);\n var particleColorAccessor = accessorFn(state.linkDirectionalParticleColor);\n var photonColor = particleColorAccessor(link) || linkColorAccessor(link) || '#f0f0f0';\n var materialColor = new three$1.Color(colorStr2Hex(photonColor));\n var opacity = state.linkOpacity * 3;\n var particleMaterial = new three$1.MeshLambertMaterial({\n color: materialColor,\n transparent: true,\n opacity: opacity\n }); // add a single hop particle\n\n link.__singleHopPhotonsObj.add(new three$1.Mesh(particleGeometry, particleMaterial));\n }\n\n return this;\n },\n getGraphBbox: function getGraphBbox(state) {\n var nodeFilter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {\n return true;\n };\n if (!state.initialised) return null; // recursively collect all nested geometries bboxes\n\n var bboxes = function getBboxes(obj) {\n var bboxes = [];\n\n if (obj.geometry) {\n obj.geometry.computeBoundingBox();\n var box = new three$1.Box3();\n box.copy(obj.geometry.boundingBox).applyMatrix4(obj.matrixWorld);\n bboxes.push(box);\n }\n\n return bboxes.concat.apply(bboxes, _toConsumableArray((obj.children || []).filter(function (obj) {\n return !obj.hasOwnProperty('__graphObjType') || obj.__graphObjType === 'node' && nodeFilter(obj.__data);\n } // exclude filtered out nodes\n ).map(getBboxes)));\n }(state.graphScene);\n\n if (!bboxes.length) return null; // extract global x,y,z min/max\n\n return Object.assign.apply(Object, _toConsumableArray(['x', 'y', 'z'].map(function (c) {\n return _defineProperty({}, c, [min(bboxes, function (bb) {\n return bb.min[c];\n }), max(bboxes, function (bb) {\n return bb.max[c];\n })]);\n })));\n }\n },\n stateInit: function stateInit() {\n return {\n d3ForceLayout: forceSimulation().force('link', forceLink()).force('charge', forceManyBody()).force('center', forceCenter()).force('dagRadial', null).stop(),\n engineRunning: false\n };\n },\n init: function init(threeObj, state) {\n // Main three object to manipulate\n state.graphScene = threeObj;\n },\n update: function update(state, changedProps) {\n var hasAnyPropChanged = function hasAnyPropChanged(propList) {\n return propList.some(function (p) {\n return changedProps.hasOwnProperty(p);\n });\n };\n\n state.engineRunning = false; // pause simulation\n\n state.onUpdate();\n\n if (state.nodeAutoColorBy !== null && hasAnyPropChanged(['nodeAutoColorBy', 'graphData', 'nodeColor'])) {\n // Auto add color to uncolored nodes\n autoColorObjects(state.graphData.nodes, accessorFn(state.nodeAutoColorBy), state.nodeColor);\n }\n\n if (state.linkAutoColorBy !== null && hasAnyPropChanged(['linkAutoColorBy', 'graphData', 'linkColor'])) {\n // Auto add color to uncolored links\n autoColorObjects(state.graphData.links, accessorFn(state.linkAutoColorBy), state.linkColor);\n } // Digest nodes WebGL objects\n\n\n if (state._flushObjects || hasAnyPropChanged(['graphData', 'nodeThreeObject', 'nodeThreeObjectExtend', 'nodeVal', 'nodeColor', 'nodeVisibility', 'nodeRelSize', 'nodeResolution', 'nodeOpacity'])) {\n var customObjectAccessor = accessorFn(state.nodeThreeObject);\n var customObjectExtendAccessor = accessorFn(state.nodeThreeObjectExtend);\n var valAccessor = accessorFn(state.nodeVal);\n var colorAccessor = accessorFn(state.nodeColor);\n var visibilityAccessor = accessorFn(state.nodeVisibility);\n var sphereGeometries = {}; // indexed by node value\n\n var sphereMaterials = {}; // indexed by color\n\n threeDigest(state.graphData.nodes.filter(visibilityAccessor), state.graphScene, {\n purge: state._flushObjects || hasAnyPropChanged([// recreate objects if any of these props have changed\n 'nodeThreeObject', 'nodeThreeObjectExtend']),\n objFilter: function objFilter(obj) {\n return obj.__graphObjType === 'node';\n },\n createObj: function createObj(node) {\n var customObj = customObjectAccessor(node);\n var extendObj = customObjectExtendAccessor(node);\n\n if (customObj && state.nodeThreeObject === customObj) {\n // clone object if it's a shared object among all nodes\n customObj = customObj.clone();\n }\n\n var obj;\n\n if (customObj && !extendObj) {\n obj = customObj;\n } else {\n // Add default object (sphere mesh)\n obj = new three$1.Mesh();\n obj.__graphDefaultObj = true;\n\n if (customObj && extendObj) {\n obj.add(customObj); // extend default with custom\n }\n }\n\n obj.__graphObjType = 'node'; // Add object type\n\n return obj;\n },\n updateObj: function updateObj(obj, node) {\n if (obj.__graphDefaultObj) {\n // bypass internal updates for custom node objects\n var val = valAccessor(node) || 1;\n var radius = Math.cbrt(val) * state.nodeRelSize;\n var numSegments = state.nodeResolution;\n\n if (!obj.geometry.type.match(/^Sphere(Buffer)?Geometry$/) || obj.geometry.parameters.radius !== radius || obj.geometry.parameters.widthSegments !== numSegments) {\n if (!sphereGeometries.hasOwnProperty(val)) {\n sphereGeometries[val] = new three$1.SphereBufferGeometry(radius, numSegments, numSegments);\n }\n\n obj.geometry.dispose();\n obj.geometry = sphereGeometries[val];\n }\n\n var color = colorAccessor(node);\n var materialColor = new three$1.Color(colorStr2Hex(color || '#ffffaa'));\n var opacity = state.nodeOpacity * colorAlpha(color);\n\n if (obj.material.type !== 'MeshLambertMaterial' || !obj.material.color.equals(materialColor) || obj.material.opacity !== opacity) {\n if (!sphereMaterials.hasOwnProperty(color)) {\n sphereMaterials[color] = new three$1.MeshLambertMaterial({\n color: materialColor,\n transparent: true,\n opacity: opacity\n });\n }\n\n obj.material.dispose();\n obj.material = sphereMaterials[color];\n }\n }\n }\n });\n } // Digest links WebGL objects\n\n\n if (state._flushObjects || hasAnyPropChanged(['graphData', 'linkThreeObject', 'linkThreeObjectExtend', 'linkMaterial', 'linkColor', 'linkWidth', 'linkVisibility', 'linkResolution', 'linkOpacity', 'linkDirectionalArrowLength', 'linkDirectionalArrowColor', 'linkDirectionalArrowResolution', 'linkDirectionalParticles', 'linkDirectionalParticleWidth', 'linkDirectionalParticleColor', 'linkDirectionalParticleResolution'])) {\n var _customObjectAccessor = accessorFn(state.linkThreeObject);\n\n var _customObjectExtendAccessor = accessorFn(state.linkThreeObjectExtend);\n\n var customMaterialAccessor = accessorFn(state.linkMaterial);\n\n var _visibilityAccessor = accessorFn(state.linkVisibility);\n\n var _colorAccessor = accessorFn(state.linkColor);\n\n var widthAccessor = accessorFn(state.linkWidth);\n var cylinderGeometries = {}; // indexed by link width\n\n var lambertLineMaterials = {}; // for cylinder objects, indexed by link color\n\n var basicLineMaterials = {}; // for line objects, indexed by link color\n\n var visibleLinks = state.graphData.links.filter(_visibilityAccessor); // lines digest cycle\n\n threeDigest(visibleLinks, state.graphScene, {\n objBindAttr: '__lineObj',\n purge: state._flushObjects || hasAnyPropChanged([// recreate objects if any of these props have changed\n 'linkThreeObject', 'linkThreeObjectExtend', 'linkWidth']),\n objFilter: function objFilter(obj) {\n return obj.__graphObjType === 'link';\n },\n createObj: function createObj(link) {\n var customObj = _customObjectAccessor(link);\n\n var extendObj = _customObjectExtendAccessor(link);\n\n if (customObj && state.linkThreeObject === customObj) {\n // clone object if it's a shared object among all links\n customObj = customObj.clone();\n }\n\n var defaultObj;\n\n if (!customObj || extendObj) {\n // construct default line obj\n var useCylinder = !!widthAccessor(link);\n\n if (useCylinder) {\n defaultObj = new three$1.Mesh();\n } else {\n // Use plain line (constant width)\n var lineGeometry = new three$1.BufferGeometry();\n lineGeometry[setAttributeFn]('position', new three$1.BufferAttribute(new Float32Array(2 * 3), 3));\n defaultObj = new three$1.Line(lineGeometry);\n }\n }\n\n var obj;\n\n if (!customObj) {\n obj = defaultObj;\n obj.__graphDefaultObj = true;\n } else {\n if (!extendObj) {\n // use custom object\n obj = customObj;\n } else {\n // extend default with custom in a group\n obj = new three$1.Group();\n obj.__graphDefaultObj = true;\n obj.add(defaultObj);\n obj.add(customObj);\n }\n }\n\n obj.renderOrder = 10; // Prevent visual glitches of dark lines on top of nodes by rendering them last\n\n obj.__graphObjType = 'link'; // Add object type\n\n return obj;\n },\n updateObj: function updateObj(updObj, link) {\n if (updObj.__graphDefaultObj) {\n // bypass internal updates for custom link objects\n // select default object if it's an extended group\n var obj = updObj.children.length ? updObj.children[0] : updObj;\n var linkWidth = Math.ceil(widthAccessor(link) * 10) / 10;\n var useCylinder = !!linkWidth;\n\n if (useCylinder) {\n var r = linkWidth / 2;\n var numSegments = state.linkResolution;\n\n if (!obj.geometry.type.match(/^Cylinder(Buffer)?Geometry$/) || obj.geometry.parameters.radiusTop !== r || obj.geometry.parameters.radialSegments !== numSegments) {\n if (!cylinderGeometries.hasOwnProperty(linkWidth)) {\n var geometry = new three$1.CylinderBufferGeometry(r, r, 1, numSegments, 1, false);\n geometry[applyMatrix4Fn](new three$1.Matrix4().makeTranslation(0, 1 / 2, 0));\n geometry[applyMatrix4Fn](new three$1.Matrix4().makeRotationX(Math.PI / 2));\n cylinderGeometries[linkWidth] = geometry;\n }\n\n obj.geometry.dispose();\n obj.geometry = cylinderGeometries[linkWidth];\n }\n }\n\n var customMaterial = customMaterialAccessor(link);\n\n if (customMaterial) {\n obj.material = customMaterial;\n } else {\n var color = _colorAccessor(link);\n\n var materialColor = new three$1.Color(colorStr2Hex(color || '#f0f0f0'));\n var opacity = state.linkOpacity * colorAlpha(color);\n var materialType = useCylinder ? 'MeshLambertMaterial' : 'LineBasicMaterial';\n\n if (obj.material.type !== materialType || !obj.material.color.equals(materialColor) || obj.material.opacity !== opacity) {\n var lineMaterials = useCylinder ? lambertLineMaterials : basicLineMaterials;\n\n if (!lineMaterials.hasOwnProperty(color)) {\n lineMaterials[color] = new three$1[materialType]({\n color: materialColor,\n transparent: opacity < 1,\n opacity: opacity,\n depthWrite: opacity >= 1 // Prevent transparency issues\n\n });\n }\n\n obj.material.dispose();\n obj.material = lineMaterials[color];\n }\n }\n }\n }\n }); // Arrows digest cycle\n\n if (state.linkDirectionalArrowLength || changedProps.hasOwnProperty('linkDirectionalArrowLength')) {\n var arrowLengthAccessor = accessorFn(state.linkDirectionalArrowLength);\n var arrowColorAccessor = accessorFn(state.linkDirectionalArrowColor);\n threeDigest(visibleLinks.filter(arrowLengthAccessor), state.graphScene, {\n objBindAttr: '__arrowObj',\n objFilter: function objFilter(obj) {\n return obj.__linkThreeObjType === 'arrow';\n },\n createObj: function createObj() {\n var obj = new three$1.Mesh(undefined, new three$1.MeshLambertMaterial({\n transparent: true\n }));\n obj.__linkThreeObjType = 'arrow'; // Add object type\n\n return obj;\n },\n updateObj: function updateObj(obj, link) {\n var arrowLength = arrowLengthAccessor(link);\n var numSegments = state.linkDirectionalArrowResolution;\n\n if (!obj.geometry.type.match(/^Cone(Buffer)?Geometry$/) || obj.geometry.parameters.height !== arrowLength || obj.geometry.parameters.radialSegments !== numSegments) {\n var coneGeometry = new three$1.ConeBufferGeometry(arrowLength * 0.25, arrowLength, numSegments); // Correct orientation\n\n coneGeometry.translate(0, arrowLength / 2, 0);\n coneGeometry.rotateX(Math.PI / 2);\n obj.geometry.dispose();\n obj.geometry = coneGeometry;\n }\n\n obj.material.color = new three$1.Color(arrowColorAccessor(link) || _colorAccessor(link) || '#f0f0f0');\n obj.material.opacity = state.linkOpacity * 3;\n }\n });\n } // Photon particles digest cycle\n\n\n if (state.linkDirectionalParticles || changedProps.hasOwnProperty('linkDirectionalParticles')) {\n var particlesAccessor = accessorFn(state.linkDirectionalParticles);\n var particleWidthAccessor = accessorFn(state.linkDirectionalParticleWidth);\n var particleColorAccessor = accessorFn(state.linkDirectionalParticleColor);\n var particleMaterials = {}; // indexed by link color\n\n var particleGeometries = {}; // indexed by particle width\n\n threeDigest(visibleLinks.filter(particlesAccessor), state.graphScene, {\n objBindAttr: '__photonsObj',\n objFilter: function objFilter(obj) {\n return obj.__linkThreeObjType === 'photons';\n },\n createObj: function createObj() {\n var obj = new three$1.Group();\n obj.__linkThreeObjType = 'photons'; // Add object type\n\n return obj;\n },\n updateObj: function updateObj(obj, link) {\n var numPhotons = Math.round(Math.abs(particlesAccessor(link)));\n var curPhoton = !!obj.children.length && obj.children[0];\n var photonR = Math.ceil(particleWidthAccessor(link) * 10) / 10 / 2;\n var numSegments = state.linkDirectionalParticleResolution;\n var particleGeometry;\n\n if (curPhoton && curPhoton.geometry.parameters.radius === photonR && curPhoton.geometry.parameters.widthSegments === numSegments) {\n particleGeometry = curPhoton.geometry;\n } else {\n if (!particleGeometries.hasOwnProperty(photonR)) {\n particleGeometries[photonR] = new three$1.SphereBufferGeometry(photonR, numSegments, numSegments);\n }\n\n particleGeometry = particleGeometries[photonR];\n curPhoton && curPhoton.geometry.dispose();\n }\n\n var photonColor = particleColorAccessor(link) || _colorAccessor(link) || '#f0f0f0';\n var materialColor = new three$1.Color(colorStr2Hex(photonColor));\n var opacity = state.linkOpacity * 3;\n var particleMaterial;\n\n if (curPhoton && curPhoton.material.color.equals(materialColor) && curPhoton.material.opacity === opacity) {\n particleMaterial = curPhoton.material;\n } else {\n if (!particleMaterials.hasOwnProperty(photonColor)) {\n particleMaterials[photonColor] = new three$1.MeshLambertMaterial({\n color: materialColor,\n transparent: true,\n opacity: opacity\n });\n }\n\n particleMaterial = particleMaterials[photonColor];\n curPhoton && curPhoton.material.dispose();\n } // digest cycle for each photon\n\n\n threeDigest(_toConsumableArray(new Array(numPhotons)).map(function (_, idx) {\n return {\n idx: idx\n };\n }), obj, {\n idAccessor: function idAccessor(d) {\n return d.idx;\n },\n createObj: function createObj() {\n return new three$1.Mesh(particleGeometry, particleMaterial);\n },\n updateObj: function updateObj(obj) {\n obj.geometry = particleGeometry;\n obj.material = particleMaterial;\n }\n });\n }\n });\n }\n }\n\n state._flushObjects = false; // reset objects refresh flag\n // simulation engine\n\n if (hasAnyPropChanged(['graphData', 'nodeId', 'linkSource', 'linkTarget', 'numDimensions', 'forceEngine', 'dagMode', 'dagNodeFilter', 'dagLevelDistance'])) {\n state.engineRunning = false; // Pause simulation\n // parse links\n\n state.graphData.links.forEach(function (link) {\n link.source = link[state.linkSource];\n link.target = link[state.linkTarget];\n }); // Feed data to force-directed layout\n\n var isD3Sim = state.forceEngine !== 'ngraph';\n var layout;\n\n if (isD3Sim) {\n // D3-force\n (layout = state.d3ForceLayout).stop().alpha(1) // re-heat the simulation\n .numDimensions(state.numDimensions).nodes(state.graphData.nodes); // add links (if link force is still active)\n\n var linkForce = state.d3ForceLayout.force('link');\n\n if (linkForce) {\n linkForce.id(function (d) {\n return d[state.nodeId];\n }).links(state.graphData.links);\n } // setup dag force constraints\n\n\n var nodeDepths = state.dagMode && getDagDepths(state.graphData, function (node) {\n return node[state.nodeId];\n }, {\n nodeFilter: state.dagNodeFilter,\n onLoopError: state.onDagError || undefined\n });\n var maxDepth = Math.max.apply(Math, _toConsumableArray(Object.values(nodeDepths || [])));\n var dagLevelDistance = state.dagLevelDistance || state.graphData.nodes.length / (maxDepth || 1) * DAG_LEVEL_NODE_RATIO * (['radialin', 'radialout'].indexOf(state.dagMode) !== -1 ? 0.7 : 1); // Fix nodes to x,y,z for dag mode\n\n if (state.dagMode) {\n var getFFn = function getFFn(fix, invert) {\n return function (node) {\n return !fix ? undefined : (nodeDepths[node[state.nodeId]] - maxDepth / 2) * dagLevelDistance * (invert ? -1 : 1);\n };\n };\n\n var fxFn = getFFn(['lr', 'rl'].indexOf(state.dagMode) !== -1, state.dagMode === 'rl');\n var fyFn = getFFn(['td', 'bu'].indexOf(state.dagMode) !== -1, state.dagMode === 'td');\n var fzFn = getFFn(['zin', 'zout'].indexOf(state.dagMode) !== -1, state.dagMode === 'zout');\n state.graphData.nodes.filter(state.dagNodeFilter).forEach(function (node) {\n node.fx = fxFn(node);\n node.fy = fyFn(node);\n node.fz = fzFn(node);\n });\n } // Use radial force for radial dags\n\n\n state.d3ForceLayout.force('dagRadial', ['radialin', 'radialout'].indexOf(state.dagMode) !== -1 ? forceRadial(function (node) {\n var nodeDepth = nodeDepths[node[state.nodeId]] || -1;\n return (state.dagMode === 'radialin' ? maxDepth - nodeDepth : nodeDepth) * dagLevelDistance;\n }).strength(function (node) {\n return state.dagNodeFilter(node) ? 1 : 0;\n }) : null);\n } else {\n // ngraph\n var _graph = ngraph.graph();\n\n state.graphData.nodes.forEach(function (node) {\n _graph.addNode(node[state.nodeId]);\n });\n state.graphData.links.forEach(function (link) {\n _graph.addLink(link.source, link.target);\n });\n layout = ngraph.forcelayout(_graph, _objectSpread2({\n dimensions: state.numDimensions\n }, state.ngraphPhysics));\n layout.graph = _graph; // Attach graph reference to layout\n }\n\n for (var i = 0; i < state.warmupTicks && !(isD3Sim && state.d3AlphaMin > 0 && state.d3ForceLayout.alpha() < state.d3AlphaMin); i++) {\n layout[isD3Sim ? \"tick\" : \"step\"]();\n } // Initial ticks before starting to render\n\n\n state.layout = layout;\n this.resetCountdown();\n }\n\n state.engineRunning = true; // resume simulation\n\n state.onFinishUpdate();\n }\n});\n\nfunction fromKapsule (kapsule) {\n var baseClass = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Object;\n var initKapsuleWithSelf = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var FromKapsule = /*#__PURE__*/function (_baseClass) {\n _inherits(FromKapsule, _baseClass);\n\n var _super = _createSuper(FromKapsule);\n\n function FromKapsule() {\n var _this;\n\n _classCallCheck(this, FromKapsule);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n _this.__kapsuleInstance = kapsule().apply(void 0, [].concat(_toConsumableArray(initKapsuleWithSelf ? [_assertThisInitialized(_this)] : []), args));\n return _this;\n }\n\n return FromKapsule;\n }(baseClass); // attach kapsule props/methods to class prototype\n\n\n Object.keys(kapsule()).forEach(function (m) {\n return FromKapsule.prototype[m] = function () {\n var _this$__kapsuleInstan;\n\n var returnVal = (_this$__kapsuleInstan = this.__kapsuleInstance)[m].apply(_this$__kapsuleInstan, arguments);\n\n return returnVal === this.__kapsuleInstance ? this // chain based on this class, not the kapsule obj\n : returnVal;\n };\n });\n return FromKapsule;\n}\n\nvar three = window.THREE ? window.THREE : {\n Group: Group\n}; // Prefer consumption from global THREE, if exists\nvar threeForcegraph = fromKapsule(ForceGraph, three.Group, true);\n\nexport default threeForcegraph;\n","import {\n\tEventDispatcher,\n\tMOUSE,\n\tQuaternion,\n\tVector2,\n\tVector3\n} from \"../../../build/three.module.js\";\n\nvar TrackballControls = function ( object, domElement ) {\n\n\tif ( domElement === undefined ) console.warn( 'THREE.TrackballControls: The second parameter \"domElement\" is now mandatory.' );\n\tif ( domElement === document ) console.error( 'THREE.TrackballControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.' );\n\n\tvar scope = this;\n\tvar STATE = { NONE: - 1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4 };\n\n\tthis.object = object;\n\tthis.domElement = domElement;\n\n\t// API\n\n\tthis.enabled = true;\n\n\tthis.screen = { left: 0, top: 0, width: 0, height: 0 };\n\n\tthis.rotateSpeed = 1.0;\n\tthis.zoomSpeed = 1.2;\n\tthis.panSpeed = 0.3;\n\n\tthis.noRotate = false;\n\tthis.noZoom = false;\n\tthis.noPan = false;\n\n\tthis.staticMoving = false;\n\tthis.dynamicDampingFactor = 0.2;\n\n\tthis.minDistance = 0;\n\tthis.maxDistance = Infinity;\n\n\tthis.keys = [ 65 /*A*/, 83 /*S*/, 68 /*D*/ ];\n\n\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.ZOOM, RIGHT: MOUSE.PAN };\n\n\t// internals\n\n\tthis.target = new Vector3();\n\n\tvar EPS = 0.000001;\n\n\tvar lastPosition = new Vector3();\n\tvar lastZoom = 1;\n\n\tvar _state = STATE.NONE,\n\t\t_keyState = STATE.NONE,\n\n\t\t_eye = new Vector3(),\n\n\t\t_movePrev = new Vector2(),\n\t\t_moveCurr = new Vector2(),\n\n\t\t_lastAxis = new Vector3(),\n\t\t_lastAngle = 0,\n\n\t\t_zoomStart = new Vector2(),\n\t\t_zoomEnd = new Vector2(),\n\n\t\t_touchZoomDistanceStart = 0,\n\t\t_touchZoomDistanceEnd = 0,\n\n\t\t_panStart = new Vector2(),\n\t\t_panEnd = new Vector2();\n\n\t// for reset\n\n\tthis.target0 = this.target.clone();\n\tthis.position0 = this.object.position.clone();\n\tthis.up0 = this.object.up.clone();\n\tthis.zoom0 = this.object.zoom;\n\n\t// events\n\n\tvar changeEvent = { type: 'change' };\n\tvar startEvent = { type: 'start' };\n\tvar endEvent = { type: 'end' };\n\n\n\t// methods\n\n\tthis.handleResize = function () {\n\n\t\tvar box = scope.domElement.getBoundingClientRect();\n\t\t// adjustments come from similar code in the jquery offset() function\n\t\tvar d = scope.domElement.ownerDocument.documentElement;\n\t\tscope.screen.left = box.left + window.pageXOffset - d.clientLeft;\n\t\tscope.screen.top = box.top + window.pageYOffset - d.clientTop;\n\t\tscope.screen.width = box.width;\n\t\tscope.screen.height = box.height;\n\n\t};\n\n\tvar getMouseOnScreen = ( function () {\n\n\t\tvar vector = new Vector2();\n\n\t\treturn function getMouseOnScreen( pageX, pageY ) {\n\n\t\t\tvector.set(\n\t\t\t\t( pageX - scope.screen.left ) / scope.screen.width,\n\t\t\t\t( pageY - scope.screen.top ) / scope.screen.height\n\t\t\t);\n\n\t\t\treturn vector;\n\n\t\t};\n\n\t}() );\n\n\tvar getMouseOnCircle = ( function () {\n\n\t\tvar vector = new Vector2();\n\n\t\treturn function getMouseOnCircle( pageX, pageY ) {\n\n\t\t\tvector.set(\n\t\t\t\t( ( pageX - scope.screen.width * 0.5 - scope.screen.left ) / ( scope.screen.width * 0.5 ) ),\n\t\t\t\t( ( scope.screen.height + 2 * ( scope.screen.top - pageY ) ) / scope.screen.width ) // screen.width intentional\n\t\t\t);\n\n\t\t\treturn vector;\n\n\t\t};\n\n\t}() );\n\n\tthis.rotateCamera = ( function () {\n\n\t\tvar axis = new Vector3(),\n\t\t\tquaternion = new Quaternion(),\n\t\t\teyeDirection = new Vector3(),\n\t\t\tobjectUpDirection = new Vector3(),\n\t\t\tobjectSidewaysDirection = new Vector3(),\n\t\t\tmoveDirection = new Vector3(),\n\t\t\tangle;\n\n\t\treturn function rotateCamera() {\n\n\t\t\tmoveDirection.set( _moveCurr.x - _movePrev.x, _moveCurr.y - _movePrev.y, 0 );\n\t\t\tangle = moveDirection.length();\n\n\t\t\tif ( angle ) {\n\n\t\t\t\t_eye.copy( scope.object.position ).sub( scope.target );\n\n\t\t\t\teyeDirection.copy( _eye ).normalize();\n\t\t\t\tobjectUpDirection.copy( scope.object.up ).normalize();\n\t\t\t\tobjectSidewaysDirection.crossVectors( objectUpDirection, eyeDirection ).normalize();\n\n\t\t\t\tobjectUpDirection.setLength( _moveCurr.y - _movePrev.y );\n\t\t\t\tobjectSidewaysDirection.setLength( _moveCurr.x - _movePrev.x );\n\n\t\t\t\tmoveDirection.copy( objectUpDirection.add( objectSidewaysDirection ) );\n\n\t\t\t\taxis.crossVectors( moveDirection, _eye ).normalize();\n\n\t\t\t\tangle *= scope.rotateSpeed;\n\t\t\t\tquaternion.setFromAxisAngle( axis, angle );\n\n\t\t\t\t_eye.applyQuaternion( quaternion );\n\t\t\t\tscope.object.up.applyQuaternion( quaternion );\n\n\t\t\t\t_lastAxis.copy( axis );\n\t\t\t\t_lastAngle = angle;\n\n\t\t\t} else if ( ! scope.staticMoving && _lastAngle ) {\n\n\t\t\t\t_lastAngle *= Math.sqrt( 1.0 - scope.dynamicDampingFactor );\n\t\t\t\t_eye.copy( scope.object.position ).sub( scope.target );\n\t\t\t\tquaternion.setFromAxisAngle( _lastAxis, _lastAngle );\n\t\t\t\t_eye.applyQuaternion( quaternion );\n\t\t\t\tscope.object.up.applyQuaternion( quaternion );\n\n\t\t\t}\n\n\t\t\t_movePrev.copy( _moveCurr );\n\n\t\t};\n\n\t}() );\n\n\n\tthis.zoomCamera = function () {\n\n\t\tvar factor;\n\n\t\tif ( _state === STATE.TOUCH_ZOOM_PAN ) {\n\n\t\t\tfactor = _touchZoomDistanceStart / _touchZoomDistanceEnd;\n\t\t\t_touchZoomDistanceStart = _touchZoomDistanceEnd;\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t_eye.multiplyScalar( factor );\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\tscope.object.zoom *= factor;\n\t\t\t\tscope.object.updateProjectionMatrix();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfactor = 1.0 + ( _zoomEnd.y - _zoomStart.y ) * scope.zoomSpeed;\n\n\t\t\tif ( factor !== 1.0 && factor > 0.0 ) {\n\n\t\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t\t_eye.multiplyScalar( factor );\n\n\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\tscope.object.zoom /= factor;\n\t\t\t\t\tscope.object.updateProjectionMatrix();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( scope.staticMoving ) {\n\n\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t} else {\n\n\t\t\t\t_zoomStart.y += ( _zoomEnd.y - _zoomStart.y ) * this.dynamicDampingFactor;\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.panCamera = ( function () {\n\n\t\tvar mouseChange = new Vector2(),\n\t\t\tobjectUp = new Vector3(),\n\t\t\tpan = new Vector3();\n\n\t\treturn function panCamera() {\n\n\t\t\tmouseChange.copy( _panEnd ).sub( _panStart );\n\n\t\t\tif ( mouseChange.lengthSq() ) {\n\n\t\t\t\tif ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\tvar scale_x = ( scope.object.right - scope.object.left ) / scope.object.zoom / scope.domElement.clientWidth;\n\t\t\t\t\tvar scale_y = ( scope.object.top - scope.object.bottom ) / scope.object.zoom / scope.domElement.clientWidth;\n\n\t\t\t\t\tmouseChange.x *= scale_x;\n\t\t\t\t\tmouseChange.y *= scale_y;\n\n\t\t\t\t}\n\n\t\t\t\tmouseChange.multiplyScalar( _eye.length() * scope.panSpeed );\n\n\t\t\t\tpan.copy( _eye ).cross( scope.object.up ).setLength( mouseChange.x );\n\t\t\t\tpan.add( objectUp.copy( scope.object.up ).setLength( mouseChange.y ) );\n\n\t\t\t\tscope.object.position.add( pan );\n\t\t\t\tscope.target.add( pan );\n\n\t\t\t\tif ( scope.staticMoving ) {\n\n\t\t\t\t\t_panStart.copy( _panEnd );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_panStart.add( mouseChange.subVectors( _panEnd, _panStart ).multiplyScalar( scope.dynamicDampingFactor ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() );\n\n\tthis.checkDistances = function () {\n\n\t\tif ( ! scope.noZoom || ! scope.noPan ) {\n\n\t\t\tif ( _eye.lengthSq() > scope.maxDistance * scope.maxDistance ) {\n\n\t\t\t\tscope.object.position.addVectors( scope.target, _eye.setLength( scope.maxDistance ) );\n\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t}\n\n\t\t\tif ( _eye.lengthSq() < scope.minDistance * scope.minDistance ) {\n\n\t\t\t\tscope.object.position.addVectors( scope.target, _eye.setLength( scope.minDistance ) );\n\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.update = function () {\n\n\t\t_eye.subVectors( scope.object.position, scope.target );\n\n\t\tif ( ! scope.noRotate ) {\n\n\t\t\tscope.rotateCamera();\n\n\t\t}\n\n\t\tif ( ! scope.noZoom ) {\n\n\t\t\tscope.zoomCamera();\n\n\t\t}\n\n\t\tif ( ! scope.noPan ) {\n\n\t\t\tscope.panCamera();\n\n\t\t}\n\n\t\tscope.object.position.addVectors( scope.target, _eye );\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscope.checkDistances();\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tif ( lastPosition.distanceToSquared( scope.object.position ) > EPS ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\n\t\t\t}\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tif ( lastPosition.distanceToSquared( scope.object.position ) > EPS || lastZoom !== scope.object.zoom ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\tlastZoom = scope.object.zoom;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t}\n\n\t};\n\n\tthis.reset = function () {\n\n\t\t_state = STATE.NONE;\n\t\t_keyState = STATE.NONE;\n\n\t\tscope.target.copy( scope.target0 );\n\t\tscope.object.position.copy( scope.position0 );\n\t\tscope.object.up.copy( scope.up0 );\n\t\tscope.object.zoom = scope.zoom0;\n\n\t\tscope.object.updateProjectionMatrix();\n\n\t\t_eye.subVectors( scope.object.position, scope.target );\n\n\t\tscope.object.lookAt( scope.target );\n\n\t\tscope.dispatchEvent( changeEvent );\n\n\t\tlastPosition.copy( scope.object.position );\n\t\tlastZoom = scope.object.zoom;\n\n\t};\n\n\t// listeners\n\n\tfunction onPointerDown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseDown( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onPointerMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseMove( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onPointerUp( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseUp( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction keydown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\twindow.removeEventListener( 'keydown', keydown );\n\n\t\tif ( _keyState !== STATE.NONE ) {\n\n\t\t\treturn;\n\n\t\t} else if ( event.keyCode === scope.keys[ STATE.ROTATE ] && ! scope.noRotate ) {\n\n\t\t\t_keyState = STATE.ROTATE;\n\n\t\t} else if ( event.keyCode === scope.keys[ STATE.ZOOM ] && ! scope.noZoom ) {\n\n\t\t\t_keyState = STATE.ZOOM;\n\n\t\t} else if ( event.keyCode === scope.keys[ STATE.PAN ] && ! scope.noPan ) {\n\n\t\t\t_keyState = STATE.PAN;\n\n\t\t}\n\n\t}\n\n\tfunction keyup() {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\t_keyState = STATE.NONE;\n\n\t\twindow.addEventListener( 'keydown', keydown, false );\n\n\t}\n\n\tfunction onMouseDown( event ) {\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tif ( _state === STATE.NONE ) {\n\n\t\t\tswitch ( event.button ) {\n\n\t\t\t\tcase scope.mouseButtons.LEFT:\n\t\t\t\t\t_state = STATE.ROTATE;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.mouseButtons.MIDDLE:\n\t\t\t\t\t_state = STATE.ZOOM;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.mouseButtons.RIGHT:\n\t\t\t\t\t_state = STATE.PAN;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t_state = STATE.NONE;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar state = ( _keyState !== STATE.NONE ) ? _keyState : _state;\n\n\t\tif ( state === STATE.ROTATE && ! scope.noRotate ) {\n\n\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\t\t\t_movePrev.copy( _moveCurr );\n\n\t\t} else if ( state === STATE.ZOOM && ! scope.noZoom ) {\n\n\t\t\t_zoomStart.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\t\t\t_zoomEnd.copy( _zoomStart );\n\n\t\t} else if ( state === STATE.PAN && ! scope.noPan ) {\n\n\t\t\t_panStart.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\t\t\t_panEnd.copy( _panStart );\n\n\t\t}\n\n\t\tscope.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove, false );\n\t\tscope.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp, false );\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t}\n\n\tfunction onMouseMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tvar state = ( _keyState !== STATE.NONE ) ? _keyState : _state;\n\n\t\tif ( state === STATE.ROTATE && ! scope.noRotate ) {\n\n\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\n\t\t} else if ( state === STATE.ZOOM && ! scope.noZoom ) {\n\n\t\t\t_zoomEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t\t} else if ( state === STATE.PAN && ! scope.noPan ) {\n\n\t\t\t_panEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t\t}\n\n\t}\n\n\tfunction onMouseUp( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\t_state = STATE.NONE;\n\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove );\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction mousewheel( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tif ( scope.noZoom === true ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tswitch ( event.deltaMode ) {\n\n\t\t\tcase 2:\n\t\t\t\t// Zoom in pages\n\t\t\t\t_zoomStart.y -= event.deltaY * 0.025;\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\t// Zoom in lines\n\t\t\t\t_zoomStart.y -= event.deltaY * 0.01;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t// undefined, 0, assume pixels\n\t\t\t\t_zoomStart.y -= event.deltaY * 0.00025;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tscope.dispatchEvent( startEvent );\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction touchstart( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\n\t\t\t\t_state = STATE.TOUCH_ROTATE;\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) );\n\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\tbreak;\n\n\t\t\tdefault: // 2 or more\n\t\t\t\t_state = STATE.TOUCH_ZOOM_PAN;\n\t\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\t\t\t\t_touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\t\tvar x = ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ) / 2;\n\t\t\t\tvar y = ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ) / 2;\n\t\t\t\t_panStart.copy( getMouseOnScreen( x, y ) );\n\t\t\t\t_panEnd.copy( _panStart );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t}\n\n\tfunction touchmove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\n\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) );\n\t\t\t\tbreak;\n\n\t\t\tdefault: // 2 or more\n\t\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\t\t\t\t_touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\t\tvar x = ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ) / 2;\n\t\t\t\tvar y = ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ) / 2;\n\t\t\t\t_panEnd.copy( getMouseOnScreen( x, y ) );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction touchend( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 0:\n\t\t\t\t_state = STATE.NONE;\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\t_state = STATE.TOUCH_ROTATE;\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) );\n\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction contextmenu( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t}\n\n\tthis.dispose = function () {\n\n\t\tscope.domElement.removeEventListener( 'contextmenu', contextmenu, false );\n\n\t\tscope.domElement.removeEventListener( 'pointerdown', onPointerDown, false );\n\t\tscope.domElement.removeEventListener( 'wheel', mousewheel, false );\n\n\t\tscope.domElement.removeEventListener( 'touchstart', touchstart, false );\n\t\tscope.domElement.removeEventListener( 'touchend', touchend, false );\n\t\tscope.domElement.removeEventListener( 'touchmove', touchmove, false );\n\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove, false );\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp, false );\n\n\t\twindow.removeEventListener( 'keydown', keydown, false );\n\t\twindow.removeEventListener( 'keyup', keyup, false );\n\n\t};\n\n\tthis.domElement.addEventListener( 'contextmenu', contextmenu, false );\n\n\tthis.domElement.addEventListener( 'pointerdown', onPointerDown, false );\n\tthis.domElement.addEventListener( 'wheel', mousewheel, false );\n\n\tthis.domElement.addEventListener( 'touchstart', touchstart, false );\n\tthis.domElement.addEventListener( 'touchend', touchend, false );\n\tthis.domElement.addEventListener( 'touchmove', touchmove, false );\n\n\tthis.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove, false );\n\tthis.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp, false );\n\n\twindow.addEventListener( 'keydown', keydown, false );\n\twindow.addEventListener( 'keyup', keyup, false );\n\n\tthis.handleResize();\n\n\t// force an update at start\n\tthis.update();\n\n};\n\nTrackballControls.prototype = Object.create( EventDispatcher.prototype );\nTrackballControls.prototype.constructor = TrackballControls;\n\nexport { TrackballControls };\n","import {\n\tEventDispatcher,\n\tMOUSE,\n\tQuaternion,\n\tSpherical,\n\tTOUCH,\n\tVector2,\n\tVector3\n} from \"../../../build/three.module.js\";\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n// Orbit - left mouse / touch: one-finger move\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n\nvar OrbitControls = function ( object, domElement ) {\n\n\tif ( domElement === undefined ) console.warn( 'THREE.OrbitControls: The second parameter \"domElement\" is now mandatory.' );\n\tif ( domElement === document ) console.error( 'THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.' );\n\n\tthis.object = object;\n\tthis.domElement = domElement;\n\n\t// Set to false to disable this control\n\tthis.enabled = true;\n\n\t// \"target\" sets the location of focus, where the object orbits around\n\tthis.target = new Vector3();\n\n\t// How far you can dolly in and out ( PerspectiveCamera only )\n\tthis.minDistance = 0;\n\tthis.maxDistance = Infinity;\n\n\t// How far you can zoom in and out ( OrthographicCamera only )\n\tthis.minZoom = 0;\n\tthis.maxZoom = Infinity;\n\n\t// How far you can orbit vertically, upper and lower limits.\n\t// Range is 0 to Math.PI radians.\n\tthis.minPolarAngle = 0; // radians\n\tthis.maxPolarAngle = Math.PI; // radians\n\n\t// How far you can orbit horizontally, upper and lower limits.\n\t// If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI )\n\tthis.minAzimuthAngle = - Infinity; // radians\n\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t// Set to true to enable damping (inertia)\n\t// If damping is enabled, you must call controls.update() in your animation loop\n\tthis.enableDamping = false;\n\tthis.dampingFactor = 0.05;\n\n\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t// Set to false to disable zooming\n\tthis.enableZoom = true;\n\tthis.zoomSpeed = 1.0;\n\n\t// Set to false to disable rotating\n\tthis.enableRotate = true;\n\tthis.rotateSpeed = 1.0;\n\n\t// Set to false to disable panning\n\tthis.enablePan = true;\n\tthis.panSpeed = 1.0;\n\tthis.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up\n\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\n\t// Set to true to automatically rotate around the target\n\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\tthis.autoRotate = false;\n\tthis.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n\t// Set to false to disable use of the keys\n\tthis.enableKeys = true;\n\n\t// The four arrow keys\n\tthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n\t// Mouse buttons\n\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n\t// Touch fingers\n\tthis.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };\n\n\t// for reset\n\tthis.target0 = this.target.clone();\n\tthis.position0 = this.object.position.clone();\n\tthis.zoom0 = this.object.zoom;\n\n\t//\n\t// public methods\n\t//\n\n\tthis.getPolarAngle = function () {\n\n\t\treturn spherical.phi;\n\n\t};\n\n\tthis.getAzimuthalAngle = function () {\n\n\t\treturn spherical.theta;\n\n\t};\n\n\tthis.saveState = function () {\n\n\t\tscope.target0.copy( scope.target );\n\t\tscope.position0.copy( scope.object.position );\n\t\tscope.zoom0 = scope.object.zoom;\n\n\t};\n\n\tthis.reset = function () {\n\n\t\tscope.target.copy( scope.target0 );\n\t\tscope.object.position.copy( scope.position0 );\n\t\tscope.object.zoom = scope.zoom0;\n\n\t\tscope.object.updateProjectionMatrix();\n\t\tscope.dispatchEvent( changeEvent );\n\n\t\tscope.update();\n\n\t\tstate = STATE.NONE;\n\n\t};\n\n\t// this method is exposed, but perhaps it would be better if we can make it private...\n\tthis.update = function () {\n\n\t\tvar offset = new Vector3();\n\n\t\t// so camera.up is the orbit axis\n\t\tvar quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );\n\t\tvar quatInverse = quat.clone().invert();\n\n\t\tvar lastPosition = new Vector3();\n\t\tvar lastQuaternion = new Quaternion();\n\n\t\tvar twoPI = 2 * Math.PI;\n\n\t\treturn function update() {\n\n\t\t\tvar position = scope.object.position;\n\n\t\t\toffset.copy( position ).sub( scope.target );\n\n\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\toffset.applyQuaternion( quat );\n\n\t\t\t// angle from z-axis around y-axis\n\t\t\tspherical.setFromVector3( offset );\n\n\t\t\tif ( scope.autoRotate && state === STATE.NONE ) {\n\n\t\t\t\trotateLeft( getAutoRotationAngle() );\n\n\t\t\t}\n\n\t\t\tif ( scope.enableDamping ) {\n\n\t\t\t\tspherical.theta += sphericalDelta.theta * scope.dampingFactor;\n\t\t\t\tspherical.phi += sphericalDelta.phi * scope.dampingFactor;\n\n\t\t\t} else {\n\n\t\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\t\tspherical.phi += sphericalDelta.phi;\n\n\t\t\t}\n\n\t\t\t// restrict theta to be between desired limits\n\n\t\t\tvar min = scope.minAzimuthAngle;\n\t\t\tvar max = scope.maxAzimuthAngle;\n\n\t\t\tif ( isFinite( min ) && isFinite( max ) ) {\n\n\t\t\t\tif ( min < - Math.PI ) min += twoPI; else if ( min > Math.PI ) min -= twoPI;\n\n\t\t\t\tif ( max < - Math.PI ) max += twoPI; else if ( max > Math.PI ) max -= twoPI;\n\n\t\t\t\tif ( min <= max ) {\n\n\t\t\t\t\tspherical.theta = Math.max( min, Math.min( max, spherical.theta ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tspherical.theta = ( spherical.theta > ( min + max ) / 2 ) ?\n\t\t\t\t\t\tMath.max( min, spherical.theta ) :\n\t\t\t\t\t\tMath.min( max, spherical.theta );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// restrict phi to be between desired limits\n\t\t\tspherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\n\n\t\t\tspherical.makeSafe();\n\n\n\t\t\tspherical.radius *= scale;\n\n\t\t\t// restrict radius to be between desired limits\n\t\t\tspherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) );\n\n\t\t\t// move target to panned location\n\n\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\tscope.target.addScaledVector( panOffset, scope.dampingFactor );\n\n\t\t\t} else {\n\n\t\t\t\tscope.target.add( panOffset );\n\n\t\t\t}\n\n\t\t\toffset.setFromSpherical( spherical );\n\n\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\toffset.applyQuaternion( quatInverse );\n\n\t\t\tposition.copy( scope.target ).add( offset );\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\tsphericalDelta.theta *= ( 1 - scope.dampingFactor );\n\t\t\t\tsphericalDelta.phi *= ( 1 - scope.dampingFactor );\n\n\t\t\t\tpanOffset.multiplyScalar( 1 - scope.dampingFactor );\n\n\t\t\t} else {\n\n\t\t\t\tsphericalDelta.set( 0, 0, 0 );\n\n\t\t\t\tpanOffset.set( 0, 0, 0 );\n\n\t\t\t}\n\n\t\t\tscale = 1;\n\n\t\t\t// update condition is:\n\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\t\tif ( zoomChanged ||\n\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\tzoomChanged = false;\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t};\n\n\t}();\n\n\tthis.dispose = function () {\n\n\t\tscope.domElement.removeEventListener( 'contextmenu', onContextMenu, false );\n\n\t\tscope.domElement.removeEventListener( 'pointerdown', onPointerDown, false );\n\t\tscope.domElement.removeEventListener( 'wheel', onMouseWheel, false );\n\n\t\tscope.domElement.removeEventListener( 'touchstart', onTouchStart, false );\n\t\tscope.domElement.removeEventListener( 'touchend', onTouchEnd, false );\n\t\tscope.domElement.removeEventListener( 'touchmove', onTouchMove, false );\n\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove, false );\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp, false );\n\n\t\tscope.domElement.removeEventListener( 'keydown', onKeyDown, false );\n\n\t\t//scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n\n\t};\n\n\t//\n\t// internals\n\t//\n\n\tvar scope = this;\n\n\tvar changeEvent = { type: 'change' };\n\tvar startEvent = { type: 'start' };\n\tvar endEvent = { type: 'end' };\n\n\tvar STATE = {\n\t\tNONE: - 1,\n\t\tROTATE: 0,\n\t\tDOLLY: 1,\n\t\tPAN: 2,\n\t\tTOUCH_ROTATE: 3,\n\t\tTOUCH_PAN: 4,\n\t\tTOUCH_DOLLY_PAN: 5,\n\t\tTOUCH_DOLLY_ROTATE: 6\n\t};\n\n\tvar state = STATE.NONE;\n\n\tvar EPS = 0.000001;\n\n\t// current position in spherical coordinates\n\tvar spherical = new Spherical();\n\tvar sphericalDelta = new Spherical();\n\n\tvar scale = 1;\n\tvar panOffset = new Vector3();\n\tvar zoomChanged = false;\n\n\tvar rotateStart = new Vector2();\n\tvar rotateEnd = new Vector2();\n\tvar rotateDelta = new Vector2();\n\n\tvar panStart = new Vector2();\n\tvar panEnd = new Vector2();\n\tvar panDelta = new Vector2();\n\n\tvar dollyStart = new Vector2();\n\tvar dollyEnd = new Vector2();\n\tvar dollyDelta = new Vector2();\n\n\tfunction getAutoRotationAngle() {\n\n\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n\t}\n\n\tfunction getZoomScale() {\n\n\t\treturn Math.pow( 0.95, scope.zoomSpeed );\n\n\t}\n\n\tfunction rotateLeft( angle ) {\n\n\t\tsphericalDelta.theta -= angle;\n\n\t}\n\n\tfunction rotateUp( angle ) {\n\n\t\tsphericalDelta.phi -= angle;\n\n\t}\n\n\tvar panLeft = function () {\n\n\t\tvar v = new Vector3();\n\n\t\treturn function panLeft( distance, objectMatrix ) {\n\n\t\t\tv.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t\tv.multiplyScalar( - distance );\n\n\t\t\tpanOffset.add( v );\n\n\t\t};\n\n\t}();\n\n\tvar panUp = function () {\n\n\t\tvar v = new Vector3();\n\n\t\treturn function panUp( distance, objectMatrix ) {\n\n\t\t\tif ( scope.screenSpacePanning === true ) {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 1 );\n\n\t\t\t} else {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 );\n\t\t\t\tv.crossVectors( scope.object.up, v );\n\n\t\t\t}\n\n\t\t\tv.multiplyScalar( distance );\n\n\t\t\tpanOffset.add( v );\n\n\t\t};\n\n\t}();\n\n\t// deltaX and deltaY are in pixels; right and down are positive\n\tvar pan = function () {\n\n\t\tvar offset = new Vector3();\n\n\t\treturn function pan( deltaX, deltaY ) {\n\n\t\t\tvar element = scope.domElement;\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t// perspective\n\t\t\t\tvar position = scope.object.position;\n\t\t\t\toffset.copy( position ).sub( scope.target );\n\t\t\t\tvar targetDistance = offset.length();\n\n\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\ttargetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\t\tpanLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n\t\t\t\tpanUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t// orthographic\n\t\t\t\tpanLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );\n\t\t\t\tpanUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );\n\n\t\t\t} else {\n\n\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\t\tscope.enablePan = false;\n\n\t\t\t}\n\n\t\t};\n\n\t}();\n\n\tfunction dollyOut( dollyScale ) {\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscale /= dollyScale;\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) );\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tzoomChanged = true;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tscope.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\tfunction dollyIn( dollyScale ) {\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscale *= dollyScale;\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) );\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tzoomChanged = true;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tscope.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t//\n\t// event callbacks - update the object state\n\t//\n\n\tfunction handleMouseDownRotate( event ) {\n\n\t\trotateStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseDownDolly( event ) {\n\n\t\tdollyStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseDownPan( event ) {\n\n\t\tpanStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseMoveRotate( event ) {\n\n\t\trotateEnd.set( event.clientX, event.clientY );\n\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\tvar element = scope.domElement;\n\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\trotateStart.copy( rotateEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseMoveDolly( event ) {\n\n\t\tdollyEnd.set( event.clientX, event.clientY );\n\n\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\n\n\t\tif ( dollyDelta.y > 0 ) {\n\n\t\t\tdollyOut( getZoomScale() );\n\n\t\t} else if ( dollyDelta.y < 0 ) {\n\n\t\t\tdollyIn( getZoomScale() );\n\n\t\t}\n\n\t\tdollyStart.copy( dollyEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseMovePan( event ) {\n\n\t\tpanEnd.set( event.clientX, event.clientY );\n\n\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\tpan( panDelta.x, panDelta.y );\n\n\t\tpanStart.copy( panEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseUp( /*event*/ ) {\n\n\t\t// no-op\n\n\t}\n\n\tfunction handleMouseWheel( event ) {\n\n\t\tif ( event.deltaY < 0 ) {\n\n\t\t\tdollyIn( getZoomScale() );\n\n\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\tdollyOut( getZoomScale() );\n\n\t\t}\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleKeyDown( event ) {\n\n\t\tvar needsUpdate = false;\n\n\t\tswitch ( event.keyCode ) {\n\n\t\t\tcase scope.keys.UP:\n\t\t\t\tpan( 0, scope.keyPanSpeed );\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\tpan( 0, - scope.keyPanSpeed );\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.LEFT:\n\t\t\t\tpan( scope.keyPanSpeed, 0 );\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.RIGHT:\n\t\t\t\tpan( - scope.keyPanSpeed, 0 );\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\t// prevent the browser from scrolling on cursor keys\n\t\t\tevent.preventDefault();\n\n\t\t\tscope.update();\n\n\t\t}\n\n\n\t}\n\n\tfunction handleTouchStartRotate( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\trotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\trotateStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\tfunction handleTouchStartPan( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\tpanStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\tpanStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\tfunction handleTouchStartDolly( event ) {\n\n\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tdollyStart.set( 0, distance );\n\n\t}\n\n\tfunction handleTouchStartDollyPan( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchStartDolly( event );\n\n\t\tif ( scope.enablePan ) handleTouchStartPan( event );\n\n\t}\n\n\tfunction handleTouchStartDollyRotate( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchStartDolly( event );\n\n\t\tif ( scope.enableRotate ) handleTouchStartRotate( event );\n\n\t}\n\n\tfunction handleTouchMoveRotate( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\trotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\trotateEnd.set( x, y );\n\n\t\t}\n\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\tvar element = scope.domElement;\n\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\trotateStart.copy( rotateEnd );\n\n\t}\n\n\tfunction handleTouchMovePan( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\tpanEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\tpanEnd.set( x, y );\n\n\t\t}\n\n\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\tpan( panDelta.x, panDelta.y );\n\n\t\tpanStart.copy( panEnd );\n\n\t}\n\n\tfunction handleTouchMoveDolly( event ) {\n\n\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tdollyEnd.set( 0, distance );\n\n\t\tdollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );\n\n\t\tdollyOut( dollyDelta.y );\n\n\t\tdollyStart.copy( dollyEnd );\n\n\t}\n\n\tfunction handleTouchMoveDollyPan( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n\t\tif ( scope.enablePan ) handleTouchMovePan( event );\n\n\t}\n\n\tfunction handleTouchMoveDollyRotate( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n\t\tif ( scope.enableRotate ) handleTouchMoveRotate( event );\n\n\t}\n\n\tfunction handleTouchEnd( /*event*/ ) {\n\n\t\t// no-op\n\n\t}\n\n\t//\n\t// event handlers - FSM: listen for events and reset state\n\t//\n\n\tfunction onPointerDown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseDown( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onPointerMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseMove( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onPointerUp( event ) {\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseUp( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onMouseDown( event ) {\n\n\t\t// Prevent the browser from scrolling.\n\t\tevent.preventDefault();\n\n\t\t// Manually set the focus since calling preventDefault above\n\t\t// prevents the browser from setting it automatically.\n\n\t\tscope.domElement.focus ? scope.domElement.focus() : window.focus();\n\n\t\tvar mouseAction;\n\n\t\tswitch ( event.button ) {\n\n\t\t\tcase 0:\n\n\t\t\t\tmouseAction = scope.mouseButtons.LEFT;\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\n\t\t\t\tmouseAction = scope.mouseButtons.MIDDLE;\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\n\t\t\t\tmouseAction = scope.mouseButtons.RIGHT;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tmouseAction = - 1;\n\n\t\t}\n\n\t\tswitch ( mouseAction ) {\n\n\t\t\tcase MOUSE.DOLLY:\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseDownDolly( event );\n\n\t\t\t\tstate = STATE.DOLLY;\n\n\t\t\t\tbreak;\n\n\t\t\tcase MOUSE.ROTATE:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase MOUSE.PAN:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\n\t\t\tscope.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove, false );\n\t\t\tscope.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp, false );\n\n\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t}\n\n\t}\n\n\tfunction onMouseMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( state ) {\n\n\t\t\tcase STATE.ROTATE:\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleMouseMoveRotate( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.DOLLY:\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseMoveDolly( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.PAN:\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleMouseMovePan( event );\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction onMouseUp( event ) {\n\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove, false );\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp, false );\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\thandleMouseUp( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onMouseWheel( event ) {\n\n\t\tif ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t\thandleMouseWheel( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction onKeyDown( event ) {\n\n\t\tif ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return;\n\n\t\thandleKeyDown( event );\n\n\t}\n\n\tfunction onTouchStart( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault(); // prevent scrolling\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\n\n\t\t\t\tswitch ( scope.touches.ONE ) {\n\n\t\t\t\t\tcase TOUCH.ROTATE:\n\n\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleTouchStartRotate( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TOUCH.PAN:\n\n\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleTouchStartPan( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_PAN;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\n\t\t\t\tswitch ( scope.touches.TWO ) {\n\n\t\t\t\t\tcase TOUCH.DOLLY_PAN:\n\n\t\t\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleTouchStartDollyPan( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TOUCH.DOLLY_ROTATE:\n\n\t\t\t\t\t\tif ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleTouchStartDollyRotate( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_ROTATE;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\n\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t}\n\n\t}\n\n\tfunction onTouchMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault(); // prevent scrolling\n\t\tevent.stopPropagation();\n\n\t\tswitch ( state ) {\n\n\t\t\tcase STATE.TOUCH_ROTATE:\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleTouchMoveRotate( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.TOUCH_PAN:\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleTouchMovePan( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.TOUCH_DOLLY_PAN:\n\n\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\thandleTouchMoveDollyPan( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.TOUCH_DOLLY_ROTATE:\n\n\t\t\t\tif ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n\t\t\t\thandleTouchMoveDollyRotate( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t}\n\n\tfunction onTouchEnd( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\thandleTouchEnd( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onContextMenu( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t}\n\n\t//\n\n\tscope.domElement.addEventListener( 'contextmenu', onContextMenu, false );\n\n\tscope.domElement.addEventListener( 'pointerdown', onPointerDown, false );\n\tscope.domElement.addEventListener( 'wheel', onMouseWheel, false );\n\n\tscope.domElement.addEventListener( 'touchstart', onTouchStart, false );\n\tscope.domElement.addEventListener( 'touchend', onTouchEnd, false );\n\tscope.domElement.addEventListener( 'touchmove', onTouchMove, false );\n\n\tscope.domElement.addEventListener( 'keydown', onKeyDown, false );\n\n\t// force an update at start\n\n\tthis.update();\n\n};\n\nOrbitControls.prototype = Object.create( EventDispatcher.prototype );\nOrbitControls.prototype.constructor = OrbitControls;\n\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n// This is very similar to OrbitControls, another set of touch behavior\n//\n// Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - left mouse, or arrow keys / touch: one-finger move\n\nvar MapControls = function ( object, domElement ) {\n\n\tOrbitControls.call( this, object, domElement );\n\n\tthis.screenSpacePanning = false; // pan orthogonal to world-space direction camera.up\n\n\tthis.mouseButtons.LEFT = MOUSE.PAN;\n\tthis.mouseButtons.RIGHT = MOUSE.ROTATE;\n\n\tthis.touches.ONE = TOUCH.PAN;\n\tthis.touches.TWO = TOUCH.DOLLY_ROTATE;\n\n};\n\nMapControls.prototype = Object.create( EventDispatcher.prototype );\nMapControls.prototype.constructor = MapControls;\n\nexport { OrbitControls, MapControls };\n","import {\n\tEventDispatcher,\n\tQuaternion,\n\tVector3\n} from \"../../../build/three.module.js\";\n\nvar FlyControls = function ( object, domElement ) {\n\n\tif ( domElement === undefined ) {\n\n\t\tconsole.warn( 'THREE.FlyControls: The second parameter \"domElement\" is now mandatory.' );\n\t\tdomElement = document;\n\n\t}\n\n\tthis.object = object;\n\tthis.domElement = domElement;\n\n\tif ( domElement ) this.domElement.setAttribute( 'tabindex', - 1 );\n\n\t// API\n\n\tthis.movementSpeed = 1.0;\n\tthis.rollSpeed = 0.005;\n\n\tthis.dragToLook = false;\n\tthis.autoForward = false;\n\n\t// disable default target object behavior\n\n\t// internals\n\n\tvar scope = this;\n\tvar changeEvent = { type: \"change\" };\n\tvar EPS = 0.000001;\n\n\tthis.tmpQuaternion = new Quaternion();\n\n\tthis.mouseStatus = 0;\n\n\tthis.moveState = { up: 0, down: 0, left: 0, right: 0, forward: 0, back: 0, pitchUp: 0, pitchDown: 0, yawLeft: 0, yawRight: 0, rollLeft: 0, rollRight: 0 };\n\tthis.moveVector = new Vector3( 0, 0, 0 );\n\tthis.rotationVector = new Vector3( 0, 0, 0 );\n\n\tthis.keydown = function ( event ) {\n\n\t\tif ( event.altKey ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t//event.preventDefault();\n\n\t\tswitch ( event.keyCode ) {\n\n\t\t\tcase 16: /* shift */ this.movementSpeedMultiplier = .1; break;\n\n\t\t\tcase 87: /*W*/ this.moveState.forward = 1; break;\n\t\t\tcase 83: /*S*/ this.moveState.back = 1; break;\n\n\t\t\tcase 65: /*A*/ this.moveState.left = 1; break;\n\t\t\tcase 68: /*D*/ this.moveState.right = 1; break;\n\n\t\t\tcase 82: /*R*/ this.moveState.up = 1; break;\n\t\t\tcase 70: /*F*/ this.moveState.down = 1; break;\n\n\t\t\tcase 38: /*up*/ this.moveState.pitchUp = 1; break;\n\t\t\tcase 40: /*down*/ this.moveState.pitchDown = 1; break;\n\n\t\t\tcase 37: /*left*/ this.moveState.yawLeft = 1; break;\n\t\t\tcase 39: /*right*/ this.moveState.yawRight = 1; break;\n\n\t\t\tcase 81: /*Q*/ this.moveState.rollLeft = 1; break;\n\t\t\tcase 69: /*E*/ this.moveState.rollRight = 1; break;\n\n\t\t}\n\n\t\tthis.updateMovementVector();\n\t\tthis.updateRotationVector();\n\n\t};\n\n\tthis.keyup = function ( event ) {\n\n\t\tswitch ( event.keyCode ) {\n\n\t\t\tcase 16: /* shift */ this.movementSpeedMultiplier = 1; break;\n\n\t\t\tcase 87: /*W*/ this.moveState.forward = 0; break;\n\t\t\tcase 83: /*S*/ this.moveState.back = 0; break;\n\n\t\t\tcase 65: /*A*/ this.moveState.left = 0; break;\n\t\t\tcase 68: /*D*/ this.moveState.right = 0; break;\n\n\t\t\tcase 82: /*R*/ this.moveState.up = 0; break;\n\t\t\tcase 70: /*F*/ this.moveState.down = 0; break;\n\n\t\t\tcase 38: /*up*/ this.moveState.pitchUp = 0; break;\n\t\t\tcase 40: /*down*/ this.moveState.pitchDown = 0; break;\n\n\t\t\tcase 37: /*left*/ this.moveState.yawLeft = 0; break;\n\t\t\tcase 39: /*right*/ this.moveState.yawRight = 0; break;\n\n\t\t\tcase 81: /*Q*/ this.moveState.rollLeft = 0; break;\n\t\t\tcase 69: /*E*/ this.moveState.rollRight = 0; break;\n\n\t\t}\n\n\t\tthis.updateMovementVector();\n\t\tthis.updateRotationVector();\n\n\t};\n\n\tthis.mousedown = function ( event ) {\n\n\t\tif ( this.domElement !== document ) {\n\n\t\t\tthis.domElement.focus();\n\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tif ( this.dragToLook ) {\n\n\t\t\tthis.mouseStatus ++;\n\n\t\t} else {\n\n\t\t\tswitch ( event.button ) {\n\n\t\t\t\tcase 0: this.moveState.forward = 1; break;\n\t\t\t\tcase 2: this.moveState.back = 1; break;\n\n\t\t\t}\n\n\t\t\tthis.updateMovementVector();\n\n\t\t}\n\n\t};\n\n\tthis.mousemove = function ( event ) {\n\n\t\tif ( ! this.dragToLook || this.mouseStatus > 0 ) {\n\n\t\t\tvar container = this.getContainerDimensions();\n\t\t\tvar halfWidth = container.size[ 0 ] / 2;\n\t\t\tvar halfHeight = container.size[ 1 ] / 2;\n\n\t\t\tthis.moveState.yawLeft = - ( ( event.pageX - container.offset[ 0 ] ) - halfWidth ) / halfWidth;\n\t\t\tthis.moveState.pitchDown = ( ( event.pageY - container.offset[ 1 ] ) - halfHeight ) / halfHeight;\n\n\t\t\tthis.updateRotationVector();\n\n\t\t}\n\n\t};\n\n\tthis.mouseup = function ( event ) {\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tif ( this.dragToLook ) {\n\n\t\t\tthis.mouseStatus --;\n\n\t\t\tthis.moveState.yawLeft = this.moveState.pitchDown = 0;\n\n\t\t} else {\n\n\t\t\tswitch ( event.button ) {\n\n\t\t\t\tcase 0: this.moveState.forward = 0; break;\n\t\t\t\tcase 2: this.moveState.back = 0; break;\n\n\t\t\t}\n\n\t\t\tthis.updateMovementVector();\n\n\t\t}\n\n\t\tthis.updateRotationVector();\n\n\t};\n\n\tthis.update = function () {\n\n\t\tvar lastQuaternion = new Quaternion();\n\t\tvar lastPosition = new Vector3();\n\n\t\treturn function ( delta ) {\n\n\t\t\tvar moveMult = delta * scope.movementSpeed;\n\t\t\tvar rotMult = delta * scope.rollSpeed;\n\n\t\t\tscope.object.translateX( scope.moveVector.x * moveMult );\n\t\t\tscope.object.translateY( scope.moveVector.y * moveMult );\n\t\t\tscope.object.translateZ( scope.moveVector.z * moveMult );\n\n\t\t\tscope.tmpQuaternion.set( scope.rotationVector.x * rotMult, scope.rotationVector.y * rotMult, scope.rotationVector.z * rotMult, 1 ).normalize();\n\t\t\tscope.object.quaternion.multiply( scope.tmpQuaternion );\n\n\t\t\tif (\n\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS\n\t\t\t) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\tlastPosition.copy( scope.object.position );\n\n\t\t\t}\n\n\t\t};\n\n\t}();\n\n\tthis.updateMovementVector = function () {\n\n\t\tvar forward = ( this.moveState.forward || ( this.autoForward && ! this.moveState.back ) ) ? 1 : 0;\n\n\t\tthis.moveVector.x = ( - this.moveState.left + this.moveState.right );\n\t\tthis.moveVector.y = ( - this.moveState.down + this.moveState.up );\n\t\tthis.moveVector.z = ( - forward + this.moveState.back );\n\n\t\t//console.log( 'move:', [ this.moveVector.x, this.moveVector.y, this.moveVector.z ] );\n\n\t};\n\n\tthis.updateRotationVector = function () {\n\n\t\tthis.rotationVector.x = ( - this.moveState.pitchDown + this.moveState.pitchUp );\n\t\tthis.rotationVector.y = ( - this.moveState.yawRight + this.moveState.yawLeft );\n\t\tthis.rotationVector.z = ( - this.moveState.rollRight + this.moveState.rollLeft );\n\n\t\t//console.log( 'rotate:', [ this.rotationVector.x, this.rotationVector.y, this.rotationVector.z ] );\n\n\t};\n\n\tthis.getContainerDimensions = function () {\n\n\t\tif ( this.domElement != document ) {\n\n\t\t\treturn {\n\t\t\t\tsize: [ this.domElement.offsetWidth, this.domElement.offsetHeight ],\n\t\t\t\toffset: [ this.domElement.offsetLeft, this.domElement.offsetTop ]\n\t\t\t};\n\n\t\t} else {\n\n\t\t\treturn {\n\t\t\t\tsize: [ window.innerWidth, window.innerHeight ],\n\t\t\t\toffset: [ 0, 0 ]\n\t\t\t};\n\n\t\t}\n\n\t};\n\n\tfunction bind( scope, fn ) {\n\n\t\treturn function () {\n\n\t\t\tfn.apply( scope, arguments );\n\n\t\t};\n\n\t}\n\n\tfunction contextmenu( event ) {\n\n\t\tevent.preventDefault();\n\n\t}\n\n\tthis.dispose = function () {\n\n\t\tthis.domElement.removeEventListener( 'contextmenu', contextmenu, false );\n\t\tthis.domElement.removeEventListener( 'mousedown', _mousedown, false );\n\t\tthis.domElement.removeEventListener( 'mousemove', _mousemove, false );\n\t\tthis.domElement.removeEventListener( 'mouseup', _mouseup, false );\n\n\t\twindow.removeEventListener( 'keydown', _keydown, false );\n\t\twindow.removeEventListener( 'keyup', _keyup, false );\n\n\t};\n\n\tvar _mousemove = bind( this, this.mousemove );\n\tvar _mousedown = bind( this, this.mousedown );\n\tvar _mouseup = bind( this, this.mouseup );\n\tvar _keydown = bind( this, this.keydown );\n\tvar _keyup = bind( this, this.keyup );\n\n\tthis.domElement.addEventListener( 'contextmenu', contextmenu, false );\n\n\tthis.domElement.addEventListener( 'mousemove', _mousemove, false );\n\tthis.domElement.addEventListener( 'mousedown', _mousedown, false );\n\tthis.domElement.addEventListener( 'mouseup', _mouseup, false );\n\n\twindow.addEventListener( 'keydown', _keydown, false );\n\twindow.addEventListener( 'keyup', _keyup, false );\n\n\tthis.updateMovementVector();\n\tthis.updateRotationVector();\n\n};\n\nFlyControls.prototype = Object.create( EventDispatcher.prototype );\nFlyControls.prototype.constructor = FlyControls;\n\nexport { FlyControls };\n","/**\n * Full-screen textured quad shader\n */\n\nvar CopyShader = {\n\n\tuniforms: {\n\n\t\t\"tDiffuse\": { value: null },\n\t\t\"opacity\": { value: 1.0 }\n\n\t},\n\n\tvertexShader: [\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"void main() {\",\n\n\t\t\"\tvUv = uv;\",\n\t\t\"\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\",\n\n\t\t\"}\"\n\n\t].join( \"\\n\" ),\n\n\tfragmentShader: [\n\n\t\t\"uniform float opacity;\",\n\n\t\t\"uniform sampler2D tDiffuse;\",\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"void main() {\",\n\n\t\t\"\tvec4 texel = texture2D( tDiffuse, vUv );\",\n\t\t\"\tgl_FragColor = opacity * texel;\",\n\n\t\t\"}\"\n\n\t].join( \"\\n\" )\n\n};\n\nexport { CopyShader };\n","import {\n\tOrthographicCamera,\n\tPlaneBufferGeometry,\n\tMesh\n} from \"../../../build/three.module.js\";\n\nfunction Pass() {\n\n\t// if set to true, the pass is processed by the composer\n\tthis.enabled = true;\n\n\t// if set to true, the pass indicates to swap read and write buffer after rendering\n\tthis.needsSwap = true;\n\n\t// if set to true, the pass clears its buffer before rendering\n\tthis.clear = false;\n\n\t// if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.\n\tthis.renderToScreen = false;\n\n}\n\nObject.assign( Pass.prototype, {\n\n\tsetSize: function ( /* width, height */ ) {},\n\n\trender: function ( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\tconsole.error( 'THREE.Pass: .render() must be implemented in derived pass.' );\n\n\t}\n\n} );\n\n// Helper for passes that need to fill the viewport with a single quad.\n\n// Important: It's actually a hack to put FullScreenQuad into the Pass namespace. This is only\n// done to make examples/js code work. Normally, FullScreenQuad should be exported\n// from this module like Pass.\n\nPass.FullScreenQuad = ( function () {\n\n\tvar camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\tvar geometry = new PlaneBufferGeometry( 2, 2 );\n\n\tvar FullScreenQuad = function ( material ) {\n\n\t\tthis._mesh = new Mesh( geometry, material );\n\n\t};\n\n\tObject.defineProperty( FullScreenQuad.prototype, 'material', {\n\n\t\tget: function () {\n\n\t\t\treturn this._mesh.material;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._mesh.material = value;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( FullScreenQuad.prototype, {\n\n\t\tdispose: function () {\n\n\t\t\tthis._mesh.geometry.dispose();\n\n\t\t},\n\n\t\trender: function ( renderer ) {\n\n\t\t\trenderer.render( this._mesh, camera );\n\n\t\t}\n\n\t} );\n\n\treturn FullScreenQuad;\n\n} )();\n\nexport { Pass };\n","import {\n\tShaderMaterial,\n\tUniformsUtils\n} from \"../../../build/three.module.js\";\nimport { Pass } from \"../postprocessing/Pass.js\";\n\nvar ShaderPass = function ( shader, textureID ) {\n\n\tPass.call( this );\n\n\tthis.textureID = ( textureID !== undefined ) ? textureID : \"tDiffuse\";\n\n\tif ( shader instanceof ShaderMaterial ) {\n\n\t\tthis.uniforms = shader.uniforms;\n\n\t\tthis.material = shader;\n\n\t} else if ( shader ) {\n\n\t\tthis.uniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\tthis.material = new ShaderMaterial( {\n\n\t\t\tdefines: Object.assign( {}, shader.defines ),\n\t\t\tuniforms: this.uniforms,\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader\n\n\t\t} );\n\n\t}\n\n\tthis.fsQuad = new Pass.FullScreenQuad( this.material );\n\n};\n\nShaderPass.prototype = Object.assign( Object.create( Pass.prototype ), {\n\n\tconstructor: ShaderPass,\n\n\trender: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tif ( this.uniforms[ this.textureID ] ) {\n\n\t\t\tthis.uniforms[ this.textureID ].value = readBuffer.texture;\n\n\t\t}\n\n\t\tthis.fsQuad.material = this.material;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.setRenderTarget( null );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t} else {\n\n\t\t\trenderer.setRenderTarget( writeBuffer );\n\t\t\t// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n\t\t\tif ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\t\t\tthis.fsQuad.render( renderer );\n\n\t\t}\n\n\t}\n\n} );\n\nexport { ShaderPass };\n","import { Pass } from \"../postprocessing/Pass.js\";\n\nvar MaskPass = function ( scene, camera ) {\n\n\tPass.call( this );\n\n\tthis.scene = scene;\n\tthis.camera = camera;\n\n\tthis.clear = true;\n\tthis.needsSwap = false;\n\n\tthis.inverse = false;\n\n};\n\nMaskPass.prototype = Object.assign( Object.create( Pass.prototype ), {\n\n\tconstructor: MaskPass,\n\n\trender: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tvar context = renderer.getContext();\n\t\tvar state = renderer.state;\n\n\t\t// don't update color or depth\n\n\t\tstate.buffers.color.setMask( false );\n\t\tstate.buffers.depth.setMask( false );\n\n\t\t// lock buffers\n\n\t\tstate.buffers.color.setLocked( true );\n\t\tstate.buffers.depth.setLocked( true );\n\n\t\t// set up stencil\n\n\t\tvar writeValue, clearValue;\n\n\t\tif ( this.inverse ) {\n\n\t\t\twriteValue = 0;\n\t\t\tclearValue = 1;\n\n\t\t} else {\n\n\t\t\twriteValue = 1;\n\t\t\tclearValue = 0;\n\n\t\t}\n\n\t\tstate.buffers.stencil.setTest( true );\n\t\tstate.buffers.stencil.setOp( context.REPLACE, context.REPLACE, context.REPLACE );\n\t\tstate.buffers.stencil.setFunc( context.ALWAYS, writeValue, 0xffffffff );\n\t\tstate.buffers.stencil.setClear( clearValue );\n\t\tstate.buffers.stencil.setLocked( true );\n\n\t\t// draw into the stencil buffer\n\n\t\trenderer.setRenderTarget( readBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\trenderer.setRenderTarget( writeBuffer );\n\t\tif ( this.clear ) renderer.clear();\n\t\trenderer.render( this.scene, this.camera );\n\n\t\t// unlock color and depth buffer for subsequent rendering\n\n\t\tstate.buffers.color.setLocked( false );\n\t\tstate.buffers.depth.setLocked( false );\n\n\t\t// only render where stencil is set to 1\n\n\t\tstate.buffers.stencil.setLocked( false );\n\t\tstate.buffers.stencil.setFunc( context.EQUAL, 1, 0xffffffff ); // draw if == 1\n\t\tstate.buffers.stencil.setOp( context.KEEP, context.KEEP, context.KEEP );\n\t\tstate.buffers.stencil.setLocked( true );\n\n\t}\n\n} );\n\n\nvar ClearMaskPass = function () {\n\n\tPass.call( this );\n\n\tthis.needsSwap = false;\n\n};\n\nClearMaskPass.prototype = Object.create( Pass.prototype );\n\nObject.assign( ClearMaskPass.prototype, {\n\n\trender: function ( renderer /*, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\trenderer.state.buffers.stencil.setLocked( false );\n\t\trenderer.state.buffers.stencil.setTest( false );\n\n\t}\n\n} );\n\nexport { MaskPass, ClearMaskPass };\n","import {\n\tClock,\n\tLinearFilter,\n\tMesh,\n\tOrthographicCamera,\n\tPlaneBufferGeometry,\n\tRGBAFormat,\n\tVector2,\n\tWebGLRenderTarget\n} from \"../../../build/three.module.js\";\nimport { CopyShader } from \"../shaders/CopyShader.js\";\nimport { ShaderPass } from \"../postprocessing/ShaderPass.js\";\nimport { MaskPass } from \"../postprocessing/MaskPass.js\";\nimport { ClearMaskPass } from \"../postprocessing/MaskPass.js\";\n\nvar EffectComposer = function ( renderer, renderTarget ) {\n\n\tthis.renderer = renderer;\n\n\tif ( renderTarget === undefined ) {\n\n\t\tvar parameters = {\n\t\t\tminFilter: LinearFilter,\n\t\t\tmagFilter: LinearFilter,\n\t\t\tformat: RGBAFormat\n\t\t};\n\n\t\tvar size = renderer.getSize( new Vector2() );\n\t\tthis._pixelRatio = renderer.getPixelRatio();\n\t\tthis._width = size.width;\n\t\tthis._height = size.height;\n\n\t\trenderTarget = new WebGLRenderTarget( this._width * this._pixelRatio, this._height * this._pixelRatio, parameters );\n\t\trenderTarget.texture.name = 'EffectComposer.rt1';\n\n\t} else {\n\n\t\tthis._pixelRatio = 1;\n\t\tthis._width = renderTarget.width;\n\t\tthis._height = renderTarget.height;\n\n\t}\n\n\tthis.renderTarget1 = renderTarget;\n\tthis.renderTarget2 = renderTarget.clone();\n\tthis.renderTarget2.texture.name = 'EffectComposer.rt2';\n\n\tthis.writeBuffer = this.renderTarget1;\n\tthis.readBuffer = this.renderTarget2;\n\n\tthis.renderToScreen = true;\n\n\tthis.passes = [];\n\n\t// dependencies\n\n\tif ( CopyShader === undefined ) {\n\n\t\tconsole.error( 'THREE.EffectComposer relies on CopyShader' );\n\n\t}\n\n\tif ( ShaderPass === undefined ) {\n\n\t\tconsole.error( 'THREE.EffectComposer relies on ShaderPass' );\n\n\t}\n\n\tthis.copyPass = new ShaderPass( CopyShader );\n\n\tthis.clock = new Clock();\n\n};\n\nObject.assign( EffectComposer.prototype, {\n\n\tswapBuffers: function () {\n\n\t\tvar tmp = this.readBuffer;\n\t\tthis.readBuffer = this.writeBuffer;\n\t\tthis.writeBuffer = tmp;\n\n\t},\n\n\taddPass: function ( pass ) {\n\n\t\tthis.passes.push( pass );\n\t\tpass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t},\n\n\tinsertPass: function ( pass, index ) {\n\n\t\tthis.passes.splice( index, 0, pass );\n\t\tpass.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t},\n\n\tremovePass: function ( pass ) {\n\n\t\tconst index = this.passes.indexOf( pass );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tthis.passes.splice( index, 1 );\n\n\t\t}\n\n\t},\n\n\tisLastEnabledPass: function ( passIndex ) {\n\n\t\tfor ( var i = passIndex + 1; i < this.passes.length; i ++ ) {\n\n\t\t\tif ( this.passes[ i ].enabled ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\trender: function ( deltaTime ) {\n\n\t\t// deltaTime value is in seconds\n\n\t\tif ( deltaTime === undefined ) {\n\n\t\t\tdeltaTime = this.clock.getDelta();\n\n\t\t}\n\n\t\tvar currentRenderTarget = this.renderer.getRenderTarget();\n\n\t\tvar maskActive = false;\n\n\t\tvar pass, i, il = this.passes.length;\n\n\t\tfor ( i = 0; i < il; i ++ ) {\n\n\t\t\tpass = this.passes[ i ];\n\n\t\t\tif ( pass.enabled === false ) continue;\n\n\t\t\tpass.renderToScreen = ( this.renderToScreen && this.isLastEnabledPass( i ) );\n\t\t\tpass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive );\n\n\t\t\tif ( pass.needsSwap ) {\n\n\t\t\t\tif ( maskActive ) {\n\n\t\t\t\t\tvar context = this.renderer.getContext();\n\t\t\t\t\tvar stencil = this.renderer.state.buffers.stencil;\n\n\t\t\t\t\t//context.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );\n\t\t\t\t\tstencil.setFunc( context.NOTEQUAL, 1, 0xffffffff );\n\n\t\t\t\t\tthis.copyPass.render( this.renderer, this.writeBuffer, this.readBuffer, deltaTime );\n\n\t\t\t\t\t//context.stencilFunc( context.EQUAL, 1, 0xffffffff );\n\t\t\t\t\tstencil.setFunc( context.EQUAL, 1, 0xffffffff );\n\n\t\t\t\t}\n\n\t\t\t\tthis.swapBuffers();\n\n\t\t\t}\n\n\t\t\tif ( MaskPass !== undefined ) {\n\n\t\t\t\tif ( pass instanceof MaskPass ) {\n\n\t\t\t\t\tmaskActive = true;\n\n\t\t\t\t} else if ( pass instanceof ClearMaskPass ) {\n\n\t\t\t\t\tmaskActive = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.renderer.setRenderTarget( currentRenderTarget );\n\n\t},\n\n\treset: function ( renderTarget ) {\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\tvar size = this.renderer.getSize( new Vector2() );\n\t\t\tthis._pixelRatio = this.renderer.getPixelRatio();\n\t\t\tthis._width = size.width;\n\t\t\tthis._height = size.height;\n\n\t\t\trenderTarget = this.renderTarget1.clone();\n\t\t\trenderTarget.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );\n\n\t\t}\n\n\t\tthis.renderTarget1.dispose();\n\t\tthis.renderTarget2.dispose();\n\t\tthis.renderTarget1 = renderTarget;\n\t\tthis.renderTarget2 = renderTarget.clone();\n\n\t\tthis.writeBuffer = this.renderTarget1;\n\t\tthis.readBuffer = this.renderTarget2;\n\n\t},\n\n\tsetSize: function ( width, height ) {\n\n\t\tthis._width = width;\n\t\tthis._height = height;\n\n\t\tvar effectiveWidth = this._width * this._pixelRatio;\n\t\tvar effectiveHeight = this._height * this._pixelRatio;\n\n\t\tthis.renderTarget1.setSize( effectiveWidth, effectiveHeight );\n\t\tthis.renderTarget2.setSize( effectiveWidth, effectiveHeight );\n\n\t\tfor ( var i = 0; i < this.passes.length; i ++ ) {\n\n\t\t\tthis.passes[ i ].setSize( effectiveWidth, effectiveHeight );\n\n\t\t}\n\n\t},\n\n\tsetPixelRatio: function ( pixelRatio ) {\n\n\t\tthis._pixelRatio = pixelRatio;\n\n\t\tthis.setSize( this._width, this._height );\n\n\t}\n\n} );\n\n\nvar Pass = function () {\n\n\t// if set to true, the pass is processed by the composer\n\tthis.enabled = true;\n\n\t// if set to true, the pass indicates to swap read and write buffer after rendering\n\tthis.needsSwap = true;\n\n\t// if set to true, the pass clears its buffer before rendering\n\tthis.clear = false;\n\n\t// if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.\n\tthis.renderToScreen = false;\n\n};\n\nObject.assign( Pass.prototype, {\n\n\tsetSize: function ( /* width, height */ ) {},\n\n\trender: function ( /* renderer, writeBuffer, readBuffer, deltaTime, maskActive */ ) {\n\n\t\tconsole.error( 'THREE.Pass: .render() must be implemented in derived pass.' );\n\n\t}\n\n} );\n\n// Helper for passes that need to fill the viewport with a single quad.\nPass.FullScreenQuad = ( function () {\n\n\tvar camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\tvar geometry = new PlaneBufferGeometry( 2, 2 );\n\n\tvar FullScreenQuad = function ( material ) {\n\n\t\tthis._mesh = new Mesh( geometry, material );\n\n\t};\n\n\tObject.defineProperty( FullScreenQuad.prototype, 'material', {\n\n\t\tget: function () {\n\n\t\t\treturn this._mesh.material;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._mesh.material = value;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( FullScreenQuad.prototype, {\n\n\t\tdispose: function () {\n\n\t\t\tthis._mesh.geometry.dispose();\n\n\t\t},\n\n\t\trender: function ( renderer ) {\n\n\t\t\trenderer.render( this._mesh, camera );\n\n\t\t}\n\n\t} );\n\n\treturn FullScreenQuad;\n\n} )();\n\nexport { EffectComposer, Pass };\n","import { Pass } from \"../postprocessing/Pass.js\";\n\nvar RenderPass = function ( scene, camera, overrideMaterial, clearColor, clearAlpha ) {\n\n\tPass.call( this );\n\n\tthis.scene = scene;\n\tthis.camera = camera;\n\n\tthis.overrideMaterial = overrideMaterial;\n\n\tthis.clearColor = clearColor;\n\tthis.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0;\n\n\tthis.clear = true;\n\tthis.clearDepth = false;\n\tthis.needsSwap = false;\n\n};\n\nRenderPass.prototype = Object.assign( Object.create( Pass.prototype ), {\n\n\tconstructor: RenderPass,\n\n\trender: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {\n\n\t\tvar oldAutoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tvar oldClearColor, oldClearAlpha, oldOverrideMaterial;\n\n\t\tif ( this.overrideMaterial !== undefined ) {\n\n\t\t\toldOverrideMaterial = this.scene.overrideMaterial;\n\n\t\t\tthis.scene.overrideMaterial = this.overrideMaterial;\n\n\t\t}\n\n\t\tif ( this.clearColor ) {\n\n\t\t\toldClearColor = renderer.getClearColor().getHex();\n\t\t\toldClearAlpha = renderer.getClearAlpha();\n\n\t\t\trenderer.setClearColor( this.clearColor, this.clearAlpha );\n\n\t\t}\n\n\t\tif ( this.clearDepth ) {\n\n\t\t\trenderer.clearDepth();\n\n\t\t}\n\n\t\trenderer.setRenderTarget( this.renderToScreen ? null : readBuffer );\n\n\t\t// TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600\n\t\tif ( this.clear ) renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\t\trenderer.render( this.scene, this.camera );\n\n\t\tif ( this.clearColor ) {\n\n\t\t\trenderer.setClearColor( oldClearColor, oldClearAlpha );\n\n\t\t}\n\n\t\tif ( this.overrideMaterial !== undefined ) {\n\n\t\t\tthis.scene.overrideMaterial = oldOverrideMaterial;\n\n\t\t}\n\n\t\trenderer.autoClear = oldAutoClear;\n\n\t}\n\n} );\n\nexport { RenderPass };\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeFunction from \"./isNativeFunction.js\";\nimport construct from \"./construct.js\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport _wrapNativeSuper from '@babel/runtime/helpers/esm/wrapNativeSuper';\nimport _taggedTemplateLiteralLoose from '@babel/runtime/helpers/esm/taggedTemplateLiteralLoose';\n\nfunction last() {\n var _ref;\n\n return _ref = arguments.length - 1, _ref < 0 || arguments.length <= _ref ? undefined : arguments[_ref];\n}\n\nfunction negation(a) {\n return -a;\n}\n\nfunction addition(a, b) {\n return a + b;\n}\n\nfunction subtraction(a, b) {\n return a - b;\n}\n\nfunction multiplication(a, b) {\n return a * b;\n}\n\nfunction division(a, b) {\n return a / b;\n}\n\nfunction max() {\n return Math.max.apply(Math, arguments);\n}\n\nfunction min() {\n return Math.min.apply(Math, arguments);\n}\n\nfunction comma() {\n return Array.of.apply(Array, arguments);\n}\n\nvar defaultSymbols = {\n symbols: {\n '*': {\n infix: {\n symbol: '*',\n f: multiplication,\n notation: 'infix',\n precedence: 4,\n rightToLeft: 0,\n argCount: 2\n },\n symbol: '*',\n regSymbol: '\\\\*'\n },\n '/': {\n infix: {\n symbol: '/',\n f: division,\n notation: 'infix',\n precedence: 4,\n rightToLeft: 0,\n argCount: 2\n },\n symbol: '/',\n regSymbol: '/'\n },\n '+': {\n infix: {\n symbol: '+',\n f: addition,\n notation: 'infix',\n precedence: 2,\n rightToLeft: 0,\n argCount: 2\n },\n prefix: {\n symbol: '+',\n f: last,\n notation: 'prefix',\n precedence: 3,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: '+',\n regSymbol: '\\\\+'\n },\n '-': {\n infix: {\n symbol: '-',\n f: subtraction,\n notation: 'infix',\n precedence: 2,\n rightToLeft: 0,\n argCount: 2\n },\n prefix: {\n symbol: '-',\n f: negation,\n notation: 'prefix',\n precedence: 3,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: '-',\n regSymbol: '-'\n },\n ',': {\n infix: {\n symbol: ',',\n f: comma,\n notation: 'infix',\n precedence: 1,\n rightToLeft: 0,\n argCount: 2\n },\n symbol: ',',\n regSymbol: ','\n },\n '(': {\n prefix: {\n symbol: '(',\n f: last,\n notation: 'prefix',\n precedence: 0,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: '(',\n regSymbol: '\\\\('\n },\n ')': {\n postfix: {\n symbol: ')',\n f: undefined,\n notation: 'postfix',\n precedence: 0,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: ')',\n regSymbol: '\\\\)'\n },\n min: {\n func: {\n symbol: 'min',\n f: min,\n notation: 'func',\n precedence: 0,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: 'min',\n regSymbol: 'min\\\\b'\n },\n max: {\n func: {\n symbol: 'max',\n f: max,\n notation: 'func',\n precedence: 0,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: 'max',\n regSymbol: 'max\\\\b'\n }\n }\n};\n\n// based on https://github.com/styled-components/styled-components/blob/fcf6f3804c57a14dd7984dfab7bc06ee2edca044/src/utils/error.js\n\n/**\n * Parse errors.md and turn it into a simple hash of code: message\n * @private\n */\nvar ERRORS = {\n \"1\": \"Passed invalid arguments to hsl, please pass multiple numbers e.g. hsl(360, 0.75, 0.4) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75 }).\\n\\n\",\n \"2\": \"Passed invalid arguments to hsla, please pass multiple numbers e.g. hsla(360, 0.75, 0.4, 0.7) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75, alpha: 0.7 }).\\n\\n\",\n \"3\": \"Passed an incorrect argument to a color function, please pass a string representation of a color.\\n\\n\",\n \"4\": \"Couldn't generate valid rgb string from %s, it returned %s.\\n\\n\",\n \"5\": \"Couldn't parse the color string. Please provide the color as a string in hex, rgb, rgba, hsl or hsla notation.\\n\\n\",\n \"6\": \"Passed invalid arguments to rgb, please pass multiple numbers e.g. rgb(255, 205, 100) or an object e.g. rgb({ red: 255, green: 205, blue: 100 }).\\n\\n\",\n \"7\": \"Passed invalid arguments to rgba, please pass multiple numbers e.g. rgb(255, 205, 100, 0.75) or an object e.g. rgb({ red: 255, green: 205, blue: 100, alpha: 0.75 }).\\n\\n\",\n \"8\": \"Passed invalid argument to toColorString, please pass a RgbColor, RgbaColor, HslColor or HslaColor object.\\n\\n\",\n \"9\": \"Please provide a number of steps to the modularScale helper.\\n\\n\",\n \"10\": \"Please pass a number or one of the predefined scales to the modularScale helper as the ratio.\\n\\n\",\n \"11\": \"Invalid value passed as base to modularScale, expected number or em string but got \\\"%s\\\"\\n\\n\",\n \"12\": \"Expected a string ending in \\\"px\\\" or a number passed as the first argument to %s(), got \\\"%s\\\" instead.\\n\\n\",\n \"13\": \"Expected a string ending in \\\"px\\\" or a number passed as the second argument to %s(), got \\\"%s\\\" instead.\\n\\n\",\n \"14\": \"Passed invalid pixel value (\\\"%s\\\") to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n \"15\": \"Passed invalid base value (\\\"%s\\\") to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n \"16\": \"You must provide a template to this method.\\n\\n\",\n \"17\": \"You passed an unsupported selector state to this method.\\n\\n\",\n \"18\": \"minScreen and maxScreen must be provided as stringified numbers with the same units.\\n\\n\",\n \"19\": \"fromSize and toSize must be provided as stringified numbers with the same units.\\n\\n\",\n \"20\": \"expects either an array of objects or a single object with the properties prop, fromSize, and toSize.\\n\\n\",\n \"21\": \"expects the objects in the first argument array to have the properties `prop`, `fromSize`, and `toSize`.\\n\\n\",\n \"22\": \"expects the first argument object to have the properties `prop`, `fromSize`, and `toSize`.\\n\\n\",\n \"23\": \"fontFace expects a name of a font-family.\\n\\n\",\n \"24\": \"fontFace expects either the path to the font file(s) or a name of a local copy.\\n\\n\",\n \"25\": \"fontFace expects localFonts to be an array.\\n\\n\",\n \"26\": \"fontFace expects fileFormats to be an array.\\n\\n\",\n \"27\": \"radialGradient requries at least 2 color-stops to properly render.\\n\\n\",\n \"28\": \"Please supply a filename to retinaImage() as the first argument.\\n\\n\",\n \"29\": \"Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.\\n\\n\",\n \"30\": \"Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\\n\\n\",\n \"31\": \"The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation\\n\\n\",\n \"32\": \"To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])\\nTo pass a single animation please supply them in simple values, e.g. animation('rotate', '2s')\\n\\n\",\n \"33\": \"The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation\\n\\n\",\n \"34\": \"borderRadius expects a radius value as a string or number as the second argument.\\n\\n\",\n \"35\": \"borderRadius expects one of \\\"top\\\", \\\"bottom\\\", \\\"left\\\" or \\\"right\\\" as the first argument.\\n\\n\",\n \"36\": \"Property must be a string value.\\n\\n\",\n \"37\": \"Syntax Error at %s.\\n\\n\",\n \"38\": \"Formula contains a function that needs parentheses at %s.\\n\\n\",\n \"39\": \"Formula is missing closing parenthesis at %s.\\n\\n\",\n \"40\": \"Formula has too many closing parentheses at %s.\\n\\n\",\n \"41\": \"All values in a formula must have the same unit or be unitless.\\n\\n\",\n \"42\": \"Please provide a number of steps to the modularScale helper.\\n\\n\",\n \"43\": \"Please pass a number or one of the predefined scales to the modularScale helper as the ratio.\\n\\n\",\n \"44\": \"Invalid value passed as base to modularScale, expected number or em/rem string but got %s.\\n\\n\",\n \"45\": \"Passed invalid argument to hslToColorString, please pass a HslColor or HslaColor object.\\n\\n\",\n \"46\": \"Passed invalid argument to rgbToColorString, please pass a RgbColor or RgbaColor object.\\n\\n\",\n \"47\": \"minScreen and maxScreen must be provided as stringified numbers with the same units.\\n\\n\",\n \"48\": \"fromSize and toSize must be provided as stringified numbers with the same units.\\n\\n\",\n \"49\": \"Expects either an array of objects or a single object with the properties prop, fromSize, and toSize.\\n\\n\",\n \"50\": \"Expects the objects in the first argument array to have the properties prop, fromSize, and toSize.\\n\\n\",\n \"51\": \"Expects the first argument object to have the properties prop, fromSize, and toSize.\\n\\n\",\n \"52\": \"fontFace expects either the path to the font file(s) or a name of a local copy.\\n\\n\",\n \"53\": \"fontFace expects localFonts to be an array.\\n\\n\",\n \"54\": \"fontFace expects fileFormats to be an array.\\n\\n\",\n \"55\": \"fontFace expects a name of a font-family.\\n\\n\",\n \"56\": \"linearGradient requries at least 2 color-stops to properly render.\\n\\n\",\n \"57\": \"radialGradient requries at least 2 color-stops to properly render.\\n\\n\",\n \"58\": \"Please supply a filename to retinaImage() as the first argument.\\n\\n\",\n \"59\": \"Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.\\n\\n\",\n \"60\": \"Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\\n\\n\",\n \"61\": \"Property must be a string value.\\n\\n\",\n \"62\": \"borderRadius expects a radius value as a string or number as the second argument.\\n\\n\",\n \"63\": \"borderRadius expects one of \\\"top\\\", \\\"bottom\\\", \\\"left\\\" or \\\"right\\\" as the first argument.\\n\\n\",\n \"64\": \"The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation.\\n\\n\",\n \"65\": \"To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])\\\\nTo pass a single animation please supply them in simple values, e.g. animation('rotate', '2s').\\n\\n\",\n \"66\": \"The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation.\\n\\n\",\n \"67\": \"You must provide a template to this method.\\n\\n\",\n \"68\": \"You passed an unsupported selector state to this method.\\n\\n\",\n \"69\": \"Expected a string ending in \\\"px\\\" or a number passed as the first argument to %s(), got %s instead.\\n\\n\",\n \"70\": \"Expected a string ending in \\\"px\\\" or a number passed as the second argument to %s(), got %s instead.\\n\\n\",\n \"71\": \"Passed invalid pixel value %s to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n \"72\": \"Passed invalid base value %s to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n \"73\": \"Please provide a valid CSS variable.\\n\\n\",\n \"74\": \"CSS variable not found and no default was provided.\\n\\n\",\n \"75\": \"important requires a valid style object, got a %s instead.\\n\\n\",\n \"76\": \"fromSize and toSize must be provided as stringified numbers with the same units as minScreen and maxScreen.\\n\\n\",\n \"77\": \"remToPx expects a value in \\\"rem\\\" but you provided it in \\\"%s\\\".\\n\\n\",\n \"78\": \"base must be set in \\\"px\\\" or \\\"%\\\" but you set it in \\\"%s\\\".\\n\"\n};\n/**\n * super basic version of sprintf\n * @private\n */\n\nfunction format() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var a = args[0];\n var b = [];\n var c;\n\n for (c = 1; c < args.length; c += 1) {\n b.push(args[c]);\n }\n\n b.forEach(function (d) {\n a = a.replace(/%[a-z]/, d);\n });\n return a;\n}\n/**\n * Create an error file out of errors.md for development and a simple web link to the full errors\n * in production mode.\n * @private\n */\n\n\nvar PolishedError = /*#__PURE__*/function (_Error) {\n _inheritsLoose(PolishedError, _Error);\n\n function PolishedError(code) {\n var _this;\n\n if (process.env.NODE_ENV === 'production') {\n _this = _Error.call(this, \"An error occurred. See https://github.com/styled-components/polished/blob/main/src/internalHelpers/errors.md#\" + code + \" for more information.\") || this;\n } else {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n _this = _Error.call(this, format.apply(void 0, [ERRORS[code]].concat(args))) || this;\n }\n\n return _assertThisInitialized(_this);\n }\n\n return PolishedError;\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n\nvar unitRegExp = /((?!\\w)a|na|hc|mc|dg|me[r]?|xe|ni(?![a-zA-Z])|mm|cp|tp|xp|q(?!s)|hv|xamv|nimv|wv|sm|s(?!\\D|$)|ged|darg?|nrut)/g; // Merges additional math functionality into the defaults.\n\nfunction mergeSymbolMaps(additionalSymbols) {\n var symbolMap = {};\n symbolMap.symbols = additionalSymbols ? _extends({}, defaultSymbols.symbols, additionalSymbols.symbols) : _extends({}, defaultSymbols.symbols);\n return symbolMap;\n}\n\nfunction exec(operators, values) {\n var _ref;\n\n var op = operators.pop();\n values.push(op.f.apply(op, (_ref = []).concat.apply(_ref, values.splice(-op.argCount))));\n return op.precedence;\n}\n\nfunction calculate(expression, additionalSymbols) {\n var symbolMap = mergeSymbolMaps(additionalSymbols);\n var match;\n var operators = [symbolMap.symbols['('].prefix];\n var values = [];\n var pattern = new RegExp( // Pattern for numbers\n \"\\\\d+(?:\\\\.\\\\d+)?|\" + // ...and patterns for individual operators/function names\n Object.keys(symbolMap.symbols).map(function (key) {\n return symbolMap.symbols[key];\n }) // longer symbols should be listed first\n // $FlowFixMe\n .sort(function (a, b) {\n return b.symbol.length - a.symbol.length;\n }) // $FlowFixMe\n .map(function (val) {\n return val.regSymbol;\n }).join('|') + \"|(\\\\S)\", 'g');\n pattern.lastIndex = 0; // Reset regular expression object\n\n var afterValue = false;\n\n do {\n match = pattern.exec(expression);\n\n var _ref2 = match || [')', undefined],\n token = _ref2[0],\n bad = _ref2[1];\n\n var notNumber = symbolMap.symbols[token];\n var notNewValue = notNumber && !notNumber.prefix && !notNumber.func;\n var notAfterValue = !notNumber || !notNumber.postfix && !notNumber.infix; // Check for syntax errors:\n\n if (bad || (afterValue ? notAfterValue : notNewValue)) {\n throw new PolishedError(37, match ? match.index : expression.length, expression);\n }\n\n if (afterValue) {\n // We either have an infix or postfix operator (they should be mutually exclusive)\n var curr = notNumber.postfix || notNumber.infix;\n\n do {\n var prev = operators[operators.length - 1];\n if ((curr.precedence - prev.precedence || prev.rightToLeft) > 0) break; // Apply previous operator, since it has precedence over current one\n } while (exec(operators, values)); // Exit loop after executing an opening parenthesis or function\n\n\n afterValue = curr.notation === 'postfix';\n\n if (curr.symbol !== ')') {\n operators.push(curr); // Postfix always has precedence over any operator that follows after it\n\n if (afterValue) exec(operators, values);\n }\n } else if (notNumber) {\n // prefix operator or function\n operators.push(notNumber.prefix || notNumber.func);\n\n if (notNumber.func) {\n // Require an opening parenthesis\n match = pattern.exec(expression);\n\n if (!match || match[0] !== '(') {\n throw new PolishedError(38, match ? match.index : expression.length, expression);\n }\n }\n } else {\n // number\n values.push(+token);\n afterValue = true;\n }\n } while (match && operators.length);\n\n if (operators.length) {\n throw new PolishedError(39, match ? match.index : expression.length, expression);\n } else if (match) {\n throw new PolishedError(40, match ? match.index : expression.length, expression);\n } else {\n return values.pop();\n }\n}\n\nfunction reverseString(str) {\n return str.split('').reverse().join('');\n}\n/**\n * Helper for doing math with CSS Units. Accepts a formula as a string. All values in the formula must have the same unit (or be unitless). Supports complex formulas utliziing addition, subtraction, multiplication, division, square root, powers, factorial, min, max, as well as parentheses for order of operation.\n *\n *In cases where you need to do calculations with mixed units where one unit is a [relative length unit](https://developer.mozilla.org/en-US/docs/Web/CSS/length#Relative_length_units), you will want to use [CSS Calc](https://developer.mozilla.org/en-US/docs/Web/CSS/calc).\n *\n * *warning* While we've done everything possible to ensure math safely evalutes formulas expressed as strings, you should always use extreme caution when passing `math` user provided values.\n * @example\n * // Styles as object usage\n * const styles = {\n * fontSize: math('12rem + 8rem'),\n * fontSize: math('(12px + 2px) * 3'),\n * fontSize: math('3px^2 + sqrt(4)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * fontSize: ${math('12rem + 8rem')};\n * fontSize: ${math('(12px + 2px) * 3')};\n * fontSize: ${math('3px^2 + sqrt(4)')};\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * fontSize: '20rem',\n * fontSize: '42px',\n * fontSize: '11px',\n * }\n */\n\n\nfunction math(formula, additionalSymbols) {\n var reversedFormula = reverseString(formula);\n var formulaMatch = reversedFormula.match(unitRegExp); // Check that all units are the same\n\n if (formulaMatch && !formulaMatch.every(function (unit) {\n return unit === formulaMatch[0];\n })) {\n throw new PolishedError(41);\n }\n\n var cleanFormula = reverseString(reversedFormula.replace(unitRegExp, ''));\n return \"\" + calculate(cleanFormula, additionalSymbols) + (formulaMatch ? reverseString(formulaMatch[0]) : '');\n}\n\nvar cssVariableRegex = /--[\\S]*/g;\n/**\n * Fetches the value of a passed CSS Variable in the :root scope, or otherwise returns a defaultValue if provided.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'background': cssVar('--background-color'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${cssVar('--background-color')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'background': 'red'\n * }\n */\n\nfunction cssVar(cssVariable, defaultValue) {\n if (!cssVariable || !cssVariable.match(cssVariableRegex)) {\n throw new PolishedError(73);\n }\n\n var variableValue;\n /* eslint-disable */\n\n /* istanbul ignore next */\n\n if (typeof document !== 'undefined' && document.documentElement !== null) {\n variableValue = getComputedStyle(document.documentElement).getPropertyValue(cssVariable);\n }\n /* eslint-enable */\n\n\n if (variableValue) {\n return variableValue.trim();\n } else if (defaultValue) {\n return defaultValue;\n }\n\n throw new PolishedError(74);\n}\n\n// @private\nfunction capitalizeString(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nvar positionMap$1 = ['Top', 'Right', 'Bottom', 'Left'];\n\nfunction generateProperty(property, position) {\n if (!property) return position.toLowerCase();\n var splitProperty = property.split('-');\n\n if (splitProperty.length > 1) {\n splitProperty.splice(1, 0, position);\n return splitProperty.reduce(function (acc, val) {\n return \"\" + acc + capitalizeString(val);\n });\n }\n\n var joinedProperty = property.replace(/([a-z])([A-Z])/g, \"$1\" + position + \"$2\");\n return property === joinedProperty ? \"\" + property + position : joinedProperty;\n}\n\nfunction generateStyles(property, valuesWithDefaults) {\n var styles = {};\n\n for (var i = 0; i < valuesWithDefaults.length; i += 1) {\n if (valuesWithDefaults[i] || valuesWithDefaults[i] === 0) {\n styles[generateProperty(property, positionMap$1[i])] = valuesWithDefaults[i];\n }\n }\n\n return styles;\n}\n/**\n * Enables shorthand for direction-based properties. It accepts a property (hyphenated or camelCased) and up to four values that map to top, right, bottom, and left, respectively. You can optionally pass an empty string to get only the directional values as properties. You can also optionally pass a null argument for a directional value to ignore it.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...directionalProperty('padding', '12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${directionalProperty('padding', '12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'paddingTop': '12px',\n * 'paddingRight': '24px',\n * 'paddingBottom': '36px',\n * 'paddingLeft': '48px'\n * }\n */\n\n\nfunction directionalProperty(property) {\n for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n values[_key - 1] = arguments[_key];\n }\n\n // prettier-ignore\n var firstValue = values[0],\n _values$ = values[1],\n secondValue = _values$ === void 0 ? firstValue : _values$,\n _values$2 = values[2],\n thirdValue = _values$2 === void 0 ? firstValue : _values$2,\n _values$3 = values[3],\n fourthValue = _values$3 === void 0 ? secondValue : _values$3;\n var valuesWithDefaults = [firstValue, secondValue, thirdValue, fourthValue];\n return generateStyles(property, valuesWithDefaults);\n}\n\n/**\n * Check if a string ends with something\n * @private\n */\nfunction endsWith(string, suffix) {\n return string.substr(-suffix.length) === suffix;\n}\n\nvar cssRegex$1 = /^([+-]?(?:\\d+|\\d*\\.\\d+))([a-z]*|%)$/;\n/**\n * Returns a given CSS value minus its unit of measure.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * '--dimension': stripUnit('100px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * --dimension: ${stripUnit('100px')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * '--dimension': 100\n * }\n */\n\nfunction stripUnit(value) {\n if (typeof value !== 'string') return value;\n var matchedValue = value.match(cssRegex$1);\n return matchedValue ? parseFloat(value) : value;\n}\n\n/**\n * Factory function that creates pixel-to-x converters\n * @private\n */\n\nvar pxtoFactory = function pxtoFactory(to) {\n return function (pxval, base) {\n if (base === void 0) {\n base = '16px';\n }\n\n var newPxval = pxval;\n var newBase = base;\n\n if (typeof pxval === 'string') {\n if (!endsWith(pxval, 'px')) {\n throw new PolishedError(69, to, pxval);\n }\n\n newPxval = stripUnit(pxval);\n }\n\n if (typeof base === 'string') {\n if (!endsWith(base, 'px')) {\n throw new PolishedError(70, to, base);\n }\n\n newBase = stripUnit(base);\n }\n\n if (typeof newPxval === 'string') {\n throw new PolishedError(71, pxval, to);\n }\n\n if (typeof newBase === 'string') {\n throw new PolishedError(72, base, to);\n }\n\n return \"\" + newPxval / newBase + to;\n };\n};\n\n/**\n * Convert pixel value to ems. The default base value is 16px, but can be changed by passing a\n * second argument to the function.\n * @function\n * @param {string|number} pxval\n * @param {string|number} [base='16px']\n * @example\n * // Styles as object usage\n * const styles = {\n * 'height': em('16px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * height: ${em('16px')}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'height': '1em'\n * }\n */\n\nvar em = /*#__PURE__*/pxtoFactory('em');\n\nvar cssRegex = /^([+-]?(?:\\d+|\\d*\\.\\d+))([a-z]*|%)$/;\n/**\n * Returns a given CSS value and its unit as elements of an array.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * '--dimension': getValueAndUnit('100px')[0],\n * '--unit': getValueAndUnit('100px')[1],\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * --dimension: ${getValueAndUnit('100px')[0]};\n * --unit: ${getValueAndUnit('100px')[1]};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * '--dimension': 100,\n * '--unit': 'px',\n * }\n */\n\nfunction getValueAndUnit(value) {\n if (typeof value !== 'string') return [value, ''];\n var matchedValue = value.match(cssRegex);\n if (matchedValue) return [parseFloat(value), matchedValue[2]];\n return [value, undefined];\n}\n\n/**\n * Helper for targeting rules in a style block generated by polished modules that need !important-level specificity. Can optionally specify a rule (or rules) to target specific rules.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...important(cover())\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${important(cover())}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * 'position': 'absolute !important',\n * 'top': '0 !important',\n * 'right: '0 !important',\n * 'bottom': '0 !important',\n * 'left: '0 !important'\n * }\n */\n\nfunction important(styleBlock, rules) {\n if (typeof styleBlock !== 'object' || styleBlock === null) {\n throw new PolishedError(75, typeof styleBlock);\n }\n\n var newStyleBlock = {};\n Object.keys(styleBlock).forEach(function (key) {\n if (typeof styleBlock[key] === 'object' && styleBlock[key] !== null) {\n newStyleBlock[key] = important(styleBlock[key], rules);\n } else if (!rules || rules && (rules === key || rules.indexOf(key) >= 0)) {\n newStyleBlock[key] = styleBlock[key] + \" !important\";\n } else {\n newStyleBlock[key] = styleBlock[key];\n }\n });\n return newStyleBlock;\n}\n\nvar ratioNames = {\n minorSecond: 1.067,\n majorSecond: 1.125,\n minorThird: 1.2,\n majorThird: 1.25,\n perfectFourth: 1.333,\n augFourth: 1.414,\n perfectFifth: 1.5,\n minorSixth: 1.6,\n goldenSection: 1.618,\n majorSixth: 1.667,\n minorSeventh: 1.778,\n majorSeventh: 1.875,\n octave: 2,\n majorTenth: 2.5,\n majorEleventh: 2.667,\n majorTwelfth: 3,\n doubleOctave: 4\n};\n\nfunction getRatio(ratioName) {\n return ratioNames[ratioName];\n}\n/**\n * Establish consistent measurements and spacial relationships throughout your projects by incrementing an em or rem value up or down a defined scale. We provide a list of commonly used scales as pre-defined variables.\n * @example\n * // Styles as object usage\n * const styles = {\n * // Increment two steps up the default scale\n * 'fontSize': modularScale(2)\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * // Increment two steps up the default scale\n * fontSize: ${modularScale(2)}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'fontSize': '1.77689em'\n * }\n */\n\n\nfunction modularScale(steps, base, ratio) {\n if (base === void 0) {\n base = '1em';\n }\n\n if (ratio === void 0) {\n ratio = 1.333;\n }\n\n if (typeof steps !== 'number') {\n throw new PolishedError(42);\n }\n\n if (typeof ratio === 'string' && !ratioNames[ratio]) {\n throw new PolishedError(43);\n }\n\n var _ref = typeof base === 'string' ? getValueAndUnit(base) : [base, ''],\n realBase = _ref[0],\n unit = _ref[1];\n\n var realRatio = typeof ratio === 'string' ? getRatio(ratio) : ratio;\n\n if (typeof realBase === 'string') {\n throw new PolishedError(44, base);\n }\n\n return \"\" + realBase * Math.pow(realRatio, steps) + (unit || '');\n}\n\n/**\n * Convert pixel value to rems. The default base value is 16px, but can be changed by passing a\n * second argument to the function.\n * @function\n * @param {string|number} pxval\n * @param {string|number} [base='16px']\n * @example\n * // Styles as object usage\n * const styles = {\n * 'height': rem('16px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * height: ${rem('16px')}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'height': '1rem'\n * }\n */\n\nvar rem = /*#__PURE__*/pxtoFactory('rem');\n\nvar defaultFontSize = 16;\n\nfunction convertBase(base) {\n var deconstructedValue = getValueAndUnit(base);\n\n if (deconstructedValue[1] === 'px') {\n return parseFloat(base);\n }\n\n if (deconstructedValue[1] === '%') {\n return parseFloat(base) / 100 * defaultFontSize;\n }\n\n throw new PolishedError(78, deconstructedValue[1]);\n}\n\nfunction getBaseFromDoc() {\n /* eslint-disable */\n\n /* istanbul ignore next */\n if (typeof document !== 'undefined' && document.documentElement !== null) {\n var rootFontSize = getComputedStyle(document.documentElement).fontSize;\n return rootFontSize ? convertBase(rootFontSize) : defaultFontSize;\n }\n /* eslint-enable */\n\n /* istanbul ignore next */\n\n\n return defaultFontSize;\n}\n/**\n * Convert rem values to px. By default, the base value is pulled from the font-size property on the root element (if it is set in % or px). It defaults to 16px if not found on the root. You can also override the base value by providing your own base in % or px.\n * @example\n * // Styles as object usage\n * const styles = {\n * 'height': remToPx('1.6rem')\n * 'height': remToPx('1.6rem', '10px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * height: ${remToPx('1.6rem')}\n * height: ${remToPx('1.6rem', '10px')}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'height': '25.6px',\n * 'height': '16px',\n * }\n */\n\n\nfunction remToPx(value, base) {\n var deconstructedValue = getValueAndUnit(value);\n\n if (deconstructedValue[1] !== 'rem' && deconstructedValue[1] !== '') {\n throw new PolishedError(77, deconstructedValue[1]);\n }\n\n var newBase = base ? convertBase(base) : getBaseFromDoc();\n return deconstructedValue[0] * newBase + \"px\";\n}\n\nvar functionsMap$3 = {\n back: 'cubic-bezier(0.600, -0.280, 0.735, 0.045)',\n circ: 'cubic-bezier(0.600, 0.040, 0.980, 0.335)',\n cubic: 'cubic-bezier(0.550, 0.055, 0.675, 0.190)',\n expo: 'cubic-bezier(0.950, 0.050, 0.795, 0.035)',\n quad: 'cubic-bezier(0.550, 0.085, 0.680, 0.530)',\n quart: 'cubic-bezier(0.895, 0.030, 0.685, 0.220)',\n quint: 'cubic-bezier(0.755, 0.050, 0.855, 0.060)',\n sine: 'cubic-bezier(0.470, 0.000, 0.745, 0.715)'\n};\n/**\n * String to represent common easing functions as demonstrated here: (github.com/jaukia/easie).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'transitionTimingFunction': easeIn('quad')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * transitionTimingFunction: ${easeIn('quad')};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'transitionTimingFunction': 'cubic-bezier(0.550, 0.085, 0.680, 0.530)',\n * }\n */\n\nfunction easeIn(functionName) {\n return functionsMap$3[functionName.toLowerCase().trim()];\n}\n\nvar functionsMap$2 = {\n back: 'cubic-bezier(0.680, -0.550, 0.265, 1.550)',\n circ: 'cubic-bezier(0.785, 0.135, 0.150, 0.860)',\n cubic: 'cubic-bezier(0.645, 0.045, 0.355, 1.000)',\n expo: 'cubic-bezier(1.000, 0.000, 0.000, 1.000)',\n quad: 'cubic-bezier(0.455, 0.030, 0.515, 0.955)',\n quart: 'cubic-bezier(0.770, 0.000, 0.175, 1.000)',\n quint: 'cubic-bezier(0.860, 0.000, 0.070, 1.000)',\n sine: 'cubic-bezier(0.445, 0.050, 0.550, 0.950)'\n};\n/**\n * String to represent common easing functions as demonstrated here: (github.com/jaukia/easie).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'transitionTimingFunction': easeInOut('quad')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * transitionTimingFunction: ${easeInOut('quad')};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'transitionTimingFunction': 'cubic-bezier(0.455, 0.030, 0.515, 0.955)',\n * }\n */\n\nfunction easeInOut(functionName) {\n return functionsMap$2[functionName.toLowerCase().trim()];\n}\n\nvar functionsMap$1 = {\n back: 'cubic-bezier(0.175, 0.885, 0.320, 1.275)',\n cubic: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)',\n circ: 'cubic-bezier(0.075, 0.820, 0.165, 1.000)',\n expo: 'cubic-bezier(0.190, 1.000, 0.220, 1.000)',\n quad: 'cubic-bezier(0.250, 0.460, 0.450, 0.940)',\n quart: 'cubic-bezier(0.165, 0.840, 0.440, 1.000)',\n quint: 'cubic-bezier(0.230, 1.000, 0.320, 1.000)',\n sine: 'cubic-bezier(0.390, 0.575, 0.565, 1.000)'\n};\n/**\n * String to represent common easing functions as demonstrated here: (github.com/jaukia/easie).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'transitionTimingFunction': easeOut('quad')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * transitionTimingFunction: ${easeOut('quad')};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'transitionTimingFunction': 'cubic-bezier(0.250, 0.460, 0.450, 0.940)',\n * }\n */\n\nfunction easeOut(functionName) {\n return functionsMap$1[functionName.toLowerCase().trim()];\n}\n\n/**\n * Returns a CSS calc formula for linear interpolation of a property between two values. Accepts optional minScreen (defaults to '320px') and maxScreen (defaults to '1200px').\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * fontSize: between('20px', '100px', '400px', '1000px'),\n * fontSize: between('20px', '100px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * fontSize: ${between('20px', '100px', '400px', '1000px')};\n * fontSize: ${between('20px', '100px')}\n * `\n *\n * // CSS as JS Output\n *\n * h1: {\n * 'fontSize': 'calc(-33.33333333333334px + 13.333333333333334vw)',\n * 'fontSize': 'calc(-9.090909090909093px + 9.090909090909092vw)'\n * }\n */\n\nfunction between(fromSize, toSize, minScreen, maxScreen) {\n if (minScreen === void 0) {\n minScreen = '320px';\n }\n\n if (maxScreen === void 0) {\n maxScreen = '1200px';\n }\n\n var _getValueAndUnit = getValueAndUnit(fromSize),\n unitlessFromSize = _getValueAndUnit[0],\n fromSizeUnit = _getValueAndUnit[1];\n\n var _getValueAndUnit2 = getValueAndUnit(toSize),\n unitlessToSize = _getValueAndUnit2[0],\n toSizeUnit = _getValueAndUnit2[1];\n\n var _getValueAndUnit3 = getValueAndUnit(minScreen),\n unitlessMinScreen = _getValueAndUnit3[0],\n minScreenUnit = _getValueAndUnit3[1];\n\n var _getValueAndUnit4 = getValueAndUnit(maxScreen),\n unitlessMaxScreen = _getValueAndUnit4[0],\n maxScreenUnit = _getValueAndUnit4[1];\n\n if (typeof unitlessMinScreen !== 'number' || typeof unitlessMaxScreen !== 'number' || !minScreenUnit || !maxScreenUnit || minScreenUnit !== maxScreenUnit) {\n throw new PolishedError(47);\n }\n\n if (typeof unitlessFromSize !== 'number' || typeof unitlessToSize !== 'number' || fromSizeUnit !== toSizeUnit) {\n throw new PolishedError(48);\n }\n\n if (fromSizeUnit !== minScreenUnit || toSizeUnit !== maxScreenUnit) {\n throw new PolishedError(76);\n }\n\n var slope = (unitlessFromSize - unitlessToSize) / (unitlessMinScreen - unitlessMaxScreen);\n var base = unitlessToSize - slope * unitlessMaxScreen;\n return \"calc(\" + base.toFixed(2) + (fromSizeUnit || '') + \" + \" + (100 * slope).toFixed(2) + \"vw)\";\n}\n\n/**\n * CSS to contain a float (credit to CSSMojo).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...clearFix(),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${clearFix()}\n * `\n *\n * // CSS as JS Output\n *\n * '&::after': {\n * 'clear': 'both',\n * 'content': '\"\"',\n * 'display': 'table'\n * }\n */\nfunction clearFix(parent) {\n var _ref;\n\n if (parent === void 0) {\n parent = '&';\n }\n\n var pseudoSelector = parent + \"::after\";\n return _ref = {}, _ref[pseudoSelector] = {\n clear: 'both',\n content: '\"\"',\n display: 'table'\n }, _ref;\n}\n\n/**\n * CSS to fully cover an area. Can optionally be passed an offset to act as a \"padding\".\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...cover()\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${cover()}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * 'position': 'absolute',\n * 'top': '0',\n * 'right: '0',\n * 'bottom': '0',\n * 'left: '0'\n * }\n */\nfunction cover(offset) {\n if (offset === void 0) {\n offset = 0;\n }\n\n return {\n position: 'absolute',\n top: offset,\n right: offset,\n bottom: offset,\n left: offset\n };\n}\n\n/**\n * CSS to represent truncated text with an ellipsis. You can optionally pass a max-width and number of lines before truncating.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...ellipsis('250px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${ellipsis('250px')}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * 'display': 'inline-block',\n * 'maxWidth': '250px',\n * 'overflow': 'hidden',\n * 'textOverflow': 'ellipsis',\n * 'whiteSpace': 'nowrap',\n * 'wordWrap': 'normal'\n * }\n */\nfunction ellipsis(width, lines) {\n if (lines === void 0) {\n lines = 1;\n }\n\n var styles = {\n display: 'inline-block',\n maxWidth: width || '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n wordWrap: 'normal'\n };\n return lines > 1 ? _extends({}, styles, {\n WebkitBoxOrient: 'vertical',\n WebkitLineClamp: lines,\n display: '-webkit-box',\n whiteSpace: 'normal'\n }) : styles;\n}\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/**\n * Returns a set of media queries that resizes a property (or set of properties) between a provided fromSize and toSize. Accepts optional minScreen (defaults to '320px') and maxScreen (defaults to '1200px') to constrain the interpolation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...fluidRange(\n * {\n * prop: 'padding',\n * fromSize: '20px',\n * toSize: '100px',\n * },\n * '400px',\n * '1000px',\n * )\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${fluidRange(\n * {\n * prop: 'padding',\n * fromSize: '20px',\n * toSize: '100px',\n * },\n * '400px',\n * '1000px',\n * )}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * \"@media (min-width: 1000px)\": Object {\n * \"padding\": \"100px\",\n * },\n * \"@media (min-width: 400px)\": Object {\n * \"padding\": \"calc(-33.33333333333334px + 13.333333333333334vw)\",\n * },\n * \"padding\": \"20px\",\n * }\n */\nfunction fluidRange(cssProp, minScreen, maxScreen) {\n if (minScreen === void 0) {\n minScreen = '320px';\n }\n\n if (maxScreen === void 0) {\n maxScreen = '1200px';\n }\n\n if (!Array.isArray(cssProp) && typeof cssProp !== 'object' || cssProp === null) {\n throw new PolishedError(49);\n }\n\n if (Array.isArray(cssProp)) {\n var mediaQueries = {};\n var fallbacks = {};\n\n for (var _iterator = _createForOfIteratorHelperLoose(cssProp), _step; !(_step = _iterator()).done;) {\n var _extends2, _extends3;\n\n var obj = _step.value;\n\n if (!obj.prop || !obj.fromSize || !obj.toSize) {\n throw new PolishedError(50);\n }\n\n fallbacks[obj.prop] = obj.fromSize;\n mediaQueries[\"@media (min-width: \" + minScreen + \")\"] = _extends({}, mediaQueries[\"@media (min-width: \" + minScreen + \")\"], (_extends2 = {}, _extends2[obj.prop] = between(obj.fromSize, obj.toSize, minScreen, maxScreen), _extends2));\n mediaQueries[\"@media (min-width: \" + maxScreen + \")\"] = _extends({}, mediaQueries[\"@media (min-width: \" + maxScreen + \")\"], (_extends3 = {}, _extends3[obj.prop] = obj.toSize, _extends3));\n }\n\n return _extends({}, fallbacks, mediaQueries);\n } else {\n var _ref, _ref2, _ref3;\n\n if (!cssProp.prop || !cssProp.fromSize || !cssProp.toSize) {\n throw new PolishedError(51);\n }\n\n return _ref3 = {}, _ref3[cssProp.prop] = cssProp.fromSize, _ref3[\"@media (min-width: \" + minScreen + \")\"] = (_ref = {}, _ref[cssProp.prop] = between(cssProp.fromSize, cssProp.toSize, minScreen, maxScreen), _ref), _ref3[\"@media (min-width: \" + maxScreen + \")\"] = (_ref2 = {}, _ref2[cssProp.prop] = cssProp.toSize, _ref2), _ref3;\n }\n}\n\nvar dataURIRegex = /^\\s*data:([a-z]+\\/[a-z-]+(;[a-z-]+=[a-z-]+)?)?(;charset=[a-z0-9-]+)?(;base64)?,[a-z0-9!$&',()*+,;=\\-._~:@/?%\\s]*\\s*$/i;\nvar formatHintMap = {\n woff: 'woff',\n woff2: 'woff2',\n ttf: 'truetype',\n otf: 'opentype',\n eot: 'embedded-opentype',\n svg: 'svg',\n svgz: 'svg'\n};\n\nfunction generateFormatHint(format, formatHint) {\n if (!formatHint) return '';\n return \" format(\\\"\" + formatHintMap[format] + \"\\\")\";\n}\n\nfunction isDataURI(fontFilePath) {\n return !!fontFilePath.replace(/\\s+/g, ' ').match(dataURIRegex);\n}\n\nfunction generateFileReferences(fontFilePath, fileFormats, formatHint) {\n if (isDataURI(fontFilePath)) {\n return \"url(\\\"\" + fontFilePath + \"\\\")\" + generateFormatHint(fileFormats[0], formatHint);\n }\n\n var fileFontReferences = fileFormats.map(function (format) {\n return \"url(\\\"\" + fontFilePath + \".\" + format + \"\\\")\" + generateFormatHint(format, formatHint);\n });\n return fileFontReferences.join(', ');\n}\n\nfunction generateLocalReferences(localFonts) {\n var localFontReferences = localFonts.map(function (font) {\n return \"local(\\\"\" + font + \"\\\")\";\n });\n return localFontReferences.join(', ');\n}\n\nfunction generateSources(fontFilePath, localFonts, fileFormats, formatHint) {\n var fontReferences = [];\n if (localFonts) fontReferences.push(generateLocalReferences(localFonts));\n\n if (fontFilePath) {\n fontReferences.push(generateFileReferences(fontFilePath, fileFormats, formatHint));\n }\n\n return fontReferences.join(', ');\n}\n/**\n * CSS for a @font-face declaration. Defaults to check for local copies of the font on the user's machine. You can disable this by passing `null` to localFonts.\n *\n * @example\n * // Styles as object basic usage\n * const styles = {\n * ...fontFace({\n * 'fontFamily': 'Sans-Pro',\n * 'fontFilePath': 'path/to/file'\n * })\n * }\n *\n * // styled-components basic usage\n * const GlobalStyle = createGlobalStyle`${\n * fontFace({\n * 'fontFamily': 'Sans-Pro',\n * 'fontFilePath': 'path/to/file'\n * }\n * )}`\n *\n * // CSS as JS Output\n *\n * '@font-face': {\n * 'fontFamily': 'Sans-Pro',\n * 'src': 'url(\"path/to/file.eot\"), url(\"path/to/file.woff2\"), url(\"path/to/file.woff\"), url(\"path/to/file.ttf\"), url(\"path/to/file.svg\")',\n * }\n */\n\n\nfunction fontFace(_ref) {\n var fontFamily = _ref.fontFamily,\n fontFilePath = _ref.fontFilePath,\n fontStretch = _ref.fontStretch,\n fontStyle = _ref.fontStyle,\n fontVariant = _ref.fontVariant,\n fontWeight = _ref.fontWeight,\n _ref$fileFormats = _ref.fileFormats,\n fileFormats = _ref$fileFormats === void 0 ? ['eot', 'woff2', 'woff', 'ttf', 'svg'] : _ref$fileFormats,\n _ref$formatHint = _ref.formatHint,\n formatHint = _ref$formatHint === void 0 ? false : _ref$formatHint,\n _ref$localFonts = _ref.localFonts,\n localFonts = _ref$localFonts === void 0 ? [fontFamily] : _ref$localFonts,\n unicodeRange = _ref.unicodeRange,\n fontDisplay = _ref.fontDisplay,\n fontVariationSettings = _ref.fontVariationSettings,\n fontFeatureSettings = _ref.fontFeatureSettings;\n // Error Handling\n if (!fontFamily) throw new PolishedError(55);\n\n if (!fontFilePath && !localFonts) {\n throw new PolishedError(52);\n }\n\n if (localFonts && !Array.isArray(localFonts)) {\n throw new PolishedError(53);\n }\n\n if (!Array.isArray(fileFormats)) {\n throw new PolishedError(54);\n }\n\n var fontFaceDeclaration = {\n '@font-face': {\n fontFamily: fontFamily,\n src: generateSources(fontFilePath, localFonts, fileFormats, formatHint),\n unicodeRange: unicodeRange,\n fontStretch: fontStretch,\n fontStyle: fontStyle,\n fontVariant: fontVariant,\n fontWeight: fontWeight,\n fontDisplay: fontDisplay,\n fontVariationSettings: fontVariationSettings,\n fontFeatureSettings: fontFeatureSettings\n }\n }; // Removes undefined fields for cleaner css object.\n\n return JSON.parse(JSON.stringify(fontFaceDeclaration));\n}\n\n/**\n * CSS to hide text to show a background image in a SEO-friendly way.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'backgroundImage': 'url(logo.png)',\n * ...hideText(),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * backgroundImage: url(logo.png);\n * ${hideText()};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'backgroundImage': 'url(logo.png)',\n * 'textIndent': '101%',\n * 'overflow': 'hidden',\n * 'whiteSpace': 'nowrap',\n * }\n */\nfunction hideText() {\n return {\n textIndent: '101%',\n overflow: 'hidden',\n whiteSpace: 'nowrap'\n };\n}\n\n/**\n * CSS to hide content visually but remain accessible to screen readers.\n * from [HTML5 Boilerplate](https://github.com/h5bp/html5-boilerplate/blob/9a176f57af1cfe8ec70300da4621fb9b07e5fa31/src/css/main.css#L121)\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...hideVisually(),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${hideVisually()};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'border': '0',\n * 'clip': 'rect(0 0 0 0)',\n * 'height': '1px',\n * 'margin': '-1px',\n * 'overflow': 'hidden',\n * 'padding': '0',\n * 'position': 'absolute',\n * 'whiteSpace': 'nowrap',\n * 'width': '1px',\n * }\n */\nfunction hideVisually() {\n return {\n border: '0',\n clip: 'rect(0 0 0 0)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n padding: '0',\n position: 'absolute',\n whiteSpace: 'nowrap',\n width: '1px'\n };\n}\n\n/**\n * Generates a media query to target HiDPI devices.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * [hiDPI(1.5)]: {\n * width: 200px;\n * }\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${hiDPI(1.5)} {\n * width: 200px;\n * }\n * `\n *\n * // CSS as JS Output\n *\n * '@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n * only screen and (min--moz-device-pixel-ratio: 1.5),\n * only screen and (-o-min-device-pixel-ratio: 1.5/1),\n * only screen and (min-resolution: 144dpi),\n * only screen and (min-resolution: 1.5dppx)': {\n * 'width': '200px',\n * }\n */\nfunction hiDPI(ratio) {\n if (ratio === void 0) {\n ratio = 1.3;\n }\n\n return \"\\n @media only screen and (-webkit-min-device-pixel-ratio: \" + ratio + \"),\\n only screen and (min--moz-device-pixel-ratio: \" + ratio + \"),\\n only screen and (-o-min-device-pixel-ratio: \" + ratio + \"/1),\\n only screen and (min-resolution: \" + Math.round(ratio * 96) + \"dpi),\\n only screen and (min-resolution: \" + ratio + \"dppx)\\n \";\n}\n\nfunction constructGradientValue(literals) {\n var template = '';\n\n for (var _len = arguments.length, substitutions = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n substitutions[_key - 1] = arguments[_key];\n }\n\n for (var i = 0; i < literals.length; i += 1) {\n template += literals[i];\n\n if (i === substitutions.length - 1 && substitutions[i]) {\n var definedValues = substitutions.filter(function (substitute) {\n return !!substitute;\n }); // Adds leading coma if properties preceed color-stops\n\n if (definedValues.length > 1) {\n template = template.slice(0, -1);\n template += \", \" + substitutions[i]; // No trailing space if color-stops is the only param provided\n } else if (definedValues.length === 1) {\n template += \"\" + substitutions[i];\n }\n } else if (substitutions[i]) {\n template += substitutions[i] + \" \";\n }\n }\n\n return template.trim();\n}\n\nvar _templateObject$1;\n\n/**\n * CSS for declaring a linear gradient, including a fallback background-color. The fallback is either the first color-stop or an explicitly passed fallback color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...linearGradient({\n colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n toDirection: 'to top right',\n fallback: '#FFF',\n })\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${linearGradient({\n colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n toDirection: 'to top right',\n fallback: '#FFF',\n })}\n *`\n *\n * // CSS as JS Output\n *\n * div: {\n * 'backgroundColor': '#FFF',\n * 'backgroundImage': 'linear-gradient(to top right, #00FFFF 0%, rgba(0, 0, 255, 0) 50%, #0000FF 95%)',\n * }\n */\nfunction linearGradient(_ref) {\n var colorStops = _ref.colorStops,\n fallback = _ref.fallback,\n _ref$toDirection = _ref.toDirection,\n toDirection = _ref$toDirection === void 0 ? '' : _ref$toDirection;\n\n if (!colorStops || colorStops.length < 2) {\n throw new PolishedError(56);\n }\n\n return {\n backgroundColor: fallback || colorStops[0].replace(/,\\s+/g, ',').split(' ')[0].replace(/,(?=\\S)/g, ', '),\n backgroundImage: constructGradientValue(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteralLoose([\"linear-gradient(\", \"\", \")\"])), toDirection, colorStops.join(', ').replace(/,(?=\\S)/g, ', '))\n };\n}\n\n/**\n * CSS to normalize abnormalities across browsers (normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css)\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...normalize(),\n * }\n *\n * // styled-components usage\n * const GlobalStyle = createGlobalStyle`${normalize()}`\n *\n * // CSS as JS Output\n *\n * html {\n * lineHeight: 1.15,\n * textSizeAdjust: 100%,\n * } ...\n */\nfunction normalize() {\n var _ref;\n\n return [(_ref = {\n html: {\n lineHeight: '1.15',\n textSizeAdjust: '100%'\n },\n body: {\n margin: '0'\n },\n main: {\n display: 'block'\n },\n h1: {\n fontSize: '2em',\n margin: '0.67em 0'\n },\n hr: {\n boxSizing: 'content-box',\n height: '0',\n overflow: 'visible'\n },\n pre: {\n fontFamily: 'monospace, monospace',\n fontSize: '1em'\n },\n a: {\n backgroundColor: 'transparent'\n },\n 'abbr[title]': {\n borderBottom: 'none',\n textDecoration: 'underline'\n }\n }, _ref[\"b,\\n strong\"] = {\n fontWeight: 'bolder'\n }, _ref[\"code,\\n kbd,\\n samp\"] = {\n fontFamily: 'monospace, monospace',\n fontSize: '1em'\n }, _ref.small = {\n fontSize: '80%'\n }, _ref[\"sub,\\n sup\"] = {\n fontSize: '75%',\n lineHeight: '0',\n position: 'relative',\n verticalAlign: 'baseline'\n }, _ref.sub = {\n bottom: '-0.25em'\n }, _ref.sup = {\n top: '-0.5em'\n }, _ref.img = {\n borderStyle: 'none'\n }, _ref[\"button,\\n input,\\n optgroup,\\n select,\\n textarea\"] = {\n fontFamily: 'inherit',\n fontSize: '100%',\n lineHeight: '1.15',\n margin: '0'\n }, _ref[\"button,\\n input\"] = {\n overflow: 'visible'\n }, _ref[\"button,\\n select\"] = {\n textTransform: 'none'\n }, _ref[\"button,\\n html [type=\\\"button\\\"],\\n [type=\\\"reset\\\"],\\n [type=\\\"submit\\\"]\"] = {\n WebkitAppearance: 'button'\n }, _ref[\"button::-moz-focus-inner,\\n [type=\\\"button\\\"]::-moz-focus-inner,\\n [type=\\\"reset\\\"]::-moz-focus-inner,\\n [type=\\\"submit\\\"]::-moz-focus-inner\"] = {\n borderStyle: 'none',\n padding: '0'\n }, _ref[\"button:-moz-focusring,\\n [type=\\\"button\\\"]:-moz-focusring,\\n [type=\\\"reset\\\"]:-moz-focusring,\\n [type=\\\"submit\\\"]:-moz-focusring\"] = {\n outline: '1px dotted ButtonText'\n }, _ref.fieldset = {\n padding: '0.35em 0.625em 0.75em'\n }, _ref.legend = {\n boxSizing: 'border-box',\n color: 'inherit',\n display: 'table',\n maxWidth: '100%',\n padding: '0',\n whiteSpace: 'normal'\n }, _ref.progress = {\n verticalAlign: 'baseline'\n }, _ref.textarea = {\n overflow: 'auto'\n }, _ref[\"[type=\\\"checkbox\\\"],\\n [type=\\\"radio\\\"]\"] = {\n boxSizing: 'border-box',\n padding: '0'\n }, _ref[\"[type=\\\"number\\\"]::-webkit-inner-spin-button,\\n [type=\\\"number\\\"]::-webkit-outer-spin-button\"] = {\n height: 'auto'\n }, _ref['[type=\"search\"]'] = {\n WebkitAppearance: 'textfield',\n outlineOffset: '-2px'\n }, _ref['[type=\"search\"]::-webkit-search-decoration'] = {\n WebkitAppearance: 'none'\n }, _ref['::-webkit-file-upload-button'] = {\n WebkitAppearance: 'button',\n font: 'inherit'\n }, _ref.details = {\n display: 'block'\n }, _ref.summary = {\n display: 'list-item'\n }, _ref.template = {\n display: 'none'\n }, _ref['[hidden]'] = {\n display: 'none'\n }, _ref), {\n 'abbr[title]': {\n textDecoration: 'underline dotted'\n }\n }];\n}\n\nvar _templateObject;\n\n/**\n * CSS for declaring a radial gradient, including a fallback background-color. The fallback is either the first color-stop or an explicitly passed fallback color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...radialGradient({\n * colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n * extent: 'farthest-corner at 45px 45px',\n * position: 'center',\n * shape: 'ellipse',\n * })\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${radialGradient({\n * colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n * extent: 'farthest-corner at 45px 45px',\n * position: 'center',\n * shape: 'ellipse',\n * })}\n *`\n *\n * // CSS as JS Output\n *\n * div: {\n * 'backgroundColor': '#00FFFF',\n * 'backgroundImage': 'radial-gradient(center ellipse farthest-corner at 45px 45px, #00FFFF 0%, rgba(0, 0, 255, 0) 50%, #0000FF 95%)',\n * }\n */\nfunction radialGradient(_ref) {\n var colorStops = _ref.colorStops,\n _ref$extent = _ref.extent,\n extent = _ref$extent === void 0 ? '' : _ref$extent,\n fallback = _ref.fallback,\n _ref$position = _ref.position,\n position = _ref$position === void 0 ? '' : _ref$position,\n _ref$shape = _ref.shape,\n shape = _ref$shape === void 0 ? '' : _ref$shape;\n\n if (!colorStops || colorStops.length < 2) {\n throw new PolishedError(57);\n }\n\n return {\n backgroundColor: fallback || colorStops[0].split(' ')[0],\n backgroundImage: constructGradientValue(_templateObject || (_templateObject = _taggedTemplateLiteralLoose([\"radial-gradient(\", \"\", \"\", \"\", \")\"])), position, shape, extent, colorStops.join(', '))\n };\n}\n\n/**\n * A helper to generate a retina background image and non-retina\n * background image. The retina background image will output to a HiDPI media query. The mixin uses\n * a _2x.png filename suffix by default.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...retinaImage('my-img')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${retinaImage('my-img')}\n * `\n *\n * // CSS as JS Output\n * div {\n * backgroundImage: 'url(my-img.png)',\n * '@media only screen and (-webkit-min-device-pixel-ratio: 1.3),\n * only screen and (min--moz-device-pixel-ratio: 1.3),\n * only screen and (-o-min-device-pixel-ratio: 1.3/1),\n * only screen and (min-resolution: 144dpi),\n * only screen and (min-resolution: 1.5dppx)': {\n * backgroundImage: 'url(my-img_2x.png)',\n * }\n * }\n */\nfunction retinaImage(filename, backgroundSize, extension, retinaFilename, retinaSuffix) {\n var _ref;\n\n if (extension === void 0) {\n extension = 'png';\n }\n\n if (retinaSuffix === void 0) {\n retinaSuffix = '_2x';\n }\n\n if (!filename) {\n throw new PolishedError(58);\n } // Replace the dot at the beginning of the passed extension if one exists\n\n\n var ext = extension.replace(/^\\./, '');\n var rFilename = retinaFilename ? retinaFilename + \".\" + ext : \"\" + filename + retinaSuffix + \".\" + ext;\n return _ref = {\n backgroundImage: \"url(\" + filename + \".\" + ext + \")\"\n }, _ref[hiDPI()] = _extends({\n backgroundImage: \"url(\" + rFilename + \")\"\n }, backgroundSize ? {\n backgroundSize: backgroundSize\n } : {}), _ref;\n}\n\n/* eslint-disable key-spacing */\nvar functionsMap = {\n easeInBack: 'cubic-bezier(0.600, -0.280, 0.735, 0.045)',\n easeInCirc: 'cubic-bezier(0.600, 0.040, 0.980, 0.335)',\n easeInCubic: 'cubic-bezier(0.550, 0.055, 0.675, 0.190)',\n easeInExpo: 'cubic-bezier(0.950, 0.050, 0.795, 0.035)',\n easeInQuad: 'cubic-bezier(0.550, 0.085, 0.680, 0.530)',\n easeInQuart: 'cubic-bezier(0.895, 0.030, 0.685, 0.220)',\n easeInQuint: 'cubic-bezier(0.755, 0.050, 0.855, 0.060)',\n easeInSine: 'cubic-bezier(0.470, 0.000, 0.745, 0.715)',\n easeOutBack: 'cubic-bezier(0.175, 0.885, 0.320, 1.275)',\n easeOutCubic: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)',\n easeOutCirc: 'cubic-bezier(0.075, 0.820, 0.165, 1.000)',\n easeOutExpo: 'cubic-bezier(0.190, 1.000, 0.220, 1.000)',\n easeOutQuad: 'cubic-bezier(0.250, 0.460, 0.450, 0.940)',\n easeOutQuart: 'cubic-bezier(0.165, 0.840, 0.440, 1.000)',\n easeOutQuint: 'cubic-bezier(0.230, 1.000, 0.320, 1.000)',\n easeOutSine: 'cubic-bezier(0.390, 0.575, 0.565, 1.000)',\n easeInOutBack: 'cubic-bezier(0.680, -0.550, 0.265, 1.550)',\n easeInOutCirc: 'cubic-bezier(0.785, 0.135, 0.150, 0.860)',\n easeInOutCubic: 'cubic-bezier(0.645, 0.045, 0.355, 1.000)',\n easeInOutExpo: 'cubic-bezier(1.000, 0.000, 0.000, 1.000)',\n easeInOutQuad: 'cubic-bezier(0.455, 0.030, 0.515, 0.955)',\n easeInOutQuart: 'cubic-bezier(0.770, 0.000, 0.175, 1.000)',\n easeInOutQuint: 'cubic-bezier(0.860, 0.000, 0.070, 1.000)',\n easeInOutSine: 'cubic-bezier(0.445, 0.050, 0.550, 0.950)'\n};\n/* eslint-enable key-spacing */\n\nfunction getTimingFunction(functionName) {\n return functionsMap[functionName];\n}\n/**\n * String to represent common easing functions as demonstrated here: (github.com/jaukia/easie).\n *\n * @deprecated - This will be deprecated in v5 in favor of `easeIn`, `easeOut`, `easeInOut`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'transitionTimingFunction': timingFunctions('easeInQuad')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * transitionTimingFunction: ${timingFunctions('easeInQuad')};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'transitionTimingFunction': 'cubic-bezier(0.550, 0.085, 0.680, 0.530)',\n * }\n */\n\n\nfunction timingFunctions(timingFunction) {\n return getTimingFunction(timingFunction);\n}\n\nvar getBorderWidth = function getBorderWidth(pointingDirection, height, width) {\n var fullWidth = \"\" + width[0] + (width[1] || '');\n var halfWidth = \"\" + width[0] / 2 + (width[1] || '');\n var fullHeight = \"\" + height[0] + (height[1] || '');\n var halfHeight = \"\" + height[0] / 2 + (height[1] || '');\n\n switch (pointingDirection) {\n case 'top':\n return \"0 \" + halfWidth + \" \" + fullHeight + \" \" + halfWidth;\n\n case 'topLeft':\n return fullWidth + \" \" + fullHeight + \" 0 0\";\n\n case 'left':\n return halfHeight + \" \" + fullWidth + \" \" + halfHeight + \" 0\";\n\n case 'bottomLeft':\n return fullWidth + \" 0 0 \" + fullHeight;\n\n case 'bottom':\n return fullHeight + \" \" + halfWidth + \" 0 \" + halfWidth;\n\n case 'bottomRight':\n return \"0 0 \" + fullWidth + \" \" + fullHeight;\n\n case 'right':\n return halfHeight + \" 0 \" + halfHeight + \" \" + fullWidth;\n\n case 'topRight':\n default:\n return \"0 \" + fullWidth + \" \" + fullHeight + \" 0\";\n }\n};\n\nvar getBorderColor = function getBorderColor(pointingDirection, foregroundColor) {\n switch (pointingDirection) {\n case 'top':\n case 'bottomRight':\n return {\n borderBottomColor: foregroundColor\n };\n\n case 'right':\n case 'bottomLeft':\n return {\n borderLeftColor: foregroundColor\n };\n\n case 'bottom':\n case 'topLeft':\n return {\n borderTopColor: foregroundColor\n };\n\n case 'left':\n case 'topRight':\n return {\n borderRightColor: foregroundColor\n };\n\n default:\n throw new PolishedError(59);\n }\n};\n/**\n * CSS to represent triangle with any pointing direction with an optional background color.\n *\n * @example\n * // Styles as object usage\n *\n * const styles = {\n * ...triangle({ pointingDirection: 'right', width: '100px', height: '100px', foregroundColor: 'red' })\n * }\n *\n *\n * // styled-components usage\n * const div = styled.div`\n * ${triangle({ pointingDirection: 'right', width: '100px', height: '100px', foregroundColor: 'red' })}\n *\n *\n * // CSS as JS Output\n *\n * div: {\n * 'borderColor': 'transparent transparent transparent red',\n * 'borderStyle': 'solid',\n * 'borderWidth': '50px 0 50px 100px',\n * 'height': '0',\n * 'width': '0',\n * }\n */\n\n\nfunction triangle(_ref) {\n var pointingDirection = _ref.pointingDirection,\n height = _ref.height,\n width = _ref.width,\n foregroundColor = _ref.foregroundColor,\n _ref$backgroundColor = _ref.backgroundColor,\n backgroundColor = _ref$backgroundColor === void 0 ? 'transparent' : _ref$backgroundColor;\n var widthAndUnit = getValueAndUnit(width);\n var heightAndUnit = getValueAndUnit(height);\n\n if (isNaN(heightAndUnit[0]) || isNaN(widthAndUnit[0])) {\n throw new PolishedError(60);\n }\n\n return _extends({\n width: '0',\n height: '0',\n borderColor: backgroundColor\n }, getBorderColor(pointingDirection, foregroundColor), {\n borderStyle: 'solid',\n borderWidth: getBorderWidth(pointingDirection, heightAndUnit, widthAndUnit)\n });\n}\n\n/**\n * Provides an easy way to change the `wordWrap` property.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...wordWrap('break-word')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${wordWrap('break-word')}\n * `\n *\n * // CSS as JS Output\n *\n * const styles = {\n * overflowWrap: 'break-word',\n * wordWrap: 'break-word',\n * wordBreak: 'break-all',\n * }\n */\nfunction wordWrap(wrap) {\n if (wrap === void 0) {\n wrap = 'break-word';\n }\n\n var wordBreak = wrap === 'break-word' ? 'break-all' : wrap;\n return {\n overflowWrap: wrap,\n wordWrap: wrap,\n wordBreak: wordBreak\n };\n}\n\nfunction colorToInt(color) {\n return Math.round(color * 255);\n}\n\nfunction convertToInt(red, green, blue) {\n return colorToInt(red) + \",\" + colorToInt(green) + \",\" + colorToInt(blue);\n}\n\nfunction hslToRgb(hue, saturation, lightness, convert) {\n if (convert === void 0) {\n convert = convertToInt;\n }\n\n if (saturation === 0) {\n // achromatic\n return convert(lightness, lightness, lightness);\n } // formulae from https://en.wikipedia.org/wiki/HSL_and_HSV\n\n\n var huePrime = (hue % 360 + 360) % 360 / 60;\n var chroma = (1 - Math.abs(2 * lightness - 1)) * saturation;\n var secondComponent = chroma * (1 - Math.abs(huePrime % 2 - 1));\n var red = 0;\n var green = 0;\n var blue = 0;\n\n if (huePrime >= 0 && huePrime < 1) {\n red = chroma;\n green = secondComponent;\n } else if (huePrime >= 1 && huePrime < 2) {\n red = secondComponent;\n green = chroma;\n } else if (huePrime >= 2 && huePrime < 3) {\n green = chroma;\n blue = secondComponent;\n } else if (huePrime >= 3 && huePrime < 4) {\n green = secondComponent;\n blue = chroma;\n } else if (huePrime >= 4 && huePrime < 5) {\n red = secondComponent;\n blue = chroma;\n } else if (huePrime >= 5 && huePrime < 6) {\n red = chroma;\n blue = secondComponent;\n }\n\n var lightnessModification = lightness - chroma / 2;\n var finalRed = red + lightnessModification;\n var finalGreen = green + lightnessModification;\n var finalBlue = blue + lightnessModification;\n return convert(finalRed, finalGreen, finalBlue);\n}\n\nvar namedColorMap = {\n aliceblue: 'f0f8ff',\n antiquewhite: 'faebd7',\n aqua: '00ffff',\n aquamarine: '7fffd4',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '000',\n blanchedalmond: 'ffebcd',\n blue: '0000ff',\n blueviolet: '8a2be2',\n brown: 'a52a2a',\n burlywood: 'deb887',\n cadetblue: '5f9ea0',\n chartreuse: '7fff00',\n chocolate: 'd2691e',\n coral: 'ff7f50',\n cornflowerblue: '6495ed',\n cornsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgoldenrod: 'b8860b',\n darkgray: 'a9a9a9',\n darkgreen: '006400',\n darkgrey: 'a9a9a9',\n darkkhaki: 'bdb76b',\n darkmagenta: '8b008b',\n darkolivegreen: '556b2f',\n darkorange: 'ff8c00',\n darkorchid: '9932cc',\n darkred: '8b0000',\n darksalmon: 'e9967a',\n darkseagreen: '8fbc8f',\n darkslateblue: '483d8b',\n darkslategray: '2f4f4f',\n darkslategrey: '2f4f4f',\n darkturquoise: '00ced1',\n darkviolet: '9400d3',\n deeppink: 'ff1493',\n deepskyblue: '00bfff',\n dimgray: '696969',\n dimgrey: '696969',\n dodgerblue: '1e90ff',\n firebrick: 'b22222',\n floralwhite: 'fffaf0',\n forestgreen: '228b22',\n fuchsia: 'ff00ff',\n gainsboro: 'dcdcdc',\n ghostwhite: 'f8f8ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n grey: '808080',\n honeydew: 'f0fff0',\n hotpink: 'ff69b4',\n indianred: 'cd5c5c',\n indigo: '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lavender: 'e6e6fa',\n lavenderblush: 'fff0f5',\n lawngreen: '7cfc00',\n lemonchiffon: 'fffacd',\n lightblue: 'add8e6',\n lightcoral: 'f08080',\n lightcyan: 'e0ffff',\n lightgoldenrodyellow: 'fafad2',\n lightgray: 'd3d3d3',\n lightgreen: '90ee90',\n lightgrey: 'd3d3d3',\n lightpink: 'ffb6c1',\n lightsalmon: 'ffa07a',\n lightseagreen: '20b2aa',\n lightskyblue: '87cefa',\n lightslategray: '789',\n lightslategrey: '789',\n lightsteelblue: 'b0c4de',\n lightyellow: 'ffffe0',\n lime: '0f0',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'f0f',\n maroon: '800000',\n mediumaquamarine: '66cdaa',\n mediumblue: '0000cd',\n mediumorchid: 'ba55d3',\n mediumpurple: '9370db',\n mediumseagreen: '3cb371',\n mediumslateblue: '7b68ee',\n mediumspringgreen: '00fa9a',\n mediumturquoise: '48d1cc',\n mediumvioletred: 'c71585',\n midnightblue: '191970',\n mintcream: 'f5fffa',\n mistyrose: 'ffe4e1',\n moccasin: 'ffe4b5',\n navajowhite: 'ffdead',\n navy: '000080',\n oldlace: 'fdf5e6',\n olive: '808000',\n olivedrab: '6b8e23',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n palegoldenrod: 'eee8aa',\n palegreen: '98fb98',\n paleturquoise: 'afeeee',\n palevioletred: 'db7093',\n papayawhip: 'ffefd5',\n peachpuff: 'ffdab9',\n peru: 'cd853f',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n powderblue: 'b0e0e6',\n purple: '800080',\n rebeccapurple: '639',\n red: 'f00',\n rosybrown: 'bc8f8f',\n royalblue: '4169e1',\n saddlebrown: '8b4513',\n salmon: 'fa8072',\n sandybrown: 'f4a460',\n seagreen: '2e8b57',\n seashell: 'fff5ee',\n sienna: 'a0522d',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n slategrey: '708090',\n snow: 'fffafa',\n springgreen: '00ff7f',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n thistle: 'd8bfd8',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n wheat: 'f5deb3',\n white: 'fff',\n whitesmoke: 'f5f5f5',\n yellow: 'ff0',\n yellowgreen: '9acd32'\n};\n/**\n * Checks if a string is a CSS named color and returns its equivalent hex value, otherwise returns the original color.\n * @private\n */\n\nfunction nameToHex(color) {\n if (typeof color !== 'string') return color;\n var normalizedColorName = color.toLowerCase();\n return namedColorMap[normalizedColorName] ? \"#\" + namedColorMap[normalizedColorName] : color;\n}\n\nvar hexRegex = /^#[a-fA-F0-9]{6}$/;\nvar hexRgbaRegex = /^#[a-fA-F0-9]{8}$/;\nvar reducedHexRegex = /^#[a-fA-F0-9]{3}$/;\nvar reducedRgbaHexRegex = /^#[a-fA-F0-9]{4}$/;\nvar rgbRegex = /^rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/i;\nvar rgbaRegex = /^rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*([-+]?[0-9]*[.]?[0-9]+)\\s*\\)$/i;\nvar hslRegex = /^hsl\\(\\s*(\\d{0,3}[.]?[0-9]+)\\s*,\\s*(\\d{1,3}[.]?[0-9]?)%\\s*,\\s*(\\d{1,3}[.]?[0-9]?)%\\s*\\)$/i;\nvar hslaRegex = /^hsla\\(\\s*(\\d{0,3}[.]?[0-9]+)\\s*,\\s*(\\d{1,3}[.]?[0-9]?)%\\s*,\\s*(\\d{1,3}[.]?[0-9]?)%\\s*,\\s*([-+]?[0-9]*[.]?[0-9]+)\\s*\\)$/i;\n/**\n * Returns an RgbColor or RgbaColor object. This utility function is only useful\n * if want to extract a color component. With the color util `toColorString` you\n * can convert a RgbColor or RgbaColor object back to a string.\n *\n * @example\n * // Assigns `{ red: 255, green: 0, blue: 0 }` to color1\n * const color1 = parseToRgb('rgb(255, 0, 0)');\n * // Assigns `{ red: 92, green: 102, blue: 112, alpha: 0.75 }` to color2\n * const color2 = parseToRgb('hsla(210, 10%, 40%, 0.75)');\n */\n\nfunction parseToRgb(color) {\n if (typeof color !== 'string') {\n throw new PolishedError(3);\n }\n\n var normalizedColor = nameToHex(color);\n\n if (normalizedColor.match(hexRegex)) {\n return {\n red: parseInt(\"\" + normalizedColor[1] + normalizedColor[2], 16),\n green: parseInt(\"\" + normalizedColor[3] + normalizedColor[4], 16),\n blue: parseInt(\"\" + normalizedColor[5] + normalizedColor[6], 16)\n };\n }\n\n if (normalizedColor.match(hexRgbaRegex)) {\n var alpha = parseFloat((parseInt(\"\" + normalizedColor[7] + normalizedColor[8], 16) / 255).toFixed(2));\n return {\n red: parseInt(\"\" + normalizedColor[1] + normalizedColor[2], 16),\n green: parseInt(\"\" + normalizedColor[3] + normalizedColor[4], 16),\n blue: parseInt(\"\" + normalizedColor[5] + normalizedColor[6], 16),\n alpha: alpha\n };\n }\n\n if (normalizedColor.match(reducedHexRegex)) {\n return {\n red: parseInt(\"\" + normalizedColor[1] + normalizedColor[1], 16),\n green: parseInt(\"\" + normalizedColor[2] + normalizedColor[2], 16),\n blue: parseInt(\"\" + normalizedColor[3] + normalizedColor[3], 16)\n };\n }\n\n if (normalizedColor.match(reducedRgbaHexRegex)) {\n var _alpha = parseFloat((parseInt(\"\" + normalizedColor[4] + normalizedColor[4], 16) / 255).toFixed(2));\n\n return {\n red: parseInt(\"\" + normalizedColor[1] + normalizedColor[1], 16),\n green: parseInt(\"\" + normalizedColor[2] + normalizedColor[2], 16),\n blue: parseInt(\"\" + normalizedColor[3] + normalizedColor[3], 16),\n alpha: _alpha\n };\n }\n\n var rgbMatched = rgbRegex.exec(normalizedColor);\n\n if (rgbMatched) {\n return {\n red: parseInt(\"\" + rgbMatched[1], 10),\n green: parseInt(\"\" + rgbMatched[2], 10),\n blue: parseInt(\"\" + rgbMatched[3], 10)\n };\n }\n\n var rgbaMatched = rgbaRegex.exec(normalizedColor.substring(0, 50));\n\n if (rgbaMatched) {\n return {\n red: parseInt(\"\" + rgbaMatched[1], 10),\n green: parseInt(\"\" + rgbaMatched[2], 10),\n blue: parseInt(\"\" + rgbaMatched[3], 10),\n alpha: parseFloat(\"\" + rgbaMatched[4])\n };\n }\n\n var hslMatched = hslRegex.exec(normalizedColor);\n\n if (hslMatched) {\n var hue = parseInt(\"\" + hslMatched[1], 10);\n var saturation = parseInt(\"\" + hslMatched[2], 10) / 100;\n var lightness = parseInt(\"\" + hslMatched[3], 10) / 100;\n var rgbColorString = \"rgb(\" + hslToRgb(hue, saturation, lightness) + \")\";\n var hslRgbMatched = rgbRegex.exec(rgbColorString);\n\n if (!hslRgbMatched) {\n throw new PolishedError(4, normalizedColor, rgbColorString);\n }\n\n return {\n red: parseInt(\"\" + hslRgbMatched[1], 10),\n green: parseInt(\"\" + hslRgbMatched[2], 10),\n blue: parseInt(\"\" + hslRgbMatched[3], 10)\n };\n }\n\n var hslaMatched = hslaRegex.exec(normalizedColor.substring(0, 50));\n\n if (hslaMatched) {\n var _hue = parseInt(\"\" + hslaMatched[1], 10);\n\n var _saturation = parseInt(\"\" + hslaMatched[2], 10) / 100;\n\n var _lightness = parseInt(\"\" + hslaMatched[3], 10) / 100;\n\n var _rgbColorString = \"rgb(\" + hslToRgb(_hue, _saturation, _lightness) + \")\";\n\n var _hslRgbMatched = rgbRegex.exec(_rgbColorString);\n\n if (!_hslRgbMatched) {\n throw new PolishedError(4, normalizedColor, _rgbColorString);\n }\n\n return {\n red: parseInt(\"\" + _hslRgbMatched[1], 10),\n green: parseInt(\"\" + _hslRgbMatched[2], 10),\n blue: parseInt(\"\" + _hslRgbMatched[3], 10),\n alpha: parseFloat(\"\" + hslaMatched[4])\n };\n }\n\n throw new PolishedError(5);\n}\n\nfunction rgbToHsl(color) {\n // make sure rgb are contained in a set of [0, 255]\n var red = color.red / 255;\n var green = color.green / 255;\n var blue = color.blue / 255;\n var max = Math.max(red, green, blue);\n var min = Math.min(red, green, blue);\n var lightness = (max + min) / 2;\n\n if (max === min) {\n // achromatic\n if (color.alpha !== undefined) {\n return {\n hue: 0,\n saturation: 0,\n lightness: lightness,\n alpha: color.alpha\n };\n } else {\n return {\n hue: 0,\n saturation: 0,\n lightness: lightness\n };\n }\n }\n\n var hue;\n var delta = max - min;\n var saturation = lightness > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n\n switch (max) {\n case red:\n hue = (green - blue) / delta + (green < blue ? 6 : 0);\n break;\n\n case green:\n hue = (blue - red) / delta + 2;\n break;\n\n default:\n // blue case\n hue = (red - green) / delta + 4;\n break;\n }\n\n hue *= 60;\n\n if (color.alpha !== undefined) {\n return {\n hue: hue,\n saturation: saturation,\n lightness: lightness,\n alpha: color.alpha\n };\n }\n\n return {\n hue: hue,\n saturation: saturation,\n lightness: lightness\n };\n}\n\n/**\n * Returns an HslColor or HslaColor object. This utility function is only useful\n * if want to extract a color component. With the color util `toColorString` you\n * can convert a HslColor or HslaColor object back to a string.\n *\n * @example\n * // Assigns `{ hue: 0, saturation: 1, lightness: 0.5 }` to color1\n * const color1 = parseToHsl('rgb(255, 0, 0)');\n * // Assigns `{ hue: 128, saturation: 1, lightness: 0.5, alpha: 0.75 }` to color2\n * const color2 = parseToHsl('hsla(128, 100%, 50%, 0.75)');\n */\nfunction parseToHsl(color) {\n // Note: At a later stage we can optimize this function as right now a hsl\n // color would be parsed converted to rgb values and converted back to hsl.\n return rgbToHsl(parseToRgb(color));\n}\n\n/**\n * Reduces hex values if possible e.g. #ff8866 to #f86\n * @private\n */\nvar reduceHexValue = function reduceHexValue(value) {\n if (value.length === 7 && value[1] === value[2] && value[3] === value[4] && value[5] === value[6]) {\n return \"#\" + value[1] + value[3] + value[5];\n }\n\n return value;\n};\n\nfunction numberToHex(value) {\n var hex = value.toString(16);\n return hex.length === 1 ? \"0\" + hex : hex;\n}\n\nfunction colorToHex(color) {\n return numberToHex(Math.round(color * 255));\n}\n\nfunction convertToHex(red, green, blue) {\n return reduceHexValue(\"#\" + colorToHex(red) + colorToHex(green) + colorToHex(blue));\n}\n\nfunction hslToHex(hue, saturation, lightness) {\n return hslToRgb(hue, saturation, lightness, convertToHex);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible hex notation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: hsl(359, 0.75, 0.4),\n * background: hsl({ hue: 360, saturation: 0.75, lightness: 0.4 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${hsl(359, 0.75, 0.4)};\n * background: ${hsl({ hue: 360, saturation: 0.75, lightness: 0.4 })};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#b3191c\";\n * background: \"#b3191c\";\n * }\n */\nfunction hsl(value, saturation, lightness) {\n if (typeof value === 'number' && typeof saturation === 'number' && typeof lightness === 'number') {\n return hslToHex(value, saturation, lightness);\n } else if (typeof value === 'object' && saturation === undefined && lightness === undefined) {\n return hslToHex(value.hue, value.saturation, value.lightness);\n }\n\n throw new PolishedError(1);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible rgba or hex notation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: hsla(359, 0.75, 0.4, 0.7),\n * background: hsla({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0,7 }),\n * background: hsla(359, 0.75, 0.4, 1),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${hsla(359, 0.75, 0.4, 0.7)};\n * background: ${hsla({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0,7 })};\n * background: ${hsla(359, 0.75, 0.4, 1)};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"rgba(179,25,28,0.7)\";\n * background: \"rgba(179,25,28,0.7)\";\n * background: \"#b3191c\";\n * }\n */\nfunction hsla(value, saturation, lightness, alpha) {\n if (typeof value === 'number' && typeof saturation === 'number' && typeof lightness === 'number' && typeof alpha === 'number') {\n return alpha >= 1 ? hslToHex(value, saturation, lightness) : \"rgba(\" + hslToRgb(value, saturation, lightness) + \",\" + alpha + \")\";\n } else if (typeof value === 'object' && saturation === undefined && lightness === undefined && alpha === undefined) {\n return value.alpha >= 1 ? hslToHex(value.hue, value.saturation, value.lightness) : \"rgba(\" + hslToRgb(value.hue, value.saturation, value.lightness) + \",\" + value.alpha + \")\";\n }\n\n throw new PolishedError(2);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible hex notation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: rgb(255, 205, 100),\n * background: rgb({ red: 255, green: 205, blue: 100 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${rgb(255, 205, 100)};\n * background: ${rgb({ red: 255, green: 205, blue: 100 })};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#ffcd64\";\n * background: \"#ffcd64\";\n * }\n */\nfunction rgb(value, green, blue) {\n if (typeof value === 'number' && typeof green === 'number' && typeof blue === 'number') {\n return reduceHexValue(\"#\" + numberToHex(value) + numberToHex(green) + numberToHex(blue));\n } else if (typeof value === 'object' && green === undefined && blue === undefined) {\n return reduceHexValue(\"#\" + numberToHex(value.red) + numberToHex(value.green) + numberToHex(value.blue));\n }\n\n throw new PolishedError(6);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible rgba or hex notation.\n *\n * Can also be used to fade a color by passing a hex value or named CSS color along with an alpha value.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: rgba(255, 205, 100, 0.7),\n * background: rgba({ red: 255, green: 205, blue: 100, alpha: 0.7 }),\n * background: rgba(255, 205, 100, 1),\n * background: rgba('#ffffff', 0.4),\n * background: rgba('black', 0.7),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${rgba(255, 205, 100, 0.7)};\n * background: ${rgba({ red: 255, green: 205, blue: 100, alpha: 0.7 })};\n * background: ${rgba(255, 205, 100, 1)};\n * background: ${rgba('#ffffff', 0.4)};\n * background: ${rgba('black', 0.7)};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"rgba(255,205,100,0.7)\";\n * background: \"rgba(255,205,100,0.7)\";\n * background: \"#ffcd64\";\n * background: \"rgba(255,255,255,0.4)\";\n * background: \"rgba(0,0,0,0.7)\";\n * }\n */\nfunction rgba(firstValue, secondValue, thirdValue, fourthValue) {\n if (typeof firstValue === 'string' && typeof secondValue === 'number') {\n var rgbValue = parseToRgb(firstValue);\n return \"rgba(\" + rgbValue.red + \",\" + rgbValue.green + \",\" + rgbValue.blue + \",\" + secondValue + \")\";\n } else if (typeof firstValue === 'number' && typeof secondValue === 'number' && typeof thirdValue === 'number' && typeof fourthValue === 'number') {\n return fourthValue >= 1 ? rgb(firstValue, secondValue, thirdValue) : \"rgba(\" + firstValue + \",\" + secondValue + \",\" + thirdValue + \",\" + fourthValue + \")\";\n } else if (typeof firstValue === 'object' && secondValue === undefined && thirdValue === undefined && fourthValue === undefined) {\n return firstValue.alpha >= 1 ? rgb(firstValue.red, firstValue.green, firstValue.blue) : \"rgba(\" + firstValue.red + \",\" + firstValue.green + \",\" + firstValue.blue + \",\" + firstValue.alpha + \")\";\n }\n\n throw new PolishedError(7);\n}\n\nvar isRgb = function isRgb(color) {\n return typeof color.red === 'number' && typeof color.green === 'number' && typeof color.blue === 'number' && (typeof color.alpha !== 'number' || typeof color.alpha === 'undefined');\n};\n\nvar isRgba = function isRgba(color) {\n return typeof color.red === 'number' && typeof color.green === 'number' && typeof color.blue === 'number' && typeof color.alpha === 'number';\n};\n\nvar isHsl = function isHsl(color) {\n return typeof color.hue === 'number' && typeof color.saturation === 'number' && typeof color.lightness === 'number' && (typeof color.alpha !== 'number' || typeof color.alpha === 'undefined');\n};\n\nvar isHsla = function isHsla(color) {\n return typeof color.hue === 'number' && typeof color.saturation === 'number' && typeof color.lightness === 'number' && typeof color.alpha === 'number';\n};\n/**\n * Converts a RgbColor, RgbaColor, HslColor or HslaColor object to a color string.\n * This util is useful in case you only know on runtime which color object is\n * used. Otherwise we recommend to rely on `rgb`, `rgba`, `hsl` or `hsla`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: toColorString({ red: 255, green: 205, blue: 100 }),\n * background: toColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 }),\n * background: toColorString({ hue: 240, saturation: 1, lightness: 0.5 }),\n * background: toColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${toColorString({ red: 255, green: 205, blue: 100 })};\n * background: ${toColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 })};\n * background: ${toColorString({ hue: 240, saturation: 1, lightness: 0.5 })};\n * background: ${toColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 })};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#ffcd64\";\n * background: \"rgba(255,205,100,0.72)\";\n * background: \"#00f\";\n * background: \"rgba(179,25,25,0.72)\";\n * }\n */\n\n\nfunction toColorString(color) {\n if (typeof color !== 'object') throw new PolishedError(8);\n if (isRgba(color)) return rgba(color);\n if (isRgb(color)) return rgb(color);\n if (isHsla(color)) return hsla(color);\n if (isHsl(color)) return hsl(color);\n throw new PolishedError(8);\n}\n\n// Type definitions taken from https://github.com/gcanti/flow-static-land/blob/master/src/Fun.js\n// eslint-disable-next-line no-unused-vars\n// eslint-disable-next-line no-unused-vars\n// eslint-disable-next-line no-redeclare\nfunction curried(f, length, acc) {\n return function fn() {\n // eslint-disable-next-line prefer-rest-params\n var combined = acc.concat(Array.prototype.slice.call(arguments));\n return combined.length >= length ? f.apply(this, combined) : curried(f, length, combined);\n };\n} // eslint-disable-next-line no-redeclare\n\n\nfunction curry(f) {\n // eslint-disable-line no-redeclare\n return curried(f, f.length, []);\n}\n\n/**\n * Changes the hue of the color. Hue is a number between 0 to 360. The first\n * argument for adjustHue is the amount of degrees the color is rotated around\n * the color wheel, always producing a positive hue value.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: adjustHue(180, '#448'),\n * background: adjustHue('180', 'rgba(101,100,205,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${adjustHue(180, '#448')};\n * background: ${adjustHue('180', 'rgba(101,100,205,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#888844\";\n * background: \"rgba(136,136,68,0.7)\";\n * }\n */\n\nfunction adjustHue(degree, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n hue: hslColor.hue + parseFloat(degree)\n }));\n} // prettier-ignore\n\n\nvar curriedAdjustHue = /*#__PURE__*/curry\n/* :: */\n(adjustHue);\n\n/**\n * Returns the complement of the provided color. This is identical to adjustHue(180, ).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: complement('#448'),\n * background: complement('rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${complement('#448')};\n * background: ${complement('rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#884\";\n * background: \"rgba(153,153,153,0.7)\";\n * }\n */\n\nfunction complement(color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n hue: (hslColor.hue + 180) % 360\n }));\n}\n\nfunction guard(lowerBoundary, upperBoundary, value) {\n return Math.max(lowerBoundary, Math.min(upperBoundary, value));\n}\n\n/**\n * Returns a string value for the darkened color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: darken(0.2, '#FFCD64'),\n * background: darken('0.2', 'rgba(255,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${darken(0.2, '#FFCD64')};\n * background: ${darken('0.2', 'rgba(255,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#ffbd31\";\n * background: \"rgba(255,189,49,0.7)\";\n * }\n */\n\nfunction darken(amount, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n lightness: guard(0, 1, hslColor.lightness - parseFloat(amount))\n }));\n} // prettier-ignore\n\n\nvar curriedDarken = /*#__PURE__*/curry\n/* :: */\n(darken);\n\n/**\n * Decreases the intensity of a color. Its range is between 0 to 1. The first\n * argument of the desaturate function is the amount by how much the color\n * intensity should be decreased.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: desaturate(0.2, '#CCCD64'),\n * background: desaturate('0.2', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${desaturate(0.2, '#CCCD64')};\n * background: ${desaturate('0.2', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#b8b979\";\n * background: \"rgba(184,185,121,0.7)\";\n * }\n */\n\nfunction desaturate(amount, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n saturation: guard(0, 1, hslColor.saturation - parseFloat(amount))\n }));\n} // prettier-ignore\n\n\nvar curriedDesaturate = /*#__PURE__*/curry\n/* :: */\n(desaturate);\n\n/**\n * Returns a number (float) representing the luminance of a color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: getLuminance('#CCCD64') >= getLuminance('#0000ff') ? '#CCCD64' : '#0000ff',\n * background: getLuminance('rgba(58, 133, 255, 1)') >= getLuminance('rgba(255, 57, 149, 1)') ?\n * 'rgba(58, 133, 255, 1)' :\n * 'rgba(255, 57, 149, 1)',\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${getLuminance('#CCCD64') >= getLuminance('#0000ff') ? '#CCCD64' : '#0000ff'};\n * background: ${getLuminance('rgba(58, 133, 255, 1)') >= getLuminance('rgba(255, 57, 149, 1)') ?\n * 'rgba(58, 133, 255, 1)' :\n * 'rgba(255, 57, 149, 1)'};\n *\n * // CSS in JS Output\n *\n * div {\n * background: \"#CCCD64\";\n * background: \"rgba(58, 133, 255, 1)\";\n * }\n */\n\nfunction getLuminance(color) {\n if (color === 'transparent') return 0;\n var rgbColor = parseToRgb(color);\n\n var _Object$keys$map = Object.keys(rgbColor).map(function (key) {\n var channel = rgbColor[key] / 255;\n return channel <= 0.03928 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4);\n }),\n r = _Object$keys$map[0],\n g = _Object$keys$map[1],\n b = _Object$keys$map[2];\n\n return parseFloat((0.2126 * r + 0.7152 * g + 0.0722 * b).toFixed(3));\n}\n\n/**\n * Returns the contrast ratio between two colors based on\n * [W3's recommended equation for calculating contrast](http://www.w3.org/TR/WCAG20/#contrast-ratiodef).\n *\n * @example\n * const contrastRatio = getContrast('#444', '#fff');\n */\n\nfunction getContrast(color1, color2) {\n var luminance1 = getLuminance(color1);\n var luminance2 = getLuminance(color2);\n return parseFloat((luminance1 > luminance2 ? (luminance1 + 0.05) / (luminance2 + 0.05) : (luminance2 + 0.05) / (luminance1 + 0.05)).toFixed(2));\n}\n\n/**\n * Converts the color to a grayscale, by reducing its saturation to 0.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: grayscale('#CCCD64'),\n * background: grayscale('rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${grayscale('#CCCD64')};\n * background: ${grayscale('rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#999\";\n * background: \"rgba(153,153,153,0.7)\";\n * }\n */\n\nfunction grayscale(color) {\n if (color === 'transparent') return color;\n return toColorString(_extends({}, parseToHsl(color), {\n saturation: 0\n }));\n}\n\n/**\n * Converts a HslColor or HslaColor object to a color string.\n * This util is useful in case you only know on runtime which color object is\n * used. Otherwise we recommend to rely on `hsl` or `hsla`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: hslToColorString({ hue: 240, saturation: 1, lightness: 0.5 }),\n * background: hslToColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${hslToColorString({ hue: 240, saturation: 1, lightness: 0.5 })};\n * background: ${hslToColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 })};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#00f\";\n * background: \"rgba(179,25,25,0.72)\";\n * }\n */\nfunction hslToColorString(color) {\n if (typeof color === 'object' && typeof color.hue === 'number' && typeof color.saturation === 'number' && typeof color.lightness === 'number') {\n if (color.alpha && typeof color.alpha === 'number') {\n return hsla({\n hue: color.hue,\n saturation: color.saturation,\n lightness: color.lightness,\n alpha: color.alpha\n });\n }\n\n return hsl({\n hue: color.hue,\n saturation: color.saturation,\n lightness: color.lightness\n });\n }\n\n throw new PolishedError(45);\n}\n\n/**\n * Inverts the red, green and blue values of a color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: invert('#CCCD64'),\n * background: invert('rgba(101,100,205,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${invert('#CCCD64')};\n * background: ${invert('rgba(101,100,205,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#33329b\";\n * background: \"rgba(154,155,50,0.7)\";\n * }\n */\n\nfunction invert(color) {\n if (color === 'transparent') return color; // parse color string to rgb\n\n var value = parseToRgb(color);\n return toColorString(_extends({}, value, {\n red: 255 - value.red,\n green: 255 - value.green,\n blue: 255 - value.blue\n }));\n}\n\n/**\n * Returns a string value for the lightened color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: lighten(0.2, '#CCCD64'),\n * background: lighten('0.2', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${lighten(0.2, '#FFCD64')};\n * background: ${lighten('0.2', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#e5e6b1\";\n * background: \"rgba(229,230,177,0.7)\";\n * }\n */\n\nfunction lighten(amount, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n lightness: guard(0, 1, hslColor.lightness + parseFloat(amount))\n }));\n} // prettier-ignore\n\n\nvar curriedLighten = /*#__PURE__*/curry\n/* :: */\n(lighten);\n\n/**\n * Determines which contrast guidelines have been met for two colors.\n * Based on the [contrast calculations recommended by W3](https://www.w3.org/WAI/WCAG21/Understanding/contrast-enhanced.html).\n *\n * @example\n * const scores = meetsContrastGuidelines('#444', '#fff');\n */\nfunction meetsContrastGuidelines(color1, color2) {\n var contrastRatio = getContrast(color1, color2);\n return {\n AA: contrastRatio >= 4.5,\n AALarge: contrastRatio >= 3,\n AAA: contrastRatio >= 7,\n AAALarge: contrastRatio >= 4.5\n };\n}\n\n/**\n * Mixes the two provided colors together by calculating the average of each of the RGB components weighted to the first color by the provided weight.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: mix(0.5, '#f00', '#00f')\n * background: mix(0.25, '#f00', '#00f')\n * background: mix('0.5', 'rgba(255, 0, 0, 0.5)', '#00f')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${mix(0.5, '#f00', '#00f')};\n * background: ${mix(0.25, '#f00', '#00f')};\n * background: ${mix('0.5', 'rgba(255, 0, 0, 0.5)', '#00f')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#7f007f\";\n * background: \"#3f00bf\";\n * background: \"rgba(63, 0, 191, 0.75)\";\n * }\n */\n\nfunction mix(weight, color, otherColor) {\n if (color === 'transparent') return otherColor;\n if (otherColor === 'transparent') return color;\n if (weight === 0) return otherColor;\n var parsedColor1 = parseToRgb(color);\n\n var color1 = _extends({}, parsedColor1, {\n alpha: typeof parsedColor1.alpha === 'number' ? parsedColor1.alpha : 1\n });\n\n var parsedColor2 = parseToRgb(otherColor);\n\n var color2 = _extends({}, parsedColor2, {\n alpha: typeof parsedColor2.alpha === 'number' ? parsedColor2.alpha : 1\n }); // The formula is copied from the original Sass implementation:\n // http://sass-lang.com/documentation/Sass/Script/Functions.html#mix-instance_method\n\n\n var alphaDelta = color1.alpha - color2.alpha;\n var x = parseFloat(weight) * 2 - 1;\n var y = x * alphaDelta === -1 ? x : x + alphaDelta;\n var z = 1 + x * alphaDelta;\n var weight1 = (y / z + 1) / 2.0;\n var weight2 = 1 - weight1;\n var mixedColor = {\n red: Math.floor(color1.red * weight1 + color2.red * weight2),\n green: Math.floor(color1.green * weight1 + color2.green * weight2),\n blue: Math.floor(color1.blue * weight1 + color2.blue * weight2),\n alpha: color1.alpha * (parseFloat(weight) / 1.0) + color2.alpha * (1 - parseFloat(weight) / 1.0)\n };\n return rgba(mixedColor);\n} // prettier-ignore\n\n\nvar curriedMix = /*#__PURE__*/curry\n/* :: */\n(mix);\n\n/**\n * Increases the opacity of a color. Its range for the amount is between 0 to 1.\n *\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: opacify(0.1, 'rgba(255, 255, 255, 0.9)');\n * background: opacify(0.2, 'hsla(0, 0%, 100%, 0.5)'),\n * background: opacify('0.5', 'rgba(255, 0, 0, 0.2)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${opacify(0.1, 'rgba(255, 255, 255, 0.9)')};\n * background: ${opacify(0.2, 'hsla(0, 0%, 100%, 0.5)')},\n * background: ${opacify('0.5', 'rgba(255, 0, 0, 0.2)')},\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#fff\";\n * background: \"rgba(255,255,255,0.7)\";\n * background: \"rgba(255,0,0,0.7)\";\n * }\n */\n\nfunction opacify(amount, color) {\n if (color === 'transparent') return color;\n var parsedColor = parseToRgb(color);\n var alpha = typeof parsedColor.alpha === 'number' ? parsedColor.alpha : 1;\n\n var colorWithAlpha = _extends({}, parsedColor, {\n alpha: guard(0, 1, (alpha * 100 + parseFloat(amount) * 100) / 100)\n });\n\n return rgba(colorWithAlpha);\n} // prettier-ignore\n\n\nvar curriedOpacify = /*#__PURE__*/curry\n/* :: */\n(opacify);\n\nvar defaultReturnIfLightColor = '#000';\nvar defaultReturnIfDarkColor = '#fff';\n/**\n * Returns black or white (or optional passed colors) for best\n * contrast depending on the luminosity of the given color.\n * When passing custom return colors, strict mode ensures that the\n * return color always meets or exceeds WCAG level AA or greater. If this test\n * fails, the default return color (black or white) is returned in place of the\n * custom return color. You can optionally turn off strict mode.\n *\n * Follows [W3C specs for readability](https://www.w3.org/TR/WCAG20-TECHS/G18.html).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * color: readableColor('#000'),\n * color: readableColor('black', '#001', '#ff8'),\n * color: readableColor('white', '#001', '#ff8'),\n * color: readableColor('red', '#333', '#ddd', true)\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * color: ${readableColor('#000')};\n * color: ${readableColor('black', '#001', '#ff8')};\n * color: ${readableColor('white', '#001', '#ff8')};\n * color: ${readableColor('red', '#333', '#ddd', true)};\n * `\n *\n * // CSS in JS Output\n * element {\n * color: \"#fff\";\n * color: \"#ff8\";\n * color: \"#001\";\n * color: \"#000\";\n * }\n */\n\nfunction readableColor(color, returnIfLightColor, returnIfDarkColor, strict) {\n if (returnIfLightColor === void 0) {\n returnIfLightColor = defaultReturnIfLightColor;\n }\n\n if (returnIfDarkColor === void 0) {\n returnIfDarkColor = defaultReturnIfDarkColor;\n }\n\n if (strict === void 0) {\n strict = true;\n }\n\n var isColorLight = getLuminance(color) > 0.179;\n var preferredReturnColor = isColorLight ? returnIfLightColor : returnIfDarkColor;\n\n if (!strict || getContrast(color, preferredReturnColor) >= 4.5) {\n return preferredReturnColor;\n }\n\n return isColorLight ? defaultReturnIfLightColor : defaultReturnIfDarkColor;\n}\n\n/**\n * Converts a RgbColor or RgbaColor object to a color string.\n * This util is useful in case you only know on runtime which color object is\n * used. Otherwise we recommend to rely on `rgb` or `rgba`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: rgbToColorString({ red: 255, green: 205, blue: 100 }),\n * background: rgbToColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${rgbToColorString({ red: 255, green: 205, blue: 100 })};\n * background: ${rgbToColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 })};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#ffcd64\";\n * background: \"rgba(255,205,100,0.72)\";\n * }\n */\nfunction rgbToColorString(color) {\n if (typeof color === 'object' && typeof color.red === 'number' && typeof color.green === 'number' && typeof color.blue === 'number') {\n if (typeof color.alpha === 'number') {\n return rgba({\n red: color.red,\n green: color.green,\n blue: color.blue,\n alpha: color.alpha\n });\n }\n\n return rgb({\n red: color.red,\n green: color.green,\n blue: color.blue\n });\n }\n\n throw new PolishedError(46);\n}\n\n/**\n * Increases the intensity of a color. Its range is between 0 to 1. The first\n * argument of the saturate function is the amount by how much the color\n * intensity should be increased.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: saturate(0.2, '#CCCD64'),\n * background: saturate('0.2', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${saturate(0.2, '#FFCD64')};\n * background: ${saturate('0.2', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#e0e250\";\n * background: \"rgba(224,226,80,0.7)\";\n * }\n */\n\nfunction saturate(amount, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n saturation: guard(0, 1, hslColor.saturation + parseFloat(amount))\n }));\n} // prettier-ignore\n\n\nvar curriedSaturate = /*#__PURE__*/curry\n/* :: */\n(saturate);\n\n/**\n * Sets the hue of a color to the provided value. The hue range can be\n * from 0 and 359.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: setHue(42, '#CCCD64'),\n * background: setHue('244', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${setHue(42, '#CCCD64')};\n * background: ${setHue('244', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#cdae64\";\n * background: \"rgba(107,100,205,0.7)\";\n * }\n */\n\nfunction setHue(hue, color) {\n if (color === 'transparent') return color;\n return toColorString(_extends({}, parseToHsl(color), {\n hue: parseFloat(hue)\n }));\n} // prettier-ignore\n\n\nvar curriedSetHue = /*#__PURE__*/curry\n/* :: */\n(setHue);\n\n/**\n * Sets the lightness of a color to the provided value. The lightness range can be\n * from 0 and 1.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: setLightness(0.2, '#CCCD64'),\n * background: setLightness('0.75', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${setLightness(0.2, '#CCCD64')};\n * background: ${setLightness('0.75', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#4d4d19\";\n * background: \"rgba(223,224,159,0.7)\";\n * }\n */\n\nfunction setLightness(lightness, color) {\n if (color === 'transparent') return color;\n return toColorString(_extends({}, parseToHsl(color), {\n lightness: parseFloat(lightness)\n }));\n} // prettier-ignore\n\n\nvar curriedSetLightness = /*#__PURE__*/curry\n/* :: */\n(setLightness);\n\n/**\n * Sets the saturation of a color to the provided value. The saturation range can be\n * from 0 and 1.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: setSaturation(0.2, '#CCCD64'),\n * background: setSaturation('0.75', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${setSaturation(0.2, '#CCCD64')};\n * background: ${setSaturation('0.75', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#adad84\";\n * background: \"rgba(228,229,76,0.7)\";\n * }\n */\n\nfunction setSaturation(saturation, color) {\n if (color === 'transparent') return color;\n return toColorString(_extends({}, parseToHsl(color), {\n saturation: parseFloat(saturation)\n }));\n} // prettier-ignore\n\n\nvar curriedSetSaturation = /*#__PURE__*/curry\n/* :: */\n(setSaturation);\n\n/**\n * Shades a color by mixing it with black. `shade` can produce\n * hue shifts, where as `darken` manipulates the luminance channel and therefore\n * doesn't produce hue shifts.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: shade(0.25, '#00f')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${shade(0.25, '#00f')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#00003f\";\n * }\n */\n\nfunction shade(percentage, color) {\n if (color === 'transparent') return color;\n return curriedMix(parseFloat(percentage), 'rgb(0, 0, 0)', color);\n} // prettier-ignore\n\n\nvar curriedShade = /*#__PURE__*/curry\n/* :: */\n(shade);\n\n/**\n * Tints a color by mixing it with white. `tint` can produce\n * hue shifts, where as `lighten` manipulates the luminance channel and therefore\n * doesn't produce hue shifts.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: tint(0.25, '#00f')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${tint(0.25, '#00f')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#bfbfff\";\n * }\n */\n\nfunction tint(percentage, color) {\n if (color === 'transparent') return color;\n return curriedMix(parseFloat(percentage), 'rgb(255, 255, 255)', color);\n} // prettier-ignore\n\n\nvar curriedTint = /*#__PURE__*/curry\n/* :: */\n(tint);\n\n/**\n * Decreases the opacity of a color. Its range for the amount is between 0 to 1.\n *\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: transparentize(0.1, '#fff');\n * background: transparentize(0.2, 'hsl(0, 0%, 100%)'),\n * background: transparentize('0.5', 'rgba(255, 0, 0, 0.8)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${transparentize(0.1, '#fff')};\n * background: ${transparentize(0.2, 'hsl(0, 0%, 100%)')},\n * background: ${transparentize('0.5', 'rgba(255, 0, 0, 0.8)')},\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"rgba(255,255,255,0.9)\";\n * background: \"rgba(255,255,255,0.8)\";\n * background: \"rgba(255,0,0,0.3)\";\n * }\n */\n\nfunction transparentize(amount, color) {\n if (color === 'transparent') return color;\n var parsedColor = parseToRgb(color);\n var alpha = typeof parsedColor.alpha === 'number' ? parsedColor.alpha : 1;\n\n var colorWithAlpha = _extends({}, parsedColor, {\n alpha: guard(0, 1, +(alpha * 100 - parseFloat(amount) * 100).toFixed(2) / 100)\n });\n\n return rgba(colorWithAlpha);\n} // prettier-ignore\n\n\nvar curriedTransparentize = /*#__PURE__*/curry\n/* :: */\n(transparentize);\n\n/**\n * Shorthand for easily setting the animation property. Allows either multiple arrays with animations\n * or a single animation spread over the arguments.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...animation(['rotate', '1s', 'ease-in-out'], ['colorchange', '2s'])\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${animation(['rotate', '1s', 'ease-in-out'], ['colorchange', '2s'])}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'animation': 'rotate 1s ease-in-out, colorchange 2s'\n * }\n * @example\n * // Styles as object usage\n * const styles = {\n * ...animation('rotate', '1s', 'ease-in-out')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${animation('rotate', '1s', 'ease-in-out')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'animation': 'rotate 1s ease-in-out'\n * }\n */\nfunction animation() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n // Allow single or multiple animations passed\n var multiMode = Array.isArray(args[0]);\n\n if (!multiMode && args.length > 8) {\n throw new PolishedError(64);\n }\n\n var code = args.map(function (arg) {\n if (multiMode && !Array.isArray(arg) || !multiMode && Array.isArray(arg)) {\n throw new PolishedError(65);\n }\n\n if (Array.isArray(arg) && arg.length > 8) {\n throw new PolishedError(66);\n }\n\n return Array.isArray(arg) ? arg.join(' ') : arg;\n }).join(', ');\n return {\n animation: code\n };\n}\n\n/**\n * Shorthand that accepts any number of backgroundImage values as parameters for creating a single background statement.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...backgroundImages('url(\"/image/background.jpg\")', 'linear-gradient(red, green)')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${backgroundImages('url(\"/image/background.jpg\")', 'linear-gradient(red, green)')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'backgroundImage': 'url(\"/image/background.jpg\"), linear-gradient(red, green)'\n * }\n */\nfunction backgroundImages() {\n for (var _len = arguments.length, properties = new Array(_len), _key = 0; _key < _len; _key++) {\n properties[_key] = arguments[_key];\n }\n\n return {\n backgroundImage: properties.join(', ')\n };\n}\n\n/**\n * Shorthand that accepts any number of background values as parameters for creating a single background statement.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...backgrounds('url(\"/image/background.jpg\")', 'linear-gradient(red, green)', 'center no-repeat')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${backgrounds('url(\"/image/background.jpg\")', 'linear-gradient(red, green)', 'center no-repeat')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'background': 'url(\"/image/background.jpg\"), linear-gradient(red, green), center no-repeat'\n * }\n */\nfunction backgrounds() {\n for (var _len = arguments.length, properties = new Array(_len), _key = 0; _key < _len; _key++) {\n properties[_key] = arguments[_key];\n }\n\n return {\n background: properties.join(', ')\n };\n}\n\nvar sideMap = ['top', 'right', 'bottom', 'left'];\n/**\n * Shorthand for the border property that splits out individual properties for use with tools like Fela and Styletron. A side keyword can optionally be passed to target only one side's border properties.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...border('1px', 'solid', 'red')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${border('1px', 'solid', 'red')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderColor': 'red',\n * 'borderStyle': 'solid',\n * 'borderWidth': `1px`,\n * }\n *\n * // Styles as object usage\n * const styles = {\n * ...border('top', '1px', 'solid', 'red')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${border('top', '1px', 'solid', 'red')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopColor': 'red',\n * 'borderTopStyle': 'solid',\n * 'borderTopWidth': `1px`,\n * }\n */\n\nfunction border(sideKeyword) {\n for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n values[_key - 1] = arguments[_key];\n }\n\n if (typeof sideKeyword === 'string' && sideMap.indexOf(sideKeyword) >= 0) {\n var _ref;\n\n return _ref = {}, _ref[\"border\" + capitalizeString(sideKeyword) + \"Width\"] = values[0], _ref[\"border\" + capitalizeString(sideKeyword) + \"Style\"] = values[1], _ref[\"border\" + capitalizeString(sideKeyword) + \"Color\"] = values[2], _ref;\n } else {\n values.unshift(sideKeyword);\n return {\n borderWidth: values[0],\n borderStyle: values[1],\n borderColor: values[2]\n };\n }\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...borderColor('red', 'green', 'blue', 'yellow')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${borderColor('red', 'green', 'blue', 'yellow')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopColor': 'red',\n * 'borderRightColor': 'green',\n * 'borderBottomColor': 'blue',\n * 'borderLeftColor': 'yellow'\n * }\n */\nfunction borderColor() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['borderColor'].concat(values));\n}\n\n/**\n * Shorthand that accepts a value for side and a value for radius and applies the radius value to both corners of the side.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...borderRadius('top', '5px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${borderRadius('top', '5px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopRightRadius': '5px',\n * 'borderTopLeftRadius': '5px',\n * }\n */\nfunction borderRadius(side, radius) {\n var uppercaseSide = capitalizeString(side);\n\n if (!radius && radius !== 0) {\n throw new PolishedError(62);\n }\n\n if (uppercaseSide === 'Top' || uppercaseSide === 'Bottom') {\n var _ref;\n\n return _ref = {}, _ref[\"border\" + uppercaseSide + \"RightRadius\"] = radius, _ref[\"border\" + uppercaseSide + \"LeftRadius\"] = radius, _ref;\n }\n\n if (uppercaseSide === 'Left' || uppercaseSide === 'Right') {\n var _ref2;\n\n return _ref2 = {}, _ref2[\"borderTop\" + uppercaseSide + \"Radius\"] = radius, _ref2[\"borderBottom\" + uppercaseSide + \"Radius\"] = radius, _ref2;\n }\n\n throw new PolishedError(63);\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...borderStyle('solid', 'dashed', 'dotted', 'double')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${borderStyle('solid', 'dashed', 'dotted', 'double')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopStyle': 'solid',\n * 'borderRightStyle': 'dashed',\n * 'borderBottomStyle': 'dotted',\n * 'borderLeftStyle': 'double'\n * }\n */\nfunction borderStyle() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['borderStyle'].concat(values));\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...borderWidth('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${borderWidth('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopWidth': '12px',\n * 'borderRightWidth': '24px',\n * 'borderBottomWidth': '36px',\n * 'borderLeftWidth': '48px'\n * }\n */\nfunction borderWidth() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['borderWidth'].concat(values));\n}\n\nfunction generateSelectors(template, state) {\n var stateSuffix = state ? \":\" + state : '';\n return template(stateSuffix);\n}\n/**\n * Function helper that adds an array of states to a template of selectors. Used in textInputs and buttons.\n * @private\n */\n\n\nfunction statefulSelectors(states, template, stateMap) {\n if (!template) throw new PolishedError(67);\n if (states.length === 0) return generateSelectors(template, null);\n var selectors = [];\n\n for (var i = 0; i < states.length; i += 1) {\n if (stateMap && stateMap.indexOf(states[i]) < 0) {\n throw new PolishedError(68);\n }\n\n selectors.push(generateSelectors(template, states[i]));\n }\n\n selectors = selectors.join(',');\n return selectors;\n}\n\nvar stateMap$1 = [undefined, null, 'active', 'focus', 'hover'];\n\nfunction template$1(state) {\n return \"button\" + state + \",\\n input[type=\\\"button\\\"]\" + state + \",\\n input[type=\\\"reset\\\"]\" + state + \",\\n input[type=\\\"submit\\\"]\" + state;\n}\n/**\n * Populates selectors that target all buttons. You can pass optional states to append to the selectors.\n * @example\n * // Styles as object usage\n * const styles = {\n * [buttons('active')]: {\n * 'border': 'none'\n * }\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * > ${buttons('active')} {\n * border: none;\n * }\n * `\n *\n * // CSS in JS Output\n *\n * 'button:active,\n * 'input[type=\"button\"]:active,\n * 'input[type=\\\"reset\\\"]:active,\n * 'input[type=\\\"submit\\\"]:active: {\n * 'border': 'none'\n * }\n */\n\n\nfunction buttons() {\n for (var _len = arguments.length, states = new Array(_len), _key = 0; _key < _len; _key++) {\n states[_key] = arguments[_key];\n }\n\n return statefulSelectors(states, template$1, stateMap$1);\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...margin('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${margin('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'marginTop': '12px',\n * 'marginRight': '24px',\n * 'marginBottom': '36px',\n * 'marginLeft': '48px'\n * }\n */\nfunction margin() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['margin'].concat(values));\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...padding('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${padding('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'paddingTop': '12px',\n * 'paddingRight': '24px',\n * 'paddingBottom': '36px',\n * 'paddingLeft': '48px'\n * }\n */\nfunction padding() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['padding'].concat(values));\n}\n\nvar positionMap = ['absolute', 'fixed', 'relative', 'static', 'sticky'];\n/**\n * Shorthand accepts up to five values, including null to skip a value, and maps them to their respective directions. The first value can optionally be a position keyword.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...position('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${position('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'top': '12px',\n * 'right': '24px',\n * 'bottom': '36px',\n * 'left': '48px'\n * }\n *\n * // Styles as object usage\n * const styles = {\n * ...position('absolute', '12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${position('absolute', '12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'position': 'absolute',\n * 'top': '12px',\n * 'right': '24px',\n * 'bottom': '36px',\n * 'left': '48px'\n * }\n */\n\nfunction position(firstValue) {\n for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n values[_key - 1] = arguments[_key];\n }\n\n if (positionMap.indexOf(firstValue) >= 0 && firstValue) {\n return _extends({}, directionalProperty.apply(void 0, [''].concat(values)), {\n position: firstValue\n });\n } else {\n return directionalProperty.apply(void 0, ['', firstValue].concat(values));\n }\n}\n\n/**\n * Shorthand to set the height and width properties in a single statement.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...size('300px', '250px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${size('300px', '250px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'height': '300px',\n * 'width': '250px',\n * }\n */\nfunction size(height, width) {\n if (width === void 0) {\n width = height;\n }\n\n return {\n height: height,\n width: width\n };\n}\n\nvar stateMap = [undefined, null, 'active', 'focus', 'hover'];\n\nfunction template(state) {\n return \"input[type=\\\"color\\\"]\" + state + \",\\n input[type=\\\"date\\\"]\" + state + \",\\n input[type=\\\"datetime\\\"]\" + state + \",\\n input[type=\\\"datetime-local\\\"]\" + state + \",\\n input[type=\\\"email\\\"]\" + state + \",\\n input[type=\\\"month\\\"]\" + state + \",\\n input[type=\\\"number\\\"]\" + state + \",\\n input[type=\\\"password\\\"]\" + state + \",\\n input[type=\\\"search\\\"]\" + state + \",\\n input[type=\\\"tel\\\"]\" + state + \",\\n input[type=\\\"text\\\"]\" + state + \",\\n input[type=\\\"time\\\"]\" + state + \",\\n input[type=\\\"url\\\"]\" + state + \",\\n input[type=\\\"week\\\"]\" + state + \",\\n input:not([type])\" + state + \",\\n textarea\" + state;\n}\n/**\n * Populates selectors that target all text inputs. You can pass optional states to append to the selectors.\n * @example\n * // Styles as object usage\n * const styles = {\n * [textInputs('active')]: {\n * 'border': 'none'\n * }\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * > ${textInputs('active')} {\n * border: none;\n * }\n * `\n *\n * // CSS in JS Output\n *\n * 'input[type=\"color\"]:active,\n * input[type=\"date\"]:active,\n * input[type=\"datetime\"]:active,\n * input[type=\"datetime-local\"]:active,\n * input[type=\"email\"]:active,\n * input[type=\"month\"]:active,\n * input[type=\"number\"]:active,\n * input[type=\"password\"]:active,\n * input[type=\"search\"]:active,\n * input[type=\"tel\"]:active,\n * input[type=\"text\"]:active,\n * input[type=\"time\"]:active,\n * input[type=\"url\"]:active,\n * input[type=\"week\"]:active,\n * input:not([type]):active,\n * textarea:active': {\n * 'border': 'none'\n * }\n */\n\n\nfunction textInputs() {\n for (var _len = arguments.length, states = new Array(_len), _key = 0; _key < _len; _key++) {\n states[_key] = arguments[_key];\n }\n\n return statefulSelectors(states, template, stateMap);\n}\n\n/**\n * Accepts any number of transition values as parameters for creating a single transition statement. You may also pass an array of properties as the first parameter that you would like to apply the same transition values to (second parameter).\n * @example\n * // Styles as object usage\n * const styles = {\n * ...transitions('opacity 1.0s ease-in 0s', 'width 2.0s ease-in 2s'),\n * ...transitions(['color', 'background-color'], '2.0s ease-in 2s')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${transitions('opacity 1.0s ease-in 0s', 'width 2.0s ease-in 2s')};\n * ${transitions(['color', 'background-color'], '2.0s ease-in 2s'),};\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'transition': 'opacity 1.0s ease-in 0s, width 2.0s ease-in 2s'\n * 'transition': 'color 2.0s ease-in 2s, background-color 2.0s ease-in 2s',\n * }\n */\n\nfunction transitions() {\n for (var _len = arguments.length, properties = new Array(_len), _key = 0; _key < _len; _key++) {\n properties[_key] = arguments[_key];\n }\n\n if (Array.isArray(properties[0]) && properties.length === 2) {\n var value = properties[1];\n\n if (typeof value !== 'string') {\n throw new PolishedError(61);\n }\n\n var transitionsString = properties[0].map(function (property) {\n return property + \" \" + value;\n }).join(', ');\n return {\n transition: transitionsString\n };\n } else {\n return {\n transition: properties.join(', ')\n };\n }\n}\n\nexport { curriedAdjustHue as adjustHue, animation, backgroundImages, backgrounds, between, border, borderColor, borderRadius, borderStyle, borderWidth, buttons, clearFix, complement, cover, cssVar, curriedDarken as darken, curriedDesaturate as desaturate, directionalProperty, easeIn, easeInOut, easeOut, ellipsis, em, fluidRange, fontFace, getContrast, getLuminance, getValueAndUnit, grayscale, hiDPI, hideText, hideVisually, hsl, hslToColorString, hsla, important, invert, curriedLighten as lighten, linearGradient, margin, math, meetsContrastGuidelines, curriedMix as mix, modularScale, normalize, curriedOpacify as opacify, padding, parseToHsl, parseToRgb, position, radialGradient, readableColor, rem, remToPx, retinaImage, rgb, rgbToColorString, rgba, curriedSaturate as saturate, curriedSetHue as setHue, curriedSetLightness as setLightness, curriedSetSaturation as setSaturation, curriedShade as shade, size, stripUnit, textInputs, timingFunctions, curriedTint as tint, toColorString, transitions, curriedTransparentize as transparentize, triangle, wordWrap };\n","/**\n * The Ease class provides a collection of easing functions for use with tween.js.\n */\nvar Easing = {\n Linear: {\n None: function (amount) {\n return amount;\n },\n },\n Quadratic: {\n In: function (amount) {\n return amount * amount;\n },\n Out: function (amount) {\n return amount * (2 - amount);\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount;\n }\n return -0.5 * (--amount * (amount - 2) - 1);\n },\n },\n Cubic: {\n In: function (amount) {\n return amount * amount * amount;\n },\n Out: function (amount) {\n return --amount * amount * amount + 1;\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount * amount;\n }\n return 0.5 * ((amount -= 2) * amount * amount + 2);\n },\n },\n Quartic: {\n In: function (amount) {\n return amount * amount * amount * amount;\n },\n Out: function (amount) {\n return 1 - --amount * amount * amount * amount;\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount * amount * amount;\n }\n return -0.5 * ((amount -= 2) * amount * amount * amount - 2);\n },\n },\n Quintic: {\n In: function (amount) {\n return amount * amount * amount * amount * amount;\n },\n Out: function (amount) {\n return --amount * amount * amount * amount * amount + 1;\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return 0.5 * amount * amount * amount * amount * amount;\n }\n return 0.5 * ((amount -= 2) * amount * amount * amount * amount + 2);\n },\n },\n Sinusoidal: {\n In: function (amount) {\n return 1 - Math.cos((amount * Math.PI) / 2);\n },\n Out: function (amount) {\n return Math.sin((amount * Math.PI) / 2);\n },\n InOut: function (amount) {\n return 0.5 * (1 - Math.cos(Math.PI * amount));\n },\n },\n Exponential: {\n In: function (amount) {\n return amount === 0 ? 0 : Math.pow(1024, amount - 1);\n },\n Out: function (amount) {\n return amount === 1 ? 1 : 1 - Math.pow(2, -10 * amount);\n },\n InOut: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n if ((amount *= 2) < 1) {\n return 0.5 * Math.pow(1024, amount - 1);\n }\n return 0.5 * (-Math.pow(2, -10 * (amount - 1)) + 2);\n },\n },\n Circular: {\n In: function (amount) {\n return 1 - Math.sqrt(1 - amount * amount);\n },\n Out: function (amount) {\n return Math.sqrt(1 - --amount * amount);\n },\n InOut: function (amount) {\n if ((amount *= 2) < 1) {\n return -0.5 * (Math.sqrt(1 - amount * amount) - 1);\n }\n return 0.5 * (Math.sqrt(1 - (amount -= 2) * amount) + 1);\n },\n },\n Elastic: {\n In: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n return -Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI);\n },\n Out: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n return Math.pow(2, -10 * amount) * Math.sin((amount - 0.1) * 5 * Math.PI) + 1;\n },\n InOut: function (amount) {\n if (amount === 0) {\n return 0;\n }\n if (amount === 1) {\n return 1;\n }\n amount *= 2;\n if (amount < 1) {\n return -0.5 * Math.pow(2, 10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI);\n }\n return 0.5 * Math.pow(2, -10 * (amount - 1)) * Math.sin((amount - 1.1) * 5 * Math.PI) + 1;\n },\n },\n Back: {\n In: function (amount) {\n var s = 1.70158;\n return amount * amount * ((s + 1) * amount - s);\n },\n Out: function (amount) {\n var s = 1.70158;\n return --amount * amount * ((s + 1) * amount + s) + 1;\n },\n InOut: function (amount) {\n var s = 1.70158 * 1.525;\n if ((amount *= 2) < 1) {\n return 0.5 * (amount * amount * ((s + 1) * amount - s));\n }\n return 0.5 * ((amount -= 2) * amount * ((s + 1) * amount + s) + 2);\n },\n },\n Bounce: {\n In: function (amount) {\n return 1 - Easing.Bounce.Out(1 - amount);\n },\n Out: function (amount) {\n if (amount < 1 / 2.75) {\n return 7.5625 * amount * amount;\n }\n else if (amount < 2 / 2.75) {\n return 7.5625 * (amount -= 1.5 / 2.75) * amount + 0.75;\n }\n else if (amount < 2.5 / 2.75) {\n return 7.5625 * (amount -= 2.25 / 2.75) * amount + 0.9375;\n }\n else {\n return 7.5625 * (amount -= 2.625 / 2.75) * amount + 0.984375;\n }\n },\n InOut: function (amount) {\n if (amount < 0.5) {\n return Easing.Bounce.In(amount * 2) * 0.5;\n }\n return Easing.Bounce.Out(amount * 2 - 1) * 0.5 + 0.5;\n },\n },\n};\n\nvar now;\n// Include a performance.now polyfill.\n// In node.js, use process.hrtime.\n// eslint-disable-next-line\n// @ts-ignore\nif (typeof self === 'undefined' && typeof process !== 'undefined' && process.hrtime) {\n now = function () {\n // eslint-disable-next-line\n // @ts-ignore\n var time = process.hrtime();\n // Convert [seconds, nanoseconds] to milliseconds.\n return time[0] * 1000 + time[1] / 1000000;\n };\n}\n// In a browser, use self.performance.now if it is available.\nelse if (typeof self !== 'undefined' && self.performance !== undefined && self.performance.now !== undefined) {\n // This must be bound, because directly assigning this function\n // leads to an invocation exception in Chrome.\n now = self.performance.now.bind(self.performance);\n}\n// Use Date.now if it is available.\nelse if (Date.now !== undefined) {\n now = Date.now;\n}\n// Otherwise, use 'new Date().getTime()'.\nelse {\n now = function () {\n return new Date().getTime();\n };\n}\nvar now$1 = now;\n\n/**\n * Controlling groups of tweens\n *\n * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.\n * In these cases, you may want to create your own smaller groups of tween\n */\nvar Group = /** @class */ (function () {\n function Group() {\n this._tweens = {};\n this._tweensAddedDuringUpdate = {};\n }\n Group.prototype.getAll = function () {\n var _this = this;\n return Object.keys(this._tweens).map(function (tweenId) {\n return _this._tweens[tweenId];\n });\n };\n Group.prototype.removeAll = function () {\n this._tweens = {};\n };\n Group.prototype.add = function (tween) {\n this._tweens[tween.getId()] = tween;\n this._tweensAddedDuringUpdate[tween.getId()] = tween;\n };\n Group.prototype.remove = function (tween) {\n delete this._tweens[tween.getId()];\n delete this._tweensAddedDuringUpdate[tween.getId()];\n };\n Group.prototype.update = function (time, preserve) {\n if (time === void 0) { time = now$1(); }\n if (preserve === void 0) { preserve = false; }\n var tweenIds = Object.keys(this._tweens);\n if (tweenIds.length === 0) {\n return false;\n }\n // Tweens are updated in \"batches\". If you add a new tween during an\n // update, then the new tween will be updated in the next batch.\n // If you remove a tween during an update, it may or may not be updated.\n // However, if the removed tween was added during the current batch,\n // then it will not be updated.\n while (tweenIds.length > 0) {\n this._tweensAddedDuringUpdate = {};\n for (var i = 0; i < tweenIds.length; i++) {\n var tween = this._tweens[tweenIds[i]];\n var autoStart = !preserve;\n if (tween && tween.update(time, autoStart) === false && !preserve) {\n delete this._tweens[tweenIds[i]];\n }\n }\n tweenIds = Object.keys(this._tweensAddedDuringUpdate);\n }\n return true;\n };\n return Group;\n}());\n\n/**\n *\n */\nvar Interpolation = {\n Linear: function (v, k) {\n var m = v.length - 1;\n var f = m * k;\n var i = Math.floor(f);\n var fn = Interpolation.Utils.Linear;\n if (k < 0) {\n return fn(v[0], v[1], f);\n }\n if (k > 1) {\n return fn(v[m], v[m - 1], m - f);\n }\n return fn(v[i], v[i + 1 > m ? m : i + 1], f - i);\n },\n Bezier: function (v, k) {\n var b = 0;\n var n = v.length - 1;\n var pw = Math.pow;\n var bn = Interpolation.Utils.Bernstein;\n for (var i = 0; i <= n; i++) {\n b += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);\n }\n return b;\n },\n CatmullRom: function (v, k) {\n var m = v.length - 1;\n var f = m * k;\n var i = Math.floor(f);\n var fn = Interpolation.Utils.CatmullRom;\n if (v[0] === v[m]) {\n if (k < 0) {\n i = Math.floor((f = m * (1 + k)));\n }\n return fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);\n }\n else {\n if (k < 0) {\n return v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);\n }\n if (k > 1) {\n return v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);\n }\n return fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);\n }\n },\n Utils: {\n Linear: function (p0, p1, t) {\n return (p1 - p0) * t + p0;\n },\n Bernstein: function (n, i) {\n var fc = Interpolation.Utils.Factorial;\n return fc(n) / fc(i) / fc(n - i);\n },\n Factorial: (function () {\n var a = [1];\n return function (n) {\n var s = 1;\n if (a[n]) {\n return a[n];\n }\n for (var i = n; i > 1; i--) {\n s *= i;\n }\n a[n] = s;\n return s;\n };\n })(),\n CatmullRom: function (p0, p1, p2, p3, t) {\n var v0 = (p2 - p0) * 0.5;\n var v1 = (p3 - p1) * 0.5;\n var t2 = t * t;\n var t3 = t * t2;\n return (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\n },\n },\n};\n\n/**\n * Utils\n */\nvar Sequence = /** @class */ (function () {\n function Sequence() {\n }\n Sequence.nextId = function () {\n return Sequence._nextId++;\n };\n Sequence._nextId = 0;\n return Sequence;\n}());\n\nvar mainGroup = new Group();\n\n/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\nvar Tween = /** @class */ (function () {\n function Tween(_object, _group) {\n if (_group === void 0) { _group = mainGroup; }\n this._object = _object;\n this._group = _group;\n this._isPaused = false;\n this._pauseStart = 0;\n this._valuesStart = {};\n this._valuesEnd = {};\n this._valuesStartRepeat = {};\n this._duration = 1000;\n this._initialRepeat = 0;\n this._repeat = 0;\n this._yoyo = false;\n this._isPlaying = false;\n this._reversed = false;\n this._delayTime = 0;\n this._startTime = 0;\n this._easingFunction = Easing.Linear.None;\n this._interpolationFunction = Interpolation.Linear;\n this._chainedTweens = [];\n this._onStartCallbackFired = false;\n this._id = Sequence.nextId();\n this._isChainStopped = false;\n this._goToEnd = false;\n }\n Tween.prototype.getId = function () {\n return this._id;\n };\n Tween.prototype.isPlaying = function () {\n return this._isPlaying;\n };\n Tween.prototype.isPaused = function () {\n return this._isPaused;\n };\n Tween.prototype.to = function (properties, duration) {\n // TODO? restore this, then update the 07_dynamic_to example to set fox\n // tween's to on each update. That way the behavior is opt-in (there's\n // currently no opt-out).\n // for (const prop in properties) this._valuesEnd[prop] = properties[prop]\n this._valuesEnd = Object.create(properties);\n if (duration !== undefined) {\n this._duration = duration;\n }\n return this;\n };\n Tween.prototype.duration = function (d) {\n this._duration = d;\n return this;\n };\n Tween.prototype.start = function (time) {\n if (this._isPlaying) {\n return this;\n }\n // eslint-disable-next-line\n this._group && this._group.add(this);\n this._repeat = this._initialRepeat;\n if (this._reversed) {\n // If we were reversed (f.e. using the yoyo feature) then we need to\n // flip the tween direction back to forward.\n this._reversed = false;\n for (var property in this._valuesStartRepeat) {\n this._swapEndStartRepeatValues(property);\n this._valuesStart[property] = this._valuesStartRepeat[property];\n }\n }\n this._isPlaying = true;\n this._isPaused = false;\n this._onStartCallbackFired = false;\n this._isChainStopped = false;\n this._startTime = time !== undefined ? (typeof time === 'string' ? now$1() + parseFloat(time) : time) : now$1();\n this._startTime += this._delayTime;\n this._setupProperties(this._object, this._valuesStart, this._valuesEnd, this._valuesStartRepeat);\n return this;\n };\n Tween.prototype._setupProperties = function (_object, _valuesStart, _valuesEnd, _valuesStartRepeat) {\n for (var property in _valuesEnd) {\n var startValue = _object[property];\n var startValueIsArray = Array.isArray(startValue);\n var propType = startValueIsArray ? 'array' : typeof startValue;\n var isInterpolationList = !startValueIsArray && Array.isArray(_valuesEnd[property]);\n // If `to()` specifies a property that doesn't exist in the source object,\n // we should not set that property in the object\n if (propType === 'undefined' || propType === 'function') {\n continue;\n }\n // Check if an Array was provided as property value\n if (isInterpolationList) {\n var endValues = _valuesEnd[property];\n if (endValues.length === 0) {\n continue;\n }\n // handle an array of relative values\n endValues = endValues.map(this._handleRelativeValue.bind(this, startValue));\n // Create a local copy of the Array with the start value at the front\n _valuesEnd[property] = [startValue].concat(endValues);\n }\n // handle the deepness of the values\n if ((propType === 'object' || startValueIsArray) && startValue && !isInterpolationList) {\n _valuesStart[property] = startValueIsArray ? [] : {};\n // eslint-disable-next-line\n for (var prop in startValue) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _valuesStart[property][prop] = startValue[prop];\n }\n _valuesStartRepeat[property] = startValueIsArray ? [] : {}; // TODO? repeat nested values? And yoyo? And array values?\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n this._setupProperties(startValue, _valuesStart[property], _valuesEnd[property], _valuesStartRepeat[property]);\n }\n else {\n // Save the starting value, but only once.\n if (typeof _valuesStart[property] === 'undefined') {\n _valuesStart[property] = startValue;\n }\n if (!startValueIsArray) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings\n }\n if (isInterpolationList) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _valuesStartRepeat[property] = _valuesEnd[property].slice().reverse();\n }\n else {\n _valuesStartRepeat[property] = _valuesStart[property] || 0;\n }\n }\n }\n };\n Tween.prototype.stop = function () {\n if (!this._isChainStopped) {\n this._isChainStopped = true;\n this.stopChainedTweens();\n }\n if (!this._isPlaying) {\n return this;\n }\n // eslint-disable-next-line\n this._group && this._group.remove(this);\n this._isPlaying = false;\n this._isPaused = false;\n if (this._onStopCallback) {\n this._onStopCallback(this._object);\n }\n return this;\n };\n Tween.prototype.end = function () {\n this._goToEnd = true;\n this.update(Infinity);\n return this;\n };\n Tween.prototype.pause = function (time) {\n if (time === void 0) { time = now$1(); }\n if (this._isPaused || !this._isPlaying) {\n return this;\n }\n this._isPaused = true;\n this._pauseStart = time;\n // eslint-disable-next-line\n this._group && this._group.remove(this);\n return this;\n };\n Tween.prototype.resume = function (time) {\n if (time === void 0) { time = now$1(); }\n if (!this._isPaused || !this._isPlaying) {\n return this;\n }\n this._isPaused = false;\n this._startTime += time - this._pauseStart;\n this._pauseStart = 0;\n // eslint-disable-next-line\n this._group && this._group.add(this);\n return this;\n };\n Tween.prototype.stopChainedTweens = function () {\n for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n this._chainedTweens[i].stop();\n }\n return this;\n };\n Tween.prototype.group = function (group) {\n this._group = group;\n return this;\n };\n Tween.prototype.delay = function (amount) {\n this._delayTime = amount;\n return this;\n };\n Tween.prototype.repeat = function (times) {\n this._initialRepeat = times;\n this._repeat = times;\n return this;\n };\n Tween.prototype.repeatDelay = function (amount) {\n this._repeatDelayTime = amount;\n return this;\n };\n Tween.prototype.yoyo = function (yoyo) {\n this._yoyo = yoyo;\n return this;\n };\n Tween.prototype.easing = function (easingFunction) {\n this._easingFunction = easingFunction;\n return this;\n };\n Tween.prototype.interpolation = function (interpolationFunction) {\n this._interpolationFunction = interpolationFunction;\n return this;\n };\n Tween.prototype.chain = function () {\n var tweens = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n tweens[_i] = arguments[_i];\n }\n this._chainedTweens = tweens;\n return this;\n };\n Tween.prototype.onStart = function (callback) {\n this._onStartCallback = callback;\n return this;\n };\n Tween.prototype.onUpdate = function (callback) {\n this._onUpdateCallback = callback;\n return this;\n };\n Tween.prototype.onRepeat = function (callback) {\n this._onRepeatCallback = callback;\n return this;\n };\n Tween.prototype.onComplete = function (callback) {\n this._onCompleteCallback = callback;\n return this;\n };\n Tween.prototype.onStop = function (callback) {\n this._onStopCallback = callback;\n return this;\n };\n /**\n * @returns true if the tween is still playing after the update, false\n * otherwise (calling update on a paused tween still returns true because\n * it is still playing, just paused).\n */\n Tween.prototype.update = function (time, autoStart) {\n if (time === void 0) { time = now$1(); }\n if (autoStart === void 0) { autoStart = true; }\n if (this._isPaused)\n return true;\n var property;\n var elapsed;\n var endTime = this._startTime + this._duration;\n if (!this._goToEnd && !this._isPlaying) {\n if (time > endTime)\n return false;\n if (autoStart)\n this.start(time);\n }\n this._goToEnd = false;\n if (time < this._startTime) {\n return true;\n }\n if (this._onStartCallbackFired === false) {\n if (this._onStartCallback) {\n this._onStartCallback(this._object);\n }\n this._onStartCallbackFired = true;\n }\n elapsed = (time - this._startTime) / this._duration;\n elapsed = this._duration === 0 || elapsed > 1 ? 1 : elapsed;\n var value = this._easingFunction(elapsed);\n // properties transformations\n this._updateProperties(this._object, this._valuesStart, this._valuesEnd, value);\n if (this._onUpdateCallback) {\n this._onUpdateCallback(this._object, elapsed);\n }\n if (elapsed === 1) {\n if (this._repeat > 0) {\n if (isFinite(this._repeat)) {\n this._repeat--;\n }\n // Reassign starting values, restart by making startTime = now\n for (property in this._valuesStartRepeat) {\n if (!this._yoyo && typeof this._valuesEnd[property] === 'string') {\n this._valuesStartRepeat[property] =\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n this._valuesStartRepeat[property] + parseFloat(this._valuesEnd[property]);\n }\n if (this._yoyo) {\n this._swapEndStartRepeatValues(property);\n }\n this._valuesStart[property] = this._valuesStartRepeat[property];\n }\n if (this._yoyo) {\n this._reversed = !this._reversed;\n }\n if (this._repeatDelayTime !== undefined) {\n this._startTime = time + this._repeatDelayTime;\n }\n else {\n this._startTime = time + this._delayTime;\n }\n if (this._onRepeatCallback) {\n this._onRepeatCallback(this._object);\n }\n return true;\n }\n else {\n if (this._onCompleteCallback) {\n this._onCompleteCallback(this._object);\n }\n for (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n // Make the chained tweens start exactly at the time they should,\n // even if the `update()` method was called way past the duration of the tween\n this._chainedTweens[i].start(this._startTime + this._duration);\n }\n this._isPlaying = false;\n return false;\n }\n }\n return true;\n };\n Tween.prototype._updateProperties = function (_object, _valuesStart, _valuesEnd, value) {\n for (var property in _valuesEnd) {\n // Don't update properties that do not exist in the source object\n if (_valuesStart[property] === undefined) {\n continue;\n }\n var start = _valuesStart[property] || 0;\n var end = _valuesEnd[property];\n var startIsArray = Array.isArray(_object[property]);\n var endIsArray = Array.isArray(end);\n var isInterpolationList = !startIsArray && endIsArray;\n if (isInterpolationList) {\n _object[property] = this._interpolationFunction(end, value);\n }\n else if (typeof end === 'object' && end) {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n this._updateProperties(_object[property], start, end, value);\n }\n else {\n // Parses relative end values with start as base (e.g.: +10, -3)\n end = this._handleRelativeValue(start, end);\n // Protect against non numeric properties.\n if (typeof end === 'number') {\n // eslint-disable-next-line\n // @ts-ignore FIXME?\n _object[property] = start + (end - start) * value;\n }\n }\n }\n };\n Tween.prototype._handleRelativeValue = function (start, end) {\n if (typeof end !== 'string') {\n return end;\n }\n if (end.charAt(0) === '+' || end.charAt(0) === '-') {\n return start + parseFloat(end);\n }\n else {\n return parseFloat(end);\n }\n };\n Tween.prototype._swapEndStartRepeatValues = function (property) {\n var tmp = this._valuesStartRepeat[property];\n var endValue = this._valuesEnd[property];\n if (typeof endValue === 'string') {\n this._valuesStartRepeat[property] = this._valuesStartRepeat[property] + parseFloat(endValue);\n }\n else {\n this._valuesStartRepeat[property] = this._valuesEnd[property];\n }\n this._valuesEnd[property] = tmp;\n };\n return Tween;\n}());\n\nvar VERSION = '18.6.4';\n\n/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\nvar nextId = Sequence.nextId;\n/**\n * Controlling groups of tweens\n *\n * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.\n * In these cases, you may want to create your own smaller groups of tweens.\n */\nvar TWEEN = mainGroup;\n// This is the best way to export things in a way that's compatible with both ES\n// Modules and CommonJS, without build hacks, and so as not to break the\n// existing API.\n// https://github.com/rollup/rollup/issues/1961#issuecomment-423037881\nvar getAll = TWEEN.getAll.bind(TWEEN);\nvar removeAll = TWEEN.removeAll.bind(TWEEN);\nvar add = TWEEN.add.bind(TWEEN);\nvar remove = TWEEN.remove.bind(TWEEN);\nvar update = TWEEN.update.bind(TWEEN);\nvar exports = {\n Easing: Easing,\n Group: Group,\n Interpolation: Interpolation,\n now: now$1,\n Sequence: Sequence,\n nextId: nextId,\n Tween: Tween,\n VERSION: VERSION,\n getAll: getAll,\n removeAll: removeAll,\n add: add,\n remove: remove,\n update: update,\n};\n\nexport default exports;\nexport { Easing, Group, Interpolation, Sequence, Tween, VERSION, add, getAll, nextId, now$1 as now, remove, removeAll, update };\n","import { WebGLRenderer, Scene, OrthographicCamera, Raycaster, TextureLoader, Vector2, Vector3, Box3, Color, Mesh, SphereGeometry, MeshBasicMaterial, BackSide, EventDispatcher, MOUSE, Quaternion, Spherical, Clock } from 'three';\nimport { TrackballControls } from 'three/examples/jsm/controls/TrackballControls.js';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\nimport { FlyControls } from 'three/examples/jsm/controls/FlyControls.js';\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';\nimport { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';\nimport { parseToRgb, opacify } from 'polished';\nimport TWEEN from '@tweenjs/tween.js';\nimport accessorFn from 'accessor-fn';\nimport Kapsule from 'kapsule';\n\nfunction styleInject(css, ref) {\n if (ref === void 0) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') {\n return;\n }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar css_248z = \".scene-nav-info {\\n bottom: 5px;\\n width: 100%;\\n text-align: center;\\n color: slategrey;\\n opacity: 0.7;\\n font-size: 10px;\\n}\\n\\n.scene-tooltip {\\n color: lavender;\\n font-size: 15px;\\n}\\n\\n.scene-nav-info, .scene-tooltip {\\n position: absolute;\\n font-family: sans-serif;\\n pointer-events: none;\\n}\\n\\n.scene-container canvas:focus {\\n outline: none;\\n}\";\nstyleInject(css_248z);\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar three = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists\n: {\n WebGLRenderer: WebGLRenderer,\n Scene: Scene,\n // PerspectiveCamera,\n OrthographicCamera: OrthographicCamera,\n Raycaster: Raycaster,\n TextureLoader: TextureLoader,\n Vector2: Vector2,\n Vector3: Vector3,\n Box3: Box3,\n Color: Color,\n Mesh: Mesh,\n SphereGeometry: SphereGeometry,\n MeshBasicMaterial: MeshBasicMaterial,\n BackSide: BackSide,\n EventDispatcher: EventDispatcher,\n MOUSE: MOUSE,\n Quaternion: Quaternion,\n Spherical: Spherical,\n Clock: Clock\n};\nvar threeRenderObjects = Kapsule({\n props: {\n width: {\n \"default\": window.innerWidth,\n onChange: function onChange(width, state, prevWidth) {\n isNaN(width) && (state.width = prevWidth);\n }\n },\n height: {\n \"default\": window.innerHeight,\n onChange: function onChange(height, state, prevHeight) {\n isNaN(height) && (state.height = prevHeight);\n }\n },\n backgroundColor: {\n \"default\": '#000011'\n },\n backgroundImageUrl: {},\n onBackgroundImageLoaded: {},\n showNavInfo: {\n \"default\": true\n },\n skyRadius: {\n \"default\": 50000\n },\n objects: {\n \"default\": []\n },\n enablePointerInteraction: {\n \"default\": true,\n onChange: function onChange(_, state) {\n // Reset hover state\n state.hoverObj = null;\n if (state.toolTipElem) state.toolTipElem.innerHTML = '';\n },\n triggerUpdate: false\n },\n lineHoverPrecision: {\n \"default\": 1,\n triggerUpdate: false\n },\n hoverOrderComparator: {\n \"default\": function _default() {\n return -1;\n },\n triggerUpdate: false\n },\n // keep existing order by default\n hoverFilter: {\n \"default\": function _default() {\n return true;\n },\n triggerUpdate: false\n },\n // exclude objects from interaction\n tooltipContent: {\n triggerUpdate: false\n },\n hoverDuringDrag: {\n \"default\": false,\n triggerUpdate: false\n },\n clickAfterDrag: {\n \"default\": false,\n triggerUpdate: false\n },\n onHover: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onClick: {\n \"default\": function _default() {},\n triggerUpdate: false\n },\n onRightClick: {\n triggerUpdate: false\n }\n },\n methods: {\n tick: function tick(state) {\n if (state.initialised) {\n state.controls.update && state.controls.update(state.clock.getDelta()); // timedelta is required for fly controls\n\n state.postProcessingComposer ? state.postProcessingComposer.render() // if using postprocessing, switch the output to it\n : state.renderer.render(state.scene, state.camera);\n state.extraRenderers.forEach(function (r) {\n return r.render(state.scene, state.camera);\n });\n\n if (state.enablePointerInteraction) {\n // Update tooltip and trigger onHover events\n var topObject = null;\n\n if (state.hoverDuringDrag || !state.isPointerDragging) {\n var intersects = this.intersectingObjects(state.pointerPos.x, state.pointerPos.y).filter(function (d) {\n return state.hoverFilter(d.object);\n }).sort(function (a, b) {\n return state.hoverOrderComparator(a.object, b.object);\n });\n var topIntersect = intersects.length ? intersects[0] : null;\n topObject = topIntersect ? topIntersect.object : null;\n state.intersectionPoint = topIntersect ? topIntersect.point : null;\n }\n\n if (topObject !== state.hoverObj) {\n state.onHover(topObject, state.hoverObj);\n state.toolTipElem.innerHTML = topObject ? accessorFn(state.tooltipContent)(topObject) || '' : '';\n state.hoverObj = topObject;\n }\n }\n\n TWEEN.update(); // update camera animation tweens\n }\n\n return this;\n },\n getPointerPos: function getPointerPos(state) {\n var _state$pointerPos = state.pointerPos,\n x = _state$pointerPos.x,\n y = _state$pointerPos.y;\n return {\n x: x,\n y: y\n };\n },\n cameraPosition: function cameraPosition(state, position, lookAt, transitionDuration) {\n var camera = state.camera; // Setter\n\n if (position && state.initialised) {\n var finalPos = position;\n var finalLookAt = lookAt || {\n x: 0,\n y: 0,\n z: 0\n };\n\n if (!transitionDuration) {\n // no animation\n setCameraPos(finalPos);\n setLookAt(finalLookAt);\n } else {\n var camPos = Object.assign({}, camera.position);\n var camLookAt = getLookAt();\n new TWEEN.Tween(camPos).to(finalPos, transitionDuration).easing(TWEEN.Easing.Quadratic.Out).onUpdate(setCameraPos).start(); // Face direction in 1/3rd of time\n\n new TWEEN.Tween(camLookAt).to(finalLookAt, transitionDuration / 3).easing(TWEEN.Easing.Quadratic.Out).onUpdate(setLookAt).start();\n }\n\n return this;\n } // Getter\n\n\n return Object.assign({}, camera.position, {\n lookAt: getLookAt()\n }); //\n\n function setCameraPos(pos) {\n var x = pos.x,\n y = pos.y,\n z = pos.z;\n if (x !== undefined) camera.position.x = x;\n if (y !== undefined) camera.position.y = y;\n if (z !== undefined) camera.position.z = z;\n }\n\n function setLookAt(lookAt) {\n state.controls.target = new three.Vector3(lookAt.x, lookAt.y, lookAt.z);\n }\n\n function getLookAt() {\n return Object.assign(new three.Vector3(0, 0, -1000).applyQuaternion(camera.quaternion).add(camera.position));\n }\n },\n zoomToFit: function zoomToFit(state) {\n var transitionDuration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var padding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;\n\n for (var _len = arguments.length, bboxArgs = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n bboxArgs[_key - 3] = arguments[_key];\n }\n\n return this.fitToBbox(this.getBbox.apply(this, bboxArgs), transitionDuration, padding);\n },\n fitToBbox: function fitToBbox(state, bbox) {\n var transitionDuration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var padding = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;\n // based on https://discourse.threejs.org/t/camera-zoom-to-fit-object/936/24\n var camera = state.camera;\n\n if (bbox) {\n var center = new three.Vector3(0, 0, 0); // reset camera aim to center\n\n var maxBoxSide = Math.max.apply(Math, _toConsumableArray(Object.entries(bbox).map(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n coordType = _ref2[0],\n coords = _ref2[1];\n\n return Math.max.apply(Math, _toConsumableArray(coords.map(function (c) {\n return Math.abs(center[coordType] - c);\n })));\n }))) * 2; // find distance that fits whole bbox within padded fov\n\n var paddedFov = (1 - padding * 2 / state.height) * camera.fov;\n var fitHeightDistance = maxBoxSide / Math.atan(paddedFov * Math.PI / 180);\n var fitWidthDistance = fitHeightDistance / camera.aspect;\n var distance = Math.max(fitHeightDistance, fitWidthDistance);\n\n if (distance > 0) {\n var newCameraPosition = center.clone().sub(camera.position).normalize().multiplyScalar(-distance);\n this.cameraPosition(newCameraPosition, center, transitionDuration);\n }\n }\n\n return this;\n },\n getBbox: function getBbox(state) {\n var objFilter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {\n return true;\n };\n var box = new three.Box3(new three.Vector3(0, 0, 0), new three.Vector3(0, 0, 0));\n var objs = state.objects.filter(objFilter);\n if (!objs.length) return null;\n objs.forEach(function (obj) {\n return box.expandByObject(obj);\n }); // extract global x,y,z min/max\n\n return Object.assign.apply(Object, _toConsumableArray(['x', 'y', 'z'].map(function (c) {\n return _defineProperty({}, c, [box.min[c], box.max[c]]);\n })));\n },\n getScreenCoords: function getScreenCoords(state, x, y, z) {\n var vec = new three.Vector3(x, y, z);\n vec.project(this.camera()); // project to the camera plane\n\n return {\n // align relative pos to canvas dimensions\n x: (vec.x + 1) * state.width / 2,\n y: -(vec.y - 1) * state.height / 2\n };\n },\n getSceneCoords: function getSceneCoords(state, screenX, screenY) {\n var distance = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var relCoords = new three.Vector2(screenX / state.width * 2 - 1, -(screenY / state.height) * 2 + 1);\n var raycaster = new three.Raycaster();\n raycaster.setFromCamera(relCoords, state.camera);\n return Object.assign({}, raycaster.ray.at(distance, new three.Vector3()));\n },\n intersectingObjects: function intersectingObjects(state, x, y) {\n var relCoords = new three.Vector2(x / state.width * 2 - 1, -(y / state.height) * 2 + 1);\n var raycaster = new three.Raycaster();\n raycaster.params.Line.threshold = state.lineHoverPrecision; // set linePrecision\n\n raycaster.setFromCamera(relCoords, state.camera);\n return raycaster.intersectObjects(state.objects, true);\n },\n renderer: function renderer(state) {\n return state.renderer;\n },\n scene: function scene(state) {\n return state.scene;\n },\n camera: function camera(state) {\n return state.camera;\n },\n postProcessingComposer: function postProcessingComposer(state) {\n return state.postProcessingComposer;\n },\n controls: function controls(state) {\n return state.controls;\n },\n tbControls: function tbControls(state) {\n return state.controls;\n } // to be deprecated\n\n },\n stateInit: function stateInit() {\n return {\n scene: new three.Scene(),\n camera: new three.OrthographicCamera(),\n clock: new three.Clock()\n };\n },\n init: function init(domNode, state) {\n var _ref4 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref4$controlType = _ref4.controlType,\n controlType = _ref4$controlType === void 0 ? 'trackball' : _ref4$controlType,\n _ref4$rendererConfig = _ref4.rendererConfig,\n rendererConfig = _ref4$rendererConfig === void 0 ? {} : _ref4$rendererConfig,\n _ref4$extraRenderers = _ref4.extraRenderers,\n extraRenderers = _ref4$extraRenderers === void 0 ? [] : _ref4$extraRenderers,\n _ref4$waitForLoadComp = _ref4.waitForLoadComplete,\n waitForLoadComplete = _ref4$waitForLoadComp === void 0 ? true : _ref4$waitForLoadComp;\n\n // Wipe DOM\n domNode.innerHTML = ''; // Add relative container\n\n domNode.appendChild(state.container = document.createElement('div'));\n state.container.className = 'scene-container';\n state.container.style.position = 'relative'; // Add nav info section\n\n state.container.appendChild(state.navInfo = document.createElement('div'));\n state.navInfo.className = 'scene-nav-info';\n state.navInfo.textContent = {\n orbit: 'Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan',\n trackball: 'Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan',\n fly: 'WASD: move, R|F: up | down, Q|E: roll, up|down: pitch, left|right: yaw'\n }[controlType] || '';\n state.navInfo.style.display = state.showNavInfo ? null : 'none'; // Setup tooltip\n\n state.toolTipElem = document.createElement('div');\n state.toolTipElem.classList.add('scene-tooltip');\n state.container.appendChild(state.toolTipElem); // Capture pointer coords on move or touchstart\n\n state.pointerPos = new three.Vector2();\n state.pointerPos.x = -2; // Initialize off canvas\n\n state.pointerPos.y = -2;\n ['pointermove', 'pointerdown'].forEach(function (evType) {\n return state.container.addEventListener(evType, function (ev) {\n // track click state\n evType === 'pointerdown' && (state.isPointerPressed = true); // detect point drag\n\n !state.isPointerDragging && ev.type === 'pointermove' && (ev.pressure > 0 || state.isPointerPressed) // ev.pressure always 0 on Safari, so we used the isPointerPressed tracker\n && (ev.pointerType !== 'touch' || ev.movementX === undefined || [ev.movementX, ev.movementY].some(function (m) {\n return Math.abs(m) > 1;\n })) // relax drag trigger sensitivity on touch events\n && (state.isPointerDragging = true);\n\n if (state.enablePointerInteraction) {\n // update the pointer pos\n var offset = getOffset(state.container);\n state.pointerPos.x = ev.pageX - offset.left;\n state.pointerPos.y = ev.pageY - offset.top; // Move tooltip\n\n state.toolTipElem.style.top = \"\".concat(state.pointerPos.y, \"px\");\n state.toolTipElem.style.left = \"\".concat(state.pointerPos.x, \"px\");\n state.toolTipElem.style.transform = \"translate(-\".concat(state.pointerPos.x / state.width * 100, \"%, 21px)\"); // adjust horizontal position to not exceed canvas boundaries\n }\n\n function getOffset(el) {\n var rect = el.getBoundingClientRect(),\n scrollLeft = window.pageXOffset || document.documentElement.scrollLeft,\n scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n return {\n top: rect.top + scrollTop,\n left: rect.left + scrollLeft\n };\n }\n }, {\n passive: true\n });\n }); // Handle click events on objs\n\n state.container.addEventListener('pointerup', function (ev) {\n state.isPointerPressed = false;\n\n if (state.isPointerDragging) {\n state.isPointerDragging = false;\n if (!state.clickAfterDrag) return; // don't trigger onClick after pointer drag (camera motion via controls)\n }\n\n requestAnimationFrame(function () {\n // trigger click events asynchronously, to allow hoverObj to be set (on frame)\n if (ev.button === 0) {\n // left-click\n state.onClick(state.hoverObj || null, ev, state.intersectionPoint); // trigger background clicks with null\n }\n\n if (ev.button === 2 && state.onRightClick) {\n // right-click\n state.onRightClick(state.hoverObj || null, ev, state.intersectionPoint);\n }\n });\n }, {\n passive: true,\n capture: true\n }); // use capture phase to prevent propagation blocking from controls (specifically for fly)\n\n state.container.addEventListener('contextmenu', function (ev) {\n if (state.onRightClick) ev.preventDefault(); // prevent default contextmenu behavior and allow pointerup to fire instead\n }); // Setup renderer, camera and controls\n\n state.renderer = new three.WebGLRenderer(Object.assign({\n antialias: true,\n alpha: true\n }, rendererConfig));\n state.renderer.setPixelRatio(Math.min(2, window.devicePixelRatio)); // clamp device pixel ratio\n\n state.container.appendChild(state.renderer.domElement); // Setup extra renderers\n\n state.extraRenderers = extraRenderers;\n state.extraRenderers.forEach(function (r) {\n // overlay them on top of main renderer\n r.domElement.style.position = 'absolute';\n r.domElement.style.top = '0px';\n r.domElement.style.pointerEvents = 'none';\n state.container.appendChild(r.domElement);\n }); // configure post-processing composer\n\n state.postProcessingComposer = new EffectComposer(state.renderer);\n state.postProcessingComposer.addPass(new RenderPass(state.scene, state.camera)); // render scene as first pass\n // configure controls\n\n state.controls = new {\n trackball: TrackballControls,\n orbit: OrbitControls,\n fly: FlyControls\n }[controlType](state.camera, state.renderer.domElement);\n\n if (controlType === 'fly') {\n state.controls.movementSpeed = 300;\n state.controls.rollSpeed = Math.PI / 6;\n state.controls.dragToLook = true;\n }\n\n if (controlType === 'trackball' || controlType === 'orbit') {\n state.controls.minDistance = 0.1;\n state.controls.maxDistance = state.skyRadius;\n state.controls.addEventListener('start', function () {\n state.controlsEngaged = true;\n });\n state.controls.addEventListener('change', function () {\n if (state.controlsEngaged) {\n state.controlsDragging = true;\n }\n });\n state.controls.addEventListener('end', function () {\n state.controlsEngaged = false;\n state.controlsDragging = false;\n });\n }\n\n [state.renderer, state.postProcessingComposer].concat(_toConsumableArray(state.extraRenderers)).forEach(function (r) {\n return r.setSize(state.width, state.height);\n });\n state.renderer.setSize(state.width, state.height);\n state.postProcessingComposer.setSize(state.width, state.height); // state.camera.aspect = state.width/state.height;\n // state.camera.updateProjectionMatrix();\n // state.camera.position.z = 1000;\n // add sky\n\n state.scene.add(state.skysphere = new three.Mesh());\n state.skysphere.visible = false;\n state.loadComplete = state.scene.visible = !waitForLoadComplete;\n window.scene = state.scene;\n },\n update: function update(state, changedProps) {\n // resize canvas\n if (state.width && state.height && (changedProps.hasOwnProperty('width') || changedProps.hasOwnProperty('height'))) {\n state.container.style.width = state.width;\n state.container.style.height = state.height;\n [state.renderer, state.postProcessingComposer].concat(_toConsumableArray(state.extraRenderers)).forEach(function (r) {\n return r.setSize(state.width, state.height);\n });\n state.camera.aspect = state.width / state.height;\n state.camera.updateProjectionMatrix();\n }\n\n if (changedProps.hasOwnProperty('skyRadius') && state.skyRadius) {\n state.controls.hasOwnProperty('maxDistance') && changedProps.skyRadius && (state.controls.maxDistance = state.skyRadius);\n state.camera.far = state.skyRadius * 2.5;\n state.camera.updateProjectionMatrix();\n state.skysphere.geometry = new three.SphereGeometry(state.skyRadius);\n }\n\n if (changedProps.hasOwnProperty('backgroundColor')) {\n var alpha = parseToRgb(state.backgroundColor).alpha;\n if (alpha === undefined) alpha = 1;\n state.renderer.setClearColor(new three.Color(opacify(1, state.backgroundColor)), alpha);\n }\n\n if (changedProps.hasOwnProperty('backgroundImageUrl')) {\n if (!state.backgroundImageUrl) {\n state.skysphere.visible = false;\n state.skysphere.material.map = null;\n !state.loadComplete && finishLoad();\n } else {\n new three.TextureLoader().load(state.backgroundImageUrl, function (texture) {\n state.skysphere.material = new three.MeshBasicMaterial({\n map: texture,\n side: three.BackSide\n });\n state.skysphere.visible = true; // triggered when background image finishes loading (asynchronously to allow 1 frame to load texture)\n\n state.onBackgroundImageLoaded && setTimeout(state.onBackgroundImageLoaded);\n !state.loadComplete && finishLoad();\n });\n }\n }\n\n changedProps.hasOwnProperty('showNavInfo') && (state.navInfo.style.display = state.showNavInfo ? null : 'none');\n\n if (changedProps.hasOwnProperty('objects')) {\n (changedProps.objects || []).forEach(function (obj) {\n return state.scene.remove(obj);\n }); // Clear the place\n\n state.objects.forEach(function (obj) {\n return state.scene.add(obj);\n }); // Add to scene\n } //\n\n\n function finishLoad() {\n state.loadComplete = state.scene.visible = true;\n }\n }\n});\n\nexport default threeRenderObjects;\n","export default function(kapsulePropName, kapsuleType) {\n\n const dummyK = new kapsuleType(); // To extract defaults\n\n return {\n linkProp: function(prop) { // link property config\n return {\n default: dummyK[prop](),\n onChange(v, state) { state[kapsulePropName][prop](v) },\n triggerUpdate: false\n }\n },\n linkMethod: function(method) { // link method pass-through\n return function(state, ...args) {\n const kapsuleInstance = state[kapsulePropName];\n const returnVal = kapsuleInstance[method](...args);\n\n return returnVal === kapsuleInstance\n ? this // chain based on the parent object, not the inner kapsule\n : returnVal;\n }\n }\n }\n\n}","import { AmbientLight, DirectionalLight, Vector3 } from 'three';\n\nconst three = window.THREE\n ? window.THREE // Prefer consumption from global THREE, if exists\n : { AmbientLight, DirectionalLight, Vector3 };\n\nimport { DragControls as ThreeDragControls } from 'three/examples/jsm/controls/DragControls.js';\n\nimport ThreeForceGraph from 'three-forcegraph';\nimport ThreeRenderObjects from 'three-render-objects';\n\nimport accessorFn from 'accessor-fn';\nimport Kapsule from 'kapsule';\n\nimport linkKapsule from './kapsule-link.js';\n\n//\n\nconst CAMERA_DISTANCE2NODES_FACTOR = 170;\n\n//\n\n// Expose config from forceGraph\nconst bindFG = linkKapsule('forceGraph', ThreeForceGraph);\nconst linkedFGProps = Object.assign(...[\n 'jsonUrl',\n 'graphData',\n 'numDimensions',\n 'dagMode',\n 'dagLevelDistance',\n 'dagNodeFilter',\n 'onDagError',\n 'nodeRelSize',\n 'nodeId',\n 'nodeVal',\n 'nodeResolution',\n 'nodeColor',\n 'nodeAutoColorBy',\n 'nodeOpacity',\n 'nodeVisibility',\n 'nodeThreeObject',\n 'nodeThreeObjectExtend',\n 'linkSource',\n 'linkTarget',\n 'linkVisibility',\n 'linkColor',\n 'linkAutoColorBy',\n 'linkOpacity',\n 'linkWidth',\n 'linkResolution',\n 'linkCurvature',\n 'linkCurveRotation',\n 'linkMaterial',\n 'linkThreeObject',\n 'linkThreeObjectExtend',\n 'linkPositionUpdate',\n 'linkDirectionalArrowLength',\n 'linkDirectionalArrowColor',\n 'linkDirectionalArrowRelPos',\n 'linkDirectionalArrowResolution',\n 'linkDirectionalParticles',\n 'linkDirectionalParticleSpeed',\n 'linkDirectionalParticleWidth',\n 'linkDirectionalParticleColor',\n 'linkDirectionalParticleResolution',\n 'forceEngine',\n 'd3AlphaDecay',\n 'd3VelocityDecay',\n 'd3AlphaMin',\n 'ngraphPhysics',\n 'warmupTicks',\n 'cooldownTicks',\n 'cooldownTime',\n 'onEngineTick',\n 'onEngineStop'\n].map(p => ({ [p]: bindFG.linkProp(p)})));\nconst linkedFGMethods = Object.assign(...[\n 'refresh',\n 'getGraphBbox',\n 'd3Force',\n 'd3ReheatSimulation',\n 'emitParticle'\n].map(p => ({ [p]: bindFG.linkMethod(p)})));\n\n// Expose config from renderObjs\nconst bindRenderObjs = linkKapsule('renderObjs', ThreeRenderObjects);\nconst linkedRenderObjsProps = Object.assign(...[\n 'width',\n 'height',\n 'backgroundColor',\n 'showNavInfo',\n 'enablePointerInteraction'\n].map(p => ({ [p]: bindRenderObjs.linkProp(p)})));\nconst linkedRenderObjsMethods = Object.assign(\n ...[\n 'cameraPosition',\n 'postProcessingComposer'\n ].map(p => ({ [p]: bindRenderObjs.linkMethod(p)})),\n {\n graph2ScreenCoords: bindRenderObjs.linkMethod('getScreenCoords'),\n screen2GraphCoords: bindRenderObjs.linkMethod('getSceneCoords')\n }\n);\n\n//\n\nexport default Kapsule({\n\n props: {\n nodeLabel: { default: 'name', triggerUpdate: false },\n linkLabel: { default: 'name', triggerUpdate: false },\n linkHoverPrecision: { default: 1, onChange: (p, state) => state.renderObjs.lineHoverPrecision(p), triggerUpdate: false },\n enableNavigationControls: {\n default: true,\n onChange(enable, state) {\n const controls = state.renderObjs.controls();\n if (controls) {\n controls.enabled = enable;\n }\n },\n triggerUpdate: false\n },\n enableNodeDrag: { default: true, triggerUpdate: false },\n onNodeDrag: { default: () => {}, triggerUpdate: false },\n onNodeDragEnd: { default: () => {}, triggerUpdate: false },\n onNodeClick: { triggerUpdate: false },\n onNodeRightClick: { triggerUpdate: false },\n onNodeHover: { triggerUpdate: false },\n onLinkClick: { triggerUpdate: false },\n onLinkRightClick: { triggerUpdate: false },\n onLinkHover: { triggerUpdate: false },\n onBackgroundClick: { triggerUpdate: false },\n onBackgroundRightClick: { triggerUpdate: false },\n ...linkedFGProps,\n ...linkedRenderObjsProps\n },\n\n methods: {\n zoomToFit: function(state, transitionDuration, padding, ...bboxArgs) {\n state.renderObjs.fitToBbox(\n state.forceGraph.getGraphBbox(...bboxArgs),\n transitionDuration,\n padding\n );\n return this;\n },\n pauseAnimation: function(state) {\n if (state.animationFrameRequestId !== null) {\n cancelAnimationFrame(state.animationFrameRequestId);\n state.animationFrameRequestId = null;\n }\n return this;\n },\n\n resumeAnimation: function(state) {\n if (state.animationFrameRequestId === null) {\n this._animationCycle();\n }\n return this;\n },\n _animationCycle(state) {\n if (state.enablePointerInteraction) {\n // reset canvas cursor (override dragControls cursor)\n this.renderer().domElement.style.cursor = null;\n }\n\n // Frame cycle\n state.forceGraph.tickFrame();\n state.renderObjs.tick();\n state.animationFrameRequestId = requestAnimationFrame(this._animationCycle);\n },\n scene: state => state.renderObjs.scene(), // Expose scene\n camera: state => state.renderObjs.camera(), // Expose camera\n renderer: state => state.renderObjs.renderer(), // Expose renderer\n controls: state => state.renderObjs.controls(), // Expose controls\n tbControls: state => state.renderObjs.tbControls(), // To be deprecated\n _destructor: function() {\n this.pauseAnimation();\n this.graphData({ nodes: [], links: []});\n },\n ...linkedFGMethods,\n ...linkedRenderObjsMethods\n },\n\n stateInit: ({ controlType, rendererConfig, extraRenderers }) => ({\n forceGraph: new ThreeForceGraph(),\n renderObjs: ThreeRenderObjects({ controlType, rendererConfig, extraRenderers })\n }),\n\n init: function(domNode, state) {\n // Wipe DOM\n domNode.innerHTML = '';\n\n // Add relative container\n domNode.appendChild(state.container = document.createElement('div'));\n state.container.style.position = 'relative';\n\n // Add renderObjs\n const roDomNode = document.createElement('div');\n state.container.appendChild(roDomNode);\n state.renderObjs(roDomNode);\n const camera = state.renderObjs.camera();\n const renderer = state.renderObjs.renderer();\n const controls = state.renderObjs.controls();\n controls.enabled = !!state.enableNavigationControls;\n state.lastSetCameraZ = camera.position.z;\n\n // Add info space\n let infoElem;\n state.container.appendChild(infoElem = document.createElement('div'));\n infoElem.className = 'graph-info-msg';\n infoElem.textContent = '';\n\n // config forcegraph\n state.forceGraph\n .onLoading(() => { infoElem.textContent = 'Loading...' })\n .onFinishLoading(() => { infoElem.textContent = '' })\n .onUpdate(() => {\n // sync graph data structures\n state.graphData = state.forceGraph.graphData();\n\n // re-aim camera, if still in default position (not user modified)\n if (camera.position.x === 0 && camera.position.y === 0 && camera.position.z === state.lastSetCameraZ && state.graphData.nodes.length) {\n camera.lookAt(state.forceGraph.position);\n state.lastSetCameraZ = camera.position.z = Math.cbrt(state.graphData.nodes.length) * CAMERA_DISTANCE2NODES_FACTOR;\n }\n })\n .onFinishUpdate(() => {\n // Setup node drag interaction\n if (state._dragControls) {\n const curNodeDrag = state.graphData.nodes.find(node => node.__initialFixedPos && !node.__disposeControlsAfterDrag); // detect if there's a node being dragged using the existing drag controls\n if (curNodeDrag) {\n curNodeDrag.__disposeControlsAfterDrag = true; // postpone previous controls disposal until drag ends\n } else {\n state._dragControls.dispose(); // cancel previous drag controls\n }\n\n state._dragControls = undefined;\n }\n\n if (state.enableNodeDrag && state.enablePointerInteraction && state.forceEngine === 'd3') { // Can't access node positions programatically in ngraph\n const dragControls = state._dragControls = new ThreeDragControls(\n state.graphData.nodes.map(node => node.__threeObj).filter(obj => obj),\n camera,\n renderer.domElement\n );\n\n dragControls.addEventListener('dragstart', function (event) {\n controls.enabled = false; // Disable controls while dragging\n\n // track drag object movement\n event.object.__initialPos = event.object.position.clone();\n event.object.__prevPos = event.object.position.clone();\n\n const node = getGraphObj(event.object).__data;\n !node.__initialFixedPos && (node.__initialFixedPos = {fx: node.fx, fy: node.fy, fz: node.fz});\n !node.__initialPos && (node.__initialPos = {x: node.x, y: node.y, z: node.z});\n\n // lock node\n ['x', 'y', 'z'].forEach(c => node[`f${c}`] = node[c]);\n\n // drag cursor\n renderer.domElement.classList.add('grabbable');\n });\n\n dragControls.addEventListener('drag', function (event) {\n const nodeObj = getGraphObj(event.object);\n\n if (!event.object.hasOwnProperty('__graphObjType')) {\n // If dragging a child of the node, update the node object instead\n const initPos = event.object.__initialPos;\n const prevPos = event.object.__prevPos;\n const newPos = event.object.position;\n\n nodeObj.position.add(newPos.clone().sub(prevPos)); // translate node object by the motion delta\n prevPos.copy(newPos);\n newPos.copy(initPos); // reset child back to its initial position\n }\n\n const node = nodeObj.__data;\n const newPos = nodeObj.position;\n const translate = {x: newPos.x - node.x, y: newPos.y - node.y, z: newPos.z - node.z};\n // Move fx/fy/fz (and x/y/z) of nodes based on object new position\n ['x', 'y', 'z'].forEach(c => node[`f${c}`] = node[c] = newPos[c]);\n\n state.forceGraph\n .d3AlphaTarget(0.3) // keep engine running at low intensity throughout drag\n .resetCountdown(); // prevent freeze while dragging\n\n node.__dragged = true;\n state.onNodeDrag(node, translate);\n });\n\n dragControls.addEventListener('dragend', function (event) {\n delete(event.object.__initialPos); // remove tracking attributes\n delete(event.object.__prevPos);\n\n const node = getGraphObj(event.object).__data;\n\n // dispose previous controls if needed\n if (node.__disposeControlsAfterDrag) {\n dragControls.dispose();\n delete(node.__disposeControlsAfterDrag);\n }\n\n const initFixedPos = node.__initialFixedPos;\n const initPos = node.__initialPos;\n const translate = {x: initPos.x - node.x, y: initPos.y - node.y, z: initPos.z - node.z};\n if (initFixedPos) {\n ['x', 'y', 'z'].forEach(c => {\n const fc = `f${c}`;\n if (initFixedPos[fc] === undefined) {\n delete(node[fc])\n }\n });\n delete(node.__initialFixedPos);\n delete(node.__initialPos);\n if (node.__dragged) {\n delete(node.__dragged);\n state.onNodeDragEnd(node, translate);\n }\n }\n\n state.forceGraph\n .d3AlphaTarget(0) // release engine low intensity\n .resetCountdown(); // let the engine readjust after releasing fixed nodes\n\n if (state.enableNavigationControls) {\n controls.enabled = true; // Re-enable controls\n controls.domElement && controls.domElement.ownerDocument && controls.domElement.ownerDocument.dispatchEvent(\n // simulate mouseup to ensure the controls don't take over after dragend\n new PointerEvent('pointerup', { pointerType: 'mouse' })\n );\n }\n\n // clear cursor\n renderer.domElement.classList.remove('grabbable');\n });\n }\n });\n\n // config renderObjs\n state.renderObjs\n .objects([ // Populate scene\n new three.AmbientLight(0xbbbbbb),\n new three.DirectionalLight(0xffffff, 0.6),\n state.forceGraph\n ])\n .hoverOrderComparator((a, b) => {\n // Prioritize graph objects\n const aObj = getGraphObj(a);\n if (!aObj) return 1;\n const bObj = getGraphObj(b);\n if (!bObj) return -1;\n\n // Prioritize nodes over links\n const isNode = o => o.__graphObjType === 'node';\n return isNode(bObj) - isNode(aObj);\n })\n .tooltipContent(obj => {\n const graphObj = getGraphObj(obj);\n return graphObj ? accessorFn(state[`${graphObj.__graphObjType}Label`])(graphObj.__data) || '' : '';\n })\n .hoverDuringDrag(false)\n .onHover(obj => {\n // Update tooltip and trigger onHover events\n const hoverObj = getGraphObj(obj);\n\n if (hoverObj !== state.hoverObj) {\n const prevObjType = state.hoverObj ? state.hoverObj.__graphObjType : null;\n const prevObjData = state.hoverObj ? state.hoverObj.__data : null;\n const objType = hoverObj ? hoverObj.__graphObjType : null;\n const objData = hoverObj ? hoverObj.__data : null;\n if (prevObjType && prevObjType !== objType) {\n // Hover out\n const fn = state[`on${prevObjType === 'node' ? 'Node' : 'Link'}Hover`];\n fn && fn(null, prevObjData);\n }\n if (objType) {\n // Hover in\n const fn = state[`on${objType === 'node' ? 'Node' : 'Link'}Hover`];\n fn && fn(objData, prevObjType === objType ? prevObjData : null);\n }\n\n // set pointer if hovered object is clickable\n renderer.domElement.classList[\n ((hoverObj && state[`on${objType === 'node' ? 'Node' : 'Link'}Click`]) || (!hoverObj && state.onBackgroundClick)) ? 'add' : 'remove'\n ]('clickable');\n\n state.hoverObj = hoverObj;\n }\n })\n .clickAfterDrag(false)\n .onClick((obj, ev) => {\n const graphObj = getGraphObj(obj);\n if (graphObj) {\n const fn = state[`on${graphObj.__graphObjType === 'node' ? 'Node' : 'Link'}Click`];\n fn && fn(graphObj.__data, ev);\n } else {\n state.onBackgroundClick && state.onBackgroundClick(ev);\n }\n })\n .onRightClick((obj, ev) => {\n // Handle right-click events\n const graphObj = getGraphObj(obj);\n if (graphObj) {\n const fn = state[`on${graphObj.__graphObjType === 'node' ? 'Node' : 'Link'}RightClick`];\n fn && fn(graphObj.__data, ev);\n } else {\n state.onBackgroundRightClick && state.onBackgroundRightClick(ev);\n }\n });\n\n //\n\n // Kick-off renderer\n this._animationCycle();\n }\n});\n\n//\n\nfunction getGraphObj(object) {\n let obj = object;\n // recurse up object chain until finding the graph object\n while (obj && !obj.hasOwnProperty('__graphObjType')) {\n obj = obj.parent;\n }\n return obj;\n}\n"],"names":["styleInject","Group","Node","now","add","addAll","removeAll","defaultX","leaf_copy","treeProto","tree_add","tree_addAll","tree_cover","tree_data","tree_extent","tree_find","tree_remove","tree_removeAll","tree_root","tree_size","tree_visit","tree_visitAfter","tree_x","defaultY","tree_y","index","noop","eventify","require$$0","getVariableName","createPatternBuilder","generateCreateBodyModule","generateCreateBodyFunction","require$$1","generateQuadTreeModule","generateQuadTreeFunction","generateBoundsModule","generateBoundsFunction","generateCreateDragForceModule","generateCreateDragForceFunction","generateCreateSpringForceModule","generateCreateSpringForceFunction","generateIntegratorModule","generateIntegratorFunction","ngraph_randomModule","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","ngraph_forcelayoutModule","_classCallCheck","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","debounce","_objectWithoutPropertiesLoose","_objectWithoutProperties","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","_defineProperty","ownKeys","_objectSpread2","indexBy","_setPrototypeOf","_getPrototypeOf","_isNativeReflectConstruct","_construct","_assertThisInitialized","_unsupportedIterableToArray","_arrayLikeToArray","dataJoint","scaleOrdinal","three$1","graph","Kapsule","accessorFn","three","Pass","setPrototypeOf","isNativeReflectConstruct","isNativeFunction","construct","getPrototypeOf","exports","TWEEN","opacify","kapsulePropName","kapsuleType","dummyK","linkProp","prop","onChange","v","state","triggerUpdate","linkMethod","method","kapsuleInstance","args","returnVal","window","THREE","AmbientLight","DirectionalLight","Vector3","CAMERA_DISTANCE2NODES_FACTOR","bindFG","linkKapsule","ThreeForceGraph","linkedFGProps","Object","assign","map","p","linkedFGMethods","bindRenderObjs","ThreeRenderObjects","linkedRenderObjsProps","linkedRenderObjsMethods","graph2ScreenCoords","screen2GraphCoords","props","nodeLabel","linkLabel","linkHoverPrecision","renderObjs","lineHoverPrecision","enableNavigationControls","enable","controls","enabled","enableNodeDrag","onNodeDrag","onNodeDragEnd","onNodeClick","onNodeRightClick","onNodeHover","onLinkClick","onLinkRightClick","onLinkHover","onBackgroundClick","onBackgroundRightClick","methods","zoomToFit","transitionDuration","padding","bboxArgs","fitToBbox","forceGraph","getGraphBbox","pauseAnimation","animationFrameRequestId","cancelAnimationFrame","resumeAnimation","_animationCycle","enablePointerInteraction","renderer","domElement","style","cursor","tickFrame","tick","requestAnimationFrame","scene","camera","tbControls","_destructor","graphData","nodes","links","stateInit","controlType","rendererConfig","extraRenderers","init","domNode","innerHTML","appendChild","container","document","createElement","position","roDomNode","lastSetCameraZ","z","infoElem","className","textContent","onLoading","onFinishLoading","onUpdate","x","y","length","lookAt","Math","cbrt","onFinishUpdate","_dragControls","curNodeDrag","find","node","__initialFixedPos","__disposeControlsAfterDrag","dispose","undefined","forceEngine","dragControls","ThreeDragControls","__threeObj","filter","obj","addEventListener","event","object","__initialPos","clone","__prevPos","getGraphObj","__data","fx","fy","fz","forEach","c","classList","nodeObj","hasOwnProperty","initPos","prevPos","newPos","sub","copy","translate","d3AlphaTarget","resetCountdown","__dragged","initFixedPos","fc","ownerDocument","dispatchEvent","PointerEvent","pointerType","remove","objects","hoverOrderComparator","a","b","aObj","bObj","isNode","o","__graphObjType","tooltipContent","graphObj","hoverDuringDrag","onHover","hoverObj","prevObjType","prevObjData","objType","objData","fn","clickAfterDrag","onClick","ev","onRightClick","parent"],"mappings":";;;;;;;EAAA,SAASA,aAAW,CAAC,GAAG,EAAE,GAAG,EAAE;EAC/B,EAAE,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;EACjC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B;EACA,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,EAAE;AAC1D;EACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EACvE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;EAC9C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AAC1B;EACA,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;EAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;EACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;EAChD,KAAK,MAAM;EACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EAC9B,KAAK;EACL,GAAG,MAAM;EACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EAC5B,GAAG;AACH;EACA,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;EACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC;EACnC,GAAG,MAAM;EACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;EACpD,GAAG;EACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECzBA;EACA,MAAM,QAAQ,GAAG,KAAK,CAAC;EACvB,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;EAC5E,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;EACnE,MAAM,YAAY,GAAG,CAAC,CAAC;EACvB,MAAM,YAAY,GAAG,CAAC,CAAC;EACvB,MAAM,aAAa,GAAG,CAAC,CAAC;EAGxB,MAAM,YAAY,GAAG,CAAC,CAAC;EACvB,MAAM,gBAAgB,GAAG,CAAC,CAAC;EAC3B,MAAM,YAAY,GAAG,CAAC,CAAC;EACvB,MAAM,SAAS,GAAG,CAAC,CAAC;EACpB,MAAM,QAAQ,GAAG,CAAC,CAAC;EACnB,MAAM,UAAU,GAAG,CAAC,CAAC;EACrB,MAAM,WAAW,GAAG,CAAC,CAAC;EAEtB,MAAM,UAAU,GAAG,CAAC,CAAC;EACrB,MAAM,cAAc,GAAG,CAAC,CAAC;EACzB,MAAM,gBAAgB,GAAG,CAAC,CAAC;EAC3B,MAAM,mBAAmB,GAAG,CAAC,CAAC;EAC9B,MAAM,gBAAgB,GAAG,CAAC,CAAC;EAC3B,MAAM,cAAc,GAAG,CAAC,CAAC;EACzB,MAAM,WAAW,GAAG,GAAG,CAAC;EACxB,MAAM,gBAAgB,GAAG,GAAG,CAAC;EAC7B,MAAM,uBAAuB,GAAG,GAAG,CAAC;EACpC,MAAM,WAAW,GAAG,GAAG,CAAC;EACxB,MAAM,WAAW,GAAG,GAAG,CAAC;EACxB,MAAM,UAAU,GAAG,GAAG,CAAC;EACvB,MAAM,SAAS,GAAG,GAAG,CAAC;EACtB,MAAM,cAAc,GAAG,GAAG,CAAC;EAC3B,MAAM,sBAAsB,GAAG,GAAG,CAAC;EACnC,MAAM,cAAc,GAAG,GAAG,CAAC;EAC3B,MAAM,sBAAsB,GAAG,GAAG,CAAC;EACnC,MAAM,cAAc,GAAG,GAAG,CAAC;EAC3B,MAAM,sBAAsB,GAAG,GAAG,CAAC;EACnC,MAAM,cAAc,GAAG,GAAG,CAAC;EAC3B,MAAM,sBAAsB,GAAG,GAAG,CAAC;EACnC,MAAM,sBAAsB,GAAG,GAAG,CAAC;EACnC,MAAM,UAAU,GAAG,CAAC,CAAC;EACrB,MAAM,WAAW,GAAG,CAAC,CAAC;EACtB,MAAM,SAAS,GAAG,CAAC,CAAC;EACpB,MAAM,cAAc,GAAG,CAAC,CAAC;EACzB,MAAM,UAAU,GAAG,CAAC,CAAC;EACrB,MAAM,iBAAiB,GAAG,CAAC,CAAC;EAC5B,MAAM,YAAY,GAAG,CAAC,CAAC;EACvB,MAAM,aAAa,GAAG,CAAC,CAAC;EACxB,MAAM,iBAAiB,GAAG,CAAC,CAAC;EAC5B,MAAM,YAAY,GAAG,CAAC,CAAC;EACvB,MAAM,YAAY,GAAG,CAAC,CAAC;EACvB,MAAM,aAAa,GAAG,CAAC,CAAC;EACxB,MAAM,iBAAiB,GAAG,CAAC,CAAC;EAC5B,MAAM,mBAAmB,GAAG,CAAC,CAAC;EAC9B,MAAM,iBAAiB,GAAG,CAAC,CAAC;EAC5B,MAAM,qBAAqB,GAAG,CAAC,CAAC;EAChC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B;EACA,MAAM,SAAS,GAAG,GAAG,CAAC;EACtB,MAAM,qBAAqB,GAAG,GAAG,CAAC;EAClC,MAAM,qBAAqB,GAAG,GAAG,CAAC;EAClC,MAAM,gCAAgC,GAAG,GAAG,CAAC;EAC7C,MAAM,gCAAgC,GAAG,GAAG,CAAC;EAC7C,MAAM,uBAAuB,GAAG,GAAG,CAAC;EACpC,MAAM,uBAAuB,GAAG,GAAG,CAAC;EACpC,MAAM,cAAc,GAAG,IAAI,CAAC;EAC5B,MAAM,mBAAmB,GAAG,IAAI,CAAC;EACjC,MAAM,sBAAsB,GAAG,IAAI,CAAC;EACpC,MAAM,aAAa,GAAG,IAAI,CAAC;EAC3B,MAAM,0BAA0B,GAAG,IAAI,CAAC;EAExC,MAAM,yBAAyB,GAAG,IAAI,CAAC;EAEvC,MAAM,YAAY,GAAG,IAAI,CAAC;EAC1B,MAAM,yBAAyB,GAAG,IAAI,CAAC;EAEvC,MAAM,wBAAwB,GAAG,IAAI,CAAC;EAEtC,MAAM,gBAAgB,GAAG,IAAI,CAAC;EAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC;EACtB,MAAM,SAAS,GAAG,IAAI,CAAC;EACvB,MAAM,iBAAiB,GAAG,IAAI,CAAC;EAC/B,MAAM,OAAO,GAAG,IAAI,CAAC;EACrB,MAAM,eAAe,GAAG,IAAI,CAAC;EAC7B,MAAM,SAAS,GAAG,IAAI,CAAC;EACvB,MAAM,aAAa,GAAG,IAAI,CAAC;EAC3B,MAAM,qBAAqB,GAAG,IAAI,CAAC;EACnC,MAAM,qBAAqB,GAAG,IAAI,CAAC;EACnC,MAAM,oBAAoB,GAAG,IAAI,CAAC;EAClC,MAAM,kBAAkB,GAAG,IAAI,CAAC;EAChC,MAAM,WAAW,GAAG,IAAI,CAAC;EACzB,MAAM,SAAS,GAAG,IAAI,CAAC;EACvB,MAAM,UAAU,GAAG,IAAI,CAAC;EACxB,MAAM,eAAe,GAAG,IAAI,CAAC;EAC7B,MAAM,oBAAoB,GAAG,IAAI,CAAC;EAElC,MAAM,WAAW,GAAG,IAAI,CAAC;EACzB,MAAM,kBAAkB,GAAG,IAAI,CAAC;EAChC,MAAM,SAAS,GAAG,IAAI,CAAC;EACvB,MAAM,gBAAgB,GAAG,IAAI,CAAC;EAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC;EACtB,MAAM,eAAe,GAAG,IAAI,CAAC;EAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC;EAC9B,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B;EACA,MAAM,oBAAoB,GAAG,KAAK,CAAC;EACnC,MAAM,qBAAqB,GAAG,KAAK,CAAC;EACpC,MAAM,qBAAqB,GAAG,KAAK,CAAC;EACpC,MAAM,qBAAqB,GAAG,KAAK,CAAC;EACpC,MAAM,uBAAuB,GAAG,KAAK,CAAC;EACtC,MAAM,uBAAuB,GAAG,KAAK,CAAC;EACtC,MAAM,wBAAwB,GAAG,KAAK,CAAC;EACvC,MAAM,wBAAwB,GAAG,KAAK,CAAC;EACvC,MAAM,eAAe,GAAG,KAAK,CAAC;EAC9B,MAAM,eAAe,GAAG,KAAK,CAAC;EAC9B,MAAM,oBAAoB,GAAG,KAAK,CAAC;EACnC,MAAM,oBAAoB,GAAG,KAAK,CAAC;EACnC,MAAM,oBAAoB,GAAG,KAAK,CAAC;EACnC,MAAM,oBAAoB,GAAG,KAAK,CAAC;EACnC,MAAM,oBAAoB,GAAG,KAAK,CAAC;EACnC,MAAM,oBAAoB,GAAG,KAAK,CAAC;EACnC,MAAM,oBAAoB,GAAG,KAAK,CAAC;EACnC,MAAM,oBAAoB,GAAG,KAAK,CAAC;EACnC,MAAM,oBAAoB,GAAG,KAAK,CAAC;EACnC,MAAM,qBAAqB,GAAG,KAAK,CAAC;EACpC,MAAM,qBAAqB,GAAG,KAAK,CAAC;EACpC,MAAM,qBAAqB,GAAG,KAAK,CAAC;EACpC,MAAM,sBAAsB,GAAG,KAAK,CAAC;EACrC,MAAM,sBAAsB,GAAG,KAAK,CAAC;EACrC,MAAM,sBAAsB,GAAG,KAAK,CAAC;EACrC,MAAM,gBAAgB,GAAG,KAAK,CAAC;EAC/B,MAAM,4BAA4B,GAAG,KAAK,CAAC;EAC3C,MAAM,4BAA4B,GAAG,KAAK,CAAC;EAC3C,MAAM,4BAA4B,GAAG,KAAK,CAAC;EAC3C,MAAM,4BAA4B,GAAG,KAAK,CAAC;EAC3C,MAAM,4BAA4B,GAAG,KAAK,CAAC;EAC3C,MAAM,4BAA4B,GAAG,KAAK,CAAC;EAC3C,MAAM,4BAA4B,GAAG,KAAK,CAAC;EAC3C,MAAM,4BAA4B,GAAG,KAAK,CAAC;EAC3C,MAAM,6BAA6B,GAAG,KAAK,CAAC;EAC5C,MAAM,6BAA6B,GAAG,KAAK,CAAC;EAC5C,MAAM,6BAA6B,GAAG,KAAK,CAAC;EAC5C,MAAM,8BAA8B,GAAG,KAAK,CAAC;EAC7C,MAAM,8BAA8B,GAAG,KAAK,CAAC;EAC7C,MAAM,8BAA8B,GAAG,KAAK,CAAC;EAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC;EACtB,MAAM,UAAU,GAAG,IAAI,CAAC;EACxB,MAAM,YAAY,GAAG,IAAI,CAAC;EAC1B,MAAM,mBAAmB,GAAG,IAAI,CAAC;EACjC,MAAM,iBAAiB,GAAG,IAAI,CAAC;EAC/B,MAAM,iBAAiB,GAAG,IAAI,CAAC;EAC/B,MAAM,mBAAmB,GAAG,IAAI,CAAC;EACjC,MAAM,eAAe,GAAG,IAAI,CAAC;EAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC;EAC9B,MAAM,wBAAwB,GAAG,IAAI,CAAC;EACtC,MAAM,0BAA0B,GAAG,IAAI,CAAC;EACxC,MAAM,iBAAiB,GAAG,CAAC,CAAC;EAG5B,MAAM,cAAc,GAAG,IAAI,CAAC;EAC5B,MAAM,YAAY,GAAG,IAAI,CAAC;EAC1B,MAAM,aAAa,GAAG,IAAI,CAAC;EAC3B,MAAM,YAAY,GAAG,IAAI,CAAC;EAC1B,MAAM,cAAc,GAAG,IAAI,CAAC;EAC5B,MAAM,aAAa,GAAG,IAAI,CAAC;EAC3B,MAAM,cAAc,GAAG,IAAI,CAAC;EAC5B,MAAM,YAAY,GAAG,IAAI,CAAC;EAC1B,MAAM,iBAAiB,GAAG,IAAI,CAAC;EAC/B,MAAM,gBAAgB,GAAG,IAAI,CAAC;EAC9B,MAAM,qBAAqB,GAAG,CAAC,CAAC;EAChC,MAAM,oBAAoB,GAAG,CAAC,CAAC;EAG/B,MAAM,aAAa,GAAG,IAAI,CAAC;EAe3B,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B;EACA,MAAM,eAAe,GAAG,KAAK,CAAC;EAC9B,MAAM,gBAAgB,GAAG,KAAK,CAAC;EAU/B,MAAM,KAAK,GAAG,QAAQ,CAAC;AACvB;EACA;EACA;EACA;AACA;EACA,SAAS,eAAe,GAAG,EAAE;AAC7B;EACA,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,SAAS,EAAE;AAC1C;EACA,CAAC,gBAAgB,EAAE,WAAW,IAAI,EAAE,QAAQ,GAAG;AAC/C;EACA,EAAE,KAAK,IAAI,CAAC,UAAU,KAAK,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AAC5D;EACA,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;AACpC;EACA,EAAE,KAAK,SAAS,EAAE,IAAI,EAAE,KAAK,SAAS,GAAG;AACzC;EACA,GAAG,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC1B;EACA,GAAG;AACH;EACA,EAAE,KAAK,SAAS,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG;AACvD;EACA,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AACtC;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,gBAAgB,EAAE,WAAW,IAAI,EAAE,QAAQ,GAAG;AAC/C;EACA,EAAE,KAAK,IAAI,CAAC,UAAU,KAAK,SAAS,GAAG,OAAO,KAAK,CAAC;AACpD;EACA,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;AACpC;EACA,EAAE,OAAO,SAAS,EAAE,IAAI,EAAE,KAAK,SAAS,IAAI,SAAS,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1F;EACA,EAAE;AACF;EACA,CAAC,mBAAmB,EAAE,WAAW,IAAI,EAAE,QAAQ,GAAG;AAClD;EACA,EAAE,KAAK,IAAI,CAAC,UAAU,KAAK,SAAS,GAAG,OAAO;AAC9C;EACA,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;EACpC,EAAE,MAAM,aAAa,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;AAC1C;EACA,EAAE,KAAK,aAAa,KAAK,SAAS,GAAG;AACrC;EACA,GAAG,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;AACnD;EACA,GAAG,KAAK,KAAK,KAAK,EAAE,CAAC,GAAG;AACxB;EACA,IAAI,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AACrC;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,aAAa,EAAE,WAAW,KAAK,GAAG;AACnC;EACA,EAAE,KAAK,IAAI,CAAC,UAAU,KAAK,SAAS,GAAG,OAAO;AAC9C;EACA,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;EACpC,EAAE,MAAM,aAAa,GAAG,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AAChD;EACA,EAAE,KAAK,aAAa,KAAK,SAAS,GAAG;AACrC;EACA,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AACvB;EACA;EACA,GAAG,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;AAC1C;EACA,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG;AACpD;EACA,IAAI,KAAK,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACnC;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,EAAE,CAAC;AACJ;EACA,MAAM,IAAI,GAAG,EAAE,CAAC;AAChB;EACA,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;AACjC;EACA,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,GAAG,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC1D;EACA,CAAC;AACD;EACA,IAAI,KAAK,GAAG,OAAO,CAAC;AACpB;EACA,MAAM,SAAS,GAAG;AAClB;EACA,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG;EACvB,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE;AACvB;EACA,CAAC,YAAY,EAAE,YAAY;AAC3B;EACA;AACA;EACA,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,GAAG,CAAC,CAAC;EAC5C,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,GAAG,CAAC,CAAC;EAC5C,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,GAAG,CAAC,CAAC;EAC5C,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,GAAG,CAAC,CAAC;EAC5C,EAAE,MAAM,IAAI,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG;EACnH,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG;EACpH,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE;EAC9G,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;AAClG;EACA;EACA,EAAE,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5B;EACA,EAAE;AACF;EACA,CAAC,KAAK,EAAE,WAAW,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG;AACrC;EACA,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;AACjD;EACA,EAAE;AACF;EACA;EACA;AACA;EACA,CAAC,eAAe,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG;AACpC;EACA,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/B;EACA,EAAE;AACF;EACA;AACA;EACA,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG;AAC3C;EACA,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;AACrD;EACA,EAAE;AACF;EACA;AACA;EACA,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG;AAC5B;EACA,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B;EACA,EAAE;AACF;EACA;AACA;EACA,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG;AACtC;EACA,EAAE,KAAK,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC;EAC3B,EAAE,KAAK,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC;AAC3B;EACA,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,EAAE,CAAC;AAClC;EACA,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/B;EACA,EAAE;AACF;EACA,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG;AACxC;EACA,EAAE,KAAK,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC;EAC3B,EAAE,KAAK,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC;AAC3B;EACA,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,EAAE,CAAC;AAClC;EACA,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;AACjD;EACA,EAAE;AACF;EACA;AACA;EACA,CAAC,OAAO,EAAE,WAAW,GAAG,EAAE,IAAI,GAAG;AACjC;EACA,EAAE,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC;AAChE;EACA,EAAE;AACF;EACA;AACA;EACA,CAAC,SAAS,EAAE,WAAW,GAAG,EAAE,IAAI,GAAG;AACnC;EACA,EAAE,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,GAAG,GAAG,EAAE,CAAC;AAC9C;EACA,EAAE;AACF;EACA;AACA;EACA,CAAC,eAAe,EAAE,WAAW,KAAK,GAAG;AACrC;EACA,EAAE,OAAO,KAAK,KAAK,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AACzC;EACA,EAAE;AACF;EACA;AACA;EACA,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG;AAC9B;EACA,EAAE,KAAK,CAAC,KAAK,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC;AAChD;EACA;AACA;EACA,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,CAAC;AACrC;EACA,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,KAAK,UAAU,CAAC;AACpC;EACA,EAAE;AACF;EACA,CAAC,QAAQ,EAAE,WAAW,OAAO,GAAG;AAChC;EACA,EAAE,OAAO,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;AACrC;EACA,EAAE;AACF;EACA,CAAC,QAAQ,EAAE,WAAW,OAAO,GAAG;AAChC;EACA,EAAE,OAAO,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;AACrC;EACA,EAAE;AACF;EACA,CAAC,YAAY,EAAE,WAAW,KAAK,GAAG;AAClC;EACA,EAAE,OAAO,EAAE,KAAK,KAAK,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;AACxD;EACA,EAAE;AACF;EACA,CAAC,cAAc,EAAE,WAAW,KAAK,GAAG;AACpC;EACA,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AAClE;EACA,EAAE;AACF;EACA,CAAC,eAAe,EAAE,WAAW,KAAK,GAAG;AACrC;EACA,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AACnE;EACA,EAAE;AACF;EACA,CAAC,4BAA4B,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG;AAC9D;EACA;AACA;EACA;EACA;EACA;AACA;EACA,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;EACvB,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACvB;EACA,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;EAC1B,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B;EACA,EAAE,MAAM,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;EACnC,EAAE,MAAM,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AACnC;EACA,EAAE,MAAM,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;EACpC,EAAE,MAAM,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AACpC;EACA,EAAE,MAAM,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;EACpC,EAAE,MAAM,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AACpC;EACA,EAAE,SAAS,KAAK;AAChB;EACA,GAAG,KAAK,KAAK;EACb,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;EACtD,IAAI,MAAM;AACV;EACA,GAAG,KAAK,KAAK;EACb,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;EACtD,IAAI,MAAM;AACV;EACA,GAAG,KAAK,KAAK;EACb,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;EACtD,IAAI,MAAM;AACV;EACA,GAAG,KAAK,KAAK;EACb,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;EACtD,IAAI,MAAM;AACV;EACA,GAAG,KAAK,KAAK;EACb,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;EACtD,IAAI,MAAM;AACV;EACA,GAAG,KAAK,KAAK;EACb,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;EACtD,IAAI,MAAM;AACV;EACA,GAAG;EACH,IAAI,OAAO,CAAC,IAAI,EAAE,iFAAiF,GAAG,KAAK,EAAE,CAAC;AAC9G;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,CAAC;AACF;EACA,MAAM,OAAO,CAAC;AACd;EACA,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG;AAC7B;EACA,EAAE,MAAM,CAAC,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;AAC9D;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;EACb,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACb;EACA,EAAE;AACF;EACA,CAAC,IAAI,KAAK,GAAG;AACb;EACA,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;AAChB;EACA,EAAE;AACF;EACA,CAAC,IAAI,KAAK,EAAE,KAAK,GAAG;AACpB;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;AACjB;EACA,EAAE;AACF;EACA,CAAC,IAAI,MAAM,GAAG;AACd;EACA,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;AAChB;EACA,EAAE;AACF;EACA,CAAC,IAAI,MAAM,EAAE,KAAK,GAAG;AACrB;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;AACjB;EACA,EAAE;AACF;EACA,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG;AACb;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;EACb,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACb;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,SAAS,EAAE,MAAM,GAAG;AACrB;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;EAClB,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;AAClB;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,IAAI,EAAE,CAAC,GAAG;AACX;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACb;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,IAAI,EAAE,CAAC,GAAG;AACX;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACb;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,GAAG;AAC9B;EACA,EAAE,SAAS,KAAK;AAChB;EACA,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM;EACjC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM;EACjC,GAAG,SAAS,MAAM,IAAI,KAAK,EAAE,yBAAyB,GAAG,KAAK,EAAE,CAAC;AACjE;EACA,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,YAAY,EAAE,KAAK,GAAG;AACvB;EACA,EAAE,SAAS,KAAK;AAChB;EACA,GAAG,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;EACzB,GAAG,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;EACzB,GAAG,SAAS,MAAM,IAAI,KAAK,EAAE,yBAAyB,GAAG,KAAK,EAAE,CAAC;AACjE;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,KAAK,GAAG;AACT;EACA,EAAE,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AAChD;EACA,EAAE;AACF;EACA,CAAC,IAAI,EAAE,CAAC,GAAG;AACX;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACf,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACf;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG;AACb;EACA,EAAE,KAAK,CAAC,KAAK,SAAS,GAAG;AACzB;EACA,GAAG,OAAO,CAAC,IAAI,EAAE,uFAAuF,EAAE,CAAC;EAC3G,GAAG,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAClC;EACA,GAAG;AACH;EACA,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EAChB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,SAAS,EAAE,CAAC,GAAG;AAChB;EACA,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;EACd,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACd;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,GAAG;AACpB;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACrB,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrB;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,GAAG;AACzB;EACA,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACpB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACpB;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG;AACb;EACA,EAAE,KAAK,CAAC,KAAK,SAAS,GAAG;AACzB;EACA,GAAG,OAAO,CAAC,IAAI,EAAE,uFAAuF,EAAE,CAAC;EAC3G,GAAG,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAClC;EACA,GAAG;AACH;EACA,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EAChB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,SAAS,EAAE,CAAC,GAAG;AAChB;EACA,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;EACd,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACd;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,GAAG;AACpB;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACrB,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrB;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,QAAQ,EAAE,CAAC,GAAG;AACf;EACA,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EAChB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,cAAc,EAAE,MAAM,GAAG;AAC1B;EACA,EAAE,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC;EACnB,EAAE,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC;AACnB;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,MAAM,EAAE,CAAC,GAAG;AACb;EACA,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EAChB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,YAAY,EAAE,MAAM,GAAG;AACxB;EACA,EAAE,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC;AAC3C;EACA,EAAE;AACF;EACA,CAAC,YAAY,EAAE,CAAC,GAAG;AACnB;EACA,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;EAC/B,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AACvB;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;EAC5C,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5C;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,GAAG,EAAE,CAAC,GAAG;AACV;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;EACnC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACnC;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,GAAG,EAAE,CAAC,GAAG;AACV;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;EACnC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACnC;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG;AACnB;EACA;AACA;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;EACxD,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;AACxD;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG;AAC/B;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;EAC1D,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;AAC1D;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG;AACzB;EACA,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC/B;EACA,EAAE,OAAO,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACrG;EACA,EAAE;AACF;EACA,CAAC,KAAK,GAAG;AACT;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;EAChC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AAChC;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,IAAI,GAAG;AACR;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;EAC/B,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AAC/B;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,KAAK,GAAG;AACT;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;EAChC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AAChC;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,WAAW,GAAG;AACf;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;EACvE,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AACvE;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,MAAM,GAAG;AACV;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;EACpB,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AACpB;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,GAAG,EAAE,CAAC,GAAG;AACV;EACA,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrC;EACA,EAAE;AACF;EACA,CAAC,KAAK,EAAE,CAAC,GAAG;AACZ;EACA,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrC;EACA,EAAE;AACF;EACA,CAAC,QAAQ,GAAG;AACZ;EACA,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC3C;EACA,EAAE;AACF;EACA,CAAC,MAAM,GAAG;AACV;EACA,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;AACxD;EACA,EAAE;AACF;EACA,CAAC,eAAe,GAAG;AACnB;EACA,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AACjD;EACA,EAAE;AACF;EACA,CAAC,SAAS,GAAG;AACb;EACA,EAAE,OAAO,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;AACjD;EACA,EAAE;AACF;EACA,CAAC,KAAK,GAAG;AACT;EACA;AACA;EACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AAC3D;EACA,EAAE,OAAO,KAAK,CAAC;AACf;EACA,EAAE;AACF;EACA,CAAC,UAAU,EAAE,CAAC,GAAG;AACjB;EACA,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAE,CAAC;AAClD;EACA,EAAE;AACF;EACA,CAAC,iBAAiB,EAAE,CAAC,GAAG;AACxB;EACA,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC7C,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAC3B;EACA,EAAE;AACF;EACA,CAAC,mBAAmB,EAAE,CAAC,GAAG;AAC1B;EACA,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7D;EACA,EAAE;AACF;EACA,CAAC,SAAS,EAAE,MAAM,GAAG;AACrB;EACA,EAAE,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;AACnD;EACA,EAAE;AACF;EACA,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,GAAG;AAClB;EACA,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC;EACrC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC;AACrC;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG;AAC9B;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC;EAC1C,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC;AAC1C;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,MAAM,EAAE,CAAC,GAAG;AACb;EACA,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,GAAG;AACtD;EACA,EAAE;AACF;EACA,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG;AAChC;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC;EAC3B,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;AAC/B;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,OAAO,EAAE,KAAK,GAAG,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG;AACnC;EACA,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;EAC3B,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAC/B;EACA,EAAE,OAAO,KAAK,CAAC;AACf;EACA,EAAE;AACF;EACA,CAAC,mBAAmB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG;AACjD;EACA,EAAE,KAAK,MAAM,KAAK,SAAS,GAAG;AAC9B;EACA,GAAG,OAAO,CAAC,IAAI,EAAE,qEAAqE,EAAE,CAAC;AACzF;EACA,GAAG;AACH;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;EACnC,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AACnC;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,GAAG;AAC/B;EACA,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;AACrD;EACA,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;EAC9B,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAC9B;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;EACpC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACpC;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,MAAM,GAAG;AACV;EACA,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;EACzB,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACzB;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC;AACD;EACA,MAAM,OAAO,CAAC;AACd;EACA,CAAC,WAAW,GAAG;AACf;EACA,EAAE,MAAM,CAAC,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;AAC9D;EACA,EAAE,IAAI,CAAC,QAAQ,GAAG;AAClB;EACA,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;EACV,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;EACV,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AACV;EACA,GAAG,CAAC;AACJ;EACA,EAAE,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG;AAC9B;EACA,GAAG,OAAO,CAAC,KAAK,EAAE,+EAA+E,EAAE,CAAC;AACpG;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG;AACpD;EACA,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC3B;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC;EAC9C,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC;EAC9C,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC;AAC9C;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,QAAQ,GAAG;AACZ;EACA,EAAE,IAAI,CAAC,GAAG;AACV;EACA,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;EACV,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;EACV,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AACV;EACA,GAAG,CAAC;AACJ;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,KAAK,GAAG;AACT;EACA,EAAE,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC3D;EACA,EAAE;AACF;EACA,CAAC,IAAI,EAAE,CAAC,GAAG;AACX;EACA,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;EAC3B,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC;AACxB;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;EAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;EAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;AAC1D;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG;AACrC;EACA,EAAE,KAAK,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;EACxC,EAAE,KAAK,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;EACxC,EAAE,KAAK,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACxC;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,cAAc,EAAE,CAAC,GAAG;AACrB;EACA,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC;AACxB;EACA,EAAE,IAAI,CAAC,GAAG;AACV;EACA,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;EAC5B,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;EAC5B,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC7B;EACA,GAAG,CAAC;AACJ;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,QAAQ,EAAE,CAAC,GAAG;AACf;EACA,EAAE,OAAO,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC1C;EACA,EAAE;AACF;EACA,CAAC,WAAW,EAAE,CAAC,GAAG;AAClB;EACA,EAAE,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;AAC1C;EACA,EAAE;AACF;EACA,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,GAAG;AAC1B;EACA,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC;EACxB,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC;EACxB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC3B;EACA,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;EACpD,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;EACpD,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;AACpD;EACA,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;EACpD,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;EACpD,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;AACpD;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC9C,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC9C,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC9C;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC9C,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC9C,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AE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;EACrE,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AACrE;EACA,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;EACpE,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;EACpE,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;EACrE,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AACrE;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1D,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC3D,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D;EACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC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AAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;EAC9I,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;EAChF,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;EAChF,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;EAChF,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;EAChF,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;EAChF,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,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I,OAAO,EAAE,OAAO;AACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,OAAO;AACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,UAAU,EAAE,UAAU;AAC1B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,UAAU,EAAE,UAAU;AAC1B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,OAAO;AACpB;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,YAAY,EAAE,YAAY;AAC9B;EACA;EACA;EACA;EACA,IAAI,YAAY,EAAE,YAAY;AAC9B;EACA;EACA;EACA;EACA,IAAI,aAAa,EAAE,YAAY;EAC/B;EACA;EACA;EACA;EACA,IAAI,aAAa,EAAE,YAAY;AAC/B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,QAAQ,EAAE,QAAQ;AACtB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,WAAW,EAAE,WAAW;AAC5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,iBAAiB,EAAE,iBAAiB;AACxC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,WAAW,EAAE,WAAW;AAC5B;EACA;EACA;EACA;EACA;EACA,IAAI,WAAW,EAAE,iBAAiB;AAClC;EACA;EACA;EACA;EACA;EACA,IAAI,SAAS,EAAE,gBAAgB;AAC/B;EACA;EACA;EACA;EACA,IAAI,KAAK,EAAE,KAAK;AAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,OAAO;AACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,OAAO;AACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,OAAO;EACpB,GAAG,CAAC;AACJ;EACA;EACA,EAAED,UAAQ,CAAC,SAAS,CAAC,CAAC;AACtB;EACA,EAAE,kBAAkB,EAAE,CAAC;AACvB;EACA,EAAE,OAAO,SAAS,CAAC;AACnB;EACA,EAAE,SAAS,kBAAkB,GAAG;EAChC,IAAI,IAAI,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;AAC9B;EACA;EACA;EACA,IAAI,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;AACtB;EACA,IAAI,SAAS,EAAE,GAAG;EAClB;EACA,MAAM,SAAS,CAAC,WAAW,GAAG,iBAAiB,GAAG,qBAAqB,CAAC;EACxE,MAAM,SAAS,CAAC,SAAS,GAAG,gBAAgB,GAAG,oBAAoB,CAAC;EACpE,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;EAC9C,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAC9C;EACA;EACA,MAAM,SAAS,CAAC,EAAE,GAAG,MAAM,CAAC;EAC5B;EACA,MAAM,OAAO,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;EAChD,KAAK;EACL,GAAG;AACH;EACA,EAAE,SAAS,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE;EAClD,IAAI,OAAO,CAAC,IAAI,CAAC;EACjB,MAAM,IAAI,EAAE,IAAI;EAChB,MAAM,UAAU,EAAE,UAAU;EAC5B,KAAK,CAAC,CAAC;EACP,GAAG;AACH;EACA,EAAE,SAAS,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE;EAClD,IAAI,OAAO,CAAC,IAAI,CAAC;EACjB,MAAM,IAAI,EAAE,IAAI;EAChB,MAAM,UAAU,EAAE,UAAU;EAC5B,KAAK,CAAC,CAAC;EACP,GAAG;AACH;EACA,EAAE,SAAS,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE;EACjC,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;EAC9B,MAAM,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;EACjD,KAAK;AACL;EACA,IAAI,iBAAiB,EAAE,CAAC;AACxB;EACA,IAAI,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;EAC/B,IAAI,IAAI,CAAC,IAAI,EAAE;EACf,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACpC,MAAM,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;EACpC,KAAK,MAAM;EACX,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACvB,MAAM,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;EACvC,KAAK;AACL;EACA,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC5B;EACA,IAAI,gBAAgB,EAAE,CAAC;EACvB,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;AACH;EACA,EAAE,SAAS,OAAO,CAAC,MAAM,EAAE;EAC3B,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;EAC7B,GAAG;AACH;EACA,EAAE,SAAS,UAAU,CAAC,MAAM,EAAE;EAC9B,IAAI,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;EAC/B,IAAI,IAAI,CAAC,IAAI,EAAE;EACf,MAAM,OAAO,KAAK,CAAC;EACnB,KAAK;AACL;EACA,IAAI,iBAAiB,EAAE,CAAC;AACxB;EACA,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;EAC/B,IAAI,IAAI,SAAS,EAAE;EACnB,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;EACxB,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;EAChD,QAAQ,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;EACjC,OAAO;EACP,KAAK;AACL;EACA,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAC;AACxB;EACA,IAAI,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACrC;EACA,IAAI,gBAAgB,EAAE,CAAC;AACvB;EACA,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;AACH;AACA;EACA,EAAE,SAAS,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;EACvC,IAAI,iBAAiB,EAAE,CAAC;AACxB;EACA,IAAI,IAAI,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;EACtD,IAAI,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AAChD;EACA,IAAI,IAAI,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9C;EACA,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB;EACA;EACA,IAAI,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;EAClC,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE;EACzB;EACA,MAAM,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EAClC,KAAK;AACL;EACA,IAAI,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAClC;EACA,IAAI,gBAAgB,EAAE,CAAC;AACvB;EACA,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;AACH;EACA,EAAE,SAAS,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;EAChD,IAAI,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EAC1C,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;EAChD,GAAG;AACH;EACA,EAAE,SAAS,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;EAChD;EACA,IAAI,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EAC1C,IAAI,IAAI,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;EACxD,IAAI,IAAI,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;EAC9C,MAAM,IAAI,CAAC,WAAW,EAAE;EACxB,QAAQ,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;EAC/B,OAAO;EACP,MAAM,IAAI,MAAM,GAAG,GAAG,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;EAChD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC;EAC1D,KAAK;AACL;EACA,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;EAChD,GAAG;AACH;EACA,EAAE,SAAS,YAAY,GAAG;EAC1B,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC;EACtB,GAAG;AACH;EACA,EAAE,SAAS,YAAY,GAAG;EAC1B,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC;EACxB,GAAG;AACH;EACA,EAAE,SAAS,QAAQ,CAAC,MAAM,EAAE;EAC5B,IAAI,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;EAC/B,IAAI,OAAO,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;EACpC,GAAG;AACH;EACA,EAAE,SAAS,UAAU,CAAC,IAAI,EAAE;EAC5B,IAAI,IAAI,CAAC,IAAI,EAAE;EACf,MAAM,OAAO,KAAK,CAAC;EACnB,KAAK;EACL,IAAI,IAAI,GAAG,GAAG,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;EACjD,IAAI,IAAI,GAAG,GAAG,CAAC,EAAE;EACjB,MAAM,OAAO,KAAK,CAAC;EACnB,KAAK;AACL;EACA,IAAI,iBAAiB,EAAE,CAAC;AACxB;EACA,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACzB;EACA,IAAI,IAAI,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EACxC,IAAI,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpC;EACA,IAAI,IAAI,QAAQ,EAAE;EAClB,MAAM,GAAG,GAAG,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;EACxD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;EACpB,QAAQ,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;EACtC,OAAO;EACP,KAAK;AACL;EACA,IAAI,IAAI,MAAM,EAAE;EAChB,MAAM,GAAG,GAAG,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;EACtD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;EACpB,QAAQ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;EACpC,OAAO;EACP,KAAK;AACL;EACA,IAAI,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACrC;EACA,IAAI,gBAAgB,EAAE,CAAC;AACvB;EACA,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;AACH;EACA,EAAE,SAAS,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE;EACzC;EACA,IAAI,IAAI,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;EAClC,MAAM,CAAC,CAAC;EACR,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;EAC9B,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;AACL;EACA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;EAC5C,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC/B,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;EAChE,QAAQ,OAAO,IAAI,CAAC;EACpB,OAAO;EACP,KAAK;AACL;EACA,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;AACH;EACA,EAAE,SAAS,KAAK,GAAG;EACnB,IAAI,iBAAiB,EAAE,CAAC;EACxB,IAAI,WAAW,CAAC,SAAS,IAAI,EAAE;EAC/B,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EAC1B,KAAK,CAAC,CAAC;EACP,IAAI,gBAAgB,EAAE,CAAC;EACvB,GAAG;AACH;EACA,EAAE,SAAS,WAAW,CAAC,QAAQ,EAAE;EACjC,IAAI,IAAI,CAAC,EAAE,MAAM,CAAC;EAClB,IAAI,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;EACxC,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;EAC1D,QAAQ,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;EAC3B,OAAO;EACP,KAAK;EACL,GAAG;AACH;EACA,EAAE,SAAS,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE;EACzD,IAAI,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC/B;EACA,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;EAC9D,MAAM,IAAI,QAAQ,EAAE;EACpB,QAAQ,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;EACjE,OAAO,MAAM;EACb,QAAQ,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;EACpE,OAAO;EACP,KAAK;EACL,GAAG;AACH;EACA,EAAE,SAAS,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;EAC3D,IAAI,IAAI,QAAQ,CAAC;EACjB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;EAC3C,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,MAAM,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;AAC1E;EACA,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;EACzD,MAAM,IAAI,QAAQ,EAAE;EACpB,QAAQ,OAAO,IAAI,CAAC;EACpB,OAAO;EACP,KAAK;EACL,GAAG;AACH;EACA,EAAE,SAAS,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;EACxD,IAAI,IAAI,QAAQ,CAAC;EACjB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;EAC3C,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;EAClC,QAAQ,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAC;EACvD,QAAQ,IAAI,QAAQ,EAAE;EACtB,UAAU,OAAO,IAAI,CAAC;EACtB,SAAS;EACT,OAAO;EACP,KAAK;EACL,GAAG;AACH;EACA;EACA;EACA,EAAE,SAAS,IAAI,GAAG,EAAE;AACpB;EACA;EACA,EAAE,SAAS,qBAAqB,GAAG;EACnC,IAAI,aAAa,IAAI,CAAC,CAAC;EACvB,GAAG;AACH;EACA,EAAE,SAAS,oBAAoB,GAAG;EAClC,IAAI,aAAa,IAAI,CAAC,CAAC;EACvB,IAAI,IAAI,aAAa,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;EACnD,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;EACzC,MAAM,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;EACzB,KAAK;EACL,GAAG;AACH;EACA,EAAE,SAAS,WAAW,CAAC,QAAQ,EAAE;EACjC,IAAI,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;EACxC,MAAM,MAAM,IAAI,KAAK,CAAC,+DAA+D,GAAG,QAAQ,CAAC,CAAC;EAClG,KAAK;AACL;EACA,IAAI,IAAI,cAAc,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;EACxC,IAAI,IAAI,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC;EAC1C,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE;EAC5B,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;EACrC,QAAQ,OAAO,IAAI,CAAC;EACpB,OAAO;EACP,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC;EACxC,KAAK;EACL,GAAG;EACH,CAAC;AACD;EACA;EACA,SAAS,qBAAqB,CAAC,OAAO,EAAE,KAAK,EAAE;EAC/C,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACxB;EACA,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE;EACrB,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;EAClC,GAAG;AACH;EACA,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM;EACxB,IAAI,CAAC,CAAC;AACN;EACA,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;EAC/B,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;EAC9B,MAAM,OAAO,CAAC,CAAC;EACf,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,CAAC,CAAC,CAAC;EACZ,CAAC;AACD;EACA;EACA;EACA;EACA,SAAS,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE;EACxB,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;EACf,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;EACpB,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACnB,CAAC;AACD;EACA,SAAS,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE;EACnC,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;EAClB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC1B,GAAG,MAAM;EACT,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;EACxB,GAAG;EACH,CAAC;AACD;EACA;EACA;EACA;EACA,SAAS,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;EACtC,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;EACvB,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACnB,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACnB,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;EACf,CAAC;AACD;EACA,SAAS,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE;EAClC,EAAE,OAAO,MAAM,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;EACrD;;;;;;MC1kBAE,iBAAc,GAAG,SAAS,eAAe,CAAC,KAAK,EAAE;EACjD,EAAE,IAAI,KAAK,KAAK,CAAC,EAAE,OAAO,GAAG,CAAC;EAC9B,EAAE,IAAI,KAAK,KAAK,CAAC,EAAE,OAAO,GAAG,CAAC;EAC9B,EAAE,IAAI,KAAK,KAAK,CAAC,EAAE,OAAO,GAAG,CAAC;EAC9B,EAAE,OAAO,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;EAC3B,CAAC;;ECLD,MAAMA,iBAAe,GAAGD,iBAA4B,CAAC;AACrD;MACAE,sBAAc,GAAG,SAAS,oBAAoB,CAAC,SAAS,EAAE;AAC1D;EACA,EAAE,OAAO,OAAO,CAAC;EACjB;EACA,EAAE,SAAS,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE;EACrC,IAAI,IAAI,MAAM,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;EAChD,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;EAC1E,IAAI,IAAI,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACnD,IAAI,IAAI,MAAM,GAAG,EAAE,CAAC;EACpB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE;EACxC,MAAM,IAAI,YAAY,GAAGD,iBAAe,CAAC,CAAC,CAAC,CAAC;EAC5C,MAAM,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,YAAY,CAAC;EACjD,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;EACrE,KAAK;EACL,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC7B,GAAG;EACH,CAAC;;ECjBD,MAAMC,sBAAoB,GAAGF,sBAAiC,CAAC;AAC/D;AACAG,4BAAc,GAAGC,4BAA0B,CAAC;2DACC,GAAG,+BAA+B;AAC/E;EACA;0CAC4B,GAAG,cAAc;EAC7C;wCAC0B,GAAG,YAAY;EACzC;AACA;EACA,SAASA,4BAA0B,CAAC,SAAS,EAAE,YAAY,EAAE;EAC7D,EAAE,IAAI,IAAI,GAAG,8BAA8B,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;EACrE,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;EACtC,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,8BAA8B,CAAC,SAAS,EAAE,YAAY,EAAE;EACjE,EAAE,IAAI,IAAI,GAAG,CAAC;AACd,EAAE,aAAa,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACzC,EAAE,WAAW,CAAC,SAAuB,CAAC,CAAC;AACvC;AACA,CAAC,CAAC;EACF,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,WAAW,CAAC,SAAS,EAAE;EAChC,EAAE,IAAI,OAAO,GAAGF,sBAAoB,CAAC,SAAS,CAAC,CAAC;EAChD,EAAE,IAAI,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;EACpD,EAAE,OAAO,CAAC;AACV,cAAc,EAAE,YAAY,CAAC;AAC7B;AACA,wBAAwB,EAAE,YAAY,CAAC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,EAAE,YAAY,CAAC;AACtD,EAAE,EAAE,OAAO,CAAC,8BAA8B,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACzD,EAAE,CAAC,CAAC;EACJ,CAAC;AACD;EACA,SAAS,aAAa,CAAC,SAAS,EAAE,YAAY,EAAE;EAChD,EAAE,IAAI,OAAO,GAAGA,sBAAoB,CAAC,SAAS,CAAC,CAAC;EAChD,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC;EACnB,EAAE,IAAI,YAAY,EAAE;EACpB,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC,CAAC,CAAC,CAAC;EACR,GAAG;AACH;EACA,EAAE,IAAI,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;EACpD,EAAE,OAAO,CAAC,gBAAgB,EAAE,YAAY,CAAC;AACzC,EAAE,EAAE,OAAO,CAAC;AACZ;AACA;AACA;AACA,MAAM,EAAE,OAAO,CAAC,wHAAwH,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACvJ,MAAM,EAAE,OAAO,CAAC,uBAAuB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACtD;AACA,MAAM,EAAE,OAAO,CAAC,qDAAqD,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACpF;AACA;AACA;AACA;AACA,IAAI,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3C,IAAI,CAAC,CAAC;EACN;;;;ECpFA,MAAMA,sBAAoB,GAAGF,sBAAiC,CAAC;EAC/D,MAAM,eAAe,GAAGK,iBAA4B,CAAC;AACrD;AACAC,0BAAc,GAAGC,0BAAwB,CAAC;uDACC,GAAG,6BAA6B;AAC3E;EACA;EACA;6CACiC,GAAG,mBAAmB;EACvD;0CAC8B,GAAG,gBAAgB;EACjD;yCAC6B,GAAG,eAAe;EAC/C;2CAC+B,GAAG,iBAAiB;EACnD;2CAC+B,GAAG,iBAAiB;AACnD;EACA,SAASA,0BAAwB,CAAC,SAAS,EAAE;EAC7C,EAAE,IAAI,IAAI,GAAG,4BAA4B,CAAC,SAAS,CAAC,CAAC;EACrD,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;EAChC,CAAC;AACD;EACA,SAAS,4BAA4B,CAAC,SAAS,EAAE;EACjD,EAAE,IAAI,OAAO,GAAGL,sBAAoB,CAAC,SAAS,CAAC,CAAC;EAChD,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AACzC;EACA,EAAE,IAAI,IAAI,GAAG,CAAC;AACd,EAAE,kBAAkB,EAAE,CAAC;AACvB,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;AAC7B,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;AAC5B,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAC9B,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;AAC7B;AACA,kBAAkB,EAAE,OAAO,CAAC,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9D,MAAM,EAAE,OAAO,CAAC,oCAAoC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1C;AACA,IAAI,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,EAAE,OAAO,CAAC,iDAAiD,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAClF,sBAAsB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAClE;AACA;AACA;AACA,UAAU,EAAE,OAAO,CAAC,4CAA4C,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AAChF,wBAAwB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACpE;AACA;AACA;AACA;AACA;AACA,QAAQ,EAAE,OAAO,CAAC,uBAAuB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACxD;AACA;AACA;AACA;AACA,QAAQ,EAAE,OAAO,CAAC,8DAA8D,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/F,sBAAsB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAClE;AACA;AACA;AACA;AACA,UAAU,EAAE,OAAO,CAAC,4CAA4C,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AAChF,wBAAwB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACpE;AACA;AACA;AACA,sBAAsB,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;AAC5E;AACA;AACA;AACA;AACA,UAAU,EAAE,OAAO,CAAC,uBAAuB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D;AACA;AACA;AACA;AACA,EAAE,sBAAsB,EAAE,CAAC;AAC3B;AACA;AACA;AACA;AACA,IAAI,EAAE,OAAO,CAAC,mCAAmC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAChE;AACA;AACA;AACA,IAAI,EAAE,OAAO,CAAC,kCAAkC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/D,IAAI,EAAE,OAAO,CAAC,kCAAkC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/D;AACA;AACA;AACA;AACA;AACA,MAAM,EAAE,OAAO,CAAC,iDAAiD,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAChF,MAAM,EAAE,OAAO,CAAC,iDAAiD,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAChF;AACA;AACA;AACA;AACA,IAAI,EAAE,OAAO,CAAC,gFAAgF,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7G;AACA;AACA;AACA,IAAI,EAAE,OAAO,CAAC,4BAA4B,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACzD,IAAI,EAAE,OAAO,CAAC,4CAA4C,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,EAAE,OAAO,CAAC,6BAA6B,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D;AACA,QAAQ,EAAE,OAAO,CAAC,uCAAuC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACxE;AACA;AACA;AACA;AACA,QAAQ,EAAE,OAAO,CAAC,iCAAiC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAClE,QAAQ,EAAE,OAAO,CAAC,mDAAmD,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACpF;AACA,EAAE,wBAAwB,CAAC,CAAC,CAAC,CAAC;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,EAAE,OAAO,CAAC,8BAA8B,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AAClE,UAAU,EAAE,OAAO,CAAC,8BAA8B,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,EAAE,OAAO,CAAC,0DAA0D,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AAChG;AACA,YAAY,EAAE,OAAO,CAAC,8CAA8C,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC;EACF,EAAE,OAAO,IAAI,CAAC;AACd;AACA;EACA,EAAE,SAAS,wBAAwB,CAAC,WAAW,EAAE;EACjD,IAAI,IAAI,aAAa,GAAG,EAAE,CAAC;EAC3B,IAAI,IAAI,MAAM,GAAG,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EAClD,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE;EACxC,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EAC9F,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC9E,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC9F,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACnG,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EACvC,KAAK;EACL,IAAI,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACpC;EACA;EACA;EACA;EACA;EACA,GAAG;AACH;EACA,EAAE,SAAS,sBAAsB,GAAG;EACpC,IAAI,IAAI,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACrC,IAAI,IAAI,aAAa,GAAG,EAAE,CAAC;EAC3B,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE;EACxC,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EAC1D,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACvE,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;EACzD,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;EACrD,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EACvC,KAAK;EACL,IAAI,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACpC;EACA;EACA;EACA;EACA;EACA,GAAG;AACH;EACA,EAAE,SAAS,WAAW,CAAC,MAAM,EAAE;EAC/B;EACA;EACA;EACA;EACA,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;EACnB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE;EACxC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;EAC9C,KAAK;EACL,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC5B,GAAG;EACH,CAAC;AACD;EACA,SAAS,cAAc,CAAC,SAAS,EAAE;EACnC,EAAE,IAAI,OAAO,GAAGA,sBAAoB,CAAC,SAAS,CAAC,CAAC;EAChD,EAAE,OAAO,CAAC;AACV;AACA,IAAI,EAAE,OAAO,CAAC,qDAAqD,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAClF;AACA,WAAW,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AACtD;AACA,CAAC,CAAC;EACF,CAAC;AACD;EACA,SAAS,gBAAgB,CAAC,SAAS,EAAE;EACrC,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;EACzC,EAAE,OAAO,CAAC;AACV;AACA,EAAE,EAAE,YAAY,EAAE,CAAC;AACnB,CAAC,CAAC,CAAC;EACH,EAAE,SAAS,YAAY,GAAG;EAC1B,IAAI,IAAI,SAAS,GAAG,EAAE,CAAC;EACvB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE;EACxC,MAAM,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,SAAS,CAAC;EAChD,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;EAC1E,KAAK;AACL;EACA,IAAI,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAChC;EACA;EACA;EACA;EACA,GAAG;EACH,CAAC;AACD;EACA,SAAS,gBAAgB,CAAC,SAAS,EAAE;EACrC,EAAE,OAAO,CAAC;AACV,EAAE,YAAY,EAAE,CAAC;AACjB;AACA,CAAC,CAAC,CAAC;AACH;EACA,EAAE,SAAS,YAAY,GAAG;EAC1B,IAAI,IAAI,SAAS,GAAG,EAAE,CAAC;EACvB,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;EAC3C,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE;EACxC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAClE,KAAK;AACL;EACA,IAAI,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAChC;EACA;EACA;EACA;EACA,GAAG;EACH,CAAC;AACD;EACA,SAAS,eAAe,CAAC,SAAS,EAAE;EACpC,EAAE,IAAI,OAAO,GAAGA,sBAAoB,CAAC,SAAS,CAAC,CAAC;EAChD,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;EACzC,EAAE,IAAI,YAAY,GAAG,CAAC;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA,EAAE,EAAE,OAAO,CAAC,sBAAsB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACjD;AACA;AACA,EAAE,EAAE,OAAO,CAAC,qBAAqB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAChD,EAAE,EAAE,OAAO,CAAC,qBAAqB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAChD;AACA,CAAC,CAAC;EACF,EAAE,OAAO,YAAY,CAAC;AACtB;EACA,EAAE,SAAS,WAAW,CAAC,MAAM,EAAE;EAC/B;EACA;EACA;EACA;EACA,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;EACnB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE;EACxC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;EAC9C,KAAK;EACL,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC5B,GAAG;EACH,CAAC;AACD;EACA,SAAS,kBAAkB,GAAG;EAC9B,EAAE,OAAO,CAAC;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC;EACF;;;;AC3cAM,wBAAc,GAAGC,wBAAsB,CAAC;6CACL,GAAG,2BAA2B;AACjE;EACA,MAAMP,sBAAoB,GAAGF,sBAAiC,CAAC;AAC/D;EACA,SAASS,wBAAsB,CAAC,SAAS,EAAE;EAC3C,EAAE,IAAI,IAAI,GAAG,0BAA0B,CAAC,SAAS,CAAC,CAAC;EACnD,EAAE,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;EAC5D,CAAC;AACD;EACA,SAAS,0BAA0B,CAAC,SAAS,EAAE;EAC/C,EAAE,IAAI,OAAO,GAAGP,sBAAoB,CAAC,SAAS,CAAC,CAAC;AAChD;EACA,EAAE,IAAI,IAAI,GAAG,CAAC;AACd;AACA,IAAI,EAAE,OAAO,CAAC,6BAA6B,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACpD;AACA;AACA;AACA;AACA,UAAU,EAAE,OAAO,CAAC,kCAAkC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AACtE;AACA;AACA,QAAQ,EAAE,OAAO,CAAC,iCAAiC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAClE;AACA,QAAQ,EAAE,OAAO,CAAC,mEAAmE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACpG;AACA;AACA;AACA;AACA,QAAQ,EAAE,OAAO,CAAC,iEAAiE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,EAAE,OAAO,CAAC,4BAA4B,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACzD,IAAI,EAAE,OAAO,CAAC,2BAA2B,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACxD;AACA;AACA;AACA;AACA,MAAM,EAAE,OAAO,CAAC,2DAA2D,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1F,MAAM,EAAE,OAAO,CAAC,2DAA2D,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1F;AACA;AACA,IAAI,EAAE,OAAO,CAAC,oCAAoC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACjE,IAAI,EAAE,OAAO,CAAC,oCAAoC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACjE;AACA;AACA;AACA,IAAI,EAAE,OAAO,CAAC,oDAAoD,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACjF;AACA,CAAC,CAAC;EACF,EAAE,OAAO,IAAI,CAAC;EACd;;;;ECtEA,MAAMA,sBAAoB,GAAGF,sBAAiC,CAAC;AAC/D;AACAU,iCAAc,GAAGC,iCAA+B,CAAC;qEACC,GAAG,oCAAoC;AACzF;EACA,SAASA,iCAA+B,CAAC,SAAS,EAAE;EACpD,EAAE,IAAI,IAAI,GAAG,mCAAmC,CAAC,SAAS,CAAC,CAAC;EAC5D,EAAE,OAAO,IAAI,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;EACvC,CAAC;AACD;EACA,SAAS,mCAAmC,CAAC,SAAS,EAAE;EACxD,EAAE,IAAI,OAAO,GAAGT,sBAAoB,CAAC,SAAS,CAAC,CAAC;EAChD,EAAE,IAAI,IAAI,GAAG,CAAC;AACd;AACA;AACA;AACA;AACA,MAAM,EAAE,OAAO,CAAC,oEAAoE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACnG;AACA;AACA,CAAC,CAAC;EACF,EAAE,OAAO,IAAI,CAAC;EACd;;;;ECtBA,MAAMA,sBAAoB,GAAGF,sBAAiC,CAAC;AAC/D;AACAY,mCAAc,GAAGC,mCAAiC,CAAC;yEACC,GAAG,sCAAsC;AAC7F;EACA,SAASA,mCAAiC,CAAC,SAAS,EAAE;EACtD,EAAE,IAAI,IAAI,GAAG,qCAAqC,CAAC,SAAS,CAAC,CAAC;EAC9D,EAAE,OAAO,IAAI,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;EACjD,CAAC;AACD;EACA,SAAS,qCAAqC,CAAC,SAAS,EAAE;EAC1D,EAAE,IAAI,OAAO,GAAGX,sBAAoB,CAAC,SAAS,CAAC,CAAC;EAChD,EAAE,IAAI,IAAI,GAAG,CAAC;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,EAAE,OAAO,CAAC,iDAAiD,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAChF,wBAAwB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACpE;AACA;AACA,QAAQ,EAAE,OAAO,CAAC,4CAA4C,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7E,sBAAsB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAClE;AACA;AACA;AACA;AACA;AACA,MAAM,EAAE,OAAO,CAAC,2CAA2C,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1E;AACA;AACA;AACA,MAAM,EAAE,OAAO,CAAC,2CAA2C,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1E;AACA;AACA;AACA;AACA,CAAC,CAAC;EACF,EAAE,OAAO,IAAI,CAAC;EACd;;;;EC9CA,MAAM,oBAAoB,GAAGF,sBAAiC,CAAC;AAC/D;AACAc,4BAAc,GAAGC,4BAA0B,CAAC;2DACC,GAAG,+BAA+B;AAC/E;EACA,SAASA,4BAA0B,CAAC,SAAS,EAAE;EAC/C,EAAE,IAAI,IAAI,GAAG,8BAA8B,CAAC,SAAS,CAAC,CAAC;EACvD,EAAE,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,wBAAwB,EAAE,IAAI,CAAC,CAAC;EAC5E,CAAC;AACD;EACA,SAAS,8BAA8B,CAAC,SAAS,EAAE;EACnD,EAAE,IAAI,OAAO,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;EAChD,EAAE,IAAI,IAAI,GAAG,CAAC;AACd;AACA;AACA;AACA,EAAE,EAAE,OAAO,CAAC,6BAA6B,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,EAAE,OAAO,CAAC,kDAAkD,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/E,IAAI,EAAE,OAAO,CAAC,mCAAmC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAChE,sBAAsB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAClE;AACA;AACA;AACA;AACA,MAAM,EAAE,OAAO,CAAC,mCAAmC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAClE;AACA;AACA,IAAI,EAAE,OAAO,CAAC,0CAA0C,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACvE;AACA,IAAI,EAAE,OAAO,CAAC,2BAA2B,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACxD;AACA,IAAI,EAAE,OAAO,CAAC,6BAA6B,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1D;AACA;AACA,UAAU,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACtD,CAAC,CAAC;EACF,EAAE,OAAO,IAAI,CAAC;EACd;;MChDA,MAAc,GAAG,MAAM,CAAC;AACxB;EACA;EACA;EACA;EACA;EACA,SAAS,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE;EAC7D,IAAI,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;EACzB,IAAI,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC;EACrB,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;EACzB,IAAI,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC;EACzC;;MCXA,YAAc,GAAG,KAAK,CAAC;AACvB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE;EAChC,EAAE,IAAI,GAAG,CAAC;EACV,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE;EAC/B,EAAE,IAAI,OAAO,EAAE;EACf,IAAI,KAAK,GAAG,IAAI,OAAO,EAAE;EACzB,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;EACvC,QAAQ,IAAI,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC;EACpD,YAAY,gBAAgB,GAAG,OAAO,OAAO,CAAC,GAAG,CAAC;EAClD,YAAY,aAAa,GAAG,CAAC,WAAW,KAAK,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,gBAAgB,CAAC,CAAC;AACtF;EACA,QAAQ,IAAI,aAAa,EAAE;EAC3B,UAAU,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;EACrC,SAAS,MAAM,IAAI,gBAAgB,KAAK,QAAQ,EAAE;EAClD;EACA,UAAU,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;EACzD,SAAS;EACT,OAAO;EACP,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,MAAM,CAAC;EAChB;;;;AC9BAC,uBAAc,GAAG,MAAM,CAAC;AACxB;EACA;8BACqB,GAAG,MAAM;sCACD,GAAG,eAAc;AAC9C;EACA;EACA;EACA;EACA;EACA,SAAS,MAAM,CAAC,SAAS,EAAE;EAC3B,EAAE,IAAI,IAAI,GAAG,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;EACvE,EAAE,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC;EAC5B,CAAC;AACD;EACA,SAAS,SAAS,CAAC,IAAI,EAAE;EACzB,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACnB,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;AAChC;EACA;EACA;EACA;EACA;EACA,SAAS,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,CAAC;AAC5C;EACA;EACA;EACA;EACA,SAAS,CAAC,SAAS,CAAC,OAAO,GAAG,UAAU,CAAC;AACzC;EACA;EACA;EACA;EACA;EACA,SAAS,CAAC,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACxC;EACA,SAAS,QAAQ,GAAG;EACpB;EACA;EACA,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EACd,EAAE,GAAG;EACL,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;EAClC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;EAClC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACtB,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC9B;EACA,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAC3C,CAAC;AACD;EACA;EACA;EACA;EACA,SAAS,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;AAChC;EACA,SAAS,IAAI,GAAG;EAChB,EAAE,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;EACnB,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG;EACtB,MAAM,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC;EACtD,SAAS,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;EACpE,MAAM,CAAC,CAAC,IAAI;EACZ,GAAG,CAAC;EACJ,EAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;EAC/E,CAAC;AACD;EACA;EACA,SAAS,KAAK,CAAC,CAAC,EAAE;EAClB,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACpG,CAAC;AACD;EACA,SAAS,UAAU,GAAG;EACtB,EAAE,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;EACvB;EACA,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,UAAU,KAAK,IAAI,IAAI,EAAE,CAAC,IAAI,UAAU,CAAC;EAC3D,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,UAAU,KAAK,IAAI,KAAK,EAAE,CAAC,IAAI,UAAU,CAAC;EAC5D,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,UAAU,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC;EAC1D,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,UAAU,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC;EAC1D,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,UAAU,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC;EAC1D,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,UAAU,KAAK,IAAI,KAAK,EAAE,CAAC,IAAI,UAAU,CAAC;EAC5D,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACnB,EAAE,OAAO,CAAC,IAAI,GAAG,SAAS,IAAI,UAAU,CAAC;EACzC,CAAC;AACD;EACA,SAAS,IAAI,CAAC,QAAQ,EAAE;EACxB,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,QAAQ,CAAC,CAAC;EAClD,CAAC;AACD;EACA;EACA;EACA;EACA;EACA,SAAS,cAAc,CAAC,KAAK,EAAE,YAAY,EAAE;EAC7C,EAAE,IAAI,WAAW,GAAG,YAAY,IAAI,MAAM,EAAE,CAAC;EAC7C,EAAE,IAAI,OAAO,WAAW,CAAC,IAAI,KAAK,UAAU,EAAE;EAC9C,IAAI,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;EAC5F,GAAG;AACH;EACA,EAAE,OAAO;EACT,IAAI,OAAO,EAAE,OAAO;AACpB;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,OAAO;EACpB,GAAG,CAAC;AACJ;EACA,EAAE,SAAS,OAAO,GAAG;EACrB,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EAChB,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;EAC3C,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EAClC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACnB,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACnB,KAAK;AACL;EACA,IAAI,OAAO,KAAK,CAAC;EACjB,GAAG;AACH;EACA,EAAE,SAAS,OAAO,CAAC,QAAQ,EAAE;EAC7B,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EAChB,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;EAC3C,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EAClC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACnB,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACnB;EACA,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;EAClB,KAAK;AACL;EACA,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE;EACtB,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;EACzB,KAAK;EACL,GAAG;EACH;;;;;;MCxIA,wBAAc,GAAG,sBAAsB,CAAC;AACxC;EACA,IAAI,0BAA0B,GAAGhB,0BAA8C,CAAC;EAChF,IAAI,wBAAwB,GAAGK,wBAA4C,CAAC;EAC5E,IAAI,sBAAsB,GAAGY,sBAA0C,CAAC;EACxE,IAAI,+BAA+B,GAAGC,+BAAmD,CAAC;EAC1F,IAAI,iCAAiC,GAAGC,iCAAqD,CAAC;EAC9F,IAAI,0BAA0B,GAAGC,0BAA8C,CAAC;AAChF;EACA,IAAI,gBAAgB,GAAG,EAAE,CAAC;AAC1B;EACA,SAAS,sBAAsB,CAAC,QAAQ,EAAE;EAC1C,EAAE,IAAI,MAAM,GAAGC,MAAmB,CAAC;EACnC,EAAE,IAAI,KAAK,GAAGC,YAAuB,CAAC;EACtC,EAAE,IAAI,QAAQ,GAAGC,aAAwB,CAAC;EAC1C,EAAE,IAAI,QAAQ,EAAE;EAChB;EACA,IAAI,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS,EAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;EAC5G,IAAI,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,EAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;EACtG,GAAG;AACH;EACA,EAAE,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE;EAC7B;EACA;EACA;EACA,MAAM,YAAY,EAAE,EAAE;AACtB;EACA;EACA;EACA;EACA,MAAM,iBAAiB,EAAE,GAAG;AAC5B;EACA;EACA;EACA;EACA;EACA,MAAM,OAAO,EAAE,CAAC,EAAE;AAClB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAM,KAAK,EAAE,GAAG;AAChB;EACA;EACA;EACA;EACA;EACA,MAAM,eAAe,EAAE,GAAG;AAC1B;EACA;EACA;EACA;EACA,MAAM,QAAQ,GAAG,GAAG;AACpB;EACA;EACA;EACA;EACA;EACA,MAAM,sBAAsB,EAAE,CAAC;AAC/B;EACA;EACA;EACA;EACA;EACA,MAAM,UAAU,EAAE,CAAC;AACnB;EACA;EACA;EACA;EACA;EACA;EACA,MAAM,KAAK,EAAE,KAAK;EAClB,GAAG,CAAC,CAAC;AACL;EACA,EAAE,IAAI,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;EACtD,EAAE,IAAI,CAAC,OAAO,EAAE;EAChB,IAAI,IAAI,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;EACzC,IAAI,OAAO,GAAG;EACd,MAAM,IAAI,EAAE,0BAA0B,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC;EAClE,MAAM,cAAc,EAAE,wBAAwB,CAAC,UAAU,CAAC;EAC1D,MAAM,YAAY,EAAE,sBAAsB,CAAC,UAAU,CAAC;EACtD,MAAM,eAAe,EAAE,+BAA+B,CAAC,UAAU,CAAC;EAClE,MAAM,iBAAiB,EAAE,iCAAiC,CAAC,UAAU,CAAC;EACtE,MAAM,SAAS,EAAE,0BAA0B,CAAC,UAAU,CAAC;EACvD,KAAK,CAAC;EACN,IAAI,gBAAgB,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;EAC3C,GAAG;AACH;EACA,EAAE,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;EAC1B,EAAE,IAAI,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;EAC9C,EAAE,IAAI,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;EAC1C,EAAE,IAAI,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;EAChD,EAAE,IAAI,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;EACpD,EAAE,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;EACpC,EAAE,IAAI,UAAU,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC;EACA,EAAE,IAAI,MAAM,GAAGC,qBAAwB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;EACnD,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC;EAClB,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC;AACnB;EACA,EAAE,IAAI,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EAClD,EAAE,IAAI,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;EACtD,EAAE,IAAI,WAAW,GAAG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxD,EAAE,IAAI,SAAS,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;AAC5C;EACA,EAAE,IAAI,aAAa,GAAG,CAAC,CAAC;EACxB,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC;EAClB,EAAE,IAAI,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;EAC3B,EAAE,IAAI,eAAe,GAAG,CAAC,CAAC;EAC1B;EACA,EAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;EAChC,EAAE,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AACxC;EACA,EAAE,IAAI,SAAS,GAAG;EAClB;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,MAAM,EAAE,MAAM;EAClB;EACA,IAAI,QAAQ,EAAE,QAAQ;AACtB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,OAAO;AACpB;EACA;EACA;EACA;EACA,IAAI,QAAQ,EAAE,QAAQ;AACtB;EACA;EACA;EACA;EACA,IAAI,QAAQ,EAAE,QAAQ;EACtB;EACA;EACA;EACA;EACA,IAAI,WAAW,EAAE,WAAW;AAC5B;EACA;EACA;EACA;EACA,IAAI,SAAS,EAAE,SAAS;AACxB;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,IAAI,EAAE,YAAY;EACtB,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;EAC9C,QAAQ,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;EACnC,OAAO;EACP,MAAM,IAAI,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC;EAC3F,MAAM,eAAe,IAAI,CAAC,CAAC;EAC3B,MAAM,OAAO,QAAQ,CAAC;EACtB,KAAK;AACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,UAAU,IAAI,EAAE;EAC7B,MAAM,IAAI,CAAC,IAAI,EAAE;EACjB,QAAQ,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;EAC5C,OAAO;EACP,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB;EACA,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;AACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,SAAS,EAAE,UAAU,GAAG,EAAE;EAC9B,MAAM,IAAI,CAAC,GAAG,EAAE;EAChB,QAAQ,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;EACrD,OAAO;EACP,MAAM,IAAI,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;EACjC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB;EACA,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;AACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,UAAU,EAAE,UAAU,IAAI,EAAE;EAChC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE;AAC5B;EACA,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;EACrC,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE;AAC9B;EACA,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;EAC5B,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;EAC/B,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC;EACvB,OAAO;EACP,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;AACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,SAAS,EAAE,UAAU,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE;EACxE,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;EAC5B,QAAQ,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;EACrE,OAAO;AACP;EACA,MAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;EAC5C,QAAQ,YAAY,GAAG,CAAC,CAAC,CAAC;EAC1B,OAAO;AACP;EACA,MAAM,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,iBAAiB,IAAI,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC;EAC3G,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3B;EACA;EACA,MAAM,OAAO,MAAM,CAAC;EACpB,KAAK;AACL;EACA;EACA;EACA;EACA,IAAI,gBAAgB,EAAE,YAAY;EAClC,MAAM,OAAO,aAAa,CAAC;EAC3B,KAAK;AACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,YAAY,EAAE,UAAU,MAAM,EAAE;EACpC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE;EAC9B,MAAM,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;EACxC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE;EACpB,QAAQ,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;EAC/B,QAAQ,OAAO,IAAI,CAAC;EACpB,OAAO;EACP,KAAK;AACL;EACA,IAAI,sBAAsB,EAAE,UAAU,SAAS,EAAE;EACjD,MAAM,OAAO,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;EAClD,KAAK;AACL;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,cAAc;EAC3B,IAAI,cAAc,EAAE,cAAc;AAClC;EACA,IAAI,cAAc,EAAE,YAAY;EAChC,MAAM,OAAO,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;EACnG,KAAK;AACL;EACA;EACA,IAAI,OAAO,EAAE,UAAU,KAAK,EAAE;EAC9B,MAAM,IAAI,KAAK,KAAK,SAAS,EAAE;EAC/B,QAAQ,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;EACjC,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;EAC3C,QAAQ,OAAO,IAAI,CAAC;EACpB,OAAO,MAAM;EACb,QAAQ,OAAO,QAAQ,CAAC,OAAO,CAAC;EAChC,OAAO;EACP,KAAK;AACL;EACA,IAAI,KAAK,EAAE,UAAU,KAAK,EAAE;EAC5B,MAAM,IAAI,KAAK,KAAK,SAAS,EAAE;EAC/B,QAAQ,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;EAC/B,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;EACzC,QAAQ,OAAO,IAAI,CAAC;EACpB,OAAO,MAAM;EACb,QAAQ,OAAO,QAAQ,CAAC,KAAK,CAAC;EAC9B,OAAO;EACP,KAAK;AACL;EACA;EACA;EACA;EACA,IAAI,MAAM,EAAE,MAAM;EAClB,GAAG,CAAC;AACJ;EACA;EACA,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC9B;EACA,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;AACtB;EACA,EAAE,OAAO,SAAS,CAAC;AACnB;EACA,EAAE,SAAS,cAAc,GAAG;EAC5B,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;EACpB,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC;EACtB,GAAG;AACH;EACA,EAAE,SAAS,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE;EAC9C,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,SAAS,GAAG,mBAAmB,CAAC,CAAC;AAC7F;EACA,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;EAC3C,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;EAC/B,GAAG;AACH;EACA,EAAE,SAAS,WAAW,CAAC,SAAS,EAAE;EAClC,IAAI,IAAI,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;EAC7D,IAAI,IAAI,UAAU,GAAG,CAAC,EAAE,OAAO;EAC/B,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;EACjC,IAAI,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;EAC/B,GAAG;AACH;EACA,EAAE,SAAS,SAAS,GAAG;EACvB;EACA,IAAI,OAAO,QAAQ,CAAC;EACpB,GAAG;AACH;EACA,EAAE,SAAS,UAAU,uBAAuB;EAC5C,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO;AACpC;EACA,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;EAClC,IAAI,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;EAC1B,IAAI,OAAO,CAAC,EAAE,EAAE;EAChB,MAAM,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC3B,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;EAC1B,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;EACrB,QAAQ,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;EACvC,QAAQ,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EAC/B,OAAO;EACP,KAAK;EACL,GAAG;AACH;EACA,EAAE,SAAS,iBAAiB,GAAG;EAC/B,IAAI,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;EAC3B,IAAI,OAAO,CAAC,EAAE,EAAE;EAChB,MAAM,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;EACrC,KAAK;EACL,GAAG;AACH;EACA,CAAC;AACD;EACA,SAAS,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE;EAClC,EAAE,KAAK,IAAI,GAAG,IAAI,QAAQ,EAAE;EAC5B,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;EACnC,GAAG;EACH,CAAC;AACD;EACA,SAAS,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE;EACtC,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,OAAO;EAC1C,EAAE,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE;EACzC;EACA,IAAI,OAAO;EACX,GAAG;EACH,EAAE,IAAI,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD;EACA,EAAE,IAAI,cAAc,EAAE;EACtB,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,KAAK,EAAE;EACnC,MAAM,IAAI,KAAK,KAAK,SAAS,EAAE;EAC/B,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,WAAW,GAAG,GAAG,GAAG,4BAA4B,CAAC,CAAC;EACvG,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;EAC5B,QAAQ,OAAO,MAAM,CAAC;EACtB,OAAO;EACP,MAAM,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;EACzB,KAAK,CAAC;EACN,GAAG,MAAM;EACT,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,KAAK,EAAE;EACnC,MAAM,IAAI,KAAK,KAAK,SAAS,EAAE;EAC/B,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;EAC5B,QAAQ,OAAO,MAAM,CAAC;EACtB,OAAO;EACP,MAAM,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;EACzB,KAAK,CAAC;EACN,GAAG;EACH;;AC9YAC,4BAAc,GAAG,YAAY,CAAC;sCACN,GAAGzB,yBAAwC;AACnE;EACA,IAAI,QAAQ,GAAGK,aAAwB,CAAC;AACxC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE;EAC9C,EAAE,IAAI,CAAC,KAAK,EAAE;EACd,IAAI,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;EAC3D,GAAG;AACH;EACA,EAAE,IAAI,eAAe,GAAG,CAAC,eAAe,IAAI,eAAe,CAAC,eAAe,KAAKL,wBAAuC,CAAC;EACxH,EAAE,IAAI,gBAAgB,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;EAC1D,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;AACtG;EACA,EAAE,IAAI,QAAQ,GAAG,eAAe,CAAC;EACjC,EAAE,IAAI,eAAe,IAAI,OAAO,eAAe,CAAC,QAAQ,KAAK,UAAU,EAAE;EACzE,IAAI,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC;EACxC,GAAG;AACH;EACA,EAAE,IAAI,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;EAC7B,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC;EACnB,EAAE,IAAI,WAAW,GAAG,CAAC,CAAC;AACtB;EACA,EAAE,IAAI,eAAe,GAAG,gBAAgB,CAAC,QAAQ,CAAC,eAAe,IAAI,IAAI,CAAC;AAC1E;EACA;EACA,EAAE,WAAW,EAAE,CAAC;EAChB,EAAE,cAAc,EAAE,CAAC;AACnB;EACA,EAAE,IAAI,SAAS,GAAG,KAAK,CAAC;AACxB;EACA,EAAE,IAAI,GAAG,GAAG;EACZ;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,IAAI,EAAE,WAAW;EACrB,MAAM,IAAI,WAAW,KAAK,CAAC,EAAE;EAC7B,QAAQ,kBAAkB,CAAC,IAAI,CAAC,CAAC;EACjC,QAAQ,OAAO,IAAI,CAAC;EACpB,OAAO;AACP;EACA,MAAM,IAAI,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC;AAC7C;EACA;EACA;EACA,MAAM,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC9B;EACA;EACA,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvB;EACA,MAAM,IAAI,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC;EACvC,MAAM,IAAI,WAAW,GAAG,KAAK,IAAI,IAAI,CAAC;EACtC,MAAM,kBAAkB,CAAC,WAAW,CAAC,CAAC;AACtC;AACA;EACA,MAAM,OAAO,WAAW,CAAC;EACzB,KAAK;AACL;EACA;EACA;EACA;EACA,IAAI,eAAe,EAAE,UAAU,MAAM,EAAE;EACvC,MAAM,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;EAC5C,KAAK;AACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,eAAe,EAAE,UAAU,MAAM,EAAE;EACvC,MAAM,IAAI,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;EAC5C,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;EAC7E,KAAK;AACL;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,eAAe,EAAE,UAAU,MAAM,EAAE;EACvC,MAAM,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;EACnC,MAAM,IAAI,MAAM,EAAE;EAClB,QAAQ,OAAO;EACf,UAAU,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;EAC/B,UAAU,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG;EAC3B,SAAS,CAAC;EACV,OAAO;EACP,KAAK;AACL;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,YAAY,EAAE,YAAY;EAC9B,MAAM,OAAO,gBAAgB,CAAC,OAAO,EAAE,CAAC;EACxC,KAAK;AACL;EACA;EACA;EACA;EACA,IAAI,WAAW,EAAE,WAAW;AAC5B;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,UAAU,IAAI,EAAE,QAAQ,EAAE;EACvC,MAAM,IAAI,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EAC7C,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;EAClC,KAAK;AACL;EACA;EACA;EACA;EACA,IAAI,YAAY,EAAE,UAAU,IAAI,EAAE;EAClC,MAAM,OAAO,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;EAClD,KAAK;AACL;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,WAAW;EACxB,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;EAC3C,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EAC3B,KAAK;AACL;EACA;EACA;EACA;EACA;EACA,IAAI,OAAO,EAAE,OAAO;AACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,SAAS,EAAE,SAAS;AACxB;EACA;EACA;EACA;EACA,IAAI,oBAAoB,EAAE,oBAAoB;AAC9C;EACA;EACA;EACA;EACA,IAAI,SAAS,EAAE,gBAAgB;AAC/B;EACA;EACA;EACA;EACA,IAAI,KAAK,EAAE,KAAK;AAChB;EACA;EACA;EACA;EACA,IAAI,QAAQ,EAAE,CAAC;EACf,GAAG,CAAC;AACJ;EACA,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AAChB;EACA,EAAE,OAAO,GAAG,CAAC;AACb;EACA,EAAE,SAAS,kBAAkB,CAAC,WAAW,EAAE;EAC3C,IAAI,IAAI,SAAS,KAAK,WAAW,EAAE;EACnC,MAAM,SAAS,GAAG,WAAW,CAAC;EAC9B,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;EACnC,KAAK;EACL,GAAG;AACH;EACA,EAAE,SAAS,WAAW,CAAC,EAAE,EAAE;EAC3B,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;EAC3B,GAAG;AACH;EACA,EAAE,SAAS,oBAAoB,GAAG;EAClC,IAAI,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;EACvB,IAAI,WAAW,CAAC,SAAS,IAAI,EAAE;EAC/B,MAAM,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EACnC,MAAM,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EACnC,KAAK,CAAC,CAAC;EACP,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;EACxC,GAAG;AACH;EACA,EAAE,SAAS,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE;EACnC,IAAI,IAAI,MAAM,CAAC;EACf,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;EAC5B,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;EACtC;EACA,QAAQ,MAAM,GAAG,MAAM,CAAC;EACxB,OAAO,MAAM;EACb;EACA,QAAQ,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;EAC3B,OAAO;EACP,KAAK,MAAM;EACX;EACA,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EAC7C,MAAM,IAAI,CAAC,IAAI,EAAE,OAAO;EACxB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;EACvB,KAAK;AACL;EACA,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;EAC3B,GAAG;AACH;EACA,EAAE,SAAS,OAAO,CAAC,MAAM,EAAE;EAC3B,IAAI,OAAO,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;EAClC,GAAG;AACH;EACA,EAAE,SAAS,cAAc,GAAG;EAC5B,IAAI,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;EACxC,GAAG;AACH;EACA,EAAE,SAAS,eAAe,CAAC,QAAQ,EAAE;EACrC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;EACjC,GAAG;AACH;EACA,EAAE,SAAS,cAAc,CAAC,OAAO,EAAE;EACnC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;EAC7C,MAAM,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;EAC9B,MAAM,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE;EACvC,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE;EACzB,UAAU,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EACnC,SAAS;EACT,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE;EACzB,UAAU,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EAChC,SAAS;EACT,OAAO,MAAM,IAAI,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE;EACjD,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE;EACzB,UAAU,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EACnC,SAAS;EACT,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE;EACzB,UAAU,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EACnC,SAAS;EACT,OAAO;EACP,KAAK;EACL,IAAI,WAAW,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;EACxC,GAAG;AACH;EACA,EAAE,SAAS,WAAW,GAAG;EACzB,IAAI,WAAW,GAAG,CAAC,CAAC;AACpB;EACA,IAAI,KAAK,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE;EACtC,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EACxB,MAAM,WAAW,IAAI,CAAC,CAAC;EACvB,KAAK,CAAC,CAAC;AACP;EACA,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;EAChC,GAAG;AACH;EACA,EAAE,SAAS,QAAQ,CAAC,MAAM,EAAE;EAC5B,IAAI,IAAI,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;EACtC,IAAI,IAAI,CAAC,IAAI,EAAE;EACf,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;EACvC,MAAM,IAAI,CAAC,IAAI,EAAE;EACjB,QAAQ,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;EACtE,OAAO;AACP;EACA,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;EAC9B,MAAM,IAAI,CAAC,GAAG,EAAE;EAChB,QAAQ,IAAI,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;EAChD,QAAQ,GAAG,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;EACjE,OAAO;AACP;EACA,MAAM,IAAI,GAAG,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;EAC7C,MAAM,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC;AACvB;EACA,MAAM,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACnC,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;AAC7B;EACA,MAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;EACxC,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;EAC7B,OAAO;EACP,KAAK;EACL,GAAG;AACH;EACA,EAAE,SAAS,WAAW,CAAC,IAAI,EAAE;EAC7B,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;EACzB,IAAI,IAAI,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;EACtC,IAAI,IAAI,IAAI,EAAE;EACd,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;EAChC,MAAM,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;EACxC,KAAK;EACL,GAAG;AACH;EACA,EAAE,SAAS,QAAQ,CAAC,IAAI,EAAE;EAC1B,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EAChC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B;EACA,IAAI,IAAI,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;EAC9C,QAAQ,MAAM,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;EAC3C,QAAQ,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3E;EACA,IAAI,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAClC;EACA,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;EAC9B,GAAG;AACH;EACA,EAAE,SAAS,WAAW,CAAC,IAAI,EAAE;EAC7B,IAAI,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EAClC,IAAI,IAAI,MAAM,EAAE;EAChB,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;EAC3C,UAAU,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxC;EACA,MAAM,IAAI,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EACxC,MAAM,IAAI,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACpC;EACA,MAAM,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC9B;EACA,MAAM,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;EAC5C,KAAK;EACL,GAAG;AACH;EACA,EAAE,SAAS,iBAAiB,CAAC,IAAI,EAAE;EACnC;EACA,IAAI,IAAI,SAAS,GAAG,EAAE,CAAC;EACvB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;EACrB,MAAM,OAAO,SAAS,CAAC;EACvB,KAAK;EACL,IAAI,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;EACtD,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,EAAE,CAAC,EAAE;EAC3C,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC/B,MAAM,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACxG,MAAM,IAAI,SAAS,IAAI,SAAS,CAAC,GAAG,EAAE;EACtC,QAAQ,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EAClC,OAAO;EACP,KAAK;AACL;EACA,IAAI,OAAO,SAAS,CAAC;EACrB,GAAG;AACH;EACA,EAAE,SAAS,cAAc,CAAC,MAAM,EAAE;EAClC,IAAI,IAAI,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;EACtC,IAAI,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;EACjC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;EACjC,MAAM,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;EACtD,KAAK;EACL,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,SAAS,sBAAsB,CAAC,IAAI,EAAE;EACxC,IAAI,QAAQ,IAAI,KAAK,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE;EAC1E,GAAG;AACH;EACA,EAAE,SAAS,kBAAkB,CAAC,MAAM,EAAE;EACtC,IAAI,IAAI,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;EACtC,IAAI,IAAI,CAAC,IAAI,EAAE;EACf,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;EACvB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;EACpC,KAAK;EACL,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,SAAS,eAAe,CAAC,MAAM,EAAE;EACnC,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;EACvC,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;EACzB,IAAI,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;EAClC,GAAG;EACH,CAAC;AACD;EACA,SAAS,IAAI,GAAG;;;;;;;;;;;;;;;;;;;ECzXhB,SAAS,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC;EACxC,EAAE,IAAI,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;EAChD,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC;AAC/B;EACA,EAAE,SAAS,KAAK,GAAG;EACnB,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;AACtC;EACA,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE;EAClC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;EAC/C,KAAK,MAAM;EACX,MAAM,OAAO,GAAG,IAAI,CAAC;EACrB,MAAM,IAAI,CAAC,SAAS,EAAE;EACtB,QAAQ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EAC3C,QAAQ,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;EAC9B,OAAO;EACP,KAAK;EACL,GACA;EACA,EAAE,IAAI,SAAS,GAAG,UAAU;EAC5B,IAAI,OAAO,GAAG,IAAI,CAAC;EACnB,IAAI,IAAI,GAAG,SAAS,CAAC;EACrB,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;EAC3B,IAAI,IAAI,OAAO,GAAG,SAAS,IAAI,CAAC,OAAO,CAAC;EACxC,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;EACpD,IAAI,IAAI,OAAO,EAAE;EACjB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EACzC,MAAM,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;EAC5B,KAAK;AACL;EACA,IAAI,OAAO,MAAM,CAAC;EAClB,GAAG,CAAC;AACJ;EACA,EAAE,SAAS,CAAC,KAAK,GAAG,WAAW;EAC/B,IAAI,IAAI,OAAO,EAAE;EACjB,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;EAC5B,MAAM,OAAO,GAAG,IAAI,CAAC;EACrB,KAAK;EACL,GAAG,CAAC;EACJ;EACA,EAAE,SAAS,CAAC,KAAK,GAAG,WAAW;EAC/B,IAAI,IAAI,OAAO,EAAE;EACjB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EACzC,MAAM,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;EAC5B;EACA,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;EAC5B,MAAM,OAAO,GAAG,IAAI,CAAC;EACrB,KAAK;EACL,GAAG,CAAC;AACJ;EACA,EAAE,OAAO,SAAS,CAAC;EACnB,CACA;EACA;EACA,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC7B;MACA,UAAc,GAAG,QAAQ;;ECnEzB,SAAS0B,iBAAe,CAAC,QAAQ,EAAE,WAAW,EAAE;EAChD,EAAE,IAAI,EAAE,QAAQ,YAAY,WAAW,CAAC,EAAE;EAC1C,IAAI,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;EAC7D,GAAG;EACH,CAAC;AACD;EACA,SAASC,gBAAc,CAAC,GAAG,EAAE,CAAC,EAAE;EAChC,EAAE,OAAOC,iBAAe,CAAC,GAAG,CAAC,IAAIC,uBAAqB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAIC,kBAAgB,EAAE,CAAC;EACrF,CAAC;AACD;EACA,SAASF,iBAAe,CAAC,GAAG,EAAE;EAC9B,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC;EACrC,CAAC;AACD;EACA,SAASC,uBAAqB,CAAC,GAAG,EAAE,CAAC,EAAE;EACvC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,oBAAoB,CAAC,EAAE;EACzG,IAAI,OAAO;EACX,GAAG;AACH;EACA,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;EAChB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;EAChB,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;EACjB,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;AACrB;EACA,EAAE,IAAI;EACN,IAAI,KAAK,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE;EACxF,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1B;EACA,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM;EACxC,KAAK;EACL,GAAG,CAAC,OAAO,GAAG,EAAE;EAChB,IAAI,EAAE,GAAG,IAAI,CAAC;EACd,IAAI,EAAE,GAAG,GAAG,CAAC;EACb,GAAG,SAAS;EACZ,IAAI,IAAI;EACR,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;EACtD,KAAK,SAAS;EACd,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC;EACvB,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAASC,kBAAgB,GAAG;EAC5B,EAAE,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;EAC9E,CAAC;AACD;EACA,IAAI,IAAI,GAAG,SAAS,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;EACrC,EAAE,IAAI,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;EACpC,MAAM,UAAU,GAAG,YAAY,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,YAAY;EAChE,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa;EAC7C,MAAM,aAAa,GAAG,kBAAkB,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,kBAAkB;EAC/E,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ;EACnC,MAAM,QAAQ,GAAG,aAAa,KAAK,KAAK,CAAC,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,aAAa,CAAC;AACxF;EACA,EAAEJ,iBAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9B;EACA,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;EACnB,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;EAC/B,EAAE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;EACrC,EAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;EAC3B,CAAC,CAAC;AACF;EACA,SAAS7B,OAAK,EAAE,KAAK,EAAE;EACvB,EAAE,IAAI,eAAe,GAAG,KAAK,CAAC,SAAS;EACvC,MAAM,SAAS,GAAG,eAAe,KAAK,KAAK,CAAC,GAAG,YAAY;EAC3D,IAAI,OAAO,EAAE,CAAC;EACd,GAAG,GAAG,eAAe;EACrB,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK;EAC/B,MAAM,QAAQ,GAAG,WAAW,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,WAAW;EAC1D,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO;EACnC,MAAM,OAAO,GAAG,aAAa,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,aAAa;EAC7D,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO;EACnC,MAAM,OAAO,GAAG,aAAa,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,aAAa;EAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI;EAC7B,MAAM,MAAM,GAAG,UAAU,KAAK,KAAK,CAAC,GAAG,YAAY,EAAE,GAAG,UAAU;EAClE,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM;EACjC,MAAM,QAAQ,GAAG,YAAY,KAAK,KAAK,CAAC,GAAG,YAAY,EAAE,GAAG,YAAY,CAAC;EACzE;EACA,EAAE,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,UAAU,QAAQ,EAAE;EAC5D,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;EAClD,GAAG,CAAC,CAAC;EACL,EAAE,OAAO,YAAY;EACrB,IAAI,IAAI,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;EACzF;EACA,IAAI,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,YAAY,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS;EAChG,IAAI;EACJ,MAAM,WAAW,EAAE,KAAK;EACxB,KAAK,CAAC,CAAC;AACP;EACA,IAAI,IAAI,YAAY,GAAG,EAAE,CAAC;AAC1B;EACA,IAAI,SAAS,IAAI,CAAC,WAAW,EAAE;EAC/B,MAAM,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;EACvC,MAAM,MAAM,EAAE,CAAC;EACf,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;AACL;EACA,IAAI,IAAI,UAAU,GAAG,SAAS,UAAU,CAAC,WAAW,EAAE,OAAO,EAAE;EAC/D,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;EACrD,MAAM,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;EAC/B,KAAK,CAAC;AACN;EACA,IAAI,IAAI,MAAM,GAAGkC,UAAQ,CAAC,YAAY;EACtC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;EAC9B,QAAQ,OAAO;EACf,OAAO;AACP;EACA,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;EAC/C,MAAM,YAAY,GAAG,EAAE,CAAC;EACxB,KAAK,EAAE,CAAC,CAAC,CAAC;AACV;EACA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EAClC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;AACzC;EACA,MAAM,SAAS,UAAU,CAAC,KAAK,EAAE;EACjC,QAAQ,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI;EAC7B,YAAY,mBAAmB,GAAG,KAAK,CAAC,aAAa;EACrD,YAAY,QAAQ,GAAG,mBAAmB,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,mBAAmB;EACnF,YAAY,cAAc,GAAG,KAAK,CAAC,QAAQ;EAC3C,YAAY,QAAQ,GAAG,cAAc,KAAK,KAAK,CAAC,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,cAAc;EAC/F,YAAY,gBAAgB,GAAG,KAAK,CAAC,UAAU;EAC/C,YAAY,UAAU,GAAG,gBAAgB,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,gBAAgB,CAAC;EAC/E,QAAQ,OAAO,UAAU,CAAC,EAAE;EAC5B,UAAU,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;AACnC;EACA,UAAU,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;EACjC,YAAY,OAAO,MAAM,CAAC;EAC1B,WAAW;AACX;AACA;EACA,UAAU,IAAI,GAAG,GAAG,CAAC,KAAK,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC;AACrD;EACA,UAAU,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;EAC5B,UAAU,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAClD;EACA,UAAU,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AAC9E;EACA,UAAU,IAAI,QAAQ,EAAE;EACxB,YAAY,MAAM,EAAE,CAAC;EACrB,WAAW;AACX;EACA,UAAU,OAAO,IAAI,CAAC;EACtB,SAAS,CAAC;EACV,OAAO;EACP,KAAK,CAAC,CAAC;AACP;EACA,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,UAAU,EAAE;EACvD,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,YAAY;EACrC,QAAQ,IAAI,mBAAmB,CAAC;AAChC;EACA,QAAQ,KAAK,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE;EACjG,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;EACvC,SAAS;AACT;EACA,QAAQ,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;EACvH,OAAO,CAAC;EACR,KAAK,CAAC,CAAC;AACP;EACA,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE;EACrD,MAAM,IAAI,KAAK,GAAGJ,gBAAc,CAAC,KAAK,EAAE,CAAC,CAAC;EAC1C,UAAU,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;EAC1B,UAAU,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5B;EACA,MAAM,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;EACxC,KAAK,CAAC,CAAC;AACP;EACA,IAAI,IAAI,CAAC,UAAU,GAAG,YAAY;EAClC,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EACpC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EACzC,OAAO,CAAC,CAAC;EACT,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK,CAAC;AACN;AACA;EACA,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;AACtB;EACA,IAAI,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;AAC7B;EACA,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG,CAAC;EACJ;;ECxLA,IAAI9B,OAAK,IAAI,UAAU,CAAC,EAAE;EAC1B,EAAE,OAAO,CAAC,YAAY,QAAQ,GAAG,CAAC;EAClC,IAAI,OAAO,CAAC,KAAK,QAAQ,GAAG,UAAU,GAAG,EAAE;EAC3C,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;EAClB,GAAG;EACH,IAAI,UAAU,GAAG,EAAE;EACnB,IAAI,OAAO,CAAC,CAAC;EACb,GAAG,CAAC;EACJ,CAAC,CAAC,CAAC;;ECRY,SAAS,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE;EAC7C,EAAE,IAAI,GAAG,CAAC;EACV,EAAE,IAAI,OAAO,KAAK,SAAS,EAAE;EAC7B,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;EAChC,MAAM,IAAI,KAAK,IAAI,IAAI;EACvB,cAAc,GAAG,GAAG,KAAK,KAAK,GAAG,KAAK,SAAS,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE;EACrE,QAAQ,GAAG,GAAG,KAAK,CAAC;EACpB,OAAO;EACP,KAAK;EACL,GAAG,MAAM;EACT,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;EACnB,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE;EAC9B,MAAM,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI;EAC3D,cAAc,GAAG,GAAG,KAAK,KAAK,GAAG,KAAK,SAAS,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE;EACrE,QAAQ,GAAG,GAAG,KAAK,CAAC;EACpB,OAAO;EACP,KAAK;EACL,GAAG;EACH,EAAE,OAAO,GAAG,CAAC;EACb;;ECnBe,SAAS,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE;EAC7C,EAAE,IAAI,GAAG,CAAC;EACV,EAAE,IAAI,OAAO,KAAK,SAAS,EAAE;EAC7B,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;EAChC,MAAM,IAAI,KAAK,IAAI,IAAI;EACvB,cAAc,GAAG,GAAG,KAAK,KAAK,GAAG,KAAK,SAAS,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE;EACrE,QAAQ,GAAG,GAAG,KAAK,CAAC;EACpB,OAAO;EACP,KAAK;EACL,GAAG,MAAM;EACT,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;EACnB,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE;EAC9B,MAAM,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI;EAC3D,cAAc,GAAG,GAAG,KAAK,KAAK,GAAG,KAAK,SAAS,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE;EACrE,QAAQ,GAAG,GAAG,KAAK,CAAC;EACpB,OAAO;EACP,KAAK;EACL,GAAG;EACH,EAAE,OAAO,GAAG,CAAC;EACb;;ECnBA,SAASmC,+BAA6B,CAAC,MAAM,EAAE,QAAQ,EAAE;EACzD,EAAE,IAAI,MAAM,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;EAChC,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC;EAClB,EAAE,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EACvC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AACb;EACA,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC1C,IAAI,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;EACxB,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS;EAC7C,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;EAC9B,GAAG;AACH;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC;AACD;EACA,SAASC,0BAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE;EACpD,EAAE,IAAI,MAAM,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;AAChC;EACA,EAAE,IAAI,MAAM,GAAGD,+BAA6B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC/D;EACA,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AACb;EACA,EAAE,IAAI,MAAM,CAAC,qBAAqB,EAAE;EACpC,IAAI,IAAI,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAChE;EACA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAClD,MAAM,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;EAChC,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS;EAC/C,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS;EAC7E,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;EAChC,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC;AACD;EACA,SAASL,gBAAc,CAAC,GAAG,EAAE,CAAC,EAAE;EAChC,EAAE,OAAOC,iBAAe,CAAC,GAAG,CAAC,IAAIC,uBAAqB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAIC,kBAAgB,EAAE,CAAC;EACrF,CAAC;AACD;EACA,SAASI,oBAAkB,CAAC,GAAG,EAAE;EACjC,EAAE,OAAOC,oBAAkB,CAAC,GAAG,CAAC,IAAIC,kBAAgB,CAAC,GAAG,CAAC,IAAIC,oBAAkB,EAAE,CAAC;EAClF,CAAC;AACD;EACA,SAASF,oBAAkB,CAAC,GAAG,EAAE;EACjC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;EAC1B,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACxF;EACA,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;EACH,CAAC;AACD;EACA,SAASP,iBAAe,CAAC,GAAG,EAAE;EAC9B,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC;EACrC,CAAC;AACD;EACA,SAASQ,kBAAgB,CAAC,IAAI,EAAE;EAChC,EAAE,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,oBAAoB,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAChI,CAAC;AACD;EACA,SAASP,uBAAqB,CAAC,GAAG,EAAE,CAAC,EAAE;EACvC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,oBAAoB,CAAC,EAAE;EACzG,IAAI,OAAO;EACX,GAAG;AACH;EACA,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;EAChB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;EAChB,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;EACjB,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;AACrB;EACA,EAAE,IAAI;EACN,IAAI,KAAK,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE;EACxF,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1B;EACA,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM;EACxC,KAAK;EACL,GAAG,CAAC,OAAO,GAAG,EAAE;EAChB,IAAI,EAAE,GAAG,IAAI,CAAC;EACd,IAAI,EAAE,GAAG,GAAG,CAAC;EACb,GAAG,SAAS;EACZ,IAAI,IAAI;EACR,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;EACtD,KAAK,SAAS;EACd,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC;EACvB,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAASQ,oBAAkB,GAAG;EAC9B,EAAE,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;EACzE,CAAC;AACD;EACA,SAASP,kBAAgB,GAAG;EAC5B,EAAE,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;EAC9E,CAAC;AACD;EACA,SAAS,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;EACnC,EAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,OAAO,KAAK,CAAC;EAChE,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACvC;EACA,EAAE,IAAI,IAAI,KAAK,SAAS,EAAE;EAC1B,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,SAAS,CAAC,CAAC;EAClD,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,OAAO,GAAG,CAAC;EAC5C,IAAI,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;EACxE,GAAG;AACH;EACA,EAAE,OAAO,CAAC,IAAI,KAAK,QAAQ,GAAG,MAAM,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC;EACtD,CAAC;AACD;EACA,SAAS,cAAc,CAAC,GAAG,EAAE;EAC7B,EAAE,IAAI,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACxC;EACA,EAAE,OAAO,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;EACrD,CAAC;AACD;EACA,IAAI,KAAK,IAAI,YAAY;EACzB,EAAE,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;EACpF,EAAE,IAAI,YAAY,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;EAC5F,EAAE,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;EAC3F,EAAE,IAAI,WAAW,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;EAC9F,EAAE,IAAI,IAAI,GAAG,CAAC,YAAY,YAAY,KAAK,GAAG,YAAY,CAAC,MAAM,GAAG,YAAY,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,UAAU,GAAG,EAAE;EACpI,IAAI,OAAO;EACX,MAAM,WAAW,EAAE,GAAG;EACtB,MAAM,MAAM,EAAE,EAAE,GAAG,YAAY,QAAQ,CAAC;EACxC,KAAK,CAAC;EACN,GAAG,CAAC,CAAC;EACL,EAAE,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE;EACvD,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;EACtB,IAAI,IAAI,OAAO,GAAG,IAAI,CAAC;EACvB,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,GAAG,EAAE;EACtC,MAAM,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW;EACxC,UAAU,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;EAC/B,MAAM,IAAI,GAAG,CAAC;AACd;EACA,MAAM,IAAI,MAAM,EAAE;EAClB,QAAQ,IAAI,QAAQ,GAAG,OAAO;EAC9B,YAAY,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC;EAC3C,YAAY,IAAI,GAAGG,0BAAwB,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;AACzF;EACA,QAAQ,GAAG,GAAG,OAAO,CAAC;EACtB,QAAQ,OAAO,GAAG,IAAI,CAAC;EACvB,OAAO,MAAM;EACb,QAAQ,GAAG,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;EACxC,OAAO;AACP;EACA,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;EACjC,QAAQ,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;EAC1C,UAAU,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;EAC5B,SAAS;AACT;EACA,QAAQ,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;EAC/B,OAAO,MAAM;EACb;EACA,QAAQ,IAAI,SAAS,EAAE;EACvB,UAAU,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;EAC5C,YAAY,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;EAC9B,WAAW;AACX;EACA,UAAU,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;EACrC,SAAS,MAAM;EACf,UAAU,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;EACjC,SAAS;EACT,OAAO;EACP,KAAK,CAAC,CAAC;EACP,IAAI,OAAO,GAAG,CAAC;EACf,GAAG,EAAE,EAAE,CAAC,CAAC;AACT;EACA,EAAE,IAAI,SAAS,YAAY,QAAQ,EAAE;EACrC;EACA,IAAI,CAAC,SAAS,MAAM,CAAC,IAAI,EAAE;EAC3B,MAAM,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACxF;EACA,MAAM,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE;EACjC,QAAQ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;EAC/C,UAAU,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EAC9C,SAAS,CAAC,CAAC;EACX,OAAO,MAAM;EACb,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE;EACrD,UAAU,OAAO,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;EAC1C,SAAS,CAAC,CAAC;EACX,OAAO;EACP,KAAK,EAAE,aAAa,CAAC,CAAC;AACtB;EACA,GAAG;AACH;EACA,EAAE,IAAI,MAAM,GAAG,aAAa,CAAC;AAC7B;EACA,EAAE,IAAI,WAAW,EAAE;EACnB;EACA,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB;EACA,IAAI,CAAC,SAAS,OAAO,CAAC,IAAI,EAAE;EAC5B,MAAM,IAAI,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAC3F;EACA,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;EAC1C,QAAQ,MAAM,CAAC,IAAI,CAAC;EACpB,UAAU,IAAI,EAAE,OAAO;EACvB,UAAU,IAAI,EAAE,IAAI;EACpB,SAAS,CAAC,CAAC;EACX,OAAO,MAAM;EACb,QAAQ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE;EACtD,UAAU,IAAI,KAAK,GAAGN,gBAAc,CAAC,KAAK,EAAE,CAAC,CAAC;EAC9C,cAAc,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;EAC5B,cAAc,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7B;EACA,UAAU,OAAO,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAACO,oBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC7E,SAAS,CAAC,CAAC;EACX,OAAO;EACP,KAAK,EAAE,aAAa,CAAC,CAAC;AACtB;AACA;EACA,IAAI,IAAI,YAAY,YAAY,KAAK,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;EAC3F;EACA,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;EAC1B,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;;EC1NF,SAASI,iBAAe,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;EAC1C,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE;EAClB,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE;EACpC,MAAM,KAAK,EAAE,KAAK;EAClB,MAAM,UAAU,EAAE,IAAI;EACtB,MAAM,YAAY,EAAE,IAAI;EACxB,MAAM,QAAQ,EAAE,IAAI;EACpB,KAAK,CAAC,CAAC;EACP,GAAG,MAAM;EACT,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;EACrB,GAAG;AACH;EACA,EAAE,OAAO,GAAG,CAAC;EACb,CAAC;AACD;EACA,SAASC,SAAO,CAAC,MAAM,EAAE,cAAc,EAAE;EACzC,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjC;EACA,EAAE,IAAI,MAAM,CAAC,qBAAqB,EAAE;EACpC,IAAI,IAAI,OAAO,GAAG,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;EACvD,IAAI,IAAI,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE;EAChE,MAAM,OAAO,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC;EACrE,KAAK,CAAC,CAAC;EACP,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EACnC,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAASC,gBAAc,CAAC,MAAM,EAAE;EAChC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC7C,IAAI,IAAI,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAC1D;EACA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;EACf,MAAMD,SAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EAC3D,QAAQD,iBAAe,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;EAClD,OAAO,CAAC,CAAC;EACT,KAAK,MAAM,IAAI,MAAM,CAAC,yBAAyB,EAAE;EACjD,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC;EAChF,KAAK,MAAM;EACX,MAAMC,SAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EACrD,QAAQ,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;EACzF,OAAO,CAAC,CAAC;EACT,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC;AACD;EACA,SAASP,+BAA6B,CAAC,MAAM,EAAE,QAAQ,EAAE;EACzD,EAAE,IAAI,MAAM,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;EAChC,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC;EAClB,EAAE,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EACvC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AACb;EACA,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC1C,IAAI,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;EACxB,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS;EAC7C,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;EAC9B,GAAG;AACH;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC;AACD;EACA,SAASC,0BAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE;EACpD,EAAE,IAAI,MAAM,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;AAChC;EACA,EAAE,IAAI,MAAM,GAAGD,+BAA6B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC/D;EACA,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AACb;EACA,EAAE,IAAI,MAAM,CAAC,qBAAqB,EAAE;EACpC,IAAI,IAAI,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAChE;EACA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAClD,MAAM,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;EAChC,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS;EAC/C,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS;EAC7E,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;EAChC,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC;AACD;EACA,SAASL,gBAAc,CAAC,GAAG,EAAE,CAAC,EAAE;EAChC,EAAE,OAAOC,iBAAe,CAAC,GAAG,CAAC,IAAIC,uBAAqB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAIC,kBAAgB,EAAE,CAAC;EACrF,CAAC;AACD;EACA,SAASI,oBAAkB,CAAC,GAAG,EAAE;EACjC,EAAE,OAAOC,oBAAkB,CAAC,GAAG,CAAC,IAAIC,kBAAgB,CAAC,GAAG,CAAC,IAAIC,oBAAkB,EAAE,CAAC;EAClF,CAAC;AACD;EACA,SAASF,oBAAkB,CAAC,GAAG,EAAE;EACjC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;EAC1B,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACxF;EACA,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;EACH,CAAC;AACD;EACA,SAASP,iBAAe,CAAC,GAAG,EAAE;EAC9B,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC;EACrC,CAAC;AACD;EACA,SAASQ,kBAAgB,CAAC,IAAI,EAAE;EAChC,EAAE,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,oBAAoB,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAChI,CAAC;AACD;EACA,SAASP,uBAAqB,CAAC,GAAG,EAAE,CAAC,EAAE;EACvC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,oBAAoB,CAAC,EAAE;EACzG,IAAI,OAAO;EACX,GAAG;AACH;EACA,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;EAChB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;EAChB,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;EACjB,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;AACrB;EACA,EAAE,IAAI;EACN,IAAI,KAAK,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE;EACxF,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1B;EACA,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM;EACxC,KAAK;EACL,GAAG,CAAC,OAAO,GAAG,EAAE;EAChB,IAAI,EAAE,GAAG,IAAI,CAAC;EACd,IAAI,EAAE,GAAG,GAAG,CAAC;EACb,GAAG,SAAS;EACZ,IAAI,IAAI;EACR,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;EACtD,KAAK,SAAS;EACd,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC;EACvB,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAASQ,oBAAkB,GAAG;EAC9B,EAAE,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;EACzE,CAAC;AACD;EACA,SAASP,kBAAgB,GAAG;EAC5B,EAAE,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;EAC9E,CAAC;AACD;EACA,SAAS,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;EAC5C,EAAE,IAAI,MAAM,GAAG;EACf,IAAI,KAAK,EAAE,EAAE;EACb,IAAI,MAAM,EAAE,EAAE;EACd,IAAI,IAAI,EAAE,EAAE;EACZ,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,UAAU,EAAE;EACnB;EACA,IAAI,IAAI,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;EAChC,IAAI,IAAI,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;EAChC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,CAACI,oBAAkB,CAAC,OAAO,CAAC,EAAEA,oBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EACzG,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,QAAQ,CAAC;EACvF,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;EACjE,KAAK,CAAC,CAAC;EACP,GAAG,MAAM;EACT;EACA,IAAI,IAAI,QAAQ,GAAGO,KAAO,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;EACpD,IAAI,IAAI,QAAQ,GAAGA,KAAO,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;EACpD,IAAI,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;EACrD,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EACjD,MAAM,IAAI,KAAK,GAAGd,gBAAc,CAAC,IAAI,EAAE,CAAC,CAAC;EACzC,UAAU,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;EACvB,UAAU,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1B;EACA,MAAM,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,QAAQ,CAAC;EAC3G,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;EACjF,KAAK,CAAC,CAAC;EACP,GAAG;AACH;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC;AACD;EACA,SAAS,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE;EACjD,EAAE,IAAI,iBAAiB,GAAG,KAAK,CAAC,WAAW;EAC3C,MAAM,WAAW,GAAG,iBAAiB,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,iBAAiB;EAC9E,MAAM,kBAAkB,GAAG,KAAK,CAAC,YAAY;EAC7C,MAAM,YAAY,GAAG,kBAAkB,KAAK,KAAK,CAAC,GAAG,QAAQ,GAAG,kBAAkB;EAClF,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU;EACnC,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK;EAC/B,MAAM,KAAK,GAAG,WAAW,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,WAAW,CAAC;AAC3D;EACA,EAAE,IAAI,UAAU,GAAG,SAAS,UAAU,CAAC,GAAG,EAAE;EAC5C,IAAI,OAAO,GAAG,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;EAC5C,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE;EACtD,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;EAC5B,GAAG,CAAC,CAAC;EACL,EAAE,IAAI,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EACjE,IAAI,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC;EAC7B,GAAG,CAAC,CAAC;EACL,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC;EACnB,EAAE,IAAI,IAAI,GAAG,KAAK,GAAG;EACrB,IAAI,KAAK,EAAE,KAAK;EAChB,IAAI,IAAI,EAAE,KAAK;EACf,IAAI,MAAM,EAAE,EAAE;EACd,GAAG;EACH,IAAI,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;EACzC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,KAAK,EAAE;EACjD,IAAI,IAAI,KAAK,GAAGA,gBAAc,CAAC,KAAK,EAAE,CAAC,CAAC;EACxC,QAAQ,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;EACxB,QAAQ,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACzB;EACA,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE;EACzB;EACA,MAAM,KAAK,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;EAC9C,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;EAC/C,KAAK;AACL;EACA,IAAI,OAAO,KAAK,CAAC;EACjB,GAAG,CAAC,CAAC;EACL,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EAC7D,IAAI,OAAOW,iBAAe,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;EACjD,GAAG,CAAC,CAAC,CAAC;EACN,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,UAAU,CAAC,IAAI,EAAE,YAAY;EACtC,SAAS;EACT,SAAS;EACT,KAAK,EAAE;EACP,EAAE,IAAI,eAAe,GAAG,KAAK,CAAC,SAAS;EACvC,MAAM,SAAS,GAAG,eAAe,KAAK,KAAK,CAAC,GAAG,UAAU,CAAC,EAAE;EAC5D,IAAI,OAAO,EAAE,CAAC;EACd,GAAG,GAAG,eAAe;EACrB,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS;EACvC,MAAM,SAAS,GAAG,eAAe,KAAK,KAAK,CAAC,GAAG,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,eAAe;EACrF,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO;EACnC,MAAM,OAAO,GAAG,aAAa,KAAK,KAAK,CAAC,GAAG,UAAU,GAAG,EAAE,EAAE,GAAG,aAAa;EAC5E,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW;EAC3C,MAAM,WAAW,GAAG,iBAAiB,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,iBAAiB;EAC9E,MAAM,kBAAkB,GAAG,KAAK,CAAC,YAAY;EAC7C,MAAM,YAAY,GAAG,kBAAkB,KAAK,KAAK,CAAC,GAAG,QAAQ,GAAG,kBAAkB;EAClF,MAAM,eAAe,GAAGL,0BAAwB,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;AAC9H;EACA,EAAE,IAAI,aAAa,GAAG,YAAY,CAAC,IAAI,EAAE,YAAY,EAAEO,gBAAc,CAAC;EACtE,IAAI,WAAW,EAAE,WAAW;EAC5B,IAAI,YAAY,EAAE,YAAY;EAC9B,GAAG,EAAE,eAAe,CAAC,CAAC;EACtB,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK;EACjC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM;EACnC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;AAChC;AACA;EACA,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;EAC5B,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;EAC7B,IAAI,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC;AAC1B;EACA,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;EACjB,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;EACnB,GAAG,CAAC,CAAC;EACL,EAAE,IAAI,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;EAClC,EAAE,IAAI,UAAU,GAAG,EAAE,CAAC,MAAM,CAACN,oBAAkB,CAAC,KAAK,CAAC,EAAEA,oBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;EACpF,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;AACzB;EACA,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC7B;EACA,EAAE,SAAS,UAAU,CAAC,IAAI,EAAE;EAC5B,IAAI,IAAI,OAAO,GAAG,EAAE,CAAC;EACrB,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;EAC9B,MAAM,IAAI,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC7B;EACA,MAAM,IAAI,GAAG,EAAE;EACf,QAAQ,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;EAC9B,QAAQ,CAAC,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;EAC7B,QAAQ,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EAC1B,OAAO;EACP,KAAK,CAAC,CAAC;EACP,IAAI,OAAO,OAAO,CAAC;EACnB,GAAG;AACH;EACA,EAAE,SAAS,UAAU,CAAC,IAAI,EAAE;EAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;EAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;AAC/B;EACA,MAAM,IAAI,GAAG,EAAE;EACf,QAAQ,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;EAC9B,QAAQ,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;EAC1B,OAAO;EACP,KAAK,CAAC,CAAC;EACP,GAAG;EACH;;ECnSO,SAAS,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE;EACzC,EAAE,QAAQ,SAAS,CAAC,MAAM;EAC1B,IAAI,KAAK,CAAC,EAAE,MAAM;EAClB,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;EACtC,IAAI,SAAS,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;EACrD,GAAG;EACH,EAAE,OAAO,IAAI,CAAC;EACd;;ECLO,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAC3C;EACe,SAAS,OAAO,GAAG;EAClC,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,EAAE;EACvB,MAAM,MAAM,GAAG,EAAE;EACjB,MAAM,KAAK,GAAG,EAAE;EAChB,MAAM,OAAO,GAAG,QAAQ,CAAC;AACzB;EACA,EAAE,SAAS,KAAK,CAAC,CAAC,EAAE;EACpB,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACzC,IAAI,IAAI,CAAC,CAAC,EAAE;EACZ,MAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,OAAO,OAAO,CAAC;EAC/C,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACzC,KAAK;EACL,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;EACzC,GAAG;AACH;EACA,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE;EAC7B,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;EACjD,IAAI,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;EACnC,IAAI,KAAK,MAAM,KAAK,IAAI,CAAC,EAAE;EAC3B,MAAM,MAAM,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC;EAC7B,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS;EACnC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;EACzC,KAAK;EACL,IAAI,OAAO,KAAK,CAAC;EACjB,GAAG,CAAC;AACJ;EACA,EAAE,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,EAAE;EAC5B,IAAI,OAAO,SAAS,CAAC,MAAM,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;EAC7E,GAAG,CAAC;AACJ;EACA,EAAE,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,EAAE;EAC9B,IAAI,OAAO,SAAS,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC;EAC7D,GAAG,CAAC;AACJ;EACA,EAAE,KAAK,CAAC,IAAI,GAAG,WAAW;EAC1B,IAAI,OAAO,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;EACnD,GAAG,CAAC;AACJ;EACA,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACpC;EACA,EAAE,OAAO,KAAK,CAAC;EACf;;EC7Ce,eAAQ,CAAC,SAAS,EAAE;EACnC,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EACjE,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;EAClE,EAAE,OAAO,MAAM,CAAC;EAChB;;ACFA,qBAAe,MAAM,CAAC,0EAA0E,CAAC;;;;;ECFjG;EACA;EACA;AACA;EACA,CAAC,SAAS,IAAI,EAAE;AAChB;EACA,IAAI,QAAQ,GAAG,MAAM;EACrB,IAAI,SAAS,GAAG,MAAM;EACtB,IAAI,WAAW,GAAG,CAAC;EACnB,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK;EAC1B,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG;EACtB,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG;EACtB,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7B;EACA,SAAS,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;AACjC;EACA,IAAI,KAAK,GAAG,CAAC,KAAK,IAAI,KAAK,GAAG,EAAE,CAAC;EACjC,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,CAAC;AACvB;EACA;EACA,IAAI,IAAI,KAAK,YAAY,SAAS,EAAE;EACpC,OAAO,OAAO,KAAK,CAAC;EACpB,KAAK;EACL;EACA,IAAI,IAAI,EAAE,IAAI,YAAY,SAAS,CAAC,EAAE;EACtC,QAAQ,OAAO,IAAI,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;EAC1C,KAAK;AACL;EACA,IAAI,IAAI,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;EAChC,IAAI,IAAI,CAAC,cAAc,GAAG,KAAK;EAC/B,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;EACnB,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;EACnB,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;EACnB,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;EACnB,IAAI,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG;EAC/C,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;EAC7C,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;AAC3C;EACA;EACA;EACA;EACA;EACA,IAAI,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE;EACtD,IAAI,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE;EACtD,IAAI,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE;AACtD;EACA,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;EACtB,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;EAChC,CAAC;AACD;EACA,SAAS,CAAC,SAAS,GAAG;EACtB,IAAI,MAAM,EAAE,WAAW;EACvB,QAAQ,OAAO,IAAI,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC;EAC1C,KAAK;EACL,IAAI,OAAO,EAAE,WAAW;EACxB,QAAQ,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;EAC9B,KAAK;EACL,IAAI,OAAO,EAAE,WAAW;EACxB,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC;EACxB,KAAK;EACL,IAAI,gBAAgB,EAAE,WAAW;EACjC,MAAM,OAAO,IAAI,CAAC,cAAc,CAAC;EACjC,KAAK;EACL,IAAI,SAAS,EAAE,WAAW;EAC1B,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC;EAC5B,KAAK;EACL,IAAI,QAAQ,EAAE,WAAW;EACzB,QAAQ,OAAO,IAAI,CAAC,EAAE,CAAC;EACvB,KAAK;EACL,IAAI,aAAa,EAAE,WAAW;EAC9B;EACA,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;EAC/B,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC;EAChE,KAAK;EACL,IAAI,YAAY,EAAE,WAAW;EAC7B;EACA,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;EAC/B,QAAQ,IAAI,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EACzC,QAAQ,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;EAC1B,QAAQ,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;EAC1B,QAAQ,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1B;EACA,QAAQ,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;EACvG,QAAQ,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;EACvG,QAAQ,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;EACvG,QAAQ,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;EAC1D,KAAK;EACL,IAAI,QAAQ,EAAE,SAAS,KAAK,EAAE;EAC9B,QAAQ,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;EACpC,QAAQ,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACpD,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK;EACL,IAAI,KAAK,EAAE,WAAW;EACtB,QAAQ,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;EACtD,QAAQ,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;EAClE,KAAK;EACL,IAAI,WAAW,EAAE,WAAW;EAC5B,QAAQ,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;EACtD,QAAQ,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;EAC/F,QAAQ,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;EAC5B,UAAU,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI;EACnD,UAAU,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;EACzE,KAAK;EACL,IAAI,KAAK,EAAE,WAAW;EACtB,QAAQ,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;EACtD,QAAQ,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;EAClE,KAAK;EACL,IAAI,WAAW,EAAE,WAAW;EAC5B,QAAQ,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;EACtD,QAAQ,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;EAC/F,QAAQ,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;EAC5B,UAAU,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI;EACnD,UAAU,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;EACzE,KAAK;EACL,IAAI,KAAK,EAAE,SAAS,UAAU,EAAE;EAChC,QAAQ,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;EAC/D,KAAK;EACL,IAAI,WAAW,EAAE,SAAS,UAAU,EAAE;EACtC,QAAQ,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;EAC5C,KAAK;EACL,IAAI,MAAM,EAAE,SAAS,UAAU,EAAE;EACjC,QAAQ,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;EACzE,KAAK;EACL,IAAI,YAAY,EAAE,SAAS,UAAU,EAAE;EACvC,QAAQ,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;EAC7C,KAAK;EACL,IAAI,KAAK,EAAE,WAAW;EACtB,QAAQ,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;EACnG,KAAK;EACL,IAAI,WAAW,EAAE,WAAW;EAC5B,QAAQ,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;EAC5B,UAAU,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG;EACpG,UAAU,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;EAC3H,KAAK;EACL,IAAI,eAAe,EAAE,WAAW;EAChC,QAAQ,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;EACjL,KAAK;EACL,IAAI,qBAAqB,EAAE,WAAW;EACtC,QAAQ,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;EAC5B,UAAU,MAAM,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI;EACnK,UAAU,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;EAC1L,KAAK;EACL,IAAI,MAAM,EAAE,WAAW;EACvB,QAAQ,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE;EAC3B,YAAY,OAAO,aAAa,CAAC;EACjC,SAAS;AACT;EACA,QAAQ,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE;EACzB,YAAY,OAAO,KAAK,CAAC;EACzB,SAAS;AACT;EACA,QAAQ,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;EAC5E,KAAK;EACL,IAAI,QAAQ,EAAE,SAAS,WAAW,EAAE;EACpC,QAAQ,IAAI,UAAU,GAAG,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;EACjF,QAAQ,IAAI,gBAAgB,GAAG,UAAU,CAAC;EAC1C,QAAQ,IAAI,YAAY,GAAG,IAAI,CAAC,aAAa,GAAG,oBAAoB,GAAG,EAAE,CAAC;AAC1E;EACA,QAAQ,IAAI,WAAW,EAAE;EACzB,YAAY,IAAI,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;EAC3C,YAAY,gBAAgB,GAAG,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;EAC3E,SAAS;AACT;EACA,QAAQ,OAAO,6CAA6C,CAAC,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC,eAAe,CAAC,gBAAgB,CAAC,GAAG,CAAC;EAC3I,KAAK;EACL,IAAI,QAAQ,EAAE,SAAS,MAAM,EAAE;EAC/B,QAAQ,IAAI,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;EACjC,QAAQ,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC;AACxC;EACA,QAAQ,IAAI,eAAe,GAAG,KAAK,CAAC;EACpC,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;EACnD,QAAQ,IAAI,gBAAgB,GAAG,CAAC,SAAS,IAAI,QAAQ,KAAK,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC,CAAC;AACrL;EACA,QAAQ,IAAI,gBAAgB,EAAE;EAC9B;EACA;EACA,YAAY,IAAI,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE;EACpD,gBAAgB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;EACrC,aAAa;EACb,YAAY,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;EACtC,SAAS;EACT,QAAQ,IAAI,MAAM,KAAK,KAAK,EAAE;EAC9B,YAAY,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;EACjD,SAAS;EACT,QAAQ,IAAI,MAAM,KAAK,MAAM,EAAE;EAC/B,YAAY,eAAe,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;EAC3D,SAAS;EACT,QAAQ,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE;EACnD,YAAY,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;EACjD,SAAS;EACT,QAAQ,IAAI,MAAM,KAAK,MAAM,EAAE;EAC/B,YAAY,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;EACrD,SAAS;EACT,QAAQ,IAAI,MAAM,KAAK,MAAM,EAAE;EAC/B,YAAY,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;EACtD,SAAS;EACT,QAAQ,IAAI,MAAM,KAAK,MAAM,EAAE;EAC/B,YAAY,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;EAClD,SAAS;EACT,QAAQ,IAAI,MAAM,KAAK,MAAM,EAAE;EAC/B,YAAY,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;EAC5C,SAAS;EACT,QAAQ,IAAI,MAAM,KAAK,KAAK,EAAE;EAC9B,YAAY,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;EACjD,SAAS;EACT,QAAQ,IAAI,MAAM,KAAK,KAAK,EAAE;EAC9B,YAAY,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;EACjD,SAAS;AACT;EACA,QAAQ,OAAO,eAAe,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;EACrD,KAAK;EACL,IAAI,KAAK,EAAE,WAAW;EACtB,QAAQ,OAAO,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;EAC1C,KAAK;AACL;EACA,IAAI,kBAAkB,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE;EAC3C,QAAQ,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EACvE,QAAQ,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;EAC3B,QAAQ,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;EAC3B,QAAQ,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;EAC3B,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;EAChC,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK;EACL,IAAI,OAAO,EAAE,WAAW;EACxB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;EAC3D,KAAK;EACL,IAAI,QAAQ,EAAE,WAAW;EACzB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;EAC5D,KAAK;EACL,IAAI,MAAM,EAAE,WAAW;EACvB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;EAC1D,KAAK;EACL,IAAI,UAAU,EAAE,WAAW;EAC3B,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;EAC9D,KAAK;EACL,IAAI,QAAQ,EAAE,WAAW;EACzB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;EAC5D,KAAK;EACL,IAAI,SAAS,EAAE,WAAW;EAC1B,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;EAC7D,KAAK;EACL,IAAI,IAAI,EAAE,WAAW;EACrB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;EACxD,KAAK;AACL;EACA,IAAI,iBAAiB,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE;EAC1C,QAAQ,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EAClE,KAAK;EACL,IAAI,SAAS,EAAE,WAAW;EAC1B,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;EAC5D,KAAK;EACL,IAAI,UAAU,EAAE,WAAW;EAC3B,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;EAC7D,KAAK;EACL,IAAI,aAAa,EAAE,WAAW;EAC9B,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;EAChE,KAAK;EACL,IAAI,eAAe,EAAE,WAAW;EAChC,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;EAClE,KAAK;EACL,IAAI,KAAK,EAAE,WAAW;EACtB,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;EACxD,KAAK;EACL,IAAI,MAAM,EAAE,WAAW;EACvB,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;EACzD,KAAK;EACL,CAAC,CAAC;AACF;EACA;EACA;EACA,SAAS,CAAC,SAAS,GAAG,SAAS,KAAK,EAAE,IAAI,EAAE;EAC5C,IAAI,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;EAClC,QAAQ,IAAI,QAAQ,GAAG,EAAE,CAAC;EAC1B,QAAQ,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;EAC7B,YAAY,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;EACzC,gBAAgB,IAAI,CAAC,KAAK,GAAG,EAAE;EAC/B,oBAAoB,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC3C,iBAAiB;EACjB,qBAAqB;EACrB,oBAAoB,QAAQ,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;EAChE,iBAAiB;EACjB,aAAa;EACb,SAAS;EACT,QAAQ,KAAK,GAAG,QAAQ,CAAC;EACzB,KAAK;AACL;EACA,IAAI,OAAO,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;EAClC,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,UAAU,CAAC,KAAK,EAAE;AAC3B;EACA,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EACnC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;EACd,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;EACjB,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;EACjB,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;EACjB,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC;EACnB,IAAI,IAAI,MAAM,GAAG,KAAK,CAAC;AACvB;EACA,IAAI,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;EAClC,QAAQ,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;EAC3C,KAAK;AACL;EACA,IAAI,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;EAClC,QAAQ,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;EAC3F,YAAY,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;EACtD,YAAY,EAAE,GAAG,IAAI,CAAC;EACtB,YAAY,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,MAAM,GAAG,KAAK,CAAC;EACzE,SAAS;EACT,aAAa,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;EAChG,YAAY,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC7C,YAAY,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC7C,YAAY,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EAC1C,YAAY,EAAE,GAAG,IAAI,CAAC;EACtB,YAAY,MAAM,GAAG,KAAK,CAAC;EAC3B,SAAS;EACT,aAAa,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;EAChG,YAAY,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC7C,YAAY,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC7C,YAAY,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EAC1C,YAAY,EAAE,GAAG,IAAI,CAAC;EACtB,YAAY,MAAM,GAAG,KAAK,CAAC;EAC3B,SAAS;AACT;EACA,QAAQ,IAAI,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;EACvC,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACxB,SAAS;EACT,KAAK;AACL;EACA,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AACtB;EACA,IAAI,OAAO;EACX,QAAQ,EAAE,EAAE,EAAE;EACd,QAAQ,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,MAAM;EACtC,QAAQ,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAC1C,QAAQ,CAAC,EAAE,CAAC;EACZ,KAAK,CAAC;EACN,CAAC;AACD;AACA;EACA;EACA;AACA;EACA;EACA;AACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EAC1B,IAAI,OAAO;EACX,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG;EAChC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG;EAChC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG;EAChC,KAAK,CAAC;EACN,CAAC;AACD;EACA;EACA;EACA;EACA;EACA,SAAS,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC3B;EACA,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;EACxB,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;EACxB,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACxB;EACA,IAAI,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EACvD,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;AAClC;EACA,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE;EACnB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EAClB,KAAK;EACL,SAAS;EACT,QAAQ,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;EAC1B,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;EAC5D,QAAQ,OAAO,GAAG;EAClB,YAAY,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM;EAC7D,YAAY,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;EAC/C,YAAY,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;EAC/C,SAAS;AACT;EACA,QAAQ,CAAC,IAAI,CAAC,CAAC;EACf,KAAK;AACL;EACA,IAAI,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EAChC,CAAC;AACD;EACA;EACA;EACA;EACA;EACA,SAAS,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;EAC3B,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAChB;EACA,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;EACxB,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;EACxB,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACxB;EACA,IAAI,SAAS,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;EAC9B,QAAQ,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;EACzB,QAAQ,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;EACzB,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EAC/C,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;EAC7B,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;EACvD,QAAQ,OAAO,CAAC,CAAC;EACjB,KAAK;AACL;EACA,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE;EAChB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACtB,KAAK;EACL,SAAS;EACT,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACtD,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EAC1B,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EACnC,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EAC7B,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EACnC,KAAK;AACL;EACA,IAAI,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC;EAClD,CAAC;AACD;EACA;EACA;EACA;EACA;EACA,SAAS,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC3B;EACA,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;EACxB,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;EACxB,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACxB;EACA,IAAI,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EACvD,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACtB;EACA,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;EACtB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAChC;EACA,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE;EACnB,QAAQ,CAAC,GAAG,CAAC,CAAC;EACd,KAAK;EACL,SAAS;EACT,QAAQ,OAAO,GAAG;EAClB,YAAY,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM;EAC7D,YAAY,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;EAC/C,YAAY,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;EAC/C,SAAS;EACT,QAAQ,CAAC,IAAI,CAAC,CAAC;EACf,KAAK;EACL,IAAI,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EAChC,CAAC;AACD;EACA;EACA;EACA;EACA;EACA,CAAC,SAAS,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC5B;EACA,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;EAC5B,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;EACxB,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACxB;EACA,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;EACzB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;EACjB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACvB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EAC3B,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;EACjC,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC;EACnB,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;EACnC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;EACnC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACpC;EACA,IAAI,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC;EAClD,CAAC;AACD;EACA;EACA;EACA;EACA;EACA,SAAS,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE;AACvC;EACA,IAAI,IAAI,GAAG,GAAG;EACd,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;EACvC,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;EACvC,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;EACvC,KAAK,CAAC;AACN;EACA;EACA,IAAI,IAAI,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;EAC5I,QAAQ,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACtE,KAAK;AACL;EACA,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EACxB,CAAC;AACD;EACA;EACA;EACA;EACA;EACA,SAAS,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE;AAC3C;EACA,IAAI,IAAI,GAAG,GAAG;EACd,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;EACvC,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;EACvC,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;EACvC,QAAQ,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;EACpC,KAAK,CAAC;AACN;EACA;EACA,IAAI,IAAI,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;EACpL,QAAQ,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACzF,KAAK;AACL;EACA,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EACxB,CAAC;AACD;EACA;EACA;EACA;EACA,SAAS,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACnC;EACA,IAAI,IAAI,GAAG,GAAG;EACd,QAAQ,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;EACpC,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;EACvC,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;EACvC,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;EACvC,KAAK,CAAC;AACN;EACA,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EACxB,CAAC;AACD;EACA;EACA;EACA,SAAS,CAAC,MAAM,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE;EAC7C,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,KAAK,CAAC,EAAE;EAC7C,IAAI,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;EAC9E,CAAC,CAAC;AACF;EACA,SAAS,CAAC,MAAM,GAAG,WAAW;EAC9B,IAAI,OAAO,SAAS,CAAC,SAAS,CAAC;EAC/B,QAAQ,CAAC,EAAE,UAAU,EAAE;EACvB,QAAQ,CAAC,EAAE,UAAU,EAAE;EACvB,QAAQ,CAAC,EAAE,UAAU,EAAE;EACvB,KAAK,CAAC,CAAC;EACP,CAAC,CAAC;AACF;AACA;EACA;EACA;EACA;EACA;AACA;EACA,SAAS,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE;EACnC,IAAI,MAAM,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,IAAI,EAAE,CAAC,CAAC;EACjD,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;EACvC,IAAI,GAAG,CAAC,CAAC,IAAI,MAAM,GAAG,GAAG,CAAC;EAC1B,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC3B,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;EAC1B,CAAC;AACD;EACA,SAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE;EACjC,IAAI,MAAM,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,IAAI,EAAE,CAAC,CAAC;EACjD,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;EACvC,IAAI,GAAG,CAAC,CAAC,IAAI,MAAM,GAAG,GAAG,CAAC;EAC1B,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC3B,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;EAC1B,CAAC;AACD;EACA,SAAS,SAAS,CAAC,KAAK,EAAE;EAC1B,IAAI,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;EAC5C,CAAC;AACD;EACA,SAAS,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;EACjC,IAAI,MAAM,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,IAAI,EAAE,CAAC,CAAC;EACjD,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;EACvC,IAAI,GAAG,CAAC,CAAC,IAAI,MAAM,GAAG,GAAG,CAAC;EAC1B,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC3B,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;EAC1B,CAAC;AACD;EACA,SAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE;EACjC,IAAI,MAAM,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,IAAI,EAAE,CAAC,CAAC;EACjD,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;EACvC,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EAChF,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EAChF,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EAChF,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;EAC1B,CAAC;AACD;EACA,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;EAChC,IAAI,MAAM,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,IAAI,EAAE,CAAC,CAAC;EACjD,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;EACvC,IAAI,GAAG,CAAC,CAAC,IAAI,MAAM,GAAG,GAAG,CAAC;EAC1B,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC3B,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;EAC1B,CAAC;AACD;EACA;EACA;EACA,SAAS,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;EAC7B,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;EACvC,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC;EACrC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EACtC,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;EAC1B,CAAC;AACD;EACA;EACA;EACA;EACA;AACA;EACA,SAAS,UAAU,CAAC,KAAK,EAAE;EAC3B,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;EACvC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC;EAChC,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;EAC1B,CAAC;AACD;EACA,SAAS,KAAK,CAAC,KAAK,EAAE;EACtB,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;EACvC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAClB,IAAI,OAAO;EACX,QAAQ,SAAS,CAAC,KAAK,CAAC;EACxB,QAAQ,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;EAC7D,QAAQ,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;EAC7D,KAAK,CAAC;EACN,CAAC;AACD;EACA,SAAS,MAAM,CAAC,KAAK,EAAE;EACvB,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;EACvC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAClB,IAAI,OAAO;EACX,QAAQ,SAAS,CAAC,KAAK,CAAC;EACxB,QAAQ,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;EAC5D,QAAQ,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;EAC7D,QAAQ,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;EAC7D,KAAK,CAAC;EACN,CAAC;AACD;EACA,SAAS,eAAe,CAAC,KAAK,EAAE;EAChC,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;EACvC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAClB,IAAI,OAAO;EACX,QAAQ,SAAS,CAAC,KAAK,CAAC;EACxB,QAAQ,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;EAC3D,QAAQ,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;EAC5D,KAAK,CAAC;EACN,CAAC;AACD;EACA,SAAS,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE;EAC3C,IAAI,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;EAC3B,IAAI,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;AAC1B;EACA,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;EACvC,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC;EAC5B,IAAI,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACjC;EACA,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,OAAO,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,OAAO,IAAI;EAC7E,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC;EACrC,QAAQ,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;EACjC,KAAK;EACL,IAAI,OAAO,GAAG,CAAC;EACf,CAAC;AACD;EACA,SAAS,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE;EACvC,IAAI,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;EAC3B,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;EACvC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACxC,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;EACjB,IAAI,IAAI,YAAY,GAAG,CAAC,GAAG,OAAO,CAAC;AACnC;EACA,IAAI,OAAO,OAAO,EAAE,EAAE;EACtB,QAAQ,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;EACjD,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC,CAAC;EACnC,KAAK;AACL;EACA,IAAI,OAAO,GAAG,CAAC;EACf,CAAC;AACD;EACA;EACA;AACA;EACA,SAAS,CAAC,GAAG,GAAG,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;EACjD,IAAI,MAAM,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,IAAI,EAAE,CAAC,CAAC;AACjD;EACA,IAAI,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;EACzC,IAAI,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;AACzC;EACA,IAAI,IAAI,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC;AACzB;EACA,IAAI,IAAI,IAAI,GAAG;EACf,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;EAC3C,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;EAC3C,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;EAC3C,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;EAC3C,KAAK,CAAC;AACN;EACA,IAAI,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;EAC3B,CAAC,CAAC;AACF;AACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA,SAAS,CAAC,WAAW,GAAG,SAAS,MAAM,EAAE,MAAM,EAAE;EACjD,IAAI,IAAI,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;EAC/B,IAAI,IAAI,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;EAC/B,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;EACvH,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;EACA,SAAS,CAAC,UAAU,GAAG,SAAS,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;EACvD,IAAI,IAAI,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EAC5D,IAAI,IAAI,UAAU,EAAE,GAAG,CAAC;AACxB;EACA,IAAI,GAAG,GAAG,KAAK,CAAC;AAChB;EACA,IAAI,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;EAC3C,IAAI,QAAQ,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI;EAC9C,QAAQ,KAAK,SAAS,CAAC;EACvB,QAAQ,KAAK,UAAU;EACvB,YAAY,GAAG,GAAG,WAAW,IAAI,GAAG,CAAC;EACrC,YAAY,MAAM;EAClB,QAAQ,KAAK,SAAS;EACtB,YAAY,GAAG,GAAG,WAAW,IAAI,CAAC,CAAC;EACnC,YAAY,MAAM;EAClB,QAAQ,KAAK,UAAU;EACvB,YAAY,GAAG,GAAG,WAAW,IAAI,CAAC,CAAC;EACnC,YAAY,MAAM;EAClB,KAAK;EACL,IAAI,OAAO,GAAG,CAAC;AACf;EACA,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,CAAC,YAAY,GAAG,SAAS,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE;EAC9D,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC;EACzB,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC;EACtB,IAAI,IAAI,WAAW,CAAC;EACpB,IAAI,IAAI,qBAAqB,EAAE,KAAK,EAAE,IAAI,EAAE;EAC5C,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;EACtB,IAAI,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,EAAE;EACxD,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;EACvB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACrB;EACA,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE;EAC/C,QAAQ,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;EACrE,QAAQ,IAAI,WAAW,GAAG,SAAS,EAAE;EACrC,YAAY,SAAS,GAAG,WAAW,CAAC;EACpC,YAAY,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;EAChD,SAAS;EACT,KAAK;AACL;EACA,IAAI,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,qBAAqB,EAAE;EAC3G,QAAQ,OAAO,SAAS,CAAC;EACzB,KAAK;EACL,SAAS;EACT,QAAQ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;EACzC,QAAQ,OAAO,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;EACvE,KAAK;EACL,CAAC,CAAC;AACF;AACA;EACA;EACA;EACA;EACA,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK,GAAG;EAC9B,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,YAAY,EAAE,QAAQ;EAC1B,IAAI,IAAI,EAAE,KAAK;EACf,IAAI,UAAU,EAAE,QAAQ;EACxB,IAAI,KAAK,EAAE,QAAQ;EACnB,IAAI,KAAK,EAAE,QAAQ;EACnB,IAAI,MAAM,EAAE,QAAQ;EACpB,IAAI,KAAK,EAAE,KAAK;EAChB,IAAI,cAAc,EAAE,QAAQ;EAC5B,IAAI,IAAI,EAAE,KAAK;EACf,IAAI,UAAU,EAAE,QAAQ;EACxB,IAAI,KAAK,EAAE,QAAQ;EACnB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,WAAW,EAAE,QAAQ;EACzB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,UAAU,EAAE,QAAQ;EACxB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,KAAK,EAAE,QAAQ;EACnB,IAAI,cAAc,EAAE,QAAQ;EAC5B,IAAI,QAAQ,EAAE,QAAQ;EACtB,IAAI,OAAO,EAAE,QAAQ;EACrB,IAAI,IAAI,EAAE,KAAK;EACf,IAAI,QAAQ,EAAE,QAAQ;EACtB,IAAI,QAAQ,EAAE,QAAQ;EACtB,IAAI,aAAa,EAAE,QAAQ;EAC3B,IAAI,QAAQ,EAAE,QAAQ;EACtB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,QAAQ,EAAE,QAAQ;EACtB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,WAAW,EAAE,QAAQ;EACzB,IAAI,cAAc,EAAE,QAAQ;EAC5B,IAAI,UAAU,EAAE,QAAQ;EACxB,IAAI,UAAU,EAAE,QAAQ;EACxB,IAAI,OAAO,EAAE,QAAQ;EACrB,IAAI,UAAU,EAAE,QAAQ;EACxB,IAAI,YAAY,EAAE,QAAQ;EAC1B,IAAI,aAAa,EAAE,QAAQ;EAC3B,IAAI,aAAa,EAAE,QAAQ;EAC3B,IAAI,aAAa,EAAE,QAAQ;EAC3B,IAAI,aAAa,EAAE,QAAQ;EAC3B,IAAI,UAAU,EAAE,QAAQ;EACxB,IAAI,QAAQ,EAAE,QAAQ;EACtB,IAAI,WAAW,EAAE,QAAQ;EACzB,IAAI,OAAO,EAAE,QAAQ;EACrB,IAAI,OAAO,EAAE,QAAQ;EACrB,IAAI,UAAU,EAAE,QAAQ;EACxB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,WAAW,EAAE,QAAQ;EACzB,IAAI,WAAW,EAAE,QAAQ;EACzB,IAAI,OAAO,EAAE,KAAK;EAClB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,UAAU,EAAE,QAAQ;EACxB,IAAI,IAAI,EAAE,QAAQ;EAClB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,IAAI,EAAE,QAAQ;EAClB,IAAI,KAAK,EAAE,QAAQ;EACnB,IAAI,WAAW,EAAE,QAAQ;EACzB,IAAI,IAAI,EAAE,QAAQ;EAClB,IAAI,QAAQ,EAAE,QAAQ;EACtB,IAAI,OAAO,EAAE,QAAQ;EACrB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,MAAM,EAAE,QAAQ;EACpB,IAAI,KAAK,EAAE,QAAQ;EACnB,IAAI,KAAK,EAAE,QAAQ;EACnB,IAAI,QAAQ,EAAE,QAAQ;EACtB,IAAI,aAAa,EAAE,QAAQ;EAC3B,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,YAAY,EAAE,QAAQ;EAC1B,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,UAAU,EAAE,QAAQ;EACxB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,oBAAoB,EAAE,QAAQ;EAClC,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,UAAU,EAAE,QAAQ;EACxB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,WAAW,EAAE,QAAQ;EACzB,IAAI,aAAa,EAAE,QAAQ;EAC3B,IAAI,YAAY,EAAE,QAAQ;EAC1B,IAAI,cAAc,EAAE,KAAK;EACzB,IAAI,cAAc,EAAE,KAAK;EACzB,IAAI,cAAc,EAAE,QAAQ;EAC5B,IAAI,WAAW,EAAE,QAAQ;EACzB,IAAI,IAAI,EAAE,KAAK;EACf,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,KAAK,EAAE,QAAQ;EACnB,IAAI,OAAO,EAAE,KAAK;EAClB,IAAI,MAAM,EAAE,QAAQ;EACpB,IAAI,gBAAgB,EAAE,QAAQ;EAC9B,IAAI,UAAU,EAAE,QAAQ;EACxB,IAAI,YAAY,EAAE,QAAQ;EAC1B,IAAI,YAAY,EAAE,QAAQ;EAC1B,IAAI,cAAc,EAAE,QAAQ;EAC5B,IAAI,eAAe,EAAE,QAAQ;EAC7B,IAAI,iBAAiB,EAAE,QAAQ;EAC/B,IAAI,eAAe,EAAE,QAAQ;EAC7B,IAAI,eAAe,EAAE,QAAQ;EAC7B,IAAI,YAAY,EAAE,QAAQ;EAC1B,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,QAAQ,EAAE,QAAQ;EACtB,IAAI,WAAW,EAAE,QAAQ;EACzB,IAAI,IAAI,EAAE,QAAQ;EAClB,IAAI,OAAO,EAAE,QAAQ;EACrB,IAAI,KAAK,EAAE,QAAQ;EACnB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,MAAM,EAAE,QAAQ;EACpB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,MAAM,EAAE,QAAQ;EACpB,IAAI,aAAa,EAAE,QAAQ;EAC3B,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,aAAa,EAAE,QAAQ;EAC3B,IAAI,aAAa,EAAE,QAAQ;EAC3B,IAAI,UAAU,EAAE,QAAQ;EACxB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,IAAI,EAAE,QAAQ;EAClB,IAAI,IAAI,EAAE,QAAQ;EAClB,IAAI,IAAI,EAAE,QAAQ;EAClB,IAAI,UAAU,EAAE,QAAQ;EACxB,IAAI,MAAM,EAAE,QAAQ;EACpB,IAAI,aAAa,EAAE,QAAQ;EAC3B,IAAI,GAAG,EAAE,KAAK;EACd,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,WAAW,EAAE,QAAQ;EACzB,IAAI,MAAM,EAAE,QAAQ;EACpB,IAAI,UAAU,EAAE,QAAQ;EACxB,IAAI,QAAQ,EAAE,QAAQ;EACtB,IAAI,QAAQ,EAAE,QAAQ;EACtB,IAAI,MAAM,EAAE,QAAQ;EACpB,IAAI,MAAM,EAAE,QAAQ;EACpB,IAAI,OAAO,EAAE,QAAQ;EACrB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,IAAI,EAAE,QAAQ;EAClB,IAAI,WAAW,EAAE,QAAQ;EACzB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,GAAG,EAAE,QAAQ;EACjB,IAAI,IAAI,EAAE,QAAQ;EAClB,IAAI,OAAO,EAAE,QAAQ;EACrB,IAAI,MAAM,EAAE,QAAQ;EACpB,IAAI,SAAS,EAAE,QAAQ;EACvB,IAAI,MAAM,EAAE,QAAQ;EACpB,IAAI,KAAK,EAAE,QAAQ;EACnB,IAAI,KAAK,EAAE,KAAK;EAChB,IAAI,UAAU,EAAE,QAAQ;EACxB,IAAI,MAAM,EAAE,KAAK;EACjB,IAAI,WAAW,EAAE,QAAQ;EACzB,CAAC,CAAC;AACF;EACA;EACA,IAAI,QAAQ,GAAG,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AAChD;AACA;EACA;EACA;AACA;EACA;EACA,SAAS,IAAI,CAAC,CAAC,EAAE;EACjB,IAAI,IAAI,OAAO,GAAG,GAAG,CAAC;EACtB,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;EACrB,QAAQ,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;EACjC,YAAY,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC9B,SAAS;EACT,KAAK;EACL,IAAI,OAAO,OAAO,CAAC;EACnB,CAAC;AACD;EACA;EACA,SAAS,UAAU,CAAC,CAAC,EAAE;EACvB,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AACtB;EACA,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;EACpC,QAAQ,CAAC,GAAG,CAAC,CAAC;EACd,KAAK;AACL;EACA,IAAI,OAAO,CAAC,CAAC;EACb,CAAC;AACD;EACA;EACA,SAAS,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE;EACzB,IAAI,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE;AAC1C;EACA,IAAI,IAAI,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;EACzC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD;EACA;EACA,IAAI,IAAI,cAAc,EAAE;EACxB,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;EACxC,KAAK;AACL;EACA;EACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,QAAQ,GAAG;EACxC,QAAQ,OAAO,CAAC,CAAC;EACjB,KAAK;AACL;EACA;EACA,IAAI,OAAO,CAAC,CAAC,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;EACvC,CAAC;AACD;EACA;EACA,SAAS,OAAO,CAAC,GAAG,EAAE;EACtB,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;EACvC,CAAC;AACD;EACA;EACA,SAAS,eAAe,CAAC,GAAG,EAAE;EAC9B,IAAI,OAAO,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;EAC7B,CAAC;AACD;EACA;EACA;EACA,SAAS,cAAc,CAAC,CAAC,EAAE;EAC3B,IAAI,OAAO,OAAO,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;EAC/E,CAAC;AACD;EACA;EACA,SAAS,YAAY,CAAC,CAAC,EAAE;EACzB,IAAI,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;EACzD,CAAC;AACD;EACA;EACA,SAAS,IAAI,CAAC,CAAC,EAAE;EACjB,IAAI,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EAC5C,CAAC;AACD;EACA;EACA,SAAS,mBAAmB,CAAC,CAAC,EAAE;EAChC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;EAChB,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC;EAC5B,KAAK;AACL;EACA,IAAI,OAAO,CAAC,CAAC;EACb,CAAC;AACD;EACA;EACA,SAAS,mBAAmB,CAAC,CAAC,EAAE;EAChC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;EACxD,CAAC;EACD;EACA,SAAS,mBAAmB,CAAC,CAAC,EAAE;EAChC,IAAI,QAAQ,eAAe,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE;EACtC,CAAC;AACD;EACA,IAAI,QAAQ,GAAG,CAAC,WAAW;AAC3B;EACA;EACA,IAAI,IAAI,WAAW,GAAG,eAAe,CAAC;AACtC;EACA;EACA,IAAI,IAAI,UAAU,GAAG,sBAAsB,CAAC;AAC5C;EACA;EACA,IAAI,IAAI,QAAQ,GAAG,KAAK,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,GAAG,CAAC;AACpE;EACA;EACA;EACA;EACA,IAAI,IAAI,iBAAiB,GAAG,aAAa,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,WAAW,CAAC;EACvH,IAAI,IAAI,iBAAiB,GAAG,aAAa,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,WAAW,CAAC;AACjJ;EACA,IAAI,OAAO;EACX,QAAQ,QAAQ,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC;EACtC,QAAQ,GAAG,EAAE,IAAI,MAAM,CAAC,KAAK,GAAG,iBAAiB,CAAC;EAClD,QAAQ,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,iBAAiB,CAAC;EACpD,QAAQ,GAAG,EAAE,IAAI,MAAM,CAAC,KAAK,GAAG,iBAAiB,CAAC;EAClD,QAAQ,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,iBAAiB,CAAC;EACpD,QAAQ,GAAG,EAAE,IAAI,MAAM,CAAC,KAAK,GAAG,iBAAiB,CAAC;EAClD,QAAQ,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,iBAAiB,CAAC;EACpD,QAAQ,IAAI,EAAE,sDAAsD;EACpE,QAAQ,IAAI,EAAE,sDAAsD;EACpE,QAAQ,IAAI,EAAE,sEAAsE;EACpF,QAAQ,IAAI,EAAE,sEAAsE;EACpF,KAAK,CAAC;EACN,CAAC,GAAG,CAAC;AACL;EACA;EACA;EACA;EACA,SAAS,cAAc,CAAC,KAAK,EAAE;EAC/B,IAAI,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EAC3C,CAAC;AACD;EACA;EACA;EACA;EACA,SAAS,mBAAmB,CAAC,KAAK,EAAE;AACpC;EACA,IAAI,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;EAC5E,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC;EACtB,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;EACtB,QAAQ,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;EAC7B,QAAQ,KAAK,GAAG,IAAI,CAAC;EACrB,KAAK;EACL,SAAS,IAAI,KAAK,IAAI,aAAa,EAAE;EACrC,QAAQ,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;EAC1D,KAAK;AACL;EACA;EACA;EACA;EACA;EACA,IAAI,IAAI,KAAK,CAAC;EACd,IAAI,KAAK,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;EAC5C,QAAQ,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;EACzD,KAAK;EACL,IAAI,KAAK,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;EAC7C,QAAQ,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;EACtE,KAAK;EACL,IAAI,KAAK,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;EAC5C,QAAQ,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;EACzD,KAAK;EACL,IAAI,KAAK,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;EAC7C,QAAQ,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;EACtE,KAAK;EACL,IAAI,KAAK,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;EAC5C,QAAQ,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;EACzD,KAAK;EACL,IAAI,KAAK,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;EAC7C,QAAQ,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;EACtE,KAAK;EACL,IAAI,KAAK,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;EAC7C,QAAQ,OAAO;EACf,YAAY,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EACxC,YAAY,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EACxC,YAAY,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EACxC,YAAY,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC5C,YAAY,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM;EAC3C,SAAS,CAAC;EACV,KAAK;EACL,IAAI,KAAK,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;EAC7C,QAAQ,OAAO;EACf,YAAY,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EACxC,YAAY,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EACxC,YAAY,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EACxC,YAAY,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK;EAC1C,SAAS,CAAC;EACV,KAAK;EACL,IAAI,KAAK,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;EAC7C,QAAQ,OAAO;EACf,YAAY,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACxD,YAAY,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACxD,YAAY,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACxD,YAAY,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC5D,YAAY,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM;EAC3C,SAAS,CAAC;EACV,KAAK;EACL,IAAI,KAAK,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;EAC7C,QAAQ,OAAO;EACf,YAAY,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACxD,YAAY,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACxD,YAAY,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACxD,YAAY,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK;EAC1C,SAAS,CAAC;EACV,KAAK;AACL;EACA,IAAI,OAAO,KAAK,CAAC;EACjB,CAAC;AACD;EACA,SAAS,kBAAkB,CAAC,KAAK,EAAE;EACnC;EACA;EACA,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC;EACpB,IAAI,KAAK,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;EACpD,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,EAAE,WAAW,EAAE,CAAC;EAChD,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;EACjD,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE;EAC3C,QAAQ,KAAK,GAAG,IAAI,CAAC;EACrB,KAAK;EACL,IAAI,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,EAAE;EAC9C,QAAQ,IAAI,GAAG,OAAO,CAAC;EACvB,KAAK;EACL,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;EACxC,CAAC;AACD;EACA;EACA,IAAqC,MAAM,CAAC,OAAO,EAAE;EACrD,IAAI,iBAAiB,SAAS,CAAC;EAC/B,CAAC;EACD;EACA,KAIK;EACL,IAAI,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;EACjC,CAAC;AACD;EACA,CAAC,EAAE,IAAI,CAAC;;;;;EC9pCR,SAAS,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE;EACzC,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjC;EACA,EAAE,IAAI,MAAM,CAAC,qBAAqB,EAAE;EACpC,IAAI,IAAI,OAAO,GAAG,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACvD;EACA,IAAI,IAAI,cAAc,EAAE;EACxB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE;EAC9C,QAAQ,OAAO,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC;EACvE,OAAO,CAAC,CAAC;EACT,KAAK;AACL;EACA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;EACnC,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,cAAc,CAAC,MAAM,EAAE;EAChC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC7C,IAAI,IAAI,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAC1D;EACA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;EACf,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EAC3D,QAAQI,iBAAe,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;EAClD,OAAO,CAAC,CAAC;EACT,KAAK,MAAM,IAAI,MAAM,CAAC,yBAAyB,EAAE;EACjD,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC;EAChF,KAAK,MAAM;EACX,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EACrD,QAAQ,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;EACzF,OAAO,CAAC,CAAC;EACT,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC;AACD;EACA,SAAS,OAAO,CAAC,GAAG,EAAE;EACtB,EAAE,yBAAyB,CAAC;AAC5B;EACA,EAAE,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE;EAC3E,IAAI,OAAO,GAAG,UAAU,GAAG,EAAE;EAC7B,MAAM,OAAO,OAAO,GAAG,CAAC;EACxB,KAAK,CAAC;EACN,GAAG,MAAM;EACT,IAAI,OAAO,GAAG,UAAU,GAAG,EAAE;EAC7B,MAAM,OAAO,GAAG,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,CAAC;EACnI,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;EACtB,CAAC;AACD;EACA,SAAS,eAAe,CAAC,QAAQ,EAAE,WAAW,EAAE;EAChD,EAAE,IAAI,EAAE,QAAQ,YAAY,WAAW,CAAC,EAAE;EAC1C,IAAI,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;EAC7D,GAAG;EACH,CAAC;AACD;EACA,SAASA,iBAAe,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;EAC1C,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE;EAClB,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE;EACpC,MAAM,KAAK,EAAE,KAAK;EAClB,MAAM,UAAU,EAAE,IAAI;EACtB,MAAM,YAAY,EAAE,IAAI;EACxB,MAAM,QAAQ,EAAE,IAAI;EACpB,KAAK,CAAC,CAAC;EACP,GAAG,MAAM;EACT,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;EACrB,GAAG;AACH;EACA,EAAE,OAAO,GAAG,CAAC;EACb,CAAC;AACD;EACA,SAAS,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE;EACzC,EAAE,IAAI,OAAO,UAAU,KAAK,UAAU,IAAI,UAAU,KAAK,IAAI,EAAE;EAC/D,IAAI,MAAM,IAAI,SAAS,CAAC,oDAAoD,CAAC,CAAC;EAC9E,GAAG;AACH;EACA,EAAE,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,UAAU,CAAC,SAAS,EAAE;EACzE,IAAI,WAAW,EAAE;EACjB,MAAM,KAAK,EAAE,QAAQ;EACrB,MAAM,QAAQ,EAAE,IAAI;EACpB,MAAM,YAAY,EAAE,IAAI;EACxB,KAAK;EACL,GAAG,CAAC,CAAC;EACL,EAAE,IAAI,UAAU,EAAEI,iBAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;EACxD,CAAC;AACD;EACA,SAASC,iBAAe,CAAC,CAAC,EAAE;EAC5B,EAAEA,iBAAe,GAAG,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,GAAG,SAAS,eAAe,CAAC,CAAC,EAAE;EAChG,IAAI,OAAO,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;EACnD,GAAG,CAAC;EACJ,EAAE,OAAOA,iBAAe,CAAC,CAAC,CAAC,CAAC;EAC5B,CAAC;AACD;EACA,SAASD,iBAAe,CAAC,CAAC,EAAE,CAAC,EAAE;EAC/B,EAAEA,iBAAe,GAAG,MAAM,CAAC,cAAc,IAAI,SAAS,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE;EAC5E,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;EACpB,IAAI,OAAO,CAAC,CAAC;EACb,GAAG,CAAC;AACJ;EACA,EAAE,OAAOA,iBAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAC/B,CAAC;AACD;EACA,SAASE,2BAAyB,GAAG;EACrC,EAAE,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,KAAK,CAAC;EACzE,EAAE,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC;EAC3C,EAAE,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,OAAO,IAAI,CAAC;AAC/C;EACA,EAAE,IAAI;EACN,IAAI,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;EACnF,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG,CAAC,OAAO,CAAC,EAAE;EACd,IAAI,OAAO,KAAK,CAAC;EACjB,GAAG;EACH,CAAC;AACD;EACA,SAASC,YAAU,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;EACzC,EAAE,IAAID,2BAAyB,EAAE,EAAE;EACnC,IAAIC,YAAU,GAAG,OAAO,CAAC,SAAS,CAAC;EACnC,GAAG,MAAM;EACT,IAAIA,YAAU,GAAG,SAAS,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;EAC1D,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;EACrB,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;EAC5B,MAAM,IAAI,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;EACvD,MAAM,IAAI,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;EACvC,MAAM,IAAI,KAAK,EAAEH,iBAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;EAC5D,MAAM,OAAO,QAAQ,CAAC;EACtB,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,OAAOG,YAAU,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;EAC3C,CAAC;AACD;EACA,SAAS,6BAA6B,CAAC,MAAM,EAAE,QAAQ,EAAE;EACzD,EAAE,IAAI,MAAM,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;EAChC,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC;EAClB,EAAE,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EACvC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AACb;EACA,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC1C,IAAI,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;EACxB,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS;EAC7C,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;EAC9B,GAAG;AACH;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC;AACD;EACA,SAAS,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE;EACpD,EAAE,IAAI,MAAM,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;AAChC;EACA,EAAE,IAAI,MAAM,GAAG,6BAA6B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC/D;EACA,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AACb;EACA,EAAE,IAAI,MAAM,CAAC,qBAAqB,EAAE;EACpC,IAAI,IAAI,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAChE;EACA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAClD,MAAM,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;EAChC,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS;EAC/C,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS;EAC7E,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;EAChC,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC;AACD;EACA,SAASC,wBAAsB,CAAC,IAAI,EAAE;EACtC,EAAE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE;EACvB,IAAI,MAAM,IAAI,cAAc,CAAC,2DAA2D,CAAC,CAAC;EAC1F,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,0BAA0B,CAAC,IAAI,EAAE,IAAI,EAAE;EAChD,EAAE,IAAI,IAAI,KAAK,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,UAAU,CAAC,EAAE;EACxE,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG;AACH;EACA,EAAE,OAAOA,wBAAsB,CAAC,IAAI,CAAC,CAAC;EACtC,CAAC;AACD;EACA,SAAS,YAAY,CAAC,OAAO,EAAE;EAC/B,EAAE,IAAI,yBAAyB,GAAGF,2BAAyB,EAAE,CAAC;AAC9D;EACA,EAAE,OAAO,SAAS,oBAAoB,GAAG;EACzC,IAAI,IAAI,KAAK,GAAGD,iBAAe,CAAC,OAAO,CAAC;EACxC,QAAQ,MAAM,CAAC;AACf;EACA,IAAI,IAAI,yBAAyB,EAAE;EACnC,MAAM,IAAI,SAAS,GAAGA,iBAAe,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;AACxD;EACA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;EAC9D,KAAK,MAAM;EACX,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;EAC5C,KAAK;AACL;EACA,IAAI,OAAO,0BAA0B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;EACpD,GAAG,CAAC;EACJ,CAAC;AACD;EACA,SAAShB,gBAAc,CAAC,GAAG,EAAE,CAAC,EAAE;EAChC,EAAE,OAAOC,iBAAe,CAAC,GAAG,CAAC,IAAIC,uBAAqB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAIkB,6BAA2B,CAAC,GAAG,EAAE,CAAC,CAAC,IAAIjB,kBAAgB,EAAE,CAAC;EAC5H,CAAC;AACD;EACA,SAASI,oBAAkB,CAAC,GAAG,EAAE;EACjC,EAAE,OAAOC,oBAAkB,CAAC,GAAG,CAAC,IAAIC,kBAAgB,CAAC,GAAG,CAAC,IAAIW,6BAA2B,CAAC,GAAG,CAAC,IAAIV,oBAAkB,EAAE,CAAC;EACtH,CAAC;AACD;EACA,SAASF,oBAAkB,CAAC,GAAG,EAAE;EACjC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAOa,mBAAiB,CAAC,GAAG,CAAC,CAAC;EACxD,CAAC;AACD;EACA,SAASpB,iBAAe,CAAC,GAAG,EAAE;EAC9B,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC;EACrC,CAAC;AACD;EACA,SAASQ,kBAAgB,CAAC,IAAI,EAAE;EAChC,EAAE,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC5H,CAAC;AACD;EACA,SAASP,uBAAqB,CAAC,GAAG,EAAE,CAAC,EAAE;EACvC,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,OAAO,MAAM,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;AAC3G;EACA,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,OAAO;EACzB,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;EAChB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;EAChB,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;AACjB;EACA,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACb;EACA,EAAE,IAAI;EACN,IAAI,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE;EACtE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1B;EACA,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM;EACxC,KAAK;EACL,GAAG,CAAC,OAAO,GAAG,EAAE;EAChB,IAAI,EAAE,GAAG,IAAI,CAAC;EACd,IAAI,EAAE,GAAG,GAAG,CAAC;EACb,GAAG,SAAS;EACZ,IAAI,IAAI;EACR,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;EACtD,KAAK,SAAS;EACd,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC;EACvB,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAASkB,6BAA2B,CAAC,CAAC,EAAE,MAAM,EAAE;EAChD,EAAE,IAAI,CAAC,CAAC,EAAE,OAAO;EACjB,EAAE,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,OAAOC,mBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;EACjE,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;EACzD,EAAE,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;EAC9D,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,KAAK,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EACvD,EAAE,IAAI,CAAC,KAAK,WAAW,IAAI,0CAA0C,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAOA,mBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;EACnH,CAAC;AACD;EACA,SAASA,mBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE;EACrC,EAAE,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;AACxD;EACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACxE;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAASX,oBAAkB,GAAG;EAC9B,EAAE,MAAM,IAAI,SAAS,CAAC,sIAAsI,CAAC,CAAC;EAC9J,CAAC;AACD;EACA,SAASP,kBAAgB,GAAG;EAC5B,EAAE,MAAM,IAAI,SAAS,CAAC,2IAA2I,CAAC,CAAC;EACnK,CAAC;AACD;EACA,IAAI,eAAe,GAAG,SAAS,eAAe,CAAC,QAAQ,EAAE;EACzD,EAAE,IAAI,QAAQ,YAAY,KAAK,EAAE;EACjC,IAAI,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;EACtC,GAAG,MAAM;EACT,IAAI,IAAI,QAAQ,CAAC,GAAG,EAAE;EACtB,MAAM,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;EAC7B,KAAK;AACL;EACA,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;EACvB,GAAG;EACH,CAAC,CAAC;AACF;EACA,IAAI,UAAU,GAAG,SAAS,UAAU,CAAC,GAAG,EAAE;EAC1C,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE;EACpB,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;EAC3B,GAAG;AACH;EACA,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE;EACpB,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;EAClC,GAAG;AACH;EACA,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE;EACnB,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;EAC1B,GAAG;AACH;EACA,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE;EACpB,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;EACrC,GAAG;EACH,CAAC,CAAC;AACF;EACA,IAAI,WAAW,GAAG,SAAS,WAAW,CAAC,GAAG,EAAE;EAC5C,EAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE;EAC9B,IAAI,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;EACnC,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;EACzB,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;EACzB,GAAG;EACH,CAAC,CAAC;AACF;EACA,IAAI,SAAS,GAAG,CAAC,WAAW,CAAC,CAAC;AAC9B;EACA,SAAS,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;EAClC,EAAE,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACpF;EACA,EAAE,IAAI,cAAc,GAAG,IAAI,CAAC,SAAS;EACrC,MAAM,SAAS,GAAG,cAAc,KAAK,KAAK,CAAC,GAAG,YAAY;EAC1D,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG,GAAG,cAAc;EACpB,MAAM,OAAO,GAAG,wBAAwB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC1D;EACA,EAAE,OAAOmB,UAAS,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,UAAU,GAAG,EAAE;EAC1E,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EAC1B,GAAG,EAAE,UAAU,GAAG,EAAE;EACpB,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;EACtB,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;EACrB,GAAG,EAAE,cAAc,CAAC;EACpB,IAAI,WAAW,EAAE,YAAY;EAC7B,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;EACf,CAAC;AACD;EACA,IAAI,YAAY,GAAG,SAAS,YAAY,CAAC,GAAG,EAAE;EAC9C,EAAE,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;EACjE,CAAC,CAAC;AACF;EACA,IAAI,UAAU,GAAG,SAAS,UAAU,CAAC,GAAG,EAAE;EAC1C,EAAE,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;EACpD,CAAC,CAAC;AACF;EACA,IAAI,cAAc,GAAGC,OAAY,CAAC,YAAY,CAAC,CAAC;EAChD;EACA;AACA;EACA,SAAS,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE;EAChE,EAAE,IAAI,CAAC,eAAe,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,OAAO;EACjE,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE;EAChC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;EAC5B,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EAC5B,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;EAC3D,GAAG,CAAC,CAAC;EACL,CAAC;AACD;EACA,SAAS,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE;EACzC,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK;EACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACzB;EACA,EAAE,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE;EACpF,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU;EACzC,MAAM,UAAU,GAAG,gBAAgB,KAAK,KAAK,CAAC,GAAG,YAAY;EAC7D,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG,GAAG,gBAAgB;EACtB,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW;EAC3C,MAAM,WAAW,GAAG,iBAAiB,KAAK,KAAK,CAAC,GAAG,UAAU,OAAO,EAAE;EACtE,IAAI,MAAM,mDAAmD,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;EAChG,GAAG,GAAG,iBAAiB,CAAC;AACxB;EACA;EACA,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC;EACjB,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EAChC,IAAI,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG;EACrC,MAAM,IAAI,EAAE,IAAI;EAChB,MAAM,GAAG,EAAE,EAAE;EACb,MAAM,KAAK,EAAE,CAAC,CAAC;EACf,MAAM,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;EAC7B,KAAK,CAAC;EACN,GAAG,CAAC,CAAC;EACL,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,KAAK,EAAE;EACjC,IAAI,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM;EAC7B,QAAQ,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;EAC9B,IAAI,IAAI,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;EACrC,IAAI,IAAI,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;EACrC,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,+BAA+B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;EAChG,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,+BAA+B,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;EAChG,IAAI,IAAI,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;EACrC,IAAI,IAAI,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;EACrC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACpC;EACA,IAAI,SAAS,SAAS,CAAC,IAAI,EAAE;EAC7B,MAAM,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;EAClE,KAAK;EACL,GAAG,CAAC,CAAC;EACL,EAAE,IAAI,UAAU,GAAG,EAAE,CAAC;EACtB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;EACjC,EAAE,IAAI,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAChB,oBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,KAAK,EAAE;EAC5H,IAAI,IAAI,KAAK,GAAGP,gBAAc,CAAC,KAAK,EAAE,CAAC,CAAC;EACxC,QAAQ,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACxB;EACA,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;EACtB,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,EAAE;EAC1B,IAAI,IAAI,KAAK,GAAGA,gBAAc,CAAC,KAAK,EAAE,CAAC,CAAC;EACxC,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;EACrB,QAAQ,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACxB;EACA,IAAI,OAAOW,iBAAe,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;EAC/C,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;EACR,EAAE,OAAO,UAAU,CAAC;AACpB;EACA,EAAE,SAAS,QAAQ,CAAC,KAAK,EAAE;EAC3B,IAAI,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;EAC3F,IAAI,IAAI,YAAY,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7F;EACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;EAClD,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1B;EACA,MAAM,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;EAC1C,QAAQ,IAAI,IAAI,GAAG,YAAY;EAC/B,UAAU,IAAI,IAAI,GAAG,EAAE,CAAC,MAAM,CAACJ,oBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;EACtH,YAAY,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EACtC,WAAW,CAAC,CAAC;AACb;EACA,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,SAAS,EAAE;EACpD,YAAY,OAAO,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE;EAC1F,cAAc,OAAO,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC;EACtC,aAAa,CAAC,CAAC;EACf,WAAW,CAAC,EAAE;EACd,YAAY,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAClC,YAAY,WAAW,CAAC,IAAI,CAAC,CAAC;EAC9B,WAAW;AACX;EACA,UAAU,OAAO,UAAU,CAAC;EAC5B,SAAS,EAAE,CAAC;AACZ;EACA,QAAQ,IAAI,IAAI,KAAK,UAAU,EAAE,SAAS;EAC1C,OAAO;AACP;EACA,MAAM,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;EACrC;EACA,QAAQ,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;EAClC,QAAQ,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAACA,oBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACjH,OAAO;EACP,KAAK;EACL,GAAG;EACH,CAAC;AACD;EACA,IAAIiB,SAAO,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;EACzC,EAAE;EACF,EAAE,KAAK,EAAE9E,OAAK;EACd,EAAE,IAAI,EAAE,IAAI;EACZ,EAAE,mBAAmB,EAAE,mBAAmB;EAC1C,EAAE,KAAK,EAAE,KAAK;EACd,EAAE,cAAc,EAAE,cAAc;EAChC,EAAE,eAAe,EAAE,eAAe;EAClC,EAAE,OAAO,EAAE,OAAO;EAClB,EAAE,OAAO,EAAE,OAAO;EAClB,EAAE,oBAAoB,EAAE,oBAAoB;EAC5C,EAAE,sBAAsB,EAAE,sBAAsB;EAChD,EAAE,kBAAkB,EAAE,kBAAkB;EACxC,EAAE,kBAAkB,EAAE,kBAAkB;EACxC,EAAE,IAAI,EAAE,IAAI;EACZ,EAAE,iBAAiB,EAAE,iBAAiB;EACtC,EAAE,qBAAqB,EAAE,qBAAqB;EAC9C,EAAE,iBAAiB,EAAE,iBAAiB;EACtC,EAAE,IAAI,EAAE,IAAI;EACZ,CAAC,CAAC;EACF,IAAI,MAAM,GAAG;EACb,EAAE,KAAK,EAAE+E,YAAK;EACd,EAAE,WAAW,EAAE,WAAW;EAC1B,CAAC,CAAC;AACF;EACA,IAAI,oBAAoB,GAAG,CAAC,CAAC;AAC7B;EACA,IAAI,cAAc,GAAG,IAAID,SAAO,CAAC,cAAc,EAAE,CAAC,YAAY,GAAG,cAAc,GAAG,cAAc,CAAC;EACjG,IAAI,cAAc,GAAG,IAAIA,SAAO,CAAC,cAAc,EAAE,CAAC,YAAY,GAAG,cAAc,GAAG,aAAa,CAAC;EAChG,IAAI,UAAU,GAAGE,OAAO,CAAC;EACzB,EAAE,KAAK,EAAE;EACT,IAAI,OAAO,EAAE;EACb,MAAM,QAAQ,EAAE,SAAS,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE;EAClD,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC;AACzB;EACA,QAAQ,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;EAC5C;EACA,UAAU,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;EACpC,UAAU,KAAK,CAAC,SAAS,EAAE,CAAC;EAC5B,UAAU,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;EAC3C,YAAY,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;EAC5B,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE;EAClC,YAAY,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;EACvC,YAAY,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACxC;EACA,YAAY,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;EAClC,WAAW,CAAC,CAAC;EACb,SAAS;EACT,OAAO;EACP,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,SAAS,EAAE;EACf,MAAM,SAAS,EAAE;EACjB,QAAQ,KAAK,EAAE,EAAE;EACjB,QAAQ,KAAK,EAAE,EAAE;EACjB,OAAO;EACP,MAAM,QAAQ,EAAE,SAAS,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE;EACpD,QAAQ,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;EACpC,OAAO;EACP,KAAK;EACL,IAAI,aAAa,EAAE;EACnB,MAAM,SAAS,EAAE,CAAC;EAClB,MAAM,QAAQ,EAAE,SAAS,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE;EACjD,QAAQ,IAAI,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC9D;EACA,QAAQ,IAAI,WAAW,EAAE;EACzB,UAAU,WAAW,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;EACvD,SAAS;AACT;EACA,QAAQ,IAAI,MAAM,GAAG,CAAC,EAAE;EACxB,UAAU,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EACrD,SAAS;AACT;EACA,QAAQ,IAAI,MAAM,GAAG,CAAC,EAAE;EACxB,UAAU,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EACrD,SAAS;AACT;EACA,QAAQ,SAAS,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE;EAC5C,UAAU,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;EACrC,YAAY,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1B;EACA,YAAY,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;EACtC,WAAW,CAAC,CAAC;EACb,SAAS;EACT,OAAO;EACP,KAAK;EACL,IAAI,OAAO,EAAE;EACb,MAAM,QAAQ,EAAE,SAAS,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE;EAClD;EACA,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE;EACrG,UAAU,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC;EAChD,SAAS,CAAC,CAAC;EACX,OAAO;EACP,KAAK;EACL,IAAI,gBAAgB,EAAE,EAAE;EACxB,IAAI,aAAa,EAAE;EACnB,MAAM,SAAS,EAAE,SAAS,QAAQ,CAAC,IAAI,EAAE;EACzC,QAAQ,OAAO,IAAI,CAAC;EACpB,OAAO;EACP,KAAK;EACL,IAAI,UAAU,EAAE;EAChB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,WAAW,EAAE;EACjB,MAAM,SAAS,EAAE,CAAC;EAClB,KAAK;EACL;EACA,IAAI,MAAM,EAAE;EACZ,MAAM,SAAS,EAAE,IAAI;EACrB,KAAK;EACL,IAAI,OAAO,EAAE;EACb,MAAM,SAAS,EAAE,KAAK;EACtB,KAAK;EACL,IAAI,cAAc,EAAE;EACpB,MAAM,SAAS,EAAE,CAAC;EAClB,KAAK;EACL;EACA,IAAI,SAAS,EAAE;EACf,MAAM,SAAS,EAAE,OAAO;EACxB,KAAK;EACL,IAAI,eAAe,EAAE,EAAE;EACvB,IAAI,WAAW,EAAE;EACjB,MAAM,SAAS,EAAE,IAAI;EACrB,KAAK;EACL,IAAI,cAAc,EAAE;EACpB,MAAM,SAAS,EAAE,IAAI;EACrB,KAAK;EACL,IAAI,eAAe,EAAE,EAAE;EACvB,IAAI,qBAAqB,EAAE;EAC3B,MAAM,SAAS,EAAE,KAAK;EACtB,KAAK;EACL,IAAI,UAAU,EAAE;EAChB,MAAM,SAAS,EAAE,QAAQ;EACzB,KAAK;EACL,IAAI,UAAU,EAAE;EAChB,MAAM,SAAS,EAAE,QAAQ;EACzB,KAAK;EACL,IAAI,cAAc,EAAE;EACpB,MAAM,SAAS,EAAE,IAAI;EACrB,KAAK;EACL,IAAI,SAAS,EAAE;EACf,MAAM,SAAS,EAAE,OAAO;EACxB,KAAK;EACL,IAAI,eAAe,EAAE,EAAE;EACvB,IAAI,WAAW,EAAE;EACjB,MAAM,SAAS,EAAE,GAAG;EACpB,KAAK;EACL,IAAI,SAAS,EAAE,EAAE;EACjB;EACA,IAAI,cAAc,EAAE;EACpB,MAAM,SAAS,EAAE,CAAC;EAClB,KAAK;EACL;EACA,IAAI,aAAa,EAAE;EACnB,MAAM,SAAS,EAAE,CAAC;EAClB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL;EACA,IAAI,iBAAiB,EAAE;EACvB,MAAM,SAAS,EAAE,CAAC;EAClB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL;EACA,IAAI,YAAY,EAAE,EAAE;EACpB,IAAI,eAAe,EAAE,EAAE;EACvB,IAAI,qBAAqB,EAAE;EAC3B,MAAM,SAAS,EAAE,KAAK;EACtB,KAAK;EACL,IAAI,kBAAkB,EAAE;EACxB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL;EACA,IAAI,0BAA0B,EAAE;EAChC,MAAM,SAAS,EAAE,CAAC;EAClB,KAAK;EACL,IAAI,yBAAyB,EAAE,EAAE;EACjC,IAAI,0BAA0B,EAAE;EAChC,MAAM,SAAS,EAAE,GAAG;EACpB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL;EACA,IAAI,8BAA8B,EAAE;EACpC,MAAM,SAAS,EAAE,CAAC;EAClB,KAAK;EACL;EACA,IAAI,wBAAwB,EAAE;EAC9B,MAAM,SAAS,EAAE,CAAC;EAClB,KAAK;EACL;EACA,IAAI,4BAA4B,EAAE;EAClC,MAAM,SAAS,EAAE,IAAI;EACrB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL;EACA,IAAI,4BAA4B,EAAE;EAClC,MAAM,SAAS,EAAE,GAAG;EACpB,KAAK;EACL,IAAI,4BAA4B,EAAE,EAAE;EACpC,IAAI,iCAAiC,EAAE;EACvC,MAAM,SAAS,EAAE,CAAC;EAClB,KAAK;EACL;EACA,IAAI,WAAW,EAAE;EACjB,MAAM,SAAS,EAAE,IAAI;EACrB,KAAK;EACL;EACA,IAAI,UAAU,EAAE;EAChB,MAAM,SAAS,EAAE,CAAC;EAClB,KAAK;EACL,IAAI,YAAY,EAAE;EAClB,MAAM,SAAS,EAAE,MAAM;EACvB,MAAM,aAAa,EAAE,KAAK;EAC1B,MAAM,QAAQ,EAAE,SAAS,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE;EACrD,QAAQ,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;EACnD,OAAO;EACP,KAAK;EACL,IAAI,aAAa,EAAE;EACnB,MAAM,SAAS,EAAE,CAAC;EAClB,MAAM,aAAa,EAAE,KAAK;EAC1B,MAAM,QAAQ,EAAE,SAAS,QAAQ,CAAC,WAAW,EAAE,KAAK,EAAE;EACtD,QAAQ,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;EACrD,OAAO;EACP,KAAK;EACL,IAAI,eAAe,EAAE;EACrB,MAAM,SAAS,EAAE,GAAG;EACpB,MAAM,aAAa,EAAE,KAAK;EAC1B,MAAM,QAAQ,EAAE,SAAS,QAAQ,CAAC,aAAa,EAAE,KAAK,EAAE;EACxD,QAAQ,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;EACzD,OAAO;EACP,KAAK;EACL,IAAI,aAAa,EAAE;EACnB,MAAM,SAAS,EAAE;EACjB;EACA,QAAQ,QAAQ,EAAE,EAAE;EACpB,QAAQ,OAAO,EAAE,CAAC,GAAG;EACrB,QAAQ,KAAK,EAAE,GAAG;EAClB,QAAQ,YAAY,EAAE,EAAE;EACxB,QAAQ,iBAAiB,EAAE,MAAM;EACjC,QAAQ,eAAe,EAAE,IAAI;EAC7B,OAAO;EACP,KAAK;EACL,IAAI,WAAW,EAAE;EACjB,MAAM,SAAS,EAAE,CAAC;EAClB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL;EACA,IAAI,aAAa,EAAE;EACnB,MAAM,SAAS,EAAE,QAAQ;EACzB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,YAAY,EAAE;EAClB,MAAM,SAAS,EAAE,KAAK;EACtB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL;EACA,IAAI,SAAS,EAAE;EACf,MAAM,SAAS,EAAE,SAAS,QAAQ,GAAG,EAAE;EACvC,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,eAAe,EAAE;EACrB,MAAM,SAAS,EAAE,SAAS,QAAQ,GAAG,EAAE;EACvC,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,QAAQ,EAAE;EACd,MAAM,SAAS,EAAE,SAAS,QAAQ,GAAG,EAAE;EACvC,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,cAAc,EAAE;EACpB,MAAM,SAAS,EAAE,SAAS,QAAQ,GAAG,EAAE;EACvC,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,YAAY,EAAE;EAClB,MAAM,SAAS,EAAE,SAAS,QAAQ,GAAG,EAAE;EACvC,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,YAAY,EAAE;EAClB,MAAM,SAAS,EAAE,SAAS,QAAQ,GAAG,EAAE;EACvC,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,GAAG;EACH,EAAE,OAAO,EAAE;EACX,IAAI,OAAO,EAAE,SAAS,OAAO,CAAC,KAAK,EAAE;EACrC,MAAM,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;AACjC;EACA,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;AACxB;EACA,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;EACL;EACA,IAAI,OAAO,EAAE,SAAS,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE;EACzD,MAAM,IAAI,OAAO,KAAK,SAAS,EAAE;EACjC,QAAQ,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EACpD,OAAO;AACP;EACA,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACpD;EACA,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;EACL,IAAI,kBAAkB,EAAE,SAAS,kBAAkB,CAAC,KAAK,EAAE;EAC3D,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EACnC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;EAC5B,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;EACL;EACA,IAAI,cAAc,EAAE,SAAS,cAAc,CAAC,KAAK,EAAE;EACnD,MAAM,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;EACzB,MAAM,KAAK,CAAC,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC;EACvC,MAAM,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;EACjC,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;EACL,IAAI,SAAS,EAAE,SAAS,SAAS,CAAC,KAAK,EAAE;EACzC,MAAM,IAAI,OAAO,GAAG,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC;AACnD;EACA,MAAM,IAAI,KAAK,CAAC,aAAa,EAAE;EAC/B,QAAQ,UAAU,EAAE,CAAC;EACrB,OAAO;AACP;EACA,MAAM,YAAY,EAAE,CAAC;EACrB,MAAM,aAAa,EAAE,CAAC;EACtB,MAAM,OAAO,IAAI,CAAC;AAClB;EACA,MAAM,SAAS,UAAU,GAAG;EAC5B,QAAQ,IAAI,EAAE,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,YAAY,IAAI,OAAO,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,UAAU,EAAE;EAClM,UAAU,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;AACtC;EACA,UAAU,KAAK,CAAC,YAAY,EAAE,CAAC;EAC/B,SAAS,MAAM;EACf,UAAU,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;AACpD;EACA,UAAU,KAAK,CAAC,YAAY,EAAE,CAAC;EAC/B,SAAS;AACT;AACA;EACA,QAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EACtD,UAAU,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;EACpC,UAAU,IAAI,CAAC,GAAG,EAAE,OAAO;EAC3B,UAAU,IAAI,GAAG,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;EACtF,UAAU,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACjC,UAAU,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;EACtC,UAAU,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;EACtC,SAAS,CAAC,CAAC;AACX;EACA,QAAQ,IAAI,iBAAiB,GAAGC,OAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EAC5D,QAAQ,IAAI,qBAAqB,GAAGA,OAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;EACpE,QAAQ,IAAI,yBAAyB,GAAGA,OAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;EAC5E,QAAQ,IAAI,6BAA6B,GAAGA,OAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;EACpF,QAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EACtD,UAAU,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;EACvC,UAAU,IAAI,CAAC,OAAO,EAAE,OAAO;EAC/B,UAAU,IAAI,GAAG,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;EAC3H,UAAU,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC;EACvD,UAAU,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC;EACnD,UAAU,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,OAAO;AAC/F;EACA,UAAU,aAAa,CAAC,IAAI,CAAC,CAAC;AAC9B;EACA,UAAU,IAAI,WAAW,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;AAChE;EACA,UAAU,IAAI,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,kBAAkB,CAAC,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO;EAC9G,UAAU;EACV,YAAY,KAAK,EAAE;EACnB,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC;EACxB,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC;EACxB,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC;EACxB,aAAa;EACb,YAAY,GAAG,EAAE;EACjB,cAAc,CAAC,EAAE,GAAG,CAAC,CAAC;EACtB,cAAc,CAAC,EAAE,GAAG,CAAC,CAAC;EACtB,cAAc,CAAC,EAAE,GAAG,CAAC,CAAC;EACtB,aAAa;EACb,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;EACpC;EACA,YAAY,OAAO;EACnB,WAAW;AACX;EACA,UAAU,IAAI,eAAe,GAAG,EAAE,CAAC;AACnC;EACA,UAAU,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;AACnC;EACA,UAAU,IAAI,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;AAC7E;EACA,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;EACpC;EACA,YAAY,IAAI,CAAC,KAAK,EAAE;EACxB;EACA,cAAc,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;AACnE;EACA,cAAc,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;EAC5E,gBAAgB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,UAAU,EAAE,OAAO,GAAG,IAAIH,SAAO,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;EAC7H,eAAe;AACf;EACA,cAAc,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACzC,cAAc,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;EAC9C,cAAc,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;EAC9C,cAAc,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACvC,cAAc,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;EAC5C,cAAc,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;EAC5C,cAAc,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;EACzC,aAAa,MAAM;EACnB;EACA,cAAc,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;EAC5E,aAAa;AACb;EACA,YAAY,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;EAClD,WAAW,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;EAC3C;EACA,YAAY,IAAI,CAAC,KAAK,EAAE;EACxB;EACA,cAAc,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,EAAE;EAC5E,gBAAgB,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;EAC7E,gBAAgB,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;EACtC,gBAAgB,IAAI,QAAQ,GAAG,IAAIA,SAAO,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;EAC3G,gBAAgB,QAAQ,CAAC,cAAc,CAAC,CAAC,IAAIA,SAAO,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;EAC7F,gBAAgB,QAAQ,CAAC,cAAc,CAAC,CAAC,IAAIA,SAAO,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;EAC3F,gBAAgB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;EACxC,gBAAgB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;EACzC,eAAe;AACf;EACA,cAAc,IAAI,MAAM,GAAG,IAAIA,SAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACpF,cAAc,IAAI,IAAI,GAAG,IAAIA,SAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EAC5E,cAAc,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;EACrD,cAAc,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;EACzC,cAAc,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;EACzC,cAAc,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;EACzC,cAAc,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC;EACtC,cAAc,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC7C;EACA,cAAc,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EAChC,aAAa,MAAM;EACnB;EACA,cAAc,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE;EACxE;EACA,gBAAgB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EAC3C,gBAAgB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EAC3C,gBAAgB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EACxC,eAAe;AACf;EACA,cAAc,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AAC5E;EACA,cAAc,IAAI,EAAE,GAAG,UAAU,GAAG,CAAC,CAAC;AACtC;EACA,cAAc,IAAI,SAAS,GAAG,IAAIA,SAAO,CAAC,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;AACtH;EACA,cAAc,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;EACtC,cAAc,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;EACxC,aAAa;EACb,WAAW;EACX,SAAS,CAAC,CAAC;AACX;EACA,QAAQ,SAAS,aAAa,CAAC,IAAI,EAAE;EACrC,UAAU,IAAI,GAAG,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;EAC3H,UAAU,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC;EACvD,UAAU,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC;EACnD,UAAU,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,OAAO;AAC/F;EACA,UAAU,IAAI,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACtD;EACA,UAAU,IAAI,CAAC,SAAS,EAAE;EAC1B,YAAY,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;EAChC,WAAW,MAAM;EACjB;EACA,YAAY,IAAI,MAAM,GAAG,IAAIA,SAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EAClF,YAAY,IAAI,IAAI,GAAG,IAAIA,SAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EAC1E,YAAY,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5C;EACA,YAAY,IAAI,KAAK,CAAC;EACtB,YAAY,IAAI,aAAa,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;AAChE;EACA,YAAY,IAAI,CAAC,GAAG,CAAC,EAAE;EACvB,cAAc,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACvC,cAAc,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;EAC5C,cAAc,IAAI,KAAK,GAAG,IAAIA,SAAO,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;EACzE,cAAc,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,IAAIA,SAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAIA,SAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EACxJ,eAAe,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC;EAC/D,eAAe,GAAG,CAAC,IAAIA,SAAO,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;EACnF,cAAc,KAAK,GAAG,IAAIA,SAAO,CAAC,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;EAC1E,aAAa,MAAM;EACnB;EACA,cAAc,IAAI,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC;EACrC,cAAc,IAAI,QAAQ,GAAG,CAAC,aAAa,CAAC;AAC5C;EACA,cAAc,IAAI,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;EACtD,cAAc,KAAK,GAAG,IAAIA,SAAO,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAIA,SAAO,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAIA,SAAO,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;EAC9O,aAAa;AACb;EACA,YAAY,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;EACjC,WAAW;EACX,SAAS;EACT,OAAO;AACP;EACA,MAAM,SAAS,YAAY,GAAG;EAC9B;EACA,QAAQ,IAAI,mBAAmB,GAAGG,OAAU,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;EAC/E,QAAQ,IAAI,mBAAmB,GAAGA,OAAU,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;EAC/E,QAAQ,IAAI,eAAe,GAAGA,OAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;EACxD,QAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EACtD,UAAU,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;EACzC,UAAU,IAAI,CAAC,QAAQ,EAAE,OAAO;EAChC,UAAU,IAAI,GAAG,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;EAC3H,UAAU,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC;EACvD,UAAU,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC;EACnD,UAAU,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,OAAO;AAC/F;EACA,UAAU,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;EAC/F,UAAU,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;EAC3F,UAAU,IAAI,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;EACtD,UAAU,IAAI,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;EACtD,UAAU,IAAI,eAAe,GAAG,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,EAAE;EAC5D,YAAY,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC5C,WAAW;EACX,YAAY,UAAU,CAAC,EAAE;EACzB;EACA,YAAY,IAAI,IAAI,GAAG,SAAS,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE;EACzD,cAAc,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACnE,aAAa,CAAC;AACd;EACA,YAAY,OAAO;EACnB,cAAc,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;EACzC,cAAc,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;EACzC,cAAc,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;EACzC,aAAa,CAAC;EACd,WAAW,CAAC;EACZ,UAAU,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE;EAC/G,YAAY,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACpE,WAAW,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE;EACtC,YAAY,OAAO,GAAG,GAAG,CAAC,CAAC;EAC3B,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;EACjB,UAAU,IAAI,YAAY,GAAG,MAAM,GAAG,WAAW,GAAG,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,WAAW,IAAI,WAAW,CAAC;EAC1G,UAAU,IAAI,SAAS,GAAG,eAAe,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC;EAClE,UAAU,IAAI,SAAS,GAAG,eAAe,CAAC,CAAC,YAAY,GAAG,WAAW,IAAI,OAAO,CAAC,CAAC;EAClF,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EACjD,YAAY,OAAO,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;EAC3D,WAAW,CAAC,CAAC;AACb;EACA,UAAU,IAAI,OAAO,GAAGT,YAAU,CAACM,SAAO,CAAC,OAAO,EAAEjB,oBAAkB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;EACxG,YAAY,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;EAChC,WAAW,CAAC,CAAC,CAAC,CAAC;AACf;EACA,UAAU,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAChD;EACA,UAAU,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;EACnC,SAAS,CAAC,CAAC;EACX,OAAO;AACP;EACA,MAAM,SAAS,aAAa,GAAG;EAC/B;EACA,QAAQ,IAAI,qBAAqB,GAAGoB,OAAU,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;EACnF,QAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EACtD,UAAU,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;EAC7E,UAAU,IAAI,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;EACnG,UAAU,IAAI,CAAC,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,MAAM,MAAM,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO;EACjH,UAAU,IAAI,GAAG,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;EAC3H,UAAU,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC;EACvD,UAAU,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC;EACnD,UAAU,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,OAAO;AAC/F;EACA,UAAU,IAAI,aAAa,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;EAC1D,UAAU,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,EAAE;EACzD,YAAY,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC5C,WAAW;EACX,YAAY,UAAU,CAAC,EAAE;EACzB;EACA,YAAY,IAAI,IAAI,GAAG,SAAS,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE;EACzD,cAAc,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACnE,aAAa,CAAC;AACd;EACA,YAAY,OAAO;EACnB,cAAc,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;EACzC,cAAc,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;EACzC,cAAc,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;EACzC,aAAa,CAAC;EACd,WAAW,CAAC;EACZ,UAAU,IAAI,OAAO,GAAG,EAAE,CAAC,MAAM,CAACpB,oBAAkB,CAAC,YAAY,IAAI,EAAE,CAAC,EAAEA,oBAAkB,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,CAAC;EACtH,UAAU,OAAO,CAAC,OAAO,CAAC,UAAU,MAAM,EAAE,GAAG,EAAE;EACjD,YAAY,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,KAAK,kBAAkB,CAAC;AACpF;EACA,YAAY,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE;EAC3D,cAAc,MAAM,CAAC,eAAe,GAAG,SAAS,GAAG,CAAC,GAAG,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC;EACjF,aAAa;AACb;EACA,YAAY,MAAM,CAAC,eAAe,IAAI,aAAa,CAAC;AACpD;EACA,YAAY,IAAI,MAAM,CAAC,eAAe,IAAI,CAAC,EAAE;EAC7C,cAAc,IAAI,CAAC,SAAS,EAAE;EAC9B,gBAAgB,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,GAAG,CAAC,CAAC;EACpE,eAAe,MAAM;EACrB;EACA,gBAAgB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;EAC7C,gBAAgB,WAAW,CAAC,MAAM,CAAC,CAAC;EACpC,gBAAgB,OAAO;EACvB,eAAe;EACf,aAAa;AACb;EACA,YAAY,IAAI,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC;EACxD,YAAY,IAAI,GAAG,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;EACnD,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EACnD,cAAc,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;EACrD,aAAa,CAAC,CAAC;EACf,WAAW,CAAC,CAAC;EACb,SAAS,CAAC,CAAC;EACX,OAAO;EACP,KAAK;EACL,IAAI,YAAY,EAAE,SAAS,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;EACrD,MAAM,IAAI,IAAI,EAAE;EAChB,QAAQ,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;EACzC,UAAU,IAAI,GAAG,GAAG,IAAIiB,SAAO,CAAC,KAAK,EAAE,CAAC;EACxC,UAAU,GAAG,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;EACtD,UAAU,IAAI,CAAC,qBAAqB,GAAG,GAAG,CAAC;EAC3C,UAAU,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACpC,SAAS;AACT;EACA,QAAQ,IAAI,qBAAqB,GAAGG,OAAU,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;EACnF,QAAQ,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EAC3E,QAAQ,IAAI,WAAW,GAAG,KAAK,CAAC,iCAAiC,CAAC;EAClE,QAAQ,IAAI,gBAAgB,GAAG,IAAIH,SAAO,CAAC,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;EACnG,QAAQ,IAAI,iBAAiB,GAAGG,OAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EAC5D,QAAQ,IAAI,qBAAqB,GAAGA,OAAU,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;EACnF,QAAQ,IAAI,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;EAC9F,QAAQ,IAAI,aAAa,GAAG,IAAIH,SAAO,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;EACzE,QAAQ,IAAI,OAAO,GAAG,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;EAC5C,QAAQ,IAAI,gBAAgB,GAAG,IAAIA,SAAO,CAAC,mBAAmB,CAAC;EAC/D,UAAU,KAAK,EAAE,aAAa;EAC9B,UAAU,WAAW,EAAE,IAAI;EAC3B,UAAU,OAAO,EAAE,OAAO;EAC1B,SAAS,CAAC,CAAC;AACX;EACA,QAAQ,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAIA,SAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC;EAC7F,OAAO;AACP;EACA,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;EACL,IAAI,YAAY,EAAE,SAAS,YAAY,CAAC,KAAK,EAAE;EAC/C,MAAM,IAAI,UAAU,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,YAAY;EACvG,QAAQ,OAAO,IAAI,CAAC;EACpB,OAAO,CAAC;EACR,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,IAAI,CAAC;AAC1C;EACA,MAAM,IAAI,MAAM,GAAG,SAAS,SAAS,CAAC,GAAG,EAAE;EAC3C,QAAQ,IAAI,MAAM,GAAG,EAAE,CAAC;AACxB;EACA,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE;EAC1B,UAAU,GAAG,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;EAC5C,UAAU,IAAI,GAAG,GAAG,IAAIA,SAAO,CAAC,IAAI,EAAE,CAAC;EACvC,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;EAC3E,UAAU,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EAC3B,SAAS;AACT;EACA,QAAQ,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAEjB,oBAAkB,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,MAAM,CAAC,UAAU,GAAG,EAAE;EACzG,UAAU,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,cAAc,KAAK,MAAM,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;EAClH,SAAS;EACT,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;EAC3B,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAC1B;EACA,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;AACtC;EACA,MAAM,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAEA,oBAAkB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;EAC7F,QAAQ,OAAOI,iBAAe,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;EACjE,UAAU,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC3B,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;EACtC,UAAU,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC3B,SAAS,CAAC,CAAC,CAAC,CAAC;EACb,OAAO,CAAC,CAAC,CAAC,CAAC;EACX,KAAK;EACL,GAAG;EACH,EAAE,SAAS,EAAE,SAAS,SAAS,GAAG;EAClC,IAAI,OAAO;EACX,MAAM,aAAa,EAAE,eAAe,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE;EACjK,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK,CAAC;EACN,GAAG;EACH,EAAE,IAAI,EAAE,SAAS,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE;EACvC;EACA,IAAI,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;EAChC,GAAG;EACH,EAAE,MAAM,EAAE,SAAS,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE;EAC/C,IAAI,IAAI,iBAAiB,GAAG,SAAS,iBAAiB,CAAC,QAAQ,EAAE;EACjE,MAAM,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;EACxC,QAAQ,OAAO,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;EAC9C,OAAO,CAAC,CAAC;EACT,KAAK,CAAC;AACN;EACA,IAAI,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;AAChC;EACA,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;AACrB;EACA,IAAI,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI,IAAI,iBAAiB,CAAC,CAAC,iBAAiB,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,EAAE;EAC5G;EACA,MAAM,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAEgB,OAAU,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;EAClG,KAAK;AACL;EACA,IAAI,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI,IAAI,iBAAiB,CAAC,CAAC,iBAAiB,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,EAAE;EAC5G;EACA,MAAM,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAEA,OAAU,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;EAClG,KAAK;AACL;AACA;EACA,IAAI,IAAI,KAAK,CAAC,aAAa,IAAI,iBAAiB,CAAC,CAAC,WAAW,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC,EAAE;EACvM,MAAM,IAAI,oBAAoB,GAAGA,OAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;EACnE,MAAM,IAAI,0BAA0B,GAAGA,OAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;EAC/E,MAAM,IAAI,WAAW,GAAGA,OAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;EAClD,MAAM,IAAI,aAAa,GAAGA,OAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EACtD,MAAM,IAAI,kBAAkB,GAAGA,OAAU,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;EAChE,MAAM,IAAI,gBAAgB,GAAG,EAAE,CAAC;AAChC;EACA,MAAM,IAAI,eAAe,GAAG,EAAE,CAAC;AAC/B;EACA,MAAM,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE;EACtF,QAAQ,KAAK,EAAE,KAAK,CAAC,aAAa,IAAI,iBAAiB,CAAC;EACxD,QAAQ,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;EACpD,QAAQ,SAAS,EAAE,SAAS,SAAS,CAAC,GAAG,EAAE;EAC3C,UAAU,OAAO,GAAG,CAAC,cAAc,KAAK,MAAM,CAAC;EAC/C,SAAS;EACT,QAAQ,SAAS,EAAE,SAAS,SAAS,CAAC,IAAI,EAAE;EAC5C,UAAU,IAAI,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;EACrD,UAAU,IAAI,SAAS,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;AAC3D;EACA,UAAU,IAAI,SAAS,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,EAAE;EAChE;EACA,YAAY,SAAS,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;EAC1C,WAAW;AACX;EACA,UAAU,IAAI,GAAG,CAAC;AAClB;EACA,UAAU,IAAI,SAAS,IAAI,CAAC,SAAS,EAAE;EACvC,YAAY,GAAG,GAAG,SAAS,CAAC;EAC5B,WAAW,MAAM;EACjB;EACA,YAAY,GAAG,GAAG,IAAIH,SAAO,CAAC,IAAI,EAAE,CAAC;EACrC,YAAY,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC;AACzC;EACA,YAAY,IAAI,SAAS,IAAI,SAAS,EAAE;EACxC,cAAc,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;EACjC,aAAa;EACb,WAAW;AACX;EACA,UAAU,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC;AACtC;EACA,UAAU,OAAO,GAAG,CAAC;EACrB,SAAS;EACT,QAAQ,SAAS,EAAE,SAAS,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE;EACjD,UAAU,IAAI,GAAG,CAAC,iBAAiB,EAAE;EACrC;EACA,YAAY,IAAI,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC7C,YAAY,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;EAC5D,YAAY,IAAI,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC;AACnD;EACA,YAAY,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,KAAK,WAAW,EAAE;EAC7K,cAAc,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;EACzD,gBAAgB,gBAAgB,CAAC,GAAG,CAAC,GAAG,IAAIA,SAAO,CAAC,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;EAC3G,eAAe;AACf;EACA,cAAc,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;EACrC,cAAc,GAAG,CAAC,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;EACnD,aAAa;AACb;EACA,YAAY,IAAI,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;EAC5C,YAAY,IAAI,aAAa,GAAG,IAAIA,SAAO,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC;EACpF,YAAY,IAAI,OAAO,GAAG,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAChE;EACA,YAAY,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,qBAAqB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,OAAO,EAAE;EAC9I,cAAc,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;EAC1D,gBAAgB,eAAe,CAAC,KAAK,CAAC,GAAG,IAAIA,SAAO,CAAC,mBAAmB,CAAC;EACzE,kBAAkB,KAAK,EAAE,aAAa;EACtC,kBAAkB,WAAW,EAAE,IAAI;EACnC,kBAAkB,OAAO,EAAE,OAAO;EAClC,iBAAiB,CAAC,CAAC;EACnB,eAAe;AACf;EACA,cAAc,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;EACrC,cAAc,GAAG,CAAC,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;EACpD,aAAa;EACb,WAAW;EACX,SAAS;EACT,OAAO,CAAC,CAAC;EACT,KAAK;AACL;AACA;EACA,IAAI,IAAI,KAAK,CAAC,aAAa,IAAI,iBAAiB,CAAC,CAAC,WAAW,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,gCAAgC,EAAE,0BAA0B,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,mCAAmC,CAAC,CAAC,EAAE;EACxa,MAAM,IAAI,qBAAqB,GAAGG,OAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACpE;EACA,MAAM,IAAI,2BAA2B,GAAGA,OAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;AAChF;EACA,MAAM,IAAI,sBAAsB,GAAGA,OAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAClE;EACA,MAAM,IAAI,mBAAmB,GAAGA,OAAU,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AACjE;EACA,MAAM,IAAI,cAAc,GAAGA,OAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACvD;EACA,MAAM,IAAI,aAAa,GAAGA,OAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EACtD,MAAM,IAAI,kBAAkB,GAAG,EAAE,CAAC;AAClC;EACA,MAAM,IAAI,oBAAoB,GAAG,EAAE,CAAC;AACpC;EACA,MAAM,IAAI,kBAAkB,GAAG,EAAE,CAAC;AAClC;EACA,MAAM,IAAI,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAC3E;EACA,MAAM,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,EAAE;EAClD,QAAQ,WAAW,EAAE,WAAW;EAChC,QAAQ,KAAK,EAAE,KAAK,CAAC,aAAa,IAAI,iBAAiB,CAAC;EACxD,QAAQ,iBAAiB,EAAE,uBAAuB,EAAE,WAAW,CAAC,CAAC;EACjE,QAAQ,SAAS,EAAE,SAAS,SAAS,CAAC,GAAG,EAAE;EAC3C,UAAU,OAAO,GAAG,CAAC,cAAc,KAAK,MAAM,CAAC;EAC/C,SAAS;EACT,QAAQ,SAAS,EAAE,SAAS,SAAS,CAAC,IAAI,EAAE;EAC5C,UAAU,IAAI,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACtD;EACA,UAAU,IAAI,SAAS,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;AAC5D;EACA,UAAU,IAAI,SAAS,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,EAAE;EAChE;EACA,YAAY,SAAS,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;EAC1C,WAAW;AACX;EACA,UAAU,IAAI,UAAU,CAAC;AACzB;EACA,UAAU,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE;EACvC;EACA,YAAY,IAAI,WAAW,GAAG,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACpD;EACA,YAAY,IAAI,WAAW,EAAE;EAC7B,cAAc,UAAU,GAAG,IAAIH,SAAO,CAAC,IAAI,EAAE,CAAC;EAC9C,aAAa,MAAM;EACnB;EACA,cAAc,IAAI,YAAY,GAAG,IAAIA,SAAO,CAAC,cAAc,EAAE,CAAC;EAC9D,cAAc,YAAY,CAAC,cAAc,CAAC,CAAC,UAAU,EAAE,IAAIA,SAAO,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;EAChH,cAAc,UAAU,GAAG,IAAIA,SAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;EAC1D,aAAa;EACb,WAAW;AACX;EACA,UAAU,IAAI,GAAG,CAAC;AAClB;EACA,UAAU,IAAI,CAAC,SAAS,EAAE;EAC1B,YAAY,GAAG,GAAG,UAAU,CAAC;EAC7B,YAAY,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC;EACzC,WAAW,MAAM;EACjB,YAAY,IAAI,CAAC,SAAS,EAAE;EAC5B;EACA,cAAc,GAAG,GAAG,SAAS,CAAC;EAC9B,aAAa,MAAM;EACnB;EACA,cAAc,GAAG,GAAG,IAAIA,SAAO,CAAC,KAAK,EAAE,CAAC;EACxC,cAAc,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC;EAC3C,cAAc,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;EAClC,cAAc,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;EACjC,aAAa;EACb,WAAW;AACX;EACA,UAAU,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC;AAC/B;EACA,UAAU,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC;AACtC;EACA,UAAU,OAAO,GAAG,CAAC;EACrB,SAAS;EACT,QAAQ,SAAS,EAAE,SAAS,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE;EACpD,UAAU,IAAI,MAAM,CAAC,iBAAiB,EAAE;EACxC;EACA;EACA,YAAY,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;EAC3E,YAAY,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;EACrE,YAAY,IAAI,WAAW,GAAG,CAAC,CAAC,SAAS,CAAC;AAC1C;EACA,YAAY,IAAI,WAAW,EAAE;EAC7B,cAAc,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;EACpC,cAAc,IAAI,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC;AACrD;EACA,cAAc,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,KAAK,WAAW,EAAE;EAChL,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;EACnE,kBAAkB,IAAI,QAAQ,GAAG,IAAIA,SAAO,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;EACpG,kBAAkB,QAAQ,CAAC,cAAc,CAAC,CAAC,IAAIA,SAAO,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;EAC/F,kBAAkB,QAAQ,CAAC,cAAc,CAAC,CAAC,IAAIA,SAAO,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;EAC7F,kBAAkB,kBAAkB,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;EAC3D,iBAAiB;AACjB;EACA,gBAAgB,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;EACvC,gBAAgB,GAAG,CAAC,QAAQ,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;EAC7D,eAAe;EACf,aAAa;AACb;EACA,YAAY,IAAI,cAAc,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;AAC9D;EACA,YAAY,IAAI,cAAc,EAAE;EAChC,cAAc,GAAG,CAAC,QAAQ,GAAG,cAAc,CAAC;EAC5C,aAAa,MAAM;EACnB,cAAc,IAAI,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;AAC/C;EACA,cAAc,IAAI,aAAa,GAAG,IAAIA,SAAO,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC;EACtF,cAAc,IAAI,OAAO,GAAG,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;EAClE,cAAc,IAAI,YAAY,GAAG,WAAW,GAAG,qBAAqB,GAAG,mBAAmB,CAAC;AAC3F;EACA,cAAc,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,OAAO,EAAE;EACvI,gBAAgB,IAAI,aAAa,GAAG,WAAW,GAAG,oBAAoB,GAAG,kBAAkB,CAAC;AAC5F;EACA,gBAAgB,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;EAC1D,kBAAkB,aAAa,CAAC,KAAK,CAAC,GAAG,IAAIA,SAAO,CAAC,YAAY,CAAC,CAAC;EACnE,oBAAoB,KAAK,EAAE,aAAa;EACxC,oBAAoB,WAAW,EAAE,OAAO,GAAG,CAAC;EAC5C,oBAAoB,OAAO,EAAE,OAAO;EACpC,oBAAoB,UAAU,EAAE,OAAO,IAAI,CAAC;AAC5C;EACA,mBAAmB,CAAC,CAAC;EACrB,iBAAiB;AACjB;EACA,gBAAgB,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;EACvC,gBAAgB,GAAG,CAAC,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;EACpD,eAAe;EACf,aAAa;EACb,WAAW;EACX,SAAS;EACT,OAAO,CAAC,CAAC;AACT;EACA,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,YAAY,CAAC,cAAc,CAAC,4BAA4B,CAAC,EAAE;EACzG,QAAQ,IAAI,mBAAmB,GAAGG,OAAU,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;EAC/E,QAAQ,IAAI,kBAAkB,GAAGA,OAAU,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;EAC7E,QAAQ,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE;EAChF,UAAU,WAAW,EAAE,YAAY;EACnC,UAAU,SAAS,EAAE,SAAS,SAAS,CAAC,GAAG,EAAE;EAC7C,YAAY,OAAO,GAAG,CAAC,kBAAkB,KAAK,OAAO,CAAC;EACtD,WAAW;EACX,UAAU,SAAS,EAAE,SAAS,SAAS,GAAG;EAC1C,YAAY,IAAI,GAAG,GAAG,IAAIH,SAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAIA,SAAO,CAAC,mBAAmB,CAAC;EAClF,cAAc,WAAW,EAAE,IAAI;EAC/B,aAAa,CAAC,CAAC,CAAC;EAChB,YAAY,GAAG,CAAC,kBAAkB,GAAG,OAAO,CAAC;AAC7C;EACA,YAAY,OAAO,GAAG,CAAC;EACvB,WAAW;EACX,UAAU,SAAS,EAAE,SAAS,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE;EACnD,YAAY,IAAI,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;EACxD,YAAY,IAAI,WAAW,GAAG,KAAK,CAAC,8BAA8B,CAAC;AACnE;EACA,YAAY,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,KAAK,WAAW,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,KAAK,WAAW,EAAE;EACjL,cAAc,IAAI,YAAY,GAAG,IAAIA,SAAO,CAAC,kBAAkB,CAAC,WAAW,GAAG,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AAC9G;EACA,cAAc,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;EAC5D,cAAc,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;EAChD,cAAc,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;EACrC,cAAc,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAC;EAC1C,aAAa;AACb;EACA,YAAY,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAIA,SAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC;EAClH,YAAY,GAAG,CAAC,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;EACzD,WAAW;EACX,SAAS,CAAC,CAAC;EACX,OAAO;AACP;AACA;EACA,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,YAAY,CAAC,cAAc,CAAC,0BAA0B,CAAC,EAAE;EACrG,QAAQ,IAAI,iBAAiB,GAAGG,OAAU,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;EAC3E,QAAQ,IAAI,qBAAqB,GAAGA,OAAU,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;EACnF,QAAQ,IAAI,qBAAqB,GAAGA,OAAU,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;EACnF,QAAQ,IAAI,iBAAiB,GAAG,EAAE,CAAC;AACnC;EACA,QAAQ,IAAI,kBAAkB,GAAG,EAAE,CAAC;AACpC;EACA,QAAQ,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE;EAC9E,UAAU,WAAW,EAAE,cAAc;EACrC,UAAU,SAAS,EAAE,SAAS,SAAS,CAAC,GAAG,EAAE;EAC7C,YAAY,OAAO,GAAG,CAAC,kBAAkB,KAAK,SAAS,CAAC;EACxD,WAAW;EACX,UAAU,SAAS,EAAE,SAAS,SAAS,GAAG;EAC1C,YAAY,IAAI,GAAG,GAAG,IAAIH,SAAO,CAAC,KAAK,EAAE,CAAC;EAC1C,YAAY,GAAG,CAAC,kBAAkB,GAAG,SAAS,CAAC;AAC/C;EACA,YAAY,OAAO,GAAG,CAAC;EACvB,WAAW;EACX,UAAU,SAAS,EAAE,SAAS,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE;EACnD,YAAY,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EAC3E,YAAY,IAAI,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;EACrE,YAAY,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EAC/E,YAAY,IAAI,WAAW,GAAG,KAAK,CAAC,iCAAiC,CAAC;EACtE,YAAY,IAAI,gBAAgB,CAAC;AACjC;EACA,YAAY,IAAI,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,KAAK,OAAO,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,KAAK,WAAW,EAAE;EAC9I,cAAc,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC;EACpD,aAAa,MAAM;EACnB,cAAc,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;EAC/D,gBAAgB,kBAAkB,CAAC,OAAO,CAAC,GAAG,IAAIA,SAAO,CAAC,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;EAClH,eAAe;AACf;EACA,cAAc,gBAAgB,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;EAC7D,cAAc,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;EACxD,aAAa;AACb;EACA,YAAY,IAAI,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;EAC/F,YAAY,IAAI,aAAa,GAAG,IAAIA,SAAO,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;EAC7E,YAAY,IAAI,OAAO,GAAG,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;EAChD,YAAY,IAAI,gBAAgB,CAAC;AACjC;EACA,YAAY,IAAI,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,KAAK,OAAO,EAAE;EACvH,cAAc,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC;EACpD,aAAa,MAAM;EACnB,cAAc,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;EAClE,gBAAgB,iBAAiB,CAAC,WAAW,CAAC,GAAG,IAAIA,SAAO,CAAC,mBAAmB,CAAC;EACjF,kBAAkB,KAAK,EAAE,aAAa;EACtC,kBAAkB,WAAW,EAAE,IAAI;EACnC,kBAAkB,OAAO,EAAE,OAAO;EAClC,iBAAiB,CAAC,CAAC;EACnB,eAAe;AACf;EACA,cAAc,gBAAgB,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;EAChE,cAAc,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;EACxD,aAAa;AACb;AACA;EACA,YAAY,WAAW,CAACjB,oBAAkB,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE;EACxF,cAAc,OAAO;EACrB,gBAAgB,GAAG,EAAE,GAAG;EACxB,eAAe,CAAC;EAChB,aAAa,CAAC,EAAE,GAAG,EAAE;EACrB,cAAc,UAAU,EAAE,SAAS,UAAU,CAAC,CAAC,EAAE;EACjD,gBAAgB,OAAO,CAAC,CAAC,GAAG,CAAC;EAC7B,eAAe;EACf,cAAc,SAAS,EAAE,SAAS,SAAS,GAAG;EAC9C,gBAAgB,OAAO,IAAIiB,SAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;EAC5E,eAAe;EACf,cAAc,SAAS,EAAE,SAAS,SAAS,CAAC,GAAG,EAAE;EACjD,gBAAgB,GAAG,CAAC,QAAQ,GAAG,gBAAgB,CAAC;EAChD,gBAAgB,GAAG,CAAC,QAAQ,GAAG,gBAAgB,CAAC;EAChD,eAAe;EACf,aAAa,CAAC,CAAC;EACf,WAAW;EACX,SAAS,CAAC,CAAC;EACX,OAAO;EACP,KAAK;AACL;EACA,IAAI,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;EAChC;AACA;EACA,IAAI,IAAI,iBAAiB,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,kBAAkB,CAAC,CAAC,EAAE;EAChK,MAAM,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;EAClC;AACA;EACA,MAAM,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EACpD,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;EAC7C,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;EAC7C,OAAO,CAAC,CAAC;AACT;EACA,MAAM,IAAI,OAAO,GAAG,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC;EACnD,MAAM,IAAI,MAAM,CAAC;AACjB;EACA,MAAM,IAAI,OAAO,EAAE;EACnB;EACA,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;EACtD,SAAS,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACzE;EACA,QAAQ,IAAI,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC1D;EACA,QAAQ,IAAI,SAAS,EAAE;EACvB,UAAU,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;EACpC,YAAY,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;EACnC,WAAW,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;EAC1C,SAAS;AACT;AACA;EACA,QAAQ,IAAI,UAAU,GAAG,KAAK,CAAC,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,IAAI,EAAE;EACxF,UAAU,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;EACpC,SAAS,EAAE;EACX,UAAU,UAAU,EAAE,KAAK,CAAC,aAAa;EACzC,UAAU,WAAW,EAAE,KAAK,CAAC,UAAU,IAAI,SAAS;EACpD,SAAS,CAAC,CAAC;EACX,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAEjB,oBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;EACjG,QAAQ,IAAI,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,IAAI,QAAQ,IAAI,CAAC,CAAC,GAAG,oBAAoB,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AACrM;EACA,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE;EAC3B,UAAU,IAAI,MAAM,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE;EACpD,YAAY,OAAO,UAAU,IAAI,EAAE;EACnC,cAAc,OAAO,CAAC,GAAG,GAAG,SAAS,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,IAAI,gBAAgB,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EAC/H,aAAa,CAAC;EACd,WAAW,CAAC;AACZ;EACA,UAAU,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;EAChG,UAAU,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;EAChG,UAAU,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC;EACrG,UAAU,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EACpF,YAAY,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;EACjC,YAAY,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;EACjC,YAAY,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;EACjC,WAAW,CAAC,CAAC;EACb,SAAS;AACT;AACA;EACA,QAAQ,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,UAAU,IAAI,EAAE;EACrI,UAAU,IAAI,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EAC/D,UAAU,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,IAAI,gBAAgB,CAAC;EACtG,SAAS,CAAC,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE;EACpC,UAAU,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACnD,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;EACnB,OAAO,MAAM;EACb;EACA,QAAQ,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AACpC;EACA,QAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EACtD,UAAU,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;EAC7C,SAAS,CAAC,CAAC;EACX,QAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;EACtD,UAAU,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;EACnD,SAAS,CAAC,CAAC;EACX,QAAQ,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC;EAC3D,UAAU,UAAU,EAAE,KAAK,CAAC,aAAa;EACzC,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;EACjC,QAAQ,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC;EAC9B,OAAO;AACP;EACA,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,WAAW,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE;EAC1I,QAAQ,MAAM,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;EAC5C,OAAO;AACP;AACA;EACA,MAAM,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;EAC5B,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;EAC5B,KAAK;AACL;EACA,IAAI,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;AAC/B;EACA,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;EAC3B,GAAG;EACH,CAAC,CAAC,CAAC;AACH;EACA,SAAS,WAAW,EAAE,OAAO,EAAE;EAC/B,EAAE,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;EAC7F,EAAE,IAAI,mBAAmB,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AACtG;EACA,EAAE,IAAI,WAAW,gBAAgB,UAAU,UAAU,EAAE;EACvD,IAAI,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AACvC;EACA,IAAI,IAAI,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;AAC3C;EACA,IAAI,SAAS,WAAW,GAAG;EAC3B,MAAM,IAAI,KAAK,CAAC;AAChB;EACA,MAAM,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACzC;EACA,MAAM,KAAK,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE;EAC/F,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;EACrC,OAAO;AACP;EACA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;EAC7D,MAAM,KAAK,CAAC,iBAAiB,GAAG,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,CAACA,oBAAkB,CAAC,mBAAmB,GAAG,CAACY,wBAAsB,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;EACzJ,MAAM,OAAO,KAAK,CAAC;EACnB,KAAK;AACL;EACA,IAAI,OAAO,WAAW,CAAC;EACvB,GAAG,CAAC,SAAS,CAAC,CAAC;AACf;AACA;EACA,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;EAC9C,IAAI,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,YAAY;EAClD,MAAM,IAAI,qBAAqB,CAAC;AAChC;EACA,MAAM,IAAI,SAAS,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;AAClH;EACA,MAAM,OAAO,SAAS,KAAK,IAAI,CAAC,iBAAiB,GAAG,IAAI;EACxD,QAAQ,SAAS,CAAC;EAClB,KAAK,CAAC;EACN,GAAG,CAAC,CAAC;EACL,EAAE,OAAO,WAAW,CAAC;EACrB,CAAC;AACD;EACA,IAAIS,OAAK,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG;EAC1C,EAAE,KAAK,EAAElF,OAAK;EACd,CAAC,CAAC;EACF,IAAI,eAAe,GAAG,WAAW,CAAC,UAAU,EAAEkF,OAAK,CAAC,KAAK,EAAE,IAAI,CAAC;;ECplDhE,IAAI,iBAAiB,GAAG,WAAW,MAAM,EAAE,UAAU,GAAG;AACxD;EACA,CAAC,KAAK,UAAU,KAAK,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,8EAA8E,EAAE,CAAC;EAChI,CAAC,KAAK,UAAU,KAAK,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,8HAA8H,EAAE,CAAC;AAChL;EACA,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC;EAClB,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;AAC3F;EACA,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;EACtB,CAAC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC9B;EACA;AACA;EACA,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACrB;EACA,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACxD;EACA,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;EACxB,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;EACtB,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;AACrB;EACA,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;EACvB,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;EACrB,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACpB;EACA,CAAC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;EAC3B,CAAC,IAAI,CAAC,oBAAoB,GAAG,GAAG,CAAC;AACjC;EACA,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;EACtB,CAAC,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC7B;EACA,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC9C;EACA,CAAC,IAAI,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;AAClF;EACA;AACA;EACA,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;AAC7B;EACA,CAAC,IAAI,GAAG,GAAG,QAAQ,CAAC;AACpB;EACA,CAAC,IAAI,YAAY,GAAG,IAAI,OAAO,EAAE,CAAC;EAClC,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC;AAClB;EACA,CAAC,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI;EACxB,EAAE,SAAS,GAAG,KAAK,CAAC,IAAI;AACxB;EACA,EAAE,IAAI,GAAG,IAAI,OAAO,EAAE;AACtB;EACA,EAAE,SAAS,GAAG,IAAI,OAAO,EAAE;EAC3B,EAAE,SAAS,GAAG,IAAI,OAAO,EAAE;AAC3B;EACA,EAAE,SAAS,GAAG,IAAI,OAAO,EAAE;EAC3B,EAAE,UAAU,GAAG,CAAC;AAChB;EACA,EAAE,UAAU,GAAG,IAAI,OAAO,EAAE;EAC5B,EAAE,QAAQ,GAAG,IAAI,OAAO,EAAE;AAC1B;EACA,EAAE,uBAAuB,GAAG,CAAC;EAC7B,EAAE,qBAAqB,GAAG,CAAC;AAC3B;EACA,EAAE,SAAS,GAAG,IAAI,OAAO,EAAE;EAC3B,EAAE,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC1B;EACA;AACA;EACA,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;EACpC,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;EAC/C,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;EACnC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAC/B;EACA;AACA;EACA,CAAC,IAAI,WAAW,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;EACtC,CAAC,IAAI,UAAU,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;EACpC,CAAC,IAAI,QAAQ,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAChC;AACA;EACA;AACA;EACA,CAAC,IAAI,CAAC,YAAY,GAAG,YAAY;AACjC;EACA,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC;EACrD;EACA,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC;EACzD,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC;EACnE,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,SAAS,CAAC;EAChE,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;EACjC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;AACnC;EACA,EAAE,CAAC;AACH;EACA,CAAC,IAAI,gBAAgB,KAAK,YAAY;AACtC;EACA,EAAE,IAAI,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;AAC7B;EACA,EAAE,OAAO,SAAS,gBAAgB,EAAE,KAAK,EAAE,KAAK,GAAG;AACnD;EACA,GAAG,MAAM,CAAC,GAAG;EACb,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,KAAK;EACtD,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM;EACtD,IAAI,CAAC;AACL;EACA,GAAG,OAAO,MAAM,CAAC;AACjB;EACA,GAAG,CAAC;AACJ;EACA,EAAE,EAAE,EAAE,CAAC;AACP;EACA,CAAC,IAAI,gBAAgB,KAAK,YAAY;AACtC;EACA,EAAE,IAAI,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;AAC7B;EACA,EAAE,OAAO,SAAS,gBAAgB,EAAE,KAAK,EAAE,KAAK,GAAG;AACnD;EACA,GAAG,MAAM,CAAC,GAAG;EACb,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,EAAE;EAC7F,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,KAAK;EACrF,IAAI,CAAC;AACL;EACA,GAAG,OAAO,MAAM,CAAC;AACjB;EACA,GAAG,CAAC;AACJ;EACA,EAAE,EAAE,EAAE,CAAC;AACP;EACA,CAAC,IAAI,CAAC,YAAY,KAAK,YAAY;AACnC;EACA,EAAE,IAAI,IAAI,GAAG,IAAI,OAAO,EAAE;EAC1B,GAAG,UAAU,GAAG,IAAI,UAAU,EAAE;EAChC,GAAG,YAAY,GAAG,IAAI,OAAO,EAAE;EAC/B,GAAG,iBAAiB,GAAG,IAAI,OAAO,EAAE;EACpC,GAAG,uBAAuB,GAAG,IAAI,OAAO,EAAE;EAC1C,GAAG,aAAa,GAAG,IAAI,OAAO,EAAE;EAChC,GAAG,KAAK,CAAC;AACT;EACA,EAAE,OAAO,SAAS,YAAY,GAAG;AACjC;EACA,GAAG,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;EAChF,GAAG,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC;AAClC;EACA,GAAG,KAAK,KAAK,GAAG;AAChB;EACA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAC3D;EACA,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;EAC1C,IAAI,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC;EAC1D,IAAI,uBAAuB,CAAC,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC,SAAS,EAAE,CAAC;AACxF;EACA,IAAI,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC;EAC7D,IAAI,uBAAuB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC;AACnE;EACA,IAAI,aAAa,CAAC,IAAI,EAAE,iBAAiB,CAAC,GAAG,EAAE,uBAAuB,EAAE,EAAE,CAAC;AAC3E;EACA,IAAI,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;AACzD;EACA,IAAI,KAAK,IAAI,KAAK,CAAC,WAAW,CAAC;EAC/B,IAAI,UAAU,CAAC,gBAAgB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC/C;EACA,IAAI,IAAI,CAAC,eAAe,EAAE,UAAU,EAAE,CAAC;EACvC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,CAAC;AAClD;EACA,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;EAC3B,IAAI,UAAU,GAAG,KAAK,CAAC;AACvB;EACA,IAAI,MAAM,KAAK,EAAE,KAAK,CAAC,YAAY,IAAI,UAAU,GAAG;AACpD;EACA,IAAI,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAC;EAChE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;EAC3D,IAAI,UAAU,CAAC,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;EACzD,IAAI,IAAI,CAAC,eAAe,EAAE,UAAU,EAAE,CAAC;EACvC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,CAAC;AAClD;EACA,IAAI;AACJ;EACA,GAAG,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;AAC/B;EACA,GAAG,CAAC;AACJ;EACA,EAAE,EAAE,EAAE,CAAC;AACP;AACA;EACA,CAAC,IAAI,CAAC,UAAU,GAAG,YAAY;AAC/B;EACA,EAAE,IAAI,MAAM,CAAC;AACb;EACA,EAAE,KAAK,MAAM,KAAK,KAAK,CAAC,cAAc,GAAG;AACzC;EACA,GAAG,MAAM,GAAG,uBAAuB,GAAG,qBAAqB,CAAC;EAC5D,GAAG,uBAAuB,GAAG,qBAAqB,CAAC;AACnD;EACA,GAAG,KAAK,KAAK,CAAC,MAAM,CAAC,mBAAmB,GAAG;AAC3C;EACA,IAAI,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;AAClC;EACA,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,oBAAoB,GAAG;AACnD;EACA,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC;EAChC,IAAI,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;AAC1C;EACA,IAAI,MAAM;AACV;EACA,IAAI,OAAO,CAAC,IAAI,EAAE,kDAAkD,EAAE,CAAC;AACvE;EACA,IAAI;AACJ;EACA,GAAG,MAAM;AACT;EACA,GAAG,MAAM,GAAG,GAAG,GAAG,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;AAClE;EACA,GAAG,KAAK,MAAM,KAAK,GAAG,IAAI,MAAM,GAAG,GAAG,GAAG;AACzC;EACA,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,mBAAmB,GAAG;AAC5C;EACA,KAAK,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;AACnC;EACA,KAAK,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,oBAAoB,GAAG;AACpD;EACA,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC;EACjC,KAAK,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;AAC3C;EACA,KAAK,MAAM;AACX;EACA,KAAK,OAAO,CAAC,IAAI,EAAE,kDAAkD,EAAE,CAAC;AACxE;EACA,KAAK;AACL;EACA,IAAI;AACJ;EACA,GAAG,KAAK,KAAK,CAAC,YAAY,GAAG;AAC7B;EACA,IAAI,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AAChC;EACA,IAAI,MAAM;AACV;EACA,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,KAAK,IAAI,CAAC,oBAAoB,CAAC;AAC9E;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,CAAC;AACH;EACA,CAAC,IAAI,CAAC,SAAS,KAAK,YAAY;AAChC;EACA,EAAE,IAAI,WAAW,GAAG,IAAI,OAAO,EAAE;EACjC,GAAG,QAAQ,GAAG,IAAI,OAAO,EAAE;EAC3B,GAAG,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;AACvB;EACA,EAAE,OAAO,SAAS,SAAS,GAAG;AAC9B;EACA,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC;AAChD;EACA,GAAG,KAAK,WAAW,CAAC,QAAQ,EAAE,GAAG;AACjC;EACA,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,oBAAoB,GAAG;AAC7C;EACA,KAAK,IAAI,OAAO,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;EACjH,KAAK,IAAI,OAAO,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;AACjH;EACA,KAAK,WAAW,CAAC,CAAC,IAAI,OAAO,CAAC;EAC9B,KAAK,WAAW,CAAC,CAAC,IAAI,OAAO,CAAC;AAC9B;EACA,KAAK;AACL;EACA,IAAI,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;AACjE;EACA,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;EACzE,IAAI,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC;AAC3E;EACA,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;EACrC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAC5B;EACA,IAAI,KAAK,KAAK,CAAC,YAAY,GAAG;AAC9B;EACA,KAAK,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;AAC/B;EACA,KAAK,MAAM;AACX;EACA,KAAK,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC,oBAAoB,EAAE,EAAE,CAAC;AAChH;EACA,KAAK;AACL;EACA,IAAI;AACJ;EACA,GAAG,CAAC;AACJ;EACA,EAAE,EAAE,EAAE,CAAC;AACP;EACA,CAAC,IAAI,CAAC,cAAc,GAAG,YAAY;AACnC;EACA,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG;AACzC;EACA,GAAG,KAAK,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,GAAG;AAClE;EACA,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;EAC1F,IAAI,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AAChC;EACA,IAAI;AACJ;EACA,GAAG,KAAK,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,GAAG;AAClE;EACA,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;EAC1F,IAAI,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AAChC;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,CAAC;AACH;EACA,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY;AAC3B;EACA,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACzD;EACA,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,GAAG;AAC1B;EACA,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;AACxB;EACA,GAAG;AACH;EACA,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG;AACxB;EACA,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;AACtB;EACA,GAAG;AACH;EACA,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG;AACvB;EACA,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;AACrB;EACA,GAAG;AACH;EACA,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;AACzD;EACA,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,mBAAmB,GAAG;AAC1C;EACA,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B;EACA,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACvC;EACA,GAAG,KAAK,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG;AACxE;EACA,IAAI,KAAK,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC;AACvC;EACA,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC/C;EACA,IAAI;AACJ;EACA,GAAG,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,oBAAoB,GAAG;AAClD;EACA,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACvC;EACA,GAAG,KAAK,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI,QAAQ,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG;AAC1G;EACA,IAAI,KAAK,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC;AACvC;EACA,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;EAC/C,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;AACjC;EACA,IAAI;AACJ;EACA,GAAG,MAAM;AACT;EACA,GAAG,OAAO,CAAC,IAAI,EAAE,kDAAkD,EAAE,CAAC;AACtE;EACA,GAAG;AACH;EACA,EAAE,CAAC;AACH;EACA,CAAC,IAAI,CAAC,KAAK,GAAG,YAAY;AAC1B;EACA,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;EACtB,EAAE,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;AACzB;EACA,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;EACrC,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;EAChD,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;EACpC,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;AAClC;EACA,EAAE,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;AACxC;EACA,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACzD;EACA,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACtC;EACA,EAAE,KAAK,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC;AACrC;EACA,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;EAC7C,EAAE,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;AAC/B;EACA,EAAE,CAAC;AACH;EACA;AACA;EACA,CAAC,SAAS,aAAa,EAAE,KAAK,GAAG;AACjC;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACxC;EACA,EAAE,SAAS,KAAK,CAAC,WAAW;AAC5B;EACA,GAAG,KAAK,OAAO,CAAC;EAChB,GAAG,KAAK,KAAK;EACb,IAAI,WAAW,EAAE,KAAK,EAAE,CAAC;EACzB,IAAI,MAAM;AACV;EACA;AACA;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,SAAS,aAAa,EAAE,KAAK,GAAG;AACjC;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACxC;EACA,EAAE,SAAS,KAAK,CAAC,WAAW;AAC5B;EACA,GAAG,KAAK,OAAO,CAAC;EAChB,GAAG,KAAK,KAAK;EACb,IAAI,WAAW,EAAE,KAAK,EAAE,CAAC;EACzB,IAAI,MAAM;AACV;EACA;AACA;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,SAAS,WAAW,EAAE,KAAK,GAAG;AAC/B;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACxC;EACA,EAAE,SAAS,KAAK,CAAC,WAAW;AAC5B;EACA,GAAG,KAAK,OAAO,CAAC;EAChB,GAAG,KAAK,KAAK;EACb,IAAI,SAAS,EAAE,KAAK,EAAE,CAAC;EACvB,IAAI,MAAM;AACV;EACA;AACA;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,SAAS,OAAO,EAAE,KAAK,GAAG;AAC3B;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACxC;EACA,EAAE,MAAM,CAAC,mBAAmB,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACnD;EACA,EAAE,KAAK,SAAS,KAAK,KAAK,CAAC,IAAI,GAAG;AAClC;EACA,GAAG,OAAO;AACV;EACA,GAAG,MAAM,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,GAAG;AACjF;EACA,GAAG,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;AAC5B;EACA,GAAG,MAAM,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG;AAC7E;EACA,GAAG,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;AAC1B;EACA,GAAG,MAAM,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG;AAC3E;EACA,GAAG,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC;AACzB;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,SAAS,KAAK,GAAG;AAClB;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACxC;EACA,EAAE,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;AACzB;EACA,EAAE,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACvD;EACA,EAAE;AACF;EACA,CAAC,SAAS,WAAW,EAAE,KAAK,GAAG;AAC/B;EACA,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;EACzB,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;AAC1B;EACA,EAAE,KAAK,MAAM,KAAK,KAAK,CAAC,IAAI,GAAG;AAC/B;EACA,GAAG,SAAS,KAAK,CAAC,MAAM;AACxB;EACA,IAAI,KAAK,KAAK,CAAC,YAAY,CAAC,IAAI;EAChC,KAAK,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;EAC3B,KAAK,MAAM;AACX;EACA,IAAI,KAAK,KAAK,CAAC,YAAY,CAAC,MAAM;EAClC,KAAK,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;EACzB,KAAK,MAAM;AACX;EACA,IAAI,KAAK,KAAK,CAAC,YAAY,CAAC,KAAK;EACjC,KAAK,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC;EACxB,KAAK,MAAM;AACX;EACA,IAAI;EACJ,KAAK,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;AACzB;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,IAAI,KAAK,GAAG,EAAE,SAAS,KAAK,KAAK,CAAC,IAAI,KAAK,SAAS,GAAG,MAAM,CAAC;AAChE;EACA,EAAE,KAAK,KAAK,KAAK,KAAK,CAAC,MAAM,IAAI,EAAE,KAAK,CAAC,QAAQ,GAAG;AACpD;EACA,GAAG,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;EAClE,GAAG,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;AAC/B;EACA,GAAG,MAAM,KAAK,KAAK,KAAK,KAAK,CAAC,IAAI,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG;AACvD;EACA,GAAG,UAAU,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;EACnE,GAAG,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC;AAC/B;EACA,GAAG,MAAM,KAAK,KAAK,KAAK,KAAK,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG;AACrD;EACA,GAAG,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;EAClE,GAAG,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B;EACA,GAAG;AACH;EACA,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;EACzF,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACrF;EACA,EAAE,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;AACpC;EACA,EAAE;AACF;EACA,CAAC,SAAS,WAAW,EAAE,KAAK,GAAG;AAC/B;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACxC;EACA,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;EACzB,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;AAC1B;EACA,EAAE,IAAI,KAAK,GAAG,EAAE,SAAS,KAAK,KAAK,CAAC,IAAI,KAAK,SAAS,GAAG,MAAM,CAAC;AAChE;EACA,EAAE,KAAK,KAAK,KAAK,KAAK,CAAC,MAAM,IAAI,EAAE,KAAK,CAAC,QAAQ,GAAG;AACpD;EACA,GAAG,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;EAC/B,GAAG,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;AAClE;EACA,GAAG,MAAM,KAAK,KAAK,KAAK,KAAK,CAAC,IAAI,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG;AACvD;EACA,GAAG,QAAQ,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;AACjE;EACA,GAAG,MAAM,KAAK,KAAK,KAAK,KAAK,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG;AACrD;EACA,GAAG,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;AAChE;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,SAAS,SAAS,EAAE,KAAK,GAAG;AAC7B;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACxC;EACA,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;EACzB,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;AAC1B;EACA,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;AACtB;EACA,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;EACrF,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AACjF;EACA,EAAE,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC;AAClC;EACA,EAAE;AACF;EACA,CAAC,SAAS,UAAU,EAAE,KAAK,GAAG;AAC9B;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACxC;EACA,EAAE,KAAK,KAAK,CAAC,MAAM,KAAK,IAAI,GAAG,OAAO;AACtC;EACA,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;EACzB,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;AAC1B;EACA,EAAE,SAAS,KAAK,CAAC,SAAS;AAC1B;EACA,GAAG,KAAK,CAAC;EACT;EACA,IAAI,UAAU,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;EACzC,IAAI,MAAM;AACV;EACA,GAAG,KAAK,CAAC;EACT;EACA,IAAI,UAAU,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;EACxC,IAAI,MAAM;AACV;EACA,GAAG;EACH;EACA,IAAI,UAAU,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;EAC3C,IAAI,MAAM;AACV;EACA,GAAG;AACH;EACA,EAAE,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;EACpC,EAAE,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC;AAClC;EACA,EAAE;AACF;EACA,CAAC,SAAS,UAAU,EAAE,KAAK,GAAG;AAC9B;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACxC;EACA,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;AACzB;EACA,EAAE,SAAS,KAAK,CAAC,OAAO,CAAC,MAAM;AAC/B;EACA,GAAG,KAAK,CAAC;EACT,IAAI,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC;EAChC,IAAI,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;EAC7F,IAAI,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;EAChC,IAAI,MAAM;AACV;EACA,GAAG;EACH,IAAI,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC;EAClC,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;EACjE,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;EACjE,IAAI,qBAAqB,GAAG,uBAAuB,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AACrF;EACA,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;EACxE,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;EACxE,IAAI,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;EAC/C,IAAI,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;EAC9B,IAAI,MAAM;AACV;EACA,GAAG;AACH;EACA,EAAE,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;AACpC;EACA,EAAE;AACF;EACA,CAAC,SAAS,SAAS,EAAE,KAAK,GAAG;AAC7B;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACxC;EACA,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;EACzB,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;AAC1B;EACA,EAAE,SAAS,KAAK,CAAC,OAAO,CAAC,MAAM;AAC/B;EACA,GAAG,KAAK,CAAC;EACT,IAAI,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;EAChC,IAAI,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;EAC7F,IAAI,MAAM;AACV;EACA,GAAG;EACH,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;EACjE,IAAI,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;EACjE,IAAI,qBAAqB,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AAC3D;EACA,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;EACxE,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;EACxE,IAAI,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;EAC7C,IAAI,MAAM;AACV;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,SAAS,QAAQ,EAAE,KAAK,GAAG;AAC5B;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACxC;EACA,EAAE,SAAS,KAAK,CAAC,OAAO,CAAC,MAAM;AAC/B;EACA,GAAG,KAAK,CAAC;EACT,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;EACxB,IAAI,MAAM;AACV;EACA,GAAG,KAAK,CAAC;EACT,IAAI,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC;EAChC,IAAI,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;EAC7F,IAAI,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;EAChC,IAAI,MAAM;AACV;EACA,GAAG;AACH;EACA,EAAE,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC;AAClC;EACA,EAAE;AACF;EACA,CAAC,SAAS,WAAW,EAAE,KAAK,GAAG;AAC/B;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACxC;EACA,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;AACzB;EACA,EAAE;AACF;EACA,CAAC,IAAI,CAAC,OAAO,GAAG,YAAY;AAC5B;EACA,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAC5E;EACA,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;EAC9E,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACrE;EACA,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;EAC1E,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;EACtE,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACxE;EACA,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;EAC5F,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACxF;EACA,EAAE,MAAM,CAAC,mBAAmB,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;EAC1D,EAAE,MAAM,CAAC,mBAAmB,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACtD;EACA,EAAE,CAAC;AACH;EACA,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACvE;EACA,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;EACzE,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAChE;EACA,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;EACrE,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;EACjE,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACnE;EACA,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;EACvF,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACnF;EACA,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;EACtD,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAClD;EACA,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB;EACA;EACA,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AACf;EACA,CAAC,CAAC;AACF;EACA,iBAAiB,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,SAAS,EAAE,CAAC;EACzE,iBAAiB,CAAC,SAAS,CAAC,WAAW,GAAG,iBAAiB;;ECruB3D;EACA;EACA;EACA;EACA;EACA;AACA;EACA,IAAI,aAAa,GAAG,WAAW,MAAM,EAAE,UAAU,GAAG;AACpD;EACA,CAAC,KAAK,UAAU,KAAK,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,0EAA0E,EAAE,CAAC;EAC5H,CAAC,KAAK,UAAU,KAAK,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,0HAA0H,EAAE,CAAC;AAC5K;EACA,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;EACtB,CAAC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC9B;EACA;EACA,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACrB;EACA;EACA,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;AAC7B;EACA;EACA,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;EACtB,CAAC,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC7B;EACA;EACA,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;EAClB,CAAC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;AACzB;EACA;EACA;EACA,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;EACxB,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC;AAC9B;EACA;EACA;EACA,CAAC,IAAI,CAAC,eAAe,GAAG,EAAE,QAAQ,CAAC;EACnC,CAAC,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;AACjC;EACA;EACA;EACA,CAAC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;EAC5B,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC3B;EACA;EACA;EACA,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;EACxB,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;AACtB;EACA;EACA,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;EAC1B,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;AACxB;EACA;EACA,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;EACvB,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;EACrB,CAAC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;EAChC,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;AACxB;EACA;EACA;EACA,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;EACzB,CAAC,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;AAC5B;EACA;EACA,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACxB;EACA;EACA,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACzD;EACA;EACA,CAAC,IAAI,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;AACnF;EACA;EACA,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;AAC5D;EACA;EACA,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;EACpC,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;EAC/C,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAC/B;EACA;EACA;EACA;AACA;EACA,CAAC,IAAI,CAAC,aAAa,GAAG,YAAY;AAClC;EACA,EAAE,OAAO,SAAS,CAAC,GAAG,CAAC;AACvB;EACA,EAAE,CAAC;AACH;EACA,CAAC,IAAI,CAAC,iBAAiB,GAAG,YAAY;AACtC;EACA,EAAE,OAAO,SAAS,CAAC,KAAK,CAAC;AACzB;EACA,EAAE,CAAC;AACH;EACA,CAAC,IAAI,CAAC,SAAS,GAAG,YAAY;AAC9B;EACA,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;EACrC,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;EAChD,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;AAClC;EACA,EAAE,CAAC;AACH;EACA,CAAC,IAAI,CAAC,KAAK,GAAG,YAAY;AAC1B;EACA,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;EACrC,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;EAChD,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;AAClC;EACA,EAAE,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;EACxC,EAAE,KAAK,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC;AACrC;EACA,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACjB;EACA,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACrB;EACA,EAAE,CAAC;AACH;EACA;EACA,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY;AAC3B;EACA,EAAE,IAAI,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;AAC7B;EACA;EACA,EAAE,IAAI,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC,kBAAkB,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;EACtF,EAAE,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC;AAC1C;EACA,EAAE,IAAI,YAAY,GAAG,IAAI,OAAO,EAAE,CAAC;EACnC,EAAE,IAAI,cAAc,GAAG,IAAI,UAAU,EAAE,CAAC;AACxC;EACA,EAAE,IAAI,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;AAC1B;EACA,EAAE,OAAO,SAAS,MAAM,GAAG;AAC3B;EACA,GAAG,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;AACxC;EACA,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAC/C;EACA;EACA,GAAG,MAAM,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;AAClC;EACA;EACA,GAAG,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;AACtC;EACA,GAAG,KAAK,KAAK,CAAC,UAAU,IAAI,KAAK,KAAK,KAAK,CAAC,IAAI,GAAG;AACnD;EACA,IAAI,UAAU,EAAE,oBAAoB,EAAE,EAAE,CAAC;AACzC;EACA,IAAI;AACJ;EACA,GAAG,KAAK,KAAK,CAAC,aAAa,GAAG;AAC9B;EACA,IAAI,SAAS,CAAC,KAAK,IAAI,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;EAClE,IAAI,SAAS,CAAC,GAAG,IAAI,cAAc,CAAC,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC;AAC9D;EACA,IAAI,MAAM;AACV;EACA,IAAI,SAAS,CAAC,KAAK,IAAI,cAAc,CAAC,KAAK,CAAC;EAC5C,IAAI,SAAS,CAAC,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC;AACxC;EACA,IAAI;AACJ;EACA;AACA;EACA,GAAG,IAAI,GAAG,GAAG,KAAK,CAAC,eAAe,CAAC;EACnC,GAAG,IAAI,GAAG,GAAG,KAAK,CAAC,eAAe,CAAC;AACnC;EACA,GAAG,KAAK,QAAQ,EAAE,GAAG,EAAE,IAAI,QAAQ,EAAE,GAAG,EAAE,GAAG;AAC7C;EACA,IAAI,KAAK,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC;AAChF;EACA,IAAI,KAAK,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC;AAChF;EACA,IAAI,KAAK,GAAG,IAAI,GAAG,GAAG;AACtB;EACA,KAAK,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;AACzE;EACA,KAAK,MAAM;AACX;EACA,KAAK,SAAS,CAAC,KAAK,GAAG,EAAE,SAAS,CAAC,KAAK,GAAG,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC;EAC5D,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE;EACtC,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;AACvC;EACA,KAAK;AACL;EACA,IAAI;AACJ;EACA;EACA,GAAG,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC;AACnG;EACA,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;AACxB;AACA;EACA,GAAG,SAAS,CAAC,MAAM,IAAI,KAAK,CAAC;AAC7B;EACA;EACA,GAAG,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;AACrG;EACA;AACA;EACA,GAAG,KAAK,KAAK,CAAC,aAAa,KAAK,IAAI,GAAG;AACvC;EACA,IAAI,KAAK,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC;AACnE;EACA,IAAI,MAAM;AACV;EACA,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC;AAClC;EACA,IAAI;AACJ;EACA,GAAG,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,CAAC;AACxC;EACA;EACA,GAAG,MAAM,CAAC,eAAe,EAAE,WAAW,EAAE,CAAC;AACzC;EACA,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC;AAC/C;EACA,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACvC;EACA,GAAG,KAAK,KAAK,CAAC,aAAa,KAAK,IAAI,GAAG;AACvC;EACA,IAAI,cAAc,CAAC,KAAK,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;EACxD,IAAI,cAAc,CAAC,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;AACtD;EACA,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;AACxD;EACA,IAAI,MAAM;AACV;EACA,IAAI,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAClC;EACA,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC7B;EACA,IAAI;AACJ;EACA,GAAG,KAAK,GAAG,CAAC,CAAC;AACb;EACA;EACA;EACA;AACA;EACA,GAAG,KAAK,WAAW;EACnB,IAAI,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,GAAG;EACjE,IAAI,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,GAAG,GAAG,GAAG;AACtE;EACA,IAAI,KAAK,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC;AACvC;EACA,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;EAC/C,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;EACnD,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB;EACA,IAAI,OAAO,IAAI,CAAC;AAChB;EACA,IAAI;AACJ;EACA,GAAG,OAAO,KAAK,CAAC;AAChB;EACA,GAAG,CAAC;AACJ;EACA,EAAE,EAAE,CAAC;AACL;EACA,CAAC,IAAI,CAAC,OAAO,GAAG,YAAY;AAC5B;EACA,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAC9E;EACA,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;EAC9E,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AACvE;EACA,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;EAC5E,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;EACxE,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAC1E;EACA,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;EAC5F,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACxF;EACA,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACtE;EACA;AACA;EACA,EAAE,CAAC;AACH;EACA;EACA;EACA;AACA;EACA,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC;AAClB;EACA,CAAC,IAAI,WAAW,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;EACtC,CAAC,IAAI,UAAU,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;EACpC,CAAC,IAAI,QAAQ,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAChC;EACA,CAAC,IAAI,KAAK,GAAG;EACb,EAAE,IAAI,EAAE,EAAE,CAAC;EACX,EAAE,MAAM,EAAE,CAAC;EACX,EAAE,KAAK,EAAE,CAAC;EACV,EAAE,GAAG,EAAE,CAAC;EACR,EAAE,YAAY,EAAE,CAAC;EACjB,EAAE,SAAS,EAAE,CAAC;EACd,EAAE,eAAe,EAAE,CAAC;EACpB,EAAE,kBAAkB,EAAE,CAAC;EACvB,EAAE,CAAC;AACH;EACA,CAAC,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACxB;EACA,CAAC,IAAI,GAAG,GAAG,QAAQ,CAAC;AACpB;EACA;EACA,CAAC,IAAI,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;EACjC,CAAC,IAAI,cAAc,GAAG,IAAI,SAAS,EAAE,CAAC;AACtC;EACA,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;EACf,CAAC,IAAI,SAAS,GAAG,IAAI,OAAO,EAAE,CAAC;EAC/B,CAAC,IAAI,WAAW,GAAG,KAAK,CAAC;AACzB;EACA,CAAC,IAAI,WAAW,GAAG,IAAI,OAAO,EAAE,CAAC;EACjC,CAAC,IAAI,SAAS,GAAG,IAAI,OAAO,EAAE,CAAC;EAC/B,CAAC,IAAI,WAAW,GAAG,IAAI,OAAO,EAAE,CAAC;AACjC;EACA,CAAC,IAAI,QAAQ,GAAG,IAAI,OAAO,EAAE,CAAC;EAC9B,CAAC,IAAI,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;EAC5B,CAAC,IAAI,QAAQ,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B;EACA,CAAC,IAAI,UAAU,GAAG,IAAI,OAAO,EAAE,CAAC;EAChC,CAAC,IAAI,QAAQ,GAAG,IAAI,OAAO,EAAE,CAAC;EAC9B,CAAC,IAAI,UAAU,GAAG,IAAI,OAAO,EAAE,CAAC;AAChC;EACA,CAAC,SAAS,oBAAoB,GAAG;AACjC;EACA,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC;AACvD;EACA,EAAE;AACF;EACA,CAAC,SAAS,YAAY,GAAG;AACzB;EACA,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;AAC3C;EACA,EAAE;AACF;EACA,CAAC,SAAS,UAAU,EAAE,KAAK,GAAG;AAC9B;EACA,EAAE,cAAc,CAAC,KAAK,IAAI,KAAK,CAAC;AAChC;EACA,EAAE;AACF;EACA,CAAC,SAAS,QAAQ,EAAE,KAAK,GAAG;AAC5B;EACA,EAAE,cAAc,CAAC,GAAG,IAAI,KAAK,CAAC;AAC9B;EACA,EAAE;AACF;EACA,CAAC,IAAI,OAAO,GAAG,YAAY;AAC3B;EACA,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;AACxB;EACA,EAAE,OAAO,SAAS,OAAO,EAAE,QAAQ,EAAE,YAAY,GAAG;AACpD;EACA,GAAG,CAAC,CAAC,mBAAmB,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;EAC5C,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC;AAClC;EACA,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;AACtB;EACA,GAAG,CAAC;AACJ;EACA,EAAE,EAAE,CAAC;AACL;EACA,CAAC,IAAI,KAAK,GAAG,YAAY;AACzB;EACA,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;AACxB;EACA,EAAE,OAAO,SAAS,KAAK,EAAE,QAAQ,EAAE,YAAY,GAAG;AAClD;EACA,GAAG,KAAK,KAAK,CAAC,kBAAkB,KAAK,IAAI,GAAG;AAC5C;EACA,IAAI,CAAC,CAAC,mBAAmB,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;AAC7C;EACA,IAAI,MAAM;AACV;EACA,IAAI,CAAC,CAAC,mBAAmB,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;EAC7C,IAAI,CAAC,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACzC;EACA,IAAI;AACJ;EACA,GAAG,CAAC,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAC;AAChC;EACA,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;AACtB;EACA,GAAG,CAAC;AACJ;EACA,EAAE,EAAE,CAAC;AACL;EACA;EACA,CAAC,IAAI,GAAG,GAAG,YAAY;AACvB;EACA,EAAE,IAAI,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;AAC7B;EACA,EAAE,OAAO,SAAS,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG;AACxC;EACA,GAAG,IAAI,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC;AAClC;EACA,GAAG,KAAK,KAAK,CAAC,MAAM,CAAC,mBAAmB,GAAG;AAC3C;EACA;EACA,IAAI,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;EACzC,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;EAChD,IAAI,IAAI,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACzC;EACA;EACA,IAAI,cAAc,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;AAC7E;EACA;EACA,IAAI,OAAO,EAAE,CAAC,GAAG,MAAM,GAAG,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;EACvF,IAAI,KAAK,EAAE,CAAC,GAAG,MAAM,GAAG,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACrF;EACA,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,oBAAoB,GAAG;AACnD;EACA;EACA,IAAI,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;EAClI,IAAI,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACjI;EACA,IAAI,MAAM;AACV;EACA;EACA,IAAI,OAAO,CAAC,IAAI,EAAE,8EAA8E,EAAE,CAAC;EACnG,IAAI,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;AAC5B;EACA,IAAI;AACJ;EACA,GAAG,CAAC;AACJ;EACA,EAAE,EAAE,CAAC;AACL;EACA,CAAC,SAAS,QAAQ,EAAE,UAAU,GAAG;AACjC;EACA,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,mBAAmB,GAAG;AAC1C;EACA,GAAG,KAAK,IAAI,UAAU,CAAC;AACvB;EACA,GAAG,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,oBAAoB,GAAG;AAClD;EACA,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,EAAE,EAAE,CAAC;EAC5G,GAAG,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;EACzC,GAAG,WAAW,GAAG,IAAI,CAAC;AACtB;EACA,GAAG,MAAM;AACT;EACA,GAAG,OAAO,CAAC,IAAI,EAAE,qFAAqF,EAAE,CAAC;EACzG,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;AAC5B;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,SAAS,OAAO,EAAE,UAAU,GAAG;AAChC;EACA,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,mBAAmB,GAAG;AAC1C;EACA,GAAG,KAAK,IAAI,UAAU,CAAC;AACvB;EACA,GAAG,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,oBAAoB,GAAG;AAClD;EACA,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,EAAE,EAAE,CAAC;EAC5G,GAAG,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;EACzC,GAAG,WAAW,GAAG,IAAI,CAAC;AACtB;EACA,GAAG,MAAM;AACT;EACA,GAAG,OAAO,CAAC,IAAI,EAAE,qFAAqF,EAAE,CAAC;EACzG,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;AAC5B;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA;EACA;EACA;AACA;EACA,CAAC,SAAS,qBAAqB,EAAE,KAAK,GAAG;AACzC;EACA,EAAE,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;AAClD;EACA,EAAE;AACF;EACA,CAAC,SAAS,oBAAoB,EAAE,KAAK,GAAG;AACxC;EACA,EAAE,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;AACjD;EACA,EAAE;AACF;EACA,CAAC,SAAS,kBAAkB,EAAE,KAAK,GAAG;AACtC;EACA,EAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;AAC/C;EACA,EAAE;AACF;EACA,CAAC,SAAS,qBAAqB,EAAE,KAAK,GAAG;AACzC;EACA,EAAE,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;AAChD;EACA,EAAE,WAAW,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;AACvF;EACA,EAAE,IAAI,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC;AACjC;EACA,EAAE,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;AACnE;EACA,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;AACjE;EACA,EAAE,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;AAChC;EACA,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACjB;EACA,EAAE;AACF;EACA,CAAC,SAAS,oBAAoB,EAAE,KAAK,GAAG;AACxC;EACA,EAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;AAC/C;EACA,EAAE,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAChD;EACA,EAAE,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG;AAC1B;EACA,GAAG,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC;AAC9B;EACA,GAAG,MAAM,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG;AACjC;EACA,GAAG,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC;AAC7B;EACA,GAAG;AACH;EACA,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC9B;EACA,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACjB;EACA,EAAE;AACF;EACA,CAAC,SAAS,kBAAkB,EAAE,KAAK,GAAG;AACtC;EACA,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;AAC7C;EACA,EAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC3E;EACA,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;AAChC;EACA,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1B;EACA,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACjB;EACA,EAAE;AAOF;EACA,CAAC,SAAS,gBAAgB,EAAE,KAAK,GAAG;AACpC;EACA,EAAE,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG;AAC1B;EACA,GAAG,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC;AAC7B;EACA,GAAG,MAAM,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG;AACjC;EACA,GAAG,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC;AAC9B;EACA,GAAG;AACH;EACA,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACjB;EACA,EAAE;AACF;EACA,CAAC,SAAS,aAAa,EAAE,KAAK,GAAG;AACjC;EACA,EAAE,IAAI,WAAW,GAAG,KAAK,CAAC;AAC1B;EACA,EAAE,SAAS,KAAK,CAAC,OAAO;AACxB;EACA,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE;EACrB,IAAI,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;EAChC,IAAI,WAAW,GAAG,IAAI,CAAC;EACvB,IAAI,MAAM;AACV;EACA,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM;EACzB,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;EAClC,IAAI,WAAW,GAAG,IAAI,CAAC;EACvB,IAAI,MAAM;AACV;EACA,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI;EACvB,IAAI,GAAG,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;EAChC,IAAI,WAAW,GAAG,IAAI,CAAC;EACvB,IAAI,MAAM;AACV;EACA,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK;EACxB,IAAI,GAAG,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;EAClC,IAAI,WAAW,GAAG,IAAI,CAAC;EACvB,IAAI,MAAM;AACV;EACA,GAAG;AACH;EACA,EAAE,KAAK,WAAW,GAAG;AACrB;EACA;EACA,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B;EACA,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;AAClB;EACA,GAAG;AACH;AACA;EACA,EAAE;AACF;EACA,CAAC,SAAS,sBAAsB,EAAE,KAAK,GAAG;AAC1C;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG;AACnC;EACA,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACzE;EACA,GAAG,MAAM;AACT;EACA,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;EACzE,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACzE;EACA,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3B;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,SAAS,mBAAmB,EAAE,KAAK,GAAG;AACvC;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG;AACnC;EACA,GAAG,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACtE;EACA,GAAG,MAAM;AACT;EACA,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;EACzE,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACzE;EACA,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACxB;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,SAAS,qBAAqB,EAAE,KAAK,GAAG;AACzC;EACA,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;EAC/D,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;AAC/D;EACA,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AAChD;EACA,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;AAChC;EACA,EAAE;AACF;EACA,CAAC,SAAS,wBAAwB,EAAE,KAAK,GAAG;AAC5C;EACA,EAAE,KAAK,KAAK,CAAC,UAAU,GAAG,qBAAqB,EAAE,KAAK,EAAE,CAAC;AACzD;EACA,EAAE,KAAK,KAAK,CAAC,SAAS,GAAG,mBAAmB,EAAE,KAAK,EAAE,CAAC;AACtD;EACA,EAAE;AACF;EACA,CAAC,SAAS,2BAA2B,EAAE,KAAK,GAAG;AAC/C;EACA,EAAE,KAAK,KAAK,CAAC,UAAU,GAAG,qBAAqB,EAAE,KAAK,EAAE,CAAC;AACzD;EACA,EAAE,KAAK,KAAK,CAAC,YAAY,GAAG,sBAAsB,EAAE,KAAK,EAAE,CAAC;AAC5D;EACA,EAAE;AACF;EACA,CAAC,SAAS,qBAAqB,EAAE,KAAK,GAAG;AACzC;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG;AACnC;EACA,GAAG,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACvE;EACA,GAAG,MAAM;AACT;EACA,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;EACzE,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACzE;EACA,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACzB;EACA,GAAG;AACH;EACA,EAAE,WAAW,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;AACvF;EACA,EAAE,IAAI,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC;AACjC;EACA,EAAE,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;AACnE;EACA,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;AACjE;EACA,EAAE,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;AAChC;EACA,EAAE;AACF;EACA,CAAC,SAAS,kBAAkB,EAAE,KAAK,GAAG;AACtC;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG;AACnC;EACA,GAAG,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACpE;EACA,GAAG,MAAM;AACT;EACA,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;EACzE,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACzE;EACA,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACtB;EACA,GAAG;AACH;EACA,EAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC3E;EACA,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;AAChC;EACA,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1B;EACA,EAAE;AACF;EACA,CAAC,SAAS,oBAAoB,EAAE,KAAK,GAAG;AACxC;EACA,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;EAC/D,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;AAC/D;EACA,EAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AAChD;EACA,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC9B;EACA,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;AAC9E;EACA,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;AAC3B;EACA,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC9B;EACA,EAAE;AACF;EACA,CAAC,SAAS,uBAAuB,EAAE,KAAK,GAAG;AAC3C;EACA,EAAE,KAAK,KAAK,CAAC,UAAU,GAAG,oBAAoB,EAAE,KAAK,EAAE,CAAC;AACxD;EACA,EAAE,KAAK,KAAK,CAAC,SAAS,GAAG,kBAAkB,EAAE,KAAK,EAAE,CAAC;AACrD;EACA,EAAE;AACF;EACA,CAAC,SAAS,0BAA0B,EAAE,KAAK,GAAG;AAC9C;EACA,EAAE,KAAK,KAAK,CAAC,UAAU,GAAG,oBAAoB,EAAE,KAAK,EAAE,CAAC;AACxD;EACA,EAAE,KAAK,KAAK,CAAC,YAAY,GAAG,qBAAqB,EAAE,KAAK,EAAE,CAAC;AAC3D;EACA,EAAE;AAOF;EACA;EACA;EACA;AACA;EACA,CAAC,SAAS,aAAa,EAAE,KAAK,GAAG;AACjC;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACxC;EACA,EAAE,SAAS,KAAK,CAAC,WAAW;AAC5B;EACA,GAAG,KAAK,OAAO,CAAC;EAChB,GAAG,KAAK,KAAK;EACb,IAAI,WAAW,EAAE,KAAK,EAAE,CAAC;EACzB,IAAI,MAAM;AACV;EACA;AACA;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,SAAS,aAAa,EAAE,KAAK,GAAG;AACjC;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACxC;EACA,EAAE,SAAS,KAAK,CAAC,WAAW;AAC5B;EACA,GAAG,KAAK,OAAO,CAAC;EAChB,GAAG,KAAK,KAAK;EACb,IAAI,WAAW,EAAE,KAAK,EAAE,CAAC;EACzB,IAAI,MAAM;AACV;EACA;AACA;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,SAAS,WAAW,EAAE,KAAK,GAAG;AAC/B;EACA,EAAE,SAAS,KAAK,CAAC,WAAW;AAC5B;EACA,GAAG,KAAK,OAAO,CAAC;EAChB,GAAG,KAAK,KAAK;EACb,IAAI,SAAS,CAAQ,CAAC,CAAC;EACvB,IAAI,MAAM;AACV;EACA;AACA;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,SAAS,WAAW,EAAE,KAAK,GAAG;AAC/B;EACA;EACA,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;AACzB;EACA;EACA;AACA;EACA,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AACrE;EACA,EAAE,IAAI,WAAW,CAAC;AAClB;EACA,EAAE,SAAS,KAAK,CAAC,MAAM;AACvB;EACA,GAAG,KAAK,CAAC;AACT;EACA,IAAI,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;EAC1C,IAAI,MAAM;AACV;EACA,GAAG,KAAK,CAAC;AACT;EACA,IAAI,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;EAC5C,IAAI,MAAM;AACV;EACA,GAAG,KAAK,CAAC;AACT;EACA,IAAI,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;EAC3C,IAAI,MAAM;AACV;EACA,GAAG;AACH;EACA,IAAI,WAAW,GAAG,EAAE,CAAC,CAAC;AACtB;EACA,GAAG;AACH;EACA,EAAE,SAAS,WAAW;AACtB;EACA,GAAG,KAAK,KAAK,CAAC,KAAK;AACnB;EACA,IAAI,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,GAAG,OAAO;AAC7C;EACA,IAAI,oBAAoB,EAAE,KAAK,EAAE,CAAC;AAClC;EACA,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AACxB;EACA,IAAI,MAAM;AACV;EACA,GAAG,KAAK,KAAK,CAAC,MAAM;AACpB;EACA,IAAI,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,GAAG;AAC5D;EACA,KAAK,KAAK,KAAK,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO;AAC7C;EACA,KAAK,kBAAkB,EAAE,KAAK,EAAE,CAAC;AACjC;EACA,KAAK,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AACvB;EACA,KAAK,MAAM;AACX;EACA,KAAK,KAAK,KAAK,CAAC,YAAY,KAAK,KAAK,GAAG,OAAO;AAChD;EACA,KAAK,qBAAqB,EAAE,KAAK,EAAE,CAAC;AACpC;EACA,KAAK,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;AAC1B;EACA,KAAK;AACL;EACA,IAAI,MAAM;AACV;EACA,GAAG,KAAK,KAAK,CAAC,GAAG;AACjB;EACA,IAAI,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,GAAG;AAC5D;EACA,KAAK,KAAK,KAAK,CAAC,YAAY,KAAK,KAAK,GAAG,OAAO;AAChD;EACA,KAAK,qBAAqB,EAAE,KAAK,EAAE,CAAC;AACpC;EACA,KAAK,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;AAC1B;EACA,KAAK,MAAM;AACX;EACA,KAAK,KAAK,KAAK,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO;AAC7C;EACA,KAAK,kBAAkB,EAAE,KAAK,EAAE,CAAC;AACjC;EACA,KAAK,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;AACvB;EACA,KAAK;AACL;EACA,IAAI,MAAM;AACV;EACA,GAAG;AACH;EACA,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACvB;EACA,GAAG;AACH;EACA,EAAE,KAAK,KAAK,KAAK,KAAK,CAAC,IAAI,GAAG;AAC9B;EACA,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;EAC1F,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACtF;EACA,GAAG,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;AACrC;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,SAAS,WAAW,EAAE,KAAK,GAAG;AAC/B;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACxC;EACA,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;AACzB;EACA,EAAE,SAAS,KAAK;AAChB;EACA,GAAG,KAAK,KAAK,CAAC,MAAM;AACpB;EACA,IAAI,KAAK,KAAK,CAAC,YAAY,KAAK,KAAK,GAAG,OAAO;AAC/C;EACA,IAAI,qBAAqB,EAAE,KAAK,EAAE,CAAC;AACnC;EACA,IAAI,MAAM;AACV;EACA,GAAG,KAAK,KAAK,CAAC,KAAK;AACnB;EACA,IAAI,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,GAAG,OAAO;AAC7C;EACA,IAAI,oBAAoB,EAAE,KAAK,EAAE,CAAC;AAClC;EACA,IAAI,MAAM;AACV;EACA,GAAG,KAAK,KAAK,CAAC,GAAG;AACjB;EACA,IAAI,KAAK,KAAK,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO;AAC5C;EACA,IAAI,kBAAkB,EAAE,KAAK,EAAE,CAAC;AAChC;EACA,IAAI,MAAM;AACV;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,SAAS,SAAS,EAAE,KAAK,GAAG;AAC7B;EACA,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;EAC5F,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACxF;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AAGxC;EACA,EAAE,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC;AAClC;EACA,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACrB;EACA,EAAE;AACF;EACA,CAAC,SAAS,YAAY,EAAE,KAAK,GAAG;AAChC;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE,GAAG,OAAO;AAC5H;EACA,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;EACzB,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;AAC1B;EACA,EAAE,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;AACpC;EACA,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;AAC5B;EACA,EAAE,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC;AAClC;EACA,EAAE;AACF;EACA,CAAC,SAAS,SAAS,EAAE,KAAK,GAAG;AAC7B;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO;AACnG;EACA,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AACzB;EACA,EAAE;AACF;EACA,CAAC,SAAS,YAAY,EAAE,KAAK,GAAG;AAChC;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACxC;EACA,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;AACzB;EACA,EAAE,SAAS,KAAK,CAAC,OAAO,CAAC,MAAM;AAC/B;EACA,GAAG,KAAK,CAAC;AACT;EACA,IAAI,SAAS,KAAK,CAAC,OAAO,CAAC,GAAG;AAC9B;EACA,KAAK,KAAK,KAAK,CAAC,MAAM;AACtB;EACA,MAAM,KAAK,KAAK,CAAC,YAAY,KAAK,KAAK,GAAG,OAAO;AACjD;EACA,MAAM,sBAAsB,EAAE,KAAK,EAAE,CAAC;AACtC;EACA,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC;AACjC;EACA,MAAM,MAAM;AACZ;EACA,KAAK,KAAK,KAAK,CAAC,GAAG;AACnB;EACA,MAAM,KAAK,KAAK,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO;AAC9C;EACA,MAAM,mBAAmB,EAAE,KAAK,EAAE,CAAC;AACnC;EACA,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC;AAC9B;EACA,MAAM,MAAM;AACZ;EACA,KAAK;AACL;EACA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACzB;EACA,KAAK;AACL;EACA,IAAI,MAAM;AACV;EACA,GAAG,KAAK,CAAC;AACT;EACA,IAAI,SAAS,KAAK,CAAC,OAAO,CAAC,GAAG;AAC9B;EACA,KAAK,KAAK,KAAK,CAAC,SAAS;AACzB;EACA,MAAM,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO;AAC5E;EACA,MAAM,wBAAwB,EAAE,KAAK,EAAE,CAAC;AACxC;EACA,MAAM,KAAK,GAAG,KAAK,CAAC,eAAe,CAAC;AACpC;EACA,MAAM,MAAM;AACZ;EACA,KAAK,KAAK,KAAK,CAAC,YAAY;AAC5B;EACA,MAAM,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,GAAG,OAAO;AAC/E;EACA,MAAM,2BAA2B,EAAE,KAAK,EAAE,CAAC;AAC3C;EACA,MAAM,KAAK,GAAG,KAAK,CAAC,kBAAkB,CAAC;AACvC;EACA,MAAM,MAAM;AACZ;EACA,KAAK;AACL;EACA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACzB;EACA,KAAK;AACL;EACA,IAAI,MAAM;AACV;EACA,GAAG;AACH;EACA,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACvB;EACA,GAAG;AACH;EACA,EAAE,KAAK,KAAK,KAAK,KAAK,CAAC,IAAI,GAAG;AAC9B;EACA,GAAG,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;AACrC;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,SAAS,WAAW,EAAE,KAAK,GAAG;AAC/B;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACxC;EACA,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;EACzB,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;AAC1B;EACA,EAAE,SAAS,KAAK;AAChB;EACA,GAAG,KAAK,KAAK,CAAC,YAAY;AAC1B;EACA,IAAI,KAAK,KAAK,CAAC,YAAY,KAAK,KAAK,GAAG,OAAO;AAC/C;EACA,IAAI,qBAAqB,EAAE,KAAK,EAAE,CAAC;AACnC;EACA,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;AACnB;EACA,IAAI,MAAM;AACV;EACA,GAAG,KAAK,KAAK,CAAC,SAAS;AACvB;EACA,IAAI,KAAK,KAAK,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO;AAC5C;EACA,IAAI,kBAAkB,EAAE,KAAK,EAAE,CAAC;AAChC;EACA,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;AACnB;EACA,IAAI,MAAM;AACV;EACA,GAAG,KAAK,KAAK,CAAC,eAAe;AAC7B;EACA,IAAI,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO;AAC1E;EACA,IAAI,uBAAuB,EAAE,KAAK,EAAE,CAAC;AACrC;EACA,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;AACnB;EACA,IAAI,MAAM;AACV;EACA,GAAG,KAAK,KAAK,CAAC,kBAAkB;AAChC;EACA,IAAI,KAAK,KAAK,CAAC,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,GAAG,OAAO;AAC7E;EACA,IAAI,0BAA0B,EAAE,KAAK,EAAE,CAAC;AACxC;EACA,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;AACnB;EACA,IAAI,MAAM;AACV;EACA,GAAG;AACH;EACA,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACvB;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,SAAS,UAAU,EAAE,KAAK,GAAG;AAC9B;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AAGxC;EACA,EAAE,KAAK,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC;AAClC;EACA,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;AACrB;EACA,EAAE;AACF;EACA,CAAC,SAAS,aAAa,EAAE,KAAK,GAAG;AACjC;EACA,EAAE,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;AACxC;EACA,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;AACzB;EACA,EAAE;AACF;EACA;AACA;EACA,CAAC,KAAK,CAAC,UAAU,CAAC,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAC1E;EACA,CAAC,KAAK,CAAC,UAAU,CAAC,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;EAC1E,CAAC,KAAK,CAAC,UAAU,CAAC,gBAAgB,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AACnE;EACA,CAAC,KAAK,CAAC,UAAU,CAAC,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;EACxE,CAAC,KAAK,CAAC,UAAU,CAAC,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;EACpE,CAAC,KAAK,CAAC,UAAU,CAAC,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACtE;EACA,CAAC,KAAK,CAAC,UAAU,CAAC,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAClE;EACA;AACA;EACA,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AACf;EACA,CAAC,CAAC;AACF;EACA,aAAa,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,SAAS,EAAE,CAAC;EACrE,aAAa,CAAC,SAAS,CAAC,WAAW,GAAG,aAAa,CAAC;AACpD;AACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA,IAAI,WAAW,GAAG,WAAW,MAAM,EAAE,UAAU,GAAG;AAClD;EACA,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAChD;EACA,CAAC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;AACjC;EACA,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC;EACpC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;AACxC;EACA,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;EAC9B,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC;AACvC;EACA,CAAC,CAAC;AACF;EACA,WAAW,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,SAAS,EAAE,CAAC;EACnE,WAAW,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW;;EC1rC/C,IAAI,WAAW,GAAG,WAAW,MAAM,EAAE,UAAU,GAAG;AAClD;EACA,CAAC,KAAK,UAAU,KAAK,SAAS,GAAG;AACjC;EACA,EAAE,OAAO,CAAC,IAAI,EAAE,wEAAwE,EAAE,CAAC;EAC3F,EAAE,UAAU,GAAG,QAAQ,CAAC;AACxB;EACA,EAAE;AACF;EACA,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;EACtB,CAAC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC9B;EACA,CAAC,KAAK,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC;AACnE;EACA;AACA;EACA,CAAC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;EAC1B,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACxB;EACA,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;EACzB,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAC1B;EACA;AACA;EACA;AACA;EACA,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC;EAClB,CAAC,IAAI,WAAW,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;EACtC,CAAC,IAAI,GAAG,GAAG,QAAQ,CAAC;AACpB;EACA,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,UAAU,EAAE,CAAC;AACvC;EACA,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACtB;EACA,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;EAC3J,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EAC1C,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9C;EACA,CAAC,IAAI,CAAC,OAAO,GAAG,WAAW,KAAK,GAAG;AACnC;EACA,EAAE,KAAK,KAAK,CAAC,MAAM,GAAG;AACtB;EACA,GAAG,OAAO;AACV;EACA,GAAG;AACH;EACA;AACA;EACA,EAAE,SAAS,KAAK,CAAC,OAAO;AACxB;EACA,GAAG,KAAK,EAAE,cAAc,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC,MAAM;AACjE;EACA,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM;EACpD,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;AACjD;EACA,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;EACjD,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM;AAClD;EACA,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM;EAC/C,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;AACjD;EACA,GAAG,KAAK,EAAE,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM;EACrD,GAAG,KAAK,EAAE,WAAW,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM;AACzD;EACA,GAAG,KAAK,EAAE,WAAW,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM;EACvD,GAAG,KAAK,EAAE,YAAY,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM;AACzD;EACA,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM;EACrD,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM;AACtD;EACA,GAAG;AACH;EACA,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;EAC9B,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC9B;EACA,EAAE,CAAC;AACH;EACA,CAAC,IAAI,CAAC,KAAK,GAAG,WAAW,KAAK,GAAG;AACjC;EACA,EAAE,SAAS,KAAK,CAAC,OAAO;AACxB;EACA,GAAG,KAAK,EAAE,cAAc,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC,CAAC,MAAM;AAChE;EACA,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM;EACpD,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;AACjD;EACA,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;EACjD,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM;AAClD;EACA,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM;EAC/C,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;AACjD;EACA,GAAG,KAAK,EAAE,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM;EACrD,GAAG,KAAK,EAAE,WAAW,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM;AACzD;EACA,GAAG,KAAK,EAAE,WAAW,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM;EACvD,GAAG,KAAK,EAAE,YAAY,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM;AACzD;EACA,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,MAAM;EACrD,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM;AACtD;EACA,GAAG;AACH;EACA,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;EAC9B,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC9B;EACA,EAAE,CAAC;AACH;EACA,CAAC,IAAI,CAAC,SAAS,GAAG,WAAW,KAAK,GAAG;AACrC;EACA,EAAE,KAAK,IAAI,CAAC,UAAU,KAAK,QAAQ,GAAG;AACtC;EACA,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AAC3B;EACA,GAAG;AACH;EACA,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;EACzB,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;AAC1B;EACA,EAAE,KAAK,IAAI,CAAC,UAAU,GAAG;AACzB;EACA,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC;AACvB;EACA,GAAG,MAAM;AACT;EACA,GAAG,SAAS,KAAK,CAAC,MAAM;AACxB;EACA,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM;EAC9C,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;AAC3C;EACA,IAAI;AACJ;EACA,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC/B;EACA,GAAG;AACH;EACA,EAAE,CAAC;AACH;EACA,CAAC,IAAI,CAAC,SAAS,GAAG,WAAW,KAAK,GAAG;AACrC;EACA,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG;AACnD;EACA,GAAG,IAAI,SAAS,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;EACjD,GAAG,IAAI,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;EAC3C,GAAG,IAAI,UAAU,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAC5C;EACA,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,SAAS,EAAE,GAAG,SAAS,CAAC;EAClG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,EAAE,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,UAAU,KAAK,UAAU,CAAC;AACpG;EACA,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC/B;EACA,GAAG;AACH;EACA,EAAE,CAAC;AACH;EACA,CAAC,IAAI,CAAC,OAAO,GAAG,WAAW,KAAK,GAAG;AACnC;EACA,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;EACzB,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;AAC1B;EACA,EAAE,KAAK,IAAI,CAAC,UAAU,GAAG;AACzB;EACA,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC;AACvB;EACA,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;AACzD;EACA,GAAG,MAAM;AACT;EACA,GAAG,SAAS,KAAK,CAAC,MAAM;AACxB;EACA,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM;EAC9C,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;AAC3C;EACA,IAAI;AACJ;EACA,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC/B;EACA,GAAG;AACH;EACA,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC9B;EACA,EAAE,CAAC;AACH;EACA,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY;AAC3B;EACA,EAAE,IAAI,cAAc,GAAG,IAAI,UAAU,EAAE,CAAC;EACxC,EAAE,IAAI,YAAY,GAAG,IAAI,OAAO,EAAE,CAAC;AACnC;EACA,EAAE,OAAO,WAAW,KAAK,GAAG;AAC5B;EACA,GAAG,IAAI,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;EAC9C,GAAG,IAAI,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC;AACzC;EACA,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC;EAC5D,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC;EAC5D,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC;AAC5D;EACA,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;EAClJ,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC;AAC3D;EACA,GAAG;EACH,IAAI,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,GAAG;EACjE,IAAI,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,GAAG,GAAG;EACnE,KAAK;AACL;EACA,IAAI,KAAK,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC;EACvC,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;EACnD,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC/C;EACA,IAAI;AACJ;EACA,GAAG,CAAC;AACJ;EACA,EAAE,EAAE,CAAC;AACL;EACA,CAAC,IAAI,CAAC,oBAAoB,GAAG,YAAY;AACzC;EACA,EAAE,IAAI,OAAO,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,MAAM,IAAI,CAAC,WAAW,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AACpG;EACA,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;EACvE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;EACpE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AAC1D;EACA;AACA;EACA,EAAE,CAAC;AACH;EACA,CAAC,IAAI,CAAC,oBAAoB,GAAG,YAAY;AACzC;EACA,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;EAClF,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;EACjF,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AACnF;EACA;AACA;EACA,EAAE,CAAC;AACH;EACA,CAAC,IAAI,CAAC,sBAAsB,GAAG,YAAY;AAC3C;EACA,EAAE,KAAK,IAAI,CAAC,UAAU,IAAI,QAAQ,GAAG;AACrC;EACA,GAAG,OAAO;EACV,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;EACvE,IAAI,MAAM,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;EACrE,IAAI,CAAC;AACL;EACA,GAAG,MAAM;AACT;EACA,GAAG,OAAO;EACV,IAAI,IAAI,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE;EACnD,IAAI,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;EACpB,IAAI,CAAC;AACL;EACA,GAAG;AACH;EACA,EAAE,CAAC;AACH;EACA,CAAC,SAAS,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG;AAC5B;EACA,EAAE,OAAO,YAAY;AACrB;EACA,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAChC;EACA,GAAG,CAAC;AACJ;EACA,EAAE;AACF;EACA,CAAC,SAAS,WAAW,EAAE,KAAK,GAAG;AAC/B;EACA,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;AACzB;EACA,EAAE;AACF;EACA,CAAC,IAAI,CAAC,OAAO,GAAG,YAAY;AAC5B;EACA,EAAE,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;EAC3E,EAAE,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;EACxE,EAAE,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;EACxE,EAAE,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACpE;EACA,EAAE,MAAM,CAAC,mBAAmB,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;EAC3D,EAAE,MAAM,CAAC,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACvD;EACA,EAAE,CAAC;AACH;EACA,CAAC,IAAI,UAAU,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;EAC/C,CAAC,IAAI,UAAU,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;EAC/C,CAAC,IAAI,QAAQ,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;EAC3C,CAAC,IAAI,QAAQ,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;EAC3C,CAAC,IAAI,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACvC;EACA,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACvE;EACA,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;EACpE,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;EACpE,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAChE;EACA,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;EACvD,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACnD;EACA,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;EAC7B,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC7B;EACA,CAAC,CAAC;AACF;EACA,WAAW,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,SAAS,EAAE,CAAC;EACnE,WAAW,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW;;ECxT/C;EACA;EACA;AACA;EACA,IAAI,UAAU,GAAG;AACjB;EACA,CAAC,QAAQ,EAAE;AACX;EACA,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;EAC7B,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;AAC3B;EACA,EAAE;AACF;EACA,CAAC,YAAY,EAAE;AACf;EACA,EAAE,mBAAmB;AACrB;EACA,EAAE,eAAe;AACjB;EACA,EAAE,YAAY;EACd,EAAE,4EAA4E;AAC9E;EACA,EAAE,GAAG;AACL;EACA,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE;AACf;EACA,CAAC,cAAc,EAAE;AACjB;EACA,EAAE,wBAAwB;AAC1B;EACA,EAAE,6BAA6B;AAC/B;EACA,EAAE,mBAAmB;AACrB;EACA,EAAE,eAAe;AACjB;EACA,EAAE,2CAA2C;EAC7C,EAAE,kCAAkC;AACpC;EACA,EAAE,GAAG;AACL;EACA,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE;AACf;EACA,CAAC;;ECrCD,SAASC,MAAI,GAAG;AAChB;EACA;EACA,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACrB;EACA;EACA,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACvB;EACA;EACA,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACpB;EACA;EACA,CAAC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC7B;EACA,CAAC;AACD;EACA,MAAM,CAAC,MAAM,EAAEA,MAAI,CAAC,SAAS,EAAE;AAC/B;EACA,CAAC,OAAO,EAAE,iCAAiC,EAAE;AAC7C;EACA,CAAC,MAAM,EAAE,4EAA4E;AACrF;EACA,EAAE,OAAO,CAAC,KAAK,EAAE,4DAA4D,EAAE,CAAC;AAChF;EACA,EAAE;AACF;EACA,CAAC,EAAE,CAAC;AACJ;EACA;AACA;EACA;EACA;EACA;AACA;AACAA,QAAI,CAAC,cAAc,GAAG,EAAE,YAAY;AACpC;EACA,CAAC,IAAI,MAAM,GAAG,IAAI,kBAAkB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EAC7D,CAAC,IAAI,QAAQ,GAAG,IAAI,mBAAmB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAChD;EACA,CAAC,IAAI,cAAc,GAAG,WAAW,QAAQ,GAAG;AAC5C;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAC9C;EACA,EAAE,CAAC;AACH;EACA,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE;AAC9D;EACA,EAAE,GAAG,EAAE,YAAY;AACnB;EACA,GAAG,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC9B;EACA,GAAG;AACH;EACA,EAAE,GAAG,EAAE,WAAW,KAAK,GAAG;AAC1B;EACA,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC/B;EACA,GAAG;AACH;EACA,EAAE,EAAE,CAAC;AACL;EACA,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,SAAS,EAAE;AAC1C;EACA,EAAE,OAAO,EAAE,YAAY;AACvB;EACA,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AACjC;EACA,GAAG;AACH;EACA,EAAE,MAAM,EAAE,WAAW,QAAQ,GAAG;AAChC;EACA,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;AACzC;EACA,GAAG;AACH;EACA,EAAE,EAAE,CAAC;AACL;EACA,CAAC,OAAO,cAAc,CAAC;AACvB;EACA,CAAC,IAAI;;EC/EL,IAAI,UAAU,GAAG,WAAW,MAAM,EAAE,SAAS,GAAG;AAChD;EACA,CAACA,MAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;AACnB;EACA,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,SAAS,KAAK,SAAS,KAAK,SAAS,GAAG,UAAU,CAAC;AACvE;EACA,CAAC,KAAK,MAAM,YAAY,cAAc,GAAG;AACzC;EACA,EAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAClC;EACA,EAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;AACzB;EACA,EAAE,MAAM,KAAK,MAAM,GAAG;AACtB;EACA,EAAE,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;AACzD;EACA,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE;AACtC;EACA,GAAG,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE;EAC/C,GAAG,QAAQ,EAAE,IAAI,CAAC,QAAQ;EAC1B,GAAG,YAAY,EAAE,MAAM,CAAC,YAAY;EACpC,GAAG,cAAc,EAAE,MAAM,CAAC,cAAc;AACxC;EACA,GAAG,EAAE,CAAC;AACN;EACA,EAAE;AACF;EACA,CAAC,IAAI,CAAC,MAAM,GAAG,IAAIA,MAAI,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AACxD;EACA,CAAC,CAAC;AACF;EACA,UAAU,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAEA,MAAI,CAAC,SAAS,EAAE,EAAE;AACvE;EACA,CAAC,WAAW,EAAE,UAAU;AACxB;EACA,CAAC,MAAM,EAAE,WAAW,QAAQ,EAAE,WAAW,EAAE,UAAU,gCAAgC;AACrF;EACA,EAAE,KAAK,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG;AACzC;EACA,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC;AAC9D;EACA,GAAG;AACH;EACA,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACvC;EACA,EAAE,KAAK,IAAI,CAAC,cAAc,GAAG;AAC7B;EACA,GAAG,QAAQ,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;EACpC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;AAClC;EACA,GAAG,MAAM;AACT;EACA,GAAG,QAAQ,CAAC,eAAe,EAAE,WAAW,EAAE,CAAC;EAC3C;EACA,GAAG,KAAK,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,gBAAgB,EAAE,CAAC;EACnH,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;AAClC;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,EAAE;;ECjEH,IAAI,QAAQ,GAAG,WAAW,KAAK,EAAE,MAAM,GAAG;AAC1C;EACA,CAACA,MAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;AACnB;EACA,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;EACpB,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACtB;EACA,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;EACnB,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACxB;EACA,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACtB;EACA,CAAC,CAAC;AACF;EACA,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAEA,MAAI,CAAC,SAAS,EAAE,EAAE;AACrE;EACA,CAAC,WAAW,EAAE,QAAQ;AACtB;EACA,CAAC,MAAM,EAAE,WAAW,QAAQ,EAAE,WAAW,EAAE,UAAU,gCAAgC;AACrF;EACA,EAAE,IAAI,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;EACtC,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC7B;EACA;AACA;EACA,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;EACvC,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;AACvC;EACA;AACA;EACA,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;EACxC,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;AACxC;EACA;AACA;EACA,EAAE,IAAI,UAAU,EAAE,UAAU,CAAC;AAC7B;EACA,EAAE,KAAK,IAAI,CAAC,OAAO,GAAG;AACtB;EACA,GAAG,UAAU,GAAG,CAAC,CAAC;EAClB,GAAG,UAAU,GAAG,CAAC,CAAC;AAClB;EACA,GAAG,MAAM;AACT;EACA,GAAG,UAAU,GAAG,CAAC,CAAC;EAClB,GAAG,UAAU,GAAG,CAAC,CAAC;AAClB;EACA,GAAG;AACH;EACA,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;EACxC,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;EACnF,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;EAC1E,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC;EAC/C,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;AAC1C;EACA;AACA;EACA,EAAE,QAAQ,CAAC,eAAe,EAAE,UAAU,EAAE,CAAC;EACzC,EAAE,KAAK,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;EACrC,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7C;EACA,EAAE,QAAQ,CAAC,eAAe,EAAE,WAAW,EAAE,CAAC;EAC1C,EAAE,KAAK,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;EACrC,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7C;EACA;AACA;EACA,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;EACzC,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;AACzC;EACA;AACA;EACA,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;EAC3C,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;EAChE,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;EAC1E,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;AAC1C;EACA,EAAE;AACF;EACA,CAAC,EAAE,CAAC;AACJ;AACA;EACA,IAAI,aAAa,GAAG,YAAY;AAChC;EACA,CAACA,MAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;AACnB;EACA,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACxB;EACA,CAAC,CAAC;AACF;EACA,aAAa,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAEA,MAAI,CAAC,SAAS,EAAE,CAAC;AAC1D;EACA,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,EAAE;AACxC;EACA,CAAC,MAAM,EAAE,WAAW,QAAQ,yDAAyD;AACrF;EACA,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;EACpD,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;AAClD;EACA,EAAE;AACF;EACA,CAAC,EAAE;;ECxFH,IAAI,cAAc,GAAG,WAAW,QAAQ,EAAE,YAAY,GAAG;AACzD;EACA,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC1B;EACA,CAAC,KAAK,YAAY,KAAK,SAAS,GAAG;AACnC;EACA,EAAE,IAAI,UAAU,GAAG;EACnB,GAAG,SAAS,EAAE,YAAY;EAC1B,GAAG,SAAS,EAAE,YAAY;EAC1B,GAAG,MAAM,EAAE,UAAU;EACrB,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,OAAO,EAAE,EAAE,CAAC;EAC/C,EAAE,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;EAC9C,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;EAC3B,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7B;EACA,EAAE,YAAY,GAAG,IAAI,iBAAiB,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC;EACtH,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,GAAG,oBAAoB,CAAC;AACnD;EACA,EAAE,MAAM;AACR;EACA,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;EACvB,EAAE,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;EACnC,EAAE,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC;AACrC;EACA,EAAE;AACF;EACA,CAAC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;EACnC,CAAC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;EAC3C,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,GAAG,oBAAoB,CAAC;AACxD;EACA,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;EACvC,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;AACtC;EACA,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC5B;EACA,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AAClB;EACA;AACA;EACA,CAAC,KAAK,UAAU,KAAK,SAAS,GAAG;AACjC;EACA,EAAE,OAAO,CAAC,KAAK,EAAE,2CAA2C,EAAE,CAAC;AAC/D;EACA,EAAE;AACF;EACA,CAAC,KAAK,UAAU,KAAK,SAAS,GAAG;AACjC;EACA,EAAE,OAAO,CAAC,KAAK,EAAE,2CAA2C,EAAE,CAAC;AAC/D;EACA,EAAE;AACF;EACA,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,UAAU,EAAE,UAAU,EAAE,CAAC;AAC9C;EACA,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAC1B;EACA,CAAC,CAAC;AACF;EACA,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,SAAS,EAAE;AACzC;EACA,CAAC,WAAW,EAAE,YAAY;AAC1B;EACA,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;EAC5B,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;EACrC,EAAE,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;AACzB;EACA,EAAE;AACF;EACA,CAAC,OAAO,EAAE,WAAW,IAAI,GAAG;AAC5B;EACA,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;EAC3B,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAClF;EACA,EAAE;AACF;EACA,CAAC,UAAU,EAAE,WAAW,IAAI,EAAE,KAAK,GAAG;AACtC;EACA,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;EACvC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAClF;EACA,EAAE;AACF;EACA,CAAC,UAAU,EAAE,WAAW,IAAI,GAAG;AAC/B;EACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;AAC5C;EACA,EAAE,KAAK,KAAK,KAAK,EAAE,CAAC,GAAG;AACvB;EACA,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAClC;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,iBAAiB,EAAE,WAAW,SAAS,GAAG;AAC3C;EACA,EAAE,MAAM,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG;AAC9D;EACA,GAAG,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,GAAG;AACnC;EACA,IAAI,OAAO,KAAK,CAAC;AACjB;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;AACd;EACA,EAAE;AACF;EACA,CAAC,MAAM,EAAE,WAAW,SAAS,GAAG;AAChC;EACA;AACA;EACA,EAAE,KAAK,SAAS,KAAK,SAAS,GAAG;AACjC;EACA,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AACrC;EACA,GAAG;AACH;EACA,EAAE,IAAI,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;AAC5D;EACA,EAAE,IAAI,UAAU,GAAG,KAAK,CAAC;AACzB;EACA,EAAE,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AACvC;EACA,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG;AAC9B;EACA,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;AAC3B;EACA,GAAG,KAAK,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,SAAS;AAC1C;EACA,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAE,CAAC;EAChF,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AAC1F;EACA,GAAG,KAAK,IAAI,CAAC,SAAS,GAAG;AACzB;EACA,IAAI,KAAK,UAAU,GAAG;AACtB;EACA,KAAK,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;EAC9C,KAAK,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;AACvD;EACA;EACA,KAAK,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;AACxD;EACA,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC;AACzF;EACA;EACA,KAAK,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;AACrD;EACA,KAAK;AACL;EACA,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;AACvB;EACA,IAAI;AACJ;EACA,GAAG,KAAK,QAAQ,KAAK,SAAS,GAAG;AACjC;EACA,IAAI,KAAK,IAAI,YAAY,QAAQ,GAAG;AACpC;EACA,KAAK,UAAU,GAAG,IAAI,CAAC;AACvB;EACA,KAAK,MAAM,KAAK,IAAI,YAAY,aAAa,GAAG;AAChD;EACA,KAAK,UAAU,GAAG,KAAK,CAAC;AACxB;EACA,KAAK;AACL;EACA,IAAI;AACJ;EACA,GAAG;AACH;EACA,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,mBAAmB,EAAE,CAAC;AACvD;EACA,EAAE;AACF;EACA,CAAC,KAAK,EAAE,WAAW,YAAY,GAAG;AAClC;EACA,EAAE,KAAK,YAAY,KAAK,SAAS,GAAG;AACpC;EACA,GAAG,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,OAAO,EAAE,EAAE,CAAC;EACrD,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;EACpD,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;EAC5B,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;AAC9B;EACA,GAAG,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;EAC7C,GAAG,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAC3F;EACA,GAAG;AACH;EACA,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;EAC/B,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;EAC/B,EAAE,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;EACpC,EAAE,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;AAC5C;EACA,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;EACxC,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;AACvC;EACA,EAAE;AACF;EACA,CAAC,OAAO,EAAE,WAAW,KAAK,EAAE,MAAM,GAAG;AACrC;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;EACtB,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AACxB;EACA,EAAE,IAAI,cAAc,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;EACtD,EAAE,IAAI,eAAe,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;AACxD;EACA,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;EAChE,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;AAChE;EACA,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG;AAClD;EACA,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;AAC/D;EACA,GAAG;AACH;EACA,EAAE;AACF;EACA,CAAC,aAAa,EAAE,WAAW,UAAU,GAAG;AACxC;EACA,EAAE,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;AAChC;EACA,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AAC5C;EACA,EAAE;AACF;EACA,CAAC,EAAE,CAAC;AACJ;AACA;EACA,IAAI,IAAI,GAAG,YAAY;AACvB;EACA;EACA,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACrB;EACA;EACA,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACvB;EACA;EACA,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACpB;EACA;EACA,CAAC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC7B;EACA,CAAC,CAAC;AACF;EACA,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE;AAC/B;EACA,CAAC,OAAO,EAAE,iCAAiC,EAAE;AAC7C;EACA,CAAC,MAAM,EAAE,4EAA4E;AACrF;EACA,EAAE,OAAO,CAAC,KAAK,EAAE,4DAA4D,EAAE,CAAC;AAChF;EACA,EAAE;AACF;EACA,CAAC,EAAE,CAAC;AACJ;EACA;EACA,IAAI,CAAC,cAAc,GAAG,EAAE,YAAY;AACpC;EACA,CAAC,IAAI,MAAM,GAAG,IAAI,kBAAkB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EAC7D,CAAC,IAAI,QAAQ,GAAG,IAAI,mBAAmB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAChD;EACA,CAAC,IAAI,cAAc,GAAG,WAAW,QAAQ,GAAG;AAC5C;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAC9C;EACA,EAAE,CAAC;AACH;EACA,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE;AAC9D;EACA,EAAE,GAAG,EAAE,YAAY;AACnB;EACA,GAAG,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC9B;EACA,GAAG;AACH;EACA,EAAE,GAAG,EAAE,WAAW,KAAK,GAAG;AAC1B;EACA,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC/B;EACA,GAAG;AACH;EACA,EAAE,EAAE,CAAC;AACL;EACA,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,SAAS,EAAE;AAC1C;EACA,EAAE,OAAO,EAAE,YAAY;AACvB;EACA,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AACjC;EACA,GAAG;AACH;EACA,EAAE,MAAM,EAAE,WAAW,QAAQ,GAAG;AAChC;EACA,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;AACzC;EACA,GAAG;AACH;EACA,EAAE,EAAE,CAAC;AACL;EACA,CAAC,OAAO,cAAc,CAAC;AACvB;EACA,CAAC,IAAI;;EC9TL,IAAI,UAAU,GAAG,WAAW,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,GAAG;AACtF;EACA,CAACA,MAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;AACnB;EACA,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;EACpB,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACtB;EACA,CAAC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AAC1C;EACA,CAAC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;EAC9B,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,UAAU,KAAK,SAAS,KAAK,UAAU,GAAG,CAAC,CAAC;AACjE;EACA,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;EACnB,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;EACzB,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACxB;EACA,CAAC,CAAC;AACF;EACA,UAAU,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAEA,MAAI,CAAC,SAAS,EAAE,EAAE;AACvE;EACA,CAAC,WAAW,EAAE,UAAU;AACxB;EACA,CAAC,MAAM,EAAE,WAAW,QAAQ,EAAE,WAAW,EAAE,UAAU,gCAAgC;AACrF;EACA,EAAE,IAAI,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC;EACxC,EAAE,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC;AAC7B;EACA,EAAE,IAAI,aAAa,EAAE,aAAa,EAAE,mBAAmB,CAAC;AACxD;EACA,EAAE,KAAK,IAAI,CAAC,gBAAgB,KAAK,SAAS,GAAG;AAC7C;EACA,GAAG,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;AACrD;EACA,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACvD;EACA,GAAG;AACH;EACA,EAAE,KAAK,IAAI,CAAC,UAAU,GAAG;AACzB;EACA,GAAG,aAAa,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,CAAC;EACrD,GAAG,aAAa,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;AAC5C;EACA,GAAG,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AAC9D;EACA,GAAG;AACH;EACA,EAAE,KAAK,IAAI,CAAC,UAAU,GAAG;AACzB;EACA,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;AACzB;EACA,GAAG;AACH;EACA,EAAE,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,UAAU,EAAE,CAAC;AACtE;EACA;EACA,EAAE,KAAK,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,gBAAgB,EAAE,CAAC;EAClH,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7C;EACA,EAAE,KAAK,IAAI,CAAC,UAAU,GAAG;AACzB;EACA,GAAG,QAAQ,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;AAC1D;EACA,GAAG;AACH;EACA,EAAE,KAAK,IAAI,CAAC,gBAAgB,KAAK,SAAS,GAAG;AAC7C;EACA,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,mBAAmB,CAAC;AACrD;EACA,GAAG;AACH;EACA,EAAE,QAAQ,CAAC,SAAS,GAAG,YAAY,CAAC;AACpC;EACA,EAAE;AACF;EACA,CAAC,EAAE;;EC5EY,SAAS,QAAQ,GAAG;EACnC,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,IAAI,UAAU,MAAM,EAAE;EAChD,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC/C,MAAM,IAAI,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChC;EACA,MAAM,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;EAC9B,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;EAC/D,UAAU,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;EACpC,SAAS;EACT,OAAO;EACP,KAAK;AACL;EACA,IAAI,OAAO,MAAM,CAAC;EAClB,GAAG,CAAC;AACJ;EACA,EAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;EACzC;;EChBe,SAAS,sBAAsB,CAAC,IAAI,EAAE;EACrD,EAAE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE;EACvB,IAAI,MAAM,IAAI,cAAc,CAAC,2DAA2D,CAAC,CAAC;EAC1F,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd;;ECNe,SAAS,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE;EAC9C,EAAE,eAAe,GAAG,MAAM,CAAC,cAAc,IAAI,SAAS,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE;EAC5E,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;EACpB,IAAI,OAAO,CAAC,CAAC;EACb,GAAG,CAAC;AACJ;EACA,EAAE,OAAO,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAC/B;;ECNe,SAAS,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE;EAC7D,EAAE,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;EAC3D,EAAE,QAAQ,CAAC,SAAS,CAAC,WAAW,GAAG,QAAQ,CAAC;EAC5C,EAAEC,eAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;EACvC;;ECLe,SAAS,eAAe,CAAC,CAAC,EAAE;EAC3C,EAAE,eAAe,GAAG,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,GAAG,SAAS,eAAe,CAAC,CAAC,EAAE;EAChG,IAAI,OAAO,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;EACnD,GAAG,CAAC;EACJ,EAAE,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC;EAC5B;;ECLe,SAAS,iBAAiB,CAAC,EAAE,EAAE;EAC9C,EAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;EACpE;;ECFe,SAAS,yBAAyB,GAAG;EACpD,EAAE,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,KAAK,CAAC;EACzE,EAAE,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC;EAC3C,EAAE,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,OAAO,IAAI,CAAC;AAC/C;EACA,EAAE,IAAI;EACN,IAAI,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;EACnF,IAAI,OAAO,IAAI,CAAC;EAChB,GAAG,CAAC,OAAO,CAAC,EAAE;EACd,IAAI,OAAO,KAAK,CAAC;EACjB,GAAG;EACH;;ECTe,SAAS,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;EACxD,EAAE,IAAIC,yBAAwB,EAAE,EAAE;EAClC,IAAI,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;EACnC,GAAG,MAAM;EACT,IAAI,UAAU,GAAG,SAAS,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;EAC1D,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;EACrB,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;EAC5B,MAAM,IAAI,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;EACvD,MAAM,IAAI,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;EACvC,MAAM,IAAI,KAAK,EAAED,eAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;EAC3D,MAAM,OAAO,QAAQ,CAAC;EACtB,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;EAC3C;;ECbe,SAAS,gBAAgB,CAAC,KAAK,EAAE;EAChD,EAAE,IAAI,MAAM,GAAG,OAAO,GAAG,KAAK,UAAU,GAAG,IAAI,GAAG,EAAE,GAAG,SAAS,CAAC;AACjE;EACA,EAAE,gBAAgB,GAAG,SAAS,gBAAgB,CAAC,KAAK,EAAE;EACtD,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAACE,iBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;AACjE;EACA,IAAI,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;EACrC,MAAM,MAAM,IAAI,SAAS,CAAC,oDAAoD,CAAC,CAAC;EAChF,KAAK;AACL;EACA,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;EACvC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACtD;EACA,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;EACjC,KAAK;AACL;EACA,IAAI,SAAS,OAAO,GAAG;EACvB,MAAM,OAAOC,UAAS,CAAC,KAAK,EAAE,SAAS,EAAEC,eAAc,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC;EAC3E,KAAK;AACL;EACA,IAAI,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE;EACvD,MAAM,WAAW,EAAE;EACnB,QAAQ,KAAK,EAAE,OAAO;EACtB,QAAQ,UAAU,EAAE,KAAK;EACzB,QAAQ,QAAQ,EAAE,IAAI;EACtB,QAAQ,YAAY,EAAE,IAAI;EAC1B,OAAO;EACP,KAAK,CAAC,CAAC;EACP,IAAI,OAAOJ,eAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EAC1C,GAAG,CAAC;AACJ;EACA,EAAE,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;EACjC;;ECyIA;AACA;EACA;EACA;EACA;EACA;EACA,IAAI,MAAM,GAAG;EACb,EAAE,GAAG,EAAE,mKAAmK;EAC1K,EAAE,GAAG,EAAE,sLAAsL;EAC7L,EAAE,GAAG,EAAE,uGAAuG;EAC9G,EAAE,GAAG,EAAE,iEAAiE;EACxE,EAAE,GAAG,EAAE,oHAAoH;EAC3H,EAAE,GAAG,EAAE,uJAAuJ;EAC9J,EAAE,GAAG,EAAE,2KAA2K;EAClL,EAAE,GAAG,EAAE,gHAAgH;EACvH,EAAE,GAAG,EAAE,kEAAkE;EACzE,EAAE,IAAI,EAAE,mGAAmG;EAC3G,EAAE,IAAI,EAAE,+FAA+F;EACvG,EAAE,IAAI,EAAE,8GAA8G;EACtH,EAAE,IAAI,EAAE,+GAA+G;EACvH,EAAE,IAAI,EAAE,2FAA2F;EACnG,EAAE,IAAI,EAAE,0FAA0F;EAClG,EAAE,IAAI,EAAE,iDAAiD;EACzD,EAAE,IAAI,EAAE,8DAA8D;EACtE,EAAE,IAAI,EAAE,0FAA0F;EAClG,EAAE,IAAI,EAAE,sFAAsF;EAC9F,EAAE,IAAI,EAAE,2GAA2G;EACnH,EAAE,IAAI,EAAE,8GAA8G;EACtH,EAAE,IAAI,EAAE,gGAAgG;EACxG,EAAE,IAAI,EAAE,+CAA+C;EACvD,EAAE,IAAI,EAAE,qFAAqF;EAC7F,EAAE,IAAI,EAAE,iDAAiD;EACzD,EAAE,IAAI,EAAE,kDAAkD;EAC1D,EAAE,IAAI,EAAE,wEAAwE;EAChF,EAAE,IAAI,EAAE,sEAAsE;EAC9E,EAAE,IAAI,EAAE,8FAA8F;EACtG,EAAE,IAAI,EAAE,wFAAwF;EAChG,EAAE,IAAI,EAAE,yHAAyH;EACjI,EAAE,IAAI,EAAE,gNAAgN;EACxN,EAAE,IAAI,EAAE,kIAAkI;EAC1I,EAAE,IAAI,EAAE,uFAAuF;EAC/F,EAAE,IAAI,EAAE,mGAAmG;EAC3G,EAAE,IAAI,EAAE,sCAAsC;EAC9C,EAAE,IAAI,EAAE,yBAAyB;EACjC,EAAE,IAAI,EAAE,+DAA+D;EACvE,EAAE,IAAI,EAAE,mDAAmD;EAC3D,EAAE,IAAI,EAAE,qDAAqD;EAC7D,EAAE,IAAI,EAAE,qEAAqE;EAC7E,EAAE,IAAI,EAAE,kEAAkE;EAC1E,EAAE,IAAI,EAAE,mGAAmG;EAC3G,EAAE,IAAI,EAAE,gGAAgG;EACxG,EAAE,IAAI,EAAE,8FAA8F;EACtG,EAAE,IAAI,EAAE,8FAA8F;EACtG,EAAE,IAAI,EAAE,0FAA0F;EAClG,EAAE,IAAI,EAAE,sFAAsF;EAC9F,EAAE,IAAI,EAAE,2GAA2G;EACnH,EAAE,IAAI,EAAE,wGAAwG;EAChH,EAAE,IAAI,EAAE,0FAA0F;EAClG,EAAE,IAAI,EAAE,qFAAqF;EAC7F,EAAE,IAAI,EAAE,iDAAiD;EACzD,EAAE,IAAI,EAAE,kDAAkD;EAC1D,EAAE,IAAI,EAAE,+CAA+C;EACvD,EAAE,IAAI,EAAE,wEAAwE;EAChF,EAAE,IAAI,EAAE,wEAAwE;EAChF,EAAE,IAAI,EAAE,sEAAsE;EAC9E,EAAE,IAAI,EAAE,8FAA8F;EACtG,EAAE,IAAI,EAAE,wFAAwF;EAChG,EAAE,IAAI,EAAE,sCAAsC;EAC9C,EAAE,IAAI,EAAE,uFAAuF;EAC/F,EAAE,IAAI,EAAE,mGAAmG;EAC3G,EAAE,IAAI,EAAE,0HAA0H;EAClI,EAAE,IAAI,EAAE,kNAAkN;EAC1N,EAAE,IAAI,EAAE,mIAAmI;EAC3I,EAAE,IAAI,EAAE,iDAAiD;EACzD,EAAE,IAAI,EAAE,8DAA8D;EACtE,EAAE,IAAI,EAAE,0GAA0G;EAClH,EAAE,IAAI,EAAE,2GAA2G;EACnH,EAAE,IAAI,EAAE,qFAAqF;EAC7F,EAAE,IAAI,EAAE,oFAAoF;EAC5F,EAAE,IAAI,EAAE,0CAA0C;EAClD,EAAE,IAAI,EAAE,yDAAyD;EACjE,EAAE,IAAI,EAAE,gEAAgE;EACxE,EAAE,IAAI,EAAE,iHAAiH;EACzH,EAAE,IAAI,EAAE,uEAAuE;EAC/E,EAAE,IAAI,EAAE,iEAAiE;EACzE,CAAC,CAAC;EACF;EACA;EACA;EACA;AACA;EACA,SAAS,MAAM,GAAG;EAClB,EAAE,KAAK,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE;EAC3F,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;EACjC,GAAG;AACH;EACA,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EAClB,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;EACb,EAAE,IAAI,CAAC,CAAC;AACR;EACA,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;EACvC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;EACpB,GAAG;AACH;EACA,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;EACzB,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;EAC/B,GAAG,CAAC,CAAC;EACL,EAAE,OAAO,CAAC,CAAC;EACX,CAAC;EACD;EACA;EACA;EACA;EACA;AACA;AACA;EACA,IAAI,aAAa,gBAAgB,UAAU,MAAM,EAAE;EACnD,EAAE,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AACxC;EACA,EAAE,SAAS,aAAa,CAAC,IAAI,EAAE;EAC/B,IAAI,IAAI,KAAK,CAAC;AACd;EACA,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE;EAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,+GAA+G,GAAG,IAAI,GAAG,wBAAwB,CAAC,IAAI,IAAI,CAAC;EAC3L,KAAK,MAAM;EACX,MAAM,KAAK,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE;EACzH,QAAQ,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;EAC3C,OAAO;AACP;EACA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;EAC3F,KAAK;AACL;EACA,IAAI,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;EACzC,GAAG;AACH;EACA,EAAE,OAAO,aAAa,CAAC;EACvB,CAAC,eAAe,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;AA+tDzC;EACA,SAAS,UAAU,CAAC,KAAK,EAAE;EAC3B,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;EACjC,CAAC;AACD;EACA,SAAS,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;EACxC,EAAE,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;EAC5E,CAAC;AACD;EACA,SAAS,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE;EACvD,EAAE,IAAI,OAAO,KAAK,KAAK,CAAC,EAAE;EAC1B,IAAI,OAAO,GAAG,YAAY,CAAC;EAC3B,GAAG;AACH;EACA,EAAE,IAAI,UAAU,KAAK,CAAC,EAAE;EACxB;EACA,IAAI,OAAO,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;EACpD,GAAG;AACH;AACA;EACA,EAAE,IAAI,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC;EAC9C,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC;EAC9D,EAAE,IAAI,eAAe,GAAG,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAClE,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC;EACd,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;EAChB,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC;AACf;EACA,EAAE,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;EACrC,IAAI,GAAG,GAAG,MAAM,CAAC;EACjB,IAAI,KAAK,GAAG,eAAe,CAAC;EAC5B,GAAG,MAAM,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;EAC5C,IAAI,GAAG,GAAG,eAAe,CAAC;EAC1B,IAAI,KAAK,GAAG,MAAM,CAAC;EACnB,GAAG,MAAM,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;EAC5C,IAAI,KAAK,GAAG,MAAM,CAAC;EACnB,IAAI,IAAI,GAAG,eAAe,CAAC;EAC3B,GAAG,MAAM,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;EAC5C,IAAI,KAAK,GAAG,eAAe,CAAC;EAC5B,IAAI,IAAI,GAAG,MAAM,CAAC;EAClB,GAAG,MAAM,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;EAC5C,IAAI,GAAG,GAAG,eAAe,CAAC;EAC1B,IAAI,IAAI,GAAG,MAAM,CAAC;EAClB,GAAG,MAAM,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;EAC5C,IAAI,GAAG,GAAG,MAAM,CAAC;EACjB,IAAI,IAAI,GAAG,eAAe,CAAC;EAC3B,GAAG;AACH;EACA,EAAE,IAAI,qBAAqB,GAAG,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC;EACrD,EAAE,IAAI,QAAQ,GAAG,GAAG,GAAG,qBAAqB,CAAC;EAC7C,EAAE,IAAI,UAAU,GAAG,KAAK,GAAG,qBAAqB,CAAC;EACjD,EAAE,IAAI,SAAS,GAAG,IAAI,GAAG,qBAAqB,CAAC;EAC/C,EAAE,OAAO,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;EAClD,CAAC;AACD;EACA,IAAI,aAAa,GAAG;EACpB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,YAAY,EAAE,QAAQ;EACxB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,KAAK,EAAE,KAAK;EACd,EAAE,cAAc,EAAE,QAAQ;EAC1B,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,cAAc,EAAE,QAAQ;EAC1B,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,OAAO,EAAE,QAAQ;EACnB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,cAAc,EAAE,QAAQ;EAC1B,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,OAAO,EAAE,QAAQ;EACnB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,YAAY,EAAE,QAAQ;EACxB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,OAAO,EAAE,QAAQ;EACnB,EAAE,OAAO,EAAE,QAAQ;EACnB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,OAAO,EAAE,QAAQ;EACnB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,OAAO,EAAE,QAAQ;EACnB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,YAAY,EAAE,QAAQ;EACxB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,oBAAoB,EAAE,QAAQ;EAChC,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,YAAY,EAAE,QAAQ;EACxB,EAAE,cAAc,EAAE,KAAK;EACvB,EAAE,cAAc,EAAE,KAAK;EACvB,EAAE,cAAc,EAAE,QAAQ;EAC1B,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,IAAI,EAAE,KAAK;EACb,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,OAAO,EAAE,KAAK;EAChB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,gBAAgB,EAAE,QAAQ;EAC5B,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,YAAY,EAAE,QAAQ;EACxB,EAAE,YAAY,EAAE,QAAQ;EACxB,EAAE,cAAc,EAAE,QAAQ;EAC1B,EAAE,eAAe,EAAE,QAAQ;EAC3B,EAAE,iBAAiB,EAAE,QAAQ;EAC7B,EAAE,eAAe,EAAE,QAAQ;EAC3B,EAAE,eAAe,EAAE,QAAQ;EAC3B,EAAE,YAAY,EAAE,QAAQ;EACxB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,OAAO,EAAE,QAAQ;EACnB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,aAAa,EAAE,QAAQ;EACzB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,aAAa,EAAE,KAAK;EACtB,EAAE,GAAG,EAAE,KAAK;EACZ,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,OAAO,EAAE,QAAQ;EACnB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,WAAW,EAAE,QAAQ;EACvB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,GAAG,EAAE,QAAQ;EACf,EAAE,IAAI,EAAE,QAAQ;EAChB,EAAE,OAAO,EAAE,QAAQ;EACnB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,SAAS,EAAE,QAAQ;EACrB,EAAE,MAAM,EAAE,QAAQ;EAClB,EAAE,KAAK,EAAE,QAAQ;EACjB,EAAE,KAAK,EAAE,KAAK;EACd,EAAE,UAAU,EAAE,QAAQ;EACtB,EAAE,MAAM,EAAE,KAAK;EACf,EAAE,WAAW,EAAE,QAAQ;EACvB,CAAC,CAAC;EACF;EACA;EACA;EACA;AACA;EACA,SAAS,SAAS,CAAC,KAAK,EAAE;EAC1B,EAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,OAAO,KAAK,CAAC;EAC9C,EAAE,IAAI,mBAAmB,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;EAChD,EAAE,OAAO,aAAa,CAAC,mBAAmB,CAAC,GAAG,GAAG,GAAG,aAAa,CAAC,mBAAmB,CAAC,GAAG,KAAK,CAAC;EAC/F,CAAC;AACD;EACA,IAAI,QAAQ,GAAG,mBAAmB,CAAC;EACnC,IAAI,YAAY,GAAG,mBAAmB,CAAC;EACvC,IAAI,eAAe,GAAG,mBAAmB,CAAC;EAC1C,IAAI,mBAAmB,GAAG,mBAAmB,CAAC;EAC9C,IAAI,QAAQ,GAAG,2DAA2D,CAAC;EAC3E,IAAI,SAAS,GAAG,0FAA0F,CAAC;EAC3G,IAAI,QAAQ,GAAG,2FAA2F,CAAC;EAC3G,IAAI,SAAS,GAAG,0HAA0H,CAAC;EAC3I;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA,SAAS,UAAU,CAAC,KAAK,EAAE;EAC3B,EAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;EACjC,IAAI,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;EAC/B,GAAG;AACH;EACA,EAAE,IAAI,eAAe,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AACzC;EACA,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;EACvC,IAAI,OAAO;EACX,MAAM,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACrE,MAAM,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACvE,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACtE,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;EAC3C,IAAI,IAAI,KAAK,GAAG,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;EAC1G,IAAI,OAAO;EACX,MAAM,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACrE,MAAM,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACvE,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACtE,MAAM,KAAK,EAAE,KAAK;EAClB,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE;EAC9C,IAAI,OAAO;EACX,MAAM,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACrE,MAAM,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACvE,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACtE,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE;EAClD,IAAI,IAAI,MAAM,GAAG,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3G;EACA,IAAI,OAAO;EACX,MAAM,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACrE,MAAM,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACvE,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACtE,MAAM,KAAK,EAAE,MAAM;EACnB,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,IAAI,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAClD;EACA,EAAE,IAAI,UAAU,EAAE;EAClB,IAAI,OAAO;EACX,MAAM,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC3C,MAAM,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC7C,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC5C,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,IAAI,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACrE;EACA,EAAE,IAAI,WAAW,EAAE;EACnB,IAAI,OAAO;EACX,MAAM,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC5C,MAAM,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC9C,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC7C,MAAM,KAAK,EAAE,UAAU,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;EAC5C,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,IAAI,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAClD;EACA,EAAE,IAAI,UAAU,EAAE;EAClB,IAAI,IAAI,GAAG,GAAG,QAAQ,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;EAC/C,IAAI,IAAI,UAAU,GAAG,QAAQ,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;EAC5D,IAAI,IAAI,SAAS,GAAG,QAAQ,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3D,IAAI,IAAI,cAAc,GAAG,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC;EAC7E,IAAI,IAAI,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACtD;EACA,IAAI,IAAI,CAAC,aAAa,EAAE;EACxB,MAAM,MAAM,IAAI,aAAa,CAAC,CAAC,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;EAClE,KAAK;AACL;EACA,IAAI,OAAO;EACX,MAAM,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC9C,MAAM,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAChD,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC/C,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,IAAI,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACrE;EACA,EAAE,IAAI,WAAW,EAAE;EACnB,IAAI,IAAI,IAAI,GAAG,QAAQ,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACjD;EACA,IAAI,IAAI,WAAW,GAAG,QAAQ,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;AAC9D;EACA,IAAI,IAAI,UAAU,GAAG,QAAQ,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;AAC7D;EACA,IAAI,IAAI,eAAe,GAAG,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC;AACjF;EACA,IAAI,IAAI,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACxD;EACA,IAAI,IAAI,CAAC,cAAc,EAAE;EACzB,MAAM,MAAM,IAAI,aAAa,CAAC,CAAC,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC;EACnE,KAAK;AACL;EACA,IAAI,OAAO;EACX,MAAM,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC/C,MAAM,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EACjD,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAChD,MAAM,KAAK,EAAE,UAAU,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;EAC5C,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;EAC7B,CAAC;AAkFD;EACA;EACA;EACA;EACA;EACA,IAAI,cAAc,GAAG,SAAS,cAAc,CAAC,KAAK,EAAE;EACpD,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE;EACrG,IAAI,OAAO,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAChD,GAAG;AACH;EACA,EAAE,OAAO,KAAK,CAAC;EACf,CAAC,CAAC;AACF;EACA,SAAS,WAAW,CAAC,KAAK,EAAE;EAC5B,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;EAC/B,EAAE,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAC5C,CAAC;AAkFD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;EACjC,EAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;EAC1F,IAAI,OAAO,cAAc,CAAC,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;EAC7F,GAAG,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE;EACrF,IAAI,OAAO,cAAc,CAAC,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;EAC7G,GAAG;AACH;EACA,EAAE,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;EAC7B,CAAC;AACD;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,SAAS,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE;EAChE,EAAE,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;EACzE,IAAI,IAAI,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;EAC1C,IAAI,OAAO,OAAO,GAAG,QAAQ,CAAC,GAAG,GAAG,GAAG,GAAG,QAAQ,CAAC,KAAK,GAAG,GAAG,GAAG,QAAQ,CAAC,IAAI,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,CAAC;EACzG,GAAG,MAAM,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;EACrJ,IAAI,OAAO,WAAW,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,GAAG,OAAO,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,CAAC;EAC/J,GAAG,MAAM,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,WAAW,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE;EACnI,IAAI,OAAO,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,UAAU,CAAC,GAAG,GAAG,GAAG,GAAG,UAAU,CAAC,KAAK,GAAG,GAAG,GAAG,UAAU,CAAC,IAAI,GAAG,GAAG,GAAG,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC;EACrM,GAAG;AACH;EACA,EAAE,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;EAC7B,CAAC;AAyDD;EACA;EACA;EACA;EACA;EACA,SAAS,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE;EACjC,EAAE,OAAO,SAAS,EAAE,GAAG;EACvB;EACA,IAAI,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;EACrE,IAAI,OAAO,QAAQ,CAAC,MAAM,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;EAC9F,GAAG,CAAC;EACJ,CAAC;AACD;AACA;EACA,SAAS,KAAK,CAAC,CAAC,EAAE;EAClB;EACA,EAAE,OAAO,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;EAClC,CAAC;AAsED;EACA,SAAS,KAAK,CAAC,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE;EACpD,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;EACjE,CAAC;AAyWD;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;EACA,SAAS,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE;EAChC,EAAE,IAAI,KAAK,KAAK,aAAa,EAAE,OAAO,KAAK,CAAC;EAC5C,EAAE,IAAI,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;EACtC,EAAE,IAAI,KAAK,GAAG,OAAO,WAAW,CAAC,KAAK,KAAK,QAAQ,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC;AAC5E;EACA,EAAE,IAAI,cAAc,GAAG,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE;EACjD,IAAI,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC;EACtE,GAAG,CAAC,CAAC;AACL;EACA,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC;EAC9B,CAAC;AACD;AACA;EACA,IAAI,cAAc,gBAAgB,KAAK;EACvC;EACA,CAAC,OAAO,CAAC;;ECzpGT;EACA;EACA;EACA,IAAI,MAAM,GAAG;EACb,IAAI,MAAM,EAAE;EACZ,QAAQ,IAAI,EAAE,UAAU,MAAM,EAAE;EAChC,YAAY,OAAO,MAAM,CAAC;EAC1B,SAAS;EACT,KAAK;EACL,IAAI,SAAS,EAAE;EACf,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,OAAO,MAAM,GAAG,MAAM,CAAC;EACnC,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,OAAO,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;EACzC,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;EACnC,gBAAgB,OAAO,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC;EAC7C,aAAa;EACb,YAAY,OAAO,CAAC,GAAG,IAAI,EAAE,MAAM,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EACxD,SAAS;EACT,KAAK;EACL,IAAI,KAAK,EAAE;EACX,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,OAAO,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EAC5C,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;EAClD,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;EACnC,gBAAgB,OAAO,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EACtD,aAAa;EACb,YAAY,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;EAC/D,SAAS;EACT,KAAK;EACL,IAAI,OAAO,EAAE;EACb,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,OAAO,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EACrD,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EAC3D,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;EACnC,gBAAgB,OAAO,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EAC/D,aAAa;EACb,YAAY,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;EACzE,SAAS;EACT,KAAK;EACL,IAAI,OAAO,EAAE;EACb,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,OAAO,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EAC9D,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;EACpE,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;EACnC,gBAAgB,OAAO,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EACxE,aAAa;EACb,YAAY,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;EACjF,SAAS;EACT,KAAK;EACL,IAAI,UAAU,EAAE;EAChB,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;EACxD,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;EACpD,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;EAC1D,SAAS;EACT,KAAK;EACL,IAAI,WAAW,EAAE;EACjB,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,OAAO,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;EACjE,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,OAAO,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;EACpE,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE;EAC9B,gBAAgB,OAAO,CAAC,CAAC;EACzB,aAAa;EACb,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE;EAC9B,gBAAgB,OAAO,CAAC,CAAC;EACzB,aAAa;EACb,YAAY,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;EACnC,gBAAgB,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;EACxD,aAAa;EACb,YAAY,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EAChE,SAAS;EACT,KAAK;EACL,IAAI,QAAQ,EAAE;EACd,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;EACtD,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;EACpD,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;EACnC,gBAAgB,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;EACnE,aAAa;EACb,YAAY,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;EACrE,SAAS;EACT,KAAK;EACL,IAAI,OAAO,EAAE;EACb,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE;EAC9B,gBAAgB,OAAO,CAAC,CAAC;EACzB,aAAa;EACb,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE;EAC9B,gBAAgB,OAAO,CAAC,CAAC;EACzB,aAAa;EACb,YAAY,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;EAC5F,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE;EAC9B,gBAAgB,OAAO,CAAC,CAAC;EACzB,aAAa;EACb,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE;EAC9B,gBAAgB,OAAO,CAAC,CAAC;EACzB,aAAa;EACb,YAAY,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EAC1F,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE;EAC9B,gBAAgB,OAAO,CAAC,CAAC;EACzB,aAAa;EACb,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE;EAC9B,gBAAgB,OAAO,CAAC,CAAC;EACzB,aAAa;EACb,YAAY,MAAM,IAAI,CAAC,CAAC;EACxB,YAAY,IAAI,MAAM,GAAG,CAAC,EAAE;EAC5B,gBAAgB,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;EACtG,aAAa;EACb,YAAY,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EACtG,SAAS;EACT,KAAK;EACL,IAAI,IAAI,EAAE;EACV,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,IAAI,CAAC,GAAG,OAAO,CAAC;EAC5B,YAAY,OAAO,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;EAC5D,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,IAAI,CAAC,GAAG,OAAO,CAAC;EAC5B,YAAY,OAAO,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;EAClE,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,IAAI,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC;EACpC,YAAY,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;EACnC,gBAAgB,OAAO,GAAG,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;EACxE,aAAa;EACb,YAAY,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EAC/E,SAAS;EACT,KAAK;EACL,IAAI,MAAM,EAAE;EACZ,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE;EAC9B,YAAY,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;EACrD,SAAS;EACT,QAAQ,GAAG,EAAE,UAAU,MAAM,EAAE;EAC/B,YAAY,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE;EACnC,gBAAgB,OAAO,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EAChD,aAAa;EACb,iBAAiB,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE;EACxC,gBAAgB,OAAO,MAAM,IAAI,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;EACvE,aAAa;EACb,iBAAiB,IAAI,MAAM,GAAG,GAAG,GAAG,IAAI,EAAE;EAC1C,gBAAgB,OAAO,MAAM,IAAI,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC;EAC1E,aAAa;EACb,iBAAiB;EACjB,gBAAgB,OAAO,MAAM,IAAI,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,QAAQ,CAAC;EAC7E,aAAa;EACb,SAAS;EACT,QAAQ,KAAK,EAAE,UAAU,MAAM,EAAE;EACjC,YAAY,IAAI,MAAM,GAAG,GAAG,EAAE;EAC9B,gBAAgB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1D,aAAa;EACb,YAAY,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;EACjE,SAAS;EACT,KAAK;EACL,CAAC,CAAC;AACF;EACA,IAAI,GAAG,CAAC;EACR;EACA;EACA;EACA;EACA,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE;EACrF,IAAI,GAAG,GAAG,YAAY;EACtB;EACA;EACA,QAAQ,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;EACpC;EACA,QAAQ,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;EAClD,KAAK,CAAC;EACN,CAAC;EACD;EACA,KAAK,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,KAAK,SAAS,EAAE;EAC9G;EACA;EACA,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;EACtD,CAAC;EACD;EACA,KAAK,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;EACjC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;EACnB,CAAC;EACD;EACA,KAAK;EACL,IAAI,GAAG,GAAG,YAAY;EACtB,QAAQ,OAAO,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;EACpC,KAAK,CAAC;EACN,CAAC;EACD,IAAI,KAAK,GAAG,GAAG,CAAC;AAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,KAAK,kBAAkB,YAAY;EACvC,IAAI,SAAS,KAAK,GAAG;EACrB,QAAQ,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;EAC1B,QAAQ,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;EAC3C,KAAK;EACL,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,YAAY;EACzC,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC;EACzB,QAAQ,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE;EAChE,YAAY,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;EAC1C,SAAS,CAAC,CAAC;EACX,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,GAAG,YAAY;EAC5C,QAAQ,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;EAC1B,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,UAAU,KAAK,EAAE;EAC3C,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;EAC5C,QAAQ,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;EAC7D,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,KAAK,EAAE;EAC9C,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;EAC3C,QAAQ,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;EAC5D,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,IAAI,EAAE,QAAQ,EAAE;EACvD,QAAQ,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,EAAE;EAChD,QAAQ,IAAI,QAAQ,KAAK,KAAK,CAAC,EAAE,EAAE,QAAQ,GAAG,KAAK,CAAC,EAAE;EACtD,QAAQ,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;EACjD,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;EACnC,YAAY,OAAO,KAAK,CAAC;EACzB,SAAS;EACT;EACA;EACA;EACA;EACA;EACA,QAAQ,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;EACpC,YAAY,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;EAC/C,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EACtD,gBAAgB,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;EACtD,gBAAgB,IAAI,SAAS,GAAG,CAAC,QAAQ,CAAC;EAC1C,gBAAgB,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE;EACnF,oBAAoB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;EACrD,iBAAiB;EACjB,aAAa;EACb,YAAY,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;EAClE,SAAS;EACT,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,OAAO,KAAK,CAAC;EACjB,CAAC,EAAE,CAAC,CAAC;AACL;EACA;EACA;EACA;EACA,IAAI,aAAa,GAAG;EACpB,IAAI,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE;EAC5B,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;EAC7B,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACtB,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC9B,QAAQ,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;EAC5C,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE;EACnB,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACrC,SAAS;EACT,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE;EACnB,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;EAC7C,SAAS;EACT,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;EACzD,KAAK;EACL,IAAI,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE;EAC5B,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC;EAClB,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;EAC7B,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;EAC1B,QAAQ,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;EAC/C,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;EACrC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAC/D,SAAS;EACT,QAAQ,OAAO,CAAC,CAAC;EACjB,KAAK;EACL,IAAI,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE;EAChC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;EAC7B,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACtB,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC9B,QAAQ,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC;EAChD,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;EAC3B,YAAY,IAAI,CAAC,GAAG,CAAC,EAAE;EACvB,gBAAgB,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;EAClD,aAAa;EACb,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;EACvF,SAAS;EACT,aAAa;EACb,YAAY,IAAI,CAAC,GAAG,CAAC,EAAE;EACvB,gBAAgB,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACtE,aAAa;EACb,YAAY,IAAI,CAAC,GAAG,CAAC,EAAE;EACvB,gBAAgB,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACjF,aAAa;EACb,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;EACzG,SAAS;EACT,KAAK;EACL,IAAI,KAAK,EAAE;EACX,QAAQ,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;EACrC,YAAY,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;EACtC,SAAS;EACT,QAAQ,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE;EACnC,YAAY,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;EACnD,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EAC7C,SAAS;EACT,QAAQ,SAAS,EAAE,CAAC,YAAY;EAChC,YAAY,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EACxB,YAAY,OAAO,UAAU,CAAC,EAAE;EAChC,gBAAgB,IAAI,CAAC,GAAG,CAAC,CAAC;EAC1B,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;EAC1B,oBAAoB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;EAChC,iBAAiB;EACjB,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;EAC5C,oBAAoB,CAAC,IAAI,CAAC,CAAC;EAC3B,iBAAiB;EACjB,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACzB,gBAAgB,OAAO,CAAC,CAAC;EACzB,aAAa,CAAC;EACd,SAAS,GAAG;EACZ,QAAQ,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;EACjD,YAAY,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC;EACrC,YAAY,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC;EACrC,YAAY,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;EAC3B,YAAY,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;EAC5B,YAAY,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;EAC1G,SAAS;EACT,KAAK;EACL,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA,IAAI,QAAQ,kBAAkB,YAAY;EAC1C,IAAI,SAAS,QAAQ,GAAG;EACxB,KAAK;EACL,IAAI,QAAQ,CAAC,MAAM,GAAG,YAAY;EAClC,QAAQ,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC;EAClC,KAAK,CAAC;EACN,IAAI,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;EACzB,IAAI,OAAO,QAAQ,CAAC;EACpB,CAAC,EAAE,CAAC,CAAC;AACL;EACA,IAAI,SAAS,GAAG,IAAI,KAAK,EAAE,CAAC;AAC5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,KAAK,kBAAkB,YAAY;EACvC,IAAI,SAAS,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE;EACpC,QAAQ,IAAI,MAAM,KAAK,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE;EACtD,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;EAC/B,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;EAC7B,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;EAC/B,QAAQ,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;EAC7B,QAAQ,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;EAC/B,QAAQ,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;EAC7B,QAAQ,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;EACrC,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;EAC9B,QAAQ,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;EAChC,QAAQ,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;EACzB,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;EAC3B,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;EAChC,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;EAC/B,QAAQ,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;EAC5B,QAAQ,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;EAC5B,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;EAClD,QAAQ,IAAI,CAAC,sBAAsB,GAAG,aAAa,CAAC,MAAM,CAAC;EAC3D,QAAQ,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;EACjC,QAAQ,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;EAC3C,QAAQ,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;EACrC,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;EACrC,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;EAC9B,KAAK;EACL,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,YAAY;EACxC,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC;EACxB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,GAAG,YAAY;EAC5C,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC;EAC/B,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,YAAY;EAC3C,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC;EAC9B,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,UAAU,UAAU,EAAE,QAAQ,EAAE;EACzD;EACA;EACA;EACA;EACA,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;EACpD,QAAQ,IAAI,QAAQ,KAAK,SAAS,EAAE;EACpC,YAAY,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;EACtC,SAAS;EACT,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAU,CAAC,EAAE;EAC5C,QAAQ,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;EAC3B,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE;EAC5C,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;EAC7B,YAAY,OAAO,IAAI,CAAC;EACxB,SAAS;EACT;EACA,QAAQ,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;EAC7C,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC;EAC3C,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;EAC5B;EACA;EACA,YAAY,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;EACnC,YAAY,KAAK,IAAI,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE;EAC1D,gBAAgB,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;EACzD,gBAAgB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;EAChF,aAAa;EACb,SAAS;EACT,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;EAC/B,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;EAC/B,QAAQ,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;EAC3C,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;EACrC,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,KAAK,QAAQ,GAAG,KAAK,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;EACxH,QAAQ,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;EAC3C,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;EACzG,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,UAAU,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE;EACxG,QAAQ,KAAK,IAAI,QAAQ,IAAI,UAAU,EAAE;EACzC,YAAY,IAAI,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;EAC/C,YAAY,IAAI,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;EAC9D,YAAY,IAAI,QAAQ,GAAG,iBAAiB,GAAG,OAAO,GAAG,OAAO,UAAU,CAAC;EAC3E,YAAY,IAAI,mBAAmB,GAAG,CAAC,iBAAiB,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;EAChG;EACA;EACA,YAAY,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,UAAU,EAAE;EACrE,gBAAgB,SAAS;EACzB,aAAa;EACb;EACA,YAAY,IAAI,mBAAmB,EAAE;EACrC,gBAAgB,IAAI,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;EACrD,gBAAgB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;EAC5C,oBAAoB,SAAS;EAC7B,iBAAiB;EACjB;EACA,gBAAgB,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;EAC5F;EACA,gBAAgB,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;EACtE,aAAa;EACb;EACA,YAAY,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,iBAAiB,KAAK,UAAU,IAAI,CAAC,mBAAmB,EAAE;EACpG,gBAAgB,YAAY,CAAC,QAAQ,CAAC,GAAG,iBAAiB,GAAG,EAAE,GAAG,EAAE,CAAC;EACrE;EACA,gBAAgB,KAAK,IAAI,IAAI,IAAI,UAAU,EAAE;EAC7C;EACA;EACA,oBAAoB,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;EACpE,iBAAiB;EACjB,gBAAgB,kBAAkB,CAAC,QAAQ,CAAC,GAAG,iBAAiB,GAAG,EAAE,GAAG,EAAE,CAAC;EAC3E;EACA;EACA,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;EAC9H,aAAa;EACb,iBAAiB;EACjB;EACA,gBAAgB,IAAI,OAAO,YAAY,CAAC,QAAQ,CAAC,KAAK,WAAW,EAAE;EACnE,oBAAoB,YAAY,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;EACxD,iBAAiB;EACjB,gBAAgB,IAAI,CAAC,iBAAiB,EAAE;EACxC;EACA;EACA,oBAAoB,YAAY,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;EAClD,iBAAiB;EACjB,gBAAgB,IAAI,mBAAmB,EAAE;EACzC;EACA;EACA,oBAAoB,kBAAkB,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC;EAC1F,iBAAiB;EACjB,qBAAqB;EACrB,oBAAoB,kBAAkB,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;EAC/E,iBAAiB;EACjB,aAAa;EACb,SAAS;EACT,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,YAAY;EACvC,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;EACnC,YAAY,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;EACxC,YAAY,IAAI,CAAC,iBAAiB,EAAE,CAAC;EACrC,SAAS;EACT,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;EAC9B,YAAY,OAAO,IAAI,CAAC;EACxB,SAAS;EACT;EACA,QAAQ,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EAChD,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;EAChC,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;EAC/B,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE;EAClC,YAAY,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;EAC/C,SAAS;EACT,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,YAAY;EACtC,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;EAC7B,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;EAC9B,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE;EAC5C,QAAQ,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,EAAE;EAChD,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;EAChD,YAAY,OAAO,IAAI,CAAC;EACxB,SAAS;EACT,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;EAC9B,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;EAChC;EACA,QAAQ,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EAChD,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,IAAI,EAAE;EAC7C,QAAQ,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,EAAE;EAChD,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;EACjD,YAAY,OAAO,IAAI,CAAC;EACxB,SAAS;EACT,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;EAC/B,QAAQ,IAAI,CAAC,UAAU,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;EACnD,QAAQ,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;EAC7B;EACA,QAAQ,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;EAC7C,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,YAAY;EACpD,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,EAAE;EAClG,YAAY,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;EAC1C,SAAS;EACT,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,KAAK,EAAE;EAC7C,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;EAC5B,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,MAAM,EAAE;EAC9C,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;EACjC,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,KAAK,EAAE;EAC9C,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;EACpC,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;EAC7B,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,MAAM,EAAE;EACpD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;EACvC,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,UAAU,IAAI,EAAE;EAC3C,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;EAC1B,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,cAAc,EAAE;EACvD,QAAQ,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;EAC9C,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,aAAa,GAAG,UAAU,qBAAqB,EAAE;EACrE,QAAQ,IAAI,CAAC,sBAAsB,GAAG,qBAAqB,CAAC;EAC5D,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,YAAY;EACxC,QAAQ,IAAI,MAAM,GAAG,EAAE,CAAC;EACxB,QAAQ,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;EACtD,YAAY,MAAM,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;EACvC,SAAS;EACT,QAAQ,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;EACrC,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,UAAU,QAAQ,EAAE;EAClD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;EACzC,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAU,QAAQ,EAAE;EACnD,QAAQ,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;EAC1C,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAU,QAAQ,EAAE;EACnD,QAAQ,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;EAC1C,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,QAAQ,EAAE;EACrD,QAAQ,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC;EAC5C,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,QAAQ,EAAE;EACjD,QAAQ,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;EACxC,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN;EACA;EACA;EACA;EACA;EACA,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,IAAI,EAAE,SAAS,EAAE;EACxD,QAAQ,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,EAAE;EAChD,QAAQ,IAAI,SAAS,KAAK,KAAK,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAAC,EAAE;EACvD,QAAQ,IAAI,IAAI,CAAC,SAAS;EAC1B,YAAY,OAAO,IAAI,CAAC;EACxB,QAAQ,IAAI,QAAQ,CAAC;EACrB,QAAQ,IAAI,OAAO,CAAC;EACpB,QAAQ,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;EACvD,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;EAChD,YAAY,IAAI,IAAI,GAAG,OAAO;EAC9B,gBAAgB,OAAO,KAAK,CAAC;EAC7B,YAAY,IAAI,SAAS;EACzB,gBAAgB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;EACjC,SAAS;EACT,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;EAC9B,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;EACpC,YAAY,OAAO,IAAI,CAAC;EACxB,SAAS;EACT,QAAQ,IAAI,IAAI,CAAC,qBAAqB,KAAK,KAAK,EAAE;EAClD,YAAY,IAAI,IAAI,CAAC,gBAAgB,EAAE;EACvC,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;EACpD,aAAa;EACb,YAAY,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;EAC9C,SAAS;EACT,QAAQ,OAAO,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC;EAC5D,QAAQ,OAAO,GAAG,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;EACpE,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;EAClD;EACA,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;EACxF,QAAQ,IAAI,IAAI,CAAC,iBAAiB,EAAE;EACpC,YAAY,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;EAC1D,SAAS;EACT,QAAQ,IAAI,OAAO,KAAK,CAAC,EAAE;EAC3B,YAAY,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE;EAClC,gBAAgB,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;EAC5C,oBAAoB,IAAI,CAAC,OAAO,EAAE,CAAC;EACnC,iBAAiB;EACjB;EACA,gBAAgB,KAAK,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE;EAC1D,oBAAoB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;EACtF,wBAAwB,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;EACzD;EACA;EACA,4BAA4B,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;EACtG,qBAAqB;EACrB,oBAAoB,IAAI,IAAI,CAAC,KAAK,EAAE;EACpC,wBAAwB,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;EACjE,qBAAqB;EACrB,oBAAoB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;EACpF,iBAAiB;EACjB,gBAAgB,IAAI,IAAI,CAAC,KAAK,EAAE;EAChC,oBAAoB,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;EACrD,iBAAiB;EACjB,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;EACzD,oBAAoB,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC;EACnE,iBAAiB;EACjB,qBAAqB;EACrB,oBAAoB,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;EAC7D,iBAAiB;EACjB,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,EAAE;EAC5C,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;EACzD,iBAAiB;EACjB,gBAAgB,OAAO,IAAI,CAAC;EAC5B,aAAa;EACb,iBAAiB;EACjB,gBAAgB,IAAI,IAAI,CAAC,mBAAmB,EAAE;EAC9C,oBAAoB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;EAC3D,iBAAiB;EACjB,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,EAAE;EAC1G;EACA;EACA,oBAAoB,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;EACnF,iBAAiB;EACjB,gBAAgB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;EACxC,gBAAgB,OAAO,KAAK,CAAC;EAC7B,aAAa;EACb,SAAS;EACT,QAAQ,OAAO,IAAI,CAAC;EACpB,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,UAAU,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE;EAC5F,QAAQ,KAAK,IAAI,QAAQ,IAAI,UAAU,EAAE;EACzC;EACA,YAAY,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;EACtD,gBAAgB,SAAS;EACzB,aAAa;EACb,YAAY,IAAI,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;EACpD,YAAY,IAAI,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;EAC3C,YAAY,IAAI,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;EAChE,YAAY,IAAI,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;EAChD,YAAY,IAAI,mBAAmB,GAAG,CAAC,YAAY,IAAI,UAAU,CAAC;EAClE,YAAY,IAAI,mBAAmB,EAAE;EACrC,gBAAgB,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;EAC5E,aAAa;EACb,iBAAiB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,EAAE;EACrD;EACA;EACA,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;EAC7E,aAAa;EACb,iBAAiB;EACjB;EACA,gBAAgB,GAAG,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EAC5D;EACA,gBAAgB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;EAC7C;EACA;EACA,oBAAoB,OAAO,CAAC,QAAQ,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,KAAK,IAAI,KAAK,CAAC;EACtE,iBAAiB;EACjB,aAAa;EACb,SAAS;EACT,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,oBAAoB,GAAG,UAAU,KAAK,EAAE,GAAG,EAAE;EACjE,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;EACrC,YAAY,OAAO,GAAG,CAAC;EACvB,SAAS;EACT,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EAC5D,YAAY,OAAO,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;EAC3C,SAAS;EACT,aAAa;EACb,YAAY,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;EACnC,SAAS;EACT,KAAK,CAAC;EACN,IAAI,KAAK,CAAC,SAAS,CAAC,yBAAyB,GAAG,UAAU,QAAQ,EAAE;EACpE,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;EACpD,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;EACjD,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;EAC1C,YAAY,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;EACzG,SAAS;EACT,aAAa;EACb,YAAY,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;EAC1E,SAAS;EACT,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;EACxC,KAAK,CAAC;EACN,IAAI,OAAO,KAAK,CAAC;EACjB,CAAC,EAAE,CAAC,CAAC;AACL;EACA,IAAI,OAAO,GAAG,QAAQ,CAAC;AACvB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC7B;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,KAAK,GAAG,SAAS,CAAC;EACtB;EACA;EACA;EACA;EACA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EACtC,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EAC5C,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EAChC,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EACtC,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EACtC,IAAIK,SAAO,GAAG;EACd,IAAI,MAAM,EAAE,MAAM;EAClB,IAAI,KAAK,EAAE,KAAK;EAChB,IAAI,aAAa,EAAE,aAAa;EAChC,IAAI,GAAG,EAAE,KAAK;EACd,IAAI,QAAQ,EAAE,QAAQ;EACtB,IAAI,MAAM,EAAE,MAAM;EAClB,IAAI,KAAK,EAAE,KAAK;EAChB,IAAI,OAAO,EAAE,OAAO;EACpB,IAAI,MAAM,EAAE,MAAM;EAClB,IAAI,SAAS,EAAE,SAAS;EACxB,IAAI,GAAG,EAAE,GAAG;EACZ,IAAI,MAAM,EAAE,MAAM;EAClB,IAAI,MAAM,EAAE,MAAM;EAClB,CAAC;;ECpxBD,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;EAC/B,EAAE,IAAI,GAAG,KAAK,KAAK,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;EAC/B,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B;EACA,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;EAC/C,IAAI,OAAO;EACX,GAAG;AACH;EACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EACvE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;EAC9C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AAC1B;EACA,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;EAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;EACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;EAChD,KAAK,MAAM;EACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EAC9B,KAAK;EACL,GAAG,MAAM;EACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;EAC5B,GAAG;AACH;EACA,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;EACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC;EACnC,GAAG,MAAM;EACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;EACpD,GAAG;EACH,CAAC;AACD;EACA,IAAI,QAAQ,GAAG,kXAAkX,CAAC;EAClY,WAAW,CAAC,QAAQ,CAAC,CAAC;AACtB;EACA,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;EAC1C,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE;EAClB,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE;EACpC,MAAM,KAAK,EAAE,KAAK;EAClB,MAAM,UAAU,EAAE,IAAI;EACtB,MAAM,YAAY,EAAE,IAAI;EACxB,MAAM,QAAQ,EAAE,IAAI;EACpB,KAAK,CAAC,CAAC;EACP,GAAG,MAAM;EACT,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;EACrB,GAAG;AACH;EACA,EAAE,OAAO,GAAG,CAAC;EACb,CAAC;AACD;EACA,SAAS,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE;EAChC,EAAE,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,qBAAqB,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,2BAA2B,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC;EAC5H,CAAC;AACD;EACA,SAAS,kBAAkB,CAAC,GAAG,EAAE;EACjC,EAAE,OAAO,kBAAkB,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,2BAA2B,CAAC,GAAG,CAAC,IAAI,kBAAkB,EAAE,CAAC;EACtH,CAAC;AACD;EACA,SAAS,kBAAkB,CAAC,GAAG,EAAE;EACjC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;EACxD,CAAC;AACD;EACA,SAAS,eAAe,CAAC,GAAG,EAAE;EAC9B,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC;EACrC,CAAC;AACD;EACA,SAAS,gBAAgB,CAAC,IAAI,EAAE;EAChC,EAAE,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC5H,CAAC;AACD;EACA,SAAS,qBAAqB,CAAC,GAAG,EAAE,CAAC,EAAE;EACvC,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,OAAO,MAAM,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;AAC3G;EACA,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,OAAO;EACzB,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;EAChB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;EAChB,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;AACjB;EACA,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACb;EACA,EAAE,IAAI;EACN,IAAI,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE;EACtE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1B;EACA,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM;EACxC,KAAK;EACL,GAAG,CAAC,OAAO,GAAG,EAAE;EAChB,IAAI,EAAE,GAAG,IAAI,CAAC;EACd,IAAI,EAAE,GAAG,GAAG,CAAC;EACb,GAAG,SAAS;EACZ,IAAI,IAAI;EACR,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;EACtD,KAAK,SAAS;EACd,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC;EACvB,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,2BAA2B,CAAC,CAAC,EAAE,MAAM,EAAE;EAChD,EAAE,IAAI,CAAC,CAAC,EAAE,OAAO;EACjB,EAAE,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,OAAO,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;EACjE,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;EACzD,EAAE,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;EAC9D,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,KAAK,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EACvD,EAAE,IAAI,CAAC,KAAK,WAAW,IAAI,0CAA0C,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;EACnH,CAAC;AACD;EACA,SAAS,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE;EACrC,EAAE,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;AACxD;EACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACxE;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA,SAAS,kBAAkB,GAAG;EAC9B,EAAE,MAAM,IAAI,SAAS,CAAC,sIAAsI,CAAC,CAAC;EAC9J,CAAC;AACD;EACA,SAAS,gBAAgB,GAAG;EAC5B,EAAE,MAAM,IAAI,SAAS,CAAC,2IAA2I,CAAC,CAAC;EACnK,CAAC;AACD;EACA,IAAIP,OAAK,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;EACvC,EAAE;EACF,EAAE,aAAa,EAAE,aAAa;EAC9B,EAAE,KAAK,EAAE,KAAK;EACd;EACA,EAAE,kBAAkB,EAAE,kBAAkB;EACxC,EAAE,SAAS,EAAE,SAAS;EACtB,EAAE,aAAa,EAAE,aAAa;EAC9B,EAAE,OAAO,EAAE,OAAO;EAClB,EAAE,OAAO,EAAE,OAAO;EAClB,EAAE,IAAI,EAAE,IAAI;EACZ,EAAE,KAAK,EAAE,KAAK;EACd,EAAE,IAAI,EAAE,IAAI;EACZ,EAAE,cAAc,EAAE,cAAc;EAChC,EAAE,iBAAiB,EAAE,iBAAiB;EACtC,EAAE,QAAQ,EAAE,QAAQ;EACpB,EAAE,eAAe,EAAE,eAAe;EAClC,EAAE,KAAK,EAAE,KAAK;EACd,EAAE,UAAU,EAAE,UAAU;EACxB,EAAE,SAAS,EAAE,SAAS;EACtB,EAAE,KAAK,EAAE,KAAK;EACd,CAAC,CAAC;EACF,IAAI,kBAAkB,GAAGF,OAAO,CAAC;EACjC,EAAE,KAAK,EAAE;EACT,IAAI,KAAK,EAAE;EACX,MAAM,SAAS,EAAE,MAAM,CAAC,UAAU;EAClC,MAAM,QAAQ,EAAE,SAAS,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE;EAC3D,QAAQ,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;EAClD,OAAO;EACP,KAAK;EACL,IAAI,MAAM,EAAE;EACZ,MAAM,SAAS,EAAE,MAAM,CAAC,WAAW;EACnC,MAAM,QAAQ,EAAE,SAAS,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;EAC7D,QAAQ,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;EACrD,OAAO;EACP,KAAK;EACL,IAAI,eAAe,EAAE;EACrB,MAAM,SAAS,EAAE,SAAS;EAC1B,KAAK;EACL,IAAI,kBAAkB,EAAE,EAAE;EAC1B,IAAI,uBAAuB,EAAE,EAAE;EAC/B,IAAI,WAAW,EAAE;EACjB,MAAM,SAAS,EAAE,IAAI;EACrB,KAAK;EACL,IAAI,SAAS,EAAE;EACf,MAAM,SAAS,EAAE,KAAK;EACtB,KAAK;EACL,IAAI,OAAO,EAAE;EACb,MAAM,SAAS,EAAE,EAAE;EACnB,KAAK;EACL,IAAI,wBAAwB,EAAE;EAC9B,MAAM,SAAS,EAAE,IAAI;EACrB,MAAM,QAAQ,EAAE,SAAS,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE;EAC5C;EACA,QAAQ,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;EAC9B,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,SAAS,GAAG,EAAE,CAAC;EAChE,OAAO;EACP,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,kBAAkB,EAAE;EACxB,MAAM,SAAS,EAAE,CAAC;EAClB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,oBAAoB,EAAE;EAC1B,MAAM,SAAS,EAAE,SAAS,QAAQ,GAAG;EACrC,QAAQ,OAAO,CAAC,CAAC,CAAC;EAClB,OAAO;EACP,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL;EACA,IAAI,WAAW,EAAE;EACjB,MAAM,SAAS,EAAE,SAAS,QAAQ,GAAG;EACrC,QAAQ,OAAO,IAAI,CAAC;EACpB,OAAO;EACP,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL;EACA,IAAI,cAAc,EAAE;EACpB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,eAAe,EAAE;EACrB,MAAM,SAAS,EAAE,KAAK;EACtB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,cAAc,EAAE;EACpB,MAAM,SAAS,EAAE,KAAK;EACtB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,OAAO,EAAE;EACb,MAAM,SAAS,EAAE,SAAS,QAAQ,GAAG,EAAE;EACvC,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,OAAO,EAAE;EACb,MAAM,SAAS,EAAE,SAAS,QAAQ,GAAG,EAAE;EACvC,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,IAAI,YAAY,EAAE;EAClB,MAAM,aAAa,EAAE,KAAK;EAC1B,KAAK;EACL,GAAG;EACH,EAAE,OAAO,EAAE;EACX,IAAI,IAAI,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE;EAC/B,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE;EAC7B,QAAQ,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC/E;EACA,QAAQ,KAAK,CAAC,sBAAsB,GAAG,KAAK,CAAC,sBAAsB,CAAC,MAAM,EAAE;EAC5E,UAAU,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;EAC3D,QAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;EAClD,UAAU,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;EACrD,SAAS,CAAC,CAAC;AACX;EACA,QAAQ,IAAI,KAAK,CAAC,wBAAwB,EAAE;EAC5C;EACA,UAAU,IAAI,SAAS,GAAG,IAAI,CAAC;AAC/B;EACA,UAAU,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;EACjE,YAAY,IAAI,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;EAClH,cAAc,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;EACjD,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;EACpC,cAAc,OAAO,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;EACpE,aAAa,CAAC,CAAC;EACf,YAAY,IAAI,YAAY,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;EACxE,YAAY,SAAS,GAAG,YAAY,GAAG,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC;EAClE,YAAY,KAAK,CAAC,iBAAiB,GAAG,YAAY,GAAG,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC;EAC/E,WAAW;AACX;EACA,UAAU,IAAI,SAAS,KAAK,KAAK,CAAC,QAAQ,EAAE;EAC5C,YAAY,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;EACrD,YAAY,KAAK,CAAC,WAAW,CAAC,SAAS,GAAG,SAAS,GAAGC,OAAU,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;EAC7G,YAAY,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC;EACvC,WAAW;EACX,SAAS;AACT;EACA,QAAQS,SAAK,CAAC,MAAM,EAAE,CAAC;EACvB,OAAO;AACP;EACA,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;EACL,IAAI,aAAa,EAAE,SAAS,aAAa,CAAC,KAAK,EAAE;EACjD,MAAM,IAAI,iBAAiB,GAAG,KAAK,CAAC,UAAU;EAC9C,UAAU,CAAC,GAAG,iBAAiB,CAAC,CAAC;EACjC,UAAU,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;EAClC,MAAM,OAAO;EACb,QAAQ,CAAC,EAAE,CAAC;EACZ,QAAQ,CAAC,EAAE,CAAC;EACZ,OAAO,CAAC;EACR,KAAK;EACL,IAAI,cAAc,EAAE,SAAS,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB,EAAE;EACzF,MAAM,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAChC;EACA,MAAM,IAAI,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE;EACzC,QAAQ,IAAI,QAAQ,GAAG,QAAQ,CAAC;EAChC,QAAQ,IAAI,WAAW,GAAG,MAAM,IAAI;EACpC,UAAU,CAAC,EAAE,CAAC;EACd,UAAU,CAAC,EAAE,CAAC;EACd,UAAU,CAAC,EAAE,CAAC;EACd,SAAS,CAAC;AACV;EACA,QAAQ,IAAI,CAAC,kBAAkB,EAAE;EACjC;EACA,UAAU,YAAY,CAAC,QAAQ,CAAC,CAAC;EACjC,UAAU,SAAS,CAAC,WAAW,CAAC,CAAC;EACjC,SAAS,MAAM;EACf,UAAU,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;EAC1D,UAAU,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC;EACtC,UAAU,IAAIA,SAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,MAAM,CAACA,SAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC;AACrI;EACA,UAAU,IAAIA,SAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,kBAAkB,GAAG,CAAC,CAAC,CAAC,MAAM,CAACA,SAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;EAC5I,SAAS;AACT;EACA,QAAQ,OAAO,IAAI,CAAC;EACpB,OAAO;AACP;AACA;EACA,MAAM,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE;EAChD,QAAQ,MAAM,EAAE,SAAS,EAAE;EAC3B,OAAO,CAAC,CAAC;AACT;EACA,MAAM,SAAS,YAAY,CAAC,GAAG,EAAE;EACjC,QAAQ,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;EACrB,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC;EACrB,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACtB,QAAQ,IAAI,CAAC,KAAK,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;EACnD,QAAQ,IAAI,CAAC,KAAK,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;EACnD,QAAQ,IAAI,CAAC,KAAK,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;EACnD,OAAO;AACP;EACA,MAAM,SAAS,SAAS,CAAC,MAAM,EAAE;EACjC,QAAQ,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAIR,OAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;EAChF,OAAO;AACP;EACA,MAAM,SAAS,SAAS,GAAG;EAC3B,QAAQ,OAAO,MAAM,CAAC,MAAM,CAAC,IAAIA,OAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;EACrH,OAAO;EACP,KAAK;EACL,IAAI,SAAS,EAAE,SAAS,SAAS,CAAC,KAAK,EAAE;EACzC,MAAM,IAAI,kBAAkB,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACrG,MAAM,IAAI,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAC3F;EACA,MAAM,KAAK,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE;EACtH,QAAQ,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;EAC7C,OAAO;AACP;EACA,MAAM,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;EAC7F,KAAK;EACL,IAAI,SAAS,EAAE,SAAS,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE;EAC/C,MAAM,IAAI,kBAAkB,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACrG,MAAM,IAAI,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;EAC3F;EACA,MAAM,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAChC;EACA,MAAM,IAAI,IAAI,EAAE;EAChB,QAAQ,IAAI,MAAM,GAAG,IAAIA,OAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAChD;EACA,QAAQ,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE;EAC1G,UAAU,IAAI,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;EAC7C,cAAc,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;EAClC,cAAc,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAChC;EACA,UAAU,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;EACjF,YAAY,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;EACnD,WAAW,CAAC,CAAC,CAAC,CAAC;EACf,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACjB;EACA,QAAQ,IAAI,SAAS,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC;EACtE,QAAQ,IAAI,iBAAiB,GAAG,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;EAClF,QAAQ,IAAI,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;EACjE,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;AACrE;EACA,QAAQ,IAAI,QAAQ,GAAG,CAAC,EAAE;EAC1B,UAAU,IAAI,iBAAiB,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC;EAC5G,UAAU,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC;EAC7E,SAAS;EACT,OAAO;AACP;EACA,MAAM,OAAO,IAAI,CAAC;EAClB,KAAK;EACL,IAAI,OAAO,EAAE,SAAS,OAAO,CAAC,KAAK,EAAE;EACrC,MAAM,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,YAAY;EACtG,QAAQ,OAAO,IAAI,CAAC;EACpB,OAAO,CAAC;EACR,MAAM,IAAI,GAAG,GAAG,IAAIA,OAAK,CAAC,IAAI,CAAC,IAAIA,OAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,OAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;EACvF,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;EACjD,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC;EACpC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EAClC,QAAQ,OAAO,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;EACvC,OAAO,CAAC,CAAC;AACT;EACA,MAAM,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;EAC7F,QAAQ,OAAO,eAAe,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EAChE,OAAO,CAAC,CAAC,CAAC,CAAC;EACX,KAAK;EACL,IAAI,eAAe,EAAE,SAAS,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;EAC9D,MAAM,IAAI,GAAG,GAAG,IAAIA,OAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EAC3C,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACjC;EACA,MAAM,OAAO;EACb;EACA,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC;EACxC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;EAC1C,OAAO,CAAC;EACR,KAAK;EACL,IAAI,cAAc,EAAE,SAAS,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;EACrE,MAAM,IAAI,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC3F,MAAM,IAAI,SAAS,GAAG,IAAIA,OAAK,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;EAC1G,MAAM,IAAI,SAAS,GAAG,IAAIA,OAAK,CAAC,SAAS,EAAE,CAAC;EAC5C,MAAM,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;EACvD,MAAM,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAIA,OAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;EAChF,KAAK;EACL,IAAI,mBAAmB,EAAE,SAAS,mBAAmB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE;EACnE,MAAM,IAAI,SAAS,GAAG,IAAIA,OAAK,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;EAC9F,MAAM,IAAI,SAAS,GAAG,IAAIA,OAAK,CAAC,SAAS,EAAE,CAAC;EAC5C,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,kBAAkB,CAAC;AACjE;EACA,MAAM,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;EACvD,MAAM,OAAO,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;EAC7D,KAAK;EACL,IAAI,QAAQ,EAAE,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvC,MAAM,OAAO,KAAK,CAAC,QAAQ,CAAC;EAC5B,KAAK;EACL,IAAI,KAAK,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE;EACjC,MAAM,OAAO,KAAK,CAAC,KAAK,CAAC;EACzB,KAAK;EACL,IAAI,MAAM,EAAE,SAAS,MAAM,CAAC,KAAK,EAAE;EACnC,MAAM,OAAO,KAAK,CAAC,MAAM,CAAC;EAC1B,KAAK;EACL,IAAI,sBAAsB,EAAE,SAAS,sBAAsB,CAAC,KAAK,EAAE;EACnE,MAAM,OAAO,KAAK,CAAC,sBAAsB,CAAC;EAC1C,KAAK;EACL,IAAI,QAAQ,EAAE,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvC,MAAM,OAAO,KAAK,CAAC,QAAQ,CAAC;EAC5B,KAAK;EACL,IAAI,UAAU,EAAE,SAAS,UAAU,CAAC,KAAK,EAAE;EAC3C,MAAM,OAAO,KAAK,CAAC,QAAQ,CAAC;EAC5B,KAAK;AACL;EACA,GAAG;EACH,EAAE,SAAS,EAAE,SAAS,SAAS,GAAG;EAClC,IAAI,OAAO;EACX,MAAM,KAAK,EAAE,IAAIA,OAAK,CAAC,KAAK,EAAE;EAC9B,MAAM,MAAM,EAAE,IAAIA,OAAK,CAAC,kBAAkB,EAAE;EAC5C,MAAM,KAAK,EAAE,IAAIA,OAAK,CAAC,KAAK,EAAE;EAC9B,KAAK,CAAC;EACN,GAAG;EACH,EAAE,IAAI,EAAE,SAAS,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE;EACtC,IAAI,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE;EACtF,QAAQ,iBAAiB,GAAG,KAAK,CAAC,WAAW;EAC7C,QAAQ,WAAW,GAAG,iBAAiB,KAAK,KAAK,CAAC,GAAG,WAAW,GAAG,iBAAiB;EACpF,QAAQ,oBAAoB,GAAG,KAAK,CAAC,cAAc;EACnD,QAAQ,cAAc,GAAG,oBAAoB,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,oBAAoB;EACpF,QAAQ,oBAAoB,GAAG,KAAK,CAAC,cAAc;EACnD,QAAQ,cAAc,GAAG,oBAAoB,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,oBAAoB;EACpF,QAAQ,qBAAqB,GAAG,KAAK,CAAC,mBAAmB;EACzD,QAAQ,mBAAmB,GAAG,qBAAqB,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,qBAAqB,CAAC;AAC9F;EACA;EACA,IAAI,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;AAC3B;EACA,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;EACzE,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,GAAG,iBAAiB,CAAC;EAClD,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;AAChD;EACA,IAAI,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;EAC/E,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,gBAAgB,CAAC;EAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,GAAG;EAChC,MAAM,KAAK,EAAE,sEAAsE;EACnF,MAAM,SAAS,EAAE,sEAAsE;EACvF,MAAM,GAAG,EAAE,wEAAwE;EACnF,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;EACzB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI,GAAG,MAAM,CAAC;AACpE;EACA,IAAI,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;EACtD,IAAI,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;EACrD,IAAI,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACnD;EACA,IAAI,KAAK,CAAC,UAAU,GAAG,IAAIA,OAAK,CAAC,OAAO,EAAE,CAAC;EAC3C,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5B;EACA,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EAC5B,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,UAAU,MAAM,EAAE;EAC7D,MAAM,OAAO,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;EACpE;EACA,QAAQ,MAAM,KAAK,aAAa,KAAK,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;AACpE;EACA,QAAQ,CAAC,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,IAAI,KAAK,aAAa,KAAK,EAAE,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC;EAC5G,YAAY,EAAE,CAAC,WAAW,KAAK,OAAO,IAAI,EAAE,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;EACvH,UAAU,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACjC,SAAS,CAAC,CAAC;EACX,YAAY,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;AAC5C;EACA,QAAQ,IAAI,KAAK,CAAC,wBAAwB,EAAE;EAC5C;EACA,UAAU,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EAClD,UAAU,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;EACtD,UAAU,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AACrD;EACA,UAAU,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;EAC5E,UAAU,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;EAC7E,UAAU,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG,EAAE,UAAU,CAAC,CAAC;EACvH,SAAS;AACT;EACA,QAAQ,SAAS,SAAS,CAAC,EAAE,EAAE;EAC/B,UAAU,IAAI,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE;EAC/C,cAAc,UAAU,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,UAAU;EACpF,cAAc,SAAS,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC;EACnF,UAAU,OAAO;EACjB,YAAY,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,SAAS;EACrC,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,UAAU;EACxC,WAAW,CAAC;EACZ,SAAS;EACT,OAAO,EAAE;EACT,QAAQ,OAAO,EAAE,IAAI;EACrB,OAAO,CAAC,CAAC;EACT,KAAK,CAAC,CAAC;AACP;EACA,IAAI,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE;EAChE,MAAM,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC;AACrC;EACA,MAAM,IAAI,KAAK,CAAC,iBAAiB,EAAE;EACnC,QAAQ,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC;EACxC,QAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,OAAO;EAC1C,OAAO;AACP;EACA,MAAM,qBAAqB,CAAC,YAAY;EACxC;EACA,QAAQ,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;EAC7B;EACA,UAAU,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;EAC7E,SAAS;AACT;EACA,QAAQ,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE;EACnD;EACA,UAAU,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;EAClF,SAAS;EACT,OAAO,CAAC,CAAC;EACT,KAAK,EAAE;EACP,MAAM,OAAO,EAAE,IAAI;EACnB,MAAM,OAAO,EAAE,IAAI;EACnB,KAAK,CAAC,CAAC;AACP;EACA,IAAI,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,aAAa,EAAE,UAAU,EAAE,EAAE;EAClE,MAAM,IAAI,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,cAAc,EAAE,CAAC;EAClD,KAAK,CAAC,CAAC;AACP;EACA,IAAI,KAAK,CAAC,QAAQ,GAAG,IAAIA,OAAK,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;EAC3D,MAAM,SAAS,EAAE,IAAI;EACrB,MAAM,KAAK,EAAE,IAAI;EACjB,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;EACxB,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACvE;EACA,IAAI,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC3D;EACA,IAAI,KAAK,CAAC,cAAc,GAAG,cAAc,CAAC;EAC1C,IAAI,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;EAC9C;EACA,MAAM,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;EAC/C,MAAM,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;EACrC,MAAM,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;EAChD,MAAM,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;EAChD,KAAK,CAAC,CAAC;AACP;EACA,IAAI,KAAK,CAAC,sBAAsB,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;EACtE,IAAI,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;EACpF;AACA;EACA,IAAI,KAAK,CAAC,QAAQ,GAAG,IAAI;EACzB,MAAM,SAAS,EAAE,iBAAiB;EAClC,MAAM,KAAK,EAAE,aAAa;EAC1B,MAAM,GAAG,EAAE,WAAW;EACtB,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC5D;EACA,IAAI,IAAI,WAAW,KAAK,KAAK,EAAE;EAC/B,MAAM,KAAK,CAAC,QAAQ,CAAC,aAAa,GAAG,GAAG,CAAC;EACzC,MAAM,KAAK,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;EAC7C,MAAM,KAAK,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;EACvC,KAAK;AACL;EACA,IAAI,IAAI,WAAW,KAAK,WAAW,IAAI,WAAW,KAAK,OAAO,EAAE;EAChE,MAAM,KAAK,CAAC,QAAQ,CAAC,WAAW,GAAG,GAAG,CAAC;EACvC,MAAM,KAAK,CAAC,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC;EACnD,MAAM,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY;EAC3D,QAAQ,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;EACrC,OAAO,CAAC,CAAC;EACT,MAAM,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY;EAC5D,QAAQ,IAAI,KAAK,CAAC,eAAe,EAAE;EACnC,UAAU,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;EACxC,SAAS;EACT,OAAO,CAAC,CAAC;EACT,MAAM,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,YAAY;EACzD,QAAQ,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC;EACtC,QAAQ,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC;EACvC,OAAO,CAAC,CAAC;EACT,KAAK;AACL;EACA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;EACzH,MAAM,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;EAClD,KAAK,CAAC,CAAC;EACP,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;EACtD,IAAI,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;EACpE;EACA;EACA;AACA;EACA,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,IAAIA,OAAK,CAAC,IAAI,EAAE,CAAC,CAAC;EACxD,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;EACpC,IAAI,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,mBAAmB,CAAC;EACpE,IAAI,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;EAC/B,GAAG;EACH,EAAE,MAAM,EAAE,SAAS,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE;EAC/C;EACA,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE;EACxH,MAAM,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;EAChD,MAAM,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;EAClD,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;EAC3H,QAAQ,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;EACpD,OAAO,CAAC,CAAC;EACT,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;EACvD,MAAM,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;EAC5C,KAAK;AACL;EACA,IAAI,IAAI,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE;EACrE,MAAM,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC,SAAS,KAAK,KAAK,CAAC,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;EAC/H,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC;EAC/C,MAAM,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;EAC5C,MAAM,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAIA,OAAK,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EAC3E,KAAK;AACL;EACA,IAAI,IAAI,YAAY,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE;EACxD,MAAM,IAAI,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC;EAC1D,MAAM,IAAI,KAAK,KAAK,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC;EACzC,MAAM,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAIA,OAAK,CAAC,KAAK,CAACS,cAAO,CAAC,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;EAC9F,KAAK;AACL;EACA,IAAI,IAAI,YAAY,CAAC,cAAc,CAAC,oBAAoB,CAAC,EAAE;EAC3D,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE;EACrC,QAAQ,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;EACxC,QAAQ,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC;EAC5C,QAAQ,CAAC,KAAK,CAAC,YAAY,IAAI,UAAU,EAAE,CAAC;EAC5C,OAAO,MAAM;EACb,QAAQ,IAAIT,OAAK,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,UAAU,OAAO,EAAE;EACpF,UAAU,KAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAIA,OAAK,CAAC,iBAAiB,CAAC;EACjE,YAAY,GAAG,EAAE,OAAO;EACxB,YAAY,IAAI,EAAEA,OAAK,CAAC,QAAQ;EAChC,WAAW,CAAC,CAAC;EACb,UAAU,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;AACzC;EACA,UAAU,KAAK,CAAC,uBAAuB,IAAI,UAAU,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;EACrF,UAAU,CAAC,KAAK,CAAC,YAAY,IAAI,UAAU,EAAE,CAAC;EAC9C,SAAS,CAAC,CAAC;EACX,OAAO;EACP,KAAK;AACL;EACA,IAAI,YAAY,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC;AACpH;EACA,IAAI,IAAI,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;EAChD,MAAM,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC,UAAU,GAAG,EAAE;EAC1D,QAAQ,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;EACvC,OAAO,CAAC,CAAC;AACT;EACA,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE;EAC3C,QAAQ,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACpC,OAAO,CAAC,CAAC;EACT,KAAK;AACL;AACA;EACA,IAAI,SAAS,UAAU,GAAG;EAC1B,MAAM,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;EACtD,KAAK;EACL,GAAG;EACH,CAAC,CAAC;;ECtpBa,sBAASU,eAAT,EAA0BC,WAA1B,EAAuC;EAEpD,MAAMC,MAAM,GAAG,IAAID,WAAJ,EAAf,CAFoD;;EAIpD,SAAO;EACLE,IAAAA,QAAQ,EAAE,kBAASC,IAAT,EAAe;EAAE;EACzB,aAAO;EACL,mBAASF,MAAM,CAACE,IAAD,CAAN,EADJ;EAELC,QAAAA,QAFK,oBAEIC,CAFJ,EAEOC,KAFP,EAEc;EAAEA,UAAAA,KAAK,CAACP,eAAD,CAAL,CAAuBI,IAAvB,EAA6BE,CAA7B;EAAiC,SAFjD;EAGLE,QAAAA,aAAa,EAAE;EAHV,OAAP;EAKD,KAPI;EAQLC,IAAAA,UAAU,EAAE,oBAASC,MAAT,EAAiB;EAAE;EAC7B,aAAO,UAASH,KAAT,EAAyB;EAC9B,YAAMI,eAAe,GAAGJ,KAAK,CAACP,eAAD,CAA7B;;EAD8B,0CAANY,IAAM;EAANA,UAAAA,IAAM;EAAA;;EAE9B,YAAMC,SAAS,GAAGF,eAAe,CAACD,MAAD,CAAf,OAAAC,eAAe,EAAYC,IAAZ,CAAjC;EAEA,eAAOC,SAAS,KAAKF,eAAd,GACH,IADG;EAAA,UAEHE,SAFJ;EAGD,OAPD;EAQD;EAjBI,GAAP;EAoBD;;ECtBD,IAAMvB,KAAK,GAAGwB,MAAM,CAACC,KAAP,GACVD,MAAM,CAACC,KADG;EAAA,EAEV;EAAEC,EAAAA,YAAY,EAAZA,YAAF;EAAgBC,EAAAA,gBAAgB,EAAhBA,gBAAhB;EAAkCC,EAAAA,OAAO,EAAPA;EAAlC,CAFJ;;EAgBA,IAAMC,4BAA4B,GAAG,GAArC;EAIA;;EACA,IAAMC,MAAM,GAAGC,WAAW,CAAC,YAAD,EAAeC,eAAf,CAA1B;EACA,IAAMC,aAAa,GAAGC,MAAM,CAACC,MAAP,OAAAD,MAAM,uBAAW,CACrC,SADqC,EAErC,WAFqC,EAGrC,eAHqC,EAIrC,SAJqC,EAKrC,kBALqC,EAMrC,eANqC,EAOrC,YAPqC,EAQrC,aARqC,EASrC,QATqC,EAUrC,SAVqC,EAWrC,gBAXqC,EAYrC,WAZqC,EAarC,iBAbqC,EAcrC,aAdqC,EAerC,gBAfqC,EAgBrC,iBAhBqC,EAiBrC,uBAjBqC,EAkBrC,YAlBqC,EAmBrC,YAnBqC,EAoBrC,gBApBqC,EAqBrC,WArBqC,EAsBrC,iBAtBqC,EAuBrC,aAvBqC,EAwBrC,WAxBqC,EAyBrC,gBAzBqC,EA0BrC,eA1BqC,EA2BrC,mBA3BqC,EA4BrC,cA5BqC,EA6BrC,iBA7BqC,EA8BrC,uBA9BqC,EA+BrC,oBA/BqC,EAgCrC,4BAhCqC,EAiCrC,2BAjCqC,EAkCrC,4BAlCqC,EAmCrC,gCAnCqC,EAoCrC,0BApCqC,EAqCrC,8BArCqC,EAsCrC,8BAtCqC,EAuCrC,8BAvCqC,EAwCrC,mCAxCqC,EAyCrC,aAzCqC,EA0CrC,cA1CqC,EA2CrC,iBA3CqC,EA4CrC,YA5CqC,EA6CrC,eA7CqC,EA8CrC,aA9CqC,EA+CrC,eA/CqC,EAgDrC,cAhDqC,EAiDrC,cAjDqC,EAkDrC,cAlDqC,EAmDrCE,GAnDqC,CAmDjC,UAAAC,CAAC;EAAA,+BAAQA,CAAR,EAAYP,MAAM,CAACjB,QAAP,CAAgBwB,CAAhB,CAAZ;EAAA,CAnDgC,CAAX,EAA5B;EAoDA,IAAMC,eAAe,GAAGJ,MAAM,CAACC,MAAP,OAAAD,MAAM,uBAAW,CACvC,SADuC,EAEvC,cAFuC,EAGvC,SAHuC,EAIvC,oBAJuC,EAKvC,cALuC,EAMvCE,GANuC,CAMnC,UAAAC,CAAC;EAAA,+BAAQA,CAAR,EAAYP,MAAM,CAACX,UAAP,CAAkBkB,CAAlB,CAAZ;EAAA,CANkC,CAAX,EAA9B;;EASA,IAAME,cAAc,GAAGR,WAAW,CAAC,YAAD,EAAeS,kBAAf,CAAlC;EACA,IAAMC,qBAAqB,GAAGP,MAAM,CAACC,MAAP,OAAAD,MAAM,uBAAW,CAC7C,OAD6C,EAE7C,QAF6C,EAG7C,iBAH6C,EAI7C,aAJ6C,EAK7C,0BAL6C,EAM7CE,GAN6C,CAMzC,UAAAC,CAAC;EAAA,+BAAQA,CAAR,EAAYE,cAAc,CAAC1B,QAAf,CAAwBwB,CAAxB,CAAZ;EAAA,CANwC,CAAX,EAApC;EAOA,IAAMK,uBAAuB,GAAGR,MAAM,CAACC,MAAP,OAAAD,MAAM,uBACjC,CACD,gBADC,EAED,wBAFC,EAGDE,GAHC,CAGG,UAAAC,CAAC;EAAA,+BAAQA,CAAR,EAAYE,cAAc,CAACpB,UAAf,CAA0BkB,CAA1B,CAAZ;EAAA,CAHJ,CADiC,UAKpC;EACEM,EAAAA,kBAAkB,EAAEJ,cAAc,CAACpB,UAAf,CAA0B,iBAA1B,CADtB;EAEEyB,EAAAA,kBAAkB,EAAEL,cAAc,CAACpB,UAAf,CAA0B,gBAA1B;EAFtB,CALoC,GAAtC;;AAaA,sBAAerB,OAAO,CAAC;EAErB+C,EAAAA,KAAK;EACHC,IAAAA,SAAS,EAAE;EAAE,iBAAS,MAAX;EAAmB5B,MAAAA,aAAa,EAAE;EAAlC,KADR;EAEH6B,IAAAA,SAAS,EAAE;EAAE,iBAAS,MAAX;EAAmB7B,MAAAA,aAAa,EAAE;EAAlC,KAFR;EAGH8B,IAAAA,kBAAkB,EAAE;EAAE,iBAAS,CAAX;EAAcjC,MAAAA,QAAQ,EAAE,kBAACsB,CAAD,EAAIpB,KAAJ;EAAA,eAAcA,KAAK,CAACgC,UAAN,CAAiBC,kBAAjB,CAAoCb,CAApC,CAAd;EAAA,OAAxB;EAA8EnB,MAAAA,aAAa,EAAE;EAA7F,KAHjB;EAIHiC,IAAAA,wBAAwB,EAAE;EACxB,iBAAS,IADe;EAExBpC,MAAAA,QAFwB,oBAEfqC,MAFe,EAEPnC,KAFO,EAEA;EACtB,YAAMoC,QAAQ,GAAGpC,KAAK,CAACgC,UAAN,CAAiBI,QAAjB,EAAjB;;EACA,YAAIA,QAAJ,EAAc;EACZA,UAAAA,QAAQ,CAACC,OAAT,GAAmBF,MAAnB;EACD;EACF,OAPuB;EAQxBlC,MAAAA,aAAa,EAAE;EARS,KAJvB;EAcHqC,IAAAA,cAAc,EAAE;EAAE,iBAAS,IAAX;EAAiBrC,MAAAA,aAAa,EAAE;EAAhC,KAdb;EAeHsC,IAAAA,UAAU,EAAE;EAAE,iBAAS,oBAAM,EAAjB;EAAqBtC,MAAAA,aAAa,EAAE;EAApC,KAfT;EAgBHuC,IAAAA,aAAa,EAAE;EAAE,iBAAS,oBAAM,EAAjB;EAAqBvC,MAAAA,aAAa,EAAE;EAApC,KAhBZ;EAiBHwC,IAAAA,WAAW,EAAE;EAAExC,MAAAA,aAAa,EAAE;EAAjB,KAjBV;EAkBHyC,IAAAA,gBAAgB,EAAE;EAAEzC,MAAAA,aAAa,EAAE;EAAjB,KAlBf;EAmBH0C,IAAAA,WAAW,EAAE;EAAE1C,MAAAA,aAAa,EAAE;EAAjB,KAnBV;EAoBH2C,IAAAA,WAAW,EAAE;EAAE3C,MAAAA,aAAa,EAAE;EAAjB,KApBV;EAqBH4C,IAAAA,gBAAgB,EAAE;EAAE5C,MAAAA,aAAa,EAAE;EAAjB,KArBf;EAsBH6C,IAAAA,WAAW,EAAE;EAAE7C,MAAAA,aAAa,EAAE;EAAjB,KAtBV;EAuBH8C,IAAAA,iBAAiB,EAAE;EAAE9C,MAAAA,aAAa,EAAE;EAAjB,KAvBhB;EAwBH+C,IAAAA,sBAAsB,EAAE;EAAE/C,MAAAA,aAAa,EAAE;EAAjB;EAxBrB,KAyBAe,aAzBA,GA0BAQ,qBA1BA,CAFgB;EA+BrByB,EAAAA,OAAO;EACLC,IAAAA,SAAS,EAAE,mBAASlD,KAAT,EAAgBmD,kBAAhB,EAAoCC,OAApC,EAA0D;EAAA;;EAAA,wCAAVC,QAAU;EAAVA,QAAAA,QAAU;EAAA;;EACnErD,MAAAA,KAAK,CAACgC,UAAN,CAAiBsB,SAAjB,CACE,qBAAAtD,KAAK,CAACuD,UAAN,EAAiBC,YAAjB,0BAAiCH,QAAjC,CADF,EAEEF,kBAFF,EAGEC,OAHF;EAKA,aAAO,IAAP;EACD,KARI;EASLK,IAAAA,cAAc,EAAE,wBAASzD,KAAT,EAAgB;EAC9B,UAAIA,KAAK,CAAC0D,uBAAN,KAAkC,IAAtC,EAA4C;EAC1CC,QAAAA,oBAAoB,CAAC3D,KAAK,CAAC0D,uBAAP,CAApB;EACA1D,QAAAA,KAAK,CAAC0D,uBAAN,GAAgC,IAAhC;EACD;;EACD,aAAO,IAAP;EACD,KAfI;EAiBLE,IAAAA,eAAe,EAAE,yBAAS5D,KAAT,EAAgB;EAC/B,UAAIA,KAAK,CAAC0D,uBAAN,KAAkC,IAAtC,EAA4C;EAC1C,aAAKG,eAAL;EACD;;EACD,aAAO,IAAP;EACD,KAtBI;EAuBLA,IAAAA,eAvBK,2BAuBW7D,KAvBX,EAuBkB;EACrB,UAAIA,KAAK,CAAC8D,wBAAV,EAAoC;EAClC;EACA,aAAKC,QAAL,GAAgBC,UAAhB,CAA2BC,KAA3B,CAAiCC,MAAjC,GAA0C,IAA1C;EACD,OAJoB;;;EAOrBlE,MAAAA,KAAK,CAACuD,UAAN,CAAiBY,SAAjB;EACAnE,MAAAA,KAAK,CAACgC,UAAN,CAAiBoC,IAAjB;EACApE,MAAAA,KAAK,CAAC0D,uBAAN,GAAgCW,qBAAqB,CAAC,KAAKR,eAAN,CAArD;EACD,KAjCI;EAkCLS,IAAAA,KAAK,EAAE,eAAAtE,KAAK;EAAA,aAAIA,KAAK,CAACgC,UAAN,CAAiBsC,KAAjB,EAAJ;EAAA,KAlCP;EAkCqC;EAC1CC,IAAAA,MAAM,EAAE,gBAAAvE,KAAK;EAAA,aAAIA,KAAK,CAACgC,UAAN,CAAiBuC,MAAjB,EAAJ;EAAA,KAnCR;EAmCuC;EAC5CR,IAAAA,QAAQ,EAAE,kBAAA/D,KAAK;EAAA,aAAIA,KAAK,CAACgC,UAAN,CAAiB+B,QAAjB,EAAJ;EAAA,KApCV;EAoC2C;EAChD3B,IAAAA,QAAQ,EAAE,kBAAApC,KAAK;EAAA,aAAIA,KAAK,CAACgC,UAAN,CAAiBI,QAAjB,EAAJ;EAAA,KArCV;EAqC2C;EAChDoC,IAAAA,UAAU,EAAE,oBAAAxE,KAAK;EAAA,aAAIA,KAAK,CAACgC,UAAN,CAAiBwC,UAAjB,EAAJ;EAAA,KAtCZ;EAsC+C;EACpDC,IAAAA,WAAW,EAAE,uBAAW;EACtB,WAAKhB,cAAL;EACA,WAAKiB,SAAL,CAAe;EAAEC,QAAAA,KAAK,EAAE,EAAT;EAAaC,QAAAA,KAAK,EAAE;EAApB,OAAf;EACD;EA1CI,KA2CFvD,eA3CE,GA4CFI,uBA5CE,CA/Bc;EA8ErBoD,EAAAA,SAAS,EAAE;EAAA,QAAGC,WAAH,SAAGA,WAAH;EAAA,QAAgBC,cAAhB,SAAgBA,cAAhB;EAAA,QAAgCC,cAAhC,SAAgCA,cAAhC;EAAA,WAAsD;EAC/DzB,MAAAA,UAAU,EAAE,IAAIxC,eAAJ,EADmD;EAE/DiB,MAAAA,UAAU,EAAET,kBAAkB,CAAC;EAAEuD,QAAAA,WAAW,EAAXA,WAAF;EAAeC,QAAAA,cAAc,EAAdA,cAAf;EAA+BC,QAAAA,cAAc,EAAdA;EAA/B,OAAD;EAFiC,KAAtD;EAAA,GA9EU;EAmFrBC,EAAAA,IAAI,EAAE,cAASC,OAAT,EAAkBlF,KAAlB,EAAyB;EAC7B;EACAkF,IAAAA,OAAO,CAACC,SAAR,GAAoB,EAApB,CAF6B;;EAK7BD,IAAAA,OAAO,CAACE,WAAR,CAAoBpF,KAAK,CAACqF,SAAN,GAAkBC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAtC;EACAvF,IAAAA,KAAK,CAACqF,SAAN,CAAgBpB,KAAhB,CAAsBuB,QAAtB,GAAiC,UAAjC,CAN6B;;EAS7B,QAAMC,SAAS,GAAGH,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAlB;EACAvF,IAAAA,KAAK,CAACqF,SAAN,CAAgBD,WAAhB,CAA4BK,SAA5B;EACAzF,IAAAA,KAAK,CAACgC,UAAN,CAAiByD,SAAjB;EACA,QAAMlB,MAAM,GAAGvE,KAAK,CAACgC,UAAN,CAAiBuC,MAAjB,EAAf;EACA,QAAMR,QAAQ,GAAG/D,KAAK,CAACgC,UAAN,CAAiB+B,QAAjB,EAAjB;EACA,QAAM3B,QAAQ,GAAGpC,KAAK,CAACgC,UAAN,CAAiBI,QAAjB,EAAjB;EACAA,IAAAA,QAAQ,CAACC,OAAT,GAAmB,CAAC,CAACrC,KAAK,CAACkC,wBAA3B;EACAlC,IAAAA,KAAK,CAAC0F,cAAN,GAAuBnB,MAAM,CAACiB,QAAP,CAAgBG,CAAvC,CAhB6B;;EAmB7B,QAAIC,QAAJ;EACA5F,IAAAA,KAAK,CAACqF,SAAN,CAAgBD,WAAhB,CAA4BQ,QAAQ,GAAGN,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAvC;EACAK,IAAAA,QAAQ,CAACC,SAAT,GAAqB,gBAArB;EACAD,IAAAA,QAAQ,CAACE,WAAT,GAAuB,EAAvB,CAtB6B;;EAyB7B9F,IAAAA,KAAK,CAACuD,UAAN,CACGwC,SADH,CACa,YAAM;EAAEH,MAAAA,QAAQ,CAACE,WAAT,GAAuB,YAAvB;EAAqC,KAD1D,EAEGE,eAFH,CAEmB,YAAM;EAAEJ,MAAAA,QAAQ,CAACE,WAAT,GAAuB,EAAvB;EAA2B,KAFtD,EAGGG,QAHH,CAGY,YAAM;EACd;EACAjG,MAAAA,KAAK,CAAC0E,SAAN,GAAkB1E,KAAK,CAACuD,UAAN,CAAiBmB,SAAjB,EAAlB,CAFc;;EAKd,UAAIH,MAAM,CAACiB,QAAP,CAAgBU,CAAhB,KAAsB,CAAtB,IAA2B3B,MAAM,CAACiB,QAAP,CAAgBW,CAAhB,KAAsB,CAAjD,IAAsD5B,MAAM,CAACiB,QAAP,CAAgBG,CAAhB,KAAsB3F,KAAK,CAAC0F,cAAlF,IAAoG1F,KAAK,CAAC0E,SAAN,CAAgBC,KAAhB,CAAsByB,MAA9H,EAAsI;EACpI7B,QAAAA,MAAM,CAAC8B,MAAP,CAAcrG,KAAK,CAACuD,UAAN,CAAiBiC,QAA/B;EACAxF,QAAAA,KAAK,CAAC0F,cAAN,GAAuBnB,MAAM,CAACiB,QAAP,CAAgBG,CAAhB,GAAoBW,IAAI,CAACC,IAAL,CAAUvG,KAAK,CAAC0E,SAAN,CAAgBC,KAAhB,CAAsByB,MAAhC,IAA0CxF,4BAArF;EACD;EACF,KAZH,EAaG4F,cAbH,CAakB,YAAM;EACpB;EACA,UAAIxG,KAAK,CAACyG,aAAV,EAAyB;EACvB,YAAMC,WAAW,GAAG1G,KAAK,CAAC0E,SAAN,CAAgBC,KAAhB,CAAsBgC,IAAtB,CAA2B,UAAAC,IAAI;EAAA,iBAAIA,IAAI,CAACC,iBAAL,IAA0B,CAACD,IAAI,CAACE,0BAApC;EAAA,SAA/B,CAApB,CADuB;;EAEvB,YAAIJ,WAAJ,EAAiB;EACfA,UAAAA,WAAW,CAACI,0BAAZ,GAAyC,IAAzC,CADe;EAEhB,SAFD,MAEO;EACL9G,UAAAA,KAAK,CAACyG,aAAN,CAAoBM,OAApB,GADK;;EAEN;;EAED/G,QAAAA,KAAK,CAACyG,aAAN,GAAsBO,SAAtB;EACD;;EAED,UAAIhH,KAAK,CAACsC,cAAN,IAAwBtC,KAAK,CAAC8D,wBAA9B,IAA0D9D,KAAK,CAACiH,WAAN,KAAsB,IAApF,EAA0F;EAAE;EAC1F,YAAMC,YAAY,GAAGlH,KAAK,CAACyG,aAAN,GAAsB,IAAIU,YAAJ,CACzCnH,KAAK,CAAC0E,SAAN,CAAgBC,KAAhB,CAAsBxD,GAAtB,CAA0B,UAAAyF,IAAI;EAAA,iBAAIA,IAAI,CAACQ,UAAT;EAAA,SAA9B,EAAmDC,MAAnD,CAA0D,UAAAC,GAAG;EAAA,iBAAIA,GAAJ;EAAA,SAA7D,CADyC,EAEzC/C,MAFyC,EAGzCR,QAAQ,CAACC,UAHgC,CAA3C;EAMAkD,QAAAA,YAAY,CAACK,gBAAb,CAA8B,WAA9B,EAA2C,UAAUC,KAAV,EAAiB;EAC1DpF,UAAAA,QAAQ,CAACC,OAAT,GAAmB,KAAnB,CAD0D;EAG1D;;EACAmF,UAAAA,KAAK,CAACC,MAAN,CAAaC,YAAb,GAA4BF,KAAK,CAACC,MAAN,CAAajC,QAAb,CAAsBmC,KAAtB,EAA5B;EACAH,UAAAA,KAAK,CAACC,MAAN,CAAaG,SAAb,GAAyBJ,KAAK,CAACC,MAAN,CAAajC,QAAb,CAAsBmC,KAAtB,EAAzB;;EAEA,cAAMf,IAAI,GAAGiB,WAAW,CAACL,KAAK,CAACC,MAAP,CAAX,CAA0BK,MAAvC;;EACA,WAAClB,IAAI,CAACC,iBAAN,KAA4BD,IAAI,CAACC,iBAAL,GAAyB;EAACkB,YAAAA,EAAE,EAAEnB,IAAI,CAACmB,EAAV;EAAcC,YAAAA,EAAE,EAAEpB,IAAI,CAACoB,EAAvB;EAA2BC,YAAAA,EAAE,EAAErB,IAAI,CAACqB;EAApC,WAArD;EACA,WAACrB,IAAI,CAACc,YAAN,KAAuBd,IAAI,CAACc,YAAL,GAAoB;EAACxB,YAAAA,CAAC,EAAEU,IAAI,CAACV,CAAT;EAAYC,YAAAA,CAAC,EAAES,IAAI,CAACT,CAApB;EAAuBR,YAAAA,CAAC,EAAEiB,IAAI,CAACjB;EAA/B,WAA3C,EAT0D;;EAY1D,WAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgBuC,OAAhB,CAAwB,UAAAC,CAAC;EAAA,mBAAIvB,IAAI,YAAKuB,CAAL,EAAJ,GAAgBvB,IAAI,CAACuB,CAAD,CAAxB;EAAA,WAAzB,EAZ0D;;EAe1DpE,UAAAA,QAAQ,CAACC,UAAT,CAAoBoE,SAApB,CAA8BpO,GAA9B,CAAkC,WAAlC;EACD,SAhBD;EAkBAkN,QAAAA,YAAY,CAACK,gBAAb,CAA8B,MAA9B,EAAsC,UAAUC,KAAV,EAAiB;EACrD,cAAMa,OAAO,GAAGR,WAAW,CAACL,KAAK,CAACC,MAAP,CAA3B;;EAEA,cAAI,CAACD,KAAK,CAACC,MAAN,CAAaa,cAAb,CAA4B,gBAA5B,CAAL,EAAoD;EAClD;EACA,gBAAMC,OAAO,GAAGf,KAAK,CAACC,MAAN,CAAaC,YAA7B;EACA,gBAAMc,OAAO,GAAGhB,KAAK,CAACC,MAAN,CAAaG,SAA7B;EACA,gBAAMa,OAAM,GAAGjB,KAAK,CAACC,MAAN,CAAajC,QAA5B;EAEA6C,YAAAA,OAAO,CAAC7C,QAAR,CAAiBxL,GAAjB,CAAqByO,OAAM,CAACd,KAAP,GAAee,GAAf,CAAmBF,OAAnB,CAArB,EANkD;;EAOlDA,YAAAA,OAAO,CAACG,IAAR,CAAaF,OAAb;;EACAA,YAAAA,OAAM,CAACE,IAAP,CAAYJ,OAAZ,EARkD;;EASnD;;EAED,cAAM3B,IAAI,GAAGyB,OAAO,CAACP,MAArB;EACA,cAAMW,MAAM,GAAGJ,OAAO,CAAC7C,QAAvB;EACA,cAAMoD,SAAS,GAAG;EAAC1C,YAAAA,CAAC,EAAEuC,MAAM,CAACvC,CAAP,GAAWU,IAAI,CAACV,CAApB;EAAuBC,YAAAA,CAAC,EAAEsC,MAAM,CAACtC,CAAP,GAAWS,IAAI,CAACT,CAA1C;EAA6CR,YAAAA,CAAC,EAAE8C,MAAM,CAAC9C,CAAP,GAAWiB,IAAI,CAACjB;EAAhE,WAAlB,CAhBqD;;EAkBrD,WAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgBuC,OAAhB,CAAwB,UAAAC,CAAC;EAAA,mBAAIvB,IAAI,YAAKuB,CAAL,EAAJ,GAAgBvB,IAAI,CAACuB,CAAD,CAAJ,GAAUM,MAAM,CAACN,CAAD,CAApC;EAAA,WAAzB;EAEAnI,UAAAA,KAAK,CAACuD,UAAN,CACGsF,aADH,CACiB,GADjB;EAAA,WAEGC,cAFH,GApBqD;;EAwBrDlC,UAAAA,IAAI,CAACmC,SAAL,GAAiB,IAAjB;EACA/I,UAAAA,KAAK,CAACuC,UAAN,CAAiBqE,IAAjB,EAAuBgC,SAAvB;EACD,SA1BD;EA4BA1B,QAAAA,YAAY,CAACK,gBAAb,CAA8B,SAA9B,EAAyC,UAAUC,KAAV,EAAiB;EACxD,iBAAOA,KAAK,CAACC,MAAN,CAAaC,YAApB,CADwD;;EAExD,iBAAOF,KAAK,CAACC,MAAN,CAAaG,SAApB;;EAEA,cAAMhB,IAAI,GAAGiB,WAAW,CAACL,KAAK,CAACC,MAAP,CAAX,CAA0BK,MAAvC,CAJwD;;;EAOxD,cAAIlB,IAAI,CAACE,0BAAT,EAAqC;EACnCI,YAAAA,YAAY,CAACH,OAAb;EACA,mBAAOH,IAAI,CAACE,0BAAZ;EACD;;EAED,cAAMkC,YAAY,GAAGpC,IAAI,CAACC,iBAA1B;EACA,cAAM0B,OAAO,GAAG3B,IAAI,CAACc,YAArB;EACA,cAAMkB,SAAS,GAAG;EAAC1C,YAAAA,CAAC,EAAEqC,OAAO,CAACrC,CAAR,GAAYU,IAAI,CAACV,CAArB;EAAwBC,YAAAA,CAAC,EAAEoC,OAAO,CAACpC,CAAR,GAAYS,IAAI,CAACT,CAA5C;EAA+CR,YAAAA,CAAC,EAAE4C,OAAO,CAAC5C,CAAR,GAAYiB,IAAI,CAACjB;EAAnE,WAAlB;;EACA,cAAIqD,YAAJ,EAAkB;EAChB,aAAC,GAAD,EAAM,GAAN,EAAW,GAAX,EAAgBd,OAAhB,CAAwB,UAAAC,CAAC,EAAI;EAC3B,kBAAMc,EAAE,cAAOd,CAAP,CAAR;;EACA,kBAAIa,YAAY,CAACC,EAAD,CAAZ,KAAqBjC,SAAzB,EAAoC;EAClC,uBAAOJ,IAAI,CAACqC,EAAD,CAAX;EACD;EACF,aALD;EAMA,mBAAOrC,IAAI,CAACC,iBAAZ;EACA,mBAAOD,IAAI,CAACc,YAAZ;;EACA,gBAAId,IAAI,CAACmC,SAAT,EAAoB;EAClB,qBAAOnC,IAAI,CAACmC,SAAZ;EACA/I,cAAAA,KAAK,CAACwC,aAAN,CAAoBoE,IAApB,EAA0BgC,SAA1B;EACD;EACF;;EAED5I,UAAAA,KAAK,CAACuD,UAAN,CACGsF,aADH,CACiB,CADjB;EAAA,WAEGC,cAFH,GA9BwD;;EAkCxD,cAAI9I,KAAK,CAACkC,wBAAV,EAAoC;EAClCE,YAAAA,QAAQ,CAACC,OAAT,GAAmB,IAAnB,CADkC;;EAElCD,YAAAA,QAAQ,CAAC4B,UAAT,IAAuB5B,QAAQ,CAAC4B,UAAT,CAAoBkF,aAA3C,IAA4D9G,QAAQ,CAAC4B,UAAT,CAAoBkF,aAApB,CAAkCC,aAAlC;EAE1D,gBAAIC,YAAJ,CAAiB,WAAjB,EAA8B;EAAEC,cAAAA,WAAW,EAAE;EAAf,aAA9B,CAF0D,CAA5D;EAID,WAxCuD;;;EA2CxDtF,UAAAA,QAAQ,CAACC,UAAT,CAAoBoE,SAApB,CAA8BkB,MAA9B,CAAqC,WAArC;EACD,SA5CD;EA6CD;EACF,KA7HH,EAzB6B;;EAyJ7BtJ,IAAAA,KAAK,CAACgC,UAAN,CACGuH,OADH,CACW;EACP,QAAIxK,KAAK,CAAC0B,YAAV,CAAuB,QAAvB,CADO,EAEP,IAAI1B,KAAK,CAAC2B,gBAAV,CAA2B,QAA3B,EAAqC,GAArC,CAFO,EAGPV,KAAK,CAACuD,UAHC,CADX,EAMGiG,oBANH,CAMwB,UAACC,CAAD,EAAIC,CAAJ,EAAU;EAC9B;EACA,UAAMC,IAAI,GAAG9B,WAAW,CAAC4B,CAAD,CAAxB;EACA,UAAI,CAACE,IAAL,EAAW,OAAO,CAAP;EACX,UAAMC,IAAI,GAAG/B,WAAW,CAAC6B,CAAD,CAAxB;EACA,UAAI,CAACE,IAAL,EAAW,OAAO,CAAC,CAAR,CALmB;;EAQ9B,UAAMC,MAAM,GAAG,SAATA,MAAS,CAAAC,CAAC;EAAA,eAAIA,CAAC,CAACC,cAAF,KAAqB,MAAzB;EAAA,OAAhB;;EACA,aAAOF,MAAM,CAACD,IAAD,CAAN,GAAeC,MAAM,CAACF,IAAD,CAA5B;EACD,KAhBH,EAiBGK,cAjBH,CAiBkB,UAAA1C,GAAG,EAAI;EACrB,UAAM2C,QAAQ,GAAGpC,WAAW,CAACP,GAAD,CAA5B;EACA,aAAO2C,QAAQ,GAAGnL,OAAU,CAACkB,KAAK,WAAIiK,QAAQ,CAACF,cAAb,WAAN,CAAV,CAAqDE,QAAQ,CAACnC,MAA9D,KAAyE,EAA5E,GAAiF,EAAhG;EACD,KApBH,EAqBGoC,eArBH,CAqBmB,KArBnB,EAsBGC,OAtBH,CAsBW,UAAA7C,GAAG,EAAI;EACd;EACA,UAAM8C,QAAQ,GAAGvC,WAAW,CAACP,GAAD,CAA5B;;EAEA,UAAI8C,QAAQ,KAAKpK,KAAK,CAACoK,QAAvB,EAAiC;EAC/B,YAAMC,WAAW,GAAGrK,KAAK,CAACoK,QAAN,GAAiBpK,KAAK,CAACoK,QAAN,CAAeL,cAAhC,GAAiD,IAArE;EACA,YAAMO,WAAW,GAAGtK,KAAK,CAACoK,QAAN,GAAiBpK,KAAK,CAACoK,QAAN,CAAetC,MAAhC,GAAyC,IAA7D;EACA,YAAMyC,OAAO,GAAGH,QAAQ,GAAGA,QAAQ,CAACL,cAAZ,GAA6B,IAArD;EACA,YAAMS,OAAO,GAAGJ,QAAQ,GAAGA,QAAQ,CAACtC,MAAZ,GAAqB,IAA7C;;EACA,YAAIuC,WAAW,IAAIA,WAAW,KAAKE,OAAnC,EAA4C;EAC1C;EACA,cAAME,EAAE,GAAGzK,KAAK,aAAMqK,WAAW,KAAK,MAAhB,GAAyB,MAAzB,GAAkC,MAAxC,WAAhB;EACAI,UAAAA,EAAE,IAAIA,EAAE,CAAC,IAAD,EAAOH,WAAP,CAAR;EACD;;EACD,YAAIC,OAAJ,EAAa;EACX;EACA,cAAME,GAAE,GAAGzK,KAAK,aAAMuK,OAAO,KAAK,MAAZ,GAAqB,MAArB,GAA8B,MAApC,WAAhB;EACAE,UAAAA,GAAE,IAAIA,GAAE,CAACD,OAAD,EAAUH,WAAW,KAAKE,OAAhB,GAA0BD,WAA1B,GAAwC,IAAlD,CAAR;EACD,SAd8B;;;EAiB/BvG,QAAAA,QAAQ,CAACC,UAAT,CAAoBoE,SAApB,CACIgC,QAAQ,IAAIpK,KAAK,aAAMuK,OAAO,KAAK,MAAZ,GAAqB,MAArB,GAA8B,MAApC,WAAlB,IAA0E,CAACH,QAAD,IAAapK,KAAK,CAAC+C,iBAA9F,GAAoH,KAApH,GAA4H,QAD9H,EAEE,WAFF;EAIA/C,QAAAA,KAAK,CAACoK,QAAN,GAAiBA,QAAjB;EACD;EACF,KAjDH,EAkDGM,cAlDH,CAkDkB,KAlDlB,EAmDGC,OAnDH,CAmDW,UAACrD,GAAD,EAAMsD,EAAN,EAAa;EACpB,UAAMX,QAAQ,GAAGpC,WAAW,CAACP,GAAD,CAA5B;;EACA,UAAI2C,QAAJ,EAAc;EACZ,YAAMQ,EAAE,GAAGzK,KAAK,aAAMiK,QAAQ,CAACF,cAAT,KAA4B,MAA5B,GAAqC,MAArC,GAA8C,MAApD,WAAhB;EACAU,QAAAA,EAAE,IAAIA,EAAE,CAACR,QAAQ,CAACnC,MAAV,EAAkB8C,EAAlB,CAAR;EACD,OAHD,MAGO;EACL5K,QAAAA,KAAK,CAAC+C,iBAAN,IAA2B/C,KAAK,CAAC+C,iBAAN,CAAwB6H,EAAxB,CAA3B;EACD;EACF,KA3DH,EA4DGC,YA5DH,CA4DgB,UAACvD,GAAD,EAAMsD,EAAN,EAAa;EACzB;EACA,UAAMX,QAAQ,GAAGpC,WAAW,CAACP,GAAD,CAA5B;;EACA,UAAI2C,QAAJ,EAAc;EACZ,YAAMQ,EAAE,GAAGzK,KAAK,aAAMiK,QAAQ,CAACF,cAAT,KAA4B,MAA5B,GAAqC,MAArC,GAA8C,MAApD,gBAAhB;EACAU,QAAAA,EAAE,IAAIA,EAAE,CAACR,QAAQ,CAACnC,MAAV,EAAkB8C,EAAlB,CAAR;EACD,OAHD,MAGO;EACL5K,QAAAA,KAAK,CAACgD,sBAAN,IAAgChD,KAAK,CAACgD,sBAAN,CAA6B4H,EAA7B,CAAhC;EACD;EACF,KArEH,EAzJ6B;EAkO7B;;EACA,SAAK/G,eAAL;EACD;EAvToB,CAAD,CAAtB;;EA4TA,SAASgE,WAAT,CAAqBJ,MAArB,EAA6B;EAC3B,MAAIH,GAAG,GAAGG,MAAV,CAD2B;;EAG3B,SAAOH,GAAG,IAAI,CAACA,GAAG,CAACgB,cAAJ,CAAmB,gBAAnB,CAAf,EAAqD;EACnDhB,IAAAA,GAAG,GAAGA,GAAG,CAACwD,MAAV;EACD;;EACD,SAAOxD,GAAP;EACD;;;;;;;;"} \ No newline at end of file diff --git a/src/citationnet/static/lib/3d-force-graph.min.js b/src/citationnet/static/lib/3d-force-graph.min.js deleted file mode 100644 index e5671a8..0000000 --- a/src/citationnet/static/lib/3d-force-graph.min.js +++ /dev/null @@ -1,5 +0,0 @@ -// Version 1.70.5-0 3d-force-graph - https://github.com/vasturiano/3d-force-graph -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).ForceGraph3D=e()}(this,(function(){"use strict";function t(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function e(e){for(var i=1;it.length)&&(e=t.length);for(var n=0,i=new Array(e);n>8&255]+j[t>>16&255]+j[t>>24&255]+"-"+j[255&e]+j[e>>8&255]+"-"+j[e>>16&15|64]+j[e>>24&255]+"-"+j[63&n|128]+j[n>>8&255]+"-"+j[n>>16&255]+j[n>>24&255]+j[255&i]+j[i>>8&255]+j[i>>16&255]+j[i>>24&255]).toUpperCase()},clamp:function(t,e,n){return Math.max(e,Math.min(n,t))},euclideanModulo:function(t,e){return(t%e+e)%e},mapLinear:function(t,e,n,i,r){return i+(t-e)*(r-i)/(n-e)},lerp:function(t,e,n){return(1-n)*t+n*e},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){return void 0!==t&&(U=t%2147483647),U=16807*U%2147483647,(U-1)/2147483646},degToRad:function(t){return t*H.DEG2RAD},radToDeg:function(t){return t*H.RAD2DEG},isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t},ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:function(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))},setQuaternionFromProperEuler:function(t,e,n,i,r){const o=Math.cos,a=Math.sin,s=o(n/2),c=a(n/2),l=o((e+i)/2),h=a((e+i)/2),u=o((e-i)/2),d=a((e-i)/2),p=o((i-e)/2),f=a((i-e)/2);switch(r){case"XYX":t.set(s*h,c*u,c*d,s*l);break;case"YZY":t.set(c*d,s*h,c*u,s*l);break;case"ZXZ":t.set(c*u,c*d,s*h,s*l);break;case"XZX":t.set(s*h,c*f,c*p,s*l);break;case"YXY":t.set(c*p,s*h,c*f,s*l);break;case"ZYZ":t.set(c*f,c*p,s*h,s*l);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}}};class G{constructor(t=0,e=0){Object.defineProperty(this,"isVector2",{value:!0}),this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,o=this.y-t.y;return this.x=r*n-o*i+t.x,this.y=r*i+o*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}}class V{constructor(){Object.defineProperty(this,"isMatrix3",{value:!0}),this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,o,a,s,c){const l=this.elements;return l[0]=t,l[1]=i,l[2]=a,l[3]=e,l[4]=r,l[5]=s,l[6]=n,l[7]=o,l[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}clone(){return(new this.constructor).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,o=n[0],a=n[3],s=n[6],c=n[1],l=n[4],h=n[7],u=n[2],d=n[5],p=n[8],f=i[0],m=i[3],g=i[6],v=i[1],y=i[4],b=i[7],x=i[2],_=i[5],w=i[8];return r[0]=o*f+a*v+s*x,r[3]=o*m+a*y+s*_,r[6]=o*g+a*b+s*w,r[1]=c*f+l*v+h*x,r[4]=c*m+l*y+h*_,r[7]=c*g+l*b+h*w,r[2]=u*f+d*v+p*x,r[5]=u*m+d*y+p*_,r[8]=u*g+d*b+p*w,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],a=t[5],s=t[6],c=t[7],l=t[8];return e*o*l-e*a*c-n*r*l+n*a*s+i*r*c-i*o*s}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],a=t[5],s=t[6],c=t[7],l=t[8],h=l*o-a*c,u=a*s-l*r,d=c*r-o*s,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const f=1/p;return t[0]=h*f,t[1]=(i*c-l*n)*f,t[2]=(a*n-i*o)*f,t[3]=u*f,t[4]=(l*e-i*s)*f,t[5]=(i*r-a*e)*f,t[6]=d*f,t[7]=(n*s-c*e)*f,t[8]=(o*e-n*r)*f,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).copy(this).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,o,a){const s=Math.cos(r),c=Math.sin(r);this.set(n*s,n*c,-n*(s*o+c*a)+o+t,-i*c,i*s,-i*(-c*o+s*a)+a+e,0,0,1)}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],o=i[3],a=i[6],s=i[1],c=i[4],l=i[7];return i[0]=e*r+n*s,i[3]=e*o+n*c,i[6]=e*a+n*l,i[1]=-n*r+e*s,i[4]=-n*o+e*c,i[7]=-n*a+e*l,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}}let W;const q={getDataURL:function(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===W&&(W=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),W.width=t.width,W.height=t.height;const n=W.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=W}return e.width>2048||e.height>2048?e.toDataURL("image/jpeg",.6):e.toDataURL("image/png")}};let X=0;function Y(t=Y.DEFAULT_IMAGE,e=Y.DEFAULT_MAPPING,n=1001,i=1001,r=1006,o=1008,a=1023,s=1009,c=1,l=3e3){Object.defineProperty(this,"id",{value:X++}),this.uuid=H.generateUUID(),this.name="",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=o,this.anisotropy=c,this.format=a,this.internalFormat=null,this.type=s,this.offset=new G(0,0),this.repeat=new G(1,1),this.center=new G(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new V,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=l,this.version=0,this.onUpdate=null}function Z(t){return"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap?q.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}Y.DEFAULT_IMAGE=void 0,Y.DEFAULT_MAPPING=300,Y.prototype=Object.assign(Object.create(F.prototype),{constructor:Y,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this},toJSON:function(t){const e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,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,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid&&(i.uuid=H.generateUUID()),!e&&void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t1)switch(this.wrapS){case u:t.x=t.x-Math.floor(t.x);break;case d:t.x=t.x<0?0:1;break;case p:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case u:t.y=t.y-Math.floor(t.y);break;case d:t.y=t.y<0?0:1;break;case p:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}}),Object.defineProperty(Y.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}});class J{constructor(t=0,e=0,n=0,i=1){Object.defineProperty(this,"isVector4",{value:!0}),this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,o=t.elements;return this.x=o[0]*e+o[4]*n+o[8]*i+o[12]*r,this.y=o[1]*e+o[5]*n+o[9]*i+o[13]*r,this.z=o[2]*e+o[6]*n+o[10]*i+o[14]*r,this.w=o[3]*e+o[7]*n+o[11]*i+o[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const o=.01,a=.1,s=t.elements,c=s[0],l=s[4],h=s[8],u=s[1],d=s[5],p=s[9],f=s[2],m=s[6],g=s[10];if(Math.abs(l-u)s&&t>v?tv?s=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),o=Math.atan2(r,e*n);t=Math.sin(t*o)/r,a=Math.sin(a*o)/r}const r=a*n;if(s=s*t+u*r,c=c*t+d*r,l=l*t+p*r,h=h*t+f*r,t===1-a){const t=1/Math.sqrt(s*s+c*c+l*l+h*h);s*=t,c*=t,l*=t,h*=t}}t[e]=s,t[e+1]=c,t[e+2]=l,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,r,o){const a=n[i],s=n[i+1],c=n[i+2],l=n[i+3],h=r[o],u=r[o+1],d=r[o+2],p=r[o+3];return t[e]=a*p+l*h+s*d-c*u,t[e+1]=s*p+l*u+c*h-a*d,t[e+2]=c*p+l*d+a*u-s*h,t[e+3]=l*p-a*h-s*u-c*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");const n=t._x,i=t._y,r=t._z,o=t._order,a=Math.cos,s=Math.sin,c=a(n/2),l=a(i/2),h=a(r/2),u=s(n/2),d=s(i/2),p=s(r/2);switch(o){case"XYZ":this._x=u*l*h+c*d*p,this._y=c*d*h-u*l*p,this._z=c*l*p+u*d*h,this._w=c*l*h-u*d*p;break;case"YXZ":this._x=u*l*h+c*d*p,this._y=c*d*h-u*l*p,this._z=c*l*p-u*d*h,this._w=c*l*h+u*d*p;break;case"ZXY":this._x=u*l*h-c*d*p,this._y=c*d*h+u*l*p,this._z=c*l*p+u*d*h,this._w=c*l*h-u*d*p;break;case"ZYX":this._x=u*l*h-c*d*p,this._y=c*d*h+u*l*p,this._z=c*l*p-u*d*h,this._w=c*l*h+u*d*p;break;case"YZX":this._x=u*l*h+c*d*p,this._y=c*d*h+u*l*p,this._z=c*l*p-u*d*h,this._w=c*l*h-u*d*p;break;case"XZY":this._x=u*l*h-c*d*p,this._y=c*d*h-u*l*p,this._z=c*l*p+u*d*h,this._w=c*l*h+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+o)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],o=e[1],a=e[5],s=e[9],c=e[2],l=e[6],h=e[10],u=n+a+h;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(l-s)*t,this._y=(r-c)*t,this._z=(o-i)*t}else if(n>a&&n>h){const t=2*Math.sqrt(1+n-a-h);this._w=(l-s)/t,this._x=.25*t,this._y=(i+o)/t,this._z=(r+c)/t}else if(a>h){const t=2*Math.sqrt(1+a-n-h);this._w=(r-c)/t,this._x=(i+o)/t,this._y=.25*t,this._z=(s+l)/t}else{const t=2*Math.sqrt(1+h-n-a);this._w=(o-i)/t,this._x=(r+c)/t,this._y=(s+l)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n<1e-6?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(H.clamp(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,o=t._w,a=e._x,s=e._y,c=e._z,l=e._w;return this._x=n*l+o*a+i*c-r*s,this._y=i*l+o*s+r*a-n*c,this._z=r*l+o*c+n*s-i*a,this._w=o*l-n*a-i*s-r*c,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,o=this._w;let a=o*t._w+n*t._x+i*t._y+r*t._z;if(a<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a>=1)return this._w=o,this._x=n,this._y=i,this._z=r,this;const s=1-a*a;if(s<=Number.EPSILON){const t=1-e;return this._w=t*o+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const c=Math.sqrt(s),l=Math.atan2(c,a),h=Math.sin((1-e)*l)/c,u=Math.sin(e*l)/c;return this._w=o*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}class tt{constructor(t=0,e=0,n=0){Object.defineProperty(this,"isVector3",{value:!0}),this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(nt.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(nt.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,o=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*o,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*o,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*o,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,o=t.y,a=t.z,s=t.w,c=s*e+o*i-a*n,l=s*n+a*e-r*i,h=s*i+r*n-o*e,u=-r*e-o*n-a*i;return this.x=c*s+u*-r+l*-a-h*-o,this.y=l*s+u*-o+h*-r-c*-a,this.z=h*s+u*-a+c*-o-l*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,o=e.x,a=e.y,s=e.z;return this.x=i*s-r*a,this.y=r*o-n*s,this.z=n*a-i*o,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return et.copy(this).projectOnVector(t),this.sub(et)}reflect(t){return this.sub(et.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(H.clamp(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}}const et=new tt,nt=new K;class it{constructor(t,e){Object.defineProperty(this,"isBox3",{value:!0}),this.min=void 0!==t?t:new tt(1/0,1/0,1/0),this.max=void 0!==e?e:new tt(-1/0,-1/0,-1/0)}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,o=-1/0,a=-1/0;for(let s=0,c=t.length;sr&&(r=c),l>o&&(o=l),h>a&&(a=h)}return this.min.set(e,n,i),this.max.set(r,o,a),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,o=-1/0,a=-1/0;for(let s=0,c=t.count;sr&&(r=c),l>o&&(o=l),h>a&&(a=h)}return this.min.set(e,n,i),this.max.set(r,o,a),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new tt),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,at),at.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(ft),mt.subVectors(this.max,ft),ct.subVectors(t.a,ft),lt.subVectors(t.b,ft),ht.subVectors(t.c,ft),ut.subVectors(lt,ct),dt.subVectors(ht,lt),pt.subVectors(ct,ht);let e=[0,-ut.z,ut.y,0,-dt.z,dt.y,0,-pt.z,pt.y,ut.z,0,-ut.x,dt.z,0,-dt.x,pt.z,0,-pt.x,-ut.y,ut.x,0,-dt.y,dt.x,0,-pt.y,pt.x,0];return!!rt(e,ct,lt,ht,mt)&&(e=[1,0,0,0,1,0,0,0,1],!!rt(e,ct,lt,ht,mt)&&(gt.crossVectors(ut,dt),e=[gt.x,gt.y,gt.z],rt(e,ct,lt,ht,mt)))}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new tt),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return at.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return void 0===t&&console.error("THREE.Box3: .getBoundingSphere() target is now required"),this.getCenter(t.center),t.radius=.5*this.getSize(at).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(ot[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),ot[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),ot[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),ot[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),ot[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),ot[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),ot[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),ot[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(ot)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}function rt(t,e,n,i,r){for(let o=0,a=t.length-3;o<=a;o+=3){vt.fromArray(t,o);const a=r.x*Math.abs(vt.x)+r.y*Math.abs(vt.y)+r.z*Math.abs(vt.z),s=e.dot(vt),c=n.dot(vt),l=i.dot(vt);if(Math.max(-Math.max(s,c,l),Math.min(s,c,l))>a)return!1}return!0}const ot=[new tt,new tt,new tt,new tt,new tt,new tt,new tt,new tt],at=new tt,st=new it,ct=new tt,lt=new tt,ht=new tt,ut=new tt,dt=new tt,pt=new tt,ft=new tt,mt=new tt,gt=new tt,vt=new tt,yt=new it;class bt{constructor(t,e){this.center=void 0!==t?t:new tt,this.radius=void 0!==e?e:-1}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):yt.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return void 0===t&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),t=new it),this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}}const xt=new tt,_t=new tt,wt=new tt,Mt=new tt,St=new tt,Et=new tt,Tt=new tt;class At{constructor(t,e){this.origin=void 0!==t?t:new tt,this.direction=void 0!==e?e:new tt(0,0,-1)}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return void 0===e&&(console.warn("THREE.Ray: .at() target is now required"),e=new tt),e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,xt)),this}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),e=new tt),e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=xt.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(xt.copy(this.direction).multiplyScalar(e).add(this.origin),xt.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){_t.copy(t).add(e).multiplyScalar(.5),wt.copy(e).sub(t).normalize(),Mt.copy(this.origin).sub(_t);const r=.5*t.distanceTo(e),o=-this.direction.dot(wt),a=Mt.dot(this.direction),s=-Mt.dot(wt),c=Mt.lengthSq(),l=Math.abs(1-o*o);let h,u,d,p;if(l>0)if(h=o*s-a,u=o*a-s,p=r*l,h>=0)if(u>=-p)if(u<=p){const t=1/l;h*=t,u*=t,d=h*(h+o*u+2*a)+u*(o*h+u+2*s)+c}else u=r,h=Math.max(0,-(o*u+a)),d=-h*h+u*(u+2*s)+c;else u=-r,h=Math.max(0,-(o*u+a)),d=-h*h+u*(u+2*s)+c;else u<=-p?(h=Math.max(0,-(-o*r+a)),u=h>0?-r:Math.min(Math.max(-r,-s),r),d=-h*h+u*(u+2*s)+c):u<=p?(h=0,u=Math.min(Math.max(-r,-s),r),d=u*(u+2*s)+c):(h=Math.max(0,-(o*r+a)),u=h>0?r:Math.min(Math.max(-r,-s),r),d=-h*h+u*(u+2*s)+c);else u=o>0?-r:r,h=Math.max(0,-(o*u+a)),d=-h*h+u*(u+2*s)+c;return n&&n.copy(this.direction).multiplyScalar(h).add(this.origin),i&&i.copy(wt).multiplyScalar(u).add(_t),d}intersectSphere(t,e){xt.subVectors(t.center,this.origin);const n=xt.dot(this.direction),i=xt.dot(xt)-n*n,r=t.radius*t.radius;if(i>r)return null;const o=Math.sqrt(r-i),a=n-o,s=n+o;return a<0&&s<0?null:a<0?this.at(s,e):this.at(a,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,o,a,s;const c=1/this.direction.x,l=1/this.direction.y,h=1/this.direction.z,u=this.origin;return c>=0?(n=(t.min.x-u.x)*c,i=(t.max.x-u.x)*c):(n=(t.max.x-u.x)*c,i=(t.min.x-u.x)*c),l>=0?(r=(t.min.y-u.y)*l,o=(t.max.y-u.y)*l):(r=(t.max.y-u.y)*l,o=(t.min.y-u.y)*l),n>o||r>i?null:((r>n||n!=n)&&(n=r),(o=0?(a=(t.min.z-u.z)*h,s=(t.max.z-u.z)*h):(a=(t.max.z-u.z)*h,s=(t.min.z-u.z)*h),n>s||a>i?null:((a>n||n!=n)&&(n=a),(s=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,xt)}intersectTriangle(t,e,n,i,r){St.subVectors(e,t),Et.subVectors(n,t),Tt.crossVectors(St,Et);let o,a=this.direction.dot(Tt);if(a>0){if(i)return null;o=1}else{if(!(a<0))return null;o=-1,a=-a}Mt.subVectors(this.origin,t);const s=o*this.direction.dot(Et.crossVectors(Mt,Et));if(s<0)return null;const c=o*this.direction.dot(St.cross(Mt));if(c<0)return null;if(s+c>a)return null;const l=-o*Mt.dot(Tt);return l<0?null:this.at(l/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}}class Lt{constructor(){Object.defineProperty(this,"isMatrix4",{value:!0}),this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}set(t,e,n,i,r,o,a,s,c,l,h,u,d,p,f,m){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=o,g[9]=a,g[13]=s,g[2]=c,g[6]=l,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=f,g[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new Lt).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/Pt.setFromMatrixColumn(t,0).length(),r=1/Pt.setFromMatrixColumn(t,1).length(),o=1/Pt.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*o,e[9]=n[9]*o,e[10]=n[10]*o,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");const e=this.elements,n=t.x,i=t.y,r=t.z,o=Math.cos(n),a=Math.sin(n),s=Math.cos(i),c=Math.sin(i),l=Math.cos(r),h=Math.sin(r);if("XYZ"===t.order){const t=o*l,n=o*h,i=a*l,r=a*h;e[0]=s*l,e[4]=-s*h,e[8]=c,e[1]=n+i*c,e[5]=t-r*c,e[9]=-a*s,e[2]=r-t*c,e[6]=i+n*c,e[10]=o*s}else if("YXZ"===t.order){const t=s*l,n=s*h,i=c*l,r=c*h;e[0]=t+r*a,e[4]=i*a-n,e[8]=o*c,e[1]=o*h,e[5]=o*l,e[9]=-a,e[2]=n*a-i,e[6]=r+t*a,e[10]=o*s}else if("ZXY"===t.order){const t=s*l,n=s*h,i=c*l,r=c*h;e[0]=t-r*a,e[4]=-o*h,e[8]=i+n*a,e[1]=n+i*a,e[5]=o*l,e[9]=r-t*a,e[2]=-o*c,e[6]=a,e[10]=o*s}else if("ZYX"===t.order){const t=o*l,n=o*h,i=a*l,r=a*h;e[0]=s*l,e[4]=i*c-n,e[8]=t*c+r,e[1]=s*h,e[5]=r*c+t,e[9]=n*c-i,e[2]=-c,e[6]=a*s,e[10]=o*s}else if("YZX"===t.order){const t=o*s,n=o*c,i=a*s,r=a*c;e[0]=s*l,e[4]=r-t*h,e[8]=i*h+n,e[1]=h,e[5]=o*l,e[9]=-a*l,e[2]=-c*l,e[6]=n*h+i,e[10]=t-r*h}else if("XZY"===t.order){const t=o*s,n=o*c,i=a*s,r=a*c;e[0]=s*l,e[4]=-h,e[8]=c*l,e[1]=t*h+r,e[5]=o*l,e[9]=n*h-i,e[2]=i*h-n,e[6]=a*l,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Rt,t,Ot)}lookAt(t,e,n){const i=this.elements;return Dt.subVectors(t,e),0===Dt.lengthSq()&&(Dt.z=1),Dt.normalize(),Nt.crossVectors(n,Dt),0===Nt.lengthSq()&&(1===Math.abs(n.z)?Dt.x+=1e-4:Dt.z+=1e-4,Dt.normalize(),Nt.crossVectors(n,Dt)),Nt.normalize(),It.crossVectors(Dt,Nt),i[0]=Nt.x,i[4]=It.x,i[8]=Dt.x,i[1]=Nt.y,i[5]=It.y,i[9]=Dt.y,i[2]=Nt.z,i[6]=It.z,i[10]=Dt.z,this}multiply(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,o=n[0],a=n[4],s=n[8],c=n[12],l=n[1],h=n[5],u=n[9],d=n[13],p=n[2],f=n[6],m=n[10],g=n[14],v=n[3],y=n[7],b=n[11],x=n[15],_=i[0],w=i[4],M=i[8],S=i[12],E=i[1],T=i[5],A=i[9],L=i[13],P=i[2],C=i[6],R=i[10],O=i[14],N=i[3],I=i[7],D=i[11],k=i[15];return r[0]=o*_+a*E+s*P+c*N,r[4]=o*w+a*T+s*C+c*I,r[8]=o*M+a*A+s*R+c*D,r[12]=o*S+a*L+s*O+c*k,r[1]=l*_+h*E+u*P+d*N,r[5]=l*w+h*T+u*C+d*I,r[9]=l*M+h*A+u*R+d*D,r[13]=l*S+h*L+u*O+d*k,r[2]=p*_+f*E+m*P+g*N,r[6]=p*w+f*T+m*C+g*I,r[10]=p*M+f*A+m*R+g*D,r[14]=p*S+f*L+m*O+g*k,r[3]=v*_+y*E+b*P+x*N,r[7]=v*w+y*T+b*C+x*I,r[11]=v*M+y*A+b*R+x*D,r[15]=v*S+y*L+b*O+x*k,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],o=t[1],a=t[5],s=t[9],c=t[13],l=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*s*h-i*c*h-r*a*u+n*c*u+i*a*d-n*s*d)+t[7]*(+e*s*d-e*c*u+r*o*u-i*o*d+i*c*l-r*s*l)+t[11]*(+e*c*h-e*a*d-r*o*h+n*o*d+r*a*l-n*c*l)+t[15]*(-i*a*l-e*s*h+e*a*u+i*o*h-n*o*u+n*s*l)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],o=t[4],a=t[5],s=t[6],c=t[7],l=t[8],h=t[9],u=t[10],d=t[11],p=t[12],f=t[13],m=t[14],g=t[15],v=h*m*c-f*u*c+f*s*d-a*m*d-h*s*g+a*u*g,y=p*u*c-l*m*c-p*s*d+o*m*d+l*s*g-o*u*g,b=l*f*c-p*h*c+p*a*d-o*f*d-l*a*g+o*h*g,x=p*h*s-l*f*s-p*a*u+o*f*u+l*a*m-o*h*m,_=e*v+n*y+i*b+r*x;if(0===_)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const w=1/_;return t[0]=v*w,t[1]=(f*u*r-h*m*r-f*i*d+n*m*d+h*i*g-n*u*g)*w,t[2]=(a*m*r-f*s*r+f*i*c-n*m*c-a*i*g+n*s*g)*w,t[3]=(h*s*r-a*u*r-h*i*c+n*u*c+a*i*d-n*s*d)*w,t[4]=y*w,t[5]=(l*m*r-p*u*r+p*i*d-e*m*d-l*i*g+e*u*g)*w,t[6]=(p*s*r-o*m*r-p*i*c+e*m*c+o*i*g-e*s*g)*w,t[7]=(o*u*r-l*s*r+l*i*c-e*u*c-o*i*d+e*s*d)*w,t[8]=b*w,t[9]=(p*h*r-l*f*r-p*n*d+e*f*d+l*n*g-e*h*g)*w,t[10]=(o*f*r-p*a*r+p*n*c-e*f*c-o*n*g+e*a*g)*w,t[11]=(l*a*r-o*h*r-l*n*c+e*h*c+o*n*d-e*a*d)*w,t[12]=x*w,t[13]=(l*f*i-p*h*i+p*n*u-e*f*u-l*n*m+e*h*m)*w,t[14]=(p*a*i-o*f*i-p*n*s+e*f*s+o*n*m-e*a*m)*w,t[15]=(o*h*i-l*a*i+l*n*s-e*h*s-o*n*u+e*a*u)*w,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,o=t.x,a=t.y,s=t.z,c=r*o,l=r*a;return this.set(c*o+n,c*a-i*s,c*s+i*a,0,c*a+i*s,l*a+n,l*s-i*o,0,c*s-i*a,l*s+i*o,r*s*s+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n){return this.set(1,e,n,0,t,1,n,0,t,e,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,o=e._y,a=e._z,s=e._w,c=r+r,l=o+o,h=a+a,u=r*c,d=r*l,p=r*h,f=o*l,m=o*h,g=a*h,v=s*c,y=s*l,b=s*h,x=n.x,_=n.y,w=n.z;return i[0]=(1-(f+g))*x,i[1]=(d+b)*x,i[2]=(p-y)*x,i[3]=0,i[4]=(d-b)*_,i[5]=(1-(u+g))*_,i[6]=(m+v)*_,i[7]=0,i[8]=(p+y)*w,i[9]=(m-v)*w,i[10]=(1-(u+f))*w,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=Pt.set(i[0],i[1],i[2]).length();const o=Pt.set(i[4],i[5],i[6]).length(),a=Pt.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],Ct.copy(this);const s=1/r,c=1/o,l=1/a;return Ct.elements[0]*=s,Ct.elements[1]*=s,Ct.elements[2]*=s,Ct.elements[4]*=c,Ct.elements[5]*=c,Ct.elements[6]*=c,Ct.elements[8]*=l,Ct.elements[9]*=l,Ct.elements[10]*=l,e.setFromRotationMatrix(Ct),n.x=r,n.y=o,n.z=a,this}makePerspective(t,e,n,i,r,o){void 0===o&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");const a=this.elements,s=2*r/(e-t),c=2*r/(n-i),l=(e+t)/(e-t),h=(n+i)/(n-i),u=-(o+r)/(o-r),d=-2*o*r/(o-r);return a[0]=s,a[4]=0,a[8]=l,a[12]=0,a[1]=0,a[5]=c,a[9]=h,a[13]=0,a[2]=0,a[6]=0,a[10]=u,a[14]=d,a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this}makeOrthographic(t,e,n,i,r,o){const a=this.elements,s=1/(e-t),c=1/(n-i),l=1/(o-r),h=(e+t)*s,u=(n+i)*c,d=(o+r)*l;return a[0]=2*s,a[4]=0,a[8]=0,a[12]=-h,a[1]=0,a[5]=2*c,a[9]=0,a[13]=-u,a[2]=0,a[6]=0,a[10]=-2*l,a[14]=-d,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}const Pt=new tt,Ct=new Lt,Rt=new tt(0,0,0),Ot=new tt(1,1,1),Nt=new tt,It=new tt,Dt=new tt;class kt{constructor(t=0,e=0,n=0,i=kt.DefaultOrder){Object.defineProperty(this,"isEuler",{value:!0}),this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._order=i||this._order,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e,n){const i=H.clamp,r=t.elements,o=r[0],a=r[4],s=r[8],c=r[1],l=r[5],h=r[9],u=r[2],d=r[6],p=r[10];switch(e=e||this._order){case"XYZ":this._y=Math.asin(i(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-h,p),this._z=Math.atan2(-a,o)):(this._x=Math.atan2(d,l),this._z=0);break;case"YXZ":this._x=Math.asin(-i(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(s,p),this._z=Math.atan2(c,l)):(this._y=Math.atan2(-u,o),this._z=0);break;case"ZXY":this._x=Math.asin(i(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,p),this._z=Math.atan2(-a,l)):(this._y=0,this._z=Math.atan2(c,o));break;case"ZYX":this._y=Math.asin(-i(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,p),this._z=Math.atan2(c,o)):(this._x=0,this._z=Math.atan2(-a,l));break;case"YZX":this._z=Math.asin(i(c,-1,1)),Math.abs(c)<.9999999?(this._x=Math.atan2(-h,l),this._y=Math.atan2(-u,o)):(this._x=0,this._y=Math.atan2(s,p));break;case"XZY":this._z=Math.asin(-i(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(d,l),this._y=Math.atan2(s,o)):(this._x=Math.atan2(-h,p),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!1!==n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return zt.makeRotationFromQuaternion(t),this.setFromRotationMatrix(zt,e,n)}setFromVector3(t,e){return this.set(t.x,t.y,t.z,e||this._order)}reorder(t){return Bt.setFromEuler(this),this.setFromQuaternion(Bt,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new tt(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}kt.DefaultOrder="XYZ",kt.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];const zt=new Lt,Bt=new K;class Ft{constructor(){this.mask=1}set(t){this.mask=1<1){for(let t=0;t1){for(let t=0;t0){i.children=[];for(let e=0;e0){i.animations=[];for(let e=0;e0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),a.length>0&&(n.images=a),s.length>0&&(n.shapes=s),c.length>0&&(n.skeletons=c),l.length>0&&(n.animations=l)}return n.object=i,n;function o(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}},clone:function(t){return(new this.constructor).copy(this,t)},copy:function(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e1?void 0:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return void 0===t&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),t=new tt),t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||ne.getNormalMatrix(t),i=this.coplanarPoint(te).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}}const re=new tt,oe=new tt,ae=new tt,se=new tt,ce=new tt,le=new tt,he=new tt,ue=new tt,de=new tt,pe=new tt;class fe{constructor(t,e,n){this.a=void 0!==t?t:new tt,this.b=void 0!==e?e:new tt,this.c=void 0!==n?n:new tt}static getNormal(t,e,n,i){void 0===i&&(console.warn("THREE.Triangle: .getNormal() target is now required"),i=new tt),i.subVectors(n,e),re.subVectors(t,e),i.cross(re);const r=i.lengthSq();return r>0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){re.subVectors(i,e),oe.subVectors(n,e),ae.subVectors(t,e);const o=re.dot(re),a=re.dot(oe),s=re.dot(ae),c=oe.dot(oe),l=oe.dot(ae),h=o*c-a*a;if(void 0===r&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),r=new tt),0===h)return r.set(-2,-1,-1);const u=1/h,d=(c*s-a*l)*u,p=(o*l-a*s)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,se),se.x>=0&&se.y>=0&&se.x+se.y<=1}static getUV(t,e,n,i,r,o,a,s){return this.getBarycoord(t,e,n,i,se),s.set(0,0),s.addScaledVector(r,se.x),s.addScaledVector(o,se.y),s.addScaledVector(a,se.z),s}static isFrontFacing(t,e,n,i){return re.subVectors(n,e),oe.subVectors(t,e),re.cross(oe).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return re.subVectors(this.c,this.b),oe.subVectors(this.a,this.b),.5*re.cross(oe).length()}getMidpoint(t){return void 0===t&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),t=new tt),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return fe.getNormal(this.a,this.b,this.c,t)}getPlane(t){return void 0===t&&(console.warn("THREE.Triangle: .getPlane() target is now required"),t=new ie),t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return fe.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return fe.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return fe.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return fe.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),e=new tt);const n=this.a,i=this.b,r=this.c;let o,a;ce.subVectors(i,n),le.subVectors(r,n),ue.subVectors(t,n);const s=ce.dot(ue),c=le.dot(ue);if(s<=0&&c<=0)return e.copy(n);de.subVectors(t,i);const l=ce.dot(de),h=le.dot(de);if(l>=0&&h<=l)return e.copy(i);const u=s*h-l*c;if(u<=0&&s>=0&&l<=0)return o=s/(s-l),e.copy(n).addScaledVector(ce,o);pe.subVectors(t,r);const d=ce.dot(pe),p=le.dot(pe);if(p>=0&&d<=p)return e.copy(r);const f=d*c-s*p;if(f<=0&&c>=0&&p<=0)return a=c/(c-p),e.copy(n).addScaledVector(le,a);const m=l*p-d*h;if(m<=0&&h-l>=0&&d-p>=0)return he.subVectors(r,i),a=(h-l)/(h-l+(d-p)),e.copy(i).addScaledVector(he,a);const g=1/(m+f+u);return o=f*g,a=u*g,e.copy(n).addScaledVector(ce,o).addScaledVector(le,a)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const me={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},ge={h:0,s:0,l:0},ve={h:0,s:0,l:0};function ye(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function be(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function xe(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class _e{constructor(t,e,n){return Object.defineProperty(this,"isColor",{value:!0}),void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){if(t=H.euclideanModulo(t,1),e=H.clamp(e,0,1),n=H.clamp(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=ye(r,i,t+1/3),this.g=ye(r,i,t),this.b=ye(r,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let n;if(n=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(t)){let t;const i=n[1],r=n[2];switch(i){case"rgb":case"rgba":if(t=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(r))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[5]),this;if(t=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(r))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[5]),this;break;case"hsl":case"hsla":if(t=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(r)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,r=parseInt(t[3],10)/100;return e(t[5]),this.setHSL(n,i,r)}}}else if(n=/^\#([A-Fa-f0-9]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this}setColorName(t){const e=me[t];return void 0!==e?this.setHex(e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=be(t.r),this.g=be(t.g),this.b=be(t.b),this}copyLinearToSRGB(t){return this.r=xe(t.r),this.g=xe(t.g),this.b=xe(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return("000000"+this.getHex().toString(16)).slice(-6)}getHSL(t){void 0===t&&(console.warn("THREE.Color: .getHSL() target is now required"),t={h:0,s:0,l:0});const e=this.r,n=this.g,i=this.b,r=Math.max(e,n,i),o=Math.min(e,n,i);let a,s;const c=(o+r)/2;if(o===r)a=0,s=0;else{const t=r-o;switch(s=c<=.5?t/(r+o):t/(2-r-o),r){case e:a=(n-i)/t+(n0&&(n.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(n.morphTargets=!0),!0===this.morphNormals&&(n.morphNormals=!0),!0===this.skinning&&(n.skinning=!0),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length>0&&(n.textures=e),r.length>0&&(n.images=r)}return n},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.flatShading=t.flatShading,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),Object.defineProperty(Se.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Ee.prototype=Object.create(Se.prototype),Ee.prototype.constructor=Ee,Ee.prototype.isMeshBasicMaterial=!0,Ee.prototype.copy=function(t){return Se.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this};const Te=new tt,Ae=new G;function Le(t,e,n){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=k,this.updateRange={offset:0,count:-1},this.version=0}function Pe(t,e,n){Le.call(this,new Int8Array(t),e,n)}function Ce(t,e,n){Le.call(this,new Uint8Array(t),e,n)}function Re(t,e,n){Le.call(this,new Uint8ClampedArray(t),e,n)}function Oe(t,e,n){Le.call(this,new Int16Array(t),e,n)}function Ne(t,e,n){Le.call(this,new Uint16Array(t),e,n)}function Ie(t,e,n){Le.call(this,new Int32Array(t),e,n)}function De(t,e,n){Le.call(this,new Uint32Array(t),e,n)}function ke(t,e,n){Le.call(this,new Uint16Array(t),e,n)}function ze(t,e,n){Le.call(this,new Float32Array(t),e,n)}function Be(t,e,n){Le.call(this,new Float64Array(t),e,n)}Object.defineProperty(Le.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(Le.prototype,{isBufferAttribute:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,r=this.itemSize;i0,o=i[1]&&i[1].length>0,a=t.morphTargets,s=a.length;let c;if(s>0){c=[];for(let t=0;t0){u=[];for(let t=0;t0&&0===e.length&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(let t=0;te&&(e=t[n]);return e}const Ue={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:"undefined"!=typeof Uint8ClampedArray?Uint8ClampedArray:Uint8Array,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function He(t,e){return new Ue[t](e)}let Ge=1;const Ve=new Lt,We=new Kt,qe=new tt,Xe=new it,Ye=new it,Ze=new tt;function Je(){Object.defineProperty(this,"id",{value:Ge+=2}),this.uuid=H.generateUUID(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}Je.prototype=Object.assign(Object.create(F.prototype),{constructor:Je,isBufferGeometry:!0,getIndex:function(){return this.index},setIndex:function(t){return Array.isArray(t)?this.index=new(je(t)>65535?De:Ne)(t,1):this.index=t,this},getAttribute:function(t){return this.attributes[t]},setAttribute:function(t,e){return this.attributes[t]=e,this},deleteAttribute:function(t){return delete this.attributes[t],this},hasAttribute:function(t){return void 0!==this.attributes[t]},addGroup:function(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})},clearGroups:function(){this.groups=[]},setDrawRange:function(t,e){this.drawRange.start=t,this.drawRange.count=e},applyMatrix4:function(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new V).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(t){return Ve.makeRotationX(t),this.applyMatrix4(Ve),this},rotateY:function(t){return Ve.makeRotationY(t),this.applyMatrix4(Ve),this},rotateZ:function(t){return Ve.makeRotationZ(t),this.applyMatrix4(Ve),this},translate:function(t,e,n){return Ve.makeTranslation(t,e,n),this.applyMatrix4(Ve),this},scale:function(t,e,n){return Ve.makeScale(t,e,n),this.applyMatrix4(Ve),this},lookAt:function(t){return We.lookAt(t),We.updateMatrix(),this.applyMatrix4(We.matrix),this},center:function(){return this.computeBoundingBox(),this.boundingBox.getCenter(qe).negate(),this.translate(qe.x,qe.y,qe.z),this},setFromObject:function(t){const e=t.geometry;if(t.isPoints||t.isLine){const t=new ze(3*e.vertices.length,3),n=new ze(3*e.colors.length,3);if(this.setAttribute("position",t.copyVector3sArray(e.vertices)),this.setAttribute("color",n.copyColorsArray(e.colors)),e.lineDistances&&e.lineDistances.length===e.vertices.length){const t=new ze(e.lineDistances.length,1);this.setAttribute("lineDistance",t.copyArray(e.lineDistances))}null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone())}else t.isMesh&&e&&e.isGeometry&&this.fromGeometry(e);return this},setFromPoints:function(t){const e=[];for(let n=0,i=t.length;n0){const e=new Float32Array(3*t.normals.length);this.setAttribute("normal",new Le(e,3).copyVector3sArray(t.normals))}if(t.colors.length>0){const e=new Float32Array(3*t.colors.length);this.setAttribute("color",new Le(e,3).copyColorsArray(t.colors))}if(t.uvs.length>0){const e=new Float32Array(2*t.uvs.length);this.setAttribute("uv",new Le(e,2).copyVector2sArray(t.uvs))}if(t.uvs2.length>0){const e=new Float32Array(2*t.uvs2.length);this.setAttribute("uv2",new Le(e,2).copyVector2sArray(t.uvs2))}this.groups=t.groups;for(const e in t.morphTargets){const n=[],i=t.morphTargets[e];for(let t=0,e=i.length;t0){const e=new ze(4*t.skinIndices.length,4);this.setAttribute("skinIndex",e.copyVector4sArray(t.skinIndices))}if(t.skinWeights.length>0){const e=new ze(4*t.skinWeights.length,4);this.setAttribute("skinWeight",e.copyVector4sArray(t.skinWeights))}return null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),this},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new it);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".',this),void this.boundingBox.set(new tt(-1/0,-1/0,-1/0),new tt(1/0,1/0,1/0));if(void 0!==t){if(this.boundingBox.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e],r=i.toJSON(t.data);""!==i.name&&(r.name=i.name),t.data.attributes[e]=r}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],o=[];for(let e=0,i=n.length;e0&&(i[e]=o,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const o=this.groups;o.length>0&&(t.data.groups=JSON.parse(JSON.stringify(o)));const a=this.boundingSphere;return null!==a&&(t.data.boundingSphere={center:a.center.toArray(),radius:a.radius}),t},clone:function(){return(new Je).copy(this)},copy:function(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;tn.far?null:{distance:l,point:fn.clone(),object:t}}function vn(t,e,n,i,r,o,a,s,c,l,h,u){tn.fromBufferAttribute(r,l),en.fromBufferAttribute(r,h),nn.fromBufferAttribute(r,u);const d=t.morphTargetInfluences;if(e.morphTargets&&o&&d){sn.set(0,0,0),cn.set(0,0,0),ln.set(0,0,0);for(let t=0,e=o.length;t0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}},raycast:function(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),Ke.copy(n.boundingSphere),Ke.applyMatrix4(r),!1===t.ray.intersectsSphere(Ke))return;if($e.copy(r).invert(),Qe.copy(t.ray).applyMatrix4($e),null!==n.boundingBox&&!1===Qe.intersectsBox(n.boundingBox))return;let o;if(n.isBufferGeometry){const r=n.index,a=n.attributes.position,s=n.morphAttributes.position,c=n.morphTargetsRelative,l=n.attributes.uv,h=n.attributes.uv2,u=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=u.length;n0&&(c=l);for(let n=0,l=s.length;n0?1:-1,l.push(A.x,A.y,A.z),h.push(s/m),h.push(1-o/g),E+=1}}for(let t=0;t0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e},Mn.prototype=Object.assign(Object.create(Kt.prototype),{constructor:Mn,isCamera:!0,copy:function(t,e){return Kt.prototype.copy.call(this,t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this},getWorldDirection:function(t){void 0===t&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),t=new tt),this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()},updateMatrixWorld:function(t){Kt.prototype.updateMatrixWorld.call(this,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()},updateWorldMatrix:function(t,e){Kt.prototype.updateWorldMatrix.call(this,t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()},clone:function(){return(new this.constructor).copy(this)}}),Sn.prototype=Object.assign(Object.create(Mn.prototype),{constructor:Sn,isPerspectiveCamera:!0,copy:function(t,e){return Mn.prototype.copy.call(this,t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this},setFocalLength:function(t){const e=.5*this.getFilmHeight()/t;this.fov=2*H.RAD2DEG*Math.atan(e),this.updateProjectionMatrix()},getFocalLength:function(){const t=Math.tan(.5*H.DEG2RAD*this.fov);return.5*this.getFilmHeight()/t},getEffectiveFOV:function(){return 2*H.RAD2DEG*Math.atan(Math.tan(.5*H.DEG2RAD*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,1)},setViewOffset:function(t,e,n,i,r,o){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=o,this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()},updateProjectionMatrix:function(){const t=this.near;let e=t*Math.tan(.5*H.DEG2RAD*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const o=this.view;if(null!==this.view&&this.view.enabled){const t=o.fullWidth,a=o.fullHeight;r+=o.offsetX*i/t,e-=o.offsetY*n/a,i*=o.width/t,n*=o.height/a}const a=this.filmOffset;0!==a&&(r+=t*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()},toJSON:function(t){const e=Kt.prototype.toJSON.call(this,t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}});const En=90;function Tn(t,e,n){if(Kt.call(this),this.type="CubeCamera",!0!==n.isWebGLCubeRenderTarget)return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");this.renderTarget=n;const i=new Sn(En,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new tt(1,0,0)),this.add(i);const r=new Sn(En,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new tt(-1,0,0)),this.add(r);const o=new Sn(En,1,t,e);o.layers=this.layers,o.up.set(0,0,1),o.lookAt(new tt(0,1,0)),this.add(o);const a=new Sn(En,1,t,e);a.layers=this.layers,a.up.set(0,0,-1),a.lookAt(new tt(0,-1,0)),this.add(a);const s=new Sn(En,1,t,e);s.layers=this.layers,s.up.set(0,-1,0),s.lookAt(new tt(0,0,1)),this.add(s);const c=new Sn(En,1,t,e);c.layers=this.layers,c.up.set(0,-1,0),c.lookAt(new tt(0,0,-1)),this.add(c),this.update=function(t,e){null===this.parent&&this.updateMatrixWorld();const l=t.xr.enabled,h=t.getRenderTarget();t.xr.enabled=!1;const u=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,o),t.setRenderTarget(n,3),t.render(e,a),t.setRenderTarget(n,4),t.render(e,s),n.texture.generateMipmaps=u,t.setRenderTarget(n,5),t.render(e,c),t.setRenderTarget(h),t.xr.enabled=l}}function An(t,e,n,i,r,o,a,s,c,l){t=void 0!==t?t:[],e=void 0!==e?e:301,a=void 0!==a?a:M,Y.call(this,t,e,n,i,r,o,a,s,c,l),this.flipY=!1,this._needsFlipEnvMap=!0}function Ln(t,e,n){Number.isInteger(e)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),e=n),$.call(this,t,t,e),e=e||{},this.texture=new An(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture._needsFlipEnvMap=!1}function Pn(t,e,n,i,r,o,a,s,c,l,h,u){Y.call(this,null,o,a,s,c,l,i,r,h,u),this.image={data:t||null,width:e||1,height:n||1},this.magFilter=void 0!==c?c:f,this.minFilter=void 0!==l?l:f,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}Tn.prototype=Object.create(Kt.prototype),Tn.prototype.constructor=Tn,An.prototype=Object.create(Y.prototype),An.prototype.constructor=An,An.prototype.isCubeTexture=!0,Object.defineProperty(An.prototype,"images",{get:function(){return this.image},set:function(t){this.image=t}}),Ln.prototype=Object.create($.prototype),Ln.prototype.constructor=Ln,Ln.prototype.isWebGLCubeRenderTarget=!0,Ln.prototype.fromEquirectangularTexture=function(t,e){this.texture.type=e.type,this.texture.format=S,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t#include \n\t\t\t\t#include \n\n\t\t\t}\n\t\t",fragmentShader:"\n\n\t\t\tuniform sampler2D tEquirect;\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t}\n\t\t"},i=new yn(5,5,5),r=new wn({name:"CubemapFromEquirect",uniforms:bn(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const o=new mn(i,r),a=e.minFilter;e.minFilter===g&&(e.minFilter=m);return new Tn(1,10,this).update(t,o),e.minFilter=a,o.geometry.dispose(),o.material.dispose(),this},Ln.prototype.clear=function(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)},Pn.prototype=Object.create(Y.prototype),Pn.prototype.constructor=Pn,Pn.prototype.isDataTexture=!0;const Cn=new bt,Rn=new tt;class On{constructor(t,e,n,i,r,o){this.planes=[void 0!==t?t:new ie,void 0!==e?e:new ie,void 0!==n?n:new ie,void 0!==i?i:new ie,void 0!==r?r:new ie,void 0!==o?o:new ie]}set(t,e,n,i,r,o){const a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(n),a[3].copy(i),a[4].copy(r),a[5].copy(o),this}clone(){return(new this.constructor).copy(this)}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],o=n[2],a=n[3],s=n[4],c=n[5],l=n[6],h=n[7],u=n[8],d=n[9],p=n[10],f=n[11],m=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(a-i,h-s,f-u,y-m).normalize(),e[1].setComponents(a+i,h+s,f+u,y+m).normalize(),e[2].setComponents(a+r,h+c,f+d,y+g).normalize(),e[3].setComponents(a-r,h-c,f-d,y-g).normalize(),e[4].setComponents(a-o,h-l,f-p,y-v).normalize(),e[5].setComponents(a+o,h+l,f+p,y+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),Cn.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(Cn)}intersectsSprite(t){return Cn.center.set(0,0,0),Cn.radius=.7071067811865476,Cn.applyMatrix4(t.matrixWorld),this.intersectsSphere(Cn)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)0?t.max.x:t.min.x,Rn.y=i.normal.y>0?t.max.y:t.min.y,Rn.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(Rn)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}}function Nn(){let t=null,e=!1,n=null,i=null;function r(e,o){n(e,o),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function In(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_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}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * 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}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat 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_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\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 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\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",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",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; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\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 max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\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};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\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}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\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 linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.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}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.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\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\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\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + 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 ), m0, cubeUV_maxMipLevel );\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",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( 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 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",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, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\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",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\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",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\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",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\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",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif",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",fog_vertex:"#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\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",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 texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\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 GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\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 getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.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 getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.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 getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.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 GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\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 GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).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_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\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.specularRoughness;\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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * 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}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\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\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( 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, geometry, 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\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\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, 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\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( 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, geometry, 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, geometry, 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\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\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 ], geometry );\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",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif",normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).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 * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",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}\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 linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( 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 invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",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",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#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\tvarying vec4 vSpotShadowCoord[ 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\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#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\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ 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 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",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",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, vSpotShadowCoord[ 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}",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",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",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",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",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",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 toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmissionmap_fragment:"#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif",transmissionmap_pars_fragment:"#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"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}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",cube_vert:"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}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\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\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}",depth_vert:"#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#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}",distanceRGBA_frag:"#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 \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\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}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\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}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"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 \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\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}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#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#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\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 \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#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#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\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\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#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\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\tvViewPosition = - mvPosition.xyz;\n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \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\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#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#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \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\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#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#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#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\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\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 \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\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#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\n#include \n#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#include \n\t#include \n\t#include \n#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\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#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\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\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#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\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#include \n#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\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\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\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \nvoid main() {\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}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"},zn={common:{diffuse:{value:new _e(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new V},uv2Transform:{value:new V},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new G(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new _e(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new _e(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new V}},sprite:{diffuse:{value:new _e(15658734)},opacity:{value:1},center:{value:new G(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new V}}},Bn={basic:{uniforms:xn([zn.common,zn.specularmap,zn.envmap,zn.aomap,zn.lightmap,zn.fog]),vertexShader:kn.meshbasic_vert,fragmentShader:kn.meshbasic_frag},lambert:{uniforms:xn([zn.common,zn.specularmap,zn.envmap,zn.aomap,zn.lightmap,zn.emissivemap,zn.fog,zn.lights,{emissive:{value:new _e(0)}}]),vertexShader:kn.meshlambert_vert,fragmentShader:kn.meshlambert_frag},phong:{uniforms:xn([zn.common,zn.specularmap,zn.envmap,zn.aomap,zn.lightmap,zn.emissivemap,zn.bumpmap,zn.normalmap,zn.displacementmap,zn.fog,zn.lights,{emissive:{value:new _e(0)},specular:{value:new _e(1118481)},shininess:{value:30}}]),vertexShader:kn.meshphong_vert,fragmentShader:kn.meshphong_frag},standard:{uniforms:xn([zn.common,zn.envmap,zn.aomap,zn.lightmap,zn.emissivemap,zn.bumpmap,zn.normalmap,zn.displacementmap,zn.roughnessmap,zn.metalnessmap,zn.fog,zn.lights,{emissive:{value:new _e(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:kn.meshphysical_vert,fragmentShader:kn.meshphysical_frag},toon:{uniforms:xn([zn.common,zn.aomap,zn.lightmap,zn.emissivemap,zn.bumpmap,zn.normalmap,zn.displacementmap,zn.gradientmap,zn.fog,zn.lights,{emissive:{value:new _e(0)}}]),vertexShader:kn.meshtoon_vert,fragmentShader:kn.meshtoon_frag},matcap:{uniforms:xn([zn.common,zn.bumpmap,zn.normalmap,zn.displacementmap,zn.fog,{matcap:{value:null}}]),vertexShader:kn.meshmatcap_vert,fragmentShader:kn.meshmatcap_frag},points:{uniforms:xn([zn.points,zn.fog]),vertexShader:kn.points_vert,fragmentShader:kn.points_frag},dashed:{uniforms:xn([zn.common,zn.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:kn.linedashed_vert,fragmentShader:kn.linedashed_frag},depth:{uniforms:xn([zn.common,zn.displacementmap]),vertexShader:kn.depth_vert,fragmentShader:kn.depth_frag},normal:{uniforms:xn([zn.common,zn.bumpmap,zn.normalmap,zn.displacementmap,{opacity:{value:1}}]),vertexShader:kn.normal_vert,fragmentShader:kn.normal_frag},sprite:{uniforms:xn([zn.sprite,zn.fog]),vertexShader:kn.sprite_vert,fragmentShader:kn.sprite_frag},background:{uniforms:{uvTransform:{value:new V},t2D:{value:null}},vertexShader:kn.background_vert,fragmentShader:kn.background_frag},cube:{uniforms:xn([zn.envmap,{opacity:{value:1}}]),vertexShader:kn.cube_vert,fragmentShader:kn.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:kn.equirect_vert,fragmentShader:kn.equirect_frag},distanceRGBA:{uniforms:xn([zn.common,zn.displacementmap,{referencePosition:{value:new tt},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:kn.distanceRGBA_vert,fragmentShader:kn.distanceRGBA_frag},shadow:{uniforms:xn([zn.lights,zn.fog,{color:{value:new _e(0)},opacity:{value:1}}]),vertexShader:kn.shadow_vert,fragmentShader:kn.shadow_frag}};function Fn(t,e,n,i,r){const o=new _e(0);let a,s,c=0,l=null,h=0,u=null;function d(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,r)}return{getClearColor:function(){return o},setClearColor:function(t,e=1){o.set(t),c=e,d(o,c)},getClearAlpha:function(){return c},setClearAlpha:function(t){c=t,d(o,c)},render:function(n,r,p,f){let m=!0===r.isScene?r.background:null;m&&m.isTexture&&(m=e.get(m));const g=t.xr,v=g.getSession&&g.getSession();v&&"additive"===v.environmentBlendMode&&(m=null),null===m?d(o,c):m&&m.isColor&&(d(m,1),f=!0),(t.autoClear||f)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),m&&(m.isCubeTexture||m.isWebGLCubeRenderTarget||306===m.mapping)?(void 0===s&&(s=new mn(new yn(1,1,1),new wn({name:"BackgroundCubeMaterial",uniforms:bn(Bn.cube.uniforms),vertexShader:Bn.cube.vertexShader,fragmentShader:Bn.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),s.geometry.deleteAttribute("normal"),s.geometry.deleteAttribute("uv"),s.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(s.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),i.update(s)),m.isWebGLCubeRenderTarget&&(m=m.texture),s.material.uniforms.envMap.value=m,s.material.uniforms.flipEnvMap.value=m.isCubeTexture&&m._needsFlipEnvMap?-1:1,l===m&&h===m.version&&u===t.toneMapping||(s.material.needsUpdate=!0,l=m,h=m.version,u=t.toneMapping),n.unshift(s,s.geometry,s.material,0,0,null)):m&&m.isTexture&&(void 0===a&&(a=new mn(new Dn(2,2),new wn({name:"BackgroundMaterial",uniforms:bn(Bn.background.uniforms),vertexShader:Bn.background.vertexShader,fragmentShader:Bn.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute("normal"),Object.defineProperty(a.material,"map",{get:function(){return this.uniforms.t2D.value}}),i.update(a)),a.material.uniforms.t2D.value=m,!0===m.matrixAutoUpdate&&m.updateMatrix(),a.material.uniforms.uvTransform.value.copy(m.matrix),l===m&&h===m.version&&u===t.toneMapping||(a.material.needsUpdate=!0,l=m,h=m.version,u=t.toneMapping),n.unshift(a,a.geometry,a.material,0,0,null))}}}function jn(t,e,n,i){const r=t.getParameter(34921),o=i.isWebGL2?null:e.get("OES_vertex_array_object"),a=i.isWebGL2||null!==o,s={},c=d(null);let l=c;function h(e){return i.isWebGL2?t.bindVertexArray(e):o.bindVertexArrayOES(e)}function u(e){return i.isWebGL2?t.deleteVertexArray(e):o.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t=0){const o=c[e];if(void 0!==o){const e=o.normalized,r=o.itemSize,a=n.get(o);if(void 0===a)continue;const c=a.buffer,l=a.type,h=a.bytesPerElement;if(o.isInterleavedBufferAttribute){const n=o.data,a=n.stride,u=o.offset;n&&n.isInstancedInterleavedBuffer?(m(i,n.meshPerAttribute),void 0===s._maxInstanceCount&&(s._maxInstanceCount=n.meshPerAttribute*n.count)):f(i),t.bindBuffer(34962,c),v(i,r,l,e,a*h,u*h)}else o.isInstancedBufferAttribute?(m(i,o.meshPerAttribute),void 0===s._maxInstanceCount&&(s._maxInstanceCount=o.meshPerAttribute*o.count)):f(i),t.bindBuffer(34962,c),v(i,r,l,e,0,0)}else if("instanceMatrix"===e){const e=n.get(r.instanceMatrix);if(void 0===e)continue;const o=e.buffer,a=e.type;m(i+0,1),m(i+1,1),m(i+2,1),m(i+3,1),t.bindBuffer(34962,o),t.vertexAttribPointer(i+0,4,a,!1,64,0),t.vertexAttribPointer(i+1,4,a,!1,64,16),t.vertexAttribPointer(i+2,4,a,!1,64,32),t.vertexAttribPointer(i+3,4,a,!1,64,48)}else if("instanceColor"===e){const e=n.get(r.instanceColor);if(void 0===e)continue;const o=e.buffer,a=e.type;m(i,1),t.bindBuffer(34962,o),t.vertexAttribPointer(i,3,a,!1,12,0)}else if(void 0!==h){const n=h[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i,n);break;case 3:t.vertexAttrib3fv(i,n);break;case 4:t.vertexAttrib4fv(i,n);break;default:t.vertexAttrib1fv(i,n)}}}}g()}(r,c,u,y),null!==b&&t.bindBuffer(34963,n.get(b).buffer))},reset:y,resetDefaultState:b,dispose:function(){y();for(const t in s){const e=s[t];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete s[t]}},releaseStatesOfGeometry:function(t){if(void 0===s[t.id])return;const e=s[t.id];for(const t in e){const n=e[t];for(const t in n)u(n[t].object),delete n[t];delete e[t]}delete s[t.id]},releaseStatesOfProgram:function(t){for(const e in s){const n=s[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)u(i[t].object),delete i[t];delete n[t.id]}},initAttributes:p,enableAttribute:f,disableUnusedAttributes:g}}function Un(t,e,n,i){const r=i.isWebGL2;let o;this.setMode=function(t){o=t},this.render=function(e,i){t.drawArrays(o,e,i),n.update(i,o,1)},this.renderInstances=function(i,a,s){if(0===s)return;let c,l;if(r)c=t,l="drawArraysInstanced";else if(c=e.get("ANGLE_instanced_arrays"),l="drawArraysInstancedANGLE",null===c)return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");c[l](o,i,a,s),n.update(a,o,s)}}function Hn(t,e,n){let i;function r(e){if("highp"===e){if(t.getShaderPrecisionFormat(35633,36338).precision>0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const o="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let a=void 0!==n.precision?n.precision:"highp";const s=r(a);s!==a&&(console.warn("THREE.WebGLRenderer:",a,"not supported, using",s,"instead."),a=s);const c=!0===n.logarithmicDepthBuffer,l=t.getParameter(34930),h=t.getParameter(35660),u=t.getParameter(3379),d=t.getParameter(34076),p=t.getParameter(34921),f=t.getParameter(36347),m=t.getParameter(36348),g=t.getParameter(36349),v=h>0,y=o||!!e.get("OES_texture_float");return{isWebGL2:o,getMaxAnisotropy:function(){if(void 0!==i)return i;const n=e.get("EXT_texture_filter_anisotropic");return i=null!==n?t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,i},getMaxPrecision:r,precision:a,logarithmicDepthBuffer:c,maxTextures:l,maxVertexTextures:h,maxTextureSize:u,maxCubemapSize:d,maxAttributes:p,maxVertexUniforms:f,maxVaryings:m,maxFragmentUniforms:g,vertexTextures:v,floatFragmentTextures:y,floatVertexTextures:v&&y,maxSamples:o?t.getParameter(36183):0}}function Gn(t){const e=this;let n=null,i=0,r=!1,o=!1;const a=new ie,s=new V,c={value:null,needsUpdate:!1};function l(){c.value!==n&&(c.value=n,c.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function h(t,n,i,r){const o=null!==t?t.length:0;let l=null;if(0!==o){if(l=c.value,!0!==r||null===l){const e=i+4*o,r=n.matrixWorldInverse;s.getNormalMatrix(r),(null===l||l.length0){const a=t.getRenderList(),s=t.getRenderTarget(),c=t.getRenderState(),l=new Ln(o.height/2);return l.fromEquirectangularTexture(t,r),e.set(r,l),t.setRenderTarget(s),t.setRenderList(a),t.setRenderState(c),r.addEventListener("dispose",i),n(l.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}function Wn(t){const e={};return{has:function(n){if(void 0!==e[n])return null!==e[n];let i;switch(n){case"WEBGL_depth_texture":i=t.getExtension("WEBGL_depth_texture")||t.getExtension("MOZ_WEBGL_depth_texture")||t.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":i=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":i=t.getExtension("WEBGL_compressed_texture_s3tc")||t.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":i=t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:i=t.getExtension(n)}return e[n]=i,null!==i},get:function(t){return this.has(t)||console.warn("THREE.WebGLRenderer: "+t+" extension not supported."),e[t]}}}function qn(t,e,n,i){const r=new WeakMap,o=new WeakMap;function a(t){const s=t.target,c=r.get(s);null!==c.index&&e.remove(c.index);for(const t in c.attributes)e.remove(c.attributes[t]);s.removeEventListener("dispose",a),r.delete(s);const l=o.get(c);l&&(e.remove(l),o.delete(c)),i.releaseStatesOfGeometry(c),!0===s.isInstancedBufferGeometry&&delete s._maxInstanceCount,n.memory.geometries--}function s(t){const n=[],i=t.index,r=t.attributes.position;let a=0;if(null!==i){const t=i.array;a=i.version;for(let e=0,i=t.length;e65535?De:Ne)(n,1);s.version=a;const c=o.get(t);c&&e.remove(c),o.set(t,s)}return{get:function(t,e){let i=r.get(e);return i||(e.addEventListener("dispose",a),e.isBufferGeometry?i=e:e.isGeometry&&(void 0===e._bufferGeometry&&(e._bufferGeometry=(new Je).setFromObject(t)),i=e._bufferGeometry),r.set(e,i),n.memory.geometries++,i)},update:function(t){const n=t.attributes;for(const t in n)e.update(n[t],34962);const i=t.morphAttributes;for(const t in i){const n=i[t];for(let t=0,i=n.length;t0)return t;const r=e*n;let o=oi[r];if(void 0===o&&(o=new Float32Array(r),oi[r]=o),0!==e){i.toArray(o,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(o,r)}return o}function ui(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n/gm;function sr(t){return t.replace(ar,cr)}function cr(t,e){const n=kn[e];if(void 0===n)throw new Error("Can not resolve #include <"+e+">");return sr(n)}const lr=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,hr=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function ur(t){return t.replace(hr,pr).replace(lr,dr)}function dr(t,e,n,i){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),pr(t,e,n,i)}function pr(t,e,n,i){let r="";for(let t=parseInt(e);t0?t.gammaFactor:1,p=n.isWebGL2?"":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||"physical"===t.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(t.extensionFragDepth||t.logarithmicDepthBuffer)&&t.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",t.extensionDrawBuffers&&t.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(t.extensionShaderTextureLOD||t.envMap)&&t.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(ir).join("\n")}(n),f=function(t){const e=[];for(const n in t){const i=t[n];!1!==i&&e.push("#define "+n+" "+i)}return e.join("\n")}(o),m=r.createProgram();let g,v,y=n.glslVersion?"#version "+n.glslVersion+"\n":"";n.isRawShaderMaterial?(g=[f].filter(ir).join("\n"),g.length>0&&(g+="\n"),v=[p,f].filter(ir).join("\n"),v.length>0&&(v+="\n")):(g=[fr(n),"#define SHADER_NAME "+n.shaderName,f,n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+d,"#define MAX_BONES "+n.maxBones,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+h:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.useVertexTexture?"#define BONE_TEXTURE":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+c:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(ir).join("\n"),v=[p,fr(n),"#define SHADER_NAME "+n.shaderName,f,n.alphaTest?"#define ALPHATEST "+n.alphaTest+(n.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+d,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+l:"",n.envMap?"#define "+h:"",n.envMap?"#define "+u:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.sheen?"#define USE_SHEEN":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+c:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?kn.tonemapping_pars_fragment:"",0!==n.toneMapping?nr("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",kn.encodings_pars_fragment,n.map?tr("mapTexelToLinear",n.mapEncoding):"",n.matcap?tr("matcapTexelToLinear",n.matcapEncoding):"",n.envMap?tr("envMapTexelToLinear",n.envMapEncoding):"",n.emissiveMap?tr("emissiveMapTexelToLinear",n.emissiveMapEncoding):"",n.lightMap?tr("lightMapTexelToLinear",n.lightMapEncoding):"",er("linearToOutputTexel",n.outputEncoding),n.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(ir).join("\n")),a=sr(a),a=rr(a,n),a=or(a,n),s=sr(s),s=rr(s,n),s=or(s,n),a=ur(a),s=ur(s),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(y="#version 300 es\n",g=["#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+g,v=["#define varying in",n.glslVersion===B?"":"out highp vec4 pc_fragColor;",n.glslVersion===B?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+v);const b=y+v+s,x=Ji(r,35633,y+g+a),_=Ji(r,35632,b);if(r.attachShader(m,x),r.attachShader(m,_),void 0!==n.index0AttributeName?r.bindAttribLocation(m,0,n.index0AttributeName):!0===n.morphTargets&&r.bindAttribLocation(m,0,"position"),r.linkProgram(m),t.debug.checkShaderErrors){const t=r.getProgramInfoLog(m).trim(),e=r.getShaderInfoLog(x).trim(),n=r.getShaderInfoLog(_).trim();let i=!0,o=!0;if(!1===r.getProgramParameter(m,35714)){i=!1;const e=Ki(r,x,"vertex"),n=Ki(r,_,"fragment");console.error("THREE.WebGLProgram: shader error: ",r.getError(),"35715",r.getProgramParameter(m,35715),"gl.getProgramInfoLog",t,e,n)}else""!==t?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",t):""!==e&&""!==n||(o=!1);o&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:g},fragmentShader:{log:n,prefix:v}})}let w,M;return r.deleteShader(x),r.deleteShader(_),this.getUniforms=function(){return void 0===w&&(w=new Zi(r,m)),w},this.getAttributes=function(){return void 0===M&&(M=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r0,maxBones:w,useVertexTexture:l,morphTargets:r.morphTargets,morphNormals:r.morphNormals,maxMorphTargets:t.maxMorphTargets,maxMorphNormals:t.maxMorphNormals,numDirLights:a.directional.length,numPointLights:a.point.length,numSpotLights:a.spot.length,numRectAreaLights:a.rectArea.length,numHemiLights:a.hemi.length,numDirLightShadows:a.directionalShadowMap.length,numPointLightShadows:a.pointShadowMap.length,numSpotLightShadows:a.spotShadowMap.length,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:r.dithering,shadowMapEnabled:t.shadowMap.enabled&&f.length>0,shadowMapType:t.shadowMap.type,toneMapping:r.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:r.premultipliedAlpha,alphaTest:r.alphaTest,doubleSided:2===r.side,flipSided:1===r.side,depthPacking:void 0!==r.depthPacking&&r.depthPacking,index0AttributeName:r.index0AttributeName,extensionDerivatives:r.extensions&&r.extensions.derivatives,extensionFragDepth:r.extensions&&r.extensions.fragDepth,extensionDrawBuffers:r.extensions&&r.extensions.drawBuffers,extensionShaderTextureLOD:r.extensions&&r.extensions.shaderTextureLOD,rendererExtensionFragDepth:s||n.has("EXT_frag_depth"),rendererExtensionDrawBuffers:s||n.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:s||n.has("EXT_shader_texture_lod"),customProgramCacheKey:r.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t1&&i.sort(t||yr),r.length>1&&r.sort(e||br)}}}function _r(t){let e=new WeakMap;return{get:function(n,i){const r=e.get(n);let o;return void 0===r?(o=new xr(t),e.set(n,new WeakMap),e.get(n).set(i,o)):(o=r.get(i),void 0===o&&(o=new xr(t),r.set(i,o))),o},dispose:function(){e=new WeakMap}}}function wr(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":n={direction:new tt,color:new _e};break;case"SpotLight":n={position:new tt,direction:new tt,color:new _e,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new tt,color:new _e,distance:0,decay:0};break;case"HemisphereLight":n={direction:new tt,skyColor:new _e,groundColor:new _e};break;case"RectAreaLight":n={color:new _e,position:new tt,halfWidth:new tt,halfHeight:new tt}}return t[e.id]=n,n}}}let Mr=0;function Sr(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function Er(t,e){const n=new wr,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case"DirectionalLight":case"SpotLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new G};break;case"PointLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new G,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)r.probe.push(new tt);const o=new tt,a=new Lt,s=new Lt;return{setup:function(c,l,h){let u=0,d=0,p=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let f=0,m=0,g=0,v=0,y=0,b=0,x=0,_=0;const w=h.matrixWorldInverse;c.sort(Sr);for(let t=0,e=c.length;t0&&(e.isWebGL2||!0===t.has("OES_texture_float_linear")?(r.rectAreaLTC1=zn.LTC_FLOAT_1,r.rectAreaLTC2=zn.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=zn.LTC_HALF_1,r.rectAreaLTC2=zn.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=u,r.ambient[1]=d,r.ambient[2]=p;const M=r.hash;M.directionalLength===f&&M.pointLength===m&&M.spotLength===g&&M.rectAreaLength===v&&M.hemiLength===y&&M.numDirectionalShadows===b&&M.numPointShadows===x&&M.numSpotShadows===_||(r.directional.length=f,r.spot.length=g,r.rectArea.length=v,r.point.length=m,r.hemi.length=y,r.directionalShadow.length=b,r.directionalShadowMap.length=b,r.pointShadow.length=x,r.pointShadowMap.length=x,r.spotShadow.length=_,r.spotShadowMap.length=_,r.directionalShadowMatrix.length=b,r.pointShadowMatrix.length=x,r.spotShadowMatrix.length=_,M.directionalLength=f,M.pointLength=m,M.spotLength=g,M.rectAreaLength=v,M.hemiLength=y,M.numDirectionalShadows=b,M.numPointShadows=x,M.numSpotShadows=_,r.version=Mr++)},state:r}}function Tr(t,e){const n=new Er(t,e),i=[],r=[];return{init:function(){i.length=0,r.length=0},state:{lightsArray:i,shadowsArray:r,lights:n},setupLights:function(t){n.setup(i,r,t)},pushLight:function(t){i.push(t)},pushShadow:function(t){r.push(t)}}}function Ar(t,e){let n=new WeakMap;return{get:function(i,r){let o;return!1===n.has(i)?(o=new Tr(t,e),n.set(i,new WeakMap),n.get(i).set(r,o)):!1===n.get(i).has(r)?(o=new Tr(t,e),n.get(i).set(r,o)):o=n.get(i).get(r),o},dispose:function(){n=new WeakMap}}}function Lr(t){Se.call(this),this.type="MeshDepthMaterial",this.depthPacking=3200,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}function Pr(t){Se.call(this),this.type="MeshDistanceMaterial",this.referencePosition=new tt,this.nearDistance=1,this.farDistance=1e3,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}Lr.prototype=Object.create(Se.prototype),Lr.prototype.constructor=Lr,Lr.prototype.isMeshDepthMaterial=!0,Lr.prototype.copy=function(t){return Se.prototype.copy.call(this,t),this.depthPacking=t.depthPacking,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this},Pr.prototype=Object.create(Se.prototype),Pr.prototype.constructor=Pr,Pr.prototype.isMeshDistanceMaterial=!0,Pr.prototype.copy=function(t){return Se.prototype.copy.call(this,t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this};function Cr(t,e,n){let i=new On;const r=new G,o=new G,a=new J,s=[],c=[],l={},h={0:1,1:0,2:2},u=new wn({defines:{SAMPLE_RATE:2/8,HALF_SAMPLE_RATE:1/8},uniforms:{shadow_pass:{value:null},resolution:{value:new G},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),d=u.clone();d.defines.HORIZONAL_PASS=1;const p=new Je;p.setAttribute("position",new Le(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const g=new mn(p,u),v=this;function y(n,i){const r=e.update(g);u.uniforms.shadow_pass.value=n.map.texture,u.uniforms.resolution.value=n.mapSize,u.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,u,g,null),d.uniforms.shadow_pass.value=n.mapPass.texture,d.uniforms.resolution.value=n.mapSize,d.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,d,g,null)}function b(t,e,n){const i=t<<0|e<<1|n<<2;let r=s[i];return void 0===r&&(r=new Lr({depthPacking:3201,morphTargets:t,skinning:e}),s[i]=r),r}function x(t,e,n){const i=t<<0|e<<1|n<<2;let r=c[i];return void 0===r&&(r=new Pr({morphTargets:t,skinning:e}),c[i]=r),r}function _(e,n,i,r,o,a,s){let c=null,u=b,d=e.customDepthMaterial;if(!0===r.isPointLight&&(u=x,d=e.customDistanceMaterial),void 0===d){let t=!1;!0===i.morphTargets&&(t=n.morphAttributes&&n.morphAttributes.position&&n.morphAttributes.position.length>0);let r=!1;!0===e.isSkinnedMesh&&(!0===i.skinning?r=!0:console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",e));c=u(t,r,!0===e.isInstancedMesh)}else c=d;if(t.localClippingEnabled&&!0===i.clipShadows&&0!==i.clippingPlanes.length){const t=c.uuid,e=i.uuid;let n=l[t];void 0===n&&(n={},l[t]=n);let r=n[e];void 0===r&&(r=c.clone(),n[e]=r),c=r}return c.visible=i.visible,c.wireframe=i.wireframe,c.side=3===s?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:h[i.side],c.clipShadows=i.clipShadows,c.clippingPlanes=i.clippingPlanes,c.clipIntersection=i.clipIntersection,c.wireframeLinewidth=i.wireframeLinewidth,c.linewidth=i.linewidth,!0===r.isPointLight&&!0===c.isMeshDistanceMaterial&&(c.referencePosition.setFromMatrixPosition(r.matrixWorld),c.nearDistance=o,c.farDistance=a),c}function w(n,r,o,a,s){if(!1===n.visible)return;if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===s)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let c=0,l=e.length;cn||r.y>n)&&(r.x>n&&(o.x=Math.floor(n/p.x),r.x=o.x*p.x,u.mapSize.x=o.x),r.y>n&&(o.y=Math.floor(n/p.y),r.y=o.y*p.y,u.mapSize.y=o.y)),null===u.map&&!u.isPointLightShadow&&3===this.type){const t={minFilter:m,magFilter:m,format:S};u.map=new $(r.x,r.y,t),u.map.texture.name=h.name+".shadowMap",u.mapPass=new $(r.x,r.y,t),u.camera.updateProjectionMatrix()}if(null===u.map){const t={minFilter:f,magFilter:f,format:S};u.map=new $(r.x,r.y,t),u.map.texture.name=h.name+".shadowMap",u.camera.updateProjectionMatrix()}t.setRenderTarget(u.map),t.clear();const g=u.getViewportCount();for(let t=0;t=1):-1!==A.indexOf("OpenGL ES")&&(T=parseFloat(/^OpenGL\ ES\ ([0-9])/.exec(A)[1]),E=T>=2);let L=null,P={};const C=new J,R=new J;function O(e,n,i){const r=new Uint8Array(4),o=t.createTexture();t.bindTexture(e,o),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;ei||t.height>i)&&(r=i/Math.max(t.width,t.height)),r<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?H.floorPowerOfTwo:Math.floor,o=i(r*t.width),a=i(r*t.height);void 0===L&&(L=C(o,a));const s=n?C(o,a):L;s.width=o,s.height=a;return s.getContext("2d").drawImage(t,0,0,o,a),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+o+"x"+a+")."),s}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function O(t){return H.isPowerOfTwo(t.width)&&H.isPowerOfTwo(t.height)}function N(t,e){return t.generateMipmaps&&e&&t.minFilter!==f&&t.minFilter!==m}function I(e,n,r,o){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log(Math.max(r,o))*Math.LOG2E}function D(n,i,r){if(!1===s)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}let o=i;return 6403===i&&(5126===r&&(o=33326),5131===r&&(o=33325),5121===r&&(o=33321)),6407===i&&(5126===r&&(o=34837),5131===r&&(o=34843),5121===r&&(o=32849)),6408===i&&(5126===r&&(o=34836),5131===r&&(o=34842),5121===r&&(o=32856)),33325!==o&&33326!==o&&34842!==o&&34836!==o||e.get("EXT_color_buffer_float"),o}function k(t){return t===f||1004===t||1005===t?9728:9729}function z(e){const n=e.target;n.removeEventListener("dispose",z),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture&&A.delete(n),a.memory.textures--}function B(e){const n=e.target;n.removeEventListener("dispose",B),function(e){const n=i.get(e),r=i.get(e.texture);if(!e)return;void 0!==r.__webglTexture&&t.deleteTexture(r.__webglTexture);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(n.__webglFramebuffer[e]),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer[e]);else t.deleteFramebuffer(n.__webglFramebuffer),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer),n.__webglMultisampledFramebuffer&&t.deleteFramebuffer(n.__webglMultisampledFramebuffer),n.__webglColorRenderbuffer&&t.deleteRenderbuffer(n.__webglColorRenderbuffer),n.__webglDepthRenderbuffer&&t.deleteRenderbuffer(n.__webglDepthRenderbuffer);i.remove(e.texture),i.remove(e)}(n),a.memory.textures--}let F=0;function j(t,e){const r=i.get(t);if(t.isVideoTexture&&function(t){const e=a.render.frame;A.get(t)!==e&&(A.set(t,e),t.update())}(t),t.version>0&&r.__version!==t.version){const n=t.image;if(void 0===n)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==n.complete)return void X(r,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}function U(e,r){const a=i.get(e);e.version>0&&a.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;q(e,i),n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),t.pixelStorei(37440,i.flipY);const a=i&&(i.isCompressedTexture||i.image[0].isCompressedTexture),c=i.image[0]&&i.image[0].isDataTexture,h=[];for(let t=0;t<6;t++)h[t]=a||c?c?i.image[t].image:i.image[t]:R(i.image[t],!1,!0,l);const u=h[0],d=O(u)||s,p=o.convert(i.format),f=o.convert(i.type),m=D(i.internalFormat,p,f);let g;if(W(34067,i,d),a){for(let t=0;t<6;t++){g=h[t].mipmaps;for(let e=0;e1||i.get(o).__currentAnisotropy)&&(t.texParameterf(n,c.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(o.anisotropy,r.getMaxAnisotropy())),i.get(o).__currentAnisotropy=o.anisotropy)}}function q(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",z),e.__webglTexture=t.createTexture(),a.memory.textures++)}function X(e,i,r){let a=3553;i.isDataTexture2DArray&&(a=35866),i.isDataTexture3D&&(a=32879),q(e,i),n.activeTexture(33984+r),n.bindTexture(a,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment);const c=function(t){return!s&&(t.wrapS!==d||t.wrapT!==d||t.minFilter!==f&&t.minFilter!==m)}(i)&&!1===O(i.image),l=R(i.image,c,!1,h),u=O(l)||s,p=o.convert(i.format);let g,v=o.convert(i.type),_=D(i.internalFormat,p,v);W(a,i,u);const A=i.mipmaps;if(i.isDepthTexture)_=6402,s?_=i.type===x?36012:i.type===b?33190:i.type===w?35056:33189:i.type===x&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),i.format===E&&6402===_&&i.type!==y&&i.type!==b&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),i.type=y,v=o.convert(i.type)),i.format===T&&6402===_&&(_=34041,i.type!==w&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),i.type=w,v=o.convert(i.type))),n.texImage2D(3553,0,_,l.width,l.height,0,p,v,null);else if(i.isDataTexture)if(A.length>0&&u){for(let t=0,e=A.length;t0&&u){for(let t=0,e=A.length;t=c&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+c),F+=1,t},this.resetTextureUnits=function(){F=0},this.setTexture2D=j,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?X(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?X(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=U,this.setupRenderTarget=function(e){const r=i.get(e),c=i.get(e.texture);e.addEventListener("dispose",B),c.__webglTexture=t.createTexture(),a.memory.textures++;const l=!0===e.isWebGLCubeRenderTarget,h=!0===e.isWebGLMultisampleRenderTarget,u=O(e)||s;if(!s||e.texture.format!==M||e.texture.type!==x&&e.texture.type!==_||(e.texture.format=S,console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")),l){r.__webglFramebuffer=[];for(let e=0;e<6;e++)r.__webglFramebuffer[e]=t.createFramebuffer()}else if(r.__webglFramebuffer=t.createFramebuffer(),h)if(s){r.__webglMultisampledFramebuffer=t.createFramebuffer(),r.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,r.__webglColorRenderbuffer);const n=o.convert(e.texture.format),i=o.convert(e.texture.type),a=D(e.texture.internalFormat,n,i),s=$(e);t.renderbufferStorageMultisample(36161,s,a,e.width,e.height),t.bindFramebuffer(36160,r.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,r.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer&&(r.__webglDepthRenderbuffer=t.createRenderbuffer(),Z(r.__webglDepthRenderbuffer,e,!0)),t.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(l){n.bindTexture(34067,c.__webglTexture),W(34067,e.texture,u);for(let t=0;t<6;t++)Y(r.__webglFramebuffer[t],e,36064,34069+t);N(e.texture,u)&&I(34067,e.texture,e.width,e.height),n.bindTexture(34067,null)}else n.bindTexture(3553,c.__webglTexture),W(3553,e.texture,u),Y(r.__webglFramebuffer,e,36064,3553),N(e.texture,u)&&I(3553,e.texture,e.width,e.height),n.bindTexture(3553,null);e.depthBuffer&&J(e)},this.updateRenderTargetMipmap=function(t){const e=t.texture;if(N(e,O(t)||s)){const r=t.isWebGLCubeRenderTarget?34067:3553,o=i.get(e).__webglTexture;n.bindTexture(r,o),I(r,e,t.width,t.height),n.bindTexture(r,null)}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(s){const n=i.get(e);t.bindFramebuffer(36008,n.__webglMultisampledFramebuffer),t.bindFramebuffer(36009,n.__webglFramebuffer);const r=e.width,o=e.height;let a=16384;e.depthBuffer&&(a|=256),e.stencilBuffer&&(a|=1024),t.blitFramebuffer(0,0,r,o,0,0,r,o,a,9728),t.bindFramebuffer(36160,n.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")},this.safeSetTexture2D=function(t,e){t&&t.isWebGLRenderTarget&&(!1===Q&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),Q=!0),t=t.texture),j(t,e)},this.safeSetTextureCube=function(t,e){t&&t.isWebGLCubeRenderTarget&&(!1===K&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),K=!0),t=t.texture),U(t,e)}}function Nr(t,e,n){const i=n.isWebGL2;return{convert:function(t){let n;if(t===v)return 5121;if(1017===t)return 32819;if(1018===t)return 32820;if(1019===t)return 33635;if(1010===t)return 5120;if(1011===t)return 5122;if(t===y)return 5123;if(1013===t)return 5124;if(t===b)return 5125;if(t===x)return 5126;if(t===_)return i?5131:(n=e.get("OES_texture_half_float"),null!==n?n.HALF_FLOAT_OES:null);if(1021===t)return 6406;if(t===M)return 6407;if(t===S)return 6408;if(1024===t)return 6409;if(1025===t)return 6410;if(t===E)return 6402;if(t===T)return 34041;if(1028===t)return 6403;if(1029===t)return 36244;if(1030===t)return 33319;if(1031===t)return 33320;if(1032===t)return 36248;if(1033===t)return 36249;if(33776===t||33777===t||33778===t||33779===t){if(n=e.get("WEBGL_compressed_texture_s3tc"),null===n)return null;if(33776===t)return n.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===t)return n.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===t)return n.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===t)return n.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===t||35841===t||35842===t||35843===t){if(n=e.get("WEBGL_compressed_texture_pvrtc"),null===n)return null;if(35840===t)return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===t)return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===t)return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===t)return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===t)return n=e.get("WEBGL_compressed_texture_etc1"),null!==n?n.COMPRESSED_RGB_ETC1_WEBGL:null;if((37492===t||37496===t)&&(n=e.get("WEBGL_compressed_texture_etc"),null!==n)){if(37492===t)return n.COMPRESSED_RGB8_ETC2;if(37496===t)return n.COMPRESSED_RGBA8_ETC2_EAC}return 37808===t||37809===t||37810===t||37811===t||37812===t||37813===t||37814===t||37815===t||37816===t||37817===t||37818===t||37819===t||37820===t||37821===t||37840===t||37841===t||37842===t||37843===t||37844===t||37845===t||37846===t||37847===t||37848===t||37849===t||37850===t||37851===t||37852===t||37853===t?(n=e.get("WEBGL_compressed_texture_astc"),null!==n?t:null):36492===t?(n=e.get("EXT_texture_compression_bptc"),null!==n?t:null):t===w?i?34042:(n=e.get("WEBGL_depth_texture"),null!==n?n.UNSIGNED_INT_24_8_WEBGL:null):void 0}}}function Ir(t=[]){Sn.call(this),this.cameras=t}function Dr(){Kt.call(this),this.type="Group"}function kr(){this._targetRay=null,this._grip=null,this._hand=null}function zr(t,e){const n=this;let i=null,r=1,o=null,a="local-floor",s=null;const c=[],l=new Map,h=new Sn;h.layers.enable(1),h.viewport=new J;const u=new Sn;u.layers.enable(2),u.viewport=new J;const d=[h,u],p=new Ir;p.layers.enable(1),p.layers.enable(2);let f=null,m=null;function g(t){const e=l.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function v(){l.forEach((function(t,e){t.disconnect(e)})),l.clear(),t.setFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),S.stop(),n.isPresenting=!1,n.dispatchEvent({type:"sessionend"})}function y(t){o=t,S.setContext(i),S.start(),n.isPresenting=!0,n.dispatchEvent({type:"sessionstart"})}function b(t){const e=i.inputSources;for(let t=0;t0&&Ct(o,t,e),a.length>0&&Ct(a,t,e),!0===t.isScene&&t.onAfterRender(p,t,e),null!==b&&(et.updateRenderTargetMipmap(b),et.updateMultisampleRenderTarget(b)),$.buffers.depth.setTest(!0),$.buffers.depth.setMask(!0),$.buffers.color.setMask(!0),$.setPolygonOffset(!1),u=null,d=null},this.setFramebuffer=function(t){m!==t&&null===b&&vt.bindFramebuffer(36160,t),m=t},this.getActiveCubeFace=function(){return g},this.getActiveMipmapLevel=function(){return y},this.getRenderList=function(){return u},this.setRenderList=function(t){u=t},this.getRenderState=function(){return d},this.setRenderState=function(t){d=t},this.getRenderTarget=function(){return b},this.setRenderTarget=function(t,e=0,n=0){b=t,g=e,y=n,t&&void 0===K.get(t).__webglFramebuffer&&et.setupRenderTarget(t);let i=m,r=!1;if(t){const n=K.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=n[e],r=!0):i=t.isWebGLMultisampleRenderTarget?K.get(t).__webglMultisampledFramebuffer:n,A.copy(t.viewport),L.copy(t.scissor),P=t.scissorTest}else A.copy(k).multiplyScalar(O).floor(),L.copy(z).multiplyScalar(O).floor(),P=B;if(w!==i&&(vt.bindFramebuffer(36160,i),w=i),$.viewport(A),$.scissor(L),$.setScissorTest(P),r){const i=K.get(t.texture);vt.framebufferTexture2D(36160,36064,34069+e,i.__webglTexture,n)}},this.readRenderTargetPixels=function(t,e,n,i,r,o,a){if(!t||!t.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let s=K.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==a&&(s=s[a]),s){let a=!1;s!==w&&(vt.bindFramebuffer(36160,s),a=!0);try{const s=t.texture,c=s.format,l=s.type;if(c!==S&&mt.convert(c)!==vt.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");if(!(l===v||mt.convert(l)===vt.getParameter(35738)||l===x&&(Z.isWebGL2||Y.get("OES_texture_float")||Y.get("WEBGL_color_buffer_float"))||l===_&&(Z.isWebGL2?Y.get("EXT_color_buffer_float"):Y.get("EXT_color_buffer_half_float"))))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");36053===vt.checkFramebufferStatus(36160)?e>=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&vt.readPixels(e,n,i,r,mt.convert(c),mt.convert(l),o):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{a&&vt.bindFramebuffer(36160,w)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),o=Math.floor(e.image.height*i),a=mt.convert(e.format);et.setTexture2D(e,0),vt.copyTexImage2D(3553,n,a,t.x,t.y,r,o,0),$.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,o=e.image.height,a=mt.convert(n.format),s=mt.convert(n.type);et.setTexture2D(n,0),vt.pixelStorei(37440,n.flipY),vt.pixelStorei(37441,n.premultiplyAlpha),vt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?vt.texSubImage2D(3553,i,t.x,t.y,r,o,a,s,e.image.data):e.isCompressedTexture?vt.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,a,e.mipmaps[0].data):vt.texSubImage2D(3553,i,t.x,t.y,a,s,e.image),0===i&&n.generateMipmaps&&vt.generateMipmap(3553),$.unbindTexture()},this.initTexture=function(t){et.setTexture2D(t,0),$.unbindTexture()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}function jr(t){Fr.call(this,t)}Ir.prototype=Object.assign(Object.create(Sn.prototype),{constructor:Ir,isArrayCamera:!0}),Dr.prototype=Object.assign(Object.create(Kt.prototype),{constructor:Dr,isGroup:!0}),Object.assign(kr.prototype,{constructor:kr,getHandSpace:function(){if(null===this._hand&&(this._hand=new Dr,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints=[],this._hand.inputState={pinching:!1},window.XRHand))for(let t=0;t<=window.XRHand.LITTLE_PHALANX_TIP;t++){const t=new Dr;t.matrixAutoUpdate=!1,t.visible=!1,this._hand.joints.push(t),this._hand.add(t)}return this._hand},getTargetRaySpace:function(){return null===this._targetRay&&(this._targetRay=new Dr,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1),this._targetRay},getGripSpace:function(){return null===this._grip&&(this._grip=new Dr,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1),this._grip},dispatchEvent:function(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this},disconnect:function(t){return this.dispatchEvent({type:"disconnected",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this},update:function(t,e,n){let i=null,r=null,o=null;const a=this._targetRay,s=this._grip,c=this._hand;if(t&&"visible-blurred"!==e.session.visibilityState)if(c&&t.hand){o=!0;for(let i=0;i<=window.XRHand.LITTLE_PHALANX_TIP;i++)if(t.hand[i]){const r=e.getJointPose(t.hand[i],n),o=c.joints[i];null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.jointRadius=r.radius),o.visible=null!==r;const a=c.joints[window.XRHand.INDEX_PHALANX_TIP],s=c.joints[window.XRHand.THUMB_PHALANX_TIP],l=a.position.distanceTo(s.position),h=.02,u=.005;c.inputState.pinching&&l>h+u?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!c.inputState.pinching&&l<=h-u&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}}else null!==a&&(i=e.getPose(t.targetRaySpace,n),null!==i&&(a.matrix.fromArray(i.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale))),null!==s&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),null!==r&&(s.matrix.fromArray(r.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale)));return null!==a&&(a.visible=null!==i),null!==s&&(s.visible=null!==r),null!==c&&(c.visible=null!==o),this}}),Object.assign(zr.prototype,F.prototype),jr.prototype=Object.assign(Object.create(Fr.prototype),{constructor:jr,isWebGL1Renderer:!0});class Ur extends Kt{constructor(){super(),Object.defineProperty(this,"isScene",{value:!0}),this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.background&&(e.object.background=this.background.toJSON(t)),null!==this.environment&&(e.object.environment=this.environment.toJSON(t)),null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}function Hr(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=k,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=H.generateUUID()}Object.defineProperty(Hr.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(Hr.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;it.far||e.push({distance:s,point:Xr.clone(),uv:fe.getUV(Xr,Kr,to,eo,no,io,ro,new G),face:null,object:this})},copy:function(t){return Kt.prototype.copy.call(this,t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}});const so=new tt,co=new tt;function lo(){Kt.call(this),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}function ho(t,e){t&&t.isGeometry&&console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."),mn.call(this,t,e),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new Lt,this.bindMatrixInverse=new Lt}function uo(){Kt.call(this),this.type="Bone"}lo.prototype=Object.assign(Object.create(Kt.prototype),{constructor:lo,isLOD:!0,copy:function(t){Kt.prototype.copy.call(this,t,!1);const e=t.levels;for(let t=0,n=e.length;t0){let n,i;for(n=1,i=e.length;n0){so.setFromMatrixPosition(this.matrixWorld);const n=t.ray.origin.distanceTo(so);this.getObjectForDistance(n).raycast(t,e)}},update:function(t){const e=this.levels;if(e.length>1){so.setFromMatrixPosition(t.matrixWorld),co.setFromMatrixPosition(this.matrixWorld);const n=so.distanceTo(co)/t.zoom;let i,r;for(e[0].object.visible=!0,i=1,r=e.length;i=e[i].distance;i++)e[i-1].object.visible=!1,e[i].object.visible=!0;for(this._currentLevel=i-1;ia)continue;h.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(h);dt.far||e.push({distance:d,point:l.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}else for(let n=0,i=r.count-1;na)continue;h.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(h);it.far||e.push({distance:i,point:l.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else if(n.isGeometry){const i=n.vertices,r=i.length;for(let n=0;na)continue;h.applyMatrix4(this.matrixWorld);const r=t.ray.origin.distanceTo(h);rt.far||e.push({distance:r,point:l.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}},updateMorphTargets:function(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}});const Lo=new tt,Po=new tt;function Co(t,e){Ao.call(this,t,e),this.type="LineSegments"}function Ro(t,e){Ao.call(this,t,e),this.type="LineLoop"}function Oo(t){Se.call(this),this.type="PointsMaterial",this.color=new _e(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.morphTargets=!1,this.setValues(t)}Co.prototype=Object.assign(Object.create(Ao.prototype),{constructor:Co,isLineSegments:!0,computeLineDistances:function(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;tr.far)return;o.push({distance:c,distanceToRay:Math.sqrt(s),point:n,index:e,face:null,object:a})}}function Fo(t,e,n,i,r,o,a,s,c){Y.call(this,t,e,n,i,r,o,a,s,c),this.format=void 0!==a?a:M,this.minFilter=void 0!==o?o:m,this.magFilter=void 0!==r?r:m,this.generateMipmaps=!1;const l=this;"requestVideoFrameCallback"in t&&t.requestVideoFrameCallback((function e(){l.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}function jo(t,e,n,i,r,o,a,s,c,l,h,u){Y.call(this,null,o,a,s,c,l,i,r,h,u),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}function Uo(t,e,n,i,r,o,a,s,c){Y.call(this,t,e,n,i,r,o,a,s,c),this.needsUpdate=!0}function Ho(t,e,n,i,r,o,a,s,c,l){if((l=void 0!==l?l:E)!==E&&l!==T)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&l===E&&(n=y),void 0===n&&l===T&&(n=w),Y.call(this,null,i,r,o,a,s,l,n,c),this.image={width:t,height:e},this.magFilter=void 0!==a?a:f,this.minFilter=void 0!==s?s:f,this.flipY=!1,this.generateMipmaps=!1}zo.prototype=Object.assign(Object.create(Kt.prototype),{constructor:zo,isPoints:!0,copy:function(t){return Kt.prototype.copy.call(this,t),this.material=t.material,this.geometry=t.geometry,this},raycast:function(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Points.threshold;if(null===n.boundingSphere&&n.computeBoundingSphere(),Do.copy(n.boundingSphere),Do.applyMatrix4(i),Do.radius+=r,!1===t.ray.intersectsSphere(Do))return;No.copy(i).invert(),Io.copy(t.ray).applyMatrix4(No);const o=r/((this.scale.x+this.scale.y+this.scale.z)/3),a=o*o;if(n.isBufferGeometry){const r=n.index,o=n.attributes.position;if(null!==r){const n=r.array;for(let r=0,s=n.length;r0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}),Fo.prototype=Object.assign(Object.create(Y.prototype),{constructor:Fo,clone:function(){return new this.constructor(this.image).copy(this)},isVideoTexture:!0,update:function(){const t=this.image;!1==="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}),jo.prototype=Object.create(Y.prototype),jo.prototype.constructor=jo,jo.prototype.isCompressedTexture=!0,Uo.prototype=Object.create(Y.prototype),Uo.prototype.constructor=Uo,Uo.prototype.isCanvasTexture=!0,Ho.prototype=Object.create(Y.prototype),Ho.prototype.constructor=Ho,Ho.prototype.isDepthTexture=!0;let Go=0;const Vo=new Lt,Wo=new Kt,qo=new tt;function Xo(){Object.defineProperty(this,"id",{value:Go+=2}),this.uuid=H.generateUUID(),this.name="",this.type="Geometry",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.elementsNeedUpdate=!1,this.verticesNeedUpdate=!1,this.uvsNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.lineDistancesNeedUpdate=!1,this.groupsNeedUpdate=!1}Xo.prototype=Object.assign(Object.create(F.prototype),{constructor:Xo,isGeometry:!0,applyMatrix4:function(t){const e=(new V).getNormalMatrix(t);for(let e=0,n=this.vertices.length;e0)for(let t=0;t0&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){this.computeFaceNormals();for(let t=0,e=this.faces.length;t0&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){for(let t=0,e=this.faces.length;t=0;t--){const e=o[t];this.faces.splice(e,1);for(let t=0,n=this.faceVertexUvs.length;t0,s=e.vertexNormals.length>0,c=1!==e.color.r||1!==e.color.g||1!==e.color.b,p=e.vertexColors.length>0;let f=0;if(f=l(f,0,0),f=l(f,1,i),f=l(f,2,r),f=l(f,3,o),f=l(f,4,a),f=l(f,5,s),f=l(f,6,c),f=l(f,7,p),n.push(f),n.push(e.a,e.b,e.c),n.push(e.materialIndex),o){const e=this.faceVertexUvs[0][t];n.push(d(e[0]),d(e[1]),d(e[2]))}if(a&&n.push(h(e.normal)),s){const t=e.vertexNormals;n.push(h(t[0]),h(t[1]),h(t[2]))}if(c&&n.push(u(e.color)),p){const t=e.vertexColors;n.push(u(t[0]),u(t[1]),u(t[2]))}}function l(t,e,n){return n?t|1<0&&(t.data.colors=o),s.length>0&&(t.data.uvs=[s]),t.data.faces=n,t},clone:function(){return(new Xo).copy(this)},copy:function(t){this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=t.name;const e=t.vertices;for(let t=0,n=e.length;t0&&v(!0),e>0&&v(!1)),this.setIndex(l),this.setAttribute("position",new ze(h,3)),this.setAttribute("normal",new ze(u,3)),this.setAttribute("uv",new ze(d,2))}}new tt,new tt,new tt,new fe;const Zo=function(t,e,n){n=n||2;const i=e&&e.length,r=i?e[0]*n:t.length;let o=Jo(t,0,r,n,!0);const a=[];if(!o||o.next===o.prev)return a;let s,c,l,h,u,d,p;if(i&&(o=function(t,e,n,i){const r=[];let o,a,s,c,l;for(o=0,a=e.length;o80*n){s=l=t[0],c=h=t[1];for(let e=n;el&&(l=u),d>h&&(h=d);p=Math.max(l-s,h-c),p=0!==p?1/p:0}return Qo(o,a,n,s,c,p),a};function Jo(t,e,n,i,r){let o,a;if(r===function(t,e,n,i){let r=0;for(let o=e,a=n-i;o0)for(o=e;o=e;o-=i)a=va(o,t[o],t[o+1],a);return a&&ua(a,a.next)&&(ya(a),a=a.next),a}function $o(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!ua(i,i.next)&&0!==ha(i.prev,i,i.next))i=i.next;else{if(ya(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function Qo(t,e,n,i,r,o,a){if(!t)return;!a&&o&&function(t,e,n,i){let r=t;do{null===r.z&&(r.z=aa(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,o,a,s,c,l=1;do{for(n=t,t=null,o=null,a=0;n;){for(a++,i=n,s=0,e=0;e0||c>0&&i;)0!==s&&(0===c||!i||n.z<=i.z)?(r=n,n=n.nextZ,s--):(r=i,i=i.nextZ,c--),o?o.nextZ=r:t=r,r.prevZ=o,o=r;n=i}o.nextZ=null,l*=2}while(a>1)}(r)}(t,i,r,o);let s,c,l=t;for(;t.prev!==t.next;)if(s=t.prev,c=t.next,o?ta(t,i,r,o):Ko(t))e.push(s.i/n),e.push(t.i/n),e.push(c.i/n),ya(t),t=c.next,l=c.next;else if((t=c)===l){a?1===a?Qo(t=ea($o(t),e,n),e,n,i,r,o,2):2===a&&na(t,e,n,i,r,o):Qo($o(t),e,n,i,r,o,1);break}}function Ko(t){const e=t.prev,n=t,i=t.next;if(ha(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(ca(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&ha(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function ta(t,e,n,i){const r=t.prev,o=t,a=t.next;if(ha(r,o,a)>=0)return!1;const s=r.xo.x?r.x>a.x?r.x:a.x:o.x>a.x?o.x:a.x,h=r.y>o.y?r.y>a.y?r.y:a.y:o.y>a.y?o.y:a.y,u=aa(s,c,e,n,i),d=aa(l,h,e,n,i);let p=t.prevZ,f=t.nextZ;for(;p&&p.z>=u&&f&&f.z<=d;){if(p!==t.prev&&p!==t.next&&ca(r.x,r.y,o.x,o.y,a.x,a.y,p.x,p.y)&&ha(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,f!==t.prev&&f!==t.next&&ca(r.x,r.y,o.x,o.y,a.x,a.y,f.x,f.y)&&ha(f.prev,f,f.next)>=0)return!1;f=f.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&ca(r.x,r.y,o.x,o.y,a.x,a.y,p.x,p.y)&&ha(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;f&&f.z<=d;){if(f!==t.prev&&f!==t.next&&ca(r.x,r.y,o.x,o.y,a.x,a.y,f.x,f.y)&&ha(f.prev,f,f.next)>=0)return!1;f=f.nextZ}return!0}function ea(t,e,n){let i=t;do{const r=i.prev,o=i.next.next;!ua(r,o)&&da(r,i,i.next,o)&&ma(r,o)&&ma(o,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(o.i/n),ya(i),ya(i.next),i=t=o),i=i.next}while(i!==t);return $o(i)}function na(t,e,n,i,r,o){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i&&la(a,t)){let s=ga(a,t);return a=$o(a,a.next),s=$o(s,s.next),Qo(a,e,n,i,r,o),void Qo(s,e,n,i,r,o)}t=t.next}a=a.next}while(a!==t)}function ia(t,e){return t.x-e.x}function ra(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let o,a=-1/0;do{if(r<=n.y&&r>=n.next.y&&n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>a){if(a=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}o=n.x=n.x&&n.x>=c&&i!==n.x&&ca(ro.x||n.x===o.x&&oa(o,n)))&&(o=n,u=h)),n=n.next}while(n!==s);return o}(t,e)){const n=ga(e,t);$o(e,e.next),$o(n,n.next)}}function oa(t,e){return ha(t.prev,t,e.prev)<0&&ha(e.next,t,t.next)<0}function aa(t,e,n,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function sa(t){let e=t,n=t;do{(e.x=0&&(t-a)*(i-s)-(n-a)*(e-s)>=0&&(n-a)*(o-s)-(r-a)*(i-s)>=0}function la(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&da(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(ma(t,e)&&ma(e,t)&&function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,o=(t.y+e.y)/2;do{n.y>o!=n.next.y>o&&n.next.y!==n.y&&r<(n.next.x-n.x)*(o-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(ha(t.prev,t,e.prev)||ha(t,e.prev,e))||ua(t,e)&&ha(t.prev,t,t.next)>0&&ha(e.prev,e,e.next)>0)}function ha(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function ua(t,e){return t.x===e.x&&t.y===e.y}function da(t,e,n,i){const r=fa(ha(t,e,n)),o=fa(ha(t,e,i)),a=fa(ha(n,i,t)),s=fa(ha(n,i,e));return r!==o&&a!==s||(!(0!==r||!pa(t,n,e))||(!(0!==o||!pa(t,i,e))||(!(0!==a||!pa(n,t,i))||!(0!==s||!pa(n,e,i)))))}function pa(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function fa(t){return t>0?1:t<0?-1:0}function ma(t,e){return ha(t.prev,t,t.next)<0?ha(t,e,t.next)>=0&&ha(t,t.prev,e)>=0:ha(t,e,t.prev)<0||ha(t,t.next,e)<0}function ga(t,e){const n=new ba(t.i,t.x,t.y),i=new ba(e.i,e.x,e.y),r=t.next,o=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,o.next=i,i.prev=o,i}function va(t,e,n,i){const r=new ba(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function ya(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function ba(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}const xa={area:function(t){const e=t.length;let n=0;for(let i=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function wa(t,e){for(let n=0;nNumber.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(c*c+l*l),p=e.x-s/u,f=e.y+a/u,m=((n.x-l/d-p)*l-(n.y+c/d-f)*c)/(a*l-s*c);i=p+a*m-t.x,r=f+s*m-t.y;const g=i*i+r*r;if(g<=2)return new G(i,r);o=Math.sqrt(g/2)}else{let t=!1;a>Number.EPSILON?c>Number.EPSILON&&(t=!0):a<-Number.EPSILON?c<-Number.EPSILON&&(t=!0):Math.sign(s)===Math.sign(l)&&(t=!0),t?(i=-s,r=a,o=Math.sqrt(h)):(i=a,r=s,o=Math.sqrt(h/2))}return new G(i/o,r/o)}const R=[];for(let t=0,e=T.length,n=e-1,i=t+1;t=0;t--){const e=t/p,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=T.length;t=0;){const i=n;let r=n-1;r<0&&(r=t.length-1);for(let t=0,n=s+2*p;t=0?(t(i-s,p,h),u.subVectors(l,h)):(t(i+s,p,h),u.subVectors(h,l)),p-s>=0?(t(i,p-s,h),d.subVectors(l,h)):(t(i,p+s,h),d.subVectors(h,l)),c.crossVectors(u,d).normalize(),o.push(c.x,c.y,c.z),a.push(i,p)}}for(let t=0;t0)&&d.push(e,r,c),(t!==n-1||s=i)){c.push(e.times[t]);for(let n=0;no.tracks[t].times[0]&&(s=o.tracks[t].times[0]);for(let t=0;t=i.times[u]){const t=u*c+s,e=t+c-s;d=Ha.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=s,n=c-s;t.evaluate(o),d=Ha.arraySlice(t.resultBuffer,e,n)}if("quaternion"===r){(new K).fromArray(d).normalize().conjugate().toArray(d)}const p=a.times.length;for(let t=0;t=r)break t;{const a=e[1];t=r)break e}o=n,n=0}}for(;n>>1;te;)--o;if(++o,0!==r||o!==i){r>=o&&(o=Math.max(o,1),r=o-1);const t=this.getValueSize();this.times=Ha.arraySlice(n,r,o),this.values=Ha.arraySlice(this.values,r*t,o*t)}return this},validate:function(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let o=null;for(let e=0;e!==r;e++){const i=n[e];if("number"==typeof i&&isNaN(i)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,i),t=!1;break}if(null!==o&&o>i){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,i,o),t=!1;break}o=i}if(void 0!==i&&Ha.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,n),t=!1;break}}return t},optimize:function(){const t=Ha.arraySlice(this.times),e=Ha.arraySlice(this.values),n=this.getValueSize(),i=this.getInterpolation()===P,r=t.length-1;let o=1;for(let a=1;a0){t[o]=t[r];for(let t=r*n,i=o*n,a=0;a!==n;++a)e[i+a]=e[t+a];++o}return o!==t.length?(this.times=Ha.arraySlice(t,0,o),this.values=Ha.arraySlice(e,0,o*n)):(this.times=t,this.values=e),this},clone:function(){const t=Ha.arraySlice(this.times,0),e=Ha.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}),Ya.prototype=Object.assign(Object.create(Xa.prototype),{constructor:Ya,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:A,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),Za.prototype=Object.assign(Object.create(Xa.prototype),{constructor:Za,ValueTypeName:"color"}),Ja.prototype=Object.assign(Object.create(Xa.prototype),{constructor:Ja,ValueTypeName:"number"}),$a.prototype=Object.assign(Object.create(Ga.prototype),{constructor:$a,interpolate_:function(t,e,n,i){const r=this.resultBuffer,o=this.sampleValues,a=this.valueSize,s=(n-e)/(i-e);let c=t*a;for(let t=c+a;c!==t;c+=4)K.slerpFlat(r,0,o,c-a,o,c,s);return r}}),Qa.prototype=Object.assign(Object.create(Xa.prototype),{constructor:Qa,ValueTypeName:"quaternion",DefaultInterpolation:L,InterpolantFactoryMethodLinear:function(t){return new $a(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:void 0}),Ka.prototype=Object.assign(Object.create(Xa.prototype),{constructor:Ka,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:A,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),ts.prototype=Object.assign(Object.create(Xa.prototype),{constructor:ts,ValueTypeName:"vector"}),Object.assign(es,{parse:function(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(ns(n[t]).scale(i));const r=new es(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r},toJSON:function(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(Xa.toJSON(n[t]));return i},CreateFromMorphTargetSequence:function(t,e,n,i){const r=e.length,o=[];for(let t=0;t1){const t=o[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const o=[];for(const t in i)o.push(es.CreateFromMorphTargetSequence(t,i[t],e,n));return o},parseAnimation:function(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const n=function(t,e,n,i,r){if(0!==n.length){const o=[],a=[];Ha.flattenJSON(n,o,a,i),0!==o.length&&r.push(new t(e,o,a))}},i=[],r=t.name||"default",o=t.fps||30,a=t.blendMode;let s=t.length||-1;const c=t.hierarchy||[];for(let t=0;t0||0===t.search(/^data\:image\/jpeg/);r.format=i?M:S,r.needsUpdate=!0,void 0!==e&&e(r)}),n,i),r}}),Object.assign(fs.prototype,{getPoint:function(){return console.warn("THREE.Curve: .getPoint() not implemented."),null},getPointAt:function(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)},getPoints:function(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e},getSpacedPoints:function(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e},getLength:function(){const t=this.getLengths();return t[t.length-1]},getLengths:function(t){if(void 0===t&&(t=this.arcLengthDivisions),this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let o=1;o<=t;o++)n=this.getPoint(o/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(t,e){const n=this.getLengths();let i=0;const r=n.length;let o;o=e||t*n[r-1];let a,s=0,c=r-1;for(;s<=c;)if(i=Math.floor(s+(c-s)/2),a=n[i]-o,a<0)s=i+1;else{if(!(a>0)){c=i;break}c=i-1}if(i=c,n[i]===o)return i/(r-1);const l=n[i];return(i+(o-l)/(n[i+1]-l))/(r-1)},getTangent:function(t,e){const n=1e-4;let i=t-n,r=t+n;i<0&&(i=0),r>1&&(r=1);const o=this.getPoint(i),a=this.getPoint(r),s=e||(o.isVector2?new G:new tt);return s.copy(a).sub(o).normalize(),s},getTangentAt:function(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)},computeFrenetFrames:function(t,e){const n=new tt,i=[],r=[],o=[],a=new tt,s=new Lt;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new tt),i[e].normalize()}r[0]=new tt,o[0]=new tt;let c=Number.MAX_VALUE;const l=Math.abs(i[0].x),h=Math.abs(i[0].y),u=Math.abs(i[0].z);l<=c&&(c=l,n.set(1,0,0)),h<=c&&(c=h,n.set(0,1,0)),u<=c&&n.set(0,0,1),a.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],a),o[0].crossVectors(i[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),o[e]=o[e-1].clone(),a.crossVectors(i[e-1],i[e]),a.length()>Number.EPSILON){a.normalize();const t=Math.acos(H.clamp(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(s.makeRotationAxis(a,t))}o[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(H.clamp(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(a.crossVectors(r[0],r[t]))>0&&(e=-e);for(let n=1;n<=t;n++)r[n].applyMatrix4(s.makeRotationAxis(i[n],e*n)),o[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:o}},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this},toJSON:function(){const t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t},fromJSON:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}),ms.prototype=Object.create(fs.prototype),ms.prototype.constructor=ms,ms.prototype.isEllipseCurve=!0,ms.prototype.getPoint=function(t,e){const n=e||new G,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const o=Math.abs(r)i;)r-=i;r0?0:(Math.floor(Math.abs(c)/r)+1)*r:0===l&&c===r-1&&(c=r-2,l=1),this.closed||c>0?a=i[(c-1)%r]:(ys.subVectors(i[0],i[1]).add(i[0]),a=ys);const h=i[c%r],u=i[(c+1)%r];if(this.closed||c+2i.length-2?i.length-1:o+1],h=i[o>i.length-3?i.length-1:o+2];return n.set(Ms(a,s.x,c.x,l.x,h.x),Ms(a,s.y,c.y,l.y,h.y)),n},Os.prototype.copy=function(t){fs.prototype.copy.call(this,t),this.points=[];for(let e=0,n=t.points.length;e=e){const t=n[i]-e,r=this.curves[i],o=r.getLength(),a=0===o?0:1-t/o;return r.getPointAt(a)}i++}return null},getLength:function(){const t=this.getCurveLengths();return t[t.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e},copy:function(t){fs.prototype.copy.call(this,t),this.curves=[];for(let e=0,n=t.curves.length;e0){const t=c.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(c);const l=c.getPoint(1);return this.currentPoint.copy(l),this},copy:function(t){return Is.prototype.copy.call(this,t),this.currentPoint.copy(t.currentPoint),this},toJSON:function(){const t=Is.prototype.toJSON.call(this);return t.currentPoint=this.currentPoint.toArray(),t},fromJSON:function(t){return Is.prototype.fromJSON.call(this,t),this.currentPoint.fromArray(t.currentPoint),this}}),ks.prototype=Object.assign(Object.create(Ds.prototype),{constructor:ks,getPointsHoles:function(t){const e=[];for(let n=0,i=this.holes.length;n0:i.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(i.uniforms[e]={},r.type){case"t":i.uniforms[e].value=n(r.value);break;case"c":i.uniforms[e].value=(new _e).setHex(r.value);break;case"v2":i.uniforms[e].value=(new G).fromArray(r.value);break;case"v3":i.uniforms[e].value=(new tt).fromArray(r.value);break;case"v4":i.uniforms[e].value=(new J).fromArray(r.value);break;case"m3":i.uniforms[e].value=(new V).fromArray(r.value);break;case"m4":i.uniforms[e].value=(new Lt).fromArray(r.value);break;default:i.uniforms[e].value=r.value}}if(void 0!==t.defines&&(i.defines=t.defines),void 0!==t.vertexShader&&(i.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(i.fragmentShader=t.fragmentShader),void 0!==t.extensions)for(const e in t.extensions)i.extensions[e]=t.extensions[e];if(void 0!==t.shading&&(i.flatShading=1===t.shading),void 0!==t.size&&(i.size=t.size),void 0!==t.sizeAttenuation&&(i.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(i.map=n(t.map)),void 0!==t.matcap&&(i.matcap=n(t.matcap)),void 0!==t.alphaMap&&(i.alphaMap=n(t.alphaMap)),void 0!==t.bumpMap&&(i.bumpMap=n(t.bumpMap)),void 0!==t.bumpScale&&(i.bumpScale=t.bumpScale),void 0!==t.normalMap&&(i.normalMap=n(t.normalMap)),void 0!==t.normalMapType&&(i.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),i.normalScale=(new G).fromArray(e)}return void 0!==t.displacementMap&&(i.displacementMap=n(t.displacementMap)),void 0!==t.displacementScale&&(i.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(i.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(i.roughnessMap=n(t.roughnessMap)),void 0!==t.metalnessMap&&(i.metalnessMap=n(t.metalnessMap)),void 0!==t.emissiveMap&&(i.emissiveMap=n(t.emissiveMap)),void 0!==t.emissiveIntensity&&(i.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(i.specularMap=n(t.specularMap)),void 0!==t.envMap&&(i.envMap=n(t.envMap)),void 0!==t.envMapIntensity&&(i.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(i.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(i.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(i.lightMap=n(t.lightMap)),void 0!==t.lightMapIntensity&&(i.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(i.aoMap=n(t.aoMap)),void 0!==t.aoMapIntensity&&(i.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(i.gradientMap=n(t.gradientMap)),void 0!==t.clearcoatMap&&(i.clearcoatMap=n(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(i.clearcoatRoughnessMap=n(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(i.clearcoatNormalMap=n(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(i.clearcoatNormalScale=(new G).fromArray(t.clearcoatNormalScale)),void 0!==t.transmission&&(i.transmission=t.transmission),void 0!==t.transmissionMap&&(i.transmissionMap=n(t.transmissionMap)),i},setTextures:function(t){return this.textures=t,this}});const Qs=function(t){const e=t.lastIndexOf("/");return-1===e?"./":t.substr(0,e+1)};function Ks(){Je.call(this),this.type="InstancedBufferGeometry",this.instanceCount=1/0}function tc(t,e,n,i){"number"==typeof n&&(i=n,n=!1,console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")),Le.call(this,t,e,n),this.meshPerAttribute=i||1}function ec(t){os.call(this,t)}function nc(t){"undefined"==typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),"undefined"==typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),os.call(this,t),this.options={premultiplyAlpha:"none"}}function ic(){this.type="ShapePath",this.color=new _e,this.subPaths=[],this.currentPath=null}function rc(t){this.type="Font",this.data=t}function oc(t,e,n,i,r){const o=r.glyphs[t]||r.glyphs["?"];if(!o)return void console.error('THREE.Font: character "'+t+'" does not exists in font family '+r.familyName+".");const a=new ic;let s,c,l,h,u,d,p,f;if(o.o){const t=o._cachedOutline||(o._cachedOutline=o.o.split(" "));for(let r=0,o=t.length;rNumber.EPSILON){if(c<0&&(n=e[o],s=-s,a=e[r],c=-c),t.ya.y)continue;if(t.y===n.y){if(t.x===n.x)return!0}else{const e=c*(t.x-n.x)-s*(t.y-n.y);if(0===e)return!0;if(e<0)continue;i=!i}}else{if(t.y!==n.y)continue;if(a.x<=t.x&&t.x<=n.x||n.x<=t.x&&t.x<=a.x)return!0}}return i}const r=xa.isClockWise,o=this.subPaths;if(0===o.length)return[];if(!0===e)return n(o);let a,s,c;const l=[];if(1===o.length)return s=o[0],c=new ks,c.curves=s.curves,l.push(c),l;let h=!r(o[0].getPoints());h=t?!h:h;const u=[],d=[];let p,f,m=[],g=0;d[g]=void 0,m[g]=[];for(let e=0,n=o.length;e1){let t=!1;const e=[];for(let t=0,e=d.length;t0&&(t||(m=u))}for(let t=0,e=d.length;t0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){a.setValue(n,i);break}},saveOriginalState:function(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0},restoreOriginalState:function(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)},_setAdditiveIdentityNumeric:function(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]},_slerp:function(t,e,n,i){K.slerpFlat(t,e,t,e,t,n,i)},_slerpAdditive:function(t,e,n,i,r){const o=this._workIndex*r;K.multiplyQuaternionsFlat(t,o,t,e,t,n),K.slerpFlat(t,e,t,e,t,o,i)},_lerp:function(t,e,n,i,r){const o=1-i;for(let a=0;a!==r;++a){const r=e+a;t[r]=t[r]*o+t[n+a]*i}},_lerpAdditive:function(t,e,n,i,r){for(let o=0;o!==r;++o){const r=e+o;t[r]=t[r]+t[n+o]*i}}});const vc="\\[\\]\\.:\\/",yc=new RegExp("[\\[\\]\\.:\\/]","g"),bc="[^\\[\\]\\.:\\/]",xc="[^"+vc.replace("\\.","")+"]",_c=/((?:WC+[\/:])*)/.source.replace("WC",bc),wc=/(WCOD+)?/.source.replace("WCOD",xc),Mc=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",bc),Sc=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",bc),Ec=new RegExp("^"+_c+wc+Mc+Sc+"$"),Tc=["material","materials","bones"];function Ac(t,e,n){const i=n||Lc.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}function Lc(t,e,n){this.path=e,this.parsedPath=n||Lc.parseTrackName(e),this.node=Lc.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t}Object.assign(Ac.prototype,{getValue:function(t,e){this.bind();const n=this._targetGroup.nCachedObjects_,i=this._bindings[n];void 0!==i&&i.getValue(t,e)},setValue:function(t,e){const n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,r=n.length;i!==r;++i)n[i].setValue(t,e)},bind:function(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()},unbind:function(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}}),Object.assign(Lc,{Composite:Ac,create:function(t,e,n){return t&&t.isAnimationObjectGroup?new Lc.Composite(t,e,n):new Lc(t,e,n)},sanitizeNodeName:function(t){return t.replace(/\s/g,"_").replace(yc,"")},parseTrackName:function(t){const e=Ec.exec(t);if(!e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==Tc.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n},findNode:function(t,e){if(!e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i=r){const o=r++,l=t[o];e[l.uuid]=c,t[c]=l,e[s]=o,t[o]=a;for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[o],r=e[c];e[c]=i,e[o]=r}}}this.nCachedObjects_=r},uncache:function(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_,o=t.length;for(let a=0,s=arguments.length;a!==s;++a){const s=arguments[a].uuid,c=e[s];if(void 0!==c)if(delete e[s],c0&&(e[a.uuid]=c),t[c]=a,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t];e[c]=e[r],e.pop()}}}this.nCachedObjects_=r},subscribe_:function(t,e){const n=this._bindingsIndicesByPath;let i=n[t];const r=this._bindings;if(void 0!==i)return r[i];const o=this._paths,a=this._parsedPaths,s=this._objects,c=s.length,l=this.nCachedObjects_,h=new Array(c);i=r.length,n[t]=i,o.push(t),a.push(e),r.push(h);for(let n=l,i=s.length;n!==i;++n){const i=s[n];h[n]=new Lc(i,t,e)}return h},unsubscribe_:function(t){const e=this._bindingsIndicesByPath,n=e[t];if(void 0!==n){const i=this._paths,r=this._parsedPaths,o=this._bindings,a=o.length-1,s=o[a];e[t[a]]=n,o[n]=s,o.pop(),r[n]=r[a],r.pop(),i[n]=i[a],i.pop()}}});class Pc{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const r=e.tracks,o=r.length,a=new Array(o),s={endingStart:C,endingEnd:C};for(let t=0;t!==o;++t){const e=r[t].createInterpolant(null);a[t]=e,e.settings=s}this._interpolantSettings=s,this._interpolants=a,this._propertyBindings=new Array(o),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,r=i/n,o=n/i;t.warp(1,r,e),this.warp(o,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,r=i.time,o=this.timeScale;let a=this._timeScaleInterpolant;null===a&&(a=i._lendControlInterpolant(),this._timeScaleInterpolant=a);const s=a.parameterPositions,c=a.sampleValues;return s[0]=r,s[1]=r+n,c[0]=t/o,c[1]=e/o,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const i=(t-r)*n;if(i<0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const o=this._updateTime(e),a=this._updateWeight(t);if(a>0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case 2501:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(o),e[n].accumulateAdditive(a);break;case N:default:for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(o),e[n].accumulate(i,a)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const o=2202===n;if(0===t)return-1===r?i:o&&1==(1&r)?e-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const a=this.repetitions-r;if(a<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===a){const e=t<0;this._setEndings(e,!e,o)}else this._setEndings(!1,!1,o);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n})}}else this.time=i;if(o&&1==(1&r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=R,i.endingEnd=R):(i.endingStart=t?this.zeroSlopeAtStart?R:C:O,i.endingEnd=e?this.zeroSlopeAtEnd?R:C:O)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let o=this._weightInterpolant;null===o&&(o=i._lendControlInterpolant(),this._weightInterpolant=o);const a=o.parameterPositions,s=o.sampleValues;return a[0]=r,s[0]=e,a[1]=r+t,s[1]=n,this}}function Cc(t){this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}Cc.prototype=Object.assign(Object.create(F.prototype),{constructor:Cc,_bindAction:function(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,o=t._propertyBindings,a=t._interpolants,s=n.uuid,c=this._bindingsByRootAndName;let l=c[s];void 0===l&&(l={},c[s]=l);for(let t=0;t!==r;++t){const r=i[t],c=r.name;let h=l[c];if(void 0!==h)o[t]=h;else{if(h=o[t],void 0!==h){null===h._cacheIndex&&(++h.referenceCount,this._addInactiveBinding(h,s,c));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;h=new gc(Lc.create(n,c,i),r.ValueTypeName,r.getValueSize()),++h.referenceCount,this._addInactiveBinding(h,s,c),o[t]=h}a[t].resultBuffer=h.buffer}},_activateAction:function(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}},_deactivateAction:function(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}},_isActiveAction:function(t){const e=t._cacheIndex;return null!==e&&e=0;--e)t[e].stop();return this},update:function(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),o=this._accuIndex^=1;for(let a=0;a!==n;++a){e[a]._update(i,t,r,o)}const a=this._bindings,s=this._nActiveBindings;for(let t=0;t!==s;++t)a[t].apply(o);return this},setTime:function(t){this.time=0;for(let t=0;tthis.max.x||t.ythis.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return void 0===e&&(console.warn("THREE.Box2: .getParameter() target is now required"),e=new G),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box2: .clampPoint() target is now required"),e=new G),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return Bc.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}.prototype,{center:function(t){return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},size:function(t){return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(it.prototype,{center:function(t){return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionSphere:function(t){return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},size:function(t){return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(bt.prototype,{empty:function(){return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."),this.isEmpty()}}),On.prototype.setFromMatrix=function(t){return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."),this.setFromProjectionMatrix(t)},Object.assign(H,{random16:function(){return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."),Math.random()},nearestPowerOfTwo:function(t){return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."),H.floorPowerOfTwo(t)},nextPowerOfTwo:function(t){return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."),H.ceilPowerOfTwo(t)}}),Object.assign(V.prototype,{flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},multiplyVector3:function(t){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},multiplyVector3Array:function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},applyToBufferAttribute:function(t){return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},applyToVector3Array:function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")},getInverse:function(t){return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()}}),Object.assign(Lt.prototype,{extractPosition:function(t){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(t)},flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},getPosition:function(){return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),(new tt).setFromMatrixColumn(this,3)},setRotationFromQuaternion:function(t){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(t)},multiplyToArray:function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},multiplyVector3:function(t){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector4:function(t){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector3Array:function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},rotateAxis:function(t){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),t.transformDirection(this)},crossVector:function(t){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},translate:function(){console.error("THREE.Matrix4: .translate() has been removed.")},rotateX:function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},rotateY:function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},rotateZ:function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},rotateByAxis:function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},applyToBufferAttribute:function(t){return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},applyToVector3Array:function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},makeFrustum:function(t,e,n,i,r,o){return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."),this.makePerspective(t,e,i,n,r,o)},getInverse:function(t){return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."),this.copy(t).invert()}}),ie.prototype.isIntersectionLine=function(t){return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),this.intersectsLine(t)},Object.assign(K.prototype,{multiplyVector3:function(t){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),t.applyQuaternion(this)},inverse:function(){return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."),this.invert()}}),Object.assign(At.prototype,{isIntersectionBox:function(t){return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionPlane:function(t){return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),this.intersectsPlane(t)},isIntersectionSphere:function(t){return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)}}),Object.assign(fe.prototype,{area:function(){return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."),this.getArea()},barycoordFromPoint:function(t,e){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),this.getBarycoord(t,e)},midpoint:function(t){return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."),this.getMidpoint(t)},normal:function(t){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),this.getNormal(t)},plane:function(t){return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."),this.getPlane(t)}}),Object.assign(fe,{barycoordFromPoint:function(t,e,n,i,r){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),fe.getBarycoord(t,e,n,i,r)},normal:function(t,e,n,i){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),fe.getNormal(t,e,n,i)}}),Object.assign(ks.prototype,{extractAllPoints:function(t){return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."),this.extractPoints(t)},extrude:function(t){return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),new Ea(this,t)},makeGeometry:function(t){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new Pa(this,t)}}),Object.assign(G.prototype,{fromAttribute:function(t,e,n){return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},distanceToManhattan:function(t){return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},lengthManhattan:function(){return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(tt.prototype,{setEulerFromRotationMatrix:function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},setEulerFromQuaternion:function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},getPositionFromMatrix:function(t){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(t)},getScaleFromMatrix:function(t){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(t)},getColumnFromMatrix:function(t,e){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(e,t)},applyProjection:function(t){return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."),this.applyMatrix4(t)},fromAttribute:function(t,e,n){return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},distanceToManhattan:function(t){return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},lengthManhattan:function(){return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(J.prototype,{fromAttribute:function(t,e,n){return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,n)},lengthManhattan:function(){return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(Xo.prototype,{computeTangents:function(){console.error("THREE.Geometry: .computeTangents() has been removed.")},computeLineDistances:function(){console.error("THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.")},applyMatrix:function(t){return console.warn("THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}}),Object.assign(Kt.prototype,{getChildByName:function(t){return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),this.getObjectByName(t)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},translate:function(t,e){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(e,t)},getWorldRotation:function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")},applyMatrix:function(t){return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}}),Object.defineProperties(Kt.prototype,{eulerOrder:{get:function(){return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order},set:function(t){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order=t}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}),Object.assign(mn.prototype,{setDrawMode:function(){console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}),Object.defineProperties(mn.prototype,{drawMode:{get:function(){return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."),0},set:function(){console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")}}}),Object.defineProperties(lo.prototype,{objects:{get:function(){return console.warn("THREE.LOD: .objects has been renamed to .levels."),this.levels}}}),Object.defineProperty(mo.prototype,"useVertexTexture",{get:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")},set:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")}}),ho.prototype.initBones=function(){console.error("THREE.SkinnedMesh: initBones() has been removed.")},Object.defineProperty(fs.prototype,"__arcLengthDivisions",{get:function(){return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions},set:function(t){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions=t}}),Sn.prototype.setLens=function(t,e){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),void 0!==e&&(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(zs.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(t){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(t){console.warn("THREE.Light: .shadowBias is now .shadow.bias."),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(t){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),this.shadow.mapSize.height=t}}}),Object.defineProperties(Le.prototype,{length:{get:function(){return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),this.array.length}},dynamic:{get:function(){return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.usage===z},set:function(){console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."),this.setUsage(z)}}}),Object.assign(Le.prototype,{setDynamic:function(t){return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?z:k),this},copyIndicesArray:function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")},setArray:function(){console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}}),Object.assign(Je.prototype,{addIndex:function(t){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(t)},addAttribute:function(t,e){return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."),e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?"index"===t?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(e),this):this.setAttribute(t,e):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.setAttribute(t,new Le(arguments[1],arguments[2])))},addDrawCall:function(t,e,n){void 0!==n&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),this.addGroup(t,e)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},computeTangents:function(){console.warn("THREE.BufferGeometry: .computeTangents() has been removed.")},computeOffsets:function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")},removeAttribute:function(t){return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."),this.deleteAttribute(t)},applyMatrix:function(t){return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}}),Object.defineProperties(Je.prototype,{drawcalls:{get:function(){return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),this.groups}},offsets:{get:function(){return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),this.groups}}}),Object.defineProperties(Ks.prototype,{maxInstancedCount:{get:function(){return console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."),this.instanceCount},set:function(t){console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."),this.instanceCount=t}}}),Object.defineProperties(Ic.prototype,{linePrecision:{get:function(){return console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."),this.params.Line.threshold},set:function(t){console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."),this.params.Line.threshold=t}}}),Object.defineProperties(Hr.prototype,{dynamic:{get:function(){return console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."),this.usage===z},set:function(t){console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."),this.setUsage(t)}}}),Object.assign(Hr.prototype,{setDynamic:function(t){return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?z:k),this},setArray:function(){console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}}),Object.assign(Ma.prototype,{getArrays:function(){console.error("THREE.ExtrudeBufferGeometry: .getArrays() has been removed.")},addShapeList:function(){console.error("THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.")},addShape:function(){console.error("THREE.ExtrudeBufferGeometry: .addShape() has been removed.")}}),Object.assign(Ur.prototype,{dispose:function(){console.error("THREE.Scene: .dispose() has been removed.")}}),Object.defineProperties(Rc.prototype,{dynamic:{set:function(){console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")}},onUpdate:{value:function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this}}}),Object.defineProperties(Se.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")},set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},overdraw:{get:function(){console.warn("THREE.Material: .overdraw has been removed.")},set:function(){console.warn("THREE.Material: .overdraw has been removed.")}},wrapRGB:{get:function(){return console.warn("THREE.Material: .wrapRGB has been removed."),new _e}},shading:{get:function(){console.error("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(t){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===t}},stencilMask:{get:function(){return console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask},set:function(t){console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead."),this.stencilFuncMask=t}}}),Object.defineProperties(Da.prototype,{metal:{get:function(){return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."),!1},set:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")}}}),Object.defineProperties(Ia.prototype,{transparency:{get:function(){return console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."),this.transmission},set:function(t){console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."),this.transmission=t}}}),Object.defineProperties(wn.prototype,{derivatives:{get:function(){return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives},set:function(t){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives=t}}}),Object.assign(Fr.prototype,{clearTarget:function(t,e,n,i){console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."),this.setRenderTarget(t),this.clear(e,n,i)},animate:function(t){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."),this.setAnimationLoop(t)},getCurrentRenderTarget:function(){return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."),this.getRenderTarget()},getMaxAnisotropy:function(){return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."),this.capabilities.getMaxAnisotropy()},getPrecision:function(){return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."),this.capabilities.precision},resetGLState:function(){return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."),this.state.reset()},supportsFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},supportsHalfFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},supportsStandardDerivatives:function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},supportsCompressedTextureS3TC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},supportsCompressedTexturePVRTC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},supportsBlendMinMax:function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},supportsVertexTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},supportsInstancedArrays:function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},enableScissorTest:function(t){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(t)},initMaterial:function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},addPrePlugin:function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},addPostPlugin:function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},updateShadowMap:function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")},setFaceCulling:function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")},allocTextureUnit:function(){console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.")},setTexture:function(){console.warn("THREE.WebGLRenderer: .setTexture() has been removed.")},setTexture2D:function(){console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.")},setTextureCube:function(){console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.")},getActiveMipMapLevel:function(){return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."),this.getActiveMipmapLevel()}}),Object.defineProperties(Fr.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")}},context:{get:function(){return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."),this.getContext()}},vr:{get:function(){return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"),this.xr}},gammaInput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."),!1},set:function(){console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.")}},gammaOutput:{get:function(){return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),!1},set:function(t){console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."),this.outputEncoding=!0===t?3001:I}},toneMappingWhitePoint:{get:function(){return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."),1},set:function(){console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.")}}}),Object.defineProperties(Cr.prototype,{cullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")}},renderReverseSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")}},renderSingleSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")}}}),Object.defineProperties($.prototype,{wrapS:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy},set:function(t){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy=t}},offset:{get:function(){return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset},set:function(t){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset=t}},repeat:{get:function(){return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat},set:function(t){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat=t}},format:{get:function(){return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format},set:function(t){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format=t}},type:{get:function(){return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type},set:function(t){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps},set:function(t){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps=t}}}),Object.defineProperties(class extends Kt{constructor(t){super(),this.type="Audio",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType="empty",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(t){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType="buffer",this.autoplay&&this.play(),this}play(t=0){if(!0===this.isPlaying)return void console.warn("THREE.Audio: Audio is already playing.");if(!1===this.hasPlaybackControl)return void console.warn("THREE.Audio: this Audio has no playback control.");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;console.warn("THREE.Audio: this Audio has no playback control.")}stop(){if(!1!==this.hasPlaybackControl)return this._progress=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this;console.warn("THREE.Audio: this Audio has no playback control.")}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0){var g=h[0].object;i.setFromNormalAndCoplanarPoint(e.getWorldDirection(i.normal),c.setFromMatrixPosition(g.matrixWorld)),d!==g&&(p.dispatchEvent({type:"hoveron",object:g}),n.style.cursor="pointer",d=g)}else null!==d&&(p.dispatchEvent({type:"hoveroff",object:d}),n.style.cursor="auto",d=null)}(f)}}function v(d){switch(d.preventDefault(),d.pointerType){case"mouse":case"pen":!function(d){d.preventDefault(),h.length=0,r.setFromCamera(o,e),r.intersectObjects(t,!0,h),h.length>0&&(u=!0===p.transformGroup?t[0]:h[0].object,r.ray.intersectPlane(i,s)&&(l.copy(u.parent.matrixWorld).invert(),a.copy(s).sub(c.setFromMatrixPosition(u.matrixWorld))),n.style.cursor="move",p.dispatchEvent({type:"dragstart",object:u}))}(d)}}function y(t){switch(t.preventDefault(),t.pointerType){case"mouse":case"pen":!function(t){t.preventDefault(),u&&(p.dispatchEvent({type:"dragend",object:u}),u=null);n.style.cursor=d?"pointer":"auto"}(t)}}function b(t){t.preventDefault(),t=t.changedTouches[0];var c=n.getBoundingClientRect();if(o.x=(t.clientX-c.left)/c.width*2-1,o.y=-(t.clientY-c.top)/c.height*2+1,r.setFromCamera(o,e),u&&p.enabled)return r.ray.intersectPlane(i,s)&&u.position.copy(s.sub(a).applyMatrix4(l)),void p.dispatchEvent({type:"drag",object:u})}function x(d){d.preventDefault(),d=d.changedTouches[0];var f=n.getBoundingClientRect();o.x=(d.clientX-f.left)/f.width*2-1,o.y=-(d.clientY-f.top)/f.height*2+1,h.length=0,r.setFromCamera(o,e),r.intersectObjects(t,!0,h),h.length>0&&(u=!0===p.transformGroup?t[0]:h[0].object,i.setFromNormalAndCoplanarPoint(e.getWorldDirection(i.normal),c.setFromMatrixPosition(u.matrixWorld)),r.ray.intersectPlane(i,s)&&(l.copy(u.parent.matrixWorld).invert(),a.copy(s).sub(c.setFromMatrixPosition(u.matrixWorld))),n.style.cursor="move",p.dispatchEvent({type:"dragstart",object:u}))}function _(t){t.preventDefault(),u&&(p.dispatchEvent({type:"dragend",object:u}),u=null),n.style.cursor="auto"}f(),this.enabled=!0,this.transformGroup=!1,this.activate=f,this.deactivate=m,this.dispose=function(){m()},this.getObjects=function(){return t}};function Xc(t,e,n){var i,r=1;function o(){var o,a,s=i.length,c=0,l=0,h=0;for(o=0;o=(r=(u+d)/2))?u=r:d=r,i=l,!(l=l[s=+a]))return i[s]=h,t;if(e===(o=+t._x.call(null,l.data)))return h.next=l,i?i[s]=h:t._root=h,t;do{i=i?i[s]=new Array(2):t._root=new Array(2),(a=e>=(r=(u+d)/2))?u=r:d=r}while((s=+a)==(c=+(o>=r)));return i[c]=l,i[s]=h,t}function Zc(t,e,n){this.node=t,this.x0=e,this.x1=n}function Jc(t){return t[0]}function $c(t,e){var n=new Qc(null==e?Jc:e,NaN,NaN);return null==t?n:n.addAll(t)}function Qc(t,e,n){this._x=t,this._x0=e,this._x1=n,this._root=void 0}function Kc(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}(qc.prototype=Object.create(F.prototype)).constructor=qc;var tl=$c.prototype=Qc.prototype;function el(t,e,n,i){if(isNaN(e)||isNaN(n))return t;var r,o,a,s,c,l,h,u,d,p=t._root,f={data:i},m=t._x0,g=t._y0,v=t._x1,y=t._y1;if(!p)return t._root=f,t;for(;p.length;)if((l=e>=(o=(m+v)/2))?m=o:v=o,(h=n>=(a=(g+y)/2))?g=a:y=a,r=p,!(p=p[u=h<<1|l]))return r[u]=f,t;if(s=+t._x.call(null,p.data),c=+t._y.call(null,p.data),e===s&&n===c)return f.next=p,r?r[u]=f:t._root=f,t;do{r=r?r[u]=new Array(4):t._root=new Array(4),(l=e>=(o=(m+v)/2))?m=o:v=o,(h=n>=(a=(g+y)/2))?g=a:y=a}while((u=h<<1|l)==(d=(c>=a)<<1|s>=o));return r[d]=p,r[u]=f,t}function nl(t,e,n,i,r){this.node=t,this.x0=e,this.y0=n,this.x1=i,this.y1=r}function il(t){return t[0]}function rl(t){return t[1]}function ol(t,e,n){var i=new al(null==e?il:e,null==n?rl:n,NaN,NaN,NaN,NaN);return null==t?i:i.addAll(t)}function al(t,e,n,i,r,o){this._x=t,this._y=e,this._x0=n,this._y0=i,this._x1=r,this._y1=o,this._root=void 0}function sl(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}tl.copy=function(){var t,e,n=new Qc(this._x,this._x0,this._x1),i=this._root;if(!i)return n;if(!i.length)return n._root=Kc(i),n;for(t=[{source:i,target:n._root=new Array(2)}];i=t.pop();)for(var r=0;r<2;++r)(e=i.source[r])&&(e.length?t.push({source:e,target:i.target[r]=new Array(2)}):i.target[r]=Kc(e));return n},tl.add=function(t){var e=+this._x.call(null,t);return Yc(this.cover(e),e,t)},tl.addAll=function(t){var e,n,i=t.length,r=new Array(i),o=1/0,a=-1/0;for(e=0;ea&&(a=n));for(at||t>n))return this;var i,r,o=n-e,a=this._root;switch(r=+(t<(e+n)/2)){case 0:do{(i=new Array(2))[r]=a,a=i}while(t>(n=e+(o*=2)));break;case 1:do{(i=new Array(2))[r]=a,a=i}while((e=n-(o*=2))>t)}this._root&&this._root.length&&(this._root=a)}return this._x0=e,this._x1=n,this},tl.data=function(){var t=[];return this.visit((function(e){if(!e.length)do{t.push(e.data)}while(e=e.next)})),t},tl.extent=function(t){return arguments.length?this.cover(+t[0][0]).cover(+t[1][0]):isNaN(this._x0)?void 0:[[this._x0],[this._x1]]},tl.find=function(t,e){var n,i,r,o,a,s=this._x0,c=this._x1,l=[],h=this._root;for(h&&l.push(new Zc(h,s,c)),null==e?e=1/0:(s=t-e,c=t+e);o=l.pop();)if(!(!(h=o.node)||(i=o.x0)>c||(r=o.x1)=u))&&(o=l[l.length-1],l[l.length-1]=l[l.length-1-a],l[l.length-1-a]=o)}else{var d=Math.abs(t-+this._x.call(null,h.data));d=(a=(u+d)/2))?u=a:d=a,e=h,!(h=h[c=+s]))return this;if(!h.length)break;e[c+1&1]&&(n=e,l=c)}for(;h.data!==t;)if(i=h,!(h=h.next))return this;return(r=h.next)&&delete h.next,i?(r?i.next=r:delete i.next,this):e?(r?e[c]=r:delete e[c],(h=e[0]||e[1])&&h===(e[1]||e[0])&&!h.length&&(n?n[l]=h:this._root=h),this):(this._root=r,this)},tl.removeAll=function(t){for(var e=0,n=t.length;e=(a=(b+w)/2))?b=a:w=a,(p=n>=(s=(x+M)/2))?x=s:M=s,(f=i>=(c=(_+S)/2))?_=c:S=c,o=v,!(v=v[m=f<<2|p<<1|d]))return o[m]=y,t;if(l=+t._x.call(null,v.data),h=+t._y.call(null,v.data),u=+t._z.call(null,v.data),e===l&&n===h&&i===u)return y.next=v,o?o[m]=y:t._root=y,t;do{o=o?o[m]=new Array(8):t._root=new Array(8),(d=e>=(a=(b+w)/2))?b=a:w=a,(p=n>=(s=(x+M)/2))?x=s:M=s,(f=i>=(c=(_+S)/2))?_=c:S=c}while((m=f<<2|p<<1|d)==(g=(u>=c)<<2|(h>=s)<<1|l>=a));return o[g]=v,o[m]=y,t}function hl(t,e,n,i,r,o,a){this.node=t,this.x0=e,this.y0=n,this.z0=i,this.x1=r,this.y1=o,this.z1=a}function ul(t){return t[0]}function dl(t){return t[1]}function pl(t){return t[2]}function fl(t,e,n,i){var r=new ml(null==e?ul:e,null==n?dl:n,null==i?pl:i,NaN,NaN,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function ml(t,e,n,i,r,o,a,s,c){this._x=t,this._y=e,this._z=n,this._x0=i,this._y0=r,this._z0=o,this._x1=a,this._y1=s,this._z1=c,this._root=void 0}function gl(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}cl.copy=function(){var t,e,n=new al(this._x,this._y,this._x0,this._y0,this._x1,this._y1),i=this._root;if(!i)return n;if(!i.length)return n._root=sl(i),n;for(t=[{source:i,target:n._root=new Array(4)}];i=t.pop();)for(var r=0;r<4;++r)(e=i.source[r])&&(e.length?t.push({source:e,target:i.target[r]=new Array(4)}):i.target[r]=sl(e));return n},cl.add=function(t){const e=+this._x.call(null,t),n=+this._y.call(null,t);return el(this.cover(e,n),e,n,t)},cl.addAll=function(t){var e,n,i,r,o=t.length,a=new Array(o),s=new Array(o),c=1/0,l=1/0,h=-1/0,u=-1/0;for(n=0;nh&&(h=i),ru&&(u=r));if(c>h||l>u)return this;for(this.cover(c,l).cover(h,u),n=0;nt||t>=r||i>e||e>=o;)switch(s=(ed||(o=c.y0)>p||(a=c.x1)=v)<<1|t>=g)&&(c=f[f.length-1],f[f.length-1]=f[f.length-1-l],f[f.length-1-l]=c)}else{var y=t-+this._x.call(null,m.data),b=e-+this._y.call(null,m.data),x=y*y+b*b;if(x=(s=(f+g)/2))?f=s:g=s,(h=a>=(c=(m+v)/2))?m=c:v=c,e=p,!(p=p[u=h<<1|l]))return this;if(!p.length)break;(e[u+1&3]||e[u+2&3]||e[u+3&3])&&(n=e,d=u)}for(;p.data!==t;)if(i=p,!(p=p.next))return this;return(r=p.next)&&delete p.next,i?(r?i.next=r:delete i.next,this):e?(r?e[u]=r:delete e[u],(p=e[0]||e[1]||e[2]||e[3])&&p===(e[3]||e[2]||e[1]||e[0])&&!p.length&&(n?n[d]=p:this._root=p),this):(this._root=r,this)},cl.removeAll=function(t){for(var e=0,n=t.length;e1&&(v=d.y+d.vy-h.y-h.vy||bl(s)),r>2&&(y=d.z+d.vz-h.z-h.vz||bl(s)),g*=p=((p=Math.sqrt(g*g+v*v+y*y))-n[m])/p*i*e[m],v*=p,y*=p,d.vx-=g*(f=a[m]),r>1&&(d.vy-=v*f),r>2&&(d.vz-=y*f),h.vx+=g*(f=1-f),r>1&&(h.vy+=v*f),r>2&&(h.vz+=y*f)}function p(){if(i){var r,s,l=i.length,h=t.length,u=new Map(i.map(((t,e)=>[c(t,e,i),t])));for(r=0,o=new Array(l);rp&&(p=i),rf&&(f=r),om&&(m=o));for(pt||t>a||r>e||e>s||o>n||n>c))return this;var l,h,u=a-i,d=this._root;switch(h=(n<(o+c)/2)<<2|(e<(r+s)/2)<<1|t<(i+a)/2){case 0:do{(l=new Array(8))[h]=d,d=l}while(s=r+(u*=2),c=o+u,t>(a=i+u)||e>s||n>c);break;case 1:do{(l=new Array(8))[h]=d,d=l}while(s=r+(u*=2),c=o+u,(i=a-u)>t||e>s||n>c);break;case 2:do{(l=new Array(8))[h]=d,d=l}while(r=s-(u*=2),c=o+u,t>(a=i+u)||r>e||n>c);break;case 3:do{(l=new Array(8))[h]=d,d=l}while(r=s-(u*=2),c=o+u,(i=a-u)>t||r>e||n>c);break;case 4:do{(l=new Array(8))[h]=d,d=l}while(s=r+(u*=2),o=c-u,t>(a=i+u)||e>s||o>n);break;case 5:do{(l=new Array(8))[h]=d,d=l}while(s=r+(u*=2),o=c-u,(i=a-u)>t||e>s||o>n);break;case 6:do{(l=new Array(8))[h]=d,d=l}while(r=s-(u*=2),o=c-u,t>(a=i+u)||r>e||o>n);break;case 7:do{(l=new Array(8))[h]=d,d=l}while(r=s-(u*=2),o=c-u,(i=a-u)>t||r>e||o>n)}this._root&&this._root.length&&(this._root=d)}return this._x0=i,this._y0=r,this._z0=o,this._x1=a,this._y1=s,this._z1=c,this},vl.data=function(){var t=[];return this.visit((function(e){if(!e.length)do{t.push(e.data)}while(e=e.next)})),t},vl.extent=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1],+t[0][2]).cover(+t[1][0],+t[1][1],+t[1][2]):isNaN(this._x0)?void 0:[[this._x0,this._y0,this._z0],[this._x1,this._y1,this._z1]]},vl.find=function(t,e,n,i){var r,o,a,s,c,l,h,u,d,p=this._x0,f=this._y0,m=this._z0,g=this._x1,v=this._y1,y=this._z1,b=[],x=this._root;for(x&&b.push(new hl(x,p,f,m,g,v,y)),null==i?i=1/0:(p=t-i,f=e-i,m=n-i,g=t+i,v=e+i,y=n+i,i*=i);u=b.pop();)if(!(!(x=u.node)||(o=u.x0)>g||(a=u.y0)>v||(s=u.z0)>y||(c=u.x1)=M)<<2|(e>=w)<<1|t>=_)&&(u=b[b.length-1],b[b.length-1]=b[b.length-1-d],b[b.length-1-d]=u)}else{var S=t-+this._x.call(null,x.data),E=e-+this._y.call(null,x.data),T=n-+this._z.call(null,x.data),A=S*S+E*E+T*T;if(A=(c=(v+x)/2))?v=c:x=c,(d=a>=(l=(y+_)/2))?y=l:_=l,(p=s>=(h=(b+w)/2))?b=h:w=h,e=g,!(g=g[f=p<<2|d<<1|u]))return this;if(!g.length)break;(e[f+1&7]||e[f+2&7]||e[f+3&7]||e[f+4&7]||e[f+5&7]||e[f+6&7]||e[f+7&7])&&(n=e,m=f)}for(;g.data!==t;)if(i=g,!(g=g.next))return this;return(r=g.next)&&delete g.next,i?(r?i.next=r:delete i.next,this):e?(r?e[f]=r:delete e[f],(g=e[0]||e[1]||e[2]||e[3]||e[4]||e[5]||e[6]||e[7])&&g===(e[7]||e[6]||e[5]||e[4]||e[3]||e[2]||e[1]||e[0])&&!g.length&&(n?n[m]=g:this._root=g),this):(this._root=r,this)},vl.removeAll=function(t){for(var e=0,n=t.length;e{}};function Sl(){for(var t,e=0,n=arguments.length,i={};e=0&&(n=t.slice(i+1),t=t.slice(0,i)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function Al(t,e){for(var n,i=0,r=t.length;i0)for(var n,i,r=new Array(n),o=0;o=0&&e._call.call(null,t),e=e._next;--Rl}()}finally{Rl=0,function(){var t,e,n=Pl,i=1/0;for(;n;)n._call?(i>n._time&&(i=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:Pl=e);Cl=t,Wl(i)}(),Dl=0}}function Vl(){var t=zl.now(),e=t-Il;e>1e3&&(kl-=e,Il=t)}function Wl(t){Rl||(Ol&&(Ol=clearTimeout(Ol)),t-Dl>24?(t<1/0&&(Ol=setTimeout(Gl,t-zl.now()-kl)),Nl&&(Nl=clearInterval(Nl))):(Nl||(Il=zl.now(),Nl=setInterval(Vl,1e3)),Rl=1,Bl(Gl)))}Ul.prototype=Hl.prototype={constructor:Ul,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?Fl():+n)+(null==e?0:+e),this._next||Cl===this||(Cl?Cl._next=this:Pl=this,Cl=this),this._call=t,this._time=n,Wl()},stop:function(){this._call&&(this._call=null,this._time=1/0,Wl())}};const ql=4294967296;function Xl(t){return t.x}function Yl(t){return t.y}function Zl(t){return t.z}var Jl=Math.PI*(3-Math.sqrt(5)),$l=20*Math.PI/(9+Math.sqrt(221));function Ql(t,e){e=e||2;var n,i=Math.min(3,Math.max(1,Math.round(e))),r=1,o=.001,a=1-Math.pow(o,1/300),s=0,c=.6,l=new Map,h=Hl(p),u=Sl("tick","end"),d=function(){let t=1;return()=>(t=(1664525*t+1013904223)%ql)/ql}();function p(){f(),u.call("tick",n),r1&&(null==h.fy?h.y+=h.vy*=c:(h.y=h.fy,h.vy=0)),i>2&&(null==h.fz?h.z+=h.vz*=c:(h.z=h.fz,h.vz=0));return n}function m(){for(var e,n=0,r=t.length;n1&&isNaN(e.y)||i>2&&isNaN(e.z)){var o=10*(i>2?Math.cbrt(.5+n):i>1?Math.sqrt(.5+n):n),a=n*Jl,s=n*$l;1===i?e.x=o:2===i?(e.x=o*Math.cos(a),e.y=o*Math.sin(a)):(e.x=o*Math.sin(a)*Math.cos(s),e.y=o*Math.cos(a),e.z=o*Math.sin(a)*Math.sin(s))}(isNaN(e.vx)||i>1&&isNaN(e.vy)||i>2&&isNaN(e.vz))&&(e.vx=0,i>1&&(e.vy=0),i>2&&(e.vz=0))}}function g(e){return e.initialize&&e.initialize(t,i,d),e}return null==t&&(t=[]),m(),n={tick:f,restart:function(){return h.restart(p),n},stop:function(){return h.stop(),n},numDimensions:function(t){return arguments.length?(i=Math.min(3,Math.max(1,Math.round(t))),l.forEach(g),n):i},nodes:function(e){return arguments.length?(t=e,m(),l.forEach(g),n):t},alpha:function(t){return arguments.length?(r=+t,n):r},alphaMin:function(t){return arguments.length?(o=+t,n):o},alphaDecay:function(t){return arguments.length?(a=+t,n):+a},alphaTarget:function(t){return arguments.length?(s=+t,n):s},velocityDecay:function(t){return arguments.length?(c=1-t,n):1-c},randomSource:function(t){return arguments.length?(d=t,l.forEach(g),n):d},force:function(t,e){return arguments.length>1?(null==e?l.delete(t):l.set(t,g(e)),n):l.get(t)},find:function(){var e,n,r,o,a,s,c=Array.prototype.slice.call(arguments),l=c.shift()||0,h=(i>1?c.shift():null)||0,u=(i>2?c.shift():null)||0,d=c.shift()||1/0,p=0,f=t.length;for(d*=d,p=0;p1?(u.on(t,e),n):u.on(t)}}}function Kl(){var t,e,n,i,r,o,a=yl(-30),s=1,c=1/0,l=.81;function h(i){var o,a=t.length,s=(1===e?$c(t,Xl):2===e?ol(t,Xl,Yl):3===e?fl(t,Xl,Yl,Zl):null).visitAfter(d);for(r=i,o=0;o1&&(t.y=a/h),e>2&&(t.z=s/h)}else{(n=t).x=n.data.x,e>1&&(n.y=n.data.y),e>2&&(n.z=n.data.z);do{l+=o[n.data.index]}while(n=n.next)}t.value=l}function p(t,a,h,u,d){if(!t.value)return!0;var p=[h,u,d][e-1],f=t.x-n.x,m=e>1?t.y-n.y:0,g=e>2?t.z-n.z:0,v=p-a,y=f*f+m*m+g*g;if(v*v/l1&&0===m&&(y+=(m=bl(i))*m),e>2&&0===g&&(y+=(g=bl(i))*g),y1&&(n.vy+=m*t.value*r/y),e>2&&(n.vz+=g*t.value*r/y)),!0;if(!(t.length||y>=c)){(t.data!==n||t.next)&&(0===f&&(y+=(f=bl(i))*f),e>1&&0===m&&(y+=(m=bl(i))*m),e>2&&0===g&&(y+=(g=bl(i))*g),y1&&(n.vy+=m*v),e>2&&(n.vz+=g*v))}while(t=t.next)}}return h.initialize=function(n,r,o){t=n,e=r,i=o,u()},h.strength=function(t){return arguments.length?(a="function"==typeof t?t:yl(+t),u(),h):a},h.distanceMin=function(t){return arguments.length?(s=t*t,h):Math.sqrt(s)},h.distanceMax=function(t){return arguments.length?(c=t*t,h):Math.sqrt(c)},h.theta=function(t){return arguments.length?(l=t*t,h):Math.sqrt(l)},h}var th=function(t){!function(t){if(!t)throw new Error("Eventify cannot use falsy object as events subject");for(var e=["on","fire","off"],n=0;n1&&(i=Array.prototype.splice.call(arguments,1));for(var o=0;o=0&&i.links.splice(e,1),r&&(e=ih(t,r.links))>=0&&r.links.splice(e,1),s(t,"remove"),h(),!0}function x(t,e){var n,i=m(t);if(!i||!i.links)return null;for(n=0;n0&&(u.fire("changed",a),a.length=0)}function S(t){if("function"!=typeof t)throw new Error("Function is expected to iterate over graph nodes. You passed "+t);for(var n=e.values(),i=n.next();!i.done;){if(t(i.value))return!0;i=n.next()}}},nh=th;function ih(t,e){if(!e)return-1;if(e.indexOf)return e.indexOf(t);var n,i=e.length;for(n=0;n {var}max) {var}max = pos.{var};",{indent:6})}\n }\n\n // Makes the bounds square.\n var maxSideLength = -Infinity;\n ${e("if ({var}max - {var}min > maxSideLength) maxSideLength = {var}max - {var}min ;",{indent:4})}\n\n currentInCache = 0;\n root = newNode();\n ${e("root.min_{var} = {var}min;",{indent:4})}\n ${e("root.max_{var} = {var}min + maxSideLength;",{indent:4})}\n\n i = bodies.length - 1;\n if (i >= 0) {\n root.body = bodies[i];\n }\n while (i--) {\n insert(bodies[i], root);\n }\n }\n\n function insert(newBody) {\n insertStack.reset();\n insertStack.push(root, newBody);\n\n while (!insertStack.isEmpty()) {\n var stackItem = insertStack.pop();\n var node = stackItem.node;\n var body = stackItem.body;\n\n if (!node.body) {\n // This is internal node. Update the total mass of the node and center-of-mass.\n ${e("var {var} = body.pos.{var};",{indent:8})}\n node.mass += body.mass;\n ${e("node.mass_{var} += body.mass * {var};",{indent:8})}\n\n // Recursively insert the body in the appropriate quadrant.\n // But first find the appropriate quadrant.\n var quadIdx = 0; // Assume we are in the 0's quad.\n ${e("var min_{var} = node.min_{var};",{indent:8})}\n ${e("var max_{var} = (min_{var} + node.max_{var}) / 2;",{indent:8})}\n\n${function(e){let n=[],i=Array(e+1).join(" ");for(let e=0;e max_${bh(e)}) {`),n.push(i+` quadIdx = quadIdx + ${Math.pow(2,e)};`),n.push(i+` min_${bh(e)} = max_${bh(e)};`),n.push(i+` max_${bh(e)} = node.max_${bh(e)};`),n.push(i+"}");return n.join("\n")}(8)}\n\n var child = getChild(node, quadIdx);\n\n if (!child) {\n // The node is internal but this quadrant is not taken. Add\n // subnode to it.\n child = newNode();\n ${e("child.min_{var} = min_{var};",{indent:10})}\n ${e("child.max_{var} = max_{var};",{indent:10})}\n child.body = body;\n\n setChild(node, quadIdx, child);\n } else {\n // continue searching in this quadrant.\n insertStack.push(child, body);\n }\n } else {\n // We are trying to add to the leaf node.\n // We have to convert current leaf into internal node\n // and continue adding two nodes.\n var oldBody = node.body;\n node.body = null; // internal nodes do not cary bodies\n\n if (isSamePosition(oldBody.pos, body.pos)) {\n // Prevent infinite subdivision by bumping one node\n // anywhere in this quadrant\n var retriesCount = 3;\n do {\n var offset = random.nextDouble();\n ${e("var d{var} = (node.max_{var} - node.min_{var}) * offset;",{indent:12})}\n\n ${e("oldBody.pos.{var} = node.min_{var} + d{var};",{indent:12})}\n retriesCount -= 1;\n // Make sure we don't bump it out of the box. If we do, next iteration should fix it\n } while (retriesCount > 0 && isSamePosition(oldBody.pos, body.pos));\n\n if (retriesCount === 0 && isSamePosition(oldBody.pos, body.pos)) {\n // This is very bad, we ran out of precision.\n // if we do not return from the method we'll get into\n // infinite loop here. So we sacrifice correctness of layout, and keep the app running\n // Next layout iteration should get larger bounding box in the first step and fix this\n return;\n }\n }\n // Next iteration should subdivide node further.\n insertStack.push(node, oldBody);\n insertStack.push(node, body);\n }\n }\n }\n}\nreturn createQuadTree;\n\n`}function _h(t){let e=yh(t);return`\n function isSamePosition(point1, point2) {\n ${e("var d{var} = Math.abs(point1.{var} - point2.{var});",{indent:2})}\n \n return ${e("d{var} < 1e-8",{join:" && "})};\n } \n`}function wh(t){var e=Math.pow(2,t);return`\nfunction setChild(node, idx, child) {\n ${function(){let t=[];for(let n=0;n 0) {\n return this.stack[--this.popIdx];\n }\n },\n reset: function () {\n this.popIdx = 0;\n }\n};\n\nfunction InsertStackElement(node, body) {\n this.node = node; // QuadTree node\n this.body = body; // physical body which needs to be inserted to node\n}\n"}vh.exports=function(t){let e=xh(t);return new Function(e)()},vh.exports.generateQuadTreeFunctionBody=xh,vh.exports.getInsertStackCode=Eh,vh.exports.getQuadNodeCode=Sh,vh.exports.isSamePosition=_h,vh.exports.getChildBodyCode=Mh,vh.exports.setChildBodyCode=wh;var Th={exports:{}};Th.exports=function(t){let e=Lh(t);return new Function("bodies","settings","random",e)},Th.exports.generateFunctionBody=Lh;const Ah=dh;function Lh(t){let e=Ah(t);return`\n var boundingBox = {\n ${e("min_{var}: 0, max_{var}: 0,",{indent:4})}\n };\n\n return {\n box: boundingBox,\n\n update: updateBoundingBox,\n\n reset: resetBoundingBox,\n\n getBestNewPosition: function (neighbors) {\n var ${e("base_{var} = 0",{join:", "})};\n\n if (neighbors.length) {\n for (var i = 0; i < neighbors.length; ++i) {\n let neighborPos = neighbors[i].pos;\n ${e("base_{var} += neighborPos.{var};",{indent:10})}\n }\n\n ${e("base_{var} /= neighbors.length;",{indent:8})}\n } else {\n ${e("base_{var} = (boundingBox.min_{var} + boundingBox.max_{var}) / 2;",{indent:8})}\n }\n\n var springLength = settings.springLength;\n return {\n ${e("{var}: base_{var} + (random.nextDouble() - 0.5) * springLength,",{indent:8})}\n };\n }\n };\n\n function updateBoundingBox() {\n var i = bodies.length;\n if (i === 0) return; // No bodies - no borders.\n\n ${e("var max_{var} = -Infinity;",{indent:4})}\n ${e("var min_{var} = Infinity;",{indent:4})}\n\n while(i--) {\n // this is O(n), it could be done faster with quadtree, if we check the root node bounds\n var bodyPos = bodies[i].pos;\n ${e("if (bodyPos.{var} < min_{var}) min_{var} = bodyPos.{var};",{indent:6})}\n ${e("if (bodyPos.{var} > max_{var}) max_{var} = bodyPos.{var};",{indent:6})}\n }\n\n ${e("boundingBox.min_{var} = min_{var};",{indent:4})}\n ${e("boundingBox.max_{var} = max_{var};",{indent:4})}\n }\n\n function resetBoundingBox() {\n ${e("boundingBox.min_{var} = boundingBox.max_{var} = 0;",{indent:4})}\n }\n`}var Ph={exports:{}};const Ch=dh;function Rh(t){return`\n if (!Number.isFinite(options.dragCoefficient)) throw new Error('dragCoefficient is not a finite number');\n\n return {\n update: function(body) {\n ${Ch(t)("body.force.{var} -= options.dragCoefficient * body.velocity.{var};",{indent:6})}\n }\n };\n`}Ph.exports=function(t){let e=Rh(t);return new Function("options",e)},Ph.exports.generateCreateDragForceFunctionBody=Rh;var Oh={exports:{}};const Nh=dh;function Ih(t){let e=Nh(t);return`\n if (!Number.isFinite(options.springCoefficient)) throw new Error('Spring coefficient is not a number');\n if (!Number.isFinite(options.springLength)) throw new Error('Spring length is not a number');\n\n return {\n /**\n * Updates forces acting on a spring\n */\n update: function (spring) {\n var body1 = spring.from;\n var body2 = spring.to;\n var length = spring.length < 0 ? options.springLength : spring.length;\n ${e("var d{var} = body2.pos.{var} - body1.pos.{var};",{indent:6})}\n var r = Math.sqrt(${e("d{var} * d{var}",{join:" + "})});\n\n if (r === 0) {\n ${e("d{var} = (random.nextDouble() - 0.5) / 50;",{indent:8})}\n r = Math.sqrt(${e("d{var} * d{var}",{join:" + "})});\n }\n\n var d = r - length;\n var coefficient = ((spring.coefficient > 0) ? spring.coefficient : options.springCoefficient) * d / r;\n\n ${e("body1.force.{var} += coefficient * d{var}",{indent:6})};\n body1.springCount += 1;\n body1.springLength += r;\n\n ${e("body2.force.{var} -= coefficient * d{var}",{indent:6})};\n body2.springCount += 1;\n body2.springLength += r;\n }\n };\n`}Oh.exports=function(t){let e=Ih(t);return new Function("options","random",e)},Oh.exports.generateCreateSpringForceFunctionBody=Ih;var Dh={exports:{}};const kh=dh;function zh(t){let e=kh(t);return`\n var length = bodies.length;\n if (length === 0) return 0;\n\n ${e("var d{var} = 0, t{var} = 0;",{indent:2})}\n\n for (var i = 0; i < length; ++i) {\n var body = bodies[i];\n if (body.isPinned) continue;\n\n if (adaptiveTimeStepWeight && body.springCount) {\n timeStep = (adaptiveTimeStepWeight * body.springLength/body.springCount);\n }\n\n var coeff = timeStep / body.mass;\n\n ${e("body.velocity.{var} += coeff * body.force.{var};",{indent:4})}\n ${e("var v{var} = body.velocity.{var};",{indent:4})}\n var v = Math.sqrt(${e("v{var} * v{var}",{join:" + "})});\n\n if (v > 1) {\n // We normalize it so that we move within timeStep range. \n // for the case when v <= 1 - we let velocity to fade out.\n ${e("body.velocity.{var} = v{var} / v;",{indent:6})}\n }\n\n ${e("d{var} = timeStep * body.velocity.{var};",{indent:4})}\n\n ${e("body.pos.{var} += d{var};",{indent:4})}\n\n ${e("t{var} += Math.abs(d{var});",{indent:4})}\n }\n\n return (${e("t{var} * t{var}",{join:" + "})})/length;\n`}Dh.exports=function(t){let e=zh(t);return new Function("bodies","timeStep","adaptiveTimeStepWeight",e)},Dh.exports.generateIntegratorFunctionBody=zh;var Bh=function(t,e,n,i){this.from=t,this.to=e,this.length=n,this.coefficient=i};var Fh=function t(e,n){var i;e||(e={});if(n)for(i in n)if(n.hasOwnProperty(i)){var r=e.hasOwnProperty(i),o=typeof n[i];!r||typeof e[i]!==o?e[i]=n[i]:"object"===o&&(e[i]=t(e[i],n[i]))}return e};var jh={exports:{}};function Uh(t){return new Hh("number"==typeof t?t:+new Date)}function Hh(t){this.seed=t}function Gh(t){return Math.sqrt(2*Math.PI/t)*Math.pow(1/Math.E*(t+1/(12*t-1/(10*t))),t)}function Vh(){var t=this.seed;return t=4294967295&(3042594569^(t=(t=4294967295&((t=(t=4294967295&(3345072700^(t=t+2127912214+(t<<12)&4294967295)^t>>>19))+374761393+(t<<5)&4294967295)+3550635116^t<<9))+4251993797+(t<<3)&4294967295)^t>>>16),this.seed=t,(268435455&t)/268435456}jh.exports=Uh,jh.exports.random=Uh,jh.exports.randomIterator=function(t,e){var n=e||Uh();if("function"!=typeof n.next)throw new Error("customRandom does not match expected API: next() function is missing");return{forEach:function(e){var i,r,o;for(i=t.length-1;i>0;--i)r=n.next(i+1),o=t[r],t[r]=t[i],t[i]=o,e(o);t.length&&e(t[0])},shuffle:function(){var e,i,r;for(e=t.length-1;e>0;--e)i=n.next(e+1),r=t[i],t[i]=t[e],t[e]=r;return t}}},Hh.prototype.next=function(t){return Math.floor(this.nextDouble()*t)},Hh.prototype.nextDouble=Vh,Hh.prototype.uniform=Vh,Hh.prototype.gaussian=function(){var t,e,n;do{e=2*this.nextDouble()-1,n=2*this.nextDouble()-1,t=e*e+n*n}while(t>=1||0===t);return e*Math.sqrt(-2*Math.log(t)/t)},Hh.prototype.levy=function(){var t=1.5,e=Math.pow(Gh(2.5)*Math.sin(Math.PI*t/2)/(Gh(1.25)*t*Math.pow(2,.25)),1/t);return this.gaussian()*e/Math.pow(Math.abs(this.gaussian()),1/t)};var Wh=function(t){var e=Bh,n=Fh,i=th;if(t){if(void 0!==t.springCoeff)throw new Error("springCoeff was renamed to springCoefficient");if(void 0!==t.dragCoeff)throw new Error("dragCoeff was renamed to dragCoefficient")}t=n(t,{springLength:10,springCoefficient:.8,gravity:-12,theta:.8,dragCoefficient:.9,timeStep:.5,adaptiveTimeStepWeight:0,dimensions:2,debug:!1});var r=Qh[t.dimensions];if(!r){var o=t.dimensions;r={Body:qh(o,t.debug),createQuadTree:Xh(o),createBounds:Yh(o),createDragForce:Zh(o),createSpringForce:Jh(o),integrate:$h(o)},Qh[o]=r}var a=r.Body,s=r.createQuadTree,c=r.createBounds,l=r.createDragForce,h=r.createSpringForce,u=r.integrate,d=jh.exports.random(42),p=[],f=[],m=s(t,d),g=c(p,t,d),v=h(t,d),y=l(t),b=[],x=new Map,_=0;S("nbody",(function(){if(0===p.length)return;m.insertBodies(p);var t=p.length;for(;t--;){var e=p[t];e.isPinned||(e.reset(),m.updateBodyForce(e),y.update(e))}})),S("spring",(function(){var t=f.length;for(;t--;)v.update(f[t])}));var w={bodies:p,quadTree:m,springs:f,settings:t,addForce:S,removeForce:function(t){var e=b.indexOf(x.get(t));if(e<0)return;b.splice(e,1),x.delete(t)},getForces:function(){return x},step:function(){for(var e=0;enew a(t))(t);return p.push(e),e},removeBody:function(t){if(t){var e=p.indexOf(t);if(!(e<0))return p.splice(e,1),0===p.length&&g.reset(),!0}},addSpring:function(t,n,i,r){if(!t||!n)throw new Error("Cannot add null spring to force simulator");"number"!=typeof i&&(i=-1);var o=new e(t,n,i,r>=0?r:-1);return f.push(o),o},getTotalMovement:function(){return 0},removeSpring:function(t){if(t){var e=f.indexOf(t);return e>-1?(f.splice(e,1),!0):void 0}},getBestNewBodyPosition:function(t){return g.getBestNewPosition(t)},getBBox:M,getBoundingBox:M,invalidateBBox:function(){console.warn("invalidateBBox() is deprecated, bounds always recomputed on `getBBox()` call")},gravity:function(e){return void 0!==e?(t.gravity=e,m.options({gravity:e}),this):t.gravity},theta:function(e){return void 0!==e?(t.theta=e,m.options({theta:e}),this):t.theta},random:d};return function(t,e){for(var n in t)Kh(t,e,n)}(t,w),i(w),w;function M(){return g.update(),g.box}function S(t,e){if(x.has(t))throw new Error("Force "+t+" is already added");x.set(t,e),b.push(e)}},qh=lh.exports,Xh=vh.exports,Yh=Th.exports,Zh=Ph.exports,Jh=Oh.exports,$h=Dh.exports,Qh={};function Kh(t,e,n){if(t.hasOwnProperty(n)&&"function"!=typeof e[n]){var i=Number.isFinite(t[n]);e[n]=i?function(i){if(void 0!==i){if(!Number.isFinite(i))throw new Error("Value of "+n+" should be a valid number.");return t[n]=i,e}return t[n]}:function(i){return void 0!==i?(t[n]=i,e):t[n]}}}ch.exports=function(t,e){if(!t)throw new Error("Graph structure cannot be undefined");var n=(e&&e.createSimulator||Wh)(e);if(Array.isArray(e))throw new Error("Physics settings is expected to be an object");var i=function(e){var n=t.getLinks(e);return n?1+n.length/3:1};e&&"function"==typeof e.nodeMass&&(i=e.nodeMass);var r=new Map,o={},a=0,s=n.settings.springTransform||eu;a=0,t.forEachNode((function(t){p(t.id),a+=1})),t.forEachLink(m),t.on("changed",d);var c=!1,l={step:function(){if(0===a)return h(!0),!0;var t=n.step();l.lastMove=t,l.fire("step");var e=t/a<=.01;return h(e),e},getNodePosition:function(t){return y(t).pos},setNodePosition:function(t){var e=y(t);e.setPosition.apply(e,Array.prototype.slice.call(arguments,1))},getLinkPosition:function(t){var e=o[t];if(e)return{from:e.from.pos,to:e.to.pos}},getGraphRect:function(){return n.getBBox()},forEachBody:u,pinNode:function(t,e){y(t.id).isPinned=!!e},isNodePinned:function(t){return y(t.id).isPinned},dispose:function(){t.off("changed",d),l.fire("disposed")},getBody:function(t){return r.get(t)},getSpring:function(e,n){var i;if(void 0===n)i="object"!=typeof e?e:e.id;else{var r=t.hasLink(e,n);if(!r)return;i=r.id}return o[i]},getForceVectorLength:function(){var t=0,e=0;return u((function(n){t+=Math.abs(n.force.x),e+=Math.abs(n.force.y)})),Math.sqrt(t*t+e*e)},simulator:n,graph:t,lastMove:0};return tu(l),l;function h(t){var e;c!==t&&(c=t,e=t,l.fire("stable",e))}function u(t){r.forEach(t)}function d(e){for(var n=0;n=0?i=setTimeout(c,e-l):(i=null,n||(s=t.apply(o,r),o=r=null))}null==e&&(e=100);var l=function(){o=this,r=arguments,a=Date.now();var l=n&&!i;return i||(i=setTimeout(c,e)),l&&(s=t.apply(o,r),o=r=null),s};return l.clear=function(){i&&(clearTimeout(i),i=null)},l.flush=function(){i&&(s=t.apply(o,r),o=r=null,clearTimeout(i),i=null)},l}iu.debounce=iu;var ru=iu;function ou(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if(!(Symbol.iterator in Object(t))&&"[object Arguments]"!==Object.prototype.toString.call(t))return;var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=t[Symbol.iterator]();!(i=(a=s.next()).done)&&(n.push(a.value),!e||n.length!==e);i=!0);}catch(t){r=!0,o=t}finally{try{i||null==s.return||s.return()}finally{if(r)throw o}}return n}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var au=function t(e,n){var i=n.default,r=void 0===i?null:i,o=n.triggerUpdate,a=void 0===o||o,s=n.onChange,c=void 0===s?function(t,e){}:s;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.name=e,this.defaultVal=r,this.triggerUpdate=a,this.onChange=c};function su(t){var e=t.stateInit,n=void 0===e?function(){return{}}:e,i=t.props,r=void 0===i?{}:i,o=t.methods,a=void 0===o?{}:o,s=t.aliases,c=void 0===s?{}:s,l=t.init,h=void 0===l?function(){}:l,u=t.update,d=void 0===u?function(){}:u,p=Object.keys(r).map((function(t){return new au(t,r[t])}));return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=Object.assign({},n instanceof Function?n(t):n,{initialised:!1}),i={};function r(e){return o(e,t),s(),r}var o=function(t,n){h.call(r,t,e,n),e.initialised=!0},s=ru((function(){e.initialised&&(d.call(r,e,i),i={})}),1);return p.forEach((function(t){r[t.name]=function(t){var n=t.name,o=t.triggerUpdate,a=void 0!==o&&o,c=t.onChange,l=void 0===c?function(t,e){}:c,h=t.defaultVal,u=void 0===h?null:h;return function(t){var o=e[n];if(!arguments.length)return o;var c=void 0===t?u:t;return e[n]=c,l.call(r,c,e,o),!i.hasOwnProperty(n)&&(i[n]=o),a&&s(),r}}(t)})),Object.keys(a).forEach((function(t){r[t]=function(){for(var n,i=arguments.length,o=new Array(i),s=0;s=e)&&(n=e);else{let i=-1;for(let r of t)null!=(r=e(r,++i,t))&&(n=r)&&(n=r)}return n}function hu(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n>e||void 0===n&&e>=e)&&(n=e);else{let i=-1;for(let r of t)null!=(r=e(r,++i,t))&&(n>r||void 0===n&&r>=r)&&(n=r)}return n}function uu(t,e){if(null==t)return{};var n,i,r=function(t,e){if(null==t)return{};var n,i,r={},o=Object.keys(t);for(i=0;i=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}function du(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if(!(Symbol.iterator in Object(t))&&"[object Arguments]"!==Object.prototype.toString.call(t))return;var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=t[Symbol.iterator]();!(i=(a=s.next()).done)&&(n.push(a.value),!e||n.length!==e);i=!0);}catch(t){r=!0,o=t}finally{try{i||null==s.return||s.return()}finally{if(r)throw o}}return n}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function pu(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=(e instanceof Array?e.length?e:[void 0]:[e]).map((function(t){return{keyAccessor:t,isProp:!(t instanceof Function)}})),o=t.reduce((function(t,e){var i=t,o=e;return r.forEach((function(t,e){var a,s=t.keyAccessor;if(t.isProp){var c=o,l=c[s],h=uu(c,[s].map(fu));a=l,o=h}else a=s(o,e);e+11&&void 0!==arguments[1]?arguments[1]:1;i===r.length?Object.keys(e).forEach((function(t){return e[t]=n(e[t])})):Object.values(e).forEach((function(e){return t(e,i+1)}))}(o);var a=o;return i&&(a=[],function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];n.length===r.length?a.push({keys:n,vals:e}):Object.entries(e).forEach((function(e){var i=du(e,2),r=i[0],o=i[1];return t(o,[].concat(pu(n),[r]))}))}(o),e instanceof Array&&0===e.length&&1===a.length&&(a[0].keys=[])),a};function gu(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function vu(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function yu(t,e){if(null==t)return{};var n,i,r=function(t,e){if(null==t)return{};var n,i,r={},o=Object.keys(t);for(i=0;i=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}function bu(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if(!(Symbol.iterator in Object(t))&&"[object Arguments]"!==Object.prototype.toString.call(t))return;var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=t[Symbol.iterator]();!(i=(a=s.next()).done)&&(n.push(a.value),!e||n.length!==e);i=!0);}catch(t){r=!0,o=t}finally{try{i||null==s.return||s.return()}finally{if(r)throw o}}return n}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function xu(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t}if(t=C(t,360),e=C(e,100),n=C(n,100),0===e)i=r=o=n;else{var s=n<.5?n*(1+e):n+e-n*e,c=2*n-s;i=a(c,s,t+1/3),r=a(c,s,t),o=a(c,s,t-1/3)}return{r:255*i,g:255*r,b:255*o}}(t.h,c,h),u=!0,d="hsl"),t.hasOwnProperty("a")&&(o=t.a));var p,f,m;return o=P(o),{ok:u,format:t.format||d,r:a(255,s(r.r,0)),g:a(255,s(r.g,0)),b:a(255,s(r.b,0)),a:o}}(t);this._originalInput=t,this._r=h.r,this._g=h.g,this._b=h.b,this._a=h.a,this._roundA=o(100*this._a)/100,this._format=c.format||h.format,this._gradientType=c.gradientType,this._r<1&&(this._r=o(this._r)),this._g<1&&(this._g=o(this._g)),this._b<1&&(this._b=o(this._b)),this._ok=h.ok,this._tc_id=r++}function h(t,e,n){t=C(t,255),e=C(e,255),n=C(n,255);var i,r,o=s(t,e,n),c=a(t,e,n),l=(o+c)/2;if(o==c)i=r=0;else{var h=o-c;switch(r=l>.5?h/(2-o-c):h/(o+c),o){case t:i=(e-n)/h+(e>1)+720)%360;--e;)i.h=(i.h+r)%360,o.push(l(i));return o}function T(t,e){e=e||6;for(var n=l(t).toHsv(),i=n.h,r=n.s,o=n.v,a=[],s=1/e;e--;)a.push(l({h:i,s:r,v:o})),o=(o+s)%1;return a}l.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},getLuminance:function(){var t,n,i,r=this.toRgb();return t=r.r/255,n=r.g/255,i=r.b/255,.2126*(t<=.03928?t/12.92:e.pow((t+.055)/1.055,2.4))+.7152*(n<=.03928?n/12.92:e.pow((n+.055)/1.055,2.4))+.0722*(i<=.03928?i/12.92:e.pow((i+.055)/1.055,2.4))},setAlpha:function(t){return this._a=P(t),this._roundA=o(100*this._a)/100,this},toHsv:function(){var t=u(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=u(this._r,this._g,this._b),e=o(360*t.h),n=o(100*t.s),i=o(100*t.v);return 1==this._a?"hsv("+e+", "+n+"%, "+i+"%)":"hsva("+e+", "+n+"%, "+i+"%, "+this._roundA+")"},toHsl:function(){var t=h(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=h(this._r,this._g,this._b),e=o(360*t.h),n=o(100*t.s),i=o(100*t.l);return 1==this._a?"hsl("+e+", "+n+"%, "+i+"%)":"hsla("+e+", "+n+"%, "+i+"%, "+this._roundA+")"},toHex:function(t){return d(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(t){return function(t,e,n,i,r){var a=[N(o(t).toString(16)),N(o(e).toString(16)),N(o(n).toString(16)),N(D(i))];if(r&&a[0].charAt(0)==a[0].charAt(1)&&a[1].charAt(0)==a[1].charAt(1)&&a[2].charAt(0)==a[2].charAt(1)&&a[3].charAt(0)==a[3].charAt(1))return a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0)+a[3].charAt(0);return a.join("")}(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return"#"+this.toHex8(t)},toRgb:function(){return{r:o(this._r),g:o(this._g),b:o(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+o(this._r)+", "+o(this._g)+", "+o(this._b)+")":"rgba("+o(this._r)+", "+o(this._g)+", "+o(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:o(100*C(this._r,255))+"%",g:o(100*C(this._g,255))+"%",b:o(100*C(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+o(100*C(this._r,255))+"%, "+o(100*C(this._g,255))+"%, "+o(100*C(this._b,255))+"%)":"rgba("+o(100*C(this._r,255))+"%, "+o(100*C(this._g,255))+"%, "+o(100*C(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(L[d(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e="#"+p(this._r,this._g,this._b,this._a),n=e,i=this._gradientType?"GradientType = 1, ":"";if(t){var r=l(t);n="#"+p(r._r,r._g,r._b,r._a)}return"progid:DXImageTransform.Microsoft.gradient("+i+"startColorstr="+e+",endColorstr="+n+")"},toString:function(t){var e=!!t;t=t||this._format;var n=!1,i=this._a<1&&this._a>=0;return e||!i||"hex"!==t&&"hex6"!==t&&"hex3"!==t&&"hex4"!==t&&"hex8"!==t&&"name"!==t?("rgb"===t&&(n=this.toRgbString()),"prgb"===t&&(n=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(n=this.toHexString()),"hex3"===t&&(n=this.toHexString(!0)),"hex4"===t&&(n=this.toHex8String(!0)),"hex8"===t&&(n=this.toHex8String()),"name"===t&&(n=this.toName()),"hsl"===t&&(n=this.toHslString()),"hsv"===t&&(n=this.toHsvString()),n||this.toHexString()):"name"===t&&0===this._a?this.toName():this.toRgbString()},clone:function(){return l(this.toString())},_applyModification:function(t,e){var n=t.apply(null,[this].concat([].slice.call(e)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(v,arguments)},brighten:function(){return this._applyModification(y,arguments)},darken:function(){return this._applyModification(b,arguments)},desaturate:function(){return this._applyModification(f,arguments)},saturate:function(){return this._applyModification(m,arguments)},greyscale:function(){return this._applyModification(g,arguments)},spin:function(){return this._applyModification(x,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(E,arguments)},complement:function(){return this._applyCombination(_,arguments)},monochromatic:function(){return this._applyCombination(T,arguments)},splitcomplement:function(){return this._applyCombination(S,arguments)},triad:function(){return this._applyCombination(w,arguments)},tetrad:function(){return this._applyCombination(M,arguments)}},l.fromRatio=function(t,e){if("object"==typeof t){var n={};for(var i in t)t.hasOwnProperty(i)&&(n[i]="a"===i?t[i]:I(t[i]));t=n}return l(t,e)},l.equals=function(t,e){return!(!t||!e)&&l(t).toRgbString()==l(e).toRgbString()},l.random=function(){return l.fromRatio({r:c(),g:c(),b:c()})},l.mix=function(t,e,n){n=0===n?0:n||50;var i=l(t).toRgb(),r=l(e).toRgb(),o=n/100;return l({r:(r.r-i.r)*o+i.r,g:(r.g-i.g)*o+i.g,b:(r.b-i.b)*o+i.b,a:(r.a-i.a)*o+i.a})}, -// =4.5;break;case"AAlarge":r=o>=3;break;case"AAAsmall":r=o>=7}return r},l.mostReadable=function(t,e,n){var i,r,o,a,s=null,c=0;r=(n=n||{}).includeFallbackColors,o=n.level,a=n.size;for(var h=0;hc&&(c=i,s=l(e[h]));return l.isReadable(t,s,{level:o,size:a})||!r?s:(n.includeFallbackColors=!1,l.mostReadable(t,["#fff","#000"],n))};var A=l.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},L=l.hexNames=function(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[t[n]]=n);return e}(A);function P(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function C(t,n){(function(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t)})(t)&&(t="100%");var i=function(t){return"string"==typeof t&&-1!=t.indexOf("%")}(t);return t=a(n,s(0,parseFloat(t))),i&&(t=parseInt(t*n,10)/100),e.abs(t-n)<1e-6?1:t%n/parseFloat(n)}function R(t){return a(1,s(0,t))}function O(t){return parseInt(t,16)}function N(t){return 1==t.length?"0"+t:""+t}function I(t){return t<=1&&(t=100*t+"%"),t}function D(t){return e.round(255*parseFloat(t)).toString(16)}function k(t){return O(t)/255}var z,B,F,j=(B="[\\s|\\(]+("+(z="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+z+")[,|\\s]+("+z+")\\s*\\)?",F="[\\s|\\(]+("+z+")[,|\\s]+("+z+")[,|\\s]+("+z+")[,|\\s]+("+z+")\\s*\\)?",{CSS_UNIT:new RegExp(z),rgb:new RegExp("rgb"+B),rgba:new RegExp("rgba"+F),hsl:new RegExp("hsl"+B),hsla:new RegExp("hsla"+F),hsv:new RegExp("hsv"+B),hsva:new RegExp("hsva"+F),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function U(t){return!!j.CSS_UNIT.exec(t)}t.exports?t.exports=l:window.tinycolor=l}(Math)}(Tu);var Au=Tu.exports;function Lu(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Pu(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}function Fu(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function ju(t,e){return!e||"object"!=typeof e&&"function"!=typeof e?Fu(t):e}function Uu(t){var e=ku();return function(){var n,i=Iu(t);if(e){var r=Iu(this).constructor;n=Reflect.construct(i,arguments,r)}else n=i.apply(this,arguments);return ju(this,n)}}function Hu(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==n)return;var i,r,o=[],a=!0,s=!1;try{for(n=n.call(t);!(a=(i=n.next()).done)&&(o.push(i.value),!e||o.length!==e);a=!0);}catch(t){s=!0,r=t}finally{try{a||null==n.return||n.return()}finally{if(s)throw r}}return o}(t,e)||Vu(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Gu(t){return function(t){if(Array.isArray(t))return Wu(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||Vu(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Vu(t,e){if(t){if("string"==typeof t)return Wu(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Wu(t,e):void 0}}function Wu(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n2&&void 0!==arguments[2]?arguments[2]:{},i=n.objFilter,r=void 0===i?function(){return!0}:i,o=Bu(n,Zu);return wu(t,e.children.filter(r),(function(t){return e.add(t)}),(function(t){e.remove(t),Yu(t)}),Pu({objBindAttr:"__threeObj"},o))}var $u=function(t){return isNaN(t)?parseInt(Au(t).toHex(),16):t},Qu=function(t){return isNaN(t)?Au(t).getAlpha():1},Ku=function t(){var e=new Map,n=[],i=[],r=Su;function o(t){var o=t+"",a=e.get(o);if(!a){if(r!==Su)return r;e.set(o,a=n.push(t))}return i[(a-1)%i.length]}return o.domain=function(t){if(!arguments.length)return n.slice();n=[],e=new Map;for(const i of t){const t=i+"";e.has(t)||e.set(t,n.push(i))}return o},o.range=function(t){return arguments.length?(i=Array.from(t),o):i.slice()},o.unknown=function(t){return arguments.length?(r=t,o):r},o.copy=function(){return t(n,i).unknown(r)},Mu.apply(o,arguments),o}(Eu);function td(t,e,n){e&&"string"==typeof n&&t.filter((function(t){return!t[n]})).forEach((function(t){t[n]=Ku(e(t))}))}var ed=window.THREE?window.THREE:{Group:Dr,Mesh:mn,MeshLambertMaterial:Ba,Color:_e,BufferGeometry:Je,BufferAttribute:Le,Matrix4:Lt,Vector3:tt,SphereBufferGeometry:Ca,CylinderBufferGeometry:Yo,TubeBufferGeometry:class extends Je{constructor(t,e=64,n=1,i=8,r=!1){super(),this.type="TubeBufferGeometry",this.parameters={path:t,tubularSegments:e,radius:n,radialSegments:i,closed:r};const o=t.computeFrenetFrames(e,r);this.tangents=o.tangents,this.normals=o.normals,this.binormals=o.binormals;const a=new tt,s=new tt,c=new G;let l=new tt;const h=[],u=[],d=[],p=[];function f(r){l=t.getPointAt(r/e,l);const c=o.normals[r],d=o.binormals[r];for(let t=0;t<=i;t++){const e=t/i*Math.PI*2,r=Math.sin(e),o=-Math.cos(e);s.x=o*c.x+r*d.x,s.y=o*c.y+r*d.y,s.z=o*c.z+r*d.z,s.normalize(),u.push(s.x,s.y,s.z),a.x=l.x+n*s.x,a.y=l.y+n*s.y,a.z=l.z+n*s.z,h.push(a.x,a.y,a.z)}}!function(){for(let t=0;t1&&void 0!==arguments[1]?arguments[1]:Object,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=function(e){Nu(r,e);var i=Uu(r);function r(){var e;Ru(this,r);for(var o=arguments.length,a=new Array(o),s=0;s2?-60:-30),t<3&&i(e.graphData.nodes,"z"),t<2&&i(e.graphData.nodes,"y")}},dagMode:{onChange:function(t,e){!t&&"d3"===e.forceEngine&&(e.graphData.nodes||[]).forEach((function(t){return t.fx=t.fy=t.fz=void 0}))}},dagLevelDistance:{},dagNodeFilter:{default:function(t){return!0}},onDagError:{triggerUpdate:!1},nodeRelSize:{default:4},nodeId:{default:"id"},nodeVal:{default:"val"},nodeResolution:{default:8},nodeColor:{default:"color"},nodeAutoColorBy:{},nodeOpacity:{default:.75},nodeVisibility:{default:!0},nodeThreeObject:{},nodeThreeObjectExtend:{default:!1},linkSource:{default:"source"},linkTarget:{default:"target"},linkVisibility:{default:!0},linkColor:{default:"color"},linkAutoColorBy:{},linkOpacity:{default:.2},linkWidth:{},linkResolution:{default:6},linkCurvature:{default:0,triggerUpdate:!1},linkCurveRotation:{default:0,triggerUpdate:!1},linkMaterial:{},linkThreeObject:{},linkThreeObjectExtend:{default:!1},linkPositionUpdate:{triggerUpdate:!1},linkDirectionalArrowLength:{default:0},linkDirectionalArrowColor:{},linkDirectionalArrowRelPos:{default:.5,triggerUpdate:!1},linkDirectionalArrowResolution:{default:8},linkDirectionalParticles:{default:0},linkDirectionalParticleSpeed:{default:.01,triggerUpdate:!1},linkDirectionalParticleWidth:{default:.5},linkDirectionalParticleColor:{},linkDirectionalParticleResolution:{default:4},forceEngine:{default:"d3"},d3AlphaMin:{default:0},d3AlphaDecay:{default:.0228,triggerUpdate:!1,onChange:function(t,e){e.d3ForceLayout.alphaDecay(t)}},d3AlphaTarget:{default:0,triggerUpdate:!1,onChange:function(t,e){e.d3ForceLayout.alphaTarget(t)}},d3VelocityDecay:{default:.4,triggerUpdate:!1,onChange:function(t,e){e.d3ForceLayout.velocityDecay(t)}},ngraphPhysics:{default:{timeStep:20,gravity:-1.2,theta:.8,springLength:30,springCoefficient:8e-4,dragCoefficient:.02}},warmupTicks:{default:0,triggerUpdate:!1},cooldownTicks:{default:1/0,triggerUpdate:!1},cooldownTime:{default:15e3,triggerUpdate:!1},onLoading:{default:function(){},triggerUpdate:!1},onFinishLoading:{default:function(){},triggerUpdate:!1},onUpdate:{default:function(){},triggerUpdate:!1},onFinishUpdate:{default:function(){},triggerUpdate:!1},onEngineTick:{default:function(){},triggerUpdate:!1},onEngineStop:{default:function(){},triggerUpdate:!1}},methods:{refresh:function(t){return t._flushObjects=!0,t._rerender(),this},d3Force:function(t,e,n){return void 0===n?t.d3ForceLayout.force(e):(t.d3ForceLayout.force(e,n),this)},d3ReheatSimulation:function(t){return t.d3ForceLayout.alpha(1),this.resetCountdown(),this},resetCountdown:function(t){return t.cntTicks=0,t.startTickTime=new Date,t.engineRunning=!0,this},tickFrame:function(t){var e,n,i,r,o="ngraph"!==t.forceEngine;return t.engineRunning&&function(){++t.cntTicks>t.cooldownTicks||new Date-t.startTickTime>t.cooldownTime||o&&t.d3AlphaMin>0&&t.d3ForceLayout.alpha()0){var f=s.x-a.x,m=s.y-a.y||0,g=(new ed.Vector3).subVectors(u,h),v=g.clone().multiplyScalar(c).cross(0!==f||0!==m?new ed.Vector3(0,0,1):new ed.Vector3(0,1,0)).applyAxisAngle(g.normalize(),p).add((new ed.Vector3).addVectors(h,u).divideScalar(2));l=new ed.QuadraticBezierCurve3(h,v,u)}else{var y=70*c,b=-p,x=b+Math.PI/2;l=new ed.CubicBezierCurve3(h,new ed.Vector3(y*Math.cos(x),y*Math.sin(x),0).add(h),new ed.Vector3(y*Math.cos(b),y*Math.sin(b),0).add(h),u)}e.__curve=l}else e.__curve=null}}t.graphData.links.forEach((function(n){var i=n.__lineObj;if(i){var s=o?n:t.layout.getLinkPosition(t.layout.graph.getLink(n.source,n.target).id),c=s[o?"source":"from"],l=s[o?"target":"to"];if(c&&l&&c.hasOwnProperty("x")&&l.hasOwnProperty("x")){a(n);var h=r(n);if(!t.linkPositionUpdate||!t.linkPositionUpdate(h?i.children[1]:i,{start:{x:c.x,y:c.y,z:c.z},end:{x:l.x,y:l.y,z:l.z}},n)||h){var u=30,d=n.__curve,p=i.children.length?i.children[0]:i;if("Line"===p.type){if(d)p.geometry.setFromPoints(d.getPoints(u));else{var f=p.geometry.getAttribute("position");f&&f.array&&6===f.array.length||p.geometry[id]("position",f=new ed.BufferAttribute(new Float32Array(6),3)),f.array[0]=c.x,f.array[1]=c.y||0,f.array[2]=c.z||0,f.array[3]=l.x,f.array[4]=l.y||0,f.array[5]=l.z||0,f.needsUpdate=!0}p.geometry.computeBoundingSphere()}else if("Mesh"===p.type)if(d){p.geometry.type.match(/^Tube(Buffer)?Geometry$/)||(p.position.set(0,0,0),p.rotation.set(0,0,0),p.scale.set(1,1,1));var m=Math.ceil(10*e(n))/10/2,g=new ed.TubeBufferGeometry(d,u,m,t.linkResolution,!1);p.geometry.dispose(),p.geometry=g}else{if(!p.geometry.type.match(/^Cylinder(Buffer)?Geometry$/)){var v=Math.ceil(10*e(n))/10/2,y=new ed.CylinderBufferGeometry(v,v,1,t.linkResolution,1,!1);y[rd]((new ed.Matrix4).makeTranslation(0,.5,0)),y[rd]((new ed.Matrix4).makeRotationX(Math.PI/2)),p.geometry.dispose(),p.geometry=y}var b=new ed.Vector3(c.x,c.y||0,c.z||0),x=new ed.Vector3(l.x,l.y||0,l.z||0),_=b.distanceTo(x);p.position.x=b.x,p.position.y=b.y,p.position.z=b.z,p.scale.z=_,p.parent.localToWorld(x),p.lookAt(x)}}}}}))}(),e=cu(t.linkDirectionalArrowRelPos),n=cu(t.linkDirectionalArrowLength),i=cu(t.nodeVal),t.graphData.links.forEach((function(r){var a=r.__arrowObj;if(a){var s=o?r:t.layout.getLinkPosition(t.layout.graph.getLink(r.source,r.target).id),c=s[o?"source":"from"],l=s[o?"target":"to"];if(c&&l&&c.hasOwnProperty("x")&&l.hasOwnProperty("x")){var h=Math.sqrt(Math.max(0,i(c)||1))*t.nodeRelSize,u=Math.sqrt(Math.max(0,i(l)||1))*t.nodeRelSize,d=n(r),p=e(r),f=r.__curve?function(t){return r.__curve.getPoint(t)}:function(t){var e=function(t,e,n,i){return e[t]+(n[t]-e[t])*i||0};return{x:e("x",c,l,t),y:e("y",c,l,t),z:e("z",c,l,t)}},m=r.__curve?r.__curve.getLength():Math.sqrt(["x","y","z"].map((function(t){return Math.pow((l[t]||0)-(c[t]||0),2)})).reduce((function(t,e){return t+e}),0)),g=h+d+(m-h-u-d)*p,v=f(g/m),y=f((g-d)/m);["x","y","z"].forEach((function(t){return a.position[t]=y[t]}));var b=zu(ed.Vector3,Gu(["x","y","z"].map((function(t){return v[t]}))));a.parent.localToWorld(b),a.lookAt(b)}}})),r=cu(t.linkDirectionalParticleSpeed),t.graphData.links.forEach((function(e){var n=e.__photonsObj&&e.__photonsObj.children,i=e.__singleHopPhotonsObj&&e.__singleHopPhotonsObj.children;if(i&&i.length||n&&n.length){var a=o?e:t.layout.getLinkPosition(t.layout.graph.getLink(e.source,e.target).id),s=a[o?"source":"from"],c=a[o?"target":"to"];if(s&&c&&s.hasOwnProperty("x")&&c.hasOwnProperty("x")){var l=r(e),h=e.__curve?function(t){return e.__curve.getPoint(t)}:function(t){var e=function(t,e,n,i){return e[t]+(n[t]-e[t])*i||0};return{x:e("x",s,c,t),y:e("y",s,c,t),z:e("z",s,c,t)}};[].concat(Gu(n||[]),Gu(i||[])).forEach((function(t,e){var i="singleHopPhotons"===t.parent.__linkThreeObjType;if(t.hasOwnProperty("__progressRatio")||(t.__progressRatio=i?0:e/n.length),t.__progressRatio+=l,t.__progressRatio>=1){if(i)return t.parent.remove(t),void Yu(t);t.__progressRatio=t.__progressRatio%1}var r=t.__progressRatio,o=h(r);["x","y","z"].forEach((function(e){return t.position[e]=o[e]}))}))}}})),this},emitParticle:function(t,e){if(e){if(!e.__singleHopPhotonsObj){var n=new ed.Group;n.__linkThreeObjType="singleHopPhotons",e.__singleHopPhotonsObj=n,t.graphScene.add(n)}var i=cu(t.linkDirectionalParticleWidth),r=Math.ceil(10*i(e))/10/2,o=t.linkDirectionalParticleResolution,a=new ed.SphereBufferGeometry(r,o,o),s=cu(t.linkColor),c=cu(t.linkDirectionalParticleColor)(e)||s(e)||"#f0f0f0",l=new ed.Color($u(c)),h=3*t.linkOpacity,u=new ed.MeshLambertMaterial({color:l,transparent:!0,opacity:h});e.__singleHopPhotonsObj.add(new ed.Mesh(a,u))}return this},getGraphBbox:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){return!0};if(!t.initialised)return null;var n=function t(n){var i=[];if(n.geometry){n.geometry.computeBoundingBox();var r=new ed.Box3;r.copy(n.geometry.boundingBox).applyMatrix4(n.matrixWorld),i.push(r)}return i.concat.apply(i,Gu((n.children||[]).filter((function(t){return!t.hasOwnProperty("__graphObjType")||"node"===t.__graphObjType&&e(t.__data)})).map(t)))}(t.graphScene);return n.length?Object.assign.apply(Object,Gu(["x","y","z"].map((function(t){return Ou({},t,[hu(n,(function(e){return e.min[t]})),lu(n,(function(e){return e.max[t]}))])})))):null}},stateInit:function(){return{d3ForceLayout:Ql().force("link",wl()).force("charge",Kl()).force("center",Xc()).force("dagRadial",null).stop(),engineRunning:!1}},init:function(t,e){e.graphScene=t},update:function(t,e){var n=function(t){return t.some((function(t){return e.hasOwnProperty(t)}))};if(t.engineRunning=!1,t.onUpdate(),null!==t.nodeAutoColorBy&&n(["nodeAutoColorBy","graphData","nodeColor"])&&td(t.graphData.nodes,cu(t.nodeAutoColorBy),t.nodeColor),null!==t.linkAutoColorBy&&n(["linkAutoColorBy","graphData","linkColor"])&&td(t.graphData.links,cu(t.linkAutoColorBy),t.linkColor),t._flushObjects||n(["graphData","nodeThreeObject","nodeThreeObjectExtend","nodeVal","nodeColor","nodeVisibility","nodeRelSize","nodeResolution","nodeOpacity"])){var i=cu(t.nodeThreeObject),r=cu(t.nodeThreeObjectExtend),o=cu(t.nodeVal),a=cu(t.nodeColor),s=cu(t.nodeVisibility),c={},l={};Ju(t.graphData.nodes.filter(s),t.graphScene,{purge:t._flushObjects||n(["nodeThreeObject","nodeThreeObjectExtend"]),objFilter:function(t){return"node"===t.__graphObjType},createObj:function(e){var n,o=i(e),a=r(e);return o&&t.nodeThreeObject===o&&(o=o.clone()),o&&!a?n=o:((n=new ed.Mesh).__graphDefaultObj=!0,o&&a&&n.add(o)),n.__graphObjType="node",n},updateObj:function(e,n){if(e.__graphDefaultObj){var i=o(n)||1,r=Math.cbrt(i)*t.nodeRelSize,s=t.nodeResolution;e.geometry.type.match(/^Sphere(Buffer)?Geometry$/)&&e.geometry.parameters.radius===r&&e.geometry.parameters.widthSegments===s||(c.hasOwnProperty(i)||(c[i]=new ed.SphereBufferGeometry(r,s,s)),e.geometry.dispose(),e.geometry=c[i]);var h=a(n),u=new ed.Color($u(h||"#ffffaa")),d=t.nodeOpacity*Qu(h);"MeshLambertMaterial"===e.material.type&&e.material.color.equals(u)&&e.material.opacity===d||(l.hasOwnProperty(h)||(l[h]=new ed.MeshLambertMaterial({color:u,transparent:!0,opacity:d})),e.material.dispose(),e.material=l[h])}}})}if(t._flushObjects||n(["graphData","linkThreeObject","linkThreeObjectExtend","linkMaterial","linkColor","linkWidth","linkVisibility","linkResolution","linkOpacity","linkDirectionalArrowLength","linkDirectionalArrowColor","linkDirectionalArrowResolution","linkDirectionalParticles","linkDirectionalParticleWidth","linkDirectionalParticleColor","linkDirectionalParticleResolution"])){var h=cu(t.linkThreeObject),u=cu(t.linkThreeObjectExtend),d=cu(t.linkMaterial),p=cu(t.linkVisibility),f=cu(t.linkColor),m=cu(t.linkWidth),g={},v={},y={},b=t.graphData.links.filter(p);if(Ju(b,t.graphScene,{objBindAttr:"__lineObj",purge:t._flushObjects||n(["linkThreeObject","linkThreeObjectExtend","linkWidth"]),objFilter:function(t){return"link"===t.__graphObjType},createObj:function(e){var n,i,r=h(e),o=u(e);if(r&&t.linkThreeObject===r&&(r=r.clone()),!r||o)if(!!m(e))n=new ed.Mesh;else{var a=new ed.BufferGeometry;a[id]("position",new ed.BufferAttribute(new Float32Array(6),3)),n=new ed.Line(a)}return r?o?((i=new ed.Group).__graphDefaultObj=!0,i.add(n),i.add(r)):i=r:(i=n).__graphDefaultObj=!0,i.renderOrder=10,i.__graphObjType="link",i},updateObj:function(e,n){if(e.__graphDefaultObj){var i=e.children.length?e.children[0]:e,r=Math.ceil(10*m(n))/10,o=!!r;if(o){var a=r/2,s=t.linkResolution;if(!i.geometry.type.match(/^Cylinder(Buffer)?Geometry$/)||i.geometry.parameters.radiusTop!==a||i.geometry.parameters.radialSegments!==s){if(!g.hasOwnProperty(r)){var c=new ed.CylinderBufferGeometry(a,a,1,s,1,!1);c[rd]((new ed.Matrix4).makeTranslation(0,.5,0)),c[rd]((new ed.Matrix4).makeRotationX(Math.PI/2)),g[r]=c}i.geometry.dispose(),i.geometry=g[r]}}var l=d(n);if(l)i.material=l;else{var h=f(n),u=new ed.Color($u(h||"#f0f0f0")),p=t.linkOpacity*Qu(h),b=o?"MeshLambertMaterial":"LineBasicMaterial";if(i.material.type!==b||!i.material.color.equals(u)||i.material.opacity!==p){var x=o?v:y;x.hasOwnProperty(h)||(x[h]=new ed[b]({color:u,transparent:p<1,opacity:p,depthWrite:p>=1})),i.material.dispose(),i.material=x[h]}}}}}),t.linkDirectionalArrowLength||e.hasOwnProperty("linkDirectionalArrowLength")){var x=cu(t.linkDirectionalArrowLength),_=cu(t.linkDirectionalArrowColor);Ju(b.filter(x),t.graphScene,{objBindAttr:"__arrowObj",objFilter:function(t){return"arrow"===t.__linkThreeObjType},createObj:function(){var t=new ed.Mesh(void 0,new ed.MeshLambertMaterial({transparent:!0}));return t.__linkThreeObjType="arrow",t},updateObj:function(e,n){var i=x(n),r=t.linkDirectionalArrowResolution;if(!e.geometry.type.match(/^Cone(Buffer)?Geometry$/)||e.geometry.parameters.height!==i||e.geometry.parameters.radialSegments!==r){var o=new ed.ConeBufferGeometry(.25*i,i,r);o.translate(0,i/2,0),o.rotateX(Math.PI/2),e.geometry.dispose(),e.geometry=o}e.material.color=new ed.Color(_(n)||f(n)||"#f0f0f0"),e.material.opacity=3*t.linkOpacity}})}if(t.linkDirectionalParticles||e.hasOwnProperty("linkDirectionalParticles")){var w=cu(t.linkDirectionalParticles),M=cu(t.linkDirectionalParticleWidth),S=cu(t.linkDirectionalParticleColor),E={},T={};Ju(b.filter(w),t.graphScene,{objBindAttr:"__photonsObj",objFilter:function(t){return"photons"===t.__linkThreeObjType},createObj:function(){var t=new ed.Group;return t.__linkThreeObjType="photons",t},updateObj:function(e,n){var i,r=Math.round(Math.abs(w(n))),o=!!e.children.length&&e.children[0],a=Math.ceil(10*M(n))/10/2,s=t.linkDirectionalParticleResolution;o&&o.geometry.parameters.radius===a&&o.geometry.parameters.widthSegments===s?i=o.geometry:(T.hasOwnProperty(a)||(T[a]=new ed.SphereBufferGeometry(a,s,s)),i=T[a],o&&o.geometry.dispose());var c,l=S(n)||f(n)||"#f0f0f0",h=new ed.Color($u(l)),u=3*t.linkOpacity;o&&o.material.color.equals(h)&&o.material.opacity===u?c=o.material:(E.hasOwnProperty(l)||(E[l]=new ed.MeshLambertMaterial({color:h,transparent:!0,opacity:u})),c=E[l],o&&o.material.dispose()),Ju(Gu(new Array(r)).map((function(t,e){return{idx:e}})),e,{idAccessor:function(t){return t.idx},createObj:function(){return new ed.Mesh(i,c)},updateObj:function(t){t.geometry=i,t.material=c}})}})}}if(t._flushObjects=!1,n(["graphData","nodeId","linkSource","linkTarget","numDimensions","forceEngine","dagMode","dagNodeFilter","dagLevelDistance"])){t.engineRunning=!1,t.graphData.links.forEach((function(e){e.source=e[t.linkSource],e.target=e[t.linkTarget]}));var A,L="ngraph"!==t.forceEngine;if(L){(A=t.d3ForceLayout).stop().alpha(1).numDimensions(t.numDimensions).nodes(t.graphData.nodes);var P=t.d3ForceLayout.force("link");P&&P.id((function(e){return e[t.nodeId]})).links(t.graphData.links);var C=t.dagMode&&function(t,e){var n=t.nodes,i=t.links,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=r.nodeFilter,a=void 0===o?function(){return!0}:o,s=r.onLoopError,c=void 0===s?function(t){throw"Invalid DAG structure! Found cycle in node path: ".concat(t.join(" -> "),".")}:s,l={};n.forEach((function(t){return l[e(t)]={data:t,out:[],depth:-1,skip:!a(t)}})),i.forEach((function(t){var n=t.source,i=t.target,r=c(n),o=c(i);if(!l.hasOwnProperty(r))throw"Missing source node with id: ".concat(r);if(!l.hasOwnProperty(o))throw"Missing target node with id: ".concat(o);var a=l[r],s=l[o];function c(t){return"object"===Cu(t)?e(t):t}a.out.push(s)}));var h=[];return u(Object.values(l)),Object.assign.apply(Object,[{}].concat(Gu(Object.entries(l).filter((function(t){return!Hu(t,2)[1].skip})).map((function(t){var e=Hu(t,2);return Ou({},e[0],e[1].depth)})))));function u(t){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=0,o=t.length;ra.depth&&(a.depth=i,u(a.out,[].concat(Gu(n),[a]),i+(a.skip?0:1)))}}}(t.graphData,(function(e){return e[t.nodeId]}),{nodeFilter:t.dagNodeFilter,onLoopError:t.onDagError||void 0}),R=Math.max.apply(Math,Gu(Object.values(C||[]))),O=t.dagLevelDistance||t.graphData.nodes.length/(R||1)*2*(-1!==["radialin","radialout"].indexOf(t.dagMode)?.7:1);if(t.dagMode){var N=function(e,n){return function(i){return e?(C[i[t.nodeId]]-R/2)*O*(n?-1:1):void 0}},I=N(-1!==["lr","rl"].indexOf(t.dagMode),"rl"===t.dagMode),D=N(-1!==["td","bu"].indexOf(t.dagMode),"td"===t.dagMode),k=N(-1!==["zin","zout"].indexOf(t.dagMode),"zout"===t.dagMode);t.graphData.nodes.filter(t.dagNodeFilter).forEach((function(t){t.fx=I(t),t.fy=D(t),t.fz=k(t)}))}t.d3ForceLayout.force("dagRadial",-1!==["radialin","radialout"].indexOf(t.dagMode)?function(t,e,n,i){var r,o,a,s,c=yl(.1);function l(t){for(var c=0,l=r.length;c1&&(h.vy+=d*m),o>2&&(h.vz+=p*m)}}function h(){if(r){var e,n=r.length;for(a=new Array(n),s=new Array(n),e=0;e0&&t.d3ForceLayout.alpha()0&&(n.object.isPerspectiveCamera?m.multiplyScalar(t):n.object.isOrthographicCamera?(n.object.zoom/=t,n.object.updateProjectionMatrix()):console.warn("THREE.TrackballControls: Unsupported camera type")),n.staticMoving?x.copy(_):x.y+=(_.y-x.y)*this.dynamicDampingFactor)},this.panCamera=(z=new G,B=new tt,F=new tt,function(){if(z.copy(E).sub(S),z.lengthSq()){if(n.object.isOrthographicCamera){var t=(n.object.right-n.object.left)/n.object.zoom/n.domElement.clientWidth,e=(n.object.top-n.object.bottom)/n.object.zoom/n.domElement.clientWidth;z.x*=t,z.y*=e}z.multiplyScalar(m.length()*n.panSpeed),F.copy(m).cross(n.object.up).setLength(z.x),F.add(B.copy(n.object.up).setLength(z.y)),n.object.position.add(F),n.target.add(F),n.staticMoving?S.copy(E):S.add(z.subVectors(E,S).multiplyScalar(n.dynamicDampingFactor))}}),this.checkDistances=function(){n.noZoom&&n.noPan||(m.lengthSq()>n.maxDistance*n.maxDistance&&(n.object.position.addVectors(n.target,m.setLength(n.maxDistance)),x.copy(_)),m.lengthSq()h&&(n.dispatchEvent(T),u.copy(n.object.position))):n.object.isOrthographicCamera?(n.object.lookAt(n.target),(u.distanceToSquared(n.object.position)>h||d!==n.object.zoom)&&(n.dispatchEvent(T),u.copy(n.object.position),d=n.object.zoom)):console.warn("THREE.TrackballControls: Unsupported camera type")},this.reset=function(){p=i,f=i,n.target.copy(n.target0),n.object.position.copy(n.position0),n.object.up.copy(n.up0),n.object.zoom=n.zoom0,n.object.updateProjectionMatrix(),m.subVectors(n.object.position,n.target),n.object.lookAt(n.target),n.dispatchEvent(T),u.copy(n.object.position),d=n.object.zoom},this.dispose=function(){n.domElement.removeEventListener("contextmenu",Q,!1),n.domElement.removeEventListener("pointerdown",H,!1),n.domElement.removeEventListener("wheel",Y,!1),n.domElement.removeEventListener("touchstart",Z,!1),n.domElement.removeEventListener("touchend",$,!1),n.domElement.removeEventListener("touchmove",J,!1),n.domElement.ownerDocument.removeEventListener("pointermove",V,!1),n.domElement.ownerDocument.removeEventListener("pointerup",W,!1),window.removeEventListener("keydown",q,!1),window.removeEventListener("keyup",X,!1)},this.domElement.addEventListener("contextmenu",Q,!1),this.domElement.addEventListener("pointerdown",H,!1),this.domElement.addEventListener("wheel",Y,!1),this.domElement.addEventListener("touchstart",Z,!1),this.domElement.addEventListener("touchend",$,!1),this.domElement.addEventListener("touchmove",J,!1),this.domElement.ownerDocument.addEventListener("pointermove",V,!1),this.domElement.ownerDocument.addEventListener("pointerup",W,!1),window.addEventListener("keydown",q,!1),window.addEventListener("keyup",X,!1),this.handleResize(),this.update()};ad.prototype=Object.create(F.prototype),ad.prototype.constructor=ad;var sd=function(t,e){var n,i,r,h,u,d;void 0===e&&console.warn('THREE.OrbitControls: The second parameter "domElement" is now mandatory.'),e===document&&console.error('THREE.OrbitControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.'),this.object=t,this.domElement=e,this.enabled=!0,this.target=new tt,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.enableKeys=!0,this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40},this.mouseButtons={LEFT:o.ROTATE,MIDDLE:o.DOLLY,RIGHT:o.PAN},this.touches={ONE:a,TWO:c},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.getPolarAngle=function(){return x.phi},this.getAzimuthalAngle=function(){return x.theta},this.saveState=function(){p.target0.copy(p.target),p.position0.copy(p.object.position),p.zoom0=p.object.zoom},this.reset=function(){p.target.copy(p.target0),p.object.position.copy(p.position0),p.object.zoom=p.zoom0,p.object.updateProjectionMatrix(),p.dispatchEvent(f),p.update(),y=v.NONE},this.update=(n=new tt,i=(new K).setFromUnitVectors(t.up,new tt(0,1,0)),r=i.clone().invert(),h=new tt,u=new K,d=2*Math.PI,function(){var t=p.object.position;n.copy(t).sub(p.target),n.applyQuaternion(i),x.setFromVector3(n),p.autoRotate&&y===v.NONE&&D(2*Math.PI/60/60*p.autoRotateSpeed),p.enableDamping?(x.theta+=_.theta*p.dampingFactor,x.phi+=_.phi*p.dampingFactor):(x.theta+=_.theta,x.phi+=_.phi);var e=p.minAzimuthAngle,o=p.maxAzimuthAngle;return isFinite(e)&&isFinite(o)&&(e<-Math.PI?e+=d:e>Math.PI&&(e-=d),o<-Math.PI?o+=d:o>Math.PI&&(o-=d),x.theta=e<=o?Math.max(e,Math.min(o,x.theta)):x.theta>(e+o)/2?Math.max(e,x.theta):Math.min(o,x.theta)),x.phi=Math.max(p.minPolarAngle,Math.min(p.maxPolarAngle,x.phi)),x.makeSafe(),x.radius*=w,x.radius=Math.max(p.minDistance,Math.min(p.maxDistance,x.radius)),!0===p.enableDamping?p.target.addScaledVector(M,p.dampingFactor):p.target.add(M),n.setFromSpherical(x),n.applyQuaternion(r),t.copy(p.target).add(n),p.object.lookAt(p.target),!0===p.enableDamping?(_.theta*=1-p.dampingFactor,_.phi*=1-p.dampingFactor,M.multiplyScalar(1-p.dampingFactor)):(_.set(0,0,0),M.set(0,0,0)),w=1,!!(S||h.distanceToSquared(p.object.position)>b||8*(1-u.dot(p.object.quaternion))>b)&&(p.dispatchEvent(f),h.copy(p.object.position),u.copy(p.object.quaternion),S=!1,!0)}),this.dispose=function(){p.domElement.removeEventListener("contextmenu",ct,!1),p.domElement.removeEventListener("pointerdown",Q,!1),p.domElement.removeEventListener("wheel",it,!1),p.domElement.removeEventListener("touchstart",ot,!1),p.domElement.removeEventListener("touchend",st,!1),p.domElement.removeEventListener("touchmove",at,!1),p.domElement.ownerDocument.removeEventListener("pointermove",et,!1),p.domElement.ownerDocument.removeEventListener("pointerup",nt,!1),p.domElement.removeEventListener("keydown",rt,!1)};var p=this,f={type:"change"},m={type:"start"},g={type:"end"},v={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},y=v.NONE,b=1e-6,x=new zc,_=new zc,w=1,M=new tt,S=!1,E=new G,T=new G,A=new G,L=new G,P=new G,C=new G,R=new G,O=new G,N=new G;function I(){return Math.pow(.95,p.zoomSpeed)}function D(t){_.theta-=t}function k(t){_.phi-=t}var z,B=(z=new tt,function(t,e){z.setFromMatrixColumn(e,0),z.multiplyScalar(-t),M.add(z)}),F=function(){var t=new tt;return function(e,n){!0===p.screenSpacePanning?t.setFromMatrixColumn(n,1):(t.setFromMatrixColumn(n,0),t.crossVectors(p.object.up,t)),t.multiplyScalar(e),M.add(t)}}(),j=function(){var t=new tt;return function(e,n){var i=p.domElement;if(p.object.isPerspectiveCamera){var r=p.object.position;t.copy(r).sub(p.target);var o=t.length();o*=Math.tan(p.object.fov/2*Math.PI/180),B(2*e*o/i.clientHeight,p.object.matrix),F(2*n*o/i.clientHeight,p.object.matrix)}else p.object.isOrthographicCamera?(B(e*(p.object.right-p.object.left)/p.object.zoom/i.clientWidth,p.object.matrix),F(n*(p.object.top-p.object.bottom)/p.object.zoom/i.clientHeight,p.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),p.enablePan=!1)}}();function U(t){p.object.isPerspectiveCamera?w/=t:p.object.isOrthographicCamera?(p.object.zoom=Math.max(p.minZoom,Math.min(p.maxZoom,p.object.zoom*t)),p.object.updateProjectionMatrix(),S=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),p.enableZoom=!1)}function H(t){p.object.isPerspectiveCamera?w*=t:p.object.isOrthographicCamera?(p.object.zoom=Math.max(p.minZoom,Math.min(p.maxZoom,p.object.zoom/t)),p.object.updateProjectionMatrix(),S=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),p.enableZoom=!1)}function V(t){E.set(t.clientX,t.clientY)}function W(t){L.set(t.clientX,t.clientY)}function q(t){if(1==t.touches.length)E.set(t.touches[0].pageX,t.touches[0].pageY);else{var e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);E.set(e,n)}}function X(t){if(1==t.touches.length)L.set(t.touches[0].pageX,t.touches[0].pageY);else{var e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);L.set(e,n)}}function Y(t){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);R.set(0,i)}function Z(t){if(1==t.touches.length)T.set(t.touches[0].pageX,t.touches[0].pageY);else{var e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);T.set(e,n)}A.subVectors(T,E).multiplyScalar(p.rotateSpeed);var i=p.domElement;D(2*Math.PI*A.x/i.clientHeight),k(2*Math.PI*A.y/i.clientHeight),E.copy(T)}function J(t){if(1==t.touches.length)P.set(t.touches[0].pageX,t.touches[0].pageY);else{var e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);P.set(e,n)}C.subVectors(P,L).multiplyScalar(p.panSpeed),j(C.x,C.y),L.copy(P)}function $(t){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);O.set(0,i),N.set(0,Math.pow(O.y/R.y,p.zoomSpeed)),U(N.y),R.copy(O)}function Q(t){if(!1!==p.enabled)switch(t.pointerType){case"mouse":case"pen":!function(t){var e;switch(t.preventDefault(),p.domElement.focus?p.domElement.focus():window.focus(),t.button){case 0:e=p.mouseButtons.LEFT;break;case 1:e=p.mouseButtons.MIDDLE;break;case 2:e=p.mouseButtons.RIGHT;break;default:e=-1}switch(e){case o.DOLLY:if(!1===p.enableZoom)return;!function(t){R.set(t.clientX,t.clientY)}(t),y=v.DOLLY;break;case o.ROTATE:if(t.ctrlKey||t.metaKey||t.shiftKey){if(!1===p.enablePan)return;W(t),y=v.PAN}else{if(!1===p.enableRotate)return;V(t),y=v.ROTATE}break;case o.PAN:if(t.ctrlKey||t.metaKey||t.shiftKey){if(!1===p.enableRotate)return;V(t),y=v.ROTATE}else{if(!1===p.enablePan)return;W(t),y=v.PAN}break;default:y=v.NONE}y!==v.NONE&&(p.domElement.ownerDocument.addEventListener("pointermove",et,!1),p.domElement.ownerDocument.addEventListener("pointerup",nt,!1),p.dispatchEvent(m))}(t)}}function et(t){if(!1!==p.enabled)switch(t.pointerType){case"mouse":case"pen":!function(t){if(!1===p.enabled)return;switch(t.preventDefault(),y){case v.ROTATE:if(!1===p.enableRotate)return;!function(t){T.set(t.clientX,t.clientY),A.subVectors(T,E).multiplyScalar(p.rotateSpeed);var e=p.domElement;D(2*Math.PI*A.x/e.clientHeight),k(2*Math.PI*A.y/e.clientHeight),E.copy(T),p.update()}(t);break;case v.DOLLY:if(!1===p.enableZoom)return;!function(t){O.set(t.clientX,t.clientY),N.subVectors(O,R),N.y>0?U(I()):N.y<0&&H(I()),R.copy(O),p.update()}(t);break;case v.PAN:if(!1===p.enablePan)return;!function(t){P.set(t.clientX,t.clientY),C.subVectors(P,L).multiplyScalar(p.panSpeed),j(C.x,C.y),L.copy(P),p.update()}(t)}}(t)}}function nt(t){switch(t.pointerType){case"mouse":case"pen":!function(t){if(p.domElement.ownerDocument.removeEventListener("pointermove",et,!1),p.domElement.ownerDocument.removeEventListener("pointerup",nt,!1),!1===p.enabled)return;p.dispatchEvent(g),y=v.NONE}()}}function it(t){!1===p.enabled||!1===p.enableZoom||y!==v.NONE&&y!==v.ROTATE||(t.preventDefault(),t.stopPropagation(),p.dispatchEvent(m),function(t){t.deltaY<0?H(I()):t.deltaY>0&&U(I()),p.update()}(t),p.dispatchEvent(g))}function rt(t){!1!==p.enabled&&!1!==p.enableKeys&&!1!==p.enablePan&&function(t){var e=!1;switch(t.keyCode){case p.keys.UP:j(0,p.keyPanSpeed),e=!0;break;case p.keys.BOTTOM:j(0,-p.keyPanSpeed),e=!0;break;case p.keys.LEFT:j(p.keyPanSpeed,0),e=!0;break;case p.keys.RIGHT:j(-p.keyPanSpeed,0),e=!0}e&&(t.preventDefault(),p.update())}(t)}function ot(t){if(!1!==p.enabled){switch(t.preventDefault(),t.touches.length){case 1:switch(p.touches.ONE){case a:if(!1===p.enableRotate)return;q(t),y=v.TOUCH_ROTATE;break;case s:if(!1===p.enablePan)return;X(t),y=v.TOUCH_PAN;break;default:y=v.NONE}break;case 2:switch(p.touches.TWO){case c:if(!1===p.enableZoom&&!1===p.enablePan)return;!function(t){p.enableZoom&&Y(t),p.enablePan&&X(t)}(t),y=v.TOUCH_DOLLY_PAN;break;case l:if(!1===p.enableZoom&&!1===p.enableRotate)return;!function(t){p.enableZoom&&Y(t),p.enableRotate&&q(t)}(t),y=v.TOUCH_DOLLY_ROTATE;break;default:y=v.NONE}break;default:y=v.NONE}y!==v.NONE&&p.dispatchEvent(m)}}function at(t){if(!1!==p.enabled)switch(t.preventDefault(),t.stopPropagation(),y){case v.TOUCH_ROTATE:if(!1===p.enableRotate)return;Z(t),p.update();break;case v.TOUCH_PAN:if(!1===p.enablePan)return;J(t),p.update();break;case v.TOUCH_DOLLY_PAN:if(!1===p.enableZoom&&!1===p.enablePan)return;!function(t){p.enableZoom&&$(t),p.enablePan&&J(t)}(t),p.update();break;case v.TOUCH_DOLLY_ROTATE:if(!1===p.enableZoom&&!1===p.enableRotate)return;!function(t){p.enableZoom&&$(t),p.enableRotate&&Z(t)}(t),p.update();break;default:y=v.NONE}}function st(t){!1!==p.enabled&&(p.dispatchEvent(g),y=v.NONE)}function ct(t){!1!==p.enabled&&t.preventDefault()}p.domElement.addEventListener("contextmenu",ct,!1),p.domElement.addEventListener("pointerdown",Q,!1),p.domElement.addEventListener("wheel",it,!1),p.domElement.addEventListener("touchstart",ot,!1),p.domElement.addEventListener("touchend",st,!1),p.domElement.addEventListener("touchmove",at,!1),p.domElement.addEventListener("keydown",rt,!1),this.update()};sd.prototype=Object.create(F.prototype),sd.prototype.constructor=sd;var cd=function(t,e){sd.call(this,t,e),this.screenSpacePanning=!1,this.mouseButtons.LEFT=o.PAN,this.mouseButtons.RIGHT=o.ROTATE,this.touches.ONE=s,this.touches.TWO=l};(cd.prototype=Object.create(F.prototype)).constructor=cd;var ld=function(t,e){void 0===e&&(console.warn('THREE.FlyControls: The second parameter "domElement" is now mandatory.'),e=document),this.object=t,this.domElement=e,e&&this.domElement.setAttribute("tabindex",-1),this.movementSpeed=1,this.rollSpeed=.005,this.dragToLook=!1,this.autoForward=!1;var n,i,r=this,o={type:"change"},a=1e-6;function s(t,e){return function(){e.apply(t,arguments)}}function c(t){t.preventDefault()}this.tmpQuaternion=new K,this.mouseStatus=0,this.moveState={up:0,down:0,left:0,right:0,forward:0,back:0,pitchUp:0,pitchDown:0,yawLeft:0,yawRight:0,rollLeft:0,rollRight:0},this.moveVector=new tt(0,0,0),this.rotationVector=new tt(0,0,0),this.keydown=function(t){if(!t.altKey){switch(t.keyCode){case 16:this.movementSpeedMultiplier=.1;break;case 87:this.moveState.forward=1;break;case 83:this.moveState.back=1;break;case 65:this.moveState.left=1;break;case 68:this.moveState.right=1;break;case 82:this.moveState.up=1;break;case 70:this.moveState.down=1;break;case 38:this.moveState.pitchUp=1;break;case 40:this.moveState.pitchDown=1;break;case 37:this.moveState.yawLeft=1;break;case 39:this.moveState.yawRight=1;break;case 81:this.moveState.rollLeft=1;break;case 69:this.moveState.rollRight=1}this.updateMovementVector(),this.updateRotationVector()}},this.keyup=function(t){switch(t.keyCode){case 16:this.movementSpeedMultiplier=1;break;case 87:this.moveState.forward=0;break;case 83:this.moveState.back=0;break;case 65:this.moveState.left=0;break;case 68:this.moveState.right=0;break;case 82:this.moveState.up=0;break;case 70:this.moveState.down=0;break;case 38:this.moveState.pitchUp=0;break;case 40:this.moveState.pitchDown=0;break;case 37:this.moveState.yawLeft=0;break;case 39:this.moveState.yawRight=0;break;case 81:this.moveState.rollLeft=0;break;case 69:this.moveState.rollRight=0}this.updateMovementVector(),this.updateRotationVector()},this.mousedown=function(t){if(this.domElement!==document&&this.domElement.focus(),t.preventDefault(),t.stopPropagation(),this.dragToLook)this.mouseStatus++;else{switch(t.button){case 0:this.moveState.forward=1;break;case 2:this.moveState.back=1}this.updateMovementVector()}},this.mousemove=function(t){if(!this.dragToLook||this.mouseStatus>0){var e=this.getContainerDimensions(),n=e.size[0]/2,i=e.size[1]/2;this.moveState.yawLeft=-(t.pageX-e.offset[0]-n)/n,this.moveState.pitchDown=(t.pageY-e.offset[1]-i)/i,this.updateRotationVector()}},this.mouseup=function(t){if(t.preventDefault(),t.stopPropagation(),this.dragToLook)this.mouseStatus--,this.moveState.yawLeft=this.moveState.pitchDown=0;else{switch(t.button){case 0:this.moveState.forward=0;break;case 2:this.moveState.back=0}this.updateMovementVector()}this.updateRotationVector()},this.update=(n=new K,i=new tt,function(t){var e=t*r.movementSpeed,s=t*r.rollSpeed;r.object.translateX(r.moveVector.x*e),r.object.translateY(r.moveVector.y*e),r.object.translateZ(r.moveVector.z*e),r.tmpQuaternion.set(r.rotationVector.x*s,r.rotationVector.y*s,r.rotationVector.z*s,1).normalize(),r.object.quaternion.multiply(r.tmpQuaternion),(i.distanceToSquared(r.object.position)>a||8*(1-n.dot(r.object.quaternion))>a)&&(r.dispatchEvent(o),n.copy(r.object.quaternion),i.copy(r.object.position))}),this.updateMovementVector=function(){var t=this.moveState.forward||this.autoForward&&!this.moveState.back?1:0;this.moveVector.x=-this.moveState.left+this.moveState.right,this.moveVector.y=-this.moveState.down+this.moveState.up,this.moveVector.z=-t+this.moveState.back},this.updateRotationVector=function(){this.rotationVector.x=-this.moveState.pitchDown+this.moveState.pitchUp,this.rotationVector.y=-this.moveState.yawRight+this.moveState.yawLeft,this.rotationVector.z=-this.moveState.rollRight+this.moveState.rollLeft},this.getContainerDimensions=function(){return this.domElement!=document?{size:[this.domElement.offsetWidth,this.domElement.offsetHeight],offset:[this.domElement.offsetLeft,this.domElement.offsetTop]}:{size:[window.innerWidth,window.innerHeight],offset:[0,0]}},this.dispose=function(){this.domElement.removeEventListener("contextmenu",c,!1),this.domElement.removeEventListener("mousedown",h,!1),this.domElement.removeEventListener("mousemove",l,!1),this.domElement.removeEventListener("mouseup",u,!1),window.removeEventListener("keydown",d,!1),window.removeEventListener("keyup",p,!1)};var l=s(this,this.mousemove),h=s(this,this.mousedown),u=s(this,this.mouseup),d=s(this,this.keydown),p=s(this,this.keyup);this.domElement.addEventListener("contextmenu",c,!1),this.domElement.addEventListener("mousemove",l,!1),this.domElement.addEventListener("mousedown",h,!1),this.domElement.addEventListener("mouseup",u,!1),window.addEventListener("keydown",d,!1),window.addEventListener("keyup",p,!1),this.updateMovementVector(),this.updateRotationVector()};ld.prototype=Object.create(F.prototype),ld.prototype.constructor=ld;var hd,ud,dd,pd={uniforms:{tDiffuse:{value:null},opacity:{value:1}},vertexShader:["varying vec2 vUv;","void main() {","\tvUv = uv;","\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );","}"].join("\n"),fragmentShader:["uniform float opacity;","uniform sampler2D tDiffuse;","varying vec2 vUv;","void main() {","\tvec4 texel = texture2D( tDiffuse, vUv );","\tgl_FragColor = opacity * texel;","}"].join("\n")};function fd(){this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1}Object.assign(fd.prototype,{setSize:function(){},render:function(){console.error("THREE.Pass: .render() must be implemented in derived pass.")}}),fd.FullScreenQuad=(hd=new Vs(-1,1,1,-1,0,1),ud=new Dn(2,2),dd=function(t){this._mesh=new mn(ud,t)},Object.defineProperty(dd.prototype,"material",{get:function(){return this._mesh.material},set:function(t){this._mesh.material=t}}),Object.assign(dd.prototype,{dispose:function(){this._mesh.geometry.dispose()},render:function(t){t.render(this._mesh,hd)}}),dd);var md=function(t,e){fd.call(this),this.textureID=void 0!==e?e:"tDiffuse",t instanceof wn?(this.uniforms=t.uniforms,this.material=t):t&&(this.uniforms=_n.clone(t.uniforms),this.material=new wn({defines:Object.assign({},t.defines),uniforms:this.uniforms,vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})),this.fsQuad=new fd.FullScreenQuad(this.material)};md.prototype=Object.assign(Object.create(fd.prototype),{constructor:md,render:function(t,e,n){this.uniforms[this.textureID]&&(this.uniforms[this.textureID].value=n.texture),this.fsQuad.material=this.material,this.renderToScreen?(t.setRenderTarget(null),this.fsQuad.render(t)):(t.setRenderTarget(e),this.clear&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),this.fsQuad.render(t))}});var gd=function(t,e){fd.call(this),this.scene=t,this.camera=e,this.clear=!0,this.needsSwap=!1,this.inverse=!1};gd.prototype=Object.assign(Object.create(fd.prototype),{constructor:gd,render:function(t,e,n){var i,r,o=t.getContext(),a=t.state;a.buffers.color.setMask(!1),a.buffers.depth.setMask(!1),a.buffers.color.setLocked(!0),a.buffers.depth.setLocked(!0),this.inverse?(i=0,r=1):(i=1,r=0),a.buffers.stencil.setTest(!0),a.buffers.stencil.setOp(o.REPLACE,o.REPLACE,o.REPLACE),a.buffers.stencil.setFunc(o.ALWAYS,i,4294967295),a.buffers.stencil.setClear(r),a.buffers.stencil.setLocked(!0),t.setRenderTarget(n),this.clear&&t.clear(),t.render(this.scene,this.camera),t.setRenderTarget(e),this.clear&&t.clear(),t.render(this.scene,this.camera),a.buffers.color.setLocked(!1),a.buffers.depth.setLocked(!1),a.buffers.stencil.setLocked(!1),a.buffers.stencil.setFunc(o.EQUAL,1,4294967295),a.buffers.stencil.setOp(o.KEEP,o.KEEP,o.KEEP),a.buffers.stencil.setLocked(!0)}});var vd=function(){fd.call(this),this.needsSwap=!1};vd.prototype=Object.create(fd.prototype),Object.assign(vd.prototype,{render:function(t){t.state.buffers.stencil.setLocked(!1),t.state.buffers.stencil.setTest(!1)}});var yd=function(t,e){if(this.renderer=t,void 0===e){var n={minFilter:m,magFilter:m,format:S},i=t.getSize(new G);this._pixelRatio=t.getPixelRatio(),this._width=i.width,this._height=i.height,(e=new $(this._width*this._pixelRatio,this._height*this._pixelRatio,n)).texture.name="EffectComposer.rt1"}else this._pixelRatio=1,this._width=e.width,this._height=e.height;this.renderTarget1=e,this.renderTarget2=e.clone(),this.renderTarget2.texture.name="EffectComposer.rt2",this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2,this.renderToScreen=!0,this.passes=[],void 0===pd&&console.error("THREE.EffectComposer relies on CopyShader"),void 0===md&&console.error("THREE.EffectComposer relies on ShaderPass"),this.copyPass=new md(pd),this.clock=new fc};Object.assign(yd.prototype,{swapBuffers:function(){var t=this.readBuffer;this.readBuffer=this.writeBuffer,this.writeBuffer=t},addPass:function(t){this.passes.push(t),t.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)},insertPass:function(t,e){this.passes.splice(e,0,t),t.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)},removePass:function(t){const e=this.passes.indexOf(t);-1!==e&&this.passes.splice(e,1)},isLastEnabledPass:function(t){for(var e=t+1;e1?i-1:0),o=1;o=0&&r<1?(s=o,c=a):r>=1&&r<2?(s=a,c=o):r>=2&&r<3?(c=o,l=a):r>=3&&r<4?(c=a,l=o):r>=4&&r<5?(s=a,l=o):r>=5&&r<6&&(s=o,l=a);var h=n-o/2;return i(s+h,c+h,l+h)}var Id={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"639",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"};var Dd=/^#[a-fA-F0-9]{6}$/,kd=/^#[a-fA-F0-9]{8}$/,zd=/^#[a-fA-F0-9]{3}$/,Bd=/^#[a-fA-F0-9]{4}$/,Fd=/^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/i,jd=/^rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*([-+]?[0-9]*[.]?[0-9]+)\s*\)$/i,Ud=/^hsl\(\s*(\d{0,3}[.]?[0-9]+)\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*\)$/i,Hd=/^hsla\(\s*(\d{0,3}[.]?[0-9]+)\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*,\s*(\d{1,3}[.]?[0-9]?)%\s*,\s*([-+]?[0-9]*[.]?[0-9]+)\s*\)$/i;function Gd(t){if("string"!=typeof t)throw new Cd(3);var e=function(t){if("string"!=typeof t)return t;var e=t.toLowerCase();return Id[e]?"#"+Id[e]:t}(t);if(e.match(Dd))return{red:parseInt(""+e[1]+e[2],16),green:parseInt(""+e[3]+e[4],16),blue:parseInt(""+e[5]+e[6],16)};if(e.match(kd)){var n=parseFloat((parseInt(""+e[7]+e[8],16)/255).toFixed(2));return{red:parseInt(""+e[1]+e[2],16),green:parseInt(""+e[3]+e[4],16),blue:parseInt(""+e[5]+e[6],16),alpha:n}}if(e.match(zd))return{red:parseInt(""+e[1]+e[1],16),green:parseInt(""+e[2]+e[2],16),blue:parseInt(""+e[3]+e[3],16)};if(e.match(Bd)){var i=parseFloat((parseInt(""+e[4]+e[4],16)/255).toFixed(2));return{red:parseInt(""+e[1]+e[1],16),green:parseInt(""+e[2]+e[2],16),blue:parseInt(""+e[3]+e[3],16),alpha:i}}var r=Fd.exec(e);if(r)return{red:parseInt(""+r[1],10),green:parseInt(""+r[2],10),blue:parseInt(""+r[3],10)};var o=jd.exec(e.substring(0,50));if(o)return{red:parseInt(""+o[1],10),green:parseInt(""+o[2],10),blue:parseInt(""+o[3],10),alpha:parseFloat(""+o[4])};var a=Ud.exec(e);if(a){var s="rgb("+Nd(parseInt(""+a[1],10),parseInt(""+a[2],10)/100,parseInt(""+a[3],10)/100)+")",c=Fd.exec(s);if(!c)throw new Cd(4,e,s);return{red:parseInt(""+c[1],10),green:parseInt(""+c[2],10),blue:parseInt(""+c[3],10)}}var l=Hd.exec(e.substring(0,50));if(l){var h="rgb("+Nd(parseInt(""+l[1],10),parseInt(""+l[2],10)/100,parseInt(""+l[3],10)/100)+")",u=Fd.exec(h);if(!u)throw new Cd(4,e,h);return{red:parseInt(""+u[1],10),green:parseInt(""+u[2],10),blue:parseInt(""+u[3],10),alpha:parseFloat(""+l[4])}}throw new Cd(5)}var Vd=function(t){return 7===t.length&&t[1]===t[2]&&t[3]===t[4]&&t[5]===t[6]?"#"+t[1]+t[3]+t[5]:t};function Wd(t){var e=t.toString(16);return 1===e.length?"0"+e:e}function qd(t,e,n){if("number"==typeof t&&"number"==typeof e&&"number"==typeof n)return Vd("#"+Wd(t)+Wd(e)+Wd(n));if("object"==typeof t&&void 0===e&&void 0===n)return Vd("#"+Wd(t.red)+Wd(t.green)+Wd(t.blue));throw new Cd(6)}function Xd(t,e,n){return function(){var i=n.concat(Array.prototype.slice.call(arguments));return i.length>=e?t.apply(this,i):Xd(t,e,i)}}function Yd(t){return Xd(t,t.length,[])}function Zd(t,e){if("transparent"===e)return e;var n,i,r,o=Gd(e),a="number"==typeof o.alpha?o.alpha:1;return function(t,e,n,i){if("string"==typeof t&&"number"==typeof e){var r=Gd(t);return"rgba("+r.red+","+r.green+","+r.blue+","+e+")"}if("number"==typeof t&&"number"==typeof e&&"number"==typeof n&&"number"==typeof i)return i>=1?qd(t,e,n):"rgba("+t+","+e+","+n+","+i+")";if("object"==typeof t&&void 0===e&&void 0===n&&void 0===i)return t.alpha>=1?qd(t.red,t.green,t.blue):"rgba("+t.red+","+t.green+","+t.blue+","+t.alpha+")";throw new Cd(7)}(_d({},o,{alpha:(n=0,i=1,r=(100*a+100*parseFloat(t))/100,Math.max(n,Math.min(i,r)))}))}var Jd=Yd(Zd),$d={Linear:{None:function(t){return t}},Quadratic:{In:function(t){return t*t},Out:function(t){return t*(2-t)},InOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)}},Cubic:{In:function(t){return t*t*t},Out:function(t){return--t*t*t+1},InOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)}},Quartic:{In:function(t){return t*t*t*t},Out:function(t){return 1- --t*t*t*t},InOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)}},Quintic:{In:function(t){return t*t*t*t*t},Out:function(t){return--t*t*t*t*t+1},InOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)}},Sinusoidal:{In:function(t){return 1-Math.cos(t*Math.PI/2)},Out:function(t){return Math.sin(t*Math.PI/2)},InOut:function(t){return.5*(1-Math.cos(Math.PI*t))}},Exponential:{In:function(t){return 0===t?0:Math.pow(1024,t-1)},Out:function(t){return 1===t?1:1-Math.pow(2,-10*t)},InOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(2-Math.pow(2,-10*(t-1)))}},Circular:{In:function(t){return 1-Math.sqrt(1-t*t)},Out:function(t){return Math.sqrt(1- --t*t)},InOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)}},Elastic:{In:function(t){return 0===t?0:1===t?1:-Math.pow(2,10*(t-1))*Math.sin(5*(t-1.1)*Math.PI)},Out:function(t){return 0===t?0:1===t?1:Math.pow(2,-10*t)*Math.sin(5*(t-.1)*Math.PI)+1},InOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?-.5*Math.pow(2,10*(t-1))*Math.sin(5*(t-1.1)*Math.PI):.5*Math.pow(2,-10*(t-1))*Math.sin(5*(t-1.1)*Math.PI)+1}},Back:{In:function(t){var e=1.70158;return t*t*((e+1)*t-e)},Out:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},InOut:function(t){var e=2.5949095;return(t*=2)<1?t*t*((e+1)*t-e)*.5:.5*((t-=2)*t*((e+1)*t+e)+2)}},Bounce:{In:function(t){return 1-$d.Bounce.Out(1-t)},Out:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},InOut:function(t){return t<.5?.5*$d.Bounce.In(2*t):.5*$d.Bounce.Out(2*t-1)+.5}}},Qd="undefined"==typeof self&&"undefined"!=typeof process&&process.hrtime?function(){var t=process.hrtime();return 1e3*t[0]+t[1]/1e6}:"undefined"!=typeof self&&void 0!==self.performance&&void 0!==self.performance.now?self.performance.now.bind(self.performance):void 0!==Date.now?Date.now:function(){return(new Date).getTime()},Kd=function(){function t(){this._tweens={},this._tweensAddedDuringUpdate={}}return t.prototype.getAll=function(){var t=this;return Object.keys(this._tweens).map((function(e){return t._tweens[e]}))},t.prototype.removeAll=function(){this._tweens={}},t.prototype.add=function(t){this._tweens[t.getId()]=t,this._tweensAddedDuringUpdate[t.getId()]=t},t.prototype.remove=function(t){delete this._tweens[t.getId()],delete this._tweensAddedDuringUpdate[t.getId()]},t.prototype.update=function(t,e){void 0===t&&(t=Qd()),void 0===e&&(e=!1);var n=Object.keys(this._tweens);if(0===n.length)return!1;for(;n.length>0;){this._tweensAddedDuringUpdate={};for(var i=0;i1?o(t[n],t[n-1],n-i):o(t[r],t[r+1>n?n:r+1],i-r)},Bezier:function(t,e){for(var n=0,i=t.length-1,r=Math.pow,o=tp.Utils.Bernstein,a=0;a<=i;a++)n+=r(1-e,i-a)*r(e,a)*t[a]*o(i,a);return n},CatmullRom:function(t,e){var n=t.length-1,i=n*e,r=Math.floor(i),o=tp.Utils.CatmullRom;return t[0]===t[n]?(e<0&&(r=Math.floor(i=n*(1+e))),o(t[(r-1+n)%n],t[r],t[(r+1)%n],t[(r+2)%n],i-r)):e<0?t[0]-(o(t[0],t[0],t[1],t[1],-i)-t[0]):e>1?t[n]-(o(t[n],t[n],t[n-1],t[n-1],i-n)-t[n]):o(t[r?r-1:0],t[r],t[n1;i--)n*=i;return t[e]=n,n}}(),CatmullRom:function(t,e,n,i,r){var o=.5*(n-t),a=.5*(i-e),s=r*r;return(2*e-2*n+o+a)*(r*s)+(-3*e+3*n-2*o-a)*s+o*r+e}}},ep=function(){function t(){}return t.nextId=function(){return t._nextId++},t._nextId=0,t}(),np=new Kd,ip=function(){function t(t,e){void 0===e&&(e=np),this._object=t,this._group=e,this._isPaused=!1,this._pauseStart=0,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._initialRepeat=0,this._repeat=0,this._yoyo=!1,this._isPlaying=!1,this._reversed=!1,this._delayTime=0,this._startTime=0,this._easingFunction=$d.Linear.None,this._interpolationFunction=tp.Linear,this._chainedTweens=[],this._onStartCallbackFired=!1,this._id=ep.nextId(),this._isChainStopped=!1,this._goToEnd=!1}return t.prototype.getId=function(){return this._id},t.prototype.isPlaying=function(){return this._isPlaying},t.prototype.isPaused=function(){return this._isPaused},t.prototype.to=function(t,e){return this._valuesEnd=Object.create(t),void 0!==e&&(this._duration=e),this},t.prototype.duration=function(t){return this._duration=t,this},t.prototype.start=function(t){if(this._isPlaying)return this;if(this._group&&this._group.add(this),this._repeat=this._initialRepeat,this._reversed)for(var e in this._reversed=!1,this._valuesStartRepeat)this._swapEndStartRepeatValues(e),this._valuesStart[e]=this._valuesStartRepeat[e];return this._isPlaying=!0,this._isPaused=!1,this._onStartCallbackFired=!1,this._isChainStopped=!1,this._startTime=void 0!==t?"string"==typeof t?Qd()+parseFloat(t):t:Qd(),this._startTime+=this._delayTime,this._setupProperties(this._object,this._valuesStart,this._valuesEnd,this._valuesStartRepeat),this},t.prototype._setupProperties=function(t,e,n,i){for(var r in n){var o=t[r],a=Array.isArray(o),s=a?"array":typeof o,c=!a&&Array.isArray(n[r]);if("undefined"!==s&&"function"!==s){if(c){var l=n[r];if(0===l.length)continue;l=l.map(this._handleRelativeValue.bind(this,o)),n[r]=[o].concat(l)}if("object"!==s&&!a||!o||c)void 0===e[r]&&(e[r]=o),a||(e[r]*=1),i[r]=c?n[r].slice().reverse():e[r]||0;else{for(var h in e[r]=a?[]:{},o)e[r][h]=o[h];i[r]=a?[]:{},this._setupProperties(o,e[r],n[r],i[r])}}}},t.prototype.stop=function(){return this._isChainStopped||(this._isChainStopped=!0,this.stopChainedTweens()),this._isPlaying?(this._group&&this._group.remove(this),this._isPlaying=!1,this._isPaused=!1,this._onStopCallback&&this._onStopCallback(this._object),this):this},t.prototype.end=function(){return this._goToEnd=!0,this.update(1/0),this},t.prototype.pause=function(t){return void 0===t&&(t=Qd()),this._isPaused||!this._isPlaying||(this._isPaused=!0,this._pauseStart=t,this._group&&this._group.remove(this)),this},t.prototype.resume=function(t){return void 0===t&&(t=Qd()),this._isPaused&&this._isPlaying?(this._isPaused=!1,this._startTime+=t-this._pauseStart,this._pauseStart=0,this._group&&this._group.add(this),this):this},t.prototype.stopChainedTweens=function(){for(var t=0,e=this._chainedTweens.length;tr)return!1;e&&this.start(t)}if(this._goToEnd=!1,t1?1:i;var o=this._easingFunction(i);if(this._updateProperties(this._object,this._valuesStart,this._valuesEnd,o),this._onUpdateCallback&&this._onUpdateCallback(this._object,i),1===i){if(this._repeat>0){for(n in isFinite(this._repeat)&&this._repeat--,this._valuesStartRepeat)this._yoyo||"string"!=typeof this._valuesEnd[n]||(this._valuesStartRepeat[n]=this._valuesStartRepeat[n]+parseFloat(this._valuesEnd[n])),this._yoyo&&this._swapEndStartRepeatValues(n),this._valuesStart[n]=this._valuesStartRepeat[n];return this._yoyo&&(this._reversed=!this._reversed),void 0!==this._repeatDelayTime?this._startTime=t+this._repeatDelayTime:this._startTime=t+this._delayTime,this._onRepeatCallback&&this._onRepeatCallback(this._object),!0}this._onCompleteCallback&&this._onCompleteCallback(this._object);for(var a=0,s=this._chainedTweens.length;at.length)&&(e=t.length);for(var n=0,i=new Array(e);n1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,i=arguments.length,r=new Array(i>3?i-3:0),o=3;o2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10,r=t.camera;if(e){var o=new vp.Vector3(0,0,0),a=2*Math.max.apply(Math,fp(Object.entries(e).map((function(t){var e=pp(t,2),n=e[0],i=e[1];return Math.max.apply(Math,fp(i.map((function(t){return Math.abs(o[n]-t)}))))})))),s=(1-2*i/t.height)*r.fov,c=a/Math.atan(s*Math.PI/180),l=c/r.aspect,h=Math.max(c,l);if(h>0){var u=o.clone().sub(r.position).normalize().multiplyScalar(-h);this.cameraPosition(u,o,n)}}return this},getBbox:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){return!0},n=new vp.Box3(new vp.Vector3(0,0,0),new vp.Vector3(0,0,0)),i=t.objects.filter(e);return i.length?(i.forEach((function(t){return n.expandByObject(t)})),Object.assign.apply(Object,fp(["x","y","z"].map((function(t){return dp({},t,[n.min[t],n.max[t]])}))))):null},getScreenCoords:function(t,e,n,i){var r=new vp.Vector3(e,n,i);return r.project(this.camera()),{x:(r.x+1)*t.width/2,y:-(r.y-1)*t.height/2}},getSceneCoords:function(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,r=new vp.Vector2(e/t.width*2-1,-n/t.height*2+1),o=new vp.Raycaster;return o.setFromCamera(r,t.camera),Object.assign({},o.ray.at(i,new vp.Vector3))},intersectingObjects:function(t,e,n){var i=new vp.Vector2(e/t.width*2-1,-n/t.height*2+1),r=new vp.Raycaster;return r.params.Line.threshold=t.lineHoverPrecision,r.setFromCamera(i,t.camera),r.intersectObjects(t.objects,!0)},renderer:function(t){return t.renderer},scene:function(t){return t.scene},camera:function(t){return t.camera},postProcessingComposer:function(t){return t.postProcessingComposer},controls:function(t){return t.controls},tbControls:function(t){return t.controls}},stateInit:function(){return{scene:new vp.Scene,camera:new vp.OrthographicCamera,clock:new vp.Clock}},init:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=n.controlType,r=void 0===i?"trackball":i,o=n.rendererConfig,a=void 0===o?{}:o,s=n.extraRenderers,c=void 0===s?[]:s,l=n.waitForLoadComplete,h=void 0===l||l;t.innerHTML="",t.appendChild(e.container=document.createElement("div")),e.container.className="scene-container",e.container.style.position="relative",e.container.appendChild(e.navInfo=document.createElement("div")),e.navInfo.className="scene-nav-info",e.navInfo.textContent={orbit:"Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan",trackball:"Left-click: rotate, Mouse-wheel/middle-click: zoom, Right-click: pan",fly:"WASD: move, R|F: up | down, Q|E: roll, up|down: pitch, left|right: yaw"}[r]||"",e.navInfo.style.display=e.showNavInfo?null:"none",e.toolTipElem=document.createElement("div"),e.toolTipElem.classList.add("scene-tooltip"),e.container.appendChild(e.toolTipElem),e.pointerPos=new vp.Vector2,e.pointerPos.x=-2,e.pointerPos.y=-2,["pointermove","pointerdown"].forEach((function(t){return e.container.addEventListener(t,(function(n){if("pointerdown"===t&&(e.isPointerPressed=!0),!e.isPointerDragging&&"pointermove"===n.type&&(n.pressure>0||e.isPointerPressed)&&("touch"!==n.pointerType||void 0===n.movementX||[n.movementX,n.movementY].some((function(t){return Math.abs(t)>1})))&&(e.isPointerDragging=!0),e.enablePointerInteraction){var i=(r=e.container,o=r.getBoundingClientRect(),a=window.pageXOffset||document.documentElement.scrollLeft,s=window.pageYOffset||document.documentElement.scrollTop,{top:o.top+s,left:o.left+a});e.pointerPos.x=n.pageX-i.left,e.pointerPos.y=n.pageY-i.top,e.toolTipElem.style.top="".concat(e.pointerPos.y,"px"),e.toolTipElem.style.left="".concat(e.pointerPos.x,"px"),e.toolTipElem.style.transform="translate(-".concat(e.pointerPos.x/e.width*100,"%, 21px)")}var r,o,a,s}),{passive:!0})})),e.container.addEventListener("pointerup",(function(t){e.isPointerPressed=!1,e.isPointerDragging&&(e.isPointerDragging=!1,!e.clickAfterDrag)||requestAnimationFrame((function(){0===t.button&&e.onClick(e.hoverObj||null,t,e.intersectionPoint),2===t.button&&e.onRightClick&&e.onRightClick(e.hoverObj||null,t,e.intersectionPoint)}))}),{passive:!0,capture:!0}),e.container.addEventListener("contextmenu",(function(t){e.onRightClick&&t.preventDefault()})),e.renderer=new vp.WebGLRenderer(Object.assign({antialias:!0,alpha:!0},a)),e.renderer.setPixelRatio(Math.min(2,window.devicePixelRatio)),e.container.appendChild(e.renderer.domElement),e.extraRenderers=c,e.extraRenderers.forEach((function(t){t.domElement.style.position="absolute",t.domElement.style.top="0px",t.domElement.style.pointerEvents="none",e.container.appendChild(t.domElement)})),e.postProcessingComposer=new yd(e.renderer),e.postProcessingComposer.addPass(new xd(e.scene,e.camera)),e.controls=new{trackball:ad,orbit:sd,fly:ld}[r](e.camera,e.renderer.domElement),"fly"===r&&(e.controls.movementSpeed=300,e.controls.rollSpeed=Math.PI/6,e.controls.dragToLook=!0),"trackball"!==r&&"orbit"!==r||(e.controls.minDistance=.1,e.controls.maxDistance=e.skyRadius,e.controls.addEventListener("start",(function(){e.controlsEngaged=!0})),e.controls.addEventListener("change",(function(){e.controlsEngaged&&(e.controlsDragging=!0)})),e.controls.addEventListener("end",(function(){e.controlsEngaged=!1,e.controlsDragging=!1}))),[e.renderer,e.postProcessingComposer].concat(fp(e.extraRenderers)).forEach((function(t){return t.setSize(e.width,e.height)})),e.renderer.setSize(e.width,e.height),e.postProcessingComposer.setSize(e.width,e.height),e.scene.add(e.skysphere=new vp.Mesh),e.skysphere.visible=!1,e.loadComplete=e.scene.visible=!h,window.scene=e.scene},update:function(t,e){if(t.width&&t.height&&(e.hasOwnProperty("width")||e.hasOwnProperty("height"))&&(t.container.style.width=t.width,t.container.style.height=t.height,[t.renderer,t.postProcessingComposer].concat(fp(t.extraRenderers)).forEach((function(e){return e.setSize(t.width,t.height)})),t.camera.aspect=t.width/t.height,t.camera.updateProjectionMatrix()),e.hasOwnProperty("skyRadius")&&t.skyRadius&&(t.controls.hasOwnProperty("maxDistance")&&e.skyRadius&&(t.controls.maxDistance=t.skyRadius),t.camera.far=2.5*t.skyRadius,t.camera.updateProjectionMatrix(),t.skysphere.geometry=new vp.SphereGeometry(t.skyRadius)),e.hasOwnProperty("backgroundColor")){var n=Gd(t.backgroundColor).alpha;void 0===n&&(n=1),t.renderer.setClearColor(new vp.Color(Jd(1,t.backgroundColor)),n)}function i(){t.loadComplete=t.scene.visible=!0}e.hasOwnProperty("backgroundImageUrl")&&(t.backgroundImageUrl?(new vp.TextureLoader).load(t.backgroundImageUrl,(function(e){t.skysphere.material=new vp.MeshBasicMaterial({map:e,side:vp.BackSide}),t.skysphere.visible=!0,t.onBackgroundImageLoaded&&setTimeout(t.onBackgroundImageLoaded),!t.loadComplete&&i()})):(t.skysphere.visible=!1,t.skysphere.material.map=null,!t.loadComplete&&i())),e.hasOwnProperty("showNavInfo")&&(t.navInfo.style.display=t.showNavInfo?null:"none"),e.hasOwnProperty("objects")&&((e.objects||[]).forEach((function(e){return t.scene.remove(e)})),t.objects.forEach((function(e){return t.scene.add(e)})))}});function bp(t,e){var n=new e;return{linkProp:function(e){return{default:n[e](),onChange:function(n,i){i[t][e](n)},triggerUpdate:!1}},linkMethod:function(e){return function(n){for(var i=n[t],r=arguments.length,o=new Array(r>1?r-1:0),a=1;a3?r-3:0),a=3;a arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - - return arr2; -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -function linkKapsule (kapsulePropName, kapsuleType) { - var dummyK = new kapsuleType(); // To extract defaults - - return { - linkProp: function linkProp(prop) { - // link property config - return { - "default": dummyK[prop](), - onChange: function onChange(v, state) { - state[kapsulePropName][prop](v); - }, - triggerUpdate: false - }; - }, - linkMethod: function linkMethod(method) { - // link method pass-through - return function (state) { - var kapsuleInstance = state[kapsulePropName]; - - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - var returnVal = kapsuleInstance[method].apply(kapsuleInstance, args); - return returnVal === kapsuleInstance ? this // chain based on the parent object, not the inner kapsule - : returnVal; - }; - } - }; -} - -var three = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists -: { - AmbientLight: AmbientLight, - DirectionalLight: DirectionalLight, - Vector3: Vector3 -}; - -var CAMERA_DISTANCE2NODES_FACTOR = 170; // -// Expose config from forceGraph - -var bindFG = linkKapsule('forceGraph', ThreeForceGraph); -var linkedFGProps = Object.assign.apply(Object, _toConsumableArray(['jsonUrl', 'graphData', 'numDimensions', 'dagMode', 'dagLevelDistance', 'dagNodeFilter', 'onDagError', 'nodeRelSize', 'nodeId', 'nodeVal', 'nodeResolution', 'nodeColor', 'nodeAutoColorBy', 'nodeOpacity', 'nodeVisibility', 'nodeThreeObject', 'nodeThreeObjectExtend', 'linkSource', 'linkTarget', 'linkVisibility', 'linkColor', 'linkAutoColorBy', 'linkOpacity', 'linkWidth', 'linkResolution', 'linkCurvature', 'linkCurveRotation', 'linkMaterial', 'linkThreeObject', 'linkThreeObjectExtend', 'linkPositionUpdate', 'linkDirectionalArrowLength', 'linkDirectionalArrowColor', 'linkDirectionalArrowRelPos', 'linkDirectionalArrowResolution', 'linkDirectionalParticles', 'linkDirectionalParticleSpeed', 'linkDirectionalParticleWidth', 'linkDirectionalParticleColor', 'linkDirectionalParticleResolution', 'forceEngine', 'd3AlphaDecay', 'd3VelocityDecay', 'd3AlphaMin', 'ngraphPhysics', 'warmupTicks', 'cooldownTicks', 'cooldownTime', 'onEngineTick', 'onEngineStop'].map(function (p) { - return _defineProperty({}, p, bindFG.linkProp(p)); -}))); -var linkedFGMethods = Object.assign.apply(Object, _toConsumableArray(['refresh', 'getGraphBbox', 'd3Force', 'd3ReheatSimulation', 'emitParticle'].map(function (p) { - return _defineProperty({}, p, bindFG.linkMethod(p)); -}))); // Expose config from renderObjs - -var bindRenderObjs = linkKapsule('renderObjs', ThreeRenderObjects); -var linkedRenderObjsProps = Object.assign.apply(Object, _toConsumableArray(['width', 'height', 'backgroundColor', 'showNavInfo', 'enablePointerInteraction'].map(function (p) { - return _defineProperty({}, p, bindRenderObjs.linkProp(p)); -}))); -var linkedRenderObjsMethods = Object.assign.apply(Object, _toConsumableArray(['cameraPosition', 'postProcessingComposer'].map(function (p) { - return _defineProperty({}, p, bindRenderObjs.linkMethod(p)); -})).concat([{ - graph2ScreenCoords: bindRenderObjs.linkMethod('getScreenCoords'), - screen2GraphCoords: bindRenderObjs.linkMethod('getSceneCoords') -}])); // - -var _3dForceGraph = Kapsule({ - props: _objectSpread2(_objectSpread2({ - nodeLabel: { - "default": 'name', - triggerUpdate: false - }, - linkLabel: { - "default": 'name', - triggerUpdate: false - }, - linkHoverPrecision: { - "default": 1, - onChange: function onChange(p, state) { - return state.renderObjs.lineHoverPrecision(p); - }, - triggerUpdate: false - }, - enableNavigationControls: { - "default": true, - onChange: function onChange(enable, state) { - var controls = state.renderObjs.controls(); - - if (controls) { - controls.enabled = enable; - } - }, - triggerUpdate: false - }, - enableNodeDrag: { - "default": true, - triggerUpdate: false - }, - onNodeDrag: { - "default": function _default() {}, - triggerUpdate: false - }, - onNodeDragEnd: { - "default": function _default() {}, - triggerUpdate: false - }, - onNodeClick: { - triggerUpdate: false - }, - onNodeRightClick: { - triggerUpdate: false - }, - onNodeHover: { - triggerUpdate: false - }, - onLinkClick: { - triggerUpdate: false - }, - onLinkRightClick: { - triggerUpdate: false - }, - onLinkHover: { - triggerUpdate: false - }, - onBackgroundClick: { - triggerUpdate: false - }, - onBackgroundRightClick: { - triggerUpdate: false - } - }, linkedFGProps), linkedRenderObjsProps), - methods: _objectSpread2(_objectSpread2({ - zoomToFit: function zoomToFit(state, transitionDuration, padding) { - var _state$forceGraph; - - for (var _len = arguments.length, bboxArgs = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { - bboxArgs[_key - 3] = arguments[_key]; - } - - state.renderObjs.fitToBbox((_state$forceGraph = state.forceGraph).getGraphBbox.apply(_state$forceGraph, bboxArgs), transitionDuration, padding); - return this; - }, - pauseAnimation: function pauseAnimation(state) { - if (state.animationFrameRequestId !== null) { - cancelAnimationFrame(state.animationFrameRequestId); - state.animationFrameRequestId = null; - } - - return this; - }, - resumeAnimation: function resumeAnimation(state) { - if (state.animationFrameRequestId === null) { - this._animationCycle(); - } - - return this; - }, - _animationCycle: function _animationCycle(state) { - if (state.enablePointerInteraction) { - // reset canvas cursor (override dragControls cursor) - this.renderer().domElement.style.cursor = null; - } // Frame cycle - - - state.forceGraph.tickFrame(); - state.renderObjs.tick(); - state.animationFrameRequestId = requestAnimationFrame(this._animationCycle); - }, - scene: function scene(state) { - return state.renderObjs.scene(); - }, - // Expose scene - camera: function camera(state) { - return state.renderObjs.camera(); - }, - // Expose camera - renderer: function renderer(state) { - return state.renderObjs.renderer(); - }, - // Expose renderer - controls: function controls(state) { - return state.renderObjs.controls(); - }, - // Expose controls - tbControls: function tbControls(state) { - return state.renderObjs.tbControls(); - }, - // To be deprecated - _destructor: function _destructor() { - this.pauseAnimation(); - this.graphData({ - nodes: [], - links: [] - }); - } - }, linkedFGMethods), linkedRenderObjsMethods), - stateInit: function stateInit(_ref5) { - var controlType = _ref5.controlType, - rendererConfig = _ref5.rendererConfig, - extraRenderers = _ref5.extraRenderers; - return { - forceGraph: new ThreeForceGraph(), - renderObjs: ThreeRenderObjects({ - controlType: controlType, - rendererConfig: rendererConfig, - extraRenderers: extraRenderers - }) - }; - }, - init: function init(domNode, state) { - // Wipe DOM - domNode.innerHTML = ''; // Add relative container - - domNode.appendChild(state.container = document.createElement('div')); - state.container.style.position = 'relative'; // Add renderObjs - - var roDomNode = document.createElement('div'); - state.container.appendChild(roDomNode); - state.renderObjs(roDomNode); - var camera = state.renderObjs.camera(); - var renderer = state.renderObjs.renderer(); - var controls = state.renderObjs.controls(); - controls.enabled = !!state.enableNavigationControls; - state.lastSetCameraZ = camera.position.z; // Add info space - - var infoElem; - state.container.appendChild(infoElem = document.createElement('div')); - infoElem.className = 'graph-info-msg'; - infoElem.textContent = ''; // config forcegraph - - state.forceGraph.onLoading(function () { - infoElem.textContent = 'Loading...'; - }).onFinishLoading(function () { - infoElem.textContent = ''; - }).onUpdate(function () { - // sync graph data structures - state.graphData = state.forceGraph.graphData(); // re-aim camera, if still in default position (not user modified) - - if (camera.position.x === 0 && camera.position.y === 0 && camera.position.z === state.lastSetCameraZ && state.graphData.nodes.length) { - camera.lookAt(state.forceGraph.position); - state.lastSetCameraZ = camera.position.z = Math.cbrt(state.graphData.nodes.length) * CAMERA_DISTANCE2NODES_FACTOR; - } - }).onFinishUpdate(function () { - // Setup node drag interaction - if (state._dragControls) { - var curNodeDrag = state.graphData.nodes.find(function (node) { - return node.__initialFixedPos && !node.__disposeControlsAfterDrag; - }); // detect if there's a node being dragged using the existing drag controls - - if (curNodeDrag) { - curNodeDrag.__disposeControlsAfterDrag = true; // postpone previous controls disposal until drag ends - } else { - state._dragControls.dispose(); // cancel previous drag controls - - } - - state._dragControls = undefined; - } - - if (state.enableNodeDrag && state.enablePointerInteraction && state.forceEngine === 'd3') { - // Can't access node positions programatically in ngraph - var dragControls = state._dragControls = new DragControls(state.graphData.nodes.map(function (node) { - return node.__threeObj; - }).filter(function (obj) { - return obj; - }), camera, renderer.domElement); - dragControls.addEventListener('dragstart', function (event) { - controls.enabled = false; // Disable controls while dragging - // track drag object movement - - event.object.__initialPos = event.object.position.clone(); - event.object.__prevPos = event.object.position.clone(); - - var node = getGraphObj(event.object).__data; - - !node.__initialFixedPos && (node.__initialFixedPos = { - fx: node.fx, - fy: node.fy, - fz: node.fz - }); - !node.__initialPos && (node.__initialPos = { - x: node.x, - y: node.y, - z: node.z - }); // lock node - - ['x', 'y', 'z'].forEach(function (c) { - return node["f".concat(c)] = node[c]; - }); // drag cursor - - renderer.domElement.classList.add('grabbable'); - }); - dragControls.addEventListener('drag', function (event) { - var nodeObj = getGraphObj(event.object); - - if (!event.object.hasOwnProperty('__graphObjType')) { - // If dragging a child of the node, update the node object instead - var initPos = event.object.__initialPos; - var prevPos = event.object.__prevPos; - var _newPos = event.object.position; - nodeObj.position.add(_newPos.clone().sub(prevPos)); // translate node object by the motion delta - - prevPos.copy(_newPos); - - _newPos.copy(initPos); // reset child back to its initial position - - } - - var node = nodeObj.__data; - var newPos = nodeObj.position; - var translate = { - x: newPos.x - node.x, - y: newPos.y - node.y, - z: newPos.z - node.z - }; // Move fx/fy/fz (and x/y/z) of nodes based on object new position - - ['x', 'y', 'z'].forEach(function (c) { - return node["f".concat(c)] = node[c] = newPos[c]; - }); - state.forceGraph.d3AlphaTarget(0.3) // keep engine running at low intensity throughout drag - .resetCountdown(); // prevent freeze while dragging - - node.__dragged = true; - state.onNodeDrag(node, translate); - }); - dragControls.addEventListener('dragend', function (event) { - delete event.object.__initialPos; // remove tracking attributes - - delete event.object.__prevPos; - - var node = getGraphObj(event.object).__data; // dispose previous controls if needed - - - if (node.__disposeControlsAfterDrag) { - dragControls.dispose(); - delete node.__disposeControlsAfterDrag; - } - - var initFixedPos = node.__initialFixedPos; - var initPos = node.__initialPos; - var translate = { - x: initPos.x - node.x, - y: initPos.y - node.y, - z: initPos.z - node.z - }; - - if (initFixedPos) { - ['x', 'y', 'z'].forEach(function (c) { - var fc = "f".concat(c); - - if (initFixedPos[fc] === undefined) { - delete node[fc]; - } - }); - delete node.__initialFixedPos; - delete node.__initialPos; - - if (node.__dragged) { - delete node.__dragged; - state.onNodeDragEnd(node, translate); - } - } - - state.forceGraph.d3AlphaTarget(0) // release engine low intensity - .resetCountdown(); // let the engine readjust after releasing fixed nodes - - if (state.enableNavigationControls) { - controls.enabled = true; // Re-enable controls - - controls.domElement && controls.domElement.ownerDocument && controls.domElement.ownerDocument.dispatchEvent( // simulate mouseup to ensure the controls don't take over after dragend - new PointerEvent('pointerup', { - pointerType: 'mouse' - })); - } // clear cursor - - - renderer.domElement.classList.remove('grabbable'); - }); - } - }); // config renderObjs - - state.renderObjs.objects([// Populate scene - new three.AmbientLight(0xbbbbbb), new three.DirectionalLight(0xffffff, 0.6), state.forceGraph]).hoverOrderComparator(function (a, b) { - // Prioritize graph objects - var aObj = getGraphObj(a); - if (!aObj) return 1; - var bObj = getGraphObj(b); - if (!bObj) return -1; // Prioritize nodes over links - - var isNode = function isNode(o) { - return o.__graphObjType === 'node'; - }; - - return isNode(bObj) - isNode(aObj); - }).tooltipContent(function (obj) { - var graphObj = getGraphObj(obj); - return graphObj ? accessorFn(state["".concat(graphObj.__graphObjType, "Label")])(graphObj.__data) || '' : ''; - }).hoverDuringDrag(false).onHover(function (obj) { - // Update tooltip and trigger onHover events - var hoverObj = getGraphObj(obj); - - if (hoverObj !== state.hoverObj) { - var prevObjType = state.hoverObj ? state.hoverObj.__graphObjType : null; - var prevObjData = state.hoverObj ? state.hoverObj.__data : null; - var objType = hoverObj ? hoverObj.__graphObjType : null; - var objData = hoverObj ? hoverObj.__data : null; - - if (prevObjType && prevObjType !== objType) { - // Hover out - var fn = state["on".concat(prevObjType === 'node' ? 'Node' : 'Link', "Hover")]; - fn && fn(null, prevObjData); - } - - if (objType) { - // Hover in - var _fn = state["on".concat(objType === 'node' ? 'Node' : 'Link', "Hover")]; - _fn && _fn(objData, prevObjType === objType ? prevObjData : null); - } // set pointer if hovered object is clickable - - - renderer.domElement.classList[hoverObj && state["on".concat(objType === 'node' ? 'Node' : 'Link', "Click")] || !hoverObj && state.onBackgroundClick ? 'add' : 'remove']('clickable'); - state.hoverObj = hoverObj; - } - }).clickAfterDrag(false).onClick(function (obj, ev) { - var graphObj = getGraphObj(obj); - - if (graphObj) { - var fn = state["on".concat(graphObj.__graphObjType === 'node' ? 'Node' : 'Link', "Click")]; - fn && fn(graphObj.__data, ev); - } else { - state.onBackgroundClick && state.onBackgroundClick(ev); - } - }).onRightClick(function (obj, ev) { - // Handle right-click events - var graphObj = getGraphObj(obj); - - if (graphObj) { - var fn = state["on".concat(graphObj.__graphObjType === 'node' ? 'Node' : 'Link', "RightClick")]; - fn && fn(graphObj.__data, ev); - } else { - state.onBackgroundRightClick && state.onBackgroundRightClick(ev); - } - }); // - // Kick-off renderer - - this._animationCycle(); - } -}); // - -function getGraphObj(object) { - var obj = object; // recurse up object chain until finding the graph object - - while (obj && !obj.hasOwnProperty('__graphObjType')) { - obj = obj.parent; - } - - return obj; -} - -export default _3dForceGraph; diff --git a/src/citationnet/static/lib/select2-bootstrap4.min.css b/src/citationnet/static/lib/select2-bootstrap4.min.css deleted file mode 100644 index 73cb4d4..0000000 --- a/src/citationnet/static/lib/select2-bootstrap4.min.css +++ /dev/null @@ -1 +0,0 @@ -.select2-container--bootstrap4 .select2-selection--single{height:calc(1.5em + .75rem + 2px)!important}.select2-container--bootstrap4 .select2-selection--single .select2-selection__placeholder{color:#757575;line-height:calc(1.5em + .75rem)}.select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow{position:absolute;top:50%;right:3px;width:20px}.select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b{top:60%;border-color:#343a40 transparent transparent;border-style:solid;border-width:5px 4px 0;width:0;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute}.select2-container--bootstrap4 .select2-selection--single .select2-selection__rendered{line-height:calc(1.5em + .75rem)}.select2-search--dropdown .select2-search__field{border:1px solid #ced4da;border-radius:.25rem}.select2-results__message{color:#6c757d}.select2-container--bootstrap4 .select2-selection--multiple{min-height:calc(1.5em + .75rem + 2px)!important}.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__rendered{-webkit-box-sizing:border-box;box-sizing:border-box;list-style:none;margin:0;padding:0 8px;width:100%}.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice{color:#343a40;border:1px solid #bdc6d0;border-radius:.2rem;padding:0 5px 0 0;cursor:pointer;float:left;margin-top:.3em;margin-right:5px}.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice__remove{color:#bdc6d0;font-weight:700;margin-left:3px;margin-right:1px;padding-right:3px;padding-left:3px;float:left}.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice__remove:hover{color:#343a40}.select2-container--bootstrap4 .select2-selection--multiple .select2-selection__clear{float:none;margin-right:0;position:absolute!important;top:0;right:.7em}.select2-container{display:block}.select2-container :focus{outline:0}.input-group .select2-container--bootstrap4{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.input-group-prepend~.select2-container--bootstrap4 .select2-selection{border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.select2-container--bootstrap4:not(:last-child) .select2-selection{border-top-right-radius:0;border-bottom-right-radius:0}.select2-container--bootstrap4 .select2-selection{background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.select2-container--bootstrap4 .select2-selection{-webkit-transition:none;transition:none}}.select2-container--bootstrap4.select2-container--focus .select2-selection{border-color:#80bdff;-webkit-box-shadow:0 0 0 .2rem rgba(0,123,255,.25);box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.select2-container--bootstrap4.select2-container--focus.select2-container--open .select2-selection{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--bootstrap4.select2-container--disabled.select2-container--focus .select2-selection,.select2-container--bootstrap4.select2-container--disabled .select2-selection{background-color:#e9ecef;cursor:not-allowed;border-color:#ced4da;-webkit-box-shadow:none;box-shadow:none}.select2-container--bootstrap4.select2-container--disabled.select2-container--focus .select2-search__field,.select2-container--bootstrap4.select2-container--disabled .select2-search__field{background-color:transparent}form.was-validated select:invalid~.select2-container--bootstrap4 .select2-selection,select.is-invalid~.select2-container--bootstrap4 .select2-selection{border-color:#dc3545}form.was-validated select:valid~.select2-container--bootstrap4 .select2-selection,select.is-valid~.select2-container--bootstrap4 .select2-selection{border-color:#28a745}.select2-container--bootstrap4 .select2-dropdown{border-color:#ced4da;border-radius:0}.select2-container--bootstrap4 .select2-dropdown.select2-dropdown--below{border-top:none;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.select2-container--bootstrap4 .select2-dropdown.select2-dropdown--above{border-top:1px solid #ced4da;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.select2-container--bootstrap4 .select2-dropdown .select2-results__option[aria-selected=true]{background-color:#e9ecef}.select2-container--bootstrap4 .select2-results__option--highlighted,.select2-container--bootstrap4 .select2-results__option--highlighted.select2-results__option[aria-selected=true]{background-color:#007bff;color:#f8f9fa}.select2-container--bootstrap4 .select2-results__option[role=group]{padding:0}.select2-container--bootstrap4 .select2-results__option[role=group] .select2-results__options--nested .select2-results__option{padding-left:1em}.select2-container--bootstrap4 .select2-results>.select2-results__options{max-height:15em;overflow-y:auto}.select2-container--bootstrap4 .select2-results__group{padding:6px;display:list-item;color:#6c757d}.select2-container--bootstrap4 .select2-selection__clear{width:.9em;height:.9em;line-height:.75em;padding-left:.15em;margin-top:.7em;border-radius:100%;background-color:#c8c8c8;color:#f8f9fa;float:right;margin-right:.3em}.select2-container--bootstrap4 .select2-selection__clear:hover{background-color:#afafaf} \ No newline at end of file diff --git a/src/citationnet/static/lut.js b/src/citationnet/static/lut.js new file mode 100644 index 0000000..8746160 --- /dev/null +++ b/src/citationnet/static/lut.js @@ -0,0 +1,194 @@ + +import { + Color +} from './three.module.js'; + +class Lut { + + constructor( colormap, count = 32 ) { + + this.lut = []; + this.map = []; + this.n = 0; + this.minV = 0; + this.maxV = 1; + + this.setColorMap( colormap, count ); + + } + + set( value ) { + + if ( value.isLut === true ) { + + this.copy( value ); + + } + + return this; + + } + + setMin( min ) { + + this.minV = min; + + return this; + + } + + setMax( max ) { + + this.maxV = max; + + return this; + + } + + setColorMap( colormap, count = 32 ) { + + this.map = ColorMapKeywords[ colormap ] || ColorMapKeywords.rainbow; + this.n = count; + + const step = 1.0 / this.n; + + this.lut.length = 0; + + for ( let i = 0; i <= 1; i += step ) { + + for ( let j = 0; j < this.map.length - 1; j ++ ) { + + if ( i >= this.map[ j ][ 0 ] && i < this.map[ j + 1 ][ 0 ] ) { + + const min = this.map[ j ][ 0 ]; + const max = this.map[ j + 1 ][ 0 ]; + + const minColor = new Color( this.map[ j ][ 1 ] ); + const maxColor = new Color( this.map[ j + 1 ][ 1 ] ); + + const color = minColor.lerp( maxColor, ( i - min ) / ( max - min ) ); + + this.lut.push( color ); + + } + + } + + } + + return this; + + } + + copy( lut ) { + + this.lut = lut.lut; + this.map = lut.map; + this.n = lut.n; + this.minV = lut.minV; + this.maxV = lut.maxV; + + return this; + + } + + getColor( alpha ) { + + if ( alpha <= this.minV ) { + + alpha = this.minV; + + } else if ( alpha >= this.maxV ) { + + alpha = this.maxV; + + } + + alpha = ( alpha - this.minV ) / ( this.maxV - this.minV ); + + let colorPosition = Math.round( alpha * this.n ); + colorPosition == this.n ? colorPosition -= 1 : colorPosition; + + return this.lut[ colorPosition ]; + + } + + addColorMap( name, arrayOfColors ) { + + ColorMapKeywords[ name ] = arrayOfColors; + + return this; + + } + + createCanvas() { + + const canvas = document.createElement( 'canvas' ); + canvas.width = 1; + canvas.height = this.n; + + this.updateCanvas( canvas ); + + return canvas; + + } + + updateCanvas( canvas ) { + + const ctx = canvas.getContext( '2d', { alpha: false } ); + + const imageData = ctx.getImageData( 0, 0, 1, this.n ); + + const data = imageData.data; + + let k = 0; + + const step = 1.0 / this.n; + + for ( let i = 1; i >= 0; i -= step ) { + + for ( let j = this.map.length - 1; j >= 0; j -- ) { + + if ( i < this.map[ j ][ 0 ] && i >= this.map[ j - 1 ][ 0 ] ) { + + const min = this.map[ j - 1 ][ 0 ]; + const max = this.map[ j ][ 0 ]; + + const minColor = new Color( this.map[ j - 1 ][ 1 ] ); + const maxColor = new Color( this.map[ j ][ 1 ] ); + + const color = minColor.lerp( maxColor, ( i - min ) / ( max - min ) ); + + data[ k * 4 ] = Math.round( color.r * 255 ); + data[ k * 4 + 1 ] = Math.round( color.g * 255 ); + data[ k * 4 + 2 ] = Math.round( color.b * 255 ); + data[ k * 4 + 3 ] = 255; + + k += 1; + + } + + } + + } + + ctx.putImageData( imageData, 0, 0 ); + + return canvas; + + } + +} + +Lut.prototype.isLut = true; + +const ColorMapKeywords = { + + 'rainbow': [[ 0.0, 0x0000FF ], [ 0.2, 0x00FFFF ], [ 0.5, 0x00FF00 ], [ 0.8, 0xFFFF00 ], [ 1.0, 0xFF0000 ]], + 'cooltowarm': [[ 0.0, 0x3C4EC2 ], [ 0.2, 0x9BBCFF ], [ 0.5, 0xDCDCDC ], [ 0.8, 0xF6A385 ], [ 1.0, 0xB40426 ]], + 'blackbody': [[ 0.0, 0x000000 ], [ 0.2, 0x780000 ], [ 0.5, 0xE63200 ], [ 0.8, 0xFFFF00 ], [ 1.0, 0xFFFFFF ]], + 'grayscale': [[ 0.0, 0x000000 ], [ 0.2, 0x404040 ], [ 0.5, 0x7F7F80 ], [ 0.8, 0xBFBFBF ], [ 1.0, 0xFFFFFF ]] + +}; + +export { Lut, ColorMapKeywords }; \ No newline at end of file diff --git a/src/citationnet/static/pieChart_vega-lite.js b/src/citationnet/static/pieChart_vega-lite.js new file mode 100644 index 0000000..3c9ca1c --- /dev/null +++ b/src/citationnet/static/pieChart_vega-lite.js @@ -0,0 +1,82 @@ +const forChartDiv = document.getElementById("forChartDiv"); +const forChartDivvis = document.getElementById("forChartDivvis"); +const forChartDivloader = document.getElementById("forChartDivloader"); + +dragElement(forChartDiv); + +function toggleFORChart() { + if (forChartDiv.hidden) { + showFOR(); + } else { + hideFOR(); + } +} + +async function showFOR() { + document.getElementById("btnFORChart").style.fontWeight = "bolder"; + forChartDivvis.hidden = true + forChartDivloader.hidden = false + forChartDiv.hidden = false + + await loadFOR(); + + forChartDivvis.hidden = false + forChartDivloader.hidden = true +} + +function hideFOR() { + document.getElementById("btnFORChart").style.fontWeight = "normal"; + forChartDiv.hidden = true +} + +async function loadFOR() { + const stats = await window.net.getStats(); + const resp = await fetch("/static/lib/vegaLiteSpec.json"); + const vegaLiteSpec = await resp.json(); + + vegaLiteSpec.data.values = stats; + + vegaEmbed('#forChartDivvis', vegaLiteSpec); +} + +function dragElement(elmnt) { + var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; + if (document.getElementById(elmnt.id + "header")) { + /* if present, the header is where you move the DIV from:*/ + document.getElementById(elmnt.id + "header").onmousedown = dragMouseDown; + } else { + /* otherwise, move the DIV from anywhere inside the DIV:*/ + elmnt.onmousedown = dragMouseDown; + } + + function dragMouseDown(e) { + e = e || window.event; + e.preventDefault(); + // get the mouse cursor position at startup: + pos3 = e.clientX; + pos4 = e.clientY; + document.onmouseup = closeDragElement; + // call a function whenever the cursor moves: + document.onmousemove = elementDrag; + } + + function elementDrag(e) { + e = e || window.event; + e.preventDefault(); + // calculate the new cursor position: + pos1 = pos3 - e.clientX; + pos2 = pos4 - e.clientY; + pos3 = e.clientX; + pos4 = e.clientY; + // set the element's new position: + // elmnt.style.right = ""; + elmnt.style.top = (elmnt.offsetTop - pos2) + "px"; + elmnt.style.left = (elmnt.offsetLeft - pos1) + "px"; + } + + function closeDragElement() { + /* stop moving when mouse button is released:*/ + document.onmouseup = null; + document.onmousemove = null; + } +} \ No newline at end of file diff --git a/src/citationnet/static/lib/sidebar.css b/src/citationnet/static/sidebar.css similarity index 72% rename from src/citationnet/static/lib/sidebar.css rename to src/citationnet/static/sidebar.css index 255204b..a006440 100644 --- a/src/citationnet/static/lib/sidebar.css +++ b/src/citationnet/static/sidebar.css @@ -1,7 +1,7 @@ body { font-family: "Lato", sans-serif; } - + .sidebar { height: 100%; width: 300px; @@ -38,6 +38,11 @@ body { transition: 0.0s; } + #sidebar p a { + padding: 0px 0px 0px 0px; + font-size: 25px; + } + .sidebar button { text-decoration: none; font-size: 20px; @@ -113,4 +118,48 @@ body { @media screen and (max-height: 450px) { .sidebar {padding-top: 15px;} .sidebar a {font-size: 18px;} - } \ No newline at end of file + } + + + + #forChartDiv { + position: absolute; + z-index: 9; + /* background-color: #f1f1f1; */ + text-align: center; + top: 80px; + right: 5px; + width: 500px; + } + + #forChartDivheader { + padding: 5px; + cursor: move; + z-index: 10; + background-color: #111; + color: #fff; + } + + #forChartDivheader:hover { + background-color: #444; + } + + .loader { + border: 4px solid #f3f3f3; + border-top: 4px solid #444; + border-radius: 50%; + width: 50px; + height: 50px; + animation: spin 2s linear infinite; + margin: 0 auto; + margin-top: 10px; + } + + @keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } + } diff --git a/src/citationnet/static/lib/sidebar.js b/src/citationnet/static/sidebar.js similarity index 92% rename from src/citationnet/static/lib/sidebar.js rename to src/citationnet/static/sidebar.js index 69a0528..aa62a17 100644 --- a/src/citationnet/static/lib/sidebar.js +++ b/src/citationnet/static/sidebar.js @@ -3,7 +3,7 @@ function openNav() { document.getElementById("sidebar").style.width = "300px"; document.getElementById("main").style.marginLeft = "300px"; // document.getElementById("3d-graph").style.marginLeft = "250px"; - adaptWindowSize(); + window.adaptWindowSize(); } /* Set the width of the sidebar to 0 and the left margin of the page content to 0 */ @@ -11,7 +11,7 @@ function closeNav() { document.getElementById("sidebar").style.width = "0"; document.getElementById("main").style.marginLeft = "0"; // document.getElementById("3d-graph").style.marginLeft = "0"; - adaptWindowSize(); + window.adaptWindowSize(); } function toggleNav() { diff --git a/src/citationnet/static/three.module.js b/src/citationnet/static/three.module.js new file mode 100644 index 0000000..760d175 --- /dev/null +++ b/src/citationnet/static/three.module.js @@ -0,0 +1,49611 @@ +/** + * @license + * Copyright 2010-2021 Three.js Authors + * SPDX-License-Identifier: MIT + */ +const REVISION = '131'; +const MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 }; +const TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 }; +const CullFaceNone = 0; +const CullFaceBack = 1; +const CullFaceFront = 2; +const CullFaceFrontBack = 3; +const BasicShadowMap = 0; +const PCFShadowMap = 1; +const PCFSoftShadowMap = 2; +const VSMShadowMap = 3; +const FrontSide = 0; +const BackSide = 1; +const DoubleSide = 2; +const FlatShading = 1; +const SmoothShading = 2; +const NoBlending = 0; +const NormalBlending = 1; +const AdditiveBlending = 2; +const SubtractiveBlending = 3; +const MultiplyBlending = 4; +const CustomBlending = 5; +const AddEquation = 100; +const SubtractEquation = 101; +const ReverseSubtractEquation = 102; +const MinEquation = 103; +const MaxEquation = 104; +const ZeroFactor = 200; +const OneFactor = 201; +const SrcColorFactor = 202; +const OneMinusSrcColorFactor = 203; +const SrcAlphaFactor = 204; +const OneMinusSrcAlphaFactor = 205; +const DstAlphaFactor = 206; +const OneMinusDstAlphaFactor = 207; +const DstColorFactor = 208; +const OneMinusDstColorFactor = 209; +const SrcAlphaSaturateFactor = 210; +const NeverDepth = 0; +const AlwaysDepth = 1; +const LessDepth = 2; +const LessEqualDepth = 3; +const EqualDepth = 4; +const GreaterEqualDepth = 5; +const GreaterDepth = 6; +const NotEqualDepth = 7; +const MultiplyOperation = 0; +const MixOperation = 1; +const AddOperation = 2; +const NoToneMapping = 0; +const LinearToneMapping = 1; +const ReinhardToneMapping = 2; +const CineonToneMapping = 3; +const ACESFilmicToneMapping = 4; +const CustomToneMapping = 5; + +const UVMapping = 300; +const CubeReflectionMapping = 301; +const CubeRefractionMapping = 302; +const EquirectangularReflectionMapping = 303; +const EquirectangularRefractionMapping = 304; +const CubeUVReflectionMapping = 306; +const CubeUVRefractionMapping = 307; +const RepeatWrapping = 1000; +const ClampToEdgeWrapping = 1001; +const MirroredRepeatWrapping = 1002; +const NearestFilter = 1003; +const NearestMipmapNearestFilter = 1004; +const NearestMipMapNearestFilter = 1004; +const NearestMipmapLinearFilter = 1005; +const NearestMipMapLinearFilter = 1005; +const LinearFilter = 1006; +const LinearMipmapNearestFilter = 1007; +const LinearMipMapNearestFilter = 1007; +const LinearMipmapLinearFilter = 1008; +const LinearMipMapLinearFilter = 1008; +const UnsignedByteType = 1009; +const ByteType = 1010; +const ShortType = 1011; +const UnsignedShortType = 1012; +const IntType = 1013; +const UnsignedIntType = 1014; +const FloatType = 1015; +const HalfFloatType = 1016; +const UnsignedShort4444Type = 1017; +const UnsignedShort5551Type = 1018; +const UnsignedShort565Type = 1019; +const UnsignedInt248Type = 1020; +const AlphaFormat = 1021; +const RGBFormat = 1022; +const RGBAFormat = 1023; +const LuminanceFormat = 1024; +const LuminanceAlphaFormat = 1025; +const RGBEFormat = RGBAFormat; +const DepthFormat = 1026; +const DepthStencilFormat = 1027; +const RedFormat = 1028; +const RedIntegerFormat = 1029; +const RGFormat = 1030; +const RGIntegerFormat = 1031; +const RGBIntegerFormat = 1032; +const RGBAIntegerFormat = 1033; + +const RGB_S3TC_DXT1_Format = 33776; +const RGBA_S3TC_DXT1_Format = 33777; +const RGBA_S3TC_DXT3_Format = 33778; +const RGBA_S3TC_DXT5_Format = 33779; +const RGB_PVRTC_4BPPV1_Format = 35840; +const RGB_PVRTC_2BPPV1_Format = 35841; +const RGBA_PVRTC_4BPPV1_Format = 35842; +const RGBA_PVRTC_2BPPV1_Format = 35843; +const RGB_ETC1_Format = 36196; +const RGB_ETC2_Format = 37492; +const RGBA_ETC2_EAC_Format = 37496; +const RGBA_ASTC_4x4_Format = 37808; +const RGBA_ASTC_5x4_Format = 37809; +const RGBA_ASTC_5x5_Format = 37810; +const RGBA_ASTC_6x5_Format = 37811; +const RGBA_ASTC_6x6_Format = 37812; +const RGBA_ASTC_8x5_Format = 37813; +const RGBA_ASTC_8x6_Format = 37814; +const RGBA_ASTC_8x8_Format = 37815; +const RGBA_ASTC_10x5_Format = 37816; +const RGBA_ASTC_10x6_Format = 37817; +const RGBA_ASTC_10x8_Format = 37818; +const RGBA_ASTC_10x10_Format = 37819; +const RGBA_ASTC_12x10_Format = 37820; +const RGBA_ASTC_12x12_Format = 37821; +const RGBA_BPTC_Format = 36492; +const SRGB8_ALPHA8_ASTC_4x4_Format = 37840; +const SRGB8_ALPHA8_ASTC_5x4_Format = 37841; +const SRGB8_ALPHA8_ASTC_5x5_Format = 37842; +const SRGB8_ALPHA8_ASTC_6x5_Format = 37843; +const SRGB8_ALPHA8_ASTC_6x6_Format = 37844; +const SRGB8_ALPHA8_ASTC_8x5_Format = 37845; +const SRGB8_ALPHA8_ASTC_8x6_Format = 37846; +const SRGB8_ALPHA8_ASTC_8x8_Format = 37847; +const SRGB8_ALPHA8_ASTC_10x5_Format = 37848; +const SRGB8_ALPHA8_ASTC_10x6_Format = 37849; +const SRGB8_ALPHA8_ASTC_10x8_Format = 37850; +const SRGB8_ALPHA8_ASTC_10x10_Format = 37851; +const SRGB8_ALPHA8_ASTC_12x10_Format = 37852; +const SRGB8_ALPHA8_ASTC_12x12_Format = 37853; +const LoopOnce = 2200; +const LoopRepeat = 2201; +const LoopPingPong = 2202; +const InterpolateDiscrete = 2300; +const InterpolateLinear = 2301; +const InterpolateSmooth = 2302; +const ZeroCurvatureEnding = 2400; +const ZeroSlopeEnding = 2401; +const WrapAroundEnding = 2402; +const NormalAnimationBlendMode = 2500; +const AdditiveAnimationBlendMode = 2501; +const TrianglesDrawMode = 0; +const TriangleStripDrawMode = 1; +const TriangleFanDrawMode = 2; +const LinearEncoding = 3000; +const sRGBEncoding = 3001; +const GammaEncoding = 3007; +const RGBEEncoding = 3002; +const LogLuvEncoding = 3003; +const RGBM7Encoding = 3004; +const RGBM16Encoding = 3005; +const RGBDEncoding = 3006; +const BasicDepthPacking = 3200; +const RGBADepthPacking = 3201; +const TangentSpaceNormalMap = 0; +const ObjectSpaceNormalMap = 1; + +const ZeroStencilOp = 0; +const KeepStencilOp = 7680; +const ReplaceStencilOp = 7681; +const IncrementStencilOp = 7682; +const DecrementStencilOp = 7683; +const IncrementWrapStencilOp = 34055; +const DecrementWrapStencilOp = 34056; +const InvertStencilOp = 5386; + +const NeverStencilFunc = 512; +const LessStencilFunc = 513; +const EqualStencilFunc = 514; +const LessEqualStencilFunc = 515; +const GreaterStencilFunc = 516; +const NotEqualStencilFunc = 517; +const GreaterEqualStencilFunc = 518; +const AlwaysStencilFunc = 519; + +const StaticDrawUsage = 35044; +const DynamicDrawUsage = 35048; +const StreamDrawUsage = 35040; +const StaticReadUsage = 35045; +const DynamicReadUsage = 35049; +const StreamReadUsage = 35041; +const StaticCopyUsage = 35046; +const DynamicCopyUsage = 35050; +const StreamCopyUsage = 35042; + +const GLSL1 = '100'; +const GLSL3 = '300 es'; + +/** + * https://github.com/mrdoob/eventdispatcher.js/ + */ + +class EventDispatcher { + + addEventListener( type, listener ) { + + if ( this._listeners === undefined ) this._listeners = {}; + + const listeners = this._listeners; + + if ( listeners[ type ] === undefined ) { + + listeners[ type ] = []; + + } + + if ( listeners[ type ].indexOf( listener ) === - 1 ) { + + listeners[ type ].push( listener ); + + } + + } + + hasEventListener( type, listener ) { + + if ( this._listeners === undefined ) return false; + + const listeners = this._listeners; + + return listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1; + + } + + removeEventListener( type, listener ) { + + if ( this._listeners === undefined ) return; + + const listeners = this._listeners; + const listenerArray = listeners[ type ]; + + if ( listenerArray !== undefined ) { + + const index = listenerArray.indexOf( listener ); + + if ( index !== - 1 ) { + + listenerArray.splice( index, 1 ); + + } + + } + + } + + dispatchEvent( event ) { + + if ( this._listeners === undefined ) return; + + const listeners = this._listeners; + const listenerArray = listeners[ event.type ]; + + if ( listenerArray !== undefined ) { + + event.target = this; + + // Make a copy, in case listeners are removed while iterating. + const array = listenerArray.slice( 0 ); + + for ( let i = 0, l = array.length; i < l; i ++ ) { + + array[ i ].call( this, event ); + + } + + event.target = null; + + } + + } + +} + +const _lut = []; + +for ( let i = 0; i < 256; i ++ ) { + + _lut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 ); + +} + +let _seed = 1234567; + + +const DEG2RAD = Math.PI / 180; +const RAD2DEG = 180 / Math.PI; + +// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136 +function generateUUID() { + + const d0 = Math.random() * 0xffffffff | 0; + const d1 = Math.random() * 0xffffffff | 0; + const d2 = Math.random() * 0xffffffff | 0; + const d3 = Math.random() * 0xffffffff | 0; + const uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 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 ]; + + // .toUpperCase() here flattens concatenated strings to save heap memory space. + return uuid.toUpperCase(); + +} + +function clamp( value, min, max ) { + + return Math.max( min, Math.min( max, value ) ); + +} + +// compute euclidian 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 % 2147483647; + + // Park-Miller algorithm + + _seed = _seed * 16807 % 2147483647; + + return ( _seed - 1 ) / 2147483646; + +} + +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 ); + + } + +} + +var MathUtils = /*#__PURE__*/Object.freeze({ + __proto__: null, + 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 +}); + +class Vector2 { + + constructor( x = 0, y = 0 ) { + + 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, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + 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, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + 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 = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( 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; + + } + + 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, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' ); + + } + + 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; + + } + +} + +Vector2.prototype.isVector2 = true; + +class Matrix3 { + + constructor() { + + this.elements = [ + + 1, 0, 0, + 0, 1, 0, + 0, 0, 1 + + ]; + + if ( arguments.length > 0 ) { + + console.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' ); + + } + + } + + 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 ) { + + const te = this.elements; + + te[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx; + te[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy; + + return this; + + } + + rotate( theta ) { + + const c = Math.cos( theta ); + const s = Math.sin( theta ); + + const te = this.elements; + + const a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ]; + const a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ]; + + te[ 0 ] = c * a11 + s * a21; + te[ 3 ] = c * a12 + s * a22; + te[ 6 ] = c * a13 + s * a23; + + te[ 1 ] = - s * a11 + c * a21; + te[ 4 ] = - s * a12 + c * a22; + te[ 7 ] = - s * a13 + c * a23; + + return this; + + } + + translate( tx, ty ) { + + const te = this.elements; + + te[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ]; + te[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ]; + + 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 ); + + } + +} + +Matrix3.prototype.isMatrix3 = true; + +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 = document.createElementNS( 'http://www.w3.org/1999/xhtml', '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' ); + + } + + } + +} + +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 = 1, encoding = LinearEncoding ) { + + super(); + + Object.defineProperty( this, 'id', { value: textureId ++ } ); + + this.uuid = generateUUID(); + + this.name = ''; + + this.image = image; + this.mipmaps = []; + + this.mapping = mapping; + + 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) + + // Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap. + // + // Also changing the encoding after already used by a Material will not automatically make the Material + // update. You need to explicitly call Material.needsUpdate to trigger it to recompile. + this.encoding = encoding; + + this.version = 0; + this.onUpdate = null; + + this.isRenderTargetTexture = false; + + } + + 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.image = source.image; + this.mipmaps = source.mipmaps.slice( 0 ); + + this.mapping = source.mapping; + + 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.encoding = source.encoding; + + 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.5, + type: 'Texture', + generator: 'Texture.toJSON' + }, + + uuid: this.uuid, + name: this.name, + + mapping: this.mapping, + + 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, + type: this.type, + encoding: this.encoding, + + minFilter: this.minFilter, + magFilter: this.magFilter, + anisotropy: this.anisotropy, + + flipY: this.flipY, + + premultiplyAlpha: this.premultiplyAlpha, + unpackAlignment: this.unpackAlignment + + }; + + if ( this.image !== undefined ) { + + // TODO: Move to THREE.Image + + const image = this.image; + + if ( image.uuid === undefined ) { + + image.uuid = generateUUID(); // UGH + + } + + if ( ! isRootObject && meta.images[ image.uuid ] === undefined ) { + + let url; + + if ( Array.isArray( image ) ) { + + // process array of images e.g. CubeTexture + + url = []; + + for ( let i = 0, l = image.length; i < l; i ++ ) { + + // check cube texture with data textures + + if ( image[ i ].isDataTexture ) { + + url.push( serializeImage( image[ i ].image ) ); + + } else { + + url.push( serializeImage( image[ i ] ) ); + + } + + } + + } else { + + // process single image + + url = serializeImage( image ); + + } + + meta.images[ image.uuid ] = { + uuid: image.uuid, + url: url + }; + + } + + output.image = image.uuid; + + } + + 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 ++; + + } + +} + +Texture.DEFAULT_IMAGE = undefined; +Texture.DEFAULT_MAPPING = UVMapping; + +Texture.prototype.isTexture = true; + +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.prototype.slice.call( image.data ), + width: image.width, + height: image.height, + type: image.data.constructor.name + }; + + } else { + + console.warn( 'THREE.Texture: Unable to serialize Texture.' ); + return {}; + + } + + } + +} + +class Vector4 { + + constructor( x = 0, y = 0, z = 0, w = 1 ) { + + 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, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + 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, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + 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 = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); + this.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( 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, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' ); + + } + + 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; + + } + +} + +Vector4.prototype.isVector4 = true; + +/* + 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 WebGLRenderTarget extends EventDispatcher { + + constructor( width, height, options = {} ) { + + super(); + + 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 ); + + this.texture = new Texture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding ); + this.texture.isRenderTargetTexture = true; + + this.texture.image = { width: width, height: height, depth: 1 }; + + this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false; + this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter; + + this.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true; + this.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false; + this.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null; + + } + + setTexture( texture ) { + + texture.image = { + width: this.width, + height: this.height, + depth: this.depth + }; + + this.texture = texture; + + } + + setSize( width, height, depth = 1 ) { + + if ( this.width !== width || this.height !== height || this.depth !== depth ) { + + this.width = width; + this.height = height; + this.depth = depth; + + this.texture.image.width = width; + this.texture.image.height = height; + this.texture.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.viewport.copy( source.viewport ); + + this.texture = source.texture.clone(); + this.texture.image = { ...this.texture.image }; // See #20328. + + this.depthBuffer = source.depthBuffer; + this.stencilBuffer = source.stencilBuffer; + this.depthTexture = source.depthTexture; + + return this; + + } + + dispose() { + + this.dispatchEvent( { type: 'dispose' } ); + + } + +} + +WebGLRenderTarget.prototype.isWebGLRenderTarget = true; + +class WebGLMultipleRenderTargets extends WebGLRenderTarget { + + constructor( width, height, count ) { + + super( width, height ); + + const texture = this.texture; + + this.texture = []; + + for ( let i = 0; i < count; i ++ ) { + + this.texture[ i ] = texture.clone(); + + } + + } + + 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.texture.length; i < il; i ++ ) { + + this.texture[ i ].image.width = width; + this.texture[ i ].image.height = height; + this.texture[ i ].image.depth = depth; + + } + + this.dispose(); + + } + + this.viewport.set( 0, 0, width, height ); + this.scissor.set( 0, 0, width, height ); + + return this; + + } + + copy( source ) { + + this.dispose(); + + this.width = source.width; + this.height = source.height; + this.depth = source.depth; + + this.viewport.set( 0, 0, this.width, this.height ); + this.scissor.set( 0, 0, this.width, this.height ); + + this.depthBuffer = source.depthBuffer; + this.stencilBuffer = source.stencilBuffer; + this.depthTexture = source.depthTexture; + + this.texture.length = 0; + + for ( let i = 0, il = source.texture.length; i < il; i ++ ) { + + this.texture[ i ] = source.texture[ i ].clone(); + + } + + return this; + + } + +} + +WebGLMultipleRenderTargets.prototype.isWebGLMultipleRenderTargets = true; + +class WebGLMultisampleRenderTarget extends WebGLRenderTarget { + + constructor( width, height, options ) { + + super( width, height, options ); + + this.samples = 4; + + } + + copy( source ) { + + super.copy.call( this, source ); + + this.samples = source.samples; + + return this; + + } + +} + +WebGLMultisampleRenderTarget.prototype.isWebGLMultisampleRenderTarget = true; + +class Quaternion { + + constructor( x = 0, y = 0, z = 0, w = 1 ) { + + this._x = x; + this._y = y; + this._z = z; + this._w = w; + + } + + static slerp( qa, qb, qm, t ) { + + console.warn( 'THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.' ); + return qm.slerpQuaternions( qa, qb, t ); + + } + + 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 ) { + + if ( ! ( euler && euler.isEuler ) ) { + + throw new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' ); + + } + + 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 !== false ) 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, p ) { + + if ( p !== undefined ) { + + console.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' ); + return this.multiplyQuaternions( q, p ); + + } + + 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(); + this._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 ) { + + this.copy( qa ).slerp( qb, t ); + + } + + 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 ); + + return this; + + } + + _onChange( callback ) { + + this._onChangeCallback = callback; + + return this; + + } + + _onChangeCallback() {} + +} + +Quaternion.prototype.isQuaternion = true; + +class Vector3 { + + constructor( x = 0, y = 0, z = 0 ) { + + 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, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + 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, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + 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, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' ); + return this.multiplyVectors( v, w ); + + } + + 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 ) { + + if ( ! ( euler && euler.isEuler ) ) { + + console.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' ); + + } + + 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 ) { + + const x = this.x, y = this.y, z = this.z; + const qx = q.x, qy = q.y, qz = q.z, qw = q.w; + + // calculate quat * vector + + const ix = qw * x + qy * z - qz * y; + const iy = qw * y + qz * x - qx * z; + const iz = qw * z + qx * y - qy * x; + const iw = - qx * x - qy * y - qz * z; + + // calculate result * inverse quat + + this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy; + this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz; + this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx; + + 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 = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( 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, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' ); + return this.crossVectors( v, w ); + + } + + 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 ); + + } + + 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, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' ); + + } + + 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; + + } + +} + +Vector3.prototype.isVector3 = true; + +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.min = min; + this.max = max; + + } + + set( min, max ) { + + this.min.copy( min ); + this.max.copy( max ); + + return this; + + } + + setFromArray( array ) { + + let minX = + Infinity; + let minY = + Infinity; + let minZ = + Infinity; + + let maxX = - Infinity; + let maxY = - Infinity; + let maxZ = - Infinity; + + for ( let i = 0, l = array.length; i < l; i += 3 ) { + + const x = array[ i ]; + const y = array[ i + 1 ]; + const z = array[ i + 2 ]; + + if ( x < minX ) minX = x; + if ( y < minY ) minY = y; + if ( z < minZ ) minZ = z; + + if ( x > maxX ) maxX = x; + if ( y > maxY ) maxY = y; + if ( z > maxZ ) maxZ = z; + + } + + this.min.set( minX, minY, minZ ); + this.max.set( maxX, maxY, maxZ ); + + return this; + + } + + setFromBufferAttribute( attribute ) { + + let minX = + Infinity; + let minY = + Infinity; + let minZ = + Infinity; + + let maxX = - Infinity; + let maxY = - Infinity; + let maxZ = - Infinity; + + for ( let i = 0, l = attribute.count; i < l; i ++ ) { + + const x = attribute.getX( i ); + const y = attribute.getY( i ); + const z = attribute.getZ( i ); + + if ( x < minX ) minX = x; + if ( y < minY ) minY = y; + if ( z < minZ ) minZ = z; + + if ( x > maxX ) maxX = x; + if ( y > maxY ) maxY = y; + if ( z > maxZ ) maxZ = z; + + } + + this.min.set( minX, minY, minZ ); + this.max.set( maxX, maxY, maxZ ); + + 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 ) { + + this.makeEmpty(); + + return this.expandByObject( object ); + + } + + 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 ) { + + // 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 ) { + + if ( geometry.boundingBox === null ) { + + geometry.computeBoundingBox(); + + } + + _box$3.copy( geometry.boundingBox ); + _box$3.applyMatrix4( object.matrixWorld ); + + this.union( _box$3 ); + + } + + const children = object.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + this.expandByObject( children[ i ] ); + + } + + 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$3.subVectors( triangle.c, _center ); + + // compute edge vectors for triangle + _f0.subVectors( _v1$7, _v0$2 ); + _f1.subVectors( _v2$3, _v1$7 ); + _f2.subVectors( _v0$2, _v2$3 ); + + // 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$3, _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$3, _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$3, _extents ); + + } + + clampPoint( point, target ) { + + return target.copy( point ).clamp( this.min, this.max ); + + } + + distanceToPoint( point ) { + + const clampedPoint = _vector$b.copy( point ).clamp( this.min, this.max ); + + return clampedPoint.sub( point ).length(); + + } + + getBoundingSphere( target ) { + + 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 ); + + } + +} + +Box3.prototype.isBox3 = true; + +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$3 = /*@__PURE__*/ new Box3(); + +// triangle centered vertices + +const _v0$2 = /*@__PURE__*/ new Vector3(); +const _v1$7 = /*@__PURE__*/ new Vector3(); +const _v2$3 = /*@__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 seperating 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 seperating 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 seperating and we can exit + return false; + + } + + } + + return true; + +} + +const _box$2 = /*@__PURE__*/ new Box3(); +const _v1$6 = /*@__PURE__*/ new Vector3(); +const _toFarthestPoint = /*@__PURE__*/ new Vector3(); +const _toPoint = /*@__PURE__*/ new Vector3(); + +class Sphere { + + constructor( center = new Vector3(), radius = - 1 ) { + + 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$2.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 ) { + + // from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L649-L671 + + _toPoint.subVectors( point, this.center ); + + const lengthSq = _toPoint.lengthSq(); + + if ( lengthSq > ( this.radius * this.radius ) ) { + + const length = Math.sqrt( lengthSq ); + const missingRadiusHalf = ( length - this.radius ) * 0.5; + + // Nudge this sphere towards the target point. Add half the missing distance to radius, + // and the other half to position. This gives a tighter enclosure, instead of if + // the whole missing distance were just added to radius. + + this.center.add( _toPoint.multiplyScalar( missingRadiusHalf / length ) ); + this.radius += missingRadiusHalf; + + } + + return this; + + } + + union( sphere ) { + + // from https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Geometry/Sphere.cpp#L759-L769 + + // To enclose another sphere into this sphere, we only need to enclose two points: + // 1) Enclose the farthest point on the other sphere into this sphere. + // 2) Enclose the opposite point of the farthest point into this sphere. + + _toFarthestPoint.subVectors( sphere.center, this.center ).normalize().multiplyScalar( sphere.radius ); + + this.expandByPoint( _v1$6.copy( sphere.center ).add( _toFarthestPoint ) ); + this.expandByPoint( _v1$6.copy( sphere.center ).sub( _toFarthestPoint ) ); + + 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.direction ).multiplyScalar( t ).add( this.origin ); + + } + + 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.direction ).multiplyScalar( directionDistance ).add( this.origin ); + + } + + 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.direction ).multiplyScalar( directionDistance ).add( this.origin ); + + return _vector$a.distanceToSquared( point ); + + } + + distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) { + + // from http://www.geometrictools.com/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.direction ).multiplyScalar( s0 ).add( this.origin ); + + } + + if ( optionalPointOnSegment ) { + + optionalPointOnSegment.copy( _segDir ).multiplyScalar( s1 ).add( _segCenter ); + + } + + 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 both t0 and t1 are behind the ray - if so, return null + if ( t0 < 0 && 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; + + // These lines also handle the case where tmin or tmax is NaN + // (result of 0 * Infinity). x !== x returns true if x is NaN + + if ( tymin > tmin || tmin !== tmin ) tmin = tymin; + + if ( tymax < tmax || tmax !== 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 http://www.geometrictools.com/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() { + + this.elements = [ + + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + + ]; + + if ( arguments.length > 0 ) { + + console.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' ); + + } + + } + + 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 ) { + + if ( ! ( euler && euler.isEuler ) ) { + + console.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' ); + + } + + 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, n ) { + + if ( n !== undefined ) { + + console.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' ); + return this.multiplyMatrices( m, n ); + + } + + 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 ) { + + 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$2.copy( this ); + + const invSX = 1 / sx; + const invSY = 1 / sy; + const invSZ = 1 / sz; + + _m1$2.elements[ 0 ] *= invSX; + _m1$2.elements[ 1 ] *= invSX; + _m1$2.elements[ 2 ] *= invSX; + + _m1$2.elements[ 4 ] *= invSY; + _m1$2.elements[ 5 ] *= invSY; + _m1$2.elements[ 6 ] *= invSY; + + _m1$2.elements[ 8 ] *= invSZ; + _m1$2.elements[ 9 ] *= invSZ; + _m1$2.elements[ 10 ] *= invSZ; + + quaternion.setFromRotationMatrix( _m1$2 ); + + scale.x = sx; + scale.y = sy; + scale.z = sz; + + return this; + + } + + makePerspective( left, right, top, bottom, near, far ) { + + if ( far === undefined ) { + + console.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' ); + + } + + 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 ); + const c = - ( far + near ) / ( far - near ); + const d = - 2 * far * near / ( far - near ); + + 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 ) { + + 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; + const z = ( far + near ) * p; + + 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 ] = - 2 * p; 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; + + } + +} + +Matrix4.prototype.isMatrix4 = true; + +const _v1$5 = /*@__PURE__*/ new Vector3(); +const _m1$2 = /*@__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$1 = /*@__PURE__*/ new Matrix4(); +const _quaternion$3 = /*@__PURE__*/ new Quaternion(); + +class Euler { + + constructor( x = 0, y = 0, z = 0, order = Euler.DefaultOrder ) { + + 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$1.makeRotationFromQuaternion( q ); + + return this.setFromRotationMatrix( _matrix$1, 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; + + } + + toVector3( optionalResult ) { + + if ( optionalResult ) { + + return optionalResult.set( this._x, this._y, this._z ); + + } else { + + return new Vector3( this._x, this._y, this._z ); + + } + + } + + _onChange( callback ) { + + this._onChangeCallback = callback; + + return this; + + } + + _onChangeCallback() {} + +} + +Euler.prototype.isEuler = true; + +Euler.DefaultOrder = 'XYZ'; +Euler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ]; + +class Layers { + + constructor() { + + this.mask = 1 | 0; + + } + + set( channel ) { + + this.mask = 1 << channel | 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; + + } + +} + +let _object3DId = 0; + +const _v1$4 = /*@__PURE__*/ new Vector3(); +const _q1 = /*@__PURE__*/ new Quaternion(); +const _m1$1 = /*@__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' }; + +class Object3D extends EventDispatcher { + + constructor() { + + super(); + + Object.defineProperty( this, 'id', { value: _object3DId ++ } ); + + this.uuid = generateUUID(); + + this.name = ''; + this.type = 'Object3D'; + + this.parent = null; + this.children = []; + + this.up = Object3D.DefaultUp.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.DefaultMatrixAutoUpdate; + 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 = {}; + + } + + onBeforeRender() {} + onAfterRender() {} + + 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 ) { + + return vector.applyMatrix4( this.matrixWorld ); + + } + + worldToLocal( vector ) { + + return vector.applyMatrix4( _m1$1.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$1.lookAt( _position$3, _target, this.up ); + + } else { + + _m1$1.lookAt( _target, _position$3, this.up ); + + } + + this.quaternion.setFromRotationMatrix( _m1$1 ); + + if ( parent ) { + + _m1$1.extractRotation( parent.matrixWorld ); + _q1.setFromRotationMatrix( _m1$1 ); + 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 ) { + + if ( object.parent !== null ) { + + object.parent.remove( object ); + + } + + object.parent = this; + this.children.push( object ); + + object.dispatchEvent( _addedEvent ); + + } 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 ); + + } + + return this; + + } + + removeFromParent() { + + const parent = this.parent; + + if ( parent !== null ) { + + parent.remove( this ); + + } + + return this; + + } + + clear() { + + for ( let i = 0; i < this.children.length; i ++ ) { + + const object = this.children[ i ]; + + object.parent = null; + + object.dispatchEvent( _removedEvent ); + + } + + this.children.length = 0; + + return this; + + + } + + attach( object ) { + + // adds object as a child of this, while maintaining the object's world transform + + this.updateWorldMatrix( true, false ); + + _m1$1.copy( this.matrixWorld ).invert(); + + if ( object.parent !== null ) { + + object.parent.updateWorldMatrix( true, false ); + + _m1$1.multiply( object.parent.matrixWorld ); + + } + + object.applyMatrix4( _m1$1 ); + + this.add( object ); + + object.updateWorldMatrix( false, true ); + + 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; + + } + + 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() {} + + 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 ++ ) { + + children[ i ].updateMatrixWorld( force ); + + } + + } + + updateWorldMatrix( updateParents, updateChildren ) { + + const parent = this.parent; + + if ( updateParents === true && parent !== null ) { + + 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 ++ ) { + + children[ i ].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: {} + }; + + output.metadata = { + version: 4.5, + 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 ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData; + + object.layers = this.layers.mask; + object.matrix = this.matrix.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(); + + } + + // + + 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 ) { + + 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 ); + + 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; + + } + + 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.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.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.DefaultUp = new Vector3( 0, 1, 0 ); +Object3D.DefaultMatrixAutoUpdate = true; + +Object3D.prototype.isObject3D = true; + +const _v0$1 = /*@__PURE__*/ new Vector3(); +const _v1$3 = /*@__PURE__*/ new Vector3(); +const _v2$2 = /*@__PURE__*/ new Vector3(); +const _v3$1 = /*@__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 ) { + + // arbitrary location outside of triangle? + // not sure if this is the best idea, maybe should be returning undefined + return target.set( - 2, - 1, - 1 ); + + } + + 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 ) { + + this.getBarycoord( point, a, b, c, _v3$1 ); + + return ( _v3$1.x >= 0 ) && ( _v3$1.y >= 0 ) && ( ( _v3$1.x + _v3$1.y ) <= 1 ); + + } + + static getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) { + + this.getBarycoord( point, p1, p2, p3, _v3$1 ); + + target.set( 0, 0 ); + target.addScaledVector( uv1, _v3$1.x ); + target.addScaledVector( uv2, _v3$1.y ); + target.addScaledVector( uv3, _v3$1.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; + + } + + 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 ); + + } + + getUV( point, uv1, uv2, uv3, target ) { + + return Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, 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 ); + + } + +} + +let materialId = 0; + +class Material extends EventDispatcher { + + constructor() { + + super(); + + Object.defineProperty( this, 'id', { value: materialId ++ } ); + + this.uuid = generateUUID(); + + this.name = ''; + this.type = 'Material'; + + this.fog = true; + + this.blending = NormalBlending; + this.side = FrontSide; + this.vertexColors = false; + + this.opacity = 1; + this.transparent = false; + + this.blendSrc = SrcAlphaFactor; + this.blendDst = OneMinusSrcAlphaFactor; + this.blendEquation = AddEquation; + this.blendSrcAlpha = null; + this.blendDstAlpha = null; + this.blendEquationAlpha = null; + + 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.alphaTest = 0; + this.alphaToCoverage = false; + this.premultipliedAlpha = false; + + this.visible = true; + + this.toneMapped = true; + + this.userData = {}; + + this.version = 0; + + } + + onBuild( /* shaderobject, renderer */ ) {} + + 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: \'' + key + '\' parameter is undefined.' ); + continue; + + } + + // for backward compatability if shading is set in the constructor + if ( key === 'shading' ) { + + console.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + this.flatShading = ( newValue === FlatShading ) ? true : false; + continue; + + } + + const currentValue = this[ key ]; + + if ( currentValue === undefined ) { + + console.warn( 'THREE.' + this.type + ': \'' + key + '\' is not a property of this material.' ); + 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 isRoot = ( meta === undefined || typeof meta === 'string' ); + + if ( isRoot ) { + + meta = { + textures: {}, + images: {} + }; + + } + + const data = { + metadata: { + version: 4.5, + 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 && this.sheen.isColor ) data.sheen = this.sheen.getHex(); + if ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex(); + if ( this.emissiveIntensity && 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.specularTint && this.specularTint.isColor ) data.specularTint = this.specularTint.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.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.specularTintMap && this.specularTintMap.isTexture ) data.specularTintMap = this.specularTintMap.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.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 ) data.attenuationDistance = this.attenuationDistance; + if ( this.attenuationTint !== undefined ) data.attenuationTint = this.attenuationTint.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 ) data.vertexColors = true; + + if ( this.opacity < 1 ) data.opacity = this.opacity; + if ( this.transparent === true ) data.transparent = this.transparent; + + data.depthFunc = this.depthFunc; + data.depthTest = this.depthTest; + data.depthWrite = this.depthWrite; + data.colorWrite = this.colorWrite; + + data.stencilWrite = this.stencilWrite; + data.stencilWriteMask = this.stencilWriteMask; + data.stencilFunc = this.stencilFunc; + data.stencilRef = this.stencilRef; + data.stencilFuncMask = this.stencilFuncMask; + data.stencilFail = this.stencilFail; + data.stencilZFail = this.stencilZFail; + data.stencilZPass = this.stencilZPass; + + // rotation (SpriteMaterial) + if ( this.rotation && 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 && 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.alphaToCoverage === true ) data.alphaToCoverage = this.alphaToCoverage; + if ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha; + + if ( this.wireframe === true ) data.wireframe = this.wireframe; + 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 = this.flatShading; + + if ( this.visible === false ) data.visible = false; + + if ( this.toneMapped === false ) data.toneMapped = false; + + if ( JSON.stringify( this.userData ) !== '{}' ) 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 ( isRoot ) { + + 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.fog = source.fog; + + 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.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.alphaToCoverage = source.alphaToCoverage; + this.premultipliedAlpha = source.premultipliedAlpha; + + 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 ++; + + } + +} + +Material.prototype.isMaterial = true; + +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; + +} + +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; + +} + +class Color { + + constructor( r, g, b ) { + + if ( g === undefined && b === undefined ) { + + // r is THREE.Color, hex or string + return this.set( r ); + + } + + return this.setRGB( r, g, b ); + + } + + set( value ) { + + if ( value && value.isColor ) { + + this.copy( value ); + + } else if ( typeof value === 'number' ) { + + this.setHex( value ); + + } else if ( typeof value === 'string' ) { + + this.setStyle( value ); + + } + + return this; + + } + + setScalar( scalar ) { + + this.r = scalar; + this.g = scalar; + this.b = scalar; + + return this; + + } + + setHex( hex ) { + + hex = Math.floor( hex ); + + this.r = ( hex >> 16 & 255 ) / 255; + this.g = ( hex >> 8 & 255 ) / 255; + this.b = ( hex & 255 ) / 255; + + return this; + + } + + setRGB( r, g, b ) { + + this.r = r; + this.g = g; + this.b = b; + + return this; + + } + + setHSL( h, s, l ) { + + // 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 ); + + } + + return this; + + } + + setStyle( style ) { + + 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 = /^((?:rgb|hsl)a?)\(([^\)]*)\)/.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) + this.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255; + this.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255; + this.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255; + + handleAlpha( color[ 4 ] ); + + return this; + + } + + 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) + this.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100; + this.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100; + this.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100; + + handleAlpha( color[ 4 ] ); + + return this; + + } + + break; + + case 'hsl': + case 'hsla': + + if ( color = /^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) { + + // hsl(120,50%,50%) hsla(120,50%,50%,0.5) + const h = parseFloat( color[ 1 ] ) / 360; + const s = parseInt( color[ 2 ], 10 ) / 100; + const l = parseInt( color[ 3 ], 10 ) / 100; + + handleAlpha( color[ 4 ] ); + + return this.setHSL( h, s, l ); + + } + + break; + + } + + } else if ( m = /^\#([A-Fa-f\d]+)$/.exec( style ) ) { + + // hex color + + const hex = m[ 1 ]; + const size = hex.length; + + if ( size === 3 ) { + + // #ff0 + this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255; + this.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255; + this.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255; + + return this; + + } else if ( size === 6 ) { + + // #ff0000 + this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255; + this.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255; + this.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255; + + return this; + + } + + } + + if ( style && style.length > 0 ) { + + return this.setColorName( style ); + + } + + return this; + + } + + setColorName( style ) { + + // color keywords + const hex = _colorKeywords[ style.toLowerCase() ]; + + if ( hex !== undefined ) { + + // red + this.setHex( hex ); + + } 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; + + } + + copyGammaToLinear( color, gammaFactor = 2.0 ) { + + this.r = Math.pow( color.r, gammaFactor ); + this.g = Math.pow( color.g, gammaFactor ); + this.b = Math.pow( color.b, gammaFactor ); + + return this; + + } + + copyLinearToGamma( color, gammaFactor = 2.0 ) { + + const safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0; + + this.r = Math.pow( color.r, safeInverse ); + this.g = Math.pow( color.g, safeInverse ); + this.b = Math.pow( color.b, safeInverse ); + + return this; + + } + + convertGammaToLinear( gammaFactor ) { + + this.copyGammaToLinear( this, gammaFactor ); + + return this; + + } + + convertLinearToGamma( gammaFactor ) { + + this.copyLinearToGamma( this, gammaFactor ); + + 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() { + + return ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0; + + } + + getHexString() { + + return ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 ); + + } + + getHSL( target ) { + + // h,s,l ranges are in 0.0 - 1.0 + + const r = this.r, g = this.g, b = this.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; + + } + + getStyle() { + + return 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')'; + + } + + offsetHSL( h, s, l ) { + + this.getHSL( _hslA ); + + _hslA.h += h; _hslA.s += s; _hslA.l += l; + + this.setHSL( _hslA.h, _hslA.s, _hslA.l ); + + return this; + + } + + 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; + + } + + 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 ); + + if ( attribute.normalized === true ) { + + // assuming Uint8Array + + this.r /= 255; + this.g /= 255; + this.b /= 255; + + } + + return this; + + } + + toJSON() { + + return this.getHex(); + + } + +} + +Color.NAMES = _colorKeywords; + +Color.prototype.isColor = true; +Color.prototype.r = 1; +Color.prototype.g = 1; +Color.prototype.b = 1; + +/** + * parameters = { + * color: , + * opacity: , + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.Multiply, + * reflectivity: , + * refractionRatio: , + * + * depthTest: , + * depthWrite: , + * + * wireframe: , + * wireframeLinewidth: , + * } + */ + +class MeshBasicMaterial extends Material { + + constructor( parameters ) { + + super(); + + 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.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + 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.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; + + return this; + + } + +} + +MeshBasicMaterial.prototype.isMeshBasicMaterial = true; + +const _vector$9 = /*@__PURE__*/ new Vector3(); +const _vector2$1 = /*@__PURE__*/ new Vector2(); + +class BufferAttribute { + + constructor( array, itemSize, normalized ) { + + if ( Array.isArray( array ) ) { + + throw new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' ); + + } + + this.name = ''; + + this.array = array; + this.itemSize = itemSize; + this.count = array !== undefined ? array.length / itemSize : 0; + this.normalized = normalized === true; + + this.usage = StaticDrawUsage; + this.updateRange = { offset: 0, count: - 1 }; + + this.version = 0; + + } + + onUploadCallback() {} + + set needsUpdate( value ) { + + if ( value === true ) this.version ++; + + } + + setUsage( value ) { + + this.usage = value; + + return this; + + } + + 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; + + 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; + + } + + copyColorsArray( colors ) { + + const array = this.array; + let offset = 0; + + for ( let i = 0, l = colors.length; i < l; i ++ ) { + + let color = colors[ i ]; + + if ( color === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i ); + color = new Color(); + + } + + array[ offset ++ ] = color.r; + array[ offset ++ ] = color.g; + array[ offset ++ ] = color.b; + + } + + return this; + + } + + copyVector2sArray( vectors ) { + + const array = this.array; + let offset = 0; + + for ( let i = 0, l = vectors.length; i < l; i ++ ) { + + let vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i ); + vector = new Vector2(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + + } + + return this; + + } + + copyVector3sArray( vectors ) { + + const array = this.array; + let offset = 0; + + for ( let i = 0, l = vectors.length; i < l; i ++ ) { + + let vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i ); + vector = new Vector3(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + array[ offset ++ ] = vector.z; + + } + + return this; + + } + + copyVector4sArray( vectors ) { + + const array = this.array; + let offset = 0; + + for ( let i = 0, l = vectors.length; i < l; i ++ ) { + + let vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i ); + vector = new Vector4(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + array[ offset ++ ] = vector.z; + array[ offset ++ ] = vector.w; + + } + + 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.x = this.getX( i ); + _vector$9.y = this.getY( i ); + _vector$9.z = this.getZ( 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.x = this.getX( i ); + _vector$9.y = this.getY( i ); + _vector$9.z = this.getZ( 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.x = this.getX( i ); + _vector$9.y = this.getY( i ); + _vector$9.z = this.getZ( i ); + + _vector$9.transformDirection( m ); + + this.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z ); + + } + + return this; + + } + + set( value, offset = 0 ) { + + this.array.set( value, offset ); + + return this; + + } + + getX( index ) { + + return this.array[ index * this.itemSize ]; + + } + + setX( index, x ) { + + this.array[ index * this.itemSize ] = x; + + return this; + + } + + getY( index ) { + + return this.array[ index * this.itemSize + 1 ]; + + } + + setY( index, y ) { + + this.array[ index * this.itemSize + 1 ] = y; + + return this; + + } + + getZ( index ) { + + return this.array[ index * this.itemSize + 2 ]; + + } + + setZ( index, z ) { + + this.array[ index * this.itemSize + 2 ] = z; + + return this; + + } + + getW( index ) { + + return this.array[ index * this.itemSize + 3 ]; + + } + + setW( index, w ) { + + this.array[ index * this.itemSize + 3 ] = w; + + return this; + + } + + setXY( index, x, y ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + + return this; + + } + + setXYZ( index, x, y, z ) { + + index *= this.itemSize; + + 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; + + 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.prototype.slice.call( this.array ), + normalized: this.normalized + }; + + if ( this.name !== '' ) data.name = this.name; + if ( this.usage !== StaticDrawUsage ) data.usage = this.usage; + if ( this.updateRange.offset !== 0 || this.updateRange.count !== - 1 ) data.updateRange = this.updateRange; + + return data; + + } + +} + +BufferAttribute.prototype.isBufferAttribute = true; + +// + +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 ); + + } + +} + +Float16BufferAttribute.prototype.isFloat16BufferAttribute = true; + +class Float32BufferAttribute extends BufferAttribute { + + constructor( array, itemSize, normalized ) { + + super( new Float32Array( array ), itemSize, normalized ); + + } + +} + +class Float64BufferAttribute extends BufferAttribute { + + constructor( array, itemSize, normalized ) { + + super( new Float64Array( array ), itemSize, normalized ); + + } + +} + +function arrayMax( array ) { + + if ( array.length === 0 ) return - Infinity; + + let max = array[ 0 ]; + + for ( let i = 1, l = array.length; i < l; ++ i ) { + + if ( array[ i ] > max ) max = array[ i ]; + + } + + return max; + +} + +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 ); + +} + +let _id = 0; + +const _m1 = /*@__PURE__*/ new Matrix4(); +const _obj = /*@__PURE__*/ new Object3D(); +const _offset = /*@__PURE__*/ new Vector3(); +const _box$1 = /*@__PURE__*/ new Box3(); +const _boxMorphTargets = /*@__PURE__*/ new Box3(); +const _vector$8 = /*@__PURE__*/ new Vector3(); + +class BufferGeometry extends EventDispatcher { + + constructor() { + + super(); + + Object.defineProperty( this, 'id', { value: _id ++ } ); + + 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 ( arrayMax( index ) > 65535 ? 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.makeRotationFromQuaternion( q ); + + this.applyMatrix4( _m1 ); + + return this; + + } + + rotateX( angle ) { + + // rotate geometry around world x-axis + + _m1.makeRotationX( angle ); + + this.applyMatrix4( _m1 ); + + return this; + + } + + rotateY( angle ) { + + // rotate geometry around world y-axis + + _m1.makeRotationY( angle ); + + this.applyMatrix4( _m1 ); + + return this; + + } + + rotateZ( angle ) { + + // rotate geometry around world z-axis + + _m1.makeRotationZ( angle ); + + this.applyMatrix4( _m1 ); + + return this; + + } + + translate( x, y, z ) { + + // translate geometry + + _m1.makeTranslation( x, y, z ); + + this.applyMatrix4( _m1 ); + + return this; + + } + + scale( x, y, z ) { + + // scale geometry + + _m1.makeScale( x, y, z ); + + this.applyMatrix4( _m1 ); + + 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. Alternatively set "mesh.frustumCulled" to "false".', 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$1.setFromBufferAttribute( morphAttribute ); + + if ( this.morphTargetsRelative ) { + + _vector$8.addVectors( this.boundingBox.min, _box$1.min ); + this.boundingBox.expandByPoint( _vector$8 ); + + _vector$8.addVectors( this.boundingBox.max, _box$1.max ); + this.boundingBox.expandByPoint( _vector$8 ); + + } else { + + this.boundingBox.expandByPoint( _box$1.min ); + this.boundingBox.expandByPoint( _box$1.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. Alternatively set "mesh.frustumCulled" to "false".', this ); + + this.boundingSphere.set( new Vector3(), Infinity ); + + return; + + } + + if ( position ) { + + // first, find the center of the bounding sphere + + const center = this.boundingSphere.center; + + _box$1.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$1.min, _boxMorphTargets.min ); + _box$1.expandByPoint( _vector$8 ); + + _vector$8.addVectors( _box$1.max, _boxMorphTargets.max ); + _box$1.expandByPoint( _vector$8 ); + + } else { + + _box$1.expandByPoint( _boxMorphTargets.min ); + _box$1.expandByPoint( _boxMorphTargets.max ); + + } + + } + + } + + _box$1.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 ); + + } + + } + + } + + computeFaceNormals() { + + // backwards compatibility + + } + + 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 indices = index.array; + const positions = attributes.position.array; + const normals = attributes.normal.array; + const uvs = attributes.uv.array; + + const nVertices = positions.length / 3; + + if ( attributes.tangent === undefined ) { + + this.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * nVertices ), 4 ) ); + + } + + const tangents = attributes.tangent.array; + + const tan1 = [], tan2 = []; + + for ( let i = 0; i < nVertices; 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.fromArray( positions, a * 3 ); + vB.fromArray( positions, b * 3 ); + vC.fromArray( positions, c * 3 ); + + uvA.fromArray( uvs, a * 2 ); + uvB.fromArray( uvs, b * 2 ); + uvC.fromArray( uvs, c * 2 ); + + 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: indices.length + } ]; + + } + + 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( + indices[ j + 0 ], + indices[ j + 1 ], + indices[ j + 2 ] + ); + + } + + } + + const tmp = new Vector3(), tmp2 = new Vector3(); + const n = new Vector3(), n2 = new Vector3(); + + function handleVertex( v ) { + + n.fromArray( normals, v * 3 ); + 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; + + tangents[ v * 4 ] = tmp.x; + tangents[ v * 4 + 1 ] = tmp.y; + tangents[ v * 4 + 2 ] = tmp.z; + tangents[ v * 4 + 3 ] = 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( indices[ j + 0 ] ); + handleVertex( indices[ j + 1 ] ); + handleVertex( indices[ 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; + + } + + } + + merge( geometry, offset ) { + + if ( ! ( geometry && geometry.isBufferGeometry ) ) { + + console.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry ); + return; + + } + + if ( offset === undefined ) { + + offset = 0; + + console.warn( + 'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. ' + + 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.' + ); + + } + + const attributes = this.attributes; + + for ( const key in attributes ) { + + if ( geometry.attributes[ key ] === undefined ) continue; + + const attribute1 = attributes[ key ]; + const attributeArray1 = attribute1.array; + + const attribute2 = geometry.attributes[ key ]; + const attributeArray2 = attribute2.array; + + const attributeOffset = attribute2.itemSize * offset; + const length = Math.min( attributeArray2.length, attributeArray1.length - attributeOffset ); + + for ( let i = 0, j = attributeOffset; i < length; i ++, j ++ ) { + + attributeArray1[ j ] = attributeArray2[ i ]; + + } + + } + + return this; + + } + + 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.5, + 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() { + + /* + // Handle primitives + + const parameters = this.parameters; + + if ( parameters !== undefined ) { + + const values = []; + + for ( const key in parameters ) { + + values.push( parameters[ key ] ); + + } + + const geometry = Object.create( this.constructor.prototype ); + this.constructor.apply( geometry, values ); + return geometry; + + } + + return new this.constructor().copy( this ); + */ + + return new BufferGeometry().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' } ); + + } + +} + +BufferGeometry.prototype.isBufferGeometry = true; + +const _inverseMatrix$2 = /*@__PURE__*/ new Matrix4(); +const _ray$2 = /*@__PURE__*/ new Ray(); +const _sphere$3 = /*@__PURE__*/ new Sphere(); + +const _vA$1 = /*@__PURE__*/ new Vector3(); +const _vB$1 = /*@__PURE__*/ new Vector3(); +const _vC$1 = /*@__PURE__*/ new Vector3(); + +const _tempA = /*@__PURE__*/ new Vector3(); +const _tempB = /*@__PURE__*/ new Vector3(); +const _tempC = /*@__PURE__*/ new Vector3(); + +const _morphA = /*@__PURE__*/ new Vector3(); +const _morphB = /*@__PURE__*/ new Vector3(); +const _morphC = /*@__PURE__*/ new Vector3(); + +const _uvA$1 = /*@__PURE__*/ new Vector2(); +const _uvB$1 = /*@__PURE__*/ new Vector2(); +const _uvC$1 = /*@__PURE__*/ new Vector2(); + +const _intersectionPoint = /*@__PURE__*/ new Vector3(); +const _intersectionPointWorld = /*@__PURE__*/ new Vector3(); + +class Mesh extends Object3D { + + constructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) { + + super(); + + this.type = 'Mesh'; + + this.geometry = geometry; + this.material = material; + + this.updateMorphTargets(); + + } + + copy( source ) { + + super.copy( source ); + + if ( source.morphTargetInfluences !== undefined ) { + + this.morphTargetInfluences = source.morphTargetInfluences.slice(); + + } + + if ( source.morphTargetDictionary !== undefined ) { + + this.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary ); + + } + + this.material = source.material; + this.geometry = source.geometry; + + return this; + + } + + updateMorphTargets() { + + const geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + 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; + + } + + } + + } + + } else { + + const morphTargets = geometry.morphTargets; + + if ( morphTargets !== undefined && morphTargets.length > 0 ) { + + console.error( 'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + } + + } + + raycast( raycaster, intersects ) { + + const geometry = this.geometry; + const material = this.material; + const matrixWorld = this.matrixWorld; + + if ( material === undefined ) return; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + _sphere$3.copy( geometry.boundingSphere ); + _sphere$3.applyMatrix4( matrixWorld ); + + if ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return; + + // + + _inverseMatrix$2.copy( matrixWorld ).invert(); + _ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 ); + + // Check boundingBox before continuing + + if ( geometry.boundingBox !== null ) { + + if ( _ray$2.intersectsBox( geometry.boundingBox ) === false ) return; + + } + + let intersection; + + if ( geometry.isBufferGeometry ) { + + const index = geometry.index; + const position = geometry.attributes.position; + const morphPosition = geometry.morphAttributes.position; + const morphTargetsRelative = geometry.morphTargetsRelative; + const uv = geometry.attributes.uv; + const uv2 = geometry.attributes.uv2; + 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( ( 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 = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, 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 = checkBufferGeometryIntersection( this, material, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, 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( ( 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 = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, 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 = checkBufferGeometryIntersection( this, material, raycaster, _ray$2, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ); + + if ( intersection ) { + + intersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics + intersects.push( intersection ); + + } + + } + + } + + } + + } else if ( geometry.isGeometry ) { + + console.error( 'THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + } + +} + +Mesh.prototype.isMesh = true; + +function checkIntersection( 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 !== DoubleSide, 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 checkBufferGeometryIntersection( object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ) { + + _vA$1.fromBufferAttribute( position, a ); + _vB$1.fromBufferAttribute( position, b ); + _vC$1.fromBufferAttribute( position, c ); + + const morphInfluences = object.morphTargetInfluences; + + if ( morphPosition && morphInfluences ) { + + _morphA.set( 0, 0, 0 ); + _morphB.set( 0, 0, 0 ); + _morphC.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, a ); + _tempB.fromBufferAttribute( morphAttribute, b ); + _tempC.fromBufferAttribute( morphAttribute, c ); + + if ( morphTargetsRelative ) { + + _morphA.addScaledVector( _tempA, influence ); + _morphB.addScaledVector( _tempB, influence ); + _morphC.addScaledVector( _tempC, influence ); + + } else { + + _morphA.addScaledVector( _tempA.sub( _vA$1 ), influence ); + _morphB.addScaledVector( _tempB.sub( _vB$1 ), influence ); + _morphC.addScaledVector( _tempC.sub( _vC$1 ), influence ); + + } + + } + + _vA$1.add( _morphA ); + _vB$1.add( _morphB ); + _vC$1.add( _morphC ); + + } + + if ( object.isSkinnedMesh ) { + + object.boneTransform( a, _vA$1 ); + object.boneTransform( b, _vB$1 ); + object.boneTransform( c, _vC$1 ); + + } + + const intersection = checkIntersection( 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.getUV( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() ); + + } + + if ( uv2 ) { + + _uvA$1.fromBufferAttribute( uv2, a ); + _uvB$1.fromBufferAttribute( uv2, b ); + _uvC$1.fromBufferAttribute( uv2, c ); + + intersection.uv2 = Triangle.getUV( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() ); + + } + + 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; + + } + + } + + 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 ) ) { + + 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; + +} + +// 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}"; + +/** + * parameters = { + * defines: { "label" : "value" }, + * uniforms: { "parameter1": { value: 1.0 }, "parameter2": { value2: 2 } }, + * + * fragmentShader: , + * vertexShader: , + * + * wireframe: , + * wireframeLinewidth: , + * + * lights: + * } + */ + +class ShaderMaterial extends Material { + + constructor( parameters ) { + + super(); + + this.type = 'ShaderMaterial'; + + this.defines = {}; + this.uniforms = {}; + + 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.extensions = { + derivatives: false, // set to use derivatives + fragDepth: false, // set to use fragment depth values + drawBuffers: false, // set to use draw buffers + shaderTextureLOD: false // set to use shader texture LOD + }; + + // 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 ], + 'uv2': [ 0, 0 ] + }; + + this.index0AttributeName = undefined; + this.uniformsNeedUpdate = false; + + this.glslVersion = null; + + if ( parameters !== undefined ) { + + if ( parameters.attributes !== undefined ) { + + console.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' ); + + } + + this.setValues( parameters ); + + } + + } + + copy( source ) { + + super.copy( source ); + + this.fragmentShader = source.fragmentShader; + this.vertexShader = source.vertexShader; + + this.uniforms = cloneUniforms( source.uniforms ); + + this.defines = Object.assign( {}, source.defines ); + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + 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; + + 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; + + } + +} + +ShaderMaterial.prototype.isShaderMaterial = true; + +class Camera extends Object3D { + + constructor() { + + super(); + + this.type = 'Camera'; + + this.matrixWorldInverse = new Matrix4(); + + this.projectionMatrix = new Matrix4(); + this.projectionMatrixInverse = new Matrix4(); + + } + + copy( source, recursive ) { + + super.copy( source, recursive ); + + this.matrixWorldInverse.copy( source.matrixWorldInverse ); + + this.projectionMatrix.copy( source.projectionMatrix ); + this.projectionMatrixInverse.copy( source.projectionMatrixInverse ); + + return this; + + } + + getWorldDirection( target ) { + + this.updateWorldMatrix( true, false ); + + const e = this.matrixWorld.elements; + + return target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize(); + + } + + 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 ); + + } + +} + +Camera.prototype.isCamera = true; + +class PerspectiveCamera extends Camera { + + constructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) { + + super(); + + 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 ); + + } + + /** + * 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.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; + + } + +} + +PerspectiveCamera.prototype.isPerspectiveCamera = true; + +const fov = 90, aspect = 1; + +class CubeCamera extends Object3D { + + constructor( near, far, renderTarget ) { + + super(); + + this.type = 'CubeCamera'; + + if ( renderTarget.isWebGLCubeRenderTarget !== true ) { + + console.error( 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.' ); + return; + + } + + this.renderTarget = renderTarget; + + const cameraPX = new PerspectiveCamera( fov, aspect, near, far ); + cameraPX.layers = this.layers; + cameraPX.up.set( 0, - 1, 0 ); + cameraPX.lookAt( new Vector3( 1, 0, 0 ) ); + this.add( cameraPX ); + + const cameraNX = new PerspectiveCamera( fov, aspect, near, far ); + cameraNX.layers = this.layers; + cameraNX.up.set( 0, - 1, 0 ); + cameraNX.lookAt( new Vector3( - 1, 0, 0 ) ); + this.add( cameraNX ); + + const cameraPY = new PerspectiveCamera( fov, aspect, near, far ); + cameraPY.layers = this.layers; + cameraPY.up.set( 0, 0, 1 ); + cameraPY.lookAt( new Vector3( 0, 1, 0 ) ); + this.add( cameraPY ); + + const cameraNY = new PerspectiveCamera( fov, aspect, near, far ); + cameraNY.layers = this.layers; + cameraNY.up.set( 0, 0, - 1 ); + cameraNY.lookAt( new Vector3( 0, - 1, 0 ) ); + this.add( cameraNY ); + + const cameraPZ = new PerspectiveCamera( fov, aspect, near, far ); + cameraPZ.layers = this.layers; + cameraPZ.up.set( 0, - 1, 0 ); + cameraPZ.lookAt( new Vector3( 0, 0, 1 ) ); + this.add( cameraPZ ); + + const cameraNZ = new PerspectiveCamera( fov, aspect, near, far ); + cameraNZ.layers = this.layers; + cameraNZ.up.set( 0, - 1, 0 ); + cameraNZ.lookAt( new Vector3( 0, 0, - 1 ) ); + this.add( cameraNZ ); + + } + + update( renderer, scene ) { + + if ( this.parent === null ) this.updateMatrixWorld(); + + const renderTarget = this.renderTarget; + + const [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children; + + const currentXrEnabled = renderer.xr.enabled; + const currentRenderTarget = renderer.getRenderTarget(); + + renderer.xr.enabled = false; + + const generateMipmaps = renderTarget.texture.generateMipmaps; + + renderTarget.texture.generateMipmaps = false; + + renderer.setRenderTarget( renderTarget, 0 ); + renderer.render( scene, cameraPX ); + + renderer.setRenderTarget( renderTarget, 1 ); + renderer.render( scene, cameraNX ); + + renderer.setRenderTarget( renderTarget, 2 ); + renderer.render( scene, cameraPY ); + + renderer.setRenderTarget( renderTarget, 3 ); + renderer.render( scene, cameraNY ); + + renderer.setRenderTarget( renderTarget, 4 ); + renderer.render( scene, cameraPZ ); + + renderTarget.texture.generateMipmaps = generateMipmaps; + + renderer.setRenderTarget( renderTarget, 5 ); + renderer.render( scene, cameraNZ ); + + renderer.setRenderTarget( currentRenderTarget ); + + renderer.xr.enabled = currentXrEnabled; + + } + +} + +class CubeTexture extends Texture { + + constructor( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) { + + images = images !== undefined ? images : []; + mapping = mapping !== undefined ? mapping : CubeReflectionMapping; + format = format !== undefined ? format : RGBFormat; + + super( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.flipY = false; + + } + + get images() { + + return this.image; + + } + + set images( value ) { + + this.image = value; + + } + +} + +CubeTexture.prototype.isCubeTexture = true; + +class WebGLCubeRenderTarget extends WebGLRenderTarget { + + constructor( size, options, dummy ) { + + if ( Number.isInteger( options ) ) { + + console.warn( 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )' ); + + options = dummy; + + } + + super( size, size, options ); + + options = options || {}; + + // 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 = new CubeTexture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding ); + this.texture.isRenderTargetTexture = true; + + this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false; + this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter; + + this.texture._needsFlipEnvMap = false; + + } + + fromEquirectangularTexture( renderer, texture ) { + + this.texture.type = texture.type; + this.texture.format = RGBAFormat; // see #18859 + this.texture.encoding = texture.encoding; + + 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 ); + + } + +} + +WebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true; + +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 ) { + + // 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( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( 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( direction ).multiplyScalar( t ).add( line.start ); + + } + + 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 ); + + } + +} + +Plane.prototype.isPlane = true; + +const _sphere$2 = /*@__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 ) { + + 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(); + planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize(); + + return this; + + } + + intersectsObject( object ) { + + const geometry = object.geometry; + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + _sphere$2.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld ); + + return this.intersectsSphere( _sphere$2 ); + + } + + intersectsSprite( sprite ) { + + _sphere$2.center.set( 0, 0, 0 ); + _sphere$2.radius = 0.7071067811865476; + _sphere$2.applyMatrix4( sprite.matrixWorld ); + + return this.intersectsSphere( _sphere$2 ); + + } + + 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, capabilities ) { + + const isWebGL2 = capabilities.isWebGL2; + + const buffers = new WeakMap(); + + function createBuffer( attribute, bufferType ) { + + const array = attribute.array; + const usage = attribute.usage; + + const buffer = gl.createBuffer(); + + gl.bindBuffer( bufferType, buffer ); + gl.bufferData( bufferType, array, usage ); + + attribute.onUploadCallback(); + + let type = 5126; + + if ( array instanceof Float32Array ) { + + type = 5126; + + } else if ( array instanceof Float64Array ) { + + console.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' ); + + } else if ( array instanceof Uint16Array ) { + + if ( attribute.isFloat16BufferAttribute ) { + + if ( isWebGL2 ) { + + type = 5131; + + } else { + + console.warn( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' ); + + } + + } else { + + type = 5123; + + } + + } else if ( array instanceof Int16Array ) { + + type = 5122; + + } else if ( array instanceof Uint32Array ) { + + type = 5125; + + } else if ( array instanceof Int32Array ) { + + type = 5124; + + } else if ( array instanceof Int8Array ) { + + type = 5120; + + } else if ( array instanceof Uint8Array ) { + + type = 5121; + + } else if ( array instanceof Uint8ClampedArray ) { + + type = 5121; + + } + + return { + buffer: buffer, + type: type, + bytesPerElement: array.BYTES_PER_ELEMENT, + version: attribute.version + }; + + } + + function updateBuffer( buffer, attribute, bufferType ) { + + const array = attribute.array; + const updateRange = attribute.updateRange; + + gl.bindBuffer( bufferType, buffer ); + + if ( updateRange.count === - 1 ) { + + // Not using update ranges + + gl.bufferSubData( bufferType, 0, array ); + + } else { + + if ( isWebGL2 ) { + + gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, + array, updateRange.offset, updateRange.count ); + + } else { + + gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, + array.subarray( updateRange.offset, updateRange.offset + updateRange.count ) ); + + } + + updateRange.count = - 1; // reset range + + } + + } + + // + + 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 ) { + + 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 ) ); + + } + + static fromJSON( data ) { + + return new PlaneGeometry( data.width, data.height, data.widthSegments, data.heightSegments ); + + } + +} + +var alphamap_fragment = "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif"; + +var alphamap_pars_fragment = "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif"; + +var alphatest_fragment = "#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif"; + +var aomap_fragment = "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif"; + +var aomap_pars_fragment = "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif"; + +var begin_vertex = "vec3 transformed = vec3( position );"; + +var beginnormal_vertex = "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif"; + +var bsdfs = "vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\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\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in vec3 f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn ( f90 - f0 ) * fresnel + f0;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_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}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in vec3 f90, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * 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}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat 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_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, vec3( 1.0 ), dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\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( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + 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 = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\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#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif"; + +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; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\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 max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\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};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\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}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\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 linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.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}"; + +var cube_uv_reflection_fragment = "#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.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\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\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\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + 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 ), m0, cubeUV_maxMipLevel );\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_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif"; + +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, vUv ).x * displacementScale + displacementBias );\n#endif"; + +var emissivemap_fragment = "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif"; + +var emissivemap_pars_fragment = "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif"; + +var encodings_fragment = "gl_FragColor = linearToOutputTexel( gl_FragColor );"; + +var encodings_pars_fragment = "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( 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 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\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, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\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 int maxMipLevel;\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 )\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 )\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\tfogDepth = - mvPosition.z;\n#endif"; + +var fog_pars_vertex = "#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif"; + +var fog_fragment = "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\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 fogDepth;\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 texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}"; + +var lightmap_fragment = "#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif"; + +var lightmap_pars_fragment = "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif"; + +var lights_lambert_vertex = "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif"; + +var lights_pars_begin = "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\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 GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\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 getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.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 getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.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 getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.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 GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif"; + +var envmap_physical_pars_fragment = "#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif"; + +var lights_toon_fragment = "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;"; + +var lights_toon_pars_fragment = "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)"; + +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;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\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 GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)"; + +var lights_physical_fragment = "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\t#ifdef SPECULAR\n\t\tvec3 specularIntensityFactor = vec3( specularIntensity );\n\t\tvec3 specularTintFactor = specularTint;\n\t\t#ifdef USE_SPECULARINTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\n\t\t#endif\n\t\t#ifdef USE_SPECULARTINTMAP\n\t\t\tspecularTintFactor *= specularTintMapTexelToLinear( texture2D( specularTintMap, vUv ) ).rgb;\n\t\t#endif\n\t\tmaterial.specularColorF90 = mix( specularIntensityFactor, vec3( 1.0 ), metalnessFactor );\n\t#else\n\t\tvec3 specularIntensityFactor = vec3( 1.0 );\n\t\tvec3 specularTintFactor = vec3( 1.0 );\n\t\tmaterial.specularColorF90 = vec3( 1.0 );\n\t#endif\n\tmaterial.specularColor = mix( min( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ) * specularTintFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularColorF90 = vec3( 1.0 );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).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_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif"; + +var lights_physical_pars_fragment = "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n\tvec3 specularColorF90;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\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.specularRoughness;\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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), vec3( 1.0 ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularColorF90, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * 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 = "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\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\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( 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, geometry, 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\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\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, 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\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( 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, geometry, 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, geometry, 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\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\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 ], geometry );\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, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif"; + +var lights_fragment_end = "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif"; + +var logdepthbuf_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif"; + +var logdepthbuf_pars_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif"; + +var logdepthbuf_pars_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif"; + +var logdepthbuf_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif"; + +var map_fragment = "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\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\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif"; + +var map_particle_pars_fragment = "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\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, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif"; + +var metalnessmap_pars_fragment = "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif"; + +var morphnormal_vertex = "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif"; + +var morphtarget_pars_vertex = "#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif"; + +var morphtarget_vertex = "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif"; + +var normal_fragment_begin = "float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;"; + +var normal_fragment_maps = "#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).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( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif"; + +var normalmap_pars_fragment = "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.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 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif"; + +var clearcoat_normal_fragment_begin = "#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif"; + +var clearcoat_normal_fragment_maps = "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif"; + +var clearcoat_pars_fragment = "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif"; + +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}\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 linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( 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 invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - 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_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, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif"; + +var roughnessmap_pars_fragment = "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif"; + +var shadowmap_pars_fragment = "#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\tvarying vec4 vSpotShadowCoord[ 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\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif"; + +var shadowmap_pars_vertex = "#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\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ 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 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 = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\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, vSpotShadowCoord[ 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\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\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, vUv );\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 toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }"; + +var transmission_fragment = "#ifdef USE_TRANSMISSION\n\tfloat transmissionFactor = transmission;\n\tfloat thicknessFactor = thickness;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition.xyz / vWorldPosition.w;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tfloat ior = ( 1.0 + 0.4 * reflectivity ) / ( 1.0 - 0.4 * reflectivity );\n\tvec3 transmission = transmissionFactor * getIBLVolumeRefraction(\n\t\tn, v, roughnessFactor, material.diffuseColor, material.specularColor,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\n\t\tattenuationTint, attenuationDistance );\n\ttotalDiffuse = mix( totalDiffuse, transmission, transmissionFactor );\n#endif"; + +var transmission_pars_fragment = "#ifdef USE_TRANSMISSION\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 vec4 vWorldPosition;\n\tvec3 getVolumeTransmissionRay(vec3 n, vec3 v, float thickness, float ior, 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(float roughness, float ior) {\n\t\treturn roughness * clamp(ior * 2.0 - 2.0, 0.0, 1.0);\n\t}\n\tvec3 getTransmissionSample(vec2 fragCoord, float roughness, float ior) {\n\t\tfloat framebufferLod = log2(transmissionSamplerSize.x) * applyIorToRoughness(roughness, ior);\n\t\treturn texture2DLodEXT(transmissionSamplerMap, fragCoord.xy, framebufferLod).rgb;\n\t}\n\tvec3 applyVolumeAttenuation(vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance) {\n\t\tif (attenuationDistance == 0.0) {\n\t\t\treturn radiance;\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log(attenuationColor) / attenuationDistance;\n\t\t\tvec3 transmittance = exp(-attenuationCoefficient * transmissionDistance);\t\t\treturn transmittance * radiance;\n\t\t}\n\t}\n\tvec3 getIBLVolumeRefraction(vec3 n, vec3 v, float perceptualRoughness, vec3 baseColor, vec3 specularColor,\n\t\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness,\n\t\tvec3 attenuationColor, float attenuationDistance) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay(n, v, thickness, ior, modelMatrix);\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4(refractedRayExit, 1.0);\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec3 transmittedLight = getTransmissionSample(refractionCoords, perceptualRoughness, ior);\n\t\tvec3 attenuatedColor = applyVolumeAttenuation(transmittedLight, length(transmissionRay), attenuationColor, attenuationDistance);\n\t\treturn (1.0 - specularColor) * attenuatedColor * baseColor;\n\t}\n#endif"; + +var uv_pars_fragment = "#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif"; + +var uv_pars_vertex = "#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif"; + +var uv_vertex = "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif"; + +var uv2_pars_fragment = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif"; + +var uv2_pars_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif"; + +var uv2_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif"; + +var worldpos_vertex = "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif"; + +var background_frag = "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}"; + +var background_vert = "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}"; + +var cube_frag = "#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}"; + +var cube_vert = "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}"; + +var depth_frag = "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\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\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}"; + +var depth_vert = "#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#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}"; + +var distanceRGBA_frag = "#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 \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\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}"; + +var distanceRGBA_vert = "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\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}"; + +var equirect_frag = "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}"; + +var equirect_vert = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}"; + +var linedashed_frag = "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 \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}"; + +var linedashed_vert = "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\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}"; + +var meshbasic_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + +var meshbasic_vert = "#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#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 \n}"; + +var meshlambert_frag = "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + +var meshlambert_vert = "#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#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#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\t#include \n\t#include \n\t#include \n\t#include \n}"; + +var meshmatcap_frag = "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + +var meshmatcap_vert = "#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\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#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\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\tvViewPosition = - mvPosition.xyz;\n}"; + +var meshtoon_frag = "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \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\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + +var meshtoon_vert = "#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#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#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}"; + +var meshphong_frag = "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \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\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + +var meshphong_vert = "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#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#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}"; + +var meshphysical_frag = "#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationTint;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularTint;\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\t#ifdef USE_SPECULARTINTMAP\n\t\tuniform sampler2D specularTintMap;\n\t#endif\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#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\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#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\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \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\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; + +var meshphysical_vert = "#define STANDARD\nvarying vec3 vViewPosition;\n#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\n#ifdef USE_TRANSMISSION\n\tvarying vec4 vWorldPosition;\n#endif\n#include \n#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#include \n\t#include \n\t#include \n#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\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition;\n#endif\n}"; + +var normal_frag = "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#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\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\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}"; + +var normal_vert = "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#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\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#include \n#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\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}"; + +var points_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}"; + +var points_vert = "uniform float size;\nuniform float scale;\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\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}"; + +var shadow_frag = "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}"; + +var shadow_vert = "#include \n#include \n#include \nvoid main() {\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}"; + +var sprite_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}"; + +var sprite_vert = "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"; + +const ShaderChunk = { + alphamap_fragment: alphamap_fragment, + alphamap_pars_fragment: alphamap_pars_fragment, + alphatest_fragment: alphatest_fragment, + aomap_fragment: aomap_fragment, + aomap_pars_fragment: aomap_pars_fragment, + begin_vertex: begin_vertex, + beginnormal_vertex: beginnormal_vertex, + bsdfs: bsdfs, + bumpmap_pars_fragment: bumpmap_pars_fragment, + clipping_planes_fragment: clipping_planes_fragment, + clipping_planes_pars_fragment: clipping_planes_pars_fragment, + clipping_planes_pars_vertex: clipping_planes_pars_vertex, + clipping_planes_vertex: clipping_planes_vertex, + color_fragment: color_fragment, + color_pars_fragment: color_pars_fragment, + color_pars_vertex: color_pars_vertex, + color_vertex: color_vertex, + common: common, + cube_uv_reflection_fragment: cube_uv_reflection_fragment, + defaultnormal_vertex: defaultnormal_vertex, + displacementmap_pars_vertex: displacementmap_pars_vertex, + displacementmap_vertex: displacementmap_vertex, + emissivemap_fragment: emissivemap_fragment, + emissivemap_pars_fragment: emissivemap_pars_fragment, + encodings_fragment: encodings_fragment, + encodings_pars_fragment: encodings_pars_fragment, + envmap_fragment: envmap_fragment, + envmap_common_pars_fragment: envmap_common_pars_fragment, + envmap_pars_fragment: envmap_pars_fragment, + envmap_pars_vertex: envmap_pars_vertex, + envmap_physical_pars_fragment: envmap_physical_pars_fragment, + envmap_vertex: envmap_vertex, + fog_vertex: fog_vertex, + fog_pars_vertex: fog_pars_vertex, + fog_fragment: fog_fragment, + fog_pars_fragment: fog_pars_fragment, + gradientmap_pars_fragment: gradientmap_pars_fragment, + lightmap_fragment: lightmap_fragment, + lightmap_pars_fragment: lightmap_pars_fragment, + lights_lambert_vertex: lights_lambert_vertex, + lights_pars_begin: lights_pars_begin, + lights_toon_fragment: lights_toon_fragment, + lights_toon_pars_fragment: lights_toon_pars_fragment, + lights_phong_fragment: lights_phong_fragment, + lights_phong_pars_fragment: lights_phong_pars_fragment, + lights_physical_fragment: lights_physical_fragment, + lights_physical_pars_fragment: lights_physical_pars_fragment, + lights_fragment_begin: lights_fragment_begin, + lights_fragment_maps: lights_fragment_maps, + lights_fragment_end: lights_fragment_end, + logdepthbuf_fragment: logdepthbuf_fragment, + logdepthbuf_pars_fragment: logdepthbuf_pars_fragment, + logdepthbuf_pars_vertex: logdepthbuf_pars_vertex, + logdepthbuf_vertex: logdepthbuf_vertex, + map_fragment: map_fragment, + map_pars_fragment: map_pars_fragment, + map_particle_fragment: map_particle_fragment, + map_particle_pars_fragment: map_particle_pars_fragment, + metalnessmap_fragment: metalnessmap_fragment, + metalnessmap_pars_fragment: metalnessmap_pars_fragment, + morphnormal_vertex: morphnormal_vertex, + morphtarget_pars_vertex: morphtarget_pars_vertex, + morphtarget_vertex: morphtarget_vertex, + normal_fragment_begin: normal_fragment_begin, + normal_fragment_maps: normal_fragment_maps, + normalmap_pars_fragment: normalmap_pars_fragment, + clearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin, + clearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps, + clearcoat_pars_fragment: clearcoat_pars_fragment, + packing: packing, + premultiplied_alpha_fragment: premultiplied_alpha_fragment, + project_vertex: project_vertex, + dithering_fragment: dithering_fragment, + dithering_pars_fragment: dithering_pars_fragment, + roughnessmap_fragment: roughnessmap_fragment, + roughnessmap_pars_fragment: roughnessmap_pars_fragment, + shadowmap_pars_fragment: shadowmap_pars_fragment, + shadowmap_pars_vertex: shadowmap_pars_vertex, + shadowmap_vertex: shadowmap_vertex, + shadowmask_pars_fragment: shadowmask_pars_fragment, + skinbase_vertex: skinbase_vertex, + skinning_pars_vertex: skinning_pars_vertex, + skinning_vertex: skinning_vertex, + skinnormal_vertex: skinnormal_vertex, + specularmap_fragment: specularmap_fragment, + specularmap_pars_fragment: specularmap_pars_fragment, + tonemapping_fragment: tonemapping_fragment, + tonemapping_pars_fragment: tonemapping_pars_fragment, + transmission_fragment: transmission_fragment, + transmission_pars_fragment: transmission_pars_fragment, + uv_pars_fragment: uv_pars_fragment, + uv_pars_vertex: uv_pars_vertex, + uv_vertex: uv_vertex, + uv2_pars_fragment: uv2_pars_fragment, + uv2_pars_vertex: uv2_pars_vertex, + uv2_vertex: uv2_vertex, + worldpos_vertex: worldpos_vertex, + + background_frag: background_frag, + background_vert: background_vert, + cube_frag: cube_frag, + cube_vert: cube_vert, + depth_frag: depth_frag, + depth_vert: depth_vert, + distanceRGBA_frag: distanceRGBA_frag, + distanceRGBA_vert: distanceRGBA_vert, + equirect_frag: equirect_frag, + equirect_vert: equirect_vert, + linedashed_frag: linedashed_frag, + linedashed_vert: linedashed_vert, + meshbasic_frag: meshbasic_frag, + meshbasic_vert: meshbasic_vert, + meshlambert_frag: meshlambert_frag, + meshlambert_vert: meshlambert_vert, + meshmatcap_frag: meshmatcap_frag, + meshmatcap_vert: meshmatcap_vert, + meshtoon_frag: meshtoon_frag, + meshtoon_vert: meshtoon_vert, + meshphong_frag: meshphong_frag, + meshphong_vert: meshphong_vert, + meshphysical_frag: meshphysical_frag, + meshphysical_vert: meshphysical_vert, + normal_frag: normal_frag, + normal_vert: normal_vert, + points_frag: points_frag, + points_vert: points_vert, + shadow_frag: shadow_frag, + shadow_vert: shadow_vert, + sprite_frag: sprite_frag, + sprite_vert: sprite_vert +}; + +/** + * Uniforms library for shared webgl shaders + */ + +const UniformsLib = { + + common: { + + diffuse: { value: new Color( 0xffffff ) }, + opacity: { value: 1.0 }, + + map: { value: null }, + uvTransform: { value: new Matrix3() }, + uv2Transform: { value: new Matrix3() }, + + alphaMap: { value: null }, + + }, + + specularmap: { + + specularMap: { value: null }, + + }, + + envmap: { + + envMap: { value: null }, + flipEnvMap: { value: - 1 }, + reflectivity: { value: 1.0 }, + refractionRatio: { value: 0.98 }, + maxMipLevel: { value: 0 } + + }, + + aomap: { + + aoMap: { value: null }, + aoMapIntensity: { value: 1 } + + }, + + lightmap: { + + lightMap: { value: null }, + lightMapIntensity: { value: 1 } + + }, + + emissivemap: { + + emissiveMap: { value: null } + + }, + + bumpmap: { + + bumpMap: { value: null }, + bumpScale: { value: 1 } + + }, + + normalmap: { + + normalMap: { value: null }, + normalScale: { value: new Vector2( 1, 1 ) } + + }, + + displacementmap: { + + displacementMap: { value: null }, + displacementScale: { value: 1 }, + displacementBias: { value: 0 } + + }, + + roughnessmap: { + + roughnessMap: { value: null } + + }, + + metalnessmap: { + + metalnessMap: { value: null } + + }, + + gradientmap: { + + gradientMap: { value: null } + + }, + + fog: { + + fogDensity: { value: 0.00025 }, + fogNear: { value: 1 }, + fogFar: { value: 2000 }, + fogColor: { value: new Color( 0xffffff ) } + + }, + + lights: { + + ambientLightColor: { value: [] }, + + lightProbe: { value: [] }, + + directionalLights: { value: [], properties: { + direction: {}, + color: {} + } }, + + directionalLightShadows: { value: [], properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } }, + + directionalShadowMap: { value: [] }, + directionalShadowMatrix: { value: [] }, + + spotLights: { value: [], properties: { + color: {}, + position: {}, + direction: {}, + distance: {}, + coneCos: {}, + penumbraCos: {}, + decay: {} + } }, + + spotLightShadows: { value: [], properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } }, + + spotShadowMap: { value: [] }, + spotShadowMatrix: { value: [] }, + + pointLights: { value: [], properties: { + color: {}, + position: {}, + decay: {}, + distance: {} + } }, + + pointLightShadows: { value: [], properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + shadowCameraNear: {}, + shadowCameraFar: {} + } }, + + pointShadowMap: { value: [] }, + pointShadowMatrix: { value: [] }, + + hemisphereLights: { value: [], properties: { + direction: {}, + skyColor: {}, + groundColor: {} + } }, + + // TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src + rectAreaLights: { value: [], properties: { + color: {}, + position: {}, + width: {}, + height: {} + } }, + + ltc_1: { value: null }, + ltc_2: { value: null } + + }, + + points: { + + diffuse: { value: new Color( 0xffffff ) }, + opacity: { value: 1.0 }, + size: { value: 1.0 }, + scale: { value: 1.0 }, + map: { value: null }, + alphaMap: { value: null }, + uvTransform: { value: new Matrix3() } + + }, + + sprite: { + + diffuse: { value: new Color( 0xffffff ) }, + opacity: { value: 1.0 }, + center: { value: new Vector2( 0.5, 0.5 ) }, + rotation: { value: 0.0 }, + map: { value: null }, + alphaMap: { value: null }, + uvTransform: { value: new Matrix3() } + + } + +}; + +const ShaderLib = { + + basic: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.fog + ] ), + + vertexShader: ShaderChunk.meshbasic_vert, + fragmentShader: ShaderChunk.meshbasic_frag + + }, + + lambert: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) } + } + ] ), + + vertexShader: ShaderChunk.meshlambert_vert, + fragmentShader: ShaderChunk.meshlambert_frag + + }, + + phong: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) }, + specular: { value: new Color( 0x111111 ) }, + shininess: { value: 30 } + } + ] ), + + vertexShader: ShaderChunk.meshphong_vert, + fragmentShader: ShaderChunk.meshphong_frag + + }, + + standard: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.roughnessmap, + UniformsLib.metalnessmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) }, + roughness: { value: 1.0 }, + metalness: { value: 0.0 }, + envMapIntensity: { value: 1 } // temporary + } + ] ), + + vertexShader: ShaderChunk.meshphysical_vert, + fragmentShader: ShaderChunk.meshphysical_frag + + }, + + toon: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.gradientmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) } + } + ] ), + + vertexShader: ShaderChunk.meshtoon_vert, + fragmentShader: ShaderChunk.meshtoon_frag + + }, + + matcap: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.fog, + { + matcap: { value: null } + } + ] ), + + vertexShader: ShaderChunk.meshmatcap_vert, + fragmentShader: ShaderChunk.meshmatcap_frag + + }, + + points: { + + uniforms: mergeUniforms( [ + UniformsLib.points, + UniformsLib.fog + ] ), + + vertexShader: ShaderChunk.points_vert, + fragmentShader: ShaderChunk.points_frag + + }, + + dashed: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.fog, + { + scale: { value: 1 }, + dashSize: { value: 1 }, + totalSize: { value: 2 } + } + ] ), + + vertexShader: ShaderChunk.linedashed_vert, + fragmentShader: ShaderChunk.linedashed_frag + + }, + + depth: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.displacementmap + ] ), + + vertexShader: ShaderChunk.depth_vert, + fragmentShader: ShaderChunk.depth_frag + + }, + + normal: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + { + opacity: { value: 1.0 } + } + ] ), + + vertexShader: ShaderChunk.normal_vert, + fragmentShader: ShaderChunk.normal_frag + + }, + + sprite: { + + uniforms: mergeUniforms( [ + UniformsLib.sprite, + UniformsLib.fog + ] ), + + vertexShader: ShaderChunk.sprite_vert, + fragmentShader: ShaderChunk.sprite_frag + + }, + + background: { + + uniforms: { + uvTransform: { value: new Matrix3() }, + t2D: { value: null }, + }, + + vertexShader: ShaderChunk.background_vert, + fragmentShader: ShaderChunk.background_frag + + }, + /* ------------------------------------------------------------------------- + // Cube map shader + ------------------------------------------------------------------------- */ + + cube: { + + uniforms: mergeUniforms( [ + UniformsLib.envmap, + { + opacity: { value: 1.0 } + } + ] ), + + vertexShader: ShaderChunk.cube_vert, + fragmentShader: ShaderChunk.cube_frag + + }, + + equirect: { + + uniforms: { + tEquirect: { value: null }, + }, + + vertexShader: ShaderChunk.equirect_vert, + fragmentShader: ShaderChunk.equirect_frag + + }, + + distanceRGBA: { + + uniforms: mergeUniforms( [ + UniformsLib.common, + UniformsLib.displacementmap, + { + referencePosition: { value: new Vector3() }, + nearDistance: { value: 1 }, + farDistance: { value: 1000 } + } + ] ), + + vertexShader: ShaderChunk.distanceRGBA_vert, + fragmentShader: ShaderChunk.distanceRGBA_frag + + }, + + shadow: { + + uniforms: mergeUniforms( [ + UniformsLib.lights, + UniformsLib.fog, + { + color: { value: new Color( 0x00000 ) }, + opacity: { value: 1.0 } + }, + ] ), + + vertexShader: ShaderChunk.shadow_vert, + fragmentShader: ShaderChunk.shadow_frag + + } + +}; + +ShaderLib.physical = { + + uniforms: mergeUniforms( [ + ShaderLib.standard.uniforms, + { + clearcoat: { value: 0 }, + clearcoatMap: { value: null }, + clearcoatRoughness: { value: 0 }, + clearcoatRoughnessMap: { value: null }, + clearcoatNormalScale: { value: new Vector2( 1, 1 ) }, + clearcoatNormalMap: { value: null }, + sheen: { value: new Color( 0x000000 ) }, + transmission: { value: 0 }, + transmissionMap: { value: null }, + transmissionSamplerSize: { value: new Vector2() }, + transmissionSamplerMap: { value: null }, + thickness: { value: 0 }, + thicknessMap: { value: null }, + attenuationDistance: { value: 0 }, + attenuationTint: { value: new Color( 0x000000 ) }, + specularIntensity: { value: 0 }, + specularIntensityMap: { value: null }, + specularTint: { value: new Color( 1, 1, 1 ) }, + specularTintMap: { value: null }, + } + ] ), + + vertexShader: ShaderChunk.meshphysical_vert, + fragmentShader: ShaderChunk.meshphysical_frag + +}; + +function WebGLBackground( renderer, cubemaps, state, objects, premultipliedAlpha ) { + + const clearColor = new Color( 0x000000 ); + let clearAlpha = 0; + + let planeMesh; + let boxMesh; + + let currentBackground = null; + let currentBackgroundVersion = 0; + let currentTonemapping = null; + + function render( renderList, scene ) { + + let forceClear = false; + let background = scene.isScene === true ? scene.background : null; + + if ( background && background.isTexture ) { + + background = cubemaps.get( background ); + + } + + // Ignore background in AR + // TODO: Reconsider this. + + const xr = renderer.xr; + const session = xr.getSession && xr.getSession(); + + if ( session && session.environmentBlendMode === 'additive' ) { + + background = null; + + } + + if ( background === null ) { + + setClear( clearColor, clearAlpha ); + + } else if ( background && background.isColor ) { + + setClear( background, 1 ); + forceClear = true; + + } + + if ( renderer.autoClear || forceClear ) { + + renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil ); + + } + + if ( background && ( background.isCubeTexture || background.mapping === CubeUVReflectionMapping ) ) { + + if ( boxMesh === undefined ) { + + boxMesh = new Mesh( + new BoxGeometry( 1, 1, 1 ), + new ShaderMaterial( { + name: 'BackgroundCubeMaterial', + uniforms: cloneUniforms( ShaderLib.cube.uniforms ), + vertexShader: ShaderLib.cube.vertexShader, + fragmentShader: ShaderLib.cube.fragmentShader, + side: BackSide, + depthTest: false, + depthWrite: false, + fog: false + } ) + ); + + boxMesh.geometry.deleteAttribute( 'normal' ); + boxMesh.geometry.deleteAttribute( 'uv' ); + + boxMesh.onBeforeRender = function ( renderer, scene, camera ) { + + this.matrixWorld.copyPosition( camera.matrixWorld ); + + }; + + // enable code injection for non-built-in material + Object.defineProperty( boxMesh.material, 'envMap', { + + get: function () { + + return this.uniforms.envMap.value; + + } + + } ); + + objects.update( boxMesh ); + + } + + boxMesh.material.uniforms.envMap.value = background; + boxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1; + + if ( currentBackground !== background || + currentBackgroundVersion !== background.version || + currentTonemapping !== renderer.toneMapping ) { + + boxMesh.material.needsUpdate = true; + + currentBackground = background; + currentBackgroundVersion = background.version; + currentTonemapping = renderer.toneMapping; + + } + + // push to the pre-sorted opaque render list + renderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null ); + + } else if ( background && background.isTexture ) { + + if ( planeMesh === undefined ) { + + planeMesh = new Mesh( + new PlaneGeometry( 2, 2 ), + new ShaderMaterial( { + name: 'BackgroundMaterial', + uniforms: cloneUniforms( ShaderLib.background.uniforms ), + vertexShader: ShaderLib.background.vertexShader, + fragmentShader: ShaderLib.background.fragmentShader, + side: FrontSide, + depthTest: false, + depthWrite: false, + fog: false + } ) + ); + + planeMesh.geometry.deleteAttribute( 'normal' ); + + // enable code injection for non-built-in material + Object.defineProperty( planeMesh.material, 'map', { + + get: function () { + + return this.uniforms.t2D.value; + + } + + } ); + + objects.update( planeMesh ); + + } + + planeMesh.material.uniforms.t2D.value = background; + + if ( background.matrixAutoUpdate === true ) { + + background.updateMatrix(); + + } + + planeMesh.material.uniforms.uvTransform.value.copy( background.matrix ); + + if ( currentBackground !== background || + currentBackgroundVersion !== background.version || + currentTonemapping !== renderer.toneMapping ) { + + planeMesh.material.needsUpdate = true; + + currentBackground = background; + currentBackgroundVersion = background.version; + currentTonemapping = renderer.toneMapping; + + } + + + // push to the pre-sorted opaque render list + renderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null ); + + } + + } + + function setClear( color, alpha ) { + + state.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha ); + + } + + return { + + getClearColor: function () { + + return clearColor; + + }, + setClearColor: function ( color, alpha = 1 ) { + + clearColor.set( color ); + clearAlpha = alpha; + setClear( clearColor, clearAlpha ); + + }, + getClearAlpha: function () { + + return clearAlpha; + + }, + setClearAlpha: function ( alpha ) { + + clearAlpha = alpha; + setClear( clearColor, clearAlpha ); + + }, + render: render + + }; + +} + +function WebGLBindingStates( gl, extensions, attributes, capabilities ) { + + const maxVertexAttributes = gl.getParameter( 34921 ); + + const extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' ); + const vaoAvailable = capabilities.isWebGL2 || extension !== null; + + const bindingStates = {}; + + const defaultState = createBindingState( null ); + let currentState = defaultState; + + function setup( object, material, program, geometry, index ) { + + let updateBuffers = false; + + if ( vaoAvailable ) { + + const state = getBindingState( geometry, program, material ); + + if ( currentState !== state ) { + + currentState = state; + bindVertexArrayObject( currentState.object ); + + } + + updateBuffers = needsUpdate( geometry, index ); + + if ( updateBuffers ) saveCache( geometry, index ); + + } else { + + const wireframe = ( material.wireframe === true ); + + if ( currentState.geometry !== geometry.id || + currentState.program !== program.id || + currentState.wireframe !== wireframe ) { + + currentState.geometry = geometry.id; + currentState.program = program.id; + currentState.wireframe = wireframe; + + updateBuffers = true; + + } + + } + + if ( object.isInstancedMesh === true ) { + + updateBuffers = true; + + } + + if ( index !== null ) { + + attributes.update( index, 34963 ); + + } + + if ( updateBuffers ) { + + setupVertexAttributes( object, material, program, geometry ); + + if ( index !== null ) { + + gl.bindBuffer( 34963, attributes.get( index ).buffer ); + + } + + } + + } + + function createVertexArrayObject() { + + if ( capabilities.isWebGL2 ) return gl.createVertexArray(); + + return extension.createVertexArrayOES(); + + } + + function bindVertexArrayObject( vao ) { + + if ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao ); + + return extension.bindVertexArrayOES( vao ); + + } + + function deleteVertexArrayObject( vao ) { + + if ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao ); + + return extension.deleteVertexArrayOES( vao ); + + } + + function getBindingState( geometry, program, material ) { + + const wireframe = ( material.wireframe === true ); + + let programMap = bindingStates[ geometry.id ]; + + if ( programMap === undefined ) { + + programMap = {}; + bindingStates[ geometry.id ] = programMap; + + } + + let stateMap = programMap[ program.id ]; + + if ( stateMap === undefined ) { + + stateMap = {}; + programMap[ program.id ] = stateMap; + + } + + let state = stateMap[ wireframe ]; + + if ( state === undefined ) { + + state = createBindingState( createVertexArrayObject() ); + stateMap[ wireframe ] = state; + + } + + return state; + + } + + function createBindingState( vao ) { + + const newAttributes = []; + const enabledAttributes = []; + const attributeDivisors = []; + + for ( let i = 0; i < maxVertexAttributes; i ++ ) { + + newAttributes[ i ] = 0; + enabledAttributes[ i ] = 0; + attributeDivisors[ i ] = 0; + + } + + return { + + // for backward compatibility on non-VAO support browser + geometry: null, + program: null, + wireframe: false, + + newAttributes: newAttributes, + enabledAttributes: enabledAttributes, + attributeDivisors: attributeDivisors, + object: vao, + attributes: {}, + index: null + + }; + + } + + function needsUpdate( geometry, index ) { + + const cachedAttributes = currentState.attributes; + const geometryAttributes = geometry.attributes; + + let attributesNum = 0; + + for ( const key in geometryAttributes ) { + + const cachedAttribute = cachedAttributes[ key ]; + const geometryAttribute = geometryAttributes[ key ]; + + if ( cachedAttribute === undefined ) return true; + + if ( cachedAttribute.attribute !== geometryAttribute ) return true; + + if ( cachedAttribute.data !== geometryAttribute.data ) return true; + + attributesNum ++; + + } + + if ( currentState.attributesNum !== attributesNum ) return true; + + if ( currentState.index !== index ) return true; + + return false; + + } + + function saveCache( geometry, index ) { + + const cache = {}; + const attributes = geometry.attributes; + let attributesNum = 0; + + for ( const key in attributes ) { + + const attribute = attributes[ key ]; + + const data = {}; + data.attribute = attribute; + + if ( attribute.data ) { + + data.data = attribute.data; + + } + + cache[ key ] = data; + + attributesNum ++; + + } + + currentState.attributes = cache; + currentState.attributesNum = attributesNum; + + currentState.index = index; + + } + + function initAttributes() { + + const newAttributes = currentState.newAttributes; + + for ( let i = 0, il = newAttributes.length; i < il; i ++ ) { + + newAttributes[ i ] = 0; + + } + + } + + function enableAttribute( attribute ) { + + enableAttributeAndDivisor( attribute, 0 ); + + } + + function enableAttributeAndDivisor( attribute, meshPerAttribute ) { + + const newAttributes = currentState.newAttributes; + const enabledAttributes = currentState.enabledAttributes; + const attributeDivisors = currentState.attributeDivisors; + + newAttributes[ attribute ] = 1; + + if ( enabledAttributes[ attribute ] === 0 ) { + + gl.enableVertexAttribArray( attribute ); + enabledAttributes[ attribute ] = 1; + + } + + if ( attributeDivisors[ attribute ] !== meshPerAttribute ) { + + const extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' ); + + extension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute ); + attributeDivisors[ attribute ] = meshPerAttribute; + + } + + } + + function disableUnusedAttributes() { + + const newAttributes = currentState.newAttributes; + const enabledAttributes = currentState.enabledAttributes; + + for ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) { + + if ( enabledAttributes[ i ] !== newAttributes[ i ] ) { + + gl.disableVertexAttribArray( i ); + enabledAttributes[ i ] = 0; + + } + + } + + } + + function vertexAttribPointer( index, size, type, normalized, stride, offset ) { + + if ( capabilities.isWebGL2 === true && ( type === 5124 || type === 5125 ) ) { + + gl.vertexAttribIPointer( index, size, type, stride, offset ); + + } else { + + gl.vertexAttribPointer( index, size, type, normalized, stride, offset ); + + } + + } + + function setupVertexAttributes( object, material, program, geometry ) { + + if ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) { + + if ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return; + + } + + initAttributes(); + + const geometryAttributes = geometry.attributes; + + const programAttributes = program.getAttributes(); + + const materialDefaultAttributeValues = material.defaultAttributeValues; + + for ( const name in programAttributes ) { + + const programAttribute = programAttributes[ name ]; + + if ( programAttribute >= 0 ) { + + const geometryAttribute = geometryAttributes[ name ]; + + if ( geometryAttribute !== undefined ) { + + const normalized = geometryAttribute.normalized; + const size = geometryAttribute.itemSize; + + const attribute = attributes.get( geometryAttribute ); + + // TODO Attribute may not be available on context restore + + if ( attribute === undefined ) continue; + + const buffer = attribute.buffer; + const type = attribute.type; + const bytesPerElement = attribute.bytesPerElement; + + if ( geometryAttribute.isInterleavedBufferAttribute ) { + + const data = geometryAttribute.data; + const stride = data.stride; + const offset = geometryAttribute.offset; + + if ( data && data.isInstancedInterleavedBuffer ) { + + enableAttributeAndDivisor( programAttribute, data.meshPerAttribute ); + + if ( geometry._maxInstanceCount === undefined ) { + + geometry._maxInstanceCount = data.meshPerAttribute * data.count; + + } + + } else { + + enableAttribute( programAttribute ); + + } + + gl.bindBuffer( 34962, buffer ); + vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement ); + + } else { + + if ( geometryAttribute.isInstancedBufferAttribute ) { + + enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute ); + + if ( geometry._maxInstanceCount === undefined ) { + + geometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count; + + } + + } else { + + enableAttribute( programAttribute ); + + } + + gl.bindBuffer( 34962, buffer ); + vertexAttribPointer( programAttribute, size, type, normalized, 0, 0 ); + + } + + } else if ( name === 'instanceMatrix' ) { + + const attribute = attributes.get( object.instanceMatrix ); + + // TODO Attribute may not be available on context restore + + if ( attribute === undefined ) continue; + + const buffer = attribute.buffer; + const type = attribute.type; + + enableAttributeAndDivisor( programAttribute + 0, 1 ); + enableAttributeAndDivisor( programAttribute + 1, 1 ); + enableAttributeAndDivisor( programAttribute + 2, 1 ); + enableAttributeAndDivisor( programAttribute + 3, 1 ); + + gl.bindBuffer( 34962, buffer ); + + gl.vertexAttribPointer( programAttribute + 0, 4, type, false, 64, 0 ); + gl.vertexAttribPointer( programAttribute + 1, 4, type, false, 64, 16 ); + gl.vertexAttribPointer( programAttribute + 2, 4, type, false, 64, 32 ); + gl.vertexAttribPointer( programAttribute + 3, 4, type, false, 64, 48 ); + + } else if ( name === 'instanceColor' ) { + + const attribute = attributes.get( object.instanceColor ); + + // TODO Attribute may not be available on context restore + + if ( attribute === undefined ) continue; + + const buffer = attribute.buffer; + const type = attribute.type; + + enableAttributeAndDivisor( programAttribute, 1 ); + + gl.bindBuffer( 34962, buffer ); + + gl.vertexAttribPointer( programAttribute, 3, type, false, 12, 0 ); + + } else if ( materialDefaultAttributeValues !== undefined ) { + + const value = materialDefaultAttributeValues[ name ]; + + if ( value !== undefined ) { + + switch ( value.length ) { + + case 2: + gl.vertexAttrib2fv( programAttribute, value ); + break; + + case 3: + gl.vertexAttrib3fv( programAttribute, value ); + break; + + case 4: + gl.vertexAttrib4fv( programAttribute, value ); + break; + + default: + gl.vertexAttrib1fv( programAttribute, value ); + + } + + } + + } + + } + + } + + disableUnusedAttributes(); + + } + + function dispose() { + + reset(); + + for ( const geometryId in bindingStates ) { + + const programMap = bindingStates[ geometryId ]; + + for ( const programId in programMap ) { + + const stateMap = programMap[ programId ]; + + for ( const wireframe in stateMap ) { + + deleteVertexArrayObject( stateMap[ wireframe ].object ); + + delete stateMap[ wireframe ]; + + } + + delete programMap[ programId ]; + + } + + delete bindingStates[ geometryId ]; + + } + + } + + function releaseStatesOfGeometry( geometry ) { + + if ( bindingStates[ geometry.id ] === undefined ) return; + + const programMap = bindingStates[ geometry.id ]; + + for ( const programId in programMap ) { + + const stateMap = programMap[ programId ]; + + for ( const wireframe in stateMap ) { + + deleteVertexArrayObject( stateMap[ wireframe ].object ); + + delete stateMap[ wireframe ]; + + } + + delete programMap[ programId ]; + + } + + delete bindingStates[ geometry.id ]; + + } + + function releaseStatesOfProgram( program ) { + + for ( const geometryId in bindingStates ) { + + const programMap = bindingStates[ geometryId ]; + + if ( programMap[ program.id ] === undefined ) continue; + + const stateMap = programMap[ program.id ]; + + for ( const wireframe in stateMap ) { + + deleteVertexArrayObject( stateMap[ wireframe ].object ); + + delete stateMap[ wireframe ]; + + } + + delete programMap[ program.id ]; + + } + + } + + function reset() { + + resetDefaultState(); + + if ( currentState === defaultState ) return; + + currentState = defaultState; + bindVertexArrayObject( currentState.object ); + + } + + // for backward-compatilibity + + function resetDefaultState() { + + defaultState.geometry = null; + defaultState.program = null; + defaultState.wireframe = false; + + } + + return { + + setup: setup, + reset: reset, + resetDefaultState: resetDefaultState, + dispose: dispose, + releaseStatesOfGeometry: releaseStatesOfGeometry, + releaseStatesOfProgram: releaseStatesOfProgram, + + initAttributes: initAttributes, + enableAttribute: enableAttribute, + disableUnusedAttributes: disableUnusedAttributes + + }; + +} + +function WebGLBufferRenderer( gl, extensions, info, capabilities ) { + + const isWebGL2 = capabilities.isWebGL2; + + let mode; + + function setMode( value ) { + + mode = value; + + } + + function render( start, count ) { + + gl.drawArrays( mode, start, count ); + + info.update( count, mode, 1 ); + + } + + function renderInstances( start, count, primcount ) { + + if ( primcount === 0 ) return; + + let extension, methodName; + + if ( isWebGL2 ) { + + extension = gl; + methodName = 'drawArraysInstanced'; + + } else { + + extension = extensions.get( 'ANGLE_instanced_arrays' ); + methodName = 'drawArraysInstancedANGLE'; + + if ( extension === null ) { + + console.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); + return; + + } + + } + + extension[ methodName ]( mode, start, count, primcount ); + + info.update( count, mode, primcount ); + + } + + // + + this.setMode = setMode; + this.render = render; + this.renderInstances = renderInstances; + +} + +function WebGLCapabilities( gl, extensions, parameters ) { + + let maxAnisotropy; + + function getMaxAnisotropy() { + + if ( maxAnisotropy !== undefined ) return maxAnisotropy; + + if ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) { + + const extension = extensions.get( 'EXT_texture_filter_anisotropic' ); + + maxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT ); + + } else { + + maxAnisotropy = 0; + + } + + return maxAnisotropy; + + } + + function getMaxPrecision( precision ) { + + if ( precision === 'highp' ) { + + if ( gl.getShaderPrecisionFormat( 35633, 36338 ).precision > 0 && + gl.getShaderPrecisionFormat( 35632, 36338 ).precision > 0 ) { + + return 'highp'; + + } + + precision = 'mediump'; + + } + + if ( precision === 'mediump' ) { + + if ( gl.getShaderPrecisionFormat( 35633, 36337 ).precision > 0 && + gl.getShaderPrecisionFormat( 35632, 36337 ).precision > 0 ) { + + return 'mediump'; + + } + + } + + return 'lowp'; + + } + + /* eslint-disable no-undef */ + const isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ) || + ( typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext ); + /* eslint-enable no-undef */ + + let precision = parameters.precision !== undefined ? parameters.precision : 'highp'; + const maxPrecision = getMaxPrecision( precision ); + + if ( maxPrecision !== precision ) { + + console.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' ); + precision = maxPrecision; + + } + + const drawBuffers = isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ); + + const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true; + + const maxTextures = gl.getParameter( 34930 ); + const maxVertexTextures = gl.getParameter( 35660 ); + const maxTextureSize = gl.getParameter( 3379 ); + const maxCubemapSize = gl.getParameter( 34076 ); + + const maxAttributes = gl.getParameter( 34921 ); + const maxVertexUniforms = gl.getParameter( 36347 ); + const maxVaryings = gl.getParameter( 36348 ); + const maxFragmentUniforms = gl.getParameter( 36349 ); + + const vertexTextures = maxVertexTextures > 0; + const floatFragmentTextures = isWebGL2 || extensions.has( 'OES_texture_float' ); + const floatVertexTextures = vertexTextures && floatFragmentTextures; + + const maxSamples = isWebGL2 ? gl.getParameter( 36183 ) : 0; + + return { + + isWebGL2: isWebGL2, + + drawBuffers: drawBuffers, + + getMaxAnisotropy: getMaxAnisotropy, + getMaxPrecision: getMaxPrecision, + + precision: precision, + logarithmicDepthBuffer: logarithmicDepthBuffer, + + maxTextures: maxTextures, + maxVertexTextures: maxVertexTextures, + maxTextureSize: maxTextureSize, + maxCubemapSize: maxCubemapSize, + + maxAttributes: maxAttributes, + maxVertexUniforms: maxVertexUniforms, + maxVaryings: maxVaryings, + maxFragmentUniforms: maxFragmentUniforms, + + vertexTextures: vertexTextures, + floatFragmentTextures: floatFragmentTextures, + floatVertexTextures: floatVertexTextures, + + maxSamples: maxSamples + + }; + +} + +function WebGLClipping( properties ) { + + const scope = this; + + let globalState = null, + numGlobalPlanes = 0, + localClippingEnabled = false, + renderingShadows = false; + + const plane = new Plane(), + viewNormalMatrix = new Matrix3(), + + uniform = { value: null, needsUpdate: false }; + + this.uniform = uniform; + this.numPlanes = 0; + this.numIntersection = 0; + + this.init = function ( planes, enableLocalClipping, camera ) { + + const enabled = + planes.length !== 0 || + enableLocalClipping || + // enable state of previous frame - the clipping code has to + // run another frame in order to reset the state: + numGlobalPlanes !== 0 || + localClippingEnabled; + + localClippingEnabled = enableLocalClipping; + + globalState = projectPlanes( planes, camera, 0 ); + numGlobalPlanes = planes.length; + + return enabled; + + }; + + this.beginShadows = function () { + + renderingShadows = true; + projectPlanes( null ); + + }; + + this.endShadows = function () { + + renderingShadows = false; + resetGlobalState(); + + }; + + this.setState = function ( material, camera, useCache ) { + + const planes = material.clippingPlanes, + clipIntersection = material.clipIntersection, + clipShadows = material.clipShadows; + + const materialProperties = properties.get( material ); + + if ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) { + + // there's no local clipping + + if ( renderingShadows ) { + + // there's no global clipping + + projectPlanes( null ); + + } else { + + resetGlobalState(); + + } + + } else { + + const nGlobal = renderingShadows ? 0 : numGlobalPlanes, + lGlobal = nGlobal * 4; + + let dstArray = materialProperties.clippingState || null; + + uniform.value = dstArray; // ensure unique state + + dstArray = projectPlanes( planes, camera, lGlobal, useCache ); + + for ( let i = 0; i !== lGlobal; ++ i ) { + + dstArray[ i ] = globalState[ i ]; + + } + + materialProperties.clippingState = dstArray; + this.numIntersection = clipIntersection ? this.numPlanes : 0; + this.numPlanes += nGlobal; + + } + + + }; + + function resetGlobalState() { + + if ( uniform.value !== globalState ) { + + uniform.value = globalState; + uniform.needsUpdate = numGlobalPlanes > 0; + + } + + scope.numPlanes = numGlobalPlanes; + scope.numIntersection = 0; + + } + + function projectPlanes( planes, camera, dstOffset, skipTransform ) { + + const nPlanes = planes !== null ? planes.length : 0; + let dstArray = null; + + if ( nPlanes !== 0 ) { + + dstArray = uniform.value; + + if ( skipTransform !== true || dstArray === null ) { + + const flatSize = dstOffset + nPlanes * 4, + viewMatrix = camera.matrixWorldInverse; + + viewNormalMatrix.getNormalMatrix( viewMatrix ); + + if ( dstArray === null || dstArray.length < flatSize ) { + + dstArray = new Float32Array( flatSize ); + + } + + for ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) { + + plane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix ); + + plane.normal.toArray( dstArray, i4 ); + dstArray[ i4 + 3 ] = plane.constant; + + } + + } + + uniform.value = dstArray; + uniform.needsUpdate = true; + + } + + scope.numPlanes = nPlanes; + scope.numIntersection = 0; + + return dstArray; + + } + +} + +function WebGLCubeMaps( renderer ) { + + let cubemaps = new WeakMap(); + + function mapTextureMapping( texture, mapping ) { + + if ( mapping === EquirectangularReflectionMapping ) { + + texture.mapping = CubeReflectionMapping; + + } else if ( mapping === EquirectangularRefractionMapping ) { + + texture.mapping = CubeRefractionMapping; + + } + + return texture; + + } + + function get( texture ) { + + if ( texture && texture.isTexture && texture.isRenderTargetTexture === false ) { + + const mapping = texture.mapping; + + if ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) { + + if ( cubemaps.has( texture ) ) { + + const cubemap = cubemaps.get( texture ).texture; + return mapTextureMapping( cubemap, texture.mapping ); + + } else { + + const image = texture.image; + + if ( image && image.height > 0 ) { + + const currentRenderTarget = renderer.getRenderTarget(); + + const renderTarget = new WebGLCubeRenderTarget( image.height / 2 ); + renderTarget.fromEquirectangularTexture( renderer, texture ); + cubemaps.set( texture, renderTarget ); + + renderer.setRenderTarget( currentRenderTarget ); + + texture.addEventListener( 'dispose', onTextureDispose ); + + return mapTextureMapping( renderTarget.texture, texture.mapping ); + + } else { + + // image not yet ready. try the conversion next frame + + return null; + + } + + } + + } + + } + + return texture; + + } + + function onTextureDispose( event ) { + + const texture = event.target; + + texture.removeEventListener( 'dispose', onTextureDispose ); + + const cubemap = cubemaps.get( texture ); + + if ( cubemap !== undefined ) { + + cubemaps.delete( texture ); + cubemap.dispose(); + + } + + } + + function dispose() { + + cubemaps = new WeakMap(); + + } + + return { + get: get, + dispose: dispose + }; + +} + +class OrthographicCamera extends Camera { + + constructor( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) { + + super(); + + this.type = 'OrthographicCamera'; + + this.zoom = 1; + this.view = null; + + this.left = left; + this.right = right; + this.top = top; + this.bottom = bottom; + + this.near = near; + this.far = far; + + this.updateProjectionMatrix(); + + } + + copy( source, recursive ) { + + super.copy( source, recursive ); + + this.left = source.left; + this.right = source.right; + this.top = source.top; + this.bottom = source.bottom; + this.near = source.near; + this.far = source.far; + + this.zoom = source.zoom; + this.view = source.view === null ? null : Object.assign( {}, source.view ); + + return this; + + } + + setViewOffset( fullWidth, fullHeight, x, y, width, height ) { + + 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 dx = ( this.right - this.left ) / ( 2 * this.zoom ); + const dy = ( this.top - this.bottom ) / ( 2 * this.zoom ); + const cx = ( this.right + this.left ) / 2; + const cy = ( this.top + this.bottom ) / 2; + + let left = cx - dx; + let right = cx + dx; + let top = cy + dy; + let bottom = cy - dy; + + if ( this.view !== null && this.view.enabled ) { + + const scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom; + const scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom; + + left += scaleW * this.view.offsetX; + right = left + scaleW * this.view.width; + top -= scaleH * this.view.offsetY; + bottom = top - scaleH * this.view.height; + + } + + this.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far ); + + this.projectionMatrixInverse.copy( this.projectionMatrix ).invert(); + + } + + toJSON( meta ) { + + const data = super.toJSON( meta ); + + data.object.zoom = this.zoom; + data.object.left = this.left; + data.object.right = this.right; + data.object.top = this.top; + data.object.bottom = this.bottom; + data.object.near = this.near; + data.object.far = this.far; + + if ( this.view !== null ) data.object.view = Object.assign( {}, this.view ); + + return data; + + } + +} + +OrthographicCamera.prototype.isOrthographicCamera = true; + +class RawShaderMaterial extends ShaderMaterial { + + constructor( parameters ) { + + super( parameters ); + + this.type = 'RawShaderMaterial'; + + } + +} + +RawShaderMaterial.prototype.isRawShaderMaterial = true; + +const LOD_MIN = 4; +const LOD_MAX = 8; +const SIZE_MAX = Math.pow( 2, LOD_MAX ); + +// The standard deviations (radians) associated with the extra mips. These are +// chosen to approximate a Trowbridge-Reitz distribution function times the +// geometric shadowing function. These sigma values squared must match the +// variance #defines in cube_uv_reflection_fragment.glsl.js. +const EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ]; + +const TOTAL_LODS = LOD_MAX - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length; + +// The maximum length of the blur for loop. Smaller sigmas will use fewer +// samples and exit early, but not recompile the shader. +const MAX_SAMPLES = 20; + +const ENCODINGS = { + [ LinearEncoding ]: 0, + [ sRGBEncoding ]: 1, + [ RGBEEncoding ]: 2, + [ RGBM7Encoding ]: 3, + [ RGBM16Encoding ]: 4, + [ RGBDEncoding ]: 5, + [ GammaEncoding ]: 6 +}; + +const backgroundMaterial = new MeshBasicMaterial( { + side: BackSide, + depthWrite: false, + depthTest: false, +} ); +const backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial ); + +const _flatCamera = /*@__PURE__*/ new OrthographicCamera(); +const { _lodPlanes, _sizeLods, _sigmas } = /*@__PURE__*/ _createPlanes(); +const _clearColor = /*@__PURE__*/ new Color(); +let _oldTarget = null; + +// Golden Ratio +const PHI = ( 1 + Math.sqrt( 5 ) ) / 2; +const INV_PHI = 1 / PHI; + +// Vertices of a dodecahedron (except the opposites, which represent the +// same axis), used as axis directions evenly spread on a sphere. +const _axisDirections = [ + /*@__PURE__*/ new Vector3( 1, 1, 1 ), + /*@__PURE__*/ new Vector3( - 1, 1, 1 ), + /*@__PURE__*/ new Vector3( 1, 1, - 1 ), + /*@__PURE__*/ new Vector3( - 1, 1, - 1 ), + /*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ), + /*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ), + /*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ), + /*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ), + /*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ), + /*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ) ]; + +/** + * This class generates a Prefiltered, Mipmapped Radiance Environment Map + * (PMREM) from a cubeMap environment texture. This allows different levels of + * blur to be quickly accessed based on material roughness. It is packed into a + * special CubeUV format that allows us to perform custom interpolation so that + * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap + * chain, it only goes down to the LOD_MIN level (above), and then creates extra + * even more filtered 'mips' at the same LOD_MIN resolution, associated with + * higher roughness levels. In this way we maintain resolution to smoothly + * interpolate diffuse lighting while limiting sampling computation. + * + * Paper: Fast, Accurate Image-Based Lighting + * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view +*/ + +function convertLinearToRGBE( color ) { + + const maxComponent = Math.max( color.r, color.g, color.b ); + const fExp = Math.min( Math.max( Math.ceil( Math.log2( maxComponent ) ), - 128.0 ), 127.0 ); + color.multiplyScalar( Math.pow( 2.0, - fExp ) ); + + const alpha = ( fExp + 128.0 ) / 255.0; + return alpha; + +} + +class PMREMGenerator { + + constructor( renderer ) { + + this._renderer = renderer; + this._pingPongRenderTarget = null; + + this._blurMaterial = _getBlurShader( MAX_SAMPLES ); + this._equirectShader = null; + this._cubemapShader = null; + + this._compileMaterial( this._blurMaterial ); + + } + + /** + * Generates a PMREM from a supplied Scene, which can be faster than using an + * image if networking bandwidth is low. Optional sigma specifies a blur radius + * in radians to be applied to the scene before PMREM generation. Optional near + * and far planes ensure the scene is rendered in its entirety (the cubeCamera + * is placed at the origin). + */ + fromScene( scene, sigma = 0, near = 0.1, far = 100 ) { + + _oldTarget = this._renderer.getRenderTarget(); + const cubeUVRenderTarget = this._allocateTargets(); + + this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget ); + if ( sigma > 0 ) { + + this._blur( cubeUVRenderTarget, 0, 0, sigma ); + + } + + this._applyPMREM( cubeUVRenderTarget ); + this._cleanup( cubeUVRenderTarget ); + + return cubeUVRenderTarget; + + } + + /** + * Generates a PMREM from an equirectangular texture, which can be either LDR + * (RGBFormat) or HDR (RGBEFormat). The ideal input image size is 1k (1024 x 512), + * as this matches best with the 256 x 256 cubemap output. + */ + fromEquirectangular( equirectangular ) { + + return this._fromTexture( equirectangular ); + + } + + /** + * Generates a PMREM from an cubemap texture, which can be either LDR + * (RGBFormat) or HDR (RGBEFormat). The ideal input cube size is 256 x 256, + * as this matches best with the 256 x 256 cubemap output. + */ + fromCubemap( cubemap ) { + + return this._fromTexture( cubemap ); + + } + + /** + * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during + * your texture's network fetch for increased concurrency. + */ + compileCubemapShader() { + + if ( this._cubemapShader === null ) { + + this._cubemapShader = _getCubemapShader(); + this._compileMaterial( this._cubemapShader ); + + } + + } + + /** + * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during + * your texture's network fetch for increased concurrency. + */ + compileEquirectangularShader() { + + if ( this._equirectShader === null ) { + + this._equirectShader = _getEquirectShader(); + this._compileMaterial( this._equirectShader ); + + } + + } + + /** + * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class, + * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on + * one of them will cause any others to also become unusable. + */ + dispose() { + + this._blurMaterial.dispose(); + + if ( this._cubemapShader !== null ) this._cubemapShader.dispose(); + if ( this._equirectShader !== null ) this._equirectShader.dispose(); + + for ( let i = 0; i < _lodPlanes.length; i ++ ) { + + _lodPlanes[ i ].dispose(); + + } + + } + + // private interface + + _cleanup( outputTarget ) { + + this._pingPongRenderTarget.dispose(); + this._renderer.setRenderTarget( _oldTarget ); + outputTarget.scissorTest = false; + _setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height ); + + } + + _fromTexture( texture ) { + + _oldTarget = this._renderer.getRenderTarget(); + const cubeUVRenderTarget = this._allocateTargets( texture ); + this._textureToCubeUV( texture, cubeUVRenderTarget ); + this._applyPMREM( cubeUVRenderTarget ); + this._cleanup( cubeUVRenderTarget ); + + return cubeUVRenderTarget; + + } + + _allocateTargets( texture ) { // warning: null texture is valid + + const params = { + magFilter: NearestFilter, + minFilter: NearestFilter, + generateMipmaps: false, + type: UnsignedByteType, + format: RGBEFormat, + encoding: _isLDR( texture ) ? texture.encoding : RGBEEncoding, + depthBuffer: false + }; + + const cubeUVRenderTarget = _createRenderTarget( params ); + cubeUVRenderTarget.depthBuffer = texture ? false : true; + this._pingPongRenderTarget = _createRenderTarget( params ); + return cubeUVRenderTarget; + + } + + _compileMaterial( material ) { + + const tmpMesh = new Mesh( _lodPlanes[ 0 ], material ); + this._renderer.compile( tmpMesh, _flatCamera ); + + } + + _sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) { + + const fov = 90; + const aspect = 1; + const cubeCamera = new PerspectiveCamera( fov, aspect, near, far ); + const upSign = [ 1, - 1, 1, 1, 1, 1 ]; + const forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ]; + const renderer = this._renderer; + + const originalAutoClear = renderer.autoClear; + const outputEncoding = renderer.outputEncoding; + const toneMapping = renderer.toneMapping; + renderer.getClearColor( _clearColor ); + + renderer.toneMapping = NoToneMapping; + renderer.outputEncoding = LinearEncoding; + renderer.autoClear = false; + + let useSolidColor = false; + const background = scene.background; + if ( background ) { + + if ( background.isColor ) { + + backgroundMaterial.color.copy( background ).convertSRGBToLinear(); + scene.background = null; + + const alpha = convertLinearToRGBE( backgroundMaterial.color ); + backgroundMaterial.opacity = alpha; + useSolidColor = true; + + } + + } else { + + backgroundMaterial.color.copy( _clearColor ).convertSRGBToLinear(); + + const alpha = convertLinearToRGBE( backgroundMaterial.color ); + backgroundMaterial.opacity = alpha; + useSolidColor = true; + + } + + + for ( let i = 0; i < 6; i ++ ) { + + const col = i % 3; + if ( col == 0 ) { + + cubeCamera.up.set( 0, upSign[ i ], 0 ); + cubeCamera.lookAt( forwardSign[ i ], 0, 0 ); + + } else if ( col == 1 ) { + + cubeCamera.up.set( 0, 0, upSign[ i ] ); + cubeCamera.lookAt( 0, forwardSign[ i ], 0 ); + + } else { + + cubeCamera.up.set( 0, upSign[ i ], 0 ); + cubeCamera.lookAt( 0, 0, forwardSign[ i ] ); + + } + + _setViewport( cubeUVRenderTarget, + col * SIZE_MAX, i > 2 ? SIZE_MAX : 0, SIZE_MAX, SIZE_MAX ); + renderer.setRenderTarget( cubeUVRenderTarget ); + + if ( useSolidColor ) { + + renderer.render( backgroundBox, cubeCamera ); + + } + + renderer.render( scene, cubeCamera ); + + } + + renderer.toneMapping = toneMapping; + renderer.outputEncoding = outputEncoding; + renderer.autoClear = originalAutoClear; + + } + + _textureToCubeUV( texture, cubeUVRenderTarget ) { + + const renderer = this._renderer; + + if ( texture.isCubeTexture ) { + + if ( this._cubemapShader == null ) { + + this._cubemapShader = _getCubemapShader(); + + } + + } else { + + if ( this._equirectShader == null ) { + + this._equirectShader = _getEquirectShader(); + + } + + } + + const material = texture.isCubeTexture ? this._cubemapShader : this._equirectShader; + const mesh = new Mesh( _lodPlanes[ 0 ], material ); + + const uniforms = material.uniforms; + + uniforms[ 'envMap' ].value = texture; + + if ( ! texture.isCubeTexture ) { + + uniforms[ 'texelSize' ].value.set( 1.0 / texture.image.width, 1.0 / texture.image.height ); + + } + + uniforms[ 'inputEncoding' ].value = ENCODINGS[ texture.encoding ]; + uniforms[ 'outputEncoding' ].value = ENCODINGS[ cubeUVRenderTarget.texture.encoding ]; + + _setViewport( cubeUVRenderTarget, 0, 0, 3 * SIZE_MAX, 2 * SIZE_MAX ); + + renderer.setRenderTarget( cubeUVRenderTarget ); + renderer.render( mesh, _flatCamera ); + + } + + _applyPMREM( cubeUVRenderTarget ) { + + const renderer = this._renderer; + const autoClear = renderer.autoClear; + renderer.autoClear = false; + + for ( let i = 1; i < TOTAL_LODS; i ++ ) { + + const sigma = Math.sqrt( _sigmas[ i ] * _sigmas[ i ] - _sigmas[ i - 1 ] * _sigmas[ i - 1 ] ); + + const poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ]; + + this._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis ); + + } + + renderer.autoClear = autoClear; + + } + + /** + * This is a two-pass Gaussian blur for a cubemap. Normally this is done + * vertically and horizontally, but this breaks down on a cube. Here we apply + * the blur latitudinally (around the poles), and then longitudinally (towards + * the poles) to approximate the orthogonally-separable blur. It is least + * accurate at the poles, but still does a decent job. + */ + _blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) { + + const pingPongRenderTarget = this._pingPongRenderTarget; + + this._halfBlur( + cubeUVRenderTarget, + pingPongRenderTarget, + lodIn, + lodOut, + sigma, + 'latitudinal', + poleAxis ); + + this._halfBlur( + pingPongRenderTarget, + cubeUVRenderTarget, + lodOut, + lodOut, + sigma, + 'longitudinal', + poleAxis ); + + } + + _halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) { + + const renderer = this._renderer; + const blurMaterial = this._blurMaterial; + + if ( direction !== 'latitudinal' && direction !== 'longitudinal' ) { + + console.error( + 'blur direction must be either latitudinal or longitudinal!' ); + + } + + // Number of standard deviations at which to cut off the discrete approximation. + const STANDARD_DEVIATIONS = 3; + + const blurMesh = new Mesh( _lodPlanes[ lodOut ], blurMaterial ); + const blurUniforms = blurMaterial.uniforms; + + const pixels = _sizeLods[ lodIn ] - 1; + const radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 ); + const sigmaPixels = sigmaRadians / radiansPerPixel; + const samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES; + + if ( samples > MAX_SAMPLES ) { + + console.warn( `sigmaRadians, ${ + sigmaRadians}, is too large and will clip, as it requested ${ + samples} samples when the maximum is set to ${MAX_SAMPLES}` ); + + } + + const weights = []; + let sum = 0; + + for ( let i = 0; i < MAX_SAMPLES; ++ i ) { + + const x = i / sigmaPixels; + const weight = Math.exp( - x * x / 2 ); + weights.push( weight ); + + if ( i == 0 ) { + + sum += weight; + + } else if ( i < samples ) { + + sum += 2 * weight; + + } + + } + + for ( let i = 0; i < weights.length; i ++ ) { + + weights[ i ] = weights[ i ] / sum; + + } + + blurUniforms[ 'envMap' ].value = targetIn.texture; + blurUniforms[ 'samples' ].value = samples; + blurUniforms[ 'weights' ].value = weights; + blurUniforms[ 'latitudinal' ].value = direction === 'latitudinal'; + + if ( poleAxis ) { + + blurUniforms[ 'poleAxis' ].value = poleAxis; + + } + + blurUniforms[ 'dTheta' ].value = radiansPerPixel; + blurUniforms[ 'mipInt' ].value = LOD_MAX - lodIn; + blurUniforms[ 'inputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ]; + blurUniforms[ 'outputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ]; + + const outputSize = _sizeLods[ lodOut ]; + const x = 3 * Math.max( 0, SIZE_MAX - 2 * outputSize ); + const y = ( lodOut === 0 ? 0 : 2 * SIZE_MAX ) + 2 * outputSize * ( lodOut > LOD_MAX - LOD_MIN ? lodOut - LOD_MAX + LOD_MIN : 0 ); + + _setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize ); + renderer.setRenderTarget( targetOut ); + renderer.render( blurMesh, _flatCamera ); + + } + +} + +function _isLDR( texture ) { + + if ( texture === undefined || texture.type !== UnsignedByteType ) return false; + + return texture.encoding === LinearEncoding || texture.encoding === sRGBEncoding || texture.encoding === GammaEncoding; + +} + +function _createPlanes() { + + const _lodPlanes = []; + const _sizeLods = []; + const _sigmas = []; + + let lod = LOD_MAX; + + for ( let i = 0; i < TOTAL_LODS; i ++ ) { + + const sizeLod = Math.pow( 2, lod ); + _sizeLods.push( sizeLod ); + let sigma = 1.0 / sizeLod; + + if ( i > LOD_MAX - LOD_MIN ) { + + sigma = EXTRA_LOD_SIGMA[ i - LOD_MAX + LOD_MIN - 1 ]; + + } else if ( i == 0 ) { + + sigma = 0; + + } + + _sigmas.push( sigma ); + + const texelSize = 1.0 / ( sizeLod - 1 ); + const min = - texelSize / 2; + const max = 1 + texelSize / 2; + const uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ]; + + const cubeFaces = 6; + const vertices = 6; + const positionSize = 3; + const uvSize = 2; + const faceIndexSize = 1; + + const position = new Float32Array( positionSize * vertices * cubeFaces ); + const uv = new Float32Array( uvSize * vertices * cubeFaces ); + const faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces ); + + for ( let face = 0; face < cubeFaces; face ++ ) { + + const x = ( face % 3 ) * 2 / 3 - 1; + const y = face > 2 ? 0 : - 1; + const coordinates = [ + x, y, 0, + x + 2 / 3, y, 0, + x + 2 / 3, y + 1, 0, + x, y, 0, + x + 2 / 3, y + 1, 0, + x, y + 1, 0 + ]; + position.set( coordinates, positionSize * vertices * face ); + uv.set( uv1, uvSize * vertices * face ); + const fill = [ face, face, face, face, face, face ]; + faceIndex.set( fill, faceIndexSize * vertices * face ); + + } + + const planes = new BufferGeometry(); + planes.setAttribute( 'position', new BufferAttribute( position, positionSize ) ); + planes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) ); + planes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) ); + _lodPlanes.push( planes ); + + if ( lod > LOD_MIN ) { + + lod --; + + } + + } + + return { _lodPlanes, _sizeLods, _sigmas }; + +} + +function _createRenderTarget( params ) { + + const cubeUVRenderTarget = new WebGLRenderTarget( 3 * SIZE_MAX, 3 * SIZE_MAX, params ); + cubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping; + cubeUVRenderTarget.texture.name = 'PMREM.cubeUv'; + cubeUVRenderTarget.scissorTest = true; + return cubeUVRenderTarget; + +} + +function _setViewport( target, x, y, width, height ) { + + target.viewport.set( x, y, width, height ); + target.scissor.set( x, y, width, height ); + +} + +function _getBlurShader( maxSamples ) { + + const weights = new Float32Array( maxSamples ); + const poleAxis = new Vector3( 0, 1, 0 ); + const shaderMaterial = new RawShaderMaterial( { + + name: 'SphericalGaussianBlur', + + defines: { 'n': maxSamples }, + + uniforms: { + 'envMap': { value: null }, + 'samples': { value: 1 }, + 'weights': { value: weights }, + 'latitudinal': { value: false }, + 'dTheta': { value: 0 }, + 'mipInt': { value: 0 }, + 'poleAxis': { value: poleAxis }, + 'inputEncoding': { value: ENCODINGS[ LinearEncoding ] }, + 'outputEncoding': { value: ENCODINGS[ LinearEncoding ] } + }, + + vertexShader: _getCommonVertexShader(), + + fragmentShader: /* glsl */` + + precision mediump float; + precision mediump int; + + varying vec3 vOutputDirection; + + uniform sampler2D envMap; + uniform int samples; + uniform float weights[ n ]; + uniform bool latitudinal; + uniform float dTheta; + uniform float mipInt; + uniform vec3 poleAxis; + + ${ _getEncodings() } + + #define ENVMAP_TYPE_CUBE_UV + #include + + vec3 getSample( float theta, vec3 axis ) { + + float cosTheta = cos( theta ); + // Rodrigues' axis-angle rotation + vec3 sampleDirection = vOutputDirection * cosTheta + + cross( axis, vOutputDirection ) * sin( theta ) + + axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta ); + + return bilinearCubeUV( envMap, sampleDirection, mipInt ); + + } + + void main() { + + vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection ); + + if ( all( equal( axis, vec3( 0.0 ) ) ) ) { + + axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x ); + + } + + axis = normalize( axis ); + + gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); + gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis ); + + for ( int i = 1; i < n; i++ ) { + + if ( i >= samples ) { + + break; + + } + + float theta = dTheta * float( i ); + gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis ); + gl_FragColor.rgb += weights[ i ] * getSample( theta, axis ); + + } + + gl_FragColor = linearToOutputTexel( gl_FragColor ); + + } + `, + + blending: NoBlending, + depthTest: false, + depthWrite: false + + } ); + + return shaderMaterial; + +} + +function _getEquirectShader() { + + const texelSize = new Vector2( 1, 1 ); + const shaderMaterial = new RawShaderMaterial( { + + name: 'EquirectangularToCubeUV', + + uniforms: { + 'envMap': { value: null }, + 'texelSize': { value: texelSize }, + 'inputEncoding': { value: ENCODINGS[ LinearEncoding ] }, + 'outputEncoding': { value: ENCODINGS[ LinearEncoding ] } + }, + + vertexShader: _getCommonVertexShader(), + + fragmentShader: /* glsl */` + + precision mediump float; + precision mediump int; + + varying vec3 vOutputDirection; + + uniform sampler2D envMap; + uniform vec2 texelSize; + + ${ _getEncodings() } + + #include + + void main() { + + gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); + + vec3 outputDirection = normalize( vOutputDirection ); + vec2 uv = equirectUv( outputDirection ); + + vec2 f = fract( uv / texelSize - 0.5 ); + uv -= f * texelSize; + vec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb; + uv.x += texelSize.x; + vec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb; + uv.y += texelSize.y; + vec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb; + uv.x -= texelSize.x; + vec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb; + + vec3 tm = mix( tl, tr, f.x ); + vec3 bm = mix( bl, br, f.x ); + gl_FragColor.rgb = mix( tm, bm, f.y ); + + gl_FragColor = linearToOutputTexel( gl_FragColor ); + + } + `, + + blending: NoBlending, + depthTest: false, + depthWrite: false + + } ); + + return shaderMaterial; + +} + +function _getCubemapShader() { + + const shaderMaterial = new RawShaderMaterial( { + + name: 'CubemapToCubeUV', + + uniforms: { + 'envMap': { value: null }, + 'inputEncoding': { value: ENCODINGS[ LinearEncoding ] }, + 'outputEncoding': { value: ENCODINGS[ LinearEncoding ] } + }, + + vertexShader: _getCommonVertexShader(), + + fragmentShader: /* glsl */` + + precision mediump float; + precision mediump int; + + varying vec3 vOutputDirection; + + uniform samplerCube envMap; + + ${ _getEncodings() } + + void main() { + + gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); + gl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb; + gl_FragColor = linearToOutputTexel( gl_FragColor ); + + } + `, + + blending: NoBlending, + depthTest: false, + depthWrite: false + + } ); + + return shaderMaterial; + +} + +function _getCommonVertexShader() { + + return /* glsl */` + + precision mediump float; + precision mediump int; + + attribute vec3 position; + attribute vec2 uv; + attribute float faceIndex; + + varying vec3 vOutputDirection; + + // RH coordinate system; PMREM face-indexing convention + vec3 getDirection( vec2 uv, float face ) { + + uv = 2.0 * uv - 1.0; + + vec3 direction = vec3( uv, 1.0 ); + + if ( face == 0.0 ) { + + direction = direction.zyx; // ( 1, v, u ) pos x + + } else if ( face == 1.0 ) { + + direction = direction.xzy; + direction.xz *= -1.0; // ( -u, 1, -v ) pos y + + } else if ( face == 2.0 ) { + + direction.x *= -1.0; // ( -u, v, 1 ) pos z + + } else if ( face == 3.0 ) { + + direction = direction.zyx; + direction.xz *= -1.0; // ( -1, v, -u ) neg x + + } else if ( face == 4.0 ) { + + direction = direction.xzy; + direction.xy *= -1.0; // ( -u, -1, v ) neg y + + } else if ( face == 5.0 ) { + + direction.z *= -1.0; // ( u, v, -1 ) neg z + + } + + return direction; + + } + + void main() { + + vOutputDirection = getDirection( uv, faceIndex ); + gl_Position = vec4( position, 1.0 ); + + } + `; + +} + +function _getEncodings() { + + return /* glsl */` + + uniform int inputEncoding; + uniform int outputEncoding; + + #include + + vec4 inputTexelToLinear( vec4 value ) { + + if ( inputEncoding == 0 ) { + + return value; + + } else if ( inputEncoding == 1 ) { + + return sRGBToLinear( value ); + + } else if ( inputEncoding == 2 ) { + + return RGBEToLinear( value ); + + } else if ( inputEncoding == 3 ) { + + return RGBMToLinear( value, 7.0 ); + + } else if ( inputEncoding == 4 ) { + + return RGBMToLinear( value, 16.0 ); + + } else if ( inputEncoding == 5 ) { + + return RGBDToLinear( value, 256.0 ); + + } else { + + return GammaToLinear( value, 2.2 ); + + } + + } + + vec4 linearToOutputTexel( vec4 value ) { + + if ( outputEncoding == 0 ) { + + return value; + + } else if ( outputEncoding == 1 ) { + + return LinearTosRGB( value ); + + } else if ( outputEncoding == 2 ) { + + return LinearToRGBE( value ); + + } else if ( outputEncoding == 3 ) { + + return LinearToRGBM( value, 7.0 ); + + } else if ( outputEncoding == 4 ) { + + return LinearToRGBM( value, 16.0 ); + + } else if ( outputEncoding == 5 ) { + + return LinearToRGBD( value, 256.0 ); + + } else { + + return LinearToGamma( value, 2.2 ); + + } + + } + + vec4 envMapTexelToLinear( vec4 color ) { + + return inputTexelToLinear( color ); + + } + `; + +} + +function WebGLCubeUVMaps( renderer ) { + + let cubeUVmaps = new WeakMap(); + + let pmremGenerator = null; + + function get( texture ) { + + if ( texture && texture.isTexture && texture.isRenderTargetTexture === false ) { + + const mapping = texture.mapping; + + const isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ); + const isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping ); + + if ( isEquirectMap || isCubeMap ) { + + // equirect/cube map to cubeUV conversion + + if ( cubeUVmaps.has( texture ) ) { + + return cubeUVmaps.get( texture ).texture; + + } else { + + const image = texture.image; + + if ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) { + + const currentRenderTarget = renderer.getRenderTarget(); + + if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer ); + + const renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture ); + cubeUVmaps.set( texture, renderTarget ); + + renderer.setRenderTarget( currentRenderTarget ); + + texture.addEventListener( 'dispose', onTextureDispose ); + + return renderTarget.texture; + + } else { + + // image not yet ready. try the conversion next frame + + return null; + + } + + } + + } + + } + + return texture; + + } + + function isCubeTextureComplete( image ) { + + let count = 0; + const length = 6; + + for ( let i = 0; i < length; i ++ ) { + + if ( image[ i ] !== undefined ) count ++; + + } + + return count === length; + + + } + + function onTextureDispose( event ) { + + const texture = event.target; + + texture.removeEventListener( 'dispose', onTextureDispose ); + + const cubemapUV = cubeUVmaps.get( texture ); + + if ( cubemapUV !== undefined ) { + + cubemapUV.delete( texture ); + cubemapUV.dispose(); + + } + + } + + function dispose() { + + cubeUVmaps = new WeakMap(); + + if ( pmremGenerator !== null ) { + + pmremGenerator.dispose(); + pmremGenerator = null; + + } + + } + + return { + get: get, + dispose: dispose + }; + +} + +function WebGLExtensions( gl ) { + + const extensions = {}; + + function getExtension( name ) { + + if ( extensions[ name ] !== undefined ) { + + return extensions[ name ]; + + } + + let extension; + + switch ( name ) { + + case 'WEBGL_depth_texture': + extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' ); + break; + + case 'EXT_texture_filter_anisotropic': + extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' ); + break; + + case 'WEBGL_compressed_texture_s3tc': + extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' ); + break; + + case 'WEBGL_compressed_texture_pvrtc': + extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' ); + break; + + default: + extension = gl.getExtension( name ); + + } + + extensions[ name ] = extension; + + return extension; + + } + + return { + + has: function ( name ) { + + return getExtension( name ) !== null; + + }, + + init: function ( capabilities ) { + + if ( capabilities.isWebGL2 ) { + + getExtension( 'EXT_color_buffer_float' ); + + } else { + + getExtension( 'WEBGL_depth_texture' ); + getExtension( 'OES_texture_float' ); + getExtension( 'OES_texture_half_float' ); + getExtension( 'OES_texture_half_float_linear' ); + getExtension( 'OES_standard_derivatives' ); + getExtension( 'OES_element_index_uint' ); + getExtension( 'OES_vertex_array_object' ); + getExtension( 'ANGLE_instanced_arrays' ); + + } + + getExtension( 'OES_texture_float_linear' ); + getExtension( 'EXT_color_buffer_half_float' ); + + }, + + get: function ( name ) { + + const extension = getExtension( name ); + + if ( extension === null ) { + + console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' ); + + } + + return extension; + + } + + }; + +} + +function WebGLGeometries( gl, attributes, info, bindingStates ) { + + const geometries = {}; + const wireframeAttributes = new WeakMap(); + + function onGeometryDispose( event ) { + + const geometry = event.target; + + if ( geometry.index !== null ) { + + attributes.remove( geometry.index ); + + } + + for ( const name in geometry.attributes ) { + + attributes.remove( geometry.attributes[ name ] ); + + } + + geometry.removeEventListener( 'dispose', onGeometryDispose ); + + delete geometries[ geometry.id ]; + + const attribute = wireframeAttributes.get( geometry ); + + if ( attribute ) { + + attributes.remove( attribute ); + wireframeAttributes.delete( geometry ); + + } + + bindingStates.releaseStatesOfGeometry( geometry ); + + if ( geometry.isInstancedBufferGeometry === true ) { + + delete geometry._maxInstanceCount; + + } + + // + + info.memory.geometries --; + + } + + function get( object, geometry ) { + + if ( geometries[ geometry.id ] === true ) return geometry; + + geometry.addEventListener( 'dispose', onGeometryDispose ); + + geometries[ geometry.id ] = true; + + info.memory.geometries ++; + + return geometry; + + } + + function update( geometry ) { + + const geometryAttributes = geometry.attributes; + + // Updating index buffer in VAO now. See WebGLBindingStates. + + for ( const name in geometryAttributes ) { + + attributes.update( geometryAttributes[ name ], 34962 ); + + } + + // morph targets + + const morphAttributes = geometry.morphAttributes; + + for ( const name in morphAttributes ) { + + const array = morphAttributes[ name ]; + + for ( let i = 0, l = array.length; i < l; i ++ ) { + + attributes.update( array[ i ], 34962 ); + + } + + } + + } + + function updateWireframeAttribute( geometry ) { + + const indices = []; + + const geometryIndex = geometry.index; + const geometryPosition = geometry.attributes.position; + let version = 0; + + if ( geometryIndex !== null ) { + + const array = geometryIndex.array; + version = geometryIndex.version; + + for ( let i = 0, l = array.length; i < l; i += 3 ) { + + const a = array[ i + 0 ]; + const b = array[ i + 1 ]; + const c = array[ i + 2 ]; + + indices.push( a, b, b, c, c, a ); + + } + + } else { + + const array = geometryPosition.array; + version = geometryPosition.version; + + for ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) { + + const a = i + 0; + const b = i + 1; + const c = i + 2; + + indices.push( a, b, b, c, c, a ); + + } + + } + + const attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 ); + attribute.version = version; + + // Updating index buffer in VAO now. See WebGLBindingStates + + // + + const previousAttribute = wireframeAttributes.get( geometry ); + + if ( previousAttribute ) attributes.remove( previousAttribute ); + + // + + wireframeAttributes.set( geometry, attribute ); + + } + + function getWireframeAttribute( geometry ) { + + const currentAttribute = wireframeAttributes.get( geometry ); + + if ( currentAttribute ) { + + const geometryIndex = geometry.index; + + if ( geometryIndex !== null ) { + + // if the attribute is obsolete, create a new one + + if ( currentAttribute.version < geometryIndex.version ) { + + updateWireframeAttribute( geometry ); + + } + + } + + } else { + + updateWireframeAttribute( geometry ); + + } + + return wireframeAttributes.get( geometry ); + + } + + return { + + get: get, + update: update, + + getWireframeAttribute: getWireframeAttribute + + }; + +} + +function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) { + + const isWebGL2 = capabilities.isWebGL2; + + let mode; + + function setMode( value ) { + + mode = value; + + } + + let type, bytesPerElement; + + function setIndex( value ) { + + type = value.type; + bytesPerElement = value.bytesPerElement; + + } + + function render( start, count ) { + + gl.drawElements( mode, count, type, start * bytesPerElement ); + + info.update( count, mode, 1 ); + + } + + function renderInstances( start, count, primcount ) { + + if ( primcount === 0 ) return; + + let extension, methodName; + + if ( isWebGL2 ) { + + extension = gl; + methodName = 'drawElementsInstanced'; + + } else { + + extension = extensions.get( 'ANGLE_instanced_arrays' ); + methodName = 'drawElementsInstancedANGLE'; + + if ( extension === null ) { + + console.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); + return; + + } + + } + + extension[ methodName ]( mode, count, type, start * bytesPerElement, primcount ); + + info.update( count, mode, primcount ); + + } + + // + + this.setMode = setMode; + this.setIndex = setIndex; + this.render = render; + this.renderInstances = renderInstances; + +} + +function WebGLInfo( gl ) { + + const memory = { + geometries: 0, + textures: 0 + }; + + const render = { + frame: 0, + calls: 0, + triangles: 0, + points: 0, + lines: 0 + }; + + function update( count, mode, instanceCount ) { + + render.calls ++; + + switch ( mode ) { + + case 4: + render.triangles += instanceCount * ( count / 3 ); + break; + + case 1: + render.lines += instanceCount * ( count / 2 ); + break; + + case 3: + render.lines += instanceCount * ( count - 1 ); + break; + + case 2: + render.lines += instanceCount * count; + break; + + case 0: + render.points += instanceCount * count; + break; + + default: + console.error( 'THREE.WebGLInfo: Unknown draw mode:', mode ); + break; + + } + + } + + function reset() { + + render.frame ++; + render.calls = 0; + render.triangles = 0; + render.points = 0; + render.lines = 0; + + } + + return { + memory: memory, + render: render, + programs: null, + autoReset: true, + reset: reset, + update: update + }; + +} + +function numericalSort( a, b ) { + + return a[ 0 ] - b[ 0 ]; + +} + +function absNumericalSort( a, b ) { + + return Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] ); + +} + +function WebGLMorphtargets( gl ) { + + const influencesList = {}; + const morphInfluences = new Float32Array( 8 ); + + const workInfluences = []; + + for ( let i = 0; i < 8; i ++ ) { + + workInfluences[ i ] = [ i, 0 ]; + + } + + function update( object, geometry, material, program ) { + + const objectInfluences = object.morphTargetInfluences; + + // When object doesn't have morph target influences defined, we treat it as a 0-length array + // This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences + + const length = objectInfluences === undefined ? 0 : objectInfluences.length; + + let influences = influencesList[ geometry.id ]; + + if ( influences === undefined || influences.length !== length ) { + + // initialise list + + influences = []; + + for ( let i = 0; i < length; i ++ ) { + + influences[ i ] = [ i, 0 ]; + + } + + influencesList[ geometry.id ] = influences; + + } + + // Collect influences + + for ( let i = 0; i < length; i ++ ) { + + const influence = influences[ i ]; + + influence[ 0 ] = i; + influence[ 1 ] = objectInfluences[ i ]; + + } + + influences.sort( absNumericalSort ); + + for ( let i = 0; i < 8; i ++ ) { + + if ( i < length && influences[ i ][ 1 ] ) { + + workInfluences[ i ][ 0 ] = influences[ i ][ 0 ]; + workInfluences[ i ][ 1 ] = influences[ i ][ 1 ]; + + } else { + + workInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER; + workInfluences[ i ][ 1 ] = 0; + + } + + } + + workInfluences.sort( numericalSort ); + + const morphTargets = geometry.morphAttributes.position; + const morphNormals = geometry.morphAttributes.normal; + + let morphInfluencesSum = 0; + + for ( let i = 0; i < 8; i ++ ) { + + const influence = workInfluences[ i ]; + const index = influence[ 0 ]; + const value = influence[ 1 ]; + + if ( index !== Number.MAX_SAFE_INTEGER && value ) { + + if ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) { + + geometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] ); + + } + + if ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) { + + geometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] ); + + } + + morphInfluences[ i ] = value; + morphInfluencesSum += value; + + } else { + + if ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) { + + geometry.deleteAttribute( 'morphTarget' + i ); + + } + + if ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) { + + geometry.deleteAttribute( 'morphNormal' + i ); + + } + + morphInfluences[ i ] = 0; + + } + + } + + // GLSL shader uses formula baseinfluence * base + sum(target * influence) + // This allows us to switch between absolute morphs and relative morphs without changing shader code + // When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence) + const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum; + + program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence ); + program.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences ); + + } + + return { + + update: update + + }; + +} + +function WebGLObjects( gl, geometries, attributes, info ) { + + let updateMap = new WeakMap(); + + function update( object ) { + + const frame = info.render.frame; + + const geometry = object.geometry; + const buffergeometry = geometries.get( object, geometry ); + + // Update once per frame + + if ( updateMap.get( buffergeometry ) !== frame ) { + + geometries.update( buffergeometry ); + + updateMap.set( buffergeometry, frame ); + + } + + if ( object.isInstancedMesh ) { + + if ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) { + + object.addEventListener( 'dispose', onInstancedMeshDispose ); + + } + + attributes.update( object.instanceMatrix, 34962 ); + + if ( object.instanceColor !== null ) { + + attributes.update( object.instanceColor, 34962 ); + + } + + } + + return buffergeometry; + + } + + function dispose() { + + updateMap = new WeakMap(); + + } + + function onInstancedMeshDispose( event ) { + + const instancedMesh = event.target; + + instancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose ); + + attributes.remove( instancedMesh.instanceMatrix ); + + if ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor ); + + } + + return { + + update: update, + dispose: dispose + + }; + +} + +class DataTexture2DArray extends Texture { + + constructor( data = null, width = 1, height = 1, depth = 1 ) { + + super( null ); + + this.image = { data, width, height, depth }; + + this.magFilter = NearestFilter; + this.minFilter = NearestFilter; + + this.wrapR = ClampToEdgeWrapping; + + this.generateMipmaps = false; + this.flipY = false; + this.unpackAlignment = 1; + + this.needsUpdate = true; + + } + +} + +DataTexture2DArray.prototype.isDataTexture2DArray = true; + +class DataTexture3D 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.image = { data, width, height, depth }; + + this.magFilter = NearestFilter; + this.minFilter = NearestFilter; + + this.wrapR = ClampToEdgeWrapping; + + this.generateMipmaps = false; + this.flipY = false; + this.unpackAlignment = 1; + + this.needsUpdate = true; + + } + +} + +DataTexture3D.prototype.isDataTexture3D = true; + +/** + * Uniforms of a program. + * Those form a tree structure with a special top-level container for the root, + * which you get by calling 'new WebGLUniforms( gl, program )'. + * + * + * Properties of inner nodes including the top-level container: + * + * .seq - array of nested uniforms + * .map - nested uniforms by name + * + * + * Methods of all nodes except the top-level container: + * + * .setValue( gl, value, [textures] ) + * + * uploads a uniform value(s) + * the 'textures' parameter is needed for sampler uniforms + * + * + * Static methods of the top-level container (textures factorizations): + * + * .upload( gl, seq, values, textures ) + * + * sets uniforms in 'seq' to 'values[id].value' + * + * .seqWithValue( seq, values ) : filteredSeq + * + * filters 'seq' entries with corresponding entry in values + * + * + * Methods of the top-level container (textures factorizations): + * + * .setValue( gl, name, value, textures ) + * + * sets uniform with name 'name' to 'value' + * + * .setOptional( gl, obj, prop ) + * + * like .set for an optional property of the object + * + */ + +const emptyTexture = new Texture(); +const emptyTexture2dArray = new DataTexture2DArray(); +const emptyTexture3d = new DataTexture3D(); +const emptyCubeTexture = new CubeTexture(); + +// --- Utilities --- + +// Array Caches (provide typed arrays for temporary by size) + +const arrayCacheF32 = []; +const arrayCacheI32 = []; + +// Float32Array caches used for uploading Matrix uniforms + +const mat4array = new Float32Array( 16 ); +const mat3array = new Float32Array( 9 ); +const mat2array = new Float32Array( 4 ); + +// Flattening for arrays of vectors and matrices + +function flatten( array, nBlocks, blockSize ) { + + const firstElem = array[ 0 ]; + + if ( firstElem <= 0 || firstElem > 0 ) return array; + // unoptimized: ! isNaN( firstElem ) + // see http://jacksondunstan.com/articles/983 + + const n = nBlocks * blockSize; + let r = arrayCacheF32[ n ]; + + if ( r === undefined ) { + + r = new Float32Array( n ); + arrayCacheF32[ n ] = r; + + } + + if ( nBlocks !== 0 ) { + + firstElem.toArray( r, 0 ); + + for ( let i = 1, offset = 0; i !== nBlocks; ++ i ) { + + offset += blockSize; + array[ i ].toArray( r, offset ); + + } + + } + + return r; + +} + +function arraysEqual( a, b ) { + + if ( a.length !== b.length ) return false; + + for ( let i = 0, l = a.length; i < l; i ++ ) { + + if ( a[ i ] !== b[ i ] ) return false; + + } + + return true; + +} + +function copyArray( a, b ) { + + for ( let i = 0, l = b.length; i < l; i ++ ) { + + a[ i ] = b[ i ]; + + } + +} + +// Texture unit allocation + +function allocTexUnits( textures, n ) { + + let r = arrayCacheI32[ n ]; + + if ( r === undefined ) { + + r = new Int32Array( n ); + arrayCacheI32[ n ] = r; + + } + + for ( let i = 0; i !== n; ++ i ) { + + r[ i ] = textures.allocateTextureUnit(); + + } + + return r; + +} + +// --- Setters --- + +// Note: Defining these methods externally, because they come in a bunch +// and this way their names minify. + +// Single scalar + +function setValueV1f( gl, v ) { + + const cache = this.cache; + + if ( cache[ 0 ] === v ) return; + + gl.uniform1f( this.addr, v ); + + cache[ 0 ] = v; + +} + +// Single float vector (from flat array or THREE.VectorN) + +function setValueV2f( gl, v ) { + + const cache = this.cache; + + if ( v.x !== undefined ) { + + if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) { + + gl.uniform2f( this.addr, v.x, v.y ); + + cache[ 0 ] = v.x; + cache[ 1 ] = v.y; + + } + + } else { + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform2fv( this.addr, v ); + + copyArray( cache, v ); + + } + +} + +function setValueV3f( gl, v ) { + + const cache = this.cache; + + if ( v.x !== undefined ) { + + if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) { + + gl.uniform3f( this.addr, v.x, v.y, v.z ); + + cache[ 0 ] = v.x; + cache[ 1 ] = v.y; + cache[ 2 ] = v.z; + + } + + } else if ( v.r !== undefined ) { + + if ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) { + + gl.uniform3f( this.addr, v.r, v.g, v.b ); + + cache[ 0 ] = v.r; + cache[ 1 ] = v.g; + cache[ 2 ] = v.b; + + } + + } else { + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform3fv( this.addr, v ); + + copyArray( cache, v ); + + } + +} + +function setValueV4f( gl, v ) { + + const cache = this.cache; + + if ( v.x !== undefined ) { + + if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) { + + gl.uniform4f( this.addr, v.x, v.y, v.z, v.w ); + + cache[ 0 ] = v.x; + cache[ 1 ] = v.y; + cache[ 2 ] = v.z; + cache[ 3 ] = v.w; + + } + + } else { + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform4fv( this.addr, v ); + + copyArray( cache, v ); + + } + +} + +// Single matrix (from flat array or THREE.MatrixN) + +function setValueM2( gl, v ) { + + const cache = this.cache; + const elements = v.elements; + + if ( elements === undefined ) { + + if ( arraysEqual( cache, v ) ) return; + + gl.uniformMatrix2fv( this.addr, false, v ); + + copyArray( cache, v ); + + } else { + + if ( arraysEqual( cache, elements ) ) return; + + mat2array.set( elements ); + + gl.uniformMatrix2fv( this.addr, false, mat2array ); + + copyArray( cache, elements ); + + } + +} + +function setValueM3( gl, v ) { + + const cache = this.cache; + const elements = v.elements; + + if ( elements === undefined ) { + + if ( arraysEqual( cache, v ) ) return; + + gl.uniformMatrix3fv( this.addr, false, v ); + + copyArray( cache, v ); + + } else { + + if ( arraysEqual( cache, elements ) ) return; + + mat3array.set( elements ); + + gl.uniformMatrix3fv( this.addr, false, mat3array ); + + copyArray( cache, elements ); + + } + +} + +function setValueM4( gl, v ) { + + const cache = this.cache; + const elements = v.elements; + + if ( elements === undefined ) { + + if ( arraysEqual( cache, v ) ) return; + + gl.uniformMatrix4fv( this.addr, false, v ); + + copyArray( cache, v ); + + } else { + + if ( arraysEqual( cache, elements ) ) return; + + mat4array.set( elements ); + + gl.uniformMatrix4fv( this.addr, false, mat4array ); + + copyArray( cache, elements ); + + } + +} + +// Single integer / boolean + +function setValueV1i( gl, v ) { + + const cache = this.cache; + + if ( cache[ 0 ] === v ) return; + + gl.uniform1i( this.addr, v ); + + cache[ 0 ] = v; + +} + +// Single integer / boolean vector (from flat array) + +function setValueV2i( gl, v ) { + + const cache = this.cache; + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform2iv( this.addr, v ); + + copyArray( cache, v ); + +} + +function setValueV3i( gl, v ) { + + const cache = this.cache; + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform3iv( this.addr, v ); + + copyArray( cache, v ); + +} + +function setValueV4i( gl, v ) { + + const cache = this.cache; + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform4iv( this.addr, v ); + + copyArray( cache, v ); + +} + +// Single unsigned integer + +function setValueV1ui( gl, v ) { + + const cache = this.cache; + + if ( cache[ 0 ] === v ) return; + + gl.uniform1ui( this.addr, v ); + + cache[ 0 ] = v; + +} + +// Single unsigned integer vector (from flat array) + +function setValueV2ui( gl, v ) { + + const cache = this.cache; + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform2uiv( this.addr, v ); + + copyArray( cache, v ); + +} + +function setValueV3ui( gl, v ) { + + const cache = this.cache; + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform3uiv( this.addr, v ); + + copyArray( cache, v ); + +} + +function setValueV4ui( gl, v ) { + + const cache = this.cache; + + if ( arraysEqual( cache, v ) ) return; + + gl.uniform4uiv( this.addr, v ); + + copyArray( cache, v ); + +} + + +// Single texture (2D / Cube) + +function setValueT1( gl, v, textures ) { + + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + + if ( cache[ 0 ] !== unit ) { + + gl.uniform1i( this.addr, unit ); + cache[ 0 ] = unit; + + } + + textures.safeSetTexture2D( v || emptyTexture, unit ); + +} + +function setValueT3D1( gl, v, textures ) { + + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + + if ( cache[ 0 ] !== unit ) { + + gl.uniform1i( this.addr, unit ); + cache[ 0 ] = unit; + + } + + textures.setTexture3D( v || emptyTexture3d, unit ); + +} + +function setValueT6( gl, v, textures ) { + + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + + if ( cache[ 0 ] !== unit ) { + + gl.uniform1i( this.addr, unit ); + cache[ 0 ] = unit; + + } + + textures.safeSetTextureCube( v || emptyCubeTexture, unit ); + +} + +function setValueT2DArray1( gl, v, textures ) { + + const cache = this.cache; + const unit = textures.allocateTextureUnit(); + + if ( cache[ 0 ] !== unit ) { + + gl.uniform1i( this.addr, unit ); + cache[ 0 ] = unit; + + } + + textures.setTexture2DArray( v || emptyTexture2dArray, unit ); + +} + +// Helper to pick the right setter for the singular case + +function getSingularSetter( type ) { + + switch ( type ) { + + case 0x1406: return setValueV1f; // FLOAT + case 0x8b50: return setValueV2f; // _VEC2 + case 0x8b51: return setValueV3f; // _VEC3 + case 0x8b52: return setValueV4f; // _VEC4 + + case 0x8b5a: return setValueM2; // _MAT2 + case 0x8b5b: return setValueM3; // _MAT3 + case 0x8b5c: return setValueM4; // _MAT4 + + case 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL + case 0x8b53: case 0x8b57: return setValueV2i; // _VEC2 + case 0x8b54: case 0x8b58: return setValueV3i; // _VEC3 + case 0x8b55: case 0x8b59: return setValueV4i; // _VEC4 + + case 0x1405: return setValueV1ui; // UINT + case 0x8dc6: return setValueV2ui; // _VEC2 + case 0x8dc7: return setValueV3ui; // _VEC3 + case 0x8dc8: return setValueV4ui; // _VEC4 + + case 0x8b5e: // SAMPLER_2D + case 0x8d66: // SAMPLER_EXTERNAL_OES + case 0x8dca: // INT_SAMPLER_2D + case 0x8dd2: // UNSIGNED_INT_SAMPLER_2D + case 0x8b62: // SAMPLER_2D_SHADOW + return setValueT1; + + case 0x8b5f: // SAMPLER_3D + case 0x8dcb: // INT_SAMPLER_3D + case 0x8dd3: // UNSIGNED_INT_SAMPLER_3D + return setValueT3D1; + + case 0x8b60: // SAMPLER_CUBE + case 0x8dcc: // INT_SAMPLER_CUBE + case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE + case 0x8dc5: // SAMPLER_CUBE_SHADOW + return setValueT6; + + case 0x8dc1: // SAMPLER_2D_ARRAY + case 0x8dcf: // INT_SAMPLER_2D_ARRAY + case 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY + case 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW + return setValueT2DArray1; + + } + +} + + +// Array of scalars + +function setValueV1fArray( gl, v ) { + + gl.uniform1fv( this.addr, v ); + +} + +// Array of vectors (from flat array or array of THREE.VectorN) + +function setValueV2fArray( gl, v ) { + + const data = flatten( v, this.size, 2 ); + + gl.uniform2fv( this.addr, data ); + +} + +function setValueV3fArray( gl, v ) { + + const data = flatten( v, this.size, 3 ); + + gl.uniform3fv( this.addr, data ); + +} + +function setValueV4fArray( gl, v ) { + + const data = flatten( v, this.size, 4 ); + + gl.uniform4fv( this.addr, data ); + +} + +// Array of matrices (from flat array or array of THREE.MatrixN) + +function setValueM2Array( gl, v ) { + + const data = flatten( v, this.size, 4 ); + + gl.uniformMatrix2fv( this.addr, false, data ); + +} + +function setValueM3Array( gl, v ) { + + const data = flatten( v, this.size, 9 ); + + gl.uniformMatrix3fv( this.addr, false, data ); + +} + +function setValueM4Array( gl, v ) { + + const data = flatten( v, this.size, 16 ); + + gl.uniformMatrix4fv( this.addr, false, data ); + +} + +// Array of integer / boolean + +function setValueV1iArray( gl, v ) { + + gl.uniform1iv( this.addr, v ); + +} + +// Array of integer / boolean vectors (from flat array) + +function setValueV2iArray( gl, v ) { + + gl.uniform2iv( this.addr, v ); + +} + +function setValueV3iArray( gl, v ) { + + gl.uniform3iv( this.addr, v ); + +} + +function setValueV4iArray( gl, v ) { + + gl.uniform4iv( this.addr, v ); + +} + +// Array of unsigned integer + +function setValueV1uiArray( gl, v ) { + + gl.uniform1uiv( this.addr, v ); + +} + +// Array of unsigned integer vectors (from flat array) + +function setValueV2uiArray( gl, v ) { + + gl.uniform2uiv( this.addr, v ); + +} + +function setValueV3uiArray( gl, v ) { + + gl.uniform3uiv( this.addr, v ); + +} + +function setValueV4uiArray( gl, v ) { + + gl.uniform4uiv( this.addr, v ); + +} + + +// Array of textures (2D / Cube) + +function setValueT1Array( gl, v, textures ) { + + const n = v.length; + + const units = allocTexUnits( textures, n ); + + gl.uniform1iv( this.addr, units ); + + for ( let i = 0; i !== n; ++ i ) { + + textures.safeSetTexture2D( v[ i ] || emptyTexture, units[ i ] ); + + } + +} + +function setValueT6Array( gl, v, textures ) { + + const n = v.length; + + const units = allocTexUnits( textures, n ); + + gl.uniform1iv( this.addr, units ); + + for ( let i = 0; i !== n; ++ i ) { + + textures.safeSetTextureCube( v[ i ] || emptyCubeTexture, units[ i ] ); + + } + +} + +// Helper to pick the right setter for a pure (bottom-level) array + +function getPureArraySetter( type ) { + + switch ( type ) { + + case 0x1406: return setValueV1fArray; // FLOAT + case 0x8b50: return setValueV2fArray; // _VEC2 + case 0x8b51: return setValueV3fArray; // _VEC3 + case 0x8b52: return setValueV4fArray; // _VEC4 + + case 0x8b5a: return setValueM2Array; // _MAT2 + case 0x8b5b: return setValueM3Array; // _MAT3 + case 0x8b5c: return setValueM4Array; // _MAT4 + + case 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL + case 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2 + case 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3 + case 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4 + + case 0x1405: return setValueV1uiArray; // UINT + case 0x8dc6: return setValueV2uiArray; // _VEC2 + case 0x8dc7: return setValueV3uiArray; // _VEC3 + case 0x8dc8: return setValueV4uiArray; // _VEC4 + + case 0x8b5e: // SAMPLER_2D + case 0x8d66: // SAMPLER_EXTERNAL_OES + case 0x8dca: // INT_SAMPLER_2D + case 0x8dd2: // UNSIGNED_INT_SAMPLER_2D + case 0x8b62: // SAMPLER_2D_SHADOW + return setValueT1Array; + + case 0x8b60: // SAMPLER_CUBE + case 0x8dcc: // INT_SAMPLER_CUBE + case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE + case 0x8dc5: // SAMPLER_CUBE_SHADOW + return setValueT6Array; + + } + +} + +// --- Uniform Classes --- + +function SingleUniform( id, activeInfo, addr ) { + + this.id = id; + this.addr = addr; + this.cache = []; + this.setValue = getSingularSetter( activeInfo.type ); + + // this.path = activeInfo.name; // DEBUG + +} + +function PureArrayUniform( id, activeInfo, addr ) { + + this.id = id; + this.addr = addr; + this.cache = []; + this.size = activeInfo.size; + this.setValue = getPureArraySetter( activeInfo.type ); + + // this.path = activeInfo.name; // DEBUG + +} + +PureArrayUniform.prototype.updateCache = function ( data ) { + + const cache = this.cache; + + if ( data instanceof Float32Array && cache.length !== data.length ) { + + this.cache = new Float32Array( data.length ); + + } + + copyArray( cache, data ); + +}; + +function StructuredUniform( id ) { + + this.id = id; + + this.seq = []; + this.map = {}; + +} + +StructuredUniform.prototype.setValue = function ( gl, value, textures ) { + + const seq = this.seq; + + for ( let i = 0, n = seq.length; i !== n; ++ i ) { + + const u = seq[ i ]; + u.setValue( gl, value[ u.id ], textures ); + + } + +}; + +// --- Top-level --- + +// Parser - builds up the property tree from the path strings + +const RePathPart = /(\w+)(\])?(\[|\.)?/g; + +// extracts +// - the identifier (member name or array index) +// - followed by an optional right bracket (found when array index) +// - followed by an optional left bracket or dot (type of subscript) +// +// Note: These portions can be read in a non-overlapping fashion and +// allow straightforward parsing of the hierarchy that WebGL encodes +// in the uniform names. + +function addUniform( container, uniformObject ) { + + container.seq.push( uniformObject ); + container.map[ uniformObject.id ] = uniformObject; + +} + +function parseUniform( activeInfo, addr, container ) { + + const path = activeInfo.name, + pathLength = path.length; + + // reset RegExp object, because of the early exit of a previous run + RePathPart.lastIndex = 0; + + while ( true ) { + + const match = RePathPart.exec( path ), + matchEnd = RePathPart.lastIndex; + + let id = match[ 1 ]; + const idIsIndex = match[ 2 ] === ']', + subscript = match[ 3 ]; + + if ( idIsIndex ) id = id | 0; // convert to integer + + if ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) { + + // bare name or "pure" bottom-level array "[0]" suffix + + addUniform( container, subscript === undefined ? + new SingleUniform( id, activeInfo, addr ) : + new PureArrayUniform( id, activeInfo, addr ) ); + + break; + + } else { + + // step into inner node / create it in case it doesn't exist + + const map = container.map; + let next = map[ id ]; + + if ( next === undefined ) { + + next = new StructuredUniform( id ); + addUniform( container, next ); + + } + + container = next; + + } + + } + +} + +// Root Container + +function WebGLUniforms( gl, program ) { + + this.seq = []; + this.map = {}; + + const n = gl.getProgramParameter( program, 35718 ); + + for ( let i = 0; i < n; ++ i ) { + + const info = gl.getActiveUniform( program, i ), + addr = gl.getUniformLocation( program, info.name ); + + parseUniform( info, addr, this ); + + } + +} + +WebGLUniforms.prototype.setValue = function ( gl, name, value, textures ) { + + const u = this.map[ name ]; + + if ( u !== undefined ) u.setValue( gl, value, textures ); + +}; + +WebGLUniforms.prototype.setOptional = function ( gl, object, name ) { + + const v = object[ name ]; + + if ( v !== undefined ) this.setValue( gl, name, v ); + +}; + + +// Static interface + +WebGLUniforms.upload = function ( gl, seq, values, textures ) { + + for ( let i = 0, n = seq.length; i !== n; ++ i ) { + + const u = seq[ i ], + v = values[ u.id ]; + + if ( v.needsUpdate !== false ) { + + // note: always updating when .needsUpdate is undefined + u.setValue( gl, v.value, textures ); + + } + + } + +}; + +WebGLUniforms.seqWithValue = function ( seq, values ) { + + const r = []; + + for ( let i = 0, n = seq.length; i !== n; ++ i ) { + + const u = seq[ i ]; + if ( u.id in values ) r.push( u ); + + } + + return r; + +}; + +function WebGLShader( gl, type, string ) { + + const shader = gl.createShader( type ); + + gl.shaderSource( shader, string ); + gl.compileShader( shader ); + + return shader; + +} + +let programIdCount = 0; + +function addLineNumbers( string ) { + + const lines = string.split( '\n' ); + + for ( let i = 0; i < lines.length; i ++ ) { + + lines[ i ] = ( i + 1 ) + ': ' + lines[ i ]; + + } + + return lines.join( '\n' ); + +} + +function getEncodingComponents( encoding ) { + + switch ( encoding ) { + + case LinearEncoding: + return [ 'Linear', '( value )' ]; + case sRGBEncoding: + return [ 'sRGB', '( value )' ]; + case RGBEEncoding: + return [ 'RGBE', '( value )' ]; + case RGBM7Encoding: + return [ 'RGBM', '( value, 7.0 )' ]; + case RGBM16Encoding: + return [ 'RGBM', '( value, 16.0 )' ]; + case RGBDEncoding: + return [ 'RGBD', '( value, 256.0 )' ]; + case GammaEncoding: + return [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ]; + case LogLuvEncoding: + return [ 'LogLuv', '( value )' ]; + default: + console.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding ); + return [ 'Linear', '( value )' ]; + + } + +} + +function getShaderErrors( gl, shader, type ) { + + const status = gl.getShaderParameter( shader, 35713 ); + const log = gl.getShaderInfoLog( shader ).trim(); + + if ( status && log === '' ) return ''; + + // --enable-privileged-webgl-extension + // console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) ); + + const source = gl.getShaderSource( shader ); + + return 'THREE.WebGLShader: gl.getShaderInfoLog() ' + type + '\n' + log + addLineNumbers( source ); + +} + +function getTexelDecodingFunction( functionName, encoding ) { + + const components = getEncodingComponents( encoding ); + return 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }'; + +} + +function getTexelEncodingFunction( functionName, encoding ) { + + const components = getEncodingComponents( encoding ); + return 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }'; + +} + +function getToneMappingFunction( functionName, toneMapping ) { + + let toneMappingName; + + switch ( toneMapping ) { + + case LinearToneMapping: + toneMappingName = 'Linear'; + break; + + case ReinhardToneMapping: + toneMappingName = 'Reinhard'; + break; + + case CineonToneMapping: + toneMappingName = 'OptimizedCineon'; + break; + + case ACESFilmicToneMapping: + toneMappingName = 'ACESFilmic'; + break; + + case CustomToneMapping: + toneMappingName = 'Custom'; + break; + + default: + console.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping ); + toneMappingName = 'Linear'; + + } + + return 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }'; + +} + +function generateExtensions( parameters ) { + + const chunks = [ + ( parameters.extensionDerivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '', + ( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '', + ( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '', + ( parameters.extensionShaderTextureLOD || parameters.envMap || parameters.transmission > 0.0 ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : '' + ]; + + return chunks.filter( filterEmptyLine ).join( '\n' ); + +} + +function generateDefines( defines ) { + + const chunks = []; + + for ( const name in defines ) { + + const value = defines[ name ]; + + if ( value === false ) continue; + + chunks.push( '#define ' + name + ' ' + value ); + + } + + return chunks.join( '\n' ); + +} + +function fetchAttributeLocations( gl, program ) { + + const attributes = {}; + + const n = gl.getProgramParameter( program, 35721 ); + + for ( let i = 0; i < n; i ++ ) { + + const info = gl.getActiveAttrib( program, i ); + const name = info.name; + + // console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i ); + + attributes[ name ] = gl.getAttribLocation( program, name ); + + } + + return attributes; + +} + +function filterEmptyLine( string ) { + + return string !== ''; + +} + +function replaceLightNums( string, parameters ) { + + return string + .replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights ) + .replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights ) + .replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights ) + .replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights ) + .replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights ) + .replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows ) + .replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows ) + .replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows ); + +} + +function replaceClippingPlaneNums( string, parameters ) { + + return string + .replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes ) + .replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) ); + +} + +// Resolve Includes + +const includePattern = /^[ \t]*#include +<([\w\d./]+)>/gm; + +function resolveIncludes( string ) { + + return string.replace( includePattern, includeReplacer ); + +} + +function includeReplacer( match, include ) { + + const string = ShaderChunk[ include ]; + + if ( string === undefined ) { + + throw new Error( 'Can not resolve #include <' + include + '>' ); + + } + + return resolveIncludes( string ); + +} + +// Unroll Loops + +const deprecatedUnrollLoopPattern = /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g; +const unrollLoopPattern = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g; + +function unrollLoops( string ) { + + return string + .replace( unrollLoopPattern, loopReplacer ) + .replace( deprecatedUnrollLoopPattern, deprecatedLoopReplacer ); + +} + +function deprecatedLoopReplacer( match, start, end, snippet ) { + + console.warn( 'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.' ); + return loopReplacer( match, start, end, snippet ); + +} + +function loopReplacer( match, start, end, snippet ) { + + let string = ''; + + for ( let i = parseInt( start ); i < parseInt( end ); i ++ ) { + + string += snippet + .replace( /\[\s*i\s*\]/g, '[ ' + i + ' ]' ) + .replace( /UNROLLED_LOOP_INDEX/g, i ); + + } + + return string; + +} + +// + +function generatePrecision( parameters ) { + + let precisionstring = 'precision ' + parameters.precision + ' float;\nprecision ' + parameters.precision + ' int;'; + + if ( parameters.precision === 'highp' ) { + + precisionstring += '\n#define HIGH_PRECISION'; + + } else if ( parameters.precision === 'mediump' ) { + + precisionstring += '\n#define MEDIUM_PRECISION'; + + } else if ( parameters.precision === 'lowp' ) { + + precisionstring += '\n#define LOW_PRECISION'; + + } + + return precisionstring; + +} + +function generateShadowMapTypeDefine( parameters ) { + + let shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC'; + + if ( parameters.shadowMapType === PCFShadowMap ) { + + shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF'; + + } else if ( parameters.shadowMapType === PCFSoftShadowMap ) { + + shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT'; + + } else if ( parameters.shadowMapType === VSMShadowMap ) { + + shadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM'; + + } + + return shadowMapTypeDefine; + +} + +function generateEnvMapTypeDefine( parameters ) { + + let envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; + + if ( parameters.envMap ) { + + switch ( parameters.envMapMode ) { + + case CubeReflectionMapping: + case CubeRefractionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; + break; + + case CubeUVReflectionMapping: + case CubeUVRefractionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV'; + break; + + } + + } + + return envMapTypeDefine; + +} + +function generateEnvMapModeDefine( parameters ) { + + let envMapModeDefine = 'ENVMAP_MODE_REFLECTION'; + + if ( parameters.envMap ) { + + switch ( parameters.envMapMode ) { + + case CubeRefractionMapping: + case CubeUVRefractionMapping: + + envMapModeDefine = 'ENVMAP_MODE_REFRACTION'; + break; + + } + + } + + return envMapModeDefine; + +} + +function generateEnvMapBlendingDefine( parameters ) { + + let envMapBlendingDefine = 'ENVMAP_BLENDING_NONE'; + + if ( parameters.envMap ) { + + switch ( parameters.combine ) { + + case MultiplyOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY'; + break; + + case MixOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_MIX'; + break; + + case AddOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_ADD'; + break; + + } + + } + + return envMapBlendingDefine; + +} + +function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) { + + const gl = renderer.getContext(); + + const defines = parameters.defines; + + let vertexShader = parameters.vertexShader; + let fragmentShader = parameters.fragmentShader; + + const shadowMapTypeDefine = generateShadowMapTypeDefine( parameters ); + const envMapTypeDefine = generateEnvMapTypeDefine( parameters ); + const envMapModeDefine = generateEnvMapModeDefine( parameters ); + const envMapBlendingDefine = generateEnvMapBlendingDefine( parameters ); + + + const gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0; + + const customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters ); + + const customDefines = generateDefines( defines ); + + const program = gl.createProgram(); + + let prefixVertex, prefixFragment; + let versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\n' : ''; + + if ( parameters.isRawShaderMaterial ) { + + prefixVertex = [ + + customDefines + + ].filter( filterEmptyLine ).join( '\n' ); + + if ( prefixVertex.length > 0 ) { + + prefixVertex += '\n'; + + } + + prefixFragment = [ + + customExtensions, + customDefines + + ].filter( filterEmptyLine ).join( '\n' ); + + if ( prefixFragment.length > 0 ) { + + prefixFragment += '\n'; + + } + + } else { + + prefixVertex = [ + + generatePrecision( parameters ), + + '#define SHADER_NAME ' + parameters.shaderName, + + customDefines, + + parameters.instancing ? '#define USE_INSTANCING' : '', + parameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '', + + parameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '', + + '#define GAMMA_FACTOR ' + gammaFactorDefine, + + '#define MAX_BONES ' + parameters.maxBones, + ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', + ( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '', + + parameters.map ? '#define USE_MAP' : '', + parameters.envMap ? '#define USE_ENVMAP' : '', + parameters.envMap ? '#define ' + envMapModeDefine : '', + parameters.lightMap ? '#define USE_LIGHTMAP' : '', + parameters.aoMap ? '#define USE_AOMAP' : '', + parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', + parameters.bumpMap ? '#define USE_BUMPMAP' : '', + parameters.normalMap ? '#define USE_NORMALMAP' : '', + ( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '', + ( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '', + + parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', + parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', + parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', + parameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '', + parameters.specularMap ? '#define USE_SPECULARMAP' : '', + parameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '', + parameters.specularTintMap ? '#define USE_SPECULARTINTMAP' : '', + parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', + parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', + parameters.alphaMap ? '#define USE_ALPHAMAP' : '', + parameters.transmission ? '#define USE_TRANSMISSION' : '', + parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', + parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '', + + parameters.vertexTangents ? '#define USE_TANGENT' : '', + parameters.vertexColors ? '#define USE_COLOR' : '', + parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '', + parameters.vertexUvs ? '#define USE_UV' : '', + parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', + + parameters.flatShading ? '#define FLAT_SHADED' : '', + + parameters.skinning ? '#define USE_SKINNING' : '', + parameters.useVertexTexture ? '#define BONE_TEXTURE' : '', + + parameters.morphTargets ? '#define USE_MORPHTARGETS' : '', + parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '', + parameters.doubleSided ? '#define DOUBLE_SIDED' : '', + parameters.flipSided ? '#define FLIP_SIDED' : '', + + parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', + parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', + + parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '', + + parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', + ( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '', + + 'uniform mat4 modelMatrix;', + 'uniform mat4 modelViewMatrix;', + 'uniform mat4 projectionMatrix;', + 'uniform mat4 viewMatrix;', + 'uniform mat3 normalMatrix;', + 'uniform vec3 cameraPosition;', + 'uniform bool isOrthographic;', + + '#ifdef USE_INSTANCING', + + ' attribute mat4 instanceMatrix;', + + '#endif', + + '#ifdef USE_INSTANCING_COLOR', + + ' attribute vec3 instanceColor;', + + '#endif', + + 'attribute vec3 position;', + 'attribute vec3 normal;', + 'attribute vec2 uv;', + + '#ifdef USE_TANGENT', + + ' attribute vec4 tangent;', + + '#endif', + + '#if defined( USE_COLOR_ALPHA )', + + ' attribute vec4 color;', + + '#elif defined( USE_COLOR )', + + ' attribute vec3 color;', + + '#endif', + + '#ifdef USE_MORPHTARGETS', + + ' attribute vec3 morphTarget0;', + ' attribute vec3 morphTarget1;', + ' attribute vec3 morphTarget2;', + ' attribute vec3 morphTarget3;', + + ' #ifdef USE_MORPHNORMALS', + + ' attribute vec3 morphNormal0;', + ' attribute vec3 morphNormal1;', + ' attribute vec3 morphNormal2;', + ' attribute vec3 morphNormal3;', + + ' #else', + + ' attribute vec3 morphTarget4;', + ' attribute vec3 morphTarget5;', + ' attribute vec3 morphTarget6;', + ' attribute vec3 morphTarget7;', + + ' #endif', + + '#endif', + + '#ifdef USE_SKINNING', + + ' attribute vec4 skinIndex;', + ' attribute vec4 skinWeight;', + + '#endif', + + '\n' + + ].filter( filterEmptyLine ).join( '\n' ); + + prefixFragment = [ + + customExtensions, + + generatePrecision( parameters ), + + '#define SHADER_NAME ' + parameters.shaderName, + + customDefines, + + parameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest + ( parameters.alphaTest % 1 ? '' : '.0' ) : '', // add '.0' if integer + + '#define GAMMA_FACTOR ' + gammaFactorDefine, + + ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', + ( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '', + + parameters.map ? '#define USE_MAP' : '', + parameters.matcap ? '#define USE_MATCAP' : '', + parameters.envMap ? '#define USE_ENVMAP' : '', + parameters.envMap ? '#define ' + envMapTypeDefine : '', + parameters.envMap ? '#define ' + envMapModeDefine : '', + parameters.envMap ? '#define ' + envMapBlendingDefine : '', + parameters.lightMap ? '#define USE_LIGHTMAP' : '', + parameters.aoMap ? '#define USE_AOMAP' : '', + parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', + parameters.bumpMap ? '#define USE_BUMPMAP' : '', + parameters.normalMap ? '#define USE_NORMALMAP' : '', + ( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '', + ( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '', + parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', + parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', + parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', + parameters.specularMap ? '#define USE_SPECULARMAP' : '', + parameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '', + parameters.specularTintMap ? '#define USE_SPECULARTINTMAP' : '', + parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', + parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', + parameters.alphaMap ? '#define USE_ALPHAMAP' : '', + + parameters.sheen ? '#define USE_SHEEN' : '', + parameters.transmission ? '#define USE_TRANSMISSION' : '', + parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', + parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '', + + parameters.vertexTangents ? '#define USE_TANGENT' : '', + parameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '', + parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '', + parameters.vertexUvs ? '#define USE_UV' : '', + parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', + + parameters.gradientMap ? '#define USE_GRADIENTMAP' : '', + + parameters.flatShading ? '#define FLAT_SHADED' : '', + + parameters.doubleSided ? '#define DOUBLE_SIDED' : '', + parameters.flipSided ? '#define FLIP_SIDED' : '', + + parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', + parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', + + parameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '', + + parameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '', + + parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', + ( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '', + + ( ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ) ? '#define TEXTURE_LOD_EXT' : '', + + 'uniform mat4 viewMatrix;', + 'uniform vec3 cameraPosition;', + 'uniform bool isOrthographic;', + + ( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '', + ( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below + ( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '', + + parameters.dithering ? '#define DITHERING' : '', + + ShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below + parameters.map ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '', + parameters.matcap ? getTexelDecodingFunction( 'matcapTexelToLinear', parameters.matcapEncoding ) : '', + parameters.envMap ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '', + parameters.emissiveMap ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '', + parameters.specularTintMap ? getTexelDecodingFunction( 'specularTintMapTexelToLinear', parameters.specularTintMapEncoding ) : '', + parameters.lightMap ? getTexelDecodingFunction( 'lightMapTexelToLinear', parameters.lightMapEncoding ) : '', + getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ), + + parameters.depthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '', + + '\n' + + ].filter( filterEmptyLine ).join( '\n' ); + + } + + vertexShader = resolveIncludes( vertexShader ); + vertexShader = replaceLightNums( vertexShader, parameters ); + vertexShader = replaceClippingPlaneNums( vertexShader, parameters ); + + fragmentShader = resolveIncludes( fragmentShader ); + fragmentShader = replaceLightNums( fragmentShader, parameters ); + fragmentShader = replaceClippingPlaneNums( fragmentShader, parameters ); + + vertexShader = unrollLoops( vertexShader ); + fragmentShader = unrollLoops( fragmentShader ); + + if ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) { + + // GLSL 3.0 conversion for built-in materials and ShaderMaterial + + versionString = '#version 300 es\n'; + + prefixVertex = [ + '#define attribute in', + '#define varying out', + '#define texture2D texture' + ].join( '\n' ) + '\n' + prefixVertex; + + prefixFragment = [ + '#define varying in', + ( parameters.glslVersion === GLSL3 ) ? '' : 'out highp vec4 pc_fragColor;', + ( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor', + '#define gl_FragDepthEXT gl_FragDepth', + '#define texture2D texture', + '#define textureCube texture', + '#define texture2DProj textureProj', + '#define texture2DLodEXT textureLod', + '#define texture2DProjLodEXT textureProjLod', + '#define textureCubeLodEXT textureLod', + '#define texture2DGradEXT textureGrad', + '#define texture2DProjGradEXT textureProjGrad', + '#define textureCubeGradEXT textureGrad' + ].join( '\n' ) + '\n' + prefixFragment; + + } + + const vertexGlsl = versionString + prefixVertex + vertexShader; + const fragmentGlsl = versionString + prefixFragment + fragmentShader; + + // console.log( '*VERTEX*', vertexGlsl ); + // console.log( '*FRAGMENT*', fragmentGlsl ); + + const glVertexShader = WebGLShader( gl, 35633, vertexGlsl ); + const glFragmentShader = WebGLShader( gl, 35632, fragmentGlsl ); + + gl.attachShader( program, glVertexShader ); + gl.attachShader( program, glFragmentShader ); + + // Force a particular attribute to index 0. + + if ( parameters.index0AttributeName !== undefined ) { + + gl.bindAttribLocation( program, 0, parameters.index0AttributeName ); + + } else if ( parameters.morphTargets === true ) { + + // programs with morphTargets displace position out of attribute 0 + gl.bindAttribLocation( program, 0, 'position' ); + + } + + gl.linkProgram( program ); + + // check for link errors + if ( renderer.debug.checkShaderErrors ) { + + const programLog = gl.getProgramInfoLog( program ).trim(); + const vertexLog = gl.getShaderInfoLog( glVertexShader ).trim(); + const fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim(); + + let runnable = true; + let haveDiagnostics = true; + + if ( gl.getProgramParameter( program, 35714 ) === false ) { + + runnable = false; + + const vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' ); + const fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' ); + + console.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), '35715', gl.getProgramParameter( program, 35715 ), 'gl.getProgramInfoLog', programLog, vertexErrors, fragmentErrors ); + + } else if ( programLog !== '' ) { + + console.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog ); + + } else if ( vertexLog === '' || fragmentLog === '' ) { + + haveDiagnostics = false; + + } + + if ( haveDiagnostics ) { + + this.diagnostics = { + + runnable: runnable, + + programLog: programLog, + + vertexShader: { + + log: vertexLog, + prefix: prefixVertex + + }, + + fragmentShader: { + + log: fragmentLog, + prefix: prefixFragment + + } + + }; + + } + + } + + // Clean up + + // Crashes in iOS9 and iOS10. #18402 + // gl.detachShader( program, glVertexShader ); + // gl.detachShader( program, glFragmentShader ); + + gl.deleteShader( glVertexShader ); + gl.deleteShader( glFragmentShader ); + + // set up caching for uniform locations + + let cachedUniforms; + + this.getUniforms = function () { + + if ( cachedUniforms === undefined ) { + + cachedUniforms = new WebGLUniforms( gl, program ); + + } + + return cachedUniforms; + + }; + + // set up caching for attribute locations + + let cachedAttributes; + + this.getAttributes = function () { + + if ( cachedAttributes === undefined ) { + + cachedAttributes = fetchAttributeLocations( gl, program ); + + } + + return cachedAttributes; + + }; + + // free resource + + this.destroy = function () { + + bindingStates.releaseStatesOfProgram( this ); + + gl.deleteProgram( program ); + this.program = undefined; + + }; + + // + + this.name = parameters.shaderName; + this.id = programIdCount ++; + this.cacheKey = cacheKey; + this.usedTimes = 1; + this.program = program; + this.vertexShader = glVertexShader; + this.fragmentShader = glFragmentShader; + + return this; + +} + +function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ) { + + const programs = []; + + const isWebGL2 = capabilities.isWebGL2; + const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer; + const floatVertexTextures = capabilities.floatVertexTextures; + const maxVertexUniforms = capabilities.maxVertexUniforms; + const vertexTextures = capabilities.vertexTextures; + + let precision = capabilities.precision; + + const shaderIDs = { + MeshDepthMaterial: 'depth', + MeshDistanceMaterial: 'distanceRGBA', + MeshNormalMaterial: 'normal', + MeshBasicMaterial: 'basic', + MeshLambertMaterial: 'lambert', + MeshPhongMaterial: 'phong', + MeshToonMaterial: 'toon', + MeshStandardMaterial: 'physical', + MeshPhysicalMaterial: 'physical', + MeshMatcapMaterial: 'matcap', + LineBasicMaterial: 'basic', + LineDashedMaterial: 'dashed', + PointsMaterial: 'points', + ShadowMaterial: 'shadow', + SpriteMaterial: 'sprite' + }; + + const parameterNames = [ + 'precision', 'isWebGL2', 'supportsVertexTextures', 'outputEncoding', 'instancing', 'instancingColor', + 'map', 'mapEncoding', 'matcap', 'matcapEncoding', 'envMap', 'envMapMode', 'envMapEncoding', 'envMapCubeUV', + 'lightMap', 'lightMapEncoding', 'aoMap', 'emissiveMap', 'emissiveMapEncoding', 'bumpMap', 'normalMap', + 'objectSpaceNormalMap', 'tangentSpaceNormalMap', 'clearcoatMap', 'clearcoatRoughnessMap', 'clearcoatNormalMap', 'displacementMap', + 'specularMap', 'specularIntensityMap', 'specularTintMap', 'specularTintMapEncoding', 'roughnessMap', 'metalnessMap', 'gradientMap', + 'alphaMap', 'combine', 'vertexColors', 'vertexAlphas', 'vertexTangents', 'vertexUvs', 'uvsVertexOnly', 'fog', 'useFog', 'fogExp2', + 'flatShading', 'sizeAttenuation', 'logarithmicDepthBuffer', 'skinning', + 'maxBones', 'useVertexTexture', 'morphTargets', 'morphNormals', 'premultipliedAlpha', + 'numDirLights', 'numPointLights', 'numSpotLights', 'numHemiLights', 'numRectAreaLights', + 'numDirLightShadows', 'numPointLightShadows', 'numSpotLightShadows', + 'shadowMapEnabled', 'shadowMapType', 'toneMapping', 'physicallyCorrectLights', + 'alphaTest', 'doubleSided', 'flipSided', 'numClippingPlanes', 'numClipIntersection', 'depthPacking', 'dithering', + 'sheen', 'transmission', 'transmissionMap', 'thicknessMap' + ]; + + function getMaxBones( object ) { + + const skeleton = object.skeleton; + const bones = skeleton.bones; + + if ( floatVertexTextures ) { + + return 1024; + + } else { + + // default for when object is not specified + // ( for example when prebuilding shader to be used with multiple objects ) + // + // - leave some extra space for other uniforms + // - limit here is ANGLE's 254 max uniform vectors + // (up to 54 should be safe) + + const nVertexUniforms = maxVertexUniforms; + const nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 ); + + const maxBones = Math.min( nVertexMatrices, bones.length ); + + if ( maxBones < bones.length ) { + + console.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' ); + return 0; + + } + + return maxBones; + + } + + } + + function getTextureEncodingFromMap( map ) { + + let encoding; + + if ( map && map.isTexture ) { + + encoding = map.encoding; + + } else if ( map && map.isWebGLRenderTarget ) { + + console.warn( 'THREE.WebGLPrograms.getTextureEncodingFromMap: don\'t use render targets as textures. Use their .texture property instead.' ); + encoding = map.texture.encoding; + + } else { + + encoding = LinearEncoding; + + } + + return encoding; + + } + + function getParameters( material, lights, shadows, scene, object ) { + + const fog = scene.fog; + const environment = material.isMeshStandardMaterial ? scene.environment : null; + + const envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment ); + + const shaderID = shaderIDs[ material.type ]; + + // heuristics to create shader parameters according to lights in the scene + // (not to blow over maxLights budget) + + const maxBones = object.isSkinnedMesh ? getMaxBones( object ) : 0; + + if ( material.precision !== null ) { + + precision = capabilities.getMaxPrecision( material.precision ); + + if ( precision !== material.precision ) { + + console.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' ); + + } + + } + + let vertexShader, fragmentShader; + + if ( shaderID ) { + + const shader = ShaderLib[ shaderID ]; + + vertexShader = shader.vertexShader; + fragmentShader = shader.fragmentShader; + + } else { + + vertexShader = material.vertexShader; + fragmentShader = material.fragmentShader; + + } + + const currentRenderTarget = renderer.getRenderTarget(); + + const parameters = { + + isWebGL2: isWebGL2, + + shaderID: shaderID, + shaderName: material.type, + + vertexShader: vertexShader, + fragmentShader: fragmentShader, + defines: material.defines, + + isRawShaderMaterial: material.isRawShaderMaterial === true, + glslVersion: material.glslVersion, + + precision: precision, + + instancing: object.isInstancedMesh === true, + instancingColor: object.isInstancedMesh === true && object.instanceColor !== null, + + supportsVertexTextures: vertexTextures, + outputEncoding: ( currentRenderTarget !== null ) ? getTextureEncodingFromMap( currentRenderTarget.texture ) : renderer.outputEncoding, + map: !! material.map, + mapEncoding: getTextureEncodingFromMap( material.map ), + matcap: !! material.matcap, + matcapEncoding: getTextureEncodingFromMap( material.matcap ), + envMap: !! envMap, + envMapMode: envMap && envMap.mapping, + envMapEncoding: getTextureEncodingFromMap( envMap ), + envMapCubeUV: ( !! envMap ) && ( ( envMap.mapping === CubeUVReflectionMapping ) || ( envMap.mapping === CubeUVRefractionMapping ) ), + lightMap: !! material.lightMap, + lightMapEncoding: getTextureEncodingFromMap( material.lightMap ), + aoMap: !! material.aoMap, + emissiveMap: !! material.emissiveMap, + emissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap ), + bumpMap: !! material.bumpMap, + normalMap: !! material.normalMap, + objectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap, + tangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap, + clearcoatMap: !! material.clearcoatMap, + clearcoatRoughnessMap: !! material.clearcoatRoughnessMap, + clearcoatNormalMap: !! material.clearcoatNormalMap, + displacementMap: !! material.displacementMap, + roughnessMap: !! material.roughnessMap, + metalnessMap: !! material.metalnessMap, + specularMap: !! material.specularMap, + specularIntensityMap: !! material.specularIntensityMap, + specularTintMap: !! material.specularTintMap, + specularTintMapEncoding: getTextureEncodingFromMap( material.specularTintMap ), + alphaMap: !! material.alphaMap, + + gradientMap: !! material.gradientMap, + + sheen: !! material.sheen, + + transmission: !! material.transmission, + transmissionMap: !! material.transmissionMap, + thicknessMap: !! material.thicknessMap, + + combine: material.combine, + + vertexTangents: ( material.normalMap && object.geometry && object.geometry.attributes.tangent ), + vertexColors: material.vertexColors, + vertexAlphas: material.vertexColors === true && object.geometry && object.geometry.attributes.color && object.geometry.attributes.color.itemSize === 4, + vertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularTintMap, + uvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.transmission || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularTintMap ) && !! material.displacementMap, + + fog: !! fog, + useFog: material.fog, + fogExp2: ( fog && fog.isFogExp2 ), + + flatShading: !! material.flatShading, + + sizeAttenuation: material.sizeAttenuation, + logarithmicDepthBuffer: logarithmicDepthBuffer, + + skinning: object.isSkinnedMesh === true && maxBones > 0, + maxBones: maxBones, + useVertexTexture: floatVertexTextures, + + morphTargets: object.geometry && object.geometry.morphAttributes.position !== undefined, + morphNormals: object.geometry && object.geometry.morphAttributes.normal !== undefined, + + numDirLights: lights.directional.length, + numPointLights: lights.point.length, + numSpotLights: lights.spot.length, + numRectAreaLights: lights.rectArea.length, + numHemiLights: lights.hemi.length, + + numDirLightShadows: lights.directionalShadowMap.length, + numPointLightShadows: lights.pointShadowMap.length, + numSpotLightShadows: lights.spotShadowMap.length, + + numClippingPlanes: clipping.numPlanes, + numClipIntersection: clipping.numIntersection, + + dithering: material.dithering, + + shadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0, + shadowMapType: renderer.shadowMap.type, + + toneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping, + physicallyCorrectLights: renderer.physicallyCorrectLights, + + premultipliedAlpha: material.premultipliedAlpha, + + alphaTest: material.alphaTest, + doubleSided: material.side === DoubleSide, + flipSided: material.side === BackSide, + + depthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false, + + index0AttributeName: material.index0AttributeName, + + extensionDerivatives: material.extensions && material.extensions.derivatives, + extensionFragDepth: material.extensions && material.extensions.fragDepth, + extensionDrawBuffers: material.extensions && material.extensions.drawBuffers, + extensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD, + + rendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ), + rendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ), + rendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ), + + customProgramCacheKey: material.customProgramCacheKey() + + }; + + return parameters; + + } + + function getProgramCacheKey( parameters ) { + + const array = []; + + if ( parameters.shaderID ) { + + array.push( parameters.shaderID ); + + } else { + + array.push( parameters.fragmentShader ); + array.push( parameters.vertexShader ); + + } + + if ( parameters.defines !== undefined ) { + + for ( const name in parameters.defines ) { + + array.push( name ); + array.push( parameters.defines[ name ] ); + + } + + } + + if ( parameters.isRawShaderMaterial === false ) { + + for ( let i = 0; i < parameterNames.length; i ++ ) { + + array.push( parameters[ parameterNames[ i ] ] ); + + } + + array.push( renderer.outputEncoding ); + array.push( renderer.gammaFactor ); + + } + + array.push( parameters.customProgramCacheKey ); + + return array.join(); + + } + + function getUniforms( material ) { + + const shaderID = shaderIDs[ material.type ]; + let uniforms; + + if ( shaderID ) { + + const shader = ShaderLib[ shaderID ]; + uniforms = UniformsUtils.clone( shader.uniforms ); + + } else { + + uniforms = material.uniforms; + + } + + return uniforms; + + } + + function acquireProgram( parameters, cacheKey ) { + + let program; + + // Check if code has been already compiled + for ( let p = 0, pl = programs.length; p < pl; p ++ ) { + + const preexistingProgram = programs[ p ]; + + if ( preexistingProgram.cacheKey === cacheKey ) { + + program = preexistingProgram; + ++ program.usedTimes; + + break; + + } + + } + + if ( program === undefined ) { + + program = new WebGLProgram( renderer, cacheKey, parameters, bindingStates ); + programs.push( program ); + + } + + return program; + + } + + function releaseProgram( program ) { + + if ( -- program.usedTimes === 0 ) { + + // Remove from unordered set + const i = programs.indexOf( program ); + programs[ i ] = programs[ programs.length - 1 ]; + programs.pop(); + + // Free WebGL resources + program.destroy(); + + } + + } + + return { + getParameters: getParameters, + getProgramCacheKey: getProgramCacheKey, + getUniforms: getUniforms, + acquireProgram: acquireProgram, + releaseProgram: releaseProgram, + // Exposed for resource monitoring & error feedback via renderer.info: + programs: programs + }; + +} + +function WebGLProperties() { + + let properties = new WeakMap(); + + function get( object ) { + + let map = properties.get( object ); + + if ( map === undefined ) { + + map = {}; + properties.set( object, map ); + + } + + return map; + + } + + function remove( object ) { + + properties.delete( object ); + + } + + function update( object, key, value ) { + + properties.get( object )[ key ] = value; + + } + + function dispose() { + + properties = new WeakMap(); + + } + + return { + get: get, + remove: remove, + update: update, + dispose: dispose + }; + +} + +function painterSortStable( a, b ) { + + if ( a.groupOrder !== b.groupOrder ) { + + return a.groupOrder - b.groupOrder; + + } else if ( a.renderOrder !== b.renderOrder ) { + + return a.renderOrder - b.renderOrder; + + } else if ( a.program !== b.program ) { + + return a.program.id - b.program.id; + + } else if ( a.material.id !== b.material.id ) { + + return a.material.id - b.material.id; + + } else if ( a.z !== b.z ) { + + return a.z - b.z; + + } else { + + return a.id - b.id; + + } + +} + +function reversePainterSortStable( a, b ) { + + if ( a.groupOrder !== b.groupOrder ) { + + return a.groupOrder - b.groupOrder; + + } else if ( a.renderOrder !== b.renderOrder ) { + + return a.renderOrder - b.renderOrder; + + } else if ( a.z !== b.z ) { + + return b.z - a.z; + + } else { + + return a.id - b.id; + + } + +} + + +function WebGLRenderList( properties ) { + + const renderItems = []; + let renderItemsIndex = 0; + + const opaque = []; + const transmissive = []; + const transparent = []; + + const defaultProgram = { id: - 1 }; + + function init() { + + renderItemsIndex = 0; + + opaque.length = 0; + transmissive.length = 0; + transparent.length = 0; + + } + + function getNextRenderItem( object, geometry, material, groupOrder, z, group ) { + + let renderItem = renderItems[ renderItemsIndex ]; + const materialProperties = properties.get( material ); + + if ( renderItem === undefined ) { + + renderItem = { + id: object.id, + object: object, + geometry: geometry, + material: material, + program: materialProperties.program || defaultProgram, + groupOrder: groupOrder, + renderOrder: object.renderOrder, + z: z, + group: group + }; + + renderItems[ renderItemsIndex ] = renderItem; + + } else { + + renderItem.id = object.id; + renderItem.object = object; + renderItem.geometry = geometry; + renderItem.material = material; + renderItem.program = materialProperties.program || defaultProgram; + renderItem.groupOrder = groupOrder; + renderItem.renderOrder = object.renderOrder; + renderItem.z = z; + renderItem.group = group; + + } + + renderItemsIndex ++; + + return renderItem; + + } + + function push( object, geometry, material, groupOrder, z, group ) { + + const renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group ); + + if ( material.transmission > 0.0 ) { + + transmissive.push( renderItem ); + + } else if ( material.transparent === true ) { + + transparent.push( renderItem ); + + } else { + + opaque.push( renderItem ); + + } + + } + + function unshift( object, geometry, material, groupOrder, z, group ) { + + const renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group ); + + if ( material.transmission > 0.0 ) { + + transmissive.unshift( renderItem ); + + } else if ( material.transparent === true ) { + + transparent.unshift( renderItem ); + + } else { + + opaque.unshift( renderItem ); + + } + + } + + function sort( customOpaqueSort, customTransparentSort ) { + + if ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable ); + if ( transmissive.length > 1 ) transmissive.sort( customTransparentSort || reversePainterSortStable ); + if ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable ); + + } + + function finish() { + + // Clear references from inactive renderItems in the list + + for ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) { + + const renderItem = renderItems[ i ]; + + if ( renderItem.id === null ) break; + + renderItem.id = null; + renderItem.object = null; + renderItem.geometry = null; + renderItem.material = null; + renderItem.program = null; + renderItem.group = null; + + } + + } + + return { + + opaque: opaque, + transmissive: transmissive, + transparent: transparent, + + init: init, + push: push, + unshift: unshift, + finish: finish, + + sort: sort + }; + +} + +function WebGLRenderLists( properties ) { + + let lists = new WeakMap(); + + function get( scene, renderCallDepth ) { + + let list; + + if ( lists.has( scene ) === false ) { + + list = new WebGLRenderList( properties ); + lists.set( scene, [ list ] ); + + } else { + + if ( renderCallDepth >= lists.get( scene ).length ) { + + list = new WebGLRenderList( properties ); + lists.get( scene ).push( list ); + + } else { + + list = lists.get( scene )[ renderCallDepth ]; + + } + + } + + return list; + + } + + function dispose() { + + lists = new WeakMap(); + + } + + return { + get: get, + dispose: dispose + }; + +} + +function UniformsCache() { + + const lights = {}; + + return { + + get: function ( light ) { + + if ( lights[ light.id ] !== undefined ) { + + return lights[ light.id ]; + + } + + let uniforms; + + switch ( light.type ) { + + case 'DirectionalLight': + uniforms = { + direction: new Vector3(), + color: new Color() + }; + break; + + case 'SpotLight': + uniforms = { + position: new Vector3(), + direction: new Vector3(), + color: new Color(), + distance: 0, + coneCos: 0, + penumbraCos: 0, + decay: 0 + }; + break; + + case 'PointLight': + uniforms = { + position: new Vector3(), + color: new Color(), + distance: 0, + decay: 0 + }; + break; + + case 'HemisphereLight': + uniforms = { + direction: new Vector3(), + skyColor: new Color(), + groundColor: new Color() + }; + break; + + case 'RectAreaLight': + uniforms = { + color: new Color(), + position: new Vector3(), + halfWidth: new Vector3(), + halfHeight: new Vector3() + }; + break; + + } + + lights[ light.id ] = uniforms; + + return uniforms; + + } + + }; + +} + +function ShadowUniformsCache() { + + const lights = {}; + + return { + + get: function ( light ) { + + if ( lights[ light.id ] !== undefined ) { + + return lights[ light.id ]; + + } + + let uniforms; + + switch ( light.type ) { + + case 'DirectionalLight': + uniforms = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2() + }; + break; + + case 'SpotLight': + uniforms = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2() + }; + break; + + case 'PointLight': + uniforms = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2(), + shadowCameraNear: 1, + shadowCameraFar: 1000 + }; + break; + + // TODO (abelnation): set RectAreaLight shadow uniforms + + } + + lights[ light.id ] = uniforms; + + return uniforms; + + } + + }; + +} + + + +let nextVersion = 0; + +function shadowCastingLightsFirst( lightA, lightB ) { + + return ( lightB.castShadow ? 1 : 0 ) - ( lightA.castShadow ? 1 : 0 ); + +} + +function WebGLLights( extensions, capabilities ) { + + const cache = new UniformsCache(); + + const shadowCache = ShadowUniformsCache(); + + const state = { + + version: 0, + + hash: { + directionalLength: - 1, + pointLength: - 1, + spotLength: - 1, + rectAreaLength: - 1, + hemiLength: - 1, + + numDirectionalShadows: - 1, + numPointShadows: - 1, + numSpotShadows: - 1 + }, + + ambient: [ 0, 0, 0 ], + probe: [], + directional: [], + directionalShadow: [], + directionalShadowMap: [], + directionalShadowMatrix: [], + spot: [], + spotShadow: [], + spotShadowMap: [], + spotShadowMatrix: [], + rectArea: [], + rectAreaLTC1: null, + rectAreaLTC2: null, + point: [], + pointShadow: [], + pointShadowMap: [], + pointShadowMatrix: [], + hemi: [] + + }; + + for ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() ); + + const vector3 = new Vector3(); + const matrix4 = new Matrix4(); + const matrix42 = new Matrix4(); + + function setup( lights ) { + + let r = 0, g = 0, b = 0; + + for ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 ); + + let directionalLength = 0; + let pointLength = 0; + let spotLength = 0; + let rectAreaLength = 0; + let hemiLength = 0; + + let numDirectionalShadows = 0; + let numPointShadows = 0; + let numSpotShadows = 0; + + lights.sort( shadowCastingLightsFirst ); + + for ( let i = 0, l = lights.length; i < l; i ++ ) { + + const light = lights[ i ]; + + const color = light.color; + const intensity = light.intensity; + const distance = light.distance; + + const shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null; + + if ( light.isAmbientLight ) { + + r += color.r * intensity; + g += color.g * intensity; + b += color.b * intensity; + + } else if ( light.isLightProbe ) { + + for ( let j = 0; j < 9; j ++ ) { + + state.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity ); + + } + + } else if ( light.isDirectionalLight ) { + + const uniforms = cache.get( light ); + + uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); + + if ( light.castShadow ) { + + const shadow = light.shadow; + + const shadowUniforms = shadowCache.get( light ); + + shadowUniforms.shadowBias = shadow.bias; + shadowUniforms.shadowNormalBias = shadow.normalBias; + shadowUniforms.shadowRadius = shadow.radius; + shadowUniforms.shadowMapSize = shadow.mapSize; + + state.directionalShadow[ directionalLength ] = shadowUniforms; + state.directionalShadowMap[ directionalLength ] = shadowMap; + state.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix; + + numDirectionalShadows ++; + + } + + state.directional[ directionalLength ] = uniforms; + + directionalLength ++; + + } else if ( light.isSpotLight ) { + + const uniforms = cache.get( light ); + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + + uniforms.color.copy( color ).multiplyScalar( intensity ); + uniforms.distance = distance; + + uniforms.coneCos = Math.cos( light.angle ); + uniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) ); + uniforms.decay = light.decay; + + if ( light.castShadow ) { + + const shadow = light.shadow; + + const shadowUniforms = shadowCache.get( light ); + + shadowUniforms.shadowBias = shadow.bias; + shadowUniforms.shadowNormalBias = shadow.normalBias; + shadowUniforms.shadowRadius = shadow.radius; + shadowUniforms.shadowMapSize = shadow.mapSize; + + state.spotShadow[ spotLength ] = shadowUniforms; + state.spotShadowMap[ spotLength ] = shadowMap; + state.spotShadowMatrix[ spotLength ] = light.shadow.matrix; + + numSpotShadows ++; + + } + + state.spot[ spotLength ] = uniforms; + + spotLength ++; + + } else if ( light.isRectAreaLight ) { + + const uniforms = cache.get( light ); + + // (a) intensity is the total visible light emitted + //uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) ); + + // (b) intensity is the brightness of the light + uniforms.color.copy( color ).multiplyScalar( intensity ); + + uniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 ); + uniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 ); + + state.rectArea[ rectAreaLength ] = uniforms; + + rectAreaLength ++; + + } else if ( light.isPointLight ) { + + const uniforms = cache.get( light ); + + uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); + uniforms.distance = light.distance; + uniforms.decay = light.decay; + + if ( light.castShadow ) { + + const shadow = light.shadow; + + const shadowUniforms = shadowCache.get( light ); + + shadowUniforms.shadowBias = shadow.bias; + shadowUniforms.shadowNormalBias = shadow.normalBias; + shadowUniforms.shadowRadius = shadow.radius; + shadowUniforms.shadowMapSize = shadow.mapSize; + shadowUniforms.shadowCameraNear = shadow.camera.near; + shadowUniforms.shadowCameraFar = shadow.camera.far; + + state.pointShadow[ pointLength ] = shadowUniforms; + state.pointShadowMap[ pointLength ] = shadowMap; + state.pointShadowMatrix[ pointLength ] = light.shadow.matrix; + + numPointShadows ++; + + } + + state.point[ pointLength ] = uniforms; + + pointLength ++; + + } else if ( light.isHemisphereLight ) { + + const uniforms = cache.get( light ); + + uniforms.skyColor.copy( light.color ).multiplyScalar( intensity ); + uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity ); + + state.hemi[ hemiLength ] = uniforms; + + hemiLength ++; + + } + + } + + if ( rectAreaLength > 0 ) { + + if ( capabilities.isWebGL2 ) { + + // WebGL 2 + + state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1; + state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2; + + } else { + + // WebGL 1 + + if ( extensions.has( 'OES_texture_float_linear' ) === true ) { + + state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1; + state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2; + + } else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) { + + state.rectAreaLTC1 = UniformsLib.LTC_HALF_1; + state.rectAreaLTC2 = UniformsLib.LTC_HALF_2; + + } else { + + console.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' ); + + } + + } + + } + + state.ambient[ 0 ] = r; + state.ambient[ 1 ] = g; + state.ambient[ 2 ] = b; + + const hash = state.hash; + + if ( hash.directionalLength !== directionalLength || + hash.pointLength !== pointLength || + hash.spotLength !== spotLength || + hash.rectAreaLength !== rectAreaLength || + hash.hemiLength !== hemiLength || + hash.numDirectionalShadows !== numDirectionalShadows || + hash.numPointShadows !== numPointShadows || + hash.numSpotShadows !== numSpotShadows ) { + + state.directional.length = directionalLength; + state.spot.length = spotLength; + state.rectArea.length = rectAreaLength; + state.point.length = pointLength; + state.hemi.length = hemiLength; + + state.directionalShadow.length = numDirectionalShadows; + state.directionalShadowMap.length = numDirectionalShadows; + state.pointShadow.length = numPointShadows; + state.pointShadowMap.length = numPointShadows; + state.spotShadow.length = numSpotShadows; + state.spotShadowMap.length = numSpotShadows; + state.directionalShadowMatrix.length = numDirectionalShadows; + state.pointShadowMatrix.length = numPointShadows; + state.spotShadowMatrix.length = numSpotShadows; + + hash.directionalLength = directionalLength; + hash.pointLength = pointLength; + hash.spotLength = spotLength; + hash.rectAreaLength = rectAreaLength; + hash.hemiLength = hemiLength; + + hash.numDirectionalShadows = numDirectionalShadows; + hash.numPointShadows = numPointShadows; + hash.numSpotShadows = numSpotShadows; + + state.version = nextVersion ++; + + } + + } + + function setupView( lights, camera ) { + + let directionalLength = 0; + let pointLength = 0; + let spotLength = 0; + let rectAreaLength = 0; + let hemiLength = 0; + + const viewMatrix = camera.matrixWorldInverse; + + for ( let i = 0, l = lights.length; i < l; i ++ ) { + + const light = lights[ i ]; + + if ( light.isDirectionalLight ) { + + const uniforms = state.directional[ directionalLength ]; + + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + vector3.setFromMatrixPosition( light.target.matrixWorld ); + uniforms.direction.sub( vector3 ); + uniforms.direction.transformDirection( viewMatrix ); + + directionalLength ++; + + } else if ( light.isSpotLight ) { + + const uniforms = state.spot[ spotLength ]; + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + uniforms.position.applyMatrix4( viewMatrix ); + + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + vector3.setFromMatrixPosition( light.target.matrixWorld ); + uniforms.direction.sub( vector3 ); + uniforms.direction.transformDirection( viewMatrix ); + + spotLength ++; + + } else if ( light.isRectAreaLight ) { + + const uniforms = state.rectArea[ rectAreaLength ]; + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + uniforms.position.applyMatrix4( viewMatrix ); + + // extract local rotation of light to derive width/height half vectors + matrix42.identity(); + matrix4.copy( light.matrixWorld ); + matrix4.premultiply( viewMatrix ); + matrix42.extractRotation( matrix4 ); + + uniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 ); + uniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 ); + + uniforms.halfWidth.applyMatrix4( matrix42 ); + uniforms.halfHeight.applyMatrix4( matrix42 ); + + rectAreaLength ++; + + } else if ( light.isPointLight ) { + + const uniforms = state.point[ pointLength ]; + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + uniforms.position.applyMatrix4( viewMatrix ); + + pointLength ++; + + } else if ( light.isHemisphereLight ) { + + const uniforms = state.hemi[ hemiLength ]; + + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + uniforms.direction.transformDirection( viewMatrix ); + uniforms.direction.normalize(); + + hemiLength ++; + + } + + } + + } + + return { + setup: setup, + setupView: setupView, + state: state + }; + +} + +function WebGLRenderState( extensions, capabilities ) { + + const lights = new WebGLLights( extensions, capabilities ); + + const lightsArray = []; + const shadowsArray = []; + + function init() { + + lightsArray.length = 0; + shadowsArray.length = 0; + + } + + function pushLight( light ) { + + lightsArray.push( light ); + + } + + function pushShadow( shadowLight ) { + + shadowsArray.push( shadowLight ); + + } + + function setupLights() { + + lights.setup( lightsArray ); + + } + + function setupLightsView( camera ) { + + lights.setupView( lightsArray, camera ); + + } + + const state = { + lightsArray: lightsArray, + shadowsArray: shadowsArray, + + lights: lights + }; + + return { + init: init, + state: state, + setupLights: setupLights, + setupLightsView: setupLightsView, + + pushLight: pushLight, + pushShadow: pushShadow + }; + +} + +function WebGLRenderStates( extensions, capabilities ) { + + let renderStates = new WeakMap(); + + function get( scene, renderCallDepth = 0 ) { + + let renderState; + + if ( renderStates.has( scene ) === false ) { + + renderState = new WebGLRenderState( extensions, capabilities ); + renderStates.set( scene, [ renderState ] ); + + } else { + + if ( renderCallDepth >= renderStates.get( scene ).length ) { + + renderState = new WebGLRenderState( extensions, capabilities ); + renderStates.get( scene ).push( renderState ); + + } else { + + renderState = renderStates.get( scene )[ renderCallDepth ]; + + } + + } + + return renderState; + + } + + function dispose() { + + renderStates = new WeakMap(); + + } + + return { + get: get, + dispose: dispose + }; + +} + +/** + * parameters = { + * + * opacity: , + * + * map: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * wireframe: , + * wireframeLinewidth: + * } + */ + +class MeshDepthMaterial extends Material { + + constructor( parameters ) { + + super(); + + this.type = 'MeshDepthMaterial'; + + this.depthPacking = BasicDepthPacking; + + this.map = null; + + this.alphaMap = null; + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; + + this.setValues( parameters ); + + } + + copy( source ) { + + super.copy( source ); + + this.depthPacking = source.depthPacking; + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + return this; + + } + +} + +MeshDepthMaterial.prototype.isMeshDepthMaterial = true; + +/** + * parameters = { + * + * referencePosition: , + * nearDistance: , + * farDistance: , + * + * map: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: + * + * } + */ + +class MeshDistanceMaterial extends Material { + + constructor( parameters ) { + + super(); + + this.type = 'MeshDistanceMaterial'; + + this.referencePosition = new Vector3(); + this.nearDistance = 1; + this.farDistance = 1000; + + this.map = null; + + this.alphaMap = null; + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.fog = false; + + this.setValues( parameters ); + + } + + copy( source ) { + + super.copy( source ); + + this.referencePosition.copy( source.referencePosition ); + this.nearDistance = source.nearDistance; + this.farDistance = source.farDistance; + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + return this; + + } + +} + +MeshDistanceMaterial.prototype.isMeshDistanceMaterial = true; + +var vsm_frag = "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"; + +var vsm_vert = "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}"; + +function WebGLShadowMap( _renderer, _objects, _capabilities ) { + + let _frustum = new Frustum(); + + const _shadowMapSize = new Vector2(), + _viewportSize = new Vector2(), + + _viewport = new Vector4(), + + _depthMaterial = new MeshDepthMaterial( { depthPacking: RGBADepthPacking } ), + _distanceMaterial = new MeshDistanceMaterial(), + + _materialCache = {}, + + _maxTextureSize = _capabilities.maxTextureSize; + + const shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide }; + + const shadowMaterialVertical = new ShaderMaterial( { + + defines: { + SAMPLE_RATE: 2.0 / 8.0, + HALF_SAMPLE_RATE: 1.0 / 8.0 + }, + + uniforms: { + shadow_pass: { value: null }, + resolution: { value: new Vector2() }, + radius: { value: 4.0 } + }, + + vertexShader: vsm_vert, + + fragmentShader: vsm_frag + + } ); + + const shadowMaterialHorizontal = shadowMaterialVertical.clone(); + shadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1; + + const fullScreenTri = new BufferGeometry(); + fullScreenTri.setAttribute( + 'position', + new BufferAttribute( + new Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ), + 3 + ) + ); + + const fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical ); + + const scope = this; + + this.enabled = false; + + this.autoUpdate = true; + this.needsUpdate = false; + + this.type = PCFShadowMap; + + this.render = function ( lights, scene, camera ) { + + if ( scope.enabled === false ) return; + if ( scope.autoUpdate === false && scope.needsUpdate === false ) return; + + if ( lights.length === 0 ) return; + + const currentRenderTarget = _renderer.getRenderTarget(); + const activeCubeFace = _renderer.getActiveCubeFace(); + const activeMipmapLevel = _renderer.getActiveMipmapLevel(); + + const _state = _renderer.state; + + // Set GL state for depth map. + _state.setBlending( NoBlending ); + _state.buffers.color.setClear( 1, 1, 1, 1 ); + _state.buffers.depth.setTest( true ); + _state.setScissorTest( false ); + + // render depth map + + for ( let i = 0, il = lights.length; i < il; i ++ ) { + + const light = lights[ i ]; + const shadow = light.shadow; + + if ( shadow === undefined ) { + + console.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' ); + continue; + + } + + if ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue; + + _shadowMapSize.copy( shadow.mapSize ); + + const shadowFrameExtents = shadow.getFrameExtents(); + + _shadowMapSize.multiply( shadowFrameExtents ); + + _viewportSize.copy( shadow.mapSize ); + + if ( _shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize ) { + + if ( _shadowMapSize.x > _maxTextureSize ) { + + _viewportSize.x = Math.floor( _maxTextureSize / shadowFrameExtents.x ); + _shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x; + shadow.mapSize.x = _viewportSize.x; + + } + + if ( _shadowMapSize.y > _maxTextureSize ) { + + _viewportSize.y = Math.floor( _maxTextureSize / shadowFrameExtents.y ); + _shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y; + shadow.mapSize.y = _viewportSize.y; + + } + + } + + if ( shadow.map === null && ! shadow.isPointLightShadow && this.type === VSMShadowMap ) { + + const pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat }; + + shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); + shadow.map.texture.name = light.name + '.shadowMap'; + + shadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); + + shadow.camera.updateProjectionMatrix(); + + } + + if ( shadow.map === null ) { + + const pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat }; + + shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); + shadow.map.texture.name = light.name + '.shadowMap'; + + shadow.camera.updateProjectionMatrix(); + + } + + _renderer.setRenderTarget( shadow.map ); + _renderer.clear(); + + const viewportCount = shadow.getViewportCount(); + + for ( let vp = 0; vp < viewportCount; vp ++ ) { + + const viewport = shadow.getViewport( vp ); + + _viewport.set( + _viewportSize.x * viewport.x, + _viewportSize.y * viewport.y, + _viewportSize.x * viewport.z, + _viewportSize.y * viewport.w + ); + + _state.viewport( _viewport ); + + shadow.updateMatrices( light, vp ); + + _frustum = shadow.getFrustum(); + + renderObject( scene, camera, shadow.camera, light, this.type ); + + } + + // do blur pass for VSM + + if ( ! shadow.isPointLightShadow && this.type === VSMShadowMap ) { + + VSMPass( shadow, camera ); + + } + + shadow.needsUpdate = false; + + } + + scope.needsUpdate = false; + + _renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel ); + + }; + + function VSMPass( shadow, camera ) { + + const geometry = _objects.update( fullScreenMesh ); + + // vertical pass + + shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture; + shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize; + shadowMaterialVertical.uniforms.radius.value = shadow.radius; + _renderer.setRenderTarget( shadow.mapPass ); + _renderer.clear(); + _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null ); + + // horizontal pass + + shadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture; + shadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize; + shadowMaterialHorizontal.uniforms.radius.value = shadow.radius; + _renderer.setRenderTarget( shadow.map ); + _renderer.clear(); + _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null ); + + } + + function getDepthMaterial( object, geometry, material, light, shadowCameraNear, shadowCameraFar, type ) { + + let result = null; + + const customMaterial = ( light.isPointLight === true ) ? object.customDistanceMaterial : object.customDepthMaterial; + + if ( customMaterial !== undefined ) { + + result = customMaterial; + + } else { + + result = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial; + + } + + if ( _renderer.localClippingEnabled && + material.clipShadows === true && + material.clippingPlanes.length !== 0 ) { + + // in this case we need a unique material instance reflecting the + // appropriate state + + const keyA = result.uuid, keyB = material.uuid; + + let materialsForVariant = _materialCache[ keyA ]; + + if ( materialsForVariant === undefined ) { + + materialsForVariant = {}; + _materialCache[ keyA ] = materialsForVariant; + + } + + let cachedMaterial = materialsForVariant[ keyB ]; + + if ( cachedMaterial === undefined ) { + + cachedMaterial = result.clone(); + materialsForVariant[ keyB ] = cachedMaterial; + + } + + result = cachedMaterial; + + } + + result.visible = material.visible; + result.wireframe = material.wireframe; + + if ( type === VSMShadowMap ) { + + result.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side; + + } else { + + result.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ]; + + } + + result.clipShadows = material.clipShadows; + result.clippingPlanes = material.clippingPlanes; + result.clipIntersection = material.clipIntersection; + + result.wireframeLinewidth = material.wireframeLinewidth; + result.linewidth = material.linewidth; + + if ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) { + + result.referencePosition.setFromMatrixPosition( light.matrixWorld ); + result.nearDistance = shadowCameraNear; + result.farDistance = shadowCameraFar; + + } + + return result; + + } + + function renderObject( object, camera, shadowCamera, light, type ) { + + if ( object.visible === false ) return; + + const visible = object.layers.test( camera.layers ); + + if ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) { + + if ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) { + + object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld ); + + const geometry = _objects.update( object ); + const material = object.material; + + if ( Array.isArray( material ) ) { + + const groups = geometry.groups; + + for ( let k = 0, kl = groups.length; k < kl; k ++ ) { + + const group = groups[ k ]; + const groupMaterial = material[ group.materialIndex ]; + + if ( groupMaterial && groupMaterial.visible ) { + + const depthMaterial = getDepthMaterial( object, geometry, groupMaterial, light, shadowCamera.near, shadowCamera.far, type ); + + _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group ); + + } + + } + + } else if ( material.visible ) { + + const depthMaterial = getDepthMaterial( object, geometry, material, light, shadowCamera.near, shadowCamera.far, type ); + + _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null ); + + } + + } + + } + + const children = object.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + renderObject( children[ i ], camera, shadowCamera, light, type ); + + } + + } + +} + +function WebGLState( gl, extensions, capabilities ) { + + const isWebGL2 = capabilities.isWebGL2; + + function ColorBuffer() { + + let locked = false; + + const color = new Vector4(); + let currentColorMask = null; + const currentColorClear = new Vector4( 0, 0, 0, 0 ); + + return { + + setMask: function ( colorMask ) { + + if ( currentColorMask !== colorMask && ! locked ) { + + gl.colorMask( colorMask, colorMask, colorMask, colorMask ); + currentColorMask = colorMask; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( r, g, b, a, premultipliedAlpha ) { + + if ( premultipliedAlpha === true ) { + + r *= a; g *= a; b *= a; + + } + + color.set( r, g, b, a ); + + if ( currentColorClear.equals( color ) === false ) { + + gl.clearColor( r, g, b, a ); + currentColorClear.copy( color ); + + } + + }, + + reset: function () { + + locked = false; + + currentColorMask = null; + currentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state + + } + + }; + + } + + function DepthBuffer() { + + let locked = false; + + let currentDepthMask = null; + let currentDepthFunc = null; + let currentDepthClear = null; + + return { + + setTest: function ( depthTest ) { + + if ( depthTest ) { + + enable( 2929 ); + + } else { + + disable( 2929 ); + + } + + }, + + setMask: function ( depthMask ) { + + if ( currentDepthMask !== depthMask && ! locked ) { + + gl.depthMask( depthMask ); + currentDepthMask = depthMask; + + } + + }, + + setFunc: function ( depthFunc ) { + + if ( currentDepthFunc !== depthFunc ) { + + if ( depthFunc ) { + + switch ( depthFunc ) { + + case NeverDepth: + + gl.depthFunc( 512 ); + break; + + case AlwaysDepth: + + gl.depthFunc( 519 ); + break; + + case LessDepth: + + gl.depthFunc( 513 ); + break; + + case LessEqualDepth: + + gl.depthFunc( 515 ); + break; + + case EqualDepth: + + gl.depthFunc( 514 ); + break; + + case GreaterEqualDepth: + + gl.depthFunc( 518 ); + break; + + case GreaterDepth: + + gl.depthFunc( 516 ); + break; + + case NotEqualDepth: + + gl.depthFunc( 517 ); + break; + + default: + + gl.depthFunc( 515 ); + + } + + } else { + + gl.depthFunc( 515 ); + + } + + currentDepthFunc = depthFunc; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( depth ) { + + if ( currentDepthClear !== depth ) { + + gl.clearDepth( depth ); + currentDepthClear = depth; + + } + + }, + + reset: function () { + + locked = false; + + currentDepthMask = null; + currentDepthFunc = null; + currentDepthClear = null; + + } + + }; + + } + + function StencilBuffer() { + + let locked = false; + + let currentStencilMask = null; + let currentStencilFunc = null; + let currentStencilRef = null; + let currentStencilFuncMask = null; + let currentStencilFail = null; + let currentStencilZFail = null; + let currentStencilZPass = null; + let currentStencilClear = null; + + return { + + setTest: function ( stencilTest ) { + + if ( ! locked ) { + + if ( stencilTest ) { + + enable( 2960 ); + + } else { + + disable( 2960 ); + + } + + } + + }, + + setMask: function ( stencilMask ) { + + if ( currentStencilMask !== stencilMask && ! locked ) { + + gl.stencilMask( stencilMask ); + currentStencilMask = stencilMask; + + } + + }, + + setFunc: function ( stencilFunc, stencilRef, stencilMask ) { + + if ( currentStencilFunc !== stencilFunc || + currentStencilRef !== stencilRef || + currentStencilFuncMask !== stencilMask ) { + + gl.stencilFunc( stencilFunc, stencilRef, stencilMask ); + + currentStencilFunc = stencilFunc; + currentStencilRef = stencilRef; + currentStencilFuncMask = stencilMask; + + } + + }, + + setOp: function ( stencilFail, stencilZFail, stencilZPass ) { + + if ( currentStencilFail !== stencilFail || + currentStencilZFail !== stencilZFail || + currentStencilZPass !== stencilZPass ) { + + gl.stencilOp( stencilFail, stencilZFail, stencilZPass ); + + currentStencilFail = stencilFail; + currentStencilZFail = stencilZFail; + currentStencilZPass = stencilZPass; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( stencil ) { + + if ( currentStencilClear !== stencil ) { + + gl.clearStencil( stencil ); + currentStencilClear = stencil; + + } + + }, + + reset: function () { + + locked = false; + + currentStencilMask = null; + currentStencilFunc = null; + currentStencilRef = null; + currentStencilFuncMask = null; + currentStencilFail = null; + currentStencilZFail = null; + currentStencilZPass = null; + currentStencilClear = null; + + } + + }; + + } + + // + + const colorBuffer = new ColorBuffer(); + const depthBuffer = new DepthBuffer(); + const stencilBuffer = new StencilBuffer(); + + let enabledCapabilities = {}; + + let xrFramebuffer = null; + let currentBoundFramebuffers = {}; + + let currentProgram = null; + + let currentBlendingEnabled = false; + let currentBlending = null; + let currentBlendEquation = null; + let currentBlendSrc = null; + let currentBlendDst = null; + let currentBlendEquationAlpha = null; + let currentBlendSrcAlpha = null; + let currentBlendDstAlpha = null; + let currentPremultipledAlpha = false; + + let currentFlipSided = null; + let currentCullFace = null; + + let currentLineWidth = null; + + let currentPolygonOffsetFactor = null; + let currentPolygonOffsetUnits = null; + + const maxTextures = gl.getParameter( 35661 ); + + let lineWidthAvailable = false; + let version = 0; + const glVersion = gl.getParameter( 7938 ); + + if ( glVersion.indexOf( 'WebGL' ) !== - 1 ) { + + version = parseFloat( /^WebGL (\d)/.exec( glVersion )[ 1 ] ); + lineWidthAvailable = ( version >= 1.0 ); + + } else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) { + + version = parseFloat( /^OpenGL ES (\d)/.exec( glVersion )[ 1 ] ); + lineWidthAvailable = ( version >= 2.0 ); + + } + + let currentTextureSlot = null; + let currentBoundTextures = {}; + + const scissorParam = gl.getParameter( 3088 ); + const viewportParam = gl.getParameter( 2978 ); + + const currentScissor = new Vector4().fromArray( scissorParam ); + const currentViewport = new Vector4().fromArray( viewportParam ); + + function createTexture( type, target, count ) { + + const data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4. + const texture = gl.createTexture(); + + gl.bindTexture( type, texture ); + gl.texParameteri( type, 10241, 9728 ); + gl.texParameteri( type, 10240, 9728 ); + + for ( let i = 0; i < count; i ++ ) { + + gl.texImage2D( target + i, 0, 6408, 1, 1, 0, 6408, 5121, data ); + + } + + return texture; + + } + + const emptyTextures = {}; + emptyTextures[ 3553 ] = createTexture( 3553, 3553, 1 ); + emptyTextures[ 34067 ] = createTexture( 34067, 34069, 6 ); + + // init + + colorBuffer.setClear( 0, 0, 0, 1 ); + depthBuffer.setClear( 1 ); + stencilBuffer.setClear( 0 ); + + enable( 2929 ); + depthBuffer.setFunc( LessEqualDepth ); + + setFlipSided( false ); + setCullFace( CullFaceBack ); + enable( 2884 ); + + setBlending( NoBlending ); + + // + + function enable( id ) { + + if ( enabledCapabilities[ id ] !== true ) { + + gl.enable( id ); + enabledCapabilities[ id ] = true; + + } + + } + + function disable( id ) { + + if ( enabledCapabilities[ id ] !== false ) { + + gl.disable( id ); + enabledCapabilities[ id ] = false; + + } + + } + + function bindXRFramebuffer( framebuffer ) { + + if ( framebuffer !== xrFramebuffer ) { + + gl.bindFramebuffer( 36160, framebuffer ); + + xrFramebuffer = framebuffer; + + } + + } + + function bindFramebuffer( target, framebuffer ) { + + if ( framebuffer === null && xrFramebuffer !== null ) framebuffer = xrFramebuffer; // use active XR framebuffer if available + + if ( currentBoundFramebuffers[ target ] !== framebuffer ) { + + gl.bindFramebuffer( target, framebuffer ); + + currentBoundFramebuffers[ target ] = framebuffer; + + if ( isWebGL2 ) { + + // 36009 is equivalent to 36160 + + if ( target === 36009 ) { + + currentBoundFramebuffers[ 36160 ] = framebuffer; + + } + + if ( target === 36160 ) { + + currentBoundFramebuffers[ 36009 ] = framebuffer; + + } + + } + + return true; + + } + + return false; + + } + + function useProgram( program ) { + + if ( currentProgram !== program ) { + + gl.useProgram( program ); + + currentProgram = program; + + return true; + + } + + return false; + + } + + const equationToGL = { + [ AddEquation ]: 32774, + [ SubtractEquation ]: 32778, + [ ReverseSubtractEquation ]: 32779 + }; + + if ( isWebGL2 ) { + + equationToGL[ MinEquation ] = 32775; + equationToGL[ MaxEquation ] = 32776; + + } else { + + const extension = extensions.get( 'EXT_blend_minmax' ); + + if ( extension !== null ) { + + equationToGL[ MinEquation ] = extension.MIN_EXT; + equationToGL[ MaxEquation ] = extension.MAX_EXT; + + } + + } + + const factorToGL = { + [ ZeroFactor ]: 0, + [ OneFactor ]: 1, + [ SrcColorFactor ]: 768, + [ SrcAlphaFactor ]: 770, + [ SrcAlphaSaturateFactor ]: 776, + [ DstColorFactor ]: 774, + [ DstAlphaFactor ]: 772, + [ OneMinusSrcColorFactor ]: 769, + [ OneMinusSrcAlphaFactor ]: 771, + [ OneMinusDstColorFactor ]: 775, + [ OneMinusDstAlphaFactor ]: 773 + }; + + function setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) { + + if ( blending === NoBlending ) { + + if ( currentBlendingEnabled === true ) { + + disable( 3042 ); + currentBlendingEnabled = false; + + } + + return; + + } + + if ( currentBlendingEnabled === false ) { + + enable( 3042 ); + currentBlendingEnabled = true; + + } + + if ( blending !== CustomBlending ) { + + if ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) { + + if ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) { + + gl.blendEquation( 32774 ); + + currentBlendEquation = AddEquation; + currentBlendEquationAlpha = AddEquation; + + } + + if ( premultipliedAlpha ) { + + switch ( blending ) { + + case NormalBlending: + gl.blendFuncSeparate( 1, 771, 1, 771 ); + break; + + case AdditiveBlending: + gl.blendFunc( 1, 1 ); + break; + + case SubtractiveBlending: + gl.blendFuncSeparate( 0, 0, 769, 771 ); + break; + + case MultiplyBlending: + gl.blendFuncSeparate( 0, 768, 0, 770 ); + break; + + default: + console.error( 'THREE.WebGLState: Invalid blending: ', blending ); + break; + + } + + } else { + + switch ( blending ) { + + case NormalBlending: + gl.blendFuncSeparate( 770, 771, 1, 771 ); + break; + + case AdditiveBlending: + gl.blendFunc( 770, 1 ); + break; + + case SubtractiveBlending: + gl.blendFunc( 0, 769 ); + break; + + case MultiplyBlending: + gl.blendFunc( 0, 768 ); + break; + + default: + console.error( 'THREE.WebGLState: Invalid blending: ', blending ); + break; + + } + + } + + currentBlendSrc = null; + currentBlendDst = null; + currentBlendSrcAlpha = null; + currentBlendDstAlpha = null; + + currentBlending = blending; + currentPremultipledAlpha = premultipliedAlpha; + + } + + return; + + } + + // custom blending + + blendEquationAlpha = blendEquationAlpha || blendEquation; + blendSrcAlpha = blendSrcAlpha || blendSrc; + blendDstAlpha = blendDstAlpha || blendDst; + + if ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) { + + gl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] ); + + currentBlendEquation = blendEquation; + currentBlendEquationAlpha = blendEquationAlpha; + + } + + if ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) { + + gl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] ); + + currentBlendSrc = blendSrc; + currentBlendDst = blendDst; + currentBlendSrcAlpha = blendSrcAlpha; + currentBlendDstAlpha = blendDstAlpha; + + } + + currentBlending = blending; + currentPremultipledAlpha = null; + + } + + function setMaterial( material, frontFaceCW ) { + + material.side === DoubleSide + ? disable( 2884 ) + : enable( 2884 ); + + let flipSided = ( material.side === BackSide ); + if ( frontFaceCW ) flipSided = ! flipSided; + + setFlipSided( flipSided ); + + ( material.blending === NormalBlending && material.transparent === false ) + ? setBlending( NoBlending ) + : setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha ); + + depthBuffer.setFunc( material.depthFunc ); + depthBuffer.setTest( material.depthTest ); + depthBuffer.setMask( material.depthWrite ); + colorBuffer.setMask( material.colorWrite ); + + const stencilWrite = material.stencilWrite; + stencilBuffer.setTest( stencilWrite ); + if ( stencilWrite ) { + + stencilBuffer.setMask( material.stencilWriteMask ); + stencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask ); + stencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass ); + + } + + setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); + + material.alphaToCoverage === true + ? enable( 32926 ) + : disable( 32926 ); + + } + + // + + function setFlipSided( flipSided ) { + + if ( currentFlipSided !== flipSided ) { + + if ( flipSided ) { + + gl.frontFace( 2304 ); + + } else { + + gl.frontFace( 2305 ); + + } + + currentFlipSided = flipSided; + + } + + } + + function setCullFace( cullFace ) { + + if ( cullFace !== CullFaceNone ) { + + enable( 2884 ); + + if ( cullFace !== currentCullFace ) { + + if ( cullFace === CullFaceBack ) { + + gl.cullFace( 1029 ); + + } else if ( cullFace === CullFaceFront ) { + + gl.cullFace( 1028 ); + + } else { + + gl.cullFace( 1032 ); + + } + + } + + } else { + + disable( 2884 ); + + } + + currentCullFace = cullFace; + + } + + function setLineWidth( width ) { + + if ( width !== currentLineWidth ) { + + if ( lineWidthAvailable ) gl.lineWidth( width ); + + currentLineWidth = width; + + } + + } + + function setPolygonOffset( polygonOffset, factor, units ) { + + if ( polygonOffset ) { + + enable( 32823 ); + + if ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) { + + gl.polygonOffset( factor, units ); + + currentPolygonOffsetFactor = factor; + currentPolygonOffsetUnits = units; + + } + + } else { + + disable( 32823 ); + + } + + } + + function setScissorTest( scissorTest ) { + + if ( scissorTest ) { + + enable( 3089 ); + + } else { + + disable( 3089 ); + + } + + } + + // texture + + function activeTexture( webglSlot ) { + + if ( webglSlot === undefined ) webglSlot = 33984 + maxTextures - 1; + + if ( currentTextureSlot !== webglSlot ) { + + gl.activeTexture( webglSlot ); + currentTextureSlot = webglSlot; + + } + + } + + function bindTexture( webglType, webglTexture ) { + + if ( currentTextureSlot === null ) { + + activeTexture(); + + } + + let boundTexture = currentBoundTextures[ currentTextureSlot ]; + + if ( boundTexture === undefined ) { + + boundTexture = { type: undefined, texture: undefined }; + currentBoundTextures[ currentTextureSlot ] = boundTexture; + + } + + if ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) { + + gl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] ); + + boundTexture.type = webglType; + boundTexture.texture = webglTexture; + + } + + } + + function unbindTexture() { + + const boundTexture = currentBoundTextures[ currentTextureSlot ]; + + if ( boundTexture !== undefined && boundTexture.type !== undefined ) { + + gl.bindTexture( boundTexture.type, null ); + + boundTexture.type = undefined; + boundTexture.texture = undefined; + + } + + } + + function compressedTexImage2D() { + + try { + + gl.compressedTexImage2D.apply( gl, arguments ); + + } catch ( error ) { + + console.error( 'THREE.WebGLState:', error ); + + } + + } + + function texImage2D() { + + try { + + gl.texImage2D.apply( gl, arguments ); + + } catch ( error ) { + + console.error( 'THREE.WebGLState:', error ); + + } + + } + + function texImage3D() { + + try { + + gl.texImage3D.apply( gl, arguments ); + + } catch ( error ) { + + console.error( 'THREE.WebGLState:', error ); + + } + + } + + // + + function scissor( scissor ) { + + if ( currentScissor.equals( scissor ) === false ) { + + gl.scissor( scissor.x, scissor.y, scissor.z, scissor.w ); + currentScissor.copy( scissor ); + + } + + } + + function viewport( viewport ) { + + if ( currentViewport.equals( viewport ) === false ) { + + gl.viewport( viewport.x, viewport.y, viewport.z, viewport.w ); + currentViewport.copy( viewport ); + + } + + } + + // + + function reset() { + + // reset state + + gl.disable( 3042 ); + gl.disable( 2884 ); + gl.disable( 2929 ); + gl.disable( 32823 ); + gl.disable( 3089 ); + gl.disable( 2960 ); + gl.disable( 32926 ); + + gl.blendEquation( 32774 ); + gl.blendFunc( 1, 0 ); + gl.blendFuncSeparate( 1, 0, 1, 0 ); + + gl.colorMask( true, true, true, true ); + gl.clearColor( 0, 0, 0, 0 ); + + gl.depthMask( true ); + gl.depthFunc( 513 ); + gl.clearDepth( 1 ); + + gl.stencilMask( 0xffffffff ); + gl.stencilFunc( 519, 0, 0xffffffff ); + gl.stencilOp( 7680, 7680, 7680 ); + gl.clearStencil( 0 ); + + gl.cullFace( 1029 ); + gl.frontFace( 2305 ); + + gl.polygonOffset( 0, 0 ); + + gl.activeTexture( 33984 ); + + gl.bindFramebuffer( 36160, null ); + + if ( isWebGL2 === true ) { + + gl.bindFramebuffer( 36009, null ); + gl.bindFramebuffer( 36008, null ); + + } + + gl.useProgram( null ); + + gl.lineWidth( 1 ); + + gl.scissor( 0, 0, gl.canvas.width, gl.canvas.height ); + gl.viewport( 0, 0, gl.canvas.width, gl.canvas.height ); + + // reset internals + + enabledCapabilities = {}; + + currentTextureSlot = null; + currentBoundTextures = {}; + + xrFramebuffer = null; + currentBoundFramebuffers = {}; + + currentProgram = null; + + currentBlendingEnabled = false; + currentBlending = null; + currentBlendEquation = null; + currentBlendSrc = null; + currentBlendDst = null; + currentBlendEquationAlpha = null; + currentBlendSrcAlpha = null; + currentBlendDstAlpha = null; + currentPremultipledAlpha = false; + + currentFlipSided = null; + currentCullFace = null; + + currentLineWidth = null; + + currentPolygonOffsetFactor = null; + currentPolygonOffsetUnits = null; + + currentScissor.set( 0, 0, gl.canvas.width, gl.canvas.height ); + currentViewport.set( 0, 0, gl.canvas.width, gl.canvas.height ); + + colorBuffer.reset(); + depthBuffer.reset(); + stencilBuffer.reset(); + + } + + return { + + buffers: { + color: colorBuffer, + depth: depthBuffer, + stencil: stencilBuffer + }, + + enable: enable, + disable: disable, + + bindFramebuffer: bindFramebuffer, + bindXRFramebuffer: bindXRFramebuffer, + + useProgram: useProgram, + + setBlending: setBlending, + setMaterial: setMaterial, + + setFlipSided: setFlipSided, + setCullFace: setCullFace, + + setLineWidth: setLineWidth, + setPolygonOffset: setPolygonOffset, + + setScissorTest: setScissorTest, + + activeTexture: activeTexture, + bindTexture: bindTexture, + unbindTexture: unbindTexture, + compressedTexImage2D: compressedTexImage2D, + texImage2D: texImage2D, + texImage3D: texImage3D, + + scissor: scissor, + viewport: viewport, + + reset: reset + + }; + +} + +function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) { + + const isWebGL2 = capabilities.isWebGL2; + const maxTextures = capabilities.maxTextures; + const maxCubemapSize = capabilities.maxCubemapSize; + const maxTextureSize = capabilities.maxTextureSize; + const maxSamples = capabilities.maxSamples; + + const _videoTextures = new WeakMap(); + let _canvas; + + // cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas, + // also OffscreenCanvas.getContext("webgl"), but not OffscreenCanvas.getContext("2d")! + // Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d). + + let useOffscreenCanvas = false; + + try { + + useOffscreenCanvas = typeof OffscreenCanvas !== 'undefined' + && ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null; + + } catch ( err ) { + + // Ignore any errors + + } + + function createCanvas( width, height ) { + + // Use OffscreenCanvas when available. Specially needed in web workers + + return useOffscreenCanvas ? + new OffscreenCanvas( width, height ) : + document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + + } + + function resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) { + + let scale = 1; + + // handle case if texture exceeds max size + + if ( image.width > maxSize || image.height > maxSize ) { + + scale = maxSize / Math.max( image.width, image.height ); + + } + + // only perform resize if necessary + + if ( scale < 1 || needsPowerOfTwo === true ) { + + // only perform resize for certain image types + + if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) || + ( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) || + ( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) { + + const floor = needsPowerOfTwo ? floorPowerOfTwo : Math.floor; + + const width = floor( scale * image.width ); + const height = floor( scale * image.height ); + + if ( _canvas === undefined ) _canvas = createCanvas( width, height ); + + // cube textures can't reuse the same canvas + + const canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas; + + canvas.width = width; + canvas.height = height; + + const context = canvas.getContext( '2d' ); + context.drawImage( image, 0, 0, width, height ); + + console.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' ); + + return canvas; + + } else { + + if ( 'data' in image ) { + + console.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' ); + + } + + return image; + + } + + } + + return image; + + } + + function isPowerOfTwo$1( image ) { + + return isPowerOfTwo( image.width ) && isPowerOfTwo( image.height ); + + } + + function textureNeedsPowerOfTwo( texture ) { + + if ( isWebGL2 ) return false; + + return ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) || + ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ); + + } + + function textureNeedsGenerateMipmaps( texture, supportsMips ) { + + return texture.generateMipmaps && supportsMips && + texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter; + + } + + function generateMipmap( target, texture, width, height, depth = 1 ) { + + _gl.generateMipmap( target ); + + const textureProperties = properties.get( texture ); + + textureProperties.__maxMipLevel = Math.log2( Math.max( width, height, depth ) ); + + } + + function getInternalFormat( internalFormatName, glFormat, glType ) { + + if ( isWebGL2 === false ) return glFormat; + + if ( internalFormatName !== null ) { + + if ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ]; + + console.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \'' + internalFormatName + '\'' ); + + } + + let internalFormat = glFormat; + + if ( glFormat === 6403 ) { + + if ( glType === 5126 ) internalFormat = 33326; + if ( glType === 5131 ) internalFormat = 33325; + if ( glType === 5121 ) internalFormat = 33321; + + } + + if ( glFormat === 6407 ) { + + if ( glType === 5126 ) internalFormat = 34837; + if ( glType === 5131 ) internalFormat = 34843; + if ( glType === 5121 ) internalFormat = 32849; + + } + + if ( glFormat === 6408 ) { + + if ( glType === 5126 ) internalFormat = 34836; + if ( glType === 5131 ) internalFormat = 34842; + if ( glType === 5121 ) internalFormat = 32856; + + } + + if ( internalFormat === 33325 || internalFormat === 33326 || + internalFormat === 34842 || internalFormat === 34836 ) { + + extensions.get( 'EXT_color_buffer_float' ); + + } + + return internalFormat; + + } + + // Fallback filters for non-power-of-2 textures + + function filterFallback( f ) { + + if ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) { + + return 9728; + + } + + return 9729; + + } + + // + + function onTextureDispose( event ) { + + const texture = event.target; + + texture.removeEventListener( 'dispose', onTextureDispose ); + + deallocateTexture( texture ); + + if ( texture.isVideoTexture ) { + + _videoTextures.delete( texture ); + + } + + info.memory.textures --; + + } + + function onRenderTargetDispose( event ) { + + const renderTarget = event.target; + + renderTarget.removeEventListener( 'dispose', onRenderTargetDispose ); + + deallocateRenderTarget( renderTarget ); + + } + + // + + function deallocateTexture( texture ) { + + const textureProperties = properties.get( texture ); + + if ( textureProperties.__webglInit === undefined ) return; + + _gl.deleteTexture( textureProperties.__webglTexture ); + + properties.remove( texture ); + + } + + function deallocateRenderTarget( renderTarget ) { + + const texture = renderTarget.texture; + + const renderTargetProperties = properties.get( renderTarget ); + const textureProperties = properties.get( texture ); + + if ( ! renderTarget ) return; + + if ( textureProperties.__webglTexture !== undefined ) { + + _gl.deleteTexture( textureProperties.__webglTexture ); + + info.memory.textures --; + + } + + if ( renderTarget.depthTexture ) { + + renderTarget.depthTexture.dispose(); + + } + + if ( renderTarget.isWebGLCubeRenderTarget ) { + + for ( let i = 0; i < 6; i ++ ) { + + _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] ); + if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] ); + + } + + } else { + + _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer ); + if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer ); + if ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer ); + if ( renderTargetProperties.__webglColorRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer ); + if ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer ); + + } + + if ( renderTarget.isWebGLMultipleRenderTargets ) { + + for ( let i = 0, il = texture.length; i < il; i ++ ) { + + const attachmentProperties = properties.get( texture[ i ] ); + + if ( attachmentProperties.__webglTexture ) { + + _gl.deleteTexture( attachmentProperties.__webglTexture ); + + info.memory.textures --; + + } + + properties.remove( texture[ i ] ); + + } + + } + + properties.remove( texture ); + properties.remove( renderTarget ); + + } + + // + + let textureUnits = 0; + + function resetTextureUnits() { + + textureUnits = 0; + + } + + function allocateTextureUnit() { + + const textureUnit = textureUnits; + + if ( textureUnit >= maxTextures ) { + + console.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures ); + + } + + textureUnits += 1; + + return textureUnit; + + } + + // + + function setTexture2D( texture, slot ) { + + const textureProperties = properties.get( texture ); + + if ( texture.isVideoTexture ) updateVideoTexture( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + const image = texture.image; + + if ( image === undefined ) { + + console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined' ); + + } else if ( image.complete === false ) { + + console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' ); + + } else { + + uploadTexture( textureProperties, texture, slot ); + return; + + } + + } + + state.activeTexture( 33984 + slot ); + state.bindTexture( 3553, textureProperties.__webglTexture ); + + } + + function setTexture2DArray( texture, slot ) { + + const textureProperties = properties.get( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + uploadTexture( textureProperties, texture, slot ); + return; + + } + + state.activeTexture( 33984 + slot ); + state.bindTexture( 35866, textureProperties.__webglTexture ); + + } + + function setTexture3D( texture, slot ) { + + const textureProperties = properties.get( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + uploadTexture( textureProperties, texture, slot ); + return; + + } + + state.activeTexture( 33984 + slot ); + state.bindTexture( 32879, textureProperties.__webglTexture ); + + } + + function setTextureCube( texture, slot ) { + + const textureProperties = properties.get( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + uploadCubeTexture( textureProperties, texture, slot ); + return; + + } + + state.activeTexture( 33984 + slot ); + state.bindTexture( 34067, textureProperties.__webglTexture ); + + } + + const wrappingToGL = { + [ RepeatWrapping ]: 10497, + [ ClampToEdgeWrapping ]: 33071, + [ MirroredRepeatWrapping ]: 33648 + }; + + const filterToGL = { + [ NearestFilter ]: 9728, + [ NearestMipmapNearestFilter ]: 9984, + [ NearestMipmapLinearFilter ]: 9986, + + [ LinearFilter ]: 9729, + [ LinearMipmapNearestFilter ]: 9985, + [ LinearMipmapLinearFilter ]: 9987 + }; + + function setTextureParameters( textureType, texture, supportsMips ) { + + if ( supportsMips ) { + + _gl.texParameteri( textureType, 10242, wrappingToGL[ texture.wrapS ] ); + _gl.texParameteri( textureType, 10243, wrappingToGL[ texture.wrapT ] ); + + if ( textureType === 32879 || textureType === 35866 ) { + + _gl.texParameteri( textureType, 32882, wrappingToGL[ texture.wrapR ] ); + + } + + _gl.texParameteri( textureType, 10240, filterToGL[ texture.magFilter ] ); + _gl.texParameteri( textureType, 10241, filterToGL[ texture.minFilter ] ); + + } else { + + _gl.texParameteri( textureType, 10242, 33071 ); + _gl.texParameteri( textureType, 10243, 33071 ); + + if ( textureType === 32879 || textureType === 35866 ) { + + _gl.texParameteri( textureType, 32882, 33071 ); + + } + + if ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) { + + console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' ); + + } + + _gl.texParameteri( textureType, 10240, filterFallback( texture.magFilter ) ); + _gl.texParameteri( textureType, 10241, filterFallback( texture.minFilter ) ); + + if ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) { + + console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' ); + + } + + } + + if ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) { + + const extension = extensions.get( 'EXT_texture_filter_anisotropic' ); + + if ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension for WebGL 1 and WebGL 2 + if ( isWebGL2 === false && ( texture.type === HalfFloatType && extensions.has( 'OES_texture_half_float_linear' ) === false ) ) return; // verify extension for WebGL 1 only + + if ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) { + + _gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) ); + properties.get( texture ).__currentAnisotropy = texture.anisotropy; + + } + + } + + } + + function initTexture( textureProperties, texture ) { + + if ( textureProperties.__webglInit === undefined ) { + + textureProperties.__webglInit = true; + + texture.addEventListener( 'dispose', onTextureDispose ); + + textureProperties.__webglTexture = _gl.createTexture(); + + info.memory.textures ++; + + } + + } + + function uploadTexture( textureProperties, texture, slot ) { + + let textureType = 3553; + + if ( texture.isDataTexture2DArray ) textureType = 35866; + if ( texture.isDataTexture3D ) textureType = 32879; + + initTexture( textureProperties, texture ); + + state.activeTexture( 33984 + slot ); + state.bindTexture( textureType, textureProperties.__webglTexture ); + + _gl.pixelStorei( 37440, texture.flipY ); + _gl.pixelStorei( 37441, texture.premultiplyAlpha ); + _gl.pixelStorei( 3317, texture.unpackAlignment ); + _gl.pixelStorei( 37443, 0 ); + + const needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo$1( texture.image ) === false; + const image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize ); + + const supportsMips = isPowerOfTwo$1( image ) || isWebGL2, + glFormat = utils.convert( texture.format ); + + let glType = utils.convert( texture.type ), + glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType ); + + setTextureParameters( textureType, texture, supportsMips ); + + let mipmap; + const mipmaps = texture.mipmaps; + + if ( texture.isDepthTexture ) { + + // populate depth texture with dummy data + + glInternalFormat = 6402; + + if ( isWebGL2 ) { + + if ( texture.type === FloatType ) { + + glInternalFormat = 36012; + + } else if ( texture.type === UnsignedIntType ) { + + glInternalFormat = 33190; + + } else if ( texture.type === UnsignedInt248Type ) { + + glInternalFormat = 35056; + + } else { + + glInternalFormat = 33189; // WebGL2 requires sized internalformat for glTexImage2D + + } + + } else { + + if ( texture.type === FloatType ) { + + console.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' ); + + } + + } + + // validation checks for WebGL 1 + + if ( texture.format === DepthFormat && glInternalFormat === 6402 ) { + + // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are + // DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + if ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) { + + console.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' ); + + texture.type = UnsignedShortType; + glType = utils.convert( texture.type ); + + } + + } + + if ( texture.format === DepthStencilFormat && glInternalFormat === 6402 ) { + + // Depth stencil textures need the DEPTH_STENCIL internal format + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + glInternalFormat = 34041; + + // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are + // DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL. + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + if ( texture.type !== UnsignedInt248Type ) { + + console.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' ); + + texture.type = UnsignedInt248Type; + glType = utils.convert( texture.type ); + + } + + } + + // + + state.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null ); + + } else if ( texture.isDataTexture ) { + + // use manually created mipmaps if available + // if there are no manual mipmaps + // set 0 level mipmap and then use GL to generate other mipmap levels + + if ( mipmaps.length > 0 && supportsMips ) { + + for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + state.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + texture.generateMipmaps = false; + textureProperties.__maxMipLevel = mipmaps.length - 1; + + } else { + + state.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data ); + textureProperties.__maxMipLevel = 0; + + } + + } else if ( texture.isCompressedTexture ) { + + for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + + if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) { + + if ( glFormat !== null ) { + + state.compressedTexImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data ); + + } else { + + console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' ); + + } + + } else { + + state.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + } + + textureProperties.__maxMipLevel = mipmaps.length - 1; + + } else if ( texture.isDataTexture2DArray ) { + + state.texImage3D( 35866, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data ); + textureProperties.__maxMipLevel = 0; + + } else if ( texture.isDataTexture3D ) { + + state.texImage3D( 32879, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data ); + textureProperties.__maxMipLevel = 0; + + } else { + + // regular Texture (image, video, canvas) + + // use manually created mipmaps if available + // if there are no manual mipmaps + // set 0 level mipmap and then use GL to generate other mipmap levels + + if ( mipmaps.length > 0 && supportsMips ) { + + for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + state.texImage2D( 3553, i, glInternalFormat, glFormat, glType, mipmap ); + + } + + texture.generateMipmaps = false; + textureProperties.__maxMipLevel = mipmaps.length - 1; + + } else { + + state.texImage2D( 3553, 0, glInternalFormat, glFormat, glType, image ); + textureProperties.__maxMipLevel = 0; + + } + + } + + if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { + + generateMipmap( textureType, texture, image.width, image.height ); + + } + + textureProperties.__version = texture.version; + + if ( texture.onUpdate ) texture.onUpdate( texture ); + + } + + function uploadCubeTexture( textureProperties, texture, slot ) { + + if ( texture.image.length !== 6 ) return; + + initTexture( textureProperties, texture ); + + state.activeTexture( 33984 + slot ); + state.bindTexture( 34067, textureProperties.__webglTexture ); + + _gl.pixelStorei( 37440, texture.flipY ); + _gl.pixelStorei( 37441, texture.premultiplyAlpha ); + _gl.pixelStorei( 3317, texture.unpackAlignment ); + _gl.pixelStorei( 37443, 0 ); + + const isCompressed = ( texture && ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture ) ); + const isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture ); + + const cubeImage = []; + + for ( let i = 0; i < 6; i ++ ) { + + if ( ! isCompressed && ! isDataTexture ) { + + cubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize ); + + } else { + + cubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ]; + + } + + } + + const image = cubeImage[ 0 ], + supportsMips = isPowerOfTwo$1( image ) || isWebGL2, + glFormat = utils.convert( texture.format ), + glType = utils.convert( texture.type ), + glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType ); + + setTextureParameters( 34067, texture, supportsMips ); + + let mipmaps; + + if ( isCompressed ) { + + for ( let i = 0; i < 6; i ++ ) { + + mipmaps = cubeImage[ i ].mipmaps; + + for ( let j = 0; j < mipmaps.length; j ++ ) { + + const mipmap = mipmaps[ j ]; + + if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) { + + if ( glFormat !== null ) { + + state.compressedTexImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data ); + + } else { + + console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' ); + + } + + } else { + + state.texImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + } + + } + + textureProperties.__maxMipLevel = mipmaps.length - 1; + + } else { + + mipmaps = texture.mipmaps; + + for ( let i = 0; i < 6; i ++ ) { + + if ( isDataTexture ) { + + state.texImage2D( 34069 + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data ); + + for ( let j = 0; j < mipmaps.length; j ++ ) { + + const mipmap = mipmaps[ j ]; + const mipmapImage = mipmap.image[ i ].image; + + state.texImage2D( 34069 + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data ); + + } + + } else { + + state.texImage2D( 34069 + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] ); + + for ( let j = 0; j < mipmaps.length; j ++ ) { + + const mipmap = mipmaps[ j ]; + + state.texImage2D( 34069 + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] ); + + } + + } + + } + + textureProperties.__maxMipLevel = mipmaps.length; + + } + + if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { + + // We assume images for cube map have the same size. + generateMipmap( 34067, texture, image.width, image.height ); + + } + + textureProperties.__version = texture.version; + + if ( texture.onUpdate ) texture.onUpdate( texture ); + + } + + // Render targets + + // Setup storage for target texture and bind it to correct framebuffer + function setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget ) { + + const glFormat = utils.convert( texture.format ); + const glType = utils.convert( texture.type ); + const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType ); + + if ( textureTarget === 32879 || textureTarget === 35866 ) { + + state.texImage3D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null ); + + } else { + + state.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null ); + + } + + state.bindFramebuffer( 36160, framebuffer ); + _gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( texture ).__webglTexture, 0 ); + state.bindFramebuffer( 36160, null ); + + } + + // Setup storage for internal depth/stencil buffers and bind to correct framebuffer + function setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) { + + _gl.bindRenderbuffer( 36161, renderbuffer ); + + if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) { + + let glInternalFormat = 33189; + + if ( isMultisample ) { + + const depthTexture = renderTarget.depthTexture; + + if ( depthTexture && depthTexture.isDepthTexture ) { + + if ( depthTexture.type === FloatType ) { + + glInternalFormat = 36012; + + } else if ( depthTexture.type === UnsignedIntType ) { + + glInternalFormat = 33190; + + } + + } + + const samples = getRenderTargetSamples( renderTarget ); + + _gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height ); + + } else { + + _gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height ); + + } + + _gl.framebufferRenderbuffer( 36160, 36096, 36161, renderbuffer ); + + } else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) { + + if ( isMultisample ) { + + const samples = getRenderTargetSamples( renderTarget ); + + _gl.renderbufferStorageMultisample( 36161, samples, 35056, renderTarget.width, renderTarget.height ); + + } else { + + _gl.renderbufferStorage( 36161, 34041, renderTarget.width, renderTarget.height ); + + } + + + _gl.framebufferRenderbuffer( 36160, 33306, 36161, renderbuffer ); + + } else { + + // Use the first texture for MRT so far + const texture = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture[ 0 ] : renderTarget.texture; + + const glFormat = utils.convert( texture.format ); + const glType = utils.convert( texture.type ); + const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType ); + + if ( isMultisample ) { + + const samples = getRenderTargetSamples( renderTarget ); + + _gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height ); + + } else { + + _gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height ); + + } + + } + + _gl.bindRenderbuffer( 36161, null ); + + } + + // Setup resources for a Depth Texture for a FBO (needs an extension) + function setupDepthTexture( framebuffer, renderTarget ) { + + const isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget ); + if ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' ); + + state.bindFramebuffer( 36160, framebuffer ); + + if ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) { + + throw new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' ); + + } + + // upload an empty depth texture with framebuffer size + if ( ! properties.get( renderTarget.depthTexture ).__webglTexture || + renderTarget.depthTexture.image.width !== renderTarget.width || + renderTarget.depthTexture.image.height !== renderTarget.height ) { + + renderTarget.depthTexture.image.width = renderTarget.width; + renderTarget.depthTexture.image.height = renderTarget.height; + renderTarget.depthTexture.needsUpdate = true; + + } + + setTexture2D( renderTarget.depthTexture, 0 ); + + const webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture; + + if ( renderTarget.depthTexture.format === DepthFormat ) { + + _gl.framebufferTexture2D( 36160, 36096, 3553, webglDepthTexture, 0 ); + + } else if ( renderTarget.depthTexture.format === DepthStencilFormat ) { + + _gl.framebufferTexture2D( 36160, 33306, 3553, webglDepthTexture, 0 ); + + } else { + + throw new Error( 'Unknown depthTexture format' ); + + } + + } + + // Setup GL resources for a non-texture depth buffer + function setupDepthRenderbuffer( renderTarget ) { + + const renderTargetProperties = properties.get( renderTarget ); + + const isCube = ( renderTarget.isWebGLCubeRenderTarget === true ); + + if ( renderTarget.depthTexture ) { + + if ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' ); + + setupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget ); + + } else { + + if ( isCube ) { + + renderTargetProperties.__webglDepthbuffer = []; + + for ( let i = 0; i < 6; i ++ ) { + + state.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer[ i ] ); + renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer(); + setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false ); + + } + + } else { + + state.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer ); + renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer(); + setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false ); + + } + + } + + state.bindFramebuffer( 36160, null ); + + } + + // Set up GL resources for the render target + function setupRenderTarget( renderTarget ) { + + const texture = renderTarget.texture; + + const renderTargetProperties = properties.get( renderTarget ); + const textureProperties = properties.get( texture ); + + renderTarget.addEventListener( 'dispose', onRenderTargetDispose ); + + if ( renderTarget.isWebGLMultipleRenderTargets !== true ) { + + textureProperties.__webglTexture = _gl.createTexture(); + textureProperties.__version = texture.version; + info.memory.textures ++; + + } + + const isCube = ( renderTarget.isWebGLCubeRenderTarget === true ); + const isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true ); + const isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true ); + const isRenderTarget3D = texture.isDataTexture3D || texture.isDataTexture2DArray; + const supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2; + + // Handles WebGL2 RGBFormat fallback - #18858 + + if ( isWebGL2 && texture.format === RGBFormat && ( texture.type === FloatType || texture.type === HalfFloatType ) ) { + + texture.format = RGBAFormat; + + console.warn( 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.' ); + + } + + // Setup framebuffer + + if ( isCube ) { + + renderTargetProperties.__webglFramebuffer = []; + + for ( let i = 0; i < 6; i ++ ) { + + renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer(); + + } + + } else { + + renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer(); + + if ( isMultipleRenderTargets ) { + + if ( capabilities.drawBuffers ) { + + const textures = renderTarget.texture; + + for ( let i = 0, il = textures.length; i < il; i ++ ) { + + const attachmentProperties = properties.get( textures[ i ] ); + + if ( attachmentProperties.__webglTexture === undefined ) { + + attachmentProperties.__webglTexture = _gl.createTexture(); + + info.memory.textures ++; + + } + + } + + } else { + + console.warn( 'THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.' ); + + } + + } else if ( isMultisample ) { + + if ( isWebGL2 ) { + + renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer(); + renderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer(); + + _gl.bindRenderbuffer( 36161, renderTargetProperties.__webglColorRenderbuffer ); + + const glFormat = utils.convert( texture.format ); + const glType = utils.convert( texture.type ); + const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType ); + const samples = getRenderTargetSamples( renderTarget ); + _gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height ); + + state.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer ); + _gl.framebufferRenderbuffer( 36160, 36064, 36161, renderTargetProperties.__webglColorRenderbuffer ); + _gl.bindRenderbuffer( 36161, null ); + + if ( renderTarget.depthBuffer ) { + + renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer(); + setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true ); + + } + + state.bindFramebuffer( 36160, null ); + + + } else { + + console.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' ); + + } + + } + + } + + // Setup color buffer + + if ( isCube ) { + + state.bindTexture( 34067, textureProperties.__webglTexture ); + setTextureParameters( 34067, texture, supportsMips ); + + for ( let i = 0; i < 6; i ++ ) { + + setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, 36064, 34069 + i ); + + } + + if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { + + generateMipmap( 34067, texture, renderTarget.width, renderTarget.height ); + + } + + state.bindTexture( 34067, null ); + + } else if ( isMultipleRenderTargets ) { + + const textures = renderTarget.texture; + + for ( let i = 0, il = textures.length; i < il; i ++ ) { + + const attachment = textures[ i ]; + const attachmentProperties = properties.get( attachment ); + + state.bindTexture( 3553, attachmentProperties.__webglTexture ); + setTextureParameters( 3553, attachment, supportsMips ); + setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, 36064 + i, 3553 ); + + if ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) { + + generateMipmap( 3553, attachment, renderTarget.width, renderTarget.height ); + + } + + } + + state.bindTexture( 3553, null ); + + } else { + + let glTextureType = 3553; + + if ( isRenderTarget3D ) { + + // Render targets containing layers, i.e: Texture 3D and 2d arrays + + if ( isWebGL2 ) { + + const isTexture3D = texture.isDataTexture3D; + glTextureType = isTexture3D ? 32879 : 35866; + + } else { + + console.warn( 'THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.' ); + + } + + } + + state.bindTexture( glTextureType, textureProperties.__webglTexture ); + setTextureParameters( glTextureType, texture, supportsMips ); + setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, 36064, glTextureType ); + + if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { + + generateMipmap( glTextureType, texture, renderTarget.width, renderTarget.height, renderTarget.depth ); + + } + + state.bindTexture( glTextureType, null ); + + } + + // Setup depth and stencil buffers + + if ( renderTarget.depthBuffer ) { + + setupDepthRenderbuffer( renderTarget ); + + } + + } + + function updateRenderTargetMipmap( renderTarget ) { + + const supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2; + + const textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ]; + + for ( let i = 0, il = textures.length; i < il; i ++ ) { + + const texture = textures[ i ]; + + if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { + + const target = renderTarget.isWebGLCubeRenderTarget ? 34067 : 3553; + const webglTexture = properties.get( texture ).__webglTexture; + + state.bindTexture( target, webglTexture ); + generateMipmap( target, texture, renderTarget.width, renderTarget.height ); + state.bindTexture( target, null ); + + } + + } + + } + + function updateMultisampleRenderTarget( renderTarget ) { + + if ( renderTarget.isWebGLMultisampleRenderTarget ) { + + if ( isWebGL2 ) { + + const width = renderTarget.width; + const height = renderTarget.height; + let mask = 16384; + + if ( renderTarget.depthBuffer ) mask |= 256; + if ( renderTarget.stencilBuffer ) mask |= 1024; + + const renderTargetProperties = properties.get( renderTarget ); + + state.bindFramebuffer( 36008, renderTargetProperties.__webglMultisampledFramebuffer ); + state.bindFramebuffer( 36009, renderTargetProperties.__webglFramebuffer ); + + _gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, 9728 ); + + state.bindFramebuffer( 36008, null ); + state.bindFramebuffer( 36009, renderTargetProperties.__webglMultisampledFramebuffer ); + + } else { + + console.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' ); + + } + + } + + } + + function getRenderTargetSamples( renderTarget ) { + + return ( isWebGL2 && renderTarget.isWebGLMultisampleRenderTarget ) ? + Math.min( maxSamples, renderTarget.samples ) : 0; + + } + + function updateVideoTexture( texture ) { + + const frame = info.render.frame; + + // Check the last frame we updated the VideoTexture + + if ( _videoTextures.get( texture ) !== frame ) { + + _videoTextures.set( texture, frame ); + texture.update(); + + } + + } + + // backwards compatibility + + let warnedTexture2D = false; + let warnedTextureCube = false; + + function safeSetTexture2D( texture, slot ) { + + if ( texture && texture.isWebGLRenderTarget ) { + + if ( warnedTexture2D === false ) { + + console.warn( 'THREE.WebGLTextures.safeSetTexture2D: don\'t use render targets as textures. Use their .texture property instead.' ); + warnedTexture2D = true; + + } + + texture = texture.texture; + + } + + setTexture2D( texture, slot ); + + } + + function safeSetTextureCube( texture, slot ) { + + if ( texture && texture.isWebGLCubeRenderTarget ) { + + if ( warnedTextureCube === false ) { + + console.warn( 'THREE.WebGLTextures.safeSetTextureCube: don\'t use cube render targets as textures. Use their .texture property instead.' ); + warnedTextureCube = true; + + } + + texture = texture.texture; + + } + + + setTextureCube( texture, slot ); + + } + + // + + this.allocateTextureUnit = allocateTextureUnit; + this.resetTextureUnits = resetTextureUnits; + + this.setTexture2D = setTexture2D; + this.setTexture2DArray = setTexture2DArray; + this.setTexture3D = setTexture3D; + this.setTextureCube = setTextureCube; + this.setupRenderTarget = setupRenderTarget; + this.updateRenderTargetMipmap = updateRenderTargetMipmap; + this.updateMultisampleRenderTarget = updateMultisampleRenderTarget; + + this.safeSetTexture2D = safeSetTexture2D; + this.safeSetTextureCube = safeSetTextureCube; + +} + +function WebGLUtils( gl, extensions, capabilities ) { + + const isWebGL2 = capabilities.isWebGL2; + + function convert( p ) { + + let extension; + + if ( p === UnsignedByteType ) return 5121; + if ( p === UnsignedShort4444Type ) return 32819; + if ( p === UnsignedShort5551Type ) return 32820; + if ( p === UnsignedShort565Type ) return 33635; + + if ( p === ByteType ) return 5120; + if ( p === ShortType ) return 5122; + if ( p === UnsignedShortType ) return 5123; + if ( p === IntType ) return 5124; + if ( p === UnsignedIntType ) return 5125; + if ( p === FloatType ) return 5126; + + if ( p === HalfFloatType ) { + + if ( isWebGL2 ) return 5131; + + extension = extensions.get( 'OES_texture_half_float' ); + + if ( extension !== null ) { + + return extension.HALF_FLOAT_OES; + + } else { + + return null; + + } + + } + + if ( p === AlphaFormat ) return 6406; + if ( p === RGBFormat ) return 6407; + if ( p === RGBAFormat ) return 6408; + if ( p === LuminanceFormat ) return 6409; + if ( p === LuminanceAlphaFormat ) return 6410; + if ( p === DepthFormat ) return 6402; + if ( p === DepthStencilFormat ) return 34041; + if ( p === RedFormat ) return 6403; + + // WebGL2 formats. + + if ( p === RedIntegerFormat ) return 36244; + if ( p === RGFormat ) return 33319; + if ( p === RGIntegerFormat ) return 33320; + if ( p === RGBIntegerFormat ) return 36248; + if ( p === RGBAIntegerFormat ) return 36249; + + if ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || + p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_s3tc' ); + + if ( extension !== null ) { + + if ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; + if ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; + if ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; + if ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; + + } else { + + return null; + + } + + } + + if ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || + p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_pvrtc' ); + + if ( extension !== null ) { + + if ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; + if ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; + if ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; + if ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; + + } else { + + return null; + + } + + } + + if ( p === RGB_ETC1_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_etc1' ); + + if ( extension !== null ) { + + return extension.COMPRESSED_RGB_ETC1_WEBGL; + + } else { + + return null; + + } + + } + + if ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_etc' ); + + if ( extension !== null ) { + + if ( p === RGB_ETC2_Format ) return extension.COMPRESSED_RGB8_ETC2; + if ( p === RGBA_ETC2_EAC_Format ) return extension.COMPRESSED_RGBA8_ETC2_EAC; + + } + + } + + if ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format || + p === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format || + p === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format || + p === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format || + p === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format || + p === SRGB8_ALPHA8_ASTC_4x4_Format || p === SRGB8_ALPHA8_ASTC_5x4_Format || p === SRGB8_ALPHA8_ASTC_5x5_Format || + p === SRGB8_ALPHA8_ASTC_6x5_Format || p === SRGB8_ALPHA8_ASTC_6x6_Format || p === SRGB8_ALPHA8_ASTC_8x5_Format || + p === SRGB8_ALPHA8_ASTC_8x6_Format || p === SRGB8_ALPHA8_ASTC_8x8_Format || p === SRGB8_ALPHA8_ASTC_10x5_Format || + p === SRGB8_ALPHA8_ASTC_10x6_Format || p === SRGB8_ALPHA8_ASTC_10x8_Format || p === SRGB8_ALPHA8_ASTC_10x10_Format || + p === SRGB8_ALPHA8_ASTC_12x10_Format || p === SRGB8_ALPHA8_ASTC_12x12_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_astc' ); + + if ( extension !== null ) { + + // TODO Complete? + + return p; + + } else { + + return null; + + } + + } + + if ( p === RGBA_BPTC_Format ) { + + extension = extensions.get( 'EXT_texture_compression_bptc' ); + + if ( extension !== null ) { + + // TODO Complete? + + return p; + + } else { + + return null; + + } + + } + + if ( p === UnsignedInt248Type ) { + + if ( isWebGL2 ) return 34042; + + extension = extensions.get( 'WEBGL_depth_texture' ); + + if ( extension !== null ) { + + return extension.UNSIGNED_INT_24_8_WEBGL; + + } else { + + return null; + + } + + } + + } + + return { convert: convert }; + +} + +class ArrayCamera extends PerspectiveCamera { + + constructor( array = [] ) { + + super(); + + this.cameras = array; + + } + +} + +ArrayCamera.prototype.isArrayCamera = true; + +class Group extends Object3D { + + constructor() { + + super(); + + this.type = 'Group'; + + } + +} + +Group.prototype.isGroup = true; + +const _moveEvent = { type: 'move' }; + +class WebXRController { + + constructor() { + + this._targetRay = null; + this._grip = null; + this._hand = null; + + } + + getHandSpace() { + + if ( this._hand === null ) { + + this._hand = new Group(); + this._hand.matrixAutoUpdate = false; + this._hand.visible = false; + + this._hand.joints = {}; + this._hand.inputState = { pinching: false }; + + } + + return this._hand; + + } + + getTargetRaySpace() { + + if ( this._targetRay === null ) { + + this._targetRay = new Group(); + this._targetRay.matrixAutoUpdate = false; + this._targetRay.visible = false; + this._targetRay.hasLinearVelocity = false; + this._targetRay.linearVelocity = new Vector3(); + this._targetRay.hasAngularVelocity = false; + this._targetRay.angularVelocity = new Vector3(); + + } + + return this._targetRay; + + } + + getGripSpace() { + + if ( this._grip === null ) { + + this._grip = new Group(); + this._grip.matrixAutoUpdate = false; + this._grip.visible = false; + this._grip.hasLinearVelocity = false; + this._grip.linearVelocity = new Vector3(); + this._grip.hasAngularVelocity = false; + this._grip.angularVelocity = new Vector3(); + + } + + return this._grip; + + } + + dispatchEvent( event ) { + + if ( this._targetRay !== null ) { + + this._targetRay.dispatchEvent( event ); + + } + + if ( this._grip !== null ) { + + this._grip.dispatchEvent( event ); + + } + + if ( this._hand !== null ) { + + this._hand.dispatchEvent( event ); + + } + + return this; + + } + + disconnect( inputSource ) { + + this.dispatchEvent( { type: 'disconnected', data: inputSource } ); + + if ( this._targetRay !== null ) { + + this._targetRay.visible = false; + + } + + if ( this._grip !== null ) { + + this._grip.visible = false; + + } + + if ( this._hand !== null ) { + + this._hand.visible = false; + + } + + return this; + + } + + update( inputSource, frame, referenceSpace ) { + + let inputPose = null; + let gripPose = null; + let handPose = null; + + const targetRay = this._targetRay; + const grip = this._grip; + const hand = this._hand; + + if ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) { + + if ( targetRay !== null ) { + + inputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace ); + + if ( inputPose !== null ) { + + targetRay.matrix.fromArray( inputPose.transform.matrix ); + targetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale ); + + if ( inputPose.linearVelocity ) { + + targetRay.hasLinearVelocity = true; + targetRay.linearVelocity.copy( inputPose.linearVelocity ); + + } else { + + targetRay.hasLinearVelocity = false; + + } + + if ( inputPose.angularVelocity ) { + + targetRay.hasAngularVelocity = true; + targetRay.angularVelocity.copy( inputPose.angularVelocity ); + + } else { + + targetRay.hasAngularVelocity = false; + + } + + this.dispatchEvent( _moveEvent ); + + } + + } + + if ( hand && inputSource.hand ) { + + handPose = true; + + for ( const inputjoint of inputSource.hand.values() ) { + + // Update the joints groups with the XRJoint poses + const jointPose = frame.getJointPose( inputjoint, referenceSpace ); + + if ( hand.joints[ inputjoint.jointName ] === undefined ) { + + // The transform of this joint will be updated with the joint pose on each frame + const joint = new Group(); + joint.matrixAutoUpdate = false; + joint.visible = false; + hand.joints[ inputjoint.jointName ] = joint; + // ?? + hand.add( joint ); + + } + + const joint = hand.joints[ inputjoint.jointName ]; + + if ( jointPose !== null ) { + + joint.matrix.fromArray( jointPose.transform.matrix ); + joint.matrix.decompose( joint.position, joint.rotation, joint.scale ); + joint.jointRadius = jointPose.radius; + + } + + joint.visible = jointPose !== null; + + } + + // Custom events + + // Check pinchz + const indexTip = hand.joints[ 'index-finger-tip' ]; + const thumbTip = hand.joints[ 'thumb-tip' ]; + const distance = indexTip.position.distanceTo( thumbTip.position ); + + const distanceToPinch = 0.02; + const threshold = 0.005; + + if ( hand.inputState.pinching && distance > distanceToPinch + threshold ) { + + hand.inputState.pinching = false; + this.dispatchEvent( { + type: 'pinchend', + handedness: inputSource.handedness, + target: this + } ); + + } else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) { + + hand.inputState.pinching = true; + this.dispatchEvent( { + type: 'pinchstart', + handedness: inputSource.handedness, + target: this + } ); + + } + + } else { + + if ( grip !== null && inputSource.gripSpace ) { + + gripPose = frame.getPose( inputSource.gripSpace, referenceSpace ); + + if ( gripPose !== null ) { + + grip.matrix.fromArray( gripPose.transform.matrix ); + grip.matrix.decompose( grip.position, grip.rotation, grip.scale ); + + if ( gripPose.linearVelocity ) { + + grip.hasLinearVelocity = true; + grip.linearVelocity.copy( gripPose.linearVelocity ); + + } else { + + grip.hasLinearVelocity = false; + + } + + if ( gripPose.angularVelocity ) { + + grip.hasAngularVelocity = true; + grip.angularVelocity.copy( gripPose.angularVelocity ); + + } else { + + grip.hasAngularVelocity = false; + + } + + } + + } + + } + + } + + if ( targetRay !== null ) { + + targetRay.visible = ( inputPose !== null ); + + } + + if ( grip !== null ) { + + grip.visible = ( gripPose !== null ); + + } + + if ( hand !== null ) { + + hand.visible = ( handPose !== null ); + + } + + return this; + + } + +} + +class WebXRManager extends EventDispatcher { + + constructor( renderer, gl ) { + + super(); + + const scope = this; + const state = renderer.state; + + let session = null; + let framebufferScaleFactor = 1.0; + + let referenceSpace = null; + let referenceSpaceType = 'local-floor'; + + let pose = null; + let glBinding = null; + let glFramebuffer = null; + let glProjLayer = null; + let glBaseLayer = null; + + const controllers = []; + const inputSourcesMap = new Map(); + + // + + const cameraL = new PerspectiveCamera(); + cameraL.layers.enable( 1 ); + cameraL.viewport = new Vector4(); + + const cameraR = new PerspectiveCamera(); + cameraR.layers.enable( 2 ); + cameraR.viewport = new Vector4(); + + const cameras = [ cameraL, cameraR ]; + + const cameraVR = new ArrayCamera(); + cameraVR.layers.enable( 1 ); + cameraVR.layers.enable( 2 ); + + let _currentDepthNear = null; + let _currentDepthFar = null; + + // + + this.cameraAutoUpdate = true; + this.enabled = false; + + this.isPresenting = false; + + this.getController = function ( index ) { + + let controller = controllers[ index ]; + + if ( controller === undefined ) { + + controller = new WebXRController(); + controllers[ index ] = controller; + + } + + return controller.getTargetRaySpace(); + + }; + + this.getControllerGrip = function ( index ) { + + let controller = controllers[ index ]; + + if ( controller === undefined ) { + + controller = new WebXRController(); + controllers[ index ] = controller; + + } + + return controller.getGripSpace(); + + }; + + this.getHand = function ( index ) { + + let controller = controllers[ index ]; + + if ( controller === undefined ) { + + controller = new WebXRController(); + controllers[ index ] = controller; + + } + + return controller.getHandSpace(); + + }; + + // + + function onSessionEvent( event ) { + + const controller = inputSourcesMap.get( event.inputSource ); + + if ( controller ) { + + controller.dispatchEvent( { type: event.type, data: event.inputSource } ); + + } + + } + + function onSessionEnd() { + + inputSourcesMap.forEach( function ( controller, inputSource ) { + + controller.disconnect( inputSource ); + + } ); + + inputSourcesMap.clear(); + + _currentDepthNear = null; + _currentDepthFar = null; + + // restore framebuffer/rendering state + + state.bindXRFramebuffer( null ); + renderer.setRenderTarget( renderer.getRenderTarget() ); + + // + + animation.stop(); + + scope.isPresenting = false; + + scope.dispatchEvent( { type: 'sessionend' } ); + + } + + this.setFramebufferScaleFactor = function ( value ) { + + framebufferScaleFactor = value; + + if ( scope.isPresenting === true ) { + + console.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' ); + + } + + }; + + this.setReferenceSpaceType = function ( value ) { + + referenceSpaceType = value; + + if ( scope.isPresenting === true ) { + + console.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' ); + + } + + }; + + this.getReferenceSpace = function () { + + return referenceSpace; + + }; + + this.getSession = function () { + + return session; + + }; + + this.setSession = async function ( value ) { + + session = value; + + if ( session !== null ) { + + session.addEventListener( 'select', onSessionEvent ); + session.addEventListener( 'selectstart', onSessionEvent ); + session.addEventListener( 'selectend', onSessionEvent ); + session.addEventListener( 'squeeze', onSessionEvent ); + session.addEventListener( 'squeezestart', onSessionEvent ); + session.addEventListener( 'squeezeend', onSessionEvent ); + session.addEventListener( 'end', onSessionEnd ); + session.addEventListener( 'inputsourceschange', onInputSourcesChange ); + + const attributes = gl.getContextAttributes(); + + if ( attributes.xrCompatible !== true ) { + + await gl.makeXRCompatible(); + + } + + if ( session.renderState.layers === undefined ) { + + const layerInit = { + antialias: attributes.antialias, + alpha: attributes.alpha, + depth: attributes.depth, + stencil: attributes.stencil, + framebufferScaleFactor: framebufferScaleFactor + }; + + glBaseLayer = new XRWebGLLayer( session, gl, layerInit ); + + session.updateRenderState( { baseLayer: glBaseLayer } ); + + } else { + + let depthFormat = 0; + + // for anti-aliased output, use classic webgllayer for now + if ( attributes.antialias ) { + + const layerInit = { + antialias: true, + alpha: attributes.alpha, + depth: attributes.depth, + stencil: attributes.stencil, + framebufferScaleFactor: framebufferScaleFactor + }; + + glBaseLayer = new XRWebGLLayer( session, gl, layerInit ); + + session.updateRenderState( { layers: [ glBaseLayer ] } ); + + } else { + + if ( attributes.depth ) { + + depthFormat = attributes.stencil ? 34041 : 6402; + + } + + const projectionlayerInit = { + colorFormat: attributes.alpha ? 6408 : 6407, + depthFormat: depthFormat, + scaleFactor: framebufferScaleFactor + }; + + glBinding = new XRWebGLBinding( session, gl ); + + glProjLayer = glBinding.createProjectionLayer( projectionlayerInit ); + + glFramebuffer = gl.createFramebuffer(); + + session.updateRenderState( { layers: [ glProjLayer ] } ); + + } + + } + + referenceSpace = await session.requestReferenceSpace( referenceSpaceType ); + + animation.setContext( session ); + animation.start(); + + scope.isPresenting = true; + + scope.dispatchEvent( { type: 'sessionstart' } ); + + } + + }; + + function onInputSourcesChange( event ) { + + const inputSources = session.inputSources; + + // Assign inputSources to available controllers + + for ( let i = 0; i < controllers.length; i ++ ) { + + inputSourcesMap.set( inputSources[ i ], controllers[ i ] ); + + } + + // Notify disconnected + + for ( let i = 0; i < event.removed.length; i ++ ) { + + const inputSource = event.removed[ i ]; + const controller = inputSourcesMap.get( inputSource ); + + if ( controller ) { + + controller.dispatchEvent( { type: 'disconnected', data: inputSource } ); + inputSourcesMap.delete( inputSource ); + + } + + } + + // Notify connected + + for ( let i = 0; i < event.added.length; i ++ ) { + + const inputSource = event.added[ i ]; + const controller = inputSourcesMap.get( inputSource ); + + if ( controller ) { + + controller.dispatchEvent( { type: 'connected', data: inputSource } ); + + } + + } + + } + + // + + const cameraLPos = new Vector3(); + const cameraRPos = new Vector3(); + + /** + * Assumes 2 cameras that are parallel and share an X-axis, and that + * the cameras' projection and world matrices have already been set. + * And that near and far planes are identical for both cameras. + * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765 + */ + function setProjectionFromUnion( camera, cameraL, cameraR ) { + + cameraLPos.setFromMatrixPosition( cameraL.matrixWorld ); + cameraRPos.setFromMatrixPosition( cameraR.matrixWorld ); + + const ipd = cameraLPos.distanceTo( cameraRPos ); + + const projL = cameraL.projectionMatrix.elements; + const projR = cameraR.projectionMatrix.elements; + + // VR systems will have identical far and near planes, and + // most likely identical top and bottom frustum extents. + // Use the left camera for these values. + const near = projL[ 14 ] / ( projL[ 10 ] - 1 ); + const far = projL[ 14 ] / ( projL[ 10 ] + 1 ); + const topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ]; + const bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ]; + + const leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ]; + const rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ]; + const left = near * leftFov; + const right = near * rightFov; + + // Calculate the new camera's position offset from the + // left camera. xOffset should be roughly half `ipd`. + const zOffset = ipd / ( - leftFov + rightFov ); + const xOffset = zOffset * - leftFov; + + // TODO: Better way to apply this offset? + cameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale ); + camera.translateX( xOffset ); + camera.translateZ( zOffset ); + camera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale ); + camera.matrixWorldInverse.copy( camera.matrixWorld ).invert(); + + // Find the union of the frustum values of the cameras and scale + // the values so that the near plane's position does not change in world space, + // although must now be relative to the new union camera. + const near2 = near + zOffset; + const far2 = far + zOffset; + const left2 = left - xOffset; + const right2 = right + ( ipd - xOffset ); + const top2 = topFov * far / far2 * near2; + const bottom2 = bottomFov * far / far2 * near2; + + camera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 ); + + } + + function updateCamera( camera, parent ) { + + if ( parent === null ) { + + camera.matrixWorld.copy( camera.matrix ); + + } else { + + camera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix ); + + } + + camera.matrixWorldInverse.copy( camera.matrixWorld ).invert(); + + } + + this.updateCamera = function ( camera ) { + + if ( session === null ) return; + + cameraVR.near = cameraR.near = cameraL.near = camera.near; + cameraVR.far = cameraR.far = cameraL.far = camera.far; + + if ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) { + + // Note that the new renderState won't apply until the next frame. See #18320 + + session.updateRenderState( { + depthNear: cameraVR.near, + depthFar: cameraVR.far + } ); + + _currentDepthNear = cameraVR.near; + _currentDepthFar = cameraVR.far; + + } + + const parent = camera.parent; + const cameras = cameraVR.cameras; + + updateCamera( cameraVR, parent ); + + for ( let i = 0; i < cameras.length; i ++ ) { + + updateCamera( cameras[ i ], parent ); + + } + + cameraVR.matrixWorld.decompose( cameraVR.position, cameraVR.quaternion, cameraVR.scale ); + + // update user camera and its children + + camera.position.copy( cameraVR.position ); + camera.quaternion.copy( cameraVR.quaternion ); + camera.scale.copy( cameraVR.scale ); + camera.matrix.copy( cameraVR.matrix ); + camera.matrixWorld.copy( cameraVR.matrixWorld ); + + const children = camera.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].updateMatrixWorld( true ); + + } + + // update projection matrix for proper view frustum culling + + if ( cameras.length === 2 ) { + + setProjectionFromUnion( cameraVR, cameraL, cameraR ); + + } else { + + // assume single camera setup (AR) + + cameraVR.projectionMatrix.copy( cameraL.projectionMatrix ); + + } + + }; + + this.getCamera = function () { + + return cameraVR; + + }; + + this.getFoveation = function () { + + if ( glProjLayer !== null ) { + + return glProjLayer.fixedFoveation; + + } + + if ( glBaseLayer !== null ) { + + return glBaseLayer.fixedFoveation; + + } + + return undefined; + + }; + + this.setFoveation = function ( foveation ) { + + // 0 = no foveation = full resolution + // 1 = maximum foveation = the edges render at lower resolution + + if ( glProjLayer !== null ) { + + glProjLayer.fixedFoveation = foveation; + + } + + if ( glBaseLayer !== null && glBaseLayer.fixedFoveation !== undefined ) { + + glBaseLayer.fixedFoveation = foveation; + + } + + }; + + // Animation Loop + + let onAnimationFrameCallback = null; + + function onAnimationFrame( time, frame ) { + + pose = frame.getViewerPose( referenceSpace ); + + if ( pose !== null ) { + + const views = pose.views; + + if ( glBaseLayer !== null ) { + + state.bindXRFramebuffer( glBaseLayer.framebuffer ); + + } + + let cameraVRNeedsUpdate = false; + + // check if it's necessary to rebuild cameraVR's camera list + + if ( views.length !== cameraVR.cameras.length ) { + + cameraVR.cameras.length = 0; + + cameraVRNeedsUpdate = true; + + + } + + for ( let i = 0; i < views.length; i ++ ) { + + const view = views[ i ]; + + let viewport = null; + + if ( glBaseLayer !== null ) { + + viewport = glBaseLayer.getViewport( view ); + + } else { + + const glSubImage = glBinding.getViewSubImage( glProjLayer, view ); + + state.bindXRFramebuffer( glFramebuffer ); + + if ( glSubImage.depthStencilTexture !== undefined ) { + + gl.framebufferTexture2D( 36160, 36096, 3553, glSubImage.depthStencilTexture, 0 ); + + } + + gl.framebufferTexture2D( 36160, 36064, 3553, glSubImage.colorTexture, 0 ); + + viewport = glSubImage.viewport; + + } + + const camera = cameras[ i ]; + + camera.matrix.fromArray( view.transform.matrix ); + + camera.projectionMatrix.fromArray( view.projectionMatrix ); + + camera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height ); + + if ( i === 0 ) { + + cameraVR.matrix.copy( camera.matrix ); + + } + + if ( cameraVRNeedsUpdate === true ) { + + cameraVR.cameras.push( camera ); + + } + + } + + } + + // + + const inputSources = session.inputSources; + + for ( let i = 0; i < controllers.length; i ++ ) { + + const controller = controllers[ i ]; + const inputSource = inputSources[ i ]; + + controller.update( inputSource, frame, referenceSpace ); + + } + + if ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame ); + + } + + const animation = new WebGLAnimation(); + + animation.setAnimationLoop( onAnimationFrame ); + + this.setAnimationLoop = function ( callback ) { + + onAnimationFrameCallback = callback; + + }; + + this.dispose = function () {}; + + } + +} + +function WebGLMaterials( properties ) { + + function refreshFogUniforms( uniforms, fog ) { + + uniforms.fogColor.value.copy( fog.color ); + + if ( fog.isFog ) { + + uniforms.fogNear.value = fog.near; + uniforms.fogFar.value = fog.far; + + } else if ( fog.isFogExp2 ) { + + uniforms.fogDensity.value = fog.density; + + } + + } + + function refreshMaterialUniforms( uniforms, material, pixelRatio, height, transmissionRenderTarget ) { + + if ( material.isMeshBasicMaterial ) { + + refreshUniformsCommon( uniforms, material ); + + } else if ( material.isMeshLambertMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsLambert( uniforms, material ); + + } else if ( material.isMeshToonMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsToon( uniforms, material ); + + } else if ( material.isMeshPhongMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsPhong( uniforms, material ); + + } else if ( material.isMeshStandardMaterial ) { + + refreshUniformsCommon( uniforms, material ); + + if ( material.isMeshPhysicalMaterial ) { + + refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ); + + } else { + + refreshUniformsStandard( uniforms, material ); + + } + + } else if ( material.isMeshMatcapMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsMatcap( uniforms, material ); + + } else if ( material.isMeshDepthMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsDepth( uniforms, material ); + + } else if ( material.isMeshDistanceMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsDistance( uniforms, material ); + + } else if ( material.isMeshNormalMaterial ) { + + refreshUniformsCommon( uniforms, material ); + refreshUniformsNormal( uniforms, material ); + + } else if ( material.isLineBasicMaterial ) { + + refreshUniformsLine( uniforms, material ); + + if ( material.isLineDashedMaterial ) { + + refreshUniformsDash( uniforms, material ); + + } + + } else if ( material.isPointsMaterial ) { + + refreshUniformsPoints( uniforms, material, pixelRatio, height ); + + } else if ( material.isSpriteMaterial ) { + + refreshUniformsSprites( uniforms, material ); + + } else if ( material.isShadowMaterial ) { + + uniforms.color.value.copy( material.color ); + uniforms.opacity.value = material.opacity; + + } else if ( material.isShaderMaterial ) { + + material.uniformsNeedUpdate = false; // #15581 + + } + + } + + function refreshUniformsCommon( uniforms, material ) { + + uniforms.opacity.value = material.opacity; + + if ( material.color ) { + + uniforms.diffuse.value.copy( material.color ); + + } + + if ( material.emissive ) { + + uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity ); + + } + + if ( material.map ) { + + uniforms.map.value = material.map; + + } + + if ( material.alphaMap ) { + + uniforms.alphaMap.value = material.alphaMap; + + } + + if ( material.specularMap ) { + + uniforms.specularMap.value = material.specularMap; + + } + + const envMap = properties.get( material ).envMap; + + if ( envMap ) { + + uniforms.envMap.value = envMap; + + uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1; + + uniforms.reflectivity.value = material.reflectivity; + uniforms.refractionRatio.value = material.refractionRatio; + + const maxMipLevel = properties.get( envMap ).__maxMipLevel; + + if ( maxMipLevel !== undefined ) { + + uniforms.maxMipLevel.value = maxMipLevel; + + } + + } + + if ( material.lightMap ) { + + uniforms.lightMap.value = material.lightMap; + uniforms.lightMapIntensity.value = material.lightMapIntensity; + + } + + if ( material.aoMap ) { + + uniforms.aoMap.value = material.aoMap; + uniforms.aoMapIntensity.value = material.aoMapIntensity; + + } + + // uv repeat and offset setting priorities + // 1. color map + // 2. specular map + // 3. displacementMap map + // 4. normal map + // 5. bump map + // 6. roughnessMap map + // 7. metalnessMap map + // 8. alphaMap map + // 9. emissiveMap map + // 10. clearcoat map + // 11. clearcoat normal map + // 12. clearcoat roughnessMap map + // 13. specular intensity map + // 14. specular tint map + + let uvScaleMap; + + if ( material.map ) { + + uvScaleMap = material.map; + + } else if ( material.specularMap ) { + + uvScaleMap = material.specularMap; + + } else if ( material.displacementMap ) { + + uvScaleMap = material.displacementMap; + + } else if ( material.normalMap ) { + + uvScaleMap = material.normalMap; + + } else if ( material.bumpMap ) { + + uvScaleMap = material.bumpMap; + + } else if ( material.roughnessMap ) { + + uvScaleMap = material.roughnessMap; + + } else if ( material.metalnessMap ) { + + uvScaleMap = material.metalnessMap; + + } else if ( material.alphaMap ) { + + uvScaleMap = material.alphaMap; + + } else if ( material.emissiveMap ) { + + uvScaleMap = material.emissiveMap; + + } else if ( material.clearcoatMap ) { + + uvScaleMap = material.clearcoatMap; + + } else if ( material.clearcoatNormalMap ) { + + uvScaleMap = material.clearcoatNormalMap; + + } else if ( material.clearcoatRoughnessMap ) { + + uvScaleMap = material.clearcoatRoughnessMap; + + } else if ( material.specularIntensityMap ) { + + uvScaleMap = material.specularIntensityMap; + + } else if ( material.specularTintMap ) { + + uvScaleMap = material.specularTintMap; + + } + + if ( uvScaleMap !== undefined ) { + + // backwards compatibility + if ( uvScaleMap.isWebGLRenderTarget ) { + + uvScaleMap = uvScaleMap.texture; + + } + + if ( uvScaleMap.matrixAutoUpdate === true ) { + + uvScaleMap.updateMatrix(); + + } + + uniforms.uvTransform.value.copy( uvScaleMap.matrix ); + + } + + // uv repeat and offset setting priorities for uv2 + // 1. ao map + // 2. light map + + let uv2ScaleMap; + + if ( material.aoMap ) { + + uv2ScaleMap = material.aoMap; + + } else if ( material.lightMap ) { + + uv2ScaleMap = material.lightMap; + + } + + if ( uv2ScaleMap !== undefined ) { + + // backwards compatibility + if ( uv2ScaleMap.isWebGLRenderTarget ) { + + uv2ScaleMap = uv2ScaleMap.texture; + + } + + if ( uv2ScaleMap.matrixAutoUpdate === true ) { + + uv2ScaleMap.updateMatrix(); + + } + + uniforms.uv2Transform.value.copy( uv2ScaleMap.matrix ); + + } + + } + + function refreshUniformsLine( uniforms, material ) { + + uniforms.diffuse.value.copy( material.color ); + uniforms.opacity.value = material.opacity; + + } + + function refreshUniformsDash( uniforms, material ) { + + uniforms.dashSize.value = material.dashSize; + uniforms.totalSize.value = material.dashSize + material.gapSize; + uniforms.scale.value = material.scale; + + } + + function refreshUniformsPoints( uniforms, material, pixelRatio, height ) { + + uniforms.diffuse.value.copy( material.color ); + uniforms.opacity.value = material.opacity; + uniforms.size.value = material.size * pixelRatio; + uniforms.scale.value = height * 0.5; + + if ( material.map ) { + + uniforms.map.value = material.map; + + } + + if ( material.alphaMap ) { + + uniforms.alphaMap.value = material.alphaMap; + + } + + // uv repeat and offset setting priorities + // 1. color map + // 2. alpha map + + let uvScaleMap; + + if ( material.map ) { + + uvScaleMap = material.map; + + } else if ( material.alphaMap ) { + + uvScaleMap = material.alphaMap; + + } + + if ( uvScaleMap !== undefined ) { + + if ( uvScaleMap.matrixAutoUpdate === true ) { + + uvScaleMap.updateMatrix(); + + } + + uniforms.uvTransform.value.copy( uvScaleMap.matrix ); + + } + + } + + function refreshUniformsSprites( uniforms, material ) { + + uniforms.diffuse.value.copy( material.color ); + uniforms.opacity.value = material.opacity; + uniforms.rotation.value = material.rotation; + + if ( material.map ) { + + uniforms.map.value = material.map; + + } + + if ( material.alphaMap ) { + + uniforms.alphaMap.value = material.alphaMap; + + } + + // uv repeat and offset setting priorities + // 1. color map + // 2. alpha map + + let uvScaleMap; + + if ( material.map ) { + + uvScaleMap = material.map; + + } else if ( material.alphaMap ) { + + uvScaleMap = material.alphaMap; + + } + + if ( uvScaleMap !== undefined ) { + + if ( uvScaleMap.matrixAutoUpdate === true ) { + + uvScaleMap.updateMatrix(); + + } + + uniforms.uvTransform.value.copy( uvScaleMap.matrix ); + + } + + } + + function refreshUniformsLambert( uniforms, material ) { + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + } + + function refreshUniformsPhong( uniforms, material ) { + + uniforms.specular.value.copy( material.specular ); + uniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 ) + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) uniforms.normalScale.value.negate(); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsToon( uniforms, material ) { + + if ( material.gradientMap ) { + + uniforms.gradientMap.value = material.gradientMap; + + } + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) uniforms.normalScale.value.negate(); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsStandard( uniforms, material ) { + + uniforms.roughness.value = material.roughness; + uniforms.metalness.value = material.metalness; + + if ( material.roughnessMap ) { + + uniforms.roughnessMap.value = material.roughnessMap; + + } + + if ( material.metalnessMap ) { + + uniforms.metalnessMap.value = material.metalnessMap; + + } + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) uniforms.normalScale.value.negate(); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + const envMap = properties.get( material ).envMap; + + if ( envMap ) { + + //uniforms.envMap.value = material.envMap; // part of uniforms common + uniforms.envMapIntensity.value = material.envMapIntensity; + + } + + } + + function refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ) { + + refreshUniformsStandard( uniforms, material ); + + uniforms.reflectivity.value = material.reflectivity; // also part of uniforms common + + uniforms.clearcoat.value = material.clearcoat; + uniforms.clearcoatRoughness.value = material.clearcoatRoughness; + + if ( material.sheen ) uniforms.sheen.value.copy( material.sheen ); + + if ( material.clearcoatMap ) { + + uniforms.clearcoatMap.value = material.clearcoatMap; + + } + + if ( material.clearcoatRoughnessMap ) { + + uniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap; + + } + + if ( material.clearcoatNormalMap ) { + + uniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale ); + uniforms.clearcoatNormalMap.value = material.clearcoatNormalMap; + + if ( material.side === BackSide ) { + + uniforms.clearcoatNormalScale.value.negate(); + + } + + } + + uniforms.transmission.value = material.transmission; + + if ( material.transmissionMap ) { + + uniforms.transmissionMap.value = material.transmissionMap; + + } + + if ( material.transmission > 0.0 ) { + + uniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture; + uniforms.transmissionSamplerSize.value.set( transmissionRenderTarget.width, transmissionRenderTarget.height ); + + } + + uniforms.thickness.value = material.thickness; + + if ( material.thicknessMap ) { + + uniforms.thicknessMap.value = material.thicknessMap; + + } + + uniforms.attenuationDistance.value = material.attenuationDistance; + uniforms.attenuationTint.value.copy( material.attenuationTint ); + + uniforms.specularIntensity.value = material.specularIntensity; + uniforms.specularTint.value.copy( material.specularTint ); + + if ( material.specularIntensityMap ) { + + uniforms.specularIntensityMap.value = material.specularIntensityMap; + + } + + if ( material.specularTintMap ) { + + uniforms.specularTintMap.value = material.specularTintMap; + + } + + } + + function refreshUniformsMatcap( uniforms, material ) { + + if ( material.matcap ) { + + uniforms.matcap.value = material.matcap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) uniforms.normalScale.value.negate(); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsDepth( uniforms, material ) { + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsDistance( uniforms, material ) { + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + uniforms.referencePosition.value.copy( material.referencePosition ); + uniforms.nearDistance.value = material.nearDistance; + uniforms.farDistance.value = material.farDistance; + + } + + function refreshUniformsNormal( uniforms, material ) { + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + if ( material.side === BackSide ) uniforms.normalScale.value.negate(); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + return { + refreshFogUniforms: refreshFogUniforms, + refreshMaterialUniforms: refreshMaterialUniforms + }; + +} + +function createCanvasElement() { + + const canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + canvas.style.display = 'block'; + return canvas; + +} + +function WebGLRenderer( parameters = {} ) { + + const _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(), + _context = parameters.context !== undefined ? parameters.context : null, + + _alpha = parameters.alpha !== undefined ? parameters.alpha : false, + _depth = parameters.depth !== undefined ? parameters.depth : true, + _stencil = parameters.stencil !== undefined ? parameters.stencil : true, + _antialias = parameters.antialias !== undefined ? parameters.antialias : false, + _premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true, + _preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false, + _powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default', + _failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false; + + let currentRenderList = null; + let currentRenderState = null; + + // render() can be called from within a callback triggered by another render. + // We track this so that the nested render call gets its list and state isolated from the parent render call. + + const renderListStack = []; + const renderStateStack = []; + + // public properties + + this.domElement = _canvas; + + // Debug configuration container + this.debug = { + + /** + * Enables error checking and reporting when shader programs are being compiled + * @type {boolean} + */ + checkShaderErrors: true + }; + + // clearing + + this.autoClear = true; + this.autoClearColor = true; + this.autoClearDepth = true; + this.autoClearStencil = true; + + // scene graph + + this.sortObjects = true; + + // user-defined clipping + + this.clippingPlanes = []; + this.localClippingEnabled = false; + + // physically based shading + + this.gammaFactor = 2.0; // for backwards compatibility + this.outputEncoding = LinearEncoding; + + // physical lights + + this.physicallyCorrectLights = false; + + // tone mapping + + this.toneMapping = NoToneMapping; + this.toneMappingExposure = 1.0; + + // internal properties + + const _this = this; + + let _isContextLost = false; + + // internal state cache + + let _currentActiveCubeFace = 0; + let _currentActiveMipmapLevel = 0; + let _currentRenderTarget = null; + let _currentMaterialId = - 1; + + let _currentCamera = null; + + const _currentViewport = new Vector4(); + const _currentScissor = new Vector4(); + let _currentScissorTest = null; + + // + + let _width = _canvas.width; + let _height = _canvas.height; + + let _pixelRatio = 1; + let _opaqueSort = null; + let _transparentSort = null; + + const _viewport = new Vector4( 0, 0, _width, _height ); + const _scissor = new Vector4( 0, 0, _width, _height ); + let _scissorTest = false; + + // + + const _currentDrawBuffers = []; + + // frustum + + const _frustum = new Frustum(); + + // clipping + + let _clippingEnabled = false; + let _localClippingEnabled = false; + + // transmission + + let _transmissionRenderTarget = null; + + // camera matrices cache + + const _projScreenMatrix = new Matrix4(); + + const _vector3 = new Vector3(); + + const _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true }; + + function getTargetPixelRatio() { + + return _currentRenderTarget === null ? _pixelRatio : 1; + + } + + // initialize + + let _gl = _context; + + function getContext( contextNames, contextAttributes ) { + + for ( let i = 0; i < contextNames.length; i ++ ) { + + const contextName = contextNames[ i ]; + const context = _canvas.getContext( contextName, contextAttributes ); + if ( context !== null ) return context; + + } + + return null; + + } + + try { + + const contextAttributes = { + alpha: _alpha, + depth: _depth, + stencil: _stencil, + antialias: _antialias, + premultipliedAlpha: _premultipliedAlpha, + preserveDrawingBuffer: _preserveDrawingBuffer, + powerPreference: _powerPreference, + failIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat + }; + + // event listeners must be registered before WebGL context is created, see #12753 + + _canvas.addEventListener( 'webglcontextlost', onContextLost, false ); + _canvas.addEventListener( 'webglcontextrestored', onContextRestore, false ); + + if ( _gl === null ) { + + const contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ]; + + if ( _this.isWebGL1Renderer === true ) { + + contextNames.shift(); + + } + + _gl = getContext( contextNames, contextAttributes ); + + if ( _gl === null ) { + + if ( getContext( contextNames ) ) { + + throw new Error( 'Error creating WebGL context with your selected attributes.' ); + + } else { + + throw new Error( 'Error creating WebGL context.' ); + + } + + } + + } + + // Some experimental-webgl implementations do not have getShaderPrecisionFormat + + if ( _gl.getShaderPrecisionFormat === undefined ) { + + _gl.getShaderPrecisionFormat = function () { + + return { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 }; + + }; + + } + + } catch ( error ) { + + console.error( 'THREE.WebGLRenderer: ' + error.message ); + throw error; + + } + + let extensions, capabilities, state, info; + let properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects; + let programCache, materials, renderLists, renderStates, clipping, shadowMap; + + let background, morphtargets, bufferRenderer, indexedBufferRenderer; + + let utils, bindingStates; + + function initGLContext() { + + extensions = new WebGLExtensions( _gl ); + + capabilities = new WebGLCapabilities( _gl, extensions, parameters ); + + extensions.init( capabilities ); + + utils = new WebGLUtils( _gl, extensions, capabilities ); + + state = new WebGLState( _gl, extensions, capabilities ); + + _currentDrawBuffers[ 0 ] = 1029; + + info = new WebGLInfo( _gl ); + properties = new WebGLProperties(); + textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ); + cubemaps = new WebGLCubeMaps( _this ); + cubeuvmaps = new WebGLCubeUVMaps( _this ); + attributes = new WebGLAttributes( _gl, capabilities ); + bindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities ); + geometries = new WebGLGeometries( _gl, attributes, info, bindingStates ); + objects = new WebGLObjects( _gl, geometries, attributes, info ); + morphtargets = new WebGLMorphtargets( _gl ); + clipping = new WebGLClipping( properties ); + programCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ); + materials = new WebGLMaterials( properties ); + renderLists = new WebGLRenderLists( properties ); + renderStates = new WebGLRenderStates( extensions, capabilities ); + background = new WebGLBackground( _this, cubemaps, state, objects, _premultipliedAlpha ); + shadowMap = new WebGLShadowMap( _this, objects, capabilities ); + + bufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities ); + indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities ); + + info.programs = programCache.programs; + + _this.capabilities = capabilities; + _this.extensions = extensions; + _this.properties = properties; + _this.renderLists = renderLists; + _this.shadowMap = shadowMap; + _this.state = state; + _this.info = info; + + } + + initGLContext(); + + // xr + + const xr = new WebXRManager( _this, _gl ); + + this.xr = xr; + + // API + + this.getContext = function () { + + return _gl; + + }; + + this.getContextAttributes = function () { + + return _gl.getContextAttributes(); + + }; + + this.forceContextLoss = function () { + + const extension = extensions.get( 'WEBGL_lose_context' ); + if ( extension ) extension.loseContext(); + + }; + + this.forceContextRestore = function () { + + const extension = extensions.get( 'WEBGL_lose_context' ); + if ( extension ) extension.restoreContext(); + + }; + + this.getPixelRatio = function () { + + return _pixelRatio; + + }; + + this.setPixelRatio = function ( value ) { + + if ( value === undefined ) return; + + _pixelRatio = value; + + this.setSize( _width, _height, false ); + + }; + + this.getSize = function ( target ) { + + return target.set( _width, _height ); + + }; + + this.setSize = function ( width, height, updateStyle ) { + + if ( xr.isPresenting ) { + + console.warn( 'THREE.WebGLRenderer: Can\'t change size while VR device is presenting.' ); + return; + + } + + _width = width; + _height = height; + + _canvas.width = Math.floor( width * _pixelRatio ); + _canvas.height = Math.floor( height * _pixelRatio ); + + if ( updateStyle !== false ) { + + _canvas.style.width = width + 'px'; + _canvas.style.height = height + 'px'; + + } + + this.setViewport( 0, 0, width, height ); + + }; + + this.getDrawingBufferSize = function ( target ) { + + return target.set( _width * _pixelRatio, _height * _pixelRatio ).floor(); + + }; + + this.setDrawingBufferSize = function ( width, height, pixelRatio ) { + + _width = width; + _height = height; + + _pixelRatio = pixelRatio; + + _canvas.width = Math.floor( width * pixelRatio ); + _canvas.height = Math.floor( height * pixelRatio ); + + this.setViewport( 0, 0, width, height ); + + }; + + this.getCurrentViewport = function ( target ) { + + return target.copy( _currentViewport ); + + }; + + this.getViewport = function ( target ) { + + return target.copy( _viewport ); + + }; + + this.setViewport = function ( x, y, width, height ) { + + if ( x.isVector4 ) { + + _viewport.set( x.x, x.y, x.z, x.w ); + + } else { + + _viewport.set( x, y, width, height ); + + } + + state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() ); + + }; + + this.getScissor = function ( target ) { + + return target.copy( _scissor ); + + }; + + this.setScissor = function ( x, y, width, height ) { + + if ( x.isVector4 ) { + + _scissor.set( x.x, x.y, x.z, x.w ); + + } else { + + _scissor.set( x, y, width, height ); + + } + + state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() ); + + }; + + this.getScissorTest = function () { + + return _scissorTest; + + }; + + this.setScissorTest = function ( boolean ) { + + state.setScissorTest( _scissorTest = boolean ); + + }; + + this.setOpaqueSort = function ( method ) { + + _opaqueSort = method; + + }; + + this.setTransparentSort = function ( method ) { + + _transparentSort = method; + + }; + + // Clearing + + this.getClearColor = function ( target ) { + + return target.copy( background.getClearColor() ); + + }; + + this.setClearColor = function () { + + background.setClearColor.apply( background, arguments ); + + }; + + this.getClearAlpha = function () { + + return background.getClearAlpha(); + + }; + + this.setClearAlpha = function () { + + background.setClearAlpha.apply( background, arguments ); + + }; + + this.clear = function ( color, depth, stencil ) { + + let bits = 0; + + if ( color === undefined || color ) bits |= 16384; + if ( depth === undefined || depth ) bits |= 256; + if ( stencil === undefined || stencil ) bits |= 1024; + + _gl.clear( bits ); + + }; + + this.clearColor = function () { + + this.clear( true, false, false ); + + }; + + this.clearDepth = function () { + + this.clear( false, true, false ); + + }; + + this.clearStencil = function () { + + this.clear( false, false, true ); + + }; + + // + + this.dispose = function () { + + _canvas.removeEventListener( 'webglcontextlost', onContextLost, false ); + _canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false ); + + renderLists.dispose(); + renderStates.dispose(); + properties.dispose(); + cubemaps.dispose(); + cubeuvmaps.dispose(); + objects.dispose(); + bindingStates.dispose(); + + xr.dispose(); + + xr.removeEventListener( 'sessionstart', onXRSessionStart ); + xr.removeEventListener( 'sessionend', onXRSessionEnd ); + + if ( _transmissionRenderTarget ) { + + _transmissionRenderTarget.dispose(); + _transmissionRenderTarget = null; + + } + + animation.stop(); + + }; + + // Events + + function onContextLost( event ) { + + event.preventDefault(); + + console.log( 'THREE.WebGLRenderer: Context Lost.' ); + + _isContextLost = true; + + } + + function onContextRestore( /* event */ ) { + + console.log( 'THREE.WebGLRenderer: Context Restored.' ); + + _isContextLost = false; + + const infoAutoReset = info.autoReset; + const shadowMapEnabled = shadowMap.enabled; + const shadowMapAutoUpdate = shadowMap.autoUpdate; + const shadowMapNeedsUpdate = shadowMap.needsUpdate; + const shadowMapType = shadowMap.type; + + initGLContext(); + + info.autoReset = infoAutoReset; + shadowMap.enabled = shadowMapEnabled; + shadowMap.autoUpdate = shadowMapAutoUpdate; + shadowMap.needsUpdate = shadowMapNeedsUpdate; + shadowMap.type = shadowMapType; + + } + + function onMaterialDispose( event ) { + + const material = event.target; + + material.removeEventListener( 'dispose', onMaterialDispose ); + + deallocateMaterial( material ); + + } + + // Buffer deallocation + + function deallocateMaterial( material ) { + + releaseMaterialProgramReferences( material ); + + properties.remove( material ); + + } + + + function releaseMaterialProgramReferences( material ) { + + const programs = properties.get( material ).programs; + + if ( programs !== undefined ) { + + programs.forEach( function ( program ) { + + programCache.releaseProgram( program ); + + } ); + + } + + } + + // Buffer rendering + + function renderObjectImmediate( object, program ) { + + object.render( function ( object ) { + + _this.renderBufferImmediate( object, program ); + + } ); + + } + + this.renderBufferImmediate = function ( object, program ) { + + bindingStates.initAttributes(); + + const buffers = properties.get( object ); + + if ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer(); + if ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer(); + if ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer(); + if ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer(); + + const programAttributes = program.getAttributes(); + + if ( object.hasPositions ) { + + _gl.bindBuffer( 34962, buffers.position ); + _gl.bufferData( 34962, object.positionArray, 35048 ); + + bindingStates.enableAttribute( programAttributes.position ); + _gl.vertexAttribPointer( programAttributes.position, 3, 5126, false, 0, 0 ); + + } + + if ( object.hasNormals ) { + + _gl.bindBuffer( 34962, buffers.normal ); + _gl.bufferData( 34962, object.normalArray, 35048 ); + + bindingStates.enableAttribute( programAttributes.normal ); + _gl.vertexAttribPointer( programAttributes.normal, 3, 5126, false, 0, 0 ); + + } + + if ( object.hasUvs ) { + + _gl.bindBuffer( 34962, buffers.uv ); + _gl.bufferData( 34962, object.uvArray, 35048 ); + + bindingStates.enableAttribute( programAttributes.uv ); + _gl.vertexAttribPointer( programAttributes.uv, 2, 5126, false, 0, 0 ); + + } + + if ( object.hasColors ) { + + _gl.bindBuffer( 34962, buffers.color ); + _gl.bufferData( 34962, object.colorArray, 35048 ); + + bindingStates.enableAttribute( programAttributes.color ); + _gl.vertexAttribPointer( programAttributes.color, 3, 5126, false, 0, 0 ); + + } + + bindingStates.disableUnusedAttributes(); + + _gl.drawArrays( 4, 0, object.count ); + + object.count = 0; + + }; + + this.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) { + + if ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null) + + const frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 ); + + const program = setProgram( camera, scene, material, object ); + + state.setMaterial( material, frontFaceCW ); + + // + + let index = geometry.index; + const position = geometry.attributes.position; + + // + + if ( index === null ) { + + if ( position === undefined || position.count === 0 ) return; + + } else if ( index.count === 0 ) { + + return; + + } + + // + + let rangeFactor = 1; + + if ( material.wireframe === true ) { + + index = geometries.getWireframeAttribute( geometry ); + rangeFactor = 2; + + } + + if ( geometry.morphAttributes.position !== undefined || geometry.morphAttributes.normal !== undefined ) { + + morphtargets.update( object, geometry, material, program ); + + } + + bindingStates.setup( object, material, program, geometry, index ); + + let attribute; + let renderer = bufferRenderer; + + if ( index !== null ) { + + attribute = attributes.get( index ); + + renderer = indexedBufferRenderer; + renderer.setIndex( attribute ); + + } + + // + + const dataCount = ( index !== null ) ? index.count : position.count; + + const rangeStart = geometry.drawRange.start * rangeFactor; + const rangeCount = geometry.drawRange.count * rangeFactor; + + const groupStart = group !== null ? group.start * rangeFactor : 0; + const groupCount = group !== null ? group.count * rangeFactor : Infinity; + + const drawStart = Math.max( rangeStart, groupStart ); + const drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1; + + const drawCount = Math.max( 0, drawEnd - drawStart + 1 ); + + if ( drawCount === 0 ) return; + + // + + if ( object.isMesh ) { + + if ( material.wireframe === true ) { + + state.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() ); + renderer.setMode( 1 ); + + } else { + + renderer.setMode( 4 ); + + } + + } else if ( object.isLine ) { + + let lineWidth = material.linewidth; + + if ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material + + state.setLineWidth( lineWidth * getTargetPixelRatio() ); + + if ( object.isLineSegments ) { + + renderer.setMode( 1 ); + + } else if ( object.isLineLoop ) { + + renderer.setMode( 2 ); + + } else { + + renderer.setMode( 3 ); + + } + + } else if ( object.isPoints ) { + + renderer.setMode( 0 ); + + } else if ( object.isSprite ) { + + renderer.setMode( 4 ); + + } + + if ( object.isInstancedMesh ) { + + renderer.renderInstances( drawStart, drawCount, object.count ); + + } else if ( geometry.isInstancedBufferGeometry ) { + + const instanceCount = Math.min( geometry.instanceCount, geometry._maxInstanceCount ); + + renderer.renderInstances( drawStart, drawCount, instanceCount ); + + } else { + + renderer.render( drawStart, drawCount ); + + } + + }; + + // Compile + + this.compile = function ( scene, camera ) { + + currentRenderState = renderStates.get( scene ); + currentRenderState.init(); + + renderStateStack.push( currentRenderState ); + + scene.traverseVisible( function ( object ) { + + if ( object.isLight && object.layers.test( camera.layers ) ) { + + currentRenderState.pushLight( object ); + + if ( object.castShadow ) { + + currentRenderState.pushShadow( object ); + + } + + } + + } ); + + currentRenderState.setupLights(); + + scene.traverse( function ( object ) { + + const material = object.material; + + if ( material ) { + + if ( Array.isArray( material ) ) { + + for ( let i = 0; i < material.length; i ++ ) { + + const material2 = material[ i ]; + + getProgram( material2, scene, object ); + + } + + } else { + + getProgram( material, scene, object ); + + } + + } + + } ); + + renderStateStack.pop(); + currentRenderState = null; + + }; + + // Animation Loop + + let onAnimationFrameCallback = null; + + function onAnimationFrame( time ) { + + if ( onAnimationFrameCallback ) onAnimationFrameCallback( time ); + + } + + function onXRSessionStart() { + + animation.stop(); + + } + + function onXRSessionEnd() { + + animation.start(); + + } + + const animation = new WebGLAnimation(); + animation.setAnimationLoop( onAnimationFrame ); + + if ( typeof window !== 'undefined' ) animation.setContext( window ); + + this.setAnimationLoop = function ( callback ) { + + onAnimationFrameCallback = callback; + xr.setAnimationLoop( callback ); + + ( callback === null ) ? animation.stop() : animation.start(); + + }; + + xr.addEventListener( 'sessionstart', onXRSessionStart ); + xr.addEventListener( 'sessionend', onXRSessionEnd ); + + // Rendering + + this.render = function ( scene, camera ) { + + if ( camera !== undefined && camera.isCamera !== true ) { + + console.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' ); + return; + + } + + if ( _isContextLost === true ) return; + + // update scene graph + + if ( scene.autoUpdate === true ) scene.updateMatrixWorld(); + + // update camera matrices and frustum + + if ( camera.parent === null ) camera.updateMatrixWorld(); + + if ( xr.enabled === true && xr.isPresenting === true ) { + + if ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera ); + + camera = xr.getCamera(); // use XR camera for rendering + + } + + // + if ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget ); + + currentRenderState = renderStates.get( scene, renderStateStack.length ); + currentRenderState.init(); + + renderStateStack.push( currentRenderState ); + + _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); + _frustum.setFromProjectionMatrix( _projScreenMatrix ); + + _localClippingEnabled = this.localClippingEnabled; + _clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled, camera ); + + currentRenderList = renderLists.get( scene, renderListStack.length ); + currentRenderList.init(); + + renderListStack.push( currentRenderList ); + + projectObject( scene, camera, 0, _this.sortObjects ); + + currentRenderList.finish(); + + if ( _this.sortObjects === true ) { + + currentRenderList.sort( _opaqueSort, _transparentSort ); + + } + + // + + if ( _clippingEnabled === true ) clipping.beginShadows(); + + const shadowsArray = currentRenderState.state.shadowsArray; + + shadowMap.render( shadowsArray, scene, camera ); + + currentRenderState.setupLights(); + currentRenderState.setupLightsView( camera ); + + if ( _clippingEnabled === true ) clipping.endShadows(); + + // + + if ( this.info.autoReset === true ) this.info.reset(); + + // + + background.render( currentRenderList, scene ); + + // render scene + + const opaqueObjects = currentRenderList.opaque; + const transmissiveObjects = currentRenderList.transmissive; + const transparentObjects = currentRenderList.transparent; + + if ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera ); + if ( transmissiveObjects.length > 0 ) renderTransmissiveObjects( opaqueObjects, transmissiveObjects, scene, camera ); + if ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera ); + + // + + if ( _currentRenderTarget !== null ) { + + // resolve multisample renderbuffers to a single-sample texture if necessary + + textures.updateMultisampleRenderTarget( _currentRenderTarget ); + + // Generate mipmap if we're using any kind of mipmap filtering + + textures.updateRenderTargetMipmap( _currentRenderTarget ); + + } + + // + + if ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera ); + + // Ensure depth buffer writing is enabled so it can be cleared on next render + + state.buffers.depth.setTest( true ); + state.buffers.depth.setMask( true ); + state.buffers.color.setMask( true ); + + state.setPolygonOffset( false ); + + // _gl.finish(); + + bindingStates.resetDefaultState(); + _currentMaterialId = - 1; + _currentCamera = null; + + renderStateStack.pop(); + + if ( renderStateStack.length > 0 ) { + + currentRenderState = renderStateStack[ renderStateStack.length - 1 ]; + + } else { + + currentRenderState = null; + + } + + renderListStack.pop(); + + if ( renderListStack.length > 0 ) { + + currentRenderList = renderListStack[ renderListStack.length - 1 ]; + + } else { + + currentRenderList = null; + + } + + }; + + function projectObject( object, camera, groupOrder, sortObjects ) { + + if ( object.visible === false ) return; + + const visible = object.layers.test( camera.layers ); + + if ( visible ) { + + if ( object.isGroup ) { + + groupOrder = object.renderOrder; + + } else if ( object.isLOD ) { + + if ( object.autoUpdate === true ) object.update( camera ); + + } else if ( object.isLight ) { + + currentRenderState.pushLight( object ); + + if ( object.castShadow ) { + + currentRenderState.pushShadow( object ); + + } + + } else if ( object.isSprite ) { + + if ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) { + + if ( sortObjects ) { + + _vector3.setFromMatrixPosition( object.matrixWorld ) + .applyMatrix4( _projScreenMatrix ); + + } + + const geometry = objects.update( object ); + const material = object.material; + + if ( material.visible ) { + + currentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null ); + + } + + } + + } else if ( object.isImmediateRenderObject ) { + + if ( sortObjects ) { + + _vector3.setFromMatrixPosition( object.matrixWorld ) + .applyMatrix4( _projScreenMatrix ); + + } + + currentRenderList.push( object, null, object.material, groupOrder, _vector3.z, null ); + + } else if ( object.isMesh || object.isLine || object.isPoints ) { + + if ( object.isSkinnedMesh ) { + + // update skeleton only once in a frame + + if ( object.skeleton.frame !== info.render.frame ) { + + object.skeleton.update(); + object.skeleton.frame = info.render.frame; + + } + + } + + if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) { + + if ( sortObjects ) { + + _vector3.setFromMatrixPosition( object.matrixWorld ) + .applyMatrix4( _projScreenMatrix ); + + } + + const geometry = objects.update( object ); + const material = object.material; + + if ( Array.isArray( material ) ) { + + const groups = geometry.groups; + + for ( let i = 0, l = groups.length; i < l; i ++ ) { + + const group = groups[ i ]; + const groupMaterial = material[ group.materialIndex ]; + + if ( groupMaterial && groupMaterial.visible ) { + + currentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group ); + + } + + } + + } else if ( material.visible ) { + + currentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null ); + + } + + } + + } + + } + + const children = object.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + projectObject( children[ i ], camera, groupOrder, sortObjects ); + + } + + } + + function renderTransmissiveObjects( opaqueObjects, transmissiveObjects, scene, camera ) { + + if ( _transmissionRenderTarget === null ) { + + const needsAntialias = _antialias === true && capabilities.isWebGL2 === true; + const renderTargetType = needsAntialias ? WebGLMultisampleRenderTarget : WebGLRenderTarget; + + _transmissionRenderTarget = new renderTargetType( 1024, 1024, { + generateMipmaps: true, + type: utils.convert( HalfFloatType ) !== null ? HalfFloatType : UnsignedByteType, + minFilter: LinearMipmapLinearFilter, + magFilter: NearestFilter, + wrapS: ClampToEdgeWrapping, + wrapT: ClampToEdgeWrapping + } ); + + } + + const currentRenderTarget = _this.getRenderTarget(); + _this.setRenderTarget( _transmissionRenderTarget ); + _this.clear(); + + // Turn off the features which can affect the frag color for opaque objects pass. + // Otherwise they are applied twice in opaque objects pass and transmission objects pass. + const currentToneMapping = _this.toneMapping; + _this.toneMapping = NoToneMapping; + + renderObjects( opaqueObjects, scene, camera ); + + _this.toneMapping = currentToneMapping; + + textures.updateMultisampleRenderTarget( _transmissionRenderTarget ); + textures.updateRenderTargetMipmap( _transmissionRenderTarget ); + + _this.setRenderTarget( currentRenderTarget ); + + renderObjects( transmissiveObjects, scene, camera ); + + } + + function renderObjects( renderList, scene, camera ) { + + const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null; + + if ( camera.isArrayCamera ) { + + const cameras = camera.cameras; + + for ( let i = 0, l = cameras.length; i < l; i ++ ) { + + const camera2 = cameras[ i ]; + + state.viewport( _currentViewport.copy( camera2.viewport ) ); + + currentRenderState.setupLightsView( camera2 ); + + for ( let j = 0, jl = renderList.length; j < jl; j ++ ) { + + const renderItem = renderList[ j ]; + + const object = renderItem.object; + const geometry = renderItem.geometry; + const material = overrideMaterial === null ? renderItem.material : overrideMaterial; + const group = renderItem.group; + + if ( object.layers.test( camera2.layers ) ) { + + renderObject( object, scene, camera2, geometry, material, group ); + + } + + } + + } + + } else { + + for ( let j = 0, jl = renderList.length; j < jl; j ++ ) { + + const renderItem = renderList[ j ]; + + const object = renderItem.object; + const geometry = renderItem.geometry; + const material = overrideMaterial === null ? renderItem.material : overrideMaterial; + const group = renderItem.group; + + renderObject( object, scene, camera, geometry, material, group ); + + } + + } + + } + + function renderObject( object, scene, camera, geometry, material, group ) { + + object.onBeforeRender( _this, scene, camera, geometry, material, group ); + + object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld ); + object.normalMatrix.getNormalMatrix( object.modelViewMatrix ); + + if ( object.isImmediateRenderObject ) { + + const program = setProgram( camera, scene, material, object ); + + state.setMaterial( material ); + + bindingStates.reset(); + + renderObjectImmediate( object, program ); + + } else { + + if ( material.transparent === true && material.side === DoubleSide ) { + + material.side = BackSide; + material.needsUpdate = true; + _this.renderBufferDirect( camera, scene, geometry, material, object, group ); + + material.side = FrontSide; + material.needsUpdate = true; + _this.renderBufferDirect( camera, scene, geometry, material, object, group ); + + material.side = DoubleSide; + + } else { + + _this.renderBufferDirect( camera, scene, geometry, material, object, group ); + + } + + } + + object.onAfterRender( _this, scene, camera, geometry, material, group ); + + } + + function getProgram( material, scene, object ) { + + if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ... + + const materialProperties = properties.get( material ); + + const lights = currentRenderState.state.lights; + const shadowsArray = currentRenderState.state.shadowsArray; + + const lightsStateVersion = lights.state.version; + + const parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object ); + const programCacheKey = programCache.getProgramCacheKey( parameters ); + + let programs = materialProperties.programs; + + // always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change + + materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null; + materialProperties.fog = scene.fog; + materialProperties.envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || materialProperties.environment ); + + if ( programs === undefined ) { + + // new material + + material.addEventListener( 'dispose', onMaterialDispose ); + + programs = new Map(); + materialProperties.programs = programs; + + } + + let program = programs.get( programCacheKey ); + + if ( program !== undefined ) { + + // early out if program and light state is identical + + if ( materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion ) { + + updateCommonMaterialProperties( material, parameters ); + + return program; + + } + + } else { + + parameters.uniforms = programCache.getUniforms( material ); + + material.onBuild( parameters, _this ); + + material.onBeforeCompile( parameters, _this ); + + program = programCache.acquireProgram( parameters, programCacheKey ); + programs.set( programCacheKey, program ); + + materialProperties.uniforms = parameters.uniforms; + + } + + const uniforms = materialProperties.uniforms; + + if ( ( ! material.isShaderMaterial && ! material.isRawShaderMaterial ) || material.clipping === true ) { + + uniforms.clippingPlanes = clipping.uniform; + + } + + updateCommonMaterialProperties( material, parameters ); + + // store the light setup it was created for + + materialProperties.needsLights = materialNeedsLights( material ); + materialProperties.lightsStateVersion = lightsStateVersion; + + if ( materialProperties.needsLights ) { + + // wire up the material to this renderer's lighting state + + uniforms.ambientLightColor.value = lights.state.ambient; + uniforms.lightProbe.value = lights.state.probe; + uniforms.directionalLights.value = lights.state.directional; + uniforms.directionalLightShadows.value = lights.state.directionalShadow; + uniforms.spotLights.value = lights.state.spot; + uniforms.spotLightShadows.value = lights.state.spotShadow; + uniforms.rectAreaLights.value = lights.state.rectArea; + uniforms.ltc_1.value = lights.state.rectAreaLTC1; + uniforms.ltc_2.value = lights.state.rectAreaLTC2; + uniforms.pointLights.value = lights.state.point; + uniforms.pointLightShadows.value = lights.state.pointShadow; + uniforms.hemisphereLights.value = lights.state.hemi; + + uniforms.directionalShadowMap.value = lights.state.directionalShadowMap; + uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix; + uniforms.spotShadowMap.value = lights.state.spotShadowMap; + uniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix; + uniforms.pointShadowMap.value = lights.state.pointShadowMap; + uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix; + // TODO (abelnation): add area lights shadow info to uniforms + + } + + const progUniforms = program.getUniforms(); + const uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms ); + + materialProperties.currentProgram = program; + materialProperties.uniformsList = uniformsList; + + return program; + + } + + function updateCommonMaterialProperties( material, parameters ) { + + const materialProperties = properties.get( material ); + + materialProperties.outputEncoding = parameters.outputEncoding; + materialProperties.instancing = parameters.instancing; + materialProperties.skinning = parameters.skinning; + materialProperties.morphTargets = parameters.morphTargets; + materialProperties.morphNormals = parameters.morphNormals; + materialProperties.numClippingPlanes = parameters.numClippingPlanes; + materialProperties.numIntersection = parameters.numClipIntersection; + materialProperties.vertexAlphas = parameters.vertexAlphas; + materialProperties.vertexTangents = parameters.vertexTangents; + + } + + function setProgram( camera, scene, material, object ) { + + if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ... + + textures.resetTextureUnits(); + + const fog = scene.fog; + const environment = material.isMeshStandardMaterial ? scene.environment : null; + const encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : _currentRenderTarget.texture.encoding; + const envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment ); + const vertexAlphas = material.vertexColors === true && object.geometry && object.geometry.attributes.color && object.geometry.attributes.color.itemSize === 4; + const vertexTangents = object.geometry && object.geometry.attributes.tangent; + const morphTargets = object.geometry && object.geometry.morphAttributes.position; + const morphNormals = object.geometry && object.geometry.morphAttributes.normal; + + const materialProperties = properties.get( material ); + const lights = currentRenderState.state.lights; + + if ( _clippingEnabled === true ) { + + if ( _localClippingEnabled === true || camera !== _currentCamera ) { + + const useCache = + camera === _currentCamera && + material.id === _currentMaterialId; + + // we might want to call this function with some ClippingGroup + // object instead of the material, once it becomes feasible + // (#8465, #8379) + clipping.setState( material, camera, useCache ); + + } + + } + + // + + let needsProgramChange = false; + + if ( material.version === materialProperties.__version ) { + + if ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) { + + needsProgramChange = true; + + } else if ( materialProperties.outputEncoding !== encoding ) { + + needsProgramChange = true; + + } else if ( object.isInstancedMesh && materialProperties.instancing === false ) { + + needsProgramChange = true; + + } else if ( ! object.isInstancedMesh && materialProperties.instancing === true ) { + + needsProgramChange = true; + + } else if ( object.isSkinnedMesh && materialProperties.skinning === false ) { + + needsProgramChange = true; + + } else if ( ! object.isSkinnedMesh && materialProperties.skinning === true ) { + + needsProgramChange = true; + + } else if ( materialProperties.envMap !== envMap ) { + + needsProgramChange = true; + + } else if ( material.fog && materialProperties.fog !== fog ) { + + needsProgramChange = true; + + } else if ( materialProperties.numClippingPlanes !== undefined && + ( materialProperties.numClippingPlanes !== clipping.numPlanes || + materialProperties.numIntersection !== clipping.numIntersection ) ) { + + needsProgramChange = true; + + } else if ( materialProperties.vertexAlphas !== vertexAlphas ) { + + needsProgramChange = true; + + } else if ( materialProperties.vertexTangents !== vertexTangents ) { + + needsProgramChange = true; + + } else if ( materialProperties.morphTargets !== morphTargets ) { + + needsProgramChange = true; + + } else if ( materialProperties.morphNormals !== morphNormals ) { + + needsProgramChange = true; + + } + + } else { + + needsProgramChange = true; + materialProperties.__version = material.version; + + } + + // + + let program = materialProperties.currentProgram; + + if ( needsProgramChange === true ) { + + program = getProgram( material, scene, object ); + + } + + let refreshProgram = false; + let refreshMaterial = false; + let refreshLights = false; + + const p_uniforms = program.getUniforms(), + m_uniforms = materialProperties.uniforms; + + if ( state.useProgram( program.program ) ) { + + refreshProgram = true; + refreshMaterial = true; + refreshLights = true; + + } + + if ( material.id !== _currentMaterialId ) { + + _currentMaterialId = material.id; + + refreshMaterial = true; + + } + + if ( refreshProgram || _currentCamera !== camera ) { + + p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix ); + + if ( capabilities.logarithmicDepthBuffer ) { + + p_uniforms.setValue( _gl, 'logDepthBufFC', + 2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) ); + + } + + if ( _currentCamera !== camera ) { + + _currentCamera = camera; + + // lighting uniforms depend on the camera so enforce an update + // now, in case this material supports lights - or later, when + // the next material that does gets activated: + + refreshMaterial = true; // set to true on material change + refreshLights = true; // remains set until update done + + } + + // load material specific uniforms + // (shader material also gets them for the sake of genericity) + + if ( material.isShaderMaterial || + material.isMeshPhongMaterial || + material.isMeshToonMaterial || + material.isMeshStandardMaterial || + material.envMap ) { + + const uCamPos = p_uniforms.map.cameraPosition; + + if ( uCamPos !== undefined ) { + + uCamPos.setValue( _gl, + _vector3.setFromMatrixPosition( camera.matrixWorld ) ); + + } + + } + + if ( material.isMeshPhongMaterial || + material.isMeshToonMaterial || + material.isMeshLambertMaterial || + material.isMeshBasicMaterial || + material.isMeshStandardMaterial || + material.isShaderMaterial ) { + + p_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true ); + + } + + if ( material.isMeshPhongMaterial || + material.isMeshToonMaterial || + material.isMeshLambertMaterial || + material.isMeshBasicMaterial || + material.isMeshStandardMaterial || + material.isShaderMaterial || + material.isShadowMaterial || + object.isSkinnedMesh ) { + + p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse ); + + } + + } + + // skinning uniforms must be set even if material didn't change + // auto-setting of texture unit for bone texture must go before other textures + // otherwise textures used for skinning can take over texture units reserved for other material textures + + if ( object.isSkinnedMesh ) { + + p_uniforms.setOptional( _gl, object, 'bindMatrix' ); + p_uniforms.setOptional( _gl, object, 'bindMatrixInverse' ); + + const skeleton = object.skeleton; + + if ( skeleton ) { + + if ( capabilities.floatVertexTextures ) { + + if ( skeleton.boneTexture === null ) skeleton.computeBoneTexture(); + + p_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures ); + p_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize ); + + } else { + + p_uniforms.setOptional( _gl, skeleton, 'boneMatrices' ); + + } + + } + + } + + if ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) { + + materialProperties.receiveShadow = object.receiveShadow; + p_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow ); + + } + + if ( refreshMaterial ) { + + p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure ); + + if ( materialProperties.needsLights ) { + + // the current material requires lighting info + + // note: all lighting uniforms are always set correctly + // they simply reference the renderer's state for their + // values + // + // use the current material's .needsUpdate flags to set + // the GL state when required + + markUniformsLightsNeedsUpdate( m_uniforms, refreshLights ); + + } + + // refresh uniforms common to several materials + + if ( fog && material.fog ) { + + materials.refreshFogUniforms( m_uniforms, fog ); + + } + + materials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, _transmissionRenderTarget ); + + WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures ); + + } + + if ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) { + + WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures ); + material.uniformsNeedUpdate = false; + + } + + if ( material.isSpriteMaterial ) { + + p_uniforms.setValue( _gl, 'center', object.center ); + + } + + // common matrices + + p_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix ); + p_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix ); + p_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld ); + + return program; + + } + + // If uniforms are marked as clean, they don't need to be loaded to the GPU. + + function markUniformsLightsNeedsUpdate( uniforms, value ) { + + uniforms.ambientLightColor.needsUpdate = value; + uniforms.lightProbe.needsUpdate = value; + + uniforms.directionalLights.needsUpdate = value; + uniforms.directionalLightShadows.needsUpdate = value; + uniforms.pointLights.needsUpdate = value; + uniforms.pointLightShadows.needsUpdate = value; + uniforms.spotLights.needsUpdate = value; + uniforms.spotLightShadows.needsUpdate = value; + uniforms.rectAreaLights.needsUpdate = value; + uniforms.hemisphereLights.needsUpdate = value; + + } + + function materialNeedsLights( material ) { + + return material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial || + material.isMeshStandardMaterial || material.isShadowMaterial || + ( material.isShaderMaterial && material.lights === true ); + + } + + this.getActiveCubeFace = function () { + + return _currentActiveCubeFace; + + }; + + this.getActiveMipmapLevel = function () { + + return _currentActiveMipmapLevel; + + }; + + this.getRenderTarget = function () { + + return _currentRenderTarget; + + }; + + this.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) { + + _currentRenderTarget = renderTarget; + _currentActiveCubeFace = activeCubeFace; + _currentActiveMipmapLevel = activeMipmapLevel; + + if ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) { + + textures.setupRenderTarget( renderTarget ); + + } + + let framebuffer = null; + let isCube = false; + let isRenderTarget3D = false; + + if ( renderTarget ) { + + const texture = renderTarget.texture; + + if ( texture.isDataTexture3D || texture.isDataTexture2DArray ) { + + isRenderTarget3D = true; + + } + + const __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer; + + if ( renderTarget.isWebGLCubeRenderTarget ) { + + framebuffer = __webglFramebuffer[ activeCubeFace ]; + isCube = true; + + } else if ( renderTarget.isWebGLMultisampleRenderTarget ) { + + framebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer; + + } else { + + framebuffer = __webglFramebuffer; + + } + + _currentViewport.copy( renderTarget.viewport ); + _currentScissor.copy( renderTarget.scissor ); + _currentScissorTest = renderTarget.scissorTest; + + } else { + + _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor(); + _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor(); + _currentScissorTest = _scissorTest; + + } + + const framebufferBound = state.bindFramebuffer( 36160, framebuffer ); + + if ( framebufferBound && capabilities.drawBuffers ) { + + let needsUpdate = false; + + if ( renderTarget ) { + + if ( renderTarget.isWebGLMultipleRenderTargets ) { + + const textures = renderTarget.texture; + + if ( _currentDrawBuffers.length !== textures.length || _currentDrawBuffers[ 0 ] !== 36064 ) { + + for ( let i = 0, il = textures.length; i < il; i ++ ) { + + _currentDrawBuffers[ i ] = 36064 + i; + + } + + _currentDrawBuffers.length = textures.length; + + needsUpdate = true; + + } + + } else { + + if ( _currentDrawBuffers.length !== 1 || _currentDrawBuffers[ 0 ] !== 36064 ) { + + _currentDrawBuffers[ 0 ] = 36064; + _currentDrawBuffers.length = 1; + + needsUpdate = true; + + } + + } + + } else { + + if ( _currentDrawBuffers.length !== 1 || _currentDrawBuffers[ 0 ] !== 1029 ) { + + _currentDrawBuffers[ 0 ] = 1029; + _currentDrawBuffers.length = 1; + + needsUpdate = true; + + } + + } + + if ( needsUpdate ) { + + if ( capabilities.isWebGL2 ) { + + _gl.drawBuffers( _currentDrawBuffers ); + + } else { + + extensions.get( 'WEBGL_draw_buffers' ).drawBuffersWEBGL( _currentDrawBuffers ); + + } + + } + + } + + state.viewport( _currentViewport ); + state.scissor( _currentScissor ); + state.setScissorTest( _currentScissorTest ); + + if ( isCube ) { + + const textureProperties = properties.get( renderTarget.texture ); + _gl.framebufferTexture2D( 36160, 36064, 34069 + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel ); + + } else if ( isRenderTarget3D ) { + + const textureProperties = properties.get( renderTarget.texture ); + const layer = activeCubeFace || 0; + _gl.framebufferTextureLayer( 36160, 36064, textureProperties.__webglTexture, activeMipmapLevel || 0, layer ); + + } + + }; + + this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) { + + if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' ); + return; + + } + + let framebuffer = properties.get( renderTarget ).__webglFramebuffer; + + if ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) { + + framebuffer = framebuffer[ activeCubeFaceIndex ]; + + } + + if ( framebuffer ) { + + state.bindFramebuffer( 36160, framebuffer ); + + try { + + const texture = renderTarget.texture; + const textureFormat = texture.format; + const textureType = texture.type; + + if ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( 35739 ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' ); + return; + + } + + const halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || ( capabilities.isWebGL2 && extensions.has( 'EXT_color_buffer_float' ) ) ); + + if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( 35738 ) && // Edge and Chrome Mac < 52 (#9513) + ! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.has( 'OES_texture_float' ) || extensions.has( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox + ! halfFloatSupportedByExt ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' ); + return; + + } + + if ( _gl.checkFramebufferStatus( 36160 ) === 36053 ) { + + // the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604) + + if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) { + + _gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer ); + + } + + } else { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' ); + + } + + } finally { + + // restore framebuffer of current render target if necessary + + const framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null; + state.bindFramebuffer( 36160, framebuffer ); + + } + + } + + }; + + this.copyFramebufferToTexture = function ( position, texture, level = 0 ) { + + const levelScale = Math.pow( 2, - level ); + const width = Math.floor( texture.image.width * levelScale ); + const height = Math.floor( texture.image.height * levelScale ); + + let glFormat = utils.convert( texture.format ); + + if ( capabilities.isWebGL2 ) { + + // Workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=1120100 + // Not needed in Chrome 93+ + + if ( glFormat === 6407 ) glFormat = 32849; + if ( glFormat === 6408 ) glFormat = 32856; + + } + + textures.setTexture2D( texture, 0 ); + + _gl.copyTexImage2D( 3553, level, glFormat, position.x, position.y, width, height, 0 ); + + state.unbindTexture(); + + }; + + this.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) { + + const width = srcTexture.image.width; + const height = srcTexture.image.height; + const glFormat = utils.convert( dstTexture.format ); + const glType = utils.convert( dstTexture.type ); + + textures.setTexture2D( dstTexture, 0 ); + + // As another texture upload may have changed pixelStorei + // parameters, make sure they are correct for the dstTexture + _gl.pixelStorei( 37440, dstTexture.flipY ); + _gl.pixelStorei( 37441, dstTexture.premultiplyAlpha ); + _gl.pixelStorei( 3317, dstTexture.unpackAlignment ); + + if ( srcTexture.isDataTexture ) { + + _gl.texSubImage2D( 3553, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data ); + + } else { + + if ( srcTexture.isCompressedTexture ) { + + _gl.compressedTexSubImage2D( 3553, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data ); + + } else { + + _gl.texSubImage2D( 3553, level, position.x, position.y, glFormat, glType, srcTexture.image ); + + } + + } + + // Generate mipmaps only when copying level 0 + if ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( 3553 ); + + state.unbindTexture(); + + }; + + this.copyTextureToTexture3D = function ( sourceBox, position, srcTexture, dstTexture, level = 0 ) { + + if ( _this.isWebGL1Renderer ) { + + console.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.' ); + return; + + } + + const width = sourceBox.max.x - sourceBox.min.x + 1; + const height = sourceBox.max.y - sourceBox.min.y + 1; + const depth = sourceBox.max.z - sourceBox.min.z + 1; + const glFormat = utils.convert( dstTexture.format ); + const glType = utils.convert( dstTexture.type ); + let glTarget; + + if ( dstTexture.isDataTexture3D ) { + + textures.setTexture3D( dstTexture, 0 ); + glTarget = 32879; + + } else if ( dstTexture.isDataTexture2DArray ) { + + textures.setTexture2DArray( dstTexture, 0 ); + glTarget = 35866; + + } else { + + console.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.' ); + return; + + } + + _gl.pixelStorei( 37440, dstTexture.flipY ); + _gl.pixelStorei( 37441, dstTexture.premultiplyAlpha ); + _gl.pixelStorei( 3317, dstTexture.unpackAlignment ); + + const unpackRowLen = _gl.getParameter( 3314 ); + const unpackImageHeight = _gl.getParameter( 32878 ); + const unpackSkipPixels = _gl.getParameter( 3316 ); + const unpackSkipRows = _gl.getParameter( 3315 ); + const unpackSkipImages = _gl.getParameter( 32877 ); + + const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ 0 ] : srcTexture.image; + + _gl.pixelStorei( 3314, image.width ); + _gl.pixelStorei( 32878, image.height ); + _gl.pixelStorei( 3316, sourceBox.min.x ); + _gl.pixelStorei( 3315, sourceBox.min.y ); + _gl.pixelStorei( 32877, sourceBox.min.z ); + + if ( srcTexture.isDataTexture || srcTexture.isDataTexture3D ) { + + _gl.texSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image.data ); + + } else { + + if ( srcTexture.isCompressedTexture ) { + + console.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.' ); + _gl.compressedTexSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, image.data ); + + } else { + + _gl.texSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image ); + + } + + } + + _gl.pixelStorei( 3314, unpackRowLen ); + _gl.pixelStorei( 32878, unpackImageHeight ); + _gl.pixelStorei( 3316, unpackSkipPixels ); + _gl.pixelStorei( 3315, unpackSkipRows ); + _gl.pixelStorei( 32877, unpackSkipImages ); + + // Generate mipmaps only when copying level 0 + if ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( glTarget ); + + state.unbindTexture(); + + }; + + this.initTexture = function ( texture ) { + + textures.setTexture2D( texture, 0 ); + + state.unbindTexture(); + + }; + + this.resetState = function () { + + _currentActiveCubeFace = 0; + _currentActiveMipmapLevel = 0; + _currentRenderTarget = null; + + state.reset(); + bindingStates.reset(); + + }; + + if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { + + __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef + + } + +} + +class WebGL1Renderer extends WebGLRenderer {} + +WebGL1Renderer.prototype.isWebGL1Renderer = true; + +class FogExp2 { + + constructor( color, density = 0.00025 ) { + + this.name = ''; + + this.color = new Color( color ); + this.density = density; + + } + + clone() { + + return new FogExp2( this.color, this.density ); + + } + + toJSON( /* meta */ ) { + + return { + type: 'FogExp2', + color: this.color.getHex(), + density: this.density + }; + + } + +} + +FogExp2.prototype.isFogExp2 = true; + +class Fog { + + constructor( color, near = 1, far = 1000 ) { + + this.name = ''; + + this.color = new Color( color ); + + this.near = near; + this.far = far; + + } + + clone() { + + return new Fog( this.color, this.near, this.far ); + + } + + toJSON( /* meta */ ) { + + return { + type: 'Fog', + color: this.color.getHex(), + near: this.near, + far: this.far + }; + + } + +} + +Fog.prototype.isFog = true; + +class Scene extends Object3D { + + constructor() { + + super(); + + this.type = 'Scene'; + + this.background = null; + this.environment = null; + this.fog = null; + + this.overrideMaterial = null; + + this.autoUpdate = true; // checked by the renderer + + if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { + + __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef + + } + + } + + copy( source, recursive ) { + + super.copy( source, recursive ); + + if ( source.background !== null ) this.background = source.background.clone(); + if ( source.environment !== null ) this.environment = source.environment.clone(); + if ( source.fog !== null ) this.fog = source.fog.clone(); + + if ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone(); + + this.autoUpdate = source.autoUpdate; + this.matrixAutoUpdate = source.matrixAutoUpdate; + + return this; + + } + + toJSON( meta ) { + + const data = super.toJSON( meta ); + + if ( this.fog !== null ) data.object.fog = this.fog.toJSON(); + + return data; + + } + +} + +Scene.prototype.isScene = true; + +class InterleavedBuffer { + + constructor( array, stride ) { + + this.array = array; + this.stride = stride; + this.count = array !== undefined ? array.length / stride : 0; + + this.usage = StaticDrawUsage; + this.updateRange = { offset: 0, count: - 1 }; + + this.version = 0; + + this.uuid = generateUUID(); + + } + + onUploadCallback() {} + + set needsUpdate( value ) { + + if ( value === true ) this.version ++; + + } + + setUsage( value ) { + + this.usage = value; + + return this; + + } + + copy( source ) { + + this.array = new source.array.constructor( source.array ); + this.count = source.count; + this.stride = source.stride; + this.usage = source.usage; + + return this; + + } + + copyAt( index1, attribute, index2 ) { + + index1 *= this.stride; + index2 *= attribute.stride; + + for ( let i = 0, l = this.stride; i < l; i ++ ) { + + this.array[ index1 + i ] = attribute.array[ index2 + i ]; + + } + + return this; + + } + + set( value, offset = 0 ) { + + this.array.set( value, offset ); + + return this; + + } + + clone( data ) { + + if ( data.arrayBuffers === undefined ) { + + data.arrayBuffers = {}; + + } + + if ( this.array.buffer._uuid === undefined ) { + + this.array.buffer._uuid = generateUUID(); + + } + + if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) { + + data.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer; + + } + + const array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] ); + + const ib = new this.constructor( array, this.stride ); + ib.setUsage( this.usage ); + + return ib; + + } + + onUpload( callback ) { + + this.onUploadCallback = callback; + + return this; + + } + + toJSON( data ) { + + if ( data.arrayBuffers === undefined ) { + + data.arrayBuffers = {}; + + } + + // generate UUID for array buffer if necessary + + if ( this.array.buffer._uuid === undefined ) { + + this.array.buffer._uuid = generateUUID(); + + } + + if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) { + + data.arrayBuffers[ this.array.buffer._uuid ] = Array.prototype.slice.call( new Uint32Array( this.array.buffer ) ); + + } + + // + + return { + uuid: this.uuid, + buffer: this.array.buffer._uuid, + type: this.array.constructor.name, + stride: this.stride + }; + + } + +} + +InterleavedBuffer.prototype.isInterleavedBuffer = true; + +const _vector$6 = /*@__PURE__*/ new Vector3(); + +class InterleavedBufferAttribute { + + constructor( interleavedBuffer, itemSize, offset, normalized = false ) { + + this.name = ''; + + this.data = interleavedBuffer; + this.itemSize = itemSize; + this.offset = offset; + + this.normalized = normalized === true; + + } + + get count() { + + return this.data.count; + + } + + get array() { + + return this.data.array; + + } + + set needsUpdate( value ) { + + this.data.needsUpdate = value; + + } + + applyMatrix4( m ) { + + for ( let i = 0, l = this.data.count; i < l; i ++ ) { + + _vector$6.x = this.getX( i ); + _vector$6.y = this.getY( i ); + _vector$6.z = this.getZ( i ); + + _vector$6.applyMatrix4( m ); + + this.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z ); + + } + + return this; + + } + + applyNormalMatrix( m ) { + + for ( let i = 0, l = this.count; i < l; i ++ ) { + + _vector$6.x = this.getX( i ); + _vector$6.y = this.getY( i ); + _vector$6.z = this.getZ( i ); + + _vector$6.applyNormalMatrix( m ); + + this.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z ); + + } + + return this; + + } + + transformDirection( m ) { + + for ( let i = 0, l = this.count; i < l; i ++ ) { + + _vector$6.x = this.getX( i ); + _vector$6.y = this.getY( i ); + _vector$6.z = this.getZ( i ); + + _vector$6.transformDirection( m ); + + this.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z ); + + } + + return this; + + } + + setX( index, x ) { + + this.data.array[ index * this.data.stride + this.offset ] = x; + + return this; + + } + + setY( index, y ) { + + this.data.array[ index * this.data.stride + this.offset + 1 ] = y; + + return this; + + } + + setZ( index, z ) { + + this.data.array[ index * this.data.stride + this.offset + 2 ] = z; + + return this; + + } + + setW( index, w ) { + + this.data.array[ index * this.data.stride + this.offset + 3 ] = w; + + return this; + + } + + getX( index ) { + + return this.data.array[ index * this.data.stride + this.offset ]; + + } + + getY( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 1 ]; + + } + + getZ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 2 ]; + + } + + getW( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 3 ]; + + } + + setXY( index, x, y ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + + return this; + + } + + setXYZ( index, x, y, z ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + this.data.array[ index + 2 ] = z; + + return this; + + } + + setXYZW( index, x, y, z, w ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + this.data.array[ index + 2 ] = z; + this.data.array[ index + 3 ] = w; + + return this; + + } + + clone( data ) { + + if ( data === undefined ) { + + console.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.' ); + + const array = []; + + for ( let i = 0; i < this.count; i ++ ) { + + const index = i * this.data.stride + this.offset; + + for ( let j = 0; j < this.itemSize; j ++ ) { + + array.push( this.data.array[ index + j ] ); + + } + + } + + return new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized ); + + } else { + + if ( data.interleavedBuffers === undefined ) { + + data.interleavedBuffers = {}; + + } + + if ( data.interleavedBuffers[ this.data.uuid ] === undefined ) { + + data.interleavedBuffers[ this.data.uuid ] = this.data.clone( data ); + + } + + return new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized ); + + } + + } + + toJSON( data ) { + + if ( data === undefined ) { + + console.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.' ); + + const array = []; + + for ( let i = 0; i < this.count; i ++ ) { + + const index = i * this.data.stride + this.offset; + + for ( let j = 0; j < this.itemSize; j ++ ) { + + array.push( this.data.array[ index + j ] ); + + } + + } + + // deinterleave data and save it as an ordinary buffer attribute for now + + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: array, + normalized: this.normalized + }; + + } else { + + // save as true interlaved attribtue + + if ( data.interleavedBuffers === undefined ) { + + data.interleavedBuffers = {}; + + } + + if ( data.interleavedBuffers[ this.data.uuid ] === undefined ) { + + data.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data ); + + } + + return { + isInterleavedBufferAttribute: true, + itemSize: this.itemSize, + data: this.data.uuid, + offset: this.offset, + normalized: this.normalized + }; + + } + + } + +} + +InterleavedBufferAttribute.prototype.isInterleavedBufferAttribute = true; + +/** + * parameters = { + * color: , + * map: new THREE.Texture( ), + * alphaMap: new THREE.Texture( ), + * rotation: , + * sizeAttenuation: + * } + */ + +class SpriteMaterial extends Material { + + constructor( parameters ) { + + super(); + + this.type = 'SpriteMaterial'; + + this.color = new Color( 0xffffff ); + + this.map = null; + + this.alphaMap = null; + + this.rotation = 0; + + this.sizeAttenuation = true; + + this.transparent = true; + + this.setValues( parameters ); + + } + + copy( source ) { + + super.copy( source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.rotation = source.rotation; + + this.sizeAttenuation = source.sizeAttenuation; + + return this; + + } + +} + +SpriteMaterial.prototype.isSpriteMaterial = true; + +let _geometry; + +const _intersectPoint = /*@__PURE__*/ new Vector3(); +const _worldScale = /*@__PURE__*/ new Vector3(); +const _mvPosition = /*@__PURE__*/ new Vector3(); + +const _alignedPosition = /*@__PURE__*/ new Vector2(); +const _rotatedPosition = /*@__PURE__*/ new Vector2(); +const _viewWorldMatrix = /*@__PURE__*/ new Matrix4(); + +const _vA = /*@__PURE__*/ new Vector3(); +const _vB = /*@__PURE__*/ new Vector3(); +const _vC = /*@__PURE__*/ new Vector3(); + +const _uvA = /*@__PURE__*/ new Vector2(); +const _uvB = /*@__PURE__*/ new Vector2(); +const _uvC = /*@__PURE__*/ new Vector2(); + +class Sprite extends Object3D { + + constructor( material ) { + + super(); + + this.type = 'Sprite'; + + if ( _geometry === undefined ) { + + _geometry = new BufferGeometry(); + + const float32Array = new Float32Array( [ + - 0.5, - 0.5, 0, 0, 0, + 0.5, - 0.5, 0, 1, 0, + 0.5, 0.5, 0, 1, 1, + - 0.5, 0.5, 0, 0, 1 + ] ); + + const interleavedBuffer = new InterleavedBuffer( float32Array, 5 ); + + _geometry.setIndex( [ 0, 1, 2, 0, 2, 3 ] ); + _geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) ); + _geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) ); + + } + + this.geometry = _geometry; + this.material = ( material !== undefined ) ? material : new SpriteMaterial(); + + this.center = new Vector2( 0.5, 0.5 ); + + } + + raycast( raycaster, intersects ) { + + if ( raycaster.camera === null ) { + + console.error( 'THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.' ); + + } + + _worldScale.setFromMatrixScale( this.matrixWorld ); + + _viewWorldMatrix.copy( raycaster.camera.matrixWorld ); + this.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld ); + + _mvPosition.setFromMatrixPosition( this.modelViewMatrix ); + + if ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) { + + _worldScale.multiplyScalar( - _mvPosition.z ); + + } + + const rotation = this.material.rotation; + let sin, cos; + + if ( rotation !== 0 ) { + + cos = Math.cos( rotation ); + sin = Math.sin( rotation ); + + } + + const center = this.center; + + transformVertex( _vA.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); + transformVertex( _vB.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); + transformVertex( _vC.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); + + _uvA.set( 0, 0 ); + _uvB.set( 1, 0 ); + _uvC.set( 1, 1 ); + + // check first triangle + let intersect = raycaster.ray.intersectTriangle( _vA, _vB, _vC, false, _intersectPoint ); + + if ( intersect === null ) { + + // check second triangle + transformVertex( _vB.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); + _uvB.set( 0, 1 ); + + intersect = raycaster.ray.intersectTriangle( _vA, _vC, _vB, false, _intersectPoint ); + if ( intersect === null ) { + + return; + + } + + } + + const distance = raycaster.ray.origin.distanceTo( _intersectPoint ); + + if ( distance < raycaster.near || distance > raycaster.far ) return; + + intersects.push( { + + distance: distance, + point: _intersectPoint.clone(), + uv: Triangle.getUV( _intersectPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ), + face: null, + object: this + + } ); + + } + + copy( source ) { + + super.copy( source ); + + if ( source.center !== undefined ) this.center.copy( source.center ); + + this.material = source.material; + + return this; + + } + +} + +Sprite.prototype.isSprite = true; + +function transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) { + + // compute position in camera space + _alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale ); + + // to check if rotation is not zero + if ( sin !== undefined ) { + + _rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y ); + _rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y ); + + } else { + + _rotatedPosition.copy( _alignedPosition ); + + } + + + vertexPosition.copy( mvPosition ); + vertexPosition.x += _rotatedPosition.x; + vertexPosition.y += _rotatedPosition.y; + + // transform to world space + vertexPosition.applyMatrix4( _viewWorldMatrix ); + +} + +const _v1$2 = /*@__PURE__*/ new Vector3(); +const _v2$1 = /*@__PURE__*/ new Vector3(); + +class LOD extends Object3D { + + constructor() { + + super(); + + this._currentLevel = 0; + + this.type = 'LOD'; + + Object.defineProperties( this, { + levels: { + enumerable: true, + value: [] + }, + isLOD: { + value: true, + } + } ); + + this.autoUpdate = true; + + } + + copy( source ) { + + super.copy( source, false ); + + const levels = source.levels; + + for ( let i = 0, l = levels.length; i < l; i ++ ) { + + const level = levels[ i ]; + + this.addLevel( level.object.clone(), level.distance ); + + } + + this.autoUpdate = source.autoUpdate; + + return this; + + } + + addLevel( object, distance = 0 ) { + + distance = Math.abs( distance ); + + const levels = this.levels; + + let l; + + for ( l = 0; l < levels.length; l ++ ) { + + if ( distance < levels[ l ].distance ) { + + break; + + } + + } + + levels.splice( l, 0, { distance: distance, object: object } ); + + this.add( object ); + + return this; + + } + + getCurrentLevel() { + + return this._currentLevel; + + } + + getObjectForDistance( distance ) { + + const levels = this.levels; + + if ( levels.length > 0 ) { + + let i, l; + + for ( i = 1, l = levels.length; i < l; i ++ ) { + + if ( distance < levels[ i ].distance ) { + + break; + + } + + } + + return levels[ i - 1 ].object; + + } + + return null; + + } + + raycast( raycaster, intersects ) { + + const levels = this.levels; + + if ( levels.length > 0 ) { + + _v1$2.setFromMatrixPosition( this.matrixWorld ); + + const distance = raycaster.ray.origin.distanceTo( _v1$2 ); + + this.getObjectForDistance( distance ).raycast( raycaster, intersects ); + + } + + } + + update( camera ) { + + const levels = this.levels; + + if ( levels.length > 1 ) { + + _v1$2.setFromMatrixPosition( camera.matrixWorld ); + _v2$1.setFromMatrixPosition( this.matrixWorld ); + + const distance = _v1$2.distanceTo( _v2$1 ) / camera.zoom; + + levels[ 0 ].object.visible = true; + + let i, l; + + for ( i = 1, l = levels.length; i < l; i ++ ) { + + if ( distance >= levels[ i ].distance ) { + + levels[ i - 1 ].object.visible = false; + levels[ i ].object.visible = true; + + } else { + + break; + + } + + } + + this._currentLevel = i - 1; + + for ( ; i < l; i ++ ) { + + levels[ i ].object.visible = false; + + } + + } + + } + + toJSON( meta ) { + + const data = super.toJSON( meta ); + + if ( this.autoUpdate === false ) data.object.autoUpdate = false; + + data.object.levels = []; + + const levels = this.levels; + + for ( let i = 0, l = levels.length; i < l; i ++ ) { + + const level = levels[ i ]; + + data.object.levels.push( { + object: level.object.uuid, + distance: level.distance + } ); + + } + + return data; + + } + +} + +const _basePosition = /*@__PURE__*/ new Vector3(); + +const _skinIndex = /*@__PURE__*/ new Vector4(); +const _skinWeight = /*@__PURE__*/ new Vector4(); + +const _vector$5 = /*@__PURE__*/ new Vector3(); +const _matrix = /*@__PURE__*/ new Matrix4(); + +class SkinnedMesh extends Mesh { + + constructor( geometry, material ) { + + super( geometry, material ); + + this.type = 'SkinnedMesh'; + + this.bindMode = 'attached'; + this.bindMatrix = new Matrix4(); + this.bindMatrixInverse = new Matrix4(); + + } + + copy( source ) { + + super.copy( source ); + + this.bindMode = source.bindMode; + this.bindMatrix.copy( source.bindMatrix ); + this.bindMatrixInverse.copy( source.bindMatrixInverse ); + + this.skeleton = source.skeleton; + + return this; + + } + + bind( skeleton, bindMatrix ) { + + this.skeleton = skeleton; + + if ( bindMatrix === undefined ) { + + this.updateMatrixWorld( true ); + + this.skeleton.calculateInverses(); + + bindMatrix = this.matrixWorld; + + } + + this.bindMatrix.copy( bindMatrix ); + this.bindMatrixInverse.copy( bindMatrix ).invert(); + + } + + pose() { + + this.skeleton.pose(); + + } + + normalizeSkinWeights() { + + const vector = new Vector4(); + + const skinWeight = this.geometry.attributes.skinWeight; + + for ( let i = 0, l = skinWeight.count; i < l; i ++ ) { + + vector.x = skinWeight.getX( i ); + vector.y = skinWeight.getY( i ); + vector.z = skinWeight.getZ( i ); + vector.w = skinWeight.getW( i ); + + const scale = 1.0 / vector.manhattanLength(); + + if ( scale !== Infinity ) { + + vector.multiplyScalar( scale ); + + } else { + + vector.set( 1, 0, 0, 0 ); // do something reasonable + + } + + skinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w ); + + } + + } + + updateMatrixWorld( force ) { + + super.updateMatrixWorld( force ); + + if ( this.bindMode === 'attached' ) { + + this.bindMatrixInverse.copy( this.matrixWorld ).invert(); + + } else if ( this.bindMode === 'detached' ) { + + this.bindMatrixInverse.copy( this.bindMatrix ).invert(); + + } else { + + console.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode ); + + } + + } + + boneTransform( index, target ) { + + const skeleton = this.skeleton; + const geometry = this.geometry; + + _skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index ); + _skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index ); + + _basePosition.fromBufferAttribute( geometry.attributes.position, index ).applyMatrix4( this.bindMatrix ); + + target.set( 0, 0, 0 ); + + for ( let i = 0; i < 4; i ++ ) { + + const weight = _skinWeight.getComponent( i ); + + if ( weight !== 0 ) { + + const boneIndex = _skinIndex.getComponent( i ); + + _matrix.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] ); + + target.addScaledVector( _vector$5.copy( _basePosition ).applyMatrix4( _matrix ), weight ); + + } + + } + + return target.applyMatrix4( this.bindMatrixInverse ); + + } + +} + +SkinnedMesh.prototype.isSkinnedMesh = true; + +class Bone extends Object3D { + + constructor() { + + super(); + + this.type = 'Bone'; + + } + +} + +Bone.prototype.isBone = true; + +class DataTexture extends Texture { + + constructor( data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, encoding ) { + + super( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.image = { data: data, width: width, height: height }; + + this.magFilter = magFilter; + this.minFilter = minFilter; + + this.generateMipmaps = false; + this.flipY = false; + this.unpackAlignment = 1; + + this.needsUpdate = true; + + } + +} + +DataTexture.prototype.isDataTexture = true; + +const _offsetMatrix = /*@__PURE__*/ new Matrix4(); +const _identityMatrix = /*@__PURE__*/ new Matrix4(); + +class Skeleton { + + constructor( bones = [], boneInverses = [] ) { + + this.uuid = generateUUID(); + + this.bones = bones.slice( 0 ); + this.boneInverses = boneInverses; + this.boneMatrices = null; + + this.boneTexture = null; + this.boneTextureSize = 0; + + this.frame = - 1; + + this.init(); + + } + + init() { + + const bones = this.bones; + const boneInverses = this.boneInverses; + + this.boneMatrices = new Float32Array( bones.length * 16 ); + + // calculate inverse bone matrices if necessary + + if ( boneInverses.length === 0 ) { + + this.calculateInverses(); + + } else { + + // handle special case + + if ( bones.length !== boneInverses.length ) { + + console.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' ); + + this.boneInverses = []; + + for ( let i = 0, il = this.bones.length; i < il; i ++ ) { + + this.boneInverses.push( new Matrix4() ); + + } + + } + + } + + } + + calculateInverses() { + + this.boneInverses.length = 0; + + for ( let i = 0, il = this.bones.length; i < il; i ++ ) { + + const inverse = new Matrix4(); + + if ( this.bones[ i ] ) { + + inverse.copy( this.bones[ i ].matrixWorld ).invert(); + + } + + this.boneInverses.push( inverse ); + + } + + } + + pose() { + + // recover the bind-time world matrices + + for ( let i = 0, il = this.bones.length; i < il; i ++ ) { + + const bone = this.bones[ i ]; + + if ( bone ) { + + bone.matrixWorld.copy( this.boneInverses[ i ] ).invert(); + + } + + } + + // compute the local matrices, positions, rotations and scales + + for ( let i = 0, il = this.bones.length; i < il; i ++ ) { + + const bone = this.bones[ i ]; + + if ( bone ) { + + if ( bone.parent && bone.parent.isBone ) { + + bone.matrix.copy( bone.parent.matrixWorld ).invert(); + bone.matrix.multiply( bone.matrixWorld ); + + } else { + + bone.matrix.copy( bone.matrixWorld ); + + } + + bone.matrix.decompose( bone.position, bone.quaternion, bone.scale ); + + } + + } + + } + + update() { + + const bones = this.bones; + const boneInverses = this.boneInverses; + const boneMatrices = this.boneMatrices; + const boneTexture = this.boneTexture; + + // flatten bone matrices to array + + for ( let i = 0, il = bones.length; i < il; i ++ ) { + + // compute the offset between the current and the original transform + + const matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix; + + _offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] ); + _offsetMatrix.toArray( boneMatrices, i * 16 ); + + } + + if ( boneTexture !== null ) { + + boneTexture.needsUpdate = true; + + } + + } + + clone() { + + return new Skeleton( this.bones, this.boneInverses ); + + } + + computeBoneTexture() { + + // layout (1 matrix = 4 pixels) + // RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4) + // with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8) + // 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16) + // 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32) + // 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64) + + let size = Math.sqrt( this.bones.length * 4 ); // 4 pixels needed for 1 matrix + size = ceilPowerOfTwo( size ); + size = Math.max( size, 4 ); + + const boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel + boneMatrices.set( this.boneMatrices ); // copy current values + + const boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType ); + + this.boneMatrices = boneMatrices; + this.boneTexture = boneTexture; + this.boneTextureSize = size; + + return this; + + } + + getBoneByName( name ) { + + for ( let i = 0, il = this.bones.length; i < il; i ++ ) { + + const bone = this.bones[ i ]; + + if ( bone.name === name ) { + + return bone; + + } + + } + + return undefined; + + } + + dispose( ) { + + if ( this.boneTexture !== null ) { + + this.boneTexture.dispose(); + + this.boneTexture = null; + + } + + } + + fromJSON( json, bones ) { + + this.uuid = json.uuid; + + for ( let i = 0, l = json.bones.length; i < l; i ++ ) { + + const uuid = json.bones[ i ]; + let bone = bones[ uuid ]; + + if ( bone === undefined ) { + + console.warn( 'THREE.Skeleton: No bone found with UUID:', uuid ); + bone = new Bone(); + + } + + this.bones.push( bone ); + this.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) ); + + } + + this.init(); + + return this; + + } + + toJSON() { + + const data = { + metadata: { + version: 4.5, + type: 'Skeleton', + generator: 'Skeleton.toJSON' + }, + bones: [], + boneInverses: [] + }; + + data.uuid = this.uuid; + + const bones = this.bones; + const boneInverses = this.boneInverses; + + for ( let i = 0, l = bones.length; i < l; i ++ ) { + + const bone = bones[ i ]; + data.bones.push( bone.uuid ); + + const boneInverse = boneInverses[ i ]; + data.boneInverses.push( boneInverse.toArray() ); + + } + + return data; + + } + +} + +const _instanceLocalMatrix = /*@__PURE__*/ new Matrix4(); +const _instanceWorldMatrix = /*@__PURE__*/ new Matrix4(); + +const _instanceIntersects = []; + +const _mesh = /*@__PURE__*/ new Mesh(); + +class InstancedMesh extends Mesh { + + constructor( geometry, material, count ) { + + super( geometry, material ); + + this.instanceMatrix = new BufferAttribute( new Float32Array( count * 16 ), 16 ); + this.instanceColor = null; + + this.count = count; + + this.frustumCulled = false; + + } + + copy( source ) { + + super.copy( source ); + + this.instanceMatrix.copy( source.instanceMatrix ); + + if ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone(); + + this.count = source.count; + + return this; + + } + + getColorAt( index, color ) { + + color.fromArray( this.instanceColor.array, index * 3 ); + + } + + getMatrixAt( index, matrix ) { + + matrix.fromArray( this.instanceMatrix.array, index * 16 ); + + } + + raycast( raycaster, intersects ) { + + const matrixWorld = this.matrixWorld; + const raycastTimes = this.count; + + _mesh.geometry = this.geometry; + _mesh.material = this.material; + + if ( _mesh.material === undefined ) return; + + for ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) { + + // calculate the world matrix for each instance + + this.getMatrixAt( instanceId, _instanceLocalMatrix ); + + _instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix ); + + // the mesh represents this single instance + + _mesh.matrixWorld = _instanceWorldMatrix; + + _mesh.raycast( raycaster, _instanceIntersects ); + + // process the result of raycast + + for ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) { + + const intersect = _instanceIntersects[ i ]; + intersect.instanceId = instanceId; + intersect.object = this; + intersects.push( intersect ); + + } + + _instanceIntersects.length = 0; + + } + + } + + setColorAt( index, color ) { + + if ( this.instanceColor === null ) { + + this.instanceColor = new BufferAttribute( new Float32Array( this.instanceMatrix.count * 3 ), 3 ); + + } + + color.toArray( this.instanceColor.array, index * 3 ); + + } + + setMatrixAt( index, matrix ) { + + matrix.toArray( this.instanceMatrix.array, index * 16 ); + + } + + updateMorphTargets() { + + } + + dispose() { + + this.dispatchEvent( { type: 'dispose' } ); + + } + +} + +InstancedMesh.prototype.isInstancedMesh = true; + +/** + * parameters = { + * color: , + * opacity: , + * + * linewidth: , + * linecap: "round", + * linejoin: "round" + * } + */ + +class LineBasicMaterial extends Material { + + constructor( parameters ) { + + super(); + + this.type = 'LineBasicMaterial'; + + this.color = new Color( 0xffffff ); + + this.linewidth = 1; + this.linecap = 'round'; + this.linejoin = 'round'; + + this.setValues( parameters ); + + } + + + copy( source ) { + + super.copy( source ); + + this.color.copy( source.color ); + + this.linewidth = source.linewidth; + this.linecap = source.linecap; + this.linejoin = source.linejoin; + + return this; + + } + +} + +LineBasicMaterial.prototype.isLineBasicMaterial = true; + +const _start$1 = /*@__PURE__*/ new Vector3(); +const _end$1 = /*@__PURE__*/ new Vector3(); +const _inverseMatrix$1 = /*@__PURE__*/ new Matrix4(); +const _ray$1 = /*@__PURE__*/ new Ray(); +const _sphere$1 = /*@__PURE__*/ new Sphere(); + +class Line extends Object3D { + + constructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) { + + super(); + + this.type = 'Line'; + + this.geometry = geometry; + this.material = material; + + this.updateMorphTargets(); + + } + + copy( source ) { + + super.copy( source ); + + this.material = source.material; + this.geometry = source.geometry; + + return this; + + } + + computeLineDistances() { + + const geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + // we assume non-indexed geometry + + if ( geometry.index === null ) { + + const positionAttribute = geometry.attributes.position; + const lineDistances = [ 0 ]; + + for ( let i = 1, l = positionAttribute.count; i < l; i ++ ) { + + _start$1.fromBufferAttribute( positionAttribute, i - 1 ); + _end$1.fromBufferAttribute( positionAttribute, i ); + + lineDistances[ i ] = lineDistances[ i - 1 ]; + lineDistances[ i ] += _start$1.distanceTo( _end$1 ); + + } + + geometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) ); + + } else { + + console.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' ); + + } + + } else if ( geometry.isGeometry ) { + + console.error( 'THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + return this; + + } + + raycast( raycaster, intersects ) { + + const geometry = this.geometry; + const matrixWorld = this.matrixWorld; + const threshold = raycaster.params.Line.threshold; + const drawRange = geometry.drawRange; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + _sphere$1.copy( geometry.boundingSphere ); + _sphere$1.applyMatrix4( matrixWorld ); + _sphere$1.radius += threshold; + + if ( raycaster.ray.intersectsSphere( _sphere$1 ) === false ) return; + + // + + _inverseMatrix$1.copy( matrixWorld ).invert(); + _ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 ); + + const localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ); + const localThresholdSq = localThreshold * localThreshold; + + const vStart = new Vector3(); + const vEnd = new Vector3(); + const interSegment = new Vector3(); + const interRay = new Vector3(); + const step = this.isLineSegments ? 2 : 1; + + if ( geometry.isBufferGeometry ) { + + const index = geometry.index; + const attributes = geometry.attributes; + const positionAttribute = attributes.position; + + if ( index !== null ) { + + const start = Math.max( 0, drawRange.start ); + const end = Math.min( index.count, ( drawRange.start + drawRange.count ) ); + + for ( let i = start, l = end - 1; i < l; i += step ) { + + const a = index.getX( i ); + const b = index.getX( i + 1 ); + + vStart.fromBufferAttribute( positionAttribute, a ); + vEnd.fromBufferAttribute( positionAttribute, b ); + + const distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); + + if ( distSq > localThresholdSq ) continue; + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + const distance = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance < raycaster.near || distance > raycaster.far ) continue; + + intersects.push( { + + distance: distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } else { + + const start = Math.max( 0, drawRange.start ); + const end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) ); + + for ( let i = start, l = end - 1; i < l; i += step ) { + + vStart.fromBufferAttribute( positionAttribute, i ); + vEnd.fromBufferAttribute( positionAttribute, i + 1 ); + + const distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); + + if ( distSq > localThresholdSq ) continue; + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + const distance = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance < raycaster.near || distance > raycaster.far ) continue; + + intersects.push( { + + distance: distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } + + } else if ( geometry.isGeometry ) { + + console.error( 'THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + } + + updateMorphTargets() { + + const geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + 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; + + } + + } + + } + + } else { + + const morphTargets = geometry.morphTargets; + + if ( morphTargets !== undefined && morphTargets.length > 0 ) { + + console.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + } + + } + +} + +Line.prototype.isLine = true; + +const _start = /*@__PURE__*/ new Vector3(); +const _end = /*@__PURE__*/ new Vector3(); + +class LineSegments extends Line { + + constructor( geometry, material ) { + + super( geometry, material ); + + this.type = 'LineSegments'; + + } + + computeLineDistances() { + + const geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + // we assume non-indexed geometry + + if ( geometry.index === null ) { + + const positionAttribute = geometry.attributes.position; + const lineDistances = []; + + for ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) { + + _start.fromBufferAttribute( positionAttribute, i ); + _end.fromBufferAttribute( positionAttribute, i + 1 ); + + lineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ]; + lineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end ); + + } + + geometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) ); + + } else { + + console.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' ); + + } + + } else if ( geometry.isGeometry ) { + + console.error( 'THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + return this; + + } + +} + +LineSegments.prototype.isLineSegments = true; + +class LineLoop extends Line { + + constructor( geometry, material ) { + + super( geometry, material ); + + this.type = 'LineLoop'; + + } + +} + +LineLoop.prototype.isLineLoop = true; + +/** + * parameters = { + * color: , + * opacity: , + * map: new THREE.Texture( ), + * alphaMap: new THREE.Texture( ), + * + * size: , + * sizeAttenuation: + * + * } + */ + +class PointsMaterial extends Material { + + constructor( parameters ) { + + super(); + + this.type = 'PointsMaterial'; + + this.color = new Color( 0xffffff ); + + this.map = null; + + this.alphaMap = null; + + this.size = 1; + this.sizeAttenuation = true; + + this.setValues( parameters ); + + } + + copy( source ) { + + super.copy( source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.size = source.size; + this.sizeAttenuation = source.sizeAttenuation; + + return this; + + } + +} + +PointsMaterial.prototype.isPointsMaterial = true; + +const _inverseMatrix = /*@__PURE__*/ new Matrix4(); +const _ray = /*@__PURE__*/ new Ray(); +const _sphere = /*@__PURE__*/ new Sphere(); +const _position$2 = /*@__PURE__*/ new Vector3(); + +class Points extends Object3D { + + constructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) { + + super(); + + this.type = 'Points'; + + this.geometry = geometry; + this.material = material; + + this.updateMorphTargets(); + + } + + copy( source ) { + + super.copy( source ); + + this.material = source.material; + this.geometry = source.geometry; + + return this; + + } + + raycast( raycaster, intersects ) { + + const geometry = this.geometry; + const matrixWorld = this.matrixWorld; + const threshold = raycaster.params.Points.threshold; + const drawRange = geometry.drawRange; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + _sphere.copy( geometry.boundingSphere ); + _sphere.applyMatrix4( matrixWorld ); + _sphere.radius += threshold; + + if ( raycaster.ray.intersectsSphere( _sphere ) === false ) return; + + // + + _inverseMatrix.copy( matrixWorld ).invert(); + _ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix ); + + const localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ); + const localThresholdSq = localThreshold * localThreshold; + + if ( geometry.isBufferGeometry ) { + + const index = geometry.index; + const attributes = geometry.attributes; + const positionAttribute = attributes.position; + + if ( index !== null ) { + + 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 ++ ) { + + const a = index.getX( i ); + + _position$2.fromBufferAttribute( positionAttribute, a ); + + testPoint( _position$2, a, localThresholdSq, matrixWorld, raycaster, intersects, this ); + + } + + } else { + + const start = Math.max( 0, drawRange.start ); + const end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) ); + + for ( let i = start, l = end; i < l; i ++ ) { + + _position$2.fromBufferAttribute( positionAttribute, i ); + + testPoint( _position$2, i, localThresholdSq, matrixWorld, raycaster, intersects, this ); + + } + + } + + } else { + + console.error( 'THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + } + + updateMorphTargets() { + + const geometry = this.geometry; + + if ( geometry.isBufferGeometry ) { + + 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; + + } + + } + + } + + } else { + + const morphTargets = geometry.morphTargets; + + if ( morphTargets !== undefined && morphTargets.length > 0 ) { + + console.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' ); + + } + + } + + } + +} + +Points.prototype.isPoints = true; + +function testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) { + + const rayPointDistanceSq = _ray.distanceSqToPoint( point ); + + if ( rayPointDistanceSq < localThresholdSq ) { + + const intersectPoint = new Vector3(); + + _ray.closestPointToPoint( point, intersectPoint ); + intersectPoint.applyMatrix4( matrixWorld ); + + const distance = raycaster.ray.origin.distanceTo( intersectPoint ); + + if ( distance < raycaster.near || distance > raycaster.far ) return; + + intersects.push( { + + distance: distance, + distanceToRay: Math.sqrt( rayPointDistanceSq ), + point: intersectPoint, + index: index, + face: null, + object: object + + } ); + + } + +} + +class VideoTexture extends Texture { + + constructor( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { + + super( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.format = format !== undefined ? format : RGBFormat; + + this.minFilter = minFilter !== undefined ? minFilter : LinearFilter; + this.magFilter = magFilter !== undefined ? magFilter : LinearFilter; + + this.generateMipmaps = false; + + const scope = this; + + function updateVideo() { + + scope.needsUpdate = true; + video.requestVideoFrameCallback( updateVideo ); + + } + + if ( 'requestVideoFrameCallback' in video ) { + + video.requestVideoFrameCallback( updateVideo ); + + } + + } + + clone() { + + return new this.constructor( this.image ).copy( this ); + + } + + update() { + + const video = this.image; + const hasVideoFrameCallback = 'requestVideoFrameCallback' in video; + + if ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) { + + this.needsUpdate = true; + + } + + } + +} + +VideoTexture.prototype.isVideoTexture = true; + +class CompressedTexture extends Texture { + + constructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { + + super( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.image = { width: width, height: height }; + this.mipmaps = mipmaps; + + // no flipping for cube textures + // (also flipping doesn't work for compressed textures ) + + this.flipY = false; + + // can't generate mipmaps for compressed textures + // mips must be embedded in DDS files + + this.generateMipmaps = false; + + } + +} + +CompressedTexture.prototype.isCompressedTexture = true; + +class CanvasTexture extends Texture { + + constructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { + + super( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.needsUpdate = true; + + } + +} + +CanvasTexture.prototype.isCanvasTexture = true; + +class DepthTexture extends Texture { + + constructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) { + + format = format !== undefined ? format : DepthFormat; + + if ( format !== DepthFormat && format !== DepthStencilFormat ) { + + throw new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' ); + + } + + if ( type === undefined && format === DepthFormat ) type = UnsignedShortType; + if ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type; + + super( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.image = { width: width, height: height }; + + this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; + this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; + + this.flipY = false; + this.generateMipmaps = false; + + } + + +} + +DepthTexture.prototype.isDepthTexture = true; + +class CircleGeometry extends BufferGeometry { + + constructor( radius = 1, segments = 8, thetaStart = 0, thetaLength = Math.PI * 2 ) { + + super(); + + this.type = 'CircleGeometry'; + + this.parameters = { + radius: radius, + segments: segments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + segments = Math.max( 3, segments ); + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + // helper variables + + const vertex = new Vector3(); + const uv = new Vector2(); + + // center point + + vertices.push( 0, 0, 0 ); + normals.push( 0, 0, 1 ); + uvs.push( 0.5, 0.5 ); + + for ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) { + + const segment = thetaStart + s / segments * thetaLength; + + // vertex + + vertex.x = radius * Math.cos( segment ); + vertex.y = radius * Math.sin( segment ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, 0, 1 ); + + // uvs + + uv.x = ( vertices[ i ] / radius + 1 ) / 2; + uv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2; + + uvs.push( uv.x, uv.y ); + + } + + // indices + + for ( let i = 1; i <= segments; i ++ ) { + + indices.push( i, i + 1, 0 ); + + } + + // 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 ) ); + + } + + static fromJSON( data ) { + + return new CircleGeometry( data.radius, data.segments, data.thetaStart, data.thetaLength ); + + } + +} + +class CylinderGeometry extends BufferGeometry { + + constructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) { + + super(); + this.type = 'CylinderGeometry'; + + this.parameters = { + radiusTop: radiusTop, + radiusBottom: radiusBottom, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + const scope = this; + + radialSegments = Math.floor( radialSegments ); + heightSegments = Math.floor( heightSegments ); + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + // helper variables + + let index = 0; + const indexArray = []; + const halfHeight = height / 2; + let groupStart = 0; + + // generate geometry + + generateTorso(); + + if ( openEnded === false ) { + + if ( radiusTop > 0 ) generateCap( true ); + if ( radiusBottom > 0 ) generateCap( false ); + + } + + // 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 generateTorso() { + + const normal = new Vector3(); + const vertex = new Vector3(); + + let groupCount = 0; + + // this will be used to calculate the normal + const slope = ( radiusBottom - radiusTop ) / height; + + // generate vertices, normals and uvs + + for ( let y = 0; y <= heightSegments; y ++ ) { + + const indexRow = []; + + const v = y / heightSegments; + + // calculate the radius of the current row + + const radius = v * ( radiusBottom - radiusTop ) + radiusTop; + + for ( let x = 0; x <= radialSegments; x ++ ) { + + const u = x / radialSegments; + + const theta = u * thetaLength + thetaStart; + + const sinTheta = Math.sin( theta ); + const cosTheta = Math.cos( theta ); + + // vertex + + vertex.x = radius * sinTheta; + vertex.y = - v * height + halfHeight; + vertex.z = radius * cosTheta; + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normal.set( sinTheta, slope, cosTheta ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u, 1 - v ); + + // save index of vertex in respective row + + indexRow.push( index ++ ); + + } + + // now save vertices of the row in our index array + + indexArray.push( indexRow ); + + } + + // generate indices + + for ( let x = 0; x < radialSegments; x ++ ) { + + for ( let y = 0; y < heightSegments; y ++ ) { + + // we use the index array to access the correct indices + + const a = indexArray[ y ][ x ]; + const b = indexArray[ y + 1 ][ x ]; + const c = indexArray[ y + 1 ][ x + 1 ]; + const d = indexArray[ y ][ x + 1 ]; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + // update group counter + + groupCount += 6; + + } + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, 0 ); + + // calculate new start value for groups + + groupStart += groupCount; + + } + + function generateCap( top ) { + + // save the index of the first center vertex + const centerIndexStart = index; + + const uv = new Vector2(); + const vertex = new Vector3(); + + let groupCount = 0; + + const radius = ( top === true ) ? radiusTop : radiusBottom; + const sign = ( top === true ) ? 1 : - 1; + + // first we generate the center vertex data of the cap. + // because the geometry needs one set of uvs per face, + // we must generate a center vertex per face/segment + + for ( let x = 1; x <= radialSegments; x ++ ) { + + // vertex + + vertices.push( 0, halfHeight * sign, 0 ); + + // normal + + normals.push( 0, sign, 0 ); + + // uv + + uvs.push( 0.5, 0.5 ); + + // increase index + + index ++; + + } + + // save the index of the last center vertex + const centerIndexEnd = index; + + // now we generate the surrounding vertices, normals and uvs + + for ( let x = 0; x <= radialSegments; x ++ ) { + + const u = x / radialSegments; + const theta = u * thetaLength + thetaStart; + + const cosTheta = Math.cos( theta ); + const sinTheta = Math.sin( theta ); + + // vertex + + vertex.x = radius * sinTheta; + vertex.y = halfHeight * sign; + vertex.z = radius * cosTheta; + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, sign, 0 ); + + // uv + + uv.x = ( cosTheta * 0.5 ) + 0.5; + uv.y = ( sinTheta * 0.5 * sign ) + 0.5; + uvs.push( uv.x, uv.y ); + + // increase index + + index ++; + + } + + // generate indices + + for ( let x = 0; x < radialSegments; x ++ ) { + + const c = centerIndexStart + x; + const i = centerIndexEnd + x; + + if ( top === true ) { + + // face top + + indices.push( i, i + 1, c ); + + } else { + + // face bottom + + indices.push( i + 1, i, c ); + + } + + groupCount += 3; + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, top === true ? 1 : 2 ); + + // calculate new start value for groups + + groupStart += groupCount; + + } + + } + + static fromJSON( data ) { + + return new CylinderGeometry( data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength ); + + } + +} + +class ConeGeometry extends CylinderGeometry { + + constructor( radius = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) { + + super( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); + + this.type = 'ConeGeometry'; + + this.parameters = { + radius: radius, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + } + + static fromJSON( data ) { + + return new ConeGeometry( data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength ); + + } + +} + +class PolyhedronGeometry extends BufferGeometry { + + constructor( vertices, indices, radius = 1, detail = 0 ) { + + super(); + + this.type = 'PolyhedronGeometry'; + + this.parameters = { + vertices: vertices, + indices: indices, + radius: radius, + detail: detail + }; + + // default buffer data + + const vertexBuffer = []; + const uvBuffer = []; + + // the subdivision creates the vertex buffer data + + subdivide( detail ); + + // all vertices should lie on a conceptual sphere with a given radius + + applyRadius( radius ); + + // finally, create the uv data + + generateUVs(); + + // build non-indexed geometry + + this.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) ); + this.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) ); + + if ( detail === 0 ) { + + this.computeVertexNormals(); // flat normals + + } else { + + this.normalizeNormals(); // smooth normals + + } + + // helper functions + + function subdivide( detail ) { + + const a = new Vector3(); + const b = new Vector3(); + const c = new Vector3(); + + // iterate over all faces and apply a subdivison with the given detail value + + for ( let i = 0; i < indices.length; i += 3 ) { + + // get the vertices of the face + + getVertexByIndex( indices[ i + 0 ], a ); + getVertexByIndex( indices[ i + 1 ], b ); + getVertexByIndex( indices[ i + 2 ], c ); + + // perform subdivision + + subdivideFace( a, b, c, detail ); + + } + + } + + function subdivideFace( a, b, c, detail ) { + + const cols = detail + 1; + + // we use this multidimensional array as a data structure for creating the subdivision + + const v = []; + + // construct all of the vertices for this subdivision + + for ( let i = 0; i <= cols; i ++ ) { + + v[ i ] = []; + + const aj = a.clone().lerp( c, i / cols ); + const bj = b.clone().lerp( c, i / cols ); + + const rows = cols - i; + + for ( let j = 0; j <= rows; j ++ ) { + + if ( j === 0 && i === cols ) { + + v[ i ][ j ] = aj; + + } else { + + v[ i ][ j ] = aj.clone().lerp( bj, j / rows ); + + } + + } + + } + + // construct all of the faces + + for ( let i = 0; i < cols; i ++ ) { + + for ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) { + + const k = Math.floor( j / 2 ); + + if ( j % 2 === 0 ) { + + pushVertex( v[ i ][ k + 1 ] ); + pushVertex( v[ i + 1 ][ k ] ); + pushVertex( v[ i ][ k ] ); + + } else { + + pushVertex( v[ i ][ k + 1 ] ); + pushVertex( v[ i + 1 ][ k + 1 ] ); + pushVertex( v[ i + 1 ][ k ] ); + + } + + } + + } + + } + + function applyRadius( radius ) { + + const vertex = new Vector3(); + + // iterate over the entire buffer and apply the radius to each vertex + + for ( let i = 0; i < vertexBuffer.length; i += 3 ) { + + vertex.x = vertexBuffer[ i + 0 ]; + vertex.y = vertexBuffer[ i + 1 ]; + vertex.z = vertexBuffer[ i + 2 ]; + + vertex.normalize().multiplyScalar( radius ); + + vertexBuffer[ i + 0 ] = vertex.x; + vertexBuffer[ i + 1 ] = vertex.y; + vertexBuffer[ i + 2 ] = vertex.z; + + } + + } + + function generateUVs() { + + const vertex = new Vector3(); + + for ( let i = 0; i < vertexBuffer.length; i += 3 ) { + + vertex.x = vertexBuffer[ i + 0 ]; + vertex.y = vertexBuffer[ i + 1 ]; + vertex.z = vertexBuffer[ i + 2 ]; + + const u = azimuth( vertex ) / 2 / Math.PI + 0.5; + const v = inclination( vertex ) / Math.PI + 0.5; + uvBuffer.push( u, 1 - v ); + + } + + correctUVs(); + + correctSeam(); + + } + + function correctSeam() { + + // handle case when face straddles the seam, see #3269 + + for ( let i = 0; i < uvBuffer.length; i += 6 ) { + + // uv data of a single face + + const x0 = uvBuffer[ i + 0 ]; + const x1 = uvBuffer[ i + 2 ]; + const x2 = uvBuffer[ i + 4 ]; + + const max = Math.max( x0, x1, x2 ); + const min = Math.min( x0, x1, x2 ); + + // 0.9 is somewhat arbitrary + + if ( max > 0.9 && min < 0.1 ) { + + if ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1; + if ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1; + if ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1; + + } + + } + + } + + function pushVertex( vertex ) { + + vertexBuffer.push( vertex.x, vertex.y, vertex.z ); + + } + + function getVertexByIndex( index, vertex ) { + + const stride = index * 3; + + vertex.x = vertices[ stride + 0 ]; + vertex.y = vertices[ stride + 1 ]; + vertex.z = vertices[ stride + 2 ]; + + } + + function correctUVs() { + + const a = new Vector3(); + const b = new Vector3(); + const c = new Vector3(); + + const centroid = new Vector3(); + + const uvA = new Vector2(); + const uvB = new Vector2(); + const uvC = new Vector2(); + + for ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) { + + a.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] ); + b.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] ); + c.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] ); + + uvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] ); + uvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] ); + uvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] ); + + centroid.copy( a ).add( b ).add( c ).divideScalar( 3 ); + + const azi = azimuth( centroid ); + + correctUV( uvA, j + 0, a, azi ); + correctUV( uvB, j + 2, b, azi ); + correctUV( uvC, j + 4, c, azi ); + + } + + } + + function correctUV( uv, stride, vector, azimuth ) { + + if ( ( azimuth < 0 ) && ( uv.x === 1 ) ) { + + uvBuffer[ stride ] = uv.x - 1; + + } + + if ( ( vector.x === 0 ) && ( vector.z === 0 ) ) { + + uvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5; + + } + + } + + // Angle around the Y axis, counter-clockwise when looking from above. + + function azimuth( vector ) { + + return Math.atan2( vector.z, - vector.x ); + + } + + + // Angle above the XZ plane. + + function inclination( vector ) { + + return Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) ); + + } + + } + + static fromJSON( data ) { + + return new PolyhedronGeometry( data.vertices, data.indices, data.radius, data.details ); + + } + +} + +class DodecahedronGeometry extends PolyhedronGeometry { + + constructor( radius = 1, detail = 0 ) { + + const t = ( 1 + Math.sqrt( 5 ) ) / 2; + const r = 1 / t; + + const vertices = [ + + // (±1, ±1, ±1) + - 1, - 1, - 1, - 1, - 1, 1, + - 1, 1, - 1, - 1, 1, 1, + 1, - 1, - 1, 1, - 1, 1, + 1, 1, - 1, 1, 1, 1, + + // (0, ±1/φ, ±φ) + 0, - r, - t, 0, - r, t, + 0, r, - t, 0, r, t, + + // (±1/φ, ±φ, 0) + - r, - t, 0, - r, t, 0, + r, - t, 0, r, t, 0, + + // (±φ, 0, ±1/φ) + - t, 0, - r, t, 0, - r, + - t, 0, r, t, 0, r + ]; + + const indices = [ + 3, 11, 7, 3, 7, 15, 3, 15, 13, + 7, 19, 17, 7, 17, 6, 7, 6, 15, + 17, 4, 8, 17, 8, 10, 17, 10, 6, + 8, 0, 16, 8, 16, 2, 8, 2, 10, + 0, 12, 1, 0, 1, 18, 0, 18, 16, + 6, 10, 2, 6, 2, 13, 6, 13, 15, + 2, 16, 18, 2, 18, 3, 2, 3, 13, + 18, 1, 9, 18, 9, 11, 18, 11, 3, + 4, 14, 12, 4, 12, 0, 4, 0, 8, + 11, 9, 5, 11, 5, 19, 11, 19, 7, + 19, 5, 14, 19, 14, 4, 19, 4, 17, + 1, 12, 14, 1, 14, 5, 1, 5, 9 + ]; + + super( vertices, indices, radius, detail ); + + this.type = 'DodecahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + } + + static fromJSON( data ) { + + return new DodecahedronGeometry( data.radius, data.detail ); + + } + +} + +const _v0 = new Vector3(); +const _v1$1 = new Vector3(); +const _normal = new Vector3(); +const _triangle = new Triangle(); + +class EdgesGeometry extends BufferGeometry { + + constructor( geometry, thresholdAngle ) { + + super(); + + this.type = 'EdgesGeometry'; + + this.parameters = { + thresholdAngle: thresholdAngle + }; + + thresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1; + + if ( geometry.isGeometry === true ) { + + console.error( 'THREE.EdgesGeometry no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' ); + return; + + } + + const thresholdDot = Math.cos( DEG2RAD * thresholdAngle ); + + const indexAttr = geometry.getIndex(); + const positionAttr = geometry.getAttribute( 'position' ); + const indexCount = indexAttr ? indexAttr.count : positionAttr.count; + + const indexArr = [ 0, 0, 0 ]; + const vertKeys = [ 'a', 'b', 'c' ]; + const hashes = new Array( 3 ); + + const edgeData = {}; + const vertices = []; + for ( let i = 0; i < indexCount; i += 3 ) { + + if ( indexAttr ) { + + indexArr[ 0 ] = indexAttr.getX( i ); + indexArr[ 1 ] = indexAttr.getX( i + 1 ); + indexArr[ 2 ] = indexAttr.getX( i + 2 ); + + } else { + + indexArr[ 0 ] = i; + indexArr[ 1 ] = i + 1; + indexArr[ 2 ] = i + 2; + + } + + const { a, b, c } = _triangle; + a.fromBufferAttribute( positionAttr, indexArr[ 0 ] ); + b.fromBufferAttribute( positionAttr, indexArr[ 1 ] ); + c.fromBufferAttribute( positionAttr, indexArr[ 2 ] ); + _triangle.getNormal( _normal ); + + // create hashes for the edge from the vertices + hashes[ 0 ] = `${ a.x },${ a.y },${ a.z }`; + hashes[ 1 ] = `${ b.x },${ b.y },${ b.z }`; + hashes[ 2 ] = `${ c.x },${ c.y },${ c.z }`; + + // skip degenerate triangles + if ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) { + + continue; + + } + + // iterate over every edge + for ( let j = 0; j < 3; j ++ ) { + + // get the first and next vertex making up the edge + const jNext = ( j + 1 ) % 3; + const vecHash0 = hashes[ j ]; + const vecHash1 = hashes[ jNext ]; + const v0 = _triangle[ vertKeys[ j ] ]; + const v1 = _triangle[ vertKeys[ jNext ] ]; + + const hash = `${ vecHash0 }_${ vecHash1 }`; + const reverseHash = `${ vecHash1 }_${ vecHash0 }`; + + if ( reverseHash in edgeData && edgeData[ reverseHash ] ) { + + // if we found a sibling edge add it into the vertex array if + // it meets the angle threshold and delete the edge from the map. + if ( _normal.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) { + + vertices.push( v0.x, v0.y, v0.z ); + vertices.push( v1.x, v1.y, v1.z ); + + } + + edgeData[ reverseHash ] = null; + + } else if ( ! ( hash in edgeData ) ) { + + // if we've already got an edge here then skip adding a new one + edgeData[ hash ] = { + + index0: indexArr[ j ], + index1: indexArr[ jNext ], + normal: _normal.clone(), + + }; + + } + + } + + } + + // iterate over all remaining, unmatched edges and add them to the vertex array + for ( const key in edgeData ) { + + if ( edgeData[ key ] ) { + + const { index0, index1 } = edgeData[ key ]; + _v0.fromBufferAttribute( positionAttr, index0 ); + _v1$1.fromBufferAttribute( positionAttr, index1 ); + + vertices.push( _v0.x, _v0.y, _v0.z ); + vertices.push( _v1$1.x, _v1$1.y, _v1$1.z ); + + } + + } + + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + + } + +} + +/** + * Extensible curve object. + * + * Some common of curve methods: + * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget ) + * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget ) + * .getPoints(), .getSpacedPoints() + * .getLength() + * .updateArcLengths() + * + * This following curves inherit from THREE.Curve: + * + * -- 2D curves -- + * THREE.ArcCurve + * THREE.CubicBezierCurve + * THREE.EllipseCurve + * THREE.LineCurve + * THREE.QuadraticBezierCurve + * THREE.SplineCurve + * + * -- 3D curves -- + * THREE.CatmullRomCurve3 + * THREE.CubicBezierCurve3 + * THREE.LineCurve3 + * THREE.QuadraticBezierCurve3 + * + * A series of curves can be represented as a THREE.CurvePath. + * + **/ + +class Curve { + + constructor() { + + this.type = 'Curve'; + + this.arcLengthDivisions = 200; + + } + + // Virtual base class method to overwrite and implement in subclasses + // - t [0 .. 1] + + getPoint( /* t, optionalTarget */ ) { + + console.warn( 'THREE.Curve: .getPoint() not implemented.' ); + return null; + + } + + // Get point at relative position in curve according to arc length + // - u [0 .. 1] + + getPointAt( u, optionalTarget ) { + + const t = this.getUtoTmapping( u ); + return this.getPoint( t, optionalTarget ); + + } + + // Get sequence of points using getPoint( t ) + + getPoints( divisions = 5 ) { + + const points = []; + + for ( let d = 0; d <= divisions; d ++ ) { + + points.push( this.getPoint( d / divisions ) ); + + } + + return points; + + } + + // Get sequence of points using getPointAt( u ) + + getSpacedPoints( divisions = 5 ) { + + const points = []; + + for ( let d = 0; d <= divisions; d ++ ) { + + points.push( this.getPointAt( d / divisions ) ); + + } + + return points; + + } + + // Get total curve arc length + + getLength() { + + const lengths = this.getLengths(); + return lengths[ lengths.length - 1 ]; + + } + + // Get list of cumulative segment lengths + + getLengths( divisions = this.arcLengthDivisions ) { + + if ( this.cacheArcLengths && + ( this.cacheArcLengths.length === divisions + 1 ) && + ! this.needsUpdate ) { + + return this.cacheArcLengths; + + } + + this.needsUpdate = false; + + const cache = []; + let current, last = this.getPoint( 0 ); + let sum = 0; + + cache.push( 0 ); + + for ( let p = 1; p <= divisions; p ++ ) { + + current = this.getPoint( p / divisions ); + sum += current.distanceTo( last ); + cache.push( sum ); + last = current; + + } + + this.cacheArcLengths = cache; + + return cache; // { sums: cache, sum: sum }; Sum is in the last element. + + } + + updateArcLengths() { + + this.needsUpdate = true; + this.getLengths(); + + } + + // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant + + getUtoTmapping( u, distance ) { + + const arcLengths = this.getLengths(); + + let i = 0; + const il = arcLengths.length; + + let targetArcLength; // The targeted u distance value to get + + if ( distance ) { + + targetArcLength = distance; + + } else { + + targetArcLength = u * arcLengths[ il - 1 ]; + + } + + // binary search for the index with largest value smaller than target u distance + + let low = 0, high = il - 1, comparison; + + while ( low <= high ) { + + i = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats + + comparison = arcLengths[ i ] - targetArcLength; + + if ( comparison < 0 ) { + + low = i + 1; + + } else if ( comparison > 0 ) { + + high = i - 1; + + } else { + + high = i; + break; + + // DONE + + } + + } + + i = high; + + if ( arcLengths[ i ] === targetArcLength ) { + + return i / ( il - 1 ); + + } + + // we could get finer grain at lengths, or use simple interpolation between two points + + const lengthBefore = arcLengths[ i ]; + const lengthAfter = arcLengths[ i + 1 ]; + + const segmentLength = lengthAfter - lengthBefore; + + // determine where we are between the 'before' and 'after' points + + const segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength; + + // add that fractional amount to t + + const t = ( i + segmentFraction ) / ( il - 1 ); + + return t; + + } + + // Returns a unit vector tangent at t + // In case any sub curve does not implement its tangent derivation, + // 2 points a small delta apart will be used to find its gradient + // which seems to give a reasonable approximation + + getTangent( t, optionalTarget ) { + + const delta = 0.0001; + let t1 = t - delta; + let t2 = t + delta; + + // Capping in case of danger + + if ( t1 < 0 ) t1 = 0; + if ( t2 > 1 ) t2 = 1; + + const pt1 = this.getPoint( t1 ); + const pt2 = this.getPoint( t2 ); + + const tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() ); + + tangent.copy( pt2 ).sub( pt1 ).normalize(); + + return tangent; + + } + + getTangentAt( u, optionalTarget ) { + + const t = this.getUtoTmapping( u ); + return this.getTangent( t, optionalTarget ); + + } + + computeFrenetFrames( segments, closed ) { + + // see http://www.cs.indiana.edu/pub/techreports/TR425.pdf + + const normal = new Vector3(); + + const tangents = []; + const normals = []; + const binormals = []; + + const vec = new Vector3(); + const mat = new Matrix4(); + + // compute the tangent vectors for each segment on the curve + + for ( let i = 0; i <= segments; i ++ ) { + + const u = i / segments; + + tangents[ i ] = this.getTangentAt( u, new Vector3() ); + tangents[ i ].normalize(); + + } + + // select an initial normal vector perpendicular to the first tangent vector, + // and in the direction of the minimum tangent xyz component + + normals[ 0 ] = new Vector3(); + binormals[ 0 ] = new Vector3(); + let min = Number.MAX_VALUE; + const tx = Math.abs( tangents[ 0 ].x ); + const ty = Math.abs( tangents[ 0 ].y ); + const tz = Math.abs( tangents[ 0 ].z ); + + if ( tx <= min ) { + + min = tx; + normal.set( 1, 0, 0 ); + + } + + if ( ty <= min ) { + + min = ty; + normal.set( 0, 1, 0 ); + + } + + if ( tz <= min ) { + + normal.set( 0, 0, 1 ); + + } + + vec.crossVectors( tangents[ 0 ], normal ).normalize(); + + normals[ 0 ].crossVectors( tangents[ 0 ], vec ); + binormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] ); + + + // compute the slowly-varying normal and binormal vectors for each segment on the curve + + for ( let i = 1; i <= segments; i ++ ) { + + normals[ i ] = normals[ i - 1 ].clone(); + + binormals[ i ] = binormals[ i - 1 ].clone(); + + vec.crossVectors( tangents[ i - 1 ], tangents[ i ] ); + + if ( vec.length() > Number.EPSILON ) { + + vec.normalize(); + + const theta = Math.acos( clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors + + normals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) ); + + } + + binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); + + } + + // if the curve is closed, postprocess the vectors so the first and last normal vectors are the same + + if ( closed === true ) { + + let theta = Math.acos( clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) ); + theta /= segments; + + if ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) { + + theta = - theta; + + } + + for ( let i = 1; i <= segments; i ++ ) { + + // twist a little... + normals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) ); + binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); + + } + + } + + return { + tangents: tangents, + normals: normals, + binormals: binormals + }; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + copy( source ) { + + this.arcLengthDivisions = source.arcLengthDivisions; + + return this; + + } + + toJSON() { + + const data = { + metadata: { + version: 4.5, + type: 'Curve', + generator: 'Curve.toJSON' + } + }; + + data.arcLengthDivisions = this.arcLengthDivisions; + data.type = this.type; + + return data; + + } + + fromJSON( json ) { + + this.arcLengthDivisions = json.arcLengthDivisions; + + return this; + + } + +} + +class EllipseCurve extends Curve { + + constructor( aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0 ) { + + super(); + + this.type = 'EllipseCurve'; + + this.aX = aX; + this.aY = aY; + + this.xRadius = xRadius; + this.yRadius = yRadius; + + this.aStartAngle = aStartAngle; + this.aEndAngle = aEndAngle; + + this.aClockwise = aClockwise; + + this.aRotation = aRotation; + + } + + getPoint( t, optionalTarget ) { + + const point = optionalTarget || new Vector2(); + + const twoPi = Math.PI * 2; + let deltaAngle = this.aEndAngle - this.aStartAngle; + const samePoints = Math.abs( deltaAngle ) < Number.EPSILON; + + // ensures that deltaAngle is 0 .. 2 PI + while ( deltaAngle < 0 ) deltaAngle += twoPi; + while ( deltaAngle > twoPi ) deltaAngle -= twoPi; + + if ( deltaAngle < Number.EPSILON ) { + + if ( samePoints ) { + + deltaAngle = 0; + + } else { + + deltaAngle = twoPi; + + } + + } + + if ( this.aClockwise === true && ! samePoints ) { + + if ( deltaAngle === twoPi ) { + + deltaAngle = - twoPi; + + } else { + + deltaAngle = deltaAngle - twoPi; + + } + + } + + const angle = this.aStartAngle + t * deltaAngle; + let x = this.aX + this.xRadius * Math.cos( angle ); + let y = this.aY + this.yRadius * Math.sin( angle ); + + if ( this.aRotation !== 0 ) { + + const cos = Math.cos( this.aRotation ); + const sin = Math.sin( this.aRotation ); + + const tx = x - this.aX; + const ty = y - this.aY; + + // Rotate the point about the center of the ellipse. + x = tx * cos - ty * sin + this.aX; + y = tx * sin + ty * cos + this.aY; + + } + + return point.set( x, y ); + + } + + copy( source ) { + + super.copy( source ); + + this.aX = source.aX; + this.aY = source.aY; + + this.xRadius = source.xRadius; + this.yRadius = source.yRadius; + + this.aStartAngle = source.aStartAngle; + this.aEndAngle = source.aEndAngle; + + this.aClockwise = source.aClockwise; + + this.aRotation = source.aRotation; + + return this; + + } + + toJSON() { + + const data = super.toJSON(); + + data.aX = this.aX; + data.aY = this.aY; + + data.xRadius = this.xRadius; + data.yRadius = this.yRadius; + + data.aStartAngle = this.aStartAngle; + data.aEndAngle = this.aEndAngle; + + data.aClockwise = this.aClockwise; + + data.aRotation = this.aRotation; + + return data; + + } + + fromJSON( json ) { + + super.fromJSON( json ); + + this.aX = json.aX; + this.aY = json.aY; + + this.xRadius = json.xRadius; + this.yRadius = json.yRadius; + + this.aStartAngle = json.aStartAngle; + this.aEndAngle = json.aEndAngle; + + this.aClockwise = json.aClockwise; + + this.aRotation = json.aRotation; + + return this; + + } + +} + +EllipseCurve.prototype.isEllipseCurve = true; + +class ArcCurve extends EllipseCurve { + + constructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + super( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); + + this.type = 'ArcCurve'; + + } + +} + +ArcCurve.prototype.isArcCurve = true; + +/** + * Centripetal CatmullRom Curve - which is useful for avoiding + * cusps and self-intersections in non-uniform catmull rom curves. + * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf + * + * curve.type accepts centripetal(default), chordal and catmullrom + * curve.tension is used for catmullrom which defaults to 0.5 + */ + + +/* +Based on an optimized c++ solution in + - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/ + - http://ideone.com/NoEbVM + +This CubicPoly class could be used for reusing some variables and calculations, +but for three.js curve use, it could be possible inlined and flatten into a single function call +which can be placed in CurveUtils. +*/ + +function CubicPoly() { + + let c0 = 0, c1 = 0, c2 = 0, c3 = 0; + + /* + * Compute coefficients for a cubic polynomial + * p(s) = c0 + c1*s + c2*s^2 + c3*s^3 + * such that + * p(0) = x0, p(1) = x1 + * and + * p'(0) = t0, p'(1) = t1. + */ + function init( x0, x1, t0, t1 ) { + + c0 = x0; + c1 = t0; + c2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1; + c3 = 2 * x0 - 2 * x1 + t0 + t1; + + } + + return { + + initCatmullRom: function ( x0, x1, x2, x3, tension ) { + + init( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) ); + + }, + + initNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) { + + // compute tangents when parameterized in [t1,t2] + let t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1; + let t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2; + + // rescale tangents for parametrization in [0,1] + t1 *= dt1; + t2 *= dt1; + + init( x1, x2, t1, t2 ); + + }, + + calc: function ( t ) { + + const t2 = t * t; + const t3 = t2 * t; + return c0 + c1 * t + c2 * t2 + c3 * t3; + + } + + }; + +} + +// + +const tmp = new Vector3(); +const px = new CubicPoly(), py = new CubicPoly(), pz = new CubicPoly(); + +class CatmullRomCurve3 extends Curve { + + constructor( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) { + + super(); + + this.type = 'CatmullRomCurve3'; + + this.points = points; + this.closed = closed; + this.curveType = curveType; + this.tension = tension; + + } + + getPoint( t, optionalTarget = new Vector3() ) { + + const point = optionalTarget; + + const points = this.points; + const l = points.length; + + const p = ( l - ( this.closed ? 0 : 1 ) ) * t; + let intPoint = Math.floor( p ); + let weight = p - intPoint; + + if ( this.closed ) { + + intPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l; + + } else if ( weight === 0 && intPoint === l - 1 ) { + + intPoint = l - 2; + weight = 1; + + } + + let p0, p3; // 4 points (p1 & p2 defined below) + + if ( this.closed || intPoint > 0 ) { + + p0 = points[ ( intPoint - 1 ) % l ]; + + } else { + + // extrapolate first point + tmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] ); + p0 = tmp; + + } + + const p1 = points[ intPoint % l ]; + const p2 = points[ ( intPoint + 1 ) % l ]; + + if ( this.closed || intPoint + 2 < l ) { + + p3 = points[ ( intPoint + 2 ) % l ]; + + } else { + + // extrapolate last point + tmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] ); + p3 = tmp; + + } + + if ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) { + + // init Centripetal / Chordal Catmull-Rom + const pow = this.curveType === 'chordal' ? 0.5 : 0.25; + let dt0 = Math.pow( p0.distanceToSquared( p1 ), pow ); + let dt1 = Math.pow( p1.distanceToSquared( p2 ), pow ); + let dt2 = Math.pow( p2.distanceToSquared( p3 ), pow ); + + // safety check for repeated points + if ( dt1 < 1e-4 ) dt1 = 1.0; + if ( dt0 < 1e-4 ) dt0 = dt1; + if ( dt2 < 1e-4 ) dt2 = dt1; + + px.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 ); + py.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 ); + pz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 ); + + } else if ( this.curveType === 'catmullrom' ) { + + px.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension ); + py.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension ); + pz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension ); + + } + + point.set( + px.calc( weight ), + py.calc( weight ), + pz.calc( weight ) + ); + + return point; + + } + + copy( source ) { + + super.copy( source ); + + this.points = []; + + for ( let i = 0, l = source.points.length; i < l; i ++ ) { + + const point = source.points[ i ]; + + this.points.push( point.clone() ); + + } + + this.closed = source.closed; + this.curveType = source.curveType; + this.tension = source.tension; + + return this; + + } + + toJSON() { + + const data = super.toJSON(); + + data.points = []; + + for ( let i = 0, l = this.points.length; i < l; i ++ ) { + + const point = this.points[ i ]; + data.points.push( point.toArray() ); + + } + + data.closed = this.closed; + data.curveType = this.curveType; + data.tension = this.tension; + + return data; + + } + + fromJSON( json ) { + + super.fromJSON( json ); + + this.points = []; + + for ( let i = 0, l = json.points.length; i < l; i ++ ) { + + const point = json.points[ i ]; + this.points.push( new Vector3().fromArray( point ) ); + + } + + this.closed = json.closed; + this.curveType = json.curveType; + this.tension = json.tension; + + return this; + + } + +} + +CatmullRomCurve3.prototype.isCatmullRomCurve3 = true; + +/** + * Bezier Curves formulas obtained from + * http://en.wikipedia.org/wiki/Bézier_curve + */ + +function CatmullRom( t, p0, p1, p2, p3 ) { + + const v0 = ( p2 - p0 ) * 0.5; + const v1 = ( p3 - p1 ) * 0.5; + const t2 = t * t; + const t3 = t * t2; + return ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1; + +} + +// + +function QuadraticBezierP0( t, p ) { + + const k = 1 - t; + return k * k * p; + +} + +function QuadraticBezierP1( t, p ) { + + return 2 * ( 1 - t ) * t * p; + +} + +function QuadraticBezierP2( t, p ) { + + return t * t * p; + +} + +function QuadraticBezier( t, p0, p1, p2 ) { + + return QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) + + QuadraticBezierP2( t, p2 ); + +} + +// + +function CubicBezierP0( t, p ) { + + const k = 1 - t; + return k * k * k * p; + +} + +function CubicBezierP1( t, p ) { + + const k = 1 - t; + return 3 * k * k * t * p; + +} + +function CubicBezierP2( t, p ) { + + return 3 * ( 1 - t ) * t * t * p; + +} + +function CubicBezierP3( t, p ) { + + return t * t * t * p; + +} + +function CubicBezier( t, p0, p1, p2, p3 ) { + + return CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) + + CubicBezierP3( t, p3 ); + +} + +class CubicBezierCurve extends Curve { + + constructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) { + + super(); + + this.type = 'CubicBezierCurve'; + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + this.v3 = v3; + + } + + getPoint( t, optionalTarget = new Vector2() ) { + + const point = optionalTarget; + + const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; + + point.set( + CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), + CubicBezier( t, v0.y, v1.y, v2.y, v3.y ) + ); + + return point; + + } + + copy( source ) { + + super.copy( source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + this.v3.copy( source.v3 ); + + return this; + + } + + toJSON() { + + const data = super.toJSON(); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + data.v3 = this.v3.toArray(); + + return data; + + } + + fromJSON( json ) { + + super.fromJSON( json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + this.v3.fromArray( json.v3 ); + + return this; + + } + +} + +CubicBezierCurve.prototype.isCubicBezierCurve = true; + +class CubicBezierCurve3 extends Curve { + + constructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) { + + super(); + + this.type = 'CubicBezierCurve3'; + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + this.v3 = v3; + + } + + getPoint( t, optionalTarget = new Vector3() ) { + + const point = optionalTarget; + + const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; + + point.set( + CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), + CubicBezier( t, v0.y, v1.y, v2.y, v3.y ), + CubicBezier( t, v0.z, v1.z, v2.z, v3.z ) + ); + + return point; + + } + + copy( source ) { + + super.copy( source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + this.v3.copy( source.v3 ); + + return this; + + } + + toJSON() { + + const data = super.toJSON(); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + data.v3 = this.v3.toArray(); + + return data; + + } + + fromJSON( json ) { + + super.fromJSON( json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + this.v3.fromArray( json.v3 ); + + return this; + + } + +} + +CubicBezierCurve3.prototype.isCubicBezierCurve3 = true; + +class LineCurve extends Curve { + + constructor( v1 = new Vector2(), v2 = new Vector2() ) { + + super(); + + this.type = 'LineCurve'; + + this.v1 = v1; + this.v2 = v2; + + } + + getPoint( t, optionalTarget = new Vector2() ) { + + const point = optionalTarget; + + if ( t === 1 ) { + + point.copy( this.v2 ); + + } else { + + point.copy( this.v2 ).sub( this.v1 ); + point.multiplyScalar( t ).add( this.v1 ); + + } + + return point; + + } + + // Line curve is linear, so we can overwrite default getPointAt + getPointAt( u, optionalTarget ) { + + return this.getPoint( u, optionalTarget ); + + } + + getTangent( t, optionalTarget ) { + + const tangent = optionalTarget || new Vector2(); + + tangent.copy( this.v2 ).sub( this.v1 ).normalize(); + + return tangent; + + } + + copy( source ) { + + super.copy( source ); + + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + + } + + toJSON() { + + const data = super.toJSON(); + + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + + } + + fromJSON( json ) { + + super.fromJSON( json ); + + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + + } + +} + +LineCurve.prototype.isLineCurve = true; + +class LineCurve3 extends Curve { + + constructor( v1 = new Vector3(), v2 = new Vector3() ) { + + super(); + + this.type = 'LineCurve3'; + this.isLineCurve3 = true; + + this.v1 = v1; + this.v2 = v2; + + } + getPoint( t, optionalTarget = new Vector3() ) { + + const point = optionalTarget; + + if ( t === 1 ) { + + point.copy( this.v2 ); + + } else { + + point.copy( this.v2 ).sub( this.v1 ); + point.multiplyScalar( t ).add( this.v1 ); + + } + + return point; + + } + // Line curve is linear, so we can overwrite default getPointAt + getPointAt( u, optionalTarget ) { + + return this.getPoint( u, optionalTarget ); + + } + copy( source ) { + + super.copy( source ); + + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + + } + toJSON() { + + const data = super.toJSON(); + + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + + } + fromJSON( json ) { + + super.fromJSON( json ); + + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + + } + +} + +class QuadraticBezierCurve extends Curve { + + constructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) { + + super(); + + this.type = 'QuadraticBezierCurve'; + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + + } + + getPoint( t, optionalTarget = new Vector2() ) { + + const point = optionalTarget; + + const v0 = this.v0, v1 = this.v1, v2 = this.v2; + + point.set( + QuadraticBezier( t, v0.x, v1.x, v2.x ), + QuadraticBezier( t, v0.y, v1.y, v2.y ) + ); + + return point; + + } + + copy( source ) { + + super.copy( source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + + } + + toJSON() { + + const data = super.toJSON(); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + + } + + fromJSON( json ) { + + super.fromJSON( json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + + } + +} + +QuadraticBezierCurve.prototype.isQuadraticBezierCurve = true; + +class QuadraticBezierCurve3 extends Curve { + + constructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) { + + super(); + + this.type = 'QuadraticBezierCurve3'; + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + + } + + getPoint( t, optionalTarget = new Vector3() ) { + + const point = optionalTarget; + + const v0 = this.v0, v1 = this.v1, v2 = this.v2; + + point.set( + QuadraticBezier( t, v0.x, v1.x, v2.x ), + QuadraticBezier( t, v0.y, v1.y, v2.y ), + QuadraticBezier( t, v0.z, v1.z, v2.z ) + ); + + return point; + + } + + copy( source ) { + + super.copy( source ); + + this.v0.copy( source.v0 ); + this.v1.copy( source.v1 ); + this.v2.copy( source.v2 ); + + return this; + + } + + toJSON() { + + const data = super.toJSON(); + + data.v0 = this.v0.toArray(); + data.v1 = this.v1.toArray(); + data.v2 = this.v2.toArray(); + + return data; + + } + + fromJSON( json ) { + + super.fromJSON( json ); + + this.v0.fromArray( json.v0 ); + this.v1.fromArray( json.v1 ); + this.v2.fromArray( json.v2 ); + + return this; + + } + +} + +QuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true; + +class SplineCurve extends Curve { + + constructor( points = [] ) { + + super(); + + this.type = 'SplineCurve'; + + this.points = points; + + } + + getPoint( t, optionalTarget = new Vector2() ) { + + const point = optionalTarget; + + const points = this.points; + const p = ( points.length - 1 ) * t; + + const intPoint = Math.floor( p ); + const weight = p - intPoint; + + const p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ]; + const p1 = points[ intPoint ]; + const p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ]; + const p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ]; + + point.set( + CatmullRom( weight, p0.x, p1.x, p2.x, p3.x ), + CatmullRom( weight, p0.y, p1.y, p2.y, p3.y ) + ); + + return point; + + } + + copy( source ) { + + super.copy( source ); + + this.points = []; + + for ( let i = 0, l = source.points.length; i < l; i ++ ) { + + const point = source.points[ i ]; + + this.points.push( point.clone() ); + + } + + return this; + + } + + toJSON() { + + const data = super.toJSON(); + + data.points = []; + + for ( let i = 0, l = this.points.length; i < l; i ++ ) { + + const point = this.points[ i ]; + data.points.push( point.toArray() ); + + } + + return data; + + } + + fromJSON( json ) { + + super.fromJSON( json ); + + this.points = []; + + for ( let i = 0, l = json.points.length; i < l; i ++ ) { + + const point = json.points[ i ]; + this.points.push( new Vector2().fromArray( point ) ); + + } + + return this; + + } + +} + +SplineCurve.prototype.isSplineCurve = true; + +var Curves = /*#__PURE__*/Object.freeze({ + __proto__: null, + ArcCurve: ArcCurve, + CatmullRomCurve3: CatmullRomCurve3, + CubicBezierCurve: CubicBezierCurve, + CubicBezierCurve3: CubicBezierCurve3, + EllipseCurve: EllipseCurve, + LineCurve: LineCurve, + LineCurve3: LineCurve3, + QuadraticBezierCurve: QuadraticBezierCurve, + QuadraticBezierCurve3: QuadraticBezierCurve3, + SplineCurve: SplineCurve +}); + +/** + * Port from https://github.com/mapbox/earcut (v2.2.2) + */ + +const Earcut = { + + triangulate: function ( data, holeIndices, dim = 2 ) { + + const hasHoles = holeIndices && holeIndices.length; + const outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length; + let outerNode = linkedList( data, 0, outerLen, dim, true ); + const triangles = []; + + if ( ! outerNode || outerNode.next === outerNode.prev ) return triangles; + + let minX, minY, maxX, maxY, x, y, invSize; + + if ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim ); + + // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox + if ( data.length > 80 * dim ) { + + minX = maxX = data[ 0 ]; + minY = maxY = data[ 1 ]; + + for ( let i = dim; i < outerLen; i += dim ) { + + x = data[ i ]; + y = data[ i + 1 ]; + if ( x < minX ) minX = x; + if ( y < minY ) minY = y; + if ( x > maxX ) maxX = x; + if ( y > maxY ) maxY = y; + + } + + // minX, minY and invSize are later used to transform coords into integers for z-order calculation + invSize = Math.max( maxX - minX, maxY - minY ); + invSize = invSize !== 0 ? 1 / invSize : 0; + + } + + earcutLinked( outerNode, triangles, dim, minX, minY, invSize ); + + return triangles; + + } + +}; + +// create a circular doubly linked list from polygon points in the specified winding order +function linkedList( data, start, end, dim, clockwise ) { + + let i, last; + + if ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) { + + for ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last ); + + } else { + + for ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last ); + + } + + if ( last && equals( last, last.next ) ) { + + removeNode( last ); + last = last.next; + + } + + return last; + +} + +// eliminate colinear or duplicate points +function filterPoints( start, end ) { + + if ( ! start ) return start; + if ( ! end ) end = start; + + let p = start, + again; + do { + + again = false; + + if ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) { + + removeNode( p ); + p = end = p.prev; + if ( p === p.next ) break; + again = true; + + } else { + + p = p.next; + + } + + } while ( again || p !== end ); + + return end; + +} + +// main ear slicing loop which triangulates a polygon (given as a linked list) +function earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) { + + if ( ! ear ) return; + + // interlink polygon nodes in z-order + if ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize ); + + let stop = ear, + prev, next; + + // iterate through ears, slicing them one by one + while ( ear.prev !== ear.next ) { + + prev = ear.prev; + next = ear.next; + + if ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) { + + // cut off the triangle + triangles.push( prev.i / dim ); + triangles.push( ear.i / dim ); + triangles.push( next.i / dim ); + + removeNode( ear ); + + // skipping the next vertex leads to less sliver triangles + ear = next.next; + stop = next.next; + + continue; + + } + + ear = next; + + // if we looped through the whole remaining polygon and can't find any more ears + if ( ear === stop ) { + + // try filtering points and slicing again + if ( ! pass ) { + + earcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 ); + + // if this didn't work, try curing all small self-intersections locally + + } else if ( pass === 1 ) { + + ear = cureLocalIntersections( filterPoints( ear ), triangles, dim ); + earcutLinked( ear, triangles, dim, minX, minY, invSize, 2 ); + + // as a last resort, try splitting the remaining polygon into two + + } else if ( pass === 2 ) { + + splitEarcut( ear, triangles, dim, minX, minY, invSize ); + + } + + break; + + } + + } + +} + +// check whether a polygon node forms a valid ear with adjacent nodes +function isEar( ear ) { + + const a = ear.prev, + b = ear, + c = ear.next; + + if ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear + + // now make sure we don't have other points inside the potential ear + let p = ear.next.next; + + while ( p !== ear.prev ) { + + if ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && + area( p.prev, p, p.next ) >= 0 ) return false; + p = p.next; + + } + + return true; + +} + +function isEarHashed( ear, minX, minY, invSize ) { + + const a = ear.prev, + b = ear, + c = ear.next; + + if ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear + + // triangle bbox; min & max are calculated like this for speed + const minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ), + minTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ), + maxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ), + maxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y ); + + // z-order range for the current triangle bbox; + const minZ = zOrder( minTX, minTY, minX, minY, invSize ), + maxZ = zOrder( maxTX, maxTY, minX, minY, invSize ); + + let p = ear.prevZ, + n = ear.nextZ; + + // look for points inside the triangle in both directions + while ( p && p.z >= minZ && n && n.z <= maxZ ) { + + if ( p !== ear.prev && p !== ear.next && + pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && + area( p.prev, p, p.next ) >= 0 ) return false; + p = p.prevZ; + + if ( n !== ear.prev && n !== ear.next && + pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) && + area( n.prev, n, n.next ) >= 0 ) return false; + n = n.nextZ; + + } + + // look for remaining points in decreasing z-order + while ( p && p.z >= minZ ) { + + if ( p !== ear.prev && p !== ear.next && + pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && + area( p.prev, p, p.next ) >= 0 ) return false; + p = p.prevZ; + + } + + // look for remaining points in increasing z-order + while ( n && n.z <= maxZ ) { + + if ( n !== ear.prev && n !== ear.next && + pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) && + area( n.prev, n, n.next ) >= 0 ) return false; + n = n.nextZ; + + } + + return true; + +} + +// go through all polygon nodes and cure small local self-intersections +function cureLocalIntersections( start, triangles, dim ) { + + let p = start; + do { + + const a = p.prev, + b = p.next.next; + + if ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) { + + triangles.push( a.i / dim ); + triangles.push( p.i / dim ); + triangles.push( b.i / dim ); + + // remove two nodes involved + removeNode( p ); + removeNode( p.next ); + + p = start = b; + + } + + p = p.next; + + } while ( p !== start ); + + return filterPoints( p ); + +} + +// try splitting polygon into two and triangulate them independently +function splitEarcut( start, triangles, dim, minX, minY, invSize ) { + + // look for a valid diagonal that divides the polygon into two + let a = start; + do { + + let b = a.next.next; + while ( b !== a.prev ) { + + if ( a.i !== b.i && isValidDiagonal( a, b ) ) { + + // split the polygon in two by the diagonal + let c = splitPolygon( a, b ); + + // filter colinear points around the cuts + a = filterPoints( a, a.next ); + c = filterPoints( c, c.next ); + + // run earcut on each half + earcutLinked( a, triangles, dim, minX, minY, invSize ); + earcutLinked( c, triangles, dim, minX, minY, invSize ); + return; + + } + + b = b.next; + + } + + a = a.next; + + } while ( a !== start ); + +} + +// link every hole into the outer loop, producing a single-ring polygon without holes +function eliminateHoles( data, holeIndices, outerNode, dim ) { + + const queue = []; + let i, len, start, end, list; + + for ( i = 0, len = holeIndices.length; i < len; i ++ ) { + + start = holeIndices[ i ] * dim; + end = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length; + list = linkedList( data, start, end, dim, false ); + if ( list === list.next ) list.steiner = true; + queue.push( getLeftmost( list ) ); + + } + + queue.sort( compareX ); + + // process holes from left to right + for ( i = 0; i < queue.length; i ++ ) { + + eliminateHole( queue[ i ], outerNode ); + outerNode = filterPoints( outerNode, outerNode.next ); + + } + + return outerNode; + +} + +function compareX( a, b ) { + + return a.x - b.x; + +} + +// find a bridge between vertices that connects hole with an outer ring and and link it +function eliminateHole( hole, outerNode ) { + + outerNode = findHoleBridge( hole, outerNode ); + if ( outerNode ) { + + const b = splitPolygon( outerNode, hole ); + + // filter collinear points around the cuts + filterPoints( outerNode, outerNode.next ); + filterPoints( b, b.next ); + + } + +} + +// David Eberly's algorithm for finding a bridge between hole and outer polygon +function findHoleBridge( hole, outerNode ) { + + let p = outerNode; + const hx = hole.x; + const hy = hole.y; + let qx = - Infinity, m; + + // find a segment intersected by a ray from the hole's leftmost point to the left; + // segment's endpoint with lesser x will be potential connection point + do { + + if ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) { + + const x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y ); + if ( x <= hx && x > qx ) { + + qx = x; + if ( x === hx ) { + + if ( hy === p.y ) return p; + if ( hy === p.next.y ) return p.next; + + } + + m = p.x < p.next.x ? p : p.next; + + } + + } + + p = p.next; + + } while ( p !== outerNode ); + + if ( ! m ) return null; + + if ( hx === qx ) return m; // hole touches outer segment; pick leftmost endpoint + + // look for points inside the triangle of hole point, segment intersection and endpoint; + // if there are no points found, we have a valid connection; + // otherwise choose the point of the minimum angle with the ray as connection point + + const stop = m, + mx = m.x, + my = m.y; + let tanMin = Infinity, tan; + + p = m; + + do { + + if ( hx >= p.x && p.x >= mx && hx !== p.x && + pointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) { + + tan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential + + if ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) { + + m = p; + tanMin = tan; + + } + + } + + p = p.next; + + } while ( p !== stop ); + + return m; + +} + +// whether sector in vertex m contains sector in vertex p in the same coordinates +function sectorContainsSector( m, p ) { + + return area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0; + +} + +// interlink polygon nodes in z-order +function indexCurve( start, minX, minY, invSize ) { + + let p = start; + do { + + if ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize ); + p.prevZ = p.prev; + p.nextZ = p.next; + p = p.next; + + } while ( p !== start ); + + p.prevZ.nextZ = null; + p.prevZ = null; + + sortLinked( p ); + +} + +// Simon Tatham's linked list merge sort algorithm +// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html +function sortLinked( list ) { + + let i, p, q, e, tail, numMerges, pSize, qSize, + inSize = 1; + + do { + + p = list; + list = null; + tail = null; + numMerges = 0; + + while ( p ) { + + numMerges ++; + q = p; + pSize = 0; + for ( i = 0; i < inSize; i ++ ) { + + pSize ++; + q = q.nextZ; + if ( ! q ) break; + + } + + qSize = inSize; + + while ( pSize > 0 || ( qSize > 0 && q ) ) { + + if ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) { + + e = p; + p = p.nextZ; + pSize --; + + } else { + + e = q; + q = q.nextZ; + qSize --; + + } + + if ( tail ) tail.nextZ = e; + else list = e; + + e.prevZ = tail; + tail = e; + + } + + p = q; + + } + + tail.nextZ = null; + inSize *= 2; + + } while ( numMerges > 1 ); + + return list; + +} + +// z-order of a point given coords and inverse of the longer side of data bbox +function zOrder( x, y, minX, minY, invSize ) { + + // coords are transformed into non-negative 15-bit integer range + x = 32767 * ( x - minX ) * invSize; + y = 32767 * ( y - minY ) * invSize; + + x = ( x | ( x << 8 ) ) & 0x00FF00FF; + x = ( x | ( x << 4 ) ) & 0x0F0F0F0F; + x = ( x | ( x << 2 ) ) & 0x33333333; + x = ( x | ( x << 1 ) ) & 0x55555555; + + y = ( y | ( y << 8 ) ) & 0x00FF00FF; + y = ( y | ( y << 4 ) ) & 0x0F0F0F0F; + y = ( y | ( y << 2 ) ) & 0x33333333; + y = ( y | ( y << 1 ) ) & 0x55555555; + + return x | ( y << 1 ); + +} + +// find the leftmost node of a polygon ring +function getLeftmost( start ) { + + let p = start, + leftmost = start; + do { + + if ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p; + p = p.next; + + } while ( p !== start ); + + return leftmost; + +} + +// check if a point lies within a convex triangle +function pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) { + + return ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 && + ( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 && + ( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0; + +} + +// check if a diagonal between two polygon nodes is valid (lies in polygon interior) +function isValidDiagonal( a, b ) { + + return a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges + ( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible + ( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors + equals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case + +} + +// signed area of a triangle +function area( p, q, r ) { + + return ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y ); + +} + +// check if two points are equal +function equals( p1, p2 ) { + + return p1.x === p2.x && p1.y === p2.y; + +} + +// check if two segments intersect +function intersects( p1, q1, p2, q2 ) { + + const o1 = sign( area( p1, q1, p2 ) ); + const o2 = sign( area( p1, q1, q2 ) ); + const o3 = sign( area( p2, q2, p1 ) ); + const o4 = sign( area( p2, q2, q1 ) ); + + if ( o1 !== o2 && o3 !== o4 ) return true; // general case + + if ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1 + if ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1 + if ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2 + if ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2 + + return false; + +} + +// for collinear points p, q, r, check if point q lies on segment pr +function onSegment( p, q, r ) { + + return q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y ); + +} + +function sign( num ) { + + return num > 0 ? 1 : num < 0 ? - 1 : 0; + +} + +// check if a polygon diagonal intersects any polygon segments +function intersectsPolygon( a, b ) { + + let p = a; + do { + + if ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && + intersects( p, p.next, a, b ) ) return true; + p = p.next; + + } while ( p !== a ); + + return false; + +} + +// check if a polygon diagonal is locally inside the polygon +function locallyInside( a, b ) { + + return area( a.prev, a, a.next ) < 0 ? + area( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 : + area( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0; + +} + +// check if the middle point of a polygon diagonal is inside the polygon +function middleInside( a, b ) { + + let p = a, + inside = false; + const px = ( a.x + b.x ) / 2, + py = ( a.y + b.y ) / 2; + do { + + if ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y && + ( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) ) + inside = ! inside; + p = p.next; + + } while ( p !== a ); + + return inside; + +} + +// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two; +// if one belongs to the outer ring and another to a hole, it merges it into a single ring +function splitPolygon( a, b ) { + + const a2 = new Node( a.i, a.x, a.y ), + b2 = new Node( b.i, b.x, b.y ), + an = a.next, + bp = b.prev; + + a.next = b; + b.prev = a; + + a2.next = an; + an.prev = a2; + + b2.next = a2; + a2.prev = b2; + + bp.next = b2; + b2.prev = bp; + + return b2; + +} + +// create a node and optionally link it with previous one (in a circular doubly linked list) +function insertNode( i, x, y, last ) { + + const p = new Node( i, x, y ); + + if ( ! last ) { + + p.prev = p; + p.next = p; + + } else { + + p.next = last.next; + p.prev = last; + last.next.prev = p; + last.next = p; + + } + + return p; + +} + +function removeNode( p ) { + + p.next.prev = p.prev; + p.prev.next = p.next; + + if ( p.prevZ ) p.prevZ.nextZ = p.nextZ; + if ( p.nextZ ) p.nextZ.prevZ = p.prevZ; + +} + +function Node( i, x, y ) { + + // vertex index in coordinates array + this.i = i; + + // vertex coordinates + this.x = x; + this.y = y; + + // previous and next vertex nodes in a polygon ring + this.prev = null; + this.next = null; + + // z-order curve value + this.z = null; + + // previous and next nodes in z-order + this.prevZ = null; + this.nextZ = null; + + // indicates whether this is a steiner point + this.steiner = false; + +} + +function signedArea( data, start, end, dim ) { + + let sum = 0; + for ( let i = start, j = end - dim; i < end; i += dim ) { + + sum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] ); + j = i; + + } + + return sum; + +} + +class ShapeUtils { + + // calculate area of the contour polygon + + static area( contour ) { + + const n = contour.length; + let a = 0.0; + + for ( let p = n - 1, q = 0; q < n; p = q ++ ) { + + a += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y; + + } + + return a * 0.5; + + } + + static isClockWise( pts ) { + + return ShapeUtils.area( pts ) < 0; + + } + + static triangulateShape( contour, holes ) { + + const vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ] + const holeIndices = []; // array of hole indices + const faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ] + + removeDupEndPts( contour ); + addContour( vertices, contour ); + + // + + let holeIndex = contour.length; + + holes.forEach( removeDupEndPts ); + + for ( let i = 0; i < holes.length; i ++ ) { + + holeIndices.push( holeIndex ); + holeIndex += holes[ i ].length; + addContour( vertices, holes[ i ] ); + + } + + // + + const triangles = Earcut.triangulate( vertices, holeIndices ); + + // + + for ( let i = 0; i < triangles.length; i += 3 ) { + + faces.push( triangles.slice( i, i + 3 ) ); + + } + + return faces; + + } + +} + +function removeDupEndPts( points ) { + + const l = points.length; + + if ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) { + + points.pop(); + + } + +} + +function addContour( vertices, contour ) { + + for ( let i = 0; i < contour.length; i ++ ) { + + vertices.push( contour[ i ].x ); + vertices.push( contour[ i ].y ); + + } + +} + +/** + * Creates extruded geometry from a path shape. + * + * parameters = { + * + * curveSegments: , // number of points on the curves + * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too + * depth: , // Depth to extrude the shape + * + * bevelEnabled: , // turn on bevel + * bevelThickness: , // how deep into the original shape bevel goes + * bevelSize: , // how far from shape outline (including bevelOffset) is bevel + * bevelOffset: , // how far from shape outline does bevel start + * bevelSegments: , // number of bevel layers + * + * extrudePath: // curve to extrude shape along + * + * UVGenerator: // object that provides UV generator functions + * + * } + */ + +class ExtrudeGeometry extends BufferGeometry { + + constructor( shapes, options ) { + + super(); + + this.type = 'ExtrudeGeometry'; + + this.parameters = { + shapes: shapes, + options: options + }; + + shapes = Array.isArray( shapes ) ? shapes : [ shapes ]; + + const scope = this; + + const verticesArray = []; + const uvArray = []; + + for ( let i = 0, l = shapes.length; i < l; i ++ ) { + + const shape = shapes[ i ]; + addShape( shape ); + + } + + // build geometry + + this.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) ); + + this.computeVertexNormals(); + + // functions + + function addShape( shape ) { + + const placeholder = []; + + // options + + const curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12; + const steps = options.steps !== undefined ? options.steps : 1; + let depth = options.depth !== undefined ? options.depth : 100; + + let bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; + let bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6; + let bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2; + let bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0; + let bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3; + + const extrudePath = options.extrudePath; + + const uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator; + + // deprecated options + + if ( options.amount !== undefined ) { + + console.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' ); + depth = options.amount; + + } + + // + + let extrudePts, extrudeByPath = false; + let splineTube, binormal, normal, position2; + + if ( extrudePath ) { + + extrudePts = extrudePath.getSpacedPoints( steps ); + + extrudeByPath = true; + bevelEnabled = false; // bevels not supported for path extrusion + + // SETUP TNB variables + + // TODO1 - have a .isClosed in spline? + + splineTube = extrudePath.computeFrenetFrames( steps, false ); + + // console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length); + + binormal = new Vector3(); + normal = new Vector3(); + position2 = new Vector3(); + + } + + // Safeguards if bevels are not enabled + + if ( ! bevelEnabled ) { + + bevelSegments = 0; + bevelThickness = 0; + bevelSize = 0; + bevelOffset = 0; + + } + + // Variables initialization + + const shapePoints = shape.extractPoints( curveSegments ); + + let vertices = shapePoints.shape; + const holes = shapePoints.holes; + + const reverse = ! ShapeUtils.isClockWise( vertices ); + + if ( reverse ) { + + vertices = vertices.reverse(); + + // Maybe we should also check if holes are in the opposite direction, just to be safe ... + + for ( let h = 0, hl = holes.length; h < hl; h ++ ) { + + const ahole = holes[ h ]; + + if ( ShapeUtils.isClockWise( ahole ) ) { + + holes[ h ] = ahole.reverse(); + + } + + } + + } + + + const faces = ShapeUtils.triangulateShape( vertices, holes ); + + /* Vertices */ + + const contour = vertices; // vertices has all points but contour has only points of circumference + + for ( let h = 0, hl = holes.length; h < hl; h ++ ) { + + const ahole = holes[ h ]; + + vertices = vertices.concat( ahole ); + + } + + + function scalePt2( pt, vec, size ) { + + if ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' ); + + return vec.clone().multiplyScalar( size ).add( pt ); + + } + + const vlen = vertices.length, flen = faces.length; + + + // Find directions for point movement + + + function getBevelVec( inPt, inPrev, inNext ) { + + // computes for inPt the corresponding point inPt' on a new contour + // shifted by 1 unit (length of normalized vector) to the left + // if we walk along contour clockwise, this new contour is outside the old one + // + // inPt' is the intersection of the two lines parallel to the two + // adjacent edges of inPt at a distance of 1 unit on the left side. + + let v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt + + // good reading for geometry algorithms (here: line-line intersection) + // http://geomalgorithms.com/a05-_intersect-1.html + + const v_prev_x = inPt.x - inPrev.x, + v_prev_y = inPt.y - inPrev.y; + const v_next_x = inNext.x - inPt.x, + v_next_y = inNext.y - inPt.y; + + const v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y ); + + // check for collinear edges + const collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x ); + + if ( Math.abs( collinear0 ) > Number.EPSILON ) { + + // not collinear + + // length of vectors for normalizing + + const v_prev_len = Math.sqrt( v_prev_lensq ); + const v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y ); + + // shift adjacent points by unit vectors to the left + + const ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len ); + const ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len ); + + const ptNextShift_x = ( inNext.x - v_next_y / v_next_len ); + const ptNextShift_y = ( inNext.y + v_next_x / v_next_len ); + + // scaling factor for v_prev to intersection point + + const sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y - + ( ptNextShift_y - ptPrevShift_y ) * v_next_x ) / + ( v_prev_x * v_next_y - v_prev_y * v_next_x ); + + // vector from inPt to intersection point + + v_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x ); + v_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y ); + + // Don't normalize!, otherwise sharp corners become ugly + // but prevent crazy spikes + const v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y ); + if ( v_trans_lensq <= 2 ) { + + return new Vector2( v_trans_x, v_trans_y ); + + } else { + + shrink_by = Math.sqrt( v_trans_lensq / 2 ); + + } + + } else { + + // handle special case of collinear edges + + let direction_eq = false; // assumes: opposite + + if ( v_prev_x > Number.EPSILON ) { + + if ( v_next_x > Number.EPSILON ) { + + direction_eq = true; + + } + + } else { + + if ( v_prev_x < - Number.EPSILON ) { + + if ( v_next_x < - Number.EPSILON ) { + + direction_eq = true; + + } + + } else { + + if ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) { + + direction_eq = true; + + } + + } + + } + + if ( direction_eq ) { + + // console.log("Warning: lines are a straight sequence"); + v_trans_x = - v_prev_y; + v_trans_y = v_prev_x; + shrink_by = Math.sqrt( v_prev_lensq ); + + } else { + + // console.log("Warning: lines are a straight spike"); + v_trans_x = v_prev_x; + v_trans_y = v_prev_y; + shrink_by = Math.sqrt( v_prev_lensq / 2 ); + + } + + } + + return new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by ); + + } + + + const contourMovements = []; + + for ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { + + if ( j === il ) j = 0; + if ( k === il ) k = 0; + + // (j)---(i)---(k) + // console.log('i,j,k', i, j , k) + + contourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] ); + + } + + const holesMovements = []; + let oneHoleMovements, verticesMovements = contourMovements.concat(); + + for ( let h = 0, hl = holes.length; h < hl; h ++ ) { + + const ahole = holes[ h ]; + + oneHoleMovements = []; + + for ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { + + if ( j === il ) j = 0; + if ( k === il ) k = 0; + + // (j)---(i)---(k) + oneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] ); + + } + + holesMovements.push( oneHoleMovements ); + verticesMovements = verticesMovements.concat( oneHoleMovements ); + + } + + + // Loop bevelSegments, 1 for the front, 1 for the back + + for ( let b = 0; b < bevelSegments; b ++ ) { + + //for ( b = bevelSegments; b > 0; b -- ) { + + const t = b / bevelSegments; + const z = bevelThickness * Math.cos( t * Math.PI / 2 ); + const bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset; + + // contract shape + + for ( let i = 0, il = contour.length; i < il; i ++ ) { + + const vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); + + v( vert.x, vert.y, - z ); + + } + + // expand holes + + for ( let h = 0, hl = holes.length; h < hl; h ++ ) { + + const ahole = holes[ h ]; + oneHoleMovements = holesMovements[ h ]; + + for ( let i = 0, il = ahole.length; i < il; i ++ ) { + + const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); + + v( vert.x, vert.y, - z ); + + } + + } + + } + + const bs = bevelSize + bevelOffset; + + // Back facing vertices + + for ( let i = 0; i < vlen; i ++ ) { + + const vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; + + if ( ! extrudeByPath ) { + + v( vert.x, vert.y, 0 ); + + } else { + + // v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x ); + + normal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x ); + binormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y ); + + position2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal ); + + v( position2.x, position2.y, position2.z ); + + } + + } + + // Add stepped vertices... + // Including front facing vertices + + for ( let s = 1; s <= steps; s ++ ) { + + for ( let i = 0; i < vlen; i ++ ) { + + const vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; + + if ( ! extrudeByPath ) { + + v( vert.x, vert.y, depth / steps * s ); + + } else { + + // v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x ); + + normal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x ); + binormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y ); + + position2.copy( extrudePts[ s ] ).add( normal ).add( binormal ); + + v( position2.x, position2.y, position2.z ); + + } + + } + + } + + + // Add bevel segments planes + + //for ( b = 1; b <= bevelSegments; b ++ ) { + for ( let b = bevelSegments - 1; b >= 0; b -- ) { + + const t = b / bevelSegments; + const z = bevelThickness * Math.cos( t * Math.PI / 2 ); + const bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset; + + // contract shape + + for ( let i = 0, il = contour.length; i < il; i ++ ) { + + const vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); + v( vert.x, vert.y, depth + z ); + + } + + // expand holes + + for ( let h = 0, hl = holes.length; h < hl; h ++ ) { + + const ahole = holes[ h ]; + oneHoleMovements = holesMovements[ h ]; + + for ( let i = 0, il = ahole.length; i < il; i ++ ) { + + const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); + + if ( ! extrudeByPath ) { + + v( vert.x, vert.y, depth + z ); + + } else { + + v( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z ); + + } + + } + + } + + } + + /* Faces */ + + // Top and bottom faces + + buildLidFaces(); + + // Sides faces + + buildSideFaces(); + + + ///// Internal functions + + function buildLidFaces() { + + const start = verticesArray.length / 3; + + if ( bevelEnabled ) { + + let layer = 0; // steps + 1 + let offset = vlen * layer; + + // Bottom faces + + for ( let i = 0; i < flen; i ++ ) { + + const face = faces[ i ]; + f3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset ); + + } + + layer = steps + bevelSegments * 2; + offset = vlen * layer; + + // Top faces + + for ( let i = 0; i < flen; i ++ ) { + + const face = faces[ i ]; + f3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset ); + + } + + } else { + + // Bottom faces + + for ( let i = 0; i < flen; i ++ ) { + + const face = faces[ i ]; + f3( face[ 2 ], face[ 1 ], face[ 0 ] ); + + } + + // Top faces + + for ( let i = 0; i < flen; i ++ ) { + + const face = faces[ i ]; + f3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps ); + + } + + } + + scope.addGroup( start, verticesArray.length / 3 - start, 0 ); + + } + + // Create faces for the z-sides of the shape + + function buildSideFaces() { + + const start = verticesArray.length / 3; + let layeroffset = 0; + sidewalls( contour, layeroffset ); + layeroffset += contour.length; + + for ( let h = 0, hl = holes.length; h < hl; h ++ ) { + + const ahole = holes[ h ]; + sidewalls( ahole, layeroffset ); + + //, true + layeroffset += ahole.length; + + } + + + scope.addGroup( start, verticesArray.length / 3 - start, 1 ); + + + } + + function sidewalls( contour, layeroffset ) { + + let i = contour.length; + + while ( -- i >= 0 ) { + + const j = i; + let k = i - 1; + if ( k < 0 ) k = contour.length - 1; + + //console.log('b', i,j, i-1, k,vertices.length); + + for ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) { + + const slen1 = vlen * s; + const slen2 = vlen * ( s + 1 ); + + const a = layeroffset + j + slen1, + b = layeroffset + k + slen1, + c = layeroffset + k + slen2, + d = layeroffset + j + slen2; + + f4( a, b, c, d ); + + } + + } + + } + + function v( x, y, z ) { + + placeholder.push( x ); + placeholder.push( y ); + placeholder.push( z ); + + } + + + function f3( a, b, c ) { + + addVertex( a ); + addVertex( b ); + addVertex( c ); + + const nextIndex = verticesArray.length / 3; + const uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); + + addUV( uvs[ 0 ] ); + addUV( uvs[ 1 ] ); + addUV( uvs[ 2 ] ); + + } + + function f4( a, b, c, d ) { + + addVertex( a ); + addVertex( b ); + addVertex( d ); + + addVertex( b ); + addVertex( c ); + addVertex( d ); + + + const nextIndex = verticesArray.length / 3; + const uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); + + addUV( uvs[ 0 ] ); + addUV( uvs[ 1 ] ); + addUV( uvs[ 3 ] ); + + addUV( uvs[ 1 ] ); + addUV( uvs[ 2 ] ); + addUV( uvs[ 3 ] ); + + } + + function addVertex( index ) { + + verticesArray.push( placeholder[ index * 3 + 0 ] ); + verticesArray.push( placeholder[ index * 3 + 1 ] ); + verticesArray.push( placeholder[ index * 3 + 2 ] ); + + } + + + function addUV( vector2 ) { + + uvArray.push( vector2.x ); + uvArray.push( vector2.y ); + + } + + } + + } + + toJSON() { + + const data = super.toJSON(); + + const shapes = this.parameters.shapes; + const options = this.parameters.options; + + return toJSON$1( shapes, options, data ); + + } + + static fromJSON( data, shapes ) { + + const geometryShapes = []; + + for ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) { + + const shape = shapes[ data.shapes[ j ] ]; + + geometryShapes.push( shape ); + + } + + const extrudePath = data.options.extrudePath; + + if ( extrudePath !== undefined ) { + + data.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath ); + + } + + return new ExtrudeGeometry( geometryShapes, data.options ); + + } + +} + +const WorldUVGenerator = { + + generateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) { + + const a_x = vertices[ indexA * 3 ]; + const a_y = vertices[ indexA * 3 + 1 ]; + const b_x = vertices[ indexB * 3 ]; + const b_y = vertices[ indexB * 3 + 1 ]; + const c_x = vertices[ indexC * 3 ]; + const c_y = vertices[ indexC * 3 + 1 ]; + + return [ + new Vector2( a_x, a_y ), + new Vector2( b_x, b_y ), + new Vector2( c_x, c_y ) + ]; + + }, + + generateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) { + + const a_x = vertices[ indexA * 3 ]; + const a_y = vertices[ indexA * 3 + 1 ]; + const a_z = vertices[ indexA * 3 + 2 ]; + const b_x = vertices[ indexB * 3 ]; + const b_y = vertices[ indexB * 3 + 1 ]; + const b_z = vertices[ indexB * 3 + 2 ]; + const c_x = vertices[ indexC * 3 ]; + const c_y = vertices[ indexC * 3 + 1 ]; + const c_z = vertices[ indexC * 3 + 2 ]; + const d_x = vertices[ indexD * 3 ]; + const d_y = vertices[ indexD * 3 + 1 ]; + const d_z = vertices[ indexD * 3 + 2 ]; + + if ( Math.abs( a_y - b_y ) < Math.abs( a_x - b_x ) ) { + + return [ + new Vector2( a_x, 1 - a_z ), + new Vector2( b_x, 1 - b_z ), + new Vector2( c_x, 1 - c_z ), + new Vector2( d_x, 1 - d_z ) + ]; + + } else { + + return [ + new Vector2( a_y, 1 - a_z ), + new Vector2( b_y, 1 - b_z ), + new Vector2( c_y, 1 - c_z ), + new Vector2( d_y, 1 - d_z ) + ]; + + } + + } + +}; + +function toJSON$1( shapes, options, data ) { + + data.shapes = []; + + if ( Array.isArray( shapes ) ) { + + for ( let i = 0, l = shapes.length; i < l; i ++ ) { + + const shape = shapes[ i ]; + + data.shapes.push( shape.uuid ); + + } + + } else { + + data.shapes.push( shapes.uuid ); + + } + + if ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON(); + + return data; + +} + +class IcosahedronGeometry extends PolyhedronGeometry { + + constructor( radius = 1, detail = 0 ) { + + const t = ( 1 + Math.sqrt( 5 ) ) / 2; + + const vertices = [ + - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, 0, + 0, - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, + t, 0, - 1, t, 0, 1, - t, 0, - 1, - t, 0, 1 + ]; + + const indices = [ + 0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, + 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8, + 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, + 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1 + ]; + + super( vertices, indices, radius, detail ); + + this.type = 'IcosahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + } + + static fromJSON( data ) { + + return new IcosahedronGeometry( data.radius, data.detail ); + + } + +} + +class LatheGeometry extends BufferGeometry { + + constructor( points, segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) { + + super(); + + this.type = 'LatheGeometry'; + + this.parameters = { + points: points, + segments: segments, + phiStart: phiStart, + phiLength: phiLength + }; + + segments = Math.floor( segments ); + + // clamp phiLength so it's in range of [ 0, 2PI ] + + phiLength = clamp( phiLength, 0, Math.PI * 2 ); + + // buffers + + const indices = []; + const vertices = []; + const uvs = []; + + // helper variables + + const inverseSegments = 1.0 / segments; + const vertex = new Vector3(); + const uv = new Vector2(); + + // generate vertices and uvs + + for ( let i = 0; i <= segments; i ++ ) { + + const phi = phiStart + i * inverseSegments * phiLength; + + const sin = Math.sin( phi ); + const cos = Math.cos( phi ); + + for ( let j = 0; j <= ( points.length - 1 ); j ++ ) { + + // vertex + + vertex.x = points[ j ].x * sin; + vertex.y = points[ j ].y; + vertex.z = points[ j ].x * cos; + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // uv + + uv.x = i / segments; + uv.y = j / ( points.length - 1 ); + + uvs.push( uv.x, uv.y ); + + + } + + } + + // indices + + for ( let i = 0; i < segments; i ++ ) { + + for ( let j = 0; j < ( points.length - 1 ); j ++ ) { + + const base = j + i * points.length; + + const a = base; + const b = base + points.length; + const c = base + points.length + 1; + const d = base + 1; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + // generate normals + + this.computeVertexNormals(); + + // if the geometry is closed, we need to average the normals along the seam. + // because the corresponding vertices are identical (but still have different UVs). + + if ( phiLength === Math.PI * 2 ) { + + const normals = this.attributes.normal.array; + const n1 = new Vector3(); + const n2 = new Vector3(); + const n = new Vector3(); + + // this is the buffer offset for the last line of vertices + + const base = segments * points.length * 3; + + for ( let i = 0, j = 0; i < points.length; i ++, j += 3 ) { + + // select the normal of the vertex in the first line + + n1.x = normals[ j + 0 ]; + n1.y = normals[ j + 1 ]; + n1.z = normals[ j + 2 ]; + + // select the normal of the vertex in the last line + + n2.x = normals[ base + j + 0 ]; + n2.y = normals[ base + j + 1 ]; + n2.z = normals[ base + j + 2 ]; + + // average normals + + n.addVectors( n1, n2 ).normalize(); + + // assign the new values to both normals + + normals[ j + 0 ] = normals[ base + j + 0 ] = n.x; + normals[ j + 1 ] = normals[ base + j + 1 ] = n.y; + normals[ j + 2 ] = normals[ base + j + 2 ] = n.z; + + } + + } + + } + + static fromJSON( data ) { + + return new LatheGeometry( data.points, data.segments, data.phiStart, data.phiLength ); + + } + +} + +class OctahedronGeometry extends PolyhedronGeometry { + + constructor( radius = 1, detail = 0 ) { + + const vertices = [ + 1, 0, 0, - 1, 0, 0, 0, 1, 0, + 0, - 1, 0, 0, 0, 1, 0, 0, - 1 + ]; + + const indices = [ + 0, 2, 4, 0, 4, 3, 0, 3, 5, + 0, 5, 2, 1, 2, 5, 1, 5, 3, + 1, 3, 4, 1, 4, 2 + ]; + + super( vertices, indices, radius, detail ); + + this.type = 'OctahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + } + + static fromJSON( data ) { + + return new OctahedronGeometry( data.radius, data.detail ); + + } + +} + +/** + * Parametric Surfaces Geometry + * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html + */ + +class ParametricGeometry extends BufferGeometry { + + constructor( func, slices, stacks ) { + + super(); + + this.type = 'ParametricGeometry'; + + this.parameters = { + func: func, + slices: slices, + stacks: stacks + }; + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + const EPS = 0.00001; + + const normal = new Vector3(); + + const p0 = new Vector3(), p1 = new Vector3(); + const pu = new Vector3(), pv = new Vector3(); + + if ( func.length < 3 ) { + + console.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' ); + + } + + // generate vertices, normals and uvs + + const sliceCount = slices + 1; + + for ( let i = 0; i <= stacks; i ++ ) { + + const v = i / stacks; + + for ( let j = 0; j <= slices; j ++ ) { + + const u = j / slices; + + // vertex + + func( u, v, p0 ); + vertices.push( p0.x, p0.y, p0.z ); + + // normal + + // approximate tangent vectors via finite differences + + if ( u - EPS >= 0 ) { + + func( u - EPS, v, p1 ); + pu.subVectors( p0, p1 ); + + } else { + + func( u + EPS, v, p1 ); + pu.subVectors( p1, p0 ); + + } + + if ( v - EPS >= 0 ) { + + func( u, v - EPS, p1 ); + pv.subVectors( p0, p1 ); + + } else { + + func( u, v + EPS, p1 ); + pv.subVectors( p1, p0 ); + + } + + // cross product of tangent vectors returns surface normal + + normal.crossVectors( pu, pv ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u, v ); + + } + + } + + // generate indices + + for ( let i = 0; i < stacks; i ++ ) { + + for ( let j = 0; j < slices; j ++ ) { + + const a = i * sliceCount + j; + const b = i * sliceCount + j + 1; + const c = ( i + 1 ) * sliceCount + j + 1; + const d = ( i + 1 ) * sliceCount + j; + + // faces one and two + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // 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 ) ); + + } + +} + +class RingGeometry extends BufferGeometry { + + constructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 8, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) { + + super(); + + this.type = 'RingGeometry'; + + this.parameters = { + innerRadius: innerRadius, + outerRadius: outerRadius, + thetaSegments: thetaSegments, + phiSegments: phiSegments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + thetaSegments = Math.max( 3, thetaSegments ); + phiSegments = Math.max( 1, phiSegments ); + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + // some helper variables + + let radius = innerRadius; + const radiusStep = ( ( outerRadius - innerRadius ) / phiSegments ); + const vertex = new Vector3(); + const uv = new Vector2(); + + // generate vertices, normals and uvs + + for ( let j = 0; j <= phiSegments; j ++ ) { + + for ( let i = 0; i <= thetaSegments; i ++ ) { + + // values are generate from the inside of the ring to the outside + + const segment = thetaStart + i / thetaSegments * thetaLength; + + // vertex + + vertex.x = radius * Math.cos( segment ); + vertex.y = radius * Math.sin( segment ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, 0, 1 ); + + // uv + + uv.x = ( vertex.x / outerRadius + 1 ) / 2; + uv.y = ( vertex.y / outerRadius + 1 ) / 2; + + uvs.push( uv.x, uv.y ); + + } + + // increase the radius for next row of vertices + + radius += radiusStep; + + } + + // indices + + for ( let j = 0; j < phiSegments; j ++ ) { + + const thetaSegmentLevel = j * ( thetaSegments + 1 ); + + for ( let i = 0; i < thetaSegments; i ++ ) { + + const segment = i + thetaSegmentLevel; + + const a = segment; + const b = segment + thetaSegments + 1; + const c = segment + thetaSegments + 2; + const d = segment + 1; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // 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 ) ); + + } + + static fromJSON( data ) { + + return new RingGeometry( data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength ); + + } + +} + +class ShapeGeometry extends BufferGeometry { + + constructor( shapes, curveSegments = 12 ) { + + super(); + this.type = 'ShapeGeometry'; + + this.parameters = { + shapes: shapes, + curveSegments: curveSegments + }; + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + // helper variables + + let groupStart = 0; + let groupCount = 0; + + // allow single and array values for "shapes" parameter + + if ( Array.isArray( shapes ) === false ) { + + addShape( shapes ); + + } else { + + for ( let i = 0; i < shapes.length; i ++ ) { + + addShape( shapes[ i ] ); + + this.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support + + groupStart += groupCount; + groupCount = 0; + + } + + } + + // 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 ) ); + + + // helper functions + + function addShape( shape ) { + + const indexOffset = vertices.length / 3; + const points = shape.extractPoints( curveSegments ); + + let shapeVertices = points.shape; + const shapeHoles = points.holes; + + // check direction of vertices + + if ( ShapeUtils.isClockWise( shapeVertices ) === false ) { + + shapeVertices = shapeVertices.reverse(); + + } + + for ( let i = 0, l = shapeHoles.length; i < l; i ++ ) { + + const shapeHole = shapeHoles[ i ]; + + if ( ShapeUtils.isClockWise( shapeHole ) === true ) { + + shapeHoles[ i ] = shapeHole.reverse(); + + } + + } + + const faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles ); + + // join vertices of inner and outer paths to a single array + + for ( let i = 0, l = shapeHoles.length; i < l; i ++ ) { + + const shapeHole = shapeHoles[ i ]; + shapeVertices = shapeVertices.concat( shapeHole ); + + } + + // vertices, normals, uvs + + for ( let i = 0, l = shapeVertices.length; i < l; i ++ ) { + + const vertex = shapeVertices[ i ]; + + vertices.push( vertex.x, vertex.y, 0 ); + normals.push( 0, 0, 1 ); + uvs.push( vertex.x, vertex.y ); // world uvs + + } + + // incides + + for ( let i = 0, l = faces.length; i < l; i ++ ) { + + const face = faces[ i ]; + + const a = face[ 0 ] + indexOffset; + const b = face[ 1 ] + indexOffset; + const c = face[ 2 ] + indexOffset; + + indices.push( a, b, c ); + groupCount += 3; + + } + + } + + } + + toJSON() { + + const data = super.toJSON(); + + const shapes = this.parameters.shapes; + + return toJSON( shapes, data ); + + } + + static fromJSON( data, shapes ) { + + const geometryShapes = []; + + for ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) { + + const shape = shapes[ data.shapes[ j ] ]; + + geometryShapes.push( shape ); + + } + + return new ShapeGeometry( geometryShapes, data.curveSegments ); + + } + +} + +function toJSON( shapes, data ) { + + data.shapes = []; + + if ( Array.isArray( shapes ) ) { + + for ( let i = 0, l = shapes.length; i < l; i ++ ) { + + const shape = shapes[ i ]; + + data.shapes.push( shape.uuid ); + + } + + } else { + + data.shapes.push( shapes.uuid ); + + } + + return data; + +} + +class SphereGeometry extends BufferGeometry { + + constructor( radius = 1, widthSegments = 32, heightSegments = 16, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) { + + super(); + this.type = 'SphereGeometry'; + + this.parameters = { + radius: radius, + widthSegments: widthSegments, + heightSegments: heightSegments, + phiStart: phiStart, + phiLength: phiLength, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + widthSegments = Math.max( 3, Math.floor( widthSegments ) ); + heightSegments = Math.max( 2, Math.floor( heightSegments ) ); + + const thetaEnd = Math.min( thetaStart + thetaLength, Math.PI ); + + let index = 0; + const grid = []; + + const vertex = new Vector3(); + const normal = new Vector3(); + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + // generate vertices, normals and uvs + + for ( let iy = 0; iy <= heightSegments; iy ++ ) { + + const verticesRow = []; + + const v = iy / heightSegments; + + // special case for the poles + + let uOffset = 0; + + if ( iy == 0 && thetaStart == 0 ) { + + uOffset = 0.5 / widthSegments; + + } else if ( iy == heightSegments && thetaEnd == Math.PI ) { + + uOffset = - 0.5 / widthSegments; + + } + + for ( let ix = 0; ix <= widthSegments; ix ++ ) { + + const u = ix / widthSegments; + + // vertex + + vertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); + vertex.y = radius * Math.cos( thetaStart + v * thetaLength ); + vertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normal.copy( vertex ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u + uOffset, 1 - v ); + + verticesRow.push( index ++ ); + + } + + grid.push( verticesRow ); + + } + + // indices + + for ( let iy = 0; iy < heightSegments; iy ++ ) { + + for ( let ix = 0; ix < widthSegments; ix ++ ) { + + const a = grid[ iy ][ ix + 1 ]; + const b = grid[ iy ][ ix ]; + const c = grid[ iy + 1 ][ ix ]; + const d = grid[ iy + 1 ][ ix + 1 ]; + + if ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d ); + if ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d ); + + } + + } + + // 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 ) ); + + } + + static fromJSON( data ) { + + return new SphereGeometry( data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength ); + + } + +} + +class TetrahedronGeometry extends PolyhedronGeometry { + + constructor( radius = 1, detail = 0 ) { + + const vertices = [ + 1, 1, 1, - 1, - 1, 1, - 1, 1, - 1, 1, - 1, - 1 + ]; + + const indices = [ + 2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1 + ]; + + super( vertices, indices, radius, detail ); + + this.type = 'TetrahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + } + + static fromJSON( data ) { + + return new TetrahedronGeometry( data.radius, data.detail ); + + } + +} + +/** + * Text = 3D Text + * + * parameters = { + * font: , // font + * + * size: , // size of the text + * height: , // thickness to extrude text + * curveSegments: , // number of points on the curves + * + * bevelEnabled: , // turn on bevel + * bevelThickness: , // how deep into text bevel goes + * bevelSize: , // how far from text outline (including bevelOffset) is bevel + * bevelOffset: // how far from text outline does bevel start + * } + */ + +class TextGeometry extends ExtrudeGeometry { + + constructor( text, parameters = {} ) { + + const font = parameters.font; + + if ( ! ( font && font.isFont ) ) { + + console.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' ); + return new BufferGeometry(); + + } + + const shapes = font.generateShapes( text, parameters.size ); + + // translate parameters to ExtrudeGeometry API + + parameters.depth = parameters.height !== undefined ? parameters.height : 50; + + // defaults + + if ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10; + if ( parameters.bevelSize === undefined ) parameters.bevelSize = 8; + if ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false; + + super( shapes, parameters ); + + this.type = 'TextGeometry'; + + } + +} + +class TorusGeometry extends BufferGeometry { + + constructor( radius = 1, tube = 0.4, radialSegments = 8, tubularSegments = 6, arc = Math.PI * 2 ) { + + super(); + this.type = 'TorusGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + radialSegments: radialSegments, + tubularSegments: tubularSegments, + arc: arc + }; + + radialSegments = Math.floor( radialSegments ); + tubularSegments = Math.floor( tubularSegments ); + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + // helper variables + + const center = new Vector3(); + const vertex = new Vector3(); + const normal = new Vector3(); + + // generate vertices, normals and uvs + + for ( let j = 0; j <= radialSegments; j ++ ) { + + for ( let i = 0; i <= tubularSegments; i ++ ) { + + const u = i / tubularSegments * arc; + const v = j / radialSegments * Math.PI * 2; + + // vertex + + vertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u ); + vertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u ); + vertex.z = tube * Math.sin( v ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + center.x = radius * Math.cos( u ); + center.y = radius * Math.sin( u ); + normal.subVectors( vertex, center ).normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( i / tubularSegments ); + uvs.push( j / radialSegments ); + + } + + } + + // generate indices + + for ( let j = 1; j <= radialSegments; j ++ ) { + + for ( let i = 1; i <= tubularSegments; i ++ ) { + + // indices + + const a = ( tubularSegments + 1 ) * j + i - 1; + const b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1; + const c = ( tubularSegments + 1 ) * ( j - 1 ) + i; + const d = ( tubularSegments + 1 ) * j + i; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // 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 ) ); + + } + + static fromJSON( data ) { + + return new TorusGeometry( data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc ); + + } + +} + +class TorusKnotGeometry extends BufferGeometry { + + constructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) { + + super(); + this.type = 'TorusKnotGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + tubularSegments: tubularSegments, + radialSegments: radialSegments, + p: p, + q: q + }; + + tubularSegments = Math.floor( tubularSegments ); + radialSegments = Math.floor( radialSegments ); + + // buffers + + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + + // helper variables + + const vertex = new Vector3(); + const normal = new Vector3(); + + const P1 = new Vector3(); + const P2 = new Vector3(); + + const B = new Vector3(); + const T = new Vector3(); + const N = new Vector3(); + + // generate vertices, normals and uvs + + for ( let i = 0; i <= tubularSegments; ++ i ) { + + // the radian "u" is used to calculate the position on the torus curve of the current tubular segement + + const u = i / tubularSegments * p * Math.PI * 2; + + // now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead. + // these points are used to create a special "coordinate space", which is necessary to calculate the correct vertex positions + + calculatePositionOnCurve( u, p, q, radius, P1 ); + calculatePositionOnCurve( u + 0.01, p, q, radius, P2 ); + + // calculate orthonormal basis + + T.subVectors( P2, P1 ); + N.addVectors( P2, P1 ); + B.crossVectors( T, N ); + N.crossVectors( B, T ); + + // normalize B, N. T can be ignored, we don't use it + + B.normalize(); + N.normalize(); + + for ( let j = 0; j <= radialSegments; ++ j ) { + + // now calculate the vertices. they are nothing more than an extrusion of the torus curve. + // because we extrude a shape in the xy-plane, there is no need to calculate a z-value. + + const v = j / radialSegments * Math.PI * 2; + const cx = - tube * Math.cos( v ); + const cy = tube * Math.sin( v ); + + // now calculate the final vertex position. + // first we orient the extrusion with our basis vectos, then we add it to the current position on the curve + + vertex.x = P1.x + ( cx * N.x + cy * B.x ); + vertex.y = P1.y + ( cx * N.y + cy * B.y ); + vertex.z = P1.z + ( cx * N.z + cy * B.z ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal) + + normal.subVectors( vertex, P1 ).normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( i / tubularSegments ); + uvs.push( j / radialSegments ); + + } + + } + + // generate indices + + for ( let j = 1; j <= tubularSegments; j ++ ) { + + for ( let i = 1; i <= radialSegments; i ++ ) { + + // indices + + const a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); + const b = ( radialSegments + 1 ) * j + ( i - 1 ); + const c = ( radialSegments + 1 ) * j + i; + const d = ( radialSegments + 1 ) * ( j - 1 ) + i; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // 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 ) ); + + // this function calculates the current position on the torus curve + + function calculatePositionOnCurve( u, p, q, radius, position ) { + + const cu = Math.cos( u ); + const su = Math.sin( u ); + const quOverP = q / p * u; + const cs = Math.cos( quOverP ); + + position.x = radius * ( 2 + cs ) * 0.5 * cu; + position.y = radius * ( 2 + cs ) * su * 0.5; + position.z = radius * Math.sin( quOverP ) * 0.5; + + } + + } + + static fromJSON( data ) { + + return new TorusKnotGeometry( data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q ); + + } + +} + +class TubeGeometry extends BufferGeometry { + + constructor( path, tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) { + + super(); + this.type = 'TubeGeometry'; + + this.parameters = { + path: path, + tubularSegments: tubularSegments, + radius: radius, + radialSegments: radialSegments, + closed: closed + }; + + const frames = path.computeFrenetFrames( tubularSegments, closed ); + + // expose internals + + this.tangents = frames.tangents; + this.normals = frames.normals; + this.binormals = frames.binormals; + + // helper variables + + const vertex = new Vector3(); + const normal = new Vector3(); + const uv = new Vector2(); + let P = new Vector3(); + + // buffer + + const vertices = []; + const normals = []; + const uvs = []; + const indices = []; + + // create buffer data + + generateBufferData(); + + // 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 ) ); + + // functions + + function generateBufferData() { + + for ( let i = 0; i < tubularSegments; i ++ ) { + + generateSegment( i ); + + } + + // if the geometry is not closed, generate the last row of vertices and normals + // at the regular position on the given path + // + // if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ) + + generateSegment( ( closed === false ) ? tubularSegments : 0 ); + + // uvs are generated in a separate function. + // this makes it easy compute correct values for closed geometries + + generateUVs(); + + // finally create faces + + generateIndices(); + + } + + function generateSegment( i ) { + + // we use getPointAt to sample evenly distributed points from the given path + + P = path.getPointAt( i / tubularSegments, P ); + + // retrieve corresponding normal and binormal + + const N = frames.normals[ i ]; + const B = frames.binormals[ i ]; + + // generate normals and vertices for the current segment + + for ( let j = 0; j <= radialSegments; j ++ ) { + + const v = j / radialSegments * Math.PI * 2; + + const sin = Math.sin( v ); + const cos = - Math.cos( v ); + + // normal + + normal.x = ( cos * N.x + sin * B.x ); + normal.y = ( cos * N.y + sin * B.y ); + normal.z = ( cos * N.z + sin * B.z ); + normal.normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // vertex + + vertex.x = P.x + radius * normal.x; + vertex.y = P.y + radius * normal.y; + vertex.z = P.z + radius * normal.z; + + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } + + function generateIndices() { + + for ( let j = 1; j <= tubularSegments; j ++ ) { + + for ( let i = 1; i <= radialSegments; i ++ ) { + + const a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); + const b = ( radialSegments + 1 ) * j + ( i - 1 ); + const c = ( radialSegments + 1 ) * j + i; + const d = ( radialSegments + 1 ) * ( j - 1 ) + i; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + } + + function generateUVs() { + + for ( let i = 0; i <= tubularSegments; i ++ ) { + + for ( let j = 0; j <= radialSegments; j ++ ) { + + uv.x = i / tubularSegments; + uv.y = j / radialSegments; + + uvs.push( uv.x, uv.y ); + + } + + } + + } + + } + + toJSON() { + + const data = super.toJSON(); + + data.path = this.parameters.path.toJSON(); + + return data; + + } + + static fromJSON( data ) { + + // This only works for built-in curves (e.g. CatmullRomCurve3). + // User defined curves or instances of CurvePath will not be deserialized. + return new TubeGeometry( + new Curves[ data.path.type ]().fromJSON( data.path ), + data.tubularSegments, + data.radius, + data.radialSegments, + data.closed + ); + + } + +} + +class WireframeGeometry extends BufferGeometry { + + constructor( geometry ) { + + super(); + this.type = 'WireframeGeometry'; + + if ( geometry.isGeometry === true ) { + + console.error( 'THREE.WireframeGeometry no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' ); + return; + + } + + // buffer + + const vertices = []; + const edges = new Set(); + + // helper variables + + const start = new Vector3(); + const end = new Vector3(); + + if ( geometry.index !== null ) { + + // indexed BufferGeometry + + const position = geometry.attributes.position; + const indices = geometry.index; + let groups = geometry.groups; + + if ( groups.length === 0 ) { + + groups = [ { start: 0, count: indices.count, materialIndex: 0 } ]; + + } + + // create a data structure that contains all eges without duplicates + + for ( let o = 0, ol = groups.length; o < ol; ++ o ) { + + const group = groups[ o ]; + + const groupStart = group.start; + const groupCount = group.count; + + for ( let i = groupStart, l = ( groupStart + groupCount ); i < l; i += 3 ) { + + for ( let j = 0; j < 3; j ++ ) { + + const index1 = indices.getX( i + j ); + const index2 = indices.getX( i + ( j + 1 ) % 3 ); + + start.fromBufferAttribute( position, index1 ); + end.fromBufferAttribute( position, index2 ); + + if ( isUniqueEdge( start, end, edges ) === true ) { + + vertices.push( start.x, start.y, start.z ); + vertices.push( end.x, end.y, end.z ); + + } + + } + + } + + } + + } else { + + // non-indexed BufferGeometry + + const position = geometry.attributes.position; + + for ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) { + + for ( let j = 0; j < 3; j ++ ) { + + // three edges per triangle, an edge is represented as (index1, index2) + // e.g. the first triangle has the following edges: (0,1),(1,2),(2,0) + + const index1 = 3 * i + j; + const index2 = 3 * i + ( ( j + 1 ) % 3 ); + + start.fromBufferAttribute( position, index1 ); + end.fromBufferAttribute( position, index2 ); + + if ( isUniqueEdge( start, end, edges ) === true ) { + + vertices.push( start.x, start.y, start.z ); + vertices.push( end.x, end.y, end.z ); + + } + + } + + } + + } + + // build geometry + + this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + + } + +} + +function isUniqueEdge( start, end, edges ) { + + const hash1 = `${start.x},${start.y},${start.z}-${end.x},${end.y},${end.z}`; + const hash2 = `${end.x},${end.y},${end.z}-${start.x},${start.y},${start.z}`; // coincident edge + + if ( edges.has( hash1 ) === true || edges.has( hash2 ) === true ) { + + return false; + + } else { + + edges.add( hash1, hash2 ); + return true; + + } + +} + +var Geometries = /*#__PURE__*/Object.freeze({ + __proto__: null, + BoxGeometry: BoxGeometry, + BoxBufferGeometry: BoxGeometry, + CircleGeometry: CircleGeometry, + CircleBufferGeometry: CircleGeometry, + ConeGeometry: ConeGeometry, + ConeBufferGeometry: ConeGeometry, + CylinderGeometry: CylinderGeometry, + CylinderBufferGeometry: CylinderGeometry, + DodecahedronGeometry: DodecahedronGeometry, + DodecahedronBufferGeometry: DodecahedronGeometry, + EdgesGeometry: EdgesGeometry, + ExtrudeGeometry: ExtrudeGeometry, + ExtrudeBufferGeometry: ExtrudeGeometry, + IcosahedronGeometry: IcosahedronGeometry, + IcosahedronBufferGeometry: IcosahedronGeometry, + LatheGeometry: LatheGeometry, + LatheBufferGeometry: LatheGeometry, + OctahedronGeometry: OctahedronGeometry, + OctahedronBufferGeometry: OctahedronGeometry, + ParametricGeometry: ParametricGeometry, + ParametricBufferGeometry: ParametricGeometry, + PlaneGeometry: PlaneGeometry, + PlaneBufferGeometry: PlaneGeometry, + PolyhedronGeometry: PolyhedronGeometry, + PolyhedronBufferGeometry: PolyhedronGeometry, + RingGeometry: RingGeometry, + RingBufferGeometry: RingGeometry, + ShapeGeometry: ShapeGeometry, + ShapeBufferGeometry: ShapeGeometry, + SphereGeometry: SphereGeometry, + SphereBufferGeometry: SphereGeometry, + TetrahedronGeometry: TetrahedronGeometry, + TetrahedronBufferGeometry: TetrahedronGeometry, + TextGeometry: TextGeometry, + TextBufferGeometry: TextGeometry, + TorusGeometry: TorusGeometry, + TorusBufferGeometry: TorusGeometry, + TorusKnotGeometry: TorusKnotGeometry, + TorusKnotBufferGeometry: TorusKnotGeometry, + TubeGeometry: TubeGeometry, + TubeBufferGeometry: TubeGeometry, + WireframeGeometry: WireframeGeometry +}); + +/** + * parameters = { + * color: + * } + */ + +class ShadowMaterial extends Material { + + constructor( parameters ) { + + super(); + + this.type = 'ShadowMaterial'; + + this.color = new Color( 0x000000 ); + this.transparent = true; + + this.setValues( parameters ); + + } + + copy( source ) { + + super.copy( source ); + + this.color.copy( source.color ); + + return this; + + } + +} + +ShadowMaterial.prototype.isShadowMaterial = true; + +/** + * parameters = { + * color: , + * roughness: , + * metalness: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * roughnessMap: new THREE.Texture( ), + * + * metalnessMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * envMapIntensity: + * + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * flatShading: + * } + */ + +class MeshStandardMaterial extends Material { + + constructor( parameters ) { + + super(); + + this.defines = { 'STANDARD': '' }; + + this.type = 'MeshStandardMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + this.roughness = 1.0; + this.metalness = 0.0; + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.roughnessMap = null; + + this.metalnessMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.envMapIntensity = 1.0; + + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.flatShading = false; + + this.setValues( parameters ); + + } + + copy( source ) { + + super.copy( source ); + + this.defines = { 'STANDARD': '' }; + + this.color.copy( source.color ); + this.roughness = source.roughness; + this.metalness = source.metalness; + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.roughnessMap = source.roughnessMap; + + this.metalnessMap = source.metalnessMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.envMapIntensity = source.envMapIntensity; + + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.flatShading = source.flatShading; + + return this; + + } + +} + +MeshStandardMaterial.prototype.isMeshStandardMaterial = true; + +/** + * parameters = { + * clearcoat: , + * clearcoatMap: new THREE.Texture( ), + * clearcoatRoughness: , + * clearcoatRoughnessMap: new THREE.Texture( ), + * clearcoatNormalScale: , + * clearcoatNormalMap: new THREE.Texture( ), + * + * reflectivity: , + * ior: , + * + * sheen: , + * + * transmission: , + * transmissionMap: new THREE.Texture( ), + * + * thickness: , + * thicknessMap: new THREE.Texture( ), + * attenuationDistance: , + * attenuationTint: , + * + * specularIntensity: , + * specularIntensityhMap: new THREE.Texture( ), + * specularTint: , + * specularTintMap: new THREE.Texture( ) + * } + */ + +class MeshPhysicalMaterial extends MeshStandardMaterial { + + constructor( parameters ) { + + super(); + + this.defines = { + + 'STANDARD': '', + 'PHYSICAL': '' + + }; + + this.type = 'MeshPhysicalMaterial'; + + this.clearcoat = 0.0; + this.clearcoatMap = null; + this.clearcoatRoughness = 0.0; + this.clearcoatRoughnessMap = null; + this.clearcoatNormalScale = new Vector2( 1, 1 ); + this.clearcoatNormalMap = null; + + this.reflectivity = 0.5; // maps to F0 = 0.04 + + Object.defineProperty( this, 'ior', { + get: function () { + + return ( 1 + 0.4 * this.reflectivity ) / ( 1 - 0.4 * this.reflectivity ); + + }, + set: function ( ior ) { + + this.reflectivity = clamp( 2.5 * ( ior - 1 ) / ( ior + 1 ), 0, 1 ); + + } + } ); + + this.sheen = null; // null will disable sheen bsdf + + this.transmission = 0.0; + this.transmissionMap = null; + + this.thickness = 0.01; + this.thicknessMap = null; + this.attenuationDistance = 0.0; + this.attenuationTint = new Color( 1, 1, 1 ); + + this.specularIntensity = 1.0; + this.specularIntensityMap = null; + this.specularTint = new Color( 1, 1, 1 ); + this.specularTintMap = null; + + this.setValues( parameters ); + + } + + copy( source ) { + + super.copy( source ); + + this.defines = { + + 'STANDARD': '', + 'PHYSICAL': '' + + }; + + this.clearcoat = source.clearcoat; + this.clearcoatMap = source.clearcoatMap; + this.clearcoatRoughness = source.clearcoatRoughness; + this.clearcoatRoughnessMap = source.clearcoatRoughnessMap; + this.clearcoatNormalMap = source.clearcoatNormalMap; + this.clearcoatNormalScale.copy( source.clearcoatNormalScale ); + + this.reflectivity = source.reflectivity; + + if ( source.sheen ) { + + this.sheen = ( this.sheen || new Color() ).copy( source.sheen ); + + } else { + + this.sheen = null; + + } + + this.transmission = source.transmission; + this.transmissionMap = source.transmissionMap; + + this.thickness = source.thickness; + this.thicknessMap = source.thicknessMap; + this.attenuationDistance = source.attenuationDistance; + this.attenuationTint.copy( source.attenuationTint ); + + this.specularIntensity = source.specularIntensity; + this.specularIntensityMap = source.specularIntensityMap; + this.specularTint.copy( source.specularTint ); + this.specularTintMap = source.specularTintMap; + + return this; + + } + +} + +MeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true; + +/** + * parameters = { + * color: , + * specular: , + * shininess: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.MultiplyOperation, + * reflectivity: , + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * flatShading: + * } + */ + +class MeshPhongMaterial extends Material { + + constructor( parameters ) { + + super(); + + this.type = 'MeshPhongMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + this.specular = new Color( 0x111111 ); + this.shininess = 30; + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.flatShading = false; + + this.setValues( parameters ); + + } + + copy( source ) { + + super.copy( source ); + + this.color.copy( source.color ); + this.specular.copy( source.specular ); + this.shininess = source.shininess; + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + 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.flatShading = source.flatShading; + + return this; + + } + +} + +MeshPhongMaterial.prototype.isMeshPhongMaterial = true; + +/** + * parameters = { + * color: , + * + * map: new THREE.Texture( ), + * gradientMap: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * alphaMap: new THREE.Texture( ), + * + * wireframe: , + * wireframeLinewidth: , + * + * } + */ + +class MeshToonMaterial extends Material { + + constructor( parameters ) { + + super(); + + this.defines = { 'TOON': '' }; + + this.type = 'MeshToonMaterial'; + + this.color = new Color( 0xffffff ); + + this.map = null; + this.gradientMap = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.alphaMap = null; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.setValues( parameters ); + + } + + copy( source ) { + + super.copy( source ); + + this.color.copy( source.color ); + + this.map = source.map; + this.gradientMap = source.gradientMap; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.alphaMap = source.alphaMap; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + return this; + + } + +} + +MeshToonMaterial.prototype.isMeshToonMaterial = true; + +/** + * parameters = { + * opacity: , + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * wireframe: , + * wireframeLinewidth: + * + * flatShading: + * } + */ + +class MeshNormalMaterial extends Material { + + constructor( parameters ) { + + super(); + + this.type = 'MeshNormalMaterial'; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; + + this.flatShading = false; + + this.setValues( parameters ); + + } + + copy( source ) { + + super.copy( source ); + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + this.flatShading = source.flatShading; + + return this; + + } + +} + +MeshNormalMaterial.prototype.isMeshNormalMaterial = true; + +/** + * parameters = { + * color: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.Multiply, + * reflectivity: , + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * } + */ + +class MeshLambertMaterial extends Material { + + constructor( parameters ) { + + super(); + + this.type = 'MeshLambertMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + 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.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + 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; + + return this; + + } + +} + +MeshLambertMaterial.prototype.isMeshLambertMaterial = true; + +/** + * parameters = { + * color: , + * opacity: , + * + * matcap: new THREE.Texture( ), + * + * map: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalMapType: THREE.TangentSpaceNormalMap, + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * alphaMap: new THREE.Texture( ), + * + * flatShading: + * } + */ + +class MeshMatcapMaterial extends Material { + + constructor( parameters ) { + + super(); + + this.defines = { 'MATCAP': '' }; + + this.type = 'MeshMatcapMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + + this.matcap = null; + + this.map = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalMapType = TangentSpaceNormalMap; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.alphaMap = null; + + this.flatShading = false; + + this.setValues( parameters ); + + } + + + copy( source ) { + + super.copy( source ); + + this.defines = { 'MATCAP': '' }; + + this.color.copy( source.color ); + + this.matcap = source.matcap; + + this.map = source.map; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalMapType = source.normalMapType; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.alphaMap = source.alphaMap; + + this.flatShading = source.flatShading; + + return this; + + } + +} + +MeshMatcapMaterial.prototype.isMeshMatcapMaterial = true; + +/** + * parameters = { + * color: , + * opacity: , + * + * linewidth: , + * + * scale: , + * dashSize: , + * gapSize: + * } + */ + +class LineDashedMaterial extends LineBasicMaterial { + + constructor( parameters ) { + + super(); + + this.type = 'LineDashedMaterial'; + + this.scale = 1; + this.dashSize = 3; + this.gapSize = 1; + + this.setValues( parameters ); + + } + + copy( source ) { + + super.copy( source ); + + this.scale = source.scale; + this.dashSize = source.dashSize; + this.gapSize = source.gapSize; + + return this; + + } + +} + +LineDashedMaterial.prototype.isLineDashedMaterial = true; + +var Materials = /*#__PURE__*/Object.freeze({ + __proto__: null, + ShadowMaterial: ShadowMaterial, + SpriteMaterial: SpriteMaterial, + RawShaderMaterial: RawShaderMaterial, + ShaderMaterial: ShaderMaterial, + PointsMaterial: PointsMaterial, + MeshPhysicalMaterial: MeshPhysicalMaterial, + MeshStandardMaterial: MeshStandardMaterial, + MeshPhongMaterial: MeshPhongMaterial, + MeshToonMaterial: MeshToonMaterial, + MeshNormalMaterial: MeshNormalMaterial, + MeshLambertMaterial: MeshLambertMaterial, + MeshDepthMaterial: MeshDepthMaterial, + MeshDistanceMaterial: MeshDistanceMaterial, + MeshBasicMaterial: MeshBasicMaterial, + MeshMatcapMaterial: MeshMatcapMaterial, + LineDashedMaterial: LineDashedMaterial, + LineBasicMaterial: LineBasicMaterial, + Material: Material +}); + +const AnimationUtils = { + + // same as Array.prototype.slice, but also works on typed arrays + arraySlice: function ( array, from, to ) { + + if ( AnimationUtils.isTypedArray( array ) ) { + + // in ios9 array.subarray(from, undefined) will return empty array + // but array.subarray(from) or array.subarray(from, len) is correct + return new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) ); + + } + + return array.slice( from, to ); + + }, + + // converts an array to a specific type + convertArray: function ( array, type, forceClone ) { + + if ( ! array || // let 'undefined' and 'null' pass + ! forceClone && array.constructor === type ) return array; + + if ( typeof type.BYTES_PER_ELEMENT === 'number' ) { + + return new type( array ); // create typed array + + } + + return Array.prototype.slice.call( array ); // create Array + + }, + + isTypedArray: function ( object ) { + + return ArrayBuffer.isView( object ) && + ! ( object instanceof DataView ); + + }, + + // returns an array by which times and values can be sorted + getKeyframeOrder: function ( times ) { + + function compareTime( i, j ) { + + return times[ i ] - times[ j ]; + + } + + const n = times.length; + const result = new Array( n ); + for ( let i = 0; i !== n; ++ i ) result[ i ] = i; + + result.sort( compareTime ); + + return result; + + }, + + // uses the array previously returned by 'getKeyframeOrder' to sort data + sortedArray: function ( values, stride, order ) { + + const nValues = values.length; + const result = new values.constructor( nValues ); + + for ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) { + + const srcOffset = order[ i ] * stride; + + for ( let j = 0; j !== stride; ++ j ) { + + result[ dstOffset ++ ] = values[ srcOffset + j ]; + + } + + } + + return result; + + }, + + // function for parsing AOS keyframe formats + flattenJSON: function ( jsonKeys, times, values, valuePropertyName ) { + + let i = 1, key = jsonKeys[ 0 ]; + + while ( key !== undefined && key[ valuePropertyName ] === undefined ) { + + key = jsonKeys[ i ++ ]; + + } + + if ( key === undefined ) return; // no data + + let value = key[ valuePropertyName ]; + if ( value === undefined ) return; // no data + + if ( Array.isArray( value ) ) { + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + values.push.apply( values, value ); // push all elements + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } else if ( value.toArray !== undefined ) { + + // ...assume THREE.Math-ish + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + value.toArray( values, values.length ); + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } else { + + // otherwise push as-is + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + values.push( value ); + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } + + }, + + subclip: function ( sourceClip, name, startFrame, endFrame, fps = 30 ) { + + const clip = sourceClip.clone(); + + clip.name = name; + + const tracks = []; + + for ( let i = 0; i < clip.tracks.length; ++ i ) { + + const track = clip.tracks[ i ]; + const valueSize = track.getValueSize(); + + const times = []; + const values = []; + + for ( let j = 0; j < track.times.length; ++ j ) { + + const frame = track.times[ j ] * fps; + + if ( frame < startFrame || frame >= endFrame ) continue; + + times.push( track.times[ j ] ); + + for ( let k = 0; k < valueSize; ++ k ) { + + values.push( track.values[ j * valueSize + k ] ); + + } + + } + + if ( times.length === 0 ) continue; + + track.times = AnimationUtils.convertArray( times, track.times.constructor ); + track.values = AnimationUtils.convertArray( values, track.values.constructor ); + + tracks.push( track ); + + } + + clip.tracks = tracks; + + // find minimum .times value across all tracks in the trimmed clip + + let minStartTime = Infinity; + + for ( let i = 0; i < clip.tracks.length; ++ i ) { + + if ( minStartTime > clip.tracks[ i ].times[ 0 ] ) { + + minStartTime = clip.tracks[ i ].times[ 0 ]; + + } + + } + + // shift all tracks such that clip begins at t=0 + + for ( let i = 0; i < clip.tracks.length; ++ i ) { + + clip.tracks[ i ].shift( - 1 * minStartTime ); + + } + + clip.resetDuration(); + + return clip; + + }, + + makeClipAdditive: function ( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) { + + if ( fps <= 0 ) fps = 30; + + const numTracks = referenceClip.tracks.length; + const referenceTime = referenceFrame / fps; + + // Make each track's values relative to the values at the reference frame + for ( let i = 0; i < numTracks; ++ i ) { + + const referenceTrack = referenceClip.tracks[ i ]; + const referenceTrackType = referenceTrack.ValueTypeName; + + // Skip this track if it's non-numeric + if ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue; + + // Find the track in the target clip whose name and type matches the reference track + const targetTrack = targetClip.tracks.find( function ( track ) { + + return track.name === referenceTrack.name + && track.ValueTypeName === referenceTrackType; + + } ); + + if ( targetTrack === undefined ) continue; + + let referenceOffset = 0; + const referenceValueSize = referenceTrack.getValueSize(); + + if ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) { + + referenceOffset = referenceValueSize / 3; + + } + + let targetOffset = 0; + const targetValueSize = targetTrack.getValueSize(); + + if ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) { + + targetOffset = targetValueSize / 3; + + } + + const lastIndex = referenceTrack.times.length - 1; + let referenceValue; + + // Find the value to subtract out of the track + if ( referenceTime <= referenceTrack.times[ 0 ] ) { + + // Reference frame is earlier than the first keyframe, so just use the first keyframe + const startIndex = referenceOffset; + const endIndex = referenceValueSize - referenceOffset; + referenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex ); + + } else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) { + + // Reference frame is after the last keyframe, so just use the last keyframe + const startIndex = lastIndex * referenceValueSize + referenceOffset; + const endIndex = startIndex + referenceValueSize - referenceOffset; + referenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex ); + + } else { + + // Interpolate to the reference value + const interpolant = referenceTrack.createInterpolant(); + const startIndex = referenceOffset; + const endIndex = referenceValueSize - referenceOffset; + interpolant.evaluate( referenceTime ); + referenceValue = AnimationUtils.arraySlice( interpolant.resultBuffer, startIndex, endIndex ); + + } + + // Conjugate the quaternion + if ( referenceTrackType === 'quaternion' ) { + + const referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate(); + referenceQuat.toArray( referenceValue ); + + } + + // Subtract the reference value from all of the track values + + const numTimes = targetTrack.times.length; + for ( let j = 0; j < numTimes; ++ j ) { + + const valueStart = j * targetValueSize + targetOffset; + + if ( referenceTrackType === 'quaternion' ) { + + // Multiply the conjugate for quaternion track types + Quaternion.multiplyQuaternionsFlat( + targetTrack.values, + valueStart, + referenceValue, + 0, + targetTrack.values, + valueStart + ); + + } else { + + const valueEnd = targetValueSize - targetOffset * 2; + + // Subtract each value for all other numeric track types + for ( let k = 0; k < valueEnd; ++ k ) { + + targetTrack.values[ valueStart + k ] -= referenceValue[ k ]; + + } + + } + + } + + } + + targetClip.blendMode = AdditiveAnimationBlendMode; + + return targetClip; + + } + +}; + +/** + * Abstract base class of interpolants over parametric samples. + * + * The parameter domain is one dimensional, typically the time or a path + * along a curve defined by the data. + * + * The sample values can have any dimensionality and derived classes may + * apply special interpretations to the data. + * + * This class provides the interval seek in a Template Method, deferring + * the actual interpolation to derived classes. + * + * Time complexity is O(1) for linear access crossing at most two points + * and O(log N) for random access, where N is the number of positions. + * + * References: + * + * http://www.oodesign.com/template-method-pattern.html + * + */ + +class Interpolant { + + constructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + this.parameterPositions = parameterPositions; + this._cachedIndex = 0; + + this.resultBuffer = resultBuffer !== undefined ? + resultBuffer : new sampleValues.constructor( sampleSize ); + this.sampleValues = sampleValues; + this.valueSize = sampleSize; + + this.settings = null; + this.DefaultSettings_ = {}; + + } + + evaluate( t ) { + + const pp = this.parameterPositions; + let i1 = this._cachedIndex, + t1 = pp[ i1 ], + t0 = pp[ i1 - 1 ]; + + validate_interval: { + + seek: { + + let right; + + linear_scan: { + + //- See http://jsperf.com/comparison-to-undefined/3 + //- slower code: + //- + //- if ( t >= t1 || t1 === undefined ) { + forward_scan: if ( ! ( t < t1 ) ) { + + for ( let giveUpAt = i1 + 2; ; ) { + + if ( t1 === undefined ) { + + if ( t < t0 ) break forward_scan; + + // after end + + i1 = pp.length; + this._cachedIndex = i1; + return this.afterEnd_( i1 - 1, t, t0 ); + + } + + if ( i1 === giveUpAt ) break; // this loop + + t0 = t1; + t1 = pp[ ++ i1 ]; + + if ( t < t1 ) { + + // we have arrived at the sought interval + break seek; + + } + + } + + // prepare binary search on the right side of the index + right = pp.length; + break linear_scan; + + } + + //- slower code: + //- if ( t < t0 || t0 === undefined ) { + if ( ! ( t >= t0 ) ) { + + // looping? + + const t1global = pp[ 1 ]; + + if ( t < t1global ) { + + i1 = 2; // + 1, using the scan for the details + t0 = t1global; + + } + + // linear reverse scan + + for ( let giveUpAt = i1 - 2; ; ) { + + if ( t0 === undefined ) { + + // before start + + this._cachedIndex = 0; + return this.beforeStart_( 0, t, t1 ); + + } + + if ( i1 === giveUpAt ) break; // this loop + + t1 = t0; + t0 = pp[ -- i1 - 1 ]; + + if ( t >= t0 ) { + + // we have arrived at the sought interval + break seek; + + } + + } + + // prepare binary search on the left side of the index + right = i1; + i1 = 0; + break linear_scan; + + } + + // the interval is valid + + break validate_interval; + + } // linear scan + + // binary search + + while ( i1 < right ) { + + const mid = ( i1 + right ) >>> 1; + + if ( t < pp[ mid ] ) { + + right = mid; + + } else { + + i1 = mid + 1; + + } + + } + + t1 = pp[ i1 ]; + t0 = pp[ i1 - 1 ]; + + // check boundary cases, again + + if ( t0 === undefined ) { + + this._cachedIndex = 0; + return this.beforeStart_( 0, t, t1 ); + + } + + if ( t1 === undefined ) { + + i1 = pp.length; + this._cachedIndex = i1; + return this.afterEnd_( i1 - 1, t0, t ); + + } + + } // seek + + this._cachedIndex = i1; + + this.intervalChanged_( i1, t0, t1 ); + + } // validate_interval + + return this.interpolate_( i1, t0, t, t1 ); + + } + + getSettings_() { + + return this.settings || this.DefaultSettings_; + + } + + copySampleValue_( index ) { + + // copies a sample value to the result buffer + + const result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + offset = index * stride; + + for ( let i = 0; i !== stride; ++ i ) { + + result[ i ] = values[ offset + i ]; + + } + + return result; + + } + + // Template methods for derived classes: + + interpolate_( /* i1, t0, t, t1 */ ) { + + throw new Error( 'call to abstract method' ); + // implementations shall return this.resultBuffer + + } + + intervalChanged_( /* i1, t0, t1 */ ) { + + // empty + + } + +} + +// ALIAS DEFINITIONS + +Interpolant.prototype.beforeStart_ = Interpolant.prototype.copySampleValue_; +Interpolant.prototype.afterEnd_ = Interpolant.prototype.copySampleValue_; + +/** + * Fast and simple cubic spline interpolant. + * + * It was derived from a Hermitian construction setting the first derivative + * at each sample position to the linear slope between neighboring positions + * over their parameter interval. + */ + +class CubicInterpolant extends Interpolant { + + constructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + super( parameterPositions, sampleValues, sampleSize, resultBuffer ); + + this._weightPrev = - 0; + this._offsetPrev = - 0; + this._weightNext = - 0; + this._offsetNext = - 0; + + this.DefaultSettings_ = { + + endingStart: ZeroCurvatureEnding, + endingEnd: ZeroCurvatureEnding + + }; + + } + + intervalChanged_( i1, t0, t1 ) { + + const pp = this.parameterPositions; + let iPrev = i1 - 2, + iNext = i1 + 1, + + tPrev = pp[ iPrev ], + tNext = pp[ iNext ]; + + if ( tPrev === undefined ) { + + switch ( this.getSettings_().endingStart ) { + + case ZeroSlopeEnding: + + // f'(t0) = 0 + iPrev = i1; + tPrev = 2 * t0 - t1; + + break; + + case WrapAroundEnding: + + // use the other end of the curve + iPrev = pp.length - 2; + tPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ]; + + break; + + default: // ZeroCurvatureEnding + + // f''(t0) = 0 a.k.a. Natural Spline + iPrev = i1; + tPrev = t1; + + } + + } + + if ( tNext === undefined ) { + + switch ( this.getSettings_().endingEnd ) { + + case ZeroSlopeEnding: + + // f'(tN) = 0 + iNext = i1; + tNext = 2 * t1 - t0; + + break; + + case WrapAroundEnding: + + // use the other end of the curve + iNext = 1; + tNext = t1 + pp[ 1 ] - pp[ 0 ]; + + break; + + default: // ZeroCurvatureEnding + + // f''(tN) = 0, a.k.a. Natural Spline + iNext = i1 - 1; + tNext = t0; + + } + + } + + const halfDt = ( t1 - t0 ) * 0.5, + stride = this.valueSize; + + this._weightPrev = halfDt / ( t0 - tPrev ); + this._weightNext = halfDt / ( tNext - t1 ); + this._offsetPrev = iPrev * stride; + this._offsetNext = iNext * stride; + + } + + interpolate_( i1, t0, t, t1 ) { + + const result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + o1 = i1 * stride, o0 = o1 - stride, + oP = this._offsetPrev, oN = this._offsetNext, + wP = this._weightPrev, wN = this._weightNext, + + p = ( t - t0 ) / ( t1 - t0 ), + pp = p * p, + ppp = pp * p; + + // evaluate polynomials + + const sP = - wP * ppp + 2 * wP * pp - wP * p; + const s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1; + const s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p; + const sN = wN * ppp - wN * pp; + + // combine data linearly + + for ( let i = 0; i !== stride; ++ i ) { + + result[ i ] = + sP * values[ oP + i ] + + s0 * values[ o0 + i ] + + s1 * values[ o1 + i ] + + sN * values[ oN + i ]; + + } + + return result; + + } + +} + +class LinearInterpolant extends Interpolant { + + constructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + super( parameterPositions, sampleValues, sampleSize, resultBuffer ); + + } + + interpolate_( i1, t0, t, t1 ) { + + const result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + offset1 = i1 * stride, + offset0 = offset1 - stride, + + weight1 = ( t - t0 ) / ( t1 - t0 ), + weight0 = 1 - weight1; + + for ( let i = 0; i !== stride; ++ i ) { + + result[ i ] = + values[ offset0 + i ] * weight0 + + values[ offset1 + i ] * weight1; + + } + + return result; + + } + +} + +/** + * + * Interpolant that evaluates to the sample value at the position preceeding + * the parameter. + */ + +class DiscreteInterpolant extends Interpolant { + + constructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + super( parameterPositions, sampleValues, sampleSize, resultBuffer ); + + } + + interpolate_( i1 /*, t0, t, t1 */ ) { + + return this.copySampleValue_( i1 - 1 ); + + } + +} + +class KeyframeTrack { + + constructor( name, times, values, interpolation ) { + + if ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' ); + if ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name ); + + this.name = name; + + this.times = AnimationUtils.convertArray( times, this.TimeBufferType ); + this.values = AnimationUtils.convertArray( values, this.ValueBufferType ); + + this.setInterpolation( interpolation || this.DefaultInterpolation ); + + } + + // Serialization (in static context, because of constructor invocation + // and automatic invocation of .toJSON): + + static toJSON( track ) { + + const trackType = track.constructor; + + let json; + + // derived classes can define a static toJSON method + if ( trackType.toJSON !== this.toJSON ) { + + json = trackType.toJSON( track ); + + } else { + + // by default, we assume the data can be serialized as-is + json = { + + 'name': track.name, + 'times': AnimationUtils.convertArray( track.times, Array ), + 'values': AnimationUtils.convertArray( track.values, Array ) + + }; + + const interpolation = track.getInterpolation(); + + if ( interpolation !== track.DefaultInterpolation ) { + + json.interpolation = interpolation; + + } + + } + + json.type = track.ValueTypeName; // mandatory + + return json; + + } + + InterpolantFactoryMethodDiscrete( result ) { + + return new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result ); + + } + + InterpolantFactoryMethodLinear( result ) { + + return new LinearInterpolant( this.times, this.values, this.getValueSize(), result ); + + } + + InterpolantFactoryMethodSmooth( result ) { + + return new CubicInterpolant( this.times, this.values, this.getValueSize(), result ); + + } + + setInterpolation( interpolation ) { + + let factoryMethod; + + switch ( interpolation ) { + + case InterpolateDiscrete: + + factoryMethod = this.InterpolantFactoryMethodDiscrete; + + break; + + case InterpolateLinear: + + factoryMethod = this.InterpolantFactoryMethodLinear; + + break; + + case InterpolateSmooth: + + factoryMethod = this.InterpolantFactoryMethodSmooth; + + break; + + } + + if ( factoryMethod === undefined ) { + + const message = 'unsupported interpolation for ' + + this.ValueTypeName + ' keyframe track named ' + this.name; + + if ( this.createInterpolant === undefined ) { + + // fall back to default, unless the default itself is messed up + if ( interpolation !== this.DefaultInterpolation ) { + + this.setInterpolation( this.DefaultInterpolation ); + + } else { + + throw new Error( message ); // fatal, in this case + + } + + } + + console.warn( 'THREE.KeyframeTrack:', message ); + return this; + + } + + this.createInterpolant = factoryMethod; + + return this; + + } + + getInterpolation() { + + switch ( this.createInterpolant ) { + + case this.InterpolantFactoryMethodDiscrete: + + return InterpolateDiscrete; + + case this.InterpolantFactoryMethodLinear: + + return InterpolateLinear; + + case this.InterpolantFactoryMethodSmooth: + + return InterpolateSmooth; + + } + + } + + getValueSize() { + + return this.values.length / this.times.length; + + } + + // move all keyframes either forwards or backwards in time + shift( timeOffset ) { + + if ( timeOffset !== 0.0 ) { + + const times = this.times; + + for ( let i = 0, n = times.length; i !== n; ++ i ) { + + times[ i ] += timeOffset; + + } + + } + + return this; + + } + + // scale all keyframe times by a factor (useful for frame <-> seconds conversions) + scale( timeScale ) { + + if ( timeScale !== 1.0 ) { + + const times = this.times; + + for ( let i = 0, n = times.length; i !== n; ++ i ) { + + times[ i ] *= timeScale; + + } + + } + + return this; + + } + + // removes keyframes before and after animation without changing any values within the range [startTime, endTime]. + // IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values + trim( startTime, endTime ) { + + const times = this.times, + nKeys = times.length; + + let from = 0, + to = nKeys - 1; + + while ( from !== nKeys && times[ from ] < startTime ) { + + ++ from; + + } + + while ( to !== - 1 && times[ to ] > endTime ) { + + -- to; + + } + + ++ to; // inclusive -> exclusive bound + + if ( from !== 0 || to !== nKeys ) { + + // empty tracks are forbidden, so keep at least one keyframe + if ( from >= to ) { + + to = Math.max( to, 1 ); + from = to - 1; + + } + + const stride = this.getValueSize(); + this.times = AnimationUtils.arraySlice( times, from, to ); + this.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride ); + + } + + return this; + + } + + // ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable + validate() { + + let valid = true; + + const valueSize = this.getValueSize(); + if ( valueSize - Math.floor( valueSize ) !== 0 ) { + + console.error( 'THREE.KeyframeTrack: Invalid value size in track.', this ); + valid = false; + + } + + const times = this.times, + values = this.values, + + nKeys = times.length; + + if ( nKeys === 0 ) { + + console.error( 'THREE.KeyframeTrack: Track is empty.', this ); + valid = false; + + } + + let prevTime = null; + + for ( let i = 0; i !== nKeys; i ++ ) { + + const currTime = times[ i ]; + + if ( typeof currTime === 'number' && isNaN( currTime ) ) { + + console.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime ); + valid = false; + break; + + } + + if ( prevTime !== null && prevTime > currTime ) { + + console.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime ); + valid = false; + break; + + } + + prevTime = currTime; + + } + + if ( values !== undefined ) { + + if ( AnimationUtils.isTypedArray( values ) ) { + + for ( let i = 0, n = values.length; i !== n; ++ i ) { + + const value = values[ i ]; + + if ( isNaN( value ) ) { + + console.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value ); + valid = false; + break; + + } + + } + + } + + } + + return valid; + + } + + // removes equivalent sequential keys as common in morph target sequences + // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0) + optimize() { + + // times or values may be shared with other tracks, so overwriting is unsafe + const times = AnimationUtils.arraySlice( this.times ), + values = AnimationUtils.arraySlice( this.values ), + stride = this.getValueSize(), + + smoothInterpolation = this.getInterpolation() === InterpolateSmooth, + + lastIndex = times.length - 1; + + let writeIndex = 1; + + for ( let i = 1; i < lastIndex; ++ i ) { + + let keep = false; + + const time = times[ i ]; + const timeNext = times[ i + 1 ]; + + // remove adjacent keyframes scheduled at the same time + + if ( time !== timeNext && ( i !== 1 || time !== times[ 0 ] ) ) { + + if ( ! smoothInterpolation ) { + + // remove unnecessary keyframes same as their neighbors + + const offset = i * stride, + offsetP = offset - stride, + offsetN = offset + stride; + + for ( let j = 0; j !== stride; ++ j ) { + + const value = values[ offset + j ]; + + if ( value !== values[ offsetP + j ] || + value !== values[ offsetN + j ] ) { + + keep = true; + break; + + } + + } + + } else { + + keep = true; + + } + + } + + // in-place compaction + + if ( keep ) { + + if ( i !== writeIndex ) { + + times[ writeIndex ] = times[ i ]; + + const readOffset = i * stride, + writeOffset = writeIndex * stride; + + for ( let j = 0; j !== stride; ++ j ) { + + values[ writeOffset + j ] = values[ readOffset + j ]; + + } + + } + + ++ writeIndex; + + } + + } + + // flush last keyframe (compaction looks ahead) + + if ( lastIndex > 0 ) { + + times[ writeIndex ] = times[ lastIndex ]; + + for ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) { + + values[ writeOffset + j ] = values[ readOffset + j ]; + + } + + ++ writeIndex; + + } + + if ( writeIndex !== times.length ) { + + this.times = AnimationUtils.arraySlice( times, 0, writeIndex ); + this.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride ); + + } else { + + this.times = times; + this.values = values; + + } + + return this; + + } + + clone() { + + const times = AnimationUtils.arraySlice( this.times, 0 ); + const values = AnimationUtils.arraySlice( this.values, 0 ); + + const TypedKeyframeTrack = this.constructor; + const track = new TypedKeyframeTrack( this.name, times, values ); + + // Interpolant argument to constructor is not saved, so copy the factory method directly. + track.createInterpolant = this.createInterpolant; + + return track; + + } + +} + +KeyframeTrack.prototype.TimeBufferType = Float32Array; +KeyframeTrack.prototype.ValueBufferType = Float32Array; +KeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear; + +/** + * A Track of Boolean keyframe values. + */ +class BooleanKeyframeTrack extends KeyframeTrack {} + +BooleanKeyframeTrack.prototype.ValueTypeName = 'bool'; +BooleanKeyframeTrack.prototype.ValueBufferType = Array; +BooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete; +BooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined; +BooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined; + +/** + * A Track of keyframe values that represent color. + */ +class ColorKeyframeTrack extends KeyframeTrack {} + +ColorKeyframeTrack.prototype.ValueTypeName = 'color'; + +/** + * A Track of numeric keyframe values. + */ +class NumberKeyframeTrack extends KeyframeTrack {} + +NumberKeyframeTrack.prototype.ValueTypeName = 'number'; + +/** + * Spherical linear unit quaternion interpolant. + */ + +class QuaternionLinearInterpolant extends Interpolant { + + constructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + super( parameterPositions, sampleValues, sampleSize, resultBuffer ); + + } + + interpolate_( i1, t0, t, t1 ) { + + const result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + alpha = ( t - t0 ) / ( t1 - t0 ); + + let offset = i1 * stride; + + for ( let end = offset + stride; offset !== end; offset += 4 ) { + + Quaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha ); + + } + + return result; + + } + +} + +/** + * A Track of quaternion keyframe values. + */ +class QuaternionKeyframeTrack extends KeyframeTrack { + + InterpolantFactoryMethodLinear( result ) { + + return new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result ); + + } + +} + +QuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion'; +// ValueBufferType is inherited +QuaternionKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear; +QuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined; + +/** + * A Track that interpolates Strings + */ +class StringKeyframeTrack extends KeyframeTrack {} + +StringKeyframeTrack.prototype.ValueTypeName = 'string'; +StringKeyframeTrack.prototype.ValueBufferType = Array; +StringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete; +StringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined; +StringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined; + +/** + * A Track of vectored keyframe values. + */ +class VectorKeyframeTrack extends KeyframeTrack {} + +VectorKeyframeTrack.prototype.ValueTypeName = 'vector'; + +class AnimationClip { + + constructor( name, duration = - 1, tracks, blendMode = NormalAnimationBlendMode ) { + + this.name = name; + this.tracks = tracks; + this.duration = duration; + this.blendMode = blendMode; + + this.uuid = generateUUID(); + + // this means it should figure out its duration by scanning the tracks + if ( this.duration < 0 ) { + + this.resetDuration(); + + } + + } + + + static parse( json ) { + + const tracks = [], + jsonTracks = json.tracks, + frameTime = 1.0 / ( json.fps || 1.0 ); + + for ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) { + + tracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) ); + + } + + const clip = new this( json.name, json.duration, tracks, json.blendMode ); + clip.uuid = json.uuid; + + return clip; + + } + + static toJSON( clip ) { + + const tracks = [], + clipTracks = clip.tracks; + + const json = { + + 'name': clip.name, + 'duration': clip.duration, + 'tracks': tracks, + 'uuid': clip.uuid, + 'blendMode': clip.blendMode + + }; + + for ( let i = 0, n = clipTracks.length; i !== n; ++ i ) { + + tracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) ); + + } + + return json; + + } + + static CreateFromMorphTargetSequence( name, morphTargetSequence, fps, noLoop ) { + + const numMorphTargets = morphTargetSequence.length; + const tracks = []; + + for ( let i = 0; i < numMorphTargets; i ++ ) { + + let times = []; + let values = []; + + times.push( + ( i + numMorphTargets - 1 ) % numMorphTargets, + i, + ( i + 1 ) % numMorphTargets ); + + values.push( 0, 1, 0 ); + + const order = AnimationUtils.getKeyframeOrder( times ); + times = AnimationUtils.sortedArray( times, 1, order ); + values = AnimationUtils.sortedArray( values, 1, order ); + + // if there is a key at the first frame, duplicate it as the + // last frame as well for perfect loop. + if ( ! noLoop && times[ 0 ] === 0 ) { + + times.push( numMorphTargets ); + values.push( values[ 0 ] ); + + } + + tracks.push( + new NumberKeyframeTrack( + '.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']', + times, values + ).scale( 1.0 / fps ) ); + + } + + return new this( name, - 1, tracks ); + + } + + static findByName( objectOrClipArray, name ) { + + let clipArray = objectOrClipArray; + + if ( ! Array.isArray( objectOrClipArray ) ) { + + const o = objectOrClipArray; + clipArray = o.geometry && o.geometry.animations || o.animations; + + } + + for ( let i = 0; i < clipArray.length; i ++ ) { + + if ( clipArray[ i ].name === name ) { + + return clipArray[ i ]; + + } + + } + + return null; + + } + + static CreateClipsFromMorphTargetSequences( morphTargets, fps, noLoop ) { + + const animationToMorphTargets = {}; + + // tested with https://regex101.com/ on trick sequences + // such flamingo_flyA_003, flamingo_run1_003, crdeath0059 + const pattern = /^([\w-]*?)([\d]+)$/; + + // sort morph target names into animation groups based + // patterns like Walk_001, Walk_002, Run_001, Run_002 + for ( let i = 0, il = morphTargets.length; i < il; i ++ ) { + + const morphTarget = morphTargets[ i ]; + const parts = morphTarget.name.match( pattern ); + + if ( parts && parts.length > 1 ) { + + const name = parts[ 1 ]; + + let animationMorphTargets = animationToMorphTargets[ name ]; + + if ( ! animationMorphTargets ) { + + animationToMorphTargets[ name ] = animationMorphTargets = []; + + } + + animationMorphTargets.push( morphTarget ); + + } + + } + + const clips = []; + + for ( const name in animationToMorphTargets ) { + + clips.push( this.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) ); + + } + + return clips; + + } + + // parse the animation.hierarchy format + static parseAnimation( animation, bones ) { + + if ( ! animation ) { + + console.error( 'THREE.AnimationClip: No animation in JSONLoader data.' ); + return null; + + } + + const addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) { + + // only return track if there are actually keys. + if ( animationKeys.length !== 0 ) { + + const times = []; + const values = []; + + AnimationUtils.flattenJSON( animationKeys, times, values, propertyName ); + + // empty keys are filtered out, so check again + if ( times.length !== 0 ) { + + destTracks.push( new trackType( trackName, times, values ) ); + + } + + } + + }; + + const tracks = []; + + const clipName = animation.name || 'default'; + const fps = animation.fps || 30; + const blendMode = animation.blendMode; + + // automatic length determination in AnimationClip. + let duration = animation.length || - 1; + + const hierarchyTracks = animation.hierarchy || []; + + for ( let h = 0; h < hierarchyTracks.length; h ++ ) { + + const animationKeys = hierarchyTracks[ h ].keys; + + // skip empty tracks + if ( ! animationKeys || animationKeys.length === 0 ) continue; + + // process morph targets + if ( animationKeys[ 0 ].morphTargets ) { + + // figure out all morph targets used in this track + const morphTargetNames = {}; + + let k; + + for ( k = 0; k < animationKeys.length; k ++ ) { + + if ( animationKeys[ k ].morphTargets ) { + + for ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) { + + morphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1; + + } + + } + + } + + // create a track for each morph target with all zero + // morphTargetInfluences except for the keys in which + // the morphTarget is named. + for ( const morphTargetName in morphTargetNames ) { + + const times = []; + const values = []; + + for ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) { + + const animationKey = animationKeys[ k ]; + + times.push( animationKey.time ); + values.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 ); + + } + + tracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) ); + + } + + duration = morphTargetNames.length * ( fps || 1.0 ); + + } else { + + // ...assume skeletal animation + + const boneName = '.bones[' + bones[ h ].name + ']'; + + addNonemptyTrack( + VectorKeyframeTrack, boneName + '.position', + animationKeys, 'pos', tracks ); + + addNonemptyTrack( + QuaternionKeyframeTrack, boneName + '.quaternion', + animationKeys, 'rot', tracks ); + + addNonemptyTrack( + VectorKeyframeTrack, boneName + '.scale', + animationKeys, 'scl', tracks ); + + } + + } + + if ( tracks.length === 0 ) { + + return null; + + } + + const clip = new this( clipName, duration, tracks, blendMode ); + + return clip; + + } + + resetDuration() { + + const tracks = this.tracks; + let duration = 0; + + for ( let i = 0, n = tracks.length; i !== n; ++ i ) { + + const track = this.tracks[ i ]; + + duration = Math.max( duration, track.times[ track.times.length - 1 ] ); + + } + + this.duration = duration; + + return this; + + } + + trim() { + + for ( let i = 0; i < this.tracks.length; i ++ ) { + + this.tracks[ i ].trim( 0, this.duration ); + + } + + return this; + + } + + validate() { + + let valid = true; + + for ( let i = 0; i < this.tracks.length; i ++ ) { + + valid = valid && this.tracks[ i ].validate(); + + } + + return valid; + + } + + optimize() { + + for ( let i = 0; i < this.tracks.length; i ++ ) { + + this.tracks[ i ].optimize(); + + } + + return this; + + } + + clone() { + + const tracks = []; + + for ( let i = 0; i < this.tracks.length; i ++ ) { + + tracks.push( this.tracks[ i ].clone() ); + + } + + return new this.constructor( this.name, this.duration, tracks, this.blendMode ); + + } + + toJSON() { + + return this.constructor.toJSON( this ); + + } + +} + +function getTrackTypeForValueTypeName( typeName ) { + + switch ( typeName.toLowerCase() ) { + + case 'scalar': + case 'double': + case 'float': + case 'number': + case 'integer': + + return NumberKeyframeTrack; + + case 'vector': + case 'vector2': + case 'vector3': + case 'vector4': + + return VectorKeyframeTrack; + + case 'color': + + return ColorKeyframeTrack; + + case 'quaternion': + + return QuaternionKeyframeTrack; + + case 'bool': + case 'boolean': + + return BooleanKeyframeTrack; + + case 'string': + + return StringKeyframeTrack; + + } + + throw new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName ); + +} + +function parseKeyframeTrack( json ) { + + if ( json.type === undefined ) { + + throw new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' ); + + } + + const trackType = getTrackTypeForValueTypeName( json.type ); + + if ( json.times === undefined ) { + + const times = [], values = []; + + AnimationUtils.flattenJSON( json.keys, times, values, 'value' ); + + json.times = times; + json.values = values; + + } + + // derived classes can define a static parse method + if ( trackType.parse !== undefined ) { + + return trackType.parse( json ); + + } else { + + // by default, we assume a constructor compatible with the base + return new trackType( json.name, json.times, json.values, json.interpolation ); + + } + +} + +const Cache = { + + enabled: false, + + files: {}, + + add: function ( key, file ) { + + if ( this.enabled === false ) return; + + // console.log( 'THREE.Cache', 'Adding key:', key ); + + this.files[ key ] = file; + + }, + + get: function ( key ) { + + if ( this.enabled === false ) return; + + // console.log( 'THREE.Cache', 'Checking key:', key ); + + return this.files[ key ]; + + }, + + remove: function ( key ) { + + delete this.files[ key ]; + + }, + + clear: function () { + + this.files = {}; + + } + +}; + +class LoadingManager { + + constructor( onLoad, onProgress, onError ) { + + const scope = this; + + let isLoading = false; + let itemsLoaded = 0; + let itemsTotal = 0; + let urlModifier = undefined; + const handlers = []; + + // Refer to #5689 for the reason why we don't set .onStart + // in the constructor + + this.onStart = undefined; + this.onLoad = onLoad; + this.onProgress = onProgress; + this.onError = onError; + + this.itemStart = function ( url ) { + + itemsTotal ++; + + if ( isLoading === false ) { + + if ( scope.onStart !== undefined ) { + + scope.onStart( url, itemsLoaded, itemsTotal ); + + } + + } + + isLoading = true; + + }; + + this.itemEnd = function ( url ) { + + itemsLoaded ++; + + if ( scope.onProgress !== undefined ) { + + scope.onProgress( url, itemsLoaded, itemsTotal ); + + } + + if ( itemsLoaded === itemsTotal ) { + + isLoading = false; + + if ( scope.onLoad !== undefined ) { + + scope.onLoad(); + + } + + } + + }; + + this.itemError = function ( url ) { + + if ( scope.onError !== undefined ) { + + scope.onError( url ); + + } + + }; + + this.resolveURL = function ( url ) { + + if ( urlModifier ) { + + return urlModifier( url ); + + } + + return url; + + }; + + this.setURLModifier = function ( transform ) { + + urlModifier = transform; + + return this; + + }; + + this.addHandler = function ( regex, loader ) { + + handlers.push( regex, loader ); + + return this; + + }; + + this.removeHandler = function ( regex ) { + + const index = handlers.indexOf( regex ); + + if ( index !== - 1 ) { + + handlers.splice( index, 2 ); + + } + + return this; + + }; + + this.getHandler = function ( file ) { + + for ( let i = 0, l = handlers.length; i < l; i += 2 ) { + + const regex = handlers[ i ]; + const loader = handlers[ i + 1 ]; + + if ( regex.global ) regex.lastIndex = 0; // see #17920 + + if ( regex.test( file ) ) { + + return loader; + + } + + } + + return null; + + }; + + } + +} + +const DefaultLoadingManager = new LoadingManager(); + +class Loader { + + constructor( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + + this.crossOrigin = 'anonymous'; + this.withCredentials = false; + this.path = ''; + this.resourcePath = ''; + this.requestHeader = {}; + + } + + load( /* url, onLoad, onProgress, onError */ ) {} + + loadAsync( url, onProgress ) { + + const scope = this; + + return new Promise( function ( resolve, reject ) { + + scope.load( url, resolve, onProgress, reject ); + + } ); + + } + + parse( /* data */ ) {} + + setCrossOrigin( crossOrigin ) { + + this.crossOrigin = crossOrigin; + return this; + + } + + setWithCredentials( value ) { + + this.withCredentials = value; + return this; + + } + + setPath( path ) { + + this.path = path; + return this; + + } + + setResourcePath( resourcePath ) { + + this.resourcePath = resourcePath; + return this; + + } + + setRequestHeader( requestHeader ) { + + this.requestHeader = requestHeader; + return this; + + } + +} + +const loading = {}; + +class FileLoader extends Loader { + + constructor( manager ) { + + super( manager ); + + } + + load( url, onLoad, onProgress, onError ) { + + if ( url === undefined ) url = ''; + + if ( this.path !== undefined ) url = this.path + url; + + url = this.manager.resolveURL( url ); + + const scope = this; + + const cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) onLoad( cached ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + // Check if request is duplicate + + if ( loading[ url ] !== undefined ) { + + loading[ url ].push( { + + onLoad: onLoad, + onProgress: onProgress, + onError: onError + + } ); + + return; + + } + + // Check for data: URI + const dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/; + const dataUriRegexResult = url.match( dataUriRegex ); + let request; + + // Safari can not handle Data URIs through XMLHttpRequest so process manually + if ( dataUriRegexResult ) { + + const mimeType = dataUriRegexResult[ 1 ]; + const isBase64 = !! dataUriRegexResult[ 2 ]; + + let data = dataUriRegexResult[ 3 ]; + data = decodeURIComponent( data ); + + if ( isBase64 ) data = atob( data ); + + try { + + let response; + const responseType = ( this.responseType || '' ).toLowerCase(); + + switch ( responseType ) { + + case 'arraybuffer': + case 'blob': + + const view = new Uint8Array( data.length ); + + for ( let i = 0; i < data.length; i ++ ) { + + view[ i ] = data.charCodeAt( i ); + + } + + if ( responseType === 'blob' ) { + + response = new Blob( [ view.buffer ], { type: mimeType } ); + + } else { + + response = view.buffer; + + } + + break; + + case 'document': + + const parser = new DOMParser(); + response = parser.parseFromString( data, mimeType ); + + break; + + case 'json': + + response = JSON.parse( data ); + + break; + + default: // 'text' or other + + response = data; + + break; + + } + + // Wait for next browser tick like standard XMLHttpRequest event dispatching does + setTimeout( function () { + + if ( onLoad ) onLoad( response ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + } catch ( error ) { + + // Wait for next browser tick like standard XMLHttpRequest event dispatching does + setTimeout( function () { + + if ( onError ) onError( error ); + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + }, 0 ); + + } + + } else { + + // Initialise array for duplicate requests + + loading[ url ] = []; + + loading[ url ].push( { + + onLoad: onLoad, + onProgress: onProgress, + onError: onError + + } ); + + request = new XMLHttpRequest(); + + request.open( 'GET', url, true ); + + request.addEventListener( 'load', function ( event ) { + + const response = this.response; + + const callbacks = loading[ url ]; + + delete loading[ url ]; + + if ( this.status === 200 || this.status === 0 ) { + + // Some browsers return HTTP Status 0 when using non-http protocol + // e.g. 'file://' or 'data://'. Handle as success. + + if ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' ); + + // Add to cache only on HTTP success, so that we do not cache + // error response bodies as proper responses to requests. + Cache.add( url, response ); + + for ( let i = 0, il = callbacks.length; i < il; i ++ ) { + + const callback = callbacks[ i ]; + if ( callback.onLoad ) callback.onLoad( response ); + + } + + scope.manager.itemEnd( url ); + + } else { + + for ( let i = 0, il = callbacks.length; i < il; i ++ ) { + + const callback = callbacks[ i ]; + if ( callback.onError ) callback.onError( event ); + + } + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + } + + }, false ); + + request.addEventListener( 'progress', function ( event ) { + + const callbacks = loading[ url ]; + + for ( let i = 0, il = callbacks.length; i < il; i ++ ) { + + const callback = callbacks[ i ]; + if ( callback.onProgress ) callback.onProgress( event ); + + } + + }, false ); + + request.addEventListener( 'error', function ( event ) { + + const callbacks = loading[ url ]; + + delete loading[ url ]; + + for ( let i = 0, il = callbacks.length; i < il; i ++ ) { + + const callback = callbacks[ i ]; + if ( callback.onError ) callback.onError( event ); + + } + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + }, false ); + + request.addEventListener( 'abort', function ( event ) { + + const callbacks = loading[ url ]; + + delete loading[ url ]; + + for ( let i = 0, il = callbacks.length; i < il; i ++ ) { + + const callback = callbacks[ i ]; + if ( callback.onError ) callback.onError( event ); + + } + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + }, false ); + + if ( this.responseType !== undefined ) request.responseType = this.responseType; + if ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials; + + if ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' ); + + for ( const header in this.requestHeader ) { + + request.setRequestHeader( header, this.requestHeader[ header ] ); + + } + + request.send( null ); + + } + + scope.manager.itemStart( url ); + + return request; + + } + + setResponseType( value ) { + + this.responseType = value; + return this; + + } + + setMimeType( value ) { + + this.mimeType = value; + return this; + + } + +} + +class AnimationLoader extends Loader { + + constructor( manager ) { + + super( manager ); + + } + + load( url, onLoad, onProgress, onError ) { + + const scope = this; + + const loader = new FileLoader( this.manager ); + loader.setPath( this.path ); + loader.setRequestHeader( this.requestHeader ); + loader.setWithCredentials( this.withCredentials ); + loader.load( url, function ( text ) { + + try { + + onLoad( scope.parse( JSON.parse( text ) ) ); + + } catch ( e ) { + + if ( onError ) { + + onError( e ); + + } else { + + console.error( e ); + + } + + scope.manager.itemError( url ); + + } + + }, onProgress, onError ); + + } + + parse( json ) { + + const animations = []; + + for ( let i = 0; i < json.length; i ++ ) { + + const clip = AnimationClip.parse( json[ i ] ); + + animations.push( clip ); + + } + + return animations; + + } + +} + +/** + * Abstract Base class to block based textures loader (dds, pvr, ...) + * + * Sub classes have to implement the parse() method which will be used in load(). + */ + +class CompressedTextureLoader extends Loader { + + constructor( manager ) { + + super( manager ); + + } + + load( url, onLoad, onProgress, onError ) { + + const scope = this; + + const images = []; + + const texture = new CompressedTexture(); + + const loader = new FileLoader( this.manager ); + loader.setPath( this.path ); + loader.setResponseType( 'arraybuffer' ); + loader.setRequestHeader( this.requestHeader ); + loader.setWithCredentials( scope.withCredentials ); + + let loaded = 0; + + function loadTexture( i ) { + + loader.load( url[ i ], function ( buffer ) { + + const texDatas = scope.parse( buffer, true ); + + images[ i ] = { + width: texDatas.width, + height: texDatas.height, + format: texDatas.format, + mipmaps: texDatas.mipmaps + }; + + loaded += 1; + + if ( loaded === 6 ) { + + if ( texDatas.mipmapCount === 1 ) texture.minFilter = LinearFilter; + + texture.image = images; + texture.format = texDatas.format; + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture ); + + } + + }, onProgress, onError ); + + } + + if ( Array.isArray( url ) ) { + + for ( let i = 0, il = url.length; i < il; ++ i ) { + + loadTexture( i ); + + } + + } else { + + // compressed cubemap texture stored in a single DDS file + + loader.load( url, function ( buffer ) { + + const texDatas = scope.parse( buffer, true ); + + if ( texDatas.isCubemap ) { + + const faces = texDatas.mipmaps.length / texDatas.mipmapCount; + + for ( let f = 0; f < faces; f ++ ) { + + images[ f ] = { mipmaps: [] }; + + for ( let i = 0; i < texDatas.mipmapCount; i ++ ) { + + images[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] ); + images[ f ].format = texDatas.format; + images[ f ].width = texDatas.width; + images[ f ].height = texDatas.height; + + } + + } + + texture.image = images; + + } else { + + texture.image.width = texDatas.width; + texture.image.height = texDatas.height; + texture.mipmaps = texDatas.mipmaps; + + } + + if ( texDatas.mipmapCount === 1 ) { + + texture.minFilter = LinearFilter; + + } + + texture.format = texDatas.format; + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture ); + + }, onProgress, onError ); + + } + + return texture; + + } + +} + +class ImageLoader extends Loader { + + constructor( manager ) { + + super( manager ); + + } + + load( url, onLoad, onProgress, onError ) { + + if ( this.path !== undefined ) url = this.path + url; + + url = this.manager.resolveURL( url ); + + const scope = this; + + const cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) onLoad( cached ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + const image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' ); + + function onImageLoad() { + + image.removeEventListener( 'load', onImageLoad, false ); + image.removeEventListener( 'error', onImageError, false ); + + Cache.add( url, this ); + + if ( onLoad ) onLoad( this ); + + scope.manager.itemEnd( url ); + + } + + function onImageError( event ) { + + image.removeEventListener( 'load', onImageLoad, false ); + image.removeEventListener( 'error', onImageError, false ); + + if ( onError ) onError( event ); + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + } + + image.addEventListener( 'load', onImageLoad, false ); + image.addEventListener( 'error', onImageError, false ); + + if ( url.substr( 0, 5 ) !== 'data:' ) { + + if ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin; + + } + + scope.manager.itemStart( url ); + + image.src = url; + + return image; + + } + +} + +class CubeTextureLoader extends Loader { + + constructor( manager ) { + + super( manager ); + + } + + load( urls, onLoad, onProgress, onError ) { + + const texture = new CubeTexture(); + + const loader = new ImageLoader( this.manager ); + loader.setCrossOrigin( this.crossOrigin ); + loader.setPath( this.path ); + + let loaded = 0; + + function loadTexture( i ) { + + loader.load( urls[ i ], function ( image ) { + + texture.images[ i ] = image; + + loaded ++; + + if ( loaded === 6 ) { + + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture ); + + } + + }, undefined, onError ); + + } + + for ( let i = 0; i < urls.length; ++ i ) { + + loadTexture( i ); + + } + + return texture; + + } + +} + +/** + * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...) + * + * Sub classes have to implement the parse() method which will be used in load(). + */ + +class DataTextureLoader extends Loader { + + constructor( manager ) { + + super( manager ); + + } + + load( url, onLoad, onProgress, onError ) { + + const scope = this; + + const texture = new DataTexture(); + + const loader = new FileLoader( this.manager ); + loader.setResponseType( 'arraybuffer' ); + loader.setRequestHeader( this.requestHeader ); + loader.setPath( this.path ); + loader.setWithCredentials( scope.withCredentials ); + loader.load( url, function ( buffer ) { + + const texData = scope.parse( buffer ); + + if ( ! texData ) return; + + if ( texData.image !== undefined ) { + + texture.image = texData.image; + + } else if ( texData.data !== undefined ) { + + texture.image.width = texData.width; + texture.image.height = texData.height; + texture.image.data = texData.data; + + } + + texture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping; + texture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping; + + texture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter; + texture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter; + + texture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1; + + if ( texData.encoding !== undefined ) { + + texture.encoding = texData.encoding; + + } + + if ( texData.flipY !== undefined ) { + + texture.flipY = texData.flipY; + + } + + if ( texData.format !== undefined ) { + + texture.format = texData.format; + + } + + if ( texData.type !== undefined ) { + + texture.type = texData.type; + + } + + if ( texData.mipmaps !== undefined ) { + + texture.mipmaps = texData.mipmaps; + texture.minFilter = LinearMipmapLinearFilter; // presumably... + + } + + if ( texData.mipmapCount === 1 ) { + + texture.minFilter = LinearFilter; + + } + + if ( texData.generateMipmaps !== undefined ) { + + texture.generateMipmaps = texData.generateMipmaps; + + } + + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture, texData ); + + }, onProgress, onError ); + + + return texture; + + } + +} + +class TextureLoader extends Loader { + + constructor( manager ) { + + super( manager ); + + } + + load( url, onLoad, onProgress, onError ) { + + const texture = new Texture(); + + const loader = new ImageLoader( this.manager ); + loader.setCrossOrigin( this.crossOrigin ); + loader.setPath( this.path ); + + loader.load( url, function ( image ) { + + texture.image = image; + + // JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB. + const isJPEG = url.search( /\.jpe?g($|\?)/i ) > 0 || url.search( /^data\:image\/jpeg/ ) === 0; + + texture.format = isJPEG ? RGBFormat : RGBAFormat; + texture.needsUpdate = true; + + if ( onLoad !== undefined ) { + + onLoad( texture ); + + } + + }, onProgress, onError ); + + return texture; + + } + +} + +/************************************************************** + * Curved Path - a curve path is simply a array of connected + * curves, but retains the api of a curve + **************************************************************/ + +class CurvePath extends Curve { + + constructor() { + + super(); + + this.type = 'CurvePath'; + + this.curves = []; + this.autoClose = false; // Automatically closes the path + + } + + add( curve ) { + + this.curves.push( curve ); + + } + + closePath() { + + // Add a line curve if start and end of lines are not connected + const startPoint = this.curves[ 0 ].getPoint( 0 ); + const endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 ); + + if ( ! startPoint.equals( endPoint ) ) { + + this.curves.push( new LineCurve( endPoint, startPoint ) ); + + } + + } + + // To get accurate point with reference to + // entire path distance at time t, + // following has to be done: + + // 1. Length of each sub path have to be known + // 2. Locate and identify type of curve + // 3. Get t for the curve + // 4. Return curve.getPointAt(t') + + getPoint( t ) { + + const d = t * this.getLength(); + const curveLengths = this.getCurveLengths(); + let i = 0; + + // To think about boundaries points. + + while ( i < curveLengths.length ) { + + if ( curveLengths[ i ] >= d ) { + + const diff = curveLengths[ i ] - d; + const curve = this.curves[ i ]; + + const segmentLength = curve.getLength(); + const u = segmentLength === 0 ? 0 : 1 - diff / segmentLength; + + return curve.getPointAt( u ); + + } + + i ++; + + } + + return null; + + // loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) { + + points.push( points[ 0 ] ); + + } + + return points; + + } + + copy( source ) { + + super.copy( source ); + + this.curves = []; + + for ( let i = 0, l = source.curves.length; i < l; i ++ ) { + + const curve = source.curves[ i ]; + + this.curves.push( curve.clone() ); + + } + + this.autoClose = source.autoClose; + + return this; + + } + + toJSON() { + + const data = super.toJSON(); + + data.autoClose = this.autoClose; + data.curves = []; + + for ( let i = 0, l = this.curves.length; i < l; i ++ ) { + + const curve = this.curves[ i ]; + data.curves.push( curve.toJSON() ); + + } + + return data; + + } + + fromJSON( json ) { + + super.fromJSON( json ); + + this.autoClose = json.autoClose; + this.curves = []; + + for ( let i = 0, l = json.curves.length; i < l; i ++ ) { + + const curve = json.curves[ i ]; + this.curves.push( new Curves[ curve.type ]().fromJSON( curve ) ); + + } + + return this; + + } + +} + +class Path extends CurvePath { + + constructor( points ) { + + super(); + this.type = 'Path'; + + this.currentPoint = new Vector2(); + + if ( points ) { + + this.setFromPoints( points ); + + } + + } + + setFromPoints( points ) { + + this.moveTo( points[ 0 ].x, points[ 0 ].y ); + + for ( let i = 1, l = points.length; i < l; i ++ ) { + + this.lineTo( points[ i ].x, points[ i ].y ); + + } + + return this; + + } + + moveTo( x, y ) { + + this.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying? + + return this; + + } + + lineTo( x, y ) { + + const curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) ); + this.curves.push( curve ); + + this.currentPoint.set( x, y ); + + return this; + + } + + quadraticCurveTo( aCPx, aCPy, aX, aY ) { + + const curve = new QuadraticBezierCurve( + this.currentPoint.clone(), + new Vector2( aCPx, aCPy ), + new Vector2( aX, aY ) + ); + + this.curves.push( curve ); + + this.currentPoint.set( aX, aY ); + + return this; + + } + + bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { + + const curve = new CubicBezierCurve( + this.currentPoint.clone(), + new Vector2( aCP1x, aCP1y ), + new Vector2( aCP2x, aCP2y ), + new Vector2( aX, aY ) + ); + + this.curves.push( curve ); + + this.currentPoint.set( aX, aY ); + + return this; + + } + + splineThru( pts /*Array of Vector*/ ) { + + const npts = [ this.currentPoint.clone() ].concat( pts ); + + const curve = new SplineCurve( npts ); + this.curves.push( curve ); + + this.currentPoint.copy( pts[ pts.length - 1 ] ); + + return this; + + } + + arc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + const x0 = this.currentPoint.x; + const y0 = this.currentPoint.y; + + this.absarc( aX + x0, aY + y0, aRadius, + aStartAngle, aEndAngle, aClockwise ); + + return this; + + } + + absarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + this.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); + + return this; + + } + + ellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + const x0 = this.currentPoint.x; + const y0 = this.currentPoint.y; + + this.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); + + return this; + + } + + absellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + const curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); + + if ( this.curves.length > 0 ) { + + // if a previous curve is present, attempt to join + const firstPoint = curve.getPoint( 0 ); + + if ( ! firstPoint.equals( this.currentPoint ) ) { + + this.lineTo( firstPoint.x, firstPoint.y ); + + } + + } + + this.curves.push( curve ); + + const lastPoint = curve.getPoint( 1 ); + this.currentPoint.copy( lastPoint ); + + return this; + + } + + copy( source ) { + + super.copy( source ); + + this.currentPoint.copy( source.currentPoint ); + + return this; + + } + + toJSON() { + + const data = super.toJSON(); + + data.currentPoint = this.currentPoint.toArray(); + + return data; + + } + + fromJSON( json ) { + + super.fromJSON( json ); + + this.currentPoint.fromArray( json.currentPoint ); + + return this; + + } + +} + +class Shape extends Path { + + constructor( points ) { + + super( points ); + + this.uuid = generateUUID(); + + this.type = 'Shape'; + + this.holes = []; + + } + + getPointsHoles( divisions ) { + + const holesPts = []; + + for ( let i = 0, l = this.holes.length; i < l; i ++ ) { + + holesPts[ i ] = this.holes[ i ].getPoints( divisions ); + + } + + return holesPts; + + } + + // get points of shape and holes (keypoints based on segments parameter) + + extractPoints( divisions ) { + + return { + + shape: this.getPoints( divisions ), + holes: this.getPointsHoles( divisions ) + + }; + + } + + copy( source ) { + + super.copy( source ); + + this.holes = []; + + for ( let i = 0, l = source.holes.length; i < l; i ++ ) { + + const hole = source.holes[ i ]; + + this.holes.push( hole.clone() ); + + } + + return this; + + } + + toJSON() { + + const data = super.toJSON(); + + data.uuid = this.uuid; + data.holes = []; + + for ( let i = 0, l = this.holes.length; i < l; i ++ ) { + + const hole = this.holes[ i ]; + data.holes.push( hole.toJSON() ); + + } + + return data; + + } + + fromJSON( json ) { + + super.fromJSON( json ); + + this.uuid = json.uuid; + this.holes = []; + + for ( let i = 0, l = json.holes.length; i < l; i ++ ) { + + const hole = json.holes[ i ]; + this.holes.push( new Path().fromJSON( hole ) ); + + } + + return this; + + } + +} + +class Light extends Object3D { + + constructor( color, intensity = 1 ) { + + super(); + + this.type = 'Light'; + + this.color = new Color( color ); + this.intensity = intensity; + + } + + dispose() { + + // Empty here in base class; some subclasses override. + + } + + copy( source ) { + + super.copy( source ); + + this.color.copy( source.color ); + this.intensity = source.intensity; + + return this; + + } + + toJSON( meta ) { + + const data = super.toJSON( meta ); + + data.object.color = this.color.getHex(); + data.object.intensity = this.intensity; + + if ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex(); + + if ( this.distance !== undefined ) data.object.distance = this.distance; + if ( this.angle !== undefined ) data.object.angle = this.angle; + if ( this.decay !== undefined ) data.object.decay = this.decay; + if ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra; + + if ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON(); + + return data; + + } + +} + +Light.prototype.isLight = true; + +class HemisphereLight extends Light { + + constructor( skyColor, groundColor, intensity ) { + + super( skyColor, intensity ); + + this.type = 'HemisphereLight'; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.groundColor = new Color( groundColor ); + + } + + copy( source ) { + + Light.prototype.copy.call( this, source ); + + this.groundColor.copy( source.groundColor ); + + return this; + + } + +} + +HemisphereLight.prototype.isHemisphereLight = true; + +const _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4(); +const _lightPositionWorld$1 = /*@__PURE__*/ new Vector3(); +const _lookTarget$1 = /*@__PURE__*/ new Vector3(); + +class LightShadow { + + constructor( camera ) { + + this.camera = camera; + + this.bias = 0; + this.normalBias = 0; + this.radius = 1; + + this.mapSize = new Vector2( 512, 512 ); + + this.map = null; + this.mapPass = null; + this.matrix = new Matrix4(); + + this.autoUpdate = true; + this.needsUpdate = false; + + this._frustum = new Frustum(); + this._frameExtents = new Vector2( 1, 1 ); + + this._viewportCount = 1; + + this._viewports = [ + + new Vector4( 0, 0, 1, 1 ) + + ]; + + } + + getViewportCount() { + + return this._viewportCount; + + } + + getFrustum() { + + return this._frustum; + + } + + updateMatrices( light ) { + + const shadowCamera = this.camera; + const shadowMatrix = this.matrix; + + _lightPositionWorld$1.setFromMatrixPosition( light.matrixWorld ); + shadowCamera.position.copy( _lightPositionWorld$1 ); + + _lookTarget$1.setFromMatrixPosition( light.target.matrixWorld ); + shadowCamera.lookAt( _lookTarget$1 ); + shadowCamera.updateMatrixWorld(); + + _projScreenMatrix$1.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse ); + this._frustum.setFromProjectionMatrix( _projScreenMatrix$1 ); + + shadowMatrix.set( + 0.5, 0.0, 0.0, 0.5, + 0.0, 0.5, 0.0, 0.5, + 0.0, 0.0, 0.5, 0.5, + 0.0, 0.0, 0.0, 1.0 + ); + + shadowMatrix.multiply( shadowCamera.projectionMatrix ); + shadowMatrix.multiply( shadowCamera.matrixWorldInverse ); + + } + + getViewport( viewportIndex ) { + + return this._viewports[ viewportIndex ]; + + } + + getFrameExtents() { + + return this._frameExtents; + + } + + dispose() { + + if ( this.map ) { + + this.map.dispose(); + + } + + if ( this.mapPass ) { + + this.mapPass.dispose(); + + } + + } + + copy( source ) { + + this.camera = source.camera.clone(); + + this.bias = source.bias; + this.radius = source.radius; + + this.mapSize.copy( source.mapSize ); + + return this; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + toJSON() { + + const object = {}; + + if ( this.bias !== 0 ) object.bias = this.bias; + if ( this.normalBias !== 0 ) object.normalBias = this.normalBias; + if ( this.radius !== 1 ) object.radius = this.radius; + if ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray(); + + object.camera = this.camera.toJSON( false ).object; + delete object.camera.matrix; + + return object; + + } + +} + +class SpotLightShadow extends LightShadow { + + constructor() { + + super( new PerspectiveCamera( 50, 1, 0.5, 500 ) ); + + this.focus = 1; + + } + + updateMatrices( light ) { + + const camera = this.camera; + + const fov = RAD2DEG * 2 * light.angle * this.focus; + const aspect = this.mapSize.width / this.mapSize.height; + const far = light.distance || camera.far; + + if ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) { + + camera.fov = fov; + camera.aspect = aspect; + camera.far = far; + camera.updateProjectionMatrix(); + + } + + super.updateMatrices( light ); + + } + + copy( source ) { + + super.copy( source ); + + this.focus = source.focus; + + return this; + + } + +} + +SpotLightShadow.prototype.isSpotLightShadow = true; + +class SpotLight extends Light { + + constructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 1 ) { + + super( color, intensity ); + + this.type = 'SpotLight'; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.target = new Object3D(); + + this.distance = distance; + this.angle = angle; + this.penumbra = penumbra; + this.decay = decay; // for physically correct lights, should be 2. + + this.shadow = new SpotLightShadow(); + + } + + get power() { + + // intensity = power per solid angle. + // ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf + return this.intensity * Math.PI; + + } + + set power( power ) { + + // intensity = power per solid angle. + // ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf + this.intensity = power / Math.PI; + + } + + dispose() { + + this.shadow.dispose(); + + } + + copy( source ) { + + super.copy( source ); + + this.distance = source.distance; + this.angle = source.angle; + this.penumbra = source.penumbra; + this.decay = source.decay; + + this.target = source.target.clone(); + + this.shadow = source.shadow.clone(); + + return this; + + } + +} + +SpotLight.prototype.isSpotLight = true; + +const _projScreenMatrix = /*@__PURE__*/ new Matrix4(); +const _lightPositionWorld = /*@__PURE__*/ new Vector3(); +const _lookTarget = /*@__PURE__*/ new Vector3(); + +class PointLightShadow extends LightShadow { + + constructor() { + + super( new PerspectiveCamera( 90, 1, 0.5, 500 ) ); + + this._frameExtents = new Vector2( 4, 2 ); + + this._viewportCount = 6; + + this._viewports = [ + // These viewports map a cube-map onto a 2D texture with the + // following orientation: + // + // xzXZ + // y Y + // + // X - Positive x direction + // x - Negative x direction + // Y - Positive y direction + // y - Negative y direction + // Z - Positive z direction + // z - Negative z direction + + // positive X + new Vector4( 2, 1, 1, 1 ), + // negative X + new Vector4( 0, 1, 1, 1 ), + // positive Z + new Vector4( 3, 1, 1, 1 ), + // negative Z + new Vector4( 1, 1, 1, 1 ), + // positive Y + new Vector4( 3, 0, 1, 1 ), + // negative Y + new Vector4( 1, 0, 1, 1 ) + ]; + + this._cubeDirections = [ + new Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ), + new Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 ) + ]; + + this._cubeUps = [ + new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), + new Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ), new Vector3( 0, 0, - 1 ) + ]; + + } + + updateMatrices( light, viewportIndex = 0 ) { + + const camera = this.camera; + const shadowMatrix = this.matrix; + + const far = light.distance || camera.far; + + if ( far !== camera.far ) { + + camera.far = far; + camera.updateProjectionMatrix(); + + } + + _lightPositionWorld.setFromMatrixPosition( light.matrixWorld ); + camera.position.copy( _lightPositionWorld ); + + _lookTarget.copy( camera.position ); + _lookTarget.add( this._cubeDirections[ viewportIndex ] ); + camera.up.copy( this._cubeUps[ viewportIndex ] ); + camera.lookAt( _lookTarget ); + camera.updateMatrixWorld(); + + shadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z ); + + _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); + this._frustum.setFromProjectionMatrix( _projScreenMatrix ); + + } + +} + +PointLightShadow.prototype.isPointLightShadow = true; + +class PointLight extends Light { + + constructor( color, intensity, distance = 0, decay = 1 ) { + + super( color, intensity ); + + this.type = 'PointLight'; + + this.distance = distance; + this.decay = decay; // for physically correct lights, should be 2. + + this.shadow = new PointLightShadow(); + + } + + get power() { + + // intensity = power per solid angle. + // ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf + return this.intensity * 4 * Math.PI; + + } + + set power( power ) { + + // intensity = power per solid angle. + // ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf + this.intensity = power / ( 4 * Math.PI ); + + } + + dispose() { + + this.shadow.dispose(); + + } + + copy( source ) { + + super.copy( source ); + + this.distance = source.distance; + this.decay = source.decay; + + this.shadow = source.shadow.clone(); + + return this; + + } + +} + +PointLight.prototype.isPointLight = true; + +class DirectionalLightShadow extends LightShadow { + + constructor() { + + super( new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) ); + + } + +} + +DirectionalLightShadow.prototype.isDirectionalLightShadow = true; + +class DirectionalLight extends Light { + + constructor( color, intensity ) { + + super( color, intensity ); + + this.type = 'DirectionalLight'; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.target = new Object3D(); + + this.shadow = new DirectionalLightShadow(); + + } + + dispose() { + + this.shadow.dispose(); + + } + + copy( source ) { + + super.copy( source ); + + this.target = source.target.clone(); + this.shadow = source.shadow.clone(); + + return this; + + } + +} + +DirectionalLight.prototype.isDirectionalLight = true; + +class AmbientLight extends Light { + + constructor( color, intensity ) { + + super( color, intensity ); + + this.type = 'AmbientLight'; + + } + +} + +AmbientLight.prototype.isAmbientLight = true; + +class RectAreaLight extends Light { + + constructor( color, intensity, width = 10, height = 10 ) { + + super( color, intensity ); + + this.type = 'RectAreaLight'; + + this.width = width; + this.height = height; + + } + + copy( source ) { + + super.copy( source ); + + this.width = source.width; + this.height = source.height; + + return this; + + } + + toJSON( meta ) { + + const data = super.toJSON( meta ); + + data.object.width = this.width; + data.object.height = this.height; + + return data; + + } + +} + +RectAreaLight.prototype.isRectAreaLight = true; + +/** + * Primary reference: + * https://graphics.stanford.edu/papers/envmap/envmap.pdf + * + * Secondary reference: + * https://www.ppsloan.org/publications/StupidSH36.pdf + */ + +// 3-band SH defined by 9 coefficients + +class SphericalHarmonics3 { + + constructor() { + + this.coefficients = []; + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients.push( new Vector3() ); + + } + + } + + set( coefficients ) { + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].copy( coefficients[ i ] ); + + } + + return this; + + } + + zero() { + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].set( 0, 0, 0 ); + + } + + return this; + + } + + // get the radiance in the direction of the normal + // target is a Vector3 + getAt( normal, target ) { + + // normal is assumed to be unit length + + const x = normal.x, y = normal.y, z = normal.z; + + const coeff = this.coefficients; + + // band 0 + target.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 ); + + // band 1 + target.addScaledVector( coeff[ 1 ], 0.488603 * y ); + target.addScaledVector( coeff[ 2 ], 0.488603 * z ); + target.addScaledVector( coeff[ 3 ], 0.488603 * x ); + + // band 2 + target.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) ); + target.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) ); + target.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) ); + target.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) ); + target.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) ); + + return target; + + } + + // get the irradiance (radiance convolved with cosine lobe) in the direction of the normal + // target is a Vector3 + // https://graphics.stanford.edu/papers/envmap/envmap.pdf + getIrradianceAt( normal, target ) { + + // normal is assumed to be unit length + + const x = normal.x, y = normal.y, z = normal.z; + + const coeff = this.coefficients; + + // band 0 + target.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095 + + // band 1 + target.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603 + target.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z ); + target.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x ); + + // band 2 + target.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548 + target.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z ); + target.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3 + target.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z ); + target.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274 + + return target; + + } + + add( sh ) { + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].add( sh.coefficients[ i ] ); + + } + + return this; + + } + + addScaledSH( sh, s ) { + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s ); + + } + + return this; + + } + + scale( s ) { + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].multiplyScalar( s ); + + } + + return this; + + } + + lerp( sh, alpha ) { + + for ( let i = 0; i < 9; i ++ ) { + + this.coefficients[ i ].lerp( sh.coefficients[ i ], alpha ); + + } + + return this; + + } + + equals( sh ) { + + for ( let i = 0; i < 9; i ++ ) { + + if ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) { + + return false; + + } + + } + + return true; + + } + + copy( sh ) { + + return this.set( sh.coefficients ); + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + fromArray( array, offset = 0 ) { + + const coefficients = this.coefficients; + + for ( let i = 0; i < 9; i ++ ) { + + coefficients[ i ].fromArray( array, offset + ( i * 3 ) ); + + } + + return this; + + } + + toArray( array = [], offset = 0 ) { + + const coefficients = this.coefficients; + + for ( let i = 0; i < 9; i ++ ) { + + coefficients[ i ].toArray( array, offset + ( i * 3 ) ); + + } + + return array; + + } + + // evaluate the basis functions + // shBasis is an Array[ 9 ] + static getBasisAt( normal, shBasis ) { + + // normal is assumed to be unit length + + const x = normal.x, y = normal.y, z = normal.z; + + // band 0 + shBasis[ 0 ] = 0.282095; + + // band 1 + shBasis[ 1 ] = 0.488603 * y; + shBasis[ 2 ] = 0.488603 * z; + shBasis[ 3 ] = 0.488603 * x; + + // band 2 + shBasis[ 4 ] = 1.092548 * x * y; + shBasis[ 5 ] = 1.092548 * y * z; + shBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 ); + shBasis[ 7 ] = 1.092548 * x * z; + shBasis[ 8 ] = 0.546274 * ( x * x - y * y ); + + } + +} + +SphericalHarmonics3.prototype.isSphericalHarmonics3 = true; + +class LightProbe extends Light { + + constructor( sh = new SphericalHarmonics3(), intensity = 1 ) { + + super( undefined, intensity ); + + this.sh = sh; + + } + + copy( source ) { + + super.copy( source ); + + this.sh.copy( source.sh ); + + return this; + + } + + fromJSON( json ) { + + this.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON(); + this.sh.fromArray( json.sh ); + + return this; + + } + + toJSON( meta ) { + + const data = super.toJSON( meta ); + + data.object.sh = this.sh.toArray(); + + return data; + + } + +} + +LightProbe.prototype.isLightProbe = true; + +class MaterialLoader extends Loader { + + constructor( manager ) { + + super( manager ); + this.textures = {}; + + } + + load( url, onLoad, onProgress, onError ) { + + const scope = this; + + const loader = new FileLoader( scope.manager ); + loader.setPath( scope.path ); + loader.setRequestHeader( scope.requestHeader ); + loader.setWithCredentials( scope.withCredentials ); + loader.load( url, function ( text ) { + + try { + + onLoad( scope.parse( JSON.parse( text ) ) ); + + } catch ( e ) { + + if ( onError ) { + + onError( e ); + + } else { + + console.error( e ); + + } + + scope.manager.itemError( url ); + + } + + }, onProgress, onError ); + + } + + parse( json ) { + + const textures = this.textures; + + function getTexture( name ) { + + if ( textures[ name ] === undefined ) { + + console.warn( 'THREE.MaterialLoader: Undefined texture', name ); + + } + + return textures[ name ]; + + } + + const material = new Materials[ json.type ](); + + if ( json.uuid !== undefined ) material.uuid = json.uuid; + if ( json.name !== undefined ) material.name = json.name; + if ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color ); + if ( json.roughness !== undefined ) material.roughness = json.roughness; + if ( json.metalness !== undefined ) material.metalness = json.metalness; + if ( json.sheen !== undefined ) material.sheen = new Color().setHex( json.sheen ); + if ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive ); + if ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular ); + if ( json.specularIntensity !== undefined ) material.specularIntensity = json.specularIntensity; + if ( json.specularTint !== undefined && material.specularTint !== undefined ) material.specularTint.setHex( json.specularTint ); + if ( json.shininess !== undefined ) material.shininess = json.shininess; + if ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat; + if ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness; + if ( json.transmission !== undefined ) material.transmission = json.transmission; + if ( json.thickness !== undefined ) material.thickness = json.thickness; + if ( json.attenuationDistance !== undefined ) material.attenuationDistance = json.attenuationDistance; + if ( json.attenuationTint !== undefined && material.attenuationTint !== undefined ) material.attenuationTint.setHex( json.attenuationTint ); + if ( json.fog !== undefined ) material.fog = json.fog; + if ( json.flatShading !== undefined ) material.flatShading = json.flatShading; + if ( json.blending !== undefined ) material.blending = json.blending; + if ( json.combine !== undefined ) material.combine = json.combine; + if ( json.side !== undefined ) material.side = json.side; + if ( json.shadowSide !== undefined ) material.shadowSide = json.shadowSide; + if ( json.opacity !== undefined ) material.opacity = json.opacity; + if ( json.transparent !== undefined ) material.transparent = json.transparent; + if ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest; + if ( json.depthTest !== undefined ) material.depthTest = json.depthTest; + if ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite; + if ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite; + + if ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite; + if ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask; + if ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc; + if ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef; + if ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask; + if ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail; + if ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail; + if ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass; + + if ( json.wireframe !== undefined ) material.wireframe = json.wireframe; + if ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth; + if ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap; + if ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin; + + if ( json.rotation !== undefined ) material.rotation = json.rotation; + + if ( json.linewidth !== 1 ) material.linewidth = json.linewidth; + if ( json.dashSize !== undefined ) material.dashSize = json.dashSize; + if ( json.gapSize !== undefined ) material.gapSize = json.gapSize; + if ( json.scale !== undefined ) material.scale = json.scale; + + if ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset; + if ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor; + if ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits; + + if ( json.dithering !== undefined ) material.dithering = json.dithering; + + if ( json.alphaToCoverage !== undefined ) material.alphaToCoverage = json.alphaToCoverage; + if ( json.premultipliedAlpha !== undefined ) material.premultipliedAlpha = json.premultipliedAlpha; + + if ( json.visible !== undefined ) material.visible = json.visible; + + if ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped; + + if ( json.userData !== undefined ) material.userData = json.userData; + + if ( json.vertexColors !== undefined ) { + + if ( typeof json.vertexColors === 'number' ) { + + material.vertexColors = ( json.vertexColors > 0 ) ? true : false; + + } else { + + material.vertexColors = json.vertexColors; + + } + + } + + // Shader Material + + if ( json.uniforms !== undefined ) { + + for ( const name in json.uniforms ) { + + const uniform = json.uniforms[ name ]; + + material.uniforms[ name ] = {}; + + switch ( uniform.type ) { + + case 't': + material.uniforms[ name ].value = getTexture( uniform.value ); + break; + + case 'c': + material.uniforms[ name ].value = new Color().setHex( uniform.value ); + break; + + case 'v2': + material.uniforms[ name ].value = new Vector2().fromArray( uniform.value ); + break; + + case 'v3': + material.uniforms[ name ].value = new Vector3().fromArray( uniform.value ); + break; + + case 'v4': + material.uniforms[ name ].value = new Vector4().fromArray( uniform.value ); + break; + + case 'm3': + material.uniforms[ name ].value = new Matrix3().fromArray( uniform.value ); + break; + + case 'm4': + material.uniforms[ name ].value = new Matrix4().fromArray( uniform.value ); + break; + + default: + material.uniforms[ name ].value = uniform.value; + + } + + } + + } + + if ( json.defines !== undefined ) material.defines = json.defines; + if ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader; + if ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader; + + if ( json.extensions !== undefined ) { + + for ( const key in json.extensions ) { + + material.extensions[ key ] = json.extensions[ key ]; + + } + + } + + // Deprecated + + if ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading + + // for PointsMaterial + + if ( json.size !== undefined ) material.size = json.size; + if ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation; + + // maps + + if ( json.map !== undefined ) material.map = getTexture( json.map ); + if ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap ); + + if ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap ); + + if ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap ); + if ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale; + + if ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap ); + if ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType; + if ( json.normalScale !== undefined ) { + + let normalScale = json.normalScale; + + if ( Array.isArray( normalScale ) === false ) { + + // Blender exporter used to export a scalar. See #7459 + + normalScale = [ normalScale, normalScale ]; + + } + + material.normalScale = new Vector2().fromArray( normalScale ); + + } + + if ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap ); + if ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale; + if ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias; + + if ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap ); + if ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap ); + + if ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap ); + if ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity; + + if ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap ); + if ( json.specularIntensityMap !== undefined ) material.specularIntensityMap = getTexture( json.specularIntensityMap ); + if ( json.specularTintMap !== undefined ) material.specularTintMap = getTexture( json.specularTintMap ); + + if ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap ); + if ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity; + + if ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity; + if ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio; + + if ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap ); + if ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity; + + if ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap ); + if ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity; + + if ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap ); + + if ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap ); + if ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap ); + if ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap ); + if ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale ); + + if ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap ); + if ( json.thicknessMap !== undefined ) material.thicknessMap = getTexture( json.thicknessMap ); + + return material; + + } + + setTextures( value ) { + + this.textures = value; + return this; + + } + +} + +class LoaderUtils { + + static decodeText( array ) { + + if ( typeof TextDecoder !== 'undefined' ) { + + return new TextDecoder().decode( array ); + + } + + // Avoid the String.fromCharCode.apply(null, array) shortcut, which + // throws a "maximum call stack size exceeded" error for large arrays. + + let s = ''; + + for ( let i = 0, il = array.length; i < il; i ++ ) { + + // Implicitly assumes little-endian. + s += String.fromCharCode( array[ i ] ); + + } + + try { + + // merges multi-byte utf-8 characters. + + return decodeURIComponent( escape( s ) ); + + } catch ( e ) { // see #16358 + + return s; + + } + + } + + static extractUrlBase( url ) { + + const index = url.lastIndexOf( '/' ); + + if ( index === - 1 ) return './'; + + return url.substr( 0, index + 1 ); + + } + +} + +class InstancedBufferGeometry extends BufferGeometry { + + constructor() { + + super(); + + this.type = 'InstancedBufferGeometry'; + this.instanceCount = Infinity; + + } + + copy( source ) { + + super.copy( source ); + + this.instanceCount = source.instanceCount; + + return this; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + + toJSON() { + + const data = super.toJSON( this ); + + data.instanceCount = this.instanceCount; + + data.isInstancedBufferGeometry = true; + + return data; + + } + +} + +InstancedBufferGeometry.prototype.isInstancedBufferGeometry = true; + +class InstancedBufferAttribute extends BufferAttribute { + + constructor( array, itemSize, normalized, meshPerAttribute = 1 ) { + + if ( typeof normalized === 'number' ) { + + meshPerAttribute = normalized; + + normalized = false; + + console.error( 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.' ); + + } + + super( array, itemSize, normalized ); + + this.meshPerAttribute = meshPerAttribute; + + } + + copy( source ) { + + super.copy( source ); + + this.meshPerAttribute = source.meshPerAttribute; + + return this; + + } + + toJSON() { + + const data = super.toJSON(); + + data.meshPerAttribute = this.meshPerAttribute; + + data.isInstancedBufferAttribute = true; + + return data; + + } + +} + +InstancedBufferAttribute.prototype.isInstancedBufferAttribute = true; + +class BufferGeometryLoader extends Loader { + + constructor( manager ) { + + super( manager ); + + } + + load( url, onLoad, onProgress, onError ) { + + const scope = this; + + const loader = new FileLoader( scope.manager ); + loader.setPath( scope.path ); + loader.setRequestHeader( scope.requestHeader ); + loader.setWithCredentials( scope.withCredentials ); + loader.load( url, function ( text ) { + + try { + + onLoad( scope.parse( JSON.parse( text ) ) ); + + } catch ( e ) { + + if ( onError ) { + + onError( e ); + + } else { + + console.error( e ); + + } + + scope.manager.itemError( url ); + + } + + }, onProgress, onError ); + + } + + parse( json ) { + + const interleavedBufferMap = {}; + const arrayBufferMap = {}; + + function getInterleavedBuffer( json, uuid ) { + + if ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ]; + + const interleavedBuffers = json.interleavedBuffers; + const interleavedBuffer = interleavedBuffers[ uuid ]; + + const buffer = getArrayBuffer( json, interleavedBuffer.buffer ); + + const array = getTypedArray( interleavedBuffer.type, buffer ); + const ib = new InterleavedBuffer( array, interleavedBuffer.stride ); + ib.uuid = interleavedBuffer.uuid; + + interleavedBufferMap[ uuid ] = ib; + + return ib; + + } + + function getArrayBuffer( json, uuid ) { + + if ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ]; + + const arrayBuffers = json.arrayBuffers; + const arrayBuffer = arrayBuffers[ uuid ]; + + const ab = new Uint32Array( arrayBuffer ).buffer; + + arrayBufferMap[ uuid ] = ab; + + return ab; + + } + + const geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry(); + + const index = json.data.index; + + if ( index !== undefined ) { + + const typedArray = getTypedArray( index.type, index.array ); + geometry.setIndex( new BufferAttribute( typedArray, 1 ) ); + + } + + const attributes = json.data.attributes; + + for ( const key in attributes ) { + + const attribute = attributes[ key ]; + let bufferAttribute; + + if ( attribute.isInterleavedBufferAttribute ) { + + const interleavedBuffer = getInterleavedBuffer( json.data, attribute.data ); + bufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized ); + + } else { + + const typedArray = getTypedArray( attribute.type, attribute.array ); + const bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute; + bufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized ); + + } + + if ( attribute.name !== undefined ) bufferAttribute.name = attribute.name; + if ( attribute.usage !== undefined ) bufferAttribute.setUsage( attribute.usage ); + + if ( attribute.updateRange !== undefined ) { + + bufferAttribute.updateRange.offset = attribute.updateRange.offset; + bufferAttribute.updateRange.count = attribute.updateRange.count; + + } + + geometry.setAttribute( key, bufferAttribute ); + + } + + const morphAttributes = json.data.morphAttributes; + + if ( morphAttributes ) { + + for ( const key in morphAttributes ) { + + const attributeArray = morphAttributes[ key ]; + + const array = []; + + for ( let i = 0, il = attributeArray.length; i < il; i ++ ) { + + const attribute = attributeArray[ i ]; + let bufferAttribute; + + if ( attribute.isInterleavedBufferAttribute ) { + + const interleavedBuffer = getInterleavedBuffer( json.data, attribute.data ); + bufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized ); + + } else { + + const typedArray = getTypedArray( attribute.type, attribute.array ); + bufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ); + + } + + if ( attribute.name !== undefined ) bufferAttribute.name = attribute.name; + array.push( bufferAttribute ); + + } + + geometry.morphAttributes[ key ] = array; + + } + + } + + const morphTargetsRelative = json.data.morphTargetsRelative; + + if ( morphTargetsRelative ) { + + geometry.morphTargetsRelative = true; + + } + + const groups = json.data.groups || json.data.drawcalls || json.data.offsets; + + if ( groups !== undefined ) { + + for ( let i = 0, n = groups.length; i !== n; ++ i ) { + + const group = groups[ i ]; + + geometry.addGroup( group.start, group.count, group.materialIndex ); + + } + + } + + const boundingSphere = json.data.boundingSphere; + + if ( boundingSphere !== undefined ) { + + const center = new Vector3(); + + if ( boundingSphere.center !== undefined ) { + + center.fromArray( boundingSphere.center ); + + } + + geometry.boundingSphere = new Sphere( center, boundingSphere.radius ); + + } + + if ( json.name ) geometry.name = json.name; + if ( json.userData ) geometry.userData = json.userData; + + return geometry; + + } + +} + +class ObjectLoader extends Loader { + + constructor( manager ) { + + super( manager ); + + } + + load( url, onLoad, onProgress, onError ) { + + const scope = this; + + const path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path; + this.resourcePath = this.resourcePath || path; + + const loader = new FileLoader( this.manager ); + loader.setPath( this.path ); + loader.setRequestHeader( this.requestHeader ); + loader.setWithCredentials( this.withCredentials ); + loader.load( url, function ( text ) { + + let json = null; + + try { + + json = JSON.parse( text ); + + } catch ( error ) { + + if ( onError !== undefined ) onError( error ); + + console.error( 'THREE:ObjectLoader: Can\'t parse ' + url + '.', error.message ); + + return; + + } + + const metadata = json.metadata; + + if ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) { + + console.error( 'THREE.ObjectLoader: Can\'t load ' + url ); + return; + + } + + scope.parse( json, onLoad ); + + }, onProgress, onError ); + + } + + async loadAsync( url, onProgress ) { + + const scope = this; + + const path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path; + this.resourcePath = this.resourcePath || path; + + const loader = new FileLoader( this.manager ); + loader.setPath( this.path ); + loader.setRequestHeader( this.requestHeader ); + loader.setWithCredentials( this.withCredentials ); + + const text = await loader.loadAsync( url, onProgress ); + + const json = JSON.parse( text ); + + const metadata = json.metadata; + + if ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) { + + throw new Error( 'THREE.ObjectLoader: Can\'t load ' + url ); + + } + + return await scope.parseAsync( json ); + + } + + parse( json, onLoad ) { + + const animations = this.parseAnimations( json.animations ); + const shapes = this.parseShapes( json.shapes ); + const geometries = this.parseGeometries( json.geometries, shapes ); + + const images = this.parseImages( json.images, function () { + + if ( onLoad !== undefined ) onLoad( object ); + + } ); + + const textures = this.parseTextures( json.textures, images ); + const materials = this.parseMaterials( json.materials, textures ); + + const object = this.parseObject( json.object, geometries, materials, textures, animations ); + const skeletons = this.parseSkeletons( json.skeletons, object ); + + this.bindSkeletons( object, skeletons ); + + // + + if ( onLoad !== undefined ) { + + let hasImages = false; + + for ( const uuid in images ) { + + if ( images[ uuid ] instanceof HTMLImageElement ) { + + hasImages = true; + break; + + } + + } + + if ( hasImages === false ) onLoad( object ); + + } + + return object; + + } + + async parseAsync( json ) { + + const animations = this.parseAnimations( json.animations ); + const shapes = this.parseShapes( json.shapes ); + const geometries = this.parseGeometries( json.geometries, shapes ); + + const images = await this.parseImagesAsync( json.images ); + + const textures = this.parseTextures( json.textures, images ); + const materials = this.parseMaterials( json.materials, textures ); + + const object = this.parseObject( json.object, geometries, materials, textures, animations ); + const skeletons = this.parseSkeletons( json.skeletons, object ); + + this.bindSkeletons( object, skeletons ); + + return object; + + } + + parseShapes( json ) { + + const shapes = {}; + + if ( json !== undefined ) { + + for ( let i = 0, l = json.length; i < l; i ++ ) { + + const shape = new Shape().fromJSON( json[ i ] ); + + shapes[ shape.uuid ] = shape; + + } + + } + + return shapes; + + } + + parseSkeletons( json, object ) { + + const skeletons = {}; + const bones = {}; + + // generate bone lookup table + + object.traverse( function ( child ) { + + if ( child.isBone ) bones[ child.uuid ] = child; + + } ); + + // create skeletons + + if ( json !== undefined ) { + + for ( let i = 0, l = json.length; i < l; i ++ ) { + + const skeleton = new Skeleton().fromJSON( json[ i ], bones ); + + skeletons[ skeleton.uuid ] = skeleton; + + } + + } + + return skeletons; + + } + + parseGeometries( json, shapes ) { + + const geometries = {}; + + if ( json !== undefined ) { + + const bufferGeometryLoader = new BufferGeometryLoader(); + + for ( let i = 0, l = json.length; i < l; i ++ ) { + + let geometry; + const data = json[ i ]; + + switch ( data.type ) { + + case 'BufferGeometry': + case 'InstancedBufferGeometry': + + geometry = bufferGeometryLoader.parse( data ); + + break; + + case 'Geometry': + + console.error( 'THREE.ObjectLoader: The legacy Geometry type is no longer supported.' ); + + break; + + default: + + if ( data.type in Geometries ) { + + geometry = Geometries[ data.type ].fromJSON( data, shapes ); + + } else { + + console.warn( `THREE.ObjectLoader: Unsupported geometry type "${ data.type }"` ); + + } + + } + + geometry.uuid = data.uuid; + + if ( data.name !== undefined ) geometry.name = data.name; + if ( geometry.isBufferGeometry === true && data.userData !== undefined ) geometry.userData = data.userData; + + geometries[ data.uuid ] = geometry; + + } + + } + + return geometries; + + } + + parseMaterials( json, textures ) { + + const cache = {}; // MultiMaterial + const materials = {}; + + if ( json !== undefined ) { + + const loader = new MaterialLoader(); + loader.setTextures( textures ); + + for ( let i = 0, l = json.length; i < l; i ++ ) { + + const data = json[ i ]; + + if ( data.type === 'MultiMaterial' ) { + + // Deprecated + + const array = []; + + for ( let j = 0; j < data.materials.length; j ++ ) { + + const material = data.materials[ j ]; + + if ( cache[ material.uuid ] === undefined ) { + + cache[ material.uuid ] = loader.parse( material ); + + } + + array.push( cache[ material.uuid ] ); + + } + + materials[ data.uuid ] = array; + + } else { + + if ( cache[ data.uuid ] === undefined ) { + + cache[ data.uuid ] = loader.parse( data ); + + } + + materials[ data.uuid ] = cache[ data.uuid ]; + + } + + } + + } + + return materials; + + } + + parseAnimations( json ) { + + const animations = {}; + + if ( json !== undefined ) { + + for ( let i = 0; i < json.length; i ++ ) { + + const data = json[ i ]; + + const clip = AnimationClip.parse( data ); + + animations[ clip.uuid ] = clip; + + } + + } + + return animations; + + } + + parseImages( json, onLoad ) { + + const scope = this; + const images = {}; + + let loader; + + function loadImage( url ) { + + scope.manager.itemStart( url ); + + return loader.load( url, function () { + + scope.manager.itemEnd( url ); + + }, undefined, function () { + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + } ); + + } + + function deserializeImage( image ) { + + if ( typeof image === 'string' ) { + + const url = image; + + const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( url ) ? url : scope.resourcePath + url; + + return loadImage( path ); + + } else { + + if ( image.data ) { + + return { + data: getTypedArray( image.type, image.data ), + width: image.width, + height: image.height + }; + + } else { + + return null; + + } + + } + + } + + if ( json !== undefined && json.length > 0 ) { + + const manager = new LoadingManager( onLoad ); + + loader = new ImageLoader( manager ); + loader.setCrossOrigin( this.crossOrigin ); + + for ( let i = 0, il = json.length; i < il; i ++ ) { + + const image = json[ i ]; + const url = image.url; + + if ( Array.isArray( url ) ) { + + // load array of images e.g CubeTexture + + images[ image.uuid ] = []; + + for ( let j = 0, jl = url.length; j < jl; j ++ ) { + + const currentUrl = url[ j ]; + + const deserializedImage = deserializeImage( currentUrl ); + + if ( deserializedImage !== null ) { + + if ( deserializedImage instanceof HTMLImageElement ) { + + images[ image.uuid ].push( deserializedImage ); + + } else { + + // special case: handle array of data textures for cube textures + + images[ image.uuid ].push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) ); + + } + + } + + } + + } else { + + // load single image + + const deserializedImage = deserializeImage( image.url ); + + if ( deserializedImage !== null ) { + + images[ image.uuid ] = deserializedImage; + + } + + } + + } + + } + + return images; + + } + + async parseImagesAsync( json ) { + + const scope = this; + const images = {}; + + let loader; + + async function deserializeImage( image ) { + + if ( typeof image === 'string' ) { + + const url = image; + + const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( url ) ? url : scope.resourcePath + url; + + return await loader.loadAsync( path ); + + } else { + + if ( image.data ) { + + return { + data: getTypedArray( image.type, image.data ), + width: image.width, + height: image.height + }; + + } else { + + return null; + + } + + } + + } + + if ( json !== undefined && json.length > 0 ) { + + loader = new ImageLoader( this.manager ); + loader.setCrossOrigin( this.crossOrigin ); + + for ( let i = 0, il = json.length; i < il; i ++ ) { + + const image = json[ i ]; + const url = image.url; + + if ( Array.isArray( url ) ) { + + // load array of images e.g CubeTexture + + images[ image.uuid ] = []; + + for ( let j = 0, jl = url.length; j < jl; j ++ ) { + + const currentUrl = url[ j ]; + + const deserializedImage = await deserializeImage( currentUrl ); + + if ( deserializedImage !== null ) { + + if ( deserializedImage instanceof HTMLImageElement ) { + + images[ image.uuid ].push( deserializedImage ); + + } else { + + // special case: handle array of data textures for cube textures + + images[ image.uuid ].push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) ); + + } + + } + + } + + } else { + + // load single image + + const deserializedImage = await deserializeImage( image.url ); + + if ( deserializedImage !== null ) { + + images[ image.uuid ] = deserializedImage; + + } + + } + + } + + } + + return images; + + } + + parseTextures( json, images ) { + + function parseConstant( value, type ) { + + if ( typeof value === 'number' ) return value; + + console.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value ); + + return type[ value ]; + + } + + const textures = {}; + + if ( json !== undefined ) { + + for ( let i = 0, l = json.length; i < l; i ++ ) { + + const data = json[ i ]; + + if ( data.image === undefined ) { + + console.warn( 'THREE.ObjectLoader: No "image" specified for', data.uuid ); + + } + + if ( images[ data.image ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined image', data.image ); + + } + + let texture; + const image = images[ data.image ]; + + if ( Array.isArray( image ) ) { + + texture = new CubeTexture( image ); + + if ( image.length === 6 ) texture.needsUpdate = true; + + } else { + + if ( image && image.data ) { + + texture = new DataTexture( image.data, image.width, image.height ); + + } else { + + texture = new Texture( image ); + + } + + if ( image ) texture.needsUpdate = true; // textures can have undefined image data + + } + + texture.uuid = data.uuid; + + if ( data.name !== undefined ) texture.name = data.name; + + if ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING ); + + if ( data.offset !== undefined ) texture.offset.fromArray( data.offset ); + if ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat ); + if ( data.center !== undefined ) texture.center.fromArray( data.center ); + if ( data.rotation !== undefined ) texture.rotation = data.rotation; + + if ( data.wrap !== undefined ) { + + texture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING ); + texture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING ); + + } + + if ( data.format !== undefined ) texture.format = data.format; + if ( data.type !== undefined ) texture.type = data.type; + if ( data.encoding !== undefined ) texture.encoding = data.encoding; + + if ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER ); + if ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER ); + if ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy; + + if ( data.flipY !== undefined ) texture.flipY = data.flipY; + + if ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha; + if ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment; + + textures[ data.uuid ] = texture; + + } + + } + + return textures; + + } + + parseObject( data, geometries, materials, textures, animations ) { + + let object; + + function getGeometry( name ) { + + if ( geometries[ name ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined geometry', name ); + + } + + return geometries[ name ]; + + } + + function getMaterial( name ) { + + if ( name === undefined ) return undefined; + + if ( Array.isArray( name ) ) { + + const array = []; + + for ( let i = 0, l = name.length; i < l; i ++ ) { + + const uuid = name[ i ]; + + if ( materials[ uuid ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined material', uuid ); + + } + + array.push( materials[ uuid ] ); + + } + + return array; + + } + + if ( materials[ name ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined material', name ); + + } + + return materials[ name ]; + + } + + function getTexture( uuid ) { + + if ( textures[ uuid ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined texture', uuid ); + + } + + return textures[ uuid ]; + + } + + let geometry, material; + + switch ( data.type ) { + + case 'Scene': + + object = new Scene(); + + if ( data.background !== undefined ) { + + if ( Number.isInteger( data.background ) ) { + + object.background = new Color( data.background ); + + } else { + + object.background = getTexture( data.background ); + + } + + } + + if ( data.environment !== undefined ) { + + object.environment = getTexture( data.environment ); + + } + + if ( data.fog !== undefined ) { + + if ( data.fog.type === 'Fog' ) { + + object.fog = new Fog( data.fog.color, data.fog.near, data.fog.far ); + + } else if ( data.fog.type === 'FogExp2' ) { + + object.fog = new FogExp2( data.fog.color, data.fog.density ); + + } + + } + + break; + + case 'PerspectiveCamera': + + object = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far ); + + if ( data.focus !== undefined ) object.focus = data.focus; + if ( data.zoom !== undefined ) object.zoom = data.zoom; + if ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge; + if ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset; + if ( data.view !== undefined ) object.view = Object.assign( {}, data.view ); + + break; + + case 'OrthographicCamera': + + object = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far ); + + if ( data.zoom !== undefined ) object.zoom = data.zoom; + if ( data.view !== undefined ) object.view = Object.assign( {}, data.view ); + + break; + + case 'AmbientLight': + + object = new AmbientLight( data.color, data.intensity ); + + break; + + case 'DirectionalLight': + + object = new DirectionalLight( data.color, data.intensity ); + + break; + + case 'PointLight': + + object = new PointLight( data.color, data.intensity, data.distance, data.decay ); + + break; + + case 'RectAreaLight': + + object = new RectAreaLight( data.color, data.intensity, data.width, data.height ); + + break; + + case 'SpotLight': + + object = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay ); + + break; + + case 'HemisphereLight': + + object = new HemisphereLight( data.color, data.groundColor, data.intensity ); + + break; + + case 'LightProbe': + + object = new LightProbe().fromJSON( data ); + + break; + + case 'SkinnedMesh': + + geometry = getGeometry( data.geometry ); + material = getMaterial( data.material ); + + object = new SkinnedMesh( geometry, material ); + + if ( data.bindMode !== undefined ) object.bindMode = data.bindMode; + if ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix ); + if ( data.skeleton !== undefined ) object.skeleton = data.skeleton; + + break; + + case 'Mesh': + + geometry = getGeometry( data.geometry ); + material = getMaterial( data.material ); + + object = new Mesh( geometry, material ); + + break; + + case 'InstancedMesh': + + geometry = getGeometry( data.geometry ); + material = getMaterial( data.material ); + const count = data.count; + const instanceMatrix = data.instanceMatrix; + const instanceColor = data.instanceColor; + + object = new InstancedMesh( geometry, material, count ); + object.instanceMatrix = new BufferAttribute( new Float32Array( instanceMatrix.array ), 16 ); + if ( instanceColor !== undefined ) object.instanceColor = new BufferAttribute( new Float32Array( instanceColor.array ), instanceColor.itemSize ); + + break; + + case 'LOD': + + object = new LOD(); + + break; + + case 'Line': + + object = new Line( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'LineLoop': + + object = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'LineSegments': + + object = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'PointCloud': + case 'Points': + + object = new Points( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'Sprite': + + object = new Sprite( getMaterial( data.material ) ); + + break; + + case 'Group': + + object = new Group(); + + break; + + case 'Bone': + + object = new Bone(); + + break; + + default: + + object = new Object3D(); + + } + + object.uuid = data.uuid; + + if ( data.name !== undefined ) object.name = data.name; + + if ( data.matrix !== undefined ) { + + object.matrix.fromArray( data.matrix ); + + if ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate; + if ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale ); + + } else { + + if ( data.position !== undefined ) object.position.fromArray( data.position ); + if ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation ); + if ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion ); + if ( data.scale !== undefined ) object.scale.fromArray( data.scale ); + + } + + if ( data.castShadow !== undefined ) object.castShadow = data.castShadow; + if ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow; + + if ( data.shadow ) { + + if ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias; + if ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias; + if ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius; + if ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize ); + if ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera ); + + } + + if ( data.visible !== undefined ) object.visible = data.visible; + if ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled; + if ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder; + if ( data.userData !== undefined ) object.userData = data.userData; + if ( data.layers !== undefined ) object.layers.mask = data.layers; + + if ( data.children !== undefined ) { + + const children = data.children; + + for ( let i = 0; i < children.length; i ++ ) { + + object.add( this.parseObject( children[ i ], geometries, materials, textures, animations ) ); + + } + + } + + if ( data.animations !== undefined ) { + + const objectAnimations = data.animations; + + for ( let i = 0; i < objectAnimations.length; i ++ ) { + + const uuid = objectAnimations[ i ]; + + object.animations.push( animations[ uuid ] ); + + } + + } + + if ( data.type === 'LOD' ) { + + if ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate; + + const levels = data.levels; + + for ( let l = 0; l < levels.length; l ++ ) { + + const level = levels[ l ]; + const child = object.getObjectByProperty( 'uuid', level.object ); + + if ( child !== undefined ) { + + object.addLevel( child, level.distance ); + + } + + } + + } + + return object; + + } + + bindSkeletons( object, skeletons ) { + + if ( Object.keys( skeletons ).length === 0 ) return; + + object.traverse( function ( child ) { + + if ( child.isSkinnedMesh === true && child.skeleton !== undefined ) { + + const skeleton = skeletons[ child.skeleton ]; + + if ( skeleton === undefined ) { + + console.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton ); + + } else { + + child.bind( skeleton, child.bindMatrix ); + + } + + } + + } ); + + } + + /* DEPRECATED */ + + setTexturePath( value ) { + + console.warn( 'THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().' ); + return this.setResourcePath( value ); + + } + +} + +const TEXTURE_MAPPING = { + UVMapping: UVMapping, + CubeReflectionMapping: CubeReflectionMapping, + CubeRefractionMapping: CubeRefractionMapping, + EquirectangularReflectionMapping: EquirectangularReflectionMapping, + EquirectangularRefractionMapping: EquirectangularRefractionMapping, + CubeUVReflectionMapping: CubeUVReflectionMapping, + CubeUVRefractionMapping: CubeUVRefractionMapping +}; + +const TEXTURE_WRAPPING = { + RepeatWrapping: RepeatWrapping, + ClampToEdgeWrapping: ClampToEdgeWrapping, + MirroredRepeatWrapping: MirroredRepeatWrapping +}; + +const TEXTURE_FILTER = { + NearestFilter: NearestFilter, + NearestMipmapNearestFilter: NearestMipmapNearestFilter, + NearestMipmapLinearFilter: NearestMipmapLinearFilter, + LinearFilter: LinearFilter, + LinearMipmapNearestFilter: LinearMipmapNearestFilter, + LinearMipmapLinearFilter: LinearMipmapLinearFilter +}; + +class ImageBitmapLoader extends Loader { + + constructor( manager ) { + + super( manager ); + + if ( typeof createImageBitmap === 'undefined' ) { + + console.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' ); + + } + + if ( typeof fetch === 'undefined' ) { + + console.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' ); + + } + + this.options = { premultiplyAlpha: 'none' }; + + } + + setOptions( options ) { + + this.options = options; + + return this; + + } + + load( url, onLoad, onProgress, onError ) { + + if ( url === undefined ) url = ''; + + if ( this.path !== undefined ) url = this.path + url; + + url = this.manager.resolveURL( url ); + + const scope = this; + + const cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) onLoad( cached ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + const fetchOptions = {}; + fetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include'; + fetchOptions.headers = this.requestHeader; + + fetch( url, fetchOptions ).then( function ( res ) { + + return res.blob(); + + } ).then( function ( blob ) { + + return createImageBitmap( blob, Object.assign( scope.options, { colorSpaceConversion: 'none' } ) ); + + } ).then( function ( imageBitmap ) { + + Cache.add( url, imageBitmap ); + + if ( onLoad ) onLoad( imageBitmap ); + + scope.manager.itemEnd( url ); + + } ).catch( function ( e ) { + + if ( onError ) onError( e ); + + scope.manager.itemError( url ); + scope.manager.itemEnd( url ); + + } ); + + scope.manager.itemStart( url ); + + } + +} + +ImageBitmapLoader.prototype.isImageBitmapLoader = true; + +class ShapePath { + + constructor() { + + this.type = 'ShapePath'; + + this.color = new Color(); + + this.subPaths = []; + this.currentPath = null; + + } + + moveTo( x, y ) { + + this.currentPath = new Path(); + this.subPaths.push( this.currentPath ); + this.currentPath.moveTo( x, y ); + + return this; + + } + + lineTo( x, y ) { + + this.currentPath.lineTo( x, y ); + + return this; + + } + + quadraticCurveTo( aCPx, aCPy, aX, aY ) { + + this.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY ); + + return this; + + } + + bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { + + this.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ); + + return this; + + } + + splineThru( pts ) { + + this.currentPath.splineThru( pts ); + + return this; + + } + + toShapes( isCCW, noHoles ) { + + function toShapesNoHoles( inSubpaths ) { + + const shapes = []; + + for ( let i = 0, l = inSubpaths.length; i < l; i ++ ) { + + const tmpPath = inSubpaths[ i ]; + + const tmpShape = new Shape(); + tmpShape.curves = tmpPath.curves; + + shapes.push( tmpShape ); + + } + + return shapes; + + } + + function isPointInsidePolygon( inPt, inPolygon ) { + + const polyLen = inPolygon.length; + + // inPt on polygon contour => immediate success or + // toggling of inside/outside at every single! intersection point of an edge + // with the horizontal line through inPt, left of inPt + // not counting lowerY endpoints of edges and whole edges on that line + let inside = false; + for ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) { + + let edgeLowPt = inPolygon[ p ]; + let edgeHighPt = inPolygon[ q ]; + + let edgeDx = edgeHighPt.x - edgeLowPt.x; + let edgeDy = edgeHighPt.y - edgeLowPt.y; + + if ( Math.abs( edgeDy ) > Number.EPSILON ) { + + // not parallel + if ( edgeDy < 0 ) { + + edgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx; + edgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy; + + } + + if ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) continue; + + if ( inPt.y === edgeLowPt.y ) { + + if ( inPt.x === edgeLowPt.x ) return true; // inPt is on contour ? + // continue; // no intersection or edgeLowPt => doesn't count !!! + + } else { + + const perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y ); + if ( perpEdge === 0 ) return true; // inPt is on contour ? + if ( perpEdge < 0 ) continue; + inside = ! inside; // true intersection left of inPt + + } + + } else { + + // parallel or collinear + if ( inPt.y !== edgeLowPt.y ) continue; // parallel + // edge lies on the same horizontal line as inPt + if ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) || + ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) ) return true; // inPt: Point on contour ! + // continue; + + } + + } + + return inside; + + } + + const isClockWise = ShapeUtils.isClockWise; + + const subPaths = this.subPaths; + if ( subPaths.length === 0 ) return []; + + if ( noHoles === true ) return toShapesNoHoles( subPaths ); + + + let solid, tmpPath, tmpShape; + const shapes = []; + + if ( subPaths.length === 1 ) { + + tmpPath = subPaths[ 0 ]; + tmpShape = new Shape(); + tmpShape.curves = tmpPath.curves; + shapes.push( tmpShape ); + return shapes; + + } + + let holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() ); + holesFirst = isCCW ? ! holesFirst : holesFirst; + + // console.log("Holes first", holesFirst); + + const betterShapeHoles = []; + const newShapes = []; + let newShapeHoles = []; + let mainIdx = 0; + let tmpPoints; + + newShapes[ mainIdx ] = undefined; + newShapeHoles[ mainIdx ] = []; + + for ( let i = 0, l = subPaths.length; i < l; i ++ ) { + + tmpPath = subPaths[ i ]; + tmpPoints = tmpPath.getPoints(); + solid = isClockWise( tmpPoints ); + solid = isCCW ? ! solid : solid; + + if ( solid ) { + + if ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) ) mainIdx ++; + + newShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints }; + newShapes[ mainIdx ].s.curves = tmpPath.curves; + + if ( holesFirst ) mainIdx ++; + newShapeHoles[ mainIdx ] = []; + + //console.log('cw', i); + + } else { + + newShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } ); + + //console.log('ccw', i); + + } + + } + + // only Holes? -> probably all Shapes with wrong orientation + if ( ! newShapes[ 0 ] ) return toShapesNoHoles( subPaths ); + + + if ( newShapes.length > 1 ) { + + let ambiguous = false; + const toChange = []; + + for ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { + + betterShapeHoles[ sIdx ] = []; + + } + + for ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { + + const sho = newShapeHoles[ sIdx ]; + + for ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) { + + const ho = sho[ hIdx ]; + let hole_unassigned = true; + + for ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) { + + if ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) { + + if ( sIdx !== s2Idx ) toChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } ); + if ( hole_unassigned ) { + + hole_unassigned = false; + betterShapeHoles[ s2Idx ].push( ho ); + + } else { + + ambiguous = true; + + } + + } + + } + + if ( hole_unassigned ) { + + betterShapeHoles[ sIdx ].push( ho ); + + } + + } + + } + // console.log("ambiguous: ", ambiguous); + + if ( toChange.length > 0 ) { + + // console.log("to change: ", toChange); + if ( ! ambiguous ) newShapeHoles = betterShapeHoles; + + } + + } + + let tmpHoles; + + for ( let i = 0, il = newShapes.length; i < il; i ++ ) { + + tmpShape = newShapes[ i ].s; + shapes.push( tmpShape ); + tmpHoles = newShapeHoles[ i ]; + + for ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) { + + tmpShape.holes.push( tmpHoles[ j ].h ); + + } + + } + + //console.log("shape", shapes); + + return shapes; + + } + +} + +class Font { + + constructor( data ) { + + this.type = 'Font'; + + this.data = data; + + } + + generateShapes( text, size = 100 ) { + + const shapes = []; + const paths = createPaths( text, size, this.data ); + + for ( let p = 0, pl = paths.length; p < pl; p ++ ) { + + Array.prototype.push.apply( shapes, paths[ p ].toShapes() ); + + } + + return shapes; + + } + +} + +function createPaths( text, size, data ) { + + const chars = Array.from( text ); + const scale = size / data.resolution; + const line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale; + + const paths = []; + + let offsetX = 0, offsetY = 0; + + for ( let i = 0; i < chars.length; i ++ ) { + + const char = chars[ i ]; + + if ( char === '\n' ) { + + offsetX = 0; + offsetY -= line_height; + + } else { + + const ret = createPath( char, scale, offsetX, offsetY, data ); + offsetX += ret.offsetX; + paths.push( ret.path ); + + } + + } + + return paths; + +} + +function createPath( char, scale, offsetX, offsetY, data ) { + + const glyph = data.glyphs[ char ] || data.glyphs[ '?' ]; + + if ( ! glyph ) { + + console.error( 'THREE.Font: character "' + char + '" does not exists in font family ' + data.familyName + '.' ); + + return; + + } + + const path = new ShapePath(); + + let x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2; + + if ( glyph.o ) { + + const outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) ); + + for ( let i = 0, l = outline.length; i < l; ) { + + const action = outline[ i ++ ]; + + switch ( action ) { + + case 'm': // moveTo + + x = outline[ i ++ ] * scale + offsetX; + y = outline[ i ++ ] * scale + offsetY; + + path.moveTo( x, y ); + + break; + + case 'l': // lineTo + + x = outline[ i ++ ] * scale + offsetX; + y = outline[ i ++ ] * scale + offsetY; + + path.lineTo( x, y ); + + break; + + case 'q': // quadraticCurveTo + + cpx = outline[ i ++ ] * scale + offsetX; + cpy = outline[ i ++ ] * scale + offsetY; + cpx1 = outline[ i ++ ] * scale + offsetX; + cpy1 = outline[ i ++ ] * scale + offsetY; + + path.quadraticCurveTo( cpx1, cpy1, cpx, cpy ); + + break; + + case 'b': // bezierCurveTo + + cpx = outline[ i ++ ] * scale + offsetX; + cpy = outline[ i ++ ] * scale + offsetY; + cpx1 = outline[ i ++ ] * scale + offsetX; + cpy1 = outline[ i ++ ] * scale + offsetY; + cpx2 = outline[ i ++ ] * scale + offsetX; + cpy2 = outline[ i ++ ] * scale + offsetY; + + path.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy ); + + break; + + } + + } + + } + + return { offsetX: glyph.ha * scale, path: path }; + +} + +Font.prototype.isFont = true; + +class FontLoader extends Loader { + + constructor( manager ) { + + super( manager ); + + } + + load( url, onLoad, onProgress, onError ) { + + const scope = this; + + const loader = new FileLoader( this.manager ); + loader.setPath( this.path ); + loader.setRequestHeader( this.requestHeader ); + loader.setWithCredentials( scope.withCredentials ); + loader.load( url, function ( text ) { + + let json; + + try { + + json = JSON.parse( text ); + + } catch ( e ) { + + console.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' ); + json = JSON.parse( text.substring( 65, text.length - 2 ) ); + + } + + const font = scope.parse( json ); + + if ( onLoad ) onLoad( font ); + + }, onProgress, onError ); + + } + + parse( json ) { + + return new Font( json ); + + } + +} + +let _context; + +const AudioContext = { + + getContext: function () { + + if ( _context === undefined ) { + + _context = new ( window.AudioContext || window.webkitAudioContext )(); + + } + + return _context; + + }, + + setContext: function ( value ) { + + _context = value; + + } + +}; + +class AudioLoader extends Loader { + + constructor( manager ) { + + super( manager ); + + } + + load( url, onLoad, onProgress, onError ) { + + const scope = this; + + const loader = new FileLoader( this.manager ); + loader.setResponseType( 'arraybuffer' ); + loader.setPath( this.path ); + loader.setRequestHeader( this.requestHeader ); + loader.setWithCredentials( this.withCredentials ); + loader.load( url, function ( buffer ) { + + try { + + // Create a copy of the buffer. The `decodeAudioData` method + // detaches the buffer when complete, preventing reuse. + const bufferCopy = buffer.slice( 0 ); + + const context = AudioContext.getContext(); + context.decodeAudioData( bufferCopy, function ( audioBuffer ) { + + onLoad( audioBuffer ); + + } ); + + } catch ( e ) { + + if ( onError ) { + + onError( e ); + + } else { + + console.error( e ); + + } + + scope.manager.itemError( url ); + + } + + }, onProgress, onError ); + + } + +} + +class HemisphereLightProbe extends LightProbe { + + constructor( skyColor, groundColor, intensity = 1 ) { + + super( undefined, intensity ); + + const color1 = new Color().set( skyColor ); + const color2 = new Color().set( groundColor ); + + const sky = new Vector3( color1.r, color1.g, color1.b ); + const ground = new Vector3( color2.r, color2.g, color2.b ); + + // without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI ); + const c0 = Math.sqrt( Math.PI ); + const c1 = c0 * Math.sqrt( 0.75 ); + + this.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 ); + this.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 ); + + } + +} + +HemisphereLightProbe.prototype.isHemisphereLightProbe = true; + +class AmbientLightProbe extends LightProbe { + + constructor( color, intensity = 1 ) { + + super( undefined, intensity ); + + const color1 = new Color().set( color ); + + // without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI ); + this.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) ); + + } + +} + +AmbientLightProbe.prototype.isAmbientLightProbe = true; + +const _eyeRight = /*@__PURE__*/ new Matrix4(); +const _eyeLeft = /*@__PURE__*/ new Matrix4(); + +class StereoCamera { + + constructor() { + + this.type = 'StereoCamera'; + + this.aspect = 1; + + this.eyeSep = 0.064; + + this.cameraL = new PerspectiveCamera(); + this.cameraL.layers.enable( 1 ); + this.cameraL.matrixAutoUpdate = false; + + this.cameraR = new PerspectiveCamera(); + this.cameraR.layers.enable( 2 ); + this.cameraR.matrixAutoUpdate = false; + + this._cache = { + focus: null, + fov: null, + aspect: null, + near: null, + far: null, + zoom: null, + eyeSep: null + }; + + } + + update( camera ) { + + const cache = this._cache; + + const needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov || + cache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near || + cache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep; + + if ( needsUpdate ) { + + cache.focus = camera.focus; + cache.fov = camera.fov; + cache.aspect = camera.aspect * this.aspect; + cache.near = camera.near; + cache.far = camera.far; + cache.zoom = camera.zoom; + cache.eyeSep = this.eyeSep; + + // Off-axis stereoscopic effect based on + // http://paulbourke.net/stereographics/stereorender/ + + const projectionMatrix = camera.projectionMatrix.clone(); + const eyeSepHalf = cache.eyeSep / 2; + const eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus; + const ymax = ( cache.near * Math.tan( DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom; + let xmin, xmax; + + // translate xOffset + + _eyeLeft.elements[ 12 ] = - eyeSepHalf; + _eyeRight.elements[ 12 ] = eyeSepHalf; + + // for left eye + + xmin = - ymax * cache.aspect + eyeSepOnProjection; + xmax = ymax * cache.aspect + eyeSepOnProjection; + + projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin ); + projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); + + this.cameraL.projectionMatrix.copy( projectionMatrix ); + + // for right eye + + xmin = - ymax * cache.aspect - eyeSepOnProjection; + xmax = ymax * cache.aspect - eyeSepOnProjection; + + projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin ); + projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); + + this.cameraR.projectionMatrix.copy( projectionMatrix ); + + } + + this.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft ); + this.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight ); + + } + +} + +class Clock { + + constructor( autoStart = true ) { + + this.autoStart = autoStart; + + this.startTime = 0; + this.oldTime = 0; + this.elapsedTime = 0; + + this.running = false; + + } + + start() { + + this.startTime = now(); + + this.oldTime = this.startTime; + this.elapsedTime = 0; + this.running = true; + + } + + stop() { + + this.getElapsedTime(); + this.running = false; + this.autoStart = false; + + } + + getElapsedTime() { + + this.getDelta(); + return this.elapsedTime; + + } + + getDelta() { + + let diff = 0; + + if ( this.autoStart && ! this.running ) { + + this.start(); + return 0; + + } + + if ( this.running ) { + + const newTime = now(); + + diff = ( newTime - this.oldTime ) / 1000; + this.oldTime = newTime; + + this.elapsedTime += diff; + + } + + return diff; + + } + +} + +function now() { + + return ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732 + +} + +const _position$1 = /*@__PURE__*/ new Vector3(); +const _quaternion$1 = /*@__PURE__*/ new Quaternion(); +const _scale$1 = /*@__PURE__*/ new Vector3(); +const _orientation$1 = /*@__PURE__*/ new Vector3(); + +class AudioListener extends Object3D { + + constructor() { + + super(); + + this.type = 'AudioListener'; + + this.context = AudioContext.getContext(); + + this.gain = this.context.createGain(); + this.gain.connect( this.context.destination ); + + this.filter = null; + + this.timeDelta = 0; + + // private + + this._clock = new Clock(); + + } + + getInput() { + + return this.gain; + + } + + removeFilter() { + + if ( this.filter !== null ) { + + this.gain.disconnect( this.filter ); + this.filter.disconnect( this.context.destination ); + this.gain.connect( this.context.destination ); + this.filter = null; + + } + + return this; + + } + + getFilter() { + + return this.filter; + + } + + setFilter( value ) { + + if ( this.filter !== null ) { + + this.gain.disconnect( this.filter ); + this.filter.disconnect( this.context.destination ); + + } else { + + this.gain.disconnect( this.context.destination ); + + } + + this.filter = value; + this.gain.connect( this.filter ); + this.filter.connect( this.context.destination ); + + return this; + + } + + getMasterVolume() { + + return this.gain.gain.value; + + } + + setMasterVolume( value ) { + + this.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 ); + + return this; + + } + + updateMatrixWorld( force ) { + + super.updateMatrixWorld( force ); + + const listener = this.context.listener; + const up = this.up; + + this.timeDelta = this._clock.getDelta(); + + this.matrixWorld.decompose( _position$1, _quaternion$1, _scale$1 ); + + _orientation$1.set( 0, 0, - 1 ).applyQuaternion( _quaternion$1 ); + + if ( listener.positionX ) { + + // code path for Chrome (see #14393) + + const endTime = this.context.currentTime + this.timeDelta; + + listener.positionX.linearRampToValueAtTime( _position$1.x, endTime ); + listener.positionY.linearRampToValueAtTime( _position$1.y, endTime ); + listener.positionZ.linearRampToValueAtTime( _position$1.z, endTime ); + listener.forwardX.linearRampToValueAtTime( _orientation$1.x, endTime ); + listener.forwardY.linearRampToValueAtTime( _orientation$1.y, endTime ); + listener.forwardZ.linearRampToValueAtTime( _orientation$1.z, endTime ); + listener.upX.linearRampToValueAtTime( up.x, endTime ); + listener.upY.linearRampToValueAtTime( up.y, endTime ); + listener.upZ.linearRampToValueAtTime( up.z, endTime ); + + } else { + + listener.setPosition( _position$1.x, _position$1.y, _position$1.z ); + listener.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z ); + + } + + } + +} + +class Audio extends Object3D { + + constructor( listener ) { + + super(); + + this.type = 'Audio'; + + this.listener = listener; + this.context = listener.context; + + this.gain = this.context.createGain(); + this.gain.connect( listener.getInput() ); + + this.autoplay = false; + + this.buffer = null; + this.detune = 0; + this.loop = false; + this.loopStart = 0; + this.loopEnd = 0; + this.offset = 0; + this.duration = undefined; + this.playbackRate = 1; + this.isPlaying = false; + this.hasPlaybackControl = true; + this.source = null; + this.sourceType = 'empty'; + + this._startedAt = 0; + this._progress = 0; + this._connected = false; + + this.filters = []; + + } + + getOutput() { + + return this.gain; + + } + + setNodeSource( audioNode ) { + + this.hasPlaybackControl = false; + this.sourceType = 'audioNode'; + this.source = audioNode; + this.connect(); + + return this; + + } + + setMediaElementSource( mediaElement ) { + + this.hasPlaybackControl = false; + this.sourceType = 'mediaNode'; + this.source = this.context.createMediaElementSource( mediaElement ); + this.connect(); + + return this; + + } + + setMediaStreamSource( mediaStream ) { + + this.hasPlaybackControl = false; + this.sourceType = 'mediaStreamNode'; + this.source = this.context.createMediaStreamSource( mediaStream ); + this.connect(); + + return this; + + } + + setBuffer( audioBuffer ) { + + this.buffer = audioBuffer; + this.sourceType = 'buffer'; + + if ( this.autoplay ) this.play(); + + return this; + + } + + play( delay = 0 ) { + + if ( this.isPlaying === true ) { + + console.warn( 'THREE.Audio: Audio is already playing.' ); + return; + + } + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this._startedAt = this.context.currentTime + delay; + + const source = this.context.createBufferSource(); + source.buffer = this.buffer; + source.loop = this.loop; + source.loopStart = this.loopStart; + source.loopEnd = this.loopEnd; + source.onended = this.onEnded.bind( this ); + source.start( this._startedAt, this._progress + this.offset, this.duration ); + + this.isPlaying = true; + + this.source = source; + + this.setDetune( this.detune ); + this.setPlaybackRate( this.playbackRate ); + + return this.connect(); + + } + + pause() { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + if ( this.isPlaying === true ) { + + // update current progress + + this._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate; + + if ( this.loop === true ) { + + // ensure _progress does not exceed duration with looped audios + + this._progress = this._progress % ( this.duration || this.buffer.duration ); + + } + + this.source.stop(); + this.source.onended = null; + + this.isPlaying = false; + + } + + return this; + + } + + stop() { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this._progress = 0; + + this.source.stop(); + this.source.onended = null; + this.isPlaying = false; + + return this; + + } + + connect() { + + if ( this.filters.length > 0 ) { + + this.source.connect( this.filters[ 0 ] ); + + for ( let i = 1, l = this.filters.length; i < l; i ++ ) { + + this.filters[ i - 1 ].connect( this.filters[ i ] ); + + } + + this.filters[ this.filters.length - 1 ].connect( this.getOutput() ); + + } else { + + this.source.connect( this.getOutput() ); + + } + + this._connected = true; + + return this; + + } + + disconnect() { + + if ( this.filters.length > 0 ) { + + this.source.disconnect( this.filters[ 0 ] ); + + for ( let i = 1, l = this.filters.length; i < l; i ++ ) { + + this.filters[ i - 1 ].disconnect( this.filters[ i ] ); + + } + + this.filters[ this.filters.length - 1 ].disconnect( this.getOutput() ); + + } else { + + this.source.disconnect( this.getOutput() ); + + } + + this._connected = false; + + return this; + + } + + getFilters() { + + return this.filters; + + } + + setFilters( value ) { + + if ( ! value ) value = []; + + if ( this._connected === true ) { + + this.disconnect(); + this.filters = value.slice(); + this.connect(); + + } else { + + this.filters = value.slice(); + + } + + return this; + + } + + setDetune( value ) { + + this.detune = value; + + if ( this.source.detune === undefined ) return; // only set detune when available + + if ( this.isPlaying === true ) { + + this.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 ); + + } + + return this; + + } + + getDetune() { + + return this.detune; + + } + + getFilter() { + + return this.getFilters()[ 0 ]; + + } + + setFilter( filter ) { + + return this.setFilters( filter ? [ filter ] : [] ); + + } + + setPlaybackRate( value ) { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.playbackRate = value; + + if ( this.isPlaying === true ) { + + this.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 ); + + } + + return this; + + } + + getPlaybackRate() { + + return this.playbackRate; + + } + + onEnded() { + + this.isPlaying = false; + + } + + getLoop() { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return false; + + } + + return this.loop; + + } + + setLoop( value ) { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.loop = value; + + if ( this.isPlaying === true ) { + + this.source.loop = this.loop; + + } + + return this; + + } + + setLoopStart( value ) { + + this.loopStart = value; + + return this; + + } + + setLoopEnd( value ) { + + this.loopEnd = value; + + return this; + + } + + getVolume() { + + return this.gain.gain.value; + + } + + setVolume( value ) { + + this.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 ); + + return this; + + } + +} + +const _position = /*@__PURE__*/ new Vector3(); +const _quaternion = /*@__PURE__*/ new Quaternion(); +const _scale = /*@__PURE__*/ new Vector3(); +const _orientation = /*@__PURE__*/ new Vector3(); + +class PositionalAudio extends Audio { + + constructor( listener ) { + + super( listener ); + + this.panner = this.context.createPanner(); + this.panner.panningModel = 'HRTF'; + this.panner.connect( this.gain ); + + } + + getOutput() { + + return this.panner; + + } + + getRefDistance() { + + return this.panner.refDistance; + + } + + setRefDistance( value ) { + + this.panner.refDistance = value; + + return this; + + } + + getRolloffFactor() { + + return this.panner.rolloffFactor; + + } + + setRolloffFactor( value ) { + + this.panner.rolloffFactor = value; + + return this; + + } + + getDistanceModel() { + + return this.panner.distanceModel; + + } + + setDistanceModel( value ) { + + this.panner.distanceModel = value; + + return this; + + } + + getMaxDistance() { + + return this.panner.maxDistance; + + } + + setMaxDistance( value ) { + + this.panner.maxDistance = value; + + return this; + + } + + setDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) { + + this.panner.coneInnerAngle = coneInnerAngle; + this.panner.coneOuterAngle = coneOuterAngle; + this.panner.coneOuterGain = coneOuterGain; + + return this; + + } + + updateMatrixWorld( force ) { + + super.updateMatrixWorld( force ); + + if ( this.hasPlaybackControl === true && this.isPlaying === false ) return; + + this.matrixWorld.decompose( _position, _quaternion, _scale ); + + _orientation.set( 0, 0, 1 ).applyQuaternion( _quaternion ); + + const panner = this.panner; + + if ( panner.positionX ) { + + // code path for Chrome and Firefox (see #14393) + + const endTime = this.context.currentTime + this.listener.timeDelta; + + panner.positionX.linearRampToValueAtTime( _position.x, endTime ); + panner.positionY.linearRampToValueAtTime( _position.y, endTime ); + panner.positionZ.linearRampToValueAtTime( _position.z, endTime ); + panner.orientationX.linearRampToValueAtTime( _orientation.x, endTime ); + panner.orientationY.linearRampToValueAtTime( _orientation.y, endTime ); + panner.orientationZ.linearRampToValueAtTime( _orientation.z, endTime ); + + } else { + + panner.setPosition( _position.x, _position.y, _position.z ); + panner.setOrientation( _orientation.x, _orientation.y, _orientation.z ); + + } + + } + +} + +class AudioAnalyser { + + constructor( audio, fftSize = 2048 ) { + + this.analyser = audio.context.createAnalyser(); + this.analyser.fftSize = fftSize; + + this.data = new Uint8Array( this.analyser.frequencyBinCount ); + + audio.getOutput().connect( this.analyser ); + + } + + + getFrequencyData() { + + this.analyser.getByteFrequencyData( this.data ); + + return this.data; + + } + + getAverageFrequency() { + + let value = 0; + const data = this.getFrequencyData(); + + for ( let i = 0; i < data.length; i ++ ) { + + value += data[ i ]; + + } + + return value / data.length; + + } + +} + +class PropertyMixer { + + constructor( binding, typeName, valueSize ) { + + this.binding = binding; + this.valueSize = valueSize; + + let mixFunction, + mixFunctionAdditive, + setIdentity; + + // buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ] + // + // interpolators can use .buffer as their .result + // the data then goes to 'incoming' + // + // 'accu0' and 'accu1' are used frame-interleaved for + // the cumulative result and are compared to detect + // changes + // + // 'orig' stores the original state of the property + // + // 'add' is used for additive cumulative results + // + // 'work' is optional and is only present for quaternion types. It is used + // to store intermediate quaternion multiplication results + + switch ( typeName ) { + + case 'quaternion': + mixFunction = this._slerp; + mixFunctionAdditive = this._slerpAdditive; + setIdentity = this._setAdditiveIdentityQuaternion; + + this.buffer = new Float64Array( valueSize * 6 ); + this._workIndex = 5; + break; + + case 'string': + case 'bool': + mixFunction = this._select; + + // Use the regular mix function and for additive on these types, + // additive is not relevant for non-numeric types + mixFunctionAdditive = this._select; + + setIdentity = this._setAdditiveIdentityOther; + + this.buffer = new Array( valueSize * 5 ); + break; + + default: + mixFunction = this._lerp; + mixFunctionAdditive = this._lerpAdditive; + setIdentity = this._setAdditiveIdentityNumeric; + + this.buffer = new Float64Array( valueSize * 5 ); + + } + + this._mixBufferRegion = mixFunction; + this._mixBufferRegionAdditive = mixFunctionAdditive; + this._setIdentity = setIdentity; + this._origIndex = 3; + this._addIndex = 4; + + this.cumulativeWeight = 0; + this.cumulativeWeightAdditive = 0; + + this.useCount = 0; + this.referenceCount = 0; + + } + + // accumulate data in the 'incoming' region into 'accu' + accumulate( accuIndex, weight ) { + + // note: happily accumulating nothing when weight = 0, the caller knows + // the weight and shouldn't have made the call in the first place + + const buffer = this.buffer, + stride = this.valueSize, + offset = accuIndex * stride + stride; + + let currentWeight = this.cumulativeWeight; + + if ( currentWeight === 0 ) { + + // accuN := incoming * weight + + for ( let i = 0; i !== stride; ++ i ) { + + buffer[ offset + i ] = buffer[ i ]; + + } + + currentWeight = weight; + + } else { + + // accuN := accuN + incoming * weight + + currentWeight += weight; + const mix = weight / currentWeight; + this._mixBufferRegion( buffer, offset, 0, mix, stride ); + + } + + this.cumulativeWeight = currentWeight; + + } + + // accumulate data in the 'incoming' region into 'add' + accumulateAdditive( weight ) { + + const buffer = this.buffer, + stride = this.valueSize, + offset = stride * this._addIndex; + + if ( this.cumulativeWeightAdditive === 0 ) { + + // add = identity + + this._setIdentity(); + + } + + // add := add + incoming * weight + + this._mixBufferRegionAdditive( buffer, offset, 0, weight, stride ); + this.cumulativeWeightAdditive += weight; + + } + + // apply the state of 'accu' to the binding when accus differ + apply( accuIndex ) { + + const stride = this.valueSize, + buffer = this.buffer, + offset = accuIndex * stride + stride, + + weight = this.cumulativeWeight, + weightAdditive = this.cumulativeWeightAdditive, + + binding = this.binding; + + this.cumulativeWeight = 0; + this.cumulativeWeightAdditive = 0; + + if ( weight < 1 ) { + + // accuN := accuN + original * ( 1 - cumulativeWeight ) + + const originalValueOffset = stride * this._origIndex; + + this._mixBufferRegion( + buffer, offset, originalValueOffset, 1 - weight, stride ); + + } + + if ( weightAdditive > 0 ) { + + // accuN := accuN + additive accuN + + this._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride ); + + } + + for ( let i = stride, e = stride + stride; i !== e; ++ i ) { + + if ( buffer[ i ] !== buffer[ i + stride ] ) { + + // value has changed -> update scene graph + + binding.setValue( buffer, offset ); + break; + + } + + } + + } + + // remember the state of the bound property and copy it to both accus + saveOriginalState() { + + const binding = this.binding; + + const buffer = this.buffer, + stride = this.valueSize, + + originalValueOffset = stride * this._origIndex; + + binding.getValue( buffer, originalValueOffset ); + + // accu[0..1] := orig -- initially detect changes against the original + for ( let i = stride, e = originalValueOffset; i !== e; ++ i ) { + + buffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ]; + + } + + // Add to identity for additive + this._setIdentity(); + + this.cumulativeWeight = 0; + this.cumulativeWeightAdditive = 0; + + } + + // apply the state previously taken via 'saveOriginalState' to the binding + restoreOriginalState() { + + const originalValueOffset = this.valueSize * 3; + this.binding.setValue( this.buffer, originalValueOffset ); + + } + + _setAdditiveIdentityNumeric() { + + const startIndex = this._addIndex * this.valueSize; + const endIndex = startIndex + this.valueSize; + + for ( let i = startIndex; i < endIndex; i ++ ) { + + this.buffer[ i ] = 0; + + } + + } + + _setAdditiveIdentityQuaternion() { + + this._setAdditiveIdentityNumeric(); + this.buffer[ this._addIndex * this.valueSize + 3 ] = 1; + + } + + _setAdditiveIdentityOther() { + + const startIndex = this._origIndex * this.valueSize; + const targetIndex = this._addIndex * this.valueSize; + + for ( let i = 0; i < this.valueSize; i ++ ) { + + this.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ]; + + } + + } + + + // mix functions + + _select( buffer, dstOffset, srcOffset, t, stride ) { + + if ( t >= 0.5 ) { + + for ( let i = 0; i !== stride; ++ i ) { + + buffer[ dstOffset + i ] = buffer[ srcOffset + i ]; + + } + + } + + } + + _slerp( buffer, dstOffset, srcOffset, t ) { + + Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t ); + + } + + _slerpAdditive( buffer, dstOffset, srcOffset, t, stride ) { + + const workOffset = this._workIndex * stride; + + // Store result in intermediate buffer offset + Quaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset ); + + // Slerp to the intermediate result + Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t ); + + } + + _lerp( buffer, dstOffset, srcOffset, t, stride ) { + + const s = 1 - t; + + for ( let i = 0; i !== stride; ++ i ) { + + const j = dstOffset + i; + + buffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t; + + } + + } + + _lerpAdditive( buffer, dstOffset, srcOffset, t, stride ) { + + for ( let i = 0; i !== stride; ++ i ) { + + const j = dstOffset + i; + + buffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t; + + } + + } + +} + +// Characters [].:/ are reserved for track binding syntax. +const _RESERVED_CHARS_RE = '\\[\\]\\.:\\/'; +const _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' ); + +// Attempts to allow node names from any language. ES5's `\w` regexp matches +// only latin characters, and the unicode \p{L} is not yet supported. So +// instead, we exclude reserved characters and match everything else. +const _wordChar = '[^' + _RESERVED_CHARS_RE + ']'; +const _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\.', '' ) + ']'; + +// Parent directories, delimited by '/' or ':'. Currently unused, but must +// be matched to parse the rest of the track name. +const _directoryRe = /((?:WC+[\/:])*)/.source.replace( 'WC', _wordChar ); + +// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'. +const _nodeRe = /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot ); + +// Object on target node, and accessor. May not contain reserved +// characters. Accessor may contain any character except closing bracket. +const _objectRe = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace( 'WC', _wordChar ); + +// Property and accessor. May not contain reserved characters. Accessor may +// contain any non-bracket characters. +const _propertyRe = /\.(WC+)(?:\[(.+)\])?/.source.replace( 'WC', _wordChar ); + +const _trackRe = new RegExp( '' + + '^' + + _directoryRe + + _nodeRe + + _objectRe + + _propertyRe + + '$' +); + +const _supportedObjectNames = [ 'material', 'materials', 'bones' ]; + +class Composite { + + constructor( targetGroup, path, optionalParsedPath ) { + + const parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path ); + + this._targetGroup = targetGroup; + this._bindings = targetGroup.subscribe_( path, parsedPath ); + + } + + getValue( array, offset ) { + + this.bind(); // bind all binding + + const firstValidIndex = this._targetGroup.nCachedObjects_, + binding = this._bindings[ firstValidIndex ]; + + // and only call .getValue on the first + if ( binding !== undefined ) binding.getValue( array, offset ); + + } + + setValue( array, offset ) { + + const bindings = this._bindings; + + for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].setValue( array, offset ); + + } + + } + + bind() { + + const bindings = this._bindings; + + for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].bind(); + + } + + } + + unbind() { + + const bindings = this._bindings; + + for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].unbind(); + + } + + } + +} + +// Note: This class uses a State pattern on a per-method basis: +// 'bind' sets 'this.getValue' / 'setValue' and shadows the +// prototype version of these methods with one that represents +// the bound state. When the property is not found, the methods +// become no-ops. +class PropertyBinding { + + constructor( rootNode, path, parsedPath ) { + + this.path = path; + this.parsedPath = parsedPath || PropertyBinding.parseTrackName( path ); + + this.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode; + + this.rootNode = rootNode; + + // initial state of these methods that calls 'bind' + this.getValue = this._getValue_unbound; + this.setValue = this._setValue_unbound; + + } + + + static create( root, path, parsedPath ) { + + if ( ! ( root && root.isAnimationObjectGroup ) ) { + + return new PropertyBinding( root, path, parsedPath ); + + } else { + + return new PropertyBinding.Composite( root, path, parsedPath ); + + } + + } + + /** + * Replaces spaces with underscores and removes unsupported characters from + * node names, to ensure compatibility with parseTrackName(). + * + * @param {string} name Node name to be sanitized. + * @return {string} + */ + static sanitizeNodeName( name ) { + + return name.replace( /\s/g, '_' ).replace( _reservedRe, '' ); + + } + + static parseTrackName( trackName ) { + + const matches = _trackRe.exec( trackName ); + + if ( ! matches ) { + + throw new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName ); + + } + + const results = { + // directoryName: matches[ 1 ], // (tschw) currently unused + nodeName: matches[ 2 ], + objectName: matches[ 3 ], + objectIndex: matches[ 4 ], + propertyName: matches[ 5 ], // required + propertyIndex: matches[ 6 ] + }; + + const lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' ); + + if ( lastDot !== undefined && lastDot !== - 1 ) { + + const objectName = results.nodeName.substring( lastDot + 1 ); + + // Object names must be checked against an allowlist. Otherwise, there + // is no way to parse 'foo.bar.baz': 'baz' must be a property, but + // 'bar' could be the objectName, or part of a nodeName (which can + // include '.' characters). + if ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) { + + results.nodeName = results.nodeName.substring( 0, lastDot ); + results.objectName = objectName; + + } + + } + + if ( results.propertyName === null || results.propertyName.length === 0 ) { + + throw new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName ); + + } + + return results; + + } + + static findNode( root, nodeName ) { + + if ( ! nodeName || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) { + + return root; + + } + + // search into skeleton bones. + if ( root.skeleton ) { + + const bone = root.skeleton.getBoneByName( nodeName ); + + if ( bone !== undefined ) { + + return bone; + + } + + } + + // search into node subtree. + if ( root.children ) { + + const searchNodeSubtree = function ( children ) { + + for ( let i = 0; i < children.length; i ++ ) { + + const childNode = children[ i ]; + + if ( childNode.name === nodeName || childNode.uuid === nodeName ) { + + return childNode; + + } + + const result = searchNodeSubtree( childNode.children ); + + if ( result ) return result; + + } + + return null; + + }; + + const subTreeNode = searchNodeSubtree( root.children ); + + if ( subTreeNode ) { + + return subTreeNode; + + } + + } + + return null; + + } + + // these are used to "bind" a nonexistent property + _getValue_unavailable() {} + _setValue_unavailable() {} + + // Getters + + _getValue_direct( buffer, offset ) { + + buffer[ offset ] = this.node[ this.propertyName ]; + + } + + _getValue_array( buffer, offset ) { + + const source = this.resolvedProperty; + + for ( let i = 0, n = source.length; i !== n; ++ i ) { + + buffer[ offset ++ ] = source[ i ]; + + } + + } + + _getValue_arrayElement( buffer, offset ) { + + buffer[ offset ] = this.resolvedProperty[ this.propertyIndex ]; + + } + + _getValue_toArray( buffer, offset ) { + + this.resolvedProperty.toArray( buffer, offset ); + + } + + // Direct + + _setValue_direct( buffer, offset ) { + + this.targetObject[ this.propertyName ] = buffer[ offset ]; + + } + + _setValue_direct_setNeedsUpdate( buffer, offset ) { + + this.targetObject[ this.propertyName ] = buffer[ offset ]; + this.targetObject.needsUpdate = true; + + } + + _setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.targetObject[ this.propertyName ] = buffer[ offset ]; + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + // EntireArray + + _setValue_array( buffer, offset ) { + + const dest = this.resolvedProperty; + + for ( let i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + } + + _setValue_array_setNeedsUpdate( buffer, offset ) { + + const dest = this.resolvedProperty; + + for ( let i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + this.targetObject.needsUpdate = true; + + } + + _setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) { + + const dest = this.resolvedProperty; + + for ( let i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + // ArrayElement + + _setValue_arrayElement( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + + } + + _setValue_arrayElement_setNeedsUpdate( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + this.targetObject.needsUpdate = true; + + } + + _setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + // HasToFromArray + + _setValue_fromArray( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + + } + + _setValue_fromArray_setNeedsUpdate( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + this.targetObject.needsUpdate = true; + + } + + _setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + _getValue_unbound( targetArray, offset ) { + + this.bind(); + this.getValue( targetArray, offset ); + + } + + _setValue_unbound( sourceArray, offset ) { + + this.bind(); + this.setValue( sourceArray, offset ); + + } + + // create getter / setter pair for a property in the scene graph + bind() { + + let targetObject = this.node; + const parsedPath = this.parsedPath; + + const objectName = parsedPath.objectName; + const propertyName = parsedPath.propertyName; + let propertyIndex = parsedPath.propertyIndex; + + if ( ! targetObject ) { + + targetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode; + + this.node = targetObject; + + } + + // set fail state so we can just 'return' on error + this.getValue = this._getValue_unavailable; + this.setValue = this._setValue_unavailable; + + // ensure there is a value node + if ( ! targetObject ) { + + console.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\'t found.' ); + return; + + } + + if ( objectName ) { + + let objectIndex = parsedPath.objectIndex; + + // special cases were we need to reach deeper into the hierarchy to get the face materials.... + switch ( objectName ) { + + case 'materials': + + if ( ! targetObject.material ) { + + console.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this ); + return; + + } + + if ( ! targetObject.material.materials ) { + + console.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this ); + return; + + } + + targetObject = targetObject.material.materials; + + break; + + case 'bones': + + if ( ! targetObject.skeleton ) { + + console.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this ); + return; + + } + + // potential future optimization: skip this if propertyIndex is already an integer + // and convert the integer string to a true integer. + + targetObject = targetObject.skeleton.bones; + + // support resolving morphTarget names into indices. + for ( let i = 0; i < targetObject.length; i ++ ) { + + if ( targetObject[ i ].name === objectIndex ) { + + objectIndex = i; + break; + + } + + } + + break; + + default: + + if ( targetObject[ objectName ] === undefined ) { + + console.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this ); + return; + + } + + targetObject = targetObject[ objectName ]; + + } + + + if ( objectIndex !== undefined ) { + + if ( targetObject[ objectIndex ] === undefined ) { + + console.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject ); + return; + + } + + targetObject = targetObject[ objectIndex ]; + + } + + } + + // resolve property + const nodeProperty = targetObject[ propertyName ]; + + if ( nodeProperty === undefined ) { + + const nodeName = parsedPath.nodeName; + + console.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName + + '.' + propertyName + ' but it wasn\'t found.', targetObject ); + return; + + } + + // determine versioning scheme + let versioning = this.Versioning.None; + + this.targetObject = targetObject; + + if ( targetObject.needsUpdate !== undefined ) { // material + + versioning = this.Versioning.NeedsUpdate; + + } else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform + + versioning = this.Versioning.MatrixWorldNeedsUpdate; + + } + + // determine how the property gets bound + let bindingType = this.BindingType.Direct; + + if ( propertyIndex !== undefined ) { + + // access a sub element of the property array (only primitives are supported right now) + + if ( propertyName === 'morphTargetInfluences' ) { + + // potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer. + + // support resolving morphTarget names into indices. + if ( ! targetObject.geometry ) { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this ); + return; + + } + + if ( targetObject.geometry.isBufferGeometry ) { + + if ( ! targetObject.geometry.morphAttributes ) { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this ); + return; + + } + + if ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) { + + propertyIndex = targetObject.morphTargetDictionary[ propertyIndex ]; + + } + + + } else { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', this ); + return; + + } + + } + + bindingType = this.BindingType.ArrayElement; + + this.resolvedProperty = nodeProperty; + this.propertyIndex = propertyIndex; + + } else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) { + + // must use copy for Object3D.Euler/Quaternion + + bindingType = this.BindingType.HasFromToArray; + + this.resolvedProperty = nodeProperty; + + } else if ( Array.isArray( nodeProperty ) ) { + + bindingType = this.BindingType.EntireArray; + + this.resolvedProperty = nodeProperty; + + } else { + + this.propertyName = propertyName; + + } + + // select getter / setter + this.getValue = this.GetterByBindingType[ bindingType ]; + this.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ]; + + } + + unbind() { + + this.node = null; + + // back to the prototype version of getValue / setValue + // note: avoiding to mutate the shape of 'this' via 'delete' + this.getValue = this._getValue_unbound; + this.setValue = this._setValue_unbound; + + } + +} + +PropertyBinding.Composite = Composite; + +PropertyBinding.prototype.BindingType = { + Direct: 0, + EntireArray: 1, + ArrayElement: 2, + HasFromToArray: 3 +}; + +PropertyBinding.prototype.Versioning = { + None: 0, + NeedsUpdate: 1, + MatrixWorldNeedsUpdate: 2 +}; + +PropertyBinding.prototype.GetterByBindingType = [ + + PropertyBinding.prototype._getValue_direct, + PropertyBinding.prototype._getValue_array, + PropertyBinding.prototype._getValue_arrayElement, + PropertyBinding.prototype._getValue_toArray, + +]; + +PropertyBinding.prototype.SetterByBindingTypeAndVersioning = [ + + [ + // Direct + PropertyBinding.prototype._setValue_direct, + PropertyBinding.prototype._setValue_direct_setNeedsUpdate, + PropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate, + + ], [ + + // EntireArray + + PropertyBinding.prototype._setValue_array, + PropertyBinding.prototype._setValue_array_setNeedsUpdate, + PropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate, + + ], [ + + // ArrayElement + PropertyBinding.prototype._setValue_arrayElement, + PropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate, + PropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate, + + ], [ + + // HasToFromArray + PropertyBinding.prototype._setValue_fromArray, + PropertyBinding.prototype._setValue_fromArray_setNeedsUpdate, + PropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate, + + ] + +]; + +/** + * + * A group of objects that receives a shared animation state. + * + * Usage: + * + * - Add objects you would otherwise pass as 'root' to the + * constructor or the .clipAction method of AnimationMixer. + * + * - Instead pass this object as 'root'. + * + * - You can also add and remove objects later when the mixer + * is running. + * + * Note: + * + * Objects of this class appear as one object to the mixer, + * so cache control of the individual objects must be done + * on the group. + * + * Limitation: + * + * - The animated properties must be compatible among the + * all objects in the group. + * + * - A single property can either be controlled through a + * target group or directly, but not both. + */ + +class AnimationObjectGroup { + + constructor() { + + this.uuid = generateUUID(); + + // cached objects followed by the active ones + this._objects = Array.prototype.slice.call( arguments ); + + this.nCachedObjects_ = 0; // threshold + // note: read by PropertyBinding.Composite + + const indices = {}; + this._indicesByUUID = indices; // for bookkeeping + + for ( let i = 0, n = arguments.length; i !== n; ++ i ) { + + indices[ arguments[ i ].uuid ] = i; + + } + + this._paths = []; // inside: string + this._parsedPaths = []; // inside: { we don't care, here } + this._bindings = []; // inside: Array< PropertyBinding > + this._bindingsIndicesByPath = {}; // inside: indices in these arrays + + const scope = this; + + this.stats = { + + objects: { + get total() { + + return scope._objects.length; + + }, + get inUse() { + + return this.total - scope.nCachedObjects_; + + } + }, + get bindingsPerObject() { + + return scope._bindings.length; + + } + + }; + + } + + add() { + + const objects = this._objects, + indicesByUUID = this._indicesByUUID, + paths = this._paths, + parsedPaths = this._parsedPaths, + bindings = this._bindings, + nBindings = bindings.length; + + let knownObject = undefined, + nObjects = objects.length, + nCachedObjects = this.nCachedObjects_; + + for ( let i = 0, n = arguments.length; i !== n; ++ i ) { + + const object = arguments[ i ], + uuid = object.uuid; + let index = indicesByUUID[ uuid ]; + + if ( index === undefined ) { + + // unknown object -> add it to the ACTIVE region + + index = nObjects ++; + indicesByUUID[ uuid ] = index; + objects.push( object ); + + // accounting is done, now do the same for all bindings + + for ( let j = 0, m = nBindings; j !== m; ++ j ) { + + bindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) ); + + } + + } else if ( index < nCachedObjects ) { + + knownObject = objects[ index ]; + + // move existing object to the ACTIVE region + + const firstActiveIndex = -- nCachedObjects, + lastCachedObject = objects[ firstActiveIndex ]; + + indicesByUUID[ lastCachedObject.uuid ] = index; + objects[ index ] = lastCachedObject; + + indicesByUUID[ uuid ] = firstActiveIndex; + objects[ firstActiveIndex ] = object; + + // accounting is done, now do the same for all bindings + + for ( let j = 0, m = nBindings; j !== m; ++ j ) { + + const bindingsForPath = bindings[ j ], + lastCached = bindingsForPath[ firstActiveIndex ]; + + let binding = bindingsForPath[ index ]; + + bindingsForPath[ index ] = lastCached; + + if ( binding === undefined ) { + + // since we do not bother to create new bindings + // for objects that are cached, the binding may + // or may not exist + + binding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ); + + } + + bindingsForPath[ firstActiveIndex ] = binding; + + } + + } else if ( objects[ index ] !== knownObject ) { + + console.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' + + 'detected. Clean the caches or recreate your infrastructure when reloading scenes.' ); + + } // else the object is already where we want it to be + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + } + + remove() { + + const objects = this._objects, + indicesByUUID = this._indicesByUUID, + bindings = this._bindings, + nBindings = bindings.length; + + let nCachedObjects = this.nCachedObjects_; + + for ( let i = 0, n = arguments.length; i !== n; ++ i ) { + + const object = arguments[ i ], + uuid = object.uuid, + index = indicesByUUID[ uuid ]; + + if ( index !== undefined && index >= nCachedObjects ) { + + // move existing object into the CACHED region + + const lastCachedIndex = nCachedObjects ++, + firstActiveObject = objects[ lastCachedIndex ]; + + indicesByUUID[ firstActiveObject.uuid ] = index; + objects[ index ] = firstActiveObject; + + indicesByUUID[ uuid ] = lastCachedIndex; + objects[ lastCachedIndex ] = object; + + // accounting is done, now do the same for all bindings + + for ( let j = 0, m = nBindings; j !== m; ++ j ) { + + const bindingsForPath = bindings[ j ], + firstActive = bindingsForPath[ lastCachedIndex ], + binding = bindingsForPath[ index ]; + + bindingsForPath[ index ] = firstActive; + bindingsForPath[ lastCachedIndex ] = binding; + + } + + } + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + } + + // remove & forget + uncache() { + + const objects = this._objects, + indicesByUUID = this._indicesByUUID, + bindings = this._bindings, + nBindings = bindings.length; + + let nCachedObjects = this.nCachedObjects_, + nObjects = objects.length; + + for ( let i = 0, n = arguments.length; i !== n; ++ i ) { + + const object = arguments[ i ], + uuid = object.uuid, + index = indicesByUUID[ uuid ]; + + if ( index !== undefined ) { + + delete indicesByUUID[ uuid ]; + + if ( index < nCachedObjects ) { + + // object is cached, shrink the CACHED region + + const firstActiveIndex = -- nCachedObjects, + lastCachedObject = objects[ firstActiveIndex ], + lastIndex = -- nObjects, + lastObject = objects[ lastIndex ]; + + // last cached object takes this object's place + indicesByUUID[ lastCachedObject.uuid ] = index; + objects[ index ] = lastCachedObject; + + // last object goes to the activated slot and pop + indicesByUUID[ lastObject.uuid ] = firstActiveIndex; + objects[ firstActiveIndex ] = lastObject; + objects.pop(); + + // accounting is done, now do the same for all bindings + + for ( let j = 0, m = nBindings; j !== m; ++ j ) { + + const bindingsForPath = bindings[ j ], + lastCached = bindingsForPath[ firstActiveIndex ], + last = bindingsForPath[ lastIndex ]; + + bindingsForPath[ index ] = lastCached; + bindingsForPath[ firstActiveIndex ] = last; + bindingsForPath.pop(); + + } + + } else { + + // object is active, just swap with the last and pop + + const lastIndex = -- nObjects, + lastObject = objects[ lastIndex ]; + + if ( lastIndex > 0 ) { + + indicesByUUID[ lastObject.uuid ] = index; + + } + + objects[ index ] = lastObject; + objects.pop(); + + // accounting is done, now do the same for all bindings + + for ( let j = 0, m = nBindings; j !== m; ++ j ) { + + const bindingsForPath = bindings[ j ]; + + bindingsForPath[ index ] = bindingsForPath[ lastIndex ]; + bindingsForPath.pop(); + + } + + } // cached or active + + } // if object is known + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + } + + // Internal interface used by befriended PropertyBinding.Composite: + + subscribe_( path, parsedPath ) { + + // returns an array of bindings for the given path that is changed + // according to the contained objects in the group + + const indicesByPath = this._bindingsIndicesByPath; + let index = indicesByPath[ path ]; + const bindings = this._bindings; + + if ( index !== undefined ) return bindings[ index ]; + + const paths = this._paths, + parsedPaths = this._parsedPaths, + objects = this._objects, + nObjects = objects.length, + nCachedObjects = this.nCachedObjects_, + bindingsForPath = new Array( nObjects ); + + index = bindings.length; + + indicesByPath[ path ] = index; + + paths.push( path ); + parsedPaths.push( parsedPath ); + bindings.push( bindingsForPath ); + + for ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) { + + const object = objects[ i ]; + bindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath ); + + } + + return bindingsForPath; + + } + + unsubscribe_( path ) { + + // tells the group to forget about a property path and no longer + // update the array previously obtained with 'subscribe_' + + const indicesByPath = this._bindingsIndicesByPath, + index = indicesByPath[ path ]; + + if ( index !== undefined ) { + + const paths = this._paths, + parsedPaths = this._parsedPaths, + bindings = this._bindings, + lastBindingsIndex = bindings.length - 1, + lastBindings = bindings[ lastBindingsIndex ], + lastBindingsPath = path[ lastBindingsIndex ]; + + indicesByPath[ lastBindingsPath ] = index; + + bindings[ index ] = lastBindings; + bindings.pop(); + + parsedPaths[ index ] = parsedPaths[ lastBindingsIndex ]; + parsedPaths.pop(); + + paths[ index ] = paths[ lastBindingsIndex ]; + paths.pop(); + + } + + } + +} + +AnimationObjectGroup.prototype.isAnimationObjectGroup = true; + +class AnimationAction { + + constructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) { + + this._mixer = mixer; + this._clip = clip; + this._localRoot = localRoot; + this.blendMode = blendMode; + + const tracks = clip.tracks, + nTracks = tracks.length, + interpolants = new Array( nTracks ); + + const interpolantSettings = { + endingStart: ZeroCurvatureEnding, + endingEnd: ZeroCurvatureEnding + }; + + for ( let i = 0; i !== nTracks; ++ i ) { + + const interpolant = tracks[ i ].createInterpolant( null ); + interpolants[ i ] = interpolant; + interpolant.settings = interpolantSettings; + + } + + this._interpolantSettings = interpolantSettings; + + this._interpolants = interpolants; // bound by the mixer + + // inside: PropertyMixer (managed by the mixer) + this._propertyBindings = new Array( nTracks ); + + this._cacheIndex = null; // for the memory manager + this._byClipCacheIndex = null; // for the memory manager + + this._timeScaleInterpolant = null; + this._weightInterpolant = null; + + this.loop = LoopRepeat; + this._loopCount = - 1; + + // global mixer time when the action is to be started + // it's set back to 'null' upon start of the action + this._startTime = null; + + // scaled local time of the action + // gets clamped or wrapped to 0..clip.duration according to loop + this.time = 0; + + this.timeScale = 1; + this._effectiveTimeScale = 1; + + this.weight = 1; + this._effectiveWeight = 1; + + this.repetitions = Infinity; // no. of repetitions when looping + + this.paused = false; // true -> zero effective time scale + this.enabled = true; // false -> zero effective weight + + this.clampWhenFinished = false;// keep feeding the last frame? + + this.zeroSlopeAtStart = true;// for smooth interpolation w/o separate + this.zeroSlopeAtEnd = true;// clips for start, loop and end + + } + + // State & Scheduling + + play() { + + this._mixer._activateAction( this ); + + return this; + + } + + stop() { + + this._mixer._deactivateAction( this ); + + return this.reset(); + + } + + reset() { + + this.paused = false; + this.enabled = true; + + this.time = 0; // restart clip + this._loopCount = - 1;// forget previous loops + this._startTime = null;// forget scheduling + + return this.stopFading().stopWarping(); + + } + + isRunning() { + + return this.enabled && ! this.paused && this.timeScale !== 0 && + this._startTime === null && this._mixer._isActiveAction( this ); + + } + + // return true when play has been called + isScheduled() { + + return this._mixer._isActiveAction( this ); + + } + + startAt( time ) { + + this._startTime = time; + + return this; + + } + + setLoop( mode, repetitions ) { + + this.loop = mode; + this.repetitions = repetitions; + + return this; + + } + + // Weight + + // set the weight stopping any scheduled fading + // although .enabled = false yields an effective weight of zero, this + // method does *not* change .enabled, because it would be confusing + setEffectiveWeight( weight ) { + + this.weight = weight; + + // note: same logic as when updated at runtime + this._effectiveWeight = this.enabled ? weight : 0; + + return this.stopFading(); + + } + + // return the weight considering fading and .enabled + getEffectiveWeight() { + + return this._effectiveWeight; + + } + + fadeIn( duration ) { + + return this._scheduleFading( duration, 0, 1 ); + + } + + fadeOut( duration ) { + + return this._scheduleFading( duration, 1, 0 ); + + } + + crossFadeFrom( fadeOutAction, duration, warp ) { + + fadeOutAction.fadeOut( duration ); + this.fadeIn( duration ); + + if ( warp ) { + + const fadeInDuration = this._clip.duration, + fadeOutDuration = fadeOutAction._clip.duration, + + startEndRatio = fadeOutDuration / fadeInDuration, + endStartRatio = fadeInDuration / fadeOutDuration; + + fadeOutAction.warp( 1.0, startEndRatio, duration ); + this.warp( endStartRatio, 1.0, duration ); + + } + + return this; + + } + + crossFadeTo( fadeInAction, duration, warp ) { + + return fadeInAction.crossFadeFrom( this, duration, warp ); + + } + + stopFading() { + + const weightInterpolant = this._weightInterpolant; + + if ( weightInterpolant !== null ) { + + this._weightInterpolant = null; + this._mixer._takeBackControlInterpolant( weightInterpolant ); + + } + + return this; + + } + + // Time Scale Control + + // set the time scale stopping any scheduled warping + // although .paused = true yields an effective time scale of zero, this + // method does *not* change .paused, because it would be confusing + setEffectiveTimeScale( timeScale ) { + + this.timeScale = timeScale; + this._effectiveTimeScale = this.paused ? 0 : timeScale; + + return this.stopWarping(); + + } + + // return the time scale considering warping and .paused + getEffectiveTimeScale() { + + return this._effectiveTimeScale; + + } + + setDuration( duration ) { + + this.timeScale = this._clip.duration / duration; + + return this.stopWarping(); + + } + + syncWith( action ) { + + this.time = action.time; + this.timeScale = action.timeScale; + + return this.stopWarping(); + + } + + halt( duration ) { + + return this.warp( this._effectiveTimeScale, 0, duration ); + + } + + warp( startTimeScale, endTimeScale, duration ) { + + const mixer = this._mixer, + now = mixer.time, + timeScale = this.timeScale; + + let interpolant = this._timeScaleInterpolant; + + if ( interpolant === null ) { + + interpolant = mixer._lendControlInterpolant(); + this._timeScaleInterpolant = interpolant; + + } + + const times = interpolant.parameterPositions, + values = interpolant.sampleValues; + + times[ 0 ] = now; + times[ 1 ] = now + duration; + + values[ 0 ] = startTimeScale / timeScale; + values[ 1 ] = endTimeScale / timeScale; + + return this; + + } + + stopWarping() { + + const timeScaleInterpolant = this._timeScaleInterpolant; + + if ( timeScaleInterpolant !== null ) { + + this._timeScaleInterpolant = null; + this._mixer._takeBackControlInterpolant( timeScaleInterpolant ); + + } + + return this; + + } + + // Object Accessors + + getMixer() { + + return this._mixer; + + } + + getClip() { + + return this._clip; + + } + + getRoot() { + + return this._localRoot || this._mixer._root; + + } + + // Interna + + _update( time, deltaTime, timeDirection, accuIndex ) { + + // called by the mixer + + if ( ! this.enabled ) { + + // call ._updateWeight() to update ._effectiveWeight + + this._updateWeight( time ); + return; + + } + + const startTime = this._startTime; + + if ( startTime !== null ) { + + // check for scheduled start of action + + const timeRunning = ( time - startTime ) * timeDirection; + if ( timeRunning < 0 || timeDirection === 0 ) { + + return; // yet to come / don't decide when delta = 0 + + } + + // start + + this._startTime = null; // unschedule + deltaTime = timeDirection * timeRunning; + + } + + // apply time scale and advance time + + deltaTime *= this._updateTimeScale( time ); + const clipTime = this._updateTime( deltaTime ); + + // note: _updateTime may disable the action resulting in + // an effective weight of 0 + + const weight = this._updateWeight( time ); + + if ( weight > 0 ) { + + const interpolants = this._interpolants; + const propertyMixers = this._propertyBindings; + + switch ( this.blendMode ) { + + case AdditiveAnimationBlendMode: + + for ( let j = 0, m = interpolants.length; j !== m; ++ j ) { + + interpolants[ j ].evaluate( clipTime ); + propertyMixers[ j ].accumulateAdditive( weight ); + + } + + break; + + case NormalAnimationBlendMode: + default: + + for ( let j = 0, m = interpolants.length; j !== m; ++ j ) { + + interpolants[ j ].evaluate( clipTime ); + propertyMixers[ j ].accumulate( accuIndex, weight ); + + } + + } + + } + + } + + _updateWeight( time ) { + + let weight = 0; + + if ( this.enabled ) { + + weight = this.weight; + const interpolant = this._weightInterpolant; + + if ( interpolant !== null ) { + + const interpolantValue = interpolant.evaluate( time )[ 0 ]; + + weight *= interpolantValue; + + if ( time > interpolant.parameterPositions[ 1 ] ) { + + this.stopFading(); + + if ( interpolantValue === 0 ) { + + // faded out, disable + this.enabled = false; + + } + + } + + } + + } + + this._effectiveWeight = weight; + return weight; + + } + + _updateTimeScale( time ) { + + let timeScale = 0; + + if ( ! this.paused ) { + + timeScale = this.timeScale; + + const interpolant = this._timeScaleInterpolant; + + if ( interpolant !== null ) { + + const interpolantValue = interpolant.evaluate( time )[ 0 ]; + + timeScale *= interpolantValue; + + if ( time > interpolant.parameterPositions[ 1 ] ) { + + this.stopWarping(); + + if ( timeScale === 0 ) { + + // motion has halted, pause + this.paused = true; + + } else { + + // warp done - apply final time scale + this.timeScale = timeScale; + + } + + } + + } + + } + + this._effectiveTimeScale = timeScale; + return timeScale; + + } + + _updateTime( deltaTime ) { + + const duration = this._clip.duration; + const loop = this.loop; + + let time = this.time + deltaTime; + let loopCount = this._loopCount; + + const pingPong = ( loop === LoopPingPong ); + + if ( deltaTime === 0 ) { + + if ( loopCount === - 1 ) return time; + + return ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time; + + } + + if ( loop === LoopOnce ) { + + if ( loopCount === - 1 ) { + + // just started + + this._loopCount = 0; + this._setEndings( true, true, false ); + + } + + handle_stop: { + + if ( time >= duration ) { + + time = duration; + + } else if ( time < 0 ) { + + time = 0; + + } else { + + this.time = time; + + break handle_stop; + + } + + if ( this.clampWhenFinished ) this.paused = true; + else this.enabled = false; + + this.time = time; + + this._mixer.dispatchEvent( { + type: 'finished', action: this, + direction: deltaTime < 0 ? - 1 : 1 + } ); + + } + + } else { // repetitive Repeat or PingPong + + if ( loopCount === - 1 ) { + + // just started + + if ( deltaTime >= 0 ) { + + loopCount = 0; + + this._setEndings( true, this.repetitions === 0, pingPong ); + + } else { + + // when looping in reverse direction, the initial + // transition through zero counts as a repetition, + // so leave loopCount at -1 + + this._setEndings( this.repetitions === 0, true, pingPong ); + + } + + } + + if ( time >= duration || time < 0 ) { + + // wrap around + + const loopDelta = Math.floor( time / duration ); // signed + time -= duration * loopDelta; + + loopCount += Math.abs( loopDelta ); + + const pending = this.repetitions - loopCount; + + if ( pending <= 0 ) { + + // have to stop (switch state, clamp time, fire event) + + if ( this.clampWhenFinished ) this.paused = true; + else this.enabled = false; + + time = deltaTime > 0 ? duration : 0; + + this.time = time; + + this._mixer.dispatchEvent( { + type: 'finished', action: this, + direction: deltaTime > 0 ? 1 : - 1 + } ); + + } else { + + // keep running + + if ( pending === 1 ) { + + // entering the last round + + const atStart = deltaTime < 0; + this._setEndings( atStart, ! atStart, pingPong ); + + } else { + + this._setEndings( false, false, pingPong ); + + } + + this._loopCount = loopCount; + + this.time = time; + + this._mixer.dispatchEvent( { + type: 'loop', action: this, loopDelta: loopDelta + } ); + + } + + } else { + + this.time = time; + + } + + if ( pingPong && ( loopCount & 1 ) === 1 ) { + + // invert time for the "pong round" + + return duration - time; + + } + + } + + return time; + + } + + _setEndings( atStart, atEnd, pingPong ) { + + const settings = this._interpolantSettings; + + if ( pingPong ) { + + settings.endingStart = ZeroSlopeEnding; + settings.endingEnd = ZeroSlopeEnding; + + } else { + + // assuming for LoopOnce atStart == atEnd == true + + if ( atStart ) { + + settings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding; + + } else { + + settings.endingStart = WrapAroundEnding; + + } + + if ( atEnd ) { + + settings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding; + + } else { + + settings.endingEnd = WrapAroundEnding; + + } + + } + + } + + _scheduleFading( duration, weightNow, weightThen ) { + + const mixer = this._mixer, now = mixer.time; + let interpolant = this._weightInterpolant; + + if ( interpolant === null ) { + + interpolant = mixer._lendControlInterpolant(); + this._weightInterpolant = interpolant; + + } + + const times = interpolant.parameterPositions, + values = interpolant.sampleValues; + + times[ 0 ] = now; + values[ 0 ] = weightNow; + times[ 1 ] = now + duration; + values[ 1 ] = weightThen; + + return this; + + } + +} + +class AnimationMixer extends EventDispatcher { + + constructor( root ) { + + super(); + + this._root = root; + this._initMemoryManager(); + this._accuIndex = 0; + this.time = 0; + this.timeScale = 1.0; + + } + + _bindAction( action, prototypeAction ) { + + const root = action._localRoot || this._root, + tracks = action._clip.tracks, + nTracks = tracks.length, + bindings = action._propertyBindings, + interpolants = action._interpolants, + rootUuid = root.uuid, + bindingsByRoot = this._bindingsByRootAndName; + + let bindingsByName = bindingsByRoot[ rootUuid ]; + + if ( bindingsByName === undefined ) { + + bindingsByName = {}; + bindingsByRoot[ rootUuid ] = bindingsByName; + + } + + for ( let i = 0; i !== nTracks; ++ i ) { + + const track = tracks[ i ], + trackName = track.name; + + let binding = bindingsByName[ trackName ]; + + if ( binding !== undefined ) { + + bindings[ i ] = binding; + + } else { + + binding = bindings[ i ]; + + if ( binding !== undefined ) { + + // existing binding, make sure the cache knows + + if ( binding._cacheIndex === null ) { + + ++ binding.referenceCount; + this._addInactiveBinding( binding, rootUuid, trackName ); + + } + + continue; + + } + + const path = prototypeAction && prototypeAction. + _propertyBindings[ i ].binding.parsedPath; + + binding = new PropertyMixer( + PropertyBinding.create( root, trackName, path ), + track.ValueTypeName, track.getValueSize() ); + + ++ binding.referenceCount; + this._addInactiveBinding( binding, rootUuid, trackName ); + + bindings[ i ] = binding; + + } + + interpolants[ i ].resultBuffer = binding.buffer; + + } + + } + + _activateAction( action ) { + + if ( ! this._isActiveAction( action ) ) { + + if ( action._cacheIndex === null ) { + + // this action has been forgotten by the cache, but the user + // appears to be still using it -> rebind + + const rootUuid = ( action._localRoot || this._root ).uuid, + clipUuid = action._clip.uuid, + actionsForClip = this._actionsByClip[ clipUuid ]; + + this._bindAction( action, + actionsForClip && actionsForClip.knownActions[ 0 ] ); + + this._addInactiveAction( action, clipUuid, rootUuid ); + + } + + const bindings = action._propertyBindings; + + // increment reference counts / sort out state + for ( let i = 0, n = bindings.length; i !== n; ++ i ) { + + const binding = bindings[ i ]; + + if ( binding.useCount ++ === 0 ) { + + this._lendBinding( binding ); + binding.saveOriginalState(); + + } + + } + + this._lendAction( action ); + + } + + } + + _deactivateAction( action ) { + + if ( this._isActiveAction( action ) ) { + + const bindings = action._propertyBindings; + + // decrement reference counts / sort out state + for ( let i = 0, n = bindings.length; i !== n; ++ i ) { + + const binding = bindings[ i ]; + + if ( -- binding.useCount === 0 ) { + + binding.restoreOriginalState(); + this._takeBackBinding( binding ); + + } + + } + + this._takeBackAction( action ); + + } + + } + + // Memory manager + + _initMemoryManager() { + + this._actions = []; // 'nActiveActions' followed by inactive ones + this._nActiveActions = 0; + + this._actionsByClip = {}; + // inside: + // { + // knownActions: Array< AnimationAction > - used as prototypes + // actionByRoot: AnimationAction - lookup + // } + + + this._bindings = []; // 'nActiveBindings' followed by inactive ones + this._nActiveBindings = 0; + + this._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer > + + + this._controlInterpolants = []; // same game as above + this._nActiveControlInterpolants = 0; + + const scope = this; + + this.stats = { + + actions: { + get total() { + + return scope._actions.length; + + }, + get inUse() { + + return scope._nActiveActions; + + } + }, + bindings: { + get total() { + + return scope._bindings.length; + + }, + get inUse() { + + return scope._nActiveBindings; + + } + }, + controlInterpolants: { + get total() { + + return scope._controlInterpolants.length; + + }, + get inUse() { + + return scope._nActiveControlInterpolants; + + } + } + + }; + + } + + // Memory management for AnimationAction objects + + _isActiveAction( action ) { + + const index = action._cacheIndex; + return index !== null && index < this._nActiveActions; + + } + + _addInactiveAction( action, clipUuid, rootUuid ) { + + const actions = this._actions, + actionsByClip = this._actionsByClip; + + let actionsForClip = actionsByClip[ clipUuid ]; + + if ( actionsForClip === undefined ) { + + actionsForClip = { + + knownActions: [ action ], + actionByRoot: {} + + }; + + action._byClipCacheIndex = 0; + + actionsByClip[ clipUuid ] = actionsForClip; + + } else { + + const knownActions = actionsForClip.knownActions; + + action._byClipCacheIndex = knownActions.length; + knownActions.push( action ); + + } + + action._cacheIndex = actions.length; + actions.push( action ); + + actionsForClip.actionByRoot[ rootUuid ] = action; + + } + + _removeInactiveAction( action ) { + + const actions = this._actions, + lastInactiveAction = actions[ actions.length - 1 ], + cacheIndex = action._cacheIndex; + + lastInactiveAction._cacheIndex = cacheIndex; + actions[ cacheIndex ] = lastInactiveAction; + actions.pop(); + + action._cacheIndex = null; + + + const clipUuid = action._clip.uuid, + actionsByClip = this._actionsByClip, + actionsForClip = actionsByClip[ clipUuid ], + knownActionsForClip = actionsForClip.knownActions, + + lastKnownAction = + knownActionsForClip[ knownActionsForClip.length - 1 ], + + byClipCacheIndex = action._byClipCacheIndex; + + lastKnownAction._byClipCacheIndex = byClipCacheIndex; + knownActionsForClip[ byClipCacheIndex ] = lastKnownAction; + knownActionsForClip.pop(); + + action._byClipCacheIndex = null; + + + const actionByRoot = actionsForClip.actionByRoot, + rootUuid = ( action._localRoot || this._root ).uuid; + + delete actionByRoot[ rootUuid ]; + + if ( knownActionsForClip.length === 0 ) { + + delete actionsByClip[ clipUuid ]; + + } + + this._removeInactiveBindingsForAction( action ); + + } + + _removeInactiveBindingsForAction( action ) { + + const bindings = action._propertyBindings; + + for ( let i = 0, n = bindings.length; i !== n; ++ i ) { + + const binding = bindings[ i ]; + + if ( -- binding.referenceCount === 0 ) { + + this._removeInactiveBinding( binding ); + + } + + } + + } + + _lendAction( action ) { + + // [ active actions | inactive actions ] + // [ active actions >| inactive actions ] + // s a + // <-swap-> + // a s + + const actions = this._actions, + prevIndex = action._cacheIndex, + + lastActiveIndex = this._nActiveActions ++, + + firstInactiveAction = actions[ lastActiveIndex ]; + + action._cacheIndex = lastActiveIndex; + actions[ lastActiveIndex ] = action; + + firstInactiveAction._cacheIndex = prevIndex; + actions[ prevIndex ] = firstInactiveAction; + + } + + _takeBackAction( action ) { + + // [ active actions | inactive actions ] + // [ active actions |< inactive actions ] + // a s + // <-swap-> + // s a + + const actions = this._actions, + prevIndex = action._cacheIndex, + + firstInactiveIndex = -- this._nActiveActions, + + lastActiveAction = actions[ firstInactiveIndex ]; + + action._cacheIndex = firstInactiveIndex; + actions[ firstInactiveIndex ] = action; + + lastActiveAction._cacheIndex = prevIndex; + actions[ prevIndex ] = lastActiveAction; + + } + + // Memory management for PropertyMixer objects + + _addInactiveBinding( binding, rootUuid, trackName ) { + + const bindingsByRoot = this._bindingsByRootAndName, + bindings = this._bindings; + + let bindingByName = bindingsByRoot[ rootUuid ]; + + if ( bindingByName === undefined ) { + + bindingByName = {}; + bindingsByRoot[ rootUuid ] = bindingByName; + + } + + bindingByName[ trackName ] = binding; + + binding._cacheIndex = bindings.length; + bindings.push( binding ); + + } + + _removeInactiveBinding( binding ) { + + const bindings = this._bindings, + propBinding = binding.binding, + rootUuid = propBinding.rootNode.uuid, + trackName = propBinding.path, + bindingsByRoot = this._bindingsByRootAndName, + bindingByName = bindingsByRoot[ rootUuid ], + + lastInactiveBinding = bindings[ bindings.length - 1 ], + cacheIndex = binding._cacheIndex; + + lastInactiveBinding._cacheIndex = cacheIndex; + bindings[ cacheIndex ] = lastInactiveBinding; + bindings.pop(); + + delete bindingByName[ trackName ]; + + if ( Object.keys( bindingByName ).length === 0 ) { + + delete bindingsByRoot[ rootUuid ]; + + } + + } + + _lendBinding( binding ) { + + const bindings = this._bindings, + prevIndex = binding._cacheIndex, + + lastActiveIndex = this._nActiveBindings ++, + + firstInactiveBinding = bindings[ lastActiveIndex ]; + + binding._cacheIndex = lastActiveIndex; + bindings[ lastActiveIndex ] = binding; + + firstInactiveBinding._cacheIndex = prevIndex; + bindings[ prevIndex ] = firstInactiveBinding; + + } + + _takeBackBinding( binding ) { + + const bindings = this._bindings, + prevIndex = binding._cacheIndex, + + firstInactiveIndex = -- this._nActiveBindings, + + lastActiveBinding = bindings[ firstInactiveIndex ]; + + binding._cacheIndex = firstInactiveIndex; + bindings[ firstInactiveIndex ] = binding; + + lastActiveBinding._cacheIndex = prevIndex; + bindings[ prevIndex ] = lastActiveBinding; + + } + + + // Memory management of Interpolants for weight and time scale + + _lendControlInterpolant() { + + const interpolants = this._controlInterpolants, + lastActiveIndex = this._nActiveControlInterpolants ++; + + let interpolant = interpolants[ lastActiveIndex ]; + + if ( interpolant === undefined ) { + + interpolant = new LinearInterpolant( + new Float32Array( 2 ), new Float32Array( 2 ), + 1, this._controlInterpolantsResultBuffer ); + + interpolant.__cacheIndex = lastActiveIndex; + interpolants[ lastActiveIndex ] = interpolant; + + } + + return interpolant; + + } + + _takeBackControlInterpolant( interpolant ) { + + const interpolants = this._controlInterpolants, + prevIndex = interpolant.__cacheIndex, + + firstInactiveIndex = -- this._nActiveControlInterpolants, + + lastActiveInterpolant = interpolants[ firstInactiveIndex ]; + + interpolant.__cacheIndex = firstInactiveIndex; + interpolants[ firstInactiveIndex ] = interpolant; + + lastActiveInterpolant.__cacheIndex = prevIndex; + interpolants[ prevIndex ] = lastActiveInterpolant; + + } + + // return an action for a clip optionally using a custom root target + // object (this method allocates a lot of dynamic memory in case a + // previously unknown clip/root combination is specified) + clipAction( clip, optionalRoot, blendMode ) { + + const root = optionalRoot || this._root, + rootUuid = root.uuid; + + let clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip; + + const clipUuid = clipObject !== null ? clipObject.uuid : clip; + + const actionsForClip = this._actionsByClip[ clipUuid ]; + let prototypeAction = null; + + if ( blendMode === undefined ) { + + if ( clipObject !== null ) { + + blendMode = clipObject.blendMode; + + } else { + + blendMode = NormalAnimationBlendMode; + + } + + } + + if ( actionsForClip !== undefined ) { + + const existingAction = actionsForClip.actionByRoot[ rootUuid ]; + + if ( existingAction !== undefined && existingAction.blendMode === blendMode ) { + + return existingAction; + + } + + // we know the clip, so we don't have to parse all + // the bindings again but can just copy + prototypeAction = actionsForClip.knownActions[ 0 ]; + + // also, take the clip from the prototype action + if ( clipObject === null ) + clipObject = prototypeAction._clip; + + } + + // clip must be known when specified via string + if ( clipObject === null ) return null; + + // allocate all resources required to run it + const newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode ); + + this._bindAction( newAction, prototypeAction ); + + // and make the action known to the memory manager + this._addInactiveAction( newAction, clipUuid, rootUuid ); + + return newAction; + + } + + // get an existing action + existingAction( clip, optionalRoot ) { + + const root = optionalRoot || this._root, + rootUuid = root.uuid, + + clipObject = typeof clip === 'string' ? + AnimationClip.findByName( root, clip ) : clip, + + clipUuid = clipObject ? clipObject.uuid : clip, + + actionsForClip = this._actionsByClip[ clipUuid ]; + + if ( actionsForClip !== undefined ) { + + return actionsForClip.actionByRoot[ rootUuid ] || null; + + } + + return null; + + } + + // deactivates all previously scheduled actions + stopAllAction() { + + const actions = this._actions, + nActions = this._nActiveActions; + + for ( let i = nActions - 1; i >= 0; -- i ) { + + actions[ i ].stop(); + + } + + return this; + + } + + // advance the time and update apply the animation + update( deltaTime ) { + + deltaTime *= this.timeScale; + + const actions = this._actions, + nActions = this._nActiveActions, + + time = this.time += deltaTime, + timeDirection = Math.sign( deltaTime ), + + accuIndex = this._accuIndex ^= 1; + + // run active actions + + for ( let i = 0; i !== nActions; ++ i ) { + + const action = actions[ i ]; + + action._update( time, deltaTime, timeDirection, accuIndex ); + + } + + // update scene graph + + const bindings = this._bindings, + nBindings = this._nActiveBindings; + + for ( let i = 0; i !== nBindings; ++ i ) { + + bindings[ i ].apply( accuIndex ); + + } + + return this; + + } + + // Allows you to seek to a specific time in an animation. + setTime( timeInSeconds ) { + + this.time = 0; // Zero out time attribute for AnimationMixer object; + for ( let i = 0; i < this._actions.length; i ++ ) { + + this._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects. + + } + + return this.update( timeInSeconds ); // Update used to set exact time. Returns "this" AnimationMixer object. + + } + + // return this mixer's root target object + getRoot() { + + return this._root; + + } + + // free all resources specific to a particular clip + uncacheClip( clip ) { + + const actions = this._actions, + clipUuid = clip.uuid, + actionsByClip = this._actionsByClip, + actionsForClip = actionsByClip[ clipUuid ]; + + if ( actionsForClip !== undefined ) { + + // note: just calling _removeInactiveAction would mess up the + // iteration state and also require updating the state we can + // just throw away + + const actionsToRemove = actionsForClip.knownActions; + + for ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) { + + const action = actionsToRemove[ i ]; + + this._deactivateAction( action ); + + const cacheIndex = action._cacheIndex, + lastInactiveAction = actions[ actions.length - 1 ]; + + action._cacheIndex = null; + action._byClipCacheIndex = null; + + lastInactiveAction._cacheIndex = cacheIndex; + actions[ cacheIndex ] = lastInactiveAction; + actions.pop(); + + this._removeInactiveBindingsForAction( action ); + + } + + delete actionsByClip[ clipUuid ]; + + } + + } + + // free all resources specific to a particular root target object + uncacheRoot( root ) { + + const rootUuid = root.uuid, + actionsByClip = this._actionsByClip; + + for ( const clipUuid in actionsByClip ) { + + const actionByRoot = actionsByClip[ clipUuid ].actionByRoot, + action = actionByRoot[ rootUuid ]; + + if ( action !== undefined ) { + + this._deactivateAction( action ); + this._removeInactiveAction( action ); + + } + + } + + const bindingsByRoot = this._bindingsByRootAndName, + bindingByName = bindingsByRoot[ rootUuid ]; + + if ( bindingByName !== undefined ) { + + for ( const trackName in bindingByName ) { + + const binding = bindingByName[ trackName ]; + binding.restoreOriginalState(); + this._removeInactiveBinding( binding ); + + } + + } + + } + + // remove a targeted clip from the cache + uncacheAction( clip, optionalRoot ) { + + const action = this.existingAction( clip, optionalRoot ); + + if ( action !== null ) { + + this._deactivateAction( action ); + this._removeInactiveAction( action ); + + } + + } + +} + +AnimationMixer.prototype._controlInterpolantsResultBuffer = new Float32Array( 1 ); + +class Uniform { + + constructor( value ) { + + if ( typeof value === 'string' ) { + + console.warn( 'THREE.Uniform: Type parameter is no longer needed.' ); + value = arguments[ 1 ]; + + } + + this.value = value; + + } + + clone() { + + return new Uniform( this.value.clone === undefined ? this.value : this.value.clone() ); + + } + +} + +class InstancedInterleavedBuffer extends InterleavedBuffer { + + constructor( array, stride, meshPerAttribute = 1 ) { + + super( array, stride ); + + this.meshPerAttribute = meshPerAttribute; + + } + + copy( source ) { + + super.copy( source ); + + this.meshPerAttribute = source.meshPerAttribute; + + return this; + + } + + clone( data ) { + + const ib = super.clone( data ); + + ib.meshPerAttribute = this.meshPerAttribute; + + return ib; + + } + + toJSON( data ) { + + const json = super.toJSON( data ); + + json.isInstancedInterleavedBuffer = true; + json.meshPerAttribute = this.meshPerAttribute; + + return json; + + } + +} + +InstancedInterleavedBuffer.prototype.isInstancedInterleavedBuffer = true; + +class GLBufferAttribute { + + constructor( buffer, type, itemSize, elementSize, count ) { + + this.buffer = buffer; + this.type = type; + this.itemSize = itemSize; + this.elementSize = elementSize; + this.count = count; + + this.version = 0; + + } + + set needsUpdate( value ) { + + if ( value === true ) this.version ++; + + } + + setBuffer( buffer ) { + + this.buffer = buffer; + + return this; + + } + + setType( type, elementSize ) { + + this.type = type; + this.elementSize = elementSize; + + return this; + + } + + setItemSize( itemSize ) { + + this.itemSize = itemSize; + + return this; + + } + + setCount( count ) { + + this.count = count; + + return this; + + } + +} + +GLBufferAttribute.prototype.isGLBufferAttribute = true; + +class Raycaster { + + constructor( origin, direction, near = 0, far = Infinity ) { + + this.ray = new Ray( origin, direction ); + // direction is assumed to be normalized (for accurate distance calculations) + + this.near = near; + this.far = far; + this.camera = null; + this.layers = new Layers(); + + this.params = { + Mesh: {}, + Line: { threshold: 1 }, + LOD: {}, + Points: { threshold: 1 }, + Sprite: {} + }; + + } + + set( origin, direction ) { + + // direction is assumed to be normalized (for accurate distance calculations) + + this.ray.set( origin, direction ); + + } + + setFromCamera( coords, camera ) { + + if ( camera && camera.isPerspectiveCamera ) { + + this.ray.origin.setFromMatrixPosition( camera.matrixWorld ); + this.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize(); + this.camera = camera; + + } else if ( camera && camera.isOrthographicCamera ) { + + this.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera + this.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ); + this.camera = camera; + + } else { + + console.error( 'THREE.Raycaster: Unsupported camera type: ' + camera.type ); + + } + + } + + intersectObject( object, recursive = false, intersects = [] ) { + + intersectObject( object, this, intersects, recursive ); + + intersects.sort( ascSort ); + + return intersects; + + } + + intersectObjects( objects, recursive = false, intersects = [] ) { + + for ( let i = 0, l = objects.length; i < l; i ++ ) { + + intersectObject( objects[ i ], this, intersects, recursive ); + + } + + intersects.sort( ascSort ); + + return intersects; + + } + +} + +function ascSort( a, b ) { + + return a.distance - b.distance; + +} + +function intersectObject( object, raycaster, intersects, recursive ) { + + if ( object.layers.test( raycaster.layers ) ) { + + object.raycast( raycaster, intersects ); + + } + + if ( recursive === true ) { + + const children = object.children; + + for ( let i = 0, l = children.length; i < l; i ++ ) { + + intersectObject( children[ i ], raycaster, intersects, true ); + + } + + } + +} + +/** + * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system + * + * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up. + * The azimuthal angle (theta) is measured from the positive z-axis. + */ + +class Spherical { + + constructor( radius = 1, phi = 0, theta = 0 ) { + + this.radius = radius; + this.phi = phi; // polar angle + this.theta = theta; // azimuthal angle + + return this; + + } + + set( radius, phi, theta ) { + + this.radius = radius; + this.phi = phi; + this.theta = theta; + + return this; + + } + + copy( other ) { + + this.radius = other.radius; + this.phi = other.phi; + this.theta = other.theta; + + return this; + + } + + // restrict phi to be betwee EPS and PI-EPS + makeSafe() { + + const EPS = 0.000001; + this.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) ); + + return this; + + } + + setFromVector3( v ) { + + return this.setFromCartesianCoords( v.x, v.y, v.z ); + + } + + setFromCartesianCoords( x, y, z ) { + + this.radius = Math.sqrt( x * x + y * y + z * z ); + + if ( this.radius === 0 ) { + + this.theta = 0; + this.phi = 0; + + } else { + + this.theta = Math.atan2( x, z ); + this.phi = Math.acos( clamp( y / this.radius, - 1, 1 ) ); + + } + + return this; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + +} + +/** + * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system + */ + +class Cylindrical { + + constructor( radius = 1, theta = 0, y = 0 ) { + + this.radius = radius; // distance from the origin to a point in the x-z plane + this.theta = theta; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis + this.y = y; // height above the x-z plane + + return this; + + } + + set( radius, theta, y ) { + + this.radius = radius; + this.theta = theta; + this.y = y; + + return this; + + } + + copy( other ) { + + this.radius = other.radius; + this.theta = other.theta; + this.y = other.y; + + return this; + + } + + setFromVector3( v ) { + + return this.setFromCartesianCoords( v.x, v.y, v.z ); + + } + + setFromCartesianCoords( x, y, z ) { + + this.radius = Math.sqrt( x * x + z * z ); + this.theta = Math.atan2( x, z ); + this.y = y; + + return this; + + } + + clone() { + + return new this.constructor().copy( this ); + + } + +} + +const _vector$4 = /*@__PURE__*/ new Vector2(); + +class Box2 { + + constructor( min = new Vector2( + Infinity, + Infinity ), max = new Vector2( - Infinity, - Infinity ) ) { + + this.min = min; + this.max = max; + + } + + set( min, max ) { + + this.min.copy( min ); + this.max.copy( max ); + + 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$4.copy( size ).multiplyScalar( 0.5 ); + this.min.copy( center ).sub( halfSize ); + this.max.copy( center ).add( halfSize ); + + return this; + + } + + 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 = + Infinity; + this.max.x = this.max.y = - 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 ); + + } + + getCenter( target ) { + + return this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); + + } + + getSize( target ) { + + return this.isEmpty() ? target.set( 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; + + } + + containsPoint( point ) { + + return point.x < this.min.x || point.x > this.max.x || + point.y < this.min.y || point.y > this.max.y ? 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; + + } + + 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 ) + ); + + } + + intersectsBox( box ) { + + // using 4 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 ? false : true; + + } + + clampPoint( point, target ) { + + return target.copy( point ).clamp( this.min, this.max ); + + } + + distanceToPoint( point ) { + + const clampedPoint = _vector$4.copy( point ).clamp( this.min, this.max ); + return clampedPoint.sub( point ).length(); + + } + + intersect( box ) { + + this.min.max( box.min ); + this.max.min( box.max ); + + return this; + + } + + union( box ) { + + this.min.min( box.min ); + this.max.max( box.max ); + + 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 ); + + } + +} + +Box2.prototype.isBox2 = true; + +const _startP = /*@__PURE__*/ new Vector3(); +const _startEnd = /*@__PURE__*/ new Vector3(); + +class Line3 { + + constructor( start = new Vector3(), end = new Vector3() ) { + + this.start = start; + this.end = end; + + } + + set( start, end ) { + + this.start.copy( start ); + this.end.copy( end ); + + return this; + + } + + copy( line ) { + + this.start.copy( line.start ); + this.end.copy( line.end ); + + return this; + + } + + getCenter( target ) { + + return target.addVectors( this.start, this.end ).multiplyScalar( 0.5 ); + + } + + delta( target ) { + + return target.subVectors( this.end, this.start ); + + } + + distanceSq() { + + return this.start.distanceToSquared( this.end ); + + } + + distance() { + + return this.start.distanceTo( this.end ); + + } + + at( t, target ) { + + return this.delta( target ).multiplyScalar( t ).add( this.start ); + + } + + closestPointToPointParameter( point, clampToLine ) { + + _startP.subVectors( point, this.start ); + _startEnd.subVectors( this.end, this.start ); + + const startEnd2 = _startEnd.dot( _startEnd ); + const startEnd_startP = _startEnd.dot( _startP ); + + let t = startEnd_startP / startEnd2; + + if ( clampToLine ) { + + t = clamp( t, 0, 1 ); + + } + + return t; + + } + + closestPointToPoint( point, clampToLine, target ) { + + const t = this.closestPointToPointParameter( point, clampToLine ); + + return this.delta( target ).multiplyScalar( t ).add( this.start ); + + } + + applyMatrix4( matrix ) { + + this.start.applyMatrix4( matrix ); + this.end.applyMatrix4( matrix ); + + return this; + + } + + equals( line ) { + + return line.start.equals( this.start ) && line.end.equals( this.end ); + + } + + clone() { + + return new this.constructor().copy( this ); + + } + +} + +class ImmediateRenderObject extends Object3D { + + constructor( material ) { + + super(); + + this.material = material; + this.render = function ( /* renderCallback */ ) {}; + + this.hasPositions = false; + this.hasNormals = false; + this.hasColors = false; + this.hasUvs = false; + + this.positionArray = null; + this.normalArray = null; + this.colorArray = null; + this.uvArray = null; + + this.count = 0; + + } + +} + +ImmediateRenderObject.prototype.isImmediateRenderObject = true; + +const _vector$3 = /*@__PURE__*/ new Vector3(); + +class SpotLightHelper extends Object3D { + + constructor( light, color ) { + + super(); + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + const geometry = new BufferGeometry(); + + const positions = [ + 0, 0, 0, 0, 0, 1, + 0, 0, 0, 1, 0, 1, + 0, 0, 0, - 1, 0, 1, + 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, - 1, 1 + ]; + + for ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) { + + const p1 = ( i / l ) * Math.PI * 2; + const p2 = ( j / l ) * Math.PI * 2; + + positions.push( + Math.cos( p1 ), Math.sin( p1 ), 1, + Math.cos( p2 ), Math.sin( p2 ), 1 + ); + + } + + geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + + const material = new LineBasicMaterial( { fog: false, toneMapped: false } ); + + this.cone = new LineSegments( geometry, material ); + this.add( this.cone ); + + this.update(); + + } + + dispose() { + + this.cone.geometry.dispose(); + this.cone.material.dispose(); + + } + + update() { + + this.light.updateMatrixWorld(); + + const coneLength = this.light.distance ? this.light.distance : 1000; + const coneWidth = coneLength * Math.tan( this.light.angle ); + + this.cone.scale.set( coneWidth, coneWidth, coneLength ); + + _vector$3.setFromMatrixPosition( this.light.target.matrixWorld ); + + this.cone.lookAt( _vector$3 ); + + if ( this.color !== undefined ) { + + this.cone.material.color.set( this.color ); + + } else { + + this.cone.material.color.copy( this.light.color ); + + } + + } + +} + +const _vector$2 = /*@__PURE__*/ new Vector3(); +const _boneMatrix = /*@__PURE__*/ new Matrix4(); +const _matrixWorldInv = /*@__PURE__*/ new Matrix4(); + + +class SkeletonHelper extends LineSegments { + + constructor( object ) { + + const bones = getBoneList( object ); + + const geometry = new BufferGeometry(); + + const vertices = []; + const colors = []; + + const color1 = new Color( 0, 0, 1 ); + const color2 = new Color( 0, 1, 0 ); + + for ( let i = 0; i < bones.length; i ++ ) { + + const bone = bones[ i ]; + + if ( bone.parent && bone.parent.isBone ) { + + vertices.push( 0, 0, 0 ); + vertices.push( 0, 0, 0 ); + colors.push( color1.r, color1.g, color1.b ); + colors.push( color2.r, color2.g, color2.b ); + + } + + } + + geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + const material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } ); + + super( geometry, material ); + + this.type = 'SkeletonHelper'; + this.isSkeletonHelper = true; + + this.root = object; + this.bones = bones; + + this.matrix = object.matrixWorld; + this.matrixAutoUpdate = false; + + } + + updateMatrixWorld( force ) { + + const bones = this.bones; + + const geometry = this.geometry; + const position = geometry.getAttribute( 'position' ); + + _matrixWorldInv.copy( this.root.matrixWorld ).invert(); + + for ( let i = 0, j = 0; i < bones.length; i ++ ) { + + const bone = bones[ i ]; + + if ( bone.parent && bone.parent.isBone ) { + + _boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld ); + _vector$2.setFromMatrixPosition( _boneMatrix ); + position.setXYZ( j, _vector$2.x, _vector$2.y, _vector$2.z ); + + _boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld ); + _vector$2.setFromMatrixPosition( _boneMatrix ); + position.setXYZ( j + 1, _vector$2.x, _vector$2.y, _vector$2.z ); + + j += 2; + + } + + } + + geometry.getAttribute( 'position' ).needsUpdate = true; + + super.updateMatrixWorld( force ); + + } + +} + + +function getBoneList( object ) { + + const boneList = []; + + if ( object && object.isBone ) { + + boneList.push( object ); + + } + + for ( let i = 0; i < object.children.length; i ++ ) { + + boneList.push.apply( boneList, getBoneList( object.children[ i ] ) ); + + } + + return boneList; + +} + +class PointLightHelper extends Mesh { + + constructor( light, sphereSize, color ) { + + const geometry = new SphereGeometry( sphereSize, 4, 2 ); + const material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } ); + + super( geometry, material ); + + this.light = light; + this.light.updateMatrixWorld(); + + this.color = color; + + this.type = 'PointLightHelper'; + + this.matrix = this.light.matrixWorld; + this.matrixAutoUpdate = false; + + this.update(); + + + /* + // TODO: delete this comment? + const distanceGeometry = new THREE.IcosahedronBufferGeometry( 1, 2 ); + const distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } ); + + this.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial ); + this.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial ); + + const d = light.distance; + + if ( d === 0.0 ) { + + this.lightDistance.visible = false; + + } else { + + this.lightDistance.scale.set( d, d, d ); + + } + + this.add( this.lightDistance ); + */ + + } + + dispose() { + + this.geometry.dispose(); + this.material.dispose(); + + } + + update() { + + if ( this.color !== undefined ) { + + this.material.color.set( this.color ); + + } else { + + this.material.color.copy( this.light.color ); + + } + + /* + const d = this.light.distance; + + if ( d === 0.0 ) { + + this.lightDistance.visible = false; + + } else { + + this.lightDistance.visible = true; + this.lightDistance.scale.set( d, d, d ); + + } + */ + + } + +} + +const _vector$1 = /*@__PURE__*/ new Vector3(); +const _color1 = /*@__PURE__*/ new Color(); +const _color2 = /*@__PURE__*/ new Color(); + +class HemisphereLightHelper extends Object3D { + + constructor( light, size, color ) { + + super(); + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + const geometry = new OctahedronGeometry( size ); + geometry.rotateY( Math.PI * 0.5 ); + + this.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } ); + if ( this.color === undefined ) this.material.vertexColors = true; + + const position = geometry.getAttribute( 'position' ); + const colors = new Float32Array( position.count * 3 ); + + geometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) ); + + this.add( new Mesh( geometry, this.material ) ); + + this.update(); + + } + + dispose() { + + this.children[ 0 ].geometry.dispose(); + this.children[ 0 ].material.dispose(); + + } + + update() { + + const mesh = this.children[ 0 ]; + + if ( this.color !== undefined ) { + + this.material.color.set( this.color ); + + } else { + + const colors = mesh.geometry.getAttribute( 'color' ); + + _color1.copy( this.light.color ); + _color2.copy( this.light.groundColor ); + + for ( let i = 0, l = colors.count; i < l; i ++ ) { + + const color = ( i < ( l / 2 ) ) ? _color1 : _color2; + + colors.setXYZ( i, color.r, color.g, color.b ); + + } + + colors.needsUpdate = true; + + } + + mesh.lookAt( _vector$1.setFromMatrixPosition( this.light.matrixWorld ).negate() ); + + } + +} + +class GridHelper extends LineSegments { + + constructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) { + + color1 = new Color( color1 ); + color2 = new Color( color2 ); + + const center = divisions / 2; + const step = size / divisions; + const halfSize = size / 2; + + const vertices = [], colors = []; + + for ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) { + + vertices.push( - halfSize, 0, k, halfSize, 0, k ); + vertices.push( k, 0, - halfSize, k, 0, halfSize ); + + const color = i === center ? color1 : color2; + + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + + } + + const geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + const material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } ); + + super( geometry, material ); + + this.type = 'GridHelper'; + + } + +} + +class PolarGridHelper extends LineSegments { + + constructor( radius = 10, radials = 16, circles = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) { + + color1 = new Color( color1 ); + color2 = new Color( color2 ); + + const vertices = []; + const colors = []; + + // create the radials + + for ( let i = 0; i <= radials; i ++ ) { + + const v = ( i / radials ) * ( Math.PI * 2 ); + + const x = Math.sin( v ) * radius; + const z = Math.cos( v ) * radius; + + vertices.push( 0, 0, 0 ); + vertices.push( x, 0, z ); + + const color = ( i & 1 ) ? color1 : color2; + + colors.push( color.r, color.g, color.b ); + colors.push( color.r, color.g, color.b ); + + } + + // create the circles + + for ( let i = 0; i <= circles; i ++ ) { + + const color = ( i & 1 ) ? color1 : color2; + + const r = radius - ( radius / circles * i ); + + for ( let j = 0; j < divisions; j ++ ) { + + // first vertex + + let v = ( j / divisions ) * ( Math.PI * 2 ); + + let x = Math.sin( v ) * r; + let z = Math.cos( v ) * r; + + vertices.push( x, 0, z ); + colors.push( color.r, color.g, color.b ); + + // second vertex + + v = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 ); + + x = Math.sin( v ) * r; + z = Math.cos( v ) * r; + + vertices.push( x, 0, z ); + colors.push( color.r, color.g, color.b ); + + } + + } + + const geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + const material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } ); + + super( geometry, material ); + + this.type = 'PolarGridHelper'; + + } + +} + +const _v1 = /*@__PURE__*/ new Vector3(); +const _v2 = /*@__PURE__*/ new Vector3(); +const _v3 = /*@__PURE__*/ new Vector3(); + +class DirectionalLightHelper extends Object3D { + + constructor( light, size, color ) { + + super(); + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + if ( size === undefined ) size = 1; + + let geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( [ + - size, size, 0, + size, size, 0, + size, - size, 0, + - size, - size, 0, + - size, size, 0 + ], 3 ) ); + + const material = new LineBasicMaterial( { fog: false, toneMapped: false } ); + + this.lightPlane = new Line( geometry, material ); + this.add( this.lightPlane ); + + geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) ); + + this.targetLine = new Line( geometry, material ); + this.add( this.targetLine ); + + this.update(); + + } + + dispose() { + + this.lightPlane.geometry.dispose(); + this.lightPlane.material.dispose(); + this.targetLine.geometry.dispose(); + this.targetLine.material.dispose(); + + } + + update() { + + _v1.setFromMatrixPosition( this.light.matrixWorld ); + _v2.setFromMatrixPosition( this.light.target.matrixWorld ); + _v3.subVectors( _v2, _v1 ); + + this.lightPlane.lookAt( _v2 ); + + if ( this.color !== undefined ) { + + this.lightPlane.material.color.set( this.color ); + this.targetLine.material.color.set( this.color ); + + } else { + + this.lightPlane.material.color.copy( this.light.color ); + this.targetLine.material.color.copy( this.light.color ); + + } + + this.targetLine.lookAt( _v2 ); + this.targetLine.scale.z = _v3.length(); + + } + +} + +const _vector = /*@__PURE__*/ new Vector3(); +const _camera = /*@__PURE__*/ new Camera(); + +/** + * - shows frustum, line of sight and up of the camera + * - suitable for fast updates + * - based on frustum visualization in lightgl.js shadowmap example + * http://evanw.github.com/lightgl.js/tests/shadowmap.html + */ + +class CameraHelper extends LineSegments { + + constructor( camera ) { + + const geometry = new BufferGeometry(); + const material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } ); + + const vertices = []; + const colors = []; + + const pointMap = {}; + + // colors + + const colorFrustum = new Color( 0xffaa00 ); + const colorCone = new Color( 0xff0000 ); + const colorUp = new Color( 0x00aaff ); + const colorTarget = new Color( 0xffffff ); + const colorCross = new Color( 0x333333 ); + + // near + + addLine( 'n1', 'n2', colorFrustum ); + addLine( 'n2', 'n4', colorFrustum ); + addLine( 'n4', 'n3', colorFrustum ); + addLine( 'n3', 'n1', colorFrustum ); + + // far + + addLine( 'f1', 'f2', colorFrustum ); + addLine( 'f2', 'f4', colorFrustum ); + addLine( 'f4', 'f3', colorFrustum ); + addLine( 'f3', 'f1', colorFrustum ); + + // sides + + addLine( 'n1', 'f1', colorFrustum ); + addLine( 'n2', 'f2', colorFrustum ); + addLine( 'n3', 'f3', colorFrustum ); + addLine( 'n4', 'f4', colorFrustum ); + + // cone + + addLine( 'p', 'n1', colorCone ); + addLine( 'p', 'n2', colorCone ); + addLine( 'p', 'n3', colorCone ); + addLine( 'p', 'n4', colorCone ); + + // up + + addLine( 'u1', 'u2', colorUp ); + addLine( 'u2', 'u3', colorUp ); + addLine( 'u3', 'u1', colorUp ); + + // target + + addLine( 'c', 't', colorTarget ); + addLine( 'p', 'c', colorCross ); + + // cross + + addLine( 'cn1', 'cn2', colorCross ); + addLine( 'cn3', 'cn4', colorCross ); + + addLine( 'cf1', 'cf2', colorCross ); + addLine( 'cf3', 'cf4', colorCross ); + + function addLine( a, b, color ) { + + addPoint( a, color ); + addPoint( b, color ); + + } + + function addPoint( id, color ) { + + vertices.push( 0, 0, 0 ); + colors.push( color.r, color.g, color.b ); + + if ( pointMap[ id ] === undefined ) { + + pointMap[ id ] = []; + + } + + pointMap[ id ].push( ( vertices.length / 3 ) - 1 ); + + } + + geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + super( geometry, material ); + + this.type = 'CameraHelper'; + + this.camera = camera; + if ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix(); + + this.matrix = camera.matrixWorld; + this.matrixAutoUpdate = false; + + this.pointMap = pointMap; + + this.update(); + + } + + update() { + + const geometry = this.geometry; + const pointMap = this.pointMap; + + const w = 1, h = 1; + + // we need just camera projection matrix inverse + // world matrix must be identity + + _camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse ); + + // center / target + + setPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 ); + setPoint( 't', pointMap, geometry, _camera, 0, 0, 1 ); + + // near + + setPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 ); + setPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 ); + setPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 ); + setPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 ); + + // far + + setPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 ); + setPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 ); + setPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 ); + setPoint( 'f4', pointMap, geometry, _camera, w, h, 1 ); + + // up + + setPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 ); + setPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 ); + setPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 ); + + // cross + + setPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 ); + setPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 ); + setPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 ); + setPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 ); + + setPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 ); + setPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 ); + setPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 ); + setPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 ); + + geometry.getAttribute( 'position' ).needsUpdate = true; + + } + + dispose() { + + this.geometry.dispose(); + this.material.dispose(); + + } + +} + + +function setPoint( point, pointMap, geometry, camera, x, y, z ) { + + _vector.set( x, y, z ).unproject( camera ); + + const points = pointMap[ point ]; + + if ( points !== undefined ) { + + const position = geometry.getAttribute( 'position' ); + + for ( let i = 0, l = points.length; i < l; i ++ ) { + + position.setXYZ( points[ i ], _vector.x, _vector.y, _vector.z ); + + } + + } + +} + +const _box = /*@__PURE__*/ new Box3(); + +class BoxHelper extends LineSegments { + + constructor( object, color = 0xffff00 ) { + + const indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] ); + const positions = new Float32Array( 8 * 3 ); + + const geometry = new BufferGeometry(); + geometry.setIndex( new BufferAttribute( indices, 1 ) ); + geometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) ); + + super( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); + + this.object = object; + this.type = 'BoxHelper'; + + this.matrixAutoUpdate = false; + + this.update(); + + } + + update( object ) { + + if ( object !== undefined ) { + + console.warn( 'THREE.BoxHelper: .update() has no longer arguments.' ); + + } + + if ( this.object !== undefined ) { + + _box.setFromObject( this.object ); + + } + + if ( _box.isEmpty() ) return; + + const min = _box.min; + const max = _box.max; + + /* + 5____4 + 1/___0/| + | 6__|_7 + 2/___3/ + + 0: max.x, max.y, max.z + 1: min.x, max.y, max.z + 2: min.x, min.y, max.z + 3: max.x, min.y, max.z + 4: max.x, max.y, min.z + 5: min.x, max.y, min.z + 6: min.x, min.y, min.z + 7: max.x, min.y, min.z + */ + + const position = this.geometry.attributes.position; + const array = position.array; + + array[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z; + array[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z; + array[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z; + array[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z; + array[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z; + array[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z; + array[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z; + array[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z; + + position.needsUpdate = true; + + this.geometry.computeBoundingSphere(); + + + } + + setFromObject( object ) { + + this.object = object; + this.update(); + + return this; + + } + + copy( source ) { + + LineSegments.prototype.copy.call( this, source ); + + this.object = source.object; + + return this; + + } + +} + +class Box3Helper extends LineSegments { + + constructor( box, color = 0xffff00 ) { + + const indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] ); + + const positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ]; + + const geometry = new BufferGeometry(); + + geometry.setIndex( new BufferAttribute( indices, 1 ) ); + + geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + + super( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); + + this.box = box; + + this.type = 'Box3Helper'; + + this.geometry.computeBoundingSphere(); + + } + + updateMatrixWorld( force ) { + + const box = this.box; + + if ( box.isEmpty() ) return; + + box.getCenter( this.position ); + + box.getSize( this.scale ); + + this.scale.multiplyScalar( 0.5 ); + + super.updateMatrixWorld( force ); + + } + +} + +class PlaneHelper extends Line { + + constructor( plane, size = 1, hex = 0xffff00 ) { + + const color = hex; + + const positions = [ 1, - 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 ]; + + const geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + geometry.computeBoundingSphere(); + + super( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); + + this.type = 'PlaneHelper'; + + this.plane = plane; + + this.size = size; + + const positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ]; + + const geometry2 = new BufferGeometry(); + geometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) ); + geometry2.computeBoundingSphere(); + + this.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) ); + + } + + updateMatrixWorld( force ) { + + let scale = - this.plane.constant; + + if ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter + + this.scale.set( 0.5 * this.size, 0.5 * this.size, scale ); + + this.children[ 0 ].material.side = ( scale < 0 ) ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here + + this.lookAt( this.plane.normal ); + + super.updateMatrixWorld( force ); + + } + +} + +const _axis = /*@__PURE__*/ new Vector3(); +let _lineGeometry, _coneGeometry; + +class ArrowHelper extends Object3D { + + // dir is assumed to be normalized + + constructor( dir = new Vector3( 0, 0, 1 ), origin = new Vector3( 0, 0, 0 ), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2 ) { + + super(); + + this.type = 'ArrowHelper'; + + if ( _lineGeometry === undefined ) { + + _lineGeometry = new BufferGeometry(); + _lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) ); + + _coneGeometry = new CylinderGeometry( 0, 0.5, 1, 5, 1 ); + _coneGeometry.translate( 0, - 0.5, 0 ); + + } + + this.position.copy( origin ); + + this.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); + this.line.matrixAutoUpdate = false; + this.add( this.line ); + + this.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) ); + this.cone.matrixAutoUpdate = false; + this.add( this.cone ); + + this.setDirection( dir ); + this.setLength( length, headLength, headWidth ); + + } + + setDirection( dir ) { + + // dir is assumed to be normalized + + if ( dir.y > 0.99999 ) { + + this.quaternion.set( 0, 0, 0, 1 ); + + } else if ( dir.y < - 0.99999 ) { + + this.quaternion.set( 1, 0, 0, 0 ); + + } else { + + _axis.set( dir.z, 0, - dir.x ).normalize(); + + const radians = Math.acos( dir.y ); + + this.quaternion.setFromAxisAngle( _axis, radians ); + + } + + } + + setLength( length, headLength = length * 0.2, headWidth = headLength * 0.2 ) { + + this.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458 + this.line.updateMatrix(); + + this.cone.scale.set( headWidth, headLength, headWidth ); + this.cone.position.y = length; + this.cone.updateMatrix(); + + } + + setColor( color ) { + + this.line.material.color.set( color ); + this.cone.material.color.set( color ); + + } + + copy( source ) { + + super.copy( source, false ); + + this.line.copy( source.line ); + this.cone.copy( source.cone ); + + return this; + + } + +} + +class AxesHelper extends LineSegments { + + constructor( size = 1 ) { + + const vertices = [ + 0, 0, 0, size, 0, 0, + 0, 0, 0, 0, size, 0, + 0, 0, 0, 0, 0, size + ]; + + const colors = [ + 1, 0, 0, 1, 0.6, 0, + 0, 1, 0, 0.6, 1, 0, + 0, 0, 1, 0, 0.6, 1 + ]; + + const geometry = new BufferGeometry(); + geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + const material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } ); + + super( geometry, material ); + + this.type = 'AxesHelper'; + + } + + setColors( xAxisColor, yAxisColor, zAxisColor ) { + + const color = new Color(); + const array = this.geometry.attributes.color.array; + + color.set( xAxisColor ); + color.toArray( array, 0 ); + color.toArray( array, 3 ); + + color.set( yAxisColor ); + color.toArray( array, 6 ); + color.toArray( array, 9 ); + + color.set( zAxisColor ); + color.toArray( array, 12 ); + color.toArray( array, 15 ); + + this.geometry.attributes.color.needsUpdate = true; + + return this; + + } + + dispose() { + + this.geometry.dispose(); + this.material.dispose(); + + } + +} + +const _floatView = new Float32Array( 1 ); +const _int32View = new Int32Array( _floatView.buffer ); + +class DataUtils { + + // Converts float32 to float16 (stored as uint16 value). + + static toHalfFloat( val ) { + + // Source: http://gamedev.stackexchange.com/questions/17326/conversion-of-a-number-from-single-precision-floating-point-representation-to-a/17410#17410 + + /* This method is faster than the OpenEXR implementation (very often + * used, eg. in Ogre), with the additional benefit of rounding, inspired + * by James Tursa?s half-precision code. */ + + _floatView[ 0 ] = val; + const x = _int32View[ 0 ]; + + let bits = ( x >> 16 ) & 0x8000; /* Get the sign */ + let m = ( x >> 12 ) & 0x07ff; /* Keep one extra bit for rounding */ + const e = ( x >> 23 ) & 0xff; /* Using int is faster here */ + + /* If zero, or denormal, or exponent underflows too much for a denormal + * half, return signed zero. */ + if ( e < 103 ) return bits; + + /* If NaN, return NaN. If Inf or exponent overflow, return Inf. */ + if ( e > 142 ) { + + bits |= 0x7c00; + /* If exponent was 0xff and one mantissa bit was set, it means NaN, + * not Inf, so make sure we set one mantissa bit too. */ + bits |= ( ( e == 255 ) ? 0 : 1 ) && ( x & 0x007fffff ); + return bits; + + } + + /* If exponent underflows but not too much, return a denormal */ + if ( e < 113 ) { + + m |= 0x0800; + /* Extra rounding may overflow and set mantissa to 0 and exponent + * to 1, which is OK. */ + bits |= ( m >> ( 114 - e ) ) + ( ( m >> ( 113 - e ) ) & 1 ); + return bits; + + } + + bits |= ( ( e - 112 ) << 10 ) | ( m >> 1 ); + /* Extra rounding. An overflow will set mantissa to 0 and increment + * the exponent, which is OK. */ + bits += m & 1; + return bits; + + } + +} + +const LineStrip = 0; +const LinePieces = 1; +const NoColors = 0; +const FaceColors = 1; +const VertexColors = 2; + +function MeshFaceMaterial( materials ) { + + console.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' ); + return materials; + +} + +function MultiMaterial( materials = [] ) { + + console.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' ); + materials.isMultiMaterial = true; + materials.materials = materials; + materials.clone = function () { + + return materials.slice(); + + }; + + return materials; + +} + +function PointCloud( geometry, material ) { + + console.warn( 'THREE.PointCloud has been renamed to THREE.Points.' ); + return new Points( geometry, material ); + +} + +function Particle( material ) { + + console.warn( 'THREE.Particle has been renamed to THREE.Sprite.' ); + return new Sprite( material ); + +} + +function ParticleSystem( geometry, material ) { + + console.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' ); + return new Points( geometry, material ); + +} + +function PointCloudMaterial( parameters ) { + + console.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' ); + return new PointsMaterial( parameters ); + +} + +function ParticleBasicMaterial( parameters ) { + + console.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' ); + return new PointsMaterial( parameters ); + +} + +function ParticleSystemMaterial( parameters ) { + + console.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' ); + return new PointsMaterial( parameters ); + +} + +function Vertex( x, y, z ) { + + console.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' ); + return new Vector3( x, y, z ); + +} + +// + +function DynamicBufferAttribute( array, itemSize ) { + + console.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.' ); + return new BufferAttribute( array, itemSize ).setUsage( DynamicDrawUsage ); + +} + +function Int8Attribute( array, itemSize ) { + + console.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' ); + return new Int8BufferAttribute( array, itemSize ); + +} + +function Uint8Attribute( array, itemSize ) { + + console.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' ); + return new Uint8BufferAttribute( array, itemSize ); + +} + +function Uint8ClampedAttribute( array, itemSize ) { + + console.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' ); + return new Uint8ClampedBufferAttribute( array, itemSize ); + +} + +function Int16Attribute( array, itemSize ) { + + console.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' ); + return new Int16BufferAttribute( array, itemSize ); + +} + +function Uint16Attribute( array, itemSize ) { + + console.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' ); + return new Uint16BufferAttribute( array, itemSize ); + +} + +function Int32Attribute( array, itemSize ) { + + console.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' ); + return new Int32BufferAttribute( array, itemSize ); + +} + +function Uint32Attribute( array, itemSize ) { + + console.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' ); + return new Uint32BufferAttribute( array, itemSize ); + +} + +function Float32Attribute( array, itemSize ) { + + console.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' ); + return new Float32BufferAttribute( array, itemSize ); + +} + +function Float64Attribute( array, itemSize ) { + + console.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' ); + return new Float64BufferAttribute( array, itemSize ); + +} + +// + +Curve.create = function ( construct, getPoint ) { + + console.log( 'THREE.Curve.create() has been deprecated' ); + + construct.prototype = Object.create( Curve.prototype ); + construct.prototype.constructor = construct; + construct.prototype.getPoint = getPoint; + + return construct; + +}; + +// + +Path.prototype.fromPoints = function ( points ) { + + console.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' ); + return this.setFromPoints( points ); + +}; + +// + +function AxisHelper( size ) { + + console.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' ); + return new AxesHelper( size ); + +} + +function BoundingBoxHelper( object, color ) { + + console.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' ); + return new BoxHelper( object, color ); + +} + +function EdgesHelper( object, hex ) { + + console.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' ); + return new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) ); + +} + +GridHelper.prototype.setColors = function () { + + console.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' ); + +}; + +SkeletonHelper.prototype.update = function () { + + console.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' ); + +}; + +function WireframeHelper( object, hex ) { + + console.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' ); + return new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) ); + +} + +// + +Loader.prototype.extractUrlBase = function ( url ) { + + console.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' ); + return LoaderUtils.extractUrlBase( url ); + +}; + +Loader.Handlers = { + + add: function ( /* regex, loader */ ) { + + console.error( 'THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.' ); + + }, + + get: function ( /* file */ ) { + + console.error( 'THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.' ); + + } + +}; + +function XHRLoader( manager ) { + + console.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' ); + return new FileLoader( manager ); + +} + +function BinaryTextureLoader( manager ) { + + console.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' ); + return new DataTextureLoader( manager ); + +} + +// + +Box2.prototype.center = function ( optionalTarget ) { + + console.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + +}; + +Box2.prototype.empty = function () { + + console.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' ); + return this.isEmpty(); + +}; + +Box2.prototype.isIntersectionBox = function ( box ) { + + console.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + +}; + +Box2.prototype.size = function ( optionalTarget ) { + + console.warn( 'THREE.Box2: .size() has been renamed to .getSize().' ); + return this.getSize( optionalTarget ); + +}; + +// + +Box3.prototype.center = function ( optionalTarget ) { + + console.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + +}; + +Box3.prototype.empty = function () { + + console.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' ); + return this.isEmpty(); + +}; + +Box3.prototype.isIntersectionBox = function ( box ) { + + console.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + +}; + +Box3.prototype.isIntersectionSphere = function ( sphere ) { + + console.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); + return this.intersectsSphere( sphere ); + +}; + +Box3.prototype.size = function ( optionalTarget ) { + + console.warn( 'THREE.Box3: .size() has been renamed to .getSize().' ); + return this.getSize( optionalTarget ); + +}; + +// + +Sphere.prototype.empty = function () { + + console.warn( 'THREE.Sphere: .empty() has been renamed to .isEmpty().' ); + return this.isEmpty(); + +}; + +// + +Frustum.prototype.setFromMatrix = function ( m ) { + + console.warn( 'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().' ); + return this.setFromProjectionMatrix( m ); + +}; + +// + +Line3.prototype.center = function ( optionalTarget ) { + + console.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + +}; + +// + +Matrix3.prototype.flattenToArrayOffset = function ( array, offset ) { + + console.warn( 'THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' ); + return this.toArray( array, offset ); + +}; + +Matrix3.prototype.multiplyVector3 = function ( vector ) { + + console.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' ); + return vector.applyMatrix3( this ); + +}; + +Matrix3.prototype.multiplyVector3Array = function ( /* a */ ) { + + console.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' ); + +}; + +Matrix3.prototype.applyToBufferAttribute = function ( attribute ) { + + console.warn( 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.' ); + return attribute.applyMatrix3( this ); + +}; + +Matrix3.prototype.applyToVector3Array = function ( /* array, offset, length */ ) { + + console.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' ); + +}; + +Matrix3.prototype.getInverse = function ( matrix ) { + + console.warn( 'THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' ); + return this.copy( matrix ).invert(); + +}; + +// + +Matrix4.prototype.extractPosition = function ( m ) { + + console.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' ); + return this.copyPosition( m ); + +}; + +Matrix4.prototype.flattenToArrayOffset = function ( array, offset ) { + + console.warn( 'THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' ); + return this.toArray( array, offset ); + +}; + +Matrix4.prototype.getPosition = function () { + + console.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' ); + return new Vector3().setFromMatrixColumn( this, 3 ); + +}; + +Matrix4.prototype.setRotationFromQuaternion = function ( q ) { + + console.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' ); + return this.makeRotationFromQuaternion( q ); + +}; + +Matrix4.prototype.multiplyToArray = function () { + + console.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' ); + +}; + +Matrix4.prototype.multiplyVector3 = function ( vector ) { + + console.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + +}; + +Matrix4.prototype.multiplyVector4 = function ( vector ) { + + console.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + +}; + +Matrix4.prototype.multiplyVector3Array = function ( /* a */ ) { + + console.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' ); + +}; + +Matrix4.prototype.rotateAxis = function ( v ) { + + console.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' ); + v.transformDirection( this ); + +}; + +Matrix4.prototype.crossVector = function ( vector ) { + + console.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + +}; + +Matrix4.prototype.translate = function () { + + console.error( 'THREE.Matrix4: .translate() has been removed.' ); + +}; + +Matrix4.prototype.rotateX = function () { + + console.error( 'THREE.Matrix4: .rotateX() has been removed.' ); + +}; + +Matrix4.prototype.rotateY = function () { + + console.error( 'THREE.Matrix4: .rotateY() has been removed.' ); + +}; + +Matrix4.prototype.rotateZ = function () { + + console.error( 'THREE.Matrix4: .rotateZ() has been removed.' ); + +}; + +Matrix4.prototype.rotateByAxis = function () { + + console.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' ); + +}; + +Matrix4.prototype.applyToBufferAttribute = function ( attribute ) { + + console.warn( 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.' ); + return attribute.applyMatrix4( this ); + +}; + +Matrix4.prototype.applyToVector3Array = function ( /* array, offset, length */ ) { + + console.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' ); + +}; + +Matrix4.prototype.makeFrustum = function ( left, right, bottom, top, near, far ) { + + console.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' ); + return this.makePerspective( left, right, top, bottom, near, far ); + +}; + +Matrix4.prototype.getInverse = function ( matrix ) { + + console.warn( 'THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' ); + return this.copy( matrix ).invert(); + +}; + +// + +Plane.prototype.isIntersectionLine = function ( line ) { + + console.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' ); + return this.intersectsLine( line ); + +}; + +// + +Quaternion.prototype.multiplyVector3 = function ( vector ) { + + console.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' ); + return vector.applyQuaternion( this ); + +}; + +Quaternion.prototype.inverse = function ( ) { + + console.warn( 'THREE.Quaternion: .inverse() has been renamed to invert().' ); + return this.invert(); + +}; + +// + +Ray.prototype.isIntersectionBox = function ( box ) { + + console.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + +}; + +Ray.prototype.isIntersectionPlane = function ( plane ) { + + console.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' ); + return this.intersectsPlane( plane ); + +}; + +Ray.prototype.isIntersectionSphere = function ( sphere ) { + + console.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); + return this.intersectsSphere( sphere ); + +}; + +// + +Triangle.prototype.area = function () { + + console.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' ); + return this.getArea(); + +}; + +Triangle.prototype.barycoordFromPoint = function ( point, target ) { + + console.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' ); + return this.getBarycoord( point, target ); + +}; + +Triangle.prototype.midpoint = function ( target ) { + + console.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' ); + return this.getMidpoint( target ); + +}; + +Triangle.prototypenormal = function ( target ) { + + console.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' ); + return this.getNormal( target ); + +}; + +Triangle.prototype.plane = function ( target ) { + + console.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' ); + return this.getPlane( target ); + +}; + +Triangle.barycoordFromPoint = function ( point, a, b, c, target ) { + + console.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' ); + return Triangle.getBarycoord( point, a, b, c, target ); + +}; + +Triangle.normal = function ( a, b, c, target ) { + + console.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' ); + return Triangle.getNormal( a, b, c, target ); + +}; + +// + +Shape.prototype.extractAllPoints = function ( divisions ) { + + console.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' ); + return this.extractPoints( divisions ); + +}; + +Shape.prototype.extrude = function ( options ) { + + console.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' ); + return new ExtrudeGeometry( this, options ); + +}; + +Shape.prototype.makeGeometry = function ( options ) { + + console.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' ); + return new ShapeGeometry( this, options ); + +}; + +// + +Vector2.prototype.fromAttribute = function ( attribute, index, offset ) { + + console.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + +}; + +Vector2.prototype.distanceToManhattan = function ( v ) { + + console.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' ); + return this.manhattanDistanceTo( v ); + +}; + +Vector2.prototype.lengthManhattan = function () { + + console.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' ); + return this.manhattanLength(); + +}; + +// + +Vector3.prototype.setEulerFromRotationMatrix = function () { + + console.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' ); + +}; + +Vector3.prototype.setEulerFromQuaternion = function () { + + console.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' ); + +}; + +Vector3.prototype.getPositionFromMatrix = function ( m ) { + + console.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' ); + return this.setFromMatrixPosition( m ); + +}; + +Vector3.prototype.getScaleFromMatrix = function ( m ) { + + console.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' ); + return this.setFromMatrixScale( m ); + +}; + +Vector3.prototype.getColumnFromMatrix = function ( index, matrix ) { + + console.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' ); + return this.setFromMatrixColumn( matrix, index ); + +}; + +Vector3.prototype.applyProjection = function ( m ) { + + console.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' ); + return this.applyMatrix4( m ); + +}; + +Vector3.prototype.fromAttribute = function ( attribute, index, offset ) { + + console.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + +}; + +Vector3.prototype.distanceToManhattan = function ( v ) { + + console.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' ); + return this.manhattanDistanceTo( v ); + +}; + +Vector3.prototype.lengthManhattan = function () { + + console.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' ); + return this.manhattanLength(); + +}; + +// + +Vector4.prototype.fromAttribute = function ( attribute, index, offset ) { + + console.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + +}; + +Vector4.prototype.lengthManhattan = function () { + + console.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' ); + return this.manhattanLength(); + +}; + +// + +Object3D.prototype.getChildByName = function ( name ) { + + console.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' ); + return this.getObjectByName( name ); + +}; + +Object3D.prototype.renderDepth = function () { + + console.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' ); + +}; + +Object3D.prototype.translate = function ( distance, axis ) { + + console.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' ); + return this.translateOnAxis( axis, distance ); + +}; + +Object3D.prototype.getWorldRotation = function () { + + console.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' ); + +}; + +Object3D.prototype.applyMatrix = function ( matrix ) { + + console.warn( 'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().' ); + return this.applyMatrix4( matrix ); + +}; + +Object.defineProperties( Object3D.prototype, { + + eulerOrder: { + get: function () { + + console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); + return this.rotation.order; + + }, + set: function ( value ) { + + console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); + this.rotation.order = value; + + } + }, + useQuaternion: { + get: function () { + + console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); + + }, + set: function () { + + console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); + + } + } + +} ); + +Mesh.prototype.setDrawMode = function () { + + console.error( 'THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' ); + +}; + +Object.defineProperties( Mesh.prototype, { + + drawMode: { + get: function () { + + console.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.' ); + return TrianglesDrawMode; + + }, + set: function () { + + console.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' ); + + } + } + +} ); + +SkinnedMesh.prototype.initBones = function () { + + console.error( 'THREE.SkinnedMesh: initBones() has been removed.' ); + +}; + +// + +PerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) { + + console.warn( 'THREE.PerspectiveCamera.setLens is deprecated. ' + + 'Use .setFocalLength and .filmGauge for a photographic setup.' ); + + if ( filmGauge !== undefined ) this.filmGauge = filmGauge; + this.setFocalLength( focalLength ); + +}; + +// + +Object.defineProperties( Light.prototype, { + onlyShadow: { + set: function () { + + console.warn( 'THREE.Light: .onlyShadow has been removed.' ); + + } + }, + shadowCameraFov: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' ); + this.shadow.camera.fov = value; + + } + }, + shadowCameraLeft: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' ); + this.shadow.camera.left = value; + + } + }, + shadowCameraRight: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' ); + this.shadow.camera.right = value; + + } + }, + shadowCameraTop: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' ); + this.shadow.camera.top = value; + + } + }, + shadowCameraBottom: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' ); + this.shadow.camera.bottom = value; + + } + }, + shadowCameraNear: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' ); + this.shadow.camera.near = value; + + } + }, + shadowCameraFar: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' ); + this.shadow.camera.far = value; + + } + }, + shadowCameraVisible: { + set: function () { + + console.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' ); + + } + }, + shadowBias: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' ); + this.shadow.bias = value; + + } + }, + shadowDarkness: { + set: function () { + + console.warn( 'THREE.Light: .shadowDarkness has been removed.' ); + + } + }, + shadowMapWidth: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' ); + this.shadow.mapSize.width = value; + + } + }, + shadowMapHeight: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' ); + this.shadow.mapSize.height = value; + + } + } +} ); + +// + +Object.defineProperties( BufferAttribute.prototype, { + + length: { + get: function () { + + console.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' ); + return this.array.length; + + } + }, + dynamic: { + get: function () { + + console.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' ); + return this.usage === DynamicDrawUsage; + + }, + set: function ( /* value */ ) { + + console.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' ); + this.setUsage( DynamicDrawUsage ); + + } + } + +} ); + +BufferAttribute.prototype.setDynamic = function ( value ) { + + console.warn( 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.' ); + this.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage ); + return this; + +}; + +BufferAttribute.prototype.copyIndicesArray = function ( /* indices */ ) { + + console.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' ); + +}, + +BufferAttribute.prototype.setArray = function ( /* array */ ) { + + console.error( 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' ); + +}; + +// + +BufferGeometry.prototype.addIndex = function ( index ) { + + console.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' ); + this.setIndex( index ); + +}; + +BufferGeometry.prototype.addAttribute = function ( name, attribute ) { + + console.warn( 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().' ); + + if ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) { + + console.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' ); + + return this.setAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) ); + + } + + if ( name === 'index' ) { + + console.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' ); + this.setIndex( attribute ); + + return this; + + } + + return this.setAttribute( name, attribute ); + +}; + +BufferGeometry.prototype.addDrawCall = function ( start, count, indexOffset ) { + + if ( indexOffset !== undefined ) { + + console.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' ); + + } + + console.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' ); + this.addGroup( start, count ); + +}; + +BufferGeometry.prototype.clearDrawCalls = function () { + + console.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' ); + this.clearGroups(); + +}; + +BufferGeometry.prototype.computeOffsets = function () { + + console.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' ); + +}; + +BufferGeometry.prototype.removeAttribute = function ( name ) { + + console.warn( 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().' ); + + return this.deleteAttribute( name ); + +}; + +BufferGeometry.prototype.applyMatrix = function ( matrix ) { + + console.warn( 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().' ); + return this.applyMatrix4( matrix ); + +}; + +Object.defineProperties( BufferGeometry.prototype, { + + drawcalls: { + get: function () { + + console.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' ); + return this.groups; + + } + }, + offsets: { + get: function () { + + console.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' ); + return this.groups; + + } + } + +} ); + +InterleavedBuffer.prototype.setDynamic = function ( value ) { + + console.warn( 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.' ); + this.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage ); + return this; + +}; + +InterleavedBuffer.prototype.setArray = function ( /* array */ ) { + + console.error( 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' ); + +}; + +// + +ExtrudeGeometry.prototype.getArrays = function () { + + console.error( 'THREE.ExtrudeGeometry: .getArrays() has been removed.' ); + +}; + +ExtrudeGeometry.prototype.addShapeList = function () { + + console.error( 'THREE.ExtrudeGeometry: .addShapeList() has been removed.' ); + +}; + +ExtrudeGeometry.prototype.addShape = function () { + + console.error( 'THREE.ExtrudeGeometry: .addShape() has been removed.' ); + +}; + +// + +Scene.prototype.dispose = function () { + + console.error( 'THREE.Scene: .dispose() has been removed.' ); + +}; + +// + +Uniform.prototype.onUpdate = function () { + + console.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' ); + return this; + +}; + +// + +Object.defineProperties( Material.prototype, { + + wrapAround: { + get: function () { + + console.warn( 'THREE.Material: .wrapAround has been removed.' ); + + }, + set: function () { + + console.warn( 'THREE.Material: .wrapAround has been removed.' ); + + } + }, + + overdraw: { + get: function () { + + console.warn( 'THREE.Material: .overdraw has been removed.' ); + + }, + set: function () { + + console.warn( 'THREE.Material: .overdraw has been removed.' ); + + } + }, + + wrapRGB: { + get: function () { + + console.warn( 'THREE.Material: .wrapRGB has been removed.' ); + return new Color(); + + } + }, + + shading: { + get: function () { + + console.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + + }, + set: function ( value ) { + + console.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + this.flatShading = ( value === FlatShading ); + + } + }, + + stencilMask: { + get: function () { + + console.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' ); + return this.stencilFuncMask; + + }, + set: function ( value ) { + + console.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' ); + this.stencilFuncMask = value; + + } + }, + + vertexTangents: { + get: function () { + + console.warn( 'THREE.' + this.type + ': .vertexTangents has been removed.' ); + + }, + set: function () { + + console.warn( 'THREE.' + this.type + ': .vertexTangents has been removed.' ); + + } + }, + +} ); + +Object.defineProperties( ShaderMaterial.prototype, { + + derivatives: { + get: function () { + + console.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); + return this.extensions.derivatives; + + }, + set: function ( value ) { + + console.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); + this.extensions.derivatives = value; + + } + } + +} ); + +// + +WebGLRenderer.prototype.clearTarget = function ( renderTarget, color, depth, stencil ) { + + console.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' ); + this.setRenderTarget( renderTarget ); + this.clear( color, depth, stencil ); + +}; + +WebGLRenderer.prototype.animate = function ( callback ) { + + console.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' ); + this.setAnimationLoop( callback ); + +}; + +WebGLRenderer.prototype.getCurrentRenderTarget = function () { + + console.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' ); + return this.getRenderTarget(); + +}; + +WebGLRenderer.prototype.getMaxAnisotropy = function () { + + console.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' ); + return this.capabilities.getMaxAnisotropy(); + +}; + +WebGLRenderer.prototype.getPrecision = function () { + + console.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' ); + return this.capabilities.precision; + +}; + +WebGLRenderer.prototype.resetGLState = function () { + + console.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' ); + return this.state.reset(); + +}; + +WebGLRenderer.prototype.supportsFloatTextures = function () { + + console.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \'OES_texture_float\' ).' ); + return this.extensions.get( 'OES_texture_float' ); + +}; + +WebGLRenderer.prototype.supportsHalfFloatTextures = function () { + + console.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \'OES_texture_half_float\' ).' ); + return this.extensions.get( 'OES_texture_half_float' ); + +}; + +WebGLRenderer.prototype.supportsStandardDerivatives = function () { + + console.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \'OES_standard_derivatives\' ).' ); + return this.extensions.get( 'OES_standard_derivatives' ); + +}; + +WebGLRenderer.prototype.supportsCompressedTextureS3TC = function () { + + console.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \'WEBGL_compressed_texture_s3tc\' ).' ); + return this.extensions.get( 'WEBGL_compressed_texture_s3tc' ); + +}; + +WebGLRenderer.prototype.supportsCompressedTexturePVRTC = function () { + + console.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \'WEBGL_compressed_texture_pvrtc\' ).' ); + return this.extensions.get( 'WEBGL_compressed_texture_pvrtc' ); + +}; + +WebGLRenderer.prototype.supportsBlendMinMax = function () { + + console.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \'EXT_blend_minmax\' ).' ); + return this.extensions.get( 'EXT_blend_minmax' ); + +}; + +WebGLRenderer.prototype.supportsVertexTextures = function () { + + console.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' ); + return this.capabilities.vertexTextures; + +}; + +WebGLRenderer.prototype.supportsInstancedArrays = function () { + + console.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \'ANGLE_instanced_arrays\' ).' ); + return this.extensions.get( 'ANGLE_instanced_arrays' ); + +}; + +WebGLRenderer.prototype.enableScissorTest = function ( boolean ) { + + console.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' ); + this.setScissorTest( boolean ); + +}; + +WebGLRenderer.prototype.initMaterial = function () { + + console.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' ); + +}; + +WebGLRenderer.prototype.addPrePlugin = function () { + + console.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' ); + +}; + +WebGLRenderer.prototype.addPostPlugin = function () { + + console.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' ); + +}; + +WebGLRenderer.prototype.updateShadowMap = function () { + + console.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' ); + +}; + +WebGLRenderer.prototype.setFaceCulling = function () { + + console.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' ); + +}; + +WebGLRenderer.prototype.allocTextureUnit = function () { + + console.warn( 'THREE.WebGLRenderer: .allocTextureUnit() has been removed.' ); + +}; + +WebGLRenderer.prototype.setTexture = function () { + + console.warn( 'THREE.WebGLRenderer: .setTexture() has been removed.' ); + +}; + +WebGLRenderer.prototype.setTexture2D = function () { + + console.warn( 'THREE.WebGLRenderer: .setTexture2D() has been removed.' ); + +}; + +WebGLRenderer.prototype.setTextureCube = function () { + + console.warn( 'THREE.WebGLRenderer: .setTextureCube() has been removed.' ); + +}; + +WebGLRenderer.prototype.getActiveMipMapLevel = function () { + + console.warn( 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().' ); + return this.getActiveMipmapLevel(); + +}; + +Object.defineProperties( WebGLRenderer.prototype, { + + shadowMapEnabled: { + get: function () { + + return this.shadowMap.enabled; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' ); + this.shadowMap.enabled = value; + + } + }, + shadowMapType: { + get: function () { + + return this.shadowMap.type; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' ); + this.shadowMap.type = value; + + } + }, + shadowMapCullFace: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' ); + return undefined; + + }, + set: function ( /* value */ ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' ); + + } + }, + context: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' ); + return this.getContext(); + + } + }, + vr: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .vr has been renamed to .xr' ); + return this.xr; + + } + }, + gammaInput: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' ); + return false; + + }, + set: function () { + + console.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' ); + + } + }, + gammaOutput: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' ); + return false; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' ); + this.outputEncoding = ( value === true ) ? sRGBEncoding : LinearEncoding; + + } + }, + toneMappingWhitePoint: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' ); + return 1.0; + + }, + set: function () { + + console.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' ); + + } + }, + +} ); + +Object.defineProperties( WebGLShadowMap.prototype, { + + cullFace: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' ); + return undefined; + + }, + set: function ( /* cullFace */ ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' ); + + } + }, + renderReverseSided: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' ); + return undefined; + + }, + set: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' ); + + } + }, + renderSingleSided: { + get: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' ); + return undefined; + + }, + set: function () { + + console.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' ); + + } + } + +} ); + +function WebGLRenderTargetCube( width, height, options ) { + + console.warn( 'THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).' ); + return new WebGLCubeRenderTarget( width, options ); + +} + +// + +Object.defineProperties( WebGLRenderTarget.prototype, { + + wrapS: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); + return this.texture.wrapS; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); + this.texture.wrapS = value; + + } + }, + wrapT: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); + return this.texture.wrapT; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); + this.texture.wrapT = value; + + } + }, + magFilter: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); + return this.texture.magFilter; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); + this.texture.magFilter = value; + + } + }, + minFilter: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); + return this.texture.minFilter; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); + this.texture.minFilter = value; + + } + }, + anisotropy: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); + return this.texture.anisotropy; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); + this.texture.anisotropy = value; + + } + }, + offset: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); + return this.texture.offset; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); + this.texture.offset = value; + + } + }, + repeat: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); + return this.texture.repeat; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); + this.texture.repeat = value; + + } + }, + format: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); + return this.texture.format; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); + this.texture.format = value; + + } + }, + type: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); + return this.texture.type; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); + this.texture.type = value; + + } + }, + generateMipmaps: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); + return this.texture.generateMipmaps; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); + this.texture.generateMipmaps = value; + + } + } + +} ); + +// + +Audio.prototype.load = function ( file ) { + + console.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' ); + const scope = this; + const audioLoader = new AudioLoader(); + audioLoader.load( file, function ( buffer ) { + + scope.setBuffer( buffer ); + + } ); + return this; + +}; + + +AudioAnalyser.prototype.getData = function () { + + console.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' ); + return this.getFrequencyData(); + +}; + +// + +CubeCamera.prototype.updateCubeMap = function ( renderer, scene ) { + + console.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' ); + return this.update( renderer, scene ); + +}; + +CubeCamera.prototype.clear = function ( renderer, color, depth, stencil ) { + + console.warn( 'THREE.CubeCamera: .clear() is now .renderTarget.clear().' ); + return this.renderTarget.clear( renderer, color, depth, stencil ); + +}; + +ImageUtils.crossOrigin = undefined; + +ImageUtils.loadTexture = function ( url, mapping, onLoad, onError ) { + + console.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' ); + + const loader = new TextureLoader(); + loader.setCrossOrigin( this.crossOrigin ); + + const texture = loader.load( url, onLoad, undefined, onError ); + + if ( mapping ) texture.mapping = mapping; + + return texture; + +}; + +ImageUtils.loadTextureCube = function ( urls, mapping, onLoad, onError ) { + + console.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' ); + + const loader = new CubeTextureLoader(); + loader.setCrossOrigin( this.crossOrigin ); + + const texture = loader.load( urls, onLoad, undefined, onError ); + + if ( mapping ) texture.mapping = mapping; + + return texture; + +}; + +ImageUtils.loadCompressedTexture = function () { + + console.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' ); + +}; + +ImageUtils.loadCompressedTextureCube = function () { + + console.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' ); + +}; + +// + +function CanvasRenderer() { + + console.error( 'THREE.CanvasRenderer has been removed' ); + +} + +// + +function JSONLoader() { + + console.error( 'THREE.JSONLoader has been removed.' ); + +} + +// + +const SceneUtils = { + + createMultiMaterialObject: function ( /* geometry, materials */ ) { + + console.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' ); + + }, + + detach: function ( /* child, parent, scene */ ) { + + console.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' ); + + }, + + attach: function ( /* child, scene, parent */ ) { + + console.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' ); + + } + +}; + +// + +function LensFlare() { + + console.error( 'THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js' ); + +} + +if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { + + /* eslint-disable no-undef */ + __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: { + revision: REVISION, + } } ) ); + /* eslint-enable no-undef */ + +} + +if ( typeof window !== 'undefined' ) { + + if ( window.__THREE__ ) { + + console.warn( 'WARNING: Multiple instances of Three.js being imported.' ); + + } else { + + window.__THREE__ = REVISION; + + } + +} + +export { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AlphaFormat, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AmbientLightProbe, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, AxisHelper, BackSide, BasicDepthPacking, BasicShadowMap, BinaryTextureLoader, Bone, BooleanKeyframeTrack, BoundingBoxHelper, Box2, Box3, Box3Helper, BoxGeometry as BoxBufferGeometry, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasRenderer, CanvasTexture, CatmullRomCurve3, CineonToneMapping, CircleGeometry as CircleBufferGeometry, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, CompressedTexture, CompressedTextureLoader, ConeGeometry as ConeBufferGeometry, ConeGeometry, CubeCamera, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubeUVRefractionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderGeometry as CylinderBufferGeometry, CylinderGeometry, Cylindrical, DataTexture, DataTexture2DArray, DataTexture3D, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry as DodecahedronBufferGeometry, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicBufferAttribute, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EdgesHelper, EllipseCurve, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExtrudeGeometry as ExtrudeBufferGeometry, ExtrudeGeometry, FaceColors, FileLoader, FlatShading, Float16BufferAttribute, Float32Attribute, Float32BufferAttribute, Float64Attribute, Float64BufferAttribute, FloatType, Fog, FogExp2, Font, FontLoader, FrontSide, Frustum, GLBufferAttribute, GLSL1, GLSL3, GammaEncoding, GreaterDepth, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HalfFloatType, HemisphereLight, HemisphereLightHelper, HemisphereLightProbe, IcosahedronGeometry as IcosahedronBufferGeometry, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, ImmediateRenderObject, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16Attribute, Int16BufferAttribute, Int32Attribute, Int32BufferAttribute, Int8Attribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InvertStencilOp, JSONLoader, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry as LatheBufferGeometry, LatheGeometry, Layers, LensFlare, LessDepth, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LinePieces, LineSegments, LineStrip, LinearEncoding, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearToneMapping, Loader, LoaderUtils, LoadingManager, LogLuvEncoding, LoopOnce, LoopPingPong, LoopRepeat, LuminanceAlphaFormat, LuminanceFormat, MOUSE, Material, MaterialLoader, MathUtils as Math, MathUtils, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshFaceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiMaterial, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeverDepth, NeverStencilFunc, NoBlending, NoColors, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronGeometry as OctahedronBufferGeometry, OctahedronGeometry, OneFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, ParametricGeometry as ParametricBufferGeometry, ParametricGeometry, Particle, ParticleBasicMaterial, ParticleSystem, ParticleSystemMaterial, Path, PerspectiveCamera, Plane, PlaneGeometry as PlaneBufferGeometry, PlaneGeometry, PlaneHelper, PointCloud, PointCloudMaterial, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry as PolyhedronBufferGeometry, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, REVISION, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBDEncoding, RGBEEncoding, RGBEFormat, RGBFormat, RGBIntegerFormat, RGBM16Encoding, RGBM7Encoding, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RingGeometry as RingBufferGeometry, RingGeometry, SRGB8_ALPHA8_ASTC_10x10_Format, SRGB8_ALPHA8_ASTC_10x5_Format, SRGB8_ALPHA8_ASTC_10x6_Format, SRGB8_ALPHA8_ASTC_10x8_Format, SRGB8_ALPHA8_ASTC_12x10_Format, SRGB8_ALPHA8_ASTC_12x12_Format, SRGB8_ALPHA8_ASTC_4x4_Format, SRGB8_ALPHA8_ASTC_5x4_Format, SRGB8_ALPHA8_ASTC_5x5_Format, SRGB8_ALPHA8_ASTC_6x5_Format, SRGB8_ALPHA8_ASTC_6x6_Format, SRGB8_ALPHA8_ASTC_8x5_Format, SRGB8_ALPHA8_ASTC_8x6_Format, SRGB8_ALPHA8_ASTC_8x8_Format, Scene, SceneUtils, ShaderChunk, ShaderLib, ShaderMaterial, ShadowMaterial, Shape, ShapeGeometry as ShapeBufferGeometry, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, SmoothShading, Sphere, SphereGeometry as SphereBufferGeometry, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronGeometry as TetrahedronBufferGeometry, TetrahedronGeometry, TextGeometry as TextBufferGeometry, TextGeometry, Texture, TextureLoader, TorusGeometry as TorusBufferGeometry, TorusGeometry, TorusKnotGeometry as TorusKnotBufferGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry as TubeBufferGeometry, TubeGeometry, UVMapping, Uint16Attribute, Uint16BufferAttribute, Uint32Attribute, Uint32BufferAttribute, Uint8Attribute, Uint8BufferAttribute, Uint8ClampedAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt248Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShort565Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, Vertex, VertexColors, VideoTexture, WebGL1Renderer, WebGLCubeRenderTarget, WebGLMultipleRenderTargets, WebGLMultisampleRenderTarget, WebGLRenderTarget, WebGLRenderTargetCube, WebGLRenderer, WebGLUtils, WireframeGeometry, WireframeHelper, WrapAroundEnding, XHRLoader, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, sRGBEncoding }; diff --git a/src/citationnet/templates/base.html b/src/citationnet/templates/base.html index a43ec19..ab66655 100644 --- a/src/citationnet/templates/base.html +++ b/src/citationnet/templates/base.html @@ -2,7 +2,7 @@ {% block head %} - + {% block title %}{% endblock %} - CitationNet {% endblock %} @@ -10,7 +10,7 @@
{% block content %}{% endblock %}
diff --git a/src/citationnet/templates/choose.html b/src/citationnet/templates/choose.html new file mode 100644 index 0000000..78e4c1f --- /dev/null +++ b/src/citationnet/templates/choose.html @@ -0,0 +1,244 @@ +{% extends 'base.html' %} {% load static %} {% block content %} + + + +
+

CitationNet

+ +
+
+
+ Erklärung und Nutzungshinweise +
+ +
+
+

+ Die CitationNet Visualisierungen dienen der zeitlichen Darstellung + von Zitationen und Referenzen einer Ausgangspublikation.
+ Diese Netzwerke werden in einer Zylinderform mit der Ausgangposition + im Mittelpunkt in 3D angezeigt. Dabei lässt die Position einer als + Knoten dargestellten Publikation Rückschlüsse auf deren Bedeutung + und Erscheinungsjahr zu.
+ Von oben betrachtet erscheint der Zylinder als Kreis, wobei die + Publikationen, welche weiter vom Mittelpunkt entfernt sind, häufiger + zitiert wurden. Wird der Zylinder von der Seite betrachtet, wird + deutlich, dass die Publikationen in mehreren Schichten angeordnet + sind: jüngere Veröffentlichungsdaten sind über älteren angeordnet. +
+ Informationen zu den einzelnen Objekten werden beim Berühren mit dem + Cursor eingeblendet, die Ansicht kann mittels Bedienhilfen in der + Seitenleiste und über händische Rotation mittels klicken und ziehen + verändert werden.
+ Weitere Ansichtsoptionen und eine zusätzliche Anleitung sind in der + Seitenleiste verfügbar.
+ Zum Abruf der Publikationsdaten wird die API der Plattform dimensions.ai genutzt. +

+ +

+ Ansprechpartner für Feedback und Änderungswünsche ist + Robert Egel. +

+
+
+
+
+
+ Description and usage reference +
+
+
+

+ These visualizations serve the need for displaying Citations and + References of a source publication.
+ The networks are transformed into the form of a cylinder and + displayed in 3D with the source publication in the center. According + to the position of an item shown as a node, you can infer it's + relevancy and year of publication.
+ Upon opening the graph is shown from above, the requested + publication is shown in red. Nodes farer away from the center, have + are cited more often than ones on the inner spheres. When viewed + from the side, the requested publication is placed in the center of + the screen with younger publications above and older ones below. + Informationen zu den einzelnen Objekten werden beim Berühren mit dem + Cursor eingeblendet, die Ansicht kann mittels Bedienhilfen in der + Seitenleiste und über händische Rotation mittels klicken und ziehen + verändert werden.
+ Hover over a node to show DOI, year of publishing and the number of + citations according to CrossRef and click it to open the publication + using it's DOI.
+ Click and drag inside the window to rotate the graph or use the + tools in the sidebar.
+ Additional layouting and viewing options as well as a usage + reference can be found in the sidebar.
+ Publication data is queried using API tools provided by dimensions.ai. +

+ +

+ Should there be any issues, questions or feature requests, feel free + to message + Robert Egel. +

+
+
+
+
+ + {% if doi == None %} +
+
+
+
+ Bestehenden Datensatz in der Netzwerkansicht öffnen. +
+
+ + +
+
{{ form_open }}
+
+ +
+
+
+
+
+
+ +
+
+
+
+ Bestehenden Datensatz im Dashboard öffnen. +
+
+
+
{{ form_open_dash }}
+
+ +
+
+
+
+
+
+ {% endif %} + +
+
+
+
+ Neuen Datensatz generieren +
+
+ + +
+ {% csrf_token %} +
+ {% if doi == None %} + + {% else %} + + {% endif %} +
+
+ +
+
+
+ +
+
+ +
+
+
+
+
+
+
+ + {% if doi == None %} +
+
+
+
+ Bestehenden Datensatz aktualisieren +
+
+ + +
+
{{ form_refresh }}
+
+ +
+
+
+
+
+
+ {% endif %} +
+{% endblock %} \ No newline at end of file diff --git a/src/citationnet/templates/vegaDemo.html b/src/citationnet/templates/vegaDemo.html new file mode 100644 index 0000000..1b03613 --- /dev/null +++ b/src/citationnet/templates/vegaDemo.html @@ -0,0 +1,22 @@ + + + + + Embedding Vega-Lite + + + + + + +
+ + + + + + \ No newline at end of file diff --git a/src/citationnet/templates/visDynamic.html b/src/citationnet/templates/visDynamic.html index ea00442..2fcd789 100644 --- a/src/citationnet/templates/visDynamic.html +++ b/src/citationnet/templates/visDynamic.html @@ -1,9 +1,28 @@ {% extends 'base.html' %} {% block content %} - - - + + + + + + + + + + + +
@@ -20,64 +39,78 @@

Usage reference

- Upon opening the graph is shown from above, the requested publication is shown in red. Nodes farer away from the - center, have more citations.
- When viewed from the side, the requested publication is placed in the center of the screen with younger - publications above and older ones below. - Hover over a node to show DOI, year of publishing and the number of citations according to CrossRef.
- Click a node to open the publication using it's DOI.
- Click and drag inside the window to rotate the graph.
- Rightclick and drag inside the window to move.
- Scroll inside the window to zoom in or out.
- Try playing around with the additional viewing options below.
- The menu button right next to this sidebar opens and closes the sidebar.
- Should there be any issues, questions or feature requests, feel free to message Robert Egel. + Upon opening the graph is shown from above, the requested publication is shown in red. Nodes farer away from the + center, have more citations.
+ When viewed from the side, the requested publication is placed in the center of the screen with younger + publications above and older ones below. + Hover over a node to show DOI, year of publishing and the number of citations according to CrossRef.
+ Click a node to open the publication using it's DOI.
+ Click and drag inside the window to rotate the graph.
+ Rightclick and drag inside the window to move.
+ Scroll inside the window to zoom in or out.
+ Try playing around with the additional viewing options below.
+ The menu button right next to this sidebar opens and closes the sidebar.
+ Should there be any issues, questions or feature requests, feel free to message Robert Egel.

-

Change Viewpoint

- top - side +

View options

+ Top view + Side view + View Fields of Research Chart

Node options

- size by number of citations + size by number of citations relative node size: - +

Edge options

- view edges connected to input + view edges connected + to input node only

Layout options

cylinder radius: + onclick="window.net.readLayout()">set outer value: - set + toggle spacing around input node - - + + + + + + {% endblock %} From 65f19d242067d7433a7999c595f79ae6c970dfcf Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Wed, 16 Mar 2022 17:47:46 +0100 Subject: [PATCH 04/23] wip --- src/citationnet/templates/choose.html | 244 ------------------------ src/citationnet/templates/vegaDemo.html | 22 --- 2 files changed, 266 deletions(-) delete mode 100644 src/citationnet/templates/choose.html delete mode 100644 src/citationnet/templates/vegaDemo.html diff --git a/src/citationnet/templates/choose.html b/src/citationnet/templates/choose.html deleted file mode 100644 index 78e4c1f..0000000 --- a/src/citationnet/templates/choose.html +++ /dev/null @@ -1,244 +0,0 @@ -{% extends 'base.html' %} {% load static %} {% block content %} - - - -
-

CitationNet

- -
-
-
- Erklärung und Nutzungshinweise -
- -
-
-

- Die CitationNet Visualisierungen dienen der zeitlichen Darstellung - von Zitationen und Referenzen einer Ausgangspublikation.
- Diese Netzwerke werden in einer Zylinderform mit der Ausgangposition - im Mittelpunkt in 3D angezeigt. Dabei lässt die Position einer als - Knoten dargestellten Publikation Rückschlüsse auf deren Bedeutung - und Erscheinungsjahr zu.
- Von oben betrachtet erscheint der Zylinder als Kreis, wobei die - Publikationen, welche weiter vom Mittelpunkt entfernt sind, häufiger - zitiert wurden. Wird der Zylinder von der Seite betrachtet, wird - deutlich, dass die Publikationen in mehreren Schichten angeordnet - sind: jüngere Veröffentlichungsdaten sind über älteren angeordnet. -
- Informationen zu den einzelnen Objekten werden beim Berühren mit dem - Cursor eingeblendet, die Ansicht kann mittels Bedienhilfen in der - Seitenleiste und über händische Rotation mittels klicken und ziehen - verändert werden.
- Weitere Ansichtsoptionen und eine zusätzliche Anleitung sind in der - Seitenleiste verfügbar.
- Zum Abruf der Publikationsdaten wird die API der Plattform dimensions.ai genutzt. -

- -

- Ansprechpartner für Feedback und Änderungswünsche ist - Robert Egel. -

-
-
-
-
-
- Description and usage reference -
-
-
-

- These visualizations serve the need for displaying Citations and - References of a source publication.
- The networks are transformed into the form of a cylinder and - displayed in 3D with the source publication in the center. According - to the position of an item shown as a node, you can infer it's - relevancy and year of publication.
- Upon opening the graph is shown from above, the requested - publication is shown in red. Nodes farer away from the center, have - are cited more often than ones on the inner spheres. When viewed - from the side, the requested publication is placed in the center of - the screen with younger publications above and older ones below. - Informationen zu den einzelnen Objekten werden beim Berühren mit dem - Cursor eingeblendet, die Ansicht kann mittels Bedienhilfen in der - Seitenleiste und über händische Rotation mittels klicken und ziehen - verändert werden.
- Hover over a node to show DOI, year of publishing and the number of - citations according to CrossRef and click it to open the publication - using it's DOI.
- Click and drag inside the window to rotate the graph or use the - tools in the sidebar.
- Additional layouting and viewing options as well as a usage - reference can be found in the sidebar.
- Publication data is queried using API tools provided by dimensions.ai. -

- -

- Should there be any issues, questions or feature requests, feel free - to message - Robert Egel. -

-
-
-
-
- - {% if doi == None %} -
-
-
-
- Bestehenden Datensatz in der Netzwerkansicht öffnen. -
-
- - -
-
{{ form_open }}
-
- -
-
-
-
-
-
- -
-
-
-
- Bestehenden Datensatz im Dashboard öffnen. -
-
-
-
{{ form_open_dash }}
-
- -
-
-
-
-
-
- {% endif %} - -
-
-
-
- Neuen Datensatz generieren -
-
- - -
- {% csrf_token %} -
- {% if doi == None %} - - {% else %} - - {% endif %} -
-
- -
-
-
- -
-
- -
-
-
-
-
-
-
- - {% if doi == None %} -
-
-
-
- Bestehenden Datensatz aktualisieren -
-
- - -
-
{{ form_refresh }}
-
- -
-
-
-
-
-
- {% endif %} -
-{% endblock %} \ No newline at end of file diff --git a/src/citationnet/templates/vegaDemo.html b/src/citationnet/templates/vegaDemo.html deleted file mode 100644 index 1b03613..0000000 --- a/src/citationnet/templates/vegaDemo.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - Embedding Vega-Lite - - - - - - -
- - - - - - \ No newline at end of file From 5d25a1755549ba2f0aeddb4449000d795d53f007 Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Thu, 17 Mar 2022 18:00:03 +0100 Subject: [PATCH 05/23] wip not yet reading json --- setup.cfg | 1 + src/citationnet/__init__.py | 30 +- ..._slash_physrevlett_dot_112_dot_140408.json | 1 + src/citationnet/media/data/prl.json | 48714 ---------------- .../static/bootstrap.4.3.1.min.css | 7 + src/citationnet/static/force-citationNet.js | 111 +- src/citationnet/static/pieChart_vega-lite.js | 4 +- src/citationnet/static/vega-embed.min.js | 22 + src/citationnet/static/vega-embed.min.js.map | 1 + src/citationnet/static/vega-lite.min.js | 2 + src/citationnet/static/vega-lite.min.js.map | 1 + src/citationnet/static/vega.min.js | 2 + src/citationnet/static/vega.min.js.map | 1 + src/citationnet/static/vegaLiteSpec.json | 200 + src/citationnet/templates/404.html | 4 + src/citationnet/templates/testing.html | 9 + src/citationnet/templates/visDynamic.html | 6 +- 17 files changed, 337 insertions(+), 48779 deletions(-) create mode 100644 src/citationnet/media/data/10_dot_1103_slash_physrevlett_dot_112_dot_140408.json delete mode 100644 src/citationnet/media/data/prl.json create mode 100644 src/citationnet/static/bootstrap.4.3.1.min.css create mode 100644 src/citationnet/static/vega-embed.min.js create mode 100644 src/citationnet/static/vega-embed.min.js.map create mode 100644 src/citationnet/static/vega-lite.min.js create mode 100644 src/citationnet/static/vega-lite.min.js.map create mode 100644 src/citationnet/static/vega.min.js create mode 100644 src/citationnet/static/vega.min.js.map create mode 100644 src/citationnet/static/vegaLiteSpec.json create mode 100644 src/citationnet/templates/404.html create mode 100644 src/citationnet/templates/testing.html diff --git a/setup.cfg b/setup.cfg index 016aab3..076e88d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -38,3 +38,4 @@ citationnet = templates/* static/* media/* + media/data/* diff --git a/src/citationnet/__init__.py b/src/citationnet/__init__.py index d146614..a63b09f 100644 --- a/src/citationnet/__init__.py +++ b/src/citationnet/__init__.py @@ -1,8 +1,11 @@ import os - +import json from flask import Flask, render_template mainpath = os.path.dirname(os.path.abspath(__file__)) +datapath = os.path.join(mainpath, 'media', 'data') + + def create_app(test_config=None): # create and configure the app app = Flask( @@ -38,6 +41,27 @@ def hello(): @app.route('/citationnet/') @app.route('/citationnet/') - def citnet(name=None, jsonDataPath=f'{mainpath}/media/data/'): - return render_template('visDynamic.html', name=name, datafolder=jsonDataPath) + def citnet(name=None): + if name is None: + return render_template('404.html') + else: + try: + with open(f'{os.path.join(datapath, name)}', 'r') as jsonfile: + data = json.load(jsonfile) + return render_template('visDynamic.html', jsondata=data) + except Exception as e: + raise e + + @app.route('/simple/') + def simple(): + data = {"name": "Malte", "city": "Berlin"} + return render_template('testing.html', jsondata=data) + + @app.route('/testjson/') + @app.route('/testjson/') + def testjson(name=None): + with open(f'{os.path.join(datapath, name)}') as jsonfile: + data = json.load(jsonfile) + return render_template('testing.html', jsondata=data) + return app diff --git a/src/citationnet/media/data/10_dot_1103_slash_physrevlett_dot_112_dot_140408.json b/src/citationnet/media/data/10_dot_1103_slash_physrevlett_dot_112_dot_140408.json new file mode 100644 index 0000000..5b61cd0 --- /dev/null +++ b/src/citationnet/media/data/10_dot_1103_slash_physrevlett_dot_112_dot_140408.json @@ -0,0 +1 @@ +{"nodes": [{"id": "pub.1010926410", "attributes": {"title": "Quantum Criticality and Dynamical Instability in the Kicked-Top Model", "doi": "10.1103/physrevlett.112.140408", "nodeyear": 2014, "ref-by-count": 48, "is_input_DOI": true, "category_for": "02:1.00", "level": "ref_l1"}}, {"id": "pub.1144412825", "attributes": {"title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", "doi": "10.21468/scipostphys.12.1.002", "nodeyear": 2022, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1144210477", "attributes": {"title": "Impact of chaos on precursors of quantum criticality", "doi": "10.1103/physreve.104.l062202", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1143466025", "attributes": {"title": "Stabilization of product states and excited-state quantum phase transitions in a coupled qubit-field system", "doi": "10.1103/physreva.104.053722", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1144437177", "attributes": {"title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", "doi": "10.21468/scipost.report.3588", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l1"}}, {"id": "pub.1141370501", "attributes": {"title": "Constant of Motion Identifying Excited-State Quantum Phases", "doi": "10.1103/physrevlett.127.130602", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l1"}}, {"id": "pub.1141139712", "attributes": {"title": "Signatures of excited-state quantum phase transitions in quantum many-body systems: Phase space analysis", "doi": "10.1103/physreve.104.034119", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1144432008", "attributes": {"title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", "doi": "10.21468/scipost.report.3198", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l1"}}, {"id": "pub.1138795800", "attributes": {"title": "Interferometric Order Parameter for Excited-State Quantum Phase Transitions in Bose-Einstein Condensates", "doi": "10.1103/physrevlett.126.230602", "nodeyear": 2021, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1138581779", "attributes": {"title": "Continuum analogs of excited-state quantum phase transitions", "doi": "10.1103/physreva.103.062207", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1144435924", "attributes": {"title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", "doi": "10.21468/scipost.report.2932", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l1"}}, {"id": "pub.1136498164", "attributes": {"title": "Emergence of a Renormalized 1/N Expansion in Quenched Critical Many-Body Systems", "doi": "10.1103/physrevlett.126.110602", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1134894421", "attributes": {"title": "Excited-state quantum phase transitions", "doi": "10.1088/1751-8121/abdfe8", "nodeyear": 2021, "ref-by-count": 18, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1136299609", "attributes": {"title": "Characterizing the Lipkin-Meshkov-Glick model excited-state quantum phase transition using dynamical and statistical properties of the diagonal entropy", "doi": "10.1103/physreve.103.032109", "nodeyear": 2021, "ref-by-count": 6, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l1"}}, {"id": "pub.1132677751", "attributes": {"title": "Excited state quantum phase transitions in the bending spectra of molecules", "doi": "10.1016/j.jqsrt.2020.107436", "nodeyear": 2021, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1129534483", "attributes": {"title": "Out-of-equilibrium phase transitions induced by Floquet resonances in a periodically quench-driven XY spin chain", "doi": "10.21468/scipostphyscore.3.1.001", "nodeyear": 2020, "ref-by-count": 2, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l1"}}, {"id": "pub.1129066525", "attributes": {"title": "Complex Density of Continuum States in Resonant Quantum Tunneling", "doi": "10.1103/physrevlett.125.020401", "nodeyear": 2020, "ref-by-count": 4, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "cite_l1"}}, {"id": "pub.1126263310", "attributes": {"title": "Classical and Quantum Signatures of Quantum Phase Transitions in a (Pseudo) Relativistic Many-Body System", "doi": "10.3390/condmat5020026", "nodeyear": 2020, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1121827528", "attributes": {"title": "Reversible Quantum Information Spreading in Many-Body Systems near Criticality", "doi": "10.1103/physrevlett.123.160401", "nodeyear": 2019, "ref-by-count": 28, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1120642228", "attributes": {"title": "Manipulating transition of a two-component Bose–Einstein condensate with a weak δ-shaped laser*", "doi": "10.1088/1674-1056/ab3e64", "nodeyear": 2019, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1121123255", "attributes": {"title": "Digital quantum simulation, Trotter errors, and quantum chaos of the kicked top", "doi": "10.1038/s41534-019-0192-5", "nodeyear": 2019, "ref-by-count": 32, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1120846773", "attributes": {"title": "Static vs. dynamic phases of quantum many-body systems", "doi": "10.1063/1.5124589", "nodeyear": 2019, "ref-by-count": 3, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l1"}}, {"id": "pub.1120342145", "attributes": {"title": "Excited-state quantum phase transition and the quantum-speed-limit time", "doi": "10.1103/physreva.100.022118", "nodeyear": 2019, "ref-by-count": 15, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1117411673", "attributes": {"title": "Excited-state quantum phase transitions in systems with two degrees of freedom. III. Interacting boson systems", "doi": "10.1103/physrevc.99.064323", "nodeyear": 2019, "ref-by-count": 16, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1107951663", "attributes": {"title": "Floquet analysis of a fractal-spectrum-generating periodically driven quantum system", "doi": "10.1103/physreve.98.042217", "nodeyear": 2018, "ref-by-count": 1, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l1"}}, {"id": "pub.1105752007", "attributes": {"title": "Quantum quench dynamics in Dicke superradiance models", "doi": "10.1103/physreva.98.013836", "nodeyear": 2018, "ref-by-count": 30, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1099619049", "attributes": {"title": "Excited-state quantum phase transitions and their manifestations in an extended Dicke model", "doi": "10.1063/1.5016143", "nodeyear": 2017, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1092024589", "attributes": {"title": "Probing the excited-state quantum phase transition through statistics of Loschmidt echo and quantum work", "doi": "10.1103/physreve.96.032142", "nodeyear": 2017, "ref-by-count": 17, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1090980852", "attributes": {"title": "Nonadiabatic dynamics of the excited states for the Lipkin-Meshkov-Glick model", "doi": "10.1103/physreve.96.012153", "nodeyear": 2017, "ref-by-count": 15, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1090697089", "attributes": {"title": "From thermal to excited-state quantum phase transition: The Dicke model", "doi": "10.1103/physreve.96.012121", "nodeyear": 2017, "ref-by-count": 22, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1085593414", "attributes": {"title": "Adiabatic perturbation theory and geometry of periodically-driven systems", "doi": "10.1016/j.physrep.2017.05.003", "nodeyear": 2017, "ref-by-count": 68, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l1"}}, {"id": "pub.1059133328", "attributes": {"title": "Catastrophes in non-equilibrium many-particle wave functions: universality and critical scaling", "doi": "10.1088/1361-6455/aa56af", "nodeyear": 2017, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:0.60;03:0.40", "level": "cite_l1"}}, {"id": "pub.1048482410", "attributes": {"title": "Dynamics and Characterization of Composite Quantum Systems", "doi": "10.1007/978-3-319-44459-8", "nodeyear": 2017, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1060766918", "attributes": {"title": "Driven Open Quantum Systems and Floquet Stroboscopic Dynamics", "doi": "10.1103/physrevlett.117.250401", "nodeyear": 2016, "ref-by-count": 42, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l1"}}, {"id": "pub.1060750764", "attributes": {"title": "Excited-state quantum phase transitions in the two-spin elliptic Gaudin model", "doi": "10.1103/physreve.94.052110", "nodeyear": 2016, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1060516500", "attributes": {"title": "Excited-state quantum phase transition in the Rabi model", "doi": "10.1103/physreva.94.023835", "nodeyear": 2016, "ref-by-count": 32, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1059005118", "attributes": {"title": "Quantum phase transitions in the collective degrees of freedom: nuclei and other many-body systems", "doi": "10.1088/0031-8949/91/8/083006", "nodeyear": 2016, "ref-by-count": 12, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l1"}}, {"id": "pub.1060516111", "attributes": {"title": "Excited-state quantum phase transitions in many-body systems with infinite-range interaction: Localization, dynamics, and bifurcation", "doi": "10.1103/physreva.94.012113", "nodeyear": 2016, "ref-by-count": 49, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1060680986", "attributes": {"title": "Excited-state quantum phase transitions in the interacting boson model: Spectral characteristics of 0+ states and effective order parameter", "doi": "10.1103/physrevc.93.044302", "nodeyear": 2016, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1060649865", "attributes": {"title": "Semiclassical excited-state signatures of quantum phase transitions in spin chains with variable-range interactions", "doi": "10.1103/physrevb.93.155153", "nodeyear": 2016, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1060514338", "attributes": {"title": "Structure of eigenstates and quench dynamics at an excited-state quantum phase transition", "doi": "10.1103/physreva.92.050101", "nodeyear": 2015, "ref-by-count": 52, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1059004548", "attributes": {"title": "Excited-state quantum phase transitions in finite many-body systems", "doi": "10.1088/0031-8949/90/11/114015", "nodeyear": 2015, "ref-by-count": 8, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l1"}}, {"id": "pub.1059136608", "attributes": {"title": "Time delayed control of excited state quantum phase transitions in the Lipkin–Meshkov–Glick model", "doi": "10.1088/1367-2630/17/10/103031", "nodeyear": 2015, "ref-by-count": 15, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1010705109", "attributes": {"title": "Effective time-independent analysis for quantum kicked systems", "doi": "10.1103/physreve.91.032923", "nodeyear": 2015, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1032825147", "attributes": {"title": "Universal high-frequency behavior of periodically driven systems: from dynamical stabilization to Floquet engineering", "doi": "10.1080/00018732.2015.1055918", "nodeyear": 2015, "ref-by-count": 574, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1036861519", "attributes": {"title": "Excited-state quantum phase transitions and periodic dynamics", "doi": "10.1103/physreva.91.013631", "nodeyear": 2015, "ref-by-count": 35, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1039964510", "attributes": {"title": "Critical quasienergy states in driven many-body systems", "doi": "10.1103/physreva.90.063628", "nodeyear": 2014, "ref-by-count": 6, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l1"}}, {"id": "pub.1003966050", "attributes": {"title": "Quantum phase transitions of atom-molecule Bose mixtures in a double-well potential", "doi": "10.1103/physreve.90.042139", "nodeyear": 2014, "ref-by-count": 15, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1060512752", "attributes": {"title": "Nonlinear spectroscopy of trapped ions", "doi": "10.1103/physreva.90.023603", "nodeyear": 2014, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l1"}}, {"id": "pub.1145750437", "attributes": {"title": "Algebraic vibrational description of the symmetric isotopologues of CO2: 13 C 16 O2, 12 C 18 O2 and 12 C 17 O2", "doi": "10.1016/j.chemphys.2022.111481", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1146014202", "attributes": {"title": "Dynamical relaxation of correlators in periodically driven integrable quantum systems", "doi": "10.1103/physrevb.105.104303", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1145897843", "attributes": {"title": "Periodically driven perturbed CFTs: The sine-Gordon model", "doi": "10.1016/j.nuclphysb.2022.115717", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:0.60;01:0.40", "level": "cite_l2"}}, {"id": "pub.1145440026", "attributes": {"title": "Effective Gaps in Continuous Floquet Hamiltonians", "doi": "10.1137/21m1417363", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1145430770", "attributes": {"title": "Arnoldi-Lindblad time evolution: Faster-than-the-clock algorithm for the spectrum of time-independent and Floquet open quantum systems", "doi": "10.22331/q-2022-02-10-649", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145506720", "attributes": {"title": "Identification of quantum scars via phase-space localization measures", "doi": "10.22331/q-2022-02-08-644", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145372424", "attributes": {"title": "Bicircular Light Floquet Engineering of Magnetic Symmetry and Topology and Its Application to the Dirac Semimetal Cd3As2", "doi": "10.1103/physrevlett.128.066602", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1145280638", "attributes": {"title": "Heating Rates under Fast Periodic Driving beyond Linear Response", "doi": "10.1103/physrevlett.128.050604", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145273436", "attributes": {"title": "Observation of Photonic Topological Floquet Time Crystals", "doi": "10.1002/lpor.202100469", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145213934", "attributes": {"title": "Dissipative Floquet Dynamics: from Steady State to Measurement Induced Criticality in Trapped-ion Chains", "doi": "10.22331/q-2022-02-02-638", "nodeyear": 2022, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145849886", "attributes": {"title": "Inverted many-body mobility edge in a central qudit problem", "doi": "10.1103/physrevb.105.l060303", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145849842", "attributes": {"title": "PT phase transition in open quantum systems with Lindblad dynamics", "doi": "10.1103/physreva.105.022219", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1145823845", "attributes": {"title": "Comparing the influence of Floquet dynamics in various Kitaev-Heisenberg materials", "doi": "10.1103/physrevb.105.085144", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "03:1.00", "level": "cite_l2"}}, {"id": "pub.1145788811", "attributes": {"title": "Harmonic dual dressing of spin-1/2 systems", "doi": "10.1103/physreva.105.022619", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145754902", "attributes": {"title": "Stroboscopic Hamiltonian engineering in the low-frequency regime with a one-dimensional quantum processor", "doi": "10.1103/physrevb.105.075140", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145754886", "attributes": {"title": "Driven Hubbard model on a triangular lattice: Tunable Heisenberg antiferromagnet with a chiral three-spin term", "doi": "10.1103/physrevb.105.054423", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1145754849", "attributes": {"title": "Relativistic meson spectra on ion-trap quantum simulators", "doi": "10.1103/physreva.105.022616", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145754842", "attributes": {"title": "Dynamical localization in non-Hermitian quasicrystals", "doi": "10.1103/physreva.105.022215", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145668053", "attributes": {"title": "Drive-induced nonlinearities of cavity modes coupled to a transmon ancilla", "doi": "10.1103/physreva.105.022423", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145636450", "attributes": {"title": "Crosstalk analysis for simultaneously driven two-qubit gates in spin qubit arrays", "doi": "10.1103/physrevb.105.085414", "nodeyear": 2022, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145438375", "attributes": {"title": "Caustics in quantum many-body dynamics", "doi": "10.1103/physrevresearch.4.013105", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145407409", "attributes": {"title": "Fermionic Chern insulator from twisted light with linear polarization", "doi": "10.1103/physrevb.105.l081406", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145168134", "attributes": {"title": "Weyl nodes with higher-order topology in an optically driven nodal-line semimetal", "doi": "10.1103/physrevb.105.l081102", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144652253", "attributes": {"title": "Chaos in a deformed Dicke model", "doi": "10.1088/1751-8121/ac4b16", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145404710", "attributes": {"title": "Topological d -wave superconductivity in two dimensions", "doi": "10.1016/j.physe.2022.115143", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1145130056", "attributes": {"title": "Quantum transitions, ergodicity, and quantum scars in the coupled top model", "doi": "10.1103/physreve.105.014130", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144504433", "attributes": {"title": "Floquet band engineering and topological phase transitions in 1T’ transition metal dichalcogenides", "doi": "10.1088/2053-1583/ac4957", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1145011775", "attributes": {"title": "Strain and pseudo-magnetic fields in optical lattices from density-assisted tunneling", "doi": "10.1038/s42005-022-00802-9", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145032383", "attributes": {"title": "The Classical–Quantum Passage: A van der Waals Description", "doi": "10.3390/e24020182", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144661259", "attributes": {"title": "Out-of-equilibrium dynamics of the XY spin chain from form factor expansion", "doi": "10.21468/scipostphys.12.1.019", "nodeyear": 2022, "ref-by-count": 1, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1144431665", "attributes": {"title": "Crystallization of bosonic quantum Hall states in a rotating quantum gas", "doi": "10.1038/s41586-021-04170-2", "nodeyear": 2022, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144412825", "attributes": {"title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", "doi": "10.21468/scipostphys.12.1.002", "nodeyear": 2022, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1146014238", "attributes": {"title": "Absence of Heating in a Uniform Fermi Gas Created by Periodic Driving", "doi": "10.1103/physrevx.12.011041", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145130013", "attributes": {"title": "Generalized model for the charge transport properties of dressed quantum Hall systems", "doi": "10.1103/physrevb.105.035430", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145077099", "attributes": {"title": "Detecting light-induced Floquet band gaps of graphene via trARPES", "doi": "10.1103/physrevresearch.4.013057", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1145077057", "attributes": {"title": "Demonstrating Majorana non-Abelian properties using fast adiabatic charge transfer", "doi": "10.1103/physrevb.105.045425", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "03:1.00", "level": "cite_l2"}}, {"id": "pub.1145042826", "attributes": {"title": "Probing Many-Body Quantum Chaos with Quantum Simulators", "doi": "10.1103/physrevx.12.011018", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1145016796", "attributes": {"title": "Topological micromotion of Floquet quantum systems", "doi": "10.1103/physrevb.105.045139", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1144825837", "attributes": {"title": "Information retrieval and eigenstate coalescence in a non-Hermitian quantum system with anti-PT symmetry", "doi": "10.1103/physreva.105.l010204", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144625101", "attributes": {"title": "Enhancing energy transfer in quantum systems via periodic driving: Floquet master equations", "doi": "10.1103/physreva.105.012208", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144504676", "attributes": {"title": "Analytic expression for the optical exciton transition rates in the polaron frame", "doi": "10.1103/physrevb.105.014302", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144370522", "attributes": {"title": "Signatures of multifractality in a periodically driven interacting Aubry-André model", "doi": "10.1103/physrevb.105.024301", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1144370491", "attributes": {"title": "Flow-equation approach to quantum systems driven by an amplitude-modulated time-periodic force", "doi": "10.1103/physreva.105.012203", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1145001907", "attributes": {"title": "Nature", "doi": "10.1038/nde/00280836/2022/601/7894", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1144437688", "attributes": {"title": "Nature", "doi": "10.1038/nde/00280836/2022/601/7891", "nodeyear": 2022, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1143938533", "attributes": {"title": "Assessment of weak-coupling approximations on a driven two-level system under dissipation", "doi": "10.1088/1367-2630/ac43ee", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144267107", "attributes": {"title": "Quantum Simulation of Open Quantum Systems Using a Unitary Decomposition of Operators", "doi": "10.1103/physrevlett.127.270503", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144237217", "attributes": {"title": "Localization and spin dynamics of spin-orbit-coupled Bose-Einstein condensates in deep optical lattices", "doi": "10.1103/physreve.104.064215", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144210477", "attributes": {"title": "Impact of chaos on precursors of quantum criticality", "doi": "10.1103/physreve.104.l062202", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144176750", "attributes": {"title": "Nonequilibrium steady states in the Floquet-Lindblad systems: van Vleck's high-frequency expansion approach", "doi": "10.21468/scipostphyscore.4.4.033", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1144500315", "attributes": {"title": "Quantum dynamics research in India: a perspective", "doi": "10.1088/1361-648x/ac410a", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144112210", "attributes": {"title": "Quantum Fisher Information from Randomized Measurements", "doi": "10.1103/physrevlett.127.260501", "nodeyear": 2021, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144057503", "attributes": {"title": "Energy diffusion and prethermalization in chaotic billiards under rapid periodic driving", "doi": "10.1103/physreve.104.064210", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1143844860", "attributes": {"title": "Avoided crossings and dynamical tunneling close to excited-state quantum phase transitions", "doi": "10.1103/physreve.104.064116", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1143777724", "attributes": {"title": "Gravitational caustics in an atom laser", "doi": "10.1038/s41467-021-27555-3", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1143745319", "attributes": {"title": "Dynamic synthesis of Heisenberg-limited spin squeezing", "doi": "10.1038/s41534-021-00505-z", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1143725448", "attributes": {"title": "Quantum thermal machines and batteries", "doi": "10.1140/epjb/s10051-021-00235-3", "nodeyear": 2021, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144210501", "attributes": {"title": "Excited-state quantum phase transitions in spin-orbit-coupled Bose gases", "doi": "10.1103/physrevresearch.3.043215", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144115960", "attributes": {"title": "Bound state dynamics in the long-range spin-12 XXZ model", "doi": "10.1103/physrevb.104.214309", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144115499", "attributes": {"title": "Direct driving of electronic and phononic degrees of freedom in a honeycomb bilayer with infrared light", "doi": "10.1103/physrevb.104.245135", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1143939848", "attributes": {"title": "Frequency dependence of the light-induced Hall effect in dissipative graphene", "doi": "10.1103/physrevb.104.224305", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1143844418", "attributes": {"title": "Engineering of topological phases in driven thin topological insulators: Structure inversion asymmetry effect", "doi": "10.1103/physrevb.104.245121", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1143724565", "attributes": {"title": "Polarization-dependent magnetic properties of periodically driven α-RuCl3", "doi": "10.1103/physrevb.104.214413", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1136420764", "attributes": {"title": "Low-frequency and Moiré Floquet engineering: A review", "doi": "10.1016/j.aop.2021.168434", "nodeyear": 2021, "ref-by-count": 13, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1143455107", "attributes": {"title": "Time-crystalline eigenstate order on a quantum processor", "doi": "10.1038/s41586-021-04257-w", "nodeyear": 2021, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1142733768", "attributes": {"title": "A thermodynamic probe of the topological phase transition in epitaxial graphene based Floquet topological insulator", "doi": "10.1063/5.0071224", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1143320265", "attributes": {"title": "Instability of holographic superfluids in optical lattice", "doi": "10.1007/jhep11(2021)190", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1142441911", "attributes": {"title": "Light-induced emergent phenomena in 2D materials and topological materials", "doi": "10.1038/s42254-021-00388-1", "nodeyear": 2021, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1142441613", "attributes": {"title": "Dynamical obstruction to localization in a disordered spin chain", "doi": "10.1103/physreve.104.054105", "nodeyear": 2021, "ref-by-count": 10, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1142424779", "attributes": {"title": "Long Time Behaviour of a Local Perturbation in the Isotropic XY Chain Under Periodic Forcing", "doi": "10.1007/s00023-021-01128-y", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1143466025", "attributes": {"title": "Stabilization of product states and excited-state quantum phase transitions in a coupled qubit-field system", "doi": "10.1103/physreva.104.053722", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1143042212", "attributes": {"title": "Coarse-graining master equation for periodically driven systems", "doi": "10.1103/physreva.104.052219", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1142911413", "attributes": {"title": "Floquet engineering and nonequilibrium topological maps in twisted trilayer graphene", "doi": "10.1103/physrevb.104.195429", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1142728786", "attributes": {"title": "Time-domain Landau-Zener-Stückelberg-Majorana interference in an optical lattice clock", "doi": "10.1103/physreva.104.053318", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1142661877", "attributes": {"title": "Light-induced electron pairing in two-dimensional systems", "doi": "10.1088/1742-6596/2015/1/012062", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1142589015", "attributes": {"title": "Floquet graphene antidot lattices", "doi": "10.1103/physrevb.104.174304", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1142577463", "attributes": {"title": "Production of 87Rb Bose-Einstein Condensate in an Asymmetric Crossed Optical Dipole TrapSupported by the Key-Area Research and Development Program of Guangdong Province, China (Grant No. 2019B030330001), the National Natural Science Foundation of China (Grant Nos. 12025509 and 11874434), the Science and Technology Program of Guangzhou, China (Grant Nos. 201904020024 and 201804010497), the Natural Science Foundation of Guangdong Province, China (Grant No. 2018A030313988), and the Fundamental Research Funds for the Central Universities (Grant No. 2021qntd28).", "doi": "10.1088/0256-307x/38/10/103701", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1142435873", "attributes": {"title": "Success of digital adiabatic simulation with large Trotter step", "doi": "10.1103/physreva.104.052603", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1142330688", "attributes": {"title": "Two-level systems with periodic N-step driving fields: Exact dynamics and quantum state manipulations", "doi": "10.1103/physreva.104.053101", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1140972911", "attributes": {"title": "Coherent and dissipative dynamics at quantum phase transitions", "doi": "10.1016/j.physrep.2021.08.003", "nodeyear": 2021, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1139312982", "attributes": {"title": "Quantum phase transitions in algebraic and collective models of nuclear structure", "doi": "10.1016/j.ppnp.2021.103891", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1143151380", "attributes": {"title": "Electrodynamics of Topologically Ordered Quantum Phases in Dirac Materials", "doi": "10.3390/nano11112914", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "09:0.50;10:0.50", "level": "cite_l2"}}, {"id": "pub.1141523252", "attributes": {"title": "Floquet engineering of electric polarization with two-frequency drive", "doi": "10.1093/ptep/ptab127", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1142019154", "attributes": {"title": "Floquet Prethermalization with Lifetime Exceeding 90 s in a Bulk Hyperpolarized Solid", "doi": "10.1103/physrevlett.127.170603", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1141572181", "attributes": {"title": "Optically induced hybrid Bose-Fermi system in quantum wells with different charge carriers.", "doi": "10.1364/ol.431079", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1142000959", "attributes": {"title": "Quantum-classical correspondence of a system of interacting bosons in a triple-well potential", "doi": "10.22331/q-2021-10-19-563", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1141928574", "attributes": {"title": "Multifractality in Quasienergy Space of Coherent States as a Signature of Quantum Chaos", "doi": "10.3390/e23101347", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1141852620", "attributes": {"title": "Quasiperiodic Floquet-Thouless Energy Pump", "doi": "10.1103/physrevlett.127.166804", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1141763682", "attributes": {"title": "Quantum Speed Limit Time of a Two-Level Atom under Homodyne-Mediated Feedback and Classical Driving", "doi": "10.1007/s10773-021-04964-0", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144433670", "attributes": {"title": "Nonequilibrium steady states in the Floquet-Lindblad systems: van Vleck's high-frequency expansion approach", "doi": "10.21468/scipost.report.3630", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1141641422", "attributes": {"title": "Quantum simulation of cosmic inflation", "doi": "10.1103/physrevd.104.086013", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1141277687", "attributes": {"title": "Optically induced Kondo effect in semiconductor quantum wells", "doi": "10.1088/1361-648x/ac28c2", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1142252018", "attributes": {"title": "Ladder of Loschmidt anomalies in the deep strong-coupling regime of a qubit-oscillator system", "doi": "10.1103/physreva.104.043712", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1142248564", "attributes": {"title": "Spin-wave growth via Shapiro resonances in a spinor Bose-Einstein condensate", "doi": "10.1103/physrevresearch.3.043090", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1141918917", "attributes": {"title": "High-frequency expansions for time-periodic Lindblad generators", "doi": "10.1103/physrevb.104.165414", "nodeyear": 2021, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1141918911", "attributes": {"title": "Fermi's golden rule for heating in strongly driven Floquet systems", "doi": "10.1103/physrevb.104.134308", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1141886712", "attributes": {"title": "Colloquium: Nonthermal pathways to ultrafast control in quantum materials", "doi": "10.1103/revmodphys.93.041002", "nodeyear": 2021, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1141886629", "attributes": {"title": "False signals of chaos from quantum probes", "doi": "10.1103/physreva.104.043308", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1141793655", "attributes": {"title": "Non-Abelian statistics in light-scattering processes across interacting Haldane chains", "doi": "10.1103/physrevb.104.165118", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1141423415", "attributes": {"title": "Optimal building block of multipartite quantum battery in the driven-dissipative charging", "doi": "10.1088/1367-2630/ac2a5b", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144437177", "attributes": {"title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", "doi": "10.21468/scipost.report.3588", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1141424092", "attributes": {"title": "Floquet Phases of Matter via Classical Prethermalization", "doi": "10.1103/physrevlett.127.140603", "nodeyear": 2021, "ref-by-count": 4, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1141081318", "attributes": {"title": "Global quantum discord in the Lipkin–Meshkov–Glick model at zero and finite temperatures", "doi": "10.1088/1361-648x/ac2647", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1141370501", "attributes": {"title": "Constant of Motion Identifying Excited-State Quantum Phases", "doi": "10.1103/physrevlett.127.130602", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1141198298", "attributes": {"title": "Bulk Photovoltaic Effect Driven by Collective Excitations in a Correlated Insulator", "doi": "10.1103/physrevlett.127.127402", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1141139712", "attributes": {"title": "Signatures of excited-state quantum phase transitions in quantum many-body systems: Phase space analysis", "doi": "10.1103/physreve.104.034119", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1141117728", "attributes": {"title": "Floquet Theory of Photoinduced Topological Phase Transitions in the Organic Salt α-(BEDT-TTF)2I3 Irradiated with Elliptically Polarized Light", "doi": "10.7566/jpsj.90.104705", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1141039563", "attributes": {"title": "Optical Indistinguishability via Twinning Fields", "doi": "10.1103/physrevlett.127.113201", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1141039539", "attributes": {"title": "Thermalization processes induced by quantum monitoring in multilevel systems", "doi": "10.1103/physreve.104.034114", "nodeyear": 2021, "ref-by-count": 3, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1141007405", "attributes": {"title": "Reinforcement Learning for Digital Quantum Simulation", "doi": "10.1103/physrevlett.127.110502", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1140992787", "attributes": {"title": "Floquet prethermalization and Rabi oscillations in optically excited Hubbard clusters", "doi": "10.1038/s41598-021-97104-x", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1140946090", "attributes": {"title": "Fast driven quantum systems: interaction picture and boundary conditions", "doi": "10.1088/1402-4896/ac2184", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1140903868", "attributes": {"title": "Electronic Floquet gyro-liquid crystal", "doi": "10.1038/s41467-021-25511-9", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144436951", "attributes": {"title": "Nonequilibrium steady states in the Floquet-Lindblad systems: van Vleck's high-frequency expansion approach", "doi": "10.21468/scipost.report.3482", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1141458068", "attributes": {"title": "Floquet vacuum engineering: Laser-driven chiral soliton lattice in the QCD vacuum", "doi": "10.1103/physrevd.104.054041", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1141330553", "attributes": {"title": "Using optical conductivity to detect the underlying metallic edge state in the interacting Haldane model", "doi": "10.1103/physrevb.104.115146", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1141330548", "attributes": {"title": "Dynamical preparation of stripe states in spin-orbit-coupled gases", "doi": "10.1103/physreva.104.l031305", "nodeyear": 2021, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1141082269", "attributes": {"title": "Emergent eigenstate solution for generalized thermalization", "doi": "10.1103/physreva.104.l031303", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1141082265", "attributes": {"title": "Impurity-induced quantum chaos for an ultracold bosonic ensemble in a double well", "doi": "10.1103/physreva.104.033315", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1140946998", "attributes": {"title": "Decoherence-free radio-frequency-dressed subspaces", "doi": "10.1103/physreva.104.033307", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1140875048", "attributes": {"title": "Direct and ultrafast probing of quantum many-body interactions through coherent two-dimensional spectroscopy: From weak- to strong-interaction regimes", "doi": "10.1103/physrevb.104.115105", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1140813822", "attributes": {"title": "Nonadiabatic evolution and thermodynamics of a time-dependent open quantum system", "doi": "10.1103/physreva.104.032201", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1139687004", "attributes": {"title": "Ergodicity breaking in an incommensurate system observed by OTOCs and loschmidt echoes: From quantum diffusion to sub-diffusion", "doi": "10.1016/j.chaos.2021.111175", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "08:0.33;01:0.33;09:0.33", "level": "cite_l2"}}, {"id": "pub.1140631120", "attributes": {"title": "Statistical Floquet prethermalization of the Bose-Hubbard model", "doi": "10.21468/scipostphys.11.2.040", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1140376339", "attributes": {"title": "Tailoring quantum gases by Floquet engineering", "doi": "10.1038/s41567-021-01316-x", "nodeyear": 2021, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1140327645", "attributes": {"title": "Flow equations for disordered Floquet systems", "doi": "10.21468/scipostphys.11.2.028", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1140210127", "attributes": {"title": "Anomalous photo-thermal effects in multi-layered semi-Dirac black phosphorus", "doi": "10.1063/5.0056116", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1140251168", "attributes": {"title": "Analytic approaches to periodically driven closed quantum systems: methods and applications", "doi": "10.1088/1361-648x/ac1b61", "nodeyear": 2021, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:0.33;09:0.33;10:0.33", "level": "cite_l2"}}, {"id": "pub.1140149233", "attributes": {"title": "Polynomial filter diagonalization of large Floquet unitary operators", "doi": "10.21468/scipostphys.11.2.021", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1140780393", "attributes": {"title": "Dynamics of fluctuation correlation in a periodically driven classical system", "doi": "10.1103/physrevb.104.075161", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1140748154", "attributes": {"title": "Identifying and harnessing dynamical phase transitions for quantum-enhanced sensing", "doi": "10.1103/physrevresearch.3.033199", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1140595261", "attributes": {"title": "Floquet engineering of topological localization transitions and mobility edges in one-dimensional non-Hermitian quasicrystals", "doi": "10.1103/physrevresearch.3.033184", "nodeyear": 2021, "ref-by-count": 5, "is_input_DOI": false, "category_for": "08:1.00", "level": "cite_l2"}}, {"id": "pub.1140595176", "attributes": {"title": "Criticality-enhanced quantum sensor at finite temperature", "doi": "10.1103/physreva.104.022612", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1140449264", "attributes": {"title": "Light-matter coupling and quantum geometry in moiré materials", "doi": "10.1103/physrevb.104.064306", "nodeyear": 2021, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1140411348", "attributes": {"title": "Real-time dynamics of the photoinduced topological state in the organic conductor α-(BEDT-TTF)2I3 under continuous-wave and pulse excitations", "doi": "10.1103/physrevb.104.085123", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1140385244", "attributes": {"title": "Effect of chaos on the simulation of quantum critical phenomena in analog quantum simulators", "doi": "10.1103/physrevresearch.3.033145", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1140343664", "attributes": {"title": "Flow Equations for Disordered Floquet Systems", "doi": "10.21468/scipost.report.3287", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1139432247", "attributes": {"title": "Driven quantum many-body systems and out-of-equilibrium topology.", "doi": "10.1088/1361-648x/ac1151", "nodeyear": 2021, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:0.33;09:0.33;10:0.33", "level": "cite_l2"}}, {"id": "pub.1139715974", "attributes": {"title": "The Renewed Role of Sweep Functions in Noisy Shortcuts to Adiabaticity", "doi": "10.3390/e23070897", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1139696368", "attributes": {"title": "Novel characterization of dopant-based qubits", "doi": "10.1557/s43577-021-00136-x", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "09:0.60;03:0.40", "level": "cite_l2"}}, {"id": "pub.1139686944", "attributes": {"title": "Riemann zeros from Floquet engineering a trapped-ion qubit", "doi": "10.1038/s41534-021-00446-7", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1137941137", "attributes": {"title": "Unsupervised machine learning of topological phase transitions from experimental data", "doi": "10.1088/2632-2153/abffe7", "nodeyear": 2021, "ref-by-count": 10, "is_input_DOI": false, "category_for": "08:1.00", "level": "cite_l2"}}, {"id": "pub.1144432008", "attributes": {"title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", "doi": "10.21468/scipost.report.3198", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1139359212", "attributes": {"title": "Non-Markovian Speedup Dynamics in Markovian and Non-Markovian Channels", "doi": "10.1007/s10773-021-04885-y", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1141244634", "attributes": {"title": "Signatures of Quantum Phase Transitions after Quenches in Quantum Chaotic One-Dimensional Systems", "doi": "10.1103/physrevx.11.031062", "nodeyear": 2021, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1140043181", "attributes": {"title": "Nonlinear optical processes in cavity light-matter systems", "doi": "10.1103/physrevb.104.035209", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1139809449", "attributes": {"title": "Crosstalk analysis for single-qubit and two-qubit gates in spin qubit arrays", "doi": "10.1103/physrevb.104.045420", "nodeyear": 2021, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1139809443", "attributes": {"title": "From nonequilibrium Green's functions to quantum master equations for the density matrix and out-of-time-order correlators: Steady-state and adiabatic dynamics", "doi": "10.1103/physrevb.104.035425", "nodeyear": 2021, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1139801116", "attributes": {"title": "Control of superexchange interactions with DC electric fields", "doi": "10.1103/physrevresearch.3.033066", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1139365607", "attributes": {"title": "Error-resilient Floquet geometric quantum computation", "doi": "10.1103/physrevresearch.3.033010", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "08:1.00", "level": "cite_l2"}}, {"id": "pub.1139320696", "attributes": {"title": "Rabi Spectroscopy and Sensitivity of a Floquet Engineered Optical Lattice Clock", "doi": "10.1088/0256-307x/38/7/073201", "nodeyear": 2021, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1139210985", "attributes": {"title": "Gauge‐Induced Floquet Topological States in Photonic Waveguides", "doi": "10.1002/lpor.202000584", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1139155188", "attributes": {"title": "Oscillating states of periodically driven anharmonic Langevin systems", "doi": "10.1103/physreve.103.062143", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1139098613", "attributes": {"title": "Quantum Simulation of Three-Body Interactions in Weakly Driven Quantum Systems", "doi": "10.1103/physrevlett.126.250504", "nodeyear": 2021, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1138795800", "attributes": {"title": "Interferometric Order Parameter for Excited-State Quantum Phase Transitions in Bose-Einstein Condensates", "doi": "10.1103/physrevlett.126.230602", "nodeyear": 2021, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1138695988", "attributes": {"title": "Simulating Hydrodynamics on Noisy Intermediate-Scale Quantum Devices with Random Circuits", "doi": "10.1103/physrevlett.126.230501", "nodeyear": 2021, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1139212437", "attributes": {"title": "Floquet engineering ultracold polar molecules to simulate topological insulators", "doi": "10.1103/physreva.103.063322", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1138955510", "attributes": {"title": "Quantum coherence as a signature of chaos", "doi": "10.1103/physrevresearch.3.023214", "nodeyear": 2021, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1138886959", "attributes": {"title": "Information scrambling and chaos in open quantum systems", "doi": "10.1103/physreva.103.062214", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1138581779", "attributes": {"title": "Continuum analogs of excited-state quantum phase transitions", "doi": "10.1103/physreva.103.062207", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1137877758", "attributes": {"title": "Avoided level crossings in quasi-exact approach", "doi": "10.1016/j.nuclphysb.2021.115431", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1138289216", "attributes": {"title": "Topological Hall Effects of Magnons in Ferrimagnets", "doi": "10.7566/jpsj.90.081004", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1141651369", "attributes": {"title": "One-Way Edge Modes Induced by Synthetic Magnetic Field in Time-Varying LC Circuit", "doi": "10.1109/icee52715.2021.9544271", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "03:1.00", "level": "cite_l2"}}, {"id": "pub.1138216900", "attributes": {"title": "Conformal Floquet dynamics with a continuous drive protocol", "doi": "10.1007/jhep05(2021)172", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1138186330", "attributes": {"title": "Quantum localization measures in phase space", "doi": "10.1103/physreve.103.052214", "nodeyear": 2021, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144435924", "attributes": {"title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", "doi": "10.21468/scipost.report.2932", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1138114367", "attributes": {"title": "Nonlinear dynamics and quantum chaos of a family of kicked p-spin models", "doi": "10.1103/physreve.103.052212", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1138249357", "attributes": {"title": "Mobility edge and multifractality in a periodically driven Aubry-André model", "doi": "10.1103/physrevb.103.184309", "nodeyear": 2021, "ref-by-count": 8, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1138186281", "attributes": {"title": "Valley-selective Floquet Chern flat bands in twisted multilayer graphene", "doi": "10.1103/physrevb.103.195146", "nodeyear": 2021, "ref-by-count": 3, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1138114325", "attributes": {"title": "Light-induced topological phases in thin films of magnetically doped topological insulators", "doi": "10.1103/physrevb.103.205130", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1137890988", "attributes": {"title": "Quantum geometric tensor and quantum phase transitions in the Lipkin-Meshkov-Glick model", "doi": "10.1103/physrevb.103.174104", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1137773392", "attributes": {"title": "Quantizing Lévy flights", "doi": "10.1103/physrevb.103.174301", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1134453264", "attributes": {"title": "Effective Hamiltonian of the Jaynes–Cummings model beyond rotating-wave approximation*", "doi": "10.1088/1674-1056/abd930", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1137261348", "attributes": {"title": "Out-of-time-ordered correlators and the Loschmidt echo in the quantum kicked top: how low can we go?", "doi": "10.1088/1361-6463/abf8f3", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1137484959", "attributes": {"title": "Low rank compression in the numerical solution of the nonequilibrium Dyson equation", "doi": "10.21468/scipostphys.10.4.091", "nodeyear": 2021, "ref-by-count": 5, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1137437656", "attributes": {"title": "Isocyanic acid (HNCO) in the hot molecular core G331.512-0.103: observations and chemical modelling", "doi": "10.1093/mnras/stab1163", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1136592478", "attributes": {"title": "Out of equilibrium chiral higher order topological insulator on a π -flux square lattice", "doi": "10.1088/1361-648x/abf0c3", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:0.33;09:0.33;10:0.33", "level": "cite_l2"}}, {"id": "pub.1137167395", "attributes": {"title": "Mechanism of periodic field driven self-assembly process", "doi": "10.1063/5.0048072", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "03:1.00", "level": "cite_l2"}}, {"id": "pub.1137494538", "attributes": {"title": "Prethermalization and thermalization in periodically driven many-body systems away from the high-frequency limit", "doi": "10.1103/physrevb.103.l140302", "nodeyear": 2021, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1137491775", "attributes": {"title": "Thermalization and prethermalization in periodically kicked quantum spin chains", "doi": "10.1103/physrevb.103.144307", "nodeyear": 2021, "ref-by-count": 4, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1137490808", "attributes": {"title": "Floquet engineering of continuous-time quantum walks: Toward the simulation of complex and next-nearest-neighbor couplings", "doi": "10.1103/physreva.103.042219", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1137410827", "attributes": {"title": "Quantum supremacy and quantum phase transitions", "doi": "10.1103/physrevb.103.165132", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1137311787", "attributes": {"title": "Quantum quench in a driven Ising chain", "doi": "10.1103/physrevb.103.l140407", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1137235025", "attributes": {"title": "Quantum operator growth bounds for kicked tops and semiclassical spin chains", "doi": "10.1103/physreva.103.042414", "nodeyear": 2021, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1137168785", "attributes": {"title": "Dynamical transitions in aperiodically kicked tight-binding models", "doi": "10.1103/physrevb.103.134303", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1137035608", "attributes": {"title": "Controlling directed atomic motion and second-order tunneling of a spin-orbit-coupled atom in optical lattices", "doi": "10.1103/physreva.103.043315", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1136994042", "attributes": {"title": "Dynamical Freezing and Scar Points in Strongly Driven Floquet Matter: Resonance vs Emergent Conservation Laws", "doi": "10.1103/physrevx.11.021008", "nodeyear": 2021, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1136986948", "attributes": {"title": "Programmable quantum simulations of spin systems with trapped ions", "doi": "10.1103/revmodphys.93.025001", "nodeyear": 2021, "ref-by-count": 70, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1136721709", "attributes": {"title": "Floquet Theory and Ultrafast Control of Magnetism", "doi": "10.1007/978-3-030-62844-4_11", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1136701453", "attributes": {"title": "Chimera Time-Crystalline Order in Quantum Spin Networks", "doi": "10.1103/physrevlett.126.120606", "nodeyear": 2021, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1136666903", "attributes": {"title": "Work statistics and symmetry breaking in an excited-state quantum phase transition", "doi": "10.1103/physreve.103.032145", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1134743337", "attributes": {"title": "Statistical analysis of the excited-state quantum phase transitions in the interacting boson model", "doi": "10.1088/1361-6471/abdd8c", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1136498164", "attributes": {"title": "Emergence of a Renormalized 1/N Expansion in Quenched Critical Many-Body Systems", "doi": "10.1103/physrevlett.126.110602", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1134894421", "attributes": {"title": "Excited-state quantum phase transitions", "doi": "10.1088/1751-8121/abdfe8", "nodeyear": 2021, "ref-by-count": 18, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1136367994", "attributes": {"title": "Ergodic and Nonergodic Dual-Unitary Quantum Circuits with Arbitrary Local Hilbert Space Dimension", "doi": "10.1103/physrevlett.126.100603", "nodeyear": 2021, "ref-by-count": 21, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1136299609", "attributes": {"title": "Characterizing the Lipkin-Meshkov-Glick model excited-state quantum phase transition using dynamical and statistical properties of the diagonal entropy", "doi": "10.1103/physreve.103.032109", "nodeyear": 2021, "ref-by-count": 6, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1136655132", "attributes": {"title": "Tunable fragile topology in Floquet systems", "doi": "10.1103/physrevb.103.l121115", "nodeyear": 2021, "ref-by-count": 11, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1136504030", "attributes": {"title": "Optical manipulation of domains in chiral topological superconductors", "doi": "10.1103/physrevresearch.3.013253", "nodeyear": 2021, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1136477967", "attributes": {"title": "Quasiclassical approach to quantum quench dynamics in the presence of an excited-state quantum phase transition", "doi": "10.1103/physreva.103.032213", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1136417273", "attributes": {"title": "Topological Mott transition in a Weyl-Hubbard model: Dynamical mean-field theory study", "doi": "10.1103/physrevb.103.125132", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1136414044", "attributes": {"title": "Floquet engineering of Mott insulators with strong spin-orbit coupling", "doi": "10.1103/physrevb.103.l100408", "nodeyear": 2021, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1136226159", "attributes": {"title": "Energy diffusion and absorption in chaotic systems with rapid periodic driving", "doi": "10.1103/physrevresearch.3.013219", "nodeyear": 2021, "ref-by-count": 4, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1136043176", "attributes": {"title": "Saddle-point scrambling without thermalization", "doi": "10.1103/physreva.103.033304", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1135722934", "attributes": {"title": "Bilinear dynamic mode decomposition for quantum control", "doi": "10.1088/1367-2630/abe972", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1133448902", "attributes": {"title": "Quantum scarring in a spin-boson system: fundamental families of periodic orbits", "doi": "10.1088/1367-2630/abd2e6", "nodeyear": 2021, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1132677751", "attributes": {"title": "Excited state quantum phase transitions in the bending spectra of molecules", "doi": "10.1016/j.jqsrt.2020.107436", "nodeyear": 2021, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1135442248", "attributes": {"title": "Semiconductor qubits in practice", "doi": "10.1038/s42254-021-00283-9", "nodeyear": 2021, "ref-by-count": 34, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1135329747", "attributes": {"title": "Controllable and shortcut-based population transfers with a composite system of a nitrogen-vacancy electron spin and microwave photons", "doi": "10.1007/s11128-021-03005-3", "nodeyear": 2021, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1135194875", "attributes": {"title": "Ubiquitous quantum scarring does not prevent ergodicity", "doi": "10.1038/s41467-021-21123-5", "nodeyear": 2021, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1140345559", "attributes": {"title": "Flow Equations for Disordered Floquet Systems", "doi": "10.21468/scipost.report.2518", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1135141218", "attributes": {"title": "Ground-state phase and superfluidity of tunable spin-orbit-coupled Bose-Einstein condensates", "doi": "10.1103/physreve.103.022204", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1140343596", "attributes": {"title": "Flow Equations for Disordered Floquet Systems", "doi": "10.21468/scipost.report.2494", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1135773784", "attributes": {"title": "Population trapping in a pair of periodically driven Rydberg atoms", "doi": "10.1103/physreva.103.023335", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1135472070", "attributes": {"title": "Breakdown of Markovianity by interactions in stroboscopic Floquet-Lindblad dynamics under high-frequency drive", "doi": "10.1103/physreva.103.l020202", "nodeyear": 2021, "ref-by-count": 4, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1135372133", "attributes": {"title": "Prethermal quasiconserved observables in Floquet quantum systems", "doi": "10.1103/physrevb.103.054305", "nodeyear": 2021, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1135327462", "attributes": {"title": "Floquet engineering of edge states in the presence of staggered potential and interactions", "doi": "10.1103/physrevb.103.085417", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1135309838", "attributes": {"title": "Floquet second order topological superconductor based on unconventional pairing", "doi": "10.1103/physrevb.103.085413", "nodeyear": 2021, "ref-by-count": 7, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1135306894", "attributes": {"title": "Shortcuts to dynamic polarization", "doi": "10.1103/physrevb.103.075118", "nodeyear": 2021, "ref-by-count": 2, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1135033325", "attributes": {"title": "Adiabatic landscape and optimal paths in ergodic systems", "doi": "10.1103/physrevresearch.3.013102", "nodeyear": 2021, "ref-by-count": 5, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1132630990", "attributes": {"title": "Superradiant phase transition in quantum Rabi dimer with staggered couplings", "doi": "10.1016/j.physa.2020.125534", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1130120687", "attributes": {"title": "Control of electronic and optical properties of a laser dressed double quantum dot molecule by lateral electric field", "doi": "10.1016/j.physe.2020.114362", "nodeyear": 2021, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1134736715", "attributes": {"title": "Liquid-crystal-based topological photonics", "doi": "10.1073/pnas.2020525118", "nodeyear": 2021, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1134729998", "attributes": {"title": "Information Scrambling over Bipartitions: Equilibration, Entropy Production, and Typicality", "doi": "10.1103/physrevlett.126.030601", "nodeyear": 2021, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1134295650", "attributes": {"title": "Floquet prethermalization in dipolar spin chains", "doi": "10.1038/s41567-020-01120-z", "nodeyear": 2021, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1136535762", "attributes": {"title": "Suppressing Dissipation in a Floquet-Hubbard System", "doi": "10.1103/physrevx.11.011057", "nodeyear": 2021, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1135035980", "attributes": {"title": "Theory of Trotter Error with Commutator Scaling", "doi": "10.1103/physrevx.11.011020", "nodeyear": 2021, "ref-by-count": 47, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1134951348", "attributes": {"title": "Floquet engineering of topological transitions in a twisted transition metal dichalcogenide homobilayer", "doi": "10.1103/physrevb.103.014310", "nodeyear": 2021, "ref-by-count": 7, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1134796271", "attributes": {"title": "Nonequilibrium phase transition in transport through a driven quantum point contact", "doi": "10.1103/physrevb.103.l041405", "nodeyear": 2021, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1134708221", "attributes": {"title": "Universal Landau-Zener regimes in dynamical topological phase transitions", "doi": "10.1103/physreva.103.013314", "nodeyear": 2021, "ref-by-count": 4, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1133369672", "attributes": {"title": "A note on Jacobi-type transitions in finite nuclei", "doi": "10.1016/j.aop.2020.168380", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1144696405", "attributes": {"title": "Quantum Chaos and Universal Trotterisation Performance Behaviours in Digital Quantum Simulation", "doi": "10.1364/qim.2021.w3a.1", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1141996449", "attributes": {"title": "Electrical Control and Quantum Chaos with a High-Spin Nucleus in Silicon", "doi": "10.1007/978-3-030-83473-9", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1138681817", "attributes": {"title": "Nonequilibrium states in quantum materials under time-period driving", "doi": "10.7498/aps.70.20201808", "nodeyear": 2021, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1137164603", "attributes": {"title": "Memory Functions, Projection Operators, and the Defect Technique, Some Tools of the Trade for the Condensed Matter Physicist", "doi": "10.1007/978-3-030-68667-3", "nodeyear": 2021, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1132415037", "attributes": {"title": "Fano resonances in optical spectra of semiconductor quantum wells dressed by circularly polarized light.", "doi": "10.1364/ol.410091", "nodeyear": 2020, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1133653821", "attributes": {"title": "Floquet engineering of molecular dynamics via infrared coupling", "doi": "10.1063/5.0033382", "nodeyear": 2020, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1133434712", "attributes": {"title": "Self-averaging in many-body quantum systems out of equilibrium: Time dependence of distributions", "doi": "10.1103/physreve.102.062126", "nodeyear": 2020, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1132597664", "attributes": {"title": "Time crystals in the driven transverse field Ising model under quasiperiodic modulation", "doi": "10.1088/1367-2630/abc9ec", "nodeyear": 2020, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1133361819", "attributes": {"title": "Fano resonances in quantum well absorption induced by electromagnetic dressing", "doi": "10.1063/5.0032332", "nodeyear": 2020, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1133346206", "attributes": {"title": "Novel Quantum Phases of Two-Component Bosons with Pair Hopping in Synthetic Dimension", "doi": "10.1103/physrevlett.125.245301", "nodeyear": 2020, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1133100286", "attributes": {"title": "Floquet Engineering of Structures Based on Gapless Semiconductors", "doi": "10.1134/s1063782620120143", "nodeyear": 2020, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1134158402", "attributes": {"title": "Homogeneous Floquet time crystal from weak ergodicity breaking", "doi": "10.1103/physrevb.102.224309", "nodeyear": 2020, "ref-by-count": 2, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1134040199", "attributes": {"title": "Excited-state quantum phase transitions in Kerr nonlinear oscillators", "doi": "10.1103/physreva.102.063531", "nodeyear": 2020, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1134037611", "attributes": {"title": "Tuning the topology of p-wave superconductivity in an analytically solvable two-band model", "doi": "10.1103/physrevb.102.235156", "nodeyear": 2020, "ref-by-count": 0, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1134035516", "attributes": {"title": "Dynamical transition for a class of integrable models coupled to a bath", "doi": "10.1103/physrevb.102.235154", "nodeyear": 2020, "ref-by-count": 2, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1133997345", "attributes": {"title": "Quantum frequency locking and downconversion in a driven qubit-cavity system", "doi": "10.1103/physrevresearch.2.043411", "nodeyear": 2020, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1133741565", "attributes": {"title": "Edge mode manipulation through commensurate multifrequency driving", "doi": "10.1103/physrevb.102.235143", "nodeyear": 2020, "ref-by-count": 5, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1133735060", "attributes": {"title": "Quantum metamorphism", "doi": "10.1103/physrevb.102.224307", "nodeyear": 2020, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1133499708", "attributes": {"title": "Topological Floquet engineering of a one-dimensional optical lattice via resonant shaking with two harmonic frequencies", "doi": "10.1103/physreva.102.063315", "nodeyear": 2020, "ref-by-count": 2, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1133402404", "attributes": {"title": "Finite-component dynamical quantum phase transitions", "doi": "10.1103/physrevb.102.220302", "nodeyear": 2020, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1133344182", "attributes": {"title": "Bose-Hubbard physics in synthetic dimensions from interaction Trotterization", "doi": "10.1103/physrevresearch.2.043340", "nodeyear": 2020, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1133099711", "attributes": {"title": "Floquet perturbation theory for periodically driven weakly interacting fermions", "doi": "10.1103/physrevb.102.235114", "nodeyear": 2020, "ref-by-count": 6, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1132237880", "attributes": {"title": "Quantum quenches in the Dicke model: Thermalization and failure of the generalized Gibbs ensemble*", "doi": "10.1088/1674-1056/abc679", "nodeyear": 2020, "ref-by-count": 0, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1132036387", "attributes": {"title": "Exact rotating wave approximation", "doi": "10.1016/j.aop.2020.168327", "nodeyear": 2020, "ref-by-count": 4, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1131329755", "attributes": {"title": "Magnetic field effect on the electronic states and the intraband optical absorption spectrum of a laser dressed double quantum dot molecule", "doi": "10.1016/j.cjph.2020.09.028", "nodeyear": 2020, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1133080576", "attributes": {"title": "Relevant out-of-time-order correlator operators: Footprints of the classical dynamics", "doi": "10.1103/physreve.102.052133", "nodeyear": 2020, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1133125125", "attributes": {"title": "Solvable Model of a Generic Driven Mixture of Trapped Bose–Einstein Condensates and Properties of a Many-Boson Floquet State at the Limit of an Infinite Number of Particles", "doi": "10.3390/e22121342", "nodeyear": 2020, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1132781598", "attributes": {"title": "Manipulating Intertwined Orders in Solids with Quantum Light", "doi": "10.1103/physrevlett.125.217402", "nodeyear": 2020, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1132635554", "attributes": {"title": "Harnessing the Power of the Second Quantum Revolution", "doi": "10.1103/prxquantum.1.020101", "nodeyear": 2020, "ref-by-count": 33, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1132626689", "attributes": {"title": "Exponential growth of out-of-time-order correlator without chaos: inverted harmonic oscillator", "doi": "10.1007/jhep11(2020)068", "nodeyear": 2020, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1132300850", "attributes": {"title": "Quantifying the Sensitivity to Errors in Analog Quantum Simulation", "doi": "10.1103/prxquantum.1.020308", "nodeyear": 2020, "ref-by-count": 7, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1132266415", "attributes": {"title": "Anomalous Spin-Charge Separation in a Driven Hubbard System", "doi": "10.1103/physrevlett.125.195301", "nodeyear": 2020, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1132781568", "attributes": {"title": "Laser-induced topological s-wave superconductivity in bilayer transition metal dichalcogenides", "doi": "10.1103/physrevb.102.174508", "nodeyear": 2020, "ref-by-count": 3, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1132682732", "attributes": {"title": "Time-crystalline phases and period-doubling oscillations in one-dimensional Floquet topological insulators", "doi": "10.1103/physrevresearch.2.043239", "nodeyear": 2020, "ref-by-count": 1, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1132672783", "attributes": {"title": "Nonequilibrium non-Markovian steady states in open quantum many-body systems: Persistent oscillations in Heisenberg quantum spin chains", "doi": "10.1103/physrevb.102.174309", "nodeyear": 2020, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1132495853", "attributes": {"title": "Stark time crystals: Symmetry breaking in space and time", "doi": "10.1103/physrevb.102.195116", "nodeyear": 2020, "ref-by-count": 6, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1132252119", "attributes": {"title": "Phase Diagrams of Periodically Driven Spin–Orbit Coupled 87Rb and 23Na Bose–Einstein Condensates", "doi": "10.1002/andp.202000194", "nodeyear": 2020, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1132060808", "attributes": {"title": "Unified Theory to Characterize Floquet Topological Phases by Quench Dynamics", "doi": "10.1103/physrevlett.125.183001", "nodeyear": 2020, "ref-by-count": 9, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1131969118", "attributes": {"title": "Ergodic-Localized Junctions in a Periodically Driven Spin Chain", "doi": "10.1103/physrevlett.125.170503", "nodeyear": 2020, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1130243954", "attributes": {"title": "Floquet states in dissipative open quantum systems", "doi": "10.1088/1361-6455/abb127", "nodeyear": 2020, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1131841249", "attributes": {"title": "Simulating complex quantum networks with time crystals", "doi": "10.1126/sciadv.aay8892", "nodeyear": 2020, "ref-by-count": 9, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1140347748", "attributes": {"title": "Flow Equations for Disordered Floquet Systems", "doi": "10.21468/scipost.report.2082", "nodeyear": 2020, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1132055741", "attributes": {"title": "Chiral Luttinger liquids in graphene tuned by irradiation", "doi": "10.1103/physrevb.102.155428", "nodeyear": 2020, "ref-by-count": 1, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1131923946", "attributes": {"title": "η-paired superconducting hidden phase in photodoped Mott insulators", "doi": "10.1103/physrevb.102.165136", "nodeyear": 2020, "ref-by-count": 18, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1131725038", "attributes": {"title": "Defining a well-ordered Floquet basis by the average energy", "doi": "10.1103/physreva.102.042212", "nodeyear": 2020, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1131633965", "attributes": {"title": "Dynamic renormalization group theory for open Floquet systems", "doi": "10.1103/physrevb.102.134307", "nodeyear": 2020, "ref-by-count": 2, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1131535042", "attributes": {"title": "Geometric properties of adiabatic quantum thermal machines", "doi": "10.1103/physrevb.102.155407", "nodeyear": 2020, "ref-by-count": 18, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1131497997", "attributes": {"title": "Speck of chaos", "doi": "10.1103/physrevresearch.2.043034", "nodeyear": 2020, "ref-by-count": 16, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1131390335", "attributes": {"title": "Holographic Floquet states in low dimensions", "doi": "10.1007/jhep10(2020)013", "nodeyear": 2020, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1130765968", "attributes": {"title": "The 2021 quantum materials roadmap", "doi": "10.1088/2515-7639/abb74e", "nodeyear": 2020, "ref-by-count": 47, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1128676541", "attributes": {"title": "Nuclear structure and phase transition of odd-odd Cu isotopes: A neutron-proton interacting boson-fermion-fermion model calculation", "doi": "10.1016/j.nuclphysa.2020.121961", "nodeyear": 2020, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1131177201", "attributes": {"title": "The Rabi problem with elliptical polarization", "doi": "10.1515/zna-2020-0181", "nodeyear": 2020, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:0.50;03:0.50", "level": "cite_l2"}}, {"id": "pub.1131131373", "attributes": {"title": "Chaos and Quantum Scars in Bose-Josephson Junction Coupled to a Bosonic Mode", "doi": "10.1103/physrevlett.125.134101", "nodeyear": 2020, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1131100748", "attributes": {"title": "Dynamical Order and Superconductivity in a Frustrated Many-Body System", "doi": "10.1103/physrevlett.125.137001", "nodeyear": 2020, "ref-by-count": 17, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1130030918", "attributes": {"title": "Quantum speed limit time, non-Markovianity, and quantum phase transition of the Dicke model", "doi": "10.1364/josab.393998", "nodeyear": 2020, "ref-by-count": 1, "is_input_DOI": false, "category_for": "09:0.33;01:0.33;02:0.33", "level": "cite_l2"}}, {"id": "pub.1130753379", "attributes": {"title": "Statistical properties of the localization measure of chaotic eigenstates in the Dicke model", "doi": "10.1103/physreve.102.032212", "nodeyear": 2020, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1130315991", "attributes": {"title": "Inducing anisotropies in Dirac fermions by periodic driving", "doi": "10.1088/1361-648x/abb1cc", "nodeyear": 2020, "ref-by-count": 1, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1130688900", "attributes": {"title": "Quantum chaos in a system with high degree of symmetries", "doi": "10.1103/physreve.102.032208", "nodeyear": 2020, "ref-by-count": 8, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1131193925", "attributes": {"title": "Floquet engineering of twisted double bilayer graphene", "doi": "10.1103/physrevresearch.2.033494", "nodeyear": 2020, "ref-by-count": 12, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1131193618", "attributes": {"title": "Driven spin chains as high-quality quantum routers", "doi": "10.1103/physreva.102.032624", "nodeyear": 2020, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1131100771", "attributes": {"title": "Floquet topological phase in a generalized PT-symmetric lattice", "doi": "10.1103/physrevb.102.104303", "nodeyear": 2020, "ref-by-count": 2, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1130836894", "attributes": {"title": "Optomagnonic Barnett effect", "doi": "10.1103/physrevb.102.094417", "nodeyear": 2020, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1130756838", "attributes": {"title": "Bridging entanglement dynamics and chaos in semiclassical systems", "doi": "10.1103/physreva.102.032404", "nodeyear": 2020, "ref-by-count": 18, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1130750198", "attributes": {"title": "Resonant laser excitation and time-domain imaging of chiral topological polariton edge states", "doi": "10.1103/physrevresearch.2.033386", "nodeyear": 2020, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1130316025", "attributes": {"title": "Ultrafast critical ground state preparation via bang–bang protocols", "doi": "10.1088/1367-2630/abb1df", "nodeyear": 2020, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1124910985", "attributes": {"title": "Signatures of quantum chaos in the dynamics of bipartite fluctuations", "doi": "10.1016/j.physa.2020.124321", "nodeyear": 2020, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1130469797", "attributes": {"title": "Half-Integer Quantized Topological Response in Quasiperiodically Driven Quantum Systems", "doi": "10.1103/physrevlett.125.100601", "nodeyear": 2020, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1130394801", "attributes": {"title": "Harmonic Fine Tuning and Triaxial Spatial Anisotropy of Dressed Atomic Spins", "doi": "10.1103/physrevlett.125.093203", "nodeyear": 2020, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1130268705", "attributes": {"title": "Signatures of inter-band transitions on dynamical localization", "doi": "10.1140/epjd/e2020-100489-1", "nodeyear": 2020, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1130214677", "attributes": {"title": "Chaos and quantum scars in a coupled top model", "doi": "10.1103/physreve.102.020101", "nodeyear": 2020, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1129902361", "attributes": {"title": "Time Crystals Protected by Floquet Dynamical Symmetry in Hubbard Models", "doi": "10.1103/physrevlett.125.060601", "nodeyear": 2020, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1129855599", "attributes": {"title": "Construction of many-body-localized models where all the eigenstates are matrix-product-states", "doi": "10.1088/1742-5468/aba0a9", "nodeyear": 2020, "ref-by-count": 1, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1130392310", "attributes": {"title": "Thermalization in a Bose-Hubbard dimer with modulated tunneling", "doi": "10.1103/physreva.102.023330", "nodeyear": 2020, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1129926643", "attributes": {"title": "Light-induced bound electron states in two-dimensional systems: Contribution to electron transport", "doi": "10.1103/physrevb.102.075412", "nodeyear": 2020, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1129685555", "attributes": {"title": "Entropic vibrational resonance", "doi": "10.1103/physreve.102.012149", "nodeyear": 2020, "ref-by-count": 5, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1129594568", "attributes": {"title": "Donor Spins in Silicon for Quantum Technologies", "doi": "10.1002/qute.202000005", "nodeyear": 2020, "ref-by-count": 17, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1129534483", "attributes": {"title": "Out-of-equilibrium phase transitions induced by Floquet resonances in a periodically quench-driven XY spin chain", "doi": "10.21468/scipostphyscore.3.1.001", "nodeyear": 2020, "ref-by-count": 2, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1129384214", "attributes": {"title": "Emergent Hydrodynamics in Nonequilibrium Quantum Systems", "doi": "10.1103/physrevlett.125.030601", "nodeyear": 2020, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1129066525", "attributes": {"title": "Complex Density of Continuum States in Resonant Quantum Tunneling", "doi": "10.1103/physrevlett.125.020401", "nodeyear": 2020, "ref-by-count": 4, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "cite_l2"}}, {"id": "pub.1128974254", "attributes": {"title": "General description for nonequilibrium steady states in periodically driven dissipative quantum systems", "doi": "10.1126/sciadv.abb4019", "nodeyear": 2020, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1129713716", "attributes": {"title": "Coherent control of dissipative dynamics in a periodically driven lattice array", "doi": "10.1103/physreva.102.012221", "nodeyear": 2020, "ref-by-count": 3, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1129492912", "attributes": {"title": "Electromagnetic control of transport across a barrier on a topological insulator surface", "doi": "10.1103/physrevb.102.045419", "nodeyear": 2020, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1129063470", "attributes": {"title": "Quantum to classical crossover of Floquet engineering in correlated quantum systems", "doi": "10.1103/physrevresearch.2.033033", "nodeyear": 2020, "ref-by-count": 18, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1128941497", "attributes": {"title": "Robust Dynamic Hamiltonian Engineering of Many-Body Spin Systems", "doi": "10.1103/physrevx.10.031002", "nodeyear": 2020, "ref-by-count": 23, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1128912140", "attributes": {"title": "Floquet engineering of the Luttinger Hamiltonian", "doi": "10.1103/physrevb.102.035301", "nodeyear": 2020, "ref-by-count": 6, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1128533067", "attributes": {"title": "Condensed matter physics in time crystals", "doi": "10.1088/1367-2630/ab9d54", "nodeyear": 2020, "ref-by-count": 18, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1128836880", "attributes": {"title": "Power-Stroke-Driven Muscle Contraction", "doi": "10.1007/978-3-030-45197-4_4", "nodeyear": 2020, "ref-by-count": 0, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1125908542", "attributes": {"title": "Coding closed and open quantum systems in MATLAB: applications in quantum optics and condensed matter", "doi": "10.1088/1361-6404/ab8360", "nodeyear": 2020, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1128827266", "attributes": {"title": "Realization of an anomalous Floquet topological system with ultracold atoms", "doi": "10.1038/s41567-020-0949-y", "nodeyear": 2020, "ref-by-count": 60, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1128505545", "attributes": {"title": "Floquet spectrum for anisotropic and tilted Dirac materials under linearly polarized light at all field intensities", "doi": "10.1063/5.0007576", "nodeyear": 2020, "ref-by-count": 10, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1129532989", "attributes": {"title": "Out-of-equilibrium phase transitions induced by Floquet resonances in a periodically quench-driven XY spin chain", "doi": "10.21468/scipost.report.1771", "nodeyear": 2020, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1128466326", "attributes": {"title": "Many Body Quantum Chaos", "doi": "10.3390/condmat5020041", "nodeyear": 2020, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1128416461", "attributes": {"title": "Universal Anti-Kibble-Zurek Scaling in Fully Connected Systems", "doi": "10.1103/physrevlett.124.230602", "nodeyear": 2020, "ref-by-count": 18, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1128125903", "attributes": {"title": "Theoretical Methods for Ultrastrong Light–Matter Interactions", "doi": "10.1002/qute.201900140", "nodeyear": 2020, "ref-by-count": 26, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1128741464", "attributes": {"title": "Landau-Zener transitions and adiabatic impulse approximation in an array of two Rydberg atoms with time-dependent detuning", "doi": "10.1103/physreva.101.063415", "nodeyear": 2020, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1128303210", "attributes": {"title": "Entanglement measures and nonequilibrium dynamics of quantum many-body systems: A path integral approach", "doi": "10.1103/physrevb.101.245130", "nodeyear": 2020, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1128253343", "attributes": {"title": "Floquet engineering of interlayer couplings: Tuning the magic angle of twisted bilayer graphene at the exit of a waveguide", "doi": "10.1103/physrevb.101.241408", "nodeyear": 2020, "ref-by-count": 18, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1128250379", "attributes": {"title": "Environment-controlled Floquet-state paramagnetism", "doi": "10.1103/physrevresearch.2.023293", "nodeyear": 2020, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1128246725", "attributes": {"title": "Effective Floquet Hamiltonians for periodically driven twisted bilayer graphene", "doi": "10.1103/physrevb.101.235411", "nodeyear": 2020, "ref-by-count": 18, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1128224551", "attributes": {"title": "Anomalous levitation and annihilation in Floquet topological insulators", "doi": "10.1103/physrevresearch.2.022048", "nodeyear": 2020, "ref-by-count": 3, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1128130936", "attributes": {"title": "Collapse and revival of quantum many-body scars via Floquet engineering", "doi": "10.1103/physrevb.101.245107", "nodeyear": 2020, "ref-by-count": 48, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1127296857", "attributes": {"title": "Quantum vs classical dynamics in a spin-boson system: manifestations of spectral correlations and scarring", "doi": "10.1088/1367-2630/ab8ef8", "nodeyear": 2020, "ref-by-count": 16, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1127987694", "attributes": {"title": "Quantum interference device for controlled two-qubit operations", "doi": "10.1038/s41534-020-0275-3", "nodeyear": 2020, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1127977347", "attributes": {"title": "A quantum annealer with fully programmable all-to-all coupling via Floquet engineering", "doi": "10.1038/s41534-020-0279-z", "nodeyear": 2020, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1127865614", "attributes": {"title": "Time crystallinity in open quantum systems", "doi": "10.22331/q-2020-05-25-270", "nodeyear": 2020, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1127470058", "attributes": {"title": "Survival of current in a periodically driven hard-core bosonic system", "doi": "10.1140/epjb/e2020-10133-3", "nodeyear": 2020, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1127517958", "attributes": {"title": "Floquet Engineering Topological Many-Body Localized Systems", "doi": "10.1103/physrevlett.124.190601", "nodeyear": 2020, "ref-by-count": 9, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "cite_l2"}}, {"id": "pub.1127358108", "attributes": {"title": "Transition from quantum chaos to localization in spin chains", "doi": "10.1103/physreve.101.052201", "nodeyear": 2020, "ref-by-count": 17, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1127346740", "attributes": {"title": "Band structure engineering and non-equilibrium dynamics in Floquet topological insulators", "doi": "10.1038/s42254-020-0170-z", "nodeyear": 2020, "ref-by-count": 110, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1127989066", "attributes": {"title": "Controlling magnetic correlations in a driven Hubbard system far from half-filling", "doi": "10.1103/physreva.101.053634", "nodeyear": 2020, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1127955024", "attributes": {"title": "Error bounds for constrained dynamics in gapped quantum systems: Rigorous results and generalizations", "doi": "10.1103/physreva.101.052122", "nodeyear": 2020, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1127897454", "attributes": {"title": "Predicted photoinduced topological phases in organic salt α-(BEDT-TTF)2I3", "doi": "10.1103/physrevresearch.2.023229", "nodeyear": 2020, "ref-by-count": 4, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1127889093", "attributes": {"title": "Self-averaging in many-body quantum systems out of equilibrium: Chaotic systems", "doi": "10.1103/physrevb.101.174312", "nodeyear": 2020, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1127764217", "attributes": {"title": "Characterization of photoexcited states in the half-filled one-dimensional extended Hubbard model assisted by machine learning", "doi": "10.1103/physrevb.101.195136", "nodeyear": 2020, "ref-by-count": 4, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1127758910", "attributes": {"title": "Towards simulation of the dynamics of materials on quantum computers", "doi": "10.1103/physrevb.101.184305", "nodeyear": 2020, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1127625202", "attributes": {"title": "Transport through a quantum critical system: A thermodynamically consistent approach", "doi": "10.1103/physrevresearch.2.023178", "nodeyear": 2020, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1127607114", "attributes": {"title": "Floquet eigenspectra of a nonlinear two-mode system under periodic driving: The emergence of ring structures", "doi": "10.1103/physreva.101.053623", "nodeyear": 2020, "ref-by-count": 2, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1127358045", "attributes": {"title": "Classical and quantum chaos in a three-mode bosonic system", "doi": "10.1103/physreva.101.053604", "nodeyear": 2020, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1125292836", "attributes": {"title": "Trotterized adiabatic quantum simulation and its application to a simple all-optical system", "doi": "10.1088/1367-2630/ab7a31", "nodeyear": 2020, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1126383906", "attributes": {"title": "Dynamics and transport at the threshold of many-body localization", "doi": "10.1016/j.physrep.2020.03.003", "nodeyear": 2020, "ref-by-count": 33, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1125977593", "attributes": {"title": "Polynomial potentials and coupled quantum dots in two and three dimensions", "doi": "10.1016/j.aop.2020.168161", "nodeyear": 2020, "ref-by-count": 2, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1127630356", "attributes": {"title": "Predicting Imperfect Echo Dynamics in Many-Body Quantum Systems", "doi": "10.1515/zna-2019-0383", "nodeyear": 2020, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1127650081", "attributes": {"title": "Coherent Transport in Periodically Driven Mesoscopic Conductors: From Scattering Amplitudes to Quantum Thermodynamics", "doi": "10.1515/zna-2020-0056", "nodeyear": 2020, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1127130950", "attributes": {"title": "Quantum Many-Body Scars in Optical Lattices", "doi": "10.1103/physrevlett.124.160604", "nodeyear": 2020, "ref-by-count": 36, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1126727524", "attributes": {"title": "Many-Body Dynamical Localization in a Kicked Lieb-Liniger Gas", "doi": "10.1103/physrevlett.124.155302", "nodeyear": 2020, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1126480743", "attributes": {"title": "Periodic thermodynamics of a two spin Rabi model", "doi": "10.1088/1742-5468/ab7812", "nodeyear": 2020, "ref-by-count": 4, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1126271157", "attributes": {"title": "Does Scrambling Equal Chaos?", "doi": "10.1103/physrevlett.124.140602", "nodeyear": 2020, "ref-by-count": 41, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1126269333", "attributes": {"title": "Periodically driven harmonic Langevin systems", "doi": "10.1103/physreve.101.042106", "nodeyear": 2020, "ref-by-count": 1, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1126263310", "attributes": {"title": "Classical and Quantum Signatures of Quantum Phase Transitions in a (Pseudo) Relativistic Many-Body System", "doi": "10.3390/condmat5020026", "nodeyear": 2020, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1127947148", "attributes": {"title": "Floquet Prethermalization in a Bose-Hubbard System", "doi": "10.1103/physrevx.10.021044", "nodeyear": 2020, "ref-by-count": 47, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1127515489", "attributes": {"title": "Long-Lived Interacting Phases of Matter Protected by Multiple Time-Translation Symmetries in Quasiperiodically Driven Systems", "doi": "10.1103/physrevx.10.021032", "nodeyear": 2020, "ref-by-count": 28, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1126759415", "attributes": {"title": "Realization of a stroboscopic optical lattice for cold atoms with subwavelength spacing", "doi": "10.1103/physreva.101.041603", "nodeyear": 2020, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1126173583", "attributes": {"title": "Scaling of Loschmidt echo in a boundary-driven critical Z3 Potts model", "doi": "10.1103/physrevb.101.144302", "nodeyear": 2020, "ref-by-count": 1, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1126057889", "attributes": {"title": "Enhancement of local pairing correlations in periodically driven Mott insulators", "doi": "10.1103/physrevb.101.161101", "nodeyear": 2020, "ref-by-count": 22, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1123928512", "attributes": {"title": "The war on liquids: Disintegration and reaction by enhanced pulsed blasting", "doi": "10.1016/j.ces.2019.115458", "nodeyear": 2020, "ref-by-count": 3, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1125920858", "attributes": {"title": "Non-equilibrium Dynamical Mean-Field Theory", "doi": "10.1007/978-3-319-44677-6_1", "nodeyear": 2020, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1125550793", "attributes": {"title": "Coherent electrical control of a single high-spin nucleus in silicon", "doi": "10.1038/s41586-020-2057-7", "nodeyear": 2020, "ref-by-count": 39, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1126915081", "attributes": {"title": "Floquet engineering of 2D materials", "doi": "10.1088/1742-6596/1461/1/012064", "nodeyear": 2020, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1126909693", "attributes": {"title": "Electron-photonic topological states on the surface of a bulk semiconductor driven by a high-frequency field", "doi": "10.1088/1742-6596/1461/1/012063", "nodeyear": 2020, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1125953276", "attributes": {"title": "Tailoring metal-insulator transitions and band topology via off-resonant periodic drive in an interacting triangular lattice", "doi": "10.1103/physrevb.101.115428", "nodeyear": 2020, "ref-by-count": 3, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1125497800", "attributes": {"title": "Controllable finite-momenta dynamical quasicondensation in the periodically driven one-dimensional Fermi-Hubbard model", "doi": "10.1103/physreva.101.033604", "nodeyear": 2020, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1125326068", "attributes": {"title": "Is there a Floquet Lindbladian?", "doi": "10.1103/physrevb.101.100301", "nodeyear": 2020, "ref-by-count": 17, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1125325450", "attributes": {"title": "Optimal frequency window for Floquet engineering in optical lattices", "doi": "10.1103/physrevresearch.2.013241", "nodeyear": 2020, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1125160480", "attributes": {"title": "Dimensional Crossover of the Integer Quantum Hall Plateau Transition and Disordered Topological Pumping", "doi": "10.1103/physrevlett.124.086602", "nodeyear": 2020, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1125157056", "attributes": {"title": "Entanglement in coupled kicked tops with chaotic dynamics", "doi": "10.1103/physreve.101.022221", "nodeyear": 2020, "ref-by-count": 7, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1124776377", "attributes": {"title": "Optimized three-level quantum transfers based on frequency-modulated optical excitations", "doi": "10.1038/s41598-020-59046-8", "nodeyear": 2020, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1125164136", "attributes": {"title": "Floquet-engineering of nodal rings and nodal spheres and their characterization using the quantum metric", "doi": "10.1103/physrevresearch.2.013224", "nodeyear": 2020, "ref-by-count": 9, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1125161664", "attributes": {"title": "Tunable strong photo-mixing in Weyl semimetals", "doi": "10.1103/physrevb.101.085307", "nodeyear": 2020, "ref-by-count": 7, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1125153368", "attributes": {"title": "Improved Lieb-Robinson bound for many-body Hamiltonians with power-law interactions", "doi": "10.1103/physreva.101.022333", "nodeyear": 2020, "ref-by-count": 18, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1121624158", "attributes": {"title": "The transition from double to single quantum dot induced by THz laser field", "doi": "10.1016/j.physe.2019.113758", "nodeyear": 2020, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1124462573", "attributes": {"title": "Observation of Dynamical Quantum Phase Transitions with Correspondence in an Excited State Phase Diagram", "doi": "10.1103/physrevlett.124.043001", "nodeyear": 2020, "ref-by-count": 40, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1124409613", "attributes": {"title": "Thermodynamic Geometry of Microscopic Heat Engines", "doi": "10.1103/physrevlett.124.040602", "nodeyear": 2020, "ref-by-count": 37, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1123624596", "attributes": {"title": "Stability of topologically protected edge states in nonlinear quantum walks: additional bifurcations unique to Floquet systems", "doi": "10.1088/1751-8121/ab6514", "nodeyear": 2020, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1124230276", "attributes": {"title": "An algebraic alternative for the accurate simulation of CO2 Raman spectra", "doi": "10.1002/jrs.5801", "nodeyear": 2020, "ref-by-count": 9, "is_input_DOI": false, "category_for": "03:1.00", "level": "cite_l2"}}, {"id": "pub.1124230253", "attributes": {"title": "Positive quantum Lyapunov exponents in experimental systems with a regular classical limit", "doi": "10.1103/physreve.101.010202", "nodeyear": 2020, "ref-by-count": 47, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1124254326", "attributes": {"title": "Dynamical Detection of Level Repulsion in the One-Particle Aubry-André Model", "doi": "10.3390/condmat5010007", "nodeyear": 2020, "ref-by-count": 4, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1124048582", "attributes": {"title": "Quantum Pairing Time Orders", "doi": "10.1002/andp.201900529", "nodeyear": 2020, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1125053995", "attributes": {"title": "Long-Range Prethermal Phases of Nonequilibrium Matter", "doi": "10.1103/physrevx.10.011043", "nodeyear": 2020, "ref-by-count": 37, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1124831533", "attributes": {"title": "Parametric Instabilities of Interacting Bosons in Periodically Driven 1D Optical Lattices", "doi": "10.1103/physrevx.10.011030", "nodeyear": 2020, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1124103171", "attributes": {"title": "Driving-assisted open quantum transport in qubit networks", "doi": "10.1103/physreva.101.012113", "nodeyear": 2020, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1123986522", "attributes": {"title": "Effective Floquet Hamiltonian in the low-frequency regime", "doi": "10.1103/physrevb.101.024303", "nodeyear": 2020, "ref-by-count": 22, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1123351695", "attributes": {"title": "Creutz ladder in a resonantly shaken 1D optical lattice", "doi": "10.1088/1367-2630/ab61d7", "nodeyear": 2020, "ref-by-count": 28, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1123673879", "attributes": {"title": "Divergence of the Floquet-Magnus expansion in a periodically driven one-body system with energy localization", "doi": "10.1103/physreve.100.062138", "nodeyear": 2019, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1123430435", "attributes": {"title": "Is the Trotterized UCCSD Ansatz Chemically Well-Defined?", "doi": "10.1021/acs.jctc.9b01083", "nodeyear": 2019, "ref-by-count": 35, "is_input_DOI": false, "category_for": "08:0.33;03:0.33;06:0.33", "level": "cite_l2"}}, {"id": "pub.1123097339", "attributes": {"title": "Topology and Broken Symmetry in Floquet Systems", "doi": "10.1146/annurev-conmatphys-031218-013721", "nodeyear": 2019, "ref-by-count": 53, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1123643952", "attributes": {"title": "Exponentially slow heating in short and long-range interacting Floquet systems", "doi": "10.1103/physrevresearch.1.033202", "nodeyear": 2019, "ref-by-count": 28, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1123446111", "attributes": {"title": "Emergence of singularities from decoherence: Quantum catastrophes", "doi": "10.1103/physreva.100.063628", "nodeyear": 2019, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1123268268", "attributes": {"title": "Polaron-transformed dissipative Lipkin-Meshkov-Glick model", "doi": "10.1103/physreva.100.063815", "nodeyear": 2019, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1123262658", "attributes": {"title": "Probing an excited-state quantum phase transition in a quantum many-body system via an out-of-time-order correlator", "doi": "10.1103/physreva.100.062113", "nodeyear": 2019, "ref-by-count": 19, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1123187479", "attributes": {"title": "Non-Abelian geometric potentials and spin-orbit coupling for periodically driven systems", "doi": "10.1103/physreva.100.063616", "nodeyear": 2019, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1122945773", "attributes": {"title": "Simulating quantum many-body dynamics on a current digital quantum computer", "doi": "10.1038/s41534-019-0217-0", "nodeyear": 2019, "ref-by-count": 67, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1122948207", "attributes": {"title": "Nonlocal random walk over Floquet states of a dissipative nonlinear oscillator", "doi": "10.1103/physreve.100.052148", "nodeyear": 2019, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1122908545", "attributes": {"title": "Floquet-state cooling", "doi": "10.1038/s41598-019-53877-w", "nodeyear": 2019, "ref-by-count": 6, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1122419408", "attributes": {"title": "Quantum Simulation Meets Nonequilibrium Dynamical Mean-Field Theory: Exploring the Periodically Driven, Strongly Correlated Fermi-Hubbard Model", "doi": "10.1103/physrevlett.123.193602", "nodeyear": 2019, "ref-by-count": 15, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "cite_l2"}}, {"id": "pub.1122364137", "attributes": {"title": "Locality and heating in periodically driven, power-law-interacting systems", "doi": "10.1103/physreva.100.052103", "nodeyear": 2019, "ref-by-count": 17, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1122299651", "attributes": {"title": "Hybrid Dispersion Dirac Semimetal and Hybrid Weyl Phases in Luttinger Semimetals: A Dynamical Approach", "doi": "10.1002/andp.201900336", "nodeyear": 2019, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1122298943", "attributes": {"title": "Light-induced anomalous Hall effect in graphene", "doi": "10.1038/s41567-019-0698-y", "nodeyear": 2019, "ref-by-count": 245, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1122260988", "attributes": {"title": "Revealing Correlations Between a System and an Inaccessible Environment", "doi": "10.1007/978-3-030-31146-9_5", "nodeyear": 2019, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1122960341", "attributes": {"title": "Quantum caustics and the hierarchy of light cones in quenched spin chains", "doi": "10.1103/physrevresearch.1.033135", "nodeyear": 2019, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1122929220", "attributes": {"title": "Floquet spinor Bose gases", "doi": "10.1103/physrevresearch.1.033132", "nodeyear": 2019, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1122682309", "attributes": {"title": "Floquet engineering of topological phases protected by emergent symmetries under resonant drives", "doi": "10.1103/physreva.100.052109", "nodeyear": 2019, "ref-by-count": 0, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1122560614", "attributes": {"title": "Engineered nearest-neighbor interactions with doubly modulated optical lattices", "doi": "10.1103/physreva.100.053610", "nodeyear": 2019, "ref-by-count": 9, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1122263731", "attributes": {"title": "Floquet second-order topological superconductor driven via ferromagnetic resonance", "doi": "10.1103/physrevresearch.1.032013", "nodeyear": 2019, "ref-by-count": 31, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1122003630", "attributes": {"title": "Floquet engineering of optical lattices with spatial features and periodicity below the diffraction limit", "doi": "10.1088/1367-2630/ab500f", "nodeyear": 2019, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1122258473", "attributes": {"title": "Complex absorbing potentials for stark resonances", "doi": "10.1002/qua.26067", "nodeyear": 2019, "ref-by-count": 2, "is_input_DOI": false, "category_for": "03:1.00", "level": "cite_l2"}}, {"id": "pub.1122233280", "attributes": {"title": "Periodic thermodynamics of the Rabi model with circular polarization for arbitrary spin quantum numbers", "doi": "10.1103/physreve.100.042141", "nodeyear": 2019, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1122016549", "attributes": {"title": "Integrable Many-Body Quantum Floquet-Thouless Pumps", "doi": "10.1103/physrevlett.123.170603", "nodeyear": 2019, "ref-by-count": 27, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1121972957", "attributes": {"title": "Collective performance of a finite-time quantum Otto cycle", "doi": "10.1103/physreve.100.042126", "nodeyear": 2019, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1121864026", "attributes": {"title": "System susceptibility and bound-states in structured reservoirs.", "doi": "10.1364/oe.27.031504", "nodeyear": 2019, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1121860390", "attributes": {"title": "Beyond Chu’s Limit with Floquet Impedance Matching", "doi": "10.1103/physrevlett.123.164102", "nodeyear": 2019, "ref-by-count": 26, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1121829677", "attributes": {"title": "Superradiance in finite quantum systems randomly coupled to continuum", "doi": "10.1103/physreve.100.042119", "nodeyear": 2019, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1120967654", "attributes": {"title": "Transport signatures of symmetry protection in 1D Floquet topological insulators", "doi": "10.1088/1361-648x/ab4319", "nodeyear": 2019, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:0.33;09:0.33;10:0.33", "level": "cite_l2"}}, {"id": "pub.1121574121", "attributes": {"title": "Calculation of Transition State Energies in the HCN–HNC Isomerization with an Algebraic Model", "doi": "10.1021/acs.jpca.9b07338", "nodeyear": 2019, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1121497945", "attributes": {"title": "Behavior of Floquet Topological Quantum States in Optically Driven Semiconductors", "doi": "10.3390/sym11101246", "nodeyear": 2019, "ref-by-count": 17, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1122147311", "attributes": {"title": "Dynamical quantum phase transitions in extended toric-code models", "doi": "10.1103/physrevb.100.144203", "nodeyear": 2019, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1121992405", "attributes": {"title": "Optical control of the current-voltage relation in stacked superconductors", "doi": "10.1103/physrevb.100.134510", "nodeyear": 2019, "ref-by-count": 0, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1121860362", "attributes": {"title": "Floquet-engineered light-cone spreading of correlations in a driven quantum chain", "doi": "10.1103/physrevb.100.165125", "nodeyear": 2019, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1121691603", "attributes": {"title": "Ultrastrong-coupling circuit QED in the radio-frequency regime", "doi": "10.1103/physreva.100.043815", "nodeyear": 2019, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1121454130", "attributes": {"title": "Floquet time spirals and stable discrete-time quasicrystals in quasiperiodically driven quantum many-body systems", "doi": "10.1103/physrevb.100.134302", "nodeyear": 2019, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1121432950", "attributes": {"title": "Quantized Hall Conductance of a Single Atomic Wire: A Proposal Based on Synthetic Dimensions", "doi": "10.1103/physrevx.9.041001", "nodeyear": 2019, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1121151157", "attributes": {"title": "Discontinuities in Driven Spin-Boson Systems due to Coherent Destruction of Tunneling: Breakdown of the Floquet-Gibbs Distribution", "doi": "10.1103/physrevlett.123.120602", "nodeyear": 2019, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1121123255", "attributes": {"title": "Digital quantum simulation, Trotter errors, and quantum chaos of the kicked top", "doi": "10.1038/s41534-019-0192-5", "nodeyear": 2019, "ref-by-count": 32, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1121045652", "attributes": {"title": "Evolution of Floquet topological quantum states in driven semiconductors", "doi": "10.1140/epjb/e2019-100087-0", "nodeyear": 2019, "ref-by-count": 19, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1121046991", "attributes": {"title": "Simulation of 1D Topological Phases in Driven Quantum Dot Arrays", "doi": "10.1103/physrevlett.123.126401", "nodeyear": 2019, "ref-by-count": 18, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1121007947", "attributes": {"title": "Floquet approach to ℤ2 lattice gauge theories with ultracold atoms in optical lattices", "doi": "10.1038/s41567-019-0649-7", "nodeyear": 2019, "ref-by-count": 115, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1120955481", "attributes": {"title": "Phases Transitions in a Cross-Cavity Quantum Rabi Model Possessing PT Symmetric Structure", "doi": "10.3389/fphy.2019.00127", "nodeyear": 2019, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1120846795", "attributes": {"title": "Van Hove singularities and excited-state quantum phase transitions in graphene-like microwave billiards", "doi": "10.1063/1.5124611", "nodeyear": 2019, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1120846794", "attributes": {"title": "Excited-state quantum phase transitions in bosonic lattice systems", "doi": "10.1063/1.5124610", "nodeyear": 2019, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1120846792", "attributes": {"title": "Two-particle transfer intensities in excited-state quantum phase transition", "doi": "10.1063/1.5124608", "nodeyear": 2019, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1120846778", "attributes": {"title": "Excited-state quantum phase transitions in systems with many interacting spins-1/2", "doi": "10.1063/1.5124594", "nodeyear": 2019, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1120846773", "attributes": {"title": "Static vs. dynamic phases of quantum many-body systems", "doi": "10.1063/1.5124589", "nodeyear": 2019, "ref-by-count": 3, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1120795450", "attributes": {"title": "Entanglement and excited-state quantum phase transition in an extended Dicke model", "doi": "10.1007/s11467-019-0921-4", "nodeyear": 2019, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1121403245", "attributes": {"title": "Prethermal quantum many-body Kapitza phases of periodically driven spin systems", "doi": "10.1103/physrevb.100.104306", "nodeyear": 2019, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1121334827", "attributes": {"title": "Topological Floquet engineering of twisted bilayer graphene", "doi": "10.1103/physrevresearch.1.023031", "nodeyear": 2019, "ref-by-count": 26, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1121155174", "attributes": {"title": "The antiferromagnetic phase of the Floquet-driven Hubbard model", "doi": "10.1103/physrevb.100.121110", "nodeyear": 2019, "ref-by-count": 14, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1120975898", "attributes": {"title": "Stroboscopic painting of optical potentials for atoms with subwavelength resolution", "doi": "10.1103/physreva.100.033610", "nodeyear": 2019, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1120721646", "attributes": {"title": "Floquet-Engineering Counterdiabatic Protocols in Quantum Many-Body Systems", "doi": "10.1103/physrevlett.123.090602", "nodeyear": 2019, "ref-by-count": 56, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1120701000", "attributes": {"title": "Level repulsion and dynamics in the finite one-dimensional Anderson model", "doi": "10.1103/physreve.100.022142", "nodeyear": 2019, "ref-by-count": 10, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1120398331", "attributes": {"title": "Realization of density-dependent Peierls phases to engineer quantized gauge fields coupled to ultracold matter", "doi": "10.1038/s41567-019-0615-4", "nodeyear": 2019, "ref-by-count": 102, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1120211774", "attributes": {"title": "QuSpin: a Python package for dynamics and exact diagonalisation of quantum many body systems. Part II: bosons, fermions and higher spins", "doi": "10.21468/scipostphys.7.2.020", "nodeyear": 2019, "ref-by-count": 68, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1120342145", "attributes": {"title": "Excited-state quantum phase transition and the quantum-speed-limit time", "doi": "10.1103/physreva.100.022118", "nodeyear": 2019, "ref-by-count": 15, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1120310683", "attributes": {"title": "Nonequilibrium susceptibility in photoinduced Floquet states", "doi": "10.1103/physrevb.100.075127", "nodeyear": 2019, "ref-by-count": 4, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1120248299", "attributes": {"title": "Quasiparticles of a periodically driven quantum dot coupled between superconducting and normal leads", "doi": "10.1103/physrevb.100.085414", "nodeyear": 2019, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1120211967", "attributes": {"title": "Light-induced d-wave superconductivity through Floquet-engineered Fermi surfaces in cuprates", "doi": "10.1103/physrevb.100.075115", "nodeyear": 2019, "ref-by-count": 12, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1120144828", "attributes": {"title": "Dispersion-suppressed topological Thouless pumping", "doi": "10.1103/physrevb.100.064302", "nodeyear": 2019, "ref-by-count": 8, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1129971658", "attributes": {"title": "QuSpin: a Python Package for Dynamics and Exact Diagonalisation of Quantum Many Body Systems. Part II: bosons, fermions and higher spins", "doi": "10.21468/scipost.report.1085", "nodeyear": 2019, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1120021739", "attributes": {"title": "Dynamical signatures of quantum chaos and relaxation time scales in a spin-boson system", "doi": "10.1103/physreve.100.012218", "nodeyear": 2019, "ref-by-count": 16, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1120025014", "attributes": {"title": "Relaxation to Gaussian and generalized Gibbs states in systems of particles with quadratic Hamiltonians", "doi": "10.1103/physreve.100.012146", "nodeyear": 2019, "ref-by-count": 8, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1122873965", "attributes": {"title": "Can Naturally Pulsating Prefilming Slurry Atomization Be Enhanced by Artificial External Modulation?", "doi": "10.1115/ajkfluids2019-4882", "nodeyear": 2019, "ref-by-count": 0, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1129960633", "attributes": {"title": "QuSpin: a Python Package for Dynamics and Exact Diagonalisation of Quantum Many Body Systems. Part II: bosons, fermions and higher spins", "doi": "10.21468/scipost.report.1065", "nodeyear": 2019, "ref-by-count": 0, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1118043792", "attributes": {"title": "How to Dress Radio-Frequency Photons with Tunable Momentum", "doi": "10.1103/physrevlett.123.033203", "nodeyear": 2019, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1120033159", "attributes": {"title": "Rabi-resonant behavior of periodically driven correlated fermion systems", "doi": "10.1103/physrevb.100.041116", "nodeyear": 2019, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1119959099", "attributes": {"title": "Nonlinear optical response of the α-T3 model due to the nontrivial topology of the band dispersion", "doi": "10.1103/physrevb.100.035440", "nodeyear": 2019, "ref-by-count": 18, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1119952776", "attributes": {"title": "Analog of Hamilton-Jacobi theory for the time-evolution operator", "doi": "10.1103/physreva.100.012132", "nodeyear": 2019, "ref-by-count": 7, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1119919209", "attributes": {"title": "Floquet-engineered quantum state manipulation in a noisy qubit", "doi": "10.1103/physreva.100.012341", "nodeyear": 2019, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1119787578", "attributes": {"title": "Non-Abelian geometric phases in periodically driven systems", "doi": "10.1103/physreva.100.012127", "nodeyear": 2019, "ref-by-count": 7, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1119784980", "attributes": {"title": "Swift heat transfer by fast-forward driving in open quantum systems", "doi": "10.1103/physreva.100.012126", "nodeyear": 2019, "ref-by-count": 22, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1118069090", "attributes": {"title": "Laser control of magnonic topological phases in antiferromagnets", "doi": "10.1103/physrevb.100.014421", "nodeyear": 2019, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1118014967", "attributes": {"title": "High-frequency expansion for Floquet prethermal phases with emergent symmetries: Application to time crystals and Floquet engineering", "doi": "10.1103/physrevb.100.020301", "nodeyear": 2019, "ref-by-count": 6, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1118012672", "attributes": {"title": "Dynamical chaotic phases and constrained quantum dynamics", "doi": "10.1103/physreva.100.012117", "nodeyear": 2019, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1117972269", "attributes": {"title": "Strong frequency dependence of transport in the driven disordered central-site model", "doi": "10.1103/physrevb.100.014201", "nodeyear": 2019, "ref-by-count": 0, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1117943417", "attributes": {"title": "Electron pumping in the strong coupling and non-Markovian regime: A reaction coordinate mapping approach", "doi": "10.1103/physrevb.100.035109", "nodeyear": 2019, "ref-by-count": 9, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1117728688", "attributes": {"title": "Topologically protected braiding in a single wire using Floquet Majorana modes", "doi": "10.1103/physrevb.100.041102", "nodeyear": 2019, "ref-by-count": 19, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1116648359", "attributes": {"title": "Accessing electromagnetic properties of matter with cylindrical vector beams", "doi": "10.1088/1367-2630/ab26d1", "nodeyear": 2019, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1113330752", "attributes": {"title": "Photo-induced Floquet Weyl magnons in noncollinear antiferromagnets", "doi": "10.1016/j.aop.2019.04.003", "nodeyear": 2019, "ref-by-count": 0, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1113236708", "attributes": {"title": "Extreme matter in electromagnetic fields and rotation", "doi": "10.1016/j.ppnp.2019.04.001", "nodeyear": 2019, "ref-by-count": 26, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1112366493", "attributes": {"title": "State-dependent act-and-wait time-delayed feedback control algorithm", "doi": "10.1016/j.cnsns.2019.02.018", "nodeyear": 2019, "ref-by-count": 8, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1117476838", "attributes": {"title": "Exact Evaluation of Statistical Moments in Superradiant Emission", "doi": "10.3390/mca24020066", "nodeyear": 2019, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1117346459", "attributes": {"title": "Many-Body Localization in the Presence of a Central Qudit", "doi": "10.1103/physrevlett.122.240402", "nodeyear": 2019, "ref-by-count": 5, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "cite_l2"}}, {"id": "pub.1117411673", "attributes": {"title": "Excited-state quantum phase transitions in systems with two degrees of freedom. III. Interacting boson systems", "doi": "10.1103/physrevc.99.064323", "nodeyear": 2019, "ref-by-count": 16, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1117307345", "attributes": {"title": "Layered chaos in mean-field and quantum many-body dynamics", "doi": "10.1103/physreva.99.063609", "nodeyear": 2019, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1117164490", "attributes": {"title": "Electron pairing in nanostructures driven by an oscillating field", "doi": "10.1103/physrevb.99.235416", "nodeyear": 2019, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1117020737", "attributes": {"title": "Microscopic theory for the light-induced anomalous Hall effect in graphene", "doi": "10.1103/physrevb.99.214302", "nodeyear": 2019, "ref-by-count": 71, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1116850435", "attributes": {"title": "Topology and localization of a periodically driven Kitaev model", "doi": "10.1103/physrevb.99.235408", "nodeyear": 2019, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1116136000", "attributes": {"title": "Single-scan acquisition of multiple multidimensional spectra", "doi": "10.1364/optica.6.000735", "nodeyear": 2019, "ref-by-count": 7, "is_input_DOI": false, "category_for": "09:0.33;10:0.33;02:0.33", "level": "cite_l2"}}, {"id": "pub.1115676205", "attributes": {"title": "Gravitational wave driving of a gapped holographic system", "doi": "10.1007/jhep05(2019)161", "nodeyear": 2019, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1115666769", "attributes": {"title": "Observation of scalable and deterministic multi-atom Dicke states in an atomic vapor", "doi": "10.1364/ol.44.002795", "nodeyear": 2019, "ref-by-count": 18, "is_input_DOI": false, "category_for": "02:0.60;09:0.40", "level": "cite_l2"}}, {"id": "pub.1114819653", "attributes": {"title": "Method for Finding the Exact Effective Hamiltonian of Time‐Driven Quantum Systems", "doi": "10.1002/andp.201900035", "nodeyear": 2019, "ref-by-count": 8, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1114044946", "attributes": {"title": "Magnonic Floquet Quantum Spin Hall Insulator in Bilayer Collinear Antiferromagnets", "doi": "10.1038/s41598-019-43702-9", "nodeyear": 2019, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1113910487", "attributes": {"title": "Observation of Anomalous π Modes in Photonic Floquet Engineering", "doi": "10.1103/physrevlett.122.173901", "nodeyear": 2019, "ref-by-count": 50, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1113910476", "attributes": {"title": "Quantum Spin Dynamics in Fock Space Following Quenches: Caustics and Vortices", "doi": "10.1103/physrevlett.122.170402", "nodeyear": 2019, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1114054109", "attributes": {"title": "Anatomy of skin modes and topology in non-Hermitian systems", "doi": "10.1103/physrevb.99.201103", "nodeyear": 2019, "ref-by-count": 253, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1114042284", "attributes": {"title": "Floquet spin and spin-orbital Hamiltonians and doublon-holon generations in periodically driven Mott insulators", "doi": "10.1103/physrevb.99.205111", "nodeyear": 2019, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1110902421", "attributes": {"title": "Tunneling of two interacting atoms from excited states", "doi": "10.1016/j.physe.2018.12.026", "nodeyear": 2019, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1113484172", "attributes": {"title": "Measuring topology from dynamics by obtaining the Chern number from a linking number", "doi": "10.1038/s41467-019-09668-y", "nodeyear": 2019, "ref-by-count": 93, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1113409952", "attributes": {"title": "Quantum localization bounds Trotter errors in digital quantum simulation", "doi": "10.1126/sciadv.aau8342", "nodeyear": 2019, "ref-by-count": 37, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1112781951", "attributes": {"title": "Emergence of photo-induced multiple topological phases on square-octagon lattice", "doi": "10.1088/1361-648x/ab1026", "nodeyear": 2019, "ref-by-count": 6, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1110424594", "attributes": {"title": "Cavity-QED interactions of several atoms", "doi": "10.1088/1361-6455/aaf6d7", "nodeyear": 2019, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1115224353", "attributes": {"title": "Flow Equation Approach to Periodically Driven Quantum Systems", "doi": "10.1103/physrevx.9.021037", "nodeyear": 2019, "ref-by-count": 42, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1114045023", "attributes": {"title": "Prethermalization and Thermalization in Isolated Quantum Systems", "doi": "10.1103/physrevx.9.021027", "nodeyear": 2019, "ref-by-count": 69, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1113678661", "attributes": {"title": "Effect of noise on Bloch oscillations and Wannier-Stark localization", "doi": "10.1103/physrevb.99.155149", "nodeyear": 2019, "ref-by-count": 6, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1113626564", "attributes": {"title": "Quantum phase transitions triggered by a four-level atomic system in dissipative environments", "doi": "10.1103/physreva.99.043829", "nodeyear": 2019, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1113308230", "attributes": {"title": "Accelerating adiabatic protocols for entangling two qubits in circuit QED", "doi": "10.1103/physreva.99.042315", "nodeyear": 2019, "ref-by-count": 11, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1116854479", "attributes": {"title": "Exponential Bound for the Heating Rate of Periodically Driven Spin Systems", "doi": "10.1134/s1063776119030130", "nodeyear": 2019, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1111062357", "attributes": {"title": "Multipartite-entanglement tomography of a quantum simulator", "doi": "10.1088/1367-2630/aafb8c", "nodeyear": 2019, "ref-by-count": 17, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1112264021", "attributes": {"title": "Manipulating Cooper pairs with a controllable momentum in periodically driven degenerate Fermi gases", "doi": "10.1088/1361-6455/ab08df", "nodeyear": 2019, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1112736421", "attributes": {"title": "Parametric Heating in a 2D Periodically Driven Bosonic System: Beyond the Weakly Interacting Regime", "doi": "10.1103/physrevx.9.011047", "nodeyear": 2019, "ref-by-count": 25, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1112555157", "attributes": {"title": "Optical control of competing exchange interactions and coherent spin-charge coupling in two-orbital Mott insulators", "doi": "10.21468/scipostphys.6.3.027", "nodeyear": 2019, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1112989773", "attributes": {"title": "Topological frequency conversion in a driven dissipative quantum cavity", "doi": "10.1103/physrevb.99.094311", "nodeyear": 2019, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1112941993", "attributes": {"title": "Photonic Floquet topological insulators with fluctuations and disorders", "doi": "10.1103/physreva.99.033844", "nodeyear": 2019, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1112857110", "attributes": {"title": "Work exchange, geometric magnetization, and fluctuation-dissipation relations in a quantum dot under adiabatic magnetoelectric driving", "doi": "10.1103/physrevb.99.115424", "nodeyear": 2019, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1112687817", "attributes": {"title": "Optically induced topological states on the surface of mercury telluride", "doi": "10.1103/physrevb.99.115411", "nodeyear": 2019, "ref-by-count": 11, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1112472200", "attributes": {"title": "Quantum simulation of multiphoton and nonlinear dissipative spin-boson models", "doi": "10.1103/physreva.99.032303", "nodeyear": 2019, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1112465992", "attributes": {"title": "Topological classification of quasiperiodically driven quantum systems", "doi": "10.1103/physrevb.99.064306", "nodeyear": 2019, "ref-by-count": 22, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1112265114", "attributes": {"title": "Control of quantum dynamics of electron transfer in molecular loop structures: Spontaneous breaking of chiral symmetry under strong decoherence", "doi": "10.1103/physrevb.99.064301", "nodeyear": 2019, "ref-by-count": 9, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1112062976", "attributes": {"title": "Engineering Dirac states in graphene: Coexisting type-I and type-II Floquet-Dirac fermions", "doi": "10.1103/physrevb.99.075121", "nodeyear": 2019, "ref-by-count": 9, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1111443711", "attributes": {"title": "Integrable spin-${frac{1}{2}}$ Richardson–Gaudin XYZ models in an arbitrary magnetic field", "doi": "10.1088/1751-8121/aafe9b", "nodeyear": 2019, "ref-by-count": 11, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1111540938", "attributes": {"title": "Reducibility for a fast-driven linear Klein–Gordon equation", "doi": "10.1007/s10231-019-00823-2", "nodeyear": 2019, "ref-by-count": 6, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1111440115", "attributes": {"title": "Quantum and Classical Lyapunov Exponents in Atom-Field Interaction Systems", "doi": "10.1103/physrevlett.122.024101", "nodeyear": 2019, "ref-by-count": 80, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1111323071", "attributes": {"title": "Asymptotic Prethermalization in Periodically Driven Classical Spin Chains", "doi": "10.1103/physrevlett.122.010602", "nodeyear": 2019, "ref-by-count": 35, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1110719005", "attributes": {"title": "Reversible to irreversible transitions in periodically driven skyrmion systems", "doi": "10.1088/1367-2630/aaf8dd", "nodeyear": 2019, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1112988887", "attributes": {"title": "Topological photonics", "doi": "10.1103/revmodphys.91.015006", "nodeyear": 2019, "ref-by-count": 1179, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1111668834", "attributes": {"title": "Fibonacci steady states in a driven integrable quantum system", "doi": "10.1103/physrevb.99.020306", "nodeyear": 2019, "ref-by-count": 9, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1111666460", "attributes": {"title": "Optimization of quantized charge pumping using full counting statistics", "doi": "10.1103/physrevb.99.035437", "nodeyear": 2019, "ref-by-count": 8, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1111515569", "attributes": {"title": "Floquet engineering in superconducting circuits: From arbitrary spin-spin interactions to the Kitaev honeycomb model", "doi": "10.1103/physreva.99.012333", "nodeyear": 2019, "ref-by-count": 17, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1111459176", "attributes": {"title": "Impact of nonequilibrium fluctuations on prethermal dynamical phase transitions in long-range interacting spin chains", "doi": "10.1103/physrevb.99.045128", "nodeyear": 2019, "ref-by-count": 35, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1111314608", "attributes": {"title": "Engineering bilinear mode coupling in circuit QED: Theory and experiment", "doi": "10.1103/physreva.99.012314", "nodeyear": 2019, "ref-by-count": 15, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1111062951", "attributes": {"title": "Edge and bulk localization of Floquet topological superconductors", "doi": "10.1103/physrevb.99.014301", "nodeyear": 2019, "ref-by-count": 12, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1110909831", "attributes": {"title": "Communication: Gibbs phenomenon and the emergence of the steady-state in quantum transport", "doi": "10.1063/1.5061759", "nodeyear": 2018, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1110787100", "attributes": {"title": "Bloch oscillation of Weyl metal along synthetic dimensions", "doi": "10.1088/1674-1056/27/12/126701", "nodeyear": 2018, "ref-by-count": 0, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "cite_l2"}}, {"id": "pub.1110647887", "attributes": {"title": "Floquet Engineering of Quantum Materials", "doi": "10.1146/annurev-conmatphys-031218-013423", "nodeyear": 2018, "ref-by-count": 240, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1110455993", "attributes": {"title": "Floquet Dynamics in Driven Fermi-Hubbard Systems", "doi": "10.1103/physrevlett.121.233603", "nodeyear": 2018, "ref-by-count": 51, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1110379274", "attributes": {"title": "Floquet Mechanism for Non-Abelian Fractional Quantum Hall States", "doi": "10.1103/physrevlett.121.237401", "nodeyear": 2018, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1110363972", "attributes": {"title": "Experimental Demonstration of Dynamical Input Isolation in Nonadiabatically Modulated Photonic Cavities", "doi": "10.1021/acsphotonics.8b01310", "nodeyear": 2018, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1110910541", "attributes": {"title": "Steady states of a quasiperiodically driven integrable system", "doi": "10.1103/physrevb.98.245144", "nodeyear": 2018, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1110910519", "attributes": {"title": "Transient Floquet engineering of superconductivity", "doi": "10.1103/physrevb.98.235149", "nodeyear": 2018, "ref-by-count": 15, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1110831877", "attributes": {"title": "Ergodic-localized junctions in periodically driven systems", "doi": "10.1103/physrevb.98.224307", "nodeyear": 2018, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1110708995", "attributes": {"title": "Reinforcement learning for autonomous preparation of Floquet-engineered states: Inverting the quantum Kapitza oscillator", "doi": "10.1103/physrevb.98.224305", "nodeyear": 2018, "ref-by-count": 37, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1110396032", "attributes": {"title": "Photocontrol of magnetic structure in an itinerant magnet", "doi": "10.1103/physrevb.98.214408", "nodeyear": 2018, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1110269247", "attributes": {"title": "Light-Induced Coherence in an Atom-Cavity System", "doi": "10.1103/physrevlett.121.220405", "nodeyear": 2018, "ref-by-count": 21, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1110275806", "attributes": {"title": "From Linear to Nonlinear Responses of Thermal Pure Quantum States", "doi": "10.1103/physrevlett.121.220601", "nodeyear": 2018, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1107970491", "attributes": {"title": "Relaxation, chaos, and thermalization in a three-mode model of a Bose–Einstein condensate", "doi": "10.1088/1367-2630/aaed68", "nodeyear": 2018, "ref-by-count": 22, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1110072642", "attributes": {"title": "Strong disorder RG approach – a short review of recent developments", "doi": "10.1140/epjb/e2018-90434-8", "nodeyear": 2018, "ref-by-count": 39, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1111914501", "attributes": {"title": "Effective Schrodinger equation for one-dimensional systems with rapidly oscillating boundary conditions", "doi": "10.1109/icumt.2018.8631204", "nodeyear": 2018, "ref-by-count": 1, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1110266071", "attributes": {"title": "Nonequilibrium selection of magnetic order in a driven triangular XY antiferromagnet", "doi": "10.1103/physrevb.98.184432", "nodeyear": 2018, "ref-by-count": 0, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1109811573", "attributes": {"title": "Strong-disorder renormalization group for periodically driven systems", "doi": "10.1103/physrevb.98.174203", "nodeyear": 2018, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1109804585", "attributes": {"title": "Adaptive rotating-wave approximation for driven open quantum systems", "doi": "10.1103/physreva.98.052111", "nodeyear": 2018, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1108054136", "attributes": {"title": "Quantization of the Hall conductivity in the Harper-Hofstadter model", "doi": "10.1103/physrevb.98.205112", "nodeyear": 2018, "ref-by-count": 3, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1108034986", "attributes": {"title": "Flat bands and dynamical localization of spin-orbit-coupled Bose-Einstein condensates", "doi": "10.1103/physreva.98.053606", "nodeyear": 2018, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1107871386", "attributes": {"title": "Berry Phases in Electronic Structure Theory", "doi": "10.1017/9781316662205", "nodeyear": 2018, "ref-by-count": 159, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1107130576", "attributes": {"title": "Analytical description of the survival probability of coherent states in regular regimes", "doi": "10.1088/1751-8121/aae2c3", "nodeyear": 2018, "ref-by-count": 15, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1107306817", "attributes": {"title": "Valley controlled spin-transfer torque in ferromagnetic graphene junctions", "doi": "10.1088/1367-2630/aae513", "nodeyear": 2018, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1107571622", "attributes": {"title": "Dynamical Control of Order in a Cavity-BEC System", "doi": "10.1103/physrevlett.121.153001", "nodeyear": 2018, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1107951663", "attributes": {"title": "Floquet analysis of a fractal-spectrum-generating periodically driven quantum system", "doi": "10.1103/physreve.98.042217", "nodeyear": 2018, "ref-by-count": 1, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1107651369", "attributes": {"title": "Interplay of Floquet Lifshitz transitions and topological transitions in bilayer Dirac materials", "doi": "10.1103/physrevb.98.165406", "nodeyear": 2018, "ref-by-count": 2, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1107651305", "attributes": {"title": "Detection of emitter-resonator coupling strength in the quantum Rabi model via an auxiliary resonator", "doi": "10.1103/physreva.98.043812", "nodeyear": 2018, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1107350062", "attributes": {"title": "Ab initio nonrelativistic quantum electrodynamics: Bridging quantum chemistry and quantum optics from weak to strong coupling", "doi": "10.1103/physreva.98.043801", "nodeyear": 2018, "ref-by-count": 65, "is_input_DOI": false, "category_for": "03:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1107301894", "attributes": {"title": "Floquet–Gibbs state in open quantum systems", "doi": "10.1140/epjst/e2018-00087-1", "nodeyear": 2018, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1107298680", "attributes": {"title": "Stabilization by dissipation and stochastic resonant activation in quantum metastable systems", "doi": "10.1140/epjst/e2018-00121-x", "nodeyear": 2018, "ref-by-count": 17, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1107235090", "attributes": {"title": "Connecting nth order generalised quantum Rabi models: Emergence of nonlinear spin-boson coupling via spin rotations", "doi": "10.1038/s41534-018-0096-9", "nodeyear": 2018, "ref-by-count": 26, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1106476468", "attributes": {"title": "Floquet perturbation theory: formalism and application to low-frequency limit", "doi": "10.1088/1367-2630/aade37", "nodeyear": 2018, "ref-by-count": 35, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1107130953", "attributes": {"title": "Stability of Periodically Driven Topological Phases against Disorder", "doi": "10.1103/physrevlett.121.126803", "nodeyear": 2018, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1103720457", "attributes": {"title": "Artificial gauge fields and topology with ultracold atoms in optical lattices", "doi": "10.1088/1361-6455/aac120", "nodeyear": 2018, "ref-by-count": 9, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1106352877", "attributes": {"title": "Floquet stroboscopic divisibility in non-Markovian dynamics", "doi": "10.1088/1367-2630/aadcbd", "nodeyear": 2018, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1106711291", "attributes": {"title": "From few- to many-body quantum systems", "doi": "10.1088/2058-9565/aad913", "nodeyear": 2018, "ref-by-count": 13, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1106608664", "attributes": {"title": "Floquet Engineering of Multiorbital Mott Insulators: Applications to Orthorhombic Titanates", "doi": "10.1103/physrevlett.121.107201", "nodeyear": 2018, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1107231743", "attributes": {"title": "Spin-dependent Andreev reflection in spin-orbit coupled systems by breaking time-reversal symmetry", "doi": "10.1103/physrevb.98.125424", "nodeyear": 2018, "ref-by-count": 1, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1106912640", "attributes": {"title": "Floquet prethermalization in periodically driven classical spin systems", "doi": "10.1103/physrevb.98.104303", "nodeyear": 2018, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1106809654", "attributes": {"title": "Charge density wave and charge pump of interacting fermions in circularly shaken hexagonal optical lattices", "doi": "10.1103/physreva.98.033601", "nodeyear": 2018, "ref-by-count": 10, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1106602075", "attributes": {"title": "Floquet scattering theory based on effective Hamiltonians of driven systems", "doi": "10.1103/physrevb.98.121101", "nodeyear": 2018, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1106159222", "attributes": {"title": "Artificial gauge fields in materials and engineered systems", "doi": "10.1016/j.crhy.2018.03.002", "nodeyear": 2018, "ref-by-count": 100, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1105306956", "attributes": {"title": "High fidelity Dicke-state generation with Lyapunov control in circuit QED system", "doi": "10.1016/j.aop.2018.07.005", "nodeyear": 2018, "ref-by-count": 4, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1104255664", "attributes": {"title": "Driven dissipative dynamics and topology of quantum impurity systems", "doi": "10.1016/j.crhy.2018.04.003", "nodeyear": 2018, "ref-by-count": 22, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1106352452", "attributes": {"title": "A microscopic Kapitza pendulum", "doi": "10.1038/s41598-018-31392-8", "nodeyear": 2018, "ref-by-count": 7, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1106412628", "attributes": {"title": "Floquet quantum criticality", "doi": "10.1073/pnas.1805796115", "nodeyear": 2018, "ref-by-count": 30, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1106276823", "attributes": {"title": "Spin Polarization through Floquet Resonances in a Driven Central Spin Model", "doi": "10.1103/physrevlett.121.080401", "nodeyear": 2018, "ref-by-count": 21, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1105481744", "attributes": {"title": "Wiseman–Milburn control for the Lipkin–Meshkov–Glick model", "doi": "10.1088/1751-8121/aad2c3", "nodeyear": 2018, "ref-by-count": 3, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1106081003", "attributes": {"title": "Asymptotic Floquet states of a periodically driven spin-boson system in the nonperturbative coupling regime", "doi": "10.1103/physreve.98.022111", "nodeyear": 2018, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1105993631", "attributes": {"title": "Exploring the possibilities of dynamical quantum phase transitions in the presence of a Markovian bath", "doi": "10.1038/s41598-018-30377-x", "nodeyear": 2018, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1107206378", "attributes": {"title": "Non-equilibrium Dynamical Mean-Field Theory", "doi": "10.1007/978-3-319-42913-7_1-1", "nodeyear": 2018, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1105647673", "attributes": {"title": "Strong light-field effects driven by nearly single-cycle 7 fs light-field in correlated organic conductors", "doi": "10.1088/1361-6455/aad40a", "nodeyear": 2018, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1106391022", "attributes": {"title": "Magnus expansion for a chirped quantum two-level system", "doi": "10.1103/physreva.98.023855", "nodeyear": 2018, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1106258757", "attributes": {"title": "Fate of current, residual energy, and entanglement entropy in aperiodic driving of one-dimensional Jordan-Wigner integrable models", "doi": "10.1103/physrevb.98.064305", "nodeyear": 2018, "ref-by-count": 8, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1105855817", "attributes": {"title": "From the Keldysh Formalism to Non-equilibrium Dynamical Mean-Field Theory", "doi": "10.1007/978-3-319-94956-7_3", "nodeyear": 2018, "ref-by-count": 0, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1105571339", "attributes": {"title": "Generation of atypical hopping and interactions by kinetic driving", "doi": "10.1088/1367-2630/aad376", "nodeyear": 2018, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1105686278", "attributes": {"title": "Universal Fluctuations of Floquet Topological Invariants at Low Frequencies", "doi": "10.1103/physrevlett.121.036402", "nodeyear": 2018, "ref-by-count": 28, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1105624464", "attributes": {"title": "Anomalous Thermalization in Quantum Collective Models", "doi": "10.1103/physrevlett.121.030602", "nodeyear": 2018, "ref-by-count": 9, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1105577723", "attributes": {"title": "Violent relaxation in quantum fluids with long-range interactions", "doi": "10.1103/physreve.98.012112", "nodeyear": 2018, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1107278146", "attributes": {"title": "Reinforcement Learning in Different Phases of Quantum Control", "doi": "10.1103/physrevx.8.031086", "nodeyear": 2018, "ref-by-count": 163, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1105919059", "attributes": {"title": "Dynamical localization-delocalization crossover in the Aubry-André-Harper model", "doi": "10.1103/physreva.98.013635", "nodeyear": 2018, "ref-by-count": 8, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1105752007", "attributes": {"title": "Quantum quench dynamics in Dicke superradiance models", "doi": "10.1103/physreva.98.013836", "nodeyear": 2018, "ref-by-count": 30, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1105686214", "attributes": {"title": "Probing microscopic models for system-bath interactions via parametric driving", "doi": "10.1103/physreva.98.012122", "nodeyear": 2018, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1105672523", "attributes": {"title": "Overcoming dispersive spreading of quantum wave packets via periodic nonlinear kicking", "doi": "10.1103/physreva.98.013620", "nodeyear": 2018, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1105590292", "attributes": {"title": "Ground-state phase diagram of the one-dimensional t-J model with pair hopping terms", "doi": "10.1103/physrevb.98.035116", "nodeyear": 2018, "ref-by-count": 8, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1105590279", "attributes": {"title": "Observation of Floquet bands in driven spin-orbit-coupled Fermi gases", "doi": "10.1103/physreva.98.013615", "nodeyear": 2018, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1105217433", "attributes": {"title": "Entanglement in Finite Quantum Systems Under Twisted Boundary Conditions", "doi": "10.1007/s13538-018-0587-3", "nodeyear": 2018, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1104382572", "attributes": {"title": "Strong disorder renormalization for the dynamics of many-body-localized systems: iterative elimination of the fastest degree of freedom via the Floquet expansion", "doi": "10.1088/1751-8121/aac672", "nodeyear": 2018, "ref-by-count": 4, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1105237498", "attributes": {"title": "Solid-state magnetic traps and lattices", "doi": "10.1103/physrevb.97.235451", "nodeyear": 2018, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1105229539", "attributes": {"title": "NOON state of Bose atoms in the double-well potential via an excited-state quantum phase transition", "doi": "10.1103/physreva.97.063624", "nodeyear": 2018, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1105020595", "attributes": {"title": "Lindblad-Floquet description of finite-time quantum heat engines", "doi": "10.1103/physreva.97.062121", "nodeyear": 2018, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1104999161", "attributes": {"title": "Floquet Quantum Simulation with Superconducting Qubits", "doi": "10.1103/physrevapplied.9.064029", "nodeyear": 2018, "ref-by-count": 27, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1104586548", "attributes": {"title": "Onset of Floquet thermalization", "doi": "10.1103/physrevb.97.245122", "nodeyear": 2018, "ref-by-count": 41, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1104337736", "attributes": {"title": "Heating in Integrable Time-Periodic Systems", "doi": "10.1103/physrevlett.120.220602", "nodeyear": 2018, "ref-by-count": 6, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1104046499", "attributes": {"title": "From quantum heat engines to laser cooling: Floquet theory beyond the Born–Markov approximation", "doi": "10.1088/1367-2630/aac583", "nodeyear": 2018, "ref-by-count": 23, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1104217963", "attributes": {"title": "Floquet Supersymmetry", "doi": "10.1103/physrevlett.120.210603", "nodeyear": 2018, "ref-by-count": 7, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1104046048", "attributes": {"title": "Quantum transition probabilities during a perturbing pulse: Differences between the nonadiabatic results and Fermi’s golden rule forms", "doi": "10.1063/1.5019172", "nodeyear": 2018, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1104174226", "attributes": {"title": "Replica Resummation of the Baker-Campbell-Hausdorff Series", "doi": "10.1103/physrevlett.120.200607", "nodeyear": 2018, "ref-by-count": 30, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1103957661", "attributes": {"title": "Integrable Time-Dependent Quantum Hamiltonians", "doi": "10.1103/physrevlett.120.190402", "nodeyear": 2018, "ref-by-count": 29, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1103891869", "attributes": {"title": "Resonant Thermalization of Periodically Driven Strongly Correlated Electrons", "doi": "10.1103/physrevlett.120.197601", "nodeyear": 2018, "ref-by-count": 35, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1104244423", "attributes": {"title": "Exact results for the Floquet coin toss for driven integrable models", "doi": "10.1103/physrevb.97.184308", "nodeyear": 2018, "ref-by-count": 11, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1104186237", "attributes": {"title": "Effects of quantum coherence on work statistics", "doi": "10.1103/physreva.97.052122", "nodeyear": 2018, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1103957640", "attributes": {"title": "Low-frequency phase diagram of irradiated graphene and a periodically driven spin-12 XY chain", "doi": "10.1103/physrevb.97.205415", "nodeyear": 2018, "ref-by-count": 18, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1103957630", "attributes": {"title": "Floquet topological polaritons in semiconductor microcavities", "doi": "10.1103/physrevb.97.195305", "nodeyear": 2018, "ref-by-count": 9, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1103799511", "attributes": {"title": "Concurrence of dynamical phase transitions at finite temperature in the fully connected transverse-field Ising model", "doi": "10.1103/physrevb.97.174401", "nodeyear": 2018, "ref-by-count": 45, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1105625178", "attributes": {"title": "On the Effect of an Inhomogeneous Magnetic Field on High-Frequency Asymptotic Behaviors of Correlation Functions of Spin Lattices", "doi": "10.1134/s002136401809014x", "nodeyear": 2018, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1103354626", "attributes": {"title": "Topological Floquet-Thouless Energy Pump", "doi": "10.1103/physrevlett.120.150601", "nodeyear": 2018, "ref-by-count": 32, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "cite_l2"}}, {"id": "pub.1103223307", "attributes": {"title": "Probing the strongly driven spin-boson model in a superconducting quantum circuit", "doi": "10.1038/s41467-018-03626-w", "nodeyear": 2018, "ref-by-count": 47, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1101044952", "attributes": {"title": "Dynamical quantum phase transitions: a review", "doi": "10.1088/1361-6633/aaaf9a", "nodeyear": 2018, "ref-by-count": 245, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1101270698", "attributes": {"title": "Parametric instabilities in resonantly-driven Bose–Einstein condensates", "doi": "10.1088/2058-9565/aab2b9", "nodeyear": 2018, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1100407275", "attributes": {"title": "Floquet many-body engineering: topology and many-body physics in phase space lattices", "doi": "10.1088/1367-2630/aaa7c3", "nodeyear": 2018, "ref-by-count": 22, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1106249535", "attributes": {"title": "Stabilizing effect of driving and dissipation on quantum metastable states", "doi": "10.1103/physreva.97.042109", "nodeyear": 2018, "ref-by-count": 19, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1106243826", "attributes": {"title": "Floquet Weyl semimetals in light-irradiated type-II and hybrid line-node semimetals", "doi": "10.1103/physrevb.97.155152", "nodeyear": 2018, "ref-by-count": 28, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1103695948", "attributes": {"title": "Semiconductor quantum well irradiated by a two-mode electromagnetic field as a terahertz emitter", "doi": "10.1103/physreva.97.043860", "nodeyear": 2018, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1103614809", "attributes": {"title": "Floquet protocols of adiabatic state flips and reallocation of exceptional points", "doi": "10.1103/physreva.97.042119", "nodeyear": 2018, "ref-by-count": 4, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1103567271", "attributes": {"title": "Dynamical quantum phase transitions in extended transverse Ising models", "doi": "10.1103/physrevb.97.134306", "nodeyear": 2018, "ref-by-count": 23, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1103567269", "attributes": {"title": "Floquet-Network Theory of Nonreciprocal Transport", "doi": "10.1103/physrevapplied.9.044031", "nodeyear": 2018, "ref-by-count": 16, "is_input_DOI": false, "category_for": "09:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1103567266", "attributes": {"title": "Nonadiabatic effects in periodically driven dissipative open quantum systems", "doi": "10.1103/physreva.97.043851", "nodeyear": 2018, "ref-by-count": 12, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1103476382", "attributes": {"title": "At the Limits of Criticality-Based Quantum Metrology: Apparent Super-Heisenberg Scaling Revisited", "doi": "10.1103/physrevx.8.021022", "nodeyear": 2018, "ref-by-count": 35, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1103285503", "attributes": {"title": "Vlasov dynamics of periodically driven systems", "doi": "10.1063/1.5026159", "nodeyear": 2018, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1101728734", "attributes": {"title": "Floquet Engineering in Quantum Chains", "doi": "10.1103/physrevlett.120.127601", "nodeyear": 2018, "ref-by-count": 25, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1101728724", "attributes": {"title": "Periodically Driven Array of Single Rydberg Atoms", "doi": "10.1103/physrevlett.120.123204", "nodeyear": 2018, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1101699045", "attributes": {"title": "Well-Known Distinctive Signatures of Quantum Phase Transition in Shape Coexistence Configuration of Nuclei", "doi": "10.1007/s13538-018-0561-0", "nodeyear": 2018, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1101635473", "attributes": {"title": "Subexponentially Growing Hilbert Space and Nonconcentrating Distributions in a Constrained Spin Model", "doi": "10.1007/s10955-018-2016-y", "nodeyear": 2018, "ref-by-count": 3, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1101459080", "attributes": {"title": "Photoinduced Topological Phase Transitions in Topological Magnon Insulators", "doi": "10.1038/s41598-018-22779-8", "nodeyear": 2018, "ref-by-count": 18, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1100249419", "attributes": {"title": "Zero refractive index in time-Floquet acoustic metamaterials", "doi": "10.1063/1.5006542", "nodeyear": 2018, "ref-by-count": 12, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1101875909", "attributes": {"title": "Photonic realization of a transition to a strongly driven Floquet topological phase", "doi": "10.1103/physreva.97.031801", "nodeyear": 2018, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1101865179", "attributes": {"title": "Simulating magnetic fields in Rydberg-dressed neutral atoms", "doi": "10.1103/physreva.97.033414", "nodeyear": 2018, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1101787426", "attributes": {"title": "Amplified and tunable transverse and longitudinal spin-photon coupling in hybrid circuit-QED", "doi": "10.1103/physrevb.97.125429", "nodeyear": 2018, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1101568086", "attributes": {"title": "Nonequilibrium steady states and resonant tunneling in time-periodically driven systems with interactions", "doi": "10.1103/physrevb.97.125115", "nodeyear": 2018, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1101270671", "attributes": {"title": "Floquet high Chern insulators in periodically driven chirally stacked multilayer graphene", "doi": "10.1088/1367-2630/aab2c7", "nodeyear": 2018, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1101203202", "attributes": {"title": "Realizing the Haldane Phase with Bosons in Optical Lattices", "doi": "10.1103/physrevlett.120.085301", "nodeyear": 2018, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1101164938", "attributes": {"title": "Control of Excitation Energy Transfer in Condensed Phase Molecular Systems by Floquet Engineering", "doi": "10.1021/acs.jpclett.8b00067", "nodeyear": 2018, "ref-by-count": 13, "is_input_DOI": false, "category_for": "03:1.00", "level": "cite_l2"}}, {"id": "pub.1101163815", "attributes": {"title": "Floquet Engineered Quadri-partite Lattice System as an Extension of the Topological Haldane Model", "doi": "10.7566/jpsj.87.034711", "nodeyear": 2018, "ref-by-count": 1, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1100978693", "attributes": {"title": "Optical Trapping of Electrons in Graphene", "doi": "10.1021/acsphotonics.7b01394", "nodeyear": 2018, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:0.60;09:0.40", "level": "cite_l2"}}, {"id": "pub.1086256884", "attributes": {"title": "Physics of muscle contraction", "doi": "10.1088/1361-6633/aa7b9e", "nodeyear": 2018, "ref-by-count": 29, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1101132622", "attributes": {"title": "Statistical speed of quantum states: Generalized quantum Fisher information and Schatten speed", "doi": "10.1103/physreva.97.022109", "nodeyear": 2018, "ref-by-count": 15, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1101046754", "attributes": {"title": "Nonlinear quantum Rabi model in trapped ions", "doi": "10.1103/physreva.97.023624", "nodeyear": 2018, "ref-by-count": 29, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1100847489", "attributes": {"title": "Floquet topological phase transitions in a kicked Haldane-Chern insulator", "doi": "10.1103/physrevb.97.085405", "nodeyear": 2018, "ref-by-count": 5, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1100847484", "attributes": {"title": "Symmetry breaking and the fermionic fractional Chern insulator in topologically trivial bands", "doi": "10.1103/physrevb.97.085108", "nodeyear": 2018, "ref-by-count": 7, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1100693529", "attributes": {"title": "Isospin degree of freedom in even-even 68-76Ge and 62-70Zn isotopes", "doi": "10.1140/epja/i2018-12448-y", "nodeyear": 2018, "ref-by-count": 9, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1100658085", "attributes": {"title": "Analogies of the classical Euler top with a rotor to spin squeezing and quantum phase transitions in a generalized Lipkin-Meshkov-Glick model", "doi": "10.1038/s41598-018-20486-y", "nodeyear": 2018, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1100590718", "attributes": {"title": "Enhancement and sign change of magnetic correlations in a driven quantum many-body system", "doi": "10.1038/nature25135", "nodeyear": 2018, "ref-by-count": 87, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1100333755", "attributes": {"title": "Exceptional points near first- and second-order quantum phase transitions", "doi": "10.1103/physreve.97.012112", "nodeyear": 2018, "ref-by-count": 10, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1100180200", "attributes": {"title": "Drive-induced delocalization in the Aubry-André model", "doi": "10.1103/physreve.97.010101", "nodeyear": 2018, "ref-by-count": 23, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1100757504", "attributes": {"title": "Controllable continuous evolution of electronic states in a single quantum ring", "doi": "10.1103/physrevb.97.041304", "nodeyear": 2018, "ref-by-count": 29, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1100700491", "attributes": {"title": "Absence of thermalization in finite isolated interacting Floquet systems", "doi": "10.1103/physrevb.97.014311", "nodeyear": 2018, "ref-by-count": 27, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1100502468", "attributes": {"title": "Floquet band structure of a semi-Dirac system", "doi": "10.1103/physrevb.97.035422", "nodeyear": 2018, "ref-by-count": 22, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1100502449", "attributes": {"title": "Dissipative phase transition in the open quantum Rabi model", "doi": "10.1103/physreva.97.013825", "nodeyear": 2018, "ref-by-count": 46, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1101180204", "attributes": {"title": "A New First-Order Phase Transition for an Extended Jaynes–Cummings–Dicke Model with a High-Finesse Optical Cavity in the BEC System†", "doi": "10.1007/s10946-018-9686-4", "nodeyear": 2018, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1092917025", "attributes": {"title": "Resonance enhancement of two photon absorption by magnetically trapped atoms in strong rf-fields", "doi": "10.1016/j.physleta.2017.11.016", "nodeyear": 2018, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1109707572", "attributes": {"title": "Statistical Benchmarks for Quantum Transport in Complex Systems, From Characterisation to Design", "doi": "10.1007/978-3-319-93151-7", "nodeyear": 2018, "ref-by-count": 6, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1109706437", "attributes": {"title": "Equilibrium and Nonequilibrium Aspects of Phase Transitions in Quantum Physics", "doi": "10.1007/978-3-030-00653-2", "nodeyear": 2018, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1093034781", "attributes": {"title": "Special issue on addressing many-body problems with cold atoms and molecules", "doi": "10.1088/1361-6455/aa9d13", "nodeyear": 2017, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:0.60;03:0.40", "level": "cite_l2"}}, {"id": "pub.1100299734", "attributes": {"title": "Quantum phase transition in an effective three-mode model of interacting bosons", "doi": "10.1103/physreve.96.062146", "nodeyear": 2017, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1099619049", "attributes": {"title": "Excited-state quantum phase transitions and their manifestations in an extended Dicke model", "doi": "10.1063/1.5016143", "nodeyear": 2017, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1099750796", "attributes": {"title": "Doublon-Holon Origin of the Subpeaks at the Hubbard Band Edges", "doi": "10.1103/physrevlett.119.236402", "nodeyear": 2017, "ref-by-count": 18, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1101194950", "attributes": {"title": "Floquet prethermalization in the resonantly driven Hubbard model", "doi": "10.1209/0295-5075/120/57001", "nodeyear": 2017, "ref-by-count": 31, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1099750800", "attributes": {"title": "Generalized Schrieffer-Wolff transformation of multiflavor Hubbard models", "doi": "10.1103/physrevb.96.245106", "nodeyear": 2017, "ref-by-count": 6, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1093118725", "attributes": {"title": "Magnetic field fluctuations analysis for the ion trap implementation of the quantum Rabi model in the deep strong coupling regime", "doi": "10.1080/09500340.2017.1404651", "nodeyear": 2017, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1099862024", "attributes": {"title": "Collectivity and Periodic Orbits in a Chain of Interacting, Kicked Spins", "doi": "10.12693/aphyspola.132.1661", "nodeyear": 2017, "ref-by-count": 1, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1093100577", "attributes": {"title": "Computation of the asymptotic states of modulated open quantum systems with a numerically exact realization of the quantum trajectory method", "doi": "10.1103/physreve.96.053313", "nodeyear": 2017, "ref-by-count": 8, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1092756070", "attributes": {"title": "Experimentally simulating the dynamics of quantum light and matter at deep-strong coupling", "doi": "10.1038/s41467-017-01061-x", "nodeyear": 2017, "ref-by-count": 123, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1092770968", "attributes": {"title": "Nonequilibrium Quantum Dynamics of Many-Body Systems", "doi": "10.1007/978-3-319-68109-2_12", "nodeyear": 2017, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1092687423", "attributes": {"title": "Increasing Performance of the Quantum Trajectory Method by Grouping Trajectories", "doi": "10.1007/978-3-319-71255-0_11", "nodeyear": 2017, "ref-by-count": 2, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1092561474", "attributes": {"title": "Thermodynamic cost for classical counterdiabatic driving", "doi": "10.1103/physreve.96.052107", "nodeyear": 2017, "ref-by-count": 14, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "cite_l2"}}, {"id": "pub.1092277819", "attributes": {"title": "Valley-selective topologically ordered states in irradiated bilayer graphene", "doi": "10.1088/2053-1583/aa9471", "nodeyear": 2017, "ref-by-count": 10, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1092881230", "attributes": {"title": "Mixed state dynamical quantum phase transitions", "doi": "10.1103/physrevb.96.180303", "nodeyear": 2017, "ref-by-count": 49, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1092718053", "attributes": {"title": "Topological edge-state engineering with high-frequency electromagnetic radiation", "doi": "10.1103/physrevb.96.205127", "nodeyear": 2017, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1092642445", "attributes": {"title": "Topological invariants of Floquet systems: General formulation, special properties, and Floquet topological defects", "doi": "10.1103/physrevb.96.195303", "nodeyear": 2017, "ref-by-count": 86, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1092484424", "attributes": {"title": "Correspondence between a shaken honeycomb lattice and the Haldane model", "doi": "10.1103/physreva.96.053603", "nodeyear": 2017, "ref-by-count": 1, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1092484423", "attributes": {"title": "Controlling the Floquet state population and observing micromotion in a periodically driven two-body quantum system", "doi": "10.1103/physreva.96.053602", "nodeyear": 2017, "ref-by-count": 37, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1091324316", "attributes": {"title": "Canonical symplectic structure and structure-preserving geometric algorithms for Schrödinger–Maxwell systems", "doi": "10.1016/j.jcp.2017.08.033", "nodeyear": 2017, "ref-by-count": 12, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "cite_l2"}}, {"id": "pub.1092396862", "attributes": {"title": "Absence of dynamical localization in interacting driven systems", "doi": "10.21468/scipostphys.3.4.029", "nodeyear": 2017, "ref-by-count": 22, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1092104621", "attributes": {"title": "Light-Induced Anisotropic Skyrmion and Stripe Phases in a Rashba Ferromagnet", "doi": "10.1103/physrevlett.119.147202", "nodeyear": 2017, "ref-by-count": 11, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "cite_l2"}}, {"id": "pub.1092104602", "attributes": {"title": "High-Temperature Nonequilibrium Bose Condensation Induced by a Hot Needle", "doi": "10.1103/physrevlett.119.140602", "nodeyear": 2017, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1092254361", "attributes": {"title": "Floquet engineering of long-range p-wave superconductivity: Beyond the high-frequency limit", "doi": "10.1103/physrevb.96.155438", "nodeyear": 2017, "ref-by-count": 12, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1092218368", "attributes": {"title": "Periodic table for Floquet topological insulators", "doi": "10.1103/physrevb.96.155118", "nodeyear": 2017, "ref-by-count": 163, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1092172298", "attributes": {"title": "Optically induced Lifshitz transition in bilayer graphene", "doi": "10.1103/physrevb.96.155432", "nodeyear": 2017, "ref-by-count": 30, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1092104544", "attributes": {"title": "Phase transitions and adiabatic preparation of a fractional Chern insulator in a boson cold-atom model", "doi": "10.1103/physrevb.96.165107", "nodeyear": 2017, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1092104499", "attributes": {"title": "Asymptotic Floquet states of non-Markovian systems", "doi": "10.1103/physreva.96.042103", "nodeyear": 2017, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1092072911", "attributes": {"title": "Dynamical localization and the effects of aperiodicity in Floquet systems", "doi": "10.1103/physrevb.96.144301", "nodeyear": 2017, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1092072895", "attributes": {"title": "Oscillating potential well in the complex plane and the adiabatic theorem", "doi": "10.1103/physreva.96.042101", "nodeyear": 2017, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1092024589", "attributes": {"title": "Probing the excited-state quantum phase transition through statistics of Loschmidt echo and quantum work", "doi": "10.1103/physreve.96.032142", "nodeyear": 2017, "ref-by-count": 17, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1092016824", "attributes": {"title": "Floquet topological magnons", "doi": "10.1088/2399-6528/aa8843", "nodeyear": 2017, "ref-by-count": 30, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1091629732", "attributes": {"title": "Magnetic order in laser-irradiated kagome antiferromagnets", "doi": "10.1088/2399-6528/aa8ab8", "nodeyear": 2017, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1091511165", "attributes": {"title": "Evolution of Extended JC-Dicke Quantum Phase Transition with a Coupled Optical Cavity in Bose-Einstein Condensate System", "doi": "10.1007/s10773-017-3531-3", "nodeyear": 2017, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1092035474", "attributes": {"title": "Dynamical stabilization of a superfluid motion in the presence of an ac force", "doi": "10.1103/physreva.96.033637", "nodeyear": 2017, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1091937945", "attributes": {"title": "Effects of local periodic driving on transport and generation of bound states", "doi": "10.1103/physrevb.96.104309", "nodeyear": 2017, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1091808750", "attributes": {"title": "Synthetic random flux model in a periodically driven optical lattice", "doi": "10.1103/physreva.96.033620", "nodeyear": 2017, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1091676677", "attributes": {"title": "Laser-irradiated Kondo insulators: Controlling the Kondo effect and topological phases", "doi": "10.1103/physrevb.96.115120", "nodeyear": 2017, "ref-by-count": 25, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1091655390", "attributes": {"title": "Probing the role of long-range interactions in the dynamics of a long-range Kitaev chain", "doi": "10.1103/physrevb.96.125113", "nodeyear": 2017, "ref-by-count": 44, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1091256104", "attributes": {"title": "Asymptotic Floquet states of open quantum systems: the role of interaction", "doi": "10.1088/1367-2630/aa7ceb", "nodeyear": 2017, "ref-by-count": 45, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1091261840", "attributes": {"title": "Adiabatic Theorem for Quantum Spin Systems", "doi": "10.1103/physrevlett.119.060201", "nodeyear": 2017, "ref-by-count": 32, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1091081056", "attributes": {"title": "Algebraic Theory of Crystal Vibrations: Localization Properties of Wave Functions in Two-Dimensional Lattices", "doi": "10.3390/cryst7080246", "nodeyear": 2017, "ref-by-count": 15, "is_input_DOI": false, "category_for": "03:1.00", "level": "cite_l2"}}, {"id": "pub.1090692587", "attributes": {"title": "Equivalence of the Floquet–Magnus and Fer Expansions to Investigate the Dynamics of a Spin System in the Three-Level System", "doi": "10.1021/acs.jpca.7b01723", "nodeyear": 2017, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1091439255", "attributes": {"title": "Universal nonanalytic behavior of the nonequilibrium Hall conductance in Floquet topological insulators", "doi": "10.1103/physrevb.96.054306", "nodeyear": 2017, "ref-by-count": 5, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1091357776", "attributes": {"title": "Long-range interactions in antiferromagnetic quantum spin chains", "doi": "10.1103/physrevb.96.054441", "nodeyear": 2017, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1091268146", "attributes": {"title": "Spectral functions of a time-periodically driven Falicov-Kimball model: Real-space Floquet dynamical mean-field theory study", "doi": "10.1103/physrevb.96.075134", "nodeyear": 2017, "ref-by-count": 12, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1091149741", "attributes": {"title": "Proposal for quantum many-body simulation and torsional matter-wave interferometry with a levitated nanodiamond", "doi": "10.1103/physreva.96.023827", "nodeyear": 2017, "ref-by-count": 38, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1091132193", "attributes": {"title": "Topological phase transitions in finite-size periodically driven translationally invariant systems", "doi": "10.1103/physreva.96.023610", "nodeyear": 2017, "ref-by-count": 12, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1091016901", "attributes": {"title": "Enhancement of superexchange pairing in the periodically driven Hubbard model", "doi": "10.1103/physrevb.96.085104", "nodeyear": 2017, "ref-by-count": 43, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1086046359", "attributes": {"title": "From quantum optics to quantum technologies", "doi": "10.1016/j.pquantelec.2017.06.002", "nodeyear": 2017, "ref-by-count": 19, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1091001773", "attributes": {"title": "Amplified Optomechanical Transduction of Virtual Radiation Pressure", "doi": "10.1103/physrevlett.119.053601", "nodeyear": 2017, "ref-by-count": 43, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1090980852", "attributes": {"title": "Nonadiabatic dynamics of the excited states for the Lipkin-Meshkov-Glick model", "doi": "10.1103/physreve.96.012153", "nodeyear": 2017, "ref-by-count": 15, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1090740511", "attributes": {"title": "Ultra‐Fast Control of Magnetic Relaxation in a Periodically Driven Hubbard Model", "doi": "10.1002/andp.201700024", "nodeyear": 2017, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1090697089", "attributes": {"title": "From thermal to excited-state quantum phase transition: The Dicke model", "doi": "10.1103/physreve.96.012121", "nodeyear": 2017, "ref-by-count": 22, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1090639115", "attributes": {"title": "Entanglement Entropy of Eigenstates of Quadratic Fermionic Hamiltonians", "doi": "10.1103/physrevlett.119.020601", "nodeyear": 2017, "ref-by-count": 61, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1090124343", "attributes": {"title": "Monodromy in Dicke superradiance", "doi": "10.1088/1751-8121/aa7a95", "nodeyear": 2017, "ref-by-count": 16, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1090547461", "attributes": {"title": "Periodically driven random quantum spin chains: real-space renormalization for Floquet localized phases", "doi": "10.1088/1742-5468/aa75dd", "nodeyear": 2017, "ref-by-count": 11, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1091314933", "attributes": {"title": "Aperiodically Driven Integrable Systems and Their Emergent Steady States", "doi": "10.1103/physrevx.7.031034", "nodeyear": 2017, "ref-by-count": 32, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1090809058", "attributes": {"title": "Driving induced many-body localization", "doi": "10.1103/physrevb.96.020201", "nodeyear": 2017, "ref-by-count": 25, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1090639004", "attributes": {"title": "Emergent topology and dynamical quantum phase transitions in two-dimensional closed quantum systems", "doi": "10.1103/physrevb.96.014302", "nodeyear": 2017, "ref-by-count": 36, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1090537266", "attributes": {"title": "Probing and controlling spin chirality in Mott insulators by circularly polarized laser", "doi": "10.1103/physrevb.96.014406", "nodeyear": 2017, "ref-by-count": 37, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1090432014", "attributes": {"title": "Floquet Dynamics of Boundary-Driven Systems at Criticality", "doi": "10.1103/physrevlett.118.260602", "nodeyear": 2017, "ref-by-count": 22, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1085973336", "attributes": {"title": "A generalization of the quantum Rabi model: exact solution and spectral structure", "doi": "10.1088/1751-8121/aa785a", "nodeyear": 2017, "ref-by-count": 23, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1090356064", "attributes": {"title": "A Rigorous Theory of Many-Body Prethermalization for Periodically Driven and Closed Quantum Systems", "doi": "10.1007/s00220-017-2930-x", "nodeyear": 2017, "ref-by-count": 143, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1086147780", "attributes": {"title": "The Local Detection Method: Dynamical Detection of Quantum Discord with Local Operations", "doi": "10.1007/978-3-319-53412-1_14", "nodeyear": 2017, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1090727222", "attributes": {"title": "Integrable Floquet dynamics", "doi": "10.21468/scipostphys.2.3.021", "nodeyear": 2017, "ref-by-count": 54, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1086037788", "attributes": {"title": "Floquet control of dipolaritons in quantum wells.", "doi": "10.1364/ol.42.002398", "nodeyear": 2017, "ref-by-count": 9, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1085930196", "attributes": {"title": "Local probe of single phonon dynamics in warm ion crystals", "doi": "10.1038/ncomms15712", "nodeyear": 2017, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1085868342", "attributes": {"title": "Periodic Driving at High Frequencies of an Impurity in the Isotropic XY Chain", "doi": "10.1007/s00220-017-2917-7", "nodeyear": 2017, "ref-by-count": 4, "is_input_DOI": false, "category_for": "01:0.60;02:0.40", "level": "cite_l2"}}, {"id": "pub.1102822370", "attributes": {"title": "Proxy-SU(3) symmetry in heavy deformed nuclei", "doi": "10.1103/physrevc.95.064325", "nodeyear": 2017, "ref-by-count": 18, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1090449453", "attributes": {"title": "Floquet states in (LaNiO3)2/(LaAlO3)N heterostructures grown along the (111) direction", "doi": "10.1103/physrevb.95.235309", "nodeyear": 2017, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1085918234", "attributes": {"title": "Jacobi-type transitions in the interacting boson model", "doi": "10.1103/physrevc.95.061304", "nodeyear": 2017, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1090858939", "attributes": {"title": "Geometry and non-adiabatic response in quantum and classical systems", "doi": "10.1016/j.physrep.2017.07.001", "nodeyear": 2017, "ref-by-count": 113, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1085784151", "attributes": {"title": "Direct Lattice Shaking of Bose Condensates: Finite Momentum Superfluids", "doi": "10.1103/physrevlett.118.220401", "nodeyear": 2017, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1084176371", "attributes": {"title": "Loading ultracold gases in topological Floquet bands: the fate of current and center-of-mass responses", "doi": "10.1088/2053-1583/aa6a3b", "nodeyear": 2017, "ref-by-count": 18, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1085784080", "attributes": {"title": "Generating end modes in a superconducting wire by periodic driving of the hopping", "doi": "10.1103/physrevb.95.174306", "nodeyear": 2017, "ref-by-count": 9, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1085775517", "attributes": {"title": "Excited-state quantum phase transitions in a two-fluid Lipkin model", "doi": "10.1103/physrevc.95.054326", "nodeyear": 2017, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1085775507", "attributes": {"title": "0-π transitions in a Josephson junction of an irradiated Weyl semimetal", "doi": "10.1103/physrevb.95.201115", "nodeyear": 2017, "ref-by-count": 24, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1085775482", "attributes": {"title": "Interconnections between equilibrium topology and dynamical quantum phase transitions in a linearly ramped Haldane model", "doi": "10.1103/physrevb.95.184307", "nodeyear": 2017, "ref-by-count": 33, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1085524357", "attributes": {"title": "Quantum Floquet anomalous Hall states and quantized ratchet effect in one-dimensional dimer chain driven by two ac electric fields", "doi": "10.1103/physrevb.95.205125", "nodeyear": 2017, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1085524341", "attributes": {"title": "Preparing quasienergy states on demand: A parametric oscillator", "doi": "10.1103/physreva.95.053841", "nodeyear": 2017, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1085593414", "attributes": {"title": "Adiabatic perturbation theory and geometry of periodically-driven systems", "doi": "10.1016/j.physrep.2017.05.003", "nodeyear": 2017, "ref-by-count": 68, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1085277889", "attributes": {"title": "High-Frequency Analysis of Effective Interactions and Bandwidth for Transient States after Monocycle Pulse Excitation of Extended Hubbard Model", "doi": "10.7566/jpsj.86.064702", "nodeyear": 2017, "ref-by-count": 6, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1085120424", "attributes": {"title": "Equilibration and order in quantum Floquet matter", "doi": "10.1038/nphys4106", "nodeyear": 2017, "ref-by-count": 148, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1085242099", "attributes": {"title": "Regularity and chaos in cavity QED", "doi": "10.1088/1402-4896/aa6640", "nodeyear": 2017, "ref-by-count": 9, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1084868052", "attributes": {"title": "Semiclassical Identification of Periodic Orbits in a Quantum Many-Body System", "doi": "10.1103/physrevlett.118.164101", "nodeyear": 2017, "ref-by-count": 23, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1090229831", "attributes": {"title": "Rapidly oscillating scatteringless non-Hermitian potentials and the absence of Kapitza stabilization", "doi": "10.1209/0295-5075/118/20004", "nodeyear": 2017, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1085191011", "attributes": {"title": "Parametric Instability Rates in Periodically Driven Band Systems", "doi": "10.1103/physrevx.7.021015", "nodeyear": 2017, "ref-by-count": 42, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1084786597", "attributes": {"title": "Quenching in Chern insulators with satellite Dirac points: The fate of edge states", "doi": "10.1103/physrevb.95.144304", "nodeyear": 2017, "ref-by-count": 21, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1084786582", "attributes": {"title": "Control over few-photon pulses by a time-periodic modulation of the photon emitter coupling", "doi": "10.1103/physreva.95.043814", "nodeyear": 2017, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1084603807", "attributes": {"title": "Driven Bose-Hubbard model with a parametrically modulated harmonic trap", "doi": "10.1103/physreva.95.043604", "nodeyear": 2017, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1084174937", "attributes": {"title": "Some remarks on ‘superradiant’ phase transitions in light-matter systems", "doi": "10.1088/1751-8121/aa65dc", "nodeyear": 2017, "ref-by-count": 50, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1084007961", "attributes": {"title": "Dynamical many‐body localization and delocalization in periodically driven closed quantum systems", "doi": "10.1002/andp.201600333", "nodeyear": 2017, "ref-by-count": 13, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1084682300", "attributes": {"title": "Treating Many-Body Quantum Systems by Means of Classical Mechanics", "doi": "10.1007/978-3-319-47810-4_4", "nodeyear": 2017, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1084174915", "attributes": {"title": "Adiabatic invariants for the regular region of the Dicke model", "doi": "10.1088/1751-8121/aa6162", "nodeyear": 2017, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1084198171", "attributes": {"title": "Topological flat bands in time-periodically driven uniaxial strained graphene nanoribbons", "doi": "10.1103/physrevb.95.115440", "nodeyear": 2017, "ref-by-count": 17, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1084198121", "attributes": {"title": "Keldysh approach to periodically driven systems with a fermionic bath: Nonequilibrium steady state, proximity effect, and dissipation", "doi": "10.1103/physrevb.95.115303", "nodeyear": 2017, "ref-by-count": 10, "is_input_DOI": false, "category_for": "03:1.00", "level": "cite_l2"}}, {"id": "pub.1084197894", "attributes": {"title": "Sublattice dynamics and quantum state transfer of doublons in two-dimensional lattices", "doi": "10.1103/physrevb.95.094303", "nodeyear": 2017, "ref-by-count": 16, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1084197582", "attributes": {"title": "Resolution-enhanced entanglement detection", "doi": "10.1103/physreva.95.032326", "nodeyear": 2017, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1084197545", "attributes": {"title": "Generation of robust entangled states in a non-Hermitian periodically driven two-band Bose-Hubbard system", "doi": "10.1103/physreva.95.032125", "nodeyear": 2017, "ref-by-count": 0, "is_input_DOI": false, "category_for": "03:1.00", "level": "cite_l2"}}, {"id": "pub.1084197534", "attributes": {"title": "Ponderomotive dynamics of waves in quasiperiodically modulated media", "doi": "10.1103/physreva.95.032114", "nodeyear": 2017, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1083406696", "attributes": {"title": "Heat capacity for systems with excited-state quantum phase transitions", "doi": "10.1016/j.physleta.2017.01.022", "nodeyear": 2017, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1083935671", "attributes": {"title": "Cavity-Assisted Single-Mode and Two-Mode Spin-Squeezed States via Phase-Locked Atom-Photon Coupling", "doi": "10.1103/physrevlett.118.083604", "nodeyear": 2017, "ref-by-count": 25, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "cite_l2"}}, {"id": "pub.1083439843", "attributes": {"title": "Mean-field theory for confinement transitions and magnetization plateaux in spin ice", "doi": "10.1088/1751-8121/aa5bc6", "nodeyear": 2017, "ref-by-count": 1, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1083816155", "attributes": {"title": "QuSpin: a Python package for dynamics and exact diagonalisation of quantum many body systems part I: spin chains", "doi": "10.21468/scipostphys.2.1.003", "nodeyear": 2017, "ref-by-count": 119, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1059133328", "attributes": {"title": "Catastrophes in non-equilibrium many-particle wave functions: universality and critical scaling", "doi": "10.1088/1361-6455/aa56af", "nodeyear": 2017, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:0.60;03:0.40", "level": "cite_l2"}}, {"id": "pub.1083935160", "attributes": {"title": "Floquet analysis of a quantum system with modulated periodic driving", "doi": "10.1103/physreva.95.023615", "nodeyear": 2017, "ref-by-count": 43, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1083717390", "attributes": {"title": "Transport signatures in topological systems coupled to ac fields", "doi": "10.1103/physrevb.95.064302", "nodeyear": 2017, "ref-by-count": 6, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1083643131", "attributes": {"title": "Unconventional fermionic pairing states in a monochromatically tilted optical lattice", "doi": "10.1103/physreva.95.023601", "nodeyear": 2017, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1083522251", "attributes": {"title": "Space-time Cooperative Symmetry in a Periodically Driven Tight Binding Model", "doi": "10.7566/jpsj.86.024713", "nodeyear": 2017, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1011995146", "attributes": {"title": "Creating stable Floquet–Weyl semimetals by laser-driving of 3D Dirac materials", "doi": "10.1038/ncomms13940", "nodeyear": 2017, "ref-by-count": 165, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1059164313", "attributes": {"title": "Delocalization properties at isolated avoided crossings in Lipkin–Meshkov–Glick type Hamiltonian models", "doi": "10.1088/1742-5468/aa4e90", "nodeyear": 2017, "ref-by-count": 8, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1107414917", "attributes": {"title": "Preparing and Probing Chern Bands with Cold Atoms", "doi": "10.1017/9781316084366.016", "nodeyear": 2017, "ref-by-count": 2, "is_input_DOI": false, "category_for": "00:1", "level": "cite_l2"}}, {"id": "pub.1084604018", "attributes": {"title": "Locating topological phase transitions using nonequilibrium signatures in local bulk observables", "doi": "10.1103/physrevb.95.041105", "nodeyear": 2017, "ref-by-count": 16, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1084603856", "attributes": {"title": "Effects of interactions on periodically driven dynamically localized systems", "doi": "10.1103/physrevb.95.014305", "nodeyear": 2017, "ref-by-count": 28, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1084603654", "attributes": {"title": "Excited-state quantum phase transitions studied from a non-Hermitian perspective", "doi": "10.1103/physreva.95.010103", "nodeyear": 2017, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1084199340", "attributes": {"title": "Colloquium: Atomic quantum gases in periodically driven optical lattices", "doi": "10.1103/revmodphys.89.011004", "nodeyear": 2017, "ref-by-count": 496, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1083506581", "attributes": {"title": "Effective Hamiltonians, prethermalization, and slow energy absorption in periodically driven many-body systems", "doi": "10.1103/physrevb.95.014112", "nodeyear": 2017, "ref-by-count": 184, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060653834", "attributes": {"title": "Floquet engineering of Haldane Chern insulators and chiral bosonic phase transitions", "doi": "10.1103/physrevb.95.045102", "nodeyear": 2017, "ref-by-count": 29, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060517495", "attributes": {"title": "Boson-mediated quantum spin simulators in transverse fields: XY model and spin-boson entanglement", "doi": "10.1103/physreva.95.013602", "nodeyear": 2017, "ref-by-count": 21, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1031526734", "attributes": {"title": "Boundary effects and gapped dispersion in rotating fermionic matter", "doi": "10.1016/j.physletb.2016.11.010", "nodeyear": 2017, "ref-by-count": 46, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1048482410", "attributes": {"title": "Dynamics and Characterization of Composite Quantum Systems", "doi": "10.1007/978-3-319-44459-8", "nodeyear": 2017, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1013892465", "attributes": {"title": "Quantum-Enhanced Nonlinear Spectroscopy", "doi": "10.1007/978-3-319-44397-3", "nodeyear": 2017, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060766918", "attributes": {"title": "Driven Open Quantum Systems and Floquet Stroboscopic Dynamics", "doi": "10.1103/physrevlett.117.250401", "nodeyear": 2016, "ref-by-count": 42, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1087286925", "attributes": {"title": "Approximated integrability of the Dicke model", "doi": "10.1209/0295-5075/116/50005", "nodeyear": 2016, "ref-by-count": 17, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1060681712", "attributes": {"title": "Signatures of shape phase transitions in odd-mass nuclei", "doi": "10.1103/physrevc.94.064310", "nodeyear": 2016, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060653553", "attributes": {"title": "Brillouin-Wigner theory for Floquet topological phase transitions in spin-orbit-coupled materials", "doi": "10.1103/physrevb.94.235419", "nodeyear": 2016, "ref-by-count": 22, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1060653350", "attributes": {"title": "Dynamical Cooper pairing in nonequilibrium electron-phonon systems", "doi": "10.1103/physrevb.94.214504", "nodeyear": 2016, "ref-by-count": 107, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1060653304", "attributes": {"title": "Entanglement generation in periodically driven integrable systems: Dynamical phase transitions and steady state", "doi": "10.1103/physrevb.94.214301", "nodeyear": 2016, "ref-by-count": 40, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1060766700", "attributes": {"title": "Floquet Realization and Signatures of One-Dimensional Anyons in an Optical Lattice", "doi": "10.1103/physrevlett.117.205303", "nodeyear": 2016, "ref-by-count": 50, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060750764", "attributes": {"title": "Excited-state quantum phase transitions in the two-spin elliptic Gaudin model", "doi": "10.1103/physreve.94.052110", "nodeyear": 2016, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060517140", "attributes": {"title": "Extended states in disordered one-dimensional systems in the presence of the generalized N-mer correlations", "doi": "10.1103/physreva.94.053613", "nodeyear": 2016, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060517139", "attributes": {"title": "Phase transition in an Aubry-André system with a rapidly oscillating magnetic field", "doi": "10.1103/physreva.94.053612", "nodeyear": 2016, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060517109", "attributes": {"title": "Noise-induced transport in the motion of trapped ions", "doi": "10.1103/physreva.94.053406", "nodeyear": 2016, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1002023992", "attributes": {"title": "Dynamical merging of Dirac points in the periodically driven Kitaev honeycomb model", "doi": "10.1140/epjb/e2016-70265-5", "nodeyear": 2016, "ref-by-count": 8, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1060652562", "attributes": {"title": "Signatures and conditions for phase band crossings in periodically driven integrable systems", "doi": "10.1103/physrevb.94.155122", "nodeyear": 2016, "ref-by-count": 12, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1060516924", "attributes": {"title": "Dynamics of small trapped one-dimensional Fermi gas under oscillating magnetic fields", "doi": "10.1103/physreva.94.043639", "nodeyear": 2016, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060516896", "attributes": {"title": "Creating topological interfaces and detecting chiral edge modes in a two-dimensional optical lattice", "doi": "10.1103/physreva.94.043611", "nodeyear": 2016, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060516887", "attributes": {"title": "Tunable spin-orbit-coupled Bose-Einstein condensates in deep optical lattices", "doi": "10.1103/physreva.94.043602", "nodeyear": 2016, "ref-by-count": 23, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060516756", "attributes": {"title": "Floquet engineering from long-range to short-range interactions", "doi": "10.1103/physreva.94.040701", "nodeyear": 2016, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1059164227", "attributes": {"title": "Thermal and quantum phase transitions in atom-field systems: a microcanonical analysis", "doi": "10.1088/1742-5468/2016/09/093105", "nodeyear": 2016, "ref-by-count": 25, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1060750417", "attributes": {"title": "Semiclassical bifurcations and topological phase transitions in a one-dimensional lattice of coupled Lipkin-Meshkov-Glick models", "doi": "10.1103/physreve.94.032123", "nodeyear": 2016, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1008292555", "attributes": {"title": "Interband Heating Processes in a Periodically Driven Optical Lattice", "doi": "10.1515/zna-2016-0129", "nodeyear": 2016, "ref-by-count": 17, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1059137701", "attributes": {"title": "Realization of uniform synthetic magnetic fields by periodically shaking an optical square lattice", "doi": "10.1088/1367-2630/18/9/093013", "nodeyear": 2016, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060652244", "attributes": {"title": "Abelian Floquet symmetry-protected topological phases in one dimension", "doi": "10.1103/physrevb.94.125105", "nodeyear": 2016, "ref-by-count": 82, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1060652210", "attributes": {"title": "Type-II Weyl cone transitions in driven semimetals", "doi": "10.1103/physrevb.94.121106", "nodeyear": 2016, "ref-by-count": 71, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1060652116", "attributes": {"title": "Floquet topological phases coupled to environments and the induced photocurrent", "doi": "10.1103/physrevb.94.115145", "nodeyear": 2016, "ref-by-count": 13, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1060516738", "attributes": {"title": "Molecular spectra in collective Dicke states", "doi": "10.1103/physreva.94.033848", "nodeyear": 2016, "ref-by-count": 5, "is_input_DOI": false, "category_for": "03:1.00", "level": "cite_l2"}}, {"id": "pub.1014532593", "attributes": {"title": "A possible framework of the Lipkin model obeying the SU(n) algebra in arbitrary fermion number. I: The SU(2) algebras extended from the conventional fermion pair and determination of the minimum weight states", "doi": "10.1093/ptep/ptw101", "nodeyear": 2016, "ref-by-count": 3, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1059174523", "attributes": {"title": "Particle-time duality in the kicked Ising spin chain", "doi": "10.1088/1751-8113/49/37/375101", "nodeyear": 2016, "ref-by-count": 36, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1060651758", "attributes": {"title": "Photoinduced Chern insulating states in semi-Dirac materials", "doi": "10.1103/physrevb.94.081103", "nodeyear": 2016, "ref-by-count": 33, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060516500", "attributes": {"title": "Excited-state quantum phase transition in the Rabi model", "doi": "10.1103/physreva.94.023835", "nodeyear": 2016, "ref-by-count": 32, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060516440", "attributes": {"title": "String order via Floquet interactions in atomic systems", "doi": "10.1103/physreva.94.023610", "nodeyear": 2016, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1008230481", "attributes": {"title": "Classification of excited-state quantum phase transitions for arbitrary number of degrees of freedom", "doi": "10.1016/j.physleta.2016.06.031", "nodeyear": 2016, "ref-by-count": 28, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1060750048", "attributes": {"title": "Entropy, chaos, and excited-state quantum phase transitions in the Dicke model", "doi": "10.1103/physreve.94.012140", "nodeyear": 2016, "ref-by-count": 21, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1052263311", "attributes": {"title": "Quasi-Periodically Driven Quantum Systems", "doi": "10.1515/zna-2016-0079", "nodeyear": 2016, "ref-by-count": 22, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1059005118", "attributes": {"title": "Quantum phase transitions in the collective degrees of freedom: nuclei and other many-body systems", "doi": "10.1088/0031-8949/91/8/083006", "nodeyear": 2016, "ref-by-count": 12, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1060651068", "attributes": {"title": "How periodic driving heats a disordered quantum spin chain", "doi": "10.1103/physrevb.94.020201", "nodeyear": 2016, "ref-by-count": 29, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060516111", "attributes": {"title": "Excited-state quantum phase transitions in many-body systems with infinite-range interaction: Localization, dynamics, and bifurcation", "doi": "10.1103/physreva.94.012113", "nodeyear": 2016, "ref-by-count": 49, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1024274677", "attributes": {"title": "Topological quantum matter with ultracold gases in optical lattices", "doi": "10.1038/nphys3803", "nodeyear": 2016, "ref-by-count": 387, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060765840", "attributes": {"title": "Anomalous Topological Phases and Unpaired Dirac Cones in Photonic Floquet Topological Insulators", "doi": "10.1103/physrevlett.117.013902", "nodeyear": 2016, "ref-by-count": 87, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1010802241", "attributes": {"title": "Effects of excited state quantum phase transitions on system dynamics", "doi": "10.1002/prop.201600035", "nodeyear": 2016, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060765767", "attributes": {"title": "Cooperative Shielding in Many-Body Systems with Long-Range Interaction", "doi": "10.1103/physrevlett.116.250402", "nodeyear": 2016, "ref-by-count": 44, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1062666833", "attributes": {"title": "Experimental reconstruction of the Berry curvature in a Floquet Bloch band", "doi": "10.1126/science.aad4568", "nodeyear": 2016, "ref-by-count": 297, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1059164050", "attributes": {"title": "High-frequency behavior of periodically modulated stochastic quantum system: activated escape", "doi": "10.1088/1742-5468/2016/05/053204", "nodeyear": 2016, "ref-by-count": 0, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1060765582", "attributes": {"title": "Floquet Engineering of Correlated Tunneling in the Bose-Hubbard Model with Ultracold Atoms", "doi": "10.1103/physrevlett.116.205301", "nodeyear": 2016, "ref-by-count": 109, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1059137444", "attributes": {"title": "Effective Floquet–Gibbs states for dissipative quantum systems", "doi": "10.1088/1367-2630/18/5/053008", "nodeyear": 2016, "ref-by-count": 43, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060749720", "attributes": {"title": "Rigidity generation by nonthermal fluctuations", "doi": "10.1103/physreve.93.052604", "nodeyear": 2016, "ref-by-count": 10, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "cite_l2"}}, {"id": "pub.1045365832", "attributes": {"title": "From quantum chaos and eigenstate thermalization to statistical mechanics and thermodynamics", "doi": "10.1080/00018732.2016.1198134", "nodeyear": 2016, "ref-by-count": 945, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1013025567", "attributes": {"title": "Quantum phase transitions with parity-symmetry breaking and hysteresis", "doi": "10.1038/nphys3743", "nodeyear": 2016, "ref-by-count": 68, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060650091", "attributes": {"title": "Effects of periodic kicking on dispersion and wave packet dynamics in graphene", "doi": "10.1103/physrevb.93.174301", "nodeyear": 2016, "ref-by-count": 33, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1059164027", "attributes": {"title": "Corner transfer matrices for 2D strongly coupled many-body Floquet systems", "doi": "10.1088/1742-5468/2016/04/043305", "nodeyear": 2016, "ref-by-count": 7, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1065176096", "attributes": {"title": "Multiphoton resonant manipulation of qubits by train of pulses", "doi": "10.1364/josab.33.000971", "nodeyear": 2016, "ref-by-count": 0, "is_input_DOI": false, "category_for": "09:0.33;01:0.33;02:0.33", "level": "cite_l2"}}, {"id": "pub.1060680986", "attributes": {"title": "Excited-state quantum phase transitions in the interacting boson model: Spectral characteristics of 0+ states and effective order parameter", "doi": "10.1103/physrevc.93.044302", "nodeyear": 2016, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060649845", "attributes": {"title": "Heating and many-body resonances in a periodically driven two-band system", "doi": "10.1103/physrevb.93.155132", "nodeyear": 2016, "ref-by-count": 67, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1060649780", "attributes": {"title": "Brillouin-Wigner theory for high-frequency expansion in periodically driven systems: Application to Floquet topological insulators", "doi": "10.1103/physrevb.93.144307", "nodeyear": 2016, "ref-by-count": 172, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060649672", "attributes": {"title": "Nonequilibrium dynamics of the Ising chain in a fluctuating transverse field", "doi": "10.1103/physrevb.93.134305", "nodeyear": 2016, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060515586", "attributes": {"title": "Modified interactions in a Floquet topological system on a square lattice and their impact on a bosonic fractional Chern insulator state", "doi": "10.1103/physreva.93.043618", "nodeyear": 2016, "ref-by-count": 17, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060515460", "attributes": {"title": "Classical-quantum correspondence in bosonic two-mode conversion systems: Polynomial algebras and Kummer shapes", "doi": "10.1103/physreva.93.042102", "nodeyear": 2016, "ref-by-count": 6, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1060515459", "attributes": {"title": "Hilbert-space localization in closed quantum systems", "doi": "10.1103/physreva.93.042101", "nodeyear": 2016, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1017232487", "attributes": {"title": "Calculating Floquet states of large quantum systems: A parallelization strategy and its cluster implementation", "doi": "10.1016/j.cpc.2015.12.024", "nodeyear": 2016, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1008885136", "attributes": {"title": "Floquet–Magnus theory and generic transient dynamics in periodically driven many-body quantum systems", "doi": "10.1016/j.aop.2016.01.012", "nodeyear": 2016, "ref-by-count": 250, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1060765248", "attributes": {"title": "Schrieffer-Wolff Transformation for Periodically Driven Systems: Strongly Correlated Systems with Artificial Gauge Fields", "doi": "10.1103/physrevlett.116.125301", "nodeyear": 2016, "ref-by-count": 107, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "cite_l2"}}, {"id": "pub.1060765225", "attributes": {"title": "Rigorous Bound on Energy Absorption and Generic Relaxation in Periodically Driven Quantum Systems", "doi": "10.1103/physrevlett.116.120401", "nodeyear": 2016, "ref-by-count": 192, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1022845164", "attributes": {"title": "Long-range doublon transfer in a dimer chain induced by topology and ac fields", "doi": "10.1038/srep22562", "nodeyear": 2016, "ref-by-count": 32, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060515226", "attributes": {"title": "Floquet theorem with open systems and its applications", "doi": "10.1103/physreva.93.032121", "nodeyear": 2016, "ref-by-count": 25, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1060749074", "attributes": {"title": "Delocalization and quantum chaos in atom-field systems", "doi": "10.1103/physreve.93.022215", "nodeyear": 2016, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060649137", "attributes": {"title": "Floquet topological system based on frequency-modulated classical coupled harmonic oscillators", "doi": "10.1103/physrevb.93.085105", "nodeyear": 2016, "ref-by-count": 42, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060649072", "attributes": {"title": "Scattering matrix invariants of Floquet topological insulators", "doi": "10.1103/physrevb.93.075405", "nodeyear": 2016, "ref-by-count": 49, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1060514903", "attributes": {"title": "Atom-molecule conversion in a periodically driven spin-boson model", "doi": "10.1103/physreva.93.013616", "nodeyear": 2016, "ref-by-count": 0, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1049246486", "attributes": {"title": "Artificial Gauge Fields with Ultracold Atoms in Optical Lattices", "doi": "10.1007/978-3-319-25829-4", "nodeyear": 2016, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1059136734", "attributes": {"title": "Topological singularities and the general classification of Floquet–Bloch systems", "doi": "10.1088/1367-2630/17/12/125014", "nodeyear": 2015, "ref-by-count": 168, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060764674", "attributes": {"title": "Exponentially Slow Heating in Periodically Driven Many-Body Systems", "doi": "10.1103/physrevlett.115.256803", "nodeyear": 2015, "ref-by-count": 228, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060514725", "attributes": {"title": "Dissipative two-mode Tavis-Cummings model with time-delayed feedback control", "doi": "10.1103/physreva.92.063832", "nodeyear": 2015, "ref-by-count": 18, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1060514696", "attributes": {"title": "Stability of a Bose-Einstein condensate in a driven optical lattice: Crossover between weak and tight transverse confinement", "doi": "10.1103/physreva.92.063639", "nodeyear": 2015, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1036641112", "attributes": {"title": "Tunable Chern insulator with optimally shaken lattices", "doi": "10.1103/physreva.92.063615", "nodeyear": 2015, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1064625019", "attributes": {"title": "Role of Correlations and Off-Diagonal Terms in Binary Disordered One-Dimensional Systems", "doi": "10.12693/aphyspola.128.1002", "nodeyear": 2015, "ref-by-count": 2, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1027442816", "attributes": {"title": "DiracQ: A Package for Algebraic Manipulation of Non-Commuting Quantum Variables", "doi": "10.5334/jors.cb", "nodeyear": 2015, "ref-by-count": 1, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1060764456", "attributes": {"title": "Prethermal Floquet Steady States and Instabilities in the Periodically Driven, Weakly Interacting Bose-Hubbard Model", "doi": "10.1103/physrevlett.115.205301", "nodeyear": 2015, "ref-by-count": 97, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060514338", "attributes": {"title": "Structure of eigenstates and quench dynamics at an excited-state quantum phase transition", "doi": "10.1103/physreva.92.050101", "nodeyear": 2015, "ref-by-count": 52, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1034517301", "attributes": {"title": "Driven-dissipative Ising model: Mean-field solution", "doi": "10.1103/physrevb.92.174418", "nodeyear": 2015, "ref-by-count": 9, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1059136608", "attributes": {"title": "Time delayed control of excited state quantum phase transitions in the Lipkin–Meshkov–Glick model", "doi": "10.1088/1367-2630/17/10/103031", "nodeyear": 2015, "ref-by-count": 15, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060764168", "attributes": {"title": "Dynamic Optical Lattices of Subwavelength Spacing for Ultracold Atoms", "doi": "10.1103/physrevlett.115.140401", "nodeyear": 2015, "ref-by-count": 50, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060514281", "attributes": {"title": "Multiphoton interband excitations of quantum gases in driven optical lattices", "doi": "10.1103/physreva.92.043621", "nodeyear": 2015, "ref-by-count": 59, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1034661114", "attributes": {"title": "Controlled Population of Floquet-Bloch States via Coupling to Bose and Fermi Baths", "doi": "10.1103/physrevx.5.041050", "nodeyear": 2015, "ref-by-count": 109, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1028219105", "attributes": {"title": "Dynamical preparation of Floquet Chern insulators", "doi": "10.1038/ncomms9336", "nodeyear": 2015, "ref-by-count": 147, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1016473610", "attributes": {"title": "High-frequency approximation for periodically driven quantum systems from a Floquet-space perspective", "doi": "10.1088/1367-2630/17/9/093039", "nodeyear": 2015, "ref-by-count": 290, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1046940591", "attributes": {"title": "Floquet analysis of pulsed Dirac systems: a way to simulate rippled graphene", "doi": "10.1140/epjb/e2015-60356-2", "nodeyear": 2015, "ref-by-count": 7, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1060764026", "attributes": {"title": "Spectroscopy of Interacting Quasiparticles in Trapped Ions", "doi": "10.1103/physrevlett.115.100501", "nodeyear": 2015, "ref-by-count": 49, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060514082", "attributes": {"title": "Structure-dynamics relation in shaken optical lattices", "doi": "10.1103/physreva.92.033407", "nodeyear": 2015, "ref-by-count": 3, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1049705098", "attributes": {"title": "Stroboscopic symmetry-protected topological phases", "doi": "10.1103/physrevb.92.125107", "nodeyear": 2015, "ref-by-count": 36, "is_input_DOI": false, "category_for": "09:1.00", "level": "cite_l2"}}, {"id": "pub.1060763935", "attributes": {"title": "Creating State-Dependent Lattices for Ultracold Fermions by Magnetic Gradient Modulation", "doi": "10.1103/physrevlett.115.073002", "nodeyear": 2015, "ref-by-count": 83, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1060513942", "attributes": {"title": "Floquet topological transitions in a driven one-dimensional topological insulator", "doi": "10.1103/physreva.92.023624", "nodeyear": 2015, "ref-by-count": 86, "is_input_DOI": false, "category_for": "01:1.00", "level": "cite_l2"}}, {"id": "pub.1020950855", "attributes": {"title": "Controlling disorder with periodically modulated interactions", "doi": "10.1103/physreva.92.023606", "nodeyear": 2015, "ref-by-count": 9, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1002407881", "attributes": {"title": "Coherent quantum dynamics: What fluctuations can tell", "doi": "10.1103/physreva.92.022108", "nodeyear": 2015, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1032625305", "attributes": {"title": "Quantum ergodicity and energy flow in molecules", "doi": "10.1080/00018732.2015.1109817", "nodeyear": 2015, "ref-by-count": 66, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1022791415", "attributes": {"title": "Probing polariton dynamics in trapped ions with phase-coherent two-dimensional spectroscopy", "doi": "10.1063/1.4919796", "nodeyear": 2015, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1059004792", "attributes": {"title": "Semiclassical dynamics of the resonant Dicke model in a strongly non-linear regime", "doi": "10.1088/0031-8949/90/7/074044", "nodeyear": 2015, "ref-by-count": 3, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "cite_l2"}}, {"id": "pub.1053517731", "attributes": {"title": "Spin squeezing by tensor twisting and Lipkin-Meshkov-Glick dynamics in a toroidal Bose-Einstein condensate with spatially modulated nonlinearity", "doi": "10.1103/physreva.91.053612", "nodeyear": 2015, "ref-by-count": 28, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1046942581", "attributes": {"title": "Hierarchy of Floquet gaps and edge states for driven honeycomb lattices", "doi": "10.1103/physreva.91.043625", "nodeyear": 2015, "ref-by-count": 75, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;03:0.33", "level": "cite_l2"}}, {"id": "pub.1010257037", "attributes": {"title": "Optimization of photon correlations by frequency filtering", "doi": "10.1103/physreva.91.043807", "nodeyear": 2015, "ref-by-count": 23, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1039122836", "attributes": {"title": "Condition for emergence of the Floquet-Gibbs state in periodically driven open systems", "doi": "10.1103/physreve.91.030101", "nodeyear": 2015, "ref-by-count": 56, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1033596012", "attributes": {"title": "Fate of dynamical many-body localization in the presence of disorder", "doi": "10.1103/physrevb.91.121106", "nodeyear": 2015, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1009958864", "attributes": {"title": "Long-time Behavior of Isolated Periodically Driven Interacting Lattice Systems", "doi": "10.1103/physrevx.4.041048", "nodeyear": 2014, "ref-by-count": 401, "is_input_DOI": false, "category_for": "02:1.00", "level": "cite_l2"}}, {"id": "pub.1039829503", "attributes": {"title": "Signatures of quantum phase transitions and excited state quantum phase transitions in the vibrational bending dynamics of triatomic molecules", "doi": "10.1016/j.molstruc.2013.08.020", "nodeyear": 2013, "ref-by-count": 55, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1008158272", "attributes": {"title": "Excited-state quantum phase transitions in Dicke superradiance models", "doi": "10.1103/physreve.88.032133", "nodeyear": 2013, "ref-by-count": 91, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1032795711", "attributes": {"title": "ac-driven quantum phase transition in the Lipkin-Meshkov-Glick model", "doi": "10.1103/physreve.87.052110", "nodeyear": 2013, "ref-by-count": 22, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1050389361", "attributes": {"title": "Excited-state phase transition leading to symmetry-breaking steady states in the Dicke model", "doi": "10.1103/physreva.87.023819", "nodeyear": 2013, "ref-by-count": 38, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1062466552", "attributes": {"title": "Roton-Type Mode Softening in a Quantum Gas with Cavity-Mediated Long-Range Interactions", "doi": "10.1126/science.1220314", "nodeyear": 2012, "ref-by-count": 181, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1014751446", "attributes": {"title": "Metal–topological insulator transition in the quantum kicked rotator with Z2 symmetry", "doi": "10.1103/physrevb.85.165131", "nodeyear": 2012, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060759314", "attributes": {"title": "Nonequilibrium Quantum Phase Transitions in the Dicke Model", "doi": "10.1103/physrevlett.108.043003", "nodeyear": 2012, "ref-by-count": 127, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1039860202", "attributes": {"title": "Quantum spin squeezing", "doi": "10.1016/j.physrep.2011.08.003", "nodeyear": 2011, "ref-by-count": 431, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1048699443", "attributes": {"title": "Theory of the Anderson Transition in the Quasiperiodic Kicked Rotor", "doi": "10.1103/physrevlett.107.074101", "nodeyear": 2011, "ref-by-count": 31, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060741752", "attributes": {"title": "Excited-state phase transition and onset of chaos in quantum optical models", "doi": "10.1103/physreve.83.046208", "nodeyear": 2011, "ref-by-count": 80, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1048928815", "attributes": {"title": "Classical Bifurcation at the Transition from Rabi to Josephson Dynamics", "doi": "10.1103/physrevlett.105.204101", "nodeyear": 2010, "ref-by-count": 282, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060507439", "attributes": {"title": "Anharmonicity effects in the bosonic U(2)-SO(3) excited-state quantum phase transition", "doi": "10.1103/physreva.81.050101", "nodeyear": 2010, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1034025717", "attributes": {"title": "Dicke quantum phase transition with a superfluid gas in an optical cavity", "doi": "10.1038/nature09009", "nodeyear": 2010, "ref-by-count": 977, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060839703", "attributes": {"title": "Quantum phase transitions in the shapes of atomic nuclei", "doi": "10.1103/revmodphys.82.2155", "nodeyear": 2010, "ref-by-count": 364, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1045564126", "attributes": {"title": "Observation of Van Hove singularities in twisted graphene layers", "doi": "10.1038/nphys1463", "nodeyear": 2009, "ref-by-count": 737, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1026356533", "attributes": {"title": "Quantum signatures of chaos in a kicked top", "doi": "10.1038/nature08396", "nodeyear": 2009, "ref-by-count": 180, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1049262570", "attributes": {"title": "Decoherence due to an excited-state quantum phase transition in a two-level boson model", "doi": "10.1103/physreva.80.032111", "nodeyear": 2009, "ref-by-count": 45, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1021560322", "attributes": {"title": "Decoherence as a signature of an excited-state quantum phase transition", "doi": "10.1103/physreva.78.060102", "nodeyear": 2008, "ref-by-count": 50, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1032579586", "attributes": {"title": "Impact of quantum phase transitions on excited-level dynamics", "doi": "10.1103/physreve.78.031130", "nodeyear": 2008, "ref-by-count": 59, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1025472474", "attributes": {"title": "Exact spectrum of the Lipkin-Meshkov-Glick model in the thermodynamic limit and finite-size corrections", "doi": "10.1103/physreve.78.021106", "nodeyear": 2008, "ref-by-count": 155, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1024402227", "attributes": {"title": "Excited state quantum phase transitions in many-body systems", "doi": "10.1016/j.aop.2007.06.011", "nodeyear": 2008, "ref-by-count": 195, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1041909998", "attributes": {"title": "Quantum Control of the Hyperfine Spin of a Cs Atom Ensemble", "doi": "10.1103/physrevlett.99.163002", "nodeyear": 2007, "ref-by-count": 92, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059079802", "attributes": {"title": "Monodromy and excited-state quantum phase transitions in integrable systems: collective vibrations of nuclei", "doi": "10.1088/0305-4470/39/31/l01", "nodeyear": 2006, "ref-by-count": 102, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060831320", "attributes": {"title": "Experimental Confirmation of Quantum Monodromy: The Millimeter Wave Spectrum of Cyanogen Isothiocyanate NCNCS", "doi": "10.1103/physrevlett.95.243002", "nodeyear": 2005, "ref-by-count": 52, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1004858858", "attributes": {"title": "Large-N Scaling Behavior of the Lipkin-Meshkov-Glick Model", "doi": "10.1103/physrevlett.95.050402", "nodeyear": 2005, "ref-by-count": 96, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1008126854", "attributes": {"title": "Quantum Phase Transitions in the Interacting Boson Model: Integrability, Level Repulsion, and Level Crossing", "doi": "10.1103/physrevlett.91.162502", "nodeyear": 2003, "ref-by-count": 52, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1041856979", "attributes": {"title": "Driven quantum tunneling", "doi": "10.1016/s0370-1573(98)00022-2", "nodeyear": 1998, "ref-by-count": 1206, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059076073", "attributes": {"title": "Quantum states in a champagne bottle", "doi": "10.1088/0305-4470/31/2/022", "nodeyear": 1998, "ref-by-count": 67, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1014050295", "attributes": {"title": "Semiclassical Spectra from Periodic-Orbit Clusters in a Mixed Phase Space", "doi": "10.1103/physrevlett.79.1022", "nodeyear": 1997, "ref-by-count": 23, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060810429", "attributes": {"title": "Semiclassical Spectra without Periodic Orbits for a Kicked Top", "doi": "10.1103/physrevlett.74.1562", "nodeyear": 1995, "ref-by-count": 12, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1017250213", "attributes": {"title": "Quantum effects of periodic orbits for the kicked top", "doi": "10.1007/bf01312181", "nodeyear": 1993, "ref-by-count": 32, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060485026", "attributes": {"title": "Quantum signatures of homoclinic tangles and separatrices", "doi": "10.1103/physreva.45.3615", "nodeyear": 1992, "ref-by-count": 20, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1059069780", "attributes": {"title": "Quantum maps, adiabatic invariance and the semiclassical limit", "doi": "10.1088/0305-4470/21/22/016", "nodeyear": 1988, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059070056", "attributes": {"title": "The Campbell-Baker-Hausdorff expansion for classical and quantum kicked dynamics", "doi": "10.1088/0305-4470/21/9/017", "nodeyear": 1988, "ref-by-count": 24, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1042734315", "attributes": {"title": "Classical and quantum chaos for a kicked top", "doi": "10.1007/bf01303727", "nodeyear": 1987, "ref-by-count": 285, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060500239", "attributes": {"title": "Steady States and Quasienergies of a Quantum-Mechanical System in an Oscillating Field", "doi": "10.1103/physreva.7.2203", "nodeyear": 1973, "ref-by-count": 856, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060430850", "attributes": {"title": "Solution of the Schrödinger Equation with a Hamiltonian Periodic in Time", "doi": "10.1103/physrev.138.b979", "nodeyear": 1965, "ref-by-count": 2161, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1040897292", "attributes": {"title": "Unpaired Floquet Majorana fermions without magnetic fields", "doi": "10.1103/physrevb.87.115420", "nodeyear": 2013, "ref-by-count": 63, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1046023204", "attributes": {"title": "Superradiant phase transitions with three-level systems", "doi": "10.1103/physreva.87.023813", "nodeyear": 2013, "ref-by-count": 29, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1022219898", "attributes": {"title": "Cold atoms in cavity-generated dynamical optical potentials", "doi": "10.1103/revmodphys.85.553", "nodeyear": 2013, "ref-by-count": 526, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1049288392", "attributes": {"title": "Drude Weight, Cyclotron Resonance, and the Dicke Model of Graphene Cavity QED", "doi": "10.1103/physrevlett.109.267404", "nodeyear": 2012, "ref-by-count": 43, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1039643973", "attributes": {"title": "Superradiant phase transition in a model of three-level-Λ systems interacting with two bosonic modes", "doi": "10.1103/physreva.86.063822", "nodeyear": 2012, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1023680357", "attributes": {"title": "Nonequilibrium quantum phase transitions in the Ising model", "doi": "10.1103/physreva.86.063627", "nodeyear": 2012, "ref-by-count": 50, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1038214559", "attributes": {"title": "A nontrivial bosonic representation of large spin systems at high temperatures", "doi": "10.1088/1751-8113/45/42/425301", "nodeyear": 2012, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1027554801", "attributes": {"title": "Quantum noise properties of multiphoton transitions in driven nonlinear resonators", "doi": "10.1088/1367-2630/14/9/093024", "nodeyear": 2012, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1010612726", "attributes": {"title": "Sharp Tunneling Peaks in a Parametric Oscillator: Quantum Resonances Missing in the Rotating Wave Approximation", "doi": "10.1103/physrevlett.109.090401", "nodeyear": 2012, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060743705", "attributes": {"title": "Thermal phase transitions for Dicke-type models in the ultrastrong-coupling limit", "doi": "10.1103/physreve.86.012101", "nodeyear": 2012, "ref-by-count": 15, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1024129122", "attributes": {"title": "Optical weight transfer in excitation spectra of ultra-cold bosons in two- and three-dimensional optical lattices", "doi": "10.1088/0953-4075/45/14/145303", "nodeyear": 2012, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1018731307", "attributes": {"title": "Equilibration and macroscopic quantum fluctuations in the Dicke model", "doi": "10.1088/1367-2630/14/7/073011", "nodeyear": 2012, "ref-by-count": 60, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1002860337", "attributes": {"title": "Equilibration of isolated macroscopic quantum systems", "doi": "10.1088/1367-2630/14/4/043020", "nodeyear": 2012, "ref-by-count": 81, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1018374514", "attributes": {"title": "Scattering theory of topological insulators and superconductors", "doi": "10.1103/physrevb.85.165409", "nodeyear": 2012, "ref-by-count": 103, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1026807511", "attributes": {"title": "Ultrastrong Coupling of the Cyclotron Transition of a 2D Electron Gas to a THz Metamaterial", "doi": "10.1126/science.1216022", "nodeyear": 2012, "ref-by-count": 367, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1018266335", "attributes": {"title": "Quantum Chaos and Effective Thermalization", "doi": "10.1103/physrevlett.108.073601", "nodeyear": 2012, "ref-by-count": 85, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1004826141", "attributes": {"title": "Finite-temperature mutual information in a simple phase transition", "doi": "10.1088/1742-5468/2012/01/p01023", "nodeyear": 2012, "ref-by-count": 60, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1027689745", "attributes": {"title": "Dynamics of nonequilibrium Dicke models", "doi": "10.1103/physreva.85.013817", "nodeyear": 2012, "ref-by-count": 134, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1007363629", "attributes": {"title": "Simulating Z2 topological insulators with cold atoms in a one-dimensional optical lattice", "doi": "10.1103/physreva.85.013638", "nodeyear": 2012, "ref-by-count": 79, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060759233", "attributes": {"title": "Frustration and Glassiness in Spin Models with Cavity-Mediated Interactions", "doi": "10.1103/physrevlett.107.277201", "nodeyear": 2011, "ref-by-count": 122, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1021558365", "attributes": {"title": "Dicke Quantum Spin Glass of Atoms and Photons", "doi": "10.1103/physrevlett.107.277202", "nodeyear": 2011, "ref-by-count": 142, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1020252590", "attributes": {"title": "A study of quantum phase transitions and quantum monodromy in the bending motion of non-rigid molecules", "doi": "10.1016/j.molstruc.2011.10.016", "nodeyear": 2011, "ref-by-count": 47, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1060637445", "attributes": {"title": "Topological classification of adiabatic processes", "doi": "10.1103/physrevb.84.195410", "nodeyear": 2011, "ref-by-count": 33, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1043279965", "attributes": {"title": "Protected Quantum Computation with Multiple Resonators in Ultrastrong Coupling Circuit QED", "doi": "10.1103/physrevlett.107.190402", "nodeyear": 2011, "ref-by-count": 93, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1051208711", "attributes": {"title": "Phase transitions and dark-state physics in two-color superradiance", "doi": "10.1103/physreva.84.053856", "nodeyear": 2011, "ref-by-count": 35, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060758977", "attributes": {"title": "Strongly Dipolar Bose-Einstein Condensate of Dysprosium", "doi": "10.1103/physrevlett.107.190401", "nodeyear": 2011, "ref-by-count": 577, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1050814349", "attributes": {"title": "Regularity and chaos at critical points of first-order quantum phase transitions", "doi": "10.1103/physrevc.84.041302", "nodeyear": 2011, "ref-by-count": 9, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1038797520", "attributes": {"title": "Path integral approach to the full Dicke model", "doi": "10.1016/j.physa.2011.05.018", "nodeyear": 2011, "ref-by-count": 9, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1013295901", "attributes": {"title": "Exploring Symmetry Breaking at the Dicke Quantum Phase Transition", "doi": "10.1103/physrevlett.107.140402", "nodeyear": 2011, "ref-by-count": 286, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1050856595", "attributes": {"title": "Quantum Hall effect in a one-dimensional dynamical system", "doi": "10.1103/physrevb.84.115133", "nodeyear": 2011, "ref-by-count": 71, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1040293571", "attributes": {"title": "Superradiant Phase Transitions and the Standard Description of Circuit QED", "doi": "10.1103/physrevlett.107.113602", "nodeyear": 2011, "ref-by-count": 128, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1016787662", "attributes": {"title": "Atomic physics and quantum optics using superconducting circuits", "doi": "10.1038/nature10122", "nodeyear": 2011, "ref-by-count": 904, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1057982297", "attributes": {"title": "Complete experimental rovibrational eigenenergies of HCN up to 6880 cm−1 above the ground state", "doi": "10.1063/1.3598942", "nodeyear": 2011, "ref-by-count": 37, "is_input_DOI": false, "category_for": "03:0.60;02:0.40", "level": "ref_l2"}}, {"id": "pub.1007789030", "attributes": {"title": "Majorana Fermions in Equilibrium and in Driven Cold-Atom Quantum Wires", "doi": "10.1103/physrevlett.106.220402", "nodeyear": 2011, "ref-by-count": 530, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1025212910", "attributes": {"title": "Three-dimensional phase diagram of disordered HgTe/CdTe quantum spin-Hall wells", "doi": "10.1103/physrevb.83.195119", "nodeyear": 2011, "ref-by-count": 56, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1018872620", "attributes": {"title": "Equilibration of quantum systems and subsystems", "doi": "10.1088/1367-2630/13/5/053009", "nodeyear": 2011, "ref-by-count": 127, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060508644", "attributes": {"title": "No singularities in observables at the phase transition in the Dicke model", "doi": "10.1103/physreva.83.051601", "nodeyear": 2011, "ref-by-count": 56, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1044585590", "attributes": {"title": "Sudden vanishing and reappearance of nonclassical effects: General occurrence of finite-time decays and periodic vanishings of nonclassicality and entanglement witnesses", "doi": "10.1103/physreva.83.053814", "nodeyear": 2011, "ref-by-count": 43, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1063125329", "attributes": {"title": "Disorder-Induced Multiple Transition Involving Z2 Topological Insulator", "doi": "10.1143/jpsj.80.053703", "nodeyear": 2011, "ref-by-count": 48, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1041781555", "attributes": {"title": "Floquet topological insulator in semiconductor quantum wells", "doi": "10.1038/nphys1926", "nodeyear": 2011, "ref-by-count": 1104, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1029141598", "attributes": {"title": "Many-body coherent destruction of tunneling in photonic lattices", "doi": "10.1103/physreva.83.034102", "nodeyear": 2011, "ref-by-count": 18, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1014126670", "attributes": {"title": "Quantum quench influenced by an excited-state phase transition", "doi": "10.1103/physreva.83.033802", "nodeyear": 2011, "ref-by-count": 67, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1013320119", "attributes": {"title": "The Quantum Spin Hall Effect", "doi": "10.1146/annurev-conmatphys-062910-140538", "nodeyear": 2011, "ref-by-count": 103, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1007431288", "attributes": {"title": "Qubit-oscillator system under ultrastrong coupling and extreme driving", "doi": "10.1103/physreva.83.030301", "nodeyear": 2011, "ref-by-count": 35, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1005562834", "attributes": {"title": "Disordered topological insulators: a non-commutative geometry perspective", "doi": "10.1088/1751-8113/44/11/113001", "nodeyear": 2011, "ref-by-count": 86, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1027465833", "attributes": {"title": "Quantum phase transitions in fully connected spin models: An entanglement perspective", "doi": "10.1103/physreva.83.022327", "nodeyear": 2011, "ref-by-count": 33, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1045115933", "attributes": {"title": "Topological insulators and superconductors", "doi": "10.1103/revmodphys.83.1057", "nodeyear": 2011, "ref-by-count": 8984, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1037152641", "attributes": {"title": "Colloquium: Nonequilibrium dynamics of closed interacting quantum systems", "doi": "10.1103/revmodphys.83.863", "nodeyear": 2011, "ref-by-count": 1769, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1002951333", "attributes": {"title": "Spin squeezing and concurrence", "doi": "10.1088/0953-4075/44/1/015501", "nodeyear": 2010, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:0.60;03:0.40", "level": "ref_l2"}}, {"id": "pub.1031594332", "attributes": {"title": "Unified single-photon and single-electron counting statistics: From cavity QED to electron transport", "doi": "10.1103/physreva.82.063840", "nodeyear": 2010, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1108131266", "attributes": {"title": "Understanding Quantum Phase Transitions", "doi": "10.1201/b10273", "nodeyear": 2010, "ref-by-count": 79, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1057963818", "attributes": {"title": "Complete experimental rovibrational eigenenergies of HNC up to 3743cm−1 above the ground state", "doi": "10.1063/1.3503508", "nodeyear": 2010, "ref-by-count": 24, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1052484094", "attributes": {"title": "Quasienergy description of the driven Jaynes-Cummings model", "doi": "10.1103/physrevb.82.155129", "nodeyear": 2010, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1062937215", "attributes": {"title": "FIDELITY APPROACH TO QUANTUM PHASE TRANSITIONS", "doi": "10.1142/s0217979210056335", "nodeyear": 2010, "ref-by-count": 365, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1035787773", "attributes": {"title": "No-go theorem for superradiant quantum phase transitions in cavity QED and counter-example in circuit QED", "doi": "10.1038/ncomms1069", "nodeyear": 2010, "ref-by-count": 214, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1018529463", "attributes": {"title": "Exploring topological phases with quantum walks", "doi": "10.1103/physreva.82.033429", "nodeyear": 2010, "ref-by-count": 331, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1042729374", "attributes": {"title": "Critical State of the Anderson Transition: Between a Metal and an Insulator", "doi": "10.1103/physrevlett.105.090601", "nodeyear": 2010, "ref-by-count": 90, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1039430067", "attributes": {"title": "Collective Excitations of a Dipolar Bose-Einstein Condensate", "doi": "10.1103/physrevlett.105.040404", "nodeyear": 2010, "ref-by-count": 58, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1009145988", "attributes": {"title": "Collective Dynamics of Bose-Einstein Condensates in Optical Cavities", "doi": "10.1103/physrevlett.105.043001", "nodeyear": 2010, "ref-by-count": 120, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1005408468", "attributes": {"title": "Adiabatic creation of atomic squeezing in dark states versus decoherences", "doi": "10.1103/physreva.82.012112", "nodeyear": 2010, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1033015118", "attributes": {"title": "Photoinduced Transition between Conventional and Topological Insulators in Two-Dimensional Electronic Systems", "doi": "10.1103/physrevlett.105.017401", "nodeyear": 2010, "ref-by-count": 239, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1001545329", "attributes": {"title": "Entanglement-assisted atomic clock beyond the projection noise limit", "doi": "10.1088/1367-2630/12/6/065032", "nodeyear": 2010, "ref-by-count": 118, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1017887827", "attributes": {"title": "The network model for the quantum spin Hall effect: two-dimensional Dirac fermions, topological quantum numbers and corner multifractality", "doi": "10.1088/1367-2630/12/6/065005", "nodeyear": 2010, "ref-by-count": 23, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1047837644", "attributes": {"title": "Ultrastrong coupling between a cavity resonator and the cyclotron transition of a two-dimensional electron gas in the case of an integer filling factor", "doi": "10.1103/physrevb.81.235303", "nodeyear": 2010, "ref-by-count": 86, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1015483129", "attributes": {"title": "Circuit QED scheme for the realization of the Lipkin-Meshkov-Glick model", "doi": "10.1209/0295-5075/90/54001", "nodeyear": 2010, "ref-by-count": 41, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1025519412", "attributes": {"title": "Three-Dimensional Roton Excitations and Supersolid Formation in Rydberg-Excited Bose-Einstein Condensates", "doi": "10.1103/physrevlett.104.195302", "nodeyear": 2010, "ref-by-count": 316, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1065173408", "attributes": {"title": "Polarization squeezing and multipartite entanglement of triphoton states", "doi": "10.1364/josab.27.00a105", "nodeyear": 2010, "ref-by-count": 10, "is_input_DOI": false, "category_for": "09:0.33;01:0.33;02:0.33", "level": "ref_l2"}}, {"id": "pub.1035001229", "attributes": {"title": "Analysis of the FASSST rotational spectrum of NCNCS in view of quantum monodromy", "doi": "10.1039/b922023b", "nodeyear": 2010, "ref-by-count": 18, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1031435740", "attributes": {"title": "Dicke-Model Phase Transition in the Quantum Motion of a Bose-Einstein Condensate in an Optical Cavity", "doi": "10.1103/physrevlett.104.130401", "nodeyear": 2010, "ref-by-count": 288, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1041729973", "attributes": {"title": "Quantum-projection-noise-limited interferometry with coherent atoms in a Ramsey-type setup", "doi": "10.1103/physreva.81.043633", "nodeyear": 2010, "ref-by-count": 23, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1015506698", "attributes": {"title": "Noise-resilient quantum interface based on quantum nondemolition interactions", "doi": "10.1103/physreva.81.042325", "nodeyear": 2010, "ref-by-count": 23, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1049607631", "attributes": {"title": "Sub-shot-noise quantum metrology with entangled identical particles", "doi": "10.1016/j.aop.2010.01.005", "nodeyear": 2010, "ref-by-count": 65, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1004049717", "attributes": {"title": "Atom-chip-based generation of entanglement for quantum metrology", "doi": "10.1038/nature08988", "nodeyear": 2010, "ref-by-count": 597, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060756669", "attributes": {"title": "Sub-Projection-Noise Sensitivity in Broadband Atomic Magnetometry", "doi": "10.1103/physrevlett.104.093602", "nodeyear": 2010, "ref-by-count": 107, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060507227", "attributes": {"title": "Universality of the negativity in the Lipkin-Meshkov-Glick model", "doi": "10.1103/physreva.81.032311", "nodeyear": 2010, "ref-by-count": 64, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1060756621", "attributes": {"title": "States of an Ensemble of Two-Level Atoms with Reduced Quantum Uncertainty", "doi": "10.1103/physrevlett.104.073604", "nodeyear": 2010, "ref-by-count": 221, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1015906101", "attributes": {"title": "Implementation of Cavity Squeezing of a Collective Atomic Spin", "doi": "10.1103/physrevlett.104.073602", "nodeyear": 2010, "ref-by-count": 295, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1064232873", "attributes": {"title": "Parametric resonance and spin-charge separation in 1D fermionic systems", "doi": "10.1209/0295-5075/89/40005", "nodeyear": 2010, "ref-by-count": 14, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1060507174", "attributes": {"title": "Metastable quantum phase transitions in a periodic one-dimensional Bose gas. II. Many-body theory", "doi": "10.1103/physreva.81.023625", "nodeyear": 2010, "ref-by-count": 51, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1038435541", "attributes": {"title": "Sudden vanishing of spin squeezing under decoherence", "doi": "10.1103/physreva.81.022106", "nodeyear": 2010, "ref-by-count": 76, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1027177091", "attributes": {"title": "Squeezing the collective spin of a dilute atomic ensemble by cavity feedback", "doi": "10.1103/physreva.81.021804", "nodeyear": 2010, "ref-by-count": 90, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1049014120", "attributes": {"title": "Vacuum Degeneracy of a Circuit QED System in the Ultrastrong Coupling Regime", "doi": "10.1103/physrevlett.104.023601", "nodeyear": 2010, "ref-by-count": 96, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060506993", "attributes": {"title": "Entanglement and parametric resonance in driven quantum systems", "doi": "10.1103/physreva.81.012316", "nodeyear": 2010, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1042995256", "attributes": {"title": "Quantum interface between light and atomic ensembles", "doi": "10.1103/revmodphys.82.1041", "nodeyear": 2010, "ref-by-count": 835, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1030644001", "attributes": {"title": "Finite-size behavior of quantum collective spin systems", "doi": "10.1103/physreva.81.013818", "nodeyear": 2010, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1004083979", "attributes": {"title": "Colloquium: Topological insulators", "doi": "10.1103/revmodphys.82.3045", "nodeyear": 2010, "ref-by-count": 12556, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1057929181", "attributes": {"title": "State-selective spectroscopy of water up to its first dissociation limit", "doi": "10.1063/1.3273207", "nodeyear": 2009, "ref-by-count": 52, "is_input_DOI": false, "category_for": "02:0.50;03:0.50", "level": "ref_l2"}}, {"id": "pub.1053140660", "attributes": {"title": "The physics of dipolar bosonic quantum gases", "doi": "10.1088/0034-4885/72/12/126401", "nodeyear": 2009, "ref-by-count": 1052, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1010719555", "attributes": {"title": "Theory of the Topological Anderson Insulator", "doi": "10.1103/physrevlett.103.196805", "nodeyear": 2009, "ref-by-count": 255, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1026487091", "attributes": {"title": "Extracavity quantum vacuum radiation from a single qubit", "doi": "10.1103/physreva.80.053810", "nodeyear": 2009, "ref-by-count": 163, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060756185", "attributes": {"title": "Magnetoroton Softening in Rb Spinor Condensates with Dipolar Interactions", "doi": "10.1103/physrevlett.103.185301", "nodeyear": 2009, "ref-by-count": 30, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1007113001", "attributes": {"title": "Squeezing of atomic quantum projection noise", "doi": "10.1080/09500340903033682", "nodeyear": 2009, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1012500209", "attributes": {"title": "Emergent crystallinity and frustration with Bose–Einstein condensates in multimode cavities", "doi": "10.1038/nphys1403", "nodeyear": 2009, "ref-by-count": 159, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1062460456", "attributes": {"title": "Quantum Simulators", "doi": "10.1126/science.1177838", "nodeyear": 2009, "ref-by-count": 584, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1005186218", "attributes": {"title": "Many-Body Coherent Destruction of Tunneling", "doi": "10.1103/physrevlett.103.133002", "nodeyear": 2009, "ref-by-count": 113, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1044365852", "attributes": {"title": "Unified description of inhomogeneities, dissipation and transport in quantum light–atom interfaces", "doi": "10.1088/0953-4075/42/19/195502", "nodeyear": 2009, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1009071596", "attributes": {"title": "Spin squeezing in a generalized one-axis twisting model", "doi": "10.1088/1367-2630/11/7/073049", "nodeyear": 2009, "ref-by-count": 105, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1015377513", "attributes": {"title": "Critical exponent for the quantum Hall transition", "doi": "10.1103/physrevb.80.041304", "nodeyear": 2009, "ref-by-count": 104, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1021047010", "attributes": {"title": "Mesoscopic atomic entanglement for precision measurements beyond the standard quantum limit", "doi": "10.1073/pnas.0901550106", "nodeyear": 2009, "ref-by-count": 287, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060506382", "attributes": {"title": "Fisher information and spin squeezing in the Lipkin-Meshkov-Glick model", "doi": "10.1103/physreva.80.012318", "nodeyear": 2009, "ref-by-count": 102, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1047238674", "attributes": {"title": "Quantum entanglement of spin-1 bosons with coupled ground states in optical lattices", "doi": "10.1088/0953-4075/42/14/145505", "nodeyear": 2009, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060738859", "attributes": {"title": "Spin squeezing as an indicator of quantum chaos in the Dicke model", "doi": "10.1103/physreve.79.046220", "nodeyear": 2009, "ref-by-count": 39, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1051513505", "attributes": {"title": "Spin squeezing and entanglement", "doi": "10.1103/physreva.79.042334", "nodeyear": 2009, "ref-by-count": 139, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1030702899", "attributes": {"title": "Topological Anderson Insulator", "doi": "10.1103/physrevlett.102.136806", "nodeyear": 2009, "ref-by-count": 324, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1017748089", "attributes": {"title": "Nonadiabaticity and large fluctuations in a many-particle Landau-Zener problem", "doi": "10.1103/physreva.79.042703", "nodeyear": 2009, "ref-by-count": 70, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1009280350", "attributes": {"title": "Entanglement, Nonlinear Dynamics, and the Heisenberg Limit", "doi": "10.1103/physrevlett.102.100401", "nodeyear": 2009, "ref-by-count": 540, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1023112037", "attributes": {"title": "Sub-cycle switch-on of ultrastrong light–matter interaction", "doi": "10.1038/nature07838", "nodeyear": 2009, "ref-by-count": 423, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1005768866", "attributes": {"title": "Photovoltaic Hall effect in graphene", "doi": "10.1103/physrevb.79.081406", "nodeyear": 2009, "ref-by-count": 823, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1060505399", "attributes": {"title": "Coupling strength estimation for spin chains despite restricted access", "doi": "10.1103/physreva.79.020305", "nodeyear": 2009, "ref-by-count": 81, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1028284777", "attributes": {"title": "Optimizing number squeezing when splitting a mesoscopic condensate", "doi": "10.1103/physreva.79.021603", "nodeyear": 2009, "ref-by-count": 77, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1034324600", "attributes": {"title": "Spin squeezing in the presence of dissipation", "doi": "10.1016/j.physleta.2008.12.040", "nodeyear": 2009, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1042003394", "attributes": {"title": "Spin Squeezing of a Cold Atomic Ensemble with the Nuclear Spin of One-Half", "doi": "10.1103/physrevlett.102.033601", "nodeyear": 2009, "ref-by-count": 106, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1038056243", "attributes": {"title": "Quantum phase transitions and structural evolution in nuclei", "doi": "10.1016/j.ppnp.2008.06.002", "nodeyear": 2009, "ref-by-count": 72, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1016014950", "attributes": {"title": "Quantum phase transitions in the interacting boson model", "doi": "10.1016/j.ppnp.2008.08.001", "nodeyear": 2009, "ref-by-count": 159, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1098669586", "attributes": {"title": "Introduction to Optical Quantum Information Processing", "doi": "10.1017/cbo9781139193658", "nodeyear": 2009, "ref-by-count": 201, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1019769175", "attributes": {"title": "Experimental Observation of the Anderson Metal-Insulator Transition with Atomic Matter Waves", "doi": "10.1103/physrevlett.101.255702", "nodeyear": 2008, "ref-by-count": 302, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1021978769", "attributes": {"title": "Relationship between spin squeezing and single-particle coherence in two-component Bose-Einstein condensates with Josephson coupling", "doi": "10.1103/physreva.78.063620", "nodeyear": 2008, "ref-by-count": 35, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1024053463", "attributes": {"title": "Fully connected network of superconducting qubits in a cavity", "doi": "10.1088/1367-2630/10/11/113020", "nodeyear": 2008, "ref-by-count": 43, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1039526439", "attributes": {"title": "Magnetic Dipolar Interaction in a Bose-Einstein Condensate Atomic Interferometer", "doi": "10.1103/physrevlett.101.190405", "nodeyear": 2008, "ref-by-count": 85, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1032879437", "attributes": {"title": "Dynamical properties across a quantum phase transition in the Lipkin-Meshkov-Glick model", "doi": "10.1103/physreva.78.052329", "nodeyear": 2008, "ref-by-count": 17, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1030554066", "attributes": {"title": "Squeezing and entanglement in a Bose–Einstein condensate", "doi": "10.1038/nature07332", "nodeyear": 2008, "ref-by-count": 567, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1037292429", "attributes": {"title": "Quantum criticality as a resource for quantum estimation", "doi": "10.1103/physreva.78.042105", "nodeyear": 2008, "ref-by-count": 134, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1015752685", "attributes": {"title": "Formation of Ultracold Polar Molecules in the Rovibrational Ground State", "doi": "10.1103/physrevlett.101.133004", "nodeyear": 2008, "ref-by-count": 497, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1062458662", "attributes": {"title": "A High Phase-Space-Density Gas of Polar Molecules", "doi": "10.1126/science.1163861", "nodeyear": 2008, "ref-by-count": 1412, "is_input_DOI": false, "category_for": "03:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1000524935", "attributes": {"title": "Boundary criticality at the Anderson transition between a metal and a quantum spin Hall insulator in two dimensions", "doi": "10.1103/physrevb.78.115301", "nodeyear": 2008, "ref-by-count": 39, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1019072925", "attributes": {"title": "Adiabatic quantum dynamics of the Lipkin-Meshkov-Glick model", "doi": "10.1103/physrevb.78.104426", "nodeyear": 2008, "ref-by-count": 70, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1018429633", "attributes": {"title": "Reconstruction of non-classical cavity field states with snapshots of their decoherence", "doi": "10.1038/nature07288", "nodeyear": 2008, "ref-by-count": 404, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1029186926", "attributes": {"title": "Spin Squeezing of Atomic Ensembles via Nuclear-Electronic Spin Entanglement", "doi": "10.1103/physrevlett.101.073601", "nodeyear": 2008, "ref-by-count": 106, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1049572504", "attributes": {"title": "Quantum Metrology: Dynamics versus Entanglement", "doi": "10.1103/physrevlett.101.040403", "nodeyear": 2008, "ref-by-count": 153, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1036114834", "attributes": {"title": "Equivalence of Critical Scaling Laws for Many-Body Entanglement in the Lipkin-Meshkov-Glick Model", "doi": "10.1103/physrevlett.101.025701", "nodeyear": 2008, "ref-by-count": 134, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1042980616", "attributes": {"title": "Spin squeezing in optical lattice clocks via lattice-based QND measurements", "doi": "10.1088/1367-2630/10/7/073014", "nodeyear": 2008, "ref-by-count": 39, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060625484", "attributes": {"title": "Classical dynamics of resonantly modulated large-spin systems", "doi": "10.1103/physrevb.78.024401", "nodeyear": 2008, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1006613232", "attributes": {"title": "Computational molecular spectroscopy for X∼2Δ NiCN: Large-amplitude bending motion", "doi": "10.1016/j.jms.2008.04.001", "nodeyear": 2008, "ref-by-count": 19, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1014259920", "attributes": {"title": "Optimum Spin Squeezing in Bose-Einstein Condensates with Particle Losses", "doi": "10.1103/physrevlett.100.210401", "nodeyear": 2008, "ref-by-count": 110, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1007403980", "attributes": {"title": "Near infrared emission spectrum of HCN", "doi": "10.1016/j.jms.2008.01.006", "nodeyear": 2008, "ref-by-count": 25, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1046531133", "attributes": {"title": "The squeeze goes on", "doi": "10.1038/453045a", "nodeyear": 2008, "ref-by-count": 43, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1021493626", "attributes": {"title": "Self-organization of a Bose-Einstein condensate in an optical cavity", "doi": "10.1140/epjd/e2008-00074-6", "nodeyear": 2008, "ref-by-count": 143, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1023551219", "attributes": {"title": "Electric-dipole-forbidden nuclear transitions driven by super-intense laser fields", "doi": "10.1103/physrevc.77.044602", "nodeyear": 2008, "ref-by-count": 37, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1018345323", "attributes": {"title": "Collective spin systems in dispersive optical cavity QED: Quantum phase transitions and entanglement", "doi": "10.1103/physreva.77.043810", "nodeyear": 2008, "ref-by-count": 53, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1045592513", "attributes": {"title": "The quadratic spin squeezing operators", "doi": "10.1088/1751-8113/41/14/145302", "nodeyear": 2008, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060504243", "attributes": {"title": "Algebraic approach to two-dimensional systems: Shape phase transitions, monodromy, and thermodynamic quantities", "doi": "10.1103/physreva.77.032115", "nodeyear": 2008, "ref-by-count": 84, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1004419214", "attributes": {"title": "Entanglement and squeezing of multi-qubit systems using a two-axis countertwisting Hamiltonian with an external field", "doi": "10.1016/j.physleta.2007.12.021", "nodeyear": 2008, "ref-by-count": 24, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1013094749", "attributes": {"title": "Stabilization of a purely dipolar quantum gas against collapse", "doi": "10.1038/nphys887", "nodeyear": 2008, "ref-by-count": 328, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1001441208", "attributes": {"title": "Ultracold atoms in optical lattices generated by quantized light fields", "doi": "10.1140/epjd/e2008-00016-4", "nodeyear": 2008, "ref-by-count": 119, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1048347725", "attributes": {"title": "Dynamical Quantum Phase Transitions in the Dissipative Lipkin-Meshkov-Glick Model with Proposed Realization in Optical Cavity QED", "doi": "10.1103/physrevlett.100.040403", "nodeyear": 2008, "ref-by-count": 124, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1011465158", "attributes": {"title": "Collective Atomic Recoil Lasing and Superradiant Rayleigh Scattering in a high‐Q ring cavity", "doi": "10.1063/1.2839129", "nodeyear": 2008, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060839663", "attributes": {"title": "Entanglement in many-body systems", "doi": "10.1103/revmodphys.80.517", "nodeyear": 2008, "ref-by-count": 2366, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1042363867", "attributes": {"title": "Anderson transitions", "doi": "10.1103/revmodphys.80.1355", "nodeyear": 2008, "ref-by-count": 1131, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1013088353", "attributes": {"title": "Many-body physics with ultracold gases", "doi": "10.1103/revmodphys.80.885", "nodeyear": 2008, "ref-by-count": 5682, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1020731266", "attributes": {"title": "Optimal Spin Squeezing Inequalities Detect Bound Entanglement in Spin Models", "doi": "10.1103/physrevlett.99.250405", "nodeyear": 2007, "ref-by-count": 168, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1021708856", "attributes": {"title": "Dynamical Control of Matter-Wave Tunneling in Periodic Potentials", "doi": "10.1103/physrevlett.99.220403", "nodeyear": 2007, "ref-by-count": 478, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1050049937", "attributes": {"title": "Tuning phase transition between quantum spin Hall and ordinary insulating phases", "doi": "10.1103/physrevb.76.205304", "nodeyear": 2007, "ref-by-count": 106, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1050275996", "attributes": {"title": "Quantum-limited measurements of atomic scattering properties", "doi": "10.1103/physreva.76.053617", "nodeyear": 2007, "ref-by-count": 45, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060834776", "attributes": {"title": "Storage of Spin Squeezing in a Two-Component Bose-Einstein Condensate", "doi": "10.1103/physrevlett.99.170405", "nodeyear": 2007, "ref-by-count": 55, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1013564949", "attributes": {"title": "Generalized Rotating-Wave Approximation for Arbitrarily Large Coupling", "doi": "10.1103/physrevlett.99.173601", "nodeyear": 2007, "ref-by-count": 227, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1044299159", "attributes": {"title": "Spin squeezing and maximal-squeezing time", "doi": "10.1103/physreva.76.043621", "nodeyear": 2007, "ref-by-count": 43, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1034685599", "attributes": {"title": "Quantum Spin Hall Insulator State in HgTe Quantum Wells", "doi": "10.1126/science.1148047", "nodeyear": 2007, "ref-by-count": 4255, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1041879228", "attributes": {"title": "Functional methods in the generalized Dicke model", "doi": "10.1088/1751-8113/40/39/016", "nodeyear": 2007, "ref-by-count": 17, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1032603162", "attributes": {"title": "Conditional squeezing of an atomic alignment", "doi": "10.1103/physreva.76.033830", "nodeyear": 2007, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1014388554", "attributes": {"title": "Fidelity, dynamic structure factor, and susceptibility in critical phenomena", "doi": "10.1103/physreve.76.022101", "nodeyear": 2007, "ref-by-count": 366, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1048139891", "attributes": {"title": "Thermodynamical Limit of the Lipkin-Meshkov-Glick Model", "doi": "10.1103/physrevlett.99.050402", "nodeyear": 2007, "ref-by-count": 152, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060621943", "attributes": {"title": "Period-voltage-driven quantum phase transition of superconducting charge qubits", "doi": "10.1103/physrevb.76.054512", "nodeyear": 2007, "ref-by-count": 3, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1037196319", "attributes": {"title": "Two-mode squeezed states and entangled states of two mechanical resonators", "doi": "10.1103/physrevb.76.064305", "nodeyear": 2007, "ref-by-count": 78, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1019211121", "attributes": {"title": "Two-dimensional spin-filtered chiral network model for the Z2 quantum spin-Hall effect", "doi": "10.1103/physrevb.76.075301", "nodeyear": 2007, "ref-by-count": 73, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1031310290", "attributes": {"title": "Strong dipolar effects in a quantum ferrofluid", "doi": "10.1038/nature06036", "nodeyear": 2007, "ref-by-count": 387, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1031979890", "attributes": {"title": "Topological insulators with inversion symmetry", "doi": "10.1103/physrevb.76.045302", "nodeyear": 2007, "ref-by-count": 2860, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1032955577", "attributes": {"title": "Probing the superfluid–Mott-insulating shell structure of cold atoms by parametric excitations", "doi": "10.1103/physreva.75.063612", "nodeyear": 2007, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1014943403", "attributes": {"title": "Two-level systems driven by large-amplitude fields", "doi": "10.1103/physreva.75.063414", "nodeyear": 2007, "ref-by-count": 179, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1023231651", "attributes": {"title": "Study of squeezing in spin clusters", "doi": "10.1016/j.physleta.2007.02.007", "nodeyear": 2007, "ref-by-count": 13, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1016531939", "attributes": {"title": "High-Resolution Magnetometry with a Spinor Bose-Einstein Condensate", "doi": "10.1103/physrevlett.98.200801", "nodeyear": 2007, "ref-by-count": 169, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1022911870", "attributes": {"title": "Localization in a Quantum Spin Hall System", "doi": "10.1103/physrevlett.98.076802", "nodeyear": 2007, "ref-by-count": 110, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060503021", "attributes": {"title": "Spatial dynamics and spin squeezing in Bose-Einstein condensates", "doi": "10.1103/physreva.75.023618", "nodeyear": 2007, "ref-by-count": 9, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1037722040", "attributes": {"title": "Extended Coherence Time with Atom-Number Squeezed States", "doi": "10.1103/physrevlett.98.040402", "nodeyear": 2007, "ref-by-count": 59, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1023876405", "attributes": {"title": "Entanglement entropy in collective models", "doi": "10.1088/1742-5468/2007/01/p01015", "nodeyear": 2007, "ref-by-count": 69, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1039655036", "attributes": {"title": "Long Phase Coherence Time and Number Squeezing of Two Bose-Einstein Condensates on an Atom Chip", "doi": "10.1103/physrevlett.98.030407", "nodeyear": 2007, "ref-by-count": 260, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1046281967", "attributes": {"title": "Proposed realization of the Dicke-model quantum phase transition in an optical cavity QED system", "doi": "10.1103/physreva.75.013804", "nodeyear": 2007, "ref-by-count": 370, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1030957871", "attributes": {"title": "Quantum Spin Hall Effect and Topological Phase Transition in HgTe Quantum Wells", "doi": "10.1126/science.1133734", "nodeyear": 2006, "ref-by-count": 4665, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1042138928", "attributes": {"title": "Generation and storage of quantum states using cold atoms", "doi": "10.1080/09500340600894048", "nodeyear": 2006, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1017626170", "attributes": {"title": "Generalized spin-squeezing inequalities in N-qubit systems: Theory and experiment", "doi": "10.1103/physreva.74.052319", "nodeyear": 2006, "ref-by-count": 69, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1047521083", "attributes": {"title": "Infrared emission spectrum of hot D2O", "doi": "10.1016/j.jms.2006.09.007", "nodeyear": 2006, "ref-by-count": 41, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1040258398", "attributes": {"title": "Efficient Quantum-State Estimation by Continuous Weak Measurement and Dynamical Control", "doi": "10.1103/physrevlett.97.180403", "nodeyear": 2006, "ref-by-count": 61, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1022807668", "attributes": {"title": "Adiabatic Mach-Zehnder Interferometry on a Quantized Bose-Josephson Junction", "doi": "10.1103/physrevlett.97.150402", "nodeyear": 2006, "ref-by-count": 95, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060502673", "attributes": {"title": "Polarization squeezing and nonclassical properties of light", "doi": "10.1103/physreva.74.043817", "nodeyear": 2006, "ref-by-count": 56, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1029816697", "attributes": {"title": "Infinite-range Ising ferromagnet in a time-dependent transverse magnetic field: Quench and ac dynamics near the quantum critical point", "doi": "10.1103/physrevb.74.144423", "nodeyear": 2006, "ref-by-count": 79, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1017123471", "attributes": {"title": "The hidden kernel of molecular quasi-linearity: Quantum monodromy", "doi": "10.1016/j.molstruc.2006.06.036", "nodeyear": 2006, "ref-by-count": 64, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1030627369", "attributes": {"title": "Scaling behavior of the adiabatic Dicke model", "doi": "10.1103/physreva.74.022324", "nodeyear": 2006, "ref-by-count": 39, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1036259707", "attributes": {"title": "Quantum transport phenomena in disordered electron systems with spin–orbit coupling in two dimensions and below", "doi": "10.1016/j.physe.2006.03.102", "nodeyear": 2006, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1043762285", "attributes": {"title": "Concurrence in collective models", "doi": "10.1103/physreva.73.062318", "nodeyear": 2006, "ref-by-count": 65, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1012449759", "attributes": {"title": "Tuning the Mott Transition in a Bose-Einstein Condensate by Multiple Photon Absorption", "doi": "10.1103/physrevlett.96.210403", "nodeyear": 2006, "ref-by-count": 84, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1027944496", "attributes": {"title": "Finite-size scaling exponents in the Dicke model", "doi": "10.1209/epl/i2006-10041-9", "nodeyear": 2006, "ref-by-count": 133, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1044935711", "attributes": {"title": "Critical regime of two-dimensional Ando model: relation between critical conductance and fractal dimension of electronic eigenstates", "doi": "10.1088/0305-4470/39/13/003", "nodeyear": 2006, "ref-by-count": 40, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1041063912", "attributes": {"title": "Probing Number Squeezing of Ultracold Atoms across the Superfluid-Mott Insulator Transition", "doi": "10.1103/physrevlett.96.090401", "nodeyear": 2006, "ref-by-count": 89, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1017239584", "attributes": {"title": "Quantum Metrology", "doi": "10.1103/physrevlett.96.010401", "nodeyear": 2006, "ref-by-count": 1266, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060839612", "attributes": {"title": "Dynamics of Bose-Einstein condensates in optical lattices", "doi": "10.1103/revmodphys.78.179", "nodeyear": 2006, "ref-by-count": 1217, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060501875", "attributes": {"title": "Coherence dynamics of two-mode condensates in asymmetric potentials", "doi": "10.1103/physreva.73.013602", "nodeyear": 2006, "ref-by-count": 25, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1042812951", "attributes": {"title": "Generating conditional atomic entanglement by measuring photon number in a single output channel", "doi": "10.1103/physreva.73.013801", "nodeyear": 2006, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1043998630", "attributes": {"title": "Superfluid-Insulator Transition in a Periodically Driven Optical Lattice", "doi": "10.1103/physrevlett.95.260404", "nodeyear": 2005, "ref-by-count": 420, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1052164705", "attributes": {"title": "Cold Atom Dynamics in a Quantum Optical Lattice Potential", "doi": "10.1103/physrevlett.95.260401", "nodeyear": 2005, "ref-by-count": 146, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059141664", "attributes": {"title": "Simultaneous squeezing of two orthogonal spin components", "doi": "10.1088/1464-4266/7/12/046", "nodeyear": 2005, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1026041336", "attributes": {"title": "Quantum Spin Hall Effect in Graphene", "doi": "10.1103/physrevlett.95.226801", "nodeyear": 2005, "ref-by-count": 5229, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1002431819", "attributes": {"title": "Conditions for spin squeezing in a cold87Rb ensemble", "doi": "10.1088/1464-4266/7/12/016", "nodeyear": 2005, "ref-by-count": 35, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1013722826", "attributes": {"title": "Superconducting Circuits and Quantum Information", "doi": "10.1063/1.2155757", "nodeyear": 2005, "ref-by-count": 754, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1046878062", "attributes": {"title": "Spectroscopic signatures of nonrigidity: Algebraic analyses of infrared and Raman transitions in nonrigid species", "doi": "10.1016/j.cplett.2005.07.119", "nodeyear": 2005, "ref-by-count": 35, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1010453004", "attributes": {"title": "Monodromy in the water molecule", "doi": "10.1016/j.cplett.2005.08.028", "nodeyear": 2005, "ref-by-count": 70, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1042249380", "attributes": {"title": "Z2 Topological Order and the Quantum Spin Hall Effect", "doi": "10.1103/physrevlett.95.146802", "nodeyear": 2005, "ref-by-count": 4283, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1023373666", "attributes": {"title": "Long-Lived Quantum Memory with Nuclear Atomic Spins", "doi": "10.1103/physrevlett.95.123002", "nodeyear": 2005, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1032459275", "attributes": {"title": "Spin Squeezing Inequalities and Entanglement of N Qubit States", "doi": "10.1103/physrevlett.95.120502", "nodeyear": 2005, "ref-by-count": 147, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1051688434", "attributes": {"title": "Quantum squeezing and entanglement in a two-mode Bose-Einstein condensate with time-dependent Josephson-like coupling", "doi": "10.1103/physreva.72.033612", "nodeyear": 2005, "ref-by-count": 39, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1020459025", "attributes": {"title": "Dynamics of a Quantum Phase Transition", "doi": "10.1103/physrevlett.95.105701", "nodeyear": 2005, "ref-by-count": 512, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1041985067", "attributes": {"title": "Continuous unitary transformations and finite-size scaling exponents in the Lipkin-Meshkov-Glick model", "doi": "10.1103/physrevb.71.224420", "nodeyear": 2005, "ref-by-count": 187, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1015653335", "attributes": {"title": "Bose-Einstein Condensation of Chromium", "doi": "10.1103/physrevlett.94.160401", "nodeyear": 2005, "ref-by-count": 892, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1019064484", "attributes": {"title": "Equivalence between two-mode spin squeezed states and pure entangled states with equal spin", "doi": "10.1088/0305-4470/38/14/l01", "nodeyear": 2005, "ref-by-count": 6, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1052759525", "attributes": {"title": "Coherent and collective quantum optical effects in mesoscopic systems", "doi": "10.1016/j.physrep.2004.12.002", "nodeyear": 2005, "ref-by-count": 361, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059052509", "attributes": {"title": "Spin Squeezing and Entanglement of Many-Particle Spin-Half States", "doi": "10.1088/0256-307x/22/2/002", "nodeyear": 2005, "ref-by-count": 9, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1006251427", "attributes": {"title": "Spin Squeezing via One-Axis Twisting with Coherent Light", "doi": "10.1103/physrevlett.94.023003", "nodeyear": 2005, "ref-by-count": 68, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060839596", "attributes": {"title": "Colloquium: Bulk Bogoliubov excitations in a Bose-Einstein condensate", "doi": "10.1103/revmodphys.77.187", "nodeyear": 2005, "ref-by-count": 148, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1026031618", "attributes": {"title": "Magnetometry with entangled atomic samples", "doi": "10.1103/physreva.71.012312", "nodeyear": 2005, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1062451106", "attributes": {"title": "Quantum-Enhanced Measurements: Beating the Standard Quantum Limit", "doi": "10.1126/science.1104149", "nodeyear": 2004, "ref-by-count": 1731, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1049164678", "attributes": {"title": "Atomic squeezing under collective emission", "doi": "10.1103/physreva.70.053828", "nodeyear": 2004, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1033004759", "attributes": {"title": "Spin squeezing and precision probing with light and samples of atoms in the Gaussian description", "doi": "10.1103/physreva.70.052324", "nodeyear": 2004, "ref-by-count": 84, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1027890249", "attributes": {"title": "Can a Quantum Nondemolition Measurement Improve the Sensitivity of an Atomic Magnetometer?", "doi": "10.1103/physrevlett.93.173002", "nodeyear": 2004, "ref-by-count": 92, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1038529836", "attributes": {"title": "Continuous Weak Measurement and Nonlinear Dynamics in a Cold Spin Ensemble", "doi": "10.1103/physrevlett.93.163602", "nodeyear": 2004, "ref-by-count": 78, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1039525977", "attributes": {"title": "Numerical estimation of the β function in two-dimensional systems with spin-orbit coupling", "doi": "10.1103/physrevb.70.035115", "nodeyear": 2004, "ref-by-count": 52, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1016807636", "attributes": {"title": "Correlated motion of two atoms trapped in a single-mode cavity field", "doi": "10.1103/physreva.70.013414", "nodeyear": 2004, "ref-by-count": 30, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1062449614", "attributes": {"title": "Toward Heisenberg-Limited Spectroscopy with Multiparticle Entangled States", "doi": "10.1126/science.1097576", "nodeyear": 2004, "ref-by-count": 417, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060828404", "attributes": {"title": "Quantum Phase Transitions in Mesoscopic Systems", "doi": "10.1103/physrevlett.92.212501", "nodeyear": 2004, "ref-by-count": 151, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1039875361", "attributes": {"title": "Entanglement detection in optical lattices of bosonic atoms with collective measurements", "doi": "10.1103/physreva.69.052327", "nodeyear": 2004, "ref-by-count": 53, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1051955120", "attributes": {"title": "Quantum-state transfer between fields and atoms in electromagnetically induced transparency", "doi": "10.1103/physreva.69.043810", "nodeyear": 2004, "ref-by-count": 85, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1022201659", "attributes": {"title": "Entanglement and the Phase Transition in Single-Mode Superradiance", "doi": "10.1103/physrevlett.92.073602", "nodeyear": 2004, "ref-by-count": 353, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1008096035", "attributes": {"title": "Entanglement in a second-order quantum phase transition", "doi": "10.1103/physreva.69.022107", "nodeyear": 2004, "ref-by-count": 241, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1045377669", "attributes": {"title": "Nonsymmetric Entanglement of Atomic Ensembles", "doi": "10.1103/physrevlett.92.030407", "nodeyear": 2004, "ref-by-count": 31, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1042239422", "attributes": {"title": "Spin squeezing as a measure of entanglement in a two-qubit system", "doi": "10.1103/physreva.68.064301", "nodeyear": 2003, "ref-by-count": 19, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1046807340", "attributes": {"title": "Bose-Einstein condensates in 1D optical lattices", "doi": "10.1140/epjd/e2003-00284-4", "nodeyear": 2003, "ref-by-count": 101, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1019738669", "attributes": {"title": "EIT-assisted atomic squeezing", "doi": "10.1140/epjd/e2003-00253-y", "nodeyear": 2003, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1006013499", "attributes": {"title": "Quasi-Spin-Wave Quantum Memories with a Dynamical Symmetry", "doi": "10.1103/physrevlett.91.147903", "nodeyear": 2003, "ref-by-count": 118, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1012640711", "attributes": {"title": "Entanglement and spin squeezing of Bose-Einstein-condensed atoms", "doi": "10.1103/physreva.68.043622", "nodeyear": 2003, "ref-by-count": 31, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1003190826", "attributes": {"title": "Spin squeezing and pairwise entanglement for symmetric multiqubit states", "doi": "10.1103/physreva.68.012101", "nodeyear": 2003, "ref-by-count": 174, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1009926257", "attributes": {"title": "A novel algebraic scheme for describing nonrigid molecules", "doi": "10.1016/s0009-2614(03)00851-0", "nodeyear": 2003, "ref-by-count": 45, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1028628834", "attributes": {"title": "Roton-Maxon Spectrum and Stability of Trapped Dipolar Bose-Einstein Condensates", "doi": "10.1103/physrevlett.90.250403", "nodeyear": 2003, "ref-by-count": 412, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1021921669", "attributes": {"title": "Chaos and the quantum phase transition in the Dicke model", "doi": "10.1103/physreve.67.066203", "nodeyear": 2003, "ref-by-count": 517, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1042658200", "attributes": {"title": "Spin Squeezing Criterion with Local Unitary Invariance", "doi": "10.1023/b:qinp.0000004125.12489.f4", "nodeyear": 2003, "ref-by-count": 23, "is_input_DOI": false, "category_for": "08:0.33;02:0.33;01:0.33", "level": "ref_l2"}}, {"id": "pub.1059137934", "attributes": {"title": "Quantum atom optics with Bose-Einstein condensates", "doi": "10.1088/1367-2630/5/1/355", "nodeyear": 2003, "ref-by-count": 17, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1027685238", "attributes": {"title": "Atomic spin squeezing in a Λ system", "doi": "10.1103/physreva.67.045801", "nodeyear": 2003, "ref-by-count": 34, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1038116055", "attributes": {"title": "Rotons in Gaseous Bose-Einstein Condensates Irradiated by a Laser", "doi": "10.1103/physrevlett.90.110402", "nodeyear": 2003, "ref-by-count": 139, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1034352273", "attributes": {"title": "Characterizing the entanglement of symmetric many-particle spin-12 systems", "doi": "10.1103/physreva.67.022112", "nodeyear": 2003, "ref-by-count": 161, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1002415192", "attributes": {"title": "Entangling two Bose-Einstein condensates by stimulated Bragg scattering", "doi": "10.1103/physreva.67.023603", "nodeyear": 2003, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1057717131", "attributes": {"title": "Spectroscopically determined potential energy surface of H216O up to 25 000 cm−1", "doi": "10.1063/1.1532001", "nodeyear": 2003, "ref-by-count": 92, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1010954675", "attributes": {"title": "The effective potential of squeezed spin states", "doi": "10.1016/s0375-9601(02)01796-6", "nodeyear": 2003, "ref-by-count": 7, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1034618848", "attributes": {"title": "Quantum Chaos Triggered by Precursors of a Quantum Phase Transition: The Dicke Model", "doi": "10.1103/physrevlett.90.044101", "nodeyear": 2003, "ref-by-count": 378, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060825740", "attributes": {"title": "Collective Cooling and Self-Organization of Atoms in a Cavity", "doi": "10.1103/physrevlett.89.253003", "nodeyear": 2002, "ref-by-count": 296, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1048466090", "attributes": {"title": "Preparation of spin-squeezed atomic states by optical-phase-shift measurement", "doi": "10.1103/physreva.66.043811", "nodeyear": 2002, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060825411", "attributes": {"title": "Interferometry below the Standard Quantum Limit with Bose-Einstein Condensates", "doi": "10.1103/physrevlett.89.150401", "nodeyear": 2002, "ref-by-count": 88, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1056050981", "attributes": {"title": "Ab Initio Potential Energy Surface and Vibrational−Rotational Energy Levels of X2Σ+ CaOH", "doi": "10.1021/jp026283u", "nodeyear": 2002, "ref-by-count": 169, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1033188547", "attributes": {"title": "Spin squeezing and entanglement in spinor condensates", "doi": "10.1103/physreva.66.033611", "nodeyear": 2002, "ref-by-count": 41, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1032117943", "attributes": {"title": "Collapse and revival of the matter wave field of a Bose–Einstein condensate", "doi": "10.1038/nature00968", "nodeyear": 2002, "ref-by-count": 968, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1010607212", "attributes": {"title": "The Electronic Spectrum of NiCN in the Visible Region", "doi": "10.1006/jmsp.2002.8608", "nodeyear": 2002, "ref-by-count": 33, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1043952833", "attributes": {"title": "Entangling atoms in bad cavities", "doi": "10.1103/physreva.66.022314", "nodeyear": 2002, "ref-by-count": 65, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1052781356", "attributes": {"title": "Single-mode approximation in a spinor-1 atomic condensate", "doi": "10.1103/physreva.66.011601", "nodeyear": 2002, "ref-by-count": 119, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1020003088", "attributes": {"title": "Near-optimal two-mode spin squeezing via feedback", "doi": "10.1103/physreva.66.012313", "nodeyear": 2002, "ref-by-count": 19, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1003363712", "attributes": {"title": "Spectroscopic Description of H2O in the su(2) Vibron Model Approximation", "doi": "10.1006/jmsp.2002.8571", "nodeyear": 2002, "ref-by-count": 37, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1029415952", "attributes": {"title": "Generation of maximum spin entanglement induced by a cavity field in quantum-dot systems", "doi": "10.1103/physreva.65.062321", "nodeyear": 2002, "ref-by-count": 47, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1021091851", "attributes": {"title": "Mixed collective states of many spins", "doi": "10.1103/physreva.65.062304", "nodeyear": 2002, "ref-by-count": 36, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1016883152", "attributes": {"title": "Robustness of multiparty entanglement", "doi": "10.1103/physreva.65.052327", "nodeyear": 2002, "ref-by-count": 129, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1008334218", "attributes": {"title": "Atom correlations and spin squeezing near the Heisenberg limit: Finite-size effect and decoherence", "doi": "10.1103/physreva.65.053819", "nodeyear": 2002, "ref-by-count": 62, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060498076", "attributes": {"title": "Spin squeezing of atoms by the dipole interaction in virtually excited Rydberg states", "doi": "10.1103/physreva.65.041803", "nodeyear": 2002, "ref-by-count": 98, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1003953015", "attributes": {"title": "Excitation Spectrum of a Bose-Einstein Condensate", "doi": "10.1103/physrevlett.88.120407", "nodeyear": 2002, "ref-by-count": 255, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1034030383", "attributes": {"title": "Dynamically turning off interactions in a two-component condensate", "doi": "10.1103/physreva.65.033625", "nodeyear": 2002, "ref-by-count": 17, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1036288955", "attributes": {"title": "Pairwise entanglement in symmetric multi-qubit systems", "doi": "10.1140/epjd/e20020045", "nodeyear": 2002, "ref-by-count": 128, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1011656566", "attributes": {"title": "Quantum entanglement in spinor Bose-Einstein condensates", "doi": "10.1103/physreva.65.033619", "nodeyear": 2002, "ref-by-count": 75, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1048054732", "attributes": {"title": "Quantum teleportation and entanglement swapping for spin systems", "doi": "10.1088/1367-2630/4/1/308", "nodeyear": 2002, "ref-by-count": 19, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059141222", "attributes": {"title": "`Nonclassical' states in quantum optics: a `squeezed' review of the first 75 years", "doi": "10.1088/1464-4266/4/1/201", "nodeyear": 2002, "ref-by-count": 632, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1027887936", "attributes": {"title": "Collective atomic spin squeezing and control", "doi": "10.1140/e10053-002-0014-7", "nodeyear": 2002, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1000339972", "attributes": {"title": "Creating entangled atomic pairs by photodissociation", "doi": "10.1088/0953-4075/34/24/310", "nodeyear": 2001, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:0.60;03:0.40", "level": "ref_l2"}}, {"id": "pub.1044105212", "attributes": {"title": "Spin squeezing in the Ising model", "doi": "10.1103/physreva.64.053815", "nodeyear": 2001, "ref-by-count": 30, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060497638", "attributes": {"title": "Spin squeezing and decoherence limit in Ramsey spectroscopy", "doi": "10.1103/physreva.64.052106", "nodeyear": 2001, "ref-by-count": 103, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1045391551", "attributes": {"title": "Quantum state transfer from light beams to atomic ensembles", "doi": "10.1007/s100530170045", "nodeyear": 2001, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1008192613", "attributes": {"title": "Experimental long-lived entanglement of two macroscopic objects", "doi": "10.1038/35096524", "nodeyear": 2001, "ref-by-count": 882, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1057699225", "attributes": {"title": "Experimental Energy Levels of the Water Molecule", "doi": "10.1063/1.1364517", "nodeyear": 2001, "ref-by-count": 214, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1032609059", "attributes": {"title": "Coherent control of spin squeezing", "doi": "10.1103/physreva.63.055601", "nodeyear": 2001, "ref-by-count": 88, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1053418337", "attributes": {"title": "Spin squeezing in nonlinear spin-coherent states", "doi": "10.1088/1464-4266/3/3/304", "nodeyear": 2001, "ref-by-count": 29, "is_input_DOI": false, "category_for": "02:0.60;03:0.40", "level": "ref_l2"}}, {"id": "pub.1062444393", "attributes": {"title": "Squeezed States in a Bose-Einstein Condensate", "doi": "10.1126/science.1058149", "nodeyear": 2001, "ref-by-count": 697, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059141143", "attributes": {"title": "Mapping a quantum state of light onto atoms", "doi": "10.1088/1464-4266/3/1/365", "nodeyear": 2001, "ref-by-count": 18, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1025684815", "attributes": {"title": "Generation of arbitrary Dicke states in spinor Bose–Einstein condensates", "doi": "10.1016/s0030-4018(00)01163-9", "nodeyear": 2001, "ref-by-count": 66, "is_input_DOI": false, "category_for": "09:0.33;10:0.33;02:0.33", "level": "ref_l2"}}, {"id": "pub.1043414338", "attributes": {"title": "Many-particle entanglement with Bose–Einstein condensates", "doi": "10.1038/35051038", "nodeyear": 2001, "ref-by-count": 739, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1042326365", "attributes": {"title": "Atomic Quantum State Teleportation and Swapping", "doi": "10.1103/physrevlett.85.5639", "nodeyear": 2000, "ref-by-count": 136, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060496772", "attributes": {"title": "Spin squeezing in two-level systems", "doi": "10.1103/physreva.62.063812", "nodeyear": 2000, "ref-by-count": 50, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1006586634", "attributes": {"title": "Squeezing and Entanglement of Atomic Beams", "doi": "10.1103/physrevlett.85.3991", "nodeyear": 2000, "ref-by-count": 183, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1037329755", "attributes": {"title": "Iterative algorithm versus analytic solutions of the parametrically driven dissipative quantum harmonic oscillator", "doi": "10.1103/physreve.62.5808", "nodeyear": 2000, "ref-by-count": 65, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1032013208", "attributes": {"title": "Dark-State Polaritons in Electromagnetically Induced Transparency", "doi": "10.1103/physrevlett.84.5094", "nodeyear": 2000, "ref-by-count": 1304, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060821199", "attributes": {"title": "Observation of Cavity-Mediated Long-Range Light Forces between Strongly Coupled Atoms", "doi": "10.1103/physrevlett.84.4068", "nodeyear": 2000, "ref-by-count": 55, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1010029009", "attributes": {"title": "Entanglement of Atomic Ensembles by Trapping Correlated Photon States", "doi": "10.1103/physrevlett.84.4232", "nodeyear": 2000, "ref-by-count": 345, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1019244542", "attributes": {"title": "Experimental entanglement of four particles", "doi": "10.1038/35005011", "nodeyear": 2000, "ref-by-count": 1082, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1019463277", "attributes": {"title": "Eigenvalue and Eigenfunction of n-Mode Boson Quadratic Hamiltonian", "doi": "10.1023/a:1003600729222", "nodeyear": 2000, "ref-by-count": 4, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1058075670", "attributes": {"title": "High resolution spectroscopy of MgOH (X 2Σ+) in its V2 mode: Further evidence for quasilinearity", "doi": "10.1063/1.480455", "nodeyear": 1999, "ref-by-count": 32, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1098909552", "attributes": {"title": "Quantum Dissipative Systems", "doi": "10.1142/4239", "nodeyear": 1999, "ref-by-count": 1276, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1060495410", "attributes": {"title": "Finite Kerr medium: Macroscopic quantum superposition states and Wigner functions on the sphere", "doi": "10.1103/physreva.60.1817", "nodeyear": 1999, "ref-by-count": 54, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060819856", "attributes": {"title": "Spin Squeezed Atoms: A Macroscopic Entangled Ensemble Created by Light", "doi": "10.1103/physrevlett.83.1319", "nodeyear": 1999, "ref-by-count": 419, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1046740497", "attributes": {"title": "Direct measurement of the Wigner function by photon counting", "doi": "10.1103/physreva.60.674", "nodeyear": 1999, "ref-by-count": 140, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1020099649", "attributes": {"title": "Bragg Spectroscopy of a Bose-Einstein Condensate", "doi": "10.1103/physrevlett.82.4569", "nodeyear": 1999, "ref-by-count": 601, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1017192838", "attributes": {"title": "HDO and D2O Low Pressure, Long Path Spectra in the 600–3100 cm−1Region II. D2O Line Positions and Strengths", "doi": "10.1006/jmsp.1999.7815", "nodeyear": 1999, "ref-by-count": 50, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1003804610", "attributes": {"title": "Analytical solutions for the LMG model", "doi": "10.1016/s0370-2693(99)00191-4", "nodeyear": 1999, "ref-by-count": 64, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1026394040", "attributes": {"title": "Quantum monodromy in the spectrum of H2O and other systems: new insight into the level structure of quasi-linear molecules", "doi": "10.1080/00268979909482971", "nodeyear": 1999, "ref-by-count": 77, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1041161303", "attributes": {"title": "Twin-correlations in atoms", "doi": "10.1007/s100530050259", "nodeyear": 1999, "ref-by-count": 32, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1029889092", "attributes": {"title": "Governing dynamics by squeezing in a system of cold trapped ions", "doi": "10.1103/physreva.59.736", "nodeyear": 1999, "ref-by-count": 1, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1050841175", "attributes": {"title": "The Dicke model dynamics in a high detuning limit", "doi": "10.1016/s0375-9601(98)00529-5", "nodeyear": 1998, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060817691", "attributes": {"title": "Quantum Dynamical Manifestation of Chaotic Behavior in the Process of Entanglement", "doi": "10.1103/physrevlett.80.5524", "nodeyear": 1998, "ref-by-count": 177, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1064235153", "attributes": {"title": "Atomic quantum non-demolition measurements and squeezing", "doi": "10.1209/epl/i1998-00277-9", "nodeyear": 1998, "ref-by-count": 240, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060816390", "attributes": {"title": "Spin Squeezing in an Ensemble of Atoms Illuminated with Squeezed Light", "doi": "10.1103/physrevlett.79.4782", "nodeyear": 1997, "ref-by-count": 210, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1052013666", "attributes": {"title": "Phonon Squeezed States Generated by Second-Order Raman Scattering", "doi": "10.1103/physrevlett.79.4605", "nodeyear": 1997, "ref-by-count": 80, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1030664451", "attributes": {"title": "Quantum-Controlled Few-Photon State Generated by Squeezed Atoms", "doi": "10.1103/physrevlett.79.3869", "nodeyear": 1997, "ref-by-count": 28, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1006871668", "attributes": {"title": "Improvement of Frequency Standards with Quantum Entanglement", "doi": "10.1103/physrevlett.79.3865", "nodeyear": 1997, "ref-by-count": 683, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1003480064", "attributes": {"title": "Particle propagation in a random and quasi-periodic potential", "doi": "10.1016/s0167-2789(97)00155-3", "nodeyear": 1997, "ref-by-count": 26, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060492991", "attributes": {"title": "Atomic Schrödinger cat states", "doi": "10.1103/physreva.56.2249", "nodeyear": 1997, "ref-by-count": 163, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1019387204", "attributes": {"title": "The calculation of the bound and quasibound vibrational states for ozone in its B 1 electronic state", "doi": "10.1080/002689797171148", "nodeyear": 1997, "ref-by-count": 19, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1006289352", "attributes": {"title": "Pure Rotational Spectra of HNCS in the Far Infrared Region: The Three Bending Excited States", "doi": "10.1006/jmsp.1997.7269", "nodeyear": 1997, "ref-by-count": 12, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1030905705", "attributes": {"title": "Floquet-Markovian description of the parametrically driven, dissipative harmonic quantum oscillator", "doi": "10.1103/physreve.55.300", "nodeyear": 1997, "ref-by-count": 149, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060492164", "attributes": {"title": "Generation of atomic-squeezed states in an optical cavity with an injected squeezed vacuum", "doi": "10.1103/physreva.54.5327", "nodeyear": 1996, "ref-by-count": 10, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1019487999", "attributes": {"title": "The squeezed component of the atomic collective phase quadrature operators with respect to a two-level atomic coherent state", "doi": "10.1016/0375-9601(96)00565-8", "nodeyear": 1996, "ref-by-count": 2, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1058050263", "attributes": {"title": "Algebraic approach to molecular spectra: Two‐dimensional problems", "doi": "10.1063/1.471412", "nodeyear": 1996, "ref-by-count": 104, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1004092630", "attributes": {"title": "High Resolution Vibrational–Rotational Spectrum of H2S in the Region of the ν2Fundamental Band", "doi": "10.1006/jmsp.1996.0082", "nodeyear": 1996, "ref-by-count": 44, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1052716647", "attributes": {"title": "Squeezed Phonon States: Modulating Quantum Fluctuations of Atomic Displacements", "doi": "10.1103/physrevlett.76.2294", "nodeyear": 1996, "ref-by-count": 97, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1057869519", "attributes": {"title": "Algebraic Theory of Molecules", "doi": "10.1063/1.2807547", "nodeyear": 1996, "ref-by-count": 185, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1007741542", "attributes": {"title": "Semiclassics of rotation and torsion", "doi": "10.1007/s002570050101", "nodeyear": 1996, "ref-by-count": 25, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1058047895", "attributes": {"title": "CaOH has a second linear structure HCaO", "doi": "10.1063/1.469909", "nodeyear": 1995, "ref-by-count": 10, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1060811945", "attributes": {"title": "Optimal Quantum Measurements for Phase Estimation", "doi": "10.1103/physrevlett.75.2944", "nodeyear": 1995, "ref-by-count": 182, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1035173735", "attributes": {"title": "New rovibrational data for MgOH and MgOD and the internuclear potential function of the ground electronic state", "doi": "10.1016/0009-2614(95)00479-n", "nodeyear": 1995, "ref-by-count": 28, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060490050", "attributes": {"title": "Pulse matching and correlation of phase fluctuations in Λ systems", "doi": "10.1103/physreva.51.2430", "nodeyear": 1995, "ref-by-count": 67, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1058046639", "attributes": {"title": "High‐resolution analysis of the fundamental bending vibrations in the A ̃  2 Π and X ̃  2 Σ + states of CaOH and CaOD: Deperturbation of Renner–Teller, spin–orbit and K ‐type resonance interactions", "doi": "10.1063/1.468643", "nodeyear": 1995, "ref-by-count": 34, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1000086198", "attributes": {"title": "Pure Rotational Spectra of HNCS in the Far Infrared: Ground State Analysis", "doi": "10.1006/jmsp.1995.1018", "nodeyear": 1995, "ref-by-count": 14, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1011073909", "attributes": {"title": "H280Se: High Resolution Study of the 3ν2, ν1 + ν2, and ν2 + ν3 Bands and Determination of Equilibrium Rotational Constants and Structure", "doi": "10.1006/jmsp.1994.1244", "nodeyear": 1994, "ref-by-count": 27, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1046586795", "attributes": {"title": "Hypersensitivity to perturbation in the quantum kicked top", "doi": "10.1103/physreve.50.972", "nodeyear": 1994, "ref-by-count": 50, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060488659", "attributes": {"title": "Atomic states with spectroscopic squeezing", "doi": "10.1103/physreva.49.4968", "nodeyear": 1994, "ref-by-count": 75, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060809096", "attributes": {"title": "Statistical distance and the geometry of quantum states", "doi": "10.1103/physrevlett.72.3439", "nodeyear": 1994, "ref-by-count": 1717, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060716437", "attributes": {"title": "Brownian parametric oscillators", "doi": "10.1103/physreve.49.3626", "nodeyear": 1994, "ref-by-count": 41, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060808815", "attributes": {"title": "Dynamics of a model of supersolid", "doi": "10.1103/physrevlett.72.2426", "nodeyear": 1994, "ref-by-count": 101, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1045346582", "attributes": {"title": "Fourfold Clusters of Rovibrational Energy Levels for H2S Studied with a Potential Energy Surface Derived from Experiment", "doi": "10.1006/jmsp.1994.1041", "nodeyear": 1994, "ref-by-count": 66, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1005841402", "attributes": {"title": "Quantum Optics", "doi": "10.1007/978-3-642-79504-6", "nodeyear": 1994, "ref-by-count": 2353, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1049201712", "attributes": {"title": "High-Resolution Analysis of the ν2, 2ν2, ν1, and ν3 Bands of H280Se", "doi": "10.1006/jmsp.1993.1224", "nodeyear": 1993, "ref-by-count": 26, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1054491307", "attributes": {"title": "The Potential Energy Surface for the Electronic Ground State of H2Se Derived from Experiment", "doi": "10.1006/jmsp.1993.1155", "nodeyear": 1993, "ref-by-count": 44, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1060487392", "attributes": {"title": "Squeezed spin states", "doi": "10.1103/physreva.47.5138", "nodeyear": 1993, "ref-by-count": 1137, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060487206", "attributes": {"title": "Quantum projection noise: Population fluctuations in two-level systems", "doi": "10.1103/physreva.47.3554", "nodeyear": 1993, "ref-by-count": 402, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1051958598", "attributes": {"title": "Investigation of excited vibrational levels in the X 2Σ+ state of CaOH and CaOD by resolved fluorescence spectroscopy", "doi": "10.1080/00268979200102231", "nodeyear": 1992, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060485219", "attributes": {"title": "Dynamic Stark effect for the Jaynes-Cummings system", "doi": "10.1103/physreva.45.5135", "nodeyear": 1992, "ref-by-count": 113, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1006189532", "attributes": {"title": "Vibrational spectra of linear triatomic molecules in the vibron model", "doi": "10.1016/0022-2852(91)90370-p", "nodeyear": 1991, "ref-by-count": 76, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1048482240", "attributes": {"title": "Overtone frequencies and intensities of bent XY2 molecules in the vibron model", "doi": "10.1016/0022-2852(90)90293-y", "nodeyear": 1990, "ref-by-count": 87, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1060839208", "attributes": {"title": "Coherent states: Theory and some applications", "doi": "10.1103/revmodphys.62.867", "nodeyear": 1990, "ref-by-count": 1131, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059070435", "attributes": {"title": "Kicked rotator for a spin-1/2 particle", "doi": "10.1088/0305-4470/22/19/016", "nodeyear": 1989, "ref-by-count": 48, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060478721", "attributes": {"title": "Phase-sensitive population decay: The two-atom Dicke model in a broadband squeezed vacuum", "doi": "10.1103/physreva.39.1962", "nodeyear": 1989, "ref-by-count": 105, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060799033", "attributes": {"title": "Anderson Transition in a One-Dimensional System with Three Incommensurate Frequencies", "doi": "10.1103/physrevlett.62.345", "nodeyear": 1989, "ref-by-count": 142, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1062233668", "attributes": {"title": "Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables", "doi": "10.1119/1.15378", "nodeyear": 1988, "ref-by-count": 562, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1058031840", "attributes": {"title": "Fermi resonances and local modes in water, hydrogen sulfide, and hydrogen selenide", "doi": "10.1063/1.453824", "nodeyear": 1988, "ref-by-count": 218, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1058032193", "attributes": {"title": "Semiclassical treatment of the vibrational spectroscopy of OCS", "doi": "10.1063/1.454177", "nodeyear": 1988, "ref-by-count": 17, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1048120455", "attributes": {"title": "Theory of first-order phase transitions", "doi": "10.1088/0034-4885/50/7/001", "nodeyear": 1987, "ref-by-count": 777, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1060475224", "attributes": {"title": "Number-phase minimum-uncertainty state with reduced number uncertainty in a Kerr nonlinear interferometer", "doi": "10.1103/physreva.34.3974", "nodeyear": 1986, "ref-by-count": 339, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1005219864", "attributes": {"title": "Generalized Coherent States and Their Applications", "doi": "10.1007/978-3-642-61629-7", "nodeyear": 1986, "ref-by-count": 1882, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060790516", "attributes": {"title": "Bound-State Eigenfunctions of Classically Chaotic Hamiltonian Systems: Scars of Periodic Orbits", "doi": "10.1103/physrevlett.53.1515", "nodeyear": 1984, "ref-by-count": 1130, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1018979965", "attributes": {"title": "The geometrical-classical limit of algebraic Hamiltonians for molecular vibrotational spectra", "doi": "10.1016/0009-2614(83)87025-0", "nodeyear": 1983, "ref-by-count": 78, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1029020774", "attributes": {"title": "The potential function for HCNCNH isomerization", "doi": "10.1016/0022-2852(83)90018-8", "nodeyear": 1983, "ref-by-count": 43, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1030813584", "attributes": {"title": "Some statistical properties of simple classically stochastic quantum systems", "doi": "10.1016/0167-2789(83)90318-4", "nodeyear": 1983, "ref-by-count": 142, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1043507384", "attributes": {"title": "The scaling theory of electrons in disordered solids: Additional numerical results", "doi": "10.1007/bf01578242", "nodeyear": 1983, "ref-by-count": 639, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1060787963", "attributes": {"title": "Chaos, Quantum Recurrences, and Anderson Localization", "doi": "10.1103/physrevlett.49.509", "nodeyear": 1982, "ref-by-count": 829, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060787952", "attributes": {"title": "Size Scaling for Infinitely Coordinated Systems", "doi": "10.1103/physrevlett.49.478", "nodeyear": 1982, "ref-by-count": 148, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060786848", "attributes": {"title": "Reduced Quantum Fluctuations in Resonance Fluorescence", "doi": "10.1103/physrevlett.47.709", "nodeyear": 1981, "ref-by-count": 409, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1020356915", "attributes": {"title": "Enhanced sensitivity of a gravitational wave detector", "doi": "10.1016/0375-9601(81)90238-3", "nodeyear": 1981, "ref-by-count": 9, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060688638", "attributes": {"title": "Quantum-mechanical noise in an interferometer", "doi": "10.1103/physrevd.23.1693", "nodeyear": 1981, "ref-by-count": 2094, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060784904", "attributes": {"title": "Classical Limit of the Interacting-Boson Model", "doi": "10.1103/physrevlett.44.1747", "nodeyear": 1980, "ref-by-count": 487, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1063137926", "attributes": {"title": "Spin-Orbit Interaction and Magnetoresistance in the Two Dimensional Random System", "doi": "10.1143/ptp.63.707", "nodeyear": 1980, "ref-by-count": 2208, "is_input_DOI": false, "category_for": "17:1.00", "level": "ref_l2"}}, {"id": "pub.1058101157", "attributes": {"title": "The classical limit of quantum nonspin systems", "doi": "10.1063/1.524137", "nodeyear": 1979, "ref-by-count": 160, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1060467641", "attributes": {"title": "No-go theorem concerning the superradiant phase transition in atomic systems", "doi": "10.1103/physreva.19.301", "nodeyear": 1979, "ref-by-count": 93, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1015361753", "attributes": {"title": "Stochastic behavior of a quantum pendulum under a periodic perturbation", "doi": "10.1007/bfb0021757", "nodeyear": 1979, "ref-by-count": 308, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1028928983", "attributes": {"title": "Phase transitions in nuclear matter described by pseudospin Hamiltonians", "doi": "10.1016/0375-9474(78)90260-9", "nodeyear": 1978, "ref-by-count": 133, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060466899", "attributes": {"title": "Are super-radiant phase transitions possible?", "doi": "10.1103/physreva.17.1454", "nodeyear": 1978, "ref-by-count": 53, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1035545882", "attributes": {"title": "Mathematical Methods of Classical Mechanics", "doi": "10.1007/978-1-4757-1693-1", "nodeyear": 1978, "ref-by-count": 3208, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060465740", "attributes": {"title": "Two-photon coherent states of the radiation field", "doi": "10.1103/physreva.13.2226", "nodeyear": 1976, "ref-by-count": 1801, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060465708", "attributes": {"title": "Thermodynamics of two-level atoms interacting with the continuum of electromagnetic field modes", "doi": "10.1103/physreva.13.1967", "nodeyear": 1976, "ref-by-count": 27, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060779767", "attributes": {"title": "Phase Transitions, Two-Level Atoms, and the A2 Term", "doi": "10.1103/physrevlett.35.432", "nodeyear": 1975, "ref-by-count": 217, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1060506152", "attributes": {"title": "Equilibrium Statistical Mechanics of Matter Interacting with the Quantized Radiation Field", "doi": "10.1103/physreva.8.2517", "nodeyear": 1973, "ref-by-count": 282, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1002536646", "attributes": {"title": "Higher order corrections to the Dicke superradiant phase transition", "doi": "10.1016/0375-9601(73)90679-8", "nodeyear": 1973, "ref-by-count": 94, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1060505996", "attributes": {"title": "Phase Transitions in Some Generalized Dicke Models of Superradiance", "doi": "10.1103/physreva.8.1440", "nodeyear": 1973, "ref-by-count": 121, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1037335968", "attributes": {"title": "On the superradiant phase transition for molecules in a quantized radiation field: the dicke maser model", "doi": "10.1016/0003-4916(73)90039-0", "nodeyear": 1973, "ref-by-count": 721, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060500350", "attributes": {"title": "Phase Transition in the Dicke Model of Superradiance", "doi": "10.1103/physreva.7.831", "nodeyear": 1973, "ref-by-count": 510, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060495184", "attributes": {"title": "Atomic Coherent States in Quantum Optics", "doi": "10.1103/physreva.6.2211", "nodeyear": 1972, "ref-by-count": 1210, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1024870439", "attributes": {"title": "Coherent states for arbitrary Lie group", "doi": "10.1007/bf01645091", "nodeyear": 1972, "ref-by-count": 1052, "is_input_DOI": false, "category_for": "01:0.60;02:0.40", "level": "ref_l2"}}, {"id": "pub.1036408635", "attributes": {"title": "The bending-rotation Hamiltonian for the triatomic molecule and application to HCN and H2O", "doi": "10.1016/0022-2852(72)90209-3", "nodeyear": 1972, "ref-by-count": 145, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1060443588", "attributes": {"title": "Approximate Solutions for an N-Molecule-Radiation-Field Hamiltonian", "doi": "10.1103/physrev.188.692", "nodeyear": 1969, "ref-by-count": 196, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1001765599", "attributes": {"title": "Group-theoretical aspects of the variable frequency oscillator problem", "doi": "10.1007/bf01035742", "nodeyear": 1969, "ref-by-count": 28, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1050225995", "attributes": {"title": "An extension of Kakutani’s theorem on infinite product measures to the tensor product of semifinite w ∗ w^{\ast } -algebras", "doi": "10.1090/s0002-9947-1969-0236719-2", "nodeyear": 1969, "ref-by-count": 269, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060438505", "attributes": {"title": "Exact Solution for an N-Molecule—Radiation-Field Hamiltonian", "doi": "10.1103/physrev.170.379", "nodeyear": 1968, "ref-by-count": 995, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1043798191", "attributes": {"title": "Validity of many-body approximation methods for a solvable model (III). Diagram summations", "doi": "10.1016/0029-5582(65)90864-3", "nodeyear": 1965, "ref-by-count": 237, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1017078538", "attributes": {"title": "Validity of many-body approximation methods for a solvable model (II). Linearization procedures", "doi": "10.1016/0029-5582(65)90863-1", "nodeyear": 1965, "ref-by-count": 236, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1011658338", "attributes": {"title": "Validity of many-body approximation methods for a solvable model (I). Exact solutions and perturbation theory", "doi": "10.1016/0029-5582(65)90862-x", "nodeyear": 1965, "ref-by-count": 1141, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1015885405", "attributes": {"title": "Higher vibrational levels of a bent triatomic molecule", "doi": "10.1039/tf9646001363", "nodeyear": 1964, "ref-by-count": 145, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1060752377", "attributes": {"title": "Energy vs Momentum Relation for the Excitations in Liquid Helium", "doi": "10.1103/physrevlett.1.9", "nodeyear": 1958, "ref-by-count": 32, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1004021375", "attributes": {"title": "The pure rotational spectrum of H2Se in the far infrared spectral region", "doi": "10.1016/0022-2852(57)90025-5", "nodeyear": 1957, "ref-by-count": 8, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1030349669", "attributes": {"title": "Molecular Vibrations: The Theory of Infrared and Raman Vibrational Spectra", "doi": "10.1149/1.2430134", "nodeyear": 1955, "ref-by-count": 3996, "is_input_DOI": false, "category_for": "03:0.60;09:0.40", "level": "ref_l2"}}, {"id": "pub.1060461988", "attributes": {"title": "Coherence in Spontaneous Radiation Processes", "doi": "10.1103/physrev.93.99", "nodeyear": 1954, "ref-by-count": 5235, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060451204", "attributes": {"title": "Field Dependence of the Intrinsic Domain Magnetization of a Ferromagnet", "doi": "10.1103/physrev.58.1098", "nodeyear": 1940, "ref-by-count": 2887, "is_input_DOI": false, "category_for": "18:1.00", "level": "ref_l2"}}, {"id": "pub.1019976609", "attributes": {"title": "Natural and artificial atoms for quantum computation", "doi": "10.1088/0034-4885/74/10/104401", "nodeyear": 2011, "ref-by-count": 483, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1065173362", "attributes": {"title": "Quantum phase transition of nonlinear light in the finite size Dicke Hamiltonian", "doi": "10.1364/josab.27.002443", "nodeyear": 2010, "ref-by-count": 14, "is_input_DOI": false, "category_for": "09:0.33;01:0.33;02:0.33", "level": "ref_l2"}}, {"id": "pub.1007437051", "attributes": {"title": "Entanglement and Sensitivity in Precision Measurements with States of a Fluctuating Number of Particles", "doi": "10.1103/physrevlett.105.120501", "nodeyear": 2010, "ref-by-count": 79, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1037217818", "attributes": {"title": "Quantum Nondemolition Measurement of Large-Spin Ensembles by Dynamical Decoupling", "doi": "10.1103/physrevlett.105.093602", "nodeyear": 2010, "ref-by-count": 59, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1016989667", "attributes": {"title": "Testing nonclassicality in multimode fields: A unified derivation of classical inequalities", "doi": "10.1103/physreva.82.013824", "nodeyear": 2010, "ref-by-count": 141, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1021507156", "attributes": {"title": "Landau–Zener–Stückelberg interferometry", "doi": "10.1016/j.physrep.2010.03.002", "nodeyear": 2010, "ref-by-count": 528, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1010418632", "attributes": {"title": "Orientation-Dependent Entanglement Lifetime in a Squeezed Atomic Clock", "doi": "10.1103/physrevlett.104.250801", "nodeyear": 2010, "ref-by-count": 119, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1042723630", "attributes": {"title": "Relation between ac Josephson effect and double-well Bose-Einstein-condensate oscillations", "doi": "10.1103/physreva.81.063609", "nodeyear": 2010, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1002419553", "attributes": {"title": "Robust and scalable optical one-way quantum computation", "doi": "10.1103/physreva.81.052332", "nodeyear": 2010, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1016879794", "attributes": {"title": "Theory of localization and resonance phenomena in the quantum kicked rotor", "doi": "10.1088/1367-2630/12/4/043043", "nodeyear": 2010, "ref-by-count": 21, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1048839595", "attributes": {"title": "Quantum Noise Limited and Entanglement-Assisted Magnetometry", "doi": "10.1103/physrevlett.104.133601", "nodeyear": 2010, "ref-by-count": 281, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1013441281", "attributes": {"title": "Nonlinear atom interferometer surpasses classical precision limit", "doi": "10.1038/nature08919", "nodeyear": 2010, "ref-by-count": 651, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1038221147", "attributes": {"title": "Multilevel Holstein-Primakoff approximation and its application to atomic spin squeezing and ensemble quantum memories", "doi": "10.1103/physreva.81.032314", "nodeyear": 2010, "ref-by-count": 19, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1019662680", "attributes": {"title": "SU(3) Quasidynamical Symmetry Underlying the Alhassid-Whelan Arc of Regularity", "doi": "10.1103/physrevlett.104.022502", "nodeyear": 2010, "ref-by-count": 26, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1034220073", "attributes": {"title": "High Bandwidth Atomic Magnetometery with Continuous Quantum Nondemolition Measurements", "doi": "10.1103/physrevlett.104.013601", "nodeyear": 2010, "ref-by-count": 89, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1072401833", "attributes": {"title": "Anderson localization and quantum chaos maps", "doi": "10.4249/scholarpedia.9816", "nodeyear": 2010, "ref-by-count": 16, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1017394305", "attributes": {"title": "Optimal control of number squeezing in trapped Bose-Einstein condensates", "doi": "10.1103/physreva.80.053625", "nodeyear": 2009, "ref-by-count": 55, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1020456012", "attributes": {"title": "Quantum chaos and critical behavior on a chip", "doi": "10.1103/physrevb.80.165308", "nodeyear": 2009, "ref-by-count": 43, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060677128", "attributes": {"title": "X(5)* model and the N=90 nuclei", "doi": "10.1103/physrevc.80.034308", "nodeyear": 2009, "ref-by-count": 21, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060739410", "attributes": {"title": "Level statistics of a pseudo-Hermitian Dicke model", "doi": "10.1103/physreve.80.026213", "nodeyear": 2009, "ref-by-count": 19, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1037589088", "attributes": {"title": "Quantum phase transition in a pseudo-Hermitian Dicke model", "doi": "10.1103/physreve.80.021107", "nodeyear": 2009, "ref-by-count": 16, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060755819", "attributes": {"title": "New Features of Shape Coexistence in Sm152", "doi": "10.1103/physrevlett.103.062501", "nodeyear": 2009, "ref-by-count": 50, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060677048", "attributes": {"title": "Transition from γ-rigid to γ-soft dynamics in the interacting boson model: Quasicriticality and quasidynamical symmetry", "doi": "10.1103/physrevc.80.014319", "nodeyear": 2009, "ref-by-count": 21, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1011163444", "attributes": {"title": "Quantum chaos in the nuclear collective model. II. Peres lattices", "doi": "10.1103/physreve.79.066201", "nodeyear": 2009, "ref-by-count": 26, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060676616", "attributes": {"title": "Bohr model as an algebraic collective model", "doi": "10.1103/physrevc.79.054304", "nodeyear": 2009, "ref-by-count": 63, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1022061943", "attributes": {"title": "Cooling and squeezing the fluctuations of a nanomechanical beam by indirect quantum feedback control", "doi": "10.1103/physreva.79.052102", "nodeyear": 2009, "ref-by-count": 60, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1031855473", "attributes": {"title": "Quantum chaos in the nuclear collective model: Classical-quantum correspondence", "doi": "10.1103/physreve.79.046202", "nodeyear": 2009, "ref-by-count": 21, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1036673130", "attributes": {"title": "Polarization-based light-atom quantum interface with an all-optical trap", "doi": "10.1103/physreva.79.043815", "nodeyear": 2009, "ref-by-count": 55, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1040606488", "attributes": {"title": "Entanglement detection", "doi": "10.1016/j.physrep.2009.02.004", "nodeyear": 2009, "ref-by-count": 1304, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060755003", "attributes": {"title": "Discovery of Rn229 and the Structure of the Heaviest Rn and Ra Isotopes from Penning-Trap Mass Measurements", "doi": "10.1103/physrevlett.102.112501", "nodeyear": 2009, "ref-by-count": 57, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060676547", "attributes": {"title": "Spectral properties of a tractable collective Hamiltonian", "doi": "10.1103/physrevc.79.034305", "nodeyear": 2009, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1052892694", "attributes": {"title": "Beyond the relativistic mean-field approximation. III. Collective Hamiltonian in five dimensions", "doi": "10.1103/physrevc.79.034303", "nodeyear": 2009, "ref-by-count": 140, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1023287333", "attributes": {"title": "Phonon and multi-phonon excitations in rotational nuclei by exact diagonalization of the Bohr Hamiltonian", "doi": "10.1016/j.physletb.2009.01.054", "nodeyear": 2009, "ref-by-count": 20, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060754866", "attributes": {"title": "Enhanced Sensitivity of Nuclear Binding Energies to Collective Structure", "doi": "10.1103/physrevlett.102.082501", "nodeyear": 2009, "ref-by-count": 28, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1048283529", "attributes": {"title": "Spin squeezing of atomic ensembles by multicolor quantum nondemolition measurements", "doi": "10.1103/physreva.79.023831", "nodeyear": 2009, "ref-by-count": 40, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1031554515", "attributes": {"title": "Quantum Nondemolition Measurements and State Preparation in Quantum Gases by Light Detection", "doi": "10.1103/physrevlett.102.020403", "nodeyear": 2009, "ref-by-count": 56, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1053325657", "attributes": {"title": "Spin squeezing in a bimodal condensate: spatial dynamics and particle losses", "doi": "10.1140/epjb/e2008-00472-6", "nodeyear": 2009, "ref-by-count": 72, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1002548185", "attributes": {"title": "Quantum entanglement", "doi": "10.1103/revmodphys.81.865", "nodeyear": 2009, "ref-by-count": 5374, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1001677407", "attributes": {"title": "Optics and interferometry with atoms and molecules", "doi": "10.1103/revmodphys.81.1051", "nodeyear": 2009, "ref-by-count": 941, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1051499896", "attributes": {"title": "Squeezing and over-squeezing of triphotons", "doi": "10.1038/nature07624", "nodeyear": 2009, "ref-by-count": 38, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1009420992", "attributes": {"title": "Controlled Generation of Squeezed States of Microwave Radiation in a Superconducting Resonant Circuit", "doi": "10.1103/physrevlett.101.253602", "nodeyear": 2008, "ref-by-count": 58, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060676386", "attributes": {"title": "Deformation crossing near the first-order shape-phase transition in Gd152–156", "doi": "10.1103/physrevc.78.051303", "nodeyear": 2008, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1030131727", "attributes": {"title": "Backaction noise produced via cavity-aided nondemolition measurement of an atomic clock state", "doi": "10.1103/physreva.78.051803", "nodeyear": 2008, "ref-by-count": 21, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1028533037", "attributes": {"title": "Quantum phase transitions in the consistent-Q Hamiltonian of the interacting boson model", "doi": "10.1088/0954-3899/35/12/125105", "nodeyear": 2008, "ref-by-count": 15, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060676334", "attributes": {"title": "Empirical signature for shape transitions mediated by sub-shell changes", "doi": "10.1103/physrevc.78.041301", "nodeyear": 2008, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1035626723", "attributes": {"title": "Practical schemes for the measurement of angular-momentum covariance matrices in quantum optics", "doi": "10.1103/physreva.78.043814", "nodeyear": 2008, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060754142", "attributes": {"title": "Mean-Field Derivation of the Interacting Boson Model Hamiltonian and Exotic Nuclei", "doi": "10.1103/physrevlett.101.142501", "nodeyear": 2008, "ref-by-count": 82, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1006289465", "attributes": {"title": "Cavity Optomechanics with a Bose-Einstein Condensate", "doi": "10.1126/science.1163218", "nodeyear": 2008, "ref-by-count": 443, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060676255", "attributes": {"title": "Shape coexistence and phase transitions in the platinum isotopes", "doi": "10.1103/physrevc.78.024303", "nodeyear": 2008, "ref-by-count": 38, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1027183352", "attributes": {"title": "Entanglement, quantum phase transition and fixed-point bifurcation in the N-atom Jaynes–Cummings model with an additional symmetry breaking term", "doi": "10.1016/j.physleta.2008.06.080", "nodeyear": 2008, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1036352091", "attributes": {"title": "Search for intrinsic collective excitations in Sm152", "doi": "10.1103/physrevc.77.061301", "nodeyear": 2008, "ref-by-count": 48, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1006852009", "attributes": {"title": "Atomic spin squeezing in an optical cavity", "doi": "10.1103/physreva.77.063811", "nodeyear": 2008, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1037170495", "attributes": {"title": "Inhomogeneous light shift effects on atomic quantum state evolution in non-destructive measurements", "doi": "10.1088/1367-2630/10/5/053032", "nodeyear": 2008, "ref-by-count": 18, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1029956508", "attributes": {"title": "Observation of quantum-measurement backaction with an ultracold atomic gas", "doi": "10.1038/nphys965", "nodeyear": 2008, "ref-by-count": 327, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1047220917", "attributes": {"title": "A beyond mean field analysis of the shape transition in the Neodymium isotopes", "doi": "10.1016/j.physletb.2008.03.061", "nodeyear": 2008, "ref-by-count": 36, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1032454787", "attributes": {"title": "Analytical solutions of the Bohr Hamiltonian with the Morse potential", "doi": "10.1103/physrevc.77.044302", "nodeyear": 2008, "ref-by-count": 55, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1009497503", "attributes": {"title": "A quantum-enhanced prototype gravitational-wave detector", "doi": "10.1038/nphys920", "nodeyear": 2008, "ref-by-count": 238, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1034485631", "attributes": {"title": "Storage and Retrieval of a Squeezed Vacuum", "doi": "10.1103/physrevlett.100.093601", "nodeyear": 2008, "ref-by-count": 196, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1007390089", "attributes": {"title": "Sub-Shot-Noise Magnetometry with a Correlated Spin-Relaxation Dominated Alkali-Metal Vapor", "doi": "10.1103/physrevlett.100.073002", "nodeyear": 2008, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060504144", "attributes": {"title": "Characterization of quantum angular-momentum fluctuations via principal components", "doi": "10.1103/physreva.77.022105", "nodeyear": 2008, "ref-by-count": 28, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1050919469", "attributes": {"title": "Description of nuclear octupole and quadrupole deformation close to axial symmetry: Critical-point behavior of Ra224 and Th224", "doi": "10.1103/physrevc.77.024320", "nodeyear": 2008, "ref-by-count": 33, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1072401415", "attributes": {"title": "Chirikov standard map", "doi": "10.4249/scholarpedia.3550", "nodeyear": 2008, "ref-by-count": 56, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1045352298", "attributes": {"title": "Exactly separable version of the Bohr Hamiltonian with the Davidson potential", "doi": "10.1103/physrevc.76.064312", "nodeyear": 2007, "ref-by-count": 74, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1044584359", "attributes": {"title": "Quantum Reconstruction of an Intense Polarization Squeezed Optical State", "doi": "10.1103/physrevlett.99.220401", "nodeyear": 2007, "ref-by-count": 36, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1029202339", "attributes": {"title": "Cavity QED with a Bose–Einstein condensate", "doi": "10.1038/nature06120", "nodeyear": 2007, "ref-by-count": 439, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1027799783", "attributes": {"title": "The a.c. and d.c. Josephson effects in a Bose–Einstein condensate", "doi": "10.1038/nature06186", "nodeyear": 2007, "ref-by-count": 418, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1028482838", "attributes": {"title": "Coulomb Analogy for Non-Hermitian Degeneracies near Quantum Phase Transitions", "doi": "10.1103/physrevlett.99.100601", "nodeyear": 2007, "ref-by-count": 62, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1049766158", "attributes": {"title": "N=90 region: The decays of Eu152m,g to Sm152", "doi": "10.1103/physrevc.76.034319", "nodeyear": 2007, "ref-by-count": 33, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1032486064", "attributes": {"title": "Microscopic Description of Nuclear Quantum Phase Transitions", "doi": "10.1103/physrevlett.99.092502", "nodeyear": 2007, "ref-by-count": 88, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060675775", "attributes": {"title": "Shape-phase transitions and two-particle transfer intensities", "doi": "10.1103/physrevc.76.014316", "nodeyear": 2007, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060675760", "attributes": {"title": "Distinguishing a first order from a second order nuclear shape phase transition in the interacting boson model", "doi": "10.1103/physrevc.76.011305", "nodeyear": 2007, "ref-by-count": 38, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1021089453", "attributes": {"title": "Partial Dynamical Symmetry at Critical Points of Quantum Phase Transitions", "doi": "10.1103/physrevlett.98.242502", "nodeyear": 2007, "ref-by-count": 53, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060675734", "attributes": {"title": "Classical and quantum properties of the semiregular arc inside the Casten triangle", "doi": "10.1103/physrevc.75.064318", "nodeyear": 2007, "ref-by-count": 32, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1029051671", "attributes": {"title": "Exactly separable version of X(5) and related models", "doi": "10.1016/j.physletb.2006.12.080", "nodeyear": 2007, "ref-by-count": 31, "is_input_DOI": false, "category_for": "02:0.60;01:0.40", "level": "ref_l2"}}, {"id": "pub.1013946646", "attributes": {"title": "Criticality in the configuration-mixed interacting boson model: (1) U(5)–Qˆ(χ)⋅Qˆ(χ) mixing", "doi": "10.1016/j.nuclphysa.2007.04.003", "nodeyear": 2007, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1027287387", "attributes": {"title": "Collective Excitations and Instability of an Optical Lattice due to Unbalanced Pumping", "doi": "10.1103/physrevlett.98.203008", "nodeyear": 2007, "ref-by-count": 16, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1038008984", "attributes": {"title": "Quantum phase transitions and structural evolution in nuclei", "doi": "10.1088/0954-3899/34/7/r01", "nodeyear": 2007, "ref-by-count": 140, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1031284085", "attributes": {"title": "Entanglement assisted fast reordering of atoms in an optical lattice within a cavity at T=0", "doi": "10.1016/j.optcom.2007.01.069", "nodeyear": 2007, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060675639", "attributes": {"title": "γ-band staggering and E(5)-type structure: Zn64", "doi": "10.1103/physrevc.75.044302", "nodeyear": 2007, "ref-by-count": 16, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1011478891", "attributes": {"title": "Empirical Proton-Neutron Interactions and Nuclear Density Functional Theory: Global, Regional, and Local Comparisons", "doi": "10.1103/physrevlett.98.132502", "nodeyear": 2007, "ref-by-count": 53, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1046760586", "attributes": {"title": "Probing quantum phases of ultracold atoms in optical lattices by transmission spectra in cavity quantum electrodynamics", "doi": "10.1038/nphys571", "nodeyear": 2007, "ref-by-count": 145, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1025338423", "attributes": {"title": "Atomic squeezing in assembly of two two-level atoms interacting with a single mode coherent radiation", "doi": "10.1140/epjd/e2007-00042-8", "nodeyear": 2007, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1007165107", "attributes": {"title": "Observation of High-Order Quantum Resonances in the Kicked Rotor", "doi": "10.1103/physrevlett.98.083004", "nodeyear": 2007, "ref-by-count": 52, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060833498", "attributes": {"title": "Superradiant Rayleigh Scattering and Collective Atomic Recoil Lasing in a Ring Cavity", "doi": "10.1103/physrevlett.98.053603", "nodeyear": 2007, "ref-by-count": 158, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060503017", "attributes": {"title": "Quantum dynamics of a spin-1 condensate in a double-well potential", "doi": "10.1103/physreva.75.023605", "nodeyear": 2007, "ref-by-count": 26, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1041165280", "attributes": {"title": "Phase structure of interacting boson models in arbitrary dimension", "doi": "10.1088/1751-8113/40/4/001", "nodeyear": 2007, "ref-by-count": 50, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1023676200", "attributes": {"title": "Two-level interacting boson models beyond the mean field", "doi": "10.1103/physrevc.75.014301", "nodeyear": 2007, "ref-by-count": 40, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1034964762", "attributes": {"title": "Quantum Entanglement and Teleportation of Quantum-Dot States in Microcavities", "doi": "10.1380/ejssnt.2007.51", "nodeyear": 2007, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1024518599", "attributes": {"title": "Decoherence and the Quantum-To-Classical Transition", "doi": "10.1007/978-3-540-35775-9", "nodeyear": 2007, "ref-by-count": 103, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1036559725", "attributes": {"title": "Shape phase transitions and critical-point phenomena in atomic nuclei", "doi": "10.1038/nphys451", "nodeyear": 2006, "ref-by-count": 132, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1001541263", "attributes": {"title": "Light does matter", "doi": "10.1038/nphys479", "nodeyear": 2006, "ref-by-count": 22, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1007041825", "attributes": {"title": "Quantum phase transitions of light", "doi": "10.1038/nphys466", "nodeyear": 2006, "ref-by-count": 588, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1009364201", "attributes": {"title": "Symmetry breaking in symmetric and asymmetric double-well potentials", "doi": "10.1103/physreve.74.056608", "nodeyear": 2006, "ref-by-count": 76, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060675450", "attributes": {"title": "Intrinsic quadrupole tensor in the geometric interpretation of the interacting boson approximation (IBA-1)", "doi": "10.1103/physrevc.74.044307", "nodeyear": 2006, "ref-by-count": 3, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1015215551", "attributes": {"title": "γ-soft analog of the confined β-soft rotor model", "doi": "10.1103/physrevc.74.044306", "nodeyear": 2006, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1052615551", "attributes": {"title": "Connecting the X(5)-β2, X(5)-β4, and X(3) models to the shape/phase-transition region of the interacting boson model", "doi": "10.1103/physrevc.74.034306", "nodeyear": 2006, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060675402", "attributes": {"title": "One-particle spectroscopic intensities as a signature of shape phase transition: The γ-unstable case", "doi": "10.1103/physrevc.74.027301", "nodeyear": 2006, "ref-by-count": 7, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1020454192", "attributes": {"title": "Many-Body Quantum Dynamics of Polarization Squeezing in Optical Fibers", "doi": "10.1103/physrevlett.97.023606", "nodeyear": 2006, "ref-by-count": 63, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1016510934", "attributes": {"title": "Spin Squeezing and Light Entanglement in Coherent Population Trapping", "doi": "10.1103/physrevlett.97.023605", "nodeyear": 2006, "ref-by-count": 52, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1017862564", "attributes": {"title": "Solution of the Bohr Hamiltonian for soft triaxial nuclei", "doi": "10.1103/physrevc.74.014310", "nodeyear": 2006, "ref-by-count": 47, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060675321", "attributes": {"title": "Phase transitions in configuration mixed models", "doi": "10.1103/physrevc.73.061302", "nodeyear": 2006, "ref-by-count": 29, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1004210259", "attributes": {"title": "Hybrid apparatus for Bose-Einstein condensation and cavity quantum electrodynamics: Single atom detection in quantum degenerate gases", "doi": "10.1063/1.2216907", "nodeyear": 2006, "ref-by-count": 39, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1000892586", "attributes": {"title": "Enhanced density of low-lying 0+ states: A corroboration of shape phase transitional behavior", "doi": "10.1016/j.physletb.2006.05.007", "nodeyear": 2006, "ref-by-count": 49, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1009022347", "attributes": {"title": "Physics at the Thomas Jefferson National Accelerator Facility", "doi": "10.1140/epja/i2006-09-002-9", "nodeyear": 2006, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1010496603", "attributes": {"title": "Quantum entanglement and classical bifurcations in a coupled two-component Bose-Einstein condensate", "doi": "10.1140/epjd/e2006-00103-6", "nodeyear": 2006, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060675290", "attributes": {"title": "First test of the E(5/4) Bose-Fermi symmetry: The structure of Ba135", "doi": "10.1103/physrevc.73.051301", "nodeyear": 2006, "ref-by-count": 34, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060502238", "attributes": {"title": "Spin squeezing and entanglement in a dispersive cavity", "doi": "10.1103/physreva.73.053817", "nodeyear": 2006, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1004884918", "attributes": {"title": "Scalar two-level boson model to study the interacting boson model phase diagram in the Casten triangle", "doi": "10.1103/physrevc.73.054305", "nodeyear": 2006, "ref-by-count": 34, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060832030", "attributes": {"title": "Direct Empirical Correlation between Proton-Neutron Interaction Strengths and the Growth of Collectivity in Nuclei", "doi": "10.1103/physrevlett.96.132501", "nodeyear": 2006, "ref-by-count": 66, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1064237535", "attributes": {"title": "Self-organization of a laser-driven cold gas in a ring cavity", "doi": "10.1209/epl/i2005-10521-4", "nodeyear": 2006, "ref-by-count": 34, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060501981", "attributes": {"title": "Magnetization, squeezing, and entanglement in dipolar spin-1 condensates", "doi": "10.1103/physreva.73.023602", "nodeyear": 2006, "ref-by-count": 53, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1024394193", "attributes": {"title": "Spin squeezing properties in the quantum kicked top model", "doi": "10.1088/0953-4075/39/3/009", "nodeyear": 2006, "ref-by-count": 22, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1031239487", "attributes": {"title": "Evolution of spectral properties along the O(6)-U(5) transition in the interacting boson model. II. Classical trajectories", "doi": "10.1103/physrevc.73.014307", "nodeyear": 2006, "ref-by-count": 34, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1014034141", "attributes": {"title": "Evolution of spectral properties along the O(6)-U(5) transition in the interacting boson model. I. Level dynamics", "doi": "10.1103/physrevc.73.014306", "nodeyear": 2006, "ref-by-count": 45, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1004068287", "attributes": {"title": "Prolate–oblate shape-phase transition in the O(6) description of nuclear rotation", "doi": "10.1016/j.nuclphysa.2005.11.006", "nodeyear": 2006, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1042077732", "attributes": {"title": "Phase transitions in the interacting boson fermion model: The γ-unstable case", "doi": "10.1103/physrevc.72.061302", "nodeyear": 2005, "ref-by-count": 37, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1030368423", "attributes": {"title": "Continuous unitary transformations in two-level boson systems", "doi": "10.1103/physrevc.72.064332", "nodeyear": 2005, "ref-by-count": 38, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1062913555", "attributes": {"title": "SYSTEMATIC ANALYSIS OF CRITICAL POINT NUCLEI IN THE RARE-EARTH REGION WITH RELATIVISTIC MEAN FIELD THEORY", "doi": "10.1142/s0217732305017883", "nodeyear": 2005, "ref-by-count": 25, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1039276131", "attributes": {"title": "An algebraic approach to problems with polynomial Hamiltonians on Euclidean spaces", "doi": "10.1088/0305-4470/38/47/009", "nodeyear": 2005, "ref-by-count": 45, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1032223066", "attributes": {"title": "Self-organization of atoms in a cavity field: Threshold, bistability, and scaling laws", "doi": "10.1103/physreva.72.053417", "nodeyear": 2005, "ref-by-count": 95, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1024370344", "attributes": {"title": "Effects of β-γ coupling in transitional nuclei and the validity of the approximate separation of variables", "doi": "10.1103/physrevc.72.054323", "nodeyear": 2005, "ref-by-count": 76, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1051841352", "attributes": {"title": "Solutions of the Bohr Hamiltonian, a compendium", "doi": "10.1140/epjad/i2005-07-115-8", "nodeyear": 2005, "ref-by-count": 114, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1013665499", "attributes": {"title": "Test of the critical point symmetry X(5) in the mass A = 180 region", "doi": "10.1088/0954-3899/31/10/008", "nodeyear": 2005, "ref-by-count": 32, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1028802174", "attributes": {"title": "X (5) critical-point structure in a finite system", "doi": "10.1103/physrevc.72.031305", "nodeyear": 2005, "ref-by-count": 14, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1022816651", "attributes": {"title": "Phase structure of a two-fluid bosonic system", "doi": "10.1016/j.aop.2005.02.003", "nodeyear": 2005, "ref-by-count": 57, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1043779481", "attributes": {"title": "Finite-size scaling exponents in the interacting boson model", "doi": "10.1103/physrevc.72.011301", "nodeyear": 2005, "ref-by-count": 31, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1035029355", "attributes": {"title": "Direct Observation of Tunneling and Nonlinear Self-Trapping in a Single Bosonic Josephson Junction", "doi": "10.1103/physrevlett.95.010402", "nodeyear": 2005, "ref-by-count": 1161, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1039981372", "attributes": {"title": "Analytic description of critical-point actinides in a transition from octupole deformation to octupole vibrations", "doi": "10.1103/physrevc.71.064309", "nodeyear": 2005, "ref-by-count": 46, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059141708", "attributes": {"title": "Classical evolution of quantum fluctuations in spin-like systems: squeezing and entanglement", "doi": "10.1088/1464-4266/7/6/004", "nodeyear": 2005, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060674871", "attributes": {"title": "Simple description of light W, Os, and Pt nuclei in the interacting boson model", "doi": "10.1103/physrevc.71.054306", "nodeyear": 2005, "ref-by-count": 37, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1019615542", "attributes": {"title": "The algebraic collective model", "doi": "10.1016/j.nuclphysa.2005.01.032", "nodeyear": 2005, "ref-by-count": 71, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060501109", "attributes": {"title": "Quantum-noise-limited interferometric measurement of atomic noise: Towards spin squeezing on the Cs clock transition", "doi": "10.1103/physreva.71.043807", "nodeyear": 2005, "ref-by-count": 51, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060501102", "attributes": {"title": "Dynamics of Bose-Einstein condensates in double-well potentials", "doi": "10.1103/physreva.71.043603", "nodeyear": 2005, "ref-by-count": 37, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1034908465", "attributes": {"title": "Entanglement and spin-squeezing properties for three bosons in two modes", "doi": "10.1103/physreva.71.042317", "nodeyear": 2005, "ref-by-count": 5, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1012276581", "attributes": {"title": "Quantum entanglement and fixed-point bifurcations", "doi": "10.1103/physreva.71.042303", "nodeyear": 2005, "ref-by-count": 55, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1007520534", "attributes": {"title": "Atomic quantum memory: Cavity versus single-pass schemes", "doi": "10.1103/physreva.71.043801", "nodeyear": 2005, "ref-by-count": 53, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060829954", "attributes": {"title": "Superradiant Light Scattering from Thermal Atomic Vapors", "doi": "10.1103/physrevlett.94.083602", "nodeyear": 2005, "ref-by-count": 41, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060674805", "attributes": {"title": "Bridging the gap between X(5) and the interacting boson model", "doi": "10.1103/physrevc.71.034309", "nodeyear": 2005, "ref-by-count": 16, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059079470", "attributes": {"title": "The large N behaviour of the Lipkin model and exceptional points", "doi": "10.1088/0305-4470/38/9/002", "nodeyear": 2005, "ref-by-count": 40, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1060829713", "attributes": {"title": "Direct Observation of Dynamical Bifurcation between Two Driven Oscillation States of a Josephson Junction", "doi": "10.1103/physrevlett.94.027005", "nodeyear": 2005, "ref-by-count": 133, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1031172370", "attributes": {"title": "The shell model as a unified view of nuclear structure", "doi": "10.1103/revmodphys.77.427", "nodeyear": 2005, "ref-by-count": 842, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1047948630", "attributes": {"title": "Description of nuclear octupole and quadrupole deformation close to the axial symmetry and phase transitions in the octupole mode", "doi": "10.1103/physrevc.70.064319", "nodeyear": 2004, "ref-by-count": 38, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1007053255", "attributes": {"title": "Limits to phase resolution in matter-wave interferometry", "doi": "10.1103/physreva.70.063612", "nodeyear": 2004, "ref-by-count": 16, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1044880480", "attributes": {"title": "Phase transitions and quasidynamical symmetry in nuclear collective models: I. The U(5) to O(6) phase transition in the IBM", "doi": "10.1016/j.nuclphysa.2004.09.007", "nodeyear": 2004, "ref-by-count": 95, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1020702089", "attributes": {"title": "Alternative Interpretation of Sharply Rising E0 Strengths in Transitional Regions", "doi": "10.1103/physrevlett.93.152502", "nodeyear": 2004, "ref-by-count": 28, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1060674676", "attributes": {"title": "Comment on “Searching for E(5) behavior in nuclei”", "doi": "10.1103/physrevc.70.049801", "nodeyear": 2004, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1010220572", "attributes": {"title": "Physics of Nonhermitian Degeneracies", "doi": "10.1023/b:cjop.0000044002.05657.04", "nodeyear": 2004, "ref-by-count": 443, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1000824046", "attributes": {"title": "Entanglement and spin squeezing in the three-qubit transverse Ising model", "doi": "10.1016/j.physleta.2004.08.019", "nodeyear": 2004, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1043619387", "attributes": {"title": "Weak Dynamical Localization in Periodically Kicked Cold Atomic Gases", "doi": "10.1103/physrevlett.93.124101", "nodeyear": 2004, "ref-by-count": 23, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1047753851", "attributes": {"title": "Quasidynamical Symmetry in an Interacting Boson Model Phase Transition", "doi": "10.1103/physrevlett.93.122502", "nodeyear": 2004, "ref-by-count": 80, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060500571", "attributes": {"title": "Sub-shot-noise-limited measurements with Bose-Einstein condensates", "doi": "10.1103/physreva.70.033601", "nodeyear": 2004, "ref-by-count": 54, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1043354067", "attributes": {"title": "E(5) and X(5) critical point symmetries obtained from Davidson potentials through a variational procedure", "doi": "10.1103/physrevc.70.024305", "nodeyear": 2004, "ref-by-count": 38, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060674557", "attributes": {"title": "Evolution of the “β excitation” in axially symmetric transitional nuclei", "doi": "10.1103/physrevc.70.011304", "nodeyear": 2004, "ref-by-count": 104, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1013587089", "attributes": {"title": "Soft triaxial rotovibrational motion in the vicinity of γ=π∕6", "doi": "10.1103/physrevc.70.011302", "nodeyear": 2004, "ref-by-count": 60, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1020207781", "attributes": {"title": "Stability of Atomic Clocks Based on Entangled Atoms", "doi": "10.1103/physrevlett.92.230801", "nodeyear": 2004, "ref-by-count": 96, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060674224", "attributes": {"title": "Searching for E(5) behavior in nuclei", "doi": "10.1103/physrevc.69.064322", "nodeyear": 2004, "ref-by-count": 92, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060674216", "attributes": {"title": "N=90 region: The decay of Eu 154 to Gd 154", "doi": "10.1103/physrevc.69.064309", "nodeyear": 2004, "ref-by-count": 21, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060674213", "attributes": {"title": "Mapping the interacting boson approximation symmetry triangle: New trajectories of structural evolution of rare-earth nuclei", "doi": "10.1103/physrevc.69.064306", "nodeyear": 2004, "ref-by-count": 80, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060828378", "attributes": {"title": "Electromagnetically Induced Transparency with Squeezed Vacuum", "doi": "10.1103/physrevlett.92.203602", "nodeyear": 2004, "ref-by-count": 78, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1003628052", "attributes": {"title": "Collective Excitations of a Degenerate Gas at the BEC-BCS Crossover", "doi": "10.1103/physrevlett.92.203201", "nodeyear": 2004, "ref-by-count": 486, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060674175", "attributes": {"title": "Phase transitions versus shape coexistence", "doi": "10.1103/physrevc.69.054304", "nodeyear": 2004, "ref-by-count": 36, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1038988214", "attributes": {"title": "Phase transitions between axisymmetric and nonaxial nuclear shapes", "doi": "10.1134/1.1755385", "nodeyear": 2004, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1019411784", "attributes": {"title": "Z(5): critical point symmetry for the prolate to oblate nuclear shape phase transition", "doi": "10.1016/j.physletb.2004.03.029", "nodeyear": 2004, "ref-by-count": 129, "is_input_DOI": false, "category_for": "02:0.60;01:0.40", "level": "ref_l2"}}, {"id": "pub.1011087398", "attributes": {"title": "A computationally tractable version of the collective model", "doi": "10.1016/j.nuclphysa.2004.02.018", "nodeyear": 2004, "ref-by-count": 79, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1041801698", "attributes": {"title": "Entanglement Interferometry for Precision Measurement of Atomic Scattering Properties", "doi": "10.1103/physrevlett.92.160406", "nodeyear": 2004, "ref-by-count": 104, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1011902185", "attributes": {"title": "Consequences of wall stiffness for a β-soft potential", "doi": "10.1103/physrevc.69.044307", "nodeyear": 2004, "ref-by-count": 49, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1020674059", "attributes": {"title": "Condensation of Pairs of Fermionic Atoms near a Feshbach Resonance", "doi": "10.1103/physrevlett.92.120403", "nodeyear": 2004, "ref-by-count": 978, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060674109", "attributes": {"title": "Transition probabilities in Gd 154 : Evidence for X(5) critical point symmetry", "doi": "10.1103/physrevc.69.034334", "nodeyear": 2004, "ref-by-count": 118, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1024352953", "attributes": {"title": "Measurement of a mixed-spin-channel Feshbach resonance in Rb 87", "doi": "10.1103/physreva.69.032705", "nodeyear": 2004, "ref-by-count": 63, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1021947031", "attributes": {"title": "Ground state bands of the E(5) and X(5) critical symmetries obtained from Davidson potentials through a variational procedure", "doi": "10.1016/j.physletb.2004.01.018", "nodeyear": 2004, "ref-by-count": 71, "is_input_DOI": false, "category_for": "02:0.60;01:0.40", "level": "ref_l2"}}, {"id": "pub.1016359120", "attributes": {"title": "Observation of Resonance Condensation of Fermionic Atom Pairs", "doi": "10.1103/physrevlett.92.040403", "nodeyear": 2004, "ref-by-count": 1348, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060674011", "attributes": {"title": "Rotation-driven spherical-to-deformed shape transition in A≈100 nuclei and the cranked interacting boson model", "doi": "10.1103/physrevc.69.011301", "nodeyear": 2004, "ref-by-count": 25, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060673990", "attributes": {"title": "Test of X(5) for the γ degree of freedom", "doi": "10.1103/physrevc.68.064304", "nodeyear": 2003, "ref-by-count": 64, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060827495", "attributes": {"title": "Observation of Collective Friction Forces due to Spatial Self-Organization of Atoms: From Rayleigh to Bragg Scattering", "doi": "10.1103/physrevlett.91.203001", "nodeyear": 2003, "ref-by-count": 259, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060673983", "attributes": {"title": "Comment on “Reexamination of the N=90 transitional nuclei Nd 150 and Sm 152 ”", "doi": "10.1103/physrevc.68.059801", "nodeyear": 2003, "ref-by-count": 21, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1029543778", "attributes": {"title": "Simplified approach to the application of the geometric collective model", "doi": "10.1103/physrevc.68.054303", "nodeyear": 2003, "ref-by-count": 18, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059141471", "attributes": {"title": "Dynamical squeezing enhancement in the off-resonant Dicke model", "doi": "10.1088/1464-4266/6/1/006", "nodeyear": 2003, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:0.60;03:0.40", "level": "ref_l2"}}, {"id": "pub.1041066149", "attributes": {"title": "U(5)-O(6) transition in the interacting boson model and the E(5) critical point symmetry", "doi": "10.1103/physrevc.68.041302", "nodeyear": 2003, "ref-by-count": 71, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1033308270", "attributes": {"title": "Measurement-induced spin squeezing in a cavity", "doi": "10.1103/physreva.68.043820", "nodeyear": 2003, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1025127614", "attributes": {"title": "Supersolid versus Phase Separation in Atomic Bose-Fermi Mixtures", "doi": "10.1103/physrevlett.91.130404", "nodeyear": 2003, "ref-by-count": 156, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060827181", "attributes": {"title": "Low-Energy Coexisting Band in Gd154", "doi": "10.1103/physrevlett.91.102501", "nodeyear": 2003, "ref-by-count": 39, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1060673917", "attributes": {"title": "Searching for X(5) behavior in nuclei", "doi": "10.1103/physrevc.68.037301", "nodeyear": 2003, "ref-by-count": 62, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060673895", "attributes": {"title": "Ground-state shape phase transitions in nuclei: Thermodynamic analogy and finite-N effects", "doi": "10.1103/physrevc.68.034326", "nodeyear": 2003, "ref-by-count": 43, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060673873", "attributes": {"title": "Prolate-oblate phase transition in the Hf-Hg mass region", "doi": "10.1103/physrevc.68.031301", "nodeyear": 2003, "ref-by-count": 77, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060499456", "attributes": {"title": "Backaction-induced spin-squeezed states in a detuned quantum-nondemolition measurement", "doi": "10.1103/physreva.68.035802", "nodeyear": 2003, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1014640361", "attributes": {"title": "Relations between bosonic quadrature squeezing and atomic spin squeezing", "doi": "10.1103/physreva.68.033821", "nodeyear": 2003, "ref-by-count": 37, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1028952543", "attributes": {"title": "Phase transitions and critical points in the rare-earth region", "doi": "10.1103/physrevc.68.024307", "nodeyear": 2003, "ref-by-count": 42, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059051422", "attributes": {"title": "Description of 114 Cd in the E (5) Symmetry", "doi": "10.1088/0256-307x/20/8/313", "nodeyear": 2003, "ref-by-count": 9, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1051173433", "attributes": {"title": "Optimally squeezed spin states", "doi": "10.1103/physreva.68.013807", "nodeyear": 2003, "ref-by-count": 28, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1045761502", "attributes": {"title": "Quantum-correlated double-well tunneling of two-component Bose-Einstein condensates", "doi": "10.1103/physreva.68.013604", "nodeyear": 2003, "ref-by-count": 45, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1005892928", "attributes": {"title": "Polarization squeezing of intense pulses with a fiber-optic Sagnac interferometer", "doi": "10.1103/physreva.68.013815", "nodeyear": 2003, "ref-by-count": 54, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1016917732", "attributes": {"title": "Concepts and Methods in the Theory of Open Quantum Systems", "doi": "10.1007/3-540-44874-8_4", "nodeyear": 2003, "ref-by-count": 431, "is_input_DOI": false, "category_for": "01:0.60;02:0.40", "level": "ref_l2"}}, {"id": "pub.1024862071", "attributes": {"title": "Faraday spectroscopy in an optical lattice: a continuous probe of atom dynamics", "doi": "10.1088/1464-4266/5/4/301", "nodeyear": 2003, "ref-by-count": 42, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1065170744", "attributes": {"title": "Mechanical effects of light in optical resonators", "doi": "10.1364/josab.20.001098", "nodeyear": 2003, "ref-by-count": 151, "is_input_DOI": false, "category_for": "09:0.33;01:0.33;02:0.33", "level": "ref_l2"}}, {"id": "pub.1003323558", "attributes": {"title": "Separability criterion for separate quantum systems", "doi": "10.1103/physreva.67.052104", "nodeyear": 2003, "ref-by-count": 68, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1046510001", "attributes": {"title": "Algebraic Bethe ansatz method for the exact calculation of energy spectra and form factors: applications to models of Bose–Einstein condensates and metallic nanograins", "doi": "10.1088/0305-4470/36/19/201", "nodeyear": 2003, "ref-by-count": 124, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060826564", "attributes": {"title": "Signature for Vibrational to Rotational Evolution Along the Yrast Line", "doi": "10.1103/physrevlett.90.152502", "nodeyear": 2003, "ref-by-count": 103, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1006809789", "attributes": {"title": "Shape changes and test of the critical-point symmetry X(5) in N = 90 nuclei", "doi": "10.1140/epja/i2002-10347-6", "nodeyear": 2003, "ref-by-count": 34, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1048707800", "attributes": {"title": "Entanglement and spin squeezing in the two-atom Dicke model", "doi": "10.1088/1464-4266/5/2/101", "nodeyear": 2003, "ref-by-count": 18, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060839565", "attributes": {"title": "Self-consistent mean-field models for nuclear structure", "doi": "10.1103/revmodphys.75.121", "nodeyear": 2003, "ref-by-count": 1705, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1018185342", "attributes": {"title": "Many-particle entanglement in two-component Bose-Einstein condensates", "doi": "10.1103/physreva.67.013607", "nodeyear": 2003, "ref-by-count": 202, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1036319695", "attributes": {"title": "Mutual coherence and spin squeezing in double-well atomic condensates", "doi": "10.1016/s0375-9601(02)00131-7", "nodeyear": 2002, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1048921956", "attributes": {"title": "Continuous quantum nondemolition feedback and unconditional atomic spin squeezing", "doi": "10.1088/0953-4075/35/23/316", "nodeyear": 2002, "ref-by-count": 67, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060673587", "attributes": {"title": "Low-spin structure of 156Dy through γ-ray spectroscopy", "doi": "10.1103/physrevc.66.054310", "nodeyear": 2002, "ref-by-count": 62, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060825499", "attributes": {"title": "Triple Point of Nuclear Deformations", "doi": "10.1103/physrevlett.89.182502", "nodeyear": 2002, "ref-by-count": 106, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060498655", "attributes": {"title": "Spin squeezing in a driven Bose-Einstein condensate", "doi": "10.1103/physreva.66.043621", "nodeyear": 2002, "ref-by-count": 16, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1005025234", "attributes": {"title": "Quantum Monte Carlo calculations of A=9,10 nuclei", "doi": "10.1103/physrevc.66.044310", "nodeyear": 2002, "ref-by-count": 304, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1049930918", "attributes": {"title": "Algebraic analysis of bent-from-linear transition intensities: the vibronically resolved emission spectrum of methinophosphide (HCP)", "doi": "10.1016/s0009-2614(02)01419-7", "nodeyear": 2002, "ref-by-count": 22, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1060673467", "attributes": {"title": "Test of two-level crossing at the N=90 spherical-deformed critical point", "doi": "10.1103/physrevc.66.021304", "nodeyear": 2002, "ref-by-count": 53, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060498428", "attributes": {"title": "Bifurcation effects in coupled Bose-Einstein condensates", "doi": "10.1103/physreva.66.013602", "nodeyear": 2002, "ref-by-count": 21, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060673423", "attributes": {"title": "Lifetime and B(E2) values for the 31+ level in 152Sm", "doi": "10.1103/physrevc.65.067305", "nodeyear": 2002, "ref-by-count": 19, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1002222149", "attributes": {"title": "Spin squeezing via quantum feedback", "doi": "10.1103/physreva.65.061801", "nodeyear": 2002, "ref-by-count": 106, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1041840352", "attributes": {"title": "Coherent Atom Interactions Mediated by Dark-State Polaritons", "doi": "10.1103/physrevlett.88.243602", "nodeyear": 2002, "ref-by-count": 36, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060824936", "attributes": {"title": "B(E2) Values in N150d and the Critical Point Symmetry X(5)", "doi": "10.1103/physrevlett.88.232501", "nodeyear": 2002, "ref-by-count": 166, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1021190003", "attributes": {"title": "Limitations of squeezing due to collisional decoherence in Bose-Einstein condensates", "doi": "10.1088/0953-4075/35/10/312", "nodeyear": 2002, "ref-by-count": 9, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1043133057", "attributes": {"title": "Bogoliubov theory of entanglement in a Bose-Einstein condensate", "doi": "10.1103/physreva.65.043610", "nodeyear": 2002, "ref-by-count": 41, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1025998679", "attributes": {"title": "Scaling of entanglement close to a quantum phase transition", "doi": "10.1038/416608a", "nodeyear": 2002, "ref-by-count": 1446, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1060673300", "attributes": {"title": "Shape phase transitions in rotating nuclei via cranking the interacting boson model", "doi": "10.1103/physrevc.65.044312", "nodeyear": 2002, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060673232", "attributes": {"title": "Finite well solution for the E(5) Hamiltonian", "doi": "10.1103/physrevc.65.031304", "nodeyear": 2002, "ref-by-count": 43, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1040733718", "attributes": {"title": "Polarization Squeezing of Continuous Variable Stokes Parameters", "doi": "10.1103/physrevlett.88.093601", "nodeyear": 2002, "ref-by-count": 91, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1052419661", "attributes": {"title": "Nuclear binding energies: Global collective structure and local shell-model correlations", "doi": "10.1016/s0375-9474(01)01270-2", "nodeyear": 2002, "ref-by-count": 40, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1006913239", "attributes": {"title": "Limitations of entanglement between photons and atoms coupled out from a Bose-Einstein condensate", "doi": "10.1103/physreva.65.021605", "nodeyear": 2002, "ref-by-count": 30, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1052648436", "attributes": {"title": "Quantum phase transition from a superfluid to a Mott insulator in a gas of ultracold atoms", "doi": "10.1038/415039a", "nodeyear": 2002, "ref-by-count": 4429, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1029120630", "attributes": {"title": "Sufficient conditions for three-particle entanglement and their tests in recent experiments", "doi": "10.1103/physreva.65.012107", "nodeyear": 2001, "ref-by-count": 86, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1016267052", "attributes": {"title": "Creating Massive Entanglement of Bose-Einstein Condensed Atoms", "doi": "10.1103/physrevlett.87.170402", "nodeyear": 2001, "ref-by-count": 95, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060823818", "attributes": {"title": "Quantum Phase Transition for γ-Soft Nuclei", "doi": "10.1103/physrevlett.87.162501", "nodeyear": 2001, "ref-by-count": 112, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1036937707", "attributes": {"title": "Exploring Phase Coherence in a 2D Lattice of Bose-Einstein Condensates", "doi": "10.1103/physrevlett.87.160405", "nodeyear": 2001, "ref-by-count": 531, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1050586441", "attributes": {"title": "Squeezed Light from Spin-Squeezed Atoms", "doi": "10.1103/physrevlett.87.123601", "nodeyear": 2001, "ref-by-count": 34, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1062445233", "attributes": {"title": "Josephson Junction Arrays with Bose-Einstein Condensates", "doi": "10.1126/science.1062612", "nodeyear": 2001, "ref-by-count": 688, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060823477", "attributes": {"title": "Empirical Realization of a Critical Point Description in Atomic Nuclei", "doi": "10.1103/physrevlett.87.052503", "nodeyear": 2001, "ref-by-count": 321, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1060823476", "attributes": {"title": "Analytic Description of Critical Point Nuclei in a Spherical-Axially Deformed Shape Phase Transition", "doi": "10.1103/physrevlett.87.052502", "nodeyear": 2001, "ref-by-count": 654, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1060823255", "attributes": {"title": "Experimental Demonstration of Entanglement-Enhanced Rotation Angle Estimation Using Trapped Ions", "doi": "10.1103/physrevlett.86.5870", "nodeyear": 2001, "ref-by-count": 209, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1053673045", "attributes": {"title": "Positive-P simulations of spin squeezing in a two-component Bose condensate", "doi": "10.1103/physreva.64.013616", "nodeyear": 2001, "ref-by-count": 66, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1047906658", "attributes": {"title": "Two-neutron separation energies, binding energies and phase transitions in the interacting boson model", "doi": "10.1016/s0375-9474(00)00592-3", "nodeyear": 2001, "ref-by-count": 28, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1026831915", "attributes": {"title": "New Mechanism for the Enhancement of sd Dominance in Interacting Boson Models", "doi": "10.1103/physrevlett.86.4791", "nodeyear": 2001, "ref-by-count": 31, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1048985306", "attributes": {"title": "Entanglement and Extreme Spin Squeezing", "doi": "10.1103/physrevlett.86.4431", "nodeyear": 2001, "ref-by-count": 303, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1035230987", "attributes": {"title": "Observation of the ideal Josephson effect in superfluid 4He", "doi": "10.1038/35077024", "nodeyear": 2001, "ref-by-count": 98, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060726472", "attributes": {"title": "Decoherence and thermalization in a simple bosonic system", "doi": "10.1103/physreve.63.036127", "nodeyear": 2001, "ref-by-count": 20, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060822514", "attributes": {"title": "Transition from Spherical to Deformed Shapes of Nuclei in the Monte Carlo Shell Model", "doi": "10.1103/physrevlett.86.1171", "nodeyear": 2001, "ref-by-count": 42, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060496930", "attributes": {"title": "Quantum states of Bose-Einstein condensates formed by molecular dissociation", "doi": "10.1103/physreva.63.023604", "nodeyear": 2001, "ref-by-count": 54, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060839535", "attributes": {"title": "Bose-Einstein condensation in the alkali gases: Some fundamental concepts", "doi": "10.1103/revmodphys.73.307", "nodeyear": 2001, "ref-by-count": 1518, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1011862816", "attributes": {"title": "Squeezing entanglement", "doi": "10.1038/35051193", "nodeyear": 2001, "ref-by-count": 35, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1049625672", "attributes": {"title": "Quantum Communication between Atomic Ensembles Using Coherent Light", "doi": "10.1103/physrevlett.85.5643", "nodeyear": 2000, "ref-by-count": 255, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1024740024", "attributes": {"title": "The B(E2:4+2→2+2) value in 152Sm and β-softness in phase coexisting structures", "doi": "10.1016/s0370-2693(00)01233-8", "nodeyear": 2000, "ref-by-count": 36, "is_input_DOI": false, "category_for": "02:0.60;01:0.40", "level": "ref_l2"}}, {"id": "pub.1060822132", "attributes": {"title": "Creating Macroscopic Atomic Einstein-Podolsky-Rosen States from Bose-Einstein Condensates", "doi": "10.1103/physrevlett.85.3987", "nodeyear": 2000, "ref-by-count": 174, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1050230284", "attributes": {"title": "Entanglement transfer from light to atoms", "doi": "10.1080/09500340008232184", "nodeyear": 2000, "ref-by-count": 30, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060822061", "attributes": {"title": "Evidence for a Possible E(5) Symmetry in 134Ba", "doi": "10.1103/physrevlett.85.3584", "nodeyear": 2000, "ref-by-count": 252, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1060822060", "attributes": {"title": "Dynamic Symmetries at the Critical Point", "doi": "10.1103/physrevlett.85.3580", "nodeyear": 2000, "ref-by-count": 585, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060821716", "attributes": {"title": "Generation of Spin Squeezing via Continuous Quantum Nondemolition Measurement", "doi": "10.1103/physrevlett.85.1594", "nodeyear": 2000, "ref-by-count": 382, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060725247", "attributes": {"title": "Quantum phase transitions studied within the interacting boson model", "doi": "10.1103/physreve.61.6237", "nodeyear": 2000, "ref-by-count": 50, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1047063919", "attributes": {"title": "Distributed entanglement", "doi": "10.1103/physreva.61.052306", "nodeyear": 2000, "ref-by-count": 1755, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1040444443", "attributes": {"title": "Peres-Horodecki Separability Criterion for Continuous Variable Systems", "doi": "10.1103/physrevlett.84.2726", "nodeyear": 2000, "ref-by-count": 1497, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1014398038", "attributes": {"title": "Inseparability Criterion for Continuous Variable Systems", "doi": "10.1103/physrevlett.84.2722", "nodeyear": 2000, "ref-by-count": 1522, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1038179687", "attributes": {"title": "Quadrupole shape invariants in the interacting boson model", "doi": "10.1103/physrevc.61.021301", "nodeyear": 2000, "ref-by-count": 64, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1053071617", "attributes": {"title": "quantum noise", "doi": "10.1007/1-4020-0613-6_15239", "nodeyear": 2000, "ref-by-count": 115, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1060495708", "attributes": {"title": "Quantum nondemolition measurement of spin via the paramagnetic Faraday rotation", "doi": "10.1103/physreva.60.4974", "nodeyear": 1999, "ref-by-count": 113, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060820367", "attributes": {"title": "Dynamical Symmetry and Higher-Order Interactions", "doi": "10.1103/physrevlett.83.4269", "nodeyear": 1999, "ref-by-count": 58, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060672165", "attributes": {"title": "Phase coexistence in the interacting boson model and 152Sm", "doi": "10.1103/physrevc.60.061303", "nodeyear": 1999, "ref-by-count": 28, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1098667582", "attributes": {"title": "Quantum Chaos", "doi": "10.1017/cbo9780511524622", "nodeyear": 1999, "ref-by-count": 819, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1060672129", "attributes": {"title": "B(E2) values and phase coexistence in 152Sm", "doi": "10.1103/physrevc.60.054312", "nodeyear": 1999, "ref-by-count": 49, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1012704698", "attributes": {"title": "Spin-Spin Interaction and Spin Squeezing in an Optical Lattice", "doi": "10.1103/physrevlett.83.2274", "nodeyear": 1999, "ref-by-count": 224, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060495457", "attributes": {"title": "Quantum nondemolition measurements of collective atomic spin", "doi": "10.1103/physreva.60.2346", "nodeyear": 1999, "ref-by-count": 97, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1062566030", "attributes": {"title": "Superradiant Rayleigh Scattering from a Bose-Einstein Condensate", "doi": "10.1126/science.285.5427.571", "nodeyear": 1999, "ref-by-count": 404, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1049632162", "attributes": {"title": "Shape coexistence and the effective nucleon-nucleon interaction", "doi": "10.1103/physrevc.60.014316", "nodeyear": 1999, "ref-by-count": 284, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1008316332", "attributes": {"title": "Phase Transitions in Finite Nuclei and the Integer Nucleon Number Problem", "doi": "10.1103/physrevlett.82.5000", "nodeyear": 1999, "ref-by-count": 80, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1049368483", "attributes": {"title": "Squeezed few-photon states of the field generated from squeezed atoms", "doi": "10.1103/physreva.59.3959", "nodeyear": 1999, "ref-by-count": 23, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1010760440", "attributes": {"title": "Electric monopole transitions from low energy excitations in nuclei", "doi": "10.1016/s0375-9474(99)00143-8", "nodeyear": 1999, "ref-by-count": 186, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059185033", "attributes": {"title": "Quantum phase transitions", "doi": "10.1088/2058-7058/12/4/23", "nodeyear": 1999, "ref-by-count": 585, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1005109695", "attributes": {"title": "Phonon squeezed states: quantum noise reduction in solids", "doi": "10.1016/s0921-4526(98)01483-5", "nodeyear": 1999, "ref-by-count": 63, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060494991", "attributes": {"title": "State-selective Rabi and Ramsey magnetic resonance line shapes", "doi": "10.1103/physreva.59.r922", "nodeyear": 1999, "ref-by-count": 17, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060494914", "attributes": {"title": "Coherent oscillations between two weakly coupled Bose-Einstein condensates: Josephson effects, π oscillations, and macroscopic quantum self-trapping", "doi": "10.1103/physreva.59.620", "nodeyear": 1999, "ref-by-count": 763, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1002717445", "attributes": {"title": "Nonlinear Josephson-type oscillations of a driven, two-component Bose-Einstein condensate", "doi": "10.1103/physreva.59.r31", "nodeyear": 1999, "ref-by-count": 168, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060817875", "attributes": {"title": "Phase Coexistence in Transitional Nuclei and the Interacting-Boson Model", "doi": "10.1103/physrevlett.81.1191", "nodeyear": 1998, "ref-by-count": 149, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1031686744", "attributes": {"title": "Exactly Solvable Model of a Superconducting to Rotational Phase Transition", "doi": "10.1103/physrevlett.80.4394", "nodeyear": 1998, "ref-by-count": 45, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1060817288", "attributes": {"title": "Quantum Noise of an Atomic Spin Polarization Measurement", "doi": "10.1103/physrevlett.80.3487", "nodeyear": 1998, "ref-by-count": 121, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060671065", "attributes": {"title": "The first excited 0+ state in 152Sm", "doi": "10.1103/physrevc.57.r1553", "nodeyear": 1998, "ref-by-count": 49, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1008906037", "attributes": {"title": "Entanglement of Formation of an Arbitrary State of Two Qubits", "doi": "10.1103/physrevlett.80.2245", "nodeyear": 1998, "ref-by-count": 5968, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1045736543", "attributes": {"title": "Quantum superposition states of Bose-Einstein condensates", "doi": "10.1103/physreva.57.1208", "nodeyear": 1998, "ref-by-count": 346, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1028741585", "attributes": {"title": "Dynamical-symmetry content of transitional IBM-1 hamiltonians", "doi": "10.1016/s0370-2693(97)01533-5", "nodeyear": 1998, "ref-by-count": 34, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1028901322", "attributes": {"title": "Josephson effect between trapped Bose-Einstein condensates", "doi": "10.1103/physreva.57.r28", "nodeyear": 1998, "ref-by-count": 240, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1047509663", "attributes": {"title": "Quantum Coherent Atomic Tunneling between Two Trapped Bose-Einstein Condensates", "doi": "10.1103/physrevlett.79.4950", "nodeyear": 1997, "ref-by-count": 1013, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1098732024", "attributes": {"title": "Quantum Optics", "doi": "10.1017/cbo9780511813993", "nodeyear": 1997, "ref-by-count": 5533, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1007511315", "attributes": {"title": "A structural triangle for the geometric collective model", "doi": "10.1016/s0370-2693(97)00763-6", "nodeyear": 1997, "ref-by-count": 19, "is_input_DOI": false, "category_for": "02:0.60;01:0.40", "level": "ref_l2"}}, {"id": "pub.1060670774", "attributes": {"title": "Unified description of collective nuclei with the interacting boson model", "doi": "10.1103/physrevc.56.829", "nodeyear": 1997, "ref-by-count": 33, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1013675126", "attributes": {"title": "Particle-hole excitations in the interacting boson model (II): The U(5)-O(6) coupling", "doi": "10.1016/s0375-9474(97)00196-6", "nodeyear": 1997, "ref-by-count": 36, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1005256305", "attributes": {"title": "Particle-hole excitations in the interacting boson model (III): The O(6)-SU(3) coupling", "doi": "10.1016/s0375-9474(97)00195-4", "nodeyear": 1997, "ref-by-count": 22, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1047182146", "attributes": {"title": "Incompleteness of Representation Theory: Hidden Symmetries and Quantum Nonintegrability", "doi": "10.1103/physrevlett.79.537", "nodeyear": 1997, "ref-by-count": 34, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1044645483", "attributes": {"title": "Quantum oscillations between two weakly coupled reservoirs of superfluid 3He", "doi": "10.1038/41277", "nodeyear": 1997, "ref-by-count": 142, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060492307", "attributes": {"title": "Optimal frequency measurements with maximally correlated states", "doi": "10.1103/physreva.54.r4649", "nodeyear": 1996, "ref-by-count": 807, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1038304688", "attributes": {"title": "Field Theory of the Quantum Kicked Rotor", "doi": "10.1103/physrevlett.77.4536", "nodeyear": 1996, "ref-by-count": 59, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1014942113", "attributes": {"title": "Supersymmetry for systems with unitary disorder: circular ensembles", "doi": "10.1088/0305-4470/29/22/013", "nodeyear": 1996, "ref-by-count": 71, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060670095", "attributes": {"title": "Shapes and stability within the interacting boson model: Dynamical symmetries", "doi": "10.1103/physrevc.54.2374", "nodeyear": 1996, "ref-by-count": 79, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1005219924", "attributes": {"title": "Coincidence and correlation analysis for low spin states in 128Xe", "doi": "10.1016/0375-9474(96)00242-4", "nodeyear": 1996, "ref-by-count": 22, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1062553940", "attributes": {"title": "Universal Quantum Simulators", "doi": "10.1126/science.273.5278.1073", "nodeyear": 1996, "ref-by-count": 1348, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1045342100", "attributes": {"title": "Partial Dynamical Symmetry in Deformed Nuclei", "doi": "10.1103/physrevlett.77.818", "nodeyear": 1996, "ref-by-count": 85, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1035008566", "attributes": {"title": "Cranking approach to the interacting boson model: the behaviour of the intrinsic state with angular momentum", "doi": "10.1016/0375-9474(96)00121-2", "nodeyear": 1996, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1008912168", "attributes": {"title": "Particle-hole excitations in the interacting boson model (I) General structure and symmetries", "doi": "10.1016/0375-9474(96)00019-x", "nodeyear": 1996, "ref-by-count": 38, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060812753", "attributes": {"title": "Synchronous Collapses and Revivals of Atomic Dipole Fluctuations and Photon Fano Factor beyond the Standard Quantum Limit", "doi": "10.1103/physrevlett.76.2045", "nodeyear": 1996, "ref-by-count": 21, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060812645", "attributes": {"title": "Manifestation of Classical Bifurcation in the Spectrum of the Integrable Quantum Dimer", "doi": "10.1103/physrevlett.76.1607", "nodeyear": 1996, "ref-by-count": 80, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1042823964", "attributes": {"title": "Quantum phonon optics: Coherent and squeezed atomic displacements", "doi": "10.1103/physrevb.53.2419", "nodeyear": 1996, "ref-by-count": 68, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1004646989", "attributes": {"title": "The IBM extended consistent-Q formalism across the N = 82–126 shell. Empirical trends and anomalies", "doi": "10.1016/0370-2693(95)01442-x", "nodeyear": 1996, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:0.60;01:0.40", "level": "ref_l2"}}, {"id": "pub.1060839373", "attributes": {"title": "Intrinsic reflection asymmetry in atomic nuclei", "doi": "10.1103/revmodphys.68.349", "nodeyear": 1996, "ref-by-count": 521, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060491579", "attributes": {"title": "Ramsey spectroscopy with nonclassical light sources", "doi": "10.1103/physreva.53.467", "nodeyear": 1996, "ref-by-count": 15, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060812343", "attributes": {"title": "Atom Optics Realization of the Quantum δ-Kicked Rotor", "doi": "10.1103/physrevlett.75.4598", "nodeyear": 1995, "ref-by-count": 508, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060812205", "attributes": {"title": "Bose-Einstein Condensation in a Gas of Sodium Atoms", "doi": "10.1103/physrevlett.75.3969", "nodeyear": 1995, "ref-by-count": 4193, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1029418627", "attributes": {"title": "Observation of Bose-Einstein Condensation in a Dilute Atomic Vapor", "doi": "10.1126/science.269.5221.198", "nodeyear": 1995, "ref-by-count": 5362, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060810423", "attributes": {"title": "Closed Orbit Bifurcations in Continuum Stark Spectra", "doi": "10.1103/physrevlett.74.1538", "nodeyear": 1995, "ref-by-count": 65, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1037040727", "attributes": {"title": "Microscopic aspects of nuclear deformation", "doi": "10.1016/0375-9474(94)90966-0", "nodeyear": 1994, "ref-by-count": 43, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060489764", "attributes": {"title": "Squeezed atomic states and projection noise in spectroscopy", "doi": "10.1103/physreva.50.67", "nodeyear": 1994, "ref-by-count": 815, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1021912934", "attributes": {"title": "Microscopic origin of nuclear deformations", "doi": "10.1016/0375-9474(94)90037-x", "nodeyear": 1994, "ref-by-count": 54, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1041883040", "attributes": {"title": "Collective atomic recoil laser (CARL) optical gain without inversion by collective atomic recoil and self-bunching of two-level atoms", "doi": "10.1016/0168-9002(94)90382-4", "nodeyear": 1994, "ref-by-count": 151, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060807702", "attributes": {"title": "Universal anharmonic vibrator description of nuclei and critical nuclear phase transitions", "doi": "10.1103/physrevlett.71.227", "nodeyear": 1993, "ref-by-count": 98, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060808347", "attributes": {"title": "Diagrammatic approach to Anderson localization in the quantum kicked rotator", "doi": "10.1103/physrevlett.71.69", "nodeyear": 1993, "ref-by-count": 22, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1051363735", "attributes": {"title": "Chaotic properties of the interacting boson model", "doi": "10.1016/0375-9474(93)90237-r", "nodeyear": 1993, "ref-by-count": 62, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1007846341", "attributes": {"title": "Variety of shapes in the mercury and lead isotopes", "doi": "10.1016/0370-2693(93)90107-s", "nodeyear": 1993, "ref-by-count": 140, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060486851", "attributes": {"title": "Spin squeezing and reduced quantum noise in spectroscopy", "doi": "10.1103/physreva.46.r6797", "nodeyear": 1992, "ref-by-count": 690, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060805434", "attributes": {"title": "Symmetry breaking and localization in quantum chaotic systems", "doi": "10.1103/physrevlett.69.217", "nodeyear": 1992, "ref-by-count": 48, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1000717326", "attributes": {"title": "Chaos in a spin-boson system: Classical analysis", "doi": "10.1016/0003-4916(92)90178-o", "nodeyear": 1992, "ref-by-count": 53, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1039153009", "attributes": {"title": "Static multipole deformations in nuclei", "doi": "10.1016/0146-6410(92)90029-2", "nodeyear": 1992, "ref-by-count": 15, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1098679389", "attributes": {"title": "The Interacting Boson-Fermion Model", "doi": "10.1017/cbo9780511549724", "nodeyear": 1991, "ref-by-count": 325, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1060803970", "attributes": {"title": "Chaotic properties of the interacting-boson model: A discovery of a new regular region", "doi": "10.1103/physrevlett.67.816", "nodeyear": 1991, "ref-by-count": 83, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060839221", "attributes": {"title": "Boson realizations of Lie algebras with applications to nuclear physics", "doi": "10.1103/revmodphys.63.375", "nodeyear": 1991, "ref-by-count": 362, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1022722372", "attributes": {"title": "Nuclear Shapes in Mean Field Theory", "doi": "10.1146/annurev.ns.40.120190.002255", "nodeyear": 1990, "ref-by-count": 202, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060665563", "attributes": {"title": "Angular momentum projection in geometric interpretation of the interacting boson model", "doi": "10.1103/physrevc.42.2023", "nodeyear": 1990, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060665491", "attributes": {"title": "Model of a superconducting phase transition", "doi": "10.1103/physrevc.42.1422", "nodeyear": 1990, "ref-by-count": 18, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060480033", "attributes": {"title": "Quantum dynamics of the nonlinear rotator and the effects of continual spin measurement", "doi": "10.1103/physreva.40.2417", "nodeyear": 1989, "ref-by-count": 147, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1062928725", "attributes": {"title": "MICROSCOPIC SELF-CONSISTENT AND COLLECTIVE MODEL DESCRIPTION OF LOW-ENERGY NUCLEAR STRUCTURE", "doi": "10.1142/s0217751x89000844", "nodeyear": 1989, "ref-by-count": 20, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1013762487", "attributes": {"title": "Principal squeezing of vacuum fluctuations", "doi": "10.1016/0030-4018(88)90322-7", "nodeyear": 1988, "ref-by-count": 90, "is_input_DOI": false, "category_for": "09:0.33;10:0.33;02:0.33", "level": "ref_l2"}}, {"id": "pub.1060797016", "attributes": {"title": "Nuclear Deformation: A Proton-Neutron Effect?", "doi": "10.1103/physrevlett.60.2254", "nodeyear": 1988, "ref-by-count": 61, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1001844408", "attributes": {"title": "Octupole vibrations in nuclei", "doi": "10.1088/0034-4885/51/4/002", "nodeyear": 1988, "ref-by-count": 76, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060839152", "attributes": {"title": "The interacting boson approximation", "doi": "10.1103/revmodphys.60.389", "nodeyear": 1988, "ref-by-count": 305, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1016574452", "attributes": {"title": "1N expansion in the interacting boson model", "doi": "10.1016/0003-4916(88)90117-0", "nodeyear": 1988, "ref-by-count": 63, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1098678954", "attributes": {"title": "The Interacting Boson Model", "doi": "10.1017/cbo9780511895517", "nodeyear": 1987, "ref-by-count": 1832, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1023341115", "attributes": {"title": "Landau theory of shape transitions in hot rotating nuclei", "doi": "10.1016/0375-9474(87)90107-2", "nodeyear": 1987, "ref-by-count": 69, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060662710", "attributes": {"title": "Deriving an interacting boson model from the fermion SO(8) model", "doi": "10.1103/physrevc.35.1517", "nodeyear": 1987, "ref-by-count": 19, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060794360", "attributes": {"title": "Oscillatory exchange of atoms between traps containing Bose condensates", "doi": "10.1103/physrevlett.57.3164", "nodeyear": 1986, "ref-by-count": 199, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059086874", "attributes": {"title": "Random-phase approximation and broken symmetry", "doi": "10.1088/0305-4616/12/9/006", "nodeyear": 1986, "ref-by-count": 21, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1036861449", "attributes": {"title": "Validity of the self-consistent cranking approximation in the SU(3)-U(5) phase transition", "doi": "10.1016/0370-2693(85)90906-2", "nodeyear": 1985, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:0.60;01:0.40", "level": "ref_l2"}}, {"id": "pub.1039179998", "attributes": {"title": "Interacting boson approximation and triaxial shapes", "doi": "10.1016/0370-2693(85)91370-x", "nodeyear": 1985, "ref-by-count": 19, "is_input_DOI": false, "category_for": "02:0.60;01:0.40", "level": "ref_l2"}}, {"id": "pub.1047713864", "attributes": {"title": "IBA consistent-Q formalism extended to the vibrational region", "doi": "10.1016/0370-2693(85)91573-4", "nodeyear": 1985, "ref-by-count": 117, "is_input_DOI": false, "category_for": "02:0.60;01:0.40", "level": "ref_l2"}}, {"id": "pub.1046892149", "attributes": {"title": "Quartic anharmonicity and angular momentum effects in even-even spherical nuclei", "doi": "10.1016/0375-9474(85)90428-2", "nodeyear": 1985, "ref-by-count": 32, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1018590889", "attributes": {"title": "A shell-model interpretation of intruder states and the onset of deformation in even-even nuclei", "doi": "10.1016/0370-2693(85)91575-8", "nodeyear": 1985, "ref-by-count": 121, "is_input_DOI": false, "category_for": "02:0.60;01:0.40", "level": "ref_l2"}}, {"id": "pub.1060791130", "attributes": {"title": "Quantization of Asymmetric Shapes in Nuclei", "doi": "10.1103/physrevlett.54.1126", "nodeyear": 1985, "ref-by-count": 82, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1060661648", "attributes": {"title": "Phase ambiguities in the O(6) limit of the interacting boson model", "doi": "10.1103/physrevc.31.671", "nodeyear": 1985, "ref-by-count": 33, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060692192", "attributes": {"title": "Squeezed states in phase-sensing interferometers", "doi": "10.1103/physrevd.30.2548", "nodeyear": 1984, "ref-by-count": 208, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1038414711", "attributes": {"title": "Calculations away from SU(3) symmetry by cranking the interacting boson model", "doi": "10.1016/0370-2693(84)91463-1", "nodeyear": 1984, "ref-by-count": 22, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060534420", "attributes": {"title": "Localization in a d-dimensional incommensurate structure", "doi": "10.1103/physrevb.29.4272", "nodeyear": 1984, "ref-by-count": 28, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1060790099", "attributes": {"title": "Effective Triaxial Deformations in the Interacting-Boson Model", "doi": "10.1103/physrevlett.52.263", "nodeyear": 1984, "ref-by-count": 32, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1020847848", "attributes": {"title": "Destruction of order in nuclear spectra by a residual GOE interaction", "doi": "10.1016/0375-9474(83)90385-8", "nodeyear": 1983, "ref-by-count": 52, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1015453451", "attributes": {"title": "Coexistence in odd-mass nuclei", "doi": "10.1016/0370-1573(83)90085-6", "nodeyear": 1983, "ref-by-count": 438, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060659837", "attributes": {"title": "Muonic x-ray measurement of the monopole and quadrupole charge parameters of Gd154-158,160", "doi": "10.1103/physrevc.27.1772", "nodeyear": 1983, "ref-by-count": 33, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060788070", "attributes": {"title": "Localization in an Incommensurate Potential: An Exactly Solvable Model", "doi": "10.1103/physrevlett.49.833", "nodeyear": 1982, "ref-by-count": 215, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060531200", "attributes": {"title": "Scaling for first-order phase transitions in thermodynamic and finite systems", "doi": "10.1103/physrevb.26.2507", "nodeyear": 1982, "ref-by-count": 416, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1038336282", "attributes": {"title": "Simulating physics with computers", "doi": "10.1007/bf02650179", "nodeyear": 1982, "ref-by-count": 3692, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1060787073", "attributes": {"title": "Revised Formulation of the Phenomenological Interacting Boson Approximation", "doi": "10.1103/physrevlett.48.1385", "nodeyear": 1982, "ref-by-count": 180, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060659255", "attributes": {"title": "Relationship between the Bohr-Mottelson model and the interacting boson model", "doi": "10.1103/physrevc.25.2733", "nodeyear": 1982, "ref-by-count": 16, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1040675567", "attributes": {"title": "Catastrophe theory in physics", "doi": "10.1088/0034-4885/45/2/002", "nodeyear": 1982, "ref-by-count": 56, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060659368", "attributes": {"title": "Interpretation of the A≈100 transitional region in the framework of the interacting boson model", "doi": "10.1103/physrevc.25.650", "nodeyear": 1982, "ref-by-count": 119, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060658984", "attributes": {"title": "Classical limit of the interacting boson Hamiltonian", "doi": "10.1103/physrevc.24.684", "nodeyear": 1981, "ref-by-count": 121, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060658394", "attributes": {"title": "Phase transitions and the geometric properties of the interacting boson model", "doi": "10.1103/physrevc.23.1254", "nodeyear": 1981, "ref-by-count": 161, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1003831851", "attributes": {"title": "On shapes and shape phase transitions in the interacting boson model", "doi": "10.1016/0375-9474(80)90492-3", "nodeyear": 1980, "ref-by-count": 149, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1017460463", "attributes": {"title": "A schematic model for monopole and quadrupole pairing in nuclei", "doi": "10.1016/0003-4916(80)90381-4", "nodeyear": 1980, "ref-by-count": 253, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1014462654", "attributes": {"title": "Interacting boson model of collective nuclear states IV. The O(6) limit", "doi": "10.1016/0003-4916(79)90347-6", "nodeyear": 1979, "ref-by-count": 880, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1059087853", "attributes": {"title": "The onset of deformation in the neutron-rich Ba isotopes", "doi": "10.1088/0305-4616/5/10/008", "nodeyear": 1979, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060784536", "attributes": {"title": "Interacting Boson-Fermion Model of Collective States in Odd-A Nuclei", "doi": "10.1103/physrevlett.43.679", "nodeyear": 1979, "ref-by-count": 446, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1026471851", "attributes": {"title": "Microscopic study of the shape transition in the zirconium isotopes", "doi": "10.1016/0370-2693(79)90412-x", "nodeyear": 1979, "ref-by-count": 112, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1023527379", "attributes": {"title": "Boson expansions and quantization of time-dependent self-consistent fields (II). Relation between finite and infinite boson expansions", "doi": "10.1016/0375-9474(78)90490-6", "nodeyear": 1978, "ref-by-count": 44, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1000653517", "attributes": {"title": "Nuclear shell model and interacting bosons", "doi": "10.1016/0375-9474(78)90532-8", "nodeyear": 1978, "ref-by-count": 709, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1058100372", "attributes": {"title": "Group theory of the collective model of the nucleus", "doi": "10.1063/1.523352", "nodeyear": 1977, "ref-by-count": 110, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1046578644", "attributes": {"title": "Towards a unified microscopic description of nuclear deformation", "doi": "10.1016/0370-2693(77)90825-5", "nodeyear": 1977, "ref-by-count": 255, "is_input_DOI": false, "category_for": "02:0.60;01:0.40", "level": "ref_l2"}}, {"id": "pub.1030191390", "attributes": {"title": "Collective nuclear states as symmetric couplings of proton and neutron excitations", "doi": "10.1016/0370-2693(77)90860-7", "nodeyear": 1977, "ref-by-count": 625, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060521318", "attributes": {"title": "Quantum critical phenomena", "doi": "10.1103/physrevb.14.1165", "nodeyear": 1976, "ref-by-count": 1679, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1008049063", "attributes": {"title": "Interacting boson model of collective states I. The vibrational limit", "doi": "10.1016/0003-4916(76)90097-x", "nodeyear": 1976, "ref-by-count": 1354, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1109642906", "attributes": {"title": "Quantum Detection and Estimation Theory", "doi": "10.1016/s0076-5392(08)x6017-5", "nodeyear": 1976, "ref-by-count": 229, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1060465244", "attributes": {"title": "Classical-quantum correspondence for multilevel systems", "doi": "10.1103/physreva.12.1019", "nodeyear": 1975, "ref-by-count": 133, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1006517975", "attributes": {"title": "Collective Hamiltonian derived from the pairing-plus-quadrupole model Modification and application to the transitional nuclei, 150, 152Sm††Work supported in part by US National Science Foundation (contract no GP-34634) and by NORDITA", "doi": "10.1016/0375-9474(74)90518-1", "nodeyear": 1974, "ref-by-count": 127, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1050463690", "attributes": {"title": "An algebraic treatment of the nuclear quadrupole degree of freedom", "doi": "10.1016/0375-9474(74)90165-1", "nodeyear": 1974, "ref-by-count": 221, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1017561574", "attributes": {"title": "The (p, t) reactions on nuclei in the rare earth region", "doi": "10.1016/0375-9474(73)90148-6", "nodeyear": 1973, "ref-by-count": 124, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1022248405", "attributes": {"title": "Geometry of symmetrized states", "doi": "10.1016/0003-4916(72)90147-9", "nodeyear": 1972, "ref-by-count": 260, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1060774884", "attributes": {"title": "Strongly Excited 0+ States Observed in (p, t) Reactions on Gadolinium Nuclei", "doi": "10.1103/physrevlett.27.1235", "nodeyear": 1971, "ref-by-count": 49, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1033014139", "attributes": {"title": "New “Coherent” States associated with non-compact groups", "doi": "10.1007/bf01646483", "nodeyear": 1971, "ref-by-count": 559, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060773820", "attributes": {"title": "Can a Solid Be \"Superfluid\"?", "doi": "10.1103/physrevlett.25.1543", "nodeyear": 1970, "ref-by-count": 560, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060467976", "attributes": {"title": "Speculations on Bose-Einstein Condensation and Quantum Crystals", "doi": "10.1103/physreva.2.256", "nodeyear": 1970, "ref-by-count": 469, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1014048276", "attributes": {"title": "Low-lying octupole states of the doubly even deformed nuclei with 152 ≦ A ≦ 190", "doi": "10.1016/0375-9474(70)90309-x", "nodeyear": 1970, "ref-by-count": 225, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1048074289", "attributes": {"title": "Temperature dependence near phase transitions in classical and quant. mech. canonical statistics", "doi": "10.1007/bf01326224", "nodeyear": 1967, "ref-by-count": 61, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1057900505", "attributes": {"title": "Nuclear Shell Theory", "doi": "10.1063/1.3051142", "nodeyear": 1963, "ref-by-count": 764, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1061435768", "attributes": {"title": "Comparison of quantum and semiclassical radiation theories with application to the beam maser", "doi": "10.1109/proc.1963.1664", "nodeyear": 1963, "ref-by-count": 3927, "is_input_DOI": false, "category_for": "09:0.60;08:0.40", "level": "ref_l2"}}, {"id": "pub.1050017917", "attributes": {"title": "Possible new effects in superconductive tunnelling", "doi": "10.1016/0031-9163(62)91369-0", "nodeyear": 1962, "ref-by-count": 2878, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1060838113", "attributes": {"title": "Effective Interactions and Coupling Schemes in Nuclei", "doi": "10.1103/revmodphys.34.704", "nodeyear": 1962, "ref-by-count": 285, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1000009137", "attributes": {"title": "Stability conditions and nuclear rotations in the Hartree-Fock theory", "doi": "10.1016/0029-5582(60)90048-1", "nodeyear": 1960, "ref-by-count": 690, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060417615", "attributes": {"title": "Surface Oscillations in Even-Even Nuclei", "doi": "10.1103/physrev.102.788", "nodeyear": 1956, "ref-by-count": 618, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1060461257", "attributes": {"title": "Mixed Configurations in Nuclei", "doi": "10.1103/physrev.92.1211", "nodeyear": 1953, "ref-by-count": 215, "is_input_DOI": false, "category_for": "17:1.00", "level": "ref_l2"}}, {"id": "pub.1060460944", "attributes": {"title": "Isotope Shift Anomalies and Nuclear Structure", "doi": "10.1103/physrev.91.1488", "nodeyear": 1953, "ref-by-count": 81, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060459525", "attributes": {"title": "Statistical Theory of Equations of State and Phase Transitions. I. Theory of Condensation", "doi": "10.1103/physrev.87.404", "nodeyear": 1952, "ref-by-count": 1506, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1000173117", "attributes": {"title": "Stability of polyatomic molecules in degenerate electronic states - I—Orbital degeneracy", "doi": "10.1098/rspa.1937.0142", "nodeyear": 1937, "ref-by-count": 2648, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1004415602", "attributes": {"title": "Eigenfunctions for calculating electronic vibrational intensities", "doi": "10.1098/rspa.1932.0045", "nodeyear": 1932, "ref-by-count": 96, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1020613156", "attributes": {"title": "Phase transitions in the sdg interacting boson model", "doi": "10.1016/j.nuclphysa.2010.01.247", "nodeyear": 2010, "ref-by-count": 19, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060677183", "attributes": {"title": "High-precision Penning-trap mass measurements of heavy xenon isotopes for nuclear structure studies", "doi": "10.1103/physrevc.80.044323", "nodeyear": 2009, "ref-by-count": 23, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060677032", "attributes": {"title": "Unified framework for understanding pair transfer between collective states in atomic nuclei", "doi": "10.1103/physrevc.80.011303", "nodeyear": 2009, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1038409804", "attributes": {"title": "Recent developments in no-core shell-model calculations", "doi": "10.1088/0954-3899/36/8/083101", "nodeyear": 2009, "ref-by-count": 269, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1040915357", "attributes": {"title": "Direct Detection of Abortive RNA Transcripts in Vivo", "doi": "10.1126/science.1169237", "nodeyear": 2009, "ref-by-count": 86, "is_input_DOI": false, "category_for": "06:1.00", "level": "ref_l2"}}, {"id": "pub.1047766368", "attributes": {"title": "Microscopic analysis of nuclear quantum phase transitions in the N≈90 region", "doi": "10.1103/physrevc.79.054301", "nodeyear": 2009, "ref-by-count": 129, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1021427310", "attributes": {"title": "Scanning Tunneling Spectroscopy of Graphene on Graphite", "doi": "10.1103/physrevlett.102.176804", "nodeyear": 2009, "ref-by-count": 396, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1041079423", "attributes": {"title": "Nuclear charge radii of molybdenum fission fragments", "doi": "10.1016/j.physletb.2009.02.050", "nodeyear": 2009, "ref-by-count": 74, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1033456373", "attributes": {"title": "Criticality in the configuration-mixed interacting boson model: (2) Qˆ(χ1)Qˆ(χ1)–Qˆ(χ2)Qˆ(χ2) mixing", "doi": "10.1016/j.nuclphysa.2009.01.002", "nodeyear": 2009, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1000374332", "attributes": {"title": "Decoherence, entanglement and irreversibility in quantum dynamical systems with few degrees of freedom", "doi": "10.1080/00018730902831009", "nodeyear": 2009, "ref-by-count": 131, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060676472", "attributes": {"title": "UBF(5) to SUBF(3) shape phase transition in odd nuclei for j=1/2, 3/2, and 5/2 orbits: The role of the odd particle at the critical point", "doi": "10.1103/physrevc.79.014306", "nodeyear": 2009, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1050408744", "attributes": {"title": "The electronic properties of graphene", "doi": "10.1103/revmodphys.81.109", "nodeyear": 2009, "ref-by-count": 17809, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1025036962", "attributes": {"title": "Random matrices and chaos in nuclear physics: Nuclear structure", "doi": "10.1103/revmodphys.81.539", "nodeyear": 2009, "ref-by-count": 224, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1006850094", "attributes": {"title": "Modern theory of nuclear forces", "doi": "10.1103/revmodphys.81.1773", "nodeyear": 2009, "ref-by-count": 1127, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1040491531", "attributes": {"title": "Large Area, Few-Layer Graphene Films on Arbitrary Substrates by Chemical Vapor Deposition", "doi": "10.1021/nl801827v", "nodeyear": 2008, "ref-by-count": 4724, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1036884583", "attributes": {"title": "Kohn-Luttinger superconductivity in graphene", "doi": "10.1103/physrevb.78.205431", "nodeyear": 2008, "ref-by-count": 114, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1031460804", "attributes": {"title": "Entanglement and the generation of random states in the quantum chaotic dynamics of kicked coupled tops", "doi": "10.1103/physreve.78.046211", "nodeyear": 2008, "ref-by-count": 35, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1029576577", "attributes": {"title": "Chaos, entanglement, and decoherence in the quantum kicked top", "doi": "10.1103/physreva.78.042318", "nodeyear": 2008, "ref-by-count": 45, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060676303", "attributes": {"title": "Evolution of nuclear shapes in medium mass isotopes from a microscopic perspective", "doi": "10.1103/physrevc.78.034314", "nodeyear": 2008, "ref-by-count": 62, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1007530657", "attributes": {"title": "Quantum control of the hyperfine-coupled electron and nuclear spins in alkali-metal atoms", "doi": "10.1103/physreva.78.023404", "nodeyear": 2008, "ref-by-count": 29, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1031979595", "attributes": {"title": "Triaxiality in the interacting boson model", "doi": "10.1016/j.nuclphysa.2008.05.007", "nodeyear": 2008, "ref-by-count": 32, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1040606030", "attributes": {"title": "Approaching ballistic transport in suspended graphene", "doi": "10.1038/nnano.2008.199", "nodeyear": 2008, "ref-by-count": 2437, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1038868267", "attributes": {"title": "Unified Description of 0+ States in a Large Class of Nuclear Collective Models", "doi": "10.1103/physrevlett.101.022501", "nodeyear": 2008, "ref-by-count": 24, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060676176", "attributes": {"title": "Spin dependence of critical point behavior for first and second order phase transitions in nuclei", "doi": "10.1103/physrevc.77.061302", "nodeyear": 2008, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1034642959", "attributes": {"title": "Ultrahigh electron mobility in suspended graphene", "doi": "10.1016/j.ssc.2008.02.024", "nodeyear": 2008, "ref-by-count": 5837, "is_input_DOI": false, "category_for": "10:1.00", "level": "ref_l2"}}, {"id": "pub.1044966137", "attributes": {"title": "Relation between E(5) models and the interacting boson model", "doi": "10.1103/physrevc.77.054307", "nodeyear": 2008, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1011664403", "attributes": {"title": "Multiparticle entanglement in the Lipkin-Meshkov-Glick model", "doi": "10.1103/physreva.77.052105", "nodeyear": 2008, "ref-by-count": 19, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1012266401", "attributes": {"title": "Simple Empirical Order Parameter for a First-Order Quantum Phase Transition in Atomic Nuclei", "doi": "10.1103/physrevlett.100.142501", "nodeyear": 2008, "ref-by-count": 40, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1025719832", "attributes": {"title": "Decoherence induced by a dynamic spin environment: The universal regime", "doi": "10.1103/physreva.77.022317", "nodeyear": 2008, "ref-by-count": 34, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1045212838", "attributes": {"title": "Bending vibrational modes of ABBA molecules: algebraic approach and its classical limit", "doi": "10.1080/00268970701757883", "nodeyear": 2008, "ref-by-count": 27, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1026720084", "attributes": {"title": "Decoherence in a two-level system coupled to a fermion environment with phase transitions", "doi": "10.1016/j.physleta.2007.10.001", "nodeyear": 2008, "ref-by-count": 2, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1060676000", "attributes": {"title": "First experimental test of X(5) critical-point symmetry in the A~130 mass region: Low-spin states and the collective structure of Ce130", "doi": "10.1103/physrevc.77.014307", "nodeyear": 2008, "ref-by-count": 16, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060835107", "attributes": {"title": "Enhanced Decoherence in the Vicinity of a Phase Transition", "doi": "10.1103/physrevlett.99.267202", "nodeyear": 2007, "ref-by-count": 10, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1036551131", "attributes": {"title": "Equations of motion for a spectrum-generating algebra: Lipkin–Meshkov–Glick model", "doi": "10.1088/1751-8113/41/2/025208", "nodeyear": 2007, "ref-by-count": 7, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1021984958", "attributes": {"title": "Graphene Bilayer with a Twist: Electronic Structure", "doi": "10.1103/physrevlett.99.256802", "nodeyear": 2007, "ref-by-count": 943, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1025059126", "attributes": {"title": "Biased Bilayer Graphene: Semiconductor with a Gap Tunable by the Electric Field Effect", "doi": "10.1103/physrevlett.99.216802", "nodeyear": 2007, "ref-by-count": 1533, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1060675924", "attributes": {"title": "Nuclear shape-phase diagrams", "doi": "10.1103/physrevc.76.054304", "nodeyear": 2007, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060622841", "attributes": {"title": "Time evolution and decoherence of a spin- 12 particle coupled to a spin bath in thermal equilibrium", "doi": "10.1103/physrevb.76.174306", "nodeyear": 2007, "ref-by-count": 40, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1051523502", "attributes": {"title": "Quantum critical dynamics of a qubit coupled to an isotropic Lipkin-Meshkov-Glick bath", "doi": "10.1103/physreva.76.012104", "nodeyear": 2007, "ref-by-count": 29, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1015971387", "attributes": {"title": "Chaos and complexity of quantum motion", "doi": "10.1088/1751-8113/40/28/s02", "nodeyear": 2007, "ref-by-count": 46, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1060675732", "attributes": {"title": "Shape phase transition in odd nuclei in a multi-j model: The UB(6)⊗UF(12) case", "doi": "10.1103/physrevc.75.064316", "nodeyear": 2007, "ref-by-count": 42, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1016958841", "attributes": {"title": "Decoherence induced by interacting quantum spin baths", "doi": "10.1103/physreva.75.032333", "nodeyear": 2007, "ref-by-count": 163, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1007119461", "attributes": {"title": "Universal decoherence induced by an environmental quantum phase transition", "doi": "10.1103/physreva.75.032337", "nodeyear": 2007, "ref-by-count": 79, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1052791836", "attributes": {"title": "The rise of graphene", "doi": "10.1038/nmat1849", "nodeyear": 2007, "ref-by-count": 30719, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1041760964", "attributes": {"title": "Quadrupole collective variables in the natural Cartan?Weyl basis", "doi": "10.1088/1751-8113/40/11/009", "nodeyear": 2007, "ref-by-count": 12, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1031717969", "attributes": {"title": "Critical-Point Symmetries in Boson-Fermion Systems: The Case of Shape Transitions in Odd Nuclei in a Multiorbit Model", "doi": "10.1103/physrevlett.98.052501", "nodeyear": 2007, "ref-by-count": 46, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1045387337", "attributes": {"title": "Loschmidt echo and Berry phase of a quantum system coupled to an XY spin chain: Proximity to a quantum phase transition", "doi": "10.1103/physreva.75.012102", "nodeyear": 2007, "ref-by-count": 75, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1029374432", "attributes": {"title": "Analytic descriptions for transitional nuclei near the critical point", "doi": "10.1016/j.nuclphysa.2006.10.032", "nodeyear": 2007, "ref-by-count": 62, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1017238694", "attributes": {"title": "Unconventional quantum phase transition in the finite-size Lipkin–Meshkov–Glick model", "doi": "10.1088/1367-2630/8/12/297", "nodeyear": 2006, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1029635336", "attributes": {"title": "Entanglement Entropy beyond the Free Case", "doi": "10.1103/physrevlett.97.220402", "nodeyear": 2006, "ref-by-count": 77, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1060675503", "attributes": {"title": "Crossing contours in the interacting boson approximation (IBA) symmetry triangle", "doi": "10.1103/physrevc.74.057302", "nodeyear": 2006, "ref-by-count": 17, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060675476", "attributes": {"title": "First-order quantum phase transition in a finite system", "doi": "10.1103/physrevc.74.051301", "nodeyear": 2006, "ref-by-count": 27, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060618645", "attributes": {"title": "Classical and quantum phase transitions in the Lipkin-Meshkov-Glick model", "doi": "10.1103/physrevb.74.104118", "nodeyear": 2006, "ref-by-count": 61, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060675387", "attributes": {"title": "Electromagnetic transition strengths in Dy156", "doi": "10.1103/physrevc.74.024313", "nodeyear": 2006, "ref-by-count": 36, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1011784856", "attributes": {"title": "On the thermodynamic limit of the Lipkin model", "doi": "10.1088/0305-4470/39/32/s10", "nodeyear": 2006, "ref-by-count": 14, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1057848388", "attributes": {"title": "Study of the validity of the phase-integral connection formula for potential barriers of arbitrary thickness", "doi": "10.1063/1.2218979", "nodeyear": 2006, "ref-by-count": 2, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1062971188", "attributes": {"title": "SHAPE EVOLUTION FOR Ce ISOTOPES IN RELATIVISTIC MEAN-FIELD THEORY", "doi": "10.1142/s0218301306004661", "nodeyear": 2006, "ref-by-count": 10, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1042764696", "attributes": {"title": "Decay of Loschmidt Echo Enhanced by Quantum Criticality", "doi": "10.1103/physrevlett.96.140604", "nodeyear": 2006, "ref-by-count": 520, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1027175597", "attributes": {"title": "E(5), X(5), and prolate to oblate shape phase transitions in relativistic Hartree-Bogoliubov theory", "doi": "10.1103/physrevc.73.044310", "nodeyear": 2006, "ref-by-count": 72, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1011254661", "attributes": {"title": "Tensor polarizability and dispersive quantum measurement of multilevel atoms", "doi": "10.1103/physreva.73.042112", "nodeyear": 2006, "ref-by-count": 65, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060675215", "attributes": {"title": "Lifetime measurements of yrast states in Yb162 and Hf166", "doi": "10.1103/physrevc.73.034303", "nodeyear": 2006, "ref-by-count": 15, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060502016", "attributes": {"title": "Control of inhomogeneous quantum ensembles", "doi": "10.1103/physreva.73.030302", "nodeyear": 2006, "ref-by-count": 146, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1018025921", "attributes": {"title": "Shape transitions far from stability: The nucleus 58Cr", "doi": "10.1016/j.physletb.2005.12.047", "nodeyear": 2006, "ref-by-count": 49, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1008903034", "attributes": {"title": "X(3): an exactly separable γ-rigid version of the X(5) critical point symmetry", "doi": "10.1016/j.physletb.2005.10.060", "nodeyear": 2006, "ref-by-count": 91, "is_input_DOI": false, "category_for": "02:0.60;01:0.40", "level": "ref_l2"}}, {"id": "pub.1025311961", "attributes": {"title": "Lie Algebras and Applications", "doi": "10.1007/3-540-36239-8", "nodeyear": 2006, "ref-by-count": 15, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1011010598", "attributes": {"title": "Characterization of Complex Quantum Dynamics with a Scalable NMR Information Processor", "doi": "10.1103/physrevlett.95.250502", "nodeyear": 2005, "ref-by-count": 27, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060675113", "attributes": {"title": "Octupole collectivity in the Sm isotopes", "doi": "10.1103/physrevc.72.064302", "nodeyear": 2005, "ref-by-count": 31, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1016118774", "attributes": {"title": "A theoretical description of energy spectra and two-neutron separation energies for neutron-rich zirconium isotopes", "doi": "10.1140/epja/i2005-10176-1", "nodeyear": 2005, "ref-by-count": 31, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1003660203", "attributes": {"title": "A review and outlook for an anomaly of scanning tunnelling microscopy (STM): superlattices on graphite", "doi": "10.1088/0022-3727/38/21/r01", "nodeyear": 2005, "ref-by-count": 135, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1000398384", "attributes": {"title": "β4 potential at the U(5)–O(6) critical point of the interacting boson model", "doi": "10.1103/physrevc.72.037301", "nodeyear": 2005, "ref-by-count": 30, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1003371857", "attributes": {"title": "Phase transitions and quasi-dynamical symmetry in nuclear collective models, III: The U(5) to SU(3) phase transition in the IBM", "doi": "10.1016/j.nuclphysa.2005.05.144", "nodeyear": 2005, "ref-by-count": 57, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1039984053", "attributes": {"title": "Quantum phase transitions in the U(5)–O(6) large-N limit", "doi": "10.1088/0954-3899/31/9/006", "nodeyear": 2005, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060501368", "attributes": {"title": "Many-particle entanglement in the gaped antiferromagnetic Lipkin model", "doi": "10.1103/physreva.72.022326", "nodeyear": 2005, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1002091117", "attributes": {"title": "γ-rigid solution of the Bohr Hamiltonian for γ=30° compared to the E(5) critical point symmetry", "doi": "10.1016/j.physletb.2005.06.047", "nodeyear": 2005, "ref-by-count": 71, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060830663", "attributes": {"title": "Dynamic Supersymmetries of Differential Equations with Applications to Nuclear Spectroscopy", "doi": "10.1103/physrevlett.95.052503", "nodeyear": 2005, "ref-by-count": 68, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1030114288", "attributes": {"title": "Quantum State Reconstruction via Continuous Measurement", "doi": "10.1103/physrevlett.95.030402", "nodeyear": 2005, "ref-by-count": 49, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1009628601", "attributes": {"title": "Phase transitions and quasidynamical symmetry in nuclear collective models. II. The spherical vibrator to gamma-soft rotor transition in an SO(5)-invariant Bohr model", "doi": "10.1016/j.nuclphysa.2005.04.003", "nodeyear": 2005, "ref-by-count": 48, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1052394951", "attributes": {"title": "Shape evolution for Sm isotopes in relativistic mean-field theory", "doi": "10.1140/epja/i2005-10066-6", "nodeyear": 2005, "ref-by-count": 67, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1005494539", "attributes": {"title": "Elusive magic numbers", "doi": "10.1038/435897a", "nodeyear": 2005, "ref-by-count": 34, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1053319957", "attributes": {"title": "STS Observations of Landau Levels at Graphite Surfaces", "doi": "10.1103/physrevlett.94.226403", "nodeyear": 2005, "ref-by-count": 122, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060674905", "attributes": {"title": "Simple interpretation of shape evolution in Pt isotopes without intruder states", "doi": "10.1103/physrevc.71.061301", "nodeyear": 2005, "ref-by-count": 57, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1051277230", "attributes": {"title": "Finite-size scaling exponents and entanglement in the two-level BCS model", "doi": "10.1103/physreva.71.060304", "nodeyear": 2005, "ref-by-count": 30, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1040003395", "attributes": {"title": "Entanglement entropy in the Lipkin-Meshkov-Glick model", "doi": "10.1103/physreva.71.064101", "nodeyear": 2005, "ref-by-count": 131, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1049959435", "attributes": {"title": "Quantum phase transition in the U(3) boson system", "doi": "10.1016/j.physleta.2005.04.086", "nodeyear": 2005, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060830365", "attributes": {"title": "Suppression of Spin Projection Noise in Broadband Atomic Magnetometry", "doi": "10.1103/physrevlett.94.203002", "nodeyear": 2005, "ref-by-count": 46, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1018540897", "attributes": {"title": "Criteria for exact qudit universality", "doi": "10.1103/physreva.71.052318", "nodeyear": 2005, "ref-by-count": 48, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1037993747", "attributes": {"title": "The use of CAAARS (Computer Aided Assignment of Asymmetric Rotor Spectra) in the analysis of rotational spectra", "doi": "10.1016/j.molstruc.2005.01.054", "nodeyear": 2005, "ref-by-count": 30, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1060674827", "attributes": {"title": "Identification of a pairing isomeric band in Sm152", "doi": "10.1103/physrevc.71.041303", "nodeyear": 2005, "ref-by-count": 32, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1013466532", "attributes": {"title": "Exactly-solvable models derived from a generalized Gaudin algebra", "doi": "10.1016/j.nuclphysb.2004.11.008", "nodeyear": 2005, "ref-by-count": 138, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1051459978", "attributes": {"title": "Thermodynamic analogy for quantum phase transitions at zero temperature", "doi": "10.1103/physrevc.71.011304", "nodeyear": 2005, "ref-by-count": 36, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1035159109", "attributes": {"title": "How generic scale invariance influences quantum and classical phase transitions", "doi": "10.1103/revmodphys.77.579", "nodeyear": 2005, "ref-by-count": 218, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1028230402", "attributes": {"title": "Phase Structure of the Two-Fluid Proton-Neutron System", "doi": "10.1103/physrevlett.93.242502", "nodeyear": 2004, "ref-by-count": 54, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1036176655", "attributes": {"title": "Non-perturbative flow equations from continuous unitary transformations", "doi": "10.1088/0305-4470/38/1/015", "nodeyear": 2004, "ref-by-count": 12, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1019645844", "attributes": {"title": "Finite-Size Scaling Exponents of the Lipkin-Meshkov-Glick Model", "doi": "10.1103/physrevlett.93.237204", "nodeyear": 2004, "ref-by-count": 181, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1005427122", "attributes": {"title": "Entanglement dynamics in the Lipkin-Meshkov-Glick model", "doi": "10.1103/physreva.70.062304", "nodeyear": 2004, "ref-by-count": 110, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1050860986", "attributes": {"title": "The millimeter- and submillimeter-wave spectrum of the trans–gauche conformer of diethyl ether", "doi": "10.1016/j.jms.2004.06.011", "nodeyear": 2004, "ref-by-count": 75, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1060829459", "attributes": {"title": "Scaling Properties and Asymptotic Spectra of Finite Models of Phase Transitions as They Approach Macroscopic Limits", "doi": "10.1103/physrevlett.93.232502", "nodeyear": 2004, "ref-by-count": 66, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1040632454", "attributes": {"title": "Phase Diagram of the Proton-Neutron Interacting Boson Model", "doi": "10.1103/physrevlett.93.212501", "nodeyear": 2004, "ref-by-count": 43, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1019008412", "attributes": {"title": "Electric Field Effect in Atomically Thin Carbon Films", "doi": "10.1126/science.1102896", "nodeyear": 2004, "ref-by-count": 46759, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1039417623", "attributes": {"title": "Quantum Information Processing with Trapped Neutral Atoms", "doi": "10.1007/s11128-004-9418-2", "nodeyear": 2004, "ref-by-count": 15, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060829034", "attributes": {"title": "Experimental Confirmation of the Alhassid-Whelan Arc of Regularity", "doi": "10.1103/physrevlett.93.132501", "nodeyear": 2004, "ref-by-count": 28, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1060674558", "attributes": {"title": "Shape phase transitions in odd-mass nuclei using a supersymmetric approach", "doi": "10.1103/physrevc.70.011305", "nodeyear": 2004, "ref-by-count": 36, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1095903609", "attributes": {"title": "Basic Ideas and Concepts in Nuclear Physics", "doi": "10.1201/9781420054941", "nodeyear": 2004, "ref-by-count": 35, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1015937057", "attributes": {"title": "Entanglement in a first-order quantum phase transition", "doi": "10.1103/physreva.69.054101", "nodeyear": 2004, "ref-by-count": 128, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1008243844", "attributes": {"title": "Sequence of potentials interpolating between the U(5) and E(5) symmetries", "doi": "10.1103/physrevc.69.044316", "nodeyear": 2004, "ref-by-count": 64, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1062449295", "attributes": {"title": "Quantum Optimally Controlled Transition Landscapes", "doi": "10.1126/science.1093649", "nodeyear": 2004, "ref-by-count": 324, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060828109", "attributes": {"title": "Superlubricity of Graphite", "doi": "10.1103/physrevlett.92.126101", "nodeyear": 2004, "ref-by-count": 953, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1020621092", "attributes": {"title": "New analytic solutions of the collective Bohr Hamiltonian for a β-soft, γ-soft axial rotor", "doi": "10.1088/0954-3899/30/5/006", "nodeyear": 2004, "ref-by-count": 57, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060674103", "attributes": {"title": "Evolving shape coexistence in the lead isotopes: The geometry of configuration mixing in nuclei", "doi": "10.1103/physrevc.69.034323", "nodeyear": 2004, "ref-by-count": 52, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060499774", "attributes": {"title": "Global bending quantum number and the absence of monodromy in the HCN↔CNH molecule", "doi": "10.1103/physreva.69.032504", "nodeyear": 2004, "ref-by-count": 46, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1042098123", "attributes": {"title": "Quasiparticle Spectra, Charge-Density Waves, Superconductivity, and Electron-Phonon Coupling in 2H-NbSe2", "doi": "10.1103/physrevlett.92.086401", "nodeyear": 2004, "ref-by-count": 138, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1060674055", "attributes": {"title": "Low spin states in Yb 162 and the X(5) critical point symmetry", "doi": "10.1103/physrevc.69.024308", "nodeyear": 2004, "ref-by-count": 31, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060674024", "attributes": {"title": "Extended Holstein-Primakoff mapping for the next-to-leading order of the 1∕N expansion at finite temperature", "doi": "10.1103/physrevc.69.014318", "nodeyear": 2004, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1042532118", "attributes": {"title": "Decoherence, the measurement problem, and interpretations of quantum mechanics", "doi": "10.1103/revmodphys.76.1267", "nodeyear": 2004, "ref-by-count": 703, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1029628720", "attributes": {"title": "Sequence of potentials lying between the U(5) and X(5) symmetries", "doi": "10.1103/physrevc.69.014302", "nodeyear": 2004, "ref-by-count": 68, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1008553636", "attributes": {"title": "NMR techniques for quantum control and computation", "doi": "10.1103/revmodphys.76.1037", "nodeyear": 2004, "ref-by-count": 746, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1045744782", "attributes": {"title": "Universal quantum control in irreducible state-space sectors: Application to bosonic and spin-boson systems", "doi": "10.1103/physreva.68.062320", "nodeyear": 2003, "ref-by-count": 13, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1026174138", "attributes": {"title": "A close look at U(5)↔SU(3) transitional patterns in the interacting boson model", "doi": "10.1016/j.physletb.2003.09.098", "nodeyear": 2003, "ref-by-count": 37, "is_input_DOI": false, "category_for": "02:0.60;01:0.40", "level": "ref_l2"}}, {"id": "pub.1019531352", "attributes": {"title": "The Ame2003 atomic mass evaluation (II). Tables, graphs and references", "doi": "10.1016/j.nuclphysa.2003.11.003", "nodeyear": 2003, "ref-by-count": 4392, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1012593191", "attributes": {"title": "Quantum phase transitions", "doi": "10.1088/0034-4885/66/12/r01", "nodeyear": 2003, "ref-by-count": 416, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1012415680", "attributes": {"title": "Systematic study of deformed nuclei at the drip lines and beyond", "doi": "10.1103/physrevc.68.054312", "nodeyear": 2003, "ref-by-count": 227, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1007803037", "attributes": {"title": "Invariant correlational entropy as a signature of quantum phase transitions in nuclei", "doi": "10.1016/j.physletb.2003.08.076", "nodeyear": 2003, "ref-by-count": 27, "is_input_DOI": false, "category_for": "02:0.60;01:0.40", "level": "ref_l2"}}, {"id": "pub.1059078521", "attributes": {"title": "The Lipkin model. Beyond mean field with generalized coherent states", "doi": "10.1088/0305-4470/36/41/008", "nodeyear": 2003, "ref-by-count": 9, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060827277", "attributes": {"title": "Phase Transitions in Angle Variables", "doi": "10.1103/physrevlett.91.132502", "nodeyear": 2003, "ref-by-count": 151, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1013668806", "attributes": {"title": "Self-consistent approach to deformation of intruder states in neutron-deficient Pb and Po", "doi": "10.1016/j.physletb.2003.07.042", "nodeyear": 2003, "ref-by-count": 33, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060827125", "attributes": {"title": "Nonperturbative Flow Equations from Running Expectation Values", "doi": "10.1103/physrevlett.91.080602", "nodeyear": 2003, "ref-by-count": 13, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1057725655", "attributes": {"title": "Quantum Physics Under Control", "doi": "10.1063/1.1611352", "nodeyear": 2003, "ref-by-count": 81, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1059051362", "attributes": {"title": "Evidence for a Possible E (5) Symmetry in 130 Xe", "doi": "10.1088/0256-307x/20/7/316", "nodeyear": 2003, "ref-by-count": 17, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1049620203", "attributes": {"title": "Critical-Point Symmetry in a Finite System", "doi": "10.1103/physrevlett.90.212501", "nodeyear": 2003, "ref-by-count": 41, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1060673750", "attributes": {"title": "B(E2) values and the search for the critical point symmetry X(5) in 104Mo and 106Mo", "doi": "10.1103/physrevc.67.054315", "nodeyear": 2003, "ref-by-count": 53, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060826447", "attributes": {"title": "Landau Theory of Shape Phase Transitions in the Cranked Interacting Boson Model", "doi": "10.1103/physrevlett.90.112501", "nodeyear": 2003, "ref-by-count": 27, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1031817672", "attributes": {"title": "Echo Spectroscopy and Quantum Stability of Trapped Atoms", "doi": "10.1103/physrevlett.90.023001", "nodeyear": 2003, "ref-by-count": 82, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1006328423", "attributes": {"title": "Decoherence, einselection, and the quantum origins of the classical", "doi": "10.1103/revmodphys.75.715", "nodeyear": 2003, "ref-by-count": 2480, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1040030659", "attributes": {"title": "Experimental Implementation of the Quantum Baker’s Map", "doi": "10.1103/physrevlett.89.157902", "nodeyear": 2002, "ref-by-count": 59, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060673509", "attributes": {"title": "Evidence of X(5) symmetry for nγ=0,1,2 bands in 104Mo", "doi": "10.1103/physrevc.66.031301", "nodeyear": 2002, "ref-by-count": 42, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1012581556", "attributes": {"title": "The origin of degeneracies and crossings in the 1d Hubbard model", "doi": "10.1088/0305-4470/35/34/319", "nodeyear": 2002, "ref-by-count": 31, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060728780", "attributes": {"title": "Universal relationship between a quantum phase transition and instability points of classical systems", "doi": "10.1103/physreve.66.016217", "nodeyear": 2002, "ref-by-count": 29, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1098707489", "attributes": {"title": "Physical Problems Solved by the Phase-Integral Method", "doi": "10.1017/cbo9780511535086", "nodeyear": 2002, "ref-by-count": 68, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1060673380", "attributes": {"title": "Empirical example of possible E(5) symmetry nucleus 108Pd", "doi": "10.1103/physrevc.65.057301", "nodeyear": 2002, "ref-by-count": 26, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060673307", "attributes": {"title": "102Pd: An E(5) nucleus?", "doi": "10.1103/physrevc.65.044325", "nodeyear": 2002, "ref-by-count": 74, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1003227336", "attributes": {"title": "Singular character of critical points in nuclei", "doi": "10.1016/s0370-2693(02)01160-7", "nodeyear": 2002, "ref-by-count": 59, "is_input_DOI": false, "category_for": "02:0.60;01:0.40", "level": "ref_l2"}}, {"id": "pub.1044001354", "attributes": {"title": "Quantum Level Structures and Nonlinear Classical Dynamics", "doi": "10.1006/jmsp.2001.8446", "nodeyear": 2001, "ref-by-count": 25, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1060673164", "attributes": {"title": "Search for E(5) symmetry in nuclei: The Ru isotopes", "doi": "10.1103/physrevc.65.014301", "nodeyear": 2001, "ref-by-count": 80, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1056046759", "attributes": {"title": "On the Anharmonic XCN Bending Modes of the Quasilinear Molecules BrCNO and ClCNO", "doi": "10.1021/jp012067u", "nodeyear": 2001, "ref-by-count": 17, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060673113", "attributes": {"title": "Collective 0+ excitations and their global properties", "doi": "10.1103/physrevc.64.057301", "nodeyear": 2001, "ref-by-count": 12, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1043541010", "attributes": {"title": "Parameter symmetries of quantum many-body systems", "doi": "10.1103/physrevc.64.034307", "nodeyear": 2001, "ref-by-count": 4, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1034622526", "attributes": {"title": "Class of Exactly Solvable Pairing Models", "doi": "10.1103/physrevlett.87.066403", "nodeyear": 2001, "ref-by-count": 131, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1036871640", "attributes": {"title": "Observation of Chaos-Assisted Tunneling Between Islands of Stability", "doi": "10.1126/science.1061569", "nodeyear": 2001, "ref-by-count": 285, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1019839012", "attributes": {"title": "Dynamical tunnelling of ultracold atoms", "doi": "10.1038/35083510", "nodeyear": 2001, "ref-by-count": 288, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1040846971", "attributes": {"title": "Exact solution of the nuclear pairing problem", "doi": "10.1016/s0370-2693(01)00431-2", "nodeyear": 2001, "ref-by-count": 94, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1018661537", "attributes": {"title": "Charge Density Wave, Superconductivity, and Anomalous Metallic Behavior in 2D Transition Metal Dichalcogenides", "doi": "10.1103/physrevlett.86.4382", "nodeyear": 2001, "ref-by-count": 332, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1043138933", "attributes": {"title": "Spectroscopy of discrete energy levels in ultrasmall metallic grains", "doi": "10.1016/s0370-1573(00)00099-5", "nodeyear": 2001, "ref-by-count": 348, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1008640012", "attributes": {"title": "Environment-Independent Decoherence Rate in Classically Chaotic Systems", "doi": "10.1103/physrevlett.86.2490", "nodeyear": 2001, "ref-by-count": 442, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060672803", "attributes": {"title": "E2 transitions and quadrupole moments in the E(5) symmetry", "doi": "10.1103/physrevc.63.034308", "nodeyear": 2001, "ref-by-count": 35, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1043889955", "attributes": {"title": "Quantum Signatures of Chaos", "doi": "10.1007/978-3-662-04506-0", "nodeyear": 2001, "ref-by-count": 556, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1032081451", "attributes": {"title": "Continuous Quantum Measurement and the Emergence of Classical Chaos", "doi": "10.1103/physrevlett.85.4852", "nodeyear": 2000, "ref-by-count": 98, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1028438151", "attributes": {"title": "Quantum feedback control and classical control theory", "doi": "10.1103/physreva.62.012105", "nodeyear": 2000, "ref-by-count": 241, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1062569382", "attributes": {"title": "Whither the Future of Controlling Quantum Phenomena?", "doi": "10.1126/science.288.5467.824", "nodeyear": 2000, "ref-by-count": 961, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1047654315", "attributes": {"title": "Classification of Phase Transitions in Small Systems", "doi": "10.1103/physrevlett.84.3511", "nodeyear": 2000, "ref-by-count": 108, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1016859474", "attributes": {"title": "The statistical theory of quantum dots", "doi": "10.1103/revmodphys.72.895", "nodeyear": 2000, "ref-by-count": 525, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060672166", "attributes": {"title": "Phase/shape coexistence in 152Sm in the geometric collective model", "doi": "10.1103/physrevc.60.061304", "nodeyear": 1999, "ref-by-count": 26, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1036048855", "attributes": {"title": "Quantum Monodromy in Integrable Systems", "doi": "10.1007/s002200050621", "nodeyear": 1999, "ref-by-count": 74, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1012911939", "attributes": {"title": "Particle-hole excitations in the interacting boson model (IV). The U(5)-SU(3) coupling", "doi": "10.1016/s0375-9474(99)00124-4", "nodeyear": 1999, "ref-by-count": 19, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060671138", "attributes": {"title": "Phase transition in the pairing-plus-quadrupole model", "doi": "10.1103/physrevc.58.1539", "nodeyear": 1998, "ref-by-count": 41, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1046879659", "attributes": {"title": "Parameter symmetry of the interacting boson model", "doi": "10.1016/s0370-2693(98)00791-6", "nodeyear": 1998, "ref-by-count": 30, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1027532833", "attributes": {"title": "Wave-function entropy and dynamical symmetry breaking in the interacting boson model", "doi": "10.1103/physreve.58.387", "nodeyear": 1998, "ref-by-count": 39, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1034601602", "attributes": {"title": "Quantum-classical transition of the escape rate of a uniaxial spin system in an arbitrarily directed field", "doi": "10.1103/physrevb.57.13639", "nodeyear": 1998, "ref-by-count": 103, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1016981788", "attributes": {"title": "New algebraic solutions for SO(6) ↔ U(5) transitional nuclei in the interacting boson model", "doi": "10.1016/s0375-9474(98)00207-3", "nodeyear": 1998, "ref-by-count": 91, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059076097", "attributes": {"title": "Rotation-vibrational spectra of diatomic molecules and nuclei with Davidson interactions", "doi": "10.1088/0305-4470/31/21/011", "nodeyear": 1998, "ref-by-count": 70, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1035439165", "attributes": {"title": "Decoherence, Chaos, and the Correspondence Principle", "doi": "10.1103/physrevlett.80.4361", "nodeyear": 1998, "ref-by-count": 184, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1042214836", "attributes": {"title": "Orderly Spectra from Random Interactions", "doi": "10.1103/physrevlett.80.2749", "nodeyear": 1998, "ref-by-count": 133, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1015234386", "attributes": {"title": "Magnetic phases near the Van Hove singularity in s- and d-band Hubbard models", "doi": "10.1103/physrevb.56.3159", "nodeyear": 1997, "ref-by-count": 65, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1098678329", "attributes": {"title": "Chaos in Atomic Physics", "doi": "10.1017/cbo9780511524509", "nodeyear": 1997, "ref-by-count": 102, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1043006827", "attributes": {"title": "Bifurcations of periodic orbits and uniform approximations", "doi": "10.1088/0305-4470/30/13/010", "nodeyear": 1997, "ref-by-count": 82, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1030554440", "attributes": {"title": "Semiclassical interference of bifurcations", "doi": "10.1209/epl/i1997-00262-4", "nodeyear": 1997, "ref-by-count": 27, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1060492396", "attributes": {"title": "Hydrogen atom in a magnetic field: Ghost orbits, catastrophes, and uniform semiclassical approximations", "doi": "10.1103/physreva.55.1743", "nodeyear": 1997, "ref-by-count": 46, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1044040016", "attributes": {"title": "Global Aspects of Classical Integrable Systems", "doi": "10.1007/978-3-0348-8891-2", "nodeyear": 1997, "ref-by-count": 261, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1028784456", "attributes": {"title": "On the LambertW function", "doi": "10.1007/bf02124750", "nodeyear": 1996, "ref-by-count": 3933, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1059074985", "attributes": {"title": "Uniform approximation for bifurcations of periodic orbits with high repetition numbers", "doi": "10.1088/0305-4470/29/15/034", "nodeyear": 1996, "ref-by-count": 47, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1043048933", "attributes": {"title": "Secular determinants of random unitary matrices", "doi": "10.1088/0305-4470/29/13/029", "nodeyear": 1996, "ref-by-count": 54, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060719599", "attributes": {"title": "Near-integrable systems: Resonances and semiclassical trace formulas", "doi": "10.1103/physreve.54.136", "nodeyear": 1996, "ref-by-count": 55, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1024348554", "attributes": {"title": "Transformation brackets between U(ν+1)⊃U(ν)⊃SO(ν) and U(ν+1)⊃SO(ν+1)⊃SO(ν)", "doi": "10.1063/1.531689", "nodeyear": 1996, "ref-by-count": 18, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1060812291", "attributes": {"title": "Semiclassical Trace Formulas of Near-Integrable Systems: Resonances", "doi": "10.1103/physrevlett.75.4346", "nodeyear": 1995, "ref-by-count": 59, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1022345746", "attributes": {"title": "Theory and application of the quantum phase-space distribution functions", "doi": "10.1016/0370-1573(95)00007-4", "nodeyear": 1995, "ref-by-count": 570, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1018020267", "attributes": {"title": "Semiclassical asymptotics of perturbed cat maps", "doi": "10.1098/rspa.1995.0063", "nodeyear": 1995, "ref-by-count": 36, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1044810744", "attributes": {"title": "Description of octupole-deformed nuclei within the interacting boson and interacting boson-fermion models", "doi": "10.1016/0375-9474(94)00794-n", "nodeyear": 1995, "ref-by-count": 18, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060490443", "attributes": {"title": "Controllability of molecular systems", "doi": "10.1103/physreva.51.960", "nodeyear": 1995, "ref-by-count": 276, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1053030119", "attributes": {"title": "The pair-coupling model", "doi": "10.1016/0375-9474(94)00472-y", "nodeyear": 1995, "ref-by-count": 17, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060716812", "attributes": {"title": "Traces of ghost orbits in the quantum standard map", "doi": "10.1103/physreve.49.r4767", "nodeyear": 1994, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060488555", "attributes": {"title": "Wigner distribution of a general angular-momentum state: Applications to a collection of two-level atoms", "doi": "10.1103/physreva.49.4101", "nodeyear": 1994, "ref-by-count": 185, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1028771859", "attributes": {"title": "Decoherence, chaos, and the second law", "doi": "10.1103/physrevlett.72.2508", "nodeyear": 1994, "ref-by-count": 351, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059110861", "attributes": {"title": "Semiclassical accuracy for billiards", "doi": "10.1088/0951-7715/7/2/010", "nodeyear": 1994, "ref-by-count": 54, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060716833", "attributes": {"title": "Long-time behavior of the semiclassical baker’s map", "doi": "10.1103/physreve.49.r963", "nodeyear": 1994, "ref-by-count": 30, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1020895228", "attributes": {"title": "Équilibre instable en régime semi-classique: i—concentration microlocale", "doi": "10.1080/03605309408821063", "nodeyear": 1994, "ref-by-count": 47, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060807676", "attributes": {"title": "Prebifurcation periodic ghost orbits in semiclassical quantization", "doi": "10.1103/physrevlett.71.2167", "nodeyear": 1993, "ref-by-count": 116, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060565149", "attributes": {"title": "Site-selective imaging in scanning tunneling microscopy of graphite: The nature of site asymmetry", "doi": "10.1103/physrevb.47.13059", "nodeyear": 1993, "ref-by-count": 40, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1060487068", "attributes": {"title": "Quantum dynamics near a classical separatrix", "doi": "10.1103/physreva.47.2496", "nodeyear": 1993, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1098954489", "attributes": {"title": "Quantum Dissipative Systems", "doi": "10.1142/1476", "nodeyear": 1993, "ref-by-count": 693, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1029398439", "attributes": {"title": "Factorization of commutators: The Wick theorem for coupled operators", "doi": "10.1016/0375-9474(93)90357-4", "nodeyear": 1993, "ref-by-count": 36, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1057871482", "attributes": {"title": "Atom‐Photon Interactions: Basic Processes and Applications", "doi": "10.1063/1.2809840", "nodeyear": 1992, "ref-by-count": 386, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1060805930", "attributes": {"title": "Semiclassical propagation: How long can it last?", "doi": "10.1103/physrevlett.69.402", "nodeyear": 1992, "ref-by-count": 117, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1059110762", "attributes": {"title": "Semiclassical quantization of multidimensional systems", "doi": "10.1088/0951-7715/5/4/001", "nodeyear": 1992, "ref-by-count": 220, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1005256926", "attributes": {"title": "New methods in the theory of quantum spin systems", "doi": "10.1016/0370-1573(92)90158-v", "nodeyear": 1992, "ref-by-count": 137, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060485642", "attributes": {"title": "Separatrix eigenfunctions", "doi": "10.1103/physreva.45.8501", "nodeyear": 1992, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060804542", "attributes": {"title": "Distribution of roots of random polynomials", "doi": "10.1103/physrevlett.68.2726", "nodeyear": 1992, "ref-by-count": 74, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1025507234", "attributes": {"title": "Remarks on the quasi-classical propagator of area-preserving maps", "doi": "10.1016/0167-2789(92)90020-n", "nodeyear": 1992, "ref-by-count": 10, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060804211", "attributes": {"title": "Novel rule for quantizing chaos", "doi": "10.1103/physrevlett.68.1629", "nodeyear": 1992, "ref-by-count": 49, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1026690139", "attributes": {"title": "The microwave spectrum and semirigid bender analysis of isocyanatoethyne, HCCNCO", "doi": "10.1016/0022-2852(92)90125-8", "nodeyear": 1992, "ref-by-count": 19, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1060839251", "attributes": {"title": "Consistent interpretations of quantum mechanics", "doi": "10.1103/revmodphys.64.339", "nodeyear": 1992, "ref-by-count": 450, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1057737242", "attributes": {"title": "Anatomy of the trace formula for the baker's map.", "doi": "10.1063/1.165922", "nodeyear": 1992, "ref-by-count": 19, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060484658", "attributes": {"title": "Selberg’s ζ function and the quantization of chaos", "doi": "10.1103/physreva.44.r7877", "nodeyear": 1991, "ref-by-count": 38, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1041037290", "attributes": {"title": "Monodromy in the champagne bottle", "doi": "10.1007/bf00944566", "nodeyear": 1991, "ref-by-count": 54, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060803392", "attributes": {"title": "Quantum eigenvalues from classical periodic orbits", "doi": "10.1103/physrevlett.67.2410", "nodeyear": 1991, "ref-by-count": 89, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060803927", "attributes": {"title": "Semiclassical dynamics of chaotic motion: Unexpected long-time accuracy", "doi": "10.1103/physrevlett.67.664", "nodeyear": 1991, "ref-by-count": 194, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059110686", "attributes": {"title": "The cat maps: quantum mechanics and classical motion", "doi": "10.1088/0951-7715/4/2/006", "nodeyear": 1991, "ref-by-count": 126, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060483159", "attributes": {"title": "Transitional regions of finite Fermi systems and quantum chaos", "doi": "10.1103/physreva.43.4159", "nodeyear": 1991, "ref-by-count": 59, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1030828951", "attributes": {"title": "The unusual nature of the quantum Baker's transformation", "doi": "10.1016/0003-4916(91)90184-a", "nodeyear": 1991, "ref-by-count": 37, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060483028", "attributes": {"title": "Classical and quantal morphology of a piecewise-linear standard map", "doi": "10.1103/physreva.43.3183", "nodeyear": 1991, "ref-by-count": 10, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1042457710", "attributes": {"title": "Nuclear ground state properties of 99Sr by collinear laser spectroscopy with non-optical detection", "doi": "10.1016/0370-2693(91)90664-c", "nodeyear": 1991, "ref-by-count": 41, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060482831", "attributes": {"title": "Quantum dynamics in a chaotic separatrix layer", "doi": "10.1103/physreva.43.1783", "nodeyear": 1991, "ref-by-count": 8, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059071180", "attributes": {"title": "A rule for quantizing chaos?", "doi": "10.1088/0305-4470/23/21/024", "nodeyear": 1990, "ref-by-count": 172, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1053498585", "attributes": {"title": "Simple models of quantum chaos: Spectrum and eigenfunctions", "doi": "10.1016/0370-1573(90)90067-c", "nodeyear": 1990, "ref-by-count": 707, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059071127", "attributes": {"title": "Indicators of quantum chaos based on eigenvector statistics", "doi": "10.1088/0305-4470/23/20/005", "nodeyear": 1990, "ref-by-count": 35, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060801337", "attributes": {"title": "Role of ‘‘scars’’ in the suppression of ionization in intense, high-frequency fields", "doi": "10.1103/physrevlett.65.1964", "nodeyear": 1990, "ref-by-count": 36, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1060481738", "attributes": {"title": "Random-matrix theory and eigenmodes of dynamical systems", "doi": "10.1103/physreva.42.1013", "nodeyear": 1990, "ref-by-count": 60, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060665292", "attributes": {"title": "Systematics of nuclear ground state properties in Sr78–100 by laser spectroscopy", "doi": "10.1103/physrevc.41.2883", "nodeyear": 1990, "ref-by-count": 135, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1030444683", "attributes": {"title": "Wigner's function and tunneling", "doi": "10.1016/0003-4916(90)90370-4", "nodeyear": 1990, "ref-by-count": 75, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1022719988", "attributes": {"title": "Classical structures in the quantized baker transformation", "doi": "10.1016/0003-4916(90)90367-w", "nodeyear": 1990, "ref-by-count": 164, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060800993", "attributes": {"title": "Dynamics of atomic ionization suppression and electron localization in an intense high-frequency radiation field", "doi": "10.1103/physrevlett.64.862", "nodeyear": 1990, "ref-by-count": 255, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1022162692", "attributes": {"title": "Phase separation near the Mott transition in La2-xSrxCuO4", "doi": "10.1088/0953-8984/2/3/015", "nodeyear": 1990, "ref-by-count": 107, "is_input_DOI": false, "category_for": "02:0.33;09:0.33;10:0.33", "level": "ref_l2"}}, {"id": "pub.1060800881", "attributes": {"title": "Scaling behavior of localization in quantum chaos", "doi": "10.1103/physrevlett.64.5", "nodeyear": 1990, "ref-by-count": 92, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1053543950", "attributes": {"title": "Chaos in Classical and Quantum Mechanics", "doi": "10.1007/978-1-4612-0983-6", "nodeyear": 1990, "ref-by-count": 1977, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060799854", "attributes": {"title": "Inhibition of quantum transport due to ‘‘scars’’ of unstable periodic orbits", "doi": "10.1103/physrevlett.63.2771", "nodeyear": 1989, "ref-by-count": 100, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1073294533", "attributes": {"title": "Chaos and integrability in nonlinear dynamics: an introduction", "doi": "10.5860/choice.27-2142", "nodeyear": 1989, "ref-by-count": 109, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1060480673", "attributes": {"title": "Semiclassical approximations in the coherent-state representation", "doi": "10.1103/physreva.40.6800", "nodeyear": 1989, "ref-by-count": 86, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1064233019", "attributes": {"title": "Convergence of the Semi-Classical Periodic Orbit Expansion", "doi": "10.1209/0295-5075/9/6/002", "nodeyear": 1989, "ref-by-count": 61, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1014168356", "attributes": {"title": "Quantum scars of classical closed orbits in phase space", "doi": "10.1098/rspa.1989.0052", "nodeyear": 1989, "ref-by-count": 303, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1043750288", "attributes": {"title": "Uniform asymptotic smoothing of Stokes’s discontinuities", "doi": "10.1098/rspa.1989.0018", "nodeyear": 1989, "ref-by-count": 242, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060664355", "attributes": {"title": "Shape transition and dynamical symmetries in the interacting boson model", "doi": "10.1103/physrevc.39.652", "nodeyear": 1989, "ref-by-count": 24, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060478681", "attributes": {"title": "Scaling theory for the localization length of the kicked rotor", "doi": "10.1103/physreva.39.1628", "nodeyear": 1989, "ref-by-count": 48, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1049940303", "attributes": {"title": "The quantized Baker's transformation", "doi": "10.1016/0003-4916(89)90259-5", "nodeyear": 1989, "ref-by-count": 176, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1059069771", "attributes": {"title": "Universality of eigenvector statistics of kicked tops of different symmetries", "doi": "10.1088/0305-4470/21/22/006", "nodeyear": 1988, "ref-by-count": 59, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1058105141", "attributes": {"title": "Some isoscalar factors for SO N ⊇SO N −1 and state expansion coefficients for SO N ⊇SO N −1 in terms of SU N ⊇SU N −1 ⊇SO N −1", "doi": "10.1063/1.528122", "nodeyear": 1988, "ref-by-count": 8, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1008979230", "attributes": {"title": "OCCCS, NCNCS, NCNCO, and NCNNN as semirigid benders", "doi": "10.1016/0022-2852(88)90059-8", "nodeyear": 1988, "ref-by-count": 27, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1060797693", "attributes": {"title": "Wave Functions at the Critical Kolmogorov-Arnol'd-Moser Surface", "doi": "10.1103/physrevlett.61.1691", "nodeyear": 1988, "ref-by-count": 58, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060663748", "attributes": {"title": "Geometrical structure and critical phenomena in the fermion dynamical symmetry model: Sp(6)", "doi": "10.1103/physrevc.38.1475", "nodeyear": 1988, "ref-by-count": 23, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1010960717", "attributes": {"title": "Quasi-exactly-solvable problems andsl(2) algebra", "doi": "10.1007/bf01466727", "nodeyear": 1988, "ref-by-count": 548, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060477616", "attributes": {"title": "Relation between quantum and classical thresholds for multiphoton ionization of excited atoms", "doi": "10.1103/physreva.37.4702", "nodeyear": 1988, "ref-by-count": 94, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1025337287", "attributes": {"title": "Smoothed wave functions of chaotic quantum systems", "doi": "10.1016/0167-2789(88)90075-9", "nodeyear": 1988, "ref-by-count": 318, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1064231130", "attributes": {"title": "The Kicked Rotator as a Limit of the Kicked Top", "doi": "10.1209/0295-5075/5/8/001", "nodeyear": 1988, "ref-by-count": 19, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1064231079", "attributes": {"title": "Kramers' Degeneracy and Quartic Level Repulsion", "doi": "10.1209/0295-5075/5/5/001", "nodeyear": 1988, "ref-by-count": 56, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1060663352", "attributes": {"title": "Geometrical structure and critical phenomena in the fermion dynamical symmetry model: SO(8)", "doi": "10.1103/physrevc.37.1281", "nodeyear": 1988, "ref-by-count": 27, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1058105068", "attributes": {"title": "Dynamic structure and embedded representation in physics: The group theory of the adiabatic approximation", "doi": "10.1063/1.528049", "nodeyear": 1988, "ref-by-count": 57, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1064231011", "attributes": {"title": "Dynamics and Statistics of Quasi-Energy Levels for Kicked Quantum Systems", "doi": "10.1209/0295-5075/5/1/001", "nodeyear": 1988, "ref-by-count": 13, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1009964863", "attributes": {"title": "The quantum mechanical spherical pendulum", "doi": "10.1090/s0273-0979-1988-15705-9", "nodeyear": 1988, "ref-by-count": 91, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1059069031", "attributes": {"title": "Resonant periodic orbits and the semiclassical energy spectrum", "doi": "10.1088/0305-4470/20/17/021", "nodeyear": 1987, "ref-by-count": 96, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060795805", "attributes": {"title": "Geometrical interpretation of SO(7): A critical dynamical symmetry", "doi": "10.1103/physrevlett.59.2032", "nodeyear": 1987, "ref-by-count": 34, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1045515256", "attributes": {"title": "Intrinsic and collective structure in the interacting boson model", "doi": "10.1016/0003-4916(87)90136-9", "nodeyear": 1987, "ref-by-count": 56, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1034392770", "attributes": {"title": "Semi-classical quantization, adiabatic invariants and classical chaos", "doi": "10.1098/rspa.1987.0107", "nodeyear": 1987, "ref-by-count": 15, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1051138084", "attributes": {"title": "Adiabatic invariance in the standard map", "doi": "10.1016/0167-2789(87)90124-2", "nodeyear": 1987, "ref-by-count": 19, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1004661064", "attributes": {"title": "Interacting boson model of collective octupole states (I). The rotational limit", "doi": "10.1016/0375-9474(87)90220-x", "nodeyear": 1987, "ref-by-count": 99, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060476171", "attributes": {"title": "Quantum chaos of periodically pulsed systems: Underlying complete integrability", "doi": "10.1103/physreva.35.5294", "nodeyear": 1987, "ref-by-count": 35, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1039185830", "attributes": {"title": "Erratic behavior of invariant circles in standard-like mappings", "doi": "10.1016/0167-2789(87)90235-1", "nodeyear": 1987, "ref-by-count": 39, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060794819", "attributes": {"title": "Connection between long-range correlations in quantum spectra and classical periodic orbits", "doi": "10.1103/physrevlett.58.1589", "nodeyear": 1987, "ref-by-count": 180, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1010313486", "attributes": {"title": "Symmetry versus degree of level repulsion for kicked quantum systems", "doi": "10.1007/bf01312770", "nodeyear": 1987, "ref-by-count": 57, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060795354", "attributes": {"title": "Valence p-n interactions and the development of collectivity in heavy nuclei", "doi": "10.1103/physrevlett.58.658", "nodeyear": 1987, "ref-by-count": 162, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059069146", "attributes": {"title": "On the limitations of the Birkhoff-Gustavson normal form approach", "doi": "10.1088/0305-4470/20/2/020", "nodeyear": 1987, "ref-by-count": 14, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1060795235", "attributes": {"title": "Quantum effects in a macroscopic system", "doi": "10.1103/physrevlett.58.292", "nodeyear": 1987, "ref-by-count": 17, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1049572408", "attributes": {"title": "Theory of Multiphoton Processes", "doi": "10.1007/978-1-4899-1977-9", "nodeyear": 1987, "ref-by-count": 425, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1060794274", "attributes": {"title": "Kolmogorov-Arnol'd-Moser Barriers in the Quantum Dynamics of Chaotic Systems", "doi": "10.1103/physrevlett.57.2883", "nodeyear": 1986, "ref-by-count": 137, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060475260", "attributes": {"title": "Adiabatic-invariant change due to separatrix crossing", "doi": "10.1103/physreva.34.4256", "nodeyear": 1986, "ref-by-count": 239, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1059068122", "attributes": {"title": "Birkhoff-Gustavson normal form in classical and quantum mechanics", "doi": "10.1088/0305-4470/19/15/020", "nodeyear": 1986, "ref-by-count": 56, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059068080", "attributes": {"title": "A note concerning quantum integrability", "doi": "10.1088/0305-4470/19/14/004", "nodeyear": 1986, "ref-by-count": 19, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1036372533", "attributes": {"title": "Characteristic patterns in microwave spectra of quasi-symmetric top molecules of the WH3XYZ type", "doi": "10.1016/0022-2852(86)90181-5", "nodeyear": 1986, "ref-by-count": 30, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1060794457", "attributes": {"title": "Periodically pulsed spin dynamics: Scaling behavior of semiclassical wave functions", "doi": "10.1103/physrevlett.57.5", "nodeyear": 1986, "ref-by-count": 54, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060475467", "attributes": {"title": "Evolution and exact eigenstates of a resonant quantum system", "doi": "10.1103/physreva.34.7", "nodeyear": 1986, "ref-by-count": 154, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1012195559", "attributes": {"title": "The microwave spectrum of methyl isothiocyanate", "doi": "10.1016/0022-2852(86)90235-3", "nodeyear": 1986, "ref-by-count": 33, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1043149560", "attributes": {"title": "Levelstatistics and stochasticity in a driven quantum system", "doi": "10.1007/bf01303848", "nodeyear": 1986, "ref-by-count": 37, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1001349916", "attributes": {"title": "Invariant circles for the piecewise linear standard map", "doi": "10.1007/bf01209394", "nodeyear": 1986, "ref-by-count": 50, "is_input_DOI": false, "category_for": "01:0.60;02:0.40", "level": "ref_l2"}}, {"id": "pub.1060793163", "attributes": {"title": "Change of the Adiabatic Invariant due to Separatrix Crossing", "doi": "10.1103/physrevlett.56.2117", "nodeyear": 1986, "ref-by-count": 95, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1052561538", "attributes": {"title": "O(5) symmetry in IBA-1 — the O(6)—U(5) transition region", "doi": "10.1016/0370-2693(86)90824-5", "nodeyear": 1986, "ref-by-count": 57, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1059068352", "attributes": {"title": "False time-reversal violation and energy level statistics: the role of anti-unitary symmetry", "doi": "10.1088/0305-4470/19/5/020", "nodeyear": 1986, "ref-by-count": 143, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1025880473", "attributes": {"title": "A soluble γ-unstable hamiltonian", "doi": "10.1016/0370-2693(86)90362-x", "nodeyear": 1986, "ref-by-count": 66, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1022456477", "attributes": {"title": "The symplectic shell-model theory of collective states", "doi": "10.1016/0375-9474(86)90308-8", "nodeyear": 1986, "ref-by-count": 49, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1002683374", "attributes": {"title": "The moment of inertia in the interacting boson model", "doi": "10.1016/0375-9474(86)90505-1", "nodeyear": 1986, "ref-by-count": 34, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060793513", "attributes": {"title": "Limiting quasienergy statistics for simple quantum systems", "doi": "10.1103/physrevlett.56.541", "nodeyear": 1986, "ref-by-count": 110, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1039987654", "attributes": {"title": "Lie Groups and Algebras with Applications to Physics, Geometry, and Mechanics", "doi": "10.1007/978-1-4757-1910-9", "nodeyear": 1986, "ref-by-count": 198, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1039918636", "attributes": {"title": "Quasienergy integrals for the “standard mapping”", "doi": "10.1016/0375-9601(85)90333-0", "nodeyear": 1985, "ref-by-count": 4, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1016926995", "attributes": {"title": "An integrable marriage of the Euler equations with the Calogero-Moser system", "doi": "10.1016/0375-9601(85)90432-3", "nodeyear": 1985, "ref-by-count": 103, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1015283490", "attributes": {"title": "Microwave spectrum of the quasilinear molecule, cyanogen isothiocyanate (NCNCS)", "doi": "10.1016/0022-2852(85)90114-6", "nodeyear": 1985, "ref-by-count": 25, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1060537632", "attributes": {"title": "Statistics of quasi-energy separations in chaotic systems", "doi": "10.1103/physrevb.31.6852", "nodeyear": 1985, "ref-by-count": 57, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1060791387", "attributes": {"title": "New Approach to the Statistical Properties of Energy Levels", "doi": "10.1103/physrevlett.54.1883", "nodeyear": 1985, "ref-by-count": 182, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1098905503", "attributes": {"title": "Coherent States", "doi": "10.1142/0096", "nodeyear": 1985, "ref-by-count": 1220, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1022161412", "attributes": {"title": "Quantum spectra of classically chaotic systems without time reversal invariance", "doi": "10.1016/0375-9601(85)90287-7", "nodeyear": 1985, "ref-by-count": 56, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1030634392", "attributes": {"title": "On the dynamics of a quantum system which is classically chaotic", "doi": "10.1007/bf01312650", "nodeyear": 1985, "ref-by-count": 66, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060537812", "attributes": {"title": "Theory of the scanning tunneling microscope", "doi": "10.1103/physrevb.31.805", "nodeyear": 1985, "ref-by-count": 3418, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060473496", "attributes": {"title": "Route to chaos by irregular periods: Simulations of parallel pumping in ferromagnets", "doi": "10.1103/physreva.31.420", "nodeyear": 1985, "ref-by-count": 58, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1024772182", "attributes": {"title": "Spectral Fluctuations and Chaos in Quantum Systems", "doi": "10.1007/978-1-4613-2443-0_7", "nodeyear": 1985, "ref-by-count": 2, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060472631", "attributes": {"title": "Stability of quantum motion in chaotic and regular systems", "doi": "10.1103/physreva.30.1610", "nodeyear": 1984, "ref-by-count": 487, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060660647", "attributes": {"title": "Collective particle hole excitation in a deformed ground state", "doi": "10.1103/physrevc.29.2368", "nodeyear": 1984, "ref-by-count": 5, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060789858", "attributes": {"title": "Uncovering the Transition from Regularity to Irregularity in a Quantum System", "doi": "10.1103/physrevlett.52.1665", "nodeyear": 1984, "ref-by-count": 133, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1027544400", "attributes": {"title": "Transition to deformed shapes as a nuclear Jahn-Teller effect", "doi": "10.1016/0375-9474(84)90437-8", "nodeyear": 1984, "ref-by-count": 93, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1059067283", "attributes": {"title": "The adiabatic limit and the semiclassical limit", "doi": "10.1088/0305-4470/17/6/018", "nodeyear": 1984, "ref-by-count": 75, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1052314442", "attributes": {"title": "Quantal phase factors accompanying adiabatic changes", "doi": "10.1098/rspa.1984.0023", "nodeyear": 1984, "ref-by-count": 6354, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1027179906", "attributes": {"title": "Diabolical points in the spectra of triangles", "doi": "10.1098/rspa.1984.0022", "nodeyear": 1984, "ref-by-count": 333, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1060660456", "attributes": {"title": "Random phase approximation in a deformed Hartree-Fock basis", "doi": "10.1103/physrevc.29.1113", "nodeyear": 1984, "ref-by-count": 11, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1004335462", "attributes": {"title": "Incommensurability in an exactly-soluble quantal and classical model for a kicked rotator", "doi": "10.1016/0167-2789(84)90185-4", "nodeyear": 1984, "ref-by-count": 38, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1010717449", "attributes": {"title": "Phenomenology of shape transitions in hot nuclei", "doi": "10.1016/0375-9474(84)90421-4", "nodeyear": 1984, "ref-by-count": 98, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060789643", "attributes": {"title": "Characterization of Chaotic Quantum Spectra and Universality of Level Fluctuation Laws", "doi": "10.1103/physrevlett.52.1", "nodeyear": 1984, "ref-by-count": 1914, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060533316", "attributes": {"title": "Large-size critical behavior of infinitely coordinated systems", "doi": "10.1103/physrevb.28.3955", "nodeyear": 1983, "ref-by-count": 145, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1047967799", "attributes": {"title": "Cranked Hartree approximation for systems with many interacting bosons", "doi": "10.1016/0370-2693(83)91024-9", "nodeyear": 1983, "ref-by-count": 16, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1042659546", "attributes": {"title": "Invariant curves, attractors, and phase diagram of a piecewise linear map with chaos", "doi": "10.1007/bf01009756", "nodeyear": 1983, "ref-by-count": 19, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060789627", "attributes": {"title": "Quantum Kolmogorov-Arnol'd-Moser-like Theorem: Fundamentals of Localization in Quantum Theory", "doi": "10.1103/physrevlett.51.947", "nodeyear": 1983, "ref-by-count": 102, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060789626", "attributes": {"title": "Distribution of Energy Eigenvalues in the Irregular Spectrum", "doi": "10.1103/physrevlett.51.943", "nodeyear": 1983, "ref-by-count": 341, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1058023149", "attributes": {"title": "Comparison of quantal, classical, and semiclassical behavior at an isolated avoided crossing", "doi": "10.1063/1.445127", "nodeyear": 1983, "ref-by-count": 67, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1031813736", "attributes": {"title": "A semiclassical quantization of area-preserving maps", "doi": "10.1016/0167-2789(83)90005-2", "nodeyear": 1983, "ref-by-count": 67, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1005432200", "attributes": {"title": "Regular and Stochastic Motion", "doi": "10.1007/978-1-4757-4257-2", "nodeyear": 1983, "ref-by-count": 2330, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1016998557", "attributes": {"title": "A variational method for the calculation of vibrational levels of any triatomic molecule", "doi": "10.1080/00268978200101082", "nodeyear": 1982, "ref-by-count": 122, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1060659692", "attributes": {"title": "Microscopic structure of an interacting boson model in terms of the Dyson boson mapping", "doi": "10.1103/physrevc.26.642", "nodeyear": 1982, "ref-by-count": 30, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1055659331", "attributes": {"title": "Semiclassical theory of intensities of vibrational fundamentals, overtones, and combination bands", "doi": "10.1021/j100209a001", "nodeyear": 1982, "ref-by-count": 50, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1060787424", "attributes": {"title": "Recurrence Phenomena in Quantum Dynamics", "doi": "10.1103/physrevlett.48.711", "nodeyear": 1982, "ref-by-count": 195, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1016849900", "attributes": {"title": "Quantitative description of configuration mixing in the interacting boson model", "doi": "10.1016/0375-9474(82)90061-6", "nodeyear": 1982, "ref-by-count": 122, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060659366", "attributes": {"title": "Phenomenological analysis of the interacting boson model", "doi": "10.1103/physrevc.25.614", "nodeyear": 1982, "ref-by-count": 61, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060469716", "attributes": {"title": "Relation between atomic coherent-state representation, state multipoles, and generalized phase-space distributions", "doi": "10.1103/physreva.24.2889", "nodeyear": 1981, "ref-by-count": 210, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060786505", "attributes": {"title": "Relation between the Z=64 Shell Closure and the Onset of Deformation at N=88-90", "doi": "10.1103/physrevlett.47.1433", "nodeyear": 1981, "ref-by-count": 201, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1034371240", "attributes": {"title": "Configuration mixing in the interacting boson model", "doi": "10.1016/0370-2693(81)90321-x", "nodeyear": 1981, "ref-by-count": 112, "is_input_DOI": false, "category_for": "02:0.60;01:0.40", "level": "ref_l2"}}, {"id": "pub.1019398907", "attributes": {"title": "An intrinsic state for the interacting boson model and its relationship to the Bohr-Mottelson model", "doi": "10.1016/0375-9474(80)90387-5", "nodeyear": 1980, "ref-by-count": 348, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1024622720", "attributes": {"title": "On global action‐angle coordinates", "doi": "10.1002/cpa.3160330602", "nodeyear": 1980, "ref-by-count": 329, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060784903", "attributes": {"title": "Relationship between the Bohr Collective Hamiltonian and the Interacting-Boson Model", "doi": "10.1103/physrevlett.44.1744", "nodeyear": 1980, "ref-by-count": 349, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1060784758", "attributes": {"title": "Periodic Spontaneous Collapse and Revival in a Simple Quantum Model", "doi": "10.1103/physrevlett.44.1323", "nodeyear": 1980, "ref-by-count": 1064, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1058996814", "attributes": {"title": "Features of Nuclear Deformations Produced by the Alignment of Individual Particles or Pairs", "doi": "10.1088/0031-8949/22/5/008", "nodeyear": 1980, "ref-by-count": 182, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1109710367", "attributes": {"title": "The Nuclear Many-Body Problem", "doi": "10.1007/978-3-642-61852-9", "nodeyear": 1980, "ref-by-count": 3504, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1041047376", "attributes": {"title": "Thermal isomerisation of sulphur dicyanide S(CN) 2 to cyanogen isothiocyanate, NCNCS", "doi": "10.1039/c3980000606a", "nodeyear": 1980, "ref-by-count": 12, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1034195309", "attributes": {"title": "Quantum maps", "doi": "10.1016/0003-4916(79)90296-3", "nodeyear": 1979, "ref-by-count": 392, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060657707", "attributes": {"title": "Unified shell-model description of nuclear deformation", "doi": "10.1103/physrevc.20.820", "nodeyear": 1979, "ref-by-count": 253, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060783526", "attributes": {"title": "Spectrum and Eigenfunctions for a Hamiltonian with Stochastic Trajectories", "doi": "10.1103/physrevlett.42.1189", "nodeyear": 1979, "ref-by-count": 502, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060783905", "attributes": {"title": "Scaling Theory of Localization: Absence of Quantum Diffusion in Two Dimensions", "doi": "10.1103/physrevlett.42.673", "nodeyear": 1979, "ref-by-count": 4963, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1030160495", "attributes": {"title": "Interacting boson model of collective nuclear states III. The transition from SU(5) to SU(3)", "doi": "10.1016/0003-4916(78)90159-8", "nodeyear": 1978, "ref-by-count": 411, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1047765215", "attributes": {"title": "Interacting boson model of collective nuclear states II. The rotational limit", "doi": "10.1016/0003-4916(78)90228-2", "nodeyear": 1978, "ref-by-count": 1038, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1058956513", "attributes": {"title": "The Anderson localisation problem II. Some detailed numerical results", "doi": "10.1088/0022-3719/10/21/018", "nodeyear": 1977, "ref-by-count": 50, "is_input_DOI": false, "category_for": "02:0.33;09:0.33;10:0.33", "level": "ref_l2"}}, {"id": "pub.1031874509", "attributes": {"title": "Level clustering in the regular spectrum", "doi": "10.1098/rspa.1977.0140", "nodeyear": 1977, "ref-by-count": 967, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1058099888", "attributes": {"title": "Lie series and invariant functions for analytic symplectic maps", "doi": "10.1063/1.522868", "nodeyear": 1976, "ref-by-count": 261, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1062129885", "attributes": {"title": "Table of Integrals, Series, and Products", "doi": "10.1115/1.3452897", "nodeyear": 1976, "ref-by-count": 4850, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1060465772", "attributes": {"title": "Superradiant pulses and directed angular momentum states", "doi": "10.1103/physreva.13.357", "nodeyear": 1976, "ref-by-count": 98, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060779406", "attributes": {"title": "Collective Nuclear States as Representations of a SU(6) Group", "doi": "10.1103/physrevlett.35.1069", "nodeyear": 1975, "ref-by-count": 851, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1060779458", "attributes": {"title": "New Mechanism for a Charge-Density-Wave Instability", "doi": "10.1103/physrevlett.35.120", "nodeyear": 1975, "ref-by-count": 315, "is_input_DOI": false, "category_for": "09:1.00", "level": "ref_l2"}}, {"id": "pub.1020691468", "attributes": {"title": "Charge-density waves and superlattices in the metallic layered transition metal dichalcogenides", "doi": "10.1080/00018737500101391", "nodeyear": 1975, "ref-by-count": 1747, "is_input_DOI": false, "category_for": "02:0.60;01:0.40", "level": "ref_l2"}}, {"id": "pub.1057914937", "attributes": {"title": "Lie Groups, Lie Algebras, and Some of Their Applications", "doi": "10.1063/1.3128987", "nodeyear": 1974, "ref-by-count": 582, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1060677000", "attributes": {"title": "Study of the (p,t) Reaction on the Even Gadolinium Nuclei", "doi": "10.1103/physrevc.8.806", "nodeyear": 1973, "ref-by-count": 58, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060775623", "attributes": {"title": "Scaling Theory for Finite-Size Effects in the Critical Region", "doi": "10.1103/physrevlett.28.1516", "nodeyear": 1972, "ref-by-count": 1154, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060489120", "attributes": {"title": "Combined Zeeman and High-Frequency Stark Effects, with Applications to Neutral-Helium Lines Useful in Plasma Diagnostics", "doi": "10.1103/physreva.5.490", "nodeyear": 1972, "ref-by-count": 52, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060838726", "attributes": {"title": "Aspects of Time-Dependent Perturbation Theory", "doi": "10.1103/revmodphys.44.602", "nodeyear": 1972, "ref-by-count": 530, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1057743676", "attributes": {"title": "Periodic Orbits and Classical Quantization Conditions", "doi": "10.1063/1.1665596", "nodeyear": 1971, "ref-by-count": 1223, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1025513050", "attributes": {"title": "Generic bifurcation of periodic points", "doi": "10.1090/s0002-9947-1970-0259289-x", "nodeyear": 1970, "ref-by-count": 154, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1010219741", "attributes": {"title": "A new treatment of the collective nuclear hamiltonian", "doi": "10.1016/0370-2693(69)90469-9", "nodeyear": 1969, "ref-by-count": 104, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1019460196", "attributes": {"title": "Quasi-periodic states of an oscillatory hamiltonian", "doi": "10.1080/00268976900101141", "nodeyear": 1969, "ref-by-count": 41, "is_input_DOI": false, "category_for": "03:0.60;02:0.40", "level": "ref_l2"}}, {"id": "pub.1054019943", "attributes": {"title": "A. Mostowski and M. Stark, Introduction to Higher Algebra (Pergamon Press, Oxford, 1964), 474 pp., 45s.", "doi": "10.1017/s0013091500012888", "nodeyear": 1969, "ref-by-count": 4, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1028237179", "attributes": {"title": "SU(1,1) quasi-spin formalism of the many-boson system in a spherical field", "doi": "10.1016/0003-4916(68)90184-x", "nodeyear": 1968, "ref-by-count": 83, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1044085245", "attributes": {"title": "On irreducible tensors of O5+", "doi": "10.1016/0375-9474(68)90317-5", "nodeyear": 1968, "ref-by-count": 6, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1024981283", "attributes": {"title": "Two-nucleon transfer and pairing phase transition", "doi": "10.1016/0375-9474(68)90718-5", "nodeyear": 1968, "ref-by-count": 38, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060433897", "attributes": {"title": "(p,t) Reaction on the Isotopes of Sm and Nd, N=88 and 90", "doi": "10.1103/physrev.151.1000", "nodeyear": 1966, "ref-by-count": 61, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1006382259", "attributes": {"title": "The (t, p) reaction with the even isotopes of Sm", "doi": "10.1016/0029-5582(66)90297-5", "nodeyear": 1966, "ref-by-count": 187, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1062243952", "attributes": {"title": "Handbook of Mathematical Functions", "doi": "10.1119/1.1972842", "nodeyear": 1966, "ref-by-count": 16750, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1060768363", "attributes": {"title": "New Mechanism for Superconductivity", "doi": "10.1103/physrevlett.15.524", "nodeyear": 1965, "ref-by-count": 567, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1032128187", "attributes": {"title": "Expansion of the Campbell‐Baker‐Hausdorff formula by computer", "doi": "10.1002/cpa.3160180111", "nodeyear": 1965, "ref-by-count": 28, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1003267521", "attributes": {"title": "Levels of Sm152 excited in the Sm150 (t, p) reaction", "doi": "10.1016/0031-9163(65)91047-4", "nodeyear": 1965, "ref-by-count": 70, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1060429472", "attributes": {"title": "Observations of Transitions Between Stationary States in a Rotating Magnetic Field", "doi": "10.1103/physrev.136.a35", "nodeyear": 1964, "ref-by-count": 13, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1017315055", "attributes": {"title": "Electron correlations in narrow energy bands", "doi": "10.1098/rspa.1963.0204", "nodeyear": 1963, "ref-by-count": 5147, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060427420", "attributes": {"title": "Coherent and Incoherent States of the Radiation Field", "doi": "10.1103/physrev.131.2766", "nodeyear": 1963, "ref-by-count": 5175, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1057791192", "attributes": {"title": "Parameter Differentiation of Quantum‐Mechanical Linear Operators", "doi": "10.1063/1.1724318", "nodeyear": 1963, "ref-by-count": 23, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1057796022", "attributes": {"title": "Some Causes of Resonant Frequency Shifts in Atomic Beam Machines. I. Shifts Due to Other Frequencies of Excitation", "doi": "10.1063/1.1729536", "nodeyear": 1963, "ref-by-count": 58, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1057773719", "attributes": {"title": "Statistical Theory of the Energy Levels of Complex Systems. I", "doi": "10.1063/1.1703773", "nodeyear": 1962, "ref-by-count": 1428, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1002878811", "attributes": {"title": "Pairing forces and nuclear collective motion", "doi": "10.1016/0003-4916(61)90008-2", "nodeyear": 1961, "ref-by-count": 238, "is_input_DOI": false, "category_for": "01:0.50;02:0.50", "level": "ref_l2"}}, {"id": "pub.1003288694", "attributes": {"title": "Vibrational states of nuclei in the random phase approximation", "doi": "10.1016/0029-5582(61)90364-9", "nodeyear": 1961, "ref-by-count": 539, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1057797824", "attributes": {"title": "Classical and Quantum Mechanical Hypervirial Theorems", "doi": "10.1063/1.1731427", "nodeyear": 1960, "ref-by-count": 296, "is_input_DOI": false, "category_for": "09:0.33;02:0.33;03:0.33", "level": "ref_l2"}}, {"id": "pub.1041734929", "attributes": {"title": "Quantum effects near a barrier maximum", "doi": "10.1016/0003-4916(59)90025-9", "nodeyear": 1959, "ref-by-count": 181, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1026186494", "attributes": {"title": "L. D. Landau and E. M. Lifshitz, Quantum Mechanics, Non‐Relativistic Theory. Volume 3 of a Course of Theoretical Physics. Authorized Translation from the Russian by J. B. Sykes and J. S. Bell. XII + 515 S. m. 51 Abb. London‐Paris 1958. Pergamon Press. Preis geb. 80,— s", "doi": "10.1002/zamm.19590390514", "nodeyear": 1959, "ref-by-count": 1752, "is_input_DOI": false, "category_for": "01:0.50;09:0.50", "level": "ref_l2"}}, {"id": "pub.1057789554", "attributes": {"title": "Geometrical Representation of the Schrödinger Equation for Solving Maser Problems", "doi": "10.1063/1.1722572", "nodeyear": 1957, "ref-by-count": 891, "is_input_DOI": false, "category_for": "01:0.33;02:0.33;09:0.33", "level": "ref_l2"}}, {"id": "pub.1060416616", "attributes": {"title": "Resonance Transitions Induced by Perturbations at Two or More Different Frequencies", "doi": "10.1103/physrev.100.1191", "nodeyear": 1955, "ref-by-count": 145, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060416861", "attributes": {"title": "Stark Effect in Rapidly Varying Fields", "doi": "10.1103/physrev.100.703", "nodeyear": 1955, "ref-by-count": 1425, "is_input_DOI": false, "category_for": "10:1.00", "level": "ref_l2"}}, {"id": "pub.1060464038", "attributes": {"title": "Resonance Transitions in Molecular Beam Experiments. I. General Theory of Transitions in a Rotating Magnetic Field", "doi": "10.1103/physrev.99.1274", "nodeyear": 1955, "ref-by-count": 126, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1011703040", "attributes": {"title": "On the exponential solution of differential equations for a linear operator", "doi": "10.1002/cpa.3160070404", "nodeyear": 1954, "ref-by-count": 1594, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060837536", "attributes": {"title": "Use of Rotating Coordinates in Magnetic Resonance Problems", "doi": "10.1103/revmodphys.26.167", "nodeyear": 1954, "ref-by-count": 331, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1057012353", "attributes": {"title": "Sur le problème des résonances entre plusieurs niveaux dans un ensemble d'atomes orientés", "doi": "10.1051/jphysrad:01954001504025100", "nodeyear": 1954, "ref-by-count": 38, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1060460126", "attributes": {"title": "The Occurrence of Singularities in the Elastic Frequency Distribution of a Crystal", "doi": "10.1103/physrev.89.1189", "nodeyear": 1953, "ref-by-count": 1058, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060459526", "attributes": {"title": "Statistical Theory of Equations of State and Phase Transitions. II. Lattice Gas and Ising Model", "doi": "10.1103/physrev.87.410", "nodeyear": 1952, "ref-by-count": 1652, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060456070", "attributes": {"title": "Nuclear Configurations in the Spin-Orbit Coupling Model. I. Empirical Evidence", "doi": "10.1103/physrev.78.16", "nodeyear": 1950, "ref-by-count": 449, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1050237123", "attributes": {"title": "Modellmäßige Deutung der ausgezeichneten Nukleonenzahlen im Kernbau", "doi": "10.1007/bf01333077", "nodeyear": 1950, "ref-by-count": 145, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1000891726", "attributes": {"title": "XXXI. The structure of an electromagnetic field in the neighbourhood of a cusp of a caustic", "doi": "10.1080/14786444608561335", "nodeyear": 1946, "ref-by-count": 289, "is_input_DOI": false, "category_for": "01:1.00", "level": "ref_l2"}}, {"id": "pub.1060451198", "attributes": {"title": "On the Theory of the Magnetic Resonance Method of Determining Nuclear Moments", "doi": "10.1103/physrev.58.1061", "nodeyear": 1940, "ref-by-count": 37, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060451040", "attributes": {"title": "Magnetic Resonance for Nonrotating Fields", "doi": "10.1103/physrev.57.522", "nodeyear": 1940, "ref-by-count": 960, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1060450736", "attributes": {"title": "Forces in Molecules", "doi": "10.1103/physrev.56.340", "nodeyear": 1939, "ref-by-count": 2944, "is_input_DOI": false, "category_for": "03:1.00", "level": "ref_l2"}}, {"id": "pub.1060449417", "attributes": {"title": "On the Connection Formulas and the Solutions of the Wave Equation", "doi": "10.1103/physrev.51.669", "nodeyear": 1937, "ref-by-count": 801, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1060449414", "attributes": {"title": "Space Quantization in a Gyrating Magnetic Field", "doi": "10.1103/physrev.51.652", "nodeyear": 1937, "ref-by-count": 1235, "is_input_DOI": false, "category_for": "02:1.00", "level": "ref_l2"}}, {"id": "pub.1020033193", "attributes": {"title": "Atomi orientati in campo magnetico variabile", "doi": "10.1007/bf02960953", "nodeyear": 1932, "ref-by-count": 770, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}, {"id": "pub.1027226374", "attributes": {"title": "Beitrag zur Theorie des Ferromagnetismus", "doi": "10.1007/bf02980577", "nodeyear": 1925, "ref-by-count": 2265, "is_input_DOI": false, "category_for": "00:1", "level": "ref_l2"}}], "edges": [{"source": "pub.1010926410", "target": "pub.1021560322", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1014050295", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1059069780", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1048928815", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1008126854", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1045564126", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1059076073", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1034025717", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1060831320", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1025472474", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1060839703", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1032795711", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1049262570", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1059070056", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1004858858", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1041909998", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1032579586", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1059079802", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1060485026", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1026356533", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1060507439", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1060430850", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1017250213", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1062233668", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1024402227", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1041856979", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1060741752", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1007741542", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1048699443", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1060810429", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1060759314", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1060500239", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1062466552", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1042734315", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1039860202", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1039829503", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1050389361", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1008158272", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1010926410", "target": "pub.1014751446", "attributes": {"year": 2014, "level": "ref_l1"}}, {"source": "pub.1144412825", "target": "pub.1010926410", "attributes": {"year": 2022, "level": "cite_l1"}}, {"source": "pub.1144210477", "target": "pub.1010926410", "attributes": {"year": 2021, "level": "cite_l1"}}, {"source": "pub.1143466025", "target": "pub.1010926410", "attributes": {"year": 2021, "level": "cite_l1"}}, {"source": "pub.1144437177", "target": "pub.1010926410", "attributes": {"year": 2021, "level": "cite_l1"}}, {"source": "pub.1141370501", "target": "pub.1010926410", "attributes": {"year": 2021, "level": "cite_l1"}}, {"source": "pub.1141139712", "target": "pub.1010926410", "attributes": {"year": 2021, "level": "cite_l1"}}, {"source": "pub.1144432008", "target": "pub.1010926410", "attributes": {"year": 2021, "level": "cite_l1"}}, {"source": "pub.1138795800", "target": "pub.1010926410", "attributes": {"year": 2021, "level": "cite_l1"}}, {"source": "pub.1138581779", "target": "pub.1010926410", "attributes": {"year": 2021, "level": "cite_l1"}}, {"source": "pub.1144435924", "target": "pub.1010926410", "attributes": {"year": 2021, "level": "cite_l1"}}, {"source": "pub.1136498164", "target": "pub.1010926410", "attributes": {"year": 2021, "level": "cite_l1"}}, {"source": "pub.1134894421", "target": "pub.1010926410", "attributes": {"year": 2021, "level": "cite_l1"}}, {"source": "pub.1136299609", "target": "pub.1010926410", "attributes": {"year": 2021, "level": "cite_l1"}}, {"source": "pub.1132677751", "target": "pub.1010926410", "attributes": {"year": 2021, "level": "cite_l1"}}, {"source": "pub.1129534483", "target": "pub.1010926410", "attributes": {"year": 2020, "level": "cite_l1"}}, {"source": "pub.1129066525", "target": "pub.1010926410", "attributes": {"year": 2020, "level": "cite_l1"}}, {"source": "pub.1126263310", "target": "pub.1010926410", "attributes": {"year": 2020, "level": "cite_l1"}}, {"source": "pub.1121827528", "target": "pub.1010926410", "attributes": {"year": 2019, "level": "cite_l1"}}, {"source": "pub.1120642228", "target": "pub.1010926410", "attributes": {"year": 2019, "level": "cite_l1"}}, {"source": "pub.1121123255", "target": "pub.1010926410", "attributes": {"year": 2019, "level": "cite_l1"}}, {"source": "pub.1120846773", "target": "pub.1010926410", "attributes": {"year": 2019, "level": "cite_l1"}}, {"source": "pub.1120342145", "target": "pub.1010926410", "attributes": {"year": 2019, "level": "cite_l1"}}, {"source": "pub.1117411673", "target": "pub.1010926410", "attributes": {"year": 2019, "level": "cite_l1"}}, {"source": "pub.1107951663", "target": "pub.1010926410", "attributes": {"year": 2018, "level": "cite_l1"}}, {"source": "pub.1105752007", "target": "pub.1010926410", "attributes": {"year": 2018, "level": "cite_l1"}}, {"source": "pub.1099619049", "target": "pub.1010926410", "attributes": {"year": 2017, "level": "cite_l1"}}, {"source": "pub.1092024589", "target": "pub.1010926410", "attributes": {"year": 2017, "level": "cite_l1"}}, {"source": "pub.1090980852", "target": "pub.1010926410", "attributes": {"year": 2017, "level": "cite_l1"}}, {"source": "pub.1090697089", "target": "pub.1010926410", "attributes": {"year": 2017, "level": "cite_l1"}}, {"source": "pub.1085593414", "target": "pub.1010926410", "attributes": {"year": 2017, "level": "cite_l1"}}, {"source": "pub.1059133328", "target": "pub.1010926410", "attributes": {"year": 2017, "level": "cite_l1"}}, {"source": "pub.1048482410", "target": "pub.1010926410", "attributes": {"year": 2017, "level": "cite_l1"}}, {"source": "pub.1060766918", "target": "pub.1010926410", "attributes": {"year": 2016, "level": "cite_l1"}}, {"source": "pub.1060750764", "target": "pub.1010926410", "attributes": {"year": 2016, "level": "cite_l1"}}, {"source": "pub.1060516500", "target": "pub.1010926410", "attributes": {"year": 2016, "level": "cite_l1"}}, {"source": "pub.1059005118", "target": "pub.1010926410", "attributes": {"year": 2016, "level": "cite_l1"}}, {"source": "pub.1060516111", "target": "pub.1010926410", "attributes": {"year": 2016, "level": "cite_l1"}}, {"source": "pub.1060680986", "target": "pub.1010926410", "attributes": {"year": 2016, "level": "cite_l1"}}, {"source": "pub.1060649865", "target": "pub.1010926410", "attributes": {"year": 2016, "level": "cite_l1"}}, {"source": "pub.1060514338", "target": "pub.1010926410", "attributes": {"year": 2015, "level": "cite_l1"}}, {"source": "pub.1059004548", "target": "pub.1010926410", "attributes": {"year": 2015, "level": "cite_l1"}}, {"source": "pub.1059136608", "target": "pub.1010926410", "attributes": {"year": 2015, "level": "cite_l1"}}, {"source": "pub.1010705109", "target": "pub.1010926410", "attributes": {"year": 2015, "level": "cite_l1"}}, {"source": "pub.1032825147", "target": "pub.1010926410", "attributes": {"year": 2015, "level": "cite_l1"}}, {"source": "pub.1036861519", "target": "pub.1010926410", "attributes": {"year": 2015, "level": "cite_l1"}}, {"source": "pub.1039964510", "target": "pub.1010926410", "attributes": {"year": 2014, "level": "cite_l1"}}, {"source": "pub.1003966050", "target": "pub.1010926410", "attributes": {"year": 2014, "level": "cite_l1"}}, {"source": "pub.1060512752", "target": "pub.1010926410", "attributes": {"year": 2014, "level": "cite_l1"}}, {"source": "pub.1145750437", "target": "pub.1132677751", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1146014202", "target": "pub.1129534483", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1146014202", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145897843", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145440026", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145430770", "target": "pub.1060766918", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145506720", "target": "pub.1105752007", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145372424", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145280638", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145273436", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145213934", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145849886", "target": "pub.1085593414", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145849886", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145849842", "target": "pub.1060516500", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145823845", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145788811", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145754902", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145754902", "target": "pub.1060766918", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145754886", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145754849", "target": "pub.1144412825", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145754842", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145668053", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145636450", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145438375", "target": "pub.1059133328", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145407409", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145168134", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144652253", "target": "pub.1134894421", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144652253", "target": "pub.1141370501", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144652253", "target": "pub.1105752007", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144652253", "target": "pub.1090697089", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145404710", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145130056", "target": "pub.1134894421", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145130056", "target": "pub.1060516111", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145130056", "target": "pub.1090697089", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145130056", "target": "pub.1060514338", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144504433", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145011775", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145032383", "target": "pub.1126263310", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144661259", "target": "pub.1129534483", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144661259", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144431665", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144412825", "target": "pub.1060516111", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144412825", "target": "pub.1134894421", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144412825", "target": "pub.1092024589", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144412825", "target": "pub.1138795800", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144412825", "target": "pub.1090980852", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144412825", "target": "pub.1117411673", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144412825", "target": "pub.1105752007", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144412825", "target": "pub.1060514338", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144412825", "target": "pub.1036861519", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144412825", "target": "pub.1132677751", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144412825", "target": "pub.1120342145", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144412825", "target": "pub.1090697089", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144412825", "target": "pub.1060750764", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1146014238", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145130013", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145077099", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145077057", "target": "pub.1085593414", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145042826", "target": "pub.1121123255", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145016796", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144825837", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144625101", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144504676", "target": "pub.1060766918", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144370522", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144370491", "target": "pub.1085593414", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144370491", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144370491", "target": "pub.1060766918", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1145001907", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1144437688", "target": "pub.1032825147", "attributes": {"year": 2022, "level": "cite_l2"}}, {"source": "pub.1143938533", "target": "pub.1060766918", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144267107", "target": "pub.1060514338", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144237217", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144210477", "target": "pub.1039964510", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144210477", "target": "pub.1138795800", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144210477", "target": "pub.1120342145", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144210477", "target": "pub.1121827528", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144210477", "target": "pub.1010705109", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144210477", "target": "pub.1134894421", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144210477", "target": "pub.1092024589", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144210477", "target": "pub.1136299609", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144210477", "target": "pub.1105752007", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144210477", "target": "pub.1117411673", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144176750", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144500315", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144112210", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144057503", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143844860", "target": "pub.1134894421", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143844860", "target": "pub.1036861519", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143844860", "target": "pub.1141139712", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143777724", "target": "pub.1059133328", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143745319", "target": "pub.1121827528", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143725448", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144210501", "target": "pub.1060516111", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144210501", "target": "pub.1134894421", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144210501", "target": "pub.1141370501", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144210501", "target": "pub.1138795800", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144210501", "target": "pub.1117411673", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144115960", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144115499", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143939848", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143844418", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143724565", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136420764", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143455107", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1142733768", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143320265", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1142441911", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1142441613", "target": "pub.1085593414", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1142424779", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143466025", "target": "pub.1121827528", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143466025", "target": "pub.1060516111", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143466025", "target": "pub.1134894421", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143466025", "target": "pub.1138795800", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143466025", "target": "pub.1117411673", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143466025", "target": "pub.1105752007", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143466025", "target": "pub.1129066525", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143466025", "target": "pub.1060514338", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143466025", "target": "pub.1138581779", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143466025", "target": "pub.1060516500", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143466025", "target": "pub.1120342145", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143466025", "target": "pub.1060750764", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143042212", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143042212", "target": "pub.1060766918", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1142911413", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1142728786", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1142661877", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1142589015", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1142577463", "target": "pub.1120642228", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1142435873", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1142330688", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140972911", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1139312982", "target": "pub.1134894421", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1139312982", "target": "pub.1132677751", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1143151380", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141523252", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1142019154", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141572181", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1142000959", "target": "pub.1121827528", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141928574", "target": "pub.1136299609", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141928574", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141852620", "target": "pub.1085593414", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141852620", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141763682", "target": "pub.1120342145", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144433670", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141641422", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141277687", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1142252018", "target": "pub.1060516500", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1142248564", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141918917", "target": "pub.1060766918", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141918911", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141886712", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141886629", "target": "pub.1121827528", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141886629", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141793655", "target": "pub.1134894421", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141423415", "target": "pub.1090697089", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144437177", "target": "pub.1060516111", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144437177", "target": "pub.1092024589", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144437177", "target": "pub.1138795800", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144437177", "target": "pub.1090980852", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144437177", "target": "pub.1117411673", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144437177", "target": "pub.1105752007", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144437177", "target": "pub.1060514338", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144437177", "target": "pub.1036861519", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144437177", "target": "pub.1132677751", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144437177", "target": "pub.1090697089", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144437177", "target": "pub.1060750764", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141424092", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141081318", "target": "pub.1090980852", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141370501", "target": "pub.1138795800", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141370501", "target": "pub.1003966050", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141370501", "target": "pub.1060514338", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141370501", "target": "pub.1132677751", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141370501", "target": "pub.1090697089", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141370501", "target": "pub.1121827528", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141370501", "target": "pub.1060516111", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141370501", "target": "pub.1134894421", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141370501", "target": "pub.1059136608", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141370501", "target": "pub.1092024589", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141370501", "target": "pub.1136299609", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141370501", "target": "pub.1060516500", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141370501", "target": "pub.1105752007", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141198298", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141139712", "target": "pub.1105752007", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141139712", "target": "pub.1132677751", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141139712", "target": "pub.1090697089", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141139712", "target": "pub.1120342145", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141139712", "target": "pub.1092024589", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141139712", "target": "pub.1138795800", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141139712", "target": "pub.1134894421", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141139712", "target": "pub.1136299609", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141139712", "target": "pub.1060514338", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141139712", "target": "pub.1060516500", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141139712", "target": "pub.1036861519", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141139712", "target": "pub.1060516111", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141117728", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141039563", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141039539", "target": "pub.1136299609", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141007405", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140992787", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140946090", "target": "pub.1085593414", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140946090", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140903868", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144436951", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141458068", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141330553", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141330548", "target": "pub.1134894421", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141330548", "target": "pub.1138795800", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141082269", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141082265", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140946998", "target": "pub.1085593414", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140875048", "target": "pub.1060512752", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140813822", "target": "pub.1060766918", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1139687004", "target": "pub.1121827528", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140631120", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140376339", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140327645", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140210127", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140251168", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140149233", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140780393", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140748154", "target": "pub.1060516111", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140595261", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140595176", "target": "pub.1090697089", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140449264", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140411348", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140385244", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140385244", "target": "pub.1060516111", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140343664", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1139432247", "target": "pub.1085593414", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1139432247", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1139715974", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1139696368", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1139686944", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137941137", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144432008", "target": "pub.1060516111", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144432008", "target": "pub.1092024589", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144432008", "target": "pub.1090980852", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144432008", "target": "pub.1117411673", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144432008", "target": "pub.1105752007", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144432008", "target": "pub.1060514338", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144432008", "target": "pub.1036861519", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144432008", "target": "pub.1132677751", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144432008", "target": "pub.1120342145", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144432008", "target": "pub.1090697089", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144432008", "target": "pub.1060750764", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1139359212", "target": "pub.1120342145", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141244634", "target": "pub.1092024589", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140043181", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1139809449", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1139809443", "target": "pub.1085593414", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1139801116", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1139365607", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1139320696", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1139210985", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1139155188", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1139098613", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138795800", "target": "pub.1036861519", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138795800", "target": "pub.1060514338", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138795800", "target": "pub.1134894421", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138795800", "target": "pub.1117411673", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138795800", "target": "pub.1105752007", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138695988", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1139212437", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138955510", "target": "pub.1121827528", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138886959", "target": "pub.1121827528", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138581779", "target": "pub.1134894421", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138581779", "target": "pub.1003966050", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138581779", "target": "pub.1129066525", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138581779", "target": "pub.1059136608", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138581779", "target": "pub.1060516500", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138581779", "target": "pub.1117411673", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137877758", "target": "pub.1129066525", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137877758", "target": "pub.1134894421", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138289216", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141651369", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138216900", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138186330", "target": "pub.1105752007", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144435924", "target": "pub.1060516111", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144435924", "target": "pub.1092024589", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144435924", "target": "pub.1090980852", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144435924", "target": "pub.1117411673", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144435924", "target": "pub.1105752007", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144435924", "target": "pub.1060514338", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144435924", "target": "pub.1036861519", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144435924", "target": "pub.1132677751", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144435924", "target": "pub.1120342145", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144435924", "target": "pub.1090697089", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144435924", "target": "pub.1060750764", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138114367", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138249357", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138186281", "target": "pub.1085593414", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138114325", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137890988", "target": "pub.1060516111", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137890988", "target": "pub.1090980852", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137890988", "target": "pub.1060514338", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137773392", "target": "pub.1048482410", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134453264", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137261348", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137484959", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137437656", "target": "pub.1132677751", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136592478", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137167395", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137494538", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137491775", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137490808", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137410827", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137311787", "target": "pub.1085593414", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137235025", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137168785", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137035608", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136994042", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136986948", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136986948", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136721709", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136701453", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136701453", "target": "pub.1060766918", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136666903", "target": "pub.1060516111", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136666903", "target": "pub.1134894421", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136666903", "target": "pub.1092024589", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136666903", "target": "pub.1060514338", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136666903", "target": "pub.1136299609", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136666903", "target": "pub.1060516500", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134743337", "target": "pub.1060680986", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134743337", "target": "pub.1117411673", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136498164", "target": "pub.1121827528", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1121827528", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1120846773", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1060516111", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1010705109", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1092024589", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1003966050", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1090980852", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1060680986", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1117411673", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1105752007", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1129066525", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1060514338", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1126263310", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1059136608", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1060516500", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1039964510", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1036861519", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1120342145", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1132677751", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1090697089", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1060750764", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1099619049", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1059005118", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134894421", "target": "pub.1060649865", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136367994", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136299609", "target": "pub.1036861519", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136299609", "target": "pub.1060514338", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136299609", "target": "pub.1132677751", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136299609", "target": "pub.1120342145", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136299609", "target": "pub.1090697089", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136299609", "target": "pub.1121827528", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136299609", "target": "pub.1060750764", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136299609", "target": "pub.1090980852", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136299609", "target": "pub.1060516111", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136299609", "target": "pub.1092024589", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136299609", "target": "pub.1117411673", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136299609", "target": "pub.1060516500", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136299609", "target": "pub.1105752007", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136655132", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136504030", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136477967", "target": "pub.1136498164", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136477967", "target": "pub.1060514338", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136477967", "target": "pub.1060516111", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136477967", "target": "pub.1134894421", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136477967", "target": "pub.1117411673", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136477967", "target": "pub.1105752007", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136417273", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136414044", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136226159", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136043176", "target": "pub.1121827528", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1135722934", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1133448902", "target": "pub.1105752007", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1132677751", "target": "pub.1060516111", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1132677751", "target": "pub.1134894421", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1132677751", "target": "pub.1092024589", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1132677751", "target": "pub.1105752007", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1132677751", "target": "pub.1060514338", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1132677751", "target": "pub.1059136608", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1132677751", "target": "pub.1060516500", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1132677751", "target": "pub.1120342145", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1135442248", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1135329747", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1135194875", "target": "pub.1121827528", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140345559", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1135141218", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1140343596", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1135773784", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1135472070", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1135372133", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1135372133", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1135327462", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1135309838", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1135306894", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1135033325", "target": "pub.1085593414", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1135033325", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1132630990", "target": "pub.1060750764", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1132630990", "target": "pub.1060516500", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1130120687", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134736715", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134729998", "target": "pub.1121827528", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134295650", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134295650", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1136535762", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1135035980", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134951348", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134796271", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134708221", "target": "pub.1085593414", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1134708221", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1133369672", "target": "pub.1059004548", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1133369672", "target": "pub.1117411673", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1144696405", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1141996449", "target": "pub.1121123255", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1138681817", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1137164603", "target": "pub.1032825147", "attributes": {"year": 2021, "level": "cite_l2"}}, {"source": "pub.1132415037", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1133653821", "target": "pub.1060766918", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1133434712", "target": "pub.1060516111", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1132597664", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1133361819", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1133346206", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1133100286", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1134158402", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1134040199", "target": "pub.1060514338", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1134040199", "target": "pub.1090697089", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1134040199", "target": "pub.1060516111", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1134040199", "target": "pub.1060516500", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1134037611", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1134035516", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1133997345", "target": "pub.1085593414", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1133741565", "target": "pub.1085593414", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1133735060", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1133735060", "target": "pub.1060766918", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1133499708", "target": "pub.1085593414", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1133402404", "target": "pub.1060516500", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1133344182", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1133099711", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1132237880", "target": "pub.1105752007", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1132036387", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1131329755", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1133080576", "target": "pub.1121827528", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1133125125", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1132781598", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1132635554", "target": "pub.1121123255", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1132626689", "target": "pub.1121827528", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1132300850", "target": "pub.1121123255", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1132300850", "target": "pub.1060516111", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1132266415", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1132781568", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1132682732", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1132672783", "target": "pub.1060514338", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1132495853", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1132252119", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1132060808", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1131969118", "target": "pub.1060766918", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1130243954", "target": "pub.1060766918", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1131841249", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1131841249", "target": "pub.1060766918", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1140347748", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1132055741", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1131923946", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1131725038", "target": "pub.1085593414", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1131633965", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1131535042", "target": "pub.1085593414", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1131497997", "target": "pub.1121827528", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1131390335", "target": "pub.1085593414", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1131390335", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1130765968", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1128676541", "target": "pub.1060680986", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1131177201", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1131131373", "target": "pub.1060516111", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1131131373", "target": "pub.1090697089", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1131100748", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1130030918", "target": "pub.1120342145", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1130753379", "target": "pub.1105752007", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1130753379", "target": "pub.1090697089", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1130315991", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1130688900", "target": "pub.1121827528", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1131193925", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1131193618", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1131100771", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1130836894", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1130756838", "target": "pub.1121123255", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1130750198", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1130316025", "target": "pub.1090980852", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1124910985", "target": "pub.1121827528", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1130469797", "target": "pub.1085593414", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1130394801", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1130268705", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1130214677", "target": "pub.1060516111", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1130214677", "target": "pub.1060514338", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1129902361", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1129855599", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1130392310", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1129926643", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1129685555", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1129685555", "target": "pub.1060766918", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1129594568", "target": "pub.1121123255", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1129534483", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1129384214", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1129066525", "target": "pub.1003966050", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1129066525", "target": "pub.1121827528", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1129066525", "target": "pub.1059136608", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1129066525", "target": "pub.1117411673", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1128974254", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1129713716", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1129492912", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1129063470", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1128941497", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1128912140", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1128533067", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1128836880", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1125908542", "target": "pub.1120342145", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1128827266", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1128505545", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1129532989", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1128466326", "target": "pub.1126263310", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1128416461", "target": "pub.1060516500", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1128125903", "target": "pub.1060766918", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1128741464", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1128303210", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1128253343", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1128250379", "target": "pub.1060766918", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1128246725", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1128224551", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1128130936", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127296857", "target": "pub.1121827528", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127296857", "target": "pub.1105752007", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127296857", "target": "pub.1060750764", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127987694", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127977347", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127865614", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127470058", "target": "pub.1010705109", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127470058", "target": "pub.1107951663", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127470058", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127517958", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127358108", "target": "pub.1060649865", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127346740", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127989066", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127955024", "target": "pub.1085593414", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127897454", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127889093", "target": "pub.1060514338", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127764217", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127758910", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127625202", "target": "pub.1090980852", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127625202", "target": "pub.1039964510", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127607114", "target": "pub.1085593414", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127607114", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127358045", "target": "pub.1121123255", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127358045", "target": "pub.1121827528", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1125292836", "target": "pub.1121123255", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1126383906", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1125977593", "target": "pub.1059133328", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127630356", "target": "pub.1121827528", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127650081", "target": "pub.1085593414", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127130950", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1126727524", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1126480743", "target": "pub.1060766918", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1126271157", "target": "pub.1121827528", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1126269333", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1126263310", "target": "pub.1121827528", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1126263310", "target": "pub.1059004548", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127947148", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1127515489", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1126759415", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1126173583", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1126057889", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1123928512", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1125920858", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1125550793", "target": "pub.1121123255", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1126915081", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1126909693", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1125953276", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1125497800", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1125326068", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1125326068", "target": "pub.1060766918", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1125325450", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1125160480", "target": "pub.1085593414", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1125157056", "target": "pub.1121123255", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1124776377", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1125164136", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1125161664", "target": "pub.1060766918", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1125153368", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1121624158", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1124462573", "target": "pub.1060514338", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1124409613", "target": "pub.1085593414", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1123624596", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1124230276", "target": "pub.1060514338", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1124230253", "target": "pub.1121827528", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1124230253", "target": "pub.1060516111", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1124230253", "target": "pub.1105752007", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1124230253", "target": "pub.1060514338", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1124230253", "target": "pub.1120342145", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1124254326", "target": "pub.1121827528", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1124254326", "target": "pub.1060516111", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1124048582", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1125053995", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1124831533", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1124103171", "target": "pub.1060766918", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1123986522", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1123351695", "target": "pub.1032825147", "attributes": {"year": 2020, "level": "cite_l2"}}, {"source": "pub.1123673879", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1123430435", "target": "pub.1121123255", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1123097339", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1123643952", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1123446111", "target": "pub.1059133328", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1123268268", "target": "pub.1090980852", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1123268268", "target": "pub.1059136608", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1123268268", "target": "pub.1039964510", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1123262658", "target": "pub.1036861519", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1123262658", "target": "pub.1060514338", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1123262658", "target": "pub.1120342145", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1123262658", "target": "pub.1090697089", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1123262658", "target": "pub.1060516111", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1123262658", "target": "pub.1059136608", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1123262658", "target": "pub.1092024589", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1123262658", "target": "pub.1105752007", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1123187479", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1123187479", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122945773", "target": "pub.1121123255", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122948207", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122908545", "target": "pub.1060766918", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122419408", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122364137", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122299651", "target": "pub.1010705109", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122298943", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122260988", "target": "pub.1048482410", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122260988", "target": "pub.1060649865", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122960341", "target": "pub.1059133328", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122929220", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122929220", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122682309", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122560614", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122263731", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122003630", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122258473", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122233280", "target": "pub.1060766918", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122016549", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121972957", "target": "pub.1059004548", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121864026", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121860390", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121829677", "target": "pub.1117411673", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120967654", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121574121", "target": "pub.1060514338", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121574121", "target": "pub.1060516111", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121574121", "target": "pub.1105752007", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121497945", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121497945", "target": "pub.1060766918", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122147311", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121992405", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121860362", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121691603", "target": "pub.1060516500", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121454130", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121432950", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121151157", "target": "pub.1060766918", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121123255", "target": "pub.1010705109", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121045652", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121045652", "target": "pub.1060766918", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121046991", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121007947", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120955481", "target": "pub.1060516500", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120846795", "target": "pub.1120846773", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120846795", "target": "pub.1060514338", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120846794", "target": "pub.1059005118", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120846794", "target": "pub.1120846773", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120846792", "target": "pub.1060680986", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120846778", "target": "pub.1060516111", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120846778", "target": "pub.1060514338", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120846773", "target": "pub.1090697089", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120846773", "target": "pub.1059005118", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120846773", "target": "pub.1090980852", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120846773", "target": "pub.1060516111", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120846773", "target": "pub.1059136608", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120846773", "target": "pub.1060680986", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120846773", "target": "pub.1105752007", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120795450", "target": "pub.1090697089", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121403245", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121334827", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1121155174", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120975898", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120721646", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120701000", "target": "pub.1060516111", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120398331", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120211774", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120211774", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120342145", "target": "pub.1060516111", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120342145", "target": "pub.1092024589", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120342145", "target": "pub.1090980852", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120342145", "target": "pub.1105752007", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120342145", "target": "pub.1060514338", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120342145", "target": "pub.1036861519", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120342145", "target": "pub.1090697089", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120310683", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120248299", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120211967", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120144828", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1129971658", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120021739", "target": "pub.1105752007", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120025014", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1122873965", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1129960633", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1118043792", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1120033159", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1119959099", "target": "pub.1060766918", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1119952776", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1119919209", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1119787578", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1119787578", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1119784980", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1118069090", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1118014967", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1118012672", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1117972269", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1117943417", "target": "pub.1060766918", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1117728688", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1116648359", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1113330752", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1113236708", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1112366493", "target": "pub.1059136608", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1117476838", "target": "pub.1105752007", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1117346459", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1117411673", "target": "pub.1003966050", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1117411673", "target": "pub.1090697089", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1117411673", "target": "pub.1060750764", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1117411673", "target": "pub.1090980852", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1117411673", "target": "pub.1060516111", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1117411673", "target": "pub.1059136608", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1117411673", "target": "pub.1060680986", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1117411673", "target": "pub.1105752007", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1117307345", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1117164490", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1117020737", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1116850435", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1116850435", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1116136000", "target": "pub.1060512752", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1115676205", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1115676205", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1115666769", "target": "pub.1060512752", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1114819653", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1114044946", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1113910487", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1113910487", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1113910476", "target": "pub.1059133328", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1114054109", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1114042284", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1110902421", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1113484172", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1113409952", "target": "pub.1121123255", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1112781951", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1110424594", "target": "pub.1060514338", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1110424594", "target": "pub.1060516111", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1110424594", "target": "pub.1059004548", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1115224353", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1114045023", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1113678661", "target": "pub.1010705109", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1113626564", "target": "pub.1060516500", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1113308230", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1116854479", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1111062357", "target": "pub.1060649865", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1112264021", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1112736421", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1112736421", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1112555157", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1112555157", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1112989773", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1112941993", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1112857110", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1112687817", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1112472200", "target": "pub.1060516500", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1112465992", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1112265114", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1112062976", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1111443711", "target": "pub.1060750764", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1111540938", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1111440115", "target": "pub.1105752007", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1111323071", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1111323071", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1110719005", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1112988887", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1111668834", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1111666460", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1111515569", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1111459176", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1111314608", "target": "pub.1085593414", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1111062951", "target": "pub.1032825147", "attributes": {"year": 2019, "level": "cite_l2"}}, {"source": "pub.1110909831", "target": "pub.1085593414", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1110787100", "target": "pub.1060766918", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1110647887", "target": "pub.1085593414", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1110647887", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1110455993", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1110379274", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1110363972", "target": "pub.1060766918", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1110910541", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1110910519", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1110831877", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1110831877", "target": "pub.1060766918", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1110708995", "target": "pub.1085593414", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1110708995", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1110396032", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1110269247", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1110275806", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107970491", "target": "pub.1060514338", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1110072642", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1111914501", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1111914501", "target": "pub.1085593414", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1110266071", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1109811573", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1109804585", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1109804585", "target": "pub.1060766918", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1108054136", "target": "pub.1085593414", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1108034986", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107871386", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107130576", "target": "pub.1036861519", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107130576", "target": "pub.1060514338", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107130576", "target": "pub.1060516111", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107130576", "target": "pub.1092024589", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107130576", "target": "pub.1105752007", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107306817", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107571622", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107951663", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107951663", "target": "pub.1010705109", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107651369", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107651305", "target": "pub.1060516500", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107350062", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107301894", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107298680", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107235090", "target": "pub.1060516500", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1106476468", "target": "pub.1085593414", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107130953", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1103720457", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1106352877", "target": "pub.1060766918", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1106711291", "target": "pub.1060516111", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1106608664", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107231743", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1106912640", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1106809654", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1106602075", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1106159222", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105306956", "target": "pub.1060766918", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1104255664", "target": "pub.1060766918", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1106352452", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1106412628", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1106276823", "target": "pub.1085593414", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1106276823", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105481744", "target": "pub.1036861519", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105481744", "target": "pub.1060514338", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105481744", "target": "pub.1090980852", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105481744", "target": "pub.1060766918", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1106081003", "target": "pub.1060766918", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105993631", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107206378", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105647673", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1106391022", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1106258757", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105855817", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105571339", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105686278", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105624464", "target": "pub.1090697089", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105577723", "target": "pub.1059133328", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1107278146", "target": "pub.1085593414", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105919059", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105752007", "target": "pub.1060514338", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105752007", "target": "pub.1059005118", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105752007", "target": "pub.1060516111", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105752007", "target": "pub.1059136608", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105686214", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105672523", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105590292", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105590279", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105217433", "target": "pub.1085593414", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1104382572", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105237498", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105229539", "target": "pub.1003966050", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105020595", "target": "pub.1060766918", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1104999161", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1104586548", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1104337736", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1104046499", "target": "pub.1060766918", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1104217963", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1104046048", "target": "pub.1085593414", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1104174226", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1103957661", "target": "pub.1085593414", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1103891869", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1104244423", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1104186237", "target": "pub.1092024589", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1103957640", "target": "pub.1085593414", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1103957630", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1103799511", "target": "pub.1092024589", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1105625178", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1103354626", "target": "pub.1085593414", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1103354626", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1103223307", "target": "pub.1060766918", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101044952", "target": "pub.1060516111", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101044952", "target": "pub.1060514338", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101270698", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1100407275", "target": "pub.1010705109", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1100407275", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1106249535", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1106243826", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1103695948", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1103614809", "target": "pub.1085593414", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1103567271", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1103567269", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1103567266", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1103476382", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1103285503", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101728734", "target": "pub.1085593414", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101728734", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101728724", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101699045", "target": "pub.1059005118", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101635473", "target": "pub.1060516111", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101459080", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1100249419", "target": "pub.1060766918", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101875909", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101865179", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101787426", "target": "pub.1085593414", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101568086", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101270671", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101203202", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101164938", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101163815", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1100978693", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1086256884", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101132622", "target": "pub.1048482410", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101046754", "target": "pub.1060516500", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1100847489", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1100847484", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1100693529", "target": "pub.1060680986", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1100658085", "target": "pub.1036861519", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1100590718", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1100333755", "target": "pub.1059005118", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1100180200", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1100757504", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1100700491", "target": "pub.1085593414", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1100700491", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1100502468", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1100502449", "target": "pub.1060516500", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1101180204", "target": "pub.1059005118", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1092917025", "target": "pub.1032825147", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1109707572", "target": "pub.1060649865", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1109706437", "target": "pub.1003966050", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1109706437", "target": "pub.1060514338", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1109706437", "target": "pub.1059136608", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1109706437", "target": "pub.1060516500", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1109706437", "target": "pub.1036861519", "attributes": {"year": 2018, "level": "cite_l2"}}, {"source": "pub.1093034781", "target": "pub.1059133328", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1100299734", "target": "pub.1036861519", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1099619049", "target": "pub.1090697089", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1099619049", "target": "pub.1060516111", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1099619049", "target": "pub.1059136608", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1099750796", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1101194950", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1099750800", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1093118725", "target": "pub.1060516500", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1099862024", "target": "pub.1060649865", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1093100577", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092756070", "target": "pub.1060516500", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092770968", "target": "pub.1060516111", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092770968", "target": "pub.1060514338", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092687423", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092561474", "target": "pub.1085593414", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092277819", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092881230", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092718053", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092642445", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092484424", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092484423", "target": "pub.1085593414", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092484423", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091324316", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092396862", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092104621", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092104602", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092254361", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092218368", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092172298", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092104544", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092104499", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092072911", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092072895", "target": "pub.1085593414", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092024589", "target": "pub.1036861519", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092024589", "target": "pub.1003966050", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092024589", "target": "pub.1060516111", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092024589", "target": "pub.1059136608", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092024589", "target": "pub.1060516500", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092016824", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091629732", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091511165", "target": "pub.1059005118", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1092035474", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091937945", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091808750", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091676677", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091655390", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091256104", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091261840", "target": "pub.1085593414", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091081056", "target": "pub.1060514338", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090692587", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091439255", "target": "pub.1085593414", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091439255", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091357776", "target": "pub.1060649865", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091268146", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091149741", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091132193", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091016901", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1086046359", "target": "pub.1060512752", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091001773", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090980852", "target": "pub.1036861519", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090980852", "target": "pub.1060514338", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090980852", "target": "pub.1060516111", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090740511", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090697089", "target": "pub.1003966050", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090697089", "target": "pub.1059005118", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090697089", "target": "pub.1060516111", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090697089", "target": "pub.1060516500", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090639115", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090124343", "target": "pub.1060514338", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090124343", "target": "pub.1059005118", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090547461", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1091314933", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090809058", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090639004", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090537266", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090432014", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085973336", "target": "pub.1060516500", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090356064", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1086147780", "target": "pub.1048482410", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1086147780", "target": "pub.1060649865", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090727222", "target": "pub.1085593414", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090727222", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1086037788", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085930196", "target": "pub.1060512752", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085868342", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1102822370", "target": "pub.1059005118", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090449453", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085918234", "target": "pub.1060680986", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090858939", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085784151", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084176371", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085784080", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085775517", "target": "pub.1003966050", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085775517", "target": "pub.1060514338", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085775517", "target": "pub.1060516111", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085775507", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085775482", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085524357", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085524341", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085593414", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085277889", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085120424", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085242099", "target": "pub.1036861519", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085242099", "target": "pub.1059005118", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084868052", "target": "pub.1060649865", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1090229831", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085191011", "target": "pub.1085593414", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1085191011", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084786597", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084786582", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084603807", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084174937", "target": "pub.1060516500", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084007961", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084682300", "target": "pub.1039964510", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084174915", "target": "pub.1060516500", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084198171", "target": "pub.1010705109", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084198121", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084197894", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084197582", "target": "pub.1060649865", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084197545", "target": "pub.1060766918", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084197534", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1083406696", "target": "pub.1060514338", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1083406696", "target": "pub.1060516111", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1083406696", "target": "pub.1059004548", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1083935671", "target": "pub.1036861519", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1083439843", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1083816155", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1059133328", "target": "pub.1060516111", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1083935160", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1083717390", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1083643131", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1083522251", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1011995146", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1059164313", "target": "pub.1036861519", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1107414917", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084604018", "target": "pub.1060516111", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084603856", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084603654", "target": "pub.1036861519", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084603654", "target": "pub.1060514338", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084603654", "target": "pub.1060516111", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1084199340", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1083506581", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1060653834", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1060517495", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1031526734", "target": "pub.1032825147", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1048482410", "target": "pub.1060512752", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1048482410", "target": "pub.1060649865", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1048482410", "target": "pub.1036861519", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1013892465", "target": "pub.1060512752", "attributes": {"year": 2017, "level": "cite_l2"}}, {"source": "pub.1060766918", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1087286925", "target": "pub.1060516500", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060681712", "target": "pub.1059004548", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060653553", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060653350", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060653304", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060766700", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060750764", "target": "pub.1003966050", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060750764", "target": "pub.1060516111", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060750764", "target": "pub.1060516500", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060517140", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060517139", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060517109", "target": "pub.1060512752", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1002023992", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060652562", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060516924", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060516896", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060516887", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060516756", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1059164227", "target": "pub.1060514338", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1059164227", "target": "pub.1059004548", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060750417", "target": "pub.1036861519", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060750417", "target": "pub.1060649865", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1008292555", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1059137701", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060652244", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060652210", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060652116", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060516738", "target": "pub.1060514338", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1014532593", "target": "pub.1036861519", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1059174523", "target": "pub.1060649865", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060651758", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060516500", "target": "pub.1036861519", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060516500", "target": "pub.1003966050", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060516500", "target": "pub.1060514338", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060516500", "target": "pub.1059136608", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060516440", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1008230481", "target": "pub.1060514338", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060750048", "target": "pub.1003966050", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1052263311", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1059005118", "target": "pub.1059004548", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060651068", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060516111", "target": "pub.1036861519", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060516111", "target": "pub.1060514338", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1024274677", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060765840", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1010802241", "target": "pub.1036861519", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1010802241", "target": "pub.1060514338", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1010802241", "target": "pub.1060516111", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060765767", "target": "pub.1060514338", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1062666833", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1059164050", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060765582", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1059137444", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060749720", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1045365832", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1013025567", "target": "pub.1003966050", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060650091", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1059164027", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1065176096", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060680986", "target": "pub.1060514338", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060649845", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060649780", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060649672", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060515586", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060515460", "target": "pub.1003966050", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060515459", "target": "pub.1060514338", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1017232487", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1008885136", "target": "pub.1010705109", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1008885136", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060765248", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060765225", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1022845164", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060515226", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060749074", "target": "pub.1036861519", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060749074", "target": "pub.1060514338", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060649137", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060649072", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1060514903", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1049246486", "target": "pub.1032825147", "attributes": {"year": 2016, "level": "cite_l2"}}, {"source": "pub.1059136734", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1060764674", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1060514725", "target": "pub.1036861519", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1060514696", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1036641112", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1064625019", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1027442816", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1060764456", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1060514338", "target": "pub.1036861519", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1034517301", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1059136608", "target": "pub.1039964510", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1059136608", "target": "pub.1036861519", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1060764168", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1060514281", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1034661114", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1028219105", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1016473610", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1046940591", "target": "pub.1010705109", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1060764026", "target": "pub.1060512752", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1060514082", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1049705098", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1060763935", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1060513942", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1020950855", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1002407881", "target": "pub.1036861519", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1032625305", "target": "pub.1060512752", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1022791415", "target": "pub.1060512752", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1059004792", "target": "pub.1036861519", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1053517731", "target": "pub.1036861519", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1046942581", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1010257037", "target": "pub.1060512752", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1039122836", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1033596012", "target": "pub.1032825147", "attributes": {"year": 2015, "level": "cite_l2"}}, {"source": "pub.1009958864", "target": "pub.1032825147", "attributes": {"year": 2014, "level": "cite_l2"}}, {"source": "pub.1039829503", "target": "pub.1056050981", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1003363712", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1057869519", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1020252590", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1004021375", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1030349669", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1057982297", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1060831320", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1060839703", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1007403980", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1060828404", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1010453004", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1058050263", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1057717131", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1026394040", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1015885405", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1054491307", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1029020774", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1036408635", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1006289352", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1045346582", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1048482240", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1108131266", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1058046639", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1035001229", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1058032193", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1024402227", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1049201712", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1009926257", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1006189532", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1058047895", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1057699225", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1010607212", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1051958598", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1019387204", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1058075670", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1060504243", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1000086198", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1038056243", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1017192838", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1057963818", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1060784904", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1011073909", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1057929181", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1058031840", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1018979965", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1006613232", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1035173735", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1058101157", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1047521083", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1046878062", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1016014950", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1004092630", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1039829503", "target": "pub.1017123471", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1060505996", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1035787773", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1048928815", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1013295901", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1060461988", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1024129122", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1027944496", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1048139891", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1034025717", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1018266335", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1025472474", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1027689745", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1031435740", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1049262570", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1060507174", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1060438505", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1026807511", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1059079802", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1060743705", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1041879228", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1002536646", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1049014120", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1060508644", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1030644001", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1047837644", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1019463277", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1060443588", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1024402227", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1004826141", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1046023204", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1022219898", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1052759525", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1007741542", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1060741752", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1051208711", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1021921669", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1049288392", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1030627369", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1034618848", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1046281967", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1043279965", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1060506152", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1037335968", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1060500350", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1039643973", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1023876405", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1050389361", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1014126670", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1008158272", "target": "pub.1018731307", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1027465833", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1018345323", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1037152641", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1013295901", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1052484094", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1034025717", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1025472474", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1043998630", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1060621943", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1035545882", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1064232873", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1026356533", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1060430850", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1010612726", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1029141598", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1005768866", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1011658338", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1038214559", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1060716437", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1040897292", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1041781555", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1017748089", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1062233668", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1041856979", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1019072925", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1060625484", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1048347725", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1050814349", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1017078538", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1060741752", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1051208711", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1021921669", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1043798191", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1041985067", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1060495184", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1034618848", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1027554801", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1005186218", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1060759314", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1021708856", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1032955577", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1023680357", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1033015118", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1020459025", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1030905705", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1007789030", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1028928983", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1015483129", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1032879437", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1023551219", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1039860202", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1058101157", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1014943403", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1014126670", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1029816697", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1037329755", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1032795711", "target": "pub.1060506382", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1035787773", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1018429633", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1013295901", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1060461988", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1027944496", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1034025717", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1040293571", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1060467641", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1060465708", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1060743705", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1002536646", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1060466899", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1060779767", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1060741752", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1021921669", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1018872620", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1034618848", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1002860337", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1060759314", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1037335968", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1046740497", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1060500350", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1014126670", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1050389361", "target": "pub.1018731307", "attributes": {"year": 2013, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1001441208", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1021493626", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1039430067", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1031310290", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1012500209", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1060825740", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1060839596", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1021558365", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1060752377", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1003953015", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1060808815", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1062458662", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1053140660", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1028628834", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1015752685", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1034025717", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1025519412", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1038116055", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1011465158", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1060821199", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1052164705", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1031435740", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1013094749", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1060758977", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1016807636", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1039526439", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1060839612", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1020099649", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1015653335", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1060756185", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1013088353", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1060759233", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1062466552", "target": "pub.1046807340", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1036259707", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1004083979", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1017887827", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1005562834", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1060637445", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1015377513", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1063137926", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1019769175", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1042729374", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1013320119", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1030702899", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1018374514", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1026041336", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1044935711", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1031979890", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1007363629", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1050856595", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1015361753", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1060799033", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1041781555", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1000524935", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1010719555", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1034685599", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1060787963", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1042249380", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1018529463", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1045115933", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1043507384", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1048699443", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1030813584", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1039525977", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1022911870", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1050049937", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1019211121", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1030957871", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1025212910", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1003480064", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1042363867", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1063125329", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1014751446", "target": "pub.1059070435", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1023112037", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1035787773", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1037152641", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1013295901", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1060461988", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1060506152", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1052484094", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1034025717", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1060485219", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1043998630", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1031435740", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1040293571", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1035545882", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1038797520", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1060506993", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1060430850", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1012449759", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1041781555", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1017748089", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1009145988", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1013564949", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1048120455", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1021921669", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1001765599", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1034618848", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1005186218", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1046281967", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1021708856", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1033015118", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1020459025", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1007431288", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1026487091", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1060759314", "target": "pub.1014943403", "attributes": {"year": 2012, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060502673", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1037196319", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1016787662", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1050225995", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1006871668", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1062460456", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1029415952", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1026031618", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1043952833", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1034030383", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1019064484", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1051513505", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1049572504", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1044365852", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1034324600", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1032013208", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1045391551", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1046586795", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060478721", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1045592513", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1000339972", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1002415192", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1008334218", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060475224", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1027890249", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1045377669", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060839208", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060790516", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1003190826", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1042239422", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060786848", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1020731266", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1002431819", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1049607631", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1037292429", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1006251427", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060825411", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1041729973", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060756669", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1098909552", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1027887936", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060811945", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1024053463", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1098669586", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1042326365", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1050275996", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1016883152", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060507227", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060839663", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1042658200", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060488659", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1048054732", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1004049717", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060817691", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060492991", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1016531939", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1048466090", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1062449614", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060492164", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1029186926", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1059137934", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060490050", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060809096", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1042980616", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060487392", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1017239584", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1001545329", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1051955120", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1020003088", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1033004759", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1024870439", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1032117943", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060505399", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1062444393", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1062937215", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1003804610", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1041161303", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1022201659", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1039655036", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1051688434", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1023373666", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060503021", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1028284777", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1006586634", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1025684815", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060819856", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1041063912", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1042003394", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1062451106", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1044299159", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1042812951", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1004419214", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1064235153", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1007113001", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1043762285", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060816390", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060451204", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1013722826", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1033188547", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1046531133", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060487206", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1052781356", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1059052509", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060495410", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1038529836", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1052716647", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060497638", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1041909998", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1031594332", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1052013666", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1059141664", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1005219864", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1014388554", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1005408468", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1053418337", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1019487999", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1036288955", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1036114834", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1044105212", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1022807668", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1021047010", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1015906101", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1023231651", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1032603162", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1012640711", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1049164678", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1030554066", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1014259920", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1021978769", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1044585590", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1009280350", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1050841175", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1027685238", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1011656566", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1029889092", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1019738669", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1017626170", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1034352273", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1059141222", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1010029009", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1042138928", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060787952", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1009071596", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1030664451", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060756621", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1002951333", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060738859", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1038435541", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1005841402", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1032459275", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1037722040", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1042995256", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1008192613", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060834776", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060498076", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1043414338", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1059141143", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1065173408", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060688638", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060501875", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1021091851", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1040258398", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1008096035", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1047238674", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060496772", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1015506698", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1039875361", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1010954675", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1032609059", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1020356915", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1027177091", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060465740", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1019244542", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1006013499", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1051499896", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1024862071", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1047063919", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060823255", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1016989667", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1006852009", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060503017", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1053673045", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1059185033", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1050230284", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1043133057", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1007390089", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1048283529", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1037217818", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1051173433", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1046510001", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060501102", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1000717326", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1018185342", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1017394305", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1048839595", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1011658338", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1041840352", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060491579", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1040733718", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1048985306", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1044584359", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1007437051", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060502238", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1020456012", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1049368483", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1020454192", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1053325657", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1045761502", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1021190003", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1042823964", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1013762487", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1098732024", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1033014139", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1010418632", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1020207781", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1034485631", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060495457", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1050586441", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1034220073", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1036319695", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1025338423", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1007520534", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1034964762", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1002222149", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1006913239", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1040444443", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060496930", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1014640361", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1013441281", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1037170495", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1022061943", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1007053255", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060495708", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1053071617", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1016267052", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060498655", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060821716", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1022248405", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1021507156", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1040606488", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1109642906", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1005109695", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1045736543", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1030131727", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1016510934", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1003323558", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1026356533", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060817288", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1048921956", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1019976609", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1002419553", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1024518599", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060486851", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1002548185", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060828378", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060501109", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1049625672", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060494991", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1008906037", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060504144", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060489764", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1009420992", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1035626723", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1009497503", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1012704698", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060499456", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1014398038", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1029120630", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1041985067", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060495184", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1033308270", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060492307", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1024394193", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060500571", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1011862816", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060501981", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1016917732", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1059141708", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1000824046", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060812753", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060822132", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1036673130", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1001677407", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1059141471", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1023876405", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060480033", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1038221147", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060692192", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1005892928", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1034908465", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1060506382", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1039860202", "target": "pub.1048707800", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1048699443", "target": "pub.1072401415", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1048699443", "target": "pub.1016879794", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1048699443", "target": "pub.1060787963", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1048699443", "target": "pub.1015361753", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1048699443", "target": "pub.1043619387", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1048699443", "target": "pub.1060799033", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1048699443", "target": "pub.1060534420", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1048699443", "target": "pub.1014942113", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1048699443", "target": "pub.1060812343", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1048699443", "target": "pub.1060805434", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1048699443", "target": "pub.1060808347", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1048699443", "target": "pub.1007165107", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1048699443", "target": "pub.1060788070", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1048699443", "target": "pub.1038304688", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1048699443", "target": "pub.1019769175", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1048699443", "target": "pub.1042729374", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1048699443", "target": "pub.1072401833", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1061435768", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1098667582", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1027183352", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1034618848", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1059079802", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1032579586", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1001541263", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1060739410", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1037589088", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1024402227", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1034025717", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1065173362", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1025472474", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1022201659", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1031435740", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1060839663", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1048139891", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1060438505", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1060461988", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1037335968", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1007041825", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1014126670", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1021921669", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1021560322", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1060741752", "target": "pub.1049262570", "attributes": {"year": 2011, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1060839535", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1013441281", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1010496603", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1060498428", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1028901322", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1042723630", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1047509663", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1041801698", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1062445233", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1026356533", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1018185342", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1044645483", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1011658338", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1009364201", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1035230987", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1050017917", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1035029355", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1060794360", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1012276581", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1060829713", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1060812645", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1002717445", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1060494914", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1060810423", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1024352953", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1027799783", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1048928815", "target": "pub.1060465244", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1060817875", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1008126854", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1059076073", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1060831320", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1010453004", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1058050263", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1098678954", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1060825499", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1024402227", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1009926257", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1060670095", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1060658394", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1060822060", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1060504243", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1038056243", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1018979965", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1049930918", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1060822061", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1058101157", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1060823477", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1046878062", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1016014950", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1060823476", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1057869519", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1017123471", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060507439", "target": "pub.1014034141", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1046760586", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1027944496", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1060461988", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1029202339", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1032223066", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1060829954", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1038336282", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1031435740", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1052648436", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1021493626", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1062553940", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1025127614", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1062566030", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1060467976", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1004210259", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1041883040", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1016807636", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1060833498", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1003628052", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1016359120", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1060773820", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1064237535", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1031554515", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1060812205", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1020674059", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1053140660", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1029956508", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1060827495", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1060825740", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1060839663", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1060787952", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1001441208", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1046281967", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1029418627", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1037335968", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1006289465", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1031284085", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1065170744", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1060500350", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1036937707", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1062444393", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1025998679", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1022201659", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1012500209", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1034025717", "target": "pub.1027287387", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060675402", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060673587", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060665563", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1013946646", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060673895", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1042077732", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060754142", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060673232", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1019662680", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1023676200", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1038988214", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060676547", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1038179687", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1049766158", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060725247", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060817875", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1038414711", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1014048276", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060673990", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1041066149", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1050463690", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060673873", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1035008566", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1024370344", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1058100372", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1013665499", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060675775", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1011087398", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060787073", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1029543778", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1020702089", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1032454787", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1026471851", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060822061", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1047220917", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1057900505", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1014034141", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060823818", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060822514", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1059051422", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060674805", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1011902185", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1022722372", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060828404", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1051841352", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060670774", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1024740024", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1039276131", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1030368423", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060726472", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1062913555", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1038008984", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1036559725", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060659837", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1047753851", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1013675126", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1005219924", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1018590889", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1047182146", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1016014950", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1043354067", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060659255", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1026831915", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1022816651", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1058050263", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060665491", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060825499", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1004068287", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1037040727", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060417615", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060675321", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1044880480", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1006809789", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1014462654", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1004646989", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1023527379", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1001844408", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1019411784", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1045342100", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1031855473", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1059079470", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060461257", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060790099", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1021947031", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060791130", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1039981372", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1028952543", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1008126854", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1052419661", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1051363735", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1050919469", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060674676", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1049262570", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1005256305", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060824936", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1028482838", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1017862564", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1013587089", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1048074289", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1062928725", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1059087853", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1031686744", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1046892149", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1052615551", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1049632162", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060675734", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060661648", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060827181", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1004415602", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1036352091", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060832030", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1007846341", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060676255", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1043779481", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1040675567", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060803970", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060672129", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1004884918", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060754866", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1007511315", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1059086874", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060674224", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1047948630", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060459525", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1098679389", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060659368", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060673983", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1039153009", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1047713864", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1052892694", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1021089453", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060784904", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060676386", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060521318", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1036861449", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060531200", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1047906658", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1006517975", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060675639", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1028928983", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1010760440", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060839221", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060674557", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060674011", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1031239487", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060677128", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060674109", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060826564", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060797016", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1032579586", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1011478891", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1031172370", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1011658338", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1039179998", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060673423", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060673467", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1023341115", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1029051671", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060673917", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1021912934", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1008912168", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060673300", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1020847848", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060675760", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1008316332", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1017561574", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060839565", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1009022347", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060672165", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1045352298", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060674213", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060807702", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1023287333", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060755819", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060755003", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060675450", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1028802174", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060674216", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060675290", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060662710", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1028741585", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1010220572", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1032486064", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060774884", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060839152", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060674871", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1000892586", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1028533037", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1041165280", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060674175", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060460944", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1057869519", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1005025234", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060676616", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060658984", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1004858858", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1017460463", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060839208", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1008049063", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060820367", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060839373", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1030191390", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1000173117", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060676334", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060784536", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1015215551", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1011163444", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1015453451", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060838113", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060677048", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1046578644", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060671065", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1000009137", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1003831851", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1000653517", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1016574452", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1019615542", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1028230402", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060657707", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1058101157", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1033456373", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1020613156", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060823476", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1027532833", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1021560322", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1058996814", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1008903034", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060795354", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060673307", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1047765215", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060659366", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1062971188", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1042214836", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1019531352", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1002091117", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060675476", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060839251", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1051459978", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1013668806", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1003288694", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060665292", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1003267521", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060659692", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060674905", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060786505", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060675732", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1049959435", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060673750", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060663748", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060676000", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1039984053", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060675387", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1038409804", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1044810744", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060664355", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1043541010", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060658394", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1059051362", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060675503", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060673509", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1045212838", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060663352", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060676472", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1044966137", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1009628601", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060829034", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1052394951", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060784903", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1027544400", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060673164", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060456070", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1012911939", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1034371240", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060676303", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1027226374", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1008243844", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060670095", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060674827", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060675924", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060483159", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060826447", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1038056243", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060674103", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1016118774", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1046879659", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060830663", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060829459", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060675215", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060779406", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1029374432", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1005494539", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1059079802", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1029628720", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1025880473", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1050237123", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1010219741", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060827277", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1031717969", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060822060", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1003227336", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1041079423", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1044040016", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1031979595", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1016849900", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1040632454", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060671138", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060674558", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060672803", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060673113", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1010717449", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1038868267", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1006850094", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1020621092", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1019398907", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060677000", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060504243", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1047654315", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1042457710", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1012266401", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1095903609", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060677032", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060675113", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1058105068", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060676176", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060673380", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1047766368", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1027179906", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1003371857", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060674055", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1030160495", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1012415680", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1044085245", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1098678954", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1000398384", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1049620203", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1047967799", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1006382259", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1027175597", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1002683374", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1012593191", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1024402227", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1004661064", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1026174138", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1059076097", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060672166", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060823477", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060433897", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1018025921", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1041760964", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1060839703", "target": "pub.1060677183", "attributes": {"year": 2010, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1060828109", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1050408744", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1003660203", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1040915357", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1022162692", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1060779458", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1015234386", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1053319957", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1060537812", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1018661537", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1042098123", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1020691468", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1036884583", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1040606030", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1060460126", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1060768363", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1040491531", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1021427310", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1019008412", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1025059126", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1060565149", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1052791836", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1034642959", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1045564126", "target": "pub.1021984958", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1028771859", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1036871640", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1043889955", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1022345746", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1041909998", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1060469716", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1098667582", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1031817672", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1060472631", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1016859474", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1040030659", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1018185342", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1000374332", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1035439165", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1025036962", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1006251427", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1019839012", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1032081451", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1060817691", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1029576577", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1098678329", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1008640012", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1015971387", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1042734315", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1030114288", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1031460804", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1040258398", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1011010598", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1026356533", "target": "pub.1007530657", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1025719832", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1021560322", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1031239487", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1042532118", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1028482838", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1004858858", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1004884918", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1032579586", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1059079802", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1060835107", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1011784856", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1024402227", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1007119461", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1006328423", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1045387337", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1026720084", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1059079470", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1016958841", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1023676200", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1016014950", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1049262570", "target": "pub.1014034141", "attributes": {"year": 2009, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1025719832", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1018345323", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1031239487", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1028482838", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1004858858", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1004884918", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1059079802", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1011784856", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1024402227", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1048347725", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1007119461", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1006328423", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1060504243", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1059079470", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1016958841", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1023676200", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1042764696", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1012266401", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1046878062", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1016014950", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1021560322", "target": "pub.1014034141", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1031239487", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1035159109", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1028482838", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1060795805", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1004858858", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1004884918", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1059079802", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1011658338", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1060485642", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1024402227", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1012593191", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1017078538", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1060504243", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1043798191", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1047753851", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1034618848", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1060784904", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1007803037", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1060521318", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1058101157", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1041165280", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1028928983", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1014034141", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1032579586", "target": "pub.1040675567", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1010960717", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1018345323", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1060501368", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1048139891", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1005427122", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1020033193", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1004858858", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1036551131", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1017238694", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1045736543", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1046510001", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1060618645", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1011658338", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1011784856", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1036114834", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1015937057", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1019645844", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1040003395", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1029816697", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1048347725", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1005256926", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1060480673", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1017078538", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1051523502", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1060674024", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1013466532", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1059078521", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1059079470", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1043798191", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1060787952", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1041985067", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1060533316", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1034601602", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1060622841", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1029635336", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1008096035", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1003804610", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1011664403", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1025472474", "target": "pub.1098905503", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1051277230", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1028784456", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1060461988", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1059076073", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1060829459", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1062129885", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1031239487", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1060828404", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1060795235", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1058105141", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1053030119", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1058050263", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1040846971", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1015885405", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1004858858", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1029398439", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1060659366", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1057848388", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1024348554", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1098678954", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1059079802", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1060839208", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1016981788", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1039276131", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1002878811", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1098707489", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1045515256", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1062243952", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1011658338", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1011784856", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1044880480", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1014462654", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1060485642", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1003831851", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1012593191", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1060487068", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1073294533", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1060475260", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1019398907", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1025311961", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1060775623", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1060675734", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1060658394", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1041734929", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1022456477", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1060661648", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1059079470", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1041985067", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1023676200", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1060728780", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1060784904", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1060533316", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1043138933", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1060793163", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1057914937", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1060450736", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1024981283", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1041165280", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1046878062", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1028928983", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1057869519", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1014034141", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1043779481", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1017315055", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1024402227", "target": "pub.1028237179", "attributes": {"year": 2008, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1060830365", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1011254661", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1062451106", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1060488555", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1060490443", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1018540897", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1008553636", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1057725655", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1038529836", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1018185342", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1028438151", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1006251427", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1048985306", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1062449295", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1060489764", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1060502016", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1045744782", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1062569382", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1030114288", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1040258398", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1041909998", "target": "pub.1039417623", "attributes": {"year": 2007, "level": "ref_l2"}}, {"source": "pub.1059079802", "target": "pub.1060659366", "attributes": {"year": 2006, "level": "ref_l2"}}, {"source": "pub.1059079802", "target": "pub.1004858858", "attributes": {"year": 2006, "level": "ref_l2"}}, {"source": "pub.1059079802", "target": "pub.1098678954", "attributes": {"year": 2006, "level": "ref_l2"}}, {"source": "pub.1059079802", "target": "pub.1024622720", "attributes": {"year": 2006, "level": "ref_l2"}}, {"source": "pub.1059079802", "target": "pub.1060825499", "attributes": {"year": 2006, "level": "ref_l2"}}, {"source": "pub.1059079802", "target": "pub.1059076073", "attributes": {"year": 2006, "level": "ref_l2"}}, {"source": "pub.1059079802", "target": "pub.1047753851", "attributes": {"year": 2006, "level": "ref_l2"}}, {"source": "pub.1059079802", "target": "pub.1060499774", "attributes": {"year": 2006, "level": "ref_l2"}}, {"source": "pub.1059079802", "target": "pub.1031239487", "attributes": {"year": 2006, "level": "ref_l2"}}, {"source": "pub.1059079802", "target": "pub.1044880480", "attributes": {"year": 2006, "level": "ref_l2"}}, {"source": "pub.1059079802", "target": "pub.1059079470", "attributes": {"year": 2006, "level": "ref_l2"}}, {"source": "pub.1059079802", "target": "pub.1036048855", "attributes": {"year": 2006, "level": "ref_l2"}}, {"source": "pub.1059079802", "target": "pub.1052561538", "attributes": {"year": 2006, "level": "ref_l2"}}, {"source": "pub.1059079802", "target": "pub.1044040016", "attributes": {"year": 2006, "level": "ref_l2"}}, {"source": "pub.1059079802", "target": "pub.1014034141", "attributes": {"year": 2006, "level": "ref_l2"}}, {"source": "pub.1059079802", "target": "pub.1060673895", "attributes": {"year": 2006, "level": "ref_l2"}}, {"source": "pub.1060831320", "target": "pub.1012195559", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1060831320", "target": "pub.1037993747", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1060831320", "target": "pub.1056046759", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1060831320", "target": "pub.1059076073", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1060831320", "target": "pub.1036372533", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1060831320", "target": "pub.1015283490", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1060831320", "target": "pub.1041037290", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1060831320", "target": "pub.1008979230", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1060831320", "target": "pub.1041047376", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1060831320", "target": "pub.1044001354", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1060831320", "target": "pub.1026690139", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1060831320", "target": "pub.1015885405", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1060831320", "target": "pub.1050860986", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1060459526", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1109710367", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1060660456", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1060660647", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1045736543", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1046510001", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1011658338", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1019645844", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1051459978", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1060827125", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1060483159", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1059079470", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1060787952", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1047654315", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1060728780", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1036176655", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1008096035", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1003804610", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1004858858", "target": "pub.1020895228", "attributes": {"year": 2005, "level": "ref_l2"}}, {"source": "pub.1008126854", "target": "pub.1060670095", "attributes": {"year": 2003, "level": "ref_l2"}}, {"source": "pub.1008126854", "target": "pub.1098678954", "attributes": {"year": 2003, "level": "ref_l2"}}, {"source": "pub.1008126854", "target": "pub.1026831915", "attributes": {"year": 2003, "level": "ref_l2"}}, {"source": "pub.1008126854", "target": "pub.1060825499", "attributes": {"year": 2003, "level": "ref_l2"}}, {"source": "pub.1008126854", "target": "pub.1012581556", "attributes": {"year": 2003, "level": "ref_l2"}}, {"source": "pub.1008126854", "target": "pub.1060658394", "attributes": {"year": 2003, "level": "ref_l2"}}, {"source": "pub.1008126854", "target": "pub.1060822060", "attributes": {"year": 2003, "level": "ref_l2"}}, {"source": "pub.1008126854", "target": "pub.1060803970", "attributes": {"year": 2003, "level": "ref_l2"}}, {"source": "pub.1008126854", "target": "pub.1034622526", "attributes": {"year": 2003, "level": "ref_l2"}}, {"source": "pub.1008126854", "target": "pub.1060839152", "attributes": {"year": 2003, "level": "ref_l2"}}, {"source": "pub.1008126854", "target": "pub.1060823476", "attributes": {"year": 2003, "level": "ref_l2"}}, {"source": "pub.1008126854", "target": "pub.1060673467", "attributes": {"year": 2003, "level": "ref_l2"}}, {"source": "pub.1008126854", "target": "pub.1027532833", "attributes": {"year": 2003, "level": "ref_l2"}}, {"source": "pub.1008126854", "target": "pub.1060784904", "attributes": {"year": 2003, "level": "ref_l2"}}, {"source": "pub.1008126854", "target": "pub.1060823818", "attributes": {"year": 2003, "level": "ref_l2"}}, {"source": "pub.1041856979", "target": "pub.1049572408", "attributes": {"year": 1998, "level": "ref_l2"}}, {"source": "pub.1041856979", "target": "pub.1057871482", "attributes": {"year": 1998, "level": "ref_l2"}}, {"source": "pub.1041856979", "target": "pub.1098954489", "attributes": {"year": 1998, "level": "ref_l2"}}, {"source": "pub.1059076073", "target": "pub.1024622720", "attributes": {"year": 1998, "level": "ref_l2"}}, {"source": "pub.1059076073", "target": "pub.1009964863", "attributes": {"year": 1998, "level": "ref_l2"}}, {"source": "pub.1059076073", "target": "pub.1016998557", "attributes": {"year": 1998, "level": "ref_l2"}}, {"source": "pub.1059076073", "target": "pub.1062243952", "attributes": {"year": 1998, "level": "ref_l2"}}, {"source": "pub.1059076073", "target": "pub.1041037290", "attributes": {"year": 1998, "level": "ref_l2"}}, {"source": "pub.1059076073", "target": "pub.1060449417", "attributes": {"year": 1998, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1025513050", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1060812291", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1059069031", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1060719599", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1060492396", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1057743676", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1030554440", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1000891726", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1053543950", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1017250213", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1007741542", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1059074985", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1043048933", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1060804542", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1060807676", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1018020267", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1060810429", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1054019943", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1042734315", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1043006827", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1014050295", "target": "pub.1043750288", "attributes": {"year": 1997, "level": "ref_l2"}}, {"source": "pub.1060810429", "target": "pub.1059110686", "attributes": {"year": 1995, "level": "ref_l2"}}, {"source": "pub.1060810429", "target": "pub.1060805930", "attributes": {"year": 1995, "level": "ref_l2"}}, {"source": "pub.1060810429", "target": "pub.1059110861", "attributes": {"year": 1995, "level": "ref_l2"}}, {"source": "pub.1060810429", "target": "pub.1060484658", "attributes": {"year": 1995, "level": "ref_l2"}}, {"source": "pub.1060810429", "target": "pub.1060465772", "attributes": {"year": 1995, "level": "ref_l2"}}, {"source": "pub.1060810429", "target": "pub.1060716833", "attributes": {"year": 1995, "level": "ref_l2"}}, {"source": "pub.1060810429", "target": "pub.1060716812", "attributes": {"year": 1995, "level": "ref_l2"}}, {"source": "pub.1060810429", "target": "pub.1053543950", "attributes": {"year": 1995, "level": "ref_l2"}}, {"source": "pub.1060810429", "target": "pub.1060807676", "attributes": {"year": 1995, "level": "ref_l2"}}, {"source": "pub.1060810429", "target": "pub.1055659331", "attributes": {"year": 1995, "level": "ref_l2"}}, {"source": "pub.1060810429", "target": "pub.1060495184", "attributes": {"year": 1995, "level": "ref_l2"}}, {"source": "pub.1060810429", "target": "pub.1017250213", "attributes": {"year": 1995, "level": "ref_l2"}}, {"source": "pub.1060810429", "target": "pub.1060804211", "attributes": {"year": 1995, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1064233019", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1025507234", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1035545882", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1057743676", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1005219864", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1059069771", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1031813736", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1030634392", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1059110762", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1031874509", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1060803392", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1057737242", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1059071127", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1060804542", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1060495184", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1010313486", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1059071180", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1060794819", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1060481738", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1042734315", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1064231130", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1017250213", "target": "pub.1064231079", "attributes": {"year": 1993, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1060801337", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1060794274", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1060477616", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1059069780", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1053498585", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1058956513", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1042659546", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1014168356", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1059070056", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1030828951", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1060483028", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1001349916", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1060478681", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1060790516", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1060800993", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1060475467", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1049940303", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1053543950", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1022719988", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1060783905", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1060803927", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1060800881", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1060787963", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1060793513", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1030444683", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1060482831", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1005432200", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1025337287", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1060797693", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1039185830", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1060799854", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1060485026", "target": "pub.1059070435", "attributes": {"year": 1992, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1060476171", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1059068080", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1059067283", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1059070056", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1058023149", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1060791387", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1034392770", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1043149560", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1060789626", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1059068352", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1060794457", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1039918636", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1051138084", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1010313486", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1052314442", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1034195309", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1016926995", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1064231011", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1059068122", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1042734315", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1064231130", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059069780", "target": "pub.1064231079", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059070056", "target": "pub.1058099888", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059070056", "target": "pub.1059069146", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059070056", "target": "pub.1011703040", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059070056", "target": "pub.1060789627", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059070056", "target": "pub.1042734315", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059070056", "target": "pub.1060788070", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059070056", "target": "pub.1034195309", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059070056", "target": "pub.1032128187", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059070056", "target": "pub.1039987654", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1059070056", "target": "pub.1004335462", "attributes": {"year": 1988, "level": "ref_l2"}}, {"source": "pub.1042734315", "target": "pub.1060789858", "attributes": {"year": 1987, "level": "ref_l2"}}, {"source": "pub.1042734315", "target": "pub.1059068352", "attributes": {"year": 1987, "level": "ref_l2"}}, {"source": "pub.1042734315", "target": "pub.1031874509", "attributes": {"year": 1987, "level": "ref_l2"}}, {"source": "pub.1042734315", "target": "pub.1022161412", "attributes": {"year": 1987, "level": "ref_l2"}}, {"source": "pub.1042734315", "target": "pub.1060787424", "attributes": {"year": 1987, "level": "ref_l2"}}, {"source": "pub.1042734315", "target": "pub.1030634392", "attributes": {"year": 1987, "level": "ref_l2"}}, {"source": "pub.1042734315", "target": "pub.1060793513", "attributes": {"year": 1987, "level": "ref_l2"}}, {"source": "pub.1042734315", "target": "pub.1060791387", "attributes": {"year": 1987, "level": "ref_l2"}}, {"source": "pub.1042734315", "target": "pub.1060465772", "attributes": {"year": 1987, "level": "ref_l2"}}, {"source": "pub.1042734315", "target": "pub.1060537632", "attributes": {"year": 1987, "level": "ref_l2"}}, {"source": "pub.1042734315", "target": "pub.1024772182", "attributes": {"year": 1987, "level": "ref_l2"}}, {"source": "pub.1042734315", "target": "pub.1060783526", "attributes": {"year": 1987, "level": "ref_l2"}}, {"source": "pub.1042734315", "target": "pub.1060473496", "attributes": {"year": 1987, "level": "ref_l2"}}, {"source": "pub.1042734315", "target": "pub.1060789643", "attributes": {"year": 1987, "level": "ref_l2"}}, {"source": "pub.1042734315", "target": "pub.1060784758", "attributes": {"year": 1987, "level": "ref_l2"}}, {"source": "pub.1042734315", "target": "pub.1060789626", "attributes": {"year": 1987, "level": "ref_l2"}}, {"source": "pub.1042734315", "target": "pub.1060495184", "attributes": {"year": 1987, "level": "ref_l2"}}, {"source": "pub.1042734315", "target": "pub.1057773719", "attributes": {"year": 1987, "level": "ref_l2"}}, {"source": "pub.1060500239", "target": "pub.1060449414", "attributes": {"year": 1973, "level": "ref_l2"}}, {"source": "pub.1060500239", "target": "pub.1019460196", "attributes": {"year": 1973, "level": "ref_l2"}}, {"source": "pub.1060500239", "target": "pub.1060450736", "attributes": {"year": 1973, "level": "ref_l2"}}, {"source": "pub.1060500239", "target": "pub.1060838726", "attributes": {"year": 1973, "level": "ref_l2"}}, {"source": "pub.1060500239", "target": "pub.1060416861", "attributes": {"year": 1973, "level": "ref_l2"}}, {"source": "pub.1060500239", "target": "pub.1057797824", "attributes": {"year": 1973, "level": "ref_l2"}}, {"source": "pub.1060500239", "target": "pub.1060489120", "attributes": {"year": 1973, "level": "ref_l2"}}, {"source": "pub.1060430850", "target": "pub.1060837536", "attributes": {"year": 1965, "level": "ref_l2"}}, {"source": "pub.1060430850", "target": "pub.1060429472", "attributes": {"year": 1965, "level": "ref_l2"}}, {"source": "pub.1060430850", "target": "pub.1026186494", "attributes": {"year": 1965, "level": "ref_l2"}}, {"source": "pub.1060430850", "target": "pub.1060416861", "attributes": {"year": 1965, "level": "ref_l2"}}, {"source": "pub.1060430850", "target": "pub.1060427420", "attributes": {"year": 1965, "level": "ref_l2"}}, {"source": "pub.1060430850", "target": "pub.1060416616", "attributes": {"year": 1965, "level": "ref_l2"}}, {"source": "pub.1060430850", "target": "pub.1060451198", "attributes": {"year": 1965, "level": "ref_l2"}}, {"source": "pub.1060430850", "target": "pub.1057791192", "attributes": {"year": 1965, "level": "ref_l2"}}, {"source": "pub.1060430850", "target": "pub.1060464038", "attributes": {"year": 1965, "level": "ref_l2"}}, {"source": "pub.1060430850", "target": "pub.1057789554", "attributes": {"year": 1965, "level": "ref_l2"}}, {"source": "pub.1060430850", "target": "pub.1060451040", "attributes": {"year": 1965, "level": "ref_l2"}}, {"source": "pub.1060430850", "target": "pub.1057796022", "attributes": {"year": 1965, "level": "ref_l2"}}, {"source": "pub.1060430850", "target": "pub.1057012353", "attributes": {"year": 1965, "level": "ref_l2"}}]} diff --git a/src/citationnet/media/data/prl.json b/src/citationnet/media/data/prl.json deleted file mode 100644 index 7715215..0000000 --- a/src/citationnet/media/data/prl.json +++ /dev/null @@ -1,48714 +0,0 @@ -{ - "nodes": [ - { - "id": "pub.1010926410", - "attributes": { - "title": "Quantum Criticality and Dynamical Instability in the Kicked-Top Model", - "doi": "10.1103/physrevlett.112.140408", - "nodeyear": 2014, - "ref-by-count": 48, - "is_input_DOI": true, - "category_for": "02:1.00", - "level": "ref_l1" - } - }, - { - "id": "pub.1144412825", - "attributes": { - "title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", - "doi": "10.21468/scipostphys.12.1.002", - "nodeyear": 2022, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1144210477", - "attributes": { - "title": "Impact of chaos on precursors of quantum criticality", - "doi": "10.1103/physreve.104.l062202", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1143466025", - "attributes": { - "title": "Stabilization of product states and excited-state quantum phase transitions in a coupled qubit-field system", - "doi": "10.1103/physreva.104.053722", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1144437177", - "attributes": { - "title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", - "doi": "10.21468/scipost.report.3588", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l1" - } - }, - { - "id": "pub.1141370501", - "attributes": { - "title": "Constant of Motion Identifying Excited-State Quantum Phases", - "doi": "10.1103/physrevlett.127.130602", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1141139712", - "attributes": { - "title": "Signatures of excited-state quantum phase transitions in quantum many-body systems: Phase space analysis", - "doi": "10.1103/physreve.104.034119", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1144432008", - "attributes": { - "title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", - "doi": "10.21468/scipost.report.3198", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l1" - } - }, - { - "id": "pub.1138795800", - "attributes": { - "title": "Interferometric Order Parameter for Excited-State Quantum Phase Transitions in Bose-Einstein Condensates", - "doi": "10.1103/physrevlett.126.230602", - "nodeyear": 2021, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1138581779", - "attributes": { - "title": "Continuum analogs of excited-state quantum phase transitions", - "doi": "10.1103/physreva.103.062207", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1144435924", - "attributes": { - "title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", - "doi": "10.21468/scipost.report.2932", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l1" - } - }, - { - "id": "pub.1136498164", - "attributes": { - "title": "Emergence of a Renormalized 1/N Expansion in Quenched Critical Many-Body Systems", - "doi": "10.1103/physrevlett.126.110602", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1134894421", - "attributes": { - "title": "Excited-state quantum phase transitions", - "doi": "10.1088/1751-8121/abdfe8", - "nodeyear": 2021, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1136299609", - "attributes": { - "title": "Characterizing the Lipkin-Meshkov-Glick model excited-state quantum phase transition using dynamical and statistical properties of the diagonal entropy", - "doi": "10.1103/physreve.103.032109", - "nodeyear": 2021, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1132677751", - "attributes": { - "title": "Excited state quantum phase transitions in the bending spectra of molecules", - "doi": "10.1016/j.jqsrt.2020.107436", - "nodeyear": 2021, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1129534483", - "attributes": { - "title": "Out-of-equilibrium phase transitions induced by Floquet resonances in a periodically quench-driven XY spin chain", - "doi": "10.21468/scipostphyscore.3.1.001", - "nodeyear": 2020, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1129066525", - "attributes": { - "title": "Complex Density of Continuum States in Resonant Quantum Tunneling", - "doi": "10.1103/physrevlett.125.020401", - "nodeyear": 2020, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "cite_l1" - } - }, - { - "id": "pub.1126263310", - "attributes": { - "title": "Classical and Quantum Signatures of Quantum Phase Transitions in a (Pseudo) Relativistic Many-Body System", - "doi": "10.3390/condmat5020026", - "nodeyear": 2020, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1121827528", - "attributes": { - "title": "Reversible Quantum Information Spreading in Many-Body Systems near Criticality", - "doi": "10.1103/physrevlett.123.160401", - "nodeyear": 2019, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1120642228", - "attributes": { - "title": "Manipulating transition of a two-component Bose\u2013Einstein condensate with a weak \u03b4-shaped laser*", - "doi": "10.1088/1674-1056/ab3e64", - "nodeyear": 2019, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1121123255", - "attributes": { - "title": "Digital quantum simulation, Trotter errors, and quantum chaos of the kicked top", - "doi": "10.1038/s41534-019-0192-5", - "nodeyear": 2019, - "ref-by-count": 32, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1120846773", - "attributes": { - "title": "Static vs. dynamic phases of quantum many-body systems", - "doi": "10.1063/1.5124589", - "nodeyear": 2019, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l1" - } - }, - { - "id": "pub.1120342145", - "attributes": { - "title": "Excited-state quantum phase transition and the quantum-speed-limit time", - "doi": "10.1103/physreva.100.022118", - "nodeyear": 2019, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1117411673", - "attributes": { - "title": "Excited-state quantum phase transitions in systems with two degrees of freedom. III. Interacting boson systems", - "doi": "10.1103/physrevc.99.064323", - "nodeyear": 2019, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1107951663", - "attributes": { - "title": "Floquet analysis of a fractal-spectrum-generating periodically driven quantum system", - "doi": "10.1103/physreve.98.042217", - "nodeyear": 2018, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1105752007", - "attributes": { - "title": "Quantum quench dynamics in Dicke superradiance models", - "doi": "10.1103/physreva.98.013836", - "nodeyear": 2018, - "ref-by-count": 30, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1099619049", - "attributes": { - "title": "Excited-state quantum phase transitions and their manifestations in an extended Dicke model", - "doi": "10.1063/1.5016143", - "nodeyear": 2017, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1092024589", - "attributes": { - "title": "Probing the excited-state quantum phase transition through statistics of Loschmidt echo and quantum work", - "doi": "10.1103/physreve.96.032142", - "nodeyear": 2017, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1090980852", - "attributes": { - "title": "Nonadiabatic dynamics of the excited states for the Lipkin-Meshkov-Glick model", - "doi": "10.1103/physreve.96.012153", - "nodeyear": 2017, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1090697089", - "attributes": { - "title": "From thermal to excited-state quantum phase transition: The Dicke model", - "doi": "10.1103/physreve.96.012121", - "nodeyear": 2017, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1085593414", - "attributes": { - "title": "Adiabatic perturbation theory and geometry of periodically-driven systems", - "doi": "10.1016/j.physrep.2017.05.003", - "nodeyear": 2017, - "ref-by-count": 68, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1059133328", - "attributes": { - "title": "Catastrophes in non-equilibrium many-particle wave functions: universality and critical scaling", - "doi": "10.1088/1361-6455/aa56af", - "nodeyear": 2017, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:0.60;03:0.40", - "level": "cite_l1" - } - }, - { - "id": "pub.1048482410", - "attributes": { - "title": "Dynamics and Characterization of Composite Quantum Systems", - "doi": "10.1007/978-3-319-44459-8", - "nodeyear": 2017, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1060766918", - "attributes": { - "title": "Driven Open Quantum Systems and Floquet Stroboscopic Dynamics", - "doi": "10.1103/physrevlett.117.250401", - "nodeyear": 2016, - "ref-by-count": 42, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1060750764", - "attributes": { - "title": "Excited-state quantum phase transitions in the two-spin elliptic Gaudin model", - "doi": "10.1103/physreve.94.052110", - "nodeyear": 2016, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1060516500", - "attributes": { - "title": "Excited-state quantum phase transition in the Rabi model", - "doi": "10.1103/physreva.94.023835", - "nodeyear": 2016, - "ref-by-count": 32, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1059005118", - "attributes": { - "title": "Quantum phase transitions in the collective degrees of freedom: nuclei and other many-body systems", - "doi": "10.1088/0031-8949/91/8/083006", - "nodeyear": 2016, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l1" - } - }, - { - "id": "pub.1060516111", - "attributes": { - "title": "Excited-state quantum phase transitions in many-body systems with infinite-range interaction: Localization, dynamics, and bifurcation", - "doi": "10.1103/physreva.94.012113", - "nodeyear": 2016, - "ref-by-count": 49, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1060680986", - "attributes": { - "title": "Excited-state quantum phase transitions in the interacting boson model: Spectral characteristics of 0+ states and effective order parameter", - "doi": "10.1103/physrevc.93.044302", - "nodeyear": 2016, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1060649865", - "attributes": { - "title": "Semiclassical excited-state signatures of quantum phase transitions in spin chains with variable-range interactions", - "doi": "10.1103/physrevb.93.155153", - "nodeyear": 2016, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1060514338", - "attributes": { - "title": "Structure of eigenstates and quench dynamics at an excited-state quantum phase transition", - "doi": "10.1103/physreva.92.050101", - "nodeyear": 2015, - "ref-by-count": 52, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1059004548", - "attributes": { - "title": "Excited-state quantum phase transitions in finite many-body systems", - "doi": "10.1088/0031-8949/90/11/114015", - "nodeyear": 2015, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l1" - } - }, - { - "id": "pub.1059136608", - "attributes": { - "title": "Time delayed control of excited state quantum phase transitions in the Lipkin\u2013Meshkov\u2013Glick model", - "doi": "10.1088/1367-2630/17/10/103031", - "nodeyear": 2015, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1010705109", - "attributes": { - "title": "Effective time-independent analysis for quantum kicked systems", - "doi": "10.1103/physreve.91.032923", - "nodeyear": 2015, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1032825147", - "attributes": { - "title": "Universal high-frequency behavior of periodically driven systems: from dynamical stabilization to Floquet engineering", - "doi": "10.1080/00018732.2015.1055918", - "nodeyear": 2015, - "ref-by-count": 574, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1036861519", - "attributes": { - "title": "Excited-state quantum phase transitions and periodic dynamics", - "doi": "10.1103/physreva.91.013631", - "nodeyear": 2015, - "ref-by-count": 35, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1039964510", - "attributes": { - "title": "Critical quasienergy states in driven many-body systems", - "doi": "10.1103/physreva.90.063628", - "nodeyear": 2014, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1003966050", - "attributes": { - "title": "Quantum phase transitions of atom-molecule Bose mixtures in a double-well potential", - "doi": "10.1103/physreve.90.042139", - "nodeyear": 2014, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1060512752", - "attributes": { - "title": "Nonlinear spectroscopy of trapped ions", - "doi": "10.1103/physreva.90.023603", - "nodeyear": 2014, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l1" - } - }, - { - "id": "pub.1145750437", - "attributes": { - "title": "Algebraic vibrational description of the symmetric isotopologues of CO2: 13 C 16 O2, 12 C 18 O2 and 12 C 17 O2", - "doi": "10.1016/j.chemphys.2022.111481", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1146014202", - "attributes": { - "title": "Dynamical relaxation of correlators in periodically driven integrable quantum systems", - "doi": "10.1103/physrevb.105.104303", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1145897843", - "attributes": { - "title": "Periodically driven perturbed CFTs: The sine-Gordon model", - "doi": "10.1016/j.nuclphysb.2022.115717", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:0.60;01:0.40", - "level": "cite_l2" - } - }, - { - "id": "pub.1145440026", - "attributes": { - "title": "Effective Gaps in Continuous Floquet Hamiltonians", - "doi": "10.1137/21m1417363", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145430770", - "attributes": { - "title": "Arnoldi-Lindblad time evolution: Faster-than-the-clock algorithm for the spectrum of time-independent and Floquet open quantum systems", - "doi": "10.22331/q-2022-02-10-649", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145506720", - "attributes": { - "title": "Identification of quantum scars via phase-space localization measures", - "doi": "10.22331/q-2022-02-08-644", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145372424", - "attributes": { - "title": "Bicircular Light Floquet Engineering of Magnetic Symmetry and Topology and Its Application to the Dirac Semimetal Cd3As2", - "doi": "10.1103/physrevlett.128.066602", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145280638", - "attributes": { - "title": "Heating Rates under Fast Periodic Driving beyond Linear Response", - "doi": "10.1103/physrevlett.128.050604", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145273436", - "attributes": { - "title": "Observation of Photonic Topological Floquet Time Crystals", - "doi": "10.1002/lpor.202100469", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145213934", - "attributes": { - "title": "Dissipative Floquet Dynamics: from Steady State to Measurement Induced Criticality in Trapped-ion Chains", - "doi": "10.22331/q-2022-02-02-638", - "nodeyear": 2022, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145849886", - "attributes": { - "title": "Inverted many-body mobility edge in a central qudit problem", - "doi": "10.1103/physrevb.105.l060303", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145849842", - "attributes": { - "title": "PT phase transition in open quantum systems with Lindblad dynamics", - "doi": "10.1103/physreva.105.022219", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145823845", - "attributes": { - "title": "Comparing the influence of Floquet dynamics in various Kitaev-Heisenberg materials", - "doi": "10.1103/physrevb.105.085144", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145788811", - "attributes": { - "title": "Harmonic dual dressing of spin-1/2 systems", - "doi": "10.1103/physreva.105.022619", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145754902", - "attributes": { - "title": "Stroboscopic Hamiltonian engineering in the low-frequency regime with a one-dimensional quantum processor", - "doi": "10.1103/physrevb.105.075140", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145754886", - "attributes": { - "title": "Driven Hubbard model on a triangular lattice: Tunable Heisenberg antiferromagnet with a chiral three-spin term", - "doi": "10.1103/physrevb.105.054423", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145754849", - "attributes": { - "title": "Relativistic meson spectra on ion-trap quantum simulators", - "doi": "10.1103/physreva.105.022616", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145754842", - "attributes": { - "title": "Dynamical localization in non-Hermitian quasicrystals", - "doi": "10.1103/physreva.105.022215", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145668053", - "attributes": { - "title": "Drive-induced nonlinearities of cavity modes coupled to a transmon ancilla", - "doi": "10.1103/physreva.105.022423", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145636450", - "attributes": { - "title": "Crosstalk analysis for simultaneously driven two-qubit gates in spin qubit arrays", - "doi": "10.1103/physrevb.105.085414", - "nodeyear": 2022, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145438375", - "attributes": { - "title": "Caustics in quantum many-body dynamics", - "doi": "10.1103/physrevresearch.4.013105", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145407409", - "attributes": { - "title": "Fermionic Chern insulator from twisted light with linear polarization", - "doi": "10.1103/physrevb.105.l081406", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145168134", - "attributes": { - "title": "Weyl nodes with higher-order topology in an optically driven nodal-line semimetal", - "doi": "10.1103/physrevb.105.l081102", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144652253", - "attributes": { - "title": "Chaos in a deformed Dicke model", - "doi": "10.1088/1751-8121/ac4b16", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145404710", - "attributes": { - "title": "Topological d -wave superconductivity in two dimensions", - "doi": "10.1016/j.physe.2022.115143", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145130056", - "attributes": { - "title": "Quantum transitions, ergodicity, and quantum scars in the coupled top model", - "doi": "10.1103/physreve.105.014130", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144504433", - "attributes": { - "title": "Floquet band engineering and topological phase transitions in 1T\u2019 transition metal dichalcogenides", - "doi": "10.1088/2053-1583/ac4957", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145011775", - "attributes": { - "title": "Strain and pseudo-magnetic fields in optical lattices from density-assisted tunneling", - "doi": "10.1038/s42005-022-00802-9", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145032383", - "attributes": { - "title": "The Classical\u2013Quantum Passage: A van der Waals Description", - "doi": "10.3390/e24020182", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144661259", - "attributes": { - "title": "Out-of-equilibrium dynamics of the XY spin chain from form factor expansion", - "doi": "10.21468/scipostphys.12.1.019", - "nodeyear": 2022, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1144431665", - "attributes": { - "title": "Crystallization of bosonic quantum Hall states in a rotating quantum gas", - "doi": "10.1038/s41586-021-04170-2", - "nodeyear": 2022, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144412825", - "attributes": { - "title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", - "doi": "10.21468/scipostphys.12.1.002", - "nodeyear": 2022, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1146014238", - "attributes": { - "title": "Absence of Heating in a Uniform Fermi Gas Created by Periodic Driving", - "doi": "10.1103/physrevx.12.011041", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145130013", - "attributes": { - "title": "Generalized model for the charge transport properties of dressed quantum Hall systems", - "doi": "10.1103/physrevb.105.035430", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145077099", - "attributes": { - "title": "Detecting light-induced Floquet band gaps of graphene via trARPES", - "doi": "10.1103/physrevresearch.4.013057", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145077057", - "attributes": { - "title": "Demonstrating Majorana non-Abelian properties using fast adiabatic charge transfer", - "doi": "10.1103/physrevb.105.045425", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145042826", - "attributes": { - "title": "Probing Many-Body Quantum Chaos with Quantum Simulators", - "doi": "10.1103/physrevx.12.011018", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145016796", - "attributes": { - "title": "Topological micromotion of Floquet quantum systems", - "doi": "10.1103/physrevb.105.045139", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1144825837", - "attributes": { - "title": "Information retrieval and eigenstate coalescence in a non-Hermitian quantum system with anti-PT symmetry", - "doi": "10.1103/physreva.105.l010204", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144625101", - "attributes": { - "title": "Enhancing energy transfer in quantum systems via periodic driving: Floquet master equations", - "doi": "10.1103/physreva.105.012208", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144504676", - "attributes": { - "title": "Analytic expression for the optical exciton transition rates in the polaron frame", - "doi": "10.1103/physrevb.105.014302", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144370522", - "attributes": { - "title": "Signatures of multifractality in a periodically driven interacting Aubry-Andr\u00e9 model", - "doi": "10.1103/physrevb.105.024301", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1144370491", - "attributes": { - "title": "Flow-equation approach to quantum systems driven by an amplitude-modulated time-periodic force", - "doi": "10.1103/physreva.105.012203", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1145001907", - "attributes": { - "title": "Nature", - "doi": "10.1038/nde/00280836/2022/601/7894", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1144437688", - "attributes": { - "title": "Nature", - "doi": "10.1038/nde/00280836/2022/601/7891", - "nodeyear": 2022, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1143938533", - "attributes": { - "title": "Assessment of weak-coupling approximations on a driven two-level system under dissipation", - "doi": "10.1088/1367-2630/ac43ee", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144267107", - "attributes": { - "title": "Quantum Simulation of Open Quantum Systems Using a Unitary Decomposition of Operators", - "doi": "10.1103/physrevlett.127.270503", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144237217", - "attributes": { - "title": "Localization and spin dynamics of spin-orbit-coupled Bose-Einstein condensates in deep optical lattices", - "doi": "10.1103/physreve.104.064215", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144210477", - "attributes": { - "title": "Impact of chaos on precursors of quantum criticality", - "doi": "10.1103/physreve.104.l062202", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144176750", - "attributes": { - "title": "Nonequilibrium steady states in the Floquet-Lindblad systems: van Vleck's high-frequency expansion approach", - "doi": "10.21468/scipostphyscore.4.4.033", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1144500315", - "attributes": { - "title": "Quantum dynamics research in India: a perspective", - "doi": "10.1088/1361-648x/ac410a", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144112210", - "attributes": { - "title": "Quantum Fisher Information from Randomized Measurements", - "doi": "10.1103/physrevlett.127.260501", - "nodeyear": 2021, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144057503", - "attributes": { - "title": "Energy diffusion and prethermalization in chaotic billiards under rapid periodic driving", - "doi": "10.1103/physreve.104.064210", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1143844860", - "attributes": { - "title": "Avoided crossings and dynamical tunneling close to excited-state quantum phase transitions", - "doi": "10.1103/physreve.104.064116", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1143777724", - "attributes": { - "title": "Gravitational caustics in an atom laser", - "doi": "10.1038/s41467-021-27555-3", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1143745319", - "attributes": { - "title": "Dynamic synthesis of Heisenberg-limited spin squeezing", - "doi": "10.1038/s41534-021-00505-z", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1143725448", - "attributes": { - "title": "Quantum thermal machines and batteries", - "doi": "10.1140/epjb/s10051-021-00235-3", - "nodeyear": 2021, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144210501", - "attributes": { - "title": "Excited-state quantum phase transitions in spin-orbit-coupled Bose gases", - "doi": "10.1103/physrevresearch.3.043215", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144115960", - "attributes": { - "title": "Bound state dynamics in the long-range spin-12 XXZ model", - "doi": "10.1103/physrevb.104.214309", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144115499", - "attributes": { - "title": "Direct driving of electronic and phononic degrees of freedom in a honeycomb bilayer with infrared light", - "doi": "10.1103/physrevb.104.245135", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1143939848", - "attributes": { - "title": "Frequency dependence of the light-induced Hall effect in dissipative graphene", - "doi": "10.1103/physrevb.104.224305", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1143844418", - "attributes": { - "title": "Engineering of topological phases in driven thin topological insulators: Structure inversion asymmetry effect", - "doi": "10.1103/physrevb.104.245121", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1143724565", - "attributes": { - "title": "Polarization-dependent magnetic properties of periodically driven \u03b1-RuCl3", - "doi": "10.1103/physrevb.104.214413", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1136420764", - "attributes": { - "title": "Low-frequency and Moir\u00e9 Floquet engineering: A review", - "doi": "10.1016/j.aop.2021.168434", - "nodeyear": 2021, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1143455107", - "attributes": { - "title": "Time-crystalline eigenstate order on a quantum processor", - "doi": "10.1038/s41586-021-04257-w", - "nodeyear": 2021, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1142733768", - "attributes": { - "title": "A thermodynamic probe of the topological phase transition in epitaxial graphene based Floquet topological insulator", - "doi": "10.1063/5.0071224", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1143320265", - "attributes": { - "title": "Instability of holographic superfluids in optical lattice", - "doi": "10.1007/jhep11(2021)190", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1142441911", - "attributes": { - "title": "Light-induced emergent phenomena in 2D materials and topological materials", - "doi": "10.1038/s42254-021-00388-1", - "nodeyear": 2021, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1142441613", - "attributes": { - "title": "Dynamical obstruction to localization in a disordered spin chain", - "doi": "10.1103/physreve.104.054105", - "nodeyear": 2021, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1142424779", - "attributes": { - "title": "Long Time Behaviour of a Local Perturbation in the Isotropic XY Chain Under Periodic Forcing", - "doi": "10.1007/s00023-021-01128-y", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1143466025", - "attributes": { - "title": "Stabilization of product states and excited-state quantum phase transitions in a coupled qubit-field system", - "doi": "10.1103/physreva.104.053722", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1143042212", - "attributes": { - "title": "Coarse-graining master equation for periodically driven systems", - "doi": "10.1103/physreva.104.052219", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1142911413", - "attributes": { - "title": "Floquet engineering and nonequilibrium topological maps in twisted trilayer graphene", - "doi": "10.1103/physrevb.104.195429", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1142728786", - "attributes": { - "title": "Time-domain Landau-Zener-St\u00fcckelberg-Majorana interference in an optical lattice clock", - "doi": "10.1103/physreva.104.053318", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1142661877", - "attributes": { - "title": "Light-induced electron pairing in two-dimensional systems", - "doi": "10.1088/1742-6596/2015/1/012062", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1142589015", - "attributes": { - "title": "Floquet graphene antidot lattices", - "doi": "10.1103/physrevb.104.174304", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1142577463", - "attributes": { - "title": "Production of 87Rb Bose-Einstein Condensate in an Asymmetric Crossed Optical Dipole TrapSupported by the Key-Area Research and Development Program of Guangdong Province, China (Grant No. 2019B030330001), the National Natural Science Foundation of China (Grant Nos. 12025509 and 11874434), the Science and Technology Program of Guangzhou, China (Grant Nos. 201904020024 and 201804010497), the Natural Science Foundation of Guangdong Province, China (Grant No. 2018A030313988), and the Fundamental Research Funds for the Central Universities (Grant No. 2021qntd28).", - "doi": "10.1088/0256-307x/38/10/103701", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1142435873", - "attributes": { - "title": "Success of digital adiabatic simulation with large Trotter step", - "doi": "10.1103/physreva.104.052603", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1142330688", - "attributes": { - "title": "Two-level systems with periodic N-step driving fields: Exact dynamics and quantum state manipulations", - "doi": "10.1103/physreva.104.053101", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140972911", - "attributes": { - "title": "Coherent and dissipative dynamics at quantum phase transitions", - "doi": "10.1016/j.physrep.2021.08.003", - "nodeyear": 2021, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1139312982", - "attributes": { - "title": "Quantum phase transitions in algebraic and collective models of nuclear structure", - "doi": "10.1016/j.ppnp.2021.103891", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1143151380", - "attributes": { - "title": "Electrodynamics of Topologically Ordered Quantum Phases in Dirac Materials", - "doi": "10.3390/nano11112914", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "09:0.50;10:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1141523252", - "attributes": { - "title": "Floquet engineering of electric polarization with two-frequency drive", - "doi": "10.1093/ptep/ptab127", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1142019154", - "attributes": { - "title": "Floquet Prethermalization with Lifetime Exceeding 90 s in a Bulk Hyperpolarized Solid", - "doi": "10.1103/physrevlett.127.170603", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141572181", - "attributes": { - "title": "Optically induced hybrid Bose-Fermi system in quantum wells with different charge carriers.", - "doi": "10.1364/ol.431079", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1142000959", - "attributes": { - "title": "Quantum-classical correspondence of a system of interacting bosons in a triple-well potential", - "doi": "10.22331/q-2021-10-19-563", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141928574", - "attributes": { - "title": "Multifractality in Quasienergy Space of Coherent States as a Signature of Quantum Chaos", - "doi": "10.3390/e23101347", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141852620", - "attributes": { - "title": "Quasiperiodic Floquet-Thouless Energy Pump", - "doi": "10.1103/physrevlett.127.166804", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141763682", - "attributes": { - "title": "Quantum Speed Limit Time of a Two-Level Atom under Homodyne-Mediated Feedback and Classical Driving", - "doi": "10.1007/s10773-021-04964-0", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144433670", - "attributes": { - "title": "Nonequilibrium steady states in the Floquet-Lindblad systems: van Vleck's high-frequency expansion approach", - "doi": "10.21468/scipost.report.3630", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1141641422", - "attributes": { - "title": "Quantum simulation of cosmic inflation", - "doi": "10.1103/physrevd.104.086013", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141277687", - "attributes": { - "title": "Optically induced Kondo effect in semiconductor quantum wells", - "doi": "10.1088/1361-648x/ac28c2", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1142252018", - "attributes": { - "title": "Ladder of Loschmidt anomalies in the deep strong-coupling regime of a qubit-oscillator system", - "doi": "10.1103/physreva.104.043712", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1142248564", - "attributes": { - "title": "Spin-wave growth via Shapiro resonances in a spinor Bose-Einstein condensate", - "doi": "10.1103/physrevresearch.3.043090", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141918917", - "attributes": { - "title": "High-frequency expansions for time-periodic Lindblad generators", - "doi": "10.1103/physrevb.104.165414", - "nodeyear": 2021, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141918911", - "attributes": { - "title": "Fermi's golden rule for heating in strongly driven Floquet systems", - "doi": "10.1103/physrevb.104.134308", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141886712", - "attributes": { - "title": "Colloquium: Nonthermal pathways to ultrafast control in quantum materials", - "doi": "10.1103/revmodphys.93.041002", - "nodeyear": 2021, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141886629", - "attributes": { - "title": "False signals of chaos from quantum probes", - "doi": "10.1103/physreva.104.043308", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141793655", - "attributes": { - "title": "Non-Abelian statistics in light-scattering processes across interacting Haldane chains", - "doi": "10.1103/physrevb.104.165118", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141423415", - "attributes": { - "title": "Optimal building block of multipartite quantum battery in the driven-dissipative charging", - "doi": "10.1088/1367-2630/ac2a5b", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144437177", - "attributes": { - "title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", - "doi": "10.21468/scipost.report.3588", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1141424092", - "attributes": { - "title": "Floquet Phases of Matter via Classical Prethermalization", - "doi": "10.1103/physrevlett.127.140603", - "nodeyear": 2021, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141081318", - "attributes": { - "title": "Global quantum discord in the Lipkin\u2013Meshkov\u2013Glick model at zero and finite temperatures", - "doi": "10.1088/1361-648x/ac2647", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141370501", - "attributes": { - "title": "Constant of Motion Identifying Excited-State Quantum Phases", - "doi": "10.1103/physrevlett.127.130602", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141198298", - "attributes": { - "title": "Bulk Photovoltaic Effect Driven by Collective Excitations in a Correlated Insulator", - "doi": "10.1103/physrevlett.127.127402", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141139712", - "attributes": { - "title": "Signatures of excited-state quantum phase transitions in quantum many-body systems: Phase space analysis", - "doi": "10.1103/physreve.104.034119", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141117728", - "attributes": { - "title": "Floquet Theory of Photoinduced Topological Phase Transitions in the Organic Salt \u03b1-(BEDT-TTF)2I3 Irradiated with Elliptically Polarized Light", - "doi": "10.7566/jpsj.90.104705", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1141039563", - "attributes": { - "title": "Optical Indistinguishability via Twinning Fields", - "doi": "10.1103/physrevlett.127.113201", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141039539", - "attributes": { - "title": "Thermalization processes induced by quantum monitoring in multilevel systems", - "doi": "10.1103/physreve.104.034114", - "nodeyear": 2021, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141007405", - "attributes": { - "title": "Reinforcement Learning for Digital Quantum Simulation", - "doi": "10.1103/physrevlett.127.110502", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140992787", - "attributes": { - "title": "Floquet prethermalization and Rabi oscillations in optically excited Hubbard clusters", - "doi": "10.1038/s41598-021-97104-x", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140946090", - "attributes": { - "title": "Fast driven quantum systems: interaction picture and boundary conditions", - "doi": "10.1088/1402-4896/ac2184", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140903868", - "attributes": { - "title": "Electronic Floquet gyro-liquid crystal", - "doi": "10.1038/s41467-021-25511-9", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144436951", - "attributes": { - "title": "Nonequilibrium steady states in the Floquet-Lindblad systems: van Vleck's high-frequency expansion approach", - "doi": "10.21468/scipost.report.3482", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1141458068", - "attributes": { - "title": "Floquet vacuum engineering: Laser-driven chiral soliton lattice in the QCD vacuum", - "doi": "10.1103/physrevd.104.054041", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141330553", - "attributes": { - "title": "Using optical conductivity to detect the underlying metallic edge state in the interacting Haldane model", - "doi": "10.1103/physrevb.104.115146", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141330548", - "attributes": { - "title": "Dynamical preparation of stripe states in spin-orbit-coupled gases", - "doi": "10.1103/physreva.104.l031305", - "nodeyear": 2021, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141082269", - "attributes": { - "title": "Emergent eigenstate solution for generalized thermalization", - "doi": "10.1103/physreva.104.l031303", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141082265", - "attributes": { - "title": "Impurity-induced quantum chaos for an ultracold bosonic ensemble in a double well", - "doi": "10.1103/physreva.104.033315", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140946998", - "attributes": { - "title": "Decoherence-free radio-frequency-dressed subspaces", - "doi": "10.1103/physreva.104.033307", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140875048", - "attributes": { - "title": "Direct and ultrafast probing of quantum many-body interactions through coherent two-dimensional spectroscopy: From weak- to strong-interaction regimes", - "doi": "10.1103/physrevb.104.115105", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140813822", - "attributes": { - "title": "Nonadiabatic evolution and thermodynamics of a time-dependent open quantum system", - "doi": "10.1103/physreva.104.032201", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1139687004", - "attributes": { - "title": "Ergodicity breaking in an incommensurate system observed by OTOCs and loschmidt echoes: From quantum diffusion to sub-diffusion", - "doi": "10.1016/j.chaos.2021.111175", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "08:0.33;01:0.33;09:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1140631120", - "attributes": { - "title": "Statistical Floquet prethermalization of the Bose-Hubbard model", - "doi": "10.21468/scipostphys.11.2.040", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1140376339", - "attributes": { - "title": "Tailoring quantum gases by Floquet engineering", - "doi": "10.1038/s41567-021-01316-x", - "nodeyear": 2021, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140327645", - "attributes": { - "title": "Flow equations for disordered Floquet systems", - "doi": "10.21468/scipostphys.11.2.028", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1140210127", - "attributes": { - "title": "Anomalous photo-thermal effects in multi-layered semi-Dirac black phosphorus", - "doi": "10.1063/5.0056116", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140251168", - "attributes": { - "title": "Analytic approaches to periodically driven closed quantum systems: methods and applications", - "doi": "10.1088/1361-648x/ac1b61", - "nodeyear": 2021, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:0.33;09:0.33;10:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1140149233", - "attributes": { - "title": "Polynomial filter diagonalization of large Floquet unitary operators", - "doi": "10.21468/scipostphys.11.2.021", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1140780393", - "attributes": { - "title": "Dynamics of fluctuation correlation in a periodically driven classical system", - "doi": "10.1103/physrevb.104.075161", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140748154", - "attributes": { - "title": "Identifying and harnessing dynamical phase transitions for quantum-enhanced sensing", - "doi": "10.1103/physrevresearch.3.033199", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140595261", - "attributes": { - "title": "Floquet engineering of topological localization transitions and mobility edges in one-dimensional non-Hermitian quasicrystals", - "doi": "10.1103/physrevresearch.3.033184", - "nodeyear": 2021, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "08:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140595176", - "attributes": { - "title": "Criticality-enhanced quantum sensor at finite temperature", - "doi": "10.1103/physreva.104.022612", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140449264", - "attributes": { - "title": "Light-matter coupling and quantum geometry in moir\u00e9 materials", - "doi": "10.1103/physrevb.104.064306", - "nodeyear": 2021, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140411348", - "attributes": { - "title": "Real-time dynamics of the photoinduced topological state in the organic conductor \u03b1-(BEDT-TTF)2I3 under continuous-wave and pulse excitations", - "doi": "10.1103/physrevb.104.085123", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140385244", - "attributes": { - "title": "Effect of chaos on the simulation of quantum critical phenomena in analog quantum simulators", - "doi": "10.1103/physrevresearch.3.033145", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140343664", - "attributes": { - "title": "Flow Equations for Disordered Floquet Systems", - "doi": "10.21468/scipost.report.3287", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1139432247", - "attributes": { - "title": "Driven quantum many-body systems and out-of-equilibrium topology.", - "doi": "10.1088/1361-648x/ac1151", - "nodeyear": 2021, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:0.33;09:0.33;10:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1139715974", - "attributes": { - "title": "The Renewed Role of Sweep Functions in Noisy Shortcuts to Adiabaticity", - "doi": "10.3390/e23070897", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1139696368", - "attributes": { - "title": "Novel characterization of dopant-based qubits", - "doi": "10.1557/s43577-021-00136-x", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "09:0.60;03:0.40", - "level": "cite_l2" - } - }, - { - "id": "pub.1139686944", - "attributes": { - "title": "Riemann zeros from Floquet engineering a trapped-ion qubit", - "doi": "10.1038/s41534-021-00446-7", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1137941137", - "attributes": { - "title": "Unsupervised machine learning of topological phase transitions from experimental data", - "doi": "10.1088/2632-2153/abffe7", - "nodeyear": 2021, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "08:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144432008", - "attributes": { - "title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", - "doi": "10.21468/scipost.report.3198", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1139359212", - "attributes": { - "title": "Non-Markovian Speedup Dynamics in Markovian and Non-Markovian Channels", - "doi": "10.1007/s10773-021-04885-y", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1141244634", - "attributes": { - "title": "Signatures of Quantum Phase Transitions after Quenches in Quantum Chaotic One-Dimensional Systems", - "doi": "10.1103/physrevx.11.031062", - "nodeyear": 2021, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140043181", - "attributes": { - "title": "Nonlinear optical processes in cavity light-matter systems", - "doi": "10.1103/physrevb.104.035209", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1139809449", - "attributes": { - "title": "Crosstalk analysis for single-qubit and two-qubit gates in spin qubit arrays", - "doi": "10.1103/physrevb.104.045420", - "nodeyear": 2021, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1139809443", - "attributes": { - "title": "From nonequilibrium Green's functions to quantum master equations for the density matrix and out-of-time-order correlators: Steady-state and adiabatic dynamics", - "doi": "10.1103/physrevb.104.035425", - "nodeyear": 2021, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1139801116", - "attributes": { - "title": "Control of superexchange interactions with DC electric fields", - "doi": "10.1103/physrevresearch.3.033066", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1139365607", - "attributes": { - "title": "Error-resilient Floquet geometric quantum computation", - "doi": "10.1103/physrevresearch.3.033010", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "08:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1139320696", - "attributes": { - "title": "Rabi Spectroscopy and Sensitivity of a Floquet Engineered Optical Lattice Clock", - "doi": "10.1088/0256-307x/38/7/073201", - "nodeyear": 2021, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1139210985", - "attributes": { - "title": "Gauge\u2010Induced Floquet Topological States in Photonic Waveguides", - "doi": "10.1002/lpor.202000584", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1139155188", - "attributes": { - "title": "Oscillating states of periodically driven anharmonic Langevin systems", - "doi": "10.1103/physreve.103.062143", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1139098613", - "attributes": { - "title": "Quantum Simulation of Three-Body Interactions in Weakly Driven Quantum Systems", - "doi": "10.1103/physrevlett.126.250504", - "nodeyear": 2021, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1138795800", - "attributes": { - "title": "Interferometric Order Parameter for Excited-State Quantum Phase Transitions in Bose-Einstein Condensates", - "doi": "10.1103/physrevlett.126.230602", - "nodeyear": 2021, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1138695988", - "attributes": { - "title": "Simulating Hydrodynamics on Noisy Intermediate-Scale Quantum Devices with Random Circuits", - "doi": "10.1103/physrevlett.126.230501", - "nodeyear": 2021, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1139212437", - "attributes": { - "title": "Floquet engineering ultracold polar molecules to simulate topological insulators", - "doi": "10.1103/physreva.103.063322", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1138955510", - "attributes": { - "title": "Quantum coherence as a signature of chaos", - "doi": "10.1103/physrevresearch.3.023214", - "nodeyear": 2021, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1138886959", - "attributes": { - "title": "Information scrambling and chaos in open quantum systems", - "doi": "10.1103/physreva.103.062214", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1138581779", - "attributes": { - "title": "Continuum analogs of excited-state quantum phase transitions", - "doi": "10.1103/physreva.103.062207", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1137877758", - "attributes": { - "title": "Avoided level crossings in quasi-exact approach", - "doi": "10.1016/j.nuclphysb.2021.115431", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1138289216", - "attributes": { - "title": "Topological Hall Effects of Magnons in Ferrimagnets", - "doi": "10.7566/jpsj.90.081004", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1141651369", - "attributes": { - "title": "One-Way Edge Modes Induced by Synthetic Magnetic Field in Time-Varying LC Circuit", - "doi": "10.1109/icee52715.2021.9544271", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1138216900", - "attributes": { - "title": "Conformal Floquet dynamics with a continuous drive protocol", - "doi": "10.1007/jhep05(2021)172", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1138186330", - "attributes": { - "title": "Quantum localization measures in phase space", - "doi": "10.1103/physreve.103.052214", - "nodeyear": 2021, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144435924", - "attributes": { - "title": "Quantum fidelity susceptibility in excited state quantum phase transitions: application to the bending spectra of nonrigid molecules", - "doi": "10.21468/scipost.report.2932", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1138114367", - "attributes": { - "title": "Nonlinear dynamics and quantum chaos of a family of kicked p-spin models", - "doi": "10.1103/physreve.103.052212", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1138249357", - "attributes": { - "title": "Mobility edge and multifractality in a periodically driven Aubry-Andr\u00e9 model", - "doi": "10.1103/physrevb.103.184309", - "nodeyear": 2021, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1138186281", - "attributes": { - "title": "Valley-selective Floquet Chern flat bands in twisted multilayer graphene", - "doi": "10.1103/physrevb.103.195146", - "nodeyear": 2021, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1138114325", - "attributes": { - "title": "Light-induced topological phases in thin films of magnetically doped topological insulators", - "doi": "10.1103/physrevb.103.205130", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1137890988", - "attributes": { - "title": "Quantum geometric tensor and quantum phase transitions in the Lipkin-Meshkov-Glick model", - "doi": "10.1103/physrevb.103.174104", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1137773392", - "attributes": { - "title": "Quantizing L\u00e9vy flights", - "doi": "10.1103/physrevb.103.174301", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1134453264", - "attributes": { - "title": "Effective Hamiltonian of the Jaynes\u2013Cummings model beyond rotating-wave approximation*", - "doi": "10.1088/1674-1056/abd930", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1137261348", - "attributes": { - "title": "Out-of-time-ordered correlators and the Loschmidt echo in the quantum kicked top: how low can we go?", - "doi": "10.1088/1361-6463/abf8f3", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1137484959", - "attributes": { - "title": "Low rank compression in the numerical solution of the nonequilibrium Dyson equation", - "doi": "10.21468/scipostphys.10.4.091", - "nodeyear": 2021, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1137437656", - "attributes": { - "title": "Isocyanic acid (HNCO) in the hot molecular core G331.512-0.103: observations and chemical modelling", - "doi": "10.1093/mnras/stab1163", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1136592478", - "attributes": { - "title": "Out of equilibrium chiral higher order topological insulator on a \u03c0 -flux square lattice", - "doi": "10.1088/1361-648x/abf0c3", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:0.33;09:0.33;10:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1137167395", - "attributes": { - "title": "Mechanism of periodic field driven self-assembly process", - "doi": "10.1063/5.0048072", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1137494538", - "attributes": { - "title": "Prethermalization and thermalization in periodically driven many-body systems away from the high-frequency limit", - "doi": "10.1103/physrevb.103.l140302", - "nodeyear": 2021, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1137491775", - "attributes": { - "title": "Thermalization and prethermalization in periodically kicked quantum spin chains", - "doi": "10.1103/physrevb.103.144307", - "nodeyear": 2021, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1137490808", - "attributes": { - "title": "Floquet engineering of continuous-time quantum walks: Toward the simulation of complex and next-nearest-neighbor couplings", - "doi": "10.1103/physreva.103.042219", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1137410827", - "attributes": { - "title": "Quantum supremacy and quantum phase transitions", - "doi": "10.1103/physrevb.103.165132", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1137311787", - "attributes": { - "title": "Quantum quench in a driven Ising chain", - "doi": "10.1103/physrevb.103.l140407", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1137235025", - "attributes": { - "title": "Quantum operator growth bounds for kicked tops and semiclassical spin chains", - "doi": "10.1103/physreva.103.042414", - "nodeyear": 2021, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1137168785", - "attributes": { - "title": "Dynamical transitions in aperiodically kicked tight-binding models", - "doi": "10.1103/physrevb.103.134303", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1137035608", - "attributes": { - "title": "Controlling directed atomic motion and second-order tunneling of a spin-orbit-coupled atom in optical lattices", - "doi": "10.1103/physreva.103.043315", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1136994042", - "attributes": { - "title": "Dynamical Freezing and Scar Points in Strongly Driven Floquet Matter: Resonance vs Emergent Conservation Laws", - "doi": "10.1103/physrevx.11.021008", - "nodeyear": 2021, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1136986948", - "attributes": { - "title": "Programmable quantum simulations of spin systems with trapped ions", - "doi": "10.1103/revmodphys.93.025001", - "nodeyear": 2021, - "ref-by-count": 70, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1136721709", - "attributes": { - "title": "Floquet Theory and Ultrafast Control of Magnetism", - "doi": "10.1007/978-3-030-62844-4_11", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1136701453", - "attributes": { - "title": "Chimera Time-Crystalline Order in Quantum Spin Networks", - "doi": "10.1103/physrevlett.126.120606", - "nodeyear": 2021, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1136666903", - "attributes": { - "title": "Work statistics and symmetry breaking in an excited-state quantum phase transition", - "doi": "10.1103/physreve.103.032145", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1134743337", - "attributes": { - "title": "Statistical analysis of the excited-state quantum phase transitions in the interacting boson model", - "doi": "10.1088/1361-6471/abdd8c", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1136498164", - "attributes": { - "title": "Emergence of a Renormalized 1/N Expansion in Quenched Critical Many-Body Systems", - "doi": "10.1103/physrevlett.126.110602", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1134894421", - "attributes": { - "title": "Excited-state quantum phase transitions", - "doi": "10.1088/1751-8121/abdfe8", - "nodeyear": 2021, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1136367994", - "attributes": { - "title": "Ergodic and Nonergodic Dual-Unitary Quantum Circuits with Arbitrary Local Hilbert Space Dimension", - "doi": "10.1103/physrevlett.126.100603", - "nodeyear": 2021, - "ref-by-count": 21, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1136299609", - "attributes": { - "title": "Characterizing the Lipkin-Meshkov-Glick model excited-state quantum phase transition using dynamical and statistical properties of the diagonal entropy", - "doi": "10.1103/physreve.103.032109", - "nodeyear": 2021, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1136655132", - "attributes": { - "title": "Tunable fragile topology in Floquet systems", - "doi": "10.1103/physrevb.103.l121115", - "nodeyear": 2021, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1136504030", - "attributes": { - "title": "Optical manipulation of domains in chiral topological superconductors", - "doi": "10.1103/physrevresearch.3.013253", - "nodeyear": 2021, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1136477967", - "attributes": { - "title": "Quasiclassical approach to quantum quench dynamics in the presence of an excited-state quantum phase transition", - "doi": "10.1103/physreva.103.032213", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1136417273", - "attributes": { - "title": "Topological Mott transition in a Weyl-Hubbard model: Dynamical mean-field theory study", - "doi": "10.1103/physrevb.103.125132", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1136414044", - "attributes": { - "title": "Floquet engineering of Mott insulators with strong spin-orbit coupling", - "doi": "10.1103/physrevb.103.l100408", - "nodeyear": 2021, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1136226159", - "attributes": { - "title": "Energy diffusion and absorption in chaotic systems with rapid periodic driving", - "doi": "10.1103/physrevresearch.3.013219", - "nodeyear": 2021, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1136043176", - "attributes": { - "title": "Saddle-point scrambling without thermalization", - "doi": "10.1103/physreva.103.033304", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1135722934", - "attributes": { - "title": "Bilinear dynamic mode decomposition for quantum control", - "doi": "10.1088/1367-2630/abe972", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1133448902", - "attributes": { - "title": "Quantum scarring in a spin-boson system: fundamental families of periodic orbits", - "doi": "10.1088/1367-2630/abd2e6", - "nodeyear": 2021, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1132677751", - "attributes": { - "title": "Excited state quantum phase transitions in the bending spectra of molecules", - "doi": "10.1016/j.jqsrt.2020.107436", - "nodeyear": 2021, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1135442248", - "attributes": { - "title": "Semiconductor qubits in practice", - "doi": "10.1038/s42254-021-00283-9", - "nodeyear": 2021, - "ref-by-count": 34, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1135329747", - "attributes": { - "title": "Controllable and shortcut-based population transfers with a composite system of a nitrogen-vacancy electron spin and microwave photons", - "doi": "10.1007/s11128-021-03005-3", - "nodeyear": 2021, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1135194875", - "attributes": { - "title": "Ubiquitous quantum scarring does not prevent ergodicity", - "doi": "10.1038/s41467-021-21123-5", - "nodeyear": 2021, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140345559", - "attributes": { - "title": "Flow Equations for Disordered Floquet Systems", - "doi": "10.21468/scipost.report.2518", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1135141218", - "attributes": { - "title": "Ground-state phase and superfluidity of tunable spin-orbit-coupled Bose-Einstein condensates", - "doi": "10.1103/physreve.103.022204", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140343596", - "attributes": { - "title": "Flow Equations for Disordered Floquet Systems", - "doi": "10.21468/scipost.report.2494", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1135773784", - "attributes": { - "title": "Population trapping in a pair of periodically driven Rydberg atoms", - "doi": "10.1103/physreva.103.023335", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1135472070", - "attributes": { - "title": "Breakdown of Markovianity by interactions in stroboscopic Floquet-Lindblad dynamics under high-frequency drive", - "doi": "10.1103/physreva.103.l020202", - "nodeyear": 2021, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1135372133", - "attributes": { - "title": "Prethermal quasiconserved observables in Floquet quantum systems", - "doi": "10.1103/physrevb.103.054305", - "nodeyear": 2021, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1135327462", - "attributes": { - "title": "Floquet engineering of edge states in the presence of staggered potential and interactions", - "doi": "10.1103/physrevb.103.085417", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1135309838", - "attributes": { - "title": "Floquet second order topological superconductor based on unconventional pairing", - "doi": "10.1103/physrevb.103.085413", - "nodeyear": 2021, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1135306894", - "attributes": { - "title": "Shortcuts to dynamic polarization", - "doi": "10.1103/physrevb.103.075118", - "nodeyear": 2021, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1135033325", - "attributes": { - "title": "Adiabatic landscape and optimal paths in ergodic systems", - "doi": "10.1103/physrevresearch.3.013102", - "nodeyear": 2021, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1132630990", - "attributes": { - "title": "Superradiant phase transition in quantum Rabi dimer with staggered couplings", - "doi": "10.1016/j.physa.2020.125534", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1130120687", - "attributes": { - "title": "Control of electronic and optical properties of a laser dressed double quantum dot molecule by lateral electric field", - "doi": "10.1016/j.physe.2020.114362", - "nodeyear": 2021, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1134736715", - "attributes": { - "title": "Liquid-crystal-based topological photonics", - "doi": "10.1073/pnas.2020525118", - "nodeyear": 2021, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1134729998", - "attributes": { - "title": "Information Scrambling over Bipartitions: Equilibration, Entropy Production, and Typicality", - "doi": "10.1103/physrevlett.126.030601", - "nodeyear": 2021, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1134295650", - "attributes": { - "title": "Floquet prethermalization in dipolar spin chains", - "doi": "10.1038/s41567-020-01120-z", - "nodeyear": 2021, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1136535762", - "attributes": { - "title": "Suppressing Dissipation in a Floquet-Hubbard System", - "doi": "10.1103/physrevx.11.011057", - "nodeyear": 2021, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1135035980", - "attributes": { - "title": "Theory of Trotter Error with Commutator Scaling", - "doi": "10.1103/physrevx.11.011020", - "nodeyear": 2021, - "ref-by-count": 47, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1134951348", - "attributes": { - "title": "Floquet engineering of topological transitions in a twisted transition metal dichalcogenide homobilayer", - "doi": "10.1103/physrevb.103.014310", - "nodeyear": 2021, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1134796271", - "attributes": { - "title": "Nonequilibrium phase transition in transport through a driven quantum point contact", - "doi": "10.1103/physrevb.103.l041405", - "nodeyear": 2021, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1134708221", - "attributes": { - "title": "Universal Landau-Zener regimes in dynamical topological phase transitions", - "doi": "10.1103/physreva.103.013314", - "nodeyear": 2021, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1133369672", - "attributes": { - "title": "A note on Jacobi-type transitions in finite nuclei", - "doi": "10.1016/j.aop.2020.168380", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1144696405", - "attributes": { - "title": "Quantum Chaos and Universal Trotterisation Performance Behaviours in Digital Quantum Simulation", - "doi": "10.1364/qim.2021.w3a.1", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1141996449", - "attributes": { - "title": "Electrical Control and Quantum Chaos with a High-Spin Nucleus in Silicon", - "doi": "10.1007/978-3-030-83473-9", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1138681817", - "attributes": { - "title": "Nonequilibrium states in quantum materials under time-period driving", - "doi": "10.7498/aps.70.20201808", - "nodeyear": 2021, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1137164603", - "attributes": { - "title": "Memory Functions, Projection Operators, and the Defect Technique, Some Tools of the Trade for the Condensed Matter Physicist", - "doi": "10.1007/978-3-030-68667-3", - "nodeyear": 2021, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1132415037", - "attributes": { - "title": "Fano resonances in optical spectra of semiconductor quantum wells dressed by circularly polarized light.", - "doi": "10.1364/ol.410091", - "nodeyear": 2020, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1133653821", - "attributes": { - "title": "Floquet engineering of molecular dynamics via infrared coupling", - "doi": "10.1063/5.0033382", - "nodeyear": 2020, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1133434712", - "attributes": { - "title": "Self-averaging in many-body quantum systems out of equilibrium: Time dependence of distributions", - "doi": "10.1103/physreve.102.062126", - "nodeyear": 2020, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1132597664", - "attributes": { - "title": "Time crystals in the driven transverse field Ising model under quasiperiodic modulation", - "doi": "10.1088/1367-2630/abc9ec", - "nodeyear": 2020, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1133361819", - "attributes": { - "title": "Fano resonances in quantum well absorption induced by electromagnetic dressing", - "doi": "10.1063/5.0032332", - "nodeyear": 2020, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1133346206", - "attributes": { - "title": "Novel Quantum Phases of Two-Component Bosons with Pair Hopping in Synthetic Dimension", - "doi": "10.1103/physrevlett.125.245301", - "nodeyear": 2020, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1133100286", - "attributes": { - "title": "Floquet Engineering of Structures Based on Gapless Semiconductors", - "doi": "10.1134/s1063782620120143", - "nodeyear": 2020, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1134158402", - "attributes": { - "title": "Homogeneous Floquet time crystal from weak ergodicity breaking", - "doi": "10.1103/physrevb.102.224309", - "nodeyear": 2020, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1134040199", - "attributes": { - "title": "Excited-state quantum phase transitions in Kerr nonlinear oscillators", - "doi": "10.1103/physreva.102.063531", - "nodeyear": 2020, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1134037611", - "attributes": { - "title": "Tuning the topology of p-wave superconductivity in an analytically solvable two-band model", - "doi": "10.1103/physrevb.102.235156", - "nodeyear": 2020, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1134035516", - "attributes": { - "title": "Dynamical transition for a class of integrable models coupled to a bath", - "doi": "10.1103/physrevb.102.235154", - "nodeyear": 2020, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1133997345", - "attributes": { - "title": "Quantum frequency locking and downconversion in a driven qubit-cavity system", - "doi": "10.1103/physrevresearch.2.043411", - "nodeyear": 2020, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1133741565", - "attributes": { - "title": "Edge mode manipulation through commensurate multifrequency driving", - "doi": "10.1103/physrevb.102.235143", - "nodeyear": 2020, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1133735060", - "attributes": { - "title": "Quantum metamorphism", - "doi": "10.1103/physrevb.102.224307", - "nodeyear": 2020, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1133499708", - "attributes": { - "title": "Topological Floquet engineering of a one-dimensional optical lattice via resonant shaking with two harmonic frequencies", - "doi": "10.1103/physreva.102.063315", - "nodeyear": 2020, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1133402404", - "attributes": { - "title": "Finite-component dynamical quantum phase transitions", - "doi": "10.1103/physrevb.102.220302", - "nodeyear": 2020, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1133344182", - "attributes": { - "title": "Bose-Hubbard physics in synthetic dimensions from interaction Trotterization", - "doi": "10.1103/physrevresearch.2.043340", - "nodeyear": 2020, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1133099711", - "attributes": { - "title": "Floquet perturbation theory for periodically driven weakly interacting fermions", - "doi": "10.1103/physrevb.102.235114", - "nodeyear": 2020, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1132237880", - "attributes": { - "title": "Quantum quenches in the Dicke model: Thermalization and failure of the generalized Gibbs ensemble*", - "doi": "10.1088/1674-1056/abc679", - "nodeyear": 2020, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1132036387", - "attributes": { - "title": "Exact rotating wave approximation", - "doi": "10.1016/j.aop.2020.168327", - "nodeyear": 2020, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1131329755", - "attributes": { - "title": "Magnetic field effect on the electronic states and the intraband optical absorption spectrum of a laser dressed double quantum dot molecule", - "doi": "10.1016/j.cjph.2020.09.028", - "nodeyear": 2020, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1133080576", - "attributes": { - "title": "Relevant out-of-time-order correlator operators: Footprints of the classical dynamics", - "doi": "10.1103/physreve.102.052133", - "nodeyear": 2020, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1133125125", - "attributes": { - "title": "Solvable Model of a Generic Driven Mixture of Trapped Bose\u2013Einstein Condensates and Properties of a Many-Boson Floquet State at the Limit of an Infinite Number of Particles", - "doi": "10.3390/e22121342", - "nodeyear": 2020, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1132781598", - "attributes": { - "title": "Manipulating Intertwined Orders in Solids with Quantum Light", - "doi": "10.1103/physrevlett.125.217402", - "nodeyear": 2020, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1132635554", - "attributes": { - "title": "Harnessing the Power of the Second Quantum Revolution", - "doi": "10.1103/prxquantum.1.020101", - "nodeyear": 2020, - "ref-by-count": 33, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1132626689", - "attributes": { - "title": "Exponential growth of out-of-time-order correlator without chaos: inverted harmonic oscillator", - "doi": "10.1007/jhep11(2020)068", - "nodeyear": 2020, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1132300850", - "attributes": { - "title": "Quantifying the Sensitivity to Errors in Analog Quantum Simulation", - "doi": "10.1103/prxquantum.1.020308", - "nodeyear": 2020, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1132266415", - "attributes": { - "title": "Anomalous Spin-Charge Separation in a Driven Hubbard System", - "doi": "10.1103/physrevlett.125.195301", - "nodeyear": 2020, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1132781568", - "attributes": { - "title": "Laser-induced topological s-wave superconductivity in bilayer transition metal dichalcogenides", - "doi": "10.1103/physrevb.102.174508", - "nodeyear": 2020, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1132682732", - "attributes": { - "title": "Time-crystalline phases and period-doubling oscillations in one-dimensional Floquet topological insulators", - "doi": "10.1103/physrevresearch.2.043239", - "nodeyear": 2020, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1132672783", - "attributes": { - "title": "Nonequilibrium non-Markovian steady states in open quantum many-body systems: Persistent oscillations in Heisenberg quantum spin chains", - "doi": "10.1103/physrevb.102.174309", - "nodeyear": 2020, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1132495853", - "attributes": { - "title": "Stark time crystals: Symmetry breaking in space and time", - "doi": "10.1103/physrevb.102.195116", - "nodeyear": 2020, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1132252119", - "attributes": { - "title": "Phase Diagrams of Periodically Driven Spin\u2013Orbit Coupled 87Rb and 23Na Bose\u2013Einstein Condensates", - "doi": "10.1002/andp.202000194", - "nodeyear": 2020, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1132060808", - "attributes": { - "title": "Unified Theory to Characterize Floquet Topological Phases by Quench Dynamics", - "doi": "10.1103/physrevlett.125.183001", - "nodeyear": 2020, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1131969118", - "attributes": { - "title": "Ergodic-Localized Junctions in a Periodically Driven Spin Chain", - "doi": "10.1103/physrevlett.125.170503", - "nodeyear": 2020, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1130243954", - "attributes": { - "title": "Floquet states in dissipative open quantum systems", - "doi": "10.1088/1361-6455/abb127", - "nodeyear": 2020, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1131841249", - "attributes": { - "title": "Simulating complex quantum networks with time crystals", - "doi": "10.1126/sciadv.aay8892", - "nodeyear": 2020, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1140347748", - "attributes": { - "title": "Flow Equations for Disordered Floquet Systems", - "doi": "10.21468/scipost.report.2082", - "nodeyear": 2020, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1132055741", - "attributes": { - "title": "Chiral Luttinger liquids in graphene tuned by irradiation", - "doi": "10.1103/physrevb.102.155428", - "nodeyear": 2020, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1131923946", - "attributes": { - "title": "\u03b7-paired superconducting hidden phase in photodoped Mott insulators", - "doi": "10.1103/physrevb.102.165136", - "nodeyear": 2020, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1131725038", - "attributes": { - "title": "Defining a well-ordered Floquet basis by the average energy", - "doi": "10.1103/physreva.102.042212", - "nodeyear": 2020, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1131633965", - "attributes": { - "title": "Dynamic renormalization group theory for open Floquet systems", - "doi": "10.1103/physrevb.102.134307", - "nodeyear": 2020, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1131535042", - "attributes": { - "title": "Geometric properties of adiabatic quantum thermal machines", - "doi": "10.1103/physrevb.102.155407", - "nodeyear": 2020, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1131497997", - "attributes": { - "title": "Speck of chaos", - "doi": "10.1103/physrevresearch.2.043034", - "nodeyear": 2020, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1131390335", - "attributes": { - "title": "Holographic Floquet states in low dimensions", - "doi": "10.1007/jhep10(2020)013", - "nodeyear": 2020, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1130765968", - "attributes": { - "title": "The 2021 quantum materials roadmap", - "doi": "10.1088/2515-7639/abb74e", - "nodeyear": 2020, - "ref-by-count": 47, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1128676541", - "attributes": { - "title": "Nuclear structure and phase transition of odd-odd Cu isotopes: A neutron-proton interacting boson-fermion-fermion model calculation", - "doi": "10.1016/j.nuclphysa.2020.121961", - "nodeyear": 2020, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1131177201", - "attributes": { - "title": "The Rabi problem with elliptical polarization", - "doi": "10.1515/zna-2020-0181", - "nodeyear": 2020, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:0.50;03:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1131131373", - "attributes": { - "title": "Chaos and Quantum Scars in Bose-Josephson Junction Coupled to a Bosonic Mode", - "doi": "10.1103/physrevlett.125.134101", - "nodeyear": 2020, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1131100748", - "attributes": { - "title": "Dynamical Order and Superconductivity in a Frustrated Many-Body System", - "doi": "10.1103/physrevlett.125.137001", - "nodeyear": 2020, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1130030918", - "attributes": { - "title": "Quantum speed limit time, non-Markovianity, and quantum phase transition of the Dicke model", - "doi": "10.1364/josab.393998", - "nodeyear": 2020, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "09:0.33;01:0.33;02:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1130753379", - "attributes": { - "title": "Statistical properties of the localization measure of chaotic eigenstates in the Dicke model", - "doi": "10.1103/physreve.102.032212", - "nodeyear": 2020, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1130315991", - "attributes": { - "title": "Inducing anisotropies in Dirac fermions by periodic driving", - "doi": "10.1088/1361-648x/abb1cc", - "nodeyear": 2020, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1130688900", - "attributes": { - "title": "Quantum chaos in a system with high degree of symmetries", - "doi": "10.1103/physreve.102.032208", - "nodeyear": 2020, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1131193925", - "attributes": { - "title": "Floquet engineering of twisted double bilayer graphene", - "doi": "10.1103/physrevresearch.2.033494", - "nodeyear": 2020, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1131193618", - "attributes": { - "title": "Driven spin chains as high-quality quantum routers", - "doi": "10.1103/physreva.102.032624", - "nodeyear": 2020, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1131100771", - "attributes": { - "title": "Floquet topological phase in a generalized PT-symmetric lattice", - "doi": "10.1103/physrevb.102.104303", - "nodeyear": 2020, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1130836894", - "attributes": { - "title": "Optomagnonic Barnett effect", - "doi": "10.1103/physrevb.102.094417", - "nodeyear": 2020, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1130756838", - "attributes": { - "title": "Bridging entanglement dynamics and chaos in semiclassical systems", - "doi": "10.1103/physreva.102.032404", - "nodeyear": 2020, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1130750198", - "attributes": { - "title": "Resonant laser excitation and time-domain imaging of chiral topological polariton edge states", - "doi": "10.1103/physrevresearch.2.033386", - "nodeyear": 2020, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1130316025", - "attributes": { - "title": "Ultrafast critical ground state preparation via bang\u2013bang protocols", - "doi": "10.1088/1367-2630/abb1df", - "nodeyear": 2020, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1124910985", - "attributes": { - "title": "Signatures of quantum chaos in the dynamics of bipartite fluctuations", - "doi": "10.1016/j.physa.2020.124321", - "nodeyear": 2020, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1130469797", - "attributes": { - "title": "Half-Integer Quantized Topological Response in Quasiperiodically Driven Quantum Systems", - "doi": "10.1103/physrevlett.125.100601", - "nodeyear": 2020, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1130394801", - "attributes": { - "title": "Harmonic Fine Tuning and Triaxial Spatial Anisotropy of Dressed Atomic Spins", - "doi": "10.1103/physrevlett.125.093203", - "nodeyear": 2020, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1130268705", - "attributes": { - "title": "Signatures of inter-band transitions on dynamical localization", - "doi": "10.1140/epjd/e2020-100489-1", - "nodeyear": 2020, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1130214677", - "attributes": { - "title": "Chaos and quantum scars in a coupled top model", - "doi": "10.1103/physreve.102.020101", - "nodeyear": 2020, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1129902361", - "attributes": { - "title": "Time Crystals Protected by Floquet Dynamical Symmetry in Hubbard Models", - "doi": "10.1103/physrevlett.125.060601", - "nodeyear": 2020, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1129855599", - "attributes": { - "title": "Construction of many-body-localized models where all the eigenstates are matrix-product-states", - "doi": "10.1088/1742-5468/aba0a9", - "nodeyear": 2020, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1130392310", - "attributes": { - "title": "Thermalization in a Bose-Hubbard dimer with modulated tunneling", - "doi": "10.1103/physreva.102.023330", - "nodeyear": 2020, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1129926643", - "attributes": { - "title": "Light-induced bound electron states in two-dimensional systems: Contribution to electron transport", - "doi": "10.1103/physrevb.102.075412", - "nodeyear": 2020, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1129685555", - "attributes": { - "title": "Entropic vibrational resonance", - "doi": "10.1103/physreve.102.012149", - "nodeyear": 2020, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1129594568", - "attributes": { - "title": "Donor Spins in Silicon for Quantum Technologies", - "doi": "10.1002/qute.202000005", - "nodeyear": 2020, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1129534483", - "attributes": { - "title": "Out-of-equilibrium phase transitions induced by Floquet resonances in a periodically quench-driven XY spin chain", - "doi": "10.21468/scipostphyscore.3.1.001", - "nodeyear": 2020, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1129384214", - "attributes": { - "title": "Emergent Hydrodynamics in Nonequilibrium Quantum Systems", - "doi": "10.1103/physrevlett.125.030601", - "nodeyear": 2020, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1129066525", - "attributes": { - "title": "Complex Density of Continuum States in Resonant Quantum Tunneling", - "doi": "10.1103/physrevlett.125.020401", - "nodeyear": 2020, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1128974254", - "attributes": { - "title": "General description for nonequilibrium steady states in periodically driven dissipative quantum systems", - "doi": "10.1126/sciadv.abb4019", - "nodeyear": 2020, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1129713716", - "attributes": { - "title": "Coherent control of dissipative dynamics in a periodically driven lattice array", - "doi": "10.1103/physreva.102.012221", - "nodeyear": 2020, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1129492912", - "attributes": { - "title": "Electromagnetic control of transport across a barrier on a topological insulator surface", - "doi": "10.1103/physrevb.102.045419", - "nodeyear": 2020, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1129063470", - "attributes": { - "title": "Quantum to classical crossover of Floquet engineering in correlated quantum systems", - "doi": "10.1103/physrevresearch.2.033033", - "nodeyear": 2020, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1128941497", - "attributes": { - "title": "Robust Dynamic Hamiltonian Engineering of Many-Body Spin Systems", - "doi": "10.1103/physrevx.10.031002", - "nodeyear": 2020, - "ref-by-count": 23, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1128912140", - "attributes": { - "title": "Floquet engineering of the Luttinger Hamiltonian", - "doi": "10.1103/physrevb.102.035301", - "nodeyear": 2020, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1128533067", - "attributes": { - "title": "Condensed matter physics in time crystals", - "doi": "10.1088/1367-2630/ab9d54", - "nodeyear": 2020, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1128836880", - "attributes": { - "title": "Power-Stroke-Driven Muscle Contraction", - "doi": "10.1007/978-3-030-45197-4_4", - "nodeyear": 2020, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1125908542", - "attributes": { - "title": "Coding closed and open quantum systems in MATLAB: applications in quantum optics and condensed matter", - "doi": "10.1088/1361-6404/ab8360", - "nodeyear": 2020, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1128827266", - "attributes": { - "title": "Realization of an anomalous Floquet topological system with ultracold atoms", - "doi": "10.1038/s41567-020-0949-y", - "nodeyear": 2020, - "ref-by-count": 60, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1128505545", - "attributes": { - "title": "Floquet spectrum for anisotropic and tilted Dirac materials under linearly polarized light at all field intensities", - "doi": "10.1063/5.0007576", - "nodeyear": 2020, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1129532989", - "attributes": { - "title": "Out-of-equilibrium phase transitions induced by Floquet resonances in a periodically quench-driven XY spin chain", - "doi": "10.21468/scipost.report.1771", - "nodeyear": 2020, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1128466326", - "attributes": { - "title": "Many Body Quantum Chaos", - "doi": "10.3390/condmat5020041", - "nodeyear": 2020, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1128416461", - "attributes": { - "title": "Universal Anti-Kibble-Zurek Scaling in Fully Connected Systems", - "doi": "10.1103/physrevlett.124.230602", - "nodeyear": 2020, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1128125903", - "attributes": { - "title": "Theoretical Methods for Ultrastrong Light\u2013Matter Interactions", - "doi": "10.1002/qute.201900140", - "nodeyear": 2020, - "ref-by-count": 26, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1128741464", - "attributes": { - "title": "Landau-Zener transitions and adiabatic impulse approximation in an array of two Rydberg atoms with time-dependent detuning", - "doi": "10.1103/physreva.101.063415", - "nodeyear": 2020, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1128303210", - "attributes": { - "title": "Entanglement measures and nonequilibrium dynamics of quantum many-body systems: A path integral approach", - "doi": "10.1103/physrevb.101.245130", - "nodeyear": 2020, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1128253343", - "attributes": { - "title": "Floquet engineering of interlayer couplings: Tuning the magic angle of twisted bilayer graphene at the exit of a waveguide", - "doi": "10.1103/physrevb.101.241408", - "nodeyear": 2020, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1128250379", - "attributes": { - "title": "Environment-controlled Floquet-state paramagnetism", - "doi": "10.1103/physrevresearch.2.023293", - "nodeyear": 2020, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1128246725", - "attributes": { - "title": "Effective Floquet Hamiltonians for periodically driven twisted bilayer graphene", - "doi": "10.1103/physrevb.101.235411", - "nodeyear": 2020, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1128224551", - "attributes": { - "title": "Anomalous levitation and annihilation in Floquet topological insulators", - "doi": "10.1103/physrevresearch.2.022048", - "nodeyear": 2020, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1128130936", - "attributes": { - "title": "Collapse and revival of quantum many-body scars via Floquet engineering", - "doi": "10.1103/physrevb.101.245107", - "nodeyear": 2020, - "ref-by-count": 48, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127296857", - "attributes": { - "title": "Quantum vs classical dynamics in a spin-boson system: manifestations of spectral correlations and scarring", - "doi": "10.1088/1367-2630/ab8ef8", - "nodeyear": 2020, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127987694", - "attributes": { - "title": "Quantum interference device for controlled two-qubit operations", - "doi": "10.1038/s41534-020-0275-3", - "nodeyear": 2020, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127977347", - "attributes": { - "title": "A quantum annealer with fully programmable all-to-all coupling via Floquet engineering", - "doi": "10.1038/s41534-020-0279-z", - "nodeyear": 2020, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127865614", - "attributes": { - "title": "Time crystallinity in open quantum systems", - "doi": "10.22331/q-2020-05-25-270", - "nodeyear": 2020, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127470058", - "attributes": { - "title": "Survival of current in a periodically driven hard-core bosonic system", - "doi": "10.1140/epjb/e2020-10133-3", - "nodeyear": 2020, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127517958", - "attributes": { - "title": "Floquet Engineering Topological Many-Body Localized Systems", - "doi": "10.1103/physrevlett.124.190601", - "nodeyear": 2020, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1127358108", - "attributes": { - "title": "Transition from quantum chaos to localization in spin chains", - "doi": "10.1103/physreve.101.052201", - "nodeyear": 2020, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127346740", - "attributes": { - "title": "Band structure engineering and non-equilibrium dynamics in Floquet topological insulators", - "doi": "10.1038/s42254-020-0170-z", - "nodeyear": 2020, - "ref-by-count": 110, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127989066", - "attributes": { - "title": "Controlling magnetic correlations in a driven Hubbard system far from half-filling", - "doi": "10.1103/physreva.101.053634", - "nodeyear": 2020, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127955024", - "attributes": { - "title": "Error bounds for constrained dynamics in gapped quantum systems: Rigorous results and generalizations", - "doi": "10.1103/physreva.101.052122", - "nodeyear": 2020, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127897454", - "attributes": { - "title": "Predicted photoinduced topological phases in organic salt \u03b1-(BEDT-TTF)2I3", - "doi": "10.1103/physrevresearch.2.023229", - "nodeyear": 2020, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127889093", - "attributes": { - "title": "Self-averaging in many-body quantum systems out of equilibrium: Chaotic systems", - "doi": "10.1103/physrevb.101.174312", - "nodeyear": 2020, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127764217", - "attributes": { - "title": "Characterization of photoexcited states in the half-filled one-dimensional extended Hubbard model assisted by machine learning", - "doi": "10.1103/physrevb.101.195136", - "nodeyear": 2020, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1127758910", - "attributes": { - "title": "Towards simulation of the dynamics of materials on quantum computers", - "doi": "10.1103/physrevb.101.184305", - "nodeyear": 2020, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127625202", - "attributes": { - "title": "Transport through a quantum critical system: A thermodynamically consistent approach", - "doi": "10.1103/physrevresearch.2.023178", - "nodeyear": 2020, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127607114", - "attributes": { - "title": "Floquet eigenspectra of a nonlinear two-mode system under periodic driving: The emergence of ring structures", - "doi": "10.1103/physreva.101.053623", - "nodeyear": 2020, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127358045", - "attributes": { - "title": "Classical and quantum chaos in a three-mode bosonic system", - "doi": "10.1103/physreva.101.053604", - "nodeyear": 2020, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1125292836", - "attributes": { - "title": "Trotterized adiabatic quantum simulation and its application to a simple all-optical system", - "doi": "10.1088/1367-2630/ab7a31", - "nodeyear": 2020, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1126383906", - "attributes": { - "title": "Dynamics and transport at the threshold of many-body localization", - "doi": "10.1016/j.physrep.2020.03.003", - "nodeyear": 2020, - "ref-by-count": 33, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1125977593", - "attributes": { - "title": "Polynomial potentials and coupled quantum dots in two and three dimensions", - "doi": "10.1016/j.aop.2020.168161", - "nodeyear": 2020, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127630356", - "attributes": { - "title": "Predicting Imperfect Echo Dynamics in Many-Body Quantum Systems", - "doi": "10.1515/zna-2019-0383", - "nodeyear": 2020, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127650081", - "attributes": { - "title": "Coherent Transport in Periodically Driven Mesoscopic Conductors: From Scattering Amplitudes to Quantum Thermodynamics", - "doi": "10.1515/zna-2020-0056", - "nodeyear": 2020, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127130950", - "attributes": { - "title": "Quantum Many-Body Scars in Optical Lattices", - "doi": "10.1103/physrevlett.124.160604", - "nodeyear": 2020, - "ref-by-count": 36, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1126727524", - "attributes": { - "title": "Many-Body Dynamical Localization in a Kicked Lieb-Liniger Gas", - "doi": "10.1103/physrevlett.124.155302", - "nodeyear": 2020, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1126480743", - "attributes": { - "title": "Periodic thermodynamics of a two spin Rabi model", - "doi": "10.1088/1742-5468/ab7812", - "nodeyear": 2020, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1126271157", - "attributes": { - "title": "Does Scrambling Equal Chaos?", - "doi": "10.1103/physrevlett.124.140602", - "nodeyear": 2020, - "ref-by-count": 41, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1126269333", - "attributes": { - "title": "Periodically driven harmonic Langevin systems", - "doi": "10.1103/physreve.101.042106", - "nodeyear": 2020, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1126263310", - "attributes": { - "title": "Classical and Quantum Signatures of Quantum Phase Transitions in a (Pseudo) Relativistic Many-Body System", - "doi": "10.3390/condmat5020026", - "nodeyear": 2020, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127947148", - "attributes": { - "title": "Floquet Prethermalization in a Bose-Hubbard System", - "doi": "10.1103/physrevx.10.021044", - "nodeyear": 2020, - "ref-by-count": 47, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1127515489", - "attributes": { - "title": "Long-Lived Interacting Phases of Matter Protected by Multiple Time-Translation Symmetries in Quasiperiodically Driven Systems", - "doi": "10.1103/physrevx.10.021032", - "nodeyear": 2020, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1126759415", - "attributes": { - "title": "Realization of a stroboscopic optical lattice for cold atoms with subwavelength spacing", - "doi": "10.1103/physreva.101.041603", - "nodeyear": 2020, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1126173583", - "attributes": { - "title": "Scaling of Loschmidt echo in a boundary-driven critical Z3 Potts model", - "doi": "10.1103/physrevb.101.144302", - "nodeyear": 2020, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1126057889", - "attributes": { - "title": "Enhancement of local pairing correlations in periodically driven Mott insulators", - "doi": "10.1103/physrevb.101.161101", - "nodeyear": 2020, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1123928512", - "attributes": { - "title": "The war on liquids: Disintegration and reaction by enhanced pulsed blasting", - "doi": "10.1016/j.ces.2019.115458", - "nodeyear": 2020, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1125920858", - "attributes": { - "title": "Non-equilibrium Dynamical Mean-Field Theory", - "doi": "10.1007/978-3-319-44677-6_1", - "nodeyear": 2020, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1125550793", - "attributes": { - "title": "Coherent electrical control of a single high-spin nucleus in silicon", - "doi": "10.1038/s41586-020-2057-7", - "nodeyear": 2020, - "ref-by-count": 39, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1126915081", - "attributes": { - "title": "Floquet engineering of 2D materials", - "doi": "10.1088/1742-6596/1461/1/012064", - "nodeyear": 2020, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1126909693", - "attributes": { - "title": "Electron-photonic topological states on the surface of a bulk semiconductor driven by a high-frequency field", - "doi": "10.1088/1742-6596/1461/1/012063", - "nodeyear": 2020, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1125953276", - "attributes": { - "title": "Tailoring metal-insulator transitions and band topology via off-resonant periodic drive in an interacting triangular lattice", - "doi": "10.1103/physrevb.101.115428", - "nodeyear": 2020, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1125497800", - "attributes": { - "title": "Controllable finite-momenta dynamical quasicondensation in the periodically driven one-dimensional Fermi-Hubbard model", - "doi": "10.1103/physreva.101.033604", - "nodeyear": 2020, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1125326068", - "attributes": { - "title": "Is there a Floquet Lindbladian?", - "doi": "10.1103/physrevb.101.100301", - "nodeyear": 2020, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1125325450", - "attributes": { - "title": "Optimal frequency window for Floquet engineering in optical lattices", - "doi": "10.1103/physrevresearch.2.013241", - "nodeyear": 2020, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1125160480", - "attributes": { - "title": "Dimensional Crossover of the Integer Quantum Hall Plateau Transition and Disordered Topological Pumping", - "doi": "10.1103/physrevlett.124.086602", - "nodeyear": 2020, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1125157056", - "attributes": { - "title": "Entanglement in coupled kicked tops with chaotic dynamics", - "doi": "10.1103/physreve.101.022221", - "nodeyear": 2020, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1124776377", - "attributes": { - "title": "Optimized three-level quantum transfers based on frequency-modulated optical excitations", - "doi": "10.1038/s41598-020-59046-8", - "nodeyear": 2020, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1125164136", - "attributes": { - "title": "Floquet-engineering of nodal rings and nodal spheres and their characterization using the quantum metric", - "doi": "10.1103/physrevresearch.2.013224", - "nodeyear": 2020, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1125161664", - "attributes": { - "title": "Tunable strong photo-mixing in Weyl semimetals", - "doi": "10.1103/physrevb.101.085307", - "nodeyear": 2020, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1125153368", - "attributes": { - "title": "Improved Lieb-Robinson bound for many-body Hamiltonians with power-law interactions", - "doi": "10.1103/physreva.101.022333", - "nodeyear": 2020, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1121624158", - "attributes": { - "title": "The transition from double to single quantum dot induced by THz laser field", - "doi": "10.1016/j.physe.2019.113758", - "nodeyear": 2020, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1124462573", - "attributes": { - "title": "Observation of Dynamical Quantum Phase Transitions with Correspondence in an Excited State Phase Diagram", - "doi": "10.1103/physrevlett.124.043001", - "nodeyear": 2020, - "ref-by-count": 40, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1124409613", - "attributes": { - "title": "Thermodynamic Geometry of Microscopic Heat Engines", - "doi": "10.1103/physrevlett.124.040602", - "nodeyear": 2020, - "ref-by-count": 37, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1123624596", - "attributes": { - "title": "Stability of topologically protected edge states in nonlinear quantum walks: additional bifurcations unique to Floquet systems", - "doi": "10.1088/1751-8121/ab6514", - "nodeyear": 2020, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1124230276", - "attributes": { - "title": "An algebraic alternative for the accurate simulation of CO2 Raman spectra", - "doi": "10.1002/jrs.5801", - "nodeyear": 2020, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1124230253", - "attributes": { - "title": "Positive quantum Lyapunov exponents in experimental systems with a regular classical limit", - "doi": "10.1103/physreve.101.010202", - "nodeyear": 2020, - "ref-by-count": 47, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1124254326", - "attributes": { - "title": "Dynamical Detection of Level Repulsion in the One-Particle Aubry-Andr\u00e9 Model", - "doi": "10.3390/condmat5010007", - "nodeyear": 2020, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1124048582", - "attributes": { - "title": "Quantum Pairing Time Orders", - "doi": "10.1002/andp.201900529", - "nodeyear": 2020, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1125053995", - "attributes": { - "title": "Long-Range Prethermal Phases of Nonequilibrium Matter", - "doi": "10.1103/physrevx.10.011043", - "nodeyear": 2020, - "ref-by-count": 37, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1124831533", - "attributes": { - "title": "Parametric Instabilities of Interacting Bosons in Periodically Driven 1D Optical Lattices", - "doi": "10.1103/physrevx.10.011030", - "nodeyear": 2020, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1124103171", - "attributes": { - "title": "Driving-assisted open quantum transport in qubit networks", - "doi": "10.1103/physreva.101.012113", - "nodeyear": 2020, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1123986522", - "attributes": { - "title": "Effective Floquet Hamiltonian in the low-frequency regime", - "doi": "10.1103/physrevb.101.024303", - "nodeyear": 2020, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1123351695", - "attributes": { - "title": "Creutz ladder in a resonantly shaken 1D optical lattice", - "doi": "10.1088/1367-2630/ab61d7", - "nodeyear": 2020, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1123673879", - "attributes": { - "title": "Divergence of the Floquet-Magnus expansion in a periodically driven one-body system with energy localization", - "doi": "10.1103/physreve.100.062138", - "nodeyear": 2019, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1123430435", - "attributes": { - "title": "Is the Trotterized UCCSD Ansatz Chemically Well-Defined?", - "doi": "10.1021/acs.jctc.9b01083", - "nodeyear": 2019, - "ref-by-count": 35, - "is_input_DOI": false, - "category_for": "08:0.33;03:0.33;06:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1123097339", - "attributes": { - "title": "Topology and Broken Symmetry in Floquet Systems", - "doi": "10.1146/annurev-conmatphys-031218-013721", - "nodeyear": 2019, - "ref-by-count": 53, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1123643952", - "attributes": { - "title": "Exponentially slow heating in short and long-range interacting Floquet systems", - "doi": "10.1103/physrevresearch.1.033202", - "nodeyear": 2019, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1123446111", - "attributes": { - "title": "Emergence of singularities from decoherence: Quantum catastrophes", - "doi": "10.1103/physreva.100.063628", - "nodeyear": 2019, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1123268268", - "attributes": { - "title": "Polaron-transformed dissipative Lipkin-Meshkov-Glick model", - "doi": "10.1103/physreva.100.063815", - "nodeyear": 2019, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1123262658", - "attributes": { - "title": "Probing an excited-state quantum phase transition in a quantum many-body system via an out-of-time-order correlator", - "doi": "10.1103/physreva.100.062113", - "nodeyear": 2019, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1123187479", - "attributes": { - "title": "Non-Abelian geometric potentials and spin-orbit coupling for periodically driven systems", - "doi": "10.1103/physreva.100.063616", - "nodeyear": 2019, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1122945773", - "attributes": { - "title": "Simulating quantum many-body dynamics on a current digital quantum computer", - "doi": "10.1038/s41534-019-0217-0", - "nodeyear": 2019, - "ref-by-count": 67, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1122948207", - "attributes": { - "title": "Nonlocal random walk over Floquet states of a dissipative nonlinear oscillator", - "doi": "10.1103/physreve.100.052148", - "nodeyear": 2019, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1122908545", - "attributes": { - "title": "Floquet-state cooling", - "doi": "10.1038/s41598-019-53877-w", - "nodeyear": 2019, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1122419408", - "attributes": { - "title": "Quantum Simulation Meets Nonequilibrium Dynamical Mean-Field Theory: Exploring the Periodically Driven, Strongly Correlated Fermi-Hubbard Model", - "doi": "10.1103/physrevlett.123.193602", - "nodeyear": 2019, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1122364137", - "attributes": { - "title": "Locality and heating in periodically driven, power-law-interacting systems", - "doi": "10.1103/physreva.100.052103", - "nodeyear": 2019, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1122299651", - "attributes": { - "title": "Hybrid Dispersion Dirac Semimetal and Hybrid Weyl Phases in Luttinger Semimetals: A Dynamical Approach", - "doi": "10.1002/andp.201900336", - "nodeyear": 2019, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1122298943", - "attributes": { - "title": "Light-induced anomalous Hall effect in graphene", - "doi": "10.1038/s41567-019-0698-y", - "nodeyear": 2019, - "ref-by-count": 245, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1122260988", - "attributes": { - "title": "Revealing Correlations Between a System and an Inaccessible Environment", - "doi": "10.1007/978-3-030-31146-9_5", - "nodeyear": 2019, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1122960341", - "attributes": { - "title": "Quantum caustics and the hierarchy of light cones in quenched spin chains", - "doi": "10.1103/physrevresearch.1.033135", - "nodeyear": 2019, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1122929220", - "attributes": { - "title": "Floquet spinor Bose gases", - "doi": "10.1103/physrevresearch.1.033132", - "nodeyear": 2019, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1122682309", - "attributes": { - "title": "Floquet engineering of topological phases protected by emergent symmetries under resonant drives", - "doi": "10.1103/physreva.100.052109", - "nodeyear": 2019, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1122560614", - "attributes": { - "title": "Engineered nearest-neighbor interactions with doubly modulated optical lattices", - "doi": "10.1103/physreva.100.053610", - "nodeyear": 2019, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1122263731", - "attributes": { - "title": "Floquet second-order topological superconductor driven via ferromagnetic resonance", - "doi": "10.1103/physrevresearch.1.032013", - "nodeyear": 2019, - "ref-by-count": 31, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1122003630", - "attributes": { - "title": "Floquet engineering of optical lattices with spatial features and periodicity below the diffraction limit", - "doi": "10.1088/1367-2630/ab500f", - "nodeyear": 2019, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1122258473", - "attributes": { - "title": "Complex absorbing potentials for stark resonances", - "doi": "10.1002/qua.26067", - "nodeyear": 2019, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1122233280", - "attributes": { - "title": "Periodic thermodynamics of the Rabi model with circular polarization for arbitrary spin quantum numbers", - "doi": "10.1103/physreve.100.042141", - "nodeyear": 2019, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1122016549", - "attributes": { - "title": "Integrable Many-Body Quantum Floquet-Thouless Pumps", - "doi": "10.1103/physrevlett.123.170603", - "nodeyear": 2019, - "ref-by-count": 27, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1121972957", - "attributes": { - "title": "Collective performance of a finite-time quantum Otto cycle", - "doi": "10.1103/physreve.100.042126", - "nodeyear": 2019, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1121864026", - "attributes": { - "title": "System susceptibility and bound-states in structured reservoirs.", - "doi": "10.1364/oe.27.031504", - "nodeyear": 2019, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1121860390", - "attributes": { - "title": "Beyond Chu\u2019s Limit with Floquet Impedance Matching", - "doi": "10.1103/physrevlett.123.164102", - "nodeyear": 2019, - "ref-by-count": 26, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1121829677", - "attributes": { - "title": "Superradiance in finite quantum systems randomly coupled to continuum", - "doi": "10.1103/physreve.100.042119", - "nodeyear": 2019, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1120967654", - "attributes": { - "title": "Transport signatures of symmetry protection in 1D Floquet topological insulators", - "doi": "10.1088/1361-648x/ab4319", - "nodeyear": 2019, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:0.33;09:0.33;10:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1121574121", - "attributes": { - "title": "Calculation of Transition State Energies in the HCN\u2013HNC Isomerization with an Algebraic Model", - "doi": "10.1021/acs.jpca.9b07338", - "nodeyear": 2019, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1121497945", - "attributes": { - "title": "Behavior of Floquet Topological Quantum States in Optically Driven Semiconductors", - "doi": "10.3390/sym11101246", - "nodeyear": 2019, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1122147311", - "attributes": { - "title": "Dynamical quantum phase transitions in extended toric-code models", - "doi": "10.1103/physrevb.100.144203", - "nodeyear": 2019, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1121992405", - "attributes": { - "title": "Optical control of the current-voltage relation in stacked superconductors", - "doi": "10.1103/physrevb.100.134510", - "nodeyear": 2019, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1121860362", - "attributes": { - "title": "Floquet-engineered light-cone spreading of correlations in a driven quantum chain", - "doi": "10.1103/physrevb.100.165125", - "nodeyear": 2019, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1121691603", - "attributes": { - "title": "Ultrastrong-coupling circuit QED in the radio-frequency regime", - "doi": "10.1103/physreva.100.043815", - "nodeyear": 2019, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1121454130", - "attributes": { - "title": "Floquet time spirals and stable discrete-time quasicrystals in quasiperiodically driven quantum many-body systems", - "doi": "10.1103/physrevb.100.134302", - "nodeyear": 2019, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1121432950", - "attributes": { - "title": "Quantized Hall Conductance of a Single Atomic Wire: A Proposal Based on Synthetic Dimensions", - "doi": "10.1103/physrevx.9.041001", - "nodeyear": 2019, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1121151157", - "attributes": { - "title": "Discontinuities in Driven Spin-Boson Systems due to Coherent Destruction of Tunneling: Breakdown of the Floquet-Gibbs Distribution", - "doi": "10.1103/physrevlett.123.120602", - "nodeyear": 2019, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1121123255", - "attributes": { - "title": "Digital quantum simulation, Trotter errors, and quantum chaos of the kicked top", - "doi": "10.1038/s41534-019-0192-5", - "nodeyear": 2019, - "ref-by-count": 32, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1121045652", - "attributes": { - "title": "Evolution of Floquet topological quantum states in driven semiconductors", - "doi": "10.1140/epjb/e2019-100087-0", - "nodeyear": 2019, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1121046991", - "attributes": { - "title": "Simulation of 1D Topological Phases in Driven Quantum Dot Arrays", - "doi": "10.1103/physrevlett.123.126401", - "nodeyear": 2019, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1121007947", - "attributes": { - "title": "Floquet approach to \u21242 lattice gauge theories with ultracold atoms in optical lattices", - "doi": "10.1038/s41567-019-0649-7", - "nodeyear": 2019, - "ref-by-count": 115, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1120955481", - "attributes": { - "title": "Phases Transitions in a Cross-Cavity Quantum Rabi Model Possessing PT Symmetric Structure", - "doi": "10.3389/fphy.2019.00127", - "nodeyear": 2019, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1120846795", - "attributes": { - "title": "Van Hove singularities and excited-state quantum phase transitions in graphene-like microwave billiards", - "doi": "10.1063/1.5124611", - "nodeyear": 2019, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1120846794", - "attributes": { - "title": "Excited-state quantum phase transitions in bosonic lattice systems", - "doi": "10.1063/1.5124610", - "nodeyear": 2019, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1120846792", - "attributes": { - "title": "Two-particle transfer intensities in excited-state quantum phase transition", - "doi": "10.1063/1.5124608", - "nodeyear": 2019, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1120846778", - "attributes": { - "title": "Excited-state quantum phase transitions in systems with many interacting spins-1/2", - "doi": "10.1063/1.5124594", - "nodeyear": 2019, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1120846773", - "attributes": { - "title": "Static vs. dynamic phases of quantum many-body systems", - "doi": "10.1063/1.5124589", - "nodeyear": 2019, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1120795450", - "attributes": { - "title": "Entanglement and excited-state quantum phase transition in an extended Dicke model", - "doi": "10.1007/s11467-019-0921-4", - "nodeyear": 2019, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1121403245", - "attributes": { - "title": "Prethermal quantum many-body Kapitza phases of periodically driven spin systems", - "doi": "10.1103/physrevb.100.104306", - "nodeyear": 2019, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1121334827", - "attributes": { - "title": "Topological Floquet engineering of twisted bilayer graphene", - "doi": "10.1103/physrevresearch.1.023031", - "nodeyear": 2019, - "ref-by-count": 26, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1121155174", - "attributes": { - "title": "The antiferromagnetic phase of the Floquet-driven Hubbard model", - "doi": "10.1103/physrevb.100.121110", - "nodeyear": 2019, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1120975898", - "attributes": { - "title": "Stroboscopic painting of optical potentials for atoms with subwavelength resolution", - "doi": "10.1103/physreva.100.033610", - "nodeyear": 2019, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1120721646", - "attributes": { - "title": "Floquet-Engineering Counterdiabatic Protocols in Quantum Many-Body Systems", - "doi": "10.1103/physrevlett.123.090602", - "nodeyear": 2019, - "ref-by-count": 56, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1120701000", - "attributes": { - "title": "Level repulsion and dynamics in the finite one-dimensional Anderson model", - "doi": "10.1103/physreve.100.022142", - "nodeyear": 2019, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1120398331", - "attributes": { - "title": "Realization of density-dependent Peierls phases to engineer quantized gauge fields coupled to ultracold matter", - "doi": "10.1038/s41567-019-0615-4", - "nodeyear": 2019, - "ref-by-count": 102, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1120211774", - "attributes": { - "title": "QuSpin: a Python package for dynamics and exact diagonalisation of quantum many body systems. Part II: bosons, fermions and higher spins", - "doi": "10.21468/scipostphys.7.2.020", - "nodeyear": 2019, - "ref-by-count": 68, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1120342145", - "attributes": { - "title": "Excited-state quantum phase transition and the quantum-speed-limit time", - "doi": "10.1103/physreva.100.022118", - "nodeyear": 2019, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1120310683", - "attributes": { - "title": "Nonequilibrium susceptibility in photoinduced Floquet states", - "doi": "10.1103/physrevb.100.075127", - "nodeyear": 2019, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1120248299", - "attributes": { - "title": "Quasiparticles of a periodically driven quantum dot coupled between superconducting and normal leads", - "doi": "10.1103/physrevb.100.085414", - "nodeyear": 2019, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1120211967", - "attributes": { - "title": "Light-induced d-wave superconductivity through Floquet-engineered Fermi surfaces in cuprates", - "doi": "10.1103/physrevb.100.075115", - "nodeyear": 2019, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1120144828", - "attributes": { - "title": "Dispersion-suppressed topological Thouless pumping", - "doi": "10.1103/physrevb.100.064302", - "nodeyear": 2019, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1129971658", - "attributes": { - "title": "QuSpin: a Python Package for Dynamics and Exact Diagonalisation of Quantum Many Body Systems. Part II: bosons, fermions and higher spins", - "doi": "10.21468/scipost.report.1085", - "nodeyear": 2019, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1120021739", - "attributes": { - "title": "Dynamical signatures of quantum chaos and relaxation time scales in a spin-boson system", - "doi": "10.1103/physreve.100.012218", - "nodeyear": 2019, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1120025014", - "attributes": { - "title": "Relaxation to Gaussian and generalized Gibbs states in systems of particles with quadratic Hamiltonians", - "doi": "10.1103/physreve.100.012146", - "nodeyear": 2019, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1122873965", - "attributes": { - "title": "Can Naturally Pulsating Prefilming Slurry Atomization Be Enhanced by Artificial External Modulation?", - "doi": "10.1115/ajkfluids2019-4882", - "nodeyear": 2019, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1129960633", - "attributes": { - "title": "QuSpin: a Python Package for Dynamics and Exact Diagonalisation of Quantum Many Body Systems. Part II: bosons, fermions and higher spins", - "doi": "10.21468/scipost.report.1065", - "nodeyear": 2019, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1118043792", - "attributes": { - "title": "How to Dress Radio-Frequency Photons with Tunable Momentum", - "doi": "10.1103/physrevlett.123.033203", - "nodeyear": 2019, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1120033159", - "attributes": { - "title": "Rabi-resonant behavior of periodically driven correlated fermion systems", - "doi": "10.1103/physrevb.100.041116", - "nodeyear": 2019, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1119959099", - "attributes": { - "title": "Nonlinear optical response of the \u03b1-T3 model due to the nontrivial topology of the band dispersion", - "doi": "10.1103/physrevb.100.035440", - "nodeyear": 2019, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1119952776", - "attributes": { - "title": "Analog of Hamilton-Jacobi theory for the time-evolution operator", - "doi": "10.1103/physreva.100.012132", - "nodeyear": 2019, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1119919209", - "attributes": { - "title": "Floquet-engineered quantum state manipulation in a noisy qubit", - "doi": "10.1103/physreva.100.012341", - "nodeyear": 2019, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1119787578", - "attributes": { - "title": "Non-Abelian geometric phases in periodically driven systems", - "doi": "10.1103/physreva.100.012127", - "nodeyear": 2019, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1119784980", - "attributes": { - "title": "Swift heat transfer by fast-forward driving in open quantum systems", - "doi": "10.1103/physreva.100.012126", - "nodeyear": 2019, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1118069090", - "attributes": { - "title": "Laser control of magnonic topological phases in antiferromagnets", - "doi": "10.1103/physrevb.100.014421", - "nodeyear": 2019, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1118014967", - "attributes": { - "title": "High-frequency expansion for Floquet prethermal phases with emergent symmetries: Application to time crystals and Floquet engineering", - "doi": "10.1103/physrevb.100.020301", - "nodeyear": 2019, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1118012672", - "attributes": { - "title": "Dynamical chaotic phases and constrained quantum dynamics", - "doi": "10.1103/physreva.100.012117", - "nodeyear": 2019, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1117972269", - "attributes": { - "title": "Strong frequency dependence of transport in the driven disordered central-site model", - "doi": "10.1103/physrevb.100.014201", - "nodeyear": 2019, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1117943417", - "attributes": { - "title": "Electron pumping in the strong coupling and non-Markovian regime: A reaction coordinate mapping approach", - "doi": "10.1103/physrevb.100.035109", - "nodeyear": 2019, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1117728688", - "attributes": { - "title": "Topologically protected braiding in a single wire using Floquet Majorana modes", - "doi": "10.1103/physrevb.100.041102", - "nodeyear": 2019, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1116648359", - "attributes": { - "title": "Accessing electromagnetic properties of matter with cylindrical vector beams", - "doi": "10.1088/1367-2630/ab26d1", - "nodeyear": 2019, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1113330752", - "attributes": { - "title": "Photo-induced Floquet Weyl magnons in noncollinear antiferromagnets", - "doi": "10.1016/j.aop.2019.04.003", - "nodeyear": 2019, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1113236708", - "attributes": { - "title": "Extreme matter in electromagnetic fields and rotation", - "doi": "10.1016/j.ppnp.2019.04.001", - "nodeyear": 2019, - "ref-by-count": 26, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1112366493", - "attributes": { - "title": "State-dependent act-and-wait time-delayed feedback control algorithm", - "doi": "10.1016/j.cnsns.2019.02.018", - "nodeyear": 2019, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1117476838", - "attributes": { - "title": "Exact Evaluation of Statistical Moments in Superradiant Emission", - "doi": "10.3390/mca24020066", - "nodeyear": 2019, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1117346459", - "attributes": { - "title": "Many-Body Localization in the Presence of a Central Qudit", - "doi": "10.1103/physrevlett.122.240402", - "nodeyear": 2019, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1117411673", - "attributes": { - "title": "Excited-state quantum phase transitions in systems with two degrees of freedom. III. Interacting boson systems", - "doi": "10.1103/physrevc.99.064323", - "nodeyear": 2019, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1117307345", - "attributes": { - "title": "Layered chaos in mean-field and quantum many-body dynamics", - "doi": "10.1103/physreva.99.063609", - "nodeyear": 2019, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1117164490", - "attributes": { - "title": "Electron pairing in nanostructures driven by an oscillating field", - "doi": "10.1103/physrevb.99.235416", - "nodeyear": 2019, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1117020737", - "attributes": { - "title": "Microscopic theory for the light-induced anomalous Hall effect in graphene", - "doi": "10.1103/physrevb.99.214302", - "nodeyear": 2019, - "ref-by-count": 71, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1116850435", - "attributes": { - "title": "Topology and localization of a periodically driven Kitaev model", - "doi": "10.1103/physrevb.99.235408", - "nodeyear": 2019, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1116136000", - "attributes": { - "title": "Single-scan acquisition of multiple multidimensional spectra", - "doi": "10.1364/optica.6.000735", - "nodeyear": 2019, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "09:0.33;10:0.33;02:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1115676205", - "attributes": { - "title": "Gravitational wave driving of a gapped holographic system", - "doi": "10.1007/jhep05(2019)161", - "nodeyear": 2019, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1115666769", - "attributes": { - "title": "Observation of scalable and deterministic multi-atom Dicke states in an atomic vapor", - "doi": "10.1364/ol.44.002795", - "nodeyear": 2019, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "02:0.60;09:0.40", - "level": "cite_l2" - } - }, - { - "id": "pub.1114819653", - "attributes": { - "title": "Method for Finding the Exact Effective Hamiltonian of Time\u2010Driven Quantum Systems", - "doi": "10.1002/andp.201900035", - "nodeyear": 2019, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1114044946", - "attributes": { - "title": "Magnonic Floquet Quantum Spin Hall Insulator in Bilayer Collinear Antiferromagnets", - "doi": "10.1038/s41598-019-43702-9", - "nodeyear": 2019, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1113910487", - "attributes": { - "title": "Observation of Anomalous \u03c0 Modes in Photonic Floquet Engineering", - "doi": "10.1103/physrevlett.122.173901", - "nodeyear": 2019, - "ref-by-count": 50, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1113910476", - "attributes": { - "title": "Quantum Spin Dynamics in Fock Space Following Quenches: Caustics and Vortices", - "doi": "10.1103/physrevlett.122.170402", - "nodeyear": 2019, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1114054109", - "attributes": { - "title": "Anatomy of skin modes and topology in non-Hermitian systems", - "doi": "10.1103/physrevb.99.201103", - "nodeyear": 2019, - "ref-by-count": 253, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1114042284", - "attributes": { - "title": "Floquet spin and spin-orbital Hamiltonians and doublon-holon generations in periodically driven Mott insulators", - "doi": "10.1103/physrevb.99.205111", - "nodeyear": 2019, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1110902421", - "attributes": { - "title": "Tunneling of two interacting atoms from excited states", - "doi": "10.1016/j.physe.2018.12.026", - "nodeyear": 2019, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1113484172", - "attributes": { - "title": "Measuring topology from dynamics by obtaining the Chern number from a linking number", - "doi": "10.1038/s41467-019-09668-y", - "nodeyear": 2019, - "ref-by-count": 93, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1113409952", - "attributes": { - "title": "Quantum localization bounds Trotter errors in digital quantum simulation", - "doi": "10.1126/sciadv.aau8342", - "nodeyear": 2019, - "ref-by-count": 37, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1112781951", - "attributes": { - "title": "Emergence of photo-induced multiple topological phases on square-octagon lattice", - "doi": "10.1088/1361-648x/ab1026", - "nodeyear": 2019, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1110424594", - "attributes": { - "title": "Cavity-QED interactions of several atoms", - "doi": "10.1088/1361-6455/aaf6d7", - "nodeyear": 2019, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1115224353", - "attributes": { - "title": "Flow Equation Approach to Periodically Driven Quantum Systems", - "doi": "10.1103/physrevx.9.021037", - "nodeyear": 2019, - "ref-by-count": 42, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1114045023", - "attributes": { - "title": "Prethermalization and Thermalization in Isolated Quantum Systems", - "doi": "10.1103/physrevx.9.021027", - "nodeyear": 2019, - "ref-by-count": 69, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1113678661", - "attributes": { - "title": "Effect of noise on Bloch oscillations and Wannier-Stark localization", - "doi": "10.1103/physrevb.99.155149", - "nodeyear": 2019, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1113626564", - "attributes": { - "title": "Quantum phase transitions triggered by a four-level atomic system in dissipative environments", - "doi": "10.1103/physreva.99.043829", - "nodeyear": 2019, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1113308230", - "attributes": { - "title": "Accelerating adiabatic protocols for entangling two qubits in circuit QED", - "doi": "10.1103/physreva.99.042315", - "nodeyear": 2019, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1116854479", - "attributes": { - "title": "Exponential Bound for the Heating Rate of Periodically Driven Spin Systems", - "doi": "10.1134/s1063776119030130", - "nodeyear": 2019, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1111062357", - "attributes": { - "title": "Multipartite-entanglement tomography of a quantum simulator", - "doi": "10.1088/1367-2630/aafb8c", - "nodeyear": 2019, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1112264021", - "attributes": { - "title": "Manipulating Cooper pairs with a controllable momentum in periodically driven degenerate Fermi gases", - "doi": "10.1088/1361-6455/ab08df", - "nodeyear": 2019, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1112736421", - "attributes": { - "title": "Parametric Heating in a 2D Periodically Driven Bosonic System: Beyond the Weakly Interacting Regime", - "doi": "10.1103/physrevx.9.011047", - "nodeyear": 2019, - "ref-by-count": 25, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1112555157", - "attributes": { - "title": "Optical control of competing exchange interactions and coherent spin-charge coupling in two-orbital Mott insulators", - "doi": "10.21468/scipostphys.6.3.027", - "nodeyear": 2019, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1112989773", - "attributes": { - "title": "Topological frequency conversion in a driven dissipative quantum cavity", - "doi": "10.1103/physrevb.99.094311", - "nodeyear": 2019, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1112941993", - "attributes": { - "title": "Photonic Floquet topological insulators with fluctuations and disorders", - "doi": "10.1103/physreva.99.033844", - "nodeyear": 2019, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1112857110", - "attributes": { - "title": "Work exchange, geometric magnetization, and fluctuation-dissipation relations in a quantum dot under adiabatic magnetoelectric driving", - "doi": "10.1103/physrevb.99.115424", - "nodeyear": 2019, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1112687817", - "attributes": { - "title": "Optically induced topological states on the surface of mercury telluride", - "doi": "10.1103/physrevb.99.115411", - "nodeyear": 2019, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1112472200", - "attributes": { - "title": "Quantum simulation of multiphoton and nonlinear dissipative spin-boson models", - "doi": "10.1103/physreva.99.032303", - "nodeyear": 2019, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1112465992", - "attributes": { - "title": "Topological classification of quasiperiodically driven quantum systems", - "doi": "10.1103/physrevb.99.064306", - "nodeyear": 2019, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1112265114", - "attributes": { - "title": "Control of quantum dynamics of electron transfer in molecular loop structures: Spontaneous breaking of chiral symmetry under strong decoherence", - "doi": "10.1103/physrevb.99.064301", - "nodeyear": 2019, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1112062976", - "attributes": { - "title": "Engineering Dirac states in graphene: Coexisting type-I and type-II Floquet-Dirac fermions", - "doi": "10.1103/physrevb.99.075121", - "nodeyear": 2019, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1111443711", - "attributes": { - "title": "Integrable spin-${\\frac{1}{2}}$ Richardson\u2013Gaudin XYZ models in an arbitrary magnetic field", - "doi": "10.1088/1751-8121/aafe9b", - "nodeyear": 2019, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1111540938", - "attributes": { - "title": "Reducibility for a fast-driven linear Klein\u2013Gordon equation", - "doi": "10.1007/s10231-019-00823-2", - "nodeyear": 2019, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1111440115", - "attributes": { - "title": "Quantum and Classical Lyapunov Exponents in Atom-Field Interaction Systems", - "doi": "10.1103/physrevlett.122.024101", - "nodeyear": 2019, - "ref-by-count": 80, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1111323071", - "attributes": { - "title": "Asymptotic Prethermalization in Periodically Driven Classical Spin Chains", - "doi": "10.1103/physrevlett.122.010602", - "nodeyear": 2019, - "ref-by-count": 35, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1110719005", - "attributes": { - "title": "Reversible to irreversible transitions in periodically driven skyrmion systems", - "doi": "10.1088/1367-2630/aaf8dd", - "nodeyear": 2019, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1112988887", - "attributes": { - "title": "Topological photonics", - "doi": "10.1103/revmodphys.91.015006", - "nodeyear": 2019, - "ref-by-count": 1179, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1111668834", - "attributes": { - "title": "Fibonacci steady states in a driven integrable quantum system", - "doi": "10.1103/physrevb.99.020306", - "nodeyear": 2019, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1111666460", - "attributes": { - "title": "Optimization of quantized charge pumping using full counting statistics", - "doi": "10.1103/physrevb.99.035437", - "nodeyear": 2019, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1111515569", - "attributes": { - "title": "Floquet engineering in superconducting circuits: From arbitrary spin-spin interactions to the Kitaev honeycomb model", - "doi": "10.1103/physreva.99.012333", - "nodeyear": 2019, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1111459176", - "attributes": { - "title": "Impact of nonequilibrium fluctuations on prethermal dynamical phase transitions in long-range interacting spin chains", - "doi": "10.1103/physrevb.99.045128", - "nodeyear": 2019, - "ref-by-count": 35, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1111314608", - "attributes": { - "title": "Engineering bilinear mode coupling in circuit QED: Theory and experiment", - "doi": "10.1103/physreva.99.012314", - "nodeyear": 2019, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1111062951", - "attributes": { - "title": "Edge and bulk localization of Floquet topological superconductors", - "doi": "10.1103/physrevb.99.014301", - "nodeyear": 2019, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1110909831", - "attributes": { - "title": "Communication: Gibbs phenomenon and the emergence of the steady-state in quantum transport", - "doi": "10.1063/1.5061759", - "nodeyear": 2018, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1110787100", - "attributes": { - "title": "Bloch oscillation of Weyl metal along synthetic dimensions", - "doi": "10.1088/1674-1056/27/12/126701", - "nodeyear": 2018, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1110647887", - "attributes": { - "title": "Floquet Engineering of Quantum Materials", - "doi": "10.1146/annurev-conmatphys-031218-013423", - "nodeyear": 2018, - "ref-by-count": 240, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1110455993", - "attributes": { - "title": "Floquet Dynamics in Driven Fermi-Hubbard Systems", - "doi": "10.1103/physrevlett.121.233603", - "nodeyear": 2018, - "ref-by-count": 51, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1110379274", - "attributes": { - "title": "Floquet Mechanism for Non-Abelian Fractional Quantum Hall States", - "doi": "10.1103/physrevlett.121.237401", - "nodeyear": 2018, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1110363972", - "attributes": { - "title": "Experimental Demonstration of Dynamical Input Isolation in Nonadiabatically Modulated Photonic Cavities", - "doi": "10.1021/acsphotonics.8b01310", - "nodeyear": 2018, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1110910541", - "attributes": { - "title": "Steady states of a quasiperiodically driven integrable system", - "doi": "10.1103/physrevb.98.245144", - "nodeyear": 2018, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1110910519", - "attributes": { - "title": "Transient Floquet engineering of superconductivity", - "doi": "10.1103/physrevb.98.235149", - "nodeyear": 2018, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1110831877", - "attributes": { - "title": "Ergodic-localized junctions in periodically driven systems", - "doi": "10.1103/physrevb.98.224307", - "nodeyear": 2018, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1110708995", - "attributes": { - "title": "Reinforcement learning for autonomous preparation of Floquet-engineered states: Inverting the quantum Kapitza oscillator", - "doi": "10.1103/physrevb.98.224305", - "nodeyear": 2018, - "ref-by-count": 37, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1110396032", - "attributes": { - "title": "Photocontrol of magnetic structure in an itinerant magnet", - "doi": "10.1103/physrevb.98.214408", - "nodeyear": 2018, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1110269247", - "attributes": { - "title": "Light-Induced Coherence in an Atom-Cavity System", - "doi": "10.1103/physrevlett.121.220405", - "nodeyear": 2018, - "ref-by-count": 21, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1110275806", - "attributes": { - "title": "From Linear to Nonlinear Responses of Thermal Pure Quantum States", - "doi": "10.1103/physrevlett.121.220601", - "nodeyear": 2018, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1107970491", - "attributes": { - "title": "Relaxation, chaos, and thermalization in a three-mode model of a Bose\u2013Einstein condensate", - "doi": "10.1088/1367-2630/aaed68", - "nodeyear": 2018, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1110072642", - "attributes": { - "title": "Strong disorder RG approach \u2013 a short review of recent developments", - "doi": "10.1140/epjb/e2018-90434-8", - "nodeyear": 2018, - "ref-by-count": 39, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1111914501", - "attributes": { - "title": "Effective Schrodinger equation for one-dimensional systems with rapidly oscillating boundary conditions", - "doi": "10.1109/icumt.2018.8631204", - "nodeyear": 2018, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1110266071", - "attributes": { - "title": "Nonequilibrium selection of magnetic order in a driven triangular XY antiferromagnet", - "doi": "10.1103/physrevb.98.184432", - "nodeyear": 2018, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1109811573", - "attributes": { - "title": "Strong-disorder renormalization group for periodically driven systems", - "doi": "10.1103/physrevb.98.174203", - "nodeyear": 2018, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1109804585", - "attributes": { - "title": "Adaptive rotating-wave approximation for driven open quantum systems", - "doi": "10.1103/physreva.98.052111", - "nodeyear": 2018, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1108054136", - "attributes": { - "title": "Quantization of the Hall conductivity in the Harper-Hofstadter model", - "doi": "10.1103/physrevb.98.205112", - "nodeyear": 2018, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1108034986", - "attributes": { - "title": "Flat bands and dynamical localization of spin-orbit-coupled Bose-Einstein condensates", - "doi": "10.1103/physreva.98.053606", - "nodeyear": 2018, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1107871386", - "attributes": { - "title": "Berry Phases in Electronic Structure Theory", - "doi": "10.1017/9781316662205", - "nodeyear": 2018, - "ref-by-count": 159, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1107130576", - "attributes": { - "title": "Analytical description of the survival probability of coherent states in regular regimes", - "doi": "10.1088/1751-8121/aae2c3", - "nodeyear": 2018, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1107306817", - "attributes": { - "title": "Valley controlled spin-transfer torque in ferromagnetic graphene junctions", - "doi": "10.1088/1367-2630/aae513", - "nodeyear": 2018, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1107571622", - "attributes": { - "title": "Dynamical Control of Order in a Cavity-BEC System", - "doi": "10.1103/physrevlett.121.153001", - "nodeyear": 2018, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1107951663", - "attributes": { - "title": "Floquet analysis of a fractal-spectrum-generating periodically driven quantum system", - "doi": "10.1103/physreve.98.042217", - "nodeyear": 2018, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1107651369", - "attributes": { - "title": "Interplay of Floquet Lifshitz transitions and topological transitions in bilayer Dirac materials", - "doi": "10.1103/physrevb.98.165406", - "nodeyear": 2018, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1107651305", - "attributes": { - "title": "Detection of emitter-resonator coupling strength in the quantum Rabi model via an auxiliary resonator", - "doi": "10.1103/physreva.98.043812", - "nodeyear": 2018, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1107350062", - "attributes": { - "title": "Ab initio nonrelativistic quantum electrodynamics: Bridging quantum chemistry and quantum optics from weak to strong coupling", - "doi": "10.1103/physreva.98.043801", - "nodeyear": 2018, - "ref-by-count": 65, - "is_input_DOI": false, - "category_for": "03:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1107301894", - "attributes": { - "title": "Floquet\u2013Gibbs state in open quantum systems", - "doi": "10.1140/epjst/e2018-00087-1", - "nodeyear": 2018, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1107298680", - "attributes": { - "title": "Stabilization by dissipation and stochastic resonant activation in quantum metastable systems", - "doi": "10.1140/epjst/e2018-00121-x", - "nodeyear": 2018, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1107235090", - "attributes": { - "title": "Connecting nth order generalised quantum Rabi models: Emergence of nonlinear spin-boson coupling via spin rotations", - "doi": "10.1038/s41534-018-0096-9", - "nodeyear": 2018, - "ref-by-count": 26, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1106476468", - "attributes": { - "title": "Floquet perturbation theory: formalism and application to low-frequency limit", - "doi": "10.1088/1367-2630/aade37", - "nodeyear": 2018, - "ref-by-count": 35, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1107130953", - "attributes": { - "title": "Stability of Periodically Driven Topological Phases against Disorder", - "doi": "10.1103/physrevlett.121.126803", - "nodeyear": 2018, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1103720457", - "attributes": { - "title": "Artificial gauge fields and topology with ultracold atoms in optical lattices", - "doi": "10.1088/1361-6455/aac120", - "nodeyear": 2018, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1106352877", - "attributes": { - "title": "Floquet stroboscopic divisibility in non-Markovian dynamics", - "doi": "10.1088/1367-2630/aadcbd", - "nodeyear": 2018, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1106711291", - "attributes": { - "title": "From few- to many-body quantum systems", - "doi": "10.1088/2058-9565/aad913", - "nodeyear": 2018, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1106608664", - "attributes": { - "title": "Floquet Engineering of Multiorbital Mott Insulators: Applications to Orthorhombic Titanates", - "doi": "10.1103/physrevlett.121.107201", - "nodeyear": 2018, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1107231743", - "attributes": { - "title": "Spin-dependent Andreev reflection in spin-orbit coupled systems by breaking time-reversal symmetry", - "doi": "10.1103/physrevb.98.125424", - "nodeyear": 2018, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1106912640", - "attributes": { - "title": "Floquet prethermalization in periodically driven classical spin systems", - "doi": "10.1103/physrevb.98.104303", - "nodeyear": 2018, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1106809654", - "attributes": { - "title": "Charge density wave and charge pump of interacting fermions in circularly shaken hexagonal optical lattices", - "doi": "10.1103/physreva.98.033601", - "nodeyear": 2018, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1106602075", - "attributes": { - "title": "Floquet scattering theory based on effective Hamiltonians of driven systems", - "doi": "10.1103/physrevb.98.121101", - "nodeyear": 2018, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1106159222", - "attributes": { - "title": "Artificial gauge fields in materials and engineered systems", - "doi": "10.1016/j.crhy.2018.03.002", - "nodeyear": 2018, - "ref-by-count": 100, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1105306956", - "attributes": { - "title": "High fidelity Dicke-state generation with Lyapunov control in circuit QED system", - "doi": "10.1016/j.aop.2018.07.005", - "nodeyear": 2018, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1104255664", - "attributes": { - "title": "Driven dissipative dynamics and topology of quantum impurity systems", - "doi": "10.1016/j.crhy.2018.04.003", - "nodeyear": 2018, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1106352452", - "attributes": { - "title": "A microscopic Kapitza pendulum", - "doi": "10.1038/s41598-018-31392-8", - "nodeyear": 2018, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1106412628", - "attributes": { - "title": "Floquet quantum criticality", - "doi": "10.1073/pnas.1805796115", - "nodeyear": 2018, - "ref-by-count": 30, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1106276823", - "attributes": { - "title": "Spin Polarization through Floquet Resonances in a Driven Central Spin Model", - "doi": "10.1103/physrevlett.121.080401", - "nodeyear": 2018, - "ref-by-count": 21, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1105481744", - "attributes": { - "title": "Wiseman\u2013Milburn control for the Lipkin\u2013Meshkov\u2013Glick model", - "doi": "10.1088/1751-8121/aad2c3", - "nodeyear": 2018, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1106081003", - "attributes": { - "title": "Asymptotic Floquet states of a periodically driven spin-boson system in the nonperturbative coupling regime", - "doi": "10.1103/physreve.98.022111", - "nodeyear": 2018, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1105993631", - "attributes": { - "title": "Exploring the possibilities of dynamical quantum phase transitions in the presence of a Markovian bath", - "doi": "10.1038/s41598-018-30377-x", - "nodeyear": 2018, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1107206378", - "attributes": { - "title": "Non-equilibrium Dynamical Mean-Field Theory", - "doi": "10.1007/978-3-319-42913-7_1-1", - "nodeyear": 2018, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1105647673", - "attributes": { - "title": "Strong light-field effects driven by nearly single-cycle 7 fs light-field in correlated organic conductors", - "doi": "10.1088/1361-6455/aad40a", - "nodeyear": 2018, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1106391022", - "attributes": { - "title": "Magnus expansion for a chirped quantum two-level system", - "doi": "10.1103/physreva.98.023855", - "nodeyear": 2018, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1106258757", - "attributes": { - "title": "Fate of current, residual energy, and entanglement entropy in aperiodic driving of one-dimensional Jordan-Wigner integrable models", - "doi": "10.1103/physrevb.98.064305", - "nodeyear": 2018, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1105855817", - "attributes": { - "title": "From the Keldysh Formalism to Non-equilibrium Dynamical Mean-Field Theory", - "doi": "10.1007/978-3-319-94956-7_3", - "nodeyear": 2018, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1105571339", - "attributes": { - "title": "Generation of atypical hopping and interactions by kinetic driving", - "doi": "10.1088/1367-2630/aad376", - "nodeyear": 2018, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1105686278", - "attributes": { - "title": "Universal Fluctuations of Floquet Topological Invariants at Low Frequencies", - "doi": "10.1103/physrevlett.121.036402", - "nodeyear": 2018, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1105624464", - "attributes": { - "title": "Anomalous Thermalization in Quantum Collective Models", - "doi": "10.1103/physrevlett.121.030602", - "nodeyear": 2018, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1105577723", - "attributes": { - "title": "Violent relaxation in quantum fluids with long-range interactions", - "doi": "10.1103/physreve.98.012112", - "nodeyear": 2018, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1107278146", - "attributes": { - "title": "Reinforcement Learning in Different Phases of Quantum Control", - "doi": "10.1103/physrevx.8.031086", - "nodeyear": 2018, - "ref-by-count": 163, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1105919059", - "attributes": { - "title": "Dynamical localization-delocalization crossover in the Aubry-Andr\u00e9-Harper model", - "doi": "10.1103/physreva.98.013635", - "nodeyear": 2018, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1105752007", - "attributes": { - "title": "Quantum quench dynamics in Dicke superradiance models", - "doi": "10.1103/physreva.98.013836", - "nodeyear": 2018, - "ref-by-count": 30, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1105686214", - "attributes": { - "title": "Probing microscopic models for system-bath interactions via parametric driving", - "doi": "10.1103/physreva.98.012122", - "nodeyear": 2018, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1105672523", - "attributes": { - "title": "Overcoming dispersive spreading of quantum wave packets via periodic nonlinear kicking", - "doi": "10.1103/physreva.98.013620", - "nodeyear": 2018, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1105590292", - "attributes": { - "title": "Ground-state phase diagram of the one-dimensional t-J model with pair hopping terms", - "doi": "10.1103/physrevb.98.035116", - "nodeyear": 2018, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1105590279", - "attributes": { - "title": "Observation of Floquet bands in driven spin-orbit-coupled Fermi gases", - "doi": "10.1103/physreva.98.013615", - "nodeyear": 2018, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1105217433", - "attributes": { - "title": "Entanglement in Finite Quantum Systems Under Twisted Boundary Conditions", - "doi": "10.1007/s13538-018-0587-3", - "nodeyear": 2018, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1104382572", - "attributes": { - "title": "Strong disorder renormalization for the dynamics of many-body-localized systems: iterative elimination of the fastest degree of freedom via the Floquet expansion", - "doi": "10.1088/1751-8121/aac672", - "nodeyear": 2018, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1105237498", - "attributes": { - "title": "Solid-state magnetic traps and lattices", - "doi": "10.1103/physrevb.97.235451", - "nodeyear": 2018, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1105229539", - "attributes": { - "title": "NOON state of Bose atoms in the double-well potential via an excited-state quantum phase transition", - "doi": "10.1103/physreva.97.063624", - "nodeyear": 2018, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1105020595", - "attributes": { - "title": "Lindblad-Floquet description of finite-time quantum heat engines", - "doi": "10.1103/physreva.97.062121", - "nodeyear": 2018, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1104999161", - "attributes": { - "title": "Floquet Quantum Simulation with Superconducting Qubits", - "doi": "10.1103/physrevapplied.9.064029", - "nodeyear": 2018, - "ref-by-count": 27, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1104586548", - "attributes": { - "title": "Onset of Floquet thermalization", - "doi": "10.1103/physrevb.97.245122", - "nodeyear": 2018, - "ref-by-count": 41, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1104337736", - "attributes": { - "title": "Heating in Integrable Time-Periodic Systems", - "doi": "10.1103/physrevlett.120.220602", - "nodeyear": 2018, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1104046499", - "attributes": { - "title": "From quantum heat engines to laser cooling: Floquet theory beyond the Born\u2013Markov approximation", - "doi": "10.1088/1367-2630/aac583", - "nodeyear": 2018, - "ref-by-count": 23, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1104217963", - "attributes": { - "title": "Floquet Supersymmetry", - "doi": "10.1103/physrevlett.120.210603", - "nodeyear": 2018, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1104046048", - "attributes": { - "title": "Quantum transition probabilities during a perturbing pulse: Differences between the nonadiabatic results and Fermi\u2019s golden rule forms", - "doi": "10.1063/1.5019172", - "nodeyear": 2018, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1104174226", - "attributes": { - "title": "Replica Resummation of the Baker-Campbell-Hausdorff Series", - "doi": "10.1103/physrevlett.120.200607", - "nodeyear": 2018, - "ref-by-count": 30, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1103957661", - "attributes": { - "title": "Integrable Time-Dependent Quantum Hamiltonians", - "doi": "10.1103/physrevlett.120.190402", - "nodeyear": 2018, - "ref-by-count": 29, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1103891869", - "attributes": { - "title": "Resonant Thermalization of Periodically Driven Strongly Correlated Electrons", - "doi": "10.1103/physrevlett.120.197601", - "nodeyear": 2018, - "ref-by-count": 35, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1104244423", - "attributes": { - "title": "Exact results for the Floquet coin toss for driven integrable models", - "doi": "10.1103/physrevb.97.184308", - "nodeyear": 2018, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1104186237", - "attributes": { - "title": "Effects of quantum coherence on work statistics", - "doi": "10.1103/physreva.97.052122", - "nodeyear": 2018, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1103957640", - "attributes": { - "title": "Low-frequency phase diagram of irradiated graphene and a periodically driven spin-12 XY chain", - "doi": "10.1103/physrevb.97.205415", - "nodeyear": 2018, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1103957630", - "attributes": { - "title": "Floquet topological polaritons in semiconductor microcavities", - "doi": "10.1103/physrevb.97.195305", - "nodeyear": 2018, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1103799511", - "attributes": { - "title": "Concurrence of dynamical phase transitions at finite temperature in the fully connected transverse-field Ising model", - "doi": "10.1103/physrevb.97.174401", - "nodeyear": 2018, - "ref-by-count": 45, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1105625178", - "attributes": { - "title": "On the Effect of an Inhomogeneous Magnetic Field on High-Frequency Asymptotic Behaviors of Correlation Functions of Spin Lattices", - "doi": "10.1134/s002136401809014x", - "nodeyear": 2018, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1103354626", - "attributes": { - "title": "Topological Floquet-Thouless Energy Pump", - "doi": "10.1103/physrevlett.120.150601", - "nodeyear": 2018, - "ref-by-count": 32, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1103223307", - "attributes": { - "title": "Probing the strongly driven spin-boson model in a superconducting quantum circuit", - "doi": "10.1038/s41467-018-03626-w", - "nodeyear": 2018, - "ref-by-count": 47, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1101044952", - "attributes": { - "title": "Dynamical quantum phase transitions: a review", - "doi": "10.1088/1361-6633/aaaf9a", - "nodeyear": 2018, - "ref-by-count": 245, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1101270698", - "attributes": { - "title": "Parametric instabilities in resonantly-driven Bose\u2013Einstein condensates", - "doi": "10.1088/2058-9565/aab2b9", - "nodeyear": 2018, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1100407275", - "attributes": { - "title": "Floquet many-body engineering: topology and many-body physics in phase space lattices", - "doi": "10.1088/1367-2630/aaa7c3", - "nodeyear": 2018, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1106249535", - "attributes": { - "title": "Stabilizing effect of driving and dissipation on quantum metastable states", - "doi": "10.1103/physreva.97.042109", - "nodeyear": 2018, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1106243826", - "attributes": { - "title": "Floquet Weyl semimetals in light-irradiated type-II and hybrid line-node semimetals", - "doi": "10.1103/physrevb.97.155152", - "nodeyear": 2018, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1103695948", - "attributes": { - "title": "Semiconductor quantum well irradiated by a two-mode electromagnetic field as a terahertz emitter", - "doi": "10.1103/physreva.97.043860", - "nodeyear": 2018, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1103614809", - "attributes": { - "title": "Floquet protocols of adiabatic state flips and reallocation of exceptional points", - "doi": "10.1103/physreva.97.042119", - "nodeyear": 2018, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1103567271", - "attributes": { - "title": "Dynamical quantum phase transitions in extended transverse Ising models", - "doi": "10.1103/physrevb.97.134306", - "nodeyear": 2018, - "ref-by-count": 23, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1103567269", - "attributes": { - "title": "Floquet-Network Theory of Nonreciprocal Transport", - "doi": "10.1103/physrevapplied.9.044031", - "nodeyear": 2018, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "09:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1103567266", - "attributes": { - "title": "Nonadiabatic effects in periodically driven dissipative open quantum systems", - "doi": "10.1103/physreva.97.043851", - "nodeyear": 2018, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1103476382", - "attributes": { - "title": "At the Limits of Criticality-Based Quantum Metrology: Apparent Super-Heisenberg Scaling Revisited", - "doi": "10.1103/physrevx.8.021022", - "nodeyear": 2018, - "ref-by-count": 35, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1103285503", - "attributes": { - "title": "Vlasov dynamics of periodically driven systems", - "doi": "10.1063/1.5026159", - "nodeyear": 2018, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1101728734", - "attributes": { - "title": "Floquet Engineering in Quantum Chains", - "doi": "10.1103/physrevlett.120.127601", - "nodeyear": 2018, - "ref-by-count": 25, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1101728724", - "attributes": { - "title": "Periodically Driven Array of Single Rydberg Atoms", - "doi": "10.1103/physrevlett.120.123204", - "nodeyear": 2018, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1101699045", - "attributes": { - "title": "Well-Known Distinctive Signatures of Quantum Phase Transition in Shape Coexistence Configuration of Nuclei", - "doi": "10.1007/s13538-018-0561-0", - "nodeyear": 2018, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1101635473", - "attributes": { - "title": "Subexponentially Growing Hilbert Space and Nonconcentrating Distributions in a Constrained Spin Model", - "doi": "10.1007/s10955-018-2016-y", - "nodeyear": 2018, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1101459080", - "attributes": { - "title": "Photoinduced Topological Phase Transitions in Topological Magnon Insulators", - "doi": "10.1038/s41598-018-22779-8", - "nodeyear": 2018, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1100249419", - "attributes": { - "title": "Zero refractive index in time-Floquet acoustic metamaterials", - "doi": "10.1063/1.5006542", - "nodeyear": 2018, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1101875909", - "attributes": { - "title": "Photonic realization of a transition to a strongly driven Floquet topological phase", - "doi": "10.1103/physreva.97.031801", - "nodeyear": 2018, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1101865179", - "attributes": { - "title": "Simulating magnetic fields in Rydberg-dressed neutral atoms", - "doi": "10.1103/physreva.97.033414", - "nodeyear": 2018, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1101787426", - "attributes": { - "title": "Amplified and tunable transverse and longitudinal spin-photon coupling in hybrid circuit-QED", - "doi": "10.1103/physrevb.97.125429", - "nodeyear": 2018, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1101568086", - "attributes": { - "title": "Nonequilibrium steady states and resonant tunneling in time-periodically driven systems with interactions", - "doi": "10.1103/physrevb.97.125115", - "nodeyear": 2018, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1101270671", - "attributes": { - "title": "Floquet high Chern insulators in periodically driven chirally stacked multilayer graphene", - "doi": "10.1088/1367-2630/aab2c7", - "nodeyear": 2018, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1101203202", - "attributes": { - "title": "Realizing the Haldane Phase with Bosons in Optical Lattices", - "doi": "10.1103/physrevlett.120.085301", - "nodeyear": 2018, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1101164938", - "attributes": { - "title": "Control of Excitation Energy Transfer in Condensed Phase Molecular Systems by Floquet Engineering", - "doi": "10.1021/acs.jpclett.8b00067", - "nodeyear": 2018, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1101163815", - "attributes": { - "title": "Floquet Engineered Quadri-partite Lattice System as an Extension of the Topological Haldane Model", - "doi": "10.7566/jpsj.87.034711", - "nodeyear": 2018, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1100978693", - "attributes": { - "title": "Optical Trapping of Electrons in Graphene", - "doi": "10.1021/acsphotonics.7b01394", - "nodeyear": 2018, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:0.60;09:0.40", - "level": "cite_l2" - } - }, - { - "id": "pub.1086256884", - "attributes": { - "title": "Physics of muscle contraction", - "doi": "10.1088/1361-6633/aa7b9e", - "nodeyear": 2018, - "ref-by-count": 29, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1101132622", - "attributes": { - "title": "Statistical speed of quantum states: Generalized quantum Fisher information and Schatten speed", - "doi": "10.1103/physreva.97.022109", - "nodeyear": 2018, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1101046754", - "attributes": { - "title": "Nonlinear quantum Rabi model in trapped ions", - "doi": "10.1103/physreva.97.023624", - "nodeyear": 2018, - "ref-by-count": 29, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1100847489", - "attributes": { - "title": "Floquet topological phase transitions in a kicked Haldane-Chern insulator", - "doi": "10.1103/physrevb.97.085405", - "nodeyear": 2018, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1100847484", - "attributes": { - "title": "Symmetry breaking and the fermionic fractional Chern insulator in topologically trivial bands", - "doi": "10.1103/physrevb.97.085108", - "nodeyear": 2018, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1100693529", - "attributes": { - "title": "Isospin degree of freedom in even-even 68-76Ge and 62-70Zn isotopes", - "doi": "10.1140/epja/i2018-12448-y", - "nodeyear": 2018, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1100658085", - "attributes": { - "title": "Analogies of the classical Euler top with a rotor to spin squeezing and quantum phase transitions in a generalized Lipkin-Meshkov-Glick model", - "doi": "10.1038/s41598-018-20486-y", - "nodeyear": 2018, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1100590718", - "attributes": { - "title": "Enhancement and sign change of magnetic correlations in a driven quantum many-body system", - "doi": "10.1038/nature25135", - "nodeyear": 2018, - "ref-by-count": 87, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1100333755", - "attributes": { - "title": "Exceptional points near first- and second-order quantum phase transitions", - "doi": "10.1103/physreve.97.012112", - "nodeyear": 2018, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1100180200", - "attributes": { - "title": "Drive-induced delocalization in the Aubry-Andr\u00e9 model", - "doi": "10.1103/physreve.97.010101", - "nodeyear": 2018, - "ref-by-count": 23, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1100757504", - "attributes": { - "title": "Controllable continuous evolution of electronic states in a single quantum ring", - "doi": "10.1103/physrevb.97.041304", - "nodeyear": 2018, - "ref-by-count": 29, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1100700491", - "attributes": { - "title": "Absence of thermalization in finite isolated interacting Floquet systems", - "doi": "10.1103/physrevb.97.014311", - "nodeyear": 2018, - "ref-by-count": 27, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1100502468", - "attributes": { - "title": "Floquet band structure of a semi-Dirac system", - "doi": "10.1103/physrevb.97.035422", - "nodeyear": 2018, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1100502449", - "attributes": { - "title": "Dissipative phase transition in the open quantum Rabi model", - "doi": "10.1103/physreva.97.013825", - "nodeyear": 2018, - "ref-by-count": 46, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1101180204", - "attributes": { - "title": "A New First-Order Phase Transition for an Extended Jaynes\u2013Cummings\u2013Dicke Model with a High-Finesse Optical Cavity in the BEC System\u2020", - "doi": "10.1007/s10946-018-9686-4", - "nodeyear": 2018, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1092917025", - "attributes": { - "title": "Resonance enhancement of two photon absorption by magnetically trapped atoms in strong rf-fields", - "doi": "10.1016/j.physleta.2017.11.016", - "nodeyear": 2018, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1109707572", - "attributes": { - "title": "Statistical Benchmarks for Quantum Transport in Complex Systems, From Characterisation to Design", - "doi": "10.1007/978-3-319-93151-7", - "nodeyear": 2018, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1109706437", - "attributes": { - "title": "Equilibrium and Nonequilibrium Aspects of Phase Transitions in Quantum Physics", - "doi": "10.1007/978-3-030-00653-2", - "nodeyear": 2018, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1093034781", - "attributes": { - "title": "Special issue on addressing many-body problems with cold atoms and molecules", - "doi": "10.1088/1361-6455/aa9d13", - "nodeyear": 2017, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:0.60;03:0.40", - "level": "cite_l2" - } - }, - { - "id": "pub.1100299734", - "attributes": { - "title": "Quantum phase transition in an effective three-mode model of interacting bosons", - "doi": "10.1103/physreve.96.062146", - "nodeyear": 2017, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1099619049", - "attributes": { - "title": "Excited-state quantum phase transitions and their manifestations in an extended Dicke model", - "doi": "10.1063/1.5016143", - "nodeyear": 2017, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1099750796", - "attributes": { - "title": "Doublon-Holon Origin of the Subpeaks at the Hubbard Band Edges", - "doi": "10.1103/physrevlett.119.236402", - "nodeyear": 2017, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1101194950", - "attributes": { - "title": "Floquet prethermalization in the resonantly driven Hubbard model", - "doi": "10.1209/0295-5075/120/57001", - "nodeyear": 2017, - "ref-by-count": 31, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1099750800", - "attributes": { - "title": "Generalized Schrieffer-Wolff transformation of multiflavor Hubbard models", - "doi": "10.1103/physrevb.96.245106", - "nodeyear": 2017, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1093118725", - "attributes": { - "title": "Magnetic field fluctuations analysis for the ion trap implementation of the quantum Rabi model in the deep strong coupling regime", - "doi": "10.1080/09500340.2017.1404651", - "nodeyear": 2017, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1099862024", - "attributes": { - "title": "Collectivity and Periodic Orbits in a Chain of Interacting, Kicked Spins", - "doi": "10.12693/aphyspola.132.1661", - "nodeyear": 2017, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1093100577", - "attributes": { - "title": "Computation of the asymptotic states of modulated open quantum systems with a numerically exact realization of the quantum trajectory method", - "doi": "10.1103/physreve.96.053313", - "nodeyear": 2017, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1092756070", - "attributes": { - "title": "Experimentally simulating the dynamics of quantum light and matter at deep-strong coupling", - "doi": "10.1038/s41467-017-01061-x", - "nodeyear": 2017, - "ref-by-count": 123, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1092770968", - "attributes": { - "title": "Nonequilibrium Quantum Dynamics of Many-Body Systems", - "doi": "10.1007/978-3-319-68109-2_12", - "nodeyear": 2017, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1092687423", - "attributes": { - "title": "Increasing Performance of the Quantum Trajectory Method by Grouping Trajectories", - "doi": "10.1007/978-3-319-71255-0_11", - "nodeyear": 2017, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1092561474", - "attributes": { - "title": "Thermodynamic cost for classical counterdiabatic driving", - "doi": "10.1103/physreve.96.052107", - "nodeyear": 2017, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1092277819", - "attributes": { - "title": "Valley-selective topologically ordered states in irradiated bilayer graphene", - "doi": "10.1088/2053-1583/aa9471", - "nodeyear": 2017, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1092881230", - "attributes": { - "title": "Mixed state dynamical quantum phase transitions", - "doi": "10.1103/physrevb.96.180303", - "nodeyear": 2017, - "ref-by-count": 49, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1092718053", - "attributes": { - "title": "Topological edge-state engineering with high-frequency electromagnetic radiation", - "doi": "10.1103/physrevb.96.205127", - "nodeyear": 2017, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1092642445", - "attributes": { - "title": "Topological invariants of Floquet systems: General formulation, special properties, and Floquet topological defects", - "doi": "10.1103/physrevb.96.195303", - "nodeyear": 2017, - "ref-by-count": 86, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1092484424", - "attributes": { - "title": "Correspondence between a shaken honeycomb lattice and the Haldane model", - "doi": "10.1103/physreva.96.053603", - "nodeyear": 2017, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1092484423", - "attributes": { - "title": "Controlling the Floquet state population and observing micromotion in a periodically driven two-body quantum system", - "doi": "10.1103/physreva.96.053602", - "nodeyear": 2017, - "ref-by-count": 37, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1091324316", - "attributes": { - "title": "Canonical symplectic structure and structure-preserving geometric algorithms for Schr\u00f6dinger\u2013Maxwell systems", - "doi": "10.1016/j.jcp.2017.08.033", - "nodeyear": 2017, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1092396862", - "attributes": { - "title": "Absence of dynamical localization in interacting driven systems", - "doi": "10.21468/scipostphys.3.4.029", - "nodeyear": 2017, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1092104621", - "attributes": { - "title": "Light-Induced Anisotropic Skyrmion and Stripe Phases in a Rashba Ferromagnet", - "doi": "10.1103/physrevlett.119.147202", - "nodeyear": 2017, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1092104602", - "attributes": { - "title": "High-Temperature Nonequilibrium Bose Condensation Induced by a Hot Needle", - "doi": "10.1103/physrevlett.119.140602", - "nodeyear": 2017, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1092254361", - "attributes": { - "title": "Floquet engineering of long-range p-wave superconductivity: Beyond the high-frequency limit", - "doi": "10.1103/physrevb.96.155438", - "nodeyear": 2017, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1092218368", - "attributes": { - "title": "Periodic table for Floquet topological insulators", - "doi": "10.1103/physrevb.96.155118", - "nodeyear": 2017, - "ref-by-count": 163, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1092172298", - "attributes": { - "title": "Optically induced Lifshitz transition in bilayer graphene", - "doi": "10.1103/physrevb.96.155432", - "nodeyear": 2017, - "ref-by-count": 30, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1092104544", - "attributes": { - "title": "Phase transitions and adiabatic preparation of a fractional Chern insulator in a boson cold-atom model", - "doi": "10.1103/physrevb.96.165107", - "nodeyear": 2017, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1092104499", - "attributes": { - "title": "Asymptotic Floquet states of non-Markovian systems", - "doi": "10.1103/physreva.96.042103", - "nodeyear": 2017, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1092072911", - "attributes": { - "title": "Dynamical localization and the effects of aperiodicity in Floquet systems", - "doi": "10.1103/physrevb.96.144301", - "nodeyear": 2017, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1092072895", - "attributes": { - "title": "Oscillating potential well in the complex plane and the adiabatic theorem", - "doi": "10.1103/physreva.96.042101", - "nodeyear": 2017, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1092024589", - "attributes": { - "title": "Probing the excited-state quantum phase transition through statistics of Loschmidt echo and quantum work", - "doi": "10.1103/physreve.96.032142", - "nodeyear": 2017, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1092016824", - "attributes": { - "title": "Floquet topological magnons", - "doi": "10.1088/2399-6528/aa8843", - "nodeyear": 2017, - "ref-by-count": 30, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1091629732", - "attributes": { - "title": "Magnetic order in laser-irradiated kagome antiferromagnets", - "doi": "10.1088/2399-6528/aa8ab8", - "nodeyear": 2017, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1091511165", - "attributes": { - "title": "Evolution of Extended JC-Dicke Quantum Phase Transition with a Coupled Optical Cavity in Bose-Einstein Condensate System", - "doi": "10.1007/s10773-017-3531-3", - "nodeyear": 2017, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1092035474", - "attributes": { - "title": "Dynamical stabilization of a superfluid motion in the presence of an ac force", - "doi": "10.1103/physreva.96.033637", - "nodeyear": 2017, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1091937945", - "attributes": { - "title": "Effects of local periodic driving on transport and generation of bound states", - "doi": "10.1103/physrevb.96.104309", - "nodeyear": 2017, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1091808750", - "attributes": { - "title": "Synthetic random flux model in a periodically driven optical lattice", - "doi": "10.1103/physreva.96.033620", - "nodeyear": 2017, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1091676677", - "attributes": { - "title": "Laser-irradiated Kondo insulators: Controlling the Kondo effect and topological phases", - "doi": "10.1103/physrevb.96.115120", - "nodeyear": 2017, - "ref-by-count": 25, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1091655390", - "attributes": { - "title": "Probing the role of long-range interactions in the dynamics of a long-range Kitaev chain", - "doi": "10.1103/physrevb.96.125113", - "nodeyear": 2017, - "ref-by-count": 44, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1091256104", - "attributes": { - "title": "Asymptotic Floquet states of open quantum systems: the role of interaction", - "doi": "10.1088/1367-2630/aa7ceb", - "nodeyear": 2017, - "ref-by-count": 45, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1091261840", - "attributes": { - "title": "Adiabatic Theorem for Quantum Spin Systems", - "doi": "10.1103/physrevlett.119.060201", - "nodeyear": 2017, - "ref-by-count": 32, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1091081056", - "attributes": { - "title": "Algebraic Theory of Crystal Vibrations: Localization Properties of Wave Functions in Two-Dimensional Lattices", - "doi": "10.3390/cryst7080246", - "nodeyear": 2017, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1090692587", - "attributes": { - "title": "Equivalence of the Floquet\u2013Magnus and Fer Expansions to Investigate the Dynamics of a Spin System in the Three-Level System", - "doi": "10.1021/acs.jpca.7b01723", - "nodeyear": 2017, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1091439255", - "attributes": { - "title": "Universal nonanalytic behavior of the nonequilibrium Hall conductance in Floquet topological insulators", - "doi": "10.1103/physrevb.96.054306", - "nodeyear": 2017, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1091357776", - "attributes": { - "title": "Long-range interactions in antiferromagnetic quantum spin chains", - "doi": "10.1103/physrevb.96.054441", - "nodeyear": 2017, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1091268146", - "attributes": { - "title": "Spectral functions of a time-periodically driven Falicov-Kimball model: Real-space Floquet dynamical mean-field theory study", - "doi": "10.1103/physrevb.96.075134", - "nodeyear": 2017, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1091149741", - "attributes": { - "title": "Proposal for quantum many-body simulation and torsional matter-wave interferometry with a levitated nanodiamond", - "doi": "10.1103/physreva.96.023827", - "nodeyear": 2017, - "ref-by-count": 38, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1091132193", - "attributes": { - "title": "Topological phase transitions in finite-size periodically driven translationally invariant systems", - "doi": "10.1103/physreva.96.023610", - "nodeyear": 2017, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1091016901", - "attributes": { - "title": "Enhancement of superexchange pairing in the periodically driven Hubbard model", - "doi": "10.1103/physrevb.96.085104", - "nodeyear": 2017, - "ref-by-count": 43, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1086046359", - "attributes": { - "title": "From quantum optics to quantum technologies", - "doi": "10.1016/j.pquantelec.2017.06.002", - "nodeyear": 2017, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1091001773", - "attributes": { - "title": "Amplified Optomechanical Transduction of Virtual Radiation Pressure", - "doi": "10.1103/physrevlett.119.053601", - "nodeyear": 2017, - "ref-by-count": 43, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1090980852", - "attributes": { - "title": "Nonadiabatic dynamics of the excited states for the Lipkin-Meshkov-Glick model", - "doi": "10.1103/physreve.96.012153", - "nodeyear": 2017, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1090740511", - "attributes": { - "title": "Ultra\u2010Fast Control of Magnetic Relaxation in a Periodically Driven Hubbard Model", - "doi": "10.1002/andp.201700024", - "nodeyear": 2017, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1090697089", - "attributes": { - "title": "From thermal to excited-state quantum phase transition: The Dicke model", - "doi": "10.1103/physreve.96.012121", - "nodeyear": 2017, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1090639115", - "attributes": { - "title": "Entanglement Entropy of Eigenstates of Quadratic Fermionic Hamiltonians", - "doi": "10.1103/physrevlett.119.020601", - "nodeyear": 2017, - "ref-by-count": 61, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1090124343", - "attributes": { - "title": "Monodromy in Dicke superradiance", - "doi": "10.1088/1751-8121/aa7a95", - "nodeyear": 2017, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1090547461", - "attributes": { - "title": "Periodically driven random quantum spin chains: real-space renormalization for Floquet localized phases", - "doi": "10.1088/1742-5468/aa75dd", - "nodeyear": 2017, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1091314933", - "attributes": { - "title": "Aperiodically Driven Integrable Systems and Their Emergent Steady States", - "doi": "10.1103/physrevx.7.031034", - "nodeyear": 2017, - "ref-by-count": 32, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1090809058", - "attributes": { - "title": "Driving induced many-body localization", - "doi": "10.1103/physrevb.96.020201", - "nodeyear": 2017, - "ref-by-count": 25, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1090639004", - "attributes": { - "title": "Emergent topology and dynamical quantum phase transitions in two-dimensional closed quantum systems", - "doi": "10.1103/physrevb.96.014302", - "nodeyear": 2017, - "ref-by-count": 36, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1090537266", - "attributes": { - "title": "Probing and controlling spin chirality in Mott insulators by circularly polarized laser", - "doi": "10.1103/physrevb.96.014406", - "nodeyear": 2017, - "ref-by-count": 37, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1090432014", - "attributes": { - "title": "Floquet Dynamics of Boundary-Driven Systems at Criticality", - "doi": "10.1103/physrevlett.118.260602", - "nodeyear": 2017, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1085973336", - "attributes": { - "title": "A generalization of the quantum Rabi model: exact solution and spectral structure", - "doi": "10.1088/1751-8121/aa785a", - "nodeyear": 2017, - "ref-by-count": 23, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1090356064", - "attributes": { - "title": "A Rigorous Theory of Many-Body Prethermalization for Periodically Driven and Closed Quantum Systems", - "doi": "10.1007/s00220-017-2930-x", - "nodeyear": 2017, - "ref-by-count": 143, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1086147780", - "attributes": { - "title": "The Local Detection Method: Dynamical Detection of Quantum Discord with Local Operations", - "doi": "10.1007/978-3-319-53412-1_14", - "nodeyear": 2017, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1090727222", - "attributes": { - "title": "Integrable Floquet dynamics", - "doi": "10.21468/scipostphys.2.3.021", - "nodeyear": 2017, - "ref-by-count": 54, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1086037788", - "attributes": { - "title": "Floquet control of dipolaritons in quantum wells.", - "doi": "10.1364/ol.42.002398", - "nodeyear": 2017, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1085930196", - "attributes": { - "title": "Local probe of single phonon dynamics in warm ion crystals", - "doi": "10.1038/ncomms15712", - "nodeyear": 2017, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1085868342", - "attributes": { - "title": "Periodic Driving at High Frequencies of an Impurity in the Isotropic XY Chain", - "doi": "10.1007/s00220-017-2917-7", - "nodeyear": 2017, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "01:0.60;02:0.40", - "level": "cite_l2" - } - }, - { - "id": "pub.1102822370", - "attributes": { - "title": "Proxy-SU(3) symmetry in heavy deformed nuclei", - "doi": "10.1103/physrevc.95.064325", - "nodeyear": 2017, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1090449453", - "attributes": { - "title": "Floquet states in (LaNiO3)2/(LaAlO3)N heterostructures grown along the (111) direction", - "doi": "10.1103/physrevb.95.235309", - "nodeyear": 2017, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1085918234", - "attributes": { - "title": "Jacobi-type transitions in the interacting boson model", - "doi": "10.1103/physrevc.95.061304", - "nodeyear": 2017, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1090858939", - "attributes": { - "title": "Geometry and non-adiabatic response in quantum and classical systems", - "doi": "10.1016/j.physrep.2017.07.001", - "nodeyear": 2017, - "ref-by-count": 113, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1085784151", - "attributes": { - "title": "Direct Lattice Shaking of Bose Condensates: Finite Momentum Superfluids", - "doi": "10.1103/physrevlett.118.220401", - "nodeyear": 2017, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1084176371", - "attributes": { - "title": "Loading ultracold gases in topological Floquet bands: the fate of current and center-of-mass responses", - "doi": "10.1088/2053-1583/aa6a3b", - "nodeyear": 2017, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1085784080", - "attributes": { - "title": "Generating end modes in a superconducting wire by periodic driving of the hopping", - "doi": "10.1103/physrevb.95.174306", - "nodeyear": 2017, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1085775517", - "attributes": { - "title": "Excited-state quantum phase transitions in a two-fluid Lipkin model", - "doi": "10.1103/physrevc.95.054326", - "nodeyear": 2017, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1085775507", - "attributes": { - "title": "0-\u03c0 transitions in a Josephson junction of an irradiated Weyl semimetal", - "doi": "10.1103/physrevb.95.201115", - "nodeyear": 2017, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1085775482", - "attributes": { - "title": "Interconnections between equilibrium topology and dynamical quantum phase transitions in a linearly ramped Haldane model", - "doi": "10.1103/physrevb.95.184307", - "nodeyear": 2017, - "ref-by-count": 33, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1085524357", - "attributes": { - "title": "Quantum Floquet anomalous Hall states and quantized ratchet effect in one-dimensional dimer chain driven by two ac electric fields", - "doi": "10.1103/physrevb.95.205125", - "nodeyear": 2017, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1085524341", - "attributes": { - "title": "Preparing quasienergy states on demand: A parametric oscillator", - "doi": "10.1103/physreva.95.053841", - "nodeyear": 2017, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1085593414", - "attributes": { - "title": "Adiabatic perturbation theory and geometry of periodically-driven systems", - "doi": "10.1016/j.physrep.2017.05.003", - "nodeyear": 2017, - "ref-by-count": 68, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1085277889", - "attributes": { - "title": "High-Frequency Analysis of Effective Interactions and Bandwidth for Transient States after Monocycle Pulse Excitation of Extended Hubbard Model", - "doi": "10.7566/jpsj.86.064702", - "nodeyear": 2017, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1085120424", - "attributes": { - "title": "Equilibration and order in quantum Floquet matter", - "doi": "10.1038/nphys4106", - "nodeyear": 2017, - "ref-by-count": 148, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1085242099", - "attributes": { - "title": "Regularity and chaos in cavity QED", - "doi": "10.1088/1402-4896/aa6640", - "nodeyear": 2017, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1084868052", - "attributes": { - "title": "Semiclassical Identification of Periodic Orbits in a Quantum Many-Body System", - "doi": "10.1103/physrevlett.118.164101", - "nodeyear": 2017, - "ref-by-count": 23, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1090229831", - "attributes": { - "title": "Rapidly oscillating scatteringless non-Hermitian potentials and the absence of Kapitza stabilization", - "doi": "10.1209/0295-5075/118/20004", - "nodeyear": 2017, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1085191011", - "attributes": { - "title": "Parametric Instability Rates in Periodically Driven Band Systems", - "doi": "10.1103/physrevx.7.021015", - "nodeyear": 2017, - "ref-by-count": 42, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1084786597", - "attributes": { - "title": "Quenching in Chern insulators with satellite Dirac points: The fate of edge states", - "doi": "10.1103/physrevb.95.144304", - "nodeyear": 2017, - "ref-by-count": 21, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1084786582", - "attributes": { - "title": "Control over few-photon pulses by a time-periodic modulation of the photon emitter coupling", - "doi": "10.1103/physreva.95.043814", - "nodeyear": 2017, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1084603807", - "attributes": { - "title": "Driven Bose-Hubbard model with a parametrically modulated harmonic trap", - "doi": "10.1103/physreva.95.043604", - "nodeyear": 2017, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1084174937", - "attributes": { - "title": "Some remarks on \u2018superradiant\u2019 phase transitions in light-matter systems", - "doi": "10.1088/1751-8121/aa65dc", - "nodeyear": 2017, - "ref-by-count": 50, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1084007961", - "attributes": { - "title": "Dynamical many\u2010body localization and delocalization in periodically driven closed quantum systems", - "doi": "10.1002/andp.201600333", - "nodeyear": 2017, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1084682300", - "attributes": { - "title": "Treating Many-Body Quantum Systems by Means of Classical Mechanics", - "doi": "10.1007/978-3-319-47810-4_4", - "nodeyear": 2017, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1084174915", - "attributes": { - "title": "Adiabatic invariants for the regular region of the Dicke model", - "doi": "10.1088/1751-8121/aa6162", - "nodeyear": 2017, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1084198171", - "attributes": { - "title": "Topological flat bands in time-periodically driven uniaxial strained graphene nanoribbons", - "doi": "10.1103/physrevb.95.115440", - "nodeyear": 2017, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1084198121", - "attributes": { - "title": "Keldysh approach to periodically driven systems with a fermionic bath: Nonequilibrium steady state, proximity effect, and dissipation", - "doi": "10.1103/physrevb.95.115303", - "nodeyear": 2017, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1084197894", - "attributes": { - "title": "Sublattice dynamics and quantum state transfer of doublons in two-dimensional lattices", - "doi": "10.1103/physrevb.95.094303", - "nodeyear": 2017, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1084197582", - "attributes": { - "title": "Resolution-enhanced entanglement detection", - "doi": "10.1103/physreva.95.032326", - "nodeyear": 2017, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1084197545", - "attributes": { - "title": "Generation of robust entangled states in a non-Hermitian periodically driven two-band Bose-Hubbard system", - "doi": "10.1103/physreva.95.032125", - "nodeyear": 2017, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1084197534", - "attributes": { - "title": "Ponderomotive dynamics of waves in quasiperiodically modulated media", - "doi": "10.1103/physreva.95.032114", - "nodeyear": 2017, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1083406696", - "attributes": { - "title": "Heat capacity for systems with excited-state quantum phase transitions", - "doi": "10.1016/j.physleta.2017.01.022", - "nodeyear": 2017, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1083935671", - "attributes": { - "title": "Cavity-Assisted Single-Mode and Two-Mode Spin-Squeezed States via Phase-Locked Atom-Photon Coupling", - "doi": "10.1103/physrevlett.118.083604", - "nodeyear": 2017, - "ref-by-count": 25, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1083439843", - "attributes": { - "title": "Mean-field theory for confinement transitions and magnetization plateaux in spin ice", - "doi": "10.1088/1751-8121/aa5bc6", - "nodeyear": 2017, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1083816155", - "attributes": { - "title": "QuSpin: a Python package for dynamics and exact diagonalisation of quantum many body systems part I: spin chains", - "doi": "10.21468/scipostphys.2.1.003", - "nodeyear": 2017, - "ref-by-count": 119, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1059133328", - "attributes": { - "title": "Catastrophes in non-equilibrium many-particle wave functions: universality and critical scaling", - "doi": "10.1088/1361-6455/aa56af", - "nodeyear": 2017, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:0.60;03:0.40", - "level": "cite_l2" - } - }, - { - "id": "pub.1083935160", - "attributes": { - "title": "Floquet analysis of a quantum system with modulated periodic driving", - "doi": "10.1103/physreva.95.023615", - "nodeyear": 2017, - "ref-by-count": 43, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1083717390", - "attributes": { - "title": "Transport signatures in topological systems coupled to ac fields", - "doi": "10.1103/physrevb.95.064302", - "nodeyear": 2017, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1083643131", - "attributes": { - "title": "Unconventional fermionic pairing states in a monochromatically tilted optical lattice", - "doi": "10.1103/physreva.95.023601", - "nodeyear": 2017, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1083522251", - "attributes": { - "title": "Space-time Cooperative Symmetry in a Periodically Driven Tight Binding Model", - "doi": "10.7566/jpsj.86.024713", - "nodeyear": 2017, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1011995146", - "attributes": { - "title": "Creating stable Floquet\u2013Weyl semimetals by laser-driving of 3D Dirac materials", - "doi": "10.1038/ncomms13940", - "nodeyear": 2017, - "ref-by-count": 165, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1059164313", - "attributes": { - "title": "Delocalization properties at isolated avoided crossings in Lipkin\u2013Meshkov\u2013Glick type Hamiltonian models", - "doi": "10.1088/1742-5468/aa4e90", - "nodeyear": 2017, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1107414917", - "attributes": { - "title": "Preparing and Probing Chern Bands with Cold Atoms", - "doi": "10.1017/9781316084366.016", - "nodeyear": 2017, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "00:1", - "level": "cite_l2" - } - }, - { - "id": "pub.1084604018", - "attributes": { - "title": "Locating topological phase transitions using nonequilibrium signatures in local bulk observables", - "doi": "10.1103/physrevb.95.041105", - "nodeyear": 2017, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1084603856", - "attributes": { - "title": "Effects of interactions on periodically driven dynamically localized systems", - "doi": "10.1103/physrevb.95.014305", - "nodeyear": 2017, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1084603654", - "attributes": { - "title": "Excited-state quantum phase transitions studied from a non-Hermitian perspective", - "doi": "10.1103/physreva.95.010103", - "nodeyear": 2017, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1084199340", - "attributes": { - "title": "Colloquium: Atomic quantum gases in periodically driven optical lattices", - "doi": "10.1103/revmodphys.89.011004", - "nodeyear": 2017, - "ref-by-count": 496, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1083506581", - "attributes": { - "title": "Effective Hamiltonians, prethermalization, and slow energy absorption in periodically driven many-body systems", - "doi": "10.1103/physrevb.95.014112", - "nodeyear": 2017, - "ref-by-count": 184, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060653834", - "attributes": { - "title": "Floquet engineering of Haldane Chern insulators and chiral bosonic phase transitions", - "doi": "10.1103/physrevb.95.045102", - "nodeyear": 2017, - "ref-by-count": 29, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060517495", - "attributes": { - "title": "Boson-mediated quantum spin simulators in transverse fields: XY model and spin-boson entanglement", - "doi": "10.1103/physreva.95.013602", - "nodeyear": 2017, - "ref-by-count": 21, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1031526734", - "attributes": { - "title": "Boundary effects and gapped dispersion in rotating fermionic matter", - "doi": "10.1016/j.physletb.2016.11.010", - "nodeyear": 2017, - "ref-by-count": 46, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1048482410", - "attributes": { - "title": "Dynamics and Characterization of Composite Quantum Systems", - "doi": "10.1007/978-3-319-44459-8", - "nodeyear": 2017, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1013892465", - "attributes": { - "title": "Quantum-Enhanced Nonlinear Spectroscopy", - "doi": "10.1007/978-3-319-44397-3", - "nodeyear": 2017, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060766918", - "attributes": { - "title": "Driven Open Quantum Systems and Floquet Stroboscopic Dynamics", - "doi": "10.1103/physrevlett.117.250401", - "nodeyear": 2016, - "ref-by-count": 42, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1087286925", - "attributes": { - "title": "Approximated integrability of the Dicke model", - "doi": "10.1209/0295-5075/116/50005", - "nodeyear": 2016, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060681712", - "attributes": { - "title": "Signatures of shape phase transitions in odd-mass nuclei", - "doi": "10.1103/physrevc.94.064310", - "nodeyear": 2016, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060653553", - "attributes": { - "title": "Brillouin-Wigner theory for Floquet topological phase transitions in spin-orbit-coupled materials", - "doi": "10.1103/physrevb.94.235419", - "nodeyear": 2016, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1060653350", - "attributes": { - "title": "Dynamical Cooper pairing in nonequilibrium electron-phonon systems", - "doi": "10.1103/physrevb.94.214504", - "nodeyear": 2016, - "ref-by-count": 107, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060653304", - "attributes": { - "title": "Entanglement generation in periodically driven integrable systems: Dynamical phase transitions and steady state", - "doi": "10.1103/physrevb.94.214301", - "nodeyear": 2016, - "ref-by-count": 40, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1060766700", - "attributes": { - "title": "Floquet Realization and Signatures of One-Dimensional Anyons in an Optical Lattice", - "doi": "10.1103/physrevlett.117.205303", - "nodeyear": 2016, - "ref-by-count": 50, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060750764", - "attributes": { - "title": "Excited-state quantum phase transitions in the two-spin elliptic Gaudin model", - "doi": "10.1103/physreve.94.052110", - "nodeyear": 2016, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060517140", - "attributes": { - "title": "Extended states in disordered one-dimensional systems in the presence of the generalized N-mer correlations", - "doi": "10.1103/physreva.94.053613", - "nodeyear": 2016, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060517139", - "attributes": { - "title": "Phase transition in an Aubry-Andr\u00e9 system with a rapidly oscillating magnetic field", - "doi": "10.1103/physreva.94.053612", - "nodeyear": 2016, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060517109", - "attributes": { - "title": "Noise-induced transport in the motion of trapped ions", - "doi": "10.1103/physreva.94.053406", - "nodeyear": 2016, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1002023992", - "attributes": { - "title": "Dynamical merging of Dirac points in the periodically driven Kitaev honeycomb model", - "doi": "10.1140/epjb/e2016-70265-5", - "nodeyear": 2016, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1060652562", - "attributes": { - "title": "Signatures and conditions for phase band crossings in periodically driven integrable systems", - "doi": "10.1103/physrevb.94.155122", - "nodeyear": 2016, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1060516924", - "attributes": { - "title": "Dynamics of small trapped one-dimensional Fermi gas under oscillating magnetic fields", - "doi": "10.1103/physreva.94.043639", - "nodeyear": 2016, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060516896", - "attributes": { - "title": "Creating topological interfaces and detecting chiral edge modes in a two-dimensional optical lattice", - "doi": "10.1103/physreva.94.043611", - "nodeyear": 2016, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060516887", - "attributes": { - "title": "Tunable spin-orbit-coupled Bose-Einstein condensates in deep optical lattices", - "doi": "10.1103/physreva.94.043602", - "nodeyear": 2016, - "ref-by-count": 23, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060516756", - "attributes": { - "title": "Floquet engineering from long-range to short-range interactions", - "doi": "10.1103/physreva.94.040701", - "nodeyear": 2016, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1059164227", - "attributes": { - "title": "Thermal and quantum phase transitions in atom-field systems: a microcanonical analysis", - "doi": "10.1088/1742-5468/2016/09/093105", - "nodeyear": 2016, - "ref-by-count": 25, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1060750417", - "attributes": { - "title": "Semiclassical bifurcations and topological phase transitions in a one-dimensional lattice of coupled Lipkin-Meshkov-Glick models", - "doi": "10.1103/physreve.94.032123", - "nodeyear": 2016, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1008292555", - "attributes": { - "title": "Interband Heating Processes in a Periodically Driven Optical Lattice", - "doi": "10.1515/zna-2016-0129", - "nodeyear": 2016, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1059137701", - "attributes": { - "title": "Realization of uniform synthetic magnetic fields by periodically shaking an optical square lattice", - "doi": "10.1088/1367-2630/18/9/093013", - "nodeyear": 2016, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060652244", - "attributes": { - "title": "Abelian Floquet symmetry-protected topological phases in one dimension", - "doi": "10.1103/physrevb.94.125105", - "nodeyear": 2016, - "ref-by-count": 82, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1060652210", - "attributes": { - "title": "Type-II Weyl cone transitions in driven semimetals", - "doi": "10.1103/physrevb.94.121106", - "nodeyear": 2016, - "ref-by-count": 71, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060652116", - "attributes": { - "title": "Floquet topological phases coupled to environments and the induced photocurrent", - "doi": "10.1103/physrevb.94.115145", - "nodeyear": 2016, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060516738", - "attributes": { - "title": "Molecular spectra in collective Dicke states", - "doi": "10.1103/physreva.94.033848", - "nodeyear": 2016, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1014532593", - "attributes": { - "title": "A possible framework of the Lipkin model obeying the SU(n) algebra in arbitrary fermion number. I: The SU(2) algebras extended from the conventional fermion pair and determination of the minimum weight states", - "doi": "10.1093/ptep/ptw101", - "nodeyear": 2016, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1059174523", - "attributes": { - "title": "Particle-time duality in the kicked Ising spin chain", - "doi": "10.1088/1751-8113/49/37/375101", - "nodeyear": 2016, - "ref-by-count": 36, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1060651758", - "attributes": { - "title": "Photoinduced Chern insulating states in semi-Dirac materials", - "doi": "10.1103/physrevb.94.081103", - "nodeyear": 2016, - "ref-by-count": 33, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060516500", - "attributes": { - "title": "Excited-state quantum phase transition in the Rabi model", - "doi": "10.1103/physreva.94.023835", - "nodeyear": 2016, - "ref-by-count": 32, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060516440", - "attributes": { - "title": "String order via Floquet interactions in atomic systems", - "doi": "10.1103/physreva.94.023610", - "nodeyear": 2016, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1008230481", - "attributes": { - "title": "Classification of excited-state quantum phase transitions for arbitrary number of degrees of freedom", - "doi": "10.1016/j.physleta.2016.06.031", - "nodeyear": 2016, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060750048", - "attributes": { - "title": "Entropy, chaos, and excited-state quantum phase transitions in the Dicke model", - "doi": "10.1103/physreve.94.012140", - "nodeyear": 2016, - "ref-by-count": 21, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1052263311", - "attributes": { - "title": "Quasi-Periodically Driven Quantum Systems", - "doi": "10.1515/zna-2016-0079", - "nodeyear": 2016, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1059005118", - "attributes": { - "title": "Quantum phase transitions in the collective degrees of freedom: nuclei and other many-body systems", - "doi": "10.1088/0031-8949/91/8/083006", - "nodeyear": 2016, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1060651068", - "attributes": { - "title": "How periodic driving heats a disordered quantum spin chain", - "doi": "10.1103/physrevb.94.020201", - "nodeyear": 2016, - "ref-by-count": 29, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060516111", - "attributes": { - "title": "Excited-state quantum phase transitions in many-body systems with infinite-range interaction: Localization, dynamics, and bifurcation", - "doi": "10.1103/physreva.94.012113", - "nodeyear": 2016, - "ref-by-count": 49, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1024274677", - "attributes": { - "title": "Topological quantum matter with ultracold gases in optical lattices", - "doi": "10.1038/nphys3803", - "nodeyear": 2016, - "ref-by-count": 387, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060765840", - "attributes": { - "title": "Anomalous Topological Phases and Unpaired Dirac Cones in Photonic Floquet Topological Insulators", - "doi": "10.1103/physrevlett.117.013902", - "nodeyear": 2016, - "ref-by-count": 87, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1010802241", - "attributes": { - "title": "Effects of excited state quantum phase transitions on system dynamics", - "doi": "10.1002/prop.201600035", - "nodeyear": 2016, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060765767", - "attributes": { - "title": "Cooperative Shielding in Many-Body Systems with Long-Range Interaction", - "doi": "10.1103/physrevlett.116.250402", - "nodeyear": 2016, - "ref-by-count": 44, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1062666833", - "attributes": { - "title": "Experimental reconstruction of the Berry curvature in a Floquet Bloch band", - "doi": "10.1126/science.aad4568", - "nodeyear": 2016, - "ref-by-count": 297, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1059164050", - "attributes": { - "title": "High-frequency behavior of periodically modulated stochastic quantum system: activated escape", - "doi": "10.1088/1742-5468/2016/05/053204", - "nodeyear": 2016, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1060765582", - "attributes": { - "title": "Floquet Engineering of Correlated Tunneling in the Bose-Hubbard Model with Ultracold Atoms", - "doi": "10.1103/physrevlett.116.205301", - "nodeyear": 2016, - "ref-by-count": 109, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1059137444", - "attributes": { - "title": "Effective Floquet\u2013Gibbs states for dissipative quantum systems", - "doi": "10.1088/1367-2630/18/5/053008", - "nodeyear": 2016, - "ref-by-count": 43, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060749720", - "attributes": { - "title": "Rigidity generation by nonthermal fluctuations", - "doi": "10.1103/physreve.93.052604", - "nodeyear": 2016, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1045365832", - "attributes": { - "title": "From quantum chaos and eigenstate thermalization to statistical mechanics and thermodynamics", - "doi": "10.1080/00018732.2016.1198134", - "nodeyear": 2016, - "ref-by-count": 945, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1013025567", - "attributes": { - "title": "Quantum phase transitions with parity-symmetry breaking and hysteresis", - "doi": "10.1038/nphys3743", - "nodeyear": 2016, - "ref-by-count": 68, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060650091", - "attributes": { - "title": "Effects of periodic kicking on dispersion and wave packet dynamics in graphene", - "doi": "10.1103/physrevb.93.174301", - "nodeyear": 2016, - "ref-by-count": 33, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1059164027", - "attributes": { - "title": "Corner transfer matrices for 2D strongly coupled many-body Floquet systems", - "doi": "10.1088/1742-5468/2016/04/043305", - "nodeyear": 2016, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1065176096", - "attributes": { - "title": "Multiphoton resonant manipulation of qubits by train of pulses", - "doi": "10.1364/josab.33.000971", - "nodeyear": 2016, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "09:0.33;01:0.33;02:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1060680986", - "attributes": { - "title": "Excited-state quantum phase transitions in the interacting boson model: Spectral characteristics of 0+ states and effective order parameter", - "doi": "10.1103/physrevc.93.044302", - "nodeyear": 2016, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060649845", - "attributes": { - "title": "Heating and many-body resonances in a periodically driven two-band system", - "doi": "10.1103/physrevb.93.155132", - "nodeyear": 2016, - "ref-by-count": 67, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1060649780", - "attributes": { - "title": "Brillouin-Wigner theory for high-frequency expansion in periodically driven systems: Application to Floquet topological insulators", - "doi": "10.1103/physrevb.93.144307", - "nodeyear": 2016, - "ref-by-count": 172, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060649672", - "attributes": { - "title": "Nonequilibrium dynamics of the Ising chain in a fluctuating transverse field", - "doi": "10.1103/physrevb.93.134305", - "nodeyear": 2016, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060515586", - "attributes": { - "title": "Modified interactions in a Floquet topological system on a square lattice and their impact on a bosonic fractional Chern insulator state", - "doi": "10.1103/physreva.93.043618", - "nodeyear": 2016, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060515460", - "attributes": { - "title": "Classical-quantum correspondence in bosonic two-mode conversion systems: Polynomial algebras and Kummer shapes", - "doi": "10.1103/physreva.93.042102", - "nodeyear": 2016, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060515459", - "attributes": { - "title": "Hilbert-space localization in closed quantum systems", - "doi": "10.1103/physreva.93.042101", - "nodeyear": 2016, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1017232487", - "attributes": { - "title": "Calculating Floquet states of large quantum systems: A parallelization strategy and its cluster implementation", - "doi": "10.1016/j.cpc.2015.12.024", - "nodeyear": 2016, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1008885136", - "attributes": { - "title": "Floquet\u2013Magnus theory and generic transient dynamics in periodically driven many-body quantum systems", - "doi": "10.1016/j.aop.2016.01.012", - "nodeyear": 2016, - "ref-by-count": 250, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060765248", - "attributes": { - "title": "Schrieffer-Wolff Transformation for Periodically Driven Systems: Strongly Correlated Systems with Artificial Gauge Fields", - "doi": "10.1103/physrevlett.116.125301", - "nodeyear": 2016, - "ref-by-count": 107, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1060765225", - "attributes": { - "title": "Rigorous Bound on Energy Absorption and Generic Relaxation in Periodically Driven Quantum Systems", - "doi": "10.1103/physrevlett.116.120401", - "nodeyear": 2016, - "ref-by-count": 192, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1022845164", - "attributes": { - "title": "Long-range doublon transfer in a dimer chain induced by topology and ac fields", - "doi": "10.1038/srep22562", - "nodeyear": 2016, - "ref-by-count": 32, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060515226", - "attributes": { - "title": "Floquet theorem with open systems and its applications", - "doi": "10.1103/physreva.93.032121", - "nodeyear": 2016, - "ref-by-count": 25, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060749074", - "attributes": { - "title": "Delocalization and quantum chaos in atom-field systems", - "doi": "10.1103/physreve.93.022215", - "nodeyear": 2016, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060649137", - "attributes": { - "title": "Floquet topological system based on frequency-modulated classical coupled harmonic oscillators", - "doi": "10.1103/physrevb.93.085105", - "nodeyear": 2016, - "ref-by-count": 42, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060649072", - "attributes": { - "title": "Scattering matrix invariants of Floquet topological insulators", - "doi": "10.1103/physrevb.93.075405", - "nodeyear": 2016, - "ref-by-count": 49, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1060514903", - "attributes": { - "title": "Atom-molecule conversion in a periodically driven spin-boson model", - "doi": "10.1103/physreva.93.013616", - "nodeyear": 2016, - "ref-by-count": 0, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1049246486", - "attributes": { - "title": "Artificial Gauge Fields with Ultracold Atoms in Optical Lattices", - "doi": "10.1007/978-3-319-25829-4", - "nodeyear": 2016, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1059136734", - "attributes": { - "title": "Topological singularities and the general classification of Floquet\u2013Bloch systems", - "doi": "10.1088/1367-2630/17/12/125014", - "nodeyear": 2015, - "ref-by-count": 168, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060764674", - "attributes": { - "title": "Exponentially Slow Heating in Periodically Driven Many-Body Systems", - "doi": "10.1103/physrevlett.115.256803", - "nodeyear": 2015, - "ref-by-count": 228, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060514725", - "attributes": { - "title": "Dissipative two-mode Tavis-Cummings model with time-delayed feedback control", - "doi": "10.1103/physreva.92.063832", - "nodeyear": 2015, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060514696", - "attributes": { - "title": "Stability of a Bose-Einstein condensate in a driven optical lattice: Crossover between weak and tight transverse confinement", - "doi": "10.1103/physreva.92.063639", - "nodeyear": 2015, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1036641112", - "attributes": { - "title": "Tunable Chern insulator with optimally shaken lattices", - "doi": "10.1103/physreva.92.063615", - "nodeyear": 2015, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1064625019", - "attributes": { - "title": "Role of Correlations and Off-Diagonal Terms in Binary Disordered One-Dimensional Systems", - "doi": "10.12693/aphyspola.128.1002", - "nodeyear": 2015, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1027442816", - "attributes": { - "title": "DiracQ: A Package for Algebraic Manipulation of Non-Commuting Quantum Variables", - "doi": "10.5334/jors.cb", - "nodeyear": 2015, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060764456", - "attributes": { - "title": "Prethermal Floquet Steady States and Instabilities in the Periodically Driven, Weakly Interacting Bose-Hubbard Model", - "doi": "10.1103/physrevlett.115.205301", - "nodeyear": 2015, - "ref-by-count": 97, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060514338", - "attributes": { - "title": "Structure of eigenstates and quench dynamics at an excited-state quantum phase transition", - "doi": "10.1103/physreva.92.050101", - "nodeyear": 2015, - "ref-by-count": 52, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1034517301", - "attributes": { - "title": "Driven-dissipative Ising model: Mean-field solution", - "doi": "10.1103/physrevb.92.174418", - "nodeyear": 2015, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1059136608", - "attributes": { - "title": "Time delayed control of excited state quantum phase transitions in the Lipkin\u2013Meshkov\u2013Glick model", - "doi": "10.1088/1367-2630/17/10/103031", - "nodeyear": 2015, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060764168", - "attributes": { - "title": "Dynamic Optical Lattices of Subwavelength Spacing for Ultracold Atoms", - "doi": "10.1103/physrevlett.115.140401", - "nodeyear": 2015, - "ref-by-count": 50, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060514281", - "attributes": { - "title": "Multiphoton interband excitations of quantum gases in driven optical lattices", - "doi": "10.1103/physreva.92.043621", - "nodeyear": 2015, - "ref-by-count": 59, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1034661114", - "attributes": { - "title": "Controlled Population of Floquet-Bloch States via Coupling to Bose and Fermi Baths", - "doi": "10.1103/physrevx.5.041050", - "nodeyear": 2015, - "ref-by-count": 109, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1028219105", - "attributes": { - "title": "Dynamical preparation of Floquet Chern insulators", - "doi": "10.1038/ncomms9336", - "nodeyear": 2015, - "ref-by-count": 147, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1016473610", - "attributes": { - "title": "High-frequency approximation for periodically driven quantum systems from a Floquet-space perspective", - "doi": "10.1088/1367-2630/17/9/093039", - "nodeyear": 2015, - "ref-by-count": 290, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1046940591", - "attributes": { - "title": "Floquet analysis of pulsed Dirac systems: a way to simulate rippled graphene", - "doi": "10.1140/epjb/e2015-60356-2", - "nodeyear": 2015, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060764026", - "attributes": { - "title": "Spectroscopy of Interacting Quasiparticles in Trapped Ions", - "doi": "10.1103/physrevlett.115.100501", - "nodeyear": 2015, - "ref-by-count": 49, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060514082", - "attributes": { - "title": "Structure-dynamics relation in shaken optical lattices", - "doi": "10.1103/physreva.92.033407", - "nodeyear": 2015, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1049705098", - "attributes": { - "title": "Stroboscopic symmetry-protected topological phases", - "doi": "10.1103/physrevb.92.125107", - "nodeyear": 2015, - "ref-by-count": 36, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060763935", - "attributes": { - "title": "Creating State-Dependent Lattices for Ultracold Fermions by Magnetic Gradient Modulation", - "doi": "10.1103/physrevlett.115.073002", - "nodeyear": 2015, - "ref-by-count": 83, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1060513942", - "attributes": { - "title": "Floquet topological transitions in a driven one-dimensional topological insulator", - "doi": "10.1103/physreva.92.023624", - "nodeyear": 2015, - "ref-by-count": 86, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1020950855", - "attributes": { - "title": "Controlling disorder with periodically modulated interactions", - "doi": "10.1103/physreva.92.023606", - "nodeyear": 2015, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1002407881", - "attributes": { - "title": "Coherent quantum dynamics: What fluctuations can tell", - "doi": "10.1103/physreva.92.022108", - "nodeyear": 2015, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1032625305", - "attributes": { - "title": "Quantum ergodicity and energy flow in molecules", - "doi": "10.1080/00018732.2015.1109817", - "nodeyear": 2015, - "ref-by-count": 66, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1022791415", - "attributes": { - "title": "Probing polariton dynamics in trapped ions with phase-coherent two-dimensional spectroscopy", - "doi": "10.1063/1.4919796", - "nodeyear": 2015, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1059004792", - "attributes": { - "title": "Semiclassical dynamics of the resonant Dicke model in a strongly non-linear regime", - "doi": "10.1088/0031-8949/90/7/074044", - "nodeyear": 2015, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "cite_l2" - } - }, - { - "id": "pub.1053517731", - "attributes": { - "title": "Spin squeezing by tensor twisting and Lipkin-Meshkov-Glick dynamics in a toroidal Bose-Einstein condensate with spatially modulated nonlinearity", - "doi": "10.1103/physreva.91.053612", - "nodeyear": 2015, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1046942581", - "attributes": { - "title": "Hierarchy of Floquet gaps and edge states for driven honeycomb lattices", - "doi": "10.1103/physreva.91.043625", - "nodeyear": 2015, - "ref-by-count": 75, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;03:0.33", - "level": "cite_l2" - } - }, - { - "id": "pub.1010257037", - "attributes": { - "title": "Optimization of photon correlations by frequency filtering", - "doi": "10.1103/physreva.91.043807", - "nodeyear": 2015, - "ref-by-count": 23, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1039122836", - "attributes": { - "title": "Condition for emergence of the Floquet-Gibbs state in periodically driven open systems", - "doi": "10.1103/physreve.91.030101", - "nodeyear": 2015, - "ref-by-count": 56, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1033596012", - "attributes": { - "title": "Fate of dynamical many-body localization in the presence of disorder", - "doi": "10.1103/physrevb.91.121106", - "nodeyear": 2015, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1009958864", - "attributes": { - "title": "Long-time Behavior of Isolated Periodically Driven Interacting Lattice Systems", - "doi": "10.1103/physrevx.4.041048", - "nodeyear": 2014, - "ref-by-count": 401, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "cite_l2" - } - }, - { - "id": "pub.1039829503", - "attributes": { - "title": "Signatures of quantum phase transitions and excited state quantum phase transitions in the vibrational bending dynamics of triatomic molecules", - "doi": "10.1016/j.molstruc.2013.08.020", - "nodeyear": 2013, - "ref-by-count": 55, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1008158272", - "attributes": { - "title": "Excited-state quantum phase transitions in Dicke superradiance models", - "doi": "10.1103/physreve.88.032133", - "nodeyear": 2013, - "ref-by-count": 91, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1032795711", - "attributes": { - "title": "ac-driven quantum phase transition in the Lipkin-Meshkov-Glick model", - "doi": "10.1103/physreve.87.052110", - "nodeyear": 2013, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1050389361", - "attributes": { - "title": "Excited-state phase transition leading to symmetry-breaking steady states in the Dicke model", - "doi": "10.1103/physreva.87.023819", - "nodeyear": 2013, - "ref-by-count": 38, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1062466552", - "attributes": { - "title": "Roton-Type Mode Softening in a Quantum Gas with Cavity-Mediated Long-Range Interactions", - "doi": "10.1126/science.1220314", - "nodeyear": 2012, - "ref-by-count": 181, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1014751446", - "attributes": { - "title": "Metal\u2013topological insulator transition in the quantum kicked rotator with Z2 symmetry", - "doi": "10.1103/physrevb.85.165131", - "nodeyear": 2012, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060759314", - "attributes": { - "title": "Nonequilibrium Quantum Phase Transitions in the Dicke Model", - "doi": "10.1103/physrevlett.108.043003", - "nodeyear": 2012, - "ref-by-count": 127, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1039860202", - "attributes": { - "title": "Quantum spin squeezing", - "doi": "10.1016/j.physrep.2011.08.003", - "nodeyear": 2011, - "ref-by-count": 431, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1048699443", - "attributes": { - "title": "Theory of the Anderson Transition in the Quasiperiodic Kicked Rotor", - "doi": "10.1103/physrevlett.107.074101", - "nodeyear": 2011, - "ref-by-count": 31, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060741752", - "attributes": { - "title": "Excited-state phase transition and onset of chaos in quantum optical models", - "doi": "10.1103/physreve.83.046208", - "nodeyear": 2011, - "ref-by-count": 80, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1048928815", - "attributes": { - "title": "Classical Bifurcation at the Transition from Rabi to Josephson Dynamics", - "doi": "10.1103/physrevlett.105.204101", - "nodeyear": 2010, - "ref-by-count": 282, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060507439", - "attributes": { - "title": "Anharmonicity effects in the bosonic U(2)-SO(3) excited-state quantum phase transition", - "doi": "10.1103/physreva.81.050101", - "nodeyear": 2010, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1034025717", - "attributes": { - "title": "Dicke quantum phase transition with a superfluid gas in an optical cavity", - "doi": "10.1038/nature09009", - "nodeyear": 2010, - "ref-by-count": 977, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060839703", - "attributes": { - "title": "Quantum phase transitions in the shapes of atomic nuclei", - "doi": "10.1103/revmodphys.82.2155", - "nodeyear": 2010, - "ref-by-count": 364, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1045564126", - "attributes": { - "title": "Observation of Van Hove singularities in twisted graphene layers", - "doi": "10.1038/nphys1463", - "nodeyear": 2009, - "ref-by-count": 737, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1026356533", - "attributes": { - "title": "Quantum signatures of chaos in a kicked top", - "doi": "10.1038/nature08396", - "nodeyear": 2009, - "ref-by-count": 180, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1049262570", - "attributes": { - "title": "Decoherence due to an excited-state quantum phase transition in a two-level boson model", - "doi": "10.1103/physreva.80.032111", - "nodeyear": 2009, - "ref-by-count": 45, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1021560322", - "attributes": { - "title": "Decoherence as a signature of an excited-state quantum phase transition", - "doi": "10.1103/physreva.78.060102", - "nodeyear": 2008, - "ref-by-count": 50, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1032579586", - "attributes": { - "title": "Impact of quantum phase transitions on excited-level dynamics", - "doi": "10.1103/physreve.78.031130", - "nodeyear": 2008, - "ref-by-count": 59, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1025472474", - "attributes": { - "title": "Exact spectrum of the Lipkin-Meshkov-Glick model in the thermodynamic limit and finite-size corrections", - "doi": "10.1103/physreve.78.021106", - "nodeyear": 2008, - "ref-by-count": 155, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1024402227", - "attributes": { - "title": "Excited state quantum phase transitions in many-body systems", - "doi": "10.1016/j.aop.2007.06.011", - "nodeyear": 2008, - "ref-by-count": 195, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1041909998", - "attributes": { - "title": "Quantum Control of the Hyperfine Spin of a Cs Atom Ensemble", - "doi": "10.1103/physrevlett.99.163002", - "nodeyear": 2007, - "ref-by-count": 92, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059079802", - "attributes": { - "title": "Monodromy and excited-state quantum phase transitions in integrable systems: collective vibrations of nuclei", - "doi": "10.1088/0305-4470/39/31/l01", - "nodeyear": 2006, - "ref-by-count": 102, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060831320", - "attributes": { - "title": "Experimental Confirmation of Quantum Monodromy: The Millimeter Wave Spectrum of Cyanogen Isothiocyanate NCNCS", - "doi": "10.1103/physrevlett.95.243002", - "nodeyear": 2005, - "ref-by-count": 52, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1004858858", - "attributes": { - "title": "Large-N Scaling Behavior of the Lipkin-Meshkov-Glick Model", - "doi": "10.1103/physrevlett.95.050402", - "nodeyear": 2005, - "ref-by-count": 96, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1008126854", - "attributes": { - "title": "Quantum Phase Transitions in the Interacting Boson Model: Integrability, Level Repulsion, and Level Crossing", - "doi": "10.1103/physrevlett.91.162502", - "nodeyear": 2003, - "ref-by-count": 52, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1041856979", - "attributes": { - "title": "Driven quantum tunneling", - "doi": "10.1016/s0370-1573(98)00022-2", - "nodeyear": 1998, - "ref-by-count": 1206, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059076073", - "attributes": { - "title": "Quantum states in a champagne bottle", - "doi": "10.1088/0305-4470/31/2/022", - "nodeyear": 1998, - "ref-by-count": 67, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1014050295", - "attributes": { - "title": "Semiclassical Spectra from Periodic-Orbit Clusters in a Mixed Phase Space", - "doi": "10.1103/physrevlett.79.1022", - "nodeyear": 1997, - "ref-by-count": 23, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060810429", - "attributes": { - "title": "Semiclassical Spectra without Periodic Orbits for a Kicked Top", - "doi": "10.1103/physrevlett.74.1562", - "nodeyear": 1995, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1017250213", - "attributes": { - "title": "Quantum effects of periodic orbits for the kicked top", - "doi": "10.1007/bf01312181", - "nodeyear": 1993, - "ref-by-count": 32, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060485026", - "attributes": { - "title": "Quantum signatures of homoclinic tangles and separatrices", - "doi": "10.1103/physreva.45.3615", - "nodeyear": 1992, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059069780", - "attributes": { - "title": "Quantum maps, adiabatic invariance and the semiclassical limit", - "doi": "10.1088/0305-4470/21/22/016", - "nodeyear": 1988, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059070056", - "attributes": { - "title": "The Campbell-Baker-Hausdorff expansion for classical and quantum kicked dynamics", - "doi": "10.1088/0305-4470/21/9/017", - "nodeyear": 1988, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042734315", - "attributes": { - "title": "Classical and quantum chaos for a kicked top", - "doi": "10.1007/bf01303727", - "nodeyear": 1987, - "ref-by-count": 285, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060500239", - "attributes": { - "title": "Steady States and Quasienergies of a Quantum-Mechanical System in an Oscillating Field", - "doi": "10.1103/physreva.7.2203", - "nodeyear": 1973, - "ref-by-count": 856, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060430850", - "attributes": { - "title": "Solution of the Schr\u00f6dinger Equation with a Hamiltonian Periodic in Time", - "doi": "10.1103/physrev.138.b979", - "nodeyear": 1965, - "ref-by-count": 2161, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1040897292", - "attributes": { - "title": "Unpaired Floquet Majorana fermions without magnetic fields", - "doi": "10.1103/physrevb.87.115420", - "nodeyear": 2013, - "ref-by-count": 63, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1046023204", - "attributes": { - "title": "Superradiant phase transitions with three-level systems", - "doi": "10.1103/physreva.87.023813", - "nodeyear": 2013, - "ref-by-count": 29, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1022219898", - "attributes": { - "title": "Cold atoms in cavity-generated dynamical optical potentials", - "doi": "10.1103/revmodphys.85.553", - "nodeyear": 2013, - "ref-by-count": 526, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1049288392", - "attributes": { - "title": "Drude Weight, Cyclotron Resonance, and the Dicke Model of Graphene Cavity QED", - "doi": "10.1103/physrevlett.109.267404", - "nodeyear": 2012, - "ref-by-count": 43, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1039643973", - "attributes": { - "title": "Superradiant phase transition in a model of three-level-\u039b systems interacting with two bosonic modes", - "doi": "10.1103/physreva.86.063822", - "nodeyear": 2012, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1023680357", - "attributes": { - "title": "Nonequilibrium quantum phase transitions in the Ising model", - "doi": "10.1103/physreva.86.063627", - "nodeyear": 2012, - "ref-by-count": 50, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1038214559", - "attributes": { - "title": "A nontrivial bosonic representation of large spin systems at high temperatures", - "doi": "10.1088/1751-8113/45/42/425301", - "nodeyear": 2012, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1027554801", - "attributes": { - "title": "Quantum noise properties of multiphoton transitions in driven nonlinear resonators", - "doi": "10.1088/1367-2630/14/9/093024", - "nodeyear": 2012, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1010612726", - "attributes": { - "title": "Sharp Tunneling Peaks in a Parametric Oscillator: Quantum Resonances Missing in the Rotating Wave Approximation", - "doi": "10.1103/physrevlett.109.090401", - "nodeyear": 2012, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060743705", - "attributes": { - "title": "Thermal phase transitions for Dicke-type models in the ultrastrong-coupling limit", - "doi": "10.1103/physreve.86.012101", - "nodeyear": 2012, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1024129122", - "attributes": { - "title": "Optical weight transfer in excitation spectra of ultra-cold bosons in two- and three-dimensional optical lattices", - "doi": "10.1088/0953-4075/45/14/145303", - "nodeyear": 2012, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1018731307", - "attributes": { - "title": "Equilibration and macroscopic quantum fluctuations in the Dicke model", - "doi": "10.1088/1367-2630/14/7/073011", - "nodeyear": 2012, - "ref-by-count": 60, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1002860337", - "attributes": { - "title": "Equilibration of isolated macroscopic quantum systems", - "doi": "10.1088/1367-2630/14/4/043020", - "nodeyear": 2012, - "ref-by-count": 81, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1018374514", - "attributes": { - "title": "Scattering theory of topological insulators and superconductors", - "doi": "10.1103/physrevb.85.165409", - "nodeyear": 2012, - "ref-by-count": 103, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1026807511", - "attributes": { - "title": "Ultrastrong Coupling of the Cyclotron Transition of a 2D Electron Gas to a THz Metamaterial", - "doi": "10.1126/science.1216022", - "nodeyear": 2012, - "ref-by-count": 367, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1018266335", - "attributes": { - "title": "Quantum Chaos and Effective Thermalization", - "doi": "10.1103/physrevlett.108.073601", - "nodeyear": 2012, - "ref-by-count": 85, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1004826141", - "attributes": { - "title": "Finite-temperature mutual information in a simple phase transition", - "doi": "10.1088/1742-5468/2012/01/p01023", - "nodeyear": 2012, - "ref-by-count": 60, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1027689745", - "attributes": { - "title": "Dynamics of nonequilibrium Dicke models", - "doi": "10.1103/physreva.85.013817", - "nodeyear": 2012, - "ref-by-count": 134, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1007363629", - "attributes": { - "title": "Simulating Z2 topological insulators with cold atoms in a one-dimensional optical lattice", - "doi": "10.1103/physreva.85.013638", - "nodeyear": 2012, - "ref-by-count": 79, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060759233", - "attributes": { - "title": "Frustration and Glassiness in Spin Models with Cavity-Mediated Interactions", - "doi": "10.1103/physrevlett.107.277201", - "nodeyear": 2011, - "ref-by-count": 122, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1021558365", - "attributes": { - "title": "Dicke Quantum Spin Glass of Atoms and Photons", - "doi": "10.1103/physrevlett.107.277202", - "nodeyear": 2011, - "ref-by-count": 142, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1020252590", - "attributes": { - "title": "A study of quantum phase transitions and quantum monodromy in the bending motion of non-rigid molecules", - "doi": "10.1016/j.molstruc.2011.10.016", - "nodeyear": 2011, - "ref-by-count": 47, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060637445", - "attributes": { - "title": "Topological classification of adiabatic processes", - "doi": "10.1103/physrevb.84.195410", - "nodeyear": 2011, - "ref-by-count": 33, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1043279965", - "attributes": { - "title": "Protected Quantum Computation with Multiple Resonators in Ultrastrong Coupling Circuit QED", - "doi": "10.1103/physrevlett.107.190402", - "nodeyear": 2011, - "ref-by-count": 93, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1051208711", - "attributes": { - "title": "Phase transitions and dark-state physics in two-color superradiance", - "doi": "10.1103/physreva.84.053856", - "nodeyear": 2011, - "ref-by-count": 35, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060758977", - "attributes": { - "title": "Strongly Dipolar Bose-Einstein Condensate of Dysprosium", - "doi": "10.1103/physrevlett.107.190401", - "nodeyear": 2011, - "ref-by-count": 577, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1050814349", - "attributes": { - "title": "Regularity and chaos at critical points of first-order quantum phase transitions", - "doi": "10.1103/physrevc.84.041302", - "nodeyear": 2011, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1038797520", - "attributes": { - "title": "Path integral approach to the full Dicke model", - "doi": "10.1016/j.physa.2011.05.018", - "nodeyear": 2011, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1013295901", - "attributes": { - "title": "Exploring Symmetry Breaking at the Dicke Quantum Phase Transition", - "doi": "10.1103/physrevlett.107.140402", - "nodeyear": 2011, - "ref-by-count": 286, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1050856595", - "attributes": { - "title": "Quantum Hall effect in a one-dimensional dynamical system", - "doi": "10.1103/physrevb.84.115133", - "nodeyear": 2011, - "ref-by-count": 71, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1040293571", - "attributes": { - "title": "Superradiant Phase Transitions and the Standard Description of Circuit QED", - "doi": "10.1103/physrevlett.107.113602", - "nodeyear": 2011, - "ref-by-count": 128, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1057982297", - "attributes": { - "title": "Complete experimental rovibrational eigenenergies of HCN up to 6880 cm\u22121 above the ground state", - "doi": "10.1063/1.3598942", - "nodeyear": 2011, - "ref-by-count": 37, - "is_input_DOI": false, - "category_for": "03:0.60;02:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1007789030", - "attributes": { - "title": "Majorana Fermions in Equilibrium and in Driven Cold-Atom Quantum Wires", - "doi": "10.1103/physrevlett.106.220402", - "nodeyear": 2011, - "ref-by-count": 530, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1025212910", - "attributes": { - "title": "Three-dimensional phase diagram of disordered HgTe/CdTe quantum spin-Hall wells", - "doi": "10.1103/physrevb.83.195119", - "nodeyear": 2011, - "ref-by-count": 56, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1018872620", - "attributes": { - "title": "Equilibration of quantum systems and subsystems", - "doi": "10.1088/1367-2630/13/5/053009", - "nodeyear": 2011, - "ref-by-count": 127, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060508644", - "attributes": { - "title": "No singularities in observables at the phase transition in the Dicke model", - "doi": "10.1103/physreva.83.051601", - "nodeyear": 2011, - "ref-by-count": 56, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1044585590", - "attributes": { - "title": "Sudden vanishing and reappearance of nonclassical effects: General occurrence of finite-time decays and periodic vanishings of nonclassicality and entanglement witnesses", - "doi": "10.1103/physreva.83.053814", - "nodeyear": 2011, - "ref-by-count": 43, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1063125329", - "attributes": { - "title": "Disorder-Induced Multiple Transition Involving Z2 Topological Insulator", - "doi": "10.1143/jpsj.80.053703", - "nodeyear": 2011, - "ref-by-count": 48, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1041781555", - "attributes": { - "title": "Floquet topological insulator in semiconductor quantum wells", - "doi": "10.1038/nphys1926", - "nodeyear": 2011, - "ref-by-count": 1104, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1029141598", - "attributes": { - "title": "Many-body coherent destruction of tunneling in photonic lattices", - "doi": "10.1103/physreva.83.034102", - "nodeyear": 2011, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1014126670", - "attributes": { - "title": "Quantum quench influenced by an excited-state phase transition", - "doi": "10.1103/physreva.83.033802", - "nodeyear": 2011, - "ref-by-count": 67, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1013320119", - "attributes": { - "title": "The Quantum Spin Hall Effect", - "doi": "10.1146/annurev-conmatphys-062910-140538", - "nodeyear": 2011, - "ref-by-count": 103, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1007431288", - "attributes": { - "title": "Qubit-oscillator system under ultrastrong coupling and extreme driving", - "doi": "10.1103/physreva.83.030301", - "nodeyear": 2011, - "ref-by-count": 35, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1005562834", - "attributes": { - "title": "Disordered topological insulators: a non-commutative geometry perspective", - "doi": "10.1088/1751-8113/44/11/113001", - "nodeyear": 2011, - "ref-by-count": 86, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1027465833", - "attributes": { - "title": "Quantum phase transitions in fully connected spin models: An entanglement perspective", - "doi": "10.1103/physreva.83.022327", - "nodeyear": 2011, - "ref-by-count": 33, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1045115933", - "attributes": { - "title": "Topological insulators and superconductors", - "doi": "10.1103/revmodphys.83.1057", - "nodeyear": 2011, - "ref-by-count": 8984, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1037152641", - "attributes": { - "title": "Colloquium: Nonequilibrium dynamics of closed interacting quantum systems", - "doi": "10.1103/revmodphys.83.863", - "nodeyear": 2011, - "ref-by-count": 1769, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1108131266", - "attributes": { - "title": "Understanding Quantum Phase Transitions", - "doi": "10.1201/b10273", - "nodeyear": 2010, - "ref-by-count": 79, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1057963818", - "attributes": { - "title": "Complete experimental rovibrational eigenenergies of HNC up to 3743cm\u22121 above the ground state", - "doi": "10.1063/1.3503508", - "nodeyear": 2010, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1052484094", - "attributes": { - "title": "Quasienergy description of the driven Jaynes-Cummings model", - "doi": "10.1103/physrevb.82.155129", - "nodeyear": 2010, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1062937215", - "attributes": { - "title": "FIDELITY APPROACH TO QUANTUM PHASE TRANSITIONS", - "doi": "10.1142/s0217979210056335", - "nodeyear": 2010, - "ref-by-count": 365, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1007437051", - "attributes": { - "title": "Entanglement and Sensitivity in Precision Measurements with States of a Fluctuating Number of Particles", - "doi": "10.1103/physrevlett.105.120501", - "nodeyear": 2010, - "ref-by-count": 79, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1035787773", - "attributes": { - "title": "No-go theorem for superradiant quantum phase transitions in cavity QED and counter-example in circuit QED", - "doi": "10.1038/ncomms1069", - "nodeyear": 2010, - "ref-by-count": 214, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1018529463", - "attributes": { - "title": "Exploring topological phases with quantum walks", - "doi": "10.1103/physreva.82.033429", - "nodeyear": 2010, - "ref-by-count": 331, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1037217818", - "attributes": { - "title": "Quantum Nondemolition Measurement of Large-Spin Ensembles by Dynamical Decoupling", - "doi": "10.1103/physrevlett.105.093602", - "nodeyear": 2010, - "ref-by-count": 59, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042729374", - "attributes": { - "title": "Critical State of the Anderson Transition: Between a Metal and an Insulator", - "doi": "10.1103/physrevlett.105.090601", - "nodeyear": 2010, - "ref-by-count": 90, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1039430067", - "attributes": { - "title": "Collective Excitations of a Dipolar Bose-Einstein Condensate", - "doi": "10.1103/physrevlett.105.040404", - "nodeyear": 2010, - "ref-by-count": 58, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1009145988", - "attributes": { - "title": "Collective Dynamics of Bose-Einstein Condensates in Optical Cavities", - "doi": "10.1103/physrevlett.105.043001", - "nodeyear": 2010, - "ref-by-count": 120, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1016989667", - "attributes": { - "title": "Testing nonclassicality in multimode fields: A unified derivation of classical inequalities", - "doi": "10.1103/physreva.82.013824", - "nodeyear": 2010, - "ref-by-count": 141, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1005408468", - "attributes": { - "title": "Adiabatic creation of atomic squeezing in dark states versus decoherences", - "doi": "10.1103/physreva.82.012112", - "nodeyear": 2010, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1021507156", - "attributes": { - "title": "Landau\u2013Zener\u2013St\u00fcckelberg interferometry", - "doi": "10.1016/j.physrep.2010.03.002", - "nodeyear": 2010, - "ref-by-count": 528, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1033015118", - "attributes": { - "title": "Photoinduced Transition between Conventional and Topological Insulators in Two-Dimensional Electronic Systems", - "doi": "10.1103/physrevlett.105.017401", - "nodeyear": 2010, - "ref-by-count": 239, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1001545329", - "attributes": { - "title": "Entanglement-assisted atomic clock beyond the projection noise limit", - "doi": "10.1088/1367-2630/12/6/065032", - "nodeyear": 2010, - "ref-by-count": 118, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1017887827", - "attributes": { - "title": "The network model for the quantum spin Hall effect: two-dimensional Dirac fermions, topological quantum numbers and corner multifractality", - "doi": "10.1088/1367-2630/12/6/065005", - "nodeyear": 2010, - "ref-by-count": 23, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1047837644", - "attributes": { - "title": "Ultrastrong coupling between a cavity resonator and the cyclotron transition of a two-dimensional electron gas in the case of an integer filling factor", - "doi": "10.1103/physrevb.81.235303", - "nodeyear": 2010, - "ref-by-count": 86, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1015483129", - "attributes": { - "title": "Circuit QED scheme for the realization of the Lipkin-Meshkov-Glick model", - "doi": "10.1209/0295-5075/90/54001", - "nodeyear": 2010, - "ref-by-count": 41, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1025519412", - "attributes": { - "title": "Three-Dimensional Roton Excitations and Supersolid Formation in Rydberg-Excited Bose-Einstein Condensates", - "doi": "10.1103/physrevlett.104.195302", - "nodeyear": 2010, - "ref-by-count": 316, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1002419553", - "attributes": { - "title": "Robust and scalable optical one-way quantum computation", - "doi": "10.1103/physreva.81.052332", - "nodeyear": 2010, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1065173408", - "attributes": { - "title": "Polarization squeezing and multipartite entanglement of triphoton states", - "doi": "10.1364/josab.27.00a105", - "nodeyear": 2010, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "09:0.33;01:0.33;02:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1035001229", - "attributes": { - "title": "Analysis of the FASSST rotational spectrum of NCNCS in view of quantum monodromy", - "doi": "10.1039/b922023b", - "nodeyear": 2010, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1031435740", - "attributes": { - "title": "Dicke-Model Phase Transition in the Quantum Motion of a Bose-Einstein Condensate in an Optical Cavity", - "doi": "10.1103/physrevlett.104.130401", - "nodeyear": 2010, - "ref-by-count": 288, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1049607631", - "attributes": { - "title": "Sub-shot-noise quantum metrology with entangled identical particles", - "doi": "10.1016/j.aop.2010.01.005", - "nodeyear": 2010, - "ref-by-count": 65, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1048839595", - "attributes": { - "title": "Quantum Noise Limited and Entanglement-Assisted Magnetometry", - "doi": "10.1103/physrevlett.104.133601", - "nodeyear": 2010, - "ref-by-count": 281, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1013441281", - "attributes": { - "title": "Nonlinear atom interferometer surpasses classical precision limit", - "doi": "10.1038/nature08919", - "nodeyear": 2010, - "ref-by-count": 651, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1004049717", - "attributes": { - "title": "Atom-chip-based generation of entanglement for quantum metrology", - "doi": "10.1038/nature08988", - "nodeyear": 2010, - "ref-by-count": 597, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060756669", - "attributes": { - "title": "Sub-Projection-Noise Sensitivity in Broadband Atomic Magnetometry", - "doi": "10.1103/physrevlett.104.093602", - "nodeyear": 2010, - "ref-by-count": 107, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060507227", - "attributes": { - "title": "Universality of the negativity in the Lipkin-Meshkov-Glick model", - "doi": "10.1103/physreva.81.032311", - "nodeyear": 2010, - "ref-by-count": 64, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060756621", - "attributes": { - "title": "States of an Ensemble of Two-Level Atoms with Reduced Quantum Uncertainty", - "doi": "10.1103/physrevlett.104.073604", - "nodeyear": 2010, - "ref-by-count": 221, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1015906101", - "attributes": { - "title": "Implementation of Cavity Squeezing of a Collective Atomic Spin", - "doi": "10.1103/physrevlett.104.073602", - "nodeyear": 2010, - "ref-by-count": 295, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1064232873", - "attributes": { - "title": "Parametric resonance and spin-charge separation in 1D fermionic systems", - "doi": "10.1209/0295-5075/89/40005", - "nodeyear": 2010, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060507174", - "attributes": { - "title": "Metastable quantum phase transitions in a periodic one-dimensional Bose gas. II. Many-body theory", - "doi": "10.1103/physreva.81.023625", - "nodeyear": 2010, - "ref-by-count": 51, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1038435541", - "attributes": { - "title": "Sudden vanishing of spin squeezing under decoherence", - "doi": "10.1103/physreva.81.022106", - "nodeyear": 2010, - "ref-by-count": 76, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1049014120", - "attributes": { - "title": "Vacuum Degeneracy of a Circuit QED System in the Ultrastrong Coupling Regime", - "doi": "10.1103/physrevlett.104.023601", - "nodeyear": 2010, - "ref-by-count": 96, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1034220073", - "attributes": { - "title": "High Bandwidth Atomic Magnetometery with Continuous Quantum Nondemolition Measurements", - "doi": "10.1103/physrevlett.104.013601", - "nodeyear": 2010, - "ref-by-count": 89, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060506993", - "attributes": { - "title": "Entanglement and parametric resonance in driven quantum systems", - "doi": "10.1103/physreva.81.012316", - "nodeyear": 2010, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042995256", - "attributes": { - "title": "Quantum interface between light and atomic ensembles", - "doi": "10.1103/revmodphys.82.1041", - "nodeyear": 2010, - "ref-by-count": 835, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1030644001", - "attributes": { - "title": "Finite-size behavior of quantum collective spin systems", - "doi": "10.1103/physreva.81.013818", - "nodeyear": 2010, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1004083979", - "attributes": { - "title": "Colloquium: Topological insulators", - "doi": "10.1103/revmodphys.82.3045", - "nodeyear": 2010, - "ref-by-count": 12556, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1057929181", - "attributes": { - "title": "State-selective spectroscopy of water up to its first dissociation limit", - "doi": "10.1063/1.3273207", - "nodeyear": 2009, - "ref-by-count": 52, - "is_input_DOI": false, - "category_for": "02:0.50;03:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1053140660", - "attributes": { - "title": "The physics of dipolar bosonic quantum gases", - "doi": "10.1088/0034-4885/72/12/126401", - "nodeyear": 2009, - "ref-by-count": 1052, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1010719555", - "attributes": { - "title": "Theory of the Topological Anderson Insulator", - "doi": "10.1103/physrevlett.103.196805", - "nodeyear": 2009, - "ref-by-count": 255, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1026487091", - "attributes": { - "title": "Extracavity quantum vacuum radiation from a single qubit", - "doi": "10.1103/physreva.80.053810", - "nodeyear": 2009, - "ref-by-count": 163, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1017394305", - "attributes": { - "title": "Optimal control of number squeezing in trapped Bose-Einstein condensates", - "doi": "10.1103/physreva.80.053625", - "nodeyear": 2009, - "ref-by-count": 55, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060756185", - "attributes": { - "title": "Magnetoroton Softening in Rb Spinor Condensates with Dipolar Interactions", - "doi": "10.1103/physrevlett.103.185301", - "nodeyear": 2009, - "ref-by-count": 30, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1007113001", - "attributes": { - "title": "Squeezing of atomic quantum projection noise", - "doi": "10.1080/09500340903033682", - "nodeyear": 2009, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1020456012", - "attributes": { - "title": "Quantum chaos and critical behavior on a chip", - "doi": "10.1103/physrevb.80.165308", - "nodeyear": 2009, - "ref-by-count": 43, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1012500209", - "attributes": { - "title": "Emergent crystallinity and frustration with Bose\u2013Einstein condensates in multimode cavities", - "doi": "10.1038/nphys1403", - "nodeyear": 2009, - "ref-by-count": 159, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1062460456", - "attributes": { - "title": "Quantum Simulators", - "doi": "10.1126/science.1177838", - "nodeyear": 2009, - "ref-by-count": 584, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1005186218", - "attributes": { - "title": "Many-Body Coherent Destruction of Tunneling", - "doi": "10.1103/physrevlett.103.133002", - "nodeyear": 2009, - "ref-by-count": 113, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1044365852", - "attributes": { - "title": "Unified description of inhomogeneities, dissipation and transport in quantum light\u2013atom interfaces", - "doi": "10.1088/0953-4075/42/19/195502", - "nodeyear": 2009, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1009071596", - "attributes": { - "title": "Spin squeezing in a generalized one-axis twisting model", - "doi": "10.1088/1367-2630/11/7/073049", - "nodeyear": 2009, - "ref-by-count": 105, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1015377513", - "attributes": { - "title": "Critical exponent for the quantum Hall transition", - "doi": "10.1103/physrevb.80.041304", - "nodeyear": 2009, - "ref-by-count": 104, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1021047010", - "attributes": { - "title": "Mesoscopic atomic entanglement for precision measurements beyond the standard quantum limit", - "doi": "10.1073/pnas.0901550106", - "nodeyear": 2009, - "ref-by-count": 287, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060506382", - "attributes": { - "title": "Fisher information and spin squeezing in the Lipkin-Meshkov-Glick model", - "doi": "10.1103/physreva.80.012318", - "nodeyear": 2009, - "ref-by-count": 102, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1047238674", - "attributes": { - "title": "Quantum entanglement of spin-1 bosons with coupled ground states in optical lattices", - "doi": "10.1088/0953-4075/42/14/145505", - "nodeyear": 2009, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1051513505", - "attributes": { - "title": "Spin squeezing and entanglement", - "doi": "10.1103/physreva.79.042334", - "nodeyear": 2009, - "ref-by-count": 139, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1030702899", - "attributes": { - "title": "Topological Anderson Insulator", - "doi": "10.1103/physrevlett.102.136806", - "nodeyear": 2009, - "ref-by-count": 324, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1017748089", - "attributes": { - "title": "Nonadiabaticity and large fluctuations in a many-particle Landau-Zener problem", - "doi": "10.1103/physreva.79.042703", - "nodeyear": 2009, - "ref-by-count": 70, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1040606488", - "attributes": { - "title": "Entanglement detection", - "doi": "10.1016/j.physrep.2009.02.004", - "nodeyear": 2009, - "ref-by-count": 1304, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1009280350", - "attributes": { - "title": "Entanglement, Nonlinear Dynamics, and the Heisenberg Limit", - "doi": "10.1103/physrevlett.102.100401", - "nodeyear": 2009, - "ref-by-count": 540, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1023112037", - "attributes": { - "title": "Sub-cycle switch-on of ultrastrong light\u2013matter interaction", - "doi": "10.1038/nature07838", - "nodeyear": 2009, - "ref-by-count": 423, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1005768866", - "attributes": { - "title": "Photovoltaic Hall effect in graphene", - "doi": "10.1103/physrevb.79.081406", - "nodeyear": 2009, - "ref-by-count": 823, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1028284777", - "attributes": { - "title": "Optimizing number squeezing when splitting a mesoscopic condensate", - "doi": "10.1103/physreva.79.021603", - "nodeyear": 2009, - "ref-by-count": 77, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1034324600", - "attributes": { - "title": "Spin squeezing in the presence of dissipation", - "doi": "10.1016/j.physleta.2008.12.040", - "nodeyear": 2009, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042003394", - "attributes": { - "title": "Spin Squeezing of a Cold Atomic Ensemble with the Nuclear Spin of One-Half", - "doi": "10.1103/physrevlett.102.033601", - "nodeyear": 2009, - "ref-by-count": 106, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1053325657", - "attributes": { - "title": "Spin squeezing in a bimodal condensate: spatial dynamics and particle losses", - "doi": "10.1140/epjb/e2008-00472-6", - "nodeyear": 2009, - "ref-by-count": 72, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1002548185", - "attributes": { - "title": "Quantum entanglement", - "doi": "10.1103/revmodphys.81.865", - "nodeyear": 2009, - "ref-by-count": 5374, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1001677407", - "attributes": { - "title": "Optics and interferometry with atoms and molecules", - "doi": "10.1103/revmodphys.81.1051", - "nodeyear": 2009, - "ref-by-count": 941, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1038056243", - "attributes": { - "title": "Quantum phase transitions and structural evolution in nuclei", - "doi": "10.1016/j.ppnp.2008.06.002", - "nodeyear": 2009, - "ref-by-count": 72, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1016014950", - "attributes": { - "title": "Quantum phase transitions in the interacting boson model", - "doi": "10.1016/j.ppnp.2008.08.001", - "nodeyear": 2009, - "ref-by-count": 159, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1098669586", - "attributes": { - "title": "Introduction to Optical Quantum Information Processing", - "doi": "10.1017/cbo9781139193658", - "nodeyear": 2009, - "ref-by-count": 201, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1009420992", - "attributes": { - "title": "Controlled Generation of Squeezed States of Microwave Radiation in a Superconducting Resonant Circuit", - "doi": "10.1103/physrevlett.101.253602", - "nodeyear": 2008, - "ref-by-count": 58, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019769175", - "attributes": { - "title": "Experimental Observation of the Anderson Metal-Insulator Transition with Atomic Matter Waves", - "doi": "10.1103/physrevlett.101.255702", - "nodeyear": 2008, - "ref-by-count": 302, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1024053463", - "attributes": { - "title": "Fully connected network of superconducting qubits in a cavity", - "doi": "10.1088/1367-2630/10/11/113020", - "nodeyear": 2008, - "ref-by-count": 43, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1039526439", - "attributes": { - "title": "Magnetic Dipolar Interaction in a Bose-Einstein Condensate Atomic Interferometer", - "doi": "10.1103/physrevlett.101.190405", - "nodeyear": 2008, - "ref-by-count": 85, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1032879437", - "attributes": { - "title": "Dynamical properties across a quantum phase transition in the Lipkin-Meshkov-Glick model", - "doi": "10.1103/physreva.78.052329", - "nodeyear": 2008, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1030131727", - "attributes": { - "title": "Backaction noise produced via cavity-aided nondemolition measurement of an atomic clock state", - "doi": "10.1103/physreva.78.051803", - "nodeyear": 2008, - "ref-by-count": 21, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1030554066", - "attributes": { - "title": "Squeezing and entanglement in a Bose\u2013Einstein condensate", - "doi": "10.1038/nature07332", - "nodeyear": 2008, - "ref-by-count": 567, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1037292429", - "attributes": { - "title": "Quantum criticality as a resource for quantum estimation", - "doi": "10.1103/physreva.78.042105", - "nodeyear": 2008, - "ref-by-count": 134, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1015752685", - "attributes": { - "title": "Formation of Ultracold Polar Molecules in the Rovibrational Ground State", - "doi": "10.1103/physrevlett.101.133004", - "nodeyear": 2008, - "ref-by-count": 497, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1062458662", - "attributes": { - "title": "A High Phase-Space-Density Gas of Polar Molecules", - "doi": "10.1126/science.1163861", - "nodeyear": 2008, - "ref-by-count": 1412, - "is_input_DOI": false, - "category_for": "03:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1000524935", - "attributes": { - "title": "Boundary criticality at the Anderson transition between a metal and a quantum spin Hall insulator in two dimensions", - "doi": "10.1103/physrevb.78.115301", - "nodeyear": 2008, - "ref-by-count": 39, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019072925", - "attributes": { - "title": "Adiabatic quantum dynamics of the Lipkin-Meshkov-Glick model", - "doi": "10.1103/physrevb.78.104426", - "nodeyear": 2008, - "ref-by-count": 70, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1018429633", - "attributes": { - "title": "Reconstruction of non-classical cavity field states with snapshots of their decoherence", - "doi": "10.1038/nature07288", - "nodeyear": 2008, - "ref-by-count": 404, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042980616", - "attributes": { - "title": "Spin squeezing in optical lattice clocks via lattice-based QND measurements", - "doi": "10.1088/1367-2630/10/7/073014", - "nodeyear": 2008, - "ref-by-count": 39, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060625484", - "attributes": { - "title": "Classical dynamics of resonantly modulated large-spin systems", - "doi": "10.1103/physrevb.78.024401", - "nodeyear": 2008, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1006613232", - "attributes": { - "title": "Computational molecular spectroscopy for X\u223c2\u0394 NiCN: Large-amplitude bending motion", - "doi": "10.1016/j.jms.2008.04.001", - "nodeyear": 2008, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1006852009", - "attributes": { - "title": "Atomic spin squeezing in an optical cavity", - "doi": "10.1103/physreva.77.063811", - "nodeyear": 2008, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1037170495", - "attributes": { - "title": "Inhomogeneous light shift effects on atomic quantum state evolution in non-destructive measurements", - "doi": "10.1088/1367-2630/10/5/053032", - "nodeyear": 2008, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1014259920", - "attributes": { - "title": "Optimum Spin Squeezing in Bose-Einstein Condensates with Particle Losses", - "doi": "10.1103/physrevlett.100.210401", - "nodeyear": 2008, - "ref-by-count": 110, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1007403980", - "attributes": { - "title": "Near infrared emission spectrum of HCN", - "doi": "10.1016/j.jms.2008.01.006", - "nodeyear": 2008, - "ref-by-count": 25, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1046531133", - "attributes": { - "title": "The squeeze goes on", - "doi": "10.1038/453045a", - "nodeyear": 2008, - "ref-by-count": 43, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1021493626", - "attributes": { - "title": "Self-organization of a Bose-Einstein condensate in an optical cavity", - "doi": "10.1140/epjd/e2008-00074-6", - "nodeyear": 2008, - "ref-by-count": 143, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1023551219", - "attributes": { - "title": "Electric-dipole-forbidden nuclear transitions driven by super-intense laser fields", - "doi": "10.1103/physrevc.77.044602", - "nodeyear": 2008, - "ref-by-count": 37, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1018345323", - "attributes": { - "title": "Collective spin systems in dispersive optical cavity QED: Quantum phase transitions and entanglement", - "doi": "10.1103/physreva.77.043810", - "nodeyear": 2008, - "ref-by-count": 53, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1009497503", - "attributes": { - "title": "A quantum-enhanced prototype gravitational-wave detector", - "doi": "10.1038/nphys920", - "nodeyear": 2008, - "ref-by-count": 238, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1045592513", - "attributes": { - "title": "The quadratic spin squeezing operators", - "doi": "10.1088/1751-8113/41/14/145302", - "nodeyear": 2008, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060504243", - "attributes": { - "title": "Algebraic approach to two-dimensional systems: Shape phase transitions, monodromy, and thermodynamic quantities", - "doi": "10.1103/physreva.77.032115", - "nodeyear": 2008, - "ref-by-count": 84, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1004419214", - "attributes": { - "title": "Entanglement and squeezing of multi-qubit systems using a two-axis countertwisting Hamiltonian with an external field", - "doi": "10.1016/j.physleta.2007.12.021", - "nodeyear": 2008, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1013094749", - "attributes": { - "title": "Stabilization of a purely dipolar quantum gas against collapse", - "doi": "10.1038/nphys887", - "nodeyear": 2008, - "ref-by-count": 328, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1007390089", - "attributes": { - "title": "Sub-Shot-Noise Magnetometry with a Correlated Spin-Relaxation Dominated Alkali-Metal Vapor", - "doi": "10.1103/physrevlett.100.073002", - "nodeyear": 2008, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1001441208", - "attributes": { - "title": "Ultracold atoms in optical lattices generated by quantized light fields", - "doi": "10.1140/epjd/e2008-00016-4", - "nodeyear": 2008, - "ref-by-count": 119, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1048347725", - "attributes": { - "title": "Dynamical Quantum Phase Transitions in the Dissipative Lipkin-Meshkov-Glick Model with Proposed Realization in Optical Cavity QED", - "doi": "10.1103/physrevlett.100.040403", - "nodeyear": 2008, - "ref-by-count": 124, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1011465158", - "attributes": { - "title": "Collective Atomic Recoil Lasing and Superradiant Rayleigh Scattering in a high\u2010Q ring cavity", - "doi": "10.1063/1.2839129", - "nodeyear": 2008, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042363867", - "attributes": { - "title": "Anderson transitions", - "doi": "10.1103/revmodphys.80.1355", - "nodeyear": 2008, - "ref-by-count": 1131, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1013088353", - "attributes": { - "title": "Many-body physics with ultracold gases", - "doi": "10.1103/revmodphys.80.885", - "nodeyear": 2008, - "ref-by-count": 5682, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1044584359", - "attributes": { - "title": "Quantum Reconstruction of an Intense Polarization Squeezed Optical State", - "doi": "10.1103/physrevlett.99.220401", - "nodeyear": 2007, - "ref-by-count": 36, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1021708856", - "attributes": { - "title": "Dynamical Control of Matter-Wave Tunneling in Periodic Potentials", - "doi": "10.1103/physrevlett.99.220403", - "nodeyear": 2007, - "ref-by-count": 478, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1050049937", - "attributes": { - "title": "Tuning phase transition between quantum spin Hall and ordinary insulating phases", - "doi": "10.1103/physrevb.76.205304", - "nodeyear": 2007, - "ref-by-count": 106, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060834776", - "attributes": { - "title": "Storage of Spin Squeezing in a Two-Component Bose-Einstein Condensate", - "doi": "10.1103/physrevlett.99.170405", - "nodeyear": 2007, - "ref-by-count": 55, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1013564949", - "attributes": { - "title": "Generalized Rotating-Wave Approximation for Arbitrarily Large Coupling", - "doi": "10.1103/physrevlett.99.173601", - "nodeyear": 2007, - "ref-by-count": 227, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1034685599", - "attributes": { - "title": "Quantum Spin Hall Insulator State in HgTe Quantum Wells", - "doi": "10.1126/science.1148047", - "nodeyear": 2007, - "ref-by-count": 4255, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1041879228", - "attributes": { - "title": "Functional methods in the generalized Dicke model", - "doi": "10.1088/1751-8113/40/39/016", - "nodeyear": 2007, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1014388554", - "attributes": { - "title": "Fidelity, dynamic structure factor, and susceptibility in critical phenomena", - "doi": "10.1103/physreve.76.022101", - "nodeyear": 2007, - "ref-by-count": 366, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1048139891", - "attributes": { - "title": "Thermodynamical Limit of the Lipkin-Meshkov-Glick Model", - "doi": "10.1103/physrevlett.99.050402", - "nodeyear": 2007, - "ref-by-count": 152, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060621943", - "attributes": { - "title": "Period-voltage-driven quantum phase transition of superconducting charge qubits", - "doi": "10.1103/physrevb.76.054512", - "nodeyear": 2007, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1037196319", - "attributes": { - "title": "Two-mode squeezed states and entangled states of two mechanical resonators", - "doi": "10.1103/physrevb.76.064305", - "nodeyear": 2007, - "ref-by-count": 78, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019211121", - "attributes": { - "title": "Two-dimensional spin-filtered chiral network model for the Z2 quantum spin-Hall effect", - "doi": "10.1103/physrevb.76.075301", - "nodeyear": 2007, - "ref-by-count": 73, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1031310290", - "attributes": { - "title": "Strong dipolar effects in a quantum ferrofluid", - "doi": "10.1038/nature06036", - "nodeyear": 2007, - "ref-by-count": 387, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1031979890", - "attributes": { - "title": "Topological insulators with inversion symmetry", - "doi": "10.1103/physrevb.76.045302", - "nodeyear": 2007, - "ref-by-count": 2860, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1032955577", - "attributes": { - "title": "Probing the superfluid\u2013Mott-insulating shell structure of cold atoms by parametric excitations", - "doi": "10.1103/physreva.75.063612", - "nodeyear": 2007, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1014943403", - "attributes": { - "title": "Two-level systems driven by large-amplitude fields", - "doi": "10.1103/physreva.75.063414", - "nodeyear": 2007, - "ref-by-count": 179, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1023231651", - "attributes": { - "title": "Study of squeezing in spin clusters", - "doi": "10.1016/j.physleta.2007.02.007", - "nodeyear": 2007, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1025338423", - "attributes": { - "title": "Atomic squeezing in assembly of two two-level atoms interacting with a single mode coherent radiation", - "doi": "10.1140/epjd/e2007-00042-8", - "nodeyear": 2007, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1022911870", - "attributes": { - "title": "Localization in a Quantum Spin Hall System", - "doi": "10.1103/physrevlett.98.076802", - "nodeyear": 2007, - "ref-by-count": 110, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060503021", - "attributes": { - "title": "Spatial dynamics and spin squeezing in Bose-Einstein condensates", - "doi": "10.1103/physreva.75.023618", - "nodeyear": 2007, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060503017", - "attributes": { - "title": "Quantum dynamics of a spin-1 condensate in a double-well potential", - "doi": "10.1103/physreva.75.023605", - "nodeyear": 2007, - "ref-by-count": 26, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1037722040", - "attributes": { - "title": "Extended Coherence Time with Atom-Number Squeezed States", - "doi": "10.1103/physrevlett.98.040402", - "nodeyear": 2007, - "ref-by-count": 59, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1023876405", - "attributes": { - "title": "Entanglement entropy in collective models", - "doi": "10.1088/1742-5468/2007/01/p01015", - "nodeyear": 2007, - "ref-by-count": 69, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1046281967", - "attributes": { - "title": "Proposed realization of the Dicke-model quantum phase transition in an optical cavity QED system", - "doi": "10.1103/physreva.75.013804", - "nodeyear": 2007, - "ref-by-count": 370, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1024518599", - "attributes": { - "title": "Decoherence and the Quantum-To-Classical Transition", - "doi": "10.1007/978-3-540-35775-9", - "nodeyear": 2007, - "ref-by-count": 103, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1030957871", - "attributes": { - "title": "Quantum Spin Hall Effect and Topological Phase Transition in HgTe Quantum Wells", - "doi": "10.1126/science.1133734", - "nodeyear": 2006, - "ref-by-count": 4665, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1017626170", - "attributes": { - "title": "Generalized spin-squeezing inequalities in N-qubit systems: Theory and experiment", - "doi": "10.1103/physreva.74.052319", - "nodeyear": 2006, - "ref-by-count": 69, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1047521083", - "attributes": { - "title": "Infrared emission spectrum of hot D2O", - "doi": "10.1016/j.jms.2006.09.007", - "nodeyear": 2006, - "ref-by-count": 41, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1029816697", - "attributes": { - "title": "Infinite-range Ising ferromagnet in a time-dependent transverse magnetic field: Quench and ac dynamics near the quantum critical point", - "doi": "10.1103/physrevb.74.144423", - "nodeyear": 2006, - "ref-by-count": 79, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1017123471", - "attributes": { - "title": "The hidden kernel of molecular quasi-linearity: Quantum monodromy", - "doi": "10.1016/j.molstruc.2006.06.036", - "nodeyear": 2006, - "ref-by-count": 64, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1030627369", - "attributes": { - "title": "Scaling behavior of the adiabatic Dicke model", - "doi": "10.1103/physreva.74.022324", - "nodeyear": 2006, - "ref-by-count": 39, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1036259707", - "attributes": { - "title": "Quantum transport phenomena in disordered electron systems with spin\u2013orbit coupling in two dimensions and below", - "doi": "10.1016/j.physe.2006.03.102", - "nodeyear": 2006, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1016510934", - "attributes": { - "title": "Spin Squeezing and Light Entanglement in Coherent Population Trapping", - "doi": "10.1103/physrevlett.97.023605", - "nodeyear": 2006, - "ref-by-count": 52, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1043762285", - "attributes": { - "title": "Concurrence in collective models", - "doi": "10.1103/physreva.73.062318", - "nodeyear": 2006, - "ref-by-count": 65, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1012449759", - "attributes": { - "title": "Tuning the Mott Transition in a Bose-Einstein Condensate by Multiple Photon Absorption", - "doi": "10.1103/physrevlett.96.210403", - "nodeyear": 2006, - "ref-by-count": 84, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1027944496", - "attributes": { - "title": "Finite-size scaling exponents in the Dicke model", - "doi": "10.1209/epl/i2006-10041-9", - "nodeyear": 2006, - "ref-by-count": 133, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060502238", - "attributes": { - "title": "Spin squeezing and entanglement in a dispersive cavity", - "doi": "10.1103/physreva.73.053817", - "nodeyear": 2006, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1044935711", - "attributes": { - "title": "Critical regime of two-dimensional Ando model: relation between critical conductance and fractal dimension of electronic eigenstates", - "doi": "10.1088/0305-4470/39/13/003", - "nodeyear": 2006, - "ref-by-count": 40, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1024394193", - "attributes": { - "title": "Spin squeezing properties in the quantum kicked top model", - "doi": "10.1088/0953-4075/39/3/009", - "nodeyear": 2006, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1017239584", - "attributes": { - "title": "Quantum Metrology", - "doi": "10.1103/physrevlett.96.010401", - "nodeyear": 2006, - "ref-by-count": 1266, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060839612", - "attributes": { - "title": "Dynamics of Bose-Einstein condensates in optical lattices", - "doi": "10.1103/revmodphys.78.179", - "nodeyear": 2006, - "ref-by-count": 1217, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060501875", - "attributes": { - "title": "Coherence dynamics of two-mode condensates in asymmetric potentials", - "doi": "10.1103/physreva.73.013602", - "nodeyear": 2006, - "ref-by-count": 25, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042812951", - "attributes": { - "title": "Generating conditional atomic entanglement by measuring photon number in a single output channel", - "doi": "10.1103/physreva.73.013801", - "nodeyear": 2006, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1043998630", - "attributes": { - "title": "Superfluid-Insulator Transition in a Periodically Driven Optical Lattice", - "doi": "10.1103/physrevlett.95.260404", - "nodeyear": 2005, - "ref-by-count": 420, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1052164705", - "attributes": { - "title": "Cold Atom Dynamics in a Quantum Optical Lattice Potential", - "doi": "10.1103/physrevlett.95.260401", - "nodeyear": 2005, - "ref-by-count": 146, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1026041336", - "attributes": { - "title": "Quantum Spin Hall Effect in Graphene", - "doi": "10.1103/physrevlett.95.226801", - "nodeyear": 2005, - "ref-by-count": 5229, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1002431819", - "attributes": { - "title": "Conditions for spin squeezing in a cold87Rb ensemble", - "doi": "10.1088/1464-4266/7/12/016", - "nodeyear": 2005, - "ref-by-count": 35, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1046878062", - "attributes": { - "title": "Spectroscopic signatures of nonrigidity: Algebraic analyses of infrared and Raman transitions in nonrigid species", - "doi": "10.1016/j.cplett.2005.07.119", - "nodeyear": 2005, - "ref-by-count": 35, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1010453004", - "attributes": { - "title": "Monodromy in the water molecule", - "doi": "10.1016/j.cplett.2005.08.028", - "nodeyear": 2005, - "ref-by-count": 70, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042249380", - "attributes": { - "title": "Z2 Topological Order and the Quantum Spin Hall Effect", - "doi": "10.1103/physrevlett.95.146802", - "nodeyear": 2005, - "ref-by-count": 4283, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1023373666", - "attributes": { - "title": "Long-Lived Quantum Memory with Nuclear Atomic Spins", - "doi": "10.1103/physrevlett.95.123002", - "nodeyear": 2005, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1032459275", - "attributes": { - "title": "Spin Squeezing Inequalities and Entanglement of N Qubit States", - "doi": "10.1103/physrevlett.95.120502", - "nodeyear": 2005, - "ref-by-count": 147, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1020459025", - "attributes": { - "title": "Dynamics of a Quantum Phase Transition", - "doi": "10.1103/physrevlett.95.105701", - "nodeyear": 2005, - "ref-by-count": 512, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1041985067", - "attributes": { - "title": "Continuous unitary transformations and finite-size scaling exponents in the Lipkin-Meshkov-Glick model", - "doi": "10.1103/physrevb.71.224420", - "nodeyear": 2005, - "ref-by-count": 187, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1015653335", - "attributes": { - "title": "Bose-Einstein Condensation of Chromium", - "doi": "10.1103/physrevlett.94.160401", - "nodeyear": 2005, - "ref-by-count": 892, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060501109", - "attributes": { - "title": "Quantum-noise-limited interferometric measurement of atomic noise: Towards spin squeezing on the Cs clock transition", - "doi": "10.1103/physreva.71.043807", - "nodeyear": 2005, - "ref-by-count": 51, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060501102", - "attributes": { - "title": "Dynamics of Bose-Einstein condensates in double-well potentials", - "doi": "10.1103/physreva.71.043603", - "nodeyear": 2005, - "ref-by-count": 37, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1034908465", - "attributes": { - "title": "Entanglement and spin-squeezing properties for three bosons in two modes", - "doi": "10.1103/physreva.71.042317", - "nodeyear": 2005, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1007520534", - "attributes": { - "title": "Atomic quantum memory: Cavity versus single-pass schemes", - "doi": "10.1103/physreva.71.043801", - "nodeyear": 2005, - "ref-by-count": 53, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1052759525", - "attributes": { - "title": "Coherent and collective quantum optical effects in mesoscopic systems", - "doi": "10.1016/j.physrep.2004.12.002", - "nodeyear": 2005, - "ref-by-count": 361, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060839596", - "attributes": { - "title": "Colloquium: Bulk Bogoliubov excitations in a Bose-Einstein condensate", - "doi": "10.1103/revmodphys.77.187", - "nodeyear": 2005, - "ref-by-count": 148, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1007053255", - "attributes": { - "title": "Limits to phase resolution in matter-wave interferometry", - "doi": "10.1103/physreva.70.063612", - "nodeyear": 2004, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1062451106", - "attributes": { - "title": "Quantum-Enhanced Measurements: Beating the Standard Quantum Limit", - "doi": "10.1126/science.1104149", - "nodeyear": 2004, - "ref-by-count": 1731, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1049164678", - "attributes": { - "title": "Atomic squeezing under collective emission", - "doi": "10.1103/physreva.70.053828", - "nodeyear": 2004, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1033004759", - "attributes": { - "title": "Spin squeezing and precision probing with light and samples of atoms in the Gaussian description", - "doi": "10.1103/physreva.70.052324", - "nodeyear": 2004, - "ref-by-count": 84, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1039525977", - "attributes": { - "title": "Numerical estimation of the \u03b2 function in two-dimensional systems with spin-orbit coupling", - "doi": "10.1103/physrevb.70.035115", - "nodeyear": 2004, - "ref-by-count": 52, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1016807636", - "attributes": { - "title": "Correlated motion of two atoms trapped in a single-mode cavity field", - "doi": "10.1103/physreva.70.013414", - "nodeyear": 2004, - "ref-by-count": 30, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1062449614", - "attributes": { - "title": "Toward Heisenberg-Limited Spectroscopy with Multiparticle Entangled States", - "doi": "10.1126/science.1097576", - "nodeyear": 2004, - "ref-by-count": 417, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060828404", - "attributes": { - "title": "Quantum Phase Transitions in Mesoscopic Systems", - "doi": "10.1103/physrevlett.92.212501", - "nodeyear": 2004, - "ref-by-count": 151, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060828378", - "attributes": { - "title": "Electromagnetically Induced Transparency with Squeezed Vacuum", - "doi": "10.1103/physrevlett.92.203602", - "nodeyear": 2004, - "ref-by-count": 78, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1039875361", - "attributes": { - "title": "Entanglement detection in optical lattices of bosonic atoms with collective measurements", - "doi": "10.1103/physreva.69.052327", - "nodeyear": 2004, - "ref-by-count": 53, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1022201659", - "attributes": { - "title": "Entanglement and the Phase Transition in Single-Mode Superradiance", - "doi": "10.1103/physrevlett.92.073602", - "nodeyear": 2004, - "ref-by-count": 353, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1045377669", - "attributes": { - "title": "Nonsymmetric Entanglement of Atomic Ensembles", - "doi": "10.1103/physrevlett.92.030407", - "nodeyear": 2004, - "ref-by-count": 31, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042239422", - "attributes": { - "title": "Spin squeezing as a measure of entanglement in a two-qubit system", - "doi": "10.1103/physreva.68.064301", - "nodeyear": 2003, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1046807340", - "attributes": { - "title": "Bose-Einstein condensates in 1D optical lattices", - "doi": "10.1140/epjd/e2003-00284-4", - "nodeyear": 2003, - "ref-by-count": 101, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019738669", - "attributes": { - "title": "EIT-assisted atomic squeezing", - "doi": "10.1140/epjd/e2003-00253-y", - "nodeyear": 2003, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1006013499", - "attributes": { - "title": "Quasi-Spin-Wave Quantum Memories with a Dynamical Symmetry", - "doi": "10.1103/physrevlett.91.147903", - "nodeyear": 2003, - "ref-by-count": 118, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1033308270", - "attributes": { - "title": "Measurement-induced spin squeezing in a cavity", - "doi": "10.1103/physreva.68.043820", - "nodeyear": 2003, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1012640711", - "attributes": { - "title": "Entanglement and spin squeezing of Bose-Einstein-condensed atoms", - "doi": "10.1103/physreva.68.043622", - "nodeyear": 2003, - "ref-by-count": 31, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060499456", - "attributes": { - "title": "Backaction-induced spin-squeezed states in a detuned quantum-nondemolition measurement", - "doi": "10.1103/physreva.68.035802", - "nodeyear": 2003, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1051173433", - "attributes": { - "title": "Optimally squeezed spin states", - "doi": "10.1103/physreva.68.013807", - "nodeyear": 2003, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1045761502", - "attributes": { - "title": "Quantum-correlated double-well tunneling of two-component Bose-Einstein condensates", - "doi": "10.1103/physreva.68.013604", - "nodeyear": 2003, - "ref-by-count": 45, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1005892928", - "attributes": { - "title": "Polarization squeezing of intense pulses with a fiber-optic Sagnac interferometer", - "doi": "10.1103/physreva.68.013815", - "nodeyear": 2003, - "ref-by-count": 54, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1009926257", - "attributes": { - "title": "A novel algebraic scheme for describing nonrigid molecules", - "doi": "10.1016/s0009-2614(03)00851-0", - "nodeyear": 2003, - "ref-by-count": 45, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1028628834", - "attributes": { - "title": "Roton-Maxon Spectrum and Stability of Trapped Dipolar Bose-Einstein Condensates", - "doi": "10.1103/physrevlett.90.250403", - "nodeyear": 2003, - "ref-by-count": 412, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1021921669", - "attributes": { - "title": "Chaos and the quantum phase transition in the Dicke model", - "doi": "10.1103/physreve.67.066203", - "nodeyear": 2003, - "ref-by-count": 517, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059137934", - "attributes": { - "title": "Quantum atom optics with Bose-Einstein condensates", - "doi": "10.1088/1367-2630/5/1/355", - "nodeyear": 2003, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1003323558", - "attributes": { - "title": "Separability criterion for separate quantum systems", - "doi": "10.1103/physreva.67.052104", - "nodeyear": 2003, - "ref-by-count": 68, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1027685238", - "attributes": { - "title": "Atomic spin squeezing in a \u039b system", - "doi": "10.1103/physreva.67.045801", - "nodeyear": 2003, - "ref-by-count": 34, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1048707800", - "attributes": { - "title": "Entanglement and spin squeezing in the two-atom Dicke model", - "doi": "10.1088/1464-4266/5/2/101", - "nodeyear": 2003, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1038116055", - "attributes": { - "title": "Rotons in Gaseous Bose-Einstein Condensates Irradiated by a Laser", - "doi": "10.1103/physrevlett.90.110402", - "nodeyear": 2003, - "ref-by-count": 139, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1034352273", - "attributes": { - "title": "Characterizing the entanglement of symmetric many-particle spin-12 systems", - "doi": "10.1103/physreva.67.022112", - "nodeyear": 2003, - "ref-by-count": 161, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1057717131", - "attributes": { - "title": "Spectroscopically determined potential energy surface of H216O up to 25 000 cm\u22121", - "doi": "10.1063/1.1532001", - "nodeyear": 2003, - "ref-by-count": 92, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1034618848", - "attributes": { - "title": "Quantum Chaos Triggered by Precursors of a Quantum Phase Transition: The Dicke Model", - "doi": "10.1103/physrevlett.90.044101", - "nodeyear": 2003, - "ref-by-count": 378, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060825740", - "attributes": { - "title": "Collective Cooling and Self-Organization of Atoms in a Cavity", - "doi": "10.1103/physrevlett.89.253003", - "nodeyear": 2002, - "ref-by-count": 296, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1036319695", - "attributes": { - "title": "Mutual coherence and spin squeezing in double-well atomic condensates", - "doi": "10.1016/s0375-9601(02)00131-7", - "nodeyear": 2002, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1048921956", - "attributes": { - "title": "Continuous quantum nondemolition feedback and unconditional atomic spin squeezing", - "doi": "10.1088/0953-4075/35/23/316", - "nodeyear": 2002, - "ref-by-count": 67, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060825411", - "attributes": { - "title": "Interferometry below the Standard Quantum Limit with Bose-Einstein Condensates", - "doi": "10.1103/physrevlett.89.150401", - "nodeyear": 2002, - "ref-by-count": 88, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1056050981", - "attributes": { - "title": "Ab Initio Potential Energy Surface and Vibrational\u2212Rotational Energy Levels of X2\u03a3+ CaOH", - "doi": "10.1021/jp026283u", - "nodeyear": 2002, - "ref-by-count": 169, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1033188547", - "attributes": { - "title": "Spin squeezing and entanglement in spinor condensates", - "doi": "10.1103/physreva.66.033611", - "nodeyear": 2002, - "ref-by-count": 41, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1032117943", - "attributes": { - "title": "Collapse and revival of the matter wave field of a Bose\u2013Einstein condensate", - "doi": "10.1038/nature00968", - "nodeyear": 2002, - "ref-by-count": 968, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1010607212", - "attributes": { - "title": "The Electronic Spectrum of NiCN in the Visible Region", - "doi": "10.1006/jmsp.2002.8608", - "nodeyear": 2002, - "ref-by-count": 33, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1003363712", - "attributes": { - "title": "Spectroscopic Description of H2O in the su(2) Vibron Model Approximation", - "doi": "10.1006/jmsp.2002.8571", - "nodeyear": 2002, - "ref-by-count": 37, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1029415952", - "attributes": { - "title": "Generation of maximum spin entanglement induced by a cavity field in quantum-dot systems", - "doi": "10.1103/physreva.65.062321", - "nodeyear": 2002, - "ref-by-count": 47, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1002222149", - "attributes": { - "title": "Spin squeezing via quantum feedback", - "doi": "10.1103/physreva.65.061801", - "nodeyear": 2002, - "ref-by-count": 106, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1041840352", - "attributes": { - "title": "Coherent Atom Interactions Mediated by Dark-State Polaritons", - "doi": "10.1103/physrevlett.88.243602", - "nodeyear": 2002, - "ref-by-count": 36, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1021091851", - "attributes": { - "title": "Mixed collective states of many spins", - "doi": "10.1103/physreva.65.062304", - "nodeyear": 2002, - "ref-by-count": 36, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1021190003", - "attributes": { - "title": "Limitations of squeezing due to collisional decoherence in Bose-Einstein condensates", - "doi": "10.1088/0953-4075/35/10/312", - "nodeyear": 2002, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1016883152", - "attributes": { - "title": "Robustness of multiparty entanglement", - "doi": "10.1103/physreva.65.052327", - "nodeyear": 2002, - "ref-by-count": 129, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060498076", - "attributes": { - "title": "Spin squeezing of atoms by the dipole interaction in virtually excited Rydberg states", - "doi": "10.1103/physreva.65.041803", - "nodeyear": 2002, - "ref-by-count": 98, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1003953015", - "attributes": { - "title": "Excitation Spectrum of a Bose-Einstein Condensate", - "doi": "10.1103/physrevlett.88.120407", - "nodeyear": 2002, - "ref-by-count": 255, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1011656566", - "attributes": { - "title": "Quantum entanglement in spinor Bose-Einstein condensates", - "doi": "10.1103/physreva.65.033619", - "nodeyear": 2002, - "ref-by-count": 75, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1040733718", - "attributes": { - "title": "Polarization Squeezing of Continuous Variable Stokes Parameters", - "doi": "10.1103/physrevlett.88.093601", - "nodeyear": 2002, - "ref-by-count": 91, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1000339972", - "attributes": { - "title": "Creating entangled atomic pairs by photodissociation", - "doi": "10.1088/0953-4075/34/24/310", - "nodeyear": 2001, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:0.60;03:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1044105212", - "attributes": { - "title": "Spin squeezing in the Ising model", - "doi": "10.1103/physreva.64.053815", - "nodeyear": 2001, - "ref-by-count": 30, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060497638", - "attributes": { - "title": "Spin squeezing and decoherence limit in Ramsey spectroscopy", - "doi": "10.1103/physreva.64.052106", - "nodeyear": 2001, - "ref-by-count": 103, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1016267052", - "attributes": { - "title": "Creating Massive Entanglement of Bose-Einstein Condensed Atoms", - "doi": "10.1103/physrevlett.87.170402", - "nodeyear": 2001, - "ref-by-count": 95, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1053673045", - "attributes": { - "title": "Positive-P simulations of spin squeezing in a two-component Bose condensate", - "doi": "10.1103/physreva.64.013616", - "nodeyear": 2001, - "ref-by-count": 66, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1048985306", - "attributes": { - "title": "Entanglement and Extreme Spin Squeezing", - "doi": "10.1103/physrevlett.86.4431", - "nodeyear": 2001, - "ref-by-count": 303, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1057699225", - "attributes": { - "title": "Experimental Energy Levels of the Water Molecule", - "doi": "10.1063/1.1364517", - "nodeyear": 2001, - "ref-by-count": 214, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1032609059", - "attributes": { - "title": "Coherent control of spin squeezing", - "doi": "10.1103/physreva.63.055601", - "nodeyear": 2001, - "ref-by-count": 88, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1062444393", - "attributes": { - "title": "Squeezed States in a Bose-Einstein Condensate", - "doi": "10.1126/science.1058149", - "nodeyear": 2001, - "ref-by-count": 697, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1025684815", - "attributes": { - "title": "Generation of arbitrary Dicke states in spinor Bose\u2013Einstein condensates", - "doi": "10.1016/s0030-4018(00)01163-9", - "nodeyear": 2001, - "ref-by-count": 66, - "is_input_DOI": false, - "category_for": "09:0.33;10:0.33;02:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060496930", - "attributes": { - "title": "Quantum states of Bose-Einstein condensates formed by molecular dissociation", - "doi": "10.1103/physreva.63.023604", - "nodeyear": 2001, - "ref-by-count": 54, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1043414338", - "attributes": { - "title": "Many-particle entanglement with Bose\u2013Einstein condensates", - "doi": "10.1038/35051038", - "nodeyear": 2001, - "ref-by-count": 739, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1011862816", - "attributes": { - "title": "Squeezing entanglement", - "doi": "10.1038/35051193", - "nodeyear": 2001, - "ref-by-count": 35, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1042326365", - "attributes": { - "title": "Atomic Quantum State Teleportation and Swapping", - "doi": "10.1103/physrevlett.85.5639", - "nodeyear": 2000, - "ref-by-count": 136, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060496772", - "attributes": { - "title": "Spin squeezing in two-level systems", - "doi": "10.1103/physreva.62.063812", - "nodeyear": 2000, - "ref-by-count": 50, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060822132", - "attributes": { - "title": "Creating Macroscopic Atomic Einstein-Podolsky-Rosen States from Bose-Einstein Condensates", - "doi": "10.1103/physrevlett.85.3987", - "nodeyear": 2000, - "ref-by-count": 174, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1050230284", - "attributes": { - "title": "Entanglement transfer from light to atoms", - "doi": "10.1080/09500340008232184", - "nodeyear": 2000, - "ref-by-count": 30, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1037329755", - "attributes": { - "title": "Iterative algorithm versus analytic solutions of the parametrically driven dissipative quantum harmonic oscillator", - "doi": "10.1103/physreve.62.5808", - "nodeyear": 2000, - "ref-by-count": 65, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060821716", - "attributes": { - "title": "Generation of Spin Squeezing via Continuous Quantum Nondemolition Measurement", - "doi": "10.1103/physrevlett.85.1594", - "nodeyear": 2000, - "ref-by-count": 382, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1032013208", - "attributes": { - "title": "Dark-State Polaritons in Electromagnetically Induced Transparency", - "doi": "10.1103/physrevlett.84.5094", - "nodeyear": 2000, - "ref-by-count": 1304, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060821199", - "attributes": { - "title": "Observation of Cavity-Mediated Long-Range Light Forces between Strongly Coupled Atoms", - "doi": "10.1103/physrevlett.84.4068", - "nodeyear": 2000, - "ref-by-count": 55, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019244542", - "attributes": { - "title": "Experimental entanglement of four particles", - "doi": "10.1038/35005011", - "nodeyear": 2000, - "ref-by-count": 1082, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019463277", - "attributes": { - "title": "Eigenvalue and Eigenfunction of n-Mode Boson Quadratic Hamiltonian", - "doi": "10.1023/a:1003600729222", - "nodeyear": 2000, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1053071617", - "attributes": { - "title": "quantum noise", - "doi": "10.1007/1-4020-0613-6_15239", - "nodeyear": 2000, - "ref-by-count": 115, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1058075670", - "attributes": { - "title": "High resolution spectroscopy of MgOH (X 2\u03a3+) in its V2 mode: Further evidence for quasilinearity", - "doi": "10.1063/1.480455", - "nodeyear": 1999, - "ref-by-count": 32, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060495708", - "attributes": { - "title": "Quantum nondemolition measurement of spin via the paramagnetic Faraday rotation", - "doi": "10.1103/physreva.60.4974", - "nodeyear": 1999, - "ref-by-count": 113, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1098909552", - "attributes": { - "title": "Quantum Dissipative Systems", - "doi": "10.1142/4239", - "nodeyear": 1999, - "ref-by-count": 1276, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1012704698", - "attributes": { - "title": "Spin-Spin Interaction and Spin Squeezing in an Optical Lattice", - "doi": "10.1103/physrevlett.83.2274", - "nodeyear": 1999, - "ref-by-count": 224, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060495457", - "attributes": { - "title": "Quantum nondemolition measurements of collective atomic spin", - "doi": "10.1103/physreva.60.2346", - "nodeyear": 1999, - "ref-by-count": 97, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1046740497", - "attributes": { - "title": "Direct measurement of the Wigner function by photon counting", - "doi": "10.1103/physreva.60.674", - "nodeyear": 1999, - "ref-by-count": 140, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1020099649", - "attributes": { - "title": "Bragg Spectroscopy of a Bose-Einstein Condensate", - "doi": "10.1103/physrevlett.82.4569", - "nodeyear": 1999, - "ref-by-count": 601, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1017192838", - "attributes": { - "title": "HDO and D2O Low Pressure, Long Path Spectra in the 600\u20133100 cm\u22121Region II. D2O Line Positions and Strengths", - "doi": "10.1006/jmsp.1999.7815", - "nodeyear": 1999, - "ref-by-count": 50, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1003804610", - "attributes": { - "title": "Analytical solutions for the LMG model", - "doi": "10.1016/s0370-2693(99)00191-4", - "nodeyear": 1999, - "ref-by-count": 64, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1005109695", - "attributes": { - "title": "Phonon squeezed states: quantum noise reduction in solids", - "doi": "10.1016/s0921-4526(98)01483-5", - "nodeyear": 1999, - "ref-by-count": 63, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1026394040", - "attributes": { - "title": "Quantum monodromy in the spectrum of H2O and other systems: new insight into the level structure of quasi-linear molecules", - "doi": "10.1080/00268979909482971", - "nodeyear": 1999, - "ref-by-count": 77, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1041161303", - "attributes": { - "title": "Twin-correlations in atoms", - "doi": "10.1007/s100530050259", - "nodeyear": 1999, - "ref-by-count": 32, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060817691", - "attributes": { - "title": "Quantum Dynamical Manifestation of Chaotic Behavior in the Process of Entanglement", - "doi": "10.1103/physrevlett.80.5524", - "nodeyear": 1998, - "ref-by-count": 177, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1064235153", - "attributes": { - "title": "Atomic quantum non-demolition measurements and squeezing", - "doi": "10.1209/epl/i1998-00277-9", - "nodeyear": 1998, - "ref-by-count": 240, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060816390", - "attributes": { - "title": "Spin Squeezing in an Ensemble of Atoms Illuminated with Squeezed Light", - "doi": "10.1103/physrevlett.79.4782", - "nodeyear": 1997, - "ref-by-count": 210, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1052013666", - "attributes": { - "title": "Phonon Squeezed States Generated by Second-Order Raman Scattering", - "doi": "10.1103/physrevlett.79.4605", - "nodeyear": 1997, - "ref-by-count": 80, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1006871668", - "attributes": { - "title": "Improvement of Frequency Standards with Quantum Entanglement", - "doi": "10.1103/physrevlett.79.3865", - "nodeyear": 1997, - "ref-by-count": 683, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1003480064", - "attributes": { - "title": "Particle propagation in a random and quasi-periodic potential", - "doi": "10.1016/s0167-2789(97)00155-3", - "nodeyear": 1997, - "ref-by-count": 26, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1098732024", - "attributes": { - "title": "Quantum Optics", - "doi": "10.1017/cbo9780511813993", - "nodeyear": 1997, - "ref-by-count": 5533, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1060492991", - "attributes": { - "title": "Atomic Schr\u00f6dinger cat states", - "doi": "10.1103/physreva.56.2249", - "nodeyear": 1997, - "ref-by-count": 163, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019387204", - "attributes": { - "title": "The calculation of the bound and quasibound vibrational states for ozone in its B 1 electronic state", - "doi": "10.1080/002689797171148", - "nodeyear": 1997, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1006289352", - "attributes": { - "title": "Pure Rotational Spectra of HNCS in the Far Infrared Region: The Three Bending Excited States", - "doi": "10.1006/jmsp.1997.7269", - "nodeyear": 1997, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1030905705", - "attributes": { - "title": "Floquet-Markovian description of the parametrically driven, dissipative harmonic quantum oscillator", - "doi": "10.1103/physreve.55.300", - "nodeyear": 1997, - "ref-by-count": 149, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1058050263", - "attributes": { - "title": "Algebraic approach to molecular spectra: Two\u2010dimensional problems", - "doi": "10.1063/1.471412", - "nodeyear": 1996, - "ref-by-count": 104, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1004092630", - "attributes": { - "title": "High Resolution Vibrational\u2013Rotational Spectrum of H2S in the Region of the \u03bd2Fundamental Band", - "doi": "10.1006/jmsp.1996.0082", - "nodeyear": 1996, - "ref-by-count": 44, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1052716647", - "attributes": { - "title": "Squeezed Phonon States: Modulating Quantum Fluctuations of Atomic Displacements", - "doi": "10.1103/physrevlett.76.2294", - "nodeyear": 1996, - "ref-by-count": 97, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060812753", - "attributes": { - "title": "Synchronous Collapses and Revivals of Atomic Dipole Fluctuations and Photon Fano Factor beyond the Standard Quantum Limit", - "doi": "10.1103/physrevlett.76.2045", - "nodeyear": 1996, - "ref-by-count": 21, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1057869519", - "attributes": { - "title": "Algebraic Theory of Molecules", - "doi": "10.1063/1.2807547", - "nodeyear": 1996, - "ref-by-count": 185, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1007741542", - "attributes": { - "title": "Semiclassics of rotation and torsion", - "doi": "10.1007/s002570050101", - "nodeyear": 1996, - "ref-by-count": 25, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042823964", - "attributes": { - "title": "Quantum phonon optics: Coherent and squeezed atomic displacements", - "doi": "10.1103/physrevb.53.2419", - "nodeyear": 1996, - "ref-by-count": 68, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060491579", - "attributes": { - "title": "Ramsey spectroscopy with nonclassical light sources", - "doi": "10.1103/physreva.53.467", - "nodeyear": 1996, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1058047895", - "attributes": { - "title": "CaOH has a second linear structure HCaO", - "doi": "10.1063/1.469909", - "nodeyear": 1995, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1035173735", - "attributes": { - "title": "New rovibrational data for MgOH and MgOD and the internuclear potential function of the ground electronic state", - "doi": "10.1016/0009-2614(95)00479-n", - "nodeyear": 1995, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060490050", - "attributes": { - "title": "Pulse matching and correlation of phase fluctuations in \u039b systems", - "doi": "10.1103/physreva.51.2430", - "nodeyear": 1995, - "ref-by-count": 67, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1058046639", - "attributes": { - "title": "High\u2010resolution analysis of the fundamental bending vibrations in the\n A\n \u0303\u2009\n 2\n \u03a0 and\n X\n \u0303\u2009\n 2\n \u03a3\n +\n states of CaOH and CaOD: Deperturbation of Renner\u2013Teller, spin\u2013orbit and\n K\n \u2010type resonance interactions", - "doi": "10.1063/1.468643", - "nodeyear": 1995, - "ref-by-count": 34, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1000086198", - "attributes": { - "title": "Pure Rotational Spectra of HNCS in the Far Infrared: Ground State Analysis", - "doi": "10.1006/jmsp.1995.1018", - "nodeyear": 1995, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1011073909", - "attributes": { - "title": "H280Se: High Resolution Study of the 3\u03bd2, \u03bd1 + \u03bd2, and \u03bd2 + \u03bd3 Bands and Determination of Equilibrium Rotational Constants and Structure", - "doi": "10.1006/jmsp.1994.1244", - "nodeyear": 1994, - "ref-by-count": 27, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1046586795", - "attributes": { - "title": "Hypersensitivity to perturbation in the quantum kicked top", - "doi": "10.1103/physreve.50.972", - "nodeyear": 1994, - "ref-by-count": 50, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060489764", - "attributes": { - "title": "Squeezed atomic states and projection noise in spectroscopy", - "doi": "10.1103/physreva.50.67", - "nodeyear": 1994, - "ref-by-count": 815, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060488659", - "attributes": { - "title": "Atomic states with spectroscopic squeezing", - "doi": "10.1103/physreva.49.4968", - "nodeyear": 1994, - "ref-by-count": 75, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060809096", - "attributes": { - "title": "Statistical distance and the geometry of quantum states", - "doi": "10.1103/physrevlett.72.3439", - "nodeyear": 1994, - "ref-by-count": 1717, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060716437", - "attributes": { - "title": "Brownian parametric oscillators", - "doi": "10.1103/physreve.49.3626", - "nodeyear": 1994, - "ref-by-count": 41, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060808815", - "attributes": { - "title": "Dynamics of a model of supersolid", - "doi": "10.1103/physrevlett.72.2426", - "nodeyear": 1994, - "ref-by-count": 101, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1045346582", - "attributes": { - "title": "Fourfold Clusters of Rovibrational Energy Levels for H2S Studied with a Potential Energy Surface Derived from Experiment", - "doi": "10.1006/jmsp.1994.1041", - "nodeyear": 1994, - "ref-by-count": 66, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1005841402", - "attributes": { - "title": "Quantum Optics", - "doi": "10.1007/978-3-642-79504-6", - "nodeyear": 1994, - "ref-by-count": 2353, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1049201712", - "attributes": { - "title": "High-Resolution Analysis of the \u03bd2, 2\u03bd2, \u03bd1, and \u03bd3 Bands of H280Se", - "doi": "10.1006/jmsp.1993.1224", - "nodeyear": 1993, - "ref-by-count": 26, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1054491307", - "attributes": { - "title": "The Potential Energy Surface for the Electronic Ground State of H2Se Derived from Experiment", - "doi": "10.1006/jmsp.1993.1155", - "nodeyear": 1993, - "ref-by-count": 44, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060487392", - "attributes": { - "title": "Squeezed spin states", - "doi": "10.1103/physreva.47.5138", - "nodeyear": 1993, - "ref-by-count": 1137, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060486851", - "attributes": { - "title": "Spin squeezing and reduced quantum noise in spectroscopy", - "doi": "10.1103/physreva.46.r6797", - "nodeyear": 1992, - "ref-by-count": 690, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1051958598", - "attributes": { - "title": "Investigation of excited vibrational levels in the X 2\u03a3+ state of CaOH and CaOD by resolved fluorescence spectroscopy", - "doi": "10.1080/00268979200102231", - "nodeyear": 1992, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1000717326", - "attributes": { - "title": "Chaos in a spin-boson system: Classical analysis", - "doi": "10.1016/0003-4916(92)90178-o", - "nodeyear": 1992, - "ref-by-count": 53, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060485219", - "attributes": { - "title": "Dynamic Stark effect for the Jaynes-Cummings system", - "doi": "10.1103/physreva.45.5135", - "nodeyear": 1992, - "ref-by-count": 113, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1006189532", - "attributes": { - "title": "Vibrational spectra of linear triatomic molecules in the vibron model", - "doi": "10.1016/0022-2852(91)90370-p", - "nodeyear": 1991, - "ref-by-count": 76, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1048482240", - "attributes": { - "title": "Overtone frequencies and intensities of bent XY2 molecules in the vibron model", - "doi": "10.1016/0022-2852(90)90293-y", - "nodeyear": 1990, - "ref-by-count": 87, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060839208", - "attributes": { - "title": "Coherent states: Theory and some applications", - "doi": "10.1103/revmodphys.62.867", - "nodeyear": 1990, - "ref-by-count": 1131, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059070435", - "attributes": { - "title": "Kicked rotator for a spin-1/2 particle", - "doi": "10.1088/0305-4470/22/19/016", - "nodeyear": 1989, - "ref-by-count": 48, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060478721", - "attributes": { - "title": "Phase-sensitive population decay: The two-atom Dicke model in a broadband squeezed vacuum", - "doi": "10.1103/physreva.39.1962", - "nodeyear": 1989, - "ref-by-count": 105, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060799033", - "attributes": { - "title": "Anderson Transition in a One-Dimensional System with Three Incommensurate Frequencies", - "doi": "10.1103/physrevlett.62.345", - "nodeyear": 1989, - "ref-by-count": 142, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1062233668", - "attributes": { - "title": "Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables", - "doi": "10.1119/1.15378", - "nodeyear": 1988, - "ref-by-count": 562, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1058031840", - "attributes": { - "title": "Fermi resonances and local modes in water, hydrogen sulfide, and hydrogen selenide", - "doi": "10.1063/1.453824", - "nodeyear": 1988, - "ref-by-count": 218, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1058032193", - "attributes": { - "title": "Semiclassical treatment of the vibrational spectroscopy of OCS", - "doi": "10.1063/1.454177", - "nodeyear": 1988, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1048120455", - "attributes": { - "title": "Theory of first-order phase transitions", - "doi": "10.1088/0034-4885/50/7/001", - "nodeyear": 1987, - "ref-by-count": 777, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060692192", - "attributes": { - "title": "Squeezed states in phase-sensing interferometers", - "doi": "10.1103/physrevd.30.2548", - "nodeyear": 1984, - "ref-by-count": 208, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1018979965", - "attributes": { - "title": "The geometrical-classical limit of algebraic Hamiltonians for molecular vibrotational spectra", - "doi": "10.1016/0009-2614(83)87025-0", - "nodeyear": 1983, - "ref-by-count": 78, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1029020774", - "attributes": { - "title": "The potential function for HCNCNH isomerization", - "doi": "10.1016/0022-2852(83)90018-8", - "nodeyear": 1983, - "ref-by-count": 43, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1030813584", - "attributes": { - "title": "Some statistical properties of simple classically stochastic quantum systems", - "doi": "10.1016/0167-2789(83)90318-4", - "nodeyear": 1983, - "ref-by-count": 142, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1043507384", - "attributes": { - "title": "The scaling theory of electrons in disordered solids: Additional numerical results", - "doi": "10.1007/bf01578242", - "nodeyear": 1983, - "ref-by-count": 639, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060787963", - "attributes": { - "title": "Chaos, Quantum Recurrences, and Anderson Localization", - "doi": "10.1103/physrevlett.49.509", - "nodeyear": 1982, - "ref-by-count": 829, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060787952", - "attributes": { - "title": "Size Scaling for Infinitely Coordinated Systems", - "doi": "10.1103/physrevlett.49.478", - "nodeyear": 1982, - "ref-by-count": 148, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060786848", - "attributes": { - "title": "Reduced Quantum Fluctuations in Resonance Fluorescence", - "doi": "10.1103/physrevlett.47.709", - "nodeyear": 1981, - "ref-by-count": 409, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060784904", - "attributes": { - "title": "Classical Limit of the Interacting-Boson Model", - "doi": "10.1103/physrevlett.44.1747", - "nodeyear": 1980, - "ref-by-count": 487, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1063137926", - "attributes": { - "title": "Spin-Orbit Interaction and Magnetoresistance in the Two Dimensional Random System", - "doi": "10.1143/ptp.63.707", - "nodeyear": 1980, - "ref-by-count": 2208, - "is_input_DOI": false, - "category_for": "17:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1058101157", - "attributes": { - "title": "The classical limit of quantum nonspin systems", - "doi": "10.1063/1.524137", - "nodeyear": 1979, - "ref-by-count": 160, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060467641", - "attributes": { - "title": "No-go theorem concerning the superradiant phase transition in atomic systems", - "doi": "10.1103/physreva.19.301", - "nodeyear": 1979, - "ref-by-count": 93, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1015361753", - "attributes": { - "title": "Stochastic behavior of a quantum pendulum under a periodic perturbation", - "doi": "10.1007/bfb0021757", - "nodeyear": 1979, - "ref-by-count": 308, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1028928983", - "attributes": { - "title": "Phase transitions in nuclear matter described by pseudospin Hamiltonians", - "doi": "10.1016/0375-9474(78)90260-9", - "nodeyear": 1978, - "ref-by-count": 133, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060466899", - "attributes": { - "title": "Are super-radiant phase transitions possible?", - "doi": "10.1103/physreva.17.1454", - "nodeyear": 1978, - "ref-by-count": 53, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1035545882", - "attributes": { - "title": "Mathematical Methods of Classical Mechanics", - "doi": "10.1007/978-1-4757-1693-1", - "nodeyear": 1978, - "ref-by-count": 3208, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060465740", - "attributes": { - "title": "Two-photon coherent states of the radiation field", - "doi": "10.1103/physreva.13.2226", - "nodeyear": 1976, - "ref-by-count": 1801, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060465708", - "attributes": { - "title": "Thermodynamics of two-level atoms interacting with the continuum of electromagnetic field modes", - "doi": "10.1103/physreva.13.1967", - "nodeyear": 1976, - "ref-by-count": 27, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1109642906", - "attributes": { - "title": "Quantum Detection and Estimation Theory", - "doi": "10.1016/s0076-5392(08)x6017-5", - "nodeyear": 1976, - "ref-by-count": 229, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1060779767", - "attributes": { - "title": "Phase Transitions, Two-Level Atoms, and the A2 Term", - "doi": "10.1103/physrevlett.35.432", - "nodeyear": 1975, - "ref-by-count": 217, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060506152", - "attributes": { - "title": "Equilibrium Statistical Mechanics of Matter Interacting with the Quantized Radiation Field", - "doi": "10.1103/physreva.8.2517", - "nodeyear": 1973, - "ref-by-count": 282, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1002536646", - "attributes": { - "title": "Higher order corrections to the Dicke superradiant phase transition", - "doi": "10.1016/0375-9601(73)90679-8", - "nodeyear": 1973, - "ref-by-count": 94, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060505996", - "attributes": { - "title": "Phase Transitions in Some Generalized Dicke Models of Superradiance", - "doi": "10.1103/physreva.8.1440", - "nodeyear": 1973, - "ref-by-count": 121, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1037335968", - "attributes": { - "title": "On the superradiant phase transition for molecules in a quantized radiation field: the dicke maser model", - "doi": "10.1016/0003-4916(73)90039-0", - "nodeyear": 1973, - "ref-by-count": 721, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060500350", - "attributes": { - "title": "Phase Transition in the Dicke Model of Superradiance", - "doi": "10.1103/physreva.7.831", - "nodeyear": 1973, - "ref-by-count": 510, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060495184", - "attributes": { - "title": "Atomic Coherent States in Quantum Optics", - "doi": "10.1103/physreva.6.2211", - "nodeyear": 1972, - "ref-by-count": 1210, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1024870439", - "attributes": { - "title": "Coherent states for arbitrary Lie group", - "doi": "10.1007/bf01645091", - "nodeyear": 1972, - "ref-by-count": 1052, - "is_input_DOI": false, - "category_for": "01:0.60;02:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1036408635", - "attributes": { - "title": "The bending-rotation Hamiltonian for the triatomic molecule and application to HCN and H2O", - "doi": "10.1016/0022-2852(72)90209-3", - "nodeyear": 1972, - "ref-by-count": 145, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1033014139", - "attributes": { - "title": "New \u201cCoherent\u201d States associated with non-compact groups", - "doi": "10.1007/bf01646483", - "nodeyear": 1971, - "ref-by-count": 559, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060443588", - "attributes": { - "title": "Approximate Solutions for an N-Molecule-Radiation-Field Hamiltonian", - "doi": "10.1103/physrev.188.692", - "nodeyear": 1969, - "ref-by-count": 196, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1001765599", - "attributes": { - "title": "Group-theoretical aspects of the variable frequency oscillator problem", - "doi": "10.1007/bf01035742", - "nodeyear": 1969, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1050225995", - "attributes": { - "title": "An extension of Kakutani\u2019s theorem on infinite product measures to the tensor product of semifinite w \u2217 w^{\\ast } -algebras", - "doi": "10.1090/s0002-9947-1969-0236719-2", - "nodeyear": 1969, - "ref-by-count": 269, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060438505", - "attributes": { - "title": "Exact Solution for an N-Molecule\u2014Radiation-Field Hamiltonian", - "doi": "10.1103/physrev.170.379", - "nodeyear": 1968, - "ref-by-count": 995, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1043798191", - "attributes": { - "title": "Validity of many-body approximation methods for a solvable model (III). Diagram summations", - "doi": "10.1016/0029-5582(65)90864-3", - "nodeyear": 1965, - "ref-by-count": 237, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1017078538", - "attributes": { - "title": "Validity of many-body approximation methods for a solvable model (II). Linearization procedures", - "doi": "10.1016/0029-5582(65)90863-1", - "nodeyear": 1965, - "ref-by-count": 236, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1011658338", - "attributes": { - "title": "Validity of many-body approximation methods for a solvable model (I). Exact solutions and perturbation theory", - "doi": "10.1016/0029-5582(65)90862-x", - "nodeyear": 1965, - "ref-by-count": 1141, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1015885405", - "attributes": { - "title": "Higher vibrational levels of a bent triatomic molecule", - "doi": "10.1039/tf9646001363", - "nodeyear": 1964, - "ref-by-count": 145, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1060752377", - "attributes": { - "title": "Energy vs Momentum Relation for the Excitations in Liquid Helium", - "doi": "10.1103/physrevlett.1.9", - "nodeyear": 1958, - "ref-by-count": 32, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1004021375", - "attributes": { - "title": "The pure rotational spectrum of H2Se in the far infrared spectral region", - "doi": "10.1016/0022-2852(57)90025-5", - "nodeyear": 1957, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1030349669", - "attributes": { - "title": "Molecular Vibrations: The Theory of Infrared and Raman Vibrational Spectra", - "doi": "10.1149/1.2430134", - "nodeyear": 1955, - "ref-by-count": 3996, - "is_input_DOI": false, - "category_for": "03:0.60;09:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1060461988", - "attributes": { - "title": "Coherence in Spontaneous Radiation Processes", - "doi": "10.1103/physrev.93.99", - "nodeyear": 1954, - "ref-by-count": 5235, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060451204", - "attributes": { - "title": "Field Dependence of the Intrinsic Domain Magnetization of a Ferromagnet", - "doi": "10.1103/physrev.58.1098", - "nodeyear": 1940, - "ref-by-count": 2887, - "is_input_DOI": false, - "category_for": "18:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019976609", - "attributes": { - "title": "Natural and artificial atoms for quantum computation", - "doi": "10.1088/0034-4885/74/10/104401", - "nodeyear": 2011, - "ref-by-count": 483, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1016787662", - "attributes": { - "title": "Atomic physics and quantum optics using superconducting circuits", - "doi": "10.1038/nature10122", - "nodeyear": 2011, - "ref-by-count": 904, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1002951333", - "attributes": { - "title": "Spin squeezing and concurrence", - "doi": "10.1088/0953-4075/44/1/015501", - "nodeyear": 2010, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:0.60;03:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1031594332", - "attributes": { - "title": "Unified single-photon and single-electron counting statistics: From cavity QED to electron transport", - "doi": "10.1103/physreva.82.063840", - "nodeyear": 2010, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1065173362", - "attributes": { - "title": "Quantum phase transition of nonlinear light in the finite size Dicke Hamiltonian", - "doi": "10.1364/josab.27.002443", - "nodeyear": 2010, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "09:0.33;01:0.33;02:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1010418632", - "attributes": { - "title": "Orientation-Dependent Entanglement Lifetime in a Squeezed Atomic Clock", - "doi": "10.1103/physrevlett.104.250801", - "nodeyear": 2010, - "ref-by-count": 119, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042723630", - "attributes": { - "title": "Relation between ac Josephson effect and double-well Bose-Einstein-condensate oscillations", - "doi": "10.1103/physreva.81.063609", - "nodeyear": 2010, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1020613156", - "attributes": { - "title": "Phase transitions in the sdg interacting boson model", - "doi": "10.1016/j.nuclphysa.2010.01.247", - "nodeyear": 2010, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1016879794", - "attributes": { - "title": "Theory of localization and resonance phenomena in the quantum kicked rotor", - "doi": "10.1088/1367-2630/12/4/043043", - "nodeyear": 2010, - "ref-by-count": 21, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1041729973", - "attributes": { - "title": "Quantum-projection-noise-limited interferometry with coherent atoms in a Ramsey-type setup", - "doi": "10.1103/physreva.81.043633", - "nodeyear": 2010, - "ref-by-count": 23, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1015506698", - "attributes": { - "title": "Noise-resilient quantum interface based on quantum nondemolition interactions", - "doi": "10.1103/physreva.81.042325", - "nodeyear": 2010, - "ref-by-count": 23, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1038221147", - "attributes": { - "title": "Multilevel Holstein-Primakoff approximation and its application to atomic spin squeezing and ensemble quantum memories", - "doi": "10.1103/physreva.81.032314", - "nodeyear": 2010, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1027177091", - "attributes": { - "title": "Squeezing the collective spin of a dilute atomic ensemble by cavity feedback", - "doi": "10.1103/physreva.81.021804", - "nodeyear": 2010, - "ref-by-count": 90, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019662680", - "attributes": { - "title": "SU(3) Quasidynamical Symmetry Underlying the Alhassid-Whelan Arc of Regularity", - "doi": "10.1103/physrevlett.104.022502", - "nodeyear": 2010, - "ref-by-count": 26, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1072401833", - "attributes": { - "title": "Anderson localization and quantum chaos maps", - "doi": "10.4249/scholarpedia.9816", - "nodeyear": 2010, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1060739410", - "attributes": { - "title": "Level statistics of a pseudo-Hermitian Dicke model", - "doi": "10.1103/physreve.80.026213", - "nodeyear": 2009, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1037589088", - "attributes": { - "title": "Quantum phase transition in a pseudo-Hermitian Dicke model", - "doi": "10.1103/physreve.80.021107", - "nodeyear": 2009, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1038409804", - "attributes": { - "title": "Recent developments in no-core shell-model calculations", - "doi": "10.1088/0954-3899/36/8/083101", - "nodeyear": 2009, - "ref-by-count": 269, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060676616", - "attributes": { - "title": "Bohr model as an algebraic collective model", - "doi": "10.1103/physrevc.79.054304", - "nodeyear": 2009, - "ref-by-count": 63, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1047766368", - "attributes": { - "title": "Microscopic analysis of nuclear quantum phase transitions in the N\u224890 region", - "doi": "10.1103/physrevc.79.054301", - "nodeyear": 2009, - "ref-by-count": 129, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1022061943", - "attributes": { - "title": "Cooling and squeezing the fluctuations of a nanomechanical beam by indirect quantum feedback control", - "doi": "10.1103/physreva.79.052102", - "nodeyear": 2009, - "ref-by-count": 60, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060738859", - "attributes": { - "title": "Spin squeezing as an indicator of quantum chaos in the Dicke model", - "doi": "10.1103/physreve.79.046220", - "nodeyear": 2009, - "ref-by-count": 39, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1031855473", - "attributes": { - "title": "Quantum chaos in the nuclear collective model: Classical-quantum correspondence", - "doi": "10.1103/physreve.79.046202", - "nodeyear": 2009, - "ref-by-count": 21, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1036673130", - "attributes": { - "title": "Polarization-based light-atom quantum interface with an all-optical trap", - "doi": "10.1103/physreva.79.043815", - "nodeyear": 2009, - "ref-by-count": 55, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1041079423", - "attributes": { - "title": "Nuclear charge radii of molybdenum fission fragments", - "doi": "10.1016/j.physletb.2009.02.050", - "nodeyear": 2009, - "ref-by-count": 74, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060676547", - "attributes": { - "title": "Spectral properties of a tractable collective Hamiltonian", - "doi": "10.1103/physrevc.79.034305", - "nodeyear": 2009, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1052892694", - "attributes": { - "title": "Beyond the relativistic mean-field approximation. III. Collective Hamiltonian in five dimensions", - "doi": "10.1103/physrevc.79.034303", - "nodeyear": 2009, - "ref-by-count": 140, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1023287333", - "attributes": { - "title": "Phonon and multi-phonon excitations in rotational nuclei by exact diagonalization of the Bohr Hamiltonian", - "doi": "10.1016/j.physletb.2009.01.054", - "nodeyear": 2009, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060754866", - "attributes": { - "title": "Enhanced Sensitivity of Nuclear Binding Energies to Collective Structure", - "doi": "10.1103/physrevlett.102.082501", - "nodeyear": 2009, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060505399", - "attributes": { - "title": "Coupling strength estimation for spin chains despite restricted access", - "doi": "10.1103/physreva.79.020305", - "nodeyear": 2009, - "ref-by-count": 81, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1048283529", - "attributes": { - "title": "Spin squeezing of atomic ensembles by multicolor quantum nondemolition measurements", - "doi": "10.1103/physreva.79.023831", - "nodeyear": 2009, - "ref-by-count": 40, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1031554515", - "attributes": { - "title": "Quantum Nondemolition Measurements and State Preparation in Quantum Gases by Light Detection", - "doi": "10.1103/physrevlett.102.020403", - "nodeyear": 2009, - "ref-by-count": 56, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060676472", - "attributes": { - "title": "UBF(5) to SUBF(3) shape phase transition in odd nuclei for j=1/2, 3/2, and 5/2 orbits: The role of the odd particle at the critical point", - "doi": "10.1103/physrevc.79.014306", - "nodeyear": 2009, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1006850094", - "attributes": { - "title": "Modern theory of nuclear forces", - "doi": "10.1103/revmodphys.81.1773", - "nodeyear": 2009, - "ref-by-count": 1127, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1051499896", - "attributes": { - "title": "Squeezing and over-squeezing of triphotons", - "doi": "10.1038/nature07624", - "nodeyear": 2009, - "ref-by-count": 38, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1021978769", - "attributes": { - "title": "Relationship between spin squeezing and single-particle coherence in two-component Bose-Einstein condensates with Josephson coupling", - "doi": "10.1103/physreva.78.063620", - "nodeyear": 2008, - "ref-by-count": 35, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060676386", - "attributes": { - "title": "Deformation crossing near the first-order shape-phase transition in Gd152\u2013156", - "doi": "10.1103/physrevc.78.051303", - "nodeyear": 2008, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1028533037", - "attributes": { - "title": "Quantum phase transitions in the consistent-Q Hamiltonian of the interacting boson model", - "doi": "10.1088/0954-3899/35/12/125105", - "nodeyear": 2008, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060676334", - "attributes": { - "title": "Empirical signature for shape transitions mediated by sub-shell changes", - "doi": "10.1103/physrevc.78.041301", - "nodeyear": 2008, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1035626723", - "attributes": { - "title": "Practical schemes for the measurement of angular-momentum covariance matrices in quantum optics", - "doi": "10.1103/physreva.78.043814", - "nodeyear": 2008, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1006289465", - "attributes": { - "title": "Cavity Optomechanics with a Bose-Einstein Condensate", - "doi": "10.1126/science.1163218", - "nodeyear": 2008, - "ref-by-count": 443, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1029186926", - "attributes": { - "title": "Spin Squeezing of Atomic Ensembles via Nuclear-Electronic Spin Entanglement", - "doi": "10.1103/physrevlett.101.073601", - "nodeyear": 2008, - "ref-by-count": 106, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1031979595", - "attributes": { - "title": "Triaxiality in the interacting boson model", - "doi": "10.1016/j.nuclphysa.2008.05.007", - "nodeyear": 2008, - "ref-by-count": 32, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1027183352", - "attributes": { - "title": "Entanglement, quantum phase transition and fixed-point bifurcation in the N-atom Jaynes\u2013Cummings model with an additional symmetry breaking term", - "doi": "10.1016/j.physleta.2008.06.080", - "nodeyear": 2008, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1049572504", - "attributes": { - "title": "Quantum Metrology: Dynamics versus Entanglement", - "doi": "10.1103/physrevlett.101.040403", - "nodeyear": 2008, - "ref-by-count": 153, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1036114834", - "attributes": { - "title": "Equivalence of Critical Scaling Laws for Many-Body Entanglement in the Lipkin-Meshkov-Glick Model", - "doi": "10.1103/physrevlett.101.025701", - "nodeyear": 2008, - "ref-by-count": 134, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1038868267", - "attributes": { - "title": "Unified Description of 0+ States in a Large Class of Nuclear Collective Models", - "doi": "10.1103/physrevlett.101.022501", - "nodeyear": 2008, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1029956508", - "attributes": { - "title": "Observation of quantum-measurement backaction with an ultracold atomic gas", - "doi": "10.1038/nphys965", - "nodeyear": 2008, - "ref-by-count": 327, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1044966137", - "attributes": { - "title": "Relation between E(5) models and the interacting boson model", - "doi": "10.1103/physrevc.77.054307", - "nodeyear": 2008, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1012266401", - "attributes": { - "title": "Simple Empirical Order Parameter for a First-Order Quantum Phase Transition in Atomic Nuclei", - "doi": "10.1103/physrevlett.100.142501", - "nodeyear": 2008, - "ref-by-count": 40, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1032454787", - "attributes": { - "title": "Analytical solutions of the Bohr Hamiltonian with the Morse potential", - "doi": "10.1103/physrevc.77.044302", - "nodeyear": 2008, - "ref-by-count": 55, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1034485631", - "attributes": { - "title": "Storage and Retrieval of a Squeezed Vacuum", - "doi": "10.1103/physrevlett.100.093601", - "nodeyear": 2008, - "ref-by-count": 196, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060504144", - "attributes": { - "title": "Characterization of quantum angular-momentum fluctuations via principal components", - "doi": "10.1103/physreva.77.022105", - "nodeyear": 2008, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1045212838", - "attributes": { - "title": "Bending vibrational modes of ABBA molecules: algebraic approach and its classical limit", - "doi": "10.1080/00268970701757883", - "nodeyear": 2008, - "ref-by-count": 27, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060839663", - "attributes": { - "title": "Entanglement in many-body systems", - "doi": "10.1103/revmodphys.80.517", - "nodeyear": 2008, - "ref-by-count": 2366, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1072401415", - "attributes": { - "title": "Chirikov standard map", - "doi": "10.4249/scholarpedia.3550", - "nodeyear": 2008, - "ref-by-count": 56, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1020731266", - "attributes": { - "title": "Optimal Spin Squeezing Inequalities Detect Bound Entanglement in Spin Models", - "doi": "10.1103/physrevlett.99.250405", - "nodeyear": 2007, - "ref-by-count": 168, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1045352298", - "attributes": { - "title": "Exactly separable version of the Bohr Hamiltonian with the Davidson potential", - "doi": "10.1103/physrevc.76.064312", - "nodeyear": 2007, - "ref-by-count": 74, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1050275996", - "attributes": { - "title": "Quantum-limited measurements of atomic scattering properties", - "doi": "10.1103/physreva.76.053617", - "nodeyear": 2007, - "ref-by-count": 45, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1029202339", - "attributes": { - "title": "Cavity QED with a Bose\u2013Einstein condensate", - "doi": "10.1038/nature06120", - "nodeyear": 2007, - "ref-by-count": 439, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1044299159", - "attributes": { - "title": "Spin squeezing and maximal-squeezing time", - "doi": "10.1103/physreva.76.043621", - "nodeyear": 2007, - "ref-by-count": 43, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1027799783", - "attributes": { - "title": "The a.c. and d.c. Josephson effects in a Bose\u2013Einstein condensate", - "doi": "10.1038/nature06186", - "nodeyear": 2007, - "ref-by-count": 418, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1049766158", - "attributes": { - "title": "N=90 region: The decays of Eu152m,g to Sm152", - "doi": "10.1103/physrevc.76.034319", - "nodeyear": 2007, - "ref-by-count": 33, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1032603162", - "attributes": { - "title": "Conditional squeezing of an atomic alignment", - "doi": "10.1103/physreva.76.033830", - "nodeyear": 2007, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1032486064", - "attributes": { - "title": "Microscopic Description of Nuclear Quantum Phase Transitions", - "doi": "10.1103/physrevlett.99.092502", - "nodeyear": 2007, - "ref-by-count": 88, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060675775", - "attributes": { - "title": "Shape-phase transitions and two-particle transfer intensities", - "doi": "10.1103/physrevc.76.014316", - "nodeyear": 2007, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1021089453", - "attributes": { - "title": "Partial Dynamical Symmetry at Critical Points of Quantum Phase Transitions", - "doi": "10.1103/physrevlett.98.242502", - "nodeyear": 2007, - "ref-by-count": 53, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060675732", - "attributes": { - "title": "Shape phase transition in odd nuclei in a multi-j model: The UB(6)\u2297UF(12) case", - "doi": "10.1103/physrevc.75.064316", - "nodeyear": 2007, - "ref-by-count": 42, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1029051671", - "attributes": { - "title": "Exactly separable version of X(5) and related models", - "doi": "10.1016/j.physletb.2006.12.080", - "nodeyear": 2007, - "ref-by-count": 31, - "is_input_DOI": false, - "category_for": "02:0.60;01:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1013946646", - "attributes": { - "title": "Criticality in the configuration-mixed interacting boson model: (1) U(5)\u2013Q\u02c6(\u03c7)\u22c5Q\u02c6(\u03c7) mixing", - "doi": "10.1016/j.nuclphysa.2007.04.003", - "nodeyear": 2007, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1027287387", - "attributes": { - "title": "Collective Excitations and Instability of an Optical Lattice due to Unbalanced Pumping", - "doi": "10.1103/physrevlett.98.203008", - "nodeyear": 2007, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1016531939", - "attributes": { - "title": "High-Resolution Magnetometry with a Spinor Bose-Einstein Condensate", - "doi": "10.1103/physrevlett.98.200801", - "nodeyear": 2007, - "ref-by-count": 169, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1038008984", - "attributes": { - "title": "Quantum phase transitions and structural evolution in nuclei", - "doi": "10.1088/0954-3899/34/7/r01", - "nodeyear": 2007, - "ref-by-count": 140, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1031284085", - "attributes": { - "title": "Entanglement assisted fast reordering of atoms in an optical lattice within a cavity at T=0", - "doi": "10.1016/j.optcom.2007.01.069", - "nodeyear": 2007, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060675639", - "attributes": { - "title": "\u03b3-band staggering and E(5)-type structure: Zn64", - "doi": "10.1103/physrevc.75.044302", - "nodeyear": 2007, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1011478891", - "attributes": { - "title": "Empirical Proton-Neutron Interactions and Nuclear Density Functional Theory: Global, Regional, and Local Comparisons", - "doi": "10.1103/physrevlett.98.132502", - "nodeyear": 2007, - "ref-by-count": 53, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1046760586", - "attributes": { - "title": "Probing quantum phases of ultracold atoms in optical lattices by transmission spectra in cavity quantum electrodynamics", - "doi": "10.1038/nphys571", - "nodeyear": 2007, - "ref-by-count": 145, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1041760964", - "attributes": { - "title": "Quadrupole collective variables in the natural Cartan?Weyl basis", - "doi": "10.1088/1751-8113/40/11/009", - "nodeyear": 2007, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1007165107", - "attributes": { - "title": "Observation of High-Order Quantum Resonances in the Kicked Rotor", - "doi": "10.1103/physrevlett.98.083004", - "nodeyear": 2007, - "ref-by-count": 52, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060833498", - "attributes": { - "title": "Superradiant Rayleigh Scattering and Collective Atomic Recoil Lasing in a Ring Cavity", - "doi": "10.1103/physrevlett.98.053603", - "nodeyear": 2007, - "ref-by-count": 158, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1039655036", - "attributes": { - "title": "Long Phase Coherence Time and Number Squeezing of Two Bose-Einstein Condensates on an Atom Chip", - "doi": "10.1103/physrevlett.98.030407", - "nodeyear": 2007, - "ref-by-count": 260, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1041165280", - "attributes": { - "title": "Phase structure of interacting boson models in arbitrary dimension", - "doi": "10.1088/1751-8113/40/4/001", - "nodeyear": 2007, - "ref-by-count": 50, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1023676200", - "attributes": { - "title": "Two-level interacting boson models beyond the mean field", - "doi": "10.1103/physrevc.75.014301", - "nodeyear": 2007, - "ref-by-count": 40, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1029374432", - "attributes": { - "title": "Analytic descriptions for transitional nuclei near the critical point", - "doi": "10.1016/j.nuclphysa.2006.10.032", - "nodeyear": 2007, - "ref-by-count": 62, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1034964762", - "attributes": { - "title": "Quantum Entanglement and Teleportation of Quantum-Dot States in Microcavities", - "doi": "10.1380/ejssnt.2007.51", - "nodeyear": 2007, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1036559725", - "attributes": { - "title": "Shape phase transitions and critical-point phenomena in atomic nuclei", - "doi": "10.1038/nphys451", - "nodeyear": 2006, - "ref-by-count": 132, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1001541263", - "attributes": { - "title": "Light does matter", - "doi": "10.1038/nphys479", - "nodeyear": 2006, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1007041825", - "attributes": { - "title": "Quantum phase transitions of light", - "doi": "10.1038/nphys466", - "nodeyear": 2006, - "ref-by-count": 588, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1009364201", - "attributes": { - "title": "Symmetry breaking in symmetric and asymmetric double-well potentials", - "doi": "10.1103/physreve.74.056608", - "nodeyear": 2006, - "ref-by-count": 76, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042138928", - "attributes": { - "title": "Generation and storage of quantum states using cold atoms", - "doi": "10.1080/09500340600894048", - "nodeyear": 2006, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060675503", - "attributes": { - "title": "Crossing contours in the interacting boson approximation (IBA) symmetry triangle", - "doi": "10.1103/physrevc.74.057302", - "nodeyear": 2006, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060675476", - "attributes": { - "title": "First-order quantum phase transition in a finite system", - "doi": "10.1103/physrevc.74.051301", - "nodeyear": 2006, - "ref-by-count": 27, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1040258398", - "attributes": { - "title": "Efficient Quantum-State Estimation by Continuous Weak Measurement and Dynamical Control", - "doi": "10.1103/physrevlett.97.180403", - "nodeyear": 2006, - "ref-by-count": 61, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1022807668", - "attributes": { - "title": "Adiabatic Mach-Zehnder Interferometry on a Quantized Bose-Josephson Junction", - "doi": "10.1103/physrevlett.97.150402", - "nodeyear": 2006, - "ref-by-count": 95, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060675450", - "attributes": { - "title": "Intrinsic quadrupole tensor in the geometric interpretation of the interacting boson approximation (IBA-1)", - "doi": "10.1103/physrevc.74.044307", - "nodeyear": 2006, - "ref-by-count": 3, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060502673", - "attributes": { - "title": "Polarization squeezing and nonclassical properties of light", - "doi": "10.1103/physreva.74.043817", - "nodeyear": 2006, - "ref-by-count": 56, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1015215551", - "attributes": { - "title": "\u03b3-soft analog of the confined \u03b2-soft rotor model", - "doi": "10.1103/physrevc.74.044306", - "nodeyear": 2006, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1052615551", - "attributes": { - "title": "Connecting the X(5)-\u03b22, X(5)-\u03b24, and X(3) models to the shape/phase-transition region of the interacting boson model", - "doi": "10.1103/physrevc.74.034306", - "nodeyear": 2006, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060675387", - "attributes": { - "title": "Electromagnetic transition strengths in Dy156", - "doi": "10.1103/physrevc.74.024313", - "nodeyear": 2006, - "ref-by-count": 36, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1020454192", - "attributes": { - "title": "Many-Body Quantum Dynamics of Polarization Squeezing in Optical Fibers", - "doi": "10.1103/physrevlett.97.023606", - "nodeyear": 2006, - "ref-by-count": 63, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1017862564", - "attributes": { - "title": "Solution of the Bohr Hamiltonian for soft triaxial nuclei", - "doi": "10.1103/physrevc.74.014310", - "nodeyear": 2006, - "ref-by-count": 47, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1062971188", - "attributes": { - "title": "SHAPE EVOLUTION FOR Ce ISOTOPES IN RELATIVISTIC MEAN-FIELD THEORY", - "doi": "10.1142/s0218301306004661", - "nodeyear": 2006, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1004210259", - "attributes": { - "title": "Hybrid apparatus for Bose-Einstein condensation and cavity quantum electrodynamics: Single atom detection in quantum degenerate gases", - "doi": "10.1063/1.2216907", - "nodeyear": 2006, - "ref-by-count": 39, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1000892586", - "attributes": { - "title": "Enhanced density of low-lying 0+ states: A corroboration of shape phase transitional behavior", - "doi": "10.1016/j.physletb.2006.05.007", - "nodeyear": 2006, - "ref-by-count": 49, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1009022347", - "attributes": { - "title": "Physics at the Thomas Jefferson National Accelerator Facility", - "doi": "10.1140/epja/i2006-09-002-9", - "nodeyear": 2006, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1010496603", - "attributes": { - "title": "Quantum entanglement and classical bifurcations in a coupled two-component Bose-Einstein condensate", - "doi": "10.1140/epjd/e2006-00103-6", - "nodeyear": 2006, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1004884918", - "attributes": { - "title": "Scalar two-level boson model to study the interacting boson model phase diagram in the Casten triangle", - "doi": "10.1103/physrevc.73.054305", - "nodeyear": 2006, - "ref-by-count": 34, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060832030", - "attributes": { - "title": "Direct Empirical Correlation between Proton-Neutron Interaction Strengths and the Growth of Collectivity in Nuclei", - "doi": "10.1103/physrevlett.96.132501", - "nodeyear": 2006, - "ref-by-count": 66, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1027175597", - "attributes": { - "title": "E(5), X(5), and prolate to oblate shape phase transitions in relativistic Hartree-Bogoliubov theory", - "doi": "10.1103/physrevc.73.044310", - "nodeyear": 2006, - "ref-by-count": 72, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1064237535", - "attributes": { - "title": "Self-organization of a laser-driven cold gas in a ring cavity", - "doi": "10.1209/epl/i2005-10521-4", - "nodeyear": 2006, - "ref-by-count": 34, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1041063912", - "attributes": { - "title": "Probing Number Squeezing of Ultracold Atoms across the Superfluid-Mott Insulator Transition", - "doi": "10.1103/physrevlett.96.090401", - "nodeyear": 2006, - "ref-by-count": 89, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060675215", - "attributes": { - "title": "Lifetime measurements of yrast states in Yb162 and Hf166", - "doi": "10.1103/physrevc.73.034303", - "nodeyear": 2006, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060501981", - "attributes": { - "title": "Magnetization, squeezing, and entanglement in dipolar spin-1 condensates", - "doi": "10.1103/physreva.73.023602", - "nodeyear": 2006, - "ref-by-count": 53, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1031239487", - "attributes": { - "title": "Evolution of spectral properties along the O(6)-U(5) transition in the interacting boson model. II. Classical trajectories", - "doi": "10.1103/physrevc.73.014307", - "nodeyear": 2006, - "ref-by-count": 34, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1014034141", - "attributes": { - "title": "Evolution of spectral properties along the O(6)-U(5) transition in the interacting boson model. I. Level dynamics", - "doi": "10.1103/physrevc.73.014306", - "nodeyear": 2006, - "ref-by-count": 45, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1008903034", - "attributes": { - "title": "X(3): an exactly separable \u03b3-rigid version of the X(5) critical point symmetry", - "doi": "10.1016/j.physletb.2005.10.060", - "nodeyear": 2006, - "ref-by-count": 91, - "is_input_DOI": false, - "category_for": "02:0.60;01:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1004068287", - "attributes": { - "title": "Prolate\u2013oblate shape-phase transition in the O(6) description of nuclear rotation", - "doi": "10.1016/j.nuclphysa.2005.11.006", - "nodeyear": 2006, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060675113", - "attributes": { - "title": "Octupole collectivity in the Sm isotopes", - "doi": "10.1103/physrevc.72.064302", - "nodeyear": 2005, - "ref-by-count": 31, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059141664", - "attributes": { - "title": "Simultaneous squeezing of two orthogonal spin components", - "doi": "10.1088/1464-4266/7/12/046", - "nodeyear": 2005, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1062913555", - "attributes": { - "title": "SYSTEMATIC ANALYSIS OF CRITICAL POINT NUCLEI IN THE RARE-EARTH REGION WITH RELATIVISTIC MEAN FIELD THEORY", - "doi": "10.1142/s0217732305017883", - "nodeyear": 2005, - "ref-by-count": 25, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1039276131", - "attributes": { - "title": "An algebraic approach to problems with polynomial Hamiltonians on Euclidean spaces", - "doi": "10.1088/0305-4470/38/47/009", - "nodeyear": 2005, - "ref-by-count": 45, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1032223066", - "attributes": { - "title": "Self-organization of atoms in a cavity field: Threshold, bistability, and scaling laws", - "doi": "10.1103/physreva.72.053417", - "nodeyear": 2005, - "ref-by-count": 95, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1024370344", - "attributes": { - "title": "Effects of \u03b2-\u03b3 coupling in transitional nuclei and the validity of the approximate separation of variables", - "doi": "10.1103/physrevc.72.054323", - "nodeyear": 2005, - "ref-by-count": 76, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1016118774", - "attributes": { - "title": "A theoretical description of energy spectra and two-neutron separation energies for neutron-rich zirconium isotopes", - "doi": "10.1140/epja/i2005-10176-1", - "nodeyear": 2005, - "ref-by-count": 31, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1013722826", - "attributes": { - "title": "Superconducting Circuits and Quantum Information", - "doi": "10.1063/1.2155757", - "nodeyear": 2005, - "ref-by-count": 754, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1051841352", - "attributes": { - "title": "Solutions of the Bohr Hamiltonian, a compendium", - "doi": "10.1140/epjad/i2005-07-115-8", - "nodeyear": 2005, - "ref-by-count": 114, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1051688434", - "attributes": { - "title": "Quantum squeezing and entanglement in a two-mode Bose-Einstein condensate with time-dependent Josephson-like coupling", - "doi": "10.1103/physreva.72.033612", - "nodeyear": 2005, - "ref-by-count": 39, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1028802174", - "attributes": { - "title": "X (5) critical-point structure in a finite system", - "doi": "10.1103/physrevc.72.031305", - "nodeyear": 2005, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1003371857", - "attributes": { - "title": "Phase transitions and quasi-dynamical symmetry in nuclear collective models, III: The U(5) to SU(3) phase transition in the IBM", - "doi": "10.1016/j.nuclphysa.2005.05.144", - "nodeyear": 2005, - "ref-by-count": 57, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1022816651", - "attributes": { - "title": "Phase structure of a two-fluid bosonic system", - "doi": "10.1016/j.aop.2005.02.003", - "nodeyear": 2005, - "ref-by-count": 57, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1002091117", - "attributes": { - "title": "\u03b3-rigid solution of the Bohr Hamiltonian for \u03b3=30\u00b0 compared to the E(5) critical point symmetry", - "doi": "10.1016/j.physletb.2005.06.047", - "nodeyear": 2005, - "ref-by-count": 71, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060830663", - "attributes": { - "title": "Dynamic Supersymmetries of Differential Equations with Applications to Nuclear Spectroscopy", - "doi": "10.1103/physrevlett.95.052503", - "nodeyear": 2005, - "ref-by-count": 68, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1009628601", - "attributes": { - "title": "Phase transitions and quasidynamical symmetry in nuclear collective models. II. The spherical vibrator to gamma-soft rotor transition in an SO(5)-invariant Bohr model", - "doi": "10.1016/j.nuclphysa.2005.04.003", - "nodeyear": 2005, - "ref-by-count": 48, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1035029355", - "attributes": { - "title": "Direct Observation of Tunneling and Nonlinear Self-Trapping in a Single Bosonic Josephson Junction", - "doi": "10.1103/physrevlett.95.010402", - "nodeyear": 2005, - "ref-by-count": 1161, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1052394951", - "attributes": { - "title": "Shape evolution for Sm isotopes in relativistic mean-field theory", - "doi": "10.1140/epja/i2005-10066-6", - "nodeyear": 2005, - "ref-by-count": 67, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1039981372", - "attributes": { - "title": "Analytic description of critical-point actinides in a transition from octupole deformation to octupole vibrations", - "doi": "10.1103/physrevc.71.064309", - "nodeyear": 2005, - "ref-by-count": 46, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1049959435", - "attributes": { - "title": "Quantum phase transition in the U(3) boson system", - "doi": "10.1016/j.physleta.2005.04.086", - "nodeyear": 2005, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059141708", - "attributes": { - "title": "Classical evolution of quantum fluctuations in spin-like systems: squeezing and entanglement", - "doi": "10.1088/1464-4266/7/6/004", - "nodeyear": 2005, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060674871", - "attributes": { - "title": "Simple description of light W, Os, and Pt nuclei in the interacting boson model", - "doi": "10.1103/physrevc.71.054306", - "nodeyear": 2005, - "ref-by-count": 37, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019615542", - "attributes": { - "title": "The algebraic collective model", - "doi": "10.1016/j.nuclphysa.2005.01.032", - "nodeyear": 2005, - "ref-by-count": 71, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1012276581", - "attributes": { - "title": "Quantum entanglement and fixed-point bifurcations", - "doi": "10.1103/physreva.71.042303", - "nodeyear": 2005, - "ref-by-count": 55, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019064484", - "attributes": { - "title": "Equivalence between two-mode spin squeezed states and pure entangled states with equal spin", - "doi": "10.1088/0305-4470/38/14/l01", - "nodeyear": 2005, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060829954", - "attributes": { - "title": "Superradiant Light Scattering from Thermal Atomic Vapors", - "doi": "10.1103/physrevlett.94.083602", - "nodeyear": 2005, - "ref-by-count": 41, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060674805", - "attributes": { - "title": "Bridging the gap between X(5) and the interacting boson model", - "doi": "10.1103/physrevc.71.034309", - "nodeyear": 2005, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059052509", - "attributes": { - "title": "Spin Squeezing and Entanglement of Many-Particle Spin-Half States", - "doi": "10.1088/0256-307x/22/2/002", - "nodeyear": 2005, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060829713", - "attributes": { - "title": "Direct Observation of Dynamical Bifurcation between Two Driven Oscillation States of a Josephson Junction", - "doi": "10.1103/physrevlett.94.027005", - "nodeyear": 2005, - "ref-by-count": 133, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1006251427", - "attributes": { - "title": "Spin Squeezing via One-Axis Twisting with Coherent Light", - "doi": "10.1103/physrevlett.94.023003", - "nodeyear": 2005, - "ref-by-count": 68, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1026031618", - "attributes": { - "title": "Magnetometry with entangled atomic samples", - "doi": "10.1103/physreva.71.012312", - "nodeyear": 2005, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1028230402", - "attributes": { - "title": "Phase Structure of the Two-Fluid Proton-Neutron System", - "doi": "10.1103/physrevlett.93.242502", - "nodeyear": 2004, - "ref-by-count": 54, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060829459", - "attributes": { - "title": "Scaling Properties and Asymptotic Spectra of Finite Models of Phase Transitions as They Approach Macroscopic Limits", - "doi": "10.1103/physrevlett.93.232502", - "nodeyear": 2004, - "ref-by-count": 66, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1027890249", - "attributes": { - "title": "Can a Quantum Nondemolition Measurement Improve the Sensitivity of an Atomic Magnetometer?", - "doi": "10.1103/physrevlett.93.173002", - "nodeyear": 2004, - "ref-by-count": 92, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1038529836", - "attributes": { - "title": "Continuous Weak Measurement and Nonlinear Dynamics in a Cold Spin Ensemble", - "doi": "10.1103/physrevlett.93.163602", - "nodeyear": 2004, - "ref-by-count": 78, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1020702089", - "attributes": { - "title": "Alternative Interpretation of Sharply Rising E0 Strengths in Transitional Regions", - "doi": "10.1103/physrevlett.93.152502", - "nodeyear": 2004, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060674676", - "attributes": { - "title": "Comment on \u201cSearching for E(5) behavior in nuclei\u201d", - "doi": "10.1103/physrevc.70.049801", - "nodeyear": 2004, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1000824046", - "attributes": { - "title": "Entanglement and spin squeezing in the three-qubit transverse Ising model", - "doi": "10.1016/j.physleta.2004.08.019", - "nodeyear": 2004, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060829034", - "attributes": { - "title": "Experimental Confirmation of the Alhassid-Whelan Arc of Regularity", - "doi": "10.1103/physrevlett.93.132501", - "nodeyear": 2004, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1043619387", - "attributes": { - "title": "Weak Dynamical Localization in Periodically Kicked Cold Atomic Gases", - "doi": "10.1103/physrevlett.93.124101", - "nodeyear": 2004, - "ref-by-count": 23, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060500571", - "attributes": { - "title": "Sub-shot-noise-limited measurements with Bose-Einstein condensates", - "doi": "10.1103/physreva.70.033601", - "nodeyear": 2004, - "ref-by-count": 54, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1043354067", - "attributes": { - "title": "E(5) and X(5) critical point symmetries obtained from Davidson potentials through a variational procedure", - "doi": "10.1103/physrevc.70.024305", - "nodeyear": 2004, - "ref-by-count": 38, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1013587089", - "attributes": { - "title": "Soft triaxial rotovibrational motion in the vicinity of \u03b3=\u03c0\u22156", - "doi": "10.1103/physrevc.70.011302", - "nodeyear": 2004, - "ref-by-count": 60, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1095903609", - "attributes": { - "title": "Basic Ideas and Concepts in Nuclear Physics", - "doi": "10.1201/9781420054941", - "nodeyear": 2004, - "ref-by-count": 35, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1020207781", - "attributes": { - "title": "Stability of Atomic Clocks Based on Entangled Atoms", - "doi": "10.1103/physrevlett.92.230801", - "nodeyear": 2004, - "ref-by-count": 96, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060674224", - "attributes": { - "title": "Searching for E(5) behavior in nuclei", - "doi": "10.1103/physrevc.69.064322", - "nodeyear": 2004, - "ref-by-count": 92, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060674216", - "attributes": { - "title": "N=90 region: The decay of Eu 154 to Gd 154", - "doi": "10.1103/physrevc.69.064309", - "nodeyear": 2004, - "ref-by-count": 21, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1003628052", - "attributes": { - "title": "Collective Excitations of a Degenerate Gas at the BEC-BCS Crossover", - "doi": "10.1103/physrevlett.92.203201", - "nodeyear": 2004, - "ref-by-count": 486, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060674175", - "attributes": { - "title": "Phase transitions versus shape coexistence", - "doi": "10.1103/physrevc.69.054304", - "nodeyear": 2004, - "ref-by-count": 36, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1038988214", - "attributes": { - "title": "Phase transitions between axisymmetric and nonaxial nuclear shapes", - "doi": "10.1134/1.1755385", - "nodeyear": 2004, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1041801698", - "attributes": { - "title": "Entanglement Interferometry for Precision Measurement of Atomic Scattering Properties", - "doi": "10.1103/physrevlett.92.160406", - "nodeyear": 2004, - "ref-by-count": 104, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1051955120", - "attributes": { - "title": "Quantum-state transfer between fields and atoms in electromagnetically induced transparency", - "doi": "10.1103/physreva.69.043810", - "nodeyear": 2004, - "ref-by-count": 85, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1020674059", - "attributes": { - "title": "Condensation of Pairs of Fermionic Atoms near a Feshbach Resonance", - "doi": "10.1103/physrevlett.92.120403", - "nodeyear": 2004, - "ref-by-count": 978, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060674103", - "attributes": { - "title": "Evolving shape coexistence in the lead isotopes: The geometry of configuration mixing in nuclei", - "doi": "10.1103/physrevc.69.034323", - "nodeyear": 2004, - "ref-by-count": 52, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1024352953", - "attributes": { - "title": "Measurement of a mixed-spin-channel Feshbach resonance in Rb 87", - "doi": "10.1103/physreva.69.032705", - "nodeyear": 2004, - "ref-by-count": 63, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1021947031", - "attributes": { - "title": "Ground state bands of the E(5) and X(5) critical symmetries obtained from Davidson potentials through a variational procedure", - "doi": "10.1016/j.physletb.2004.01.018", - "nodeyear": 2004, - "ref-by-count": 71, - "is_input_DOI": false, - "category_for": "02:0.60;01:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1060674055", - "attributes": { - "title": "Low spin states in Yb 162 and the X(5) critical point symmetry", - "doi": "10.1103/physrevc.69.024308", - "nodeyear": 2004, - "ref-by-count": 31, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1008096035", - "attributes": { - "title": "Entanglement in a second-order quantum phase transition", - "doi": "10.1103/physreva.69.022107", - "nodeyear": 2004, - "ref-by-count": 241, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1016359120", - "attributes": { - "title": "Observation of Resonance Condensation of Fermionic Atom Pairs", - "doi": "10.1103/physrevlett.92.040403", - "nodeyear": 2004, - "ref-by-count": 1348, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060674011", - "attributes": { - "title": "Rotation-driven spherical-to-deformed shape transition in A\u2248100 nuclei and the cranked interacting boson model", - "doi": "10.1103/physrevc.69.011301", - "nodeyear": 2004, - "ref-by-count": 25, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1029628720", - "attributes": { - "title": "Sequence of potentials lying between the U(5) and X(5) symmetries", - "doi": "10.1103/physrevc.69.014302", - "nodeyear": 2004, - "ref-by-count": 68, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060673990", - "attributes": { - "title": "Test of X(5) for the \u03b3 degree of freedom", - "doi": "10.1103/physrevc.68.064304", - "nodeyear": 2003, - "ref-by-count": 64, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1026174138", - "attributes": { - "title": "A close look at U(5)\u2194SU(3) transitional patterns in the interacting boson model", - "doi": "10.1016/j.physletb.2003.09.098", - "nodeyear": 2003, - "ref-by-count": 37, - "is_input_DOI": false, - "category_for": "02:0.60;01:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1060827495", - "attributes": { - "title": "Observation of Collective Friction Forces due to Spatial Self-Organization of Atoms: From Rayleigh to Bragg Scattering", - "doi": "10.1103/physrevlett.91.203001", - "nodeyear": 2003, - "ref-by-count": 259, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060673983", - "attributes": { - "title": "Comment on \u201cReexamination of the N=90 transitional nuclei Nd 150 and Sm 152 \u201d", - "doi": "10.1103/physrevc.68.059801", - "nodeyear": 2003, - "ref-by-count": 21, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1012415680", - "attributes": { - "title": "Systematic study of deformed nuclei at the drip lines and beyond", - "doi": "10.1103/physrevc.68.054312", - "nodeyear": 2003, - "ref-by-count": 227, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059141471", - "attributes": { - "title": "Dynamical squeezing enhancement in the off-resonant Dicke model", - "doi": "10.1088/1464-4266/6/1/006", - "nodeyear": 2003, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:0.60;03:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1041066149", - "attributes": { - "title": "U(5)-O(6) transition in the interacting boson model and the E(5) critical point symmetry", - "doi": "10.1103/physrevc.68.041302", - "nodeyear": 2003, - "ref-by-count": 71, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060827277", - "attributes": { - "title": "Phase Transitions in Angle Variables", - "doi": "10.1103/physrevlett.91.132502", - "nodeyear": 2003, - "ref-by-count": 151, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1025127614", - "attributes": { - "title": "Supersolid versus Phase Separation in Atomic Bose-Fermi Mixtures", - "doi": "10.1103/physrevlett.91.130404", - "nodeyear": 2003, - "ref-by-count": 156, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060827181", - "attributes": { - "title": "Low-Energy Coexisting Band in Gd154", - "doi": "10.1103/physrevlett.91.102501", - "nodeyear": 2003, - "ref-by-count": 39, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060673917", - "attributes": { - "title": "Searching for X(5) behavior in nuclei", - "doi": "10.1103/physrevc.68.037301", - "nodeyear": 2003, - "ref-by-count": 62, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1014640361", - "attributes": { - "title": "Relations between bosonic quadrature squeezing and atomic spin squeezing", - "doi": "10.1103/physreva.68.033821", - "nodeyear": 2003, - "ref-by-count": 37, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1013668806", - "attributes": { - "title": "Self-consistent approach to deformation of intruder states in neutron-deficient Pb and Po", - "doi": "10.1016/j.physletb.2003.07.042", - "nodeyear": 2003, - "ref-by-count": 33, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1028952543", - "attributes": { - "title": "Phase transitions and critical points in the rare-earth region", - "doi": "10.1103/physrevc.68.024307", - "nodeyear": 2003, - "ref-by-count": 42, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059051422", - "attributes": { - "title": "Description of\n 114\n Cd in the\n E\n (5) Symmetry", - "doi": "10.1088/0256-307x/20/8/313", - "nodeyear": 2003, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1003190826", - "attributes": { - "title": "Spin squeezing and pairwise entanglement for symmetric multiqubit states", - "doi": "10.1103/physreva.68.012101", - "nodeyear": 2003, - "ref-by-count": 174, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1016917732", - "attributes": { - "title": "Concepts and Methods in the Theory of Open Quantum Systems", - "doi": "10.1007/3-540-44874-8_4", - "nodeyear": 2003, - "ref-by-count": 431, - "is_input_DOI": false, - "category_for": "01:0.60;02:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1059051362", - "attributes": { - "title": "Evidence for a Possible\n E\n (5) Symmetry in\n 130\n Xe", - "doi": "10.1088/0256-307x/20/7/316", - "nodeyear": 2003, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1024862071", - "attributes": { - "title": "Faraday spectroscopy in an optical lattice: a continuous probe of atom dynamics", - "doi": "10.1088/1464-4266/5/4/301", - "nodeyear": 2003, - "ref-by-count": 42, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042658200", - "attributes": { - "title": "Spin Squeezing Criterion with Local Unitary Invariance", - "doi": "10.1023/b:qinp.0000004125.12489.f4", - "nodeyear": 2003, - "ref-by-count": 23, - "is_input_DOI": false, - "category_for": "08:0.33;02:0.33;01:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1049620203", - "attributes": { - "title": "Critical-Point Symmetry in a Finite System", - "doi": "10.1103/physrevlett.90.212501", - "nodeyear": 2003, - "ref-by-count": 41, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1065170744", - "attributes": { - "title": "Mechanical effects of light in optical resonators", - "doi": "10.1364/josab.20.001098", - "nodeyear": 2003, - "ref-by-count": 151, - "is_input_DOI": false, - "category_for": "09:0.33;01:0.33;02:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1046510001", - "attributes": { - "title": "Algebraic Bethe ansatz method for the exact calculation of energy spectra and form factors: applications to models of Bose\u2013Einstein condensates and metallic nanograins", - "doi": "10.1088/0305-4470/36/19/201", - "nodeyear": 2003, - "ref-by-count": 124, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060826564", - "attributes": { - "title": "Signature for Vibrational to Rotational Evolution Along the Yrast Line", - "doi": "10.1103/physrevlett.90.152502", - "nodeyear": 2003, - "ref-by-count": 103, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060826447", - "attributes": { - "title": "Landau Theory of Shape Phase Transitions in the Cranked Interacting Boson Model", - "doi": "10.1103/physrevlett.90.112501", - "nodeyear": 2003, - "ref-by-count": 27, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1002415192", - "attributes": { - "title": "Entangling two Bose-Einstein condensates by stimulated Bragg scattering", - "doi": "10.1103/physreva.67.023603", - "nodeyear": 2003, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1010954675", - "attributes": { - "title": "The effective potential of squeezed spin states", - "doi": "10.1016/s0375-9601(02)01796-6", - "nodeyear": 2003, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1018185342", - "attributes": { - "title": "Many-particle entanglement in two-component Bose-Einstein condensates", - "doi": "10.1103/physreva.67.013607", - "nodeyear": 2003, - "ref-by-count": 202, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060673587", - "attributes": { - "title": "Low-spin structure of 156Dy through \u03b3-ray spectroscopy", - "doi": "10.1103/physrevc.66.054310", - "nodeyear": 2002, - "ref-by-count": 62, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060825499", - "attributes": { - "title": "Triple Point of Nuclear Deformations", - "doi": "10.1103/physrevlett.89.182502", - "nodeyear": 2002, - "ref-by-count": 106, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060498655", - "attributes": { - "title": "Spin squeezing in a driven Bose-Einstein condensate", - "doi": "10.1103/physreva.66.043621", - "nodeyear": 2002, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1048466090", - "attributes": { - "title": "Preparation of spin-squeezed atomic states by optical-phase-shift measurement", - "doi": "10.1103/physreva.66.043811", - "nodeyear": 2002, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1049930918", - "attributes": { - "title": "Algebraic analysis of bent-from-linear transition intensities: the vibronically resolved emission spectrum of methinophosphide (HCP)", - "doi": "10.1016/s0009-2614(02)01419-7", - "nodeyear": 2002, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060673509", - "attributes": { - "title": "Evidence of X(5) symmetry for n\u03b3=0,1,2 bands in 104Mo", - "doi": "10.1103/physrevc.66.031301", - "nodeyear": 2002, - "ref-by-count": 42, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1043952833", - "attributes": { - "title": "Entangling atoms in bad cavities", - "doi": "10.1103/physreva.66.022314", - "nodeyear": 2002, - "ref-by-count": 65, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060498428", - "attributes": { - "title": "Bifurcation effects in coupled Bose-Einstein condensates", - "doi": "10.1103/physreva.66.013602", - "nodeyear": 2002, - "ref-by-count": 21, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1052781356", - "attributes": { - "title": "Single-mode approximation in a spinor-1 atomic condensate", - "doi": "10.1103/physreva.66.011601", - "nodeyear": 2002, - "ref-by-count": 119, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1020003088", - "attributes": { - "title": "Near-optimal two-mode spin squeezing via feedback", - "doi": "10.1103/physreva.66.012313", - "nodeyear": 2002, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060673423", - "attributes": { - "title": "Lifetime and B(E2) values for the 31+ level in 152Sm", - "doi": "10.1103/physrevc.65.067305", - "nodeyear": 2002, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060824936", - "attributes": { - "title": "B(E2) Values in N150d and the Critical Point Symmetry X(5)", - "doi": "10.1103/physrevlett.88.232501", - "nodeyear": 2002, - "ref-by-count": 166, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1008334218", - "attributes": { - "title": "Atom correlations and spin squeezing near the Heisenberg limit: Finite-size effect and decoherence", - "doi": "10.1103/physreva.65.053819", - "nodeyear": 2002, - "ref-by-count": 62, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060673380", - "attributes": { - "title": "Empirical example of possible E(5) symmetry nucleus 108Pd", - "doi": "10.1103/physrevc.65.057301", - "nodeyear": 2002, - "ref-by-count": 26, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060673307", - "attributes": { - "title": "102Pd: An E(5) nucleus?", - "doi": "10.1103/physrevc.65.044325", - "nodeyear": 2002, - "ref-by-count": 74, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1043133057", - "attributes": { - "title": "Bogoliubov theory of entanglement in a Bose-Einstein condensate", - "doi": "10.1103/physreva.65.043610", - "nodeyear": 2002, - "ref-by-count": 41, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1025998679", - "attributes": { - "title": "Scaling of entanglement close to a quantum phase transition", - "doi": "10.1038/416608a", - "nodeyear": 2002, - "ref-by-count": 1446, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1034030383", - "attributes": { - "title": "Dynamically turning off interactions in a two-component condensate", - "doi": "10.1103/physreva.65.033625", - "nodeyear": 2002, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1036288955", - "attributes": { - "title": "Pairwise entanglement in symmetric multi-qubit systems", - "doi": "10.1140/epjd/e20020045", - "nodeyear": 2002, - "ref-by-count": 128, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060673232", - "attributes": { - "title": "Finite well solution for the E(5) Hamiltonian", - "doi": "10.1103/physrevc.65.031304", - "nodeyear": 2002, - "ref-by-count": 43, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1048054732", - "attributes": { - "title": "Quantum teleportation and entanglement swapping for spin systems", - "doi": "10.1088/1367-2630/4/1/308", - "nodeyear": 2002, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1003227336", - "attributes": { - "title": "Singular character of critical points in nuclei", - "doi": "10.1016/s0370-2693(02)01160-7", - "nodeyear": 2002, - "ref-by-count": 59, - "is_input_DOI": false, - "category_for": "02:0.60;01:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1006913239", - "attributes": { - "title": "Limitations of entanglement between photons and atoms coupled out from a Bose-Einstein condensate", - "doi": "10.1103/physreva.65.021605", - "nodeyear": 2002, - "ref-by-count": 30, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059141222", - "attributes": { - "title": "`Nonclassical' states in quantum optics: a `squeezed' review of the first 75 years", - "doi": "10.1088/1464-4266/4/1/201", - "nodeyear": 2002, - "ref-by-count": 632, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1052648436", - "attributes": { - "title": "Quantum phase transition from a superfluid to a Mott insulator in a gas of ultracold atoms", - "doi": "10.1038/415039a", - "nodeyear": 2002, - "ref-by-count": 4429, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1027887936", - "attributes": { - "title": "Collective atomic spin squeezing and control", - "doi": "10.1140/e10053-002-0014-7", - "nodeyear": 2002, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1029120630", - "attributes": { - "title": "Sufficient conditions for three-particle entanglement and their tests in recent experiments", - "doi": "10.1103/physreva.65.012107", - "nodeyear": 2001, - "ref-by-count": 86, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060823818", - "attributes": { - "title": "Quantum Phase Transition for \u03b3-Soft Nuclei", - "doi": "10.1103/physrevlett.87.162501", - "nodeyear": 2001, - "ref-by-count": 112, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1036937707", - "attributes": { - "title": "Exploring Phase Coherence in a 2D Lattice of Bose-Einstein Condensates", - "doi": "10.1103/physrevlett.87.160405", - "nodeyear": 2001, - "ref-by-count": 531, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1045391551", - "attributes": { - "title": "Quantum state transfer from light beams to atomic ensembles", - "doi": "10.1007/s100530170045", - "nodeyear": 2001, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1008192613", - "attributes": { - "title": "Experimental long-lived entanglement of two macroscopic objects", - "doi": "10.1038/35096524", - "nodeyear": 2001, - "ref-by-count": 882, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1050586441", - "attributes": { - "title": "Squeezed Light from Spin-Squeezed Atoms", - "doi": "10.1103/physrevlett.87.123601", - "nodeyear": 2001, - "ref-by-count": 34, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1043541010", - "attributes": { - "title": "Parameter symmetries of quantum many-body systems", - "doi": "10.1103/physrevc.64.034307", - "nodeyear": 2001, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1062445233", - "attributes": { - "title": "Josephson Junction Arrays with Bose-Einstein Condensates", - "doi": "10.1126/science.1062612", - "nodeyear": 2001, - "ref-by-count": 688, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060823477", - "attributes": { - "title": "Empirical Realization of a Critical Point Description in Atomic Nuclei", - "doi": "10.1103/physrevlett.87.052503", - "nodeyear": 2001, - "ref-by-count": 321, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060823476", - "attributes": { - "title": "Analytic Description of Critical Point Nuclei in a Spherical-Axially Deformed Shape Phase Transition", - "doi": "10.1103/physrevlett.87.052502", - "nodeyear": 2001, - "ref-by-count": 654, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060823255", - "attributes": { - "title": "Experimental Demonstration of Entanglement-Enhanced Rotation Angle Estimation Using Trapped Ions", - "doi": "10.1103/physrevlett.86.5870", - "nodeyear": 2001, - "ref-by-count": 209, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1047906658", - "attributes": { - "title": "Two-neutron separation energies, binding energies and phase transitions in the interacting boson model", - "doi": "10.1016/s0375-9474(00)00592-3", - "nodeyear": 2001, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1026831915", - "attributes": { - "title": "New Mechanism for the Enhancement of sd Dominance in Interacting Boson Models", - "doi": "10.1103/physrevlett.86.4791", - "nodeyear": 2001, - "ref-by-count": 31, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1035230987", - "attributes": { - "title": "Observation of the ideal Josephson effect in superfluid 4He", - "doi": "10.1038/35077024", - "nodeyear": 2001, - "ref-by-count": 98, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1053418337", - "attributes": { - "title": "Spin squeezing in nonlinear spin-coherent states", - "doi": "10.1088/1464-4266/3/3/304", - "nodeyear": 2001, - "ref-by-count": 29, - "is_input_DOI": false, - "category_for": "02:0.60;03:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1060726472", - "attributes": { - "title": "Decoherence and thermalization in a simple bosonic system", - "doi": "10.1103/physreve.63.036127", - "nodeyear": 2001, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060822514", - "attributes": { - "title": "Transition from Spherical to Deformed Shapes of Nuclei in the Monte Carlo Shell Model", - "doi": "10.1103/physrevlett.86.1171", - "nodeyear": 2001, - "ref-by-count": 42, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060672803", - "attributes": { - "title": "E2 transitions and quadrupole moments in the E(5) symmetry", - "doi": "10.1103/physrevc.63.034308", - "nodeyear": 2001, - "ref-by-count": 35, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059141143", - "attributes": { - "title": "Mapping a quantum state of light onto atoms", - "doi": "10.1088/1464-4266/3/1/365", - "nodeyear": 2001, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060839535", - "attributes": { - "title": "Bose-Einstein condensation in the alkali gases: Some fundamental concepts", - "doi": "10.1103/revmodphys.73.307", - "nodeyear": 2001, - "ref-by-count": 1518, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1049625672", - "attributes": { - "title": "Quantum Communication between Atomic Ensembles Using Coherent Light", - "doi": "10.1103/physrevlett.85.5643", - "nodeyear": 2000, - "ref-by-count": 255, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1006586634", - "attributes": { - "title": "Squeezing and Entanglement of Atomic Beams", - "doi": "10.1103/physrevlett.85.3991", - "nodeyear": 2000, - "ref-by-count": 183, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060822061", - "attributes": { - "title": "Evidence for a Possible E(5) Symmetry in 134Ba", - "doi": "10.1103/physrevlett.85.3584", - "nodeyear": 2000, - "ref-by-count": 252, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060822060", - "attributes": { - "title": "Dynamic Symmetries at the Critical Point", - "doi": "10.1103/physrevlett.85.3580", - "nodeyear": 2000, - "ref-by-count": 585, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060725247", - "attributes": { - "title": "Quantum phase transitions studied within the interacting boson model", - "doi": "10.1103/physreve.61.6237", - "nodeyear": 2000, - "ref-by-count": 50, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1010029009", - "attributes": { - "title": "Entanglement of Atomic Ensembles by Trapping Correlated Photon States", - "doi": "10.1103/physrevlett.84.4232", - "nodeyear": 2000, - "ref-by-count": 345, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1047063919", - "attributes": { - "title": "Distributed entanglement", - "doi": "10.1103/physreva.61.052306", - "nodeyear": 2000, - "ref-by-count": 1755, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1040444443", - "attributes": { - "title": "Peres-Horodecki Separability Criterion for Continuous Variable Systems", - "doi": "10.1103/physrevlett.84.2726", - "nodeyear": 2000, - "ref-by-count": 1497, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1014398038", - "attributes": { - "title": "Inseparability Criterion for Continuous Variable Systems", - "doi": "10.1103/physrevlett.84.2722", - "nodeyear": 2000, - "ref-by-count": 1522, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1038179687", - "attributes": { - "title": "Quadrupole shape invariants in the interacting boson model", - "doi": "10.1103/physrevc.61.021301", - "nodeyear": 2000, - "ref-by-count": 64, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060672166", - "attributes": { - "title": "Phase/shape coexistence in 152Sm in the geometric collective model", - "doi": "10.1103/physrevc.60.061304", - "nodeyear": 1999, - "ref-by-count": 26, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1098667582", - "attributes": { - "title": "Quantum Chaos", - "doi": "10.1017/cbo9780511524622", - "nodeyear": 1999, - "ref-by-count": 819, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1060672129", - "attributes": { - "title": "B(E2) values and phase coexistence in 152Sm", - "doi": "10.1103/physrevc.60.054312", - "nodeyear": 1999, - "ref-by-count": 49, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060495410", - "attributes": { - "title": "Finite Kerr medium: Macroscopic quantum superposition states and Wigner functions on the sphere", - "doi": "10.1103/physreva.60.1817", - "nodeyear": 1999, - "ref-by-count": 54, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060819856", - "attributes": { - "title": "Spin Squeezed Atoms: A Macroscopic Entangled Ensemble Created by Light", - "doi": "10.1103/physrevlett.83.1319", - "nodeyear": 1999, - "ref-by-count": 419, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1062566030", - "attributes": { - "title": "Superradiant Rayleigh Scattering from a Bose-Einstein Condensate", - "doi": "10.1126/science.285.5427.571", - "nodeyear": 1999, - "ref-by-count": 404, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1008316332", - "attributes": { - "title": "Phase Transitions in Finite Nuclei and the Integer Nucleon Number Problem", - "doi": "10.1103/physrevlett.82.5000", - "nodeyear": 1999, - "ref-by-count": 80, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1049368483", - "attributes": { - "title": "Squeezed few-photon states of the field generated from squeezed atoms", - "doi": "10.1103/physreva.59.3959", - "nodeyear": 1999, - "ref-by-count": 23, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1012911939", - "attributes": { - "title": "Particle-hole excitations in the interacting boson model (IV). The U(5)-SU(3) coupling", - "doi": "10.1016/s0375-9474(99)00124-4", - "nodeyear": 1999, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059185033", - "attributes": { - "title": "Quantum phase transitions", - "doi": "10.1088/2058-7058/12/4/23", - "nodeyear": 1999, - "ref-by-count": 585, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060494991", - "attributes": { - "title": "State-selective Rabi and Ramsey magnetic resonance line shapes", - "doi": "10.1103/physreva.59.r922", - "nodeyear": 1999, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060494914", - "attributes": { - "title": "Coherent oscillations between two weakly coupled Bose-Einstein condensates: Josephson effects, \u03c0 oscillations, and macroscopic quantum self-trapping", - "doi": "10.1103/physreva.59.620", - "nodeyear": 1999, - "ref-by-count": 763, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1029889092", - "attributes": { - "title": "Governing dynamics by squeezing in a system of cold trapped ions", - "doi": "10.1103/physreva.59.736", - "nodeyear": 1999, - "ref-by-count": 1, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1002717445", - "attributes": { - "title": "Nonlinear Josephson-type oscillations of a driven, two-component Bose-Einstein condensate", - "doi": "10.1103/physreva.59.r31", - "nodeyear": 1999, - "ref-by-count": 168, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1050841175", - "attributes": { - "title": "The Dicke model dynamics in a high detuning limit", - "doi": "10.1016/s0375-9601(98)00529-5", - "nodeyear": 1998, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060671138", - "attributes": { - "title": "Phase transition in the pairing-plus-quadrupole model", - "doi": "10.1103/physrevc.58.1539", - "nodeyear": 1998, - "ref-by-count": 41, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060817875", - "attributes": { - "title": "Phase Coexistence in Transitional Nuclei and the Interacting-Boson Model", - "doi": "10.1103/physrevlett.81.1191", - "nodeyear": 1998, - "ref-by-count": 149, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1046879659", - "attributes": { - "title": "Parameter symmetry of the interacting boson model", - "doi": "10.1016/s0370-2693(98)00791-6", - "nodeyear": 1998, - "ref-by-count": 30, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1031686744", - "attributes": { - "title": "Exactly Solvable Model of a Superconducting to Rotational Phase Transition", - "doi": "10.1103/physrevlett.80.4394", - "nodeyear": 1998, - "ref-by-count": 45, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060817288", - "attributes": { - "title": "Quantum Noise of an Atomic Spin Polarization Measurement", - "doi": "10.1103/physrevlett.80.3487", - "nodeyear": 1998, - "ref-by-count": 121, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060671065", - "attributes": { - "title": "The first excited 0+ state in 152Sm", - "doi": "10.1103/physrevc.57.r1553", - "nodeyear": 1998, - "ref-by-count": 49, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1008906037", - "attributes": { - "title": "Entanglement of Formation of an Arbitrary State of Two Qubits", - "doi": "10.1103/physrevlett.80.2245", - "nodeyear": 1998, - "ref-by-count": 5968, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1045736543", - "attributes": { - "title": "Quantum superposition states of Bose-Einstein condensates", - "doi": "10.1103/physreva.57.1208", - "nodeyear": 1998, - "ref-by-count": 346, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1028741585", - "attributes": { - "title": "Dynamical-symmetry content of transitional IBM-1 hamiltonians", - "doi": "10.1016/s0370-2693(97)01533-5", - "nodeyear": 1998, - "ref-by-count": 34, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1028901322", - "attributes": { - "title": "Josephson effect between trapped Bose-Einstein condensates", - "doi": "10.1103/physreva.57.r28", - "nodeyear": 1998, - "ref-by-count": 240, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1047509663", - "attributes": { - "title": "Quantum Coherent Atomic Tunneling between Two Trapped Bose-Einstein Condensates", - "doi": "10.1103/physrevlett.79.4950", - "nodeyear": 1997, - "ref-by-count": 1013, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1030664451", - "attributes": { - "title": "Quantum-Controlled Few-Photon State Generated by Squeezed Atoms", - "doi": "10.1103/physrevlett.79.3869", - "nodeyear": 1997, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060670774", - "attributes": { - "title": "Unified description of collective nuclei with the interacting boson model", - "doi": "10.1103/physrevc.56.829", - "nodeyear": 1997, - "ref-by-count": 33, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1013675126", - "attributes": { - "title": "Particle-hole excitations in the interacting boson model (II): The U(5)-O(6) coupling", - "doi": "10.1016/s0375-9474(97)00196-6", - "nodeyear": 1997, - "ref-by-count": 36, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1047182146", - "attributes": { - "title": "Incompleteness of Representation Theory: Hidden Symmetries and Quantum Nonintegrability", - "doi": "10.1103/physrevlett.79.537", - "nodeyear": 1997, - "ref-by-count": 34, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1044645483", - "attributes": { - "title": "Quantum oscillations between two weakly coupled reservoirs of superfluid 3He", - "doi": "10.1038/41277", - "nodeyear": 1997, - "ref-by-count": 142, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060492307", - "attributes": { - "title": "Optimal frequency measurements with maximally correlated states", - "doi": "10.1103/physreva.54.r4649", - "nodeyear": 1996, - "ref-by-count": 807, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060492164", - "attributes": { - "title": "Generation of atomic-squeezed states in an optical cavity with an injected squeezed vacuum", - "doi": "10.1103/physreva.54.5327", - "nodeyear": 1996, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1038304688", - "attributes": { - "title": "Field Theory of the Quantum Kicked Rotor", - "doi": "10.1103/physrevlett.77.4536", - "nodeyear": 1996, - "ref-by-count": 59, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1014942113", - "attributes": { - "title": "Supersymmetry for systems with unitary disorder: circular ensembles", - "doi": "10.1088/0305-4470/29/22/013", - "nodeyear": 1996, - "ref-by-count": 71, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060670095", - "attributes": { - "title": "Shapes and stability within the interacting boson model: Dynamical symmetries", - "doi": "10.1103/physrevc.54.2374", - "nodeyear": 1996, - "ref-by-count": 79, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019487999", - "attributes": { - "title": "The squeezed component of the atomic collective phase quadrature operators with respect to a two-level atomic coherent state", - "doi": "10.1016/0375-9601(96)00565-8", - "nodeyear": 1996, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1062553940", - "attributes": { - "title": "Universal Quantum Simulators", - "doi": "10.1126/science.273.5278.1073", - "nodeyear": 1996, - "ref-by-count": 1348, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1035008566", - "attributes": { - "title": "Cranking approach to the interacting boson model: the behaviour of the intrinsic state with angular momentum", - "doi": "10.1016/0375-9474(96)00121-2", - "nodeyear": 1996, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1008912168", - "attributes": { - "title": "Particle-hole excitations in the interacting boson model (I) General structure and symmetries", - "doi": "10.1016/0375-9474(96)00019-x", - "nodeyear": 1996, - "ref-by-count": 38, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060812645", - "attributes": { - "title": "Manifestation of Classical Bifurcation in the Spectrum of the Integrable Quantum Dimer", - "doi": "10.1103/physrevlett.76.1607", - "nodeyear": 1996, - "ref-by-count": 80, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1004646989", - "attributes": { - "title": "The IBM extended consistent-Q formalism across the N = 82\u2013126 shell. Empirical trends and anomalies", - "doi": "10.1016/0370-2693(95)01442-x", - "nodeyear": 1996, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:0.60;01:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1060839373", - "attributes": { - "title": "Intrinsic reflection asymmetry in atomic nuclei", - "doi": "10.1103/revmodphys.68.349", - "nodeyear": 1996, - "ref-by-count": 521, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060812343", - "attributes": { - "title": "Atom Optics Realization of the Quantum \u03b4-Kicked Rotor", - "doi": "10.1103/physrevlett.75.4598", - "nodeyear": 1995, - "ref-by-count": 508, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060812205", - "attributes": { - "title": "Bose-Einstein Condensation in a Gas of Sodium Atoms", - "doi": "10.1103/physrevlett.75.3969", - "nodeyear": 1995, - "ref-by-count": 4193, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060811945", - "attributes": { - "title": "Optimal Quantum Measurements for Phase Estimation", - "doi": "10.1103/physrevlett.75.2944", - "nodeyear": 1995, - "ref-by-count": 182, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1029418627", - "attributes": { - "title": "Observation of Bose-Einstein Condensation in a Dilute Atomic Vapor", - "doi": "10.1126/science.269.5221.198", - "nodeyear": 1995, - "ref-by-count": 5362, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1044810744", - "attributes": { - "title": "Description of octupole-deformed nuclei within the interacting boson and interacting boson-fermion models", - "doi": "10.1016/0375-9474(94)00794-n", - "nodeyear": 1995, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060810423", - "attributes": { - "title": "Closed Orbit Bifurcations in Continuum Stark Spectra", - "doi": "10.1103/physrevlett.74.1538", - "nodeyear": 1995, - "ref-by-count": 65, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1041883040", - "attributes": { - "title": "Collective atomic recoil laser (CARL) optical gain without inversion by collective atomic recoil and self-bunching of two-level atoms", - "doi": "10.1016/0168-9002(94)90382-4", - "nodeyear": 1994, - "ref-by-count": 151, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060807702", - "attributes": { - "title": "Universal anharmonic vibrator description of nuclei and critical nuclear phase transitions", - "doi": "10.1103/physrevlett.71.227", - "nodeyear": 1993, - "ref-by-count": 98, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060808347", - "attributes": { - "title": "Diagrammatic approach to Anderson localization in the quantum kicked rotator", - "doi": "10.1103/physrevlett.71.69", - "nodeyear": 1993, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060487206", - "attributes": { - "title": "Quantum projection noise: Population fluctuations in two-level systems", - "doi": "10.1103/physreva.47.3554", - "nodeyear": 1993, - "ref-by-count": 402, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1051363735", - "attributes": { - "title": "Chaotic properties of the interacting boson model", - "doi": "10.1016/0375-9474(93)90237-r", - "nodeyear": 1993, - "ref-by-count": 62, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1007846341", - "attributes": { - "title": "Variety of shapes in the mercury and lead isotopes", - "doi": "10.1016/0370-2693(93)90107-s", - "nodeyear": 1993, - "ref-by-count": 140, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060805434", - "attributes": { - "title": "Symmetry breaking and localization in quantum chaotic systems", - "doi": "10.1103/physrevlett.69.217", - "nodeyear": 1992, - "ref-by-count": 48, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060839251", - "attributes": { - "title": "Consistent interpretations of quantum mechanics", - "doi": "10.1103/revmodphys.64.339", - "nodeyear": 1992, - "ref-by-count": 450, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1039153009", - "attributes": { - "title": "Static multipole deformations in nuclei", - "doi": "10.1016/0146-6410(92)90029-2", - "nodeyear": 1992, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060803970", - "attributes": { - "title": "Chaotic properties of the interacting-boson model: A discovery of a new regular region", - "doi": "10.1103/physrevlett.67.816", - "nodeyear": 1991, - "ref-by-count": 83, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060483159", - "attributes": { - "title": "Transitional regions of finite Fermi systems and quantum chaos", - "doi": "10.1103/physreva.43.4159", - "nodeyear": 1991, - "ref-by-count": 59, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060665563", - "attributes": { - "title": "Angular momentum projection in geometric interpretation of the interacting boson model", - "doi": "10.1103/physrevc.42.2023", - "nodeyear": 1990, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060665491", - "attributes": { - "title": "Model of a superconducting phase transition", - "doi": "10.1103/physrevc.42.1422", - "nodeyear": 1990, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060665292", - "attributes": { - "title": "Systematics of nuclear ground state properties in Sr78\u2013100 by laser spectroscopy", - "doi": "10.1103/physrevc.41.2883", - "nodeyear": 1990, - "ref-by-count": 135, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060480033", - "attributes": { - "title": "Quantum dynamics of the nonlinear rotator and the effects of continual spin measurement", - "doi": "10.1103/physreva.40.2417", - "nodeyear": 1989, - "ref-by-count": 147, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1062928725", - "attributes": { - "title": "MICROSCOPIC SELF-CONSISTENT AND COLLECTIVE MODEL DESCRIPTION OF LOW-ENERGY NUCLEAR STRUCTURE", - "doi": "10.1142/s0217751x89000844", - "nodeyear": 1989, - "ref-by-count": 20, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060663748", - "attributes": { - "title": "Geometrical structure and critical phenomena in the fermion dynamical symmetry model: Sp(6)", - "doi": "10.1103/physrevc.38.1475", - "nodeyear": 1988, - "ref-by-count": 23, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1013762487", - "attributes": { - "title": "Principal squeezing of vacuum fluctuations", - "doi": "10.1016/0030-4018(88)90322-7", - "nodeyear": 1988, - "ref-by-count": 90, - "is_input_DOI": false, - "category_for": "09:0.33;10:0.33;02:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1001844408", - "attributes": { - "title": "Octupole vibrations in nuclei", - "doi": "10.1088/0034-4885/51/4/002", - "nodeyear": 1988, - "ref-by-count": 76, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060663352", - "attributes": { - "title": "Geometrical structure and critical phenomena in the fermion dynamical symmetry model: SO(8)", - "doi": "10.1103/physrevc.37.1281", - "nodeyear": 1988, - "ref-by-count": 27, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1058105068", - "attributes": { - "title": "Dynamic structure and embedded representation in physics: The group theory of the adiabatic approximation", - "doi": "10.1063/1.528049", - "nodeyear": 1988, - "ref-by-count": 57, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1016574452", - "attributes": { - "title": "1N expansion in the interacting boson model", - "doi": "10.1016/0003-4916(88)90117-0", - "nodeyear": 1988, - "ref-by-count": 63, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1004661064", - "attributes": { - "title": "Interacting boson model of collective octupole states (I). The rotational limit", - "doi": "10.1016/0375-9474(87)90220-x", - "nodeyear": 1987, - "ref-by-count": 99, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1098678954", - "attributes": { - "title": "The Interacting Boson Model", - "doi": "10.1017/cbo9780511895517", - "nodeyear": 1987, - "ref-by-count": 1832, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1060662710", - "attributes": { - "title": "Deriving an interacting boson model from the fermion SO(8) model", - "doi": "10.1103/physrevc.35.1517", - "nodeyear": 1987, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060795354", - "attributes": { - "title": "Valence p-n interactions and the development of collectivity in heavy nuclei", - "doi": "10.1103/physrevlett.58.658", - "nodeyear": 1987, - "ref-by-count": 162, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060794360", - "attributes": { - "title": "Oscillatory exchange of atoms between traps containing Bose condensates", - "doi": "10.1103/physrevlett.57.3164", - "nodeyear": 1986, - "ref-by-count": 199, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060475224", - "attributes": { - "title": "Number-phase minimum-uncertainty state with reduced number uncertainty in a Kerr nonlinear interferometer", - "doi": "10.1103/physreva.34.3974", - "nodeyear": 1986, - "ref-by-count": 339, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1025880473", - "attributes": { - "title": "A soluble \u03b3-unstable hamiltonian", - "doi": "10.1016/0370-2693(86)90362-x", - "nodeyear": 1986, - "ref-by-count": 66, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1002683374", - "attributes": { - "title": "The moment of inertia in the interacting boson model", - "doi": "10.1016/0375-9474(86)90505-1", - "nodeyear": 1986, - "ref-by-count": 34, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1005219864", - "attributes": { - "title": "Generalized Coherent States and Their Applications", - "doi": "10.1007/978-3-642-61629-7", - "nodeyear": 1986, - "ref-by-count": 1882, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1036861449", - "attributes": { - "title": "Validity of the self-consistent cranking approximation in the SU(3)-U(5) phase transition", - "doi": "10.1016/0370-2693(85)90906-2", - "nodeyear": 1985, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:0.60;01:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1046892149", - "attributes": { - "title": "Quartic anharmonicity and angular momentum effects in even-even spherical nuclei", - "doi": "10.1016/0375-9474(85)90428-2", - "nodeyear": 1985, - "ref-by-count": 32, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1018590889", - "attributes": { - "title": "A shell-model interpretation of intruder states and the onset of deformation in even-even nuclei", - "doi": "10.1016/0370-2693(85)91575-8", - "nodeyear": 1985, - "ref-by-count": 121, - "is_input_DOI": false, - "category_for": "02:0.60;01:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1060661648", - "attributes": { - "title": "Phase ambiguities in the O(6) limit of the interacting boson model", - "doi": "10.1103/physrevc.31.671", - "nodeyear": 1985, - "ref-by-count": 33, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060790516", - "attributes": { - "title": "Bound-State Eigenfunctions of Classically Chaotic Hamiltonian Systems: Scars of Periodic Orbits", - "doi": "10.1103/physrevlett.53.1515", - "nodeyear": 1984, - "ref-by-count": 1130, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1038414711", - "attributes": { - "title": "Calculations away from SU(3) symmetry by cranking the interacting boson model", - "doi": "10.1016/0370-2693(84)91463-1", - "nodeyear": 1984, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1027544400", - "attributes": { - "title": "Transition to deformed shapes as a nuclear Jahn-Teller effect", - "doi": "10.1016/0375-9474(84)90437-8", - "nodeyear": 1984, - "ref-by-count": 93, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060534420", - "attributes": { - "title": "Localization in a d-dimensional incommensurate structure", - "doi": "10.1103/physrevb.29.4272", - "nodeyear": 1984, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1047967799", - "attributes": { - "title": "Cranked Hartree approximation for systems with many interacting bosons", - "doi": "10.1016/0370-2693(83)91024-9", - "nodeyear": 1983, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060659837", - "attributes": { - "title": "Muonic x-ray measurement of the monopole and quadrupole charge parameters of Gd154-158,160", - "doi": "10.1103/physrevc.27.1772", - "nodeyear": 1983, - "ref-by-count": 33, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060788070", - "attributes": { - "title": "Localization in an Incommensurate Potential: An Exactly Solvable Model", - "doi": "10.1103/physrevlett.49.833", - "nodeyear": 1982, - "ref-by-count": 215, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1038336282", - "attributes": { - "title": "Simulating physics with computers", - "doi": "10.1007/bf02650179", - "nodeyear": 1982, - "ref-by-count": 3692, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1016849900", - "attributes": { - "title": "Quantitative description of configuration mixing in the interacting boson model", - "doi": "10.1016/0375-9474(82)90061-6", - "nodeyear": 1982, - "ref-by-count": 122, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1040675567", - "attributes": { - "title": "Catastrophe theory in physics", - "doi": "10.1088/0034-4885/45/2/002", - "nodeyear": 1982, - "ref-by-count": 56, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060659368", - "attributes": { - "title": "Interpretation of the A\u2248100 transitional region in the framework of the interacting boson model", - "doi": "10.1103/physrevc.25.650", - "nodeyear": 1982, - "ref-by-count": 119, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060659366", - "attributes": { - "title": "Phenomenological analysis of the interacting boson model", - "doi": "10.1103/physrevc.25.614", - "nodeyear": 1982, - "ref-by-count": 61, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1020356915", - "attributes": { - "title": "Enhanced sensitivity of a gravitational wave detector", - "doi": "10.1016/0375-9601(81)90238-3", - "nodeyear": 1981, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060688638", - "attributes": { - "title": "Quantum-mechanical noise in an interferometer", - "doi": "10.1103/physrevd.23.1693", - "nodeyear": 1981, - "ref-by-count": 2094, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1034371240", - "attributes": { - "title": "Configuration mixing in the interacting boson model", - "doi": "10.1016/0370-2693(81)90321-x", - "nodeyear": 1981, - "ref-by-count": 112, - "is_input_DOI": false, - "category_for": "02:0.60;01:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1060658394", - "attributes": { - "title": "Phase transitions and the geometric properties of the interacting boson model", - "doi": "10.1103/physrevc.23.1254", - "nodeyear": 1981, - "ref-by-count": 161, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1003831851", - "attributes": { - "title": "On shapes and shape phase transitions in the interacting boson model", - "doi": "10.1016/0375-9474(80)90492-3", - "nodeyear": 1980, - "ref-by-count": 149, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060784903", - "attributes": { - "title": "Relationship between the Bohr Collective Hamiltonian and the Interacting-Boson Model", - "doi": "10.1103/physrevlett.44.1744", - "nodeyear": 1980, - "ref-by-count": 349, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1058996814", - "attributes": { - "title": "Features of Nuclear Deformations Produced by the Alignment of Individual Particles or Pairs", - "doi": "10.1088/0031-8949/22/5/008", - "nodeyear": 1980, - "ref-by-count": 182, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060657707", - "attributes": { - "title": "Unified shell-model description of nuclear deformation", - "doi": "10.1103/physrevc.20.820", - "nodeyear": 1979, - "ref-by-count": 253, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1030160495", - "attributes": { - "title": "Interacting boson model of collective nuclear states III. The transition from SU(5) to SU(3)", - "doi": "10.1016/0003-4916(78)90159-8", - "nodeyear": 1978, - "ref-by-count": 411, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1023527379", - "attributes": { - "title": "Boson expansions and quantization of time-dependent self-consistent fields (II). Relation between finite and infinite boson expansions", - "doi": "10.1016/0375-9474(78)90490-6", - "nodeyear": 1978, - "ref-by-count": 44, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1047765215", - "attributes": { - "title": "Interacting boson model of collective nuclear states II. The rotational limit", - "doi": "10.1016/0003-4916(78)90228-2", - "nodeyear": 1978, - "ref-by-count": 1038, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1058100372", - "attributes": { - "title": "Group theory of the collective model of the nucleus", - "doi": "10.1063/1.523352", - "nodeyear": 1977, - "ref-by-count": 110, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1030191390", - "attributes": { - "title": "Collective nuclear states as symmetric couplings of proton and neutron excitations", - "doi": "10.1016/0370-2693(77)90860-7", - "nodeyear": 1977, - "ref-by-count": 625, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060521318", - "attributes": { - "title": "Quantum critical phenomena", - "doi": "10.1103/physrevb.14.1165", - "nodeyear": 1976, - "ref-by-count": 1679, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1008049063", - "attributes": { - "title": "Interacting boson model of collective states I. The vibrational limit", - "doi": "10.1016/0003-4916(76)90097-x", - "nodeyear": 1976, - "ref-by-count": 1354, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060779406", - "attributes": { - "title": "Collective Nuclear States as Representations of a SU(6) Group", - "doi": "10.1103/physrevlett.35.1069", - "nodeyear": 1975, - "ref-by-count": 851, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060465244", - "attributes": { - "title": "Classical-quantum correspondence for multilevel systems", - "doi": "10.1103/physreva.12.1019", - "nodeyear": 1975, - "ref-by-count": 133, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1006517975", - "attributes": { - "title": "Collective Hamiltonian derived from the pairing-plus-quadrupole model Modification and application to the transitional nuclei, 150, 152Sm\u2020\u2020Work supported in part by US National Science Foundation (contract no GP-34634) and by NORDITA", - "doi": "10.1016/0375-9474(74)90518-1", - "nodeyear": 1974, - "ref-by-count": 127, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1050463690", - "attributes": { - "title": "An algebraic treatment of the nuclear quadrupole degree of freedom", - "doi": "10.1016/0375-9474(74)90165-1", - "nodeyear": 1974, - "ref-by-count": 221, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1022248405", - "attributes": { - "title": "Geometry of symmetrized states", - "doi": "10.1016/0003-4916(72)90147-9", - "nodeyear": 1972, - "ref-by-count": 260, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060774884", - "attributes": { - "title": "Strongly Excited 0+ States Observed in (p, t) Reactions on Gadolinium Nuclei", - "doi": "10.1103/physrevlett.27.1235", - "nodeyear": 1971, - "ref-by-count": 49, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060773820", - "attributes": { - "title": "Can a Solid Be \"Superfluid\"?", - "doi": "10.1103/physrevlett.25.1543", - "nodeyear": 1970, - "ref-by-count": 560, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060467976", - "attributes": { - "title": "Speculations on Bose-Einstein Condensation and Quantum Crystals", - "doi": "10.1103/physreva.2.256", - "nodeyear": 1970, - "ref-by-count": 469, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1014048276", - "attributes": { - "title": "Low-lying octupole states of the doubly even deformed nuclei with 152 \u2266 A \u2266 190", - "doi": "10.1016/0375-9474(70)90309-x", - "nodeyear": 1970, - "ref-by-count": 225, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1010219741", - "attributes": { - "title": "A new treatment of the collective nuclear hamiltonian", - "doi": "10.1016/0370-2693(69)90469-9", - "nodeyear": 1969, - "ref-by-count": 104, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1044085245", - "attributes": { - "title": "On irreducible tensors of O5+", - "doi": "10.1016/0375-9474(68)90317-5", - "nodeyear": 1968, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060433897", - "attributes": { - "title": "(p,t) Reaction on the Isotopes of Sm and Nd, N=88 and 90", - "doi": "10.1103/physrev.151.1000", - "nodeyear": 1966, - "ref-by-count": 61, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1006382259", - "attributes": { - "title": "The (t, p) reaction with the even isotopes of Sm", - "doi": "10.1016/0029-5582(66)90297-5", - "nodeyear": 1966, - "ref-by-count": 187, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1061435768", - "attributes": { - "title": "Comparison of quantum and semiclassical radiation theories with application to the beam maser", - "doi": "10.1109/proc.1963.1664", - "nodeyear": 1963, - "ref-by-count": 3927, - "is_input_DOI": false, - "category_for": "09:0.60;08:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1050017917", - "attributes": { - "title": "Possible new effects in superconductive tunnelling", - "doi": "10.1016/0031-9163(62)91369-0", - "nodeyear": 1962, - "ref-by-count": 2878, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1003288694", - "attributes": { - "title": "Vibrational states of nuclei in the random phase approximation", - "doi": "10.1016/0029-5582(61)90364-9", - "nodeyear": 1961, - "ref-by-count": 539, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1000009137", - "attributes": { - "title": "Stability conditions and nuclear rotations in the Hartree-Fock theory", - "doi": "10.1016/0029-5582(60)90048-1", - "nodeyear": 1960, - "ref-by-count": 690, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060460944", - "attributes": { - "title": "Isotope Shift Anomalies and Nuclear Structure", - "doi": "10.1103/physrev.91.1488", - "nodeyear": 1953, - "ref-by-count": 81, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060459525", - "attributes": { - "title": "Statistical Theory of Equations of State and Phase Transitions. I. Theory of Condensation", - "doi": "10.1103/physrev.87.404", - "nodeyear": 1952, - "ref-by-count": 1506, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1050237123", - "attributes": { - "title": "Modellm\u00e4\u00dfige Deutung der ausgezeichneten Nukleonenzahlen im Kernbau", - "doi": "10.1007/bf01333077", - "nodeyear": 1950, - "ref-by-count": 145, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1000173117", - "attributes": { - "title": "Stability of polyatomic molecules in degenerate electronic states - I\u2014Orbital degeneracy", - "doi": "10.1098/rspa.1937.0142", - "nodeyear": 1937, - "ref-by-count": 2648, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1004415602", - "attributes": { - "title": "Eigenfunctions for calculating electronic vibrational intensities", - "doi": "10.1098/rspa.1932.0045", - "nodeyear": 1932, - "ref-by-count": 96, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1027226374", - "attributes": { - "title": "Beitrag zur Theorie des Ferromagnetismus", - "doi": "10.1007/bf02980577", - "nodeyear": 1925, - "ref-by-count": 2265, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1060677183", - "attributes": { - "title": "High-precision Penning-trap mass measurements of heavy xenon isotopes for nuclear structure studies", - "doi": "10.1103/physrevc.80.044323", - "nodeyear": 2009, - "ref-by-count": 23, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060677128", - "attributes": { - "title": "X(5)* model and the N=90 nuclei", - "doi": "10.1103/physrevc.80.034308", - "nodeyear": 2009, - "ref-by-count": 21, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060755819", - "attributes": { - "title": "New Features of Shape Coexistence in Sm152", - "doi": "10.1103/physrevlett.103.062501", - "nodeyear": 2009, - "ref-by-count": 50, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060677048", - "attributes": { - "title": "Transition from \u03b3-rigid to \u03b3-soft dynamics in the interacting boson model: Quasicriticality and quasidynamical symmetry", - "doi": "10.1103/physrevc.80.014319", - "nodeyear": 2009, - "ref-by-count": 21, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060677032", - "attributes": { - "title": "Unified framework for understanding pair transfer between collective states in atomic nuclei", - "doi": "10.1103/physrevc.80.011303", - "nodeyear": 2009, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1011163444", - "attributes": { - "title": "Quantum chaos in the nuclear collective model. II. Peres lattices", - "doi": "10.1103/physreve.79.066201", - "nodeyear": 2009, - "ref-by-count": 26, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1040915357", - "attributes": { - "title": "Direct Detection of Abortive RNA Transcripts in Vivo", - "doi": "10.1126/science.1169237", - "nodeyear": 2009, - "ref-by-count": 86, - "is_input_DOI": false, - "category_for": "06:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1021427310", - "attributes": { - "title": "Scanning Tunneling Spectroscopy of Graphene on Graphite", - "doi": "10.1103/physrevlett.102.176804", - "nodeyear": 2009, - "ref-by-count": 396, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060755003", - "attributes": { - "title": "Discovery of Rn229 and the Structure of the Heaviest Rn and Ra Isotopes from Penning-Trap Mass Measurements", - "doi": "10.1103/physrevlett.102.112501", - "nodeyear": 2009, - "ref-by-count": 57, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1033456373", - "attributes": { - "title": "Criticality in the configuration-mixed interacting boson model: (2) Q\u02c6(\u03c71)Q\u02c6(\u03c71)\u2013Q\u02c6(\u03c72)Q\u02c6(\u03c72) mixing", - "doi": "10.1016/j.nuclphysa.2009.01.002", - "nodeyear": 2009, - "ref-by-count": 6, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1000374332", - "attributes": { - "title": "Decoherence, entanglement and irreversibility in quantum dynamical systems with few degrees of freedom", - "doi": "10.1080/00018730902831009", - "nodeyear": 2009, - "ref-by-count": 131, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1050408744", - "attributes": { - "title": "The electronic properties of graphene", - "doi": "10.1103/revmodphys.81.109", - "nodeyear": 2009, - "ref-by-count": 17809, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1025036962", - "attributes": { - "title": "Random matrices and chaos in nuclear physics: Nuclear structure", - "doi": "10.1103/revmodphys.81.539", - "nodeyear": 2009, - "ref-by-count": 224, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1040491531", - "attributes": { - "title": "Large Area, Few-Layer Graphene Films on Arbitrary Substrates by Chemical Vapor Deposition", - "doi": "10.1021/nl801827v", - "nodeyear": 2008, - "ref-by-count": 4724, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1036884583", - "attributes": { - "title": "Kohn-Luttinger superconductivity in graphene", - "doi": "10.1103/physrevb.78.205431", - "nodeyear": 2008, - "ref-by-count": 114, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1031460804", - "attributes": { - "title": "Entanglement and the generation of random states in the quantum chaotic dynamics of kicked coupled tops", - "doi": "10.1103/physreve.78.046211", - "nodeyear": 2008, - "ref-by-count": 35, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1029576577", - "attributes": { - "title": "Chaos, entanglement, and decoherence in the quantum kicked top", - "doi": "10.1103/physreva.78.042318", - "nodeyear": 2008, - "ref-by-count": 45, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060754142", - "attributes": { - "title": "Mean-Field Derivation of the Interacting Boson Model Hamiltonian and Exotic Nuclei", - "doi": "10.1103/physrevlett.101.142501", - "nodeyear": 2008, - "ref-by-count": 82, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060676303", - "attributes": { - "title": "Evolution of nuclear shapes in medium mass isotopes from a microscopic perspective", - "doi": "10.1103/physrevc.78.034314", - "nodeyear": 2008, - "ref-by-count": 62, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060676255", - "attributes": { - "title": "Shape coexistence and phase transitions in the platinum isotopes", - "doi": "10.1103/physrevc.78.024303", - "nodeyear": 2008, - "ref-by-count": 38, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1007530657", - "attributes": { - "title": "Quantum control of the hyperfine-coupled electron and nuclear spins in alkali-metal atoms", - "doi": "10.1103/physreva.78.023404", - "nodeyear": 2008, - "ref-by-count": 29, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1040606030", - "attributes": { - "title": "Approaching ballistic transport in suspended graphene", - "doi": "10.1038/nnano.2008.199", - "nodeyear": 2008, - "ref-by-count": 2437, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060676176", - "attributes": { - "title": "Spin dependence of critical point behavior for first and second order phase transitions in nuclei", - "doi": "10.1103/physrevc.77.061302", - "nodeyear": 2008, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1036352091", - "attributes": { - "title": "Search for intrinsic collective excitations in Sm152", - "doi": "10.1103/physrevc.77.061301", - "nodeyear": 2008, - "ref-by-count": 48, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1034642959", - "attributes": { - "title": "Ultrahigh electron mobility in suspended graphene", - "doi": "10.1016/j.ssc.2008.02.024", - "nodeyear": 2008, - "ref-by-count": 5837, - "is_input_DOI": false, - "category_for": "10:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1011664403", - "attributes": { - "title": "Multiparticle entanglement in the Lipkin-Meshkov-Glick model", - "doi": "10.1103/physreva.77.052105", - "nodeyear": 2008, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1047220917", - "attributes": { - "title": "A beyond mean field analysis of the shape transition in the Neodymium isotopes", - "doi": "10.1016/j.physletb.2008.03.061", - "nodeyear": 2008, - "ref-by-count": 36, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1050919469", - "attributes": { - "title": "Description of nuclear octupole and quadrupole deformation close to axial symmetry: Critical-point behavior of Ra224 and Th224", - "doi": "10.1103/physrevc.77.024320", - "nodeyear": 2008, - "ref-by-count": 33, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1025719832", - "attributes": { - "title": "Decoherence induced by a dynamic spin environment: The universal regime", - "doi": "10.1103/physreva.77.022317", - "nodeyear": 2008, - "ref-by-count": 34, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1026720084", - "attributes": { - "title": "Decoherence in a two-level system coupled to a fermion environment with phase transitions", - "doi": "10.1016/j.physleta.2007.10.001", - "nodeyear": 2008, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060676000", - "attributes": { - "title": "First experimental test of X(5) critical-point symmetry in the A~130 mass region: Low-spin states and the collective structure of Ce130", - "doi": "10.1103/physrevc.77.014307", - "nodeyear": 2008, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060835107", - "attributes": { - "title": "Enhanced Decoherence in the Vicinity of a Phase Transition", - "doi": "10.1103/physrevlett.99.267202", - "nodeyear": 2007, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1036551131", - "attributes": { - "title": "Equations of motion for a spectrum-generating algebra: Lipkin\u2013Meshkov\u2013Glick model", - "doi": "10.1088/1751-8113/41/2/025208", - "nodeyear": 2007, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1021984958", - "attributes": { - "title": "Graphene Bilayer with a Twist: Electronic Structure", - "doi": "10.1103/physrevlett.99.256802", - "nodeyear": 2007, - "ref-by-count": 943, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1025059126", - "attributes": { - "title": "Biased Bilayer Graphene: Semiconductor with a Gap Tunable by the Electric Field Effect", - "doi": "10.1103/physrevlett.99.216802", - "nodeyear": 2007, - "ref-by-count": 1533, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060675924", - "attributes": { - "title": "Nuclear shape-phase diagrams", - "doi": "10.1103/physrevc.76.054304", - "nodeyear": 2007, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060622841", - "attributes": { - "title": "Time evolution and decoherence of a spin- 12 particle coupled to a spin bath in thermal equilibrium", - "doi": "10.1103/physrevb.76.174306", - "nodeyear": 2007, - "ref-by-count": 40, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1028482838", - "attributes": { - "title": "Coulomb Analogy for Non-Hermitian Degeneracies near Quantum Phase Transitions", - "doi": "10.1103/physrevlett.99.100601", - "nodeyear": 2007, - "ref-by-count": 62, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060675760", - "attributes": { - "title": "Distinguishing a first order from a second order nuclear shape phase transition in the interacting boson model", - "doi": "10.1103/physrevc.76.011305", - "nodeyear": 2007, - "ref-by-count": 38, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1051523502", - "attributes": { - "title": "Quantum critical dynamics of a qubit coupled to an isotropic Lipkin-Meshkov-Glick bath", - "doi": "10.1103/physreva.76.012104", - "nodeyear": 2007, - "ref-by-count": 29, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1015971387", - "attributes": { - "title": "Chaos and complexity of quantum motion", - "doi": "10.1088/1751-8113/40/28/s02", - "nodeyear": 2007, - "ref-by-count": 46, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060675734", - "attributes": { - "title": "Classical and quantum properties of the semiregular arc inside the Casten triangle", - "doi": "10.1103/physrevc.75.064318", - "nodeyear": 2007, - "ref-by-count": 32, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1016958841", - "attributes": { - "title": "Decoherence induced by interacting quantum spin baths", - "doi": "10.1103/physreva.75.032333", - "nodeyear": 2007, - "ref-by-count": 163, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1007119461", - "attributes": { - "title": "Universal decoherence induced by an environmental quantum phase transition", - "doi": "10.1103/physreva.75.032337", - "nodeyear": 2007, - "ref-by-count": 79, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1052791836", - "attributes": { - "title": "The rise of graphene", - "doi": "10.1038/nmat1849", - "nodeyear": 2007, - "ref-by-count": 30719, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1031717969", - "attributes": { - "title": "Critical-Point Symmetries in Boson-Fermion Systems: The Case of Shape Transitions in Odd Nuclei in a Multiorbit Model", - "doi": "10.1103/physrevlett.98.052501", - "nodeyear": 2007, - "ref-by-count": 46, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1045387337", - "attributes": { - "title": "Loschmidt echo and Berry phase of a quantum system coupled to an XY spin chain: Proximity to a quantum phase transition", - "doi": "10.1103/physreva.75.012102", - "nodeyear": 2007, - "ref-by-count": 75, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1017238694", - "attributes": { - "title": "Unconventional quantum phase transition in the finite-size Lipkin\u2013Meshkov\u2013Glick model", - "doi": "10.1088/1367-2630/8/12/297", - "nodeyear": 2006, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1029635336", - "attributes": { - "title": "Entanglement Entropy beyond the Free Case", - "doi": "10.1103/physrevlett.97.220402", - "nodeyear": 2006, - "ref-by-count": 77, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060618645", - "attributes": { - "title": "Classical and quantum phase transitions in the Lipkin-Meshkov-Glick model", - "doi": "10.1103/physrevb.74.104118", - "nodeyear": 2006, - "ref-by-count": 61, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060675402", - "attributes": { - "title": "One-particle spectroscopic intensities as a signature of shape phase transition: The \u03b3-unstable case", - "doi": "10.1103/physrevc.74.027301", - "nodeyear": 2006, - "ref-by-count": 7, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1011784856", - "attributes": { - "title": "On the thermodynamic limit of the Lipkin model", - "doi": "10.1088/0305-4470/39/32/s10", - "nodeyear": 2006, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1057848388", - "attributes": { - "title": "Study of the validity of the phase-integral connection formula for potential barriers of arbitrary thickness", - "doi": "10.1063/1.2218979", - "nodeyear": 2006, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060675321", - "attributes": { - "title": "Phase transitions in configuration mixed models", - "doi": "10.1103/physrevc.73.061302", - "nodeyear": 2006, - "ref-by-count": 29, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060675290", - "attributes": { - "title": "First test of the E(5/4) Bose-Fermi symmetry: The structure of Ba135", - "doi": "10.1103/physrevc.73.051301", - "nodeyear": 2006, - "ref-by-count": 34, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042764696", - "attributes": { - "title": "Decay of Loschmidt Echo Enhanced by Quantum Criticality", - "doi": "10.1103/physrevlett.96.140604", - "nodeyear": 2006, - "ref-by-count": 520, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1011254661", - "attributes": { - "title": "Tensor polarizability and dispersive quantum measurement of multilevel atoms", - "doi": "10.1103/physreva.73.042112", - "nodeyear": 2006, - "ref-by-count": 65, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060502016", - "attributes": { - "title": "Control of inhomogeneous quantum ensembles", - "doi": "10.1103/physreva.73.030302", - "nodeyear": 2006, - "ref-by-count": 146, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1018025921", - "attributes": { - "title": "Shape transitions far from stability: The nucleus 58Cr", - "doi": "10.1016/j.physletb.2005.12.047", - "nodeyear": 2006, - "ref-by-count": 49, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1025311961", - "attributes": { - "title": "Lie Algebras and Applications", - "doi": "10.1007/3-540-36239-8", - "nodeyear": 2006, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1011010598", - "attributes": { - "title": "Characterization of Complex Quantum Dynamics with a Scalable NMR Information Processor", - "doi": "10.1103/physrevlett.95.250502", - "nodeyear": 2005, - "ref-by-count": 27, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042077732", - "attributes": { - "title": "Phase transitions in the interacting boson fermion model: The \u03b3-unstable case", - "doi": "10.1103/physrevc.72.061302", - "nodeyear": 2005, - "ref-by-count": 37, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1030368423", - "attributes": { - "title": "Continuous unitary transformations in two-level boson systems", - "doi": "10.1103/physrevc.72.064332", - "nodeyear": 2005, - "ref-by-count": 38, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1003660203", - "attributes": { - "title": "A review and outlook for an anomaly of scanning tunnelling microscopy (STM): superlattices on graphite", - "doi": "10.1088/0022-3727/38/21/r01", - "nodeyear": 2005, - "ref-by-count": 135, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1013665499", - "attributes": { - "title": "Test of the critical point symmetry X(5) in the mass A = 180 region", - "doi": "10.1088/0954-3899/31/10/008", - "nodeyear": 2005, - "ref-by-count": 32, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1000398384", - "attributes": { - "title": "\u03b24 potential at the U(5)\u2013O(6) critical point of the interacting boson model", - "doi": "10.1103/physrevc.72.037301", - "nodeyear": 2005, - "ref-by-count": 30, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1039984053", - "attributes": { - "title": "Quantum phase transitions in the U(5)\u2013O(6) large-N limit", - "doi": "10.1088/0954-3899/31/9/006", - "nodeyear": 2005, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060501368", - "attributes": { - "title": "Many-particle entanglement in the gaped antiferromagnetic Lipkin model", - "doi": "10.1103/physreva.72.022326", - "nodeyear": 2005, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1030114288", - "attributes": { - "title": "Quantum State Reconstruction via Continuous Measurement", - "doi": "10.1103/physrevlett.95.030402", - "nodeyear": 2005, - "ref-by-count": 49, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1043779481", - "attributes": { - "title": "Finite-size scaling exponents in the interacting boson model", - "doi": "10.1103/physrevc.72.011301", - "nodeyear": 2005, - "ref-by-count": 31, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1005494539", - "attributes": { - "title": "Elusive magic numbers", - "doi": "10.1038/435897a", - "nodeyear": 2005, - "ref-by-count": 34, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1053319957", - "attributes": { - "title": "STS Observations of Landau Levels at Graphite Surfaces", - "doi": "10.1103/physrevlett.94.226403", - "nodeyear": 2005, - "ref-by-count": 122, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060674905", - "attributes": { - "title": "Simple interpretation of shape evolution in Pt isotopes without intruder states", - "doi": "10.1103/physrevc.71.061301", - "nodeyear": 2005, - "ref-by-count": 57, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1051277230", - "attributes": { - "title": "Finite-size scaling exponents and entanglement in the two-level BCS model", - "doi": "10.1103/physreva.71.060304", - "nodeyear": 2005, - "ref-by-count": 30, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1040003395", - "attributes": { - "title": "Entanglement entropy in the Lipkin-Meshkov-Glick model", - "doi": "10.1103/physreva.71.064101", - "nodeyear": 2005, - "ref-by-count": 131, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060830365", - "attributes": { - "title": "Suppression of Spin Projection Noise in Broadband Atomic Magnetometry", - "doi": "10.1103/physrevlett.94.203002", - "nodeyear": 2005, - "ref-by-count": 46, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1018540897", - "attributes": { - "title": "Criteria for exact qudit universality", - "doi": "10.1103/physreva.71.052318", - "nodeyear": 2005, - "ref-by-count": 48, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1037993747", - "attributes": { - "title": "The use of CAAARS (Computer Aided Assignment of Asymmetric Rotor Spectra) in the analysis of rotational spectra", - "doi": "10.1016/j.molstruc.2005.01.054", - "nodeyear": 2005, - "ref-by-count": 30, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060674827", - "attributes": { - "title": "Identification of a pairing isomeric band in Sm152", - "doi": "10.1103/physrevc.71.041303", - "nodeyear": 2005, - "ref-by-count": 32, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059079470", - "attributes": { - "title": "The large N behaviour of the Lipkin model and exceptional points", - "doi": "10.1088/0305-4470/38/9/002", - "nodeyear": 2005, - "ref-by-count": 40, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1013466532", - "attributes": { - "title": "Exactly-solvable models derived from a generalized Gaudin algebra", - "doi": "10.1016/j.nuclphysb.2004.11.008", - "nodeyear": 2005, - "ref-by-count": 138, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1051459978", - "attributes": { - "title": "Thermodynamic analogy for quantum phase transitions at zero temperature", - "doi": "10.1103/physrevc.71.011304", - "nodeyear": 2005, - "ref-by-count": 36, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1035159109", - "attributes": { - "title": "How generic scale invariance influences quantum and classical phase transitions", - "doi": "10.1103/revmodphys.77.579", - "nodeyear": 2005, - "ref-by-count": 218, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1031172370", - "attributes": { - "title": "The shell model as a unified view of nuclear structure", - "doi": "10.1103/revmodphys.77.427", - "nodeyear": 2005, - "ref-by-count": 842, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1036176655", - "attributes": { - "title": "Non-perturbative flow equations from continuous unitary transformations", - "doi": "10.1088/0305-4470/38/1/015", - "nodeyear": 2004, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1047948630", - "attributes": { - "title": "Description of nuclear octupole and quadrupole deformation close to the axial symmetry and phase transitions in the octupole mode", - "doi": "10.1103/physrevc.70.064319", - "nodeyear": 2004, - "ref-by-count": 38, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019645844", - "attributes": { - "title": "Finite-Size Scaling Exponents of the Lipkin-Meshkov-Glick Model", - "doi": "10.1103/physrevlett.93.237204", - "nodeyear": 2004, - "ref-by-count": 181, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1005427122", - "attributes": { - "title": "Entanglement dynamics in the Lipkin-Meshkov-Glick model", - "doi": "10.1103/physreva.70.062304", - "nodeyear": 2004, - "ref-by-count": 110, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1050860986", - "attributes": { - "title": "The millimeter- and submillimeter-wave spectrum of the trans\u2013gauche conformer of diethyl ether", - "doi": "10.1016/j.jms.2004.06.011", - "nodeyear": 2004, - "ref-by-count": 75, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1040632454", - "attributes": { - "title": "Phase Diagram of the Proton-Neutron Interacting Boson Model", - "doi": "10.1103/physrevlett.93.212501", - "nodeyear": 2004, - "ref-by-count": 43, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1044880480", - "attributes": { - "title": "Phase transitions and quasidynamical symmetry in nuclear collective models: I. The U(5) to O(6) phase transition in the IBM", - "doi": "10.1016/j.nuclphysa.2004.09.007", - "nodeyear": 2004, - "ref-by-count": 95, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019008412", - "attributes": { - "title": "Electric Field Effect in Atomically Thin Carbon Films", - "doi": "10.1126/science.1102896", - "nodeyear": 2004, - "ref-by-count": 46759, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1039417623", - "attributes": { - "title": "Quantum Information Processing with Trapped Neutral Atoms", - "doi": "10.1007/s11128-004-9418-2", - "nodeyear": 2004, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1010220572", - "attributes": { - "title": "Physics of Nonhermitian Degeneracies", - "doi": "10.1023/b:cjop.0000044002.05657.04", - "nodeyear": 2004, - "ref-by-count": 443, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1047753851", - "attributes": { - "title": "Quasidynamical Symmetry in an Interacting Boson Model Phase Transition", - "doi": "10.1103/physrevlett.93.122502", - "nodeyear": 2004, - "ref-by-count": 80, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060674558", - "attributes": { - "title": "Shape phase transitions in odd-mass nuclei using a supersymmetric approach", - "doi": "10.1103/physrevc.70.011305", - "nodeyear": 2004, - "ref-by-count": 36, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060674557", - "attributes": { - "title": "Evolution of the \u201c\u03b2 excitation\u201d in axially symmetric transitional nuclei", - "doi": "10.1103/physrevc.70.011304", - "nodeyear": 2004, - "ref-by-count": 104, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060674213", - "attributes": { - "title": "Mapping the interacting boson approximation symmetry triangle: New trajectories of structural evolution of rare-earth nuclei", - "doi": "10.1103/physrevc.69.064306", - "nodeyear": 2004, - "ref-by-count": 80, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1015937057", - "attributes": { - "title": "Entanglement in a first-order quantum phase transition", - "doi": "10.1103/physreva.69.054101", - "nodeyear": 2004, - "ref-by-count": 128, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019411784", - "attributes": { - "title": "Z(5): critical point symmetry for the prolate to oblate nuclear shape phase transition", - "doi": "10.1016/j.physletb.2004.03.029", - "nodeyear": 2004, - "ref-by-count": 129, - "is_input_DOI": false, - "category_for": "02:0.60;01:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1011087398", - "attributes": { - "title": "A computationally tractable version of the collective model", - "doi": "10.1016/j.nuclphysa.2004.02.018", - "nodeyear": 2004, - "ref-by-count": 79, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1011902185", - "attributes": { - "title": "Consequences of wall stiffness for a \u03b2-soft potential", - "doi": "10.1103/physrevc.69.044307", - "nodeyear": 2004, - "ref-by-count": 49, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1008243844", - "attributes": { - "title": "Sequence of potentials interpolating between the U(5) and E(5) symmetries", - "doi": "10.1103/physrevc.69.044316", - "nodeyear": 2004, - "ref-by-count": 64, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1062449295", - "attributes": { - "title": "Quantum Optimally Controlled Transition Landscapes", - "doi": "10.1126/science.1093649", - "nodeyear": 2004, - "ref-by-count": 324, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060828109", - "attributes": { - "title": "Superlubricity of Graphite", - "doi": "10.1103/physrevlett.92.126101", - "nodeyear": 2004, - "ref-by-count": 953, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1020621092", - "attributes": { - "title": "New analytic solutions of the collective Bohr Hamiltonian for a \u03b2-soft, \u03b3-soft axial rotor", - "doi": "10.1088/0954-3899/30/5/006", - "nodeyear": 2004, - "ref-by-count": 57, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060674109", - "attributes": { - "title": "Transition probabilities in Gd 154 : Evidence for X(5) critical point symmetry", - "doi": "10.1103/physrevc.69.034334", - "nodeyear": 2004, - "ref-by-count": 118, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060499774", - "attributes": { - "title": "Global bending quantum number and the absence of monodromy in the HCN\u2194CNH molecule", - "doi": "10.1103/physreva.69.032504", - "nodeyear": 2004, - "ref-by-count": 46, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042098123", - "attributes": { - "title": "Quasiparticle Spectra, Charge-Density Waves, Superconductivity, and Electron-Phonon Coupling in 2H-NbSe2", - "doi": "10.1103/physrevlett.92.086401", - "nodeyear": 2004, - "ref-by-count": 138, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060674024", - "attributes": { - "title": "Extended Holstein-Primakoff mapping for the next-to-leading order of the 1\u2215N expansion at finite temperature", - "doi": "10.1103/physrevc.69.014318", - "nodeyear": 2004, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042532118", - "attributes": { - "title": "Decoherence, the measurement problem, and interpretations of quantum mechanics", - "doi": "10.1103/revmodphys.76.1267", - "nodeyear": 2004, - "ref-by-count": 703, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1008553636", - "attributes": { - "title": "NMR techniques for quantum control and computation", - "doi": "10.1103/revmodphys.76.1037", - "nodeyear": 2004, - "ref-by-count": 746, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1045744782", - "attributes": { - "title": "Universal quantum control in irreducible state-space sectors: Application to bosonic and spin-boson systems", - "doi": "10.1103/physreva.68.062320", - "nodeyear": 2003, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019531352", - "attributes": { - "title": "The Ame2003 atomic mass evaluation (II). Tables, graphs and references", - "doi": "10.1016/j.nuclphysa.2003.11.003", - "nodeyear": 2003, - "ref-by-count": 4392, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1012593191", - "attributes": { - "title": "Quantum phase transitions", - "doi": "10.1088/0034-4885/66/12/r01", - "nodeyear": 2003, - "ref-by-count": 416, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1029543778", - "attributes": { - "title": "Simplified approach to the application of the geometric collective model", - "doi": "10.1103/physrevc.68.054303", - "nodeyear": 2003, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1007803037", - "attributes": { - "title": "Invariant correlational entropy as a signature of quantum phase transitions in nuclei", - "doi": "10.1016/j.physletb.2003.08.076", - "nodeyear": 2003, - "ref-by-count": 27, - "is_input_DOI": false, - "category_for": "02:0.60;01:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1059078521", - "attributes": { - "title": "The Lipkin model. Beyond mean field with generalized coherent states", - "doi": "10.1088/0305-4470/36/41/008", - "nodeyear": 2003, - "ref-by-count": 9, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060673895", - "attributes": { - "title": "Ground-state shape phase transitions in nuclei: Thermodynamic analogy and finite-N effects", - "doi": "10.1103/physrevc.68.034326", - "nodeyear": 2003, - "ref-by-count": 43, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060673873", - "attributes": { - "title": "Prolate-oblate phase transition in the Hf-Hg mass region", - "doi": "10.1103/physrevc.68.031301", - "nodeyear": 2003, - "ref-by-count": 77, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060827125", - "attributes": { - "title": "Nonperturbative Flow Equations from Running Expectation Values", - "doi": "10.1103/physrevlett.91.080602", - "nodeyear": 2003, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1057725655", - "attributes": { - "title": "Quantum Physics Under Control", - "doi": "10.1063/1.1611352", - "nodeyear": 2003, - "ref-by-count": 81, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060673750", - "attributes": { - "title": "B(E2) values and the search for the critical point symmetry X(5) in 104Mo and 106Mo", - "doi": "10.1103/physrevc.67.054315", - "nodeyear": 2003, - "ref-by-count": 53, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1006809789", - "attributes": { - "title": "Shape changes and test of the critical-point symmetry X(5) in N = 90 nuclei", - "doi": "10.1140/epja/i2002-10347-6", - "nodeyear": 2003, - "ref-by-count": 34, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1031817672", - "attributes": { - "title": "Echo Spectroscopy and Quantum Stability of Trapped Atoms", - "doi": "10.1103/physrevlett.90.023001", - "nodeyear": 2003, - "ref-by-count": 82, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060839565", - "attributes": { - "title": "Self-consistent mean-field models for nuclear structure", - "doi": "10.1103/revmodphys.75.121", - "nodeyear": 2003, - "ref-by-count": 1705, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1006328423", - "attributes": { - "title": "Decoherence, einselection, and the quantum origins of the classical", - "doi": "10.1103/revmodphys.75.715", - "nodeyear": 2003, - "ref-by-count": 2480, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1005025234", - "attributes": { - "title": "Quantum Monte Carlo calculations of A=9,10 nuclei", - "doi": "10.1103/physrevc.66.044310", - "nodeyear": 2002, - "ref-by-count": 304, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1040030659", - "attributes": { - "title": "Experimental Implementation of the Quantum Baker\u2019s Map", - "doi": "10.1103/physrevlett.89.157902", - "nodeyear": 2002, - "ref-by-count": 59, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1012581556", - "attributes": { - "title": "The origin of degeneracies and crossings in the 1d Hubbard model", - "doi": "10.1088/0305-4470/35/34/319", - "nodeyear": 2002, - "ref-by-count": 31, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060673467", - "attributes": { - "title": "Test of two-level crossing at the N=90 spherical-deformed critical point", - "doi": "10.1103/physrevc.66.021304", - "nodeyear": 2002, - "ref-by-count": 53, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060728780", - "attributes": { - "title": "Universal relationship between a quantum phase transition and instability points of classical systems", - "doi": "10.1103/physreve.66.016217", - "nodeyear": 2002, - "ref-by-count": 29, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1098707489", - "attributes": { - "title": "Physical Problems Solved by the Phase-Integral Method", - "doi": "10.1017/cbo9780511535086", - "nodeyear": 2002, - "ref-by-count": 68, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1060673300", - "attributes": { - "title": "Shape phase transitions in rotating nuclei via cranking the interacting boson model", - "doi": "10.1103/physrevc.65.044312", - "nodeyear": 2002, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1052419661", - "attributes": { - "title": "Nuclear binding energies: Global collective structure and local shell-model correlations", - "doi": "10.1016/s0375-9474(01)01270-2", - "nodeyear": 2002, - "ref-by-count": 40, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1044001354", - "attributes": { - "title": "Quantum Level Structures and Nonlinear Classical Dynamics", - "doi": "10.1006/jmsp.2001.8446", - "nodeyear": 2001, - "ref-by-count": 25, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060673164", - "attributes": { - "title": "Search for E(5) symmetry in nuclei: The Ru isotopes", - "doi": "10.1103/physrevc.65.014301", - "nodeyear": 2001, - "ref-by-count": 80, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1056046759", - "attributes": { - "title": "On the Anharmonic XCN Bending Modes of the Quasilinear Molecules BrCNO and ClCNO", - "doi": "10.1021/jp012067u", - "nodeyear": 2001, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060673113", - "attributes": { - "title": "Collective 0+ excitations and their global properties", - "doi": "10.1103/physrevc.64.057301", - "nodeyear": 2001, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1034622526", - "attributes": { - "title": "Class of Exactly Solvable Pairing Models", - "doi": "10.1103/physrevlett.87.066403", - "nodeyear": 2001, - "ref-by-count": 131, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1036871640", - "attributes": { - "title": "Observation of Chaos-Assisted Tunneling Between Islands of Stability", - "doi": "10.1126/science.1061569", - "nodeyear": 2001, - "ref-by-count": 285, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019839012", - "attributes": { - "title": "Dynamical tunnelling of ultracold atoms", - "doi": "10.1038/35083510", - "nodeyear": 2001, - "ref-by-count": 288, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1040846971", - "attributes": { - "title": "Exact solution of the nuclear pairing problem", - "doi": "10.1016/s0370-2693(01)00431-2", - "nodeyear": 2001, - "ref-by-count": 94, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1018661537", - "attributes": { - "title": "Charge Density Wave, Superconductivity, and Anomalous Metallic Behavior in 2D Transition Metal Dichalcogenides", - "doi": "10.1103/physrevlett.86.4382", - "nodeyear": 2001, - "ref-by-count": 332, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1043138933", - "attributes": { - "title": "Spectroscopy of discrete energy levels in ultrasmall metallic grains", - "doi": "10.1016/s0370-1573(00)00099-5", - "nodeyear": 2001, - "ref-by-count": 348, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1008640012", - "attributes": { - "title": "Environment-Independent Decoherence Rate in Classically Chaotic Systems", - "doi": "10.1103/physrevlett.86.2490", - "nodeyear": 2001, - "ref-by-count": 442, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1043889955", - "attributes": { - "title": "Quantum Signatures of Chaos", - "doi": "10.1007/978-3-662-04506-0", - "nodeyear": 2001, - "ref-by-count": 556, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1032081451", - "attributes": { - "title": "Continuous Quantum Measurement and the Emergence of Classical Chaos", - "doi": "10.1103/physrevlett.85.4852", - "nodeyear": 2000, - "ref-by-count": 98, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1024740024", - "attributes": { - "title": "The B(E2:4+2\u21922+2) value in 152Sm and \u03b2-softness in phase coexisting structures", - "doi": "10.1016/s0370-2693(00)01233-8", - "nodeyear": 2000, - "ref-by-count": 36, - "is_input_DOI": false, - "category_for": "02:0.60;01:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1028438151", - "attributes": { - "title": "Quantum feedback control and classical control theory", - "doi": "10.1103/physreva.62.012105", - "nodeyear": 2000, - "ref-by-count": 241, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1062569382", - "attributes": { - "title": "Whither the Future of Controlling Quantum Phenomena?", - "doi": "10.1126/science.288.5467.824", - "nodeyear": 2000, - "ref-by-count": 961, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1047654315", - "attributes": { - "title": "Classification of Phase Transitions in Small Systems", - "doi": "10.1103/physrevlett.84.3511", - "nodeyear": 2000, - "ref-by-count": 108, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1016859474", - "attributes": { - "title": "The statistical theory of quantum dots", - "doi": "10.1103/revmodphys.72.895", - "nodeyear": 2000, - "ref-by-count": 525, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060820367", - "attributes": { - "title": "Dynamical Symmetry and Higher-Order Interactions", - "doi": "10.1103/physrevlett.83.4269", - "nodeyear": 1999, - "ref-by-count": 58, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060672165", - "attributes": { - "title": "Phase coexistence in the interacting boson model and 152Sm", - "doi": "10.1103/physrevc.60.061303", - "nodeyear": 1999, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1049632162", - "attributes": { - "title": "Shape coexistence and the effective nucleon-nucleon interaction", - "doi": "10.1103/physrevc.60.014316", - "nodeyear": 1999, - "ref-by-count": 284, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1036048855", - "attributes": { - "title": "Quantum Monodromy in Integrable Systems", - "doi": "10.1007/s002200050621", - "nodeyear": 1999, - "ref-by-count": 74, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1010760440", - "attributes": { - "title": "Electric monopole transitions from low energy excitations in nuclei", - "doi": "10.1016/s0375-9474(99)00143-8", - "nodeyear": 1999, - "ref-by-count": 186, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1027532833", - "attributes": { - "title": "Wave-function entropy and dynamical symmetry breaking in the interacting boson model", - "doi": "10.1103/physreve.58.387", - "nodeyear": 1998, - "ref-by-count": 39, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1034601602", - "attributes": { - "title": "Quantum-classical transition of the escape rate of a uniaxial spin system in an arbitrarily directed field", - "doi": "10.1103/physrevb.57.13639", - "nodeyear": 1998, - "ref-by-count": 103, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1016981788", - "attributes": { - "title": "New algebraic solutions for SO(6) \u2194 U(5) transitional nuclei in the interacting boson model", - "doi": "10.1016/s0375-9474(98)00207-3", - "nodeyear": 1998, - "ref-by-count": 91, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059076097", - "attributes": { - "title": "Rotation-vibrational spectra of diatomic molecules and nuclei with Davidson interactions", - "doi": "10.1088/0305-4470/31/21/011", - "nodeyear": 1998, - "ref-by-count": 70, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1035439165", - "attributes": { - "title": "Decoherence, Chaos, and the Correspondence Principle", - "doi": "10.1103/physrevlett.80.4361", - "nodeyear": 1998, - "ref-by-count": 184, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042214836", - "attributes": { - "title": "Orderly Spectra from Random Interactions", - "doi": "10.1103/physrevlett.80.2749", - "nodeyear": 1998, - "ref-by-count": 133, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1007511315", - "attributes": { - "title": "A structural triangle for the geometric collective model", - "doi": "10.1016/s0370-2693(97)00763-6", - "nodeyear": 1997, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "02:0.60;01:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1015234386", - "attributes": { - "title": "Magnetic phases near the Van Hove singularity in s- and d-band Hubbard models", - "doi": "10.1103/physrevb.56.3159", - "nodeyear": 1997, - "ref-by-count": 65, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1005256305", - "attributes": { - "title": "Particle-hole excitations in the interacting boson model (III): The O(6)-SU(3) coupling", - "doi": "10.1016/s0375-9474(97)00195-4", - "nodeyear": 1997, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1098678329", - "attributes": { - "title": "Chaos in Atomic Physics", - "doi": "10.1017/cbo9780511524509", - "nodeyear": 1997, - "ref-by-count": 102, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1043006827", - "attributes": { - "title": "Bifurcations of periodic orbits and uniform approximations", - "doi": "10.1088/0305-4470/30/13/010", - "nodeyear": 1997, - "ref-by-count": 82, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1030554440", - "attributes": { - "title": "Semiclassical interference of bifurcations", - "doi": "10.1209/epl/i1997-00262-4", - "nodeyear": 1997, - "ref-by-count": 27, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060492396", - "attributes": { - "title": "Hydrogen atom in a magnetic field: Ghost orbits, catastrophes, and uniform semiclassical approximations", - "doi": "10.1103/physreva.55.1743", - "nodeyear": 1997, - "ref-by-count": 46, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1044040016", - "attributes": { - "title": "Global Aspects of Classical Integrable Systems", - "doi": "10.1007/978-3-0348-8891-2", - "nodeyear": 1997, - "ref-by-count": 261, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1028784456", - "attributes": { - "title": "On the LambertW function", - "doi": "10.1007/bf02124750", - "nodeyear": 1996, - "ref-by-count": 3933, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1005219924", - "attributes": { - "title": "Coincidence and correlation analysis for low spin states in 128Xe", - "doi": "10.1016/0375-9474(96)00242-4", - "nodeyear": 1996, - "ref-by-count": 22, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059074985", - "attributes": { - "title": "Uniform approximation for bifurcations of periodic orbits with high repetition numbers", - "doi": "10.1088/0305-4470/29/15/034", - "nodeyear": 1996, - "ref-by-count": 47, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1045342100", - "attributes": { - "title": "Partial Dynamical Symmetry in Deformed Nuclei", - "doi": "10.1103/physrevlett.77.818", - "nodeyear": 1996, - "ref-by-count": 85, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1043048933", - "attributes": { - "title": "Secular determinants of random unitary matrices", - "doi": "10.1088/0305-4470/29/13/029", - "nodeyear": 1996, - "ref-by-count": 54, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060719599", - "attributes": { - "title": "Near-integrable systems: Resonances and semiclassical trace formulas", - "doi": "10.1103/physreve.54.136", - "nodeyear": 1996, - "ref-by-count": 55, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1024348554", - "attributes": { - "title": "Transformation brackets between U(\u03bd+1)\u2283U(\u03bd)\u2283SO(\u03bd) and U(\u03bd+1)\u2283SO(\u03bd+1)\u2283SO(\u03bd)", - "doi": "10.1063/1.531689", - "nodeyear": 1996, - "ref-by-count": 18, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060812291", - "attributes": { - "title": "Semiclassical Trace Formulas of Near-Integrable Systems: Resonances", - "doi": "10.1103/physrevlett.75.4346", - "nodeyear": 1995, - "ref-by-count": 59, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1022345746", - "attributes": { - "title": "Theory and application of the quantum phase-space distribution functions", - "doi": "10.1016/0370-1573(95)00007-4", - "nodeyear": 1995, - "ref-by-count": 570, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1018020267", - "attributes": { - "title": "Semiclassical asymptotics of perturbed cat maps", - "doi": "10.1098/rspa.1995.0063", - "nodeyear": 1995, - "ref-by-count": 36, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060490443", - "attributes": { - "title": "Controllability of molecular systems", - "doi": "10.1103/physreva.51.960", - "nodeyear": 1995, - "ref-by-count": 276, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1053030119", - "attributes": { - "title": "The pair-coupling model", - "doi": "10.1016/0375-9474(94)00472-y", - "nodeyear": 1995, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1037040727", - "attributes": { - "title": "Microscopic aspects of nuclear deformation", - "doi": "10.1016/0375-9474(94)90966-0", - "nodeyear": 1994, - "ref-by-count": 43, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1021912934", - "attributes": { - "title": "Microscopic origin of nuclear deformations", - "doi": "10.1016/0375-9474(94)90037-x", - "nodeyear": 1994, - "ref-by-count": 54, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060716812", - "attributes": { - "title": "Traces of ghost orbits in the quantum standard map", - "doi": "10.1103/physreve.49.r4767", - "nodeyear": 1994, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060488555", - "attributes": { - "title": "Wigner distribution of a general angular-momentum state: Applications to a collection of two-level atoms", - "doi": "10.1103/physreva.49.4101", - "nodeyear": 1994, - "ref-by-count": 185, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1028771859", - "attributes": { - "title": "Decoherence, chaos, and the second law", - "doi": "10.1103/physrevlett.72.2508", - "nodeyear": 1994, - "ref-by-count": 351, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059110861", - "attributes": { - "title": "Semiclassical accuracy for billiards", - "doi": "10.1088/0951-7715/7/2/010", - "nodeyear": 1994, - "ref-by-count": 54, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060716833", - "attributes": { - "title": "Long-time behavior of the semiclassical baker\u2019s map", - "doi": "10.1103/physreve.49.r963", - "nodeyear": 1994, - "ref-by-count": 30, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1020895228", - "attributes": { - "title": "\u00c9quilibre instable en r\u00e9gime semi-classique: i\u2014concentration microlocale", - "doi": "10.1080/03605309408821063", - "nodeyear": 1994, - "ref-by-count": 47, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060807676", - "attributes": { - "title": "Prebifurcation periodic ghost orbits in semiclassical quantization", - "doi": "10.1103/physrevlett.71.2167", - "nodeyear": 1993, - "ref-by-count": 116, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060565149", - "attributes": { - "title": "Site-selective imaging in scanning tunneling microscopy of graphite: The nature of site asymmetry", - "doi": "10.1103/physrevb.47.13059", - "nodeyear": 1993, - "ref-by-count": 40, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060487068", - "attributes": { - "title": "Quantum dynamics near a classical separatrix", - "doi": "10.1103/physreva.47.2496", - "nodeyear": 1993, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1098954489", - "attributes": { - "title": "Quantum Dissipative Systems", - "doi": "10.1142/1476", - "nodeyear": 1993, - "ref-by-count": 693, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1029398439", - "attributes": { - "title": "Factorization of commutators: The Wick theorem for coupled operators", - "doi": "10.1016/0375-9474(93)90357-4", - "nodeyear": 1993, - "ref-by-count": 36, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1057871482", - "attributes": { - "title": "Atom\u2010Photon Interactions: Basic Processes and Applications", - "doi": "10.1063/1.2809840", - "nodeyear": 1992, - "ref-by-count": 386, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060805930", - "attributes": { - "title": "Semiclassical propagation: How long can it last?", - "doi": "10.1103/physrevlett.69.402", - "nodeyear": 1992, - "ref-by-count": 117, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059110762", - "attributes": { - "title": "Semiclassical quantization of multidimensional systems", - "doi": "10.1088/0951-7715/5/4/001", - "nodeyear": 1992, - "ref-by-count": 220, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1005256926", - "attributes": { - "title": "New methods in the theory of quantum spin systems", - "doi": "10.1016/0370-1573(92)90158-v", - "nodeyear": 1992, - "ref-by-count": 137, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060485642", - "attributes": { - "title": "Separatrix eigenfunctions", - "doi": "10.1103/physreva.45.8501", - "nodeyear": 1992, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060804542", - "attributes": { - "title": "Distribution of roots of random polynomials", - "doi": "10.1103/physrevlett.68.2726", - "nodeyear": 1992, - "ref-by-count": 74, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1025507234", - "attributes": { - "title": "Remarks on the quasi-classical propagator of area-preserving maps", - "doi": "10.1016/0167-2789(92)90020-n", - "nodeyear": 1992, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060804211", - "attributes": { - "title": "Novel rule for quantizing chaos", - "doi": "10.1103/physrevlett.68.1629", - "nodeyear": 1992, - "ref-by-count": 49, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1026690139", - "attributes": { - "title": "The microwave spectrum and semirigid bender analysis of isocyanatoethyne, HC\ue5fcCNCO", - "doi": "10.1016/0022-2852(92)90125-8", - "nodeyear": 1992, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1057737242", - "attributes": { - "title": "Anatomy of the trace formula for the baker's map.", - "doi": "10.1063/1.165922", - "nodeyear": 1992, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060484658", - "attributes": { - "title": "Selberg\u2019s \u03b6 function and the quantization of chaos", - "doi": "10.1103/physreva.44.r7877", - "nodeyear": 1991, - "ref-by-count": 38, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1041037290", - "attributes": { - "title": "Monodromy in the champagne bottle", - "doi": "10.1007/bf00944566", - "nodeyear": 1991, - "ref-by-count": 54, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060803392", - "attributes": { - "title": "Quantum eigenvalues from classical periodic orbits", - "doi": "10.1103/physrevlett.67.2410", - "nodeyear": 1991, - "ref-by-count": 89, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1098679389", - "attributes": { - "title": "The Interacting Boson-Fermion Model", - "doi": "10.1017/cbo9780511549724", - "nodeyear": 1991, - "ref-by-count": 325, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1060803927", - "attributes": { - "title": "Semiclassical dynamics of chaotic motion: Unexpected long-time accuracy", - "doi": "10.1103/physrevlett.67.664", - "nodeyear": 1991, - "ref-by-count": 194, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059110686", - "attributes": { - "title": "The cat maps: quantum mechanics and classical motion", - "doi": "10.1088/0951-7715/4/2/006", - "nodeyear": 1991, - "ref-by-count": 126, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1030828951", - "attributes": { - "title": "The unusual nature of the quantum Baker's transformation", - "doi": "10.1016/0003-4916(91)90184-a", - "nodeyear": 1991, - "ref-by-count": 37, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060483028", - "attributes": { - "title": "Classical and quantal morphology of a piecewise-linear standard map", - "doi": "10.1103/physreva.43.3183", - "nodeyear": 1991, - "ref-by-count": 10, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042457710", - "attributes": { - "title": "Nuclear ground state properties of 99Sr by collinear laser spectroscopy with non-optical detection", - "doi": "10.1016/0370-2693(91)90664-c", - "nodeyear": 1991, - "ref-by-count": 41, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060482831", - "attributes": { - "title": "Quantum dynamics in a chaotic separatrix layer", - "doi": "10.1103/physreva.43.1783", - "nodeyear": 1991, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060839221", - "attributes": { - "title": "Boson realizations of Lie algebras with applications to nuclear physics", - "doi": "10.1103/revmodphys.63.375", - "nodeyear": 1991, - "ref-by-count": 362, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1022722372", - "attributes": { - "title": "Nuclear Shapes in Mean Field Theory", - "doi": "10.1146/annurev.ns.40.120190.002255", - "nodeyear": 1990, - "ref-by-count": 202, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059071180", - "attributes": { - "title": "A rule for quantizing chaos?", - "doi": "10.1088/0305-4470/23/21/024", - "nodeyear": 1990, - "ref-by-count": 172, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1053498585", - "attributes": { - "title": "Simple models of quantum chaos: Spectrum and eigenfunctions", - "doi": "10.1016/0370-1573(90)90067-c", - "nodeyear": 1990, - "ref-by-count": 707, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059071127", - "attributes": { - "title": "Indicators of quantum chaos based on eigenvector statistics", - "doi": "10.1088/0305-4470/23/20/005", - "nodeyear": 1990, - "ref-by-count": 35, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060801337", - "attributes": { - "title": "Role of \u2018\u2018scars\u2019\u2019 in the suppression of ionization in intense, high-frequency fields", - "doi": "10.1103/physrevlett.65.1964", - "nodeyear": 1990, - "ref-by-count": 36, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060481738", - "attributes": { - "title": "Random-matrix theory and eigenmodes of dynamical systems", - "doi": "10.1103/physreva.42.1013", - "nodeyear": 1990, - "ref-by-count": 60, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1030444683", - "attributes": { - "title": "Wigner's function and tunneling", - "doi": "10.1016/0003-4916(90)90370-4", - "nodeyear": 1990, - "ref-by-count": 75, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1022719988", - "attributes": { - "title": "Classical structures in the quantized baker transformation", - "doi": "10.1016/0003-4916(90)90367-w", - "nodeyear": 1990, - "ref-by-count": 164, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060800993", - "attributes": { - "title": "Dynamics of atomic ionization suppression and electron localization in an intense high-frequency radiation field", - "doi": "10.1103/physrevlett.64.862", - "nodeyear": 1990, - "ref-by-count": 255, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1022162692", - "attributes": { - "title": "Phase separation near the Mott transition in La2-xSrxCuO4", - "doi": "10.1088/0953-8984/2/3/015", - "nodeyear": 1990, - "ref-by-count": 107, - "is_input_DOI": false, - "category_for": "02:0.33;09:0.33;10:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060800881", - "attributes": { - "title": "Scaling behavior of localization in quantum chaos", - "doi": "10.1103/physrevlett.64.5", - "nodeyear": 1990, - "ref-by-count": 92, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1053543950", - "attributes": { - "title": "Chaos in Classical and Quantum Mechanics", - "doi": "10.1007/978-1-4612-0983-6", - "nodeyear": 1990, - "ref-by-count": 1977, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060799854", - "attributes": { - "title": "Inhibition of quantum transport due to \u2018\u2018scars\u2019\u2019 of unstable periodic orbits", - "doi": "10.1103/physrevlett.63.2771", - "nodeyear": 1989, - "ref-by-count": 100, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1073294533", - "attributes": { - "title": "Chaos and integrability in nonlinear dynamics: an introduction", - "doi": "10.5860/choice.27-2142", - "nodeyear": 1989, - "ref-by-count": 109, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1060480673", - "attributes": { - "title": "Semiclassical approximations in the coherent-state representation", - "doi": "10.1103/physreva.40.6800", - "nodeyear": 1989, - "ref-by-count": 86, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1064233019", - "attributes": { - "title": "Convergence of the Semi-Classical Periodic Orbit Expansion", - "doi": "10.1209/0295-5075/9/6/002", - "nodeyear": 1989, - "ref-by-count": 61, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1014168356", - "attributes": { - "title": "Quantum scars of classical closed orbits in phase space", - "doi": "10.1098/rspa.1989.0052", - "nodeyear": 1989, - "ref-by-count": 303, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1043750288", - "attributes": { - "title": "Uniform asymptotic smoothing of Stokes\u2019s discontinuities", - "doi": "10.1098/rspa.1989.0018", - "nodeyear": 1989, - "ref-by-count": 242, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060664355", - "attributes": { - "title": "Shape transition and dynamical symmetries in the interacting boson model", - "doi": "10.1103/physrevc.39.652", - "nodeyear": 1989, - "ref-by-count": 24, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060478681", - "attributes": { - "title": "Scaling theory for the localization length of the kicked rotor", - "doi": "10.1103/physreva.39.1628", - "nodeyear": 1989, - "ref-by-count": 48, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1049940303", - "attributes": { - "title": "The quantized Baker's transformation", - "doi": "10.1016/0003-4916(89)90259-5", - "nodeyear": 1989, - "ref-by-count": 176, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1059069771", - "attributes": { - "title": "Universality of eigenvector statistics of kicked tops of different symmetries", - "doi": "10.1088/0305-4470/21/22/006", - "nodeyear": 1988, - "ref-by-count": 59, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1058105141", - "attributes": { - "title": "Some isoscalar factors for SO\n \n N\n \n \u2287SO\n \n N\n \u22121\n \n and state expansion coefficients for SO\n \n N\n \n \u2287SO\n \n N\n \u22121\n \n in terms of SU\n \n N\n \n \u2287SU\n \n N\n \u22121\n \n \u2287SO\n \n N\n \u22121", - "doi": "10.1063/1.528122", - "nodeyear": 1988, - "ref-by-count": 8, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1008979230", - "attributes": { - "title": "OCCCS, NCNCS, NCNCO, and NCNNN as semirigid benders", - "doi": "10.1016/0022-2852(88)90059-8", - "nodeyear": 1988, - "ref-by-count": 27, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060797693", - "attributes": { - "title": "Wave Functions at the Critical Kolmogorov-Arnol'd-Moser Surface", - "doi": "10.1103/physrevlett.61.1691", - "nodeyear": 1988, - "ref-by-count": 58, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1010960717", - "attributes": { - "title": "Quasi-exactly-solvable problems andsl(2) algebra", - "doi": "10.1007/bf01466727", - "nodeyear": 1988, - "ref-by-count": 548, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060477616", - "attributes": { - "title": "Relation between quantum and classical thresholds for multiphoton ionization of excited atoms", - "doi": "10.1103/physreva.37.4702", - "nodeyear": 1988, - "ref-by-count": 94, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1025337287", - "attributes": { - "title": "Smoothed wave functions of chaotic quantum systems", - "doi": "10.1016/0167-2789(88)90075-9", - "nodeyear": 1988, - "ref-by-count": 318, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060797016", - "attributes": { - "title": "Nuclear Deformation: A Proton-Neutron Effect?", - "doi": "10.1103/physrevlett.60.2254", - "nodeyear": 1988, - "ref-by-count": 61, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1064231130", - "attributes": { - "title": "The Kicked Rotator as a Limit of the Kicked Top", - "doi": "10.1209/0295-5075/5/8/001", - "nodeyear": 1988, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1064231079", - "attributes": { - "title": "Kramers' Degeneracy and Quartic Level Repulsion", - "doi": "10.1209/0295-5075/5/5/001", - "nodeyear": 1988, - "ref-by-count": 56, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1064231011", - "attributes": { - "title": "Dynamics and Statistics of Quasi-Energy Levels for Kicked Quantum Systems", - "doi": "10.1209/0295-5075/5/1/001", - "nodeyear": 1988, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060839152", - "attributes": { - "title": "The interacting boson approximation", - "doi": "10.1103/revmodphys.60.389", - "nodeyear": 1988, - "ref-by-count": 305, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1009964863", - "attributes": { - "title": "The quantum mechanical spherical pendulum", - "doi": "10.1090/s0273-0979-1988-15705-9", - "nodeyear": 1988, - "ref-by-count": 91, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059069031", - "attributes": { - "title": "Resonant periodic orbits and the semiclassical energy spectrum", - "doi": "10.1088/0305-4470/20/17/021", - "nodeyear": 1987, - "ref-by-count": 96, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060795805", - "attributes": { - "title": "Geometrical interpretation of SO(7): A critical dynamical symmetry", - "doi": "10.1103/physrevlett.59.2032", - "nodeyear": 1987, - "ref-by-count": 34, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1045515256", - "attributes": { - "title": "Intrinsic and collective structure in the interacting boson model", - "doi": "10.1016/0003-4916(87)90136-9", - "nodeyear": 1987, - "ref-by-count": 56, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1034392770", - "attributes": { - "title": "Semi-classical quantization, adiabatic invariants and classical chaos", - "doi": "10.1098/rspa.1987.0107", - "nodeyear": 1987, - "ref-by-count": 15, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1051138084", - "attributes": { - "title": "Adiabatic invariance in the standard map", - "doi": "10.1016/0167-2789(87)90124-2", - "nodeyear": 1987, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1023341115", - "attributes": { - "title": "Landau theory of shape transitions in hot rotating nuclei", - "doi": "10.1016/0375-9474(87)90107-2", - "nodeyear": 1987, - "ref-by-count": 69, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060476171", - "attributes": { - "title": "Quantum chaos of periodically pulsed systems: Underlying complete integrability", - "doi": "10.1103/physreva.35.5294", - "nodeyear": 1987, - "ref-by-count": 35, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1039185830", - "attributes": { - "title": "Erratic behavior of invariant circles in standard-like mappings", - "doi": "10.1016/0167-2789(87)90235-1", - "nodeyear": 1987, - "ref-by-count": 39, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060794819", - "attributes": { - "title": "Connection between long-range correlations in quantum spectra and classical periodic orbits", - "doi": "10.1103/physrevlett.58.1589", - "nodeyear": 1987, - "ref-by-count": 180, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1010313486", - "attributes": { - "title": "Symmetry versus degree of level repulsion for kicked quantum systems", - "doi": "10.1007/bf01312770", - "nodeyear": 1987, - "ref-by-count": 57, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059069146", - "attributes": { - "title": "On the limitations of the Birkhoff-Gustavson normal form approach", - "doi": "10.1088/0305-4470/20/2/020", - "nodeyear": 1987, - "ref-by-count": 14, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060795235", - "attributes": { - "title": "Quantum effects in a macroscopic system", - "doi": "10.1103/physrevlett.58.292", - "nodeyear": 1987, - "ref-by-count": 17, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1049572408", - "attributes": { - "title": "Theory of Multiphoton Processes", - "doi": "10.1007/978-1-4899-1977-9", - "nodeyear": 1987, - "ref-by-count": 425, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1060794274", - "attributes": { - "title": "Kolmogorov-Arnol'd-Moser Barriers in the Quantum Dynamics of Chaotic Systems", - "doi": "10.1103/physrevlett.57.2883", - "nodeyear": 1986, - "ref-by-count": 137, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060475260", - "attributes": { - "title": "Adiabatic-invariant change due to separatrix crossing", - "doi": "10.1103/physreva.34.4256", - "nodeyear": 1986, - "ref-by-count": 239, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1059068122", - "attributes": { - "title": "Birkhoff-Gustavson normal form in classical and quantum mechanics", - "doi": "10.1088/0305-4470/19/15/020", - "nodeyear": 1986, - "ref-by-count": 56, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059068080", - "attributes": { - "title": "A note concerning quantum integrability", - "doi": "10.1088/0305-4470/19/14/004", - "nodeyear": 1986, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059086874", - "attributes": { - "title": "Random-phase approximation and broken symmetry", - "doi": "10.1088/0305-4616/12/9/006", - "nodeyear": 1986, - "ref-by-count": 21, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1036372533", - "attributes": { - "title": "Characteristic patterns in microwave spectra of quasi-symmetric top molecules of the WH3XYZ type", - "doi": "10.1016/0022-2852(86)90181-5", - "nodeyear": 1986, - "ref-by-count": 30, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060794457", - "attributes": { - "title": "Periodically pulsed spin dynamics: Scaling behavior of semiclassical wave functions", - "doi": "10.1103/physrevlett.57.5", - "nodeyear": 1986, - "ref-by-count": 54, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060475467", - "attributes": { - "title": "Evolution and exact eigenstates of a resonant quantum system", - "doi": "10.1103/physreva.34.7", - "nodeyear": 1986, - "ref-by-count": 154, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1012195559", - "attributes": { - "title": "The microwave spectrum of methyl isothiocyanate", - "doi": "10.1016/0022-2852(86)90235-3", - "nodeyear": 1986, - "ref-by-count": 33, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1043149560", - "attributes": { - "title": "Levelstatistics and stochasticity in a driven quantum system", - "doi": "10.1007/bf01303848", - "nodeyear": 1986, - "ref-by-count": 37, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1001349916", - "attributes": { - "title": "Invariant circles for the piecewise linear standard map", - "doi": "10.1007/bf01209394", - "nodeyear": 1986, - "ref-by-count": 50, - "is_input_DOI": false, - "category_for": "01:0.60;02:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1060793163", - "attributes": { - "title": "Change of the Adiabatic Invariant due to Separatrix Crossing", - "doi": "10.1103/physrevlett.56.2117", - "nodeyear": 1986, - "ref-by-count": 95, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1052561538", - "attributes": { - "title": "O(5) symmetry in IBA-1 \u2014 the O(6)\u2014U(5) transition region", - "doi": "10.1016/0370-2693(86)90824-5", - "nodeyear": 1986, - "ref-by-count": 57, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059068352", - "attributes": { - "title": "False time-reversal violation and energy level statistics: the role of anti-unitary symmetry", - "doi": "10.1088/0305-4470/19/5/020", - "nodeyear": 1986, - "ref-by-count": 143, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1022456477", - "attributes": { - "title": "The symplectic shell-model theory of collective states", - "doi": "10.1016/0375-9474(86)90308-8", - "nodeyear": 1986, - "ref-by-count": 49, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060793513", - "attributes": { - "title": "Limiting quasienergy statistics for simple quantum systems", - "doi": "10.1103/physrevlett.56.541", - "nodeyear": 1986, - "ref-by-count": 110, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1039987654", - "attributes": { - "title": "Lie Groups and Algebras with Applications to Physics, Geometry, and Mechanics", - "doi": "10.1007/978-1-4757-1910-9", - "nodeyear": 1986, - "ref-by-count": 198, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1039918636", - "attributes": { - "title": "Quasienergy integrals for the \u201cstandard mapping\u201d", - "doi": "10.1016/0375-9601(85)90333-0", - "nodeyear": 1985, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1016926995", - "attributes": { - "title": "An integrable marriage of the Euler equations with the Calogero-Moser system", - "doi": "10.1016/0375-9601(85)90432-3", - "nodeyear": 1985, - "ref-by-count": 103, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1015283490", - "attributes": { - "title": "Microwave spectrum of the quasilinear molecule, cyanogen isothiocyanate (NCNCS)", - "doi": "10.1016/0022-2852(85)90114-6", - "nodeyear": 1985, - "ref-by-count": 25, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1039179998", - "attributes": { - "title": "Interacting boson approximation and triaxial shapes", - "doi": "10.1016/0370-2693(85)91370-x", - "nodeyear": 1985, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "02:0.60;01:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1047713864", - "attributes": { - "title": "IBA consistent-Q formalism extended to the vibrational region", - "doi": "10.1016/0370-2693(85)91573-4", - "nodeyear": 1985, - "ref-by-count": 117, - "is_input_DOI": false, - "category_for": "02:0.60;01:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1060537632", - "attributes": { - "title": "Statistics of quasi-energy separations in chaotic systems", - "doi": "10.1103/physrevb.31.6852", - "nodeyear": 1985, - "ref-by-count": 57, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060791387", - "attributes": { - "title": "New Approach to the Statistical Properties of Energy Levels", - "doi": "10.1103/physrevlett.54.1883", - "nodeyear": 1985, - "ref-by-count": 182, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1098905503", - "attributes": { - "title": "Coherent States", - "doi": "10.1142/0096", - "nodeyear": 1985, - "ref-by-count": 1220, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1022161412", - "attributes": { - "title": "Quantum spectra of classically chaotic systems without time reversal invariance", - "doi": "10.1016/0375-9601(85)90287-7", - "nodeyear": 1985, - "ref-by-count": 56, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060791130", - "attributes": { - "title": "Quantization of Asymmetric Shapes in Nuclei", - "doi": "10.1103/physrevlett.54.1126", - "nodeyear": 1985, - "ref-by-count": 82, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1030634392", - "attributes": { - "title": "On the dynamics of a quantum system which is classically chaotic", - "doi": "10.1007/bf01312650", - "nodeyear": 1985, - "ref-by-count": 66, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060537812", - "attributes": { - "title": "Theory of the scanning tunneling microscope", - "doi": "10.1103/physrevb.31.805", - "nodeyear": 1985, - "ref-by-count": 3418, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060473496", - "attributes": { - "title": "Route to chaos by irregular periods: Simulations of parallel pumping in ferromagnets", - "doi": "10.1103/physreva.31.420", - "nodeyear": 1985, - "ref-by-count": 58, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1024772182", - "attributes": { - "title": "Spectral Fluctuations and Chaos in Quantum Systems", - "doi": "10.1007/978-1-4613-2443-0_7", - "nodeyear": 1985, - "ref-by-count": 2, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060472631", - "attributes": { - "title": "Stability of quantum motion in chaotic and regular systems", - "doi": "10.1103/physreva.30.1610", - "nodeyear": 1984, - "ref-by-count": 487, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060660647", - "attributes": { - "title": "Collective particle hole excitation in a deformed ground state", - "doi": "10.1103/physrevc.29.2368", - "nodeyear": 1984, - "ref-by-count": 5, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060789858", - "attributes": { - "title": "Uncovering the Transition from Regularity to Irregularity in a Quantum System", - "doi": "10.1103/physrevlett.52.1665", - "nodeyear": 1984, - "ref-by-count": 133, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1059067283", - "attributes": { - "title": "The adiabatic limit and the semiclassical limit", - "doi": "10.1088/0305-4470/17/6/018", - "nodeyear": 1984, - "ref-by-count": 75, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1052314442", - "attributes": { - "title": "Quantal phase factors accompanying adiabatic changes", - "doi": "10.1098/rspa.1984.0023", - "nodeyear": 1984, - "ref-by-count": 6354, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1027179906", - "attributes": { - "title": "Diabolical points in the spectra of triangles", - "doi": "10.1098/rspa.1984.0022", - "nodeyear": 1984, - "ref-by-count": 333, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060660456", - "attributes": { - "title": "Random phase approximation in a deformed Hartree-Fock basis", - "doi": "10.1103/physrevc.29.1113", - "nodeyear": 1984, - "ref-by-count": 11, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1004335462", - "attributes": { - "title": "Incommensurability in an exactly-soluble quantal and classical model for a kicked rotator", - "doi": "10.1016/0167-2789(84)90185-4", - "nodeyear": 1984, - "ref-by-count": 38, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1010717449", - "attributes": { - "title": "Phenomenology of shape transitions in hot nuclei", - "doi": "10.1016/0375-9474(84)90421-4", - "nodeyear": 1984, - "ref-by-count": 98, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060790099", - "attributes": { - "title": "Effective Triaxial Deformations in the Interacting-Boson Model", - "doi": "10.1103/physrevlett.52.263", - "nodeyear": 1984, - "ref-by-count": 32, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060789643", - "attributes": { - "title": "Characterization of Chaotic Quantum Spectra and Universality of Level Fluctuation Laws", - "doi": "10.1103/physrevlett.52.1", - "nodeyear": 1984, - "ref-by-count": 1914, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1020847848", - "attributes": { - "title": "Destruction of order in nuclear spectra by a residual GOE interaction", - "doi": "10.1016/0375-9474(83)90385-8", - "nodeyear": 1983, - "ref-by-count": 52, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1015453451", - "attributes": { - "title": "Coexistence in odd-mass nuclei", - "doi": "10.1016/0370-1573(83)90085-6", - "nodeyear": 1983, - "ref-by-count": 438, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060533316", - "attributes": { - "title": "Large-size critical behavior of infinitely coordinated systems", - "doi": "10.1103/physrevb.28.3955", - "nodeyear": 1983, - "ref-by-count": 145, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1042659546", - "attributes": { - "title": "Invariant curves, attractors, and phase diagram of a piecewise linear map with chaos", - "doi": "10.1007/bf01009756", - "nodeyear": 1983, - "ref-by-count": 19, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060789627", - "attributes": { - "title": "Quantum Kolmogorov-Arnol'd-Moser-like Theorem: Fundamentals of Localization in Quantum Theory", - "doi": "10.1103/physrevlett.51.947", - "nodeyear": 1983, - "ref-by-count": 102, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060789626", - "attributes": { - "title": "Distribution of Energy Eigenvalues in the Irregular Spectrum", - "doi": "10.1103/physrevlett.51.943", - "nodeyear": 1983, - "ref-by-count": 341, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1058023149", - "attributes": { - "title": "Comparison of quantal, classical, and semiclassical behavior at an isolated avoided crossing", - "doi": "10.1063/1.445127", - "nodeyear": 1983, - "ref-by-count": 67, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1031813736", - "attributes": { - "title": "A semiclassical quantization of area-preserving maps", - "doi": "10.1016/0167-2789(83)90005-2", - "nodeyear": 1983, - "ref-by-count": 67, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1005432200", - "attributes": { - "title": "Regular and Stochastic Motion", - "doi": "10.1007/978-1-4757-4257-2", - "nodeyear": 1983, - "ref-by-count": 2330, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1016998557", - "attributes": { - "title": "A variational method for the calculation of vibrational levels of any triatomic molecule", - "doi": "10.1080/00268978200101082", - "nodeyear": 1982, - "ref-by-count": 122, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060531200", - "attributes": { - "title": "Scaling for first-order phase transitions in thermodynamic and finite systems", - "doi": "10.1103/physrevb.26.2507", - "nodeyear": 1982, - "ref-by-count": 416, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060659692", - "attributes": { - "title": "Microscopic structure of an interacting boson model in terms of the Dyson boson mapping", - "doi": "10.1103/physrevc.26.642", - "nodeyear": 1982, - "ref-by-count": 30, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1055659331", - "attributes": { - "title": "Semiclassical theory of intensities of vibrational fundamentals, overtones, and combination bands", - "doi": "10.1021/j100209a001", - "nodeyear": 1982, - "ref-by-count": 50, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1060787073", - "attributes": { - "title": "Revised Formulation of the Phenomenological Interacting Boson Approximation", - "doi": "10.1103/physrevlett.48.1385", - "nodeyear": 1982, - "ref-by-count": 180, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060659255", - "attributes": { - "title": "Relationship between the Bohr-Mottelson model and the interacting boson model", - "doi": "10.1103/physrevc.25.2733", - "nodeyear": 1982, - "ref-by-count": 16, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060787424", - "attributes": { - "title": "Recurrence Phenomena in Quantum Dynamics", - "doi": "10.1103/physrevlett.48.711", - "nodeyear": 1982, - "ref-by-count": 195, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060469716", - "attributes": { - "title": "Relation between atomic coherent-state representation, state multipoles, and generalized phase-space distributions", - "doi": "10.1103/physreva.24.2889", - "nodeyear": 1981, - "ref-by-count": 210, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060786505", - "attributes": { - "title": "Relation between the Z=64 Shell Closure and the Onset of Deformation at N=88-90", - "doi": "10.1103/physrevlett.47.1433", - "nodeyear": 1981, - "ref-by-count": 201, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060658984", - "attributes": { - "title": "Classical limit of the interacting boson Hamiltonian", - "doi": "10.1103/physrevc.24.684", - "nodeyear": 1981, - "ref-by-count": 121, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019398907", - "attributes": { - "title": "An intrinsic state for the interacting boson model and its relationship to the Bohr-Mottelson model", - "doi": "10.1016/0375-9474(80)90387-5", - "nodeyear": 1980, - "ref-by-count": 348, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1024622720", - "attributes": { - "title": "On global action\u2010angle coordinates", - "doi": "10.1002/cpa.3160330602", - "nodeyear": 1980, - "ref-by-count": 329, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060784758", - "attributes": { - "title": "Periodic Spontaneous Collapse and Revival in a Simple Quantum Model", - "doi": "10.1103/physrevlett.44.1323", - "nodeyear": 1980, - "ref-by-count": 1064, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1017460463", - "attributes": { - "title": "A schematic model for monopole and quadrupole pairing in nuclei", - "doi": "10.1016/0003-4916(80)90381-4", - "nodeyear": 1980, - "ref-by-count": 253, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1109710367", - "attributes": { - "title": "The Nuclear Many-Body Problem", - "doi": "10.1007/978-3-642-61852-9", - "nodeyear": 1980, - "ref-by-count": 3504, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1041047376", - "attributes": { - "title": "Thermal isomerisation of sulphur dicyanide S(CN) 2 to cyanogen isothiocyanate, NCNCS", - "doi": "10.1039/c3980000606a", - "nodeyear": 1980, - "ref-by-count": 12, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1014462654", - "attributes": { - "title": "Interacting boson model of collective nuclear states IV. The O(6) limit", - "doi": "10.1016/0003-4916(79)90347-6", - "nodeyear": 1979, - "ref-by-count": 880, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1059087853", - "attributes": { - "title": "The onset of deformation in the neutron-rich Ba isotopes", - "doi": "10.1088/0305-4616/5/10/008", - "nodeyear": 1979, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060784536", - "attributes": { - "title": "Interacting Boson-Fermion Model of Collective States in Odd-A Nuclei", - "doi": "10.1103/physrevlett.43.679", - "nodeyear": 1979, - "ref-by-count": 446, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1034195309", - "attributes": { - "title": "Quantum maps", - "doi": "10.1016/0003-4916(79)90296-3", - "nodeyear": 1979, - "ref-by-count": 392, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060783526", - "attributes": { - "title": "Spectrum and Eigenfunctions for a Hamiltonian with Stochastic Trajectories", - "doi": "10.1103/physrevlett.42.1189", - "nodeyear": 1979, - "ref-by-count": 502, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060783905", - "attributes": { - "title": "Scaling Theory of Localization: Absence of Quantum Diffusion in Two Dimensions", - "doi": "10.1103/physrevlett.42.673", - "nodeyear": 1979, - "ref-by-count": 4963, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1026471851", - "attributes": { - "title": "Microscopic study of the shape transition in the zirconium isotopes", - "doi": "10.1016/0370-2693(79)90412-x", - "nodeyear": 1979, - "ref-by-count": 112, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1000653517", - "attributes": { - "title": "Nuclear shell model and interacting bosons", - "doi": "10.1016/0375-9474(78)90532-8", - "nodeyear": 1978, - "ref-by-count": 709, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1058956513", - "attributes": { - "title": "The Anderson localisation problem II. Some detailed numerical results", - "doi": "10.1088/0022-3719/10/21/018", - "nodeyear": 1977, - "ref-by-count": 50, - "is_input_DOI": false, - "category_for": "02:0.33;09:0.33;10:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1031874509", - "attributes": { - "title": "Level clustering in the regular spectrum", - "doi": "10.1098/rspa.1977.0140", - "nodeyear": 1977, - "ref-by-count": 967, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1046578644", - "attributes": { - "title": "Towards a unified microscopic description of nuclear deformation", - "doi": "10.1016/0370-2693(77)90825-5", - "nodeyear": 1977, - "ref-by-count": 255, - "is_input_DOI": false, - "category_for": "02:0.60;01:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1058099888", - "attributes": { - "title": "Lie series and invariant functions for analytic symplectic maps", - "doi": "10.1063/1.522868", - "nodeyear": 1976, - "ref-by-count": 261, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1062129885", - "attributes": { - "title": "Table of Integrals, Series, and Products", - "doi": "10.1115/1.3452897", - "nodeyear": 1976, - "ref-by-count": 4850, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1060465772", - "attributes": { - "title": "Superradiant pulses and directed angular momentum states", - "doi": "10.1103/physreva.13.357", - "nodeyear": 1976, - "ref-by-count": 98, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060779458", - "attributes": { - "title": "New Mechanism for a Charge-Density-Wave Instability", - "doi": "10.1103/physrevlett.35.120", - "nodeyear": 1975, - "ref-by-count": 315, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1020691468", - "attributes": { - "title": "Charge-density waves and superlattices in the metallic layered transition metal dichalcogenides", - "doi": "10.1080/00018737500101391", - "nodeyear": 1975, - "ref-by-count": 1747, - "is_input_DOI": false, - "category_for": "02:0.60;01:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1057914937", - "attributes": { - "title": "Lie Groups, Lie Algebras, and Some of Their Applications", - "doi": "10.1063/1.3128987", - "nodeyear": 1974, - "ref-by-count": 582, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1017561574", - "attributes": { - "title": "The (p, t) reactions on nuclei in the rare earth region", - "doi": "10.1016/0375-9474(73)90148-6", - "nodeyear": 1973, - "ref-by-count": 124, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060677000", - "attributes": { - "title": "Study of the (p,t) Reaction on the Even Gadolinium Nuclei", - "doi": "10.1103/physrevc.8.806", - "nodeyear": 1973, - "ref-by-count": 58, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060775623", - "attributes": { - "title": "Scaling Theory for Finite-Size Effects in the Critical Region", - "doi": "10.1103/physrevlett.28.1516", - "nodeyear": 1972, - "ref-by-count": 1154, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060489120", - "attributes": { - "title": "Combined Zeeman and High-Frequency Stark Effects, with Applications to Neutral-Helium Lines Useful in Plasma Diagnostics", - "doi": "10.1103/physreva.5.490", - "nodeyear": 1972, - "ref-by-count": 52, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060838726", - "attributes": { - "title": "Aspects of Time-Dependent Perturbation Theory", - "doi": "10.1103/revmodphys.44.602", - "nodeyear": 1972, - "ref-by-count": 530, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1057743676", - "attributes": { - "title": "Periodic Orbits and Classical Quantization Conditions", - "doi": "10.1063/1.1665596", - "nodeyear": 1971, - "ref-by-count": 1223, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1025513050", - "attributes": { - "title": "Generic bifurcation of periodic points", - "doi": "10.1090/s0002-9947-1970-0259289-x", - "nodeyear": 1970, - "ref-by-count": 154, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1019460196", - "attributes": { - "title": "Quasi-periodic states of an oscillatory hamiltonian", - "doi": "10.1080/00268976900101141", - "nodeyear": 1969, - "ref-by-count": 41, - "is_input_DOI": false, - "category_for": "03:0.60;02:0.40", - "level": "ref_l2" - } - }, - { - "id": "pub.1054019943", - "attributes": { - "title": "A. Mostowski and M. Stark, Introduction to Higher Algebra (Pergamon Press, Oxford, 1964), 474 pp., 45s.", - "doi": "10.1017/s0013091500012888", - "nodeyear": 1969, - "ref-by-count": 4, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1028237179", - "attributes": { - "title": "SU(1,1) quasi-spin formalism of the many-boson system in a spherical field", - "doi": "10.1016/0003-4916(68)90184-x", - "nodeyear": 1968, - "ref-by-count": 83, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1024981283", - "attributes": { - "title": "Two-nucleon transfer and pairing phase transition", - "doi": "10.1016/0375-9474(68)90718-5", - "nodeyear": 1968, - "ref-by-count": 38, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1048074289", - "attributes": { - "title": "Temperature dependence near phase transitions in classical and quant. mech. canonical statistics", - "doi": "10.1007/bf01326224", - "nodeyear": 1967, - "ref-by-count": 61, - "is_input_DOI": false, - "category_for": "09:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1062243952", - "attributes": { - "title": "Handbook of Mathematical Functions", - "doi": "10.1119/1.1972842", - "nodeyear": 1966, - "ref-by-count": 16750, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1060768363", - "attributes": { - "title": "New Mechanism for Superconductivity", - "doi": "10.1103/physrevlett.15.524", - "nodeyear": 1965, - "ref-by-count": 567, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1032128187", - "attributes": { - "title": "Expansion of the Campbell\u2010Baker\u2010Hausdorff formula by computer", - "doi": "10.1002/cpa.3160180111", - "nodeyear": 1965, - "ref-by-count": 28, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1003267521", - "attributes": { - "title": "Levels of Sm152 excited in the Sm150 (t, p) reaction", - "doi": "10.1016/0031-9163(65)91047-4", - "nodeyear": 1965, - "ref-by-count": 70, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1060429472", - "attributes": { - "title": "Observations of Transitions Between Stationary States in a Rotating Magnetic Field", - "doi": "10.1103/physrev.136.a35", - "nodeyear": 1964, - "ref-by-count": 13, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1017315055", - "attributes": { - "title": "Electron correlations in narrow energy bands", - "doi": "10.1098/rspa.1963.0204", - "nodeyear": 1963, - "ref-by-count": 5147, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060427420", - "attributes": { - "title": "Coherent and Incoherent States of the Radiation Field", - "doi": "10.1103/physrev.131.2766", - "nodeyear": 1963, - "ref-by-count": 5175, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1057900505", - "attributes": { - "title": "Nuclear Shell Theory", - "doi": "10.1063/1.3051142", - "nodeyear": 1963, - "ref-by-count": 764, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1057791192", - "attributes": { - "title": "Parameter Differentiation of Quantum\u2010Mechanical Linear Operators", - "doi": "10.1063/1.1724318", - "nodeyear": 1963, - "ref-by-count": 23, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1057796022", - "attributes": { - "title": "Some Causes of Resonant Frequency Shifts in Atomic Beam Machines. I. Shifts Due to Other Frequencies of Excitation", - "doi": "10.1063/1.1729536", - "nodeyear": 1963, - "ref-by-count": 58, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060838113", - "attributes": { - "title": "Effective Interactions and Coupling Schemes in Nuclei", - "doi": "10.1103/revmodphys.34.704", - "nodeyear": 1962, - "ref-by-count": 285, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1057773719", - "attributes": { - "title": "Statistical Theory of the Energy Levels of Complex Systems. I", - "doi": "10.1063/1.1703773", - "nodeyear": 1962, - "ref-by-count": 1428, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1002878811", - "attributes": { - "title": "Pairing forces and nuclear collective motion", - "doi": "10.1016/0003-4916(61)90008-2", - "nodeyear": 1961, - "ref-by-count": 238, - "is_input_DOI": false, - "category_for": "01:0.50;02:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1057797824", - "attributes": { - "title": "Classical and Quantum Mechanical Hypervirial Theorems", - "doi": "10.1063/1.1731427", - "nodeyear": 1960, - "ref-by-count": 296, - "is_input_DOI": false, - "category_for": "09:0.33;02:0.33;03:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1041734929", - "attributes": { - "title": "Quantum effects near a barrier maximum", - "doi": "10.1016/0003-4916(59)90025-9", - "nodeyear": 1959, - "ref-by-count": 181, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1026186494", - "attributes": { - "title": "L. D. Landau and E. M. Lifshitz, Quantum Mechanics, Non\u2010Relativistic Theory. Volume 3 of a Course of Theoretical Physics. Authorized Translation from the Russian by J. B. Sykes and J. S. Bell. XII + 515 S. m. 51 Abb. London\u2010Paris 1958. Pergamon Press. Preis geb. 80,\u2014 s", - "doi": "10.1002/zamm.19590390514", - "nodeyear": 1959, - "ref-by-count": 1752, - "is_input_DOI": false, - "category_for": "01:0.50;09:0.50", - "level": "ref_l2" - } - }, - { - "id": "pub.1057789554", - "attributes": { - "title": "Geometrical Representation of the Schr\u00f6dinger Equation for Solving Maser Problems", - "doi": "10.1063/1.1722572", - "nodeyear": 1957, - "ref-by-count": 891, - "is_input_DOI": false, - "category_for": "01:0.33;02:0.33;09:0.33", - "level": "ref_l2" - } - }, - { - "id": "pub.1060417615", - "attributes": { - "title": "Surface Oscillations in Even-Even Nuclei", - "doi": "10.1103/physrev.102.788", - "nodeyear": 1956, - "ref-by-count": 618, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1060416616", - "attributes": { - "title": "Resonance Transitions Induced by Perturbations at Two or More Different Frequencies", - "doi": "10.1103/physrev.100.1191", - "nodeyear": 1955, - "ref-by-count": 145, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060416861", - "attributes": { - "title": "Stark Effect in Rapidly Varying Fields", - "doi": "10.1103/physrev.100.703", - "nodeyear": 1955, - "ref-by-count": 1425, - "is_input_DOI": false, - "category_for": "10:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060464038", - "attributes": { - "title": "Resonance Transitions in Molecular Beam Experiments. I. General Theory of Transitions in a Rotating Magnetic Field", - "doi": "10.1103/physrev.99.1274", - "nodeyear": 1955, - "ref-by-count": 126, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1011703040", - "attributes": { - "title": "On the exponential solution of differential equations for a linear operator", - "doi": "10.1002/cpa.3160070404", - "nodeyear": 1954, - "ref-by-count": 1594, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060837536", - "attributes": { - "title": "Use of Rotating Coordinates in Magnetic Resonance Problems", - "doi": "10.1103/revmodphys.26.167", - "nodeyear": 1954, - "ref-by-count": 331, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1057012353", - "attributes": { - "title": "Sur le probl\u00e8me des r\u00e9sonances entre plusieurs niveaux dans un ensemble d'atomes orient\u00e9s", - "doi": "10.1051/jphysrad:01954001504025100", - "nodeyear": 1954, - "ref-by-count": 38, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1060461257", - "attributes": { - "title": "Mixed Configurations in Nuclei", - "doi": "10.1103/physrev.92.1211", - "nodeyear": 1953, - "ref-by-count": 215, - "is_input_DOI": false, - "category_for": "17:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060460126", - "attributes": { - "title": "The Occurrence of Singularities in the Elastic Frequency Distribution of a Crystal", - "doi": "10.1103/physrev.89.1189", - "nodeyear": 1953, - "ref-by-count": 1058, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060459526", - "attributes": { - "title": "Statistical Theory of Equations of State and Phase Transitions. II. Lattice Gas and Ising Model", - "doi": "10.1103/physrev.87.410", - "nodeyear": 1952, - "ref-by-count": 1652, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060456070", - "attributes": { - "title": "Nuclear Configurations in the Spin-Orbit Coupling Model. I. Empirical Evidence", - "doi": "10.1103/physrev.78.16", - "nodeyear": 1950, - "ref-by-count": 449, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1000891726", - "attributes": { - "title": "XXXI. The structure of an electromagnetic field in the neighbourhood of a cusp of a caustic", - "doi": "10.1080/14786444608561335", - "nodeyear": 1946, - "ref-by-count": 289, - "is_input_DOI": false, - "category_for": "01:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060451198", - "attributes": { - "title": "On the Theory of the Magnetic Resonance Method of Determining Nuclear Moments", - "doi": "10.1103/physrev.58.1061", - "nodeyear": 1940, - "ref-by-count": 37, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060451040", - "attributes": { - "title": "Magnetic Resonance for Nonrotating Fields", - "doi": "10.1103/physrev.57.522", - "nodeyear": 1940, - "ref-by-count": 960, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060450736", - "attributes": { - "title": "Forces in Molecules", - "doi": "10.1103/physrev.56.340", - "nodeyear": 1939, - "ref-by-count": 2944, - "is_input_DOI": false, - "category_for": "03:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1060449417", - "attributes": { - "title": "On the Connection Formulas and the Solutions of the Wave Equation", - "doi": "10.1103/physrev.51.669", - "nodeyear": 1937, - "ref-by-count": 801, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - }, - { - "id": "pub.1060449414", - "attributes": { - "title": "Space Quantization in a Gyrating Magnetic Field", - "doi": "10.1103/physrev.51.652", - "nodeyear": 1937, - "ref-by-count": 1235, - "is_input_DOI": false, - "category_for": "02:1.00", - "level": "ref_l2" - } - }, - { - "id": "pub.1020033193", - "attributes": { - "title": "Atomi orientati in campo magnetico variabile", - "doi": "10.1007/bf02960953", - "nodeyear": 1932, - "ref-by-count": 770, - "is_input_DOI": false, - "category_for": "00:1", - "level": "ref_l2" - } - } - ], - "edges": [ - { - "source": "pub.1010926410", - "target": "pub.1039829503", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1024402227", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1060831320", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1041909998", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1032579586", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1059076073", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1008158272", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1060741752", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1026356533", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1008126854", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1060839703", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1059079802", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1048699443", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1004858858", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1025472474", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1060810429", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1059069780", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1062233668", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1042734315", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1014751446", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1014050295", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1060500239", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1041856979", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1007741542", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1059070056", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1017250213", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1034025717", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1045564126", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1048928815", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1060507439", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1032795711", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1062466552", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1060759314", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1049262570", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1021560322", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1039860202", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1050389361", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1060485026", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1010926410", - "target": "pub.1060430850", - "attributes": { - "year": 2014, - "level": "ref_l1" - } - }, - { - "source": "pub.1144412825", - "target": "pub.1010926410", - "attributes": { - "year": 2022, - "level": "cite_l1" - } - }, - { - "source": "pub.1144210477", - "target": "pub.1010926410", - "attributes": { - "year": 2021, - "level": "cite_l1" - } - }, - { - "source": "pub.1143466025", - "target": "pub.1010926410", - "attributes": { - "year": 2021, - "level": "cite_l1" - } - }, - { - "source": "pub.1144437177", - "target": "pub.1010926410", - "attributes": { - "year": 2021, - "level": "cite_l1" - } - }, - { - "source": "pub.1141370501", - "target": "pub.1010926410", - "attributes": { - "year": 2021, - "level": "cite_l1" - } - }, - { - "source": "pub.1141139712", - "target": "pub.1010926410", - "attributes": { - "year": 2021, - "level": "cite_l1" - } - }, - { - "source": "pub.1144432008", - "target": "pub.1010926410", - "attributes": { - "year": 2021, - "level": "cite_l1" - } - }, - { - "source": "pub.1138795800", - "target": "pub.1010926410", - "attributes": { - "year": 2021, - "level": "cite_l1" - } - }, - { - "source": "pub.1138581779", - "target": "pub.1010926410", - "attributes": { - "year": 2021, - "level": "cite_l1" - } - }, - { - "source": "pub.1144435924", - "target": "pub.1010926410", - "attributes": { - "year": 2021, - "level": "cite_l1" - } - }, - { - "source": "pub.1136498164", - "target": "pub.1010926410", - "attributes": { - "year": 2021, - "level": "cite_l1" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1010926410", - "attributes": { - "year": 2021, - "level": "cite_l1" - } - }, - { - "source": "pub.1136299609", - "target": "pub.1010926410", - "attributes": { - "year": 2021, - "level": "cite_l1" - } - }, - { - "source": "pub.1132677751", - "target": "pub.1010926410", - "attributes": { - "year": 2021, - "level": "cite_l1" - } - }, - { - "source": "pub.1129534483", - "target": "pub.1010926410", - "attributes": { - "year": 2020, - "level": "cite_l1" - } - }, - { - "source": "pub.1129066525", - "target": "pub.1010926410", - "attributes": { - "year": 2020, - "level": "cite_l1" - } - }, - { - "source": "pub.1126263310", - "target": "pub.1010926410", - "attributes": { - "year": 2020, - "level": "cite_l1" - } - }, - { - "source": "pub.1121827528", - "target": "pub.1010926410", - "attributes": { - "year": 2019, - "level": "cite_l1" - } - }, - { - "source": "pub.1120642228", - "target": "pub.1010926410", - "attributes": { - "year": 2019, - "level": "cite_l1" - } - }, - { - "source": "pub.1121123255", - "target": "pub.1010926410", - "attributes": { - "year": 2019, - "level": "cite_l1" - } - }, - { - "source": "pub.1120846773", - "target": "pub.1010926410", - "attributes": { - "year": 2019, - "level": "cite_l1" - } - }, - { - "source": "pub.1120342145", - "target": "pub.1010926410", - "attributes": { - "year": 2019, - "level": "cite_l1" - } - }, - { - "source": "pub.1117411673", - "target": "pub.1010926410", - "attributes": { - "year": 2019, - "level": "cite_l1" - } - }, - { - "source": "pub.1107951663", - "target": "pub.1010926410", - "attributes": { - "year": 2018, - "level": "cite_l1" - } - }, - { - "source": "pub.1105752007", - "target": "pub.1010926410", - "attributes": { - "year": 2018, - "level": "cite_l1" - } - }, - { - "source": "pub.1099619049", - "target": "pub.1010926410", - "attributes": { - "year": 2017, - "level": "cite_l1" - } - }, - { - "source": "pub.1092024589", - "target": "pub.1010926410", - "attributes": { - "year": 2017, - "level": "cite_l1" - } - }, - { - "source": "pub.1090980852", - "target": "pub.1010926410", - "attributes": { - "year": 2017, - "level": "cite_l1" - } - }, - { - "source": "pub.1090697089", - "target": "pub.1010926410", - "attributes": { - "year": 2017, - "level": "cite_l1" - } - }, - { - "source": "pub.1085593414", - "target": "pub.1010926410", - "attributes": { - "year": 2017, - "level": "cite_l1" - } - }, - { - "source": "pub.1059133328", - "target": "pub.1010926410", - "attributes": { - "year": 2017, - "level": "cite_l1" - } - }, - { - "source": "pub.1048482410", - "target": "pub.1010926410", - "attributes": { - "year": 2017, - "level": "cite_l1" - } - }, - { - "source": "pub.1060766918", - "target": "pub.1010926410", - "attributes": { - "year": 2016, - "level": "cite_l1" - } - }, - { - "source": "pub.1060750764", - "target": "pub.1010926410", - "attributes": { - "year": 2016, - "level": "cite_l1" - } - }, - { - "source": "pub.1060516500", - "target": "pub.1010926410", - "attributes": { - "year": 2016, - "level": "cite_l1" - } - }, - { - "source": "pub.1059005118", - "target": "pub.1010926410", - "attributes": { - "year": 2016, - "level": "cite_l1" - } - }, - { - "source": "pub.1060516111", - "target": "pub.1010926410", - "attributes": { - "year": 2016, - "level": "cite_l1" - } - }, - { - "source": "pub.1060680986", - "target": "pub.1010926410", - "attributes": { - "year": 2016, - "level": "cite_l1" - } - }, - { - "source": "pub.1060649865", - "target": "pub.1010926410", - "attributes": { - "year": 2016, - "level": "cite_l1" - } - }, - { - "source": "pub.1060514338", - "target": "pub.1010926410", - "attributes": { - "year": 2015, - "level": "cite_l1" - } - }, - { - "source": "pub.1059004548", - "target": "pub.1010926410", - "attributes": { - "year": 2015, - "level": "cite_l1" - } - }, - { - "source": "pub.1059136608", - "target": "pub.1010926410", - "attributes": { - "year": 2015, - "level": "cite_l1" - } - }, - { - "source": "pub.1010705109", - "target": "pub.1010926410", - "attributes": { - "year": 2015, - "level": "cite_l1" - } - }, - { - "source": "pub.1032825147", - "target": "pub.1010926410", - "attributes": { - "year": 2015, - "level": "cite_l1" - } - }, - { - "source": "pub.1036861519", - "target": "pub.1010926410", - "attributes": { - "year": 2015, - "level": "cite_l1" - } - }, - { - "source": "pub.1039964510", - "target": "pub.1010926410", - "attributes": { - "year": 2014, - "level": "cite_l1" - } - }, - { - "source": "pub.1003966050", - "target": "pub.1010926410", - "attributes": { - "year": 2014, - "level": "cite_l1" - } - }, - { - "source": "pub.1060512752", - "target": "pub.1010926410", - "attributes": { - "year": 2014, - "level": "cite_l1" - } - }, - { - "source": "pub.1145750437", - "target": "pub.1132677751", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1146014202", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1146014202", - "target": "pub.1129534483", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145897843", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145440026", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145430770", - "target": "pub.1060766918", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145506720", - "target": "pub.1105752007", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145372424", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145280638", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145273436", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145213934", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145849886", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145849886", - "target": "pub.1085593414", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145849842", - "target": "pub.1060516500", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145823845", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145788811", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145754902", - "target": "pub.1060766918", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145754902", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145754886", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145754849", - "target": "pub.1144412825", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145754842", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145668053", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145636450", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145438375", - "target": "pub.1059133328", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145407409", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145168134", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144652253", - "target": "pub.1141370501", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144652253", - "target": "pub.1134894421", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144652253", - "target": "pub.1090697089", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144652253", - "target": "pub.1105752007", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145404710", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145130056", - "target": "pub.1090697089", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145130056", - "target": "pub.1060516111", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145130056", - "target": "pub.1060514338", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145130056", - "target": "pub.1134894421", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144504433", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145011775", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145032383", - "target": "pub.1126263310", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144661259", - "target": "pub.1129534483", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144661259", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144431665", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144412825", - "target": "pub.1036861519", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144412825", - "target": "pub.1090980852", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144412825", - "target": "pub.1092024589", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144412825", - "target": "pub.1120342145", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144412825", - "target": "pub.1090697089", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144412825", - "target": "pub.1060516111", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144412825", - "target": "pub.1138795800", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144412825", - "target": "pub.1105752007", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144412825", - "target": "pub.1132677751", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144412825", - "target": "pub.1060750764", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144412825", - "target": "pub.1134894421", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144412825", - "target": "pub.1117411673", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144412825", - "target": "pub.1060514338", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1146014238", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145130013", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145077099", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145077057", - "target": "pub.1085593414", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145042826", - "target": "pub.1121123255", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145016796", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144825837", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144625101", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144504676", - "target": "pub.1060766918", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144370522", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144370491", - "target": "pub.1060766918", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144370491", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144370491", - "target": "pub.1085593414", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1145001907", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1144437688", - "target": "pub.1032825147", - "attributes": { - "year": 2022, - "level": "cite_l2" - } - }, - { - "source": "pub.1143938533", - "target": "pub.1060766918", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144267107", - "target": "pub.1060514338", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144237217", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144210477", - "target": "pub.1134894421", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144210477", - "target": "pub.1039964510", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144210477", - "target": "pub.1120342145", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144210477", - "target": "pub.1121827528", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144210477", - "target": "pub.1117411673", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144210477", - "target": "pub.1136299609", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144210477", - "target": "pub.1138795800", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144210477", - "target": "pub.1092024589", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144210477", - "target": "pub.1105752007", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144210477", - "target": "pub.1010705109", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144176750", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144500315", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144112210", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144057503", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143844860", - "target": "pub.1141139712", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143844860", - "target": "pub.1134894421", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143844860", - "target": "pub.1036861519", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143777724", - "target": "pub.1059133328", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143745319", - "target": "pub.1121827528", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143725448", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144210501", - "target": "pub.1060516111", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144210501", - "target": "pub.1134894421", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144210501", - "target": "pub.1141370501", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144210501", - "target": "pub.1138795800", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144210501", - "target": "pub.1117411673", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144115960", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144115499", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143939848", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143844418", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143724565", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136420764", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143455107", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1142733768", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143320265", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1142441911", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1142441613", - "target": "pub.1085593414", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1142424779", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143466025", - "target": "pub.1134894421", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143466025", - "target": "pub.1121827528", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143466025", - "target": "pub.1105752007", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143466025", - "target": "pub.1138795800", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143466025", - "target": "pub.1129066525", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143466025", - "target": "pub.1060750764", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143466025", - "target": "pub.1138581779", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143466025", - "target": "pub.1060516500", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143466025", - "target": "pub.1060516111", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143466025", - "target": "pub.1117411673", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143466025", - "target": "pub.1060514338", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143466025", - "target": "pub.1120342145", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143042212", - "target": "pub.1060766918", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143042212", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1142911413", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1142728786", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1142661877", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1142589015", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1142577463", - "target": "pub.1120642228", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1142435873", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1142330688", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140972911", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1139312982", - "target": "pub.1132677751", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1139312982", - "target": "pub.1134894421", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1143151380", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141523252", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1142019154", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141572181", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1142000959", - "target": "pub.1121827528", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141928574", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141928574", - "target": "pub.1136299609", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141852620", - "target": "pub.1085593414", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141852620", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141763682", - "target": "pub.1120342145", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144433670", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141641422", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141277687", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1142252018", - "target": "pub.1060516500", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1142248564", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141918917", - "target": "pub.1060766918", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141918911", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141886712", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141886629", - "target": "pub.1121827528", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141886629", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141793655", - "target": "pub.1134894421", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141423415", - "target": "pub.1090697089", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144437177", - "target": "pub.1060514338", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144437177", - "target": "pub.1090697089", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144437177", - "target": "pub.1092024589", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144437177", - "target": "pub.1036861519", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144437177", - "target": "pub.1132677751", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144437177", - "target": "pub.1060516111", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144437177", - "target": "pub.1105752007", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144437177", - "target": "pub.1060750764", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144437177", - "target": "pub.1117411673", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144437177", - "target": "pub.1090980852", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144437177", - "target": "pub.1138795800", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141424092", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141081318", - "target": "pub.1090980852", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141370501", - "target": "pub.1132677751", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141370501", - "target": "pub.1136299609", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141370501", - "target": "pub.1138795800", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141370501", - "target": "pub.1090697089", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141370501", - "target": "pub.1059136608", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141370501", - "target": "pub.1092024589", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141370501", - "target": "pub.1003966050", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141370501", - "target": "pub.1060516500", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141370501", - "target": "pub.1134894421", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141370501", - "target": "pub.1060516111", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141370501", - "target": "pub.1060514338", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141370501", - "target": "pub.1105752007", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141370501", - "target": "pub.1121827528", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141198298", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141139712", - "target": "pub.1090697089", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141139712", - "target": "pub.1092024589", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141139712", - "target": "pub.1120342145", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141139712", - "target": "pub.1134894421", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141139712", - "target": "pub.1060514338", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141139712", - "target": "pub.1132677751", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141139712", - "target": "pub.1036861519", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141139712", - "target": "pub.1105752007", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141139712", - "target": "pub.1136299609", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141139712", - "target": "pub.1060516111", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141139712", - "target": "pub.1060516500", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141139712", - "target": "pub.1138795800", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141117728", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141039563", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141039539", - "target": "pub.1136299609", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141007405", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140992787", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140946090", - "target": "pub.1085593414", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140946090", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140903868", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144436951", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141458068", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141330553", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141330548", - "target": "pub.1134894421", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141330548", - "target": "pub.1138795800", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141082269", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141082265", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140946998", - "target": "pub.1085593414", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140875048", - "target": "pub.1060512752", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140813822", - "target": "pub.1060766918", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1139687004", - "target": "pub.1121827528", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140631120", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140376339", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140327645", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140210127", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140251168", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140149233", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140780393", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140748154", - "target": "pub.1060516111", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140595261", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140595176", - "target": "pub.1090697089", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140449264", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140411348", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140385244", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140385244", - "target": "pub.1060516111", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140343664", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1139432247", - "target": "pub.1085593414", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1139432247", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1139715974", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1139696368", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1139686944", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137941137", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144432008", - "target": "pub.1060514338", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144432008", - "target": "pub.1090697089", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144432008", - "target": "pub.1092024589", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144432008", - "target": "pub.1036861519", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144432008", - "target": "pub.1132677751", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144432008", - "target": "pub.1060516111", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144432008", - "target": "pub.1105752007", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144432008", - "target": "pub.1060750764", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144432008", - "target": "pub.1120342145", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144432008", - "target": "pub.1117411673", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144432008", - "target": "pub.1090980852", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1139359212", - "target": "pub.1120342145", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141244634", - "target": "pub.1092024589", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140043181", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1139809449", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1139809443", - "target": "pub.1085593414", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1139801116", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1139365607", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1139320696", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1139210985", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1139155188", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1139098613", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138795800", - "target": "pub.1117411673", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138795800", - "target": "pub.1036861519", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138795800", - "target": "pub.1134894421", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138795800", - "target": "pub.1060514338", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138795800", - "target": "pub.1105752007", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138695988", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1139212437", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138955510", - "target": "pub.1121827528", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138886959", - "target": "pub.1121827528", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138581779", - "target": "pub.1003966050", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138581779", - "target": "pub.1059136608", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138581779", - "target": "pub.1134894421", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138581779", - "target": "pub.1117411673", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138581779", - "target": "pub.1129066525", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138581779", - "target": "pub.1060516500", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137877758", - "target": "pub.1129066525", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137877758", - "target": "pub.1134894421", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138289216", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141651369", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138216900", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138186330", - "target": "pub.1105752007", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144435924", - "target": "pub.1060514338", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144435924", - "target": "pub.1090697089", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144435924", - "target": "pub.1092024589", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144435924", - "target": "pub.1036861519", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144435924", - "target": "pub.1132677751", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144435924", - "target": "pub.1060516111", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144435924", - "target": "pub.1105752007", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144435924", - "target": "pub.1060750764", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144435924", - "target": "pub.1120342145", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144435924", - "target": "pub.1117411673", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144435924", - "target": "pub.1090980852", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138114367", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138249357", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138186281", - "target": "pub.1085593414", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138114325", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137890988", - "target": "pub.1090980852", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137890988", - "target": "pub.1060516111", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137890988", - "target": "pub.1060514338", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137773392", - "target": "pub.1048482410", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134453264", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137261348", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137484959", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137437656", - "target": "pub.1132677751", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136592478", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137167395", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137494538", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137491775", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137490808", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137410827", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137311787", - "target": "pub.1085593414", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137235025", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137168785", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137035608", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136994042", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136986948", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136986948", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136721709", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136701453", - "target": "pub.1060766918", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136701453", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136666903", - "target": "pub.1060516500", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136666903", - "target": "pub.1060516111", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136666903", - "target": "pub.1060514338", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136666903", - "target": "pub.1092024589", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136666903", - "target": "pub.1136299609", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136666903", - "target": "pub.1134894421", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134743337", - "target": "pub.1117411673", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134743337", - "target": "pub.1060680986", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136498164", - "target": "pub.1121827528", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1092024589", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1099619049", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1120846773", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1060680986", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1010705109", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1090697089", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1090980852", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1126263310", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1036861519", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1120342145", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1117411673", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1129066525", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1060750764", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1060514338", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1121827528", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1059005118", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1132677751", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1003966050", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1039964510", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1060516111", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1105752007", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1060516500", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1059136608", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134894421", - "target": "pub.1060649865", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136367994", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136299609", - "target": "pub.1117411673", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136299609", - "target": "pub.1120342145", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136299609", - "target": "pub.1132677751", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136299609", - "target": "pub.1036861519", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136299609", - "target": "pub.1090980852", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136299609", - "target": "pub.1060750764", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136299609", - "target": "pub.1090697089", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136299609", - "target": "pub.1092024589", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136299609", - "target": "pub.1060516500", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136299609", - "target": "pub.1060516111", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136299609", - "target": "pub.1060514338", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136299609", - "target": "pub.1105752007", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136299609", - "target": "pub.1121827528", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136655132", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136504030", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136477967", - "target": "pub.1117411673", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136477967", - "target": "pub.1136498164", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136477967", - "target": "pub.1134894421", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136477967", - "target": "pub.1060516111", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136477967", - "target": "pub.1060514338", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136477967", - "target": "pub.1105752007", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136417273", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136414044", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136226159", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136043176", - "target": "pub.1121827528", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1135722934", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1133448902", - "target": "pub.1105752007", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1132677751", - "target": "pub.1120342145", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1132677751", - "target": "pub.1059136608", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1132677751", - "target": "pub.1092024589", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1132677751", - "target": "pub.1134894421", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1132677751", - "target": "pub.1060516111", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1132677751", - "target": "pub.1060514338", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1132677751", - "target": "pub.1060516500", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1132677751", - "target": "pub.1105752007", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1135442248", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1135329747", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1135194875", - "target": "pub.1121827528", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140345559", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1135141218", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1140343596", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1135773784", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1135472070", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1135372133", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1135372133", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1135327462", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1135309838", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1135306894", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1135033325", - "target": "pub.1085593414", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1135033325", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1132630990", - "target": "pub.1060750764", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1132630990", - "target": "pub.1060516500", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1130120687", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134736715", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134729998", - "target": "pub.1121827528", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134295650", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134295650", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1136535762", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1135035980", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134951348", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134796271", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134708221", - "target": "pub.1085593414", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1134708221", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1133369672", - "target": "pub.1117411673", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1133369672", - "target": "pub.1059004548", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1144696405", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1141996449", - "target": "pub.1121123255", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1138681817", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1137164603", - "target": "pub.1032825147", - "attributes": { - "year": 2021, - "level": "cite_l2" - } - }, - { - "source": "pub.1132415037", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1133653821", - "target": "pub.1060766918", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1133434712", - "target": "pub.1060516111", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1132597664", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1133361819", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1133346206", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1133100286", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1134158402", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1134040199", - "target": "pub.1090697089", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1134040199", - "target": "pub.1060516500", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1134040199", - "target": "pub.1060516111", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1134040199", - "target": "pub.1060514338", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1134037611", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1134035516", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1133997345", - "target": "pub.1085593414", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1133741565", - "target": "pub.1085593414", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1133735060", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1133735060", - "target": "pub.1060766918", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1133499708", - "target": "pub.1085593414", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1133402404", - "target": "pub.1060516500", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1133344182", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1133099711", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1132237880", - "target": "pub.1105752007", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1132036387", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1131329755", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1133080576", - "target": "pub.1121827528", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1133125125", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1132781598", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1132635554", - "target": "pub.1121123255", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1132626689", - "target": "pub.1121827528", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1132300850", - "target": "pub.1121123255", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1132300850", - "target": "pub.1060516111", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1132266415", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1132781568", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1132682732", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1132672783", - "target": "pub.1060514338", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1132495853", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1132252119", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1132060808", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1131969118", - "target": "pub.1060766918", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1130243954", - "target": "pub.1060766918", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1131841249", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1131841249", - "target": "pub.1060766918", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1140347748", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1132055741", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1131923946", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1131725038", - "target": "pub.1085593414", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1131633965", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1131535042", - "target": "pub.1085593414", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1131497997", - "target": "pub.1121827528", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1131390335", - "target": "pub.1085593414", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1131390335", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1130765968", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1128676541", - "target": "pub.1060680986", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1131177201", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1131131373", - "target": "pub.1060516111", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1131131373", - "target": "pub.1090697089", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1131100748", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1130030918", - "target": "pub.1120342145", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1130753379", - "target": "pub.1090697089", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1130753379", - "target": "pub.1105752007", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1130315991", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1130688900", - "target": "pub.1121827528", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1131193925", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1131193618", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1131100771", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1130836894", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1130756838", - "target": "pub.1121123255", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1130750198", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1130316025", - "target": "pub.1090980852", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1124910985", - "target": "pub.1121827528", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1130469797", - "target": "pub.1085593414", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1130394801", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1130268705", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1130214677", - "target": "pub.1060516111", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1130214677", - "target": "pub.1060514338", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1129902361", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1129855599", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1130392310", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1129926643", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1129685555", - "target": "pub.1060766918", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1129685555", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1129594568", - "target": "pub.1121123255", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1129534483", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1129384214", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1129066525", - "target": "pub.1117411673", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1129066525", - "target": "pub.1059136608", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1129066525", - "target": "pub.1003966050", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1129066525", - "target": "pub.1121827528", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1128974254", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1129713716", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1129492912", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1129063470", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1128941497", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1128912140", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1128533067", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1128836880", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1125908542", - "target": "pub.1120342145", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1128827266", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1128505545", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1129532989", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1128466326", - "target": "pub.1126263310", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1128416461", - "target": "pub.1060516500", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1128125903", - "target": "pub.1060766918", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1128741464", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1128303210", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1128253343", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1128250379", - "target": "pub.1060766918", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1128246725", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1128224551", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1128130936", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127296857", - "target": "pub.1121827528", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127296857", - "target": "pub.1060750764", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127296857", - "target": "pub.1105752007", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127987694", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127977347", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127865614", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127470058", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127470058", - "target": "pub.1107951663", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127470058", - "target": "pub.1010705109", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127517958", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127358108", - "target": "pub.1060649865", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127346740", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127989066", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127955024", - "target": "pub.1085593414", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127897454", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127889093", - "target": "pub.1060514338", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127764217", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127758910", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127625202", - "target": "pub.1090980852", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127625202", - "target": "pub.1039964510", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127607114", - "target": "pub.1085593414", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127607114", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127358045", - "target": "pub.1121123255", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127358045", - "target": "pub.1121827528", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1125292836", - "target": "pub.1121123255", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1126383906", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1125977593", - "target": "pub.1059133328", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127630356", - "target": "pub.1121827528", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127650081", - "target": "pub.1085593414", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127130950", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1126727524", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1126480743", - "target": "pub.1060766918", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1126271157", - "target": "pub.1121827528", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1126269333", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1126263310", - "target": "pub.1059004548", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1126263310", - "target": "pub.1121827528", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127947148", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1127515489", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1126759415", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1126173583", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1126057889", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1123928512", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1125920858", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1125550793", - "target": "pub.1121123255", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1126915081", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1126909693", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1125953276", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1125497800", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1125326068", - "target": "pub.1060766918", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1125326068", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1125325450", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1125160480", - "target": "pub.1085593414", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1125157056", - "target": "pub.1121123255", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1124776377", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1125164136", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1125161664", - "target": "pub.1060766918", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1125153368", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1121624158", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1124462573", - "target": "pub.1060514338", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1124409613", - "target": "pub.1085593414", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1123624596", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1124230276", - "target": "pub.1060514338", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1124230253", - "target": "pub.1120342145", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1124230253", - "target": "pub.1121827528", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1124230253", - "target": "pub.1060516111", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1124230253", - "target": "pub.1060514338", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1124230253", - "target": "pub.1105752007", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1124254326", - "target": "pub.1121827528", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1124254326", - "target": "pub.1060516111", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1124048582", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1125053995", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1124831533", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1124103171", - "target": "pub.1060766918", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1123986522", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1123351695", - "target": "pub.1032825147", - "attributes": { - "year": 2020, - "level": "cite_l2" - } - }, - { - "source": "pub.1123673879", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1123430435", - "target": "pub.1121123255", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1123097339", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1123643952", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1123446111", - "target": "pub.1059133328", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1123268268", - "target": "pub.1090980852", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1123268268", - "target": "pub.1059136608", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1123268268", - "target": "pub.1039964510", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1123262658", - "target": "pub.1120342145", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1123262658", - "target": "pub.1036861519", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1123262658", - "target": "pub.1090697089", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1123262658", - "target": "pub.1059136608", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1123262658", - "target": "pub.1092024589", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1123262658", - "target": "pub.1060516111", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1123262658", - "target": "pub.1060514338", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1123262658", - "target": "pub.1105752007", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1123187479", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1123187479", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122945773", - "target": "pub.1121123255", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122948207", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122908545", - "target": "pub.1060766918", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122419408", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122364137", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122299651", - "target": "pub.1010705109", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122298943", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122260988", - "target": "pub.1048482410", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122260988", - "target": "pub.1060649865", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122960341", - "target": "pub.1059133328", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122929220", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122929220", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122682309", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122560614", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122263731", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122003630", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122258473", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122233280", - "target": "pub.1060766918", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122016549", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121972957", - "target": "pub.1059004548", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121864026", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121860390", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121829677", - "target": "pub.1117411673", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120967654", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121574121", - "target": "pub.1060514338", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121574121", - "target": "pub.1060516111", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121574121", - "target": "pub.1105752007", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121497945", - "target": "pub.1060766918", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121497945", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122147311", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121992405", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121860362", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121691603", - "target": "pub.1060516500", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121454130", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121432950", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121151157", - "target": "pub.1060766918", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121123255", - "target": "pub.1010705109", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121045652", - "target": "pub.1060766918", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121045652", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121046991", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121007947", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120955481", - "target": "pub.1060516500", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120846795", - "target": "pub.1060514338", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120846795", - "target": "pub.1120846773", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120846794", - "target": "pub.1059005118", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120846794", - "target": "pub.1120846773", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120846792", - "target": "pub.1060680986", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120846778", - "target": "pub.1060514338", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120846778", - "target": "pub.1060516111", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120846773", - "target": "pub.1060680986", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120846773", - "target": "pub.1090980852", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120846773", - "target": "pub.1090697089", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120846773", - "target": "pub.1059136608", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120846773", - "target": "pub.1060516111", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120846773", - "target": "pub.1059005118", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120846773", - "target": "pub.1105752007", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120795450", - "target": "pub.1090697089", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121403245", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121334827", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1121155174", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120975898", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120721646", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120701000", - "target": "pub.1060516111", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120398331", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120211774", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120211774", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120342145", - "target": "pub.1090980852", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120342145", - "target": "pub.1036861519", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120342145", - "target": "pub.1092024589", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120342145", - "target": "pub.1060516111", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120342145", - "target": "pub.1060514338", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120342145", - "target": "pub.1090697089", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120342145", - "target": "pub.1105752007", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120310683", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120248299", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120211967", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120144828", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1129971658", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120021739", - "target": "pub.1105752007", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120025014", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1122873965", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1129960633", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1118043792", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1120033159", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1119959099", - "target": "pub.1060766918", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1119952776", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1119919209", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1119787578", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1119787578", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1119784980", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1118069090", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1118014967", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1118012672", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1117972269", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1117943417", - "target": "pub.1060766918", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1117728688", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1116648359", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1113330752", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1113236708", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1112366493", - "target": "pub.1059136608", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1117476838", - "target": "pub.1105752007", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1117346459", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1117411673", - "target": "pub.1060680986", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1117411673", - "target": "pub.1090980852", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1117411673", - "target": "pub.1060750764", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1117411673", - "target": "pub.1090697089", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1117411673", - "target": "pub.1059136608", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1117411673", - "target": "pub.1003966050", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1117411673", - "target": "pub.1060516111", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1117411673", - "target": "pub.1105752007", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1117307345", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1117164490", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1117020737", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1116850435", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1116850435", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1116136000", - "target": "pub.1060512752", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1115676205", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1115676205", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1115666769", - "target": "pub.1060512752", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1114819653", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1114044946", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1113910487", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1113910487", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1113910476", - "target": "pub.1059133328", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1114054109", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1114042284", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1110902421", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1113484172", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1113409952", - "target": "pub.1121123255", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1112781951", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1110424594", - "target": "pub.1059004548", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1110424594", - "target": "pub.1060516111", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1110424594", - "target": "pub.1060514338", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1115224353", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1114045023", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1113678661", - "target": "pub.1010705109", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1113626564", - "target": "pub.1060516500", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1113308230", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1116854479", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1111062357", - "target": "pub.1060649865", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1112264021", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1112736421", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1112736421", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1112555157", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1112555157", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1112989773", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1112941993", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1112857110", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1112687817", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1112472200", - "target": "pub.1060516500", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1112465992", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1112265114", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1112062976", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1111443711", - "target": "pub.1060750764", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1111540938", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1111440115", - "target": "pub.1105752007", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1111323071", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1111323071", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1110719005", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1112988887", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1111668834", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1111666460", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1111515569", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1111459176", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1111314608", - "target": "pub.1085593414", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1111062951", - "target": "pub.1032825147", - "attributes": { - "year": 2019, - "level": "cite_l2" - } - }, - { - "source": "pub.1110909831", - "target": "pub.1085593414", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1110787100", - "target": "pub.1060766918", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1110647887", - "target": "pub.1085593414", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1110647887", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1110455993", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1110379274", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1110363972", - "target": "pub.1060766918", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1110910541", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1110910519", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1110831877", - "target": "pub.1060766918", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1110831877", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1110708995", - "target": "pub.1085593414", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1110708995", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1110396032", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1110269247", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1110275806", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107970491", - "target": "pub.1060514338", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1110072642", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1111914501", - "target": "pub.1085593414", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1111914501", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1110266071", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1109811573", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1109804585", - "target": "pub.1060766918", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1109804585", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1108054136", - "target": "pub.1085593414", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1108034986", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107871386", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107130576", - "target": "pub.1036861519", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107130576", - "target": "pub.1092024589", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107130576", - "target": "pub.1060516111", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107130576", - "target": "pub.1105752007", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107130576", - "target": "pub.1060514338", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107306817", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107571622", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107951663", - "target": "pub.1010705109", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107951663", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107651369", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107651305", - "target": "pub.1060516500", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107350062", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107301894", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107298680", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107235090", - "target": "pub.1060516500", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1106476468", - "target": "pub.1085593414", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107130953", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1103720457", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1106352877", - "target": "pub.1060766918", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1106711291", - "target": "pub.1060516111", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1106608664", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107231743", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1106912640", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1106809654", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1106602075", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1106159222", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105306956", - "target": "pub.1060766918", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1104255664", - "target": "pub.1060766918", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1106352452", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1106412628", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1106276823", - "target": "pub.1085593414", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1106276823", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105481744", - "target": "pub.1036861519", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105481744", - "target": "pub.1090980852", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105481744", - "target": "pub.1060766918", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105481744", - "target": "pub.1060514338", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1106081003", - "target": "pub.1060766918", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105993631", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107206378", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105647673", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1106391022", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1106258757", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105855817", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105571339", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105686278", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105624464", - "target": "pub.1090697089", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105577723", - "target": "pub.1059133328", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1107278146", - "target": "pub.1085593414", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105919059", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105752007", - "target": "pub.1059136608", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105752007", - "target": "pub.1060516111", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105752007", - "target": "pub.1059005118", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105752007", - "target": "pub.1060514338", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105686214", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105672523", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105590292", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105590279", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105217433", - "target": "pub.1085593414", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1104382572", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105237498", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105229539", - "target": "pub.1003966050", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105020595", - "target": "pub.1060766918", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1104999161", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1104586548", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1104337736", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1104046499", - "target": "pub.1060766918", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1104217963", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1104046048", - "target": "pub.1085593414", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1104174226", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1103957661", - "target": "pub.1085593414", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1103891869", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1104244423", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1104186237", - "target": "pub.1092024589", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1103957640", - "target": "pub.1085593414", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1103957630", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1103799511", - "target": "pub.1092024589", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1105625178", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1103354626", - "target": "pub.1085593414", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1103354626", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1103223307", - "target": "pub.1060766918", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101044952", - "target": "pub.1060516111", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101044952", - "target": "pub.1060514338", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101270698", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1100407275", - "target": "pub.1010705109", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1100407275", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1106249535", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1106243826", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1103695948", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1103614809", - "target": "pub.1085593414", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1103567271", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1103567269", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1103567266", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1103476382", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1103285503", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101728734", - "target": "pub.1085593414", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101728734", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101728724", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101699045", - "target": "pub.1059005118", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101635473", - "target": "pub.1060516111", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101459080", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1100249419", - "target": "pub.1060766918", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101875909", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101865179", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101787426", - "target": "pub.1085593414", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101568086", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101270671", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101203202", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101164938", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101163815", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1100978693", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1086256884", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101132622", - "target": "pub.1048482410", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101046754", - "target": "pub.1060516500", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1100847489", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1100847484", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1100693529", - "target": "pub.1060680986", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1100658085", - "target": "pub.1036861519", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1100590718", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1100333755", - "target": "pub.1059005118", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1100180200", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1100757504", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1100700491", - "target": "pub.1085593414", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1100700491", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1100502468", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1100502449", - "target": "pub.1060516500", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1101180204", - "target": "pub.1059005118", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1092917025", - "target": "pub.1032825147", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1109707572", - "target": "pub.1060649865", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1109706437", - "target": "pub.1036861519", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1109706437", - "target": "pub.1003966050", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1109706437", - "target": "pub.1059136608", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1109706437", - "target": "pub.1060514338", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1109706437", - "target": "pub.1060516500", - "attributes": { - "year": 2018, - "level": "cite_l2" - } - }, - { - "source": "pub.1093034781", - "target": "pub.1059133328", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1100299734", - "target": "pub.1036861519", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1099619049", - "target": "pub.1090697089", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1099619049", - "target": "pub.1059136608", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1099619049", - "target": "pub.1060516111", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1099750796", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1101194950", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1099750800", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1093118725", - "target": "pub.1060516500", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1099862024", - "target": "pub.1060649865", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1093100577", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092756070", - "target": "pub.1060516500", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092770968", - "target": "pub.1060516111", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092770968", - "target": "pub.1060514338", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092687423", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092561474", - "target": "pub.1085593414", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092277819", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092881230", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092718053", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092642445", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092484424", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092484423", - "target": "pub.1085593414", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092484423", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091324316", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092396862", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092104621", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092104602", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092254361", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092218368", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092172298", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092104544", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092104499", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092072911", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092072895", - "target": "pub.1085593414", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092024589", - "target": "pub.1036861519", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092024589", - "target": "pub.1059136608", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092024589", - "target": "pub.1003966050", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092024589", - "target": "pub.1060516500", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092024589", - "target": "pub.1060516111", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092016824", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091629732", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091511165", - "target": "pub.1059005118", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1092035474", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091937945", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091808750", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091676677", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091655390", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091256104", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091261840", - "target": "pub.1085593414", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091081056", - "target": "pub.1060514338", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090692587", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091439255", - "target": "pub.1085593414", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091439255", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091357776", - "target": "pub.1060649865", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091268146", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091149741", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091132193", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091016901", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1086046359", - "target": "pub.1060512752", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091001773", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090980852", - "target": "pub.1036861519", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090980852", - "target": "pub.1060516111", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090980852", - "target": "pub.1060514338", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090740511", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090697089", - "target": "pub.1003966050", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090697089", - "target": "pub.1060516500", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090697089", - "target": "pub.1060516111", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090697089", - "target": "pub.1059005118", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090639115", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090124343", - "target": "pub.1060514338", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090124343", - "target": "pub.1059005118", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090547461", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1091314933", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090809058", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090639004", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090537266", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090432014", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085973336", - "target": "pub.1060516500", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090356064", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1086147780", - "target": "pub.1048482410", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1086147780", - "target": "pub.1060649865", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090727222", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090727222", - "target": "pub.1085593414", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1086037788", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085930196", - "target": "pub.1060512752", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085868342", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1102822370", - "target": "pub.1059005118", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090449453", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085918234", - "target": "pub.1060680986", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090858939", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085784151", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084176371", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085784080", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085775517", - "target": "pub.1003966050", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085775517", - "target": "pub.1060516111", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085775517", - "target": "pub.1060514338", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085775507", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085775482", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085524357", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085524341", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085593414", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085277889", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085120424", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085242099", - "target": "pub.1036861519", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085242099", - "target": "pub.1059005118", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084868052", - "target": "pub.1060649865", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1090229831", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085191011", - "target": "pub.1085593414", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1085191011", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084786597", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084786582", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084603807", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084174937", - "target": "pub.1060516500", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084007961", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084682300", - "target": "pub.1039964510", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084174915", - "target": "pub.1060516500", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084198171", - "target": "pub.1010705109", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084198121", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084197894", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084197582", - "target": "pub.1060649865", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084197545", - "target": "pub.1060766918", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084197534", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1083406696", - "target": "pub.1059004548", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1083406696", - "target": "pub.1060516111", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1083406696", - "target": "pub.1060514338", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1083935671", - "target": "pub.1036861519", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1083439843", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1083816155", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1059133328", - "target": "pub.1060516111", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1083935160", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1083717390", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1083643131", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1083522251", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1011995146", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1059164313", - "target": "pub.1036861519", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1107414917", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084604018", - "target": "pub.1060516111", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084603856", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084603654", - "target": "pub.1036861519", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084603654", - "target": "pub.1060516111", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084603654", - "target": "pub.1060514338", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1084199340", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1083506581", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1060653834", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1060517495", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1031526734", - "target": "pub.1032825147", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1048482410", - "target": "pub.1060512752", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1048482410", - "target": "pub.1060649865", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1048482410", - "target": "pub.1036861519", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1013892465", - "target": "pub.1060512752", - "attributes": { - "year": 2017, - "level": "cite_l2" - } - }, - { - "source": "pub.1060766918", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1087286925", - "target": "pub.1060516500", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060681712", - "target": "pub.1059004548", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060653553", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060653350", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060653304", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060766700", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060750764", - "target": "pub.1003966050", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060750764", - "target": "pub.1060516500", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060750764", - "target": "pub.1060516111", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060517140", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060517139", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060517109", - "target": "pub.1060512752", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1002023992", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060652562", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060516924", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060516896", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060516887", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060516756", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1059164227", - "target": "pub.1059004548", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1059164227", - "target": "pub.1060514338", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060750417", - "target": "pub.1036861519", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060750417", - "target": "pub.1060649865", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1008292555", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1059137701", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060652244", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060652210", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060652116", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060516738", - "target": "pub.1060514338", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1014532593", - "target": "pub.1036861519", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1059174523", - "target": "pub.1060649865", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060651758", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060516500", - "target": "pub.1036861519", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060516500", - "target": "pub.1059136608", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060516500", - "target": "pub.1003966050", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060516500", - "target": "pub.1060514338", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060516440", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1008230481", - "target": "pub.1060514338", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060750048", - "target": "pub.1003966050", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1052263311", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1059005118", - "target": "pub.1059004548", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060651068", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060516111", - "target": "pub.1036861519", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060516111", - "target": "pub.1060514338", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1024274677", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060765840", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1010802241", - "target": "pub.1036861519", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1010802241", - "target": "pub.1060516111", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1010802241", - "target": "pub.1060514338", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060765767", - "target": "pub.1060514338", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1062666833", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1059164050", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060765582", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1059137444", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060749720", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1045365832", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1013025567", - "target": "pub.1003966050", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060650091", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1059164027", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1065176096", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060680986", - "target": "pub.1060514338", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060649845", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060649780", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060649672", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060515586", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060515460", - "target": "pub.1003966050", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060515459", - "target": "pub.1060514338", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1017232487", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1008885136", - "target": "pub.1010705109", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1008885136", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060765248", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060765225", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1022845164", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060515226", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060749074", - "target": "pub.1036861519", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060749074", - "target": "pub.1060514338", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060649137", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060649072", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1060514903", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1049246486", - "target": "pub.1032825147", - "attributes": { - "year": 2016, - "level": "cite_l2" - } - }, - { - "source": "pub.1059136734", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1060764674", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1060514725", - "target": "pub.1036861519", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1060514696", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1036641112", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1064625019", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1027442816", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1060764456", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1060514338", - "target": "pub.1036861519", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1034517301", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1059136608", - "target": "pub.1036861519", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1059136608", - "target": "pub.1039964510", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1060764168", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1060514281", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1034661114", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1028219105", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1016473610", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1046940591", - "target": "pub.1010705109", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1060764026", - "target": "pub.1060512752", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1060514082", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1049705098", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1060763935", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1060513942", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1020950855", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1002407881", - "target": "pub.1036861519", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1032625305", - "target": "pub.1060512752", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1022791415", - "target": "pub.1060512752", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1059004792", - "target": "pub.1036861519", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1053517731", - "target": "pub.1036861519", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1046942581", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1010257037", - "target": "pub.1060512752", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1039122836", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1033596012", - "target": "pub.1032825147", - "attributes": { - "year": 2015, - "level": "cite_l2" - } - }, - { - "source": "pub.1009958864", - "target": "pub.1032825147", - "attributes": { - "year": 2014, - "level": "cite_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1003363712", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1057699225", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1057717131", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1058031840", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1024402227", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1060831320", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1048482240", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1010453004", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1006613232", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1058050263", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1060504243", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1006289352", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1010607212", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1051958598", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1058075670", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1036408635", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1011073909", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1035173735", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1060828404", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1108131266", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1060839703", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1004021375", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1045346582", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1049201712", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1060784904", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1038056243", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1029020774", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1007403980", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1017123471", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1057963818", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1035001229", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1056050981", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1058046639", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1017192838", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1006189532", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1016014950", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1057869519", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1057982297", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1019387204", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1047521083", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1058032193", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1009926257", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1018979965", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1054491307", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1058047895", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1046878062", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1015885405", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1004092630", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1020252590", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1058101157", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1000086198", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1030349669", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1026394040", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1039829503", - "target": "pub.1057929181", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1027944496", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1060506152", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1051208711", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1004826141", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1043279965", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1024402227", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1046281967", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1035787773", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1052759525", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1060443588", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1060741752", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1027689745", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1013295901", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1018731307", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1034618848", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1018266335", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1049288392", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1050389361", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1031435740", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1060500350", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1059079802", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1060743705", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1025472474", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1048139891", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1019463277", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1023876405", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1060505996", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1024129122", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1007741542", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1034025717", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1002536646", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1046023204", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1048928815", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1039643973", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1021921669", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1060507174", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1030644001", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1060508644", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1026807511", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1037335968", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1014126670", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1049262570", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1049014120", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1030627369", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1060438505", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1022219898", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1060461988", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1041879228", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1008158272", - "target": "pub.1047837644", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1007789030", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1018345323", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1051208711", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1038214559", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1043798191", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1060430850", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1041781555", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1064232873", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1029141598", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1023551219", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1011658338", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1060741752", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1021708856", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1013295901", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1026356533", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1060716437", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1034618848", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1019072925", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1048347725", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1060625484", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1020459025", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1040897292", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1014943403", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1025472474", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1032879437", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1060506382", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1062233668", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1017748089", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1060621943", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1041856979", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1010612726", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1034025717", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1027554801", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1041985067", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1021921669", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1050814349", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1052484094", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1035545882", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1005186218", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1033015118", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1037152641", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1015483129", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1060495184", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1005768866", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1029816697", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1043998630", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1032955577", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1030905705", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1060759314", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1058101157", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1028928983", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1017078538", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1014126670", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1037329755", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1039860202", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1027465833", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1032795711", - "target": "pub.1023680357", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1027944496", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1060741752", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1060467641", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1013295901", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1018731307", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1034618848", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1060500350", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1060465708", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1018429633", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1060466899", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1060779767", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1060743705", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1040293571", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1018872620", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1034025717", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1002536646", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1021921669", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1046740497", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1002860337", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1037335968", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1060759314", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1014126670", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1035787773", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1050389361", - "target": "pub.1060461988", - "attributes": { - "year": 2013, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1060756185", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1021558365", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1060758977", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1060825740", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1016807636", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1012500209", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1060759233", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1011465158", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1034025717", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1015752685", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1060752377", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1013094749", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1060839596", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1015653335", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1025519412", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1060808815", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1062458662", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1046807340", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1001441208", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1021493626", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1003953015", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1060821199", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1060839612", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1013088353", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1052164705", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1039430067", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1039526439", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1038116055", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1031310290", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1053140660", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1028628834", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1020099649", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1062466552", - "target": "pub.1031435740", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1060799033", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1034685599", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1005562834", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1063125329", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1060787963", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1043507384", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1041781555", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1004083979", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1022911870", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1015361753", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1025212910", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1059070435", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1042363867", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1030702899", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1039525977", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1050856595", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1042729374", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1048699443", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1045115933", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1018374514", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1000524935", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1019211121", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1013320119", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1003480064", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1042249380", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1030957871", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1031979890", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1007363629", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1026041336", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1019769175", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1018529463", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1063137926", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1017887827", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1050049937", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1015377513", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1044935711", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1010719555", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1060637445", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1030813584", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1014751446", - "target": "pub.1036259707", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1060506152", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1023112037", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1038797520", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1046281967", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1041781555", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1060485219", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1021708856", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1013295901", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1034618848", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1031435740", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1026487091", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1020459025", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1060461988", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1014943403", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1001765599", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1017748089", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1040293571", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1013564949", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1034025717", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1060506993", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1009145988", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1021921669", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1052484094", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1035545882", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1005186218", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1033015118", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1037152641", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1048120455", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1043998630", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1012449759", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1035787773", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1060430850", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1060759314", - "target": "pub.1007431288", - "attributes": { - "year": 2012, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1050230284", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060507227", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1051513505", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1022201659", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1025684815", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1004419214", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1016883152", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1011862816", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060834776", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1044585590", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1030131727", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060828378", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1034908465", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1000717326", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1032013208", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060501875", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1053071617", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1043414338", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1000339972", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1039875361", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060498076", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1038435541", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1004049717", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1017394305", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1009497503", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1005408468", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1001677407", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060496930", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1062937215", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060496772", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1032117943", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060692192", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1065173408", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1062449614", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1040733718", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1030554066", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1044365852", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1023876405", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060489764", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1002419553", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1007053255", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1053325657", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1013441281", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1048985306", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1007437051", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060501102", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1041840352", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1062460456", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1098732024", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1019244542", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1032459275", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1034220073", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1062451106", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1005892928", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1046586795", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060495457", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060451204", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1021091851", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1037196319", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1059137934", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1015906101", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060499456", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1019738669", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1045761502", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1023231651", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1045592513", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1021047010", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1003804610", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060465740", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060503021", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1064235153", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060812753", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1003323558", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1006013499", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1002548185", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1042812951", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1007390089", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1034324600", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060502238", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1044584359", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1024518599", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1006871668", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1109642906", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1014259920", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1011658338", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1009280350", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1042326365", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1033004759", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1062444393", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1098669586", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1049607631", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1042239422", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1001545329", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1042980616", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1029415952", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1033014139", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1005841402", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1047238674", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1007113001", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1098909552", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1002431819", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1027685238", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1021190003", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1052716647", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1034352273", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1036319695", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1049164678", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060501109", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060756621", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1025338423", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060787952", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1048839595", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1044105212", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1011656566", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1033308270", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1051173433", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1006852009", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060495708", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060486851", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1012704698", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1032609059", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1033188547", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1037722040", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060839208", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1037170495", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1041161303", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1005109695", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1042003394", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1002222149", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1053673045", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1052013666", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060492991", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1024870439", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060786848", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060478721", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1037217818", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1046531133", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1042823964", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060817691", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1037292429", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1016989667", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060490050", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060809096", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1016267052", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060825411", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1017239584", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1028284777", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060822132", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1007520534", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1016510934", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1009420992", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060487392", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1048921956", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1041909998", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1014388554", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060497638", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1040606488", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060756669", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1024053463", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1017626170", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1020456012", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1045377669", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060488659", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060816390", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1050225995", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1012640711", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1009071596", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1024394193", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1023373666", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1042995256", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060503017", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1048707800", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060821716", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1043762285", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060491579", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1021507156", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1050275996", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1039655036", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1016787662", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1014640361", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1059052509", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060504144", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1036288955", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1008192613", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1046510001", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060817288", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1005219864", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1059141664", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1059141708", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1051499896", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1049572504", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060819856", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1029120630", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1027890249", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1048283529", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060505399", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060480033", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1059141222", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1038221147", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060501981", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1029186926", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1040444443", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1022061943", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1050586441", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1050841175", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1034030383", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1031594332", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1022807668", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060487206", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1020356915", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1041063912", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1059185033", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1036673130", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060495410", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060811945", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1006251427", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1059141471", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1010029009", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060475224", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1032603162", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1030664451", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060500571", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1008906037", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1043133057", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1027177091", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1003190826", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1029889092", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1022248405", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060498655", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060790516", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1035626723", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1052781356", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1041729973", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1008096035", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1049368483", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1008334218", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1026356533", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1053418337", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1016531939", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1045736543", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1002951333", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1013722826", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1019976609", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1010418632", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1051688434", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060738859", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1019064484", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1006913239", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1040258398", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1042658200", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060823255", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060506382", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1034485631", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060494991", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1026031618", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060839663", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1020454192", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1051955120", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1019487999", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060492307", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1016917732", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1027887936", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1020003088", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1021978769", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1044299159", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1045391551", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1048054732", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1041985067", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1043952833", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1047063919", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060492164", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1059141143", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060688638", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1036114834", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1002415192", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1006586634", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1010954675", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1015506698", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060495184", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1048466090", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1000824046", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1042138928", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1020731266", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1060502673", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1014398038", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1020207781", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1049625672", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1038529836", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1024862071", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1018185342", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1034964762", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1039860202", - "target": "pub.1013762487", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1048699443", - "target": "pub.1060799033", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1048699443", - "target": "pub.1072401415", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1048699443", - "target": "pub.1014942113", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1048699443", - "target": "pub.1060787963", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1048699443", - "target": "pub.1042729374", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1048699443", - "target": "pub.1007165107", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1048699443", - "target": "pub.1043619387", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1048699443", - "target": "pub.1060805434", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1048699443", - "target": "pub.1060534420", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1048699443", - "target": "pub.1015361753", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1048699443", - "target": "pub.1016879794", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1048699443", - "target": "pub.1060788070", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1048699443", - "target": "pub.1038304688", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1048699443", - "target": "pub.1060812343", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1048699443", - "target": "pub.1019769175", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1048699443", - "target": "pub.1072401833", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1048699443", - "target": "pub.1060808347", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1098667582", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1065173362", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1014126670", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1061435768", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1031435740", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1037335968", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1034025717", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1049262570", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1060739410", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1024402227", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1060461988", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1022201659", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1021560322", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1027183352", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1037589088", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1060438505", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1060839663", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1025472474", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1034618848", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1021921669", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1007041825", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1059079802", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1048139891", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1032579586", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1060741752", - "target": "pub.1001541263", - "attributes": { - "year": 2011, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1027799783", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1028901322", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1041801698", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1010496603", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1047509663", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1011658338", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1042723630", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1060810423", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1026356533", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1012276581", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1060812645", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1035230987", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1062445233", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1060498428", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1060839535", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1044645483", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1013441281", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1060465244", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1009364201", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1060829713", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1035029355", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1060794360", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1060494914", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1002717445", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1024352953", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1018185342", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1048928815", - "target": "pub.1050017917", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1024402227", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1060831320", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1010453004", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1058050263", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1060822060", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1060504243", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1060823477", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1014034141", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1060670095", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1060658394", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1059076073", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1008126854", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1038056243", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1098678954", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1017123471", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1060817875", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1060825499", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1016014950", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1057869519", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1009926257", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1018979965", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1049930918", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1046878062", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1058101157", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1060822061", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060507439", - "target": "pub.1060823476", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1025127614", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1027944496", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1022201659", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1001441208", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1016807636", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1046281967", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1036937707", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1060833498", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1006289465", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1064237535", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1052648436", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1041883040", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1060825740", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1060829954", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1029418627", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1004210259", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1053140660", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1046760586", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1062444393", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1032223066", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1060812205", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1031435740", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1021493626", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1062553940", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1060500350", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1029956508", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1016359120", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1065170744", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1038336282", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1060839663", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1020674059", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1027287387", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1060467976", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1060787952", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1060773820", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1025998679", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1003628052", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1060827495", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1031554515", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1031284085", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1037335968", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1029202339", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1062566030", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1012500209", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1034025717", - "target": "pub.1060461988", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1043354067", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1049766158", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1050237123", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1039981372", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060827181", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060832030", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060675503", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1027226374", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1041760964", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1012266401", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060817875", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1016014950", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1035008566", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060674224", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060671065", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060659366", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1044085245", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060673380", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060665563", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060803970", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060725247", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1009628601", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060726472", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1045352298", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060827277", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1039276131", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060459525", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060828404", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1000892586", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1003288694", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1020613156", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060675113", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1052615551", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1038414711", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1008912168", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060826447", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060676472", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060674055", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060657707", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060822061", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060774884", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1027175597", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1049959435", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1017862564", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060661648", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060673917", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1041079423", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1028741585", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060824936", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060460944", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1004068287", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1016118774", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060674175", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1013668806", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060823818", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1038988214", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1026831915", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1051363735", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1002091117", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1041066149", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060830663", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060675732", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060521318", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1001844408", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1031979595", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1058050263", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060670774", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1028533037", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060674216", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1027544400", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1031855473", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060659368", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1025880473", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1044966137", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060673423", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060663748", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1050463690", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1028802174", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060784903", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1006382259", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1028928983", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1049262570", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060823476", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1024370344", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1003371857", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1021089453", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1006850094", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060839373", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060807702", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060675476", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1038008984", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1032486064", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060673509", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060674805", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060676386", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060674103", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060784904", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060675450", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060675639", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060673307", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1019615542", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1021947031", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1020702089", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1023527379", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1095903609", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060829034", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1046892149", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060672129", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1021560322", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060663352", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1015215551", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060674011", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1030160495", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1014048276", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1022816651", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1013946646", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1059051422", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1047766368", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060672166", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060671138", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1029374432", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060676547", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1052394951", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060673587", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060673983", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1034371240", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060675387", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1023287333", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1044810744", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1058100372", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1019662680", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060662710", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1043541010", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1028952543", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060754866", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1030191390", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060673232", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1052892694", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1008903034", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1038409804", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1012415680", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060675215", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1010219741", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1012911939", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1062971188", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1031686744", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1003227336", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060674871", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1029051671", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1004661064", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060433897", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1058101157", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060839251", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1013587089", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1004646989", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1062928725", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1008049063", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1041165280", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060676616", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1000173117", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1014034141", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1016574452", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1032579586", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060779406", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060659837", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1058105068", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1028230402", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1036559725", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1059051362", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1006517975", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1013675126", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060826564", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1047765215", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1007846341", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1003831851", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1032454787", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060822060", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060829459", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1051841352", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1026174138", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060822514", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060795354", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060665292", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1016849900", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060675775", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1047182146", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060665491", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060483159", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1046879659", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1029628720", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1047906658", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1008316332", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060674676", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060676334", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1036861449", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060673990", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1031239487", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1058996814", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1002683374", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1018590889", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1039153009", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1038179687", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1004884918", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1038868267", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1049620203", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1000009137", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1011658338", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1009022347", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1011478891", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060672803", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1038056243", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1062913555", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1004415602", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1047967799", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060825499", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1023676200", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1040675567", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1045212838", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060676176", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060659255", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060674213", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1026471851", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1019411784", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060839208", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1047654315", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1059079470", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1005219924", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060675924", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060673300", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060674905", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1005494539", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1042214836", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060673467", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060673113", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060659692", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1018025921", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060787073", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060675760", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060417615", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1000653517", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060676000", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1047713864", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060839565", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060664355", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1051459978", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060823477", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1028482838", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1003267521", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1006809789", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060677000", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060786505", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1037040727", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1008126854", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060676303", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1013665499", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060674558", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1027179906", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060754142", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1040632454", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1005025234", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060674557", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1011902185", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1024740024", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1005256305", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1007511315", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1036352091", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1021912934", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060504243", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1043779481", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1015453451", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1022722372", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1004858858", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1011087398", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1019398907", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1010220572", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1014462654", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060839221", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060790099", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1033456373", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060461257", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060674109", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1047753851", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060677032", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1044880480", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060673895", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1039179998", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060839152", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1059086874", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1008243844", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1019531352", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1048074289", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060658394", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1011163444", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1029543778", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1059079802", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060677183", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1020621092", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060755819", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060531200", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1057900505", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1049632162", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1039984053", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060675402", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1098679389", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060797016", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060673750", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1059087853", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1024402227", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060755003", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1027532833", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1012593191", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1010760440", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1044040016", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1047948630", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060675734", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1042077732", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1047220917", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1059076097", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060820367", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060674827", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1046578644", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1050919469", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060676255", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1020847848", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1031717969", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060838113", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1010717449", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1045342100", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1052419661", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1030368423", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1017460463", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060670095", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1031172370", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060672165", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1042457710", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060673873", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1098678954", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060791130", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060658984", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060456070", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060675290", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060673164", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1023341115", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060784536", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060677048", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1057869519", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1000398384", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060677128", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1017561574", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1060839703", - "target": "pub.1060675321", - "attributes": { - "year": 2010, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1021427310", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1052791836", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1021984958", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1040606030", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1018661537", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1060779458", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1042098123", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1015234386", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1060768363", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1036884583", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1022162692", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1040915357", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1053319957", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1025059126", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1060460126", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1040491531", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1050408744", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1060565149", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1034642959", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1003660203", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1020691468", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1060537812", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1060828109", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1045564126", - "target": "pub.1019008412", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1007530657", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1060472631", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1060469716", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1025036962", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1041909998", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1008640012", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1031460804", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1098678329", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1015971387", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1032081451", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1022345746", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1040258398", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1029576577", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1000374332", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1042734315", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1098667582", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1031817672", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1036871640", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1035439165", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1043889955", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1016859474", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1011010598", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1019839012", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1028771859", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1030114288", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1040030659", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1006251427", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1060817691", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1026356533", - "target": "pub.1018185342", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1032579586", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1059079802", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1059079470", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1060835107", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1028482838", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1024402227", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1011784856", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1026720084", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1031239487", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1004884918", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1014034141", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1004858858", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1023676200", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1045387337", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1016958841", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1021560322", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1025719832", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1007119461", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1042532118", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1006328423", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1049262570", - "target": "pub.1016014950", - "attributes": { - "year": 2009, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1018345323", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1016958841", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1011784856", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1024402227", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1060504243", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1004884918", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1028482838", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1014034141", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1006328423", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1048347725", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1059079802", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1012266401", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1004858858", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1023676200", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1016014950", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1042764696", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1025719832", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1046878062", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1059079470", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1031239487", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1021560322", - "target": "pub.1007119461", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1060521318", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1043798191", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1024402227", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1035159109", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1041165280", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1060504243", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1004884918", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1028482838", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1014034141", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1012593191", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1011658338", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1034618848", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1059079802", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1060784904", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1004858858", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1040675567", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1007803037", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1047753851", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1031239487", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1060795805", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1060485642", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1017078538", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1058101157", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1032579586", - "target": "pub.1028928983", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1018345323", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1017238694", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1011784856", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1043798191", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1036551131", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1013466532", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1010960717", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1020033193", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1060618645", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1051523502", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1011658338", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1008096035", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1034601602", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1060674024", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1040003395", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1059078521", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1045736543", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1048347725", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1004858858", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1048139891", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1019645844", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1046510001", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1060787952", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1011664403", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1041985067", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1005256926", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1015937057", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1060501368", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1036114834", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1005427122", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1098905503", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1060480673", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1029816697", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1059079470", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1029635336", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1017078538", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1060622841", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1060533316", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1025472474", - "target": "pub.1003804610", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1011784856", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1041165280", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1060475260", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1058050263", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1060829459", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1045515256", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1028237179", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1014034141", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1012593191", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1060658394", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1059076073", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1060450736", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1011658338", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1043779481", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1024981283", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1062129885", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1060661648", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1039276131", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1022456477", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1060828404", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1098707489", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1017315055", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1059079802", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1098678954", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1060784904", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1060461988", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1060675734", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1040846971", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1062243952", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1004858858", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1057914937", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1016981788", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1023676200", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1029398439", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1060487068", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1019398907", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1053030119", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1014462654", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1041985067", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1057869519", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1060775623", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1051277230", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1002878811", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1028784456", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1060795235", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1060839208", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1025311961", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1015885405", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1046878062", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1060793163", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1041734929", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1059079470", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1060659366", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1073294533", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1044880480", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1031239487", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1028928983", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1060485642", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1003831851", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1024348554", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1043138933", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1057848388", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1060728780", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1058105141", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1024402227", - "target": "pub.1060533316", - "attributes": { - "year": 2008, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1060488555", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1045744782", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1060502016", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1028438151", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1018540897", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1062569382", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1039417623", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1040258398", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1011254661", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1062449295", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1060489764", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1048985306", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1057725655", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1060490443", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1062451106", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1008553636", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1030114288", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1006251427", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1038529836", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1060830365", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1041909998", - "target": "pub.1018185342", - "attributes": { - "year": 2007, - "level": "ref_l2" - } - }, - { - "source": "pub.1059079802", - "target": "pub.1044040016", - "attributes": { - "year": 2006, - "level": "ref_l2" - } - }, - { - "source": "pub.1059079802", - "target": "pub.1060825499", - "attributes": { - "year": 2006, - "level": "ref_l2" - } - }, - { - "source": "pub.1059079802", - "target": "pub.1047753851", - "attributes": { - "year": 2006, - "level": "ref_l2" - } - }, - { - "source": "pub.1059079802", - "target": "pub.1036048855", - "attributes": { - "year": 2006, - "level": "ref_l2" - } - }, - { - "source": "pub.1059079802", - "target": "pub.1024622720", - "attributes": { - "year": 2006, - "level": "ref_l2" - } - }, - { - "source": "pub.1059079802", - "target": "pub.1060659366", - "attributes": { - "year": 2006, - "level": "ref_l2" - } - }, - { - "source": "pub.1059079802", - "target": "pub.1059079470", - "attributes": { - "year": 2006, - "level": "ref_l2" - } - }, - { - "source": "pub.1059079802", - "target": "pub.1044880480", - "attributes": { - "year": 2006, - "level": "ref_l2" - } - }, - { - "source": "pub.1059079802", - "target": "pub.1098678954", - "attributes": { - "year": 2006, - "level": "ref_l2" - } - }, - { - "source": "pub.1059079802", - "target": "pub.1060499774", - "attributes": { - "year": 2006, - "level": "ref_l2" - } - }, - { - "source": "pub.1059079802", - "target": "pub.1014034141", - "attributes": { - "year": 2006, - "level": "ref_l2" - } - }, - { - "source": "pub.1059079802", - "target": "pub.1052561538", - "attributes": { - "year": 2006, - "level": "ref_l2" - } - }, - { - "source": "pub.1059079802", - "target": "pub.1031239487", - "attributes": { - "year": 2006, - "level": "ref_l2" - } - }, - { - "source": "pub.1059079802", - "target": "pub.1059076073", - "attributes": { - "year": 2006, - "level": "ref_l2" - } - }, - { - "source": "pub.1059079802", - "target": "pub.1004858858", - "attributes": { - "year": 2006, - "level": "ref_l2" - } - }, - { - "source": "pub.1059079802", - "target": "pub.1060673895", - "attributes": { - "year": 2006, - "level": "ref_l2" - } - }, - { - "source": "pub.1060831320", - "target": "pub.1015283490", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1060831320", - "target": "pub.1036372533", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1060831320", - "target": "pub.1015885405", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1060831320", - "target": "pub.1050860986", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1060831320", - "target": "pub.1026690139", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1060831320", - "target": "pub.1041037290", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1060831320", - "target": "pub.1041047376", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1060831320", - "target": "pub.1008979230", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1060831320", - "target": "pub.1044001354", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1060831320", - "target": "pub.1059076073", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1060831320", - "target": "pub.1012195559", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1060831320", - "target": "pub.1037993747", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1060831320", - "target": "pub.1056046759", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1109710367", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1011658338", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1008096035", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1020895228", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1045736543", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1019645844", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1060660647", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1060483159", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1060459526", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1046510001", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1060660456", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1060787952", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1036176655", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1047654315", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1059079470", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1060827125", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1051459978", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1060728780", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1004858858", - "target": "pub.1003804610", - "attributes": { - "year": 2005, - "level": "ref_l2" - } - }, - { - "source": "pub.1008126854", - "target": "pub.1060839152", - "attributes": { - "year": 2003, - "level": "ref_l2" - } - }, - { - "source": "pub.1008126854", - "target": "pub.1060825499", - "attributes": { - "year": 2003, - "level": "ref_l2" - } - }, - { - "source": "pub.1008126854", - "target": "pub.1026831915", - "attributes": { - "year": 2003, - "level": "ref_l2" - } - }, - { - "source": "pub.1008126854", - "target": "pub.1034622526", - "attributes": { - "year": 2003, - "level": "ref_l2" - } - }, - { - "source": "pub.1008126854", - "target": "pub.1060823818", - "attributes": { - "year": 2003, - "level": "ref_l2" - } - }, - { - "source": "pub.1008126854", - "target": "pub.1060803970", - "attributes": { - "year": 2003, - "level": "ref_l2" - } - }, - { - "source": "pub.1008126854", - "target": "pub.1012581556", - "attributes": { - "year": 2003, - "level": "ref_l2" - } - }, - { - "source": "pub.1008126854", - "target": "pub.1060822060", - "attributes": { - "year": 2003, - "level": "ref_l2" - } - }, - { - "source": "pub.1008126854", - "target": "pub.1027532833", - "attributes": { - "year": 2003, - "level": "ref_l2" - } - }, - { - "source": "pub.1008126854", - "target": "pub.1098678954", - "attributes": { - "year": 2003, - "level": "ref_l2" - } - }, - { - "source": "pub.1008126854", - "target": "pub.1060784904", - "attributes": { - "year": 2003, - "level": "ref_l2" - } - }, - { - "source": "pub.1008126854", - "target": "pub.1060670095", - "attributes": { - "year": 2003, - "level": "ref_l2" - } - }, - { - "source": "pub.1008126854", - "target": "pub.1060823476", - "attributes": { - "year": 2003, - "level": "ref_l2" - } - }, - { - "source": "pub.1008126854", - "target": "pub.1060658394", - "attributes": { - "year": 2003, - "level": "ref_l2" - } - }, - { - "source": "pub.1008126854", - "target": "pub.1060673467", - "attributes": { - "year": 2003, - "level": "ref_l2" - } - }, - { - "source": "pub.1041856979", - "target": "pub.1049572408", - "attributes": { - "year": 1998, - "level": "ref_l2" - } - }, - { - "source": "pub.1041856979", - "target": "pub.1057871482", - "attributes": { - "year": 1998, - "level": "ref_l2" - } - }, - { - "source": "pub.1041856979", - "target": "pub.1098954489", - "attributes": { - "year": 1998, - "level": "ref_l2" - } - }, - { - "source": "pub.1059076073", - "target": "pub.1024622720", - "attributes": { - "year": 1998, - "level": "ref_l2" - } - }, - { - "source": "pub.1059076073", - "target": "pub.1041037290", - "attributes": { - "year": 1998, - "level": "ref_l2" - } - }, - { - "source": "pub.1059076073", - "target": "pub.1060449417", - "attributes": { - "year": 1998, - "level": "ref_l2" - } - }, - { - "source": "pub.1059076073", - "target": "pub.1009964863", - "attributes": { - "year": 1998, - "level": "ref_l2" - } - }, - { - "source": "pub.1059076073", - "target": "pub.1016998557", - "attributes": { - "year": 1998, - "level": "ref_l2" - } - }, - { - "source": "pub.1059076073", - "target": "pub.1062243952", - "attributes": { - "year": 1998, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1059074985", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1018020267", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1000891726", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1060812291", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1057743676", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1043750288", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1054019943", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1060810429", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1060804542", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1042734315", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1025513050", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1007741542", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1017250213", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1060719599", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1060492396", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1053543950", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1060807676", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1030554440", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1059069031", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1043006827", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1014050295", - "target": "pub.1043048933", - "attributes": { - "year": 1997, - "level": "ref_l2" - } - }, - { - "source": "pub.1060810429", - "target": "pub.1060805930", - "attributes": { - "year": 1995, - "level": "ref_l2" - } - }, - { - "source": "pub.1060810429", - "target": "pub.1055659331", - "attributes": { - "year": 1995, - "level": "ref_l2" - } - }, - { - "source": "pub.1060810429", - "target": "pub.1059110861", - "attributes": { - "year": 1995, - "level": "ref_l2" - } - }, - { - "source": "pub.1060810429", - "target": "pub.1060495184", - "attributes": { - "year": 1995, - "level": "ref_l2" - } - }, - { - "source": "pub.1060810429", - "target": "pub.1059110686", - "attributes": { - "year": 1995, - "level": "ref_l2" - } - }, - { - "source": "pub.1060810429", - "target": "pub.1017250213", - "attributes": { - "year": 1995, - "level": "ref_l2" - } - }, - { - "source": "pub.1060810429", - "target": "pub.1060804211", - "attributes": { - "year": 1995, - "level": "ref_l2" - } - }, - { - "source": "pub.1060810429", - "target": "pub.1060716812", - "attributes": { - "year": 1995, - "level": "ref_l2" - } - }, - { - "source": "pub.1060810429", - "target": "pub.1060716833", - "attributes": { - "year": 1995, - "level": "ref_l2" - } - }, - { - "source": "pub.1060810429", - "target": "pub.1060465772", - "attributes": { - "year": 1995, - "level": "ref_l2" - } - }, - { - "source": "pub.1060810429", - "target": "pub.1060484658", - "attributes": { - "year": 1995, - "level": "ref_l2" - } - }, - { - "source": "pub.1060810429", - "target": "pub.1053543950", - "attributes": { - "year": 1995, - "level": "ref_l2" - } - }, - { - "source": "pub.1060810429", - "target": "pub.1060807676", - "attributes": { - "year": 1995, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1010313486", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1031813736", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1031874509", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1060803392", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1057743676", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1064233019", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1059110762", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1060804542", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1064231079", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1042734315", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1057737242", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1059071127", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1025507234", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1005219864", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1060794819", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1060481738", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1035545882", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1060495184", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1059071180", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1059069771", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1030634392", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1017250213", - "target": "pub.1064231130", - "attributes": { - "year": 1993, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1060478681", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1025337287", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1060787963", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1060790516", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1060794274", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1060482831", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1059070435", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1030828951", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1053498585", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1060803927", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1060793513", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1001349916", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1060783905", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1060800881", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1042659546", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1059069780", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1014168356", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1005432200", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1060801337", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1060483028", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1060475467", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1059070056", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1039185830", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1030444683", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1022719988", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1060799854", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1060800993", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1058956513", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1053543950", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1060797693", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1049940303", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1060485026", - "target": "pub.1060477616", - "attributes": { - "year": 1992, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1059068080", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1010313486", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1058023149", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1060476171", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1060794457", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1059068352", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1039918636", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1060789626", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1064231079", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1042734315", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1034195309", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1059067283", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1059070056", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1059068122", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1060791387", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1051138084", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1043149560", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1064231011", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1016926995", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1034392770", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1064231130", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059069780", - "target": "pub.1052314442", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059070056", - "target": "pub.1034195309", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059070056", - "target": "pub.1004335462", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059070056", - "target": "pub.1060789627", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059070056", - "target": "pub.1011703040", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059070056", - "target": "pub.1039987654", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059070056", - "target": "pub.1060788070", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059070056", - "target": "pub.1059069146", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059070056", - "target": "pub.1042734315", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059070056", - "target": "pub.1032128187", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1059070056", - "target": "pub.1058099888", - "attributes": { - "year": 1988, - "level": "ref_l2" - } - }, - { - "source": "pub.1042734315", - "target": "pub.1022161412", - "attributes": { - "year": 1987, - "level": "ref_l2" - } - }, - { - "source": "pub.1042734315", - "target": "pub.1060537632", - "attributes": { - "year": 1987, - "level": "ref_l2" - } - }, - { - "source": "pub.1042734315", - "target": "pub.1060789643", - "attributes": { - "year": 1987, - "level": "ref_l2" - } - }, - { - "source": "pub.1042734315", - "target": "pub.1060789858", - "attributes": { - "year": 1987, - "level": "ref_l2" - } - }, - { - "source": "pub.1042734315", - "target": "pub.1060495184", - "attributes": { - "year": 1987, - "level": "ref_l2" - } - }, - { - "source": "pub.1042734315", - "target": "pub.1060473496", - "attributes": { - "year": 1987, - "level": "ref_l2" - } - }, - { - "source": "pub.1042734315", - "target": "pub.1024772182", - "attributes": { - "year": 1987, - "level": "ref_l2" - } - }, - { - "source": "pub.1042734315", - "target": "pub.1060783526", - "attributes": { - "year": 1987, - "level": "ref_l2" - } - }, - { - "source": "pub.1042734315", - "target": "pub.1060787424", - "attributes": { - "year": 1987, - "level": "ref_l2" - } - }, - { - "source": "pub.1042734315", - "target": "pub.1060793513", - "attributes": { - "year": 1987, - "level": "ref_l2" - } - }, - { - "source": "pub.1042734315", - "target": "pub.1060789626", - "attributes": { - "year": 1987, - "level": "ref_l2" - } - }, - { - "source": "pub.1042734315", - "target": "pub.1060784758", - "attributes": { - "year": 1987, - "level": "ref_l2" - } - }, - { - "source": "pub.1042734315", - "target": "pub.1059068352", - "attributes": { - "year": 1987, - "level": "ref_l2" - } - }, - { - "source": "pub.1042734315", - "target": "pub.1057773719", - "attributes": { - "year": 1987, - "level": "ref_l2" - } - }, - { - "source": "pub.1042734315", - "target": "pub.1030634392", - "attributes": { - "year": 1987, - "level": "ref_l2" - } - }, - { - "source": "pub.1042734315", - "target": "pub.1060465772", - "attributes": { - "year": 1987, - "level": "ref_l2" - } - }, - { - "source": "pub.1042734315", - "target": "pub.1060791387", - "attributes": { - "year": 1987, - "level": "ref_l2" - } - }, - { - "source": "pub.1042734315", - "target": "pub.1031874509", - "attributes": { - "year": 1987, - "level": "ref_l2" - } - }, - { - "source": "pub.1060500239", - "target": "pub.1060416861", - "attributes": { - "year": 1973, - "level": "ref_l2" - } - }, - { - "source": "pub.1060500239", - "target": "pub.1060838726", - "attributes": { - "year": 1973, - "level": "ref_l2" - } - }, - { - "source": "pub.1060500239", - "target": "pub.1060449414", - "attributes": { - "year": 1973, - "level": "ref_l2" - } - }, - { - "source": "pub.1060500239", - "target": "pub.1060450736", - "attributes": { - "year": 1973, - "level": "ref_l2" - } - }, - { - "source": "pub.1060500239", - "target": "pub.1057797824", - "attributes": { - "year": 1973, - "level": "ref_l2" - } - }, - { - "source": "pub.1060500239", - "target": "pub.1019460196", - "attributes": { - "year": 1973, - "level": "ref_l2" - } - }, - { - "source": "pub.1060500239", - "target": "pub.1060489120", - "attributes": { - "year": 1973, - "level": "ref_l2" - } - }, - { - "source": "pub.1060430850", - "target": "pub.1057796022", - "attributes": { - "year": 1965, - "level": "ref_l2" - } - }, - { - "source": "pub.1060430850", - "target": "pub.1057789554", - "attributes": { - "year": 1965, - "level": "ref_l2" - } - }, - { - "source": "pub.1060430850", - "target": "pub.1057791192", - "attributes": { - "year": 1965, - "level": "ref_l2" - } - }, - { - "source": "pub.1060430850", - "target": "pub.1060416616", - "attributes": { - "year": 1965, - "level": "ref_l2" - } - }, - { - "source": "pub.1060430850", - "target": "pub.1026186494", - "attributes": { - "year": 1965, - "level": "ref_l2" - } - }, - { - "source": "pub.1060430850", - "target": "pub.1060451198", - "attributes": { - "year": 1965, - "level": "ref_l2" - } - }, - { - "source": "pub.1060430850", - "target": "pub.1060416861", - "attributes": { - "year": 1965, - "level": "ref_l2" - } - }, - { - "source": "pub.1060430850", - "target": "pub.1060429472", - "attributes": { - "year": 1965, - "level": "ref_l2" - } - }, - { - "source": "pub.1060430850", - "target": "pub.1057012353", - "attributes": { - "year": 1965, - "level": "ref_l2" - } - }, - { - "source": "pub.1060430850", - "target": "pub.1060451040", - "attributes": { - "year": 1965, - "level": "ref_l2" - } - }, - { - "source": "pub.1060430850", - "target": "pub.1060427420", - "attributes": { - "year": 1965, - "level": "ref_l2" - } - }, - { - "source": "pub.1060430850", - "target": "pub.1060837536", - "attributes": { - "year": 1965, - "level": "ref_l2" - } - }, - { - "source": "pub.1060430850", - "target": "pub.1060464038", - "attributes": { - "year": 1965, - "level": "ref_l2" - } - } - ] -} \ No newline at end of file diff --git a/src/citationnet/static/bootstrap.4.3.1.min.css b/src/citationnet/static/bootstrap.4.3.1.min.css new file mode 100644 index 0000000..92e3fe8 --- /dev/null +++ b/src/citationnet/static/bootstrap.4.3.1.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:0s .6s opacity}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/src/citationnet/static/force-citationNet.js b/src/citationnet/static/force-citationNet.js index d78b343..7c4fd88 100644 --- a/src/citationnet/static/force-citationNet.js +++ b/src/citationnet/static/force-citationNet.js @@ -1,46 +1,43 @@ -import * as THREE from './three.module.js'; +// import * as THREE from './three.module.js'; import * as Lut from './lut.js'; -/** -* Async function for fetching and parsing JSON files +/** +* Async function for fetching and parsing JSON files * @param {String} path - path or url to JSON file * @returns {object} parsed JSON object */ -async function fetchJSON(path) { - console.log(path) +async function fetchJSON(data) { + console.log('parsed', data) try { - var res = await fetch(path); // waits until the request completes... - var data = await res.json() + var data = await JSON.parse(data) } catch (error) { - console.log(path) + console.log(data) throw error } - - return data; } class CitationNet { - /** + /** * Constructs a new CitationNet object, but does not initialize it. Call object.initialize() right after this. - * @param {String} jsonPath - path or url to citation data as JSON file/stream + * @param {String} jsondata - path or url to citation data as JSON file/stream */ - constructor(jsonPath = null) { + constructor(jsondata = null) { // if jsonPath is not provided try to get globJsonPath, show alert if fails try { - if (!(jsonPath)) jsonPath = globJsonPath; + if (!(jsondata)) jsondata = jsondata; } catch (error) { - alert("no path or URL to JSON containing citation data specified, graph cannot be displayed") + alert("no JSON containing citation data specified, graph cannot be displayed") } - this.jsonPath = jsonPath; + this.jsondata = jsondata; this.is_initialized = false; } - /** + /** * Fetches and processes data, initializes graph and sets view. Constructors cannot be async in JS, which is needed for fetching and saving data. */ async initialize(make_cylinder = false) { @@ -68,7 +65,7 @@ class CitationNet { this.is_initialized = true; } - /** + /** * Reads current window size, adapts canvas size and camera projection settings to it. */ adaptWindowSize() { @@ -82,7 +79,7 @@ class CitationNet { this.graph.camera().updateProjectionMatrix(); } - /** + /** * Instantiate and configure graph object * @returns {function} Brief description of the returning value here. */ @@ -112,7 +109,7 @@ class CitationNet { .nodeVal(1.0) // uniform size, is changed using this.toggleNodeSize() .d3Force('center', null) // disable center force .d3Force('charge', null) // disable charge force - .d3Force('radialInner', d3.forceRadial(0).strength(0.1)) // weak force pulling the nodes towards the middle axis of the cylinder + .d3Force('radialInner', d3.forceRadial(0).strength(0.1)) // weak force pulling the nodes towards the middle axis of the cylinder // force pulling the nodes towards the outer radius of the cylinder, strength is dynamic (, look at strengthFuncFactory for details) .d3Force('radialOuter', d3.forceRadial(100).strength(CitationNet.strengthFuncFactory(0.0, 1.0, 0, 200))) @@ -126,7 +123,7 @@ class CitationNet { // somehow this needs to be done after graph instantiated or else it breaks layouting this.graph.d3Force('link', this.graph.d3Force('link').strength(0.0)) // show edges, but set strength to 0.0 -> no charge/spring forces - + // vertical positioning according to year of publication this.graph.graphData().nodes.forEach((node) => { if (node.attributes.nodeyear >= this.inputNode.attributes.nodeyear) { @@ -142,8 +139,8 @@ class CitationNet { return this.graph; } - /** - * Function factory for dynamic strength functions using linear interpolation. If input is outside the interval minStrength or maxStrength is used. + /** + * Function factory for dynamic strength functions using linear interpolation. If input is outside the interval minStrength or maxStrength is used. * @param {number} minStrength - minimum strength, default = 0.0 * @param {number} maxStrength - maximum strength, default = 1.0 * @param {number} min - lower interval boundary, default = 0.0 @@ -160,7 +157,7 @@ class CitationNet { // return minStrength if out smaller than minStrength // return maxStrength if out larger than maxStrength - // return out ** + // return out ** return out <= minStrength ? minStrength : out >= maxStrength ? maxStrength : out ** exp; @@ -168,7 +165,7 @@ class CitationNet { return strengthFunc; } - /** + /** * Preprocess this.data */ processData() { @@ -230,7 +227,7 @@ class CitationNet { }); } - /** + /** * Move camera to default view point. Triggered by UI. * @param {String} viewPoint - either "top" or "side" * @returns {ReturnValueDataTypeHere} Brief description of the returning value here. @@ -257,7 +254,7 @@ class CitationNet { } } - /** + /** * Toggle on/off relative node size by number of citations. Triggered by UI. */ toggleNodeSize() { @@ -276,7 +273,7 @@ class CitationNet { } } - /** + /** * Read relative node size from range slider and apply to graph. Triggered by UI. */ readNodeSize() { @@ -285,7 +282,7 @@ class CitationNet { } - /** + /** * Read layout options from range sliders and apply to graph. Triggered by UI. */ readLayout() { @@ -302,7 +299,7 @@ class CitationNet { this.graph.d3ReheatSimulation(); } - /** + /** * Toggle on/off viewing only edges that connect to input node directly. Triggered by UI. */ toggleEdgesOnlyInput() { @@ -355,7 +352,7 @@ class CitationNet { * @returns {Array} */ async getStats() { - this.data = await fetchJSON(this.jsonPath); + this.data = await fetchJSON(this.jsondata); this.processData(); var nodes = this.data.nodes @@ -431,10 +428,10 @@ class CitationNet { } } -/** +/** * Create a custom object for a text label containing a `div` element. * Position is calculated using `render2D` method, which is called by a listener for graph controls. - * @returns {object} custom object containing + * @returns {object} custom object containing */ function _createTextLabel() { var div = document.createElement('div'); @@ -478,29 +475,29 @@ function _createTextLabel() { } } var fieldOfResearchDivisions = [ - "", - "01 Mathematical Sciences", - "02 Physical Sciences", - "03 Chemical Sciences", - "04 Earth Sciences", - "05 Environmental Sciences", - "06 Biological Sciences", - "07 Agricultural and Veterinary Sciences", - "08 Information and Computing Sciences", - "09 Engineering", - "10 Technology", - "11 Medical and Health Sciences", - "12 Built Environment and Design", - "13 Education", - "14 Economics", - "15 Commerce, Management, Tourism and Services", - "16 Studies in Human Society", - "17 Psychology and Cognitive Sciences", - "18 Law and Legal Studies", - "19 Studies in Creative Arts and Writing", - "20 Language, Communication and Culture", - "21 History and Archaeology", - "22 Philosophy and Religious Studies", + "00", + "01", + "02", + "03", + "04", + "05", + "06", + "07", + "08", + "09", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", ] -export { CitationNet }; \ No newline at end of file +export { CitationNet }; diff --git a/src/citationnet/static/pieChart_vega-lite.js b/src/citationnet/static/pieChart_vega-lite.js index 3c9ca1c..df52b39 100644 --- a/src/citationnet/static/pieChart_vega-lite.js +++ b/src/citationnet/static/pieChart_vega-lite.js @@ -31,7 +31,7 @@ function hideFOR() { async function loadFOR() { const stats = await window.net.getStats(); - const resp = await fetch("/static/lib/vegaLiteSpec.json"); + const resp = await fetch("/static/vegaLiteSpec.json"); const vegaLiteSpec = await resp.json(); vegaLiteSpec.data.values = stats; @@ -79,4 +79,4 @@ function dragElement(elmnt) { document.onmouseup = null; document.onmousemove = null; } -} \ No newline at end of file +} diff --git a/src/citationnet/static/vega-embed.min.js b/src/citationnet/static/vega-embed.min.js new file mode 100644 index 0000000..77d1b7b --- /dev/null +++ b/src/citationnet/static/vega-embed.min.js @@ -0,0 +1,22 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("vega"),require("vega-lite")):"function"==typeof define&&define.amd?define(["vega","vega-lite"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).vegaEmbed=t(e.vega,e.vegaLite)}(this,(function(e,t){"use strict";function r(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var n,i=r(e),o=r(t),s="6.18.2",a=(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),l=Object.prototype.hasOwnProperty;function c(e,t){return l.call(e,t)}function h(e){if(Array.isArray(e)){for(var t=new Array(e.length),r=0;r=48&&t<=57))return!1;r++}return!0}function f(e){return-1===e.indexOf("/")&&-1===e.indexOf("~")?e:e.replace(/~/g,"~0").replace(/\//g,"~1")}function d(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function v(e){if(void 0===e)return!0;if(e)if(Array.isArray(e)){for(var t=0,r=e.length;t=h){if(r&&"add"===t.op&&v>l.length)throw new E("The specified index MUST NOT be greater than the number of elements in the array","OPERATION_VALUE_OUT_OF_BOUNDS",o,t,e);if(!1===(s=w[t.op].call(t,l,v,e)).test)throw new E("Test operation failed","TEST_OPERATION_FAILED",o,t,e);return s}}else if(v&&-1!=v.indexOf("~")&&(v=d(v)),c>=h){if(!1===(s=y[t.op].call(t,l,v,e)).test)throw new E("Test operation failed","TEST_OPERATION_FAILED",o,t,e);return s}l=l[v]}}function I(e,t,r,n,i){if(void 0===n&&(n=!0),void 0===i&&(i=!0),r&&!Array.isArray(t))throw new E("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");n||(e=p(e));for(var o=new Array(t.length),s=0,a=t.length;s0)throw new E('Operation `path` property must start with "/"',"OPERATION_PATH_INVALID",t,e,r);if(("move"===e.op||"copy"===e.op)&&"string"!=typeof e.from)throw new E("Operation `from` property is not present (applicable in `move` and `copy` operations)","OPERATION_FROM_REQUIRED",t,e,r);if(("add"===e.op||"replace"===e.op||"test"===e.op)&&void 0===e.value)throw new E("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_REQUIRED",t,e,r);if(("add"===e.op||"replace"===e.op||"test"===e.op)&&v(e.value))throw new E("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED",t,e,r);if(r)if("add"==e.op){var i=e.path.split("/").length,o=n.split("/").length;if(i!==o+1&&i!==o)throw new E("Cannot perform an `add` operation at the desired path","OPERATION_PATH_CANNOT_ADD",t,e,r)}else if("replace"===e.op||"remove"===e.op||"_get"===e.op){if(e.path!==n)throw new E("Cannot perform the operation at a path that does not exist","OPERATION_PATH_UNRESOLVABLE",t,e,r)}else if("move"===e.op||"copy"===e.op){var s=R([{op:"_get",path:e.from,value:void 0}],r);if(s&&"OPERATION_PATH_UNRESOLVABLE"===s.name)throw new E("Cannot perform the operation from a path that does not exist","OPERATION_FROM_UNRESOLVABLE",t,e,r)}}function R(e,t,r){try{if(!Array.isArray(e))throw new E("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");if(t)I(p(t),p(e),r||!0);else{r=r||$;for(var n=0;n0&&(e.patches=[],e.callback&&e.callback(n)),n}function D(e,t,r,n,i){if(t!==e){"function"==typeof t.toJSON&&(t=t.toJSON());for(var o=h(t),s=h(e),a=!1,l=s.length-1;l>=0;l--){var u=e[v=s[l]];if(!c(t,v)||void 0===t[v]&&void 0!==u&&!1===Array.isArray(t))Array.isArray(e)===Array.isArray(t)?(i&&r.push({op:"test",path:n+"/"+f(v),value:p(u)}),r.push({op:"remove",path:n+"/"+f(v)}),a=!0):(i&&r.push({op:"test",path:n,value:e}),r.push({op:"replace",path:n,value:t}));else{var d=t[v];"object"==typeof u&&null!=u&&"object"==typeof d&&null!=d?D(u,d,r,n+"/"+f(v),i):u!==d&&(i&&r.push({op:"test",path:n+"/"+f(v),value:p(u)}),r.push({op:"replace",path:n+"/"+f(v),value:p(d)}))}}if(a||o.length!=s.length)for(l=0;l0)return[g,r+c.join(",\n"+d),a].join("\n"+o)}return m}(e,"",0)},_={exports:{}};var j={SEMVER_SPEC_VERSION:"2.0.0",MAX_LENGTH:256,MAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER||9007199254740991,MAX_SAFE_COMPONENT_LENGTH:16};var z="object"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error("SEMVER",...e):()=>{};!function(e,t){const{MAX_SAFE_COMPONENT_LENGTH:r}=j,n=z,i=(t=e.exports={}).re=[],o=t.src=[],s=t.t={};let a=0;const l=(e,t,r)=>{const l=a++;n(l,t),s[e]=l,o[l]=t,i[l]=new RegExp(t,r?"g":void 0)};l("NUMERICIDENTIFIER","0|[1-9]\\d*"),l("NUMERICIDENTIFIERLOOSE","[0-9]+"),l("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*"),l("MAINVERSION",`(${o[s.NUMERICIDENTIFIER]})\\.(${o[s.NUMERICIDENTIFIER]})\\.(${o[s.NUMERICIDENTIFIER]})`),l("MAINVERSIONLOOSE",`(${o[s.NUMERICIDENTIFIERLOOSE]})\\.(${o[s.NUMERICIDENTIFIERLOOSE]})\\.(${o[s.NUMERICIDENTIFIERLOOSE]})`),l("PRERELEASEIDENTIFIER",`(?:${o[s.NUMERICIDENTIFIER]}|${o[s.NONNUMERICIDENTIFIER]})`),l("PRERELEASEIDENTIFIERLOOSE",`(?:${o[s.NUMERICIDENTIFIERLOOSE]}|${o[s.NONNUMERICIDENTIFIER]})`),l("PRERELEASE",`(?:-(${o[s.PRERELEASEIDENTIFIER]}(?:\\.${o[s.PRERELEASEIDENTIFIER]})*))`),l("PRERELEASELOOSE",`(?:-?(${o[s.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${o[s.PRERELEASEIDENTIFIERLOOSE]})*))`),l("BUILDIDENTIFIER","[0-9A-Za-z-]+"),l("BUILD",`(?:\\+(${o[s.BUILDIDENTIFIER]}(?:\\.${o[s.BUILDIDENTIFIER]})*))`),l("FULLPLAIN",`v?${o[s.MAINVERSION]}${o[s.PRERELEASE]}?${o[s.BUILD]}?`),l("FULL",`^${o[s.FULLPLAIN]}$`),l("LOOSEPLAIN",`[v=\\s]*${o[s.MAINVERSIONLOOSE]}${o[s.PRERELEASELOOSE]}?${o[s.BUILD]}?`),l("LOOSE",`^${o[s.LOOSEPLAIN]}$`),l("GTLT","((?:<|>)?=?)"),l("XRANGEIDENTIFIERLOOSE",`${o[s.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),l("XRANGEIDENTIFIER",`${o[s.NUMERICIDENTIFIER]}|x|X|\\*`),l("XRANGEPLAIN",`[v=\\s]*(${o[s.XRANGEIDENTIFIER]})(?:\\.(${o[s.XRANGEIDENTIFIER]})(?:\\.(${o[s.XRANGEIDENTIFIER]})(?:${o[s.PRERELEASE]})?${o[s.BUILD]}?)?)?`),l("XRANGEPLAINLOOSE",`[v=\\s]*(${o[s.XRANGEIDENTIFIERLOOSE]})(?:\\.(${o[s.XRANGEIDENTIFIERLOOSE]})(?:\\.(${o[s.XRANGEIDENTIFIERLOOSE]})(?:${o[s.PRERELEASELOOSE]})?${o[s.BUILD]}?)?)?`),l("XRANGE",`^${o[s.GTLT]}\\s*${o[s.XRANGEPLAIN]}$`),l("XRANGELOOSE",`^${o[s.GTLT]}\\s*${o[s.XRANGEPLAINLOOSE]}$`),l("COERCE",`(^|[^\\d])(\\d{1,${r}})(?:\\.(\\d{1,${r}}))?(?:\\.(\\d{1,${r}}))?(?:$|[^\\d])`),l("COERCERTL",o[s.COERCE],!0),l("LONETILDE","(?:~>?)"),l("TILDETRIM",`(\\s*)${o[s.LONETILDE]}\\s+`,!0),t.tildeTrimReplace="$1~",l("TILDE",`^${o[s.LONETILDE]}${o[s.XRANGEPLAIN]}$`),l("TILDELOOSE",`^${o[s.LONETILDE]}${o[s.XRANGEPLAINLOOSE]}$`),l("LONECARET","(?:\\^)"),l("CARETTRIM",`(\\s*)${o[s.LONECARET]}\\s+`,!0),t.caretTrimReplace="$1^",l("CARET",`^${o[s.LONECARET]}${o[s.XRANGEPLAIN]}$`),l("CARETLOOSE",`^${o[s.LONECARET]}${o[s.XRANGEPLAINLOOSE]}$`),l("COMPARATORLOOSE",`^${o[s.GTLT]}\\s*(${o[s.LOOSEPLAIN]})$|^$`),l("COMPARATOR",`^${o[s.GTLT]}\\s*(${o[s.FULLPLAIN]})$|^$`),l("COMPARATORTRIM",`(\\s*)${o[s.GTLT]}\\s*(${o[s.LOOSEPLAIN]}|${o[s.XRANGEPLAIN]})`,!0),t.comparatorTrimReplace="$1$2$3",l("HYPHENRANGE",`^\\s*(${o[s.XRANGEPLAIN]})\\s+-\\s+(${o[s.XRANGEPLAIN]})\\s*$`),l("HYPHENRANGELOOSE",`^\\s*(${o[s.XRANGEPLAINLOOSE]})\\s+-\\s+(${o[s.XRANGEPLAINLOOSE]})\\s*$`),l("STAR","(<|>)?=?\\s*\\*"),l("GTE0","^\\s*>=\\s*0.0.0\\s*$"),l("GTE0PRE","^\\s*>=\\s*0.0.0-0\\s*$")}(_,_.exports);const M=["includePrerelease","loose","rtl"];var B=e=>e?"object"!=typeof e?{loose:!0}:M.filter((t=>e[t])).reduce(((e,t)=>(e[t]=!0,e)),{}):{};const G=/^[0-9]+$/,U=(e,t)=>{const r=G.test(e),n=G.test(t);return r&&n&&(e=+e,t=+t),e===t?0:r&&!n?-1:n&&!r?1:eU(t,e)};const V=z,{MAX_LENGTH:W,MAX_SAFE_INTEGER:H}=j,{re:q,t:Y}=_.exports,J=B,{compareIdentifiers:Q}=X;class Z{constructor(e,t){if(t=J(t),e instanceof Z){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if("string"!=typeof e)throw new TypeError(`Invalid Version: ${e}`);if(e.length>W)throw new TypeError(`version is longer than ${W} characters`);V("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;const r=e.trim().match(t.loose?q[Y.LOOSE]:q[Y.FULL]);if(!r)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+r[1],this.minor=+r[2],this.patch=+r[3],this.major>H||this.major<0)throw new TypeError("Invalid major version");if(this.minor>H||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>H||this.patch<0)throw new TypeError("Invalid patch version");r[4]?this.prerelease=r[4].split(".").map((e=>{if(/^[0-9]+$/.test(e)){const t=+e;if(t>=0&&t=0;)"number"==typeof this.prerelease[e]&&(this.prerelease[e]++,e=-2);-1===e&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}}var K=Z;const{MAX_LENGTH:ee}=j,{re:te,t:re}=_.exports,ne=K,ie=B;var oe=(e,t)=>{if(t=ie(t),e instanceof ne)return e;if("string"!=typeof e)return null;if(e.length>ee)return null;if(!(t.loose?te[re.LOOSE]:te[re.FULL]).test(e))return null;try{return new ne(e,t)}catch(e){return null}};const se=oe;var ae=(e,t)=>{const r=se(e,t);return r?r.version:null};const le=oe;var ce=(e,t)=>{const r=le(e.trim().replace(/^[=v]+/,""),t);return r?r.version:null};const he=K;var pe=(e,t,r,n)=>{"string"==typeof r&&(n=r,r=void 0);try{return new he(e,r).inc(t,n).version}catch(e){return null}};const ue=K;var fe=(e,t,r)=>new ue(e,r).compare(new ue(t,r));const de=fe;var ve=(e,t,r)=>0===de(e,t,r);const ge=oe,me=ve;var Ee=(e,t)=>{if(me(e,t))return null;{const r=ge(e),n=ge(t),i=r.prerelease.length||n.prerelease.length,o=i?"pre":"",s=i?"prerelease":"";for(const e in r)if(("major"===e||"minor"===e||"patch"===e)&&r[e]!==n[e])return o+e;return s}};const be=K;var ye=(e,t)=>new be(e,t).major;const we=K;var Oe=(e,t)=>new we(e,t).minor;const Ae=K;var Ie=(e,t)=>new Ae(e,t).patch;const $e=oe;var Re=(e,t)=>{const r=$e(e,t);return r&&r.prerelease.length?r.prerelease:null};const xe=fe;var Ne=(e,t,r)=>xe(t,e,r);const Se=fe;var Te=(e,t)=>Se(e,t,!0);const Le=K;var Ce=(e,t,r)=>{const n=new Le(e,r),i=new Le(t,r);return n.compare(i)||n.compareBuild(i)};const De=Ce;var ke=(e,t)=>e.sort(((e,r)=>De(e,r,t)));const Fe=Ce;var Pe=(e,t)=>e.sort(((e,r)=>Fe(r,e,t)));const _e=fe;var je=(e,t,r)=>_e(e,t,r)>0;const ze=fe;var Me=(e,t,r)=>ze(e,t,r)<0;const Be=fe;var Ge=(e,t,r)=>0!==Be(e,t,r);const Ue=fe;var Xe=(e,t,r)=>Ue(e,t,r)>=0;const Ve=fe;var We=(e,t,r)=>Ve(e,t,r)<=0;const He=ve,qe=Ge,Ye=je,Je=Xe,Qe=Me,Ze=We;var Ke=(e,t,r,n)=>{switch(t){case"===":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e===r;case"!==":return"object"==typeof e&&(e=e.version),"object"==typeof r&&(r=r.version),e!==r;case"":case"=":case"==":return He(e,r,n);case"!=":return qe(e,r,n);case">":return Ye(e,r,n);case">=":return Je(e,r,n);case"<":return Qe(e,r,n);case"<=":return Ze(e,r,n);default:throw new TypeError(`Invalid operator: ${t}`)}};const et=K,tt=oe,{re:rt,t:nt}=_.exports;var it=(e,t)=>{if(e instanceof et)return e;if("number"==typeof e&&(e=String(e)),"string"!=typeof e)return null;let r=null;if((t=t||{}).rtl){let t;for(;(t=rt[nt.COERCERTL].exec(e))&&(!r||r.index+r[0].length!==e.length);)r&&t.index+t[0].length===r.index+r[0].length||(r=t),rt[nt.COERCERTL].lastIndex=t.index+t[1].length+t[2].length;rt[nt.COERCERTL].lastIndex=-1}else r=e.match(rt[nt.COERCE]);return null===r?null:tt(`${r[2]}.${r[3]||"0"}.${r[4]||"0"}`,t)},ot=st;function st(e){var t=this;if(t instanceof st||(t=new st),t.tail=null,t.head=null,t.length=0,e&&"function"==typeof e.forEach)e.forEach((function(e){t.push(e)}));else if(arguments.length>0)for(var r=0,n=arguments.length;r1)r=t;else{if(!this.head)throw new TypeError("Reduce of empty list with no initial value");n=this.head.next,r=this.head.value}for(var i=0;null!==n;i++)r=e(r,n.value,i),n=n.next;return r},st.prototype.reduceReverse=function(e,t){var r,n=this.tail;if(arguments.length>1)r=t;else{if(!this.tail)throw new TypeError("Reduce of empty list with no initial value");n=this.tail.prev,r=this.tail.value}for(var i=this.length-1;null!==n;i--)r=e(r,n.value,i),n=n.prev;return r},st.prototype.toArray=function(){for(var e=new Array(this.length),t=0,r=this.head;null!==r;t++)e[t]=r.value,r=r.next;return e},st.prototype.toArrayReverse=function(){for(var e=new Array(this.length),t=0,r=this.tail;null!==r;t++)e[t]=r.value,r=r.prev;return e},st.prototype.slice=function(e,t){(t=t||this.length)<0&&(t+=this.length),(e=e||0)<0&&(e+=this.length);var r=new st;if(tthis.length&&(t=this.length);for(var n=0,i=this.head;null!==i&&nthis.length&&(t=this.length);for(var n=this.length,i=this.tail;null!==i&&n>t;n--)i=i.prev;for(;null!==i&&n>e;n--,i=i.prev)r.push(i.value);return r},st.prototype.splice=function(e,t,...r){e>this.length&&(e=this.length-1),e<0&&(e=this.length+e);for(var n=0,i=this.head;null!==i&&n1;const At=(e,t,r)=>{const n=e[yt].get(t);if(n){const t=n.value;if(It(e,t)){if(Rt(e,n),!e[vt])return}else r&&(e[wt]&&(n.value.now=Date.now()),e[bt].unshiftNode(n));return t.value}},It=(e,t)=>{if(!t||!t.maxAge&&!e[gt])return!1;const r=Date.now()-t.now;return t.maxAge?r>t.maxAge:e[gt]&&r>e[gt]},$t=e=>{if(e[ft]>e[ut])for(let t=e[bt].tail;e[ft]>e[ut]&&null!==t;){const r=t.prev;Rt(e,t),t=r}},Rt=(e,t)=>{if(t){const r=t.value;e[mt]&&e[mt](r.key,r.value),e[ft]-=r.length,e[yt].delete(r.key),e[bt].removeNode(t)}};class xt{constructor(e,t,r,n,i){this.key=e,this.value=t,this.length=r,this.now=n,this.maxAge=i||0}}const Nt=(e,t,r,n)=>{let i=r.value;It(e,i)&&(Rt(e,r),e[vt]||(i=void 0)),i&&t.call(n,i.value,i.key,e)};var St=class{constructor(e){if("number"==typeof e&&(e={max:e}),e||(e={}),e.max&&("number"!=typeof e.max||e.max<0))throw new TypeError("max must be a non-negative number");this[ut]=e.max||1/0;const t=e.length||Ot;if(this[dt]="function"!=typeof t?Ot:t,this[vt]=e.stale||!1,e.maxAge&&"number"!=typeof e.maxAge)throw new TypeError("maxAge must be a number");this[gt]=e.maxAge||0,this[mt]=e.dispose,this[Et]=e.noDisposeOnSet||!1,this[wt]=e.updateAgeOnGet||!1,this.reset()}set max(e){if("number"!=typeof e||e<0)throw new TypeError("max must be a non-negative number");this[ut]=e||1/0,$t(this)}get max(){return this[ut]}set allowStale(e){this[vt]=!!e}get allowStale(){return this[vt]}set maxAge(e){if("number"!=typeof e)throw new TypeError("maxAge must be a non-negative number");this[gt]=e,$t(this)}get maxAge(){return this[gt]}set lengthCalculator(e){"function"!=typeof e&&(e=Ot),e!==this[dt]&&(this[dt]=e,this[ft]=0,this[bt].forEach((e=>{e.length=this[dt](e.value,e.key),this[ft]+=e.length}))),$t(this)}get lengthCalculator(){return this[dt]}get length(){return this[ft]}get itemCount(){return this[bt].length}rforEach(e,t){t=t||this;for(let r=this[bt].tail;null!==r;){const n=r.prev;Nt(this,e,r,t),r=n}}forEach(e,t){t=t||this;for(let r=this[bt].head;null!==r;){const n=r.next;Nt(this,e,r,t),r=n}}keys(){return this[bt].toArray().map((e=>e.key))}values(){return this[bt].toArray().map((e=>e.value))}reset(){this[mt]&&this[bt]&&this[bt].length&&this[bt].forEach((e=>this[mt](e.key,e.value))),this[yt]=new Map,this[bt]=new pt,this[ft]=0}dump(){return this[bt].map((e=>!It(this,e)&&{k:e.key,v:e.value,e:e.now+(e.maxAge||0)})).toArray().filter((e=>e))}dumpLru(){return this[bt]}set(e,t,r){if((r=r||this[gt])&&"number"!=typeof r)throw new TypeError("maxAge must be a number");const n=r?Date.now():0,i=this[dt](t,e);if(this[yt].has(e)){if(i>this[ut])return Rt(this,this[yt].get(e)),!1;const o=this[yt].get(e).value;return this[mt]&&(this[Et]||this[mt](e,o.value)),o.now=n,o.maxAge=r,o.value=t,this[ft]+=i-o.length,o.length=i,this.get(e),$t(this),!0}const o=new xt(e,t,i,n,r);return o.length>this[ut]?(this[mt]&&this[mt](e,t),!1):(this[ft]+=o.length,this[bt].unshift(o),this[yt].set(e,this[bt].head),$t(this),!0)}has(e){if(!this[yt].has(e))return!1;const t=this[yt].get(e).value;return!It(this,t)}get(e){return At(this,e,!0)}peek(e){return At(this,e,!1)}pop(){const e=this[bt].tail;return e?(Rt(this,e),e.value):null}del(e){Rt(this,this[yt].get(e))}load(e){this.reset();const t=Date.now();for(let r=e.length-1;r>=0;r--){const n=e[r],i=n.e||0;if(0===i)this.set(n.k,n.v);else{const e=i-t;e>0&&this.set(n.k,n.v,e)}}}prune(){this[yt].forEach(((e,t)=>At(this,t,!1)))}};class Tt{constructor(e,t){if(t=Dt(t),e instanceof Tt)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new Tt(e.raw,t);if(e instanceof kt)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map((e=>this.parseRange(e.trim()))).filter((e=>e.length)),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){const e=this.set[0];if(this.set=this.set.filter((e=>!Gt(e[0]))),0===this.set.length)this.set=[e];else if(this.set.length>1)for(const e of this.set)if(1===e.length&&Ut(e[0])){this.set=[e];break}}this.format()}format(){return this.range=this.set.map((e=>e.join(" ").trim())).join("||").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();const t=`parseRange:${Object.keys(this.options).join(",")}:${e}`,r=Ct.get(t);if(r)return r;const n=this.options.loose,i=n?_t[jt.HYPHENRANGELOOSE]:_t[jt.HYPHENRANGE];e=e.replace(i,tr(this.options.includePrerelease)),Ft("hyphen replace",e),e=e.replace(_t[jt.COMPARATORTRIM],zt),Ft("comparator trim",e,_t[jt.COMPARATORTRIM]),e=(e=(e=e.replace(_t[jt.TILDETRIM],Mt)).replace(_t[jt.CARETTRIM],Bt)).split(/\s+/).join(" ");const o=n?_t[jt.COMPARATORLOOSE]:_t[jt.COMPARATOR],s=e.split(" ").map((e=>Vt(e,this.options))).join(" ").split(/\s+/).map((e=>er(e,this.options))).filter(this.options.loose?e=>!!e.match(o):()=>!0).map((e=>new kt(e,this.options)));s.length;const a=new Map;for(const e of s){if(Gt(e))return[e];a.set(e.value,e)}a.size>1&&a.has("")&&a.delete("");const l=[...a.values()];return Ct.set(t,l),l}intersects(e,t){if(!(e instanceof Tt))throw new TypeError("a Range is required");return this.set.some((r=>Xt(r,t)&&e.set.some((e=>Xt(e,t)&&r.every((r=>e.every((e=>r.intersects(e,t)))))))))}test(e){if(!e)return!1;if("string"==typeof e)try{e=new Pt(e,this.options)}catch(e){return!1}for(let t=0;t"<0.0.0-0"===e.value,Ut=e=>""===e.value,Xt=(e,t)=>{let r=!0;const n=e.slice();let i=n.pop();for(;r&&n.length;)r=n.every((e=>i.intersects(e,t))),i=n.pop();return r},Vt=(e,t)=>(Ft("comp",e,t),e=Yt(e,t),Ft("caret",e),e=Ht(e,t),Ft("tildes",e),e=Qt(e,t),Ft("xrange",e),e=Kt(e,t),Ft("stars",e),e),Wt=e=>!e||"x"===e.toLowerCase()||"*"===e,Ht=(e,t)=>e.trim().split(/\s+/).map((e=>qt(e,t))).join(" "),qt=(e,t)=>{const r=t.loose?_t[jt.TILDELOOSE]:_t[jt.TILDE];return e.replace(r,((t,r,n,i,o)=>{let s;return Ft("tilde",e,t,r,n,i,o),Wt(r)?s="":Wt(n)?s=`>=${r}.0.0 <${+r+1}.0.0-0`:Wt(i)?s=`>=${r}.${n}.0 <${r}.${+n+1}.0-0`:o?(Ft("replaceTilde pr",o),s=`>=${r}.${n}.${i}-${o} <${r}.${+n+1}.0-0`):s=`>=${r}.${n}.${i} <${r}.${+n+1}.0-0`,Ft("tilde return",s),s}))},Yt=(e,t)=>e.trim().split(/\s+/).map((e=>Jt(e,t))).join(" "),Jt=(e,t)=>{Ft("caret",e,t);const r=t.loose?_t[jt.CARETLOOSE]:_t[jt.CARET],n=t.includePrerelease?"-0":"";return e.replace(r,((t,r,i,o,s)=>{let a;return Ft("caret",e,t,r,i,o,s),Wt(r)?a="":Wt(i)?a=`>=${r}.0.0${n} <${+r+1}.0.0-0`:Wt(o)?a="0"===r?`>=${r}.${i}.0${n} <${r}.${+i+1}.0-0`:`>=${r}.${i}.0${n} <${+r+1}.0.0-0`:s?(Ft("replaceCaret pr",s),a="0"===r?"0"===i?`>=${r}.${i}.${o}-${s} <${r}.${i}.${+o+1}-0`:`>=${r}.${i}.${o}-${s} <${r}.${+i+1}.0-0`:`>=${r}.${i}.${o}-${s} <${+r+1}.0.0-0`):(Ft("no pr"),a="0"===r?"0"===i?`>=${r}.${i}.${o}${n} <${r}.${i}.${+o+1}-0`:`>=${r}.${i}.${o}${n} <${r}.${+i+1}.0-0`:`>=${r}.${i}.${o} <${+r+1}.0.0-0`),Ft("caret return",a),a}))},Qt=(e,t)=>(Ft("replaceXRanges",e,t),e.split(/\s+/).map((e=>Zt(e,t))).join(" ")),Zt=(e,t)=>{e=e.trim();const r=t.loose?_t[jt.XRANGELOOSE]:_t[jt.XRANGE];return e.replace(r,((r,n,i,o,s,a)=>{Ft("xRange",e,r,n,i,o,s,a);const l=Wt(i),c=l||Wt(o),h=c||Wt(s),p=h;return"="===n&&p&&(n=""),a=t.includePrerelease?"-0":"",l?r=">"===n||"<"===n?"<0.0.0-0":"*":n&&p?(c&&(o=0),s=0,">"===n?(n=">=",c?(i=+i+1,o=0,s=0):(o=+o+1,s=0)):"<="===n&&(n="<",c?i=+i+1:o=+o+1),"<"===n&&(a="-0"),r=`${n+i}.${o}.${s}${a}`):c?r=`>=${i}.0.0${a} <${+i+1}.0.0-0`:h&&(r=`>=${i}.${o}.0${a} <${i}.${+o+1}.0-0`),Ft("xRange return",r),r}))},Kt=(e,t)=>(Ft("replaceStars",e,t),e.trim().replace(_t[jt.STAR],"")),er=(e,t)=>(Ft("replaceGTE0",e,t),e.trim().replace(_t[t.includePrerelease?jt.GTE0PRE:jt.GTE0],"")),tr=e=>(t,r,n,i,o,s,a,l,c,h,p,u,f)=>`${r=Wt(n)?"":Wt(i)?`>=${n}.0.0${e?"-0":""}`:Wt(o)?`>=${n}.${i}.0${e?"-0":""}`:s?`>=${r}`:`>=${r}${e?"-0":""}`} ${l=Wt(c)?"":Wt(h)?`<${+c+1}.0.0-0`:Wt(p)?`<${c}.${+h+1}.0-0`:u?`<=${c}.${h}.${p}-${u}`:e?`<${c}.${h}.${+p+1}-0`:`<=${l}`}`.trim(),rr=(e,t,r)=>{for(let r=0;r0){const n=e[r].semver;if(n.major===t.major&&n.minor===t.minor&&n.patch===t.patch)return!0}return!1}return!0},nr=Symbol("SemVer ANY");class ir{static get ANY(){return nr}constructor(e,t){if(t=sr(t),e instanceof ir){if(e.loose===!!t.loose)return e;e=e.value}hr("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===nr?this.value="":this.value=this.operator+this.semver.version,hr("comp",this)}parse(e){const t=this.options.loose?ar[lr.COMPARATORLOOSE]:ar[lr.COMPARATOR],r=e.match(t);if(!r)throw new TypeError(`Invalid comparator: ${e}`);this.operator=void 0!==r[1]?r[1]:"","="===this.operator&&(this.operator=""),r[2]?this.semver=new pr(r[2],this.options.loose):this.semver=nr}toString(){return this.value}test(e){if(hr("Comparator.test",e,this.options.loose),this.semver===nr||e===nr)return!0;if("string"==typeof e)try{e=new pr(e,this.options)}catch(e){return!1}return cr(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof ir))throw new TypeError("a Comparator is required");if(t&&"object"==typeof t||(t={loose:!!t,includePrerelease:!1}),""===this.operator)return""===this.value||new ur(e.value,t).test(this.value);if(""===e.operator)return""===e.value||new ur(this.value,t).test(e.semver);const r=!(">="!==this.operator&&">"!==this.operator||">="!==e.operator&&">"!==e.operator),n=!("<="!==this.operator&&"<"!==this.operator||"<="!==e.operator&&"<"!==e.operator),i=this.semver.version===e.semver.version,o=!(">="!==this.operator&&"<="!==this.operator||">="!==e.operator&&"<="!==e.operator),s=cr(this.semver,"<",e.semver,t)&&(">="===this.operator||">"===this.operator)&&("<="===e.operator||"<"===e.operator),a=cr(this.semver,">",e.semver,t)&&("<="===this.operator||"<"===this.operator)&&(">="===e.operator||">"===e.operator);return r||n||i&&o||s||a}}var or=ir;const sr=B,{re:ar,t:lr}=_.exports,cr=Ke,hr=z,pr=K,ur=Lt,fr=Lt;var dr=(e,t,r)=>{try{t=new fr(t,r)}catch(e){return!1}return t.test(e)};const vr=Lt;var gr=(e,t)=>new vr(e,t).set.map((e=>e.map((e=>e.value)).join(" ").trim().split(" ")));const mr=K,Er=Lt;var br=(e,t,r)=>{let n=null,i=null,o=null;try{o=new Er(t,r)}catch(e){return null}return e.forEach((e=>{o.test(e)&&(n&&-1!==i.compare(e)||(n=e,i=new mr(n,r)))})),n};const yr=K,wr=Lt;var Or=(e,t,r)=>{let n=null,i=null,o=null;try{o=new wr(t,r)}catch(e){return null}return e.forEach((e=>{o.test(e)&&(n&&1!==i.compare(e)||(n=e,i=new yr(n,r)))})),n};const Ar=K,Ir=Lt,$r=je;var Rr=(e,t)=>{e=new Ir(e,t);let r=new Ar("0.0.0");if(e.test(r))return r;if(r=new Ar("0.0.0-0"),e.test(r))return r;r=null;for(let t=0;t{const t=new Ar(e.semver.version);switch(e.operator){case">":0===t.prerelease.length?t.patch++:t.prerelease.push(0),t.raw=t.format();case"":case">=":i&&!$r(t,i)||(i=t);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${e.operator}`)}})),!i||r&&!$r(r,i)||(r=i)}return r&&e.test(r)?r:null};const xr=Lt;var Nr=(e,t)=>{try{return new xr(e,t).range||"*"}catch(e){return null}};const Sr=K,Tr=or,{ANY:Lr}=Tr,Cr=Lt,Dr=dr,kr=je,Fr=Me,Pr=We,_r=Xe;var jr=(e,t,r,n)=>{let i,o,s,a,l;switch(e=new Sr(e,n),t=new Cr(t,n),r){case">":i=kr,o=Pr,s=Fr,a=">",l=">=";break;case"<":i=Fr,o=_r,s=kr,a="<",l="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(Dr(e,t,n))return!1;for(let r=0;r{e.semver===Lr&&(e=new Tr(">=0.0.0")),h=h||e,p=p||e,i(e.semver,h.semver,n)?h=e:s(e.semver,p.semver,n)&&(p=e)})),h.operator===a||h.operator===l)return!1;if((!p.operator||p.operator===a)&&o(e,p.semver))return!1;if(p.operator===l&&s(e,p.semver))return!1}return!0};const zr=jr;var Mr=(e,t,r)=>zr(e,t,">",r);const Br=jr;var Gr=(e,t,r)=>Br(e,t,"<",r);const Ur=Lt;var Xr=(e,t,r)=>(e=new Ur(e,r),t=new Ur(t,r),e.intersects(t));const Vr=dr,Wr=fe;const Hr=Lt,qr=or,{ANY:Yr}=qr,Jr=dr,Qr=fe,Zr=(e,t,r)=>{if(e===t)return!0;if(1===e.length&&e[0].semver===Yr){if(1===t.length&&t[0].semver===Yr)return!0;e=r.includePrerelease?[new qr(">=0.0.0-0")]:[new qr(">=0.0.0")]}if(1===t.length&&t[0].semver===Yr){if(r.includePrerelease)return!0;t=[new qr(">=0.0.0")]}const n=new Set;let i,o,s,a,l,c,h;for(const t of e)">"===t.operator||">="===t.operator?i=Kr(i,t,r):"<"===t.operator||"<="===t.operator?o=en(o,t,r):n.add(t.semver);if(n.size>1)return null;if(i&&o){if(s=Qr(i.semver,o.semver,r),s>0)return null;if(0===s&&(">="!==i.operator||"<="!==o.operator))return null}for(const e of n){if(i&&!Jr(e,String(i),r))return null;if(o&&!Jr(e,String(o),r))return null;for(const n of t)if(!Jr(e,String(n),r))return!1;return!0}let p=!(!o||r.includePrerelease||!o.semver.prerelease.length)&&o.semver,u=!(!i||r.includePrerelease||!i.semver.prerelease.length)&&i.semver;p&&1===p.prerelease.length&&"<"===o.operator&&0===p.prerelease[0]&&(p=!1);for(const e of t){if(h=h||">"===e.operator||">="===e.operator,c=c||"<"===e.operator||"<="===e.operator,i)if(u&&e.semver.prerelease&&e.semver.prerelease.length&&e.semver.major===u.major&&e.semver.minor===u.minor&&e.semver.patch===u.patch&&(u=!1),">"===e.operator||">="===e.operator){if(a=Kr(i,e,r),a===e&&a!==i)return!1}else if(">="===i.operator&&!Jr(i.semver,String(e),r))return!1;if(o)if(p&&e.semver.prerelease&&e.semver.prerelease.length&&e.semver.major===p.major&&e.semver.minor===p.minor&&e.semver.patch===p.patch&&(p=!1),"<"===e.operator||"<="===e.operator){if(l=en(o,e,r),l===e&&l!==o)return!1}else if("<="===o.operator&&!Jr(o.semver,String(e),r))return!1;if(!e.operator&&(o||i)&&0!==s)return!1}return!(i&&c&&!o&&0!==s)&&(!(o&&h&&!i&&0!==s)&&(!u&&!p))},Kr=(e,t,r)=>{if(!e)return t;const n=Qr(e.semver,t.semver,r);return n>0?e:n<0||">"===t.operator&&">="===e.operator?t:e},en=(e,t,r)=>{if(!e)return t;const n=Qr(e.semver,t.semver,r);return n<0?e:n>0||"<"===t.operator&&"<="===e.operator?t:e};var tn=(e,t,r={})=>{if(e===t)return!0;e=new Hr(e,r),t=new Hr(t,r);let n=!1;e:for(const i of e.set){for(const e of t.set){const t=Zr(i,e,r);if(n=n||null!==t,t)continue e}if(n)return!1}return!0};const rn=_.exports;var nn={re:rn.re,src:rn.src,tokens:rn.t,SEMVER_SPEC_VERSION:j.SEMVER_SPEC_VERSION,SemVer:K,compareIdentifiers:X.compareIdentifiers,rcompareIdentifiers:X.rcompareIdentifiers,parse:oe,valid:ae,clean:ce,inc:pe,diff:Ee,major:ye,minor:Oe,patch:Ie,prerelease:Re,compare:fe,rcompare:Ne,compareLoose:Te,compareBuild:Ce,sort:ke,rsort:Pe,gt:je,lt:Me,eq:ve,neq:Ge,gte:Xe,lte:We,cmp:Ke,coerce:it,Comparator:or,Range:Lt,satisfies:dr,toComparators:gr,maxSatisfying:br,minSatisfying:Or,minVersion:Rr,validRange:Nr,outside:jr,gtr:Mr,ltr:Gr,intersects:Xr,simplifyRange:(e,t,r)=>{const n=[];let i=null,o=null;const s=e.sort(((e,t)=>Wr(e,t,r)));for(const e of s){Vr(e,t,r)?(o=e,i||(i=e)):(o&&n.push([i,o]),o=null,i=null)}i&&n.push([i,null]);const a=[];for(const[e,t]of n)e===t?a.push(e):t||e!==s[0]?t?e===s[0]?a.push(`<=${t}`):a.push(`${e} - ${t}`):a.push(`>=${e}`):a.push("*");const l=a.join(" || "),c="string"==typeof t.raw?t.raw:String(t);return l.lengthfunction(t){return t[e]},Un=e=>{const t=e.length;return function(r){for(let n=0;nn&&c(),a=n=i+1):"]"===o&&(a||Xn("Access path missing open bracket: "+e),a>0&&c(),a=0,n=i+1):i>n?c():n=i+1}return a&&Xn("Access path missing closing bracket: "+e),s&&Xn("Access path missing closing quote: "+e),i>n&&(i++,c()),t}(e);e=1===n.length?n[0]:e,Mn((r&&r.get||Bn)(n),[e],t||e)}("id"),Mn((e=>e),[],"identity"),Mn((()=>0),[],"zero"),Mn((()=>1),[],"one"),Mn((()=>!0),[],"true"),Mn((()=>!1),[],"false");var Vn=Array.isArray;function Wn(e){return e===Object(e)}var Hn="#vg-tooltip-element {\n visibility: hidden;\n padding: 8px;\n position: fixed;\n z-index: 1000;\n font-family: sans-serif;\n font-size: 11px;\n border-radius: 3px;\n box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1);\n /* The default theme is the light theme. */\n background-color: rgba(255, 255, 255, 0.95);\n border: 1px solid #d9d9d9;\n color: black; }\n #vg-tooltip-element.visible {\n visibility: visible; }\n #vg-tooltip-element h2 {\n margin-top: 0;\n margin-bottom: 10px;\n font-size: 13px; }\n #vg-tooltip-element img {\n max-width: 200px;\n max-height: 200px; }\n #vg-tooltip-element table {\n border-spacing: 0; }\n #vg-tooltip-element table tr {\n border: none; }\n #vg-tooltip-element table tr td {\n overflow: hidden;\n text-overflow: ellipsis;\n padding-top: 2px;\n padding-bottom: 2px; }\n #vg-tooltip-element table tr td.key {\n color: #808080;\n max-width: 150px;\n text-align: right;\n padding-right: 4px; }\n #vg-tooltip-element table tr td.value {\n display: block;\n max-width: 300px;\n max-height: 7em;\n text-align: left; }\n #vg-tooltip-element.dark-theme {\n background-color: rgba(32, 32, 32, 0.9);\n border: 1px solid #f5f5f5;\n color: white; }\n #vg-tooltip-element.dark-theme td.key {\n color: #bfbfbf; }\n";const qn="vg-tooltip-element",Yn={offsetX:10,offsetY:10,id:qn,styleId:"vega-tooltip-style",theme:"light",disableDefaultStyle:!1,sanitize:function(e){return String(e).replace(/&/g,"&").replace(/t("string"==typeof e?e:Qn(e,r)))).join(", ")}]`;if(Wn(e)){let n="";const i=e,{title:o,image:s}=i,a= +/*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ +function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i${t(o)}`),s&&(n+=``);const l=Object.keys(a);if(l.length>0){n+="";for(const e of l){let i=a[e];void 0!==i&&(Wn(i)&&(i=Qn(i,r)),n+=``)}n+="
${t(e)}:${t(i)}
"}return n||"{}"}return t(e)}function Qn(e,t){return JSON.stringify(e,function(e){const t=[];return function(r,n){if("object"!=typeof n||null===n)return n;const i=t.indexOf(this)+1;return t.length=i,t.length>e?"[Object]":t.indexOf(n)>=0?"[Circular]":(t.push(n),n)}}(t))}class Zn{constructor(e){this.options=Object.assign(Object.assign({},Yn),e);const t=this.options.id;if(this.el=null,this.call=this.tooltipHandler.bind(this),!this.options.disableDefaultStyle&&!document.getElementById(this.options.styleId)){const e=document.createElement("style");e.setAttribute("id",this.options.styleId),e.innerHTML=function(e){if(!/^[A-Za-z]+[-:.\w]*$/.test(e))throw new Error("Invalid HTML ID");return Hn.toString().replace(qn,e)}(t);const r=document.head;r.childNodes.length>0?r.insertBefore(e,r.childNodes[0]):r.appendChild(e)}}tooltipHandler(e,t,r,n){this.el=document.getElementById(this.options.id),this.el||(this.el=document.createElement("div"),this.el.setAttribute("id",this.options.id),this.el.classList.add("vg-tooltip"),document.body.appendChild(this.el));if((null!=document.fullscreenElement?document.fullscreenElement:document.body).appendChild(this.el),null==n||""===n)return void this.el.classList.remove("visible",`${this.options.theme}-theme`);this.el.innerHTML=Jn(n,this.options.sanitize,this.options.maxDepth),this.el.classList.add("visible",`${this.options.theme}-theme`);const{x:i,y:o}=function(e,t,r,n){let i=e.clientX+r;i+t.width>window.innerWidth&&(i=+e.clientX-r-t.width);let o=e.clientY+n;return o+t.height>window.innerHeight&&(o=+e.clientY-n-t.height),{x:i,y:o}}(t,this.el.getBoundingClientRect(),this.options.offsetX,this.options.offsetY);this.el.setAttribute("style",`top: ${o}px; left: ${i}px`)}}var Kn,ei='.vega-embed {\n position: relative;\n display: inline-block;\n box-sizing: border-box; }\n .vega-embed.has-actions {\n padding-right: 38px; }\n .vega-embed details:not([open]) > :not(summary) {\n display: none !important; }\n .vega-embed summary {\n list-style: none;\n position: absolute;\n top: 0;\n right: 0;\n padding: 6px;\n z-index: 1000;\n background: white;\n box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1);\n color: #1b1e23;\n border: 1px solid #aaa;\n border-radius: 999px;\n opacity: 0.2;\n transition: opacity 0.4s ease-in;\n outline: none;\n cursor: pointer;\n line-height: 0px; }\n .vega-embed summary::-webkit-details-marker {\n display: none; }\n .vega-embed summary:active {\n box-shadow: #aaa 0px 0px 0px 1px inset; }\n .vega-embed summary svg {\n width: 14px;\n height: 14px; }\n .vega-embed details[open] summary {\n opacity: 0.7; }\n .vega-embed:hover summary,\n .vega-embed:focus summary {\n opacity: 1 !important;\n transition: opacity 0.2s ease; }\n .vega-embed .vega-actions {\n position: absolute;\n z-index: 1001;\n top: 35px;\n right: -9px;\n display: flex;\n flex-direction: column;\n padding-bottom: 8px;\n padding-top: 8px;\n border-radius: 4px;\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.2);\n border: 1px solid #d9d9d9;\n background: white;\n animation-duration: 0.15s;\n animation-name: scale-in;\n animation-timing-function: cubic-bezier(0.2, 0, 0.13, 1.5);\n text-align: left; }\n .vega-embed .vega-actions a {\n padding: 8px 16px;\n font-family: sans-serif;\n font-size: 14px;\n font-weight: 600;\n white-space: nowrap;\n color: #434a56;\n text-decoration: none; }\n .vega-embed .vega-actions a:hover {\n background-color: #f7f7f9;\n color: black; }\n .vega-embed .vega-actions::before, .vega-embed .vega-actions::after {\n content: "";\n display: inline-block;\n position: absolute; }\n .vega-embed .vega-actions::before {\n left: auto;\n right: 14px;\n top: -16px;\n border: 8px solid #0000;\n border-bottom-color: #d9d9d9; }\n .vega-embed .vega-actions::after {\n left: auto;\n right: 15px;\n top: -14px;\n border: 7px solid #0000;\n border-bottom-color: #fff; }\n .vega-embed .chart-wrapper.fit-x {\n width: 100%; }\n .vega-embed .chart-wrapper.fit-y {\n height: 100%; }\n\n.vega-embed-wrapper {\n max-width: 100%;\n overflow: auto;\n padding-right: 14px; }\n\n@keyframes scale-in {\n from {\n opacity: 0;\n transform: scale(0.6); }\n to {\n opacity: 1;\n transform: scale(1); } }\n';function ti(e,...t){for(const r of t)ri(e,r);return e}function ri(t,r){for(const n of Object.keys(r))e.writeConfig(t,n,r[n],!0)}String.prototype.startsWith||(String.prototype.startsWith=function(e,t){return this.substr(!t||t<0?0:+t,e.length)===e});const ni=i;let ii=o;const oi="undefined"!=typeof window?window:void 0;void 0===ii&&null!=oi&&null!==(Kn=oi.vl)&&void 0!==Kn&&Kn.compile&&(ii=oi.vl);const si={export:{svg:!0,png:!0},source:!0,compiled:!0,editor:!0},ai={CLICK_TO_VIEW_ACTIONS:"Click to view actions",COMPILED_ACTION:"View Compiled Vega",EDITOR_ACTION:"Open in Vega Editor",PNG_ACTION:"Save as PNG",SOURCE_ACTION:"View Source",SVG_ACTION:"Save as SVG"},li={vega:"Vega","vega-lite":"Vega-Lite"},ci={vega:ni.version,"vega-lite":ii?ii.version:"not available"},hi={vega:e=>e,"vega-lite":(e,t)=>ii.compile(e,{config:t}).spec},pi='\n\n \n \n \n',ui="chart-wrapper";function fi(e,t,r,n){const i=`${t}
`,o=`
${r}`,s=window.open("");s.document.write(i+e+o),s.document.title=`${li[n]} JSON Source`}function di(e){return(t=e)&&"load"in t?e:ni.loader(e);var t}function vi(e){var t;return null!==(t=e.usermeta&&e.usermeta.embedOptions)&&void 0!==t?t:{}}async function gi(t,r,n={}){var i,o;let s,a;e.isString(r)?(a=di(n.loader),s=JSON.parse(await a.load(r))):s=r;const l=vi(s).loader;var c;a&&!l||(a=di(null!==(c=n.loader)&&void 0!==c?c:l));const h=await mi(vi(s),a),p=await mi(n,a),u={...ti(p,h),config:e.mergeConfig(null!==(i=p.config)&&void 0!==i?i:{},null!==(o=h.config)&&void 0!==o?o:{})};return await async function(t,r,n={},i){var o,s,a,l,c;const h=n.theme?e.mergeConfig(zn[n.theme],null!==(o=n.config)&&void 0!==o?o:{}):n.config,p=e.isBoolean(n.actions)?n.actions:ti({},si,null!==(s=n.actions)&&void 0!==s?s:{}),u={...ai,...n.i18n},f=null!==(a=n.renderer)&&void 0!==a?a:"canvas",d=null!==(l=n.logLevel)&&void 0!==l?l:ni.Warn,v=null!==(c=n.downloadFileName)&&void 0!==c?c:"visualization",g="string"==typeof t?document.querySelector(t):t;if(!g)throw new Error(`${t} does not exist`);if(!1!==n.defaultStyle){const e="vega-embed-style",{root:t,rootContainer:r}=function(e){const t=e.getRootNode?e.getRootNode():document;var r;return t instanceof ShadowRoot?{root:t,rootContainer:t}:{root:document,rootContainer:null!==(r=document.head)&&void 0!==r?r:document.body}}(g);if(!t.getElementById(e)){const t=document.createElement("style");t.id=e,t.innerText=void 0===n.defaultStyle||!0===n.defaultStyle?ei.toString():n.defaultStyle,r.appendChild(t)}}const m=function(e,t){if(e.$schema){const n=on(e.$schema);var r;t&&t!==n.library&&console.warn(`The given visualization spec is written in ${li[n.library]}, but mode argument sets ${null!==(r=li[t])&&void 0!==r?r:t}.`);const i=n.library;return nn.satisfies(ci[i],`^${n.version.slice(1)}`)||console.warn(`The input spec uses ${li[i]} ${n.version}, but the current version of ${li[i]} is v${ci[i]}.`),i}return"mark"in e||"encoding"in e||"layer"in e||"hconcat"in e||"vconcat"in e||"facet"in e||"repeat"in e?"vega-lite":"marks"in e||"signals"in e||"scales"in e||"axes"in e?"vega":null!=t?t:"vega"}(r,n.mode);let E=hi[m](r,h);if("vega-lite"===m&&E.$schema){const e=on(E.$schema);nn.satisfies(ci.vega,`^${e.version.slice(1)}`)||console.warn(`The compiled spec uses Vega ${e.version}, but current version is v${ci.vega}.`)}g.classList.add("vega-embed"),p&&g.classList.add("has-actions");g.innerHTML="";let b=g;if(p){const e=document.createElement("div");e.classList.add(ui),g.appendChild(e),b=e}const y=n.patch;y&&(E=y instanceof Function?y(E):I(E,y,!0,!1).newDocument);n.formatLocale&&ni.formatLocale(n.formatLocale);n.timeFormatLocale&&ni.timeFormatLocale(n.timeFormatLocale);const{ast:w}=n,O=ni.parse(E,"vega-lite"===m?{}:h,{ast:w}),A=new(n.viewClass||ni.View)(O,{loader:i,logLevel:d,renderer:f,...w?{expr:ni.expressionInterpreter}:{}});if(A.addSignalListener("autosize",((e,t)=>{const{type:r}=t;"fit-x"==r?(b.classList.add("fit-x"),b.classList.remove("fit-y")):"fit-y"==r?(b.classList.remove("fit-x"),b.classList.add("fit-y")):"fit"==r?b.classList.add("fit-x","fit-y"):b.classList.remove("fit-x","fit-y")})),!1!==n.tooltip){let e;e="function"==typeof n.tooltip?n.tooltip:new Zn(!0===n.tooltip?{}:n.tooltip).call,A.tooltip(e)}let $,{hover:R}=n;void 0===R&&(R="vega"===m);if(R){const{hoverSet:e,updateSet:t}="boolean"==typeof R?{}:R;A.hover(e,t)}n&&(null!=n.width&&A.width(n.width),null!=n.height&&A.height(n.height),null!=n.padding&&A.padding(n.padding));if(await A.initialize(b,n.bind).runAsync(),!1!==p){let e=g;if(!1!==n.defaultStyle){const t=document.createElement("details");t.title=u.CLICK_TO_VIEW_ACTIONS,g.append(t),e=t;const r=document.createElement("summary");r.innerHTML=pi,t.append(r),$=e=>{t.contains(e.target)||t.removeAttribute("open")},document.addEventListener("click",$)}const t=document.createElement("div");if(e.append(t),t.classList.add("vega-actions"),!0===p||!1!==p.export)for(const e of["svg","png"])if(!0===p||!0===p.export||p.export[e]){const r=u[`${e.toUpperCase()}_ACTION`],i=document.createElement("a");i.text=r,i.href="#",i.target="_blank",i.download=`${v}.${e}`,i.addEventListener("mousedown",(async function(t){t.preventDefault();const r=await A.toImageURL(e,n.scaleFactor);this.href=r})),t.append(i)}if(!0===p||!1!==p.source){const e=document.createElement("a");e.text=u.SOURCE_ACTION,e.href="#",e.addEventListener("click",(function(e){var t,i;fi(P(r),null!==(t=n.sourceHeader)&&void 0!==t?t:"",null!==(i=n.sourceFooter)&&void 0!==i?i:"",m),e.preventDefault()})),t.append(e)}if("vega-lite"===m&&(!0===p||!1!==p.compiled)){const e=document.createElement("a");e.text=u.COMPILED_ACTION,e.href="#",e.addEventListener("click",(function(e){var t,r;fi(P(E),null!==(t=n.sourceHeader)&&void 0!==t?t:"",null!==(r=n.sourceFooter)&&void 0!==r?r:"","vega"),e.preventDefault()})),t.append(e)}if(!0===p||!1!==p.editor){var x;const e=null!==(x=n.editorUrl)&&void 0!==x?x:"https://vega.github.io/editor/",i=document.createElement("a");i.text=u.EDITOR_ACTION,i.href="#",i.addEventListener("click",(function(t){!function(e,t,r){const n=e.open(t),{origin:i}=new URL(t);let o=40;e.addEventListener("message",(function t(r){r.source===n&&(o=0,e.removeEventListener("message",t,!1))}),!1),setTimeout((function e(){o<=0||(n.postMessage(r,i),setTimeout(e,250),o-=1)}),250)}(window,e,{config:h,mode:m,renderer:f,spec:P(r)}),t.preventDefault()})),t.append(i)}}function N(){$&&document.removeEventListener("click",$),A.finalize()}return{view:A,spec:r,vgSpec:E,finalize:N}}(t,s,u,a)}async function mi(t,r){var n;const i=e.isString(t.config)?JSON.parse(await r.load(t.config)):null!==(n=t.config)&&void 0!==n?n:{},o=e.isString(t.patch)?JSON.parse(await r.load(t.patch)):t.patch;return{...t,...o?{patch:o}:{},...i?{config:i}:{}}}async function Ei(e,t={}){var r;const n=document.createElement("div");n.classList.add("vega-embed-wrapper");const i=document.createElement("div");n.appendChild(i);const o=!0===t.actions||!1===t.actions?t.actions:{export:!0,source:!1,compiled:!0,editor:!0,...null!==(r=t.actions)&&void 0!==r?r:{}},s=await gi(i,e,{actions:o,...null!=t?t:{}});return n.value=s.view,n}const bi=(...t)=>{return t.length>1&&(e.isString(t[0])&&!((r=t[0]).startsWith("http://")||r.startsWith("https://")||r.startsWith("//"))||t[0]instanceof HTMLElement||3===t.length)?gi(t[0],t[1],t[2]):Ei(t[0],t[1]);var r};return bi.vegaLite=ii,bi.vl=ii,bi.container=Ei,bi.embed=gi,bi.vega=ni,bi.default=gi,bi.version=s,bi})); +//# sourceMappingURL=vega-embed.min.js.map diff --git a/src/citationnet/static/vega-embed.min.js.map b/src/citationnet/static/vega-embed.min.js.map new file mode 100644 index 0000000..43e023d --- /dev/null +++ b/src/citationnet/static/vega-embed.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vega-embed.min.js","sources":["../node_modules/fast-json-patch/module/helpers.mjs","../node_modules/fast-json-patch/module/core.mjs","../node_modules/fast-json-patch/module/duplex.mjs","../node_modules/fast-json-patch/index.mjs","../node_modules/json-stringify-pretty-compact/index.js","../node_modules/semver/internal/constants.js","../node_modules/semver/internal/debug.js","../node_modules/semver/internal/re.js","../node_modules/semver/internal/parse-options.js","../node_modules/semver/internal/identifiers.js","../node_modules/semver/classes/semver.js","../node_modules/semver/functions/parse.js","../node_modules/semver/functions/valid.js","../node_modules/semver/functions/clean.js","../node_modules/semver/functions/inc.js","../node_modules/semver/functions/compare.js","../node_modules/semver/functions/eq.js","../node_modules/semver/functions/diff.js","../node_modules/semver/functions/major.js","../node_modules/semver/functions/minor.js","../node_modules/semver/functions/patch.js","../node_modules/semver/functions/prerelease.js","../node_modules/semver/functions/rcompare.js","../node_modules/semver/functions/compare-loose.js","../node_modules/semver/functions/compare-build.js","../node_modules/semver/functions/sort.js","../node_modules/semver/functions/rsort.js","../node_modules/semver/functions/gt.js","../node_modules/semver/functions/lt.js","../node_modules/semver/functions/neq.js","../node_modules/semver/functions/gte.js","../node_modules/semver/functions/lte.js","../node_modules/semver/functions/cmp.js","../node_modules/semver/functions/coerce.js","../node_modules/yallist/yallist.js","../node_modules/yallist/iterator.js","../node_modules/lru-cache/index.js","../node_modules/semver/classes/range.js","../node_modules/semver/classes/comparator.js","../node_modules/semver/functions/satisfies.js","../node_modules/semver/ranges/to-comparators.js","../node_modules/semver/ranges/max-satisfying.js","../node_modules/semver/ranges/min-satisfying.js","../node_modules/semver/ranges/min-version.js","../node_modules/semver/ranges/valid.js","../node_modules/semver/ranges/outside.js","../node_modules/semver/ranges/gtr.js","../node_modules/semver/ranges/ltr.js","../node_modules/semver/ranges/intersects.js","../node_modules/semver/ranges/simplify.js","../node_modules/semver/ranges/subset.js","../node_modules/semver/index.js","../node_modules/vega-schema-url-parser/dist/parser.module.js","../node_modules/vega-themes/build/vega-themes.module.js","../node_modules/vega-util/build/vega-util.module.js","../node_modules/vega-tooltip/build/vega-tooltip.module.js","../src/style.ts","../src/util.ts","../src/embed.ts","../src/post.ts","../src/container.ts","../src/index.ts"],"sourcesContent":["/*!\r\n * https://github.com/Starcounter-Jack/JSON-Patch\r\n * (c) 2017 Joachim Wester\r\n * MIT license\r\n */\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\r\nexport function hasOwnProperty(obj, key) {\r\n return _hasOwnProperty.call(obj, key);\r\n}\r\nexport function _objectKeys(obj) {\r\n if (Array.isArray(obj)) {\r\n var keys = new Array(obj.length);\r\n for (var k = 0; k < keys.length; k++) {\r\n keys[k] = \"\" + k;\r\n }\r\n return keys;\r\n }\r\n if (Object.keys) {\r\n return Object.keys(obj);\r\n }\r\n var keys = [];\r\n for (var i in obj) {\r\n if (hasOwnProperty(obj, i)) {\r\n keys.push(i);\r\n }\r\n }\r\n return keys;\r\n}\r\n;\r\n/**\r\n* Deeply clone the object.\r\n* https://jsperf.com/deep-copy-vs-json-stringify-json-parse/25 (recursiveDeepCopy)\r\n* @param {any} obj value to clone\r\n* @return {any} cloned obj\r\n*/\r\nexport function _deepClone(obj) {\r\n switch (typeof obj) {\r\n case \"object\":\r\n return JSON.parse(JSON.stringify(obj)); //Faster than ES5 clone - http://jsperf.com/deep-cloning-of-objects/5\r\n case \"undefined\":\r\n return null; //this is how JSON.stringify behaves for array items\r\n default:\r\n return obj; //no need to clone primitives\r\n }\r\n}\r\n//3x faster than cached /^\\d+$/.test(str)\r\nexport function isInteger(str) {\r\n var i = 0;\r\n var len = str.length;\r\n var charCode;\r\n while (i < len) {\r\n charCode = str.charCodeAt(i);\r\n if (charCode >= 48 && charCode <= 57) {\r\n i++;\r\n continue;\r\n }\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n* Escapes a json pointer path\r\n* @param path The raw pointer\r\n* @return the Escaped path\r\n*/\r\nexport function escapePathComponent(path) {\r\n if (path.indexOf('/') === -1 && path.indexOf('~') === -1)\r\n return path;\r\n return path.replace(/~/g, '~0').replace(/\\//g, '~1');\r\n}\r\n/**\r\n * Unescapes a json pointer path\r\n * @param path The escaped pointer\r\n * @return The unescaped path\r\n */\r\nexport function unescapePathComponent(path) {\r\n return path.replace(/~1/g, '/').replace(/~0/g, '~');\r\n}\r\nexport function _getPathRecursive(root, obj) {\r\n var found;\r\n for (var key in root) {\r\n if (hasOwnProperty(root, key)) {\r\n if (root[key] === obj) {\r\n return escapePathComponent(key) + '/';\r\n }\r\n else if (typeof root[key] === 'object') {\r\n found = _getPathRecursive(root[key], obj);\r\n if (found != '') {\r\n return escapePathComponent(key) + '/' + found;\r\n }\r\n }\r\n }\r\n }\r\n return '';\r\n}\r\nexport function getPath(root, obj) {\r\n if (root === obj) {\r\n return '/';\r\n }\r\n var path = _getPathRecursive(root, obj);\r\n if (path === '') {\r\n throw new Error(\"Object not found in root\");\r\n }\r\n return '/' + path;\r\n}\r\n/**\r\n* Recursively checks whether an object has any undefined values inside.\r\n*/\r\nexport function hasUndefined(obj) {\r\n if (obj === undefined) {\r\n return true;\r\n }\r\n if (obj) {\r\n if (Array.isArray(obj)) {\r\n for (var i = 0, len = obj.length; i < len; i++) {\r\n if (hasUndefined(obj[i])) {\r\n return true;\r\n }\r\n }\r\n }\r\n else if (typeof obj === \"object\") {\r\n var objKeys = _objectKeys(obj);\r\n var objKeysLength = objKeys.length;\r\n for (var i = 0; i < objKeysLength; i++) {\r\n if (hasUndefined(obj[objKeys[i]])) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\nfunction patchErrorMessageFormatter(message, args) {\r\n var messageParts = [message];\r\n for (var key in args) {\r\n var value = typeof args[key] === 'object' ? JSON.stringify(args[key], null, 2) : args[key]; // pretty print\r\n if (typeof value !== 'undefined') {\r\n messageParts.push(key + \": \" + value);\r\n }\r\n }\r\n return messageParts.join('\\n');\r\n}\r\nvar PatchError = /** @class */ (function (_super) {\r\n __extends(PatchError, _super);\r\n function PatchError(message, name, index, operation, tree) {\r\n var _newTarget = this.constructor;\r\n var _this = _super.call(this, patchErrorMessageFormatter(message, { name: name, index: index, operation: operation, tree: tree })) || this;\r\n _this.name = name;\r\n _this.index = index;\r\n _this.operation = operation;\r\n _this.tree = tree;\r\n Object.setPrototypeOf(_this, _newTarget.prototype); // restore prototype chain, see https://stackoverflow.com/a/48342359\r\n _this.message = patchErrorMessageFormatter(message, { name: name, index: index, operation: operation, tree: tree });\r\n return _this;\r\n }\r\n return PatchError;\r\n}(Error));\r\nexport { PatchError };\r\n","import { PatchError, _deepClone, isInteger, unescapePathComponent, hasUndefined } from './helpers.mjs';\nexport var JsonPatchError = PatchError;\nexport var deepClone = _deepClone;\n/* We use a Javascript hash to store each\n function. Each hash entry (property) uses\n the operation identifiers specified in rfc6902.\n In this way, we can map each patch operation\n to its dedicated function in efficient way.\n */\n/* The operations applicable to an object */\nvar objOps = {\n add: function (obj, key, document) {\n obj[key] = this.value;\n return { newDocument: document };\n },\n remove: function (obj, key, document) {\n var removed = obj[key];\n delete obj[key];\n return { newDocument: document, removed: removed };\n },\n replace: function (obj, key, document) {\n var removed = obj[key];\n obj[key] = this.value;\n return { newDocument: document, removed: removed };\n },\n move: function (obj, key, document) {\n /* in case move target overwrites an existing value,\n return the removed value, this can be taxing performance-wise,\n and is potentially unneeded */\n var removed = getValueByPointer(document, this.path);\n if (removed) {\n removed = _deepClone(removed);\n }\n var originalValue = applyOperation(document, { op: \"remove\", path: this.from }).removed;\n applyOperation(document, { op: \"add\", path: this.path, value: originalValue });\n return { newDocument: document, removed: removed };\n },\n copy: function (obj, key, document) {\n var valueToCopy = getValueByPointer(document, this.from);\n // enforce copy by value so further operations don't affect source (see issue #177)\n applyOperation(document, { op: \"add\", path: this.path, value: _deepClone(valueToCopy) });\n return { newDocument: document };\n },\n test: function (obj, key, document) {\n return { newDocument: document, test: _areEquals(obj[key], this.value) };\n },\n _get: function (obj, key, document) {\n this.value = obj[key];\n return { newDocument: document };\n }\n};\n/* The operations applicable to an array. Many are the same as for the object */\nvar arrOps = {\n add: function (arr, i, document) {\n if (isInteger(i)) {\n arr.splice(i, 0, this.value);\n }\n else { // array props\n arr[i] = this.value;\n }\n // this may be needed when using '-' in an array\n return { newDocument: document, index: i };\n },\n remove: function (arr, i, document) {\n var removedList = arr.splice(i, 1);\n return { newDocument: document, removed: removedList[0] };\n },\n replace: function (arr, i, document) {\n var removed = arr[i];\n arr[i] = this.value;\n return { newDocument: document, removed: removed };\n },\n move: objOps.move,\n copy: objOps.copy,\n test: objOps.test,\n _get: objOps._get\n};\n/**\n * Retrieves a value from a JSON document by a JSON pointer.\n * Returns the value.\n *\n * @param document The document to get the value from\n * @param pointer an escaped JSON pointer\n * @return The retrieved value\n */\nexport function getValueByPointer(document, pointer) {\n if (pointer == '') {\n return document;\n }\n var getOriginalDestination = { op: \"_get\", path: pointer };\n applyOperation(document, getOriginalDestination);\n return getOriginalDestination.value;\n}\n/**\n * Apply a single JSON Patch Operation on a JSON document.\n * Returns the {newDocument, result} of the operation.\n * It modifies the `document` and `operation` objects - it gets the values by reference.\n * If you would like to avoid touching your values, clone them:\n * `jsonpatch.applyOperation(document, jsonpatch._deepClone(operation))`.\n *\n * @param document The document to patch\n * @param operation The operation to apply\n * @param validateOperation `false` is without validation, `true` to use default jsonpatch's validation, or you can pass a `validateOperation` callback to be used for validation.\n * @param mutateDocument Whether to mutate the original document or clone it before applying\n * @param banPrototypeModifications Whether to ban modifications to `__proto__`, defaults to `true`.\n * @return `{newDocument, result}` after the operation\n */\nexport function applyOperation(document, operation, validateOperation, mutateDocument, banPrototypeModifications, index) {\n if (validateOperation === void 0) { validateOperation = false; }\n if (mutateDocument === void 0) { mutateDocument = true; }\n if (banPrototypeModifications === void 0) { banPrototypeModifications = true; }\n if (index === void 0) { index = 0; }\n if (validateOperation) {\n if (typeof validateOperation == 'function') {\n validateOperation(operation, 0, document, operation.path);\n }\n else {\n validator(operation, 0);\n }\n }\n /* ROOT OPERATIONS */\n if (operation.path === \"\") {\n var returnValue = { newDocument: document };\n if (operation.op === 'add') {\n returnValue.newDocument = operation.value;\n return returnValue;\n }\n else if (operation.op === 'replace') {\n returnValue.newDocument = operation.value;\n returnValue.removed = document; //document we removed\n return returnValue;\n }\n else if (operation.op === 'move' || operation.op === 'copy') { // it's a move or copy to root\n returnValue.newDocument = getValueByPointer(document, operation.from); // get the value by json-pointer in `from` field\n if (operation.op === 'move') { // report removed item\n returnValue.removed = document;\n }\n return returnValue;\n }\n else if (operation.op === 'test') {\n returnValue.test = _areEquals(document, operation.value);\n if (returnValue.test === false) {\n throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n }\n returnValue.newDocument = document;\n return returnValue;\n }\n else if (operation.op === 'remove') { // a remove on root\n returnValue.removed = document;\n returnValue.newDocument = null;\n return returnValue;\n }\n else if (operation.op === '_get') {\n operation.value = document;\n return returnValue;\n }\n else { /* bad operation */\n if (validateOperation) {\n throw new JsonPatchError('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, document);\n }\n else {\n return returnValue;\n }\n }\n } /* END ROOT OPERATIONS */\n else {\n if (!mutateDocument) {\n document = _deepClone(document);\n }\n var path = operation.path || \"\";\n var keys = path.split('/');\n var obj = document;\n var t = 1; //skip empty element - http://jsperf.com/to-shift-or-not-to-shift\n var len = keys.length;\n var existingPathFragment = undefined;\n var key = void 0;\n var validateFunction = void 0;\n if (typeof validateOperation == 'function') {\n validateFunction = validateOperation;\n }\n else {\n validateFunction = validator;\n }\n while (true) {\n key = keys[t];\n if (banPrototypeModifications && key == '__proto__') {\n throw new TypeError('JSON-Patch: modifying `__proto__` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README');\n }\n if (validateOperation) {\n if (existingPathFragment === undefined) {\n if (obj[key] === undefined) {\n existingPathFragment = keys.slice(0, t).join('/');\n }\n else if (t == len - 1) {\n existingPathFragment = operation.path;\n }\n if (existingPathFragment !== undefined) {\n validateFunction(operation, 0, document, existingPathFragment);\n }\n }\n }\n t++;\n if (Array.isArray(obj)) {\n if (key === '-') {\n key = obj.length;\n }\n else {\n if (validateOperation && !isInteger(key)) {\n throw new JsonPatchError(\"Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index\", \"OPERATION_PATH_ILLEGAL_ARRAY_INDEX\", index, operation, document);\n } // only parse key when it's an integer for `arr.prop` to work\n else if (isInteger(key)) {\n key = ~~key;\n }\n }\n if (t >= len) {\n if (validateOperation && operation.op === \"add\" && key > obj.length) {\n throw new JsonPatchError(\"The specified index MUST NOT be greater than the number of elements in the array\", \"OPERATION_VALUE_OUT_OF_BOUNDS\", index, operation, document);\n }\n var returnValue = arrOps[operation.op].call(operation, obj, key, document); // Apply patch\n if (returnValue.test === false) {\n throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n }\n return returnValue;\n }\n }\n else {\n if (key && key.indexOf('~') != -1) {\n key = unescapePathComponent(key);\n }\n if (t >= len) {\n var returnValue = objOps[operation.op].call(operation, obj, key, document); // Apply patch\n if (returnValue.test === false) {\n throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n }\n return returnValue;\n }\n }\n obj = obj[key];\n }\n }\n}\n/**\n * Apply a full JSON Patch array on a JSON document.\n * Returns the {newDocument, result} of the patch.\n * It modifies the `document` object and `patch` - it gets the values by reference.\n * If you would like to avoid touching your values, clone them:\n * `jsonpatch.applyPatch(document, jsonpatch._deepClone(patch))`.\n *\n * @param document The document to patch\n * @param patch The patch to apply\n * @param validateOperation `false` is without validation, `true` to use default jsonpatch's validation, or you can pass a `validateOperation` callback to be used for validation.\n * @param mutateDocument Whether to mutate the original document or clone it before applying\n * @param banPrototypeModifications Whether to ban modifications to `__proto__`, defaults to `true`.\n * @return An array of `{newDocument, result}` after the patch\n */\nexport function applyPatch(document, patch, validateOperation, mutateDocument, banPrototypeModifications) {\n if (mutateDocument === void 0) { mutateDocument = true; }\n if (banPrototypeModifications === void 0) { banPrototypeModifications = true; }\n if (validateOperation) {\n if (!Array.isArray(patch)) {\n throw new JsonPatchError('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY');\n }\n }\n if (!mutateDocument) {\n document = _deepClone(document);\n }\n var results = new Array(patch.length);\n for (var i = 0, length_1 = patch.length; i < length_1; i++) {\n // we don't need to pass mutateDocument argument because if it was true, we already deep cloned the object, we'll just pass `true`\n results[i] = applyOperation(document, patch[i], validateOperation, true, banPrototypeModifications, i);\n document = results[i].newDocument; // in case root was replaced\n }\n results.newDocument = document;\n return results;\n}\n/**\n * Apply a single JSON Patch Operation on a JSON document.\n * Returns the updated document.\n * Suitable as a reducer.\n *\n * @param document The document to patch\n * @param operation The operation to apply\n * @return The updated document\n */\nexport function applyReducer(document, operation, index) {\n var operationResult = applyOperation(document, operation);\n if (operationResult.test === false) { // failed test\n throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n }\n return operationResult.newDocument;\n}\n/**\n * Validates a single operation. Called from `jsonpatch.validate`. Throws `JsonPatchError` in case of an error.\n * @param {object} operation - operation object (patch)\n * @param {number} index - index of operation in the sequence\n * @param {object} [document] - object where the operation is supposed to be applied\n * @param {string} [existingPathFragment] - comes along with `document`\n */\nexport function validator(operation, index, document, existingPathFragment) {\n if (typeof operation !== 'object' || operation === null || Array.isArray(operation)) {\n throw new JsonPatchError('Operation is not an object', 'OPERATION_NOT_AN_OBJECT', index, operation, document);\n }\n else if (!objOps[operation.op]) {\n throw new JsonPatchError('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, document);\n }\n else if (typeof operation.path !== 'string') {\n throw new JsonPatchError('Operation `path` property is not a string', 'OPERATION_PATH_INVALID', index, operation, document);\n }\n else if (operation.path.indexOf('/') !== 0 && operation.path.length > 0) {\n // paths that aren't empty string should start with \"/\"\n throw new JsonPatchError('Operation `path` property must start with \"/\"', 'OPERATION_PATH_INVALID', index, operation, document);\n }\n else if ((operation.op === 'move' || operation.op === 'copy') && typeof operation.from !== 'string') {\n throw new JsonPatchError('Operation `from` property is not present (applicable in `move` and `copy` operations)', 'OPERATION_FROM_REQUIRED', index, operation, document);\n }\n else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && operation.value === undefined) {\n throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_REQUIRED', index, operation, document);\n }\n else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && hasUndefined(operation.value)) {\n throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED', index, operation, document);\n }\n else if (document) {\n if (operation.op == \"add\") {\n var pathLen = operation.path.split(\"/\").length;\n var existingPathLen = existingPathFragment.split(\"/\").length;\n if (pathLen !== existingPathLen + 1 && pathLen !== existingPathLen) {\n throw new JsonPatchError('Cannot perform an `add` operation at the desired path', 'OPERATION_PATH_CANNOT_ADD', index, operation, document);\n }\n }\n else if (operation.op === 'replace' || operation.op === 'remove' || operation.op === '_get') {\n if (operation.path !== existingPathFragment) {\n throw new JsonPatchError('Cannot perform the operation at a path that does not exist', 'OPERATION_PATH_UNRESOLVABLE', index, operation, document);\n }\n }\n else if (operation.op === 'move' || operation.op === 'copy') {\n var existingValue = { op: \"_get\", path: operation.from, value: undefined };\n var error = validate([existingValue], document);\n if (error && error.name === 'OPERATION_PATH_UNRESOLVABLE') {\n throw new JsonPatchError('Cannot perform the operation from a path that does not exist', 'OPERATION_FROM_UNRESOLVABLE', index, operation, document);\n }\n }\n }\n}\n/**\n * Validates a sequence of operations. If `document` parameter is provided, the sequence is additionally validated against the object document.\n * If error is encountered, returns a JsonPatchError object\n * @param sequence\n * @param document\n * @returns {JsonPatchError|undefined}\n */\nexport function validate(sequence, document, externalValidator) {\n try {\n if (!Array.isArray(sequence)) {\n throw new JsonPatchError('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY');\n }\n if (document) {\n //clone document and sequence so that we can safely try applying operations\n applyPatch(_deepClone(document), _deepClone(sequence), externalValidator || true);\n }\n else {\n externalValidator = externalValidator || validator;\n for (var i = 0; i < sequence.length; i++) {\n externalValidator(sequence[i], i, document, undefined);\n }\n }\n }\n catch (e) {\n if (e instanceof JsonPatchError) {\n return e;\n }\n else {\n throw e;\n }\n }\n}\n// based on https://github.com/epoberezkin/fast-deep-equal\n// MIT License\n// Copyright (c) 2017 Evgeny Poberezkin\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\nexport function _areEquals(a, b) {\n if (a === b)\n return true;\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n var arrA = Array.isArray(a), arrB = Array.isArray(b), i, length, key;\n if (arrA && arrB) {\n length = a.length;\n if (length != b.length)\n return false;\n for (i = length; i-- !== 0;)\n if (!_areEquals(a[i], b[i]))\n return false;\n return true;\n }\n if (arrA != arrB)\n return false;\n var keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length)\n return false;\n for (i = length; i-- !== 0;)\n if (!b.hasOwnProperty(keys[i]))\n return false;\n for (i = length; i-- !== 0;) {\n key = keys[i];\n if (!_areEquals(a[key], b[key]))\n return false;\n }\n return true;\n }\n return a !== a && b !== b;\n}\n;\n","/*!\n * https://github.com/Starcounter-Jack/JSON-Patch\n * (c) 2017 Joachim Wester\n * MIT license\n */\nimport { _deepClone, _objectKeys, escapePathComponent, hasOwnProperty } from './helpers.mjs';\nimport { applyPatch } from './core.mjs';\nvar beforeDict = new WeakMap();\nvar Mirror = /** @class */ (function () {\n function Mirror(obj) {\n this.observers = new Map();\n this.obj = obj;\n }\n return Mirror;\n}());\nvar ObserverInfo = /** @class */ (function () {\n function ObserverInfo(callback, observer) {\n this.callback = callback;\n this.observer = observer;\n }\n return ObserverInfo;\n}());\nfunction getMirror(obj) {\n return beforeDict.get(obj);\n}\nfunction getObserverFromMirror(mirror, callback) {\n return mirror.observers.get(callback);\n}\nfunction removeObserverFromMirror(mirror, observer) {\n mirror.observers.delete(observer.callback);\n}\n/**\n * Detach an observer from an object\n */\nexport function unobserve(root, observer) {\n observer.unobserve();\n}\n/**\n * Observes changes made to an object, which can then be retrieved using generate\n */\nexport function observe(obj, callback) {\n var patches = [];\n var observer;\n var mirror = getMirror(obj);\n if (!mirror) {\n mirror = new Mirror(obj);\n beforeDict.set(obj, mirror);\n }\n else {\n var observerInfo = getObserverFromMirror(mirror, callback);\n observer = observerInfo && observerInfo.observer;\n }\n if (observer) {\n return observer;\n }\n observer = {};\n mirror.value = _deepClone(obj);\n if (callback) {\n observer.callback = callback;\n observer.next = null;\n var dirtyCheck = function () {\n generate(observer);\n };\n var fastCheck = function () {\n clearTimeout(observer.next);\n observer.next = setTimeout(dirtyCheck);\n };\n if (typeof window !== 'undefined') { //not Node\n window.addEventListener('mouseup', fastCheck);\n window.addEventListener('keyup', fastCheck);\n window.addEventListener('mousedown', fastCheck);\n window.addEventListener('keydown', fastCheck);\n window.addEventListener('change', fastCheck);\n }\n }\n observer.patches = patches;\n observer.object = obj;\n observer.unobserve = function () {\n generate(observer);\n clearTimeout(observer.next);\n removeObserverFromMirror(mirror, observer);\n if (typeof window !== 'undefined') {\n window.removeEventListener('mouseup', fastCheck);\n window.removeEventListener('keyup', fastCheck);\n window.removeEventListener('mousedown', fastCheck);\n window.removeEventListener('keydown', fastCheck);\n window.removeEventListener('change', fastCheck);\n }\n };\n mirror.observers.set(callback, new ObserverInfo(callback, observer));\n return observer;\n}\n/**\n * Generate an array of patches from an observer\n */\nexport function generate(observer, invertible) {\n if (invertible === void 0) { invertible = false; }\n var mirror = beforeDict.get(observer.object);\n _generate(mirror.value, observer.object, observer.patches, \"\", invertible);\n if (observer.patches.length) {\n applyPatch(mirror.value, observer.patches);\n }\n var temp = observer.patches;\n if (temp.length > 0) {\n observer.patches = [];\n if (observer.callback) {\n observer.callback(temp);\n }\n }\n return temp;\n}\n// Dirty check if obj is different from mirror, generate patches and update mirror\nfunction _generate(mirror, obj, patches, path, invertible) {\n if (obj === mirror) {\n return;\n }\n if (typeof obj.toJSON === \"function\") {\n obj = obj.toJSON();\n }\n var newKeys = _objectKeys(obj);\n var oldKeys = _objectKeys(mirror);\n var changed = false;\n var deleted = false;\n //if ever \"move\" operation is implemented here, make sure this test runs OK: \"should not generate the same patch twice (move)\"\n for (var t = oldKeys.length - 1; t >= 0; t--) {\n var key = oldKeys[t];\n var oldVal = mirror[key];\n if (hasOwnProperty(obj, key) && !(obj[key] === undefined && oldVal !== undefined && Array.isArray(obj) === false)) {\n var newVal = obj[key];\n if (typeof oldVal == \"object\" && oldVal != null && typeof newVal == \"object\" && newVal != null) {\n _generate(oldVal, newVal, patches, path + \"/\" + escapePathComponent(key), invertible);\n }\n else {\n if (oldVal !== newVal) {\n changed = true;\n if (invertible) {\n patches.push({ op: \"test\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(oldVal) });\n }\n patches.push({ op: \"replace\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(newVal) });\n }\n }\n }\n else if (Array.isArray(mirror) === Array.isArray(obj)) {\n if (invertible) {\n patches.push({ op: \"test\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(oldVal) });\n }\n patches.push({ op: \"remove\", path: path + \"/\" + escapePathComponent(key) });\n deleted = true; // property has been deleted\n }\n else {\n if (invertible) {\n patches.push({ op: \"test\", path: path, value: mirror });\n }\n patches.push({ op: \"replace\", path: path, value: obj });\n changed = true;\n }\n }\n if (!deleted && newKeys.length == oldKeys.length) {\n return;\n }\n for (var t = 0; t < newKeys.length; t++) {\n var key = newKeys[t];\n if (!hasOwnProperty(mirror, key) && obj[key] !== undefined) {\n patches.push({ op: \"add\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(obj[key]) });\n }\n }\n}\n/**\n * Create an array of patches from the differences in two objects\n */\nexport function compare(tree1, tree2, invertible) {\n if (invertible === void 0) { invertible = false; }\n var patches = [];\n _generate(tree1, tree2, patches, '', invertible);\n return patches;\n}\n","export * from './module/core.mjs';\r\nexport * from './module/duplex.mjs';\r\nexport {\r\n PatchError as JsonPatchError,\r\n _deepClone as deepClone,\r\n escapePathComponent,\r\n unescapePathComponent\r\n} from './module/helpers.mjs';\r\n\r\n\r\n/**\r\n * Default export for backwards compat\r\n */\r\n\r\nimport * as core from './module/core.mjs';\r\nimport * as duplex from './module/duplex.mjs';\r\nimport {\r\n PatchError as JsonPatchError,\r\n _deepClone as deepClone,\r\n escapePathComponent,\r\n unescapePathComponent\r\n} from './module/helpers.mjs';\r\n\r\nexport default Object.assign({}, core, duplex, {\r\n JsonPatchError,\r\n deepClone,\r\n escapePathComponent,\r\n unescapePathComponent\r\n});","\"use strict\";\n\n// Note: This regex matches even invalid JSON strings, but since we’re\n// working on the output of `JSON.stringify` we know that only valid strings\n// are present (unless the user supplied a weird `options.indent` but in\n// that case we don’t care since the output would be invalid anyway).\nvar stringOrChar = /(\"(?:[^\\\\\"]|\\\\.)*\")|[:,]/g;\n\nmodule.exports = function stringify(passedObj, options) {\n var indent, maxLength, replacer;\n\n options = options || {};\n indent = JSON.stringify(\n [1],\n undefined,\n options.indent === undefined ? 2 : options.indent\n ).slice(2, -3);\n maxLength =\n indent === \"\"\n ? Infinity\n : options.maxLength === undefined\n ? 80\n : options.maxLength;\n replacer = options.replacer;\n\n return (function _stringify(obj, currentIndent, reserved) {\n // prettier-ignore\n var end, index, items, key, keyPart, keys, length, nextIndent, prettified, start, string, value;\n\n if (obj && typeof obj.toJSON === \"function\") {\n obj = obj.toJSON();\n }\n\n string = JSON.stringify(obj, replacer);\n\n if (string === undefined) {\n return string;\n }\n\n length = maxLength - currentIndent.length - reserved;\n\n if (string.length <= length) {\n prettified = string.replace(\n stringOrChar,\n function (match, stringLiteral) {\n return stringLiteral || match + \" \";\n }\n );\n if (prettified.length <= length) {\n return prettified;\n }\n }\n\n if (replacer != null) {\n obj = JSON.parse(string);\n replacer = undefined;\n }\n\n if (typeof obj === \"object\" && obj !== null) {\n nextIndent = currentIndent + indent;\n items = [];\n index = 0;\n\n if (Array.isArray(obj)) {\n start = \"[\";\n end = \"]\";\n length = obj.length;\n for (; index < length; index++) {\n items.push(\n _stringify(obj[index], nextIndent, index === length - 1 ? 0 : 1) ||\n \"null\"\n );\n }\n } else {\n start = \"{\";\n end = \"}\";\n keys = Object.keys(obj);\n length = keys.length;\n for (; index < length; index++) {\n key = keys[index];\n keyPart = JSON.stringify(key) + \": \";\n value = _stringify(\n obj[key],\n nextIndent,\n keyPart.length + (index === length - 1 ? 0 : 1)\n );\n if (value !== undefined) {\n items.push(keyPart + value);\n }\n }\n }\n\n if (items.length > 0) {\n return [start, indent + items.join(\",\\n\" + nextIndent), end].join(\n \"\\n\" + currentIndent\n );\n }\n }\n\n return string;\n })(passedObj, \"\", 0);\n};\n","// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n /* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\nmodule.exports = {\n SEMVER_SPEC_VERSION,\n MAX_LENGTH,\n MAX_SAFE_INTEGER,\n MAX_SAFE_COMPONENT_LENGTH\n}\n","const debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","const { MAX_SAFE_COMPONENT_LENGTH } = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst createToken = (name, value, isGlobal) => {\n const index = R++\n debug(index, value)\n t[name] = index\n src[index] = value\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '[0-9]+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*')\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+')\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCE', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\.0\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\.0\\.0-0\\\\s*$')\n","// parse out just the options we care about so we always get a consistent\n// obj with keys in a consistent order.\nconst opts = ['includePrerelease', 'loose', 'rtl']\nconst parseOptions = options =>\n !options ? {}\n : typeof options !== 'object' ? { loose: true }\n : opts.filter(k => options[k]).reduce((options, k) => {\n options[k] = true\n return options\n }, {})\nmodule.exports = parseOptions\n","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers\n}\n","const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier)\n this.inc('pre', identifier)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier)\n }\n this.inc('pre', identifier)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre':\n if (this.prerelease.length === 0) {\n this.prerelease = [0]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n this.prerelease.push(0)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n if (this.prerelease[0] === identifier) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = [identifier, 0]\n }\n } else {\n this.prerelease = [identifier, 0]\n }\n }\n break\n\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.format()\n this.raw = this.version\n return this\n }\n}\n\nmodule.exports = SemVer\n","const {MAX_LENGTH} = require('../internal/constants')\nconst { re, t } = require('../internal/re')\nconst SemVer = require('../classes/semver')\n\nconst parseOptions = require('../internal/parse-options')\nconst parse = (version, options) => {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n if (version.length > MAX_LENGTH) {\n return null\n }\n\n const r = options.loose ? re[t.LOOSE] : re[t.FULL]\n if (!r.test(version)) {\n return null\n }\n\n try {\n return new SemVer(version, options)\n } catch (er) {\n return null\n }\n}\n\nmodule.exports = parse\n","const parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n","const parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n","const SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier) => {\n if (typeof (options) === 'string') {\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(version, options).inc(release, identifier).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n","const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","const parse = require('./parse')\nconst eq = require('./eq')\n\nconst diff = (version1, version2) => {\n if (eq(version1, version2)) {\n return null\n } else {\n const v1 = parse(version1)\n const v2 = parse(version2)\n const hasPre = v1.prerelease.length || v2.prerelease.length\n const prefix = hasPre ? 'pre' : ''\n const defaultResult = hasPre ? 'prerelease' : ''\n for (const key in v1) {\n if (key === 'major' || key === 'minor' || key === 'patch') {\n if (v1[key] !== v2[key]) {\n return prefix + key\n }\n }\n }\n return defaultResult // may be undefined\n }\n}\nmodule.exports = diff\n","const SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","const SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","const SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","const parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","const compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","const compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","const SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","const compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","const compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a === b\n\n case '!==':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n","const SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst {re, t} = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n let next\n while ((next = re[t.COERCERTL].exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n re[t.COERCERTL].lastIndex = -1\n }\n\n if (match === null)\n return null\n\n return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options)\n}\nmodule.exports = coerce\n","'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n var self = this\n if (!(self instanceof Yallist)) {\n self = new Yallist()\n }\n\n self.tail = null\n self.head = null\n self.length = 0\n\n if (list && typeof list.forEach === 'function') {\n list.forEach(function (item) {\n self.push(item)\n })\n } else if (arguments.length > 0) {\n for (var i = 0, l = arguments.length; i < l; i++) {\n self.push(arguments[i])\n }\n }\n\n return self\n}\n\nYallist.prototype.removeNode = function (node) {\n if (node.list !== this) {\n throw new Error('removing node which does not belong to this list')\n }\n\n var next = node.next\n var prev = node.prev\n\n if (next) {\n next.prev = prev\n }\n\n if (prev) {\n prev.next = next\n }\n\n if (node === this.head) {\n this.head = next\n }\n if (node === this.tail) {\n this.tail = prev\n }\n\n node.list.length--\n node.next = null\n node.prev = null\n node.list = null\n\n return next\n}\n\nYallist.prototype.unshiftNode = function (node) {\n if (node === this.head) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var head = this.head\n node.list = this\n node.next = head\n if (head) {\n head.prev = node\n }\n\n this.head = node\n if (!this.tail) {\n this.tail = node\n }\n this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n if (node === this.tail) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var tail = this.tail\n node.list = this\n node.prev = tail\n if (tail) {\n tail.next = node\n }\n\n this.tail = node\n if (!this.head) {\n this.head = node\n }\n this.length++\n}\n\nYallist.prototype.push = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n push(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.unshift = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n unshift(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.pop = function () {\n if (!this.tail) {\n return undefined\n }\n\n var res = this.tail.value\n this.tail = this.tail.prev\n if (this.tail) {\n this.tail.next = null\n } else {\n this.head = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.shift = function () {\n if (!this.head) {\n return undefined\n }\n\n var res = this.head.value\n this.head = this.head.next\n if (this.head) {\n this.head.prev = null\n } else {\n this.tail = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.head, i = 0; walker !== null; i++) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.next\n }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.prev\n }\n}\n\nYallist.prototype.get = function (n) {\n for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.next\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.getReverse = function (n) {\n for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.prev\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.head; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.next\n }\n return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.tail; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.prev\n }\n return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n var acc\n var walker = this.head\n if (arguments.length > 1) {\n acc = initial\n } else if (this.head) {\n walker = this.head.next\n acc = this.head.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = 0; walker !== null; i++) {\n acc = fn(acc, walker.value, i)\n walker = walker.next\n }\n\n return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n var acc\n var walker = this.tail\n if (arguments.length > 1) {\n acc = initial\n } else if (this.tail) {\n walker = this.tail.prev\n acc = this.tail.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = this.length - 1; walker !== null; i--) {\n acc = fn(acc, walker.value, i)\n walker = walker.prev\n }\n\n return acc\n}\n\nYallist.prototype.toArray = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.head; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.next\n }\n return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.tail; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.prev\n }\n return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n walker = walker.next\n }\n for (; walker !== null && i < to; i++, walker = walker.next) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n walker = walker.prev\n }\n for (; walker !== null && i > from; i--, walker = walker.prev) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.splice = function (start, deleteCount, ...nodes) {\n if (start > this.length) {\n start = this.length - 1\n }\n if (start < 0) {\n start = this.length + start;\n }\n\n for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n walker = walker.next\n }\n\n var ret = []\n for (var i = 0; walker && i < deleteCount; i++) {\n ret.push(walker.value)\n walker = this.removeNode(walker)\n }\n if (walker === null) {\n walker = this.tail\n }\n\n if (walker !== this.head && walker !== this.tail) {\n walker = walker.prev\n }\n\n for (var i = 0; i < nodes.length; i++) {\n walker = insert(this, walker, nodes[i])\n }\n return ret;\n}\n\nYallist.prototype.reverse = function () {\n var head = this.head\n var tail = this.tail\n for (var walker = head; walker !== null; walker = walker.prev) {\n var p = walker.prev\n walker.prev = walker.next\n walker.next = p\n }\n this.head = tail\n this.tail = head\n return this\n}\n\nfunction insert (self, node, value) {\n var inserted = node === self.head ?\n new Node(value, null, node, self) :\n new Node(value, node, node.next, self)\n\n if (inserted.next === null) {\n self.tail = inserted\n }\n if (inserted.prev === null) {\n self.head = inserted\n }\n\n self.length++\n\n return inserted\n}\n\nfunction push (self, item) {\n self.tail = new Node(item, self.tail, null, self)\n if (!self.head) {\n self.head = self.tail\n }\n self.length++\n}\n\nfunction unshift (self, item) {\n self.head = new Node(item, null, self.head, self)\n if (!self.tail) {\n self.tail = self.head\n }\n self.length++\n}\n\nfunction Node (value, prev, next, list) {\n if (!(this instanceof Node)) {\n return new Node(value, prev, next, list)\n }\n\n this.list = list\n this.value = value\n\n if (prev) {\n prev.next = this\n this.prev = prev\n } else {\n this.prev = null\n }\n\n if (next) {\n next.prev = this\n this.next = next\n } else {\n this.next = null\n }\n}\n\ntry {\n // add if support for Symbol.iterator is present\n require('./iterator.js')(Yallist)\n} catch (er) {}\n","'use strict'\nmodule.exports = function (Yallist) {\n Yallist.prototype[Symbol.iterator] = function* () {\n for (let walker = this.head; walker; walker = walker.next) {\n yield walker.value\n }\n }\n}\n","'use strict'\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = require('yallist')\n\nconst MAX = Symbol('max')\nconst LENGTH = Symbol('length')\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator')\nconst ALLOW_STALE = Symbol('allowStale')\nconst MAX_AGE = Symbol('maxAge')\nconst DISPOSE = Symbol('dispose')\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')\nconst LRU_LIST = Symbol('lruList')\nconst CACHE = Symbol('cache')\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')\n\nconst naiveLength = () => 1\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest. the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node. This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n constructor (options) {\n if (typeof options === 'number')\n options = { max: options }\n\n if (!options)\n options = {}\n\n if (options.max && (typeof options.max !== 'number' || options.max < 0))\n throw new TypeError('max must be a non-negative number')\n // Kind of weird to have a default max of Infinity, but oh well.\n const max = this[MAX] = options.max || Infinity\n\n const lc = options.length || naiveLength\n this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc\n this[ALLOW_STALE] = options.stale || false\n if (options.maxAge && typeof options.maxAge !== 'number')\n throw new TypeError('maxAge must be a number')\n this[MAX_AGE] = options.maxAge || 0\n this[DISPOSE] = options.dispose\n this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false\n this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false\n this.reset()\n }\n\n // resize the cache when the max changes.\n set max (mL) {\n if (typeof mL !== 'number' || mL < 0)\n throw new TypeError('max must be a non-negative number')\n\n this[MAX] = mL || Infinity\n trim(this)\n }\n get max () {\n return this[MAX]\n }\n\n set allowStale (allowStale) {\n this[ALLOW_STALE] = !!allowStale\n }\n get allowStale () {\n return this[ALLOW_STALE]\n }\n\n set maxAge (mA) {\n if (typeof mA !== 'number')\n throw new TypeError('maxAge must be a non-negative number')\n\n this[MAX_AGE] = mA\n trim(this)\n }\n get maxAge () {\n return this[MAX_AGE]\n }\n\n // resize the cache when the lengthCalculator changes.\n set lengthCalculator (lC) {\n if (typeof lC !== 'function')\n lC = naiveLength\n\n if (lC !== this[LENGTH_CALCULATOR]) {\n this[LENGTH_CALCULATOR] = lC\n this[LENGTH] = 0\n this[LRU_LIST].forEach(hit => {\n hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)\n this[LENGTH] += hit.length\n })\n }\n trim(this)\n }\n get lengthCalculator () { return this[LENGTH_CALCULATOR] }\n\n get length () { return this[LENGTH] }\n get itemCount () { return this[LRU_LIST].length }\n\n rforEach (fn, thisp) {\n thisp = thisp || this\n for (let walker = this[LRU_LIST].tail; walker !== null;) {\n const prev = walker.prev\n forEachStep(this, fn, walker, thisp)\n walker = prev\n }\n }\n\n forEach (fn, thisp) {\n thisp = thisp || this\n for (let walker = this[LRU_LIST].head; walker !== null;) {\n const next = walker.next\n forEachStep(this, fn, walker, thisp)\n walker = next\n }\n }\n\n keys () {\n return this[LRU_LIST].toArray().map(k => k.key)\n }\n\n values () {\n return this[LRU_LIST].toArray().map(k => k.value)\n }\n\n reset () {\n if (this[DISPOSE] &&\n this[LRU_LIST] &&\n this[LRU_LIST].length) {\n this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))\n }\n\n this[CACHE] = new Map() // hash of items by key\n this[LRU_LIST] = new Yallist() // list of items in order of use recency\n this[LENGTH] = 0 // length of items in the list\n }\n\n dump () {\n return this[LRU_LIST].map(hit =>\n isStale(this, hit) ? false : {\n k: hit.key,\n v: hit.value,\n e: hit.now + (hit.maxAge || 0)\n }).toArray().filter(h => h)\n }\n\n dumpLru () {\n return this[LRU_LIST]\n }\n\n set (key, value, maxAge) {\n maxAge = maxAge || this[MAX_AGE]\n\n if (maxAge && typeof maxAge !== 'number')\n throw new TypeError('maxAge must be a number')\n\n const now = maxAge ? Date.now() : 0\n const len = this[LENGTH_CALCULATOR](value, key)\n\n if (this[CACHE].has(key)) {\n if (len > this[MAX]) {\n del(this, this[CACHE].get(key))\n return false\n }\n\n const node = this[CACHE].get(key)\n const item = node.value\n\n // dispose of the old one before overwriting\n // split out into 2 ifs for better coverage tracking\n if (this[DISPOSE]) {\n if (!this[NO_DISPOSE_ON_SET])\n this[DISPOSE](key, item.value)\n }\n\n item.now = now\n item.maxAge = maxAge\n item.value = value\n this[LENGTH] += len - item.length\n item.length = len\n this.get(key)\n trim(this)\n return true\n }\n\n const hit = new Entry(key, value, len, now, maxAge)\n\n // oversized objects fall out of cache automatically.\n if (hit.length > this[MAX]) {\n if (this[DISPOSE])\n this[DISPOSE](key, value)\n\n return false\n }\n\n this[LENGTH] += hit.length\n this[LRU_LIST].unshift(hit)\n this[CACHE].set(key, this[LRU_LIST].head)\n trim(this)\n return true\n }\n\n has (key) {\n if (!this[CACHE].has(key)) return false\n const hit = this[CACHE].get(key).value\n return !isStale(this, hit)\n }\n\n get (key) {\n return get(this, key, true)\n }\n\n peek (key) {\n return get(this, key, false)\n }\n\n pop () {\n const node = this[LRU_LIST].tail\n if (!node)\n return null\n\n del(this, node)\n return node.value\n }\n\n del (key) {\n del(this, this[CACHE].get(key))\n }\n\n load (arr) {\n // reset the cache\n this.reset()\n\n const now = Date.now()\n // A previous serialized cache has the most recent items first\n for (let l = arr.length - 1; l >= 0; l--) {\n const hit = arr[l]\n const expiresAt = hit.e || 0\n if (expiresAt === 0)\n // the item was created without expiration in a non aged cache\n this.set(hit.k, hit.v)\n else {\n const maxAge = expiresAt - now\n // dont add already expired items\n if (maxAge > 0) {\n this.set(hit.k, hit.v, maxAge)\n }\n }\n }\n }\n\n prune () {\n this[CACHE].forEach((value, key) => get(this, key, false))\n }\n}\n\nconst get = (self, key, doUse) => {\n const node = self[CACHE].get(key)\n if (node) {\n const hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE])\n return undefined\n } else {\n if (doUse) {\n if (self[UPDATE_AGE_ON_GET])\n node.value.now = Date.now()\n self[LRU_LIST].unshiftNode(node)\n }\n }\n return hit.value\n }\n}\n\nconst isStale = (self, hit) => {\n if (!hit || (!hit.maxAge && !self[MAX_AGE]))\n return false\n\n const diff = Date.now() - hit.now\n return hit.maxAge ? diff > hit.maxAge\n : self[MAX_AGE] && (diff > self[MAX_AGE])\n}\n\nconst trim = self => {\n if (self[LENGTH] > self[MAX]) {\n for (let walker = self[LRU_LIST].tail;\n self[LENGTH] > self[MAX] && walker !== null;) {\n // We know that we're about to delete this one, and also\n // what the next least recently used key will be, so just\n // go ahead and set it now.\n const prev = walker.prev\n del(self, walker)\n walker = prev\n }\n }\n}\n\nconst del = (self, node) => {\n if (node) {\n const hit = node.value\n if (self[DISPOSE])\n self[DISPOSE](hit.key, hit.value)\n\n self[LENGTH] -= hit.length\n self[CACHE].delete(hit.key)\n self[LRU_LIST].removeNode(node)\n }\n}\n\nclass Entry {\n constructor (key, value, length, now, maxAge) {\n this.key = key\n this.value = value\n this.length = length\n this.now = now\n this.maxAge = maxAge || 0\n }\n}\n\nconst forEachStep = (self, fn, node, thisp) => {\n let hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE])\n hit = undefined\n }\n if (hit)\n fn.call(thisp, hit.value, hit.key, self)\n}\n\nmodule.exports = LRUCache\n","// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.format()\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First, split based on boolean or ||\n this.raw = range\n this.set = range\n .split(/\\s*\\|\\|\\s*/)\n // map the range to a 2d array of comparators\n .map(range => this.parseRange(range.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${range}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0)\n this.set = [first]\n else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.format()\n }\n\n format () {\n this.range = this.set\n .map((comps) => {\n return comps.join(' ').trim()\n })\n .join('||')\n .trim()\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n range = range.trim()\n\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts = Object.keys(this.options).join(',')\n const memoKey = `parseRange:${memoOpts}:${range}`\n const cached = cache.get(memoKey)\n if (cached)\n return cached\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range, re[t.COMPARATORTRIM])\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n\n // normalize spaces\n range = range.split(/\\s+/).join(' ')\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n // in loose mode, throw out any that are not valid comparators\n .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true)\n .map(comp => new Comparator(comp, this.options))\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const l = rangeList.length\n const rangeMap = new Map()\n for (const comp of rangeList) {\n if (isNullSet(comp))\n return [comp]\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has(''))\n rangeMap.delete('')\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\nmodule.exports = Range\n\nconst LRU = require('lru-cache')\nconst cache = new LRU({ max: 1000 })\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace\n} = require('../internal/re')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\nconst replaceTildes = (comp, options) =>\n comp.trim().split(/\\s+/).map((comp) => {\n return replaceTilde(comp, options)\n }).join(' ')\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\nconst replaceCarets = (comp, options) =>\n comp.trim().split(/\\s+/).map((comp) => {\n return replaceCaret(comp, options)\n }).join(' ')\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp.split(/\\s+/).map((comp) => {\n return replaceXRange(comp, options)\n }).join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<')\n pr = '-0'\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp.trim().replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp.trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr, tb) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return (`${from} ${to}`).trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n","const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n const sameDirectionIncreasing =\n (this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '>=' || comp.operator === '>')\n const sameDirectionDecreasing =\n (this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '<=' || comp.operator === '<')\n const sameSemVer = this.semver.version === comp.semver.version\n const differentDirectionsInclusive =\n (this.operator === '>=' || this.operator === '<=') &&\n (comp.operator === '>=' || comp.operator === '<=')\n const oppositeDirectionsLessThan =\n cmp(this.semver, '<', comp.semver, options) &&\n (this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '<=' || comp.operator === '<')\n const oppositeDirectionsGreaterThan =\n cmp(this.semver, '>', comp.semver, options) &&\n (this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '>=' || comp.operator === '>')\n\n return (\n sameDirectionIncreasing ||\n sameDirectionDecreasing ||\n (sameSemVer && differentDirectionsInclusive) ||\n oppositeDirectionsLessThan ||\n oppositeDirectionsGreaterThan\n )\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst {re, t} = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n","const Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin)))\n minver = setMin\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n","const Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n","const SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst {ANY} = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n","// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","const outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","const Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2)\n}\nmodule.exports = intersects\n","// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let min = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!min)\n min = version\n } else {\n if (prev) {\n set.push([min, prev])\n }\n prev = null\n min = null\n }\n }\n if (min)\n set.push([min, null])\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max)\n ranges.push(min)\n else if (!max && min === v[0])\n ranges.push('*')\n else if (!max)\n ranges.push(`>=${min}`)\n else if (min === v[0])\n ranges.push(`<=${max}`)\n else\n ranges.push(`${min} - ${max}`)\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n","const Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom)\n return true\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub)\n continue OUTER\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull)\n return false\n }\n return true\n}\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom)\n return true\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY)\n return true\n else if (options.includePrerelease)\n sub = [ new Comparator('>=0.0.0-0') ]\n else\n sub = [ new Comparator('>=0.0.0') ]\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease)\n return true\n else\n dom = [ new Comparator('>=0.0.0') ]\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=')\n gt = higherGT(gt, c, options)\n else if (c.operator === '<' || c.operator === '<=')\n lt = lowerLT(lt, c, options)\n else\n eqSet.add(c.semver)\n }\n\n if (eqSet.size > 1)\n return null\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0)\n return null\n else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<='))\n return null\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options))\n return null\n\n if (lt && !satisfies(eq, String(lt), options))\n return null\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options))\n return false\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt)\n return false\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options))\n return false\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt)\n return false\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options))\n return false\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0)\n return false\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0)\n return false\n\n if (lt && hasDomGT && !gt && gtltComp !== 0)\n return false\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre)\n return false\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a)\n return b\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a)\n return b\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n","// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nmodule.exports = {\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: require('./internal/constants').SEMVER_SPEC_VERSION,\n SemVer: require('./classes/semver'),\n compareIdentifiers: require('./internal/identifiers').compareIdentifiers,\n rcompareIdentifiers: require('./internal/identifiers').rcompareIdentifiers,\n parse: require('./functions/parse'),\n valid: require('./functions/valid'),\n clean: require('./functions/clean'),\n inc: require('./functions/inc'),\n diff: require('./functions/diff'),\n major: require('./functions/major'),\n minor: require('./functions/minor'),\n patch: require('./functions/patch'),\n prerelease: require('./functions/prerelease'),\n compare: require('./functions/compare'),\n rcompare: require('./functions/rcompare'),\n compareLoose: require('./functions/compare-loose'),\n compareBuild: require('./functions/compare-build'),\n sort: require('./functions/sort'),\n rsort: require('./functions/rsort'),\n gt: require('./functions/gt'),\n lt: require('./functions/lt'),\n eq: require('./functions/eq'),\n neq: require('./functions/neq'),\n gte: require('./functions/gte'),\n lte: require('./functions/lte'),\n cmp: require('./functions/cmp'),\n coerce: require('./functions/coerce'),\n Comparator: require('./classes/comparator'),\n Range: require('./classes/range'),\n satisfies: require('./functions/satisfies'),\n toComparators: require('./ranges/to-comparators'),\n maxSatisfying: require('./ranges/max-satisfying'),\n minSatisfying: require('./ranges/min-satisfying'),\n minVersion: require('./ranges/min-version'),\n validRange: require('./ranges/valid'),\n outside: require('./ranges/outside'),\n gtr: require('./ranges/gtr'),\n ltr: require('./ranges/ltr'),\n intersects: require('./ranges/intersects'),\n simplifyRange: require('./ranges/simplify'),\n subset: require('./ranges/subset'),\n}\n","function e(e){const[n,r]=/schema\\/([\\w-]+)\\/([\\w\\.\\-]+)\\.json$/g.exec(e).slice(1,3);return{library:n,version:r}}export default e;\n//# sourceMappingURL=parser.module.js.map\n","var name = \"vega-themes\";\nvar version = \"2.10.0\";\nvar description = \"Themes for stylized Vega and Vega-Lite visualizations.\";\nvar keywords = [\n\t\"vega\",\n\t\"vega-lite\",\n\t\"themes\",\n\t\"style\"\n];\nvar license = \"BSD-3-Clause\";\nvar author = {\n\tname: \"UW Interactive Data Lab\",\n\turl: \"https://idl.cs.washington.edu\"\n};\nvar contributors = [\n\t{\n\t\tname: \"Emily Gu\",\n\t\turl: \"https://github.com/emilygu\"\n\t},\n\t{\n\t\tname: \"Arvind Satyanarayan\",\n\t\turl: \"http://arvindsatya.com\"\n\t},\n\t{\n\t\tname: \"Jeffrey Heer\",\n\t\turl: \"https://idl.cs.washington.edu\"\n\t},\n\t{\n\t\tname: \"Dominik Moritz\",\n\t\turl: \"https://www.domoritz.de\"\n\t}\n];\nvar main = \"build/vega-themes.js\";\nvar module = \"build/vega-themes.module.js\";\nvar unpkg = \"build/vega-themes.min.js\";\nvar jsdelivr = \"build/vega-themes.min.js\";\nvar types = \"build/vega-themes.module.d.ts\";\nvar repository = {\n\ttype: \"git\",\n\turl: \"https://github.com/vega/vega-themes.git\"\n};\nvar files = [\n\t\"src\",\n\t\"build\"\n];\nvar scripts = {\n\tprebuild: \"yarn clean\",\n\tbuild: \"rollup -c\",\n\tclean: \"rimraf build && rimraf examples/build\",\n\t\"copy:data\": \"rsync -r node_modules/vega-datasets/data/* examples/data\",\n\t\"copy:build\": \"rsync -r build/* examples/build\",\n\t\"deploy:gh\": \"yarn build && mkdir -p examples/build && rsync -r build/* examples/build && gh-pages -d examples\",\n\tprepublishOnly: \"yarn clean && yarn build\",\n\tpreversion: \"yarn lint\",\n\tserve: \"browser-sync start -s -f build examples --serveStatic examples\",\n\tstart: \"yarn build && concurrently --kill-others -n Server,Rollup 'yarn serve' 'rollup -c -w'\",\n\tprepare: \"beemo create-config\",\n\teslintbase: \"beemo eslint .\",\n\tformat: \"yarn eslintbase --fix\",\n\tlint: \"yarn eslintbase\"\n};\nvar devDependencies = {\n\t\"@rollup/plugin-json\": \"^4.1.0\",\n\t\"@rollup/plugin-node-resolve\": \"^11.2.0\",\n\t\"@wessberg/rollup-plugin-ts\": \"^1.3.8\",\n\t\"browser-sync\": \"^2.26.14\",\n\tconcurrently: \"^6.0.0\",\n\t\"gh-pages\": \"^3.1.0\",\n\trollup: \"^2.39.1\",\n\t\"rollup-plugin-bundle-size\": \"^1.0.3\",\n\t\"rollup-plugin-terser\": \"^7.0.2\",\n\ttypescript: \"^4.2.2\",\n\tvega: \"^5.19.1\",\n\t\"vega-lite\": \"^5.0.0\",\n\t\"vega-lite-dev-config\": \"^0.16.1\"\n};\nvar peerDependencies = {\n\tvega: \"*\",\n\t\"vega-lite\": \"*\"\n};\nvar pkg = {\n\tname: name,\n\tversion: version,\n\tdescription: description,\n\tkeywords: keywords,\n\tlicense: license,\n\tauthor: author,\n\tcontributors: contributors,\n\tmain: main,\n\tmodule: module,\n\tunpkg: unpkg,\n\tjsdelivr: jsdelivr,\n\ttypes: types,\n\trepository: repository,\n\tfiles: files,\n\tscripts: scripts,\n\tdevDependencies: devDependencies,\n\tpeerDependencies: peerDependencies\n};\n\nconst lightColor = '#fff';\nconst medColor = '#888';\nconst darkTheme = {\n background: '#333',\n title: {\n color: lightColor,\n subtitleColor: lightColor\n },\n style: {\n 'guide-label': {\n fill: lightColor,\n },\n 'guide-title': {\n fill: lightColor,\n },\n },\n axis: {\n domainColor: lightColor,\n gridColor: medColor,\n tickColor: lightColor,\n },\n};\n\nconst markColor = '#4572a7';\nconst excelTheme = {\n background: '#fff',\n arc: { fill: markColor },\n area: { fill: markColor },\n line: { stroke: markColor, strokeWidth: 2 },\n path: { stroke: markColor },\n rect: { fill: markColor },\n shape: { stroke: markColor },\n symbol: { fill: markColor, strokeWidth: 1.5, size: 50 },\n axis: {\n bandPosition: 0.5,\n grid: true,\n gridColor: '#000000',\n gridOpacity: 1,\n gridWidth: 0.5,\n labelPadding: 10,\n tickSize: 5,\n tickWidth: 0.5,\n },\n axisBand: {\n grid: false,\n tickExtra: true,\n },\n legend: {\n labelBaseline: 'middle',\n labelFontSize: 11,\n symbolSize: 50,\n symbolType: 'square',\n },\n range: {\n category: [\n '#4572a7',\n '#aa4643',\n '#8aa453',\n '#71598e',\n '#4598ae',\n '#d98445',\n '#94aace',\n '#d09393',\n '#b9cc98',\n '#a99cbc',\n ],\n },\n};\n\nconst markColor$1 = '#30a2da';\nconst axisColor = '#cbcbcb';\nconst guideLabelColor = '#999';\nconst guideTitleColor = '#333';\nconst backgroundColor = '#f0f0f0';\nconst blackTitle = '#333';\nconst fiveThirtyEightTheme = {\n arc: { fill: markColor$1 },\n area: { fill: markColor$1 },\n axis: {\n domainColor: axisColor,\n grid: true,\n gridColor: axisColor,\n gridWidth: 1,\n labelColor: guideLabelColor,\n labelFontSize: 10,\n titleColor: guideTitleColor,\n tickColor: axisColor,\n tickSize: 10,\n titleFontSize: 14,\n titlePadding: 10,\n labelPadding: 4,\n },\n axisBand: {\n grid: false,\n },\n background: backgroundColor,\n group: {\n fill: backgroundColor,\n },\n legend: {\n labelColor: blackTitle,\n labelFontSize: 11,\n padding: 1,\n symbolSize: 30,\n symbolType: 'square',\n titleColor: blackTitle,\n titleFontSize: 14,\n titlePadding: 10,\n },\n line: {\n stroke: markColor$1,\n strokeWidth: 2,\n },\n path: { stroke: markColor$1, strokeWidth: 0.5 },\n rect: { fill: markColor$1 },\n range: {\n category: [\n '#30a2da',\n '#fc4f30',\n '#e5ae38',\n '#6d904f',\n '#8b8b8b',\n '#b96db8',\n '#ff9e27',\n '#56cc60',\n '#52d2ca',\n '#52689e',\n '#545454',\n '#9fe4f8',\n ],\n diverging: ['#cc0020', '#e77866', '#f6e7e1', '#d6e8ed', '#91bfd9', '#1d78b5'],\n heatmap: ['#d6e8ed', '#cee0e5', '#91bfd9', '#549cc6', '#1d78b5'],\n },\n point: {\n filled: true,\n shape: 'circle',\n },\n shape: { stroke: markColor$1 },\n bar: {\n binSpacing: 2,\n fill: markColor$1,\n stroke: null,\n },\n title: {\n anchor: 'start',\n fontSize: 24,\n fontWeight: 600,\n offset: 20,\n },\n};\n\nconst markColor$2 = '#000';\nconst ggplot2Theme = {\n group: {\n fill: '#e5e5e5',\n },\n arc: { fill: markColor$2 },\n area: { fill: markColor$2 },\n line: { stroke: markColor$2 },\n path: { stroke: markColor$2 },\n rect: { fill: markColor$2 },\n shape: { stroke: markColor$2 },\n symbol: { fill: markColor$2, size: 40 },\n axis: {\n domain: false,\n grid: true,\n gridColor: '#FFFFFF',\n gridOpacity: 1,\n labelColor: '#7F7F7F',\n labelPadding: 4,\n tickColor: '#7F7F7F',\n tickSize: 5.67,\n titleFontSize: 16,\n titleFontWeight: 'normal',\n },\n legend: {\n labelBaseline: 'middle',\n labelFontSize: 11,\n symbolSize: 40,\n },\n range: {\n category: [\n '#000000',\n '#7F7F7F',\n '#1A1A1A',\n '#999999',\n '#333333',\n '#B0B0B0',\n '#4D4D4D',\n '#C9C9C9',\n '#666666',\n '#DCDCDC',\n ],\n },\n};\n\nconst headlineFontSize = 22;\nconst headlineFontWeight = 'normal';\nconst labelFont = 'Benton Gothic, sans-serif';\nconst labelFontSize = 11.5;\nconst labelFontWeight = 'normal';\nconst markColor$3 = '#82c6df';\n// const markHighlight = '#006d8f';\n// const markDemocrat = '#5789b8';\n// const markRepublican = '#d94f54';\nconst titleFont = 'Benton Gothic Bold, sans-serif';\nconst titleFontWeight = 'normal';\nconst titleFontSize = 13;\nconst colorSchemes = {\n 'category-6': ['#ec8431', '#829eb1', '#c89d29', '#3580b1', '#adc839', '#ab7fb4'],\n 'fire-7': ['#fbf2c7', '#f9e39c', '#f8d36e', '#f4bb6a', '#e68a4f', '#d15a40', '#ab4232'],\n 'fireandice-6': ['#e68a4f', '#f4bb6a', '#f9e39c', '#dadfe2', '#a6b7c6', '#849eae'],\n 'ice-7': ['#edefee', '#dadfe2', '#c4ccd2', '#a6b7c6', '#849eae', '#607785', '#47525d'],\n};\nconst latimesTheme = {\n background: '#ffffff',\n title: {\n anchor: 'start',\n color: '#000000',\n font: titleFont,\n fontSize: headlineFontSize,\n fontWeight: headlineFontWeight,\n },\n arc: { fill: markColor$3 },\n area: { fill: markColor$3 },\n line: { stroke: markColor$3, strokeWidth: 2 },\n path: { stroke: markColor$3 },\n rect: { fill: markColor$3 },\n shape: { stroke: markColor$3 },\n symbol: { fill: markColor$3, size: 30 },\n axis: {\n labelFont,\n labelFontSize,\n labelFontWeight,\n titleFont,\n titleFontSize,\n titleFontWeight,\n },\n axisX: {\n labelAngle: 0,\n labelPadding: 4,\n tickSize: 3,\n },\n axisY: {\n labelBaseline: 'middle',\n maxExtent: 45,\n minExtent: 45,\n tickSize: 2,\n titleAlign: 'left',\n titleAngle: 0,\n titleX: -45,\n titleY: -11,\n },\n legend: {\n labelFont,\n labelFontSize,\n symbolType: 'square',\n titleFont,\n titleFontSize,\n titleFontWeight,\n },\n range: {\n category: colorSchemes['category-6'],\n diverging: colorSchemes['fireandice-6'],\n heatmap: colorSchemes['fire-7'],\n ordinal: colorSchemes['fire-7'],\n ramp: colorSchemes['fire-7'],\n },\n};\n\nconst markColor$4 = '#ab5787';\nconst axisColor$1 = '#979797';\nconst quartzTheme = {\n background: '#f9f9f9',\n arc: { fill: markColor$4 },\n area: { fill: markColor$4 },\n line: { stroke: markColor$4 },\n path: { stroke: markColor$4 },\n rect: { fill: markColor$4 },\n shape: { stroke: markColor$4 },\n symbol: { fill: markColor$4, size: 30 },\n axis: {\n domainColor: axisColor$1,\n domainWidth: 0.5,\n gridWidth: 0.2,\n labelColor: axisColor$1,\n tickColor: axisColor$1,\n tickWidth: 0.2,\n titleColor: axisColor$1,\n },\n axisBand: {\n grid: false,\n },\n axisX: {\n grid: true,\n tickSize: 10,\n },\n axisY: {\n domain: false,\n grid: true,\n tickSize: 0,\n },\n legend: {\n labelFontSize: 11,\n padding: 1,\n symbolSize: 30,\n symbolType: 'square',\n },\n range: {\n category: [\n '#ab5787',\n '#51b2e5',\n '#703c5c',\n '#168dd9',\n '#d190b6',\n '#00609f',\n '#d365ba',\n '#154866',\n '#666666',\n '#c4c4c4',\n ],\n },\n};\n\nconst markColor$5 = '#3e5c69';\nconst voxTheme = {\n background: '#fff',\n arc: { fill: markColor$5 },\n area: { fill: markColor$5 },\n line: { stroke: markColor$5 },\n path: { stroke: markColor$5 },\n rect: { fill: markColor$5 },\n shape: { stroke: markColor$5 },\n symbol: { fill: markColor$5 },\n axis: {\n domainWidth: 0.5,\n grid: true,\n labelPadding: 2,\n tickSize: 5,\n tickWidth: 0.5,\n titleFontWeight: 'normal',\n },\n axisBand: {\n grid: false,\n },\n axisX: {\n gridWidth: 0.2,\n },\n axisY: {\n gridDash: [3],\n gridWidth: 0.4,\n },\n legend: {\n labelFontSize: 11,\n padding: 1,\n symbolType: 'square',\n },\n range: {\n category: ['#3e5c69', '#6793a6', '#182429', '#0570b0', '#3690c0', '#74a9cf', '#a6bddb', '#e2ddf2'],\n },\n};\n\nconst markColor$6 = '#1696d2';\nconst axisColor$2 = '#000000';\nconst backgroundColor$1 = '#FFFFFF';\nconst font = 'Lato';\nconst labelFont$1 = 'Lato';\nconst sourceFont = 'Lato';\nconst gridColor = '#DEDDDD';\nconst titleFontSize$1 = 18;\nconst colorSchemes$1 = {\n 'main-colors': ['#1696d2', '#d2d2d2', '#000000', '#fdbf11', '#ec008b', '#55b748', '#5c5859', '#db2b27'],\n 'shades-blue': ['#CFE8F3', '#A2D4EC', '#73BFE2', '#46ABDB', '#1696D2', '#12719E', '#0A4C6A', '#062635'],\n 'shades-gray': ['#F5F5F5', '#ECECEC', '#E3E3E3', '#DCDBDB', '#D2D2D2', '#9D9D9D', '#696969', '#353535'],\n 'shades-yellow': ['#FFF2CF', '#FCE39E', '#FDD870', '#FCCB41', '#FDBF11', '#E88E2D', '#CA5800', '#843215'],\n 'shades-magenta': ['#F5CBDF', '#EB99C2', '#E46AA7', '#E54096', '#EC008B', '#AF1F6B', '#761548', '#351123'],\n 'shades-green': ['#DCEDD9', '#BCDEB4', '#98CF90', '#78C26D', '#55B748', '#408941', '#2C5C2D', '#1A2E19'],\n 'shades-black': ['#D5D5D4', '#ADABAC', '#848081', '#5C5859', '#332D2F', '#262223', '#1A1717', '#0E0C0D'],\n 'shades-red': ['#F8D5D4', '#F1AAA9', '#E9807D', '#E25552', '#DB2B27', '#A4201D', '#6E1614', '#370B0A'],\n 'one-group': ['#1696d2', '#000000'],\n 'two-groups-cat-1': ['#1696d2', '#000000'],\n 'two-groups-cat-2': ['#1696d2', '#fdbf11'],\n 'two-groups-cat-3': ['#1696d2', '#db2b27'],\n 'two-groups-seq': ['#a2d4ec', '#1696d2'],\n 'three-groups-cat': ['#1696d2', '#fdbf11', '#000000'],\n 'three-groups-seq': ['#a2d4ec', '#1696d2', '#0a4c6a'],\n 'four-groups-cat-1': ['#000000', '#d2d2d2', '#fdbf11', '#1696d2'],\n 'four-groups-cat-2': ['#1696d2', '#ec0008b', '#fdbf11', '#5c5859'],\n 'four-groups-seq': ['#cfe8f3', '#73bf42', '#1696d2', '#0a4c6a'],\n 'five-groups-cat-1': ['#1696d2', '#fdbf11', '#d2d2d2', '#ec008b', '#000000'],\n 'five-groups-cat-2': ['#1696d2', '#0a4c6a', '#d2d2d2', '#fdbf11', '#332d2f'],\n 'five-groups-seq': ['#cfe8f3', '#73bf42', '#1696d2', '#0a4c6a', '#000000'],\n 'six-groups-cat-1': ['#1696d2', '#ec008b', '#fdbf11', '#000000', '#d2d2d2', '#55b748'],\n 'six-groups-cat-2': ['#1696d2', '#d2d2d2', '#ec008b', '#fdbf11', '#332d2f', '#0a4c6a'],\n 'six-groups-seq': ['#cfe8f3', '#a2d4ec', '#73bfe2', '#46abdb', '#1696d2', '#12719e'],\n 'diverging-colors': ['#ca5800', '#fdbf11', '#fdd870', '#fff2cf', '#cfe8f3', '#73bfe2', '#1696d2', '#0a4c6a'],\n};\nconst urbanInstituteTheme = {\n background: backgroundColor$1,\n title: {\n anchor: 'start',\n fontSize: titleFontSize$1,\n font: font,\n },\n axisX: {\n domain: true,\n domainColor: axisColor$2,\n domainWidth: 1,\n grid: false,\n labelFontSize: 12,\n labelFont: labelFont$1,\n labelAngle: 0,\n tickColor: axisColor$2,\n tickSize: 5,\n titleFontSize: 12,\n titlePadding: 10,\n titleFont: font,\n },\n axisY: {\n domain: false,\n domainWidth: 1,\n grid: true,\n gridColor: gridColor,\n gridWidth: 1,\n labelFontSize: 12,\n labelFont: labelFont$1,\n labelPadding: 8,\n ticks: false,\n titleFontSize: 12,\n titlePadding: 10,\n titleFont: font,\n titleAngle: 0,\n titleY: -10,\n titleX: 18,\n },\n legend: {\n labelFontSize: 12,\n labelFont: labelFont$1,\n symbolSize: 100,\n titleFontSize: 12,\n titlePadding: 10,\n titleFont: font,\n orient: 'right',\n offset: 10,\n },\n view: {\n stroke: 'transparent',\n },\n range: {\n category: colorSchemes$1['six-groups-cat-1'],\n diverging: colorSchemes$1['diverging-colors'],\n heatmap: colorSchemes$1['diverging-colors'],\n ordinal: colorSchemes$1['six-groups-seq'],\n ramp: colorSchemes$1['shades-blue'],\n },\n area: {\n fill: markColor$6,\n },\n rect: {\n fill: markColor$6,\n },\n line: {\n color: markColor$6,\n stroke: markColor$6,\n strokeWidth: 5,\n },\n trail: {\n color: markColor$6,\n stroke: markColor$6,\n strokeWidth: 0,\n size: 1,\n },\n path: {\n stroke: markColor$6,\n strokeWidth: 0.5,\n },\n point: {\n filled: true,\n },\n text: {\n font: sourceFont,\n color: markColor$6,\n fontSize: 11,\n align: 'center',\n fontWeight: 400,\n size: 11,\n },\n style: {\n bar: {\n fill: markColor$6,\n stroke: null,\n },\n },\n arc: { fill: markColor$6 },\n shape: { stroke: markColor$6 },\n symbol: { fill: markColor$6, size: 30 },\n};\n\n/**\n * Copyright 2020 Google LLC.\n *\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file or at\n * https://developers.google.com/open-source/licenses/bsd\n */\nconst markColor$7 = '#3366CC';\nconst gridColor$1 = '#ccc';\nconst defaultFont = 'Arial, sans-serif';\nconst googlechartsTheme = {\n arc: { fill: markColor$7 },\n area: { fill: markColor$7 },\n path: { stroke: markColor$7 },\n rect: { fill: markColor$7 },\n shape: { stroke: markColor$7 },\n symbol: { stroke: markColor$7 },\n circle: { fill: markColor$7 },\n background: '#fff',\n padding: {\n top: 10,\n right: 10,\n bottom: 10,\n left: 10,\n },\n style: {\n 'guide-label': {\n font: defaultFont,\n fontSize: 12,\n },\n 'guide-title': {\n font: defaultFont,\n fontSize: 12,\n },\n 'group-title': {\n font: defaultFont,\n fontSize: 12,\n },\n },\n title: {\n font: defaultFont,\n fontSize: 14,\n fontWeight: 'bold',\n dy: -3,\n anchor: 'start',\n },\n axis: {\n gridColor: gridColor$1,\n tickColor: gridColor$1,\n domain: false,\n grid: true,\n },\n range: {\n category: [\n '#4285F4',\n '#DB4437',\n '#F4B400',\n '#0F9D58',\n '#AB47BC',\n '#00ACC1',\n '#FF7043',\n '#9E9D24',\n '#5C6BC0',\n '#F06292',\n '#00796B',\n '#C2185B',\n ],\n heatmap: ['#c6dafc', '#5e97f6', '#2a56c6'],\n },\n};\n\nconst version$1 = pkg.version;\n\nexport { darkTheme as dark, excelTheme as excel, fiveThirtyEightTheme as fivethirtyeight, ggplot2Theme as ggplot2, googlechartsTheme as googlecharts, latimesTheme as latimes, quartzTheme as quartz, urbanInstituteTheme as urbaninstitute, version$1 as version, voxTheme as vox };\n","function accessor (fn, fields, name) {\n fn.fields = fields || [];\n fn.fname = name;\n return fn;\n}\nfunction accessorName(fn) {\n return fn == null ? null : fn.fname;\n}\nfunction accessorFields(fn) {\n return fn == null ? null : fn.fields;\n}\n\nfunction getter (path) {\n return path.length === 1 ? get1(path[0]) : getN(path);\n}\n\nconst get1 = field => function (obj) {\n return obj[field];\n};\n\nconst getN = path => {\n const len = path.length;\n return function (obj) {\n for (let i = 0; i < len; ++i) {\n obj = obj[path[i]];\n }\n\n return obj;\n };\n};\n\nfunction error (message) {\n throw Error(message);\n}\n\nfunction splitAccessPath (p) {\n const path = [],\n n = p.length;\n let q = null,\n b = 0,\n s = '',\n i,\n j,\n c;\n p = p + '';\n\n function push() {\n path.push(s + p.substring(i, j));\n s = '';\n i = j + 1;\n }\n\n for (i = j = 0; j < n; ++j) {\n c = p[j];\n\n if (c === '\\\\') {\n s += p.substring(i, j);\n s += p.substring(++j, ++j);\n i = j;\n } else if (c === q) {\n push();\n q = null;\n b = -1;\n } else if (q) {\n continue;\n } else if (i === b && c === '\"') {\n i = j + 1;\n q = c;\n } else if (i === b && c === \"'\") {\n i = j + 1;\n q = c;\n } else if (c === '.' && !b) {\n if (j > i) {\n push();\n } else {\n i = j + 1;\n }\n } else if (c === '[') {\n if (j > i) push();\n b = i = j + 1;\n } else if (c === ']') {\n if (!b) error('Access path missing open bracket: ' + p);\n if (b > 0) push();\n b = 0;\n i = j + 1;\n }\n }\n\n if (b) error('Access path missing closing bracket: ' + p);\n if (q) error('Access path missing closing quote: ' + p);\n\n if (j > i) {\n j++;\n push();\n }\n\n return path;\n}\n\nfunction field (field, name, opt) {\n const path = splitAccessPath(field);\n field = path.length === 1 ? path[0] : field;\n return accessor((opt && opt.get || getter)(path), [field], name || field);\n}\n\nconst id = field('id');\nconst identity = accessor(_ => _, [], 'identity');\nconst zero = accessor(() => 0, [], 'zero');\nconst one = accessor(() => 1, [], 'one');\nconst truthy = accessor(() => true, [], 'true');\nconst falsy = accessor(() => false, [], 'false');\n\nfunction log$1(method, level, input) {\n const args = [level].concat([].slice.call(input));\n console[method].apply(console, args); // eslint-disable-line no-console\n}\n\nconst None = 0;\nconst Error$1 = 1;\nconst Warn = 2;\nconst Info = 3;\nconst Debug = 4;\nfunction logger (_, method) {\n let level = _ || None;\n return {\n level(_) {\n if (arguments.length) {\n level = +_;\n return this;\n } else {\n return level;\n }\n },\n\n error() {\n if (level >= Error$1) log$1(method || 'error', 'ERROR', arguments);\n return this;\n },\n\n warn() {\n if (level >= Warn) log$1(method || 'warn', 'WARN', arguments);\n return this;\n },\n\n info() {\n if (level >= Info) log$1(method || 'log', 'INFO', arguments);\n return this;\n },\n\n debug() {\n if (level >= Debug) log$1(method || 'log', 'DEBUG', arguments);\n return this;\n }\n\n };\n}\n\nvar isArray = Array.isArray;\n\nfunction isObject (_) {\n return _ === Object(_);\n}\n\nconst isLegalKey = key => key !== '__proto__';\n\nfunction mergeConfig(...configs) {\n return configs.reduce((out, source) => {\n for (const key in source) {\n if (key === 'signals') {\n // for signals, we merge the signals arrays\n // source signals take precedence over\n // existing signals with the same name\n out.signals = mergeNamed(out.signals, source.signals);\n } else {\n // otherwise, merge objects subject to recursion constraints\n // for legend block, recurse for the layout entry only\n // for style block, recurse for all properties\n // otherwise, no recursion: objects overwrite, no merging\n const r = key === 'legend' ? {\n layout: 1\n } : key === 'style' ? true : null;\n writeConfig(out, key, source[key], r);\n }\n }\n\n return out;\n }, {});\n}\nfunction writeConfig(output, key, value, recurse) {\n if (!isLegalKey(key)) return;\n let k, o;\n\n if (isObject(value) && !isArray(value)) {\n o = isObject(output[key]) ? output[key] : output[key] = {};\n\n for (k in value) {\n if (recurse && (recurse === true || recurse[k])) {\n writeConfig(o, k, value[k]);\n } else if (isLegalKey(k)) {\n o[k] = value[k];\n }\n }\n } else {\n output[key] = value;\n }\n}\n\nfunction mergeNamed(a, b) {\n if (a == null) return b;\n const map = {},\n out = [];\n\n function add(_) {\n if (!map[_.name]) {\n map[_.name] = 1;\n out.push(_);\n }\n }\n\n b.forEach(add);\n a.forEach(add);\n return out;\n}\n\nfunction peek (array) {\n return array[array.length - 1];\n}\n\nfunction toNumber (_) {\n return _ == null || _ === '' ? null : +_;\n}\n\nconst exp = sign => x => sign * Math.exp(x);\n\nconst log = sign => x => Math.log(sign * x);\n\nconst symlog = c => x => Math.sign(x) * Math.log1p(Math.abs(x / c));\n\nconst symexp = c => x => Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n\nconst pow = exponent => x => x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n\nfunction pan(domain, delta, lift, ground) {\n const d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n dd = (d1 - d0) * delta;\n return [ground(d0 - dd), ground(d1 - dd)];\n}\n\nfunction panLinear(domain, delta) {\n return pan(domain, delta, toNumber, identity);\n}\nfunction panLog(domain, delta) {\n var sign = Math.sign(domain[0]);\n return pan(domain, delta, log(sign), exp(sign));\n}\nfunction panPow(domain, delta, exponent) {\n return pan(domain, delta, pow(exponent), pow(1 / exponent));\n}\nfunction panSymlog(domain, delta, constant) {\n return pan(domain, delta, symlog(constant), symexp(constant));\n}\n\nfunction zoom(domain, anchor, scale, lift, ground) {\n const d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n return [ground(da + (d0 - da) * scale), ground(da + (d1 - da) * scale)];\n}\n\nfunction zoomLinear(domain, anchor, scale) {\n return zoom(domain, anchor, scale, toNumber, identity);\n}\nfunction zoomLog(domain, anchor, scale) {\n const sign = Math.sign(domain[0]);\n return zoom(domain, anchor, scale, log(sign), exp(sign));\n}\nfunction zoomPow(domain, anchor, scale, exponent) {\n return zoom(domain, anchor, scale, pow(exponent), pow(1 / exponent));\n}\nfunction zoomSymlog(domain, anchor, scale, constant) {\n return zoom(domain, anchor, scale, symlog(constant), symexp(constant));\n}\n\nfunction quarter(date) {\n return 1 + ~~(new Date(date).getMonth() / 3);\n}\nfunction utcquarter(date) {\n return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n\nfunction array (_) {\n return _ != null ? isArray(_) ? _ : [_] : [];\n}\n\n/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nfunction clampRange (range, min, max) {\n let lo = range[0],\n hi = range[1],\n span;\n\n if (hi < lo) {\n span = hi;\n hi = lo;\n lo = span;\n }\n\n span = hi - lo;\n return span >= max - min ? [min, max] : [lo = Math.min(Math.max(lo, min), max - span), lo + span];\n}\n\nfunction isFunction (_) {\n return typeof _ === 'function';\n}\n\nconst DESCENDING = 'descending';\nfunction compare (fields, orders, opt) {\n opt = opt || {};\n orders = array(orders) || [];\n const ord = [],\n get = [],\n fmap = {},\n gen = opt.comparator || comparator;\n array(fields).forEach((f, i) => {\n if (f == null) return;\n ord.push(orders[i] === DESCENDING ? -1 : 1);\n get.push(f = isFunction(f) ? f : field(f, null, opt));\n (accessorFields(f) || []).forEach(_ => fmap[_] = 1);\n });\n return get.length === 0 ? null : accessor(gen(get, ord), Object.keys(fmap));\n}\nconst ascending = (u, v) => (u < v || u == null) && v != null ? -1 : (u > v || v == null) && u != null ? 1 : (v = v instanceof Date ? +v : v, u = u instanceof Date ? +u : u) !== u && v === v ? -1 : v !== v && u === u ? 1 : 0;\n\nconst comparator = (fields, orders) => fields.length === 1 ? compare1(fields[0], orders[0]) : compareN(fields, orders, fields.length);\n\nconst compare1 = (field, order) => function (a, b) {\n return ascending(field(a), field(b)) * order;\n};\n\nconst compareN = (fields, orders, n) => {\n orders.push(0); // pad zero for convenient lookup\n\n return function (a, b) {\n let f,\n c = 0,\n i = -1;\n\n while (c === 0 && ++i < n) {\n f = fields[i];\n c = ascending(f(a), f(b));\n }\n\n return c * orders[i];\n };\n};\n\nfunction constant (_) {\n return isFunction(_) ? _ : () => _;\n}\n\nfunction debounce (delay, handler) {\n let tid;\n return e => {\n if (tid) clearTimeout(tid);\n tid = setTimeout(() => (handler(e), tid = null), delay);\n };\n}\n\nfunction extend (_) {\n for (let x, k, i = 1, len = arguments.length; i < len; ++i) {\n x = arguments[i];\n\n for (k in x) {\n _[k] = x[k];\n }\n }\n\n return _;\n}\n\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nfunction extent (array, f) {\n let i = 0,\n n,\n v,\n min,\n max;\n\n if (array && (n = array.length)) {\n if (f == null) {\n // find first valid value\n for (v = array[i]; i < n && (v == null || v !== v); v = array[++i]);\n\n min = max = v; // visit all other values\n\n for (; i < n; ++i) {\n v = array[i]; // skip null/undefined; NaN will fail all comparisons\n\n if (v != null) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n } else {\n // find first valid value\n for (v = f(array[i]); i < n && (v == null || v !== v); v = f(array[++i]));\n\n min = max = v; // visit all other values\n\n for (; i < n; ++i) {\n v = f(array[i]); // skip null/undefined; NaN will fail all comparisons\n\n if (v != null) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n }\n }\n\n return [min, max];\n}\n\nfunction extentIndex (array, f) {\n const n = array.length;\n let i = -1,\n a,\n b,\n c,\n u,\n v;\n\n if (f == null) {\n while (++i < n) {\n b = array[i];\n\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n\n if (i === n) return [-1, -1];\n u = v = i;\n\n while (++i < n) {\n b = array[i];\n\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n } else {\n while (++i < n) {\n b = f(array[i], i, array);\n\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n\n if (i === n) return [-1, -1];\n u = v = i;\n\n while (++i < n) {\n b = f(array[i], i, array);\n\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n }\n\n return [u, v];\n}\n\nconst hop = Object.prototype.hasOwnProperty;\nfunction has (object, property) {\n return hop.call(object, property);\n}\n\nconst NULL = {};\nfunction fastmap (input) {\n let obj = {},\n test;\n\n function has$1(key) {\n return has(obj, key) && obj[key] !== NULL;\n }\n\n const map = {\n size: 0,\n empty: 0,\n object: obj,\n has: has$1,\n\n get(key) {\n return has$1(key) ? obj[key] : undefined;\n },\n\n set(key, value) {\n if (!has$1(key)) {\n ++map.size;\n if (obj[key] === NULL) --map.empty;\n }\n\n obj[key] = value;\n return this;\n },\n\n delete(key) {\n if (has$1(key)) {\n --map.size;\n ++map.empty;\n obj[key] = NULL;\n }\n\n return this;\n },\n\n clear() {\n map.size = map.empty = 0;\n map.object = obj = {};\n },\n\n test(_) {\n if (arguments.length) {\n test = _;\n return map;\n } else {\n return test;\n }\n },\n\n clean() {\n const next = {};\n let size = 0;\n\n for (const key in obj) {\n const value = obj[key];\n\n if (value !== NULL && (!test || !test(value))) {\n next[key] = value;\n ++size;\n }\n }\n\n map.size = size;\n map.empty = 0;\n map.object = obj = next;\n }\n\n };\n if (input) Object.keys(input).forEach(key => {\n map.set(key, input[key]);\n });\n return map;\n}\n\nfunction flush (range, value, threshold, left, right, center) {\n if (!threshold && threshold !== 0) return center;\n const t = +threshold;\n let a = range[0],\n b = peek(range),\n l; // swap endpoints if range is reversed\n\n if (b < a) {\n l = a;\n a = b;\n b = l;\n } // compare value to endpoints\n\n\n l = Math.abs(value - a);\n const r = Math.abs(b - value); // adjust if value is within threshold distance of endpoint\n\n return l < r && l <= t ? left : r <= t ? right : center;\n}\n\nfunction inherits (child, parent, members) {\n const proto = child.prototype = Object.create(parent.prototype);\n Object.defineProperty(proto, 'constructor', {\n value: child,\n writable: true,\n enumerable: true,\n configurable: true\n });\n return extend(proto, members);\n}\n\n/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nfunction inrange (value, range, left, right) {\n let r0 = range[0],\n r1 = range[range.length - 1],\n t;\n\n if (r0 > r1) {\n t = r0;\n r0 = r1;\n r1 = t;\n }\n\n left = left === undefined || left;\n right = right === undefined || right;\n return (left ? r0 <= value : r0 < value) && (right ? value <= r1 : value < r1);\n}\n\nfunction isBoolean (_) {\n return typeof _ === 'boolean';\n}\n\nfunction isDate (_) {\n return Object.prototype.toString.call(_) === '[object Date]';\n}\n\nfunction isIterable (_) {\n return _ && isFunction(_[Symbol.iterator]);\n}\n\nfunction isNumber (_) {\n return typeof _ === 'number';\n}\n\nfunction isRegExp (_) {\n return Object.prototype.toString.call(_) === '[object RegExp]';\n}\n\nfunction isString (_) {\n return typeof _ === 'string';\n}\n\nfunction key (fields, flat, opt) {\n if (fields) {\n fields = flat ? array(fields).map(f => f.replace(/\\\\(.)/g, '$1')) : array(fields);\n }\n\n const len = fields && fields.length,\n gen = opt && opt.get || getter,\n map = f => gen(flat ? [f] : splitAccessPath(f));\n\n let fn;\n\n if (!len) {\n fn = function () {\n return '';\n };\n } else if (len === 1) {\n const get = map(fields[0]);\n\n fn = function (_) {\n return '' + get(_);\n };\n } else {\n const get = fields.map(map);\n\n fn = function (_) {\n let s = '' + get[0](_),\n i = 0;\n\n while (++i < len) s += '|' + get[i](_);\n\n return s;\n };\n }\n\n return accessor(fn, fields, 'key');\n}\n\nfunction lerp (array, frac) {\n const lo = array[0],\n hi = peek(array),\n f = +frac;\n return !f ? lo : f === 1 ? hi : lo + f * (hi - lo);\n}\n\nconst DEFAULT_MAX_SIZE = 10000; // adapted from https://github.com/dominictarr/hashlru/ (MIT License)\n\nfunction lruCache (maxsize) {\n maxsize = +maxsize || DEFAULT_MAX_SIZE;\n let curr, prev, size;\n\n const clear = () => {\n curr = {};\n prev = {};\n size = 0;\n };\n\n const update = (key, value) => {\n if (++size > maxsize) {\n prev = curr;\n curr = {};\n size = 1;\n }\n\n return curr[key] = value;\n };\n\n clear();\n return {\n clear,\n has: key => has(curr, key) || has(prev, key),\n get: key => has(curr, key) ? curr[key] : has(prev, key) ? update(key, prev[key]) : undefined,\n set: (key, value) => has(curr, key) ? curr[key] = value : update(key, value)\n };\n}\n\nfunction merge (compare, array0, array1, output) {\n const n0 = array0.length,\n n1 = array1.length;\n if (!n1) return array0;\n if (!n0) return array1;\n const merged = output || new array0.constructor(n0 + n1);\n let i0 = 0,\n i1 = 0,\n i = 0;\n\n for (; i0 < n0 && i1 < n1; ++i) {\n merged[i] = compare(array0[i0], array1[i1]) > 0 ? array1[i1++] : array0[i0++];\n }\n\n for (; i0 < n0; ++i0, ++i) {\n merged[i] = array0[i0];\n }\n\n for (; i1 < n1; ++i1, ++i) {\n merged[i] = array1[i1];\n }\n\n return merged;\n}\n\nfunction repeat (str, reps) {\n let s = '';\n\n while (--reps >= 0) s += str;\n\n return s;\n}\n\nfunction pad (str, length, padchar, align) {\n const c = padchar || ' ',\n s = str + '',\n n = length - s.length;\n return n <= 0 ? s : align === 'left' ? repeat(c, n) + s : align === 'center' ? repeat(c, ~~(n / 2)) + s + repeat(c, Math.ceil(n / 2)) : s + repeat(c, n);\n}\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\n\nfunction span (array) {\n return array && peek(array) - array[0] || 0;\n}\n\nfunction $(x) {\n return isArray(x) ? '[' + x.map($) + ']' : isObject(x) || isString(x) ? // Output valid JSON and JS source strings.\n // See http://timelessrepo.com/json-isnt-a-javascript-subset\n JSON.stringify(x).replace('\\u2028', '\\\\u2028').replace('\\u2029', '\\\\u2029') : x;\n}\n\nfunction toBoolean (_) {\n return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n}\n\nconst defaultParser = _ => isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\n\nfunction toDate (_, parser) {\n parser = parser || defaultParser;\n return _ == null || _ === '' ? null : parser(_);\n}\n\nfunction toString (_) {\n return _ == null || _ === '' ? null : _ + '';\n}\n\nfunction toSet (_) {\n const s = {},\n n = _.length;\n\n for (let i = 0; i < n; ++i) s[_[i]] = true;\n\n return s;\n}\n\nfunction truncate (str, length, align, ellipsis) {\n const e = ellipsis != null ? ellipsis : '\\u2026',\n s = str + '',\n n = s.length,\n l = Math.max(0, length - e.length);\n return n <= length ? s : align === 'left' ? e + s.slice(n - l) : align === 'center' ? s.slice(0, Math.ceil(l / 2)) + e + s.slice(n - ~~(l / 2)) : s.slice(0, l) + e;\n}\n\nfunction visitArray (array, filter, visitor) {\n if (array) {\n if (filter) {\n const n = array.length;\n\n for (let i = 0; i < n; ++i) {\n const t = filter(array[i]);\n if (t) visitor(t, i, array);\n }\n } else {\n array.forEach(visitor);\n }\n }\n}\n\nexport { Debug, Error$1 as Error, Info, None, Warn, accessor, accessorFields, accessorName, array, ascending, clampRange, compare, constant, debounce, error, extend, extent, extentIndex, falsy, fastmap, field, flush, has as hasOwnProperty, id, identity, inherits, inrange, isArray, isBoolean, isDate, isFunction, isIterable, isNumber, isObject, isRegExp, isString, key, lerp, logger, lruCache, merge, mergeConfig, one, pad, panLinear, panLog, panPow, panSymlog, peek, quarter, repeat, span, splitAccessPath, $ as stringValue, toBoolean, toDate, toNumber, toSet, toString, truncate, truthy, utcquarter, visitArray, writeConfig, zero, zoomLinear, zoomLog, zoomPow, zoomSymlog };\n","import { isArray, isString, isObject } from 'vega-util';\n\nvar name = \"vega-tooltip\";\nvar version = \"0.25.1\";\nvar description = \"A tooltip plugin for Vega-Lite and Vega visualizations.\";\nvar keywords = [\n\t\"vega-lite\",\n\t\"vega\",\n\t\"tooltip\"\n];\nvar repository = {\n\ttype: \"git\",\n\turl: \"https://github.com/vega/vega-tooltip.git\"\n};\nvar author = {\n\tname: \"UW Interactive Data Lab\",\n\turl: \"https://idl.cs.washington.edu\"\n};\nvar collaborators = [\n\t\"Dominik Moritz\",\n\t\"Sira Horradarn\",\n\t\"Zening Qu\",\n\t\"Kanit Wongsuphasawat\",\n\t\"Yuri Astrakhan\",\n\t\"Jeffrey Heer\"\n];\nvar license = \"BSD-3-Clause\";\nvar bugs = {\n\turl: \"https://github.com/vega/vega-tooltip/issues\"\n};\nvar homepage = \"https://github.com/vega/vega-tooltip#readme\";\nvar main = \"build/vega-tooltip.js\";\nvar module = \"build/vega-tooltip.module.js\";\nvar unpkg = \"build/vega-tooltip.min.js\";\nvar jsdelivr = \"build/vega-tooltip.min.js\";\nvar types = \"build/vega-tooltip.module.d.ts\";\nvar files = [\n\t\"src\",\n\t\"build\",\n\t\"types\"\n];\nvar scripts = {\n\tprebuild: \"yarn clean && yarn build:style\",\n\tbuild: \"rollup -c\",\n\t\"build:style\": \"./build-style.sh\",\n\tclean: \"rimraf build && rimraf src/style.ts\",\n\t\"copy:data\": \"rsync -r node_modules/vega-datasets/data/* examples/data\",\n\t\"copy:build\": \"rsync -r build/* examples/build\",\n\t\"deploy:gh\": \"yarn build && yarn copy:build && gh-pages -d examples && yarn clean\",\n\tprepublishOnly: \"yarn clean && yarn build\",\n\tpreversion: \"yarn lint && yarn test\",\n\tserve: \"browser-sync start -s -f build examples --serveStatic examples\",\n\tstart: \"yarn build && concurrently --kill-others -n Server,Rollup 'yarn serve' 'rollup -c -w'\",\n\tpretest: \"yarn build:style\",\n\ttest: \"beemo jest\",\n\t\"test:inspect\": \"node --inspect-brk ./node_modules/.bin/jest --runInBand\",\n\tprepare: \"beemo create-config && yarn copy:data\",\n\tprettierbase: \"beemo prettier '*.{css,scss,html}'\",\n\teslintbase: \"beemo eslint .\",\n\tformat: \"yarn eslintbase --fix && yarn prettierbase --write\",\n\tlint: \"yarn eslintbase && yarn prettierbase --check\"\n};\nvar devDependencies = {\n\t\"@rollup/plugin-json\": \"^4.1.0\",\n\t\"@rollup/plugin-node-resolve\": \"^11.2.0\",\n\t\"@wessberg/rollup-plugin-ts\": \"^1.3.8\",\n\t\"browser-sync\": \"^2.26.14\",\n\tconcurrently: \"^6.0.0\",\n\t\"gh-pages\": \"^3.1.0\",\n\t\"node-sass\": \"^5.0.0\",\n\tpath: \"^0.12.7\",\n\trollup: \"^2.39.1\",\n\t\"rollup-plugin-bundle-size\": \"^1.0.3\",\n\t\"rollup-plugin-terser\": \"^7.0.2\",\n\ttypescript: \"~4.2.2\",\n\t\"vega-datasets\": \"^2.2.0\",\n\t\"vega-lite-dev-config\": \"^0.16.1\",\n\t\"vega-typings\": \"^0.19.2\"\n};\nvar dependencies = {\n\t\"vega-util\": \"^1.16.0\"\n};\nvar pkg = {\n\tname: name,\n\tversion: version,\n\tdescription: description,\n\tkeywords: keywords,\n\trepository: repository,\n\tauthor: author,\n\tcollaborators: collaborators,\n\tlicense: license,\n\tbugs: bugs,\n\thomepage: homepage,\n\tmain: main,\n\tmodule: module,\n\tunpkg: unpkg,\n\tjsdelivr: jsdelivr,\n\ttypes: types,\n\tfiles: files,\n\tscripts: scripts,\n\tdevDependencies: devDependencies,\n\tdependencies: dependencies\n};\n\n// generated with build-style.sh\nvar defaultStyle = `#vg-tooltip-element {\n visibility: hidden;\n padding: 8px;\n position: fixed;\n z-index: 1000;\n font-family: sans-serif;\n font-size: 11px;\n border-radius: 3px;\n box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1);\n /* The default theme is the light theme. */\n background-color: rgba(255, 255, 255, 0.95);\n border: 1px solid #d9d9d9;\n color: black; }\n #vg-tooltip-element.visible {\n visibility: visible; }\n #vg-tooltip-element h2 {\n margin-top: 0;\n margin-bottom: 10px;\n font-size: 13px; }\n #vg-tooltip-element img {\n max-width: 200px;\n max-height: 200px; }\n #vg-tooltip-element table {\n border-spacing: 0; }\n #vg-tooltip-element table tr {\n border: none; }\n #vg-tooltip-element table tr td {\n overflow: hidden;\n text-overflow: ellipsis;\n padding-top: 2px;\n padding-bottom: 2px; }\n #vg-tooltip-element table tr td.key {\n color: #808080;\n max-width: 150px;\n text-align: right;\n padding-right: 4px; }\n #vg-tooltip-element table tr td.value {\n display: block;\n max-width: 300px;\n max-height: 7em;\n text-align: left; }\n #vg-tooltip-element.dark-theme {\n background-color: rgba(32, 32, 32, 0.9);\n border: 1px solid #f5f5f5;\n color: white; }\n #vg-tooltip-element.dark-theme td.key {\n color: #bfbfbf; }\n`;\n\nconst EL_ID = 'vg-tooltip-element';\nconst DEFAULT_OPTIONS = {\n /**\n * X offset.\n */\n offsetX: 10,\n /**\n * Y offset.\n */\n offsetY: 10,\n /**\n * ID of the tooltip element.\n */\n id: EL_ID,\n /**\n * ID of the tooltip CSS style.\n */\n styleId: 'vega-tooltip-style',\n /**\n * The name of the theme. You can use the CSS class called [THEME]-theme to style the tooltips.\n *\n * There are two predefined themes: \"light\" (default) and \"dark\".\n */\n theme: 'light',\n /**\n * Do not use the default styles provided by Vega Tooltip. If you enable this option, you need to use your own styles. It is not necessary to disable the default style when using a custom theme.\n */\n disableDefaultStyle: false,\n /**\n * HTML sanitizer function that removes dangerous HTML to prevent XSS.\n *\n * This should be a function from string to string. You may replace it with a formatter such as a markdown formatter.\n */\n sanitize: escapeHTML,\n /**\n * The maximum recursion depth when printing objects in the tooltip.\n */\n maxDepth: 2,\n};\n/**\n * Escape special HTML characters.\n *\n * @param value A value to convert to string and HTML-escape.\n */\nfunction escapeHTML(value) {\n return String(value).replace(/&/g, '&').replace(/ valueToHtml(isString(v) ? v : stringify(v, maxDepth))).join(', ')}]`;\n }\n if (isObject(value)) {\n let content = '';\n const _a = value, { title, image } = _a, rest = __rest(_a, [\"title\", \"image\"]);\n if (title) {\n content += `

${valueToHtml(title)}

`;\n }\n if (image) {\n content += ``;\n }\n const keys = Object.keys(rest);\n if (keys.length > 0) {\n content += '';\n for (const key of keys) {\n let val = rest[key];\n // ignore undefined properties\n if (val === undefined) {\n continue;\n }\n if (isObject(val)) {\n val = stringify(val, maxDepth);\n }\n content += ``;\n }\n content += `
${valueToHtml(key)}:${valueToHtml(val)}
`;\n }\n return content || '{}'; // show empty object if there are no properties\n }\n return valueToHtml(value);\n}\nfunction replacer(maxDepth) {\n const stack = [];\n return function (key, value) {\n if (typeof value !== 'object' || value === null) {\n return value;\n }\n const pos = stack.indexOf(this) + 1;\n stack.length = pos;\n if (stack.length > maxDepth) {\n return '[Object]';\n }\n if (stack.indexOf(value) >= 0) {\n return '[Circular]';\n }\n stack.push(value);\n return value;\n };\n}\n/**\n * Stringify any JS object to valid JSON\n */\nfunction stringify(obj, maxDepth) {\n return JSON.stringify(obj, replacer(maxDepth));\n}\n\n/**\n * Position the tooltip\n *\n * @param event The mouse event.\n * @param tooltipBox\n * @param offsetX Horizontal offset.\n * @param offsetY Vertical offset.\n */\nfunction calculatePosition(event, tooltipBox, offsetX, offsetY) {\n let x = event.clientX + offsetX;\n if (x + tooltipBox.width > window.innerWidth) {\n x = +event.clientX - offsetX - tooltipBox.width;\n }\n let y = event.clientY + offsetY;\n if (y + tooltipBox.height > window.innerHeight) {\n y = +event.clientY - offsetY - tooltipBox.height;\n }\n return { x, y };\n}\n\n/**\n * The tooltip handler class.\n */\nclass Handler {\n /**\n * Create the tooltip handler and initialize the element and style.\n *\n * @param options Tooltip Options\n */\n constructor(options) {\n this.options = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);\n const elementId = this.options.id;\n this.el = null;\n // bind this to call\n this.call = this.tooltipHandler.bind(this);\n // prepend a default stylesheet for tooltips to the head\n if (!this.options.disableDefaultStyle && !document.getElementById(this.options.styleId)) {\n const style = document.createElement('style');\n style.setAttribute('id', this.options.styleId);\n style.innerHTML = createDefaultStyle(elementId);\n const head = document.head;\n if (head.childNodes.length > 0) {\n head.insertBefore(style, head.childNodes[0]);\n }\n else {\n head.appendChild(style);\n }\n }\n }\n /**\n * The tooltip handler function.\n */\n tooltipHandler(handler, event, item, value) {\n // console.log(handler, event, item, value);\n // append a div element that we use as a tooltip unless it already exists\n this.el = document.getElementById(this.options.id);\n if (!this.el) {\n this.el = document.createElement('div');\n this.el.setAttribute('id', this.options.id);\n this.el.classList.add('vg-tooltip');\n document.body.appendChild(this.el);\n }\n const tooltipContainer = document.fullscreenElement != null ? document.fullscreenElement : document.body;\n tooltipContainer.appendChild(this.el);\n // hide tooltip for null, undefined, or empty string values\n if (value == null || value === '') {\n this.el.classList.remove('visible', `${this.options.theme}-theme`);\n return;\n }\n // set the tooltip content\n this.el.innerHTML = formatValue(value, this.options.sanitize, this.options.maxDepth);\n // make the tooltip visible\n this.el.classList.add('visible', `${this.options.theme}-theme`);\n const { x, y } = calculatePosition(event, this.el.getBoundingClientRect(), this.options.offsetX, this.options.offsetY);\n this.el.setAttribute('style', `top: ${y}px; left: ${x}px`);\n }\n}\n\nconst version$1 = pkg.version;\n/**\n * Create a tooltip handler and register it with the provided view.\n *\n * @param view The Vega view.\n * @param opt Tooltip options.\n */\nfunction index (view, opt) {\n const handler = new Handler(opt);\n view.tooltip(handler.call).run();\n return handler;\n}\n\nexport default index;\nexport { DEFAULT_OPTIONS, Handler, calculatePosition, createDefaultStyle, escapeHTML, formatValue, replacer, stringify, version$1 as version };\n","// generated with build-style.sh\nexport default `.vega-embed {\n position: relative;\n display: inline-block;\n box-sizing: border-box; }\n .vega-embed.has-actions {\n padding-right: 38px; }\n .vega-embed details:not([open]) > :not(summary) {\n display: none !important; }\n .vega-embed summary {\n list-style: none;\n position: absolute;\n top: 0;\n right: 0;\n padding: 6px;\n z-index: 1000;\n background: white;\n box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1);\n color: #1b1e23;\n border: 1px solid #aaa;\n border-radius: 999px;\n opacity: 0.2;\n transition: opacity 0.4s ease-in;\n outline: none;\n cursor: pointer;\n line-height: 0px; }\n .vega-embed summary::-webkit-details-marker {\n display: none; }\n .vega-embed summary:active {\n box-shadow: #aaa 0px 0px 0px 1px inset; }\n .vega-embed summary svg {\n width: 14px;\n height: 14px; }\n .vega-embed details[open] summary {\n opacity: 0.7; }\n .vega-embed:hover summary,\n .vega-embed:focus summary {\n opacity: 1 !important;\n transition: opacity 0.2s ease; }\n .vega-embed .vega-actions {\n position: absolute;\n z-index: 1001;\n top: 35px;\n right: -9px;\n display: flex;\n flex-direction: column;\n padding-bottom: 8px;\n padding-top: 8px;\n border-radius: 4px;\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.2);\n border: 1px solid #d9d9d9;\n background: white;\n animation-duration: 0.15s;\n animation-name: scale-in;\n animation-timing-function: cubic-bezier(0.2, 0, 0.13, 1.5);\n text-align: left; }\n .vega-embed .vega-actions a {\n padding: 8px 16px;\n font-family: sans-serif;\n font-size: 14px;\n font-weight: 600;\n white-space: nowrap;\n color: #434a56;\n text-decoration: none; }\n .vega-embed .vega-actions a:hover {\n background-color: #f7f7f9;\n color: black; }\n .vega-embed .vega-actions::before, .vega-embed .vega-actions::after {\n content: \"\";\n display: inline-block;\n position: absolute; }\n .vega-embed .vega-actions::before {\n left: auto;\n right: 14px;\n top: -16px;\n border: 8px solid #0000;\n border-bottom-color: #d9d9d9; }\n .vega-embed .vega-actions::after {\n left: auto;\n right: 15px;\n top: -14px;\n border: 7px solid #0000;\n border-bottom-color: #fff; }\n .vega-embed .chart-wrapper.fit-x {\n width: 100%; }\n .vega-embed .chart-wrapper.fit-y {\n height: 100%; }\n\n.vega-embed-wrapper {\n max-width: 100%;\n overflow: auto;\n padding-right: 14px; }\n\n@keyframes scale-in {\n from {\n opacity: 0;\n transform: scale(0.6); }\n to {\n opacity: 1;\n transform: scale(1); } }\n`;\n","import {writeConfig} from 'vega';\n\n// polyfill for IE\nif (!String.prototype.startsWith) {\n // eslint-disable-next-line no-extend-native,func-names\n String.prototype.startsWith = function (search, pos) {\n return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n };\n}\n\nexport function isURL(s: string): boolean {\n return s.startsWith('http://') || s.startsWith('https://') || s.startsWith('//');\n}\n\nexport type DeepPartial = {[P in keyof T]?: P extends unknown ? unknown : DeepPartial};\n\nexport function mergeDeep(dest: T, ...src: readonly DeepPartial[]): T {\n for (const s of src) {\n deepMerge_(dest, s);\n }\n return dest;\n}\n\nfunction deepMerge_(dest: any, src: any) {\n for (const property of Object.keys(src)) {\n writeConfig(dest, property, src[property], true);\n }\n}\n","import {applyPatch, Operation} from 'fast-json-patch';\nimport stringify from 'json-stringify-pretty-compact';\nimport {satisfies} from 'semver';\nimport * as vegaImport from 'vega';\nimport {\n AutoSize,\n Config as VgConfig,\n EncodeEntryName,\n isBoolean,\n isString,\n Loader,\n LoaderOptions,\n mergeConfig,\n Renderers,\n Spec as VgSpec,\n TooltipHandler,\n View,\n} from 'vega';\nimport * as vegaLiteImport from 'vega-lite';\nimport {Config as VlConfig, TopLevelSpec as VlSpec} from 'vega-lite';\nimport schemaParser from 'vega-schema-url-parser';\nimport * as themes from 'vega-themes';\nimport {Handler, Options as TooltipOptions} from 'vega-tooltip';\nimport post from './post';\nimport embedStyle from './style';\nimport {Config, Mode} from './types';\nimport {mergeDeep} from './util';\n\nexport * from './types';\n\nexport const vega = vegaImport;\nexport let vegaLite = vegaLiteImport;\n\n// For backwards compatibility with Vega-Lite before v4.\nconst w = (typeof window !== 'undefined' ? window : undefined) as any;\nif (vegaLite === undefined && w?.['vl']?.compile) {\n vegaLite = w['vl'];\n}\n\nexport interface Actions {\n export?: boolean | {svg?: boolean; png?: boolean};\n source?: boolean;\n compiled?: boolean;\n editor?: boolean;\n}\n\nexport const DEFAULT_ACTIONS = {export: {svg: true, png: true}, source: true, compiled: true, editor: true};\n\nexport interface Hover {\n hoverSet?: EncodeEntryName;\n updateSet?: EncodeEntryName;\n}\n\nexport type PatchFunc = (spec: VgSpec) => VgSpec;\n\nconst I18N = {\n CLICK_TO_VIEW_ACTIONS: 'Click to view actions',\n COMPILED_ACTION: 'View Compiled Vega',\n EDITOR_ACTION: 'Open in Vega Editor',\n PNG_ACTION: 'Save as PNG',\n SOURCE_ACTION: 'View Source',\n SVG_ACTION: 'Save as SVG',\n};\n\nexport interface EmbedOptions {\n bind?: HTMLElement | string;\n actions?: boolean | Actions;\n mode?: Mode;\n theme?: 'excel' | 'ggplot2' | 'quartz' | 'vox' | 'dark';\n defaultStyle?: boolean | string;\n logLevel?: number;\n loader?: Loader | LoaderOptions;\n renderer?: R;\n tooltip?: TooltipHandler | TooltipOptions | boolean;\n patch?: S | PatchFunc | Operation[];\n width?: number;\n height?: number;\n padding?: number | {left?: number; right?: number; top?: number; bottom?: number};\n scaleFactor?: number;\n config?: S | Config;\n sourceHeader?: string;\n sourceFooter?: string;\n editorUrl?: string;\n hover?: boolean | Hover;\n i18n?: Partial;\n downloadFileName?: string;\n formatLocale?: Record;\n timeFormatLocale?: Record;\n ast?: boolean;\n viewClass?: typeof View;\n}\n\nconst NAMES: {[key in Mode]: string} = {\n vega: 'Vega',\n 'vega-lite': 'Vega-Lite',\n};\n\nconst VERSION = {\n vega: vega.version,\n 'vega-lite': vegaLite ? vegaLite.version : 'not available',\n};\n\nconst PREPROCESSOR: {[mode in Mode]: (spec: any, config?: Config) => VgSpec} = {\n vega: (vgSpec: VgSpec) => vgSpec,\n 'vega-lite': (vlSpec, config) => vegaLite.compile(vlSpec as VlSpec, {config: config as VlConfig}).spec,\n};\n\nconst SVG_CIRCLES = `\n\n \n \n \n`;\n\nconst CHART_WRAPPER_CLASS = 'chart-wrapper';\n\nexport type VisualizationSpec = VlSpec | VgSpec;\n\nexport interface Result {\n /** The Vega view. */\n view: View;\n\n /** The input specification. */\n spec: VisualizationSpec;\n\n /** The compiled and patched Vega specification. */\n vgSpec: VgSpec;\n\n /** Removes references to unwanted behaviors and memory leaks. Calls Vega's `view.finalize`. */\n finalize: () => void;\n}\n\nfunction isTooltipHandler(h?: boolean | TooltipOptions | TooltipHandler): h is TooltipHandler {\n return typeof h === 'function';\n}\n\nfunction viewSource(source: string, sourceHeader: string, sourceFooter: string, mode: Mode) {\n const header = `${sourceHeader}
`;\n  const footer = `
${sourceFooter}`;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const win = window.open('')!;\n win.document.write(header + source + footer);\n win.document.title = `${NAMES[mode]} JSON Source`;\n}\n\n/**\n * Try to guess the type of spec.\n *\n * @param spec Vega or Vega-Lite spec.\n */\nexport function guessMode(spec: VisualizationSpec, providedMode?: Mode): Mode {\n // Decide mode\n if (spec.$schema) {\n const parsed = schemaParser(spec.$schema);\n if (providedMode && providedMode !== parsed.library) {\n console.warn(\n `The given visualization spec is written in ${NAMES[parsed.library]}, but mode argument sets ${\n NAMES[providedMode] ?? providedMode\n }.`\n );\n }\n\n const mode = parsed.library as Mode;\n\n if (!satisfies(VERSION[mode], `^${parsed.version.slice(1)}`)) {\n console.warn(\n `The input spec uses ${NAMES[mode]} ${parsed.version}, but the current version of ${NAMES[mode]} is v${VERSION[mode]}.`\n );\n }\n\n return mode;\n }\n\n // try to guess from the provided spec\n if (\n 'mark' in spec ||\n 'encoding' in spec ||\n 'layer' in spec ||\n 'hconcat' in spec ||\n 'vconcat' in spec ||\n 'facet' in spec ||\n 'repeat' in spec\n ) {\n return 'vega-lite';\n }\n\n if ('marks' in spec || 'signals' in spec || 'scales' in spec || 'axes' in spec) {\n return 'vega';\n }\n\n return providedMode ?? 'vega';\n}\n\nfunction isLoader(o?: LoaderOptions | Loader): o is Loader {\n return !!(o && 'load' in o);\n}\n\nfunction createLoader(opts?: Loader | LoaderOptions) {\n return isLoader(opts) ? opts : vega.loader(opts);\n}\n\nfunction embedOptionsFromUsermeta(parsedSpec: VisualizationSpec) {\n return (parsedSpec.usermeta && (parsedSpec.usermeta as any)['embedOptions']) ?? {};\n}\n\n/**\n * Embed a Vega visualization component in a web page. This function returns a promise.\n *\n * @param el DOM element in which to place component (DOM node or CSS selector).\n * @param spec String : A URL string from which to load the Vega specification.\n * Object : The Vega/Vega-Lite specification as a parsed JSON object.\n * @param opts A JavaScript object containing options for embedding.\n */\nexport default async function embed(\n el: HTMLElement | string,\n spec: VisualizationSpec | string,\n opts: EmbedOptions = {}\n): Promise {\n let parsedSpec: VisualizationSpec;\n let loader: Loader | undefined;\n\n if (isString(spec)) {\n loader = createLoader(opts.loader);\n parsedSpec = JSON.parse(await loader.load(spec));\n } else {\n parsedSpec = spec;\n }\n\n const usermetaLoader = embedOptionsFromUsermeta(parsedSpec).loader;\n\n // either create the loader for the first time or create a new loader if the spec has new loader options\n if (!loader || usermetaLoader) {\n loader = createLoader(opts.loader ?? usermetaLoader);\n }\n\n const usermetaOpts = await loadOpts(embedOptionsFromUsermeta(parsedSpec), loader);\n const parsedOpts = await loadOpts(opts, loader);\n\n const mergedOpts = {\n ...mergeDeep(parsedOpts, usermetaOpts),\n config: mergeConfig(parsedOpts.config ?? {}, usermetaOpts.config ?? {}),\n };\n\n return await _embed(el, parsedSpec, mergedOpts, loader);\n}\n\nasync function loadOpts(opt: EmbedOptions, loader: Loader): Promise> {\n const config: Config = isString(opt.config) ? JSON.parse(await loader.load(opt.config)) : opt.config ?? {};\n const patch: PatchFunc | Operation[] = isString(opt.patch) ? JSON.parse(await loader.load(opt.patch)) : opt.patch;\n return {\n ...(opt as any),\n ...(patch ? {patch} : {}),\n ...(config ? {config} : {}),\n };\n}\n\nfunction getRoot(el: Element) {\n const possibleRoot = el.getRootNode ? el.getRootNode() : document;\n if (possibleRoot instanceof ShadowRoot) {\n return {root: possibleRoot, rootContainer: possibleRoot};\n } else {\n return {root: document, rootContainer: document.head ?? document.body};\n }\n}\n\nasync function _embed(\n el: HTMLElement | string,\n spec: VisualizationSpec,\n opts: EmbedOptions = {},\n loader: Loader\n): Promise {\n const config = opts.theme ? mergeConfig(themes[opts.theme], opts.config ?? {}) : opts.config;\n\n const actions = isBoolean(opts.actions) ? opts.actions : mergeDeep({}, DEFAULT_ACTIONS, opts.actions ?? {});\n const i18n = {...I18N, ...opts.i18n};\n\n const renderer = opts.renderer ?? 'canvas';\n const logLevel = opts.logLevel ?? vega.Warn;\n const downloadFileName = opts.downloadFileName ?? 'visualization';\n\n const element = typeof el === 'string' ? document.querySelector(el) : el;\n if (!element) {\n throw new Error(`${el} does not exist`);\n }\n\n if (opts.defaultStyle !== false) {\n // Add a default stylesheet to the head of the document.\n const ID = 'vega-embed-style';\n const {root, rootContainer} = getRoot(element);\n if (!root.getElementById(ID)) {\n const style = document.createElement('style');\n style.id = ID;\n style.innerText =\n opts.defaultStyle === undefined || opts.defaultStyle === true\n ? (embedStyle ?? '').toString()\n : opts.defaultStyle;\n rootContainer.appendChild(style);\n }\n }\n\n const mode = guessMode(spec, opts.mode);\n\n let vgSpec: VgSpec = PREPROCESSOR[mode](spec, config);\n\n if (mode === 'vega-lite') {\n if (vgSpec.$schema) {\n const parsed = schemaParser(vgSpec.$schema);\n\n if (!satisfies(VERSION.vega, `^${parsed.version.slice(1)}`)) {\n console.warn(`The compiled spec uses Vega ${parsed.version}, but current version is v${VERSION.vega}.`);\n }\n }\n }\n\n element.classList.add('vega-embed');\n if (actions) {\n element.classList.add('has-actions');\n }\n element.innerHTML = ''; // clear container\n\n let container = element;\n if (actions) {\n const chartWrapper = document.createElement('div');\n chartWrapper.classList.add(CHART_WRAPPER_CLASS);\n element.appendChild(chartWrapper);\n container = chartWrapper;\n }\n\n const patch = opts.patch;\n if (patch) {\n if (patch instanceof Function) {\n vgSpec = patch(vgSpec);\n } else {\n vgSpec = applyPatch(vgSpec, patch, true, false).newDocument;\n }\n }\n\n // Set locale. Note that this is a global setting.\n if (opts.formatLocale) {\n vega.formatLocale(opts.formatLocale);\n }\n\n if (opts.timeFormatLocale) {\n vega.timeFormatLocale(opts.timeFormatLocale);\n }\n\n const {ast} = opts;\n\n // Do not apply the config to Vega when we have already applied it to Vega-Lite.\n // This call may throw an Error if parsing fails.\n const runtime = vega.parse(vgSpec, mode === 'vega-lite' ? {} : (config as VgConfig), {ast});\n\n const view = new (opts.viewClass || vega.View)(runtime, {\n loader,\n logLevel,\n renderer,\n ...(ast ? {expr: (vega as any).expressionInterpreter} : {}),\n });\n\n view.addSignalListener('autosize', (_, autosize: Exclude) => {\n const {type} = autosize;\n if (type == 'fit-x') {\n container.classList.add('fit-x');\n container.classList.remove('fit-y');\n } else if (type == 'fit-y') {\n container.classList.remove('fit-x');\n container.classList.add('fit-y');\n } else if (type == 'fit') {\n container.classList.add('fit-x', 'fit-y');\n } else {\n container.classList.remove('fit-x', 'fit-y');\n }\n });\n\n if (opts.tooltip !== false) {\n let handler: TooltipHandler;\n if (isTooltipHandler(opts.tooltip)) {\n handler = opts.tooltip;\n } else {\n // user provided boolean true or tooltip options\n handler = new Handler(opts.tooltip === true ? {} : opts.tooltip).call;\n }\n\n view.tooltip(handler);\n }\n\n let {hover} = opts;\n\n if (hover === undefined) {\n hover = mode === 'vega';\n }\n\n if (hover) {\n const {hoverSet, updateSet} = (typeof hover === 'boolean' ? {} : hover) as Hover;\n\n view.hover(hoverSet, updateSet);\n }\n\n if (opts) {\n if (opts.width != null) {\n view.width(opts.width);\n }\n if (opts.height != null) {\n view.height(opts.height);\n }\n if (opts.padding != null) {\n view.padding(opts.padding);\n }\n }\n\n await view.initialize(container, opts.bind).runAsync();\n\n let documentClickHandler: ((this: Document, ev: MouseEvent) => void) | undefined;\n\n if (actions !== false) {\n let wrapper = element;\n\n if (opts.defaultStyle !== false) {\n const details = document.createElement('details');\n details.title = i18n.CLICK_TO_VIEW_ACTIONS;\n element.append(details);\n\n wrapper = details;\n const summary = document.createElement('summary');\n summary.innerHTML = SVG_CIRCLES;\n\n details.append(summary);\n\n documentClickHandler = (ev: MouseEvent) => {\n if (!details.contains(ev.target as any)) {\n details.removeAttribute('open');\n }\n };\n document.addEventListener('click', documentClickHandler);\n }\n\n const ctrl = document.createElement('div');\n wrapper.append(ctrl);\n ctrl.classList.add('vega-actions');\n\n // add 'Export' action\n if (actions === true || actions.export !== false) {\n for (const ext of ['svg', 'png'] as const) {\n if (actions === true || actions.export === true || (actions.export as {svg?: boolean; png?: boolean})[ext]) {\n const i18nExportAction = (i18n as {[key: string]: string})[`${ext.toUpperCase()}_ACTION`];\n const exportLink = document.createElement('a');\n\n exportLink.text = i18nExportAction;\n exportLink.href = '#';\n exportLink.target = '_blank';\n exportLink.download = `${downloadFileName}.${ext}`;\n // add link on mousedown so that it's correct when the click happens\n exportLink.addEventListener('mousedown', async function (this, e) {\n e.preventDefault();\n const url = await view.toImageURL(ext, opts.scaleFactor);\n this.href = url;\n });\n\n ctrl.append(exportLink);\n }\n }\n }\n\n // add 'View Source' action\n if (actions === true || actions.source !== false) {\n const viewSourceLink = document.createElement('a');\n\n viewSourceLink.text = i18n.SOURCE_ACTION;\n viewSourceLink.href = '#';\n viewSourceLink.addEventListener('click', function (this, e) {\n viewSource(stringify(spec), opts.sourceHeader ?? '', opts.sourceFooter ?? '', mode);\n e.preventDefault();\n });\n\n ctrl.append(viewSourceLink);\n }\n\n // add 'View Compiled' action\n if (mode === 'vega-lite' && (actions === true || actions.compiled !== false)) {\n const compileLink = document.createElement('a');\n\n compileLink.text = i18n.COMPILED_ACTION;\n compileLink.href = '#';\n compileLink.addEventListener('click', function (this, e) {\n viewSource(stringify(vgSpec), opts.sourceHeader ?? '', opts.sourceFooter ?? '', 'vega');\n e.preventDefault();\n });\n\n ctrl.append(compileLink);\n }\n\n // add 'Open in Vega Editor' action\n if (actions === true || actions.editor !== false) {\n const editorUrl = opts.editorUrl ?? 'https://vega.github.io/editor/';\n const editorLink = document.createElement('a');\n\n editorLink.text = i18n.EDITOR_ACTION;\n editorLink.href = '#';\n editorLink.addEventListener('click', function (this, e) {\n post(window, editorUrl, {\n config: config as Config,\n mode,\n renderer,\n spec: stringify(spec),\n });\n e.preventDefault();\n });\n\n ctrl.append(editorLink);\n }\n }\n\n function finalize() {\n if (documentClickHandler) {\n document.removeEventListener('click', documentClickHandler);\n }\n view.finalize();\n }\n\n return {view, spec, vgSpec, finalize};\n}\n","import {MessageData} from './types';\n\n/**\n * Open editor url in a new window, and pass a message.\n */\nexport default function (window: Window, url: string, data: MessageData) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const editor = window.open(url)!;\n const wait = 10000;\n const step = 250;\n const {origin} = new URL(url);\n // eslint-disable-next-line no-bitwise\n let count = ~~(wait / step);\n\n function listen(evt: MessageEvent) {\n if (evt.source === editor) {\n count = 0;\n window.removeEventListener('message', listen, false);\n }\n }\n window.addEventListener('message', listen, false);\n\n // send message\n // periodically resend until ack received or timeout\n function send() {\n if (count <= 0) {\n return;\n }\n editor.postMessage(data, origin);\n setTimeout(send, step);\n count -= 1;\n }\n setTimeout(send, step);\n}\n","import {View} from 'vega';\nimport embed, {EmbedOptions, VisualizationSpec} from './embed';\n\n/**\n * Create a promise to an HTML Div element with an embedded Vega-Lite or Vega visualization.\n * The element has a value property with the view. By default all actions except for the editor action are disabled.\n *\n * The main use case is in [Observable](https://observablehq.com/).\n */\nexport default async function (spec: VisualizationSpec | string, opt: EmbedOptions = {}) {\n const wrapper = document.createElement('div') as HTMLDivElement & {value: View};\n wrapper.classList.add('vega-embed-wrapper');\n\n const div = document.createElement('div');\n wrapper.appendChild(div);\n\n const actions =\n opt.actions === true || opt.actions === false\n ? opt.actions\n : {export: true, source: false, compiled: true, editor: true, ...(opt.actions ?? {})};\n\n const result = await embed(div, spec, {\n actions,\n ...(opt ?? {}),\n });\n\n wrapper.value = result.view;\n return wrapper;\n}\n","import {isString} from 'vega';\nimport pkg from '../package.json';\nimport container from './container';\nimport embed, {vega, vegaLite} from './embed';\nimport {isURL} from './util';\n\n/**\n * Returns true if the object is an HTML element.\n */\nfunction isElement(obj: any): obj is HTMLElement {\n return obj instanceof HTMLElement;\n}\n\nexport type Wrapper = typeof embed | typeof container;\n\nconst wrapper: Wrapper = (...args: any[]): any => {\n if (args.length > 1 && ((isString(args[0]) && !isURL(args[0])) || isElement(args[0]) || args.length === 3)) {\n return embed(args[0], args[1], args[2]);\n }\n\n return container(args[0], args[1]);\n};\n\n(wrapper as any).vegaLite = vegaLite;\n(wrapper as any).vl = vegaLite; // backwards compatibility\n(wrapper as any).container = container;\n(wrapper as any).embed = embed;\n(wrapper as any).vega = vega;\n(wrapper as any).default = embed;\n(wrapper as any).version = pkg.version;\n\nexport default wrapper;\n"],"names":["extendStatics","__extends","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","_hasOwnProperty","obj","key","call","_objectKeys","isArray","keys","length","k","i","push","_deepClone","JSON","parse","stringify","isInteger","str","charCode","len","charCodeAt","escapePathComponent","path","indexOf","replace","unescapePathComponent","hasUndefined","undefined","objKeys","objKeysLength","patchErrorMessageFormatter","message","args","messageParts","value","join","PatchError","_super","name","index","operation","tree","_newTarget","this","_this","Error","JsonPatchError","deepClone","objOps","add","document","newDocument","remove","removed","move","getValueByPointer","originalValue","applyOperation","op","from","copy","valueToCopy","test","_areEquals","_get","arrOps","arr","splice","pointer","getOriginalDestination","validateOperation","mutateDocument","banPrototypeModifications","validator","returnValue","split","t","existingPathFragment","validateFunction","TypeError","slice","applyPatch","patch","results","length_1","pathLen","existingPathLen","error","validate","sequence","externalValidator","e","a","arrA","arrB","operationResult","beforeDict","WeakMap","Mirror","observers","Map","ObserverInfo","callback","observer","generate","invertible","mirror","get","object","_generate","patches","temp","toJSON","newKeys","oldKeys","deleted","oldVal","newVal","root","unobserve","getMirror","observerInfo","getObserverFromMirror","set","next","dirtyCheck","fastCheck","clearTimeout","setTimeout","window","addEventListener","delete","removeObserverFromMirror","removeEventListener","tree1","tree2","assign","core","duplex","stringOrChar","jsonStringifyPrettyCompact","passedObj","options","indent","maxLength","replacer","Infinity","_stringify","currentIndent","reserved","end","items","keyPart","nextIndent","prettified","start","string","match","stringLiteral","constants","SEMVER_SPEC_VERSION","Number","MAX_SAFE_INTEGER","MAX_SAFE_COMPONENT_LENGTH","debug_1","process","env","NODE_DEBUG","console","require$$0","debug","require$$1","re","exports","module","src","R","createToken","isGlobal","RegExp","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","PRERELEASE","BUILD","FULLPLAIN","MAINVERSIONLOOSE","PRERELEASELOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","COERCE","LONETILDE","LONECARET","opts","parseOptions_1","loose","filter","reduce","numeric","compareIdentifiers","anum","bnum","identifiers","rcompareIdentifiers","MAX_LENGTH","require$$2","parseOptions","require$$3","require$$4","SemVer","version","includePrerelease","m","trim","LOOSE","FULL","raw","major","minor","prerelease","map","id","num","build","format","toString","compare","other","compareMain","comparePre","compareBuild","inc","release","identifier","isNaN","semver","parse_1","er","valid_1","v","clean_1","s","inc_1","compare_1","eq_1","eq","diff_1","version1","version2","v1","v2","hasPre","prefix","defaultResult","major_1","minor_1","patch_1","prerelease_1","parsed","rcompare_1","compareLoose_1","compareBuild_1","versionA","versionB","sort_1","list","sort","rsort_1","gt_1","lt_1","neq_1","gte_1","lte_1","neq","gt","gte","lt","lte","require$$5","cmp_1","coerce_1","String","rtl","COERCERTL","exec","lastIndex","yallist","Yallist","self","tail","head","forEach","item","arguments","l","insert","node","inserted","Node","prev","unshift","removeNode","unshiftNode","pushNode","pop","res","shift","fn","thisp","walker","forEachReverse","n","getReverse","mapReverse","initial","acc","reduceReverse","toArray","toArrayReverse","to","ret","sliceReverse","deleteCount","nodes","reverse","Symbol","iterator","MAX","LENGTH","LENGTH_CALCULATOR","ALLOW_STALE","MAX_AGE","DISPOSE","NO_DISPOSE_ON_SET","LRU_LIST","CACHE","UPDATE_AGE_ON_GET","naiveLength","doUse","hit","isStale","del","now","Date","maxAge","diff","Entry","forEachStep","lruCache","max","lc","stale","dispose","noDisposeOnSet","updateAgeOnGet","reset","mL","allowStale","mA","lC","rforEach","values","dump","h","dumpLru","has","peek","load","expiresAt","prune","Range","range","Comparator","parseRange","c","first","isNullSet","isAny","comps","memoKey","cached","cache","hr","HYPHENRANGELOOSE","HYPHENRANGE","hyphenReplace","COMPARATORTRIM","comparatorTrimReplace","TILDETRIM","tildeTrimReplace","CARETTRIM","caretTrimReplace","compRe","COMPARATORLOOSE","COMPARATOR","rangeList","comp","parseComparator","replaceGTE0","rangeMap","size","result","intersects","some","thisComparators","isSatisfiable","rangeComparators","every","thisComparator","rangeComparator","testSet","comparators","remainingComparators","testComparator","otherComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","toLowerCase","replaceTilde","r","TILDELOOSE","TILDE","_","M","pr","replaceCaret","CARETLOOSE","CARET","z","replaceXRange","XRANGELOOSE","XRANGE","gtlt","xM","xm","xp","anyX","STAR","GTE0PRE","GTE0","incPr","$0","fM","fm","fp","fpr","fb","tM","tm","tp","tpr","tb","ANY","allowed","operator","cmp","sameDirectionIncreasing","sameDirectionDecreasing","sameSemVer","differentDirectionsInclusive","oppositeDirectionsLessThan","oppositeDirectionsGreaterThan","comparator","satisfies_1","toComparators_1","maxSatisfying_1","versions","maxSV","rangeObj","minSatisfying_1","min","minSV","minVersion_1","minver","setMin","compver","valid","satisfies","require$$6","require$$7","outside_1","hilo","gtfn","ltefn","ltfn","ecomp","high","low","outside","gtr_1","ltr_1","intersects_1","r1","r2","simpleSubset","sub","dom","eqSet","Set","gtltComp","higher","lower","hasDomLT","hasDomGT","higherGT","lowerLT","needDomLTPre","needDomGTPre","subset_1","sawNonNull","OUTER","simpleSub","simpleDom","isSub","internalRe","tokens","clean","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","rcompare","require$$14","compareLoose","require$$15","require$$16","require$$17","rsort","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","coerce","require$$26","require$$27","require$$28","require$$29","toComparators","require$$30","maxSatisfying","require$$31","minSatisfying","require$$32","minVersion","require$$33","validRange","require$$34","require$$35","gtr","require$$36","ltr","require$$37","require$$38","simplifyRange","ranges","simplified","original","subset","require$$40","url","library","lightColor","darkTheme","background","title","color","subtitleColor","style","fill","axis","domainColor","gridColor","tickColor","markColor","excelTheme","arc","area","line","stroke","strokeWidth","rect","shape","symbol","bandPosition","grid","gridOpacity","gridWidth","labelPadding","tickSize","tickWidth","axisBand","tickExtra","legend","labelBaseline","labelFontSize","symbolSize","symbolType","category","markColor$1","axisColor","backgroundColor","blackTitle","fiveThirtyEightTheme","labelColor","titleColor","titleFontSize","titlePadding","group","padding","diverging","heatmap","point","filled","bar","binSpacing","anchor","fontSize","fontWeight","offset","markColor$2","ggplot2Theme","domain","titleFontWeight","labelFont","markColor$3","titleFont","colorSchemes","latimesTheme","font","labelFontWeight","axisX","labelAngle","axisY","maxExtent","minExtent","titleAlign","titleAngle","titleX","titleY","ordinal","ramp","markColor$4","axisColor$1","quartzTheme","domainWidth","markColor$5","voxTheme","gridDash","markColor$6","axisColor$2","labelFont$1","colorSchemes$1","urbanInstituteTheme","ticks","orient","view","trail","text","align","markColor$7","gridColor$1","defaultFont","googlechartsTheme","circle","top","right","bottom","left","dy","version$1","accessor","fields","fname","getter","get1","getN","field","opt","j","q","substring","splitAccessPath","isObject","defaultStyle","EL_ID","DEFAULT_OPTIONS","offsetX","offsetY","styleId","theme","disableDefaultStyle","sanitize","maxDepth","formatValue","valueToHtml","content","_a","image","rest","getOwnPropertySymbols","propertyIsEnumerable","__rest","val","stack","pos","Handler","elementId","el","tooltipHandler","bind","getElementById","createElement","setAttribute","innerHTML","createDefaultStyle","childNodes","insertBefore","appendChild","handler","event","classList","body","fullscreenElement","x","y","tooltipBox","clientX","width","innerWidth","clientY","height","innerHeight","calculatePosition","getBoundingClientRect","mergeDeep","dest","deepMerge_","property","writeConfig","startsWith","search","substr","vega","vegaImport","vegaLite","vegaLiteImport","w","_w$vl","compile","DEFAULT_ACTIONS","export","svg","png","source","compiled","editor","I18N","CLICK_TO_VIEW_ACTIONS","COMPILED_ACTION","EDITOR_ACTION","PNG_ACTION","SOURCE_ACTION","SVG_ACTION","NAMES","VERSION","PREPROCESSOR","vgSpec","vlSpec","config","spec","SVG_CIRCLES","CHART_WRAPPER_CLASS","viewSource","sourceHeader","sourceFooter","mode","header","footer","win","open","write","createLoader","o","loader","embedOptionsFromUsermeta","parsedSpec","usermeta","async","embed","isString","usermetaLoader","usermetaOpts","loadOpts","parsedOpts","mergedOpts","mergeConfig","themes","actions","isBoolean","i18n","renderer","logLevel","Warn","downloadFileName","element","querySelector","ID","rootContainer","possibleRoot","getRootNode","ShadowRoot","getRoot","innerText","providedMode","$schema","schemaParser","warn","guessMode","container","chartWrapper","Function","formatLocale","timeFormatLocale","ast","runtime","viewClass","View","expr","expressionInterpreter","addSignalListener","autosize","type","tooltip","documentClickHandler","hover","hoverSet","updateSet","initialize","runAsync","wrapper","details","append","summary","ev","contains","target","removeAttribute","ctrl","ext","i18nExportAction","toUpperCase","exportLink","href","download","preventDefault","toImageURL","scaleFactor","viewSourceLink","compileLink","editorUrl","editorLink","data","origin","URL","count","listen","evt","send","postMessage","post","finalize","_embed","div","HTMLElement","vl","default","pkg"],"mappings":"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"} \ No newline at end of file diff --git a/src/citationnet/static/vega-lite.min.js b/src/citationnet/static/vega-lite.min.js new file mode 100644 index 0000000..1f24e64 --- /dev/null +++ b/src/citationnet/static/vega-lite.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("vega-util"),require("vega")):"function"==typeof define&&define.amd?define(["exports","vega-util","vega"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).vegaLite={},e.vega,e.vega)}(this,(function(e,t,n){"use strict";var i="5.1.1";Array.prototype.flat||Object.defineProperty(Array.prototype,"flat",{configurable:!0,value:function e(){var t=isNaN(arguments[0])?1:Number(arguments[0]);return t?Array.prototype.reduce.call(this,(function(n,i){return Array.isArray(i)?n.push.apply(n,e.call(i,t-1)):n.push(i),n}),[]):Array.prototype.slice.call(this)},writable:!0}),Array.prototype.flatMap||Object.defineProperty(Array.prototype,"flatMap",{configurable:!0,value:function(e){return Array.prototype.map.apply(this,arguments).flat()},writable:!0});var r={exports:{}};!function(e){var t=function(){function e(e,t){return null!=t&&e instanceof t}var t,n,i;try{t=Map}catch(e){t=function(){}}try{n=Set}catch(e){n=function(){}}try{i=Promise}catch(e){i=function(){}}function r(o,s,u,l,c){"object"==typeof s&&(u=s.depth,l=s.prototype,c=s.includeNonEnumerable,s=s.circular);var f=[],d=[],p="undefined"!=typeof Buffer;return void 0===s&&(s=!0),void 0===u&&(u=1/0),function o(u,m){if(null===u)return null;if(0===m)return u;var g,h;if("object"!=typeof u)return u;if(e(u,t))g=new t;else if(e(u,n))g=new n;else if(e(u,i))g=new i((function(e,t){u.then((function(t){e(o(t,m-1))}),(function(e){t(o(e,m-1))}))}));else if(r.__isArray(u))g=[];else if(r.__isRegExp(u))g=new RegExp(u.source,a(u)),u.lastIndex&&(g.lastIndex=u.lastIndex);else if(r.__isDate(u))g=new Date(u.getTime());else{if(p&&Buffer.isBuffer(u))return g=Buffer.allocUnsafe?Buffer.allocUnsafe(u.length):new Buffer(u.length),u.copy(g),g;e(u,Error)?g=Object.create(u):void 0===l?(h=Object.getPrototypeOf(u),g=Object.create(h)):(g=Object.create(l),h=l)}if(s){var y=f.indexOf(u);if(-1!=y)return d[y];f.push(u),d.push(g)}for(var v in e(u,t)&&u.forEach((function(e,t){var n=o(t,m-1),i=o(e,m-1);g.set(n,i)})),e(u,n)&&u.forEach((function(e){var t=o(e,m-1);g.add(t)})),u){var b;h&&(b=Object.getOwnPropertyDescriptor(h,v)),b&&null==b.set||(g[v]=o(u[v],m-1))}if(Object.getOwnPropertySymbols){var x=Object.getOwnPropertySymbols(u);for(v=0;vc(e,t)))}:a(e)?{or:e.or.map((e=>c(e,t)))}:t(e)}const f=function e(t,n){if(t===n)return!0;if(t&&n&&"object"==typeof t&&"object"==typeof n){if(t.constructor!==n.constructor)return!1;var i,r,o;if(Array.isArray(t)){if((i=t.length)!=n.length)return!1;for(r=i;0!=r--;)if(!e(t[r],n[r]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if((i=(o=Object.keys(t)).length)!==Object.keys(n).length)return!1;for(r=i;0!=r--;)if(!Object.prototype.hasOwnProperty.call(n,o[r]))return!1;for(r=i;0!=r--;){var a=o[r];if(!e(t[a],n[a]))return!1}return!0}return t!=t&&n!=n},d=r.exports;function p(e,n){const i={};for(const r of n)t.hasOwnProperty(e,r)&&(i[r]=e[r]);return i}function m(e,t){const n={...e};for(const e of t)delete n[e];return n}Set.prototype.toJSON=function(){return`Set(${[...this].map((e=>o(e))).join(",")})`};const g=o;function h(e){if(t.isNumber(e))return e;const n=t.isString(e)?e:o(e);if(n.length<250)return n;let i=0;for(let e=0;e0===t?e:`[${e}]`)),r=e.map(((t,n)=>e.slice(0,n+1).join("")));for(const e of r)n.add(e)}return n}function C(e,t){return void 0===e||void 0===t||$(k(e),k(t))}function S(e){return 0===E(e).length}const E=Object.keys,B=Object.values,_=Object.entries;function z(e){return!0===e||!1===e}function O(e){const t=e.replace(/\W/g,"_");return(e.match(/^\d+/)?"_":"")+t}function P(e,t){return u(e)?`!(${P(e.not,t)})`:s(e)?`(${e.and.map((e=>P(e,t))).join(") && (")})`:a(e)?`(${e.or.map((e=>P(e,t))).join(") || (")})`:t(e)}function j(e,t){if(0===t.length)return!0;const n=t.shift();return n in e&&j(e[n],t)&&delete e[n],S(e)}function N(e){return e.charAt(0).toUpperCase()+e.substr(1)}function M(e,n="datum"){const i=t.splitAccessPath(e),r=[];for(let e=1;e<=i.length;e++){const o=`[${i.slice(0,e).map(t.stringValue).join("][")}]`;r.push(`${n}${o}`)}return r.join(" && ")}function T(e,n="datum"){return`${n}[${t.stringValue(t.splitAccessPath(e).join("."))}]`}function L(e){return e.replace(/(\[|\]|\.|'|")/g,"\\$1")}function q(e){return`${t.splitAccessPath(e).map(L).join("\\.")}`}function R(e,t,n){return e.replace(new RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"g"),n)}function W(e){return`${t.splitAccessPath(e).join(".")}`}function U(e){return e?t.splitAccessPath(e).length:0}function H(...e){for(const t of e)if(void 0!==t)return t}let I=42;function V(e){const t=++I;return e?String(e)+t:t}function G(e){return Y(e)?e:`__${e}`}function Y(e){return e.startsWith("__")}function X(e){if(void 0!==e)return(e%360+360)%360}function J(e){return!!t.isNumber(e)||!isNaN(e)&&!isNaN(parseFloat(e))}const Q="row",K="column",Z="facet",ee="x",te="y",ne="x2",ie="y2",re="radius",oe="radius2",ae="theta",se="theta2",ue="latitude",le="longitude",ce="latitude2",fe="longitude2",de="color",pe="fill",me="stroke",ge="shape",he="size",ye="angle",ve="opacity",be="fillOpacity",xe="strokeOpacity",we="strokeWidth",Ae="strokeDash",De="text",Fe="order",$e="detail",ke="key",Ce="tooltip",Se="href",Ee="url",Be="description",_e={theta:1,theta2:1,radius:1,radius2:1};function ze(e){return e in _e}const Oe={longitude:1,longitude2:1,latitude:1,latitude2:1};const Pe=E(Oe),je={x:1,y:1,x2:1,y2:1,..._e,...Oe,color:1,fill:1,stroke:1,opacity:1,fillOpacity:1,strokeOpacity:1,strokeWidth:1,strokeDash:1,size:1,angle:1,shape:1,order:1,text:1,detail:1,key:1,tooltip:1,href:1,url:1,description:1};function Ne(e){return e===de||e===pe||e===me}const Me={row:1,column:1,facet:1},Te=E(Me),Le={...je,...Me},qe=E(Le),{order:Re,detail:We,tooltip:Ue,...He}=Le,{row:Ie,column:Ve,facet:Ge,...Ye}=He;function Xe(e){return!!Le[e]}const Je=[ne,ie,ce,fe,se,oe];function Qe(e){return Ke(e)!==e}function Ke(e){switch(e){case ne:return ee;case ie:return te;case ce:return ue;case fe:return le;case se:return ae;case oe:return re}return e}function Ze(e){if(ze(e))switch(e){case ae:return"startAngle";case se:return"endAngle";case re:return"outerRadius";case oe:return"innerRadius"}return e}function et(e){switch(e){case ee:return ne;case te:return ie;case ue:return ce;case le:return fe;case ae:return se;case re:return oe}}function tt(e){switch(e){case ee:case ne:return"width";case te:case ie:return"height"}}const{x:nt,y:it,x2:rt,y2:ot,latitude:at,longitude:st,latitude2:ut,longitude2:lt,theta:ct,theta2:ft,radius:dt,radius2:pt,...mt}=je,gt=E(mt),ht={x:1,y:1},yt=E(ht);function vt(e){return e in ht}const bt={theta:1,radius:1},xt=E(bt);function wt(e){return"width"===e?ee:te}const{text:At,tooltip:Dt,href:Ft,url:$t,description:kt,detail:Ct,key:St,order:Et,...Bt}=mt,_t=E(Bt);const zt={...ht,...bt,...Bt},Ot=E(zt);function Pt(e){return!!zt[e]}function jt(e,t){return function(e){switch(e){case de:case pe:case me:case Be:case $e:case ke:case Ce:case Se:case Fe:case ve:case be:case xe:case we:case Z:case Q:case K:return Nt;case ee:case te:case ue:case le:return Tt;case ne:case ie:case ce:case fe:return{area:"always",bar:"always",image:"always",rect:"always",rule:"always",circle:"binned",point:"binned",square:"binned",tick:"binned",line:"binned",trail:"binned"};case he:return{point:"always",tick:"always",rule:"always",circle:"always",square:"always",bar:"always",text:"always",line:"always",trail:"always"};case Ae:return{line:"always",point:"always",tick:"always",rule:"always",circle:"always",square:"always",bar:"always",geoshape:"always"};case ge:return{point:"always",geoshape:"always"};case De:return{text:"always"};case ye:return{point:"always",square:"always",text:"always"};case Ee:return{image:"always"};case ae:case re:return{text:"always",arc:"always"};case se:case oe:return{arc:"always"}}}(e)[t]}const Nt={arc:"always",area:"always",bar:"always",circle:"always",geoshape:"always",image:"always",line:"always",rule:"always",point:"always",rect:"always",square:"always",trail:"always",text:"always",tick:"always"},{geoshape:Mt,...Tt}=Nt;function Lt(e){switch(e){case ee:case te:case ae:case re:case he:case ye:case we:case ve:case be:case xe:case ne:case ie:case se:case oe:return;case Z:case Q:case K:case ge:case Ae:case De:case Ce:case Se:case Ee:case Be:return"discrete";case de:case pe:case me:return"flexible";case ue:case le:case ce:case fe:case $e:case ke:case Fe:return}}const qt={argmax:1,argmin:1,average:1,count:1,distinct:1,product:1,max:1,mean:1,median:1,min:1,missing:1,q1:1,q3:1,ci0:1,ci1:1,stderr:1,stdev:1,stdevp:1,sum:1,valid:1,values:1,variance:1,variancep:1},Rt={count:1,min:1,max:1};function Wt(e){return!!e&&!!e.argmin}function Ut(e){return!!e&&!!e.argmax}function Ht(e){return t.isString(e)&&!!qt[e]}const It=["count","valid","missing","distinct"];function Vt(e){return t.isString(e)&&v(It,e)}const Gt=["count","sum","distinct","valid","missing"],Yt=t.toSet(["mean","average","median","q1","q3","min","max"]);function Xt(e){return t.isBoolean(e)&&(e=ua(e,void 0)),"bin"+E(e).map((t=>Zt(e[t])?O(`_${t}_${_(e[t])}`):O(`_${t}_${e[t]}`))).join("")}function Jt(e){return!0===e||Kt(e)&&!e.binned}function Qt(e){return"binned"===e||Kt(e)&&!0===e.binned}function Kt(e){return t.isObject(e)}function Zt(e){return null==e?void 0:e.param}function en(e){switch(e){case Q:case K:case he:case de:case pe:case me:case we:case ve:case be:case xe:case ge:return 6;case Ae:return 4;default:return 10}}function tn(e){return e&&!!e.expr}function nn(e){const t=E(e||{}),n={};for(const i of t)n[i]=pn(e[i]);return n}function rn(e){const{anchor:t,frame:n,offset:i,orient:r,angle:o,limit:a,color:s,subtitleColor:u,subtitleFont:l,subtitleFontSize:c,subtitleFontStyle:f,subtitleFontWeight:d,subtitleLineHeight:m,subtitlePadding:g,...h}=e,y={...t?{anchor:t}:{},...n?{frame:n}:{},...i?{offset:i}:{},...r?{orient:r}:{},...void 0!==o?{angle:o}:{},...void 0!==a?{limit:a}:{}},v={...u?{subtitleColor:u}:{},...l?{subtitleFont:l}:{},...c?{subtitleFontSize:c}:{},...f?{subtitleFontStyle:f}:{},...d?{subtitleFontWeight:d}:{},...m?{subtitleLineHeight:m}:{},...g?{subtitlePadding:g}:{}};return{titleMarkConfig:{...h,...s?{fill:s}:{}},subtitleMarkConfig:p(e,["align","baseline","dx","dy","limit"]),nonMarkTitleProperties:y,subtitle:v}}function on(e){return t.isString(e)||t.isArray(e)&&t.isString(e[0])}function an(e){return e&&!!e.signal}function sn(e){return!!e.step}function un(e){return!t.isArray(e)&&("field"in e&&"data"in e)}const ln=E({aria:1,description:1,ariaRole:1,ariaRoleDescription:1,blend:1,opacity:1,fill:1,fillOpacity:1,stroke:1,strokeCap:1,strokeWidth:1,strokeOpacity:1,strokeDash:1,strokeDashOffset:1,strokeJoin:1,strokeOffset:1,strokeMiterLimit:1,startAngle:1,endAngle:1,padAngle:1,innerRadius:1,outerRadius:1,size:1,shape:1,interpolate:1,tension:1,orient:1,align:1,baseline:1,text:1,dir:1,dx:1,dy:1,ellipsis:1,limit:1,radius:1,theta:1,angle:1,font:1,fontSize:1,fontWeight:1,fontStyle:1,lineBreak:1,lineHeight:1,cursor:1,href:1,tooltip:1,cornerRadius:1,cornerRadiusTopLeft:1,cornerRadiusTopRight:1,cornerRadiusBottomLeft:1,cornerRadiusBottomRight:1,aspect:1,width:1,height:1,url:1,smooth:1}),cn={arc:1,area:1,group:1,image:1,line:1,path:1,rect:1,rule:1,shape:1,symbol:1,text:1,trail:1},fn=["cornerRadius","cornerRadiusTopLeft","cornerRadiusTopRight","cornerRadiusBottomLeft","cornerRadiusBottomRight"];function dn(e){const n=t.isArray(e.condition)?e.condition.map(mn):mn(e.condition);return{...pn(e),condition:n}}function pn(e){if(tn(e)){const{expr:t,...n}=e;return{signal:t,...n}}return e}function mn(e){if(tn(e)){const{expr:t,...n}=e;return{signal:t,...n}}return e}function gn(e){if(tn(e)){const{expr:t,...n}=e;return{signal:t,...n}}return an(e)?e:void 0!==e?{value:e}:void 0}function hn(e){return an(e)?e.signal:t.stringValue(e.value)}function yn(e){return an(e)?e.signal:null==e?null:t.stringValue(e)}function vn(e,t,n){for(const i of n){const n=wn(i,t.markDef,t.config);void 0!==n&&(e[i]=gn(n))}return e}function bn(e){return[].concat(e.type,e.style??[])}function xn(e,t,n,i={}){const{vgChannel:r,ignoreVgConfig:o}=i;return r&&void 0!==t[r]?t[r]:void 0!==t[e]?t[e]:!o||r&&r!==e?wn(e,t,n,i):void 0}function wn(e,t,n,{vgChannel:i}={}){return H(i?An(e,t,n.style):void 0,An(e,t,n.style),i?n[t.type][i]:void 0,n[t.type][e],i?n.mark[i]:n.mark[e])}function An(e,t,n){return Dn(e,bn(t),n)}function Dn(e,n,i){let r;n=t.array(n);for(const t of n){const n=i[t];n&&void 0!==n[e]&&(r=n[e])}return r}function Fn(e,n){return t.array(e).reduce(((e,t)=>(e.field.push(Yo(t,n)),e.order.push(t.sort??"ascending"),e)),{field:[],order:[]})}function $n(e,t){const n=[...e];return t.forEach((e=>{for(const t of n)if(f(t,e))return;n.push(e)})),n}function kn(e,n){return f(e,n)||!n?e:e?[...t.array(e),...t.array(n)].join(", "):n}function Cn(e,t){const n=e.value,i=t.value;if(null==n||null===i)return{explicit:e.explicit,value:null};if((on(n)||an(n))&&(on(i)||an(i)))return{explicit:e.explicit,value:kn(n,i)};if(on(n)||an(n))return{explicit:e.explicit,value:n};if(on(i)||an(i))return{explicit:e.explicit,value:i};if(!(on(n)||an(n)||on(i)||an(i)))return{explicit:e.explicit,value:$n(n,i)};throw new Error("It should never reach here")}function Sn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function En(e,t,n){return function(e,t,n){if(t.set)t.set.call(e,n);else{if(!t.writable)throw new TypeError("attempted to set read only private field");t.value=n}}(e,Bn(e,t,"set"),n),n}function Bn(e,t,n){if(!t.has(e))throw new TypeError("attempted to "+n+" private field on non-instance");return t.get(e)}function _n(e){return`Invalid specification ${g(e)}. Make sure the specification includes at least one of the following properties: "mark", "layer", "facet", "hconcat", "vconcat", "concat", or "repeat".`}const zn='Autosize "fit" only works for single views and layered views.';function On(e){return`${"width"==e?"Width":"Height"} "container" only works for single views and layered views.`}function Pn(e){return`${"width"==e?"Width":"Height"} "container" only works well with autosize "fit" or "fit-${"width"==e?"x":"y"}".`}function jn(e){return e?`Dropping "fit-${e}" because spec has discrete ${tt(e)}.`:'Dropping "fit" because spec has discrete size.'}function Nn(e){return`Unknown field for ${e}. Cannot calculate view size.`}function Mn(e){return`Cannot project a selection on encoding channel "${e}", which has no field.`}function Tn(e,t){return`Cannot project a selection on encoding channel "${e}" as it uses an aggregate function ("${t}").`}function Ln(e){return`Selection not supported for ${e} yet.`}const qn="The same selection must be used to override scale domains in a layered view.";function Rn(e){return`The "columns" property cannot be used when "${e}" has nested row/column.`}function Wn(e,t,n){return`An ancestor parsed field "${e}" as ${n} but a child wants to parse the field as ${t}.`}function Un(e){return`Config.customFormatTypes is not true, thus custom format type and format for channel ${e} are dropped.`}function Hn(e){return`Invalid field type "${e}".`}function In(e,t){const{fill:n,stroke:i}=t;return`Dropping color ${e} as the plot also has ${n&&i?"fill and stroke":n?"fill":"stroke"}.`}function Vn(e,t){return`Dropping ${g(e)} from channel "${t}" since it does not contain any data field, datum, value, or signal.`}function Gn(e,t,n){return`${e} dropped as it is incompatible with "${t}"${n?` when ${n}`:""}.`}function Yn(e){return`${e} encoding should be discrete (ordinal / nominal / binned).`}function Xn(e){return`${e} encoding should be discrete (ordinal / nominal / binned) or use a discretizing scale (e.g. threshold).`}function Jn(e,t){return`Using discrete channel "${e}" to encode "${t}" field can be misleading as it does not encode ${"ordinal"===t?"order":"magnitude"}.`}function Qn(e){return`Using unaggregated domain with raw field has no effect (${g(e)}).`}function Kn(e){return`Unaggregated domain not applicable for "${e}" since it produces values outside the origin domain of the source data.`}function Zn(e){return`Unaggregated domain is currently unsupported for log scale (${g(e)}).`}function ei(e,t,n){return`${n}-scale's "${t}" is dropped as it does not work with ${e} scale.`}function ti(e){return`The step for "${e}" is dropped because the ${"width"===e?"x":"y"} is continuous.`}const ni="Domains that should be unioned has conflicting sort properties. Sort will be set to true.";function ii(e,t){return`Invalid ${e}: ${g(t)}.`}function ri(e){return`1D error band does not support ${e}.`}function oi(e){return`Channel ${e} is required for "binned" bin.`}const ai=t.logger(t.Warn);let si=ai;function ui(...e){si.warn(...e)}function li(e){if(e&&t.isObject(e))for(const t of yi)if(t in e)return!0;return!1}const ci=["january","february","march","april","may","june","july","august","september","october","november","december"],fi=ci.map((e=>e.substr(0,3))),di=["sunday","monday","tuesday","wednesday","thursday","friday","saturday"],pi=di.map((e=>e.substr(0,3)));function mi(e,n){const i=[];if(n&&void 0!==e.day&&E(e).length>1&&(ui(function(e){return`Dropping day from datetime ${g(e)} as day cannot be combined with other units.`}(e)),delete(e=d(e)).day),void 0!==e.year?i.push(e.year):i.push(2012),void 0!==e.month){const r=n?function(e){if(J(e)&&(e=+e),t.isNumber(e))return e-1;{const t=e.toLowerCase(),n=ci.indexOf(t);if(-1!==n)return n;const i=t.substr(0,3),r=fi.indexOf(i);if(-1!==r)return r;throw new Error(ii("month",e))}}(e.month):e.month;i.push(r)}else if(void 0!==e.quarter){const r=n?function(e){if(J(e)&&(e=+e),t.isNumber(e))return e>4&&ui(ii("quarter",e)),e-1;throw new Error(ii("quarter",e))}(e.quarter):e.quarter;i.push(t.isNumber(r)?3*r:`${r}*3`)}else i.push(0);if(void 0!==e.date)i.push(e.date);else if(void 0!==e.day){const r=n?function(e){if(J(e)&&(e=+e),t.isNumber(e))return e%7;{const t=e.toLowerCase(),n=di.indexOf(t);if(-1!==n)return n;const i=t.substr(0,3),r=pi.indexOf(i);if(-1!==r)return r;throw new Error(ii("day",e))}}(e.day):e.day;i.push(t.isNumber(r)?r+1:`${r}+1`)}else i.push(1);for(const t of["hours","minutes","seconds","milliseconds"]){const n=e[t];i.push(void 0===n?0:n)}return i}function gi(e){const t=mi(e,!0).join(", ");return e.utc?`utc(${t})`:`datetime(${t})`}const hi={year:1,quarter:1,month:1,week:1,day:1,dayofyear:1,date:1,hours:1,minutes:1,seconds:1,milliseconds:1},yi=E(hi);function vi(e){return e.startsWith("utc")}const bi={"year-month":"%b %Y ","year-month-date":"%b %d, %Y "};function xi(e){return yi.filter((t=>wi(e,t)))}function wi(e,t){const n=e.indexOf(t);return!(n<0)&&(!(n>0&&"seconds"===t&&"i"===e.charAt(n-1))&&(!(e.length>n+3&&"day"===t&&"o"===e.charAt(n+3))&&!(n>0&&"year"===t&&"f"===e.charAt(n-1))))}function Ai(e,t,{end:n}={end:!1}){const i=M(t),r=vi(e)?"utc":"";let o;const a={};for(const t of yi)wi(e,t)&&(a[t]="quarter"===(s=t)?`(${r}quarter(${i})-1)`:`${r}${s}(${i})`,o=t);var s;return n&&(a[o]+="+1"),function(e){const t=mi(e,!1).join(", ");return e.utc?`utc(${t})`:`datetime(${t})`}(a)}function Di(e){if(!e)return;const t=xi(e);return`timeUnitSpecifier(${g(t)}, ${g(bi)})`}function Fi(e){if(!e)return;let n;return t.isString(e)?n={unit:e}:t.isObject(e)&&(n={...e,...e.unit?{unit:e.unit}:{}}),vi(n.unit)&&(n.utc=!0,n.unit=n.unit.substr(3)),n}function $i(e){return e&&!!e.field&&void 0!==e.equal}function ki(e){return e&&!!e.field&&void 0!==e.lt}function Ci(e){return e&&!!e.field&&void 0!==e.lte}function Si(e){return e&&!!e.field&&void 0!==e.gt}function Ei(e){return e&&!!e.field&&void 0!==e.gte}function Bi(e){if(null!=e&&e.field){if(t.isArray(e.range)&&2===e.range.length)return!0;if(an(e.range))return!0}return!1}function _i(e){return e&&!!e.field&&(t.isArray(e.oneOf)||t.isArray(e.in))}function zi(e){return _i(e)||$i(e)||Bi(e)||ki(e)||Si(e)||Ci(e)||Ei(e)}function Oi(e,t){return fa(e,{timeUnit:t,wrapTime:!0})}function Pi(e,t=!0){var n;const{field:i}=e,r=null===(n=Fi(e.timeUnit))||void 0===n?void 0:n.unit,o=r?`time(${Ai(r,i)})`:Yo(e,{expr:"datum"});if($i(e))return`${o}===${Oi(e.equal,r)}`;if(ki(e)){return`${o}<${Oi(e.lt,r)}`}if(Si(e)){return`${o}>${Oi(e.gt,r)}`}if(Ci(e)){return`${o}<=${Oi(e.lte,r)}`}if(Ei(e)){return`${o}>=${Oi(e.gte,r)}`}if(_i(e))return`indexof([${function(e,t){return e.map((e=>Oi(e,t)))}(e.oneOf,r).join(",")}], ${o}) !== -1`;if(function(e){return e&&!!e.field&&void 0!==e.valid}(e))return ji(o,e.valid);if(Bi(e)){const{range:n}=e,i=an(n)?{signal:`${n.signal}[0]`}:n[0],a=an(n)?{signal:`${n.signal}[1]`}:n[1];if(null!==i&&null!==a&&t)return"inrange("+o+", ["+Oi(i,r)+", "+Oi(a,r)+"])";const s=[];return null!==i&&s.push(`${o} >= ${Oi(i,r)}`),null!==a&&s.push(`${o} <= ${Oi(a,r)}`),s.length>0?s.join(" && "):"true"}throw new Error(`Invalid field predicate: ${g(e)}`)}function ji(e,t=!0){return t?`isValid(${e}) && isFinite(+${e})`:`!isValid(${e}) || !isFinite(+${e})`}function Ni(e){var t;return zi(e)&&e.timeUnit?{...e,timeUnit:null===(t=Fi(e.timeUnit))||void 0===t?void 0:t.unit}:e}const Mi="quantitative",Ti="ordinal",Li="temporal",qi="nominal",Ri="geojson";const Wi="linear",Ui="log",Hi="pow",Ii="sqrt",Vi="symlog",Gi="time",Yi="utc",Xi="quantile",Ji="quantize",Qi="threshold",Ki="point",Zi="band",er={linear:"numeric",log:"numeric",pow:"numeric",sqrt:"numeric",symlog:"numeric",identity:"numeric",sequential:"numeric",time:"time",utc:"time",ordinal:"ordinal","bin-ordinal":"bin-ordinal",point:"ordinal-position",band:"ordinal-position",quantile:"discretizing",quantize:"discretizing",threshold:"discretizing"};function tr(e,t){const n=er[e],i=er[t];return n===i||"ordinal-position"===n&&"time"===i||"ordinal-position"===i&&"time"===n}const nr={linear:0,log:1,pow:1,sqrt:1,symlog:1,identity:1,sequential:1,time:0,utc:0,point:10,band:11,ordinal:0,"bin-ordinal":0,quantile:0,quantize:0,threshold:0};function ir(e){return nr[e]}const rr=["linear","log","pow","sqrt","symlog","time","utc"],or=t.toSet(rr),ar=t.toSet(["linear","log","pow","sqrt","symlog"]);const sr=t.toSet(["quantile","quantize","threshold"]),ur=rr.concat(["quantile","quantize","threshold","sequential","identity"]),lr=t.toSet(ur),cr=t.toSet(["ordinal","bin-ordinal","point","band"]);function fr(e){return e in cr}function dr(e){return e in lr}function pr(e){return e in or}function mr(e){return e in sr}function gr(e){return null==e?void 0:e.param}const{type:hr,domain:yr,range:vr,rangeMax:br,rangeMin:xr,scheme:wr,...Ar}={type:1,domain:1,domainMax:1,domainMin:1,domainMid:1,align:1,range:1,rangeMax:1,rangeMin:1,scheme:1,bins:1,reverse:1,round:1,clamp:1,nice:1,base:1,exponent:1,constant:1,interpolate:1,zero:1,padding:1,paddingInner:1,paddingOuter:1},Dr=E(Ar);function Fr(e,t){switch(t){case"type":case"domain":case"reverse":case"range":return!0;case"scheme":case"interpolate":return!["point","band","identity"].includes(e);case"bins":return!["point","band","identity","ordinal"].includes(e);case"round":return pr(e)||"band"===e||"point"===e;case"padding":case"rangeMin":case"rangeMax":return pr(e)||["point","band"].includes(e);case"paddingOuter":case"align":return["point","band"].includes(e);case"paddingInner":return"band"===e;case"domainMax":case"domainMid":case"domainMin":case"clamp":return pr(e);case"nice":return pr(e)||"quantize"===e||"threshold"===e;case"exponent":return"pow"===e;case"base":return"log"===e;case"constant":return"symlog"===e;case"zero":return dr(e)&&!v(["log","time","utc","threshold","quantile"],e)}}function $r(e,t){switch(t){case"interpolate":case"scheme":case"domainMid":return Ne(e)?void 0:`Cannot use the scale property "${e}" with non-color channel.`;case"align":case"type":case"bins":case"domain":case"domainMax":case"domainMin":case"range":case"base":case"exponent":case"constant":case"nice":case"padding":case"paddingInner":case"paddingOuter":case"rangeMax":case"rangeMin":case"reverse":case"round":case"clamp":case"zero":return}}const kr={arc:"arc",area:"area",bar:"bar",image:"image",line:"line",point:"point",rect:"rect",rule:"rule",text:"text",tick:"tick",trail:"trail",circle:"circle",square:"square",geoshape:"geoshape"},Cr=kr.arc,Sr=kr.area,Er=kr.bar,Br=kr.image,_r=kr.line,zr=kr.point,Or=kr.rect,Pr=kr.rule,jr=kr.text,Nr=kr.tick,Mr=kr.trail,Tr=kr.circle,Lr=kr.square,qr=kr.geoshape;function Rr(e){return["line","area","trail"].includes(e)}function Wr(e){return["rect","bar","image","arc"].includes(e)}const Ur=E(kr);function Hr(e){return e.type}t.toSet(Ur);const Ir=["stroke","strokeWidth","strokeDash","strokeDashOffset","strokeOpacity","strokeJoin","strokeMiterLimit","fill","fillOpacity"],Vr=E({color:1,filled:1,invalid:1,order:1,radius2:1,theta2:1,timeUnitBandSize:1,timeUnitBandPosition:1}),Gr=E({mark:1,arc:1,area:1,bar:1,circle:1,image:1,line:1,point:1,rect:1,rule:1,square:1,text:1,tick:1,trail:1,geoshape:1});function Yr(e){return e&&null!=e.band}const Xr={horizontal:["cornerRadiusTopRight","cornerRadiusBottomRight"],vertical:["cornerRadiusTopLeft","cornerRadiusTopRight"]},Jr={binSpacing:1,continuousBandSize:5,timeUnitBandPosition:.5},Qr={binSpacing:0,continuousBandSize:5,timeUnitBandPosition:.5};function Kr(e){const{channel:t,channelDef:n,markDef:i,scale:r,config:o}=e,a=ro(e);return jo(n)&&!Vt(n.aggregate)&&r&&pr(r.get("type"))&&!1===r.get("zero")?Zr({fieldDef:n,channel:t,markDef:i,ref:a,config:o}):a}function Zr({fieldDef:e,channel:t,markDef:n,ref:i,config:r}){if(Rr(n.type))return i;return null===xn("invalid",n,r)?i:[eo(e,t),i]}function eo(e,t){return{test:to(e,!0),..."y"===Ke(t)?{field:{group:"height"}}:{value:0}}}function to(e,n=!0){return ji(t.isString(e)?e:Yo(e,{expr:"datum"}),!n)}function no(e,t,n,i){const r={};if(t&&(r.scale=t),Mo(e)){const{datum:t}=e;li(t)?r.signal=gi(t):an(t)?r.signal=t.signal:tn(t)?r.signal=t.expr:r.value=t}else r.field=Yo(e,n);if(i){const{offset:e,band:t}=i;e&&(r.offset=e),t&&(r.band=t)}return r}function io({scaleName:e,fieldOrDatumDef:t,fieldOrDatumDef2:n,offset:i,startSuffix:r,bandPosition:o=.5}){const a=0O(`${"unit"===e?"":`_${e}_`}${n[e]}`))).join(""):(t?"utc":"")+"timeunit"+E(n).map((e=>O(`_${e}_${n[e]}`))).join("")}(u),r=(!["range","mid"].includes(t.binSuffix)&&t.binSuffix||"")+(t.suffix??""))}i&&(n=n?`${i}_${n}`:i)}return r&&(n=`${n}_${r}`),i&&(n=`${i}_${n}`),t.forAs?W(n):t.expr?T(n,t.expr)+o:q(n)+o}function Xo(e){switch(e.type){case"nominal":case"ordinal":case"geojson":return!0;case"quantitative":return jo(e)&&!!e.bin;case"temporal":return!1}throw new Error(Hn(e.type))}const Jo=(e,t)=>{switch(t.fieldTitle){case"plain":return e.field;case"functional":return function(e){const{aggregate:t,bin:n,timeUnit:i,field:r}=e;if(Ut(t))return`${r} for argmax(${t.argmax})`;if(Wt(t))return`${r} for argmin(${t.argmin})`;const o=Fi(i),a=t||(null==o?void 0:o.unit)||(null==o?void 0:o.maxbins)&&"timeunit"||Jt(n)&&"bin";return a?`${a.toUpperCase()}(${r})`:r}(e);default:return function(e,t){const{field:n,bin:i,timeUnit:r,aggregate:o}=e;if("count"===o)return t.countTitle;if(Jt(i))return`${n} (binned)`;if(r){var a;const e=null===(a=Fi(r))||void 0===a?void 0:a.unit;if(e)return`${n} (${xi(e).join("-")})`}else if(o)return Ut(o)?`${n} for max ${o.argmax}`:Wt(o)?`${n} for min ${o.argmin}`:`${N(o)} of ${n}`;return n}(e,t)}};let Qo=Jo;function Ko(e){Qo=e}function Zo(e,t,{allowDisabling:n,includeDefault:i=!0}){var r;const o=null===(r=ea(e))||void 0===r?void 0:r.title;if(!jo(e))return o;const a=e,s=i?ta(a,t):void 0;return n?H(o,a.title,s):o??a.title??s}function ea(e){return Ho(e)&&e.axis?e.axis:Io(e)&&e.legend?e.legend:$o(e)&&e.header?e.header:void 0}function ta(e,t){return Qo(e,t)}function na(e){if(Vo(e)){const{format:t,formatType:n}=e;return{format:t,formatType:n}}{const t=ea(e)??{},{format:n,formatType:i}=t;return{format:n,formatType:i}}}function ia(e){return jo(e)?e:Oo(e)?e.condition:void 0}function ra(e){return qo(e)?e:Po(e)?e.condition:void 0}function oa(e,n,i,r={}){if(t.isString(e)||t.isNumber(e)||t.isBoolean(e)){return ui(function(e,t,n){return`Channel ${e} is a ${t}. Converted to {value: ${g(n)}}.`}(n,t.isString(e)?"string":t.isNumber(e)?"number":"boolean",e)),{value:e}}return qo(e)?aa(e,n,i,r):Po(e)?{...e,condition:aa(e.condition,n,i,r)}:e}function aa(e,n,i,r){if(Vo(e)){const{format:t,formatType:o,...a}=e;if(ao(o)&&!i.customFormatTypes)return ui(Un(n)),aa(a,n,i,r)}else{const t=Ho(e)?"axis":Io(e)?"legend":$o(e)?"header":null;if(t&&e[t]){const{format:o,formatType:a,...s}=e[t];if(ao(a)&&!i.customFormatTypes)return ui(Un(n)),aa({...e,[t]:s},n,i,r)}}return jo(e)?sa(e,n,r):function(e){let n=e.type;if(n)return e;const{datum:i}=e;return n=t.isNumber(i)?"quantitative":t.isString(i)?"nominal":li(i)?"temporal":void 0,{...e,type:n}}(e)}function sa(e,n,{compositeMark:i=!1}={}){const{aggregate:r,timeUnit:o,bin:a,field:s}=e,u={...e};if(i||!r||Ht(r)||Ut(r)||Wt(r)||(ui(function(e){return`Invalid aggregation operator "${e}".`}(r)),delete u.aggregate),o&&(u.timeUnit=Fi(o)),s&&(u.field=`${s}`),Jt(a)&&(u.bin=ua(a,n)),Qt(a)&&!vt(n)&&ui(function(e){return`Channel ${e} should not be used with "binned" bin.`}(n)),Ro(u)){const{type:e}=u,t=function(e){if(e)switch(e=e.toLowerCase()){case"q":case Mi:return"quantitative";case"t":case Li:return"temporal";case"o":case Ti:return"ordinal";case"n":case qi:return"nominal";case Ri:return"geojson"}}(e);e!==t&&(u.type=t),"quantitative"!==e&&Vt(r)&&(ui(function(e,t){return`Invalid field type "${e}" for aggregate: "${t}", using "quantitative" instead.`}(e,r)),u.type="quantitative")}else if(!Qe(n)){const e=function(e,n){var i;switch(n){case"latitude":case"longitude":return"quantitative";case"row":case"column":case"facet":case"shape":case"strokeDash":return"nominal";case"order":return"ordinal"}if(So(e)&&t.isArray(e.sort))return"ordinal";const{aggregate:r,bin:o,timeUnit:a}=e;if(a)return"temporal";if(o||r&&!Ut(r)&&!Wt(r))return"quantitative";if(Uo(e)&&null!==(i=e.scale)&&void 0!==i&&i.type)switch(er[e.scale.type]){case"numeric":case"discretizing":return"quantitative";case"time":return"temporal"}return"nominal"}(u,n);u.type=e}if(Ro(u)){const{compatible:e,warning:t}=function(e,t){const n=e.type;if("geojson"===n&&"shape"!==t)return{compatible:!1,warning:`Channel ${t} should not be used with a geojson data.`};switch(t){case Q:case K:case Z:return Xo(e)?la:{compatible:!1,warning:Yn(t)};case ee:case te:case de:case pe:case me:case De:case $e:case ke:case Ce:case Se:case Ee:case ye:case ae:case re:case Be:return la;case le:case fe:case ue:case ce:return n!==Mi?{compatible:!1,warning:`Channel ${t} should be used with a quantitative field only, not ${e.type} field.`}:la;case ve:case be:case xe:case we:case he:case se:case oe:case ne:case ie:return"nominal"!==n||e.sort?la:{compatible:!1,warning:`Channel ${t} should not be used with an unsorted discrete field.`};case ge:case Ae:return Xo(e)||Uo(i=e)&&mr(null===(r=i.scale)||void 0===r?void 0:r.type)?la:{compatible:!1,warning:Xn(t)};case Fe:return"nominal"!==e.type||"sort"in e?la:{compatible:!1,warning:"Channel order is inappropriate for nominal field, which has no inherent order."}}var i,r}(u,n)||{};!1===e&&ui(t)}if(So(u)&&t.isString(u.sort)){const{sort:e}=u;if(xo(e))return{...u,sort:{encoding:e}};const t=e.substr(1);if("-"===e.charAt(0)&&xo(t))return{...u,sort:{encoding:t,order:"descending"}}}if($o(u)){const{header:e}=u;if(e){const{orient:t,...n}=e;if(t)return{...u,header:{...n,labelOrient:e.labelOrient||t,titleOrient:e.titleOrient||t}}}}return u}function ua(e,n){return t.isBoolean(e)?{maxbins:en(n)}:"binned"===e?{binned:!0}:e.maxbins||e.step?e:{...e,maxbins:en(n)}}const la={compatible:!0};function ca(e){const{formatType:t}=na(e);return"time"===t||!t&&((n=e)&&("temporal"===n.type||jo(n)&&!!n.timeUnit));var n}function fa(e,{timeUnit:n,type:i,wrapTime:r,undefinedIfExprNotRequired:o}){var a;const s=n&&(null===(a=Fi(n))||void 0===a?void 0:a.unit);let u,l=s||"temporal"===i;return tn(e)?u=e.expr:an(e)?u=e.signal:li(e)?(l=!0,u=gi(e)):(t.isString(e)||t.isNumber(e))&&l&&(u=`datetime(${g(e)})`,function(e){return!!hi[e]}(s)&&(t.isNumber(e)&&e<1e4||t.isString(e)&&isNaN(Date.parse(e)))&&(u=gi({[s]:e}))),u?r&&l?`time(${u})`:u:o?void 0:g(e)}function da(e,t){const{type:n}=e;return t.map((t=>{const i=fa(t,{timeUnit:jo(e)?e.timeUnit:void 0,type:n,undefinedIfExprNotRequired:!0});return void 0!==i?{signal:i}:t}))}function pa(e,t){return Jt(e.bin)?Pt(t)&&["ordinal","nominal"].includes(e.type):(console.warn("Only call this method for binned field defs."),!1)}const ma={labelAlign:{part:"labels",vgProp:"align"},labelBaseline:{part:"labels",vgProp:"baseline"},labelColor:{part:"labels",vgProp:"fill"},labelFont:{part:"labels",vgProp:"font"},labelFontSize:{part:"labels",vgProp:"fontSize"},labelFontStyle:{part:"labels",vgProp:"fontStyle"},labelFontWeight:{part:"labels",vgProp:"fontWeight"},labelOpacity:{part:"labels",vgProp:"opacity"},labelOffset:null,labelPadding:null,gridColor:{part:"grid",vgProp:"stroke"},gridDash:{part:"grid",vgProp:"strokeDash"},gridDashOffset:{part:"grid",vgProp:"strokeDashOffset"},gridOpacity:{part:"grid",vgProp:"opacity"},gridWidth:{part:"grid",vgProp:"strokeWidth"},tickColor:{part:"ticks",vgProp:"stroke"},tickDash:{part:"ticks",vgProp:"strokeDash"},tickDashOffset:{part:"ticks",vgProp:"strokeDashOffset"},tickOpacity:{part:"ticks",vgProp:"opacity"},tickSize:null,tickWidth:{part:"ticks",vgProp:"strokeWidth"}};function ga(e){return e&&e.condition}const ha=["domain","grid","labels","ticks","title"],ya={grid:"grid",gridCap:"grid",gridColor:"grid",gridDash:"grid",gridDashOffset:"grid",gridOpacity:"grid",gridScale:"grid",gridWidth:"grid",orient:"main",bandPosition:"both",aria:"main",description:"main",domain:"main",domainCap:"main",domainColor:"main",domainDash:"main",domainDashOffset:"main",domainOpacity:"main",domainWidth:"main",format:"main",formatType:"main",labelAlign:"main",labelAngle:"main",labelBaseline:"main",labelBound:"main",labelColor:"main",labelFlush:"main",labelFlushOffset:"main",labelFont:"main",labelFontSize:"main",labelFontStyle:"main",labelFontWeight:"main",labelLimit:"main",labelLineHeight:"main",labelOffset:"main",labelOpacity:"main",labelOverlap:"main",labelPadding:"main",labels:"main",labelSeparation:"main",maxExtent:"main",minExtent:"main",offset:"both",position:"main",tickCap:"main",tickColor:"main",tickDash:"main",tickDashOffset:"main",tickMinStep:"both",tickOffset:"both",tickOpacity:"main",tickRound:"both",ticks:"main",tickSize:"main",tickWidth:"both",title:"main",titleAlign:"main",titleAnchor:"main",titleAngle:"main",titleBaseline:"main",titleColor:"main",titleFont:"main",titleFontSize:"main",titleFontStyle:"main",titleFontWeight:"main",titleLimit:"main",titleLineHeight:"main",titleOpacity:"main",titlePadding:"main",titleX:"main",titleY:"main",encode:"both",scale:"both",tickBand:"both",tickCount:"both",tickExtra:"both",translate:"both",values:"both",zindex:"both"},va={orient:1,aria:1,bandPosition:1,description:1,domain:1,domainCap:1,domainColor:1,domainDash:1,domainDashOffset:1,domainOpacity:1,domainWidth:1,format:1,formatType:1,grid:1,gridCap:1,gridColor:1,gridDash:1,gridDashOffset:1,gridOpacity:1,gridWidth:1,labelAlign:1,labelAngle:1,labelBaseline:1,labelBound:1,labelColor:1,labelFlush:1,labelFlushOffset:1,labelFont:1,labelFontSize:1,labelFontStyle:1,labelFontWeight:1,labelLimit:1,labelLineHeight:1,labelOffset:1,labelOpacity:1,labelOverlap:1,labelPadding:1,labels:1,labelSeparation:1,maxExtent:1,minExtent:1,offset:1,position:1,tickBand:1,tickCap:1,tickColor:1,tickCount:1,tickDash:1,tickDashOffset:1,tickExtra:1,tickMinStep:1,tickOffset:1,tickOpacity:1,tickRound:1,ticks:1,tickSize:1,tickWidth:1,title:1,titleAlign:1,titleAnchor:1,titleAngle:1,titleBaseline:1,titleColor:1,titleFont:1,titleFontSize:1,titleFontStyle:1,titleFontWeight:1,titleLimit:1,titleLineHeight:1,titleOpacity:1,titlePadding:1,titleX:1,titleY:1,translate:1,values:1,zindex:1},ba={...va,style:1,labelExpr:1,encoding:1};function xa(e){return!!ba[e]}const wa=E({axis:1,axisBand:1,axisBottom:1,axisDiscrete:1,axisLeft:1,axisPoint:1,axisQuantitative:1,axisRight:1,axisTemporal:1,axisTop:1,axisX:1,axisXBand:1,axisXDiscrete:1,axisXPoint:1,axisXQuantitative:1,axisXTemporal:1,axisY:1,axisYBand:1,axisYDiscrete:1,axisYPoint:1,axisYQuantitative:1,axisYTemporal:1});function Aa(e){return"mark"in e}class Da{constructor(e,t){this.name=e,this.run=t}hasMatchingType(e){return!!Aa(e)&&(Hr(t=e.mark)?t.type:t)===this.name;var t}}function Fa(e,n){const i=e&&e[n];return!!i&&(t.isArray(i)?b(i,(e=>!!e.field)):jo(i)||Oo(i))}function $a(e){return b(qe,(n=>{if(Fa(e,n)){const i=e[n];if(t.isArray(i))return b(i,(e=>!!e.aggregate));{const e=ia(i);return e&&!!e.aggregate}}return!1}))}function ka(e,t){const n=[],i=[],r=[],o=[],a={};return Ea(e,((s,u)=>{if(jo(s)){const{field:l,aggregate:c,bin:f,timeUnit:d,...p}=s;if(c||d||f){const e=ea(s),m=null==e?void 0:e.title;let g=Yo(s,{forAs:!0});const h={...m?[]:{title:Zo(s,t,{allowDisabling:!0})},...p,field:g};if(c){let e;if(Ut(c)?(e="argmax",g=Yo({op:"argmax",field:c.argmax},{forAs:!0}),h.field=`${g}.${l}`):Wt(c)?(e="argmin",g=Yo({op:"argmin",field:c.argmin},{forAs:!0}),h.field=`${g}.${l}`):"boxplot"!==c&&"errorbar"!==c&&"errorband"!==c&&(e=c),e){const t={op:e,as:g};l&&(t.field=l),o.push(t)}}else if(n.push(g),Ro(s)&&Jt(f)){if(i.push({bin:f,field:l,as:g}),n.push(Yo(s,{binSuffix:"end"})),pa(s,u)&&n.push(Yo(s,{binSuffix:"range"})),vt(u)){const e={field:`${g}_end`};a[`${u}2`]=e}h.bin="binned",Qe(u)||(h.type=Mi)}else if(d){r.push({timeUnit:d,field:l,as:g});const e=Ro(s)&&s.type!==Li&&"time";e&&(u===De||u===Ce?h.formatType=e:!function(e){return!!mt[e]}(u)?vt(u)&&(h.axis={formatType:e,...h.axis}):h.legend={formatType:e,...h.legend})}a[u]=h}else n.push(l),a[u]=e[u]}else a[u]=e[u]})),{bins:i,timeUnits:r,aggregate:o,groupby:n,encoding:a}}function Ca(e,n,i,r){return E(e).reduce(((o,a)=>{if(!Xe(a))return ui(function(e){return`${e}-encoding is dropped as ${e} is not a valid encoding channel.`}(a)),o;const s=e[a];if("angle"!==a||"arc"!==n||e.theta||(ui("Arc marks uses theta channel rather than angle, replacing angle with theta."),a=ae),!function(e,t,n){const i=jt(t,n);if(!i)return!1;if("binned"===i){const n=e[t===ne?ee:te];return!!(jo(n)&&jo(e[t])&&Qt(n.bin))}return!0}(e,a,n))return ui(Gn(a,n)),o;if(a===he&&"line"===n){const t=ia(e[a]);if(null!=t&&t.aggregate)return ui("Line marks cannot encode size with a non-groupby field. You may want to use trail marks instead."),o}if(a===de&&(i?"fill"in e:"stroke"in e))return ui(In("encoding",{fill:"fill"in e,stroke:"stroke"in e})),o;if(a===$e||a===Fe&&!t.isArray(s)&&!Wo(s)||a===Ce&&t.isArray(s))s&&(o[a]=t.array(s).reduce(((e,t)=>(jo(t)?e.push(sa(t,a)):ui(Vn(t,a)),e)),[]));else{if(a===Ce&&null===s)o[a]=null;else if(!(jo(s)||Mo(s)||Wo(s)||zo(s)||an(s)))return ui(Vn(s,a)),o;o[a]=oa(s,a,r)}return o}),{})}function Sa(e,t){const n={};for(const i of E(e)){const r=oa(e[i],i,t,{compositeMark:!0});n[i]=r}return n}function Ea(e,n,i){if(e)for(const r of E(e)){const o=e[r];if(t.isArray(o))for(const e of o)n.call(i,e,r);else n.call(i,o,r)}}function Ba(e,n){return E(n).reduce(((i,r)=>{switch(r){case ee:case te:case Se:case Be:case Ee:case ne:case ie:case ae:case se:case re:case oe:case ue:case le:case ce:case fe:case De:case ge:case ye:case Ce:return i;case Fe:if("line"===e||"trail"===e)return i;case $e:case ke:{const e=n[r];if(t.isArray(e)||jo(e))for(const n of t.array(e))n.aggregate||i.push(Yo(n,{}));return i}case he:if("trail"===e)return i;case de:case pe:case me:case ve:case be:case xe:case Ae:case we:{const e=ia(n[r]);return e&&!e.aggregate&&i.push(Yo(e,{})),i}}}),[])}function _a(e,n,i,r=!0){if("tooltip"in i)return{tooltip:i.tooltip};return{tooltip:[...e.map((({fieldPrefix:e,titlePrefix:t})=>{const i=r?` of ${za(n)}`:"";return{field:e+n.field,type:n.type,title:an(t)?{signal:`${t}"${escape(i)}"`}:t+i}})),...D(function(e){const n=[];for(const i of E(e))if(Fa(e,i)){const r=e[i],o=t.array(r);for(const e of o)jo(e)?n.push(e):Oo(e)&&n.push(e.condition)}return n}(i).map(Go),h)]}}function za(e){const{title:t,field:n}=e;return H(t,n)}function Oa(e,n,i,r,o){const{scale:a,axis:s}=i;return({partName:u,mark:l,positionPrefix:c,endPositionPrefix:f,extraEncoding:d={}})=>{const p=za(i);return Pa(e,u,o,{mark:l,encoding:{[n]:{field:`${c}_${i.field}`,type:i.type,...void 0!==p?{title:p}:{},...void 0!==a?{scale:a}:{},...void 0!==s?{axis:s}:{}},...t.isString(f)?{[`${n}2`]:{field:`${f}_${i.field}`}}:{},...r,...d}})}}function Pa(e,n,i,r){const{clip:o,color:a,opacity:s}=e,u=e.type;return e[n]||void 0===e[n]&&i[n]?[{...r,mark:{...i[n],...o?{clip:o}:{},...a?{color:a}:{},...s?{opacity:s}:{},...Hr(r.mark)?r.mark:{type:r.mark},style:`${u}-${n}`,...t.isBoolean(e[n])?{}:e[n]}}]:[]}function ja(e,t,n){const{encoding:i}=e,r="vertical"===t?"y":"x",o=i[r],a=i[`${r}2`],s=i[`${r}Error`],u=i[`${r}Error2`];return{continuousAxisChannelDef:Na(o,n),continuousAxisChannelDef2:Na(a,n),continuousAxisChannelDefError:Na(s,n),continuousAxisChannelDefError2:Na(u,n),continuousAxis:r}}function Na(e,t){if(null!=e&&e.aggregate){const{aggregate:n,...i}=e;return n!==t&&ui(function(e,t){return`Continuous axis should not have customized aggregation function ${e}; ${t} already agregates the axis.`}(n,t)),i}return e}function Ma(e,t){const{mark:n,encoding:i}=e,{x:r,y:o}=i;if(Hr(n)&&n.orient)return n.orient;if(To(r)){if(To(o)){const e=jo(r)&&r.aggregate,n=jo(o)&&o.aggregate;if(e||n!==t){if(n||e!==t){if(e===t&&n===t)throw new Error("Both x and y cannot have aggregate");return ca(o)&&!ca(r)?"horizontal":"vertical"}return"horizontal"}return"vertical"}return"horizontal"}if(To(o))return"vertical";throw new Error(`Need a valid continuous axis for ${t}s`)}const Ta="boxplot",La=new Da(Ta,Ra);function qa(e){return t.isNumber(e)?"tukey":e}function Ra(e,{config:n}){e={...e,encoding:Sa(e.encoding,n)};const{mark:i,encoding:r,params:o,projection:a,...s}=e,u=Hr(i)?i:{type:i};o&&ui(Ln("boxplot"));const l=u.extent??n.boxplot.extent,c=xn("size",u,n),f=qa(l),{bins:d,timeUnits:p,transform:g,continuousAxisChannelDef:h,continuousAxis:y,groupby:v,aggregate:b,encodingWithoutContinuousAxis:x,ticksOrient:w,boxOrient:A,customTooltipWithoutAggregatedField:D}=function(e,n,i){const r=Ma(e,Ta),{continuousAxisChannelDef:o,continuousAxis:a}=ja(e,r,Ta),s=o.field,u=qa(n),l=[...Wa(s),{op:"median",field:s,as:`mid_box_${s}`},{op:"min",field:s,as:("min-max"===u?"lower_whisker_":"min_")+s},{op:"max",field:s,as:("min-max"===u?"upper_whisker_":"max_")+s}],c="min-max"===u||"tukey"===u?[]:[{calculate:`datum["upper_box_${s}"] - datum["lower_box_${s}"]`,as:`iqr_${s}`},{calculate:`min(datum["upper_box_${s}"] + datum["iqr_${s}"] * ${n}, datum["max_${s}"])`,as:`upper_whisker_${s}`},{calculate:`max(datum["lower_box_${s}"] - datum["iqr_${s}"] * ${n}, datum["min_${s}"])`,as:`lower_whisker_${s}`}],{[a]:f,...d}=e.encoding,{customTooltipWithoutAggregatedField:p,filteredEncoding:m}=function(e){const{tooltip:n,...i}=e;if(!n)return{filteredEncoding:i};let r,o;if(t.isArray(n)){for(const e of n)e.aggregate?(r||(r=[]),r.push(e)):(o||(o=[]),o.push(e));r&&(i.tooltip=r)}else n.aggregate?i.tooltip=n:o=n;return t.isArray(o)&&1===o.length&&(o=o[0]),{customTooltipWithoutAggregatedField:o,filteredEncoding:i}}(d),{bins:g,timeUnits:h,aggregate:y,groupby:v,encoding:b}=ka(m,i),x="vertical"===r?"horizontal":"vertical",w=r,A=[...g,...h,{aggregate:[...y,...l],groupby:v},...c];return{bins:g,timeUnits:h,transform:A,groupby:v,aggregate:y,continuousAxisChannelDef:o,continuousAxis:a,encodingWithoutContinuousAxis:b,ticksOrient:x,boxOrient:w,customTooltipWithoutAggregatedField:p}}(e,l,n),{color:F,size:$,...k}=x,C=e=>Oa(u,y,h,e,n.boxplot),E=C(k),B=C(x),_=C({...k,...$?{size:$}:{}}),z=_a([{fieldPrefix:"min-max"===f?"upper_whisker_":"max_",titlePrefix:"Max"},{fieldPrefix:"upper_box_",titlePrefix:"Q3"},{fieldPrefix:"mid_box_",titlePrefix:"Median"},{fieldPrefix:"lower_box_",titlePrefix:"Q1"},{fieldPrefix:"min-max"===f?"lower_whisker_":"min_",titlePrefix:"Min"}],h,x),O={type:"tick",color:"black",opacity:1,orient:w,invalid:null,aria:!1},P="min-max"===f?z:_a([{fieldPrefix:"upper_whisker_",titlePrefix:"Upper Whisker"},{fieldPrefix:"lower_whisker_",titlePrefix:"Lower Whisker"}],h,x),j=[...E({partName:"rule",mark:{type:"rule",invalid:null,aria:!1},positionPrefix:"lower_whisker",endPositionPrefix:"lower_box",extraEncoding:P}),...E({partName:"rule",mark:{type:"rule",invalid:null,aria:!1},positionPrefix:"upper_box",endPositionPrefix:"upper_whisker",extraEncoding:P}),...E({partName:"ticks",mark:O,positionPrefix:"lower_whisker",extraEncoding:P}),...E({partName:"ticks",mark:O,positionPrefix:"upper_whisker",extraEncoding:P})],N=[..."tukey"!==f?j:[],...B({partName:"box",mark:{type:"bar",...c?{size:c}:{},orient:A,invalid:null,ariaRoleDescription:"box"},positionPrefix:"lower_box",endPositionPrefix:"upper_box",extraEncoding:z}),..._({partName:"median",mark:{type:"tick",invalid:null,...t.isObject(n.boxplot.median)&&n.boxplot.median.color?{color:n.boxplot.median.color}:{},...c?{size:c}:{},orient:w,aria:!1},positionPrefix:"mid_box",extraEncoding:z})];if("min-max"===f)return{...s,transform:(s.transform??[]).concat(g),layer:N};const M=`datum["lower_box_${h.field}"]`,T=`datum["upper_box_${h.field}"]`,L=`(${T} - ${M})`,q=`${M} - ${l} * ${L}`,R=`${T} + ${l} * ${L}`,W=`datum["${h.field}"]`,U={joinaggregate:Wa(h.field),groupby:v},H={transform:[{filter:`(${q} <= ${W}) && (${W} <= ${R})`},{aggregate:[{op:"min",field:h.field,as:`lower_whisker_${h.field}`},{op:"max",field:h.field,as:`upper_whisker_${h.field}`},{op:"min",field:`lower_box_${h.field}`,as:`lower_box_${h.field}`},{op:"max",field:`upper_box_${h.field}`,as:`upper_box_${h.field}`},...b],groupby:v}],layer:j},{tooltip:I,...V}=k,{scale:G,axis:Y}=h,X=za(h),J=m(Y,["title"]),Q=Pa(u,"outliers",n.boxplot,{transform:[{filter:`(${W} < ${q}) || (${W} > ${R})`}],mark:"point",encoding:{[y]:{field:h.field,type:h.type,...void 0!==X?{title:X}:{},...void 0!==G?{scale:G}:{},...S(J)?{}:{axis:J}},...V,...F?{color:F}:{},...D?{tooltip:D}:{}}})[0];let K;const Z=[...d,...p,U];return Q?K={transform:Z,layer:[Q,H]}:(K=H,K.transform.unshift(...Z)),{...s,layer:[K,{transform:g,layer:N}]}}function Wa(e){return[{op:"q1",field:e,as:`lower_box_${e}`},{op:"q3",field:e,as:`upper_box_${e}`}]}const Ua="errorbar",Ha=new Da(Ua,Ia);function Ia(e,{config:t}){e={...e,encoding:Sa(e.encoding,t)};const{transform:n,continuousAxisChannelDef:i,continuousAxis:r,encodingWithoutContinuousAxis:o,ticksOrient:a,markDef:s,outerSpec:u,tooltipEncoding:l}=Ga(e,Ua,t);delete o.size;const c=Oa(s,r,i,o,t.errorbar),f=s.thickness,d=s.size,p={type:"tick",orient:a,aria:!1,...void 0!==f?{thickness:f}:{},...void 0!==d?{size:d}:{}},m=[...c({partName:"ticks",mark:p,positionPrefix:"lower",extraEncoding:l}),...c({partName:"ticks",mark:p,positionPrefix:"upper",extraEncoding:l}),...c({partName:"rule",mark:{type:"rule",ariaRoleDescription:"errorbar",...void 0!==f?{size:f}:{}},positionPrefix:"lower",endPositionPrefix:"upper",extraEncoding:l})];return{...u,transform:n,...m.length>1?{layer:m}:{...m[0]}}}function Va(e,t){const{encoding:n}=e;if(function(e){return(qo(e.x)||qo(e.y))&&!qo(e.x2)&&!qo(e.y2)&&!qo(e.xError)&&!qo(e.xError2)&&!qo(e.yError)&&!qo(e.yError2)}(n))return{orient:Ma(e,t),inputType:"raw"};const i=function(e){return qo(e.x2)||qo(e.y2)}(n),r=function(e){return qo(e.xError)||qo(e.xError2)||qo(e.yError)||qo(e.yError2)}(n),o=n.x,a=n.y;if(i){if(r)throw new Error(`${t} cannot be both type aggregated-upper-lower and aggregated-error`);const e=n.x2,i=n.y2;if(qo(e)&&qo(i))throw new Error(`${t} cannot have both x2 and y2`);if(qo(e)){if(To(o))return{orient:"horizontal",inputType:"aggregated-upper-lower"};throw new Error(`Both x and x2 have to be quantitative in ${t}`)}if(qo(i)){if(To(a))return{orient:"vertical",inputType:"aggregated-upper-lower"};throw new Error(`Both y and y2 have to be quantitative in ${t}`)}throw new Error("No ranged axis")}{const e=n.xError,i=n.xError2,r=n.yError,s=n.yError2;if(qo(i)&&!qo(e))throw new Error(`${t} cannot have xError2 without xError`);if(qo(s)&&!qo(r))throw new Error(`${t} cannot have yError2 without yError`);if(qo(e)&&qo(r))throw new Error(`${t} cannot have both xError and yError with both are quantiative`);if(qo(e)){if(To(o))return{orient:"horizontal",inputType:"aggregated-error"};throw new Error("All x, xError, and xError2 (if exist) have to be quantitative")}if(qo(r)){if(To(a))return{orient:"vertical",inputType:"aggregated-error"};throw new Error("All y, yError, and yError2 (if exist) have to be quantitative")}throw new Error("No ranged axis")}}function Ga(e,t,n){const{mark:i,encoding:r,params:o,projection:a,...s}=e,u=Hr(i)?i:{type:i};o&&ui(Ln(t));const{orient:l,inputType:c}=Va(e,t),{continuousAxisChannelDef:f,continuousAxisChannelDef2:d,continuousAxisChannelDefError:p,continuousAxisChannelDefError2:m,continuousAxis:g}=ja(e,l,t),{errorBarSpecificAggregate:h,postAggregateCalculates:y,tooltipSummary:v,tooltipTitleWithFieldName:b}=function(e,t,n,i,r,o,a,s){let u=[],l=[];const c=t.field;let f,d=!1;if("raw"===o){const t=e.center?e.center:e.extent?"iqr"===e.extent?"median":"mean":s.errorbar.center,n=e.extent?e.extent:"mean"===t?"stderr":"iqr";if("median"===t!=("iqr"===n)&&ui(function(e,t,n){return`${e} is not usually used with ${t} for ${n}.`}(t,n,a)),"stderr"===n||"stdev"===n)u=[{op:n,field:c,as:`extent_${c}`},{op:t,field:c,as:`center_${c}`}],l=[{calculate:`datum["center_${c}"] + datum["extent_${c}"]`,as:`upper_${c}`},{calculate:`datum["center_${c}"] - datum["extent_${c}"]`,as:`lower_${c}`}],f=[{fieldPrefix:"center_",titlePrefix:N(t)},{fieldPrefix:"upper_",titlePrefix:Ya(t,n,"+")},{fieldPrefix:"lower_",titlePrefix:Ya(t,n,"-")}],d=!0;else{let e,t,i;"ci"===n?(e="mean",t="ci0",i="ci1"):(e="median",t="q1",i="q3"),u=[{op:t,field:c,as:`lower_${c}`},{op:i,field:c,as:`upper_${c}`},{op:e,field:c,as:`center_${c}`}],f=[{fieldPrefix:"upper_",titlePrefix:Zo({field:c,aggregate:i,type:"quantitative"},s,{allowDisabling:!1})},{fieldPrefix:"lower_",titlePrefix:Zo({field:c,aggregate:t,type:"quantitative"},s,{allowDisabling:!1})},{fieldPrefix:"center_",titlePrefix:Zo({field:c,aggregate:e,type:"quantitative"},s,{allowDisabling:!1})}]}}else{(e.center||e.extent)&&ui((p=e.center,`${(m=e.extent)?"extent ":""}${m&&p?"and ":""}${p?"center ":""}${m&&p?"are ":"is "}not needed when data are aggregated.`)),"aggregated-upper-lower"===o?(f=[],l=[{calculate:`datum["${n.field}"]`,as:`upper_${c}`},{calculate:`datum["${c}"]`,as:`lower_${c}`}]):"aggregated-error"===o&&(f=[{fieldPrefix:"",titlePrefix:c}],l=[{calculate:`datum["${c}"] + datum["${i.field}"]`,as:`upper_${c}`}],r?l.push({calculate:`datum["${c}"] + datum["${r.field}"]`,as:`lower_${c}`}):l.push({calculate:`datum["${c}"] - datum["${i.field}"]`,as:`lower_${c}`}));for(const e of l)f.push({fieldPrefix:e.as.substring(0,6),titlePrefix:R(R(e.calculate,'datum["',""),'"]',"")})}var p,m;return{postAggregateCalculates:l,errorBarSpecificAggregate:u,tooltipSummary:f,tooltipTitleWithFieldName:d}}(u,f,d,p,m,c,t,n),{[g]:x,["x"===g?"x2":"y2"]:w,["x"===g?"xError":"yError"]:A,["x"===g?"xError2":"yError2"]:D,...F}=r,{bins:$,timeUnits:k,aggregate:C,groupby:S,encoding:E}=ka(F,n),B=[...C,...h],_="raw"!==c?[]:S,z=_a(v,f,E,b);return{transform:[...s.transform??[],...$,...k,...0===B.length?[]:[{aggregate:B,groupby:_}],...y],groupby:_,continuousAxisChannelDef:f,continuousAxis:g,encodingWithoutContinuousAxis:E,ticksOrient:"vertical"===l?"horizontal":"vertical",markDef:u,outerSpec:s,tooltipEncoding:z}}function Ya(e,t,n){return`${N(e)} ${n} ${t}`}const Xa="errorband",Ja=new Da(Xa,Qa);function Qa(e,{config:t}){e={...e,encoding:Sa(e.encoding,t)};const{transform:n,continuousAxisChannelDef:i,continuousAxis:r,encodingWithoutContinuousAxis:o,markDef:a,outerSpec:s,tooltipEncoding:u}=Ga(e,Xa,t),l=a,c=Oa(l,r,i,o,t.errorband),f=void 0!==e.encoding.x&&void 0!==e.encoding.y;let d={type:f?"area":"rect"},p={type:f?"line":"rule"};const m={...l.interpolate?{interpolate:l.interpolate}:{},...l.tension&&l.interpolate?{tension:l.tension}:{}};return f?(d={...d,...m,ariaRoleDescription:"errorband"},p={...p,...m,aria:!1}):l.interpolate?ui(ri("interpolate")):l.tension&&ui(ri("tension")),{...s,transform:n,layer:[...c({partName:"band",mark:d,positionPrefix:"lower",endPositionPrefix:"upper",extraEncoding:u}),...c({partName:"borders",mark:p,positionPrefix:"lower",extraEncoding:u}),...c({partName:"borders",mark:p,positionPrefix:"upper",extraEncoding:u})]}}const Ka={};function Za(e,t,n){const i=new Da(e,t);Ka[e]={normalizer:i,parts:n}}Za(Ta,Ra,["box","median","outliers","rule","ticks"]),Za(Ua,Ia,["ticks","rule"]),Za(Xa,Qa,["band","borders"]);const es=["gradientHorizontalMaxLength","gradientHorizontalMinLength","gradientVerticalMaxLength","gradientVerticalMinLength","unselectedOpacity"],ts={titleAlign:"align",titleAnchor:"anchor",titleAngle:"angle",titleBaseline:"baseline",titleColor:"color",titleFont:"font",titleFontSize:"fontSize",titleFontStyle:"fontStyle",titleFontWeight:"fontWeight",titleLimit:"limit",titleLineHeight:"lineHeight",titleOrient:"orient",titlePadding:"offset"},ns={labelAlign:"align",labelAnchor:"anchor",labelAngle:"angle",labelBaseline:"baseline",labelColor:"color",labelFont:"font",labelFontSize:"fontSize",labelFontStyle:"fontStyle",labelFontWeight:"fontWeight",labelLimit:"limit",labelLineHeight:"lineHeight",labelOrient:"orient",labelPadding:"offset"},is=E(ts),rs=E(ns),os=E({header:1,headerRow:1,headerColumn:1,headerFacet:1}),as=["size","shape","fill","stroke","strokeDash","strokeWidth","opacity"],ss="_vgsid_",us={point:{on:"click",fields:[ss],toggle:"event.shiftKey",resolve:"global",clear:"dblclick"},interval:{on:"[mousedown, window:mouseup] > window:mousemove!",encodings:["x","y"],translate:"[mousedown, window:mouseup] > window:mousemove!",zoom:"wheel!",mark:{fill:"#333",fillOpacity:.125,stroke:"white"},resolve:"global",clear:"dblclick"}};function ls(e){return!(!e||"legend"!==e&&!e.legend)}function cs(e){return ls(e)&&t.isObject(e)}function fs(e){return!!e.select}function ds(e){const t=[];for(const n of e||[]){if(fs(n))continue;const{expr:e,bind:i,...r}=n;if(i&&e){const n={...r,bind:i,init:e};t.push(n)}else{const n={...r,...e?{update:e}:{},...i?{bind:i}:{}};t.push(n)}}return t}function ps(e){return"concat"in e}function ms(e){return"vconcat"in e}function gs(e){return"hconcat"in e}const hs=["background","padding"];function ys(e,t){const n={};for(const t of hs)e&&void 0!==e[t]&&(n[t]=pn(e[t]));return t&&(n.params=e.params),n}function vs(e){return t.isObject(e)&&void 0!==e.step}function bs(e){return e.view||e.width||e.height}const xs=E({align:1,bounds:1,center:1,columns:1,spacing:1});function ws(e,t){return e[t]??e["width"===t?"continuousWidth":"continuousHeight"]}function As(e,t){const n=Ds(e,t);return vs(n)?n.step:Fs}function Ds(e,t){return H(e[t]??e["width"===t?"discreteWidth":"discreteHeight"],{step:e.step})}const Fs=20,$s={background:"white",padding:5,timeFormat:"%b %d, %Y",countTitle:"Count of Records",view:{continuousWidth:200,continuousHeight:200,step:Fs},mark:{color:"#4c78a8",invalid:"filter",timeUnitBandSize:1},arc:{},area:{},bar:Jr,circle:{},geoshape:{},image:{},line:{},point:{},rect:Qr,rule:{color:"black"},square:{},text:{color:"black"},tick:{thickness:1},trail:{},boxplot:{size:14,extent:1.5,box:{},median:{color:"white"},outliers:{},rule:{},ticks:null},errorbar:{center:"mean",rule:!0,ticks:!1},errorband:{band:{opacity:.3},borders:!1},scale:{pointPadding:.5,barBandPaddingInner:.1,rectBandPaddingInner:0,minBandSize:2,minFontSize:8,maxFontSize:40,minOpacity:.3,maxOpacity:.8,minSize:9,minStrokeWidth:1,maxStrokeWidth:4,quantileCount:4,quantizeCount:4},projection:{},legend:{gradientHorizontalMaxLength:200,gradientHorizontalMinLength:100,gradientVerticalMaxLength:200,gradientVerticalMinLength:64,unselectedOpacity:.35},header:{titlePadding:10,labelPadding:10},headerColumn:{},headerRow:{},headerFacet:{},selection:us,style:{},title:{},facet:{spacing:20},concat:{spacing:20}},ks=["#4c78a8","#f58518","#e45756","#72b7b2","#54a24b","#eeca3b","#b279a2","#ff9da6","#9d755d","#bab0ac"],Cs={text:11,guideLabel:10,guideTitle:11,groupTitle:13,groupSubtitle:12},Ss={blue:ks[0],orange:ks[1],red:ks[2],teal:ks[3],green:ks[4],yellow:ks[5],purple:ks[6],pink:ks[7],brown:ks[8],gray0:"#000",gray1:"#111",gray2:"#222",gray3:"#333",gray4:"#444",gray5:"#555",gray6:"#666",gray7:"#777",gray8:"#888",gray9:"#999",gray10:"#aaa",gray11:"#bbb",gray12:"#ccc",gray13:"#ddd",gray14:"#eee",gray15:"#fff"};function Es(e){const t=E(e||{}),n={};for(const i of t){const t=e[i];n[i]=ga(t)?dn(t):pn(t)}return n}const Bs=[...Gr,...wa,...os,"background","padding","legend","lineBreak","scale","style","title","view"];function _s(e={}){const{color:i,font:r,fontSize:o,selection:a,...s}=e,u=t.mergeConfig({},d($s),r?function(e){return{text:{font:e},style:{"guide-label":{font:e},"guide-title":{font:e},"group-title":{font:e},"group-subtitle":{font:e}}}}(r):{},i?function(e={}){return{signals:[{name:"color",value:t.isObject(e)?{...Ss,...e}:Ss}],mark:{color:{signal:"color.blue"}},rule:{color:{signal:"color.gray0"}},text:{color:{signal:"color.gray0"}},style:{"guide-label":{fill:{signal:"color.gray0"}},"guide-title":{fill:{signal:"color.gray0"}},"group-title":{fill:{signal:"color.gray0"}},"group-subtitle":{fill:{signal:"color.gray0"}},cell:{stroke:{signal:"color.gray8"}}},axis:{domainColor:{signal:"color.gray13"},gridColor:{signal:"color.gray8"},tickColor:{signal:"color.gray13"}},range:{category:[{signal:"color.blue"},{signal:"color.orange"},{signal:"color.red"},{signal:"color.teal"},{signal:"color.green"},{signal:"color.yellow"},{signal:"color.purple"},{signal:"color.pink"},{signal:"color.brown"},{signal:"color.grey8"}]}}}(i):{},o?function(e){return{signals:[{name:"fontSize",value:t.isObject(e)?{...Cs,...e}:Cs}],text:{fontSize:{signal:"fontSize.text"}},style:{"guide-label":{fontSize:{signal:"fontSize.guideLabel"}},"guide-title":{fontSize:{signal:"fontSize.guideTitle"}},"group-title":{fontSize:{signal:"fontSize.groupTitle"}},"group-subtitle":{fontSize:{signal:"fontSize.groupSubtitle"}}}}}(o):{},s||{});a&&n.writeConfig(u,"selection",a,!0);const l=m(u,Bs);for(const e of["background","lineBreak","padding"])u[e]&&(l[e]=pn(u[e]));for(const e of Gr)u[e]&&(l[e]=nn(u[e]));for(const e of wa)u[e]&&(l[e]=Es(u[e]));for(const e of os)u[e]&&(l[e]=nn(u[e]));return u.legend&&(l.legend=nn(u.legend)),u.scale&&(l.scale=nn(u.scale)),u.style&&(l.style=function(e){const t=E(e),n={};for(const i of t)n[i]=Es(e[i]);return n}(u.style)),u.title&&(l.title=nn(u.title)),u.view&&(l.view=nn(u.view)),l}const zs=["view",...Ur],Os=["color","fontSize","background","padding","facet","concat","numberFormat","timeFormat","countTitle","header","axisQuantitative","axisTemporal","axisDiscrete","axisPoint","axisXBand","axisXPoint","axisXDiscrete","axisXQuantitative","axisXTemporal","axisYBand","axisYPoint","axisYDiscrete","axisYQuantitative","axisYTemporal","scale","selection","overlay"],Ps={view:["continuousWidth","continuousHeight","discreteWidth","discreteHeight","step"],area:["line","point"],bar:["binSpacing","continuousBandSize","discreteBandSize"],rect:["binSpacing","continuousBandSize","discreteBandSize"],line:["point"],tick:["bandSize","thickness"]};function js(e){e=d(e);for(const t of Os)delete e[t];if(e.axis)for(const t in e.axis)ga(e.axis[t])&&delete e.axis[t];if(e.legend)for(const t of es)delete e.legend[t];if(e.mark){for(const t of Vr)delete e.mark[t];e.mark.tooltip&&t.isObject(e.mark.tooltip)&&delete e.mark.tooltip}e.params&&(e.signals=(e.signals||[]).concat(ds(e.params)),delete e.params);for(const t of zs){for(const n of Vr)delete e[t][n];const n=Ps[t];if(n)for(const i of n)delete e[t][i];Ns(e,t)}for(const t of E(Ka))delete e[t];!function(e){const{titleMarkConfig:t,subtitleMarkConfig:n,subtitle:i}=rn(e.title);S(t)||(e.style["group-title"]={...e.style["group-title"],...t});S(n)||(e.style["group-subtitle"]={...e.style["group-subtitle"],...n});S(i)?delete e.title:e.title=i}(e);for(const n in e)t.isObject(e[n])&&S(e[n])&&delete e[n];return S(e)?void 0:e}function Ns(e,t,n,i){"view"===t&&(n="cell");const r={...i?e[t][i]:e[t],...e.style[n??t]};S(r)||(e.style[n??t]=r),i||delete e[t]}function Ms(e){return"layer"in e}class Ts{map(e,t){return ko(e)?this.mapFacet(e,t):function(e){return"repeat"in e}(e)?this.mapRepeat(e,t):gs(e)?this.mapHConcat(e,t):ms(e)?this.mapVConcat(e,t):ps(e)?this.mapConcat(e,t):this.mapLayerOrUnit(e,t)}mapLayerOrUnit(e,t){if(Ms(e))return this.mapLayer(e,t);if(Aa(e))return this.mapUnit(e,t);throw new Error(_n(e))}mapLayer(e,t){return{...e,layer:e.layer.map((e=>this.mapLayerOrUnit(e,t)))}}mapHConcat(e,t){return{...e,hconcat:e.hconcat.map((e=>this.map(e,t)))}}mapVConcat(e,t){return{...e,vconcat:e.vconcat.map((e=>this.map(e,t)))}}mapConcat(e,t){const{concat:n,...i}=e;return{...i,concat:n.map((e=>this.map(e,t)))}}mapFacet(e,t){return{...e,spec:this.map(e.spec,t)}}mapRepeat(e,t){return{...e,spec:this.map(e.spec,t)}}}const Ls={zero:1,center:1,normalize:1};const qs=new Set([Cr,Er,Sr,Pr,zr,Tr,Lr,_r,jr,Nr]),Rs=new Set([Er,Sr,Cr]);function Ws(e){return jo(e)&&"quantitative"===No(e)&&!e.bin}function Us(e,t){const n="x"===t?"y":"radius",i=e[t],r=e[n];if(jo(i)&&jo(r))if(Ws(i)&&Ws(r)){if(i.stack)return t;if(r.stack)return n;const e=jo(i)&&!!i.aggregate;if(e!==(jo(r)&&!!r.aggregate))return e?t:n;{var o,a;const e=null===(o=i.scale)||void 0===o?void 0:o.type,s=null===(a=r.scale)||void 0===a?void 0:a.type;if(e&&"linear"!==e)return n;if(s&&"linear"!==s)return t}}else{if(Ws(i))return t;if(Ws(r))return n}else{if(Ws(i))return t;if(Ws(r))return n}}function Hs(e,n,i={}){var r,o;const a=Hr(e)?e.type:e;if(!qs.has(a))return null;const s=Us(n,"x")||Us(n,"theta");if(!s)return null;const u=n[s],l=jo(u)?Yo(u,{}):void 0;let c=function(e){switch(e){case"x":return"y";case"y":return"x";case"theta":return"radius";case"radius":return"theta"}}(s),f=n[c],d=jo(f)?Yo(f,{}):void 0;d===l&&(d=void 0,f=void 0,c=void 0);const p=gt.reduce(((e,i)=>{if("tooltip"!==i&&Fa(n,i)){const r=n[i];for(const n of t.array(r)){const t=ia(n);if(t.aggregate)continue;const r=Yo(t,{});r&&r===d||e.push({channel:i,fieldDef:t})}}return e}),[]);let m;if(void 0!==u.stack?m=t.isBoolean(u.stack)?u.stack?"zero":null:u.stack:Rs.has(a)&&(m="zero"),!m||!(m in Ls))return null;var g;if($a(n)&&0===p.length)return null;if(null!=u&&null!==(r=u.scale)&&void 0!==r&&r.type&&(null==u||null===(o=u.scale)||void 0===o?void 0:o.type)!==Wi){if(i.disallowNonLinearStack)return null;ui(function(e){return`Cannot stack non-linear scale (${e}).`}(u.scale.type))}return qo(n[et(s)])?(void 0!==u.stack&&ui(`Cannot stack "${g=s}" if there is already "${g}2".`),null):(jo(u)&&u.aggregate&&!v(Gt,u.aggregate)&&ui(`Stacking is applied even though the aggregate function is non-summative ("${u.aggregate}").`),{groupbyChannel:f?c:void 0,groupbyField:d,fieldChannel:s,impute:null!==u.impute&&Rr(a),stackBy:p,offset:m})}function Is(e){const{point:t,line:n,...i}=e;return E(i).length>1?i:i.type}function Vs(e){for(const t of["line","area","rule","trail"])e[t]&&(e={...e,[t]:m(e[t],["point","line"])});return e}function Gs(e,n={},i){return"transparent"===e.point?{opacity:0}:e.point?t.isObject(e.point)?e.point:{}:void 0!==e.point?null:n.point||i.shape?t.isObject(n.point)?n.point:{}:void 0}function Ys(e,t={}){return e.line?!0===e.line?{}:e.line:void 0!==e.line?null:t.line?!0===t.line?{}:t.line:void 0}class Xs{constructor(){Sn(this,"name","path-overlay")}hasMatchingType(e,t){if(Aa(e)){const{mark:n,encoding:i}=e,r=Hr(n)?n:{type:n};switch(r.type){case"line":case"rule":case"trail":return!!Gs(r,t[r.type],i);case"area":return!!Gs(r,t[r.type],i)||!!Ys(r,t[r.type])}}return!1}run(e,t,n){const{config:i}=t,{params:r,projection:o,mark:a,encoding:s,...u}=e,l=Sa(s,i),c=Hr(a)?a:{type:a},f=Gs(c,i[c.type],l),d="area"===c.type&&Ys(c,i[c.type]),g=[{...r?{params:r}:{},mark:Is({..."area"===c.type&&void 0===c.opacity&&void 0===c.fillOpacity?{opacity:.7}:{},...c}),encoding:m(l,["shape"])}],h=Hs(c,l);let y=l;if(h){const{fieldChannel:e,offset:t}=h;y={...l,[e]:{...l[e],...t?{stack:t}:{}}}}return d&&g.push({...o?{projection:o}:{},mark:{type:"line",...p(c,["clip","interpolate","tension","tooltip"]),...d},encoding:y}),f&&g.push({...o?{projection:o}:{},mark:{type:"point",opacity:1,filled:!0,...p(c,["clip","tooltip"]),...f},encoding:y}),n({...u,layer:g},{...t,config:Vs(i)})}}function Js(e,t){return t?Fo(e)?nu(e,t):Zs(e,t):e}function Qs(e,t){return t?nu(e,t):e}function Ks(e,n,i){const r=n[e];return(o=r)&&!t.isString(o)&&"repeat"in o?r.repeat in i?{...n,[e]:i[r.repeat]}:void ui(function(e){return`Unknown repeated value "${e}".`}(r.repeat)):n;var o}function Zs(e,t){if(void 0!==(e=Ks("field",e,t))){if(null===e)return null;if(So(e)&&Ao(e.sort)){const n=Ks("field",e.sort,t);e={...e,...n?{sort:n}:{}}}return e}}function eu(e,t){if(jo(e))return Zs(e,t);{const n=Ks("datum",e,t);return n===e||n.type||(n.type="nominal"),n}}function tu(e,t){if(!qo(e)){if(Po(e)){const n=eu(e.condition,t);if(n)return{...e,condition:n};{const{condition:t,...n}=e;return n}}return e}{const n=eu(e,t);if(n)return n;if(zo(e))return{condition:e.condition}}}function nu(e,n){const i={};for(const r in e)if(t.hasOwnProperty(e,r)){const o=e[r];if(t.isArray(o))i[r]=o.map((e=>tu(e,n))).filter((e=>e));else{const e=tu(o,n);void 0!==e&&(i[r]=e)}}return i}class iu{constructor(){Sn(this,"name","RuleForRangedLine")}hasMatchingType(e){if(Aa(e)){const{encoding:t,mark:n}=e;if("line"===n||Hr(n)&&"line"===n.type)for(const e of Je){const n=t[Ke(e)];if(t[e]&&(jo(n)&&!Qt(n.bin)||Mo(n)))return!0}}return!1}run(e,n,i){const{encoding:r,mark:o}=e;var a,s;return ui((a=!!r.x2,s=!!r.y2,`Line mark is for continuous lines and thus cannot be used with ${a&&s?"x2 and y2":a?"x2":"y2"}. We will use the rule mark (line segments) instead.`)),i({...e,mark:t.isObject(o)?{...o,type:"rule"}:"rule"},n)}}function ru({parentEncoding:e,encoding:n={},layer:i}){let r={};if(e){const o=new Set([...E(e),...E(n)]);for(const a of o){const o=n[a],s=e[a];if(qo(o)){const e={...s,...o};r[a]=e}else Po(o)?r[a]={...o,condition:{...s,...o.condition}}:o||null===o?r[a]=o:(i||Wo(s)||an(s)||qo(s)||t.isArray(s))&&(r[a]=s)}}else r=n;return!r||S(r)?void 0:r}function ou(e){const{parentProjection:t,projection:n}=e;return t&&n&&ui(function(e){const{parentProjection:t,projection:n}=e;return`Layer's shared projection ${g(t)} is overridden by a child projection ${g(n)}.`}({parentProjection:t,projection:n})),n??t}function au(e){return"filter"in e}function su(e){return"lookup"in e}function uu(e){return"pivot"in e}function lu(e){return"density"in e}function cu(e){return"quantile"in e}function fu(e){return"regression"in e}function du(e){return"loess"in e}function pu(e){return"sample"in e}function mu(e){return"window"in e}function gu(e){return"joinaggregate"in e}function hu(e){return"flatten"in e}function yu(e){return"calculate"in e}function vu(e){return"bin"in e}function bu(e){return"impute"in e}function xu(e){return"timeUnit"in e}function wu(e){return"aggregate"in e}function Au(e){return"stack"in e}function Du(e){return"fold"in e}function Fu(e,t){const{transform:n,...i}=e;if(n){return{...i,transform:n.map((e=>{if(au(e))return{filter:Cu(e,t)};if(vu(e)&&Kt(e.bin))return{...e,bin:ku(e.bin)};if(su(e)){const{selection:t,...n}=e.from;return t?{...e,from:{param:t,...n}}:e}return e}))}}return e}function $u(e,t){var i,r;const o=d(e);if(jo(o)&&Kt(o.bin)&&(o.bin=ku(o.bin)),Uo(o)&&null!==(i=o.scale)&&void 0!==i&&null!==(r=i.domain)&&void 0!==r&&r.selection){const{selection:e,...t}=o.scale.domain;o.scale.domain={...t,...e?{param:e}:{}}}if(zo(o))if(n.isArray(o.condition))o.condition=o.condition.map((e=>{const{selection:n,param:i,test:r,...o}=e;return i?e:{...o,test:Cu(e,t)}}));else{const{selection:e,param:n,test:i,...r}=$u(o.condition,t);o.condition=n?o.condition:{...r,test:Cu(o.condition,t)}}return o}function ku(e){const t=e.extent;if(null!=t&&t.selection){const{selection:n,...i}=t;return{...e,extent:{...i,param:n}}}return e}function Cu(e,t){const n=e=>c(e,(e=>{var n;const i={param:e,empty:t.emptySelections[e]??!0};return(n=t.selectionPredicates)[e]??(n[e]=[]),t.selectionPredicates[e].push(i),i}));return e.selection?n(e.selection):c(e.test||e.filter,(e=>e.selection?n(e.selection):e))}class Su extends Ts{map(e,t){const n=t.selections??[];if(e.params&&!Aa(e)){const t=[];for(const i of e.params)fs(i)?n.push(i):t.push(i);e.params=t}return t.selections=n,super.map(e,Eu(e,t))}mapUnit(e,t){const i=t.selections;if(!i||!i.length)return e;const r=(t.path??[]).concat(e.name),o=[];for(const t of i)if(t.views&&t.views.length)for(const i of t.views)(n.isString(i)&&(i===e.name||r.indexOf(i)>=0)||n.isArray(i)&&i.map((e=>r.indexOf(e))).every(((e,t,n)=>-1!==e&&(0===t||e>n[t-1]))))&&o.push(t);else o.push(t);return o.length&&(e.params=o),e}}for(const e of["mapFacet","mapRepeat","mapHConcat","mapVConcat","mapLayer"]){const t=Su.prototype[e];Su.prototype[e]=function(e,n){return t.call(this,e,Eu(e,n))}}function Eu(e,t){return e.name?{...t,path:(t.path??[]).concat(e.name)}:t}function Bu(e,t){void 0===t&&(t=_s(e.config));const n=function(e,t={}){const n={config:t};return Ou.map(_u.map(zu.map(e,n),n),n)}(e,t),{width:i,height:r}=e,o=function(e,t,n){let{width:i,height:r}=t;const o=Aa(e)||Ms(e),a={};o?"container"==i&&"container"==r?(a.type="fit",a.contains="padding"):"container"==i?(a.type="fit-x",a.contains="padding"):"container"==r&&(a.type="fit-y",a.contains="padding"):("container"==i&&(ui(On("width")),i=void 0),"container"==r&&(ui(On("height")),r=void 0));const s={type:"pad",...a,...n?Pu(n.autosize):{},...Pu(e.autosize)};"fit"!==s.type||o||(ui(zn),s.type="pad");"container"==i&&"fit"!=s.type&&"fit-x"!=s.type&&ui(Pn("width"));"container"==r&&"fit"!=s.type&&"fit-y"!=s.type&&ui(Pn("height"));if(f(s,{type:"pad"}))return;return s}(n,{width:i,height:r,autosize:e.autosize},t);return{...n,...o?{autosize:o}:{}}}const _u=new class extends Ts{constructor(...e){super(...e),Sn(this,"nonFacetUnitNormalizers",[La,Ha,Ja,new Xs,new iu])}map(e,t){if(Aa(e)){const n=Fa(e.encoding,Q),i=Fa(e.encoding,K),r=Fa(e.encoding,Z);if(n||i||r)return this.mapFacetedUnit(e,t)}return super.map(e,t)}mapUnit(e,t){const{parentEncoding:n,parentProjection:i}=t,r=Qs(e.encoding,t.repeater),o={...e,...r?{encoding:r}:{}};if(n||i)return this.mapUnitWithParentEncodingOrProjection(o,t);const a=this.mapLayerOrUnit.bind(this);for(const e of this.nonFacetUnitNormalizers)if(e.hasMatchingType(o,t.config))return e.run(o,t,a);return o}mapRepeat(e,n){return function(e){return!t.isArray(e.repeat)&&e.repeat.layer}(e)?this.mapLayerRepeat(e,n):this.mapNonLayerRepeat(e,n)}mapLayerRepeat(e,t){const{repeat:n,spec:i,...r}=e,{row:o,column:a,layer:s}=n,{repeater:u={},repeaterPrefix:l=""}=t;return o||a?this.mapRepeat({...e,repeat:{...o?{row:o}:{},...a?{column:a}:{}},spec:{repeat:{layer:s},spec:i}},t):{...r,layer:s.map((e=>{const n={...u,layer:e},r=`${(i.name||"")+l}child__layer_${O(e)}`,o=this.mapLayerOrUnit(i,{...t,repeater:n,repeaterPrefix:r});return o.name=r,o}))}}mapNonLayerRepeat(e,n){const{repeat:i,spec:r,data:o,...a}=e;!t.isArray(i)&&e.columns&&(e=m(e,["columns"]),ui(Rn("repeat")));const s=[],{repeater:u={},repeaterPrefix:l=""}=n,c=!t.isArray(i)&&i.row||[u?u.row:null],f=!t.isArray(i)&&i.column||[u?u.column:null],d=t.isArray(i)&&i||[u?u.repeat:null];for(const e of d)for(const o of c)for(const a of f){const c={repeat:e,row:o,column:a,layer:u.layer},f=(r.name||"")+l+"child__"+(t.isArray(i)?`${O(e)}`:(i.row?`row_${O(o)}`:"")+(i.column?`column_${O(a)}`:"")),d=this.map(r,{...n,repeater:c,repeaterPrefix:f});d.name=f,s.push(m(d,["data"]))}const p=t.isArray(i)?e.columns:i.column?i.column.length:1;return{data:r.data??o,align:"all",...a,columns:p,concat:s}}mapFacet(e,t){const{facet:n}=e;return Fo(n)&&e.columns&&(e=m(e,["columns"]),ui(Rn("facet"))),super.mapFacet(e,t)}mapUnitWithParentEncodingOrProjection(e,t){const{encoding:n,projection:i}=e,{parentEncoding:r,parentProjection:o,config:a}=t,s=ou({parentProjection:o,projection:i}),u=ru({parentEncoding:r,encoding:Qs(n,t.repeater)});return this.mapUnit({...e,...s?{projection:s}:{},...u?{encoding:u}:{}},{config:a})}mapFacetedUnit(e,t){const{row:n,column:i,facet:r,...o}=e.encoding,{mark:a,width:s,projection:u,height:l,view:c,params:f,encoding:d,...p}=e,{facetMapping:m,layout:g}=this.getFacetMappingAndLayout({row:n,column:i,facet:r},t),h=Qs(o,t.repeater);return this.mapFacet({...p,...g,facet:m,spec:{...s?{width:s}:{},...l?{height:l}:{},...c?{view:c}:{},...u?{projection:u}:{},mark:a,encoding:h,...f?{params:f}:{}}},t)}getFacetMappingAndLayout(e,t){const{row:n,column:i,facet:r}=e;if(n||i){r&&ui(`Facet encoding dropped as ${(o=[...n?[Q]:[],...i?[K]:[]]).join(" and ")} ${o.length>1?"are":"is"} also specified.`);const t={},a={};for(const n of[Q,K]){const i=e[n];if(i){const{align:e,center:r,spacing:o,columns:s,...u}=i;t[n]=u;for(const e of["align","center","spacing"])void 0!==i[e]&&(a[e]??(a[e]={}),a[e][n]=i[e])}}return{facetMapping:t,layout:a}}{const{align:e,center:n,spacing:i,columns:o,...a}=r;return{facetMapping:Js(a,t.repeater),layout:{...e?{align:e}:{},...n?{center:n}:{},...i?{spacing:i}:{},...o?{columns:o}:{}}}}var o}mapLayer(e,{parentEncoding:t,parentProjection:n,...i}){const{encoding:r,projection:o,...a}=e,s={...i,parentEncoding:ru({parentEncoding:t,encoding:r,layer:!0}),parentProjection:ou({parentProjection:n,projection:o})};return super.mapLayer(a,s)}},zu=new class extends Ts{map(e,t){return t.emptySelections??(t.emptySelections={}),t.selectionPredicates??(t.selectionPredicates={}),e=Fu(e,t),super.map(e,t)}mapLayerOrUnit(e,t){if((e=Fu(e,t)).encoding){const n={};for(const[i,r]of _(e.encoding))n[i]=$u(r,t);e={...e,encoding:n}}return super.mapLayerOrUnit(e,t)}mapUnit(e,t){const{selection:n,...i}=e;return n?{...i,params:_(n).map((([e,n])=>{const{init:i,bind:r,empty:o,...a}=n;"single"===a.type?(a.type="point",a.toggle=!1):"multi"===a.type&&(a.type="point"),t.emptySelections[e]="none"!==o;for(const n of B(t.selectionPredicates[e]??{}))n.empty="none"!==o;return{name:e,value:i,select:a,bind:r}}))}:e}},Ou=new Su;function Pu(e){return t.isString(e)?{type:e}:e??{}}class ju{constructor(e={},t={}){this.explicit=e,this.implicit=t}clone(){return new ju(d(this.explicit),d(this.implicit))}combine(){return{...this.explicit,...this.implicit}}get(e){return H(this.explicit[e],this.implicit[e])}getWithExplicit(e){return void 0!==this.explicit[e]?{explicit:!0,value:this.explicit[e]}:void 0!==this.implicit[e]?{explicit:!1,value:this.implicit[e]}:{explicit:!1,value:void 0}}setWithExplicit(e,{value:t,explicit:n}){void 0!==t&&this.set(e,t,n)}set(e,t,n){return delete this[n?"implicit":"explicit"][e],this[n?"explicit":"implicit"][e]=t,this}copyKeyFromSplit(e,{explicit:t,implicit:n}){void 0!==t[e]?this.set(e,t[e],!0):void 0!==n[e]&&this.set(e,n[e],!1)}copyKeyFromObject(e,t){void 0!==t[e]&&this.set(e,t[e],!0)}copyAll(e){for(const t of E(e.combine())){const n=e.getWithExplicit(t);this.setWithExplicit(t,n)}}}function Nu(e){return{explicit:!0,value:e}}function Mu(e){return{explicit:!1,value:e}}function Tu(e){return(t,n,i,r)=>{const o=e(t.value,n.value);return o>0?t:o<0?n:Lu(t,n,i,r)}}function Lu(e,t,n,i){return e.explicit&&t.explicit&&ui(function(e,t,n,i){return`Conflicting ${t.toString()} property "${e.toString()}" (${g(n)} and ${g(i)}). Using ${g(n)}.`}(n,i,e.value,t.value)),e}function qu(e,t,n,i,r=Lu){return void 0===e||void 0===e.value?t:e.explicit&&!t.explicit?e:t.explicit&&!e.explicit?t:f(e.value,t.value)?e:r(e,t,n,i)}class Ru extends ju{constructor(e={},t={},n=!1){super(e,t),this.explicit=e,this.implicit=t,this.parseNothing=n}clone(){const e=super.clone();return e.parseNothing=this.parseNothing,e}}function Wu(e){return"url"in e}function Uu(e){return"values"in e}function Hu(e){return"name"in e&&!Wu(e)&&!Uu(e)&&!Iu(e)}function Iu(e){return e&&(Vu(e)||Gu(e)||Yu(e))}function Vu(e){return"sequence"in e}function Gu(e){return"sphere"in e}function Yu(e){return"graticule"in e}let Xu;!function(e){e[e.Raw=0]="Raw",e[e.Main=1]="Main",e[e.Row=2]="Row",e[e.Column=3]="Column",e[e.Lookup=4]="Lookup"}(Xu||(Xu={}));const Ju="[",Qu="]",Ku=/[[\]{}]/,Zu={"*":1,arc:1,area:1,group:1,image:1,line:1,path:1,rect:1,rule:1,shape:1,symbol:1,text:1,trail:1};let el,tl;function nl(e,t,n){return el=t||"view",tl=n||Zu,rl(e.trim()).map(ol)}function il(e,t,n,i,r){const o=e.length;let a,s=0;for(;t=0?--s:i&&i.indexOf(a)>=0&&++s}return t}function rl(e){const t=[],n=e.length;let i=0,r=0;for(;r"!==(e=e.slice(i+1).trim())[0])throw"Expected '>' after between selector: "+e;n=n.map(ol);const r=ol(e.slice(1).trim());if(r.between)return{between:n,stream:r};r.between=n;return r}(e):function(e){const t={source:el},n=[];let i,r,o=[0,0],a=0,s=0,u=e.length,l=0;if("}"===e[u-1]){if(l=e.lastIndexOf("{"),!(l>=0))throw"Unmatched right brace: "+e;try{o=function(e){const t=e.split(",");if(!e.length||t.length>2)throw e;return t.map((t=>{const n=+t;if(n!=n)throw e;return n}))}(e.substring(l+1,u-1))}catch(t){throw"Invalid throttle specification: "+e}u=(e=e.slice(0,l).trim()).length,l=0}if(!u)throw e;"@"===e[0]&&(a=++l);i=il(e,l,":"),i1?(t.type=n[1],a?t.markname=n[0].slice(1):!function(e){return tl[e]}(n[0])?t.source=n[0]:t.marktype=n[0]):t.type=n[0];"!"===t.type.slice(-1)&&(t.consume=!0,t.type=t.type.slice(0,-1));null!=r&&(t.filter=r);o[0]&&(t.throttle=o[0]);o[1]&&(t.debounce=o[1]);return t}(e)}function al(e,n=!0,i=t.identity){if(t.isArray(e)){const t=e.map((e=>al(e,n,i)));return n?`[${t.join(", ")}]`:t}return li(e)?i(n?gi(e):function(e){const t=mi(e,!0);return e.utc?+new Date(Date.UTC(...t)):+new Date(...t)}(e)):n?i(g(e)):e}function sl(e,n){for(const i of B(e.component.selection??{})){const r=i.name;let o=`${r}${vc}, ${"global"===i.resolve?"true":`{unit: ${Ac(e)}}`}`;for(const t of wc)t.defined(i)&&(t.signals&&(n=t.signals(e,i,n)),t.modifyExpr&&(o=t.modifyExpr(e,i,o)));n.push({name:r+bc,on:[{events:{signal:i.name+vc},update:`modify(${t.stringValue(i.name+yc)}, ${o})`}]})}return cl(n)}function ul(e,n){if(e.component.selection&&E(e.component.selection).length){const i=t.stringValue(e.getName("cell"));n.unshift({name:"facet",value:{},on:[{events:nl("mousemove","scope"),update:`isTuple(facet) ? facet : group(${i}).datum`}]})}return cl(n)}function ll(e,t){for(const n of B(e.component.selection??{}))for(const i of wc)i.defined(n)&&i.marks&&(t=i.marks(e,n,t));return t}function cl(e){return e.map((e=>(e.on&&!e.on.length&&delete e.on,e)))}class fl{constructor(e,t){this.debugName=t,Sn(this,"_children",[]),Sn(this,"_parent",null),Sn(this,"_hash",void 0),e&&(this.parent=e)}clone(){throw new Error("Cannot clone node")}get parent(){return this._parent}set parent(e){this._parent=e,e&&e.addChild(this)}get children(){return this._children}numChildren(){return this._children.length}addChild(e,t){this._children.includes(e)?ui("Attempt to add the same child twice."):void 0!==t?this._children.splice(t,0,e):this._children.push(e)}removeChild(e){const t=this._children.indexOf(e);return this._children.splice(t,1),t}remove(){let e=this._parent.removeChild(this);for(const t of this._children)t._parent=this._parent,this._parent.addChild(t,e++)}insertAsParentOf(e){const t=e.parent;t.removeChild(this),this.parent=t,e.parent=this}swapWithParent(){const e=this._parent,t=e.parent;for(const t of this._children)t.parent=e;this._children=[],e.removeChild(this),e.parent.removeChild(e),this.parent=t,e.parent=this}}class dl extends fl{clone(){const e=new this.constructor;return e.debugName=`clone_${this.debugName}`,e._source=this._source,e._name=`clone_${this._name}`,e.type=this.type,e.refCounts=this.refCounts,e.refCounts[e._name]=0,e}constructor(e,t,n,i){super(e,t),this.type=n,this.refCounts=i,Sn(this,"_source",void 0),Sn(this,"_name",void 0),this._source=this._name=t,this.refCounts&&!(this._name in this.refCounts)&&(this.refCounts[this._name]=0)}dependentFields(){return new Set}producedFields(){return new Set}hash(){return void 0===this._hash&&(this._hash=`Output ${V()}`),this._hash}getSource(){return this.refCounts[this._name]++,this._source}isRequired(){return!!this.refCounts[this._name]}setSource(e){this._source=e}}class pl extends fl{clone(){return new pl(null,d(this.formula))}constructor(e,t){super(e),this.formula=t}static makeFromEncoding(e,t){const n=t.reduceFieldDef(((e,t)=>{const{field:n,timeUnit:i}=t;if(i){const r=Yo(t,{forAs:!0});e[h({as:r,field:n,timeUnit:i})]={as:r,field:n,timeUnit:i}}return e}),{});return S(n)?null:new pl(e,n)}static makeFromTransform(e,t){const{timeUnit:n,...i}={...t},r={...i,timeUnit:Fi(n)};return new pl(e,{[h(r)]:r})}merge(e){this.formula={...this.formula};for(const t in e.formula)this.formula[t]||(this.formula[t]=e.formula[t]);for(const t of e.children)e.removeChild(t),t.parent=this;e.remove()}removeFormulas(e){const t={};for(const[n,i]of _(this.formula))e.has(i.as)||(t[n]=i);this.formula=t}producedFields(){return new Set(B(this.formula).map((e=>e.as)))}dependentFields(){return new Set(B(this.formula).map((e=>e.field)))}hash(){return`TimeUnit ${h(this.formula)}`}assemble(){const e=[];for(const t of B(this.formula)){const{field:n,as:i,timeUnit:r}=t,{unit:o,utc:a,...s}=Fi(r);e.push({field:q(n),type:"timeunit",...o?{units:xi(o)}:{},...a?{timezone:"utc"}:{},...s,as:[i,`${i}_end`]})}return e}}const ml="_tuple_fields";class gl{constructor(...e){Sn(this,"hasChannel",void 0),Sn(this,"hasField",void 0),Sn(this,"timeUnit",void 0),Sn(this,"items",void 0),this.items=e,this.hasChannel={},this.hasField={}}}const hl={defined:()=>!0,parse:(e,n,i)=>{const r=n.name,o=n.project??(n.project=new gl),a={},s={},u=new Set,l=(e,t)=>{const n="visual"===t?e.channel:e.field;let i=O(`${r}_${n}`);for(let e=1;u.has(i);e++)i=O(`${r}_${n}_${e}`);return u.add(i),{[t]:i}},c=n.type,f=e.config.selection[c],d=void 0!==i.value?t.array(i.value):null;let{fields:p,encodings:m}=t.isObject(i.select)?i.select:{};if(!p&&!m&&d)for(const e of d)if(t.isObject(e))for(const t of E(e))Ye[t]?(m||(m=[])).push(t):"interval"===c?(ui('Interval selections should be initialized using "x" and/or "y" keys.'),m=f.encodings):(p||(p=[])).push(t);p||m||(m=f.encodings,"fields"in f&&(p=f.fields));for(const t of m??[]){const n=e.fieldDef(t);if(n){let i=n.field;if(n.aggregate){ui(Tn(t,n.aggregate));continue}if(!i){ui(Mn(t));continue}if(n.timeUnit){i=e.vgField(t);const r={timeUnit:n.timeUnit,as:i,field:n.field};s[h(r)]=r}if(!a[i]){let r="E";if("interval"===c){dr(e.getScaleComponent(t).get("type"))&&(r="R")}else n.bin&&(r="R-RE");const s={field:i,channel:t,type:r};s.signals={...l(s,"data"),...l(s,"visual")},o.items.push(a[i]=s),o.hasField[i]=o.hasChannel[t]=a[i]}}else ui(Mn(t))}for(const e of p??[]){if(o.hasField[e])continue;const t={type:"E",field:e};t.signals={...l(t,"data")},o.items.push(t),o.hasField[e]=t}d&&(n.init=d.map((e=>o.items.map((n=>t.isObject(e)?void 0!==e[n.channel]?e[n.channel]:e[n.field]:e))))),S(s)||(o.timeUnit=new pl(null,s))},signals:(e,t,n)=>{const i=t.name+ml;return n.filter((e=>e.name===i)).length>0?n:n.concat({name:i,value:t.project.items.map((e=>{const{signals:t,hasLegend:n,...i}=e;return i.field=q(i.field),i}))})}},yl={defined:e=>"interval"===e.type&&"global"===e.resolve&&e.bind&&"scales"===e.bind,parse:(e,t)=>{const n=t.scales=[];for(const i of t.project.items){const r=i.channel;if(!Pt(r))continue;const o=e.getScaleComponent(r),a=o?o.get("type"):void 0;o&&dr(a)?(o.set("selectionExtent",{param:t.name,field:i.field},!0),n.push(i)):ui("Scale bindings are currently only supported for scales with unbinned, continuous domains.")}},topLevelSignals:(e,n,i)=>{const r=n.scales.filter((e=>0===i.filter((t=>t.name===e.signals.data)).length));if(!e.parent||bl(e)||0===r.length)return i;const o=i.filter((e=>e.name===n.name))[0];let a=o.update;if(a.indexOf(xc)>=0)o.update=`{${r.map((e=>`${t.stringValue(q(e.field))}: ${e.signals.data}`)).join(", ")}}`;else{for(const e of r){const n=`${t.stringValue(q(e.field))}: ${e.signals.data}`;a.includes(n)||(a=`${a.substring(0,a.length-1)}, ${n}}`)}o.update=a}return i.concat(r.map((e=>({name:e.signals.data}))))},signals:(e,t,n)=>{if(e.parent&&!bl(e))for(const e of t.scales){const t=n.filter((t=>t.name===e.signals.data))[0];t.push="outer",delete t.value,delete t.update}return n}};function vl(e,n){return`domain(${t.stringValue(e.scaleName(n))})`}function bl(e){return e.parent&&Dm(e.parent)&&(!e.parent.parent??bl(e.parent.parent))}const xl="_brush",wl="_scale_trigger",Al={defined:e=>"interval"===e.type,signals:(e,n,i)=>{const r=n.name,o=r+ml,a=yl.defined(n),s=n.init?n.init[0]:null,u=[],l=[];if(n.translate&&!a){const e=`!event.item || event.item.mark.name !== ${t.stringValue(r+xl)}`;Dl(n,((n,i)=>{var r;const o=t.array((r=i.between[0]).filter??(r.filter=[]));return o.includes(e)||o.push(e),n}))}n.project.items.forEach(((r,o)=>{const a=r.channel;if(a!==ee&&a!==te)return void ui("Interval selections only support x and y encoding channels.");const c=s?s[o]:null,f=function(e,n,i,r){const o=i.channel,a=i.signals.visual,s=i.signals.data,u=yl.defined(n),l=t.stringValue(e.scaleName(o)),c=e.getScaleComponent(o),f=c?c.get("type"):void 0,d=e=>`scale(${l}, ${e})`,p=e.getSizeSignalRef(o===ee?"width":"height").signal,m=`${o}(unit)`,g=Dl(n,((e,t)=>[...e,{events:t.between[0],update:`[${m}, ${m}]`},{events:t,update:`[${a}[0], clamp(${m}, 0, ${p})]`}]));return g.push({events:{signal:n.name+wl},update:dr(f)?`[${d(`${s}[0]`)}, ${d(`${s}[1]`)}]`:"[0, 0]"}),u?[{name:s,on:[]}]:[{name:a,...r?{init:al(r,!0,d)}:{value:[]},on:g},{name:s,...r?{init:al(r)}:{},on:[{events:{signal:a},update:`${a}[0] === ${a}[1] ? null : invert(${l}, ${a})`}]}]}(e,n,r,c),d=r.signals.data,p=r.signals.visual,m=t.stringValue(e.scaleName(a)),g=dr(e.getScaleComponent(a).get("type"))?"+":"";i.push(...f),u.push(d),l.push({scaleName:e.scaleName(a),expr:`(!isArray(${d}) || (${g}invert(${m}, ${p})[0] === ${g}${d}[0] && ${g}invert(${m}, ${p})[1] === ${g}${d}[1]))`})})),!a&&l.length&&i.push({name:r+wl,value:{},on:[{events:l.map((e=>({scale:e.scaleName}))),update:`${l.map((e=>e.expr)).join(" && ")} ? ${r+wl} : {}`}]});const c=`unit: ${Ac(e)}, fields: ${o}, values`;return i.concat({name:r+vc,...s?{init:`{${c}: ${al(s)}}`}:{},...u.length?{on:[{events:[{signal:u.join(" || ")}],update:`${u.join(" && ")} ? {${c}: [${u}]} : null`}]}:{}})},marks:(e,n,i)=>{const r=n.name,{x:o,y:a}=n.project.hasChannel,s=o&&o.signals.visual,u=a&&a.signals.visual,l=`data(${t.stringValue(n.name+yc)})`;if(yl.defined(n)||!o&&!a)return i;const c={x:void 0!==o?{signal:`${s}[0]`}:{value:0},y:void 0!==a?{signal:`${u}[0]`}:{value:0},x2:void 0!==o?{signal:`${s}[1]`}:{field:{group:"width"}},y2:void 0!==a?{signal:`${u}[1]`}:{field:{group:"height"}}};if("global"===n.resolve)for(const t of E(c))c[t]=[{test:`${l}.length && ${l}[0].unit === ${Ac(e)}`,...c[t]},{value:0}];const{fill:f,fillOpacity:d,cursor:p,...m}=n.mark,g=E(m).reduce(((e,t)=>(e[t]=[{test:[void 0!==o&&`${s}[0] !== ${s}[1]`,void 0!==a&&`${u}[0] !== ${u}[1]`].filter((e=>e)).join(" && "),value:m[t]},{value:null}],e)),{});return[{name:`${r+xl}_bg`,type:"rect",clip:!0,encode:{enter:{fill:{value:f},fillOpacity:{value:d}},update:c}},...i,{name:r+xl,type:"rect",clip:!0,encode:{enter:{...p?{cursor:{value:p}}:{},fill:{value:"transparent"}},update:{...c,...g}}}]}};function Dl(e,t){return e.events.reduce(((e,n)=>n.between?t(e,n):(ui(`${n} is not an ordered event stream for interval selections.`),e)),[])}const Fl={defined:e=>"point"===e.type,signals:(e,n,i)=>{const r=n.name,o=r+ml,a=n.project,s="(item().isVoronoi ? datum.datum : datum)",u=a.items.map((n=>{const i=e.fieldDef(n.channel);return null!=i&&i.bin?`[${s}[${t.stringValue(e.vgField(n.channel,{}))}], ${s}[${t.stringValue(e.vgField(n.channel,{binSuffix:"end"}))}]]`:`${s}[${t.stringValue(n.field)}]`})).join(", "),l=`unit: ${Ac(e)}, fields: ${o}, values`,c=n.events,f=B(e.component.selection??{}).reduce(((e,t)=>"interval"===t.type?e.concat(t.name+xl):e),[]).map((e=>`indexof(item().mark.name, '${e}') < 0`)).join(" && "),d="datum && item().mark.marktype !== 'group'"+(f?` && ${f}`:"");return i.concat([{name:r+vc,on:c?[{events:c,update:`${d} ? {${l}: [${u}]} : null`,force:!0}]:[]}])}};function $l(e,n,i,r){const o=zo(n)&&n.condition,a=r(n);if(o){return{[i]:[...t.array(o).map((t=>{const n=r(t);if(function(e){return e.param}(t)){const{param:i,empty:r}=t;return{test:Yf(e,{param:i,empty:r}),...n}}return{test:Jf(e,t.test),...n}})),...void 0!==a?[a]:[]]}}return void 0!==a?{[i]:a}:{}}function kl(e,t="text"){const n=e.encoding[t];return $l(e,n,t,(t=>Cl(t,e.config)))}function Cl(e,t,n="datum"){if(e){if(Wo(e))return gn(e.value);if(qo(e)){const{format:i,formatType:r}=na(e);return uo({fieldOrDatumDef:e,format:i,formatType:r,expr:n,config:t})}}}function Sl(e,n={}){const{encoding:i,markDef:r,config:o,stack:a}=e,s=i.tooltip;if(t.isArray(s))return{tooltip:Bl({tooltip:s},a,o,n)};{const u=n.reactiveGeom?"datum.datum":"datum";return $l(e,s,"tooltip",(e=>{const s=Cl(e,o,u);if(s)return s;if(null===e)return;let l=xn("tooltip",r,o);return!0===l&&(l={content:"encoding"}),t.isString(l)?{value:l}:t.isObject(l)?an(l)?l:"encoding"===l.content?Bl(i,a,o,n):{signal:u}:void 0}))}}function El(e,n,i,{reactiveGeom:r}={}){const o={},a=r?"datum.datum":"datum",s=[];function u(r,u){const l=Ke(u),c=Ro(r)?r:{...r,type:e[l].type},f=c.title||ta(c,i),d=t.array(f).join(", ");let p;if(vt(u)){const t="x"===u?"x2":"y2",r=ia(e[t]);if(Qt(c.bin)&&r){const e=Yo(c,{expr:a}),n=Yo(r,{expr:a}),{format:s,formatType:u}=na(c);p=yo(e,n,s,u,i),o[t]=!0}else if(n&&n.fieldChannel===u&&"normalize"===n.offset){const{format:e,formatType:t}=na(c);p=uo({fieldOrDatumDef:c,format:e,formatType:t,expr:a,config:i,normalizeStack:!0}).signal}}p??(p=Cl(c,i,a).signal),s.push({channel:u,key:d,value:p})}Ea(e,((e,t)=>{jo(e)?u(e,t):Oo(e)&&u(e.condition,t)}));const l={};for(const{channel:e,key:t,value:n}of s)o[e]||l[t]||(l[t]=n);return l}function Bl(e,t,n,{reactiveGeom:i}={}){const r=El(e,t,n,{reactiveGeom:i}),o=_(r).map((([e,t])=>`"${e}": ${t}`));return o.length>0?{signal:`{${o.join(", ")}}`}:void 0}function _l(e){const{markDef:t,config:n}=e,i=xn("aria",t,n);return!1===i?{}:{...i?{aria:i}:{},...zl(e),...Ol(e)}}function zl(e){const{mark:t,markDef:n,config:i}=e;if(!1===i.aria)return{};const r=xn("ariaRoleDescription",n,i);return null!=r?{ariaRoleDescription:{value:r}}:t in cn?{}:{ariaRoleDescription:{value:t}}}function Ol(e){const{encoding:t,markDef:n,config:i,stack:r}=e,o=t.description;if(o)return $l(e,o,"description",(t=>Cl(t,e.config)));const a=xn("description",n,i);if(null!=a)return{description:gn(a)};if(!1===i.aria)return{};const s=El(t,r,i);return S(s)?void 0:{description:{signal:_(s).map((([e,t],n)=>`"${n>0?"; ":""}${e}: " + (${t})`)).join(" + ")}}}function Pl(e,t,n={}){const{markDef:i,encoding:r,config:o}=t,{vgChannel:a}=n;let{defaultRef:s,defaultValue:u}=n;void 0===s&&(u??(u=xn(e,i,o,{vgChannel:a,ignoreVgConfig:!0})),void 0!==u&&(s=gn(u)));const l=r[e];return $l(t,l,a??e,(n=>ro({channel:e,channelDef:n,markDef:i,config:o,scaleName:t.scaleName(e),scale:t.getScaleComponent(e),stack:null,defaultRef:s})))}function jl(e,t={filled:void 0}){const{markDef:n,encoding:i,config:r}=e,{type:o}=n,a=t.filled??xn("filled",n,r),s=v(["bar","point","circle","square","geoshape"],o)?"transparent":void 0,u=xn(!0===a?"color":void 0,n,r,{vgChannel:"fill"})??r.mark[!0===a&&"color"]??s,l=xn(!1===a?"color":void 0,n,r,{vgChannel:"stroke"})??r.mark[!1===a&&"color"],c=a?"fill":"stroke",f={...u?{fill:gn(u)}:{},...l?{stroke:gn(l)}:{}};return n.color&&(a?n.fill:n.stroke)&&ui(In("property",{fill:"fill"in n,stroke:"stroke"in n})),{...f,...Pl("color",e,{vgChannel:c,defaultValue:a?u:l}),...Pl("fill",e,{defaultValue:i.fill?u:void 0}),...Pl("stroke",e,{defaultValue:i.stroke?l:void 0})}}function Nl(e){const{encoding:t,mark:n}=e,i=t.order;return!Rr(n)&&Wo(i)?$l(e,i,"zindex",(e=>gn(e.value))):{}}function Ml(e,t){const n=t[function(e){switch(e){case ee:return"xOffset";case te:return"yOffset";case ne:return"x2Offset";case ie:return"y2Offset";case ae:return"thetaOffset";case re:return"radiusOffset";case se:return"theta2Offset";case oe:return"radius2Offset"}}(e)];if(n)return n}function Tl(e,t,{defaultPos:n,vgChannel:i}){const{encoding:r,markDef:o,config:a,stack:s}=t,u=r[e],l=r[et(e)],c=t.scaleName(e),f=t.getScaleComponent(e),d=Ml(e,o),p=Ll({model:t,defaultPos:n,channel:e,scaleName:c,scale:f}),m=!u&&vt(e)&&(r.latitude||r.longitude)?{field:t.getName(e)}:function(e){const{channel:t,channelDef:n,scaleName:i,stack:r,offset:o,markDef:a}=e;if(qo(n)&&r&&t===r.fieldChannel){if(jo(n)){let e=n.bandPosition;if(void 0!==e||"text"!==a.type||"radius"!==t&&"theta"!==t||(e=.5),void 0!==e)return io({scaleName:i,fieldOrDatumDef:n,startSuffix:"start",bandPosition:e,offset:o})}return no(n,i,{suffix:"end"},{offset:o})}return Kr(e)}({channel:e,channelDef:u,channel2Def:l,markDef:o,config:a,scaleName:c,scale:f,stack:s,offset:d,defaultRef:p});return m?{[i||e]:m}:void 0}function Ll({model:e,defaultPos:t,channel:n,scaleName:i,scale:r}){const{markDef:o,config:a}=e;return()=>{const s=Ke(n),u=Ze(n),l=xn(n,o,a,{vgChannel:u});if(void 0!==l)return oo(n,l);switch(t){case"zeroOrMin":case"zeroOrMax":if(i){const e=r.get("type");if(v([Ui,Gi,Yi],e));else if(r.domainDefinitelyIncludesZero())return{scale:i,value:0}}if("zeroOrMin"===t)return"y"===s?{field:{group:"height"}}:{value:0};switch(s){case"radius":return{signal:`min(${e.width.signal},${e.height.signal})/2`};case"theta":return{signal:"2*PI"};case"x":return{field:{group:"width"}};case"y":return{value:0}}break;case"mid":return{...e[tt(n)],mult:.5}}}}const ql={left:"x",center:"xc",right:"x2"},Rl={top:"y",middle:"yc",bottom:"y2"};function Wl(e,t,n,i="middle"){if("radius"===e||"theta"===e)return Ze(e);const r="x"===e?"align":"baseline",o=xn(r,t,n);let a;return an(o)?(ui(function(e){return`The ${e} for range marks cannot be an expression`}(r)),a=void 0):a=o,"x"===e?ql[a||("top"===i?"left":"center")]:Rl[a||i]}function Ul(e,t,{defaultPos:n,defaultPos2:i,range:r}){return r?Hl(e,t,{defaultPos:n,defaultPos2:i}):Tl(e,t,{defaultPos:n})}function Hl(e,t,{defaultPos:n,defaultPos2:i}){const{markDef:r,config:o}=t,a=et(e),s=tt(e),u=function(e,t,n){const{encoding:i,mark:r,markDef:o,stack:a,config:s}=e,u=Ke(n),l=tt(n),c=Ze(n),f=i[u],d=e.scaleName(u),p=e.getScaleComponent(u),m=Ml(n in i||n in o?n:u,e.markDef);if(!f&&("x2"===n||"y2"===n)&&(i.latitude||i.longitude)){const t=tt(n),i=e.markDef[t];return null!=i?{[t]:{value:i}}:{[c]:{field:e.getName(n)}}}const g=function({channel:e,channelDef:t,channel2Def:n,markDef:i,config:r,scaleName:o,scale:a,stack:s,offset:u,defaultRef:l}){if(qo(t)&&s&&e.charAt(0)===s.fieldChannel.charAt(0))return no(t,o,{suffix:"start"},{offset:u});return Kr({channel:e,channelDef:n,scaleName:o,scale:a,stack:s,markDef:i,config:r,offset:u,defaultRef:l})}({channel:n,channelDef:f,channel2Def:i[n],markDef:o,config:s,scaleName:d,scale:p,stack:a,offset:m,defaultRef:void 0});if(void 0!==g)return{[c]:g};return Il(n,o)||Il(n,{[n]:An(n,o,s.style),[l]:An(l,o,s.style)})||Il(n,s[r])||Il(n,s.mark)||{[c]:Ll({model:e,defaultPos:t,channel:n,scaleName:d,scale:p})()}}(t,i,a);return{...Tl(e,t,{defaultPos:n,vgChannel:u[s]?Wl(e,r,o):Ze(e)}),...u}}function Il(e,t){const n=tt(e),i=Ze(e);if(void 0!==t[i])return{[i]:oo(e,t[i])};if(void 0!==t[e])return{[i]:oo(e,t[e])};if(t[n]){const i=t[n];if(!Yr(i))return{[n]:oo(e,i)};ui(function(e){return`Position range does not support relative band size for ${e}.`}(n))}}function Vl(e,n,i){const{config:r,encoding:o,markDef:a}=e,s=et(n),u=tt(n),l=o[n],c=o[s],f=e.getScaleComponent(n),d=f?f.get("type"):void 0,p=e.scaleName(n),m=a.orient,g=o[u]??o.size??xn("size",a,r,{vgChannel:u}),h="bar"===i&&("x"===n?"vertical"===m:"horizontal"===m);if(!jo(l)||!(Jt(l.bin)||Qt(l.bin)||l.timeUnit&&!c)||g&&!Yr(g)||fr(d))return(qo(l)&&fr(d)||h)&&!c?function(e,n,i){const{markDef:r,encoding:o,config:a,stack:s}=i,u=r.orient,l=i.scaleName(n),c=i.getScaleComponent(n),f=tt(n),d=et(n),p="horizontal"===u&&"y"===n||"vertical"===u&&"x"===n;let m;(o.size||r.size)&&(p?m=Pl("size",i,{vgChannel:f,defaultRef:gn(r.size)}):ui(function(e){return`Cannot apply size to non-oriented mark "${e}".`}(r.type)));const g=Bo({channel:n,fieldDef:e,markDef:r,config:a,scaleType:null==c?void 0:c.get("type"),useVlSizeChannel:p});m=m||{[f]:Gl(f,l,c,a,g)};const h="band"===(null==c?void 0:c.get("type"))&&"band"in m[f]?"top":"middle",y=Wl(n,r,a,h),v="xc"===y||"yc"===y,b=Ml(n,r),x=Kr({channel:n,channelDef:e,markDef:r,config:a,scaleName:l,scale:c,stack:s,offset:b,defaultRef:Ll({model:i,defaultPos:"mid",channel:n,scaleName:l,scale:c}),bandPosition:v?.5:an(g)?{signal:`(1-${g})/2`}:Yr(g)?(1-g.band)/2:0});if(f)return{[y]:x,...m};{const e=Ze(d),n=m[f],i=b?{...n,offset:b}:n;return{[y]:x,[e]:t.isArray(x)?[x[0],{...x[1],offset:i}]:{...x,offset:i}}}}(l,n,e):Hl(n,e,{defaultPos:"zeroOrMax",defaultPos2:"zeroOrMin"});{var y;const t=Bo({channel:n,fieldDef:l,markDef:a,config:r,scaleType:d}),i=null===(y=e.component.axes[n])||void 0===y?void 0:y[0];return function({fieldDef:e,fieldDef2:t,channel:n,bandSize:i,scaleName:r,markDef:o,spacing:a=0,axisTranslate:s,reverse:u,config:l}){const c=et(n),f=Ze(n),d=Ze(c),p=Ml(n,o),m=an(i)?{signal:`(1-${i.signal})/2`}:Yr(i)?(1-i.band)/2:.5;if(Jt(e.bin)||e.timeUnit)return{[d]:Xl({channel:n,fieldDef:e,scaleName:r,markDef:o,bandPosition:m,offset:Yl(c,a,u,s,p),config:l}),[f]:Xl({channel:n,fieldDef:e,scaleName:r,markDef:o,bandPosition:an(m)?{signal:`1-${m.signal}`}:1-m,offset:Yl(n,a,u,s,p),config:l})};if(Qt(e.bin)){const i=no(e,r,{},{offset:Yl(c,a,u,s,p)});if(jo(t))return{[d]:i,[f]:no(t,r,{},{offset:Yl(n,a,u,s,p)})};if(Kt(e.bin)&&e.bin.step)return{[d]:i,[f]:{signal:`scale("${r}", ${Yo(e,{expr:"datum"})} + ${e.bin.step})`,offset:Yl(n,a,u,s,p)}}}return void ui(oi(c))}({fieldDef:l,fieldDef2:c,channel:n,markDef:a,scaleName:p,bandSize:t,axisTranslate:(null==i?void 0:i.get("translate"))??.5,spacing:vt(n)?xn("binSpacing",a,r):void 0,reverse:f.get("reverse"),config:r})}}function Gl(e,n,i,r,o){if(Yr(o)){if(!i)return{mult:o.band,field:{group:e}};{const e=i.get("type");if("band"===e)return{scale:n,band:o.band};1!==o.band&&(ui(function(e){return`Cannot use the relative band size with ${e} scale.`}(e)),o=void 0)}}else{if(an(o))return o;if(o)return{value:o}}if(i){const e=i.get("range");if(sn(e)&&t.isNumber(e.step))return{value:e.step-2}}return{value:As(r.view,e)-2}}function Yl(e,t,n,i,r){if(ze(e))return 0;const o="x"===e||"y2"===e?-t/2:t/2;if(an(n)||an(r)||an(i)){const e=yn(n),t=yn(r),a=yn(i);return{signal:(a?`${a} + `:"")+(e?`(${e} ? -1 : 1) * `:"")+(t?`(${t} + ${o})`:o)}}return r=r||0,i+(n?-r-o:+r+o)}function Xl({channel:e,fieldDef:t,scaleName:n,markDef:i,bandPosition:r,offset:o,config:a}){return Zr({fieldDef:t,channel:e,markDef:i,ref:io({scaleName:n,fieldOrDatumDef:t,bandPosition:r,offset:o}),config:a})}const Jl=new Set(["aria","width","height"]);function Ql(e,t){const{fill:n,stroke:i}="include"===t.color?jl(e):{};return{...Zl(e.markDef,t),...Kl(e,"fill",n),...Kl(e,"stroke",i),...Pl("opacity",e),...Pl("fillOpacity",e),...Pl("strokeOpacity",e),...Pl("strokeWidth",e),...Pl("strokeDash",e),...Nl(e),...Sl(e),...kl(e,"href"),..._l(e)}}function Kl(e,n,i){const{config:r,mark:o,markDef:a}=e;if("hide"===xn("invalid",a,r)&&i&&!Rr(o)){const r=function(e,{invalid:t=!1,channels:n}){const i=n.reduce(((t,n)=>{const i=e.getScaleComponent(n);if(i){const r=i.get("type"),o=e.vgField(n,{expr:"datum"});o&&dr(r)&&(t[o]=!0)}return t}),{}),r=E(i);if(r.length>0){const e=t?"||":"&&";return r.map((e=>to(e,t))).join(` ${e} `)}return}(e,{invalid:!0,channels:Ot});if(r)return{[n]:[{test:r,value:null},...t.array(i)]}}return i?{[n]:i}:{}}function Zl(e,t){return ln.reduce(((n,i)=>(Jl.has(i)||void 0===e[i]||"ignore"===t[i]||(n[i]=gn(e[i])),n)),{})}function ec(e){const{config:t,markDef:n}=e;if(xn("invalid",n,t)){const t=function(e,{invalid:t=!1,channels:n}){const i=n.reduce(((t,n)=>{const i=e.getScaleComponent(n);if(i){const r=i.get("type"),o=e.vgField(n,{expr:"datum"});o&&dr(r)&&(t[o]=!0)}return t}),{}),r=E(i);if(r.length>0){const e=t?"||":"&&";return r.map((e=>to(e,t))).join(` ${e} `)}return}(e,{channels:yt});if(t)return{defined:{signal:t}}}return{}}function tc(e,t){if(void 0!==t)return{[e]:gn(t)}}const nc="voronoi",ic={defined:e=>"point"===e.type&&e.nearest,parse:(e,t)=>{if(t.events)for(const n of t.events)n.markname=e.getName(nc)},marks:(e,t,n)=>{const{x:i,y:r}=t.project.hasChannel,o=e.mark;if(Rr(o))return ui(`The "nearest" transform is not supported for ${o} marks.`),n;const a={name:e.getName(nc),type:"path",interactive:!0,from:{data:e.getName("marks")},encode:{update:{fill:{value:"transparent"},strokeWidth:{value:.35},stroke:{value:"transparent"},isVoronoi:{value:!0},...Sl(e,{reactiveGeom:!0})}},transform:[{type:"voronoi",x:{expr:i||!r?"datum.datum.x || 0":"0"},y:{expr:r||!i?"datum.datum.y || 0":"0"},size:[e.getSizeSignalRef("width"),e.getSizeSignalRef("height")]}]};let s=0,u=!1;return n.forEach(((t,n)=>{const i=t.name??"";i===e.component.mark[0].name?s=n:i.indexOf(nc)>=0&&(u=!0)})),u||n.splice(s+1,0,a),n}},rc={defined:e=>"point"===e.type&&"global"===e.resolve&&e.bind&&"scales"!==e.bind&&!ls(e.bind),parse:(e,t,n)=>Fc(t,n),topLevelSignals:(e,n,i)=>{const r=n.name,o=n.project,a=n.bind,s=n.init&&n.init[0],u=ic.defined(n)?"(item().isVoronoi ? datum.datum : datum)":"datum";return o.items.forEach(((e,o)=>{const l=O(`${r}_${e.field}`);i.filter((e=>e.name===l)).length||i.unshift({name:l,...s?{init:al(s[o])}:{value:null},on:n.events?[{events:n.events,update:`datum && item().mark.marktype !== 'group' ? ${u}[${t.stringValue(e.field)}] : null`}]:[],bind:a[e.field]??a[e.channel]??a})})),i},signals:(e,t,n)=>{const i=t.name,r=t.project,o=n.filter((e=>e.name===i+vc))[0],a=i+ml,s=r.items.map((e=>O(`${i}_${e.field}`))),u=s.map((e=>`${e} !== null`)).join(" && ");return s.length&&(o.update=`${u} ? {fields: ${a}, values: [${s.join(", ")}]} : null`),delete o.value,delete o.on,n}},oc="_toggle",ac={defined:e=>"point"===e.type&&!!e.toggle,signals:(e,t,n)=>n.concat({name:t.name+oc,value:!1,on:[{events:t.events,update:t.toggle}]}),modifyExpr:(e,t)=>{const n=t.name+vc,i=t.name+oc;return`${i} ? null : ${n}, `+("global"===t.resolve?`${i} ? null : true, `:`${i} ? null : {unit: ${Ac(e)}}, `)+`${i} ? ${n} : null`}},sc={defined:e=>void 0!==e.clear&&!1!==e.clear,parse:(e,n)=>{n.clear&&(n.clear=t.isString(n.clear)?nl(n.clear,"view"):n.clear)},topLevelSignals:(e,t,n)=>{if(rc.defined(t))for(const e of t.project.items){const i=n.findIndex((n=>n.name===O(`${t.name}_${e.field}`)));-1!==i&&n[i].on.push({events:t.clear,update:"null"})}return n},signals:(e,t,n)=>{function i(e,i){-1!==e&&n[e].on&&n[e].on.push({events:t.clear,update:i})}if("interval"===t.type)for(const e of t.project.items){const t=n.findIndex((t=>t.name===e.signals.visual));if(i(t,"[0, 0]"),-1===t){i(n.findIndex((t=>t.name===e.signals.data)),"null")}}else{let e=n.findIndex((e=>e.name===t.name+vc));i(e,"null"),ac.defined(t)&&(e=n.findIndex((e=>e.name===t.name+oc)),i(e,"false"))}return n}},uc={defined:e=>{const t="global"===e.resolve&&e.bind&&ls(e.bind),n=1===e.project.items.length&&e.project.items[0].field!==ss;return t&&!n&&ui("Legend bindings are only supported for selections over an individual field or encoding channel."),t&&n},parse:(e,i,r)=>{const o=d(r);if(o.select=t.isString(o.select)?{type:o.select,toggle:i.toggle}:{...o.select,toggle:i.toggle},Fc(i,o),n.isObject(r.select)&&(r.select.on||r.select.clear)){const e='event.item && indexof(event.item.mark.role, "legend") < 0';for(const n of i.events)n.filter=t.array(n.filter??[]),n.filter.includes(e)||n.filter.push(e)}const a=cs(i.bind)?i.bind.legend:"click",s=t.isString(a)?nl(a,"view"):t.array(a);i.bind={legend:{merge:s}}},topLevelSignals:(e,t,n)=>{const i=t.name,r=cs(t.bind)&&t.bind.legend,o=e=>t=>{const n=d(t);return n.markname=e,n};for(const e of t.project.items){if(!e.hasLegend)continue;const a=`${O(e.field)}_legend`,s=`${i}_${a}`;if(0===n.filter((e=>e.name===s)).length){const e=r.merge.map(o(`${a}_symbols`)).concat(r.merge.map(o(`${a}_labels`))).concat(r.merge.map(o(`${a}_entries`)));n.unshift({name:s,...t.init?{}:{value:null},on:[{events:e,update:"datum.value || item().items[0].items[0].datum.value",force:!0},{events:r.merge,update:`!event.item || !datum ? null : ${s}`,force:!0}]})}}return n},signals:(e,t,n)=>{const i=t.name,r=t.project,o=n.find((e=>e.name===i+vc)),a=i+ml,s=r.items.filter((e=>e.hasLegend)).map((e=>O(`${i}_${O(e.field)}_legend`))),u=`${s.map((e=>`${e} !== null`)).join(" && ")} ? {fields: ${a}, values: [${s.join(", ")}]} : null`;t.events&&s.length>0?o.on.push({events:s.map((e=>({signal:e}))),update:u}):s.length>0&&(o.update=u,delete o.value,delete o.on);const l=n.find((e=>e.name===i+oc)),c=cs(t.bind)&&t.bind.legend;return l&&(t.events?l.on.push({...l.on[0],events:c}):l.on[0].events=c),n}};const lc="_translate_anchor",cc="_translate_delta",fc={defined:e=>"interval"===e.type&&e.translate,signals:(e,t,n)=>{const i=t.name,r=yl.defined(t),o=i+lc,{x:a,y:s}=t.project.hasChannel;let u=nl(t.translate,"scope");return r||(u=u.map((e=>(e.between[0].markname=i+xl,e)))),n.push({name:o,value:{},on:[{events:u.map((e=>e.between[0])),update:"{x: x(unit), y: y(unit)"+(void 0!==a?`, extent_x: ${r?vl(e,ee):`slice(${a.signals.visual})`}`:"")+(void 0!==s?`, extent_y: ${r?vl(e,te):`slice(${s.signals.visual})`}`:"")+"}"}]},{name:i+cc,value:{},on:[{events:u,update:`{x: ${o}.x - x(unit), y: ${o}.y - y(unit)}`}]}),void 0!==a&&dc(e,t,a,"width",n),void 0!==s&&dc(e,t,s,"height",n),n}};function dc(e,t,n,i,r){const o=t.name,a=o+lc,s=o+cc,u=n.channel,l=yl.defined(t),c=r.filter((e=>e.name===n.signals[l?"data":"visual"]))[0],f=e.getSizeSignalRef(i).signal,d=e.getScaleComponent(u),p=d.get("type"),m=d.get("reverse"),g=`${a}.extent_${u}`,h=`${l?"log"===p?"panLog":"symlog"===p?"panSymlog":"pow"===p?"panPow":"panLinear":"panLinear"}(${g}, ${`${l?u===ee?m?"":"-":m?"-":"":""}${s}.${u} / ${l?`${f}`:`span(${g})`}`}${l?"pow"===p?`, ${d.get("exponent")??1}`:"symlog"===p?`, ${d.get("constant")??1}`:"":""})`;c.on.push({events:{signal:s},update:l?h:`clampRange(${h}, 0, ${f})`})}const pc="_zoom_anchor",mc="_zoom_delta",gc={defined:e=>"interval"===e.type&&e.zoom,signals:(e,n,i)=>{const r=n.name,o=yl.defined(n),a=r+mc,{x:s,y:u}=n.project.hasChannel,l=t.stringValue(e.scaleName(ee)),c=t.stringValue(e.scaleName(te));let f=nl(n.zoom,"scope");return o||(f=f.map((e=>(e.markname=r+xl,e)))),i.push({name:r+pc,on:[{events:f,update:o?"{"+[l?`x: invert(${l}, x(unit))`:"",c?`y: invert(${c}, y(unit))`:""].filter((e=>!!e)).join(", ")+"}":"{x: x(unit), y: y(unit)}"}]},{name:a,on:[{events:f,force:!0,update:"pow(1.001, event.deltaY * pow(16, event.deltaMode))"}]}),void 0!==s&&hc(e,n,s,"width",i),void 0!==u&&hc(e,n,u,"height",i),i}};function hc(e,t,n,i,r){const o=t.name,a=n.channel,s=yl.defined(t),u=r.filter((e=>e.name===n.signals[s?"data":"visual"]))[0],l=e.getSizeSignalRef(i).signal,c=e.getScaleComponent(a),f=c.get("type"),d=s?vl(e,a):u.name,p=o+mc,m=`${s?"log"===f?"zoomLog":"symlog"===f?"zoomSymlog":"pow"===f?"zoomPow":"zoomLinear":"zoomLinear"}(${d}, ${`${o}${pc}.${a}`}, ${p}${s?"pow"===f?`, ${c.get("exponent")??1}`:"symlog"===f?`, ${c.get("constant")??1}`:"":""})`;u.on.push({events:{signal:p},update:s?m:`clampRange(${m}, 0, ${l})`})}const yc="_store",vc="_tuple",bc="_modify",xc="vlSelectionResolve",wc=[Fl,Al,hl,ac,rc,yl,uc,sc,fc,gc,ic];function Ac(e,{escape:n}={escape:!0}){let i=n?t.stringValue(e.name):e.name;const r=function(e){let t=e.parent;for(;t&&!wm(t);)t=t.parent;return t}(e);if(r){const{facet:e}=r;for(const n of Te)e[n]&&(i+=` + '__facet_${n}_' + (facet[${t.stringValue(r.vgField(n))}])`)}return i}function Dc(e){return B(e.component.selection??{}).reduce(((e,t)=>e||t.project.items.some((e=>e.field===ss))),!1)}function Fc(e,t){!n.isString(t.select)&&t.select.on||delete e.events,!n.isString(t.select)&&t.select.clear||delete e.clear,!n.isString(t.select)&&t.select.toggle||delete e.toggle}const $c="RawCode",kc="Literal",Cc="Property",Sc="Identifier",Ec="ArrayExpression",Bc="BinaryExpression",_c="CallExpression",zc="ConditionalExpression",Oc="LogicalExpression",Pc="MemberExpression",jc="ObjectExpression",Nc="UnaryExpression";function Mc(e){this.type=e}var Tc,Lc,qc,Rc,Wc;Mc.prototype.visit=function(e){let t,n,i;if(e(this))return 1;for(t=function(e){switch(e.type){case Ec:return e.elements;case Bc:case Oc:return[e.left,e.right];case _c:return[e.callee].concat(e.arguments);case zc:return[e.test,e.consequent,e.alternate];case Pc:return[e.object,e.property];case jc:return e.properties;case Cc:return[e.key,e.value];case Nc:return[e.argument];case Sc:case kc:case $c:default:return[]}}(this),n=0,i=t.length;n",Tc[3]="Identifier",Tc[4]="Keyword",Tc[5]="Null",Tc[6]="Numeric",Tc[7]="Punctuator",Tc[8]="String",Tc[9]="RegularExpression";var Uc="Identifier",Hc="Unexpected token %0",Ic="Invalid regular expression",Vc="Invalid regular expression: missing /",Gc="Octal literals are not allowed in strict mode.",Yc="ILLEGAL",Xc="Disabled.",Jc=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),Qc=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]");function Kc(e,t){if(!e)throw new Error("ASSERT: "+t)}function Zc(e){return e>=48&&e<=57}function ef(e){return"0123456789abcdefABCDEF".indexOf(e)>=0}function tf(e){return"01234567".indexOf(e)>=0}function nf(e){return 32===e||9===e||11===e||12===e||160===e||e>=5760&&[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(e)>=0}function rf(e){return 10===e||13===e||8232===e||8233===e}function of(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||92===e||e>=128&&Jc.test(String.fromCharCode(e))}function af(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||92===e||e>=128&&Qc.test(String.fromCharCode(e))}const sf={if:1,in:1,do:1,var:1,for:1,new:1,try:1,let:1,this:1,else:1,case:1,void:1,with:1,enum:1,while:1,break:1,catch:1,throw:1,const:1,yield:1,class:1,super:1,return:1,typeof:1,delete:1,switch:1,export:1,import:1,public:1,static:1,default:1,finally:1,extends:1,package:1,private:1,function:1,continue:1,debugger:1,interface:1,protected:1,instanceof:1,implements:1};function uf(){for(;qc1114111||"}"!==e)&&$f({},Hc,Yc),t<=65535?String.fromCharCode(t):(n=55296+(t-65536>>10),i=56320+(t-65536&1023),String.fromCharCode(n,i))}function ff(){var e,t;for(e=Lc.charCodeAt(qc++),t=String.fromCharCode(e),92===e&&(117!==Lc.charCodeAt(qc)&&$f({},Hc,Yc),++qc,(e=lf("u"))&&"\\"!==e&&of(e.charCodeAt(0))||$f({},Hc,Yc),t=e);qc>>="===(i=Lc.substr(qc,4))?{type:7,value:i,start:r,end:qc+=4}:">>>"===(n=i.substr(0,3))||"<<="===n||">>="===n?{type:7,value:n,start:r,end:qc+=3}:a===(t=n.substr(0,2))[1]&&"+-<>&|".indexOf(a)>=0||"=>"===t?{type:7,value:t,start:r,end:qc+=2}:("//"===t&&$f({},Hc,Yc),"<>=!+-*%&|^/".indexOf(a)>=0?{type:7,value:a,start:r,end:++qc}:void $f({},Hc,Yc))}function mf(){var e,t,n;if(Kc(Zc((n=Lc[qc]).charCodeAt(0))||"."===n,"Numeric literal must start with a decimal digit or a decimal point"),t=qc,e="","."!==n){if(e=Lc[qc++],n=Lc[qc],"0"===e){if("x"===n||"X"===n)return++qc,function(e){let t="";for(;qc=0&&$f({},Ic,n),{value:n,literal:t}}(),i=function(e,t){let n=e;t.indexOf("u")>=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}/g,((e,t)=>{if(parseInt(t,16)<=1114111)return"x";$f({},Ic)})).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"x"));try{new RegExp(n)}catch(e){$f({},Ic)}try{return new RegExp(e,t)}catch(e){return null}}(t.value,n.value),{literal:t.literal+n.literal,value:i,regex:{pattern:t.value,flags:n.value},start:e,end:qc}}function hf(){if(uf(),qc>=Rc)return{type:2,start:qc,end:qc};const e=Lc.charCodeAt(qc);return of(e)?df():40===e||41===e||59===e?pf():39===e||34===e?function(){var e,t,n,i,r="",o=!1;for(Kc("'"===(e=Lc[qc])||'"'===e,"String literal must starts with a quote"),t=qc,++qc;qc=0&&qc(Kc(t":case"<=":case">=":case"instanceof":case"in":t=7;break;case"<<":case">>":case">>>":t=8;break;case"+":case"-":t=9;break;case"*":case"/":case"%":t=11}return t}function Wf(){var e,t;return e=function(){var e,t,n,i,r,o,a,s,u,l;if(e=Wc,u=qf(),0===(r=Rf(i=Wc)))return u;for(i.prec=r,yf(),t=[e,Wc],o=[u,i,a=qf()];(r=Rf(Wc))>0;){for(;o.length>2&&r<=o[o.length-2].prec;)a=o.pop(),s=o.pop().value,u=o.pop(),t.pop(),n=bf(s,u,a),o.push(n);(i=yf()).prec=r,o.push(i),t.push(Wc),n=qf(),o.push(n)}for(n=o[l=o.length-1],t.pop();l>1;)t.pop(),n=bf(o[l-1].value,o[l-2],n),l-=2;return n}(),Sf("?")&&(yf(),t=Wf(),Cf(":"),e=function(e,t,n){const i=new Mc("ConditionalExpression");return i.test=e,i.consequent=t,i.alternate=n,i}(e,t,Wf())),e}function Uf(){const e=Wf();if(Sf(","))throw new Error(Xc);return e}function Hf(e){const t=[];return"Identifier"===e.type?[e.name]:"Literal"===e.type?[e.value]:("MemberExpression"===e.type&&(t.push(...Hf(e.object)),t.push(...Hf(e.property))),t)}function If(e){return"MemberExpression"===e.object.type?If(e.object):"datum"===e.object.name}function Vf(e){const t=function(e){qc=0,Rc=(Lc=e).length,Wc=null,vf();const t=Uf();if(2!==Wc.type)throw new Error("Unexpect token after expression.");return t}(e),n=new Set;return t.visit((e=>{"MemberExpression"===e.type&&If(e)&&n.add(Hf(e).slice(1).join("."))})),n}class Gf extends fl{clone(){return new Gf(null,this.model,d(this.filter))}constructor(e,t,n){super(e),this.model=t,this.filter=n,Sn(this,"expr",void 0),Sn(this,"_dependentFields",void 0),this.expr=Jf(this.model,this.filter,this),this._dependentFields=Vf(this.expr)}dependentFields(){return this._dependentFields}producedFields(){return new Set}assemble(){return{type:"filter",expr:this.expr}}hash(){return`Filter ${this.expr}`}}function Yf(e,n,i,r="datum"){const o=t.isString(n)?n:n.param,a=O(o),s=t.stringValue(a+yc);let u;try{u=e.getSelectionComponent(a,o)}catch(e){return`!!${a}`}if(u.project.timeUnit){const t=i??e.component.data.raw,n=u.project.timeUnit.clone();t.parent?n.insertAsParentOf(t):t.parent=n}const l=`vlSelectionTest(${s}, ${r}${"global"===u.resolve?")":`, ${t.stringValue(u.resolve)})`}`,c=`length(data(${s}))`;return!1===n.empty?`${c} && ${l}`:`!${c} || ${l}`}function Xf(e,n,i){const r=O(n),o=i.encoding;let a,s=i.field;try{a=e.getSelectionComponent(r,n)}catch(e){return r}if(o||s){if(o&&!s){const e=a.project.items.filter((e=>e.channel===o));!e.length||e.length>1?(s=a.project.items[0].field,ui((e.length?"Multiple ":"No ")+`matching ${t.stringValue(o)} encoding found for selection ${t.stringValue(i.param)}. `+`Using "field": ${t.stringValue(s)}.`)):s=e[0].field}}else s=a.project.items[0].field,a.project.items.length>1&&ui(`A "field" or "encoding" must be specified when using a selection as a scale domain. Using "field": ${t.stringValue(s)}.`);return`${a.name}[${t.stringValue(q(s))}]`}function Jf(e,n,i){return P(n,(n=>t.isString(n)?n:function(e){return null==e?void 0:e.param}(n)?Yf(e,n,i):Pi(n)))}function Qf(e,t,n,i){var r,o;e.encode??(e.encode={}),(r=e.encode)[t]??(r[t]={}),(o=e.encode[t]).update??(o.update={}),e.encode[t].update[n]=i}function Kf(e,n,i,r={header:!1}){const{disable:o,orient:a,scale:s,labelExpr:u,title:l,zindex:c,...f}=e.combine();if(!o){for(const e in f){const i=ya[e],r=f[e];if(i&&i!==n&&"both"!==i)delete f[e];else if(ga(r)){const{condition:n,...i}=r,o=t.array(n),a=ma[e];if(a){const{vgProp:t,part:n}=a;Qf(f,n,t,[...o.map((e=>{const{test:t,...n}=e;return{test:Jf(null,t),...n}})),i]),delete f[e]}else if(null===a){const t={signal:o.map((e=>{const{test:t,...n}=e;return`${Jf(null,t)} ? ${hn(n)} : `})).join("")+hn(i)};f[e]=t}}else if(an(r)){const t=ma[e];if(t){const{vgProp:n,part:i}=t;Qf(f,i,n,r),delete f[e]}}v(["labelAlign","labelBaseline"],e)&&null===f[e]&&delete f[e]}if("grid"===n){if(!f.grid)return;if(f.encode){const{grid:e}=f.encode;f.encode={...e?{grid:e}:{}},S(f.encode)&&delete f.encode}return{scale:s,orient:a,...f,domain:!1,labels:!1,aria:!1,maxExtent:0,minExtent:0,ticks:!1,zindex:H(c,0)}}{if(!r.header&&e.mainExtracted)return;if(void 0!==u){var d,p;let e=u;null!==(d=f.encode)&&void 0!==d&&null!==(p=d.labels)&&void 0!==p&&p.update&&an(f.encode.labels.update.text)&&(e=R(u,"datum.label",f.encode.labels.update.text.signal)),Qf(f,"labels","text",{signal:e})}if(null===f.labelAlign&&delete f.labelAlign,f.encode){for(const t of ha)e.hasAxisPart(t)||delete f.encode[t];S(f.encode)&&delete f.encode}const n=function(e,n){if(e)return t.isArray(e)&&!on(e)?e.map((e=>ta(e,n))).join(", "):e}(l,i);return{scale:s,orient:a,grid:!1,...n?{title:n}:{},...f,...!1===i.aria?{aria:!1}:{},zindex:H(c,0)}}}}function Zf(e){const{axes:t}=e.component,n=[];for(const i of yt)if(t[i])for(const r of t[i])if(!r.get("disable")&&!r.get("gridScale")){const t="x"===i?"height":"width",r=e.getSizeSignalRef(t).signal;t!==r&&n.push({name:t,update:r})}return n}function ed(e,t,n,i){return Object.assign.apply(null,[{},...e.map((e=>{if("axisOrient"===e){const e="x"===n?"bottom":"left",r=t["x"===n?"axisBottom":"axisLeft"]||{},o=t["x"===n?"axisTop":"axisRight"]||{},a=new Set([...E(r),...E(o)]),s={};for(const t of a.values())s[t]={signal:`${i.signal} === "${e}" ? ${yn(r[t])} : ${yn(o[t])}`};return s}return t[e]}))])}function td(e,t,n,i){const r="band"===t?["axisDiscrete","axisBand"]:"point"===t?["axisDiscrete","axisPoint"]:function(e){return e in ar}(t)?["axisQuantitative"]:"time"===t||"utc"===t?["axisTemporal"]:[],o="x"===e?"axisX":"axisY",a=an(n)?"axisOrient":`axis${N(n)}`,s=[...r,...r.map((e=>o+e.substr(4)))],u=["axis",a,o];return{vlOnlyAxisConfig:ed(s,i,e,n),vgAxisConfig:ed(u,i,e,n),axisConfigStyle:nd([...u,...s],i)}}function nd(e,n){const i=[{}];for(const o of e){var r;let e=null===(r=n[o])||void 0===r?void 0:r.style;if(e){e=t.array(e);for(const t of e)i.push(n.style[t])}}return Object.assign.apply(null,i)}function id(e,t,n,i={}){const r=Dn(e,n,t);if(void 0!==r)return{configFrom:"style",configValue:r};for(const t of["vlOnlyAxisConfig","vgAxisConfig","axisConfigStyle"]){var o;if(void 0!==(null===(o=i[t])||void 0===o?void 0:o[e]))return{configFrom:t,configValue:i[t][e]}}return{}}const rd={scale:({model:e,channel:t})=>e.scaleName(t),format:({fieldOrDatumDef:e,config:t,axis:n})=>{const{format:i,formatType:r}=n;return fo(e,e.type,i,r,t,!0)},formatType:({axis:e,fieldOrDatumDef:t,scaleType:n})=>{const{formatType:i}=e;return po(i,t,n)},grid:({fieldOrDatumDef:e,axis:t,scaleType:n})=>t.grid??function(e,t){return!fr(e)&&jo(t)&&!Jt(null==t?void 0:t.bin)&&!Qt(null==t?void 0:t.bin)}(n,e),gridScale:({model:e,channel:t})=>function(e,t){const n="x"===t?"y":"x";if(e.getScaleComponent(n))return e.scaleName(n);return}(e,t),labelAlign:({axis:e,labelAngle:t,orient:n,channel:i})=>e.labelAlign||sd(t,n,i),labelAngle:({labelAngle:e})=>e,labelBaseline:({axis:e,labelAngle:t,orient:n,channel:i})=>e.labelBaseline||ad(t,n,i),labelFlush:({axis:e,fieldOrDatumDef:t,channel:n})=>e.labelFlush??function(e,t){if("x"===t&&v(["quantitative","temporal"],e))return!0;return}(t.type,n),labelOverlap:({axis:e,fieldOrDatumDef:n,scaleType:i})=>e.labelOverlap??function(e,n,i,r){if(i&&!t.isObject(r)||"nominal"!==e&&"ordinal"!==e)return"log"!==n&&"symlog"!==n||"greedy";return}(n.type,i,jo(n)&&!!n.timeUnit,jo(n)?n.sort:void 0),orient:({orient:e})=>e,tickCount:({channel:e,model:t,axis:n,fieldOrDatumDef:i,scaleType:r})=>{const o="x"===e?"width":"y"===e?"height":void 0,a=o?t.getSizeSignalRef(o):void 0;return n.tickCount??function({fieldOrDatumDef:e,scaleType:t,size:n,values:i}){if(!i&&!fr(t)&&"log"!==t){if(jo(e)){var r;if(Jt(e.bin))return{signal:`ceil(${n.signal}/10)`};if(e.timeUnit&&v(["month","hours","day","quarter"],null===(r=Fi(e.timeUnit))||void 0===r?void 0:r.unit))return}return{signal:`ceil(${n.signal}/40)`}}return}({fieldOrDatumDef:i,scaleType:r,size:a,values:n.values})},title:({axis:e,model:t,channel:n})=>{if(void 0!==e.title)return e.title;const i=ud(t,n);if(void 0!==i)return i;const r=t.typedFieldDef(n),o="x"===n?"x2":"y2",a=t.fieldDef(o);return $n(r?[Co(r)]:[],jo(a)?[Co(a)]:[])},values:({axis:e,fieldOrDatumDef:n})=>function(e,n){const i=e.values;if(t.isArray(i))return da(n,i);if(an(i))return i;return}(e,n),zindex:({axis:e,fieldOrDatumDef:t,mark:n})=>e.zindex??function(e,t){if("rect"===e&&Xo(t))return 1;return 0}(n,t)};function od(e){return`(((${e.signal} % 360) + 360) % 360)`}function ad(e,t,n,i){if(void 0!==e){if("x"===n){if(an(e)){const n=od(e);return{signal:`(45 < ${n} && ${n} < 135) || (225 < ${n} && ${n} < 315) ? "middle" :(${n} <= 45 || 315 <= ${n}) === ${an(t)?`(${t.signal} === "top")`:"top"===t} ? "bottom" : "top"`}}if(45{if(Uo(t)&&Do(t.sort)){const{field:i,timeUnit:r}=t,o=t.sort,a=o.map(((e,t)=>`${Pi({field:i,timeUnit:r,equal:e})} ? ${t} : `)).join("")+o.length;e=new ld(e,{calculate:a,as:cd(t,n,{forAs:!0})})}})),e}producedFields(){return new Set([this.transform.as])}dependentFields(){return this._dependentFields}assemble(){return{type:"formula",expr:this.transform.calculate,as:this.transform.as}}hash(){return`Calculate ${h(this.transform)}`}}function cd(e,t,n){return Yo(e,{prefix:t,suffix:"sort_index",...n??{}})}function fd(e,t){return v(["top","bottom"],t)?"column":v(["left","right"],t)||"row"===e?"row":"column"}function dd(e,t,n,i){const r="row"===i?n.headerRow:"column"===i?n.headerColumn:n.headerFacet;return H((t||{})[e],r[e],n.header[e])}function pd(e,t,n,i){const r={};for(const o of e){const e=dd(o,t||{},n,i);void 0!==e&&(r[o]=e)}return r}const md=["row","column"],gd=["header","footer"];function hd(e,t){const n=e.component.layoutHeaders[t].title,i=e.config?e.config:void 0,r=e.component.layoutHeaders[t].facetFieldDef?e.component.layoutHeaders[t].facetFieldDef:void 0,{titleAnchor:o,titleAngle:a,titleOrient:s}=pd(["titleAnchor","titleAngle","titleOrient"],r.header,i,t),u=fd(t,s),l=X(a);return{name:`${t}-title`,type:"group",role:`${u}-title`,title:{text:n,..."row"===t?{orient:"left"}:{},style:"guide-title",...vd(l,u),...yd(u,l,o),...$d(i,r,t,is,ts)}}}function yd(e,t,n="middle"){switch(n){case"start":return{align:"left"};case"end":return{align:"right"}}const i=sd(t,"row"===e?"left":"top","row"===e?"y":"x");return i?{align:i}:{}}function vd(e,t){const n=ad(e,"row"===t?"left":"top","row"===t?"y":"x",!0);return n?{baseline:n}:{}}function bd(e,t){const n=e.component.layoutHeaders[t],i=[];for(const r of gd)if(n[r])for(const o of n[r]){const a=Ad(e,t,r,n,o);null!=a&&i.push(a)}return i}function xd(e,n){const{sort:i}=e;return Ao(i)?{field:Yo(i,{expr:"datum"}),order:i.order??"ascending"}:t.isArray(i)?{field:cd(e,n,{expr:"datum"}),order:"ascending"}:{field:Yo(e,{expr:"datum"}),order:i??"ascending"}}function wd(e,t,n){const{format:i,formatType:r,labelAngle:o,labelAnchor:a,labelOrient:s,labelExpr:u}=pd(["format","formatType","labelAngle","labelAnchor","labelOrient","labelExpr"],e.header,n,t),l=uo({fieldOrDatumDef:e,format:i,formatType:r,expr:"parent",config:n}).signal,c=fd(t,s);return{text:{signal:u?R(R(u,"datum.label",l),"datum.value",Yo(e,{expr:"parent"})):l},..."row"===t?{orient:"left"}:{},style:"guide-label",frame:"group",...vd(o,c),...yd(c,o,a),...$d(n,e,t,rs,ns)}}function Ad(e,t,n,i,r){if(r){let o=null;const{facetFieldDef:a}=i,s=e.config?e.config:void 0;if(a&&r.labels){const{labelOrient:e}=pd(["labelOrient"],a.header,s,t);("row"===t&&!v(["top","bottom"],e)||"column"===t&&!v(["left","right"],e))&&(o=wd(a,t,s))}const u=wm(e)&&!Fo(e.facet),l=r.axes,c=(null==l?void 0:l.length)>0;if(o||c){const s="row"===t?"height":"width";return{name:e.getName(`${t}_${n}`),type:"group",role:`${t}-${n}`,...i.facetFieldDef?{from:{data:e.getName(`${t}_domain`)},sort:xd(a,t)}:{},...c&&u?{from:{data:e.getName(`facet_domain_${t}`)}}:{},...o?{title:o}:{},...r.sizeSignal?{encode:{update:{[s]:r.sizeSignal}}}:{},...c?{axes:l}:{}}}}return null}const Dd={column:{start:0,end:1},row:{start:1,end:0}};function Fd(e,t){return Dd[t][e]}function $d(e,t,n,i,r){const o={};for(const a of i){if(!r[a])continue;const i=dd(a,null==t?void 0:t.header,e,n);void 0!==i&&(o[r[a]]=i)}return o}function kd(e){return[...Cd(e,"width"),...Cd(e,"height"),...Cd(e,"childWidth"),...Cd(e,"childHeight")]}function Cd(e,t){const n="width"===t?"x":"y",i=e.component.layoutSize.get(t);if(!i||"merged"===i)return[];const r=e.getSizeSignalRef(t).signal;if("step"===i){const t=e.getScaleComponent(n);if(t){const i=t.get("type"),o=t.get("range");if(fr(i)&&sn(o)){const i=e.scaleName(n);if(wm(e.parent)){if("independent"===e.parent.component.resolve.scale[n])return[Sd(i,o)]}return[Sd(i,o),{name:r,update:Ed(i,t,`domain('${i}').length`)}]}}throw new Error("layout size is step although width/height is not step.")}if("container"==i){const t=r.endsWith("width"),n=t?"containerSize()[0]":"containerSize()[1]",i=`isFinite(${n}) ? ${n} : ${ws(e.config.view,t?"width":"height")}`;return[{name:r,init:i,on:[{update:i,events:"window:resize"}]}]}return[{name:r,value:i}]}function Sd(e,t){return{name:`${e}_step`,value:t.step}}function Ed(e,t,n){const i=t.get("type"),r=t.get("padding"),o=H(t.get("paddingOuter"),r);let a=t.get("paddingInner");return a="band"===i?void 0!==a?a:r:1,`bandspace(${n}, ${yn(a)}, ${yn(o)}) * ${e}_step`}function Bd(e){return"childWidth"===e?"width":"childHeight"===e?"height":e}function _d(e,t){return E(e).reduce(((n,i)=>{const r=e[i];return{...n,...$l(t,r,i,(e=>gn(e.value)))}}),{})}function zd(e,t){if(wm(t))return"theta"===e?"independent":"shared";if(Dm(t))return"shared";if(Am(t))return vt(e)||"theta"===e||"radius"===e?"independent":"shared";throw new Error("invalid model type for resolve")}function Od(e,t){const n=e.scale[t],i=vt(t)?"axis":"legend";return"independent"===n?("shared"===e[i][t]&&ui(function(e){return`Setting the scale to be independent for "${e}" means we also have to set the guide (axis or legend) to be independent.`}(t)),"independent"):e[i][t]||"shared"}const Pd=E({aria:1,clipHeight:1,columnPadding:1,columns:1,cornerRadius:1,description:1,direction:1,fillColor:1,format:1,formatType:1,gradientLength:1,gradientOpacity:1,gradientStrokeColor:1,gradientStrokeWidth:1,gradientThickness:1,gridAlign:1,labelAlign:1,labelBaseline:1,labelColor:1,labelFont:1,labelFontSize:1,labelFontStyle:1,labelFontWeight:1,labelLimit:1,labelOffset:1,labelOpacity:1,labelOverlap:1,labelPadding:1,labelSeparation:1,legendX:1,legendY:1,offset:1,orient:1,padding:1,rowPadding:1,strokeColor:1,symbolDash:1,symbolDashOffset:1,symbolFillColor:1,symbolLimit:1,symbolOffset:1,symbolOpacity:1,symbolSize:1,symbolStrokeColor:1,symbolStrokeWidth:1,symbolType:1,tickCount:1,tickMinStep:1,title:1,titleAlign:1,titleAnchor:1,titleBaseline:1,titleColor:1,titleFont:1,titleFontSize:1,titleFontStyle:1,titleFontWeight:1,titleLimit:1,titleLineHeight:1,titleOpacity:1,titleOrient:1,titlePadding:1,type:1,values:1,zindex:1,disable:1,labelExpr:1,selections:1,opacity:1,shape:1,stroke:1,fill:1,size:1,strokeWidth:1,strokeDash:1,encode:1});class jd extends ju{}const Nd={symbols:function(e,{fieldOrDatumDef:n,model:i,channel:r,legendCmpt:o,legendType:a}){if("symbol"!==a)return;const{markDef:s,encoding:u,config:l,mark:c}=i,f=s.filled&&"trail"!==c;let d={...vn({},i,Ir),...jl(i,{filled:f})};const p=o.get("symbolOpacity")??l.legend.symbolOpacity,m=o.get("symbolFillColor")??l.legend.symbolFillColor,g=o.get("symbolStrokeColor")??l.legend.symbolStrokeColor,h=void 0===p?Md(u.opacity)??s.opacity:void 0;if(d.fill)if("fill"===r||f&&r===de)delete d.fill;else if(d.fill.field)m?delete d.fill:(d.fill=gn(l.legend.symbolBaseFillColor??"black"),d.fillOpacity=gn(h??1));else if(t.isArray(d.fill)){const e=Td(u.fill??u.color)??s.fill??(f&&s.color);e&&(d.fill=gn(e))}if(d.stroke)if("stroke"===r||!f&&r===de)delete d.stroke;else if(d.stroke.field||g)delete d.stroke;else if(t.isArray(d.stroke)){const e=H(Td(u.stroke||u.color),s.stroke,f?s.color:void 0);e&&(d.stroke={value:e})}if(r!==ve){const e=jo(n)&&qd(i,o,n);e?d.opacity=[{test:e,...gn(h??1)},gn(l.legend.unselectedOpacity)]:h&&(d.opacity=gn(h))}return d={...d,...e},S(d)?void 0:d},gradient:function(e,{model:t,legendType:n,legendCmpt:i}){if("gradient"!==n)return;const{config:r,markDef:o,encoding:a}=t;let s={};const u=void 0===(i.get("gradientOpacity")??r.legend.gradientOpacity)?Md(a.opacity)||o.opacity:void 0;u&&(s.opacity=gn(u));return s={...s,...e},S(s)?void 0:s},labels:function(e,{fieldOrDatumDef:t,model:n,channel:i,legendCmpt:r}){const o=n.legend(i)||{},a=n.config,s=jo(t)?qd(n,r,t):void 0,u=s?[{test:s,value:1},{value:a.legend.unselectedOpacity}]:void 0,{format:l,formatType:c}=o,f=ao(c)?co({fieldOrDatumDef:t,field:"datum.value",format:l,formatType:c,config:a}):void 0,d={...u?{opacity:u}:{},...f?{text:f}:{},...e};return S(d)?void 0:d},entries:function(e,{legendCmpt:t}){const n=t.get("selections");return null!=n&&n.length?{...e,fill:{value:"transparent"}}:e}};function Md(e){return Ld(e,((e,t)=>Math.max(e,t.value)))}function Td(e){return Ld(e,((e,t)=>H(e,t.value)))}function Ld(e,n){return function(e){const n=e&&e.condition;return!!n&&(t.isArray(n)||Wo(n))}(e)?t.array(e.condition).reduce(n,e.value):Wo(e)?e.value:void 0}function qd(e,n,i){const r=n.get("selections");if(null==r||!r.length)return;const o=t.stringValue(i.field);return r.map((e=>`(!length(data(${t.stringValue(O(e)+yc)})) || (${e}[${o}] && indexof(${e}[${o}], datum.value) >= 0))`)).join(" || ")}const Rd={direction:({direction:e})=>e,format:({fieldOrDatumDef:e,legend:t,config:n})=>{const{format:i,formatType:r}=t;return fo(e,e.type,i,r,n,!1)},formatType:({legend:e,fieldOrDatumDef:t,scaleType:n})=>{const{formatType:i}=e;return po(i,t,n)},gradientLength:e=>{const{legend:t,legendConfig:n}=e;return t.gradientLength??n.gradientLength??function({legendConfig:e,model:t,direction:n,orient:i,scaleType:r}){const{gradientHorizontalMaxLength:o,gradientHorizontalMinLength:a,gradientVerticalMaxLength:s,gradientVerticalMinLength:u}=e;if(pr(r))return"horizontal"===n?"top"===i||"bottom"===i?Hd(t,"width",a,o):a:Hd(t,"height",u,s);return}(e)},labelOverlap:({legend:e,legendConfig:t,scaleType:n})=>e.labelOverlap??t.labelOverlap??function(e){if(v(["quantile","threshold","log","symlog"],e))return"greedy";return}(n),symbolType:({legend:e,markDef:t,channel:n,encoding:i})=>e.symbolType??function(e,t,n,i){if("shape"!==t){const e=Td(n)??i;if(e)return e}switch(e){case"bar":case"rect":case"image":case"square":return"square";case"line":case"trail":case"rule":return"stroke";case"arc":case"point":case"circle":case"tick":case"geoshape":case"area":case"text":return"circle"}}(t.type,n,i.shape,t.shape),title:({fieldOrDatumDef:e,config:t})=>Zo(e,t,{allowDisabling:!0}),type:({legendType:e,scaleType:t,channel:n})=>{if(Ne(n)&&pr(t)){if("gradient"===e)return}else if("symbol"===e)return;return e},values:({fieldOrDatumDef:e,legend:n})=>function(e,n){const i=e.values;if(t.isArray(i))return da(n,i);if(an(i))return i;return}(n,e)};function Wd(e){const{legend:t}=e;return H(t.type,function({channel:e,timeUnit:t,scaleType:n}){if(Ne(e)){if(v(["quarter","month","day"],t))return"symbol";if(pr(n))return"gradient"}return"symbol"}(e))}function Ud({legendConfig:e,legendType:t,orient:n,legend:i}){return i.direction??e[t?"gradientDirection":"symbolDirection"]??function(e,t){switch(e){case"top":case"bottom":return"horizontal";case"left":case"right":case"none":case void 0:return;default:return"gradient"===t?"horizontal":void 0}}(n,t)}function Hd(e,t,n,i){return{signal:`clamp(${e.getSizeSignalRef(t).signal}, ${n}, ${i})`}}function Id(e){const t=xm(e)?function(e){const{encoding:t}=e,n={};for(const i of[de,...as]){const r=ra(t[i]);r&&e.getScaleComponent(i)&&(i===ge&&jo(r)&&r.type===Ri||(n[i]=Gd(e,i)))}return n}(e):function(e){const{legends:t,resolve:n}=e.component;for(const i of e.children){Id(i);for(const r of E(i.component.legends))n.legend[r]=Od(e.component.resolve,r),"shared"===n.legend[r]&&(t[r]=Yd(t[r],i.component.legends[r]),t[r]||(n.legend[r]="independent",delete t[r]))}for(const i of E(t))for(const t of e.children)t.component.legends[i]&&"shared"===n.legend[i]&&delete t.component.legends[i];return t}(e);return e.component.legends=t,t}function Vd(e,t,n,i){switch(t){case"disable":return void 0!==n;case"values":return!(null==n||!n.values);case"title":if("title"===t&&e===(null==i?void 0:i.title))return!0}return e===(n||{})[t]}function Gd(e,t){var n,i;let r=e.legend(t);const{markDef:o,encoding:a,config:s}=e,u=s.legend,l=new jd({},function(e,t){const n=e.scaleName(t);if("trail"===e.mark){if("color"===t)return{stroke:n};if("size"===t)return{strokeWidth:n}}return"color"===t?e.markDef.filled?{fill:n}:{stroke:n}:{[t]:n}}(e,t));!function(e,t,n){var i;const r=null===(i=e.fieldDef(t))||void 0===i?void 0:i.field;for(const i of B(e.component.selection??{})){const e=i.project.hasField[r]??i.project.hasChannel[t];if(e&&uc.defined(i)){const t=n.get("selections")??[];t.push(i.name),n.set("selections",t,!1),e.hasLegend=!0}}}(e,t,l);const c=void 0!==r?!r:u.disable;if(l.set("disable",c,void 0!==r),c)return l;r=r||{};const f=e.getScaleComponent(t).get("type"),d=ra(a[t]),p=jo(d)?null===(n=Fi(d.timeUnit))||void 0===n?void 0:n.unit:void 0,m=r.orient||s.legend.orient||"right",g=Wd({legend:r,channel:t,timeUnit:p,scaleType:f}),h={legend:r,channel:t,model:e,markDef:o,encoding:a,fieldOrDatumDef:d,legendConfig:u,config:s,scaleType:f,orient:m,legendType:g,direction:Ud({legend:r,legendType:g,orient:m,legendConfig:u})};for(const n of Pd){if("gradient"===g&&n.startsWith("symbol")||"symbol"===g&&n.startsWith("gradient"))continue;const i=n in Rd?Rd[n](h):r[n];if(void 0!==i){const o=Vd(i,n,r,e.fieldDef(t));(o||void 0===s.legend[n])&&l.set(n,i,o)}}const y=(null===(i=r)||void 0===i?void 0:i.encoding)??{},v=l.get("selections"),b={},x={fieldOrDatumDef:d,model:e,channel:t,legendCmpt:l,legendType:g};for(const t of["labels","legend","title","symbols","gradient","entries"]){const n=_d(y[t]??{},e),i=t in Nd?Nd[t](n,x):n;void 0===i||S(i)||(b[t]={...null!=v&&v.length&&jo(d)?{name:`${O(d.field)}_legend_${t}`}:{},...null!=v&&v.length?{interactive:!!v}:{},update:i})}var w;S(b)||l.set("encode",b,!(null===(w=r)||void 0===w||!w.encoding));return l}function Yd(e,t){if(!e)return t.clone();const n=e.getWithExplicit("orient"),i=t.getWithExplicit("orient");if(n.explicit&&i.explicit&&n.value!==i.value)return;let r=!1;for(const n of Pd){const i=qu(e.getWithExplicit(n),t.getWithExplicit(n),n,"legend",((e,t)=>{switch(n){case"symbolType":return Xd(e,t);case"title":return Cn(e,t);case"type":return r=!0,Mu("symbol")}return Lu(e,t,n,"legend")}));e.setWithExplicit(n,i)}var o,a,s,u;r&&(null!==(o=e.implicit)&&void 0!==o&&null!==(a=o.encode)&&void 0!==a&&a.gradient&&j(e.implicit,["encode","gradient"]),null!==(s=e.explicit)&&void 0!==s&&null!==(u=s.encode)&&void 0!==u&&u.gradient&&j(e.explicit,["encode","gradient"]));return e}function Xd(e,t){return"circle"===t.value?t:e}function Jd(e){const t=e.component.legends,n={};for(const i of E(t)){const r=e.getScaleComponent(i),o=g(r.get("domains"));if(n[o])for(const e of n[o]){Yd(e,t[i])||n[o].push(t[i])}else n[o]=[t[i].clone()]}return B(n).flat().map((t=>function(e,t){var n;const{disable:i,labelExpr:r,selections:o,...a}=e.combine();if(i)return;!1===t.aria&&null==a.aria&&(a.aria=!1);if(null!==(n=a.encode)&&void 0!==n&&n.symbols){const e=a.encode.symbols.update;!e.fill||"transparent"===e.fill.value||e.stroke||a.stroke||(e.stroke={value:"transparent"});for(const t of as)a[t]&&delete e[t]}a.title||delete a.title;if(void 0!==r){var s,u;let e=r;null!==(s=a.encode)&&void 0!==s&&null!==(u=s.labels)&&void 0!==u&&u.update&&an(a.encode.labels.update.text)&&(e=R(r,"datum.label",a.encode.labels.update.text.signal)),function(e,t,n,i){var r,o;e.encode??(e.encode={}),(r=e.encode)[t]??(r[t]={}),(o=e.encode[t]).update??(o.update={}),e.encode[t].update[n]=i}(a,"labels","text",{signal:e})}return a}(t,e.config))).filter((e=>void 0!==e))}function Qd(e){return Dm(e)||Am(e)?function(e){return e.children.reduce(((e,t)=>e.concat(t.assembleProjections())),Kd(e))}(e):Kd(e)}function Kd(e){const t=e.component.projection;if(!t||t.merged)return[];const n=t.combine(),{name:i}=n;if(t.data){const r={signal:`[${t.size.map((e=>e.signal)).join(", ")}]`},o=t.data.reduce(((t,n)=>{const i=an(n)?n.signal:`data('${e.lookupDataSource(n)}')`;return v(t,i)||t.push(i),t}),[]);if(o.length<=0)throw new Error("Projection's fit didn't find any data sources");return[{name:i,size:r,fit:{signal:o.length>1?`[${o.join(", ")}]`:o[0]},...n}]}return[{name:i,translate:{signal:"[width / 2, height / 2]"},...n}]}const Zd=["type","clipAngle","clipExtent","center","rotate","precision","reflectX","reflectY","coefficient","distance","fraction","lobes","parallel","radius","ratio","spacing","tilt"];class ep extends ju{constructor(e,t,n,i){super({...t},{name:e}),this.specifiedProjection=t,this.size=n,this.data=i,Sn(this,"merged",!1)}get isFit(){return!!this.data}}function tp(e){e.component.projection=xm(e)?function(e){if(e.hasProjection){const t=nn(e.specifiedProjection),n=!(t&&(null!=t.scale||null!=t.translate)),i=n?[e.getSizeSignalRef("width"),e.getSizeSignalRef("height")]:void 0,r=n?function(e){const t=[],{encoding:n}=e;for(const i of[[le,ue],[fe,ce]])(ra(n[i[0]])||ra(n[i[1]]))&&t.push({signal:e.getName(`geojson_${t.length}`)});e.channelHasField(ge)&&e.typedFieldDef(ge).type===Ri&&t.push({signal:e.getName(`geojson_${t.length}`)});0===t.length&&t.push(e.requestDataName(Xu.Main));return t}(e):void 0,o=new ep(e.projectionName(!0),{...nn(e.config.projection)??{},...t??{}},i,r);return o.get("type")||o.set("type","equalEarth",!1),o}return}(e):function(e){if(0===e.children.length)return;let n;for(const t of e.children)tp(t);const i=x(e.children,(e=>{const i=e.component.projection;if(i){if(n){const e=function(e,n){const i=x(Zd,(i=>!t.hasOwnProperty(e.explicit,i)&&!t.hasOwnProperty(n.explicit,i)||!!(t.hasOwnProperty(e.explicit,i)&&t.hasOwnProperty(n.explicit,i)&&f(e.get(i),n.get(i)))));if(f(e.size,n.size)){if(i)return e;if(f(e.explicit,{}))return n;if(f(n.explicit,{}))return e}return null}(n,i);return e&&(n=e),!!e}return n=i,!0}return!0}));if(n&&i){const t=e.projectionName(!0),i=new ep(t,n.specifiedProjection,n.size,d(n.data));for(const n of e.children){const e=n.component.projection;e&&(e.isFit&&i.data.push(...n.component.projection.data),n.renameProjection(e.get("name"),t),e.merged=!0)}return i}return}(e)}function np(e,t,n,i){if(pa(t,n)){const r=xm(e)?e.axis(n)??e.legend(n)??{}:{},o=Yo(t,{expr:"datum"}),a=Yo(t,{expr:"datum",binSuffix:"end"});return{formulaAs:Yo(t,{binSuffix:"range",forAs:!0}),formula:yo(o,a,r.format,r.formatType,i)}}return{}}function ip(e,t){return`${Xt(e)}_${t}`}function rp(e,t,n){const i=ip(ua(n,void 0)??{},t);return e.getName(`${i}_bins`)}function op(e,n,i){let r,o;r=function(e){return"as"in e}(e)?t.isString(e.as)?[e.as,`${e.as}_end`]:[e.as[0],e.as[1]]:[Yo(e,{forAs:!0}),Yo(e,{binSuffix:"end",forAs:!0})];const a={...ua(n,void 0)},s=ip(a,e.field),{signal:u,extentSignal:l}=function(e,t){return{signal:e.getName(`${t}_bins`),extentSignal:e.getName(`${t}_extent`)}}(i,s);if(Zt(a.extent)){const e=a.extent;o=Xf(i,e.param,e),delete a.extent}return{key:s,binComponent:{bin:a,field:e.field,as:[r],...u?{signal:u}:{},...l?{extentSignal:l}:{},...o?{span:o}:{}}}}class ap extends fl{clone(){return new ap(null,d(this.bins))}constructor(e,t){super(e),this.bins=t}static makeFromEncoding(e,t){const n=t.reduceFieldDef(((e,n,i)=>{if(Ro(n)&&Jt(n.bin)){const{key:r,binComponent:o}=op(n,n.bin,t);e[r]={...o,...e[r],...np(t,n,i,t.config)}}return e}),{});return S(n)?null:new ap(e,n)}static makeFromTransform(e,t,n){const{key:i,binComponent:r}=op(t,t.bin,n);return new ap(e,{[i]:r})}merge(e,t){for(const n of E(e.bins))n in this.bins?(t(e.bins[n].signal,this.bins[n].signal),this.bins[n].as=D([...this.bins[n].as,...e.bins[n].as],h)):this.bins[n]=e.bins[n];for(const t of e.children)e.removeChild(t),t.parent=this;e.remove()}producedFields(){return new Set(B(this.bins).map((e=>e.as)).flat(2))}dependentFields(){return new Set(B(this.bins).map((e=>e.field)))}hash(){return`Bin ${h(this.bins)}`}assemble(){return B(this.bins).flatMap((e=>{const t=[],[n,...i]=e.as,{extent:r,...o}=e.bin,a={type:"bin",field:q(e.field),as:n,signal:e.signal,...Zt(r)?{extent:null}:{extent:r},...e.span?{span:{signal:`span(${e.span})`}}:{},...o};!r&&e.extentSignal&&(t.push({type:"extent",field:q(e.field),signal:e.extentSignal}),a.extent={signal:e.extentSignal}),t.push(a);for(const e of i)for(let i=0;i<2;i++)t.push({type:"formula",expr:Yo({field:n[i]},{expr:"datum"}),as:e[i]});return e.formula&&t.push({type:"formula",expr:e.formula,as:e.formulaAs}),t}))}}function sp(e,t,i,r){var o;const a=xm(r)?r.encoding[et(t)]:void 0;if(Ro(i)&&xm(r)&&_o(i,a,r.markDef,r.config))e.add(Yo(i,{})),e.add(Yo(i,{suffix:"end"})),i.bin&&pa(i,t)&&e.add(Yo(i,{binSuffix:"range"}));else if(t in Oe){const n=function(e){switch(e){case ue:return"y";case ce:return"y2";case le:return"x";case fe:return"x2"}}(t);e.add(r.getName(n))}else e.add(Yo(i));return Uo(i)&&function(e){return n.isObject(e)&&"field"in e}(null===(o=i.scale)||void 0===o?void 0:o.range)&&e.add(i.scale.range.field),e}class up extends fl{clone(){return new up(null,new Set(this.dimensions),d(this.measures))}constructor(e,t,n){super(e),this.dimensions=t,this.measures=n}get groupBy(){return this.dimensions}static makeFromEncoding(e,t){let n=!1;t.forEachFieldDef((e=>{e.aggregate&&(n=!0)}));const i={},r=new Set;return n?(t.forEachFieldDef(((e,n)=>{const{aggregate:o,field:a}=e;if(o)if("count"===o){i["*"]??(i["*"]={}),i["*"].count=new Set([Yo(e,{forAs:!0})])}else{if(Wt(o)||Ut(o)){const e=Wt(o)?"argmin":"argmax",t=o[e];i[t]??(i[t]={}),i[t][e]=new Set([Yo({op:e,field:t},{forAs:!0})])}else i[a]??(i[a]={}),i[a][o]=new Set([Yo(e,{forAs:!0})]);Pt(n)&&"unaggregated"===t.scaleDomain(n)&&(i[a]??(i[a]={}),i[a].min=new Set([Yo({field:a,aggregate:"min"},{forAs:!0})]),i[a].max=new Set([Yo({field:a,aggregate:"max"},{forAs:!0})]))}else sp(r,n,e,t)})),r.size+E(i).length===0?null:new up(e,r,i)):null}static makeFromTransform(e,t){const n=new Set,i={};for(const e of t.aggregate){const{op:t,field:n,as:r}=e;if(t)if("count"===t)i["*"]??(i["*"]={}),i["*"].count=new Set([r||Yo(e,{forAs:!0})]);else i[n]??(i[n]={}),i[n][t]=new Set([r||Yo(e,{forAs:!0})])}for(const e of t.groupby??[])n.add(e);return n.size+E(i).length===0?null:new up(e,n,i)}merge(e){return F(this.dimensions,e.dimensions)?(function(e,t){for(const n of E(t)){const i=t[n];for(const t of E(i))n in e?e[n][t]=new Set([...e[n][t]??[],...i[t]]):e[n]={[t]:i[t]}}}(this.measures,e.measures),!0):(function(...e){si.debug(...e)}("different dimensions, cannot merge"),!1)}addDimensions(e){e.forEach(this.dimensions.add,this.dimensions)}dependentFields(){return new Set([...this.dimensions,...E(this.measures)])}producedFields(){const e=new Set;for(const t of E(this.measures))for(const n of E(this.measures[t])){const i=this.measures[t][n];0===i.size?e.add(`${n}_${t}`):i.forEach(e.add,e)}return e}hash(){return`Aggregate ${h({dimensions:this.dimensions,measures:this.measures})}`}assemble(){const e=[],t=[],n=[];for(const i of E(this.measures))for(const r of E(this.measures[i]))for(const o of this.measures[i][r])n.push(o),e.push(r),t.push("*"===i?null:q(i));return{type:"aggregate",groupby:[...this.dimensions].map(q),ops:e,fields:t,as:n}}}class lp extends fl{constructor(e,n,i,r){super(e),this.model=n,this.name=i,this.data=r,Sn(this,"column",void 0),Sn(this,"row",void 0),Sn(this,"facet",void 0),Sn(this,"childModel",void 0);for(const e of Te){const i=n.facet[e];if(i){const{bin:r,sort:o}=i;this[e]={name:n.getName(`${e}_domain`),fields:[Yo(i),...Jt(r)?[Yo(i,{binSuffix:"end"})]:[]],...Ao(o)?{sortField:o}:t.isArray(o)?{sortIndexField:cd(i,e)}:{}}}}this.childModel=n.child}hash(){let e="Facet";for(const t of Te)this[t]&&(e+=` ${t.charAt(0)}:${h(this[t])}`);return e}get fields(){const e=[];for(const n of Te){var t;null!==(t=this[n])&&void 0!==t&&t.fields&&e.push(...this[n].fields)}return e}dependentFields(){const e=new Set(this.fields);for(const t of Te)this[t]&&(this[t].sortField&&e.add(this[t].sortField.field),this[t].sortIndexField&&e.add(this[t].sortIndexField));return e}producedFields(){return new Set}getSource(){return this.name}getChildIndependentFieldsWithStep(){const e={};for(const t of yt){const n=this.childModel.component.scales[t];if(n&&!n.merged){const i=n.get("type"),r=n.get("range");if(fr(i)&&sn(r)){const n=Zp(em(this.childModel,t));n?e[t]=n:ui(Nn(t))}}}return e}assembleRowColumnHeaderData(e,t,n){const i={row:"y",column:"x",facet:void 0}[e],r=[],o=[],a=[];i&&n&&n[i]&&(t?(r.push(`distinct_${n[i]}`),o.push("max")):(r.push(n[i]),o.push("distinct")),a.push(`distinct_${n[i]}`));const{sortField:s,sortIndexField:u}=this[e];if(s){const{op:e=vo,field:t}=s;r.push(t),o.push(e),a.push(Yo(s,{forAs:!0}))}else u&&(r.push(u),o.push("max"),a.push(u));return{name:this[e].name,source:t??this.data,transform:[{type:"aggregate",groupby:this[e].fields,...r.length?{fields:r,ops:o,as:a}:{}}]}}assembleFacetHeaderData(e){const{columns:t}=this.model.layout,{layoutHeaders:n}=this.model.component,i=[],r={};for(const e of md){for(const t of gd){const i=(n[e]&&n[e][t])??[];for(const t of i){var o;if((null===(o=t.axes)||void 0===o?void 0:o.length)>0){r[e]=!0;break}}}if(r[e]){const n=`length(data("${this.facet.name}"))`,r="row"===e?t?{signal:`ceil(${n} / ${t})`}:1:t?{signal:`min(${n}, ${t})`}:{signal:n};i.push({name:`${this.facet.name}_${e}`,transform:[{type:"sequence",start:0,stop:r}]})}}const{row:a,column:s}=r;return(a||s)&&i.unshift(this.assembleRowColumnHeaderData("facet",null,e)),i}assemble(){const e=[];let t=null;const n=this.getChildIndependentFieldsWithStep(),{column:i,row:r,facet:o}=this;if(i&&r&&(n.x||n.y)){t=`cross_${this.column.name}_${this.row.name}`;const i=[].concat(n.x??[],n.y??[]),r=i.map((()=>"distinct"));e.push({name:t,source:this.data,transform:[{type:"aggregate",groupby:this.fields,fields:i,ops:r}]})}for(const i of[K,Q])this[i]&&e.push(this.assembleRowColumnHeaderData(i,t,n));if(o){const t=this.assembleFacetHeaderData(n);t&&e.push(...t)}return e}}function cp(e){return"'"===e[0]&&"'"===e[e.length-1]||'"'===e[0]&&'"'===e[e.length-1]?e.slice(1,-1):e}function fp(e){const n={};return l(e.filter,(e=>{if(zi(e)){let i=null;$i(e)?i=pn(e.equal):Ci(e)?i=pn(e.lte):ki(e)?i=pn(e.lt):Si(e)?i=pn(e.gt):Ei(e)?i=pn(e.gte):Bi(e)?i=e.range[0]:_i(e)&&(i=(e.oneOf??e.in)[0]),i&&(li(i)?n[e.field]="date":t.isNumber(i)?n[e.field]="number":t.isString(i)&&(n[e.field]="string")),e.timeUnit&&(n[e.field]="date")}})),n}function dp(e){const n={};function i(e){var i;ca(e)?n[e.field]="date":"quantitative"===e.type&&(i=e.aggregate,t.isString(i)&&v(["min","max"],i))?n[e.field]="number":U(e.field)>1?e.field in n||(n[e.field]="flatten"):Uo(e)&&Ao(e.sort)&&U(e.sort.field)>1&&(e.sort.field in n||(n[e.sort.field]="flatten"))}if((xm(e)||wm(e))&&e.forEachFieldDef(((t,n)=>{if(Ro(t))i(t);else{const r=Ke(n),o=e.fieldDef(r);i({...t,type:o.type})}})),xm(e)){const{mark:t,markDef:i,encoding:r}=e;if(Rr(t)&&!e.encoding.order){const e=r["horizontal"===i.orient?"y":"x"];jo(e)&&"quantitative"===e.type&&!(e.field in n)&&(n[e.field]="number")}}return n}class pp extends fl{clone(){return new pp(null,d(this._parse))}constructor(e,t){super(e),Sn(this,"_parse",void 0),this._parse=t}hash(){return`Parse ${h(this._parse)}`}static makeExplicit(e,t,n){var i;let r={};const o=t.data;return!Iu(o)&&null!=o&&null!==(i=o.format)&&void 0!==i&&i.parse&&(r=o.format.parse),this.makeWithAncestors(e,r,{},n)}static makeWithAncestors(e,t,n,i){for(const e of E(n)){const t=i.getWithExplicit(e);void 0!==t.value&&(t.explicit||t.value===n[e]||"derived"===t.value||"flatten"===n[e]?delete n[e]:ui(Wn(e,n[e],t.value)))}for(const e of E(t)){const n=i.get(e);void 0!==n&&(n===t[e]?delete t[e]:ui(Wn(e,t[e],n)))}const r=new ju(t,n);i.copyAll(r);const o={};for(const e of E(r.combine())){const t=r.get(e);null!==t&&(o[e]=t)}return 0===E(o).length||i.parseNothing?null:new pp(e,o)}get parse(){return this._parse}merge(e){this._parse={...this._parse,...e.parse},e.remove()}assembleFormatParse(){const e={};for(const t of E(this._parse)){const n=this._parse[t];1===U(t)&&(e[t]=n)}return e}producedFields(){return new Set(E(this._parse))}dependentFields(){return new Set(E(this._parse))}assembleTransforms(e=!1){return E(this._parse).filter((t=>!e||U(t)>1)).map((e=>{const t=function(e,t){const n=M(e);if("number"===t)return`toNumber(${n})`;if("boolean"===t)return`toBoolean(${n})`;if("string"===t)return`toString(${n})`;if("date"===t)return`toDate(${n})`;if("flatten"===t)return n;if(t.startsWith("date:"))return`timeParse(${n},'${cp(t.slice(5,t.length))}')`;if(t.startsWith("utc:"))return`utcParse(${n},'${cp(t.slice(4,t.length))}')`;return ui(`Unrecognized parse "${t}".`),null}(e,this._parse[e]);if(!t)return null;return{type:"formula",expr:t,as:W(e)}})).filter((e=>null!==e))}}class mp extends fl{clone(){return new mp(null)}constructor(e){super(e)}dependentFields(){return new Set}producedFields(){return new Set([ss])}hash(){return"Identifier"}assemble(){return{type:"identifier",as:ss}}}class gp extends fl{clone(){return new gp(null,this.params)}constructor(e,t){super(e),this.params=t}dependentFields(){return new Set}producedFields(){}hash(){return`Graticule ${h(this.params)}`}assemble(){return{type:"graticule",...!0===this.params?{}:this.params}}}class hp extends fl{clone(){return new hp(null,this.params)}constructor(e,t){super(e),this.params=t}dependentFields(){return new Set}producedFields(){return new Set([this.params.as??"data"])}hash(){return`Hash ${h(this.params)}`}assemble(){return{type:"sequence",...this.params}}}class yp extends fl{constructor(e){let t;if(super(null),Sn(this,"_data",void 0),Sn(this,"_name",void 0),Sn(this,"_generator",void 0),e??(e={name:"source"}),Iu(e)||(t=e.format?{...m(e.format,["parse"])}:{}),Uu(e))this._data={values:e.values};else if(Wu(e)){if(this._data={url:e.url},!t.type){let n=/(?:\.([^.]+))?$/.exec(e.url)[1];v(["json","csv","tsv","dsv","topojson"],n)||(n="json"),t.type=n}}else Gu(e)?this._data={values:[{type:"Sphere"}]}:(Hu(e)||Iu(e))&&(this._data={});this._generator=Iu(e),e.name&&(this._name=e.name),t&&!S(t)&&(this._data.format=t)}dependentFields(){return new Set}producedFields(){}get data(){return this._data}hasName(){return!!this._name}get isGenerator(){return this._generator}get dataName(){return this._name}set dataName(e){this._name=e}set parent(e){throw new Error("Source nodes have to be roots.")}remove(){throw new Error("Source nodes are roots and cannot be removed.")}hash(){throw new Error("Cannot hash sources")}assemble(){return{name:this._name,...this._data,transform:[]}}}function vp(e){return e instanceof yp||e instanceof gp||e instanceof hp}var bp=new WeakMap;class xp{constructor(){bp.set(this,{writable:!0,value:void 0}),En(this,bp,!1)}setModified(){En(this,bp,!0)}get modifiedFlag(){return function(e,t){return t.get?t.get.call(e):t.value}(e=this,Bn(e,bp,"get"));var e}}class wp extends xp{getNodeDepths(e,t,n){n.set(e,t);for(const i of e.children)this.getNodeDepths(i,t+1,n);return n}optimize(e){const t=[...this.getNodeDepths(e,0,new Map).entries()].sort(((e,t)=>t[1]-e[1]));for(const e of t)this.run(e[0]);return this.modifiedFlag}}class Ap extends xp{optimize(e){this.run(e);for(const t of e.children)this.optimize(t);return this.modifiedFlag}}class Dp extends Ap{mergeNodes(e,t){const n=t.shift();for(const i of t)e.removeChild(i),i.parent=n,i.remove()}run(e){const t=e.children.map((e=>e.hash())),n={};for(let i=0;i1&&(this.setModified(),this.mergeNodes(e,n[t]))}}class Fp extends Ap{constructor(e){super(),Sn(this,"requiresSelectionId",void 0),this.requiresSelectionId=e&&Dc(e)}run(e){e instanceof mp&&(this.requiresSelectionId&&(vp(e.parent)||e.parent instanceof up||e.parent instanceof pp)||(this.setModified(),e.remove()))}}class $p extends xp{optimize(e){return this.run(e,new Set),this.modifiedFlag}run(e,t){let n=new Set;e instanceof pl&&(n=e.producedFields(),$(n,t)&&(this.setModified(),e.removeFormulas(t),0===e.producedFields.length&&e.remove()));for(const i of e.children)this.run(i,new Set([...t,...n]))}}class kp extends Ap{constructor(){super()}run(e){e instanceof dl&&!e.isRequired()&&(this.setModified(),e.remove())}}class Cp extends wp{run(e){if(!(vp(e)||e.numChildren()>1))for(const t of e.children)if(t instanceof pp)if(e instanceof pp)this.setModified(),e.merge(t);else{if(C(e.producedFields(),t.dependentFields()))continue;this.setModified(),t.swapWithParent()}}}class Sp extends wp{run(e){const t=[...e.children],n=e.children.filter((e=>e instanceof pp));if(e.numChildren()>1&&n.length>=1){const i={},r=new Set;for(const e of n){const t=e.parse;for(const e of E(t))e in i?i[e]!==t[e]&&r.add(e):i[e]=t[e]}for(const e of r)delete i[e];if(!S(i)){this.setModified();const n=new pp(e,i);for(const r of t){if(r instanceof pp)for(const e of E(i))delete r.parse[e];e.removeChild(r),r.parent=n,r instanceof pp&&0===E(r.parse).length&&r.remove()}}}}}class Ep extends wp{run(e){e instanceof dl||e.numChildren()>0||e instanceof lp||e instanceof yp||(this.setModified(),e.remove())}}class Bp extends wp{run(e){const t=e.children.filter((e=>e instanceof pl)),n=t.pop();for(const e of t)this.setModified(),n.merge(e)}}class _p extends wp{run(e){const t=e.children.filter((e=>e instanceof up)),n={};for(const e of t){const t=h(e.groupBy);t in n||(n[t]=[]),n[t].push(e)}for(const t of E(n)){const i=n[t];if(i.length>1){const t=i.pop();for(const n of i)t.merge(n)&&(e.removeChild(n),n.parent=t,n.remove(),this.setModified())}}}}class zp extends wp{constructor(e){super(),this.model=e}run(e){const t=!(vp(e)||e instanceof Gf||e instanceof pp||e instanceof mp),n=[],i=[];for(const r of e.children)r instanceof ap&&(t&&!C(e.producedFields(),r.dependentFields())?n.push(r):i.push(r));if(n.length>0){const t=n.pop();for(const e of n)t.merge(e,this.model.renameSignal.bind(this.model));this.setModified(),e instanceof ap?e.merge(t,this.model.renameSignal.bind(this.model)):t.swapWithParent()}if(i.length>1){const e=i.pop();for(const t of i)e.merge(t,this.model.renameSignal.bind(this.model));this.setModified()}}}class Op extends wp{run(e){const t=[...e.children];if(!b(t,(e=>e instanceof dl))||e.numChildren()<=1)return;const n=[];let i;for(const r of t)if(r instanceof dl){let t=r;for(;1===t.numChildren();){const[e]=t.children;if(!(e instanceof dl))break;t=e}n.push(...t.children),i?(e.removeChild(r),r.parent=i.parent,i.parent.removeChild(i),i.parent=t,this.setModified()):i=t}else n.push(r);if(n.length){this.setModified();for(const e of n)e.parent.removeChild(e),e.parent=i}}}class Pp extends fl{clone(){return new Pp(null,d(this.transform))}constructor(e,t){super(e),this.transform=t}addDimensions(e){this.transform.groupby=D(this.transform.groupby.concat(e),(e=>e))}dependentFields(){const e=new Set;return this.transform.groupby&&this.transform.groupby.forEach(e.add,e),this.transform.joinaggregate.map((e=>e.field)).filter((e=>void 0!==e)).forEach(e.add,e),e}producedFields(){return new Set(this.transform.joinaggregate.map(this.getDefaultName))}getDefaultName(e){return e.as??Yo(e)}hash(){return`JoinAggregateTransform ${h(this.transform)}`}assemble(){const e=[],t=[],n=[];for(const i of this.transform.joinaggregate)t.push(i.op),n.push(this.getDefaultName(i)),e.push(void 0===i.field?null:i.field);const i=this.transform.groupby;return{type:"joinaggregate",as:n,ops:t,fields:e,...void 0!==i?{groupby:i}:{}}}}class jp extends fl{clone(){return new jp(null,d(this._stack))}constructor(e,t){super(e),Sn(this,"_stack",void 0),this._stack=t}static makeFromTransform(e,n){const{stack:i,groupby:r,as:o,offset:a="zero"}=n,s=[],u=[];if(void 0!==n.sort)for(const e of n.sort)s.push(e.field),u.push(H(e.order,"ascending"));const l={field:s,order:u};let c;return c=function(e){return t.isArray(e)&&e.every((e=>t.isString(e)))&&e.length>1}(o)?o:t.isString(o)?[o,`${o}_end`]:[`${n.stack}_start`,`${n.stack}_end`],new jp(e,{stackField:i,groupby:r,offset:a,sort:l,facetby:[],as:c})}static makeFromEncoding(e,n){const i=n.stack,{encoding:r}=n;if(!i)return null;const{groupbyChannel:o,fieldChannel:a,offset:s,impute:u}=i;let l;if(o){l=ia(r[o])}const c=function(e){return e.stack.stackBy.reduce(((e,t)=>{const n=Yo(t.fieldDef);return n&&e.push(n),e}),[])}(n),f=n.encoding.order;let d;return d=t.isArray(f)||jo(f)?Fn(f):c.reduce(((e,t)=>(e.field.push(t),e.order.push("y"===a?"descending":"ascending"),e)),{field:[],order:[]}),new jp(e,{dimensionFieldDef:l,stackField:n.vgField(a),facetby:[],stackby:c,sort:d,offset:s,impute:u,as:[n.vgField(a,{suffix:"start",forAs:!0}),n.vgField(a,{suffix:"end",forAs:!0})]})}get stack(){return this._stack}addDimensions(e){this._stack.facetby.push(...e)}dependentFields(){const e=new Set;return e.add(this._stack.stackField),this.getGroupbyFields().forEach(e.add,e),this._stack.facetby.forEach(e.add,e),this._stack.sort.field.forEach(e.add,e),e}producedFields(){return new Set(this._stack.as)}hash(){return`Stack ${h(this._stack)}`}getGroupbyFields(){const{dimensionFieldDef:e,impute:t,groupby:n}=this._stack;return e?e.bin?t?[Yo(e,{binSuffix:"mid"})]:[Yo(e,{}),Yo(e,{binSuffix:"end"})]:[Yo(e)]:n??[]}assemble(){const e=[],{facetby:t,dimensionFieldDef:n,stackField:i,stackby:r,sort:o,offset:a,impute:s,as:u}=this._stack;if(s&&n){const{bandPosition:o=.5,bin:a}=n;a&&e.push({type:"formula",expr:`${o}*`+Yo(n,{expr:"datum"})+`+${1-o}*`+Yo(n,{expr:"datum",binSuffix:"end"}),as:Yo(n,{binSuffix:"mid",forAs:!0})}),e.push({type:"impute",field:i,groupby:[...r,...t],key:Yo(n,{binSuffix:"mid"}),method:"value",value:0})}return e.push({type:"stack",groupby:[...this.getGroupbyFields(),...t],field:i,sort:o,as:u,offset:a}),e}}class Np extends fl{clone(){return new Np(null,d(this.transform))}constructor(e,t){super(e),this.transform=t}addDimensions(e){this.transform.groupby=D(this.transform.groupby.concat(e),(e=>e))}dependentFields(){const e=new Set;return(this.transform.groupby??[]).forEach(e.add,e),(this.transform.sort??[]).forEach((t=>e.add(t.field))),this.transform.window.map((e=>e.field)).filter((e=>void 0!==e)).forEach(e.add,e),e}producedFields(){return new Set(this.transform.window.map(this.getDefaultName))}getDefaultName(e){return e.as??Yo(e)}hash(){return`WindowTransform ${h(this.transform)}`}assemble(){const e=[],t=[],n=[],i=[];for(const r of this.transform.window)t.push(r.op),n.push(this.getDefaultName(r)),i.push(void 0===r.param?null:r.param),e.push(void 0===r.field?null:r.field);const r=this.transform.frame,o=this.transform.groupby;if(r&&null===r[0]&&null===r[1]&&t.every((e=>Ht(e))))return{type:"joinaggregate",as:n,ops:t,fields:e,...void 0!==o?{groupby:o}:{}};const a=[],s=[];if(void 0!==this.transform.sort)for(const e of this.transform.sort)a.push(e.field),s.push(e.order??"ascending");const u={field:a,order:s},l=this.transform.ignorePeers;return{type:"window",params:i,as:n,ops:t,fields:e,sort:u,...void 0!==l?{ignorePeers:l}:{},...void 0!==o?{groupby:o}:{},...void 0!==r?{frame:r}:{}}}}function Mp(e){if(e instanceof lp)if(1!==e.numChildren()||e.children[0]instanceof dl){const n=e.model.component.data.main;Tp(n);const i=(t=e,function e(n){if(!(n instanceof lp)){const i=n.clone();if(i instanceof dl){const e=Lp+i.getSource();i.setSource(e),t.model.component.data.outputNodes[e]=i}else(i instanceof up||i instanceof jp||i instanceof Np||i instanceof Pp)&&i.addDimensions(t.fields);for(const t of n.children.flatMap(e))t.parent=i;return[i]}return n.children.flatMap(e)}),r=e.children.map(i).flat();for(const e of r)e.parent=n}else{const t=e.children[0];(t instanceof up||t instanceof jp||t instanceof Np||t instanceof Pp)&&t.addDimensions(e.fields),t.swapWithParent(),Mp(e)}else e.children.map(Mp);var t}function Tp(e){if(e instanceof dl&&e.type===Xu.Main&&1===e.numChildren()){const t=e.children[0];t instanceof lp||(t.swapWithParent(),Tp(e))}}const Lp="scale_";function qp(e){for(const t of e){for(const e of t.children)if(e.parent!==t)return!1;if(!qp(t.children))return!1}return!0}function Rp(e,t){let n=!1;for(const i of t)n=e.optimize(i)||n;return n}function Wp(e,t,n){let i=e.sources,r=!1;return r=Rp(new kp,i)||r,r=Rp(new Fp(t),i)||r,i=i.filter((e=>e.numChildren()>0)),r=Rp(new Ep,i)||r,i=i.filter((e=>e.numChildren()>0)),n||(r=Rp(new Cp,i)||r,r=Rp(new zp(t),i)||r,r=Rp(new $p,i)||r,r=Rp(new Sp,i)||r,r=Rp(new _p,i)||r,r=Rp(new Bp,i)||r,r=Rp(new Dp,i)||r,r=Rp(new Op,i)||r),e.sources=i,r}class Up{constructor(e){Sn(this,"signal",void 0),Object.defineProperty(this,"signal",{enumerable:!0,get:e})}static fromName(e,t){return new Up((()=>e(t)))}}function Hp(e){xm(e)?function(e){const t=e.component.scales;for(const n of E(t)){const i=Ip(e,n);if(t[n].setWithExplicit("domains",i),Xp(e,n),e.component.data.isFaceted){let t=e;for(;!wm(t)&&t.parent;)t=t.parent;if("shared"===t.component.resolve.scale[n])for(const e of i.value)un(e)&&(e.data=Lp+e.data.replace(Lp,""))}}}(e):function(e){for(const t of e.children)Hp(t);const t=e.component.scales;for(const n of E(t)){let i,r=null;for(const t of e.children){const e=t.component.scales[n];if(e){i=void 0===i?e.getWithExplicit("domains"):qu(i,e.getWithExplicit("domains"),"domains","scale",Qp);const t=e.get("selectionExtent");r&&t&&r.param!==t.param&&ui(qn),r=t}}t[n].setWithExplicit("domains",i),r&&t[n].set("selectionExtent",r,!0)}}(e)}function Ip(e,t){const n=e.getScaleComponent(t).get("type"),{encoding:i}=e,r=function(e,t,n,i){if("unaggregated"===e){const{valid:e,reason:i}=Jp(t,n);if(!e)return void ui(i)}else if(void 0===e&&i.useUnaggregatedDomain){const{valid:e}=Jp(t,n);if(e)return"unaggregated"}return e}(e.scaleDomain(t),e.typedFieldDef(t),n,e.config.scale);return r!==e.scaleDomain(t)&&(e.specifiedScales[t]={...e.specifiedScales[t],domain:r}),"x"===t&&ra(i.x2)?ra(i.x)?qu(Gp(n,r,e,"x"),Gp(n,r,e,"x2"),"domain","scale",Qp):Gp(n,r,e,"x2"):"y"===t&&ra(i.y2)?ra(i.y)?qu(Gp(n,r,e,"y"),Gp(n,r,e,"y2"),"domain","scale",Qp):Gp(n,r,e,"y2"):Gp(n,r,e,t)}function Vp(e,t,n){var i;const r=null===(i=Fi(n))||void 0===i?void 0:i.unit;return"temporal"===t||r?function(e,t,n){return e.map((e=>({signal:`{data: ${fa(e,{timeUnit:n,type:t})}}`})))}(e,t,r):[e]}function Gp(e,n,i,r){const{encoding:o}=i,a=ra(o[r]),{type:s}=a,u=a.timeUnit;if(function(e){return e&&e.unionWith}(n)){const t=Gp(e,void 0,i,r),o=Vp(n.unionWith,s,u);return Nu([...t.value,...o])}if(an(n))return Nu([n]);if(n&&"unaggregated"!==n&&!gr(n))return Nu(Vp(n,s,u));const l=i.stack;if(l&&r===l.fieldChannel){if("normalize"===l.offset)return Mu([[0,1]]);const e=i.requestDataName(Xu.Main);return Mu([{data:e,field:i.vgField(r,{suffix:"start"})},{data:e,field:i.vgField(r,{suffix:"end"})}])}const c=Pt(r)&&jo(a)?function(e,t,n){if(!fr(n))return;const i=e.fieldDef(t),r=i.sort;if(Do(r))return{op:"min",field:cd(i,t),order:"ascending"};const{stack:o}=e,a=o?[...o.groupbyField?[o.groupbyField]:[],...o.stackBy.map((e=>e.fieldDef.field))]:void 0;if(Ao(r)){return Yp(r,o&&!v(a,r.field))}if(wo(r)){const{encoding:t,order:n}=r,i=e.fieldDef(t),{aggregate:s,field:u}=i,l=o&&!v(a,u);if(Wt(s)||Ut(s))return Yp({field:Yo(i),order:n},l);if(Ht(s)||!s)return Yp({op:s,field:u,order:n},l)}else{if("descending"===r)return{op:"min",field:e.vgField(t),order:"descending"};if(v(["ascending",void 0],r))return!0}return}(i,r,e):void 0;if(Mo(a)){return Mu(Vp([a.datum],s,u))}const f=a;if("unaggregated"===n){const e=i.requestDataName(Xu.Main),{field:t}=a;return Mu([{data:e,field:Yo({field:t,aggregate:"min"})},{data:e,field:Yo({field:t,aggregate:"max"})}])}if(Jt(f.bin)){if(fr(e))return Mu("bin-ordinal"===e?[]:[{data:z(c)?i.requestDataName(Xu.Main):i.requestDataName(Xu.Raw),field:i.vgField(r,pa(f,r)?{binSuffix:"range"}:{}),sort:!0!==c&&t.isObject(c)?c:{field:i.vgField(r,{}),op:"min"}}]);{const{bin:e}=f;if(Jt(e)){const t=rp(i,f.field,e);return Mu([new Up((()=>{const e=i.getSignalName(t);return`[${e}.start, ${e}.stop]`}))])}return Mu([{data:i.requestDataName(Xu.Main),field:i.vgField(r,{})}])}}if(f.timeUnit&&v(["time","utc"],e)&&_o(f,xm(i)?i.encoding[et(r)]:void 0,i.markDef,i.config)){const e=i.requestDataName(Xu.Main);return Mu([{data:e,field:i.vgField(r)},{data:e,field:i.vgField(r,{suffix:"end"})}])}return Mu(c?[{data:z(c)?i.requestDataName(Xu.Main):i.requestDataName(Xu.Raw),field:i.vgField(r),sort:c}]:[{data:i.requestDataName(Xu.Main),field:i.vgField(r)}])}function Yp(e,t){const{op:n,field:i,order:r}=e;return{op:n??(t?"sum":vo),...i?{field:q(i)}:{},...r?{order:r}:{}}}function Xp(e,t){var n;const i=e.component.scales[t],r=e.specifiedScales[t].domain,o=null===(n=e.fieldDef(t))||void 0===n?void 0:n.bin,a=gr(r)&&r,s=Kt(o)&&Zt(o.extent)&&o.extent;(a||s)&&i.set("selectionExtent",a??s,!0)}function Jp(e,n){const{aggregate:i,type:r}=e;return i?t.isString(i)&&!Yt[i]?{valid:!1,reason:Kn(i)}:"quantitative"===r&&"log"===n?{valid:!1,reason:Zn(e)}:{valid:!0}:{valid:!1,reason:Qn(e)}}function Qp(e,t,n,i){return e.explicit&&t.explicit&&ui(function(e,t,n,i){return`Conflicting ${t.toString()} property "${e.toString()}" (${g(n)} and ${g(i)}). Using the union of the two domains.`}(n,i,e.value,t.value)),{explicit:e.explicit,value:[...e.value,...t.value]}}function Kp(e){const n=D(e.map((e=>{if(un(e)){const{sort:t,...n}=e;return n}return e})),h),i=D(e.map((e=>{if(un(e)){const t=e.sort;return void 0===t||z(t)||("op"in t&&"count"===t.op&&delete t.field,"ascending"===t.order&&delete t.order),t}})).filter((e=>void 0!==e)),h);if(0===n.length)return;if(1===n.length){const n=e[0];if(un(n)&&i.length>0){let e=i[0];if(i.length>1)ui(ni),e=!0;else if(t.isObject(e)&&"field"in e){const t=e.field;n.field===t&&(e=!e.order||{order:e.order})}return{...n,sort:e}}return n}const r=D(i.map((e=>z(e)||!("op"in e)||t.isString(e.op)&&e.op in Rt?e:(ui(function(e){return`Dropping sort property ${g(e)} as unioned domains only support boolean or op "count", "min", and "max".`}(e)),!0))),h);let o;1===r.length?o=r[0]:r.length>1&&(ui(ni),o=!0);const a=D(e.map((e=>un(e)?e.data:null)),(e=>e));if(1===a.length&&null!==a[0]){return{data:a[0],fields:n.map((e=>e.field)),...o?{sort:o}:{}}}return{fields:n,...o?{sort:o}:{}}}function Zp(e){if(un(e)&&t.isString(e.field))return e.field;if(function(e){return!t.isArray(e)&&"fields"in e&&!("data"in e)}(e)){let n;for(const i of e.fields)if(un(i)&&t.isString(i.field))if(n){if(n!==i.field)return ui("Detected faceted independent scales that union domain of multiple fields from different data sources. We will use the first field. The result view size may be incorrect."),n}else n=i.field;return ui("Detected faceted independent scales that union domain of the same fields from different source. We will assume that this is the same field from a different fork of the same data source. However, if this is not the case, the result view size may be incorrect."),n}if(function(e){return!t.isArray(e)&&"fields"in e&&"data"in e}(e)){ui("Detected faceted independent scales that union domain of multiple fields from the same data source. We will use the first field. The result view size may be incorrect.");const n=e.fields[0];return t.isString(n)?n:void 0}}function em(e,t){return Kp(e.component.scales[t].get("domains").map((t=>(un(t)&&(t.data=e.lookupDataSource(t.data)),t))))}function tm(e){return Dm(e)||Am(e)?e.children.reduce(((e,t)=>e.concat(tm(t))),nm(e)):nm(e)}function nm(e){return E(e.component.scales).reduce(((n,i)=>{const r=e.component.scales[i];if(r.merged)return n;const o=r.combine(),{name:a,type:s,selectionExtent:u,domains:l,range:c,reverse:f,...d}=o,p=function(e,n,i,r){if(vt(i)){if(sn(e))return{step:{signal:`${n}_step`}}}else if(t.isObject(e)&&un(e))return{...e,data:r.lookupDataSource(e.data)};return e}(o.range,a,i,e),m=em(e,i),g=u?function(e,n,i,r){const o=Xf(e,n.param,n);return{signal:dr(i.get("type"))&&t.isArray(r)&&r[0]>r[1]?`isValid(${o}) && reverse(${o})`:o}}(e,u,r,m):null;return n.push({name:a,type:s,...m?{domain:m}:{},...g?{domainRaw:g}:{},range:p,...void 0!==f?{reverse:f}:{},...d}),n}),[])}class im extends ju{constructor(e,t){super({},{name:e}),Sn(this,"merged",!1),this.setWithExplicit("type",t)}domainDefinitelyIncludesZero(){return!1!==this.get("zero")||b(this.get("domains"),(e=>t.isArray(e)&&2===e.length&&e[0]<=0&&e[1]>=0))}}const rm=["range","scheme"];function om(e){return"x"===e?"width":"y"===e?"height":void 0}function am(e,n){const i=e.fieldDef(n);if(null!=i&&i.bin){const{bin:r,field:o}=i,a=om(n),s=e.getName(a);if(t.isObject(r)&&r.binned&&void 0!==r.step)return new Up((()=>{const t=e.scaleName(n),i=`(domain("${t}")[1] - domain("${t}")[0]) / ${r.step}`;return`${e.getSignalName(s)} / (${i})`}));if(Jt(r)){const t=rp(e,o,r);return new Up((()=>{const n=e.getSignalName(t),i=`(${n}.stop - ${n}.start) / ${n}.step`;return`${e.getSignalName(s)} / (${i})`}))}}}function sm(e,n){const i=n.specifiedScales[e],{size:r}=n,o=n.getScaleComponent(e).get("type");for(const r of rm)if(void 0!==i[r]){const a=Fr(o,r),s=$r(e,r);if(a)if(s)ui(s);else switch(r){case"range":{const r=i.range;if(t.isArray(r)){if(vt(e))return Nu(r.map((e=>{if("width"===e||"height"===e){const t=n.getName(e),i=n.getSignalName.bind(n);return Up.fromName(i,t)}return e})))}else if(t.isObject(r))return Nu({data:n.requestDataName(Xu.Main),field:r.field,sort:{op:"min",field:n.vgField(e)}});return Nu(r)}case"scheme":return Nu(um(i[r]))}else ui(ei(o,r,e))}if(e===ee||e===te){const t=e===ee?"width":"height",n=r[t];if(vs(n)){if(fr(o))return Nu({step:n.step});ui(ti(t))}}const{rangeMin:a,rangeMax:s}=i,u=function(e,n){const{size:i,config:r,mark:o,encoding:a}=n,s=n.getSignalName.bind(n),{type:u}=ra(a[e]),l=n.getScaleComponent(e).get("type"),{domain:c,domainMid:f}=n.specifiedScales[e];switch(e){case ee:case te:{if(v(["point","band"],l))if(e!==ee||i.width){if(e===te&&!i.height){const e=Ds(r.view,"height");if(vs(e))return e}}else{const e=Ds(r.view,"width");if(vs(e))return e}const t=om(e),o=n.getName(t);return e===te&&dr(l)?[Up.fromName(s,o),0]:[0,Up.fromName(s,o)]}case he:{const a=lm(o,n.component.scales[e].get("zero"),r),s=function(e,n,i,r){const o={x:am(i,"x"),y:am(i,"y")};switch(e){case"bar":case"tick":{if(void 0!==r.scale.maxBandSize)return r.scale.maxBandSize;const e=fm(n,o,r.view);return t.isNumber(e)?e-1:new Up((()=>`${e.signal} - 1`))}case"line":case"trail":case"rule":return r.scale.maxStrokeWidth;case"text":return r.scale.maxFontSize;case"point":case"square":case"circle":{if(r.scale.maxSize)return r.scale.maxSize;const e=fm(n,o,r.view);return t.isNumber(e)?Math.pow(cm*e,2):new Up((()=>`pow(0.95 * ${e.signal}, 2)`))}}throw new Error(Gn("size",e))}(o,i,n,r);return mr(l)?function(e,t,n){const i=()=>{const i=yn(t),r=yn(e),o=`(${i} - ${r}) / (${n} - 1)`;return`sequence(${r}, ${i} + ${o}, ${o})`};return an(t)?new Up(i):{signal:i()}}(a,s,function(e,n,i,r){switch(e){case"quantile":return n.scale.quantileCount;case"quantize":return n.scale.quantizeCount;case"threshold":return void 0!==i&&t.isArray(i)?i.length+1:(ui(function(e){return`Domain for ${e} is required for threshold scale.`}(r)),3)}}(l,r,c,e)):[a,s]}case ae:return[0,2*Math.PI];case ye:return[0,360];case re:return[0,new Up((()=>`min(${n.getSignalName("width")},${n.getSignalName("height")})/2`))];case we:return[r.scale.minStrokeWidth,r.scale.maxStrokeWidth];case Ae:return[[1,0],[4,2],[2,1],[1,1],[1,2,4,2]];case ge:return"symbol";case de:case pe:case me:return"ordinal"===l?"nominal"===u?"category":"ordinal":void 0!==f?"diverging":"rect"===o||"geoshape"===o?"heatmap":"ramp";case ve:case be:case xe:return[r.scale.minOpacity,r.scale.maxOpacity]}throw new Error(`Scale range undefined for channel ${e}`)}(e,n);return(void 0!==a||void 0!==s)&&Fr(o,"rangeMin")&&t.isArray(u)&&2===u.length?Nu([a??u[0],s??u[1]]):Mu(u)}function um(e){return function(e){return!t.isString(e)&&!!e.name}(e)?{scheme:e.name,...m(e,["name"])}:{scheme:e}}function lm(e,t,n){if(t)return an(t)?{signal:`${t.signal} ? 0 : ${lm(e,!1,n)}`}:0;switch(e){case"bar":case"tick":return n.scale.minBandSize;case"line":case"trail":case"rule":return n.scale.minStrokeWidth;case"text":return n.scale.minFontSize;case"point":case"square":case"circle":return n.scale.minSize}throw new Error(Gn("size",e))}const cm=.95;function fm(e,t,n){const i=vs(e.width)?e.width.step:As(n,"width"),r=vs(e.height)?e.height.step:As(n,"height");return t.x||t.y?new Up((()=>`min(${[t.x?t.x.signal:i,t.y?t.y.signal:r].join(", ")})`)):Math.min(i,r)}function dm(e,t){xm(e)?function(e,t){const n=e.component.scales,{config:i,encoding:r,markDef:o,specifiedScales:a}=e;for(const s of E(n)){const u=a[s],l=n[s],c=e.getScaleComponent(s),f=ra(r[s]),d=u[t],p=c.get("type"),m=c.get("padding"),g=c.get("paddingInner"),h=Fr(p,t),y=$r(s,t);if(void 0!==d&&(h?y&&ui(y):ui(ei(p,t,s))),h&&void 0===y)if(void 0!==d){const e=f.timeUnit,n=f.type;switch(t){case"domainMax":case"domainMin":li(u[t])||"temporal"===n||e?l.set(t,{signal:fa(u[t],{type:n,timeUnit:e})},!0):l.set(t,u[t],!0);break;default:l.copyKeyFromObject(t,u)}}else{const n=t in pm?pm[t]({model:e,channel:s,fieldOrDatumDef:f,scaleType:p,scalePadding:m,scalePaddingInner:g,domain:u.domain,markDef:o,config:i}):i.scale[t];void 0!==n&&l.set(t,n,!1)}}}(e,t):gm(e,t)}const pm={bins:({model:e,fieldOrDatumDef:t})=>jo(t)?function(e,t){const n=t.bin;if(Jt(n)){const i=rp(e,t.field,n);return new Up((()=>e.getSignalName(i)))}if(Qt(n)&&Kt(n)&&void 0!==n.step)return{step:n.step};return}(e,t):void 0,interpolate:({channel:e,fieldOrDatumDef:t})=>function(e,t){if(v([de,pe,me],e)&&"nominal"!==t)return"hcl";return}(e,t.type),nice:({scaleType:e,channel:n,domain:i,fieldOrDatumDef:r})=>function(e,n,i,r){var o;if(null!==(o=ia(r))&&void 0!==o&&o.bin||t.isArray(i)||v([Gi,Yi],e))return;return n in ht||void 0}(e,n,i,r),padding:({channel:e,scaleType:t,fieldOrDatumDef:n,markDef:i,config:r})=>function(e,t,n,i,r,o){if(e in ht){if(pr(t)){if(void 0!==n.continuousPadding)return n.continuousPadding;const{type:t,orient:a}=r;if("bar"===t&&(!jo(i)||!i.bin&&!i.timeUnit)&&("vertical"===a&&"x"===e||"horizontal"===a&&"y"===e))return o.continuousBandSize}if(t===Ki)return n.pointPadding}return}(e,t,r.scale,n,i,r.bar),paddingInner:({scalePadding:e,channel:t,markDef:n,config:i})=>function(e,t,n,i){if(void 0!==e)return;if(t in ht){const{bandPaddingInner:e,barBandPaddingInner:t,rectBandPaddingInner:r}=i;return H(e,"bar"===n?t:r)}return}(e,t,n.type,i.scale),paddingOuter:({scalePadding:e,channel:t,scaleType:n,markDef:i,scalePaddingInner:r,config:o})=>function(e,t,n,i,r,o){if(void 0!==e)return;if(t in ht&&n===Zi){const{bandPaddingOuter:e}=o;return H(e,an(r)?{signal:`${r.signal}/2`}:r/2)}return}(e,t,n,i.type,r,o.scale),reverse:({fieldOrDatumDef:e,scaleType:t,channel:n,config:i})=>function(e,t,n,i){if("x"===n&&void 0!==i.xReverse)return dr(e)&&"descending"===t?an(i.xReverse)?{signal:`!${i.xReverse.signal}`}:!i.xReverse:i.xReverse;if(dr(e)&&"descending"===t)return!0;return}(t,jo(e)?e.sort:void 0,n,i.scale),zero:({channel:e,fieldOrDatumDef:n,domain:i,markDef:r,scaleType:o})=>function(e,n,i,r,o){if(i&&"unaggregated"!==i&&dr(o)){if(t.isArray(i)){const e=i[0],t=i[i.length-1];if(e<=0&&t>=0)return!0}return!1}if("size"===e&&"quantitative"===n.type&&!mr(o))return!0;if((!jo(n)||!n.bin)&&v([...yt,...xt],e)){const{orient:t,type:n}=r;return!v(["bar","area","line","trail"],n)||!("horizontal"===t&&"y"===e||"vertical"===t&&"x"===e)}return!1}(e,n,i,r,o)};function mm(e){xm(e)?function(e){const t=e.component.scales;for(const n of Ot){const i=t[n];if(!i)continue;const r=sm(n,e);i.setWithExplicit("range",r)}}(e):gm(e,"range")}function gm(e,t){const n=e.component.scales;for(const n of e.children)"range"===t?mm(n):dm(n,t);for(const i of E(n)){let r;for(const n of e.children){const e=n.component.scales[i];if(e){r=qu(r,e.getWithExplicit(t),t,"scale",Tu(((e,n)=>{switch(t){case"range":return e.step&&n.step?e.step-n.step:0}return 0})))}}n[i].setWithExplicit(t,r)}}function hm(e,t,n,i){const r=function(e,t,n){switch(t.type){case"nominal":case"ordinal":var i;if(Ne(e)||"discrete"===Lt(e))return"shape"===e&&"ordinal"===t.type&&ui(Jn(e,"ordinal")),"ordinal";if(e in ht){if(v(["rect","bar","image","rule"],n.type))return"band"}else if("arc"===n.type&&e in bt)return"band";return Yr(n[tt(e)])||Ho(t)&&null!==(i=t.axis)&&void 0!==i&&i.tickBand?"band":"point";case"temporal":return Ne(e)?"time":"discrete"===Lt(e)?(ui(Jn(e,"temporal")),"ordinal"):jo(t)&&t.timeUnit&&Fi(t.timeUnit).utc?"utc":"time";case"quantitative":return Ne(e)?jo(t)&&Jt(t.bin)?"bin-ordinal":"linear":"discrete"===Lt(e)?(ui(Jn(e,"quantitative")),"ordinal"):"linear";case"geojson":return}throw new Error(Hn(t.type))}(t,n,i),{type:o}=e;return Pt(t)?void 0!==o?function(e,t){if(!Pt(e))return!1;switch(e){case ee:case te:case ae:case re:return pr(t)||v(["band","point"],t);case he:case we:case ve:case be:case xe:case ye:return pr(t)||mr(t)||v(["band","point","ordinal"],t);case de:case pe:case me:return"band"!==t;case Ae:case ge:return"ordinal"===t||mr(t)}}(t,o)?jo(n)&&(a=o,s=n.type,!(v([Ti,qi],s)?void 0===a||fr(a):s===Li?v([Gi,Yi,void 0],a):s!==Mi||v([Ui,Hi,Ii,Vi,Xi,Ji,Qi,Wi,void 0],a)))?(ui(function(e,t){return`FieldDef does not work with "${e}" scale. We are using "${t}" scale instead.`}(o,r)),r):o:(ui(function(e,t,n){return`Channel "${e}" does not work with "${t}" scale. We are using "${n}" scale instead.`}(t,o,r)),r):r:null;var a,s}function ym(e){xm(e)?e.component.scales=function(e){const{encoding:t,mark:n,markDef:i}=e;return Ot.reduce(((r,o)=>{const a=ra(t[o]);if(a&&n===qr&&o===ge&&a.type===Ri)return r;let s=a&&a.scale;if(a&&null!==s&&!1!==s){s??(s={});const t=hm(s,o,a,i);r[o]=new im(e.scaleName(`${o}`,!0),{value:t,explicit:s.type===t})}return r}),{})}(e):e.component.scales=function(e){const t=e.component.scales={},n={},i=e.component.resolve;for(const t of e.children){ym(t);for(const o of E(t.component.scales)){var r;if((r=i.scale)[o]??(r[o]=zd(o,e)),"shared"===i.scale[o]){const e=n[o],r=t.component.scales[o].getWithExplicit("type");e?tr(e.value,r.value)?n[o]=qu(e,r,"type","scale",vm):(i.scale[o]="independent",delete n[o]):n[o]=r}}}for(const i of E(n)){const r=e.scaleName(i,!0),o=n[i];t[i]=new im(r,o);for(const t of e.children){const e=t.component.scales[i];e&&(t.renameScale(e.get("name"),r),e.merged=!0)}}return t}(e)}const vm=Tu(((e,t)=>ir(e)-ir(t)));class bm{constructor(){Sn(this,"nameMap",void 0),this.nameMap={}}rename(e,t){this.nameMap[e]=t}has(e){return void 0!==this.nameMap[e]}get(e){for(;this.nameMap[e]&&e!==this.nameMap[e];)e=this.nameMap[e];return e}}function xm(e){return"unit"===(null==e?void 0:e.type)}function wm(e){return"facet"===(null==e?void 0:e.type)}function Am(e){return"concat"===(null==e?void 0:e.type)}function Dm(e){return"layer"===(null==e?void 0:e.type)}class Fm{constructor(e,n,i,r,o,a,s){this.type=n,this.parent=i,this.config=o,Sn(this,"name",void 0),Sn(this,"size",void 0),Sn(this,"title",void 0),Sn(this,"description",void 0),Sn(this,"data",void 0),Sn(this,"transforms",void 0),Sn(this,"layout",void 0),Sn(this,"scaleNameMap",void 0),Sn(this,"projectionNameMap",void 0),Sn(this,"signalNameMap",void 0),Sn(this,"component",void 0),Sn(this,"view",void 0),Sn(this,"children",void 0),Sn(this,"correctDataNames",(e=>{var t,n,i;return null!==(t=e.from)&&void 0!==t&&t.data&&(e.from.data=this.lookupDataSource(e.from.data)),null!==(n=e.from)&&void 0!==n&&null!==(i=n.facet)&&void 0!==i&&i.data&&(e.from.facet.data=this.lookupDataSource(e.from.facet.data)),e})),this.parent=i,this.config=o,this.view=nn(s),this.name=e.name??r,this.title=on(e.title)?{text:e.title}:e.title?nn(e.title):void 0,this.scaleNameMap=i?i.scaleNameMap:new bm,this.projectionNameMap=i?i.projectionNameMap:new bm,this.signalNameMap=i?i.signalNameMap:new bm,this.data=e.data,this.description=e.description,this.transforms=(e.transform??[]).map((e=>au(e)?{filter:c(e.filter,Ni)}:e)),this.layout="layer"===n||"unit"===n?{}:function(e,n,i){const r=i[n],o={},{spacing:a,columns:s}=r;void 0!==a&&(o.spacing=a),void 0!==s&&(ko(e)&&!Fo(e.facet)||ps(e))&&(o.columns=s),ms(e)&&(o.columns=1);for(const n of xs)if(void 0!==e[n])if("spacing"===n){const i=e[n];o[n]=t.isNumber(i)?i:{row:i.row??a,column:i.column??a}}else o[n]=e[n];return o}(e,n,o),this.component={data:{sources:i?i.component.data.sources:[],outputNodes:i?i.component.data.outputNodes:{},outputNodeRefCounts:i?i.component.data.outputNodeRefCounts:{},isFaceted:ko(e)||i&&i.component.data.isFaceted&&void 0===e.data},layoutSize:new ju,layoutHeaders:{row:{},column:{},facet:{}},mark:null,resolve:{scale:{},axis:{},legend:{},...a?d(a):{}},selection:null,scales:null,projection:null,axes:{},legends:{}}}get width(){return this.getSizeSignalRef("width")}get height(){return this.getSizeSignalRef("height")}parse(){this.parseScale(),this.parseLayoutSize(),this.renameTopLevelLayoutSizeSignal(),this.parseSelections(),this.parseProjection(),this.parseData(),this.parseAxesAndHeaders(),this.parseLegends(),this.parseMarkGroup()}parseScale(){!function(e,{ignoreRange:t}={}){ym(e),Hp(e);for(const t of Dr)dm(e,t);t||mm(e)}(this)}parseProjection(){tp(this)}renameTopLevelLayoutSizeSignal(){"width"!==this.getName("width")&&this.renameSignal(this.getName("width"),"width"),"height"!==this.getName("height")&&this.renameSignal(this.getName("height"),"height")}parseLegends(){Id(this)}assembleEncodeFromView(e){const{style:t,...n}=e,i={};for(const e of E(n)){const t=n[e];void 0!==t&&(i[e]=gn(t))}return i}assembleGroupEncodeEntry(e){let t={};return this.view&&(t=this.assembleEncodeFromView(this.view)),e||(this.description&&(t.description=gn(this.description)),"unit"!==this.type&&"layer"!==this.type)?S(t)?void 0:t:{width:this.getSizeSignalRef("width"),height:this.getSizeSignalRef("height"),...t??{}}}assembleLayout(){if(!this.layout)return;const{spacing:e,...t}=this.layout,{component:n,config:i}=this,r=function(e,t){const n={};for(const i of Te){const r=e[i];if(null!=r&&r.facetFieldDef){const{titleAnchor:e,titleOrient:o}=pd(["titleAnchor","titleOrient"],r.facetFieldDef.header,t,i),a=fd(i,o),s=Fd(e,a);void 0!==s&&(n[a]=s)}}return S(n)?void 0:n}(n.layoutHeaders,i);return{padding:e,...this.assembleDefaultLayout(),...t,...r?{titleBand:r}:{}}}assembleDefaultLayout(){return{}}assembleHeaderMarks(){const{layoutHeaders:e}=this.component;let t=[];for(const n of Te)e[n].title&&t.push(hd(this,n));for(const e of md)t=t.concat(bd(this,e));return t}assembleAxes(){return function(e,t){const{x:n=[],y:i=[]}=e;return[...n.map((e=>Kf(e,"grid",t))),...i.map((e=>Kf(e,"grid",t))),...n.map((e=>Kf(e,"main",t))),...i.map((e=>Kf(e,"main",t)))].filter((e=>e))}(this.component.axes,this.config)}assembleLegends(){return Jd(this)}assembleProjections(){return Qd(this)}assembleTitle(){const{encoding:e,...t}=this.title??{},n={...rn(this.config.title).nonMarkTitleProperties,...t,...e?{encode:{update:e}}:{}};if(n.text)return v(["unit","layer"],this.type)?v(["middle",void 0],n.anchor)&&(n.frame??(n.frame="group")):n.anchor??(n.anchor="start"),S(n)?void 0:n}assembleGroup(e=[]){const t={};(e=e.concat(this.assembleSignals())).length>0&&(t.signals=e);const n=this.assembleLayout();n&&(t.layout=n),t.marks=[].concat(this.assembleHeaderMarks(),this.assembleMarks());const i=!this.parent||wm(this.parent)?tm(this):[];i.length>0&&(t.scales=i);const r=this.assembleAxes();r.length>0&&(t.axes=r);const o=this.assembleLegends();return o.length>0&&(t.legends=o),t}getName(e){return O((this.name?`${this.name}_`:"")+e)}getDataName(e){return this.getName(Xu[e].toLowerCase())}requestDataName(e){const t=this.getDataName(e),n=this.component.data.outputNodeRefCounts;return n[t]=(n[t]||0)+1,t}getSizeSignalRef(e){if(wm(this.parent)){const t=wt(Bd(e)),n=this.component.scales[t];if(n&&!n.merged){const e=n.get("type"),i=n.get("range");if(fr(e)&&sn(i)){const e=n.get("name"),i=Zp(em(this,t));if(i){return{signal:Ed(e,n,Yo({aggregate:"distinct",field:i},{expr:"datum"}))}}return ui(Nn(t)),null}}}return{signal:this.signalNameMap.get(this.getName(e))}}lookupDataSource(e){const t=this.component.data.outputNodes[e];return t?t.getSource():e}getSignalName(e){return this.signalNameMap.get(e)}renameSignal(e,t){this.signalNameMap.rename(e,t)}renameScale(e,t){this.scaleNameMap.rename(e,t)}renameProjection(e,t){this.projectionNameMap.rename(e,t)}scaleName(e,t){return t?this.getName(e):Xe(e)&&Pt(e)&&this.component.scales[e]||this.scaleNameMap.has(this.getName(e))?this.scaleNameMap.get(this.getName(e)):void 0}projectionName(e){return e?this.getName("projection"):this.component.projection&&!this.component.projection.merged||this.projectionNameMap.has(this.getName("projection"))?this.projectionNameMap.get(this.getName("projection")):void 0}getScaleComponent(e){if(!this.component.scales)throw new Error("getScaleComponent cannot be called before parseScale(). Make sure you have called parseScale or use parseUnitModelWithScale().");const t=this.component.scales[e];return t&&!t.merged?t:this.parent?this.parent.getScaleComponent(e):void 0}getSelectionComponent(e,t){let n=this.component.selection[e];if(!n&&this.parent&&(n=this.parent.getSelectionComponent(e,t)),!n)throw new Error(function(e){return`Cannot find a selection named "${e}".`}(t));return n}hasAxisOrientSignalRef(){var e,t;return(null===(e=this.component.axes.x)||void 0===e?void 0:e.some((e=>e.hasOrientSignalRef())))||(null===(t=this.component.axes.y)||void 0===t?void 0:t.some((e=>e.hasOrientSignalRef())))}}class $m extends Fm{vgField(e,t={}){const n=this.fieldDef(e);if(n)return Yo(n,t)}reduceFieldDef(e,n){return function(e,n,i,r){return e?E(e).reduce(((i,o)=>{const a=e[o];return t.isArray(a)?a.reduce(((e,t)=>n.call(r,e,t,o)),i):n.call(r,i,a,o)}),i):i}(this.getMapping(),((t,n,i)=>{const r=ia(n);return r?e(t,r,i):t}),n)}forEachFieldDef(e,t){Ea(this.getMapping(),((t,n)=>{const i=ia(t);i&&e(i,n)}),t)}}class km extends fl{clone(){return new km(null,d(this.transform))}constructor(e,t){super(e),this.transform=t,this.transform=d(t);const n=this.transform.as??[void 0,void 0];this.transform.as=[n[0]??"value",n[1]??"density"]}dependentFields(){return new Set([this.transform.density,...this.transform.groupby??[]])}producedFields(){return new Set(this.transform.as)}hash(){return`DensityTransform ${h(this.transform)}`}assemble(){const{density:e,...t}=this.transform;return{type:"kde",field:e,...t}}}class Cm extends fl{clone(){return new Cm(null,{...this.filter})}constructor(e,t){super(e),this.filter=t}static make(e,t){const{config:n,mark:i,markDef:r}=t;if("filter"!==xn("invalid",r,n))return null;const o=t.reduceFieldDef(((e,n,r)=>{const o=Pt(r)&&t.getScaleComponent(r);if(o){dr(o.get("type"))&&"count"!==n.aggregate&&!Rr(i)&&(e[n.field]=n)}return e}),{});return E(o).length?new Cm(e,o):null}dependentFields(){return new Set(E(this.filter))}producedFields(){return new Set}hash(){return`FilterInvalid ${h(this.filter)}`}assemble(){const e=E(this.filter).reduce(((e,t)=>{const n=this.filter[t],i=Yo(n,{expr:"datum"});return null!==n&&("temporal"===n.type?e.push(`(isDate(${i}) || (isValid(${i}) && isFinite(+${i})))`):"quantitative"===n.type&&(e.push(`isValid(${i})`),e.push(`isFinite(+${i})`))),e}),[]);return e.length>0?{type:"filter",expr:e.join(" && ")}:null}}class Sm extends fl{clone(){return new Sm(this.parent,d(this.transform))}constructor(e,t){super(e),this.transform=t,this.transform=d(t);const{flatten:n,as:i=[]}=this.transform;this.transform.as=n.map(((e,t)=>i[t]??e))}dependentFields(){return new Set(this.transform.flatten)}producedFields(){return new Set(this.transform.as)}hash(){return`FlattenTransform ${h(this.transform)}`}assemble(){const{flatten:e,as:t}=this.transform;return{type:"flatten",fields:e,as:t}}}class Em extends fl{clone(){return new Em(null,d(this.transform))}constructor(e,t){super(e),this.transform=t,this.transform=d(t);const n=this.transform.as??[void 0,void 0];this.transform.as=[n[0]??"key",n[1]??"value"]}dependentFields(){return new Set(this.transform.fold)}producedFields(){return new Set(this.transform.as)}hash(){return`FoldTransform ${h(this.transform)}`}assemble(){const{fold:e,as:t}=this.transform;return{type:"fold",fields:e,as:t}}}class Bm extends fl{clone(){return new Bm(null,d(this.fields),this.geojson,this.signal)}static parseAll(e,t){if(t.component.projection&&!t.component.projection.isFit)return e;let n=0;for(const i of[[le,ue],[fe,ce]]){const r=i.map((e=>{const n=ra(t.encoding[e]);return jo(n)?n.field:Mo(n)?{expr:`${n.datum}`}:Wo(n)?{expr:`${n.value}`}:void 0}));(r[0]||r[1])&&(e=new Bm(e,r,null,t.getName("geojson_"+n++)))}if(t.channelHasField(ge)){const i=t.typedFieldDef(ge);i.type===Ri&&(e=new Bm(e,null,i.field,t.getName("geojson_"+n++)))}return e}constructor(e,t,n,i){super(e),this.fields=t,this.geojson=n,this.signal=i}dependentFields(){const e=(this.fields??[]).filter(t.isString);return new Set([...this.geojson?[this.geojson]:[],...e])}producedFields(){return new Set}hash(){return`GeoJSON ${this.geojson} ${this.signal} ${h(this.fields)}`}assemble(){return[...this.geojson?[{type:"filter",expr:`isValid(datum["${this.geojson}"])`}]:[],{type:"geojson",...this.fields?{fields:this.fields}:{},...this.geojson?{geojson:this.geojson}:{},signal:this.signal}]}}class _m extends fl{clone(){return new _m(null,this.projection,d(this.fields),d(this.as))}constructor(e,t,n,i){super(e),this.projection=t,this.fields=n,this.as=i}static parseAll(e,t){if(!t.projectionName())return e;for(const n of[[le,ue],[fe,ce]]){const i=n.map((e=>{const n=ra(t.encoding[e]);return jo(n)?n.field:Mo(n)?{expr:`${n.datum}`}:Wo(n)?{expr:`${n.value}`}:void 0})),r=n[0]===fe?"2":"";(i[0]||i[1])&&(e=new _m(e,t.projectionName(),i,[t.getName(`x${r}`),t.getName(`y${r}`)]))}return e}dependentFields(){return new Set(this.fields.filter(t.isString))}producedFields(){return new Set(this.as)}hash(){return`Geopoint ${this.projection} ${h(this.fields)} ${h(this.as)}`}assemble(){return{type:"geopoint",projection:this.projection,fields:this.fields,as:this.as}}}class zm extends fl{clone(){return new zm(null,d(this.transform))}constructor(e,t){super(e),this.transform=t}dependentFields(){return new Set([this.transform.impute,this.transform.key,...this.transform.groupby??[]])}producedFields(){return new Set([this.transform.impute])}processSequence(e){const{start:t=0,stop:n,step:i}=e;return{signal:`sequence(${[t,n,...i?[i]:[]].join(",")})`}}static makeFromTransform(e,t){return new zm(e,t)}static makeFromEncoding(e,t){const n=t.encoding,i=n.x,r=n.y;if(jo(i)&&jo(r)){const o=i.impute?i:r.impute?r:void 0;if(void 0===o)return;const a=i.impute?r:r.impute?i:void 0,{method:s,value:u,frame:l,keyvals:c}=o.impute,f=Ba(t.mark,n);return new zm(e,{impute:o.field,key:a.field,...s?{method:s}:{},...void 0!==u?{value:u}:{},...l?{frame:l}:{},...void 0!==c?{keyvals:c}:{},...f.length?{groupby:f}:{}})}return null}hash(){return`Impute ${h(this.transform)}`}assemble(){const{impute:e,key:t,keyvals:n,method:i,groupby:r,value:o,frame:a=[null,null]}=this.transform,s={type:"impute",field:e,key:t,...n?{keyvals:(u=n,void 0!==(null==u?void 0:u.stop)?this.processSequence(n):n)}:{},method:"value",...r?{groupby:r}:{},value:i&&"value"!==i?null:o};var u;if(i&&"value"!==i){return[s,{type:"window",as:[`imputed_${e}_value`],ops:[i],fields:[e],frame:a,ignorePeers:!1,...r?{groupby:r}:{}},{type:"formula",expr:`datum.${e} === null ? datum.imputed_${e}_value : datum.${e}`,as:e}]}return[s]}}class Om extends fl{clone(){return new Om(null,d(this.transform))}constructor(e,t){super(e),this.transform=t,this.transform=d(t);const n=this.transform.as??[void 0,void 0];this.transform.as=[n[0]??t.on,n[1]??t.loess]}dependentFields(){return new Set([this.transform.loess,this.transform.on,...this.transform.groupby??[]])}producedFields(){return new Set(this.transform.as)}hash(){return`LoessTransform ${h(this.transform)}`}assemble(){const{loess:e,on:t,...n}=this.transform;return{type:"loess",x:t,y:e,...n}}}class Pm extends fl{clone(){return new Pm(null,d(this.transform),this.secondary)}constructor(e,t,n){super(e),this.transform=t,this.secondary=n}static make(e,t,n,i){const r=t.component.data.sources,{from:o}=n;let a=null;if(function(e){return"data"in e}(o)){let e=Xm(o.data,r);e||(e=new yp(o.data),r.push(e));const n=t.getName(`lookup_${i}`);a=new dl(e,n,Xu.Lookup,t.component.data.outputNodeRefCounts),t.component.data.outputNodes[n]=a}else if(function(e){return"param"in e}(o)){const e=o.param;let i;n={as:e,...n};try{i=t.getSelectionComponent(O(e),e)}catch(t){throw new Error(function(e){return`Lookups can only be performed on selection parameters. "${e}" is a variable parameter.`}(e))}if(a=i.materialized,!a)throw new Error(function(e){return`Cannot define and lookup the "${e}" selection in the same view. Try moving the lookup into a second, layered view?`}(e))}return new Pm(e,n,a.getSource())}dependentFields(){return new Set([this.transform.lookup])}producedFields(){return new Set(this.transform.as?t.array(this.transform.as):this.transform.from.fields)}hash(){return`Lookup ${h({transform:this.transform,secondary:this.secondary})}`}assemble(){let e;if(this.transform.from.fields)e={values:this.transform.from.fields,...this.transform.as?{as:t.array(this.transform.as)}:{}};else{let n=this.transform.as;t.isString(n)||(ui('If "from.fields" is not specified, "as" has to be a string that specifies the key to be used for the data from the secondary source.'),n="_lookup"),e={as:[n]}}return{type:"lookup",from:this.secondary,key:this.transform.from.key,fields:[this.transform.lookup],...e,...this.transform.default?{default:this.transform.default}:{}}}}class jm extends fl{clone(){return new jm(null,d(this.transform))}constructor(e,t){super(e),this.transform=t,this.transform=d(t);const n=this.transform.as??[void 0,void 0];this.transform.as=[n[0]??"prob",n[1]??"value"]}dependentFields(){return new Set([this.transform.quantile,...this.transform.groupby??[]])}producedFields(){return new Set(this.transform.as)}hash(){return`QuantileTransform ${h(this.transform)}`}assemble(){const{quantile:e,...t}=this.transform;return{type:"quantile",field:e,...t}}}class Nm extends fl{clone(){return new Nm(null,d(this.transform))}constructor(e,t){super(e),this.transform=t,this.transform=d(t);const n=this.transform.as??[void 0,void 0];this.transform.as=[n[0]??t.on,n[1]??t.regression]}dependentFields(){return new Set([this.transform.regression,this.transform.on,...this.transform.groupby??[]])}producedFields(){return new Set(this.transform.as)}hash(){return`RegressionTransform ${h(this.transform)}`}assemble(){const{regression:e,on:t,...n}=this.transform;return{type:"regression",x:t,y:e,...n}}}class Mm extends fl{clone(){return new Mm(null,d(this.transform))}constructor(e,t){super(e),this.transform=t}addDimensions(e){this.transform.groupby=D((this.transform.groupby??[]).concat(e),(e=>e))}producedFields(){}dependentFields(){return new Set([this.transform.pivot,this.transform.value,...this.transform.groupby??[]])}hash(){return`PivotTransform ${h(this.transform)}`}assemble(){const{pivot:e,value:t,groupby:n,limit:i,op:r}=this.transform;return{type:"pivot",field:e,value:t,...void 0!==i?{limit:i}:{},...void 0!==r?{op:r}:{},...void 0!==n?{groupby:n}:{}}}}class Tm extends fl{clone(){return new Tm(null,d(this.transform))}constructor(e,t){super(e),this.transform=t}dependentFields(){return new Set}producedFields(){return new Set}hash(){return`SampleTransform ${h(this.transform)}`}assemble(){return{type:"sample",size:this.transform.sample}}}function Lm(e){let t=0;return function n(i,r){if(i instanceof yp&&!i.isGenerator&&!Wu(i.data)){e.push(r);r={name:null,source:r.name,transform:[]}}if(i instanceof pp&&(i.parent instanceof yp&&!r.source?(r.format={...r.format??{},parse:i.assembleFormatParse()},r.transform.push(...i.assembleTransforms(!0))):r.transform.push(...i.assembleTransforms())),i instanceof lp)return r.name||(r.name="data_"+t++),!r.source||r.transform.length>0?(e.push(r),i.data=r.name):i.data=r.source,void e.push(...i.assemble());if((i instanceof gp||i instanceof hp||i instanceof Cm||i instanceof Gf||i instanceof ld||i instanceof _m||i instanceof up||i instanceof Pm||i instanceof Np||i instanceof Pp||i instanceof Em||i instanceof Sm||i instanceof km||i instanceof Om||i instanceof jm||i instanceof Nm||i instanceof mp||i instanceof Tm||i instanceof Mm)&&r.transform.push(i.assemble()),(i instanceof ap||i instanceof pl||i instanceof zm||i instanceof jp||i instanceof Bm)&&r.transform.push(...i.assemble()),i instanceof dl)if(r.source&&0===r.transform.length)i.setSource(r.source);else if(i.parent instanceof dl)i.setSource(r.name);else if(r.name||(r.name="data_"+t++),i.setSource(r.name),1===i.numChildren()){e.push(r);r={name:null,source:r.name,transform:[]}}switch(i.numChildren()){case 0:i instanceof dl&&(!r.source||r.transform.length>0)&&e.push(r);break;case 1:n(i.children[0],r);break;default:{r.name||(r.name="data_"+t++);let o=r.name;!r.source||r.transform.length>0?e.push(r):o=r.source;for(const e of i.children){n(e,{name:null,source:o,transform:[]})}break}}}}function qm(e){return"top"===e||"left"===e||an(e)?"header":"footer"}function Rm(e,n){const{facet:i,config:r,child:o,component:a}=e;if(e.channelHasField(n)){var s;const u=i[n],l=dd("title",null,r,n);let c=Zo(u,r,{allowDisabling:!0,includeDefault:void 0===l||!!l});o.component.layoutHeaders[n].title&&(c=t.isArray(c)?c.join(", "):c,c+=` / ${o.component.layoutHeaders[n].title}`,o.component.layoutHeaders[n].title=null);const f=dd("labelOrient",u.header,r,n),d=null!==u.header&&H(null===(s=u.header)||void 0===s?void 0:s.labels,r.header.labels,!0),p=v(["bottom","right"],f)?"footer":"header";a.layoutHeaders[n]={title:null!==u.header?c:null,facetFieldDef:u,[p]:"facet"===n?[]:[Wm(e,n,d)]}}}function Wm(e,t,n){const i="row"===t?"height":"width";return{labels:n,sizeSignal:e.child.component.layoutSize.get(i)?e.child.getSizeSignalRef(i):void 0,axes:[]}}function Um(e,t){const{child:n}=e;if(n.component.axes[t]){const{layoutHeaders:i,resolve:r}=e.component;if(r.axis[t]=Od(r,t),"shared"===r.axis[t]){const r="x"===t?"column":"row",o=i[r];for(const i of n.component.axes[t]){const t=qm(i.get("orient"));o[t]??(o[t]=[Wm(e,r,!1)]);const n=Kf(i,"main",e.config,{header:!0});n&&o[t][0].axes.push(n),i.mainExtracted=!0}}}}function Hm(e){for(const t of e.children)t.parseLayoutSize()}function Im(e,t){const n=Bd(t),i=wt(n),r=e.component.resolve,o=e.component.layoutSize;let a;for(const t of e.children){const o=t.component.layoutSize.getWithExplicit(n),s=r.scale[i]??zd(i,e);if("independent"===s&&"step"===o.value){a=void 0;break}if(a){if("independent"===s&&a.value!==o.value){a=void 0;break}a=qu(a,o,n,"")}else a=o}if(a){for(const i of e.children)e.renameSignal(i.getName(n),e.getName(t)),i.component.layoutSize.set(n,"merged",!1);o.setWithExplicit(t,a)}else o.setWithExplicit(t,{explicit:!1,value:void 0})}function Vm(e,t){const n="width"===t?"x":"y",i=e.config,r=e.getScaleComponent(n);if(r){const e=r.get("type"),n=r.get("range");if(fr(e)){const e=Ds(i.view,t);return sn(n)||vs(e)?"step":e}return ws(i.view,t)}if(e.hasProjection||"arc"===e.mark)return ws(i.view,t);{const e=Ds(i.view,t);return vs(e)?e.step:e}}function Gm(e,t,n){return Yo(t,{suffix:`by_${Yo(e)}`,...n??{}})}class Ym extends $m{constructor(e,t,n,i){super(e,"facet",t,n,i,e.resolve),Sn(this,"facet",void 0),Sn(this,"child",void 0),Sn(this,"children",void 0),this.child=xg(e.spec,this,this.getName("child"),void 0,i),this.children=[this.child],this.facet=this.initFacet(e.facet)}initFacet(e){if(!Fo(e))return{facet:this.initFacetFieldDef(e,"facet")};const t=E(e),n={};for(const i of t){if(![Q,K].includes(i)){ui(Gn(i,"facet"));break}const t=e[i];if(void 0===t.field){ui(Vn(t,i));break}n[i]=this.initFacetFieldDef(t,i)}return n}initFacetFieldDef(e,t){const n=sa(e,t);return n.header?n.header=nn(n.header):null===n.header&&(n.header=null),n}channelHasField(e){return!!this.facet[e]}fieldDef(e){return this.facet[e]}parseData(){this.component.data=Jm(this),this.child.parseData()}parseLayoutSize(){Hm(this)}parseSelections(){this.child.parseSelections(),this.component.selection=this.child.component.selection}parseMarkGroup(){this.child.parseMarkGroup()}parseAxesAndHeaders(){this.child.parseAxesAndHeaders(),function(e){for(const t of Te)Rm(e,t);Um(e,"x"),Um(e,"y")}(this)}assembleSelectionTopLevelSignals(e){return this.child.assembleSelectionTopLevelSignals(e)}assembleSignals(){return this.child.assembleSignals(),[]}assembleSelectionData(e){return this.child.assembleSelectionData(e)}getHeaderLayoutMixins(){const e={};for(const t of Te)for(const n of gd){const i=this.component.layoutHeaders[t],r=i[n],{facetFieldDef:o}=i;if(o){const n=dd("titleOrient",o.header,this.config,t);if(["right","bottom"].includes(n)){const i=fd(t,n);e.titleAnchor??(e.titleAnchor={}),e.titleAnchor[i]="end"}}if(null!=r&&r[0]){const r="row"===t?"height":"width",o="header"===n?"headerBand":"footerBand";"facet"===t||this.child.component.layoutSize.get(r)||(e[o]??(e[o]={}),e[o][t]=.5),i.title&&(e.offset??(e.offset={}),e.offset["row"===t?"rowTitle":"columnTitle"]=10)}}return e}assembleDefaultLayout(){const{column:e,row:t}=this.facet,n=e?this.columnDistinctSignal():t?1:void 0;let i="all";return(t||"independent"!==this.component.resolve.scale.x)&&(e||"independent"!==this.component.resolve.scale.y)||(i="none"),{...this.getHeaderLayoutMixins(),...n?{columns:n}:{},bounds:"full",align:i}}assembleLayoutSignals(){return this.child.assembleLayoutSignals()}columnDistinctSignal(){if(!(this.parent&&this.parent instanceof Ym)){return{signal:`length(data('${this.getName("column_domain")}'))`}}}assembleGroupStyle(){}assembleGroup(e){return this.parent&&this.parent instanceof Ym?{...this.channelHasField("column")?{encode:{update:{columns:{field:Yo(this.facet.column,{prefix:"distinct"})}}}}:{},...super.assembleGroup(e)}:super.assembleGroup(e)}getCardinalityAggregateForChild(){const e=[],t=[],n=[];if(this.child instanceof Ym){if(this.child.channelHasField("column")){const i=Yo(this.child.facet.column);e.push(i),t.push("distinct"),n.push(`distinct_${i}`)}}else for(const i of yt){const r=this.child.component.scales[i];if(r&&!r.merged){const o=r.get("type"),a=r.get("range");if(fr(o)&&sn(a)){const r=Zp(em(this.child,i));r?(e.push(r),t.push("distinct"),n.push(`distinct_${r}`)):ui(Nn(i))}}}return{fields:e,ops:t,as:n}}assembleFacet(){const{name:e,data:n}=this.component.data.facetRoot,{row:i,column:r}=this.facet,{fields:o,ops:a,as:s}=this.getCardinalityAggregateForChild(),u=[];for(const e of Te){const n=this.facet[e];if(n){u.push(Yo(n));const{bin:l,sort:c}=n;if(Jt(l)&&u.push(Yo(n,{binSuffix:"end"})),Ao(c)){const{field:e,op:t=vo}=c,u=Gm(n,c);i&&r?(o.push(u),a.push("max"),s.push(u)):(o.push(e),a.push(t),s.push(u))}else if(t.isArray(c)){const t=cd(n,e);o.push(t),a.push("max"),s.push(t)}}}const l=!!i&&!!r;return{name:e,data:n,groupby:u,...l||o.length>0?{aggregate:{...l?{cross:l}:{},...o.length?{fields:o,ops:a,as:s}:{}}}:{}}}facetSortFields(e){const{facet:n}=this,i=n[e];return i?Ao(i.sort)?[Gm(i,i.sort,{expr:"datum"})]:t.isArray(i.sort)?[cd(i,e,{expr:"datum"})]:[Yo(i,{expr:"datum"})]:[]}facetSortOrder(e){const{facet:n}=this,i=n[e];if(i){const{sort:e}=i;return[(Ao(e)?e.order:!t.isArray(e)&&e)||"ascending"]}return[]}assembleLabelTitle(){const{facet:e,config:t}=this;if(e.facet)return wd(e.facet,"facet",t);const n={row:["top","bottom"],column:["left","right"]};for(const r of md)if(e[r]){var i;const o=dd("labelOrient",null===(i=e[r])||void 0===i?void 0:i.header,t,r);if(n[r].includes(o))return wd(e[r],r,t)}}assembleMarks(){const{child:e}=this,t=function(e){const t=[],n=Lm(t);for(const t of e.children)n(t,{source:e.name,name:null,transform:[]});return t}(this.component.data.facetRoot),n=e.assembleGroupEncodeEntry(!1),i=this.assembleLabelTitle()||e.assembleTitle(),r=e.assembleGroupStyle();return[{name:this.getName("cell"),type:"group",...i?{title:i}:{},...r?{style:r}:{},from:{facet:this.assembleFacet()},sort:{field:Te.map((e=>this.facetSortFields(e))).flat(),order:Te.map((e=>this.facetSortOrder(e))).flat()},...t.length>0?{data:t}:{},...n?{encode:{update:n}}:{},...e.assembleGroup(ul(this,[]))}]}getMapping(){return this.facet}}function Xm(e,t){for(const a of t){var n,i,r,o;const t=a.data;if(e.name&&a.hasName()&&e.name!==a.dataName)continue;const s=null===(n=e.format)||void 0===n?void 0:n.mesh,u=null===(i=t.format)||void 0===i?void 0:i.feature;if(s&&u)continue;const l=null===(r=e.format)||void 0===r?void 0:r.feature;if((l||u)&&l!==u)continue;const c=null===(o=t.format)||void 0===o?void 0:o.mesh;if(!s&&!c||s===c)if(Uu(e)&&Uu(t)){if(f(e.values,t.values))return a}else if(Wu(e)&&Wu(t)){if(e.url===t.url)return a}else if(Hu(e)&&e.name===a.dataName)return a}return null}function Jm(e){var t;let n=function(e,t){if(e.data||!e.parent){if(null===e.data){const e=new yp({values:[]});return t.push(e),e}const n=Xm(e.data,t);if(n)return Iu(e.data)||(n.data.format=w({},e.data.format,n.data.format)),!n.hasName()&&e.data.name&&(n.dataName=e.data.name),n;{const n=new yp(e.data);return t.push(n),n}}return e.parent.component.data.facetRoot?e.parent.component.data.facetRoot:e.parent.component.data.main}(e,e.component.data.sources);const{outputNodes:i,outputNodeRefCounts:r}=e.component.data,o=e.data,a=!(o&&(Iu(o)||Wu(o)||Uu(o)))&&e.parent?e.parent.component.data.ancestorParse.clone():new Ru;Iu(o)?(Vu(o)?n=new hp(n,o.sequence):Yu(o)&&(n=new gp(n,o.graticule)),a.parseNothing=!0):null===(null==o||null===(t=o.format)||void 0===t?void 0:t.parse)&&(a.parseNothing=!0),n=pp.makeExplicit(n,e,a)??n,n=new mp(n);const s=e.parent&&Dm(e.parent);(xm(e)||wm(e))&&s&&(n=ap.makeFromEncoding(n,e)??n),e.transforms.length>0&&(n=function(e,t,n){let i=0;for(const r of t.transforms){let o,a;if(yu(r))a=e=new ld(e,r),o="derived";else if(au(r)){const i=fp(r);a=e=pp.makeWithAncestors(e,{},i,n)??e,e=new Gf(e,t,r.filter)}else if(vu(r))a=e=ap.makeFromTransform(e,r,t),o="number";else if(xu(r))o="date",void 0===n.getWithExplicit(r.field).value&&(e=new pp(e,{[r.field]:o}),n.set(r.field,o,!1)),a=e=pl.makeFromTransform(e,r);else if(wu(r))a=e=up.makeFromTransform(e,r),o="number",Dc(t)&&(e=new mp(e));else if(su(r))a=e=Pm.make(e,t,r,i++),o="derived";else if(mu(r))a=e=new Np(e,r),o="number";else if(gu(r))a=e=new Pp(e,r),o="number";else if(Au(r))a=e=jp.makeFromTransform(e,r),o="derived";else if(Du(r))a=e=new Em(e,r),o="derived";else if(hu(r))a=e=new Sm(e,r),o="derived";else if(uu(r))a=e=new Mm(e,r),o="derived";else if(pu(r))e=new Tm(e,r);else if(bu(r))a=e=zm.makeFromTransform(e,r),o="derived";else if(lu(r))a=e=new km(e,r),o="derived";else if(cu(r))a=e=new jm(e,r),o="derived";else if(fu(r))a=e=new Nm(e,r),o="derived";else{if(!du(r)){ui(`Ignoring an invalid transform: ${g(r)}.`);continue}a=e=new Om(e,r),o="derived"}if(a&&void 0!==o)for(const e of a.producedFields()??[])n.set(e,o,!1)}return e}(n,e,a));const u=function(e){const t={};if(xm(e)&&e.component.selection)for(const n of E(e.component.selection)){const i=e.component.selection[n];for(const e of i.project.items)!e.channel&&U(e.field)>1&&(t[e.field]="flatten")}return t}(e),l=dp(e);n=pp.makeWithAncestors(n,{},{...u,...l},a)??n,xm(e)&&(n=Bm.parseAll(n,e),n=_m.parseAll(n,e)),(xm(e)||wm(e))&&(s||(n=ap.makeFromEncoding(n,e)??n),n=pl.makeFromEncoding(n,e)??n,n=ld.parseAllForSortIndex(n,e));const c=e.getDataName(Xu.Raw),f=new dl(n,c,Xu.Raw,r);if(i[c]=f,n=f,xm(e)){const t=up.makeFromEncoding(n,e);t&&(n=t,Dc(e)&&(n=new mp(n))),n=zm.makeFromEncoding(n,e)??n,n=jp.makeFromEncoding(n,e)??n}xm(e)&&(n=Cm.make(n,e)??n);const d=e.getDataName(Xu.Main),p=new dl(n,d,Xu.Main,r);i[d]=p,n=p,xm(e)&&function(e,t){for(const[n,i]of _(e.component.selection??{})){const r=e.getName(`lookup_${n}`);e.component.data.outputNodes[r]=i.materialized=new dl(new Gf(t,e,{param:n}),r,Xu.Lookup,e.component.data.outputNodeRefCounts)}}(e,p);let m=null;if(wm(e)){const t=e.getName("facet");n=function(e,t){const{row:n,column:i}=t;if(n&&i){let t=null;for(const r of[n,i])if(Ao(r.sort)){const{field:n,op:i=vo}=r.sort;e=t=new Pp(e,{joinaggregate:[{op:i,field:n,as:Gm(r,r.sort,{forAs:!0})}],groupby:[Yo(r)]})}return t}return null}(n,e.facet)??n,m=new lp(n,e,t,p.getSource()),i[t]=m}return{...e.component.data,outputNodes:i,outputNodeRefCounts:r,raw:f,main:p,facetRoot:m,ancestorParse:a}}class Qm extends Fm{constructor(e,t,n,i){var r,o,a,s;super(e,"concat",t,n,i,e.resolve),Sn(this,"children",void 0),"shared"!==(null===(r=e.resolve)||void 0===r||null===(o=r.axis)||void 0===o?void 0:o.x)&&"shared"!==(null===(a=e.resolve)||void 0===a||null===(s=a.axis)||void 0===s?void 0:s.y)||ui("Axes cannot be shared in concatenated or repeated views yet (https://github.com/vega/vega-lite/issues/2415)."),this.children=this.getChildren(e).map(((e,t)=>xg(e,this,this.getName(`concat_${t}`),void 0,i)))}parseData(){this.component.data=Jm(this);for(const e of this.children)e.parseData()}parseSelections(){this.component.selection={};for(const e of this.children){e.parseSelections();for(const t of E(e.component.selection))this.component.selection[t]=e.component.selection[t]}}parseMarkGroup(){for(const e of this.children)e.parseMarkGroup()}parseAxesAndHeaders(){for(const e of this.children)e.parseAxesAndHeaders()}getChildren(e){return ms(e)?e.vconcat:gs(e)?e.hconcat:e.concat}parseLayoutSize(){!function(e){Hm(e);const t=1===e.layout.columns?"width":"childWidth",n=void 0===e.layout.columns?"height":"childHeight";Im(e,t),Im(e,n)}(this)}parseAxisGroup(){return null}assembleSelectionTopLevelSignals(e){return this.children.reduce(((e,t)=>t.assembleSelectionTopLevelSignals(e)),e)}assembleSignals(){return this.children.forEach((e=>e.assembleSignals())),[]}assembleLayoutSignals(){const e=kd(this);for(const t of this.children)e.push(...t.assembleLayoutSignals());return e}assembleSelectionData(e){return this.children.reduce(((e,t)=>t.assembleSelectionData(e)),e)}assembleMarks(){return this.children.map((e=>{const t=e.assembleTitle(),n=e.assembleGroupStyle(),i=e.assembleGroupEncodeEntry(!1);return{type:"group",name:e.getName("group"),...t?{title:t}:{},...n?{style:n}:{},...i?{encode:{update:i}}:{},...e.assembleGroup()}}))}assembleGroupStyle(){}assembleDefaultLayout(){const e=this.layout.columns;return{...null!=e?{columns:e}:{},bounds:"full",align:"each"}}}const Km={disable:1,gridScale:1,scale:1,...va,labelExpr:1,encode:1},Zm=E(Km);class eg extends ju{constructor(e={},t={},n=!1){super(),this.explicit=e,this.implicit=t,this.mainExtracted=n}clone(){return new eg(d(this.explicit),d(this.implicit),this.mainExtracted)}hasAxisPart(e){return"axis"===e||("grid"===e||"title"===e?!!this.get(e):!(!1===(t=this.get(e))||null===t));var t}hasOrientSignalRef(){return an(this.explicit.orient)}}const tg={bottom:"top",top:"bottom",left:"right",right:"left"};function ng(e,t){if(!e)return t.map((e=>e.clone()));{if(e.length!==t.length)return;const n=e.length;for(let i=0;i{switch(n){case"title":return Cn(e,t);case"gridScale":return{explicit:e.explicit,value:H(e.value,t.value)}}return Lu(e,t,n,"axis")}));e.setWithExplicit(n,i)}return e}function rg(e,t,n,i,r){if("disable"===t)return void 0!==n;switch(n=n||{},t){case"titleAngle":case"labelAngle":return e===(an(n.labelAngle)?n.labelAngle:X(n.labelAngle));case"values":return!!n.values;case"encode":return!!n.encoding||!!n.labelAngle;case"title":if(e===ud(i,r))return!0}return e===n[t]}const og=new Set(["grid","translate","format","formatType","orient","labelExpr","tickCount","position","tickMinStep"]);function ag(e,t){var n,i,r,o;let a=t.axis(e);const s=new eg,u=ra(t.encoding[e]),{mark:l,config:c}=t,f=(null===(n=a)||void 0===n?void 0:n.orient)||(null===(i=c["x"===e?"axisX":"axisY"])||void 0===i?void 0:i.orient)||(null===(r=c.axis)||void 0===r?void 0:r.orient)||function(e){return"x"===e?"bottom":"left"}(e),d=t.getScaleComponent(e).get("type"),p=td(e,d,f,t.config),m=void 0!==a?!a:id("disable",c.style,null===(o=a)||void 0===o?void 0:o.style,p).configValue;if(s.set("disable",m,void 0!==a),m)return s;a=a||{};const g=function(e,t,n,i,r){const o=null==t?void 0:t.labelAngle;if(void 0!==o)return an(o)?o:X(o);{const{configValue:o}=id("labelAngle",i,null==t?void 0:t.style,r);return void 0!==o?X(o):n!==ee||!v([qi,Ti],e.type)||jo(e)&&e.timeUnit?void 0:270}}(u,a,e,c.style,p),h={fieldOrDatumDef:u,axis:a,channel:e,model:t,scaleType:d,orient:f,labelAngle:g,mark:l,config:c};for(const n of Zm){const i=n in rd?rd[n](h):xa(n)?a[n]:void 0,r=void 0!==i,o=rg(i,n,a,t,e);if(r&&o)s.set(n,i,o);else{const{configValue:e,configFrom:t}=xa(n)&&"values"!==n?id(n,c.style,a.style,p):{},u=void 0!==e;r&&!u?s.set(n,i,o):("vgAxisConfig"!==t||og.has(n)&&u||ga(e)||an(e))&&s.set(n,e,!1)}}const y=a.encoding??{},b=ha.reduce(((n,i)=>{if(!s.hasAxisPart(i))return n;const r=_d(y[i]??{},t),o="labels"===i?function(e,t,n){const{encoding:i,config:r}=e,o=ra(i[t])??ra(i[et(t)]),a=e.axis(t)||{},{format:s,formatType:u}=a;return ao(u)?{text:co({fieldOrDatumDef:o,field:"datum.value",format:s,formatType:u,config:r}),...n}:n}(t,e,r):r;return void 0===o||S(o)||(n[i]={update:o}),n}),{});return S(b)||s.set("encode",b,!!a.encoding||void 0!==a.labelAngle),s}function sg(e,t,n){const i=nn(e),r=xn("orient",i,n);if(i.orient=function(e,t,n){switch(e){case zr:case Tr:case Lr:case jr:case Or:case Br:return}const{x:i,y:r,x2:o,y2:a}=t;switch(e){case Er:if(jo(i)&&(Qt(i.bin)||jo(r)&&r.aggregate&&!i.aggregate))return"vertical";if(jo(r)&&(Qt(r.bin)||jo(i)&&i.aggregate&&!r.aggregate))return"horizontal";if(a||o){if(n)return n;if(!o&&(jo(i)&&i.type===Mi&&!Jt(i.bin)||Lo(i)))return"horizontal";if(!a&&(jo(r)&&r.type===Mi&&!Jt(r.bin)||Lo(r)))return"vertical"}case Pr:if(o&&(!jo(i)||!Qt(i.bin))&&a&&(!jo(r)||!Qt(r.bin)))return;case Sr:if(a)return jo(r)&&Qt(r.bin)?"horizontal":"vertical";if(o)return jo(i)&&Qt(i.bin)?"vertical":"horizontal";if(e===Pr){if(i&&!r)return"vertical";if(r&&!i)return"horizontal"}case _r:case Nr:{const t=To(i),o=To(r);if(n)return n;if(t&&!o)return"tick"!==e?"horizontal":"vertical";if(!t&&o)return"tick"!==e?"vertical":"horizontal";if(t&&o){const t=i,n=r,o=t.type===Li,a=n.type===Li;return o&&!a?"tick"!==e?"vertical":"horizontal":!o&&a?"tick"!==e?"horizontal":"vertical":!t.aggregate&&n.aggregate?"tick"!==e?"vertical":"horizontal":t.aggregate&&!n.aggregate&&"tick"!==e?"horizontal":"vertical"}return}}return"vertical"}(i.type,t,r),void 0!==r&&r!==i.orient&&ui(`Specified orient "${i.orient}" overridden with "${r}".`),"bar"===i.type&&i.orient){const e=xn("cornerRadiusEnd",i,n);if(void 0!==e){const n="horizontal"===i.orient&&t.x2||"vertical"===i.orient&&t.y2?["cornerRadius"]:Xr[i.orient];for(const t of n)i[t]=e;void 0!==i.cornerRadiusEnd&&delete i.cornerRadiusEnd}}void 0===xn("opacity",i,n)&&(i.opacity=function(e,t){if(v([zr,Nr,Tr,Lr],e)&&!$a(t))return.7;return}(i.type,t));return void 0===xn("cursor",i,n)&&(i.cursor=function(e,t,n){if(t.href||e.href||xn("href",e,n))return"pointer";return e.cursor}(i,t,n)),i}function ug(e,t){const{config:n}=e;return{...Ql(e,{align:"ignore",baseline:"ignore",color:"include",size:"include",orient:"ignore",theta:"ignore"}),...Tl("x",e,{defaultPos:"mid"}),...Tl("y",e,{defaultPos:"mid"}),...Pl("size",e),...Pl("angle",e),...lg(e,n,t)}}function lg(e,t,n){return n?{shape:{value:n}}:Pl("shape",e)}function cg(e,t,n){if(void 0===xn("align",e,n))return"center"}function fg(e,t,n){if(void 0===xn("baseline",e,n))return"middle"}function dg(e){const{config:n,markDef:i}=e,{orient:r}=i,o="horizontal"===r?"width":"height",a=e.getScaleComponent("horizontal"===r?"x":"y"),s=xn("size",i,n,{vgChannel:o})??n.tick.bandSize;if(void 0!==s)return s;{const e=a?a.get("range"):void 0;if(e&&sn(e)&&t.isNumber(e.step))return 3*e.step/4;return 3*As(n.view,o)/4}}const pg={arc:{vgMark:"arc",encodeEntry:e=>({...Ql(e,{align:"ignore",baseline:"ignore",color:"include",size:"ignore",orient:"ignore",theta:"ignore"}),...Tl("x",e,{defaultPos:"mid"}),...Tl("y",e,{defaultPos:"mid"}),...Vl(e,"radius","arc"),...Vl(e,"theta","arc")})},area:{vgMark:"area",encodeEntry:e=>({...Ql(e,{align:"ignore",baseline:"ignore",color:"include",orient:"include",size:"ignore",theta:"ignore"}),...Ul("x",e,{defaultPos:"zeroOrMin",defaultPos2:"zeroOrMin",range:"horizontal"===e.markDef.orient}),...Ul("y",e,{defaultPos:"zeroOrMin",defaultPos2:"zeroOrMin",range:"vertical"===e.markDef.orient}),...ec(e)})},bar:{vgMark:"rect",encodeEntry:e=>({...Ql(e,{align:"ignore",baseline:"ignore",color:"include",orient:"ignore",size:"ignore",theta:"ignore"}),...Vl(e,"x","bar"),...Vl(e,"y","bar")})},circle:{vgMark:"symbol",encodeEntry:e=>ug(e,"circle")},geoshape:{vgMark:"shape",encodeEntry:e=>({...Ql(e,{align:"ignore",baseline:"ignore",color:"include",size:"ignore",orient:"ignore",theta:"ignore"})}),postEncodingTransform:e=>{const{encoding:t}=e,n=t.shape;return[{type:"geoshape",projection:e.projectionName(),...n&&jo(n)&&n.type===Ri?{field:Yo(n,{expr:"datum"})}:{}}]}},image:{vgMark:"image",encodeEntry:e=>({...Ql(e,{align:"ignore",baseline:"ignore",color:"ignore",orient:"ignore",size:"ignore",theta:"ignore"}),...Vl(e,"x","image"),...Vl(e,"y","image"),...kl(e,"url")})},line:{vgMark:"line",encodeEntry:e=>({...Ql(e,{align:"ignore",baseline:"ignore",color:"include",size:"ignore",orient:"ignore",theta:"ignore"}),...Tl("x",e,{defaultPos:"mid"}),...Tl("y",e,{defaultPos:"mid"}),...Pl("size",e,{vgChannel:"strokeWidth"}),...ec(e)})},point:{vgMark:"symbol",encodeEntry:e=>ug(e)},rect:{vgMark:"rect",encodeEntry:e=>({...Ql(e,{align:"ignore",baseline:"ignore",color:"include",orient:"ignore",size:"ignore",theta:"ignore"}),...Vl(e,"x","rect"),...Vl(e,"y","rect")})},rule:{vgMark:"rule",encodeEntry:e=>{const{markDef:t}=e,n=t.orient;return e.encoding.x||e.encoding.y||e.encoding.latitude||e.encoding.longitude?{...Ql(e,{align:"ignore",baseline:"ignore",color:"include",orient:"ignore",size:"ignore",theta:"ignore"}),...Ul("x",e,{defaultPos:"horizontal"===n?"zeroOrMax":"mid",defaultPos2:"zeroOrMin",range:"vertical"!==n}),...Ul("y",e,{defaultPos:"vertical"===n?"zeroOrMax":"mid",defaultPos2:"zeroOrMin",range:"horizontal"!==n}),...Pl("size",e,{vgChannel:"strokeWidth"})}:{}}},square:{vgMark:"symbol",encodeEntry:e=>ug(e,"square")},text:{vgMark:"text",encodeEntry:e=>{const{config:t,encoding:n}=e;return{...Ql(e,{align:"include",baseline:"include",color:"include",size:"ignore",orient:"ignore",theta:"include"}),...Tl("x",e,{defaultPos:"mid"}),...Tl("y",e,{defaultPos:"mid"}),...kl(e),...Pl("size",e,{vgChannel:"fontSize"}),...Pl("angle",e),...tc("align",cg(e.markDef,n,t)),...tc("baseline",fg(e.markDef,n,t)),...Tl("radius",e,{defaultPos:null}),...Tl("theta",e,{defaultPos:null})}}},tick:{vgMark:"rect",encodeEntry:e=>{const{config:t,markDef:n}=e,i=n.orient,r="horizontal"===i?"width":"height",o="horizontal"===i?"height":"width";return{...Ql(e,{align:"ignore",baseline:"ignore",color:"include",orient:"ignore",size:"ignore",theta:"ignore"}),...Tl("x",e,{defaultPos:"mid",vgChannel:"xc"}),...Tl("y",e,{defaultPos:"mid",vgChannel:"yc"}),...Pl("size",e,{defaultValue:dg(e),vgChannel:r}),[o]:gn(xn("thickness",n,t))}}},trail:{vgMark:"trail",encodeEntry:e=>({...Ql(e,{align:"ignore",baseline:"ignore",color:"include",size:"include",orient:"ignore",theta:"ignore"}),...Tl("x",e,{defaultPos:"mid"}),...Tl("y",e,{defaultPos:"mid"}),...Pl("size",e),...ec(e)})}};function mg(e){if(v([_r,Sr,Mr],e.mark)){const t=Ba(e.mark,e.encoding);if(t.length>0)return function(e,t){return[{name:e.getName("pathgroup"),type:"group",from:{facet:{name:gg+e.requestDataName(Xu.Main),data:e.requestDataName(Xu.Main),groupby:t}},encode:{update:{width:{field:{group:"width"}},height:{field:{group:"height"}}}},marks:yg(e,{fromPrefix:gg})}]}(e,t)}else if(e.mark===Er){const t=fn.some((t=>xn(t,e.markDef,e.config)));if(e.stack&&!e.fieldDef("size")&&t)return function(e){const[t]=yg(e,{fromPrefix:hg}),n=e.scaleName(e.stack.fieldChannel),i=(t={})=>e.vgField(e.stack.fieldChannel,t),r=(e,t)=>`${e}(${[i({prefix:"min",suffix:"start",expr:t}),i({prefix:"max",suffix:"start",expr:t}),i({prefix:"min",suffix:"end",expr:t}),i({prefix:"max",suffix:"end",expr:t})].map((e=>`scale('${n}',${e})`)).join(",")})`;let o,a;"x"===e.stack.fieldChannel?(o={...p(t.encode.update,["y","yc","y2","height",...fn]),x:{signal:r("min","datum")},x2:{signal:r("max","datum")},clip:{value:!0}},a={x:{field:{group:"x"},mult:-1},height:{field:{group:"height"}}},t.encode.update={...m(t.encode.update,["y","yc","y2"]),height:{field:{group:"height"}}}):(o={...p(t.encode.update,["x","xc","x2","width"]),y:{signal:r("min","datum")},y2:{signal:r("max","datum")},clip:{value:!0}},a={y:{field:{group:"y"},mult:-1},width:{field:{group:"width"}}},t.encode.update={...m(t.encode.update,["x","xc","x2"]),width:{field:{group:"width"}}});for(const n of fn){const i=wn(n,e.markDef,e.config);t.encode.update[n]?(o[n]=t.encode.update[n],delete t.encode.update[n]):i&&(o[n]=gn(i)),i&&(t.encode.update[n]={value:0})}const s=[];if(e.stack.groupbyChannel){const t=e.fieldDef(e.stack.groupbyChannel),n=Yo(t);n&&s.push(n),(null!=t&&t.bin||null!=t&&t.timeUnit)&&s.push(Yo(t,{binSuffix:"end"}))}o=["stroke","strokeWidth","strokeJoin","strokeCap","strokeDash","strokeDashOffset","strokeMiterLimit","strokeOpacity"].reduce(((n,i)=>{if(t.encode.update[i])return{...n,[i]:t.encode.update[i]};{const t=wn(i,e.markDef,e.config);return void 0!==t?{...n,[i]:gn(t)}:n}}),o),o.stroke&&(o.strokeForeground={value:!0},o.strokeOffset={value:0});return[{type:"group",from:{facet:{data:e.requestDataName(Xu.Main),name:hg+e.requestDataName(Xu.Main),groupby:s,aggregate:{fields:[i({suffix:"start"}),i({suffix:"start"}),i({suffix:"end"}),i({suffix:"end"})],ops:["min","max","min","max"]}}},encode:{update:o},marks:[{type:"group",encode:{update:a},marks:[t]}]}]}(e)}return yg(e)}const gg="faceted_path_";const hg="stack_group_";function yg(e,n={fromPrefix:""}){const{mark:i,markDef:r,encoding:o,config:a}=e,s=H(r.clip,function(e){const t=e.getScaleComponent("x"),n=e.getScaleComponent("y");return!!(t&&t.get("selectionExtent")||n&&n.get("selectionExtent"))||void 0}(e),function(e){const t=e.component.projection;return!(!t||t.isFit)||void 0}(e)),u=bn(r),l=o.key,c=function(e){const{encoding:n,stack:i,mark:r,markDef:o,config:a}=e,s=n.order;if(!(!t.isArray(s)&&Wo(s)&&y(s.value)||!s&&y(xn("order",o,a)))){if((t.isArray(s)||jo(s))&&!i)return Fn(s,{expr:"datum"});if(Rr(r)){const i="horizontal"===o.orient?"y":"x",r=n[i];if(jo(r)){const n=r.sort;if(t.isArray(n))return{field:Yo(r,{prefix:i,suffix:"sort_index",expr:"datum"})};if(Ao(n))return{field:Yo({aggregate:$a(e.encoding)?n.op:void 0,field:n.field},{expr:"datum"})};if(wo(n))return{field:Yo(e.fieldDef(n.encoding),{expr:"datum"}),order:n.order};if(null===n)return;var u;return{field:Yo(r,{binSuffix:null!==(u=e.stack)&&void 0!==u&&u.impute?"mid":void 0,expr:"datum"})}}}}}(e),f=function(e){if(!e.component.selection)return null;const t=E(e.component.selection).length;let n=t,i=e.parent;for(;i&&0===n;)n=E(i.component.selection).length,i=i.parent;return n?{interactive:t>0||!!e.encoding.tooltip}:null}(e),d=xn("aria",r,a),p=pg[i].postEncodingTransform?pg[i].postEncodingTransform(e):null;return[{name:e.getName("marks"),type:pg[i].vgMark,...s?{clip:!0}:{},...u?{style:u}:{},...l?{key:l.field}:{},...c?{sort:c}:{},...f||{},...!1===d?{aria:d}:{},from:{data:n.fromPrefix+e.requestDataName(Xu.Main)},encode:{update:pg[i].encodeEntry(e)},...p?{transform:p}:{}}]}class vg extends $m{constructor(e,t,n,i={},r){super(e,"unit",t,n,r,void 0,bs(e)?e.view:void 0),Sn(this,"markDef",void 0),Sn(this,"encoding",void 0),Sn(this,"specifiedScales",{}),Sn(this,"stack",void 0),Sn(this,"specifiedAxes",{}),Sn(this,"specifiedLegends",{}),Sn(this,"specifiedProjection",{}),Sn(this,"selection",[]),Sn(this,"children",[]);const o=Hr(e.mark)?{...e.mark}:{type:e.mark},a=o.type;void 0===o.filled&&(o.filled=function(e,t,{graticule:n}){if(n)return!1;const i=wn("filled",e,t),r=e.type;return H(i,r!==zr&&r!==_r&&r!==Pr)}(o,r,{graticule:e.data&&Yu(e.data)}));const s=this.encoding=Ca(e.encoding||{},a,o.filled,r);this.markDef=sg(o,s,r),this.size=function({encoding:e,size:t}){for(const n of yt){const i=tt(n);vs(t[i])&&To(e[n])&&(delete t[i],ui(ti(i)))}return t}({encoding:s,size:bs(e)?{...i,...e.width?{width:e.width}:{},...e.height?{height:e.height}:{}}:i}),this.stack=Hs(a,s),this.specifiedScales=this.initScales(a,s),this.specifiedAxes=this.initAxes(s),this.specifiedLegends=this.initLegends(s),this.specifiedProjection=e.projection,this.selection=(e.params??[]).filter((e=>fs(e)))}get hasProjection(){const{encoding:e}=this,t=this.mark===qr,n=e&&Pe.some((t=>qo(e[t])));return t||n}scaleDomain(e){const t=this.specifiedScales[e];return t?t.domain:void 0}axis(e){return this.specifiedAxes[e]}legend(e){return this.specifiedLegends[e]}initScales(e,t){return Ot.reduce(((e,n)=>{const i=ra(t[n]);return i&&(e[n]=this.initScale(i.scale??{})),e}),{})}initScale(e){const{domain:n,range:i}=e,r=nn(e);return t.isArray(n)&&(r.domain=n.map(pn)),t.isArray(i)&&(r.range=i.map(pn)),r}initAxes(e){return yt.reduce(((t,n)=>{const i=e[n];if(qo(i)||n===ee&&qo(e.x2)||n===te&&qo(e.y2)){const e=qo(i)?i.axis:void 0;t[n]=e?this.initAxis({...e}):e}return t}),{})}initAxis(e){const t=E(e),n={};for(const i of t){const t=e[i];n[i]=ga(t)?dn(t):pn(t)}return n}initLegends(e){return _t.reduce(((t,n)=>{const i=ra(e[n]);if(i&&function(e){switch(e){case de:case pe:case me:case he:case ge:case ve:case we:case Ae:return!0;case be:case xe:case ye:return!1}}(n)){const e=i.legend;t[n]=e?nn(e):e}return t}),{})}parseData(){this.component.data=Jm(this)}parseLayoutSize(){!function(e){const{size:t,component:n}=e;for(const i of yt){const r=tt(i);if(t[r]){const e=t[r];n.layoutSize.set(r,vs(e)?"step":e,!0)}else{const t=Vm(e,r);n.layoutSize.set(r,t,!1)}}}(this)}parseSelections(){this.component.selection=function(e,n){const i={},r=e.config.selection;if(!n||!n.length)return i;for(const o of n){const n=O(o.name),a=o.select,s=t.isString(a)?a:a.type,u=t.isObject(a)?d(a):{type:s},l=r[s];for(const e in l)"fields"!==e&&"encodings"!==e&&("mark"===e&&(u[e]={...l[e],...u[e]}),void 0!==u[e]&&!0!==u[e]||(u[e]=l[e]??u[e]));const c=i[n]={...u,name:n,type:s,init:o.value,bind:o.bind,events:t.isString(u.on)?nl(u.on,"scope"):t.array(d(u.on))};for(const t of wc)t.defined(c)&&t.parse&&t.parse(e,c,o)}return i}(this,this.selection)}parseMarkGroup(){this.component.mark=mg(this)}parseAxesAndHeaders(){var e;this.component.axes=(e=this,yt.reduce(((t,n)=>(e.component.scales[n]&&(t[n]=[ag(n,e)]),t)),{}))}assembleSelectionTopLevelSignals(e){return function(e,n){let i=!1;for(const r of B(e.component.selection??{})){const o=r.name,a=t.stringValue(o+yc);if(0===n.filter((e=>e.name===o)).length){const e="global"===r.resolve?"union":r.resolve,i="point"===r.type?", true, true)":")";n.push({name:r.name,update:`${xc}(${a}, ${t.stringValue(e)}${i}`})}i=!0;for(const t of wc)t.defined(r)&&t.topLevelSignals&&(n=t.topLevelSignals(e,r,n))}i&&0===n.filter((e=>"unit"===e.name)).length&&n.unshift({name:"unit",value:{},on:[{events:"mousemove",update:"isTuple(group()) ? group() : unit"}]});return cl(n)}(this,e)}assembleSignals(){return[...Zf(this),...sl(this,[])]}assembleSelectionData(e){return function(e,t){const n=[...t];for(const t of B(e.component.selection??{})){const i={name:t.name+yc};if(t.init){const n=t.project.items.map((e=>{const{signals:t,...n}=e;return n}));i.values=t.init.map((t=>({unit:Ac(e,{escape:!1}),fields:n,values:al(t,!1)})))}n.filter((e=>e.name===t.name+yc)).length||n.push(i)}return n}(this,e)}assembleLayout(){return null}assembleLayoutSignals(){return kd(this)}assembleMarks(){let e=this.component.mark??[];return this.parent&&Dm(this.parent)||(e=ll(this,e)),e.map(this.correctDataNames)}assembleGroupStyle(){const{style:e}=this.view||{};return void 0!==e?e:this.encoding.x||this.encoding.y?"cell":void 0}getMapping(){return this.encoding}get mark(){return this.markDef.type}channelHasField(e){return Fa(this.encoding,e)}fieldDef(e){return ia(this.encoding[e])}typedFieldDef(e){const t=this.fieldDef(e);return Ro(t)?t:null}}class bg extends Fm{constructor(e,t,n,i,r){super(e,"layer",t,n,r,e.resolve,e.view),Sn(this,"children",void 0);const o={...i,...e.width?{width:e.width}:{},...e.height?{height:e.height}:{}};this.children=e.layer.map(((e,t)=>{if(Ms(e))return new bg(e,this,this.getName(`layer_${t}`),o,r);if(Aa(e))return new vg(e,this,this.getName(`layer_${t}`),o,r);throw new Error(_n(e))}))}parseData(){this.component.data=Jm(this);for(const e of this.children)e.parseData()}parseLayoutSize(){var e;Hm(e=this),Im(e,"width"),Im(e,"height")}parseSelections(){this.component.selection={};for(const e of this.children){e.parseSelections();for(const t of E(e.component.selection))this.component.selection[t]=e.component.selection[t]}}parseMarkGroup(){for(const e of this.children)e.parseMarkGroup()}parseAxesAndHeaders(){!function(e){const{axes:t,resolve:n}=e.component,i={top:0,bottom:0,right:0,left:0};for(const i of e.children){i.parseAxesAndHeaders();for(const r of E(i.component.axes))n.axis[r]=Od(e.component.resolve,r),"shared"===n.axis[r]&&(t[r]=ng(t[r],i.component.axes[r]),t[r]||(n.axis[r]="independent",delete t[r]))}for(const r of yt){for(const o of e.children)if(o.component.axes[r]){if("independent"===n.axis[r]){t[r]=(t[r]??[]).concat(o.component.axes[r]);for(const e of o.component.axes[r]){const{value:t,explicit:n}=e.getWithExplicit("orient");if(!an(t)){if(i[t]>0&&!n){const n=tg[t];i[t]>i[n]&&e.set("orient",n,!1)}i[t]++}}}delete o.component.axes[r]}if("independent"===n.axis[r]&&t[r]&&t[r].length>1)for(const e of t[r])e.get("grid")&&!e.explicit.grid&&(e.implicit.grid=!1)}}(this)}assembleSelectionTopLevelSignals(e){return this.children.reduce(((e,t)=>t.assembleSelectionTopLevelSignals(e)),e)}assembleSignals(){return this.children.reduce(((e,t)=>e.concat(t.assembleSignals())),Zf(this))}assembleLayoutSignals(){return this.children.reduce(((e,t)=>e.concat(t.assembleLayoutSignals())),kd(this))}assembleSelectionData(e){return this.children.reduce(((e,t)=>t.assembleSelectionData(e)),e)}assembleGroupStyle(){const e=new Set;for(const n of this.children)for(const i of t.array(n.assembleGroupStyle()))e.add(i);const n=Array.from(e);return n.length>1?n:1===n.length?n[0]:void 0}assembleTitle(){let e=super.assembleTitle();if(e)return e;for(const t of this.children)if(e=t.assembleTitle(),e)return e}assembleLayout(){return null}assembleMarks(){return function(e,t){for(const n of e.children)xm(n)&&(t=ll(n,t));return t}(this,this.children.flatMap((e=>e.assembleMarks())))}assembleLegends(){return this.children.reduce(((e,t)=>e.concat(t.assembleLegends())),Jd(this))}}function xg(e,t,n,i,r){if(ko(e))return new Ym(e,t,n,r);if(Ms(e))return new bg(e,t,n,i,r);if(Aa(e))return new vg(e,t,n,i,r);if(function(e){return ms(e)||gs(e)||ps(e)}(e))return new Qm(e,t,n,r);throw new Error(_n(e))}const wg=i;e.accessPathDepth=U,e.accessPathWithDatum=M,e.compile=function(e,n={}){var i;n.logger&&(i=n.logger,si=i),n.fieldTitle&&Ko(n.fieldTitle);try{const i=_s(t.mergeConfig(n.config,e.config)),r=Bu(e,i),o=xg(r,null,"",void 0,i);o.parse(),function(e,t){qp(e.sources);let n=0,i=0;for(let i=0;i<5&&Wp(e,t,!0);i++)n++;e.sources.map(Mp);for(let n=0;n<5&&Wp(e,t,!1);n++)i++;qp(e.sources),5===Math.max(n,i)&&ui("Maximum optimization runs(5) reached.")}(o.component.data,o);return{spec:function(e,t,n={},i){const r=e.config?js(e.config):void 0,o=[].concat(e.assembleSelectionData([]),function(e,t){const n=[],i=Lm(n);let r=0;for(const t of e.sources){t.hasName()||(t.dataName="source_"+r++);const e=t.assemble();i(t,e)}for(const e of n)0===e.transform.length&&delete e.transform;let o=0;for(const[e,t]of n.entries())0!==(t.transform??[]).length||t.source||n.splice(o++,0,n.splice(e,1)[0]);for(const t of n)for(const n of t.transform??[])"lookup"===n.type&&(n.from=e.outputNodes[n.from].getSource());for(const e of n)e.name in t&&(e.values=t[e.name]);return n}(e.component.data,n)),a=e.assembleProjections(),s=e.assembleTitle(),u=e.assembleGroupStyle(),l=e.assembleGroupEncodeEntry(!0);let c=e.assembleLayoutSignals();c=c.filter((e=>"width"!==e.name&&"height"!==e.name||void 0===e.value||(t[e.name]=+e.value,!1)));const{params:f,...d}=t;return{$schema:"https://vega.github.io/schema/vega/v5.json",...e.description?{description:e.description}:{},...d,...s?{title:s}:{},...u?{style:u}:{},...l?{encode:{update:l}}:{},data:o,...a.length>0?{projections:a}:{},...e.assembleGroup([...c,...e.assembleSelectionTopLevelSignals([]),...ds(f)]),...r?{config:r}:{},...i?{usermeta:i}:{}}}(o,function(e,n,i,r){const o=r.component.layoutSize.get("width"),a=r.component.layoutSize.get("height");void 0===n?(n={type:"pad"},r.hasAxisOrientSignalRef()&&(n.resize=!0)):t.isString(n)&&(n={type:n});if(o&&a&&(s=n.type,"fit"===s||"fit-x"===s||"fit-y"===s))if("step"===o&&"step"===a)ui(jn()),n.type="pad";else if("step"===o||"step"===a){const e="step"===o?"width":"height";ui(jn(wt(e)));const t="width"===e?"height":"width";n.type=function(e){return e?`fit-${wt(e)}`:"fit"}(t)}var s;return{...1===E(n).length&&n.type?"pad"===n.type?{}:{autosize:n.type}:{autosize:n},...ys(i,!1),...ys(e,!0)}}(e,r.autosize,i,o),e.datasets,e.usermeta),normalized:r}}finally{n.logger&&(si=ai),n.fieldTitle&&Ko(Jo)}},e.contains=v,e.deepEqual=f,e.deleteNestedProperty=j,e.duplicate=d,e.entries=_,e.every=x,e.fieldIntersection=C,e.flatAccessWithDatum=T,e.getFirstDefined=H,e.hasIntersection=$,e.hash=h,e.internalField=G,e.isBoolean=z,e.isEmpty=S,e.isEqual=function(e,t){const n=E(e),i=E(t);if(n.length!==i.length)return!1;for(const i of n)if(e[i]!==t[i])return!1;return!0},e.isInternalField=Y,e.isNullOrFalse=y,e.isNumeric=J,e.keys=E,e.logicalExpr=P,e.mergeDeep=w,e.normalize=Bu,e.normalizeAngle=X,e.omit=m,e.pick=p,e.prefixGenerator=k,e.removePathFromField=W,e.replaceAll=R,e.replacePathInField=q,e.resetIdCounter=function(){I=42},e.setEqual=F,e.some=b,e.stringify=g,e.titleCase=N,e.unique=D,e.uniqueId=V,e.vals=B,e.varName=O,e.version=wg,Object.defineProperty(e,"__esModule",{value:!0})})); +//# sourceMappingURL=vega-lite.min.js.map diff --git a/src/citationnet/static/vega-lite.min.js.map b/src/citationnet/static/vega-lite.min.js.map new file mode 100644 index 0000000..7d032f3 --- /dev/null +++ b/src/citationnet/static/vega-lite.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vega-lite.min.js","sources":["../node_modules/array-flat-polyfill/index.mjs","../node_modules/clone/clone.js","../node_modules/fast-json-stable-stringify/index.js","../src/logical.ts","../src/util.ts","../node_modules/fast-deep-equal/index.js","../src/channel.ts","../src/aggregate.ts","../src/bin.ts","../src/expr.ts","../src/title.ts","../src/vega.schema.ts","../src/compile/common.ts","../src/log/message.ts","../src/log/index.ts","../src/datetime.ts","../src/timeunit.ts","../src/predicate.ts","../src/type.ts","../src/scale.ts","../src/mark.ts","../src/compile/mark/encode/valueref.ts","../src/compile/format.ts","../src/sort.ts","../src/spec/facet.ts","../src/channeldef.ts","../src/axis.ts","../src/spec/unit.ts","../src/compositemark/base.ts","../src/encoding.ts","../src/compositemark/common.ts","../src/compositemark/boxplot.ts","../src/compositemark/errorbar.ts","../src/compositemark/errorband.ts","../src/compositemark/index.ts","../src/guide.ts","../src/header.ts","../src/legend.ts","../src/selection.ts","../src/parameter.ts","../src/spec/concat.ts","../src/spec/toplevel.ts","../src/spec/base.ts","../src/config.ts","../src/spec/layer.ts","../src/spec/map.ts","../src/spec/repeat.ts","../src/stack.ts","../src/normalize/pathoverlay.ts","../src/normalize/repeater.ts","../src/normalize/ruleforrangedline.ts","../src/normalize/core.ts","../src/transform.ts","../src/normalize/selectioncompat.ts","../src/normalize/toplevelselection.ts","../src/normalize/index.ts","../src/compile/split.ts","../src/compile/data/index.ts","../src/data.ts","../node_modules/vega-event-selector/build/vega-event-selector.module.js","../src/compile/selection/assemble.ts","../src/compile/data/dataflow.ts","../src/compile/data/timeunit.ts","../src/compile/selection/project.ts","../src/compile/selection/scales.ts","../src/compile/selection/interval.ts","../src/compile/selection/point.ts","../src/compile/mark/encode/conditional.ts","../src/compile/mark/encode/text.ts","../src/compile/mark/encode/tooltip.ts","../src/compile/mark/encode/aria.ts","../src/compile/mark/encode/nonposition.ts","../src/compile/mark/encode/color.ts","../src/compile/mark/encode/zindex.ts","../src/compile/mark/encode/offset.ts","../src/compile/mark/encode/position-point.ts","../src/compile/mark/encode/position-align.ts","../src/compile/mark/encode/position-range.ts","../src/compile/mark/encode/position-rect.ts","../src/compile/mark/encode/base.ts","../src/compile/mark/encode/defined.ts","../src/compile/selection/nearest.ts","../src/compile/selection/inputs.ts","../src/compile/selection/toggle.ts","../src/compile/selection/clear.ts","../src/compile/selection/legends.ts","../src/compile/selection/translate.ts","../src/compile/selection/zoom.ts","../src/compile/selection/index.ts","../node_modules/vega-expression/build/vega-expression.module.js","../src/compile/data/expressions.ts","../src/compile/data/filter.ts","../src/compile/selection/parse.ts","../src/compile/predicate.ts","../src/compile/axis/assemble.ts","../src/compile/axis/config.ts","../src/compile/axis/properties.ts","../src/compile/data/calculate.ts","../src/compile/header/common.ts","../src/compile/header/component.ts","../src/compile/header/assemble.ts","../src/compile/layoutsize/assemble.ts","../src/compile/layoutsize/component.ts","../src/compile/guide.ts","../src/compile/resolve.ts","../src/compile/legend/component.ts","../src/compile/legend/encode.ts","../src/compile/legend/properties.ts","../src/compile/legend/parse.ts","../src/compile/legend/assemble.ts","../src/compile/projection/assemble.ts","../src/projection.ts","../src/compile/projection/component.ts","../src/compile/projection/parse.ts","../src/compile/data/bin.ts","../src/compile/data/aggregate.ts","../src/compile/data/facet.ts","../src/compile/data/formatparse.ts","../src/compile/data/identifier.ts","../src/compile/data/graticule.ts","../src/compile/data/sequence.ts","../src/compile/data/source.ts","../src/compile/data/optimizer.ts","../src/compile/data/optimizers.ts","../src/compile/data/joinaggregate.ts","../src/compile/data/stack.ts","../src/compile/data/window.ts","../src/compile/data/subtree.ts","../src/compile/data/optimize.ts","../src/compile/signal.ts","../src/compile/scale/domain.ts","../src/compile/scale/assemble.ts","../src/compile/scale/component.ts","../src/compile/scale/range.ts","../src/compile/scale/properties.ts","../src/compile/scale/type.ts","../src/compile/scale/parse.ts","../src/compile/model.ts","../src/compile/data/density.ts","../src/compile/data/filterinvalid.ts","../src/compile/data/flatten.ts","../src/compile/data/fold.ts","../src/compile/data/geojson.ts","../src/compile/data/geopoint.ts","../src/compile/data/impute.ts","../src/compile/data/loess.ts","../src/compile/data/lookup.ts","../src/compile/data/quantile.ts","../src/compile/data/regression.ts","../src/compile/data/pivot.ts","../src/compile/data/sample.ts","../src/compile/data/assemble.ts","../src/compile/header/parse.ts","../src/compile/layoutsize/parse.ts","../src/compile/facet.ts","../src/compile/data/parse.ts","../src/compile/data/joinaggregatefacet.ts","../src/compile/concat.ts","../src/compile/axis/component.ts","../src/compile/axis/parse.ts","../src/compile/axis/encode.ts","../src/compile/mark/init.ts","../src/compile/mark/point.ts","../src/compile/mark/text.ts","../src/compile/mark/tick.ts","../src/compile/mark/mark.ts","../src/compile/mark/arc.ts","../src/compile/mark/area.ts","../src/compile/mark/bar.ts","../src/compile/mark/geoshape.ts","../src/compile/mark/image.ts","../src/compile/mark/line.ts","../src/compile/mark/rect.ts","../src/compile/mark/rule.ts","../src/compile/unit.ts","../src/compile/layoutsize/init.ts","../src/compile/layer.ts","../src/compile/buildmodel.ts","../src/index.ts","../src/compile/compile.ts"],"sourcesContent":["Array.prototype.flat||Object.defineProperty(Array.prototype,\"flat\",{configurable:!0,value:function r(){var t=isNaN(arguments[0])?1:Number(arguments[0]);return t?Array.prototype.reduce.call(this,function(a,e){return Array.isArray(e)?a.push.apply(a,r.call(e,t-1)):a.push(e),a},[]):Array.prototype.slice.call(this)},writable:!0}),Array.prototype.flatMap||Object.defineProperty(Array.prototype,\"flatMap\",{configurable:!0,value:function(r){return Array.prototype.map.apply(this,arguments).flat()},writable:!0})\n","var clone = (function() {\n'use strict';\n\nfunction _instanceof(obj, type) {\n return type != null && obj instanceof type;\n}\n\nvar nativeMap;\ntry {\n nativeMap = Map;\n} catch(_) {\n // maybe a reference error because no `Map`. Give it a dummy value that no\n // value will ever be an instanceof.\n nativeMap = function() {};\n}\n\nvar nativeSet;\ntry {\n nativeSet = Set;\n} catch(_) {\n nativeSet = function() {};\n}\n\nvar nativePromise;\ntry {\n nativePromise = Promise;\n} catch(_) {\n nativePromise = function() {};\n}\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n * circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n * a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n * (optional - defaults to parent prototype).\n * @param `includeNonEnumerable` - set to true if the non-enumerable properties\n * should be cloned as well. Non-enumerable properties on the prototype\n * chain will be ignored. (optional - false by default)\n*/\nfunction clone(parent, circular, depth, prototype, includeNonEnumerable) {\n if (typeof circular === 'object') {\n depth = circular.depth;\n prototype = circular.prototype;\n includeNonEnumerable = circular.includeNonEnumerable;\n circular = circular.circular;\n }\n // maintain two arrays for circular references, where corresponding parents\n // and children have the same index\n var allParents = [];\n var allChildren = [];\n\n var useBuffer = typeof Buffer != 'undefined';\n\n if (typeof circular == 'undefined')\n circular = true;\n\n if (typeof depth == 'undefined')\n depth = Infinity;\n\n // recurse this function so we don't reset allParents and allChildren\n function _clone(parent, depth) {\n // cloning null always returns null\n if (parent === null)\n return null;\n\n if (depth === 0)\n return parent;\n\n var child;\n var proto;\n if (typeof parent != 'object') {\n return parent;\n }\n\n if (_instanceof(parent, nativeMap)) {\n child = new nativeMap();\n } else if (_instanceof(parent, nativeSet)) {\n child = new nativeSet();\n } else if (_instanceof(parent, nativePromise)) {\n child = new nativePromise(function (resolve, reject) {\n parent.then(function(value) {\n resolve(_clone(value, depth - 1));\n }, function(err) {\n reject(_clone(err, depth - 1));\n });\n });\n } else if (clone.__isArray(parent)) {\n child = [];\n } else if (clone.__isRegExp(parent)) {\n child = new RegExp(parent.source, __getRegExpFlags(parent));\n if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n } else if (clone.__isDate(parent)) {\n child = new Date(parent.getTime());\n } else if (useBuffer && Buffer.isBuffer(parent)) {\n if (Buffer.allocUnsafe) {\n // Node.js >= 4.5.0\n child = Buffer.allocUnsafe(parent.length);\n } else {\n // Older Node.js versions\n child = new Buffer(parent.length);\n }\n parent.copy(child);\n return child;\n } else if (_instanceof(parent, Error)) {\n child = Object.create(parent);\n } else {\n if (typeof prototype == 'undefined') {\n proto = Object.getPrototypeOf(parent);\n child = Object.create(proto);\n }\n else {\n child = Object.create(prototype);\n proto = prototype;\n }\n }\n\n if (circular) {\n var index = allParents.indexOf(parent);\n\n if (index != -1) {\n return allChildren[index];\n }\n allParents.push(parent);\n allChildren.push(child);\n }\n\n if (_instanceof(parent, nativeMap)) {\n parent.forEach(function(value, key) {\n var keyChild = _clone(key, depth - 1);\n var valueChild = _clone(value, depth - 1);\n child.set(keyChild, valueChild);\n });\n }\n if (_instanceof(parent, nativeSet)) {\n parent.forEach(function(value) {\n var entryChild = _clone(value, depth - 1);\n child.add(entryChild);\n });\n }\n\n for (var i in parent) {\n var attrs;\n if (proto) {\n attrs = Object.getOwnPropertyDescriptor(proto, i);\n }\n\n if (attrs && attrs.set == null) {\n continue;\n }\n child[i] = _clone(parent[i], depth - 1);\n }\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(parent);\n for (var i = 0; i < symbols.length; i++) {\n // Don't need to worry about cloning a symbol because it is a primitive,\n // like a number or string.\n var symbol = symbols[i];\n var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);\n if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {\n continue;\n }\n child[symbol] = _clone(parent[symbol], depth - 1);\n if (!descriptor.enumerable) {\n Object.defineProperty(child, symbol, {\n enumerable: false\n });\n }\n }\n }\n\n if (includeNonEnumerable) {\n var allPropertyNames = Object.getOwnPropertyNames(parent);\n for (var i = 0; i < allPropertyNames.length; i++) {\n var propertyName = allPropertyNames[i];\n var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);\n if (descriptor && descriptor.enumerable) {\n continue;\n }\n child[propertyName] = _clone(parent[propertyName], depth - 1);\n Object.defineProperty(child, propertyName, {\n enumerable: false\n });\n }\n }\n\n return child;\n }\n\n return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n if (parent === null)\n return null;\n\n var c = function () {};\n c.prototype = parent;\n return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n return Object.prototype.toString.call(o);\n}\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Date]';\n}\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Array]';\n}\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n}\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n var flags = '';\n if (re.global) flags += 'g';\n if (re.ignoreCase) flags += 'i';\n if (re.multiline) flags += 'm';\n return flags;\n}\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n module.exports = clone;\n}\n","'use strict';\n\nmodule.exports = function (data, opts) {\n if (!opts) opts = {};\n if (typeof opts === 'function') opts = { cmp: opts };\n var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;\n\n var cmp = opts.cmp && (function (f) {\n return function (node) {\n return function (a, b) {\n var aobj = { key: a, value: node[a] };\n var bobj = { key: b, value: node[b] };\n return f(aobj, bobj);\n };\n };\n })(opts.cmp);\n\n var seen = [];\n return (function stringify (node) {\n if (node && node.toJSON && typeof node.toJSON === 'function') {\n node = node.toJSON();\n }\n\n if (node === undefined) return;\n if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';\n if (typeof node !== 'object') return JSON.stringify(node);\n\n var i, out;\n if (Array.isArray(node)) {\n out = '[';\n for (i = 0; i < node.length; i++) {\n if (i) out += ',';\n out += stringify(node[i]) || 'null';\n }\n return out + ']';\n }\n\n if (node === null) return 'null';\n\n if (seen.indexOf(node) !== -1) {\n if (cycles) return JSON.stringify('__cycle__');\n throw new TypeError('Converting circular structure to JSON');\n }\n\n var seenIndex = seen.push(node) - 1;\n var keys = Object.keys(node).sort(cmp && cmp(node));\n out = '';\n for (i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = stringify(node[key]);\n\n if (!value) continue;\n if (out) out += ',';\n out += JSON.stringify(key) + ':' + value;\n }\n seen.splice(seenIndex, 1);\n return '{' + out + '}';\n })(data);\n};\n","export type LogicalComposition = LogicalNot | LogicalAnd | LogicalOr | T;\n\nexport interface LogicalOr {\n or: LogicalComposition[];\n}\n\nexport interface LogicalAnd {\n and: LogicalComposition[];\n}\n\nexport interface LogicalNot {\n not: LogicalComposition;\n}\n\nexport function isLogicalOr(op: LogicalComposition): op is LogicalOr {\n return !!op.or;\n}\n\nexport function isLogicalAnd(op: LogicalComposition): op is LogicalAnd {\n return !!op.and;\n}\n\nexport function isLogicalNot(op: LogicalComposition): op is LogicalNot {\n return !!op.not;\n}\n\nexport function forEachLeaf(op: LogicalComposition, fn: (op: T) => void) {\n if (isLogicalNot(op)) {\n forEachLeaf(op.not, fn);\n } else if (isLogicalAnd(op)) {\n for (const subop of op.and) {\n forEachLeaf(subop, fn);\n }\n } else if (isLogicalOr(op)) {\n for (const subop of op.or) {\n forEachLeaf(subop, fn);\n }\n } else {\n fn(op);\n }\n}\n\nexport function normalizeLogicalComposition(\n op: LogicalComposition,\n normalizer: (o: T) => T\n): LogicalComposition {\n if (isLogicalNot(op)) {\n return {not: normalizeLogicalComposition(op.not, normalizer)};\n } else if (isLogicalAnd(op)) {\n return {and: op.and.map(o => normalizeLogicalComposition(o, normalizer))};\n } else if (isLogicalOr(op)) {\n return {or: op.or.map(o => normalizeLogicalComposition(o, normalizer))};\n } else {\n return normalizer(op);\n }\n}\n","import 'array-flat-polyfill';\nimport {default as clone_} from 'clone';\nimport deepEqual_ from 'fast-deep-equal';\nimport stableStringify from 'fast-json-stable-stringify';\nimport {hasOwnProperty, isNumber, isString, splitAccessPath, stringValue, writeConfig} from 'vega-util';\nimport {isLogicalAnd, isLogicalNot, isLogicalOr, LogicalComposition} from './logical';\n\nexport const deepEqual = deepEqual_;\nexport const duplicate = clone_;\n\n/**\n * Creates an object composed of the picked object properties.\n *\n * var object = {'a': 1, 'b': '2', 'c': 3};\n * pick(object, ['a', 'c']);\n * // → {'a': 1, 'c': 3}\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function pick(obj: T, props: readonly K[]): Pick {\n const copy: any = {};\n for (const prop of props) {\n if (hasOwnProperty(obj, prop)) {\n copy[prop] = obj[prop];\n }\n }\n return copy;\n}\n\n/**\n * The opposite of _.pick; this method creates an object composed of the own\n * and inherited enumerable string keyed properties of object that are not omitted.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function omit(obj: T, props: readonly K[]): Omit {\n const copy = {...(obj as any)};\n for (const prop of props) {\n delete copy[prop];\n }\n return copy;\n}\n\n/**\n * Monkey patch Set so that `stringify` produces a string representation of sets.\n */\nSet.prototype['toJSON'] = function () {\n return `Set(${[...this].map(x => stableStringify(x)).join(',')})`;\n};\n\n/**\n * Converts any object to a string representation that can be consumed by humans.\n */\nexport const stringify = stableStringify;\n\n/**\n * Converts any object to a string of limited size, or a number.\n */\nexport function hash(a: any): string | number {\n if (isNumber(a)) {\n return a;\n }\n\n const str = isString(a) ? a : stableStringify(a);\n\n // short strings can be used as hash directly, longer strings are hashed to reduce memory usage\n if (str.length < 250) {\n return str;\n }\n\n // from http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/\n let h = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n h = (h << 5) - h + char;\n h = h & h; // Convert to 32bit integer\n }\n return h;\n}\n\nexport function isNullOrFalse(x: any): x is false | null {\n return x === false || x === null;\n}\n\nexport function contains(array: readonly T[], item: T) {\n return array.includes(item);\n}\n\n/**\n * Returns true if any item returns true.\n */\nexport function some(arr: readonly T[], f: (d: T, k?: any, i?: any) => boolean) {\n let i = 0;\n for (const [k, a] of arr.entries()) {\n if (f(a, k, i++)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Returns true if all items return true.\n */\nexport function every(arr: readonly T[], f: (d: T, k?: any, i?: any) => boolean) {\n let i = 0;\n for (const [k, a] of arr.entries()) {\n if (!f(a, k, i++)) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Like TS Partial but applies recursively to all properties.\n */\nexport type DeepPartial = {[P in keyof T]?: DeepPartial};\n\n/**\n * recursively merges src into dest\n */\nexport function mergeDeep(dest: T, ...src: readonly DeepPartial[]): T {\n for (const s of src) {\n deepMerge_(dest, s ?? {});\n }\n return dest;\n}\n\nfunction deepMerge_(dest: any, src: any) {\n for (const property of keys(src)) {\n writeConfig(dest, property, src[property], true);\n }\n}\n\nexport function unique(values: readonly T[], f: (item: T) => string | number): T[] {\n const results: T[] = [];\n const u = {};\n let v: string | number;\n for (const val of values) {\n v = f(val);\n if (v in u) {\n continue;\n }\n u[v] = 1;\n results.push(val);\n }\n return results;\n}\n\nexport type Dict = Record;\n\n/**\n * Returns true if the two dictionaries disagree. Applies only to defined values.\n */\nexport function isEqual(dict: Dict, other: Dict) {\n const dictKeys = keys(dict);\n const otherKeys = keys(other);\n if (dictKeys.length !== otherKeys.length) {\n return false;\n }\n for (const key of dictKeys) {\n if (dict[key] !== other[key]) {\n return false;\n }\n }\n return true;\n}\n\nexport function setEqual(a: Set, b: Set) {\n if (a.size !== b.size) {\n return false;\n }\n for (const e of a) {\n if (!b.has(e)) {\n return false;\n }\n }\n return true;\n}\n\nexport function hasIntersection(a: ReadonlySet, b: ReadonlySet) {\n for (const key of a) {\n if (b.has(key)) {\n return true;\n }\n }\n return false;\n}\n\nexport function prefixGenerator(a: ReadonlySet): ReadonlySet {\n const prefixes = new Set();\n for (const x of a) {\n const splitField = splitAccessPath(x);\n // Wrap every element other than the first in `[]`\n const wrappedWithAccessors = splitField.map((y, i) => (i === 0 ? y : `[${y}]`));\n const computedPrefixes = wrappedWithAccessors.map((_, i) => wrappedWithAccessors.slice(0, i + 1).join(''));\n for (const y of computedPrefixes) {\n prefixes.add(y);\n }\n }\n return prefixes;\n}\n\n/**\n * Returns true if a and b have an intersection. Also return true if a or b are undefined\n * since this means we don't know what fields a node produces or depends on.\n */\nexport function fieldIntersection(a: ReadonlySet, b: ReadonlySet): boolean {\n if (a === undefined || b === undefined) {\n return true;\n }\n return hasIntersection(prefixGenerator(a), prefixGenerator(b));\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isEmpty(obj: object) {\n return keys(obj).length === 0;\n}\n\n// This is a stricter version of Object.keys but with better types. See https://github.com/Microsoft/TypeScript/pull/12253#issuecomment-263132208\nexport const keys = Object.keys as (o: T) => Extract[];\n\nexport const vals = Object.values;\n\nexport const entries = Object.entries;\n\n// Using mapped type to declare a collect of flags for a string literal type S\n// https://www.typescriptlang.org/docs/handbook/advanced-types.html#mapped-types\nexport type Flag = {[K in S]: 1};\n\nexport function isBoolean(b: any): b is boolean {\n return b === true || b === false;\n}\n\n/**\n * Convert a string into a valid variable name\n */\nexport function varName(s: string): string {\n // Replace non-alphanumeric characters (anything besides a-zA-Z0-9_) with _\n const alphanumericS = s.replace(/\\W/g, '_');\n\n // Add _ if the string has leading numbers.\n return (s.match(/^\\d+/) ? '_' : '') + alphanumericS;\n}\n\nexport function logicalExpr(op: LogicalComposition, cb: (...args: readonly any[]) => string): string {\n if (isLogicalNot(op)) {\n return `!(${logicalExpr(op.not, cb)})`;\n } else if (isLogicalAnd(op)) {\n return `(${op.and.map((and: LogicalComposition) => logicalExpr(and, cb)).join(') && (')})`;\n } else if (isLogicalOr(op)) {\n return `(${op.or.map((or: LogicalComposition) => logicalExpr(or, cb)).join(') || (')})`;\n } else {\n return cb(op);\n }\n}\n\n/**\n * Delete nested property of an object, and delete the ancestors of the property if they become empty.\n */\nexport function deleteNestedProperty(obj: any, orderedProps: string[]) {\n if (orderedProps.length === 0) {\n return true;\n }\n const prop = orderedProps.shift()!; // eslint-disable-line @typescript-eslint/no-non-null-assertion\n if (prop in obj && deleteNestedProperty(obj[prop], orderedProps)) {\n delete obj[prop];\n }\n return isEmpty(obj);\n}\n\nexport function titleCase(s: string) {\n return s.charAt(0).toUpperCase() + s.substr(1);\n}\n\n/**\n * Converts a path to an access path with datum.\n * @param path The field name.\n * @param datum The string to use for `datum`.\n */\nexport function accessPathWithDatum(path: string, datum = 'datum') {\n const pieces = splitAccessPath(path);\n const prefixes = [];\n for (let i = 1; i <= pieces.length; i++) {\n const prefix = `[${pieces.slice(0, i).map(stringValue).join('][')}]`;\n prefixes.push(`${datum}${prefix}`);\n }\n return prefixes.join(' && ');\n}\n\n/**\n * Return access with datum to the flattened field.\n *\n * @param path The field name.\n * @param datum The string to use for `datum`.\n */\nexport function flatAccessWithDatum(path: string, datum: 'datum' | 'parent' | 'datum.datum' = 'datum') {\n return `${datum}[${stringValue(splitAccessPath(path).join('.'))}]`;\n}\n\nfunction escapePathAccess(string: string) {\n return string.replace(/(\\[|\\]|\\.|'|\")/g, '\\\\$1');\n}\n\n/**\n * Replaces path accesses with access to non-nested field.\n * For example, `foo[\"bar\"].baz` becomes `foo\\\\.bar\\\\.baz`.\n */\nexport function replacePathInField(path: string) {\n return `${splitAccessPath(path).map(escapePathAccess).join('\\\\.')}`;\n}\n\n/**\n * Replace all occurrences of a string with another string.\n *\n * @param string the string to replace in\n * @param find the string to replace\n * @param replacement the replacement\n */\nexport function replaceAll(string: string, find: string, replacement: string) {\n return string.replace(new RegExp(find.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'g'), replacement);\n}\n\n/**\n * Remove path accesses with access from field.\n * For example, `foo[\"bar\"].baz` becomes `foo.bar.baz`.\n */\nexport function removePathFromField(path: string) {\n return `${splitAccessPath(path).join('.')}`;\n}\n\n/**\n * Count the depth of the path. Returns 1 for fields that are not nested.\n */\nexport function accessPathDepth(path: string) {\n if (!path) {\n return 0;\n }\n return splitAccessPath(path).length;\n}\n\n/**\n * This is a replacement for chained || for numeric properties or properties that respect null so that 0 will be included.\n */\nexport function getFirstDefined(...args: readonly T[]): T | undefined {\n for (const arg of args) {\n if (arg !== undefined) {\n return arg;\n }\n }\n return undefined;\n}\n\n// variable used to generate id\nlet idCounter = 42;\n\n/**\n * Returns a new random id every time it gets called.\n *\n * Has side effect!\n */\nexport function uniqueId(prefix?: string) {\n const id = ++idCounter;\n return prefix ? String(prefix) + id : id;\n}\n\n/**\n * Resets the id counter used in uniqueId. This can be useful for testing.\n */\nexport function resetIdCounter() {\n idCounter = 42;\n}\n\nexport function internalField(name: string) {\n return isInternalField(name) ? name : `__${name}`;\n}\n\nexport function isInternalField(name: string) {\n return name.startsWith('__');\n}\n\n/**\n * Normalize angle to be within [0,360).\n */\nexport function normalizeAngle(angle: number) {\n if (angle === undefined) {\n return undefined;\n }\n return ((angle % 360) + 360) % 360;\n}\n\n/**\n * Returns whether the passed in value is a valid number.\n */\nexport function isNumeric(value: number | string): boolean {\n if (isNumber(value)) {\n return true;\n }\n return !isNaN(value as any) && !isNaN(parseFloat(value));\n}\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","/*\n * Constants and utilities for encoding channels (Visual variables)\n * such as 'x', 'y', 'color'.\n */\n\nimport {RangeType} from './compile/scale/type';\nimport {Encoding} from './encoding';\nimport {Mark} from './mark';\nimport {EncodingFacetMapping} from './spec/facet';\nimport {Flag, keys} from './util';\n\nexport type Channel = keyof Encoding;\nexport type ExtendedChannel = Channel | FacetChannel;\n\n// Facet\nexport const ROW = 'row' as const;\nexport const COLUMN = 'column' as const;\n\nexport const FACET = 'facet' as const;\n\n// Position\nexport const X = 'x' as const;\nexport const Y = 'y' as const;\nexport const X2 = 'x2' as const;\nexport const Y2 = 'y2' as const;\n\n// Arc-Position\nexport const RADIUS = 'radius' as const;\nexport const RADIUS2 = 'radius2' as const;\nexport const THETA = 'theta' as const;\nexport const THETA2 = 'theta2' as const;\n\n// Geo Position\nexport const LATITUDE = 'latitude' as const;\nexport const LONGITUDE = 'longitude' as const;\nexport const LATITUDE2 = 'latitude2' as const;\nexport const LONGITUDE2 = 'longitude2' as const;\n\n// Mark property with scale\nexport const COLOR = 'color' as const;\n\nexport const FILL = 'fill' as const;\n\nexport const STROKE = 'stroke' as const;\n\nexport const SHAPE = 'shape' as const;\nexport const SIZE = 'size' as const;\n\nexport const ANGLE = 'angle' as const;\n\nexport const OPACITY = 'opacity' as const;\nexport const FILLOPACITY = 'fillOpacity' as const;\n\nexport const STROKEOPACITY = 'strokeOpacity' as const;\n\nexport const STROKEWIDTH = 'strokeWidth' as const;\nexport const STROKEDASH = 'strokeDash' as const;\n\n// Non-scale channel\nexport const TEXT = 'text' as const;\nexport const ORDER = 'order' as const;\nexport const DETAIL = 'detail' as const;\nexport const KEY = 'key' as const;\n\nexport const TOOLTIP = 'tooltip' as const;\nexport const HREF = 'href' as const;\n\nexport const URL = 'url' as const;\nexport const DESCRIPTION = 'description' as const;\n\nconst POSITION_CHANNEL_INDEX = {\n x: 1,\n y: 1,\n x2: 1,\n y2: 1\n} as const;\n\nexport type PositionChannel = keyof typeof POSITION_CHANNEL_INDEX;\n\nconst POLAR_POSITION_CHANNEL_INDEX = {\n theta: 1,\n theta2: 1,\n radius: 1,\n radius2: 1\n} as const;\n\nexport type PolarPositionChannel = keyof typeof POLAR_POSITION_CHANNEL_INDEX;\n\nexport function isPolarPositionChannel(c: Channel): c is PolarPositionChannel {\n return c in POLAR_POSITION_CHANNEL_INDEX;\n}\n\nconst GEO_POSIITON_CHANNEL_INDEX = {\n longitude: 1,\n longitude2: 1,\n latitude: 1,\n latitude2: 1\n} as const;\n\nexport type GeoPositionChannel = keyof typeof GEO_POSIITON_CHANNEL_INDEX;\n\nexport function getPositionChannelFromLatLong(channel: GeoPositionChannel): PositionChannel {\n switch (channel) {\n case LATITUDE:\n return 'y';\n case LATITUDE2:\n return 'y2';\n case LONGITUDE:\n return 'x';\n case LONGITUDE2:\n return 'x2';\n }\n}\n\nexport function isGeoPositionChannel(c: Channel): c is GeoPositionChannel {\n return c in GEO_POSIITON_CHANNEL_INDEX;\n}\n\nexport const GEOPOSITION_CHANNELS = keys(GEO_POSIITON_CHANNEL_INDEX);\n\nconst UNIT_CHANNEL_INDEX: Flag = {\n ...POSITION_CHANNEL_INDEX,\n ...POLAR_POSITION_CHANNEL_INDEX,\n\n ...GEO_POSIITON_CHANNEL_INDEX,\n\n // color\n color: 1,\n fill: 1,\n stroke: 1,\n\n // other non-position with scale\n opacity: 1,\n fillOpacity: 1,\n strokeOpacity: 1,\n\n strokeWidth: 1,\n strokeDash: 1,\n size: 1,\n angle: 1,\n shape: 1,\n\n // channels without scales\n order: 1,\n text: 1,\n detail: 1,\n key: 1,\n tooltip: 1,\n href: 1,\n url: 1,\n description: 1\n};\n\nexport type ColorChannel = 'color' | 'fill' | 'stroke';\n\nexport function isColorChannel(channel: Channel): channel is ColorChannel {\n return channel === COLOR || channel === FILL || channel === STROKE;\n}\n\nexport type FacetChannel = keyof EncodingFacetMapping;\n\nconst FACET_CHANNEL_INDEX: Flag> = {\n row: 1,\n column: 1,\n facet: 1\n};\n\nexport const FACET_CHANNELS = keys(FACET_CHANNEL_INDEX);\n\nconst CHANNEL_INDEX = {\n ...UNIT_CHANNEL_INDEX,\n ...FACET_CHANNEL_INDEX\n};\n\nexport const CHANNELS = keys(CHANNEL_INDEX);\n\nconst {order: _o, detail: _d, tooltip: _tt1, ...SINGLE_DEF_CHANNEL_INDEX} = CHANNEL_INDEX;\nconst {row: _r, column: _c, facet: _f, ...SINGLE_DEF_UNIT_CHANNEL_INDEX} = SINGLE_DEF_CHANNEL_INDEX;\n/**\n * Channels that cannot have an array of channelDef.\n * model.fieldDef, getFieldDef only work for these channels.\n *\n * (The only two channels that can have an array of channelDefs are \"detail\" and \"order\".\n * Since there can be multiple fieldDefs for detail and order, getFieldDef/model.fieldDef\n * are not applicable for them. Similarly, selection projection won't work with \"detail\" and \"order\".)\n */\n\nexport const SINGLE_DEF_CHANNELS = keys(SINGLE_DEF_CHANNEL_INDEX);\n\nexport type SingleDefChannel = typeof SINGLE_DEF_CHANNELS[number];\n\nexport const SINGLE_DEF_UNIT_CHANNELS = keys(SINGLE_DEF_UNIT_CHANNEL_INDEX);\n\nexport type SingleDefUnitChannel = typeof SINGLE_DEF_UNIT_CHANNELS[number];\n\nexport function isSingleDefUnitChannel(str: string): str is SingleDefUnitChannel {\n return !!SINGLE_DEF_UNIT_CHANNEL_INDEX[str];\n}\n\nexport function isChannel(str: string): str is Channel {\n return !!CHANNEL_INDEX[str];\n}\n\nexport type SecondaryRangeChannel = 'x2' | 'y2' | 'latitude2' | 'longitude2' | 'theta2' | 'radius2';\n\nexport const SECONDARY_RANGE_CHANNEL: SecondaryRangeChannel[] = [X2, Y2, LATITUDE2, LONGITUDE2, THETA2, RADIUS2];\n\nexport function isSecondaryRangeChannel(c: ExtendedChannel): c is SecondaryRangeChannel {\n const main = getMainRangeChannel(c);\n return main !== c;\n}\n\nexport type MainChannelOf = C extends 'x2'\n ? 'x'\n : C extends 'y2'\n ? 'y'\n : C extends 'latitude2'\n ? 'latitude'\n : C extends 'longitude2'\n ? 'longitude'\n : C extends 'theta2'\n ? 'theta'\n : C extends 'radius2'\n ? 'radius'\n : C;\n\n/**\n * Get the main channel for a range channel. E.g. `x` for `x2`.\n */\nexport function getMainRangeChannel(channel: C): MainChannelOf {\n switch (channel) {\n case X2:\n return X as MainChannelOf;\n case Y2:\n return Y as MainChannelOf;\n case LATITUDE2:\n return LATITUDE as MainChannelOf;\n case LONGITUDE2:\n return LONGITUDE as MainChannelOf;\n case THETA2:\n return THETA as MainChannelOf;\n case RADIUS2:\n return RADIUS as MainChannelOf;\n }\n return channel as MainChannelOf;\n}\n\nexport type SecondaryChannelOf = C extends 'x'\n ? 'x2'\n : C extends 'y'\n ? 'y2'\n : C extends 'latitude'\n ? 'latitude2'\n : C extends 'longitude'\n ? 'longitude2'\n : C extends 'theta'\n ? 'theta2'\n : C extends 'radius'\n ? 'radius2'\n : undefined;\n\nexport function getVgPositionChannel(channel: PolarPositionChannel | PositionChannel) {\n if (isPolarPositionChannel(channel)) {\n switch (channel) {\n case THETA:\n return 'startAngle';\n case THETA2:\n return 'endAngle';\n case RADIUS:\n return 'outerRadius';\n case RADIUS2:\n return 'innerRadius';\n }\n }\n return channel;\n}\n\n/**\n * Get the main channel for a range channel. E.g. `x` for `x2`.\n */\nexport function getSecondaryRangeChannel(channel: C): SecondaryChannelOf | undefined {\n switch (channel) {\n case X:\n return X2 as SecondaryChannelOf;\n case Y:\n return Y2 as SecondaryChannelOf;\n case LATITUDE:\n return LATITUDE2 as SecondaryChannelOf;\n case LONGITUDE:\n return LONGITUDE2 as SecondaryChannelOf;\n case THETA:\n return THETA2 as SecondaryChannelOf;\n case RADIUS:\n return RADIUS2 as SecondaryChannelOf;\n }\n return undefined;\n}\n\nexport function getSizeChannel(channel: PositionChannel): 'width' | 'height';\nexport function getSizeChannel(channel: Channel): 'width' | 'height' | undefined;\nexport function getSizeChannel(channel: Channel): 'width' | 'height' | undefined {\n switch (channel) {\n case X:\n case X2:\n return 'width';\n case Y:\n case Y2:\n return 'height';\n }\n return undefined;\n}\n\n/**\n * Get the main channel for a range channel. E.g. `x` for `x2`.\n */\nexport function getOffsetChannel(channel: Channel) {\n switch (channel) {\n case X:\n return 'xOffset';\n case Y:\n return 'yOffset';\n case X2:\n return 'x2Offset';\n case Y2:\n return 'y2Offset';\n case THETA:\n return 'thetaOffset';\n case RADIUS:\n return 'radiusOffset';\n case THETA2:\n return 'theta2Offset';\n case RADIUS2:\n return 'radius2Offset';\n }\n return undefined;\n}\n\n// CHANNELS without COLUMN, ROW\nexport const UNIT_CHANNELS = keys(UNIT_CHANNEL_INDEX);\n\n// NONPOSITION_CHANNELS = UNIT_CHANNELS without X, Y, X2, Y2;\nconst {\n x: _x,\n y: _y,\n // x2 and y2 share the same scale as x and y\n x2: _x2,\n y2: _y2,\n latitude: _latitude,\n longitude: _longitude,\n latitude2: _latitude2,\n longitude2: _longitude2,\n theta: _theta,\n theta2: _theta2,\n radius: _radius,\n radius2: _radius2,\n // The rest of unit channels then have scale\n ...NONPOSITION_CHANNEL_INDEX\n} = UNIT_CHANNEL_INDEX;\n\nexport const NONPOSITION_CHANNELS = keys(NONPOSITION_CHANNEL_INDEX);\nexport type NonPositionChannel = typeof NONPOSITION_CHANNELS[number];\n\nexport const POSITION_SCALE_CHANNEL_INDEX = {\n x: 1,\n y: 1\n} as const;\nexport const POSITION_SCALE_CHANNELS = keys(POSITION_SCALE_CHANNEL_INDEX);\nexport type PositionScaleChannel = keyof typeof POSITION_SCALE_CHANNEL_INDEX;\n\nexport function isXorY(channel: ExtendedChannel): channel is PositionScaleChannel {\n return channel in POSITION_SCALE_CHANNEL_INDEX;\n}\n\nexport const POLAR_POSITION_SCALE_CHANNEL_INDEX = {\n theta: 1,\n radius: 1\n} as const;\n\nexport const POLAR_POSITION_SCALE_CHANNELS = keys(POLAR_POSITION_SCALE_CHANNEL_INDEX);\nexport type PolarPositionScaleChannel = keyof typeof POLAR_POSITION_SCALE_CHANNEL_INDEX;\n\nexport function getPositionScaleChannel(sizeType: 'width' | 'height'): PositionScaleChannel {\n return sizeType === 'width' ? X : Y;\n}\n\n// NON_POSITION_SCALE_CHANNEL = SCALE_CHANNELS without X, Y\nconst {\n // x2 and y2 share the same scale as x and y\n // text and tooltip have format instead of scale,\n // href has neither format, nor scale\n text: _t,\n tooltip: _tt,\n href: _hr,\n url: _u,\n description: _al,\n // detail and order have no scale\n detail: _dd,\n key: _k,\n order: _oo,\n ...NONPOSITION_SCALE_CHANNEL_INDEX\n} = NONPOSITION_CHANNEL_INDEX;\nexport const NONPOSITION_SCALE_CHANNELS = keys(NONPOSITION_SCALE_CHANNEL_INDEX);\nexport type NonPositionScaleChannel = typeof NONPOSITION_SCALE_CHANNELS[number];\n\nexport function isNonPositionScaleChannel(channel: Channel): channel is NonPositionScaleChannel {\n return !!NONPOSITION_CHANNEL_INDEX[channel];\n}\n\n/**\n * @returns whether Vega supports legends for a particular channel\n */\nexport function supportLegend(channel: NonPositionScaleChannel) {\n switch (channel) {\n case COLOR:\n case FILL:\n case STROKE:\n case SIZE:\n case SHAPE:\n case OPACITY:\n case STROKEWIDTH:\n case STROKEDASH:\n return true;\n case FILLOPACITY:\n case STROKEOPACITY:\n case ANGLE:\n return false;\n }\n}\n\n// Declare SCALE_CHANNEL_INDEX\nconst SCALE_CHANNEL_INDEX = {\n ...POSITION_SCALE_CHANNEL_INDEX,\n ...POLAR_POSITION_SCALE_CHANNEL_INDEX,\n ...NONPOSITION_SCALE_CHANNEL_INDEX\n};\n\n/** List of channels with scales */\nexport const SCALE_CHANNELS = keys(SCALE_CHANNEL_INDEX);\nexport type ScaleChannel = typeof SCALE_CHANNELS[number];\n\nexport function isScaleChannel(channel: Channel): channel is ScaleChannel {\n return !!SCALE_CHANNEL_INDEX[channel];\n}\n\nexport type SupportedMark = Partial>;\n\n/**\n * Return whether a channel supports a particular mark type.\n * @param channel channel name\n * @param mark the mark type\n * @return whether the mark supports the channel\n */\nexport function supportMark(channel: ExtendedChannel, mark: Mark) {\n return getSupportedMark(channel)[mark];\n}\n\nconst ALL_MARKS: Record = {\n // all marks\n arc: 'always',\n area: 'always',\n bar: 'always',\n circle: 'always',\n geoshape: 'always',\n image: 'always',\n line: 'always',\n rule: 'always',\n point: 'always',\n rect: 'always',\n square: 'always',\n trail: 'always',\n text: 'always',\n tick: 'always'\n};\n\nconst {geoshape: _g, ...ALL_MARKS_EXCEPT_GEOSHAPE} = ALL_MARKS;\n\n/**\n * Return a dictionary showing whether a channel supports mark type.\n * @param channel\n * @return A dictionary mapping mark types to 'always', 'binned', or undefined\n */\nfunction getSupportedMark(channel: ExtendedChannel): SupportedMark {\n switch (channel) {\n case COLOR:\n case FILL:\n case STROKE:\n // falls through\n\n case DESCRIPTION:\n case DETAIL:\n case KEY:\n case TOOLTIP:\n case HREF:\n case ORDER: // TODO: revise (order might not support rect, which is not stackable?)\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n case STROKEWIDTH:\n\n // falls through\n\n case FACET:\n case ROW: // falls through\n case COLUMN:\n return ALL_MARKS;\n case X:\n case Y:\n case LATITUDE:\n case LONGITUDE:\n // all marks except geoshape. geoshape does not use X, Y -- it uses a projection\n return ALL_MARKS_EXCEPT_GEOSHAPE;\n case X2:\n case Y2:\n case LATITUDE2:\n case LONGITUDE2:\n return {\n area: 'always',\n bar: 'always',\n image: 'always',\n rect: 'always',\n rule: 'always',\n circle: 'binned',\n point: 'binned',\n square: 'binned',\n tick: 'binned',\n line: 'binned',\n trail: 'binned'\n };\n case SIZE:\n return {\n point: 'always',\n tick: 'always',\n rule: 'always',\n circle: 'always',\n square: 'always',\n bar: 'always',\n text: 'always',\n line: 'always',\n trail: 'always'\n };\n case STROKEDASH:\n return {\n line: 'always',\n point: 'always',\n tick: 'always',\n rule: 'always',\n circle: 'always',\n square: 'always',\n bar: 'always',\n geoshape: 'always'\n };\n case SHAPE:\n return {point: 'always', geoshape: 'always'};\n case TEXT:\n return {text: 'always'};\n case ANGLE:\n return {point: 'always', square: 'always', text: 'always'};\n case URL:\n return {image: 'always'};\n case THETA:\n return {text: 'always', arc: 'always'};\n case RADIUS:\n return {text: 'always', arc: 'always'};\n case THETA2:\n case RADIUS2:\n return {arc: 'always'};\n }\n}\n\nexport function rangeType(channel: ExtendedChannel): RangeType {\n switch (channel) {\n case X:\n case Y:\n case THETA:\n case RADIUS:\n case SIZE:\n case ANGLE:\n case STROKEWIDTH:\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n\n // X2 and Y2 use X and Y scales, so they similarly have continuous range. [falls through]\n case X2:\n case Y2:\n case THETA2:\n case RADIUS2:\n return undefined;\n\n case FACET:\n case ROW:\n case COLUMN:\n case SHAPE:\n case STROKEDASH:\n // TEXT, TOOLTIP, URL, and HREF have no scale but have discrete output [falls through]\n case TEXT:\n case TOOLTIP:\n case HREF:\n case URL:\n case DESCRIPTION:\n return 'discrete';\n\n // Color can be either continuous or discrete, depending on scale type.\n case COLOR:\n case FILL:\n case STROKE:\n return 'flexible';\n\n // No scale, no range type.\n\n case LATITUDE:\n case LONGITUDE:\n case LATITUDE2:\n case LONGITUDE2:\n case DETAIL:\n case KEY:\n case ORDER:\n return undefined;\n }\n}\n","import {AggregateOp} from 'vega';\nimport {isString, toSet} from 'vega-util';\nimport {FieldName} from './channeldef';\nimport {contains, Flag, keys} from './util';\n\nconst AGGREGATE_OP_INDEX: Flag = {\n argmax: 1,\n argmin: 1,\n average: 1,\n count: 1,\n distinct: 1,\n product: 1,\n max: 1,\n mean: 1,\n median: 1,\n min: 1,\n missing: 1,\n q1: 1,\n q3: 1,\n ci0: 1,\n ci1: 1,\n stderr: 1,\n stdev: 1,\n stdevp: 1,\n sum: 1,\n valid: 1,\n values: 1,\n variance: 1,\n variancep: 1\n};\n\nexport const MULTIDOMAIN_SORT_OP_INDEX = {\n count: 1,\n min: 1,\n max: 1\n};\n\nexport interface ArgminDef {\n argmin: FieldName;\n}\n\nexport interface ArgmaxDef {\n argmax: FieldName;\n}\n\nexport type NonArgAggregateOp = Exclude;\n\nexport type Aggregate = NonArgAggregateOp | ArgmaxDef | ArgminDef;\n\nexport function isArgminDef(a: Aggregate | string): a is ArgminDef {\n return !!a && !!a['argmin'];\n}\n\nexport function isArgmaxDef(a: Aggregate | string): a is ArgmaxDef {\n return !!a && !!a['argmax'];\n}\n\nexport const AGGREGATE_OPS = keys(AGGREGATE_OP_INDEX);\n\nexport function isAggregateOp(a: string | ArgminDef | ArgmaxDef): a is AggregateOp {\n return isString(a) && !!AGGREGATE_OP_INDEX[a];\n}\n\nexport const COUNTING_OPS: NonArgAggregateOp[] = ['count', 'valid', 'missing', 'distinct'];\n\nexport function isCountingAggregateOp(aggregate?: string | Aggregate): boolean {\n return isString(aggregate) && contains(COUNTING_OPS, aggregate);\n}\n\nexport function isMinMaxOp(aggregate?: Aggregate | string): boolean {\n return isString(aggregate) && contains(['min', 'max'], aggregate);\n}\n\n/** Additive-based aggregation operations. These can be applied to stack. */\nexport const SUM_OPS: NonArgAggregateOp[] = ['count', 'sum', 'distinct', 'valid', 'missing'];\n\n/**\n * Aggregation operators that always produce values within the range [domainMin, domainMax].\n */\nexport const SHARED_DOMAIN_OPS: AggregateOp[] = ['mean', 'average', 'median', 'q1', 'q3', 'min', 'max'];\n\nexport const SHARED_DOMAIN_OP_INDEX = toSet(SHARED_DOMAIN_OPS);\n","import {isBoolean, isObject} from 'vega-util';\nimport {\n COLOR,\n COLUMN,\n ExtendedChannel,\n FILL,\n FILLOPACITY,\n OPACITY,\n ROW,\n SHAPE,\n SIZE,\n STROKE,\n STROKEDASH,\n STROKEOPACITY,\n STROKEWIDTH\n} from './channel';\nimport {normalizeBin} from './channeldef';\nimport {ParameterExtent} from './selection';\nimport {entries, keys, varName} from './util';\n\nexport interface BaseBin {\n /**\n * The number base to use for automatic bin determination (default is base 10).\n *\n * __Default value:__ `10`\n *\n */\n base?: number;\n /**\n * An exact step size to use between bins.\n *\n * __Note:__ If provided, options such as maxbins will be ignored.\n */\n step?: number;\n /**\n * An array of allowable step sizes to choose from.\n * @minItems 1\n */\n steps?: number[];\n /**\n * A minimum allowable step size (particularly useful for integer values).\n */\n minstep?: number;\n /**\n * Scale factors indicating allowable subdivisions. The default value is [5, 2], which indicates that for base 10 numbers (the default base), the method may consider dividing bin sizes by 5 and/or 2. For example, for an initial step size of 10, the method can check if bin sizes of 2 (= 10/5), 5 (= 10/2), or 1 (= 10/(5*2)) might also satisfy the given constraints.\n *\n * __Default value:__ `[5, 2]`\n *\n * @minItems 1\n */\n divide?: [number, number];\n /**\n * Maximum number of bins.\n *\n * __Default value:__ `6` for `row`, `column` and `shape` channels; `10` for other channels\n *\n * @minimum 2\n */\n maxbins?: number;\n /**\n * A value in the binned domain at which to anchor the bins, shifting the bin boundaries if necessary to ensure that a boundary aligns with the anchor value.\n *\n * __Default value:__ the minimum bin extent value\n */\n anchor?: number;\n /**\n * If true, attempts to make the bin boundaries use human-friendly boundaries, such as multiples of ten.\n *\n * __Default value:__ `true`\n */\n nice?: boolean;\n}\n\n/**\n * Binning properties or boolean flag for determining whether to bin data or not.\n */\nexport interface BinParams extends BaseBin {\n /**\n * A two-element (`[min, max]`) array indicating the range of desired bin values.\n */\n extent?: BinExtent; // VgBinTransform uses a different extent so we need to pull this out.\n\n /**\n * When set to `true`, Vega-Lite treats the input data as already binned.\n */\n binned?: boolean;\n}\n\nexport type Bin = boolean | BinParams | 'binned' | null;\n\nexport type BinExtent = [number, number] | ParameterExtent;\n\n/**\n * Create a key for the bin configuration. Not for prebinned bin.\n */\nexport function binToString(bin: BinParams | true) {\n if (isBoolean(bin)) {\n bin = normalizeBin(bin, undefined);\n }\n return (\n 'bin' +\n keys(bin)\n .map(p => (isParameterExtent(bin[p]) ? varName(`_${p}_${entries(bin[p])}`) : varName(`_${p}_${bin[p]}`)))\n .join('')\n );\n}\n\n/**\n * Vega-Lite should bin the data.\n */\nexport function isBinning(bin: BinParams | boolean | 'binned'): bin is BinParams | true {\n return bin === true || (isBinParams(bin) && !bin.binned);\n}\n\n/**\n * The data is already binned and so Vega-Lite should not bin it again.\n */\nexport function isBinned(bin: BinParams | boolean | 'binned'): bin is 'binned' | BinParams {\n return bin === 'binned' || (isBinParams(bin) && bin.binned === true);\n}\n\nexport function isBinParams(bin: BinParams | boolean | 'binned'): bin is BinParams {\n return isObject(bin);\n}\n\nexport function isParameterExtent(extent: BinExtent): extent is ParameterExtent {\n return extent?.['param'];\n}\n\nexport function autoMaxBins(channel?: ExtendedChannel): number {\n switch (channel) {\n case ROW:\n case COLUMN:\n case SIZE:\n case COLOR:\n case FILL:\n case STROKE:\n case STROKEWIDTH:\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n // Facets and Size shouldn't have too many bins\n // We choose 6 like shape to simplify the rule [falls through]\n case SHAPE:\n return 6; // Vega's \"shape\" has 6 distinct values\n case STROKEDASH:\n return 4; // We only provide 5 different stroke dash values (but 4 is more effective)\n default:\n return 10;\n }\n}\n","import {signalRefOrValue} from './compile/common';\nimport {Dict, keys} from './util';\nimport {MappedExclude} from './vega.schema';\n\nexport interface ExprRef {\n /**\n * Vega expression (which can refer to Vega-Lite parameters).\n */\n expr: string;\n}\n\nexport function isExprRef(o: any): o is ExprRef {\n return o && !!o['expr'];\n}\n\nexport function replaceExprRef>(index: T) {\n const props = keys(index || {});\n const newIndex: Dict = {};\n for (const prop of props) {\n newIndex[prop] = signalRefOrValue(index[prop]);\n }\n return newIndex as MappedExclude;\n}\n","import {BaseTitle, SignalRef, Text, TextEncodeEntry, TitleAnchor} from 'vega';\nimport {isArray, isString} from 'vega-util';\nimport {ExprRef} from './expr';\nimport {MarkConfig} from './mark';\nimport {pick} from './util';\nimport {MapExcludeValueRefAndReplaceSignalWith, MappedExcludeValueRef} from './vega.schema';\n\nexport type BaseTitleNoValueRefs = MapExcludeValueRefAndReplaceSignalWith<\n Omit,\n ES\n> &\n // Since some logic depends on align/baseline, Vega-Lite does NOT allow signal for them.\n MappedExcludeValueRef>;\n\nexport type TitleConfig = BaseTitleNoValueRefs;\n\nexport interface TitleBase extends BaseTitleNoValueRefs {\n /**\n * The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title.\n *\n * __Default value:__ `\"middle\"` for [single](https://vega.github.io/vega-lite/docs/spec.html) and [layered](https://vega.github.io/vega-lite/docs/layer.html) views.\n * `\"start\"` for other composite views.\n *\n * __Note:__ [For now](https://github.com/vega/vega-lite/issues/2875), `anchor` is only customizable only for [single](https://vega.github.io/vega-lite/docs/spec.html) and [layered](https://vega.github.io/vega-lite/docs/layer.html) views. For other composite views, `anchor` is always `\"start\"`.\n */\n anchor?: TitleAnchor;\n\n /**\n * A [mark style property](https://vega.github.io/vega-lite/docs/config.html#style) to apply to the title text mark.\n *\n * __Default value:__ `\"group-title\"`.\n */\n style?: string | string[];\n\n /**\n * \tThe integer z-index indicating the layering of the title group relative to other axis, mark and legend groups.\n *\n * __Default value:__ `0`.\n *\n * @TJS-type integer\n * @minimum 0\n */\n zindex?: number;\n\n /**\n * Mark definitions for custom encoding.\n *\n * @hidden\n */\n encoding?: TextEncodeEntry;\n}\n\nexport interface TitleParams extends TitleBase {\n /**\n * The title text.\n */\n text: Text | ES;\n\n /**\n * The subtitle Text.\n */\n subtitle?: Text;\n}\n\nexport function extractTitleConfig(titleConfig: TitleConfig): {\n titleMarkConfig: MarkConfig;\n subtitleMarkConfig: MarkConfig;\n /** These are non-mark title config that need to be hardcoded in the title directive. */\n nonMarkTitleProperties: BaseTitleNoValueRefs;\n subtitle: BaseTitleNoValueRefs;\n} {\n const {\n // These are non-mark title config that need to be hardcoded\n anchor,\n frame,\n offset,\n orient,\n angle,\n limit,\n\n // color needs to be redirect to fill\n color,\n\n // subtitle properties\n subtitleColor,\n subtitleFont,\n subtitleFontSize,\n subtitleFontStyle,\n subtitleFontWeight,\n subtitleLineHeight,\n subtitlePadding,\n\n // The rest are mark config.\n ...rest\n } = titleConfig;\n\n const titleMarkConfig: MarkConfig = {\n ...rest,\n ...(color ? {fill: color} : {})\n };\n\n // These are non-mark title config that need to be hardcoded\n const nonMarkTitleProperties: BaseTitleNoValueRefs = {\n ...(anchor ? {anchor} : {}),\n ...(frame ? {frame} : {}),\n ...(offset ? {offset} : {}),\n ...(orient ? {orient} : {}),\n ...(angle !== undefined ? {angle} : {}),\n ...(limit !== undefined ? {limit} : {})\n };\n\n // subtitle part can stay in config.title since header titles do not use subtitle\n const subtitle: BaseTitleNoValueRefs = {\n ...(subtitleColor ? {subtitleColor} : {}),\n ...(subtitleFont ? {subtitleFont} : {}),\n ...(subtitleFontSize ? {subtitleFontSize} : {}),\n ...(subtitleFontStyle ? {subtitleFontStyle} : {}),\n ...(subtitleFontWeight ? {subtitleFontWeight} : {}),\n ...(subtitleLineHeight ? {subtitleLineHeight} : {}),\n ...(subtitlePadding ? {subtitlePadding} : {})\n };\n\n const subtitleMarkConfig = pick(titleConfig, ['align', 'baseline', 'dx', 'dy', 'limit']);\n\n return {titleMarkConfig, subtitleMarkConfig, nonMarkTitleProperties: nonMarkTitleProperties, subtitle};\n}\n\nexport function isText(v: any): v is Text {\n return isString(v) || (isArray(v) && isString(v[0]));\n}\n","import type {\n AggregateOp,\n BandScale,\n BaseScale,\n BinOrdinalScale,\n ColorValueRef,\n Compare as VgCompare,\n ExprRef as VgExprRef,\n GeoShapeTransform as VgGeoShapeTransform,\n IdentityScale,\n LayoutAlign,\n LinearScale,\n LogScale,\n Mark,\n MarkConfig,\n NumericValueRef,\n OrdinalScale,\n PointScale,\n PowScale,\n ProjectionType,\n QuantileScale,\n QuantizeScale,\n RangeBand,\n RangeRaw,\n RangeScheme,\n ScaleData,\n ScaleDataRef,\n ScaledValueRef,\n ScaleMultiDataRef,\n ScaleMultiFieldsRef,\n SequentialScale,\n SignalRef,\n SortField as VgSortField,\n SqrtScale,\n SymLogScale,\n ThresholdScale,\n TimeInterval,\n TimeIntervalStep,\n TimeScale,\n Title as VgTitle,\n Transforms as VgTransform,\n UnionSortField as VgUnionSortField\n} from 'vega';\nimport {isArray} from 'vega-util';\nimport {Value} from './channeldef';\nimport {ExprRef} from './expr';\nimport {SortOrder} from './sort';\nimport {Dict, Flag, keys} from './util';\n\nexport type {VgSortField, VgUnionSortField, VgCompare, VgTitle, LayoutAlign, ProjectionType, VgExprRef};\n\n// TODO: make recursive (e.g. with https://stackoverflow.com/a/64900252/214950 but needs https://github.com/vega/ts-json-schema-generator/issues/568)\nexport type MappedExclude = {\n [P in keyof T]: Exclude;\n};\n\nexport type MapExcludeAndKeepSignalAs = {\n [P in keyof T]: SignalRef extends T[P] ? Exclude | S : Exclude;\n};\n\n// Remove ValueRefs from mapped types\nexport type MappedExcludeValueRef = MappedExclude | NumericValueRef | ColorValueRef>;\n\nexport type MapExcludeValueRefAndReplaceSignalWith = MapExcludeAndKeepSignalAs<\n T,\n ScaledValueRef | NumericValueRef | ColorValueRef,\n S\n>;\n\nexport interface VgData {\n name: string;\n source?: string;\n values?: any;\n format?: {\n type?: string;\n parse?: string | Dict;\n property?: string;\n feature?: string;\n mesh?: string;\n };\n url?: string;\n transform?: VgTransform[];\n}\n\nexport type VgScaleDataRefWithSort = ScaleDataRef & {\n sort?: VgSortField;\n};\n\nexport function isSignalRef(o: any): o is SignalRef {\n return o && !!o['signal'];\n}\n\n// TODO: add type of value (Make it VgValueRef {value?:V ...})\nexport interface VgValueRef {\n value?: Value; // value should never be a signal so we use never\n field?:\n | string\n | {\n datum?: string;\n group?: string;\n parent?: string;\n };\n signal?: string;\n scale?: string; // TODO: object\n mult?: number;\n offset?: number | VgValueRef;\n band?: boolean | number | VgValueRef;\n test?: string;\n}\n\n// TODO: add vg prefix\nexport type VgScaleMultiDataRefWithSort = ScaleMultiDataRef & {\n fields: (any[] | VgScaleDataRefWithSort | SignalRef)[];\n sort?: VgUnionSortField;\n};\n\nexport type VgMultiFieldsRefWithSort = ScaleMultiFieldsRef & {\n sort?: VgUnionSortField;\n};\n\nexport type VgRange = RangeScheme | ScaleData | RangeBand | RangeRaw;\n\nexport function isVgRangeStep(range: VgRange): range is VgRangeStep {\n return !!range['step'];\n}\n\nexport interface VgRangeStep {\n step: number | SignalRef;\n}\n// Domains that are not a union of domains\nexport type VgNonUnionDomain = (null | string | number | boolean | SignalRef)[] | VgScaleDataRefWithSort | SignalRef;\n\nexport type VgDomain = BaseScale['domain'];\n\nexport type VgMarkGroup = any;\n\n/**\n * A combined type for any Vega scales that Vega-Lite can generate\n */\nexport type VgScale = Pick & {\n range?: RangeScheme | RangeBand | ScaleData; // different Vega scales have conflicting range, need to union them here\n nice?: boolean | number | TimeInterval | TimeIntervalStep | SignalRef; // different Vega scales have conflicting range, need to union them here\n zero?: boolean | SignalRef; // LogScale only allow false, making the intersection type overly strict\n} & Omit<\n // Continuous\n Omit &\n Omit &\n Omit &\n Omit, 'type'> & // use partial so exponent is not required\n Omit &\n Omit &\n Omit &\n // Discretizing\n Omit &\n Omit &\n Omit &\n Omit &\n // Sequential\n Omit &\n // Discrete\n Omit &\n Omit &\n Omit,\n 'range' | 'nice' | 'zero'\n >;\n\nexport interface RowCol {\n row?: T;\n column?: T;\n}\n\nexport interface VgLayout {\n center?: boolean | RowCol;\n padding?: number | RowCol;\n headerBand?: number | RowCol;\n footerBand?: number | RowCol;\n\n titleAnchor?: 'start' | 'end' | RowCol<'start' | 'end'>;\n offset?:\n | number\n | {\n rowHeader?: number;\n rowFooter?: number;\n rowTitle?: number;\n columnHeader?: number;\n columnFooter?: number;\n columnTitle?: number;\n };\n bounds?: 'full' | 'flush';\n columns?: number | {signal: string};\n align?: LayoutAlign | RowCol;\n}\n\nexport function isDataRefUnionedDomain(domain: VgDomain): domain is VgScaleMultiDataRefWithSort {\n if (!isArray(domain)) {\n return 'fields' in domain && !('data' in domain);\n }\n return false;\n}\n\nexport function isFieldRefUnionDomain(domain: VgDomain): domain is VgMultiFieldsRefWithSort {\n if (!isArray(domain)) {\n return 'fields' in domain && 'data' in domain;\n }\n return false;\n}\n\nexport function isDataRefDomain(domain: VgDomain | any): domain is VgScaleDataRefWithSort {\n if (!isArray(domain)) {\n return 'field' in domain && 'data' in domain;\n }\n return false;\n}\n\nexport type VgEncodeChannel =\n | 'x'\n | 'x2'\n | 'xc'\n | 'width'\n | 'y'\n | 'y2'\n | 'yc'\n | 'height'\n | 'opacity'\n | 'fill'\n | 'fillOpacity'\n | 'stroke'\n | 'strokeWidth'\n | 'strokeCap'\n | 'strokeOpacity'\n | 'strokeDash'\n | 'strokeDashOffset'\n | 'strokeMiterLimit'\n | 'strokeJoin'\n | 'strokeOffset'\n | 'strokeForeground'\n | 'cursor'\n | 'clip'\n | 'size'\n | 'shape'\n | 'path'\n | 'innerRadius'\n | 'outerRadius'\n | 'startAngle'\n | 'endAngle'\n | 'interpolate'\n | 'tension'\n | 'orient'\n | 'url'\n | 'align'\n | 'baseline'\n | 'text'\n | 'dir'\n | 'ellipsis'\n | 'limit'\n | 'dx'\n | 'dy'\n | 'radius'\n | 'theta'\n | 'angle'\n | 'font'\n | 'fontSize'\n | 'fontWeight'\n | 'fontStyle'\n | 'tooltip'\n | 'href'\n | 'cursor'\n | 'defined'\n | 'cornerRadius'\n | 'cornerRadiusTopLeft'\n | 'cornerRadiusTopRight'\n | 'cornerRadiusBottomRight'\n | 'cornerRadiusBottomLeft'\n | 'scaleX'\n | 'scaleY';\n\nexport type VgEncodeEntry = Partial>;\n\n// TODO: make export interface VgEncodeEntry {\n// x?: VgValueRef\n// y?: VgValueRef\n// ...\n// color?: VgValueRef\n// ...\n// }\n\nexport type VgPostEncodingTransform = VgGeoShapeTransform;\n\nconst VG_MARK_CONFIG_INDEX: Flag = {\n aria: 1,\n description: 1,\n ariaRole: 1,\n ariaRoleDescription: 1,\n blend: 1,\n opacity: 1,\n fill: 1,\n fillOpacity: 1,\n stroke: 1,\n strokeCap: 1,\n strokeWidth: 1,\n strokeOpacity: 1,\n strokeDash: 1,\n strokeDashOffset: 1,\n strokeJoin: 1,\n strokeOffset: 1,\n strokeMiterLimit: 1,\n startAngle: 1,\n endAngle: 1,\n padAngle: 1,\n innerRadius: 1,\n outerRadius: 1,\n size: 1,\n shape: 1,\n interpolate: 1,\n tension: 1,\n orient: 1,\n align: 1,\n baseline: 1,\n text: 1,\n dir: 1,\n dx: 1,\n dy: 1,\n ellipsis: 1,\n limit: 1,\n radius: 1,\n theta: 1,\n angle: 1,\n font: 1,\n fontSize: 1,\n fontWeight: 1,\n fontStyle: 1,\n lineBreak: 1,\n lineHeight: 1,\n cursor: 1,\n href: 1,\n tooltip: 1,\n cornerRadius: 1,\n cornerRadiusTopLeft: 1,\n cornerRadiusTopRight: 1,\n cornerRadiusBottomLeft: 1,\n cornerRadiusBottomRight: 1,\n aspect: 1,\n width: 1,\n height: 1,\n url: 1,\n smooth: 1\n\n // commented below are vg channel that do not have mark config.\n // x: 1,\n // y: 1,\n // x2: 1,\n // y2: 1,\n\n // xc'|'yc'\n // clip: 1,\n // path: 1,\n // url: 1,\n};\n\nexport const VG_MARK_CONFIGS = keys(VG_MARK_CONFIG_INDEX);\n\nexport const VG_MARK_INDEX: Flag = {\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n};\n\n// Vega's cornerRadius channels.\nexport const VG_CORNERRADIUS_CHANNELS = [\n 'cornerRadius',\n 'cornerRadiusTopLeft',\n 'cornerRadiusTopRight',\n 'cornerRadiusBottomLeft',\n 'cornerRadiusBottomRight'\n] as const;\n\nexport interface VgComparator {\n field?: string | string[];\n order?: SortOrder | SortOrder[];\n}\n\nexport interface VgJoinAggregateTransform {\n type: 'joinaggregate';\n as?: string[];\n ops?: AggregateOp[];\n fields?: string[];\n groupby?: string[];\n}\n","import {ExprRef, SignalRef, Text} from 'vega';\nimport {array, isArray, stringValue} from 'vega-util';\nimport {AxisConfig, ConditionalAxisProperty} from '../axis';\nimport {\n ConditionalPredicate,\n DatumDef,\n FieldDef,\n FieldDefBase,\n FieldRefOption,\n OrderFieldDef,\n Value,\n ValueDef,\n vgField\n} from '../channeldef';\nimport {Config, StyleConfigIndex} from '../config';\nimport {isExprRef} from '../expr';\nimport {Mark, MarkConfig, MarkDef} from '../mark';\nimport {SortFields} from '../sort';\nimport {isText} from '../title';\nimport {deepEqual, getFirstDefined} from '../util';\nimport {isSignalRef, VgEncodeChannel, VgEncodeEntry, VgValueRef} from '../vega.schema';\nimport {AxisComponentProps} from './axis/component';\nimport {Explicit} from './split';\nimport {UnitModel} from './unit';\n\nexport const BIN_RANGE_DELIMITER = ' \\u2013 ';\n\nexport function signalOrValueRefWithCondition(\n val: ConditionalAxisProperty\n): ConditionalAxisProperty {\n const condition = isArray(val.condition)\n ? (val.condition as ConditionalPredicate | ExprRef | SignalRef>[]).map(conditionalSignalRefOrValue)\n : conditionalSignalRefOrValue(val.condition);\n\n return {\n ...signalRefOrValue>(val),\n condition\n };\n}\n\nexport function signalRefOrValue(value: T | SignalRef | ExprRef): T | SignalRef {\n if (isExprRef(value)) {\n const {expr, ...rest} = value;\n return {signal: expr, ...rest};\n }\n return value;\n}\n\nexport function conditionalSignalRefOrValue | DatumDef | ValueDef>(\n value: ConditionalPredicate\n): ConditionalPredicate {\n if (isExprRef(value)) {\n const {expr, ...rest} = value;\n return {signal: expr, ...rest};\n }\n return value;\n}\n\nexport function signalOrValueRef(value: T | SignalRef | ExprRef): {value: T} | SignalRef {\n if (isExprRef(value)) {\n const {expr, ...rest} = value;\n return {signal: expr, ...rest};\n }\n if (isSignalRef(value)) {\n return value;\n }\n return value !== undefined ? {value} : undefined;\n}\n\nexport function exprFromValueOrSignalRef(ref: VgValueRef | SignalRef): string {\n if (isSignalRef(ref)) {\n return ref.signal;\n }\n return stringValue(ref.value);\n}\n\nexport function signalOrStringValue(v: SignalRef | any) {\n if (isSignalRef(v)) {\n return v.signal;\n }\n return v == null ? null : stringValue(v);\n}\n\nexport function applyMarkConfig(e: VgEncodeEntry, model: UnitModel, propsList: (keyof MarkConfig)[]) {\n for (const property of propsList) {\n const value = getMarkConfig(property, model.markDef, model.config);\n if (value !== undefined) {\n e[property] = signalOrValueRef(value);\n }\n }\n return e;\n}\n\nexport function getStyles(mark: MarkDef): string[] {\n return [].concat(mark.type, mark.style ?? []);\n}\n\nexport function getMarkPropOrConfig

(\n channel: P,\n mark: MarkDef,\n config: Config,\n opt: {\n vgChannel?: VgEncodeChannel;\n ignoreVgConfig?: boolean;\n } = {}\n): MarkDef[P] {\n const {vgChannel, ignoreVgConfig} = opt;\n if (vgChannel && mark[vgChannel] !== undefined) {\n return mark[vgChannel];\n } else if (mark[channel] !== undefined) {\n return mark[channel];\n } else if (ignoreVgConfig && (!vgChannel || vgChannel === channel)) {\n return undefined;\n }\n\n return getMarkConfig(channel, mark, config, opt);\n}\n\n/**\n * Return property value from style or mark specific config property if exists.\n * Otherwise, return general mark specific config.\n */\nexport function getMarkConfig

(\n channel: P,\n mark: MarkDef,\n config: Config,\n {vgChannel}: {vgChannel?: VgEncodeChannel} = {}\n): MarkDef[P] {\n return getFirstDefined[P]>(\n // style config has highest precedence\n vgChannel ? getMarkStyleConfig(channel, mark, config.style) : undefined,\n getMarkStyleConfig(channel, mark, config.style),\n // then mark-specific config\n vgChannel ? config[mark.type][vgChannel] : undefined,\n\n config[mark.type][channel as any], // Need to cast because MarkDef doesn't perfectly match with AnyMarkConfig, but if the type isn't available, we'll get nothing here, which is fine\n\n // If there is vgChannel, skip vl channel.\n // For example, vl size for text is vg fontSize, but config.mark.size is only for point size.\n vgChannel ? config.mark[vgChannel] : config.mark[channel as any] // Need to cast for the same reason as above\n );\n}\n\nexport function getMarkStyleConfig

(\n prop: P,\n mark: MarkDef,\n styleConfigIndex: StyleConfigIndex\n) {\n return getStyleConfig(prop, getStyles(mark), styleConfigIndex);\n}\n\nexport function getStyleConfig

>(\n p: P,\n styles: string | string[],\n styleConfigIndex: StyleConfigIndex\n) {\n styles = array(styles);\n let value;\n for (const style of styles) {\n const styleConfig = styleConfigIndex[style];\n\n if (styleConfig && styleConfig[p as string] !== undefined) {\n value = styleConfig[p as string];\n }\n }\n return value;\n}\n\n/**\n * Return Vega sort parameters (tuple of field and order).\n */\nexport function sortParams(\n orderDef: OrderFieldDef | OrderFieldDef[],\n fieldRefOption?: FieldRefOption\n): SortFields {\n return array(orderDef).reduce(\n (s, orderChannelDef) => {\n s.field.push(vgField(orderChannelDef, fieldRefOption));\n s.order.push(orderChannelDef.sort ?? 'ascending');\n return s;\n },\n {field: [], order: []}\n );\n}\n\nexport type AxisTitleComponent = AxisComponentProps['title'];\n\nexport function mergeTitleFieldDefs(f1: readonly FieldDefBase[], f2: readonly FieldDefBase[]) {\n const merged = [...f1];\n\n f2.forEach(fdToMerge => {\n for (const fieldDef1 of merged) {\n // If already exists, no need to append to merged array\n if (deepEqual(fieldDef1, fdToMerge)) {\n return;\n }\n }\n merged.push(fdToMerge);\n });\n return merged;\n}\n\nexport function mergeTitle(title1: Text | SignalRef, title2: Text | SignalRef) {\n if (deepEqual(title1, title2) || !title2) {\n // if titles are the same or title2 is falsy\n return title1;\n } else if (!title1) {\n // if title1 is falsy\n return title2;\n } else {\n return [...array(title1), ...array(title2)].join(', ');\n }\n}\n\nexport function mergeTitleComponent(v1: Explicit, v2: Explicit) {\n const v1Val = v1.value;\n const v2Val = v2.value;\n\n if (v1Val == null || v2Val === null) {\n return {\n explicit: v1.explicit,\n value: null\n };\n } else if ((isText(v1Val) || isSignalRef(v1Val)) && (isText(v2Val) || isSignalRef(v2Val))) {\n return {\n explicit: v1.explicit,\n value: mergeTitle(v1Val, v2Val)\n };\n } else if (isText(v1Val) || isSignalRef(v1Val)) {\n return {\n explicit: v1.explicit,\n value: v1Val\n };\n } else if (isText(v2Val) || isSignalRef(v2Val)) {\n return {\n explicit: v1.explicit,\n value: v2Val\n };\n } else if (!isText(v1Val) && !isSignalRef(v1Val) && !isText(v2Val) && !isSignalRef(v2Val)) {\n return {\n explicit: v1.explicit,\n value: mergeTitleFieldDefs(v1Val, v2Val)\n };\n }\n /* istanbul ignore next: Condition should not happen -- only for warning in development. */\n throw new Error('It should never reach here');\n}\n","/**\n * Collection of all Vega-Lite Error Messages\n */\nimport {AggregateOp, SignalRef} from 'vega';\nimport {Aggregate} from '../aggregate';\nimport {Channel, ExtendedChannel, FacetChannel, getSizeChannel, PositionScaleChannel, ScaleChannel} from '../channel';\nimport {HiddenCompositeAggregate, TypedFieldDef, Value} from '../channeldef';\nimport {SplitParentProperty} from '../compile/split';\nimport {CompositeMark} from '../compositemark';\nimport {ErrorBarCenter, ErrorBarExtent} from '../compositemark/errorbar';\nimport {DateTime, DateTimeExpr} from '../datetime';\nimport {ExprRef} from '../expr';\nimport {Mark} from '../mark';\nimport {Projection} from '../projection';\nimport {ScaleType} from '../scale';\nimport {GenericSpec} from '../spec';\nimport {Type} from '../type';\nimport {stringify} from '../util';\nimport {VgSortField} from '../vega.schema';\n\nexport function invalidSpec(spec: GenericSpec) {\n return `Invalid specification ${stringify(\n spec\n )}. Make sure the specification includes at least one of the following properties: \"mark\", \"layer\", \"facet\", \"hconcat\", \"vconcat\", \"concat\", or \"repeat\".`;\n}\n\n// FIT\nexport const FIT_NON_SINGLE = 'Autosize \"fit\" only works for single views and layered views.';\n\nexport function containerSizeNonSingle(name: 'width' | 'height') {\n const uName = name == 'width' ? 'Width' : 'Height';\n return `${uName} \"container\" only works for single views and layered views.`;\n}\n\nexport function containerSizeNotCompatibleWithAutosize(name: 'width' | 'height') {\n const uName = name == 'width' ? 'Width' : 'Height';\n const fitDirection = name == 'width' ? 'x' : 'y';\n return `${uName} \"container\" only works well with autosize \"fit\" or \"fit-${fitDirection}\".`;\n}\n\nexport function droppingFit(channel?: PositionScaleChannel) {\n return channel\n ? `Dropping \"fit-${channel}\" because spec has discrete ${getSizeChannel(channel)}.`\n : `Dropping \"fit\" because spec has discrete size.`;\n}\n\n// VIEW SIZE\n\nexport function unknownField(channel: Channel) {\n return `Unknown field for ${channel}. Cannot calculate view size.`;\n}\n\n// SELECTION\nexport function cannotProjectOnChannelWithoutField(channel: Channel) {\n return `Cannot project a selection on encoding channel \"${channel}\", which has no field.`;\n}\n\nexport function cannotProjectAggregate(channel: Channel, aggregate: Aggregate | HiddenCompositeAggregate) {\n return `Cannot project a selection on encoding channel \"${channel}\" as it uses an aggregate function (\"${aggregate}\").`;\n}\n\nexport function nearestNotSupportForContinuous(mark: string) {\n return `The \"nearest\" transform is not supported for ${mark} marks.`;\n}\n\nexport function selectionNotSupported(mark: CompositeMark) {\n return `Selection not supported for ${mark} yet.`;\n}\n\nexport function selectionNotFound(name: string) {\n return `Cannot find a selection named \"${name}\".`;\n}\n\nexport const SCALE_BINDINGS_CONTINUOUS =\n 'Scale bindings are currently only supported for scales with unbinned, continuous domains.';\n\nexport const LEGEND_BINDINGS_MUST_HAVE_PROJECTION =\n 'Legend bindings are only supported for selections over an individual field or encoding channel.';\nexport function cannotLookupVariableParameter(name: string) {\n return `Lookups can only be performed on selection parameters. \"${name}\" is a variable parameter.`;\n}\n\nexport function noSameUnitLookup(name: string) {\n return (\n `Cannot define and lookup the \"${name}\" selection in the same view. ` +\n `Try moving the lookup into a second, layered view?`\n );\n}\n\nexport const NEEDS_SAME_SELECTION = 'The same selection must be used to override scale domains in a layered view.';\n\nexport const INTERVAL_INITIALIZED_WITH_X_Y = 'Interval selections should be initialized using \"x\" and/or \"y\" keys.';\n\n// REPEAT\nexport function noSuchRepeatedValue(field: string) {\n return `Unknown repeated value \"${field}\".`;\n}\n\nexport function columnsNotSupportByRowCol(type: 'facet' | 'repeat') {\n return `The \"columns\" property cannot be used when \"${type}\" has nested row/column.`;\n}\n\n// CONCAT / REPEAT\nexport const CONCAT_CANNOT_SHARE_AXIS =\n 'Axes cannot be shared in concatenated or repeated views yet (https://github.com/vega/vega-lite/issues/2415).';\n\n// DATA\nexport function unrecognizedParse(p: string) {\n return `Unrecognized parse \"${p}\".`;\n}\n\nexport function differentParse(field: string, local: string, ancestor: string) {\n return `An ancestor parsed field \"${field}\" as ${ancestor} but a child wants to parse the field as ${local}.`;\n}\n\nexport const ADD_SAME_CHILD_TWICE = 'Attempt to add the same child twice.';\n\n// TRANSFORMS\nexport function invalidTransformIgnored(transform: any) {\n return `Ignoring an invalid transform: ${stringify(transform)}.`;\n}\n\nexport const NO_FIELDS_NEEDS_AS =\n 'If \"from.fields\" is not specified, \"as\" has to be a string that specifies the key to be used for the data from the secondary source.';\n\n// ENCODING & FACET\n\nexport function customFormatTypeNotAllowed(channel: ExtendedChannel) {\n return `Config.customFormatTypes is not true, thus custom format type and format for channel ${channel} are dropped.`;\n}\n\nexport function projectionOverridden(opt: {\n parentProjection: Projection;\n projection: Projection;\n}) {\n const {parentProjection, projection} = opt;\n return `Layer's shared projection ${stringify(parentProjection)} is overridden by a child projection ${stringify(\n projection\n )}.`;\n}\n\nexport const REPLACE_ANGLE_WITH_THETA = 'Arc marks uses theta channel rather than angle, replacing angle with theta.';\n\nexport function primitiveChannelDef(\n channel: ExtendedChannel,\n type: 'string' | 'number' | 'boolean',\n value: Exclude\n) {\n return `Channel ${channel} is a ${type}. Converted to {value: ${stringify(value)}}.`;\n}\n\nexport function invalidFieldType(type: Type) {\n return `Invalid field type \"${type}\".`;\n}\n\nexport function invalidFieldTypeForCountAggregate(type: Type, aggregate: Aggregate | string) {\n return `Invalid field type \"${type}\" for aggregate: \"${aggregate}\", using \"quantitative\" instead.`;\n}\n\nexport function invalidAggregate(aggregate: AggregateOp | string) {\n return `Invalid aggregation operator \"${aggregate}\".`;\n}\n\nexport function missingFieldType(channel: Channel, newType: Type) {\n return `Missing type for channel \"${channel}\", using \"${newType}\" instead.`;\n}\nexport function droppingColor(type: 'encoding' | 'property', opt: {fill?: boolean; stroke?: boolean}) {\n const {fill, stroke} = opt;\n return `Dropping color ${type} as the plot also has ${\n fill && stroke ? 'fill and stroke' : fill ? 'fill' : 'stroke'\n }.`;\n}\n\nexport function relativeBandSizeNotSupported(sizeChannel: 'width' | 'height') {\n return `Position range does not support relative band size for ${sizeChannel}.`;\n}\n\nexport function emptyFieldDef(fieldDef: unknown, channel: ExtendedChannel) {\n return `Dropping ${stringify(\n fieldDef\n )} from channel \"${channel}\" since it does not contain any data field, datum, value, or signal.`;\n}\n\nexport const LINE_WITH_VARYING_SIZE =\n 'Line marks cannot encode size with a non-groupby field. You may want to use trail marks instead.';\n\nexport function incompatibleChannel(\n channel: ExtendedChannel,\n markOrFacet: Mark | 'facet' | CompositeMark,\n when?: string\n) {\n return `${channel} dropped as it is incompatible with \"${markOrFacet}\"${when ? ` when ${when}` : ''}.`;\n}\n\nexport function invalidEncodingChannel(channel: ExtendedChannel) {\n return `${channel}-encoding is dropped as ${channel} is not a valid encoding channel.`;\n}\n\nexport function channelShouldBeDiscrete(channel: ExtendedChannel) {\n return `${channel} encoding should be discrete (ordinal / nominal / binned).`;\n}\n\nexport function channelShouldBeDiscreteOrDiscretizing(channel: ExtendedChannel) {\n return `${channel} encoding should be discrete (ordinal / nominal / binned) or use a discretizing scale (e.g. threshold).`;\n}\n\nexport function facetChannelDropped(channels: FacetChannel[]) {\n return `Facet encoding dropped as ${channels.join(' and ')} ${channels.length > 1 ? 'are' : 'is'} also specified.`;\n}\n\nexport function discreteChannelCannotEncode(channel: Channel, type: Type) {\n return `Using discrete channel \"${channel}\" to encode \"${type}\" field can be misleading as it does not encode ${\n type === 'ordinal' ? 'order' : 'magnitude'\n }.`;\n}\n\n// MARK\n\nexport function rangeMarkAlignmentCannotBeExpression(align: 'align' | 'baseline') {\n return `The ${align} for range marks cannot be an expression`;\n}\n\nexport function lineWithRange(hasX2: boolean, hasY2: boolean) {\n const channels = hasX2 && hasY2 ? 'x2 and y2' : hasX2 ? 'x2' : 'y2';\n return `Line mark is for continuous lines and thus cannot be used with ${channels}. We will use the rule mark (line segments) instead.`;\n}\n\nexport function orientOverridden(original: string, actual: string) {\n return `Specified orient \"${original}\" overridden with \"${actual}\".`;\n}\n\n// SCALE\nexport const CANNOT_UNION_CUSTOM_DOMAIN_WITH_FIELD_DOMAIN =\n 'Custom domain scale cannot be unioned with default field-based domain.';\n\nexport function cannotUseScalePropertyWithNonColor(prop: string) {\n return `Cannot use the scale property \"${prop}\" with non-color channel.`;\n}\n\nexport function cannotUseRelativeBandSizeWithNonBandScale(scaleType: ScaleType) {\n return `Cannot use the relative band size with ${scaleType} scale.`;\n}\n\nexport function unaggregateDomainHasNoEffectForRawField(fieldDef: TypedFieldDef) {\n return `Using unaggregated domain with raw field has no effect (${stringify(fieldDef)}).`;\n}\n\nexport function unaggregateDomainWithNonSharedDomainOp(aggregate: Aggregate | string) {\n return `Unaggregated domain not applicable for \"${aggregate}\" since it produces values outside the origin domain of the source data.`;\n}\n\nexport function unaggregatedDomainWithLogScale(fieldDef: TypedFieldDef) {\n return `Unaggregated domain is currently unsupported for log scale (${stringify(fieldDef)}).`;\n}\n\nexport function cannotApplySizeToNonOrientedMark(mark: Mark) {\n return `Cannot apply size to non-oriented mark \"${mark}\".`;\n}\n\nexport function scaleTypeNotWorkWithChannel(channel: Channel, scaleType: ScaleType, defaultScaleType: ScaleType) {\n return `Channel \"${channel}\" does not work with \"${scaleType}\" scale. We are using \"${defaultScaleType}\" scale instead.`;\n}\n\nexport function scaleTypeNotWorkWithFieldDef(scaleType: ScaleType, defaultScaleType: ScaleType) {\n return `FieldDef does not work with \"${scaleType}\" scale. We are using \"${defaultScaleType}\" scale instead.`;\n}\n\nexport function scalePropertyNotWorkWithScaleType(scaleType: ScaleType, propName: string, channel: Channel) {\n return `${channel}-scale's \"${propName}\" is dropped as it does not work with ${scaleType} scale.`;\n}\n\nexport function scaleTypeNotWorkWithMark(mark: Mark, scaleType: ScaleType) {\n return `Scale type \"${scaleType}\" does not work with mark \"${mark}\".`;\n}\n\nexport function stepDropped(channel: 'width' | 'height') {\n return `The step for \"${channel}\" is dropped because the ${channel === 'width' ? 'x' : 'y'} is continuous.`;\n}\n\nexport function mergeConflictingProperty(\n property: string | number | symbol,\n propertyOf: SplitParentProperty,\n v1: T,\n v2: T\n) {\n return `Conflicting ${propertyOf.toString()} property \"${property.toString()}\" (${stringify(v1)} and ${stringify(\n v2\n )}). Using ${stringify(v1)}.`;\n}\n\nexport function mergeConflictingDomainProperty(property: 'domains', propertyOf: SplitParentProperty, v1: T, v2: T) {\n return `Conflicting ${propertyOf.toString()} property \"${property.toString()}\" (${stringify(v1)} and ${stringify(\n v2\n )}). Using the union of the two domains.`;\n}\n\nexport function independentScaleMeansIndependentGuide(channel: Channel) {\n return `Setting the scale to be independent for \"${channel}\" means we also have to set the guide (axis or legend) to be independent.`;\n}\n\nexport function domainSortDropped(sort: VgSortField) {\n return `Dropping sort property ${stringify(\n sort\n )} as unioned domains only support boolean or op \"count\", \"min\", and \"max\".`;\n}\n\nexport const MORE_THAN_ONE_SORT =\n 'Domains that should be unioned has conflicting sort properties. Sort will be set to true.';\n\nexport const FACETED_INDEPENDENT_DIFFERENT_SOURCES =\n 'Detected faceted independent scales that union domain of multiple fields from different data sources. We will use the first field. The result view size may be incorrect.';\n\nexport const FACETED_INDEPENDENT_SAME_FIELDS_DIFFERENT_SOURCES =\n 'Detected faceted independent scales that union domain of the same fields from different source. We will assume that this is the same field from a different fork of the same data source. However, if this is not the case, the result view size may be incorrect.';\n\nexport const FACETED_INDEPENDENT_SAME_SOURCE =\n 'Detected faceted independent scales that union domain of multiple fields from the same data source. We will use the first field. The result view size may be incorrect.';\n\n// AXIS\nexport const INVALID_CHANNEL_FOR_AXIS = 'Invalid channel for axis.';\n\n// STACK\nexport function cannotStackRangedMark(channel: Channel) {\n return `Cannot stack \"${channel}\" if there is already \"${channel}2\".`;\n}\n\nexport function cannotStackNonLinearScale(scaleType: ScaleType) {\n return `Cannot stack non-linear scale (${scaleType}).`;\n}\n\nexport function stackNonSummativeAggregate(aggregate: Aggregate | string) {\n return `Stacking is applied even though the aggregate function is non-summative (\"${aggregate}\").`;\n}\n\n// TIMEUNIT\nexport function invalidTimeUnit(unitName: string, value: string | number) {\n return `Invalid ${unitName}: ${stringify(value)}.`;\n}\n\nexport function droppedDay(d: DateTime | DateTimeExpr) {\n return `Dropping day from datetime ${stringify(d)} as day cannot be combined with other units.`;\n}\n\nexport function errorBarCenterAndExtentAreNotNeeded(center: ErrorBarCenter, extent: ErrorBarExtent) {\n return `${extent ? 'extent ' : ''}${extent && center ? 'and ' : ''}${center ? 'center ' : ''}${\n extent && center ? 'are ' : 'is '\n }not needed when data are aggregated.`;\n}\n\nexport function errorBarCenterIsUsedWithWrongExtent(\n center: ErrorBarCenter,\n extent: ErrorBarExtent,\n mark: 'errorbar' | 'errorband'\n) {\n return `${center} is not usually used with ${extent} for ${mark}.`;\n}\n\nexport function errorBarContinuousAxisHasCustomizedAggregate(\n aggregate: Aggregate | string,\n compositeMark: CompositeMark\n) {\n return `Continuous axis should not have customized aggregation function ${aggregate}; ${compositeMark} already agregates the axis.`;\n}\n\nexport function errorBand1DNotSupport(property: 'interpolate' | 'tension') {\n return `1D error band does not support ${property}.`;\n}\n\n// CHANNEL\nexport function channelRequiredForBinned(channel: Channel) {\n return `Channel ${channel} is required for \"binned\" bin.`;\n}\n\nexport function channelShouldNotBeUsedForBinned(channel: ExtendedChannel) {\n return `Channel ${channel} should not be used with \"binned\" bin.`;\n}\n\nexport function domainRequiredForThresholdScale(channel: ScaleChannel) {\n return `Domain for ${channel} is required for threshold scale.`;\n}\n","/**\n * Vega-Lite's singleton logger utility.\n */\n\nimport {Debug, Error as ErrorLevel, Info, logger, LoggerInterface, Warn} from 'vega-util';\nexport * as message from './message';\n\n/**\n * Main (default) Vega Logger instance for Vega-Lite.\n */\nconst main = logger(Warn);\nlet current: LoggerInterface = main;\n\n/**\n * Logger tool for checking if the code throws correct warning.\n */\nexport class LocalLogger implements LoggerInterface {\n public warns: any[] = [];\n public infos: any[] = [];\n public debugs: any[] = [];\n\n #level: number = Warn;\n\n public level(): number;\n public level(_: number): this;\n public level(_?: number) {\n if (_) {\n this.#level = _;\n return this;\n }\n return this.#level;\n }\n\n public warn(...args: readonly any[]) {\n if (this.#level >= Warn) this.warns.push(...args);\n return this;\n }\n\n public info(...args: readonly any[]) {\n if (this.#level >= Info) this.infos.push(...args);\n return this;\n }\n\n public debug(...args: readonly any[]) {\n if (this.#level >= Debug) this.debugs.push(...args);\n return this;\n }\n\n public error(...args: readonly any[]): this {\n if (this.#level >= ErrorLevel) throw Error(...args);\n return this;\n }\n}\n\nexport function wrap(f: (logger: LocalLogger) => void) {\n return () => {\n current = new LocalLogger();\n f(current as LocalLogger);\n reset();\n };\n}\n\n/**\n * Set the singleton logger to be a custom logger.\n */\nexport function set(newLogger: LoggerInterface) {\n current = newLogger;\n return current;\n}\n\n/**\n * Reset the main logger to use the default Vega Logger.\n */\nexport function reset() {\n current = main;\n return current;\n}\n\nexport function error(...args: readonly any[]) {\n current.error(...args);\n}\n\nexport function warn(...args: readonly any[]) {\n current.warn(...args);\n}\n\nexport function info(...args: readonly any[]) {\n current.info(...args);\n}\n\nexport function debug(...args: readonly any[]) {\n current.debug(...args);\n}\n","// DateTime definition object\n\nimport {isNumber, isObject} from 'vega-util';\nimport * as log from './log';\nimport {TIMEUNIT_PARTS} from './timeunit';\nimport {duplicate, isNumeric, keys} from './util';\n\n/**\n * @minimum 1\n * @maximum 12\n * @TJS-type integer\n */\nexport type Month = number;\n\n/**\n * @minimum 1\n * @maximum 7\n */\nexport type Day = number;\n\n/**\n * Object for defining datetime in Vega-Lite Filter.\n * If both month and quarter are provided, month has higher precedence.\n * `day` cannot be combined with other date.\n * We accept string for month and day names.\n */\nexport interface DateTime {\n /**\n * Integer value representing the year.\n * @TJS-type integer\n */\n year?: number;\n\n /**\n * Integer value representing the quarter of the year (from 1-4).\n * @minimum 1\n * @maximum 4\n * @TJS-type integer\n */\n quarter?: number;\n\n /**\n * One of:\n * (1) integer value representing the month from `1`-`12`. `1` represents January;\n * (2) case-insensitive month name (e.g., `\"January\"`);\n * (3) case-insensitive, 3-character short month name (e.g., `\"Jan\"`).\n */\n month?: Month | string;\n\n /**\n * Integer value representing the date (day of the month) from 1-31.\n * @minimum 1\n * @maximum 31\n * @TJS-type integer\n */\n date?: number;\n\n /**\n * Value representing the day of a week. This can be one of:\n * (1) integer value -- `1` represents Monday;\n * (2) case-insensitive day name (e.g., `\"Monday\"`);\n * (3) case-insensitive, 3-character short day name (e.g., `\"Mon\"`).\n *\n * **Warning:** A DateTime definition object with `day`** should not be combined with `year`, `quarter`, `month`, or `date`.\n */\n day?: Day | string;\n\n /**\n * Integer value representing the hour of a day from 0-23.\n * @minimum 0\n * @maximum 24\n * @TJS-type integer\n */\n hours?: number;\n\n /**\n * Integer value representing the minute segment of time from 0-59.\n * @minimum 0\n * @maximum 60\n * @TJS-type integer\n */\n minutes?: number;\n\n /**\n * Integer value representing the second segment (0-59) of a time value\n * @minimum 0\n * @maximum 60\n * @TJS-type integer\n */\n seconds?: number;\n\n /**\n * Integer value representing the millisecond segment of time.\n * @minimum 0\n * @maximum 1000\n * @TJS-type integer\n */\n milliseconds?: number;\n\n /**\n * A boolean flag indicating if date time is in utc time. If false, the date time is in local time\n */\n utc?: boolean;\n}\n\n/**\n * Internal Object for defining datetime expressions.\n * This is an expression version of DateTime.\n * If both month and quarter are provided, month has higher precedence.\n * `day` cannot be combined with other date.\n */\nexport interface DateTimeExpr {\n year?: string;\n quarter?: string;\n month?: string;\n date?: string;\n day?: string;\n hours?: string;\n minutes?: string;\n seconds?: string;\n milliseconds?: string;\n utc?: boolean;\n}\n\nexport function isDateTime(o: any): o is DateTime {\n if (o && isObject(o)) {\n for (const part of TIMEUNIT_PARTS) {\n if (part in o) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport const MONTHS = [\n 'january',\n 'february',\n 'march',\n 'april',\n 'may',\n 'june',\n 'july',\n 'august',\n 'september',\n 'october',\n 'november',\n 'december'\n];\nexport const SHORT_MONTHS = MONTHS.map(m => m.substr(0, 3));\n\nexport const DAYS = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];\nexport const SHORT_DAYS = DAYS.map(d => d.substr(0, 3));\n\nfunction normalizeQuarter(q: number | string): number {\n if (isNumeric(q)) {\n q = +q;\n }\n\n if (isNumber(q)) {\n if (q > 4) {\n log.warn(log.message.invalidTimeUnit('quarter', q));\n }\n // We accept 1-based quarter, so need to readjust to 0-based quarter\n return q - 1;\n } else {\n // Invalid quarter\n throw new Error(log.message.invalidTimeUnit('quarter', q));\n }\n}\n\nfunction normalizeMonth(m: string | number): number {\n if (isNumeric(m)) {\n m = +m;\n }\n\n if (isNumber(m)) {\n // We accept 1-based month, so need to readjust to 0-based month\n return m - 1;\n } else {\n const lowerM = m.toLowerCase();\n const monthIndex = MONTHS.indexOf(lowerM);\n if (monthIndex !== -1) {\n return monthIndex; // 0 for january, ...\n }\n const shortM = lowerM.substr(0, 3);\n const shortMonthIndex = SHORT_MONTHS.indexOf(shortM);\n if (shortMonthIndex !== -1) {\n return shortMonthIndex;\n }\n\n // Invalid month\n throw new Error(log.message.invalidTimeUnit('month', m));\n }\n}\n\nfunction normalizeDay(d: string | number): number {\n if (isNumeric(d)) {\n d = +d;\n }\n\n if (isNumber(d)) {\n // mod so that this can be both 0-based where 0 = sunday\n // and 1-based where 7=sunday\n return d % 7;\n } else {\n const lowerD = d.toLowerCase();\n const dayIndex = DAYS.indexOf(lowerD);\n if (dayIndex !== -1) {\n return dayIndex; // 0 for january, ...\n }\n const shortD = lowerD.substr(0, 3);\n const shortDayIndex = SHORT_DAYS.indexOf(shortD);\n if (shortDayIndex !== -1) {\n return shortDayIndex;\n }\n // Invalid day\n throw new Error(log.message.invalidTimeUnit('day', d));\n }\n}\n\n/**\n * @param d the date.\n * @param normalize whether to normalize quarter, month, day. This should probably be true if d is a DateTime.\n * @returns array of date time parts [year, month, day, hours, minutes, seconds, milliseconds]\n */\nfunction dateTimeParts(d: DateTime | DateTimeExpr, normalize: boolean) {\n const parts: (string | number)[] = [];\n\n if (normalize && d.day !== undefined) {\n if (keys(d).length > 1) {\n log.warn(log.message.droppedDay(d));\n d = duplicate(d);\n delete d.day;\n }\n }\n\n if (d.year !== undefined) {\n parts.push(d.year);\n } else {\n // Just like Vega's timeunit transform, set default year to 2012, so domain conversion will be compatible with Vega\n // Note: 2012 is a leap year (and so the date February 29 is respected) that begins on a Sunday (and so days of the week will order properly at the beginning of the year).\n parts.push(2012);\n }\n\n if (d.month !== undefined) {\n const month = normalize ? normalizeMonth(d.month) : d.month;\n parts.push(month);\n } else if (d.quarter !== undefined) {\n const quarter = normalize ? normalizeQuarter(d.quarter) : d.quarter;\n parts.push(isNumber(quarter) ? quarter * 3 : `${quarter}*3`);\n } else {\n parts.push(0); // months start at zero in JS\n }\n\n if (d.date !== undefined) {\n parts.push(d.date);\n } else if (d.day !== undefined) {\n // HACK: Day only works as a standalone unit\n // This is only correct because we always set year to 2006 for day\n const day = normalize ? normalizeDay(d.day) : d.day;\n parts.push(isNumber(day) ? day + 1 : `${day}+1`);\n } else {\n parts.push(1); // Date starts at 1 in JS\n }\n\n // Note: can't use TimeUnit enum here as importing it will create\n // circular dependency problem!\n for (const timeUnit of ['hours', 'minutes', 'seconds', 'milliseconds'] as const) {\n const unit = d[timeUnit];\n parts.push(typeof unit === 'undefined' ? 0 : unit);\n }\n\n return parts;\n}\n\n/**\n * Return Vega expression for a date time.\n *\n * @param d the date time.\n * @returns the Vega expression.\n */\nexport function dateTimeToExpr(d: DateTime) {\n const parts: (string | number)[] = dateTimeParts(d, true);\n\n const string = parts.join(', ');\n\n if (d.utc) {\n return `utc(${string})`;\n } else {\n return `datetime(${string})`;\n }\n}\n\n/**\n * Return Vega expression for a date time expression.\n *\n * @param d the internal date time object with expression.\n * @returns the Vega expression.\n */\nexport function dateTimeExprToExpr(d: DateTimeExpr) {\n const parts: (string | number)[] = dateTimeParts(d, false);\n\n const string = parts.join(', ');\n\n if (d.utc) {\n return `utc(${string})`;\n } else {\n return `datetime(${string})`;\n }\n}\n\n/**\n * @param d the date time.\n * @returns the timestamp.\n */\nexport function dateTimeToTimestamp(d: DateTime) {\n const parts: (string | number)[] = dateTimeParts(d, true);\n\n if (d.utc) {\n return +new Date(Date.UTC(...(parts as [any, any])));\n } else {\n return +new Date(...(parts as [any]));\n }\n}\n","import {isObject, isString} from 'vega-util';\nimport {DateTimeExpr, dateTimeExprToExpr} from './datetime';\nimport {accessPathWithDatum, keys, stringify, varName} from './util';\n\n/** Time Unit that only corresponds to only one part of Date objects. */\nexport const LOCAL_SINGLE_TIMEUNIT_INDEX = {\n year: 1,\n quarter: 1,\n month: 1,\n week: 1,\n day: 1,\n dayofyear: 1,\n date: 1,\n hours: 1,\n minutes: 1,\n seconds: 1,\n milliseconds: 1\n} as const;\n\nexport type LocalSingleTimeUnit = keyof typeof LOCAL_SINGLE_TIMEUNIT_INDEX;\n\nexport const TIMEUNIT_PARTS = keys(LOCAL_SINGLE_TIMEUNIT_INDEX);\n\nexport function isLocalSingleTimeUnit(timeUnit: string): timeUnit is LocalSingleTimeUnit {\n return !!LOCAL_SINGLE_TIMEUNIT_INDEX[timeUnit];\n}\n\nexport const UTC_SINGLE_TIMEUNIT_INDEX = {\n utcyear: 1,\n utcquarter: 1,\n utcmonth: 1,\n utcweek: 1,\n utcday: 1,\n utcdayofyear: 1,\n utcdate: 1,\n utchours: 1,\n utcminutes: 1,\n utcseconds: 1,\n utcmilliseconds: 1\n} as const;\n\nexport type UtcSingleTimeUnit = keyof typeof UTC_SINGLE_TIMEUNIT_INDEX;\n\nexport type SingleTimeUnit = LocalSingleTimeUnit | UtcSingleTimeUnit;\n\nexport const LOCAL_MULTI_TIMEUNIT_INDEX = {\n yearquarter: 1,\n yearquartermonth: 1,\n\n yearmonth: 1,\n yearmonthdate: 1,\n yearmonthdatehours: 1,\n yearmonthdatehoursminutes: 1,\n yearmonthdatehoursminutesseconds: 1,\n\n yearweek: 1,\n yearweekday: 1,\n yearweekdayhours: 1,\n yearweekdayhoursminutes: 1,\n yearweekdayhoursminutesseconds: 1,\n\n yeardayofyear: 1,\n\n quartermonth: 1,\n\n monthdate: 1,\n monthdatehours: 1,\n monthdatehoursminutes: 1,\n monthdatehoursminutesseconds: 1,\n\n weekday: 1,\n weeksdayhours: 1,\n weekdayhoursminutes: 1,\n weekdayhoursminutesseconds: 1,\n\n dayhours: 1,\n dayhoursminutes: 1,\n dayhoursminutesseconds: 1,\n\n hoursminutes: 1,\n hoursminutesseconds: 1,\n\n minutesseconds: 1,\n\n secondsmilliseconds: 1\n} as const;\n\nexport type LocalMultiTimeUnit = keyof typeof LOCAL_MULTI_TIMEUNIT_INDEX;\n\nexport const UTC_MULTI_TIMEUNIT_INDEX = {\n utcyearquarter: 1,\n utcyearquartermonth: 1,\n\n utcyearmonth: 1,\n utcyearmonthdate: 1,\n utcyearmonthdatehours: 1,\n utcyearmonthdatehoursminutes: 1,\n utcyearmonthdatehoursminutesseconds: 1,\n\n utcyearweek: 1,\n utcyearweekday: 1,\n utcyearweekdayhours: 1,\n utcyearweekdayhoursminutes: 1,\n utcyearweekdayhoursminutesseconds: 1,\n\n utcyeardayofyear: 1,\n\n utcquartermonth: 1,\n\n utcmonthdate: 1,\n utcmonthdatehours: 1,\n utcmonthdatehoursminutes: 1,\n utcmonthdatehoursminutesseconds: 1,\n\n utcweekday: 1,\n utcweeksdayhours: 1,\n utcweekdayhoursminutes: 1,\n utcweekdayhoursminutesseconds: 1,\n\n utcdayhours: 1,\n utcdayhoursminutes: 1,\n utcdayhoursminutesseconds: 1,\n\n utchoursminutes: 1,\n utchoursminutesseconds: 1,\n\n utcminutesseconds: 1,\n\n utcsecondsmilliseconds: 1\n} as const;\n\nexport type UtcMultiTimeUnit = keyof typeof UTC_MULTI_TIMEUNIT_INDEX;\n\nexport type MultiTimeUnit = LocalMultiTimeUnit | UtcMultiTimeUnit;\n\nexport type LocalTimeUnit = LocalSingleTimeUnit | LocalMultiTimeUnit;\nexport type UtcTimeUnit = UtcSingleTimeUnit | UtcMultiTimeUnit;\n\nexport function isUTCTimeUnit(t: string): t is UtcTimeUnit {\n return t.startsWith('utc');\n}\n\nexport function getLocalTimeUnit(t: UtcTimeUnit): LocalTimeUnit {\n return t.substr(3) as LocalTimeUnit;\n}\n\nexport type TimeUnit = SingleTimeUnit | MultiTimeUnit;\n\nexport type TimeUnitFormat =\n | 'year'\n | 'year-month'\n | 'year-month-date'\n | 'quarter'\n | 'month'\n | 'date'\n | 'week'\n | 'day'\n | 'hours'\n | 'hours-minutes'\n | 'minutes'\n | 'seconds'\n | 'milliseconds';\n\nexport interface TimeUnitParams {\n /**\n * Defines how date-time values should be binned.\n */\n unit?: TimeUnit;\n\n /**\n * If no `unit` is specified, maxbins is used to infer time units.\n */\n maxbins?: number;\n\n /**\n * The number of steps between bins, in terms of the least\n * significant unit provided.\n */\n step?: number;\n\n /**\n * True to use UTC timezone. Equivalent to using a `utc` prefixed `TimeUnit`.\n */\n utc?: boolean;\n}\n\n// matches vega time unit format specifier\nexport type TimeFormatConfig = Partial>;\n\n// In order of increasing specificity\nexport const VEGALITE_TIMEFORMAT: TimeFormatConfig = {\n 'year-month': '%b %Y ',\n 'year-month-date': '%b %d, %Y '\n};\n\nexport function getTimeUnitParts(timeUnit: TimeUnit): LocalSingleTimeUnit[] {\n return TIMEUNIT_PARTS.filter(part => containsTimeUnit(timeUnit, part));\n}\n\n/** Returns true if fullTimeUnit contains the timeUnit, false otherwise. */\nexport function containsTimeUnit(fullTimeUnit: TimeUnit, timeUnit: TimeUnit) {\n const index = fullTimeUnit.indexOf(timeUnit);\n\n if (index < 0) {\n return false;\n }\n\n // exclude milliseconds\n if (index > 0 && timeUnit === 'seconds' && fullTimeUnit.charAt(index - 1) === 'i') {\n return false;\n }\n\n // exclude dayofyear\n if (fullTimeUnit.length > index + 3 && timeUnit === 'day' && fullTimeUnit.charAt(index + 3) === 'o') {\n return false;\n }\n if (index > 0 && timeUnit === 'year' && fullTimeUnit.charAt(index - 1) === 'f') {\n return false;\n }\n\n return true;\n}\n\n/**\n * Returns Vega expression for a given timeUnit and fieldRef\n */\nexport function fieldExpr(fullTimeUnit: TimeUnit, field: string, {end}: {end: boolean} = {end: false}): string {\n const fieldRef = accessPathWithDatum(field);\n\n const utc = isUTCTimeUnit(fullTimeUnit) ? 'utc' : '';\n\n function func(timeUnit: TimeUnit) {\n if (timeUnit === 'quarter') {\n // quarter starting at 0 (0,3,6,9).\n return `(${utc}quarter(${fieldRef})-1)`;\n } else {\n return `${utc}${timeUnit}(${fieldRef})`;\n }\n }\n\n let lastTimeUnit: TimeUnit;\n\n const dateExpr: DateTimeExpr = {};\n\n for (const part of TIMEUNIT_PARTS) {\n if (containsTimeUnit(fullTimeUnit, part)) {\n dateExpr[part] = func(part);\n lastTimeUnit = part;\n }\n }\n\n if (end) {\n dateExpr[lastTimeUnit] += '+1';\n }\n\n return dateTimeExprToExpr(dateExpr);\n}\n\nexport function timeUnitSpecifierExpression(timeUnit: TimeUnit) {\n if (!timeUnit) {\n return undefined;\n }\n\n const timeUnitParts = getTimeUnitParts(timeUnit);\n return `timeUnitSpecifier(${stringify(timeUnitParts)}, ${stringify(VEGALITE_TIMEFORMAT)})`;\n}\n\n/**\n * Returns the signal expression used for axis labels for a time unit.\n */\nexport function formatExpression(timeUnit: TimeUnit, field: string, isUTCScale: boolean): string {\n if (!timeUnit) {\n return undefined;\n }\n\n const expr = timeUnitSpecifierExpression(timeUnit);\n\n // We only use utcFormat for utc scale\n // For utc time units, the data is already converted as a part of timeUnit transform.\n // Thus, utc time units should use timeFormat to avoid shifting the time twice.\n const utc = isUTCScale || isUTCTimeUnit(timeUnit);\n\n return `${utc ? 'utc' : 'time'}Format(${field}, ${expr})`;\n}\n\nexport function normalizeTimeUnit(timeUnit: TimeUnit | TimeUnitParams): TimeUnitParams {\n if (!timeUnit) {\n return undefined;\n }\n\n let params: TimeUnitParams;\n if (isString(timeUnit)) {\n params = {\n unit: timeUnit\n };\n } else if (isObject(timeUnit)) {\n params = {\n ...timeUnit,\n ...(timeUnit.unit ? {unit: timeUnit.unit} : {})\n };\n }\n\n if (isUTCTimeUnit(params.unit)) {\n params.utc = true;\n params.unit = getLocalTimeUnit(params.unit);\n }\n\n return params;\n}\n\nexport function timeUnitToString(tu: TimeUnit | TimeUnitParams) {\n const {utc, ...rest} = normalizeTimeUnit(tu);\n\n if (rest.unit) {\n return (\n (utc ? 'utc' : '') +\n keys(rest)\n .map(p => varName(`${p === 'unit' ? '' : `_${p}_`}${rest[p]}`))\n .join('')\n );\n } else {\n // when maxbins is specified instead of units\n return (\n (utc ? 'utc' : '') +\n 'timeunit' +\n keys(rest)\n .map(p => varName(`_${p}_${rest[p]}`))\n .join('')\n );\n }\n}\n","import {SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {FieldName, valueExpr, vgField} from './channeldef';\nimport {DateTime} from './datetime';\nimport {ExprRef} from './expr';\nimport {LogicalComposition} from './logical';\nimport {ParameterName} from './parameter';\nimport {fieldExpr as timeUnitFieldExpr, normalizeTimeUnit, TimeUnit, TimeUnitParams} from './timeunit';\nimport {stringify} from './util';\nimport {isSignalRef} from './vega.schema';\n\nexport type Predicate =\n // a) FieldPredicate (but we don't type FieldFilter here so the schema has no nesting\n // and thus the documentation shows all of the types clearly)\n | FieldEqualPredicate\n | FieldRangePredicate\n | FieldOneOfPredicate\n | FieldLTPredicate\n | FieldGTPredicate\n | FieldLTEPredicate\n | FieldGTEPredicate\n | FieldValidPredicate\n // b) Selection Predicate\n | ParameterPredicate\n // c) Vega Expression string\n | string;\n\nexport type FieldPredicate =\n | FieldEqualPredicate\n | FieldLTPredicate\n | FieldGTPredicate\n | FieldLTEPredicate\n | FieldGTEPredicate\n | FieldRangePredicate\n | FieldOneOfPredicate\n | FieldValidPredicate;\n\nexport interface ParameterPredicate {\n /**\n * Filter using a parameter name.\n */\n param: ParameterName;\n /**\n * For selection parameters, the predicate of empty selections returns true by default.\n * Override this behavior, by setting this property `empty: false`.\n */\n empty?: boolean;\n}\n\nexport function isSelectionPredicate(predicate: LogicalComposition): predicate is ParameterPredicate {\n return predicate?.['param'];\n}\n\nexport interface FieldPredicateBase {\n // TODO: support aggregate\n\n /**\n * Time unit for the field to be tested.\n */\n timeUnit?: TimeUnit | TimeUnitParams;\n\n /**\n * Field to be tested.\n */\n field: FieldName;\n}\n\nexport interface FieldEqualPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be equal to.\n */\n equal: string | number | boolean | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldEqualPredicate(predicate: any): predicate is FieldEqualPredicate {\n return predicate && !!predicate.field && predicate.equal !== undefined;\n}\n\nexport interface FieldLTPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be less than.\n */\n lt: string | number | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldLTPredicate(predicate: any): predicate is FieldLTPredicate {\n return predicate && !!predicate.field && predicate.lt !== undefined;\n}\n\nexport interface FieldLTEPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be less than or equals to.\n */\n lte: string | number | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldLTEPredicate(predicate: any): predicate is FieldLTEPredicate {\n return predicate && !!predicate.field && predicate.lte !== undefined;\n}\n\nexport interface FieldGTPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be greater than.\n */\n gt: string | number | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldGTPredicate(predicate: any): predicate is FieldGTPredicate {\n return predicate && !!predicate.field && predicate.gt !== undefined;\n}\n\nexport interface FieldGTEPredicate extends FieldPredicateBase {\n /**\n * The value that the field should be greater than or equals to.\n */\n gte: string | number | DateTime | ExprRef | SignalRef;\n}\n\nexport function isFieldGTEPredicate(predicate: any): predicate is FieldGTEPredicate {\n return predicate && !!predicate.field && predicate.gte !== undefined;\n}\n\nexport interface FieldRangePredicate extends FieldPredicateBase {\n /**\n * An array of inclusive minimum and maximum values\n * for a field value of a data item to be included in the filtered data.\n * @maxItems 2\n * @minItems 2\n */\n range: (number | DateTime | null | ExprRef | SignalRef)[] | ExprRef | SignalRef;\n}\n\nexport function isFieldRangePredicate(predicate: any): predicate is FieldRangePredicate {\n if (predicate?.field) {\n if (isArray(predicate.range) && predicate.range.length === 2) {\n return true;\n } else if (isSignalRef(predicate.range)) {\n return true;\n }\n }\n return false;\n}\n\nexport interface FieldOneOfPredicate extends FieldPredicateBase {\n /**\n * A set of values that the `field`'s value should be a member of,\n * for a data item included in the filtered data.\n */\n oneOf: string[] | number[] | boolean[] | DateTime[];\n}\n\nexport interface FieldValidPredicate extends FieldPredicateBase {\n /**\n * If set to true the field's value has to be valid, meaning both not `null` and not [`NaN`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN).\n */\n valid: boolean;\n}\n\nexport function isFieldOneOfPredicate(predicate: any): predicate is FieldOneOfPredicate {\n return (\n predicate && !!predicate.field && (isArray(predicate.oneOf) || isArray(predicate.in)) // backward compatibility\n );\n}\n\nexport function isFieldValidPredicate(predicate: any): predicate is FieldValidPredicate {\n return predicate && !!predicate.field && predicate.valid !== undefined;\n}\n\nexport function isFieldPredicate(\n predicate: Predicate\n): predicate is\n | FieldOneOfPredicate\n | FieldEqualPredicate\n | FieldRangePredicate\n | FieldLTPredicate\n | FieldGTPredicate\n | FieldLTEPredicate\n | FieldGTEPredicate {\n return (\n isFieldOneOfPredicate(predicate) ||\n isFieldEqualPredicate(predicate) ||\n isFieldRangePredicate(predicate) ||\n isFieldLTPredicate(predicate) ||\n isFieldGTPredicate(predicate) ||\n isFieldLTEPredicate(predicate) ||\n isFieldGTEPredicate(predicate)\n );\n}\n\nfunction predicateValueExpr(v: number | string | boolean | DateTime | ExprRef | SignalRef, timeUnit: TimeUnit) {\n return valueExpr(v, {timeUnit, wrapTime: true});\n}\n\nfunction predicateValuesExpr(vals: (number | string | boolean | DateTime)[], timeUnit: TimeUnit) {\n return vals.map(v => predicateValueExpr(v, timeUnit));\n}\n\n// This method is used by Voyager. Do not change its behavior without changing Voyager.\nexport function fieldFilterExpression(predicate: FieldPredicate, useInRange = true) {\n const {field} = predicate;\n const timeUnit = normalizeTimeUnit(predicate.timeUnit)?.unit;\n const fieldExpr = timeUnit\n ? // For timeUnit, cast into integer with time() so we can use ===, inrange, indexOf to compare values directly.\n // TODO: We calculate timeUnit on the fly here. Consider if we would like to consolidate this with timeUnit pipeline\n // TODO: support utc\n `time(${timeUnitFieldExpr(timeUnit, field)})`\n : vgField(predicate, {expr: 'datum'});\n\n if (isFieldEqualPredicate(predicate)) {\n return `${fieldExpr}===${predicateValueExpr(predicate.equal, timeUnit)}`;\n } else if (isFieldLTPredicate(predicate)) {\n const upper = predicate.lt;\n return `${fieldExpr}<${predicateValueExpr(upper, timeUnit)}`;\n } else if (isFieldGTPredicate(predicate)) {\n const lower = predicate.gt;\n return `${fieldExpr}>${predicateValueExpr(lower, timeUnit)}`;\n } else if (isFieldLTEPredicate(predicate)) {\n const upper = predicate.lte;\n return `${fieldExpr}<=${predicateValueExpr(upper, timeUnit)}`;\n } else if (isFieldGTEPredicate(predicate)) {\n const lower = predicate.gte;\n return `${fieldExpr}>=${predicateValueExpr(lower, timeUnit)}`;\n } else if (isFieldOneOfPredicate(predicate)) {\n return `indexof([${predicateValuesExpr(predicate.oneOf, timeUnit).join(',')}], ${fieldExpr}) !== -1`;\n } else if (isFieldValidPredicate(predicate)) {\n return fieldValidPredicate(fieldExpr, predicate.valid);\n } else if (isFieldRangePredicate(predicate)) {\n const {range} = predicate;\n const lower = isSignalRef(range) ? {signal: `${range.signal}[0]`} : range[0];\n const upper = isSignalRef(range) ? {signal: `${range.signal}[1]`} : range[1];\n\n if (lower !== null && upper !== null && useInRange) {\n return (\n 'inrange(' +\n fieldExpr +\n ', [' +\n predicateValueExpr(lower, timeUnit) +\n ', ' +\n predicateValueExpr(upper, timeUnit) +\n '])'\n );\n }\n\n const exprs = [];\n if (lower !== null) {\n exprs.push(`${fieldExpr} >= ${predicateValueExpr(lower, timeUnit)}`);\n }\n if (upper !== null) {\n exprs.push(`${fieldExpr} <= ${predicateValueExpr(upper, timeUnit)}`);\n }\n\n return exprs.length > 0 ? exprs.join(' && ') : 'true';\n }\n\n /* istanbul ignore next: it should never reach here */\n throw new Error(`Invalid field predicate: ${stringify(predicate)}`);\n}\n\nexport function fieldValidPredicate(fieldExpr: string, valid = true) {\n if (valid) {\n return `isValid(${fieldExpr}) && isFinite(+${fieldExpr})`;\n } else {\n return `!isValid(${fieldExpr}) || !isFinite(+${fieldExpr})`;\n }\n}\n\nexport function normalizePredicate(f: Predicate): Predicate {\n if (isFieldPredicate(f) && f.timeUnit) {\n return {\n ...f,\n timeUnit: normalizeTimeUnit(f.timeUnit)?.unit\n };\n }\n return f;\n}\n","import {keys} from './util';\n\n/**\n * Data type based on level of measurement\n */\nexport const Type = {\n quantitative: 'quantitative',\n ordinal: 'ordinal',\n temporal: 'temporal',\n nominal: 'nominal',\n geojson: 'geojson'\n} as const;\n\nexport type Type = keyof typeof Type;\n\nexport function isType(t: any): t is Type {\n return t in Type;\n}\n\nexport const QUANTITATIVE = Type.quantitative;\nexport const ORDINAL = Type.ordinal;\nexport const TEMPORAL = Type.temporal;\nexport const NOMINAL = Type.nominal;\n\nexport const GEOJSON = Type.geojson;\n\nexport type StandardType = 'quantitative' | 'ordinal' | 'temporal' | 'nominal';\n\nexport const TYPES = keys(Type);\n\n/**\n * Get full, lowercase type name for a given type.\n * @param type\n * @return Full type name.\n */\nexport function getFullName(type: Type | string): Type | undefined {\n if (type) {\n type = type.toLowerCase();\n switch (type) {\n case 'q':\n case QUANTITATIVE:\n return 'quantitative';\n case 't':\n case TEMPORAL:\n return 'temporal';\n case 'o':\n case ORDINAL:\n return 'ordinal';\n case 'n':\n case NOMINAL:\n return 'nominal';\n case GEOJSON:\n return 'geojson';\n }\n }\n // If we get invalid input, return undefined type.\n return undefined;\n}\n","import {\n isObject,\n RangeEnum,\n ScaleBins,\n ScaleInterpolateEnum,\n ScaleInterpolateParams,\n SignalRef,\n TimeInterval,\n TimeIntervalStep\n} from 'vega';\nimport {isString, toSet} from 'vega-util';\nimport * as CHANNEL from './channel';\nimport {Channel, isColorChannel} from './channel';\nimport {DateTime} from './datetime';\nimport {ExprRef} from './expr';\nimport * as log from './log';\nimport {ParameterExtent} from './selection';\nimport {NOMINAL, ORDINAL, QUANTITATIVE, TEMPORAL, Type} from './type';\nimport {contains, Flag, keys} from './util';\n\nexport const ScaleType = {\n // Continuous - Quantitative\n LINEAR: 'linear',\n LOG: 'log',\n POW: 'pow',\n SQRT: 'sqrt',\n SYMLOG: 'symlog',\n\n IDENTITY: 'identity',\n SEQUENTIAL: 'sequential',\n\n // Continuous - Time\n TIME: 'time',\n UTC: 'utc',\n\n // Discretizing scales\n QUANTILE: 'quantile',\n QUANTIZE: 'quantize',\n THRESHOLD: 'threshold',\n BIN_ORDINAL: 'bin-ordinal',\n\n // Discrete scales\n ORDINAL: 'ordinal',\n POINT: 'point',\n BAND: 'band'\n} as const;\n\ntype ValueOf = T[keyof T];\nexport type ScaleType = ValueOf;\n\n/**\n * Index for scale categories -- only scale of the same categories can be merged together.\n * Current implementation is trying to be conservative and avoid merging scale type that might not work together\n */\nexport const SCALE_CATEGORY_INDEX: Record = {\n linear: 'numeric',\n log: 'numeric',\n pow: 'numeric',\n sqrt: 'numeric',\n symlog: 'numeric',\n identity: 'numeric',\n sequential: 'numeric',\n time: 'time',\n utc: 'time',\n ordinal: 'ordinal',\n 'bin-ordinal': 'bin-ordinal', // TODO: should bin-ordinal support merging with other\n point: 'ordinal-position',\n band: 'ordinal-position',\n quantile: 'discretizing',\n quantize: 'discretizing',\n threshold: 'discretizing'\n};\n\nexport const SCALE_TYPES: ScaleType[] = keys(SCALE_CATEGORY_INDEX);\n\n/**\n * Whether the two given scale types can be merged together.\n */\nexport function scaleCompatible(scaleType1: ScaleType, scaleType2: ScaleType) {\n const scaleCategory1 = SCALE_CATEGORY_INDEX[scaleType1];\n const scaleCategory2 = SCALE_CATEGORY_INDEX[scaleType2];\n return (\n scaleCategory1 === scaleCategory2 ||\n (scaleCategory1 === 'ordinal-position' && scaleCategory2 === 'time') ||\n (scaleCategory2 === 'ordinal-position' && scaleCategory1 === 'time')\n );\n}\n\n/**\n * Index for scale precedence -- high score = higher priority for merging.\n */\nconst SCALE_PRECEDENCE_INDEX: Record = {\n // numeric\n linear: 0,\n log: 1,\n pow: 1,\n sqrt: 1,\n symlog: 1,\n identity: 1,\n sequential: 1,\n // time\n time: 0,\n utc: 0,\n // ordinal-position -- these have higher precedence than continuous scales as they support more types of data\n point: 10,\n band: 11, // band has higher precedence as it is better for interaction\n // non grouped types\n ordinal: 0,\n 'bin-ordinal': 0,\n quantile: 0,\n quantize: 0,\n threshold: 0\n};\n\n/**\n * Return scale categories -- only scale of the same categories can be merged together.\n */\nexport function scaleTypePrecedence(scaleType: ScaleType): number {\n return SCALE_PRECEDENCE_INDEX[scaleType];\n}\n\nexport const CONTINUOUS_TO_CONTINUOUS_SCALES: ScaleType[] = ['linear', 'log', 'pow', 'sqrt', 'symlog', 'time', 'utc'];\nconst CONTINUOUS_TO_CONTINUOUS_INDEX = toSet(CONTINUOUS_TO_CONTINUOUS_SCALES);\n\nexport const QUANTITATIVE_SCALES: ScaleType[] = ['linear', 'log', 'pow', 'sqrt', 'symlog'];\n\nconst QUANTITATIVE_SCALES_INDEX = toSet(QUANTITATIVE_SCALES);\n\nexport function isQuantitative(type: ScaleType): type is 'linear' | 'log' | 'pow' | 'sqrt' | 'symlog' {\n return type in QUANTITATIVE_SCALES_INDEX;\n}\n\nexport const CONTINUOUS_TO_DISCRETE_SCALES: ScaleType[] = ['quantile', 'quantize', 'threshold'];\nconst CONTINUOUS_TO_DISCRETE_INDEX = toSet(CONTINUOUS_TO_DISCRETE_SCALES);\n\nexport const CONTINUOUS_DOMAIN_SCALES: ScaleType[] = CONTINUOUS_TO_CONTINUOUS_SCALES.concat([\n 'quantile',\n 'quantize',\n 'threshold',\n 'sequential',\n 'identity'\n]);\nconst CONTINUOUS_DOMAIN_INDEX = toSet(CONTINUOUS_DOMAIN_SCALES);\n\nexport const DISCRETE_DOMAIN_SCALES: ScaleType[] = ['ordinal', 'bin-ordinal', 'point', 'band'];\nconst DISCRETE_DOMAIN_INDEX = toSet(DISCRETE_DOMAIN_SCALES);\n\nexport const TIME_SCALE_TYPES: ScaleType[] = ['time', 'utc'];\n\nexport function hasDiscreteDomain(type: ScaleType): type is 'ordinal' | 'bin-ordinal' | 'point' | 'band' {\n return type in DISCRETE_DOMAIN_INDEX;\n}\n\nexport function hasContinuousDomain(\n type: ScaleType\n): type is 'linear' | 'log' | 'pow' | 'sqrt' | 'symlog' | 'time' | 'utc' | 'quantile' | 'quantize' | 'threshold' {\n return type in CONTINUOUS_DOMAIN_INDEX;\n}\n\nexport function isContinuousToContinuous(\n type: ScaleType\n): type is 'linear' | 'log' | 'pow' | 'sqrt' | 'symlog' | 'time' | 'utc' {\n return type in CONTINUOUS_TO_CONTINUOUS_INDEX;\n}\n\nexport function isContinuousToDiscrete(type: ScaleType): type is 'quantile' | 'quantize' | 'threshold' {\n return type in CONTINUOUS_TO_DISCRETE_INDEX;\n}\n\nexport interface ScaleConfig {\n /**\n * If true, rounds numeric output values to integers.\n * This can be helpful for snapping to the pixel grid.\n * (Only available for `x`, `y`, and `size` scales.)\n */\n round?: boolean | ES;\n\n /**\n * If true, values that exceed the data domain are clamped to either the minimum or maximum range value\n */\n clamp?: boolean | ES;\n\n /**\n * Default inner padding for `x` and `y` band-ordinal scales.\n *\n * __Default value:__\n * - `barBandPaddingInner` for bar marks (`0.1` by default)\n * - `rectBandPaddingInner` for rect and other marks (`0` by default)\n *\n * @minimum 0\n * @maximum 1\n */\n bandPaddingInner?: number | ES;\n\n /**\n * Default outer padding for `x` and `y` band-ordinal scales.\n *\n * __Default value:__ `paddingInner/2` (which makes _width/height = number of unique values * step_)\n *\n * @minimum 0\n * @maximum 1\n */\n bandPaddingOuter?: number | ES;\n\n /**\n * Default inner padding for `x` and `y` band-ordinal scales of `\"bar\"` marks.\n *\n * __Default value:__ `0.1`\n *\n * @minimum 0\n * @maximum 1\n */\n barBandPaddingInner?: number | ES;\n\n /**\n * Default inner padding for `x` and `y` band-ordinal scales of `\"rect\"` marks.\n *\n * __Default value:__ `0`\n *\n * @minimum 0\n * @maximum 1\n */\n rectBandPaddingInner?: number | ES;\n\n /**\n * Default padding for continuous scales.\n *\n * __Default:__ `5` for continuous x-scale of a vertical bar and continuous y-scale of a horizontal bar.; `0` otherwise.\n *\n * @minimum 0\n */\n continuousPadding?: number | ES;\n\n /**\n * Default outer padding for `x` and `y` point-ordinal scales.\n *\n * __Default value:__ `0.5` (which makes _width/height = number of unique values * step_)\n *\n * @minimum 0\n * @maximum 1\n */\n pointPadding?: number | ES;\n\n /**\n * Use the source data range before aggregation as scale domain instead of aggregated data for aggregate axis.\n *\n * This is equivalent to setting `domain` to `\"unaggregate\"` for aggregated _quantitative_ fields by default.\n *\n * This property only works with aggregate functions that produce values within the raw data domain (`\"mean\"`, `\"average\"`, `\"median\"`, `\"q1\"`, `\"q3\"`, `\"min\"`, `\"max\"`). For other aggregations that produce values outside of the raw data domain (e.g. `\"count\"`, `\"sum\"`), this property is ignored.\n *\n * __Default value:__ `false`\n */\n useUnaggregatedDomain?: boolean;\n\n // nice should depends on type (quantitative or temporal), so\n // let's not make a config.\n\n // Configs for Range\n\n /**\n * The default max value for mapping quantitative fields to bar's size/bandSize.\n *\n * If undefined (default), we will use the axis's size (width or height) - 1.\n * @minimum 0\n */\n maxBandSize?: number;\n\n /**\n * The default min value for mapping quantitative fields to bar and tick's size/bandSize scale with zero=false.\n *\n * __Default value:__ `2`\n *\n * @minimum 0\n */\n minBandSize?: number;\n\n /**\n * The default max value for mapping quantitative fields to text's size/fontSize.\n *\n * __Default value:__ `40`\n *\n * @minimum 0\n */\n maxFontSize?: number;\n\n /**\n * The default min value for mapping quantitative fields to tick's size/fontSize scale with zero=false\n *\n * __Default value:__ `8`\n *\n * @minimum 0\n */\n minFontSize?: number;\n\n /**\n * Default minimum opacity for mapping a field to opacity.\n *\n * __Default value:__ `0.3`\n *\n * @minimum 0\n * @maximum 1\n */\n minOpacity?: number;\n\n /**\n * Default max opacity for mapping a field to opacity.\n *\n * __Default value:__ `0.8`\n *\n * @minimum 0\n * @maximum 1\n */\n maxOpacity?: number;\n\n /**\n * Default minimum value for point size scale with zero=false.\n *\n * __Default value:__ `9`\n *\n * @minimum 0\n */\n minSize?: number;\n\n /**\n * Default max value for point size scale.\n * @minimum 0\n */\n maxSize?: number;\n\n /**\n * Default minimum strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks with zero=false.\n *\n * __Default value:__ `1`\n *\n * @minimum 0\n */\n minStrokeWidth?: number;\n\n /**\n * Default max strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks.\n *\n * __Default value:__ `4`\n *\n * @minimum 0\n */\n maxStrokeWidth?: number;\n\n /**\n * Default range cardinality for [`quantile`](https://vega.github.io/vega-lite/docs/scale.html#quantile) scale.\n *\n * __Default value:__ `4`\n *\n * @minimum 0\n */\n quantileCount?: number;\n\n /**\n * Default range cardinality for [`quantize`](https://vega.github.io/vega-lite/docs/scale.html#quantize) scale.\n *\n * __Default value:__ `4`\n *\n * @minimum 0\n */\n quantizeCount?: number;\n\n /**\n * Reverse x-scale by default (useful for right-to-left charts).\n */\n xReverse?: boolean | ES;\n}\n\nexport const defaultScaleConfig: ScaleConfig = {\n pointPadding: 0.5,\n\n barBandPaddingInner: 0.1,\n rectBandPaddingInner: 0,\n\n minBandSize: 2,\n\n minFontSize: 8,\n maxFontSize: 40,\n\n minOpacity: 0.3,\n maxOpacity: 0.8,\n\n // FIXME: revise if these *can* become ratios of width/height step\n minSize: 9, // Point size is area. For square point, 9 = 3 pixel ^ 2, not too small!\n\n minStrokeWidth: 1,\n maxStrokeWidth: 4,\n quantileCount: 4,\n quantizeCount: 4\n};\n\nexport interface SchemeParams {\n /**\n * A color scheme name for ordinal scales (e.g., `\"category10\"` or `\"blues\"`).\n *\n * For the full list of supported schemes, please refer to the [Vega Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference.\n */\n name: string | SignalRef;\n\n /**\n * The extent of the color range to use. For example `[0.2, 1]` will rescale the color scheme such that color values in the range _[0, 0.2)_ are excluded from the scheme.\n */\n extent?: (number | SignalRef)[] | SignalRef;\n\n /**\n * The number of colors to use in the scheme. This can be useful for scale types such as `\"quantize\"`, which use the length of the scale range to determine the number of discrete bins for the scale domain.\n */\n count?: number | SignalRef;\n}\n\nexport type Domain =\n | (null | string | number | boolean | DateTime | SignalRef)[]\n | 'unaggregated'\n | ParameterExtent\n | SignalRef\n | DomainUnionWith;\n\nexport type Scheme = string | SchemeParams;\n\nexport function isExtendedScheme(scheme: Scheme | SignalRef): scheme is SchemeParams {\n return !isString(scheme) && !!scheme['name'];\n}\n\nexport function isParameterDomain(domain: Domain): domain is ParameterExtent {\n return domain?.['param'];\n}\n\nexport interface DomainUnionWith {\n /**\n * Customized domain values to be union with the field's values or explicitly defined domain.\n * Should be an array of valid scale domain values.\n */\n unionWith: number[] | string[] | boolean[] | DateTime[];\n}\n\nexport function isDomainUnionWith(domain: Domain): domain is DomainUnionWith {\n return domain && domain['unionWith'];\n}\n\nexport interface FieldRange {\n field: string;\n}\n\nexport function isFieldRange(range: any): range is FieldRange {\n return isObject(range) && 'field' in range;\n}\n\nexport interface Scale {\n /**\n * The type of scale. Vega-Lite supports the following categories of scale types:\n *\n * 1) [**Continuous Scales**](https://vega.github.io/vega-lite/docs/scale.html#continuous) -- mapping continuous domains to continuous output ranges ([`\"linear\"`](https://vega.github.io/vega-lite/docs/scale.html#linear), [`\"pow\"`](https://vega.github.io/vega-lite/docs/scale.html#pow), [`\"sqrt\"`](https://vega.github.io/vega-lite/docs/scale.html#sqrt), [`\"symlog\"`](https://vega.github.io/vega-lite/docs/scale.html#symlog), [`\"log\"`](https://vega.github.io/vega-lite/docs/scale.html#log), [`\"time\"`](https://vega.github.io/vega-lite/docs/scale.html#time), [`\"utc\"`](https://vega.github.io/vega-lite/docs/scale.html#utc).\n *\n * 2) [**Discrete Scales**](https://vega.github.io/vega-lite/docs/scale.html#discrete) -- mapping discrete domains to discrete ([`\"ordinal\"`](https://vega.github.io/vega-lite/docs/scale.html#ordinal)) or continuous ([`\"band\"`](https://vega.github.io/vega-lite/docs/scale.html#band) and [`\"point\"`](https://vega.github.io/vega-lite/docs/scale.html#point)) output ranges.\n *\n * 3) [**Discretizing Scales**](https://vega.github.io/vega-lite/docs/scale.html#discretizing) -- mapping continuous domains to discrete output ranges [`\"bin-ordinal\"`](https://vega.github.io/vega-lite/docs/scale.html#bin-ordinal), [`\"quantile\"`](https://vega.github.io/vega-lite/docs/scale.html#quantile), [`\"quantize\"`](https://vega.github.io/vega-lite/docs/scale.html#quantize) and [`\"threshold\"`](https://vega.github.io/vega-lite/docs/scale.html#threshold).\n *\n * __Default value:__ please see the [scale type table](https://vega.github.io/vega-lite/docs/scale.html#type).\n */\n type?: ScaleType;\n\n /**\n * Customized domain values in the form of constant values or dynamic values driven by a parameter.\n *\n * 1) Constant `domain` for _quantitative_ fields can take one of the following forms:\n *\n * - A two-element array with minimum and maximum values. To create a diverging scale, this two-element array can be combined with the `domainMid` property.\n * - An array with more than two entries, for [Piecewise quantitative scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise).\n * - A string value `\"unaggregated\"`, if the input field is aggregated, to indicate that the domain should include the raw data values prior to the aggregation.\n *\n * 2) Constant `domain` for _temporal_ fields can be a two-element array with minimum and maximum values, in the form of either timestamps or the [DateTime definition objects](https://vega.github.io/vega-lite/docs/types.html#datetime).\n *\n * 3) Constant `domain` for _ordinal_ and _nominal_ fields can be an array that lists valid input values.\n *\n * 4) To combine (union) specified constant domain with the field's values, `domain` can be an object with a `unionWith` property that specify constant domain to be combined. For example, `domain: {unionWith: [0, 100]}` for a quantitative scale means that the scale domain always includes `[0, 100]`, but will include other values in the fields beyond `[0, 100]`.\n *\n * 5) Domain can also takes an object defining a field or encoding of a parameter that [interactively determines](https://vega.github.io/vega-lite/docs/selection.html#scale-domains) the scale domain.\n */\n domain?:\n | (null | string | number | boolean | DateTime | ES)[]\n | 'unaggregated'\n | ParameterExtent\n | DomainUnionWith\n | ES;\n\n /**\n * Inserts a single mid-point value into a two-element domain. The mid-point value must lie between the domain minimum and maximum values. This property can be useful for setting a midpoint for [diverging color scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise). The domainMid property is only intended for use with scales supporting continuous, piecewise domains.\n */\n domainMid?: number | ES;\n\n /**\n * Sets the maximum value in the scale domain, overriding the `domain` property. This property is only intended for use with scales having continuous domains.\n */\n domainMax?: number | DateTime | ES;\n\n /**\n * Sets the minimum value in the scale domain, overriding the domain property. This property is only intended for use with scales having continuous domains.\n */\n domainMin?: number | DateTime | ES;\n\n /**\n * If true, reverses the order of the scale range.\n * __Default value:__ `false`.\n */\n reverse?: boolean | ES;\n\n /**\n * The range of the scale. One of:\n *\n * - A string indicating a [pre-defined named scale range](https://vega.github.io/vega-lite/docs/scale.html#range-config) (e.g., example, `\"symbol\"`, or `\"diverging\"`).\n *\n * - For [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous), two-element array indicating minimum and maximum values, or an array with more than two entries for specifying a [piecewise scale](https://vega.github.io/vega-lite/docs/scale.html#piecewise).\n *\n * - For [discrete](https://vega.github.io/vega-lite/docs/scale.html#discrete) and [discretizing](https://vega.github.io/vega-lite/docs/scale.html#discretizing) scales, an array of desired output values or an object with a `field` property representing the range values. For example, if a field `color` contains CSS color names, we can set `range` to `{field: \"color\"}`.\n *\n * __Notes:__\n *\n * 1) For color scales you can also specify a color [`scheme`](https://vega.github.io/vega-lite/docs/scale.html#scheme) instead of `range`.\n *\n * 2) Any directly specified `range` for `x` and `y` channels will be ignored. Range can be customized via the view's corresponding [size](https://vega.github.io/vega-lite/docs/size.html) (`width` and `height`).\n */\n range?: RangeEnum | (number | string | number[] | ES)[] | FieldRange;\n\n /**\n * Sets the maximum value in the scale range, overriding the `range` property or the default range. This property is only intended for use with scales having continuous ranges.\n */\n rangeMax?: number | string | ES;\n\n /**\n * Sets the minimum value in the scale range, overriding the `range` property or the default range. This property is only intended for use with scales having continuous ranges.\n */\n rangeMin?: number | string | ES;\n\n // ordinal\n\n /**\n * A string indicating a color [scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme) name (e.g., `\"category10\"` or `\"blues\"`) or a [scheme parameter object](https://vega.github.io/vega-lite/docs/scale.html#scheme-params).\n *\n * Discrete color schemes may be used with [discrete](https://vega.github.io/vega-lite/docs/scale.html#discrete) or [discretizing](https://vega.github.io/vega-lite/docs/scale.html#discretizing) scales. Continuous color schemes are intended for use with color scales.\n *\n * For the full list of supported schemes, please refer to the [Vega Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference.\n */\n scheme?: string | SchemeParams | ES;\n\n /**\n * The alignment of the steps within the scale range.\n *\n * This value must lie in the range `[0,1]`. A value of `0.5` indicates that the steps should be centered within the range. A value of `0` or `1` may be used to shift the bands to one side, say to position them adjacent to an axis.\n *\n * __Default value:__ `0.5`\n */\n align?: number | ES;\n\n /**\n * Bin boundaries can be provided to scales as either an explicit array of bin boundaries or as a bin specification object. The legal values are:\n * - An [array](../types/#Array) literal of bin boundary values. For example, `[0, 5, 10, 15, 20]`. The array must include both starting and ending boundaries. The previous example uses five values to indicate a total of four bin intervals: [0-5), [5-10), [10-15), [15-20]. Array literals may include signal references as elements.\n * - A [bin specification object](https://vega.github.io/vega-lite/docs/scale.html#bins) that indicates the bin _step_ size, and optionally the _start_ and _stop_ boundaries.\n * - An array of bin boundaries over the scale domain. If provided, axes and legends will use the bin boundaries to inform the choice of tick marks and text labels.\n */\n // TODO: add - A [signal reference](../types/#Signal) that resolves to either an array or bin specification object.\n bins?: ScaleBins;\n\n /**\n * If `true`, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid.\n *\n * __Default value:__ `false`.\n */\n round?: boolean | ES;\n\n /**\n * For _[continuous](https://vega.github.io/vega-lite/docs/scale.html#continuous)_ scales, expands the scale domain to accommodate the specified number of pixels on each of the scale range. The scale range must represent pixels for this parameter to function as intended. Padding adjustment is performed prior to all other adjustments, including the effects of the `zero`, `nice`, `domainMin`, and `domainMax` properties.\n *\n * For _[band](https://vega.github.io/vega-lite/docs/scale.html#band)_ scales, shortcut for setting `paddingInner` and `paddingOuter` to the same value.\n *\n * For _[point](https://vega.github.io/vega-lite/docs/scale.html#point)_ scales, alias for `paddingOuter`.\n *\n * __Default value:__ For _continuous_ scales, derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `continuousPadding`.\n * For _band and point_ scales, see `paddingInner` and `paddingOuter`. By default, Vega-Lite sets padding such that _width/height = number of unique values * step_.\n *\n * @minimum 0\n */\n padding?: number | ES;\n\n /**\n * The inner padding (spacing) within each band step of band scales, as a fraction of the step size. This value must lie in the range [0,1].\n *\n * For point scale, this property is invalid as point scales do not have internal band widths (only step sizes between bands).\n *\n * __Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `bandPaddingInner`.\n *\n * @minimum 0\n * @maximum 1\n */\n paddingInner?: number | ES;\n\n /**\n * The outer padding (spacing) at the ends of the range of band and point scales,\n * as a fraction of the step size. This value must lie in the range [0,1].\n *\n * __Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `bandPaddingOuter` for band scales and `pointPadding` for point scales.\n * By default, Vega-Lite sets outer padding such that _width/height = number of unique values * step_.\n *\n * @minimum 0\n * @maximum 1\n */\n paddingOuter?: number | ES;\n\n // typical\n /**\n * If `true`, values that exceed the data domain are clamped to either the minimum or maximum range value\n *\n * __Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/config.html#scale-config)'s `clamp` (`true` by default).\n */\n clamp?: boolean | ES;\n\n /**\n * Extending the domain so that it starts and ends on nice round values. This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value. Nicing is useful if the domain is computed from data and may be irregular. For example, for a domain of _[0.201479…, 0.996679…]_, a nice domain might be _[0.2, 1.0]_.\n *\n * For quantitative scales such as linear, `nice` can be either a boolean flag or a number. If `nice` is a number, it will represent a desired tick count. This allows greater control over the step size used to extend the bounds, guaranteeing that the returned ticks will exactly cover the domain.\n *\n * For temporal fields with time and utc scales, the `nice` value can be a string indicating the desired time interval. Legal values are `\"millisecond\"`, `\"second\"`, `\"minute\"`, `\"hour\"`, `\"day\"`, `\"week\"`, `\"month\"`, and `\"year\"`. Alternatively, `time` and `utc` scales can accept an object-valued interval specifier of the form `{\"interval\": \"month\", \"step\": 3}`, which includes a desired number of interval steps. Here, the domain would snap to quarter (Jan, Apr, Jul, Oct) boundaries.\n *\n * __Default value:__ `true` for unbinned _quantitative_ fields; `false` otherwise.\n *\n */\n nice?: boolean | number | TimeInterval | TimeIntervalStep | ES;\n\n /**\n * The logarithm base of the `log` scale (default `10`).\n */\n base?: number | ES;\n\n /**\n * The exponent of the `pow` scale.\n */\n exponent?: number | ES;\n\n /**\n * A constant determining the slope of the symlog function around zero. Only used for `symlog` scales.\n *\n * __Default value:__ `1`\n */\n constant?: number | ES;\n\n /**\n * If `true`, ensures that a zero baseline value is included in the scale domain.\n *\n * __Default value:__ `true` for x and y channels if the quantitative field is not binned and no custom `domain` is provided; `false` otherwise.\n *\n * __Note:__ Log, time, and utc scales do not support `zero`.\n */\n zero?: boolean | ES;\n\n /**\n * The interpolation method for range values. By default, a general interpolator for numbers, dates, strings and colors (in HCL space) is used. For color ranges, this property allows interpolation in alternative color spaces. Legal values include `rgb`, `hsl`, `hsl-long`, `lab`, `hcl`, `hcl-long`, `cubehelix` and `cubehelix-long` ('-long' variants use longer paths in polar coordinate spaces). If object-valued, this property accepts an object with a string-valued _type_ property and an optional numeric _gamma_ property applicable to rgb and cubehelix interpolators. For more, see the [d3-interpolate documentation](https://github.com/d3/d3-interpolate).\n *\n * * __Default value:__ `hcl`\n */\n interpolate?: ScaleInterpolateEnum | ES | ScaleInterpolateParams;\n}\n\nconst SCALE_PROPERTY_INDEX: Flag> = {\n type: 1,\n domain: 1,\n domainMax: 1,\n domainMin: 1,\n domainMid: 1,\n align: 1,\n range: 1,\n rangeMax: 1,\n rangeMin: 1,\n scheme: 1,\n bins: 1,\n // Other properties\n reverse: 1,\n round: 1,\n // quantitative / time\n clamp: 1,\n nice: 1,\n // quantitative\n base: 1,\n exponent: 1,\n constant: 1,\n interpolate: 1,\n zero: 1, // zero depends on domain\n // band/point\n padding: 1,\n paddingInner: 1,\n paddingOuter: 1\n};\n\nexport const SCALE_PROPERTIES = keys(SCALE_PROPERTY_INDEX);\n\nconst {type, domain, range, rangeMax, rangeMin, scheme, ...NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTY_INDEX} =\n SCALE_PROPERTY_INDEX;\n\nexport const NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES = keys(NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTY_INDEX);\n\nexport function scaleTypeSupportProperty(scaleType: ScaleType, propName: keyof Scale): boolean {\n switch (propName) {\n case 'type':\n case 'domain':\n case 'reverse':\n case 'range':\n return true;\n case 'scheme':\n case 'interpolate':\n return !['point', 'band', 'identity'].includes(scaleType);\n case 'bins':\n return !['point', 'band', 'identity', 'ordinal'].includes(scaleType);\n case 'round':\n return isContinuousToContinuous(scaleType) || scaleType === 'band' || scaleType === 'point';\n case 'padding':\n case 'rangeMin':\n case 'rangeMax':\n return isContinuousToContinuous(scaleType) || ['point', 'band'].includes(scaleType);\n case 'paddingOuter':\n case 'align':\n return ['point', 'band'].includes(scaleType);\n case 'paddingInner':\n return scaleType === 'band';\n case 'domainMax':\n case 'domainMid':\n case 'domainMin':\n case 'clamp':\n return isContinuousToContinuous(scaleType);\n case 'nice':\n return isContinuousToContinuous(scaleType) || scaleType === 'quantize' || scaleType === 'threshold';\n case 'exponent':\n return scaleType === 'pow';\n case 'base':\n return scaleType === 'log';\n case 'constant':\n return scaleType === 'symlog';\n case 'zero':\n return (\n hasContinuousDomain(scaleType) &&\n !contains(\n [\n 'log', // log scale cannot have zero value\n 'time',\n 'utc', // zero is not meaningful for time\n 'threshold', // threshold requires custom domain so zero does not matter\n 'quantile' // quantile depends on distribution so zero does not matter\n ],\n scaleType\n )\n );\n }\n}\n\n/**\n * Returns undefined if the input channel supports the input scale property name\n */\nexport function channelScalePropertyIncompatability(channel: Channel, propName: keyof Scale): string {\n switch (propName) {\n case 'interpolate':\n case 'scheme':\n case 'domainMid':\n if (!isColorChannel(channel)) {\n return log.message.cannotUseScalePropertyWithNonColor(channel);\n }\n return undefined;\n case 'align':\n case 'type':\n case 'bins':\n case 'domain':\n case 'domainMax':\n case 'domainMin':\n case 'range':\n case 'base':\n case 'exponent':\n case 'constant':\n case 'nice':\n case 'padding':\n case 'paddingInner':\n case 'paddingOuter':\n case 'rangeMax':\n case 'rangeMin':\n case 'reverse':\n case 'round':\n case 'clamp':\n case 'zero':\n return undefined; // GOOD!\n }\n}\n\nexport function scaleTypeSupportDataType(specifiedType: ScaleType, fieldDefType: Type): boolean {\n if (contains([ORDINAL, NOMINAL], fieldDefType)) {\n return specifiedType === undefined || hasDiscreteDomain(specifiedType);\n } else if (fieldDefType === TEMPORAL) {\n return contains([ScaleType.TIME, ScaleType.UTC, undefined], specifiedType);\n } else if (fieldDefType === QUANTITATIVE) {\n return contains(\n [\n ScaleType.LOG,\n ScaleType.POW,\n ScaleType.SQRT,\n ScaleType.SYMLOG,\n ScaleType.QUANTILE,\n ScaleType.QUANTIZE,\n ScaleType.THRESHOLD,\n ScaleType.LINEAR,\n undefined\n ],\n specifiedType\n );\n }\n\n return true;\n}\n\nexport function channelSupportScaleType(channel: Channel, scaleType: ScaleType): boolean {\n if (!CHANNEL.isScaleChannel(channel)) {\n return false;\n }\n switch (channel) {\n case CHANNEL.X:\n case CHANNEL.Y:\n case CHANNEL.THETA:\n case CHANNEL.RADIUS:\n return isContinuousToContinuous(scaleType) || contains(['band', 'point'], scaleType);\n case CHANNEL.SIZE: // TODO: size and opacity can support ordinal with more modification\n case CHANNEL.STROKEWIDTH:\n case CHANNEL.OPACITY:\n case CHANNEL.FILLOPACITY:\n case CHANNEL.STROKEOPACITY:\n case CHANNEL.ANGLE:\n // Although it generally doesn't make sense to use band with size and opacity,\n // it can also work since we use band: 0.5 to get midpoint.\n return (\n isContinuousToContinuous(scaleType) ||\n isContinuousToDiscrete(scaleType) ||\n contains(['band', 'point', 'ordinal'], scaleType)\n );\n case CHANNEL.COLOR:\n case CHANNEL.FILL:\n case CHANNEL.STROKE:\n return scaleType !== 'band'; // band does not make sense with color\n case CHANNEL.STROKEDASH:\n case CHANNEL.SHAPE:\n return scaleType === 'ordinal' || isContinuousToDiscrete(scaleType);\n }\n}\n","import {Align, Color, Gradient, MarkConfig as VgMarkConfig, Orientation, SignalRef, TextBaseline} from 'vega';\nimport {toSet} from 'vega-util';\nimport {CompositeMark, CompositeMarkDef} from './compositemark';\nimport {ExprRef} from './expr';\nimport {Flag, keys} from './util';\nimport {MapExcludeValueRefAndReplaceSignalWith} from './vega.schema';\n\n/**\n * All types of primitive marks.\n */\nexport const Mark = {\n arc: 'arc',\n area: 'area',\n bar: 'bar',\n image: 'image',\n line: 'line',\n point: 'point',\n rect: 'rect',\n rule: 'rule',\n text: 'text',\n tick: 'tick',\n trail: 'trail',\n circle: 'circle',\n square: 'square',\n geoshape: 'geoshape'\n} as const;\n\nexport const ARC = Mark.arc;\nexport const AREA = Mark.area;\nexport const BAR = Mark.bar;\nexport const IMAGE = Mark.image;\nexport const LINE = Mark.line;\nexport const POINT = Mark.point;\nexport const RECT = Mark.rect;\nexport const RULE = Mark.rule;\nexport const TEXT = Mark.text;\nexport const TICK = Mark.tick;\nexport const TRAIL = Mark.trail;\nexport const CIRCLE = Mark.circle;\nexport const SQUARE = Mark.square;\nexport const GEOSHAPE = Mark.geoshape;\n\nexport type Mark = keyof typeof Mark;\n\nexport function isMark(m: string): m is Mark {\n return m in Mark;\n}\n\nexport function isPathMark(m: Mark | CompositeMark): m is 'line' | 'area' | 'trail' {\n return ['line', 'area', 'trail'].includes(m);\n}\n\nexport function isRectBasedMark(m: Mark | CompositeMark): m is 'rect' | 'bar' | 'image' | 'arc' {\n return ['rect', 'bar', 'image', 'arc' /* arc is rect/interval in polar coordinate */].includes(m);\n}\n\nexport const PRIMITIVE_MARKS = keys(Mark);\n\nexport interface ColorMixins {\n /**\n * Default color.\n *\n * __Default value:__ `\"#4682b4\"`\n *\n * __Note:__\n * - This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n * - The `fill` and `stroke` properties have higher precedence than `color` and will override `color`.\n */\n color?: Color | Gradient | ES;\n}\n\nexport interface TooltipContent {\n content: 'encoding' | 'data';\n}\n\n/** @hidden */\nexport type Hide = 'hide';\n\nexport interface VLOnlyMarkConfig extends ColorMixins {\n /**\n * Whether the mark's color should be used as fill color instead of stroke color.\n *\n * __Default value:__ `false` for all `point`, `line`, and `rule` marks as well as `geoshape` marks for [`graticule`](https://vega.github.io/vega-lite/docs/data.html#graticule) data sources; otherwise, `true`.\n *\n * __Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n *\n */\n filled?: boolean;\n\n /**\n * Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n * - If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n * - If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.\n */\n invalid?: 'filter' | Hide | null;\n\n /**\n * For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.\n */\n order?: null | boolean;\n\n /**\n * Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step.\n * If set to `0.5`, the marks will be positioned in the middle of the time unit band step.\n */\n timeUnitBandPosition?: number;\n\n /**\n * Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step.\n * If set to `0.5`, bandwidth of the marks will be half of the time unit band step.\n */\n timeUnitBandSize?: number;\n\n /**\n * The end angle of arc marks in radians. A value of 0 indicates up or “north”, increasing values proceed clockwise.\n */\n theta2?: number | ES; // In Vega, this is called endAngle\n\n /**\n * The secondary (inner) radius in pixels of arc marks.\n *\n * @minimum 0\n * __Default value:__ `0`\n */\n radius2?: number | ES; // In Vega, this is called innerRadius\n}\n\nexport interface MarkConfig\n extends VLOnlyMarkConfig,\n MapExcludeValueRefAndReplaceSignalWith, ES> {\n // ========== Overriding Vega ==========\n\n /**\n * The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n *\n * - If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n * - If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n * - If set to `null` or `false`, then no tooltip will be used.\n *\n * See the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite.\n *\n * __Default value:__ `null`\n */\n tooltip?: number | string | boolean | TooltipContent | ES | null; // VL has a special object form for tooltip content\n\n /**\n * Default size for marks.\n * - For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n * - For `bar`, this represents the band size of the bar, in pixels.\n * - For `text`, this represents the font size, in pixels.\n *\n * __Default value:__\n * - `30` for point, circle, square marks; width/height's `step`\n * - `2` for bar marks with discrete dimensions;\n * - `5` for bar marks with continuous dimensions;\n * - `11` for text marks.\n *\n * @minimum 0\n */\n size?: number | ES; // size works beyond symbol marks in VL\n\n /**\n * X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n *\n * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n */\n x?: number | 'width' | ES; // Vega doesn't have 'width'\n\n /**\n * Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n *\n * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n */\n y?: number | 'height' | ES; // Vega doesn't have 'height'\n\n /**\n * X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n *\n * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n */\n x2?: number | 'width' | ES; // Vega doesn't have 'width'\n\n /**\n * Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n *\n * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n */\n y2?: number | 'height' | ES; // Vega doesn't have 'height'\n\n /**\n * Default fill color. This property has higher precedence than `config.color`. Set to `null` to remove fill.\n *\n * __Default value:__ (None)\n *\n */\n fill?: Color | Gradient | null | ES; // docs: Vega doesn't have config.color\n\n /**\n * Default stroke color. This property has higher precedence than `config.color`. Set to `null` to remove stroke.\n *\n * __Default value:__ (None)\n *\n */\n stroke?: Color | Gradient | null | ES; // docs: Vega doesn't have config.color\n\n /**\n * The overall opacity (value between [0,1]).\n *\n * __Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.\n *\n * @minimum 0\n * @maximum 1\n */\n opacity?: number | ES; // docs (different defaults)\n\n /**\n * The orientation of a non-stacked bar, tick, area, and line charts.\n * The value is either horizontal (default) or vertical.\n * - For bar, rule and tick, this determines whether the size of the bar and tick\n * should be applied to x or y dimension.\n * - For area, this property determines the orient property of the Vega output.\n * - For line and trail marks, this property determines the sort order of the points in the line\n * if `config.sortLineBy` is not specified.\n * For stacked charts, this is always determined by the orientation of the stack;\n * therefore explicitly specified value will be ignored.\n */\n orient?: Orientation; // Vega orient doesn't apply to bar/tick/line. Since some logic depends on this property, Vega-Lite does NOT allow signal for orient.\n\n /**\n * The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of `\"left\"`, `\"right\"`, `\"center\"`.\n *\n * __Note:__ Expression reference is *not* supported for range marks.\n */\n align?: Align | ES;\n\n /**\n * For text marks, the vertical text baseline. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, `\"line-bottom\"`, or an expression reference that provides one of the valid values.\n * The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`,\n * but are calculated relative to the `lineHeight` rather than `fontSize` alone.\n *\n * For range marks, the vertical alignment of the marks. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n *\n * __Note:__ Expression reference is *not* supported for range marks.\n *\n */\n baseline?: TextBaseline | ES;\n\n /**\n * - For arc marks, the arc length in radians if theta2 is not specified, otherwise the start arc angle. (A value of 0 indicates up or “north”, increasing values proceed clockwise.)\n *\n * - For text marks, polar coordinate angle in radians.\n *\n * @minimum 0\n * @maximum 360\n */\n theta?: number | ES; // overriding VG\n\n /**\n *\n * For arc mark, the primary (outer) radius in pixels.\n *\n * For text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties.\n *\n * @minimum 0\n *\n * __Default value:__ `min(plot_width, plot_height)/2`\n */\n radius?: number | ES; // overriding VG\n\n /**\n * The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`.\n *\n * @minimum 0\n * __Default value:__ `0`\n */\n innerRadius?: number | ES;\n\n /**\n * The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n *\n * @minimum 0\n * __Default value:__ `0`\n */\n outerRadius?: number | ES;\n}\n\nexport interface RectBinSpacingMixins {\n /**\n * Offset between bars for binned field. The ideal value for this is either 0 (preferred by statisticians) or 1 (Vega-Lite default, D3 example style).\n *\n * __Default value:__ `1`\n *\n * @minimum 0\n */\n binSpacing?: number;\n}\n\nexport type AnyMark = CompositeMark | CompositeMarkDef | Mark | MarkDef;\n\nexport function isMarkDef(mark: string | GenericMarkDef): mark is GenericMarkDef {\n return mark['type'];\n}\n\nconst PRIMITIVE_MARK_INDEX = toSet(PRIMITIVE_MARKS);\n\nexport function isPrimitiveMark(mark: AnyMark): mark is Mark {\n const markType = isMarkDef(mark) ? mark.type : mark;\n return markType in PRIMITIVE_MARK_INDEX;\n}\n\nexport const STROKE_CONFIG = [\n 'stroke',\n 'strokeWidth',\n 'strokeDash',\n 'strokeDashOffset',\n 'strokeOpacity',\n 'strokeJoin',\n 'strokeMiterLimit'\n] as const;\n\nexport const FILL_CONFIG = ['fill', 'fillOpacity'] as const;\n\nexport const FILL_STROKE_CONFIG = [...STROKE_CONFIG, ...FILL_CONFIG];\n\nconst VL_ONLY_MARK_CONFIG_INDEX: Flag> = {\n color: 1,\n filled: 1,\n invalid: 1,\n order: 1,\n radius2: 1,\n theta2: 1,\n timeUnitBandSize: 1,\n timeUnitBandPosition: 1\n};\n\nexport const VL_ONLY_MARK_CONFIG_PROPERTIES = keys(VL_ONLY_MARK_CONFIG_INDEX);\n\nexport const VL_ONLY_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX: {\n [k in Mark]?: (keyof Required>[k])[];\n} = {\n area: ['line', 'point'],\n bar: ['binSpacing', 'continuousBandSize', 'discreteBandSize'],\n rect: ['binSpacing', 'continuousBandSize', 'discreteBandSize'],\n line: ['point'],\n tick: ['bandSize', 'thickness']\n};\n\nexport const defaultMarkConfig: MarkConfig = {\n color: '#4c78a8',\n invalid: 'filter',\n timeUnitBandSize: 1\n};\n\n// TODO: replace with MarkConfigMixins[Mark] once https://github.com/vega/ts-json-schema-generator/issues/344 is fixed\nexport type AnyMarkConfig =\n | MarkConfig\n | AreaConfig\n | BarConfig\n | RectConfig\n | LineConfig\n | TickConfig;\n\nexport interface MarkConfigMixins {\n /** Mark Config */\n mark?: MarkConfig;\n\n // MARK-SPECIFIC CONFIGS\n\n /** Arc-specific Config */\n arc?: RectConfig;\n\n /** Area-Specific Config */\n area?: AreaConfig;\n\n /** Bar-Specific Config */\n bar?: BarConfig;\n\n /** Circle-Specific Config */\n circle?: MarkConfig;\n\n /** Image-specific Config */\n image?: RectConfig;\n\n /** Line-Specific Config */\n line?: LineConfig;\n\n /** Point-Specific Config */\n point?: MarkConfig;\n\n /** Rect-Specific Config */\n rect?: RectConfig;\n\n /** Rule-Specific Config */\n rule?: MarkConfig;\n\n /** Square-Specific Config */\n square?: MarkConfig;\n\n /** Text-Specific Config */\n text?: MarkConfig;\n\n /** Tick-Specific Config */\n tick?: TickConfig;\n\n /** Trail-Specific Config */\n trail?: LineConfig;\n\n /** Geoshape-Specific Config */\n geoshape?: MarkConfig;\n}\n\nconst MARK_CONFIG_INDEX: Flag> = {\n mark: 1,\n arc: 1,\n area: 1,\n bar: 1,\n circle: 1,\n image: 1,\n line: 1,\n point: 1,\n rect: 1,\n rule: 1,\n square: 1,\n text: 1,\n tick: 1,\n trail: 1,\n geoshape: 1\n};\n\nexport const MARK_CONFIGS = keys(MARK_CONFIG_INDEX);\n\nexport interface RectConfig extends RectBinSpacingMixins, MarkConfig {\n /**\n * The default size of the bars on continuous scales.\n *\n * __Default value:__ `5`\n *\n * @minimum 0\n */\n continuousBandSize?: number;\n\n /**\n * The default size of the bars with discrete dimensions. If unspecified, the default size is `step-2`, which provides 2 pixel offset between bars.\n * @minimum 0\n */\n discreteBandSize?: number | RelativeBandSize;\n}\n\nexport type BandSize = number | RelativeBandSize | SignalRef;\n\nexport interface RelativeBandSize {\n /**\n * The relative band size. For example `0.5` means half of the band scale's band width.\n */\n band: number;\n}\n\nexport function isRelativeBandSize(o: number | RelativeBandSize | ExprRef | SignalRef): o is RelativeBandSize {\n return o && o['band'] != undefined;\n}\n\nexport const BAR_CORNER_RADIUS_INDEX: Partial<\n Record<\n Orientation,\n ('cornerRadiusTopLeft' | 'cornerRadiusTopRight' | 'cornerRadiusBottomLeft' | 'cornerRadiusBottomRight')[]\n >\n> = {\n horizontal: ['cornerRadiusTopRight', 'cornerRadiusBottomRight'],\n vertical: ['cornerRadiusTopLeft', 'cornerRadiusTopRight']\n};\n\nexport interface BarCornerRadiusMixins {\n /**\n * - For vertical bars, top-left and top-right corner radius.\n *\n * - For horizontal bars, top-right and bottom-right corner radius.\n */\n cornerRadiusEnd?: number | ES;\n}\n\nexport type BarConfig = RectConfig & BarCornerRadiusMixins;\n\nexport type OverlayMarkDef = MarkConfig & MarkDefMixins;\n\nexport interface PointOverlayMixins {\n /**\n * A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points.\n *\n * - If this property is `\"transparent\"`, transparent points will be used (for enhancing tooltips and selections).\n *\n * - If this property is an empty object (`{}`) or `true`, filled points with default properties will be used.\n *\n * - If this property is `false`, no points would be automatically added to line or area marks.\n *\n * __Default value:__ `false`.\n */\n point?: boolean | OverlayMarkDef | 'transparent';\n}\n\nexport interface LineConfig extends MarkConfig, PointOverlayMixins {}\n\nexport interface LineOverlayMixins {\n /**\n * A flag for overlaying line on top of area marks, or an object defining the properties of the overlayed lines.\n *\n * - If this value is an empty object (`{}`) or `true`, lines with default properties will be used.\n *\n * - If this value is `false`, no lines would be automatically added to area marks.\n *\n * __Default value:__ `false`.\n */\n line?: boolean | OverlayMarkDef;\n}\n\nexport interface AreaConfig\n extends MarkConfig,\n PointOverlayMixins,\n LineOverlayMixins {}\n\nexport interface TickThicknessMixins {\n /**\n * Thickness of the tick mark.\n *\n * __Default value:__ `1`\n *\n * @minimum 0\n */\n thickness?: number | SignalRef;\n}\n\nexport interface GenericMarkDef {\n /**\n * The mark type. This could a primitive mark type\n * (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n * `\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`)\n * or a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`).\n */\n type: M;\n}\n\nexport interface MarkDefMixins {\n /**\n * A string or array of strings indicating the name of custom styles to apply to the mark. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles. Any [mark properties](https://vega.github.io/vega-lite/docs/encoding.html#mark-prop) explicitly defined within the `encoding` will override a style default.\n *\n * __Default value:__ The mark's name. For example, a bar mark will have style `\"bar\"` by default.\n * __Note:__ Any specified style will augment the default style. For example, a bar mark with `\"style\": \"foo\"` will receive from `config.style.bar` and `config.style.foo` (the specified style `\"foo\"` has higher precedence).\n */\n style?: string | string[];\n\n /**\n * Whether a mark be clipped to the enclosing group’s width and height.\n */\n clip?: boolean;\n\n // Offset properties should not be a part of config\n\n /**\n * Offset for x-position.\n */\n xOffset?: number | ES;\n\n /**\n * Offset for y-position.\n */\n yOffset?: number | ES;\n\n /**\n * Offset for x2-position.\n */\n x2Offset?: number | ES;\n\n /**\n * Offset for y2-position.\n */\n y2Offset?: number | ES;\n\n /**\n * Offset for theta.\n */\n thetaOffset?: number | ES;\n\n /**\n * Offset for theta2.\n */\n theta2Offset?: number | ES;\n\n /**\n * Offset for radius.\n */\n radiusOffset?: number | ES;\n\n /**\n * Offset for radius2.\n */\n radius2Offset?: number | ES;\n}\n\nexport interface RelativeBandSize {\n /**\n * The relative band size. For example `0.5` means half of the band scale's band width.\n */\n band: number;\n}\n\n// Point/Line OverlayMixins are only for area, line, and trail but we don't want to declare multiple types of MarkDef\nexport interface MarkDef<\n M extends string | Mark = Mark,\n ES extends ExprRef | SignalRef = ExprRef | SignalRef\n> extends GenericMarkDef,\n Omit<\n MarkConfig &\n AreaConfig &\n BarConfig & // always extends RectConfig\n LineConfig &\n TickConfig,\n 'startAngle' | 'endAngle' | 'width' | 'height'\n >,\n MarkDefMixins {\n // Omit startAngle/endAngle since we use theta/theta2 from Vega-Lite schema to avoid confusion\n // We still support start/endAngle only in config, just in case people use Vega config with Vega-Lite.\n\n /**\n * @hidden\n */\n startAngle?: number | ES;\n /**\n * @hidden\n */\n endAngle?: number | ES;\n\n // Replace width / height to include relative band size\n\n /**\n * Width of the marks. One of:\n *\n * - A number representing a fixed pixel width.\n *\n * - A relative band size definition. For example, `{band: 0.5}` represents half of the band.\n */\n width?: number | ES | RelativeBandSize;\n\n /**\n * Height of the marks. One of:\n *\n * - A number representing a fixed pixel height.\n *\n * - A relative band size definition. For example, `{band: 0.5}` represents half of the band\n */\n height?: number | ES | RelativeBandSize;\n}\n\nconst DEFAULT_RECT_BAND_SIZE = 5;\n\nexport const defaultBarConfig: RectConfig = {\n binSpacing: 1,\n continuousBandSize: DEFAULT_RECT_BAND_SIZE,\n timeUnitBandPosition: 0.5\n};\n\nexport const defaultRectConfig: RectConfig = {\n binSpacing: 0,\n continuousBandSize: DEFAULT_RECT_BAND_SIZE,\n timeUnitBandPosition: 0.5\n};\n\nexport interface TickConfig extends MarkConfig, TickThicknessMixins {\n /**\n * The width of the ticks.\n *\n * __Default value:__ 3/4 of step (width step for horizontal ticks and height step for vertical ticks).\n * @minimum 0\n */\n bandSize?: number;\n}\n\nexport const defaultTickConfig: TickConfig = {\n thickness: 1\n};\n\nexport function getMarkType(m: string | GenericMarkDef) {\n return isMarkDef(m) ? m.type : m;\n}\n","/**\n * Utility files for producing Vega ValueRef for marks\n */\nimport {SignalRef} from 'vega';\nimport {isFunction, isString} from 'vega-util';\nimport {isCountingAggregateOp} from '../../../aggregate';\nimport {isBinned, isBinning} from '../../../bin';\nimport {Channel, getMainRangeChannel, PolarPositionChannel, PositionChannel, X, X2, Y2} from '../../../channel';\nimport {\n binRequiresRange,\n ChannelDef,\n DatumDef,\n FieldDef,\n FieldDefBase,\n FieldName,\n FieldRefOption,\n getBandPosition,\n isDatumDef,\n isFieldDef,\n isFieldOrDatumDef,\n isTypedFieldDef,\n isValueDef,\n SecondaryChannelDef,\n SecondaryFieldDef,\n TypedFieldDef,\n Value,\n vgField\n} from '../../../channeldef';\nimport {Config} from '../../../config';\nimport {dateTimeToExpr, isDateTime} from '../../../datetime';\nimport {isExprRef} from '../../../expr';\nimport * as log from '../../../log';\nimport {isPathMark, Mark, MarkDef} from '../../../mark';\nimport {fieldValidPredicate} from '../../../predicate';\nimport {hasDiscreteDomain, isContinuousToContinuous} from '../../../scale';\nimport {StackProperties} from '../../../stack';\nimport {TEMPORAL} from '../../../type';\nimport {contains, stringify} from '../../../util';\nimport {isSignalRef, VgValueRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {ScaleComponent} from '../../scale/component';\n\nexport function midPointRefWithPositionInvalidTest(\n params: MidPointParams & {\n channel: PositionChannel | PolarPositionChannel;\n }\n) {\n const {channel, channelDef, markDef, scale, config} = params;\n const ref = midPoint(params);\n\n // Wrap to check if the positional value is invalid, if so, plot the point on the min value\n if (\n // Only this for field def without counting aggregate (as count wouldn't be null)\n isFieldDef(channelDef) &&\n !isCountingAggregateOp(channelDef.aggregate) &&\n // and only for continuous scale without zero (otherwise, null / invalid will be interpreted as zero, which doesn't cause layout problem)\n scale &&\n isContinuousToContinuous(scale.get('type')) &&\n scale.get('zero') === false\n ) {\n return wrapPositionInvalidTest({\n fieldDef: channelDef,\n channel,\n markDef,\n ref,\n config\n });\n }\n return ref;\n}\n\nexport function wrapPositionInvalidTest({\n fieldDef,\n channel,\n markDef,\n ref,\n config\n}: {\n fieldDef: FieldDef;\n channel: PositionChannel | PolarPositionChannel;\n markDef: MarkDef;\n ref: VgValueRef;\n config: Config;\n}): VgValueRef | VgValueRef[] {\n if (isPathMark(markDef.type)) {\n // path mark already use defined to skip points, no need to do it here.\n return ref;\n }\n\n const invalid = getMarkPropOrConfig('invalid', markDef, config);\n if (invalid === null) {\n // if there is no invalid filter, don't do the invalid test\n return ref;\n }\n\n return [fieldInvalidTestValueRef(fieldDef, channel), ref];\n}\n\nexport function fieldInvalidTestValueRef(fieldDef: FieldDef, channel: PositionChannel | PolarPositionChannel) {\n const test = fieldInvalidPredicate(fieldDef, true);\n\n const mainChannel = getMainRangeChannel(channel) as PositionChannel | PolarPositionChannel; // we can cast here as the output can't be other things.\n const zeroValueRef =\n mainChannel === 'y'\n ? {field: {group: 'height'}}\n : // x / angle / radius can all use 0\n {value: 0};\n\n return {test, ...zeroValueRef};\n}\n\nexport function fieldInvalidPredicate(field: FieldName | FieldDef, invalid = true) {\n return fieldValidPredicate(isString(field) ? field : vgField(field, {expr: 'datum'}), !invalid);\n}\n\nexport function datumDefToExpr(datumDef: DatumDef) {\n const {datum} = datumDef;\n if (isDateTime(datum)) {\n return dateTimeToExpr(datum);\n }\n return `${stringify(datum)}`;\n}\n\nexport function valueRefForFieldOrDatumDef(\n fieldDef: FieldDefBase | DatumDef,\n scaleName: string,\n opt: FieldRefOption,\n encode: {offset?: number | VgValueRef; band?: number | boolean | SignalRef}\n): VgValueRef {\n const ref: VgValueRef = {};\n\n if (scaleName) {\n ref.scale = scaleName;\n }\n\n if (isDatumDef(fieldDef)) {\n const {datum} = fieldDef;\n if (isDateTime(datum)) {\n ref.signal = dateTimeToExpr(datum);\n } else if (isSignalRef(datum)) {\n ref.signal = datum.signal;\n } else if (isExprRef(datum)) {\n ref.signal = datum.expr;\n } else {\n ref.value = datum;\n }\n } else {\n ref.field = vgField(fieldDef, opt);\n }\n\n if (encode) {\n const {offset, band} = encode;\n if (offset) {\n ref.offset = offset;\n }\n if (band) {\n ref.band = band;\n }\n }\n return ref;\n}\n\n/**\n * Signal that returns the middle of a bin from start and end field. Should only be used with x and y.\n */\nexport function interpolatedSignalRef({\n scaleName,\n fieldOrDatumDef,\n fieldOrDatumDef2,\n offset,\n startSuffix,\n bandPosition = 0.5\n}: {\n scaleName: string;\n fieldOrDatumDef: TypedFieldDef;\n fieldOrDatumDef2?: SecondaryFieldDef;\n startSuffix?: string;\n offset: number | SignalRef;\n bandPosition: number | SignalRef;\n}): VgValueRef {\n const expr = 0 < bandPosition && bandPosition < 1 ? 'datum' : undefined;\n const start = vgField(fieldOrDatumDef, {expr, suffix: startSuffix});\n const end =\n fieldOrDatumDef2 !== undefined\n ? vgField(fieldOrDatumDef2, {expr})\n : vgField(fieldOrDatumDef, {suffix: 'end', expr});\n\n const ref: VgValueRef = {};\n\n if (bandPosition === 0 || bandPosition === 1) {\n ref.scale = scaleName;\n const val = bandPosition === 0 ? start : end;\n ref.field = val;\n } else {\n const datum = isSignalRef(bandPosition)\n ? `${bandPosition.signal} * ${start} + (1-${bandPosition.signal}) * ${end}`\n : `${bandPosition} * ${start} + ${1 - bandPosition} * ${end}`;\n ref.signal = `scale(\"${scaleName}\", ${datum})`;\n }\n\n if (offset) {\n ref.offset = offset;\n }\n return ref;\n}\n\nexport interface MidPointParams {\n channel: Channel;\n channelDef: ChannelDef;\n channel2Def?: SecondaryChannelDef;\n\n markDef: MarkDef;\n config: Config;\n\n scaleName: string;\n scale: ScaleComponent;\n stack?: StackProperties;\n offset?: number | SignalRef;\n defaultRef: VgValueRef | (() => VgValueRef);\n\n bandPosition?: number | SignalRef;\n}\n\n/**\n * @returns {VgValueRef} Value Ref for xc / yc or mid point for other channels.\n */\nexport function midPoint({\n channel,\n channelDef,\n channel2Def,\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef,\n bandPosition\n}: MidPointParams): VgValueRef {\n // TODO: datum support\n if (channelDef) {\n /* istanbul ignore else */\n\n if (isFieldOrDatumDef(channelDef)) {\n if (isTypedFieldDef(channelDef)) {\n bandPosition ??= getBandPosition({\n fieldDef: channelDef,\n fieldDef2: channel2Def,\n markDef,\n config\n });\n const {bin, timeUnit, type} = channelDef;\n\n if (isBinning(bin) || (bandPosition && timeUnit && type === TEMPORAL)) {\n // Use middle only for x an y to place marks in the center between start and end of the bin range.\n // We do not use the mid point for other channels (e.g. size) so that properties of legends and marks match.\n if (stack?.impute) {\n // For stack, we computed bin_mid so we can impute.\n return valueRefForFieldOrDatumDef(channelDef, scaleName, {binSuffix: 'mid'}, {offset});\n }\n\n if (bandPosition) {\n // if band = 0, no need to call interpolation\n // For non-stack, we can just calculate bin mid on the fly using signal.\n return interpolatedSignalRef({scaleName, fieldOrDatumDef: channelDef, bandPosition, offset});\n }\n return valueRefForFieldOrDatumDef(\n channelDef,\n scaleName,\n binRequiresRange(channelDef, channel) ? {binSuffix: 'range'} : {},\n {\n offset\n }\n );\n } else if (isBinned(bin)) {\n if (isFieldDef(channel2Def)) {\n return interpolatedSignalRef({\n scaleName,\n fieldOrDatumDef: channelDef,\n fieldOrDatumDef2: channel2Def,\n bandPosition,\n offset\n });\n } else {\n const channel2 = channel === X ? X2 : Y2;\n log.warn(log.message.channelRequiredForBinned(channel2));\n }\n }\n }\n\n const scaleType = scale?.get('type');\n return valueRefForFieldOrDatumDef(\n channelDef,\n scaleName,\n hasDiscreteDomain(scaleType) ? {binSuffix: 'range'} : {}, // no need for bin suffix if there is no scale\n {\n offset,\n // For band, to get mid point, need to offset by half of the band\n band: scaleType === 'band' ? bandPosition ?? channelDef.bandPosition ?? 0.5 : undefined\n }\n );\n } else if (isValueDef(channelDef)) {\n const value = channelDef.value;\n const offsetMixins = offset ? {offset} : {};\n\n return {...widthHeightValueOrSignalRef(channel, value), ...offsetMixins};\n }\n\n // If channelDef is neither field def or value def, it's a condition-only def.\n // In such case, we will use default ref.\n }\n\n if (isFunction(defaultRef)) {\n defaultRef = defaultRef();\n }\n\n if (defaultRef) {\n // for non-position, ref could be undefined.\n return {\n ...defaultRef,\n // only include offset when it is non-zero (zero = no offset)\n ...(offset ? {offset} : {})\n };\n }\n return defaultRef;\n}\n\n/**\n * Convert special \"width\" and \"height\" values in Vega-Lite into Vega value ref.\n */\nexport function widthHeightValueOrSignalRef(channel: Channel, value: Value | SignalRef) {\n if (contains(['x', 'x2'], channel) && value === 'width') {\n return {field: {group: 'width'}};\n } else if (contains(['y', 'y2'], channel) && value === 'height') {\n return {field: {group: 'height'}};\n }\n return signalOrValueRef(value);\n}\n","import {SignalRef} from 'vega';\nimport {isString} from 'vega-util';\nimport {isBinning} from '../bin';\nimport {\n channelDefType,\n DatumDef,\n FieldDef,\n isFieldDef,\n isFieldOrDatumDefForTimeFormat,\n isScaleFieldDef,\n vgField\n} from '../channeldef';\nimport {Config} from '../config';\nimport {fieldValidPredicate} from '../predicate';\nimport {ScaleType} from '../scale';\nimport {formatExpression, normalizeTimeUnit, timeUnitSpecifierExpression} from '../timeunit';\nimport {QUANTITATIVE, Type} from '../type';\nimport {Dict, stringify} from '../util';\nimport {isSignalRef} from '../vega.schema';\nimport {TimeUnit} from './../timeunit';\nimport {datumDefToExpr} from './mark/encode/valueref';\n\nexport function isCustomFormatType(formatType: string) {\n return formatType && formatType !== 'number' && formatType !== 'time';\n}\n\nfunction customFormatExpr(formatType: string, field: string, format: string | Dict) {\n return `${formatType}(${field}${format ? `, ${stringify(format)}` : ''})`;\n}\n\nexport const BIN_RANGE_DELIMITER = ' \\u2013 ';\n\nexport function formatSignalRef({\n fieldOrDatumDef,\n format,\n formatType,\n expr,\n normalizeStack,\n config\n}: {\n fieldOrDatumDef: FieldDef | DatumDef;\n format: string | Dict;\n formatType: string;\n expr?: 'datum' | 'parent' | 'datum.datum';\n normalizeStack?: boolean;\n config: Config;\n}) {\n if (isCustomFormatType(formatType)) {\n return formatCustomType({\n fieldOrDatumDef,\n format,\n formatType,\n expr,\n config\n });\n }\n\n const field = fieldToFormat(fieldOrDatumDef, expr, normalizeStack);\n\n if (isFieldOrDatumDefForTimeFormat(fieldOrDatumDef)) {\n const signal = timeFormatExpression(\n field,\n isFieldDef(fieldOrDatumDef) ? normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit : undefined,\n format,\n config.timeFormat,\n isScaleFieldDef(fieldOrDatumDef) && fieldOrDatumDef.scale?.type === ScaleType.UTC\n );\n return signal ? {signal} : undefined;\n }\n\n format = numberFormat(channelDefType(fieldOrDatumDef), format, config);\n if (isFieldDef(fieldOrDatumDef) && isBinning(fieldOrDatumDef.bin)) {\n const endField = vgField(fieldOrDatumDef, {expr, binSuffix: 'end'});\n return {\n signal: binFormatExpression(field, endField, format, formatType, config)\n };\n } else if (format || channelDefType(fieldOrDatumDef) === 'quantitative') {\n return {\n signal: `${formatExpr(field, format)}`\n };\n } else {\n return {signal: `isValid(${field}) ? ${field} : \"\"+${field}`};\n }\n}\n\nfunction fieldToFormat(\n fieldOrDatumDef: FieldDef | DatumDef,\n expr: 'datum' | 'parent' | 'datum.datum',\n normalizeStack: boolean\n) {\n if (isFieldDef(fieldOrDatumDef)) {\n if (normalizeStack) {\n return `${vgField(fieldOrDatumDef, {expr, suffix: 'end'})}-${vgField(fieldOrDatumDef, {\n expr,\n suffix: 'start'\n })}`;\n } else {\n return vgField(fieldOrDatumDef, {expr});\n }\n } else {\n return datumDefToExpr(fieldOrDatumDef);\n }\n}\n\nexport function formatCustomType({\n fieldOrDatumDef,\n format,\n formatType,\n expr,\n normalizeStack,\n config,\n field\n}: {\n fieldOrDatumDef: FieldDef | DatumDef;\n format: string | Dict;\n formatType: string;\n expr?: 'datum' | 'parent' | 'datum.datum';\n normalizeStack?: boolean;\n config: Config;\n field?: string; // axis/legend \"use datum.value\"\n}) {\n field ??= fieldToFormat(fieldOrDatumDef, expr, normalizeStack);\n\n if (isFieldDef(fieldOrDatumDef) && isBinning(fieldOrDatumDef.bin)) {\n const endField = vgField(fieldOrDatumDef, {expr, binSuffix: 'end'});\n return {\n signal: binFormatExpression(field, endField, format, formatType, config)\n };\n }\n return {signal: customFormatExpr(formatType, field, format)};\n}\n\nexport function guideFormat(\n fieldOrDatumDef: FieldDef | DatumDef,\n type: Type,\n format: string | Dict,\n formatType: string,\n config: Config,\n omitTimeFormatConfig: boolean // axis doesn't use config.timeFormat\n) {\n if (isCustomFormatType(formatType)) {\n return undefined; // handled in encode block\n }\n\n if (isFieldOrDatumDefForTimeFormat(fieldOrDatumDef)) {\n const timeUnit = isFieldDef(fieldOrDatumDef) ? normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit : undefined;\n\n return timeFormat(format as string, timeUnit, config, omitTimeFormatConfig);\n }\n\n return numberFormat(type, format, config);\n}\n\nexport function guideFormatType(\n formatType: string | SignalRef,\n fieldOrDatumDef: FieldDef | DatumDef,\n scaleType: ScaleType\n) {\n if (formatType && (isSignalRef(formatType) || formatType === 'number' || formatType === 'time')) {\n return formatType;\n }\n if (isFieldOrDatumDefForTimeFormat(fieldOrDatumDef) && scaleType !== 'time' && scaleType !== 'utc') {\n return 'time';\n }\n return undefined;\n}\n\n/**\n * Returns number format for a fieldDef.\n */\nexport function numberFormat(type: Type, specifiedFormat: string | Dict, config: Config) {\n // Specified format in axis/legend has higher precedence than fieldDef.format\n if (isString(specifiedFormat)) {\n return specifiedFormat;\n }\n\n if (type === QUANTITATIVE) {\n // we only apply the default if the field is quantitative\n return config.numberFormat;\n }\n return undefined;\n}\n\n/**\n * Returns time format for a fieldDef for use in guides.\n */\nexport function timeFormat(specifiedFormat: string, timeUnit: TimeUnit, config: Config, omitTimeFormatConfig: boolean) {\n if (specifiedFormat) {\n return specifiedFormat;\n }\n\n if (timeUnit) {\n return {\n signal: timeUnitSpecifierExpression(timeUnit)\n };\n }\n\n return omitTimeFormatConfig ? undefined : config.timeFormat;\n}\n\nfunction formatExpr(field: string, format: string) {\n return `format(${field}, \"${format || ''}\")`;\n}\n\nfunction binNumberFormatExpr(field: string, format: string | Dict, formatType: string, config: Config) {\n if (isCustomFormatType(formatType)) {\n return customFormatExpr(formatType, field, format);\n }\n\n return formatExpr(field, (isString(format) ? format : undefined) ?? config.numberFormat);\n}\n\nexport function binFormatExpression(\n startField: string,\n endField: string,\n format: string | Dict,\n formatType: string,\n config: Config\n) {\n const start = binNumberFormatExpr(startField, format, formatType, config);\n const end = binNumberFormatExpr(endField, format, formatType, config);\n return `${fieldValidPredicate(startField, false)} ? \"null\" : ${start} + \"${BIN_RANGE_DELIMITER}\" + ${end}`;\n}\n\n/**\n * Returns the time expression used for axis/legend labels or text mark for a temporal field\n */\nexport function timeFormatExpression(\n field: string,\n timeUnit: TimeUnit,\n format: string | Dict,\n rawTimeFormat: string, // should be provided only for actual text and headers, not axis/legend labels\n isUTCScale: boolean\n): string {\n if (!timeUnit || format) {\n // If there is no time unit, or if user explicitly specifies format for axis/legend/text.\n format = isString(format) ? format : rawTimeFormat; // only use provided timeFormat if there is no timeUnit.\n return `${isUTCScale ? 'utc' : 'time'}Format(${field}, '${format}')`;\n } else {\n return formatExpression(timeUnit, field, isUTCScale);\n }\n}\n","import {isArray} from 'vega-util';\nimport {NonArgAggregateOp} from './aggregate';\nimport {FieldName} from './channeldef';\nimport {DateTime} from './datetime';\n\nexport type SortOrder = 'ascending' | 'descending';\n\n/**\n * A sort definition for transform\n */\nexport interface SortField {\n /**\n * The name of the field to sort.\n */\n field: FieldName;\n\n /**\n * Whether to sort the field in ascending or descending order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort).\n */\n order?: SortOrder | null;\n}\n\nexport interface SortFields {\n field: FieldName[];\n order?: SortOrder[];\n}\n\nexport const DEFAULT_SORT_OP = 'min';\n\n/**\n * A sort definition for sorting a discrete scale in an encoding field definition.\n */\n\nexport interface EncodingSortField {\n /**\n * The data [field](https://vega.github.io/vega-lite/docs/field.html) to sort by.\n *\n * __Default value:__ If unspecified, defaults to the field specified in the outer data reference.\n */\n field?: F; // Field is optional because `\"op\": \"count\"` does not require a field.\n /**\n * An [aggregate operation](https://vega.github.io/vega-lite/docs/aggregate.html#ops) to perform on the field prior to sorting (e.g., `\"count\"`, `\"mean\"` and `\"median\"`).\n * An aggregation is required when there are multiple values of the sort field for each encoded data field.\n * The input data objects will be aggregated, grouped by the encoded data field.\n *\n * For a full list of operations, please see the documentation for [aggregate](https://vega.github.io/vega-lite/docs/aggregate.html#ops).\n *\n * __Default value:__ `\"sum\"` for stacked plots. Otherwise, `\"min\"`.\n */\n op?: NonArgAggregateOp;\n\n /**\n * The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort).\n */\n order?: SortOrder | null;\n}\n\nexport interface SortByEncoding {\n /**\n * The [encoding channel](https://vega.github.io/vega-lite/docs/encoding.html#channels) to sort by (e.g., `\"x\"`, `\"y\"`)\n */\n encoding: SortByChannel;\n\n /**\n * The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort).\n */\n order?: SortOrder | null;\n}\n\nexport type SortArray = number[] | string[] | boolean[] | DateTime[];\n\nconst SORT_BY_CHANNEL_INDEX = {\n x: 1,\n y: 1,\n color: 1,\n fill: 1,\n stroke: 1,\n strokeWidth: 1,\n size: 1,\n shape: 1,\n fillOpacity: 1,\n strokeOpacity: 1,\n opacity: 1,\n text: 1\n} as const;\n\nexport type SortByChannel = keyof typeof SORT_BY_CHANNEL_INDEX;\n\nexport function isSortByChannel(c: string): c is SortByChannel {\n return c in SORT_BY_CHANNEL_INDEX;\n}\n\nexport type SortByChannelDesc =\n | '-x'\n | '-y'\n | '-color'\n | '-fill'\n | '-stroke'\n | '-strokeWidth'\n | '-size'\n | '-shape'\n | '-fillOpacity'\n | '-strokeOpacity'\n | '-opacity'\n | '-text';\n\nexport type AllSortString = SortOrder | SortByChannel | SortByChannelDesc;\n\nexport type Sort = SortArray | AllSortString | EncodingSortField | SortByEncoding | null;\n\nexport function isSortByEncoding(sort: Sort): sort is SortByEncoding {\n return !!sort && !!sort['encoding'];\n}\n\nexport function isSortField(sort: Sort): sort is EncodingSortField {\n return !!sort && (sort['op'] === 'count' || !!sort['field']);\n}\n\nexport function isSortArray(sort: Sort): sort is SortArray {\n return !!sort && isArray(sort);\n}\n","import {LayoutAlign, SignalRef} from 'vega';\nimport {BinParams} from '../bin';\nimport {ChannelDef, Field, FieldName, TypedFieldDef} from '../channeldef';\nimport {ExprRef} from '../expr';\nimport {Header} from '../header';\nimport {EncodingSortField, SortArray, SortOrder} from '../sort';\nimport {StandardType} from '../type';\nimport {BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins} from './base';\nimport {GenericLayerSpec, NormalizedLayerSpec} from './layer';\nimport {GenericUnitSpec, NormalizedUnitSpec} from './unit';\n\nexport interface FacetFieldDef\n extends TypedFieldDef {\n /**\n * An object defining properties of a facet's header.\n */\n header?: Header | null;\n\n // Note: `\"sort\"` for facet field def is different from encoding field def as it does not support `SortByEncoding`\n\n /**\n * Sort order for the encoded field.\n *\n * For continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n *\n * For discrete fields, `sort` can be one of the following:\n * - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n * - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n * - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n * - `null` indicating no sort.\n *\n * __Default value:__ `\"ascending\"`\n *\n * __Note:__ `null` is not supported for `row` and `column`.\n */\n sort?: SortArray | SortOrder | EncodingSortField | null;\n}\n\nexport type FacetEncodingFieldDef<\n F extends Field,\n ES extends ExprRef | SignalRef = ExprRef | SignalRef\n> = FacetFieldDef & GenericCompositionLayoutWithColumns;\n\nexport interface RowColumnEncodingFieldDef\n extends FacetFieldDef {\n // Manually declarae this separated from GenericCompositionLayout as we don't support RowCol object in RowColumnEncodingFieldDef\n\n /**\n * The alignment to apply to row/column facet's subplot.\n * The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n *\n * - For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n * - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n * - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n *\n * __Default value:__ `\"all\"`.\n */\n align?: LayoutAlign;\n\n /**\n * Boolean flag indicating if facet's subviews should be centered relative to their respective rows or columns.\n *\n * __Default value:__ `false`\n */\n center?: boolean;\n\n /**\n * The spacing in pixels between facet's sub-views.\n *\n * __Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)\n */\n spacing?: number;\n}\n\nexport interface FacetMapping<\n F extends Field,\n FD extends FacetFieldDef = FacetFieldDef\n> {\n /**\n * A field definition for the vertical facet of trellis plots.\n */\n row?: FD;\n\n /**\n * A field definition for the horizontal facet of trellis plots.\n */\n column?: FD;\n}\n\nexport function isFacetMapping(\n f: FacetFieldDef | FacetMapping\n): f is FacetMapping {\n return 'row' in f || 'column' in f;\n}\n\n/**\n * Facet mapping for encoding macro\n */\nexport interface EncodingFacetMapping\n extends FacetMapping> {\n /**\n * A field definition for the (flexible) facet of trellis plots.\n *\n * If either `row` or `column` is specified, this channel will be ignored.\n */\n facet?: FacetEncodingFieldDef;\n}\n\nexport function isFacetFieldDef(channelDef: ChannelDef): channelDef is FacetFieldDef {\n return !!channelDef && 'header' in channelDef;\n}\n\n/**\n * Base interface for a facet specification.\n */\nexport interface GenericFacetSpec, L extends GenericLayerSpec, F extends Field>\n extends BaseSpec,\n GenericCompositionLayoutWithColumns,\n ResolveMixins {\n /**\n * Definition for how to facet the data. One of:\n * 1) [a field definition for faceting the plot by one field](https://vega.github.io/vega-lite/docs/facet.html#field-def)\n * 2) [An object that maps `row` and `column` channels to their field definitions](https://vega.github.io/vega-lite/docs/facet.html#mapping)\n */\n facet: FacetFieldDef | FacetMapping;\n\n /**\n * A specification of the view that gets faceted.\n */\n spec: L | U;\n // TODO: replace this with GenericSpec once we support all cases;\n}\n\n/**\n * A facet specification without any shortcut / expansion syntax\n */\nexport type NormalizedFacetSpec = GenericFacetSpec;\n\nexport function isFacetSpec(spec: BaseSpec): spec is GenericFacetSpec {\n return 'facet' in spec;\n}\n","import {Gradient, ScaleType, SignalRef, Text} from 'vega';\nimport {isArray, isBoolean, isNumber, isString} from 'vega-util';\nimport {Aggregate, isAggregateOp, isArgmaxDef, isArgminDef, isCountingAggregateOp} from './aggregate';\nimport {Axis} from './axis';\nimport {autoMaxBins, Bin, BinParams, binToString, isBinned, isBinning} from './bin';\nimport {\n ANGLE,\n Channel,\n COLOR,\n COLUMN,\n DESCRIPTION,\n DETAIL,\n ExtendedChannel,\n FACET,\n FILL,\n FILLOPACITY,\n getSizeChannel,\n HREF,\n isScaleChannel,\n isSecondaryRangeChannel,\n isXorY,\n KEY,\n LATITUDE,\n LATITUDE2,\n LONGITUDE,\n LONGITUDE2,\n OPACITY,\n ORDER,\n PolarPositionScaleChannel,\n PositionScaleChannel,\n RADIUS,\n RADIUS2,\n ROW,\n SHAPE,\n SIZE,\n STROKE,\n STROKEDASH,\n STROKEOPACITY,\n STROKEWIDTH,\n TEXT,\n THETA,\n THETA2,\n TOOLTIP,\n URL,\n X,\n X2,\n Y,\n Y2\n} from './channel';\nimport {getMarkConfig, getMarkPropOrConfig} from './compile/common';\nimport {isCustomFormatType} from './compile/format';\nimport {CompositeAggregate} from './compositemark';\nimport {Config} from './config';\nimport {DateTime, dateTimeToExpr, isDateTime} from './datetime';\nimport {Encoding} from './encoding';\nimport {ExprRef, isExprRef} from './expr';\nimport {Guide, GuideEncodingConditionalValueDef, TitleMixins} from './guide';\nimport {ImputeParams} from './impute';\nimport {Legend} from './legend';\nimport * as log from './log';\nimport {LogicalComposition} from './logical';\nimport {isRectBasedMark, Mark, MarkDef, RelativeBandSize} from './mark';\nimport {ParameterPredicate, Predicate} from './predicate';\nimport {hasDiscreteDomain, isContinuousToDiscrete, Scale, SCALE_CATEGORY_INDEX} from './scale';\nimport {isSortByChannel, Sort, SortOrder} from './sort';\nimport {isFacetFieldDef} from './spec/facet';\nimport {StackOffset} from './stack';\nimport {\n getTimeUnitParts,\n isLocalSingleTimeUnit,\n normalizeTimeUnit,\n TimeUnit,\n TimeUnitParams,\n timeUnitToString\n} from './timeunit';\nimport {AggregatedFieldDef, WindowFieldDef} from './transform';\nimport {getFullName, QUANTITATIVE, StandardType, Type} from './type';\nimport {\n Dict,\n flatAccessWithDatum,\n getFirstDefined,\n internalField,\n omit,\n removePathFromField,\n replacePathInField,\n stringify,\n titleCase\n} from './util';\nimport {isSignalRef} from './vega.schema';\n\nexport type PrimitiveValue = number | string | boolean | null;\n\nexport type Value =\n | PrimitiveValue\n | number[]\n | Gradient\n | Text\n | ES;\n\n/**\n * Definition object for a constant value (primitive value or gradient definition) of an encoding channel.\n */\nexport interface ValueDef {\n /**\n * A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).\n */\n value: V;\n}\n\nexport type PositionValueDef = ValueDef;\nexport type NumericValueDef = ValueDef;\n\n/**\n * A ValueDef with Condition where either the condition or the value are optional.\n * {\n * condition: {field: ...} | {value: ...},\n * value: ...,\n * }\n */\n\n/**\n * @minProperties 1\n */\nexport type ValueDefWithCondition | DatumDef, V extends Value = Value> = Partial<\n ValueDef\n> & {\n /**\n * A field definition or one or more value definition(s) with a parameter predicate.\n */\n condition?:\n | Conditional\n | Conditional>\n | Conditional>[];\n};\n\nexport type StringValueDefWithCondition = ValueDefWithCondition<\n MarkPropFieldOrDatumDef,\n string | null\n>;\nexport type TypeForShape = 'nominal' | 'ordinal' | 'geojson';\n\nexport type Conditional | DatumDef | ValueDef | ExprRef | SignalRef> =\n | ConditionalPredicate\n | ConditionalParameter;\n\nexport type ConditionalPredicate | DatumDef | ValueDef | ExprRef | SignalRef> = {\n /**\n * Predicate for triggering the condition\n */\n test: LogicalComposition;\n} & CD;\n\nexport type ConditionalParameter | DatumDef | ValueDef | ExprRef | SignalRef> =\n ParameterPredicate & CD;\n\nexport function isConditionalParameter(c: Conditional): c is ConditionalParameter {\n return c['param'];\n}\n\nexport interface ConditionValueDefMixins {\n /**\n * One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n *\n * __Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\n * since Vega-Lite only allows at most one encoded field per encoding channel.\n */\n condition?: Conditional> | Conditional>[];\n}\n\n/**\n * A FieldDef with Condition\n * {\n * condition: {value: ...},\n * field: ...,\n * ...\n * }\n */\n\nexport type FieldOrDatumDefWithCondition | DatumDef, V extends Value = Value> = F &\n ConditionValueDefMixins;\n\nexport type MarkPropDef =\n | FieldOrDatumDefWithCondition, V>\n | FieldOrDatumDefWithCondition, V>\n | ValueDefWithCondition, V>;\n\nexport type ColorDef = MarkPropDef;\nexport type NumericMarkPropDef = MarkPropDef;\n\nexport type NumericArrayMarkPropDef = MarkPropDef;\n\nexport type ShapeDef = MarkPropDef;\n\nexport type StringFieldDefWithCondition = FieldOrDatumDefWithCondition, string>;\nexport type TextDef =\n | FieldOrDatumDefWithCondition, Text>\n | FieldOrDatumDefWithCondition, Text>\n | ValueDefWithCondition, Text>;\n\n/**\n * A ValueDef with optional Condition\n * {\n * condition: {field: ...} | {value: ...},\n * value: ...,\n * }\n */\n\n/**\n * Reference to a repeated value.\n */\nexport interface RepeatRef {\n repeat: 'row' | 'column' | 'repeat' | 'layer';\n}\n\nexport type FieldName = string;\nexport type Field = FieldName | RepeatRef;\n\nexport function isRepeatRef(field: Field | any): field is RepeatRef {\n return field && !isString(field) && 'repeat' in field;\n}\n\n/** @@hidden */\nexport type HiddenCompositeAggregate = CompositeAggregate;\n\nexport interface FieldDefBase extends BandMixins {\n /**\n * __Required.__ A string defining the name of the field from which to pull a data value\n * or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n *\n * __See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n *\n * __Notes:__\n * 1) Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\n * If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\n * See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n * 2) `field` is not required if `aggregate` is `count`.\n */\n field?: F;\n\n // function\n\n /**\n * Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\n * or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n *\n * __Default value:__ `undefined` (None)\n *\n * __See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation.\n */\n timeUnit?: TimeUnit | TimeUnitParams;\n\n /**\n * Aggregation function for the field\n * (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n *\n * __Default value:__ `undefined` (None)\n *\n * __See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation.\n */\n aggregate?: Aggregate | HiddenCompositeAggregate;\n\n /**\n * A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n *\n * - If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n *\n * - If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite. To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n *\n * __Default value:__ `false`\n *\n * __See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.\n */\n bin?: B;\n}\n\nexport function toFieldDefBase(fieldDef: FieldDef): FieldDefBase {\n const {field, timeUnit, bin, aggregate} = fieldDef;\n return {\n ...(timeUnit ? {timeUnit} : {}),\n ...(bin ? {bin} : {}),\n ...(aggregate ? {aggregate} : {}),\n field\n };\n}\n\nexport interface TypeMixins {\n /**\n * The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`).\n * It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n *\n * Vega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if:\n * (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit`\n * or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n *\n * __Default value:__\n *\n * 1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n * - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n * - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n * - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n *\n * 2) For a constant value in data domain (`datum`):\n * - `\"quantitative\"` if the datum is a number\n * - `\"nominal\"` if the datum is a string\n * - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n *\n * __Note:__\n * - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n * - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n * - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n * - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n * - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n * - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n *\n * __See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation.\n */\n type?: T;\n}\n\n/**\n * Definition object for a data field, its type and transformation of an encoding channel.\n */\nexport type TypedFieldDef<\n F extends Field,\n T extends Type = any,\n B extends Bin = boolean | BinParams | 'binned' | null // This is equivalent to Bin but we use the full form so the docs has detailed types\n> = FieldDefBase & TitleMixins & TypeMixins;\n\nexport interface SortableFieldDef<\n F extends Field,\n T extends Type = StandardType,\n B extends Bin = boolean | BinParams | null\n> extends TypedFieldDef {\n /**\n * Sort order for the encoded field.\n *\n * For continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n *\n * For discrete fields, `sort` can be one of the following:\n * - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n * - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n * - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n * - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n * - `null` indicating no sort.\n *\n * __Default value:__ `\"ascending\"`\n *\n * __Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n *\n * __See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation.\n */\n sort?: Sort;\n}\n\nexport function isSortableFieldDef(fieldDef: FieldDef): fieldDef is SortableFieldDef {\n return 'sort' in fieldDef;\n}\n\nexport type ScaleFieldDef<\n F extends Field,\n T extends Type = StandardType,\n B extends Bin = boolean | BinParams | null\n> = SortableFieldDef & ScaleMixins;\n\nexport interface ScaleMixins {\n /**\n * An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n *\n * If `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n *\n * __Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n *\n * __See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation.\n */\n scale?: Scale | null;\n}\n\nexport interface DatumDef<\n F extends Field = string,\n V extends PrimitiveValue | DateTime | ExprRef | SignalRef = PrimitiveValue | DateTime | ExprRef | SignalRef\n> extends Partial>,\n BandMixins {\n /**\n * A constant value in data domain.\n */\n datum?: F extends RepeatRef ? V | RepeatRef : V;\n // only apply Repeatref if field (F) can be RepeatRef\n // FIXME(https://github.com/microsoft/TypeScript/issues/37586):\n // `F extends RepeatRef` probably should be `RepeatRef extends F` but there is likely a bug in TS.\n}\n\nexport interface FormatMixins {\n /**\n * When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n *\n * - If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n * - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n *\n * See the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n *\n * When used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n *\n * __Default value:__ Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.\n */\n format?: string | Dict;\n\n /**\n * The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n *\n * __Default value:__\n * - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n * - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.\n */\n formatType?: 'number' | 'time' | string;\n}\n\nexport type StringDatumDef = DatumDef & FormatMixins;\n\nexport type ScaleDatumDef = ScaleMixins & DatumDef;\n\n/**\n * A field definition of a secondary channel that shares a scale with another primary channel. For example, `x2`, `xError` and `xError2` share the same scale with `x`.\n */\nexport type SecondaryFieldDef = FieldDefBase & TitleMixins; // x2/y2 shouldn't have bin, but we keep bin property for simplicity of the codebase.\n\nexport type Position2Def = SecondaryFieldDef | DatumDef | PositionValueDef;\n\nexport type SecondaryChannelDef = Encoding['x2' | 'y2'];\n\n/**\n * Field Def without scale (and without bin: \"binned\" support).\n */\nexport type FieldDefWithoutScale = TypedFieldDef;\n\nexport type LatLongFieldDef = FieldDefBase &\n TitleMixins &\n Partial>; // Lat long shouldn't have bin, but we keep bin property for simplicity of the codebase.\n\nexport type LatLongDef = LatLongFieldDef | DatumDef;\n\nexport type PositionFieldDefBase = ScaleFieldDef<\n F,\n StandardType,\n boolean | BinParams | 'binned' | null // This is equivalent to Bin but we use the full form so the docs has detailed types\n> &\n PositionBaseMixins;\n\nexport type PositionDatumDefBase = ScaleDatumDef & PositionBaseMixins;\n\nexport interface PositionBaseMixins {\n /**\n * Type of stacking offset if the field should be stacked.\n * `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains.\n * For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n *\n * `stack` can be one of the following values:\n * - `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart).\n * - `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized).
\n * -`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)).\n * - `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n *\n * __Default value:__ `zero` for plots with all of the following conditions are true:\n * (1) the mark is `bar`, `area`, or `arc`;\n * (2) the stacked measure channel (x or y) has a linear scale;\n * (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n *\n * __See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation.\n */\n stack?: StackOffset | null | boolean;\n}\n\nexport interface BandMixins {\n /**\n * Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.\n *\n * @minimum 0\n * @maximum 1\n */\n bandPosition?: number;\n}\n\nexport type PositionFieldDef = PositionFieldDefBase & PositionMixins;\n\nexport type PositionDatumDef = PositionDatumDefBase & PositionMixins;\n\nexport type PositionDef = PositionFieldDef | PositionDatumDef | PositionValueDef;\n\nexport interface PositionMixins {\n /**\n * An object defining properties of axis's gridlines, ticks and labels.\n * If `null`, the axis for the encoding channel will be removed.\n *\n * __Default value:__ If undefined, default [axis properties](https://vega.github.io/vega-lite/docs/axis.html) are applied.\n *\n * __See also:__ [`axis`](https://vega.github.io/vega-lite/docs/axis.html) documentation.\n */\n axis?: Axis | null;\n\n /**\n * An object defining the properties of the Impute Operation to be applied.\n * The field value of the other positional channel is taken as `key` of the `Impute` Operation.\n * The field of the `color` channel if specified is used as `groupby` of the `Impute` Operation.\n *\n * __See also:__ [`impute`](https://vega.github.io/vega-lite/docs/impute.html) documentation.\n */\n impute?: ImputeParams | null;\n}\n\nexport type PolarDef = PositionFieldDefBase | PositionDatumDefBase | PositionValueDef;\n\nexport function getBandPosition({\n fieldDef,\n fieldDef2,\n markDef: mark,\n config\n}: {\n fieldDef: FieldDef | DatumDef;\n fieldDef2?: SecondaryChannelDef;\n markDef: MarkDef;\n config: Config;\n}): number {\n if (isFieldOrDatumDef(fieldDef) && fieldDef.bandPosition !== undefined) {\n return fieldDef.bandPosition;\n }\n if (isFieldDef(fieldDef)) {\n const {timeUnit, bin} = fieldDef;\n if (timeUnit && !fieldDef2) {\n return isRectBasedMark(mark.type) ? 0 : getMarkConfig('timeUnitBandPosition', mark, config);\n } else if (isBinning(bin)) {\n return 0.5;\n }\n }\n\n return undefined;\n}\n\nexport function getBandSize({\n channel,\n fieldDef,\n fieldDef2,\n markDef: mark,\n config,\n scaleType,\n useVlSizeChannel\n}: {\n channel: PositionScaleChannel | PolarPositionScaleChannel;\n fieldDef: ChannelDef;\n fieldDef2?: SecondaryChannelDef;\n markDef: MarkDef;\n config: Config;\n scaleType: ScaleType;\n useVlSizeChannel?: boolean;\n}): number | RelativeBandSize | SignalRef {\n const sizeChannel = getSizeChannel(channel);\n const size = getMarkPropOrConfig(useVlSizeChannel ? 'size' : sizeChannel, mark, config, {\n vgChannel: sizeChannel\n });\n\n if (size !== undefined) {\n return size;\n }\n\n if (isFieldDef(fieldDef)) {\n const {timeUnit, bin} = fieldDef;\n\n if (timeUnit && !fieldDef2) {\n return {band: getMarkConfig('timeUnitBandSize', mark, config)};\n } else if (isBinning(bin) && !hasDiscreteDomain(scaleType)) {\n return {band: 1};\n }\n }\n\n if (isRectBasedMark(mark.type)) {\n if (scaleType) {\n if (hasDiscreteDomain(scaleType)) {\n return config[mark.type]?.discreteBandSize || {band: 1};\n } else {\n return config[mark.type]?.continuousBandSize;\n }\n }\n return config[mark.type]?.discreteBandSize;\n }\n\n return undefined;\n}\n\nexport function hasBandEnd(\n fieldDef: FieldDef,\n fieldDef2: SecondaryChannelDef,\n markDef: MarkDef,\n config: Config\n): boolean {\n if (isBinning(fieldDef.bin) || (fieldDef.timeUnit && isTypedFieldDef(fieldDef) && fieldDef.type === 'temporal')) {\n // Need to check bandPosition because non-rect marks (e.g., point) with timeUnit\n // doesn't have to use bandEnd if there is no bandPosition.\n return getBandPosition({fieldDef, fieldDef2, markDef, config}) !== undefined;\n }\n return false;\n}\n\n/**\n * Field definition of a mark property, which can contain a legend.\n */\nexport type MarkPropFieldDef = ScaleFieldDef &\n LegendMixins;\n\nexport type MarkPropDatumDef = LegendMixins & ScaleDatumDef;\n\nexport type MarkPropFieldOrDatumDef =\n | MarkPropFieldDef\n | MarkPropDatumDef;\n\nexport interface LegendMixins {\n /**\n * An object defining properties of the legend.\n * If `null`, the legend for the encoding channel will be removed.\n *\n * __Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n *\n * __See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation.\n */\n legend?: Legend | null;\n}\n\n// Detail\n\n// Order Path have no scale\n\nexport interface OrderFieldDef extends FieldDefWithoutScale {\n /**\n * The sort order. One of `\"ascending\"` (default) or `\"descending\"`.\n */\n sort?: SortOrder;\n}\n\nexport type OrderValueDef = ConditionValueDefMixins & NumericValueDef;\n\nexport interface StringFieldDef extends FieldDefWithoutScale, FormatMixins {}\n\nexport type FieldDef = SecondaryFieldDef | TypedFieldDef;\nexport type ChannelDef = Encoding[keyof Encoding];\n\nexport function isConditionalDef | GuideEncodingConditionalValueDef | ExprRef | SignalRef>(\n channelDef: CD\n): channelDef is CD & {condition: Conditional} {\n return channelDef && 'condition' in channelDef;\n}\n\n/**\n * Return if a channelDef is a ConditionalValueDef with ConditionFieldDef\n */\nexport function hasConditionalFieldDef(\n channelDef: Partial>\n): channelDef is {condition: Conditional>} {\n const condition = channelDef && channelDef['condition'];\n return !!condition && !isArray(condition) && isFieldDef(condition);\n}\n\nexport function hasConditionalFieldOrDatumDef(\n channelDef: ChannelDef\n): channelDef is {condition: Conditional>} {\n const condition = channelDef && channelDef['condition'];\n return !!condition && !isArray(condition) && isFieldOrDatumDef(condition);\n}\n\nexport function hasConditionalValueDef(\n channelDef: ChannelDef\n): channelDef is ValueDef & {condition: Conditional> | Conditional>[]} {\n const condition = channelDef && channelDef['condition'];\n return !!condition && (isArray(condition) || isValueDef(condition));\n}\n\nexport function isFieldDef(\n channelDef: Partial> | FieldDefBase | DatumDef\n): channelDef is FieldDefBase | TypedFieldDef | SecondaryFieldDef {\n // TODO: we can't use field in channelDef here as it's somehow failing runtime test\n return channelDef && (!!channelDef['field'] || channelDef['aggregate'] === 'count');\n}\n\nexport function channelDefType(channelDef: ChannelDef): Type | undefined {\n return channelDef && channelDef['type'];\n}\n\nexport function isDatumDef(\n channelDef: Partial> | FieldDefBase | DatumDef\n): channelDef is DatumDef {\n return channelDef && 'datum' in channelDef;\n}\n\nexport function isContinuousFieldOrDatumDef(\n cd: ChannelDef\n): cd is TypedFieldDef | DatumDef {\n // TODO: make datum support DateTime object\n return (isTypedFieldDef(cd) && !isDiscrete(cd)) || isNumericDataDef(cd);\n}\n\nexport function isQuantitativeFieldOrDatumDef(cd: ChannelDef) {\n // TODO: make datum support DateTime object\n return channelDefType(cd) === 'quantitative' || isNumericDataDef(cd);\n}\n\nexport function isNumericDataDef(cd: ChannelDef): cd is DatumDef {\n return isDatumDef(cd) && isNumber(cd.datum);\n}\n\nexport function isFieldOrDatumDef(\n channelDef: Partial>\n): channelDef is FieldDef | DatumDef {\n return isFieldDef(channelDef) || isDatumDef(channelDef);\n}\n\nexport function isTypedFieldDef(channelDef: ChannelDef): channelDef is TypedFieldDef {\n return channelDef && ('field' in channelDef || channelDef['aggregate'] === 'count') && 'type' in channelDef;\n}\n\nexport function isValueDef(channelDef: Partial>): channelDef is ValueDef {\n return channelDef && 'value' in channelDef && 'value' in channelDef;\n}\n\nexport function isScaleFieldDef(channelDef: ChannelDef): channelDef is ScaleFieldDef {\n return channelDef && ('scale' in channelDef || 'sort' in channelDef);\n}\n\nexport function isPositionFieldOrDatumDef(\n channelDef: ChannelDef\n): channelDef is PositionFieldDef | PositionDatumDef {\n return channelDef && ('axis' in channelDef || 'stack' in channelDef || 'impute' in channelDef);\n}\n\nexport function isMarkPropFieldOrDatumDef(\n channelDef: ChannelDef\n): channelDef is MarkPropFieldDef | MarkPropDatumDef {\n return channelDef && 'legend' in channelDef;\n}\n\nexport function isStringFieldOrDatumDef(\n channelDef: ChannelDef\n): channelDef is StringFieldDef | StringDatumDef {\n return channelDef && ('format' in channelDef || 'formatType' in channelDef);\n}\n\nexport function toStringFieldDef(fieldDef: FieldDef): StringFieldDef {\n // omit properties that don't exist in string field defs\n return omit(fieldDef, ['legend', 'axis', 'header', 'scale'] as any[]);\n}\n\nexport interface FieldRefOption {\n /** Exclude bin, aggregate, timeUnit */\n nofn?: boolean;\n /** Wrap the field with datum, parent, or datum.datum (e.g., datum['...'] for Vega Expression */\n expr?: 'datum' | 'parent' | 'datum.datum';\n /** Prepend fn with custom function prefix */\n prefix?: string;\n /** Append suffix to the field ref for bin (default='start') */\n binSuffix?: 'end' | 'range' | 'mid';\n /** Append suffix to the field ref (general) */\n suffix?: string;\n /**\n * Use the field name for `as` in a transform.\n * We will not escape nested accesses because Vega transform outputs cannot be nested.\n */\n forAs?: boolean;\n}\n\nfunction isOpFieldDef(\n fieldDef: FieldDefBase | WindowFieldDef | AggregatedFieldDef\n): fieldDef is WindowFieldDef | AggregatedFieldDef {\n return 'op' in fieldDef;\n}\n\n/**\n * Get a Vega field reference from a Vega-Lite field def.\n */\nexport function vgField(\n fieldDef: FieldDefBase | WindowFieldDef | AggregatedFieldDef,\n opt: FieldRefOption = {}\n): string {\n let field = fieldDef.field;\n const prefix = opt.prefix;\n let suffix = opt.suffix;\n\n let argAccessor = ''; // for accessing argmin/argmax field at the end without getting escaped\n\n if (isCount(fieldDef)) {\n field = internalField('count');\n } else {\n let fn: string;\n\n if (!opt.nofn) {\n if (isOpFieldDef(fieldDef)) {\n fn = fieldDef.op;\n } else {\n const {bin, aggregate, timeUnit} = fieldDef;\n if (isBinning(bin)) {\n fn = binToString(bin);\n suffix = (opt.binSuffix ?? '') + (opt.suffix ?? '');\n } else if (aggregate) {\n if (isArgmaxDef(aggregate)) {\n argAccessor = `[\"${field}\"]`;\n field = `argmax_${aggregate.argmax}`;\n } else if (isArgminDef(aggregate)) {\n argAccessor = `[\"${field}\"]`;\n field = `argmin_${aggregate.argmin}`;\n } else {\n fn = String(aggregate);\n }\n } else if (timeUnit) {\n fn = timeUnitToString(timeUnit);\n suffix = ((!['range', 'mid'].includes(opt.binSuffix) && opt.binSuffix) || '') + (opt.suffix ?? '');\n }\n }\n }\n\n if (fn) {\n field = field ? `${fn}_${field}` : fn;\n }\n }\n\n if (suffix) {\n field = `${field}_${suffix}`;\n }\n\n if (prefix) {\n field = `${prefix}_${field}`;\n }\n\n if (opt.forAs) {\n return removePathFromField(field);\n } else if (opt.expr) {\n // Expression to access flattened field. No need to escape dots.\n return flatAccessWithDatum(field, opt.expr) + argAccessor;\n } else {\n // We flattened all fields so paths should have become dot.\n return replacePathInField(field) + argAccessor;\n }\n}\n\nexport function isDiscrete(def: TypedFieldDef | DatumDef) {\n switch (def.type) {\n case 'nominal':\n case 'ordinal':\n case 'geojson':\n return true;\n case 'quantitative':\n return isFieldDef(def) && !!def.bin;\n case 'temporal':\n return false;\n }\n throw new Error(log.message.invalidFieldType(def.type));\n}\n\nexport function isDiscretizing(def: TypedFieldDef | DatumDef) {\n return isScaleFieldDef(def) && isContinuousToDiscrete(def.scale?.type);\n}\n\nexport function isCount(fieldDef: FieldDefBase) {\n return fieldDef.aggregate === 'count';\n}\n\nexport type FieldTitleFormatter = (fieldDef: FieldDefBase, config: Config) => string;\n\nexport function verbalTitleFormatter(fieldDef: FieldDefBase, config: Config) {\n const {field, bin, timeUnit, aggregate} = fieldDef;\n if (aggregate === 'count') {\n return config.countTitle;\n } else if (isBinning(bin)) {\n return `${field} (binned)`;\n } else if (timeUnit) {\n const unit = normalizeTimeUnit(timeUnit)?.unit;\n if (unit) {\n return `${field} (${getTimeUnitParts(unit).join('-')})`;\n }\n } else if (aggregate) {\n if (isArgmaxDef(aggregate)) {\n return `${field} for max ${aggregate.argmax}`;\n } else if (isArgminDef(aggregate)) {\n return `${field} for min ${aggregate.argmin}`;\n } else {\n return `${titleCase(aggregate)} of ${field}`;\n }\n }\n return field;\n}\n\nexport function functionalTitleFormatter(fieldDef: FieldDefBase) {\n const {aggregate, bin, timeUnit, field} = fieldDef;\n if (isArgmaxDef(aggregate)) {\n return `${field} for argmax(${aggregate.argmax})`;\n } else if (isArgminDef(aggregate)) {\n return `${field} for argmin(${aggregate.argmin})`;\n }\n\n const timeUnitParams = normalizeTimeUnit(timeUnit);\n\n const fn = aggregate || timeUnitParams?.unit || (timeUnitParams?.maxbins && 'timeunit') || (isBinning(bin) && 'bin');\n if (fn) {\n return `${fn.toUpperCase()}(${field})`;\n } else {\n return field;\n }\n}\n\nexport const defaultTitleFormatter: FieldTitleFormatter = (fieldDef: FieldDefBase, config: Config) => {\n switch (config.fieldTitle) {\n case 'plain':\n return fieldDef.field;\n case 'functional':\n return functionalTitleFormatter(fieldDef);\n default:\n return verbalTitleFormatter(fieldDef, config);\n }\n};\n\nlet titleFormatter = defaultTitleFormatter;\n\nexport function setTitleFormatter(formatter: FieldTitleFormatter) {\n titleFormatter = formatter;\n}\n\nexport function resetTitleFormatter() {\n setTitleFormatter(defaultTitleFormatter);\n}\n\nexport function title(\n fieldOrDatumDef: TypedFieldDef | SecondaryFieldDef | DatumDef,\n config: Config,\n {allowDisabling, includeDefault = true}: {allowDisabling: boolean; includeDefault?: boolean}\n) {\n const guideTitle = getGuide(fieldOrDatumDef)?.title;\n\n if (!isFieldDef(fieldOrDatumDef)) {\n return guideTitle;\n }\n const fieldDef = fieldOrDatumDef;\n\n const def = includeDefault ? defaultTitle(fieldDef, config) : undefined;\n\n if (allowDisabling) {\n return getFirstDefined(guideTitle, fieldDef.title, def);\n } else {\n return guideTitle ?? fieldDef.title ?? def;\n }\n}\n\nexport function getGuide(fieldDef: TypedFieldDef | SecondaryFieldDef | DatumDef): Guide {\n if (isPositionFieldOrDatumDef(fieldDef) && fieldDef.axis) {\n return fieldDef.axis;\n } else if (isMarkPropFieldOrDatumDef(fieldDef) && fieldDef.legend) {\n return fieldDef.legend;\n } else if (isFacetFieldDef(fieldDef) && fieldDef.header) {\n return fieldDef.header;\n }\n return undefined;\n}\n\nexport function defaultTitle(fieldDef: FieldDefBase, config: Config) {\n return titleFormatter(fieldDef, config);\n}\n\nexport function getFormatMixins(fieldDef: TypedFieldDef | DatumDef) {\n if (isStringFieldOrDatumDef(fieldDef)) {\n const {format, formatType} = fieldDef;\n return {format, formatType};\n } else {\n const guide = getGuide(fieldDef) ?? {};\n const {format, formatType} = guide;\n return {format, formatType};\n }\n}\n\nexport function defaultType>(fieldDef: T, channel: ExtendedChannel): Type {\n switch (channel) {\n case 'latitude':\n case 'longitude':\n return 'quantitative';\n\n case 'row':\n case 'column':\n case 'facet':\n case 'shape':\n case 'strokeDash':\n return 'nominal';\n\n case 'order':\n return 'ordinal';\n }\n\n if (isSortableFieldDef(fieldDef) && isArray(fieldDef.sort)) {\n return 'ordinal';\n }\n\n const {aggregate, bin, timeUnit} = fieldDef;\n if (timeUnit) {\n return 'temporal';\n }\n\n if (bin || (aggregate && !isArgmaxDef(aggregate) && !isArgminDef(aggregate))) {\n return 'quantitative';\n }\n\n if (isScaleFieldDef(fieldDef) && fieldDef.scale?.type) {\n switch (SCALE_CATEGORY_INDEX[fieldDef.scale.type]) {\n case 'numeric':\n case 'discretizing':\n return 'quantitative';\n case 'time':\n return 'temporal';\n }\n }\n\n return 'nominal';\n}\n\n/**\n * Returns the fieldDef -- either from the outer channelDef or from the condition of channelDef.\n * @param channelDef\n */\n\nexport function getFieldDef(channelDef: ChannelDef): FieldDef {\n if (isFieldDef(channelDef)) {\n return channelDef;\n } else if (hasConditionalFieldDef(channelDef)) {\n return channelDef.condition;\n }\n return undefined;\n}\n\nexport function getFieldOrDatumDef = ChannelDef>(\n channelDef: CD\n): FieldDef | DatumDef {\n if (isFieldOrDatumDef(channelDef)) {\n return channelDef;\n } else if (hasConditionalFieldOrDatumDef(channelDef)) {\n return channelDef.condition;\n }\n return undefined;\n}\n\n/**\n * Convert type to full, lowercase type, or augment the fieldDef with a default type if missing.\n */\nexport function initChannelDef(\n channelDef: ChannelDef,\n channel: ExtendedChannel,\n config: Config,\n opt: {compositeMark?: boolean} = {}\n): ChannelDef {\n if (isString(channelDef) || isNumber(channelDef) || isBoolean(channelDef)) {\n const primitiveType = isString(channelDef) ? 'string' : isNumber(channelDef) ? 'number' : 'boolean';\n log.warn(log.message.primitiveChannelDef(channel, primitiveType, channelDef));\n return {value: channelDef} as ValueDef;\n }\n\n // If a fieldDef contains a field, we need type.\n if (isFieldOrDatumDef(channelDef)) {\n return initFieldOrDatumDef(channelDef, channel, config, opt);\n } else if (hasConditionalFieldOrDatumDef(channelDef)) {\n return {\n ...channelDef,\n // Need to cast as normalizeFieldDef normally return FieldDef, but here we know that it is definitely Condition\n condition: initFieldOrDatumDef(channelDef.condition, channel, config, opt) as Conditional>\n };\n }\n return channelDef;\n}\n\nexport function initFieldOrDatumDef(\n fd: FieldDef | DatumDef,\n channel: ExtendedChannel,\n config: Config,\n opt: {compositeMark?: boolean}\n): FieldDef | DatumDef {\n if (isStringFieldOrDatumDef(fd)) {\n const {format, formatType, ...rest} = fd;\n if (isCustomFormatType(formatType) && !config.customFormatTypes) {\n log.warn(log.message.customFormatTypeNotAllowed(channel));\n return initFieldOrDatumDef(rest, channel, config, opt);\n }\n } else {\n const guideType = isPositionFieldOrDatumDef(fd)\n ? 'axis'\n : isMarkPropFieldOrDatumDef(fd)\n ? 'legend'\n : isFacetFieldDef(fd)\n ? 'header'\n : null;\n if (guideType && fd[guideType]) {\n const {format, formatType, ...newGuide} = fd[guideType];\n if (isCustomFormatType(formatType) && !config.customFormatTypes) {\n log.warn(log.message.customFormatTypeNotAllowed(channel));\n return initFieldOrDatumDef({...fd, [guideType]: newGuide}, channel, config, opt);\n }\n }\n }\n\n if (isFieldDef(fd)) {\n return initFieldDef(fd, channel, opt);\n }\n return initDatumDef(fd);\n}\n\nfunction initDatumDef(datumDef: DatumDef): DatumDef {\n let type = datumDef['type'];\n if (type) {\n return datumDef;\n }\n const {datum} = datumDef;\n type = isNumber(datum) ? 'quantitative' : isString(datum) ? 'nominal' : isDateTime(datum) ? 'temporal' : undefined;\n\n return {...datumDef, type};\n}\n\nexport function initFieldDef(\n fd: FieldDef,\n channel: ExtendedChannel,\n {compositeMark = false}: {compositeMark?: boolean} = {}\n) {\n const {aggregate, timeUnit, bin, field} = fd;\n const fieldDef = {...fd};\n\n // Drop invalid aggregate\n if (!compositeMark && aggregate && !isAggregateOp(aggregate) && !isArgmaxDef(aggregate) && !isArgminDef(aggregate)) {\n log.warn(log.message.invalidAggregate(aggregate));\n delete fieldDef.aggregate;\n }\n\n // Normalize Time Unit\n if (timeUnit) {\n fieldDef.timeUnit = normalizeTimeUnit(timeUnit);\n }\n\n if (field) {\n fieldDef.field = `${field}`;\n }\n\n // Normalize bin\n if (isBinning(bin)) {\n fieldDef.bin = normalizeBin(bin, channel);\n }\n\n if (isBinned(bin) && !isXorY(channel)) {\n log.warn(log.message.channelShouldNotBeUsedForBinned(channel));\n }\n\n // Normalize Type\n if (isTypedFieldDef(fieldDef)) {\n const {type} = fieldDef;\n const fullType = getFullName(type);\n if (type !== fullType) {\n // convert short type to full type\n fieldDef.type = fullType;\n }\n if (type !== 'quantitative') {\n if (isCountingAggregateOp(aggregate)) {\n log.warn(log.message.invalidFieldTypeForCountAggregate(type, aggregate));\n fieldDef.type = 'quantitative';\n }\n }\n } else if (!isSecondaryRangeChannel(channel)) {\n // If type is empty / invalid, then augment with default type\n const newType = defaultType(fieldDef as TypedFieldDef, channel);\n fieldDef['type'] = newType;\n }\n\n if (isTypedFieldDef(fieldDef)) {\n const {compatible, warning} = channelCompatibility(fieldDef, channel) || {};\n if (compatible === false) {\n log.warn(warning);\n }\n }\n\n if (isSortableFieldDef(fieldDef) && isString(fieldDef.sort)) {\n const {sort} = fieldDef;\n if (isSortByChannel(sort)) {\n return {\n ...fieldDef,\n sort: {encoding: sort}\n };\n }\n const sub = sort.substr(1);\n if (sort.charAt(0) === '-' && isSortByChannel(sub)) {\n return {\n ...fieldDef,\n sort: {encoding: sub, order: 'descending'}\n };\n }\n }\n\n if (isFacetFieldDef(fieldDef)) {\n const {header} = fieldDef;\n if (header) {\n const {orient, ...rest} = header;\n if (orient) {\n return {\n ...fieldDef,\n header: {\n ...rest,\n labelOrient: header.labelOrient || orient,\n titleOrient: header.titleOrient || orient\n }\n };\n }\n }\n }\n\n return fieldDef;\n}\n\nexport function normalizeBin(bin: BinParams | boolean | 'binned', channel?: ExtendedChannel) {\n if (isBoolean(bin)) {\n return {maxbins: autoMaxBins(channel)};\n } else if (bin === 'binned') {\n return {\n binned: true\n };\n } else if (!bin.maxbins && !bin.step) {\n return {...bin, maxbins: autoMaxBins(channel)};\n } else {\n return bin;\n }\n}\n\nconst COMPATIBLE = {compatible: true};\nexport function channelCompatibility(\n fieldDef: TypedFieldDef,\n channel: ExtendedChannel\n): {compatible: boolean; warning?: string} {\n const type = fieldDef.type;\n\n if (type === 'geojson' && channel !== 'shape') {\n return {\n compatible: false,\n warning: `Channel ${channel} should not be used with a geojson data.`\n };\n }\n\n switch (channel) {\n case ROW:\n case COLUMN:\n case FACET:\n if (!isDiscrete(fieldDef)) {\n return {\n compatible: false,\n warning: log.message.channelShouldBeDiscrete(channel)\n };\n }\n return COMPATIBLE;\n\n case X:\n case Y:\n case COLOR:\n case FILL:\n case STROKE:\n case TEXT:\n case DETAIL:\n case KEY:\n case TOOLTIP:\n case HREF:\n case URL:\n case ANGLE:\n case THETA:\n case RADIUS:\n case DESCRIPTION:\n return COMPATIBLE;\n\n case LONGITUDE:\n case LONGITUDE2:\n case LATITUDE:\n case LATITUDE2:\n if (type !== QUANTITATIVE) {\n return {\n compatible: false,\n warning: `Channel ${channel} should be used with a quantitative field only, not ${fieldDef.type} field.`\n };\n }\n return COMPATIBLE;\n\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n case STROKEWIDTH:\n case SIZE:\n case THETA2:\n case RADIUS2:\n case X2:\n case Y2:\n if (type === 'nominal' && !fieldDef['sort']) {\n return {\n compatible: false,\n warning: `Channel ${channel} should not be used with an unsorted discrete field.`\n };\n }\n return COMPATIBLE;\n\n case SHAPE:\n case STROKEDASH:\n if (!isDiscrete(fieldDef) && !isDiscretizing(fieldDef)) {\n return {\n compatible: false,\n warning: log.message.channelShouldBeDiscreteOrDiscretizing(channel)\n };\n }\n return COMPATIBLE;\n\n case ORDER:\n if (fieldDef.type === 'nominal' && !('sort' in fieldDef)) {\n return {\n compatible: false,\n warning: `Channel order is inappropriate for nominal field, which has no inherent order.`\n };\n }\n return COMPATIBLE;\n }\n}\n\n/**\n * Check if the field def uses a time format or does not use any format but is temporal\n * (this does not cover field defs that are temporal but use a number format).\n */\nexport function isFieldOrDatumDefForTimeFormat(fieldOrDatumDef: FieldDef | DatumDef): boolean {\n const {formatType} = getFormatMixins(fieldOrDatumDef);\n return formatType === 'time' || (!formatType && isTimeFieldDef(fieldOrDatumDef));\n}\n\n/**\n * Check if field def has type `temporal`. If you want to also cover field defs that use a time format, use `isTimeFormatFieldDef`.\n */\nexport function isTimeFieldDef(def: FieldDef | DatumDef): boolean {\n return def && (def['type'] === 'temporal' || (isFieldDef(def) && !!def.timeUnit));\n}\n\n/**\n * Getting a value associated with a fielddef.\n * Convert the value to Vega expression if applicable (for datetime object, or string if the field def is temporal or has timeUnit)\n */\nexport function valueExpr(\n v: number | string | boolean | DateTime | ExprRef | SignalRef | number[],\n {\n timeUnit,\n type,\n wrapTime,\n undefinedIfExprNotRequired\n }: {\n timeUnit: TimeUnit | TimeUnitParams;\n type?: Type;\n wrapTime?: boolean;\n undefinedIfExprNotRequired?: boolean;\n }\n): string {\n const unit = timeUnit && normalizeTimeUnit(timeUnit)?.unit;\n let isTime = unit || type === 'temporal';\n\n let expr;\n if (isExprRef(v)) {\n expr = v.expr;\n } else if (isSignalRef(v)) {\n expr = v.signal;\n } else if (isDateTime(v)) {\n isTime = true;\n expr = dateTimeToExpr(v);\n } else if (isString(v) || isNumber(v)) {\n if (isTime) {\n expr = `datetime(${stringify(v)})`;\n\n if (isLocalSingleTimeUnit(unit)) {\n // for single timeUnit, we will use dateTimeToExpr to convert number/string to match the timeUnit\n if ((isNumber(v) && v < 10000) || (isString(v) && isNaN(Date.parse(v)))) {\n expr = dateTimeToExpr({[unit]: v});\n }\n }\n }\n }\n if (expr) {\n return wrapTime && isTime ? `time(${expr})` : expr;\n }\n // number or boolean or normal string\n return undefinedIfExprNotRequired ? undefined : stringify(v);\n}\n\n/**\n * Standardize value array -- convert each value to Vega expression if applicable\n */\nexport function valueArray(\n fieldOrDatumDef: TypedFieldDef | DatumDef,\n values: (number | string | boolean | DateTime)[]\n) {\n const {type} = fieldOrDatumDef;\n return values.map(v => {\n const expr = valueExpr(v, {\n timeUnit: isFieldDef(fieldOrDatumDef) ? fieldOrDatumDef.timeUnit : undefined,\n type,\n undefinedIfExprNotRequired: true\n });\n // return signal for the expression if we need an expression\n if (expr !== undefined) {\n return {signal: expr};\n }\n // otherwise just return the original value\n return v;\n });\n}\n\n/**\n * Checks whether a fieldDef for a particular channel requires a computed bin range.\n */\nexport function binRequiresRange(fieldDef: FieldDef, channel: Channel): boolean {\n if (!isBinning(fieldDef.bin)) {\n console.warn('Only call this method for binned field defs.');\n return false;\n }\n\n // We need the range only when the user explicitly forces a binned field to be use discrete scale. In this case, bin range is used in axis and legend labels.\n // We could check whether the axis or legend exists (not disabled) but that seems overkill.\n return isScaleChannel(channel) && ['ordinal', 'nominal'].includes((fieldDef as ScaleFieldDef).type);\n}\n","import {\n Align,\n Axis as VgAxis,\n AxisEncode,\n AxisOrient,\n BaseAxis,\n Color,\n FontStyle,\n FontWeight,\n LabelOverlap,\n SignalRef,\n TextBaseline,\n TimeInterval,\n TimeIntervalStep\n} from 'vega';\nimport {ConditionalPredicate, Value, ValueDef} from './channeldef';\nimport {DateTime} from './datetime';\nimport {ExprRef} from './expr';\nimport {Guide, GuideEncodingEntry, TitleMixins, VlOnlyGuideConfig} from './guide';\nimport {Flag, keys} from './util';\nimport {MapExcludeValueRefAndReplaceSignalWith, VgEncodeChannel} from './vega.schema';\n\nexport type BaseAxisNoValueRefs = AxisOverrideMixins &\n VLOnlyAxisMixins &\n Omit, 'labelOverlap'>;\n\ninterface AxisOverrideMixins {\n // Position and tickMinStep are not config in Vega, but are in Vega-Lite. So we just copy them here.\n\n /**\n * The anchor position of the axis in pixels. For x-axes with top or bottom orientation, this sets the axis group x coordinate. For y-axes with left or right orientation, this sets the axis group y coordinate.\n *\n * __Default value__: `0`\n */\n position?: number | ES;\n\n /**\n * The minimum desired step between axis ticks, in terms of scale domain values. For example, a value of `1` indicates that ticks should not be less than 1 unit apart. If `tickMinStep` is specified, the `tickCount` value will be adjusted, if necessary, to enforce the minimum step value.\n */\n tickMinStep?: number | ES;\n\n // ---------- Properties that do not support signal / expression ----------\n /**\n * A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis.\n *\n * __Default value:__ `true`\n */\n domain?: boolean;\n\n /**\n * A boolean flag indicating if grid lines should be included as part of the axis\n *\n * __Default value:__ `true` for [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous) that are not binned; otherwise, `false`.\n */\n grid?: boolean;\n\n /**\n * A boolean flag indicating if labels should be included as part of the axis.\n *\n * __Default value:__ `true`.\n */\n labels?: boolean;\n\n /**\n * Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for `band` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with `\"bandPosition\": 1` and an axis `\"padding\"` value of `0`.\n */\n tickExtra?: boolean;\n\n /**\n * Boolean flag indicating if pixel position values should be rounded to the nearest integer.\n *\n * __Default value:__ `true`\n */\n tickRound?: boolean;\n\n /**\n * Boolean value that determines whether the axis should include ticks.\n *\n * __Default value:__ `true`\n */\n ticks?: boolean;\n\n // Override comments to be Vega-Lite specific\n\n /**\n * Indicates if the first and last axis labels should be aligned flush with the scale range. Flush alignment for a horizontal axis will left-align the first label and right-align the last label. For vertical axes, bottom and top text baselines are applied instead. If this property is a number, it also indicates the number of pixels by which to offset the first and last labels; for example, a value of 2 will flush-align the first and last labels and also push them 2 pixels outward from the center of the axis. The additional adjustment can sometimes help the labels better visually group with corresponding axis ticks.\n *\n * __Default value:__ `true` for axis of a continuous x-scale. Otherwise, `false`.\n */\n labelFlush?: boolean | number;\n\n /**\n * The strategy to use for resolving overlap of axis labels. If `false` (the default), no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used (this works well for standard linear axes). If set to `\"greedy\"`, a linear scan of the labels is performed, removing any labels that overlaps with the last visible label (this often works better for log-scaled axes).\n *\n * __Default value:__ `true` for non-nominal fields with non-log scales; `\"greedy\"` for log scales; otherwise `false`.\n */\n labelOverlap?: LabelOverlap | ES;\n\n /**\n * The offset, in pixels, by which to displace the axis from the edge of the enclosing group or data rectangle.\n *\n * __Default value:__ derived from the [axis config](https://vega.github.io/vega-lite/docs/config.html#facet-scale-config)'s `offset` (`0` by default)\n */\n offset?: number | ES;\n\n /**\n * The orientation of the axis. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`. The orientation can be used to further specialize the axis type (e.g., a y-axis oriented towards the right edge of the chart).\n *\n * __Default value:__ `\"bottom\"` for x-axes and `\"left\"` for y-axes.\n */\n orient?: AxisOrient | ES;\n\n /**\n * A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are \"nice\" (multiples of 2, 5, 10) and lie within the underlying scale's range.\n *\n * For scales of type `\"time\"` or `\"utc\"`, the tick count can instead be a time interval specifier. Legal string values are `\"millisecond\"`, `\"second\"`, `\"minute\"`, `\"hour\"`, `\"day\"`, `\"week\"`, `\"month\"`, and `\"year\"`. Alternatively, an object-valued interval specifier of the form `{\"interval\": \"month\", \"step\": 3}` includes a desired number of interval steps. Here, ticks are generated for each quarter (Jan, Apr, Jul, Oct) boundary.\n *\n * __Default value__: Determine using a formula `ceil(width/40)` for x and `ceil(height/40)` for y.\n *\n * @minimum 0\n */\n tickCount?: number | TimeInterval | TimeIntervalStep | ES;\n\n /**\n * Explicitly set the visible axis tick values.\n */\n values?: number[] | string[] | boolean[] | DateTime[] | ES; // Vega already supports Signal -- we have to re-declare here since VL supports special Date Time object that's not valid in Vega.\n\n /**\n * A non-negative integer indicating the z-index of the axis.\n * If zindex is 0, axes should be drawn behind all chart elements.\n * To put them in front, set `zindex` to `1` or more.\n *\n * __Default value:__ `0` (behind the marks).\n *\n * @TJS-type integer\n * @minimum 0\n */\n zindex?: number;\n}\n\ninterface VLOnlyAxisMixins {\n /**\n * [Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n *\n * __Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.\n */\n labelExpr?: string;\n\n /**\n * A string or array of strings indicating the name of custom styles to apply to the axis. A style is a named collection of axis property defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles.\n *\n * __Default value:__ (none)\n * __Note:__ Any specified style will augment the default style. For example, an x-axis mark with `\"style\": \"foo\"` will use `config.axisX` and `config.style.foo` (the specified style `\"foo\"` has higher precedence).\n */\n style?: string | string[];\n}\n\nexport type ConditionalAxisProp =\n | 'labelAlign'\n | 'labelBaseline'\n | 'labelColor'\n | 'labelFont'\n | 'labelFontSize'\n | 'labelFontStyle'\n | 'labelFontWeight'\n | 'labelOpacity'\n | 'labelOffset'\n | 'labelPadding'\n | 'gridColor'\n | 'gridDash'\n | 'gridDashOffset'\n | 'gridOpacity'\n | 'gridWidth'\n | 'tickColor'\n | 'tickDash'\n | 'tickDashOffset'\n | 'tickOpacity'\n | 'tickSize'\n | 'tickWidth';\n\nexport const CONDITIONAL_AXIS_PROP_INDEX: Record<\n ConditionalAxisProp,\n {\n part: keyof AxisEncode;\n vgProp: VgEncodeChannel;\n } | null // null if we need to convert condition to signal\n> = {\n labelAlign: {\n part: 'labels',\n vgProp: 'align'\n },\n labelBaseline: {\n part: 'labels',\n vgProp: 'baseline'\n },\n labelColor: {\n part: 'labels',\n vgProp: 'fill'\n },\n labelFont: {\n part: 'labels',\n vgProp: 'font'\n },\n labelFontSize: {\n part: 'labels',\n vgProp: 'fontSize'\n },\n labelFontStyle: {\n part: 'labels',\n vgProp: 'fontStyle'\n },\n labelFontWeight: {\n part: 'labels',\n vgProp: 'fontWeight'\n },\n labelOpacity: {\n part: 'labels',\n vgProp: 'opacity'\n },\n labelOffset: null,\n labelPadding: null, // There is no fixed vgProp for tickSize, need to use signal.\n gridColor: {\n part: 'grid',\n vgProp: 'stroke'\n },\n gridDash: {\n part: 'grid',\n vgProp: 'strokeDash'\n },\n gridDashOffset: {\n part: 'grid',\n vgProp: 'strokeDashOffset'\n },\n gridOpacity: {\n part: 'grid',\n vgProp: 'opacity'\n },\n gridWidth: {\n part: 'grid',\n vgProp: 'strokeWidth'\n },\n tickColor: {\n part: 'ticks',\n vgProp: 'stroke'\n },\n tickDash: {\n part: 'ticks',\n vgProp: 'strokeDash'\n },\n tickDashOffset: {\n part: 'ticks',\n vgProp: 'strokeDashOffset'\n },\n tickOpacity: {\n part: 'ticks',\n vgProp: 'opacity'\n },\n tickSize: null, // There is no fixed vgProp for tickSize, need to use signal.\n tickWidth: {\n part: 'ticks',\n vgProp: 'strokeWidth'\n }\n};\n\nexport type ConditionalAxisProperty = (ValueDef | ES) & {\n condition: ConditionalPredicate | ES> | ConditionalPredicate | ES>[];\n};\n\nexport function isConditionalAxisValue(\n v: any\n): v is ConditionalAxisProperty {\n return v && v['condition'];\n}\n\nexport type ConditionalAxisNumber = ConditionalAxisProperty<\n number | null,\n ES\n>;\nexport type ConditionalAxisLabelAlign = ConditionalAxisProperty<\n Align | null,\n ES\n>;\nexport type ConditionalAxisLabelBaseline =\n ConditionalAxisProperty;\nexport type ConditionalAxisColor = ConditionalAxisProperty<\n Color | null,\n ES\n>;\nexport type ConditionalAxisString = ConditionalAxisProperty<\n string | null,\n ES\n>;\n\nexport type ConditionalAxisLabelFontStyle =\n ConditionalAxisProperty;\nexport type ConditionalAxisLabelFontWeight =\n ConditionalAxisProperty;\n\nexport type ConditionalAxisNumberArray = ConditionalAxisProperty<\n number[] | null,\n ES\n>;\n\n// Vega axis config is the same as Vega axis base. If this is not the case, add specific type.\nexport type AxisConfigBaseWithConditionalAndSignal = Omit<\n BaseAxisNoValueRefs,\n ConditionalAxisProp | 'title'\n> &\n AxisPropsWithCondition;\n\nexport interface AxisPropsWithCondition {\n labelAlign?: BaseAxisNoValueRefs['labelAlign'] | ConditionalAxisLabelAlign;\n labelBaseline?: BaseAxisNoValueRefs['labelBaseline'] | ConditionalAxisLabelBaseline;\n labelColor?: BaseAxisNoValueRefs['labelColor'] | ConditionalAxisColor;\n labelFont?: BaseAxisNoValueRefs['labelFont'] | ConditionalAxisString;\n labelFontSize?: BaseAxisNoValueRefs['labelFontSize'] | ConditionalAxisNumber;\n labelFontStyle?: BaseAxisNoValueRefs['labelFontStyle'] | ConditionalAxisLabelFontStyle;\n labelFontWeight?: BaseAxisNoValueRefs['labelFontWeight'] | ConditionalAxisLabelFontWeight;\n labelLineHeight?: BaseAxisNoValueRefs['labelLineHeight'] | ConditionalAxisNumber;\n labelOpacity?: BaseAxisNoValueRefs['labelOpacity'] | ConditionalAxisNumber;\n labelOffset?: BaseAxisNoValueRefs['labelOffset'] | ConditionalAxisNumber;\n labelPadding?: BaseAxisNoValueRefs['labelPadding'] | ConditionalAxisNumber;\n gridColor?: BaseAxisNoValueRefs['gridColor'] | ConditionalAxisColor;\n gridDash?: BaseAxisNoValueRefs['gridDash'] | ConditionalAxisNumberArray;\n gridDashOffset?: BaseAxisNoValueRefs['gridDashOffset'] | ConditionalAxisNumber;\n gridOpacity?: BaseAxisNoValueRefs['gridOpacity'] | ConditionalAxisNumber;\n gridWidth?: BaseAxisNoValueRefs['gridWidth'] | ConditionalAxisNumber;\n tickColor?: BaseAxisNoValueRefs['tickColor'] | ConditionalAxisColor;\n tickDash?: BaseAxisNoValueRefs['tickDash'] | ConditionalAxisNumberArray;\n tickDashOffset?: BaseAxisNoValueRefs['tickDashOffset'] | ConditionalAxisNumber;\n tickOpacity?: BaseAxisNoValueRefs['tickOpacity'] | ConditionalAxisNumber;\n tickSize?: BaseAxisNoValueRefs['tickSize'] | ConditionalAxisNumber;\n tickWidth?: BaseAxisNoValueRefs['tickWidth'] | ConditionalAxisNumber;\n title?: TitleMixins['title'];\n}\n\nexport type AxisConfig = Guide &\n VlOnlyGuideConfig &\n AxisConfigBaseWithConditionalAndSignal & {\n /**\n * Disable axis by default.\n */\n disable?: boolean;\n };\n\nexport interface Axis\n extends AxisConfigBaseWithConditionalAndSignal,\n Guide {\n /**\n * Mark definitions for custom axis encoding.\n *\n * @hidden\n */\n encoding?: AxisEncoding;\n}\n\nexport type AxisInternal = Axis;\n\nexport type AxisPart = keyof AxisEncoding;\nexport const AXIS_PARTS: AxisPart[] = ['domain', 'grid', 'labels', 'ticks', 'title'];\n\n/**\n * A dictionary listing whether a certain axis property is applicable for only main axes or only grid axes.\n */\nexport const AXIS_PROPERTY_TYPE: Record = {\n grid: 'grid',\n gridCap: 'grid',\n gridColor: 'grid',\n gridDash: 'grid',\n gridDashOffset: 'grid',\n gridOpacity: 'grid',\n gridScale: 'grid',\n gridWidth: 'grid',\n\n orient: 'main',\n\n bandPosition: 'both', // Need to be applied to grid axis too, so the grid will align with ticks.\n\n aria: 'main',\n description: 'main',\n domain: 'main',\n domainCap: 'main',\n domainColor: 'main',\n domainDash: 'main',\n domainDashOffset: 'main',\n domainOpacity: 'main',\n domainWidth: 'main',\n format: 'main',\n formatType: 'main',\n labelAlign: 'main',\n labelAngle: 'main',\n labelBaseline: 'main',\n labelBound: 'main',\n labelColor: 'main',\n labelFlush: 'main',\n labelFlushOffset: 'main',\n labelFont: 'main',\n labelFontSize: 'main',\n labelFontStyle: 'main',\n labelFontWeight: 'main',\n labelLimit: 'main',\n labelLineHeight: 'main',\n labelOffset: 'main',\n labelOpacity: 'main',\n labelOverlap: 'main',\n labelPadding: 'main',\n labels: 'main',\n labelSeparation: 'main',\n maxExtent: 'main',\n minExtent: 'main',\n offset: 'both',\n position: 'main',\n tickCap: 'main',\n tickColor: 'main',\n tickDash: 'main',\n tickDashOffset: 'main',\n tickMinStep: 'both',\n tickOffset: 'both', // Need to be applied to grid axis too, so the grid will align with ticks.\n tickOpacity: 'main',\n tickRound: 'both', // Apply rounding to grid and ticks so they are aligned.\n ticks: 'main',\n tickSize: 'main',\n tickWidth: 'both',\n title: 'main',\n titleAlign: 'main',\n titleAnchor: 'main',\n titleAngle: 'main',\n titleBaseline: 'main',\n titleColor: 'main',\n titleFont: 'main',\n titleFontSize: 'main',\n titleFontStyle: 'main',\n titleFontWeight: 'main',\n titleLimit: 'main',\n titleLineHeight: 'main',\n titleOpacity: 'main',\n titlePadding: 'main',\n titleX: 'main',\n titleY: 'main',\n\n encode: 'both', // we hide this in Vega-Lite\n scale: 'both',\n tickBand: 'both',\n tickCount: 'both',\n tickExtra: 'both',\n translate: 'both',\n values: 'both',\n zindex: 'both' // this is actually set afterward, so it doesn't matter\n};\n\nexport interface AxisEncoding {\n /**\n * Custom encoding for the axis container.\n */\n axis?: GuideEncodingEntry;\n\n /**\n * Custom encoding for the axis domain rule mark.\n */\n domain?: GuideEncodingEntry;\n\n /**\n * Custom encoding for axis gridline rule marks.\n */\n grid?: GuideEncodingEntry;\n\n /**\n * Custom encoding for axis label text marks.\n */\n labels?: GuideEncodingEntry;\n\n /**\n * Custom encoding for axis tick rule marks.\n */\n ticks?: GuideEncodingEntry;\n\n /**\n * Custom encoding for the axis title text mark.\n */\n title?: GuideEncodingEntry;\n}\n\nexport const COMMON_AXIS_PROPERTIES_INDEX: Flag)> = {\n orient: 1, // other things can depend on orient\n\n aria: 1,\n bandPosition: 1,\n description: 1,\n domain: 1,\n domainCap: 1,\n domainColor: 1,\n domainDash: 1,\n domainDashOffset: 1,\n domainOpacity: 1,\n domainWidth: 1,\n format: 1,\n formatType: 1,\n grid: 1,\n gridCap: 1,\n gridColor: 1,\n gridDash: 1,\n gridDashOffset: 1,\n gridOpacity: 1,\n gridWidth: 1,\n labelAlign: 1,\n labelAngle: 1,\n labelBaseline: 1,\n labelBound: 1,\n labelColor: 1,\n labelFlush: 1,\n labelFlushOffset: 1,\n labelFont: 1,\n labelFontSize: 1,\n labelFontStyle: 1,\n labelFontWeight: 1,\n labelLimit: 1,\n labelLineHeight: 1,\n labelOffset: 1,\n labelOpacity: 1,\n labelOverlap: 1,\n labelPadding: 1,\n labels: 1,\n labelSeparation: 1,\n maxExtent: 1,\n minExtent: 1,\n offset: 1,\n position: 1,\n tickBand: 1,\n tickCap: 1,\n tickColor: 1,\n tickCount: 1,\n tickDash: 1,\n tickDashOffset: 1,\n tickExtra: 1,\n tickMinStep: 1,\n tickOffset: 1,\n tickOpacity: 1,\n tickRound: 1,\n ticks: 1,\n tickSize: 1,\n tickWidth: 1,\n title: 1,\n titleAlign: 1,\n titleAnchor: 1,\n titleAngle: 1,\n titleBaseline: 1,\n titleColor: 1,\n titleFont: 1,\n titleFontSize: 1,\n titleFontStyle: 1,\n titleFontWeight: 1,\n titleLimit: 1,\n titleLineHeight: 1,\n titleOpacity: 1,\n titlePadding: 1,\n titleX: 1,\n titleY: 1,\n translate: 1,\n values: 1,\n zindex: 1\n};\n\nconst AXIS_PROPERTIES_INDEX: Flag> = {\n ...COMMON_AXIS_PROPERTIES_INDEX,\n style: 1,\n labelExpr: 1,\n encoding: 1\n};\n\nexport function isAxisProperty(prop: string): prop is keyof Axis {\n return !!AXIS_PROPERTIES_INDEX[prop];\n}\n\n// Export for dependent projects\nexport const AXIS_PROPERTIES = keys(AXIS_PROPERTIES_INDEX);\n\nexport interface AxisConfigMixins {\n /**\n * Axis configuration, which determines default properties for all `x` and `y` [axes](https://vega.github.io/vega-lite/docs/axis.html). For a full list of axis configuration options, please see the [corresponding section of the axis documentation](https://vega.github.io/vega-lite/docs/axis.html#config).\n */\n axis?: AxisConfig;\n\n /**\n * X-axis specific config.\n */\n axisX?: AxisConfig;\n\n /**\n * Y-axis specific config.\n */\n axisY?: AxisConfig;\n\n /**\n * Config for y-axis along the left edge of the chart.\n */\n axisLeft?: AxisConfig;\n\n /**\n * Config for y-axis along the right edge of the chart.\n */\n axisRight?: AxisConfig;\n\n /**\n * Config for x-axis along the top edge of the chart.\n */\n axisTop?: AxisConfig;\n\n /**\n * Config for x-axis along the bottom edge of the chart.\n */\n axisBottom?: AxisConfig;\n\n /**\n * Config for axes with \"band\" scales.\n */\n axisBand?: AxisConfig;\n\n /**\n * Config for axes with \"point\" scales.\n */\n axisPoint?: AxisConfig;\n\n /**\n * Config for axes with \"point\" or \"band\" scales.\n */\n axisDiscrete?: AxisConfig;\n\n /**\n * Config for quantitative axes.\n */\n axisQuantitative?: AxisConfig;\n\n /**\n * Config for temporal axes.\n */\n axisTemporal?: AxisConfig;\n\n /**\n * Config for x-axes with \"band\" scales.\n */\n axisXBand?: AxisConfig;\n\n /**\n * Config for x-axes with \"point\" scales.\n */\n axisXPoint?: AxisConfig;\n\n /**\n * Config for x-axes with \"point\" or \"band\" scales.\n */\n axisXDiscrete?: AxisConfig;\n\n /**\n * Config for x-quantitative axes.\n */\n axisXQuantitative?: AxisConfig;\n\n /**\n * Config for x-temporal axes.\n */\n axisXTemporal?: AxisConfig;\n\n /**\n * Config for y-axes with \"band\" scales.\n */\n axisYBand?: AxisConfig;\n\n /**\n * Config for y-axes with \"point\" scales.\n */\n axisYPoint?: AxisConfig;\n\n /**\n * Config for y-axes with \"point\" or \"band\" scales.\n */\n axisYDiscrete?: AxisConfig;\n\n /**\n * Config for y-quantitative axes.\n */\n axisYQuantitative?: AxisConfig;\n\n /**\n * Config for y-temporal axes.\n */\n axisYTemporal?: AxisConfig;\n}\n\nconst AXIS_CONFIGS_INDEX: Flag> = {\n axis: 1,\n axisBand: 1,\n axisBottom: 1,\n axisDiscrete: 1,\n axisLeft: 1,\n axisPoint: 1,\n axisQuantitative: 1,\n axisRight: 1,\n axisTemporal: 1,\n axisTop: 1,\n axisX: 1,\n axisXBand: 1,\n axisXDiscrete: 1,\n axisXPoint: 1,\n axisXQuantitative: 1,\n axisXTemporal: 1,\n axisY: 1,\n axisYBand: 1,\n axisYDiscrete: 1,\n axisYPoint: 1,\n axisYQuantitative: 1,\n axisYTemporal: 1\n};\n\nexport const AXIS_CONFIGS = keys(AXIS_CONFIGS_INDEX);\n","import {FieldName} from '../channeldef';\nimport {CompositeEncoding, FacetedCompositeEncoding} from '../compositemark';\nimport {Encoding} from '../encoding';\nimport {ExprRef} from '../expr';\nimport {AnyMark, Mark, MarkDef} from '../mark';\nimport {VariableParameter} from '../parameter';\nimport {Projection} from '../projection';\nimport {SelectionParameter} from '../selection';\nimport {Field} from './../channeldef';\nimport {BaseSpec, DataMixins, FrameMixins, GenericCompositionLayout, ResolveMixins} from './base';\nimport {TopLevel} from './toplevel';\n/**\n * Base interface for a unit (single-view) specification.\n */\nexport interface GenericUnitSpec, M> extends BaseSpec {\n /**\n * A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n * `\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def).\n */\n mark: M;\n\n /**\n * A key-value mapping between encoding channels and definition of fields.\n */\n encoding?: E;\n\n /**\n * An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks\n * and to `latitude` and `\"longitude\"` channels for other marks.\n */\n projection?: Projection;\n\n /**\n * An array of parameters that may either be simple variables, or more complex selections that map user input to data queries.\n */\n params?: (VariableParameter | SelectionParameter)[];\n}\n\n/**\n * A unit specification without any shortcut/expansion syntax.\n */\nexport type NormalizedUnitSpec = GenericUnitSpec, Mark | MarkDef>;\n\n/**\n * A unit specification, which can contain either [primitive marks or composite marks](https://vega.github.io/vega-lite/docs/mark.html#types).\n */\nexport type UnitSpec = GenericUnitSpec, AnyMark>;\n\nexport type UnitSpecWithFrame = GenericUnitSpec, AnyMark> & FrameMixins;\n\n/**\n * Unit spec that can have a composite mark and row or column channels (shorthand for a facet spec).\n */\nexport type FacetedUnitSpec = GenericUnitSpec, AnyMark> &\n ResolveMixins &\n GenericCompositionLayout &\n FrameMixins;\n\nexport type TopLevelUnitSpec = TopLevel> & DataMixins;\n\nexport function isUnitSpec(spec: BaseSpec): spec is FacetedUnitSpec | NormalizedUnitSpec {\n return 'mark' in spec;\n}\n","import {Encoding} from '../encoding';\nimport {GenericMarkDef, getMarkType} from '../mark';\nimport {NonFacetUnitNormalizer, Normalize, NormalizerParams} from '../normalize/base';\nimport {GenericSpec} from '../spec';\nimport {GenericLayerSpec, NormalizedLayerSpec} from '../spec/layer';\nimport {GenericUnitSpec, isUnitSpec, NormalizedUnitSpec} from '../spec/unit';\nimport {FieldName} from '../channeldef';\n\n// TODO: replace string with Mark\nexport type CompositeMarkUnitSpec = GenericUnitSpec>;\n\nexport class CompositeMarkNormalizer implements NonFacetUnitNormalizer> {\n constructor(\n public name: string,\n public run: (\n spec: CompositeMarkUnitSpec,\n params: NormalizerParams,\n normalize: Normalize<\n // Input of the normalize method\n GenericUnitSpec, M> | GenericLayerSpec,\n // Output of the normalize method\n NormalizedLayerSpec | NormalizedUnitSpec\n >\n ) => NormalizedLayerSpec | NormalizedUnitSpec\n ) {}\n\n public hasMatchingType(spec: GenericSpec): spec is CompositeMarkUnitSpec {\n if (isUnitSpec(spec)) {\n return getMarkType(spec.mark) === this.name;\n }\n return false;\n }\n}\n","import {AggregateOp} from 'vega';\nimport {array, isArray} from 'vega-util';\nimport {isArgmaxDef, isArgminDef} from './aggregate';\nimport {isBinned, isBinning} from './bin';\nimport {\n ANGLE,\n CHANNELS,\n COLOR,\n DESCRIPTION,\n DETAIL,\n FILL,\n FILLOPACITY,\n HREF,\n isChannel,\n isNonPositionScaleChannel,\n isSecondaryRangeChannel,\n isXorY,\n KEY,\n LATITUDE,\n LATITUDE2,\n LONGITUDE,\n LONGITUDE2,\n OPACITY,\n ORDER,\n RADIUS,\n RADIUS2,\n SHAPE,\n SIZE,\n STROKE,\n STROKEDASH,\n STROKEOPACITY,\n STROKEWIDTH,\n supportMark,\n TEXT,\n THETA,\n THETA2,\n TOOLTIP,\n URL,\n X,\n X2,\n Y,\n Y2,\n Channel\n} from './channel';\nimport {\n binRequiresRange,\n ChannelDef,\n ColorDef,\n Field,\n FieldDef,\n FieldDefWithoutScale,\n getFieldDef,\n getGuide,\n hasConditionalFieldDef,\n initChannelDef,\n initFieldDef,\n isConditionalDef,\n isDatumDef,\n isFieldDef,\n isTypedFieldDef,\n isValueDef,\n LatLongDef,\n NumericArrayMarkPropDef,\n NumericMarkPropDef,\n OrderFieldDef,\n OrderValueDef,\n PolarDef,\n Position2Def,\n PositionDef,\n SecondaryFieldDef,\n ShapeDef,\n StringFieldDef,\n StringFieldDefWithCondition,\n StringValueDefWithCondition,\n TextDef,\n title,\n TypedFieldDef,\n vgField\n} from './channeldef';\nimport {Config} from './config';\nimport * as log from './log';\nimport {Mark} from './mark';\nimport {EncodingFacetMapping} from './spec/facet';\nimport {AggregatedFieldDef, BinTransform, TimeUnitTransform} from './transform';\nimport {QUANTITATIVE, TEMPORAL} from './type';\nimport {keys, some} from './util';\nimport {isSignalRef} from './vega.schema';\n\nexport interface Encoding {\n /**\n * X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n *\n * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n */\n x?: PositionDef;\n\n /**\n * Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n *\n * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n */\n y?: PositionDef;\n\n /**\n * X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n *\n * The `value` of this channel can be a number or a string `\"width\"` for the width of the plot.\n */\n // TODO: Ham need to add default behavior\n // `x2` cannot have type as it should have the same type as `x`\n x2?: Position2Def;\n\n /**\n * Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n *\n * The `value` of this channel can be a number or a string `\"height\"` for the height of the plot.\n */\n // TODO: Ham need to add default behavior\n // `y2` cannot have type as it should have the same type as `y`\n y2?: Position2Def;\n\n /**\n * Longitude position of geographically projected marks.\n */\n longitude?: LatLongDef;\n\n /**\n * Latitude position of geographically projected marks.\n */\n latitude?: LatLongDef;\n\n /**\n * Longitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n */\n // `longitude2` cannot have type as it should have the same type as `longitude`\n longitude2?: Position2Def;\n\n /**\n * Latitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and `\"rule\"`.\n */\n // `latitude2` cannot have type as it should have the same type as `latitude`\n latitude2?: Position2Def;\n\n /**\n * - For arc marks, the arc length in radians if theta2 is not specified, otherwise the start arc angle. (A value of 0 indicates up or “north”, increasing values proceed clockwise.)\n *\n * - For text marks, polar coordinate angle in radians.\n */\n theta?: PolarDef;\n\n /**\n * The end angle of arc marks in radians. A value of 0 indicates up or “north”, increasing values proceed clockwise.\n */\n theta2?: Position2Def;\n\n /**\n * The outer radius in pixels of arc marks.\n */\n\n radius?: PolarDef;\n\n /**\n * The inner radius in pixels of arc marks.\n */\n radius2?: Position2Def;\n\n /**\n * Color of the marks – either fill or stroke color based on the `filled` property of mark definition.\n * By default, `color` represents fill color for `\"area\"`, `\"bar\"`, `\"tick\"`,\n * `\"text\"`, `\"trail\"`, `\"circle\"`, and `\"square\"` / stroke color for `\"line\"` and `\"point\"`.\n *\n * __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n *\n * _Note:_\n * 1) For fine-grained control over both fill and stroke colors of the marks, please use the `fill` and `stroke` channels. The `fill` or `stroke` encodings have higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified.\n * 2) See the scale documentation for more information about customizing [color scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme).\n */\n color?: ColorDef;\n\n /**\n * Fill color of the marks.\n * __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n *\n * _Note:_ The `fill` encoding has higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified.\n */\n fill?: ColorDef;\n\n /**\n * Stroke color of the marks.\n * __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n *\n * _Note:_ The `stroke` encoding has higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified.\n */\n\n stroke?: ColorDef;\n\n /**\n * Opacity of the marks.\n *\n * __Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `opacity` property.\n */\n opacity?: NumericMarkPropDef;\n\n /**\n * Fill opacity of the marks.\n *\n * __Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `fillOpacity` property.\n */\n fillOpacity?: NumericMarkPropDef;\n\n /**\n * Stroke opacity of the marks.\n *\n * __Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `strokeOpacity` property.\n */\n strokeOpacity?: NumericMarkPropDef;\n\n /**\n * Stroke width of the marks.\n *\n * __Default value:__ If undefined, the default stroke width depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `strokeWidth` property.\n */\n strokeWidth?: NumericMarkPropDef;\n\n /**\n * Stroke dash of the marks.\n *\n * __Default value:__ `[1,0]` (No dash).\n */\n strokeDash?: NumericArrayMarkPropDef;\n\n /**\n * Size of the mark.\n * - For `\"point\"`, `\"square\"` and `\"circle\"`, – the symbol size, or pixel area of the mark.\n * - For `\"bar\"` and `\"tick\"` – the bar and tick's size.\n * - For `\"text\"` – the text's font size.\n * - Size is unsupported for `\"line\"`, `\"area\"`, and `\"rect\"`. (Use `\"trail\"` instead of line with varying size)\n */\n size?: NumericMarkPropDef;\n\n /**\n * Rotation angle of point and text marks.\n */\n angle?: NumericMarkPropDef;\n\n /**\n * Shape of the mark.\n *\n * 1. For `point` marks the supported values include:\n * - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n * - the line symbol `\"stroke\"`\n * - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n * - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n *\n * 2. For `geoshape` marks it should be a field definition of the geojson data\n *\n * __Default value:__ If undefined, the default shape depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#point-config)'s `shape` property. (`\"circle\"` if unset.)\n */\n shape?: ShapeDef;\n /**\n * Additional levels of detail for grouping data in aggregate views and\n * in line, trail, and area marks without mapping data to a specific visual channel.\n */\n detail?: FieldDefWithoutScale | FieldDefWithoutScale[];\n\n /**\n * A data field to use as a unique key for data binding. When a visualization’s data is updated, the key value will be used to match data elements to existing mark instances. Use a key channel to enable object constancy for transitions over dynamic data.\n */\n key?: FieldDefWithoutScale;\n\n /**\n * Text of the `text` mark.\n */\n text?: TextDef;\n\n /**\n * The tooltip text to show upon mouse hover. Specifying `tooltip` encoding overrides [the `tooltip` property in the mark definition](https://vega.github.io/vega-lite/docs/mark.html#mark-def).\n *\n * See the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite.\n */\n tooltip?: StringFieldDefWithCondition | StringValueDefWithCondition | StringFieldDef[] | null;\n\n /**\n * A URL to load upon mouse click.\n */\n href?: StringFieldDefWithCondition | StringValueDefWithCondition;\n\n /**\n * The URL of an image mark.\n */\n url?: StringFieldDefWithCondition | StringValueDefWithCondition;\n\n /**\n * A text description of this mark for ARIA accessibility (SVG output only). For SVG output the `\"aria-label\"` attribute will be set to this description.\n */\n description?: StringFieldDefWithCondition | StringValueDefWithCondition;\n\n /**\n * Order of the marks.\n * - For stacked marks, this `order` channel encodes [stack order](https://vega.github.io/vega-lite/docs/stack.html#order).\n * - For line and trail marks, this `order` channel encodes order of data points in the lines. This can be useful for creating [a connected scatterplot](https://vega.github.io/vega-lite/examples/connected_scatterplot.html). Setting `order` to `{\"value\": null}` makes the line marks use the original order in the data sources.\n * - Otherwise, this `order` channel encodes layer order of the marks.\n *\n * __Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating additional aggregation grouping.\n */\n order?: OrderFieldDef | OrderFieldDef[] | OrderValueDef;\n}\n\nexport interface EncodingWithFacet extends Encoding, EncodingFacetMapping {}\n\nexport function channelHasField(\n encoding: EncodingWithFacet,\n channel: keyof EncodingWithFacet\n): boolean {\n const channelDef = encoding && encoding[channel];\n if (channelDef) {\n if (isArray(channelDef)) {\n return some(channelDef, fieldDef => !!fieldDef.field);\n } else {\n return isFieldDef(channelDef) || hasConditionalFieldDef(channelDef);\n }\n }\n return false;\n}\n\nexport function isAggregate(encoding: EncodingWithFacet) {\n return some(CHANNELS, channel => {\n if (channelHasField(encoding, channel)) {\n const channelDef = encoding[channel];\n if (isArray(channelDef)) {\n return some(channelDef, fieldDef => !!fieldDef.aggregate);\n } else {\n const fieldDef = getFieldDef(channelDef);\n return fieldDef && !!fieldDef.aggregate;\n }\n }\n return false;\n });\n}\n\nexport function extractTransformsFromEncoding(oldEncoding: Encoding, config: Config) {\n const groupby: string[] = [];\n const bins: BinTransform[] = [];\n const timeUnits: TimeUnitTransform[] = [];\n const aggregate: AggregatedFieldDef[] = [];\n const encoding: Encoding = {};\n\n forEach(oldEncoding, (channelDef, channel) => {\n // Extract potential embedded transformations along with remaining properties\n if (isFieldDef(channelDef)) {\n const {field, aggregate: aggOp, bin, timeUnit, ...remaining} = channelDef;\n if (aggOp || timeUnit || bin) {\n const guide = getGuide(channelDef);\n const isTitleDefined = guide?.title;\n let newField = vgField(channelDef, {forAs: true});\n const newFieldDef: FieldDef = {\n // Only add title if it doesn't exist\n ...(isTitleDefined ? [] : {title: title(channelDef, config, {allowDisabling: true})}),\n ...remaining,\n // Always overwrite field\n field: newField\n };\n\n if (aggOp) {\n let op: AggregateOp;\n\n if (isArgmaxDef(aggOp)) {\n op = 'argmax';\n newField = vgField({op: 'argmax', field: aggOp.argmax}, {forAs: true});\n newFieldDef.field = `${newField}.${field}`;\n } else if (isArgminDef(aggOp)) {\n op = 'argmin';\n newField = vgField({op: 'argmin', field: aggOp.argmin}, {forAs: true});\n newFieldDef.field = `${newField}.${field}`;\n } else if (aggOp !== 'boxplot' && aggOp !== 'errorbar' && aggOp !== 'errorband') {\n op = aggOp;\n }\n\n if (op) {\n const aggregateEntry: AggregatedFieldDef = {\n op,\n as: newField\n };\n if (field) {\n aggregateEntry.field = field;\n }\n aggregate.push(aggregateEntry);\n }\n } else {\n groupby.push(newField);\n if (isTypedFieldDef(channelDef) && isBinning(bin)) {\n bins.push({bin, field, as: newField});\n // Add additional groupbys for range and end of bins\n groupby.push(vgField(channelDef, {binSuffix: 'end'}));\n if (binRequiresRange(channelDef, channel)) {\n groupby.push(vgField(channelDef, {binSuffix: 'range'}));\n }\n // Create accompanying 'x2' or 'y2' field if channel is 'x' or 'y' respectively\n if (isXorY(channel)) {\n const secondaryChannel: SecondaryFieldDef = {\n field: `${newField}_end`\n };\n encoding[`${channel}2`] = secondaryChannel;\n }\n newFieldDef.bin = 'binned';\n if (!isSecondaryRangeChannel(channel)) {\n newFieldDef['type'] = QUANTITATIVE;\n }\n } else if (timeUnit) {\n timeUnits.push({\n timeUnit,\n field,\n as: newField\n });\n\n // define the format type for later compilation\n const formatType = isTypedFieldDef(channelDef) && channelDef.type !== TEMPORAL && 'time';\n if (formatType) {\n if (channel === TEXT || channel === TOOLTIP) {\n newFieldDef['formatType'] = formatType;\n } else if (isNonPositionScaleChannel(channel)) {\n newFieldDef['legend'] = {\n formatType,\n ...newFieldDef['legend']\n };\n } else if (isXorY(channel)) {\n newFieldDef['axis'] = {\n formatType,\n ...newFieldDef['axis']\n };\n }\n }\n }\n }\n\n // now the field should refer to post-transformed field instead\n encoding[channel as any] = newFieldDef;\n } else {\n groupby.push(field);\n encoding[channel as any] = oldEncoding[channel];\n }\n } else {\n // For value def / signal ref / datum def, just copy\n encoding[channel as any] = oldEncoding[channel];\n }\n });\n\n return {\n bins,\n timeUnits,\n aggregate,\n groupby,\n encoding\n };\n}\n\nexport function markChannelCompatible(encoding: Encoding, channel: Channel, mark: Mark) {\n const markSupported = supportMark(channel, mark);\n if (!markSupported) {\n return false;\n } else if (markSupported === 'binned') {\n const primaryFieldDef = encoding[channel === X2 ? X : Y];\n\n // circle, point, square and tick only support x2/y2 when their corresponding x/y fieldDef\n // has \"binned\" data and thus need x2/y2 to specify the bin-end field.\n if (isFieldDef(primaryFieldDef) && isFieldDef(encoding[channel]) && isBinned(primaryFieldDef.bin)) {\n return true;\n } else {\n return false;\n }\n }\n return true;\n}\n\nexport function initEncoding(\n encoding: Encoding,\n mark: Mark,\n filled: boolean,\n config: Config\n): Encoding {\n return keys(encoding).reduce((normalizedEncoding: Encoding, channel: Channel) => {\n if (!isChannel(channel)) {\n // Drop invalid channel\n log.warn(log.message.invalidEncodingChannel(channel));\n return normalizedEncoding;\n }\n\n const channelDef = encoding[channel];\n if (channel === 'angle' && mark === 'arc' && !encoding.theta) {\n log.warn(log.message.REPLACE_ANGLE_WITH_THETA);\n channel = THETA;\n }\n\n if (!markChannelCompatible(encoding, channel, mark)) {\n // Drop unsupported channel\n log.warn(log.message.incompatibleChannel(channel, mark));\n return normalizedEncoding;\n }\n\n // Drop line's size if the field is aggregated.\n if (channel === SIZE && mark === 'line') {\n const fieldDef = getFieldDef(encoding[channel]);\n if (fieldDef?.aggregate) {\n log.warn(log.message.LINE_WITH_VARYING_SIZE);\n return normalizedEncoding;\n }\n }\n // Drop color if either fill or stroke is specified\n\n if (channel === COLOR && (filled ? 'fill' in encoding : 'stroke' in encoding)) {\n log.warn(log.message.droppingColor('encoding', {fill: 'fill' in encoding, stroke: 'stroke' in encoding}));\n return normalizedEncoding;\n }\n\n if (\n channel === DETAIL ||\n (channel === ORDER && !isArray(channelDef) && !isValueDef(channelDef)) ||\n (channel === TOOLTIP && isArray(channelDef))\n ) {\n if (channelDef) {\n // Array of fieldDefs for detail channel (or production rule)\n (normalizedEncoding[channel] as any) = array(channelDef).reduce(\n (defs: FieldDef[], fieldDef: FieldDef) => {\n if (!isFieldDef(fieldDef)) {\n log.warn(log.message.emptyFieldDef(fieldDef, channel));\n } else {\n defs.push(initFieldDef(fieldDef, channel));\n }\n return defs;\n },\n []\n );\n }\n } else {\n if (channel === TOOLTIP && channelDef === null) {\n // Preserve null so we can use it to disable tooltip\n normalizedEncoding[channel] = null;\n } else if (\n !isFieldDef(channelDef) &&\n !isDatumDef(channelDef) &&\n !isValueDef(channelDef) &&\n !isConditionalDef(channelDef) &&\n !isSignalRef(channelDef)\n ) {\n log.warn(log.message.emptyFieldDef(channelDef, channel));\n return normalizedEncoding;\n }\n\n normalizedEncoding[channel as any] = initChannelDef(channelDef as ChannelDef, channel, config);\n }\n return normalizedEncoding;\n }, {});\n}\n\n/**\n * For composite marks, we have to call initChannelDef during init so we can infer types earlier.\n */\nexport function normalizeEncoding(encoding: Encoding, config: Config): Encoding {\n const normalizedEncoding: Encoding = {};\n\n for (const channel of keys(encoding)) {\n const newChannelDef = initChannelDef(encoding[channel], channel, config, {compositeMark: true});\n normalizedEncoding[channel as any] = newChannelDef;\n }\n\n return normalizedEncoding;\n}\n\nexport function fieldDefs(encoding: EncodingWithFacet): FieldDef[] {\n const arr: FieldDef[] = [];\n for (const channel of keys(encoding)) {\n if (channelHasField(encoding, channel)) {\n const channelDef = encoding[channel];\n const channelDefArray = array(channelDef);\n for (const def of channelDefArray) {\n if (isFieldDef(def)) {\n arr.push(def);\n } else if (hasConditionalFieldDef(def)) {\n arr.push(def.condition);\n }\n }\n }\n }\n return arr;\n}\n\nexport function forEach>(\n mapping: U,\n f: (cd: ChannelDef, c: keyof U) => void,\n thisArg?: any\n) {\n if (!mapping) {\n return;\n }\n\n for (const channel of keys(mapping)) {\n const el = mapping[channel];\n if (isArray(el)) {\n for (const channelDef of el as unknown[]) {\n f.call(thisArg, channelDef, channel);\n }\n } else {\n f.call(thisArg, el, channel);\n }\n }\n}\n\nexport function reduce>(\n mapping: U,\n f: (acc: any, fd: TypedFieldDef, c: keyof U) => U,\n init: T,\n thisArg?: any\n) {\n if (!mapping) {\n return init;\n }\n\n return keys(mapping).reduce((r, channel) => {\n const map = mapping[channel];\n if (isArray(map)) {\n return map.reduce((r1: T, channelDef: ChannelDef) => {\n return f.call(thisArg, r1, channelDef, channel);\n }, r);\n } else {\n return f.call(thisArg, r, map, channel);\n }\n }, init);\n}\n\n/**\n * Returns list of path grouping fields for the given encoding\n */\nexport function pathGroupingFields(mark: Mark, encoding: Encoding): string[] {\n return keys(encoding).reduce((details, channel) => {\n switch (channel) {\n // x, y, x2, y2, lat, long, lat1, long2, order, tooltip, href, aria label, cursor should not cause lines to group\n case X:\n case Y:\n case HREF:\n case DESCRIPTION:\n case URL:\n case X2:\n case Y2:\n case THETA:\n case THETA2:\n case RADIUS:\n case RADIUS2:\n // falls through\n\n case LATITUDE:\n case LONGITUDE:\n case LATITUDE2:\n case LONGITUDE2:\n // TODO: case 'cursor':\n\n // text, shape, shouldn't be a part of line/trail/area [falls through]\n case TEXT:\n case SHAPE:\n case ANGLE:\n // falls through\n\n // tooltip fields should not be added to group by [falls through]\n case TOOLTIP:\n return details;\n\n case ORDER:\n // order should not group line / trail\n if (mark === 'line' || mark === 'trail') {\n return details;\n }\n // but order should group area for stacking (falls through)\n\n case DETAIL:\n case KEY: {\n const channelDef = encoding[channel];\n if (isArray(channelDef) || isFieldDef(channelDef)) {\n for (const fieldDef of array(channelDef)) {\n if (!fieldDef.aggregate) {\n details.push(vgField(fieldDef, {}));\n }\n }\n }\n return details;\n }\n\n case SIZE:\n if (mark === 'trail') {\n // For trail, size should not group trail lines.\n return details;\n }\n // For line, size should group lines.\n\n // falls through\n case COLOR:\n case FILL:\n case STROKE:\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n case STROKEDASH:\n case STROKEWIDTH: {\n // TODO strokeDashOffset:\n // falls through\n\n const fieldDef = getFieldDef(encoding[channel]);\n if (fieldDef && !fieldDef.aggregate) {\n details.push(vgField(fieldDef, {}));\n }\n return details;\n }\n }\n }, []);\n}\n","import {Orientation, SignalRef, Text} from 'vega';\nimport {isArray, isBoolean, isString} from 'vega-util';\nimport {CompositeMark, CompositeMarkDef} from '.';\nimport {\n Field,\n FieldDefBase,\n isContinuousFieldOrDatumDef,\n isFieldDef,\n isFieldOrDatumDefForTimeFormat,\n PositionFieldDef,\n SecondaryFieldDef,\n StringFieldDef,\n StringFieldDefWithCondition,\n StringValueDefWithCondition\n} from '../channeldef';\nimport {Encoding, fieldDefs} from '../encoding';\nimport {ExprRef} from '../expr';\nimport * as log from '../log';\nimport {ColorMixins, GenericMarkDef, isMarkDef, Mark, MarkConfig, MarkDef} from '../mark';\nimport {GenericUnitSpec, NormalizedUnitSpec} from '../spec';\nimport {getFirstDefined, hash, unique} from '../util';\nimport {isSignalRef} from '../vega.schema';\nimport {toStringFieldDef} from './../channeldef';\n\nexport type PartsMixins

= Partial>>;\n\nexport type GenericCompositeMarkDef = GenericMarkDef &\n ColorMixins & {\n /**\n * The opacity (value between [0,1]) of the mark.\n *\n * @minimum 0\n * @maximum 1\n */\n opacity?: number;\n\n /**\n * Whether a composite mark be clipped to the enclosing group’s width and height.\n */\n clip?: boolean;\n };\n\nexport interface CompositeMarkTooltipSummary {\n /**\n * The prefix of the field to be shown in tooltip\n */\n fieldPrefix: string;\n\n /**\n * The title prefix to show, corresponding to the field with field prefix `fieldPrefix`\n */\n titlePrefix: Text | SignalRef;\n}\n\nexport function filterTooltipWithAggregatedField(\n oldEncoding: Encoding\n): {\n customTooltipWithoutAggregatedField?:\n | StringFieldDefWithCondition\n | StringValueDefWithCondition\n | StringFieldDef[];\n filteredEncoding: Encoding;\n} {\n const {tooltip, ...filteredEncoding} = oldEncoding;\n if (!tooltip) {\n return {filteredEncoding};\n }\n\n let customTooltipWithAggregatedField:\n | StringFieldDefWithCondition\n | StringValueDefWithCondition\n | StringFieldDef[];\n let customTooltipWithoutAggregatedField:\n | StringFieldDefWithCondition\n | StringValueDefWithCondition\n | StringFieldDef[];\n\n if (isArray(tooltip)) {\n for (const t of tooltip) {\n if (t.aggregate) {\n if (!customTooltipWithAggregatedField) {\n customTooltipWithAggregatedField = [];\n }\n (customTooltipWithAggregatedField as StringFieldDef[]).push(t);\n } else {\n if (!customTooltipWithoutAggregatedField) {\n customTooltipWithoutAggregatedField = [];\n }\n (customTooltipWithoutAggregatedField as StringFieldDef[]).push(t);\n }\n }\n\n if (customTooltipWithAggregatedField) {\n (filteredEncoding as Encoding).tooltip = customTooltipWithAggregatedField;\n }\n } else {\n if (tooltip['aggregate']) {\n (filteredEncoding as Encoding).tooltip = tooltip;\n } else {\n customTooltipWithoutAggregatedField = tooltip;\n }\n }\n\n if (isArray(customTooltipWithoutAggregatedField) && customTooltipWithoutAggregatedField.length === 1) {\n customTooltipWithoutAggregatedField = customTooltipWithoutAggregatedField[0];\n }\n return {customTooltipWithoutAggregatedField, filteredEncoding};\n}\n\nexport function getCompositeMarkTooltip(\n tooltipSummary: CompositeMarkTooltipSummary[],\n continuousAxisChannelDef: PositionFieldDef,\n encodingWithoutContinuousAxis: Encoding,\n withFieldName = true\n): Encoding {\n if ('tooltip' in encodingWithoutContinuousAxis) {\n return {tooltip: encodingWithoutContinuousAxis.tooltip};\n }\n\n const fiveSummaryTooltip: StringFieldDef[] = tooltipSummary.map(\n ({fieldPrefix, titlePrefix}): StringFieldDef => {\n const mainTitle = withFieldName ? ` of ${getTitle(continuousAxisChannelDef)}` : '';\n return {\n field: fieldPrefix + continuousAxisChannelDef.field,\n type: continuousAxisChannelDef.type,\n title: isSignalRef(titlePrefix) ? {signal: `${titlePrefix}\"${escape(mainTitle)}\"`} : titlePrefix + mainTitle\n };\n }\n );\n\n const tooltipFieldDefs = fieldDefs(encodingWithoutContinuousAxis).map(toStringFieldDef);\n\n return {\n tooltip: [\n ...fiveSummaryTooltip,\n // need to cast because TextFieldDef supports fewer types of bin\n ...unique(tooltipFieldDefs, hash)\n ]\n };\n}\n\nexport function getTitle(continuousAxisChannelDef: PositionFieldDef) {\n const {title, field} = continuousAxisChannelDef;\n return getFirstDefined(title, field);\n}\n\nexport function makeCompositeAggregatePartFactory

>(\n compositeMarkDef: GenericCompositeMarkDef & P,\n continuousAxis: 'x' | 'y',\n continuousAxisChannelDef: PositionFieldDef,\n sharedEncoding: Encoding,\n compositeMarkConfig: P\n) {\n const {scale, axis} = continuousAxisChannelDef;\n\n return ({\n partName,\n mark,\n positionPrefix,\n endPositionPrefix = undefined,\n extraEncoding = {}\n }: {\n partName: keyof P;\n mark: Mark | MarkDef;\n positionPrefix: string;\n endPositionPrefix?: string;\n extraEncoding?: Encoding;\n }) => {\n const title = getTitle(continuousAxisChannelDef);\n\n return partLayerMixins

(compositeMarkDef, partName, compositeMarkConfig, {\n mark, // TODO better remove this method and just have mark as a parameter of the method\n encoding: {\n [continuousAxis]: {\n field: `${positionPrefix}_${continuousAxisChannelDef.field}`,\n type: continuousAxisChannelDef.type,\n ...(title !== undefined ? {title} : {}),\n ...(scale !== undefined ? {scale} : {}),\n ...(axis !== undefined ? {axis} : {})\n },\n ...(isString(endPositionPrefix)\n ? {\n [`${continuousAxis}2`]: {\n field: `${endPositionPrefix}_${continuousAxisChannelDef.field}`\n }\n }\n : {}),\n ...sharedEncoding,\n ...extraEncoding\n }\n });\n };\n}\n\nexport function partLayerMixins

>(\n markDef: GenericCompositeMarkDef & P,\n part: keyof P,\n compositeMarkConfig: P,\n partBaseSpec: NormalizedUnitSpec\n): NormalizedUnitSpec[] {\n const {clip, color, opacity} = markDef;\n\n const mark = markDef.type;\n\n if (markDef[part] || (markDef[part] === undefined && compositeMarkConfig[part])) {\n return [\n {\n ...partBaseSpec,\n mark: {\n ...(compositeMarkConfig[part] as MarkConfig),\n ...(clip ? {clip} : {}),\n ...(color ? {color} : {}),\n ...(opacity ? {opacity} : {}),\n ...(isMarkDef(partBaseSpec.mark) ? partBaseSpec.mark : {type: partBaseSpec.mark}),\n style: `${mark}-${part}`,\n ...(isBoolean(markDef[part]) ? {} : (markDef[part] as MarkConfig))\n }\n }\n ];\n }\n return [];\n}\n\nexport function compositeMarkContinuousAxis(\n spec: GenericUnitSpec, CompositeMark | CompositeMarkDef>,\n orient: Orientation,\n compositeMark: M\n): {\n continuousAxisChannelDef: PositionFieldDef;\n continuousAxisChannelDef2: SecondaryFieldDef;\n continuousAxisChannelDefError: SecondaryFieldDef;\n continuousAxisChannelDefError2: SecondaryFieldDef;\n continuousAxis: 'x' | 'y';\n} {\n const {encoding} = spec;\n const continuousAxis: 'x' | 'y' = orient === 'vertical' ? 'y' : 'x';\n\n const continuousAxisChannelDef = encoding[continuousAxis] as PositionFieldDef; // Safe to cast because if x is not continuous fielddef, the orient would not be horizontal.\n const continuousAxisChannelDef2 = encoding[`${continuousAxis}2`] as SecondaryFieldDef;\n const continuousAxisChannelDefError = encoding[`${continuousAxis}Error`] as SecondaryFieldDef;\n const continuousAxisChannelDefError2 = encoding[`${continuousAxis}Error2`] as SecondaryFieldDef;\n\n return {\n continuousAxisChannelDef: filterAggregateFromChannelDef(continuousAxisChannelDef, compositeMark),\n continuousAxisChannelDef2: filterAggregateFromChannelDef(continuousAxisChannelDef2, compositeMark),\n continuousAxisChannelDefError: filterAggregateFromChannelDef(continuousAxisChannelDefError, compositeMark),\n continuousAxisChannelDefError2: filterAggregateFromChannelDef(continuousAxisChannelDefError2, compositeMark),\n continuousAxis\n };\n}\n\nfunction filterAggregateFromChannelDef>(\n continuousAxisChannelDef: F,\n compositeMark: M\n): F {\n if (continuousAxisChannelDef?.aggregate) {\n const {aggregate, ...continuousAxisWithoutAggregate} = continuousAxisChannelDef;\n if (aggregate !== compositeMark) {\n log.warn(log.message.errorBarContinuousAxisHasCustomizedAggregate(aggregate, compositeMark));\n }\n return continuousAxisWithoutAggregate as F;\n } else {\n return continuousAxisChannelDef;\n }\n}\n\nexport function compositeMarkOrient(\n spec: GenericUnitSpec, CompositeMark | CompositeMarkDef>,\n compositeMark: M\n): Orientation {\n const {mark, encoding} = spec;\n const {x, y} = encoding;\n\n if (isMarkDef(mark) && mark.orient) {\n return mark.orient;\n }\n\n if (isContinuousFieldOrDatumDef(x)) {\n // x is continuous\n if (isContinuousFieldOrDatumDef(y)) {\n // both x and y are continuous\n const xAggregate = isFieldDef(x) && x.aggregate;\n const yAggregate = isFieldDef(y) && y.aggregate;\n\n if (!xAggregate && yAggregate === compositeMark) {\n return 'vertical';\n } else if (!yAggregate && xAggregate === compositeMark) {\n return 'horizontal';\n } else if (xAggregate === compositeMark && yAggregate === compositeMark) {\n throw new Error('Both x and y cannot have aggregate');\n } else {\n if (isFieldOrDatumDefForTimeFormat(y) && !isFieldOrDatumDefForTimeFormat(x)) {\n // y is temporal but x is not\n return 'horizontal';\n }\n\n // default orientation for two continuous\n return 'vertical';\n }\n }\n\n return 'horizontal';\n } else if (isContinuousFieldOrDatumDef(y)) {\n // y is continuous but x is not\n return 'vertical';\n } else {\n // Neither x nor y is continuous.\n throw new Error(`Need a valid continuous axis for ${compositeMark}s`);\n }\n}\n","import {Orientation} from 'vega';\nimport {isNumber, isObject} from 'vega-util';\nimport {getMarkPropOrConfig} from '../compile/common';\nimport {Config} from '../config';\nimport {Encoding, extractTransformsFromEncoding, normalizeEncoding} from '../encoding';\nimport * as log from '../log';\nimport {isMarkDef, MarkDef} from '../mark';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec, NormalizedUnitSpec} from '../spec';\nimport {AggregatedFieldDef, CalculateTransform, JoinAggregateTransform, Transform} from '../transform';\nimport {isEmpty, omit} from '../util';\nimport {CompositeMarkNormalizer} from './base';\nimport {\n compositeMarkContinuousAxis,\n compositeMarkOrient,\n filterTooltipWithAggregatedField,\n GenericCompositeMarkDef,\n getCompositeMarkTooltip,\n getTitle,\n makeCompositeAggregatePartFactory,\n partLayerMixins,\n PartsMixins\n} from './common';\n\nexport const BOXPLOT = 'boxplot' as const;\nexport type BoxPlot = typeof BOXPLOT;\n\nexport const BOXPLOT_PARTS = ['box', 'median', 'outliers', 'rule', 'ticks'] as const;\n\ntype BoxPlotPart = typeof BOXPLOT_PARTS[number];\n\nexport type BoxPlotPartsMixins = PartsMixins;\n\nexport interface BoxPlotConfig extends BoxPlotPartsMixins {\n /** Size of the box and median tick of a box plot */\n size?: number;\n\n /**\n * The extent of the whiskers. Available options include:\n * - `\"min-max\"`: min and max are the lower and upper whiskers respectively.\n * - A number representing multiple of the interquartile range. This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range _[Q1 - k * IQR, Q3 + k * IQR]_ where _Q1_ and _Q3_ are the first and third quartiles while _IQR_ is the interquartile range (_Q3-Q1_).\n *\n * __Default value:__ `1.5`.\n */\n extent?: 'min-max' | number;\n}\n\nexport type BoxPlotDef = GenericCompositeMarkDef &\n BoxPlotConfig & {\n /**\n * Type of the mark. For box plots, this should always be `\"boxplot\"`.\n * [boxplot](https://vega.github.io/vega-lite/docs/boxplot.html)\n */\n type: BoxPlot;\n\n /**\n * Orientation of the box plot. This is normally automatically determined based on types of fields on x and y channels. However, an explicit `orient` be specified when the orientation is ambiguous.\n *\n * __Default value:__ `\"vertical\"`.\n */\n orient?: Orientation;\n };\n\nexport interface BoxPlotConfigMixins {\n /**\n * Box Config\n */\n boxplot?: BoxPlotConfig;\n}\n\nexport const boxPlotNormalizer = new CompositeMarkNormalizer(BOXPLOT, normalizeBoxPlot);\n\nexport function getBoxPlotType(extent: number | 'min-max') {\n if (isNumber(extent)) {\n return 'tukey';\n }\n // Ham: If we ever want to, we could add another extent syntax `{kIQR: number}` for the original [Q1-k*IQR, Q3+k*IQR] whisker and call this boxPlotType = `kIQR`. However, I'm not exposing this for now.\n return extent;\n}\n\nexport function normalizeBoxPlot(\n spec: GenericUnitSpec, BoxPlot | BoxPlotDef>,\n {config}: NormalizerParams\n): NormalizedLayerSpec {\n // Need to initEncoding first so we can infer type\n spec = {\n ...spec,\n encoding: normalizeEncoding(spec.encoding, config)\n };\n const {mark, encoding: _encoding, params, projection: _p, ...outerSpec} = spec;\n const markDef: BoxPlotDef = isMarkDef(mark) ? mark : {type: mark};\n\n // TODO(https://github.com/vega/vega-lite/issues/3702): add selection support\n if (params) {\n log.warn(log.message.selectionNotSupported('boxplot'));\n }\n\n const extent = markDef.extent ?? config.boxplot.extent;\n const sizeValue = getMarkPropOrConfig(\n 'size',\n markDef as any, // TODO: https://github.com/vega/vega-lite/issues/6245\n config\n );\n\n const boxPlotType = getBoxPlotType(extent);\n const {\n bins,\n timeUnits,\n transform,\n continuousAxisChannelDef,\n continuousAxis,\n groupby,\n aggregate,\n encodingWithoutContinuousAxis,\n ticksOrient,\n boxOrient,\n customTooltipWithoutAggregatedField\n } = boxParams(spec, extent, config);\n\n const {color, size, ...encodingWithoutSizeColorAndContinuousAxis} = encodingWithoutContinuousAxis;\n\n const makeBoxPlotPart = (sharedEncoding: Encoding) => {\n return makeCompositeAggregatePartFactory(\n markDef,\n continuousAxis,\n continuousAxisChannelDef,\n sharedEncoding,\n config.boxplot\n );\n };\n\n const makeBoxPlotExtent = makeBoxPlotPart(encodingWithoutSizeColorAndContinuousAxis);\n const makeBoxPlotBox = makeBoxPlotPart(encodingWithoutContinuousAxis);\n const makeBoxPlotMidTick = makeBoxPlotPart({...encodingWithoutSizeColorAndContinuousAxis, ...(size ? {size} : {})});\n\n const fiveSummaryTooltipEncoding: Encoding = getCompositeMarkTooltip(\n [\n {fieldPrefix: boxPlotType === 'min-max' ? 'upper_whisker_' : 'max_', titlePrefix: 'Max'},\n {fieldPrefix: 'upper_box_', titlePrefix: 'Q3'},\n {fieldPrefix: 'mid_box_', titlePrefix: 'Median'},\n {fieldPrefix: 'lower_box_', titlePrefix: 'Q1'},\n {fieldPrefix: boxPlotType === 'min-max' ? 'lower_whisker_' : 'min_', titlePrefix: 'Min'}\n ],\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis\n );\n\n // ## Whisker Layers\n\n const endTick: MarkDef = {type: 'tick', color: 'black', opacity: 1, orient: ticksOrient, invalid: null, aria: false};\n const whiskerTooltipEncoding: Encoding =\n boxPlotType === 'min-max'\n ? fiveSummaryTooltipEncoding // for min-max, show five-summary tooltip for whisker\n : // for tukey / k-IQR, just show upper/lower-whisker\n getCompositeMarkTooltip(\n [\n {fieldPrefix: 'upper_whisker_', titlePrefix: 'Upper Whisker'},\n {fieldPrefix: 'lower_whisker_', titlePrefix: 'Lower Whisker'}\n ],\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis\n );\n\n const whiskerLayers = [\n ...makeBoxPlotExtent({\n partName: 'rule',\n mark: {type: 'rule', invalid: null, aria: false},\n positionPrefix: 'lower_whisker',\n endPositionPrefix: 'lower_box',\n extraEncoding: whiskerTooltipEncoding\n }),\n ...makeBoxPlotExtent({\n partName: 'rule',\n mark: {type: 'rule', invalid: null, aria: false},\n positionPrefix: 'upper_box',\n endPositionPrefix: 'upper_whisker',\n extraEncoding: whiskerTooltipEncoding\n }),\n ...makeBoxPlotExtent({\n partName: 'ticks',\n mark: endTick,\n positionPrefix: 'lower_whisker',\n extraEncoding: whiskerTooltipEncoding\n }),\n ...makeBoxPlotExtent({\n partName: 'ticks',\n mark: endTick,\n positionPrefix: 'upper_whisker',\n extraEncoding: whiskerTooltipEncoding\n })\n ];\n\n // ## Box Layers\n\n // TODO: support hiding certain mark parts\n const boxLayers: NormalizedUnitSpec[] = [\n ...(boxPlotType !== 'tukey' ? whiskerLayers : []),\n ...makeBoxPlotBox({\n partName: 'box',\n mark: {\n type: 'bar',\n ...(sizeValue ? {size: sizeValue} : {}),\n orient: boxOrient,\n invalid: null,\n ariaRoleDescription: 'box'\n },\n positionPrefix: 'lower_box',\n endPositionPrefix: 'upper_box',\n extraEncoding: fiveSummaryTooltipEncoding\n }),\n ...makeBoxPlotMidTick({\n partName: 'median',\n mark: {\n type: 'tick',\n invalid: null,\n ...(isObject(config.boxplot.median) && config.boxplot.median.color ? {color: config.boxplot.median.color} : {}),\n ...(sizeValue ? {size: sizeValue} : {}),\n orient: ticksOrient,\n aria: false\n },\n positionPrefix: 'mid_box',\n extraEncoding: fiveSummaryTooltipEncoding\n })\n ];\n\n if (boxPlotType === 'min-max') {\n return {\n ...outerSpec,\n transform: (outerSpec.transform ?? []).concat(transform),\n layer: boxLayers\n };\n }\n\n // Tukey Box Plot\n\n const lowerBoxExpr = `datum[\"lower_box_${continuousAxisChannelDef.field}\"]`;\n const upperBoxExpr = `datum[\"upper_box_${continuousAxisChannelDef.field}\"]`;\n const iqrExpr = `(${upperBoxExpr} - ${lowerBoxExpr})`;\n const lowerWhiskerExpr = `${lowerBoxExpr} - ${extent} * ${iqrExpr}`;\n const upperWhiskerExpr = `${upperBoxExpr} + ${extent} * ${iqrExpr}`;\n const fieldExpr = `datum[\"${continuousAxisChannelDef.field}\"]`;\n\n const joinaggregateTransform: JoinAggregateTransform = {\n joinaggregate: boxParamsQuartiles(continuousAxisChannelDef.field),\n groupby\n };\n\n const filteredWhiskerSpec: NormalizedLayerSpec = {\n transform: [\n {\n filter: `(${lowerWhiskerExpr} <= ${fieldExpr}) && (${fieldExpr} <= ${upperWhiskerExpr})`\n },\n {\n aggregate: [\n {\n op: 'min',\n field: continuousAxisChannelDef.field,\n as: `lower_whisker_${continuousAxisChannelDef.field}`\n },\n {\n op: 'max',\n field: continuousAxisChannelDef.field,\n as: `upper_whisker_${continuousAxisChannelDef.field}`\n },\n // preserve lower_box / upper_box\n {\n op: 'min',\n field: `lower_box_${continuousAxisChannelDef.field}`,\n as: `lower_box_${continuousAxisChannelDef.field}`\n },\n {\n op: 'max',\n field: `upper_box_${continuousAxisChannelDef.field}`,\n as: `upper_box_${continuousAxisChannelDef.field}`\n },\n ...aggregate\n ],\n groupby\n }\n ],\n layer: whiskerLayers\n };\n\n const {tooltip, ...encodingWithoutSizeColorContinuousAxisAndTooltip} = encodingWithoutSizeColorAndContinuousAxis;\n\n const {scale, axis} = continuousAxisChannelDef;\n const title = getTitle(continuousAxisChannelDef);\n const axisWithoutTitle = omit(axis, ['title']);\n\n const outlierLayersMixins = partLayerMixins(markDef, 'outliers', config.boxplot, {\n transform: [{filter: `(${fieldExpr} < ${lowerWhiskerExpr}) || (${fieldExpr} > ${upperWhiskerExpr})`}],\n mark: 'point',\n encoding: {\n [continuousAxis]: {\n field: continuousAxisChannelDef.field,\n type: continuousAxisChannelDef.type,\n ...(title !== undefined ? {title} : {}),\n ...(scale !== undefined ? {scale} : {}),\n // add axis without title since we already added the title above\n ...(isEmpty(axisWithoutTitle) ? {} : {axis: axisWithoutTitle})\n },\n ...encodingWithoutSizeColorContinuousAxisAndTooltip,\n ...(color ? {color} : {}),\n ...(customTooltipWithoutAggregatedField ? {tooltip: customTooltipWithoutAggregatedField} : {})\n }\n })[0];\n\n let filteredLayersMixins: NormalizedLayerSpec;\n const filteredLayersMixinsTransforms = [...bins, ...timeUnits, joinaggregateTransform];\n if (outlierLayersMixins) {\n filteredLayersMixins = {\n transform: filteredLayersMixinsTransforms,\n layer: [outlierLayersMixins, filteredWhiskerSpec]\n };\n } else {\n filteredLayersMixins = filteredWhiskerSpec;\n filteredLayersMixins.transform.unshift(...filteredLayersMixinsTransforms);\n }\n\n return {\n ...outerSpec,\n layer: [\n filteredLayersMixins,\n {\n // boxplot\n transform,\n layer: boxLayers\n }\n ]\n };\n}\n\nfunction boxParamsQuartiles(continousAxisField: string): AggregatedFieldDef[] {\n return [\n {\n op: 'q1',\n field: continousAxisField,\n as: `lower_box_${continousAxisField}`\n },\n {\n op: 'q3',\n field: continousAxisField,\n as: `upper_box_${continousAxisField}`\n }\n ];\n}\n\nfunction boxParams(\n spec: GenericUnitSpec, BoxPlot | BoxPlotDef>,\n extent: 'min-max' | number,\n config: Config\n) {\n const orient = compositeMarkOrient(spec, BOXPLOT);\n const {continuousAxisChannelDef, continuousAxis} = compositeMarkContinuousAxis(spec, orient, BOXPLOT);\n const continuousFieldName: string = continuousAxisChannelDef.field;\n\n const boxPlotType = getBoxPlotType(extent);\n\n const boxplotSpecificAggregate: AggregatedFieldDef[] = [\n ...boxParamsQuartiles(continuousFieldName),\n {\n op: 'median',\n field: continuousFieldName,\n as: `mid_box_${continuousFieldName}`\n },\n {\n op: 'min',\n field: continuousFieldName,\n as: (boxPlotType === 'min-max' ? 'lower_whisker_' : 'min_') + continuousFieldName\n },\n {\n op: 'max',\n field: continuousFieldName,\n as: (boxPlotType === 'min-max' ? 'upper_whisker_' : 'max_') + continuousFieldName\n }\n ];\n\n const postAggregateCalculates: CalculateTransform[] =\n boxPlotType === 'min-max' || boxPlotType === 'tukey'\n ? []\n : [\n // This is for the original k-IQR, which we do not expose\n {\n calculate: `datum[\"upper_box_${continuousFieldName}\"] - datum[\"lower_box_${continuousFieldName}\"]`,\n as: `iqr_${continuousFieldName}`\n },\n {\n calculate: `min(datum[\"upper_box_${continuousFieldName}\"] + datum[\"iqr_${continuousFieldName}\"] * ${extent}, datum[\"max_${continuousFieldName}\"])`,\n as: `upper_whisker_${continuousFieldName}`\n },\n {\n calculate: `max(datum[\"lower_box_${continuousFieldName}\"] - datum[\"iqr_${continuousFieldName}\"] * ${extent}, datum[\"min_${continuousFieldName}\"])`,\n as: `lower_whisker_${continuousFieldName}`\n }\n ];\n\n const {[continuousAxis]: oldContinuousAxisChannelDef, ...oldEncodingWithoutContinuousAxis} = spec.encoding;\n const {customTooltipWithoutAggregatedField, filteredEncoding} = filterTooltipWithAggregatedField(\n oldEncodingWithoutContinuousAxis\n );\n\n const {\n bins,\n timeUnits,\n aggregate,\n groupby,\n encoding: encodingWithoutContinuousAxis\n } = extractTransformsFromEncoding(filteredEncoding, config);\n\n const ticksOrient: Orientation = orient === 'vertical' ? 'horizontal' : 'vertical';\n const boxOrient: Orientation = orient;\n\n const transform: Transform[] = [\n ...bins,\n ...timeUnits,\n {\n aggregate: [...aggregate, ...boxplotSpecificAggregate],\n groupby\n },\n ...postAggregateCalculates\n ];\n\n return {\n bins,\n timeUnits,\n transform,\n groupby,\n aggregate,\n continuousAxisChannelDef,\n continuousAxis,\n encodingWithoutContinuousAxis,\n ticksOrient,\n boxOrient,\n customTooltipWithoutAggregatedField\n };\n}\n","import {AggregateOp, Orientation, SignalRef, Text} from 'vega';\nimport {PositionChannel} from '../channel';\nimport {\n Field,\n isContinuousFieldOrDatumDef,\n isFieldOrDatumDef,\n PositionFieldDef,\n SecondaryFieldDef,\n title,\n ValueDef\n} from '../channeldef';\nimport {Config} from '../config';\nimport {Data} from '../data';\nimport {Encoding, extractTransformsFromEncoding, normalizeEncoding} from '../encoding';\nimport {ExprRef} from '../expr';\nimport * as log from '../log';\nimport {isMarkDef, MarkDef} from '../mark';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec} from '../spec';\nimport {Step} from '../spec/base';\nimport {NormalizedUnitSpec} from '../spec/unit';\nimport {TitleParams} from '../title';\nimport {AggregatedFieldDef, CalculateTransform, Transform} from '../transform';\nimport {replaceAll, titleCase} from '../util';\nimport {CompositeMarkNormalizer} from './base';\nimport {\n compositeMarkContinuousAxis,\n compositeMarkOrient,\n CompositeMarkTooltipSummary,\n GenericCompositeMarkDef,\n getCompositeMarkTooltip,\n makeCompositeAggregatePartFactory,\n PartsMixins\n} from './common';\nimport {ErrorBand, ErrorBandDef} from './errorband';\n\nexport const ERRORBAR = 'errorbar' as const;\nexport type ErrorBar = typeof ERRORBAR;\n\nexport type ErrorBarExtent = 'ci' | 'iqr' | 'stderr' | 'stdev';\nexport type ErrorBarCenter = 'mean' | 'median';\n\nexport type ErrorInputType = 'raw' | 'aggregated-upper-lower' | 'aggregated-error';\n\nexport const ERRORBAR_PARTS = ['ticks', 'rule'] as const;\n\nexport type ErrorBarPart = typeof ERRORBAR_PARTS[number];\n\nexport interface ErrorExtraEncoding {\n /**\n * Error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n */\n xError?: SecondaryFieldDef | ValueDef;\n\n /**\n * Secondary error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n */\n // `xError2` cannot have type as it should have the same type as `xError`\n xError2?: SecondaryFieldDef | ValueDef;\n\n /**\n * Error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n */\n yError?: SecondaryFieldDef | ValueDef;\n\n /**\n * Secondary error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`.\n */\n // `yError2` cannot have type as it should have the same type as `yError`\n yError2?: SecondaryFieldDef | ValueDef;\n}\n\nexport type ErrorEncoding = Pick, PositionChannel | 'color' | 'detail' | 'opacity'> &\n ErrorExtraEncoding;\n\nexport type ErrorBarPartsMixins = PartsMixins;\n\nexport interface ErrorBarConfig extends ErrorBarPartsMixins {\n /** Size of the ticks of an error bar */\n size?: number;\n\n /** Thickness of the ticks and the bar of an error bar */\n thickness?: number;\n\n /**\n * The center of the errorbar. Available options include:\n * - `\"mean\"`: the mean of the data points.\n * - `\"median\"`: the median of the data points.\n *\n * __Default value:__ `\"mean\"`.\n * @hidden\n */\n\n // center is not needed right now but will be added back to the schema if future features require it.\n center?: ErrorBarCenter;\n\n /**\n * The extent of the rule. Available options include:\n * - `\"ci\"`: Extend the rule to the confidence interval of the mean.\n * - `\"stderr\"`: The size of rule are set to the value of standard error, extending from the mean.\n * - `\"stdev\"`: The size of rule are set to the value of standard deviation, extending from the mean.\n * - `\"iqr\"`: Extend the rule to the q1 and q3.\n *\n * __Default value:__ `\"stderr\"`.\n */\n extent?: ErrorBarExtent;\n}\n\nexport type ErrorBarDef = GenericCompositeMarkDef &\n ErrorBarConfig & {\n /**\n * Orientation of the error bar. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined.\n */\n orient?: Orientation;\n };\n\nexport interface ErrorBarConfigMixins {\n /**\n * ErrorBar Config\n */\n errorbar?: ErrorBarConfig;\n}\n\nexport const errorBarNormalizer = new CompositeMarkNormalizer(ERRORBAR, normalizeErrorBar);\n\nexport function normalizeErrorBar(\n spec: GenericUnitSpec, ErrorBar | ErrorBarDef>,\n {config}: NormalizerParams\n): NormalizedLayerSpec | NormalizedUnitSpec {\n // Need to initEncoding first so we can infer type\n spec = {\n ...spec,\n encoding: normalizeEncoding(spec.encoding, config)\n };\n\n const {\n transform,\n continuousAxisChannelDef,\n continuousAxis,\n encodingWithoutContinuousAxis,\n ticksOrient,\n markDef,\n outerSpec,\n tooltipEncoding\n } = errorBarParams(spec, ERRORBAR, config);\n delete encodingWithoutContinuousAxis['size'];\n\n const makeErrorBarPart = makeCompositeAggregatePartFactory(\n markDef,\n continuousAxis,\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis,\n config.errorbar\n );\n\n const thickness = markDef.thickness;\n const size = markDef.size;\n const tick: MarkDef = {\n type: 'tick',\n orient: ticksOrient,\n aria: false,\n ...(thickness !== undefined ? {thickness} : {}),\n ...(size !== undefined ? {size} : {})\n };\n\n const layer = [\n ...makeErrorBarPart({\n partName: 'ticks',\n mark: tick,\n positionPrefix: 'lower',\n extraEncoding: tooltipEncoding\n }),\n ...makeErrorBarPart({\n partName: 'ticks',\n mark: tick,\n positionPrefix: 'upper',\n extraEncoding: tooltipEncoding\n }),\n ...makeErrorBarPart({\n partName: 'rule',\n mark: {\n type: 'rule',\n ariaRoleDescription: 'errorbar',\n ...(thickness !== undefined ? {size: thickness} : {})\n },\n positionPrefix: 'lower',\n endPositionPrefix: 'upper',\n extraEncoding: tooltipEncoding\n })\n ];\n\n return {\n ...outerSpec,\n transform,\n ...(layer.length > 1 ? {layer} : {...layer[0]})\n };\n}\n\nfunction errorBarOrientAndInputType(\n spec: GenericUnitSpec, ErrorBar | ErrorBand | ErrorBarDef | ErrorBandDef>,\n compositeMark: ErrorBar | ErrorBand\n): {\n orient: Orientation;\n inputType: ErrorInputType;\n} {\n const {encoding} = spec;\n\n if (errorBarIsInputTypeRaw(encoding)) {\n return {\n orient: compositeMarkOrient(spec, compositeMark),\n inputType: 'raw'\n };\n }\n\n const isTypeAggregatedUpperLower: boolean = errorBarIsInputTypeAggregatedUpperLower(encoding);\n const isTypeAggregatedError: boolean = errorBarIsInputTypeAggregatedError(encoding);\n const x = encoding.x;\n const y = encoding.y;\n\n if (isTypeAggregatedUpperLower) {\n // type is aggregated-upper-lower\n\n if (isTypeAggregatedError) {\n throw new Error(`${compositeMark} cannot be both type aggregated-upper-lower and aggregated-error`);\n }\n\n const x2 = encoding.x2;\n const y2 = encoding.y2;\n\n if (isFieldOrDatumDef(x2) && isFieldOrDatumDef(y2)) {\n // having both x, x2 and y, y2\n throw new Error(`${compositeMark} cannot have both x2 and y2`);\n } else if (isFieldOrDatumDef(x2)) {\n if (isContinuousFieldOrDatumDef(x)) {\n // having x, x2 quantitative and field y, y2 are not specified\n return {orient: 'horizontal', inputType: 'aggregated-upper-lower'};\n } else {\n // having x, x2 that are not both quantitative\n throw new Error(`Both x and x2 have to be quantitative in ${compositeMark}`);\n }\n } else if (isFieldOrDatumDef(y2)) {\n // y2 is a FieldDef\n if (isContinuousFieldOrDatumDef(y)) {\n // having y, y2 quantitative and field x, x2 are not specified\n return {orient: 'vertical', inputType: 'aggregated-upper-lower'};\n } else {\n // having y, y2 that are not both quantitative\n throw new Error(`Both y and y2 have to be quantitative in ${compositeMark}`);\n }\n }\n throw new Error('No ranged axis');\n } else {\n // type is aggregated-error\n\n const xError = encoding.xError;\n const xError2 = encoding.xError2;\n const yError = encoding.yError;\n const yError2 = encoding.yError2;\n\n if (isFieldOrDatumDef(xError2) && !isFieldOrDatumDef(xError)) {\n // having xError2 without xError\n throw new Error(`${compositeMark} cannot have xError2 without xError`);\n }\n\n if (isFieldOrDatumDef(yError2) && !isFieldOrDatumDef(yError)) {\n // having yError2 without yError\n throw new Error(`${compositeMark} cannot have yError2 without yError`);\n }\n\n if (isFieldOrDatumDef(xError) && isFieldOrDatumDef(yError)) {\n // having both xError and yError\n throw new Error(`${compositeMark} cannot have both xError and yError with both are quantiative`);\n } else if (isFieldOrDatumDef(xError)) {\n if (isContinuousFieldOrDatumDef(x)) {\n // having x and xError that are all quantitative\n return {orient: 'horizontal', inputType: 'aggregated-error'};\n } else {\n // having x, xError, and xError2 that are not all quantitative\n throw new Error('All x, xError, and xError2 (if exist) have to be quantitative');\n }\n } else if (isFieldOrDatumDef(yError)) {\n if (isContinuousFieldOrDatumDef(y)) {\n // having y and yError that are all quantitative\n return {orient: 'vertical', inputType: 'aggregated-error'};\n } else {\n // having y, yError, and yError2 that are not all quantitative\n throw new Error('All y, yError, and yError2 (if exist) have to be quantitative');\n }\n }\n throw new Error('No ranged axis');\n }\n}\n\nfunction errorBarIsInputTypeRaw(encoding: ErrorEncoding): boolean {\n return (\n (isFieldOrDatumDef(encoding.x) || isFieldOrDatumDef(encoding.y)) &&\n !isFieldOrDatumDef(encoding.x2) &&\n !isFieldOrDatumDef(encoding.y2) &&\n !isFieldOrDatumDef(encoding.xError) &&\n !isFieldOrDatumDef(encoding.xError2) &&\n !isFieldOrDatumDef(encoding.yError) &&\n !isFieldOrDatumDef(encoding.yError2)\n );\n}\n\nfunction errorBarIsInputTypeAggregatedUpperLower(encoding: ErrorEncoding): boolean {\n return isFieldOrDatumDef(encoding.x2) || isFieldOrDatumDef(encoding.y2);\n}\n\nfunction errorBarIsInputTypeAggregatedError(encoding: ErrorEncoding): boolean {\n return (\n isFieldOrDatumDef(encoding.xError) ||\n isFieldOrDatumDef(encoding.xError2) ||\n isFieldOrDatumDef(encoding.yError) ||\n isFieldOrDatumDef(encoding.yError2)\n );\n}\n\nexport function errorBarParams<\n M extends ErrorBar | ErrorBand,\n MD extends GenericCompositeMarkDef & (ErrorBarDef | ErrorBandDef)\n>(\n spec: GenericUnitSpec, M | MD>,\n compositeMark: M,\n config: Config\n): {\n transform: Transform[];\n groupby: string[];\n continuousAxisChannelDef: PositionFieldDef;\n continuousAxis: 'x' | 'y';\n encodingWithoutContinuousAxis: ErrorEncoding;\n ticksOrient: Orientation;\n markDef: MD;\n outerSpec: {\n data?: Data;\n title?: Text | TitleParams;\n name?: string;\n description?: string;\n transform?: Transform[];\n width?: number | 'container' | Step;\n height?: number | 'container' | Step;\n };\n tooltipEncoding: ErrorEncoding;\n} {\n // TODO: use selection\n const {mark, encoding, params, projection: _p, ...outerSpec} = spec;\n const markDef: MD = isMarkDef(mark) ? mark : ({type: mark} as MD);\n\n // TODO(https://github.com/vega/vega-lite/issues/3702): add selection support\n if (params) {\n log.warn(log.message.selectionNotSupported(compositeMark));\n }\n\n const {orient, inputType} = errorBarOrientAndInputType(spec, compositeMark);\n const {\n continuousAxisChannelDef,\n continuousAxisChannelDef2,\n continuousAxisChannelDefError,\n continuousAxisChannelDefError2,\n continuousAxis\n } = compositeMarkContinuousAxis(spec, orient, compositeMark);\n\n const {errorBarSpecificAggregate, postAggregateCalculates, tooltipSummary, tooltipTitleWithFieldName} =\n errorBarAggregationAndCalculation(\n markDef,\n continuousAxisChannelDef,\n continuousAxisChannelDef2,\n continuousAxisChannelDefError,\n continuousAxisChannelDefError2,\n inputType,\n compositeMark,\n config\n );\n\n const {\n [continuousAxis]: oldContinuousAxisChannelDef,\n [continuousAxis === 'x' ? 'x2' : 'y2']: oldContinuousAxisChannelDef2,\n [continuousAxis === 'x' ? 'xError' : 'yError']: oldContinuousAxisChannelDefError,\n [continuousAxis === 'x' ? 'xError2' : 'yError2']: oldContinuousAxisChannelDefError2,\n ...oldEncodingWithoutContinuousAxis\n } = encoding;\n\n const {\n bins,\n timeUnits,\n aggregate: oldAggregate,\n groupby: oldGroupBy,\n encoding: encodingWithoutContinuousAxis\n } = extractTransformsFromEncoding(oldEncodingWithoutContinuousAxis, config);\n\n const aggregate: AggregatedFieldDef[] = [...oldAggregate, ...errorBarSpecificAggregate];\n const groupby: string[] = inputType !== 'raw' ? [] : oldGroupBy;\n\n const tooltipEncoding: ErrorEncoding = getCompositeMarkTooltip(\n tooltipSummary,\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis,\n tooltipTitleWithFieldName\n );\n\n return {\n transform: [\n ...(outerSpec.transform ?? []),\n ...bins,\n ...timeUnits,\n ...(aggregate.length === 0 ? [] : [{aggregate, groupby}]),\n ...postAggregateCalculates\n ],\n groupby,\n continuousAxisChannelDef,\n continuousAxis,\n encodingWithoutContinuousAxis,\n ticksOrient: orient === 'vertical' ? 'horizontal' : 'vertical',\n markDef,\n outerSpec,\n tooltipEncoding\n };\n}\n\nfunction errorBarAggregationAndCalculation<\n M extends ErrorBar | ErrorBand,\n MD extends GenericCompositeMarkDef & (ErrorBarDef | ErrorBandDef)\n>(\n markDef: MD,\n continuousAxisChannelDef: PositionFieldDef,\n continuousAxisChannelDef2: SecondaryFieldDef,\n continuousAxisChannelDefError: SecondaryFieldDef,\n continuousAxisChannelDefError2: SecondaryFieldDef,\n inputType: ErrorInputType,\n compositeMark: M,\n config: Config\n): {\n postAggregateCalculates: CalculateTransform[];\n errorBarSpecificAggregate: AggregatedFieldDef[];\n tooltipSummary: CompositeMarkTooltipSummary[];\n tooltipTitleWithFieldName: boolean;\n} {\n let errorBarSpecificAggregate: AggregatedFieldDef[] = [];\n let postAggregateCalculates: CalculateTransform[] = [];\n const continuousFieldName: string = continuousAxisChannelDef.field;\n\n let tooltipSummary: CompositeMarkTooltipSummary[];\n let tooltipTitleWithFieldName = false;\n\n if (inputType === 'raw') {\n const center: ErrorBarCenter = markDef.center\n ? markDef.center\n : markDef.extent\n ? markDef.extent === 'iqr'\n ? 'median'\n : 'mean'\n : config.errorbar.center;\n const extent: ErrorBarExtent = markDef.extent ? markDef.extent : center === 'mean' ? 'stderr' : 'iqr';\n\n if ((center === 'median') !== (extent === 'iqr')) {\n log.warn(log.message.errorBarCenterIsUsedWithWrongExtent(center, extent, compositeMark));\n }\n\n if (extent === 'stderr' || extent === 'stdev') {\n errorBarSpecificAggregate = [\n {op: extent, field: continuousFieldName, as: `extent_${continuousFieldName}`},\n {op: center, field: continuousFieldName, as: `center_${continuousFieldName}`}\n ];\n\n postAggregateCalculates = [\n {\n calculate: `datum[\"center_${continuousFieldName}\"] + datum[\"extent_${continuousFieldName}\"]`,\n as: `upper_${continuousFieldName}`\n },\n {\n calculate: `datum[\"center_${continuousFieldName}\"] - datum[\"extent_${continuousFieldName}\"]`,\n as: `lower_${continuousFieldName}`\n }\n ];\n\n tooltipSummary = [\n {fieldPrefix: 'center_', titlePrefix: titleCase(center)},\n {fieldPrefix: 'upper_', titlePrefix: getTitlePrefix(center, extent, '+')},\n {fieldPrefix: 'lower_', titlePrefix: getTitlePrefix(center, extent, '-')}\n ];\n tooltipTitleWithFieldName = true;\n } else {\n let centerOp: AggregateOp;\n let lowerExtentOp: AggregateOp;\n let upperExtentOp: AggregateOp;\n if (extent === 'ci') {\n centerOp = 'mean';\n lowerExtentOp = 'ci0';\n upperExtentOp = 'ci1';\n } else {\n centerOp = 'median';\n lowerExtentOp = 'q1';\n upperExtentOp = 'q3';\n }\n\n errorBarSpecificAggregate = [\n {op: lowerExtentOp, field: continuousFieldName, as: `lower_${continuousFieldName}`},\n {op: upperExtentOp, field: continuousFieldName, as: `upper_${continuousFieldName}`},\n {op: centerOp, field: continuousFieldName, as: `center_${continuousFieldName}`}\n ];\n\n tooltipSummary = [\n {\n fieldPrefix: 'upper_',\n titlePrefix: title({field: continuousFieldName, aggregate: upperExtentOp, type: 'quantitative'}, config, {\n allowDisabling: false\n })\n },\n {\n fieldPrefix: 'lower_',\n titlePrefix: title({field: continuousFieldName, aggregate: lowerExtentOp, type: 'quantitative'}, config, {\n allowDisabling: false\n })\n },\n {\n fieldPrefix: 'center_',\n titlePrefix: title({field: continuousFieldName, aggregate: centerOp, type: 'quantitative'}, config, {\n allowDisabling: false\n })\n }\n ];\n }\n } else {\n if (markDef.center || markDef.extent) {\n log.warn(log.message.errorBarCenterAndExtentAreNotNeeded(markDef.center, markDef.extent));\n }\n\n if (inputType === 'aggregated-upper-lower') {\n tooltipSummary = [];\n postAggregateCalculates = [\n {calculate: `datum[\"${continuousAxisChannelDef2.field}\"]`, as: `upper_${continuousFieldName}`},\n {calculate: `datum[\"${continuousFieldName}\"]`, as: `lower_${continuousFieldName}`}\n ];\n } else if (inputType === 'aggregated-error') {\n tooltipSummary = [{fieldPrefix: '', titlePrefix: continuousFieldName}];\n postAggregateCalculates = [\n {\n calculate: `datum[\"${continuousFieldName}\"] + datum[\"${continuousAxisChannelDefError.field}\"]`,\n as: `upper_${continuousFieldName}`\n }\n ];\n\n if (continuousAxisChannelDefError2) {\n postAggregateCalculates.push({\n calculate: `datum[\"${continuousFieldName}\"] + datum[\"${continuousAxisChannelDefError2.field}\"]`,\n as: `lower_${continuousFieldName}`\n });\n } else {\n postAggregateCalculates.push({\n calculate: `datum[\"${continuousFieldName}\"] - datum[\"${continuousAxisChannelDefError.field}\"]`,\n as: `lower_${continuousFieldName}`\n });\n }\n }\n\n for (const postAggregateCalculate of postAggregateCalculates) {\n tooltipSummary.push({\n fieldPrefix: postAggregateCalculate.as.substring(0, 6),\n titlePrefix: replaceAll(replaceAll(postAggregateCalculate.calculate, 'datum[\"', ''), '\"]', '')\n });\n }\n }\n return {postAggregateCalculates, errorBarSpecificAggregate, tooltipSummary, tooltipTitleWithFieldName};\n}\n\nfunction getTitlePrefix(center: ErrorBarCenter, extent: ErrorBarExtent, operation: '+' | '-'): string {\n return `${titleCase(center)} ${operation} ${extent}`;\n}\n","import {Interpolate, Orientation} from 'vega';\nimport {Field} from '../channeldef';\nimport {Encoding, normalizeEncoding} from '../encoding';\nimport * as log from '../log';\nimport {MarkDef} from '../mark';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec} from '../spec';\nimport {CompositeMarkNormalizer} from './base';\nimport {GenericCompositeMarkDef, makeCompositeAggregatePartFactory, PartsMixins} from './common';\nimport {ErrorBarCenter, ErrorBarExtent, errorBarParams, ErrorEncoding} from './errorbar';\n\nexport type ErrorBandUnitSpec<\n EE = undefined // extra encoding parameter (for faceted composite unit spec)\n> = GenericUnitSpec & EE, ErrorBand | ErrorBandDef>;\n\nexport const ERRORBAND = 'errorband' as const;\nexport type ErrorBand = typeof ERRORBAND;\n\nexport const ERRORBAND_PARTS = ['band', 'borders'] as const;\n\ntype ErrorBandPart = typeof ERRORBAND_PARTS[number];\n\nexport type ErrorBandPartsMixins = PartsMixins;\n\nexport interface ErrorBandConfig extends ErrorBandPartsMixins {\n /**\n * The center of the error band. Available options include:\n * - `\"mean\"`: the mean of the data points.\n * - `\"median\"`: the median of the data points.\n *\n * __Default value:__ `\"mean\"`.\n * @hidden\n */\n\n // center is not needed right now but will be added back to the schema if future features require it.\n center?: ErrorBarCenter;\n\n /**\n * The extent of the band. Available options include:\n * - `\"ci\"`: Extend the band to the confidence interval of the mean.\n * - `\"stderr\"`: The size of band are set to the value of standard error, extending from the mean.\n * - `\"stdev\"`: The size of band are set to the value of standard deviation, extending from the mean.\n * - `\"iqr\"`: Extend the band to the q1 and q3.\n *\n * __Default value:__ `\"stderr\"`.\n */\n extent?: ErrorBarExtent;\n\n /**\n * The line interpolation method for the error band. One of the following:\n * - `\"linear\"`: piecewise linear segments, as in a polyline.\n * - `\"linear-closed\"`: close the linear segments to form a polygon.\n * - `\"step\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values.\n * - `\"step-before\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value.\n * - `\"step-after\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value.\n * - `\"basis\"`: a B-spline, with control point duplication on the ends.\n * - `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n * - `\"basis-closed\"`: a closed B-spline, as in a loop.\n * - `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n * - `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n * - `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n * - `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n * - `\"monotone\"`: cubic interpolation that preserves monotonicity in y.\n */\n interpolate?: Interpolate;\n\n /**\n * The tension parameter for the interpolation type of the error band.\n *\n * @minimum 0\n * @maximum 1\n */\n tension?: number;\n}\n\nexport type ErrorBandDef = GenericCompositeMarkDef &\n ErrorBandConfig & {\n /**\n * Orientation of the error band. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined.\n */\n orient?: Orientation;\n };\n\nexport interface ErrorBandConfigMixins {\n /**\n * ErrorBand Config\n */\n errorband?: ErrorBandConfig;\n}\n\nexport const errorBandNormalizer = new CompositeMarkNormalizer(ERRORBAND, normalizeErrorBand);\n\nexport function normalizeErrorBand(\n spec: GenericUnitSpec, ErrorBand | ErrorBandDef>,\n {config}: NormalizerParams\n): NormalizedLayerSpec {\n // Need to initEncoding first so we can infer type\n spec = {\n ...spec,\n encoding: normalizeEncoding(spec.encoding, config)\n };\n\n const {\n transform,\n continuousAxisChannelDef,\n continuousAxis,\n encodingWithoutContinuousAxis,\n markDef,\n outerSpec,\n tooltipEncoding\n } = errorBarParams(spec, ERRORBAND, config);\n const errorBandDef: ErrorBandDef = markDef;\n\n const makeErrorBandPart = makeCompositeAggregatePartFactory(\n errorBandDef,\n continuousAxis,\n continuousAxisChannelDef,\n encodingWithoutContinuousAxis,\n config.errorband\n );\n\n const is2D = spec.encoding.x !== undefined && spec.encoding.y !== undefined;\n\n let bandMark: MarkDef = {type: is2D ? 'area' : 'rect'};\n let bordersMark: MarkDef = {type: is2D ? 'line' : 'rule'};\n const interpolate = {\n ...(errorBandDef.interpolate ? {interpolate: errorBandDef.interpolate} : {}),\n ...(errorBandDef.tension && errorBandDef.interpolate ? {tension: errorBandDef.tension} : {})\n };\n\n if (is2D) {\n bandMark = {\n ...bandMark,\n ...interpolate,\n ariaRoleDescription: 'errorband'\n };\n bordersMark = {\n ...bordersMark,\n ...interpolate,\n aria: false\n };\n } else if (errorBandDef.interpolate) {\n log.warn(log.message.errorBand1DNotSupport('interpolate'));\n } else if (errorBandDef.tension) {\n log.warn(log.message.errorBand1DNotSupport('tension'));\n }\n\n return {\n ...outerSpec,\n transform,\n layer: [\n ...makeErrorBandPart({\n partName: 'band',\n mark: bandMark,\n positionPrefix: 'lower',\n endPositionPrefix: 'upper',\n extraEncoding: tooltipEncoding\n }),\n ...makeErrorBandPart({\n partName: 'borders',\n mark: bordersMark,\n positionPrefix: 'lower',\n\n extraEncoding: tooltipEncoding\n }),\n ...makeErrorBandPart({\n partName: 'borders',\n mark: bordersMark,\n positionPrefix: 'upper',\n extraEncoding: tooltipEncoding\n })\n ]\n };\n}\n","import {Field} from '../channeldef';\nimport {Encoding} from '../encoding';\nimport {NormalizerParams} from '../normalize';\nimport {GenericUnitSpec, NormalizedLayerSpec} from '../spec';\nimport {EncodingFacetMapping} from '../spec/facet';\nimport {NormalizedUnitSpec} from '../spec/unit';\nimport {keys} from '../util';\nimport {CompositeMarkNormalizer} from './base';\nimport {BOXPLOT, BoxPlot, BoxPlotConfigMixins, BoxPlotDef, BOXPLOT_PARTS, normalizeBoxPlot} from './boxplot';\nimport {\n ERRORBAND,\n ErrorBand,\n ErrorBandConfigMixins,\n ErrorBandDef,\n ERRORBAND_PARTS,\n normalizeErrorBand\n} from './errorband';\nimport {\n ERRORBAR,\n ErrorBar,\n ErrorBarConfigMixins,\n ErrorBarDef,\n ERRORBAR_PARTS,\n ErrorExtraEncoding,\n normalizeErrorBar\n} from './errorbar';\n\nexport {BoxPlotConfig} from './boxplot';\nexport {ErrorBandConfigMixins} from './errorband';\nexport {ErrorBarConfigMixins} from './errorbar';\n\nexport type CompositeMarkNormalizerRun = (\n spec: GenericUnitSpec,\n params: NormalizerParams\n) => NormalizedLayerSpec | NormalizedUnitSpec;\n\n/**\n * Registry index for all composite mark's normalizer\n */\nconst compositeMarkRegistry: {\n [mark: string]: {\n normalizer: CompositeMarkNormalizer;\n parts: readonly string[];\n };\n} = {};\n\nexport function add(mark: string, run: CompositeMarkNormalizerRun, parts: readonly string[]) {\n const normalizer = new CompositeMarkNormalizer(mark, run);\n compositeMarkRegistry[mark] = {normalizer, parts};\n}\n\nexport function remove(mark: string) {\n delete compositeMarkRegistry[mark];\n}\n\nexport type CompositeEncoding = Encoding & ErrorExtraEncoding;\n\nexport type PartialIndex> = {\n [t in keyof T]?: Partial;\n};\n\nexport type SharedCompositeEncoding = PartialIndex<\n Omit, 'detail' | 'order' | 'tooltip'> // need to omit and cherry pick detail / order / tooltip since they allow array\n> &\n Pick, 'detail' | 'order' | 'tooltip'>;\n\nexport type FacetedCompositeEncoding = Encoding & ErrorExtraEncoding & EncodingFacetMapping;\n\nexport type CompositeMark = BoxPlot | ErrorBar | ErrorBand;\n\nexport function getAllCompositeMarks() {\n return keys(compositeMarkRegistry);\n}\n\nexport type CompositeMarkDef = BoxPlotDef | ErrorBarDef | ErrorBandDef;\n\nexport type CompositeAggregate = BoxPlot | ErrorBar | ErrorBand;\n\nexport interface CompositeMarkConfigMixins extends BoxPlotConfigMixins, ErrorBarConfigMixins, ErrorBandConfigMixins {}\n\nadd(BOXPLOT, normalizeBoxPlot, BOXPLOT_PARTS);\nadd(ERRORBAR, normalizeErrorBar, ERRORBAR_PARTS);\nadd(ERRORBAND, normalizeErrorBand, ERRORBAND_PARTS);\n","import {SignalRef, Text} from 'vega';\nimport {ConditionValueDefMixins, FormatMixins, ValueDef} from './channeldef';\nimport {LegendConfig} from './legend';\nimport {VgEncodeChannel} from './vega.schema';\n\nexport interface TitleMixins {\n /**\n * A title for the field. If `null`, the title will be removed.\n *\n * __Default value:__ derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n *\n * __Notes__:\n *\n * 1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n *\n * 2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.\n */\n title?: Text | null | SignalRef;\n}\n\nexport interface Guide extends TitleMixins, FormatMixins {}\n\nexport interface VlOnlyGuideConfig {\n /**\n * Set to null to disable title for the axis, legend, or header.\n */\n title?: null;\n}\n\nexport type GuideEncodingConditionalValueDef = ValueDef & ConditionValueDefMixins;\n\nexport type GuideEncodingEntry = Partial>;\n\nexport const VL_ONLY_LEGEND_CONFIG: (keyof LegendConfig)[] = [\n 'gradientHorizontalMaxLength',\n 'gradientHorizontalMinLength',\n 'gradientVerticalMaxLength',\n 'gradientVerticalMinLength',\n 'unselectedOpacity'\n];\n","import {Align, Color, FontStyle, FontWeight, Orient, SignalRef, TextBaseline, TitleAnchor, TitleConfig} from 'vega';\nimport {FormatMixins} from './channeldef';\nimport {ExprRef} from './expr';\nimport {Guide, VlOnlyGuideConfig} from './guide';\nimport {Flag, keys} from './util';\n\nexport const HEADER_TITLE_PROPERTIES_MAP: Partial, keyof TitleConfig>> = {\n titleAlign: 'align',\n titleAnchor: 'anchor',\n titleAngle: 'angle',\n titleBaseline: 'baseline',\n titleColor: 'color',\n titleFont: 'font',\n titleFontSize: 'fontSize',\n titleFontStyle: 'fontStyle',\n titleFontWeight: 'fontWeight',\n titleLimit: 'limit',\n titleLineHeight: 'lineHeight',\n titleOrient: 'orient',\n titlePadding: 'offset'\n};\n\nexport const HEADER_LABEL_PROPERTIES_MAP: Partial, keyof TitleConfig>> = {\n labelAlign: 'align',\n labelAnchor: 'anchor',\n labelAngle: 'angle',\n labelBaseline: 'baseline',\n labelColor: 'color',\n labelFont: 'font',\n labelFontSize: 'fontSize',\n labelFontStyle: 'fontStyle',\n labelFontWeight: 'fontWeight',\n labelLimit: 'limit',\n labelLineHeight: 'lineHeight',\n labelOrient: 'orient',\n labelPadding: 'offset'\n};\n\nexport const HEADER_TITLE_PROPERTIES = keys(HEADER_TITLE_PROPERTIES_MAP);\n\nexport const HEADER_LABEL_PROPERTIES = keys(HEADER_LABEL_PROPERTIES_MAP);\n\nexport interface CoreHeader extends FormatMixins {\n // ---------- Title ----------\n /**\n * The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title.\n */\n titleAnchor?: TitleAnchor; // We don't allow signal for titleAnchor since there is a dependent logic\n\n /**\n * Horizontal text alignment (to the anchor) of header titles.\n */\n titleAlign?: Align | ES;\n\n /**\n * The rotation angle of the header title.\n *\n * __Default value:__ `0`.\n *\n * @minimum -360\n * @maximum 360\n */\n titleAngle?: number; // We don't allow signal for titleAngle since there is a dependent logic\n\n /**\n * The vertical text baseline for the header title. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`.\n * The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone.\n *\n * __Default value:__ `\"middle\"`\n */\n titleBaseline?: TextBaseline | ES;\n\n /**\n * Color of the header title, can be in hex color code or regular color name.\n */\n titleColor?: Color | ES;\n\n /**\n * Font of the header title. (e.g., `\"Helvetica Neue\"`).\n */\n titleFont?: string | ES;\n\n /**\n * Font size of the header title.\n *\n * @minimum 0\n */\n titleFontSize?: number | ES;\n\n /**\n * The font style of the header title.\n */\n titleFontStyle?: FontStyle | ES;\n\n /**\n * Font weight of the header title.\n * This can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`).\n */\n titleFontWeight?: FontWeight | ES;\n\n /**\n * The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n *\n * __Default value:__ `0`, indicating no limit\n */\n titleLimit?: number | ES;\n\n /**\n * Line height in pixels for multi-line header title text or title text with `\"line-top\"` or `\"line-bottom\"` baseline.\n */\n titleLineHeight?: number | ES;\n\n /**\n * The orientation of the header title. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`.\n */\n titleOrient?: Orient; // no signal ref since there is a dependent logic\n\n /**\n * The padding, in pixel, between facet header's title and the label.\n *\n * __Default value:__ `10`\n */\n titlePadding?: number | ES;\n\n // ---------- Label ----------\n\n /**\n * A boolean flag indicating if labels should be included as part of the header.\n *\n * __Default value:__ `true`.\n */\n labels?: boolean;\n\n /**\n * Horizontal text alignment of header labels. One of `\"left\"`, `\"center\"`, or `\"right\"`.\n */\n labelAlign?: Align | ES;\n\n /**\n * The vertical text baseline for the header labels. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`.\n * The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone.\n *\n */\n labelBaseline?: TextBaseline | ES;\n\n /**\n * The anchor position for placing the labels. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label.\n */\n labelAnchor?: TitleAnchor;\n\n /**\n * [Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n *\n * __Note:__ The label text and value can be assessed via the `label` and `value` properties of the header's backing `datum` object.\n */\n labelExpr?: string;\n\n /**\n * The rotation angle of the header labels.\n *\n * __Default value:__ `0` for column header, `-90` for row header.\n *\n * @minimum -360\n * @maximum 360\n */\n labelAngle?: number; // no signal ref since there is a dependent logic\n\n /**\n * The color of the header label, can be in hex color code or regular color name.\n */\n labelColor?: Color | ES;\n\n /**\n * The font of the header label.\n */\n labelFont?: string | ES;\n\n /**\n * The font size of the header label, in pixels.\n *\n * @minimum 0\n */\n labelFontSize?: number | ES;\n\n /**\n * The font style of the header label.\n */\n labelFontStyle?: FontStyle | ES;\n\n /**\n * The font weight of the header label.\n */\n labelFontWeight?: FontWeight | ES;\n\n /**\n * The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n *\n * __Default value:__ `0`, indicating no limit\n */\n labelLimit?: number | ES;\n\n /**\n * Line height in pixels for multi-line header labels or title text with `\"line-top\"` or `\"line-bottom\"` baseline.\n */\n labelLineHeight?: number | ES;\n\n /**\n * The orientation of the header label. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`.\n */\n labelOrient?: Orient; // no signal ref since there is a dependent logic\n\n /**\n * The padding, in pixel, between facet header's label and the plot.\n *\n * __Default value:__ `10`\n */\n labelPadding?: number | ES;\n\n /**\n * Shortcut for setting both labelOrient and titleOrient.\n */\n orient?: Orient; // no signal ref since there is a dependent logic\n}\n\nexport interface HeaderConfig extends CoreHeader, VlOnlyGuideConfig {}\n\n/**\n * Headers of row / column channels for faceted plots.\n */\nexport interface Header extends CoreHeader, Guide {}\n\nexport interface HeaderConfigMixins {\n /**\n * Header configuration, which determines default properties for all [headers](https://vega.github.io/vega-lite/docs/header.html).\n *\n * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n */\n header?: HeaderConfig;\n\n /**\n * Header configuration, which determines default properties for row [headers](https://vega.github.io/vega-lite/docs/header.html).\n *\n * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n */\n headerRow?: HeaderConfig;\n\n /**\n * Header configuration, which determines default properties for column [headers](https://vega.github.io/vega-lite/docs/header.html).\n *\n * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n */\n headerColumn?: HeaderConfig;\n\n /**\n * Header configuration, which determines default properties for non-row/column facet [headers](https://vega.github.io/vega-lite/docs/header.html).\n *\n * For a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config).\n */\n headerFacet?: HeaderConfig;\n}\n\nconst HEADER_CONFIGS_INDEX: Flag> = {\n header: 1,\n headerRow: 1,\n headerColumn: 1,\n headerFacet: 1\n};\n\nexport const HEADER_CONFIGS = keys(HEADER_CONFIGS_INDEX);\n","import {\n BaseLegend,\n LabelOverlap,\n Legend as VgLegend,\n LegendConfig as VgLegendConfig,\n LegendOrient,\n Orientation,\n SignalRef\n} from 'vega';\nimport {DateTime} from './datetime';\nimport {ExprRef} from './expr';\nimport {Guide, GuideEncodingEntry, VlOnlyGuideConfig} from './guide';\nimport {Flag, keys} from './util';\nimport {MapExcludeValueRefAndReplaceSignalWith} from './vega.schema';\n\nexport const LEGEND_SCALE_CHANNELS = [\n 'size',\n 'shape',\n 'fill',\n 'stroke',\n 'strokeDash',\n 'strokeWidth',\n 'opacity'\n] as const;\n\ntype BaseLegendNoValueRefs = MapExcludeValueRefAndReplaceSignalWith;\n\nexport type LegendConfig = LegendMixins &\n VlOnlyGuideConfig &\n MapExcludeValueRefAndReplaceSignalWith & {\n /**\n * Max legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n *\n * __Default value:__ `200`\n */\n gradientVerticalMaxLength?: number;\n\n /**\n * Min legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n *\n * __Default value:__ `100`\n */\n gradientVerticalMinLength?: number;\n\n /**\n * Max legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n *\n * __Default value:__ `200`\n */\n gradientHorizontalMaxLength?: number;\n\n /**\n * Min legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n *\n * __Default value:__ `100`\n */\n gradientHorizontalMinLength?: number;\n\n /**\n * The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient.\n *\n * __Default value:__ `undefined`. If `undefined`, the default gradient will be determined based on the following rules:\n * - For vertical gradients, `clamp(plot_height, gradientVerticalMinLength, gradientVerticalMaxLength)`\n * - For top-`orient`ed or bottom-`orient`ed horizontal gradients, `clamp(plot_width, gradientHorizontalMinLength, gradientHorizontalMaxLength)`\n * - For other horizontal gradients, `gradientHorizontalMinLength`\n *\n * where `clamp(value, min, max)` restricts _value_ to be between the specified _min_ and _max_.\n * @minimum 0\n */\n gradientLength?: number;\n\n /**\n * The opacity of unselected legend entries.\n *\n * __Default value:__ 0.35.\n */\n unselectedOpacity?: number;\n\n /**\n * Disable legend by default\n */\n disable?: boolean;\n };\n\n/**\n * Properties of a legend or boolean flag for determining whether to show it.\n */\nexport interface Legend\n extends Omit, 'orient'>,\n LegendMixins,\n Guide {\n /**\n * Mark definitions for custom legend encoding.\n *\n * @hidden\n */\n encoding?: LegendEncoding;\n\n /**\n * [Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n *\n * __Note:__ The label text and value can be assessed via the `label` and `value` properties of the legend's backing `datum` object.\n */\n labelExpr?: string;\n\n /**\n * The minimum desired step between legend ticks, in terms of scale domain values. For example, a value of `1` indicates that ticks should not be less than 1 unit apart. If `tickMinStep` is specified, the `tickCount` value will be adjusted, if necessary, to enforce the minimum step value.\n *\n * __Default value__: `undefined`\n */\n tickMinStep?: number | ES;\n\n /**\n * Explicitly set the visible legend values.\n */\n values?: number[] | string[] | boolean[] | DateTime[] | ES; // Vega already supports Signal -- we have to re-declare here since VL supports special Date Time object that's not valid in Vega.\n\n /**\n * The type of the legend. Use `\"symbol\"` to create a discrete legend and `\"gradient\"` for a continuous color gradient.\n *\n * __Default value:__ `\"gradient\"` for non-binned quantitative fields and temporal fields; `\"symbol\"` otherwise.\n */\n type?: 'symbol' | 'gradient';\n\n /**\n * A non-negative integer indicating the z-index of the legend.\n * If zindex is 0, legend should be drawn behind all chart elements.\n * To put them in front, use zindex = 1.\n *\n * @TJS-type integer\n * @minimum 0\n */\n zindex?: number;\n}\n\n// Change comments to be Vega-Lite specific\ninterface LegendMixins {\n /**\n * The strategy to use for resolving overlap of labels in gradient legends. If `false`, no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used. If set to `\"greedy\"`, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes).\n *\n * __Default value:__ `\"greedy\"` for `log scales otherwise `true`.\n */\n labelOverlap?: LabelOverlap | ES; // override comment since our default differs from Vega\n\n /**\n * The direction of the legend, one of `\"vertical\"` or `\"horizontal\"`.\n *\n * __Default value:__\n * - For top-/bottom-`orient`ed legends, `\"horizontal\"`\n * - For left-/right-`orient`ed legends, `\"vertical\"`\n * - For top/bottom-left/right-`orient`ed legends, `\"horizontal\"` for gradient legends and `\"vertical\"` for symbol legends.\n */\n direction?: Orientation; // Omit SignalRef\n\n /**\n * The orientation of the legend, which determines how the legend is positioned within the scene. One of `\"left\"`, `\"right\"`, `\"top\"`, `\"bottom\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom-left\"`, `\"bottom-right\"`, `\"none\"`.\n *\n * __Default value:__ `\"right\"`\n */\n orient?: LegendOrient; // Omit SignalRef\n}\n\nexport type LegendInternal = Legend;\n\nexport interface LegendEncoding {\n /**\n * Custom encoding for the legend container.\n * This can be useful for creating legend with custom x, y position.\n */\n legend?: GuideEncodingEntry;\n\n /**\n * Custom encoding for the legend title text mark.\n */\n title?: GuideEncodingEntry;\n\n /**\n * Custom encoding for legend label text marks.\n */\n labels?: GuideEncodingEntry;\n\n /**\n * Custom encoding for legend symbol marks.\n */\n symbols?: GuideEncodingEntry;\n\n /**\n * Custom encoding for legend gradient filled rect marks.\n */\n gradient?: GuideEncodingEntry;\n}\n\nexport const defaultLegendConfig: LegendConfig = {\n gradientHorizontalMaxLength: 200,\n gradientHorizontalMinLength: 100,\n gradientVerticalMaxLength: 200,\n gradientVerticalMinLength: 64, // This is Vega's minimum.\n unselectedOpacity: 0.35\n};\n\nexport const COMMON_LEGEND_PROPERTY_INDEX: Flag)> = {\n aria: 1,\n clipHeight: 1,\n columnPadding: 1,\n columns: 1,\n cornerRadius: 1,\n description: 1,\n direction: 1,\n fillColor: 1,\n format: 1,\n formatType: 1,\n gradientLength: 1,\n gradientOpacity: 1,\n gradientStrokeColor: 1,\n gradientStrokeWidth: 1,\n gradientThickness: 1,\n gridAlign: 1,\n labelAlign: 1,\n labelBaseline: 1,\n labelColor: 1,\n labelFont: 1,\n labelFontSize: 1,\n labelFontStyle: 1,\n labelFontWeight: 1,\n labelLimit: 1,\n labelOffset: 1,\n labelOpacity: 1,\n labelOverlap: 1,\n labelPadding: 1,\n labelSeparation: 1,\n legendX: 1,\n legendY: 1,\n offset: 1,\n orient: 1,\n padding: 1,\n rowPadding: 1,\n strokeColor: 1,\n symbolDash: 1,\n symbolDashOffset: 1,\n symbolFillColor: 1,\n symbolLimit: 1,\n symbolOffset: 1,\n symbolOpacity: 1,\n symbolSize: 1,\n symbolStrokeColor: 1,\n symbolStrokeWidth: 1,\n symbolType: 1,\n tickCount: 1,\n tickMinStep: 1,\n title: 1,\n titleAlign: 1,\n titleAnchor: 1,\n titleBaseline: 1,\n titleColor: 1,\n titleFont: 1,\n titleFontSize: 1,\n titleFontStyle: 1,\n titleFontWeight: 1,\n titleLimit: 1,\n titleLineHeight: 1,\n titleOpacity: 1,\n titleOrient: 1,\n titlePadding: 1,\n type: 1,\n values: 1,\n zindex: 1\n};\n\nexport const LEGEND_PROPERTIES = keys(COMMON_LEGEND_PROPERTY_INDEX);\n","import {Binding, Color, Cursor, Stream, Vector2} from 'vega';\nimport {isObject} from 'vega-util';\nimport {SingleDefUnitChannel} from './channel';\nimport {FieldName, PrimitiveValue} from './channeldef';\nimport {DateTime} from './datetime';\nimport {ParameterName} from './parameter';\nimport {Dict} from './util';\n\nexport const SELECTION_ID = '_vgsid_';\nexport type SelectionType = 'point' | 'interval';\nexport type SelectionResolution = 'global' | 'union' | 'intersect';\n\nexport type SelectionInit = PrimitiveValue | DateTime;\nexport type SelectionInitInterval = Vector2 | Vector2 | Vector2 | Vector2;\n\nexport type SelectionInitMapping = Dict;\nexport type SelectionInitIntervalMapping = Dict;\n\nexport type LegendStreamBinding = {legend: string | Stream};\nexport type LegendBinding = 'legend' | LegendStreamBinding;\n\nexport interface BaseSelectionConfig {\n /**\n * Determines the default event processing and data query for the selection. Vega-Lite currently supports two selection types:\n *\n * - `\"point\"` -- to select multiple discrete data values; the first value is selected on `click` and additional values toggled on shift-click.\n * - `\"interval\"` -- to select a continuous range of data values on `drag`.\n */\n type: T;\n\n /**\n * Clears the selection, emptying it of all values. This property can be a\n * [Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable clear.\n *\n * __Default value:__ `dblclick`.\n *\n * __See also:__ [`clear` examples ](https://vega.github.io/vega-lite/docs/selection.html#clear) in the documentation.\n */\n clear?: Stream | string | boolean;\n\n /**\n * A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\n * For interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters).\n *\n * __See also:__ [`on` examples](https://vega.github.io/vega-lite/docs/selection.html#on) in the documentation.\n */\n on?: Stream | string;\n\n /**\n * With layered and multi-view displays, a strategy that determines how\n * selections' data queries are resolved when applied in a filter transform,\n * conditional encoding rule, or scale domain.\n *\n * One of:\n * - `\"global\"` -- only one brush exists for the entire SPLOM. When the user begins to drag, any previous brushes are cleared, and a new one is constructed.\n * - `\"union\"` -- each cell contains its own brush, and points are highlighted if they lie within _any_ of these individual brushes.\n * - `\"intersect\"` -- each cell contains its own brush, and points are highlighted only if they fall within _all_ of these individual brushes.\n *\n * __Default value:__ `global`.\n *\n * __See also:__ [`resolve` examples](https://vega.github.io/vega-lite/docs/selection.html#resolve) in the documentation.\n */\n resolve?: SelectionResolution;\n\n // TODO(https://github.com/vega/vega-lite/issues/2596).\n // predicate?: string;\n // domain?: SelectionDomain;\n\n /**\n * An array of encoding channels. The corresponding data field values\n * must match for a data tuple to fall within the selection.\n *\n * __See also:__ The [projection with `encodings` and `fields` section](https://vega.github.io/vega-lite/docs/selection.html#project) in the documentation.\n */\n encodings?: SingleDefUnitChannel[];\n}\n\nexport interface PointSelectionConfig extends BaseSelectionConfig<'point'> {\n /**\n * An array of field names whose values must match for a data tuple to\n * fall within the selection.\n *\n * __See also:__ The [projection with `encodings` and `fields` section](https://vega.github.io/vega-lite/docs/selection.html#project) in the documentation.\n */\n fields?: FieldName[];\n\n /**\n * Controls whether data values should be toggled (inserted or removed from a point selection)\n * or only ever inserted into multi selections.\n *\n * One of:\n * - `true` -- the default behavior, which corresponds to `\"event.shiftKey\"`. As a result, data values are toggled when the user interacts with the shift-key pressed.\n * - `false` -- disables toggling behaviour; as the user interacts, data values are only inserted into the multi selection and never removed.\n * - A [Vega expression](https://vega.github.io/vega/docs/expressions/) which is re-evaluated as the user interacts. If the expression evaluates to `true`, the data value is toggled into or out of the multi selection. If the expression evaluates to `false`, the multi selection is first clear, and the data value is then inserted. For example, setting the value to the Vega expression `\"true\"` will toggle data values\n * without the user pressing the shift-key.\n *\n * __Default value:__ `true`\n *\n * __See also:__ [`toggle` examples](https://vega.github.io/vega-lite/docs/selection.html#toggle) in the documentation.\n */\n toggle?: string | boolean;\n\n /**\n * When true, an invisible voronoi diagram is computed to accelerate discrete\n * selection. The data value _nearest_ the mouse cursor is added to the selection.\n *\n * __Default value:__ `false`, which means that data values must be interacted with directly (e.g., clicked on) to be added to the selection.\n *\n * __See also:__ [`nearest` examples](https://vega.github.io/vega-lite/docs/selection.html#nearest) documentation.\n */\n nearest?: boolean;\n}\n\n// Similar to BaseMarkConfig but the field documentations are specificly for an interval mark.\nexport interface BrushConfig {\n /**\n * The fill color of the interval mark.\n *\n * __Default value:__ `\"#333333\"`\n *\n */\n fill?: Color;\n\n /**\n * The fill opacity of the interval mark (a value between `0` and `1`).\n *\n * __Default value:__ `0.125`\n */\n fillOpacity?: number;\n\n /**\n * The stroke color of the interval mark.\n *\n * __Default value:__ `\"#ffffff\"`\n */\n stroke?: Color;\n\n /**\n * The stroke opacity of the interval mark (a value between `0` and `1`).\n */\n strokeOpacity?: number;\n\n /**\n * The stroke width of the interval mark.\n */\n strokeWidth?: number;\n\n /**\n * An array of alternating stroke and space lengths, for creating dashed or dotted lines.\n */\n strokeDash?: number[];\n\n /**\n * The offset (in pixels) with which to begin drawing the stroke dash array.\n */\n strokeDashOffset?: number;\n\n /**\n * The mouse cursor used over the interval mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used.\n */\n cursor?: Cursor;\n}\n\nexport interface IntervalSelectionConfig extends BaseSelectionConfig<'interval'> {\n /**\n * When truthy, allows a user to interactively move an interval selection\n * back-and-forth. Can be `true`, `false` (to disable panning), or a\n * [Vega event stream definition](https://vega.github.io/vega/docs/event-streams/)\n * which must include a start and end event to trigger continuous panning.\n * Discrete panning (e.g., pressing the left/right arrow keys) will be supported in future versions.\n *\n * __Default value:__ `true`, which corresponds to `[mousedown, window:mouseup] > window:mousemove!`.\n * This default allows users to clicks and drags within an interval selection to reposition it.\n *\n * __See also:__ [`translate` examples](https://vega.github.io/vega-lite/docs/selection.html#translate) in the documentation.\n */\n translate?: string | boolean;\n\n /**\n * When truthy, allows a user to interactively resize an interval selection.\n * Can be `true`, `false` (to disable zooming), or a [Vega event stream\n * definition](https://vega.github.io/vega/docs/event-streams/). Currently,\n * only `wheel` events are supported,\n * but custom event streams can still be used to specify filters, debouncing, and throttling.\n * Future versions will expand the set of events that can trigger this transformation.\n *\n * __Default value:__ `true`, which corresponds to `wheel!`. This default allows users to use the mouse wheel to resize an interval selection.\n *\n * __See also:__ [`zoom` examples](https://vega.github.io/vega-lite/docs/selection.html#zoom) in the documentation.\n */\n zoom?: string | boolean;\n\n /**\n * An interval selection also adds a rectangle mark to depict the\n * extents of the interval. The `mark` property can be used to customize the\n * appearance of the mark.\n *\n * __See also:__ [`mark` examples](https://vega.github.io/vega-lite/docs/selection.html#mark) in the documentation.\n */\n mark?: BrushConfig;\n}\n\nexport interface SelectionParameter {\n /**\n * Required. A unique name for the selection parameter. Selection names should be valid JavaScript identifiers: they should contain only alphanumeric characters (or \"$\", or \"_\") and may not start with a digit. Reserved keywords that may not be used as parameter names are \"datum\", \"event\", \"item\", and \"parent\".\n */\n name: ParameterName;\n\n /**\n * Determines the default event processing and data query for the selection. Vega-Lite currently supports two selection types:\n *\n * - `\"point\"` -- to select multiple discrete data values; the first value is selected on `click` and additional values toggled on shift-click.\n * - `\"interval\"` -- to select a continuous range of data values on `drag`.\n */\n select: T | (T extends 'point' ? PointSelectionConfig : T extends 'interval' ? IntervalSelectionConfig : never);\n\n /**\n * Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/selection.html#project) and initial values.\n *\n * __See also:__ [`init`](https://vega.github.io/vega-lite/docs/value.html) documentation.\n */\n value?: T extends 'point'\n ? SelectionInit | SelectionInitMapping[]\n : T extends 'interval'\n ? SelectionInitIntervalMapping\n : never;\n\n /**\n * When set, a selection is populated by input elements (also known as dynamic query widgets)\n * or by interacting with the corresponding legend. Direct manipulation interaction is disabled by default;\n * to re-enable it, set the selection's [`on`](https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties) property.\n *\n * Legend bindings are restricted to selections that only specify a single field or encoding.\n *\n * Query widget binding takes the form of Vega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind)\n * or can be a mapping between projected field/encodings and binding definitions.\n *\n * __See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation.\n */\n bind?: T extends 'point'\n ? Binding | Record | LegendBinding\n : T extends 'interval'\n ? 'scales'\n : never;\n}\n\nexport type TopLevelSelectionParameter = SelectionParameter & {\n /**\n * By default, top-level selections are applied to every view in the visualization.\n * If this property is specified, selections will only be applied to views with the given names.\n */\n views?: (string | string[])[];\n};\n\nexport type ParameterExtent =\n | {\n /**\n * The name of a parameter.\n */\n param: ParameterName;\n\n /**\n * If a selection parameter is specified, the field name to extract selected values for\n * when the selection is [projected](https://vega.github.io/vega-lite/docs/selection.html#project) over multiple fields or encodings.\n */\n field?: FieldName;\n }\n | {\n /**\n * The name of a parameter.\n */\n param: ParameterName;\n\n /**\n * If a selection parameter is specified, the encoding channel to extract selected values for\n * when a selection is [projected](https://vega.github.io/vega-lite/docs/selection.html#project) over multiple fields or encodings.\n */\n encoding?: SingleDefUnitChannel;\n };\n\nexport type PointSelectionConfigWithoutType = Omit;\n\nexport type IntervalSelectionConfigWithoutType = Omit;\n\nexport interface SelectionConfig {\n /**\n * The default definition for a [`point`](https://vega.github.io/vega-lite/docs/parameter.html#select) selection. All properties and transformations\n * for a point selection definition (except `type`) may be specified here.\n *\n * For instance, setting `point` to `{\"on\": \"dblclick\"}` populates point selections on double-click by default.\n */\n point?: PointSelectionConfigWithoutType;\n\n /**\n * The default definition for an [`interval`](https://vega.github.io/vega-lite/docs/parameter.html#select) selection. All properties and transformations\n * for an interval selection definition (except `type`) may be specified here.\n *\n * For instance, setting `interval` to `{\"translate\": false}` disables the ability to move\n * interval selections by default.\n */\n interval?: IntervalSelectionConfigWithoutType;\n}\n\nexport const defaultConfig: SelectionConfig = {\n point: {\n on: 'click',\n fields: [SELECTION_ID],\n toggle: 'event.shiftKey',\n resolve: 'global',\n clear: 'dblclick'\n },\n interval: {\n on: '[mousedown, window:mouseup] > window:mousemove!',\n encodings: ['x', 'y'],\n translate: '[mousedown, window:mouseup] > window:mousemove!',\n zoom: 'wheel!',\n mark: {fill: '#333', fillOpacity: 0.125, stroke: 'white'},\n resolve: 'global',\n clear: 'dblclick'\n }\n};\n\nexport function isLegendBinding(bind: any): bind is LegendBinding {\n return !!bind && (bind === 'legend' || !!bind.legend);\n}\n\nexport function isLegendStreamBinding(bind: any): bind is LegendStreamBinding {\n return isLegendBinding(bind) && isObject(bind);\n}\n\nexport function isSelectionParameter(param: any): param is SelectionParameter {\n return !!param['select'];\n}\n","import {Binding, Expr, InitSignal, NewSignal} from 'vega';\nimport {isSelectionParameter, TopLevelSelectionParameter} from './selection';\n\nexport type ParameterName = string;\n\nexport interface VariableParameter {\n /**\n * A unique name for the variable parameter. Parameter names should be valid JavaScript identifiers: they should contain only alphanumeric characters (or \"$\", or \"_\") and may not start with a digit. Reserved keywords that may not be used as parameter names are \"datum\", \"event\", \"item\", and \"parent\".\n */\n name: ParameterName;\n\n /**\n * The [initial value](http://vega.github.io/vega-lite/docs/value.html) of the parameter.\n *\n * __Default value:__ `undefined`\n */\n value?: any;\n\n /**\n * An expression for the value of the parameter. This expression may include other parameters, in which case the parameter will automatically update in response to upstream parameter changes.\n */\n expr?: Expr;\n\n /**\n * Binds the parameter to an external input element such as a slider, selection list or radio button group.\n */\n bind?: Binding;\n}\n\nexport function assembleParameterSignals(params: (VariableParameter | TopLevelSelectionParameter)[]) {\n const signals: (NewSignal | InitSignal)[] = [];\n for (const param of params || []) {\n // Selection parameters are handled separately via assembleSelectionTopLevelSignals\n // and assembleSignals methods registered on the Model.\n if (isSelectionParameter(param)) continue;\n const {expr, bind, ...rest} = param;\n\n if (bind && expr) {\n // Vega's InitSignal -- apply expr to \"init\"\n const signal: InitSignal = {\n ...rest,\n bind,\n init: expr\n };\n signals.push(signal);\n } else {\n const signal: NewSignal = {\n ...rest,\n ...(expr ? {update: expr} : {}),\n ...(bind ? {bind} : {})\n };\n signals.push(signal);\n }\n }\n return signals;\n}\n","import {GenericSpec, NormalizedSpec} from '.';\nimport {BaseSpec, BoundsMixins, GenericCompositionLayoutWithColumns, ResolveMixins} from './base';\n\n/**\n * Base layout mixins for V/HConcatSpec, which should not have RowCol generic fo its property.\n */\nexport interface OneDirectionalConcatLayout extends BoundsMixins, ResolveMixins {\n /**\n * Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n *\n * __Default value:__ `false`\n */\n center?: boolean;\n\n /**\n * The spacing in pixels between sub-views of the concat operator.\n *\n * __Default value__: `10`\n */\n spacing?: number;\n}\n\n/**\n * Base interface for a generalized concatenation specification.\n */\nexport interface GenericConcatSpec>\n extends BaseSpec,\n GenericCompositionLayoutWithColumns,\n ResolveMixins {\n /**\n * A list of views to be concatenated.\n */\n concat: S[];\n}\n\n/**\n * Base interface for a vertical concatenation specification.\n */\nexport interface GenericVConcatSpec>\n extends BaseSpec,\n OneDirectionalConcatLayout {\n /**\n * A list of views to be concatenated and put into a column.\n */\n vconcat: S[];\n}\n\n/**\n * Base interface for a horizontal concatenation specification.\n */\nexport interface GenericHConcatSpec>\n extends BaseSpec,\n OneDirectionalConcatLayout {\n /**\n * A list of views to be concatenated and put into a row.\n */\n hconcat: S[];\n}\n\n/** A concat spec without any shortcut/expansion syntax */\nexport type NormalizedConcatSpec =\n | GenericConcatSpec\n | GenericVConcatSpec\n | GenericHConcatSpec;\n\nexport function isAnyConcatSpec(spec: BaseSpec): spec is GenericVConcatSpec | GenericHConcatSpec {\n return isVConcatSpec(spec) || isHConcatSpec(spec) || isConcatSpec(spec);\n}\n\nexport function isConcatSpec(spec: BaseSpec): spec is GenericConcatSpec {\n return 'concat' in spec;\n}\n\nexport function isVConcatSpec(spec: BaseSpec): spec is GenericVConcatSpec {\n return 'vconcat' in spec;\n}\n\nexport function isHConcatSpec(spec: BaseSpec): spec is GenericHConcatSpec {\n return 'hconcat' in spec;\n}\n","import {Color, SignalRef} from 'vega';\nimport {BaseSpec} from '.';\nimport {getPositionScaleChannel} from '../channel';\nimport {signalRefOrValue} from '../compile/common';\nimport {Config} from '../config';\nimport {InlineDataset} from '../data';\nimport {ExprRef} from '../expr';\nimport {VariableParameter} from '../parameter';\nimport {TopLevelSelectionParameter} from '../selection';\nimport {Dict} from '../util';\n\n/**\n * @minimum 0\n */\nexport type Padding = number | {top?: number; bottom?: number; left?: number; right?: number};\n\nexport type Datasets = Dict;\n\nexport type TopLevel = S &\n TopLevelProperties & {\n /**\n * URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v5.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.\n * @format uri\n */\n $schema?: string;\n\n /**\n * Vega-Lite configuration object. This property can only be defined at the top-level of a specification.\n */\n config?: Config;\n\n /**\n * A global data store for named datasets. This is a mapping from names to inline datasets.\n * This can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property.\n */\n datasets?: Datasets;\n\n /**\n * Optional metadata that will be passed to Vega.\n * This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.\n */\n usermeta?: Dict;\n };\n\n/**\n * Shared properties between Top-Level specs and Config\n */\nexport interface TopLevelProperties {\n /**\n * CSS color property to use as the background of the entire view.\n *\n * __Default value:__ `\"white\"`\n */\n background?: Color | ES;\n\n /**\n * The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides.\n * If an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n *\n * __Default value__: `5`\n */\n padding?: Padding | ES;\n\n /**\n * How the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\n * Object values can additionally specify parameters for content sizing and automatic resizing.\n *\n * __Default value__: `pad`\n */\n autosize?: AutosizeType | AutoSizeParams; // Vega actually supports signal for autosize. However, we need to check autosize at compile time to infer the rest of the spec. Thus VL's autosize won't support SignalRef for now.\n\n /**\n * Dynamic variables or selections that parameterize a visualization.\n */\n params?: (VariableParameter | TopLevelSelectionParameter)[];\n}\n\nexport type FitType = 'fit' | 'fit-x' | 'fit-y';\n\nexport function isFitType(autoSizeType: AutosizeType): autoSizeType is FitType {\n return autoSizeType === 'fit' || autoSizeType === 'fit-x' || autoSizeType === 'fit-y';\n}\n\nexport function getFitType(sizeType?: 'width' | 'height'): FitType {\n return sizeType ? (`fit-${getPositionScaleChannel(sizeType)}` as FitType) : 'fit';\n}\n\nexport type AutosizeType = 'pad' | 'none' | 'fit' | 'fit-x' | 'fit-y';\n\nexport interface AutoSizeParams {\n /**\n * The sizing format type. One of `\"pad\"`, `\"fit\"`, `\"fit-x\"`, `\"fit-y\"`, or `\"none\"`. See the [autosize type](https://vega.github.io/vega-lite/docs/size.html#autosize) documentation for descriptions of each.\n *\n * __Default value__: `\"pad\"`\n */\n type?: AutosizeType;\n\n /**\n * A boolean flag indicating if autosize layout should be re-calculated on every view update.\n *\n * __Default value__: `false`\n */\n resize?: boolean;\n\n /**\n * Determines how size calculation should be performed, one of `\"content\"` or `\"padding\"`. The default setting (`\"content\"`) interprets the width and height settings as the data rectangle (plotting) dimensions, to which padding is then added. In contrast, the `\"padding\"` setting includes the padding within the view size calculations, such that the width and height settings indicate the **total** intended size of the view.\n *\n * __Default value__: `\"content\"`\n */\n contains?: 'content' | 'padding';\n}\n\nconst TOP_LEVEL_PROPERTIES: (keyof TopLevelProperties)[] = [\n 'background',\n 'padding'\n // We do not include \"autosize\" here as it is supported by only unit and layer specs and thus need to be normalized\n];\n\nexport function extractTopLevelProperties(t: TopLevelProperties, includeParams: boolean) {\n const o: TopLevelProperties = {};\n for (const p of TOP_LEVEL_PROPERTIES) {\n if (t && t[p] !== undefined) {\n o[p as any] = signalRefOrValue(t[p]);\n }\n }\n if (includeParams) {\n o.params = t.params;\n }\n return o;\n}\n","import {Color, Cursor, SignalRef, Text} from 'vega';\nimport {isNumber, isObject} from 'vega-util';\nimport {NormalizedSpec} from '.';\nimport {Data} from '../data';\nimport {ExprRef} from '../expr';\nimport {MarkConfig} from '../mark';\nimport {Resolve} from '../resolve';\nimport {TitleParams} from '../title';\nimport {Transform} from '../transform';\nimport {Flag, keys} from '../util';\nimport {LayoutAlign, RowCol} from '../vega.schema';\nimport {isConcatSpec, isVConcatSpec} from './concat';\nimport {isFacetMapping, isFacetSpec} from './facet';\n\nexport {TopLevel} from './toplevel';\n\n/**\n * Common properties for all types of specification\n */\nexport interface BaseSpec {\n /**\n * Title for the plot.\n */\n title?: Text | TitleParams;\n\n /**\n * Name of the visualization for later reference.\n */\n name?: string;\n\n /**\n * Description of this mark for commenting purpose.\n */\n description?: string;\n\n /**\n * An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent.\n */\n data?: Data | null;\n\n /**\n * An array of data transformations such as filter and new field calculation.\n */\n transform?: Transform[];\n}\n\nexport interface DataMixins {\n /**\n * An object describing the data source.\n */\n data: Data;\n}\n\nexport interface Step {\n /**\n * The size (width/height) per discrete step.\n */\n step: number;\n}\n\nexport function isStep(size: number | Step | 'container' | 'merged'): size is Step {\n return isObject(size) && size['step'] !== undefined;\n}\n\n// TODO(https://github.com/vega/vega-lite/issues/2503): Make this generic so we can support some form of top-down sizing.\n/**\n * Common properties for specifying width and height of unit and layer specifications.\n */\nexport interface LayoutSizeMixins {\n /**\n * The width of a visualization.\n *\n * - For a plot with a continuous x-field, width should be a number.\n * - For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.)\n * - To enable responsive sizing on width, it should be set to `\"container\"`.\n *\n * __Default value:__\n * Based on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n *\n * __Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n *\n * __See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation.\n */\n width?: number | 'container' | Step; // Vega also supports SignalRef for width and height. However, we need to know if width is a step or not in VL and it's very difficult to check this at runtime, so we intentionally do not support SignalRef here.\n\n /**\n * The height of a visualization.\n *\n * - For a plot with a continuous y-field, height should be a number.\n * - For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.)\n * - To enable responsive sizing on height, it should be set to `\"container\"`.\n *\n * __Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n *\n * __Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n *\n * __See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation.\n */\n height?: number | 'container' | Step; // Vega also supports SignalRef for width and height. However, we need to know if width is a step or not in VL and it's very difficult to check this at runtime, so we intentionally do not support SignalRef here.\n}\n\nexport function isFrameMixins(o: any): o is FrameMixins {\n return o['view'] || o['width'] || o['height'];\n}\n\nexport interface FrameMixins extends LayoutSizeMixins {\n /**\n * An object defining the view background's fill and stroke.\n *\n * __Default value:__ none (transparent)\n */\n view?: ViewBackground;\n}\n\nexport interface ResolveMixins {\n /**\n * Scale, axis, and legend resolutions for view composition specifications.\n */\n resolve?: Resolve;\n}\n\nexport interface BaseViewBackground\n extends Partial<\n Pick<\n MarkConfig,\n | 'cornerRadius'\n | 'fillOpacity'\n | 'opacity'\n | 'strokeCap'\n | 'strokeDash'\n | 'strokeDashOffset'\n | 'strokeJoin'\n | 'strokeMiterLimit'\n | 'strokeOpacity'\n | 'strokeWidth'\n >\n > {\n // Override documentations for fill, stroke, and cursor\n /**\n * The fill color.\n *\n * __Default value:__ `undefined`\n */\n fill?: Color | null | ES;\n\n /**\n * The stroke color.\n *\n * __Default value:__ `\"#ddd\"`\n */\n stroke?: Color | null | ES;\n\n /**\n * The mouse cursor used over the view. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used.\n */\n cursor?: Cursor;\n}\n\nexport interface ViewBackground extends BaseViewBackground {\n /**\n * A string or array of strings indicating the name of custom styles to apply to the view background. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles.\n *\n * __Default value:__ `\"cell\"`\n * __Note:__ Any specified view background properties will augment the default style.\n */\n style?: string | string[];\n}\n\nexport interface BoundsMixins {\n /**\n * The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n *\n * - If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n * - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n *\n * __Default value:__ `\"full\"`\n */\n\n bounds?: 'full' | 'flush';\n}\n\n/**\n * Base layout for FacetSpec and RepeatSpec.\n * This is named \"GenericComposition\" layout as ConcatLayout is a GenericCompositionLayout too\n * (but _not_ vice versa).\n */\nexport interface GenericCompositionLayout extends BoundsMixins {\n /**\n * The alignment to apply to grid rows and columns.\n * The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n *\n * - For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n * - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n * - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n *\n * Alternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n *\n * __Default value:__ `\"all\"`.\n */\n align?: LayoutAlign | RowCol;\n\n /**\n * Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n *\n * An object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n *\n * __Default value:__ `false`\n */\n center?: boolean | RowCol;\n\n /**\n * The spacing in pixels between sub-views of the composition operator.\n * An object of the form `{\"row\": number, \"column\": number}` can be used to set\n * different spacing values for rows and columns.\n *\n * __Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)\n */\n spacing?: number | RowCol;\n}\n\nexport const DEFAULT_SPACING = 20;\n\nexport interface ColumnMixins {\n /**\n * The number of columns to include in the view composition layout.\n *\n * __Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n * `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n *\n * __Note__:\n *\n * 1) This property is only for:\n * - the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n * - the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n *\n * 2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).\n */\n columns?: number;\n}\n\nexport type GenericCompositionLayoutWithColumns = GenericCompositionLayout & ColumnMixins;\n\nexport type CompositionConfig = ColumnMixins & {\n /**\n * The default spacing in pixels between composed sub-views.\n *\n * __Default value__: `20`\n */\n spacing?: number;\n};\n\nexport interface CompositionConfigMixins {\n /** Default configuration for the `facet` view composition operator */\n facet?: CompositionConfig;\n\n /** Default configuration for all concatenation and repeat view composition operators (`concat`, `hconcat`, `vconcat`, and `repeat`) */\n concat?: CompositionConfig;\n}\n\nconst COMPOSITION_LAYOUT_INDEX: Flag = {\n align: 1,\n bounds: 1,\n center: 1,\n columns: 1,\n spacing: 1\n};\n\nconst COMPOSITION_LAYOUT_PROPERTIES = keys(COMPOSITION_LAYOUT_INDEX);\n\nexport type SpecType = 'unit' | 'facet' | 'layer' | 'concat';\n\nexport function extractCompositionLayout(\n spec: NormalizedSpec,\n specType: keyof CompositionConfigMixins,\n config: CompositionConfigMixins\n): GenericCompositionLayoutWithColumns {\n const compositionConfig = config[specType];\n const layout: GenericCompositionLayoutWithColumns = {};\n\n // Apply config first\n const {spacing: spacingConfig, columns} = compositionConfig;\n if (spacingConfig !== undefined) {\n layout.spacing = spacingConfig;\n }\n\n if (columns !== undefined) {\n if ((isFacetSpec(spec) && !isFacetMapping(spec.facet)) || isConcatSpec(spec)) {\n layout.columns = columns;\n }\n }\n\n if (isVConcatSpec(spec)) {\n layout.columns = 1;\n }\n\n // Then copy properties from the spec\n for (const prop of COMPOSITION_LAYOUT_PROPERTIES) {\n if (spec[prop] !== undefined) {\n if (prop === 'spacing') {\n const spacing: number | RowCol = spec[prop];\n\n layout[prop] = isNumber(spacing)\n ? spacing\n : {\n row: spacing.row ?? spacingConfig,\n column: spacing.column ?? spacingConfig\n };\n } else {\n (layout[prop] as any) = spec[prop];\n }\n }\n }\n\n return layout;\n}\n","import {Color, InitSignal, Locale, NewSignal, RangeConfig, RangeScheme, SignalRef, writeConfig} from 'vega';\nimport {isObject, mergeConfig} from 'vega-util';\nimport {Axis, AxisConfig, AxisConfigMixins, AXIS_CONFIGS, isConditionalAxisValue} from './axis';\nimport {signalOrValueRefWithCondition, signalRefOrValue} from './compile/common';\nimport {CompositeMarkConfigMixins, getAllCompositeMarks} from './compositemark';\nimport {ExprRef, replaceExprRef} from './expr';\nimport {VL_ONLY_LEGEND_CONFIG} from './guide';\nimport {HeaderConfigMixins, HEADER_CONFIGS} from './header';\nimport {defaultLegendConfig, LegendConfig} from './legend';\nimport * as mark from './mark';\nimport {\n AnyMarkConfig,\n Mark,\n MarkConfig,\n MarkConfigMixins,\n MARK_CONFIGS,\n PRIMITIVE_MARKS,\n VL_ONLY_MARK_CONFIG_PROPERTIES,\n VL_ONLY_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX\n} from './mark';\nimport {assembleParameterSignals} from './parameter';\nimport {ProjectionConfig} from './projection';\nimport {defaultScaleConfig, ScaleConfig} from './scale';\nimport {defaultConfig as defaultSelectionConfig, SelectionConfig} from './selection';\nimport {BaseViewBackground, CompositionConfigMixins, DEFAULT_SPACING, isStep} from './spec/base';\nimport {TopLevelProperties} from './spec/toplevel';\nimport {extractTitleConfig, TitleConfig} from './title';\nimport {duplicate, getFirstDefined, isEmpty, keys, omit} from './util';\n\nexport interface ViewConfig extends BaseViewBackground {\n /**\n * The default width when the plot has a continuous field for x or longitude, or has arc marks.\n *\n * __Default value:__ `200`\n */\n continuousWidth?: number;\n\n /**\n * The default width when the plot has non-arc marks and either a discrete x-field or no x-field.\n * The width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step.\n *\n * __Default value:__ a step size based on `config.view.step`.\n */\n discreteWidth?: number | {step: number};\n /**\n * The default height when the plot has a continuous y-field for x or latitude, or has arc marks.\n *\n * __Default value:__ `200`\n */\n continuousHeight?: number;\n\n /**\n * The default height when the plot has non arc marks and either a discrete y-field or no y-field.\n * The height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step.\n *\n * __Default value:__ a step size based on `config.view.step`.\n */\n discreteHeight?: number | {step: number};\n\n /**\n * Default step size for x-/y- discrete fields.\n */\n step?: number;\n\n /**\n * Whether the view should be clipped.\n */\n clip?: boolean;\n}\n\nexport function getViewConfigContinuousSize(\n viewConfig: ViewConfig,\n channel: 'width' | 'height'\n) {\n return viewConfig[channel] ?? viewConfig[channel === 'width' ? 'continuousWidth' : 'continuousHeight']; // get width/height for backwards compatibility\n}\n\nexport function getViewConfigDiscreteStep(\n viewConfig: ViewConfig,\n channel: 'width' | 'height'\n) {\n const size = getViewConfigDiscreteSize(viewConfig, channel);\n return isStep(size) ? size.step : DEFAULT_STEP;\n}\n\nexport function getViewConfigDiscreteSize(\n viewConfig: ViewConfig,\n channel: 'width' | 'height'\n) {\n const size = viewConfig[channel] ?? viewConfig[channel === 'width' ? 'discreteWidth' : 'discreteHeight']; // get width/height for backwards compatibility\n return getFirstDefined(size, {step: viewConfig.step});\n}\n\nexport const DEFAULT_STEP = 20;\n\nexport const defaultViewConfig: ViewConfig = {\n continuousWidth: 200,\n continuousHeight: 200,\n step: DEFAULT_STEP\n};\n\nexport function isVgScheme(rangeScheme: string[] | RangeScheme): rangeScheme is RangeScheme {\n return rangeScheme && !!rangeScheme['scheme'];\n}\n\nexport type ColorConfig = Record;\n\nexport type FontSizeConfig = Record;\n\nexport interface VLOnlyConfig {\n /**\n * Default font for all text marks, titles, and labels.\n */\n font?: string;\n\n /**\n * Default color signals.\n *\n * @hidden\n */\n color?: boolean | ColorConfig;\n\n /**\n * Default font size signals.\n *\n * @hidden\n */\n fontSize?: boolean | FontSizeConfig;\n\n /**\n * Default axis and legend title for count fields.\n *\n * __Default value:__ `'Count of Records`.\n *\n * @type {string}\n */\n countTitle?: string;\n\n /**\n * Defines how Vega-Lite generates title for fields. There are three possible styles:\n * - `\"verbal\"` (Default) - displays function in a verbal style (e.g., \"Sum of field\", \"Year-month of date\", \"field (binned)\").\n * - `\"function\"` - displays function using parentheses and capitalized texts (e.g., \"SUM(field)\", \"YEARMONTH(date)\", \"BIN(field)\").\n * - `\"plain\"` - displays only the field name without functions (e.g., \"field\", \"date\", \"field\").\n */\n fieldTitle?: 'verbal' | 'functional' | 'plain';\n\n /**\n * D3 Number format for guide labels and text marks. For example `\"s\"` for SI units. Use [D3's number format pattern](https://github.com/d3/d3-format#locale_format).\n */\n numberFormat?: string;\n\n /**\n * Default time format for raw time values (without time units) in text marks, legend labels and header labels.\n *\n * __Default value:__ `\"%b %d, %Y\"`\n * __Note:__ Axes automatically determine the format for each label automatically so this config does not affect axes.\n */\n timeFormat?: string;\n\n /**\n * Allow the `formatType` property for text marks and guides to accept a custom formatter function [registered as a Vega expression](https://vega.github.io/vega-lite/usage/compile.html#format-type).\n */\n customFormatTypes?: boolean;\n\n /** Default properties for [single view plots](https://vega.github.io/vega-lite/docs/spec.html#single). */\n view?: ViewConfig;\n\n /**\n * Scale configuration determines default properties for all [scales](https://vega.github.io/vega-lite/docs/scale.html). For a full list of scale configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config).\n */\n scale?: ScaleConfig;\n\n /** An object hash for defining default properties for each type of selections. */\n selection?: SelectionConfig;\n}\n\nexport type StyleConfigIndex = Partial | Axis>> &\n MarkConfigMixins & {\n /**\n * Default style for axis, legend, and header titles.\n */\n 'guide-title'?: MarkConfig;\n\n /**\n * Default style for axis, legend, and header labels.\n */\n 'guide-label'?: MarkConfig;\n\n /**\n * Default style for chart titles\n */\n 'group-title'?: MarkConfig;\n\n /**\n * Default style for chart subtitles\n */\n 'group-subtitle'?: MarkConfig;\n };\n\nexport interface Config\n extends TopLevelProperties,\n VLOnlyConfig,\n MarkConfigMixins,\n CompositeMarkConfigMixins,\n AxisConfigMixins,\n HeaderConfigMixins,\n CompositionConfigMixins {\n /**\n * An object hash that defines default range arrays or schemes for using with scales.\n * For a full list of scale range configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config).\n */\n range?: RangeConfig;\n\n /**\n * Legend configuration, which determines default properties for all [legends](https://vega.github.io/vega-lite/docs/legend.html). For a full list of legend configuration options, please see the [corresponding section of in the legend documentation](https://vega.github.io/vega-lite/docs/legend.html#config).\n */\n legend?: LegendConfig;\n\n /**\n * Title configuration, which determines default properties for all [titles](https://vega.github.io/vega-lite/docs/title.html). For a full list of title configuration options, please see the [corresponding section of the title documentation](https://vega.github.io/vega-lite/docs/title.html#config).\n */\n title?: TitleConfig;\n\n /**\n * Projection configuration, which determines default properties for all [projections](https://vega.github.io/vega-lite/docs/projection.html). For a full list of projection configuration options, please see the [corresponding section of the projection documentation](https://vega.github.io/vega-lite/docs/projection.html#config).\n */\n projection?: ProjectionConfig;\n\n /** An object hash that defines key-value mappings to determine default properties for marks with a given [style](https://vega.github.io/vega-lite/docs/mark.html#mark-def). The keys represent styles names; the values have to be valid [mark configuration objects](https://vega.github.io/vega-lite/docs/mark.html#config). */\n style?: StyleConfigIndex;\n\n /**\n * A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property provides a global default for text marks, which is overridden by mark or style config settings, and by the lineBreak mark encoding channel. If signal-valued, either string or regular expression (regexp) values are valid.\n */\n lineBreak?: string | ES;\n\n /**\n * A boolean flag indicating if ARIA default attributes should be included for marks and guides (SVG output only). If false, the `\"aria-hidden\"` attribute will be set for all guides, removing them from the ARIA accessibility tree and Vega-Lite will not generate default descriptions for marks.\n *\n * __Default value:__ `true`.\n */\n aria?: boolean;\n\n /**\n * Locale definitions for string parsing and formatting of number and date values. The locale object should contain `number` and/or `time` properties with [locale definitions](https://vega.github.io/vega/docs/api/locale/). Locale definitions provided in the config block may be overridden by the View constructor locale option.\n */\n locale?: Locale;\n\n /**\n * @hidden\n */\n signals?: (InitSignal | NewSignal)[];\n}\n\nexport const defaultConfig: Config = {\n background: 'white',\n\n padding: 5,\n timeFormat: '%b %d, %Y',\n countTitle: 'Count of Records',\n\n view: defaultViewConfig,\n\n mark: mark.defaultMarkConfig,\n\n arc: {},\n area: {},\n bar: mark.defaultBarConfig,\n circle: {},\n geoshape: {},\n image: {},\n line: {},\n point: {},\n rect: mark.defaultRectConfig,\n rule: {color: 'black'}, // Need this to override default color in mark config\n square: {},\n text: {color: 'black'}, // Need this to override default color in mark config\n tick: mark.defaultTickConfig,\n trail: {},\n\n boxplot: {\n size: 14,\n extent: 1.5,\n box: {},\n median: {color: 'white'},\n outliers: {},\n rule: {},\n ticks: null\n },\n\n errorbar: {\n center: 'mean',\n rule: true,\n ticks: false\n },\n\n errorband: {\n band: {\n opacity: 0.3\n },\n borders: false\n },\n\n scale: defaultScaleConfig,\n\n projection: {},\n\n legend: defaultLegendConfig,\n header: {titlePadding: 10, labelPadding: 10},\n headerColumn: {},\n headerRow: {},\n headerFacet: {},\n\n selection: defaultSelectionConfig,\n style: {},\n\n title: {},\n\n facet: {spacing: DEFAULT_SPACING},\n concat: {spacing: DEFAULT_SPACING}\n};\n\n// Tableau10 color palette, copied from `vegaScale.scheme('tableau10')`\nconst tab10 = [\n '#4c78a8',\n '#f58518',\n '#e45756',\n '#72b7b2',\n '#54a24b',\n '#eeca3b',\n '#b279a2',\n '#ff9da6',\n '#9d755d',\n '#bab0ac'\n];\n\nexport const DEFAULT_FONT_SIZE = {\n text: 11,\n guideLabel: 10,\n guideTitle: 11,\n groupTitle: 13,\n groupSubtitle: 12\n};\n\nexport const DEFAULT_COLOR = {\n blue: tab10[0],\n orange: tab10[1],\n red: tab10[2],\n teal: tab10[3],\n green: tab10[4],\n yellow: tab10[5],\n purple: tab10[6],\n pink: tab10[7],\n brown: tab10[8],\n gray0: '#000',\n gray1: '#111',\n gray2: '#222',\n gray3: '#333',\n gray4: '#444',\n gray5: '#555',\n gray6: '#666',\n gray7: '#777',\n gray8: '#888',\n gray9: '#999',\n gray10: '#aaa',\n gray11: '#bbb',\n gray12: '#ccc',\n gray13: '#ddd',\n gray14: '#eee',\n gray15: '#fff'\n};\n\nexport function colorSignalConfig(color: boolean | ColorConfig = {}): Config {\n return {\n signals: [\n {\n name: 'color',\n value: isObject(color) ? {...DEFAULT_COLOR, ...color} : DEFAULT_COLOR\n }\n ],\n mark: {color: {signal: 'color.blue'}},\n rule: {color: {signal: 'color.gray0'}},\n text: {\n color: {signal: 'color.gray0'}\n },\n style: {\n 'guide-label': {\n fill: {signal: 'color.gray0'}\n },\n 'guide-title': {\n fill: {signal: 'color.gray0'}\n },\n 'group-title': {\n fill: {signal: 'color.gray0'}\n },\n 'group-subtitle': {\n fill: {signal: 'color.gray0'}\n },\n cell: {\n stroke: {signal: 'color.gray8'}\n }\n },\n axis: {\n domainColor: {signal: 'color.gray13'},\n gridColor: {signal: 'color.gray8'},\n tickColor: {signal: 'color.gray13'}\n },\n range: {\n category: [\n {signal: 'color.blue'},\n {signal: 'color.orange'},\n {signal: 'color.red'},\n {signal: 'color.teal'},\n {signal: 'color.green'},\n {signal: 'color.yellow'},\n {signal: 'color.purple'},\n {signal: 'color.pink'},\n {signal: 'color.brown'},\n {signal: 'color.grey8'}\n ]\n }\n };\n}\n\nexport function fontSizeSignalConfig(fontSize: boolean | FontSizeConfig): Config {\n return {\n signals: [\n {\n name: 'fontSize',\n value: isObject(fontSize) ? {...DEFAULT_FONT_SIZE, ...fontSize} : DEFAULT_FONT_SIZE\n }\n ],\n text: {\n fontSize: {signal: 'fontSize.text'}\n },\n style: {\n 'guide-label': {\n fontSize: {signal: 'fontSize.guideLabel'}\n },\n 'guide-title': {\n fontSize: {signal: 'fontSize.guideTitle'}\n },\n 'group-title': {\n fontSize: {signal: 'fontSize.groupTitle'}\n },\n 'group-subtitle': {\n fontSize: {signal: 'fontSize.groupSubtitle'}\n }\n }\n };\n}\n\nexport function fontConfig(font: string): Config {\n return {\n text: {font},\n style: {\n 'guide-label': {font},\n 'guide-title': {font},\n 'group-title': {font},\n 'group-subtitle': {font}\n }\n };\n}\n\nfunction getAxisConfigInternal(axisConfig: AxisConfig) {\n const props = keys(axisConfig || {});\n const axisConfigInternal: AxisConfig = {};\n for (const prop of props) {\n const val = axisConfig[prop];\n axisConfigInternal[prop as any] = isConditionalAxisValue(val)\n ? signalOrValueRefWithCondition(val)\n : signalRefOrValue(val);\n }\n return axisConfigInternal;\n}\n\nfunction getStyleConfigInternal(styleConfig: StyleConfigIndex) {\n const props = keys(styleConfig);\n\n const styleConfigInternal: StyleConfigIndex = {};\n for (const prop of props) {\n // We need to cast to cheat a bit here since styleConfig can be either mark config or axis config\n styleConfigInternal[prop as any] = getAxisConfigInternal(styleConfig[prop] as any);\n }\n return styleConfigInternal;\n}\n\nconst configPropsWithExpr = [\n ...MARK_CONFIGS,\n ...AXIS_CONFIGS,\n ...HEADER_CONFIGS,\n 'background',\n 'padding',\n 'legend',\n 'lineBreak',\n 'scale',\n 'style',\n 'title',\n 'view'\n] as const;\n\n/**\n * Merge specified config with default config and config for the `color` flag,\n * then replace all expressions with signals\n */\nexport function initConfig(specifiedConfig: Config = {}): Config {\n const {color, font, fontSize, selection, ...restConfig} = specifiedConfig;\n const mergedConfig = mergeConfig(\n {},\n duplicate(defaultConfig),\n font ? fontConfig(font) : {},\n color ? colorSignalConfig(color) : {},\n fontSize ? fontSizeSignalConfig(fontSize) : {},\n restConfig || {}\n );\n\n // mergeConfig doesn't recurse and overrides object values.\n if (selection) {\n writeConfig(mergedConfig, 'selection', selection, true);\n }\n\n const outputConfig: Config = omit(mergedConfig, configPropsWithExpr);\n\n for (const prop of ['background', 'lineBreak', 'padding']) {\n if (mergedConfig[prop]) {\n outputConfig[prop] = signalRefOrValue(mergedConfig[prop]);\n }\n }\n\n for (const markConfigType of mark.MARK_CONFIGS) {\n if (mergedConfig[markConfigType]) {\n // FIXME: outputConfig[markConfigType] expects that types are replaced recursively but replaceExprRef only replaces one level deep\n outputConfig[markConfigType] = replaceExprRef(mergedConfig[markConfigType]) as any;\n }\n }\n\n for (const axisConfigType of AXIS_CONFIGS) {\n if (mergedConfig[axisConfigType]) {\n outputConfig[axisConfigType] = getAxisConfigInternal(mergedConfig[axisConfigType]);\n }\n }\n\n for (const headerConfigType of HEADER_CONFIGS) {\n if (mergedConfig[headerConfigType]) {\n outputConfig[headerConfigType] = replaceExprRef(mergedConfig[headerConfigType]);\n }\n }\n\n if (mergedConfig.legend) {\n outputConfig.legend = replaceExprRef(mergedConfig.legend);\n }\n\n if (mergedConfig.scale) {\n outputConfig.scale = replaceExprRef(mergedConfig.scale);\n }\n\n if (mergedConfig.style) {\n outputConfig.style = getStyleConfigInternal(mergedConfig.style);\n }\n\n if (mergedConfig.title) {\n outputConfig.title = replaceExprRef(mergedConfig.title);\n }\n\n if (mergedConfig.view) {\n outputConfig.view = replaceExprRef(mergedConfig.view);\n }\n\n return outputConfig;\n}\n\nconst MARK_STYLES = ['view', ...PRIMITIVE_MARKS] as ('view' | Mark)[];\n\nconst VL_ONLY_CONFIG_PROPERTIES: (keyof Config)[] = [\n 'color',\n 'fontSize',\n 'background', // We apply background to the spec directly.\n 'padding',\n 'facet',\n 'concat',\n 'numberFormat',\n 'timeFormat',\n 'countTitle',\n 'header',\n\n 'axisQuantitative',\n 'axisTemporal',\n 'axisDiscrete',\n 'axisPoint',\n\n 'axisXBand',\n 'axisXPoint',\n 'axisXDiscrete',\n 'axisXQuantitative',\n 'axisXTemporal',\n\n 'axisYBand',\n 'axisYPoint',\n 'axisYDiscrete',\n 'axisYQuantitative',\n 'axisYTemporal',\n\n 'scale',\n 'selection',\n 'overlay' as keyof Config // FIXME: Redesign and unhide this\n];\n\nconst VL_ONLY_ALL_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX = {\n view: ['continuousWidth', 'continuousHeight', 'discreteWidth', 'discreteHeight', 'step'],\n ...VL_ONLY_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX\n};\n\nexport function stripAndRedirectConfig(config: Config) {\n config = duplicate(config);\n\n for (const prop of VL_ONLY_CONFIG_PROPERTIES) {\n delete config[prop];\n }\n\n if (config.axis) {\n // delete condition axis config\n for (const prop in config.axis) {\n if (isConditionalAxisValue(config.axis[prop])) {\n delete config.axis[prop];\n }\n }\n }\n\n if (config.legend) {\n for (const prop of VL_ONLY_LEGEND_CONFIG) {\n delete config.legend[prop];\n }\n }\n\n // Remove Vega-Lite only generic mark config\n if (config.mark) {\n for (const prop of VL_ONLY_MARK_CONFIG_PROPERTIES) {\n delete config.mark[prop];\n }\n\n if (config.mark.tooltip && isObject(config.mark.tooltip)) {\n delete config.mark.tooltip;\n }\n }\n\n if (config.params) {\n config.signals = (config.signals || []).concat(assembleParameterSignals(config.params));\n delete config.params;\n }\n\n for (const markType of MARK_STYLES) {\n // Remove Vega-Lite-only mark config\n for (const prop of VL_ONLY_MARK_CONFIG_PROPERTIES) {\n delete config[markType][prop];\n }\n\n // Remove Vega-Lite only mark-specific config\n const vlOnlyMarkSpecificConfigs = VL_ONLY_ALL_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX[markType];\n if (vlOnlyMarkSpecificConfigs) {\n for (const prop of vlOnlyMarkSpecificConfigs) {\n delete config[markType][prop];\n }\n }\n\n // Redirect mark config to config.style so that mark config only affect its own mark type\n // without affecting other marks that share the same underlying Vega marks.\n // For example, config.rect should not affect bar marks.\n redirectConfigToStyleConfig(config, markType);\n }\n\n for (const m of getAllCompositeMarks()) {\n // Clean up the composite mark config as we don't need them in the output specs anymore\n delete config[m];\n }\n\n redirectTitleConfig(config);\n\n // Remove empty config objects.\n for (const prop in config) {\n if (isObject(config[prop]) && isEmpty(config[prop])) {\n delete config[prop];\n }\n }\n\n return isEmpty(config) ? undefined : config;\n}\n\n/**\n *\n * Redirect config.title -- so that title config do not affect header labels,\n * which also uses `title` directive to implement.\n *\n * For subtitle configs in config.title, keep them in config.title as header titles never have subtitles.\n */\nfunction redirectTitleConfig(config: Config) {\n const {titleMarkConfig, subtitleMarkConfig, subtitle} = extractTitleConfig(config.title);\n\n // set config.style if title/subtitleMarkConfig is not an empty object\n if (!isEmpty(titleMarkConfig)) {\n config.style['group-title'] = {\n ...config.style['group-title'],\n ...titleMarkConfig // config.title has higher precedence than config.style.group-title in Vega\n };\n }\n if (!isEmpty(subtitleMarkConfig)) {\n config.style['group-subtitle'] = {\n ...config.style['group-subtitle'],\n ...subtitleMarkConfig\n };\n }\n\n // subtitle part can stay in config.title since header titles do not use subtitle\n if (!isEmpty(subtitle)) {\n config.title = subtitle;\n } else {\n delete config.title;\n }\n}\n\nfunction redirectConfigToStyleConfig(\n config: Config,\n prop: Mark | 'view' | string, // string = composite mark\n toProp?: string,\n compositeMarkPart?: string\n) {\n const propConfig: MarkConfig = compositeMarkPart ? config[prop][compositeMarkPart] : config[prop];\n\n if (prop === 'view') {\n toProp = 'cell'; // View's default style is \"cell\"\n }\n\n const style: MarkConfig = {\n ...propConfig,\n ...(config.style[toProp ?? prop] as MarkConfig)\n };\n\n // set config.style if it is not an empty object\n if (!isEmpty(style)) {\n config.style[toProp ?? prop] = style;\n }\n\n if (!compositeMarkPart) {\n // For composite mark, so don't delete the whole config yet as we have to do multiple redirections.\n delete config[prop];\n }\n}\n","import {Field} from '../channeldef';\nimport {SharedCompositeEncoding} from '../compositemark';\nimport {ExprRef} from '../expr';\nimport {Projection} from '../projection';\nimport {BaseSpec, FrameMixins, ResolveMixins} from './base';\nimport {GenericUnitSpec, NormalizedUnitSpec, UnitSpec} from './unit';\n\n/**\n * Base interface for a layer specification.\n */\nexport interface GenericLayerSpec> extends BaseSpec, FrameMixins, ResolveMixins {\n /**\n * Layer or single view specifications to be layered.\n *\n * __Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.\n */\n layer: (GenericLayerSpec | U)[];\n}\n\n/**\n * A full layered plot specification, which may contains `encoding` and `projection` properties that will be applied to underlying unit (single-view) specifications.\n */\nexport interface LayerSpec extends BaseSpec, FrameMixins, ResolveMixins {\n /**\n * Layer or single view specifications to be layered.\n *\n * __Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.\n */\n layer: (LayerSpec | UnitSpec)[];\n\n /**\n * A shared key-value mapping between encoding channels and definition of fields in the underlying layers.\n */\n encoding?: SharedCompositeEncoding;\n\n /**\n * An object defining properties of the geographic projection shared by underlying layers.\n */\n projection?: Projection;\n}\n\n/**\n * A layered specification without any shortcut/expansion syntax.\n */\nexport type NormalizedLayerSpec = GenericLayerSpec;\n\nexport function isLayerSpec(spec: BaseSpec): spec is GenericLayerSpec {\n return 'layer' in spec;\n}\n","import {GenericSpec} from '.';\nimport * as log from '../log';\nimport {Field, FieldName} from '../channeldef';\nimport {\n GenericConcatSpec,\n GenericHConcatSpec,\n GenericVConcatSpec,\n isConcatSpec,\n isHConcatSpec,\n isVConcatSpec\n} from './concat';\nimport {GenericFacetSpec, isFacetSpec} from './facet';\nimport {GenericLayerSpec, isLayerSpec} from './layer';\nimport {isRepeatSpec, RepeatSpec} from './repeat';\nimport {GenericUnitSpec, isUnitSpec, NormalizedUnitSpec} from './unit';\n\nexport abstract class SpecMapper<\n P,\n UI extends GenericUnitSpec,\n LI extends GenericLayerSpec = GenericLayerSpec,\n UO extends GenericUnitSpec = NormalizedUnitSpec,\n RO extends RepeatSpec = never,\n FO extends Field = FieldName\n> {\n public map(spec: GenericSpec, params: P): GenericSpec, RO, FO> {\n if (isFacetSpec(spec)) {\n return this.mapFacet(spec, params);\n } else if (isRepeatSpec(spec)) {\n return this.mapRepeat(spec, params);\n } else if (isHConcatSpec(spec)) {\n return this.mapHConcat(spec, params);\n } else if (isVConcatSpec(spec)) {\n return this.mapVConcat(spec, params);\n } else if (isConcatSpec(spec)) {\n return this.mapConcat(spec, params);\n } else {\n return this.mapLayerOrUnit(spec, params);\n }\n }\n\n public mapLayerOrUnit(spec: UI | LI, params: P): UO | GenericLayerSpec {\n if (isLayerSpec(spec)) {\n return this.mapLayer(spec, params);\n } else if (isUnitSpec(spec)) {\n return this.mapUnit(spec, params);\n }\n throw new Error(log.message.invalidSpec(spec));\n }\n\n public abstract mapUnit(spec: UI, params: P): UO | GenericLayerSpec;\n\n protected mapLayer(spec: LI, params: P): GenericLayerSpec {\n return {\n ...spec,\n layer: spec.layer.map(subspec => this.mapLayerOrUnit(subspec, params))\n };\n }\n\n protected mapHConcat(\n spec: GenericHConcatSpec>,\n params: P\n ): GenericHConcatSpec, RO, FO>> {\n return {\n ...spec,\n hconcat: spec.hconcat.map(subspec => this.map(subspec, params))\n };\n }\n\n protected mapVConcat(\n spec: GenericVConcatSpec>,\n params: P\n ): GenericVConcatSpec, RO, FO>> {\n return {\n ...spec,\n vconcat: spec.vconcat.map(subspec => this.map(subspec, params))\n };\n }\n\n protected mapConcat(\n spec: GenericConcatSpec>,\n params: P\n ): GenericConcatSpec, RO, FO>> {\n const {concat, ...rest} = spec;\n\n return {\n ...rest,\n concat: concat.map(subspec => this.map(subspec, params))\n };\n }\n\n protected mapFacet(spec: GenericFacetSpec, params: P): GenericFacetSpec, FO> {\n return {\n // as any is required here since TS cannot infer that FO may only be FieldName or Field, but not RepeatRef\n ...(spec as any),\n // TODO: remove \"any\" once we support all facet listed in https://github.com/vega/vega-lite/issues/2760\n spec: this.map(spec.spec, params) as any\n };\n }\n\n protected mapRepeat(spec: RepeatSpec, params: P): GenericSpec {\n return {\n ...spec,\n // as any is required here since TS cannot infer that the output type satisfies the input type\n spec: this.map(spec.spec as any, params)\n };\n }\n}\n","import {isArray} from 'vega-util';\nimport {LayerSpec, NonNormalizedSpec} from '.';\nimport {Field} from '../channeldef';\nimport {BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins} from './base';\nimport {UnitSpec} from './unit';\n\nexport interface RepeatMapping {\n /**\n * An array of fields to be repeated vertically.\n */\n row?: string[];\n\n /**\n * An array of fields to be repeated horizontally.\n */\n column?: string[];\n}\n\nexport interface LayerRepeatMapping extends RepeatMapping {\n /**\n * An array of fields to be repeated as layers.\n */\n layer: string[];\n}\n\nexport type RepeatSpec = NonLayerRepeatSpec | LayerRepeatSpec;\n\n/**\n * Base interface for a repeat specification.\n */\nexport interface NonLayerRepeatSpec extends BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins {\n /**\n * Definition for fields to be repeated. One of:\n * 1) An array of fields to be repeated. If `\"repeat\"` is an array, the field can be referred to as `{\"repeat\": \"repeat\"}`. The repeated views are laid out in a wrapped row. You can set the number of columns to control the wrapping.\n * 2) An object that maps `\"row\"` and/or `\"column\"` to the listed fields to be repeated along the particular orientations. The objects `{\"repeat\": \"row\"}` and `{\"repeat\": \"column\"}` can be used to refer to the repeated field respectively.\n */\n repeat: string[] | RepeatMapping;\n\n /**\n * A specification of the view that gets repeated.\n */\n spec: NonNormalizedSpec;\n}\n\nexport interface LayerRepeatSpec extends BaseSpec, GenericCompositionLayoutWithColumns, ResolveMixins {\n /**\n * Definition for fields to be repeated. One of:\n * 1) An array of fields to be repeated. If `\"repeat\"` is an array, the field can be referred to as `{\"repeat\": \"repeat\"}`. The repeated views are laid out in a wrapped row. You can set the number of columns to control the wrapping.\n * 2) An object that maps `\"row\"` and/or `\"column\"` to the listed fields to be repeated along the particular orientations. The objects `{\"repeat\": \"row\"}` and `{\"repeat\": \"column\"}` can be used to refer to the repeated field respectively.\n */\n repeat: LayerRepeatMapping;\n\n /**\n * A specification of the view that gets repeated.\n */\n spec: LayerSpec | UnitSpec;\n}\n\nexport function isRepeatSpec(spec: BaseSpec): spec is RepeatSpec {\n return 'repeat' in spec;\n}\n\nexport function isLayerRepeatSpec(spec: RepeatSpec): spec is LayerRepeatSpec {\n return !isArray(spec.repeat) && spec.repeat['layer'];\n}\n","import {array, isBoolean} from 'vega-util';\nimport {SUM_OPS} from './aggregate';\nimport {getSecondaryRangeChannel, NonPositionChannel, NONPOSITION_CHANNELS} from './channel';\nimport {\n channelDefType,\n FieldName,\n getFieldDef,\n isFieldDef,\n isFieldOrDatumDef,\n PositionDatumDef,\n PositionDef,\n PositionFieldDef,\n TypedFieldDef,\n vgField\n} from './channeldef';\nimport {channelHasField, Encoding, isAggregate} from './encoding';\nimport * as log from './log';\nimport {\n ARC,\n AREA,\n BAR,\n CIRCLE,\n isMarkDef,\n isPathMark,\n LINE,\n Mark,\n MarkDef,\n POINT,\n RULE,\n SQUARE,\n TEXT,\n TICK\n} from './mark';\nimport {ScaleType} from './scale';\nimport {contains} from './util';\n\nconst STACK_OFFSET_INDEX = {\n zero: 1,\n center: 1,\n normalize: 1\n} as const;\n\nexport type StackOffset = keyof typeof STACK_OFFSET_INDEX;\n\nexport function isStackOffset(s: string): s is StackOffset {\n return s in STACK_OFFSET_INDEX;\n}\n\nexport interface StackProperties {\n /** Dimension axis of the stack. */\n groupbyChannel?: 'x' | 'y' | 'theta' | 'radius';\n\n /** Field for groupbyChannel. */\n groupbyField?: FieldName;\n\n /** Measure axis of the stack. */\n fieldChannel: 'x' | 'y' | 'theta' | 'radius';\n\n /** Stack-by fields e.g., color, detail */\n stackBy: {\n fieldDef: TypedFieldDef;\n channel: NonPositionChannel;\n }[];\n\n /**\n * See `stack` property of Position Field Def.\n */\n offset: StackOffset;\n\n /**\n * Whether this stack will produce impute transform\n */\n impute: boolean;\n}\n\nexport const STACKABLE_MARKS = new Set([ARC, BAR, AREA, RULE, POINT, CIRCLE, SQUARE, LINE, TEXT, TICK]);\nexport const STACK_BY_DEFAULT_MARKS = new Set([BAR, AREA, ARC]);\n\nfunction isUnbinnedQuantitative(channelDef: PositionDef) {\n return isFieldDef(channelDef) && channelDefType(channelDef) === 'quantitative' && !channelDef.bin;\n}\n\nfunction potentialStackedChannel(\n encoding: Encoding,\n x: 'x' | 'theta'\n): 'x' | 'y' | 'theta' | 'radius' | undefined {\n const y = x === 'x' ? 'y' : 'radius';\n\n const xDef = encoding[x];\n const yDef = encoding[y];\n\n if (isFieldDef(xDef) && isFieldDef(yDef)) {\n if (isUnbinnedQuantitative(xDef) && isUnbinnedQuantitative(yDef)) {\n if (xDef.stack) {\n return x;\n } else if (yDef.stack) {\n return y;\n }\n const xAggregate = isFieldDef(xDef) && !!xDef.aggregate;\n const yAggregate = isFieldDef(yDef) && !!yDef.aggregate;\n // if there is no explicit stacking, only apply stack if there is only one aggregate for x or y\n if (xAggregate !== yAggregate) {\n return xAggregate ? x : y;\n } else {\n const xScale = xDef.scale?.type;\n const yScale = yDef.scale?.type;\n\n if (xScale && xScale !== 'linear') {\n return y;\n } else if (yScale && yScale !== 'linear') {\n return x;\n }\n }\n } else if (isUnbinnedQuantitative(xDef)) {\n return x;\n } else if (isUnbinnedQuantitative(yDef)) {\n return y;\n }\n } else if (isUnbinnedQuantitative(xDef)) {\n return x;\n } else if (isUnbinnedQuantitative(yDef)) {\n return y;\n }\n return undefined;\n}\n\nfunction getDimensionChannel(channel: 'x' | 'y' | 'theta' | 'radius') {\n switch (channel) {\n case 'x':\n return 'y';\n case 'y':\n return 'x';\n case 'theta':\n return 'radius';\n case 'radius':\n return 'theta';\n }\n}\n\n// Note: CompassQL uses this method and only pass in required properties of each argument object.\n// If required properties change, make sure to update CompassQL.\nexport function stack(\n m: Mark | MarkDef,\n encoding: Encoding,\n opt: {\n disallowNonLinearStack?: boolean; // This option is for CompassQL\n } = {}\n): StackProperties {\n const mark = isMarkDef(m) ? m.type : m;\n // Should have stackable mark\n if (!STACKABLE_MARKS.has(mark)) {\n return null;\n }\n\n // Run potential stacked twice, one for Cartesian and another for Polar,\n // so text marks can be stacked in any of the coordinates.\n\n // Note: The logic here is not perfectly correct. If we want to support stacked dot plots where each dot is a pie chart with label, we have to change the stack logic here to separate Cartesian stacking for polar stacking.\n // However, since we probably never want to do that, let's just note the limitation here.\n const fieldChannel = potentialStackedChannel(encoding, 'x') || potentialStackedChannel(encoding, 'theta');\n\n if (!fieldChannel) {\n return null;\n }\n\n const stackedFieldDef = encoding[fieldChannel] as PositionFieldDef | PositionDatumDef;\n const stackedField = isFieldDef(stackedFieldDef) ? vgField(stackedFieldDef, {}) : undefined;\n\n let dimensionChannel: 'x' | 'y' | 'theta' | 'radius' = getDimensionChannel(fieldChannel);\n let dimensionDef = encoding[dimensionChannel];\n\n let dimensionField = isFieldDef(dimensionDef) ? vgField(dimensionDef, {}) : undefined;\n\n // avoid grouping by the stacked field\n if (dimensionField === stackedField) {\n dimensionField = undefined;\n dimensionDef = undefined;\n dimensionChannel = undefined;\n }\n\n // Should have grouping level of detail that is different from the dimension field\n const stackBy = NONPOSITION_CHANNELS.reduce((sc, channel) => {\n // Ignore tooltip in stackBy (https://github.com/vega/vega-lite/issues/4001)\n if (channel !== 'tooltip' && channelHasField(encoding, channel)) {\n const channelDef = encoding[channel];\n for (const cDef of array(channelDef)) {\n const fieldDef = getFieldDef(cDef);\n if (fieldDef.aggregate) {\n continue;\n }\n\n // Check whether the channel's field is identical to x/y's field or if the channel is a repeat\n const f = vgField(fieldDef, {});\n if (\n // if fielddef is a repeat, just include it in the stack by\n !f ||\n // otherwise, the field must be different from x and y fields.\n f !== dimensionField\n ) {\n sc.push({channel, fieldDef});\n }\n }\n }\n return sc;\n }, []);\n\n // Automatically determine offset\n let offset: StackOffset;\n if (stackedFieldDef.stack !== undefined) {\n if (isBoolean(stackedFieldDef.stack)) {\n offset = stackedFieldDef.stack ? 'zero' : null;\n } else {\n offset = stackedFieldDef.stack;\n }\n } else if (STACK_BY_DEFAULT_MARKS.has(mark)) {\n offset = 'zero';\n }\n\n if (!offset || !isStackOffset(offset)) {\n return null;\n }\n\n if (isAggregate(encoding) && stackBy.length === 0) {\n return null;\n }\n\n // warn when stacking non-linear\n if (stackedFieldDef?.scale?.type && stackedFieldDef?.scale?.type !== ScaleType.LINEAR) {\n if (opt.disallowNonLinearStack) {\n return null;\n } else {\n log.warn(log.message.cannotStackNonLinearScale(stackedFieldDef.scale.type));\n }\n }\n\n // Check if it is a ranged mark\n if (isFieldOrDatumDef(encoding[getSecondaryRangeChannel(fieldChannel)])) {\n if (stackedFieldDef.stack !== undefined) {\n log.warn(log.message.cannotStackRangedMark(fieldChannel));\n }\n return null;\n }\n\n // Warn if stacking non-summative aggregate\n if (isFieldDef(stackedFieldDef) && stackedFieldDef.aggregate && !contains(SUM_OPS, stackedFieldDef.aggregate)) {\n log.warn(log.message.stackNonSummativeAggregate(stackedFieldDef.aggregate));\n }\n\n return {\n groupbyChannel: dimensionDef ? dimensionChannel : undefined,\n groupbyField: dimensionField,\n fieldChannel,\n impute: stackedFieldDef.impute === null ? false : isPathMark(mark),\n stackBy,\n offset\n };\n}\n","import {SignalRef} from 'vega';\nimport {isObject} from 'vega-util';\nimport {Config} from '../config';\nimport {Encoding, normalizeEncoding} from '../encoding';\nimport {ExprRef} from '../expr';\nimport {AreaConfig, isMarkDef, LineConfig, Mark, MarkConfig, MarkDef} from '../mark';\nimport {GenericUnitSpec, NormalizedUnitSpec} from '../spec';\nimport {isUnitSpec} from '../spec/unit';\nimport {stack} from '../stack';\nimport {keys, omit, pick} from '../util';\nimport {NonFacetUnitNormalizer, NormalizeLayerOrUnit, NormalizerParams} from './base';\n\ntype UnitSpecWithPathOverlay = GenericUnitSpec, Mark | MarkDef<'line' | 'area' | 'rule' | 'trail'>>;\n\nfunction dropLineAndPoint(markDef: MarkDef): MarkDef | Mark {\n const {point: _point, line: _line, ...mark} = markDef;\n\n return keys(mark).length > 1 ? mark : mark.type;\n}\n\nfunction dropLineAndPointFromConfig(config: Config) {\n for (const mark of ['line', 'area', 'rule', 'trail'] as const) {\n if (config[mark]) {\n config = {\n ...config,\n // TODO: remove as any\n [mark]: omit(config[mark], ['point', 'line'] as any)\n };\n }\n }\n return config;\n}\n\nfunction getPointOverlay(\n markDef: MarkDef,\n markConfig: LineConfig = {},\n encoding: Encoding\n): MarkConfig {\n if (markDef.point === 'transparent') {\n return {opacity: 0};\n } else if (markDef.point) {\n // truthy : true or object\n return isObject(markDef.point) ? markDef.point : {};\n } else if (markDef.point !== undefined) {\n // false or null\n return null;\n } else {\n // undefined (not disabled)\n if (markConfig.point || encoding.shape) {\n // enable point overlay if config[mark].point is truthy or if encoding.shape is provided\n return isObject(markConfig.point) ? markConfig.point : {};\n }\n // markDef.point is defined as falsy\n return undefined;\n }\n}\n\nfunction getLineOverlay(\n markDef: MarkDef,\n markConfig: AreaConfig = {}\n): MarkConfig {\n if (markDef.line) {\n // true or object\n return markDef.line === true ? {} : markDef.line;\n } else if (markDef.line !== undefined) {\n // false or null\n return null;\n } else {\n // undefined (not disabled)\n if (markConfig.line) {\n // enable line overlay if config[mark].line is truthy\n return markConfig.line === true ? {} : markConfig.line;\n }\n // markDef.point is defined as falsy\n return undefined;\n }\n}\n\nexport class PathOverlayNormalizer implements NonFacetUnitNormalizer {\n public name = 'path-overlay';\n\n public hasMatchingType(spec: GenericUnitSpec, config: Config): spec is UnitSpecWithPathOverlay {\n if (isUnitSpec(spec)) {\n const {mark, encoding} = spec;\n const markDef = isMarkDef(mark) ? mark : {type: mark};\n switch (markDef.type) {\n case 'line':\n case 'rule':\n case 'trail':\n return !!getPointOverlay(markDef, config[markDef.type], encoding);\n case 'area':\n return (\n // false / null are also included as we want to remove the properties\n !!getPointOverlay(markDef, config[markDef.type], encoding) ||\n !!getLineOverlay(markDef, config[markDef.type])\n );\n }\n }\n return false;\n }\n\n public run(spec: UnitSpecWithPathOverlay, normParams: NormalizerParams, normalize: NormalizeLayerOrUnit) {\n const {config} = normParams;\n const {params, projection, mark, encoding: e, ...outerSpec} = spec;\n\n // Need to call normalizeEncoding because we need the inferred types to correctly determine stack\n const encoding = normalizeEncoding(e, config);\n\n const markDef: MarkDef = isMarkDef(mark) ? mark : {type: mark};\n\n const pointOverlay = getPointOverlay(markDef, config[markDef.type], encoding);\n const lineOverlay = markDef.type === 'area' && getLineOverlay(markDef, config[markDef.type]);\n\n const layer: NormalizedUnitSpec[] = [\n {\n ...(params ? {params} : {}),\n mark: dropLineAndPoint({\n // TODO: extract this 0.7 to be shared with default opacity for point/tick/...\n ...(markDef.type === 'area' && markDef.opacity === undefined && markDef.fillOpacity === undefined\n ? {opacity: 0.7}\n : {}),\n ...markDef\n }),\n // drop shape from encoding as this might be used to trigger point overlay\n encoding: omit(encoding, ['shape'])\n }\n ];\n\n // FIXME: determine rules for applying selections.\n\n // Need to copy stack config to overlayed layer\n const stackProps = stack(markDef, encoding);\n\n let overlayEncoding = encoding;\n if (stackProps) {\n const {fieldChannel: stackFieldChannel, offset} = stackProps;\n overlayEncoding = {\n ...encoding,\n [stackFieldChannel]: {\n ...encoding[stackFieldChannel],\n ...(offset ? {stack: offset} : {})\n }\n };\n }\n\n if (lineOverlay) {\n layer.push({\n ...(projection ? {projection} : {}),\n mark: {\n type: 'line',\n ...pick(markDef, ['clip', 'interpolate', 'tension', 'tooltip']),\n ...lineOverlay\n },\n encoding: overlayEncoding\n });\n }\n if (pointOverlay) {\n layer.push({\n ...(projection ? {projection} : {}),\n mark: {\n type: 'point',\n opacity: 1,\n filled: true,\n ...pick(markDef, ['clip', 'tooltip']),\n ...pointOverlay\n },\n encoding: overlayEncoding\n });\n }\n\n return normalize(\n {\n ...outerSpec,\n layer\n },\n {\n ...normParams,\n config: dropLineAndPointFromConfig(config)\n }\n );\n }\n}\n","import {hasOwnProperty, isArray} from 'vega-util';\nimport {\n ChannelDef,\n DatumDef,\n Field,\n FieldDef,\n FieldName,\n hasConditionalFieldOrDatumDef,\n isConditionalDef,\n isFieldDef,\n isFieldOrDatumDef,\n isRepeatRef,\n isSortableFieldDef,\n ScaleFieldDef,\n ValueDef\n} from '../channeldef';\nimport {Encoding} from '../encoding';\nimport * as log from '../log';\nimport {isSortField} from '../sort';\nimport {FacetFieldDef, FacetMapping, isFacetMapping} from '../spec/facet';\n\nexport interface RepeaterValue {\n row?: string;\n column?: string;\n\n repeat?: string;\n\n layer?: string;\n}\n\nexport function replaceRepeaterInFacet(\n facet: FacetFieldDef | FacetMapping,\n repeater: RepeaterValue\n): FacetFieldDef | FacetMapping {\n if (!repeater) {\n return facet as FacetFieldDef;\n }\n\n if (isFacetMapping(facet)) {\n return replaceRepeaterInMapping(facet, repeater) as FacetMapping;\n }\n return replaceRepeaterInFieldDef(facet, repeater) as FacetFieldDef;\n}\n\nexport function replaceRepeaterInEncoding>(\n encoding: E,\n repeater: RepeaterValue\n): Encoding {\n if (!repeater) {\n return encoding as Encoding;\n }\n\n return replaceRepeaterInMapping(encoding, repeater) as Encoding;\n}\n\n/**\n * Replaces repeated value and returns if the repeated value is valid.\n */\nfunction replaceRepeatInProp(prop: keyof T, o: T, repeater: RepeaterValue): T {\n const val = o[prop];\n if (isRepeatRef(val)) {\n if (val.repeat in repeater) {\n return {...o, [prop]: repeater[val.repeat]};\n } else {\n log.warn(log.message.noSuchRepeatedValue(val.repeat));\n return undefined;\n }\n }\n return o;\n}\n\n/**\n * Replace repeater values in a field def with the concrete field name.\n */\n\nfunction replaceRepeaterInFieldDef(fieldDef: FieldDef, repeater: RepeaterValue) {\n fieldDef = replaceRepeatInProp('field', fieldDef, repeater);\n\n if (fieldDef === undefined) {\n // the field def should be ignored\n return undefined;\n } else if (fieldDef === null) {\n return null;\n }\n\n if (isSortableFieldDef(fieldDef) && isSortField(fieldDef.sort)) {\n const sort = replaceRepeatInProp('field', fieldDef.sort, repeater);\n fieldDef = {\n ...fieldDef,\n ...(sort ? {sort} : {})\n };\n }\n\n return fieldDef as ScaleFieldDef;\n}\n\nfunction replaceRepeaterInFieldOrDatumDef(def: FieldDef | DatumDef, repeater: RepeaterValue) {\n if (isFieldDef(def)) {\n return replaceRepeaterInFieldDef(def, repeater);\n } else {\n const datumDef = replaceRepeatInProp('datum', def, repeater);\n if (datumDef !== def && !datumDef.type) {\n datumDef.type = 'nominal';\n }\n return datumDef;\n }\n}\n\nfunction replaceRepeaterInChannelDef(channelDef: ChannelDef, repeater: RepeaterValue) {\n if (isFieldOrDatumDef(channelDef)) {\n const fd = replaceRepeaterInFieldOrDatumDef(channelDef, repeater);\n if (fd) {\n return fd;\n } else if (isConditionalDef>(channelDef)) {\n return {condition: channelDef.condition};\n }\n } else {\n if (hasConditionalFieldOrDatumDef(channelDef)) {\n const fd = replaceRepeaterInFieldOrDatumDef(channelDef.condition, repeater);\n if (fd) {\n return {\n ...channelDef,\n condition: fd\n } as ChannelDef;\n } else {\n const {condition, ...channelDefWithoutCondition} = channelDef;\n return channelDefWithoutCondition as ChannelDef;\n }\n }\n return channelDef as ValueDef;\n }\n return undefined;\n}\n\ntype EncodingOrFacet = Encoding | FacetMapping;\n\nfunction replaceRepeaterInMapping(\n mapping: EncodingOrFacet,\n repeater: RepeaterValue\n): EncodingOrFacet {\n const out: EncodingOrFacet = {};\n for (const channel in mapping) {\n if (hasOwnProperty(mapping, channel)) {\n const channelDef: ChannelDef | ChannelDef[] = mapping[channel];\n\n if (isArray(channelDef)) {\n // array cannot have condition\n out[channel] = (channelDef as ChannelDef[]) // somehow we need to cast it here\n .map(cd => replaceRepeaterInChannelDef(cd, repeater))\n .filter(cd => cd);\n } else {\n const cd = replaceRepeaterInChannelDef(channelDef, repeater);\n if (cd !== undefined) {\n out[channel] = cd;\n }\n }\n }\n }\n return out;\n}\n","import {isObject} from 'vega-util';\nimport {isBinned} from '../bin';\nimport {getMainRangeChannel, SECONDARY_RANGE_CHANNEL} from '../channel';\nimport {Field, isDatumDef, isFieldDef} from '../channeldef';\nimport {Encoding} from '../encoding';\nimport * as log from '../log';\nimport {isMarkDef} from '../mark';\nimport {GenericSpec} from '../spec';\nimport {GenericUnitSpec, isUnitSpec} from '../spec/unit';\nimport {NonFacetUnitNormalizer, NormalizeLayerOrUnit, NormalizerParams} from './base';\n\ninterface EncodingX2Mixins {\n x2: Encoding['x2'];\n}\n\ninterface EncodingY2Mixins {\n y2: Encoding['y2'];\n}\n\ntype RangedLineSpec = GenericUnitSpec & (EncodingX2Mixins | EncodingY2Mixins), 'line' | {mark: 'line'}>;\n\nexport class RuleForRangedLineNormalizer implements NonFacetUnitNormalizer {\n public name = 'RuleForRangedLine';\n\n public hasMatchingType(spec: GenericSpec): spec is RangedLineSpec {\n if (isUnitSpec(spec)) {\n const {encoding, mark} = spec;\n if (mark === 'line' || (isMarkDef(mark) && mark.type === 'line')) {\n for (const channel of SECONDARY_RANGE_CHANNEL) {\n const mainChannel = getMainRangeChannel(channel);\n const mainChannelDef = encoding[mainChannel];\n\n if (encoding[channel]) {\n if ((isFieldDef(mainChannelDef) && !isBinned(mainChannelDef.bin)) || isDatumDef(mainChannelDef)) {\n return true;\n }\n }\n }\n }\n }\n return false;\n }\n\n public run(spec: RangedLineSpec, params: NormalizerParams, normalize: NormalizeLayerOrUnit) {\n const {encoding, mark} = spec;\n log.warn(log.message.lineWithRange(!!encoding.x2, !!encoding.y2));\n\n return normalize(\n {\n ...spec,\n mark: isObject(mark) ? {...mark, type: 'rule'} : 'rule'\n },\n params\n );\n }\n}\n","import {SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {COLUMN, FACET, ROW} from '../channel';\nimport {Field, FieldName, hasConditionalFieldOrDatumDef, isFieldOrDatumDef, isValueDef} from '../channeldef';\nimport {SharedCompositeEncoding} from '../compositemark';\nimport {boxPlotNormalizer} from '../compositemark/boxplot';\nimport {errorBandNormalizer} from '../compositemark/errorband';\nimport {errorBarNormalizer} from '../compositemark/errorbar';\nimport {channelHasField, Encoding} from '../encoding';\nimport {ExprRef} from '../expr';\nimport * as log from '../log';\nimport {Projection} from '../projection';\nimport {FacetedUnitSpec, GenericSpec, LayerSpec, UnitSpec} from '../spec';\nimport {GenericCompositionLayoutWithColumns} from '../spec/base';\nimport {GenericConcatSpec} from '../spec/concat';\nimport {\n FacetEncodingFieldDef,\n FacetFieldDef,\n FacetMapping,\n GenericFacetSpec,\n isFacetMapping,\n NormalizedFacetSpec\n} from '../spec/facet';\nimport {NormalizedSpec} from '../spec/index';\nimport {NormalizedLayerSpec} from '../spec/layer';\nimport {SpecMapper} from '../spec/map';\nimport {isLayerRepeatSpec, LayerRepeatSpec, NonLayerRepeatSpec, RepeatSpec} from '../spec/repeat';\nimport {isUnitSpec, NormalizedUnitSpec} from '../spec/unit';\nimport {isEmpty, keys, omit, varName} from '../util';\nimport {isSignalRef} from '../vega.schema';\nimport {NonFacetUnitNormalizer, NormalizerParams} from './base';\nimport {PathOverlayNormalizer} from './pathoverlay';\nimport {replaceRepeaterInEncoding, replaceRepeaterInFacet} from './repeater';\nimport {RuleForRangedLineNormalizer} from './ruleforrangedline';\n\nexport class CoreNormalizer extends SpecMapper, LayerSpec> {\n private nonFacetUnitNormalizers: NonFacetUnitNormalizer[] = [\n boxPlotNormalizer,\n errorBarNormalizer,\n errorBandNormalizer,\n new PathOverlayNormalizer(),\n new RuleForRangedLineNormalizer()\n ];\n\n public map(spec: GenericSpec, LayerSpec, RepeatSpec, Field>, params: NormalizerParams) {\n // Special handling for a faceted unit spec as it can return a facet spec, not just a layer or unit spec like a normal unit spec.\n if (isUnitSpec(spec)) {\n const hasRow = channelHasField(spec.encoding, ROW);\n const hasColumn = channelHasField(spec.encoding, COLUMN);\n const hasFacet = channelHasField(spec.encoding, FACET);\n\n if (hasRow || hasColumn || hasFacet) {\n return this.mapFacetedUnit(spec, params);\n }\n }\n\n return super.map(spec, params);\n }\n\n // This is for normalizing non-facet unit\n public mapUnit(spec: UnitSpec, params: NormalizerParams): NormalizedUnitSpec | NormalizedLayerSpec {\n const {parentEncoding, parentProjection} = params;\n\n const encoding = replaceRepeaterInEncoding(spec.encoding, params.repeater);\n\n const specWithReplacedEncoding = {\n ...spec,\n ...(encoding ? {encoding} : {})\n };\n\n if (parentEncoding || parentProjection) {\n return this.mapUnitWithParentEncodingOrProjection(specWithReplacedEncoding, params);\n }\n\n const normalizeLayerOrUnit = this.mapLayerOrUnit.bind(this);\n\n for (const unitNormalizer of this.nonFacetUnitNormalizers) {\n if (unitNormalizer.hasMatchingType(specWithReplacedEncoding, params.config)) {\n return unitNormalizer.run(specWithReplacedEncoding, params, normalizeLayerOrUnit);\n }\n }\n\n return specWithReplacedEncoding as NormalizedUnitSpec;\n }\n\n protected mapRepeat(\n spec: RepeatSpec,\n params: NormalizerParams\n ): GenericConcatSpec | NormalizedLayerSpec {\n if (isLayerRepeatSpec(spec)) {\n return this.mapLayerRepeat(spec, params);\n } else {\n return this.mapNonLayerRepeat(spec, params);\n }\n }\n\n private mapLayerRepeat(\n spec: LayerRepeatSpec,\n params: NormalizerParams\n ): GenericConcatSpec | NormalizedLayerSpec {\n const {repeat, spec: childSpec, ...rest} = spec;\n const {row, column, layer} = repeat;\n\n const {repeater = {}, repeaterPrefix = ''} = params;\n\n if (row || column) {\n return this.mapRepeat(\n {\n ...spec,\n repeat: {\n ...(row ? {row} : {}),\n ...(column ? {column} : {})\n },\n spec: {\n repeat: {layer},\n spec: childSpec\n }\n },\n params\n );\n } else {\n return {\n ...rest,\n layer: layer.map(layerValue => {\n const childRepeater = {\n ...repeater,\n layer: layerValue\n };\n\n const childName = `${(childSpec.name || '') + repeaterPrefix}child__layer_${varName(layerValue)}`;\n\n const child = this.mapLayerOrUnit(childSpec, {...params, repeater: childRepeater, repeaterPrefix: childName});\n child.name = childName;\n\n return child;\n })\n };\n }\n }\n\n private mapNonLayerRepeat(spec: NonLayerRepeatSpec, params: NormalizerParams): GenericConcatSpec {\n const {repeat, spec: childSpec, data, ...remainingProperties} = spec;\n\n if (!isArray(repeat) && spec.columns) {\n // is repeat with row/column\n spec = omit(spec, ['columns']);\n log.warn(log.message.columnsNotSupportByRowCol('repeat'));\n }\n\n const concat: NormalizedSpec[] = [];\n\n const {repeater = {}, repeaterPrefix = ''} = params;\n\n const row = (!isArray(repeat) && repeat.row) || [repeater ? repeater.row : null];\n const column = (!isArray(repeat) && repeat.column) || [repeater ? repeater.column : null];\n\n const repeatValues = (isArray(repeat) && repeat) || [repeater ? repeater.repeat : null];\n\n // cross product\n for (const repeatValue of repeatValues) {\n for (const rowValue of row) {\n for (const columnValue of column) {\n const childRepeater = {\n repeat: repeatValue,\n row: rowValue,\n column: columnValue,\n layer: repeater.layer\n };\n\n const childName =\n (childSpec.name || '') +\n repeaterPrefix +\n 'child__' +\n (isArray(repeat)\n ? `${varName(repeatValue)}`\n : (repeat.row ? `row_${varName(rowValue)}` : '') +\n (repeat.column ? `column_${varName(columnValue)}` : ''));\n\n const child = this.map(childSpec, {...params, repeater: childRepeater, repeaterPrefix: childName});\n child.name = childName;\n\n // we move data up\n concat.push(omit(child, ['data']) as NormalizedSpec);\n }\n }\n }\n\n const columns = isArray(repeat) ? spec.columns : repeat.column ? repeat.column.length : 1;\n return {\n data: childSpec.data ?? data, // data from child spec should have precedence\n align: 'all',\n ...remainingProperties,\n columns,\n concat\n };\n }\n\n protected mapFacet(\n spec: GenericFacetSpec, LayerSpec, Field>,\n params: NormalizerParams\n ): GenericFacetSpec {\n const {facet} = spec;\n\n if (isFacetMapping(facet) && spec.columns) {\n // is facet with row/column\n spec = omit(spec, ['columns']);\n log.warn(log.message.columnsNotSupportByRowCol('facet'));\n }\n\n return super.mapFacet(spec, params);\n }\n\n private mapUnitWithParentEncodingOrProjection(\n spec: FacetedUnitSpec,\n params: NormalizerParams\n ): NormalizedUnitSpec | NormalizedLayerSpec {\n const {encoding, projection} = spec;\n const {parentEncoding, parentProjection, config} = params;\n const mergedProjection = mergeProjection({parentProjection, projection});\n const mergedEncoding = mergeEncoding({\n parentEncoding,\n encoding: replaceRepeaterInEncoding(encoding, params.repeater)\n });\n\n return this.mapUnit(\n {\n ...spec,\n ...(mergedProjection ? {projection: mergedProjection} : {}),\n ...(mergedEncoding ? {encoding: mergedEncoding} : {})\n },\n {config}\n );\n }\n\n private mapFacetedUnit(spec: FacetedUnitSpec, normParams: NormalizerParams): NormalizedFacetSpec {\n // New encoding in the inside spec should not contain row / column\n // as row/column should be moved to facet\n const {row, column, facet, ...encoding} = spec.encoding;\n\n // Mark and encoding should be moved into the inner spec\n const {mark, width, projection, height, view, params, encoding: _, ...outerSpec} = spec;\n\n const {facetMapping, layout} = this.getFacetMappingAndLayout({row, column, facet}, normParams);\n\n const newEncoding = replaceRepeaterInEncoding(encoding, normParams.repeater);\n\n return this.mapFacet(\n {\n ...outerSpec,\n ...layout,\n\n // row / column has higher precedence than facet\n facet: facetMapping,\n spec: {\n ...(width ? {width} : {}),\n ...(height ? {height} : {}),\n ...(view ? {view} : {}),\n ...(projection ? {projection} : {}),\n mark,\n encoding: newEncoding,\n ...(params ? {params} : {})\n }\n },\n normParams\n );\n }\n\n private getFacetMappingAndLayout(\n facets: {\n row: FacetEncodingFieldDef;\n column: FacetEncodingFieldDef;\n facet: FacetEncodingFieldDef;\n },\n params: NormalizerParams\n ): {facetMapping: FacetMapping | FacetFieldDef; layout: GenericCompositionLayoutWithColumns} {\n const {row, column, facet} = facets;\n\n if (row || column) {\n if (facet) {\n log.warn(log.message.facetChannelDropped([...(row ? [ROW] : []), ...(column ? [COLUMN] : [])]));\n }\n\n const facetMapping = {};\n const layout = {};\n\n for (const channel of [ROW, COLUMN]) {\n const def = facets[channel];\n if (def) {\n const {align, center, spacing, columns, ...defWithoutLayout} = def;\n facetMapping[channel] = defWithoutLayout;\n\n for (const prop of ['align', 'center', 'spacing'] as const) {\n if (def[prop] !== undefined) {\n layout[prop] ??= {};\n layout[prop][channel] = def[prop];\n }\n }\n }\n }\n\n return {facetMapping, layout};\n } else {\n const {align, center, spacing, columns, ...facetMapping} = facet;\n return {\n facetMapping: replaceRepeaterInFacet(facetMapping, params.repeater),\n layout: {\n ...(align ? {align} : {}),\n ...(center ? {center} : {}),\n ...(spacing ? {spacing} : {}),\n ...(columns ? {columns} : {})\n }\n };\n }\n }\n\n public mapLayer(\n spec: LayerSpec,\n {parentEncoding, parentProjection, ...otherParams}: NormalizerParams\n ): NormalizedLayerSpec {\n // Special handling for extended layer spec\n\n const {encoding, projection, ...rest} = spec;\n const params: NormalizerParams = {\n ...otherParams,\n parentEncoding: mergeEncoding({parentEncoding, encoding, layer: true}),\n parentProjection: mergeProjection({parentProjection, projection})\n };\n return super.mapLayer(rest, params);\n }\n}\n\nfunction mergeEncoding({\n parentEncoding,\n encoding = {},\n layer\n}: {\n parentEncoding: SharedCompositeEncoding;\n encoding: SharedCompositeEncoding | Encoding;\n layer?: boolean;\n}): Encoding {\n let merged: any = {};\n if (parentEncoding) {\n const channels = new Set([...keys(parentEncoding), ...keys(encoding)]);\n for (const channel of channels) {\n const channelDef = encoding[channel];\n const parentChannelDef = parentEncoding[channel];\n\n if (isFieldOrDatumDef(channelDef)) {\n // Field/Datum Def can inherit properties from its parent\n // Note that parentChannelDef doesn't have to be a field/datum def if the channelDef is already one.\n const mergedChannelDef = {\n ...parentChannelDef,\n ...channelDef\n };\n merged[channel] = mergedChannelDef;\n } else if (hasConditionalFieldOrDatumDef(channelDef)) {\n merged[channel] = {\n ...channelDef,\n condition: {\n ...parentChannelDef,\n ...channelDef.condition\n }\n };\n } else if (channelDef || channelDef === null) {\n merged[channel] = channelDef;\n } else if (\n layer ||\n isValueDef(parentChannelDef) ||\n isSignalRef(parentChannelDef) ||\n isFieldOrDatumDef(parentChannelDef) ||\n isArray(parentChannelDef)\n ) {\n merged[channel] = parentChannelDef;\n }\n }\n } else {\n merged = encoding;\n }\n return !merged || isEmpty(merged) ? undefined : merged;\n}\n\nfunction mergeProjection(opt: {\n parentProjection: Projection;\n projection: Projection;\n}) {\n const {parentProjection, projection} = opt;\n if (parentProjection && projection) {\n log.warn(log.message.projectionOverridden({parentProjection, projection}));\n }\n return projection ?? parentProjection;\n}\n","import {AggregateOp} from 'vega';\nimport {BinParams} from './bin';\nimport {FieldName} from './channeldef';\nimport {Data} from './data';\nimport {ImputeParams} from './impute';\nimport {LogicalComposition, normalizeLogicalComposition} from './logical';\nimport {ParameterName} from './parameter';\nimport {normalizePredicate, Predicate} from './predicate';\nimport {SortField} from './sort';\nimport {TimeUnit, TimeUnitParams} from './timeunit';\n\nexport interface FilterTransform {\n /**\n * The `filter` property must be a predication definition, which can take one of the following forms:\n *\n * 1) an [expression](https://vega.github.io/vega-lite/docs/types.html#expression) string,\n * where `datum` can be used to refer to the current data object.\n * For example, `{filter: \"datum.b2 > 60\"}` would make the output data includes only items that have values in the field `b2` over 60.\n *\n * 2) one of the [field predicates](https://vega.github.io/vega-lite/docs/predicate.html#field-predicate):\n * [`equal`](https://vega.github.io/vega-lite/docs/predicate.html#field-equal-predicate),\n * [`lt`](https://vega.github.io/vega-lite/docs/predicate.html#lt-predicate),\n * [`lte`](https://vega.github.io/vega-lite/docs/predicate.html#lte-predicate),\n * [`gt`](https://vega.github.io/vega-lite/docs/predicate.html#gt-predicate),\n * [`gte`](https://vega.github.io/vega-lite/docs/predicate.html#gte-predicate),\n * [`range`](https://vega.github.io/vega-lite/docs/predicate.html#range-predicate),\n * [`oneOf`](https://vega.github.io/vega-lite/docs/predicate.html#one-of-predicate),\n * or [`valid`](https://vega.github.io/vega-lite/docs/predicate.html#valid-predicate),\n\n * 3) a [selection predicate](https://vega.github.io/vega-lite/docs/predicate.html#selection-predicate), which define the names of a selection that the data point should belong to (or a logical composition of selections).\n *\n * 4) a [logical composition](https://vega.github.io/vega-lite/docs/predicate.html#composition) of (1), (2), or (3).\n */\n filter: LogicalComposition;\n}\n\nexport function isFilter(t: Transform): t is FilterTransform {\n return 'filter' in t;\n}\n\nexport interface CalculateTransform {\n /**\n * A [expression](https://vega.github.io/vega-lite/docs/types.html#expression) string. Use the variable `datum` to refer to the current data object.\n */\n calculate: string;\n\n /**\n * The field for storing the computed formula value.\n */\n as: FieldName;\n}\n\nexport interface BinTransform {\n /**\n * An object indicating bin properties, or simply `true` for using default bin parameters.\n */\n bin: true | BinParams;\n\n /**\n * The data field to bin.\n */\n field: FieldName;\n\n /**\n * The output fields at which to write the start and end bin values.\n * This can be either a string or an array of strings with two elements denoting the name for the fields for bin start and bin end respectively.\n * If a single string (e.g., `\"val\"`) is provided, the end field will be `\"val_end\"`.\n */\n as: FieldName | FieldName[];\n}\n\nexport interface TimeUnitTransform {\n /**\n * The timeUnit.\n */\n timeUnit: TimeUnit | TimeUnitParams;\n\n /**\n * The data field to apply time unit.\n */\n field: FieldName;\n\n /**\n * The output field to write the timeUnit value.\n */\n as: FieldName;\n}\n\nexport interface AggregateTransform {\n /**\n * Array of objects that define fields to aggregate.\n */\n aggregate: AggregatedFieldDef[];\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n}\n\nexport interface AggregatedFieldDef {\n /**\n * The aggregation operation to apply to the fields (e.g., `\"sum\"`, `\"average\"`, or `\"count\"`).\n * See the [full list of supported aggregation operations](https://vega.github.io/vega-lite/docs/aggregate.html#ops)\n * for more information.\n */\n op: AggregateOp;\n\n /**\n * The data field for which to compute aggregate function. This is required for all aggregation operations except `\"count\"`.\n */\n field?: FieldName;\n\n /**\n * The output field names to use for each aggregated field.\n */\n as: FieldName;\n}\n\nexport interface StackTransform {\n /**\n * The field which is stacked.\n */\n stack: FieldName;\n /**\n * The data fields to group by.\n */\n groupby: FieldName[];\n /**\n * Mode for stacking marks. One of `\"zero\"` (default), `\"center\"`, or `\"normalize\"`.\n * The `\"zero\"` offset will stack starting at `0`. The `\"center\"` offset will center the stacks. The `\"normalize\"` offset will compute percentage values for each stack point, with output values in the range `[0,1]`.\n *\n * __Default value:__ `\"zero\"`\n */\n offset?: 'zero' | 'center' | 'normalize';\n /**\n * Field that determines the order of leaves in the stacked charts.\n */\n sort?: SortField[];\n /**\n * Output field names. This can be either a string or an array of strings with two elements denoting the name for the fields for stack start and stack end respectively.\n * If a single string(e.g., `\"val\"`) is provided, the end field will be `\"val_end\"`.\n */\n as: FieldName | [FieldName, FieldName];\n}\n\nexport type WindowOnlyOp =\n | 'row_number'\n | 'rank'\n | 'dense_rank'\n | 'percent_rank'\n | 'cume_dist'\n | 'ntile'\n | 'lag'\n | 'lead'\n | 'first_value'\n | 'last_value'\n | 'nth_value';\n\nexport interface WindowFieldDef {\n /**\n * The window or aggregation operation to apply within a window (e.g., `\"rank\"`, `\"lead\"`, `\"sum\"`, `\"average\"` or `\"count\"`). See the list of all supported operations [here](https://vega.github.io/vega-lite/docs/window.html#ops).\n */\n op: AggregateOp | WindowOnlyOp;\n\n /**\n * Parameter values for the window functions. Parameter values can be omitted for operations that do not accept a parameter.\n *\n * See the list of all supported operations and their parameters [here](https://vega.github.io/vega-lite/docs/transforms/window.html).\n */\n param?: number;\n\n /**\n * The data field for which to compute the aggregate or window function. This can be omitted for window functions that do not operate over a field such as `\"count\"`, `\"rank\"`, `\"dense_rank\"`.\n */\n field?: FieldName;\n\n /**\n * The output name for the window operation.\n */\n as: FieldName;\n}\n\nexport interface WindowTransform {\n /**\n * The definition of the fields in the window, and what calculations to use.\n */\n window: WindowFieldDef[];\n\n /**\n * A frame specification as a two-element array indicating how the sliding window should proceed. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. The default value is `[null, 0]`, indicating that the sliding window includes the current object and all preceding objects. The value `[-5, 5]` indicates that the window should include five objects preceding and five objects following the current object. Finally, `[null, null]` indicates that the window frame should always include all data objects. If you this frame and want to assign the same value to add objects, you can use the simpler [join aggregate transform](https://vega.github.io/vega-lite/docs/joinaggregate.html). The only operators affected are the aggregation operations and the `first_value`, `last_value`, and `nth_value` window operations. The other window operations are not affected by this.\n *\n * __Default value:__: `[null, 0]` (includes the current object and all preceding objects)\n */\n frame?: (null | number)[];\n\n /**\n * Indicates if the sliding window frame should ignore peer values (data that are considered identical by the sort criteria). The default is false, causing the window frame to expand to include all peer values. If set to true, the window frame will be defined by offset values only. This setting only affects those operations that depend on the window frame, namely aggregation operations and the first_value, last_value, and nth_value window operations.\n *\n * __Default value:__ `false`\n */\n ignorePeers?: boolean;\n\n /**\n * The data fields for partitioning the data objects into separate windows. If unspecified, all data points will be in a single window.\n */\n groupby?: FieldName[];\n\n /**\n * A sort field definition for sorting data objects within a window. If two data objects are considered equal by the comparator, they are considered \"peer\" values of equal rank. If sort is not specified, the order is undefined: data objects are processed in the order they are observed and none are considered peers (the ignorePeers parameter is ignored and treated as if set to `true`).\n */\n sort?: SortField[];\n}\n\nexport interface JoinAggregateFieldDef {\n /**\n * The aggregation operation to apply (e.g., `\"sum\"`, `\"average\"` or `\"count\"`). See the list of all supported operations [here](https://vega.github.io/vega-lite/docs/aggregate.html#ops).\n */\n op: AggregateOp;\n\n /**\n * The data field for which to compute the aggregate function. This can be omitted for functions that do not operate over a field such as `\"count\"`.\n */\n field?: FieldName;\n\n /**\n * The output name for the join aggregate operation.\n */\n as: FieldName;\n}\n\nexport interface JoinAggregateTransform {\n /**\n * The definition of the fields in the join aggregate, and what calculations to use.\n */\n joinaggregate: JoinAggregateFieldDef[];\n\n /**\n * The data fields for partitioning the data objects into separate groups. If unspecified, all data points will be in a single group.\n */\n groupby?: FieldName[];\n}\n\nexport interface ImputeSequence {\n /**\n * The starting value of the sequence.\n * __Default value:__ `0`\n */\n start?: number;\n /**\n * The ending value(exclusive) of the sequence.\n */\n stop: number;\n /**\n * The step value between sequence entries.\n * __Default value:__ `1` or `-1` if `stop < start`\n */\n step?: number;\n}\n\nexport function isImputeSequence(t: ImputeSequence | any[] | undefined): t is ImputeSequence {\n return t?.['stop'] !== undefined;\n}\n\nexport interface ImputeTransform extends ImputeParams {\n /**\n * The data field for which the missing values should be imputed.\n */\n impute: FieldName;\n\n /**\n * A key field that uniquely identifies data objects within a group.\n * Missing key values (those occurring in the data but not in the current group) will be imputed.\n */\n key: FieldName;\n\n /**\n * An optional array of fields by which to group the values.\n * Imputation will then be performed on a per-group basis.\n */\n groupby?: FieldName[];\n}\n\nexport interface FlattenTransform {\n /**\n * An array of one or more data fields containing arrays to flatten.\n * If multiple fields are specified, their array values should have a parallel structure, ideally with the same length.\n * If the lengths of parallel arrays do not match,\n * the longest array will be used with `null` values added for missing entries.\n */\n flatten: FieldName[];\n\n /**\n * The output field names for extracted array values.\n *\n * __Default value:__ The field name of the corresponding array field\n */\n as?: FieldName[];\n}\n\nexport interface SampleTransform {\n /**\n * The maximum number of data objects to include in the sample.\n *\n * __Default value:__ `1000`\n */\n sample: number;\n}\n\nexport interface LookupBase {\n /**\n * Key in data to lookup.\n */\n key: FieldName;\n /**\n * Fields in foreign data or selection to lookup.\n * If not specified, the entire object is queried.\n */\n fields?: FieldName[];\n}\n\nexport interface LookupData extends LookupBase {\n /**\n * Secondary data source to lookup in.\n */\n data: Data;\n}\n\nexport interface LookupSelection extends LookupBase {\n /**\n * Selection parameter name to look up.\n */\n param: ParameterName;\n}\n\nexport interface LookupTransform {\n /**\n * Key in primary data source.\n */\n lookup: string;\n\n /**\n * The output fields on which to store the looked up data values.\n *\n * For data lookups, this property may be left blank if `from.fields`\n * has been specified (those field names will be used); if `from.fields`\n * has not been specified, `as` must be a string.\n *\n * For selection lookups, this property is optional: if unspecified,\n * looked up values will be stored under a property named for the selection;\n * and if specified, it must correspond to `from.fields`.\n */\n as?: FieldName | FieldName[];\n\n /**\n * The default value to use if lookup fails.\n *\n * __Default value:__ `null`\n */\n default?: any;\n\n /**\n * Data source or selection for secondary data reference.\n */\n from: LookupData | LookupSelection;\n}\n\nexport function isLookup(t: Transform): t is LookupTransform {\n return 'lookup' in t;\n}\n\nexport function isLookupData(from: LookupData | LookupSelection): from is LookupData {\n return 'data' in from;\n}\n\nexport function isLookupSelection(from: LookupData | LookupSelection): from is LookupSelection {\n return 'param' in from;\n}\n\nexport interface FoldTransform {\n /**\n * An array of data fields indicating the properties to fold.\n */\n fold: FieldName[];\n\n /**\n * The output field names for the key and value properties produced by the fold transform.\n * __Default value:__ `[\"key\", \"value\"]`\n */\n as?: [FieldName, FieldName];\n}\n\nexport interface PivotTransform {\n /**\n * The data field to pivot on. The unique values of this field become new field names in the output stream.\n */\n pivot: FieldName;\n\n /**\n * The data field to populate pivoted fields. The aggregate values of this field become the values of the new pivoted fields.\n */\n value: FieldName;\n\n /**\n * The optional data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * An optional parameter indicating the maximum number of pivoted fields to generate.\n * The default (`0`) applies no limit. The pivoted `pivot` names are sorted in ascending order prior to enforcing the limit.\n * __Default value:__ `0`\n */\n limit?: number;\n\n /**\n * The aggregation operation to apply to grouped `value` field values.\n * __Default value:__ `sum`\n */\n op?: AggregateOp;\n}\n\nexport function isPivot(t: Transform): t is PivotTransform {\n return 'pivot' in t;\n}\n\nexport interface DensityTransform {\n /**\n * The data field for which to perform density estimation.\n */\n density: FieldName;\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * A boolean flag indicating whether to produce density estimates (false) or cumulative density estimates (true).\n *\n * __Default value:__ `false`\n */\n cumulative?: boolean;\n\n /**\n * A boolean flag indicating if the output values should be probability estimates (false) or smoothed counts (true).\n *\n * __Default value:__ `false`\n */\n counts?: boolean;\n\n /**\n * The bandwidth (standard deviation) of the Gaussian kernel. If unspecified or set to zero, the bandwidth value is automatically estimated from the input data using Scott’s rule.\n */\n bandwidth?: number;\n\n /**\n * A [min, max] domain from which to sample the distribution. If unspecified, the extent will be determined by the observed minimum and maximum values of the density value field.\n */\n extent?: [number, number];\n\n /**\n * The minimum number of samples to take along the extent domain for plotting the density.\n *\n * __Default value:__ `25`\n */\n minsteps?: number;\n\n /**\n * The maximum number of samples to take along the extent domain for plotting the density.\n *\n * __Default value:__ `200`\n */\n maxsteps?: number;\n\n /**\n * The exact number of samples to take along the extent domain for plotting the density. If specified, overrides both minsteps and maxsteps to set an exact number of uniform samples. Potentially useful in conjunction with a fixed extent to ensure consistent sample points for stacked densities.\n */\n steps?: number;\n\n /**\n * The output fields for the sample value and corresponding density estimate.\n *\n * __Default value:__ `[\"value\", \"density\"]`\n */\n as?: [FieldName, FieldName];\n}\n\nexport function isDensity(t: Transform): t is DensityTransform {\n return 'density' in t;\n}\n\nexport interface QuantileTransform {\n /**\n * The data field for which to perform quantile estimation.\n */\n quantile: FieldName;\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * An array of probabilities in the range (0, 1) for which to compute quantile values. If not specified, the *step* parameter will be used.\n */\n probs?: number[];\n\n /**\n * A probability step size (default 0.01) for sampling quantile values. All values from one-half the step size up to 1 (exclusive) will be sampled. This parameter is only used if the *probs* parameter is not provided.\n */\n step?: number;\n\n /**\n * The output field names for the probability and quantile values.\n *\n * __Default value:__ `[\"prob\", \"value\"]`\n */\n as?: [FieldName, FieldName];\n}\n\nexport function isQuantile(t: Transform): t is QuantileTransform {\n return 'quantile' in t;\n}\n\nexport interface RegressionTransform {\n /**\n * The data field of the dependent variable to predict.\n */\n regression: FieldName;\n\n /**\n * The data field of the independent variable to use a predictor.\n */\n on: FieldName;\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * The functional form of the regression model. One of `\"linear\"`, `\"log\"`, `\"exp\"`, `\"pow\"`, `\"quad\"`, or `\"poly\"`.\n *\n * __Default value:__ `\"linear\"`\n */\n method?: 'linear' | 'log' | 'exp' | 'pow' | 'quad' | 'poly';\n\n /**\n * The polynomial order (number of coefficients) for the 'poly' method.\n *\n * __Default value:__ `3`\n */\n order?: number;\n\n /**\n * A [min, max] domain over the independent (x) field for the starting and ending points of the generated trend line.\n */\n extent?: [number, number];\n\n /**\n * A boolean flag indicating if the transform should return the regression model parameters (one object per group), rather than trend line points.\n * The resulting objects include a `coef` array of fitted coefficient values (starting with the intercept term and then including terms of increasing order)\n * and an `rSquared` value (indicating the total variance explained by the model).\n *\n * __Default value:__ `false`\n */\n params?: boolean;\n\n /**\n * The output field names for the smoothed points generated by the regression transform.\n *\n * __Default value:__ The field names of the input x and y values.\n */\n as?: [FieldName, FieldName];\n}\n\nexport function isRegression(t: Transform): t is RegressionTransform {\n return 'regression' in t;\n}\n\nexport interface LoessTransform {\n /**\n * The data field of the dependent variable to smooth.\n */\n loess: FieldName;\n\n /**\n * The data field of the independent variable to use a predictor.\n */\n on: FieldName;\n\n /**\n * The data fields to group by. If not specified, a single group containing all data objects will be used.\n */\n groupby?: FieldName[];\n\n /**\n * A bandwidth parameter in the range `[0, 1]` that determines the amount of smoothing.\n *\n * __Default value:__ `0.3`\n */\n bandwidth?: number;\n\n /**\n * The output field names for the smoothed points generated by the loess transform.\n *\n * __Default value:__ The field names of the input x and y values.\n */\n as?: [FieldName, FieldName];\n}\n\nexport function isLoess(t: Transform): t is LoessTransform {\n return 'loess' in t;\n}\n\nexport function isSample(t: Transform): t is SampleTransform {\n return 'sample' in t;\n}\n\nexport function isWindow(t: Transform): t is WindowTransform {\n return 'window' in t;\n}\n\nexport function isJoinAggregate(t: Transform): t is JoinAggregateTransform {\n return 'joinaggregate' in t;\n}\n\nexport function isFlatten(t: Transform): t is FlattenTransform {\n return 'flatten' in t;\n}\nexport function isCalculate(t: Transform): t is CalculateTransform {\n return 'calculate' in t;\n}\n\nexport function isBin(t: Transform): t is BinTransform {\n return 'bin' in t;\n}\n\nexport function isImpute(t: Transform): t is ImputeTransform {\n return 'impute' in t;\n}\n\nexport function isTimeUnit(t: Transform): t is TimeUnitTransform {\n return 'timeUnit' in t;\n}\n\nexport function isAggregate(t: Transform): t is AggregateTransform {\n return 'aggregate' in t;\n}\n\nexport function isStack(t: Transform): t is StackTransform {\n return 'stack' in t;\n}\n\nexport function isFold(t: Transform): t is FoldTransform {\n return 'fold' in t;\n}\n\nexport type Transform =\n | AggregateTransform\n | BinTransform\n | CalculateTransform\n | DensityTransform\n | FilterTransform\n | FlattenTransform\n | FoldTransform\n | ImputeTransform\n | JoinAggregateTransform\n | LoessTransform\n | LookupTransform\n | QuantileTransform\n | RegressionTransform\n | TimeUnitTransform\n | SampleTransform\n | StackTransform\n | WindowTransform\n | PivotTransform;\n\nexport function normalizeTransform(transform: Transform[]) {\n return transform.map(t => {\n if (isFilter(t)) {\n return {\n filter: normalizeLogicalComposition(t.filter, normalizePredicate)\n };\n }\n return t;\n });\n}\n","import {isArray} from 'vega';\nimport {BinParams, isBinParams} from '../bin';\nimport {ChannelDef, Field, isConditionalDef, isFieldDef, isScaleFieldDef} from '../channeldef';\nimport {LogicalComposition, normalizeLogicalComposition} from '../logical';\nimport {FacetedUnitSpec, GenericSpec, LayerSpec, RepeatSpec, UnitSpec} from '../spec';\nimport {SpecMapper} from '../spec/map';\nimport {isBin, isFilter, isLookup} from '../transform';\nimport {duplicate, entries, vals} from '../util';\nimport {NormalizerParams} from './base';\n\nexport class SelectionCompatibilityNormalizer extends SpecMapper<\n NormalizerParams,\n FacetedUnitSpec,\n LayerSpec,\n UnitSpec\n> {\n public map(\n spec: GenericSpec, LayerSpec, RepeatSpec, Field>,\n normParams: NormalizerParams\n ) {\n normParams.emptySelections ??= {};\n normParams.selectionPredicates ??= {};\n spec = normalizeTransforms(spec, normParams);\n return super.map(spec, normParams);\n }\n\n public mapLayerOrUnit(spec: FacetedUnitSpec | LayerSpec, normParams: NormalizerParams) {\n spec = normalizeTransforms(spec, normParams);\n\n if (spec.encoding) {\n const encoding = {};\n for (const [channel, enc] of entries(spec.encoding)) {\n encoding[channel] = normalizeChannelDef(enc, normParams);\n }\n\n spec = {...spec, encoding};\n }\n\n return super.mapLayerOrUnit(spec, normParams);\n }\n\n public mapUnit(spec: UnitSpec, normParams: NormalizerParams) {\n const {selection, ...rest} = spec as any;\n if (selection) {\n return {\n ...rest,\n params: entries(selection).map(([name, selDef]) => {\n const {init: value, bind, empty, ...select} = selDef as any;\n if (select.type === 'single') {\n select.type = 'point';\n select.toggle = false;\n } else if (select.type === 'multi') {\n select.type = 'point';\n }\n\n // Propagate emptiness forwards and backwards\n normParams.emptySelections[name] = empty !== 'none';\n for (const pred of vals(normParams.selectionPredicates[name] ?? {})) {\n pred.empty = empty !== 'none';\n }\n\n return {name, value, select, bind};\n })\n };\n }\n\n return spec;\n }\n}\n\nfunction normalizeTransforms(spec: any, normParams: NormalizerParams) {\n const {transform: tx, ...rest} = spec;\n if (tx) {\n const transform = tx.map((t: any) => {\n if (isFilter(t)) {\n return {filter: normalizePredicate(t, normParams)};\n } else if (isBin(t) && isBinParams(t.bin)) {\n return {\n ...t,\n bin: normalizeBinExtent(t.bin)\n };\n } else if (isLookup(t)) {\n const {selection: param, ...from} = t.from as any;\n return param\n ? {\n ...t,\n from: {param, ...from}\n }\n : t;\n }\n return t;\n });\n\n return {...rest, transform};\n }\n\n return spec;\n}\n\nfunction normalizeChannelDef(obj: any, normParams: NormalizerParams): ChannelDef {\n const enc = duplicate(obj);\n\n if (isFieldDef(enc) && isBinParams(enc.bin)) {\n enc.bin = normalizeBinExtent(enc.bin);\n }\n\n if (isScaleFieldDef(enc) && (enc.scale?.domain as any)?.selection) {\n const {selection: param, ...domain} = enc.scale.domain as any;\n enc.scale.domain = {...domain, ...(param ? {param} : {})};\n }\n\n if (isConditionalDef(enc)) {\n if (isArray(enc.condition)) {\n enc.condition = enc.condition.map((c: any) => {\n const {selection, param, test, ...cond} = c;\n return param ? c : {...cond, test: normalizePredicate(c, normParams)};\n });\n } else {\n const {selection, param, test, ...cond} = normalizeChannelDef(enc.condition, normParams) as any;\n enc.condition = param\n ? enc.condition\n : {\n ...cond,\n test: normalizePredicate(enc.condition, normParams)\n };\n }\n }\n\n return enc;\n}\n\nfunction normalizeBinExtent(bin: BinParams): BinParams {\n const ext = bin.extent as any;\n if (ext?.selection) {\n const {selection: param, ...rest} = ext;\n return {...bin, extent: {...rest, param}};\n }\n\n return bin;\n}\n\nfunction normalizePredicate(op: any, normParams: NormalizerParams) {\n // Normalize old compositions of selection names (e.g., selection: {and: [\"one\", \"two\"]})\n const normalizeSelectionComposition = (o: LogicalComposition) => {\n return normalizeLogicalComposition(o, param => {\n const empty = normParams.emptySelections[param] ?? true;\n const pred = {param, empty};\n normParams.selectionPredicates[param] ??= [];\n normParams.selectionPredicates[param].push(pred);\n return pred as any;\n });\n };\n\n return op.selection\n ? normalizeSelectionComposition(op.selection)\n : normalizeLogicalComposition(op.test || op.filter, o =>\n o.selection ? normalizeSelectionComposition(o.selection) : o\n );\n}\n","import {isArray, isString} from 'vega';\nimport {Field} from '../channeldef';\nimport {VariableParameter} from '../parameter';\nimport {isSelectionParameter, SelectionParameter} from '../selection';\nimport {\n BaseSpec,\n isUnitSpec,\n NormalizedLayerSpec,\n NormalizedSpec,\n NormalizedUnitSpec,\n TopLevel,\n UnitSpec\n} from '../spec';\nimport {SpecMapper} from '../spec/map';\nimport {NormalizerParams} from './base';\n\nexport class TopLevelSelectionsNormalizer extends SpecMapper {\n public map(spec: TopLevel, normParams: NormalizerParams): TopLevel {\n const selections = normParams.selections ?? [];\n if (spec.params && !isUnitSpec(spec)) {\n const params: VariableParameter[] = [];\n for (const param of spec.params) {\n if (isSelectionParameter(param)) {\n selections.push(param);\n } else {\n params.push(param);\n }\n }\n\n spec.params = params;\n }\n\n normParams.selections = selections;\n return super.map(spec, addSpecNameToParams(spec, normParams));\n }\n\n public mapUnit(spec: UnitSpec, normParams: NormalizerParams): NormalizedUnitSpec | NormalizedLayerSpec {\n const selections = normParams.selections;\n if (!selections || !selections.length) return spec as NormalizedUnitSpec;\n\n const path = (normParams.path ?? []).concat(spec.name);\n const params: SelectionParameter[] = [];\n\n for (const selection of selections) {\n // By default, apply selections to all unit views.\n if (!selection.views || !selection.views.length) {\n params.push(selection);\n } else {\n for (const view of selection.views) {\n // view is either a specific unit name, or a partial path through the spec tree.\n if (\n (isString(view) && (view === spec.name || path.indexOf(view) >= 0)) ||\n (isArray(view) &&\n view.map(v => path.indexOf(v)).every((v, i, arr) => v !== -1 && (i === 0 || v > arr[i - 1])))\n ) {\n params.push(selection);\n }\n }\n }\n }\n\n if (params.length) spec.params = params;\n return spec as NormalizedUnitSpec;\n }\n}\n\nfor (const method of ['mapFacet', 'mapRepeat', 'mapHConcat', 'mapVConcat', 'mapLayer']) {\n const proto = TopLevelSelectionsNormalizer.prototype[method];\n TopLevelSelectionsNormalizer.prototype[method] = function (spec: BaseSpec, params: NormalizerParams) {\n return proto.call(this, spec, addSpecNameToParams(spec, params));\n };\n}\n\nfunction addSpecNameToParams(spec: BaseSpec, params: NormalizerParams) {\n return spec.name\n ? {\n ...params,\n path: (params.path ?? []).concat(spec.name)\n }\n : params;\n}\n","import {SignalRef} from 'vega';\nimport {isString} from 'vega-util';\nimport {Field} from '../channeldef';\nimport {Config, initConfig} from '../config';\nimport * as log from '../log';\nimport {\n FacetedUnitSpec,\n isLayerSpec,\n isUnitSpec,\n LayoutSizeMixins,\n NonNormalizedSpec,\n NormalizedSpec,\n RepeatSpec,\n TopLevelSpec\n} from '../spec';\nimport {AutoSizeParams, AutosizeType, TopLevel} from '../spec/toplevel';\nimport {deepEqual} from '../util';\nimport {NormalizerParams} from './base';\nimport {CoreNormalizer} from './core';\nimport {SelectionCompatibilityNormalizer} from './selectioncompat';\nimport {TopLevelSelectionsNormalizer} from './toplevelselection';\n\nexport function normalize(\n spec: TopLevelSpec & LayoutSizeMixins,\n config?: Config\n): TopLevel & LayoutSizeMixins {\n if (config === undefined) {\n config = initConfig(spec.config);\n }\n\n const normalizedSpec = normalizeGenericSpec(spec, config);\n\n const {width, height} = spec;\n const autosize = normalizeAutoSize(normalizedSpec, {width, height, autosize: spec.autosize}, config);\n\n return {\n ...normalizedSpec,\n ...(autosize ? {autosize} : {})\n };\n}\n\nconst coreNormalizer = new CoreNormalizer();\nconst selectionCompatNormalizer = new SelectionCompatibilityNormalizer();\nconst topLevelSelectionNormalizer = new TopLevelSelectionsNormalizer();\n\n/**\n * Decompose extended unit specs into composition of pure unit specs.\n * And push top-level selection definitions down to unit specs.\n */\nfunction normalizeGenericSpec(\n spec: NonNormalizedSpec | FacetedUnitSpec | RepeatSpec,\n config: Config = {}\n) {\n const normParams = {config};\n return topLevelSelectionNormalizer.map(\n coreNormalizer.map(selectionCompatNormalizer.map(spec, normParams), normParams),\n normParams\n );\n}\n\nfunction _normalizeAutoSize(autosize: AutosizeType | AutoSizeParams) {\n return isString(autosize) ? {type: autosize} : autosize ?? {};\n}\n\n/**\n * Normalize autosize and deal with width or height == \"container\".\n */\nexport function normalizeAutoSize(\n spec: TopLevel,\n sizeInfo: {autosize: AutosizeType | AutoSizeParams} & LayoutSizeMixins,\n config?: Config\n) {\n let {width, height} = sizeInfo;\n\n const isFitCompatible = isUnitSpec(spec) || isLayerSpec(spec);\n const autosizeDefault: AutoSizeParams = {};\n\n if (!isFitCompatible) {\n // If spec is not compatible with autosize == \"fit\", discard width/height == container\n if (width == 'container') {\n log.warn(log.message.containerSizeNonSingle('width'));\n width = undefined;\n }\n if (height == 'container') {\n log.warn(log.message.containerSizeNonSingle('height'));\n height = undefined;\n }\n } else {\n // Default autosize parameters to fit when width/height is \"container\"\n if (width == 'container' && height == 'container') {\n autosizeDefault.type = 'fit';\n autosizeDefault.contains = 'padding';\n } else if (width == 'container') {\n autosizeDefault.type = 'fit-x';\n autosizeDefault.contains = 'padding';\n } else if (height == 'container') {\n autosizeDefault.type = 'fit-y';\n autosizeDefault.contains = 'padding';\n }\n }\n\n const autosize: AutoSizeParams = {\n type: 'pad',\n ...autosizeDefault,\n ...(config ? _normalizeAutoSize(config.autosize) : {}),\n ..._normalizeAutoSize(spec.autosize)\n };\n\n if (autosize.type === 'fit' && !isFitCompatible) {\n log.warn(log.message.FIT_NON_SINGLE);\n autosize.type = 'pad';\n }\n\n if (width == 'container' && !(autosize.type == 'fit' || autosize.type == 'fit-x')) {\n log.warn(log.message.containerSizeNotCompatibleWithAutosize('width'));\n }\n if (height == 'container' && !(autosize.type == 'fit' || autosize.type == 'fit-y')) {\n log.warn(log.message.containerSizeNotCompatibleWithAutosize('height'));\n }\n\n // Delete autosize property if it's Vega's default\n if (deepEqual(autosize, {type: 'pad'})) {\n return undefined;\n }\n\n return autosize;\n}\n\nexport type {NormalizerParams};\n","import * as log from '../log';\nimport {deepEqual, duplicate, getFirstDefined, keys} from '../util';\n\n/**\n * Generic class for storing properties that are explicitly specified\n * and implicitly determined by the compiler.\n * This is important for scale/axis/legend merging as\n * we want to prioritize properties that users explicitly specified.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport class Split {\n constructor(public readonly explicit: Partial = {}, public readonly implicit: Partial = {}) {}\n\n public clone() {\n return new Split(duplicate(this.explicit), duplicate(this.implicit));\n }\n\n public combine(): Partial {\n return {\n ...this.explicit, // Explicit properties comes first\n ...this.implicit\n };\n }\n\n public get(key: K): T[K] {\n // Explicit has higher precedence\n return getFirstDefined(this.explicit[key], this.implicit[key]);\n }\n\n public getWithExplicit(key: K): Explicit {\n // Explicit has higher precedence\n if (this.explicit[key] !== undefined) {\n return {explicit: true, value: this.explicit[key]};\n } else if (this.implicit[key] !== undefined) {\n return {explicit: false, value: this.implicit[key]};\n }\n return {explicit: false, value: undefined};\n }\n\n public setWithExplicit(key: K, {value, explicit}: Explicit) {\n if (value !== undefined) {\n this.set(key, value, explicit);\n }\n }\n\n public set(key: K, value: T[K], explicit: boolean) {\n delete this[explicit ? 'implicit' : 'explicit'][key];\n this[explicit ? 'explicit' : 'implicit'][key] = value;\n return this;\n }\n\n public copyKeyFromSplit(key: keyof T, {explicit, implicit}: Split) {\n // Explicit has higher precedence\n if (explicit[key] !== undefined) {\n this.set(key, explicit[key], true);\n } else if (implicit[key] !== undefined) {\n this.set(key, implicit[key], false);\n }\n }\n public copyKeyFromObject(key: keyof T, s: Partial) {\n // Explicit has higher precedence\n if (s[key] !== undefined) {\n this.set(key, s[key], true);\n }\n }\n\n /**\n * Merge split object into this split object. Properties from the other split\n * overwrite properties from this split.\n */\n public copyAll(other: Split) {\n for (const key of keys(other.combine())) {\n const val = other.getWithExplicit(key);\n this.setWithExplicit(key, val);\n }\n }\n}\n\nexport interface Explicit {\n explicit: boolean;\n value: T;\n}\n\nexport function makeExplicit(value: T): Explicit {\n return {\n explicit: true,\n value\n };\n}\n\nexport function makeImplicit(value: T): Explicit {\n return {\n explicit: false,\n value\n };\n}\n\nexport type SplitParentProperty = 'scale' | 'axis' | 'legend' | '';\n\nexport function tieBreakByComparing(compare: (v1: T, v2: T) => number) {\n return (\n v1: Explicit,\n v2: Explicit,\n property: keyof S | never,\n propertyOf: SplitParentProperty\n ): Explicit => {\n const diff = compare(v1.value, v2.value);\n if (diff > 0) {\n return v1;\n } else if (diff < 0) {\n return v2;\n }\n return defaultTieBreaker(v1, v2, property, propertyOf);\n };\n}\n\nexport function defaultTieBreaker(\n v1: Explicit,\n v2: Explicit,\n property: keyof S,\n propertyOf: SplitParentProperty\n) {\n if (v1.explicit && v2.explicit) {\n log.warn(log.message.mergeConflictingProperty(property, propertyOf, v1.value, v2.value));\n }\n // If equal score, prefer v1.\n return v1;\n}\n\nexport function mergeValuesWithExplicit(\n v1: Explicit,\n v2: Explicit,\n property: keyof S,\n propertyOf: SplitParentProperty,\n tieBreaker: (\n v1: Explicit,\n v2: Explicit,\n property: keyof S,\n propertyOf: string\n ) => Explicit = defaultTieBreaker\n) {\n if (v1 === undefined || v1.value === undefined) {\n // For first run\n return v2;\n }\n\n if (v1.explicit && !v2.explicit) {\n return v1;\n } else if (v2.explicit && !v1.explicit) {\n return v2;\n } else if (deepEqual(v1.value, v2.value)) {\n return v1;\n } else {\n return tieBreaker(v1, v2, property, propertyOf);\n }\n}\n","import {Parse} from '../../data';\nimport {Dict} from '../../util';\nimport {Split} from '../split';\nimport {OutputNode} from './dataflow';\nimport {FacetNode} from './facet';\nimport {SourceNode} from './source';\n\nexport interface DataComponent {\n /**\n * A list of unique sources.\n */\n sources: SourceNode[];\n\n /**\n * Registry of output nodes.\n */\n outputNodes: Dict;\n\n /**\n * How often is an output node used. If it is not used, we don't need to\n * instantiate it in the assemble step.\n */\n outputNodeRefCounts: Dict;\n\n /**\n * The output node before aggregation.\n */\n raw?: OutputNode;\n\n /**\n * The main output node.\n */\n main?: OutputNode;\n\n /**\n * For facets, we store the reference to the root node.\n */\n facetRoot?: FacetNode;\n\n /**\n * True if the data for this model is faceted.\n * A dataset is faceted if a parent model is a facet and no new dataset is\n * defined (which would make the data unfaceted again).\n */\n isFaceted: boolean;\n\n /**\n * Parse properties passed down from ancestors. Helps us to keep track of what has been parsed or is derived.\n */\n ancestorParse?: AncestorParse;\n}\n\n/**\n * Class to track interesting properties (see https://15721.courses.cs.cmu.edu/spring2016/papers/graefe-ieee1995.pdf)\n * about how fields have been parsed or whether they have been derived in a transform. We use this to not parse the\n * same field again (or differently).\n */\nexport class AncestorParse extends Split {\n constructor(\n public readonly explicit: Partial = {},\n public readonly implicit: Partial = {},\n public parseNothing = false\n ) {\n super(explicit, implicit);\n }\n\n public clone(): AncestorParse {\n const clone = super.clone() as AncestorParse;\n clone.parseNothing = this.parseNothing;\n return clone;\n }\n}\n","/*\n * Constants and utilities for data.\n */\nimport {Vector2} from 'vega';\nimport {FieldName} from './channeldef';\nimport {VgData} from './vega.schema';\n\nexport type ParseValue = null | string | 'string' | 'boolean' | 'date' | 'number';\n\nexport interface Parse {\n [field: string]: ParseValue;\n}\n\nexport interface DataFormatBase {\n /**\n * If set to `null`, disable type inference based on the spec and only use type inference based on the data.\n * Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)).\n * For example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n *\n * For `\"date\"`, we parse data based using JavaScript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\n * For Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)\n */\n parse?: Parse | null;\n\n /**\n * Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n *\n * __Default value:__ The default format type is determined by the extension of the file URL.\n * If no extension is detected, `\"json\"` will be used by default.\n */\n type?: 'csv' | 'tsv' | 'dsv' | 'json' | 'topojson';\n}\n\nexport interface CsvDataFormat extends DataFormatBase {\n type?: 'csv' | 'tsv';\n}\n\nexport interface DsvDataFormat extends DataFormatBase {\n type?: 'dsv';\n\n /**\n * The delimiter between records. The delimiter must be a single character (i.e., a single 16-bit code unit); so, ASCII delimiters are fine, but emoji delimiters are not.\n *\n * @minLength 1\n * @maxLength 1\n */\n delimiter: string;\n}\n\nexport interface JsonDataFormat extends DataFormatBase {\n type?: 'json';\n /**\n * The JSON property containing the desired data.\n * This parameter can be used when the loaded JSON file may have surrounding structure or meta-data.\n * For example `\"property\": \"values.features\"` is equivalent to retrieving `json.values.features`\n * from the loaded JSON object.\n */\n property?: string;\n}\n\nexport interface TopoDataFormat extends DataFormatBase {\n type?: 'topojson';\n /**\n * The name of the TopoJSON object set to convert to a GeoJSON feature collection.\n * For example, in a map of the world, there may be an object set named `\"countries\"`.\n * Using the feature property, we can extract this set and generate a GeoJSON feature object for each country.\n */\n feature?: string;\n /**\n * The name of the TopoJSON object set to convert to mesh.\n * Similar to the `feature` option, `mesh` extracts a named TopoJSON object set.\n * Unlike the `feature` option, the corresponding geo data is returned as a single, unified mesh instance, not as individual GeoJSON features.\n * Extracting a mesh is useful for more efficiently drawing borders or other geographic elements that you do not need to associate with specific regions such as individual countries, states or counties.\n */\n mesh?: string;\n}\n\nexport type DataFormat = CsvDataFormat | DsvDataFormat | JsonDataFormat | TopoDataFormat;\n\nexport type DataFormatType = 'json' | 'csv' | 'tsv' | 'dsv' | 'topojson';\n\nexport type DataSource = UrlData | InlineData | NamedData;\n\nexport type Data = DataSource | Generator;\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport type InlineDataset = number[] | string[] | boolean[] | object[] | string | object;\n\nexport interface DataBase {\n /**\n * An object that specifies the format for parsing the data.\n */\n format?: DataFormat;\n /**\n * Provide a placeholder name and bind data at runtime.\n */\n name?: string;\n}\n\nexport interface UrlData extends DataBase {\n /**\n * An URL from which to load the data set. Use the `format.type` property\n * to ensure the loaded data is correctly parsed.\n */\n url: string;\n}\n\nexport interface InlineData extends DataBase {\n /**\n * The full data set, included inline. This can be an array of objects or primitive values, an object, or a string.\n * Arrays of primitive values are ingested as objects with a `data` property. Strings are parsed according to the specified format type.\n */\n values: InlineDataset;\n}\n\nexport interface NamedData extends DataBase {\n /**\n * Provide a placeholder name and bind data at runtime.\n */\n name: string;\n}\n\nexport function isUrlData(data: Partial | Partial): data is UrlData {\n return 'url' in data;\n}\n\nexport function isInlineData(data: Partial | Partial): data is InlineData {\n return 'values' in data;\n}\n\nexport function isNamedData(data: Partial | Partial): data is NamedData {\n return 'name' in data && !isUrlData(data) && !isInlineData(data) && !isGenerator(data);\n}\n\nexport function isGenerator(data: Partial | Partial): data is Generator {\n return data && (isSequenceGenerator(data) || isSphereGenerator(data) || isGraticuleGenerator(data));\n}\n\nexport function isSequenceGenerator(data: Partial | Partial): data is SequenceGenerator {\n return 'sequence' in data;\n}\n\nexport function isSphereGenerator(data: Partial | Partial): data is SphereGenerator {\n return 'sphere' in data;\n}\n\nexport function isGraticuleGenerator(data: Partial | Partial): data is GraticuleGenerator {\n return 'graticule' in data;\n}\n\nexport enum DataSourceType {\n Raw,\n Main,\n Row,\n Column,\n Lookup\n}\n\nexport type Generator = SequenceGenerator | SphereGenerator | GraticuleGenerator;\n\nexport interface GeneratorBase {\n /**\n * Provide a placeholder name and bind data at runtime.\n */\n name?: string;\n}\n\nexport interface SequenceGenerator extends GeneratorBase {\n /**\n * Generate a sequence of numbers.\n */\n sequence: SequenceParams;\n}\n\nexport interface SequenceParams {\n /**\n * The starting value of the sequence (inclusive).\n */\n start: number;\n /**\n * The ending value of the sequence (exclusive).\n */\n stop: number;\n /**\n * The step value between sequence entries.\n *\n * __Default value:__ `1`\n */\n step?: number;\n\n /**\n * The name of the generated sequence field.\n *\n * __Default value:__ `\"data\"`\n */\n as?: FieldName;\n}\n\nexport interface SphereGenerator extends GeneratorBase {\n /**\n * Generate sphere GeoJSON data for the full globe.\n */\n // eslint-disable-next-line @typescript-eslint/ban-types\n sphere: true | {};\n}\n\nexport interface GraticuleGenerator extends GeneratorBase {\n /**\n * Generate graticule GeoJSON data for geographic reference lines.\n */\n graticule: true | GraticuleParams;\n}\n\nexport interface GraticuleParams {\n /**\n * The major extent of the graticule as a two-element array of coordinates.\n */\n extentMajor?: Vector2>;\n\n /**\n * The minor extent of the graticule as a two-element array of coordinates.\n */\n extentMinor?: Vector2>;\n\n /**\n * Sets both the major and minor extents to the same values.\n */\n extent?: Vector2>;\n\n /**\n * The major step angles of the graticule.\n *\n *\n * __Default value:__ `[90, 360]`\n */\n stepMajor?: Vector2;\n\n /**\n * The minor step angles of the graticule.\n *\n * __Default value:__ `[10, 10]`\n */\n stepMinor?: Vector2;\n\n /**\n * Sets both the major and minor step angles to the same values.\n */\n step?: Vector2;\n\n /**\n * The precision of the graticule in degrees.\n *\n * __Default value:__ `2.5`\n */\n precision?: number;\n}\n","const VIEW = 'view',\n LBRACK = '[',\n RBRACK = ']',\n LBRACE = '{',\n RBRACE = '}',\n COLON = ':',\n COMMA = ',',\n NAME = '@',\n GT = '>',\n ILLEGAL = /[[\\]{}]/,\n DEFAULT_MARKS = {\n '*': 1,\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n};\nlet DEFAULT_SOURCE, MARKS;\n/**\n * Parse an event selector string.\n * Returns an array of event stream definitions.\n */\n\nfunction eventSelector (selector, source, marks) {\n DEFAULT_SOURCE = source || VIEW;\n MARKS = marks || DEFAULT_MARKS;\n return parseMerge(selector.trim()).map(parseSelector);\n}\n\nfunction isMarkType(type) {\n return MARKS[type];\n}\n\nfunction find(s, i, endChar, pushChar, popChar) {\n const n = s.length;\n let count = 0,\n c;\n\n for (; i < n; ++i) {\n c = s[i];\n if (!count && c === endChar) return i;else if (popChar && popChar.indexOf(c) >= 0) --count;else if (pushChar && pushChar.indexOf(c) >= 0) ++count;\n }\n\n return i;\n}\n\nfunction parseMerge(s) {\n const output = [],\n n = s.length;\n let start = 0,\n i = 0;\n\n while (i < n) {\n i = find(s, i, COMMA, LBRACK + LBRACE, RBRACK + RBRACE);\n output.push(s.substring(start, i).trim());\n start = ++i;\n }\n\n if (output.length === 0) {\n throw 'Empty event selector: ' + s;\n }\n\n return output;\n}\n\nfunction parseSelector(s) {\n return s[0] === '[' ? parseBetween(s) : parseStream(s);\n}\n\nfunction parseBetween(s) {\n const n = s.length;\n let i = 1,\n b;\n i = find(s, i, RBRACK, LBRACK, RBRACK);\n\n if (i === n) {\n throw 'Empty between selector: ' + s;\n }\n\n b = parseMerge(s.substring(1, i));\n\n if (b.length !== 2) {\n throw 'Between selector must have two elements: ' + s;\n }\n\n s = s.slice(i + 1).trim();\n\n if (s[0] !== GT) {\n throw 'Expected \\'>\\' after between selector: ' + s;\n }\n\n b = b.map(parseSelector);\n const stream = parseSelector(s.slice(1).trim());\n\n if (stream.between) {\n return {\n between: b,\n stream: stream\n };\n } else {\n stream.between = b;\n }\n\n return stream;\n}\n\nfunction parseStream(s) {\n const stream = {\n source: DEFAULT_SOURCE\n },\n source = [];\n let throttle = [0, 0],\n markname = 0,\n start = 0,\n n = s.length,\n i = 0,\n j,\n filter; // extract throttle from end\n\n if (s[n - 1] === RBRACE) {\n i = s.lastIndexOf(LBRACE);\n\n if (i >= 0) {\n try {\n throttle = parseThrottle(s.substring(i + 1, n - 1));\n } catch (e) {\n throw 'Invalid throttle specification: ' + s;\n }\n\n s = s.slice(0, i).trim();\n n = s.length;\n } else throw 'Unmatched right brace: ' + s;\n\n i = 0;\n }\n\n if (!n) throw s; // set name flag based on first char\n\n if (s[0] === NAME) markname = ++i; // extract first part of multi-part stream selector\n\n j = find(s, i, COLON);\n\n if (j < n) {\n source.push(s.substring(start, j).trim());\n start = i = ++j;\n } // extract remaining part of stream selector\n\n\n i = find(s, i, LBRACK);\n\n if (i === n) {\n source.push(s.substring(start, n).trim());\n } else {\n source.push(s.substring(start, i).trim());\n filter = [];\n start = ++i;\n if (start === n) throw 'Unmatched left bracket: ' + s;\n } // extract filters\n\n\n while (i < n) {\n i = find(s, i, RBRACK);\n if (i === n) throw 'Unmatched left bracket: ' + s;\n filter.push(s.substring(start, i).trim());\n if (i < n - 1 && s[++i] !== LBRACK) throw 'Expected left bracket: ' + s;\n start = ++i;\n } // marshall event stream specification\n\n\n if (!(n = source.length) || ILLEGAL.test(source[n - 1])) {\n throw 'Invalid event selector: ' + s;\n }\n\n if (n > 1) {\n stream.type = source[1];\n\n if (markname) {\n stream.markname = source[0].slice(1);\n } else if (isMarkType(source[0])) {\n stream.marktype = source[0];\n } else {\n stream.source = source[0];\n }\n } else {\n stream.type = source[0];\n }\n\n if (stream.type.slice(-1) === '!') {\n stream.consume = true;\n stream.type = stream.type.slice(0, -1);\n }\n\n if (filter != null) stream.filter = filter;\n if (throttle[0]) stream.throttle = throttle[0];\n if (throttle[1]) stream.debounce = throttle[1];\n return stream;\n}\n\nfunction parseThrottle(s) {\n const a = s.split(COMMA);\n if (!s.length || a.length > 2) throw s;\n return a.map(_ => {\n const x = +_;\n if (x !== x) throw s;\n return x;\n });\n}\n\nexport { eventSelector as selector };\n","import {Signal, SignalRef} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {identity, isArray, stringValue} from 'vega-util';\nimport {MODIFY, STORE, unitName, VL_SELECTION_RESOLVE, TUPLE, selectionCompilers} from '.';\nimport {dateTimeToExpr, isDateTime, dateTimeToTimestamp} from '../../datetime';\nimport {hasContinuousDomain} from '../../scale';\nimport {SelectionInit, SelectionInitInterval, ParameterExtent} from '../../selection';\nimport {keys, stringify, vals} from '../../util';\nimport {VgData, VgDomain} from '../../vega.schema';\nimport {FacetModel} from '../facet';\nimport {LayerModel} from '../layer';\nimport {isUnitModel, Model} from '../model';\nimport {ScaleComponent} from '../scale/component';\nimport {UnitModel} from '../unit';\nimport {parseSelectionExtent} from './parse';\n\nexport function assembleInit(\n init: readonly (SelectionInit | readonly SelectionInit[] | SelectionInitInterval)[] | SelectionInit,\n isExpr = true,\n wrap: (str: string | number) => string | number = identity\n): any {\n if (isArray(init)) {\n const assembled = init.map(v => assembleInit(v, isExpr, wrap));\n return isExpr ? `[${assembled.join(', ')}]` : assembled;\n } else if (isDateTime(init)) {\n if (isExpr) {\n return wrap(dateTimeToExpr(init));\n } else {\n return wrap(dateTimeToTimestamp(init));\n }\n }\n return isExpr ? wrap(stringify(init)) : init;\n}\n\nexport function assembleUnitSelectionSignals(model: UnitModel, signals: Signal[]) {\n for (const selCmpt of vals(model.component.selection ?? {})) {\n const name = selCmpt.name;\n let modifyExpr = `${name}${TUPLE}, ${selCmpt.resolve === 'global' ? 'true' : `{unit: ${unitName(model)}}`}`;\n\n for (const c of selectionCompilers) {\n if (!c.defined(selCmpt)) continue;\n if (c.signals) signals = c.signals(model, selCmpt, signals);\n if (c.modifyExpr) modifyExpr = c.modifyExpr(model, selCmpt, modifyExpr);\n }\n\n signals.push({\n name: name + MODIFY,\n on: [\n {\n events: {signal: selCmpt.name + TUPLE},\n update: `modify(${stringValue(selCmpt.name + STORE)}, ${modifyExpr})`\n }\n ]\n });\n }\n\n return cleanupEmptyOnArray(signals);\n}\n\nexport function assembleFacetSignals(model: FacetModel, signals: Signal[]) {\n if (model.component.selection && keys(model.component.selection).length) {\n const name = stringValue(model.getName('cell'));\n signals.unshift({\n name: 'facet',\n value: {},\n on: [\n {\n events: parseSelector('mousemove', 'scope'),\n update: `isTuple(facet) ? facet : group(${name}).datum`\n }\n ]\n });\n }\n\n return cleanupEmptyOnArray(signals);\n}\n\nexport function assembleTopLevelSignals(model: UnitModel, signals: Signal[]) {\n let hasSelections = false;\n for (const selCmpt of vals(model.component.selection ?? {})) {\n const name = selCmpt.name;\n const store = stringValue(name + STORE);\n const hasSg = signals.filter(s => s.name === name);\n if (hasSg.length === 0) {\n const resolve = selCmpt.resolve === 'global' ? 'union' : selCmpt.resolve;\n const isPoint = selCmpt.type === 'point' ? ', true, true)' : ')';\n signals.push({\n name: selCmpt.name,\n update: `${VL_SELECTION_RESOLVE}(${store}, ${stringValue(resolve)}${isPoint}`\n });\n }\n hasSelections = true;\n\n for (const c of selectionCompilers) {\n if (c.defined(selCmpt) && c.topLevelSignals) {\n signals = c.topLevelSignals(model, selCmpt, signals);\n }\n }\n }\n\n if (hasSelections) {\n const hasUnit = signals.filter(s => s.name === 'unit');\n if (hasUnit.length === 0) {\n signals.unshift({\n name: 'unit',\n value: {},\n on: [{events: 'mousemove', update: 'isTuple(group()) ? group() : unit'}]\n });\n }\n }\n\n return cleanupEmptyOnArray(signals);\n}\n\nexport function assembleUnitSelectionData(model: UnitModel, data: readonly VgData[]): VgData[] {\n const dataCopy = [...data];\n for (const selCmpt of vals(model.component.selection ?? {})) {\n const init: VgData = {name: selCmpt.name + STORE};\n if (selCmpt.init) {\n const fields = selCmpt.project.items.map(proj => {\n const {signals, ...rest} = proj;\n return rest;\n });\n\n init.values = selCmpt.init.map(i => ({\n unit: unitName(model, {escape: false}),\n fields,\n values: assembleInit(i, false)\n }));\n }\n const contains = dataCopy.filter(d => d.name === selCmpt.name + STORE);\n if (!contains.length) {\n dataCopy.push(init);\n }\n }\n\n return dataCopy;\n}\n\nexport function assembleUnitSelectionMarks(model: UnitModel, marks: any[]): any[] {\n for (const selCmpt of vals(model.component.selection ?? {})) {\n for (const c of selectionCompilers) {\n if (c.defined(selCmpt) && c.marks) {\n marks = c.marks(model, selCmpt, marks);\n }\n }\n }\n\n return marks;\n}\n\nexport function assembleLayerSelectionMarks(model: LayerModel, marks: any[]): any[] {\n for (const child of model.children) {\n if (isUnitModel(child)) {\n marks = assembleUnitSelectionMarks(child, marks);\n }\n }\n\n return marks;\n}\n\nexport function assembleSelectionScaleDomain(\n model: Model,\n extent: ParameterExtent,\n scaleCmpt: ScaleComponent,\n domain: VgDomain\n): SignalRef {\n const parsedExtent = parseSelectionExtent(model, extent.param, extent);\n\n return {\n signal:\n hasContinuousDomain(scaleCmpt.get('type')) && isArray(domain) && domain[0] > domain[1]\n ? `isValid(${parsedExtent}) && reverse(${parsedExtent})`\n : parsedExtent\n };\n}\n\nfunction cleanupEmptyOnArray(signals: Signal[]) {\n return signals.map(s => {\n if (s.on && !s.on.length) delete s.on;\n return s;\n });\n}\n","import {DataSourceType} from '../../data';\nimport * as log from '../../log';\nimport {Dict, uniqueId} from '../../util';\n\n/**\n * A node in the dataflow tree.\n */\nexport abstract class DataFlowNode {\n private _children: DataFlowNode[] = [];\n\n private _parent: DataFlowNode = null;\n\n protected _hash: string | number;\n\n constructor(parent: DataFlowNode, public readonly debugName?: string) {\n if (parent) {\n this.parent = parent;\n }\n }\n\n /**\n * Clone this node with a deep copy but don't clone links to children or parents.\n */\n public clone(): DataFlowNode {\n throw new Error('Cannot clone node');\n }\n\n /**\n * Return a hash of the node.\n */\n public abstract hash(): string | number;\n\n /**\n * Set of fields that this node depends on.\n */\n public abstract dependentFields(): Set;\n\n /**\n * Set of fields that are being created by this node.\n */\n public abstract producedFields(): Set;\n\n get parent() {\n return this._parent;\n }\n\n /**\n * Set the parent of the node and also add this node to the parent's children.\n */\n set parent(parent: DataFlowNode) {\n this._parent = parent;\n if (parent) {\n parent.addChild(this);\n }\n }\n\n get children() {\n return this._children;\n }\n\n public numChildren() {\n return this._children.length;\n }\n\n public addChild(child: DataFlowNode, loc?: number) {\n // do not add the same child twice\n if (this._children.includes(child)) {\n log.warn(log.message.ADD_SAME_CHILD_TWICE);\n return;\n }\n\n if (loc !== undefined) {\n this._children.splice(loc, 0, child);\n } else {\n this._children.push(child);\n }\n }\n\n public removeChild(oldChild: DataFlowNode) {\n const loc = this._children.indexOf(oldChild);\n this._children.splice(loc, 1);\n return loc;\n }\n\n /**\n * Remove node from the dataflow.\n */\n public remove() {\n let loc = this._parent.removeChild(this);\n for (const child of this._children) {\n // do not use the set method because we want to insert at a particular location\n child._parent = this._parent;\n this._parent.addChild(child, loc++);\n }\n }\n\n /**\n * Insert another node as a parent of this node.\n */\n public insertAsParentOf(other: DataFlowNode) {\n const parent = other.parent;\n parent.removeChild(this);\n this.parent = parent;\n other.parent = this;\n }\n\n public swapWithParent() {\n const parent = this._parent;\n const newParent = parent.parent;\n\n // reconnect the children\n for (const child of this._children) {\n child.parent = parent;\n }\n\n // remove old links\n this._children = []; // equivalent to removing every child link one by one\n parent.removeChild(this);\n parent.parent.removeChild(parent);\n\n // swap two nodes\n this.parent = newParent;\n parent.parent = this;\n }\n}\n\nexport class OutputNode extends DataFlowNode {\n private _source: string;\n\n private _name: string;\n\n public clone(): this {\n const cloneObj = new (this.constructor as any)();\n cloneObj.debugName = `clone_${this.debugName}`;\n cloneObj._source = this._source;\n cloneObj._name = `clone_${this._name}`;\n cloneObj.type = this.type;\n cloneObj.refCounts = this.refCounts;\n cloneObj.refCounts[cloneObj._name] = 0;\n return cloneObj;\n }\n\n /**\n * @param source The name of the source. Will change in assemble.\n * @param type The type of the output node.\n * @param refCounts A global ref counter map.\n */\n constructor(\n parent: DataFlowNode,\n source: string,\n public readonly type: DataSourceType,\n private readonly refCounts: Dict\n ) {\n super(parent, source);\n\n this._source = this._name = source;\n\n if (this.refCounts && !(this._name in this.refCounts)) {\n this.refCounts[this._name] = 0;\n }\n }\n\n public dependentFields() {\n return new Set();\n }\n\n public producedFields() {\n return new Set();\n }\n\n public hash() {\n if (this._hash === undefined) {\n this._hash = `Output ${uniqueId()}`;\n }\n return this._hash;\n }\n\n /**\n * Request the datasource name and increase the ref counter.\n *\n * During the parsing phase, this will return the simple name such as 'main' or 'raw'.\n * It is crucial to request the name from an output node to mark it as a required node.\n * If nobody ever requests the name, this datasource will not be instantiated in the assemble phase.\n *\n * In the assemble phase, this will return the correct name.\n */\n public getSource() {\n this.refCounts[this._name]++;\n return this._source;\n }\n\n public isRequired(): boolean {\n return !!this.refCounts[this._name];\n }\n\n public setSource(source: string) {\n this._source = source;\n }\n}\n","import {TimeUnitTransform as VgTimeUnitTransform} from 'vega';\nimport {vgField} from '../../channeldef';\nimport {getTimeUnitParts, normalizeTimeUnit} from '../../timeunit';\nimport {TimeUnitTransform} from '../../transform';\nimport {Dict, duplicate, entries, hash, isEmpty, replacePathInField, vals} from '../../util';\nimport {ModelWithField} from '../model';\nimport {DataFlowNode} from './dataflow';\n\nexport type TimeUnitComponent = TimeUnitTransform;\n\nexport class TimeUnitNode extends DataFlowNode {\n public clone() {\n return new TimeUnitNode(null, duplicate(this.formula));\n }\n\n constructor(parent: DataFlowNode, private formula: Dict) {\n super(parent);\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: ModelWithField) {\n const formula = model.reduceFieldDef((timeUnitComponent: TimeUnitComponent, fieldDef) => {\n const {field, timeUnit} = fieldDef;\n\n if (timeUnit) {\n const as = vgField(fieldDef, {forAs: true});\n timeUnitComponent[\n hash({\n as,\n field,\n timeUnit\n })\n ] = {\n as,\n field,\n timeUnit\n };\n }\n return timeUnitComponent;\n }, {} as Dict);\n\n if (isEmpty(formula)) {\n return null;\n }\n\n return new TimeUnitNode(parent, formula);\n }\n\n public static makeFromTransform(parent: DataFlowNode, t: TimeUnitTransform) {\n const {timeUnit, ...other} = {...t};\n\n const normalizedTimeUnit = normalizeTimeUnit(timeUnit);\n\n const component = {\n ...other,\n timeUnit: normalizedTimeUnit\n };\n\n return new TimeUnitNode(parent, {\n [hash(component)]: component\n });\n }\n\n /**\n * Merge together TimeUnitNodes assigning the children of `other` to `this`\n * and removing `other`.\n */\n public merge(other: TimeUnitNode) {\n this.formula = {...this.formula};\n\n // if the same hash happen twice, merge\n for (const key in other.formula) {\n if (!this.formula[key]) {\n // copy if it's not a duplicate\n this.formula[key] = other.formula[key];\n }\n }\n\n for (const child of other.children) {\n other.removeChild(child);\n child.parent = this;\n }\n\n other.remove();\n }\n\n /**\n * Remove time units coming from the other node.\n */\n public removeFormulas(fields: Set) {\n const newFormula = {};\n\n for (const [key, timeUnit] of entries(this.formula)) {\n if (!fields.has(timeUnit.as)) {\n newFormula[key] = timeUnit;\n }\n }\n\n this.formula = newFormula;\n }\n\n public producedFields() {\n return new Set(vals(this.formula).map(f => f.as));\n }\n\n public dependentFields() {\n return new Set(vals(this.formula).map(f => f.field));\n }\n\n public hash() {\n return `TimeUnit ${hash(this.formula)}`;\n }\n\n public assemble() {\n const transforms: VgTimeUnitTransform[] = [];\n\n for (const f of vals(this.formula)) {\n const {field, as, timeUnit} = f;\n const {unit, utc, ...params} = normalizeTimeUnit(timeUnit);\n\n transforms.push({\n field: replacePathInField(field),\n type: 'timeunit',\n ...(unit ? {units: getTimeUnitParts(unit)} : {}),\n ...(utc ? {timezone: 'utc'} : {}),\n ...params,\n as: [as, `${as}_end`]\n });\n }\n\n return transforms;\n }\n}\n","import {array, isObject} from 'vega-util';\nimport {isSingleDefUnitChannel, ScaleChannel, SingleDefUnitChannel} from '../../channel';\nimport * as log from '../../log';\nimport {hasContinuousDomain} from '../../scale';\nimport {PointSelectionConfig, SelectionInitIntervalMapping, SelectionInitMapping} from '../../selection';\nimport {Dict, hash, keys, replacePathInField, varName, isEmpty} from '../../util';\nimport {TimeUnitComponent, TimeUnitNode} from '../data/timeunit';\nimport {SelectionCompiler} from '.';\nexport const TUPLE_FIELDS = '_tuple_fields';\n\n/**\n * Whether the selection tuples hold enumerated or ranged values for a field.\n */\nexport type TupleStoreType =\n // enumerated\n | 'E'\n // ranged, exclusive, left-right inclusive\n | 'R'\n // ranged, left-inclusive, right-exclusive\n | 'R-RE';\n\nexport interface SelectionProjection {\n type: TupleStoreType;\n field: string;\n channel?: SingleDefUnitChannel;\n signals?: {data?: string; visual?: string};\n hasLegend?: boolean;\n}\n\nexport class SelectionProjectionComponent {\n public hasChannel: Partial>;\n public hasField: Record;\n public timeUnit?: TimeUnitNode;\n public items: SelectionProjection[];\n\n constructor(...items: SelectionProjection[]) {\n this.items = items;\n this.hasChannel = {};\n this.hasField = {};\n }\n}\n\nconst project: SelectionCompiler = {\n defined: () => {\n return true; // This transform handles its own defaults, so always run parse.\n },\n\n parse: (model, selCmpt, selDef) => {\n const name = selCmpt.name;\n const proj = (selCmpt.project ??= new SelectionProjectionComponent());\n const parsed: Dict = {};\n const timeUnits: Dict = {};\n\n const signals = new Set();\n const signalName = (p: SelectionProjection, range: 'data' | 'visual') => {\n const suffix = range === 'visual' ? p.channel : p.field;\n let sg = varName(`${name}_${suffix}`);\n for (let counter = 1; signals.has(sg); counter++) {\n sg = varName(`${name}_${suffix}_${counter}`);\n }\n signals.add(sg);\n return {[range]: sg};\n };\n\n const type = selCmpt.type;\n const cfg = model.config.selection[type];\n const init =\n selDef.value !== undefined\n ? (array(selDef.value as any) as SelectionInitMapping[] | SelectionInitIntervalMapping[])\n : null;\n\n // If no explicit projection (either fields or encodings) is specified, set some defaults.\n // If an initial value is set, try to infer projections.\n let {fields, encodings} = (isObject(selDef.select) ? selDef.select : {}) as PointSelectionConfig;\n if (!fields && !encodings && init) {\n for (const initVal of init) {\n // initVal may be a scalar value to smoothen varParam -> pointSelection gradient.\n if (!isObject(initVal)) {\n continue;\n }\n\n for (const key of keys(initVal)) {\n if (isSingleDefUnitChannel(key)) {\n (encodings || (encodings = [])).push(key as SingleDefUnitChannel);\n } else {\n if (type === 'interval') {\n log.warn(log.message.INTERVAL_INITIALIZED_WITH_X_Y);\n encodings = cfg.encodings;\n } else {\n (fields || (fields = [])).push(key);\n }\n }\n }\n }\n }\n\n // If no initial value is specified, use the default configuration.\n // We break this out as a separate if block (instead of an else condition)\n // to account for unprojected point selections that have scalar initial values\n if (!fields && !encodings) {\n encodings = cfg.encodings;\n if ('fields' in cfg) {\n fields = cfg.fields;\n }\n }\n\n for (const channel of encodings ?? []) {\n const fieldDef = model.fieldDef(channel);\n if (fieldDef) {\n let field = fieldDef.field;\n\n if (fieldDef.aggregate) {\n log.warn(log.message.cannotProjectAggregate(channel, fieldDef.aggregate));\n continue;\n } else if (!field) {\n log.warn(log.message.cannotProjectOnChannelWithoutField(channel));\n continue;\n }\n\n if (fieldDef.timeUnit) {\n field = model.vgField(channel);\n // Construct TimeUnitComponents which will be combined into a\n // TimeUnitNode. This node may need to be inserted into the\n // dataflow if the selection is used across views that do not\n // have these time units defined.\n const component = {\n timeUnit: fieldDef.timeUnit,\n as: field,\n field: fieldDef.field\n };\n\n timeUnits[hash(component)] = component;\n }\n\n // Prevent duplicate projections on the same field.\n // TODO: what if the same field is bound to multiple channels (e.g., SPLOM diag).\n if (!parsed[field]) {\n // Determine whether the tuple will store enumerated or ranged values.\n // Interval selections store ranges for continuous scales, and enumerations otherwise.\n // Single/multi selections store ranges for binned fields, and enumerations otherwise.\n let tplType: TupleStoreType = 'E';\n if (type === 'interval') {\n const scaleType = model.getScaleComponent(channel as ScaleChannel).get('type');\n if (hasContinuousDomain(scaleType)) {\n tplType = 'R';\n }\n } else if (fieldDef.bin) {\n tplType = 'R-RE';\n }\n\n const p: SelectionProjection = {field, channel, type: tplType};\n p.signals = {...signalName(p, 'data'), ...signalName(p, 'visual')};\n proj.items.push((parsed[field] = p));\n proj.hasField[field] = proj.hasChannel[channel] = parsed[field];\n }\n } else {\n log.warn(log.message.cannotProjectOnChannelWithoutField(channel));\n }\n }\n\n for (const field of fields ?? []) {\n if (proj.hasField[field]) continue;\n const p: SelectionProjection = {type: 'E', field};\n p.signals = {...signalName(p, 'data')};\n proj.items.push(p);\n proj.hasField[field] = p;\n }\n\n if (init) {\n selCmpt.init = (init as any).map((v: SelectionInitMapping | SelectionInitIntervalMapping) => {\n // Selections can be initialized either with a full object that maps projections to values\n // or scalar values to smoothen the abstraction gradient from variable params to point selections.\n return proj.items.map(p => (isObject(v) ? (v[p.channel] !== undefined ? v[p.channel] : v[p.field]) : v));\n });\n }\n\n if (!isEmpty(timeUnits)) {\n proj.timeUnit = new TimeUnitNode(null, timeUnits);\n }\n },\n\n signals: (model, selCmpt, allSignals) => {\n const name = selCmpt.name + TUPLE_FIELDS;\n const hasSignal = allSignals.filter(s => s.name === name);\n return hasSignal.length > 0\n ? allSignals\n : allSignals.concat({\n name,\n value: selCmpt.project.items.map(proj => {\n const {signals, hasLegend, ...rest} = proj;\n rest.field = replacePathInField(rest.field);\n return rest;\n })\n });\n }\n};\n\nexport default project;\n","import {stringValue} from 'vega-util';\nimport {VL_SELECTION_RESOLVE} from '.';\nimport {isScaleChannel, ScaleChannel} from '../../channel';\nimport * as log from '../../log';\nimport {hasContinuousDomain} from '../../scale';\nimport {isLayerModel, Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {SelectionProjection} from './project';\nimport {SelectionCompiler} from '.';\nimport {replacePathInField} from '../../util';\n\nconst scaleBindings: SelectionCompiler<'interval'> = {\n defined: selCmpt => {\n return selCmpt.type === 'interval' && selCmpt.resolve === 'global' && selCmpt.bind && selCmpt.bind === 'scales';\n },\n\n parse: (model, selCmpt) => {\n const bound: SelectionProjection[] = (selCmpt.scales = []);\n\n for (const proj of selCmpt.project.items) {\n const channel = proj.channel;\n\n if (!isScaleChannel(channel)) {\n continue;\n }\n\n const scale = model.getScaleComponent(channel);\n const scaleType = scale ? scale.get('type') : undefined;\n\n if (!scale || !hasContinuousDomain(scaleType)) {\n log.warn(log.message.SCALE_BINDINGS_CONTINUOUS);\n continue;\n }\n\n scale.set('selectionExtent', {param: selCmpt.name, field: proj.field}, true);\n bound.push(proj);\n }\n },\n\n topLevelSignals: (model, selCmpt, signals) => {\n const bound = selCmpt.scales.filter(proj => signals.filter(s => s.name === proj.signals.data).length === 0);\n\n // Top-level signals are only needed for multiview displays and if this\n // view's top-level signals haven't already been generated.\n if (!model.parent || isTopLevelLayer(model) || bound.length === 0) {\n return signals;\n }\n\n // vlSelectionResolve does not account for the behavior of bound scales in\n // multiview displays. Each unit view adds a tuple to the store, but the\n // state of the selection is the unit selection most recently updated. This\n // state is captured by the top-level signals that we insert and \"push\n // outer\" to from within the units. We need to reassemble this state into\n // the top-level named signal, except no single selCmpt has a global view.\n const namedSg = signals.filter(s => s.name === selCmpt.name)[0];\n let update = namedSg.update;\n if (update.indexOf(VL_SELECTION_RESOLVE) >= 0) {\n namedSg.update = `{${bound\n .map(proj => `${stringValue(replacePathInField(proj.field))}: ${proj.signals.data}`)\n .join(', ')}}`;\n } else {\n for (const proj of bound) {\n const mapping = `${stringValue(replacePathInField(proj.field))}: ${proj.signals.data}`;\n if (!update.includes(mapping)) {\n update = `${update.substring(0, update.length - 1)}, ${mapping}}`;\n }\n }\n namedSg.update = update;\n }\n\n return signals.concat(bound.map(proj => ({name: proj.signals.data})));\n },\n\n signals: (model, selCmpt, signals) => {\n // Nested signals need only push to top-level signals with multiview displays.\n if (model.parent && !isTopLevelLayer(model)) {\n for (const proj of selCmpt.scales) {\n const signal: any = signals.filter(s => s.name === proj.signals.data)[0];\n signal.push = 'outer';\n delete signal.value;\n delete signal.update;\n }\n }\n\n return signals;\n }\n};\n\nexport default scaleBindings;\n\nexport function domain(model: UnitModel, channel: ScaleChannel) {\n const scale = stringValue(model.scaleName(channel));\n return `domain(${scale})`;\n}\n\nfunction isTopLevelLayer(model: Model): boolean {\n return model.parent && isLayerModel(model.parent) && (!model.parent.parent ?? isTopLevelLayer(model.parent.parent));\n}\n","import {NewSignal, OnEvent, Stream} from 'vega';\nimport {array, stringValue} from 'vega-util';\nimport {SelectionCompiler, SelectionComponent, STORE, TUPLE, unitName} from '.';\nimport {ScaleChannel, X, Y} from '../../channel';\nimport {warn} from '../../log';\nimport {hasContinuousDomain} from '../../scale';\nimport {SelectionInitInterval} from '../../selection';\nimport {keys} from '../../util';\nimport {UnitModel} from '../unit';\nimport {assembleInit} from './assemble';\nimport {SelectionProjection, TUPLE_FIELDS} from './project';\nimport scales from './scales';\n\nexport const BRUSH = '_brush';\nexport const SCALE_TRIGGER = '_scale_trigger';\n\nconst interval: SelectionCompiler<'interval'> = {\n defined: selCmpt => selCmpt.type === 'interval',\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const fieldsSg = name + TUPLE_FIELDS;\n const hasScales = scales.defined(selCmpt);\n const init = selCmpt.init ? selCmpt.init[0] : null;\n const dataSignals: string[] = [];\n const scaleTriggers: {\n scaleName: string;\n expr: string;\n }[] = [];\n\n if (selCmpt.translate && !hasScales) {\n const filterExpr = `!event.item || event.item.mark.name !== ${stringValue(name + BRUSH)}`;\n events(selCmpt, (on: OnEvent[], evt: Stream) => {\n const filters = array((evt.between[0].filter ??= []));\n if (!filters.includes(filterExpr)) {\n filters.push(filterExpr);\n }\n return on;\n });\n }\n\n selCmpt.project.items.forEach((proj, i) => {\n const channel = proj.channel;\n if (channel !== X && channel !== Y) {\n warn('Interval selections only support x and y encoding channels.');\n return;\n }\n\n const val = init ? init[i] : null;\n const cs = channelSignals(model, selCmpt, proj, val);\n const dname = proj.signals.data;\n const vname = proj.signals.visual;\n const scaleName = stringValue(model.scaleName(channel));\n const scaleType = model.getScaleComponent(channel).get('type');\n const toNum = hasContinuousDomain(scaleType) ? '+' : '';\n\n signals.push(...cs);\n dataSignals.push(dname);\n\n scaleTriggers.push({\n scaleName: model.scaleName(channel),\n expr:\n `(!isArray(${dname}) || ` +\n `(${toNum}invert(${scaleName}, ${vname})[0] === ${toNum}${dname}[0] && ` +\n `${toNum}invert(${scaleName}, ${vname})[1] === ${toNum}${dname}[1]))`\n });\n });\n\n // Proxy scale reactions to ensure that an infinite loop doesn't occur\n // when an interval selection filter touches the scale.\n if (!hasScales && scaleTriggers.length) {\n signals.push({\n name: name + SCALE_TRIGGER,\n value: {},\n on: [\n {\n events: scaleTriggers.map(t => ({scale: t.scaleName})),\n update: `${scaleTriggers.map(t => t.expr).join(' && ')} ? ${name + SCALE_TRIGGER} : {}`\n }\n ]\n });\n }\n\n // Only add an interval to the store if it has valid data extents. Data extents\n // are set to null if pixel extents are equal to account for intervals over\n // ordinal/nominal domains which, when inverted, will still produce a valid datum.\n const update = `unit: ${unitName(model)}, fields: ${fieldsSg}, values`;\n return signals.concat({\n name: name + TUPLE,\n ...(init ? {init: `{${update}: ${assembleInit(init)}}`} : {}),\n ...(dataSignals.length\n ? {\n on: [\n {\n events: [{signal: dataSignals.join(' || ')}], // Prevents double invocation, see https://github.com/vega/vega#1672.\n update: `${dataSignals.join(' && ')} ? {${update}: [${dataSignals}]} : null`\n }\n ]\n }\n : {})\n });\n },\n\n marks: (model, selCmpt, marks) => {\n const name = selCmpt.name;\n const {x, y} = selCmpt.project.hasChannel;\n const xvname = x && x.signals.visual;\n const yvname = y && y.signals.visual;\n const store = `data(${stringValue(selCmpt.name + STORE)})`;\n\n // Do not add a brush if we're binding to scales\n // or we don't have a valid interval projection\n if (scales.defined(selCmpt) || (!x && !y)) {\n return marks;\n }\n\n const update: any = {\n x: x !== undefined ? {signal: `${xvname}[0]`} : {value: 0},\n y: y !== undefined ? {signal: `${yvname}[0]`} : {value: 0},\n x2: x !== undefined ? {signal: `${xvname}[1]`} : {field: {group: 'width'}},\n y2: y !== undefined ? {signal: `${yvname}[1]`} : {field: {group: 'height'}}\n };\n\n // If the selection is resolved to global, only a single interval is in\n // the store. Wrap brush mark's encodings with a production rule to test\n // this based on the `unit` property. Hide the brush mark if it corresponds\n // to a unit different from the one in the store.\n if (selCmpt.resolve === 'global') {\n for (const key of keys(update)) {\n update[key] = [\n {\n test: `${store}.length && ${store}[0].unit === ${unitName(model)}`,\n ...update[key]\n },\n {value: 0}\n ];\n }\n }\n\n // Two brush marks ensure that fill colors and other aesthetic choices do\n // not interefere with the core marks, but that the brushed region can still\n // be interacted with (e.g., dragging it around).\n const {fill, fillOpacity, cursor, ...stroke} = selCmpt.mark;\n const vgStroke = keys(stroke).reduce((def, k) => {\n def[k] = [\n {\n test: [x !== undefined && `${xvname}[0] !== ${xvname}[1]`, y !== undefined && `${yvname}[0] !== ${yvname}[1]`]\n .filter(t => t)\n .join(' && '),\n value: stroke[k]\n },\n {value: null}\n ];\n return def;\n }, {});\n\n return [\n {\n name: `${name + BRUSH}_bg`,\n type: 'rect',\n clip: true,\n encode: {\n enter: {\n fill: {value: fill},\n fillOpacity: {value: fillOpacity}\n },\n update: update\n }\n },\n ...marks,\n {\n name: name + BRUSH,\n type: 'rect',\n clip: true,\n encode: {\n enter: {\n ...(cursor ? {cursor: {value: cursor}} : {}),\n fill: {value: 'transparent'}\n },\n update: {...update, ...vgStroke}\n }\n }\n ];\n }\n};\nexport default interval;\n\n/**\n * Returns the visual and data signals for an interval selection.\n */\nfunction channelSignals(\n model: UnitModel,\n selCmpt: SelectionComponent<'interval'>,\n proj: SelectionProjection,\n init?: SelectionInitInterval\n): NewSignal[] {\n const channel = proj.channel;\n const vname = proj.signals.visual;\n const dname = proj.signals.data;\n const hasScales = scales.defined(selCmpt);\n const scaleName = stringValue(model.scaleName(channel));\n const scale = model.getScaleComponent(channel as ScaleChannel);\n const scaleType = scale ? scale.get('type') : undefined;\n const scaled = (str: string) => `scale(${scaleName}, ${str})`;\n const size = model.getSizeSignalRef(channel === X ? 'width' : 'height').signal;\n const coord = `${channel}(unit)`;\n\n const on = events(selCmpt, (def: OnEvent[], evt: Stream) => {\n return [\n ...def,\n {events: evt.between[0], update: `[${coord}, ${coord}]`}, // Brush Start\n {events: evt, update: `[${vname}[0], clamp(${coord}, 0, ${size})]`} // Brush End\n ];\n });\n\n // React to pan/zooms of continuous scales. Non-continuous scales\n // (band, point) cannot be pan/zoomed and any other changes\n // to their domains (e.g., filtering) should clear the brushes.\n on.push({\n events: {signal: selCmpt.name + SCALE_TRIGGER},\n update: hasContinuousDomain(scaleType) ? `[${scaled(`${dname}[0]`)}, ${scaled(`${dname}[1]`)}]` : `[0, 0]`\n });\n\n return hasScales\n ? [{name: dname, on: []}]\n : [\n {\n name: vname,\n ...(init ? {init: assembleInit(init, true, scaled)} : {value: []}),\n on: on\n },\n {\n name: dname,\n ...(init ? {init: assembleInit(init)} : {}), // Cannot be `value` as `init` may require datetime exprs.\n on: [\n {\n events: {signal: vname},\n update: `${vname}[0] === ${vname}[1] ? null : invert(${scaleName}, ${vname})`\n }\n ]\n }\n ];\n}\n\nfunction events(selCmpt: SelectionComponent<'interval'>, cb: (def: OnEvent[], evt: Stream) => OnEvent[]): OnEvent[] {\n return selCmpt.events.reduce((on, evt) => {\n if (!evt.between) {\n warn(`${evt} is not an ordered event stream for interval selections.`);\n return on;\n }\n return cb(on, evt);\n }, [] as OnEvent[]);\n}\n","import {Stream} from 'vega';\nimport {stringValue} from 'vega-util';\nimport {SelectionCompiler, TUPLE, unitName} from '.';\nimport {vals} from '../../util';\nimport {BRUSH} from './interval';\nimport {TUPLE_FIELDS} from './project';\n\nconst point: SelectionCompiler<'point'> = {\n defined: selCmpt => selCmpt.type === 'point',\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const fieldsSg = name + TUPLE_FIELDS;\n const project = selCmpt.project;\n const datum = '(item().isVoronoi ? datum.datum : datum)';\n const values = project.items\n .map(p => {\n const fieldDef = model.fieldDef(p.channel);\n // Binned fields should capture extents, for a range test against the raw field.\n return fieldDef?.bin\n ? `[${datum}[${stringValue(model.vgField(p.channel, {}))}], ` +\n `${datum}[${stringValue(model.vgField(p.channel, {binSuffix: 'end'}))}]]`\n : `${datum}[${stringValue(p.field)}]`;\n })\n .join(', ');\n\n // Only add a discrete selection to the store if a datum is present _and_\n // the interaction isn't occurring on a group mark. This guards against\n // polluting interactive state with invalid values in faceted displays\n // as the group marks are also data-driven. We force the update to account\n // for constant null states but varying toggles (e.g., shift-click in\n // whitespace followed by a click in whitespace; the store should only\n // be cleared on the second click).\n const update = `unit: ${unitName(model)}, fields: ${fieldsSg}, values`;\n\n const events: Stream[] = selCmpt.events;\n\n const brushes = vals(model.component.selection ?? {})\n .reduce((acc, cmpt) => {\n return cmpt.type === 'interval' ? acc.concat(cmpt.name + BRUSH) : acc;\n }, [])\n .map(b => `indexof(item().mark.name, '${b}') < 0`)\n .join(' && ');\n\n const test = `datum && item().mark.marktype !== 'group'` + (brushes ? ` && ${brushes}` : '');\n\n return signals.concat([\n {\n name: name + TUPLE,\n on: events\n ? [\n {\n events,\n update: `${test} ? {${update}: [${values}]} : null`,\n force: true\n }\n ]\n : []\n }\n ]);\n }\n};\n\nexport default point;\n","import {array} from 'vega-util';\nimport {ChannelDef, ConditionalPredicate, isConditionalDef, isConditionalParameter} from '../../../channeldef';\nimport {GuideEncodingConditionalValueDef} from '../../../guide';\nimport {VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {expression} from '../../predicate';\nimport {parseSelectionPredicate} from '../../selection/parse';\nimport {UnitModel} from '../../unit';\n\n/**\n * Return a mixin that includes a Vega production rule for a Vega-Lite conditional channel definition\n * or a simple mixin if channel def has no condition.\n */\nexport function wrapCondition(\n model: UnitModel,\n channelDef: CD,\n vgChannel: string,\n refFn: (cDef: CD) => VgValueRef\n): VgEncodeEntry {\n const condition = isConditionalDef(channelDef) && channelDef.condition;\n const valueRef = refFn(channelDef);\n if (condition) {\n const conditions = array(condition);\n const vgConditions = conditions.map(c => {\n const conditionValueRef = refFn(c);\n if (isConditionalParameter(c)) {\n const {param, empty} = c;\n const test = parseSelectionPredicate(model, {param, empty});\n return {test, ...conditionValueRef};\n } else {\n const test = expression(model, (c as ConditionalPredicate).test); // FIXME: remove casting once TS is no longer dumb about it\n return {test, ...conditionValueRef};\n }\n });\n return {\n [vgChannel]: [...vgConditions, ...(valueRef !== undefined ? [valueRef] : [])]\n };\n } else {\n return valueRef !== undefined ? {[vgChannel]: valueRef} : {};\n }\n}\n","import {getFormatMixins, isFieldOrDatumDef, isValueDef} from '../../../channeldef';\nimport {Config} from '../../../config';\nimport {Encoding} from '../../../encoding';\nimport {VgValueRef} from '../../../vega.schema';\nimport {signalOrValueRef} from '../../common';\nimport {formatSignalRef} from '../../format';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\n\nexport function text(model: UnitModel, channel: 'text' | 'href' | 'url' | 'description' = 'text') {\n const channelDef = model.encoding[channel];\n return wrapCondition(model, channelDef, channel, cDef => textRef(cDef, model.config));\n}\n\nexport function textRef(\n channelDef: Encoding['text' | 'tooltip'],\n config: Config,\n expr: 'datum' | 'datum.datum' = 'datum'\n): VgValueRef {\n // text\n if (channelDef) {\n if (isValueDef(channelDef)) {\n return signalOrValueRef(channelDef.value);\n }\n if (isFieldOrDatumDef(channelDef)) {\n const {format, formatType} = getFormatMixins(channelDef);\n return formatSignalRef({fieldOrDatumDef: channelDef, format, formatType, expr, config});\n }\n }\n return undefined;\n}\n","import {array, isArray, isObject, isString} from 'vega-util';\nimport {isBinned} from '../../../bin';\nimport {getMainRangeChannel, isXorY, Channel} from '../../../channel';\nimport {\n defaultTitle,\n getFieldDef,\n getFormatMixins,\n hasConditionalFieldDef,\n isFieldDef,\n isTypedFieldDef,\n SecondaryFieldDef,\n TypedFieldDef,\n vgField\n} from '../../../channeldef';\nimport {Config} from '../../../config';\nimport {Encoding, forEach} from '../../../encoding';\nimport {StackProperties} from '../../../stack';\nimport {entries} from '../../../util';\nimport {isSignalRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig} from '../../common';\nimport {binFormatExpression, formatSignalRef} from '../../format';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\nimport {textRef} from './text';\n\nexport function tooltip(model: UnitModel, opt: {reactiveGeom?: boolean} = {}) {\n const {encoding, markDef, config, stack} = model;\n const channelDef = encoding.tooltip;\n if (isArray(channelDef)) {\n return {tooltip: tooltipRefForEncoding({tooltip: channelDef}, stack, config, opt)};\n } else {\n const datum = opt.reactiveGeom ? 'datum.datum' : 'datum';\n return wrapCondition(model, channelDef, 'tooltip', cDef => {\n // use valueRef based on channelDef first\n const tooltipRefFromChannelDef = textRef(cDef, config, datum);\n if (tooltipRefFromChannelDef) {\n return tooltipRefFromChannelDef;\n }\n\n if (cDef === null) {\n // Allow using encoding.tooltip = null to disable tooltip\n return undefined;\n }\n\n let markTooltip = getMarkPropOrConfig('tooltip', markDef, config);\n\n if (markTooltip === true) {\n markTooltip = {content: 'encoding'};\n }\n\n if (isString(markTooltip)) {\n return {value: markTooltip};\n } else if (isObject(markTooltip)) {\n // `tooltip` is `{fields: 'encodings' | 'fields'}`\n if (isSignalRef(markTooltip)) {\n return markTooltip;\n } else if (markTooltip.content === 'encoding') {\n return tooltipRefForEncoding(encoding, stack, config, opt);\n } else {\n return {signal: datum};\n }\n }\n\n return undefined;\n });\n }\n}\n\nexport function tooltipData(\n encoding: Encoding,\n stack: StackProperties,\n config: Config,\n {reactiveGeom}: {reactiveGeom?: boolean} = {}\n) {\n const toSkip = {};\n const expr = reactiveGeom ? 'datum.datum' : 'datum';\n const tuples: {channel: Channel; key: string; value: string}[] = [];\n\n function add(fDef: TypedFieldDef | SecondaryFieldDef, channel: Channel) {\n const mainChannel = getMainRangeChannel(channel);\n\n const fieldDef: TypedFieldDef = isTypedFieldDef(fDef)\n ? fDef\n : {\n ...fDef,\n type: (encoding[mainChannel] as TypedFieldDef).type // for secondary field def, copy type from main channel\n };\n\n const title = fieldDef.title || defaultTitle(fieldDef, config);\n const key = array(title).join(', ');\n\n let value: string;\n\n if (isXorY(channel)) {\n const channel2 = channel === 'x' ? 'x2' : 'y2';\n const fieldDef2 = getFieldDef(encoding[channel2]);\n\n if (isBinned(fieldDef.bin) && fieldDef2) {\n const startField = vgField(fieldDef, {expr});\n const endField = vgField(fieldDef2, {expr});\n const {format, formatType} = getFormatMixins(fieldDef);\n value = binFormatExpression(startField, endField, format, formatType, config);\n toSkip[channel2] = true;\n } else if (stack && stack.fieldChannel === channel && stack.offset === 'normalize') {\n const {format, formatType} = getFormatMixins(fieldDef);\n value = formatSignalRef({\n fieldOrDatumDef: fieldDef,\n format,\n formatType,\n expr,\n config,\n normalizeStack: true\n }).signal;\n }\n }\n\n value ??= textRef(fieldDef, config, expr).signal;\n\n tuples.push({channel, key, value});\n }\n\n forEach(encoding, (channelDef, channel) => {\n if (isFieldDef(channelDef)) {\n add(channelDef, channel);\n } else if (hasConditionalFieldDef(channelDef)) {\n add(channelDef.condition, channel);\n }\n });\n\n const out = {};\n for (const {channel, key, value} of tuples) {\n if (!toSkip[channel] && !out[key]) {\n out[key] = value;\n }\n }\n\n return out;\n}\n\nexport function tooltipRefForEncoding(\n encoding: Encoding,\n stack: StackProperties,\n config: Config,\n {reactiveGeom}: {reactiveGeom?: boolean} = {}\n) {\n const data = tooltipData(encoding, stack, config, {reactiveGeom});\n\n const keyValues = entries(data).map(([key, value]) => `\"${key}\": ${value}`);\n return keyValues.length > 0 ? {signal: `{${keyValues.join(', ')}}`} : undefined;\n}\n","import {entries, isEmpty} from '../../../util';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {VG_MARK_INDEX} from './../../../vega.schema';\nimport {UnitModel} from './../../unit';\nimport {wrapCondition} from './conditional';\nimport {textRef} from './text';\nimport {tooltipData} from './tooltip';\n\nexport function aria(model: UnitModel) {\n const {markDef, config} = model;\n\n const enableAria = getMarkPropOrConfig('aria', markDef, config);\n\n // We can ignore other aria properties if ariaHidden is true.\n if (enableAria === false) {\n // getMarkGroups sets aria to false already so we don't have to set it in the encode block\n return {};\n }\n\n return {\n ...(enableAria ? {aria: enableAria} : {}),\n ...ariaRoleDescription(model),\n ...description(model)\n };\n}\n\nfunction ariaRoleDescription(model: UnitModel) {\n const {mark, markDef, config} = model;\n\n if (config.aria === false) {\n return {};\n }\n\n const ariaRoleDesc = getMarkPropOrConfig('ariaRoleDescription', markDef, config);\n\n if (ariaRoleDesc != null) {\n return {ariaRoleDescription: {value: ariaRoleDesc}};\n }\n\n return mark in VG_MARK_INDEX ? {} : {ariaRoleDescription: {value: mark}};\n}\n\nexport function description(model: UnitModel) {\n const {encoding, markDef, config, stack} = model;\n const channelDef = encoding.description;\n\n if (channelDef) {\n return wrapCondition(model, channelDef, 'description', cDef => textRef(cDef, model.config));\n }\n\n // Use default from mark def or config if defined.\n // Functions in encode usually just return undefined but since we are defining a default below, we need to check the default here.\n const descriptionValue = getMarkPropOrConfig('description', markDef, config);\n if (descriptionValue != null) {\n return {\n description: signalOrValueRef(descriptionValue)\n };\n }\n\n if (config.aria === false) {\n return {};\n }\n\n const data = tooltipData(encoding, stack, config);\n\n if (isEmpty(data)) {\n return undefined;\n }\n\n return {\n description: {\n signal: entries(data)\n .map(([key, value], index) => `\"${index > 0 ? '; ' : ''}${key}: \" + (${value})`)\n .join(' + ')\n }\n };\n}\n","import {SignalRef} from 'vega';\nimport {NonPositionScaleChannel} from '../../../channel';\nimport {Value} from '../../../channeldef';\nimport {VgEncodeChannel, VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\nimport * as ref from './valueref';\n\n/**\n * Return encode for non-positional channels with scales. (Text doesn't have scale.)\n */\nexport function nonPosition(\n channel: NonPositionScaleChannel,\n model: UnitModel,\n opt: {\n defaultValue?: Value | SignalRef;\n vgChannel?: VgEncodeChannel;\n defaultRef?: VgValueRef;\n } = {}\n): VgEncodeEntry {\n const {markDef, encoding, config} = model;\n const {vgChannel} = opt;\n let {defaultRef, defaultValue} = opt;\n\n if (defaultRef === undefined) {\n // prettier-ignore\n defaultValue ??= getMarkPropOrConfig(channel, markDef, config, {vgChannel, ignoreVgConfig: true});\n\n if (defaultValue !== undefined) {\n defaultRef = signalOrValueRef(defaultValue);\n }\n }\n\n const channelDef = encoding[channel];\n\n return wrapCondition(model, channelDef, vgChannel ?? channel, cDef => {\n return ref.midPoint({\n channel,\n channelDef: cDef,\n markDef,\n config,\n scaleName: model.scaleName(channel),\n scale: model.getScaleComponent(channel),\n stack: null, // No need to provide stack for non-position as it does not affect mid point\n defaultRef\n });\n });\n}\n","import * as log from '../../../log';\nimport {contains} from '../../../util';\nimport {VgEncodeEntry} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {nonPosition} from './nonposition';\n\nexport function color(model: UnitModel, opt: {filled: boolean | undefined} = {filled: undefined}): VgEncodeEntry {\n const {markDef, encoding, config} = model;\n const {type: markType} = markDef;\n\n // Allow filled to be overridden (for trail's \"filled\")\n const filled = opt.filled ?? getMarkPropOrConfig('filled', markDef, config);\n\n const transparentIfNeeded = contains(['bar', 'point', 'circle', 'square', 'geoshape'], markType)\n ? 'transparent'\n : undefined;\n\n const defaultFill =\n getMarkPropOrConfig(filled === true ? 'color' : undefined, markDef, config, {vgChannel: 'fill'}) ??\n // need to add this manually as getMarkConfig normally drops config.mark[channel] if vgChannel is specified\n config.mark[filled === true && 'color'] ??\n // If there is no fill, always fill symbols, bar, geoshape\n // with transparent fills https://github.com/vega/vega-lite/issues/1316\n transparentIfNeeded;\n\n const defaultStroke =\n getMarkPropOrConfig(filled === false ? 'color' : undefined, markDef, config, {vgChannel: 'stroke'}) ??\n // need to add this manually as getMarkConfig normally drops config.mark[channel] if vgChannel is specified\n config.mark[filled === false && 'color'];\n\n const colorVgChannel = filled ? 'fill' : 'stroke';\n\n const fillStrokeMarkDefAndConfig: VgEncodeEntry = {\n ...(defaultFill ? {fill: signalOrValueRef(defaultFill)} : {}),\n ...(defaultStroke ? {stroke: signalOrValueRef(defaultStroke)} : {})\n };\n\n if (markDef.color && (filled ? markDef.fill : markDef.stroke)) {\n log.warn(log.message.droppingColor('property', {fill: 'fill' in markDef, stroke: 'stroke' in markDef}));\n }\n\n return {\n ...fillStrokeMarkDefAndConfig,\n ...nonPosition('color', model, {\n vgChannel: colorVgChannel,\n defaultValue: filled ? defaultFill : defaultStroke\n }),\n ...nonPosition('fill', model, {\n // if there is encoding.fill, include default fill just in case we have conditional-only fill encoding\n defaultValue: encoding.fill ? defaultFill : undefined\n }),\n ...nonPosition('stroke', model, {\n // if there is encoding.stroke, include default fill just in case we have conditional-only stroke encoding\n defaultValue: encoding.stroke ? defaultStroke : undefined\n })\n };\n}\n","import {isValueDef} from '../../../channeldef';\nimport {isPathMark} from '../../../mark';\nimport {signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {wrapCondition} from './conditional';\n\nexport function zindex(model: UnitModel) {\n const {encoding, mark} = model;\n const order = encoding.order;\n\n if (!isPathMark(mark) && isValueDef(order)) {\n return wrapCondition(model, order, 'zindex', cd => signalOrValueRef(cd.value));\n }\n return {};\n}\n","/**\n * Utility files for producing Vega ValueRef for marks\n */\nimport {SignalRef} from 'vega';\nimport {getOffsetChannel, PolarPositionChannel, PositionChannel} from '../../../channel';\nimport {Mark, MarkDef} from '../../../mark';\n\nexport function getOffset(\n channel: PositionChannel | PolarPositionChannel,\n markDef: MarkDef\n): number | SignalRef {\n const offsetChannel = getOffsetChannel(channel);\n\n // TODO: in the future read from encoding channel too\n const markDefOffsetValue = markDef[offsetChannel];\n if (markDefOffsetValue) {\n return markDefOffsetValue;\n }\n\n return undefined;\n}\n","import {\n getMainRangeChannel,\n getSecondaryRangeChannel,\n getSizeChannel,\n getVgPositionChannel,\n isXorY,\n PolarPositionChannel,\n PositionChannel\n} from '../../../channel';\nimport {isFieldDef, isFieldOrDatumDef, TypedFieldDef} from '../../../channeldef';\nimport {ScaleType} from '../../../scale';\nimport {contains} from '../../../util';\nimport {VgValueRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig} from '../../common';\nimport {ScaleComponent} from '../../scale/component';\nimport {UnitModel} from '../../unit';\nimport {getOffset} from './offset';\nimport * as ref from './valueref';\n\n/**\n * Return encode for point (non-band) position channels.\n */\nexport function pointPosition(\n channel: 'x' | 'y' | 'theta' | 'radius',\n model: UnitModel,\n {\n defaultPos,\n vgChannel\n }: {\n defaultPos: 'mid' | 'zeroOrMin' | 'zeroOrMax' | null;\n vgChannel?: 'x' | 'y' | 'xc' | 'yc';\n }\n) {\n const {encoding, markDef, config, stack} = model;\n\n const channelDef = encoding[channel];\n const channel2Def = encoding[getSecondaryRangeChannel(channel)];\n const scaleName = model.scaleName(channel);\n const scale = model.getScaleComponent(channel);\n\n const offset = getOffset(channel, markDef);\n\n // Get default position or position from mark def\n const defaultRef = pointPositionDefaultRef({\n model,\n defaultPos,\n channel,\n scaleName,\n scale\n });\n\n const valueRef =\n !channelDef && isXorY(channel) && (encoding.latitude || encoding.longitude)\n ? // use geopoint output if there are lat/long and there is no point position overriding lat/long.\n {field: model.getName(channel)}\n : positionRef({\n channel,\n channelDef,\n channel2Def,\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef\n });\n\n return valueRef ? {[vgChannel || channel]: valueRef} : undefined;\n}\n\n// TODO: we need to find a way to refactor these so that scaleName is a part of scale\n// but that's complicated. For now, this is a huge step moving forward.\n\n/**\n * @return Vega ValueRef for normal x- or y-position without projection\n */\nexport function positionRef(\n params: ref.MidPointParams & {\n channel: 'x' | 'y' | 'radius' | 'theta';\n }\n): VgValueRef | VgValueRef[] {\n const {channel, channelDef, scaleName, stack, offset, markDef} = params;\n\n // This isn't a part of midPoint because we use midPoint for non-position too\n if (isFieldOrDatumDef(channelDef) && stack && channel === stack.fieldChannel) {\n if (isFieldDef(channelDef)) {\n let bandPosition = channelDef.bandPosition;\n\n if (bandPosition === undefined && markDef.type === 'text' && (channel === 'radius' || channel === 'theta')) {\n // theta and radius of text mark should use bandPosition = 0.5 by default\n // so that labels for arc marks are centered automatically\n bandPosition = 0.5;\n }\n\n if (bandPosition !== undefined) {\n return ref.interpolatedSignalRef({\n scaleName,\n fieldOrDatumDef: channelDef as TypedFieldDef, // positionRef always have type\n startSuffix: 'start',\n bandPosition,\n offset\n });\n }\n }\n // x or y use stack_end so that stacked line's point mark use stack_end too.\n return ref.valueRefForFieldOrDatumDef(channelDef, scaleName, {suffix: 'end'}, {offset});\n }\n\n return ref.midPointRefWithPositionInvalidTest(params);\n}\n\nexport function pointPositionDefaultRef({\n model,\n defaultPos,\n channel,\n scaleName,\n scale\n}: {\n model: UnitModel;\n defaultPos: 'mid' | 'zeroOrMin' | 'zeroOrMax' | null;\n channel: PositionChannel | PolarPositionChannel;\n scaleName: string;\n scale: ScaleComponent;\n}): () => VgValueRef {\n const {markDef, config} = model;\n return () => {\n const mainChannel = getMainRangeChannel(channel);\n const vgChannel = getVgPositionChannel(channel);\n\n const definedValueOrConfig = getMarkPropOrConfig(channel, markDef, config, {vgChannel});\n if (definedValueOrConfig !== undefined) {\n return ref.widthHeightValueOrSignalRef(channel, definedValueOrConfig);\n }\n\n switch (defaultPos) {\n case 'zeroOrMin':\n case 'zeroOrMax':\n if (scaleName) {\n const scaleType = scale.get('type');\n if (contains([ScaleType.LOG, ScaleType.TIME, ScaleType.UTC], scaleType)) {\n // Log scales cannot have zero.\n // Zero in time scale is arbitrary, and does not affect ratio.\n // (Time is an interval level of measurement, not ratio).\n // See https://en.wikipedia.org/wiki/Level_of_measurement for more info.\n } else {\n if (scale.domainDefinitelyIncludesZero()) {\n return {\n scale: scaleName,\n value: 0\n };\n }\n }\n }\n\n if (defaultPos === 'zeroOrMin') {\n return mainChannel === 'y' ? {field: {group: 'height'}} : {value: 0};\n } else {\n // zeroOrMax\n switch (mainChannel) {\n case 'radius':\n // max of radius is min(width, height) / 2\n return {\n signal: `min(${model.width.signal},${model.height.signal})/2`\n };\n case 'theta':\n return {signal: '2*PI'};\n case 'x':\n return {field: {group: 'width'}};\n case 'y':\n return {value: 0};\n }\n }\n break;\n case 'mid': {\n const sizeRef = model[getSizeChannel(channel)];\n return {...sizeRef, mult: 0.5};\n }\n }\n // defaultPos === null\n return undefined;\n };\n}\n","import {Align, SignalRef, TextBaseline} from 'vega';\nimport {getVgPositionChannel} from '../../../channel';\nimport {Config} from '../../../config';\nimport * as log from '../../../log';\nimport {Mark, MarkDef} from '../../../mark';\nimport {isSignalRef, VgEncodeChannel} from '../../../vega.schema';\nimport {getMarkPropOrConfig} from '../../common';\n\nconst ALIGNED_X_CHANNEL: Record = {\n left: 'x',\n center: 'xc',\n right: 'x2'\n};\n\nconst BASELINED_Y_CHANNEL = {\n top: 'y',\n middle: 'yc',\n bottom: 'y2'\n};\n\nexport function vgAlignedPositionChannel(\n channel: 'x' | 'y' | 'radius' | 'theta',\n markDef: MarkDef,\n config: Config,\n defaultAlign: 'top' | 'middle' = 'middle'\n) {\n if (channel === 'radius' || channel === 'theta') {\n return getVgPositionChannel(channel);\n }\n const alignChannel = channel === 'x' ? 'align' : 'baseline';\n const align = getMarkPropOrConfig(alignChannel, markDef, config);\n\n let alignExcludingSignal: Align | TextBaseline;\n\n if (isSignalRef(align)) {\n log.warn(log.message.rangeMarkAlignmentCannotBeExpression(alignChannel));\n alignExcludingSignal = undefined;\n } else {\n alignExcludingSignal = align;\n }\n\n if (channel === 'x') {\n return ALIGNED_X_CHANNEL[alignExcludingSignal || (defaultAlign === 'top' ? 'left' : 'center')];\n } else {\n return BASELINED_Y_CHANNEL[alignExcludingSignal || defaultAlign];\n }\n}\n","import {SignalRef} from 'vega';\nimport {getMainRangeChannel, getSecondaryRangeChannel, getSizeChannel, getVgPositionChannel} from '../../../channel';\nimport {isFieldOrDatumDef} from '../../../channeldef';\nimport * as log from '../../../log';\nimport {isRelativeBandSize, Mark, MarkConfig, MarkDef} from '../../../mark';\nimport {VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {getMarkStyleConfig} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {getOffset} from './offset';\nimport {vgAlignedPositionChannel} from './position-align';\nimport {pointPosition, pointPositionDefaultRef} from './position-point';\nimport * as ref from './valueref';\n\n/**\n * Utility for area/rule position, which can be either point or range.\n * (One of the axes should be point and the other should be range.)\n */\nexport function pointOrRangePosition(\n channel: 'x' | 'y',\n model: UnitModel,\n {\n defaultPos,\n defaultPos2,\n range\n }: {\n defaultPos: 'zeroOrMin' | 'zeroOrMax' | 'mid';\n defaultPos2: 'zeroOrMin' | 'zeroOrMax';\n range: boolean;\n }\n) {\n if (range) {\n return rangePosition(channel, model, {defaultPos, defaultPos2});\n }\n return pointPosition(channel, model, {defaultPos});\n}\n\nexport function rangePosition(\n channel: 'x' | 'y' | 'theta' | 'radius',\n model: UnitModel,\n {\n defaultPos,\n defaultPos2\n }: {\n defaultPos: 'zeroOrMin' | 'zeroOrMax' | 'mid';\n defaultPos2: 'zeroOrMin' | 'zeroOrMax';\n }\n): VgEncodeEntry {\n const {markDef, config} = model;\n const channel2 = getSecondaryRangeChannel(channel);\n const sizeChannel = getSizeChannel(channel);\n\n const pos2Mixins = pointPosition2OrSize(model, defaultPos2, channel2);\n\n const vgChannel = pos2Mixins[sizeChannel]\n ? // If there is width/height, we need to position the marks based on the alignment.\n vgAlignedPositionChannel(channel, markDef, config)\n : // Otherwise, make sure to apply to the right Vg Channel (for arc mark)\n getVgPositionChannel(channel);\n\n return {\n ...pointPosition(channel, model, {defaultPos, vgChannel}),\n ...pos2Mixins\n };\n}\n\n/**\n * Return encode for x2, y2.\n * If channel is not specified, return one channel based on orientation.\n */\nfunction pointPosition2OrSize(\n model: UnitModel,\n defaultPos: 'zeroOrMin' | 'zeroOrMax',\n channel: 'x2' | 'y2' | 'radius2' | 'theta2'\n) {\n const {encoding, mark, markDef, stack, config} = model;\n\n const baseChannel = getMainRangeChannel(channel);\n const sizeChannel = getSizeChannel(channel);\n const vgChannel = getVgPositionChannel(channel);\n\n const channelDef = encoding[baseChannel];\n const scaleName = model.scaleName(baseChannel);\n const scale = model.getScaleComponent(baseChannel);\n\n const offset =\n channel in encoding || channel in markDef\n ? getOffset(channel, model.markDef)\n : getOffset(baseChannel, model.markDef);\n\n if (!channelDef && (channel === 'x2' || channel === 'y2') && (encoding.latitude || encoding.longitude)) {\n const vgSizeChannel = getSizeChannel(channel);\n\n const size = model.markDef[vgSizeChannel];\n if (size != null) {\n return {\n [vgSizeChannel]: {value: size}\n };\n } else {\n return {\n [vgChannel]: {field: model.getName(channel)}\n };\n }\n }\n\n const valueRef = position2Ref({\n channel,\n channelDef,\n channel2Def: encoding[channel],\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef: undefined\n });\n\n if (valueRef !== undefined) {\n return {[vgChannel]: valueRef};\n }\n\n // TODO: check width/height encoding here once we add them\n\n // no x2/y2 encoding, then try to read x2/y2 or width/height based on precedence:\n // markDef > config.style > mark-specific config (config[mark]) > general mark config (config.mark)\n\n return (\n position2orSize(channel, markDef) ||\n position2orSize(channel, {\n [channel]: getMarkStyleConfig(channel, markDef, config.style),\n [sizeChannel]: getMarkStyleConfig(sizeChannel, markDef, config.style)\n }) ||\n position2orSize(channel, config[mark]) ||\n position2orSize(channel, config.mark) || {\n [vgChannel]: pointPositionDefaultRef({\n model,\n defaultPos,\n channel,\n scaleName,\n scale\n })()\n }\n );\n}\n\nexport function position2Ref({\n channel,\n channelDef,\n channel2Def,\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef\n}: ref.MidPointParams & {\n channel: 'x2' | 'y2' | 'radius2' | 'theta2';\n}): VgValueRef | VgValueRef[] {\n if (\n isFieldOrDatumDef(channelDef) &&\n stack &&\n // If fieldChannel is X and channel is X2 (or Y and Y2)\n channel.charAt(0) === stack.fieldChannel.charAt(0)\n ) {\n return ref.valueRefForFieldOrDatumDef(channelDef, scaleName, {suffix: 'start'}, {offset});\n }\n return ref.midPointRefWithPositionInvalidTest({\n channel,\n channelDef: channel2Def,\n scaleName,\n scale,\n stack,\n markDef,\n config,\n offset,\n defaultRef\n });\n}\n\nfunction position2orSize(\n channel: 'x2' | 'y2' | 'radius2' | 'theta2',\n markDef: MarkConfig | MarkDef\n) {\n const sizeChannel = getSizeChannel(channel);\n const vgChannel = getVgPositionChannel(channel);\n if (markDef[vgChannel] !== undefined) {\n return {[vgChannel]: ref.widthHeightValueOrSignalRef(channel, markDef[vgChannel])};\n } else if (markDef[channel] !== undefined) {\n return {[vgChannel]: ref.widthHeightValueOrSignalRef(channel, markDef[channel])};\n } else if (markDef[sizeChannel]) {\n const dimensionSize = markDef[sizeChannel];\n if (isRelativeBandSize(dimensionSize)) {\n log.warn(log.message.relativeBandSizeNotSupported(sizeChannel));\n } else {\n return {[sizeChannel]: ref.widthHeightValueOrSignalRef(channel, dimensionSize)};\n }\n }\n return undefined;\n}\n","import {SignalRef} from 'vega';\nimport {isArray, isNumber} from 'vega-util';\nimport {isBinned, isBinning, isBinParams} from '../../../bin';\nimport {\n getSecondaryRangeChannel,\n getSizeChannel,\n getVgPositionChannel,\n isPolarPositionChannel,\n isXorY,\n PolarPositionChannel,\n PositionChannel\n} from '../../../channel';\nimport {getBandSize, isFieldDef, isFieldOrDatumDef, TypedFieldDef, vgField} from '../../../channeldef';\nimport {Config, getViewConfigDiscreteStep} from '../../../config';\nimport {Encoding} from '../../../encoding';\nimport * as log from '../../../log';\nimport {BandSize, isRelativeBandSize, Mark, MarkDef, RelativeBandSize} from '../../../mark';\nimport {hasDiscreteDomain} from '../../../scale';\nimport {isSignalRef, isVgRangeStep, VgEncodeEntry, VgValueRef} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrStringValue, signalOrValueRef} from '../../common';\nimport {ScaleComponent} from '../../scale/component';\nimport {UnitModel} from '../../unit';\nimport {nonPosition} from './nonposition';\nimport {getOffset} from './offset';\nimport {vgAlignedPositionChannel} from './position-align';\nimport {pointPositionDefaultRef} from './position-point';\nimport {rangePosition} from './position-range';\nimport * as ref from './valueref';\n\nexport function rectPosition(\n model: UnitModel,\n channel: 'x' | 'y' | 'theta' | 'radius',\n mark: 'bar' | 'rect' | 'image' | 'arc'\n): VgEncodeEntry {\n const {config, encoding, markDef} = model;\n\n const channel2 = getSecondaryRangeChannel(channel);\n const sizeChannel = getSizeChannel(channel);\n const channelDef = encoding[channel];\n const channelDef2 = encoding[channel2];\n\n const scale = model.getScaleComponent(channel);\n const scaleType = scale ? scale.get('type') : undefined;\n const scaleName = model.scaleName(channel);\n\n const orient = markDef.orient;\n const hasSizeDef =\n encoding[sizeChannel] ?? encoding.size ?? getMarkPropOrConfig('size', markDef, config, {vgChannel: sizeChannel});\n\n const isBarBand = mark === 'bar' && (channel === 'x' ? orient === 'vertical' : orient === 'horizontal');\n\n // x, x2, and width -- we must specify two of these in all conditions\n if (\n isFieldDef(channelDef) &&\n (isBinning(channelDef.bin) || isBinned(channelDef.bin) || (channelDef.timeUnit && !channelDef2)) &&\n !(hasSizeDef && !isRelativeBandSize(hasSizeDef)) &&\n !hasDiscreteDomain(scaleType)\n ) {\n const bandSize = getBandSize({channel, fieldDef: channelDef, markDef, config, scaleType});\n const axis = model.component.axes[channel]?.[0];\n const axisTranslate = axis?.get('translate') ?? 0.5; // vega default is 0.5\n\n return rectBinPosition({\n fieldDef: channelDef,\n fieldDef2: channelDef2,\n channel,\n markDef,\n scaleName,\n bandSize,\n axisTranslate,\n spacing: isXorY(channel) ? getMarkPropOrConfig('binSpacing', markDef, config) : undefined,\n reverse: scale.get('reverse'),\n config\n });\n } else if (((isFieldOrDatumDef(channelDef) && hasDiscreteDomain(scaleType)) || isBarBand) && !channelDef2) {\n return positionAndSize(channelDef, channel, model);\n } else {\n return rangePosition(channel, model, {defaultPos: 'zeroOrMax', defaultPos2: 'zeroOrMin'});\n }\n}\nfunction defaultSizeRef(\n sizeChannel: 'width' | 'height',\n scaleName: string,\n scale: ScaleComponent,\n config: Config,\n bandSize: BandSize\n): VgValueRef {\n if (isRelativeBandSize(bandSize)) {\n if (scale) {\n const scaleType = scale.get('type');\n if (scaleType === 'band') {\n return {scale: scaleName, band: bandSize.band};\n } else if (bandSize.band !== 1) {\n log.warn(log.message.cannotUseRelativeBandSizeWithNonBandScale(scaleType));\n bandSize = undefined;\n }\n } else {\n return {\n mult: bandSize.band,\n field: {group: sizeChannel}\n };\n }\n } else if (isSignalRef(bandSize)) {\n return bandSize;\n } else if (bandSize) {\n return {value: bandSize};\n }\n\n // no valid band size\n if (scale) {\n const scaleRange = scale.get('range');\n if (isVgRangeStep(scaleRange) && isNumber(scaleRange.step)) {\n return {value: scaleRange.step - 2};\n }\n }\n const defaultStep = getViewConfigDiscreteStep(config.view, sizeChannel);\n return {value: defaultStep - 2};\n}\n\n/**\n * Output position encoding and its size encoding for continuous, point, and band scales.\n */\nfunction positionAndSize(\n fieldDef: Encoding['x' | 'y' | 'theta' | 'radius'],\n channel: 'x' | 'y' | 'theta' | 'radius',\n model: UnitModel\n) {\n const {markDef, encoding, config, stack} = model;\n const orient = markDef.orient;\n\n const scaleName = model.scaleName(channel);\n const scale = model.getScaleComponent(channel);\n const vgSizeChannel = getSizeChannel(channel);\n const channel2 = getSecondaryRangeChannel(channel);\n\n // use \"size\" channel for bars, if there is orient and the channel matches the right orientation\n const useVlSizeChannel = (orient === 'horizontal' && channel === 'y') || (orient === 'vertical' && channel === 'x');\n\n // Use size encoding / mark property / config if it exists\n let sizeMixins;\n if (encoding.size || markDef.size) {\n if (useVlSizeChannel) {\n sizeMixins = nonPosition('size', model, {\n vgChannel: vgSizeChannel,\n defaultRef: signalOrValueRef(markDef.size)\n });\n } else {\n log.warn(log.message.cannotApplySizeToNonOrientedMark(markDef.type));\n }\n }\n\n // Otherwise, apply default value\n const bandSize = getBandSize({channel, fieldDef, markDef, config, scaleType: scale?.get('type'), useVlSizeChannel});\n\n sizeMixins = sizeMixins || {[vgSizeChannel]: defaultSizeRef(vgSizeChannel, scaleName, scale, config, bandSize)};\n\n /*\n Band scales with size value and all point scales, use xc/yc + band=0.5\n\n Otherwise (band scales that has size based on a band ref), use x/y with position band = (1 - size_band) / 2.\n In this case, size_band is the band specified in the x/y-encoding.\n By default band is 1, so `(1 - band) / 2` = 0.\n If band is 0.6, the the x/y position in such case should be `(1 - band) / 2` = 0.2\n */\n\n const defaultBandAlign = scale?.get('type') !== 'band' || !('band' in sizeMixins[vgSizeChannel]) ? 'middle' : 'top';\n\n const vgChannel = vgAlignedPositionChannel(channel, markDef, config, defaultBandAlign);\n const center = vgChannel === 'xc' || vgChannel === 'yc';\n const offset = getOffset(channel, markDef);\n\n const posRef = ref.midPointRefWithPositionInvalidTest({\n channel,\n channelDef: fieldDef,\n markDef,\n config,\n scaleName,\n scale,\n stack,\n offset,\n defaultRef: pointPositionDefaultRef({model, defaultPos: 'mid', channel, scaleName, scale}),\n bandPosition: center\n ? 0.5\n : isSignalRef(bandSize)\n ? {signal: `(1-${bandSize})/2`}\n : isRelativeBandSize(bandSize)\n ? (1 - bandSize.band) / 2\n : 0\n });\n\n if (vgSizeChannel) {\n return {[vgChannel]: posRef, ...sizeMixins};\n } else {\n // otherwise, we must simulate size by setting position2 = position + size\n // (for theta/radius since Vega doesn't have thetaWidth/radiusWidth)\n const vgChannel2 = getVgPositionChannel(channel2);\n const sizeRef = sizeMixins[vgSizeChannel];\n const sizeOffset = offset ? {...sizeRef, offset} : sizeRef;\n return {\n [vgChannel]: posRef,\n\n // posRef might be an array that wraps position invalid test\n [vgChannel2]: isArray(posRef)\n ? [posRef[0], {...posRef[1], offset: sizeOffset}]\n : {\n ...posRef,\n offset: sizeOffset\n }\n };\n }\n}\n\nfunction getBinSpacing(\n channel: PositionChannel | PolarPositionChannel,\n spacing: number,\n reverse: boolean | SignalRef,\n translate: number | SignalRef,\n offset: number | SignalRef\n) {\n if (isPolarPositionChannel(channel)) {\n return 0;\n }\n\n const spacingOffset = channel === 'x' || channel === 'y2' ? -spacing / 2 : spacing / 2;\n\n if (isSignalRef(reverse) || isSignalRef(offset) || isSignalRef(translate)) {\n const reverseExpr = signalOrStringValue(reverse);\n const offsetExpr = signalOrStringValue(offset);\n const translateExpr = signalOrStringValue(translate);\n\n const t = translateExpr ? `${translateExpr} + ` : '';\n const r = reverseExpr ? `(${reverseExpr} ? -1 : 1) * ` : '';\n const o = offsetExpr ? `(${offsetExpr} + ${spacingOffset})` : spacingOffset;\n\n return {\n signal: t + r + o\n };\n } else {\n offset = offset || 0;\n return translate + (reverse ? -offset - spacingOffset : +offset + spacingOffset);\n }\n}\n\nexport function rectBinPosition({\n fieldDef,\n fieldDef2,\n channel,\n bandSize,\n scaleName,\n markDef,\n spacing = 0,\n axisTranslate,\n reverse,\n config\n}: {\n fieldDef: TypedFieldDef;\n fieldDef2?: Encoding['x2' | 'y2'];\n channel: 'x' | 'y' | 'theta' | 'radius';\n bandSize: number | RelativeBandSize | SignalRef | undefined;\n scaleName: string;\n markDef: MarkDef;\n spacing?: number;\n axisTranslate: number | SignalRef;\n reverse: boolean | SignalRef;\n config: Config;\n}) {\n const channel2 = getSecondaryRangeChannel(channel);\n\n const vgChannel = getVgPositionChannel(channel);\n const vgChannel2 = getVgPositionChannel(channel2);\n\n const offset = getOffset(channel, markDef);\n\n const bandPosition = isSignalRef(bandSize)\n ? {signal: `(1-${bandSize.signal})/2`}\n : isRelativeBandSize(bandSize)\n ? (1 - bandSize.band) / 2\n : 0.5;\n\n if (isBinning(fieldDef.bin) || fieldDef.timeUnit) {\n return {\n [vgChannel2]: rectBinRef({\n channel,\n fieldDef,\n scaleName,\n markDef,\n bandPosition,\n offset: getBinSpacing(channel2, spacing, reverse, axisTranslate, offset),\n config\n }),\n [vgChannel]: rectBinRef({\n channel,\n fieldDef,\n scaleName,\n markDef,\n bandPosition: isSignalRef(bandPosition) ? {signal: `1-${bandPosition.signal}`} : 1 - bandPosition,\n offset: getBinSpacing(channel, spacing, reverse, axisTranslate, offset),\n config\n })\n };\n } else if (isBinned(fieldDef.bin)) {\n const startRef = ref.valueRefForFieldOrDatumDef(\n fieldDef,\n scaleName,\n {},\n {offset: getBinSpacing(channel2, spacing, reverse, axisTranslate, offset)}\n );\n\n if (isFieldDef(fieldDef2)) {\n return {\n [vgChannel2]: startRef,\n [vgChannel]: ref.valueRefForFieldOrDatumDef(\n fieldDef2,\n scaleName,\n {},\n {offset: getBinSpacing(channel, spacing, reverse, axisTranslate, offset)}\n )\n };\n } else if (isBinParams(fieldDef.bin) && fieldDef.bin.step) {\n return {\n [vgChannel2]: startRef,\n [vgChannel]: {\n signal: `scale(\"${scaleName}\", ${vgField(fieldDef, {expr: 'datum'})} + ${fieldDef.bin.step})`,\n offset: getBinSpacing(channel, spacing, reverse, axisTranslate, offset)\n }\n };\n }\n }\n log.warn(log.message.channelRequiredForBinned(channel2));\n return undefined;\n}\n\n/**\n * Value Ref for binned fields\n */\nexport function rectBinRef({\n channel,\n fieldDef,\n scaleName,\n markDef,\n bandPosition,\n offset,\n config\n}: {\n channel: PositionChannel | PolarPositionChannel;\n fieldDef: TypedFieldDef;\n scaleName: string;\n markDef: MarkDef;\n bandPosition: number | SignalRef;\n offset?: number | SignalRef;\n config?: Config;\n}) {\n const r = ref.interpolatedSignalRef({\n scaleName,\n fieldOrDatumDef: fieldDef,\n bandPosition,\n offset\n });\n\n return ref.wrapPositionInvalidTest({\n fieldDef,\n channel,\n markDef,\n ref: r,\n config\n });\n}\n","import {array} from 'vega-util';\nimport {Channel, ScaleChannel, SCALE_CHANNELS} from '../../../channel';\nimport {isPathMark, MarkDef} from '../../../mark';\nimport {hasContinuousDomain} from '../../../scale';\nimport {Dict, keys} from '../../../util';\nimport {VgEncodeEntry, VgValueRef, VG_MARK_CONFIGS} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {aria} from './aria';\nimport {color} from './color';\nimport {nonPosition} from './nonposition';\nimport {text} from './text';\nimport {tooltip} from './tooltip';\nimport {fieldInvalidPredicate} from './valueref';\nimport {zindex} from './zindex';\n\nexport {color} from './color';\nexport {wrapCondition} from './conditional';\nexport {nonPosition} from './nonposition';\nexport {pointPosition} from './position-point';\nexport {pointOrRangePosition, rangePosition} from './position-range';\nexport {rectPosition} from './position-rect';\nexport {text} from './text';\nexport {tooltip} from './tooltip';\n\nexport type Ignore = Record<'color' | 'size' | 'orient' | 'align' | 'baseline' | 'theta', 'ignore' | 'include'>;\n\nconst ALWAYS_IGNORE = new Set(['aria', 'width', 'height']);\n\nexport function baseEncodeEntry(model: UnitModel, ignore: Ignore) {\n const {fill = undefined, stroke = undefined} = ignore.color === 'include' ? color(model) : {};\n return {\n ...markDefProperties(model.markDef, ignore),\n ...wrapAllFieldsInvalid(model, 'fill', fill),\n ...wrapAllFieldsInvalid(model, 'stroke', stroke),\n ...nonPosition('opacity', model),\n ...nonPosition('fillOpacity', model),\n ...nonPosition('strokeOpacity', model),\n ...nonPosition('strokeWidth', model),\n ...nonPosition('strokeDash', model),\n ...zindex(model),\n ...tooltip(model),\n ...text(model, 'href'),\n ...aria(model)\n };\n}\n\n// TODO: mark VgValueRef[] as readonly after https://github.com/vega/vega/pull/1987\nfunction wrapAllFieldsInvalid(model: UnitModel, channel: Channel, valueRef: VgValueRef | VgValueRef[]): VgEncodeEntry {\n const {config, mark, markDef} = model;\n\n const invalid = getMarkPropOrConfig('invalid', markDef, config);\n\n if (invalid === 'hide' && valueRef && !isPathMark(mark)) {\n // For non-path marks, we have to exclude invalid values (null and NaN) for scales with continuous domains.\n // For path marks, we will use \"defined\" property and skip these values instead.\n const test = allFieldsInvalidPredicate(model, {invalid: true, channels: SCALE_CHANNELS});\n if (test) {\n return {\n [channel]: [\n // prepend the invalid case\n // TODO: support custom value\n {test, value: null},\n ...array(valueRef)\n ]\n };\n }\n }\n return valueRef ? {[channel]: valueRef} : {};\n}\n\nfunction markDefProperties(mark: MarkDef, ignore: Ignore) {\n return VG_MARK_CONFIGS.reduce((m, prop) => {\n if (!ALWAYS_IGNORE.has(prop) && mark[prop] !== undefined && ignore[prop] !== 'ignore') {\n m[prop] = signalOrValueRef(mark[prop]);\n }\n return m;\n }, {});\n}\n\nfunction allFieldsInvalidPredicate(\n model: UnitModel,\n {invalid = false, channels}: {invalid?: boolean; channels: ScaleChannel[]}\n) {\n const filterIndex = channels.reduce((aggregator: Dict, channel) => {\n const scaleComponent = model.getScaleComponent(channel);\n if (scaleComponent) {\n const scaleType = scaleComponent.get('type');\n const field = model.vgField(channel, {expr: 'datum'});\n\n // While discrete domain scales can handle invalid values, continuous scales can't.\n if (field && hasContinuousDomain(scaleType)) {\n aggregator[field] = true;\n }\n }\n return aggregator;\n }, {});\n\n const fields = keys(filterIndex);\n if (fields.length > 0) {\n const op = invalid ? '||' : '&&';\n return fields.map(field => fieldInvalidPredicate(field, invalid)).join(` ${op} `);\n }\n return undefined;\n}\n","import {POSITION_SCALE_CHANNELS} from '../../../channel';\nimport {ScaleChannel} from '../../../channel';\nimport {Value} from '../../../channeldef';\nimport {hasContinuousDomain} from '../../../scale';\nimport {Dict, keys} from '../../../util';\nimport {VgEncodeEntry} from '../../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../../common';\nimport {UnitModel} from '../../unit';\nimport {fieldInvalidPredicate} from './valueref';\n\nexport function defined(model: UnitModel): VgEncodeEntry {\n const {config, markDef} = model;\n\n const invalid = getMarkPropOrConfig('invalid', markDef, config);\n if (invalid) {\n const signal = allFieldsInvalidPredicate(model, {channels: POSITION_SCALE_CHANNELS});\n\n if (signal) {\n return {defined: {signal}};\n }\n }\n return {};\n}\n\nfunction allFieldsInvalidPredicate(\n model: UnitModel,\n {invalid = false, channels}: {invalid?: boolean; channels: ScaleChannel[]}\n) {\n const filterIndex = channels.reduce((aggregator: Dict, channel) => {\n const scaleComponent = model.getScaleComponent(channel);\n if (scaleComponent) {\n const scaleType = scaleComponent.get('type');\n const field = model.vgField(channel, {expr: 'datum'});\n\n // While discrete domain scales can handle invalid values, continuous scales can't.\n if (field && hasContinuousDomain(scaleType)) {\n aggregator[field] = true;\n }\n }\n return aggregator;\n }, {});\n\n const fields = keys(filterIndex);\n if (fields.length > 0) {\n const op = invalid ? '||' : '&&';\n return fields.map(field => fieldInvalidPredicate(field, invalid)).join(` ${op} `);\n }\n return undefined;\n}\n\nexport function valueIfDefined(prop: string, value: Value): VgEncodeEntry {\n if (value !== undefined) {\n return {[prop]: signalOrValueRef(value)};\n }\n return undefined;\n}\n","import * as log from '../../log';\nimport {isPathMark} from '../../mark';\nimport {tooltip} from '../mark/encode';\nimport {SelectionCompiler} from '.';\n\nconst VORONOI = 'voronoi';\n\nconst nearest: SelectionCompiler<'point'> = {\n defined: selCmpt => {\n return selCmpt.type === 'point' && selCmpt.nearest;\n },\n\n parse: (model, selCmpt) => {\n // Scope selection events to the voronoi mark to prevent capturing\n // events that occur on the group mark (https://github.com/vega/vega/issues/2112).\n if (selCmpt.events) {\n for (const s of selCmpt.events) {\n s.markname = model.getName(VORONOI);\n }\n }\n },\n\n marks: (model, selCmpt, marks) => {\n const {x, y} = selCmpt.project.hasChannel;\n const markType = model.mark;\n if (isPathMark(markType)) {\n log.warn(log.message.nearestNotSupportForContinuous(markType));\n return marks;\n }\n\n const cellDef = {\n name: model.getName(VORONOI),\n type: 'path',\n interactive: true,\n from: {data: model.getName('marks')},\n encode: {\n update: {\n fill: {value: 'transparent'},\n strokeWidth: {value: 0.35},\n stroke: {value: 'transparent'},\n isVoronoi: {value: true},\n ...tooltip(model, {reactiveGeom: true})\n }\n },\n transform: [\n {\n type: 'voronoi',\n x: {expr: x || !y ? 'datum.datum.x || 0' : '0'},\n y: {expr: y || !x ? 'datum.datum.y || 0' : '0'},\n size: [model.getSizeSignalRef('width'), model.getSizeSignalRef('height')]\n }\n ]\n };\n\n let index = 0;\n let exists = false;\n marks.forEach((mark, i) => {\n const name = mark.name ?? '';\n if (name === model.component.mark[0].name) {\n index = i;\n } else if (name.indexOf(VORONOI) >= 0) {\n exists = true;\n }\n });\n\n if (!exists) {\n marks.splice(index + 1, 0, cellDef);\n }\n\n return marks;\n }\n};\n\nexport default nearest;\n","import {stringValue} from 'vega-util';\nimport {disableDirectManipulation, TUPLE} from '.';\nimport {varName} from '../../util';\nimport {assembleInit} from './assemble';\nimport nearest from './nearest';\nimport {TUPLE_FIELDS} from './project';\nimport {SelectionCompiler} from '.';\nimport {isLegendBinding} from '../../selection';\n\nconst inputBindings: SelectionCompiler<'point'> = {\n defined: selCmpt => {\n return (\n selCmpt.type === 'point' &&\n selCmpt.resolve === 'global' &&\n selCmpt.bind &&\n selCmpt.bind !== 'scales' &&\n !isLegendBinding(selCmpt.bind)\n );\n },\n\n parse: (model, selCmpt, selDef) => disableDirectManipulation(selCmpt, selDef),\n\n topLevelSignals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const proj = selCmpt.project;\n const bind = selCmpt.bind;\n const init = selCmpt.init && selCmpt.init[0]; // Can only exist on single selections (one initial value).\n const datum = nearest.defined(selCmpt) ? '(item().isVoronoi ? datum.datum : datum)' : 'datum';\n\n proj.items.forEach((p, i) => {\n const sgname = varName(`${name}_${p.field}`);\n const hasSignal = signals.filter(s => s.name === sgname);\n\n if (!hasSignal.length) {\n signals.unshift({\n name: sgname,\n ...(init ? {init: assembleInit(init[i])} : {value: null}),\n on: selCmpt.events\n ? [\n {\n events: selCmpt.events,\n update: `datum && item().mark.marktype !== 'group' ? ${datum}[${stringValue(p.field)}] : null`\n }\n ]\n : [],\n bind: bind[p.field] ?? bind[p.channel] ?? bind\n });\n }\n });\n\n return signals;\n },\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const proj = selCmpt.project;\n const signal = signals.filter(s => s.name === name + TUPLE)[0];\n const fields = name + TUPLE_FIELDS;\n const values = proj.items.map(p => varName(`${name}_${p.field}`));\n const valid = values.map(v => `${v} !== null`).join(' && ');\n\n if (values.length) {\n signal.update = `${valid} ? {fields: ${fields}, values: [${values.join(', ')}]} : null`;\n }\n\n delete signal.value;\n delete signal.on;\n\n return signals;\n }\n};\n\nexport default inputBindings;\n","import {TUPLE, unitName} from '.';\nimport {SelectionCompiler} from '.';\n\nexport const TOGGLE = '_toggle';\n\nconst toggle: SelectionCompiler<'point'> = {\n defined: selCmpt => {\n return selCmpt.type === 'point' && !!selCmpt.toggle;\n },\n\n signals: (model, selCmpt, signals) => {\n return signals.concat({\n name: selCmpt.name + TOGGLE,\n value: false,\n on: [{events: selCmpt.events, update: selCmpt.toggle}]\n });\n },\n\n modifyExpr: (model, selCmpt) => {\n const tpl = selCmpt.name + TUPLE;\n const signal = selCmpt.name + TOGGLE;\n\n return (\n `${signal} ? null : ${tpl}, ` +\n (selCmpt.resolve === 'global' ? `${signal} ? null : true, ` : `${signal} ? null : {unit: ${unitName(model)}}, `) +\n `${signal} ? ${tpl} : null`\n );\n }\n};\n\nexport default toggle;\n","import {Update} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {isString} from 'vega-util';\nimport {TUPLE} from '.';\nimport {varName} from '../../util';\nimport inputBindings from './inputs';\nimport toggle, {TOGGLE} from './toggle';\nimport {SelectionCompiler} from '.';\n\nconst clear: SelectionCompiler = {\n defined: selCmpt => {\n return selCmpt.clear !== undefined && selCmpt.clear !== false;\n },\n\n parse: (model, selCmpt) => {\n if (selCmpt.clear) {\n selCmpt.clear = isString(selCmpt.clear) ? parseSelector(selCmpt.clear, 'view') : selCmpt.clear;\n }\n },\n\n topLevelSignals: (model, selCmpt, signals) => {\n if (inputBindings.defined(selCmpt)) {\n for (const proj of selCmpt.project.items) {\n const idx = signals.findIndex(n => n.name === varName(`${selCmpt.name}_${proj.field}`));\n if (idx !== -1) {\n signals[idx].on.push({events: selCmpt.clear, update: 'null'});\n }\n }\n }\n\n return signals;\n },\n\n signals: (model, selCmpt, signals) => {\n function addClear(idx: number, update: Update) {\n if (idx !== -1 && signals[idx].on) {\n signals[idx].on.push({events: selCmpt.clear, update});\n }\n }\n\n // Be as minimalist as possible when adding clear triggers to minimize dataflow execution.\n if (selCmpt.type === 'interval') {\n for (const proj of selCmpt.project.items) {\n const vIdx = signals.findIndex(n => n.name === proj.signals.visual);\n addClear(vIdx, '[0, 0]');\n\n if (vIdx === -1) {\n const dIdx = signals.findIndex(n => n.name === proj.signals.data);\n addClear(dIdx, 'null');\n }\n }\n } else {\n let tIdx = signals.findIndex(n => n.name === selCmpt.name + TUPLE);\n addClear(tIdx, 'null');\n\n if (toggle.defined(selCmpt)) {\n tIdx = signals.findIndex(n => n.name === selCmpt.name + TOGGLE);\n addClear(tIdx, 'false');\n }\n }\n\n return signals;\n }\n};\n\nexport default clear;\n","import {isObject, MergedStream, Stream} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {array, isString} from 'vega-util';\nimport {disableDirectManipulation, TUPLE} from '.';\nimport {NonPositionScaleChannel} from '../../channel';\nimport * as log from '../../log';\nimport {isLegendBinding, isLegendStreamBinding, SELECTION_ID} from '../../selection';\nimport {duplicate, vals, varName} from '../../util';\nimport {LegendComponent} from '../legend/component';\nimport {UnitModel} from '../unit';\nimport {TUPLE_FIELDS} from './project';\nimport {TOGGLE} from './toggle';\nimport {SelectionCompiler} from '.';\n\nconst legendBindings: SelectionCompiler<'point'> = {\n defined: selCmpt => {\n const spec = selCmpt.resolve === 'global' && selCmpt.bind && isLegendBinding(selCmpt.bind);\n const projLen = selCmpt.project.items.length === 1 && selCmpt.project.items[0].field !== SELECTION_ID;\n if (spec && !projLen) {\n log.warn(log.message.LEGEND_BINDINGS_MUST_HAVE_PROJECTION);\n }\n\n return spec && projLen;\n },\n\n parse: (model, selCmpt, selDef) => {\n // Allow legend items to be toggleable by default even though direct manipulation is disabled.\n const selDef_ = duplicate(selDef);\n selDef_.select = isString(selDef_.select)\n ? {type: selDef_.select, toggle: selCmpt.toggle}\n : {...selDef_.select, toggle: selCmpt.toggle};\n disableDirectManipulation(selCmpt, selDef_);\n\n if (isObject(selDef.select) && (selDef.select.on || selDef.select.clear)) {\n const legendFilter = 'event.item && indexof(event.item.mark.role, \"legend\") < 0';\n for (const evt of selCmpt.events) {\n evt.filter = array(evt.filter ?? []);\n if (!evt.filter.includes(legendFilter)) {\n evt.filter.push(legendFilter);\n }\n }\n }\n\n const evt = isLegendStreamBinding(selCmpt.bind) ? selCmpt.bind.legend : 'click';\n const stream: Stream[] = isString(evt) ? parseSelector(evt, 'view') : array(evt);\n selCmpt.bind = {legend: {merge: stream}};\n },\n\n topLevelSignals: (model, selCmpt, signals) => {\n const selName = selCmpt.name;\n const stream = isLegendStreamBinding(selCmpt.bind) && (selCmpt.bind.legend as MergedStream);\n const markName = (name: string) => (s: Stream) => {\n const ds = duplicate(s);\n ds.markname = name;\n return ds;\n };\n\n for (const proj of selCmpt.project.items) {\n if (!proj.hasLegend) continue;\n const prefix = `${varName(proj.field)}_legend`;\n const sgName = `${selName}_${prefix}`;\n const hasSignal = signals.filter(s => s.name === sgName);\n\n if (hasSignal.length === 0) {\n const events = stream.merge\n .map(markName(`${prefix}_symbols`))\n .concat(stream.merge.map(markName(`${prefix}_labels`)))\n .concat(stream.merge.map(markName(`${prefix}_entries`)));\n\n signals.unshift({\n name: sgName,\n ...(!selCmpt.init ? {value: null} : {}),\n on: [\n // Legend entries do not store values, so we need to walk the scenegraph to the symbol datum.\n {events, update: 'datum.value || item().items[0].items[0].datum.value', force: true},\n {events: stream.merge, update: `!event.item || !datum ? null : ${sgName}`, force: true}\n ]\n });\n }\n }\n\n return signals;\n },\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const proj = selCmpt.project;\n const tuple = signals.find(s => s.name === name + TUPLE);\n const fields = name + TUPLE_FIELDS;\n const values = proj.items.filter(p => p.hasLegend).map(p => varName(`${name}_${varName(p.field)}_legend`));\n const valid = values.map(v => `${v} !== null`).join(' && ');\n const update = `${valid} ? {fields: ${fields}, values: [${values.join(', ')}]} : null`;\n\n if (selCmpt.events && values.length > 0) {\n tuple.on.push({\n events: values.map(signal => ({signal})),\n update\n });\n } else if (values.length > 0) {\n tuple.update = update;\n delete tuple.value;\n delete tuple.on;\n }\n\n const toggle = signals.find(s => s.name === name + TOGGLE);\n const events = isLegendStreamBinding(selCmpt.bind) && selCmpt.bind.legend;\n if (toggle) {\n if (!selCmpt.events) toggle.on[0].events = events;\n else toggle.on.push({...toggle.on[0], events});\n }\n\n return signals;\n }\n};\n\nexport default legendBindings;\n\nexport function parseInteractiveLegend(\n model: UnitModel,\n channel: NonPositionScaleChannel,\n legendCmpt: LegendComponent\n) {\n const field = model.fieldDef(channel)?.field;\n for (const selCmpt of vals(model.component.selection ?? {})) {\n const proj = selCmpt.project.hasField[field] ?? selCmpt.project.hasChannel[channel];\n if (proj && legendBindings.defined(selCmpt)) {\n const legendSelections = legendCmpt.get('selections') ?? [];\n legendSelections.push(selCmpt.name);\n legendCmpt.set('selections', legendSelections, false);\n proj.hasLegend = true;\n }\n }\n}\n","import {NewSignal} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {SelectionComponent} from '.';\nimport {ScaleChannel, X, Y} from '../../channel';\nimport {UnitModel} from '../unit';\nimport {BRUSH as INTERVAL_BRUSH} from './interval';\nimport {SelectionProjection} from './project';\nimport scalesCompiler, {domain} from './scales';\nimport {SelectionCompiler} from '.';\n\nconst ANCHOR = '_translate_anchor';\nconst DELTA = '_translate_delta';\n\nconst translate: SelectionCompiler<'interval'> = {\n defined: selCmpt => {\n return selCmpt.type === 'interval' && selCmpt.translate;\n },\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const hasScales = scalesCompiler.defined(selCmpt);\n const anchor = name + ANCHOR;\n const {x, y} = selCmpt.project.hasChannel;\n let events = parseSelector(selCmpt.translate, 'scope');\n\n if (!hasScales) {\n events = events.map(e => ((e.between[0].markname = name + INTERVAL_BRUSH), e));\n }\n\n signals.push(\n {\n name: anchor,\n value: {},\n on: [\n {\n events: events.map(e => e.between[0]),\n update:\n '{x: x(unit), y: y(unit)' +\n (x !== undefined ? `, extent_x: ${hasScales ? domain(model, X) : `slice(${x.signals.visual})`}` : '') +\n (y !== undefined ? `, extent_y: ${hasScales ? domain(model, Y) : `slice(${y.signals.visual})`}` : '') +\n '}'\n }\n ]\n },\n {\n name: name + DELTA,\n value: {},\n on: [\n {\n events: events,\n update: `{x: ${anchor}.x - x(unit), y: ${anchor}.y - y(unit)}`\n }\n ]\n }\n );\n\n if (x !== undefined) {\n onDelta(model, selCmpt, x, 'width', signals);\n }\n\n if (y !== undefined) {\n onDelta(model, selCmpt, y, 'height', signals);\n }\n\n return signals;\n }\n};\n\nexport default translate;\n\nfunction onDelta(\n model: UnitModel,\n selCmpt: SelectionComponent,\n proj: SelectionProjection,\n size: 'width' | 'height',\n signals: NewSignal[]\n) {\n const name = selCmpt.name;\n const anchor = name + ANCHOR;\n const delta = name + DELTA;\n const channel = proj.channel as ScaleChannel;\n const hasScales = scalesCompiler.defined(selCmpt);\n const signal = signals.filter(s => s.name === proj.signals[hasScales ? 'data' : 'visual'])[0];\n const sizeSg = model.getSizeSignalRef(size).signal;\n const scaleCmpt = model.getScaleComponent(channel);\n const scaleType = scaleCmpt.get('type');\n const reversed = scaleCmpt.get('reverse'); // scale parsing sets this flag for fieldDef.sort\n const sign = !hasScales ? '' : channel === X ? (reversed ? '' : '-') : reversed ? '-' : '';\n const extent = `${anchor}.extent_${channel}`;\n const offset = `${sign}${delta}.${channel} / ${hasScales ? `${sizeSg}` : `span(${extent})`}`;\n const panFn = !hasScales\n ? 'panLinear'\n : scaleType === 'log'\n ? 'panLog'\n : scaleType === 'symlog'\n ? 'panSymlog'\n : scaleType === 'pow'\n ? 'panPow'\n : 'panLinear';\n const arg = !hasScales\n ? ''\n : scaleType === 'pow'\n ? `, ${scaleCmpt.get('exponent') ?? 1}`\n : scaleType === 'symlog'\n ? `, ${scaleCmpt.get('constant') ?? 1}`\n : '';\n const update = `${panFn}(${extent}, ${offset}${arg})`;\n\n signal.on.push({\n events: {signal: delta},\n update: hasScales ? update : `clampRange(${update}, 0, ${sizeSg})`\n });\n}\n","import {NewSignal} from 'vega';\nimport {selector as parseSelector} from 'vega-event-selector';\nimport {stringValue} from 'vega-util';\nimport {SelectionComponent} from '.';\nimport {ScaleChannel, X, Y} from '../../channel';\nimport {UnitModel} from '../unit';\nimport {BRUSH as INTERVAL_BRUSH} from './interval';\nimport {SelectionProjection} from './project';\nimport {default as scalesCompiler, domain} from './scales';\nimport {SelectionCompiler} from '.';\n\nconst ANCHOR = '_zoom_anchor';\nconst DELTA = '_zoom_delta';\n\nconst zoom: SelectionCompiler<'interval'> = {\n defined: selCmpt => {\n return selCmpt.type === 'interval' && selCmpt.zoom;\n },\n\n signals: (model, selCmpt, signals) => {\n const name = selCmpt.name;\n const hasScales = scalesCompiler.defined(selCmpt);\n const delta = name + DELTA;\n const {x, y} = selCmpt.project.hasChannel;\n const sx = stringValue(model.scaleName(X));\n const sy = stringValue(model.scaleName(Y));\n let events = parseSelector(selCmpt.zoom, 'scope');\n\n if (!hasScales) {\n events = events.map(e => ((e.markname = name + INTERVAL_BRUSH), e));\n }\n\n signals.push(\n {\n name: name + ANCHOR,\n on: [\n {\n events: events,\n update: !hasScales\n ? `{x: x(unit), y: y(unit)}`\n : '{' +\n [sx ? `x: invert(${sx}, x(unit))` : '', sy ? `y: invert(${sy}, y(unit))` : '']\n .filter(expr => !!expr)\n .join(', ') +\n '}'\n }\n ]\n },\n {\n name: delta,\n on: [\n {\n events: events,\n force: true,\n update: 'pow(1.001, event.deltaY * pow(16, event.deltaMode))'\n }\n ]\n }\n );\n\n if (x !== undefined) {\n onDelta(model, selCmpt, x, 'width', signals);\n }\n\n if (y !== undefined) {\n onDelta(model, selCmpt, y, 'height', signals);\n }\n\n return signals;\n }\n};\n\nexport default zoom;\n\nfunction onDelta(\n model: UnitModel,\n selCmpt: SelectionComponent,\n proj: SelectionProjection,\n size: 'width' | 'height',\n signals: NewSignal[]\n) {\n const name = selCmpt.name;\n const channel = proj.channel as ScaleChannel;\n const hasScales = scalesCompiler.defined(selCmpt);\n const signal = signals.filter(s => s.name === proj.signals[hasScales ? 'data' : 'visual'])[0];\n const sizeSg = model.getSizeSignalRef(size).signal;\n const scaleCmpt = model.getScaleComponent(channel);\n const scaleType = scaleCmpt.get('type');\n const base = hasScales ? domain(model, channel) : signal.name;\n const delta = name + DELTA;\n const anchor = `${name}${ANCHOR}.${channel}`;\n const zoomFn = !hasScales\n ? 'zoomLinear'\n : scaleType === 'log'\n ? 'zoomLog'\n : scaleType === 'symlog'\n ? 'zoomSymlog'\n : scaleType === 'pow'\n ? 'zoomPow'\n : 'zoomLinear';\n const arg = !hasScales\n ? ''\n : scaleType === 'pow'\n ? `, ${scaleCmpt.get('exponent') ?? 1}`\n : scaleType === 'symlog'\n ? `, ${scaleCmpt.get('constant') ?? 1}`\n : '';\n const update = `${zoomFn}(${base}, ${anchor}, ${delta}${arg})`;\n\n signal.on.push({\n events: {signal: delta},\n update: hasScales ? update : `clampRange(${update}, 0, ${sizeSg})`\n });\n}\n","import {Binding, isString, NewSignal, Signal, Stream} from 'vega';\nimport {stringValue} from 'vega-util';\nimport {FACET_CHANNELS} from '../../channel';\nimport {\n BrushConfig,\n LegendBinding,\n SelectionInit,\n SelectionInitInterval,\n SelectionResolution,\n SelectionType,\n SELECTION_ID\n} from '../../selection';\nimport {Dict, vals} from '../../util';\nimport {OutputNode} from '../data/dataflow';\nimport {FacetModel} from '../facet';\nimport {isFacetModel, Model} from '../model';\nimport {UnitModel} from '../unit';\nimport interval from './interval';\nimport point from './point';\nimport {SelectionProjection, SelectionProjectionComponent} from './project';\nimport {SelectionParameter} from '../../selection';\nimport clear from './clear';\nimport inputs from './inputs';\nimport nearest from './nearest';\nimport project from './project';\nimport scales from './scales';\nimport legends from './legends';\nimport toggle from './toggle';\nimport translate from './translate';\nimport zoom from './zoom';\nimport {ParameterName} from '../../parameter';\n\nexport const STORE = '_store';\nexport const TUPLE = '_tuple';\nexport const MODIFY = '_modify';\nexport const SELECTION_DOMAIN = '_selection_domain_';\nexport const VL_SELECTION_RESOLVE = 'vlSelectionResolve';\n\nexport interface SelectionComponent {\n name: ParameterName;\n type: T;\n // Use conditional types for stricter type of init (as the type of init depends on selection type).\n init?: (T extends 'interval' ? SelectionInitInterval : T extends 'point' ? SelectionInit : never)[][];\n events: Stream[];\n materialized: OutputNode;\n bind?: 'scales' | Binding | Dict | LegendBinding;\n resolve: SelectionResolution;\n mark?: BrushConfig;\n\n // Transforms\n project: SelectionProjectionComponent;\n scales?: SelectionProjection[];\n toggle?: string;\n translate?: any;\n zoom?: any;\n nearest?: any;\n clear?: any;\n}\n\nexport interface SelectionCompiler {\n defined: (selCmpt: SelectionComponent) => boolean;\n parse?: (model: UnitModel, selCmpt: SelectionComponent, def: SelectionParameter) => void;\n signals?: (model: UnitModel, selCmpt: SelectionComponent, signals: NewSignal[]) => Signal[]; // the output can be a new or a push signal\n topLevelSignals?: (model: Model, selCmpt: SelectionComponent, signals: NewSignal[]) => NewSignal[];\n modifyExpr?: (model: UnitModel, selCmpt: SelectionComponent, expr: string) => string;\n marks?: (model: UnitModel, selCmpt: SelectionComponent, marks: any[]) => any[];\n}\n\n// Order matters for parsing and assembly.\nexport const selectionCompilers: SelectionCompiler[] = [\n point,\n interval,\n project,\n toggle,\n\n // Bindings may disable direct manipulation.\n inputs,\n scales,\n legends,\n\n clear,\n translate,\n zoom,\n nearest\n];\n\nfunction getFacetModel(model: Model): FacetModel {\n let parent = model.parent;\n while (parent) {\n if (isFacetModel(parent)) break;\n parent = parent.parent;\n }\n\n return parent as FacetModel;\n}\n\nexport function unitName(model: Model, {escape} = {escape: true}) {\n let name = escape ? stringValue(model.name) : model.name;\n const facetModel = getFacetModel(model);\n if (facetModel) {\n const {facet} = facetModel;\n for (const channel of FACET_CHANNELS) {\n if (facet[channel]) {\n name += ` + '__facet_${channel}_' + (facet[${stringValue(facetModel.vgField(channel))}])`;\n }\n }\n }\n return name;\n}\n\nexport function requiresSelectionId(model: Model) {\n return vals(model.component.selection ?? {}).reduce((identifier, selCmpt) => {\n return identifier || selCmpt.project.items.some(proj => proj.field === SELECTION_ID);\n }, false);\n}\n\n// Binding a point selection to query widgets or legends disables default direct manipulation interaction.\n// A user can choose to re-enable it by explicitly specifying triggering input events.\nexport function disableDirectManipulation(selCmpt: SelectionComponent, selDef: SelectionParameter<'point'>) {\n if (isString(selDef.select) || !selDef.select.on) delete selCmpt.events;\n if (isString(selDef.select) || !selDef.select.clear) delete selCmpt.clear;\n if (isString(selDef.select) || !selDef.select.toggle) delete selCmpt.toggle;\n}\n","import { error, toSet, isFunction, isString, hasOwnProperty } from 'vega-util';\n\nconst RawCode = 'RawCode';\nconst Literal = 'Literal';\nconst Property = 'Property';\nconst Identifier = 'Identifier';\nconst ArrayExpression = 'ArrayExpression';\nconst BinaryExpression = 'BinaryExpression';\nconst CallExpression = 'CallExpression';\nconst ConditionalExpression = 'ConditionalExpression';\nconst LogicalExpression = 'LogicalExpression';\nconst MemberExpression = 'MemberExpression';\nconst ObjectExpression = 'ObjectExpression';\nconst UnaryExpression = 'UnaryExpression';\nfunction ASTNode(type) {\n this.type = type;\n}\n\nASTNode.prototype.visit = function (visitor) {\n let c, i, n;\n if (visitor(this)) return 1;\n\n for (c = children(this), i = 0, n = c.length; i < n; ++i) {\n if (c[i].visit(visitor)) return 1;\n }\n};\n\nfunction children(node) {\n switch (node.type) {\n case ArrayExpression:\n return node.elements;\n\n case BinaryExpression:\n case LogicalExpression:\n return [node.left, node.right];\n\n case CallExpression:\n return [node.callee].concat(node.arguments);\n\n case ConditionalExpression:\n return [node.test, node.consequent, node.alternate];\n\n case MemberExpression:\n return [node.object, node.property];\n\n case ObjectExpression:\n return node.properties;\n\n case Property:\n return [node.key, node.value];\n\n case UnaryExpression:\n return [node.argument];\n\n case Identifier:\n case Literal:\n case RawCode:\n default:\n return [];\n }\n}\n\n/*\n The following expression parser is based on Esprima (http://esprima.org/).\n Original header comment and license for Esprima is included here:\n\n Copyright (C) 2013 Ariya Hidayat \n Copyright (C) 2013 Thaddee Tyl \n Copyright (C) 2013 Mathias Bynens \n Copyright (C) 2012 Ariya Hidayat \n Copyright (C) 2012 Mathias Bynens \n Copyright (C) 2012 Joost-Wim Boekesteijn \n Copyright (C) 2012 Kris Kowal \n Copyright (C) 2012 Yusuke Suzuki \n Copyright (C) 2012 Arpad Borsos \n Copyright (C) 2011 Ariya Hidayat \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nvar TokenName, source, index, length, lookahead;\nvar TokenBooleanLiteral = 1,\n TokenEOF = 2,\n TokenIdentifier = 3,\n TokenKeyword = 4,\n TokenNullLiteral = 5,\n TokenNumericLiteral = 6,\n TokenPunctuator = 7,\n TokenStringLiteral = 8,\n TokenRegularExpression = 9;\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\nvar SyntaxArrayExpression = 'ArrayExpression',\n SyntaxBinaryExpression = 'BinaryExpression',\n SyntaxCallExpression = 'CallExpression',\n SyntaxConditionalExpression = 'ConditionalExpression',\n SyntaxIdentifier = 'Identifier',\n SyntaxLiteral = 'Literal',\n SyntaxLogicalExpression = 'LogicalExpression',\n SyntaxMemberExpression = 'MemberExpression',\n SyntaxObjectExpression = 'ObjectExpression',\n SyntaxProperty = 'Property',\n SyntaxUnaryExpression = 'UnaryExpression'; // Error messages should be identical to V8.\n\nvar MessageUnexpectedToken = 'Unexpected token %0',\n MessageUnexpectedNumber = 'Unexpected number',\n MessageUnexpectedString = 'Unexpected string',\n MessageUnexpectedIdentifier = 'Unexpected identifier',\n MessageUnexpectedReserved = 'Unexpected reserved word',\n MessageUnexpectedEOS = 'Unexpected end of input',\n MessageInvalidRegExp = 'Invalid regular expression',\n MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\nvar ILLEGAL = 'ILLEGAL',\n DISABLED = 'Disabled.'; // See also tools/generate-unicode-regex.py.\n\nvar RegexNonAsciiIdentifierStart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'),\n // eslint-disable-next-line no-misleading-character-class\nRegexNonAsciiIdentifierPart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'); // Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n /* istanbul ignore next */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n}\n\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 && ch <= 0x39; // 0..9\n}\n\nfunction isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\n\nfunction isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n} // 7.2 White Space\n\n\nfunction isWhiteSpace(ch) {\n return ch === 0x20 || ch === 0x09 || ch === 0x0B || ch === 0x0C || ch === 0xA0 || ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0;\n} // 7.3 Line Terminators\n\n\nfunction isLineTerminator(ch) {\n return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029;\n} // 7.6 Identifier Names and Identifiers\n\n\nfunction isIdentifierStart(ch) {\n return ch === 0x24 || ch === 0x5F || // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A || // A..Z\n ch >= 0x61 && ch <= 0x7A || // a..z\n ch === 0x5C || // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch));\n}\n\nfunction isIdentifierPart(ch) {\n return ch === 0x24 || ch === 0x5F || // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A || // A..Z\n ch >= 0x61 && ch <= 0x7A || // a..z\n ch >= 0x30 && ch <= 0x39 || // 0..9\n ch === 0x5C || // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch));\n} // 7.6.1.1 Keywords\n\n\nconst keywords = {\n 'if': 1,\n 'in': 1,\n 'do': 1,\n 'var': 1,\n 'for': 1,\n 'new': 1,\n 'try': 1,\n 'let': 1,\n 'this': 1,\n 'else': 1,\n 'case': 1,\n 'void': 1,\n 'with': 1,\n 'enum': 1,\n 'while': 1,\n 'break': 1,\n 'catch': 1,\n 'throw': 1,\n 'const': 1,\n 'yield': 1,\n 'class': 1,\n 'super': 1,\n 'return': 1,\n 'typeof': 1,\n 'delete': 1,\n 'switch': 1,\n 'export': 1,\n 'import': 1,\n 'public': 1,\n 'static': 1,\n 'default': 1,\n 'finally': 1,\n 'extends': 1,\n 'package': 1,\n 'private': 1,\n 'function': 1,\n 'continue': 1,\n 'debugger': 1,\n 'interface': 1,\n 'protected': 1,\n 'instanceof': 1,\n 'implements': 1\n};\n\nfunction skipComment() {\n while (index < length) {\n const ch = source.charCodeAt(index);\n\n if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n ++index;\n } else {\n break;\n }\n }\n}\n\nfunction scanHexEscape(prefix) {\n var i,\n len,\n ch,\n code = 0;\n len = prefix === 'u' ? 4 : 2;\n\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n return String.fromCharCode(code);\n}\n\nfunction scanUnicodeCodePointEscape() {\n var ch, code, cu1, cu2;\n ch = source[index];\n code = 0; // At least, one hex digit is required.\n\n if (ch === '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n while (index < length) {\n ch = source[index++];\n\n if (!isHexDigit(ch)) {\n break;\n }\n\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n\n if (code > 0x10FFFF || ch !== '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } // UTF-16 Encoding\n\n\n if (code <= 0xFFFF) {\n return String.fromCharCode(code);\n }\n\n cu1 = (code - 0x10000 >> 10) + 0xD800;\n cu2 = (code - 0x10000 & 1023) + 0xDC00;\n return String.fromCharCode(cu1, cu2);\n}\n\nfunction getEscapedIdentifier() {\n var ch, id;\n ch = source.charCodeAt(index++);\n id = String.fromCharCode(ch); // '\\u' (U+005C, U+0075) denotes an escaped character.\n\n if (ch === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n ++index;\n ch = scanHexEscape('u');\n\n if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n id = ch;\n }\n\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (!isIdentifierPart(ch)) {\n break;\n }\n\n ++index;\n id += String.fromCharCode(ch); // '\\u' (U+005C, U+0075) denotes an escaped character.\n\n if (ch === 0x5C) {\n id = id.substr(0, id.length - 1);\n\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n ++index;\n ch = scanHexEscape('u');\n\n if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n id += ch;\n }\n }\n\n return id;\n}\n\nfunction getIdentifier() {\n var start, ch;\n start = index++;\n\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getEscapedIdentifier();\n }\n\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n}\n\nfunction scanIdentifier() {\n var start, id, type;\n start = index; // Backslash (U+005C) starts an escaped character.\n\n id = source.charCodeAt(index) === 0x5C ? getEscapedIdentifier() : getIdentifier(); // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n\n if (id.length === 1) {\n type = TokenIdentifier;\n } else if (keywords.hasOwnProperty(id)) {\n // eslint-disable-line no-prototype-builtins\n type = TokenKeyword;\n } else if (id === 'null') {\n type = TokenNullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = TokenBooleanLiteral;\n } else {\n type = TokenIdentifier;\n }\n\n return {\n type: type,\n value: id,\n start: start,\n end: index\n };\n} // 7.7 Punctuators\n\n\nfunction scanPunctuator() {\n var start = index,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2,\n ch3,\n ch4;\n\n switch (code) {\n // Check for most common single-character punctuators.\n case 0x2E: // . dot\n\n case 0x28: // ( open bracket\n\n case 0x29: // ) close bracket\n\n case 0x3B: // ; semicolon\n\n case 0x2C: // , comma\n\n case 0x7B: // { open curly brace\n\n case 0x7D: // } close curly brace\n\n case 0x5B: // [\n\n case 0x5D: // ]\n\n case 0x3A: // :\n\n case 0x3F: // ?\n\n case 0x7E:\n // ~\n ++index;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code),\n start: start,\n end: index\n };\n\n default:\n code2 = source.charCodeAt(index + 1); // '=' (U+003D) marks an assignment or comparison operator.\n\n if (code2 === 0x3D) {\n switch (code) {\n case 0x2B: // +\n\n case 0x2D: // -\n\n case 0x2F: // /\n\n case 0x3C: // <\n\n case 0x3E: // >\n\n case 0x5E: // ^\n\n case 0x7C: // |\n\n case 0x25: // %\n\n case 0x26: // &\n\n case 0x2A:\n // *\n index += 2;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n start: start,\n end: index\n };\n\n case 0x21: // !\n\n case 0x3D:\n // =\n index += 2; // !== and ===\n\n if (source.charCodeAt(index) === 0x3D) {\n ++index;\n }\n\n return {\n type: TokenPunctuator,\n value: source.slice(start, index),\n start: start,\n end: index\n };\n }\n }\n\n } // 4-character punctuator: >>>=\n\n\n ch4 = source.substr(index, 4);\n\n if (ch4 === '>>>=') {\n index += 4;\n return {\n type: TokenPunctuator,\n value: ch4,\n start: start,\n end: index\n };\n } // 3-character punctuators: === !== >>> <<= >>=\n\n\n ch3 = ch4.substr(0, 3);\n\n if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n index += 3;\n return {\n type: TokenPunctuator,\n value: ch3,\n start: start,\n end: index\n };\n } // Other 2-character punctuators: ++ -- << >> && ||\n\n\n ch2 = ch3.substr(0, 2);\n\n if (ch1 === ch2[1] && '+-<>&|'.indexOf(ch1) >= 0 || ch2 === '=>') {\n index += 2;\n return {\n type: TokenPunctuator,\n value: ch2,\n start: start,\n end: index\n };\n }\n\n if (ch2 === '//') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } // 1-character punctuators: < > = ! + - * % & | ^ /\n\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;\n return {\n type: TokenPunctuator,\n value: ch1,\n start: start,\n end: index\n };\n }\n\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n} // 7.8.3 Numeric Literals\n\n\nfunction scanHexLiteral(start) {\n let number = '';\n\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n\n number += source[index++];\n }\n\n if (number.length === 0) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt('0x' + number, 16),\n start: start,\n end: index\n };\n}\n\nfunction scanOctalLiteral(start) {\n let number = '0' + source[index++];\n\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n\n number += source[index++];\n }\n\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt(number, 8),\n octal: true,\n start: start,\n end: index\n };\n}\n\nfunction scanNumericLiteral() {\n var number, start, ch;\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || ch === '.', 'Numeric literal must start with a decimal digit or a decimal point');\n start = index;\n number = '';\n\n if (ch !== '.') {\n number = source[index++];\n ch = source[index]; // Hex number starts with '0x'.\n // Octal number starts with '0'.\n\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n\n if (isOctalDigit(ch)) {\n return scanOctalLiteral(start);\n } // decimal number starts with '0' such as '09' is illegal.\n\n\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n ch = source[index];\n\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseFloat(number),\n start: start,\n end: index\n };\n} // 7.8.4 String Literals\n\n\nfunction scanStringLiteral() {\n var str = '',\n quote,\n start,\n ch,\n code,\n octal = false;\n quote = source[index];\n assert(quote === '\\'' || quote === '\"', 'String literal must starts with a quote');\n start = index;\n ++index;\n\n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n str += scanHexEscape(ch);\n }\n\n break;\n\n case 'n':\n str += '\\n';\n break;\n\n case 'r':\n str += '\\r';\n break;\n\n case 't':\n str += '\\t';\n break;\n\n case 'b':\n str += '\\b';\n break;\n\n case 'f':\n str += '\\f';\n break;\n\n case 'v':\n str += '\\x0B';\n break;\n\n default:\n if (isOctalDigit(ch)) {\n code = '01234567'.indexOf(ch); // \\0 is not octal escape sequence\n\n if (code !== 0) {\n octal = true;\n }\n\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]); // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n\n if ('0123'.indexOf(ch) >= 0 && index < length && isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n\n str += String.fromCharCode(code);\n } else {\n str += ch;\n }\n\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenStringLiteral,\n value: str,\n octal: octal,\n start: start,\n end: index\n };\n}\n\nfunction testRegExp(pattern, flags) {\n let tmp = pattern;\n\n if (flags.indexOf('u') >= 0) {\n // Replace each astral symbol and every Unicode code point\n // escape sequence with a single ASCII symbol to avoid throwing on\n // regular expressions that are only valid in combination with the\n // `/u` flag.\n // Note: replacing with the ASCII symbol `x` might cause false\n // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n // perfectly valid pattern that is equivalent to `[a-b]`, but it\n // would be replaced by `[x-b]` which throws an error.\n tmp = tmp.replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, ($0, $1) => {\n if (parseInt($1, 16) <= 0x10FFFF) {\n return 'x';\n }\n\n throwError({}, MessageInvalidRegExp);\n }).replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n } // First, detect invalid regular expressions.\n\n\n try {\n new RegExp(tmp);\n } catch (e) {\n throwError({}, MessageInvalidRegExp);\n } // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n\n\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n}\n\nfunction scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n classMarker = false;\n terminated = false;\n\n while (index < length) {\n ch = source[index++];\n str += ch;\n\n if (ch === '\\\\') {\n ch = source[index++]; // ECMA-262 7.8.5\n\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n }\n\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n\n if (!terminated) {\n throwError({}, MessageUnterminatedRegExp);\n } // Exclude leading and trailing slash.\n\n\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n}\n\nfunction scanRegExpFlags() {\n var ch, str, flags;\n str = '';\n flags = '';\n\n while (index < length) {\n ch = source[index];\n\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n\n ++index;\n\n if (ch === '\\\\' && index < length) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } else {\n flags += ch;\n str += ch;\n }\n }\n\n if (flags.search(/[^gimuy]/g) >= 0) {\n throwError({}, MessageInvalidRegExp, flags);\n }\n\n return {\n value: flags,\n literal: str\n };\n}\n\nfunction scanRegExp() {\n var start, body, flags, value;\n lookahead = null;\n skipComment();\n start = index;\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n}\n\nfunction isIdentifierName(token) {\n return token.type === TokenIdentifier || token.type === TokenKeyword || token.type === TokenBooleanLiteral || token.type === TokenNullLiteral;\n}\n\nfunction advance() {\n skipComment();\n\n if (index >= length) {\n return {\n type: TokenEOF,\n start: index,\n end: index\n };\n }\n\n const ch = source.charCodeAt(index);\n\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n } // Very common: ( and ) and ;\n\n\n if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n return scanPunctuator();\n } // String literal starts with single quote (U+0027) or double quote (U+0022).\n\n\n if (ch === 0x27 || ch === 0x22) {\n return scanStringLiteral();\n } // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n\n\n if (ch === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n}\n\nfunction lex() {\n const token = lookahead;\n index = token.end;\n lookahead = advance();\n index = token.end;\n return token;\n}\n\nfunction peek() {\n const pos = index;\n lookahead = advance();\n index = pos;\n}\n\nfunction finishArrayExpression(elements) {\n const node = new ASTNode(SyntaxArrayExpression);\n node.elements = elements;\n return node;\n}\n\nfunction finishBinaryExpression(operator, left, right) {\n const node = new ASTNode(operator === '||' || operator === '&&' ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n node.operator = operator;\n node.left = left;\n node.right = right;\n return node;\n}\n\nfunction finishCallExpression(callee, args) {\n const node = new ASTNode(SyntaxCallExpression);\n node.callee = callee;\n node.arguments = args;\n return node;\n}\n\nfunction finishConditionalExpression(test, consequent, alternate) {\n const node = new ASTNode(SyntaxConditionalExpression);\n node.test = test;\n node.consequent = consequent;\n node.alternate = alternate;\n return node;\n}\n\nfunction finishIdentifier(name) {\n const node = new ASTNode(SyntaxIdentifier);\n node.name = name;\n return node;\n}\n\nfunction finishLiteral(token) {\n const node = new ASTNode(SyntaxLiteral);\n node.value = token.value;\n node.raw = source.slice(token.start, token.end);\n\n if (token.regex) {\n if (node.raw === '//') {\n node.raw = '/(?:)/';\n }\n\n node.regex = token.regex;\n }\n\n return node;\n}\n\nfunction finishMemberExpression(accessor, object, property) {\n const node = new ASTNode(SyntaxMemberExpression);\n node.computed = accessor === '[';\n node.object = object;\n node.property = property;\n if (!node.computed) property.member = true;\n return node;\n}\n\nfunction finishObjectExpression(properties) {\n const node = new ASTNode(SyntaxObjectExpression);\n node.properties = properties;\n return node;\n}\n\nfunction finishProperty(kind, key, value) {\n const node = new ASTNode(SyntaxProperty);\n node.key = key;\n node.value = value;\n node.kind = kind;\n return node;\n}\n\nfunction finishUnaryExpression(operator, argument) {\n const node = new ASTNode(SyntaxUnaryExpression);\n node.operator = operator;\n node.argument = argument;\n node.prefix = true;\n return node;\n} // Throw an exception\n\n\nfunction throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(/%(\\d)/g, (whole, index) => {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n });\n error = new Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n} // Throw an exception because of the token.\n\n\nfunction throwUnexpected(token) {\n if (token.type === TokenEOF) {\n throwError(token, MessageUnexpectedEOS);\n }\n\n if (token.type === TokenNumericLiteral) {\n throwError(token, MessageUnexpectedNumber);\n }\n\n if (token.type === TokenStringLiteral) {\n throwError(token, MessageUnexpectedString);\n }\n\n if (token.type === TokenIdentifier) {\n throwError(token, MessageUnexpectedIdentifier);\n }\n\n if (token.type === TokenKeyword) {\n throwError(token, MessageUnexpectedReserved);\n } // BooleanLiteral, NullLiteral, or Punctuator.\n\n\n throwError(token, MessageUnexpectedToken, token.value);\n} // Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\n\nfunction expect(value) {\n const token = lex();\n\n if (token.type !== TokenPunctuator || token.value !== value) {\n throwUnexpected(token);\n }\n} // Return true if the next token matches the specified punctuator.\n\n\nfunction match(value) {\n return lookahead.type === TokenPunctuator && lookahead.value === value;\n} // Return true if the next token matches the specified keyword\n\n\nfunction matchKeyword(keyword) {\n return lookahead.type === TokenKeyword && lookahead.value === keyword;\n} // 11.1.4 Array Initialiser\n\n\nfunction parseArrayInitialiser() {\n const elements = [];\n index = lookahead.start;\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseConditionalExpression());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n lex();\n return finishArrayExpression(elements);\n} // 11.1.5 Object Initialiser\n\n\nfunction parseObjectPropertyKey() {\n index = lookahead.start;\n const token = lex(); // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n if (token.octal) {\n throwError(token, MessageStrictOctalLiteral);\n }\n\n return finishLiteral(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseObjectProperty() {\n var token, key, id, value;\n index = lookahead.start;\n token = lookahead;\n\n if (token.type === TokenIdentifier) {\n id = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', id, value);\n }\n\n if (token.type === TokenEOF || token.type === TokenPunctuator) {\n throwUnexpected(token);\n } else {\n key = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', key, value);\n }\n}\n\nfunction parseObjectInitialiser() {\n var properties = [],\n property,\n name,\n key,\n map = {},\n toString = String;\n index = lookahead.start;\n expect('{');\n\n while (!match('}')) {\n property = parseObjectProperty();\n\n if (property.key.type === SyntaxIdentifier) {\n name = property.key.name;\n } else {\n name = toString(property.key.value);\n }\n\n key = '$' + name;\n\n if (Object.prototype.hasOwnProperty.call(map, key)) {\n throwError({}, MessageStrictDuplicateProperty);\n } else {\n map[key] = true;\n }\n\n properties.push(property);\n\n if (!match('}')) {\n expect(',');\n }\n }\n\n expect('}');\n return finishObjectExpression(properties);\n} // 11.1.6 The Grouping Operator\n\n\nfunction parseGroupExpression() {\n expect('(');\n const expr = parseExpression();\n expect(')');\n return expr;\n} // 11.1 Primary Expressions\n\n\nconst legalKeywords = {\n 'if': 1\n};\n\nfunction parsePrimaryExpression() {\n var type, token, expr;\n\n if (match('(')) {\n return parseGroupExpression();\n }\n\n if (match('[')) {\n return parseArrayInitialiser();\n }\n\n if (match('{')) {\n return parseObjectInitialiser();\n }\n\n type = lookahead.type;\n index = lookahead.start;\n\n if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n expr = finishIdentifier(lex().value);\n } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n if (lookahead.octal) {\n throwError(lookahead, MessageStrictOctalLiteral);\n }\n\n expr = finishLiteral(lex());\n } else if (type === TokenKeyword) {\n throw new Error(DISABLED);\n } else if (type === TokenBooleanLiteral) {\n token = lex();\n token.value = token.value === 'true';\n expr = finishLiteral(token);\n } else if (type === TokenNullLiteral) {\n token = lex();\n token.value = null;\n expr = finishLiteral(token);\n } else if (match('/') || match('/=')) {\n expr = finishLiteral(scanRegExp());\n peek();\n } else {\n throwUnexpected(lex());\n }\n\n return expr;\n} // 11.2 Left-Hand-Side Expressions\n\n\nfunction parseArguments() {\n const args = [];\n expect('(');\n\n if (!match(')')) {\n while (index < length) {\n args.push(parseConditionalExpression());\n\n if (match(')')) {\n break;\n }\n\n expect(',');\n }\n }\n\n expect(')');\n return args;\n}\n\nfunction parseNonComputedProperty() {\n index = lookahead.start;\n const token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseNonComputedMember() {\n expect('.');\n return parseNonComputedProperty();\n}\n\nfunction parseComputedMember() {\n expect('[');\n const expr = parseExpression();\n expect(']');\n return expr;\n}\n\nfunction parseLeftHandSideExpressionAllowCall() {\n var expr, args, property;\n expr = parsePrimaryExpression();\n\n for (;;) {\n if (match('.')) {\n property = parseNonComputedMember();\n expr = finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = finishCallExpression(expr, args);\n } else if (match('[')) {\n property = parseComputedMember();\n expr = finishMemberExpression('[', expr, property);\n } else {\n break;\n }\n }\n\n return expr;\n} // 11.3 Postfix Expressions\n\n\nfunction parsePostfixExpression() {\n const expr = parseLeftHandSideExpressionAllowCall();\n\n if (lookahead.type === TokenPunctuator) {\n if (match('++') || match('--')) {\n throw new Error(DISABLED);\n }\n }\n\n return expr;\n} // 11.4 Unary Operators\n\n\nfunction parseUnaryExpression() {\n var token, expr;\n\n if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n throw new Error(DISABLED);\n } else if (match('+') || match('-') || match('~') || match('!')) {\n token = lex();\n expr = parseUnaryExpression();\n expr = finishUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw new Error(DISABLED);\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n}\n\nfunction binaryPrecedence(token) {\n let prec = 0;\n\n if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '|':\n prec = 3;\n break;\n\n case '^':\n prec = 4;\n break;\n\n case '&':\n prec = 5;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n case 'in':\n prec = 7;\n break;\n\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n }\n\n return prec;\n} // 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\n\nfunction parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n marker = lookahead;\n left = parseUnaryExpression();\n token = lookahead;\n prec = binaryPrecedence(token);\n\n if (prec === 0) {\n return left;\n }\n\n token.prec = prec;\n lex();\n markers = [marker, lookahead];\n right = parseUnaryExpression();\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n // Reduce: make a binary expression from the three topmost entries.\n while (stack.length > 2 && prec <= stack[stack.length - 2].prec) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = finishBinaryExpression(operator, left, right);\n stack.push(expr);\n } // Shift.\n\n\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = parseUnaryExpression();\n stack.push(expr);\n } // Final reduce to clean-up the stack.\n\n\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n\n while (i > 1) {\n markers.pop();\n expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n} // 11.12 Conditional Operator\n\n\nfunction parseConditionalExpression() {\n var expr, consequent, alternate;\n expr = parseBinaryExpression();\n\n if (match('?')) {\n lex();\n consequent = parseConditionalExpression();\n expect(':');\n alternate = parseConditionalExpression();\n expr = finishConditionalExpression(expr, consequent, alternate);\n }\n\n return expr;\n} // 11.14 Comma Operator\n\n\nfunction parseExpression() {\n const expr = parseConditionalExpression();\n\n if (match(',')) {\n throw new Error(DISABLED); // no sequence expressions\n }\n\n return expr;\n}\n\nfunction parser (code) {\n source = code;\n index = 0;\n length = source.length;\n lookahead = null;\n peek();\n const expr = parseExpression();\n\n if (lookahead.type !== TokenEOF) {\n throw new Error('Unexpect token after expression.');\n }\n\n return expr;\n}\n\nvar Constants = {\n NaN: 'NaN',\n E: 'Math.E',\n LN2: 'Math.LN2',\n LN10: 'Math.LN10',\n LOG2E: 'Math.LOG2E',\n LOG10E: 'Math.LOG10E',\n PI: 'Math.PI',\n SQRT1_2: 'Math.SQRT1_2',\n SQRT2: 'Math.SQRT2',\n MIN_VALUE: 'Number.MIN_VALUE',\n MAX_VALUE: 'Number.MAX_VALUE'\n};\n\nfunction Functions (codegen) {\n function fncall(name, args, cast, type) {\n let obj = codegen(args[0]);\n\n if (cast) {\n obj = cast + '(' + obj + ')';\n if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n }\n\n return obj + '.' + name + (type < 0 ? '' : type === 0 ? '()' : '(' + args.slice(1).map(codegen).join(',') + ')');\n }\n\n function fn(name, cast, type) {\n return args => fncall(name, args, cast, type);\n }\n\n const DATE = 'new Date',\n STRING = 'String',\n REGEXP = 'RegExp';\n return {\n // MATH functions\n isNaN: 'Number.isNaN',\n isFinite: 'Number.isFinite',\n abs: 'Math.abs',\n acos: 'Math.acos',\n asin: 'Math.asin',\n atan: 'Math.atan',\n atan2: 'Math.atan2',\n ceil: 'Math.ceil',\n cos: 'Math.cos',\n exp: 'Math.exp',\n floor: 'Math.floor',\n log: 'Math.log',\n max: 'Math.max',\n min: 'Math.min',\n pow: 'Math.pow',\n random: 'Math.random',\n round: 'Math.round',\n sin: 'Math.sin',\n sqrt: 'Math.sqrt',\n tan: 'Math.tan',\n clamp: function (args) {\n if (args.length < 3) error('Missing arguments to clamp function.');\n if (args.length > 3) error('Too many arguments to clamp function.');\n const a = args.map(codegen);\n return 'Math.max(' + a[1] + ', Math.min(' + a[2] + ',' + a[0] + '))';\n },\n // DATE functions\n now: 'Date.now',\n utc: 'Date.UTC',\n datetime: DATE,\n date: fn('getDate', DATE, 0),\n day: fn('getDay', DATE, 0),\n year: fn('getFullYear', DATE, 0),\n month: fn('getMonth', DATE, 0),\n hours: fn('getHours', DATE, 0),\n minutes: fn('getMinutes', DATE, 0),\n seconds: fn('getSeconds', DATE, 0),\n milliseconds: fn('getMilliseconds', DATE, 0),\n time: fn('getTime', DATE, 0),\n timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n utcdate: fn('getUTCDate', DATE, 0),\n utcday: fn('getUTCDay', DATE, 0),\n utcyear: fn('getUTCFullYear', DATE, 0),\n utcmonth: fn('getUTCMonth', DATE, 0),\n utchours: fn('getUTCHours', DATE, 0),\n utcminutes: fn('getUTCMinutes', DATE, 0),\n utcseconds: fn('getUTCSeconds', DATE, 0),\n utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n // sequence functions\n length: fn('length', null, -1),\n // STRING functions\n parseFloat: 'parseFloat',\n parseInt: 'parseInt',\n upper: fn('toUpperCase', STRING, 0),\n lower: fn('toLowerCase', STRING, 0),\n substring: fn('substring', STRING),\n split: fn('split', STRING),\n trim: fn('trim', STRING, 0),\n // REGEXP functions\n regexp: REGEXP,\n test: fn('test', REGEXP),\n // Control Flow functions\n if: function (args) {\n if (args.length < 3) error('Missing arguments to if function.');\n if (args.length > 3) error('Too many arguments to if function.');\n const a = args.map(codegen);\n return '(' + a[0] + '?' + a[1] + ':' + a[2] + ')';\n }\n };\n}\n\nfunction stripQuotes(s) {\n const n = s && s.length - 1;\n return n && (s[0] === '\"' && s[n] === '\"' || s[0] === '\\'' && s[n] === '\\'') ? s.slice(1, -1) : s;\n}\n\nfunction codegen (opt) {\n opt = opt || {};\n const allowed = opt.allowed ? toSet(opt.allowed) : {},\n forbidden = opt.forbidden ? toSet(opt.forbidden) : {},\n constants = opt.constants || Constants,\n functions = (opt.functions || Functions)(visit),\n globalvar = opt.globalvar,\n fieldvar = opt.fieldvar,\n outputGlobal = isFunction(globalvar) ? globalvar : id => \"\".concat(globalvar, \"[\\\"\").concat(id, \"\\\"]\");\n let globals = {},\n fields = {},\n memberDepth = 0;\n\n function visit(ast) {\n if (isString(ast)) return ast;\n const generator = Generators[ast.type];\n if (generator == null) error('Unsupported type: ' + ast.type);\n return generator(ast);\n }\n\n const Generators = {\n Literal: n => n.raw,\n Identifier: n => {\n const id = n.name;\n\n if (memberDepth > 0) {\n return id;\n } else if (hasOwnProperty(forbidden, id)) {\n return error('Illegal identifier: ' + id);\n } else if (hasOwnProperty(constants, id)) {\n return constants[id];\n } else if (hasOwnProperty(allowed, id)) {\n return id;\n } else {\n globals[id] = 1;\n return outputGlobal(id);\n }\n },\n MemberExpression: n => {\n const d = !n.computed,\n o = visit(n.object);\n if (d) memberDepth += 1;\n const p = visit(n.property);\n\n if (o === fieldvar) {\n // strip quotes to sanitize field name (#1653)\n fields[stripQuotes(p)] = 1;\n }\n\n if (d) memberDepth -= 1;\n return o + (d ? '.' + p : '[' + p + ']');\n },\n CallExpression: n => {\n if (n.callee.type !== 'Identifier') {\n error('Illegal callee type: ' + n.callee.type);\n }\n\n const callee = n.callee.name,\n args = n.arguments,\n fn = hasOwnProperty(functions, callee) && functions[callee];\n if (!fn) error('Unrecognized function: ' + callee);\n return isFunction(fn) ? fn(args) : fn + '(' + args.map(visit).join(',') + ')';\n },\n ArrayExpression: n => '[' + n.elements.map(visit).join(',') + ']',\n BinaryExpression: n => '(' + visit(n.left) + ' ' + n.operator + ' ' + visit(n.right) + ')',\n UnaryExpression: n => '(' + n.operator + visit(n.argument) + ')',\n ConditionalExpression: n => '(' + visit(n.test) + '?' + visit(n.consequent) + ':' + visit(n.alternate) + ')',\n LogicalExpression: n => '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n ObjectExpression: n => '{' + n.properties.map(visit).join(',') + '}',\n Property: n => {\n memberDepth += 1;\n const k = visit(n.key);\n memberDepth -= 1;\n return k + ':' + visit(n.value);\n }\n };\n\n function codegen(ast) {\n const result = {\n code: visit(ast),\n globals: Object.keys(globals),\n fields: Object.keys(fields)\n };\n globals = {};\n fields = {};\n return result;\n }\n\n codegen.functions = functions;\n codegen.constants = constants;\n return codegen;\n}\n\nexport { ASTNode, ArrayExpression, BinaryExpression, CallExpression, ConditionalExpression, Identifier, Literal, LogicalExpression, MemberExpression, ObjectExpression, Property, RawCode, UnaryExpression, codegen, Constants as constants, Functions as functions, parser as parse };\n","import {parse} from 'vega-expression';\n\nfunction getName(node: any) {\n const name: string[] = [];\n\n if (node.type === 'Identifier') {\n return [node.name];\n }\n\n if (node.type === 'Literal') {\n return [node.value];\n }\n\n if (node.type === 'MemberExpression') {\n name.push(...getName(node.object));\n name.push(...getName(node.property));\n }\n\n return name;\n}\n\nfunction startsWithDatum(node: any): boolean {\n if (node.object.type === 'MemberExpression') {\n return startsWithDatum(node.object);\n }\n return node.object.name === 'datum';\n}\n\nexport function getDependentFields(expression: string) {\n const ast = parse(expression);\n const dependents = new Set();\n ast.visit((node: any) => {\n if (node.type === 'MemberExpression' && startsWithDatum(node)) {\n dependents.add(getName(node).slice(1).join('.'));\n }\n });\n\n return dependents;\n}\n","import {FilterTransform as VgFilterTransform} from 'vega';\nimport {LogicalComposition} from '../../logical';\nimport {Predicate} from '../../predicate';\nimport {duplicate} from '../../util';\nimport {Model} from '../model';\nimport {expression} from '../predicate';\nimport {DataFlowNode} from './dataflow';\nimport {getDependentFields} from './expressions';\n\nexport class FilterNode extends DataFlowNode {\n private expr: string;\n private _dependentFields: Set;\n public clone() {\n return new FilterNode(null, this.model, duplicate(this.filter));\n }\n\n constructor(\n parent: DataFlowNode,\n private readonly model: Model,\n private readonly filter: LogicalComposition\n ) {\n super(parent);\n\n // TODO: refactor this to not take a node and\n // then add a static function makeFromOperand and make the constructor take only an expression\n this.expr = expression(this.model, this.filter, this);\n\n this._dependentFields = getDependentFields(this.expr);\n }\n\n public dependentFields() {\n return this._dependentFields;\n }\n\n public producedFields() {\n return new Set(); // filter does not produce any new fields\n }\n\n public assemble(): VgFilterTransform {\n return {\n type: 'filter',\n expr: this.expr\n };\n }\n\n public hash() {\n return `Filter ${this.expr}`;\n }\n}\n","import {selector as parseSelector} from 'vega-event-selector';\nimport {array, isObject, isString, stringValue} from 'vega-util';\nimport {selectionCompilers, SelectionComponent, STORE} from '.';\nimport {warn} from '../../log';\nimport {BaseSelectionConfig, SelectionParameter, ParameterExtent} from '../../selection';\nimport {Dict, duplicate, entries, replacePathInField, varName} from '../../util';\nimport {DataFlowNode, OutputNode} from '../data/dataflow';\nimport {FilterNode} from '../data/filter';\nimport {Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {DataSourceType} from '../../data';\nimport {ParameterPredicate} from '../../predicate';\n\nexport function parseUnitSelection(model: UnitModel, selDefs: SelectionParameter[]) {\n const selCmpts: Dict> = {};\n const selectionConfig = model.config.selection;\n\n if (!selDefs || !selDefs.length) return selCmpts;\n\n for (const def of selDefs) {\n const name = varName(def.name);\n const selDef = def.select;\n const type = isString(selDef) ? selDef : selDef.type;\n const defaults: BaseSelectionConfig = isObject(selDef) ? duplicate(selDef) : {type};\n\n // Set default values from config if a property hasn't been specified,\n // or if it is true. E.g., \"translate\": true should use the default\n // event handlers for translate. However, true may be a valid value for\n // a property (e.g., \"nearest\": true).\n const cfg = selectionConfig[type];\n for (const key in cfg) {\n // Project transform applies its defaults.\n if (key === 'fields' || key === 'encodings') {\n continue;\n }\n\n if (key === 'mark') {\n defaults[key] = {...cfg[key], ...defaults[key]};\n }\n\n if (defaults[key] === undefined || defaults[key] === true) {\n defaults[key] = cfg[key] ?? defaults[key];\n }\n }\n\n const selCmpt: SelectionComponent = (selCmpts[name] = {\n ...defaults,\n name,\n type,\n init: def.value,\n bind: def.bind,\n events: isString(defaults.on) ? parseSelector(defaults.on, 'scope') : array(duplicate(defaults.on))\n } as any);\n\n for (const c of selectionCompilers) {\n if (c.defined(selCmpt) && c.parse) {\n c.parse(model, selCmpt, def);\n }\n }\n }\n\n return selCmpts;\n}\n\nexport function parseSelectionPredicate(\n model: Model,\n pred: ParameterPredicate,\n dfnode?: DataFlowNode,\n datum = 'datum'\n): string {\n const name = isString(pred) ? pred : pred.param;\n const vname = varName(name);\n const store = stringValue(vname + STORE);\n let selCmpt;\n\n try {\n selCmpt = model.getSelectionComponent(vname, name);\n } catch (e) {\n // If a selection isn't found, treat as a variable parameter and coerce to boolean.\n return `!!${vname}`;\n }\n\n if (selCmpt.project.timeUnit) {\n const child = dfnode ?? model.component.data.raw;\n const tunode = selCmpt.project.timeUnit.clone();\n if (child.parent) {\n tunode.insertAsParentOf(child);\n } else {\n child.parent = tunode;\n }\n }\n\n const test = `vlSelectionTest(${store}, ${datum}${\n selCmpt.resolve === 'global' ? ')' : `, ${stringValue(selCmpt.resolve)})`\n }`;\n const length = `length(data(${store}))`;\n\n return pred.empty === false ? `${length} && ${test}` : `!${length} || ${test}`;\n}\n\nexport function parseSelectionExtent(model: Model, name: string, extent: ParameterExtent) {\n const vname = varName(name);\n const encoding = extent['encoding'];\n let field = extent['field'];\n let selCmpt;\n\n try {\n selCmpt = model.getSelectionComponent(vname, name);\n } catch (e) {\n // If a selection isn't found, treat it as a variable parameter.\n return vname;\n }\n\n if (!encoding && !field) {\n field = selCmpt.project.items[0].field;\n if (selCmpt.project.items.length > 1) {\n warn(\n 'A \"field\" or \"encoding\" must be specified when using a selection as a scale domain. ' +\n `Using \"field\": ${stringValue(field)}.`\n );\n }\n } else if (encoding && !field) {\n const encodings = selCmpt.project.items.filter(p => p.channel === encoding);\n if (!encodings.length || encodings.length > 1) {\n field = selCmpt.project.items[0].field;\n warn(\n (!encodings.length ? 'No ' : 'Multiple ') +\n `matching ${stringValue(encoding)} encoding found for selection ${stringValue(extent.param)}. ` +\n `Using \"field\": ${stringValue(field)}.`\n );\n } else {\n field = encodings[0].field;\n }\n }\n\n return `${selCmpt.name}[${stringValue(replacePathInField(field))}]`;\n}\n\nexport function materializeSelections(model: UnitModel, main: OutputNode) {\n for (const [selection, selCmpt] of entries(model.component.selection ?? {})) {\n const lookupName = model.getName(`lookup_${selection}`);\n model.component.data.outputNodes[lookupName] = selCmpt.materialized = new OutputNode(\n new FilterNode(main, model, {param: selection}),\n lookupName,\n DataSourceType.Lookup,\n model.component.data.outputNodeRefCounts\n );\n }\n}\n","import {isString} from 'vega-util';\nimport {LogicalComposition} from '../logical';\nimport {fieldFilterExpression, isSelectionPredicate, Predicate} from '../predicate';\nimport {logicalExpr} from '../util';\nimport {DataFlowNode} from './data/dataflow';\nimport {Model} from './model';\nimport {parseSelectionPredicate} from './selection/parse';\n\n/**\n * Converts a predicate into an expression.\n */\n// model is only used for selection filters.\nexport function expression(model: Model, filterOp: LogicalComposition, node?: DataFlowNode): string {\n return logicalExpr(filterOp, (predicate: Predicate) => {\n if (isString(predicate)) {\n return predicate;\n } else if (isSelectionPredicate(predicate)) {\n return parseSelectionPredicate(model, predicate, node);\n } else {\n // Filter Object\n return fieldFilterExpression(predicate);\n }\n });\n}\n","import {Axis as VgAxis, AxisEncode, NewSignal, SignalRef, Text} from 'vega';\nimport {array, isArray} from 'vega-util';\nimport {AXIS_PARTS, AXIS_PROPERTY_TYPE, CONDITIONAL_AXIS_PROP_INDEX, isConditionalAxisValue} from '../../axis';\nimport {POSITION_SCALE_CHANNELS} from '../../channel';\nimport {defaultTitle, FieldDefBase} from '../../channeldef';\nimport {Config} from '../../config';\nimport {isText} from '../../title';\nimport {contains, getFirstDefined, isEmpty, replaceAll} from '../../util';\nimport {isSignalRef, VgEncodeChannel, VgValueRef} from '../../vega.schema';\nimport {exprFromValueOrSignalRef} from '../common';\nimport {Model} from '../model';\nimport {expression} from '../predicate';\nimport {AxisComponent, AxisComponentIndex} from './component';\n\nfunction assembleTitle(title: Text | FieldDefBase[] | SignalRef, config: Config): Text | SignalRef {\n if (!title) {\n return undefined;\n }\n if (isArray(title) && !isText(title)) {\n return title.map(fieldDef => defaultTitle(fieldDef, config)).join(', ');\n }\n return title;\n}\n\nfunction setAxisEncode(\n axis: Omit,\n part: keyof AxisEncode,\n vgProp: VgEncodeChannel,\n vgRef: VgValueRef | readonly VgValueRef[]\n) {\n axis.encode ??= {};\n axis.encode[part] ??= {};\n axis.encode[part].update ??= {};\n // TODO: remove as any after https://github.com/prisma/nexus-prisma/issues/291\n (axis.encode[part].update[vgProp] as any) = vgRef;\n}\n\nexport function assembleAxis(\n axisCmpt: AxisComponent,\n kind: 'main' | 'grid',\n config: Config,\n opt: {\n header: boolean; // whether this is called via a header\n } = {header: false}\n): VgAxis {\n const {disable, orient, scale, labelExpr, title, zindex, ...axis} = axisCmpt.combine();\n\n if (disable) {\n return undefined;\n }\n\n for (const prop in axis) {\n const propType = AXIS_PROPERTY_TYPE[prop];\n const propValue = axis[prop];\n\n if (propType && propType !== kind && propType !== 'both') {\n // Remove properties that are not valid for this kind of axis\n delete axis[prop];\n } else if (isConditionalAxisValue(propValue)) {\n // deal with conditional axis value\n\n const {condition, ...valueOrSignalRef} = propValue;\n const conditions = array(condition);\n\n const propIndex = CONDITIONAL_AXIS_PROP_INDEX[prop];\n if (propIndex) {\n const {vgProp, part} = propIndex;\n // If there is a corresponding Vega property for the channel,\n // use Vega's custom axis encoding and delete the original axis property to avoid conflicts\n\n const vgRef = [\n ...conditions.map(c => {\n const {test, ...valueOrSignalCRef} = c;\n return {\n test: expression(null, test),\n ...valueOrSignalCRef\n };\n }),\n valueOrSignalRef\n ];\n setAxisEncode(axis, part, vgProp, vgRef);\n delete axis[prop];\n } else if (propIndex === null) {\n // If propIndex is null, this means we support conditional axis property by converting the condition to signal instead.\n const signalRef: SignalRef = {\n signal:\n conditions\n .map(c => {\n const {test, ...valueOrSignalCRef} = c;\n return `${expression(null, test)} ? ${exprFromValueOrSignalRef(valueOrSignalCRef)} : `;\n })\n .join('') + exprFromValueOrSignalRef(valueOrSignalRef)\n };\n axis[prop] = signalRef;\n }\n } else if (isSignalRef(propValue)) {\n const propIndex = CONDITIONAL_AXIS_PROP_INDEX[prop];\n if (propIndex) {\n const {vgProp, part} = propIndex;\n setAxisEncode(axis, part, vgProp, propValue);\n delete axis[prop];\n } // else do nothing since the property already supports signal\n }\n\n // Do not pass labelAlign/Baseline = null to Vega since it won't pass the schema\n // Note that we need to use null so the default labelAlign is preserved.\n if (contains(['labelAlign', 'labelBaseline'], prop) && axis[prop] === null) {\n delete axis[prop];\n }\n }\n\n if (kind === 'grid') {\n if (!axis.grid) {\n return undefined;\n }\n\n // Remove unnecessary encode block\n if (axis.encode) {\n // Only need to keep encode block for grid\n const {grid} = axis.encode;\n axis.encode = {\n ...(grid ? {grid} : {})\n };\n\n if (isEmpty(axis.encode)) {\n delete axis.encode;\n }\n }\n\n return {\n scale,\n orient,\n ...axis,\n domain: false,\n labels: false,\n aria: false, // always hide grid axis\n\n // Always set min/maxExtent to 0 to ensure that `config.axis*.minExtent` and `config.axis*.maxExtent`\n // would not affect gridAxis\n maxExtent: 0,\n minExtent: 0,\n ticks: false,\n zindex: getFirstDefined(zindex, 0) // put grid behind marks by default\n };\n } else {\n // kind === 'main'\n\n if (!opt.header && axisCmpt.mainExtracted) {\n // if mainExtracted has been extracted to a separate facet\n return undefined;\n }\n\n if (labelExpr !== undefined) {\n let expr = labelExpr;\n if (axis.encode?.labels?.update && isSignalRef(axis.encode.labels.update.text)) {\n expr = replaceAll(labelExpr, 'datum.label', axis.encode.labels.update.text.signal);\n }\n setAxisEncode(axis, 'labels', 'text', {signal: expr});\n }\n\n if (axis.labelAlign === null) {\n delete axis.labelAlign;\n }\n\n // Remove unnecessary encode block\n if (axis.encode) {\n for (const part of AXIS_PARTS) {\n if (!axisCmpt.hasAxisPart(part)) {\n delete axis.encode[part];\n }\n }\n if (isEmpty(axis.encode)) {\n delete axis.encode;\n }\n }\n\n const titleString = assembleTitle(title, config);\n\n return {\n scale,\n orient,\n grid: false,\n ...(titleString ? {title: titleString} : {}),\n ...axis,\n ...(config.aria === false ? {aria: false} : {}),\n zindex: getFirstDefined(zindex, 0) // put axis line above marks by default\n };\n }\n}\n\n/**\n * Add axis signals so grid line works correctly\n * (Fix https://github.com/vega/vega-lite/issues/4226)\n */\nexport function assembleAxisSignals(model: Model): NewSignal[] {\n const {axes} = model.component;\n const signals: NewSignal[] = [];\n\n for (const channel of POSITION_SCALE_CHANNELS) {\n if (axes[channel]) {\n for (const axis of axes[channel]) {\n if (!axis.get('disable') && !axis.get('gridScale')) {\n // If there is x-axis but no y-scale for gridScale, need to set height/width so x-axis can draw the grid with the right height. Same for y-axis and width.\n\n const sizeType = channel === 'x' ? 'height' : 'width';\n const update = model.getSizeSignalRef(sizeType).signal;\n\n if (sizeType !== update) {\n signals.push({\n name: sizeType,\n update: update\n });\n }\n }\n }\n }\n }\n return signals;\n}\n\nexport function assembleAxes(axisComponents: AxisComponentIndex, config: Config): VgAxis[] {\n const {x = [], y = []} = axisComponents;\n return [\n ...x.map(a => assembleAxis(a, 'grid', config)),\n ...y.map(a => assembleAxis(a, 'grid', config)),\n ...x.map(a => assembleAxis(a, 'main', config)),\n ...y.map(a => assembleAxis(a, 'main', config))\n ].filter(a => a); // filter undefined\n}\n","import {ScaleType, SignalRef} from 'vega';\nimport {array} from 'vega-util';\nimport {AxisConfig} from '../../axis';\nimport {PositionScaleChannel} from '../../channel';\nimport {Config, StyleConfigIndex} from '../../config';\nimport {isQuantitative} from '../../scale';\nimport {keys, titleCase} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {getStyleConfig, signalOrStringValue} from '../common';\n\nfunction getAxisConfigFromConfigTypes(\n configTypes: string[],\n config: Config,\n channel: 'x' | 'y',\n orient: string | SignalRef\n) {\n // TODO: add special casing to add conditional value based on orient signal\n return Object.assign.apply(null, [\n {},\n ...configTypes.map(configType => {\n if (configType === 'axisOrient') {\n const orient1 = channel === 'x' ? 'bottom' : 'left';\n const orientConfig1 = config[channel === 'x' ? 'axisBottom' : 'axisLeft'] || {};\n const orientConfig2 = config[channel === 'x' ? 'axisTop' : 'axisRight'] || {};\n\n const props = new Set([...keys(orientConfig1), ...keys(orientConfig2)]);\n\n const conditionalOrientAxisConfig = {};\n for (const prop of props.values()) {\n conditionalOrientAxisConfig[prop] = {\n // orient is surely signal in this case\n signal: `${orient['signal']} === \"${orient1}\" ? ${signalOrStringValue(\n orientConfig1[prop]\n )} : ${signalOrStringValue(orientConfig2[prop])}`\n };\n }\n\n return conditionalOrientAxisConfig;\n }\n\n return config[configType];\n })\n ]);\n}\n\nexport type AxisConfigs = ReturnType;\n\nexport function getAxisConfigs(\n channel: PositionScaleChannel,\n scaleType: ScaleType,\n orient: string | SignalRef,\n config: Config\n) {\n const typeBasedConfigTypes =\n scaleType === 'band'\n ? ['axisDiscrete', 'axisBand']\n : scaleType === 'point'\n ? ['axisDiscrete', 'axisPoint']\n : isQuantitative(scaleType)\n ? ['axisQuantitative']\n : scaleType === 'time' || scaleType === 'utc'\n ? ['axisTemporal']\n : [];\n\n const axisChannel = channel === 'x' ? 'axisX' : 'axisY';\n const axisOrient = isSignalRef(orient) ? 'axisOrient' : `axis${titleCase(orient)}`; // axisTop, axisBottom, ...\n\n const vlOnlyConfigTypes = [\n // technically Vega does have axisBand, but if we make another separation here,\n // it will further introduce complexity in the code\n ...typeBasedConfigTypes,\n ...typeBasedConfigTypes.map(c => axisChannel + c.substr(4))\n ];\n\n const vgConfigTypes = ['axis', axisOrient, axisChannel];\n\n return {\n vlOnlyAxisConfig: getAxisConfigFromConfigTypes(vlOnlyConfigTypes, config, channel, orient),\n vgAxisConfig: getAxisConfigFromConfigTypes(vgConfigTypes, config, channel, orient),\n axisConfigStyle: getAxisConfigStyle([...vgConfigTypes, ...vlOnlyConfigTypes], config)\n };\n}\n\nexport function getAxisConfigStyle(axisConfigTypes: string[], config: Config) {\n const toMerge = [{}];\n for (const configType of axisConfigTypes) {\n // TODO: add special casing to add conditional value based on orient signal\n let style = config[configType]?.style;\n if (style) {\n style = array(style);\n for (const s of style) {\n toMerge.push(config.style[s]);\n }\n }\n }\n return Object.assign.apply(null, toMerge);\n}\nexport function getAxisConfig(\n property: keyof AxisConfig,\n styleConfigIndex: StyleConfigIndex,\n style: string | string[],\n axisConfigs: Partial = {}\n): {configFrom?: string; configValue?: any} {\n const styleConfig = getStyleConfig(property, style, styleConfigIndex);\n\n if (styleConfig !== undefined) {\n return {\n configFrom: 'style',\n configValue: styleConfig\n };\n }\n\n for (const configFrom of ['vlOnlyAxisConfig', 'vgAxisConfig', 'axisConfigStyle']) {\n if (axisConfigs[configFrom]?.[property] !== undefined) {\n return {configFrom, configValue: axisConfigs[configFrom][property]};\n }\n }\n return {};\n}\n","import {Align, AxisOrient, Orient, SignalRef} from 'vega';\nimport {isArray, isObject} from 'vega-util';\nimport {AxisInternal} from '../../axis';\nimport {isBinned, isBinning} from '../../bin';\nimport {PositionScaleChannel, X} from '../../channel';\nimport {\n DatumDef,\n isDiscrete,\n isFieldDef,\n PositionDatumDef,\n PositionFieldDef,\n toFieldDefBase,\n TypedFieldDef,\n valueArray\n} from '../../channeldef';\nimport {Config, StyleConfigIndex} from '../../config';\nimport {Mark} from '../../mark';\nimport {hasDiscreteDomain} from '../../scale';\nimport {Sort} from '../../sort';\nimport {normalizeTimeUnit} from '../../timeunit';\nimport {NOMINAL, ORDINAL, Type} from '../../type';\nimport {contains, normalizeAngle} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {mergeTitle, mergeTitleFieldDefs} from '../common';\nimport {guideFormat, guideFormatType} from '../format';\nimport {UnitModel} from '../unit';\nimport {ScaleType} from './../../scale';\nimport {AxisComponentProps} from './component';\nimport {AxisConfigs, getAxisConfig} from './config';\n\nexport interface AxisRuleParams {\n fieldOrDatumDef: PositionFieldDef | PositionDatumDef;\n axis: AxisInternal;\n channel: PositionScaleChannel;\n model: UnitModel;\n\n mark: Mark;\n scaleType: ScaleType;\n orient: Orient | SignalRef;\n labelAngle: number | SignalRef;\n config: Config;\n}\n\nexport const axisRules: {\n [k in keyof AxisComponentProps]?: (params: AxisRuleParams) => AxisComponentProps[k];\n} = {\n scale: ({model, channel}) => model.scaleName(channel),\n\n format: ({fieldOrDatumDef, config, axis}) => {\n const {format, formatType} = axis;\n return guideFormat(fieldOrDatumDef, fieldOrDatumDef.type, format, formatType, config, true);\n },\n\n formatType: ({axis, fieldOrDatumDef, scaleType}) => {\n const {formatType} = axis;\n return guideFormatType(formatType, fieldOrDatumDef, scaleType);\n },\n\n grid: ({fieldOrDatumDef, axis, scaleType}) => axis.grid ?? defaultGrid(scaleType, fieldOrDatumDef),\n\n gridScale: ({model, channel}) => gridScale(model, channel),\n\n labelAlign: ({axis, labelAngle, orient, channel}) =>\n axis.labelAlign || defaultLabelAlign(labelAngle, orient, channel),\n\n labelAngle: ({labelAngle}) => labelAngle, // we already calculate this in parse\n\n labelBaseline: ({axis, labelAngle, orient, channel}) =>\n axis.labelBaseline || defaultLabelBaseline(labelAngle, orient, channel),\n\n labelFlush: ({axis, fieldOrDatumDef, channel}) => axis.labelFlush ?? defaultLabelFlush(fieldOrDatumDef.type, channel),\n\n labelOverlap: ({axis, fieldOrDatumDef, scaleType}) =>\n axis.labelOverlap ??\n defaultLabelOverlap(\n fieldOrDatumDef.type,\n scaleType,\n isFieldDef(fieldOrDatumDef) && !!fieldOrDatumDef.timeUnit,\n isFieldDef(fieldOrDatumDef) ? fieldOrDatumDef.sort : undefined\n ),\n\n // we already calculate orient in parse\n orient: ({orient}) => orient as AxisOrient, // Need to cast until Vega supports signal\n\n tickCount: ({channel, model, axis, fieldOrDatumDef, scaleType}) => {\n const sizeType = channel === 'x' ? 'width' : channel === 'y' ? 'height' : undefined;\n const size = sizeType ? model.getSizeSignalRef(sizeType) : undefined;\n return axis.tickCount ?? defaultTickCount({fieldOrDatumDef, scaleType, size, values: axis.values});\n },\n\n title: ({axis, model, channel}) => {\n if (axis.title !== undefined) {\n return axis.title;\n }\n const fieldDefTitle = getFieldDefTitle(model, channel);\n if (fieldDefTitle !== undefined) {\n return fieldDefTitle;\n }\n const fieldDef = model.typedFieldDef(channel);\n const channel2 = channel === 'x' ? 'x2' : 'y2';\n const fieldDef2 = model.fieldDef(channel2);\n\n // If title not specified, store base parts of fieldDef (and fieldDef2 if exists)\n return mergeTitleFieldDefs(\n fieldDef ? [toFieldDefBase(fieldDef)] : [],\n isFieldDef(fieldDef2) ? [toFieldDefBase(fieldDef2)] : []\n );\n },\n\n values: ({axis, fieldOrDatumDef}) => values(axis, fieldOrDatumDef),\n\n zindex: ({axis, fieldOrDatumDef, mark}) => axis.zindex ?? defaultZindex(mark, fieldOrDatumDef)\n};\n\n// TODO: we need to refactor this method after we take care of config refactoring\n/**\n * Default rules for whether to show a grid should be shown for a channel.\n * If `grid` is unspecified, the default value is `true` for ordinal scales that are not binned\n */\n\nexport function defaultGrid(scaleType: ScaleType, fieldDef: TypedFieldDef | DatumDef) {\n return !hasDiscreteDomain(scaleType) && isFieldDef(fieldDef) && !isBinning(fieldDef?.bin) && !isBinned(fieldDef?.bin);\n}\n\nexport function gridScale(model: UnitModel, channel: PositionScaleChannel) {\n const gridChannel: PositionScaleChannel = channel === 'x' ? 'y' : 'x';\n if (model.getScaleComponent(gridChannel)) {\n return model.scaleName(gridChannel);\n }\n return undefined;\n}\n\nexport function getLabelAngle(\n fieldOrDatumDef: PositionFieldDef | PositionDatumDef,\n axis: AxisInternal,\n channel: PositionScaleChannel,\n styleConfig: StyleConfigIndex,\n axisConfigs?: AxisConfigs\n) {\n const labelAngle = axis?.labelAngle;\n // try axis value\n if (labelAngle !== undefined) {\n return isSignalRef(labelAngle) ? labelAngle : normalizeAngle(labelAngle);\n } else {\n // try axis config value\n const {configValue: angle} = getAxisConfig('labelAngle', styleConfig, axis?.style, axisConfigs);\n if (angle !== undefined) {\n return normalizeAngle(angle);\n } else {\n // get default value\n if (\n channel === X &&\n contains([NOMINAL, ORDINAL], fieldOrDatumDef.type) &&\n !(isFieldDef(fieldOrDatumDef) && fieldOrDatumDef.timeUnit)\n ) {\n return 270;\n }\n // no default\n return undefined;\n }\n }\n}\n\nexport function normalizeAngleExpr(angle: SignalRef) {\n return `(((${angle.signal} % 360) + 360) % 360)`;\n}\n\nexport function defaultLabelBaseline(\n angle: number | SignalRef,\n orient: AxisOrient | SignalRef,\n channel: 'x' | 'y',\n alwaysIncludeMiddle?: boolean\n) {\n if (angle !== undefined) {\n if (channel === 'x') {\n if (isSignalRef(angle)) {\n const a = normalizeAngleExpr(angle);\n const orientIsTop = isSignalRef(orient) ? `(${orient.signal} === \"top\")` : orient === 'top';\n return {\n signal:\n `(45 < ${a} && ${a} < 135) || (225 < ${a} && ${a} < 315) ? \"middle\" :` +\n `(${a} <= 45 || 315 <= ${a}) === ${orientIsTop} ? \"bottom\" : \"top\"`\n };\n }\n\n if ((45 < angle && angle < 135) || (225 < angle && angle < 315)) {\n return 'middle';\n }\n\n if (isSignalRef(orient)) {\n const op = angle <= 45 || 315 <= angle ? '===' : '!==';\n return {signal: `${orient.signal} ${op} \"top\" ? \"bottom\" : \"top\"`};\n }\n\n return (angle <= 45 || 315 <= angle) === (orient === 'top') ? 'bottom' : 'top';\n } else {\n if (isSignalRef(angle)) {\n const a = normalizeAngleExpr(angle);\n const orientIsLeft = isSignalRef(orient) ? `(${orient.signal} === \"left\")` : orient === 'left';\n const middle = alwaysIncludeMiddle ? '\"middle\"' : 'null';\n return {\n signal: `${a} <= 45 || 315 <= ${a} || (135 <= ${a} && ${a} <= 225) ? ${middle} : (45 <= ${a} && ${a} <= 135) === ${orientIsLeft} ? \"top\" : \"bottom\"`\n };\n }\n\n if (angle <= 45 || 315 <= angle || (135 <= angle && angle <= 225)) {\n return alwaysIncludeMiddle ? 'middle' : null;\n }\n\n if (isSignalRef(orient)) {\n const op = 45 <= angle && angle <= 135 ? '===' : '!==';\n return {signal: `${orient.signal} ${op} \"left\" ? \"top\" : \"bottom\"`};\n }\n\n return (45 <= angle && angle <= 135) === (orient === 'left') ? 'top' : 'bottom';\n }\n }\n return undefined;\n}\n\nexport function defaultLabelAlign(\n angle: number | SignalRef,\n orient: AxisOrient | SignalRef,\n channel: 'x' | 'y'\n): Align | SignalRef {\n if (angle === undefined) {\n return undefined;\n }\n\n const isX = channel === 'x';\n const startAngle = isX ? 0 : 90;\n const mainOrient = isX ? 'bottom' : 'left';\n\n if (isSignalRef(angle)) {\n const a = normalizeAngleExpr(angle);\n const orientIsMain = isSignalRef(orient) ? `(${orient.signal} === \"${mainOrient}\")` : orient === mainOrient;\n return {\n signal:\n `(${startAngle ? `(${a} + 90)` : a} % 180 === 0) ? ${isX ? null : '\"center\"'} :` +\n `(${startAngle} < ${a} && ${a} < ${180 + startAngle}) === ${orientIsMain} ? \"left\" : \"right\"`\n };\n }\n\n if ((angle + startAngle) % 180 === 0) {\n // For bottom, use default label align so label flush still works\n return isX ? null : 'center';\n }\n\n if (isSignalRef(orient)) {\n const op = startAngle < angle && angle < 180 + startAngle ? '===' : '!==';\n const orientIsMain = `${orient.signal} ${op} \"${mainOrient}\"`;\n return {\n signal: `${orientIsMain} ? \"left\" : \"right\"`\n };\n }\n\n if ((startAngle < angle && angle < 180 + startAngle) === (orient === mainOrient)) {\n return 'left';\n }\n\n return 'right';\n}\n\nexport function defaultLabelFlush(type: Type, channel: PositionScaleChannel) {\n if (channel === 'x' && contains(['quantitative', 'temporal'], type)) {\n return true;\n }\n return undefined;\n}\n\nexport function defaultLabelOverlap(type: Type, scaleType: ScaleType, hasTimeUnit: boolean, sort?: Sort) {\n // do not prevent overlap for nominal data because there is no way to infer what the missing labels are\n if ((hasTimeUnit && !isObject(sort)) || (type !== 'nominal' && type !== 'ordinal')) {\n if (scaleType === 'log' || scaleType === 'symlog') {\n return 'greedy';\n }\n return true;\n }\n return undefined;\n}\n\nexport function defaultOrient(channel: PositionScaleChannel) {\n return channel === 'x' ? 'bottom' : 'left';\n}\n\nexport function defaultTickCount({\n fieldOrDatumDef,\n scaleType,\n size,\n values: vals\n}: {\n fieldOrDatumDef: TypedFieldDef | DatumDef;\n scaleType: ScaleType;\n size?: SignalRef;\n values?: AxisInternal['values'];\n}) {\n if (!vals && !hasDiscreteDomain(scaleType) && scaleType !== 'log') {\n if (isFieldDef(fieldOrDatumDef)) {\n if (isBinning(fieldOrDatumDef.bin)) {\n // for binned data, we don't want more ticks than maxbins\n return {signal: `ceil(${size.signal}/10)`};\n }\n\n if (\n fieldOrDatumDef.timeUnit &&\n contains(['month', 'hours', 'day', 'quarter'], normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit)\n ) {\n return undefined;\n }\n }\n\n return {signal: `ceil(${size.signal}/40)`};\n }\n\n return undefined;\n}\n\nexport function getFieldDefTitle(model: UnitModel, channel: 'x' | 'y') {\n const channel2 = channel === 'x' ? 'x2' : 'y2';\n const fieldDef = model.fieldDef(channel);\n const fieldDef2 = model.fieldDef(channel2);\n\n const title1 = fieldDef ? fieldDef.title : undefined;\n const title2 = fieldDef2 ? fieldDef2.title : undefined;\n\n if (title1 && title2) {\n return mergeTitle(title1, title2);\n } else if (title1) {\n return title1;\n } else if (title2) {\n return title2;\n } else if (title1 !== undefined) {\n // falsy value to disable config\n return title1;\n } else if (title2 !== undefined) {\n // falsy value to disable config\n return title2;\n }\n\n return undefined;\n}\n\nexport function values(axis: AxisInternal, fieldOrDatumDef: TypedFieldDef | DatumDef) {\n const vals = axis.values;\n\n if (isArray(vals)) {\n return valueArray(fieldOrDatumDef, vals);\n } else if (isSignalRef(vals)) {\n return vals;\n }\n\n return undefined;\n}\n\nexport function defaultZindex(mark: Mark, fieldDef: TypedFieldDef | DatumDef) {\n if (mark === 'rect' && isDiscrete(fieldDef)) {\n return 1;\n }\n return 0;\n}\n","import {FormulaTransform as VgFormulaTransform} from 'vega';\nimport {SingleDefChannel} from '../../channel';\nimport {FieldRefOption, isScaleFieldDef, TypedFieldDef, vgField} from '../../channeldef';\nimport {DateTime} from '../../datetime';\nimport {fieldFilterExpression} from '../../predicate';\nimport {isSortArray} from '../../sort';\nimport {CalculateTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {ModelWithField} from '../model';\nimport {DataFlowNode} from './dataflow';\nimport {getDependentFields} from './expressions';\n\nexport class CalculateNode extends DataFlowNode {\n private _dependentFields: Set;\n\n public clone() {\n return new CalculateNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private readonly transform: CalculateTransform) {\n super(parent);\n\n this._dependentFields = getDependentFields(this.transform.calculate);\n }\n\n public static parseAllForSortIndex(parent: DataFlowNode, model: ModelWithField) {\n // get all the encoding with sort fields from model\n model.forEachFieldDef((fieldDef: TypedFieldDef, channel: SingleDefChannel) => {\n if (!isScaleFieldDef(fieldDef)) {\n return;\n }\n if (isSortArray(fieldDef.sort)) {\n const {field, timeUnit} = fieldDef;\n const sort: (number | string | boolean | DateTime)[] = fieldDef.sort;\n // generate `datum[\"a\"] === val0 ? 0 : datum[\"a\"] === val1 ? 1 : ... : n` via FieldEqualPredicate\n const calculate =\n sort\n .map((sortValue, i) => {\n return `${fieldFilterExpression({field, timeUnit, equal: sortValue})} ? ${i} : `;\n })\n .join('') + sort.length;\n\n parent = new CalculateNode(parent, {\n calculate,\n as: sortArrayIndexField(fieldDef, channel, {forAs: true})\n });\n }\n });\n return parent;\n }\n\n public producedFields() {\n return new Set([this.transform.as]);\n }\n\n public dependentFields() {\n return this._dependentFields;\n }\n\n public assemble(): VgFormulaTransform {\n return {\n type: 'formula',\n expr: this.transform.calculate,\n as: this.transform.as\n };\n }\n\n public hash() {\n return `Calculate ${hash(this.transform)}`;\n }\n}\n\nexport function sortArrayIndexField(fieldDef: TypedFieldDef, channel: SingleDefChannel, opt?: FieldRefOption) {\n return vgField(fieldDef, {prefix: channel, suffix: 'sort_index', ...(opt ?? {})});\n}\n","import {Orient, SignalRef} from 'vega';\nimport {FacetChannel} from '../../channel';\nimport {Config} from '../../config';\nimport {Header} from '../../header';\nimport {contains, getFirstDefined} from '../../util';\nimport {HeaderChannel} from './component';\n\n/**\n * Get header channel, which can be different from facet channel when orient is specified or when the facet channel is facet.\n */\nexport function getHeaderChannel(channel: FacetChannel, orient: Orient): HeaderChannel {\n if (contains(['top', 'bottom'], orient)) {\n return 'column';\n } else if (contains(['left', 'right'], orient)) {\n return 'row';\n }\n return channel === 'row' ? 'row' : 'column';\n}\n\nexport function getHeaderProperty

>(\n prop: P,\n header: Header,\n config: Config,\n channel: FacetChannel\n): Header[P] {\n const headerSpecificConfig =\n channel === 'row' ? config.headerRow : channel === 'column' ? config.headerColumn : config.headerFacet;\n\n return getFirstDefined((header || {})[prop], headerSpecificConfig[prop], config.header[prop]);\n}\n\nexport function getHeaderProperties(\n properties: (keyof Header)[],\n header: Header,\n config: Config,\n channel: FacetChannel\n): Header {\n const props = {};\n for (const prop of properties) {\n const value = getHeaderProperty(prop, header || {}, config, channel);\n if (value !== undefined) {\n props[prop] = value;\n }\n }\n return props;\n}\n","/**\n * Utility for generating row / column headers\n */\nimport {Axis as VgAxis, SignalRef, Text} from 'vega';\nimport {FacetFieldDef} from '../../spec/facet';\n\nexport type HeaderChannel = 'row' | 'column';\nexport const HEADER_CHANNELS: HeaderChannel[] = ['row', 'column'];\n\nexport type HeaderType = 'header' | 'footer';\nexport const HEADER_TYPES: HeaderType[] = ['header', 'footer'];\n\nexport interface LayoutHeaderComponentIndex {\n row?: LayoutHeaderComponent;\n column?: LayoutHeaderComponent;\n facet?: LayoutHeaderComponent;\n}\n\n/**\n * A component that represents all header, footers and title of a Vega group with layout directive.\n */\nexport interface LayoutHeaderComponent {\n title?: Text | SignalRef;\n\n // TODO: concat can have multiple header / footer.\n // Need to redesign this part a bit.\n\n facetFieldDef?: FacetFieldDef;\n\n /**\n * An array of header components for headers.\n * For facet, there should be only one header component, which is data-driven.\n * For concat, there can be multiple header components that explicitly list different axes.\n */\n header?: HeaderComponent[];\n\n /**\n * An array of header components for footers.\n * For facet, there should be only one header component, which is data-driven.\n * For concat, there can be multiple header components that explicitly list different axes.\n */\n footer?: HeaderComponent[];\n}\n\n/**\n * A component that represents one group of row/column-header/footer.\n */\nexport interface HeaderComponent {\n labels: boolean;\n\n sizeSignal: {signal: string};\n\n axes: VgAxis[];\n}\n","/**\n * Utility for generating row / column headers\n */\n\nimport {SignalRef, TitleAnchor, TitleConfig} from 'vega';\nimport {isArray} from 'vega-util';\nimport {FacetChannel, FACET_CHANNELS} from '../../channel';\nimport {vgField} from '../../channeldef';\nimport {Config} from '../../config';\nimport {\n CoreHeader,\n HEADER_LABEL_PROPERTIES,\n HEADER_LABEL_PROPERTIES_MAP,\n HEADER_TITLE_PROPERTIES,\n HEADER_TITLE_PROPERTIES_MAP\n} from '../../header';\nimport {isSortField} from '../../sort';\nimport {FacetFieldDef, isFacetMapping} from '../../spec/facet';\nimport {contains, isEmpty, normalizeAngle, replaceAll} from '../../util';\nimport {RowCol, VgComparator, VgMarkGroup, VgTitle} from '../../vega.schema';\nimport {defaultLabelAlign, defaultLabelBaseline} from '../axis/properties';\nimport {sortArrayIndexField} from '../data/calculate';\nimport {formatSignalRef} from '../format';\nimport {isFacetModel, Model} from '../model';\nimport {getHeaderChannel, getHeaderProperties, getHeaderProperty} from './common';\nimport {\n HeaderChannel,\n HeaderComponent,\n HeaderType,\n HEADER_TYPES,\n LayoutHeaderComponent,\n LayoutHeaderComponentIndex\n} from './component';\n\n// TODO: rename to assembleHeaderTitleGroup\nexport function assembleTitleGroup(model: Model, channel: FacetChannel) {\n const title = model.component.layoutHeaders[channel].title;\n const config = model.config ? model.config : undefined;\n const facetFieldDef = model.component.layoutHeaders[channel].facetFieldDef\n ? model.component.layoutHeaders[channel].facetFieldDef\n : undefined;\n\n const {\n titleAnchor,\n titleAngle: ta,\n titleOrient\n } = getHeaderProperties(['titleAnchor', 'titleAngle', 'titleOrient'], facetFieldDef.header, config, channel);\n const headerChannel = getHeaderChannel(channel, titleOrient);\n\n const titleAngle = normalizeAngle(ta);\n\n return {\n name: `${channel}-title`,\n type: 'group',\n role: `${headerChannel}-title`,\n title: {\n text: title,\n ...(channel === 'row' ? {orient: 'left'} : {}),\n style: 'guide-title',\n ...defaultHeaderGuideBaseline(titleAngle, headerChannel),\n ...defaultHeaderGuideAlign(headerChannel, titleAngle, titleAnchor),\n ...assembleHeaderProperties(config, facetFieldDef, channel, HEADER_TITLE_PROPERTIES, HEADER_TITLE_PROPERTIES_MAP)\n }\n };\n}\n\nexport function defaultHeaderGuideAlign(headerChannel: HeaderChannel, angle: number, anchor: TitleAnchor = 'middle') {\n switch (anchor) {\n case 'start':\n return {align: 'left'};\n case 'end':\n return {align: 'right'};\n }\n\n const align = defaultLabelAlign(angle, headerChannel === 'row' ? 'left' : 'top', headerChannel === 'row' ? 'y' : 'x');\n return align ? {align} : {};\n}\n\nexport function defaultHeaderGuideBaseline(angle: number, channel: FacetChannel) {\n const baseline = defaultLabelBaseline(angle, channel === 'row' ? 'left' : 'top', channel === 'row' ? 'y' : 'x', true);\n return baseline ? {baseline} : {};\n}\n\nexport function assembleHeaderGroups(model: Model, channel: HeaderChannel): VgMarkGroup[] {\n const layoutHeader = model.component.layoutHeaders[channel];\n const groups = [];\n for (const headerType of HEADER_TYPES) {\n if (layoutHeader[headerType]) {\n for (const headerComponent of layoutHeader[headerType]) {\n const group = assembleHeaderGroup(model, channel, headerType, layoutHeader, headerComponent);\n if (group != null) {\n groups.push(group);\n }\n }\n }\n }\n return groups;\n}\n\nfunction getSort(facetFieldDef: FacetFieldDef, channel: HeaderChannel): VgComparator {\n const {sort} = facetFieldDef;\n if (isSortField(sort)) {\n return {\n field: vgField(sort, {expr: 'datum'}),\n order: sort.order ?? 'ascending'\n };\n } else if (isArray(sort)) {\n return {\n field: sortArrayIndexField(facetFieldDef, channel, {expr: 'datum'}),\n order: 'ascending'\n };\n } else {\n return {\n field: vgField(facetFieldDef, {expr: 'datum'}),\n order: sort ?? 'ascending'\n };\n }\n}\n\nexport function assembleLabelTitle(\n facetFieldDef: FacetFieldDef,\n channel: FacetChannel,\n config: Config\n) {\n const {format, formatType, labelAngle, labelAnchor, labelOrient, labelExpr} = getHeaderProperties(\n ['format', 'formatType', 'labelAngle', 'labelAnchor', 'labelOrient', 'labelExpr'],\n facetFieldDef.header,\n config,\n channel\n );\n\n const titleTextExpr = formatSignalRef({\n fieldOrDatumDef: facetFieldDef,\n format,\n formatType,\n expr: 'parent',\n config\n }).signal;\n const headerChannel = getHeaderChannel(channel, labelOrient);\n\n return {\n text: {\n signal: labelExpr\n ? replaceAll(\n replaceAll(labelExpr, 'datum.label', titleTextExpr),\n 'datum.value',\n vgField(facetFieldDef, {expr: 'parent'})\n )\n : titleTextExpr\n },\n ...(channel === 'row' ? {orient: 'left'} : {}),\n style: 'guide-label',\n frame: 'group',\n ...defaultHeaderGuideBaseline(labelAngle, headerChannel),\n ...defaultHeaderGuideAlign(headerChannel, labelAngle, labelAnchor),\n ...assembleHeaderProperties(config, facetFieldDef, channel, HEADER_LABEL_PROPERTIES, HEADER_LABEL_PROPERTIES_MAP)\n };\n}\n\nexport function assembleHeaderGroup(\n model: Model,\n channel: HeaderChannel,\n headerType: HeaderType,\n layoutHeader: LayoutHeaderComponent,\n headerComponent: HeaderComponent\n) {\n if (headerComponent) {\n let title = null;\n const {facetFieldDef} = layoutHeader;\n const config = model.config ? model.config : undefined;\n if (facetFieldDef && headerComponent.labels) {\n const {labelOrient} = getHeaderProperties(['labelOrient'], facetFieldDef.header, config, channel);\n\n // Include label title in the header if orient aligns with the channel\n if (\n (channel === 'row' && !contains(['top', 'bottom'], labelOrient)) ||\n (channel === 'column' && !contains(['left', 'right'], labelOrient))\n ) {\n title = assembleLabelTitle(facetFieldDef, channel, config);\n }\n }\n\n const isFacetWithoutRowCol = isFacetModel(model) && !isFacetMapping(model.facet);\n\n const axes = headerComponent.axes;\n\n const hasAxes = axes?.length > 0;\n if (title || hasAxes) {\n const sizeChannel = channel === 'row' ? 'height' : 'width';\n\n return {\n name: model.getName(`${channel}_${headerType}`),\n type: 'group',\n role: `${channel}-${headerType}`,\n\n ...(layoutHeader.facetFieldDef\n ? {\n from: {data: model.getName(`${channel}_domain`)},\n sort: getSort(facetFieldDef, channel)\n }\n : {}),\n ...(hasAxes && isFacetWithoutRowCol\n ? {\n from: {data: model.getName(`facet_domain_${channel}`)}\n }\n : {}),\n\n ...(title ? {title} : {}),\n ...(headerComponent.sizeSignal\n ? {\n encode: {\n update: {\n [sizeChannel]: headerComponent.sizeSignal\n }\n }\n }\n : {}),\n ...(hasAxes ? {axes} : {})\n };\n }\n }\n return null;\n}\n\nconst LAYOUT_TITLE_BAND = {\n column: {\n start: 0,\n end: 1\n },\n row: {\n start: 1,\n end: 0\n }\n};\n\nexport function getLayoutTitleBand(titleAnchor: TitleAnchor, headerChannel: HeaderChannel) {\n return LAYOUT_TITLE_BAND[headerChannel][titleAnchor];\n}\n\nexport function assembleLayoutTitleBand(\n headerComponentIndex: LayoutHeaderComponentIndex,\n config: Config\n): RowCol {\n const titleBand = {};\n\n for (const channel of FACET_CHANNELS) {\n const headerComponent = headerComponentIndex[channel];\n if (headerComponent?.facetFieldDef) {\n const {titleAnchor, titleOrient} = getHeaderProperties(\n ['titleAnchor', 'titleOrient'],\n headerComponent.facetFieldDef.header,\n config,\n channel\n );\n\n const headerChannel = getHeaderChannel(channel, titleOrient);\n const band = getLayoutTitleBand(titleAnchor, headerChannel);\n if (band !== undefined) {\n titleBand[headerChannel] = band;\n }\n }\n }\n\n return isEmpty(titleBand) ? undefined : titleBand;\n}\n\nexport function assembleHeaderProperties(\n config: Config,\n facetFieldDef: FacetFieldDef,\n channel: FacetChannel,\n properties: (keyof CoreHeader)[],\n propertiesMap: Partial, keyof TitleConfig>>\n): Partial {\n const props = {};\n for (const prop of properties) {\n if (!propertiesMap[prop]) {\n continue;\n }\n\n const value = getHeaderProperty(prop, facetFieldDef?.header, config, channel);\n if (value !== undefined) {\n props[propertiesMap[prop]] = value;\n }\n }\n return props;\n}\n","import {InitSignal, NewSignal} from 'vega';\nimport {getViewConfigContinuousSize} from '../../config';\nimport {hasDiscreteDomain} from '../../scale';\nimport {getFirstDefined} from '../../util';\nimport {isVgRangeStep, VgRangeStep} from '../../vega.schema';\nimport {signalOrStringValue} from '../common';\nimport {isFacetModel, Model} from '../model';\nimport {ScaleComponent} from '../scale/component';\nimport {LayoutSizeType} from './component';\n\nexport function assembleLayoutSignals(model: Model): NewSignal[] {\n return [\n ...sizeSignals(model, 'width'),\n ...sizeSignals(model, 'height'),\n ...sizeSignals(model, 'childWidth'),\n ...sizeSignals(model, 'childHeight')\n ];\n}\n\nexport function sizeSignals(model: Model, sizeType: LayoutSizeType): (NewSignal | InitSignal)[] {\n const channel = sizeType === 'width' ? 'x' : 'y';\n const size = model.component.layoutSize.get(sizeType);\n if (!size || size === 'merged') {\n return [];\n }\n\n // Read size signal name from name map, just in case it is the top-level size signal that got renamed.\n const name = model.getSizeSignalRef(sizeType).signal;\n\n if (size === 'step') {\n const scaleComponent = model.getScaleComponent(channel);\n\n if (scaleComponent) {\n const type = scaleComponent.get('type');\n const range = scaleComponent.get('range');\n\n if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n const scaleName = model.scaleName(channel);\n\n if (isFacetModel(model.parent)) {\n // If parent is facet and this is an independent scale, return only signal signal\n // as the width/height will be calculated using the cardinality from\n // facet's aggregate rather than reading from scale domain\n const parentResolve = model.parent.component.resolve;\n if (parentResolve.scale[channel] === 'independent') {\n return [stepSignal(scaleName, range)];\n }\n }\n\n return [\n stepSignal(scaleName, range),\n {\n name,\n update: sizeExpr(scaleName, scaleComponent, `domain('${scaleName}').length`)\n }\n ];\n }\n }\n /* istanbul ignore next: Condition should not happen -- only for warning in development. */\n throw new Error('layout size is step although width/height is not step.');\n } else if (size == 'container') {\n const isWidth = name.endsWith('width');\n const expr = isWidth ? 'containerSize()[0]' : 'containerSize()[1]';\n const defaultValue = getViewConfigContinuousSize(model.config.view, isWidth ? 'width' : 'height');\n const safeExpr = `isFinite(${expr}) ? ${expr} : ${defaultValue}`;\n return [{name, init: safeExpr, on: [{update: safeExpr, events: 'window:resize'}]}];\n } else {\n return [\n {\n name,\n value: size\n }\n ];\n }\n}\n\nfunction stepSignal(scaleName: string, range: VgRangeStep): NewSignal {\n return {\n name: `${scaleName}_step`,\n value: range.step\n };\n}\n\nexport function sizeExpr(scaleName: string, scaleComponent: ScaleComponent, cardinality: string) {\n const type = scaleComponent.get('type');\n const padding = scaleComponent.get('padding');\n const paddingOuter = getFirstDefined(scaleComponent.get('paddingOuter'), padding);\n\n let paddingInner = scaleComponent.get('paddingInner');\n paddingInner =\n type === 'band'\n ? // only band has real paddingInner\n paddingInner !== undefined\n ? paddingInner\n : padding\n : // For point, as calculated in https://github.com/vega/vega-scale/blob/master/src/band.js#L128,\n // it's equivalent to have paddingInner = 1 since there is only n-1 steps between n points.\n 1;\n return `bandspace(${cardinality}, ${signalOrStringValue(paddingInner)}, ${signalOrStringValue(\n paddingOuter\n )}) * ${scaleName}_step`;\n}\n","import {Split} from '../split';\n\nexport type LayoutSize = number | 'container' | 'step' | 'merged';\n\nexport interface LayoutSizeIndex {\n width?: LayoutSize;\n\n childWidth?: LayoutSize;\n\n height?: LayoutSize;\n\n childHeight?: LayoutSize;\n}\n\nexport type LayoutSizeType = keyof LayoutSizeIndex;\n\nexport type LayoutSizeComponent = Split;\n\nexport function getSizeTypeFromLayoutSizeType(layoutSizeType: LayoutSizeType): 'width' | 'height' {\n return layoutSizeType === 'childWidth' ? 'width' : layoutSizeType === 'childHeight' ? 'height' : layoutSizeType;\n}\n","import {GuideEncodingEntry} from '../guide';\nimport {keys} from '../util';\nimport {VgEncodeChannel} from '../vega.schema';\nimport {signalOrValueRef} from './common';\nimport {wrapCondition} from './mark/encode';\nimport {UnitModel} from './unit';\n\nexport function guideEncodeEntry(encoding: GuideEncodingEntry, model: UnitModel) {\n return keys(encoding).reduce((encode, channel: VgEncodeChannel) => {\n const valueDef = encoding[channel];\n return {\n ...encode,\n ...wrapCondition(model, valueDef, channel, def => signalOrValueRef(def.value))\n };\n }, {});\n}\n","import {isXorY, ScaleChannel} from '../channel';\nimport * as log from '../log';\nimport {Resolve, ResolveMode} from '../resolve';\nimport {isConcatModel, isFacetModel, isLayerModel, Model} from './model';\n\nexport function defaultScaleResolve(channel: ScaleChannel, model: Model): ResolveMode {\n if (isFacetModel(model)) {\n return channel === 'theta' ? 'independent' : 'shared';\n } else if (isLayerModel(model)) {\n return 'shared';\n } else if (isConcatModel(model)) {\n return isXorY(channel) || channel === 'theta' || channel === 'radius' ? 'independent' : 'shared';\n }\n /* istanbul ignore next: should never reach here. */\n throw new Error('invalid model type for resolve');\n}\n\nexport function parseGuideResolve(resolve: Resolve, channel: ScaleChannel): ResolveMode {\n const channelScaleResolve = resolve.scale[channel];\n const guide = isXorY(channel) ? 'axis' : 'legend';\n\n if (channelScaleResolve === 'independent') {\n if (resolve[guide][channel] === 'shared') {\n log.warn(log.message.independentScaleMeansIndependentGuide(channel));\n }\n return 'independent';\n }\n\n return resolve[guide][channel] || 'shared';\n}\n","import {Legend as VgLegend} from 'vega';\nimport {NonPositionScaleChannel} from '../../channel';\nimport {COMMON_LEGEND_PROPERTY_INDEX, LegendInternal} from '../../legend';\nimport {Flag, keys} from '../../util';\nimport {Split} from '../split';\n\nexport type LegendComponentProps = VgLegend & {\n labelExpr?: string;\n selections?: string[];\n disable?: boolean;\n};\n\nconst LEGEND_COMPONENT_PROPERTY_INDEX: Flag = {\n ...COMMON_LEGEND_PROPERTY_INDEX,\n disable: 1,\n labelExpr: 1,\n selections: 1,\n // channel scales\n opacity: 1,\n shape: 1,\n stroke: 1,\n fill: 1,\n size: 1,\n strokeWidth: 1,\n strokeDash: 1,\n // encode\n encode: 1\n};\n\nexport const LEGEND_COMPONENT_PROPERTIES = keys(LEGEND_COMPONENT_PROPERTY_INDEX);\n\nexport class LegendComponent extends Split {}\n\nexport type LegendComponentIndex = Partial>;\n\nexport type LegendInternalIndex = Partial>;\n","import {ColorValueRef, EncodeEntry, Gradient, LegendEncode, LegendType, SignalRef, SymbolEncodeEntry} from 'vega';\nimport {array, isArray, stringValue} from 'vega-util';\nimport {COLOR, NonPositionScaleChannel, OPACITY} from '../../channel';\nimport {\n Conditional,\n DatumDef,\n hasConditionalValueDef,\n isFieldDef,\n isValueDef,\n TypedFieldDef,\n Value,\n ValueDef\n} from '../../channeldef';\nimport {Encoding} from '../../encoding';\nimport {FILL_STROKE_CONFIG} from '../../mark';\nimport {getFirstDefined, isEmpty, varName} from '../../util';\nimport {applyMarkConfig, signalOrValueRef} from '../common';\nimport {formatCustomType, isCustomFormatType} from '../format';\nimport * as mixins from '../mark/encode';\nimport {STORE} from '../selection';\nimport {UnitModel} from '../unit';\nimport {LegendComponent} from './component';\n\nexport interface LegendEncodeParams {\n fieldOrDatumDef: TypedFieldDef | DatumDef;\n model: UnitModel;\n channel: NonPositionScaleChannel;\n legendCmpt: LegendComponent;\n legendType: LegendType;\n}\n\nexport const legendEncodeRules: {\n [part in keyof LegendEncode]?: (spec: EncodeEntry, params: LegendEncodeParams) => EncodeEntry;\n} = {\n symbols,\n gradient,\n labels,\n entries\n};\n\nexport function symbols(\n symbolsSpec: any,\n {fieldOrDatumDef, model, channel, legendCmpt, legendType}: LegendEncodeParams\n): SymbolEncodeEntry {\n if (legendType !== 'symbol') {\n return undefined;\n }\n\n const {markDef, encoding, config, mark} = model;\n const filled = markDef.filled && mark !== 'trail';\n\n let out = {\n ...applyMarkConfig({}, model, FILL_STROKE_CONFIG),\n ...mixins.color(model, {filled})\n } as SymbolEncodeEntry; // FIXME: remove this when VgEncodeEntry is compatible with SymbolEncodeEntry\n\n const symbolOpacity = legendCmpt.get('symbolOpacity') ?? config.legend.symbolOpacity;\n const symbolFillColor = legendCmpt.get('symbolFillColor') ?? config.legend.symbolFillColor;\n const symbolStrokeColor = legendCmpt.get('symbolStrokeColor') ?? config.legend.symbolStrokeColor;\n\n const opacity = symbolOpacity === undefined ? getMaxValue(encoding.opacity) ?? markDef.opacity : undefined;\n\n if (out.fill) {\n // for fill legend, we don't want any fill in symbol\n if (channel === 'fill' || (filled && channel === COLOR)) {\n delete out.fill;\n } else {\n if (out.fill['field']) {\n // For others, set fill to some opaque value (or nothing if a color is already set)\n if (symbolFillColor) {\n delete out.fill;\n } else {\n out.fill = signalOrValueRef(config.legend.symbolBaseFillColor ?? 'black');\n out.fillOpacity = signalOrValueRef(opacity ?? 1);\n }\n } else if (isArray(out.fill)) {\n const fill =\n getFirstConditionValue(encoding.fill ?? encoding.color) ?? markDef.fill ?? (filled && markDef.color);\n if (fill) {\n out.fill = signalOrValueRef(fill) as ColorValueRef;\n }\n }\n }\n }\n\n if (out.stroke) {\n if (channel === 'stroke' || (!filled && channel === COLOR)) {\n delete out.stroke;\n } else {\n if (out.stroke['field'] || symbolStrokeColor) {\n // For others, remove stroke field\n delete out.stroke;\n } else if (isArray(out.stroke)) {\n const stroke = getFirstDefined(\n getFirstConditionValue(encoding.stroke || encoding.color),\n markDef.stroke,\n filled ? markDef.color : undefined\n );\n if (stroke) {\n out.stroke = {value: stroke} as ColorValueRef;\n }\n }\n }\n }\n\n if (channel !== OPACITY) {\n const condition = isFieldDef(fieldOrDatumDef) && selectedCondition(model, legendCmpt, fieldOrDatumDef);\n\n if (condition) {\n out.opacity = [\n {test: condition, ...signalOrValueRef(opacity ?? 1)},\n signalOrValueRef(config.legend.unselectedOpacity)\n ];\n } else if (opacity) {\n out.opacity = signalOrValueRef(opacity);\n }\n }\n\n out = {...out, ...symbolsSpec};\n\n return isEmpty(out) ? undefined : out;\n}\n\nexport function gradient(gradientSpec: any, {model, legendType, legendCmpt}: LegendEncodeParams) {\n if (legendType !== 'gradient') {\n return undefined;\n }\n\n const {config, markDef, encoding} = model;\n\n let out: SymbolEncodeEntry = {};\n\n const gradientOpacity = legendCmpt.get('gradientOpacity') ?? config.legend.gradientOpacity;\n const opacity = gradientOpacity === undefined ? getMaxValue(encoding.opacity) || markDef.opacity : undefined;\n if (opacity) {\n // only apply opacity if it is neither zero or undefined\n out.opacity = signalOrValueRef(opacity);\n }\n\n out = {...out, ...gradientSpec};\n return isEmpty(out) ? undefined : out;\n}\n\nexport function labels(specifiedlabelsSpec: any, {fieldOrDatumDef, model, channel, legendCmpt}: LegendEncodeParams) {\n const legend = model.legend(channel) || {};\n const config = model.config;\n\n const condition = isFieldDef(fieldOrDatumDef) ? selectedCondition(model, legendCmpt, fieldOrDatumDef) : undefined;\n const opacity = condition ? [{test: condition, value: 1}, {value: config.legend.unselectedOpacity}] : undefined;\n\n const {format, formatType} = legend;\n\n const text = isCustomFormatType(formatType)\n ? formatCustomType({\n fieldOrDatumDef,\n field: 'datum.value',\n format,\n formatType,\n config\n })\n : undefined;\n\n const labelsSpec = {\n ...(opacity ? {opacity} : {}),\n ...(text ? {text} : {}),\n ...specifiedlabelsSpec\n };\n\n return isEmpty(labelsSpec) ? undefined : labelsSpec;\n}\n\nexport function entries(entriesSpec: any, {legendCmpt}: LegendEncodeParams) {\n const selections = legendCmpt.get('selections');\n return selections?.length ? {...entriesSpec, fill: {value: 'transparent'}} : entriesSpec;\n}\n\nfunction getMaxValue(channelDef: Encoding['opacity']) {\n return getConditionValue(channelDef, (v: number, conditionalDef) => Math.max(v, conditionalDef.value as any));\n}\n\nexport function getFirstConditionValue(\n channelDef: Encoding['fill' | 'stroke' | 'shape']\n): V {\n return getConditionValue(channelDef, (v: V, conditionalDef: Conditional>) => {\n return getFirstDefined(v, conditionalDef.value);\n });\n}\n\nfunction getConditionValue(\n channelDef: Encoding['fill' | 'stroke' | 'shape' | 'opacity'],\n reducer: (val: V, conditionalDef: Conditional>) => V\n): V {\n if (hasConditionalValueDef(channelDef)) {\n return array(channelDef.condition).reduce(reducer, channelDef.value as any);\n } else if (isValueDef(channelDef)) {\n return channelDef.value as any;\n }\n return undefined;\n}\n\nfunction selectedCondition(model: UnitModel, legendCmpt: LegendComponent, fieldDef: TypedFieldDef) {\n const selections = legendCmpt.get('selections');\n if (!selections?.length) return undefined;\n\n const field = stringValue(fieldDef.field);\n return selections\n .map(name => {\n const store = stringValue(varName(name) + STORE);\n return `(!length(data(${store})) || (${name}[${field}] && indexof(${name}[${field}], datum.value) >= 0))`;\n })\n .join(' || ');\n}\n","import {LabelOverlap, LegendOrient, LegendType, Orientation, SignalRef, SymbolShape} from 'vega';\nimport {isArray} from 'vega-util';\nimport {isColorChannel} from '../../channel';\nimport {DatumDef, MarkPropFieldOrDatumDef, title as fieldDefTitle, TypedFieldDef, valueArray} from '../../channeldef';\nimport {Config} from '../../config';\nimport {Encoding} from '../../encoding';\nimport {Legend, LegendConfig, LegendInternal} from '../../legend';\nimport {Mark, MarkDef} from '../../mark';\nimport {isContinuousToContinuous, ScaleType} from '../../scale';\nimport {TimeUnit} from '../../timeunit';\nimport {contains, getFirstDefined} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {guideFormat, guideFormatType} from '../format';\nimport {Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {NonPositionScaleChannel} from './../../channel';\nimport {LegendComponentProps} from './component';\nimport {getFirstConditionValue} from './encode';\n\nexport interface LegendRuleParams {\n legend: LegendInternal;\n channel: NonPositionScaleChannel;\n model: UnitModel;\n markDef: MarkDef;\n encoding: Encoding;\n fieldOrDatumDef: MarkPropFieldOrDatumDef;\n legendConfig: LegendConfig;\n config: Config;\n scaleType: ScaleType;\n orient: LegendOrient;\n legendType: LegendType;\n direction: Orientation;\n}\n\nexport const legendRules: {\n [k in keyof LegendComponentProps]?: (params: LegendRuleParams) => LegendComponentProps[k];\n} = {\n direction: ({direction}) => direction,\n\n format: ({fieldOrDatumDef, legend, config}) => {\n const {format, formatType} = legend;\n return guideFormat(fieldOrDatumDef, fieldOrDatumDef.type, format, formatType, config, false);\n },\n\n formatType: ({legend, fieldOrDatumDef, scaleType}) => {\n const {formatType} = legend;\n return guideFormatType(formatType, fieldOrDatumDef, scaleType);\n },\n\n gradientLength: params => {\n const {legend, legendConfig} = params;\n return legend.gradientLength ?? legendConfig.gradientLength ?? defaultGradientLength(params);\n },\n\n labelOverlap: ({legend, legendConfig, scaleType}) =>\n legend.labelOverlap ?? legendConfig.labelOverlap ?? defaultLabelOverlap(scaleType),\n\n symbolType: ({legend, markDef, channel, encoding}) =>\n legend.symbolType ?? defaultSymbolType(markDef.type, channel, encoding.shape, markDef.shape),\n\n title: ({fieldOrDatumDef, config}) => fieldDefTitle(fieldOrDatumDef, config, {allowDisabling: true}),\n\n type: ({legendType, scaleType, channel}) => {\n if (isColorChannel(channel) && isContinuousToContinuous(scaleType)) {\n if (legendType === 'gradient') {\n return undefined;\n }\n } else if (legendType === 'symbol') {\n return undefined;\n }\n return legendType;\n }, // depended by other property, let's define upfront\n\n values: ({fieldOrDatumDef, legend}) => values(legend, fieldOrDatumDef)\n};\n\nexport function values(legend: LegendInternal, fieldOrDatumDef: TypedFieldDef | DatumDef) {\n const vals = legend.values;\n\n if (isArray(vals)) {\n return valueArray(fieldOrDatumDef, vals);\n } else if (isSignalRef(vals)) {\n return vals;\n }\n return undefined;\n}\n\nexport function defaultSymbolType(\n mark: Mark,\n channel: NonPositionScaleChannel,\n shapeChannelDef: Encoding['shape'],\n markShape: SymbolShape | SignalRef\n): SymbolShape | SignalRef {\n if (channel !== 'shape') {\n // use the value from the shape encoding or the mark config if they exist\n const shape = getFirstConditionValue(shapeChannelDef) ?? markShape;\n if (shape) {\n return shape;\n }\n }\n\n switch (mark) {\n case 'bar':\n case 'rect':\n case 'image':\n case 'square':\n return 'square';\n case 'line':\n case 'trail':\n case 'rule':\n return 'stroke';\n case 'arc':\n case 'point':\n case 'circle':\n case 'tick':\n case 'geoshape':\n case 'area':\n case 'text':\n return 'circle';\n }\n}\n\nexport function clipHeight(legendType: LegendType) {\n if (legendType === 'gradient') {\n return 20;\n }\n return undefined;\n}\n\nexport function getLegendType(params: {\n legend: LegendInternal;\n channel: NonPositionScaleChannel;\n timeUnit?: TimeUnit;\n scaleType: ScaleType;\n}): LegendType {\n const {legend} = params;\n\n return getFirstDefined(legend.type, defaultType(params));\n}\n\nexport function defaultType({\n channel,\n timeUnit,\n scaleType\n}: {\n channel: NonPositionScaleChannel;\n timeUnit?: TimeUnit;\n scaleType: ScaleType;\n}): LegendType {\n // Following the logic in https://github.com/vega/vega-parser/blob/master/src/parsers/legend.js\n\n if (isColorChannel(channel)) {\n if (contains(['quarter', 'month', 'day'], timeUnit)) {\n return 'symbol';\n }\n\n if (isContinuousToContinuous(scaleType)) {\n return 'gradient';\n }\n }\n return 'symbol';\n}\n\nexport function getDirection({\n legendConfig,\n legendType,\n orient,\n legend\n}: {\n orient: LegendOrient;\n legendConfig: LegendConfig;\n legendType: LegendType;\n legend: Legend;\n}): Orientation {\n return (\n legend.direction ??\n legendConfig[legendType ? 'gradientDirection' : 'symbolDirection'] ??\n defaultDirection(orient, legendType)\n );\n}\n\nexport function defaultDirection(orient: LegendOrient, legendType: LegendType): 'horizontal' | undefined {\n switch (orient) {\n case 'top':\n case 'bottom':\n return 'horizontal';\n\n case 'left':\n case 'right':\n case 'none':\n case undefined: // undefined = \"right\" in Vega\n return undefined; // vertical is Vega's default\n default:\n // top-left / ...\n // For inner legend, uses compact layout like Tableau\n return legendType === 'gradient' ? 'horizontal' : undefined;\n }\n}\n\nexport function defaultGradientLength({\n legendConfig,\n model,\n direction,\n orient,\n scaleType\n}: {\n scaleType: ScaleType;\n direction: Orientation;\n orient: LegendOrient;\n model: Model;\n legendConfig: LegendConfig;\n}) {\n const {\n gradientHorizontalMaxLength,\n gradientHorizontalMinLength,\n gradientVerticalMaxLength,\n gradientVerticalMinLength\n } = legendConfig;\n if (isContinuousToContinuous(scaleType)) {\n if (direction === 'horizontal') {\n if (orient === 'top' || orient === 'bottom') {\n return gradientLengthSignal(model, 'width', gradientHorizontalMinLength, gradientHorizontalMaxLength);\n } else {\n return gradientHorizontalMinLength;\n }\n } else {\n // vertical / undefined (Vega uses vertical by default)\n return gradientLengthSignal(model, 'height', gradientVerticalMinLength, gradientVerticalMaxLength);\n }\n }\n return undefined;\n}\n\nfunction gradientLengthSignal(model: Model, sizeType: 'width' | 'height', min: number, max: number) {\n const sizeSignal = model.getSizeSignalRef(sizeType).signal;\n return {signal: `clamp(${sizeSignal}, ${min}, ${max})`};\n}\n\nexport function defaultLabelOverlap(scaleType: ScaleType): LabelOverlap {\n if (contains(['quantile', 'threshold', 'log', 'symlog'], scaleType)) {\n return 'greedy';\n }\n return undefined;\n}\n","import {Legend as VgLegend, LegendEncode} from 'vega';\nimport {COLOR, NonPositionScaleChannel, SHAPE} from '../../channel';\nimport {DatumDef, FieldDef, getFieldOrDatumDef, isFieldDef, MarkPropDatumDef, MarkPropFieldDef} from '../../channeldef';\nimport {LegendInternal, LEGEND_SCALE_CHANNELS} from '../../legend';\nimport {normalizeTimeUnit} from '../../timeunit';\nimport {GEOJSON} from '../../type';\nimport {deleteNestedProperty, isEmpty, keys, varName} from '../../util';\nimport {mergeTitleComponent} from '../common';\nimport {guideEncodeEntry} from '../guide';\nimport {isUnitModel, Model} from '../model';\nimport {parseGuideResolve} from '../resolve';\nimport {parseInteractiveLegend} from '../selection/legends';\nimport {defaultTieBreaker, Explicit, makeImplicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {LegendComponent, LegendComponentIndex, LegendComponentProps, LEGEND_COMPONENT_PROPERTIES} from './component';\nimport {LegendEncodeParams, legendEncodeRules} from './encode';\nimport {getDirection, getLegendType, LegendRuleParams, legendRules} from './properties';\n\nexport function parseLegend(model: Model) {\n const legendComponent = isUnitModel(model) ? parseUnitLegend(model) : parseNonUnitLegend(model);\n model.component.legends = legendComponent;\n return legendComponent;\n}\n\nfunction parseUnitLegend(model: UnitModel): LegendComponentIndex {\n const {encoding} = model;\n\n const legendComponent: LegendComponentIndex = {};\n\n for (const channel of [COLOR, ...LEGEND_SCALE_CHANNELS]) {\n const def = getFieldOrDatumDef(encoding[channel]) as MarkPropFieldDef | MarkPropDatumDef;\n\n if (!def || !model.getScaleComponent(channel)) {\n continue;\n }\n\n if (channel === SHAPE && isFieldDef(def) && def.type === GEOJSON) {\n continue;\n }\n\n legendComponent[channel] = parseLegendForChannel(model, channel);\n }\n\n return legendComponent;\n}\n\nfunction getLegendDefWithScale(model: UnitModel, channel: NonPositionScaleChannel): VgLegend {\n const scale = model.scaleName(channel);\n if (model.mark === 'trail') {\n if (channel === 'color') {\n // trail is a filled mark, but its default symbolType (\"stroke\") should use \"stroke\"\n return {stroke: scale};\n } else if (channel === 'size') {\n return {strokeWidth: scale};\n }\n }\n\n if (channel === 'color') {\n return model.markDef.filled ? {fill: scale} : {stroke: scale};\n }\n return {[channel]: scale};\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isExplicit(\n value: T,\n property: keyof LegendComponentProps,\n legend: LegendInternal,\n fieldDef: FieldDef\n) {\n switch (property) {\n case 'disable':\n return legend !== undefined; // if axis is specified or null/false, then its enable/disable state is explicit\n case 'values':\n // specified legend.values is already respected, but may get transformed.\n return !!legend?.values;\n case 'title':\n // title can be explicit if fieldDef.title is set\n if (property === 'title' && value === fieldDef?.title) {\n return true;\n }\n }\n // Otherwise, things are explicit if the returned value matches the specified property\n return value === (legend || {})[property];\n}\n\nexport function parseLegendForChannel(model: UnitModel, channel: NonPositionScaleChannel): LegendComponent {\n let legend = model.legend(channel);\n\n const {markDef, encoding, config} = model;\n const legendConfig = config.legend;\n const legendCmpt = new LegendComponent({}, getLegendDefWithScale(model, channel));\n parseInteractiveLegend(model, channel, legendCmpt);\n\n const disable = legend !== undefined ? !legend : legendConfig.disable;\n legendCmpt.set('disable', disable, legend !== undefined);\n if (disable) {\n return legendCmpt;\n }\n\n legend = legend || {};\n\n const scaleType = model.getScaleComponent(channel).get('type');\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as MarkPropFieldDef | DatumDef;\n const timeUnit = isFieldDef(fieldOrDatumDef) ? normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit : undefined;\n\n const orient = legend.orient || config.legend.orient || 'right';\n const legendType = getLegendType({legend, channel, timeUnit, scaleType});\n\n const direction = getDirection({legend, legendType, orient, legendConfig});\n\n const ruleParams: LegendRuleParams = {\n legend,\n channel,\n model,\n markDef,\n encoding,\n fieldOrDatumDef,\n legendConfig,\n config,\n scaleType,\n orient,\n legendType,\n direction\n };\n\n for (const property of LEGEND_COMPONENT_PROPERTIES) {\n if (\n (legendType === 'gradient' && property.startsWith('symbol')) ||\n (legendType === 'symbol' && property.startsWith('gradient'))\n ) {\n continue;\n }\n\n const value = property in legendRules ? legendRules[property](ruleParams) : legend[property];\n if (value !== undefined) {\n const explicit = isExplicit(value, property, legend, model.fieldDef(channel));\n if (explicit || config.legend[property] === undefined) {\n legendCmpt.set(property, value, explicit);\n }\n }\n }\n\n const legendEncoding = legend?.encoding ?? {};\n const selections = legendCmpt.get('selections');\n const legendEncode: LegendEncode = {};\n\n const legendEncodeParams: LegendEncodeParams = {fieldOrDatumDef, model, channel, legendCmpt, legendType};\n\n for (const part of ['labels', 'legend', 'title', 'symbols', 'gradient', 'entries']) {\n const legendEncodingPart = guideEncodeEntry(legendEncoding[part] ?? {}, model);\n\n const value =\n part in legendEncodeRules\n ? legendEncodeRules[part](legendEncodingPart, legendEncodeParams) // apply rule\n : legendEncodingPart; // no rule -- just default values\n\n if (value !== undefined && !isEmpty(value)) {\n legendEncode[part] = {\n ...(selections?.length && isFieldDef(fieldOrDatumDef)\n ? {name: `${varName(fieldOrDatumDef.field)}_legend_${part}`}\n : {}),\n ...(selections?.length ? {interactive: !!selections} : {}),\n update: value\n };\n }\n }\n\n if (!isEmpty(legendEncode)) {\n legendCmpt.set('encode', legendEncode, !!legend?.encoding);\n }\n\n return legendCmpt;\n}\n\nfunction parseNonUnitLegend(model: Model) {\n const {legends, resolve} = model.component;\n\n for (const child of model.children) {\n parseLegend(child);\n\n for (const channel of keys(child.component.legends)) {\n resolve.legend[channel] = parseGuideResolve(model.component.resolve, channel);\n\n if (resolve.legend[channel] === 'shared') {\n // If the resolve says shared (and has not been overridden)\n // We will try to merge and see if there is a conflict\n\n legends[channel] = mergeLegendComponent(legends[channel], child.component.legends[channel]);\n\n if (!legends[channel]) {\n // If merge returns nothing, there is a conflict so we cannot make the legend shared.\n // Thus, mark legend as independent and remove the legend component.\n resolve.legend[channel] = 'independent';\n delete legends[channel];\n }\n }\n }\n }\n\n for (const channel of keys(legends)) {\n for (const child of model.children) {\n if (!child.component.legends[channel]) {\n // skip if the child does not have a particular legend\n continue;\n }\n\n if (resolve.legend[channel] === 'shared') {\n // After merging shared legend, make sure to remove legend from child\n delete child.component.legends[channel];\n }\n }\n }\n\n return legends;\n}\n\nexport function mergeLegendComponent(mergedLegend: LegendComponent, childLegend: LegendComponent): LegendComponent {\n if (!mergedLegend) {\n return childLegend.clone();\n }\n const mergedOrient = mergedLegend.getWithExplicit('orient');\n const childOrient = childLegend.getWithExplicit('orient');\n\n if (mergedOrient.explicit && childOrient.explicit && mergedOrient.value !== childOrient.value) {\n // TODO: throw warning if resolve is explicit (We don't have info about explicit/implicit resolve yet.)\n // Cannot merge due to inconsistent orient\n return undefined;\n }\n\n let typeMerged = false;\n // Otherwise, let's merge\n for (const prop of LEGEND_COMPONENT_PROPERTIES) {\n const mergedValueWithExplicit = mergeValuesWithExplicit(\n mergedLegend.getWithExplicit(prop),\n childLegend.getWithExplicit(prop),\n prop,\n 'legend',\n\n // Tie breaker function\n (v1: Explicit, v2: Explicit): any => {\n switch (prop) {\n case 'symbolType':\n return mergeSymbolType(v1, v2);\n case 'title':\n return mergeTitleComponent(v1, v2);\n case 'type':\n // There are only two types. If we have different types, then prefer symbol over gradient.\n typeMerged = true;\n return makeImplicit('symbol');\n }\n return defaultTieBreaker(v1, v2, prop, 'legend');\n }\n );\n mergedLegend.setWithExplicit(prop, mergedValueWithExplicit);\n }\n if (typeMerged) {\n if (mergedLegend.implicit?.encode?.gradient) {\n deleteNestedProperty(mergedLegend.implicit, ['encode', 'gradient']);\n }\n if (mergedLegend.explicit?.encode?.gradient) {\n deleteNestedProperty(mergedLegend.explicit, ['encode', 'gradient']);\n }\n }\n\n return mergedLegend;\n}\n\nfunction mergeSymbolType(st1: Explicit, st2: Explicit) {\n if (st2.value === 'circle') {\n // prefer \"circle\" over \"stroke\"\n return st2;\n }\n return st1;\n}\n","import {Legend as VgLegend, LegendEncode} from 'vega';\nimport {Config} from '../../config';\nimport {LEGEND_SCALE_CHANNELS} from '../../legend';\nimport {keys, replaceAll, stringify, vals} from '../../util';\nimport {isSignalRef, VgEncodeChannel, VgValueRef} from '../../vega.schema';\nimport {Model} from '../model';\nimport {LegendComponent} from './component';\nimport {mergeLegendComponent} from './parse';\n\nfunction setLegendEncode(\n legend: VgLegend,\n part: keyof LegendEncode,\n vgProp: VgEncodeChannel,\n vgRef: VgValueRef | VgValueRef[]\n) {\n legend.encode ??= {};\n legend.encode[part] ??= {};\n legend.encode[part].update ??= {};\n // TODO: remove as any after https://github.com/prisma/nexus-prisma/issues/291\n (legend.encode[part].update[vgProp] as any) = vgRef;\n}\n\nexport function assembleLegends(model: Model): VgLegend[] {\n const legendComponentIndex = model.component.legends;\n const legendByDomain: Record = {};\n\n for (const channel of keys(legendComponentIndex)) {\n const scaleComponent = model.getScaleComponent(channel);\n const domainHash = stringify(scaleComponent.get('domains'));\n if (legendByDomain[domainHash]) {\n for (const mergedLegendComponent of legendByDomain[domainHash]) {\n const merged = mergeLegendComponent(mergedLegendComponent, legendComponentIndex[channel]);\n if (!merged) {\n // If cannot merge, need to add this legend separately\n legendByDomain[domainHash].push(legendComponentIndex[channel]);\n }\n }\n } else {\n legendByDomain[domainHash] = [legendComponentIndex[channel].clone()];\n }\n }\n\n const legends = vals(legendByDomain)\n .flat()\n .map(l => assembleLegend(l, model.config))\n .filter(l => l !== undefined);\n\n return legends;\n}\n\nexport function assembleLegend(legendCmpt: LegendComponent, config: Config) {\n const {disable, labelExpr, selections, ...legend} = legendCmpt.combine();\n\n if (disable) {\n return undefined;\n }\n\n if (config.aria === false && legend.aria == undefined) {\n legend.aria = false;\n }\n\n if (legend.encode?.symbols) {\n const out = legend.encode.symbols.update;\n if (out.fill && out.fill['value'] !== 'transparent' && !out.stroke && !legend.stroke) {\n // For non color channel's legend, we need to override symbol stroke config from Vega config if stroke channel is not used.\n out.stroke = {value: 'transparent'};\n }\n\n // Remove properties that the legend is encoding.\n for (const property of LEGEND_SCALE_CHANNELS) {\n if (legend[property]) {\n delete out[property];\n }\n }\n }\n\n if (!legend.title) {\n // title schema doesn't include null, ''\n delete legend.title;\n }\n\n if (labelExpr !== undefined) {\n let expr = labelExpr;\n if (legend.encode?.labels?.update && isSignalRef(legend.encode.labels.update.text)) {\n expr = replaceAll(labelExpr, 'datum.label', legend.encode.labels.update.text.signal);\n }\n setLegendEncode(legend, 'labels', 'text', {signal: expr});\n }\n\n return legend;\n}\n","import {Projection as VgProjection, SignalRef} from 'vega';\nimport {contains} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {isConcatModel, isLayerModel, Model} from '../model';\n\nexport function assembleProjections(model: Model): VgProjection[] {\n if (isLayerModel(model) || isConcatModel(model)) {\n return assembleProjectionsForModelAndChildren(model);\n } else {\n return assembleProjectionForModel(model);\n }\n}\n\nexport function assembleProjectionsForModelAndChildren(model: Model): VgProjection[] {\n return model.children.reduce((projections, child) => {\n return projections.concat(child.assembleProjections());\n }, assembleProjectionForModel(model));\n}\n\nexport function assembleProjectionForModel(model: Model): VgProjection[] {\n const component = model.component.projection;\n if (!component || component.merged) {\n return [];\n }\n\n const projection = component.combine();\n const {name} = projection; // we need to extract name so that it is always present in the output and pass TS type validation\n\n if (!component.data) {\n // generate custom projection, no automatic fitting\n return [\n {\n name,\n // translate to center by default\n ...{translate: {signal: '[width / 2, height / 2]'}},\n // parameters, overwrite default translate if specified\n ...projection\n }\n ];\n } else {\n // generate projection that uses extent fitting\n const size: SignalRef = {\n signal: `[${component.size.map(ref => ref.signal).join(', ')}]`\n };\n\n const fits: string[] = component.data.reduce((sources, data) => {\n const source: string = isSignalRef(data) ? data.signal : `data('${model.lookupDataSource(data)}')`;\n if (!contains(sources, source)) {\n // build a unique list of sources\n sources.push(source);\n }\n return sources;\n }, []);\n\n if (fits.length <= 0) {\n throw new Error(\"Projection's fit didn't find any data sources\");\n }\n\n return [\n {\n name,\n size,\n fit: {\n signal: fits.length > 1 ? `[${fits.join(', ')}]` : fits[0]\n },\n ...projection\n }\n ];\n }\n}\n","import {BaseProjection, SignalRef, Vector2} from 'vega';\nimport {ExprRef} from './expr';\nimport {MapExcludeValueRefAndReplaceSignalWith, ProjectionType} from './vega.schema';\n\nexport interface Projection\n extends MapExcludeValueRefAndReplaceSignalWith {\n /**\n * The cartographic projection to use. This value is case-insensitive, for example `\"albers\"` and `\"Albers\"` indicate the same projection type. You can find all valid projection types [in the documentation](https://vega.github.io/vega-lite/docs/projection.html#projection-types).\n *\n * __Default value:__ `equalEarth`\n */\n type?: ProjectionType | ES; // Re-declare to override docs\n\n /**\n * The projection’s scale (zoom) factor, overriding automatic fitting. The default scale is projection-specific. The scale factor corresponds linearly to the distance between projected points; however, scale factor values are not equivalent across projections.\n */\n scale?: number | ES; // Re-declare to override docs\n\n /**\n * The projection’s translation offset as a two-element array `[tx, ty]`.\n */\n translate?: Vector2 | ES; // TODO: figure what's VL default value\n}\n\n/**\n * Any property of Projection can be in config\n */\nexport type ProjectionConfig = Projection;\n\nexport const PROJECTION_PROPERTIES: (keyof Projection)[] = [\n 'type',\n 'clipAngle',\n 'clipExtent',\n 'center',\n 'rotate',\n 'precision',\n 'reflectX',\n 'reflectY',\n 'coefficient',\n 'distance',\n 'fraction',\n 'lobes',\n 'parallel',\n 'radius',\n 'ratio',\n 'spacing',\n 'tilt'\n];\n","import {Projection as VgProjection, SignalRef} from 'vega';\nimport {Projection} from '../../projection';\nimport {Split} from '../split';\n\nexport class ProjectionComponent extends Split {\n public merged = false;\n\n constructor(\n name: string,\n public specifiedProjection: Projection,\n public size: SignalRef[],\n public data: (string | SignalRef)[]\n ) {\n super(\n {...specifiedProjection}, // all explicit properties of projection\n {name} // name as initial implicit property\n );\n }\n\n /**\n * Whether the projection parameters should fit provided data.\n */\n public get isFit() {\n return !!this.data;\n }\n}\n","import {SignalRef} from 'vega';\nimport {hasOwnProperty} from 'vega-util';\nimport {LATITUDE, LATITUDE2, LONGITUDE, LONGITUDE2, SHAPE} from '../../channel';\nimport {getFieldOrDatumDef} from '../../channeldef';\nimport {DataSourceType} from '../../data';\nimport {replaceExprRef} from '../../expr';\nimport {PROJECTION_PROPERTIES} from '../../projection';\nimport {GEOJSON} from '../../type';\nimport {deepEqual, duplicate, every} from '../../util';\nimport {isUnitModel, Model} from '../model';\nimport {UnitModel} from '../unit';\nimport {ProjectionComponent} from './component';\n\nexport function parseProjection(model: Model) {\n model.component.projection = isUnitModel(model) ? parseUnitProjection(model) : parseNonUnitProjections(model);\n}\n\nfunction parseUnitProjection(model: UnitModel): ProjectionComponent {\n if (model.hasProjection) {\n const proj = replaceExprRef(model.specifiedProjection);\n const fit = !(proj && (proj.scale != null || proj.translate != null));\n const size = fit ? [model.getSizeSignalRef('width'), model.getSizeSignalRef('height')] : undefined;\n const data = fit ? gatherFitData(model) : undefined;\n\n const projComp = new ProjectionComponent(\n model.projectionName(true),\n {\n ...(replaceExprRef(model.config.projection) ?? {}),\n ...(proj ?? {})\n },\n size,\n data\n );\n\n if (!projComp.get('type')) {\n projComp.set('type', 'equalEarth', false);\n }\n\n return projComp;\n }\n\n return undefined;\n}\n\nfunction gatherFitData(model: UnitModel) {\n const data: (SignalRef | string)[] = [];\n\n const {encoding} = model;\n\n for (const posssiblePair of [\n [LONGITUDE, LATITUDE],\n [LONGITUDE2, LATITUDE2]\n ]) {\n if (getFieldOrDatumDef(encoding[posssiblePair[0]]) || getFieldOrDatumDef(encoding[posssiblePair[1]])) {\n data.push({\n signal: model.getName(`geojson_${data.length}`)\n });\n }\n }\n\n if (model.channelHasField(SHAPE) && model.typedFieldDef(SHAPE).type === GEOJSON) {\n data.push({\n signal: model.getName(`geojson_${data.length}`)\n });\n }\n\n if (data.length === 0) {\n // main source is geojson, so we can just use that\n data.push(model.requestDataName(DataSourceType.Main));\n }\n\n return data;\n}\n\nfunction mergeIfNoConflict(first: ProjectionComponent, second: ProjectionComponent): ProjectionComponent {\n const allPropertiesShared = every(PROJECTION_PROPERTIES, prop => {\n // neither has the property\n if (!hasOwnProperty(first.explicit, prop) && !hasOwnProperty(second.explicit, prop)) {\n return true;\n }\n // both have property and an equal value for property\n if (\n hasOwnProperty(first.explicit, prop) &&\n hasOwnProperty(second.explicit, prop) &&\n // some properties might be signals or objects and require hashing for comparison\n deepEqual(first.get(prop), second.get(prop))\n ) {\n return true;\n }\n return false;\n });\n\n const size = deepEqual(first.size, second.size);\n if (size) {\n if (allPropertiesShared) {\n return first;\n } else if (deepEqual(first.explicit, {})) {\n return second;\n } else if (deepEqual(second.explicit, {})) {\n return first;\n }\n }\n\n // if all properties don't match, let each unit spec have its own projection\n return null;\n}\n\nfunction parseNonUnitProjections(model: Model): ProjectionComponent {\n if (model.children.length === 0) {\n return undefined;\n }\n\n let nonUnitProjection: ProjectionComponent;\n\n // parse all children first\n for (const child of model.children) {\n parseProjection(child);\n }\n\n // analyze parsed projections, attempt to merge\n const mergable = every(model.children, child => {\n const projection = child.component.projection;\n if (!projection) {\n // child layer does not use a projection\n return true;\n } else if (!nonUnitProjection) {\n // cached 'projection' is null, cache this one\n nonUnitProjection = projection;\n return true;\n } else {\n const merge = mergeIfNoConflict(nonUnitProjection, projection);\n if (merge) {\n nonUnitProjection = merge;\n }\n return !!merge;\n }\n });\n\n // if cached one and all other children share the same projection,\n if (nonUnitProjection && mergable) {\n // so we can elevate it to the layer level\n const name = model.projectionName(true);\n const modelProjection = new ProjectionComponent(\n name,\n nonUnitProjection.specifiedProjection,\n nonUnitProjection.size,\n duplicate(nonUnitProjection.data)\n );\n\n // rename and assign all others as merged\n for (const child of model.children) {\n const projection = child.component.projection;\n if (projection) {\n if (projection.isFit) {\n modelProjection.data.push(...child.component.projection.data);\n }\n child.renameProjection(projection.get('name'), name);\n projection.merged = true;\n }\n }\n\n return modelProjection;\n }\n\n return undefined;\n}\n","import {BinTransform as VgBinTransform, Transforms as VgTransform} from 'vega';\nimport {isString} from 'vega-util';\nimport {BinParams, binToString, isBinning, isParameterExtent} from '../../bin';\nimport {Channel} from '../../channel';\nimport {binRequiresRange, FieldName, isTypedFieldDef, normalizeBin, TypedFieldDef, vgField} from '../../channeldef';\nimport {Config} from '../../config';\nimport {BinTransform} from '../../transform';\nimport {Dict, duplicate, hash, isEmpty, keys, replacePathInField, unique, vals} from '../../util';\nimport {binFormatExpression} from '../format';\nimport {isUnitModel, Model, ModelWithField} from '../model';\nimport {parseSelectionExtent} from '../selection/parse';\nimport {NonPositionScaleChannel, PositionChannel} from './../../channel';\nimport {DataFlowNode} from './dataflow';\n\nfunction rangeFormula(model: ModelWithField, fieldDef: TypedFieldDef, channel: Channel, config: Config) {\n if (binRequiresRange(fieldDef, channel)) {\n // read format from axis or legend, if there is no format then use config.numberFormat\n\n const guide = isUnitModel(model)\n ? model.axis(channel as PositionChannel) ?? model.legend(channel as NonPositionScaleChannel) ?? {}\n : {};\n\n const startField = vgField(fieldDef, {expr: 'datum'});\n const endField = vgField(fieldDef, {expr: 'datum', binSuffix: 'end'});\n\n return {\n formulaAs: vgField(fieldDef, {binSuffix: 'range', forAs: true}),\n formula: binFormatExpression(startField, endField, guide.format, guide.formatType, config)\n };\n }\n return {};\n}\n\nfunction binKey(bin: BinParams, field: string) {\n return `${binToString(bin)}_${field}`;\n}\n\nfunction getSignalsFromModel(model: Model, key: string) {\n return {\n signal: model.getName(`${key}_bins`),\n extentSignal: model.getName(`${key}_extent`)\n };\n}\n\nexport function getBinSignalName(model: Model, field: string, bin: boolean | BinParams) {\n const normalizedBin = normalizeBin(bin, undefined) ?? {};\n const key = binKey(normalizedBin, field);\n return model.getName(`${key}_bins`);\n}\n\nfunction isBinTransform(t: TypedFieldDef | BinTransform): t is BinTransform {\n return 'as' in t;\n}\n\nfunction createBinComponent(t: TypedFieldDef | BinTransform, bin: boolean | BinParams, model: Model) {\n let as: [string, string];\n let span: string;\n\n if (isBinTransform(t)) {\n as = isString(t.as) ? [t.as, `${t.as}_end`] : [t.as[0], t.as[1]];\n } else {\n as = [vgField(t, {forAs: true}), vgField(t, {binSuffix: 'end', forAs: true})];\n }\n\n const normalizedBin = {...normalizeBin(bin, undefined)};\n const key = binKey(normalizedBin, t.field);\n const {signal, extentSignal} = getSignalsFromModel(model, key);\n\n if (isParameterExtent(normalizedBin.extent)) {\n const ext = normalizedBin.extent;\n span = parseSelectionExtent(model, ext.param, ext);\n delete normalizedBin.extent; // Vega-Lite selection extent map to Vega's span property.\n }\n\n const binComponent: BinComponent = {\n bin: normalizedBin,\n field: t.field,\n as: [as],\n ...(signal ? {signal} : {}),\n ...(extentSignal ? {extentSignal} : {}),\n ...(span ? {span} : {})\n };\n\n return {key, binComponent};\n}\n\nexport interface BinComponent {\n bin: BinParams;\n field: FieldName;\n extentSignal?: string;\n signal?: string;\n span?: string;\n\n /** Pairs of strings of the names of start and end signals */\n as: [string, string][];\n\n // Range Formula\n\n formula?: string;\n formulaAs?: string;\n}\n\nexport class BinNode extends DataFlowNode {\n public clone() {\n return new BinNode(null, duplicate(this.bins));\n }\n\n constructor(parent: DataFlowNode, private bins: Dict) {\n super(parent);\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: ModelWithField) {\n const bins = model.reduceFieldDef((binComponentIndex: Dict, fieldDef, channel) => {\n if (isTypedFieldDef(fieldDef) && isBinning(fieldDef.bin)) {\n const {key, binComponent} = createBinComponent(fieldDef, fieldDef.bin, model);\n binComponentIndex[key] = {\n ...binComponent,\n ...binComponentIndex[key],\n ...rangeFormula(model, fieldDef, channel, model.config)\n };\n }\n return binComponentIndex;\n }, {} as Dict);\n\n if (isEmpty(bins)) {\n return null;\n }\n\n return new BinNode(parent, bins);\n }\n\n /**\n * Creates a bin node from BinTransform.\n * The optional parameter should provide\n */\n public static makeFromTransform(parent: DataFlowNode, t: BinTransform, model: Model) {\n const {key, binComponent} = createBinComponent(t, t.bin, model);\n return new BinNode(parent, {\n [key]: binComponent\n });\n }\n\n /**\n * Merge bin nodes. This method either integrates the bin config from the other node\n * or if this node already has a bin config, renames the corresponding signal in the model.\n */\n public merge(other: BinNode, renameSignal: (s1: string, s2: string) => void) {\n for (const key of keys(other.bins)) {\n if (key in this.bins) {\n renameSignal(other.bins[key].signal, this.bins[key].signal);\n // Ensure that we don't have duplicate names for signal pairs\n this.bins[key].as = unique([...this.bins[key].as, ...other.bins[key].as], hash);\n } else {\n this.bins[key] = other.bins[key];\n }\n }\n\n for (const child of other.children) {\n other.removeChild(child);\n child.parent = this;\n }\n other.remove();\n }\n\n public producedFields() {\n return new Set(\n vals(this.bins)\n .map(c => c.as)\n .flat(2)\n );\n }\n\n public dependentFields() {\n return new Set(vals(this.bins).map(c => c.field));\n }\n\n public hash() {\n return `Bin ${hash(this.bins)}`;\n }\n\n public assemble(): VgTransform[] {\n return vals(this.bins).flatMap(bin => {\n const transform: VgTransform[] = [];\n\n const [binAs, ...remainingAs] = bin.as;\n const {extent, ...params} = bin.bin;\n const binTrans: VgBinTransform = {\n type: 'bin',\n field: replacePathInField(bin.field),\n as: binAs,\n signal: bin.signal,\n ...(!isParameterExtent(extent) ? {extent} : {extent: null}),\n ...(bin.span ? {span: {signal: `span(${bin.span})`}} : {}),\n ...params\n };\n\n if (!extent && bin.extentSignal) {\n transform.push({\n type: 'extent',\n field: replacePathInField(bin.field),\n signal: bin.extentSignal\n });\n binTrans.extent = {signal: bin.extentSignal};\n }\n\n transform.push(binTrans);\n\n for (const as of remainingAs) {\n for (let i = 0; i < 2; i++) {\n transform.push({\n type: 'formula',\n expr: vgField({field: binAs[i]}, {expr: 'datum'}),\n as: as[i]\n });\n }\n }\n\n if (bin.formula) {\n transform.push({\n type: 'formula',\n expr: bin.formula,\n as: bin.formulaAs\n });\n }\n return transform;\n });\n }\n}\n","import {AggregateOp, AggregateTransform as VgAggregateTransform} from 'vega';\nimport {isArgmaxDef, isArgminDef} from '../../aggregate';\nimport {\n Channel,\n getPositionChannelFromLatLong,\n getSecondaryRangeChannel,\n isGeoPositionChannel,\n isScaleChannel\n} from '../../channel';\nimport {binRequiresRange, FieldDef, hasBandEnd, isScaleFieldDef, isTypedFieldDef, vgField} from '../../channeldef';\nimport * as log from '../../log';\nimport {isFieldRange} from '../../scale';\nimport {AggregateTransform} from '../../transform';\nimport {Dict, duplicate, hash, keys, replacePathInField, setEqual} from '../../util';\nimport {isUnitModel, ModelWithField} from '../model';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\ntype Measures = Dict>>>;\n\nfunction addDimension(dims: Set, channel: Channel, fieldDef: FieldDef, model: ModelWithField) {\n const channelDef2 = isUnitModel(model) ? model.encoding[getSecondaryRangeChannel(channel)] : undefined;\n\n if (\n isTypedFieldDef(fieldDef) &&\n isUnitModel(model) &&\n hasBandEnd(fieldDef, channelDef2, model.markDef, model.config)\n ) {\n dims.add(vgField(fieldDef, {}));\n dims.add(vgField(fieldDef, {suffix: 'end'}));\n\n if (fieldDef.bin && binRequiresRange(fieldDef, channel)) {\n dims.add(vgField(fieldDef, {binSuffix: 'range'}));\n }\n } else if (isGeoPositionChannel(channel)) {\n const posChannel = getPositionChannelFromLatLong(channel);\n dims.add(model.getName(posChannel));\n } else {\n dims.add(vgField(fieldDef));\n }\n if (isScaleFieldDef(fieldDef) && isFieldRange(fieldDef.scale?.range)) {\n dims.add(fieldDef.scale.range.field);\n }\n return dims;\n}\n\nfunction mergeMeasures(parentMeasures: Measures, childMeasures: Measures) {\n for (const field of keys(childMeasures)) {\n // when we merge a measure, we either have to add an aggregation operator or even a new field\n const ops = childMeasures[field];\n for (const op of keys(ops)) {\n if (field in parentMeasures) {\n // add operator to existing measure field\n parentMeasures[field][op] = new Set([...(parentMeasures[field][op] ?? []), ...ops[op]]);\n } else {\n parentMeasures[field] = {[op]: ops[op]};\n }\n }\n }\n}\n\nexport class AggregateNode extends DataFlowNode {\n public clone() {\n return new AggregateNode(null, new Set(this.dimensions), duplicate(this.measures));\n }\n\n /**\n * @param dimensions string set for dimensions\n * @param measures dictionary mapping field name => dict of aggregation functions and names to use\n */\n constructor(parent: DataFlowNode, private dimensions: Set, private measures: Measures) {\n super(parent);\n }\n\n get groupBy() {\n return this.dimensions;\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: UnitModel): AggregateNode {\n let isAggregate = false;\n model.forEachFieldDef(fd => {\n if (fd.aggregate) {\n isAggregate = true;\n }\n });\n\n const meas: Measures = {};\n const dims = new Set();\n\n if (!isAggregate) {\n // no need to create this node if the model has no aggregation\n return null;\n }\n\n model.forEachFieldDef((fieldDef, channel: Channel) => {\n const {aggregate, field} = fieldDef;\n if (aggregate) {\n if (aggregate === 'count') {\n meas['*'] ??= {};\n meas['*']['count'] = new Set([vgField(fieldDef, {forAs: true})]);\n } else {\n if (isArgminDef(aggregate) || isArgmaxDef(aggregate)) {\n const op = isArgminDef(aggregate) ? 'argmin' : 'argmax';\n const argField = aggregate[op];\n meas[argField] ??= {};\n meas[argField][op] = new Set([vgField({op, field: argField}, {forAs: true})]);\n } else {\n meas[field] ??= {};\n meas[field][aggregate] = new Set([vgField(fieldDef, {forAs: true})]);\n }\n\n // For scale channel with domain === 'unaggregated', add min/max so we can use their union as unaggregated domain\n if (isScaleChannel(channel) && model.scaleDomain(channel) === 'unaggregated') {\n meas[field] ??= {};\n meas[field]['min'] = new Set([vgField({field, aggregate: 'min'}, {forAs: true})]);\n meas[field]['max'] = new Set([vgField({field, aggregate: 'max'}, {forAs: true})]);\n }\n }\n } else {\n addDimension(dims, channel, fieldDef, model);\n }\n });\n\n if (dims.size + keys(meas).length === 0) {\n return null;\n }\n\n return new AggregateNode(parent, dims, meas);\n }\n\n public static makeFromTransform(parent: DataFlowNode, t: AggregateTransform): AggregateNode {\n const dims = new Set();\n const meas: Measures = {};\n\n for (const s of t.aggregate) {\n const {op, field, as} = s;\n if (op) {\n if (op === 'count') {\n meas['*'] ??= {};\n meas['*']['count'] = new Set([as ? as : vgField(s, {forAs: true})]);\n } else {\n meas[field] ??= {};\n meas[field][op] = new Set([as ? as : vgField(s, {forAs: true})]);\n }\n }\n }\n\n for (const s of t.groupby ?? []) {\n dims.add(s);\n }\n\n if (dims.size + keys(meas).length === 0) {\n return null;\n }\n\n return new AggregateNode(parent, dims, meas);\n }\n\n public merge(other: AggregateNode): boolean {\n if (setEqual(this.dimensions, other.dimensions)) {\n mergeMeasures(this.measures, other.measures);\n return true;\n } else {\n log.debug('different dimensions, cannot merge');\n return false;\n }\n }\n\n public addDimensions(fields: readonly string[]) {\n fields.forEach(this.dimensions.add, this.dimensions);\n }\n\n public dependentFields() {\n return new Set([...this.dimensions, ...keys(this.measures)]);\n }\n\n public producedFields() {\n const out = new Set();\n\n for (const field of keys(this.measures)) {\n for (const op of keys(this.measures[field])) {\n const m = this.measures[field][op];\n if (m.size === 0) {\n out.add(`${op}_${field}`);\n } else {\n m.forEach(out.add, out);\n }\n }\n }\n\n return out;\n }\n\n public hash() {\n return `Aggregate ${hash({dimensions: this.dimensions, measures: this.measures})}`;\n }\n\n public assemble(): VgAggregateTransform {\n const ops: AggregateOp[] = [];\n const fields: string[] = [];\n const as: string[] = [];\n\n for (const field of keys(this.measures)) {\n for (const op of keys(this.measures[field])) {\n for (const alias of this.measures[field][op]) {\n as.push(alias);\n ops.push(op);\n fields.push(field === '*' ? null : replacePathInField(field));\n }\n }\n }\n\n const result: VgAggregateTransform = {\n type: 'aggregate',\n groupby: [...this.dimensions].map(replacePathInField),\n ops,\n fields,\n as\n };\n\n return result;\n }\n}\n","import {AggregateOp} from 'vega';\nimport {isArray} from 'vega-util';\nimport {isBinning} from '../../bin';\nimport {COLUMN, FACET_CHANNELS, POSITION_SCALE_CHANNELS, ROW} from '../../channel';\nimport {vgField} from '../../channeldef';\nimport * as log from '../../log';\nimport {hasDiscreteDomain} from '../../scale';\nimport {DEFAULT_SORT_OP, EncodingSortField, isSortField} from '../../sort';\nimport {hash} from '../../util';\nimport {isVgRangeStep, VgData} from '../../vega.schema';\nimport {FacetModel} from '../facet';\nimport {HEADER_CHANNELS, HEADER_TYPES} from '../header/component';\nimport {Model} from '../model';\nimport {assembleDomain, getFieldFromDomain} from '../scale/domain';\nimport {sortArrayIndexField} from './calculate';\nimport {DataFlowNode} from './dataflow';\n\ninterface ChildIndependentFieldsWithStep {\n x?: string;\n y?: string;\n}\n\ninterface FacetChannelInfo {\n name: string;\n fields: string[];\n sortField?: EncodingSortField;\n\n sortIndexField?: string;\n}\n\n/**\n * A node that helps us track what fields we are faceting by.\n */\nexport class FacetNode extends DataFlowNode {\n private readonly column: FacetChannelInfo;\n\n private readonly row: FacetChannelInfo;\n\n private readonly facet: FacetChannelInfo;\n\n private readonly childModel: Model;\n\n /**\n * @param model The facet model.\n * @param name The name that this facet source will have.\n * @param data The source data for this facet data.\n */\n public constructor(\n parent: DataFlowNode,\n public readonly model: FacetModel,\n public readonly name: string,\n public data: string\n ) {\n super(parent);\n\n for (const channel of FACET_CHANNELS) {\n const fieldDef = model.facet[channel];\n if (fieldDef) {\n const {bin, sort} = fieldDef;\n this[channel] = {\n name: model.getName(`${channel}_domain`),\n fields: [vgField(fieldDef), ...(isBinning(bin) ? [vgField(fieldDef, {binSuffix: 'end'})] : [])],\n ...(isSortField(sort)\n ? {sortField: sort}\n : isArray(sort)\n ? {sortIndexField: sortArrayIndexField(fieldDef, channel)}\n : {})\n };\n }\n }\n this.childModel = model.child;\n }\n\n public hash() {\n let out = `Facet`;\n\n for (const channel of FACET_CHANNELS) {\n if (this[channel]) {\n out += ` ${channel.charAt(0)}:${hash(this[channel])}`;\n }\n }\n\n return out;\n }\n\n get fields() {\n const f: string[] = [];\n\n for (const channel of FACET_CHANNELS) {\n if (this[channel]?.fields) {\n f.push(...this[channel].fields);\n }\n }\n return f;\n }\n\n public dependentFields() {\n const depFields = new Set(this.fields);\n\n for (const channel of FACET_CHANNELS) {\n if (this[channel]) {\n if (this[channel].sortField) {\n depFields.add(this[channel].sortField.field);\n }\n if (this[channel].sortIndexField) {\n depFields.add(this[channel].sortIndexField);\n }\n }\n }\n\n return depFields;\n }\n\n public producedFields() {\n return new Set(); // facet does not produce any new fields\n }\n\n /**\n * The name to reference this source is its name.\n */\n public getSource() {\n return this.name;\n }\n\n private getChildIndependentFieldsWithStep() {\n const childIndependentFieldsWithStep: ChildIndependentFieldsWithStep = {};\n\n for (const channel of POSITION_SCALE_CHANNELS) {\n const childScaleComponent = this.childModel.component.scales[channel];\n if (childScaleComponent && !childScaleComponent.merged) {\n // independent scale\n const type = childScaleComponent.get('type');\n const range = childScaleComponent.get('range');\n\n if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n const domain = assembleDomain(this.childModel, channel);\n const field = getFieldFromDomain(domain);\n if (field) {\n childIndependentFieldsWithStep[channel] = field;\n } else {\n log.warn(log.message.unknownField(channel));\n }\n }\n }\n }\n\n return childIndependentFieldsWithStep;\n }\n\n private assembleRowColumnHeaderData(\n channel: 'row' | 'column' | 'facet',\n crossedDataName: string,\n childIndependentFieldsWithStep: ChildIndependentFieldsWithStep\n ): VgData {\n const childChannel = {row: 'y', column: 'x', facet: undefined}[channel];\n\n const fields: string[] = [];\n const ops: AggregateOp[] = [];\n const as: string[] = [];\n\n if (childChannel && childIndependentFieldsWithStep && childIndependentFieldsWithStep[childChannel]) {\n if (crossedDataName) {\n // If there is a crossed data, calculate max\n fields.push(`distinct_${childIndependentFieldsWithStep[childChannel]}`);\n\n ops.push('max');\n } else {\n // If there is no crossed data, just calculate distinct\n fields.push(childIndependentFieldsWithStep[childChannel]);\n ops.push('distinct');\n }\n // Although it is technically a max, just name it distinct so it's easier to refer to it\n as.push(`distinct_${childIndependentFieldsWithStep[childChannel]}`);\n }\n\n const {sortField, sortIndexField} = this[channel];\n if (sortField) {\n const {op = DEFAULT_SORT_OP, field} = sortField;\n fields.push(field);\n ops.push(op);\n as.push(vgField(sortField, {forAs: true}));\n } else if (sortIndexField) {\n fields.push(sortIndexField);\n ops.push('max');\n as.push(sortIndexField);\n }\n\n return {\n name: this[channel].name,\n // Use data from the crossed one if it exist\n source: crossedDataName ?? this.data,\n transform: [\n {\n type: 'aggregate',\n groupby: this[channel].fields,\n ...(fields.length\n ? {\n fields,\n ops,\n as\n }\n : {})\n }\n ]\n };\n }\n\n private assembleFacetHeaderData(childIndependentFieldsWithStep: ChildIndependentFieldsWithStep) {\n const {columns} = this.model.layout;\n const {layoutHeaders} = this.model.component;\n const data: VgData[] = [];\n\n const hasSharedAxis: {row?: true; column?: true} = {};\n for (const headerChannel of HEADER_CHANNELS) {\n for (const headerType of HEADER_TYPES) {\n const headers = (layoutHeaders[headerChannel] && layoutHeaders[headerChannel][headerType]) ?? [];\n for (const header of headers) {\n if (header.axes?.length > 0) {\n hasSharedAxis[headerChannel] = true;\n break;\n }\n }\n }\n\n if (hasSharedAxis[headerChannel]) {\n const cardinality = `length(data(\"${this.facet.name}\"))`;\n\n const stop =\n headerChannel === 'row'\n ? columns\n ? {signal: `ceil(${cardinality} / ${columns})`}\n : 1\n : columns\n ? {signal: `min(${cardinality}, ${columns})`}\n : {signal: cardinality};\n\n data.push({\n name: `${this.facet.name}_${headerChannel}`,\n transform: [\n {\n type: 'sequence',\n start: 0,\n stop\n }\n ]\n });\n }\n }\n\n const {row, column} = hasSharedAxis;\n\n if (row || column) {\n data.unshift(this.assembleRowColumnHeaderData('facet', null, childIndependentFieldsWithStep));\n }\n\n return data;\n }\n\n public assemble() {\n const data: VgData[] = [];\n let crossedDataName = null;\n const childIndependentFieldsWithStep = this.getChildIndependentFieldsWithStep();\n\n const {column, row, facet} = this;\n\n if (column && row && (childIndependentFieldsWithStep.x || childIndependentFieldsWithStep.y)) {\n // Need to create a cross dataset to correctly calculate cardinality\n crossedDataName = `cross_${this.column.name}_${this.row.name}`;\n\n const fields: string[] = [].concat(\n childIndependentFieldsWithStep.x ?? [],\n childIndependentFieldsWithStep.y ?? []\n );\n const ops = fields.map((): AggregateOp => 'distinct');\n\n data.push({\n name: crossedDataName,\n source: this.data,\n transform: [\n {\n type: 'aggregate',\n groupby: this.fields,\n fields,\n ops\n }\n ]\n });\n }\n\n for (const channel of [COLUMN, ROW]) {\n if (this[channel]) {\n data.push(this.assembleRowColumnHeaderData(channel, crossedDataName, childIndependentFieldsWithStep));\n }\n }\n\n if (facet) {\n const facetData = this.assembleFacetHeaderData(childIndependentFieldsWithStep);\n if (facetData) {\n data.push(...facetData);\n }\n }\n\n return data;\n }\n}\n","import {FormulaTransform as VgFormulaTransform, SignalRef} from 'vega';\nimport {isNumber, isString} from 'vega-util';\nimport {AncestorParse} from '.';\nimport {isMinMaxOp} from '../../aggregate';\nimport {getMainRangeChannel, SingleDefChannel} from '../../channel';\nimport {\n isFieldDef,\n isFieldOrDatumDefForTimeFormat,\n isScaleFieldDef,\n isTypedFieldDef,\n TypedFieldDef\n} from '../../channeldef';\nimport {isGenerator, Parse} from '../../data';\nimport {DateTime, isDateTime} from '../../datetime';\nimport * as log from '../../log';\nimport {forEachLeaf} from '../../logical';\nimport {isPathMark} from '../../mark';\nimport {\n isFieldEqualPredicate,\n isFieldGTEPredicate,\n isFieldGTPredicate,\n isFieldLTEPredicate,\n isFieldLTPredicate,\n isFieldOneOfPredicate,\n isFieldPredicate,\n isFieldRangePredicate\n} from '../../predicate';\nimport {isSortField} from '../../sort';\nimport {FilterTransform} from '../../transform';\nimport {accessPathDepth, accessPathWithDatum, Dict, duplicate, hash, keys, removePathFromField} from '../../util';\nimport {signalRefOrValue} from '../common';\nimport {isFacetModel, isUnitModel, Model} from '../model';\nimport {Split} from '../split';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * Remove quotes from a string.\n */\nfunction unquote(pattern: string) {\n if (\n (pattern[0] === \"'\" && pattern[pattern.length - 1] === \"'\") ||\n (pattern[0] === '\"' && pattern[pattern.length - 1] === '\"')\n ) {\n return pattern.slice(1, -1);\n }\n return pattern;\n}\n\n/**\n * @param field The field.\n * @param parse What to parse the field as.\n */\nfunction parseExpression(field: string, parse: string): string {\n const f = accessPathWithDatum(field);\n if (parse === 'number') {\n return `toNumber(${f})`;\n } else if (parse === 'boolean') {\n return `toBoolean(${f})`;\n } else if (parse === 'string') {\n return `toString(${f})`;\n } else if (parse === 'date') {\n return `toDate(${f})`;\n } else if (parse === 'flatten') {\n return f;\n } else if (parse.startsWith('date:')) {\n const specifier = unquote(parse.slice(5, parse.length));\n return `timeParse(${f},'${specifier}')`;\n } else if (parse.startsWith('utc:')) {\n const specifier = unquote(parse.slice(4, parse.length));\n return `utcParse(${f},'${specifier}')`;\n } else {\n log.warn(log.message.unrecognizedParse(parse));\n return null;\n }\n}\n\nexport function getImplicitFromFilterTransform(transform: FilterTransform) {\n const implicit: Dict = {};\n forEachLeaf(transform.filter, filter => {\n if (isFieldPredicate(filter)) {\n // Automatically add a parse node for filters with filter objects\n let val: string | number | boolean | DateTime | SignalRef = null;\n\n // For EqualFilter, just use the equal property.\n // For RangeFilter and OneOfFilter, all array members should have\n // the same type, so we only use the first one.\n if (isFieldEqualPredicate(filter)) {\n val = signalRefOrValue(filter.equal);\n } else if (isFieldLTEPredicate(filter)) {\n val = signalRefOrValue(filter.lte);\n } else if (isFieldLTPredicate(filter)) {\n val = signalRefOrValue(filter.lt);\n } else if (isFieldGTPredicate(filter)) {\n val = signalRefOrValue(filter.gt);\n } else if (isFieldGTEPredicate(filter)) {\n val = signalRefOrValue(filter.gte);\n } else if (isFieldRangePredicate(filter)) {\n val = filter.range[0];\n } else if (isFieldOneOfPredicate(filter)) {\n val = (filter.oneOf ?? filter['in'])[0];\n } // else -- for filter expression, we can't infer anything\n\n if (val) {\n if (isDateTime(val)) {\n implicit[filter.field] = 'date';\n } else if (isNumber(val)) {\n implicit[filter.field] = 'number';\n } else if (isString(val)) {\n implicit[filter.field] = 'string';\n }\n }\n\n if (filter.timeUnit) {\n implicit[filter.field] = 'date';\n }\n }\n });\n\n return implicit;\n}\n\n/**\n * Creates a parse node for implicit parsing from a model and updates ancestorParse.\n */\nexport function getImplicitFromEncoding(model: Model) {\n const implicit: Dict = {};\n\n function add(fieldDef: TypedFieldDef) {\n if (isFieldOrDatumDefForTimeFormat(fieldDef)) {\n implicit[fieldDef.field] = 'date';\n } else if (\n fieldDef.type === 'quantitative' &&\n isMinMaxOp(fieldDef.aggregate) // we need to parse numbers to support correct min and max\n ) {\n implicit[fieldDef.field] = 'number';\n } else if (accessPathDepth(fieldDef.field) > 1) {\n // For non-date/non-number (strings and booleans), derive a flattened field for a referenced nested field.\n // (Parsing numbers / dates already flattens numeric and temporal fields.)\n if (!(fieldDef.field in implicit)) {\n implicit[fieldDef.field] = 'flatten';\n }\n } else if (isScaleFieldDef(fieldDef) && isSortField(fieldDef.sort) && accessPathDepth(fieldDef.sort.field) > 1) {\n // Flatten fields that we sort by but that are not otherwise flattened.\n if (!(fieldDef.sort.field in implicit)) {\n implicit[fieldDef.sort.field] = 'flatten';\n }\n }\n }\n\n if (isUnitModel(model) || isFacetModel(model)) {\n // Parse encoded fields\n model.forEachFieldDef((fieldDef, channel) => {\n if (isTypedFieldDef(fieldDef)) {\n add(fieldDef);\n } else {\n const mainChannel = getMainRangeChannel(channel);\n const mainFieldDef = model.fieldDef(mainChannel as SingleDefChannel) as TypedFieldDef;\n add({\n ...fieldDef,\n type: mainFieldDef.type\n });\n }\n });\n }\n\n // Parse quantitative dimension fields of path marks as numbers so that we sort them correctly.\n if (isUnitModel(model)) {\n const {mark, markDef, encoding} = model;\n if (\n isPathMark(mark) &&\n // No need to sort by dimension if we have a connected scatterplot (order channel is present)\n !model.encoding.order\n ) {\n const dimensionChannel = markDef.orient === 'horizontal' ? 'y' : 'x';\n const dimensionChannelDef = encoding[dimensionChannel];\n if (\n isFieldDef(dimensionChannelDef) &&\n dimensionChannelDef.type === 'quantitative' &&\n !(dimensionChannelDef.field in implicit)\n ) {\n implicit[dimensionChannelDef.field] = 'number';\n }\n }\n }\n\n return implicit;\n}\n\n/**\n * Creates a parse node for implicit parsing from a model and updates ancestorParse.\n */\nexport function getImplicitFromSelection(model: Model) {\n const implicit: Dict = {};\n\n if (isUnitModel(model) && model.component.selection) {\n for (const name of keys(model.component.selection)) {\n const selCmpt = model.component.selection[name];\n for (const proj of selCmpt.project.items) {\n if (!proj.channel && accessPathDepth(proj.field) > 1) {\n implicit[proj.field] = 'flatten';\n }\n }\n }\n }\n\n return implicit;\n}\n\nexport class ParseNode extends DataFlowNode {\n private _parse: Parse;\n\n public clone() {\n return new ParseNode(null, duplicate(this._parse));\n }\n\n constructor(parent: DataFlowNode, parse: Parse) {\n super(parent);\n\n this._parse = parse;\n }\n\n public hash() {\n return `Parse ${hash(this._parse)}`;\n }\n\n /**\n * Creates a parse node from a data.format.parse and updates ancestorParse.\n */\n public static makeExplicit(parent: DataFlowNode, model: Model, ancestorParse: AncestorParse) {\n // Custom parse\n let explicit = {};\n const data = model.data;\n if (!isGenerator(data) && data?.format?.parse) {\n explicit = data.format.parse;\n }\n\n return this.makeWithAncestors(parent, explicit, {}, ancestorParse);\n }\n\n /**\n * Creates a parse node from \"explicit\" parse and \"implicit\" parse and updates ancestorParse.\n */\n public static makeWithAncestors(\n parent: DataFlowNode,\n explicit: Parse,\n implicit: Parse,\n ancestorParse: AncestorParse\n ) {\n // We should not parse what has already been parsed in a parent (explicitly or implicitly) or what has been derived (maked as \"derived\"). We also don't need to flatten a field that has already been parsed.\n for (const field of keys(implicit)) {\n const parsedAs = ancestorParse.getWithExplicit(field);\n if (parsedAs.value !== undefined) {\n // We always ignore derived fields even if they are implicitly defined because we expect users to create the right types.\n if (\n parsedAs.explicit ||\n parsedAs.value === implicit[field] ||\n parsedAs.value === 'derived' ||\n implicit[field] === 'flatten'\n ) {\n delete implicit[field];\n } else {\n log.warn(log.message.differentParse(field, implicit[field], parsedAs.value));\n }\n }\n }\n\n for (const field of keys(explicit)) {\n const parsedAs = ancestorParse.get(field);\n if (parsedAs !== undefined) {\n // Don't parse a field again if it has been parsed with the same type already.\n if (parsedAs === explicit[field]) {\n delete explicit[field];\n } else {\n log.warn(log.message.differentParse(field, explicit[field], parsedAs));\n }\n }\n }\n\n const parse = new Split(explicit, implicit);\n\n // add the format parse from this model so that children don't parse the same field again\n ancestorParse.copyAll(parse);\n\n // copy only non-null parses\n const p: Dict = {};\n for (const key of keys(parse.combine())) {\n const val = parse.get(key);\n if (val !== null) {\n p[key] = val;\n }\n }\n\n if (keys(p).length === 0 || ancestorParse.parseNothing) {\n return null;\n }\n\n return new ParseNode(parent, p);\n }\n\n public get parse() {\n return this._parse;\n }\n\n public merge(other: ParseNode) {\n this._parse = {...this._parse, ...other.parse};\n other.remove();\n }\n\n /**\n * Assemble an object for Vega's format.parse property.\n */\n public assembleFormatParse() {\n const formatParse: Dict = {};\n for (const field of keys(this._parse)) {\n const p = this._parse[field];\n if (accessPathDepth(field) === 1) {\n formatParse[field] = p;\n }\n }\n return formatParse;\n }\n\n // format parse depends and produces all fields in its parse\n public producedFields() {\n return new Set(keys(this._parse));\n }\n\n public dependentFields() {\n return new Set(keys(this._parse));\n }\n\n public assembleTransforms(onlyNested = false): VgFormulaTransform[] {\n return keys(this._parse)\n .filter(field => (onlyNested ? accessPathDepth(field) > 1 : true))\n .map(field => {\n const expr = parseExpression(field, this._parse[field]);\n if (!expr) {\n return null;\n }\n\n const formula: VgFormulaTransform = {\n type: 'formula',\n expr,\n as: removePathFromField(field) // Vega output is always flattened\n };\n return formula;\n })\n .filter(t => t !== null);\n }\n}\n","import {SELECTION_ID} from '../../selection';\nimport {IdentifierTransform as VgIdentifierTransform} from 'vega';\nimport {DataFlowNode} from './dataflow';\n\nexport class IdentifierNode extends DataFlowNode {\n public clone() {\n return new IdentifierNode(null);\n }\n\n constructor(parent: DataFlowNode) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set();\n }\n\n public producedFields() {\n return new Set([SELECTION_ID]);\n }\n\n public hash() {\n return 'Identifier';\n }\n\n public assemble(): VgIdentifierTransform {\n return {type: 'identifier', as: SELECTION_ID};\n }\n}\n","import {GraticuleTransform as VgGraticuleTransform} from 'vega';\nimport {GraticuleParams} from '../../data';\nimport {hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\nexport class GraticuleNode extends DataFlowNode {\n public clone() {\n return new GraticuleNode(null, this.params);\n }\n\n constructor(parent: DataFlowNode, private params: true | GraticuleParams) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set();\n }\n\n public producedFields(): undefined {\n return undefined; // there should never be a node before graticule\n }\n\n public hash() {\n return `Graticule ${hash(this.params)}`;\n }\n\n public assemble(): VgGraticuleTransform {\n return {\n type: 'graticule',\n ...(this.params === true ? {} : this.params)\n };\n }\n}\n","import {SequenceParams} from '../../data';\nimport {hash} from '../../util';\nimport {SequenceTransform as VgSequenceTransform} from 'vega';\nimport {DataFlowNode} from './dataflow';\n\nexport class SequenceNode extends DataFlowNode {\n public clone() {\n return new SequenceNode(null, this.params);\n }\n\n constructor(parent: DataFlowNode, private params: SequenceParams) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set();\n }\n\n public producedFields() {\n return new Set([this.params.as ?? 'data']);\n }\n\n public hash() {\n return `Hash ${hash(this.params)}`;\n }\n\n public assemble(): VgSequenceTransform {\n return {\n type: 'sequence',\n ...this.params\n };\n }\n}\n","import {\n Data,\n DataFormat,\n DataFormatType,\n isGenerator,\n isInlineData,\n isNamedData,\n isSphereGenerator,\n isUrlData\n} from '../../data';\nimport {contains, isEmpty, omit} from '../../util';\nimport {VgData} from '../../vega.schema';\nimport {DataFlowNode} from './dataflow';\n\nexport class SourceNode extends DataFlowNode {\n private _data: Partial;\n\n private _name: string;\n\n private _generator: boolean;\n\n constructor(data: Data) {\n super(null); // source cannot have parent\n\n data ??= {name: 'source'};\n let format;\n\n if (!isGenerator(data)) {\n format = data.format ? {...omit(data.format, ['parse'])} : ({} as DataFormat);\n }\n\n if (isInlineData(data)) {\n this._data = {values: data.values};\n } else if (isUrlData(data)) {\n this._data = {url: data.url};\n\n if (!format.type) {\n // Extract extension from URL using snippet from\n // http://stackoverflow.com/questions/680929/how-to-extract-extension-from-filename-string-in-javascript\n let defaultExtension = /(?:\\.([^.]+))?$/.exec(data.url)[1];\n if (!contains(['json', 'csv', 'tsv', 'dsv', 'topojson'], defaultExtension)) {\n defaultExtension = 'json';\n }\n\n // defaultExtension has type string but we ensure that it is DataFormatType above\n format.type = defaultExtension as DataFormatType;\n }\n } else if (isSphereGenerator(data)) {\n // hardwire GeoJSON sphere data into output specification\n this._data = {values: [{type: 'Sphere'}]};\n } else if (isNamedData(data) || isGenerator(data)) {\n this._data = {};\n }\n\n // set flag to check if generator\n this._generator = isGenerator(data);\n\n // any dataset can be named\n if (data.name) {\n this._name = data.name;\n }\n\n if (format && !isEmpty(format)) {\n this._data.format = format;\n }\n }\n\n public dependentFields() {\n return new Set();\n }\n\n public producedFields(): undefined {\n return undefined; // we don't know what this source produces\n }\n\n get data() {\n return this._data;\n }\n\n public hasName(): boolean {\n return !!this._name;\n }\n\n get isGenerator() {\n return this._generator;\n }\n\n get dataName() {\n return this._name;\n }\n\n set dataName(name: string) {\n this._name = name;\n }\n\n set parent(parent: DataFlowNode) {\n throw new Error('Source nodes have to be roots.');\n }\n\n public remove() {\n throw new Error('Source nodes are roots and cannot be removed.');\n }\n\n public hash(): string | number {\n throw new Error('Cannot hash sources');\n }\n\n public assemble(): VgData {\n return {\n name: this._name,\n ...this._data,\n transform: []\n };\n }\n}\n","import {DataFlowNode} from './dataflow';\nimport {GraticuleNode} from './graticule';\nimport {SequenceNode} from './sequence';\nimport {SourceNode} from './source';\n\n/**\n * Whether this dataflow node is the source of the dataflow that produces data i.e. a source or a generator.\n */\nexport function isDataSourceNode(node: DataFlowNode) {\n return node instanceof SourceNode || node instanceof GraticuleNode || node instanceof SequenceNode;\n}\n\n/**\n * Abstract base class for Dataflow optimizers.\n * Contains only mutation handling logic. Subclasses need to implement iteration logic.\n */\nexport abstract class Optimizer {\n #modified: boolean;\n\n constructor() {\n this.#modified = false;\n }\n\n // Once true, #modified is never set to false\n public setModified() {\n this.#modified = true;\n }\n\n get modifiedFlag() {\n return this.#modified;\n }\n\n /**\n * Run the optimization for the tree with the provided root.\n */\n public abstract optimize(root: DataFlowNode): boolean;\n}\n\n/**\n * Starts from a node and runs the optimization function (the \"run\" method) upwards to the root,\n * depending on the continue and modified flag values returned by the optimization function.\n */\nexport abstract class BottomUpOptimizer extends Optimizer {\n /**\n * Run the optimizer at the node. This method should not change the parent of the passed in node (it should only affect children).\n */\n public abstract run(node: DataFlowNode): void;\n\n /**\n * Compute a map of node depths that we can use to determine a topological sort order.\n */\n private getNodeDepths(\n node: DataFlowNode,\n depth: number,\n depths: Map\n ): Map {\n depths.set(node, depth);\n\n for (const child of node.children) {\n this.getNodeDepths(child, depth + 1, depths);\n }\n\n return depths;\n }\n\n /**\n * Run the optimizer on all nodes starting from the leaves.\n */\n public optimize(node: DataFlowNode): boolean {\n const depths = this.getNodeDepths(node, 0, new Map());\n const topologicalSort = [...depths.entries()].sort((a, b) => b[1] - a[1]);\n\n for (const tuple of topologicalSort) {\n this.run(tuple[0]);\n }\n\n return this.modifiedFlag;\n }\n}\n\n/**\n * The optimizer function (the \"run\" method), is invoked on the given node and then continues recursively.\n */\nexport abstract class TopDownOptimizer extends Optimizer {\n /**\n * Run the optimizer at the node.\n */\n public abstract run(node: DataFlowNode): void;\n\n /**\n * Run the optimizer depth first on all nodes starting from the roots.\n */\n public optimize(node: DataFlowNode): boolean {\n this.run(node);\n\n for (const child of node.children) {\n this.optimize(child);\n }\n\n return this.modifiedFlag;\n }\n}\n","import {Parse} from '../../data';\nimport {Dict, fieldIntersection, hash, hasIntersection, isEmpty, keys, some} from '../../util';\nimport {Model} from '../model';\nimport {requiresSelectionId} from '../selection';\nimport {AggregateNode} from './aggregate';\nimport {BinNode} from './bin';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {FacetNode} from './facet';\nimport {FilterNode} from './filter';\nimport {ParseNode} from './formatparse';\nimport {IdentifierNode} from './identifier';\nimport {BottomUpOptimizer, isDataSourceNode, Optimizer, TopDownOptimizer} from './optimizer';\nimport {SourceNode} from './source';\nimport {TimeUnitNode} from './timeunit';\n\n/**\n * Merge identical nodes at forks by comparing hashes.\n *\n * Does not need to iterate from leaves so we implement this with recursion as it's a bit simpler.\n */\nexport class MergeIdenticalNodes extends TopDownOptimizer {\n public mergeNodes(parent: DataFlowNode, nodes: DataFlowNode[]) {\n const mergedNode = nodes.shift();\n for (const node of nodes) {\n parent.removeChild(node);\n node.parent = mergedNode;\n node.remove();\n }\n }\n\n public run(node: DataFlowNode) {\n const hashes = node.children.map(x => x.hash());\n const buckets: {hash?: DataFlowNode[]} = {};\n\n for (let i = 0; i < hashes.length; i++) {\n if (buckets[hashes[i]] === undefined) {\n buckets[hashes[i]] = [node.children[i]];\n } else {\n buckets[hashes[i]].push(node.children[i]);\n }\n }\n\n for (const k of keys(buckets)) {\n if (buckets[k].length > 1) {\n this.setModified();\n this.mergeNodes(node, buckets[k]);\n }\n }\n }\n}\n\n/**\n * Optimizer that removes identifier nodes that are not needed for selections.\n */\nexport class RemoveUnnecessaryIdentifierNodes extends TopDownOptimizer {\n private requiresSelectionId: boolean;\n\n constructor(model: Model) {\n super();\n this.requiresSelectionId = model && requiresSelectionId(model);\n }\n\n public run(node: DataFlowNode) {\n if (node instanceof IdentifierNode) {\n // Only preserve IdentifierNodes if we have default discrete selections\n // in our model tree, and if the nodes come after tuple producing nodes.\n if (\n !(\n this.requiresSelectionId &&\n (isDataSourceNode(node.parent) || node.parent instanceof AggregateNode || node.parent instanceof ParseNode)\n )\n ) {\n this.setModified();\n node.remove();\n }\n }\n }\n}\n\n/**\n * Removes duplicate time unit nodes (as determined by the name of the output field) that may be generated due to\n * selections projected over time units. Only keeps the first time unit in any branch.\n *\n * This optimizer is a custom top down optimizer that keep track of produced fields in a branch.\n */\nexport class RemoveDuplicateTimeUnits extends Optimizer {\n public optimize(node: DataFlowNode): boolean {\n this.run(node, new Set());\n\n return this.modifiedFlag;\n }\n\n public run(node: DataFlowNode, timeUnitFields: Set) {\n let producedFields = new Set();\n\n if (node instanceof TimeUnitNode) {\n producedFields = node.producedFields();\n if (hasIntersection(producedFields, timeUnitFields)) {\n this.setModified();\n node.removeFormulas(timeUnitFields);\n if (node.producedFields.length === 0) {\n node.remove();\n }\n }\n }\n\n for (const child of node.children) {\n this.run(child, new Set([...timeUnitFields, ...producedFields]));\n }\n }\n}\n\n/**\n * Remove output nodes that are not required.\n */\nexport class RemoveUnnecessaryOutputNodes extends TopDownOptimizer {\n constructor() {\n super();\n }\n\n public run(node: DataFlowNode) {\n if (node instanceof OutputNode && !node.isRequired()) {\n this.setModified();\n node.remove();\n }\n }\n}\n\n/**\n * Move parse nodes up to forks and merges them if possible.\n */\nexport class MoveParseUp extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n if (isDataSourceNode(node)) {\n return;\n }\n\n if (node.numChildren() > 1) {\n // Don't move parse further up but continue with parent.\n return;\n }\n\n for (const child of node.children) {\n if (child instanceof ParseNode) {\n if (node instanceof ParseNode) {\n this.setModified();\n node.merge(child);\n } else {\n // Don't swap with nodes that produce something that the parse node depends on (e.g. lookup).\n if (fieldIntersection(node.producedFields(), child.dependentFields())) {\n continue;\n }\n this.setModified();\n child.swapWithParent();\n }\n }\n }\n\n return;\n }\n}\n\n/**\n * Inserts an intermediate ParseNode containing all non-conflicting parse fields and removes the empty ParseNodes.\n *\n * We assume that dependent paths that do not have a parse node can be just merged.\n */\nexport class MergeParse extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n const originalChildren = [...node.children];\n const parseChildren = node.children.filter((child): child is ParseNode => child instanceof ParseNode);\n\n if (node.numChildren() > 1 && parseChildren.length >= 1) {\n const commonParse: Parse = {};\n const conflictingParse = new Set();\n for (const parseNode of parseChildren) {\n const parse = parseNode.parse;\n for (const k of keys(parse)) {\n if (!(k in commonParse)) {\n commonParse[k] = parse[k];\n } else if (commonParse[k] !== parse[k]) {\n conflictingParse.add(k);\n }\n }\n }\n\n for (const field of conflictingParse) {\n delete commonParse[field];\n }\n\n if (!isEmpty(commonParse)) {\n this.setModified();\n const mergedParseNode = new ParseNode(node, commonParse);\n for (const childNode of originalChildren) {\n if (childNode instanceof ParseNode) {\n for (const key of keys(commonParse)) {\n delete childNode.parse[key];\n }\n }\n\n node.removeChild(childNode);\n childNode.parent = mergedParseNode;\n\n // remove empty parse nodes\n if (childNode instanceof ParseNode && keys(childNode.parse).length === 0) {\n childNode.remove();\n }\n }\n }\n }\n }\n}\n\n/**\n * Repeatedly remove leaf nodes that are not output or facet nodes.\n * The reason is that we don't need subtrees that don't have any output nodes.\n * Facet nodes are needed for the row or column domains.\n */\nexport class RemoveUnusedSubtrees extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n if (node instanceof OutputNode || node.numChildren() > 0 || node instanceof FacetNode) {\n // no need to continue with parent because it is output node or will have children (there was a fork)\n } else if (node instanceof SourceNode) {\n // ignore empty unused sources as they will be removed in optimizationDataflowHelper\n } else {\n this.setModified();\n node.remove();\n }\n }\n}\n\n/**\n * Merge adjacent time unit nodes.\n */\nexport class MergeTimeUnits extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n const timeUnitChildren = node.children.filter((x): x is TimeUnitNode => x instanceof TimeUnitNode);\n const combination = timeUnitChildren.pop();\n for (const timeUnit of timeUnitChildren) {\n this.setModified();\n combination.merge(timeUnit);\n }\n }\n}\n\nexport class MergeAggregates extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n const aggChildren = node.children.filter((child): child is AggregateNode => child instanceof AggregateNode);\n\n // Object which we'll use to map the fields which an aggregate is grouped by to\n // the set of aggregates with that grouping. This is useful as only aggregates\n // with the same group by can be merged\n const groupedAggregates: Dict = {};\n\n // Build groupedAggregates\n for (const agg of aggChildren) {\n const groupBys = hash(agg.groupBy);\n if (!(groupBys in groupedAggregates)) {\n groupedAggregates[groupBys] = [];\n }\n groupedAggregates[groupBys].push(agg);\n }\n\n // Merge aggregateNodes with same key in groupedAggregates\n for (const group of keys(groupedAggregates)) {\n const mergeableAggs = groupedAggregates[group];\n if (mergeableAggs.length > 1) {\n const mergedAggs = mergeableAggs.pop();\n for (const agg of mergeableAggs) {\n if (mergedAggs.merge(agg)) {\n node.removeChild(agg);\n agg.parent = mergedAggs;\n agg.remove();\n\n this.setModified();\n }\n }\n }\n }\n }\n}\n\n/**\n * Merge bin nodes and move them up through forks. Stop at filters, parse, identifier as we want them to stay before the bin node.\n */\nexport class MergeBins extends BottomUpOptimizer {\n constructor(private model: Model) {\n super();\n }\n\n public run(node: DataFlowNode) {\n const moveBinsUp = !(\n isDataSourceNode(node) ||\n node instanceof FilterNode ||\n node instanceof ParseNode ||\n node instanceof IdentifierNode\n );\n\n const promotableBins: BinNode[] = [];\n const remainingBins: BinNode[] = [];\n\n for (const child of node.children) {\n if (child instanceof BinNode) {\n if (moveBinsUp && !fieldIntersection(node.producedFields(), child.dependentFields())) {\n promotableBins.push(child);\n } else {\n remainingBins.push(child);\n }\n }\n }\n\n if (promotableBins.length > 0) {\n const promotedBin = promotableBins.pop();\n for (const bin of promotableBins) {\n promotedBin.merge(bin, this.model.renameSignal.bind(this.model));\n }\n this.setModified();\n if (node instanceof BinNode) {\n node.merge(promotedBin, this.model.renameSignal.bind(this.model));\n } else {\n promotedBin.swapWithParent();\n }\n }\n if (remainingBins.length > 1) {\n const remainingBin = remainingBins.pop();\n for (const bin of remainingBins) {\n remainingBin.merge(bin, this.model.renameSignal.bind(this.model));\n }\n this.setModified();\n }\n }\n}\n\n/**\n * This optimizer takes output nodes that are at a fork and moves them before the fork.\n *\n * The algorithm iterates over the children and tries to find the last output node in a chain of output nodes.\n * It then moves all output nodes before that main output node. All other children (and the children of the output nodes)\n * are inserted after the main output node.\n */\nexport class MergeOutputs extends BottomUpOptimizer {\n public run(node: DataFlowNode) {\n const children = [...node.children];\n const hasOutputChild = some(children, child => child instanceof OutputNode);\n\n if (!hasOutputChild || node.numChildren() <= 1) {\n return;\n }\n\n const otherChildren: DataFlowNode[] = [];\n\n // The output node we will connect all other nodes to.\n // Output nodes will be added before the new node, other nodes after.\n let mainOutput: OutputNode;\n\n for (const child of children) {\n if (child instanceof OutputNode) {\n let lastOutput = child;\n\n while (lastOutput.numChildren() === 1) {\n const [theChild] = lastOutput.children;\n if (theChild instanceof OutputNode) {\n lastOutput = theChild;\n } else {\n break;\n }\n }\n\n otherChildren.push(...lastOutput.children);\n\n if (mainOutput) {\n // Move the output nodes before the mainOutput. We do this by setting\n // the parent of the first not to the parent of the main output and\n // the main output's parent to the last output.\n\n // note: the child is the first output\n node.removeChild(child);\n child.parent = mainOutput.parent;\n\n mainOutput.parent.removeChild(mainOutput);\n mainOutput.parent = lastOutput;\n\n this.setModified();\n } else {\n mainOutput = lastOutput;\n }\n } else {\n otherChildren.push(child);\n }\n }\n\n if (otherChildren.length) {\n this.setModified();\n for (const child of otherChildren) {\n child.parent.removeChild(child);\n child.parent = mainOutput;\n }\n }\n }\n}\n","import {AggregateOp} from 'vega';\nimport {vgField} from '../../channeldef';\nimport {JoinAggregateTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {VgJoinAggregateTransform} from '../../vega.schema';\nimport {JoinAggregateFieldDef} from '../../transform';\nimport {unique} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for the join aggregate transform nodes.\n */\nexport class JoinAggregateTransformNode extends DataFlowNode {\n public clone() {\n return new JoinAggregateTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private readonly transform: JoinAggregateTransform) {\n super(parent);\n }\n\n public addDimensions(fields: string[]) {\n this.transform.groupby = unique(this.transform.groupby.concat(fields), d => d);\n }\n\n public dependentFields() {\n const out = new Set();\n\n if (this.transform.groupby) {\n this.transform.groupby.forEach(out.add, out);\n }\n this.transform.joinaggregate\n .map(w => w.field)\n .filter(f => f !== undefined)\n .forEach(out.add, out);\n\n return out;\n }\n\n public producedFields() {\n return new Set(this.transform.joinaggregate.map(this.getDefaultName));\n }\n\n private getDefaultName(joinAggregateFieldDef: JoinAggregateFieldDef): string {\n return joinAggregateFieldDef.as ?? vgField(joinAggregateFieldDef);\n }\n\n public hash() {\n return `JoinAggregateTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgJoinAggregateTransform {\n const fields: string[] = [];\n const ops: AggregateOp[] = [];\n const as: string[] = [];\n for (const joinaggregate of this.transform.joinaggregate) {\n ops.push(joinaggregate.op);\n as.push(this.getDefaultName(joinaggregate));\n fields.push(joinaggregate.field === undefined ? null : joinaggregate.field);\n }\n\n const groupby = this.transform.groupby;\n\n return {\n type: 'joinaggregate',\n as,\n ops,\n fields,\n ...(groupby !== undefined ? {groupby} : {})\n };\n }\n}\n","import {Transforms as VgTransform} from 'vega';\nimport {isArray, isString} from 'vega-util';\nimport {FieldName, getFieldDef, isFieldDef, PositionFieldDef, vgField} from '../../channeldef';\nimport {SortFields, SortOrder} from '../../sort';\nimport {StackOffset} from '../../stack';\nimport {StackTransform} from '../../transform';\nimport {duplicate, getFirstDefined, hash} from '../../util';\nimport {sortParams} from '../common';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nfunction getStackByFields(model: UnitModel): string[] {\n return model.stack.stackBy.reduce((fields, by) => {\n const fieldDef = by.fieldDef;\n\n const _field = vgField(fieldDef);\n if (_field) {\n fields.push(_field);\n }\n return fields;\n }, [] as string[]);\n}\n\nexport interface StackComponent {\n /**\n * Faceted field.\n */\n facetby: string[];\n\n dimensionFieldDef?: PositionFieldDef;\n\n /**\n * Stack measure's field. Used in makeFromEncoding.\n */\n stackField: string;\n\n /**\n * Level of detail fields for each level in the stacked charts such as color or detail.\n * Used in makeFromEncoding.\n */\n stackby?: string[];\n\n /**\n * Field that determines order of levels in the stacked charts.\n * Used in both but optional in transform.\n */\n sort: SortFields;\n\n /** Mode for stacking marks.\n */\n offset: StackOffset;\n\n /**\n * Whether to impute the data before stacking. Used only in makeFromEncoding.\n */\n impute?: boolean;\n\n /**\n * The data fields to group by.\n */\n groupby?: FieldName[];\n /**\n * Output field names of each stack field.\n */\n as: [FieldName, FieldName];\n}\n\nfunction isValidAsArray(as: string[] | string): as is string[] {\n return isArray(as) && as.every(s => isString(s)) && as.length > 1;\n}\n\nexport class StackNode extends DataFlowNode {\n private _stack: StackComponent;\n\n public clone() {\n return new StackNode(null, duplicate(this._stack));\n }\n\n constructor(parent: DataFlowNode, stack: StackComponent) {\n super(parent);\n\n this._stack = stack;\n }\n\n public static makeFromTransform(parent: DataFlowNode, stackTransform: StackTransform) {\n const {stack, groupby, as, offset = 'zero'} = stackTransform;\n\n const sortFields: string[] = [];\n const sortOrder: SortOrder[] = [];\n if (stackTransform.sort !== undefined) {\n for (const sortField of stackTransform.sort) {\n sortFields.push(sortField.field);\n sortOrder.push(getFirstDefined(sortField.order, 'ascending'));\n }\n }\n const sort: SortFields = {\n field: sortFields,\n order: sortOrder\n };\n let normalizedAs: [string, string];\n if (isValidAsArray(as)) {\n normalizedAs = as;\n } else if (isString(as)) {\n normalizedAs = [as, `${as}_end`];\n } else {\n normalizedAs = [`${stackTransform.stack}_start`, `${stackTransform.stack}_end`];\n }\n\n return new StackNode(parent, {\n stackField: stack,\n groupby,\n offset,\n sort,\n facetby: [],\n as: normalizedAs\n });\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: UnitModel) {\n const stackProperties = model.stack;\n const {encoding} = model;\n\n if (!stackProperties) {\n return null;\n }\n\n const {groupbyChannel, fieldChannel, offset, impute} = stackProperties;\n\n let dimensionFieldDef: PositionFieldDef;\n if (groupbyChannel) {\n const cDef = encoding[groupbyChannel];\n dimensionFieldDef = getFieldDef(cDef) as PositionFieldDef; // Fair to cast as groupByChannel is always either x or y\n }\n\n const stackby = getStackByFields(model);\n const orderDef = model.encoding.order;\n\n let sort: SortFields;\n if (isArray(orderDef) || isFieldDef(orderDef)) {\n sort = sortParams(orderDef);\n } else {\n // default = descending by stackFields\n // FIXME is the default here correct for binned fields?\n sort = stackby.reduce(\n (s, field) => {\n s.field.push(field);\n s.order.push(fieldChannel === 'y' ? 'descending' : 'ascending');\n return s;\n },\n {field: [], order: []}\n );\n }\n\n return new StackNode(parent, {\n dimensionFieldDef,\n stackField: model.vgField(fieldChannel),\n facetby: [],\n stackby,\n sort,\n offset,\n impute,\n as: [\n model.vgField(fieldChannel, {suffix: 'start', forAs: true}),\n model.vgField(fieldChannel, {suffix: 'end', forAs: true})\n ]\n });\n }\n\n get stack(): StackComponent {\n return this._stack;\n }\n\n public addDimensions(fields: string[]) {\n this._stack.facetby.push(...fields);\n }\n\n public dependentFields() {\n const out = new Set();\n\n out.add(this._stack.stackField);\n\n this.getGroupbyFields().forEach(out.add, out);\n this._stack.facetby.forEach(out.add, out);\n this._stack.sort.field.forEach(out.add, out);\n\n return out;\n }\n\n public producedFields() {\n return new Set(this._stack.as);\n }\n\n public hash() {\n return `Stack ${hash(this._stack)}`;\n }\n\n private getGroupbyFields() {\n const {dimensionFieldDef, impute, groupby} = this._stack;\n if (dimensionFieldDef) {\n if (dimensionFieldDef.bin) {\n if (impute) {\n // For binned group by field with impute, we calculate bin_mid\n // as we cannot impute two fields simultaneously\n return [vgField(dimensionFieldDef, {binSuffix: 'mid'})];\n }\n return [\n // For binned group by field without impute, we need both bin (start) and bin_end\n vgField(dimensionFieldDef, {}),\n vgField(dimensionFieldDef, {binSuffix: 'end'})\n ];\n }\n return [vgField(dimensionFieldDef)];\n }\n return groupby ?? [];\n }\n\n public assemble(): VgTransform[] {\n const transform: VgTransform[] = [];\n const {facetby, dimensionFieldDef, stackField: field, stackby, sort, offset, impute, as} = this._stack;\n\n // Impute\n if (impute && dimensionFieldDef) {\n const {bandPosition = 0.5, bin} = dimensionFieldDef;\n if (bin) {\n // As we can only impute one field at a time, we need to calculate\n // mid point for a binned field\n transform.push({\n type: 'formula',\n expr:\n `${bandPosition}*` +\n vgField(dimensionFieldDef, {expr: 'datum'}) +\n `+${1 - bandPosition}*` +\n vgField(dimensionFieldDef, {expr: 'datum', binSuffix: 'end'}),\n as: vgField(dimensionFieldDef, {binSuffix: 'mid', forAs: true})\n });\n }\n\n transform.push({\n type: 'impute',\n field,\n groupby: [...stackby, ...facetby],\n key: vgField(dimensionFieldDef, {binSuffix: 'mid'}),\n method: 'value',\n value: 0\n });\n }\n\n // Stack\n transform.push({\n type: 'stack',\n groupby: [...this.getGroupbyFields(), ...facetby],\n field,\n sort,\n as,\n offset\n });\n\n return transform;\n }\n}\n","import {AggregateOp, WindowTransform as VgWindowTransform} from 'vega';\nimport {isAggregateOp} from '../../aggregate';\nimport {vgField} from '../../channeldef';\nimport {SortOrder} from '../../sort';\nimport {WindowFieldDef, WindowOnlyOp, WindowTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {VgComparator, VgJoinAggregateTransform} from '../../vega.schema';\nimport {unique} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for the window transform nodes\n */\nexport class WindowTransformNode extends DataFlowNode {\n public clone() {\n return new WindowTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private readonly transform: WindowTransform) {\n super(parent);\n }\n\n public addDimensions(fields: string[]) {\n this.transform.groupby = unique(this.transform.groupby.concat(fields), d => d);\n }\n\n public dependentFields() {\n const out = new Set();\n\n (this.transform.groupby ?? []).forEach(out.add, out);\n (this.transform.sort ?? []).forEach(m => out.add(m.field));\n\n this.transform.window\n .map(w => w.field)\n .filter(f => f !== undefined)\n .forEach(out.add, out);\n\n return out;\n }\n\n public producedFields() {\n return new Set(this.transform.window.map(this.getDefaultName));\n }\n\n private getDefaultName(windowFieldDef: WindowFieldDef): string {\n return windowFieldDef.as ?? vgField(windowFieldDef);\n }\n\n public hash() {\n return `WindowTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgWindowTransform | VgJoinAggregateTransform {\n const fields: string[] = [];\n const ops: (AggregateOp | WindowOnlyOp)[] = [];\n const as: string[] = [];\n const params = [];\n\n for (const window of this.transform.window) {\n ops.push(window.op);\n as.push(this.getDefaultName(window));\n params.push(window.param === undefined ? null : window.param);\n fields.push(window.field === undefined ? null : window.field);\n }\n\n const frame = this.transform.frame;\n const groupby = this.transform.groupby;\n\n if (frame && frame[0] === null && frame[1] === null && ops.every(o => isAggregateOp(o))) {\n // when the window does not rely on any particular window ops or frame, switch to a simpler and more efficient joinaggregate\n return {\n type: 'joinaggregate',\n as,\n ops: ops as AggregateOp[],\n fields,\n ...(groupby !== undefined ? {groupby} : {})\n } as VgJoinAggregateTransform;\n }\n\n const sortFields: string[] = [];\n const sortOrder: SortOrder[] = [];\n if (this.transform.sort !== undefined) {\n for (const sortField of this.transform.sort) {\n sortFields.push(sortField.field);\n sortOrder.push(sortField.order ?? 'ascending');\n }\n }\n const sort: VgComparator = {\n field: sortFields,\n order: sortOrder\n };\n const ignorePeers = this.transform.ignorePeers;\n\n return {\n type: 'window',\n params,\n as,\n ops,\n fields,\n sort,\n ...(ignorePeers !== undefined ? {ignorePeers} : {}),\n ...(groupby !== undefined ? {groupby} : {}),\n ...(frame !== undefined ? {frame} : {})\n } as VgWindowTransform;\n }\n}\n","import {DataSourceType} from '../../data';\nimport {AggregateNode} from './aggregate';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {FacetNode} from './facet';\nimport {JoinAggregateTransformNode} from './joinaggregate';\nimport {FACET_SCALE_PREFIX} from './optimize';\nimport {StackNode} from './stack';\nimport {WindowTransformNode} from './window';\n\n/**\n * Clones the subtree and ignores output nodes except for the leaves, which are renamed.\n */\nfunction cloneSubtree(facet: FacetNode) {\n function clone(node: DataFlowNode): DataFlowNode[] {\n if (!(node instanceof FacetNode)) {\n const copy = node.clone();\n\n if (copy instanceof OutputNode) {\n const newName = FACET_SCALE_PREFIX + copy.getSource();\n copy.setSource(newName);\n\n facet.model.component.data.outputNodes[newName] = copy;\n } else if (\n copy instanceof AggregateNode ||\n copy instanceof StackNode ||\n copy instanceof WindowTransformNode ||\n copy instanceof JoinAggregateTransformNode\n ) {\n copy.addDimensions(facet.fields);\n }\n for (const n of node.children.flatMap(clone)) {\n n.parent = copy;\n }\n\n return [copy];\n }\n\n return node.children.flatMap(clone);\n }\n return clone;\n}\n\n/**\n * Move facet nodes down to the next fork or output node. Also pull the main output with the facet node.\n * After moving down the facet node, make a copy of the subtree and make it a child of the main output.\n */\nexport function moveFacetDown(node: DataFlowNode) {\n if (node instanceof FacetNode) {\n if (node.numChildren() === 1 && !(node.children[0] instanceof OutputNode)) {\n // move down until we hit a fork or output node\n const child = node.children[0];\n\n if (\n child instanceof AggregateNode ||\n child instanceof StackNode ||\n child instanceof WindowTransformNode ||\n child instanceof JoinAggregateTransformNode\n ) {\n child.addDimensions(node.fields);\n }\n\n child.swapWithParent();\n moveFacetDown(node);\n } else {\n // move main to facet\n\n const facetMain = node.model.component.data.main;\n moveMainDownToFacet(facetMain);\n\n // replicate the subtree and place it before the facet's main node\n const cloner = cloneSubtree(node);\n const copy: DataFlowNode[] = node.children.map(cloner).flat();\n for (const c of copy) {\n c.parent = facetMain;\n }\n }\n } else {\n node.children.map(moveFacetDown);\n }\n}\n\nfunction moveMainDownToFacet(node: DataFlowNode) {\n if (node instanceof OutputNode && node.type === DataSourceType.Main) {\n if (node.numChildren() === 1) {\n const child = node.children[0];\n if (!(child instanceof FacetNode)) {\n child.swapWithParent();\n moveMainDownToFacet(node);\n }\n }\n }\n}\n","import {DataComponent} from '.';\nimport * as log from '../../log';\nimport {Model} from '../model';\nimport {DataFlowNode} from './dataflow';\nimport {Optimizer} from './optimizer';\nimport * as optimizers from './optimizers';\nimport {moveFacetDown} from './subtree';\n\nexport const FACET_SCALE_PREFIX = 'scale_';\nexport const MAX_OPTIMIZATION_RUNS = 5;\n\n/**\n * Iterates over a dataflow graph and checks whether all links are consistent.\n */\nexport function checkLinks(nodes: readonly DataFlowNode[]): boolean {\n for (const node of nodes) {\n for (const child of node.children) {\n if (child.parent !== node) {\n // log.error('Dataflow graph is inconsistent.', node, child);\n return false;\n }\n }\n\n if (!checkLinks(node.children)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Run the specified optimizer on the provided nodes.\n *\n * @param optimizer The optimizer instance to run.\n * @param nodes A set of nodes to optimize.\n */\nfunction runOptimizer(optimizer: Optimizer, nodes: DataFlowNode[]): boolean {\n let modified = false;\n\n for (const node of nodes) {\n modified = optimizer.optimize(node) || modified;\n }\n\n return modified;\n}\n\nfunction optimizationDataflowHelper(dataComponent: DataComponent, model: Model, firstPass: boolean) {\n let roots = dataComponent.sources;\n let modified = false;\n\n modified = runOptimizer(new optimizers.RemoveUnnecessaryOutputNodes(), roots) || modified;\n modified = runOptimizer(new optimizers.RemoveUnnecessaryIdentifierNodes(model), roots) || modified;\n\n // remove source nodes that don't have any children because they also don't have output nodes\n roots = roots.filter(r => r.numChildren() > 0);\n\n modified = runOptimizer(new optimizers.RemoveUnusedSubtrees(), roots) || modified;\n\n roots = roots.filter(r => r.numChildren() > 0);\n\n if (!firstPass) {\n // Only run these optimizations after the optimizer has moved down the facet node.\n // With this change, we can be more aggressive in the optimizations.\n modified = runOptimizer(new optimizers.MoveParseUp(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeBins(model), roots) || modified;\n modified = runOptimizer(new optimizers.RemoveDuplicateTimeUnits(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeParse(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeAggregates(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeTimeUnits(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeIdenticalNodes(), roots) || modified;\n modified = runOptimizer(new optimizers.MergeOutputs(), roots) || modified;\n }\n\n dataComponent.sources = roots;\n\n return modified;\n}\n\n/**\n * Optimizes the dataflow of the passed in data component.\n */\nexport function optimizeDataflow(data: DataComponent, model: Model) {\n // check before optimizations\n checkLinks(data.sources);\n\n let firstPassCounter = 0;\n let secondPassCounter = 0;\n\n for (let i = 0; i < MAX_OPTIMIZATION_RUNS; i++) {\n if (!optimizationDataflowHelper(data, model, true)) {\n break;\n }\n firstPassCounter++;\n }\n\n // move facets down and make a copy of the subtree so that we can have scales at the top level\n data.sources.map(moveFacetDown);\n\n for (let i = 0; i < MAX_OPTIMIZATION_RUNS; i++) {\n if (!optimizationDataflowHelper(data, model, false)) {\n break;\n }\n secondPassCounter++;\n }\n\n // check after optimizations\n checkLinks(data.sources);\n\n if (Math.max(firstPassCounter, secondPassCounter) === MAX_OPTIMIZATION_RUNS) {\n log.warn(`Maximum optimization runs(${MAX_OPTIMIZATION_RUNS}) reached.`);\n }\n}\n","import {SignalRef} from 'vega';\n\nexport type Rename = (oldSignalName: string) => string;\n\n/**\n * A class that behaves like a SignalRef but lazily generates the signal.\n * The provided generator function should use `Model.getSignalName` to use the correct signal name.\n */\nexport class SignalRefWrapper implements SignalRef {\n constructor(exprGenerator: () => string) {\n Object.defineProperty(this, 'signal', {\n enumerable: true,\n get: exprGenerator\n });\n }\n\n public signal: string; // for ts\n\n public static fromName(rename: Rename, signalName: string) {\n return new SignalRefWrapper(() => rename(signalName));\n }\n}\n","import {SignalRef} from 'vega';\nimport {isObject, isString} from 'vega-util';\nimport {\n isAggregateOp,\n isArgmaxDef,\n isArgminDef,\n MULTIDOMAIN_SORT_OP_INDEX as UNIONDOMAIN_SORT_OP_INDEX,\n NonArgAggregateOp,\n SHARED_DOMAIN_OP_INDEX\n} from '../../aggregate';\nimport {isBinning, isBinParams, isParameterExtent} from '../../bin';\nimport {getSecondaryRangeChannel, isScaleChannel, ScaleChannel} from '../../channel';\nimport {\n binRequiresRange,\n getFieldOrDatumDef,\n hasBandEnd,\n isDatumDef,\n isFieldDef,\n ScaleDatumDef,\n ScaleFieldDef,\n TypedFieldDef,\n valueExpr,\n vgField\n} from '../../channeldef';\nimport {DataSourceType} from '../../data';\nimport {DateTime} from '../../datetime';\nimport {ExprRef} from '../../expr';\nimport * as log from '../../log';\nimport {Domain, hasDiscreteDomain, isDomainUnionWith, isParameterDomain, ScaleConfig, ScaleType} from '../../scale';\nimport {ParameterExtent} from '../../selection';\nimport {DEFAULT_SORT_OP, EncodingSortField, isSortArray, isSortByEncoding, isSortField} from '../../sort';\nimport {normalizeTimeUnit, TimeUnit, TimeUnitParams} from '../../timeunit';\nimport {Type} from '../../type';\nimport * as util from '../../util';\nimport {\n isDataRefDomain,\n isDataRefUnionedDomain,\n isFieldRefUnionDomain,\n isSignalRef,\n VgDomain,\n VgMultiFieldsRefWithSort,\n VgNonUnionDomain,\n VgScaleDataRefWithSort,\n VgSortField,\n VgUnionSortField\n} from '../../vega.schema';\nimport {getBinSignalName} from '../data/bin';\nimport {sortArrayIndexField} from '../data/calculate';\nimport {FACET_SCALE_PREFIX} from '../data/optimize';\nimport {isFacetModel, isUnitModel, Model} from '../model';\nimport {SignalRefWrapper} from '../signal';\nimport {Explicit, makeExplicit, makeImplicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponent, ScaleComponentIndex} from './component';\n\nexport function parseScaleDomain(model: Model) {\n if (isUnitModel(model)) {\n parseUnitScaleDomain(model);\n } else {\n parseNonUnitScaleDomain(model);\n }\n}\n\nfunction parseUnitScaleDomain(model: UnitModel) {\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n for (const channel of util.keys(localScaleComponents)) {\n const domains = parseDomainForChannel(model, channel);\n const localScaleCmpt = localScaleComponents[channel];\n localScaleCmpt.setWithExplicit('domains', domains);\n parseSelectionDomain(model, channel);\n\n if (model.component.data.isFaceted) {\n // get resolve from closest facet parent as this decides whether we need to refer to cloned subtree or not\n let facetParent: Model = model;\n while (!isFacetModel(facetParent) && facetParent.parent) {\n facetParent = facetParent.parent;\n }\n\n const resolve = facetParent.component.resolve.scale[channel];\n\n if (resolve === 'shared') {\n for (const domain of domains.value) {\n // Replace the scale domain with data output from a cloned subtree after the facet.\n if (isDataRefDomain(domain)) {\n // use data from cloned subtree (which is the same as data but with a prefix added once)\n domain.data = FACET_SCALE_PREFIX + domain.data.replace(FACET_SCALE_PREFIX, '');\n }\n }\n }\n }\n }\n}\n\nfunction parseNonUnitScaleDomain(model: Model) {\n for (const child of model.children) {\n parseScaleDomain(child);\n }\n\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n for (const channel of util.keys(localScaleComponents)) {\n let domains: Explicit;\n let selectionExtent: ParameterExtent = null;\n\n for (const child of model.children) {\n const childComponent = child.component.scales[channel];\n if (childComponent) {\n if (domains === undefined) {\n domains = childComponent.getWithExplicit('domains');\n } else {\n domains = mergeValuesWithExplicit(\n domains,\n childComponent.getWithExplicit('domains'),\n 'domains',\n 'scale',\n domainsTieBreaker\n );\n }\n\n const se = childComponent.get('selectionExtent');\n if (selectionExtent && se && selectionExtent.param !== se.param) {\n log.warn(log.message.NEEDS_SAME_SELECTION);\n }\n selectionExtent = se;\n }\n }\n\n localScaleComponents[channel].setWithExplicit('domains', domains);\n\n if (selectionExtent) {\n localScaleComponents[channel].set('selectionExtent', selectionExtent, true);\n }\n }\n}\n\n/**\n * Remove unaggregated domain if it is not applicable\n * Add unaggregated domain if domain is not specified and config.scale.useUnaggregatedDomain is true.\n */\nfunction normalizeUnaggregatedDomain(\n domain: Domain,\n fieldDef: TypedFieldDef,\n scaleType: ScaleType,\n scaleConfig: ScaleConfig\n) {\n if (domain === 'unaggregated') {\n const {valid, reason} = canUseUnaggregatedDomain(fieldDef, scaleType);\n if (!valid) {\n log.warn(reason);\n return undefined;\n }\n } else if (domain === undefined && scaleConfig.useUnaggregatedDomain) {\n // Apply config if domain is not specified.\n const {valid} = canUseUnaggregatedDomain(fieldDef, scaleType);\n if (valid) {\n return 'unaggregated';\n }\n }\n\n return domain;\n}\n\nexport function parseDomainForChannel(model: UnitModel, channel: ScaleChannel): Explicit {\n const scaleType = model.getScaleComponent(channel).get('type');\n const {encoding} = model;\n\n const domain = normalizeUnaggregatedDomain(\n model.scaleDomain(channel),\n model.typedFieldDef(channel),\n scaleType,\n model.config.scale\n );\n if (domain !== model.scaleDomain(channel)) {\n model.specifiedScales[channel] = {\n ...model.specifiedScales[channel],\n domain\n };\n }\n\n // If channel is either X or Y then union them with X2 & Y2 if they exist\n if (channel === 'x' && getFieldOrDatumDef(encoding.x2)) {\n if (getFieldOrDatumDef(encoding.x)) {\n return mergeValuesWithExplicit(\n parseSingleChannelDomain(scaleType, domain, model, 'x'),\n parseSingleChannelDomain(scaleType, domain, model, 'x2'),\n 'domain',\n 'scale',\n domainsTieBreaker\n );\n } else {\n return parseSingleChannelDomain(scaleType, domain, model, 'x2');\n }\n } else if (channel === 'y' && getFieldOrDatumDef(encoding.y2)) {\n if (getFieldOrDatumDef(encoding.y)) {\n return mergeValuesWithExplicit(\n parseSingleChannelDomain(scaleType, domain, model, 'y'),\n parseSingleChannelDomain(scaleType, domain, model, 'y2'),\n 'domain',\n 'scale',\n domainsTieBreaker\n );\n } else {\n return parseSingleChannelDomain(scaleType, domain, model, 'y2');\n }\n }\n return parseSingleChannelDomain(scaleType, domain, model, channel);\n}\n\nfunction mapDomainToDataSignal(\n domain: (number | string | boolean | DateTime | ExprRef | SignalRef | number[])[],\n type: Type,\n timeUnit: TimeUnit\n) {\n return domain.map(v => {\n const data = valueExpr(v, {timeUnit, type});\n return {signal: `{data: ${data}}`};\n });\n}\n\nfunction convertDomainIfItIsDateTime(\n domain: (number | string | boolean | DateTime | ExprRef | SignalRef | number[])[],\n type: Type,\n timeUnit: TimeUnit | TimeUnitParams\n): [number[]] | [string[]] | [boolean[]] | SignalRef[] {\n // explicit value\n const normalizedTimeUnit = normalizeTimeUnit(timeUnit)?.unit;\n if (type === 'temporal' || normalizedTimeUnit) {\n return mapDomainToDataSignal(domain, type, normalizedTimeUnit);\n }\n\n return [domain] as [number[]] | [string[]] | [boolean[]]; // Date time won't make sense\n}\n\nfunction parseSingleChannelDomain(\n scaleType: ScaleType,\n domain: Domain,\n model: UnitModel,\n channel: ScaleChannel | 'x2' | 'y2'\n): Explicit {\n const {encoding} = model;\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as ScaleDatumDef | ScaleFieldDef;\n\n const {type} = fieldOrDatumDef;\n const timeUnit = fieldOrDatumDef['timeUnit'];\n\n if (isDomainUnionWith(domain)) {\n const defaultDomain = parseSingleChannelDomain(scaleType, undefined, model, channel);\n\n const unionWith = convertDomainIfItIsDateTime(domain.unionWith, type, timeUnit);\n\n return makeExplicit([...defaultDomain.value, ...unionWith]);\n } else if (isSignalRef(domain)) {\n return makeExplicit([domain]);\n } else if (domain && domain !== 'unaggregated' && !isParameterDomain(domain)) {\n return makeExplicit(convertDomainIfItIsDateTime(domain, type, timeUnit));\n }\n\n const stack = model.stack;\n if (stack && channel === stack.fieldChannel) {\n if (stack.offset === 'normalize') {\n return makeImplicit([[0, 1]]);\n }\n\n const data = model.requestDataName(DataSourceType.Main);\n return makeImplicit([\n {\n data,\n field: model.vgField(channel, {suffix: 'start'})\n },\n {\n data,\n field: model.vgField(channel, {suffix: 'end'})\n }\n ]);\n }\n\n const sort: undefined | true | VgSortField =\n isScaleChannel(channel) && isFieldDef(fieldOrDatumDef) ? domainSort(model, channel, scaleType) : undefined;\n\n if (isDatumDef(fieldOrDatumDef)) {\n const d = convertDomainIfItIsDateTime([fieldOrDatumDef.datum], type, timeUnit);\n return makeImplicit(d);\n }\n\n const fieldDef = fieldOrDatumDef; // now we can be sure it's a fieldDef\n if (domain === 'unaggregated') {\n const data = model.requestDataName(DataSourceType.Main);\n const {field} = fieldOrDatumDef;\n return makeImplicit([\n {\n data,\n field: vgField({field, aggregate: 'min'})\n },\n {\n data,\n field: vgField({field, aggregate: 'max'})\n }\n ]);\n } else if (isBinning(fieldDef.bin)) {\n if (hasDiscreteDomain(scaleType)) {\n if (scaleType === 'bin-ordinal') {\n // we can omit the domain as it is inferred from the `bins` property\n return makeImplicit([]);\n }\n\n // ordinal bin scale takes domain from bin_range, ordered by bin start\n // This is useful for both axis-based scale (x/y) and legend-based scale (other channels).\n return makeImplicit([\n {\n // If sort by aggregation of a specified sort field, we need to use RAW table,\n // so we can aggregate values for the scale independently from the main aggregation.\n data: util.isBoolean(sort)\n ? model.requestDataName(DataSourceType.Main)\n : model.requestDataName(DataSourceType.Raw),\n // Use range if we added it and the scale does not support computing a range as a signal.\n field: model.vgField(channel, binRequiresRange(fieldDef, channel) ? {binSuffix: 'range'} : {}),\n // we have to use a sort object if sort = true to make the sort correct by bin start\n sort:\n sort === true || !isObject(sort)\n ? {\n field: model.vgField(channel, {}),\n op: 'min' // min or max doesn't matter since we sort by the start of the bin range\n }\n : sort\n }\n ]);\n } else {\n // continuous scales\n const {bin} = fieldDef;\n if (isBinning(bin)) {\n const binSignal = getBinSignalName(model, fieldDef.field, bin);\n return makeImplicit([\n new SignalRefWrapper(() => {\n const signal = model.getSignalName(binSignal);\n return `[${signal}.start, ${signal}.stop]`;\n })\n ]);\n } else {\n return makeImplicit([\n {\n data: model.requestDataName(DataSourceType.Main),\n field: model.vgField(channel, {})\n }\n ]);\n }\n }\n } else if (\n fieldDef.timeUnit &&\n util.contains(['time', 'utc'], scaleType) &&\n hasBandEnd(\n fieldDef,\n isUnitModel(model) ? model.encoding[getSecondaryRangeChannel(channel)] : undefined,\n model.markDef,\n model.config\n )\n ) {\n const data = model.requestDataName(DataSourceType.Main);\n return makeImplicit([\n {\n data,\n field: model.vgField(channel)\n },\n {\n data,\n field: model.vgField(channel, {suffix: 'end'})\n }\n ]);\n } else if (sort) {\n return makeImplicit([\n {\n // If sort by aggregation of a specified sort field, we need to use RAW table,\n // so we can aggregate values for the scale independently from the main aggregation.\n data: util.isBoolean(sort)\n ? model.requestDataName(DataSourceType.Main)\n : model.requestDataName(DataSourceType.Raw),\n field: model.vgField(channel),\n sort: sort\n }\n ]);\n } else {\n return makeImplicit([\n {\n data: model.requestDataName(DataSourceType.Main),\n field: model.vgField(channel)\n }\n ]);\n }\n}\n\nfunction normalizeSortField(sort: EncodingSortField, isStackedMeasure: boolean): VgSortField {\n const {op, field, order} = sort;\n return {\n // Apply default op\n op: op ?? (isStackedMeasure ? 'sum' : DEFAULT_SORT_OP),\n // flatten nested fields\n ...(field ? {field: util.replacePathInField(field)} : {}),\n\n ...(order ? {order} : {})\n };\n}\n\nfunction parseSelectionDomain(model: UnitModel, channel: ScaleChannel) {\n const scale = model.component.scales[channel];\n const spec = model.specifiedScales[channel].domain;\n const bin = model.fieldDef(channel)?.bin;\n const domain = isParameterDomain(spec) && spec;\n const extent = isBinParams(bin) && isParameterExtent(bin.extent) && bin.extent;\n\n if (domain || extent) {\n // As scale parsing occurs before selection parsing, we cannot set\n // domainRaw directly. So instead, we store the selectionExtent on\n // the scale component, and then add domainRaw during scale assembly.\n scale.set('selectionExtent', domain ?? extent, true);\n }\n}\n\nexport function domainSort(\n model: UnitModel,\n channel: ScaleChannel,\n scaleType: ScaleType\n): undefined | true | VgSortField {\n if (!hasDiscreteDomain(scaleType)) {\n return undefined;\n }\n\n // save to cast as the only exception is the geojson type for shape, which would not generate a scale\n const fieldDef = model.fieldDef(channel) as ScaleFieldDef;\n const sort = fieldDef.sort;\n\n // if the sort is specified with array, use the derived sort index field\n if (isSortArray(sort)) {\n return {\n op: 'min',\n field: sortArrayIndexField(fieldDef, channel),\n order: 'ascending'\n };\n }\n\n const {stack} = model;\n const stackDimensions = stack\n ? [...(stack.groupbyField ? [stack.groupbyField] : []), ...stack.stackBy.map(s => s.fieldDef.field)]\n : undefined;\n\n // Sorted based on an aggregate calculation over a specified sort field (only for ordinal scale)\n if (isSortField(sort)) {\n const isStackedMeasure = stack && !util.contains(stackDimensions, sort.field);\n return normalizeSortField(sort, isStackedMeasure);\n } else if (isSortByEncoding(sort)) {\n const {encoding, order} = sort;\n const fieldDefToSortBy = model.fieldDef(encoding);\n const {aggregate, field} = fieldDefToSortBy;\n\n const isStackedMeasure = stack && !util.contains(stackDimensions, field);\n\n if (isArgminDef(aggregate) || isArgmaxDef(aggregate)) {\n return normalizeSortField(\n {\n field: vgField(fieldDefToSortBy),\n order\n },\n isStackedMeasure\n );\n } else if (isAggregateOp(aggregate) || !aggregate) {\n return normalizeSortField(\n {\n op: aggregate as NonArgAggregateOp, // can't be argmin/argmax since we don't support them in encoding field def\n field,\n order\n },\n isStackedMeasure\n );\n }\n } else if (sort === 'descending') {\n return {\n op: 'min',\n field: model.vgField(channel),\n order: 'descending'\n };\n } else if (util.contains(['ascending', undefined /* default =ascending*/], sort)) {\n return true;\n }\n\n // sort == null\n return undefined;\n}\n\n/**\n * Determine if a scale can use unaggregated domain.\n * @return {Boolean} Returns true if all of the following conditions apply:\n * 1. `scale.domain` is `unaggregated`\n * 2. Aggregation function is not `count` or `sum`\n * 3. The scale is quantitative or time scale.\n */\nexport function canUseUnaggregatedDomain(\n fieldDef: TypedFieldDef,\n scaleType: ScaleType\n): {valid: boolean; reason?: string} {\n const {aggregate, type} = fieldDef;\n\n if (!aggregate) {\n return {\n valid: false,\n reason: log.message.unaggregateDomainHasNoEffectForRawField(fieldDef)\n };\n }\n\n if (isString(aggregate) && !SHARED_DOMAIN_OP_INDEX[aggregate]) {\n return {\n valid: false,\n reason: log.message.unaggregateDomainWithNonSharedDomainOp(aggregate)\n };\n }\n\n if (type === 'quantitative') {\n if (scaleType === 'log') {\n return {\n valid: false,\n reason: log.message.unaggregatedDomainWithLogScale(fieldDef)\n };\n }\n }\n\n return {valid: true};\n}\n\n/**\n * Tie breaker for mergeValuesWithExplicit for domains. We concat the specified values.\n */\nfunction domainsTieBreaker(\n v1: Explicit,\n v2: Explicit,\n property: 'domains',\n propertyOf: 'scale'\n) {\n if (v1.explicit && v2.explicit) {\n log.warn(log.message.mergeConflictingDomainProperty(property, propertyOf, v1.value, v2.value));\n }\n // If equal score, concat the domains so that we union them later.\n return {explicit: v1.explicit, value: [...v1.value, ...v2.value]};\n}\n\n/**\n * Converts an array of domains to a single Vega scale domain.\n */\nexport function mergeDomains(domains: VgNonUnionDomain[]): VgDomain {\n const uniqueDomains = util.unique(\n domains.map(domain => {\n // ignore sort property when computing the unique domains\n if (isDataRefDomain(domain)) {\n const {sort: _s, ...domainWithoutSort} = domain;\n return domainWithoutSort;\n }\n return domain;\n }),\n util.hash\n );\n\n const sorts: VgSortField[] = util.unique(\n domains\n .map(d => {\n if (isDataRefDomain(d)) {\n const s = d.sort;\n if (s !== undefined && !util.isBoolean(s)) {\n if ('op' in s && s.op === 'count') {\n // let's make sure that if op is count, we don't use a field\n delete s.field;\n }\n if (s.order === 'ascending') {\n // drop order: ascending as it is the default\n delete s.order;\n }\n }\n return s;\n }\n return undefined;\n })\n .filter(s => s !== undefined),\n util.hash\n );\n\n if (uniqueDomains.length === 0) {\n return undefined;\n } else if (uniqueDomains.length === 1) {\n const domain = domains[0];\n if (isDataRefDomain(domain) && sorts.length > 0) {\n let sort = sorts[0];\n if (sorts.length > 1) {\n log.warn(log.message.MORE_THAN_ONE_SORT);\n sort = true;\n } else {\n // Simplify domain sort by removing field and op when the field is the same as the domain field.\n if (isObject(sort) && 'field' in sort) {\n const sortField = sort.field;\n if (domain.field === sortField) {\n sort = sort.order ? {order: sort.order} : true;\n }\n }\n }\n return {\n ...domain,\n sort\n };\n }\n return domain;\n }\n\n // only keep sort properties that work with unioned domains\n const unionDomainSorts = util.unique(\n sorts.map(s => {\n if (util.isBoolean(s) || !('op' in s) || (isString(s.op) && s.op in UNIONDOMAIN_SORT_OP_INDEX)) {\n return s as VgUnionSortField;\n }\n log.warn(log.message.domainSortDropped(s));\n return true;\n }),\n util.hash\n ) as VgUnionSortField[];\n\n let sort: VgUnionSortField;\n\n if (unionDomainSorts.length === 1) {\n sort = unionDomainSorts[0];\n } else if (unionDomainSorts.length > 1) {\n log.warn(log.message.MORE_THAN_ONE_SORT);\n sort = true;\n }\n\n const allData = util.unique(\n domains.map(d => {\n if (isDataRefDomain(d)) {\n return d.data;\n }\n return null;\n }),\n x => x\n );\n\n if (allData.length === 1 && allData[0] !== null) {\n // create a union domain of different fields with a single data source\n const domain: VgMultiFieldsRefWithSort = {\n data: allData[0],\n fields: uniqueDomains.map(d => (d as VgScaleDataRefWithSort).field),\n ...(sort ? {sort} : {})\n };\n\n return domain;\n }\n\n return {fields: uniqueDomains, ...(sort ? {sort} : {})};\n}\n\n/**\n * Return a field if a scale uses a single field.\n * Return `undefined` otherwise.\n */\nexport function getFieldFromDomain(domain: VgDomain): string {\n if (isDataRefDomain(domain) && isString(domain.field)) {\n return domain.field;\n } else if (isDataRefUnionedDomain(domain)) {\n let field;\n for (const nonUnionDomain of domain.fields) {\n if (isDataRefDomain(nonUnionDomain) && isString(nonUnionDomain.field)) {\n if (!field) {\n field = nonUnionDomain.field;\n } else if (field !== nonUnionDomain.field) {\n log.warn(log.message.FACETED_INDEPENDENT_DIFFERENT_SOURCES);\n return field;\n }\n }\n }\n log.warn(log.message.FACETED_INDEPENDENT_SAME_FIELDS_DIFFERENT_SOURCES);\n return field;\n } else if (isFieldRefUnionDomain(domain)) {\n log.warn(log.message.FACETED_INDEPENDENT_SAME_SOURCE);\n const field = domain.fields[0];\n return isString(field) ? field : undefined;\n }\n\n return undefined;\n}\n\nexport function assembleDomain(model: Model, channel: ScaleChannel) {\n const scaleComponent: ScaleComponent = model.component.scales[channel];\n\n const domains = scaleComponent.get('domains').map((domain: VgNonUnionDomain) => {\n // Correct references to data as the original domain's data was determined\n // in parseScale, which happens before parseData. Thus the original data\n // reference can be incorrect.\n if (isDataRefDomain(domain)) {\n domain.data = model.lookupDataSource(domain.data);\n }\n\n return domain;\n });\n\n // domains is an array that has to be merged into a single vega domain\n return mergeDomains(domains);\n}\n","import {isObject} from 'vega-util';\nimport {isXorY, ScaleChannel} from '../../channel';\nimport {keys} from '../../util';\nimport {isDataRefDomain, isVgRangeStep, VgRange, VgScale} from '../../vega.schema';\nimport {isConcatModel, isLayerModel, Model} from '../model';\nimport {assembleSelectionScaleDomain} from '../selection/assemble';\nimport {assembleDomain} from './domain';\n\nexport function assembleScales(model: Model): VgScale[] {\n if (isLayerModel(model) || isConcatModel(model)) {\n // For concat and layer, include scales of children too\n return model.children.reduce((scales, child) => {\n return scales.concat(assembleScales(child));\n }, assembleScalesForModel(model));\n } else {\n // For facet, child scales would not be included in the parent's scope.\n // For unit, there is no child.\n return assembleScalesForModel(model);\n }\n}\n\nexport function assembleScalesForModel(model: Model): VgScale[] {\n return keys(model.component.scales).reduce((scales: VgScale[], channel: ScaleChannel) => {\n const scaleComponent = model.component.scales[channel];\n if (scaleComponent.merged) {\n // Skipped merged scales\n return scales;\n }\n\n const scale = scaleComponent.combine();\n const {name, type, selectionExtent, domains: _d, range: _r, reverse, ...otherScaleProps} = scale;\n const range = assembleScaleRange(scale.range, name, channel, model);\n\n const domain = assembleDomain(model, channel);\n const domainRaw = selectionExtent\n ? assembleSelectionScaleDomain(model, selectionExtent, scaleComponent, domain)\n : null;\n\n scales.push({\n name,\n type,\n ...(domain ? {domain} : {}),\n ...(domainRaw ? {domainRaw} : {}),\n range,\n ...(reverse !== undefined ? {reverse: reverse as any} : {}),\n ...otherScaleProps\n });\n\n return scales;\n }, [] as VgScale[]);\n}\n\nexport function assembleScaleRange(\n scaleRange: VgRange,\n scaleName: string,\n channel: ScaleChannel,\n model?: Model\n): VgRange {\n // add signals to x/y range\n if (isXorY(channel)) {\n if (isVgRangeStep(scaleRange)) {\n // For width/height step, use a signal created in layout assemble instead of a constant step.\n return {\n step: {signal: `${scaleName}_step`}\n };\n }\n } else if (isObject(scaleRange) && isDataRefDomain(scaleRange)) {\n return {\n ...scaleRange,\n data: model.lookupDataSource(scaleRange.data)\n };\n }\n return scaleRange;\n}\n","import {SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {ScaleChannel} from '../../channel';\nimport {Scale, ScaleType} from '../../scale';\nimport {ParameterExtent} from '../../selection';\nimport {some} from '../../util';\nimport {VgNonUnionDomain, VgScale} from '../../vega.schema';\nimport {Explicit, Split} from '../split';\n\n/**\n * All VgDomain property except domain.\n * (We exclude domain as we have a special \"domains\" array that allow us merge them all at once in assemble.)\n */\nexport type ScaleComponentProps = Omit & {\n domains: VgNonUnionDomain[];\n selectionExtent?: ParameterExtent;\n reverse?: boolean | SignalRef; // Need override since Vega doesn't official support scale reverse yet (though it does in practice)\n};\n\nexport type Range = ScaleComponentProps['range'];\n\nexport class ScaleComponent extends Split {\n public merged = false;\n\n constructor(name: string, typeWithExplicit: Explicit) {\n super(\n {}, // no initial explicit property\n {name} // name as initial implicit property\n );\n this.setWithExplicit('type', typeWithExplicit);\n }\n\n /**\n * Whether the scale definitely includes zero in the domain\n */\n public domainDefinitelyIncludesZero() {\n if (this.get('zero') !== false) {\n return true;\n }\n return some(this.get('domains'), d => isArray(d) && d.length === 2 && d[0] <= 0 && d[1] >= 0);\n }\n}\n\nexport type ScaleComponentIndex = Partial>;\n\nexport type ScaleIndex = Partial>>;\n","import {RangeScheme, SignalRef} from 'vega';\nimport {isArray, isNumber, isObject} from 'vega-util';\nimport {isBinning} from '../../bin';\nimport {\n ANGLE,\n COLOR,\n FILL,\n FILLOPACITY,\n isXorY,\n OPACITY,\n RADIUS,\n ScaleChannel,\n SCALE_CHANNELS,\n SHAPE,\n SIZE,\n STROKE,\n STROKEDASH,\n STROKEOPACITY,\n STROKEWIDTH,\n THETA,\n X,\n Y\n} from '../../channel';\nimport {getFieldOrDatumDef, ScaleDatumDef, ScaleFieldDef} from '../../channeldef';\nimport {Config, getViewConfigDiscreteSize, getViewConfigDiscreteStep, ViewConfig} from '../../config';\nimport {DataSourceType} from '../../data';\nimport * as log from '../../log';\nimport {Mark} from '../../mark';\nimport {\n channelScalePropertyIncompatability,\n Domain,\n hasContinuousDomain,\n hasDiscreteDomain,\n isContinuousToDiscrete,\n isExtendedScheme,\n Scale,\n scaleTypeSupportProperty,\n Scheme\n} from '../../scale';\nimport {isStep, LayoutSizeMixins} from '../../spec/base';\nimport * as util from '../../util';\nimport {isSignalRef, VgRange} from '../../vega.schema';\nimport {signalOrStringValue} from '../common';\nimport {getBinSignalName} from '../data/bin';\nimport {SignalRefWrapper} from '../signal';\nimport {Explicit, makeExplicit, makeImplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponentIndex} from './component';\n\nexport const RANGE_PROPERTIES: (keyof Scale)[] = ['range', 'scheme'];\n\nfunction getSizeChannel(channel: ScaleChannel) {\n return channel === 'x' ? 'width' : channel === 'y' ? 'height' : undefined;\n}\n\nexport function parseUnitScaleRange(model: UnitModel) {\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n // use SCALE_CHANNELS instead of scales[channel] to ensure that x, y come first!\n for (const channel of SCALE_CHANNELS) {\n const localScaleCmpt = localScaleComponents[channel];\n if (!localScaleCmpt) {\n continue;\n }\n\n const rangeWithExplicit = parseRangeForChannel(channel, model);\n\n localScaleCmpt.setWithExplicit('range', rangeWithExplicit);\n }\n}\n\nfunction getBinStepSignal(model: UnitModel, channel: 'x' | 'y'): SignalRefWrapper {\n const fieldDef = model.fieldDef(channel);\n\n if (fieldDef?.bin) {\n const {bin, field} = fieldDef;\n const sizeType = getSizeChannel(channel);\n const sizeSignal = model.getName(sizeType);\n\n if (isObject(bin) && bin.binned && bin.step !== undefined) {\n return new SignalRefWrapper(() => {\n const scaleName = model.scaleName(channel);\n const binCount = `(domain(\"${scaleName}\")[1] - domain(\"${scaleName}\")[0]) / ${bin.step}`;\n return `${model.getSignalName(sizeSignal)} / (${binCount})`;\n });\n } else if (isBinning(bin)) {\n const binSignal = getBinSignalName(model, field, bin);\n\n // TODO: extract this to be range step signal\n return new SignalRefWrapper(() => {\n const updatedName = model.getSignalName(binSignal);\n const binCount = `(${updatedName}.stop - ${updatedName}.start) / ${updatedName}.step`;\n return `${model.getSignalName(sizeSignal)} / (${binCount})`;\n });\n }\n }\n return undefined;\n}\n\n/**\n * Return mixins that includes one of the Vega range types (explicit range, range.step, range.scheme).\n */\nexport function parseRangeForChannel(channel: ScaleChannel, model: UnitModel): Explicit {\n const specifiedScale = model.specifiedScales[channel];\n const {size} = model;\n\n const mergedScaleCmpt = model.getScaleComponent(channel);\n const scaleType = mergedScaleCmpt.get('type');\n\n // Check if any of the range properties is specified.\n // If so, check if it is compatible and make sure that we only output one of the properties\n for (const property of RANGE_PROPERTIES) {\n if (specifiedScale[property] !== undefined) {\n const supportedByScaleType = scaleTypeSupportProperty(scaleType, property);\n const channelIncompatability = channelScalePropertyIncompatability(channel, property);\n if (!supportedByScaleType) {\n log.warn(log.message.scalePropertyNotWorkWithScaleType(scaleType, property, channel));\n } else if (channelIncompatability) {\n // channel\n log.warn(channelIncompatability);\n } else {\n switch (property) {\n case 'range': {\n const range = specifiedScale.range;\n if (isArray(range)) {\n if (isXorY(channel)) {\n return makeExplicit(\n range.map(v => {\n if (v === 'width' || v === 'height') {\n // get signal for width/height\n\n // Just like default range logic below, we use SignalRefWrapper to account for potential merges and renames.\n\n const sizeSignal = model.getName(v);\n const getSignalName = model.getSignalName.bind(model);\n return SignalRefWrapper.fromName(getSignalName, sizeSignal);\n }\n return v;\n })\n );\n }\n } else if (isObject(range)) {\n return makeExplicit({\n data: model.requestDataName(DataSourceType.Main),\n field: range.field,\n sort: {op: 'min', field: model.vgField(channel)}\n });\n }\n\n return makeExplicit(range);\n }\n case 'scheme':\n return makeExplicit(parseScheme(specifiedScale[property]));\n }\n }\n }\n }\n\n if (channel === X || channel === Y) {\n const sizeChannel = channel === X ? 'width' : 'height';\n const sizeValue = size[sizeChannel];\n if (isStep(sizeValue)) {\n if (hasDiscreteDomain(scaleType)) {\n return makeExplicit({step: sizeValue.step});\n } else {\n log.warn(log.message.stepDropped(sizeChannel));\n }\n }\n }\n\n const {rangeMin, rangeMax} = specifiedScale;\n const d = defaultRange(channel, model);\n\n if (\n (rangeMin !== undefined || rangeMax !== undefined) &&\n // it's ok to check just rangeMin's compatibility since rangeMin/rangeMax are the same\n scaleTypeSupportProperty(scaleType, 'rangeMin') &&\n isArray(d) &&\n d.length === 2\n ) {\n return makeExplicit([rangeMin ?? d[0], rangeMax ?? d[1]]);\n }\n\n return makeImplicit(d);\n}\n\nfunction parseScheme(scheme: Scheme | SignalRef): RangeScheme {\n if (isExtendedScheme(scheme)) {\n return {\n scheme: scheme.name,\n ...util.omit(scheme, ['name'])\n };\n }\n return {scheme: scheme};\n}\n\nfunction defaultRange(channel: ScaleChannel, model: UnitModel): VgRange {\n const {size, config, mark, encoding} = model;\n\n const getSignalName = model.getSignalName.bind(model);\n\n const {type} = getFieldOrDatumDef(encoding[channel]) as ScaleFieldDef | ScaleDatumDef;\n\n const mergedScaleCmpt = model.getScaleComponent(channel);\n const scaleType = mergedScaleCmpt.get('type');\n\n const {domain, domainMid} = model.specifiedScales[channel];\n\n switch (channel) {\n case X:\n case Y: {\n // If there is no explicit width/height for discrete x/y scales\n if (util.contains(['point', 'band'], scaleType)) {\n if (channel === X && !size.width) {\n const w = getViewConfigDiscreteSize(config.view, 'width');\n if (isStep(w)) {\n return w;\n }\n } else if (channel === Y && !size.height) {\n const h = getViewConfigDiscreteSize(config.view, 'height');\n if (isStep(h)) {\n return h;\n }\n }\n }\n\n // If step is null, use zero to width or height.\n // Note that we use SignalRefWrapper to account for potential merges and renames.\n\n const sizeType = getSizeChannel(channel);\n const sizeSignal = model.getName(sizeType);\n\n if (channel === Y && hasContinuousDomain(scaleType)) {\n // For y continuous scale, we have to start from the height as the bottom part has the max value.\n return [SignalRefWrapper.fromName(getSignalName, sizeSignal), 0];\n } else {\n return [0, SignalRefWrapper.fromName(getSignalName, sizeSignal)];\n }\n }\n\n case SIZE: {\n // TODO: support custom rangeMin, rangeMax\n const zero = model.component.scales[channel].get('zero');\n const rangeMin = sizeRangeMin(mark, zero, config);\n const rangeMax = sizeRangeMax(mark, size, model, config);\n if (isContinuousToDiscrete(scaleType)) {\n return interpolateRange(\n rangeMin,\n rangeMax,\n defaultContinuousToDiscreteCount(scaleType, config, domain, channel)\n );\n } else {\n return [rangeMin, rangeMax];\n }\n }\n\n case THETA:\n return [0, Math.PI * 2];\n\n case ANGLE:\n // TODO: add config.scale.min/maxAngleDegree (for point and text) and config.scale.min/maxAngleRadian (for arc) once we add arc marks.\n // (It's weird to add just config.scale.min/maxAngleDegree for now)\n return [0, 360];\n\n case RADIUS: {\n // max radius = half od min(width,height)\n return [\n 0,\n new SignalRefWrapper(() => {\n const w = model.getSignalName('width');\n const h = model.getSignalName('height');\n return `min(${w},${h})/2`;\n })\n ];\n }\n\n case STROKEWIDTH:\n // TODO: support custom rangeMin, rangeMax\n return [config.scale.minStrokeWidth, config.scale.maxStrokeWidth];\n case STROKEDASH:\n return [\n // TODO: add this to Vega's config.range?\n [1, 0],\n [4, 2],\n [2, 1],\n [1, 1],\n [1, 2, 4, 2]\n ];\n case SHAPE:\n return 'symbol';\n case COLOR:\n case FILL:\n case STROKE:\n if (scaleType === 'ordinal') {\n // Only nominal data uses ordinal scale by default\n return type === 'nominal' ? 'category' : 'ordinal';\n } else {\n if (domainMid !== undefined) {\n return 'diverging';\n } else {\n return mark === 'rect' || mark === 'geoshape' ? 'heatmap' : 'ramp';\n }\n }\n case OPACITY:\n case FILLOPACITY:\n case STROKEOPACITY:\n // TODO: support custom rangeMin, rangeMax\n return [config.scale.minOpacity, config.scale.maxOpacity];\n }\n /* istanbul ignore next: should never reach here */\n throw new Error(`Scale range undefined for channel ${channel}`);\n}\n\nexport function defaultContinuousToDiscreteCount(\n scaleType: 'quantile' | 'quantize' | 'threshold',\n config: Config,\n domain: Domain,\n channel: ScaleChannel\n) {\n switch (scaleType) {\n case 'quantile':\n return config.scale.quantileCount;\n case 'quantize':\n return config.scale.quantizeCount;\n case 'threshold':\n if (domain !== undefined && isArray(domain)) {\n return domain.length + 1;\n } else {\n log.warn(log.message.domainRequiredForThresholdScale(channel));\n // default threshold boundaries for threshold scale since domain has cardinality of 2\n return 3;\n }\n }\n}\n\n/**\n * Returns the linear interpolation of the range according to the cardinality\n *\n * @param rangeMin start of the range\n * @param rangeMax end of the range\n * @param cardinality number of values in the output range\n */\nexport function interpolateRange(\n rangeMin: number | SignalRef,\n rangeMax: number | SignalRef,\n cardinality: number\n): SignalRef {\n // always return a signal since it's better to compute the sequence in Vega later\n const f = () => {\n const rMax = signalOrStringValue(rangeMax);\n const rMin = signalOrStringValue(rangeMin);\n const step = `(${rMax} - ${rMin}) / (${cardinality} - 1)`;\n return `sequence(${rMin}, ${rMax} + ${step}, ${step})`;\n };\n if (isSignalRef(rangeMax)) {\n return new SignalRefWrapper(f);\n } else {\n return {signal: f()};\n }\n}\n\nfunction sizeRangeMin(mark: Mark, zero: boolean | SignalRef, config: Config): number | SignalRef {\n if (zero) {\n if (isSignalRef(zero)) {\n return {signal: `${zero.signal} ? 0 : ${sizeRangeMin(mark, false, config)}`};\n } else {\n return 0;\n }\n }\n switch (mark) {\n case 'bar':\n case 'tick':\n return config.scale.minBandSize;\n case 'line':\n case 'trail':\n case 'rule':\n return config.scale.minStrokeWidth;\n case 'text':\n return config.scale.minFontSize;\n case 'point':\n case 'square':\n case 'circle':\n return config.scale.minSize;\n }\n /* istanbul ignore next: should never reach here */\n // sizeRangeMin not implemented for the mark\n throw new Error(log.message.incompatibleChannel('size', mark));\n}\n\nexport const MAX_SIZE_RANGE_STEP_RATIO = 0.95;\n\nfunction sizeRangeMax(\n mark: Mark,\n size: LayoutSizeMixins,\n model: UnitModel,\n config: Config\n): number | SignalRef {\n const xyStepSignals = {\n x: getBinStepSignal(model, 'x'),\n y: getBinStepSignal(model, 'y')\n };\n\n switch (mark) {\n case 'bar':\n case 'tick': {\n if (config.scale.maxBandSize !== undefined) {\n return config.scale.maxBandSize;\n }\n const min = minXYStep(size, xyStepSignals, config.view);\n\n if (isNumber(min)) {\n return min - 1;\n } else {\n return new SignalRefWrapper(() => `${min.signal} - 1`);\n }\n }\n case 'line':\n case 'trail':\n case 'rule':\n return config.scale.maxStrokeWidth;\n case 'text':\n return config.scale.maxFontSize;\n case 'point':\n case 'square':\n case 'circle': {\n if (config.scale.maxSize) {\n return config.scale.maxSize;\n }\n\n const pointStep = minXYStep(size, xyStepSignals, config.view);\n if (isNumber(pointStep)) {\n return Math.pow(MAX_SIZE_RANGE_STEP_RATIO * pointStep, 2);\n } else {\n return new SignalRefWrapper(() => `pow(${MAX_SIZE_RANGE_STEP_RATIO} * ${pointStep.signal}, 2)`);\n }\n }\n }\n /* istanbul ignore next: should never reach here */\n // sizeRangeMax not implemented for the mark\n throw new Error(log.message.incompatibleChannel('size', mark));\n}\n\n/**\n * @returns {number} Range step of x or y or minimum between the two if both are ordinal scale.\n */\nfunction minXYStep(\n size: LayoutSizeMixins,\n xyStepSignals: {x?: SignalRefWrapper; y?: SignalRefWrapper},\n viewConfig: ViewConfig\n): number | SignalRef {\n const widthStep = isStep(size.width) ? size.width.step : getViewConfigDiscreteStep(viewConfig, 'width');\n const heightStep = isStep(size.height) ? size.height.step : getViewConfigDiscreteStep(viewConfig, 'height');\n\n if (xyStepSignals.x || xyStepSignals.y) {\n return new SignalRefWrapper(() => {\n const exprs = [\n xyStepSignals.x ? xyStepSignals.x.signal : widthStep,\n xyStepSignals.y ? xyStepSignals.y.signal : heightStep\n ];\n return `min(${exprs.join(', ')})`;\n });\n }\n\n return Math.min(widthStep, heightStep);\n}\n","import {SignalRef, TimeInterval} from 'vega';\nimport {isArray} from 'vega-util';\nimport {isBinned, isBinning, isBinParams} from '../../bin';\nimport {\n COLOR,\n FILL,\n POLAR_POSITION_SCALE_CHANNELS,\n POSITION_SCALE_CHANNELS,\n POSITION_SCALE_CHANNEL_INDEX,\n ScaleChannel,\n STROKE\n} from '../../channel';\nimport {\n getFieldDef,\n getFieldOrDatumDef,\n isFieldDef,\n ScaleDatumDef,\n ScaleFieldDef,\n TypedFieldDef,\n valueExpr\n} from '../../channeldef';\nimport {Config} from '../../config';\nimport {isDateTime} from '../../datetime';\nimport * as log from '../../log';\nimport {Mark, MarkDef, RectConfig} from '../../mark';\nimport {\n channelScalePropertyIncompatability,\n Domain,\n hasContinuousDomain,\n isContinuousToContinuous,\n isContinuousToDiscrete,\n Scale,\n ScaleConfig,\n ScaleType,\n scaleTypeSupportProperty\n} from '../../scale';\nimport {Sort} from '../../sort';\nimport {Type} from '../../type';\nimport * as util from '../../util';\nimport {contains, getFirstDefined, keys} from '../../util';\nimport {isSignalRef, VgScale} from '../../vega.schema';\nimport {getBinSignalName} from '../data/bin';\nimport {isUnitModel, Model} from '../model';\nimport {SignalRefWrapper} from '../signal';\nimport {Explicit, mergeValuesWithExplicit, tieBreakByComparing} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponentIndex, ScaleComponentProps} from './component';\nimport {parseUnitScaleRange} from './range';\n\nexport function parseScaleProperty(model: Model, property: Exclude) {\n if (isUnitModel(model)) {\n parseUnitScaleProperty(model, property);\n } else {\n parseNonUnitScaleProperty(model, property);\n }\n}\n\nfunction parseUnitScaleProperty(model: UnitModel, property: Exclude) {\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n const {config, encoding, markDef, specifiedScales} = model;\n\n for (const channel of keys(localScaleComponents)) {\n const specifiedScale = specifiedScales[channel];\n const localScaleCmpt = localScaleComponents[channel];\n const mergedScaleCmpt = model.getScaleComponent(channel);\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as ScaleFieldDef | ScaleDatumDef;\n\n const specifiedValue = specifiedScale[property];\n const scaleType = mergedScaleCmpt.get('type');\n const scalePadding = mergedScaleCmpt.get('padding');\n const scalePaddingInner = mergedScaleCmpt.get('paddingInner');\n\n const supportedByScaleType = scaleTypeSupportProperty(scaleType, property);\n const channelIncompatability = channelScalePropertyIncompatability(channel, property);\n\n if (specifiedValue !== undefined) {\n // If there is a specified value, check if it is compatible with scale type and channel\n if (!supportedByScaleType) {\n log.warn(log.message.scalePropertyNotWorkWithScaleType(scaleType, property, channel));\n } else if (channelIncompatability) {\n // channel\n log.warn(channelIncompatability);\n }\n }\n if (supportedByScaleType && channelIncompatability === undefined) {\n if (specifiedValue !== undefined) {\n const timeUnit = fieldOrDatumDef['timeUnit'];\n const type = fieldOrDatumDef.type;\n\n switch (property) {\n // domainMax/Min to signal if the value is a datetime object\n case 'domainMax':\n case 'domainMin':\n if (isDateTime(specifiedScale[property]) || type === 'temporal' || timeUnit) {\n localScaleCmpt.set(property, {signal: valueExpr(specifiedScale[property], {type, timeUnit})}, true);\n } else {\n localScaleCmpt.set(property, specifiedScale[property] as any, true);\n }\n break;\n default:\n localScaleCmpt.copyKeyFromObject>(\n property,\n specifiedScale\n );\n }\n } else {\n const value =\n property in scaleRules\n ? scaleRules[property]({\n model,\n channel,\n fieldOrDatumDef,\n scaleType,\n scalePadding,\n scalePaddingInner,\n domain: specifiedScale.domain,\n markDef,\n config\n })\n : config.scale[property];\n if (value !== undefined) {\n localScaleCmpt.set(property, value, false);\n }\n }\n }\n }\n}\n\nexport interface ScaleRuleParams {\n model: Model;\n channel: ScaleChannel;\n fieldOrDatumDef: ScaleFieldDef | ScaleDatumDef;\n scaleType: ScaleType;\n scalePadding: number | SignalRef;\n scalePaddingInner: number | SignalRef;\n domain: Domain;\n markDef: MarkDef;\n config: Config;\n}\n\nexport const scaleRules: {\n [k in keyof Scale]?: (params: ScaleRuleParams) => Scale[k];\n} = {\n bins: ({model, fieldOrDatumDef}) => (isFieldDef(fieldOrDatumDef) ? bins(model, fieldOrDatumDef) : undefined),\n\n interpolate: ({channel, fieldOrDatumDef}) => interpolate(channel, fieldOrDatumDef.type),\n\n nice: ({scaleType, channel, domain, fieldOrDatumDef}) => nice(scaleType, channel, domain, fieldOrDatumDef),\n\n padding: ({channel, scaleType, fieldOrDatumDef, markDef, config}) =>\n padding(channel, scaleType, config.scale, fieldOrDatumDef, markDef, config.bar),\n\n paddingInner: ({scalePadding, channel, markDef, config}) =>\n paddingInner(scalePadding, channel, markDef.type, config.scale),\n\n paddingOuter: ({scalePadding, channel, scaleType, markDef, scalePaddingInner, config}) =>\n paddingOuter(scalePadding, channel, scaleType, markDef.type, scalePaddingInner, config.scale),\n\n reverse: ({fieldOrDatumDef, scaleType, channel, config}) => {\n const sort = isFieldDef(fieldOrDatumDef) ? fieldOrDatumDef.sort : undefined;\n return reverse(scaleType, sort, channel, config.scale);\n },\n zero: ({channel, fieldOrDatumDef, domain, markDef, scaleType}) =>\n zero(channel, fieldOrDatumDef, domain, markDef, scaleType)\n};\n\n// This method is here rather than in range.ts to avoid circular dependency.\nexport function parseScaleRange(model: Model) {\n if (isUnitModel(model)) {\n parseUnitScaleRange(model);\n } else {\n parseNonUnitScaleProperty(model, 'range');\n }\n}\n\nexport function parseNonUnitScaleProperty(model: Model, property: keyof (Scale | ScaleComponentProps)) {\n const localScaleComponents: ScaleComponentIndex = model.component.scales;\n\n for (const child of model.children) {\n if (property === 'range') {\n parseScaleRange(child);\n } else {\n parseScaleProperty(child, property);\n }\n }\n\n for (const channel of keys(localScaleComponents)) {\n let valueWithExplicit: Explicit;\n\n for (const child of model.children) {\n const childComponent = child.component.scales[channel];\n if (childComponent) {\n const childValueWithExplicit = childComponent.getWithExplicit(property);\n valueWithExplicit = mergeValuesWithExplicit(\n valueWithExplicit,\n childValueWithExplicit,\n property,\n 'scale',\n tieBreakByComparing((v1, v2) => {\n switch (property) {\n case 'range':\n // For step, prefer larger step\n if (v1.step && v2.step) {\n return v1.step - v2.step;\n }\n return 0;\n // TODO: precedence rule for other properties\n }\n return 0;\n })\n );\n }\n }\n localScaleComponents[channel].setWithExplicit(property, valueWithExplicit);\n }\n}\n\nexport function bins(model: Model, fieldDef: TypedFieldDef) {\n const bin = fieldDef.bin;\n if (isBinning(bin)) {\n const binSignal = getBinSignalName(model, fieldDef.field, bin);\n return new SignalRefWrapper(() => {\n return model.getSignalName(binSignal);\n });\n } else if (isBinned(bin) && isBinParams(bin) && bin.step !== undefined) {\n // start and stop will be determined from the scale domain\n return {\n step: bin.step\n };\n }\n return undefined;\n}\n\nexport function interpolate(channel: ScaleChannel, type: Type): Scale['interpolate'] {\n if (contains([COLOR, FILL, STROKE], channel) && type !== 'nominal') {\n return 'hcl';\n }\n return undefined;\n}\n\nexport function nice(\n scaleType: ScaleType,\n channel: ScaleChannel,\n specifiedDomain: Domain,\n fieldOrDatumDef: TypedFieldDef | ScaleDatumDef\n): boolean | TimeInterval {\n if (\n getFieldDef(fieldOrDatumDef)?.bin ||\n isArray(specifiedDomain) ||\n util.contains([ScaleType.TIME, ScaleType.UTC], scaleType)\n ) {\n return undefined;\n }\n return channel in POSITION_SCALE_CHANNEL_INDEX ? true : undefined;\n}\n\nexport function padding(\n channel: ScaleChannel,\n scaleType: ScaleType,\n scaleConfig: ScaleConfig,\n fieldOrDatumDef: TypedFieldDef | ScaleDatumDef,\n markDef: MarkDef,\n barConfig: RectConfig\n) {\n if (channel in POSITION_SCALE_CHANNEL_INDEX) {\n if (isContinuousToContinuous(scaleType)) {\n if (scaleConfig.continuousPadding !== undefined) {\n return scaleConfig.continuousPadding;\n }\n\n const {type, orient} = markDef;\n if (type === 'bar' && !(isFieldDef(fieldOrDatumDef) && (fieldOrDatumDef.bin || fieldOrDatumDef.timeUnit))) {\n if ((orient === 'vertical' && channel === 'x') || (orient === 'horizontal' && channel === 'y')) {\n return barConfig.continuousBandSize;\n }\n }\n }\n\n if (scaleType === ScaleType.POINT) {\n return scaleConfig.pointPadding;\n }\n }\n return undefined;\n}\n\nexport function paddingInner(\n paddingValue: number | SignalRef,\n channel: ScaleChannel,\n mark: Mark,\n scaleConfig: ScaleConfig\n) {\n if (paddingValue !== undefined) {\n // If user has already manually specified \"padding\", no need to add default paddingInner.\n return undefined;\n }\n\n if (channel in POSITION_SCALE_CHANNEL_INDEX) {\n // Padding is only set for X and Y by default.\n // Basically it doesn't make sense to add padding for color and size.\n\n // paddingOuter would only be called if it's a band scale, just return the default for bandScale.\n\n const {bandPaddingInner, barBandPaddingInner, rectBandPaddingInner} = scaleConfig;\n\n return getFirstDefined(bandPaddingInner, mark === 'bar' ? barBandPaddingInner : rectBandPaddingInner);\n }\n return undefined;\n}\n\nexport function paddingOuter(\n paddingValue: number | SignalRef,\n channel: ScaleChannel,\n scaleType: ScaleType,\n mark: Mark,\n paddingInnerValue: number | SignalRef,\n scaleConfig: ScaleConfig\n) {\n if (paddingValue !== undefined) {\n // If user has already manually specified \"padding\", no need to add default paddingOuter.\n return undefined;\n }\n\n if (channel in POSITION_SCALE_CHANNEL_INDEX) {\n // Padding is only set for X and Y by default.\n // Basically it doesn't make sense to add padding for color and size.\n if (scaleType === ScaleType.BAND) {\n const {bandPaddingOuter} = scaleConfig;\n\n return getFirstDefined(\n bandPaddingOuter,\n /* By default, paddingOuter is paddingInner / 2. The reason is that\n size (width/height) = step * (cardinality - paddingInner + 2 * paddingOuter).\n and we want the width/height to be integer by default.\n Note that step (by default) and cardinality are integers.) */\n isSignalRef(paddingInnerValue) ? {signal: `${paddingInnerValue.signal}/2`} : paddingInnerValue / 2\n );\n }\n }\n return undefined;\n}\n\nexport function reverse(\n scaleType: ScaleType,\n sort: Sort,\n channel: ScaleChannel,\n scaleConfig: ScaleConfig\n) {\n if (channel === 'x' && scaleConfig.xReverse !== undefined) {\n if (hasContinuousDomain(scaleType) && sort === 'descending') {\n if (isSignalRef(scaleConfig.xReverse)) {\n return {signal: `!${scaleConfig.xReverse.signal}`};\n } else {\n return !scaleConfig.xReverse;\n }\n }\n return scaleConfig.xReverse;\n }\n\n if (hasContinuousDomain(scaleType) && sort === 'descending') {\n // For continuous domain scales, Vega does not support domain sort.\n // Thus, we reverse range instead if sort is descending\n return true;\n }\n return undefined;\n}\n\nexport function zero(\n channel: ScaleChannel,\n fieldDef: TypedFieldDef | ScaleDatumDef,\n specifiedDomain: Domain,\n markDef: MarkDef,\n scaleType: ScaleType\n) {\n // If users explicitly provide a domain, we should not augment zero as that will be unexpected.\n const hasCustomDomain = !!specifiedDomain && specifiedDomain !== 'unaggregated';\n if (hasCustomDomain) {\n if (hasContinuousDomain(scaleType)) {\n if (isArray(specifiedDomain)) {\n const first = specifiedDomain[0];\n const last = specifiedDomain[specifiedDomain.length - 1];\n\n if (first <= 0 && last >= 0) {\n // if the domain includes zero, make zero remains true\n return true;\n }\n }\n return false;\n }\n }\n\n // If there is no custom domain, return true only for the following cases:\n\n // 1) using quantitative field with size\n // While this can be either ratio or interval fields, our assumption is that\n // ratio are more common. However, if the scaleType is discretizing scale, we want to return\n // false so that range doesn't start at zero\n if (channel === 'size' && fieldDef.type === 'quantitative' && !isContinuousToDiscrete(scaleType)) {\n return true;\n }\n\n // 2) non-binned, quantitative x-scale or y-scale\n // (For binning, we should not include zero by default because binning are calculated without zero.)\n if (\n !(isFieldDef(fieldDef) && fieldDef.bin) &&\n util.contains([...POSITION_SCALE_CHANNELS, ...POLAR_POSITION_SCALE_CHANNELS], channel)\n ) {\n const {orient, type} = markDef;\n if (contains(['bar', 'area', 'line', 'trail'], type)) {\n if ((orient === 'horizontal' && channel === 'y') || (orient === 'vertical' && channel === 'x')) {\n return false;\n }\n }\n\n return true;\n }\n return false;\n}\n","import {isBinning} from '../../bin';\nimport {Channel, getSizeChannel, isColorChannel, isScaleChannel, rangeType} from '../../channel';\nimport {DatumDef, isFieldDef, isPositionFieldOrDatumDef, ScaleDatumDef, TypedFieldDef} from '../../channeldef';\nimport * as log from '../../log';\nimport {isRelativeBandSize, MarkDef} from '../../mark';\nimport {channelSupportScaleType, Scale, ScaleType, scaleTypeSupportDataType} from '../../scale';\nimport {normalizeTimeUnit} from '../../timeunit';\nimport * as util from '../../util';\nimport {POLAR_POSITION_SCALE_CHANNEL_INDEX, POSITION_SCALE_CHANNEL_INDEX} from './../../channel';\n\nexport type RangeType = 'continuous' | 'discrete' | 'flexible' | undefined;\n\n/**\n * Determine if there is a specified scale type and if it is appropriate,\n * or determine default type if type is unspecified or inappropriate.\n */\n// NOTE: CompassQL uses this method.\nexport function scaleType(\n specifiedScale: Scale,\n channel: Channel,\n fieldDef: TypedFieldDef | DatumDef,\n mark: MarkDef\n): ScaleType {\n const defaultScaleType = defaultType(channel, fieldDef, mark);\n const {type} = specifiedScale;\n\n if (!isScaleChannel(channel)) {\n // There is no scale for these channels\n return null;\n }\n if (type !== undefined) {\n // Check if explicitly specified scale type is supported by the channel\n if (!channelSupportScaleType(channel, type)) {\n log.warn(log.message.scaleTypeNotWorkWithChannel(channel, type, defaultScaleType));\n return defaultScaleType;\n }\n\n // Check if explicitly specified scale type is supported by the data type\n if (isFieldDef(fieldDef) && !scaleTypeSupportDataType(type, fieldDef.type)) {\n log.warn(log.message.scaleTypeNotWorkWithFieldDef(type, defaultScaleType));\n return defaultScaleType;\n }\n\n return type;\n }\n\n return defaultScaleType;\n}\n\n/**\n * Determine appropriate default scale type.\n */\n// NOTE: Voyager uses this method.\nfunction defaultType(channel: Channel, fieldDef: TypedFieldDef | ScaleDatumDef, mark: MarkDef): ScaleType {\n switch (fieldDef.type) {\n case 'nominal':\n case 'ordinal': {\n if (isColorChannel(channel) || rangeType(channel) === 'discrete') {\n if (channel === 'shape' && fieldDef.type === 'ordinal') {\n log.warn(log.message.discreteChannelCannotEncode(channel, 'ordinal'));\n }\n return 'ordinal';\n }\n\n if (channel in POSITION_SCALE_CHANNEL_INDEX) {\n if (util.contains(['rect', 'bar', 'image', 'rule'], mark.type)) {\n // The rect/bar mark should fit into a band.\n // For rule, using band scale to make rule align with axis ticks better https://github.com/vega/vega-lite/issues/3429\n return 'band';\n }\n } else if (mark.type === 'arc' && channel in POLAR_POSITION_SCALE_CHANNEL_INDEX) {\n return 'band';\n }\n\n const dimensionSize = mark[getSizeChannel(channel)];\n if (isRelativeBandSize(dimensionSize)) {\n return 'band';\n }\n\n if (isPositionFieldOrDatumDef(fieldDef) && fieldDef.axis?.tickBand) {\n return 'band';\n }\n // Otherwise, use ordinal point scale so we can easily get center positions of the marks.\n return 'point';\n }\n\n case 'temporal':\n if (isColorChannel(channel)) {\n return 'time';\n } else if (rangeType(channel) === 'discrete') {\n log.warn(log.message.discreteChannelCannotEncode(channel, 'temporal'));\n // TODO: consider using quantize (equivalent to binning) once we have it\n return 'ordinal';\n } else if (isFieldDef(fieldDef) && fieldDef.timeUnit && normalizeTimeUnit(fieldDef.timeUnit).utc) {\n return 'utc';\n }\n return 'time';\n\n case 'quantitative':\n if (isColorChannel(channel)) {\n if (isFieldDef(fieldDef) && isBinning(fieldDef.bin)) {\n return 'bin-ordinal';\n }\n\n return 'linear';\n } else if (rangeType(channel) === 'discrete') {\n log.warn(log.message.discreteChannelCannotEncode(channel, 'quantitative'));\n // TODO: consider using quantize (equivalent to binning) once we have it\n return 'ordinal';\n }\n\n return 'linear';\n\n case 'geojson':\n return undefined;\n }\n\n /* istanbul ignore next: should never reach this */\n throw new Error(log.message.invalidFieldType(fieldDef.type));\n}\n","import {ScaleChannel, SCALE_CHANNELS, SHAPE} from '../../channel';\nimport {getFieldOrDatumDef, ScaleDatumDef, TypedFieldDef} from '../../channeldef';\nimport {GEOSHAPE} from '../../mark';\nimport {\n NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES,\n scaleCompatible,\n ScaleType,\n scaleTypePrecedence\n} from '../../scale';\nimport {GEOJSON} from '../../type';\nimport {keys} from '../../util';\nimport {VgScale} from '../../vega.schema';\nimport {isUnitModel, Model} from '../model';\nimport {defaultScaleResolve} from '../resolve';\nimport {Explicit, mergeValuesWithExplicit, tieBreakByComparing} from '../split';\nimport {UnitModel} from '../unit';\nimport {ScaleComponent, ScaleComponentIndex} from './component';\nimport {parseScaleDomain} from './domain';\nimport {parseScaleProperty, parseScaleRange} from './properties';\nimport {scaleType} from './type';\n\nexport function parseScales(model: Model, {ignoreRange}: {ignoreRange?: boolean} = {}) {\n parseScaleCore(model);\n parseScaleDomain(model);\n for (const prop of NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES) {\n parseScaleProperty(model, prop);\n }\n if (!ignoreRange) {\n // range depends on zero\n parseScaleRange(model);\n }\n}\n\nexport function parseScaleCore(model: Model) {\n if (isUnitModel(model)) {\n model.component.scales = parseUnitScaleCore(model);\n } else {\n model.component.scales = parseNonUnitScaleCore(model);\n }\n}\n\n/**\n * Parse scales for all channels of a model.\n */\nfunction parseUnitScaleCore(model: UnitModel): ScaleComponentIndex {\n const {encoding, mark, markDef} = model;\n\n return SCALE_CHANNELS.reduce((scaleComponents: ScaleComponentIndex, channel: ScaleChannel) => {\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as TypedFieldDef | ScaleDatumDef; // must be typed def to have scale\n\n // Don't generate scale for shape of geoshape\n if (fieldOrDatumDef && mark === GEOSHAPE && channel === SHAPE && fieldOrDatumDef.type === GEOJSON) {\n return scaleComponents;\n }\n let specifiedScale = fieldOrDatumDef && fieldOrDatumDef['scale'];\n\n if (fieldOrDatumDef && specifiedScale !== null && specifiedScale !== false) {\n specifiedScale ??= {};\n\n const sType = scaleType(specifiedScale, channel, fieldOrDatumDef, markDef);\n scaleComponents[channel] = new ScaleComponent(model.scaleName(`${channel}`, true), {\n value: sType,\n explicit: specifiedScale.type === sType\n });\n }\n\n return scaleComponents;\n }, {});\n}\n\nconst scaleTypeTieBreaker = tieBreakByComparing(\n (st1: ScaleType, st2: ScaleType) => scaleTypePrecedence(st1) - scaleTypePrecedence(st2)\n);\n\nfunction parseNonUnitScaleCore(model: Model) {\n const scaleComponents: ScaleComponentIndex = (model.component.scales = {});\n\n const scaleTypeWithExplicitIndex: Partial>> = {};\n const resolve = model.component.resolve;\n\n // Parse each child scale and determine if a particular channel can be merged.\n for (const child of model.children) {\n parseScaleCore(child);\n\n // Instead of always merging right away -- check if it is compatible to merge first!\n for (const channel of keys(child.component.scales)) {\n // if resolve is undefined, set default first\n resolve.scale[channel] ??= defaultScaleResolve(channel, model);\n\n if (resolve.scale[channel] === 'shared') {\n const explicitScaleType = scaleTypeWithExplicitIndex[channel];\n const childScaleType = child.component.scales[channel].getWithExplicit('type');\n\n if (explicitScaleType) {\n if (scaleCompatible(explicitScaleType.value, childScaleType.value)) {\n // merge scale component if type are compatible\n scaleTypeWithExplicitIndex[channel] = mergeValuesWithExplicit(\n explicitScaleType,\n childScaleType,\n 'type',\n 'scale',\n scaleTypeTieBreaker\n );\n } else {\n // Otherwise, update conflicting channel to be independent\n resolve.scale[channel] = 'independent';\n // Remove from the index so they don't get merged\n delete scaleTypeWithExplicitIndex[channel];\n }\n } else {\n scaleTypeWithExplicitIndex[channel] = childScaleType;\n }\n }\n }\n }\n\n // Merge each channel listed in the index\n for (const channel of keys(scaleTypeWithExplicitIndex)) {\n // Create new merged scale component\n const name = model.scaleName(channel, true);\n const typeWithExplicit = scaleTypeWithExplicitIndex[channel];\n scaleComponents[channel] = new ScaleComponent(name, typeWithExplicit);\n\n // rename each child and mark them as merged\n for (const child of model.children) {\n const childScale = child.component.scales[channel];\n if (childScale) {\n child.renameScale(childScale.get('name'), name);\n childScale.merged = true;\n }\n }\n }\n\n return scaleComponents;\n}\n","import {\n AnchorValue,\n Axis as VgAxis,\n Legend as VgLegend,\n NewSignal,\n Projection as VgProjection,\n Signal,\n SignalRef,\n Title as VgTitle\n} from 'vega';\nimport {\n Channel,\n ExtendedChannel,\n FACET_CHANNELS,\n getPositionScaleChannel,\n isChannel,\n isScaleChannel,\n ScaleChannel,\n SingleDefChannel\n} from '../channel';\nimport {ChannelDef, FieldDef, FieldRefOption, getFieldDef, vgField} from '../channeldef';\nimport {Config} from '../config';\nimport {Data, DataSourceType} from '../data';\nimport {forEach, reduce} from '../encoding';\nimport {ExprRef, replaceExprRef} from '../expr';\nimport * as log from '../log';\nimport {Resolve} from '../resolve';\nimport {hasDiscreteDomain} from '../scale';\nimport {isFacetSpec} from '../spec';\nimport {\n extractCompositionLayout,\n GenericCompositionLayoutWithColumns,\n LayoutSizeMixins,\n SpecType,\n ViewBackground\n} from '../spec/base';\nimport {NormalizedSpec} from '../spec/index';\nimport {extractTitleConfig, isText, TitleParams} from '../title';\nimport {normalizeTransform, Transform} from '../transform';\nimport {contains, Dict, duplicate, isEmpty, keys, varName} from '../util';\nimport {isVgRangeStep, VgData, VgEncodeEntry, VgLayout, VgMarkGroup} from '../vega.schema';\nimport {assembleAxes} from './axis/assemble';\nimport {AxisComponentIndex} from './axis/component';\nimport {signalOrValueRef} from './common';\nimport {ConcatModel} from './concat';\nimport {DataComponent} from './data';\nimport {FacetModel} from './facet';\nimport {assembleHeaderGroups, assembleLayoutTitleBand, assembleTitleGroup} from './header/assemble';\nimport {HEADER_CHANNELS, LayoutHeaderComponent} from './header/component';\nimport {LayerModel} from './layer';\nimport {sizeExpr} from './layoutsize/assemble';\nimport {\n getSizeTypeFromLayoutSizeType,\n LayoutSizeComponent,\n LayoutSizeIndex,\n LayoutSizeType\n} from './layoutsize/component';\nimport {assembleLegends} from './legend/assemble';\nimport {LegendComponentIndex} from './legend/component';\nimport {parseLegend} from './legend/parse';\nimport {assembleProjections} from './projection/assemble';\nimport {ProjectionComponent} from './projection/component';\nimport {parseProjection} from './projection/parse';\nimport {assembleScales} from './scale/assemble';\nimport {ScaleComponent, ScaleComponentIndex} from './scale/component';\nimport {assembleDomain, getFieldFromDomain} from './scale/domain';\nimport {parseScales} from './scale/parse';\nimport {SelectionComponent} from './selection';\nimport {Split} from './split';\nimport {UnitModel} from './unit';\n\n/**\n * Composable Components that are intermediate results of the parsing phase of the\n * compilations. The components represents parts of the specification in a form that\n * can be easily merged (during parsing for composite specs).\n * In addition, these components are easily transformed into Vega specifications\n * during the \"assemble\" phase, which is the last phase of the compilation step.\n */\nexport interface Component {\n data: DataComponent;\n\n layoutSize: LayoutSizeComponent;\n\n layoutHeaders: {\n row?: LayoutHeaderComponent;\n column?: LayoutHeaderComponent;\n facet?: LayoutHeaderComponent;\n };\n\n mark: VgMarkGroup[];\n scales: ScaleComponentIndex;\n projection: ProjectionComponent;\n selection: Dict;\n\n /** Dictionary mapping channel to VgAxis definition */\n axes: AxisComponentIndex;\n\n /** Dictionary mapping channel to VgLegend definition */\n legends: LegendComponentIndex;\n\n resolve: Resolve;\n}\n\nexport interface NameMapInterface {\n rename(oldname: string, newName: string): void;\n has(name: string): boolean;\n get(name: string): string;\n}\n\nexport class NameMap implements NameMapInterface {\n private nameMap: Dict;\n\n constructor() {\n this.nameMap = {};\n }\n\n public rename(oldName: string, newName: string) {\n this.nameMap[oldName] = newName;\n }\n\n public has(name: string): boolean {\n return this.nameMap[name] !== undefined;\n }\n\n public get(name: string): string {\n // If the name appears in the _nameMap, we need to read its new name.\n // We have to loop over the dict just in case the new name also gets renamed.\n while (this.nameMap[name] && name !== this.nameMap[name]) {\n name = this.nameMap[name];\n }\n\n return name;\n }\n}\n\n/*\n We use type guards instead of `instanceof` as `instanceof` makes\n different parts of the compiler depend on the actual implementation of\n the model classes, which in turn depend on different parts of the compiler.\n Thus, `instanceof` leads to circular dependency problems.\n\n On the other hand, type guards only make different parts of the compiler\n depend on the type of the model classes, but not the actual implementation.\n*/\n\nexport function isUnitModel(model: Model): model is UnitModel {\n return model?.type === 'unit';\n}\n\nexport function isFacetModel(model: Model): model is FacetModel {\n return model?.type === 'facet';\n}\n\nexport function isConcatModel(model: Model): model is ConcatModel {\n return model?.type === 'concat';\n}\n\nexport function isLayerModel(model: Model): model is LayerModel {\n return model?.type === 'layer';\n}\n\nexport abstract class Model {\n public readonly name: string;\n\n public size: LayoutSizeMixins;\n\n public readonly title: TitleParams;\n public readonly description: string;\n\n public readonly data: Data | null;\n public readonly transforms: Transform[];\n public readonly layout: GenericCompositionLayoutWithColumns;\n\n /** Name map for scales, which can be renamed by a model's parent. */\n protected scaleNameMap: NameMapInterface;\n\n /** Name map for projections, which can be renamed by a model's parent. */\n protected projectionNameMap: NameMapInterface;\n\n /** Name map for signals, which can be renamed by a model's parent. */\n protected signalNameMap: NameMapInterface;\n\n public readonly component: Component;\n\n public readonly view?: ViewBackground;\n\n public abstract readonly children: Model[];\n\n constructor(\n spec: NormalizedSpec,\n public readonly type: SpecType,\n public readonly parent: Model,\n parentGivenName: string,\n public readonly config: Config,\n resolve: Resolve,\n view?: ViewBackground\n ) {\n this.parent = parent;\n this.config = config;\n this.view = replaceExprRef(view);\n\n // If name is not provided, always use parent's givenName to avoid name conflicts.\n this.name = spec.name ?? parentGivenName;\n this.title = isText(spec.title) ? {text: spec.title} : spec.title ? replaceExprRef(spec.title) : undefined;\n\n // Shared name maps\n this.scaleNameMap = parent ? parent.scaleNameMap : new NameMap();\n this.projectionNameMap = parent ? parent.projectionNameMap : new NameMap();\n this.signalNameMap = parent ? parent.signalNameMap : new NameMap();\n\n this.data = spec.data;\n\n this.description = spec.description;\n this.transforms = normalizeTransform(spec.transform ?? []);\n this.layout = type === 'layer' || type === 'unit' ? {} : extractCompositionLayout(spec, type, config);\n\n this.component = {\n data: {\n sources: parent ? parent.component.data.sources : [],\n outputNodes: parent ? parent.component.data.outputNodes : {},\n outputNodeRefCounts: parent ? parent.component.data.outputNodeRefCounts : {},\n // data is faceted if the spec is a facet spec or the parent has faceted data and data is undefined\n isFaceted: isFacetSpec(spec) || (parent && parent.component.data.isFaceted && spec.data === undefined)\n },\n layoutSize: new Split(),\n layoutHeaders: {row: {}, column: {}, facet: {}},\n mark: null,\n resolve: {\n scale: {},\n axis: {},\n legend: {},\n ...(resolve ? duplicate(resolve) : {})\n },\n selection: null,\n scales: null,\n projection: null,\n axes: {},\n legends: {}\n };\n }\n\n public get width(): SignalRef {\n return this.getSizeSignalRef('width');\n }\n\n public get height(): SignalRef {\n return this.getSizeSignalRef('height');\n }\n\n public parse() {\n this.parseScale();\n\n this.parseLayoutSize(); // depends on scale\n this.renameTopLevelLayoutSizeSignal();\n\n this.parseSelections();\n this.parseProjection();\n this.parseData(); // (pathorder) depends on markDef; selection filters depend on parsed selections; depends on projection because some transforms require the finalized projection name.\n this.parseAxesAndHeaders(); // depends on scale and layout size\n this.parseLegends(); // depends on scale, markDef\n this.parseMarkGroup(); // depends on data name, scale, layout size, axisGroup, and children's scale, axis, legend and mark.\n }\n\n public abstract parseData(): void;\n\n public abstract parseSelections(): void;\n\n public parseScale() {\n parseScales(this);\n }\n\n public parseProjection() {\n parseProjection(this);\n }\n\n public abstract parseLayoutSize(): void;\n\n /**\n * Rename top-level spec's size to be just width / height, ignoring model name.\n * This essentially merges the top-level spec's width/height signals with the width/height signals\n * to help us reduce redundant signals declaration.\n */\n private renameTopLevelLayoutSizeSignal() {\n if (this.getName('width') !== 'width') {\n this.renameSignal(this.getName('width'), 'width');\n }\n if (this.getName('height') !== 'height') {\n this.renameSignal(this.getName('height'), 'height');\n }\n }\n\n public abstract parseMarkGroup(): void;\n\n public abstract parseAxesAndHeaders(): void;\n\n public parseLegends() {\n parseLegend(this);\n }\n\n public abstract assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[];\n public abstract assembleSignals(): NewSignal[];\n\n public abstract assembleSelectionData(data: readonly VgData[]): readonly VgData[];\n\n public abstract assembleGroupStyle(): string | string[];\n\n private assembleEncodeFromView(view: ViewBackground): VgEncodeEntry {\n // Exclude \"style\"\n const {style: _, ...baseView} = view;\n\n const e: VgEncodeEntry = {};\n for (const property of keys(baseView)) {\n const value = baseView[property];\n if (value !== undefined) {\n e[property] = signalOrValueRef(value);\n }\n }\n\n return e;\n }\n\n public assembleGroupEncodeEntry(isTopLevel: boolean): VgEncodeEntry {\n let encodeEntry: VgEncodeEntry = {};\n if (this.view) {\n encodeEntry = this.assembleEncodeFromView(this.view);\n }\n\n if (!isTopLevel) {\n // Descriptions are already added to the top-level description so we only need to add them to the inner views.\n if (this.description) {\n encodeEntry['description'] = signalOrValueRef(this.description);\n }\n\n // For top-level spec, we can set the global width and height signal to adjust the group size.\n // For other child specs, we have to manually set width and height in the encode entry.\n if (this.type === 'unit' || this.type === 'layer') {\n return {\n width: this.getSizeSignalRef('width'),\n height: this.getSizeSignalRef('height'),\n ...(encodeEntry ?? {})\n };\n }\n }\n\n return isEmpty(encodeEntry) ? undefined : encodeEntry;\n }\n\n public assembleLayout(): VgLayout {\n if (!this.layout) {\n return undefined;\n }\n\n const {spacing, ...layout} = this.layout;\n\n const {component, config} = this;\n const titleBand = assembleLayoutTitleBand(component.layoutHeaders, config);\n\n return {\n padding: spacing,\n ...this.assembleDefaultLayout(),\n ...layout,\n ...(titleBand ? {titleBand} : {})\n };\n }\n\n protected assembleDefaultLayout(): VgLayout {\n return {};\n }\n\n public abstract assembleLayoutSignals(): NewSignal[];\n\n public assembleHeaderMarks(): VgMarkGroup[] {\n const {layoutHeaders} = this.component;\n let headerMarks = [];\n\n for (const channel of FACET_CHANNELS) {\n if (layoutHeaders[channel].title) {\n headerMarks.push(assembleTitleGroup(this, channel));\n }\n }\n\n for (const channel of HEADER_CHANNELS) {\n headerMarks = headerMarks.concat(assembleHeaderGroups(this, channel));\n }\n return headerMarks;\n }\n\n public abstract assembleMarks(): VgMarkGroup[];\n\n public assembleAxes(): VgAxis[] {\n return assembleAxes(this.component.axes, this.config);\n }\n\n public assembleLegends(): VgLegend[] {\n return assembleLegends(this);\n }\n\n public assembleProjections(): VgProjection[] {\n return assembleProjections(this);\n }\n\n public assembleTitle(): VgTitle {\n const {encoding, ...titleNoEncoding} = this.title ?? ({} as TitleParams);\n\n const title: VgTitle = {\n ...extractTitleConfig(this.config.title).nonMarkTitleProperties,\n ...titleNoEncoding,\n ...(encoding ? {encode: {update: encoding}} : {})\n };\n\n if (title.text) {\n if (contains(['unit', 'layer'], this.type)) {\n // Unit/Layer\n if (contains(['middle', undefined], title.anchor)) {\n title.frame ??= 'group';\n }\n } else {\n // composition with Vega layout\n\n // Set title = \"start\" by default for composition as \"middle\" does not look nice\n // https://github.com/vega/vega/issues/960#issuecomment-471360328\n title.anchor ??= 'start';\n }\n\n return isEmpty(title) ? undefined : title;\n }\n return undefined;\n }\n\n /**\n * Assemble the mark group for this model. We accept optional `signals` so that we can include concat top-level signals with the top-level model's local signals.\n */\n public assembleGroup(signals: Signal[] = []) {\n const group: VgMarkGroup = {};\n\n signals = signals.concat(this.assembleSignals());\n\n if (signals.length > 0) {\n group.signals = signals;\n }\n\n const layout = this.assembleLayout();\n if (layout) {\n group.layout = layout;\n }\n\n group.marks = [].concat(this.assembleHeaderMarks(), this.assembleMarks());\n\n // Only include scales if this spec is top-level or if parent is facet.\n // (Otherwise, it will be merged with upper-level's scope.)\n const scales = !this.parent || isFacetModel(this.parent) ? assembleScales(this) : [];\n if (scales.length > 0) {\n group.scales = scales;\n }\n\n const axes = this.assembleAxes();\n if (axes.length > 0) {\n group.axes = axes;\n }\n\n const legends = this.assembleLegends();\n if (legends.length > 0) {\n group.legends = legends;\n }\n\n return group;\n }\n\n public getName(text: string) {\n return varName((this.name ? `${this.name}_` : '') + text);\n }\n\n public getDataName(type: DataSourceType) {\n return this.getName(DataSourceType[type].toLowerCase());\n }\n\n /**\n * Request a data source name for the given data source type and mark that data source as required.\n * This method should be called in parse, so that all used data source can be correctly instantiated in assembleData().\n * You can lookup the correct dataset name in assemble with `lookupDataSource`.\n */\n public requestDataName(name: DataSourceType) {\n const fullName = this.getDataName(name);\n\n // Increase ref count. This is critical because otherwise we won't create a data source.\n // We also increase the ref counts on OutputNode.getSource() calls.\n const refCounts = this.component.data.outputNodeRefCounts;\n refCounts[fullName] = (refCounts[fullName] || 0) + 1;\n\n return fullName;\n }\n\n public getSizeSignalRef(layoutSizeType: LayoutSizeType): SignalRef {\n if (isFacetModel(this.parent)) {\n const sizeType = getSizeTypeFromLayoutSizeType(layoutSizeType);\n const channel = getPositionScaleChannel(sizeType);\n const scaleComponent = this.component.scales[channel];\n\n if (scaleComponent && !scaleComponent.merged) {\n // independent scale\n const type = scaleComponent.get('type');\n const range = scaleComponent.get('range');\n\n if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n const scaleName = scaleComponent.get('name');\n const domain = assembleDomain(this, channel);\n const field = getFieldFromDomain(domain);\n if (field) {\n const fieldRef = vgField({aggregate: 'distinct', field}, {expr: 'datum'});\n return {\n signal: sizeExpr(scaleName, scaleComponent, fieldRef)\n };\n } else {\n log.warn(log.message.unknownField(channel));\n return null;\n }\n }\n }\n }\n\n return {\n signal: this.signalNameMap.get(this.getName(layoutSizeType))\n };\n }\n\n /**\n * Lookup the name of the datasource for an output node. You probably want to call this in assemble.\n */\n public lookupDataSource(name: string) {\n const node = this.component.data.outputNodes[name];\n\n if (!node) {\n // Name not found in map so let's just return what we got.\n // This can happen if we already have the correct name.\n return name;\n }\n\n return node.getSource();\n }\n\n public getSignalName(oldSignalName: string): string {\n return this.signalNameMap.get(oldSignalName);\n }\n\n public renameSignal(oldName: string, newName: string) {\n this.signalNameMap.rename(oldName, newName);\n }\n\n public renameScale(oldName: string, newName: string) {\n this.scaleNameMap.rename(oldName, newName);\n }\n\n public renameProjection(oldName: string, newName: string) {\n this.projectionNameMap.rename(oldName, newName);\n }\n\n /**\n * @return scale name for a given channel after the scale has been parsed and named.\n */\n public scaleName(originalScaleName: ScaleChannel | string, parse?: boolean): string {\n if (parse) {\n // During the parse phase always return a value\n // No need to refer to rename map because a scale can't be renamed\n // before it has the original name.\n return this.getName(originalScaleName);\n }\n\n // If there is a scale for the channel, it should either\n // be in the scale component or exist in the name map\n if (\n // If there is a scale for the channel, there should be a local scale component for it\n (isChannel(originalScaleName) && isScaleChannel(originalScaleName) && this.component.scales[originalScaleName]) ||\n // in the scale name map (the scale get merged by its parent)\n this.scaleNameMap.has(this.getName(originalScaleName))\n ) {\n return this.scaleNameMap.get(this.getName(originalScaleName));\n }\n return undefined;\n }\n\n /**\n * @return projection name after the projection has been parsed and named.\n */\n public projectionName(parse?: boolean): string {\n if (parse) {\n // During the parse phase always return a value\n // No need to refer to rename map because a projection can't be renamed\n // before it has the original name.\n return this.getName('projection');\n }\n\n if (\n (this.component.projection && !this.component.projection.merged) ||\n this.projectionNameMap.has(this.getName('projection'))\n ) {\n return this.projectionNameMap.get(this.getName('projection'));\n }\n return undefined;\n }\n\n /**\n * Corrects the data references in marks after assemble.\n */\n public correctDataNames = (mark: VgMarkGroup) => {\n // TODO: make this correct\n\n // for normal data references\n if (mark.from?.data) {\n mark.from.data = this.lookupDataSource(mark.from.data);\n }\n\n // for access to facet data\n if (mark.from?.facet?.data) {\n mark.from.facet.data = this.lookupDataSource(mark.from.facet.data);\n }\n\n return mark;\n };\n\n /**\n * Traverse a model's hierarchy to get the scale component for a particular channel.\n */\n public getScaleComponent(channel: ScaleChannel): ScaleComponent {\n /* istanbul ignore next: This is warning for debugging test */\n if (!this.component.scales) {\n throw new Error(\n 'getScaleComponent cannot be called before parseScale(). Make sure you have called parseScale or use parseUnitModelWithScale().'\n );\n }\n\n const localScaleComponent = this.component.scales[channel];\n if (localScaleComponent && !localScaleComponent.merged) {\n return localScaleComponent;\n }\n return this.parent ? this.parent.getScaleComponent(channel) : undefined;\n }\n\n /**\n * Traverse a model's hierarchy to get a particular selection component.\n */\n public getSelectionComponent(variableName: string, origName: string): SelectionComponent {\n let sel = this.component.selection[variableName];\n if (!sel && this.parent) {\n sel = this.parent.getSelectionComponent(variableName, origName);\n }\n if (!sel) {\n throw new Error(log.message.selectionNotFound(origName));\n }\n return sel;\n }\n\n /**\n * Returns true if the model has a signalRef for an axis orient.\n */\n public hasAxisOrientSignalRef() {\n return (\n this.component.axes.x?.some(a => a.hasOrientSignalRef()) ||\n this.component.axes.y?.some(a => a.hasOrientSignalRef())\n );\n }\n}\n\n/** Abstract class for UnitModel and FacetModel. Both of which can contain fieldDefs as a part of its own specification. */\nexport abstract class ModelWithField extends Model {\n public abstract fieldDef(channel: SingleDefChannel): FieldDef;\n\n /** Get \"field\" reference for Vega */\n public vgField(channel: SingleDefChannel, opt: FieldRefOption = {}) {\n const fieldDef = this.fieldDef(channel);\n\n if (!fieldDef) {\n return undefined;\n }\n\n return vgField(fieldDef, opt);\n }\n\n protected abstract getMapping(): Partial>;\n\n public reduceFieldDef(f: (acc: U, fd: FieldDef, c: Channel) => U, init: T): T {\n return reduce(\n this.getMapping(),\n (acc: U, cd: ChannelDef, c: Channel) => {\n const fieldDef = getFieldDef(cd);\n if (fieldDef) {\n return f(acc, fieldDef, c);\n }\n return acc;\n },\n init\n );\n }\n\n public forEachFieldDef(f: (fd: FieldDef, c: ExtendedChannel) => void, t?: any) {\n forEach(\n this.getMapping(),\n (cd, c) => {\n const fieldDef = getFieldDef(cd);\n if (fieldDef) {\n f(fieldDef, c);\n }\n },\n t\n );\n }\n\n public abstract channelHasField(channel: Channel): boolean;\n}\n","import {KDETransform as VgKDETransform} from 'vega';\nimport {DensityTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for density transform nodes\n */\nexport class DensityTransformNode extends DataFlowNode {\n public clone() {\n return new DensityTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: DensityTransform) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? 'value', specifiedAs[1] ?? 'density'];\n }\n\n public dependentFields() {\n return new Set([this.transform.density, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `DensityTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgKDETransform {\n const {density, ...rest} = this.transform;\n const result: VgKDETransform = {\n type: 'kde',\n field: density,\n ...rest\n };\n return result;\n }\n}\n","import {FilterTransform as VgFilterTransform} from 'vega';\nimport {isScaleChannel} from '../../channel';\nimport {TypedFieldDef, vgField as fieldRef} from '../../channeldef';\nimport {isPathMark} from '../../mark';\nimport {hasContinuousDomain} from '../../scale';\nimport {Dict, hash, keys} from '../../util';\nimport {getMarkPropOrConfig} from '../common';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class FilterInvalidNode extends DataFlowNode {\n public clone() {\n return new FilterInvalidNode(null, {...this.filter});\n }\n\n constructor(parent: DataFlowNode, public readonly filter: Dict>) {\n super(parent);\n }\n\n public static make(parent: DataFlowNode, model: UnitModel): FilterInvalidNode {\n const {config, mark, markDef} = model;\n\n const invalid = getMarkPropOrConfig('invalid', markDef, config);\n if (invalid !== 'filter') {\n return null;\n }\n\n const filter = model.reduceFieldDef((aggregator: Dict>, fieldDef, channel) => {\n const scaleComponent = isScaleChannel(channel) && model.getScaleComponent(channel);\n if (scaleComponent) {\n const scaleType = scaleComponent.get('type');\n\n // While discrete domain scales can handle invalid values, continuous scales can't.\n // Thus, for non-path marks, we have to filter null for scales with continuous domains.\n // (For path marks, we will use \"defined\" property and skip these values instead.)\n if (hasContinuousDomain(scaleType) && fieldDef.aggregate !== 'count' && !isPathMark(mark)) {\n aggregator[fieldDef.field] = fieldDef as any; // we know that the fieldDef is a typed field def\n }\n }\n return aggregator;\n }, {} as Dict>);\n\n if (!keys(filter).length) {\n return null;\n }\n\n return new FilterInvalidNode(parent, filter);\n }\n\n public dependentFields() {\n return new Set(keys(this.filter));\n }\n\n public producedFields() {\n return new Set(); // filter does not produce any new fields\n }\n\n public hash() {\n return `FilterInvalid ${hash(this.filter)}`;\n }\n\n /**\n * Create the VgTransforms for each of the filtered fields.\n */\n public assemble(): VgFilterTransform {\n const filters = keys(this.filter).reduce((vegaFilters, field) => {\n const fieldDef = this.filter[field];\n const ref = fieldRef(fieldDef, {expr: 'datum'});\n\n if (fieldDef !== null) {\n if (fieldDef.type === 'temporal') {\n vegaFilters.push(`(isDate(${ref}) || (isValid(${ref}) && isFinite(+${ref})))`);\n } else if (fieldDef.type === 'quantitative') {\n vegaFilters.push(`isValid(${ref})`);\n vegaFilters.push(`isFinite(+${ref})`);\n } else {\n // should never get here\n }\n }\n return vegaFilters;\n }, [] as string[]);\n\n return filters.length > 0\n ? {\n type: 'filter',\n expr: filters.join(' && ')\n }\n : null;\n }\n}\n","import {FlattenTransform as VgFlattenTransform} from 'vega';\nimport {FlattenTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for flatten transform nodes\n */\nexport class FlattenTransformNode extends DataFlowNode {\n public clone() {\n return new FlattenTransformNode(this.parent, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: FlattenTransform) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const {flatten, as = []} = this.transform;\n this.transform.as = flatten.map((f, i) => as[i] ?? f);\n }\n\n public dependentFields() {\n return new Set(this.transform.flatten);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `FlattenTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgFlattenTransform {\n const {flatten: fields, as} = this.transform;\n\n const result: VgFlattenTransform = {\n type: 'flatten',\n fields,\n as\n };\n return result;\n }\n}\n","import {FoldTransform as VgFoldTransform} from 'vega';\nimport {FoldTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for flatten transform nodes\n */\nexport class FoldTransformNode extends DataFlowNode {\n public clone() {\n return new FoldTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: FoldTransform) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? 'key', specifiedAs[1] ?? 'value'];\n }\n\n public dependentFields() {\n return new Set(this.transform.fold);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `FoldTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgFoldTransform {\n const {fold, as} = this.transform;\n const result: VgFoldTransform = {\n type: 'fold',\n fields: fold,\n as\n };\n return result;\n }\n}\n","import {Transforms as VgTransform, Vector2} from 'vega';\nimport {isString} from 'vega-util';\nimport {GeoPositionChannel, LATITUDE, LATITUDE2, LONGITUDE, LONGITUDE2, SHAPE} from '../../channel';\nimport {getFieldOrDatumDef, isDatumDef, isFieldDef, isValueDef} from '../../channeldef';\nimport {GEOJSON} from '../../type';\nimport {duplicate, hash} from '../../util';\nimport {VgExprRef} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class GeoJSONNode extends DataFlowNode {\n public clone() {\n return new GeoJSONNode(null, duplicate(this.fields), this.geojson, this.signal);\n }\n\n public static parseAll(parent: DataFlowNode, model: UnitModel): DataFlowNode {\n if (model.component.projection && !model.component.projection.isFit) {\n return parent;\n }\n\n let geoJsonCounter = 0;\n\n for (const coordinates of [\n [LONGITUDE, LATITUDE],\n [LONGITUDE2, LATITUDE2]\n ] as Vector2[]) {\n const pair = coordinates.map(channel => {\n const def = getFieldOrDatumDef(model.encoding[channel]);\n return isFieldDef(def)\n ? def.field\n : isDatumDef(def)\n ? {expr: `${def.datum}`}\n : isValueDef(def)\n ? {expr: `${def['value']}`}\n : undefined;\n }) as [GeoPositionChannel, GeoPositionChannel];\n\n if (pair[0] || pair[1]) {\n parent = new GeoJSONNode(parent, pair, null, model.getName(`geojson_${geoJsonCounter++}`));\n }\n }\n\n if (model.channelHasField(SHAPE)) {\n const fieldDef = model.typedFieldDef(SHAPE);\n if (fieldDef.type === GEOJSON) {\n parent = new GeoJSONNode(parent, null, fieldDef.field, model.getName(`geojson_${geoJsonCounter++}`));\n }\n }\n\n return parent;\n }\n\n constructor(\n parent: DataFlowNode,\n private fields?: Vector2,\n private geojson?: string,\n private signal?: string\n ) {\n super(parent);\n }\n\n public dependentFields() {\n const fields = (this.fields ?? []).filter(isString) as string[];\n return new Set([...(this.geojson ? [this.geojson] : []), ...fields]);\n }\n\n public producedFields() {\n return new Set();\n }\n\n public hash() {\n return `GeoJSON ${this.geojson} ${this.signal} ${hash(this.fields)}`;\n }\n\n public assemble(): VgTransform[] {\n return [\n ...(this.geojson\n ? [\n {\n type: 'filter',\n expr: `isValid(datum[\"${this.geojson}\"])`\n } as const\n ]\n : []),\n {\n type: 'geojson',\n ...(this.fields ? {fields: this.fields} : {}),\n ...(this.geojson ? {geojson: this.geojson} : {}),\n signal: this.signal\n }\n ];\n }\n}\n","import {GeoPointTransform as VgGeoPointTransform, Vector2} from 'vega';\nimport {isString} from 'vega-util';\nimport {GeoPositionChannel, LATITUDE, LATITUDE2, LONGITUDE, LONGITUDE2} from '../../channel';\nimport {getFieldOrDatumDef, isDatumDef, isFieldDef, isValueDef} from '../../channeldef';\nimport {duplicate, hash} from '../../util';\nimport {VgExprRef} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class GeoPointNode extends DataFlowNode {\n public clone() {\n return new GeoPointNode(null, this.projection, duplicate(this.fields), duplicate(this.as));\n }\n\n constructor(\n parent: DataFlowNode,\n private projection: string,\n private fields: [string | VgExprRef, string | VgExprRef],\n private as: [string, string]\n ) {\n super(parent);\n }\n\n public static parseAll(parent: DataFlowNode, model: UnitModel): DataFlowNode {\n if (!model.projectionName()) {\n return parent;\n }\n\n for (const coordinates of [\n [LONGITUDE, LATITUDE],\n [LONGITUDE2, LATITUDE2]\n ] as Vector2[]) {\n const pair = coordinates.map(channel => {\n const def = getFieldOrDatumDef(model.encoding[channel]);\n return isFieldDef(def)\n ? def.field\n : isDatumDef(def)\n ? {expr: `${def.datum}`}\n : isValueDef(def)\n ? {expr: `${def['value']}`}\n : undefined;\n }) as [GeoPositionChannel, GeoPositionChannel];\n\n const suffix = coordinates[0] === LONGITUDE2 ? '2' : '';\n\n if (pair[0] || pair[1]) {\n parent = new GeoPointNode(parent, model.projectionName(), pair, [\n model.getName(`x${suffix}`),\n model.getName(`y${suffix}`)\n ]);\n }\n }\n\n return parent;\n }\n\n public dependentFields() {\n return new Set(this.fields.filter(isString));\n }\n\n public producedFields() {\n return new Set(this.as);\n }\n\n public hash() {\n return `Geopoint ${this.projection} ${hash(this.fields)} ${hash(this.as)}`;\n }\n\n public assemble(): VgGeoPointTransform {\n return {\n type: 'geopoint',\n projection: this.projection,\n fields: this.fields,\n as: this.as\n };\n }\n}\n","import {\n FormulaTransform as VgFormulaTransform,\n ImputeTransform as VgImputeTransform,\n SignalRef,\n WindowTransform as VgWindowTransform\n} from 'vega';\nimport {isFieldDef} from '../../channeldef';\nimport {pathGroupingFields} from '../../encoding';\nimport {ImputeSequence, ImputeTransform, isImputeSequence} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {UnitModel} from '../unit';\nimport {DataFlowNode} from './dataflow';\n\nexport class ImputeNode extends DataFlowNode {\n public clone() {\n return new ImputeNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private readonly transform: ImputeTransform) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set([this.transform.impute, this.transform.key, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set([this.transform.impute]);\n }\n\n private processSequence(keyvals: ImputeSequence): SignalRef {\n const {start = 0, stop, step} = keyvals;\n const result = [start, stop, ...(step ? [step] : [])].join(',');\n\n return {signal: `sequence(${result})`};\n }\n\n public static makeFromTransform(parent: DataFlowNode, imputeTransform: ImputeTransform): ImputeNode {\n return new ImputeNode(parent, imputeTransform);\n }\n\n public static makeFromEncoding(parent: DataFlowNode, model: UnitModel) {\n const encoding = model.encoding;\n const xDef = encoding.x;\n const yDef = encoding.y;\n\n if (isFieldDef(xDef) && isFieldDef(yDef)) {\n const imputedChannel = xDef.impute ? xDef : yDef.impute ? yDef : undefined;\n if (imputedChannel === undefined) {\n return undefined;\n }\n const keyChannel = xDef.impute ? yDef : yDef.impute ? xDef : undefined;\n const {method, value, frame, keyvals} = imputedChannel.impute;\n const groupbyFields = pathGroupingFields(model.mark, encoding);\n\n return new ImputeNode(parent, {\n impute: imputedChannel.field,\n key: keyChannel.field,\n ...(method ? {method} : {}),\n ...(value !== undefined ? {value} : {}),\n ...(frame ? {frame} : {}),\n ...(keyvals !== undefined ? {keyvals} : {}),\n ...(groupbyFields.length ? {groupby: groupbyFields} : {})\n });\n }\n return null;\n }\n\n public hash() {\n return `Impute ${hash(this.transform)}`;\n }\n\n public assemble() {\n const {impute, key, keyvals, method, groupby, value, frame = [null, null] as [null, null]} = this.transform;\n\n const imputeTransform: VgImputeTransform = {\n type: 'impute',\n field: impute,\n key,\n ...(keyvals ? {keyvals: isImputeSequence(keyvals) ? this.processSequence(keyvals) : keyvals} : {}),\n method: 'value',\n ...(groupby ? {groupby} : {}),\n value: !method || method === 'value' ? value : null\n };\n\n if (method && method !== 'value') {\n const deriveNewField: VgWindowTransform = {\n type: 'window',\n as: [`imputed_${impute}_value`],\n ops: [method],\n fields: [impute],\n frame,\n ignorePeers: false,\n ...(groupby ? {groupby} : {})\n };\n const replaceOriginal: VgFormulaTransform = {\n type: 'formula',\n expr: `datum.${impute} === null ? datum.imputed_${impute}_value : datum.${impute}`,\n as: impute\n };\n return [imputeTransform, deriveNewField, replaceOriginal];\n } else {\n return [imputeTransform];\n }\n }\n}\n","import {LoessTransform as VgLoessTransform} from 'vega';\nimport {LoessTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for loess transform nodes\n */\nexport class LoessTransformNode extends DataFlowNode {\n public clone() {\n return new LoessTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: LoessTransform) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? transform.on, specifiedAs[1] ?? transform.loess];\n }\n\n public dependentFields() {\n return new Set([this.transform.loess, this.transform.on, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `LoessTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgLoessTransform {\n const {loess, on, ...rest} = this.transform;\n const result: VgLoessTransform = {\n type: 'loess',\n x: on,\n y: loess,\n ...rest\n };\n return result;\n }\n}\n","import {LookupTransform as VgLookupTransform} from 'vega';\nimport {array, isString} from 'vega-util';\nimport * as log from '../../log';\nimport {isLookupData, isLookupSelection, LookupTransform} from '../../transform';\nimport {duplicate, hash, varName} from '../../util';\nimport {Model} from '../model';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {findSource} from './parse';\nimport {SourceNode} from './source';\nimport {DataSourceType} from '../../data';\n\nexport class LookupNode extends DataFlowNode {\n public clone() {\n return new LookupNode(null, duplicate(this.transform), this.secondary);\n }\n\n constructor(parent: DataFlowNode, public readonly transform: LookupTransform, public readonly secondary: string) {\n super(parent);\n }\n\n public static make(parent: DataFlowNode, model: Model, transform: LookupTransform, counter: number) {\n const sources = model.component.data.sources;\n const {from} = transform;\n let fromOutputNode = null;\n\n if (isLookupData(from)) {\n let fromSource = findSource(from.data, sources);\n\n if (!fromSource) {\n fromSource = new SourceNode(from.data);\n sources.push(fromSource);\n }\n\n const fromOutputName = model.getName(`lookup_${counter}`);\n fromOutputNode = new OutputNode(\n fromSource,\n fromOutputName,\n DataSourceType.Lookup,\n model.component.data.outputNodeRefCounts\n );\n model.component.data.outputNodes[fromOutputName] = fromOutputNode;\n } else if (isLookupSelection(from)) {\n const selName = from.param;\n transform = {as: selName, ...transform};\n let selCmpt;\n\n try {\n selCmpt = model.getSelectionComponent(varName(selName), selName);\n } catch (e) {\n throw new Error(log.message.cannotLookupVariableParameter(selName));\n }\n\n fromOutputNode = selCmpt.materialized;\n if (!fromOutputNode) {\n throw new Error(log.message.noSameUnitLookup(selName));\n }\n }\n\n return new LookupNode(parent, transform, fromOutputNode.getSource());\n }\n\n public dependentFields() {\n return new Set([this.transform.lookup]);\n }\n\n public producedFields() {\n return new Set(this.transform.as ? array(this.transform.as) : this.transform.from.fields);\n }\n\n public hash() {\n return `Lookup ${hash({transform: this.transform, secondary: this.secondary})}`;\n }\n\n public assemble(): VgLookupTransform {\n let foreign: Partial;\n\n if (this.transform.from.fields) {\n // lookup a few fields and add create a flat output\n foreign = {\n values: this.transform.from.fields,\n ...(this.transform.as ? {as: array(this.transform.as)} : {})\n };\n } else {\n // lookup full record and nest it\n let asName = this.transform.as;\n if (!isString(asName)) {\n log.warn(log.message.NO_FIELDS_NEEDS_AS);\n asName = '_lookup';\n }\n\n foreign = {\n as: [asName]\n };\n }\n\n return {\n type: 'lookup',\n from: this.secondary,\n key: this.transform.from.key,\n fields: [this.transform.lookup],\n ...foreign,\n ...(this.transform.default ? {default: this.transform.default} : {})\n };\n }\n}\n","import {QuantileTransform as VgQuantileTransform} from 'vega';\nimport {QuantileTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for quantile transform nodes\n */\nexport class QuantileTransformNode extends DataFlowNode {\n public clone() {\n return new QuantileTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: QuantileTransform) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? 'prob', specifiedAs[1] ?? 'value'];\n }\n\n public dependentFields() {\n return new Set([this.transform.quantile, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `QuantileTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgQuantileTransform {\n const {quantile, ...rest} = this.transform;\n const result: VgQuantileTransform = {\n type: 'quantile',\n field: quantile,\n ...rest\n };\n return result;\n }\n}\n","import {RegressionTransform as VgRegressionTransform} from 'vega';\nimport {RegressionTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for regression transform nodes\n */\nexport class RegressionTransformNode extends DataFlowNode {\n public clone() {\n return new RegressionTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: RegressionTransform) {\n super(parent);\n this.transform = duplicate(transform); // duplicate to prevent side effects\n const specifiedAs = this.transform.as ?? [undefined, undefined];\n this.transform.as = [specifiedAs[0] ?? transform.on, specifiedAs[1] ?? transform.regression];\n }\n\n public dependentFields() {\n return new Set([this.transform.regression, this.transform.on, ...(this.transform.groupby ?? [])]);\n }\n\n public producedFields() {\n return new Set(this.transform.as);\n }\n\n public hash() {\n return `RegressionTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgRegressionTransform {\n const {regression, on, ...rest} = this.transform;\n const result: VgRegressionTransform = {\n type: 'regression',\n x: on,\n y: regression,\n ...rest\n };\n return result;\n }\n}\n","import {PivotTransform} from '../../transform';\nimport {duplicate, hash, unique} from '../../util';\nimport {PivotTransform as VgPivotTransform} from 'vega';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for pivot transform nodes.\n */\nexport class PivotTransformNode extends DataFlowNode {\n public clone() {\n return new PivotTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: PivotTransform) {\n super(parent);\n }\n\n public addDimensions(fields: readonly string[]) {\n this.transform.groupby = unique((this.transform.groupby ?? []).concat(fields), d => d);\n }\n\n public producedFields(): undefined {\n return undefined; // return undefined so that potentially everything can depend on the pivot\n }\n\n public dependentFields() {\n return new Set([this.transform.pivot, this.transform.value, ...(this.transform.groupby ?? [])]);\n }\n\n public hash() {\n return `PivotTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgPivotTransform {\n const {pivot, value, groupby, limit, op} = this.transform;\n return {\n type: 'pivot',\n field: pivot,\n value,\n ...(limit !== undefined ? {limit} : {}),\n ...(op !== undefined ? {op} : {}),\n ...(groupby !== undefined ? {groupby} : {})\n };\n }\n}\n","import {SampleTransform as VgSampleTransform} from 'vega';\nimport {SampleTransform} from '../../transform';\nimport {duplicate, hash} from '../../util';\nimport {DataFlowNode} from './dataflow';\n\n/**\n * A class for the sample transform nodes\n */\nexport class SampleTransformNode extends DataFlowNode {\n public clone() {\n return new SampleTransformNode(null, duplicate(this.transform));\n }\n\n constructor(parent: DataFlowNode, private transform: SampleTransform) {\n super(parent);\n }\n\n public dependentFields() {\n return new Set();\n }\n\n public producedFields() {\n return new Set();\n }\n\n public hash() {\n return `SampleTransform ${hash(this.transform)}`;\n }\n\n public assemble(): VgSampleTransform {\n return {\n type: 'sample',\n size: this.transform.sample\n };\n }\n}\n","import {InlineDataset, isUrlData} from '../../data';\nimport {Dict} from '../../util';\nimport {VgData} from '../../vega.schema';\nimport {DataComponent} from './';\nimport {AggregateNode} from './aggregate';\nimport {BinNode} from './bin';\nimport {CalculateNode} from './calculate';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {DensityTransformNode} from './density';\nimport {FacetNode} from './facet';\nimport {FilterNode} from './filter';\nimport {FilterInvalidNode} from './filterinvalid';\nimport {FlattenTransformNode} from './flatten';\nimport {FoldTransformNode} from './fold';\nimport {ParseNode} from './formatparse';\nimport {GeoJSONNode} from './geojson';\nimport {GeoPointNode} from './geopoint';\nimport {GraticuleNode} from './graticule';\nimport {IdentifierNode} from './identifier';\nimport {ImputeNode} from './impute';\nimport {JoinAggregateTransformNode} from './joinaggregate';\nimport {LoessTransformNode} from './loess';\nimport {LookupNode} from './lookup';\nimport {QuantileTransformNode} from './quantile';\nimport {RegressionTransformNode} from './regression';\nimport {PivotTransformNode} from './pivot';\nimport {SampleTransformNode} from './sample';\nimport {SequenceNode} from './sequence';\nimport {SourceNode} from './source';\nimport {StackNode} from './stack';\nimport {TimeUnitNode} from './timeunit';\nimport {WindowTransformNode} from './window';\n\nfunction makeWalkTree(data: VgData[]) {\n // to name datasources\n let datasetIndex = 0;\n\n /**\n * Recursively walk down the tree.\n */\n function walkTree(node: DataFlowNode, dataSource: VgData) {\n if (node instanceof SourceNode) {\n // If the source is a named data source or a data source with values, we need\n // to put it in a different data source. Otherwise, Vega may override the data.\n if (!node.isGenerator && !isUrlData(node.data)) {\n data.push(dataSource);\n const newData: VgData = {\n name: null,\n source: dataSource.name,\n transform: []\n };\n dataSource = newData;\n }\n }\n\n if (node instanceof ParseNode) {\n if (node.parent instanceof SourceNode && !dataSource.source) {\n // If node's parent is a root source and the data source does not refer to another data source, use normal format parse\n dataSource.format = {\n ...(dataSource.format ?? {}),\n parse: node.assembleFormatParse()\n };\n\n // add calculates for all nested fields\n dataSource.transform.push(...node.assembleTransforms(true));\n } else {\n // Otherwise use Vega expression to parse\n dataSource.transform.push(...node.assembleTransforms());\n }\n }\n\n if (node instanceof FacetNode) {\n if (!dataSource.name) {\n dataSource.name = `data_${datasetIndex++}`;\n }\n\n if (!dataSource.source || dataSource.transform.length > 0) {\n data.push(dataSource);\n node.data = dataSource.name;\n } else {\n node.data = dataSource.source;\n }\n\n data.push(...node.assemble());\n\n // break here because the rest of the tree has to be taken care of by the facet.\n return;\n }\n\n if (\n node instanceof GraticuleNode ||\n node instanceof SequenceNode ||\n node instanceof FilterInvalidNode ||\n node instanceof FilterNode ||\n node instanceof CalculateNode ||\n node instanceof GeoPointNode ||\n node instanceof AggregateNode ||\n node instanceof LookupNode ||\n node instanceof WindowTransformNode ||\n node instanceof JoinAggregateTransformNode ||\n node instanceof FoldTransformNode ||\n node instanceof FlattenTransformNode ||\n node instanceof DensityTransformNode ||\n node instanceof LoessTransformNode ||\n node instanceof QuantileTransformNode ||\n node instanceof RegressionTransformNode ||\n node instanceof IdentifierNode ||\n node instanceof SampleTransformNode ||\n node instanceof PivotTransformNode\n ) {\n dataSource.transform.push(node.assemble());\n }\n\n if (\n node instanceof BinNode ||\n node instanceof TimeUnitNode ||\n node instanceof ImputeNode ||\n node instanceof StackNode ||\n node instanceof GeoJSONNode\n ) {\n dataSource.transform.push(...node.assemble());\n }\n\n if (node instanceof OutputNode) {\n if (dataSource.source && dataSource.transform.length === 0) {\n node.setSource(dataSource.source);\n } else if (node.parent instanceof OutputNode) {\n // Note that an output node may be required but we still do not assemble a\n // separate data source for it.\n node.setSource(dataSource.name);\n } else {\n if (!dataSource.name) {\n dataSource.name = `data_${datasetIndex++}`;\n }\n\n // Here we set the name of the datasource we generated. From now on\n // other assemblers can use it.\n node.setSource(dataSource.name);\n\n // if this node has more than one child, we will add a datasource automatically\n if (node.numChildren() === 1) {\n data.push(dataSource);\n const newData: VgData = {\n name: null,\n source: dataSource.name,\n transform: []\n };\n dataSource = newData;\n }\n }\n }\n\n switch (node.numChildren()) {\n case 0:\n // done\n if (node instanceof OutputNode && (!dataSource.source || dataSource.transform.length > 0)) {\n // do not push empty datasources that are simply references\n data.push(dataSource);\n }\n break;\n case 1:\n walkTree(node.children[0], dataSource);\n break;\n default: {\n if (!dataSource.name) {\n dataSource.name = `data_${datasetIndex++}`;\n }\n\n let source = dataSource.name;\n if (!dataSource.source || dataSource.transform.length > 0) {\n data.push(dataSource);\n } else {\n source = dataSource.source;\n }\n\n for (const child of node.children) {\n const newData: VgData = {\n name: null,\n source: source,\n transform: []\n };\n walkTree(child, newData);\n }\n break;\n }\n }\n }\n\n return walkTree;\n}\n\n/**\n * Assemble data sources that are derived from faceted data.\n */\nexport function assembleFacetData(root: FacetNode): VgData[] {\n const data: VgData[] = [];\n const walkTree = makeWalkTree(data);\n\n for (const child of root.children) {\n walkTree(child, {\n source: root.name,\n name: null,\n transform: []\n });\n }\n\n return data;\n}\n\n/**\n * Create Vega data array from a given compiled model and append all of them to the given array\n *\n * @param model\n * @param data array\n * @return modified data array\n */\nexport function assembleRootData(dataComponent: DataComponent, datasets: Dict): VgData[] {\n const data: VgData[] = [];\n\n // dataComponent.sources.forEach(debug);\n // draw(dataComponent.sources);\n\n const walkTree = makeWalkTree(data);\n\n let sourceIndex = 0;\n\n for (const root of dataComponent.sources) {\n // assign a name if the source does not have a name yet\n if (!root.hasName()) {\n root.dataName = `source_${sourceIndex++}`;\n }\n\n const newData: VgData = root.assemble();\n\n walkTree(root, newData);\n }\n\n // remove empty transform arrays for cleaner output\n for (const d of data) {\n if (d.transform.length === 0) {\n delete d.transform;\n }\n }\n\n // move sources without transforms (the ones that are potentially used in lookups) to the beginning\n let whereTo = 0;\n for (const [i, d] of data.entries()) {\n if ((d.transform ?? []).length === 0 && !d.source) {\n data.splice(whereTo++, 0, data.splice(i, 1)[0]);\n }\n }\n\n // now fix the from references in lookup transforms\n for (const d of data) {\n for (const t of d.transform ?? []) {\n if (t.type === 'lookup') {\n t.from = dataComponent.outputNodes[t.from].getSource();\n }\n }\n }\n\n // inline values for datasets that are in the datastore\n for (const d of data) {\n if (d.name in datasets) {\n d.values = datasets[d.name];\n }\n }\n\n return data;\n}\n","import {AxisOrient, SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {FacetChannel, FACET_CHANNELS} from '../../channel';\nimport {title as fieldDefTitle} from '../../channeldef';\nimport {contains, getFirstDefined} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {assembleAxis} from '../axis/assemble';\nimport {FacetModel} from '../facet';\nimport {parseGuideResolve} from '../resolve';\nimport {getHeaderProperty} from './common';\nimport {HeaderChannel, HeaderComponent} from './component';\n\nexport function getHeaderType(orient: AxisOrient | SignalRef) {\n if (orient === 'top' || orient === 'left' || isSignalRef(orient)) {\n // we always use header for orient signal since we can't dynamically make header becomes footer\n return 'header';\n }\n return 'footer';\n}\n\nexport function parseFacetHeaders(model: FacetModel) {\n for (const channel of FACET_CHANNELS) {\n parseFacetHeader(model, channel);\n }\n\n mergeChildAxis(model, 'x');\n mergeChildAxis(model, 'y');\n}\n\nfunction parseFacetHeader(model: FacetModel, channel: FacetChannel) {\n const {facet, config, child, component} = model;\n if (model.channelHasField(channel)) {\n const fieldDef = facet[channel];\n const titleConfig = getHeaderProperty('title', null, config, channel);\n let title = fieldDefTitle(fieldDef, config, {\n allowDisabling: true,\n includeDefault: titleConfig === undefined || !!titleConfig\n });\n\n if (child.component.layoutHeaders[channel].title) {\n // TODO: better handle multiline titles\n title = isArray(title) ? title.join(', ') : title;\n\n // merge title with child to produce \"Title / Subtitle / Sub-subtitle\"\n title += ` / ${child.component.layoutHeaders[channel].title}`;\n child.component.layoutHeaders[channel].title = null;\n }\n\n const labelOrient = getHeaderProperty('labelOrient', fieldDef.header, config, channel);\n\n const labels =\n fieldDef.header !== null ? getFirstDefined(fieldDef.header?.labels, config.header.labels, true) : false;\n const headerType = contains(['bottom', 'right'], labelOrient) ? 'footer' : 'header';\n\n component.layoutHeaders[channel] = {\n title: fieldDef.header !== null ? title : null,\n facetFieldDef: fieldDef,\n [headerType]: channel === 'facet' ? [] : [makeHeaderComponent(model, channel, labels)]\n };\n }\n}\n\nfunction makeHeaderComponent(model: FacetModel, channel: HeaderChannel, labels: boolean): HeaderComponent {\n const sizeType = channel === 'row' ? 'height' : 'width';\n\n return {\n labels,\n sizeSignal: model.child.component.layoutSize.get(sizeType) ? model.child.getSizeSignalRef(sizeType) : undefined,\n axes: []\n };\n}\n\nfunction mergeChildAxis(model: FacetModel, channel: 'x' | 'y') {\n const {child} = model;\n if (child.component.axes[channel]) {\n const {layoutHeaders, resolve} = model.component;\n resolve.axis[channel] = parseGuideResolve(resolve, channel);\n\n if (resolve.axis[channel] === 'shared') {\n // For shared axis, move the axes to facet's header or footer\n const headerChannel = channel === 'x' ? 'column' : 'row';\n\n const layoutHeader = layoutHeaders[headerChannel];\n for (const axisComponent of child.component.axes[channel]) {\n const headerType = getHeaderType(axisComponent.get('orient'));\n layoutHeader[headerType] ??= [makeHeaderComponent(model, headerChannel, false)];\n\n // FIXME: assemble shouldn't be called here, but we do it this way so we only extract the main part of the axes\n const mainAxis = assembleAxis(axisComponent, 'main', model.config, {header: true});\n if (mainAxis) {\n // LayoutHeader no longer keep track of property precedence, thus let's combine.\n layoutHeader[headerType][0].axes.push(mainAxis);\n }\n axisComponent.mainExtracted = true;\n }\n } else {\n // Otherwise do nothing for independent axes\n }\n }\n}\n","import {getPositionScaleChannel, getSizeChannel, POSITION_SCALE_CHANNELS} from '../../channel';\nimport {getViewConfigContinuousSize, getViewConfigDiscreteSize} from '../../config';\nimport {hasDiscreteDomain} from '../../scale';\nimport {isStep} from '../../spec/base';\nimport {isVgRangeStep} from '../../vega.schema';\nimport {ConcatModel} from '../concat';\nimport {Model} from '../model';\nimport {defaultScaleResolve} from '../resolve';\nimport {Explicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {getSizeTypeFromLayoutSizeType, LayoutSize, LayoutSizeIndex, LayoutSizeType} from './component';\n\nexport function parseLayerLayoutSize(model: Model) {\n parseChildrenLayoutSize(model);\n\n parseNonUnitLayoutSizeForChannel(model, 'width');\n parseNonUnitLayoutSizeForChannel(model, 'height');\n}\n\nexport function parseConcatLayoutSize(model: ConcatModel) {\n parseChildrenLayoutSize(model);\n\n // for columns === 1 (vconcat), we can completely merge width. Otherwise, we can treat merged width as childWidth.\n const widthType = model.layout.columns === 1 ? 'width' : 'childWidth';\n\n // for columns === undefined (hconcat), we can completely merge height. Otherwise, we can treat merged height as childHeight.\n const heightType = model.layout.columns === undefined ? 'height' : 'childHeight';\n\n parseNonUnitLayoutSizeForChannel(model, widthType);\n parseNonUnitLayoutSizeForChannel(model, heightType);\n}\n\nexport function parseChildrenLayoutSize(model: Model) {\n for (const child of model.children) {\n child.parseLayoutSize();\n }\n}\n\n/**\n * Merge child layout size (width or height).\n */\nfunction parseNonUnitLayoutSizeForChannel(model: Model, layoutSizeType: LayoutSizeType) {\n /*\n * For concat, the parent width or height might not be the same as the children's shared height.\n * For example, hconcat's subviews may share width, but the shared width is not the hconcat view's width.\n *\n * layoutSizeType represents the output of the view (could be childWidth/childHeight/width/height)\n * while the sizeType represents the properties of the child.\n */\n const sizeType = getSizeTypeFromLayoutSizeType(layoutSizeType);\n const channel = getPositionScaleChannel(sizeType);\n const resolve = model.component.resolve;\n const layoutSizeCmpt = model.component.layoutSize;\n\n let mergedSize: Explicit;\n // Try to merge layout size\n for (const child of model.children) {\n const childSize = child.component.layoutSize.getWithExplicit(sizeType);\n const scaleResolve = resolve.scale[channel] ?? defaultScaleResolve(channel, model);\n if (scaleResolve === 'independent' && childSize.value === 'step') {\n // Do not merge independent scales with range-step as their size depends\n // on the scale domains, which can be different between scales.\n mergedSize = undefined;\n break;\n }\n\n if (mergedSize) {\n if (scaleResolve === 'independent' && mergedSize.value !== childSize.value) {\n // For independent scale, only merge if all the sizes are the same.\n // If the values are different, abandon the merge!\n mergedSize = undefined;\n break;\n }\n mergedSize = mergeValuesWithExplicit(mergedSize, childSize, sizeType, '');\n } else {\n mergedSize = childSize;\n }\n }\n\n if (mergedSize) {\n // If merged, rename size and set size of all children.\n for (const child of model.children) {\n model.renameSignal(child.getName(sizeType), model.getName(layoutSizeType));\n child.component.layoutSize.set(sizeType, 'merged', false);\n }\n layoutSizeCmpt.setWithExplicit(layoutSizeType, mergedSize);\n } else {\n layoutSizeCmpt.setWithExplicit(layoutSizeType, {\n explicit: false,\n value: undefined\n });\n }\n}\n\nexport function parseUnitLayoutSize(model: UnitModel) {\n const {size, component} = model;\n for (const channel of POSITION_SCALE_CHANNELS) {\n const sizeType = getSizeChannel(channel);\n\n if (size[sizeType]) {\n const specifiedSize = size[sizeType];\n component.layoutSize.set(sizeType, isStep(specifiedSize) ? 'step' : specifiedSize, true);\n } else {\n const defaultSize = defaultUnitSize(model, sizeType);\n component.layoutSize.set(sizeType, defaultSize, false);\n }\n }\n}\n\nfunction defaultUnitSize(model: UnitModel, sizeType: 'width' | 'height'): LayoutSize {\n const channel = sizeType === 'width' ? 'x' : 'y';\n const config = model.config;\n const scaleComponent = model.getScaleComponent(channel);\n\n if (scaleComponent) {\n const scaleType = scaleComponent.get('type');\n const range = scaleComponent.get('range');\n\n if (hasDiscreteDomain(scaleType)) {\n const size = getViewConfigDiscreteSize(config.view, sizeType);\n if (isVgRangeStep(range) || isStep(size)) {\n // For discrete domain with range.step, use dynamic width/height\n return 'step';\n } else {\n return size;\n }\n } else {\n return getViewConfigContinuousSize(config.view, sizeType);\n }\n } else if (model.hasProjection || model.mark === 'arc') {\n // arc should use continuous size by default otherwise the pie is extremely small\n return getViewConfigContinuousSize(config.view, sizeType);\n } else {\n const size = getViewConfigDiscreteSize(config.view, sizeType);\n return isStep(size) ? size.step : size;\n }\n}\n","import {AggregateOp, LayoutAlign, NewSignal, SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {isBinning} from '../bin';\nimport {COLUMN, ExtendedChannel, FacetChannel, FACET_CHANNELS, POSITION_SCALE_CHANNELS, ROW} from '../channel';\nimport {FieldName, FieldRefOption, initFieldDef, TypedFieldDef, vgField} from '../channeldef';\nimport {Config} from '../config';\nimport {ExprRef, replaceExprRef} from '../expr';\nimport * as log from '../log';\nimport {hasDiscreteDomain} from '../scale';\nimport {DEFAULT_SORT_OP, EncodingSortField, isSortField, SortOrder} from '../sort';\nimport {NormalizedFacetSpec} from '../spec';\nimport {EncodingFacetMapping, FacetFieldDef, FacetMapping, isFacetMapping} from '../spec/facet';\nimport {keys} from '../util';\nimport {isVgRangeStep, VgData, VgLayout, VgMarkGroup} from '../vega.schema';\nimport {buildModel} from './buildmodel';\nimport {assembleFacetData} from './data/assemble';\nimport {sortArrayIndexField} from './data/calculate';\nimport {parseData} from './data/parse';\nimport {assembleLabelTitle} from './header/assemble';\nimport {getHeaderChannel, getHeaderProperty} from './header/common';\nimport {HEADER_CHANNELS, HEADER_TYPES} from './header/component';\nimport {parseFacetHeaders} from './header/parse';\nimport {parseChildrenLayoutSize} from './layoutsize/parse';\nimport {Model, ModelWithField} from './model';\nimport {assembleDomain, getFieldFromDomain} from './scale/domain';\nimport {assembleFacetSignals} from './selection/assemble';\n\nexport function facetSortFieldName(\n fieldDef: FacetFieldDef,\n sort: EncodingSortField,\n opt?: FieldRefOption\n) {\n return vgField(sort, {suffix: `by_${vgField(fieldDef)}`, ...(opt ?? {})});\n}\n\nexport class FacetModel extends ModelWithField {\n public readonly facet: EncodingFacetMapping;\n\n public readonly child: Model;\n\n public readonly children: Model[];\n\n constructor(spec: NormalizedFacetSpec, parent: Model, parentGivenName: string, config: Config) {\n super(spec, 'facet', parent, parentGivenName, config, spec.resolve);\n\n this.child = buildModel(spec.spec, this, this.getName('child'), undefined, config);\n this.children = [this.child];\n\n this.facet = this.initFacet(spec.facet);\n }\n\n private initFacet(\n facet: FacetFieldDef | FacetMapping\n ): EncodingFacetMapping {\n // clone to prevent side effect to the original spec\n if (!isFacetMapping(facet)) {\n return {facet: this.initFacetFieldDef(facet, 'facet')};\n }\n\n const channels = keys(facet);\n const normalizedFacet = {};\n for (const channel of channels) {\n if (![ROW, COLUMN].includes(channel)) {\n // Drop unsupported channel\n log.warn(log.message.incompatibleChannel(channel, 'facet'));\n break;\n }\n\n const fieldDef = facet[channel];\n if (fieldDef.field === undefined) {\n log.warn(log.message.emptyFieldDef(fieldDef, channel));\n break;\n }\n\n normalizedFacet[channel] = this.initFacetFieldDef(fieldDef, channel);\n }\n\n return normalizedFacet;\n }\n\n private initFacetFieldDef(fieldDef: FacetFieldDef, channel: FacetChannel) {\n // Cast because we call initFieldDef, which assumes general FieldDef.\n // However, FacetFieldDef is a bit more constrained than the general FieldDef\n const facetFieldDef = initFieldDef(fieldDef, channel) as FacetFieldDef;\n if (facetFieldDef.header) {\n facetFieldDef.header = replaceExprRef(facetFieldDef.header);\n } else if (facetFieldDef.header === null) {\n facetFieldDef.header = null;\n }\n return facetFieldDef;\n }\n\n public channelHasField(channel: ExtendedChannel): boolean {\n return !!this.facet[channel];\n }\n\n public fieldDef(channel: ExtendedChannel): TypedFieldDef {\n return this.facet[channel];\n }\n\n public parseData() {\n this.component.data = parseData(this);\n this.child.parseData();\n }\n\n public parseLayoutSize() {\n parseChildrenLayoutSize(this);\n }\n\n public parseSelections() {\n // As a facet has a single child, the selection components are the same.\n // The child maintains its selections to assemble signals, which remain\n // within its unit.\n this.child.parseSelections();\n this.component.selection = this.child.component.selection;\n }\n\n public parseMarkGroup() {\n this.child.parseMarkGroup();\n }\n\n public parseAxesAndHeaders() {\n this.child.parseAxesAndHeaders();\n\n parseFacetHeaders(this);\n }\n\n public assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[] {\n return this.child.assembleSelectionTopLevelSignals(signals);\n }\n\n public assembleSignals(): NewSignal[] {\n this.child.assembleSignals();\n return [];\n }\n\n public assembleSelectionData(data: readonly VgData[]): readonly VgData[] {\n return this.child.assembleSelectionData(data);\n }\n\n private getHeaderLayoutMixins(): VgLayout {\n const layoutMixins: VgLayout = {};\n\n for (const channel of FACET_CHANNELS) {\n for (const headerType of HEADER_TYPES) {\n const layoutHeaderComponent = this.component.layoutHeaders[channel];\n const headerComponent = layoutHeaderComponent[headerType];\n\n const {facetFieldDef} = layoutHeaderComponent;\n if (facetFieldDef) {\n const titleOrient = getHeaderProperty('titleOrient', facetFieldDef.header, this.config, channel);\n\n if (['right', 'bottom'].includes(titleOrient)) {\n const headerChannel = getHeaderChannel(channel, titleOrient);\n layoutMixins.titleAnchor ??= {};\n layoutMixins.titleAnchor[headerChannel] = 'end';\n }\n }\n\n if (headerComponent?.[0]) {\n // set header/footerBand\n const sizeType = channel === 'row' ? 'height' : 'width';\n const bandType = headerType === 'header' ? 'headerBand' : 'footerBand';\n if (channel !== 'facet' && !this.child.component.layoutSize.get(sizeType)) {\n // If facet child does not have size signal, then apply headerBand\n layoutMixins[bandType] ??= {};\n layoutMixins[bandType][channel] = 0.5;\n }\n\n if (layoutHeaderComponent.title) {\n layoutMixins.offset ??= {};\n layoutMixins.offset[channel === 'row' ? 'rowTitle' : 'columnTitle'] = 10;\n }\n }\n }\n }\n return layoutMixins;\n }\n\n protected assembleDefaultLayout(): VgLayout {\n const {column, row} = this.facet;\n\n const columns = column ? this.columnDistinctSignal() : row ? 1 : undefined;\n\n let align: LayoutAlign = 'all';\n\n // Do not align the cells if the scale corresponding to the direction is indepent.\n // We always align when we facet into both row and column.\n if (!row && this.component.resolve.scale.x === 'independent') {\n align = 'none';\n } else if (!column && this.component.resolve.scale.y === 'independent') {\n align = 'none';\n }\n\n return {\n ...this.getHeaderLayoutMixins(),\n\n ...(columns ? {columns} : {}),\n bounds: 'full',\n align\n };\n }\n\n public assembleLayoutSignals(): NewSignal[] {\n // FIXME(https://github.com/vega/vega-lite/issues/1193): this can be incorrect if we have independent scales.\n return this.child.assembleLayoutSignals();\n }\n\n private columnDistinctSignal() {\n if (this.parent && this.parent instanceof FacetModel) {\n // For nested facet, we will add columns to group mark instead\n // See discussion in https://github.com/vega/vega/issues/952\n // and https://github.com/vega/vega-view/releases/tag/v1.2.6\n return undefined;\n } else {\n // In facetNode.assemble(), the name is always this.getName('column') + '_layout'.\n const facetLayoutDataName = this.getName('column_domain');\n return {signal: `length(data('${facetLayoutDataName}'))`};\n }\n }\n\n public assembleGroupStyle(): string | string[] {\n return undefined;\n }\n\n public assembleGroup(signals: NewSignal[]) {\n if (this.parent && this.parent instanceof FacetModel) {\n // Provide number of columns for layout.\n // See discussion in https://github.com/vega/vega/issues/952\n // and https://github.com/vega/vega-view/releases/tag/v1.2.6\n return {\n ...(this.channelHasField('column')\n ? {\n encode: {\n update: {\n // TODO(https://github.com/vega/vega-lite/issues/2759):\n // Correct the signal for facet of concat of facet_column\n columns: {field: vgField(this.facet.column, {prefix: 'distinct'})}\n }\n }\n }\n : {}),\n ...super.assembleGroup(signals)\n };\n }\n return super.assembleGroup(signals);\n }\n\n /**\n * Aggregate cardinality for calculating size\n */\n private getCardinalityAggregateForChild() {\n const fields: string[] = [];\n const ops: AggregateOp[] = [];\n const as: string[] = [];\n\n if (this.child instanceof FacetModel) {\n if (this.child.channelHasField('column')) {\n const field = vgField(this.child.facet.column);\n fields.push(field);\n ops.push('distinct');\n as.push(`distinct_${field}`);\n }\n } else {\n for (const channel of POSITION_SCALE_CHANNELS) {\n const childScaleComponent = this.child.component.scales[channel];\n if (childScaleComponent && !childScaleComponent.merged) {\n const type = childScaleComponent.get('type');\n const range = childScaleComponent.get('range');\n\n if (hasDiscreteDomain(type) && isVgRangeStep(range)) {\n const domain = assembleDomain(this.child, channel);\n const field = getFieldFromDomain(domain);\n if (field) {\n fields.push(field);\n ops.push('distinct');\n as.push(`distinct_${field}`);\n } else {\n log.warn(log.message.unknownField(channel));\n }\n }\n }\n }\n }\n return {fields, ops, as};\n }\n\n private assembleFacet() {\n const {name, data} = this.component.data.facetRoot;\n const {row, column} = this.facet;\n const {fields, ops, as} = this.getCardinalityAggregateForChild();\n const groupby: string[] = [];\n\n for (const channel of FACET_CHANNELS) {\n const fieldDef = this.facet[channel];\n if (fieldDef) {\n groupby.push(vgField(fieldDef));\n\n const {bin, sort} = fieldDef;\n\n if (isBinning(bin)) {\n groupby.push(vgField(fieldDef, {binSuffix: 'end'}));\n }\n\n if (isSortField(sort)) {\n const {field, op = DEFAULT_SORT_OP} = sort;\n const outputName = facetSortFieldName(fieldDef, sort);\n if (row && column) {\n // For crossed facet, use pre-calculate field as it requires a different groupby\n // For each calculated field, apply max and assign them to the same name as\n // all values of the same group should be the same anyway.\n fields.push(outputName);\n ops.push('max');\n as.push(outputName);\n } else {\n fields.push(field);\n ops.push(op);\n as.push(outputName);\n }\n } else if (isArray(sort)) {\n const outputName = sortArrayIndexField(fieldDef, channel);\n fields.push(outputName);\n ops.push('max');\n as.push(outputName);\n }\n }\n }\n\n const cross = !!row && !!column;\n\n return {\n name,\n data,\n groupby,\n ...(cross || fields.length > 0\n ? {\n aggregate: {\n ...(cross ? {cross} : {}),\n ...(fields.length ? {fields, ops, as} : {})\n }\n }\n : {})\n };\n }\n\n private facetSortFields(channel: FacetChannel): string[] {\n const {facet} = this;\n const fieldDef = facet[channel];\n\n if (fieldDef) {\n if (isSortField(fieldDef.sort)) {\n return [facetSortFieldName(fieldDef, fieldDef.sort, {expr: 'datum'})];\n } else if (isArray(fieldDef.sort)) {\n return [sortArrayIndexField(fieldDef, channel, {expr: 'datum'})];\n }\n return [vgField(fieldDef, {expr: 'datum'})];\n }\n return [];\n }\n\n private facetSortOrder(channel: FacetChannel): SortOrder[] {\n const {facet} = this;\n const fieldDef = facet[channel];\n if (fieldDef) {\n const {sort} = fieldDef;\n const order = (isSortField(sort) ? sort.order : !isArray(sort) && sort) || 'ascending';\n return [order];\n }\n return [];\n }\n\n private assembleLabelTitle() {\n const {facet, config} = this;\n if (facet.facet) {\n // Facet always uses title to display labels\n return assembleLabelTitle(facet.facet, 'facet', config);\n }\n\n const ORTHOGONAL_ORIENT = {\n row: ['top', 'bottom'],\n column: ['left', 'right']\n };\n\n for (const channel of HEADER_CHANNELS) {\n if (facet[channel]) {\n const labelOrient = getHeaderProperty('labelOrient', facet[channel]?.header, config, channel);\n if (ORTHOGONAL_ORIENT[channel].includes(labelOrient)) {\n // Row/Column with orthogonal labelOrient must use title to display labels\n return assembleLabelTitle(facet[channel], channel, config);\n }\n }\n }\n return undefined;\n }\n\n public assembleMarks(): VgMarkGroup[] {\n const {child} = this;\n\n // If we facet by two dimensions, we need to add a cross operator to the aggregation\n // so that we create all groups\n const facetRoot = this.component.data.facetRoot;\n const data = assembleFacetData(facetRoot);\n\n const encodeEntry = child.assembleGroupEncodeEntry(false);\n\n const title = this.assembleLabelTitle() || child.assembleTitle();\n const style = child.assembleGroupStyle();\n\n const markGroup = {\n name: this.getName('cell'),\n type: 'group',\n ...(title ? {title} : {}),\n ...(style ? {style} : {}),\n from: {\n facet: this.assembleFacet()\n },\n // TODO: move this to after data\n sort: {\n field: FACET_CHANNELS.map(c => this.facetSortFields(c)).flat(),\n order: FACET_CHANNELS.map(c => this.facetSortOrder(c)).flat()\n },\n ...(data.length > 0 ? {data: data} : {}),\n ...(encodeEntry ? {encode: {update: encodeEntry}} : {}),\n ...child.assembleGroup(assembleFacetSignals(this, []))\n };\n\n return [markGroup];\n }\n\n protected getMapping() {\n return this.facet;\n }\n}\n","import {AncestorParse, DataComponent} from '.';\nimport {\n Data,\n isGenerator,\n isGraticuleGenerator,\n isInlineData,\n isNamedData,\n isSequenceGenerator,\n isUrlData,\n DataSourceType,\n ParseValue\n} from '../../data';\nimport * as log from '../../log';\nimport {\n isAggregate,\n isBin,\n isCalculate,\n isDensity,\n isFilter,\n isFlatten,\n isFold,\n isImpute,\n isJoinAggregate,\n isLoess,\n isLookup,\n isPivot,\n isQuantile,\n isRegression,\n isSample,\n isStack,\n isTimeUnit,\n isWindow\n} from '../../transform';\nimport {deepEqual, mergeDeep} from '../../util';\nimport {isFacetModel, isLayerModel, isUnitModel, Model} from '../model';\nimport {requiresSelectionId} from '../selection';\nimport {materializeSelections} from '../selection/parse';\nimport {AggregateNode} from './aggregate';\nimport {BinNode} from './bin';\nimport {CalculateNode} from './calculate';\nimport {DataFlowNode, OutputNode} from './dataflow';\nimport {DensityTransformNode} from './density';\nimport {FacetNode} from './facet';\nimport {FilterNode} from './filter';\nimport {FilterInvalidNode} from './filterinvalid';\nimport {FlattenTransformNode} from './flatten';\nimport {FoldTransformNode} from './fold';\nimport {\n getImplicitFromEncoding,\n getImplicitFromFilterTransform,\n getImplicitFromSelection,\n ParseNode\n} from './formatparse';\nimport {GeoJSONNode} from './geojson';\nimport {GeoPointNode} from './geopoint';\nimport {GraticuleNode} from './graticule';\nimport {IdentifierNode} from './identifier';\nimport {ImputeNode} from './impute';\nimport {JoinAggregateTransformNode} from './joinaggregate';\nimport {makeJoinAggregateFromFacet} from './joinaggregatefacet';\nimport {LoessTransformNode} from './loess';\nimport {LookupNode} from './lookup';\nimport {PivotTransformNode} from './pivot';\nimport {QuantileTransformNode} from './quantile';\nimport {RegressionTransformNode} from './regression';\nimport {SampleTransformNode} from './sample';\nimport {SequenceNode} from './sequence';\nimport {SourceNode} from './source';\nimport {StackNode} from './stack';\nimport {TimeUnitNode} from './timeunit';\nimport {WindowTransformNode} from './window';\n\nexport function findSource(data: Data, sources: SourceNode[]) {\n for (const other of sources) {\n const otherData = other.data;\n\n // if both datasets have a name defined, we cannot merge\n if (data.name && other.hasName() && data.name !== other.dataName) {\n continue;\n }\n\n const formatMesh = data['format']?.mesh;\n const otherFeature = otherData.format?.feature;\n\n // feature and mesh are mutually exclusive\n if (formatMesh && otherFeature) {\n continue;\n }\n\n // we have to extract the same feature or mesh\n const formatFeature = data['format']?.feature;\n if ((formatFeature || otherFeature) && formatFeature !== otherFeature) {\n continue;\n }\n\n const otherMesh = otherData.format?.mesh;\n if ((formatMesh || otherMesh) && formatMesh !== otherMesh) {\n continue;\n }\n\n if (isInlineData(data) && isInlineData(otherData)) {\n if (deepEqual(data.values, otherData.values)) {\n return other;\n }\n } else if (isUrlData(data) && isUrlData(otherData)) {\n if (data.url === otherData.url) {\n return other;\n }\n } else if (isNamedData(data)) {\n if (data.name === other.dataName) {\n return other;\n }\n }\n }\n return null;\n}\n\nfunction parseRoot(model: Model, sources: SourceNode[]): DataFlowNode {\n if (model.data || !model.parent) {\n // if the model defines a data source or is the root, create a source node\n\n if (model.data === null) {\n // data: null means we should ignore the parent's data so we just create a new data source\n const source = new SourceNode({values: []});\n sources.push(source);\n return source;\n }\n\n const existingSource = findSource(model.data, sources);\n\n if (existingSource) {\n if (!isGenerator(model.data)) {\n existingSource.data.format = mergeDeep({}, model.data.format, existingSource.data.format);\n }\n\n // if the new source has a name but the existing one does not, we can set it\n if (!existingSource.hasName() && model.data.name) {\n existingSource.dataName = model.data.name;\n }\n\n return existingSource;\n } else {\n const source = new SourceNode(model.data);\n sources.push(source);\n return source;\n }\n } else {\n // If we don't have a source defined (overriding parent's data), use the parent's facet root or main.\n return model.parent.component.data.facetRoot\n ? model.parent.component.data.facetRoot\n : model.parent.component.data.main;\n }\n}\n\n/**\n * Parses a transform array into a chain of connected dataflow nodes.\n */\nexport function parseTransformArray(head: DataFlowNode, model: Model, ancestorParse: AncestorParse): DataFlowNode {\n let lookupCounter = 0;\n\n for (const t of model.transforms) {\n let derivedType: ParseValue = undefined;\n let transformNode: DataFlowNode;\n\n if (isCalculate(t)) {\n transformNode = head = new CalculateNode(head, t);\n derivedType = 'derived';\n } else if (isFilter(t)) {\n const implicit = getImplicitFromFilterTransform(t);\n transformNode = head = ParseNode.makeWithAncestors(head, {}, implicit, ancestorParse) ?? head;\n\n head = new FilterNode(head, model, t.filter);\n } else if (isBin(t)) {\n transformNode = head = BinNode.makeFromTransform(head, t, model);\n derivedType = 'number';\n } else if (isTimeUnit(t)) {\n derivedType = 'date';\n const parsedAs = ancestorParse.getWithExplicit(t.field);\n // Create parse node because the input to time unit is always date.\n if (parsedAs.value === undefined) {\n head = new ParseNode(head, {[t.field]: derivedType});\n ancestorParse.set(t.field, derivedType, false);\n }\n transformNode = head = TimeUnitNode.makeFromTransform(head, t);\n } else if (isAggregate(t)) {\n transformNode = head = AggregateNode.makeFromTransform(head, t);\n derivedType = 'number';\n if (requiresSelectionId(model)) {\n head = new IdentifierNode(head);\n }\n } else if (isLookup(t)) {\n transformNode = head = LookupNode.make(head, model, t, lookupCounter++);\n derivedType = 'derived';\n } else if (isWindow(t)) {\n transformNode = head = new WindowTransformNode(head, t);\n derivedType = 'number';\n } else if (isJoinAggregate(t)) {\n transformNode = head = new JoinAggregateTransformNode(head, t);\n derivedType = 'number';\n } else if (isStack(t)) {\n transformNode = head = StackNode.makeFromTransform(head, t);\n derivedType = 'derived';\n } else if (isFold(t)) {\n transformNode = head = new FoldTransformNode(head, t);\n derivedType = 'derived';\n } else if (isFlatten(t)) {\n transformNode = head = new FlattenTransformNode(head, t);\n derivedType = 'derived';\n } else if (isPivot(t)) {\n transformNode = head = new PivotTransformNode(head, t);\n derivedType = 'derived';\n } else if (isSample(t)) {\n head = new SampleTransformNode(head, t);\n } else if (isImpute(t)) {\n transformNode = head = ImputeNode.makeFromTransform(head, t);\n derivedType = 'derived';\n } else if (isDensity(t)) {\n transformNode = head = new DensityTransformNode(head, t);\n derivedType = 'derived';\n } else if (isQuantile(t)) {\n transformNode = head = new QuantileTransformNode(head, t);\n derivedType = 'derived';\n } else if (isRegression(t)) {\n transformNode = head = new RegressionTransformNode(head, t);\n derivedType = 'derived';\n } else if (isLoess(t)) {\n transformNode = head = new LoessTransformNode(head, t);\n derivedType = 'derived';\n } else {\n log.warn(log.message.invalidTransformIgnored(t));\n continue;\n }\n\n if (transformNode && derivedType !== undefined) {\n for (const field of transformNode.producedFields() ?? []) {\n ancestorParse.set(field, derivedType, false);\n }\n }\n }\n\n return head;\n}\n\n/*\nDescription of the dataflow (http://asciiflow.com/):\n +--------+\n | Source |\n +---+----+\n |\n v\n FormatParse\n (explicit)\n |\n v\n Transforms\n(Filter, Calculate, Binning, TimeUnit, Aggregate, Window, ...)\n |\n v\n FormatParse\n (implicit)\n |\n v\n Binning (in `encoding`)\n |\n v\n Timeunit (in `encoding`)\n |\n v\nFormula From Sort Array\n |\n v\n +--+--+\n | Raw |\n +-----+\n |\n v\n Aggregate (in `encoding`)\n |\n v\n Stack (in `encoding`)\n |\n v\n Invalid Filter\n |\n v\n +----------+\n | Main |\n +----------+\n |\n v\n +-------+\n | Facet |----> \"column\", \"column-layout\", and \"row\"\n +-------+\n |\n v\n ...Child data...\n*/\n\nexport function parseData(model: Model): DataComponent {\n let head = parseRoot(model, model.component.data.sources);\n\n const {outputNodes, outputNodeRefCounts} = model.component.data;\n const data = model.data;\n\n const newData = data && (isGenerator(data) || isUrlData(data) || isInlineData(data));\n const ancestorParse =\n !newData && model.parent ? model.parent.component.data.ancestorParse.clone() : new AncestorParse();\n\n if (isGenerator(data)) {\n // insert generator transform\n if (isSequenceGenerator(data)) {\n head = new SequenceNode(head, data.sequence);\n } else if (isGraticuleGenerator(data)) {\n head = new GraticuleNode(head, data.graticule);\n }\n // no parsing necessary for generator\n ancestorParse.parseNothing = true;\n } else if (data?.format?.parse === null) {\n // format.parse: null means disable parsing\n ancestorParse.parseNothing = true;\n }\n\n head = ParseNode.makeExplicit(head, model, ancestorParse) ?? head;\n\n // Default discrete selections require an identifer transform to\n // uniquely identify data points. Add this transform at the head of\n // the pipeline such that the identifier field is available for all\n // subsequent datasets. During optimization, we will remove this\n // transform if it proves to be unnecessary. Additional identifier\n // transforms will be necessary when new tuples are constructed\n // (e.g., post-aggregation).\n head = new IdentifierNode(head);\n\n // HACK: This is equivalent for merging bin extent for union scale.\n // FIXME(https://github.com/vega/vega-lite/issues/2270): Correctly merge extent / bin node for shared bin scale\n const parentIsLayer = model.parent && isLayerModel(model.parent);\n if (isUnitModel(model) || isFacetModel(model)) {\n if (parentIsLayer) {\n head = BinNode.makeFromEncoding(head, model) ?? head;\n }\n }\n\n if (model.transforms.length > 0) {\n head = parseTransformArray(head, model, ancestorParse);\n }\n\n // create parse nodes for fields that need to be parsed (or flattened) implicitly\n const implicitSelection = getImplicitFromSelection(model);\n const implicitEncoding = getImplicitFromEncoding(model);\n head = ParseNode.makeWithAncestors(head, {}, {...implicitSelection, ...implicitEncoding}, ancestorParse) ?? head;\n\n if (isUnitModel(model)) {\n head = GeoJSONNode.parseAll(head, model);\n head = GeoPointNode.parseAll(head, model);\n }\n\n if (isUnitModel(model) || isFacetModel(model)) {\n if (!parentIsLayer) {\n head = BinNode.makeFromEncoding(head, model) ?? head;\n }\n\n head = TimeUnitNode.makeFromEncoding(head, model) ?? head;\n head = CalculateNode.parseAllForSortIndex(head, model);\n }\n\n // add an output node pre aggregation\n const rawName = model.getDataName(DataSourceType.Raw);\n const raw = new OutputNode(head, rawName, DataSourceType.Raw, outputNodeRefCounts);\n outputNodes[rawName] = raw;\n head = raw;\n\n if (isUnitModel(model)) {\n const agg = AggregateNode.makeFromEncoding(head, model);\n if (agg) {\n head = agg;\n\n if (requiresSelectionId(model)) {\n head = new IdentifierNode(head);\n }\n }\n head = ImputeNode.makeFromEncoding(head, model) ?? head;\n head = StackNode.makeFromEncoding(head, model) ?? head;\n }\n\n if (isUnitModel(model)) {\n head = FilterInvalidNode.make(head, model) ?? head;\n }\n\n // output node for marks\n const mainName = model.getDataName(DataSourceType.Main);\n const main = new OutputNode(head, mainName, DataSourceType.Main, outputNodeRefCounts);\n outputNodes[mainName] = main;\n head = main;\n\n if (isUnitModel(model)) {\n materializeSelections(model, main);\n }\n\n // add facet marker\n let facetRoot = null;\n if (isFacetModel(model)) {\n const facetName = model.getName('facet');\n\n // Derive new aggregate for facet's sort field\n // augment data source with new fields for crossed facet\n head = makeJoinAggregateFromFacet(head, model.facet) ?? head;\n\n facetRoot = new FacetNode(head, model, facetName, main.getSource());\n outputNodes[facetName] = facetRoot;\n }\n\n return {\n ...model.component.data,\n outputNodes,\n outputNodeRefCounts,\n raw,\n main,\n facetRoot,\n ancestorParse\n };\n}\n","import {vgField} from '../../channeldef';\nimport {DEFAULT_SORT_OP, isSortField} from '../../sort';\nimport {FacetMapping} from '../../spec/facet';\nimport {facetSortFieldName} from '../facet';\nimport {DataFlowNode} from './dataflow';\nimport {JoinAggregateTransformNode} from './joinaggregate';\n\nexport function makeJoinAggregateFromFacet(\n parent: DataFlowNode,\n facet: FacetMapping\n): JoinAggregateTransformNode {\n const {row, column} = facet;\n if (row && column) {\n let newParent = null;\n // only need to make one for crossed facet\n for (const fieldDef of [row, column]) {\n if (isSortField(fieldDef.sort)) {\n const {field, op = DEFAULT_SORT_OP} = fieldDef.sort;\n parent = newParent = new JoinAggregateTransformNode(parent, {\n joinaggregate: [\n {\n op,\n field,\n as: facetSortFieldName(fieldDef, fieldDef.sort, {forAs: true})\n }\n ],\n groupby: [vgField(fieldDef)]\n });\n }\n }\n return newParent;\n }\n return null;\n}\n","import {NewSignal, SignalRef} from 'vega';\nimport {Config} from '../config';\nimport * as log from '../log';\nimport {isHConcatSpec, isVConcatSpec, NormalizedConcatSpec, NormalizedSpec} from '../spec';\nimport {keys} from '../util';\nimport {VgData, VgLayout} from '../vega.schema';\nimport {buildModel} from './buildmodel';\nimport {parseData} from './data/parse';\nimport {assembleLayoutSignals} from './layoutsize/assemble';\nimport {parseConcatLayoutSize} from './layoutsize/parse';\nimport {Model} from './model';\n\nexport class ConcatModel extends Model {\n public readonly children: Model[];\n\n constructor(spec: NormalizedConcatSpec, parent: Model, parentGivenName: string, config: Config) {\n super(spec, 'concat', parent, parentGivenName, config, spec.resolve);\n\n if (spec.resolve?.axis?.x === 'shared' || spec.resolve?.axis?.y === 'shared') {\n log.warn(log.message.CONCAT_CANNOT_SHARE_AXIS);\n }\n\n this.children = this.getChildren(spec).map((child, i) => {\n return buildModel(child, this, this.getName(`concat_${i}`), undefined, config);\n });\n }\n\n public parseData() {\n this.component.data = parseData(this);\n for (const child of this.children) {\n child.parseData();\n }\n }\n\n public parseSelections() {\n // Merge selections up the hierarchy so that they may be referenced\n // across unit specs. Persist their definitions within each child\n // to assemble signals which remain within output Vega unit groups.\n this.component.selection = {};\n for (const child of this.children) {\n child.parseSelections();\n for (const key of keys(child.component.selection)) {\n this.component.selection[key] = child.component.selection[key];\n }\n }\n }\n\n public parseMarkGroup() {\n for (const child of this.children) {\n child.parseMarkGroup();\n }\n }\n\n public parseAxesAndHeaders() {\n for (const child of this.children) {\n child.parseAxesAndHeaders();\n }\n\n // TODO(#2415): support shared axes\n }\n\n private getChildren(spec: NormalizedConcatSpec): NormalizedSpec[] {\n if (isVConcatSpec(spec)) {\n return spec.vconcat;\n } else if (isHConcatSpec(spec)) {\n return spec.hconcat;\n }\n return spec.concat;\n }\n\n public parseLayoutSize() {\n parseConcatLayoutSize(this);\n }\n\n public parseAxisGroup(): void {\n return null;\n }\n\n public assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[] {\n return this.children.reduce((sg, child) => child.assembleSelectionTopLevelSignals(sg), signals);\n }\n\n public assembleSignals(): NewSignal[] {\n this.children.forEach(child => child.assembleSignals());\n return [];\n }\n\n public assembleLayoutSignals(): NewSignal[] {\n const layoutSignals = assembleLayoutSignals(this);\n\n for (const child of this.children) {\n layoutSignals.push(...child.assembleLayoutSignals());\n }\n\n return layoutSignals;\n }\n\n public assembleSelectionData(data: readonly VgData[]): readonly VgData[] {\n return this.children.reduce((db, child) => child.assembleSelectionData(db), data);\n }\n\n public assembleMarks(): any[] {\n // only children have marks\n return this.children.map(child => {\n const title = child.assembleTitle();\n const style = child.assembleGroupStyle();\n const encodeEntry = child.assembleGroupEncodeEntry(false);\n\n return {\n type: 'group',\n name: child.getName('group'),\n ...(title ? {title} : {}),\n ...(style ? {style} : {}),\n ...(encodeEntry ? {encode: {update: encodeEntry}} : {}),\n ...child.assembleGroup()\n };\n });\n }\n\n public assembleGroupStyle(): string | string[] {\n return undefined;\n }\n\n protected assembleDefaultLayout(): VgLayout {\n const columns = this.layout.columns;\n return {\n ...(columns != null ? {columns: columns} : {}),\n bounds: 'full',\n // Use align each so it can work with multiple plots with different size\n align: 'each'\n };\n }\n}\n","import {Axis as VgAxis, SignalRef, Text} from 'vega';\nimport {\n AxisInternal,\n AxisPart,\n AxisPropsWithCondition,\n COMMON_AXIS_PROPERTIES_INDEX,\n ConditionalAxisProp\n} from '../../axis';\nimport {FieldDefBase} from '../../channeldef';\nimport {duplicate, Flag, keys} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {Split} from '../split';\n\nfunction isFalseOrNull(v: any) {\n return v === false || v === null;\n}\n\nexport type AxisComponentProps = Omit &\n Omit, 'title'> & {\n title: Text | FieldDefBase[] | SignalRef;\n labelExpr: string;\n disable: boolean;\n };\n\nconst AXIS_COMPONENT_PROPERTIES_INDEX: Flag = {\n disable: 1,\n gridScale: 1,\n scale: 1,\n ...COMMON_AXIS_PROPERTIES_INDEX,\n labelExpr: 1,\n encode: 1\n};\n\nexport const AXIS_COMPONENT_PROPERTIES = keys(AXIS_COMPONENT_PROPERTIES_INDEX);\n\nexport class AxisComponent extends Split {\n constructor(\n public readonly explicit: Partial = {},\n public readonly implicit: Partial = {},\n public mainExtracted = false\n ) {\n super();\n }\n\n public clone() {\n return new AxisComponent(duplicate(this.explicit), duplicate(this.implicit), this.mainExtracted);\n }\n\n public hasAxisPart(part: AxisPart) {\n // FIXME(https://github.com/vega/vega-lite/issues/2552) this method can be wrong if users use a Vega theme.\n\n if (part === 'axis') {\n // always has the axis container part\n return true;\n }\n\n if (part === 'grid' || part === 'title') {\n return !!this.get(part);\n }\n // Other parts are enabled by default, so they should not be false or null.\n return !isFalseOrNull(this.get(part));\n }\n\n public hasOrientSignalRef() {\n return isSignalRef(this.explicit.orient);\n }\n}\n\nexport interface AxisComponentIndex {\n x?: AxisComponent[];\n y?: AxisComponent[];\n}\n\nexport interface AxisInternalIndex {\n x?: AxisInternal;\n y?: AxisInternal;\n}\n","import {AxisEncode as VgAxisEncode, AxisOrient, SignalRef} from 'vega';\nimport {Axis, AXIS_PARTS, isAxisProperty, isConditionalAxisValue} from '../../axis';\nimport {PositionScaleChannel, POSITION_SCALE_CHANNELS} from '../../channel';\nimport {getFieldOrDatumDef, PositionDatumDef, PositionFieldDef} from '../../channeldef';\nimport {getFirstDefined, isEmpty, keys, normalizeAngle} from '../../util';\nimport {isSignalRef} from '../../vega.schema';\nimport {mergeTitleComponent} from '../common';\nimport {guideEncodeEntry} from '../guide';\nimport {LayerModel} from '../layer';\nimport {parseGuideResolve} from '../resolve';\nimport {defaultTieBreaker, Explicit, mergeValuesWithExplicit} from '../split';\nimport {UnitModel} from '../unit';\nimport {AxisComponent, AxisComponentIndex, AxisComponentProps, AXIS_COMPONENT_PROPERTIES} from './component';\nimport {getAxisConfig, getAxisConfigs} from './config';\nimport * as encode from './encode';\nimport {AxisRuleParams, axisRules, defaultOrient, getFieldDefTitle, getLabelAngle} from './properties';\n\nexport function parseUnitAxes(model: UnitModel): AxisComponentIndex {\n return POSITION_SCALE_CHANNELS.reduce((axis, channel) => {\n if (model.component.scales[channel]) {\n axis[channel] = [parseAxis(channel, model)];\n }\n return axis;\n }, {} as AxisComponentIndex);\n}\n\nconst OPPOSITE_ORIENT: Record = {\n bottom: 'top',\n top: 'bottom',\n left: 'right',\n right: 'left'\n};\n\nexport function parseLayerAxes(model: LayerModel) {\n const {axes, resolve} = model.component;\n const axisCount: Record = {top: 0, bottom: 0, right: 0, left: 0};\n\n for (const child of model.children) {\n child.parseAxesAndHeaders();\n\n for (const channel of keys(child.component.axes)) {\n resolve.axis[channel] = parseGuideResolve(model.component.resolve, channel);\n if (resolve.axis[channel] === 'shared') {\n // If the resolve says shared (and has not been overridden)\n // We will try to merge and see if there is a conflict\n\n axes[channel] = mergeAxisComponents(axes[channel], child.component.axes[channel]);\n\n if (!axes[channel]) {\n // If merge returns nothing, there is a conflict so we cannot make the axis shared.\n // Thus, mark axis as independent and remove the axis component.\n resolve.axis[channel] = 'independent';\n delete axes[channel];\n }\n }\n }\n }\n\n // Move axes to layer's axis component and merge shared axes\n for (const channel of POSITION_SCALE_CHANNELS) {\n for (const child of model.children) {\n if (!child.component.axes[channel]) {\n // skip if the child does not have a particular axis\n continue;\n }\n\n if (resolve.axis[channel] === 'independent') {\n // If axes are independent, concat the axisComponent array.\n axes[channel] = (axes[channel] ?? []).concat(child.component.axes[channel]);\n\n // Automatically adjust orient\n for (const axisComponent of child.component.axes[channel]) {\n const {value: orient, explicit} = axisComponent.getWithExplicit('orient');\n if (isSignalRef(orient)) {\n continue;\n }\n\n if (axisCount[orient] > 0 && !explicit) {\n // Change axis orient if the number do not match\n const oppositeOrient = OPPOSITE_ORIENT[orient];\n if (axisCount[orient] > axisCount[oppositeOrient]) {\n axisComponent.set('orient', oppositeOrient, false);\n }\n }\n axisCount[orient]++;\n\n // TODO(https://github.com/vega/vega-lite/issues/2634): automatically add extra offset?\n }\n }\n\n // After merging, make sure to remove axes from child\n delete child.component.axes[channel];\n }\n\n // Suppress grid lines for dual axis charts (https://github.com/vega/vega-lite/issues/4676)\n if (resolve.axis[channel] === 'independent' && axes[channel] && axes[channel].length > 1) {\n for (const axisCmpt of axes[channel]) {\n if (!!axisCmpt.get('grid') && !axisCmpt.explicit.grid) {\n axisCmpt.implicit.grid = false;\n }\n }\n }\n }\n}\n\nfunction mergeAxisComponents(\n mergedAxisCmpts: AxisComponent[],\n childAxisCmpts: readonly AxisComponent[]\n): AxisComponent[] {\n if (mergedAxisCmpts) {\n // FIXME: this is a bit wrong once we support multiple axes\n if (mergedAxisCmpts.length !== childAxisCmpts.length) {\n return undefined; // Cannot merge axis component with different number of axes.\n }\n const length = mergedAxisCmpts.length;\n for (let i = 0; i < length; i++) {\n const merged = mergedAxisCmpts[i];\n const child = childAxisCmpts[i];\n\n if (!!merged !== !!child) {\n return undefined;\n } else if (merged && child) {\n const mergedOrient = merged.getWithExplicit('orient');\n const childOrient = child.getWithExplicit('orient');\n\n if (mergedOrient.explicit && childOrient.explicit && mergedOrient.value !== childOrient.value) {\n // TODO: throw warning if resolve is explicit (We don't have info about explicit/implicit resolve yet.)\n\n // Cannot merge due to inconsistent orient\n return undefined;\n } else {\n mergedAxisCmpts[i] = mergeAxisComponent(merged, child);\n }\n }\n }\n } else {\n // For first one, return a copy of the child\n return childAxisCmpts.map(axisComponent => axisComponent.clone());\n }\n return mergedAxisCmpts;\n}\n\nfunction mergeAxisComponent(merged: AxisComponent, child: AxisComponent): AxisComponent {\n for (const prop of AXIS_COMPONENT_PROPERTIES) {\n const mergedValueWithExplicit = mergeValuesWithExplicit(\n merged.getWithExplicit(prop),\n child.getWithExplicit(prop),\n prop,\n 'axis',\n\n // Tie breaker function\n (v1: Explicit, v2: Explicit) => {\n switch (prop) {\n case 'title':\n return mergeTitleComponent(v1, v2);\n case 'gridScale':\n return {\n explicit: v1.explicit, // keep the old explicit\n value: getFirstDefined(v1.value, v2.value)\n };\n }\n return defaultTieBreaker(v1, v2, prop, 'axis');\n }\n );\n merged.setWithExplicit(prop, mergedValueWithExplicit);\n }\n return merged;\n}\n\nfunction isExplicit(\n value: T,\n property: keyof AxisComponentProps,\n axis: Axis,\n model: UnitModel,\n channel: PositionScaleChannel\n) {\n if (property === 'disable') {\n return axis !== undefined; // if axis is specified or null/false, then its enable/disable state is explicit\n }\n\n axis = axis || {};\n\n switch (property) {\n case 'titleAngle':\n case 'labelAngle':\n return value === (isSignalRef(axis.labelAngle) ? axis.labelAngle : normalizeAngle(axis.labelAngle));\n case 'values':\n return !!axis.values;\n // specified axis.values is already respected, but may get transformed.\n case 'encode':\n // both VL axis.encoding and axis.labelAngle affect VG axis.encode\n return !!axis.encoding || !!axis.labelAngle;\n case 'title':\n // title can be explicit if fieldDef.title is set\n if (value === getFieldDefTitle(model, channel)) {\n return true;\n }\n }\n // Otherwise, things are explicit if the returned value matches the specified property\n return value === axis[property];\n}\n\n/**\n * Properties to always include values from config\n */\nconst propsToAlwaysIncludeConfig = new Set([\n 'grid', // Grid is an exception because we need to set grid = true to generate another grid axis\n 'translate', // translate has dependent logic for bar's bin position and it's 0.5 by default in Vega. If a config overrides this value, we need to know.\n // the rest are not axis configs in Vega, but are in VL, so we need to set too.\n 'format',\n 'formatType',\n 'orient',\n 'labelExpr',\n 'tickCount',\n 'position',\n 'tickMinStep'\n]);\n\nfunction parseAxis(channel: PositionScaleChannel, model: UnitModel): AxisComponent {\n let axis = model.axis(channel);\n\n const axisComponent = new AxisComponent();\n\n const fieldOrDatumDef = getFieldOrDatumDef(model.encoding[channel]) as\n | PositionFieldDef\n | PositionDatumDef;\n\n const {mark, config} = model;\n\n const orient =\n axis?.orient ||\n config[channel === 'x' ? 'axisX' : 'axisY']?.orient ||\n config.axis?.orient ||\n defaultOrient(channel);\n\n const scaleType = model.getScaleComponent(channel).get('type');\n\n const axisConfigs = getAxisConfigs(channel, scaleType, orient, model.config);\n\n const disable =\n axis !== undefined ? !axis : getAxisConfig('disable', config.style, axis?.style, axisConfigs).configValue;\n axisComponent.set('disable', disable, axis !== undefined);\n if (disable) {\n return axisComponent;\n }\n\n axis = axis || {};\n\n const labelAngle = getLabelAngle(fieldOrDatumDef, axis, channel, config.style, axisConfigs);\n\n const ruleParams: AxisRuleParams = {\n fieldOrDatumDef,\n axis,\n channel,\n model,\n scaleType,\n orient,\n labelAngle,\n mark,\n config\n };\n // 1.2. Add properties\n for (const property of AXIS_COMPONENT_PROPERTIES) {\n const value =\n property in axisRules ? axisRules[property](ruleParams) : isAxisProperty(property) ? axis[property] : undefined;\n\n const hasValue = value !== undefined;\n\n const explicit = isExplicit(value, property, axis, model, channel);\n\n if (hasValue && explicit) {\n axisComponent.set(property, value, explicit);\n } else {\n const {configValue = undefined, configFrom = undefined} =\n isAxisProperty(property) && property !== 'values'\n ? getAxisConfig(property, config.style, axis.style, axisConfigs)\n : {};\n const hasConfigValue = configValue !== undefined;\n\n if (hasValue && !hasConfigValue) {\n // only set property if it is explicitly set or has no config value (otherwise we will accidentally override config)\n axisComponent.set(property, value, explicit);\n } else if (\n // Cases need implicit values\n // 1. Axis config that aren't available in Vega\n !(configFrom === 'vgAxisConfig') ||\n // 2. Certain properties are always included (see `propsToAlwaysIncludeConfig`'s declaration for more details)\n (propsToAlwaysIncludeConfig.has(property) && hasConfigValue) ||\n // 3. Conditional axis values and signals\n isConditionalAxisValue(configValue) ||\n isSignalRef(configValue)\n ) {\n // If a config is specified and is conditional, copy conditional value from axis config\n axisComponent.set(property, configValue, false);\n }\n }\n }\n\n // 2) Add guide encode definition groups\n const axisEncoding = axis.encoding ?? {};\n const axisEncode = AXIS_PARTS.reduce((e: VgAxisEncode, part) => {\n if (!axisComponent.hasAxisPart(part)) {\n // No need to create encode for a disabled part.\n return e;\n }\n\n const axisEncodingPart = guideEncodeEntry(axisEncoding[part] ?? {}, model);\n\n const value = part === 'labels' ? encode.labels(model, channel, axisEncodingPart) : axisEncodingPart;\n\n if (value !== undefined && !isEmpty(value)) {\n e[part] = {update: value};\n }\n return e;\n }, {} as VgAxisEncode);\n\n // FIXME: By having encode as one property, we won't have fine grained encode merging.\n if (!isEmpty(axisEncode)) {\n axisComponent.set('encode', axisEncode, !!axis.encoding || axis.labelAngle !== undefined);\n }\n\n return axisComponent;\n}\n","import {getSecondaryRangeChannel, PositionScaleChannel} from '../../channel';\nimport {getFieldOrDatumDef} from '../../channeldef';\nimport {formatCustomType, isCustomFormatType} from '../format';\nimport {UnitModel} from '../unit';\n\nexport function labels(model: UnitModel, channel: PositionScaleChannel, specifiedLabelsSpec: any) {\n const {encoding, config} = model;\n\n const fieldOrDatumDef =\n getFieldOrDatumDef(encoding[channel]) ?? getFieldOrDatumDef(encoding[getSecondaryRangeChannel(channel)]);\n const axis = model.axis(channel) || {};\n const {format, formatType} = axis;\n\n if (isCustomFormatType(formatType)) {\n return {\n text: formatCustomType({\n fieldOrDatumDef,\n field: 'datum.value',\n format,\n formatType,\n config\n }),\n ...specifiedLabelsSpec\n };\n }\n\n return specifiedLabelsSpec;\n}\n","import {Orientation, SignalRef} from 'vega';\nimport {isBinned, isBinning} from '../../bin';\nimport {isContinuousFieldOrDatumDef, isFieldDef, isNumericDataDef, TypedFieldDef} from '../../channeldef';\nimport {Config} from '../../config';\nimport {Encoding, isAggregate} from '../../encoding';\nimport {replaceExprRef} from '../../expr';\nimport * as log from '../../log';\nimport {\n AREA,\n BAR,\n BAR_CORNER_RADIUS_INDEX as BAR_CORNER_RADIUS_END_INDEX,\n CIRCLE,\n IMAGE,\n LINE,\n Mark,\n MarkDef,\n POINT,\n RECT,\n RULE,\n SQUARE,\n TEXT,\n TICK\n} from '../../mark';\nimport {QUANTITATIVE, TEMPORAL} from '../../type';\nimport {contains, getFirstDefined} from '../../util';\nimport {getMarkConfig, getMarkPropOrConfig} from '../common';\n\nexport function initMarkdef(originalMarkDef: MarkDef, encoding: Encoding, config: Config) {\n // FIXME: markDef expects that exprRefs are replaced recursively but replaceExprRef only replaces the top level\n const markDef: MarkDef = replaceExprRef(originalMarkDef) as any;\n\n // set orient, which can be overridden by rules as sometimes the specified orient is invalid.\n const specifiedOrient = getMarkPropOrConfig('orient', markDef, config);\n markDef.orient = orient(markDef.type, encoding, specifiedOrient);\n if (specifiedOrient !== undefined && specifiedOrient !== markDef.orient) {\n log.warn(log.message.orientOverridden(markDef.orient, specifiedOrient));\n }\n\n if (markDef.type === 'bar' && markDef.orient) {\n const cornerRadiusEnd = getMarkPropOrConfig('cornerRadiusEnd', markDef, config);\n if (cornerRadiusEnd !== undefined) {\n const newProps =\n (markDef.orient === 'horizontal' && encoding.x2) || (markDef.orient === 'vertical' && encoding.y2)\n ? ['cornerRadius']\n : BAR_CORNER_RADIUS_END_INDEX[markDef.orient];\n\n for (const newProp of newProps) {\n markDef[newProp] = cornerRadiusEnd;\n }\n\n if (markDef.cornerRadiusEnd !== undefined) {\n delete markDef.cornerRadiusEnd; // no need to keep the original cap cornerRadius\n }\n }\n }\n\n // set opacity and filled if not specified in mark config\n const specifiedOpacity = getMarkPropOrConfig('opacity', markDef, config);\n if (specifiedOpacity === undefined) {\n markDef.opacity = opacity(markDef.type, encoding);\n }\n\n // set cursor, which should be pointer if href channel is present unless otherwise specified\n const specifiedCursor = getMarkPropOrConfig('cursor', markDef, config);\n if (specifiedCursor === undefined) {\n markDef.cursor = cursor(markDef, encoding, config);\n }\n\n return markDef;\n}\n\nfunction cursor(markDef: MarkDef, encoding: Encoding, config: Config) {\n if (encoding.href || markDef.href || getMarkPropOrConfig('href', markDef, config)) {\n return 'pointer';\n }\n return markDef.cursor;\n}\n\nfunction opacity(mark: Mark, encoding: Encoding) {\n if (contains([POINT, TICK, CIRCLE, SQUARE], mark)) {\n // point-based marks\n if (!isAggregate(encoding)) {\n return 0.7;\n }\n }\n return undefined;\n}\n\nexport function defaultFilled(markDef: MarkDef, config: Config, {graticule}: {graticule: boolean}) {\n if (graticule) {\n return false;\n }\n const filledConfig = getMarkConfig('filled', markDef, config);\n const mark = markDef.type;\n return getFirstDefined(filledConfig, mark !== POINT && mark !== LINE && mark !== RULE);\n}\n\nfunction orient(mark: Mark, encoding: Encoding, specifiedOrient: Orientation): Orientation {\n switch (mark) {\n case POINT:\n case CIRCLE:\n case SQUARE:\n case TEXT:\n case RECT:\n case IMAGE:\n // orient is meaningless for these marks.\n return undefined;\n }\n\n const {x, y, x2, y2} = encoding;\n\n switch (mark) {\n case BAR:\n if (isFieldDef(x) && (isBinned(x.bin) || (isFieldDef(y) && y.aggregate && !x.aggregate))) {\n return 'vertical';\n }\n if (isFieldDef(y) && (isBinned(y.bin) || (isFieldDef(x) && x.aggregate && !y.aggregate))) {\n return 'horizontal';\n }\n if (y2 || x2) {\n // Ranged bar does not always have clear orientation, so we allow overriding\n if (specifiedOrient) {\n return specifiedOrient;\n }\n\n // If y is range and x is non-range, non-bin Q, y is likely a prebinned field\n if (!x2) {\n if ((isFieldDef(x) && x.type === QUANTITATIVE && !isBinning(x.bin)) || isNumericDataDef(x)) {\n return 'horizontal';\n }\n }\n\n // If x is range and y is non-range, non-bin Q, x is likely a prebinned field\n if (!y2) {\n if ((isFieldDef(y) && y.type === QUANTITATIVE && !isBinning(y.bin)) || isNumericDataDef(y)) {\n return 'vertical';\n }\n }\n }\n\n // falls through\n case RULE:\n // return undefined for line segment rule and bar with both axis ranged\n // we have to ignore the case that the data are already binned\n if (x2 && !(isFieldDef(x) && isBinned(x.bin)) && y2 && !(isFieldDef(y) && isBinned(y.bin))) {\n return undefined;\n }\n\n // falls through\n case AREA:\n // If there are range for both x and y, y (vertical) has higher precedence.\n if (y2) {\n if (isFieldDef(y) && isBinned(y.bin)) {\n return 'horizontal';\n } else {\n return 'vertical';\n }\n } else if (x2) {\n if (isFieldDef(x) && isBinned(x.bin)) {\n return 'vertical';\n } else {\n return 'horizontal';\n }\n } else if (mark === RULE) {\n if (x && !y) {\n return 'vertical';\n } else if (y && !x) {\n return 'horizontal';\n }\n }\n\n // falls through\n case LINE:\n case TICK: {\n // Tick is opposite to bar, line, area and never have ranged mark.\n const xIsContinuous = isContinuousFieldOrDatumDef(x);\n const yIsContinuous = isContinuousFieldOrDatumDef(y);\n\n if (specifiedOrient) {\n return specifiedOrient;\n } else if (xIsContinuous && !yIsContinuous) {\n return mark !== 'tick' ? 'horizontal' : 'vertical';\n } else if (!xIsContinuous && yIsContinuous) {\n return mark !== 'tick' ? 'vertical' : 'horizontal';\n } else if (xIsContinuous && yIsContinuous) {\n const xDef = x as TypedFieldDef; // we can cast here since they are surely fieldDef\n const yDef = y as TypedFieldDef;\n\n const xIsTemporal = xDef.type === TEMPORAL;\n const yIsTemporal = yDef.type === TEMPORAL;\n\n // temporal without timeUnit is considered continuous, but better serves as dimension\n if (xIsTemporal && !yIsTemporal) {\n return mark !== 'tick' ? 'vertical' : 'horizontal';\n } else if (!xIsTemporal && yIsTemporal) {\n return mark !== 'tick' ? 'horizontal' : 'vertical';\n }\n\n if (!xDef.aggregate && yDef.aggregate) {\n return mark !== 'tick' ? 'vertical' : 'horizontal';\n } else if (xDef.aggregate && !yDef.aggregate) {\n return mark !== 'tick' ? 'horizontal' : 'vertical';\n }\n return 'vertical';\n } else {\n return undefined;\n }\n }\n }\n return 'vertical';\n}\n","import {Config} from '../../config';\nimport {VgEncodeEntry} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nfunction encodeEntry(model: UnitModel, fixedShape?: 'circle' | 'square') {\n const {config} = model;\n\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'include',\n orient: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n ...encode.nonPosition('size', model),\n ...encode.nonPosition('angle', model),\n ...shapeMixins(model, config, fixedShape)\n };\n}\n\nexport function shapeMixins(model: UnitModel, config: Config, fixedShape?: 'circle' | 'square'): VgEncodeEntry {\n if (fixedShape) {\n return {shape: {value: fixedShape}};\n }\n return encode.nonPosition('shape', model);\n}\n\nexport const point: MarkCompiler = {\n vgMark: 'symbol',\n encodeEntry: (model: UnitModel) => {\n return encodeEntry(model);\n }\n};\n\nexport const circle: MarkCompiler = {\n vgMark: 'symbol',\n encodeEntry: (model: UnitModel) => {\n return encodeEntry(model, 'circle');\n }\n};\n\nexport const square: MarkCompiler = {\n vgMark: 'symbol',\n encodeEntry: (model: UnitModel) => {\n return encodeEntry(model, 'square');\n }\n};\n","import {SignalRef} from 'vega';\nimport {Config} from '../../config';\nimport {Encoding} from '../../encoding';\nimport {MarkDef} from '../../mark';\nimport {getMarkPropOrConfig} from '../common';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const text: MarkCompiler = {\n vgMark: 'text',\n\n encodeEntry: (model: UnitModel) => {\n const {config, encoding} = model;\n\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'include',\n baseline: 'include',\n color: 'include',\n size: 'ignore',\n orient: 'ignore',\n theta: 'include'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n ...encode.text(model),\n ...encode.nonPosition('size', model, {\n vgChannel: 'fontSize' // VL's text size is fontSize\n }),\n ...encode.nonPosition('angle', model),\n ...encode.valueIfDefined('align', align(model.markDef, encoding, config)),\n ...encode.valueIfDefined('baseline', baseline(model.markDef, encoding, config)),\n ...encode.pointPosition('radius', model, {defaultPos: null}),\n ...encode.pointPosition('theta', model, {defaultPos: null})\n };\n }\n};\n\nfunction align(markDef: MarkDef, encoding: Encoding, config: Config) {\n const a = getMarkPropOrConfig('align', markDef, config);\n if (a === undefined) {\n return 'center';\n }\n // If there is a config, Vega-parser will process this already.\n return undefined;\n}\n\nfunction baseline(markDef: MarkDef, encoding: Encoding, config: Config) {\n const b = getMarkPropOrConfig('baseline', markDef, config);\n if (b === undefined) {\n return 'middle';\n }\n // If there is a config, Vega-parser will process this already.\n return undefined;\n}\n","import {SignalRef} from 'vega';\nimport {isNumber} from 'vega-util';\nimport {getViewConfigDiscreteStep} from '../../config';\nimport {isVgRangeStep} from '../../vega.schema';\nimport {getMarkPropOrConfig, signalOrValueRef} from '../common';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const tick: MarkCompiler = {\n vgMark: 'rect',\n\n encodeEntry: (model: UnitModel) => {\n const {config, markDef} = model;\n const orient = markDef.orient;\n\n const vgSizeChannel = orient === 'horizontal' ? 'width' : 'height';\n const vgThicknessChannel = orient === 'horizontal' ? 'height' : 'width';\n\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n\n ...encode.pointPosition('x', model, {defaultPos: 'mid', vgChannel: 'xc'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid', vgChannel: 'yc'}),\n\n // size / thickness => width / height\n ...encode.nonPosition('size', model, {\n defaultValue: defaultSize(model),\n vgChannel: vgSizeChannel\n }),\n [vgThicknessChannel]: signalOrValueRef(getMarkPropOrConfig('thickness', markDef, config))\n };\n }\n};\n\nfunction defaultSize(model: UnitModel): number | SignalRef {\n const {config, markDef} = model;\n const {orient} = markDef;\n\n const vgSizeChannel = orient === 'horizontal' ? 'width' : 'height';\n const scale = model.getScaleComponent(orient === 'horizontal' ? 'x' : 'y');\n\n const markPropOrConfig =\n getMarkPropOrConfig('size', markDef, config, {vgChannel: vgSizeChannel}) ?? config.tick.bandSize;\n\n if (markPropOrConfig !== undefined) {\n return markPropOrConfig;\n } else {\n const scaleRange = scale ? scale.get('range') : undefined;\n if (scaleRange && isVgRangeStep(scaleRange) && isNumber(scaleRange.step)) {\n return (scaleRange.step * 3) / 4;\n }\n\n const defaultViewStep = getViewConfigDiscreteStep(config.view, vgSizeChannel);\n\n return (defaultViewStep * 3) / 4;\n }\n}\n","import {isArray} from 'vega-util';\nimport {FieldRefOption, isFieldDef, isValueDef, vgField} from '../../channeldef';\nimport {DataSourceType} from '../../data';\nimport {isAggregate, pathGroupingFields} from '../../encoding';\nimport {AREA, BAR, isPathMark, LINE, Mark, TRAIL} from '../../mark';\nimport {isSortByEncoding, isSortField} from '../../sort';\nimport {contains, getFirstDefined, isNullOrFalse, keys, omit, pick} from '../../util';\nimport {VgCompare, VgEncodeEntry, VG_CORNERRADIUS_CHANNELS} from '../../vega.schema';\nimport {getMarkConfig, getMarkPropOrConfig, getStyles, signalOrValueRef, sortParams} from '../common';\nimport {UnitModel} from '../unit';\nimport {arc} from './arc';\nimport {area} from './area';\nimport {bar} from './bar';\nimport {MarkCompiler} from './base';\nimport {geoshape} from './geoshape';\nimport {image} from './image';\nimport {line, trail} from './line';\nimport {circle, point, square} from './point';\nimport {rect} from './rect';\nimport {rule} from './rule';\nimport {text} from './text';\nimport {tick} from './tick';\n\nconst markCompiler: Record = {\n arc,\n area,\n bar,\n circle,\n geoshape,\n image,\n line,\n point,\n rect,\n rule,\n square,\n text,\n tick,\n trail\n};\n\nexport function parseMarkGroups(model: UnitModel): any[] {\n if (contains([LINE, AREA, TRAIL], model.mark)) {\n const details = pathGroupingFields(model.mark, model.encoding);\n if (details.length > 0) {\n return getPathGroups(model, details);\n }\n // otherwise use standard mark groups\n } else if (model.mark === BAR) {\n const hasCornerRadius = VG_CORNERRADIUS_CHANNELS.some(prop =>\n getMarkPropOrConfig(prop, model.markDef, model.config)\n );\n if (model.stack && !model.fieldDef('size') && hasCornerRadius) {\n return getGroupsForStackedBarWithCornerRadius(model);\n }\n }\n\n return getMarkGroup(model);\n}\n\nconst FACETED_PATH_PREFIX = 'faceted_path_';\n\nfunction getPathGroups(model: UnitModel, details: string[]) {\n // TODO: for non-stacked plot, map order to zindex. (Maybe rename order for layer to zindex?)\n\n return [\n {\n name: model.getName('pathgroup'),\n type: 'group',\n from: {\n facet: {\n name: FACETED_PATH_PREFIX + model.requestDataName(DataSourceType.Main),\n data: model.requestDataName(DataSourceType.Main),\n groupby: details\n }\n },\n encode: {\n update: {\n width: {field: {group: 'width'}},\n height: {field: {group: 'height'}}\n }\n },\n // With subfacet for line/area group, need to use faceted data from above.\n marks: getMarkGroup(model, {fromPrefix: FACETED_PATH_PREFIX})\n }\n ];\n}\n\nconst STACK_GROUP_PREFIX = 'stack_group_';\n\n/**\n * We need to put stacked bars into groups in order to enable cornerRadius for stacks.\n * If stack is used and the model doesn't have size encoding, we put the mark into groups,\n * and apply cornerRadius properties at the group.\n */\nfunction getGroupsForStackedBarWithCornerRadius(model: UnitModel) {\n // Generate the mark\n const [mark] = getMarkGroup(model, {fromPrefix: STACK_GROUP_PREFIX});\n\n // Get the scale for the stacked field\n const fieldScale = model.scaleName(model.stack.fieldChannel);\n const stackField = (opt: FieldRefOption = {}) => model.vgField(model.stack.fieldChannel, opt);\n // Find the min/max of the pixel value on the stacked direction\n const stackFieldGroup = (func: 'min' | 'max', expr: 'datum' | 'parent') => {\n const vgFieldMinMax = [\n stackField({prefix: 'min', suffix: 'start', expr}),\n stackField({prefix: 'max', suffix: 'start', expr}),\n stackField({prefix: 'min', suffix: 'end', expr}),\n stackField({prefix: 'max', suffix: 'end', expr})\n ];\n return `${func}(${vgFieldMinMax.map(field => `scale('${fieldScale}',${field})`).join(',')})`;\n };\n\n let groupUpdate: VgEncodeEntry;\n let innerGroupUpdate: VgEncodeEntry;\n\n // Build the encoding for group and an inner group\n if (model.stack.fieldChannel === 'x') {\n // Move cornerRadius, y/yc/y2/height properties to group\n // Group x/x2 should be the min/max of the marks within\n groupUpdate = {\n ...pick(mark.encode.update, ['y', 'yc', 'y2', 'height', ...VG_CORNERRADIUS_CHANNELS]),\n x: {signal: stackFieldGroup('min', 'datum')},\n x2: {signal: stackFieldGroup('max', 'datum')},\n clip: {value: true}\n };\n // Inner group should revert the x translation, and pass height through\n innerGroupUpdate = {\n x: {field: {group: 'x'}, mult: -1},\n height: {field: {group: 'height'}}\n };\n // The marks should use the same height as group, without y/yc/y2 properties (because it's already done by group)\n // This is why size encoding is not supported yet\n mark.encode.update = {\n ...omit(mark.encode.update, ['y', 'yc', 'y2']),\n height: {field: {group: 'height'}}\n };\n } else {\n groupUpdate = {\n ...pick(mark.encode.update, ['x', 'xc', 'x2', 'width']),\n y: {signal: stackFieldGroup('min', 'datum')},\n y2: {signal: stackFieldGroup('max', 'datum')},\n clip: {value: true}\n };\n innerGroupUpdate = {\n y: {field: {group: 'y'}, mult: -1},\n width: {field: {group: 'width'}}\n };\n mark.encode.update = {\n ...omit(mark.encode.update, ['x', 'xc', 'x2']),\n width: {field: {group: 'width'}}\n };\n }\n\n // Deal with cornerRadius properties\n for (const key of VG_CORNERRADIUS_CHANNELS) {\n const configValue = getMarkConfig(key, model.markDef, model.config);\n // Move from mark to group\n if (mark.encode.update[key]) {\n groupUpdate[key] = mark.encode.update[key];\n delete mark.encode.update[key];\n } else if (configValue) {\n groupUpdate[key] = signalOrValueRef(configValue);\n }\n // Overwrite any cornerRadius on mark set by config --- they are already moved to the group\n if (configValue) {\n mark.encode.update[key] = {value: 0};\n }\n }\n\n const groupby: string[] = [];\n\n if (model.stack.groupbyChannel) {\n // For bin and time unit, we have to add bin/timeunit -end channels.\n const groupByField = model.fieldDef(model.stack.groupbyChannel);\n const field = vgField(groupByField);\n if (field) {\n groupby.push(field);\n }\n\n if (groupByField?.bin || groupByField?.timeUnit) {\n groupby.push(vgField(groupByField, {binSuffix: 'end'}));\n }\n }\n\n const strokeProperties = [\n 'stroke',\n 'strokeWidth',\n 'strokeJoin',\n 'strokeCap',\n 'strokeDash',\n 'strokeDashOffset',\n 'strokeMiterLimit',\n 'strokeOpacity'\n ] as const;\n\n // Generate stroke properties for the group\n groupUpdate = strokeProperties.reduce((encode, prop) => {\n if (mark.encode.update[prop]) {\n return {...encode, [prop]: mark.encode.update[prop]};\n } else {\n const configValue = getMarkConfig(prop, model.markDef, model.config);\n if (configValue !== undefined) {\n return {...encode, [prop]: signalOrValueRef(configValue)};\n } else {\n return encode;\n }\n }\n }, groupUpdate);\n\n // Apply strokeForeground and strokeOffset if stroke is used\n if (groupUpdate.stroke) {\n groupUpdate.strokeForeground = {value: true};\n groupUpdate.strokeOffset = {value: 0};\n }\n\n return [\n {\n type: 'group',\n from: {\n facet: {\n data: model.requestDataName(DataSourceType.Main),\n name: STACK_GROUP_PREFIX + model.requestDataName(DataSourceType.Main),\n groupby,\n aggregate: {\n fields: [\n stackField({suffix: 'start'}),\n stackField({suffix: 'start'}),\n stackField({suffix: 'end'}),\n stackField({suffix: 'end'})\n ],\n ops: ['min', 'max', 'min', 'max']\n }\n }\n },\n encode: {\n update: groupUpdate\n },\n marks: [\n {\n type: 'group',\n encode: {update: innerGroupUpdate},\n marks: [mark]\n }\n ]\n }\n ];\n}\n\nexport function getSort(model: UnitModel): VgCompare {\n const {encoding, stack, mark, markDef, config} = model;\n const order = encoding.order;\n if (\n (!isArray(order) && isValueDef(order) && isNullOrFalse(order.value)) ||\n (!order && isNullOrFalse(getMarkPropOrConfig('order', markDef, config)))\n ) {\n return undefined;\n } else if ((isArray(order) || isFieldDef(order)) && !stack) {\n // Sort by the order field if it is specified and the field is not stacked. (For stacked field, order specify stack order.)\n return sortParams(order, {expr: 'datum'});\n } else if (isPathMark(mark)) {\n // For both line and area, we sort values based on dimension by default\n const dimensionChannel = markDef.orient === 'horizontal' ? 'y' : 'x';\n const dimensionChannelDef = encoding[dimensionChannel];\n if (isFieldDef(dimensionChannelDef)) {\n const s = dimensionChannelDef.sort;\n\n if (isArray(s)) {\n return {\n field: vgField(dimensionChannelDef, {prefix: dimensionChannel, suffix: 'sort_index', expr: 'datum'})\n };\n } else if (isSortField(s)) {\n return {\n field: vgField(\n {\n // FIXME: this op might not already exist?\n // FIXME: what if dimensionChannel (x or y) contains custom domain?\n aggregate: isAggregate(model.encoding) ? s.op : undefined,\n field: s.field\n },\n {expr: 'datum'}\n )\n };\n } else if (isSortByEncoding(s)) {\n const fieldDefToSort = model.fieldDef(s.encoding);\n return {\n field: vgField(fieldDefToSort, {expr: 'datum'}),\n order: s.order\n };\n } else if (s === null) {\n return undefined;\n } else {\n return {\n field: vgField(dimensionChannelDef, {\n // For stack with imputation, we only have bin_mid\n binSuffix: model.stack?.impute ? 'mid' : undefined,\n expr: 'datum'\n })\n };\n }\n }\n return undefined;\n }\n return undefined;\n}\n\nfunction getMarkGroup(model: UnitModel, opt: {fromPrefix: string} = {fromPrefix: ''}) {\n const {mark, markDef, encoding, config} = model;\n\n const clip = getFirstDefined(markDef.clip, scaleClip(model), projectionClip(model));\n const style = getStyles(markDef);\n const key = encoding.key;\n const sort = getSort(model);\n const interactive = interactiveFlag(model);\n const aria = getMarkPropOrConfig('aria', markDef, config);\n\n const postEncodingTransform = markCompiler[mark].postEncodingTransform\n ? markCompiler[mark].postEncodingTransform(model)\n : null;\n\n return [\n {\n name: model.getName('marks'),\n type: markCompiler[mark].vgMark,\n ...(clip ? {clip: true} : {}),\n ...(style ? {style} : {}),\n ...(key ? {key: key.field} : {}),\n ...(sort ? {sort} : {}),\n ...(interactive ? interactive : {}),\n ...(aria === false ? {aria} : {}),\n from: {data: opt.fromPrefix + model.requestDataName(DataSourceType.Main)},\n encode: {\n update: markCompiler[mark].encodeEntry(model)\n },\n ...(postEncodingTransform\n ? {\n transform: postEncodingTransform\n }\n : {})\n }\n ];\n}\n\n/**\n * If scales are bound to interval selections, we want to automatically clip\n * marks to account for panning/zooming interactions. We identify bound scales\n * by the selectionExtent property, which gets added during scale parsing.\n */\nfunction scaleClip(model: UnitModel) {\n const xScale = model.getScaleComponent('x');\n const yScale = model.getScaleComponent('y');\n return (xScale && xScale.get('selectionExtent')) || (yScale && yScale.get('selectionExtent')) ? true : undefined;\n}\n\n/**\n * If we use a custom projection with auto-fitting to the geodata extent,\n * we need to clip to ensure the chart size doesn't explode.\n */\nfunction projectionClip(model: UnitModel) {\n const projection = model.component.projection;\n return projection && !projection.isFit ? true : undefined;\n}\n\n/**\n * Only output interactive flags if we have selections defined somewhere in our model hierarchy.\n */\nfunction interactiveFlag(model: UnitModel) {\n if (!model.component.selection) return null;\n const unitCount = keys(model.component.selection).length;\n let parentCount = unitCount;\n let parent = model.parent;\n while (parent && parentCount === 0) {\n parentCount = keys(parent.component.selection).length;\n parent = parent.parent;\n }\n return parentCount\n ? {\n interactive: unitCount > 0 || !!model.encoding.tooltip\n }\n : null;\n}\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const arc: MarkCompiler = {\n vgMark: 'arc',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'ignore',\n orient: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n\n // arcs are rectangles in polar coordinates\n ...encode.rectPosition(model, 'radius', 'arc'),\n ...encode.rectPosition(model, 'theta', 'arc')\n };\n }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const area: MarkCompiler = {\n vgMark: 'area',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'include',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointOrRangePosition('x', model, {\n defaultPos: 'zeroOrMin',\n defaultPos2: 'zeroOrMin',\n range: model.markDef.orient === 'horizontal'\n }),\n ...encode.pointOrRangePosition('y', model, {\n defaultPos: 'zeroOrMin',\n defaultPos2: 'zeroOrMin',\n range: model.markDef.orient === 'vertical'\n }),\n ...encode.defined(model)\n };\n }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const bar: MarkCompiler = {\n vgMark: 'rect',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.rectPosition(model, 'x', 'bar'),\n ...encode.rectPosition(model, 'y', 'bar')\n };\n }\n};\n","import {GeoShapeTransform as VgGeoShapeTransform} from 'vega';\nimport {isFieldDef, vgField} from '../../channeldef';\nimport {GEOJSON} from '../../type';\nimport {VgPostEncodingTransform} from '../../vega.schema';\nimport {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const geoshape: MarkCompiler = {\n vgMark: 'shape',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'ignore',\n orient: 'ignore',\n theta: 'ignore'\n })\n };\n },\n postEncodingTransform: (model: UnitModel): VgPostEncodingTransform[] => {\n const {encoding} = model;\n const shapeDef = encoding.shape;\n\n const transform: VgGeoShapeTransform = {\n type: 'geoshape',\n projection: model.projectionName(),\n // as: 'shape',\n ...(shapeDef && isFieldDef(shapeDef) && shapeDef.type === GEOJSON\n ? {field: vgField(shapeDef, {expr: 'datum'})}\n : {})\n };\n return [transform];\n }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const image: MarkCompiler = {\n vgMark: 'image',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'ignore',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.rectPosition(model, 'x', 'image'),\n ...encode.rectPosition(model, 'y', 'image'),\n ...encode.text(model, 'url')\n };\n }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const line: MarkCompiler = {\n vgMark: 'line',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'ignore',\n orient: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n ...encode.nonPosition('size', model, {\n vgChannel: 'strokeWidth' // VL's line size is strokeWidth\n }),\n ...encode.defined(model)\n };\n }\n};\n\nexport const trail: MarkCompiler = {\n vgMark: 'trail',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n size: 'include',\n orient: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointPosition('x', model, {defaultPos: 'mid'}),\n ...encode.pointPosition('y', model, {defaultPos: 'mid'}),\n ...encode.nonPosition('size', model),\n ...encode.defined(model)\n };\n }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const rect: MarkCompiler = {\n vgMark: 'rect',\n encodeEntry: (model: UnitModel) => {\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.rectPosition(model, 'x', 'rect'),\n ...encode.rectPosition(model, 'y', 'rect')\n };\n }\n};\n","import {UnitModel} from '../unit';\nimport {MarkCompiler} from './base';\nimport * as encode from './encode';\n\nexport const rule: MarkCompiler = {\n vgMark: 'rule',\n encodeEntry: (model: UnitModel) => {\n const {markDef} = model;\n const orient = markDef.orient;\n\n if (!model.encoding.x && !model.encoding.y && !model.encoding.latitude && !model.encoding.longitude) {\n // Show nothing if we have none of x, y, lat, and long.\n return {};\n }\n\n return {\n ...encode.baseEncodeEntry(model, {\n align: 'ignore',\n baseline: 'ignore',\n color: 'include',\n orient: 'ignore',\n size: 'ignore',\n theta: 'ignore'\n }),\n ...encode.pointOrRangePosition('x', model, {\n defaultPos: orient === 'horizontal' ? 'zeroOrMax' : 'mid',\n defaultPos2: 'zeroOrMin',\n range: orient !== 'vertical' // include x2 for horizontal or line segment rule\n }),\n ...encode.pointOrRangePosition('y', model, {\n defaultPos: orient === 'vertical' ? 'zeroOrMax' : 'mid',\n defaultPos2: 'zeroOrMin',\n range: orient !== 'horizontal' // include y2 for vertical or line segment rule\n }),\n ...encode.nonPosition('size', model, {\n vgChannel: 'strokeWidth' // VL's rule size is strokeWidth\n })\n };\n }\n};\n","import {NewSignal, SignalRef} from 'vega';\nimport {isArray} from 'vega-util';\nimport {Axis, AxisInternal, isConditionalAxisValue} from '../axis';\nimport {\n Channel,\n GEOPOSITION_CHANNELS,\n NonPositionScaleChannel,\n NONPOSITION_SCALE_CHANNELS,\n PositionChannel,\n POSITION_SCALE_CHANNELS,\n ScaleChannel,\n SCALE_CHANNELS,\n SingleDefChannel,\n supportLegend,\n X,\n Y\n} from '../channel';\nimport {\n getFieldDef,\n getFieldOrDatumDef,\n isFieldOrDatumDef,\n isTypedFieldDef,\n MarkPropFieldOrDatumDef,\n PositionFieldDef\n} from '../channeldef';\nimport {Config} from '../config';\nimport {isGraticuleGenerator} from '../data';\nimport * as vlEncoding from '../encoding';\nimport {Encoding, initEncoding} from '../encoding';\nimport {ExprRef, replaceExprRef} from '../expr';\nimport {LegendInternal} from '../legend';\nimport {GEOSHAPE, isMarkDef, Mark, MarkDef} from '../mark';\nimport {Projection} from '../projection';\nimport {Domain, Scale} from '../scale';\nimport {isSelectionParameter, SelectionParameter} from '../selection';\nimport {LayoutSizeMixins, NormalizedUnitSpec} from '../spec';\nimport {isFrameMixins} from '../spec/base';\nimport {stack, StackProperties} from '../stack';\nimport {keys} from '../util';\nimport {VgData, VgLayout} from '../vega.schema';\nimport {assembleAxisSignals} from './axis/assemble';\nimport {AxisInternalIndex} from './axis/component';\nimport {parseUnitAxes} from './axis/parse';\nimport {signalOrValueRefWithCondition, signalRefOrValue} from './common';\nimport {parseData} from './data/parse';\nimport {assembleLayoutSignals} from './layoutsize/assemble';\nimport {initLayoutSize} from './layoutsize/init';\nimport {parseUnitLayoutSize} from './layoutsize/parse';\nimport {LegendInternalIndex} from './legend/component';\nimport {defaultFilled, initMarkdef} from './mark/init';\nimport {parseMarkGroups} from './mark/mark';\nimport {isLayerModel, Model, ModelWithField} from './model';\nimport {ScaleIndex} from './scale/component';\nimport {\n assembleTopLevelSignals,\n assembleUnitSelectionData,\n assembleUnitSelectionMarks,\n assembleUnitSelectionSignals\n} from './selection/assemble';\nimport {parseUnitSelection} from './selection/parse';\n\n/**\n * Internal model of Vega-Lite specification for the compiler.\n */\nexport class UnitModel extends ModelWithField {\n public readonly markDef: MarkDef;\n public readonly encoding: Encoding;\n\n public readonly specifiedScales: ScaleIndex = {};\n\n public readonly stack: StackProperties;\n\n protected specifiedAxes: AxisInternalIndex = {};\n\n protected specifiedLegends: LegendInternalIndex = {};\n\n public specifiedProjection: Projection = {};\n\n public readonly selection: SelectionParameter[] = [];\n public children: Model[] = [];\n\n constructor(\n spec: NormalizedUnitSpec,\n parent: Model,\n parentGivenName: string,\n parentGivenSize: LayoutSizeMixins = {},\n config: Config\n ) {\n super(spec, 'unit', parent, parentGivenName, config, undefined, isFrameMixins(spec) ? spec.view : undefined);\n\n const markDef = isMarkDef(spec.mark) ? {...spec.mark} : {type: spec.mark};\n const mark = markDef.type;\n\n // Need to init filled before other mark properties because encoding depends on filled but other mark properties depend on types inside encoding\n if (markDef.filled === undefined) {\n markDef.filled = defaultFilled(markDef, config, {\n graticule: spec.data && isGraticuleGenerator(spec.data)\n });\n }\n\n const encoding = (this.encoding = initEncoding(spec.encoding || {}, mark, markDef.filled, config));\n this.markDef = initMarkdef(markDef, encoding, config);\n\n this.size = initLayoutSize({\n encoding: encoding,\n size: isFrameMixins(spec)\n ? {\n ...parentGivenSize,\n ...(spec.width ? {width: spec.width} : {}),\n ...(spec.height ? {height: spec.height} : {})\n }\n : parentGivenSize\n });\n\n // calculate stack properties\n this.stack = stack(mark, encoding);\n this.specifiedScales = this.initScales(mark, encoding);\n\n this.specifiedAxes = this.initAxes(encoding);\n this.specifiedLegends = this.initLegends(encoding);\n this.specifiedProjection = spec.projection;\n\n // Selections will be initialized upon parse.\n this.selection = (spec.params ?? []).filter(p => isSelectionParameter(p)) as SelectionParameter[];\n }\n\n public get hasProjection(): boolean {\n const {encoding} = this;\n const isGeoShapeMark = this.mark === GEOSHAPE;\n const hasGeoPosition = encoding && GEOPOSITION_CHANNELS.some(channel => isFieldOrDatumDef(encoding[channel]));\n return isGeoShapeMark || hasGeoPosition;\n }\n\n /**\n * Return specified Vega-Lite scale domain for a particular channel\n * @param channel\n */\n public scaleDomain(channel: ScaleChannel): Domain {\n const scale = this.specifiedScales[channel];\n return scale ? scale.domain : undefined;\n }\n\n public axis(channel: PositionChannel): AxisInternal {\n return this.specifiedAxes[channel];\n }\n\n public legend(channel: NonPositionScaleChannel): LegendInternal {\n return this.specifiedLegends[channel];\n }\n\n private initScales(mark: Mark, encoding: Encoding): ScaleIndex {\n return SCALE_CHANNELS.reduce((scales, channel) => {\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as\n | PositionFieldDef\n | MarkPropFieldOrDatumDef;\n if (fieldOrDatumDef) {\n scales[channel] = this.initScale(fieldOrDatumDef.scale ?? {});\n }\n return scales;\n }, {} as ScaleIndex);\n }\n\n private initScale(scale: Scale): Scale {\n const {domain, range} = scale;\n // TODO: we could simplify this function if we had a recursive replace function\n const scaleInternal = replaceExprRef(scale);\n if (isArray(domain)) {\n scaleInternal.domain = domain.map(signalRefOrValue);\n }\n if (isArray(range)) {\n scaleInternal.range = range.map(signalRefOrValue);\n }\n return scaleInternal as Scale;\n }\n\n private initAxes(encoding: Encoding): AxisInternalIndex {\n return POSITION_SCALE_CHANNELS.reduce((_axis, channel) => {\n // Position Axis\n\n // TODO: handle ConditionFieldDef\n const channelDef = encoding[channel];\n if (\n isFieldOrDatumDef(channelDef) ||\n (channel === X && isFieldOrDatumDef(encoding.x2)) ||\n (channel === Y && isFieldOrDatumDef(encoding.y2))\n ) {\n const axisSpec = isFieldOrDatumDef(channelDef) ? channelDef.axis : undefined;\n\n _axis[channel] = axisSpec\n ? this.initAxis({...axisSpec}) // convert truthy value to object\n : axisSpec;\n }\n return _axis;\n }, {});\n }\n\n private initAxis(axis: Axis): Axis {\n const props = keys(axis);\n const axisInternal = {};\n for (const prop of props) {\n const val = axis[prop];\n axisInternal[prop as any] = isConditionalAxisValue(val)\n ? signalOrValueRefWithCondition(val)\n : signalRefOrValue(val);\n }\n return axisInternal;\n }\n\n private initLegends(encoding: Encoding): LegendInternalIndex {\n return NONPOSITION_SCALE_CHANNELS.reduce((_legend, channel) => {\n const fieldOrDatumDef = getFieldOrDatumDef(encoding[channel]) as MarkPropFieldOrDatumDef;\n\n if (fieldOrDatumDef && supportLegend(channel)) {\n const legend = fieldOrDatumDef.legend;\n _legend[channel] = legend\n ? replaceExprRef(legend) // convert truthy value to object\n : legend;\n }\n\n return _legend;\n }, {});\n }\n\n public parseData() {\n this.component.data = parseData(this);\n }\n\n public parseLayoutSize() {\n parseUnitLayoutSize(this);\n }\n\n public parseSelections() {\n this.component.selection = parseUnitSelection(this, this.selection);\n }\n\n public parseMarkGroup() {\n this.component.mark = parseMarkGroups(this);\n }\n\n public parseAxesAndHeaders() {\n this.component.axes = parseUnitAxes(this);\n }\n\n public assembleSelectionTopLevelSignals(signals: any[]): NewSignal[] {\n return assembleTopLevelSignals(this, signals);\n }\n\n public assembleSignals(): NewSignal[] {\n return [...assembleAxisSignals(this), ...assembleUnitSelectionSignals(this, [])];\n }\n\n public assembleSelectionData(data: readonly VgData[]): VgData[] {\n return assembleUnitSelectionData(this, data);\n }\n\n public assembleLayout(): VgLayout {\n return null;\n }\n\n public assembleLayoutSignals(): NewSignal[] {\n return assembleLayoutSignals(this);\n }\n\n public assembleMarks() {\n let marks = this.component.mark ?? [];\n\n // If this unit is part of a layer, selections should augment\n // all in concert rather than each unit individually. This\n // ensures correct interleaving of clipping and brushed marks.\n if (!this.parent || !isLayerModel(this.parent)) {\n marks = assembleUnitSelectionMarks(this, marks);\n }\n\n return marks.map(this.correctDataNames);\n }\n public assembleGroupStyle(): string | string[] {\n const {style} = this.view || {};\n if (style !== undefined) {\n return style;\n }\n if (this.encoding.x || this.encoding.y) {\n return 'cell';\n } else {\n return undefined;\n }\n }\n\n protected getMapping() {\n return this.encoding;\n }\n\n public get mark(): Mark {\n return this.markDef.type;\n }\n\n public channelHasField(channel: Channel) {\n return vlEncoding.channelHasField(this.encoding, channel);\n }\n\n public fieldDef(channel: SingleDefChannel) {\n const channelDef = this.encoding[channel];\n return getFieldDef(channelDef);\n }\n\n public typedFieldDef(channel: SingleDefChannel) {\n const fieldDef = this.fieldDef(channel);\n if (isTypedFieldDef(fieldDef)) {\n return fieldDef;\n }\n return null;\n }\n}\n","import {getSizeChannel, POSITION_SCALE_CHANNELS} from '../../channel';\nimport {isContinuousFieldOrDatumDef} from '../../channeldef';\nimport {Encoding} from '../../encoding';\nimport * as log from '../../log';\nimport {isStep, LayoutSizeMixins} from '../../spec/base';\n\nexport function initLayoutSize({encoding, size}: {encoding: Encoding; size: LayoutSizeMixins}) {\n for (const channel of POSITION_SCALE_CHANNELS) {\n const sizeType = getSizeChannel(channel);\n if (isStep(size[sizeType])) {\n if (isContinuousFieldOrDatumDef(encoding[channel])) {\n delete size[sizeType];\n log.warn(log.message.stepDropped(sizeType));\n }\n }\n }\n\n return size;\n}\n","import {Legend as VgLegend, NewSignal, SignalRef, Title as VgTitle} from 'vega';\nimport {array} from 'vega-util';\nimport {Config} from '../config';\nimport * as log from '../log';\nimport {isLayerSpec, isUnitSpec, LayoutSizeMixins, NormalizedLayerSpec} from '../spec';\nimport {keys} from '../util';\nimport {VgData, VgLayout} from '../vega.schema';\nimport {assembleAxisSignals} from './axis/assemble';\nimport {parseLayerAxes} from './axis/parse';\nimport {parseData} from './data/parse';\nimport {assembleLayoutSignals} from './layoutsize/assemble';\nimport {parseLayerLayoutSize} from './layoutsize/parse';\nimport {assembleLegends} from './legend/assemble';\nimport {Model} from './model';\nimport {assembleLayerSelectionMarks} from './selection/assemble';\nimport {UnitModel} from './unit';\n\nexport class LayerModel extends Model {\n // HACK: This should be (LayerModel | UnitModel)[], but setting the correct type leads to weird error.\n // So I'm just putting generic Model for now\n public readonly children: Model[];\n\n constructor(\n spec: NormalizedLayerSpec,\n parent: Model,\n parentGivenName: string,\n parentGivenSize: LayoutSizeMixins,\n config: Config\n ) {\n super(spec, 'layer', parent, parentGivenName, config, spec.resolve, spec.view);\n\n const layoutSize = {\n ...parentGivenSize,\n ...(spec.width ? {width: spec.width} : {}),\n ...(spec.height ? {height: spec.height} : {})\n };\n\n this.children = spec.layer.map((layer, i) => {\n if (isLayerSpec(layer)) {\n return new LayerModel(layer, this, this.getName(`layer_${i}`), layoutSize, config);\n } else if (isUnitSpec(layer)) {\n return new UnitModel(layer, this, this.getName(`layer_${i}`), layoutSize, config);\n }\n\n throw new Error(log.message.invalidSpec(layer));\n });\n }\n\n public parseData() {\n this.component.data = parseData(this);\n for (const child of this.children) {\n child.parseData();\n }\n }\n\n public parseLayoutSize() {\n parseLayerLayoutSize(this);\n }\n\n public parseSelections() {\n // Merge selections up the hierarchy so that they may be referenced\n // across unit specs. Persist their definitions within each child\n // to assemble signals which remain within output Vega unit groups.\n this.component.selection = {};\n for (const child of this.children) {\n child.parseSelections();\n for (const key of keys(child.component.selection)) {\n this.component.selection[key] = child.component.selection[key];\n }\n }\n }\n\n public parseMarkGroup() {\n for (const child of this.children) {\n child.parseMarkGroup();\n }\n }\n\n public parseAxesAndHeaders() {\n parseLayerAxes(this);\n }\n\n public assembleSelectionTopLevelSignals(signals: NewSignal[]): NewSignal[] {\n return this.children.reduce((sg, child) => child.assembleSelectionTopLevelSignals(sg), signals);\n }\n\n // TODO: Support same named selections across children.\n public assembleSignals(): NewSignal[] {\n return this.children.reduce((signals, child) => {\n return signals.concat(child.assembleSignals());\n }, assembleAxisSignals(this));\n }\n\n public assembleLayoutSignals(): NewSignal[] {\n return this.children.reduce((signals, child) => {\n return signals.concat(child.assembleLayoutSignals());\n }, assembleLayoutSignals(this));\n }\n\n public assembleSelectionData(data: readonly VgData[]): readonly VgData[] {\n return this.children.reduce((db, child) => child.assembleSelectionData(db), data);\n }\n\n public assembleGroupStyle(): string | string[] {\n const uniqueStyles = new Set();\n for (const child of this.children) {\n for (const style of array(child.assembleGroupStyle())) {\n uniqueStyles.add(style);\n }\n }\n const styles = Array.from(uniqueStyles);\n return styles.length > 1 ? styles : styles.length === 1 ? styles[0] : undefined;\n }\n\n public assembleTitle(): VgTitle {\n let title = super.assembleTitle();\n if (title) {\n return title;\n }\n // If title does not provide layer, look into children\n for (const child of this.children) {\n title = child.assembleTitle();\n if (title) {\n return title;\n }\n }\n return undefined;\n }\n\n public assembleLayout(): VgLayout {\n return null;\n }\n\n public assembleMarks(): any[] {\n return assembleLayerSelectionMarks(\n this,\n this.children.flatMap(child => {\n return child.assembleMarks();\n })\n );\n }\n\n public assembleLegends(): VgLegend[] {\n return this.children.reduce((legends, child) => {\n return legends.concat(child.assembleLegends());\n }, assembleLegends(this));\n }\n}\n","import {SignalRef} from 'vega';\nimport {Config} from '../config';\nimport * as log from '../log';\nimport {isAnyConcatSpec, isFacetSpec, isLayerSpec, isUnitSpec, LayoutSizeMixins, NormalizedSpec} from '../spec';\nimport {ConcatModel} from './concat';\nimport {FacetModel} from './facet';\nimport {LayerModel} from './layer';\nimport {Model} from './model';\nimport {UnitModel} from './unit';\n\nexport function buildModel(\n spec: NormalizedSpec,\n parent: Model,\n parentGivenName: string,\n unitSize: LayoutSizeMixins,\n config: Config\n): Model {\n if (isFacetSpec(spec)) {\n return new FacetModel(spec, parent, parentGivenName, config);\n } else if (isLayerSpec(spec)) {\n return new LayerModel(spec, parent, parentGivenName, unitSize, config);\n } else if (isUnitSpec(spec)) {\n return new UnitModel(spec, parent, parentGivenName, unitSize, config);\n } else if (isAnyConcatSpec(spec)) {\n return new ConcatModel(spec, parent, parentGivenName, config);\n }\n throw new Error(log.message.invalidSpec(spec));\n}\n","import pkg from '../package.json';\nexport const version = pkg.version;\n\nexport {compile} from './compile/compile';\nexport type {Config} from './config';\nexport {normalize} from './normalize';\nexport type {TopLevelSpec} from './spec';\nexport * from './util';\n","import {AutoSizeType, LoggerInterface, Spec as VgSpec} from 'vega';\nimport {isString, mergeConfig} from 'vega-util';\nimport {getPositionScaleChannel} from '../channel';\nimport * as vlFieldDef from '../channeldef';\nimport {Config, initConfig, stripAndRedirectConfig} from '../config';\nimport * as log from '../log';\nimport {normalize} from '../normalize';\nimport {assembleParameterSignals} from '../parameter';\nimport {LayoutSizeMixins, TopLevel, TopLevelSpec} from '../spec';\nimport {\n AutoSizeParams,\n Datasets,\n extractTopLevelProperties,\n getFitType,\n isFitType,\n TopLevelProperties\n} from '../spec/toplevel';\nimport {Dict, keys} from '../util';\nimport {buildModel} from './buildmodel';\nimport {assembleRootData} from './data/assemble';\nimport {optimizeDataflow} from './data/optimize';\nimport {Model} from './model';\n\nexport interface CompileOptions {\n /**\n * Sets a Vega-Lite configuration.\n */\n config?: Config;\n\n /**\n * Sets a custom logger.\n */\n logger?: LoggerInterface;\n\n /**\n * Sets a field title formatter.\n */\n fieldTitle?: vlFieldDef.FieldTitleFormatter;\n}\n\n/**\n * Vega-Lite's main function, for compiling Vega-Lite spec into Vega spec.\n *\n * At a high-level, we make the following transformations in different phases:\n *\n * Input spec\n * |\n * | (Normalization)\n * v\n * Normalized Spec (Row/Column channels in single-view specs becomes faceted specs, composite marks becomes layered specs.)\n * |\n * | (Build Model)\n * v\n * A model tree of the spec\n * |\n * | (Parse)\n * v\n * A model tree with parsed components (intermediate structure of visualization primitives in a format that can be easily merged)\n * |\n * | (Optimize)\n * v\n * A model tree with parsed components with the data component optimized\n * |\n * | (Assemble)\n * v\n * Vega spec\n *\n * @param inputSpec The Vega-Lite specification.\n * @param opt Optional arguments passed to the Vega-Lite compiler.\n * @returns An object containing the compiled Vega spec and normalized Vega-Lite spec.\n */\nexport function compile(inputSpec: TopLevelSpec, opt: CompileOptions = {}) {\n // 0. Augment opt with default opts\n if (opt.logger) {\n // set the singleton logger to the provided logger\n log.set(opt.logger);\n }\n\n if (opt.fieldTitle) {\n // set the singleton field title formatter\n vlFieldDef.setTitleFormatter(opt.fieldTitle);\n }\n\n try {\n // 1. Initialize config by deep merging default config with the config provided via option and the input spec.\n const config = initConfig(mergeConfig(opt.config, inputSpec.config));\n\n // 2. Normalize: Convert input spec -> normalized spec\n\n // - Decompose all extended unit specs into composition of unit spec. For example, a box plot get expanded into multiple layers of bars, ticks, and rules. The shorthand row/column channel is also expanded to a facet spec.\n // - Normalize autosize and width or height spec\n const spec = normalize(inputSpec, config);\n\n // 3. Build Model: normalized spec -> Model (a tree structure)\n\n // This phases instantiates the models with default config by doing a top-down traversal. This allows us to pass properties that child models derive from their parents via their constructors.\n // See the abstract `Model` class and its children (UnitModel, LayerModel, FacetModel, ConcatModel) for different types of models.\n const model: Model = buildModel(spec, null, '', undefined, config);\n\n // 4 Parse: Model --> Model with components\n\n // Note that components = intermediate representations that are equivalent to Vega specs.\n // We need these intermediate representation because we need to merge many visualization \"components\" like projections, scales, axes, and legends.\n // We will later convert these components into actual Vega specs in the assemble phase.\n\n // In this phase, we do a bottom-up traversal over the whole tree to\n // parse for each type of components once (e.g., data, layout, mark, scale).\n // By doing bottom-up traversal, we start parsing components of unit specs and\n // then merge child components of parent composite specs.\n //\n // Please see inside model.parse() for order of different components parsed.\n model.parse();\n\n // drawDataflow(model.component.data.sources);\n\n // 5. Optimize the dataflow. This will modify the data component of the model.\n optimizeDataflow(model.component.data, model);\n\n // drawDataflow(model.component.data.sources);\n\n // 6. Assemble: convert model components --> Vega Spec.\n const vgSpec = assembleTopLevelModel(\n model,\n getTopLevelProperties(inputSpec, spec.autosize, config, model),\n inputSpec.datasets,\n inputSpec.usermeta\n );\n\n return {\n spec: vgSpec,\n normalized: spec\n };\n } finally {\n // Reset the singleton logger if a logger is provided\n if (opt.logger) {\n log.reset();\n }\n // Reset the singleton field title formatter if provided\n if (opt.fieldTitle) {\n vlFieldDef.resetTitleFormatter();\n }\n }\n}\n\nfunction getTopLevelProperties(\n inputSpec: TopLevel,\n autosize: AutoSizeType | AutoSizeParams,\n config: Config,\n model: Model\n) {\n const width = model.component.layoutSize.get('width');\n const height = model.component.layoutSize.get('height');\n if (autosize === undefined) {\n autosize = {type: 'pad'};\n if (model.hasAxisOrientSignalRef()) {\n autosize.resize = true;\n }\n } else if (isString(autosize)) {\n autosize = {type: autosize};\n }\n if (width && height && isFitType(autosize.type)) {\n if (width === 'step' && height === 'step') {\n log.warn(log.message.droppingFit());\n autosize.type = 'pad';\n } else if (width === 'step' || height === 'step') {\n // effectively XOR, because else if\n\n // get step dimension\n const sizeType = width === 'step' ? 'width' : 'height';\n // log that we're dropping fit for respective channel\n log.warn(log.message.droppingFit(getPositionScaleChannel(sizeType)));\n\n // setting type to inverse fit (so if we dropped fit-x, type is now fit-y)\n const inverseSizeType = sizeType === 'width' ? 'height' : 'width';\n autosize.type = getFitType(inverseSizeType);\n }\n }\n\n return {\n ...(keys(autosize).length === 1 && autosize.type\n ? autosize.type === 'pad'\n ? {}\n : {autosize: autosize.type}\n : {autosize}),\n ...extractTopLevelProperties(config, false),\n ...extractTopLevelProperties(inputSpec, true)\n };\n}\n\n/*\n * Assemble the top-level model to a Vega spec.\n *\n * Note: this couldn't be `model.assemble()` since the top-level model\n * needs some special treatment to generate top-level properties.\n */\nfunction assembleTopLevelModel(\n model: Model,\n topLevelProperties: TopLevelProperties & LayoutSizeMixins,\n datasets: Datasets = {},\n usermeta: Dict\n): VgSpec {\n // Config with Vega-Lite only config removed.\n const vgConfig = model.config ? stripAndRedirectConfig(model.config) : undefined;\n\n const data = [].concat(\n model.assembleSelectionData([]),\n // only assemble data in the root\n assembleRootData(model.component.data, datasets)\n );\n\n const projections = model.assembleProjections();\n const title = model.assembleTitle();\n const style = model.assembleGroupStyle();\n const encodeEntry = model.assembleGroupEncodeEntry(true);\n\n let layoutSignals = model.assembleLayoutSignals();\n\n // move width and height signals with values to top level\n layoutSignals = layoutSignals.filter(signal => {\n if ((signal.name === 'width' || signal.name === 'height') && signal.value !== undefined) {\n topLevelProperties[signal.name] = +signal.value;\n return false;\n }\n return true;\n });\n\n const {params, ...otherTopLevelProps} = topLevelProperties;\n\n return {\n $schema: 'https://vega.github.io/schema/vega/v5.json',\n ...(model.description ? {description: model.description} : {}),\n ...otherTopLevelProps,\n ...(title ? {title} : {}),\n ...(style ? {style} : {}),\n ...(encodeEntry ? {encode: {update: encodeEntry}} : {}),\n data,\n ...(projections.length > 0 ? {projections: projections} : {}),\n ...model.assembleGroup([\n ...layoutSignals,\n ...model.assembleSelectionTopLevelSignals([]),\n ...assembleParameterSignals(params)\n ]),\n ...(vgConfig ? {config: vgConfig} : {}),\n ...(usermeta ? {usermeta} : {})\n };\n}\n"],"names":["Array","prototype","flat","Object","defineProperty","configurable","value","r","t","isNaN","arguments","Number","reduce","call","this","a","e","isArray","push","apply","slice","writable","flatMap","map","clone","_instanceof","obj","type","nativeMap","nativeSet","nativePromise","Map","_","Set","Promise","parent","circular","depth","includeNonEnumerable","allParents","allChildren","useBuffer","Buffer","Infinity","_clone","child","proto","resolve","reject","then","err","__isArray","__isRegExp","RegExp","source","__getRegExpFlags","lastIndex","__isDate","Date","getTime","isBuffer","allocUnsafe","length","copy","Error","create","getPrototypeOf","index","indexOf","i","forEach","key","keyChild","valueChild","set","entryChild","add","attrs","getOwnPropertyDescriptor","getOwnPropertySymbols","symbols","symbol","descriptor","enumerable","allPropertyNames","getOwnPropertyNames","propertyName","__objToStr","o","toString","re","flags","global","ignoreCase","multiline","clonePrototype","c","module","exports","fastJsonStableStringify","data","opts","cmp","f","cycles","node","b","aobj","bobj","seen","stringify","toJSON","undefined","isFinite","JSON","out","TypeError","seenIndex","keys","sort","splice","isLogicalOr","op","or","isLogicalAnd","and","isLogicalNot","not","forEachLeaf","fn","subop","normalizeLogicalComposition","normalizer","deepEqual","equal","constructor","valueOf","hasOwnProperty","duplicate","pick","props","prop","omit","x","stableStringify","join","hash","isNumber","str","isString","h","charCodeAt","isNullOrFalse","contains","array","item","includes","some","arr","k","entries","every","mergeDeep","dest","src","s","deepMerge_","property","writeConfig","unique","values","results","u","v","val","setEqual","size","has","hasIntersection","prefixGenerator","prefixes","wrappedWithAccessors","splitAccessPath","y","computedPrefixes","fieldIntersection","isEmpty","vals","isBoolean","varName","alphanumericS","replace","match","logicalExpr","cb","deleteNestedProperty","orderedProps","shift","titleCase","charAt","toUpperCase","substr","accessPathWithDatum","path","datum","pieces","prefix","stringValue","flatAccessWithDatum","escapePathAccess","string","replacePathInField","replaceAll","find","replacement","removePathFromField","accessPathDepth","getFirstDefined","args","arg","idCounter","uniqueId","id","String","internalField","name","isInternalField","startsWith","normalizeAngle","angle","isNumeric","parseFloat","ROW","COLUMN","FACET","X","Y","X2","Y2","RADIUS","RADIUS2","THETA","THETA2","LATITUDE","LONGITUDE","LATITUDE2","LONGITUDE2","COLOR","FILL","STROKE","SHAPE","SIZE","ANGLE","OPACITY","FILLOPACITY","STROKEOPACITY","STROKEWIDTH","STROKEDASH","TEXT","ORDER","DETAIL","KEY","TOOLTIP","HREF","URL","DESCRIPTION","POLAR_POSITION_CHANNEL_INDEX","theta","theta2","radius","radius2","isPolarPositionChannel","GEO_POSIITON_CHANNEL_INDEX","longitude","longitude2","latitude","latitude2","GEOPOSITION_CHANNELS","UNIT_CHANNEL_INDEX","x2","y2","color","fill","stroke","opacity","fillOpacity","strokeOpacity","strokeWidth","strokeDash","shape","order","text","detail","tooltip","href","url","description","isColorChannel","channel","FACET_CHANNEL_INDEX","row","column","facet","FACET_CHANNELS","CHANNEL_INDEX","CHANNELS","_o","_d","_tt1","SINGLE_DEF_CHANNEL_INDEX","_r","_c","_f","SINGLE_DEF_UNIT_CHANNEL_INDEX","isChannel","SECONDARY_RANGE_CHANNEL","isSecondaryRangeChannel","getMainRangeChannel","getVgPositionChannel","getSecondaryRangeChannel","getSizeChannel","_x","_y","_x2","_y2","_latitude","_longitude","_latitude2","_longitude2","_theta","_theta2","_radius","_radius2","NONPOSITION_CHANNEL_INDEX","NONPOSITION_CHANNELS","POSITION_SCALE_CHANNEL_INDEX","POSITION_SCALE_CHANNELS","isXorY","POLAR_POSITION_SCALE_CHANNEL_INDEX","POLAR_POSITION_SCALE_CHANNELS","getPositionScaleChannel","sizeType","_t","_tt","_hr","_u","_al","_dd","_k","_oo","NONPOSITION_SCALE_CHANNEL_INDEX","NONPOSITION_SCALE_CHANNELS","SCALE_CHANNEL_INDEX","SCALE_CHANNELS","isScaleChannel","supportMark","mark","ALL_MARKS","ALL_MARKS_EXCEPT_GEOSHAPE","area","bar","image","rect","rule","circle","point","square","tick","line","trail","geoshape","arc","getSupportedMark","_g","rangeType","AGGREGATE_OP_INDEX","argmax","argmin","average","count","distinct","product","max","mean","median","min","missing","q1","q3","ci0","ci1","stderr","stdev","stdevp","sum","valid","variance","variancep","MULTIDOMAIN_SORT_OP_INDEX","isArgminDef","isArgmaxDef","isAggregateOp","COUNTING_OPS","isCountingAggregateOp","aggregate","SUM_OPS","SHARED_DOMAIN_OP_INDEX","toSet","binToString","bin","normalizeBin","p","isParameterExtent","isBinning","isBinParams","binned","isBinned","isObject","extent","autoMaxBins","isExprRef","replaceExprRef","newIndex","signalRefOrValue","extractTitleConfig","titleConfig","anchor","frame","offset","orient","limit","subtitleColor","subtitleFont","subtitleFontSize","subtitleFontStyle","subtitleFontWeight","subtitleLineHeight","subtitlePadding","rest","nonMarkTitleProperties","subtitle","titleMarkConfig","subtitleMarkConfig","isText","isSignalRef","isVgRangeStep","range","isDataRefDomain","domain","VG_MARK_CONFIGS","aria","ariaRole","ariaRoleDescription","blend","strokeCap","strokeDashOffset","strokeJoin","strokeOffset","strokeMiterLimit","startAngle","endAngle","padAngle","innerRadius","outerRadius","interpolate","tension","align","baseline","dir","dx","dy","ellipsis","font","fontSize","fontWeight","fontStyle","lineBreak","lineHeight","cursor","cornerRadius","cornerRadiusTopLeft","cornerRadiusTopRight","cornerRadiusBottomLeft","cornerRadiusBottomRight","aspect","width","height","smooth","VG_MARK_INDEX","group","VG_CORNERRADIUS_CHANNELS","signalOrValueRefWithCondition","condition","conditionalSignalRefOrValue","expr","signal","signalOrValueRef","exprFromValueOrSignalRef","ref","signalOrStringValue","applyMarkConfig","model","propsList","getMarkConfig","markDef","config","getStyles","concat","style","getMarkPropOrConfig","opt","vgChannel","ignoreVgConfig","getMarkStyleConfig","styleConfigIndex","getStyleConfig","styles","styleConfig","sortParams","orderDef","fieldRefOption","orderChannelDef","field","vgField","mergeTitleFieldDefs","f1","f2","merged","fdToMerge","fieldDef1","mergeTitle","title1","title2","mergeTitleComponent","v1","v2","v1Val","v2Val","explicit","invalidSpec","spec","FIT_NON_SINGLE","containerSizeNonSingle","containerSizeNotCompatibleWithAutosize","droppingFit","unknownField","cannotProjectOnChannelWithoutField","cannotProjectAggregate","selectionNotSupported","NEEDS_SAME_SELECTION","columnsNotSupportByRowCol","differentParse","local","ancestor","customFormatTypeNotAllowed","invalidFieldType","droppingColor","emptyFieldDef","fieldDef","incompatibleChannel","markOrFacet","when","channelShouldBeDiscrete","channelShouldBeDiscreteOrDiscretizing","discreteChannelCannotEncode","unaggregateDomainHasNoEffectForRawField","unaggregateDomainWithNonSharedDomainOp","unaggregatedDomainWithLogScale","scalePropertyNotWorkWithScaleType","scaleType","propName","stepDropped","MORE_THAN_ONE_SORT","invalidTimeUnit","unitName","errorBand1DNotSupport","channelRequiredForBinned","main","logger","Warn","current","warn","isDateTime","part","TIMEUNIT_PARTS","MONTHS","SHORT_MONTHS","m","DAYS","SHORT_DAYS","d","dateTimeParts","normalize","parts","day","log","year","month","lowerM","toLowerCase","monthIndex","shortM","shortMonthIndex","normalizeMonth","quarter","q","normalizeQuarter","date","lowerD","dayIndex","shortD","shortDayIndex","normalizeDay","timeUnit","unit","dateTimeToExpr","utc","LOCAL_SINGLE_TIMEUNIT_INDEX","week","dayofyear","hours","minutes","seconds","milliseconds","isUTCTimeUnit","VEGALITE_TIMEFORMAT","getTimeUnitParts","filter","containsTimeUnit","fullTimeUnit","fieldExpr","end","fieldRef","lastTimeUnit","dateExpr","dateTimeExprToExpr","timeUnitSpecifierExpression","timeUnitParts","normalizeTimeUnit","params","isFieldEqualPredicate","predicate","isFieldLTPredicate","lt","isFieldLTEPredicate","lte","isFieldGTPredicate","gt","isFieldGTEPredicate","gte","isFieldRangePredicate","isFieldOneOfPredicate","oneOf","in","isFieldPredicate","predicateValueExpr","valueExpr","wrapTime","fieldFilterExpression","useInRange","_normalizeTimeUnit","timeUnitFieldExpr","predicateValuesExpr","isFieldValidPredicate","fieldValidPredicate","lower","upper","exprs","normalizePredicate","_normalizeTimeUnit2","QUANTITATIVE","ORDINAL","TEMPORAL","NOMINAL","GEOJSON","ScaleType","SCALE_CATEGORY_INDEX","linear","pow","sqrt","symlog","identity","sequential","time","ordinal","band","quantile","quantize","threshold","scaleCompatible","scaleType1","scaleType2","scaleCategory1","scaleCategory2","SCALE_PRECEDENCE_INDEX","scaleTypePrecedence","CONTINUOUS_TO_CONTINUOUS_SCALES","CONTINUOUS_TO_CONTINUOUS_INDEX","QUANTITATIVE_SCALES_INDEX","CONTINUOUS_TO_DISCRETE_INDEX","CONTINUOUS_DOMAIN_SCALES","CONTINUOUS_DOMAIN_INDEX","DISCRETE_DOMAIN_INDEX","hasDiscreteDomain","hasContinuousDomain","isContinuousToContinuous","isContinuousToDiscrete","isParameterDomain","rangeMax","rangeMin","scheme","NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTY_INDEX","domainMax","domainMin","domainMid","bins","reverse","round","clamp","nice","base","exponent","constant","zero","padding","paddingInner","paddingOuter","NON_TYPE_DOMAIN_RANGE_VEGA_SCALE_PROPERTIES","scaleTypeSupportProperty","channelScalePropertyIncompatability","Mark","ARC","AREA","BAR","IMAGE","LINE","POINT","RECT","RULE","TICK","TRAIL","CIRCLE","SQUARE","GEOSHAPE","isPathMark","isRectBasedMark","PRIMITIVE_MARKS","isMarkDef","FILL_STROKE_CONFIG","VL_ONLY_MARK_CONFIG_PROPERTIES","filled","invalid","timeUnitBandSize","timeUnitBandPosition","MARK_CONFIGS","isRelativeBandSize","BAR_CORNER_RADIUS_INDEX","horizontal","vertical","defaultBarConfig","binSpacing","continuousBandSize","defaultRectConfig","midPointRefWithPositionInvalidTest","channelDef","scale","midPoint","isFieldDef","get","wrapPositionInvalidTest","fieldInvalidTestValueRef","test","fieldInvalidPredicate","valueRefForFieldOrDatumDef","scaleName","encode","isDatumDef","interpolatedSignalRef","fieldOrDatumDef","fieldOrDatumDef2","startSuffix","bandPosition","start","suffix","channel2Def","stack","defaultRef","isFieldOrDatumDef","isTypedFieldDef","getBandPosition","fieldDef2","impute","binSuffix","binRequiresRange","isValueDef","offsetMixins","widthHeightValueOrSignalRef","isFunction","isCustomFormatType","formatType","customFormatExpr","format","formatSignalRef","normalizeStack","formatCustomType","fieldToFormat","isFieldOrDatumDefForTimeFormat","rawTimeFormat","isUTCScale","formatExpression","timeFormatExpression","timeFormat","isScaleFieldDef","numberFormat","channelDefType","binFormatExpression","formatExpr","datumDef","datumDefToExpr","guideFormat","omitTimeFormatConfig","specifiedFormat","guideFormatType","binNumberFormatExpr","startField","endField","DEFAULT_SORT_OP","SORT_BY_CHANNEL_INDEX","isSortByChannel","isSortByEncoding","isSortField","isSortArray","isFacetMapping","isFacetFieldDef","isFacetSpec","toFieldDefBase","isSortableFieldDef","getBandSize","useVlSizeChannel","sizeChannel","discreteBandSize","_config$mark$type2","_config$mark$type3","hasBandEnd","isConditionalDef","hasConditionalFieldDef","hasConditionalFieldOrDatumDef","isContinuousFieldOrDatumDef","cd","isDiscrete","isNumericDataDef","isPositionFieldOrDatumDef","isMarkPropFieldOrDatumDef","isStringFieldOrDatumDef","toStringFieldDef","argAccessor","isCount","nofn","isOpFieldDef","tu","timeUnitToString","forAs","def","defaultTitleFormatter","fieldTitle","timeUnitParams","maxbins","functionalTitleFormatter","countTitle","verbalTitleFormatter","titleFormatter","setTitleFormatter","formatter","title","allowDisabling","includeDefault","guideTitle","getGuide","_getGuide","defaultTitle","axis","legend","header","getFormatMixins","guide","getFieldDef","getFieldOrDatumDef","initChannelDef","initFieldOrDatumDef","fd","customFormatTypes","guideType","newGuide","initFieldDef","initDatumDef","compositeMark","fullType","getFullName","newType","_fieldDef$scale","defaultType","compatible","warning","COMPATIBLE","_def$scale","channelCompatibility","encoding","sub","labelOrient","titleOrient","step","undefinedIfExprNotRequired","isTime","isLocalSingleTimeUnit","parse","valueArray","console","CONDITIONAL_AXIS_PROP_INDEX","labelAlign","vgProp","labelBaseline","labelColor","labelFont","labelFontSize","labelFontStyle","labelFontWeight","labelOpacity","labelOffset","labelPadding","gridColor","gridDash","gridDashOffset","gridOpacity","gridWidth","tickColor","tickDash","tickDashOffset","tickOpacity","tickSize","tickWidth","isConditionalAxisValue","AXIS_PARTS","AXIS_PROPERTY_TYPE","grid","gridCap","gridScale","domainCap","domainColor","domainDash","domainDashOffset","domainOpacity","domainWidth","labelAngle","labelBound","labelFlush","labelFlushOffset","labelLimit","labelLineHeight","labelOverlap","labels","labelSeparation","maxExtent","minExtent","position","tickCap","tickMinStep","tickOffset","tickRound","ticks","titleAlign","titleAnchor","titleAngle","titleBaseline","titleColor","titleFont","titleFontSize","titleFontStyle","titleFontWeight","titleLimit","titleLineHeight","titleOpacity","titlePadding","titleX","titleY","tickBand","tickCount","tickExtra","translate","zindex","COMMON_AXIS_PROPERTIES_INDEX","AXIS_PROPERTIES_INDEX","labelExpr","isAxisProperty","AXIS_CONFIGS","axisBand","axisBottom","axisDiscrete","axisLeft","axisPoint","axisQuantitative","axisRight","axisTemporal","axisTop","axisX","axisXBand","axisXDiscrete","axisXPoint","axisXQuantitative","axisXTemporal","axisY","axisYBand","axisYDiscrete","axisYPoint","axisYQuantitative","axisYTemporal","isUnitSpec","CompositeMarkNormalizer","run","hasMatchingType","channelHasField","isAggregate","extractTransformsFromEncoding","oldEncoding","groupby","timeUnits","aggOp","remaining","isTitleDefined","newField","newFieldDef","aggregateEntry","as","secondaryChannel","isNonPositionScaleChannel","initEncoding","normalizedEncoding","markSupported","primaryFieldDef","markChannelCompatible","defs","normalizeEncoding","newChannelDef","mapping","thisArg","el","pathGroupingFields","details","getCompositeMarkTooltip","tooltipSummary","continuousAxisChannelDef","encodingWithoutContinuousAxis","withFieldName","fieldPrefix","titlePrefix","mainTitle","getTitle","escape","channelDefArray","fieldDefs","makeCompositeAggregatePartFactory","compositeMarkDef","continuousAxis","sharedEncoding","compositeMarkConfig","partName","positionPrefix","endPositionPrefix","extraEncoding","partLayerMixins","partBaseSpec","clip","compositeMarkContinuousAxis","continuousAxisChannelDef2","continuousAxisChannelDefError","continuousAxisChannelDefError2","filterAggregateFromChannelDef","continuousAxisWithoutAggregate","compositeMarkOrient","xAggregate","yAggregate","BOXPLOT","boxPlotNormalizer","normalizeBoxPlot","getBoxPlotType","_encoding","projection","_p","outerSpec","boxplot","sizeValue","boxPlotType","transform","ticksOrient","boxOrient","customTooltipWithoutAggregatedField","continuousFieldName","boxplotSpecificAggregate","boxParamsQuartiles","postAggregateCalculates","calculate","oldContinuousAxisChannelDef","oldEncodingWithoutContinuousAxis","filteredEncoding","customTooltipWithAggregatedField","filterTooltipWithAggregatedField","boxParams","encodingWithoutSizeColorAndContinuousAxis","makeBoxPlotPart","makeBoxPlotExtent","makeBoxPlotBox","makeBoxPlotMidTick","fiveSummaryTooltipEncoding","endTick","whiskerTooltipEncoding","whiskerLayers","boxLayers","layer","lowerBoxExpr","upperBoxExpr","iqrExpr","lowerWhiskerExpr","upperWhiskerExpr","joinaggregateTransform","joinaggregate","filteredWhiskerSpec","encodingWithoutSizeColorContinuousAxisAndTooltip","axisWithoutTitle","outlierLayersMixins","filteredLayersMixins","filteredLayersMixinsTransforms","unshift","continousAxisField","ERRORBAR","errorBarNormalizer","normalizeErrorBar","tooltipEncoding","errorBarParams","makeErrorBarPart","errorbar","thickness","errorBarOrientAndInputType","xError","xError2","yError","yError2","errorBarIsInputTypeRaw","inputType","isTypeAggregatedUpperLower","errorBarIsInputTypeAggregatedUpperLower","isTypeAggregatedError","errorBarIsInputTypeAggregatedError","errorBarSpecificAggregate","tooltipTitleWithFieldName","center","getTitlePrefix","centerOp","lowerExtentOp","upperExtentOp","postAggregateCalculate","substring","errorBarAggregationAndCalculation","oldContinuousAxisChannelDef2","oldContinuousAxisChannelDefError","oldContinuousAxisChannelDefError2","oldAggregate","oldGroupBy","operation","ERRORBAND","errorBandNormalizer","normalizeErrorBand","errorBandDef","makeErrorBandPart","errorband","is2D","bandMark","bordersMark","compositeMarkRegistry","VL_ONLY_LEGEND_CONFIG","HEADER_TITLE_PROPERTIES_MAP","HEADER_LABEL_PROPERTIES_MAP","labelAnchor","HEADER_TITLE_PROPERTIES","HEADER_LABEL_PROPERTIES","HEADER_CONFIGS","headerRow","headerColumn","headerFacet","LEGEND_SCALE_CHANNELS","SELECTION_ID","defaultConfig","on","fields","toggle","clear","interval","encodings","zoom","isLegendBinding","bind","isLegendStreamBinding","isSelectionParameter","param","assembleParameterSignals","signals","init","update","isConcatSpec","isVConcatSpec","isHConcatSpec","TOP_LEVEL_PROPERTIES","extractTopLevelProperties","includeParams","isStep","isFrameMixins","COMPOSITION_LAYOUT_PROPERTIES","bounds","columns","spacing","getViewConfigContinuousSize","viewConfig","getViewConfigDiscreteStep","getViewConfigDiscreteSize","DEFAULT_STEP","background","view","continuousWidth","continuousHeight","box","outliers","borders","pointPadding","barBandPaddingInner","rectBandPaddingInner","minBandSize","minFontSize","maxFontSize","minOpacity","maxOpacity","minSize","minStrokeWidth","maxStrokeWidth","quantileCount","quantizeCount","gradientHorizontalMaxLength","gradientHorizontalMinLength","gradientVerticalMaxLength","gradientVerticalMinLength","unselectedOpacity","selection","defaultSelectionConfig","tab10","DEFAULT_FONT_SIZE","guideLabel","groupTitle","groupSubtitle","DEFAULT_COLOR","blue","orange","red","teal","green","yellow","purple","pink","brown","gray0","gray1","gray2","gray3","gray4","gray5","gray6","gray7","gray8","gray9","gray10","gray11","gray12","gray13","gray14","gray15","getAxisConfigInternal","axisConfig","axisConfigInternal","configPropsWithExpr","initConfig","specifiedConfig","restConfig","mergedConfig","mergeConfig","fontConfig","cell","category","colorSignalConfig","fontSizeSignalConfig","outputConfig","markConfigType","axisConfigType","headerConfigType","styleConfigInternal","getStyleConfigInternal","MARK_STYLES","VL_ONLY_CONFIG_PROPERTIES","VL_ONLY_ALL_MARK_SPECIFIC_CONFIG_PROPERTY_INDEX","stripAndRedirectConfig","markType","vlOnlyMarkSpecificConfigs","redirectConfigToStyleConfig","redirectTitleConfig","toProp","compositeMarkPart","isLayerSpec","SpecMapper","mapFacet","isRepeatSpec","mapRepeat","mapHConcat","mapVConcat","mapConcat","mapLayerOrUnit","mapLayer","mapUnit","subspec","hconcat","vconcat","STACK_OFFSET_INDEX","STACKABLE_MARKS","STACK_BY_DEFAULT_MARKS","isUnbinnedQuantitative","potentialStackedChannel","xDef","yDef","xScale","_xDef$scale","yScale","_yDef$scale","fieldChannel","stackedFieldDef","stackedField","dimensionChannel","getDimensionChannel","dimensionDef","dimensionField","stackBy","sc","cDef","disallowNonLinearStack","groupbyChannel","groupbyField","dropLineAndPoint","_point","_line","dropLineAndPointFromConfig","getPointOverlay","markConfig","getLineOverlay","PathOverlayNormalizer","normParams","pointOverlay","lineOverlay","stackProps","overlayEncoding","stackFieldChannel","replaceRepeaterInFacet","repeater","replaceRepeaterInMapping","replaceRepeaterInFieldDef","replaceRepeaterInEncoding","replaceRepeatInProp","repeat","replaceRepeaterInFieldOrDatumDef","replaceRepeaterInChannelDef","channelDefWithoutCondition","RuleForRangedLineNormalizer","mainChannelDef","hasX2","hasY2","mergeEncoding","parentEncoding","channels","parentChannelDef","mergedChannelDef","mergeProjection","parentProjection","isFilter","isLookup","isPivot","isDensity","isQuantile","isRegression","isLoess","isSample","isWindow","isJoinAggregate","isFlatten","isCalculate","isBin","isImpute","isTimeUnit","isStack","isFold","normalizeTransforms","tx","normalizeBinExtent","from","normalizeChannelDef","enc","_enc$scale","_enc$scale$domain","cond","ext","normalizeSelectionComposition","pred","empty","emptySelections","selectionPredicates","TopLevelSelectionsNormalizer","selections","super","addSpecNameToParams","views","method","normalizedSpec","topLevelSelectionNormalizer","coreNormalizer","selectionCompatNormalizer","normalizeGenericSpec","autosize","sizeInfo","isFitCompatible","autosizeDefault","_normalizeAutoSize","normalizeAutoSize","hasRow","hasColumn","hasFacet","mapFacetedUnit","specWithReplacedEncoding","mapUnitWithParentEncodingOrProjection","normalizeLayerOrUnit","unitNormalizer","nonFacetUnitNormalizers","isLayerRepeatSpec","mapLayerRepeat","mapNonLayerRepeat","childSpec","repeaterPrefix","layerValue","childRepeater","childName","remainingProperties","repeatValues","repeatValue","rowValue","columnValue","mergedProjection","mergedEncoding","facetMapping","layout","getFacetMappingAndLayout","newEncoding","facets","defWithoutLayout","otherParams","selDef","select","Split","implicit","combine","getWithExplicit","setWithExplicit","copyKeyFromSplit","copyKeyFromObject","copyAll","other","makeExplicit","makeImplicit","tieBreakByComparing","compare","propertyOf","diff","defaultTieBreaker","mergeValuesWithExplicit","tieBreaker","AncestorParse","parseNothing","isUrlData","isInlineData","isNamedData","isGenerator","isSequenceGenerator","isSphereGenerator","isGraticuleGenerator","DataSourceType","LBRACK","RBRACK","ILLEGAL","DEFAULT_MARKS","DEFAULT_SOURCE","MARKS","eventSelector","selector","marks","parseMerge","trim","parseSelector","endChar","pushChar","popChar","n","output","stream","between","parseBetween","j","throttle","markname","lastIndexOf","split","parseThrottle","isMarkType","marktype","consume","debounce","parseStream","assembleInit","isExpr","wrap","assembled","UTC","dateTimeToTimestamp","assembleUnitSelectionSignals","selCmpt","component","modifyExpr","TUPLE","selectionCompilers","defined","MODIFY","events","STORE","cleanupEmptyOnArray","assembleFacetSignals","getName","assembleUnitSelectionMarks","DataFlowNode","debugName","_parent","addChild","_children","numChildren","loc","removeChild","oldChild","remove","insertAsParentOf","swapWithParent","newParent","OutputNode","cloneObj","_source","_name","refCounts","dependentFields","producedFields","_hash","getSource","isRequired","setSource","TimeUnitNode","formula","reduceFieldDef","timeUnitComponent","merge","children","removeFormulas","newFormula","assemble","transforms","units","timezone","TUPLE_FIELDS","SelectionProjectionComponent","items","hasChannel","hasField","project","proj","parsed","signalName","sg","counter","cfg","initVal","tplType","getScaleComponent","allSignals","hasLegend","scaleBindings","bound","scales","topLevelSignals","isTopLevelLayer","namedSg","VL_SELECTION_RESOLVE","isLayerModel","BRUSH","SCALE_TRIGGER","fieldsSg","hasScales","dataSignals","scaleTriggers","filterExpr","evt","filters","_evt$between$","cs","vname","visual","dname","scaled","getSizeSignalRef","coord","channelSignals","toNum","xvname","yvname","store","vgStroke","enter","brushes","acc","cmpt","force","wrapCondition","refFn","valueRef","conditionValueRef","isConditionalParameter","parseSelectionPredicate","expression","textRef","tooltipRefForEncoding","reactiveGeom","tooltipRefFromChannelDef","markTooltip","content","tooltipData","toSkip","tuples","fDef","mainChannel","channel2","keyValues","enableAria","ariaRoleDesc","descriptionValue","nonPosition","defaultValue","transparentIfNeeded","defaultFill","defaultStroke","colorVgChannel","fillStrokeMarkDefAndConfig","getOffset","markDefOffsetValue","getOffsetChannel","pointPosition","defaultPos","pointPositionDefaultRef","positionRef","definedValueOrConfig","domainDefinitelyIncludesZero","mult","ALIGNED_X_CHANNEL","left","right","BASELINED_Y_CHANNEL","top","middle","bottom","vgAlignedPositionChannel","defaultAlign","alignChannel","alignExcludingSignal","pointOrRangePosition","defaultPos2","rangePosition","pos2Mixins","baseChannel","vgSizeChannel","position2Ref","position2orSize","pointPosition2OrSize","dimensionSize","rectPosition","channelDef2","hasSizeDef","isBarBand","sizeMixins","bandSize","defaultSizeRef","defaultBandAlign","posRef","vgChannel2","sizeRef","sizeOffset","positionAndSize","axes","_model$component$axes","axisTranslate","rectBinRef","getBinSpacing","startRef","rectBinPosition","scaleRange","spacingOffset","reverseExpr","offsetExpr","translateExpr","ALWAYS_IGNORE","baseEncodeEntry","ignore","markDefProperties","wrapAllFieldsInvalid","filterIndex","aggregator","scaleComponent","allFieldsInvalidPredicate","valueIfDefined","VORONOI","nearest","cellDef","interactive","isVoronoi","exists","inputBindings","disableDirectManipulation","sgname","TOGGLE","tpl","idx","findIndex","addClear","vIdx","tIdx","legendBindings","projLen","selDef_","legendFilter","selName","markName","ds","sgName","tuple","ANCHOR","DELTA","scalesCompiler","INTERVAL_BRUSH","onDelta","delta","sizeSg","scaleCmpt","reversed","sx","sy","legends","facetModel","isFacetModel","getFacetModel","requiresSelectionId","identifier","RawCode","Literal","Property","Identifier","ArrayExpression","BinaryExpression","CallExpression","ConditionalExpression","LogicalExpression","MemberExpression","ObjectExpression","UnaryExpression","ASTNode","TokenName","lookahead","visit","visitor","elements","callee","consequent","alternate","object","properties","argument","SyntaxIdentifier","MessageUnexpectedToken","MessageInvalidRegExp","MessageUnterminatedRegExp","MessageStrictOctalLiteral","DISABLED","RegexNonAsciiIdentifierStart","RegexNonAsciiIdentifierPart","assert","message","isDecimalDigit","ch","isHexDigit","isOctalDigit","isWhiteSpace","isLineTerminator","isIdentifierStart","fromCharCode","isIdentifierPart","keywords","skipComment","scanHexEscape","len","code","throwError","scanUnicodeCodePointEscape","cu1","cu2","getEscapedIdentifier","scanIdentifier","getIdentifier","scanPunctuator","code2","ch2","ch3","ch4","ch1","scanNumericLiteral","number","parseInt","scanHexLiteral","octal","scanOctalLiteral","scanRegExp","body","classMarker","terminated","literal","scanRegExpBody","search","scanRegExpFlags","pattern","tmp","$0","$1","exception","testRegExp","regex","advance","quote","scanStringLiteral","lex","token","peek","pos","finishBinaryExpression","operator","finishCallExpression","finishIdentifier","finishLiteral","raw","finishMemberExpression","accessor","computed","member","finishProperty","kind","messageFormat","error","msg","whole","throwUnexpected","expect","matchKeyword","keyword","parseArrayInitialiser","parseConditionalExpression","finishArrayExpression","parseObjectPropertyKey","parseObjectProperty","parseObjectInitialiser","finishObjectExpression","legalKeywords","parsePrimaryExpression","parseExpression","parseGroupExpression","parseArguments","parseNonComputedMember","isIdentifierName","parseNonComputedProperty","parseComputedMember","parsePostfixExpression","parseLeftHandSideExpressionAllowCall","parseUnaryExpression","finishUnaryExpression","binaryPrecedence","prec","marker","markers","pop","parseBinaryExpression","finishConditionalExpression","startsWithDatum","getDependentFields","ast","dependents","FilterNode","_dependentFields","dfnode","getSelectionComponent","tunode","parseSelectionExtent","filterOp","isSelectionPredicate","setAxisEncode","vgRef","assembleAxis","axisCmpt","disable","propType","propValue","valueOrSignalRef","conditions","propIndex","valueOrSignalCRef","signalRef","mainExtracted","hasAxisPart","titleString","assembleTitle","assembleAxisSignals","getAxisConfigFromConfigTypes","configTypes","assign","configType","orient1","orientConfig1","orientConfig2","conditionalOrientAxisConfig","getAxisConfigs","typeBasedConfigTypes","isQuantitative","axisChannel","axisOrient","vlOnlyConfigTypes","vgConfigTypes","vlOnlyAxisConfig","vgAxisConfig","axisConfigStyle","getAxisConfigStyle","axisConfigTypes","toMerge","_config$configType","getAxisConfig","axisConfigs","configFrom","configValue","axisRules","defaultGrid","gridChannel","defaultLabelAlign","defaultLabelBaseline","defaultLabelFlush","hasTimeUnit","defaultLabelOverlap","defaultTickCount","fieldDefTitle","getFieldDefTitle","typedFieldDef","defaultZindex","normalizeAngleExpr","alwaysIncludeMiddle","isX","mainOrient","CalculateNode","forEachFieldDef","sortValue","sortArrayIndexField","getHeaderChannel","getHeaderProperty","headerSpecificConfig","getHeaderProperties","HEADER_CHANNELS","HEADER_TYPES","assembleTitleGroup","layoutHeaders","facetFieldDef","ta","headerChannel","role","defaultHeaderGuideBaseline","defaultHeaderGuideAlign","assembleHeaderProperties","assembleHeaderGroups","layoutHeader","groups","headerType","headerComponent","assembleHeaderGroup","getSort","assembleLabelTitle","titleTextExpr","isFacetWithoutRowCol","hasAxes","sizeSignal","LAYOUT_TITLE_BAND","getLayoutTitleBand","propertiesMap","assembleLayoutSignals","sizeSignals","layoutSize","stepSignal","sizeExpr","isWidth","endsWith","safeExpr","cardinality","getSizeTypeFromLayoutSizeType","layoutSizeType","guideEncodeEntry","valueDef","defaultScaleResolve","isConcatModel","parseGuideResolve","channelScaleResolve","LEGEND_COMPONENT_PROPERTIES","clipHeight","columnPadding","direction","fillColor","gradientLength","gradientOpacity","gradientStrokeColor","gradientStrokeWidth","gradientThickness","gridAlign","legendX","legendY","rowPadding","strokeColor","symbolDash","symbolDashOffset","symbolFillColor","symbolLimit","symbolOffset","symbolOpacity","symbolSize","symbolStrokeColor","symbolStrokeWidth","symbolType","LegendComponent","legendEncodeRules","symbolsSpec","legendCmpt","legendType","mixins","getMaxValue","symbolBaseFillColor","getFirstConditionValue","selectedCondition","gradient","gradientSpec","specifiedlabelsSpec","labelsSpec","entriesSpec","getConditionValue","conditionalDef","Math","reducer","hasConditionalValueDef","legendRules","legendConfig","gradientLengthSignal","defaultGradientLength","shapeChannelDef","markShape","defaultSymbolType","getLegendType","getDirection","defaultDirection","parseLegend","legendComponent","isUnitModel","parseLegendForChannel","parseUnitLegend","mergeLegendComponent","parseNonUnitLegend","isExplicit","getLegendDefWithScale","_model$fieldDef","legendSelections","parseInteractiveLegend","ruleParams","legendEncoding","legendEncode","legendEncodeParams","legendEncodingPart","_legend2","mergedLegend","childLegend","mergedOrient","childOrient","typeMerged","mergedValueWithExplicit","mergeSymbolType","_mergedLegend$implici","_mergedLegend$implici2","_mergedLegend$explici","_mergedLegend$explici2","st1","st2","assembleLegends","legendComponentIndex","legendByDomain","domainHash","mergedLegendComponent","l","_legend$encode2","setLegendEncode","assembleLegend","assembleProjections","projections","assembleProjectionForModel","assembleProjectionsForModelAndChildren","fits","sources","lookupDataSource","fit","PROJECTION_PROPERTIES","ProjectionComponent","specifiedProjection","parseProjection","hasProjection","posssiblePair","requestDataName","Main","gatherFitData","projComp","projectionName","parseUnitProjection","nonUnitProjection","mergable","first","second","allPropertiesShared","mergeIfNoConflict","modelProjection","isFit","renameProjection","parseNonUnitProjections","rangeFormula","formulaAs","binKey","getBinSignalName","createBinComponent","span","isBinTransform","normalizedBin","extentSignal","getSignalsFromModel","binComponent","BinNode","binComponentIndex","renameSignal","binAs","remainingAs","binTrans","addDimension","dims","posChannel","getPositionChannelFromLatLong","isFieldRange","AggregateNode","dimensions","measures","meas","argField","scaleDomain","parentMeasures","childMeasures","ops","mergeMeasures","debug","addDimensions","alias","FacetNode","sortField","sortIndexField","childModel","_this$channel","depFields","getChildIndependentFieldsWithStep","childIndependentFieldsWithStep","childScaleComponent","getFieldFromDomain","assembleDomain","assembleRowColumnHeaderData","crossedDataName","childChannel","assembleFacetHeaderData","hasSharedAxis","headers","stop","facetData","unquote","getImplicitFromFilterTransform","getImplicitFromEncoding","mainFieldDef","dimensionChannelDef","ParseNode","_parse","ancestorParse","_data$format","makeWithAncestors","parsedAs","assembleFormatParse","formatParse","assembleTransforms","onlyNested","IdentifierNode","GraticuleNode","SequenceNode","SourceNode","_data","defaultExtension","exec","_generator","hasName","isDataSourceNode","Optimizer","setModified","BottomUpOptimizer","getNodeDepths","depths","optimize","topologicalSort","modifiedFlag","TopDownOptimizer","MergeIdenticalNodes","mergeNodes","nodes","mergedNode","hashes","buckets","RemoveUnnecessaryIdentifierNodes","RemoveDuplicateTimeUnits","timeUnitFields","RemoveUnnecessaryOutputNodes","MoveParseUp","MergeParse","originalChildren","parseChildren","commonParse","conflictingParse","parseNode","mergedParseNode","childNode","RemoveUnusedSubtrees","MergeTimeUnits","timeUnitChildren","combination","MergeAggregates","aggChildren","groupedAggregates","agg","groupBys","groupBy","mergeableAggs","mergedAggs","MergeBins","moveBinsUp","promotableBins","remainingBins","promotedBin","remainingBin","MergeOutputs","otherChildren","mainOutput","lastOutput","theChild","JoinAggregateTransformNode","w","getDefaultName","joinAggregateFieldDef","StackNode","_stack","stackTransform","sortFields","sortOrder","normalizedAs","isValidAsArray","stackField","facetby","stackProperties","dimensionFieldDef","stackby","by","_field","getStackByFields","getGroupbyFields","WindowTransformNode","window","windowFieldDef","ignorePeers","moveFacetDown","facetMain","moveMainDownToFacet","cloner","newName","FACET_SCALE_PREFIX","outputNodes","checkLinks","runOptimizer","optimizer","modified","optimizationDataflowHelper","dataComponent","firstPass","roots","optimizers","SignalRefWrapper","exprGenerator","rename","parseScaleDomain","localScaleComponents","util","domains","parseDomainForChannel","parseSelectionDomain","isFaceted","facetParent","parseUnitScaleDomain","selectionExtent","childComponent","domainsTieBreaker","se","parseNonUnitScaleDomain","scaleConfig","reason","canUseUnaggregatedDomain","useUnaggregatedDomain","normalizeUnaggregatedDomain","specifiedScales","parseSingleChannelDomain","convertDomainIfItIsDateTime","normalizedTimeUnit","mapDomainToDataSignal","isDomainUnionWith","defaultDomain","unionWith","stackDimensions","normalizeSortField","fieldDefToSortBy","isStackedMeasure","domainSort","Raw","binSignal","getSignalName","mergeDomains","uniqueDomains","_s","domainWithoutSort","sorts","unionDomainSorts","UNIONDOMAIN_SORT_OP_INDEX","allData","isDataRefUnionedDomain","nonUnionDomain","isFieldRefUnionDomain","assembleScales","assembleScalesForModel","otherScaleProps","assembleScaleRange","domainRaw","parsedExtent","assembleSelectionScaleDomain","ScaleComponent","typeWithExplicit","RANGE_PROPERTIES","getBinStepSignal","binCount","updatedName","parseRangeForChannel","specifiedScale","supportedByScaleType","channelIncompatability","fromName","parseScheme","sizeRangeMin","xyStepSignals","maxBandSize","minXYStep","maxSize","pointStep","MAX_SIZE_RANGE_STEP_RATIO","sizeRangeMax","rMax","rMin","interpolateRange","defaultContinuousToDiscreteCount","PI","defaultRange","isExtendedScheme","widthStep","heightStep","parseScaleProperty","localScaleCmpt","mergedScaleCmpt","specifiedValue","scalePadding","scalePaddingInner","scaleRules","parseUnitScaleProperty","parseNonUnitScaleProperty","specifiedDomain","barConfig","continuousPadding","paddingValue","bandPaddingInner","paddingInnerValue","bandPaddingOuter","xReverse","last","parseScaleRange","rangeWithExplicit","parseUnitScaleRange","valueWithExplicit","defaultScaleType","_fieldDef$axis","CHANNEL","channelSupportScaleType","specifiedType","fieldDefType","parseScaleCore","scaleComponents","sType","parseUnitScaleCore","scaleTypeWithExplicitIndex","explicitScaleType","childScaleType","scaleTypeTieBreaker","childScale","renameScale","parseNonUnitScaleCore","NameMap","nameMap","oldName","Model","parentGivenName","_mark$from","_mark$from2","_mark$from2$facet","scaleNameMap","projectionNameMap","signalNameMap","specType","compositionConfig","spacingConfig","extractCompositionLayout","outputNodeRefCounts","parseScale","parseLayoutSize","renameTopLevelLayoutSizeSignal","parseSelections","parseData","parseAxesAndHeaders","parseLegends","parseMarkGroup","ignoreRange","parseScales","assembleEncodeFromView","baseView","assembleGroupEncodeEntry","isTopLevel","encodeEntry","assembleLayout","titleBand","headerComponentIndex","assembleLayoutTitleBand","assembleDefaultLayout","assembleHeaderMarks","headerMarks","assembleAxes","axisComponents","titleNoEncoding","assembleGroup","assembleSignals","assembleMarks","getDataName","fullName","oldSignalName","originalScaleName","localScaleComponent","variableName","origName","sel","hasAxisOrientSignalRef","hasOrientSignalRef","_this$component$axes$2","ModelWithField","r1","getMapping","DensityTransformNode","specifiedAs","density","FilterInvalidNode","vegaFilters","FlattenTransformNode","flatten","FoldTransformNode","fold","GeoJSONNode","geojson","geoJsonCounter","coordinates","pair","GeoPointNode","ImputeNode","processSequence","keyvals","imputeTransform","imputedChannel","keyChannel","groupbyFields","LoessTransformNode","loess","LookupNode","secondary","fromOutputNode","isLookupData","fromSource","findSource","fromOutputName","Lookup","isLookupSelection","materialized","lookup","foreign","asName","default","QuantileTransformNode","RegressionTransformNode","regression","PivotTransformNode","pivot","SampleTransformNode","sample","makeWalkTree","datasetIndex","walkTree","dataSource","getHeaderType","parseFacetHeader","_fieldDef$header","makeHeaderComponent","mergeChildAxis","axisComponent","mainAxis","parseChildrenLayoutSize","parseNonUnitLayoutSizeForChannel","layoutSizeCmpt","mergedSize","childSize","scaleResolve","defaultUnitSize","facetSortFieldName","FacetModel","buildModel","initFacet","initFacetFieldDef","normalizedFacet","parseFacetHeaders","assembleSelectionTopLevelSignals","assembleSelectionData","getHeaderLayoutMixins","layoutMixins","layoutHeaderComponent","bandType","columnDistinctSignal","assembleGroupStyle","getCardinalityAggregateForChild","assembleFacet","facetRoot","outputName","cross","facetSortFields","facetSortOrder","ORTHOGONAL_ORIENT","_facet$channel","root","assembleFacetData","otherData","dataName","formatMesh","mesh","otherFeature","_otherData$format","feature","formatFeature","_data$format2","otherMesh","_otherData$format2","head","existingSource","parseRoot","sequence","graticule","parentIsLayer","makeFromEncoding","lookupCounter","derivedType","transformNode","makeFromTransform","make","parseTransformArray","implicitSelection","getImplicitFromSelection","implicitEncoding","parseAll","parseAllForSortIndex","rawName","mainName","lookupName","materializeSelections","facetName","makeJoinAggregateFromFacet","ConcatModel","getChildren","widthType","heightType","parseConcatLayoutSize","parseAxisGroup","layoutSignals","db","AXIS_COMPONENT_PROPERTIES_INDEX","AXIS_COMPONENT_PROPERTIES","AxisComponent","OPPOSITE_ORIENT","mergeAxisComponents","mergedAxisCmpts","childAxisCmpts","mergeAxisComponent","propsToAlwaysIncludeConfig","parseAxis","_config","_config$axis","defaultOrient","_axis2","getLabelAngle","hasValue","hasConfigValue","axisEncoding","axisEncode","axisEncodingPart","specifiedLabelsSpec","initMarkdef","originalMarkDef","specifiedOrient","xIsContinuous","yIsContinuous","xIsTemporal","yIsTemporal","cornerRadiusEnd","newProps","BAR_CORNER_RADIUS_END_INDEX","newProp","fixedShape","shapeMixins","defaultSize","markPropOrConfig","markCompiler","vgMark","postEncodingTransform","shapeDef","vgThicknessChannel","parseMarkGroups","FACETED_PATH_PREFIX","getMarkGroup","fromPrefix","getPathGroups","hasCornerRadius","STACK_GROUP_PREFIX","fieldScale","stackFieldGroup","func","groupUpdate","innerGroupUpdate","groupByField","strokeForeground","getGroupsForStackedBarWithCornerRadius","scaleClip","projectionClip","unitCount","parentCount","interactiveFlag","UnitModel","parentGivenSize","filledConfig","defaultFilled","initLayoutSize","initScales","specifiedAxes","initAxes","specifiedLegends","initLegends","isGeoShapeMark","hasGeoPosition","initScale","scaleInternal","_axis","axisSpec","initAxis","axisInternal","_legend","supportLegend","specifiedSize","parseUnitLayoutSize","selDefs","selCmpts","selectionConfig","defaults","parseUnitSelection","hasSelections","isPoint","assembleTopLevelSignals","dataCopy","assembleUnitSelectionData","correctDataNames","vlEncoding","LayerModel","axisCount","oppositeOrient","parseLayerAxes","uniqueStyles","assembleLayerSelectionMarks","unitSize","isAnyConcatSpec","version","pkg","inputSpec","newLogger","vlFieldDef","firstPassCounter","secondPassCounter","optimizeDataflow","topLevelProperties","datasets","usermeta","vgConfig","sourceIndex","newData","whereTo","assembleRootData","otherTopLevelProps","$schema","assembleTopLevelModel","resize","autoSizeType","inverseSizeType","getFitType","getTopLevelProperties","normalized","dict","dictKeys","otherKeys"],"mappings":"wUAAAA,MAAMC,UAAUC,MAAMC,OAAOC,eAAeJ,MAAMC,UAAU,OAAO,CAACI,cAAa,EAAGC,MAAM,SAASC,IAAI,IAAIC,EAAEC,MAAMC,UAAU,IAAI,EAAEC,OAAOD,UAAU,IAAI,OAAOF,EAAER,MAAMC,UAAUW,OAAOC,KAAKC,MAAK,SAASC,EAAEC,GAAG,OAAOhB,MAAMiB,QAAQD,GAAGD,EAAEG,KAAKC,MAAMJ,EAAER,EAAEM,KAAKG,EAAER,EAAE,IAAIO,EAAEG,KAAKF,GAAGD,IAAG,IAAIf,MAAMC,UAAUmB,MAAMP,KAAKC,OAAOO,UAAS,IAAKrB,MAAMC,UAAUqB,SAASnB,OAAOC,eAAeJ,MAAMC,UAAU,UAAU,CAACI,cAAa,EAAGC,MAAM,SAASC,GAAG,OAAOP,MAAMC,UAAUsB,IAAIJ,MAAML,KAAKJ,WAAWR,QAAQmB,UAAS,wCCAjfG,EAAS,oBAGJC,EAAYC,EAAKC,UACT,MAARA,GAAgBD,aAAeC,MAGpCC,EASAC,EAOAC,MAdFF,EAAYG,IACZ,MAAMC,GAGNJ,EAAY,iBAKZC,EAAYI,IACZ,MAAMD,GACNH,EAAY,iBAKZC,EAAgBI,QAChB,MAAMF,GACNF,EAAgB,sBAwBTN,EAAMW,EAAQC,EAAUC,EAAOpC,EAAWqC,GACzB,iBAAbF,IACTC,EAAQD,EAASC,MACjBpC,EAAYmC,EAASnC,UACrBqC,EAAuBF,EAASE,qBAChCF,EAAWA,EAASA,cAIlBG,EAAa,GACbC,EAAc,GAEdC,EAA6B,oBAAVC,mBAEA,IAAZN,IACTA,GAAW,QAEO,IAATC,IACTA,EAAQM,EAAAA,YAGDC,EAAOT,EAAQE,MAEP,OAAXF,EACF,OAAO,QAEK,IAAVE,EACF,OAAOF,MAELU,EACAC,KACiB,iBAAVX,SACFA,KAGLV,EAAYU,EAAQP,GACtBiB,EAAQ,IAAIjB,OACP,GAAIH,EAAYU,EAAQN,GAC7BgB,EAAQ,IAAIhB,OACP,GAAIJ,EAAYU,EAAQL,GAC7Be,EAAQ,IAAIf,GAAc,SAAUiB,EAASC,GAC3Cb,EAAOc,MAAK,SAAS3C,GACnByC,EAAQH,EAAOtC,EAAO+B,EAAQ,OAC7B,SAASa,GACVF,EAAOJ,EAAOM,EAAKb,EAAQ,eAG1B,GAAIb,EAAM2B,UAAUhB,GACzBU,EAAQ,QACH,GAAIrB,EAAM4B,WAAWjB,GAC1BU,EAAQ,IAAIQ,OAAOlB,EAAOmB,OAAQC,EAAiBpB,IAC/CA,EAAOqB,YAAWX,EAAMW,UAAYrB,EAAOqB,gBAC1C,GAAIhC,EAAMiC,SAAStB,GACxBU,EAAQ,IAAIa,KAAKvB,EAAOwB,eACnB,CAAA,GAAIlB,GAAaC,OAAOkB,SAASzB,UAGpCU,EAFEH,OAAOmB,YAEDnB,OAAOmB,YAAY1B,EAAO2B,QAG1B,IAAIpB,OAAOP,EAAO2B,QAE5B3B,EAAO4B,KAAKlB,GACLA,EACEpB,EAAYU,EAAQ6B,OAC7BnB,EAAQ1C,OAAO8D,OAAO9B,QAEE,IAAblC,GACT6C,EAAQ3C,OAAO+D,eAAe/B,GAC9BU,EAAQ1C,OAAO8D,OAAOnB,KAGtBD,EAAQ1C,OAAO8D,OAAOhE,GACtB6C,EAAQ7C,MAIRmC,EAAU,KACR+B,EAAQ5B,EAAW6B,QAAQjC,OAEjB,GAAVgC,SACK3B,EAAY2B,GAErB5B,EAAWrB,KAAKiB,GAChBK,EAAYtB,KAAK2B,OAiBd,IAAIwB,KAdL5C,EAAYU,EAAQP,IACtBO,EAAOmC,SAAQ,SAAShE,EAAOiE,OACzBC,EAAW5B,EAAO2B,EAAKlC,EAAQ,GAC/BoC,EAAa7B,EAAOtC,EAAO+B,EAAQ,GACvCQ,EAAM6B,IAAIF,EAAUC,MAGpBhD,EAAYU,EAAQN,IACtBM,EAAOmC,SAAQ,SAAShE,OAClBqE,EAAa/B,EAAOtC,EAAO+B,EAAQ,GACvCQ,EAAM+B,IAAID,MAIAxC,EAAQ,KAChB0C,EACA/B,IACF+B,EAAQ1E,OAAO2E,yBAAyBhC,EAAOuB,IAG7CQ,GAAsB,MAAbA,EAAMH,MAGnB7B,EAAMwB,GAAKzB,EAAOT,EAAOkC,GAAIhC,EAAQ,OAGnClC,OAAO4E,2BACLC,EAAU7E,OAAO4E,sBAAsB5C,OAClCkC,EAAI,EAAGA,EAAIW,EAAQlB,OAAQO,IAAK,KAGnCY,EAASD,EAAQX,MACjBa,EAAa/E,OAAO2E,yBAAyB3C,EAAQ8C,KACtCC,EAAWC,YAAe7C,KAG7CO,EAAMoC,GAAUrC,EAAOT,EAAO8C,GAAS5C,EAAQ,GAC1C6C,EAAWC,YACdhF,OAAOC,eAAeyC,EAAOoC,EAAQ,CACnCE,YAAY,SAMhB7C,OACE8C,EAAmBjF,OAAOkF,oBAAoBlD,OACzCkC,EAAI,EAAGA,EAAIe,EAAiBtB,OAAQO,IAAK,KAE5Ca,EADAI,EAAeF,EAAiBf,IAChCa,EAAa/E,OAAO2E,yBAAyB3C,EAAQmD,KACvCJ,EAAWC,aAG7BtC,EAAMyC,GAAgB1C,EAAOT,EAAOmD,GAAejD,EAAQ,GAC3DlC,OAAOC,eAAeyC,EAAOyC,EAAc,CACzCH,YAAY,aAKXtC,EAGFD,CAAOT,EAAQE,YAqBfkD,EAAWC,UACXrF,OAAOF,UAAUwF,SAAS5E,KAAK2E,YAmB/BjC,EAAiBmC,OACpBC,EAAQ,UACRD,EAAGE,SAAQD,GAAS,KACpBD,EAAGG,aAAYF,GAAS,KACxBD,EAAGI,YAAWH,GAAS,KACpBA,SApCTnE,EAAMuE,eAAiB,SAAwB5D,MAC9B,OAAXA,EACF,OAAO,SAEL6D,EAAI,oBACRA,EAAE/F,UAAYkC,EACP,IAAI6D,GAQbxE,EAAM+D,WAAaA,EAKnB/D,EAAMiC,kBAHY+B,SACI,iBAANA,GAAoC,kBAAlBD,EAAWC,IAO7ChE,EAAM2B,mBAHaqC,SACG,iBAANA,GAAoC,mBAAlBD,EAAWC,IAO7ChE,EAAM4B,oBAHcoC,SACE,iBAANA,GAAoC,oBAAlBD,EAAWC,IAW7ChE,EAAM+B,iBAAmBA,EAElB/B,EA3PM,GA8PqByE,EAAOC,UACvCD,UAAiBzE,WC7PnB2E,EAAiB,SAAUC,EAAMC,GACxBA,IAAMA,EAAO,IACE,mBAATA,IAAqBA,EAAO,CAAEC,IAAKD,QAGbE,EAF7BC,EAAiC,kBAAhBH,EAAKG,QAAwBH,EAAKG,OAEnDF,EAAMD,EAAKC,MAAkBC,EAQ9BF,EAAKC,IAPG,SAAUG,UACN,SAAU1F,EAAG2F,OACZC,EAAO,CAAEpC,IAAKxD,EAAGT,MAAOmG,EAAK1F,IAC7B6F,EAAO,CAAErC,IAAKmC,EAAGpG,MAAOmG,EAAKC,WAC1BH,EAAEI,EAAMC,MAKvBC,EAAO,UACH,SAASC,EAAWL,MACpBA,GAAQA,EAAKM,QAAiC,mBAAhBN,EAAKM,SACnCN,EAAOA,EAAKM,eAGHC,IAATP,MACe,iBAARA,EAAkB,OAAOQ,SAASR,GAAQ,GAAKA,EAAO,UAC7C,iBAATA,EAAmB,OAAOS,KAAKJ,UAAUL,OAEhDpC,EAAG8C,KACHnH,MAAMiB,QAAQwF,GAAO,KACrBU,EAAM,IACD9C,EAAI,EAAGA,EAAIoC,EAAK3C,OAAQO,IACrBA,IAAG8C,GAAO,KACdA,GAAOL,EAAUL,EAAKpC,KAAO,cAE1B8C,EAAM,OAGJ,OAATV,EAAe,MAAO,WAEE,IAAxBI,EAAKzC,QAAQqC,GAAc,IACvBD,EAAQ,OAAOU,KAAKJ,UAAU,mBAC5B,IAAIM,UAAU,6CAGpBC,EAAYR,EAAK3F,KAAKuF,GAAQ,EAC9Ba,EAAOnH,OAAOmH,KAAKb,GAAMc,KAAKjB,GAAOA,EAAIG,QAC7CU,EAAM,GACD9C,EAAI,EAAGA,EAAIiD,EAAKxD,OAAQO,IAAK,KAC1BE,EAAM+C,EAAKjD,GACX/D,EAAQwG,EAAUL,EAAKlC,IAEtBjE,IACD6G,IAAKA,GAAO,KAChBA,GAAOD,KAAKJ,UAAUvC,GAAO,IAAMjE,UAEvCuG,EAAKW,OAAOH,EAAW,GAChB,IAAMF,EAAM,KAtCf,CAuCLf,IC3CA,SAASqB,EAAYC,WACjBA,EAAGC,GAGP,SAASC,EAAaF,WAClBA,EAAGG,IAGP,SAASC,EAAaJ,WAClBA,EAAGK,IAGP,SAASC,EAAeN,EAA2BO,MACpDH,EAAaJ,GACfM,EAAYN,EAAGK,IAAKE,QACf,GAAIL,EAAaF,OACjB,MAAMQ,KAASR,EAAGG,IACrBG,EAAYE,EAAOD,QAEhB,GAAIR,EAAYC,OAChB,MAAMQ,KAASR,EAAGC,GACrBK,EAAYE,EAAOD,QAGrBA,EAAGP,GAIA,SAASS,EACdT,EACAU,UAEIN,EAAaJ,GACR,CAACK,IAAKI,EAA4BT,EAAGK,IAAKK,IACxCR,EAAaF,GACf,CAACG,IAAKH,EAAGG,IAAItG,KAAIiE,GAAK2C,EAA4B3C,EAAG4C,MACnDX,EAAYC,GACd,CAACC,GAAID,EAAGC,GAAGpG,KAAIiE,GAAK2C,EAA4B3C,EAAG4C,MAEnDA,EAAWV,SC9CTW,ECDI,SAASC,EAAMvH,EAAG2F,MAC7B3F,IAAM2F,EAAG,OAAO,KAEhB3F,GAAK2F,GAAiB,iBAAL3F,GAA6B,iBAAL2F,EAAe,IACtD3F,EAAEwH,cAAgB7B,EAAE6B,YAAa,OAAO,MAExCzE,EAAQO,EAAGiD,KACXtH,MAAMiB,QAAQF,GAAI,KACpB+C,EAAS/C,EAAE+C,SACG4C,EAAE5C,OAAQ,OAAO,MAC1BO,EAAIP,EAAgB,GAARO,KACf,IAAKiE,EAAMvH,EAAEsD,GAAIqC,EAAErC,IAAK,OAAO,SAC1B,KAKLtD,EAAEwH,cAAgBlF,OAAQ,OAAOtC,EAAEuC,SAAWoD,EAAEpD,QAAUvC,EAAE4E,QAAUe,EAAEf,SACxE5E,EAAEyH,UAAYrI,OAAOF,UAAUuI,QAAS,OAAOzH,EAAEyH,YAAc9B,EAAE8B,aACjEzH,EAAE0E,WAAatF,OAAOF,UAAUwF,SAAU,OAAO1E,EAAE0E,aAAeiB,EAAEjB,eAGxE3B,GADAwD,EAAOnH,OAAOmH,KAAKvG,IACL+C,UACC3D,OAAOmH,KAAKZ,GAAG5C,OAAQ,OAAO,MAExCO,EAAIP,EAAgB,GAARO,KACf,IAAKlE,OAAOF,UAAUwI,eAAe5H,KAAK6F,EAAGY,EAAKjD,IAAK,OAAO,MAE3DA,EAAIP,EAAgB,GAARO,KAAY,KACvBE,EAAM+C,EAAKjD,OAEViE,EAAMvH,EAAEwD,GAAMmC,EAAEnC,IAAO,OAAO,SAG9B,SAIFxD,GAAIA,GAAK2F,GAAIA,GDpCTgC,YAUN,SAASC,EAA0CjH,EAAQkH,SAC1D7E,EAAY,OACb,MAAM8E,KAAQD,EACbH,iBAAe/G,EAAKmH,KACtB9E,EAAK8E,GAAQnH,EAAImH,WAGd9E,EAQF,SAAS+E,EAA0CpH,EAAQkH,SAC1D7E,EAAO,IAAKrC,OACb,MAAMmH,KAAQD,SACV7E,EAAK8E,UAEP9E,EAMT9B,IAAIhC,UAAJ,OAA0B,iBAChB,OAAM,IAAIa,MAAMS,KAAIwH,GAAKC,EAAgBD,KAAIE,KAAK,eAM/CnC,EAAYkC,EAKlB,SAASE,EAAKnI,MACfoI,WAASpI,UACJA,QAGHqI,EAAMC,WAAStI,GAAKA,EAAIiI,EAAgBjI,MAG1CqI,EAAItF,OAAS,WACRsF,MAILE,EAAI,MACH,IAAIjF,EAAI,EAAGA,EAAI+E,EAAItF,OAAQO,IAAK,CAEnCiF,GAAKA,GAAK,GAAKA,EADFF,EAAIG,WAAWlF,GAE5BiF,GAAQA,SAEHA,EAGF,SAASE,EAAcT,UACf,IAANA,GAAqB,OAANA,EAGjB,SAASU,EAAYC,EAAqBC,UACxCD,EAAME,SAASD,GAMjB,SAASE,EAAQC,EAAmBvD,OACrClC,EAAI,MACH,MAAO0F,EAAGhJ,KAAM+I,EAAIE,aACnBzD,EAAExF,EAAGgJ,EAAG1F,YACH,SAGJ,EAMF,SAAS4F,EAASH,EAAmBvD,OACtClC,EAAI,MACH,MAAO0F,EAAGhJ,KAAM+I,EAAIE,cAClBzD,EAAExF,EAAGgJ,EAAG1F,YACJ,SAGJ,EAWF,SAAS6F,EAAaC,KAAYC,OAClC,MAAMC,KAAKD,EACdE,EAAWH,EAAME,GAAK,WAEjBF,EAGT,SAASG,EAAWH,EAAWC,OACxB,MAAMG,KAAYjD,EAAK8C,GAC1BI,cAAYL,EAAMI,EAAUH,EAAIG,IAAW,GAIxC,SAASE,EAAUC,EAAsBnE,SACxCoE,EAAe,GACfC,EAAI,OACNC,MACC,MAAMC,KAAOJ,EAChBG,EAAItE,EAAEuE,GACFD,KAAKD,IAGTA,EAAEC,GAAK,EACPF,EAAQzJ,KAAK4J,WAERH,EAsBF,SAASI,EAAYhK,EAAW2F,MACjC3F,EAAEiK,OAAStE,EAAEsE,YACR,MAEJ,MAAMhK,KAAKD,MACT2F,EAAEuE,IAAIjK,UACF,SAGJ,EAGF,SAASkK,EAAmBnK,EAAmB2F,OAC/C,MAAMnC,KAAOxD,KACZ2F,EAAEuE,IAAI1G,UACD,SAGJ,EAGF,SAAS4G,EAAgBpK,SACxBqK,EAAW,IAAInJ,QAChB,MAAM8G,KAAKhI,EAAG,OAGXsK,EAFaC,kBAAgBvC,GAEKxH,KAAI,CAACgK,EAAGlH,IAAa,IAANA,EAAUkH,EAAK,IAAGA,OACnEC,EAAmBH,EAAqB9J,KAAI,CAACS,EAAGqC,IAAMgH,EAAqBjK,MAAM,EAAGiD,EAAI,GAAG4E,KAAK,UACjG,MAAMsC,KAAKC,EACdJ,EAASxG,IAAI2G,UAGVH,EAOF,SAASK,EAAkB1K,EAAwB2F,eAC9CM,IAANjG,QAAyBiG,IAANN,GAGhBwE,EAAgBC,EAAgBpK,GAAIoK,EAAgBzE,IAItD,SAASgF,EAAQhK,UACM,IAArB4F,EAAK5F,GAAKoC,aAINwD,EAAOnH,OAAOmH,KAEdqE,EAAOxL,OAAOuK,OAEdV,EAAU7J,OAAO6J,QAMvB,SAAS4B,EAAUlF,UACX,IAANA,IAAoB,IAANA,EAMhB,SAASmF,EAAQxB,SAEhByB,EAAgBzB,EAAE0B,QAAQ,MAAO,YAG/B1B,EAAE2B,MAAM,QAAU,IAAM,IAAMF,EAGjC,SAASG,EAAevE,EAA2BwE,UACpDpE,EAAaJ,GACP,KAAIuE,EAAYvE,EAAGK,IAAKmE,MACvBtE,EAAaF,GACd,IAAGA,EAAGG,IAAItG,KAAKsG,GAA+BoE,EAAYpE,EAAKqE,KAAKjD,KAAK,aACxExB,EAAYC,GACb,IAAGA,EAAGC,GAAGpG,KAAKoG,GAA8BsE,EAAYtE,EAAIuE,KAAKjD,KAAK,aAEvEiD,EAAGxE,GAOP,SAASyE,EAAqBzK,EAAU0K,MACjB,IAAxBA,EAAatI,cACR,QAEH+E,EAAOuD,EAAaC,eACtBxD,KAAQnH,GAAOyK,EAAqBzK,EAAImH,GAAOuD,WAC1C1K,EAAImH,GAEN6C,EAAQhK,GAGV,SAAS4K,EAAUjC,UACjBA,EAAEkC,OAAO,GAAGC,cAAgBnC,EAAEoC,OAAO,GAQvC,SAASC,EAAoBC,EAAcC,EAAQ,eAClDC,EAASvB,kBAAgBqB,GACzBvB,EAAW,OACZ,IAAI/G,EAAI,EAAGA,GAAKwI,EAAO/I,OAAQO,IAAK,OACjCyI,EAAU,IAAGD,EAAOzL,MAAM,EAAGiD,GAAG9C,IAAIwL,eAAa9D,KAAK,SAC5DmC,EAASlK,KAAM,GAAE0L,IAAQE,YAEpB1B,EAASnC,KAAK,QAShB,SAAS+D,EAAoBL,EAAcC,EAA4C,eACpF,GAAEA,KAASG,cAAYzB,kBAAgBqB,GAAM1D,KAAK,SAG5D,SAASgE,EAAiBC,UACjBA,EAAOnB,QAAQ,kBAAmB,QAOpC,SAASoB,EAAmBR,SACzB,GAAErB,kBAAgBqB,GAAMpL,IAAI0L,GAAkBhE,KAAK,SAUtD,SAASmE,EAAWF,EAAgBG,EAAcC,UAChDJ,EAAOnB,QAAQ,IAAI1I,OAAOgK,EAAKtB,QAAQ,wBAAyB,QAAS,KAAMuB,GAOjF,SAASC,EAAoBZ,SAC1B,GAAErB,kBAAgBqB,GAAM1D,KAAK,OAMhC,SAASuE,EAAgBb,UACzBA,EAGErB,kBAAgBqB,GAAM7I,OAFpB,EAQJ,SAAS2J,KAAsBC,OAC/B,MAAMC,KAAOD,UACJ1G,IAAR2G,SACKA,EAOb,IAAIC,EAAY,GAOT,SAASC,EAASf,SACjBgB,IAAOF,SACNd,EAASiB,OAAOjB,GAAUgB,EAAKA,EAUjC,SAASE,EAAcC,UACrBC,EAAgBD,GAAQA,EAAQ,KAAIA,IAGtC,SAASC,EAAgBD,UACvBA,EAAKE,WAAW,MAMlB,SAASC,EAAeC,WACfrH,IAAVqH,SAGKA,EAAQ,IAAO,KAAO,IAM1B,SAASC,EAAUhO,WACpB6I,WAAS7I,KAGLG,MAAMH,KAAkBG,MAAM8N,WAAWjO,IE9X5C,MAAMkO,EAAM,MACNC,EAAS,SAETC,EAAQ,QAGRC,GAAI,IACJC,GAAI,IACJC,GAAK,KACLC,GAAK,KAGLC,GAAS,SACTC,GAAU,UACVC,GAAQ,QACRC,GAAS,SAGTC,GAAW,WACXC,GAAY,YACZC,GAAY,YACZC,GAAa,aAGbC,GAAQ,QAERC,GAAO,OAEPC,GAAS,SAETC,GAAQ,QACRC,GAAO,OAEPC,GAAQ,QAERC,GAAU,UACVC,GAAc,cAEdC,GAAgB,gBAEhBC,GAAc,cACdC,GAAa,aAGbC,GAAO,OACPC,GAAQ,QACRC,GAAS,SACTC,GAAM,MAENC,GAAU,UACVC,GAAO,OAEPC,GAAM,MACNC,GAAc,cAWrBC,GAA+B,CACnCC,MAAO,EACPC,OAAQ,EACRC,OAAQ,EACRC,QAAS,GAKJ,SAASC,GAAuB/K,UAC9BA,KAAK0K,GAGd,MAAMM,GAA6B,CACjCC,UAAW,EACXC,WAAY,EACZC,SAAU,EACVC,UAAW,GAsBN,MAAMC,GAAuB/J,EAAK0J,IAEnCM,GAAoC,CAjDxCvI,EAAG,EACHwC,EAAG,EACHgG,GAAI,EACJC,GAAI,KAgDDd,MAEAM,GAGHS,MAAO,EACPC,KAAM,EACNC,OAAQ,EAGRC,QAAS,EACTC,YAAa,EACbC,cAAe,EAEfC,YAAa,EACbC,WAAY,EACZhH,KAAM,EACNqD,MAAO,EACP4D,MAAO,EAGPC,MAAO,EACPC,KAAM,EACNC,OAAQ,EACR7N,IAAK,EACL8N,QAAS,EACTC,KAAM,EACNC,IAAK,EACLC,YAAa,GAKR,SAASC,GAAeC,UACtBA,IAAYnD,IAASmD,IAAYlD,IAAQkD,IAAYjD,GAK9D,MAAMkD,GAAkE,CACtEC,IAAK,EACLC,OAAQ,EACRC,MAAO,GAGIC,GAAiBzL,EAAKqL,IAE7BK,GAAgB,IACjB1B,MACAqB,IAGQM,GAAW3L,EAAK0L,KAEtBd,MAAOgB,GAAId,OAAQe,GAAId,QAASe,MAASC,IAA4BL,IACrEJ,IAAKU,GAAIT,OAAQU,GAAIT,MAAOU,MAAOC,IAAiCJ,GAsBpE,SAASK,GAAUtK,WACf4J,GAAc5J,GAKlB,MAAMuK,GAAmD,CAAC9E,GAAIC,GAAIO,GAAWC,GAAYJ,GAAQF,IAEjG,SAAS4E,GAAwB5N,UACzB6N,GAAoB7N,KACjBA,EAoBX,SAAS6N,GAA+CnB,UACrDA,QACD7D,UACIF,QACJG,UACIF,QACJS,UACIF,QACJG,UACIF,QACJF,UACID,QACJD,UACID,UAEJ2D,EAiBF,SAASoB,GAAqBpB,MAC/B3B,GAAuB2B,UACjBA,QACDzD,SACI,kBACJC,SACI,gBACJH,SACI,mBACJC,SACI,qBAGN0D,EAMF,SAASqB,GAA4CrB,UAClDA,QACD/D,UACIE,QACJD,UACIE,QACJK,UACIE,QACJD,UACIE,QACJL,UACIC,QACJH,UACIC,IAON,SAASgF,GAAetB,UACrBA,QACD/D,QACAE,SACI,aACJD,QACAE,SACI,UAkCb,MACE/F,EAAGkL,GACH1I,EAAG2I,GAEH3C,GAAI4C,GACJ3C,GAAI4C,GACJjD,SAAUkD,GACVpD,UAAWqD,GACXlD,UAAWmD,GACXrD,WAAYsD,GACZ7D,MAAO8D,GACP7D,OAAQ8D,GACR7D,OAAQ8D,GACR7D,QAAS8D,MAENC,IACDvD,GAESwD,GAAuBxN,EAAKuN,IAG5BE,GAA+B,CAC1ChM,EAAG,EACHwC,EAAG,GAEQyJ,GAA0B1N,EAAKyN,IAGrC,SAASE,GAAOvC,UACdA,KAAWqC,GAGb,MAAMG,GAAqC,CAChDvE,MAAO,EACPE,OAAQ,GAGGsE,GAAgC7N,EAAK4N,IAG3C,SAASE,GAAwBC,SAClB,UAAbA,EAAuB1G,GAAIC,GAIpC,MAIEuD,KAAMmD,GACNjD,QAASkD,GACTjD,KAAMkD,GACNjD,IAAKkD,GACLjD,YAAakD,GAEbtD,OAAQuD,GACRpR,IAAKqR,GACL1D,MAAO2D,MACJC,IACDjB,GACSkB,GAA6BzO,EAAKwO,IA6B/C,MAAME,GAAsB,IACvBjB,MACAG,MACAY,IAIQG,GAAiB3O,EAAK0O,IAG5B,SAASE,GAAexD,WACpBsD,GAAoBtD,GAWxB,SAASyD,GAAYzD,EAA0B0D,UA6BtD,SAA0B1D,UAChBA,QACDnD,QACAC,QACAC,QAGAgB,QACAL,QACAC,QACAC,QACAC,QACAJ,QACAN,QACAC,QACAC,QACAC,QAIAtB,OACAF,OACAC,SACI4H,QACJ1H,QACAC,QACAO,QACAC,UAEIkH,QACJzH,QACAC,QACAO,QACAC,SACI,CACLiH,KAAM,SACNC,IAAK,SACLC,MAAO,SACPC,KAAM,SACNC,KAAM,SACNC,OAAQ,SACRC,MAAO,SACPC,OAAQ,SACRC,KAAM,SACNC,KAAM,SACNC,MAAO,eAENtH,SACI,CACLkH,MAAO,SACPE,KAAM,SACNJ,KAAM,SACNC,OAAQ,SACRE,OAAQ,SACRN,IAAK,SACLrE,KAAM,SACN6E,KAAM,SACNC,MAAO,eAENhH,SACI,CACL+G,KAAM,SACNH,MAAO,SACPE,KAAM,SACNJ,KAAM,SACNC,OAAQ,SACRE,OAAQ,SACRN,IAAK,SACLU,SAAU,eAETxH,SACI,CAACmH,MAAO,SAAUK,SAAU,eAChChH,SACI,CAACiC,KAAM,eACXvC,SACI,CAACiH,MAAO,SAAUC,OAAQ,SAAU3E,KAAM,eAC9C3B,SACI,CAACiG,MAAO,eACZxH,QAEAF,SACI,CAACoD,KAAM,SAAUgF,IAAK,eAC1BjI,QACAF,SACI,CAACmI,IAAK,WAhHVC,CAAiB1E,GAAS0D,GAGnC,MAAMC,GAAoC,CAExCc,IAAK,SACLZ,KAAM,SACNC,IAAK,SACLI,OAAQ,SACRM,SAAU,SACVT,MAAO,SACPO,KAAM,SACNL,KAAM,SACNE,MAAO,SACPH,KAAM,SACNI,OAAQ,SACRG,MAAO,SACP9E,KAAM,SACN4E,KAAM,WAGDG,SAAUG,MAAOf,IAA6BD,GA+F9C,SAASiB,GAAU5E,UAChBA,QACD/D,QACAC,QACAK,QACAF,QACAY,QACAC,QACAI,QACAH,QACAC,QACAC,QAGAlB,QACAC,QACAI,QACAF,eAGAN,OACAF,OACAC,OACAiB,QACAO,QAEAC,QACAI,QACAC,QACAC,QACAC,SACI,gBAGJlB,QACAC,QACAC,SACI,gBAIJN,QACAC,QACAC,QACAC,QACAc,QACAC,QACAF,WCnmBT,MAAMoH,GAAwC,CAC5CC,OAAQ,EACRC,OAAQ,EACRC,QAAS,EACTC,MAAO,EACPC,SAAU,EACVC,QAAS,EACTC,IAAK,EACLC,KAAM,EACNC,OAAQ,EACRC,IAAK,EACLC,QAAS,EACTC,GAAI,EACJC,GAAI,EACJC,IAAK,EACLC,IAAK,EACLC,OAAQ,EACRC,MAAO,EACPC,OAAQ,EACRC,IAAK,EACLC,MAAO,EACPjO,OAAQ,EACRkO,SAAU,EACVC,UAAW,GAGAC,GAA4B,CACvCnB,MAAO,EACPM,IAAK,EACLH,IAAK,GAeA,SAASiB,GAAYhY,WACjBA,KAAOA,EAAC,OAGZ,SAASiY,GAAYjY,WACjBA,KAAOA,EAAC,OAKZ,SAASkY,GAAclY,UACrBsI,WAAStI,MAAQwW,GAAmBxW,GAGtC,MAAMmY,GAAoC,CAAC,QAAS,QAAS,UAAW,YAExE,SAASC,GAAsBC,UAC7B/P,WAAS+P,IAAc3P,EAASyP,GAAcE,GAQhD,MAAMC,GAA+B,CAAC,QAAS,MAAO,WAAY,QAAS,WAOrEC,GAAyBC,QAFU,CAAC,OAAQ,UAAW,SAAU,KAAM,KAAM,MAAO,QCgB1F,SAASC,GAAYC,UACtB7N,YAAU6N,KACZA,EAAMC,GAAaD,OAAKzS,IAGxB,MACAM,EAAKmS,GACFlY,KAAIoY,GAAMC,GAAkBH,EAAIE,IAAM9N,EAAS,IAAG8N,KAAK3P,EAAQyP,EAAIE,OAAS9N,EAAS,IAAG8N,KAAKF,EAAIE,QACjG1Q,KAAK,IAOL,SAAS4Q,GAAUJ,UACT,IAARA,GAAiBK,GAAYL,KAASA,EAAIM,OAM5C,SAASC,GAASP,SACR,WAARA,GAAqBK,GAAYL,KAAuB,IAAfA,EAAIM,OAG/C,SAASD,GAAYL,UACnBQ,WAASR,GAGX,SAASG,GAAkBM,UACzBA,MAAAA,SAAAA,EAAM,MAGR,SAASC,GAAYzH,UAClBA,QACDlE,OACAC,OACAkB,QACAJ,QACAC,QACAC,QACAO,QACAH,QACAC,QACAC,QAGAL,UACI,OACJO,UACI,iBAEA,ICzIN,SAASmK,GAAU5U,UACjBA,KAAOA,EAAC,KAGV,SAAS6U,GAAoClW,SAC5CyE,EAAQtB,EAAKnD,GAAS,IACtBmW,EAAsB,OACvB,MAAMzR,KAAQD,EACjB0R,EAASzR,GAAQ0R,GAAiBpW,EAAM0E,WAEnCyR,EC2CF,SAASE,GAAmBC,SAO3BC,OAEJA,EAFIC,MAGJA,EAHIC,OAIJA,EAJIC,OAKJA,EALIxM,MAMJA,EANIyM,MAOJA,EAPIrJ,MAUJA,EAVIsJ,cAaJA,EAbIC,aAcJA,EAdIC,iBAeJA,EAfIC,kBAgBJA,EAhBIC,mBAiBJA,EAjBIC,mBAkBJA,EAlBIC,gBAmBJA,KAGGC,GACDb,EAQEc,EAA0D,IAC1Db,EAAS,CAACA,OAAAA,GAAU,MACpBC,EAAQ,CAACA,MAAAA,GAAS,MAClBC,EAAS,CAACA,OAAAA,GAAU,MACpBC,EAAS,CAACA,OAAAA,GAAU,WACV7T,IAAVqH,EAAsB,CAACA,MAAAA,GAAS,WACtBrH,IAAV8T,EAAsB,CAACA,MAAAA,GAAS,IAIhCU,EAA4C,IAC5CT,EAAgB,CAACA,cAAAA,GAAiB,MAClCC,EAAe,CAACA,aAAAA,GAAgB,MAChCC,EAAmB,CAACA,iBAAAA,GAAoB,MACxCC,EAAoB,CAACA,kBAAAA,GAAqB,MAC1CC,EAAqB,CAACA,mBAAAA,GAAsB,MAC5CC,EAAqB,CAACA,mBAAAA,GAAsB,MAC5CC,EAAkB,CAACA,gBAAAA,GAAmB,UAKrC,CAACI,gBA5BuC,IAC1CH,KACC7J,EAAQ,CAACC,KAAMD,GAAS,IA0BLiK,mBAFE/S,EAAK8R,EAAa,CAAC,QAAS,WAAY,KAAM,KAAM,UAElCc,uBAAwBA,EAAwBC,SAAAA,GAGxF,SAASG,GAAO9Q,UACdxB,WAASwB,IAAO5J,UAAQ4J,IAAMxB,WAASwB,EAAE,ICxC3C,SAAS+Q,GAAYpW,UACnBA,KAAOA,EAAC,OAiCV,SAASqW,GAAcC,WACnBA,EAAK,KAoFT,SAASC,GAAgBC,UACzB/a,UAAQ+a,KACJ,UAAWA,GAAU,SAAUA,GA+E1C,MAuEaC,GAAkB3U,EAvEsB,CACnD4U,KAAM,EACN1J,YAAa,EACb2J,SAAU,EACVC,oBAAqB,EACrBC,MAAO,EACPzK,QAAS,EACTF,KAAM,EACNG,YAAa,EACbF,OAAQ,EACR2K,UAAW,EACXvK,YAAa,EACbD,cAAe,EACfE,WAAY,EACZuK,iBAAkB,EAClBC,WAAY,EACZC,aAAc,EACdC,iBAAkB,EAClBC,WAAY,EACZC,SAAU,EACVC,SAAU,EACVC,YAAa,EACbC,YAAa,EACb/R,KAAM,EACNiH,MAAO,EACP+K,YAAa,EACbC,QAAS,EACTpC,OAAQ,EACRqC,MAAO,EACPC,SAAU,EACVhL,KAAM,EACNiL,IAAK,EACLC,GAAI,EACJC,GAAI,EACJC,SAAU,EACVzC,MAAO,EACPjK,OAAQ,EACRF,MAAO,EACPtC,MAAO,EACPmP,KAAM,EACNC,SAAU,EACVC,WAAY,EACZC,UAAW,EACXC,UAAW,EACXC,WAAY,EACZC,OAAQ,EACRxL,KAAM,EACND,QAAS,EACT0L,aAAc,EACdC,oBAAqB,EACrBC,qBAAsB,EACtBC,uBAAwB,EACxBC,wBAAyB,EACzBC,OAAQ,EACRC,MAAO,EACPC,OAAQ,EACR/L,IAAK,EACLgM,OAAQ,IAgBGC,GAAoC,CAC/CrH,IAAK,EACLZ,KAAM,EACNkI,MAAO,EACPhI,MAAO,EACPO,KAAM,EACNrK,KAAM,EACN+J,KAAM,EACNC,KAAM,EACN1E,MAAO,EACPhN,OAAQ,EACRkN,KAAM,EACN8E,MAAO,GAIIyH,GAA2B,CACtC,eACA,sBACA,uBACA,yBACA,2BCnWK,SAASC,GACd7T,SAEM8T,EAAY3d,UAAQ6J,EAAI8T,WACzB9T,EAAI8T,UAA0Erd,IAAIsd,IACnFA,GAA4B/T,EAAI8T,iBAE7B,IACFrE,GAAgCzP,GACnC8T,UAAAA,GAIG,SAASrE,GAAoBja,MAC9B8Z,GAAU9Z,GAAQ,OACdwe,KAACA,KAASxD,GAAQhb,QACjB,CAACye,OAAQD,KAASxD,UAEpBhb,EAGF,SAASue,GACdve,MAEI8Z,GAAU9Z,GAAQ,OACdwe,KAACA,KAASxD,GAAQhb,QACjB,CAACye,OAAQD,KAASxD,UAEpBhb,EAGF,SAAS0e,GAAoB1e,MAC9B8Z,GAAU9Z,GAAQ,OACdwe,KAACA,KAASxD,GAAQhb,QACjB,CAACye,OAAQD,KAASxD,UAEvBM,GAAYtb,GACPA,OAEQ0G,IAAV1G,EAAsB,CAACA,MAAAA,QAAS0G,EAGlC,SAASiY,GAAyBC,UACnCtD,GAAYsD,GACPA,EAAIH,OAENhS,cAAYmS,EAAI5e,OAGlB,SAAS6e,GAAoBtU,UAC9B+Q,GAAY/Q,GACPA,EAAEkU,OAEC,MAALlU,EAAY,KAAOkC,cAAYlC,GAGjC,SAASuU,GAAgBpe,EAAkBqe,EAAkBC,OAC7D,MAAM/U,KAAY+U,EAAW,OAC1Bhf,EAAQif,GAAchV,EAAU8U,EAAMG,QAASH,EAAMI,aAC7CzY,IAAV1G,IACFU,EAAEuJ,GAAYyU,GAAiB1e,WAG5BU,EAGF,SAAS0e,GAAUtJ,SACjB,GAAGuJ,OAAOvJ,EAAKzU,KAAMyU,EAAKwJ,OAAS,IAGrC,SAASC,GACdnN,EACA0D,EACAqJ,EACAK,EAGI,UAEEC,UAACA,EAADC,eAAYA,GAAkBF,SAChCC,QAAiC/Y,IAApBoP,EAAK2J,GACb3J,EAAK2J,QACe/Y,IAAlBoP,EAAK1D,GACP0D,EAAK1D,IACHsN,GAAoBD,GAAaA,IAAcrN,EAInD6M,GAAc7M,EAAS0D,EAAMqJ,EAAQK,QAJrC,EAWF,SAASP,GACd7M,EACA0D,EACAqJ,GACAM,UAACA,GAA4C,WAEtCtS,EAELsS,EAAYE,GAAmBvN,EAAS0D,EAAMqJ,EAAOG,YAAS5Y,EAC9DiZ,GAAmBvN,EAAS0D,EAAMqJ,EAAOG,OAEzCG,EAAYN,EAAOrJ,EAAKzU,MAAMoe,QAAa/Y,EAE3CyY,EAAOrJ,EAAKzU,MAAM+Q,GAIlBqN,EAAYN,EAAOrJ,KAAK2J,GAAaN,EAAOrJ,KAAK1D,IAI9C,SAASuN,GACdpX,EACAuN,EACA8J,UAEOC,GAAetX,EAAM6W,GAAUtJ,GAAO8J,GAGxC,SAASC,GACdxG,EACAyG,EACAF,OAGI5f,EADJ8f,EAAS1W,QAAM0W,OAEV,MAAMR,KAASQ,EAAQ,OACpBC,EAAcH,EAAiBN,GAEjCS,QAA4CrZ,IAA7BqZ,EAAY1G,KAC7BrZ,EAAQ+f,EAAY1G,WAGjBrZ,EAMF,SAASggB,GACdC,EACAC,UAEO9W,QAAM6W,GAAU3f,QACrB,CAACyJ,EAAGoW,KACFpW,EAAEqW,MAAMxf,KAAKyf,GAAQF,EAAiBD,IACtCnW,EAAE6H,MAAMhR,KAAKuf,EAAgBlZ,MAAQ,aAC9B8C,IAET,CAACqW,MAAO,GAAIxO,MAAO,KAMhB,SAAS0O,GAAoBC,EAAqCC,SACjEC,EAAS,IAAIF,UAEnBC,EAAGxc,SAAQ0c,QACJ,MAAMC,KAAaF,KAElB1Y,EAAU4Y,EAAWD,UAI3BD,EAAO7f,KAAK8f,MAEPD,EAGF,SAASG,GAAWC,EAA0BC,UAC/C/Y,EAAU8Y,EAAQC,KAAYA,EAEzBD,EACGA,EAIH,IAAIzX,QAAMyX,MAAYzX,QAAM0X,IAASnY,KAAK,MAF1CmY,EAMJ,SAASC,GAAoBC,EAAkCC,SAC9DC,EAAQF,EAAGhhB,MACXmhB,EAAQF,EAAGjhB,SAEJ,MAATkhB,GAA2B,OAAVC,QACZ,CACLC,SAAUJ,EAAGI,SACbphB,MAAO,MAEJ,IAAKqb,GAAO6F,IAAU5F,GAAY4F,MAAY7F,GAAO8F,IAAU7F,GAAY6F,UACzE,CACLC,SAAUJ,EAAGI,SACbphB,MAAO4gB,GAAWM,EAAOC,IAEtB,GAAI9F,GAAO6F,IAAU5F,GAAY4F,SAC/B,CACLE,SAAUJ,EAAGI,SACbphB,MAAOkhB,GAEJ,GAAI7F,GAAO8F,IAAU7F,GAAY6F,SAC/B,CACLC,SAAUJ,EAAGI,SACbphB,MAAOmhB,GAEJ,KAAK9F,GAAO6F,IAAW5F,GAAY4F,IAAW7F,GAAO8F,IAAW7F,GAAY6F,UAC1E,CACLC,SAAUJ,EAAGI,SACbphB,MAAOsgB,GAAoBY,EAAOC,UAIhC,IAAIzd,MAAM,ucCjOX,SAAS2d,GAAYC,SAClB,yBAAwB9a,EAC9B8a,4JAKG,MAAMC,GAAiB,gEAEvB,SAASC,GAAuB7T,SAE7B,GADc,SAARA,EAAkB,QAAU,sEAIrC,SAAS8T,GAAuC9T,SAG7C,GAFc,SAARA,EAAkB,QAAU,oEACb,SAARA,EAAkB,IAAM,QAIxC,SAAS+T,GAAYtP,UACnBA,EACF,iBAAgBA,gCAAsCsB,GAAetB,MACrE,iDAKA,SAASuP,GAAavP,SACnB,qBAAoBA,iCAIvB,SAASwP,GAAmCxP,SACzC,mDAAkDA,0BAGrD,SAASyP,GAAuBzP,EAAkB0G,SAC/C,mDAAkD1G,yCAA+C0G,OAOpG,SAASgJ,GAAsBhM,SAC5B,+BAA8BA,SAuBjC,MAAMiM,GAAuB,+EAS7B,SAASC,GAA0B3gB,SAChC,+CAA8CA,4BAYjD,SAAS4gB,GAAe7B,EAAe8B,EAAeC,SACnD,6BAA4B/B,SAAa+B,6CAAoDD,KAehG,SAASE,GAA2BhQ,SACjC,wFAAuFA,iBAuB1F,SAASiQ,GAAiBhhB,SACvB,uBAAsBA,MAczB,SAASihB,GAAcjhB,EAA+Bme,SACrDpO,KAACA,EAADC,OAAOA,GAAUmO,QACf,kBAAiBne,0BACvB+P,GAAQC,EAAS,kBAAoBD,EAAO,OAAS,YAQlD,SAASmR,GAAcC,EAAmBpQ,SACvC,YAAW5L,EACjBgc,oBACiBpQ,wEAMd,SAASqQ,GACdrQ,EACAsQ,EACAC,SAEQ,GAAEvQ,yCAA+CsQ,KAAeC,EAAQ,SAAQA,IAAS,MAO5F,SAASC,GAAwBxQ,SAC9B,GAAEA,8DAGL,SAASyQ,GAAsCzQ,SAC5C,GAAEA,2GAOL,SAAS0Q,GAA4B1Q,EAAkB/Q,SACpD,2BAA0B+Q,iBAAuB/Q,oDAC9C,YAATA,EAAqB,QAAU,eA+B5B,SAAS0hB,GAAwCP,SAC9C,2DAA0Dhc,EAAUgc,OAGvE,SAASQ,GAAuClK,SAC7C,2CAA0CA,4EAG7C,SAASmK,GAA+BT,SACrC,+DAA8Dhc,EAAUgc,OAe3E,SAASU,GAAkCC,EAAsBC,EAAkBhR,SAChF,GAAEA,cAAoBgR,0CAAiDD,WAO1E,SAASE,GAAYjR,SAClB,iBAAgBA,6BAA+C,UAAZA,EAAsB,IAAM,qBA8BlF,MAAMkR,GACX,4FA4BK,SAASC,GAAgBC,EAAkBxjB,SACxC,WAAUwjB,MAAahd,EAAUxG,MA4BpC,SAASyjB,GAAsBxZ,SAC5B,kCAAiCA,KAIpC,SAASyZ,GAAyBtR,SAC/B,WAAUA,kCCxWpB,MAAMuR,GAAOC,SAAOC,QACpB,IAAIC,GAA2BH,GAuExB,SAASI,MAAQ3W,GACtB0W,GAAQC,QAAQ3W,GCyCX,SAAS4W,GAAW9e,MACrBA,GAAKyU,WAASzU,OACX,MAAM+e,KAAQC,MACbD,KAAQ/e,SACH,SAIN,EAGF,MAAMif,GAAS,CACpB,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,YAEWC,GAAeD,GAAOljB,KAAIojB,GAAKA,EAAElY,OAAO,EAAG,KAE3CmY,GAAO,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YAC1EC,GAAaD,GAAKrjB,KAAIujB,GAAKA,EAAErY,OAAO,EAAG,KA0EpD,SAASsY,GAAcD,EAA4BE,SAC3CC,EAA6B,MAE/BD,QAAuBhe,IAAV8d,EAAEI,KACb5d,EAAKwd,GAAGhhB,OAAS,IACnBqhB,GF4GC,SAAoBL,SACjB,8BAA6Bhe,EAAUge,iDE7GlCK,CAAuBL,WAChCA,EAAIpc,EAAUoc,IACLI,UAIEle,IAAX8d,EAAEM,KACJH,EAAM/jB,KAAK4jB,EAAEM,MAIbH,EAAM/jB,KAAK,WAGG8F,IAAZ8d,EAAEO,MAAqB,OACnBA,EAAQL,EA3ElB,SAAwBL,MAClBrW,EAAUqW,KACZA,GAAKA,GAGHxb,WAASwb,UAEJA,EAAI,EACN,OACCW,EAASX,EAAEY,cACXC,EAAaf,GAAOrgB,QAAQkhB,OACd,IAAhBE,SACKA,QAEHC,EAASH,EAAO7Y,OAAO,EAAG,GAC1BiZ,EAAkBhB,GAAatgB,QAAQqhB,OACpB,IAArBC,SACKA,QAIH,IAAI1hB,MAAMmhB,GAA4B,QAASR,KAsD3BgB,CAAeb,EAAEO,OAASP,EAAEO,MACtDJ,EAAM/jB,KAAKmkB,QACN,QAAkBre,IAAd8d,EAAEc,QAAuB,OAC5BA,EAAUZ,EA/FpB,SAA0Ba,MACpBvX,EAAUuX,KACZA,GAAKA,GAGH1c,WAAS0c,UACPA,EAAI,GACNV,GAASA,GAA4B,UAAWU,IAG3CA,EAAI,QAGL,IAAI7hB,MAAMmhB,GAA4B,UAAWU,IAkF3BC,CAAiBhB,EAAEc,SAAWd,EAAEc,QAC5DX,EAAM/jB,KAAKiI,WAASyc,GAAqB,EAAVA,EAAe,GAAEA,YAEhDX,EAAM/jB,KAAK,WAGE8F,IAAX8d,EAAEiB,KACJd,EAAM/jB,KAAK4jB,EAAEiB,WACR,QAAc/e,IAAV8d,EAAEI,IAAmB,OAGxBA,EAAMF,EAhEhB,SAAsBF,MAChBxW,EAAUwW,KACZA,GAAKA,GAGH3b,WAAS2b,UAGJA,EAAI,EACN,OACCkB,EAASlB,EAAES,cACXU,EAAWrB,GAAKxgB,QAAQ4hB,OACZ,IAAdC,SACKA,QAEHC,EAASF,EAAOvZ,OAAO,EAAG,GAC1B0Z,EAAgBtB,GAAWzgB,QAAQ8hB,OAClB,IAAnBC,SACKA,QAGH,IAAIniB,MAAMmhB,GAA4B,MAAOL,KA2C3BsB,CAAatB,EAAEI,KAAOJ,EAAEI,IAChDD,EAAM/jB,KAAKiI,WAAS+b,GAAOA,EAAM,EAAK,GAAEA,YAExCD,EAAM/jB,KAAK,OAKR,MAAMmlB,IAAY,CAAC,QAAS,UAAW,UAAW,gBAA0B,OACzEC,EAAOxB,EAAEuB,GACfpB,EAAM/jB,UAAqB,IAATolB,EAAuB,EAAIA,UAGxCrB,EASF,SAASsB,GAAezB,SAGvB5X,EAF6B6X,GAAcD,GAAG,GAE/B7b,KAAK,aAEtB6b,EAAE0B,IACI,OAAMtZ,KAEN,YAAWA,KC7RhB,MAAMuZ,GAA8B,CACzCrB,KAAM,EACNQ,QAAS,EACTP,MAAO,EACPqB,KAAM,EACNxB,IAAK,EACLyB,UAAW,EACXZ,KAAM,EACNa,MAAO,EACPC,QAAS,EACTC,QAAS,EACTC,aAAc,GAKHvC,GAAiBld,EAAKmf,IAqH5B,SAASO,GAAcxmB,UACrBA,EAAE2N,WAAW,OAmDf,MAAM8Y,GAAwC,cACrC,2BACK,cAGd,SAASC,GAAiBb,UACxB7B,GAAe2C,QAAO5C,GAAQ6C,GAAiBf,EAAU9B,KAI3D,SAAS6C,GAAiBC,EAAwBhB,SACjDliB,EAAQkjB,EAAajjB,QAAQiiB,WAE/BliB,EAAQ,OAKRA,EAAQ,GAAkB,YAAbkiB,GAA6D,MAAnCgB,EAAa9a,OAAOpI,EAAQ,QAKnEkjB,EAAavjB,OAASK,EAAQ,GAAkB,QAAbkiB,GAAyD,MAAnCgB,EAAa9a,OAAOpI,EAAQ,OAGrFA,EAAQ,GAAkB,SAAbkiB,GAA0D,MAAnCgB,EAAa9a,OAAOpI,EAAQ,MAU/D,SAASmjB,GAAUD,EAAwB3G,GAAe6G,IAACA,GAAuB,CAACA,KAAK,UACvFC,EAAW9a,EAAoBgU,GAE/B8F,EAAMQ,GAAcK,GAAgB,MAAQ,OAW9CI,QAEEC,EAAyB,OAE1B,MAAMnD,KAAQC,GACb4C,GAAiBC,EAAc9C,KACjCmD,EAASnD,GAdM,aADL8B,EAeY9B,GAZd,IAAGiC,YAAcgB,QAEjB,GAAEhB,IAAMH,KAAYmB,KAW5BC,EAAelD,OAhBL8B,SAoBVkB,IACFG,EAASD,IAAiB,MDgDvB,SAA4B3C,SAG3B5X,EAF6B6X,GAAcD,GAAG,GAE/B7b,KAAK,aAEtB6b,EAAE0B,IACI,OAAMtZ,KAEN,YAAWA,KCrDdya,CAAmBD,GAGrB,SAASE,GAA4BvB,OACrCA,eAICwB,EAAgBX,GAAiBb,SAC/B,qBAAoBvf,EAAU+gB,OAAmB/gB,EAAUmgB,OAqB9D,SAASa,GAAkBzB,OAC3BA,aAID0B,SACA1e,WAASgd,GACX0B,EAAS,CACPzB,KAAMD,GAECpM,WAASoM,KAClB0B,EAAS,IACJ1B,KACCA,EAASC,KAAO,CAACA,KAAMD,EAASC,MAAQ,KAI5CU,GAAce,EAAOzB,QACvByB,EAAOvB,KAAM,EACbuB,EAAOzB,KAAwByB,EAAOzB,KAjK/B7Z,OAAO,IAoKTsb,ECzOF,SAASC,GAAsBC,UAC7BA,KAAeA,EAAUvH,YAA6B1Z,IAApBihB,EAAU3f,MAU9C,SAAS4f,GAAmBD,UAC1BA,KAAeA,EAAUvH,YAA0B1Z,IAAjBihB,EAAUE,GAU9C,SAASC,GAAoBH,UAC3BA,KAAeA,EAAUvH,YAA2B1Z,IAAlBihB,EAAUI,IAU9C,SAASC,GAAmBL,UAC1BA,KAAeA,EAAUvH,YAA0B1Z,IAAjBihB,EAAUM,GAU9C,SAASC,GAAoBP,UAC3BA,KAAeA,EAAUvH,YAA2B1Z,IAAlBihB,EAAUQ,IAa9C,SAASC,GAAsBT,MAChCA,MAAAA,GAAAA,EAAWvH,MAAO,IAChBzf,UAAQgnB,EAAUnM,QAAqC,IAA3BmM,EAAUnM,MAAMhY,cACvC,EACF,GAAI8X,GAAYqM,EAAUnM,cACxB,SAGJ,EAkBF,SAAS6M,GAAsBV,UAElCA,KAAeA,EAAUvH,QAAUzf,UAAQgnB,EAAUW,QAAU3nB,UAAQgnB,EAAUY,KAQ9E,SAASC,GACdb,UAUEU,GAAsBV,IACtBD,GAAsBC,IACtBS,GAAsBT,IACtBC,GAAmBD,IACnBK,GAAmBL,IACnBG,GAAoBH,IACpBO,GAAoBP,GAIxB,SAASc,GAAmBle,EAA+Dwb,UAClF2C,GAAUne,EAAG,CAACwb,SAAAA,EAAU4C,UAAU,IAQpC,SAASC,GAAsBjB,EAA2BkB,GAAa,eACtEzI,MAACA,GAASuH,EACV5B,YAAWyB,GAAkBG,EAAU5B,8BAA5B+C,EAAuC9C,KAClDgB,EAAYjB,UAINgD,GAAkBhD,EAAU3F,MACpCC,GAAQsH,EAAW,CAACnJ,KAAM,aAE1BkJ,GAAsBC,SAChB,GAAEX,OAAeyB,GAAmBd,EAAU3f,MAAO+d,KACxD,GAAI6B,GAAmBD,GAAY,OAEhC,GAAEX,KAAayB,GADTd,EAAUE,GACyB9B,KAC5C,GAAIiC,GAAmBL,GAAY,OAEhC,GAAEX,KAAayB,GADTd,EAAUM,GACyBlC,KAC5C,GAAI+B,GAAoBH,GAAY,OAEjC,GAAEX,MAAcyB,GADVd,EAAUI,IAC0BhC,KAC7C,GAAImC,GAAoBP,GAAY,OAEjC,GAAEX,MAAcyB,GADVd,EAAUQ,IAC0BpC,KAC7C,GAAIsC,GAAsBV,SACvB,YA9BZ,SAA6Btc,EAAgD0a,UACpE1a,EAAKpK,KAAIsJ,GAAKke,GAAmBle,EAAGwb,KA6BtBiD,CAAoBrB,EAAUW,MAAOvC,GAAUpd,KAAK,UAAUqe,YAC5E,GA5DF,SAA+BW,UAC7BA,KAAeA,EAAUvH,YAA6B1Z,IAApBihB,EAAUtP,MA2DxC4Q,CAAsBtB,UACxBuB,GAAoBlC,EAAWW,EAAUtP,OAC3C,GAAI+P,GAAsBT,GAAY,OACrCnM,MAACA,GAASmM,EACVwB,EAAQ7N,GAAYE,GAAS,CAACiD,OAAS,GAAEjD,EAAMiD,aAAejD,EAAM,GACpE4N,EAAQ9N,GAAYE,GAAS,CAACiD,OAAS,GAAEjD,EAAMiD,aAAejD,EAAM,MAE5D,OAAV2N,GAA4B,OAAVC,GAAkBP,QAEpC,WACA7B,EACA,MACAyB,GAAmBU,EAAOpD,GAC1B,KACA0C,GAAmBW,EAAOrD,GAC1B,WAIEsD,EAAQ,UACA,OAAVF,GACFE,EAAMzoB,KAAM,GAAEomB,QAAgByB,GAAmBU,EAAOpD,MAE5C,OAAVqD,GACFC,EAAMzoB,KAAM,GAAEomB,QAAgByB,GAAmBW,EAAOrD,MAGnDsD,EAAM7lB,OAAS,EAAI6lB,EAAM1gB,KAAK,QAAU,aAI3C,IAAIjF,MAAO,4BAA2B8C,EAAUmhB,MAGjD,SAASuB,GAAoBlC,EAAmB3O,GAAQ,UACzDA,EACM,WAAU2O,mBAA2BA,KAErC,YAAWA,oBAA4BA,KAI5C,SAASsC,GAAmBrjB,gBAC7BuiB,GAAiBviB,IAAMA,EAAE8f,SACpB,IACF9f,EACH8f,mBAAUyB,GAAkBvhB,EAAE8f,8BAApBwD,EAA+BvD,MAGtC/f,EC5QF,MAcMujB,GAbG,eAcHC,GAbF,UAcEC,GAbD,WAcCC,GAbF,UAeEC,GAdF,UCUJ,MAAMC,GAEH,SAFGA,GAGN,MAHMA,GAIN,MAJMA,GAKL,OALKA,GAMH,SANGA,GAYL,OAZKA,GAaN,MAbMA,GAgBD,WAhBCA,GAiBD,WAjBCA,GAkBA,YAlBAA,GAuBJ,QAvBIA,GAwBL,OAUKC,GAAuG,CAClHC,OAAQ,UACRlF,IAAK,UACLmF,IAAK,UACLC,KAAM,UACNC,OAAQ,UACRC,SAAU,UACVC,WAAY,UACZC,KAAM,OACNnE,IAAK,OACLoE,QAAS,wBACM,cACf/T,MAAO,mBACPgU,KAAM,mBACNC,SAAU,eACVC,SAAU,eACVC,UAAW,gBAQN,SAASC,GAAgBC,EAAuBC,SAC/CC,EAAiBhB,GAAqBc,GACtCG,EAAiBjB,GAAqBe,UAE1CC,IAAmBC,GACC,qBAAnBD,GAA4D,SAAnBC,GACtB,qBAAnBA,GAA4D,SAAnBD,EAO9C,MAAME,GAAoD,CAExDjB,OAAQ,EACRlF,IAAK,EACLmF,IAAK,EACLC,KAAM,EACNC,OAAQ,EACRC,SAAU,EACVC,WAAY,EAEZC,KAAM,EACNnE,IAAK,EAEL3P,MAAO,GACPgU,KAAM,GAEND,QAAS,gBACM,EACfE,SAAU,EACVC,SAAU,EACVC,UAAW,GAMN,SAASO,GAAoB9H,UAC3B6H,GAAuB7H,GAGzB,MAAM+H,GAA+C,CAAC,SAAU,MAAO,MAAO,OAAQ,SAAU,OAAQ,OACzGC,GAAiClS,QAAMiS,IAIvCE,GAA4BnS,QAFc,CAAC,SAAU,MAAO,MAAO,OAAQ,WAQ1E,MACDoS,GAA+BpS,QADqB,CAAC,WAAY,WAAY,cAGtEqS,GAAwCJ,GAAgC7L,OAAO,CAC1F,WACA,WACA,YACA,aACA,aAEIkM,GAA0BtS,QAAMqS,IAGhCE,GAAwBvS,QADqB,CAAC,UAAW,cAAe,QAAS,SAKhF,SAASwS,GAAkBpqB,UACzBA,KAAQmqB,GAGV,SAASE,GACdrqB,UAEOA,KAAQkqB,GAGV,SAASI,GACdtqB,UAEOA,KAAQ8pB,GAGV,SAASS,GAAuBvqB,UAC9BA,KAAQgqB,GAoQV,SAASQ,GAAkBnQ,UACzBA,MAAAA,SAAAA,EAAM,MA6Of,MAgCMra,KAACA,UAAMqa,GAAPF,MAAeA,GAAfsQ,SAAsBA,GAAtBC,SAAgCA,GAAhCC,OAA0CA,MAAWC,IAhCN,CACnD5qB,KAAM,EACNqa,OAAQ,EACRwQ,UAAW,EACXC,UAAW,EACXC,UAAW,EACXxP,MAAO,EACPpB,MAAO,EACPsQ,SAAU,EACVC,SAAU,EACVC,OAAQ,EACRK,KAAM,EAENC,QAAS,EACTC,MAAO,EAEPC,MAAO,EACPC,KAAM,EAENC,KAAM,EACNC,SAAU,EACVC,SAAU,EACVlQ,YAAa,EACbmQ,KAAM,EAENC,QAAS,EACTC,aAAc,EACdC,aAAc,GAQHC,GAA8CjmB,EAAKilB,IAEzD,SAASiB,GAAyB/J,EAAsBC,UACrDA,OACD,WACA,aACA,cACA,eACI,MACJ,aACA,qBACK,CAAC,QAAS,OAAQ,YAAY9Z,SAAS6Z,OAC5C,cACK,CAAC,QAAS,OAAQ,WAAY,WAAW7Z,SAAS6Z,OACvD,eACIwI,GAAyBxI,IAA4B,SAAdA,GAAsC,UAAdA,MACnE,cACA,eACA,kBACIwI,GAAyBxI,IAAc,CAAC,QAAS,QAAQ7Z,SAAS6Z,OACtE,mBACA,cACI,CAAC,QAAS,QAAQ7Z,SAAS6Z,OAC/B,qBACkB,SAAdA,MACJ,gBACA,gBACA,gBACA,eACIwI,GAAyBxI,OAC7B,cACIwI,GAAyBxI,IAA4B,aAAdA,GAA0C,cAAdA,MACvE,iBACkB,QAAdA,MACJ,aACkB,QAAdA,MACJ,iBACkB,WAAdA,MACJ,cAEDuI,GAAoBvI,KACnBha,EACC,CACE,aAEA,8BAIFga,IASH,SAASgK,GAAoC/a,EAAkBgR,UAC5DA,OACD,kBACA,aACA,mBACEjR,GAAeC,UN9gBhB,kCM+gBoDA,iCAGrD,YACA,WACA,WACA,aACA,gBACA,gBACA,YACA,WACA,eACA,eACA,WACA,cACA,mBACA,mBACA,eACA,eACA,cACA,YACA,YACA,eCvwBF,MAAMgb,GAAO,CAClBvW,IAAK,MACLZ,KAAM,OACNC,IAAK,MACLC,MAAO,QACPO,KAAM,OACNH,MAAO,QACPH,KAAM,OACNC,KAAM,OACNxE,KAAM,OACN4E,KAAM,OACNE,MAAO,QACPL,OAAQ,SACRE,OAAQ,SACRI,SAAU,YAGCyW,GAAMD,GAAKvW,IACXyW,GAAOF,GAAKnX,KACZsX,GAAMH,GAAKlX,IACXsX,GAAQJ,GAAKjX,MACbsX,GAAOL,GAAK1W,KACZgX,GAAQN,GAAK7W,MACboX,GAAOP,GAAKhX,KACZwX,GAAOR,GAAK/W,KACZzG,GAAOwd,GAAKvb,KACZgc,GAAOT,GAAK3W,KACZqX,GAAQV,GAAKzW,MACboX,GAASX,GAAK9W,OACd0X,GAASZ,GAAK5W,OACdyX,GAAWb,GAAKxW,SAQtB,SAASsX,GAAW7J,SAClB,CAAC,OAAQ,OAAQ,SAAS/a,SAAS+a,GAGrC,SAAS8J,GAAgB9J,SACvB,CAAC,OAAQ,MAAO,QAAS,OAAsD/a,SAAS+a,GAG1F,MAAM+J,GAAkBpnB,EAAKomB,IAmP7B,SAASiB,GAAUvY,UACjBA,EAAI,aAGsBsY,IAO5B,MAYME,GAAqB,CAXhC,SACA,cACA,aACA,mBACA,gBACA,aACA,mBAG0B,OAAQ,eAevBC,GAAiCvnB,EAXuB,CACnEmK,MAAO,EACPqd,OAAQ,EACRC,QAAS,EACT7c,MAAO,EACPpB,QAAS,EACTF,OAAQ,EACRoe,iBAAkB,EAClBC,qBAAsB,IAiGXC,GAAe5nB,EAlBiC,CAC3D8O,KAAM,EACNe,IAAK,EACLZ,KAAM,EACNC,IAAK,EACLI,OAAQ,EACRH,MAAO,EACPO,KAAM,EACNH,MAAO,EACPH,KAAM,EACNC,KAAM,EACNG,OAAQ,EACR3E,KAAM,EACN4E,KAAM,EACNE,MAAO,EACPC,SAAU,IA+BL,SAASiY,GAAmB3pB,UAC1BA,GAAkBwB,MAAbxB,EAAC,KAGR,MAAM4pB,GAKT,CACFC,WAAY,CAAC,uBAAwB,2BACrCC,SAAU,CAAC,sBAAuB,yBAyLvBC,GAA0C,CACrDC,WAAY,EACZC,mBAJ6B,EAK7BR,qBAAsB,IAGXS,GAA2C,CACtDF,WAAY,EACZC,mBAV6B,EAW7BR,qBAAsB,IC5mBjB,SAASU,GACd5H,SAIMrV,QAACA,EAADkd,WAAUA,EAAVpQ,QAAsBA,EAAtBqQ,MAA+BA,EAA/BpQ,OAAsCA,GAAUsI,EAChD7I,EAAM4Q,GAAS/H,UAKnBgI,GAAWH,KACVzW,GAAsByW,EAAWxW,YAElCyW,GACA5D,GAAyB4D,EAAMG,IAAI,WACb,IAAtBH,EAAMG,IAAI,QAEHC,GAAwB,CAC7BnN,SAAU8M,EACVld,QAAAA,EACA8M,QAAAA,EACAN,IAAAA,EACAO,OAAAA,IAGGP,EAGF,SAAS+Q,IAAwBnN,SACtCA,EADsCpQ,QAEtCA,EAFsC8M,QAGtCA,EAHsCN,IAItCA,EAJsCO,OAKtCA,OAQI+O,GAAWhP,EAAQ7d,aAEdud,SAIO,OADAW,GAAoB,UAAWL,EAASC,GAG/CP,EAGF,CAACgR,GAAyBpN,EAAUpQ,GAAUwM,GAGhD,SAASgR,GAAyBpN,EAA4BpQ,SAU5D,CAACyd,KATKC,GAAsBtN,GAAU,MAI3B,MAFEjP,GAAoBnB,GAGlC,CAACgO,MAAO,CAACjC,MAAO,YAEfne,MAAO,IAKT,SAAS8vB,GAAsB1P,EAAqCqO,GAAU,UAC5EvF,GAAoBngB,WAASqX,GAASA,EAAQC,GAAQD,EAAO,CAAC5B,KAAM,WAAYiQ,GAWlF,SAASsB,GACdvN,EACAwN,EACAxQ,EACAyQ,SAEMrR,EAAkB,MAEpBoR,IACFpR,EAAI2Q,MAAQS,GAGVE,GAAmB1N,GAAW,OAC1BlW,MAACA,GAASkW,EACZwB,GAAW1X,GACbsS,EAAIH,OAASwH,GAAe3Z,GACnBgP,GAAYhP,GACrBsS,EAAIH,OAASnS,EAAMmS,OACV3E,GAAUxN,GACnBsS,EAAIH,OAASnS,EAAMkS,KAEnBI,EAAI5e,MAAQsM,OAGdsS,EAAIwB,MAAQC,GAAQmC,EAAUhD,MAG5ByQ,EAAQ,OACJ3V,OAACA,EAADiQ,KAASA,GAAQ0F,EACnB3V,IACFsE,EAAItE,OAASA,GAEXiQ,IACF3L,EAAI2L,KAAOA,UAGR3L,EAMF,SAASuR,IAAsBH,UACpCA,EADoCI,gBAEpCA,EAFoCC,iBAGpCA,EAHoC/V,OAIpCA,EAJoCgW,YAKpCA,EALoCC,aAMpCA,EAAe,WAST/R,EAAO,EAAI+R,GAAgBA,EAAe,EAAI,aAAU7pB,EACxD8pB,EAAQnQ,GAAQ+P,EAAiB,CAAC5R,KAAAA,EAAMiS,OAAQH,IAChDrJ,OACiBvgB,IAArB2pB,EACIhQ,GAAQgQ,EAAkB,CAAC7R,KAAAA,IAC3B6B,GAAQ+P,EAAiB,CAACK,OAAQ,MAAOjS,KAAAA,IAEzCI,EAAkB,MAEH,IAAjB2R,GAAuC,IAAjBA,EAAoB,CAC5C3R,EAAI2Q,MAAQS,QACNxlB,EAAuB,IAAjB+lB,EAAqBC,EAAQvJ,EACzCrI,EAAIwB,MAAQ5V,MACP,OACC8B,EAAQgP,GAAYiV,GACrB,GAAEA,EAAa9R,YAAY+R,UAAcD,EAAa9R,aAAawI,IACnE,GAAEsJ,OAAkBC,OAAW,EAAID,OAAkBtJ,IAC1DrI,EAAIH,OAAU,UAASuR,OAAe1jB,YAGpCgO,IACFsE,EAAItE,OAASA,GAERsE,EAuBF,SAAS4Q,IAASpd,QACvBA,EADuBkd,WAEvBA,EAFuBoB,YAGvBA,EAHuBxR,QAIvBA,EAJuBC,OAKvBA,EALuB6Q,UAMvBA,EANuBT,MAOvBA,EAPuBoB,MAQvBA,EARuBrW,OASvBA,EATuBsW,WAUvBA,EAVuBL,aAWvBA,OAGIjB,EAAY,IAGVuB,GAAkBvB,GAAa,IAC7BwB,GAAgBxB,GAAa,CAC/BiB,IAAAA,EAAiBQ,GAAgB,CAC/BvO,SAAU8M,EACV0B,UAAWN,EACXxR,QAAAA,EACAC,OAAAA,WAEIhG,IAACA,EAAD4M,SAAMA,EAAN1kB,KAAgBA,GAAQiuB,KAE1B/V,GAAUJ,IAASoX,GAAgBxK,GAAY1kB,IAASqoB,UAGtDiH,MAAAA,GAAAA,EAAOM,OAEFlB,GAA2BT,EAAYU,EAAW,CAACkB,UAAW,OAAQ,CAAC5W,OAAAA,IAG5EiW,EAGKJ,GAAsB,CAACH,UAAAA,EAAWI,gBAAiBd,EAAYiB,aAAAA,EAAcjW,OAAAA,IAE/EyV,GACLT,EACAU,EACAmB,GAAiB7B,EAAYld,GAAW,CAAC8e,UAAW,SAAW,GAC/D,CACE5W,OAAAA,IAGC,GAAIZ,GAASP,GAAM,IACpBsW,GAAWiB,UACNP,GAAsB,CAC3BH,UAAAA,EACAI,gBAAiBd,EACjBe,iBAAkBK,EAClBH,aAAAA,EACAjW,OAAAA,IAIFuK,GAASA,GADQzS,IAAY/D,GAAIE,GAAKC,YAMtC2U,EAAYoM,MAAAA,SAAAA,EAAOG,IAAI,eACtBK,GACLT,EACAU,EACAvE,GAAkBtI,GAAa,CAAC+N,UAAW,SAAW,IAEpD5W,OAAAA,EAEAiQ,KAAoB,SAAdpH,EAAuBoN,GAAgBjB,EAAWiB,cAAgB,QAAM7pB,IAG7E,GAAI0qB,GAAW9B,GAAa,OAE3B+B,EAAe/W,EAAS,CAACA,OAAAA,GAAU,SAElC,IAAIgX,GAA4Blf,EAHzBkd,EAAWtvB,UAGkCqxB,WAO3DE,aAAWX,KACbA,EAAaA,KAGXA,EAEK,IACFA,KAECtW,EAAS,CAACA,OAAAA,GAAU,IAGrBsW,EAMF,SAASU,GAA4Blf,EAAkBpS,UACxDmJ,EAAS,CAAC,IAAK,MAAOiJ,IAAsB,UAAVpS,EAC7B,CAACogB,MAAO,CAACjC,MAAO,UACdhV,EAAS,CAAC,IAAK,MAAOiJ,IAAsB,WAAVpS,EACpC,CAACogB,MAAO,CAACjC,MAAO,WAElBO,GAAiB1e,GC1TnB,SAASwxB,GAAmBC,UAC1BA,GAA6B,WAAfA,GAA0C,SAAfA,EAGlD,SAASC,GAAiBD,EAAoBrR,EAAeuR,SACnD,GAAEF,KAAcrR,IAAQuR,EAAU,KAAInrB,EAAUmrB,KAAY,MAK/D,SAASC,IAAgBxB,gBAC9BA,EAD8BuB,OAE9BA,EAF8BF,WAG9BA,EAH8BjT,KAI9BA,EAJ8BqT,eAK9BA,EAL8B1S,OAM9BA,OASIqS,GAAmBC,UACdK,GAAiB,CACtB1B,gBAAAA,EACAuB,OAAAA,EACAF,WAAAA,EACAjT,KAAAA,EACAW,OAAAA,UAIEiB,EAAQ2R,GAAc3B,EAAiB5R,EAAMqT,MAE/CG,GAA+B5B,GAAkB,eAC7C3R,EAuKH,SACL2B,EACA2F,EACA4L,EACAM,EACAC,UAEKnM,GAAY4L,EAGP,GAAEO,EAAa,MAAQ,gBAAgB9R,OAD/CuR,EAAS5oB,WAAS4oB,GAAUA,EAASM,MNkClC,SAA0BlM,EAAoB3F,EAAe8R,OAC7DnM,eAICvH,EAAO8I,GAA4BvB,SAOjC,GAFImM,GAAcxL,GAAcX,GAExB,MAAQ,gBAAgB3F,MAAU5B,KM3CzC2T,CAAiBpM,EAAU3F,EAAO8R,GAnL1BE,CACbhS,EACAqP,GAAWW,aAAmB5I,GAAkB4I,EAAgBrK,8BAAlC+C,EAA6C9C,UAAOtf,EAClFirB,EACAxS,EAAOkT,WACPC,GAAgBlC,eAAoBA,EAAgBb,4BAAOluB,QAASwoB,WAE/DpL,EAAS,CAACA,OAAAA,QAAU/X,KAG7BirB,EAASY,GAAaC,GAAepC,GAAkBuB,EAAQxS,GAC3DsQ,GAAWW,IAAoB7W,GAAU6W,EAAgBjX,KAAM,OAE1D,CACLsF,OAAQgU,GAAoBrS,EAFbC,GAAQ+P,EAAiB,CAAC5R,KAAAA,EAAM0S,UAAW,QAEbS,EAAQF,EAAYtS,IAE9D,OAAIwS,GAA8C,iBAApCa,GAAepC,GAC3B,CACL3R,OAAS,GAAEiU,GAAWtS,EAAOuR,MAGxB,CAAClT,OAAS,WAAU2B,QAAYA,UAAcA,KAIzD,SAAS2R,GACP3B,EACA5R,EACAqT,UAEIpC,GAAWW,GACTyB,EACM,GAAExR,GAAQ+P,EAAiB,CAAC5R,KAAAA,EAAMiS,OAAQ,WAAWpQ,GAAQ+P,EAAiB,CACpF5R,KAAAA,EACAiS,OAAQ,YAGHpQ,GAAQ+P,EAAiB,CAAC5R,KAAAA,IDkBhC,SAAwBmU,SACvBrmB,MAACA,GAASqmB,SACZ3O,GAAW1X,GACN2Z,GAAe3Z,GAEhB,GAAE9F,EAAU8F,KCpBXsmB,CAAexC,GAInB,SAAS0B,IAAiB1B,gBAC/BA,EAD+BuB,OAE/BA,EAF+BF,WAG/BA,EAH+BjT,KAI/BA,EAJ+BqT,eAK/BA,EAL+B1S,OAM/BA,EAN+BiB,MAO/BA,OAUAA,IAAAA,EAAU2R,GAAc3B,EAAiB5R,EAAMqT,IAE3CpC,GAAWW,IAAoB7W,GAAU6W,EAAgBjX,KAAM,OAE1D,CACLsF,OAAQgU,GAAoBrS,EAFbC,GAAQ+P,EAAiB,CAAC5R,KAAAA,EAAM0S,UAAW,QAEbS,EAAQF,EAAYtS,UAG9D,CAACV,OAAQiT,GAAiBD,EAAYrR,EAAOuR,IAG/C,SAASkB,GACdzC,EACA/uB,EACAswB,EACAF,EACAtS,EACA2T,OAEItB,GAAmBC,OAInBO,GAA+B5B,GAAkB,cA0ChD,SAAoB2C,EAAyBhN,EAAoB5G,EAAgB2T,MAClFC,SACKA,KAGLhN,QACK,CACLtH,OAAQ6I,GAA4BvB,WAIjC+M,OAAuBpsB,EAAYyY,EAAOkT,WAlDxCA,CAAWV,EAFDlC,GAAWW,aAAmB5I,GAAkB4I,EAAgBrK,8BAAlCwD,EAA6CvD,UAAOtf,EAErDyY,EAAQ2T,UAGjDP,GAAalxB,EAAMswB,EAAQxS,IAG7B,SAAS6T,GACdvB,EACArB,EACAjN,UAEIsO,IAAenW,GAAYmW,IAA8B,WAAfA,GAA0C,SAAfA,GAChEA,EAELO,GAA+B5B,IAAkC,SAAdjN,GAAsC,QAAdA,EACtE,cAQJ,SAASoP,GAAalxB,EAAY0xB,EAAyC5T,UAE5EpW,WAASgqB,GACJA,EAGL1xB,IAASmoB,GAEJrK,EAAOoT,oBAsBlB,SAASG,GAAWtS,EAAeuR,SACzB,UAASvR,OAAWuR,GAAU,OAGxC,SAASsB,GAAoB7S,EAAeuR,EAAgCF,EAAoBtS,UAC1FqS,GAAmBC,GACdC,GAAiBD,EAAYrR,EAAOuR,GAGtCe,GAAWtS,GAAQrX,WAAS4oB,GAAUA,OAASjrB,IAAcyY,EAAOoT,cAGtE,SAASE,GACdS,EACAC,EACAxB,EACAF,EACAtS,SAEMqR,EAAQyC,GAAoBC,EAAYvB,EAAQF,EAAYtS,GAC5D8H,EAAMgM,GAAoBE,EAAUxB,EAAQF,EAAYtS,SACtD,GAAE+J,GAAoBgK,GAAY,iBAAqB1C,eAAsCvJ,IClMhG,MAAMmM,GAAkB,MA4CzBC,GAAwB,CAC5B5qB,EAAG,EACHwC,EAAG,EACHkG,MAAO,EACPC,KAAM,EACNC,OAAQ,EACRI,YAAa,EACb/G,KAAM,EACNiH,MAAO,EACPJ,YAAa,EACbC,cAAe,EACfF,QAAS,EACTO,KAAM,GAKD,SAASyhB,GAAgB5tB,UACvBA,KAAK2tB,GAqBP,SAASE,GAAoBtsB,WACzBA,KAAUA,EAAI,SAGlB,SAASusB,GAAevsB,YACpBA,GAAwB,UAAfA,EAAI,KAAwBA,EAAI,OAG7C,SAASwsB,GAAexsB,WACpBA,GAAQtG,UAAQsG,GC9BpB,SAASysB,GACdztB,SAEO,QAASA,GAAK,WAAYA,EAgB5B,SAAS0tB,GAAiCrE,WACtCA,GAAc,WAAYA,EA6B9B,SAASsE,GAAYtS,SACnB,UAAWA,ECwIb,SAASuS,GAAerR,SACvBpC,MAACA,EAAD2F,SAAQA,EAAR5M,IAAkBA,EAAlBL,UAAuBA,GAAa0J,QACnC,IACDuD,EAAW,CAACA,SAAAA,GAAY,MACxB5M,EAAM,CAACA,IAAAA,GAAO,MACdL,EAAY,CAACA,UAAAA,GAAa,GAC9BsH,MAAAA,GAyEG,SAAS0T,GAAoCtR,SAC3C,SAAUA,EA2JZ,SAASuO,IAAgBvO,SAC9BA,EAD8BwO,UAE9BA,EACA9R,QAASpJ,EAHqBqJ,OAI9BA,OAOI0R,GAAkBrO,SAAuC9b,IAA1B8b,EAAS+N,oBACnC/N,EAAS+N,gBAEdd,GAAWjN,GAAW,OAClBuD,SAACA,EAAD5M,IAAWA,GAAOqJ,KACpBuD,IAAaiL,SACR7C,GAAgBrY,EAAKzU,MAAQ,EAAI4d,GAAc,uBAAwBnJ,EAAMqJ,GAC/E,GAAI5F,GAAUJ,SACZ,IAON,SAAS4a,IAAY3hB,QAC1BA,EAD0BoQ,SAE1BA,EAF0BwO,UAG1BA,EACA9R,QAASpJ,EAJiBqJ,OAK1BA,EAL0BgE,UAM1BA,EAN0B6Q,iBAO1BA,UAUMC,EAAcvgB,GAAetB,GAC7B1H,EAAO6U,GAAoByU,EAAmB,OAASC,EAAane,EAAMqJ,EAAQ,CACtFM,UAAWwU,YAGAvtB,IAATgE,SACKA,KAGL+kB,GAAWjN,GAAW,OAClBuD,SAACA,EAAD5M,IAAWA,GAAOqJ,KAEpBuD,IAAaiL,QACR,CAACzG,KAAMtL,GAAc,mBAAoBnJ,EAAMqJ,IACjD,GAAI5F,GAAUJ,KAASsS,GAAkBtI,SACvC,CAACoH,KAAM,oBAId4D,GAAgBrY,EAAKzU,MACnB8hB,EACEsI,GAAkBtI,cACbhE,EAAOrJ,EAAKzU,4BAAO6yB,mBAAoB,CAAC3J,KAAM,aAE9CpL,EAAOrJ,EAAKzU,0BAAZ8yB,EAAmBhF,6BAGvBhQ,EAAOrJ,EAAKzU,0BAAZ+yB,EAAmBF,wBAMvB,SAASG,GACd7R,EACAwO,EACA9R,EACAC,YAEI5F,GAAUiJ,EAASrJ,MAASqJ,EAASuD,UAAY+K,GAAgBtO,IAA+B,aAAlBA,EAASnhB,YAGtBqF,IAA5DqqB,GAAgB,CAACvO,SAAAA,EAAUwO,UAAAA,EAAW9R,QAAAA,EAASC,OAAAA,IA+CnD,SAASmV,GACdhF,UAEOA,GAAc,cAAeA,EAM/B,SAASiF,GACdjF,SAEMhR,EAAYgR,GAAcA,EAAU,kBACjChR,IAAc3d,UAAQ2d,IAAcmR,GAAWnR,GAGnD,SAASkW,GACdlF,SAEMhR,EAAYgR,GAAcA,EAAU,kBACjChR,IAAc3d,UAAQ2d,IAAcuS,GAAkBvS,GAU1D,SAASmR,GACdH,UAGOA,MAAiBA,EAAU,OAAyC,UAA5BA,EAAU,WAGpD,SAASkD,GAAgClD,UACvCA,GAAcA,EAAU,KAG1B,SAASY,GACdZ,UAEOA,GAAc,UAAWA,EAG3B,SAASmF,GACdC,UAGQ5D,GAAgB4D,KAAQC,GAAWD,IAAQE,GAAiBF,GAQ/D,SAASE,GAAkCF,UACzCxE,GAAWwE,IAAO7rB,WAAS6rB,EAAGpoB,OAGhC,SAASukB,GACdvB,UAEOG,GAAWH,IAAeY,GAAWZ,GAGvC,SAASwB,GAAiCxB,UACxCA,IAAe,UAAWA,GAA0C,UAA5BA,EAAU,YAA8B,SAAUA,EAG5F,SAAS8B,GAA4B9B,UACnCA,GAAc,UAAWA,GAAc,UAAWA,EAGpD,SAASgD,GAAiChD,UACxCA,IAAe,UAAWA,GAAc,SAAUA,GAGpD,SAASuF,GACdvF,UAEOA,IAAe,SAAUA,GAAc,UAAWA,GAAc,WAAYA,GAG9E,SAASwF,GACdxF,UAEOA,GAAc,WAAYA,EAG5B,SAASyF,GACdzF,UAEOA,IAAe,WAAYA,GAAc,eAAgBA,GAG3D,SAAS0F,GAAkCxS,UAEzCha,EAAKga,EAAU,CAAC,SAAU,OAAQ,SAAU,UA8B9C,SAASnC,GACdmC,EACAhD,EAAsB,QAElBY,EAAQoC,EAASpC,YACf5T,EAASgT,EAAIhT,WACfikB,EAASjR,EAAIiR,OAEbwE,EAAc,MA0Eb,SAAiBzS,SACQ,UAAvBA,EAAS1J,UAzEZoc,CAAQ1S,GACVpC,EAAQ1S,EAAc,aACjB,KACD/F,MAEC6X,EAAI2V,QAxBb,SACE3S,SAEO,OAAQA,EAsBP4S,CAAa5S,GACf7a,EAAK6a,EAASpb,OACT,OACC+R,IAACA,EAADL,UAAMA,EAANiN,SAAiBA,GAAYvD,EAC/BjJ,GAAUJ,IACZxR,EAAKuR,GAAYC,GACjBsX,GAAUjR,EAAI0R,WAAa,KAAO1R,EAAIiR,QAAU,KACvC3X,EACLJ,GAAYI,IACdmc,EAAe,KAAI7U,MACnBA,EAAS,UAAStH,EAAU5B,UACnBuB,GAAYK,IACrBmc,EAAe,KAAI7U,MACnBA,EAAS,UAAStH,EAAU3B,UAE5BxP,EAAK8F,OAAOqL,GAELiN,IACTpe,ETjfH,SAA0B0tB,SACzBnP,IAACA,KAAQlL,GAAQwM,GAAkB6N,UAErCra,EAAKgL,MAEJE,EAAM,MAAQ,IACflf,EAAKgU,GACF/Z,KAAIoY,GAAK9N,EAAS,GAAQ,SAAN8N,EAAe,GAAM,IAAGA,OAAO2B,EAAK3B,QACxD1Q,KAAK,KAKPud,EAAM,MAAQ,IACf,WACAlf,EAAKgU,GACF/Z,KAAIoY,GAAK9N,EAAS,IAAG8N,KAAK2B,EAAK3B,QAC/B1Q,KAAK,ISgeC2sB,CAAiBvP,GACtB0K,IAAY,CAAC,QAAS,OAAOnnB,SAASkW,EAAI0R,YAAc1R,EAAI0R,WAAc,KAAO1R,EAAIiR,QAAU,KAKjG9oB,IACFyY,EAAQA,EAAS,GAAEzY,KAAMyY,IAAUzY,UAInC8oB,IACFrQ,EAAS,GAAEA,KAASqQ,KAGlBjkB,IACF4T,EAAS,GAAE5T,KAAU4T,KAGnBZ,EAAI+V,MACCtoB,EAAoBmT,GAClBZ,EAAIhB,KAEN9R,EAAoB0T,EAAOZ,EAAIhB,MAAQyW,EAGvCpoB,EAAmBuT,GAAS6U,EAIhC,SAASN,GAAWa,UACjBA,EAAIn0B,UACL,cACA,cACA,iBACI,MACJ,sBACIouB,GAAW+F,MAAUA,EAAIrc,QAC7B,kBACI,QAEL,IAAIzV,MAAMmhB,GAA6B2Q,EAAIn0B,OAsD5C,MAAMo0B,GAA6C,CAACjT,EAAgCrD,YACjFA,EAAOuW,gBACR,eACIlT,EAASpC,UACb,oBAtBF,SAAkCoC,SACjC1J,UAACA,EAADK,IAAYA,EAAZ4M,SAAiBA,EAAjB3F,MAA2BA,GAASoC,KACtC9J,GAAYI,SACN,GAAEsH,gBAAoBtH,EAAU5B,UACnC,GAAIuB,GAAYK,SACb,GAAEsH,gBAAoBtH,EAAU3B,gBAGpCwe,EAAiBnO,GAAkBzB,GAEnCpe,EAAKmR,IAAa6c,MAAAA,SAAAA,EAAgB3P,QAAS2P,MAAAA,SAAAA,EAAgBC,UAAW,YAAgBrc,GAAUJ,IAAQ,aAC1GxR,EACM,GAAEA,EAAGuE,iBAAiBkU,KAEvBA,EASEyV,CAAyBrT,kBA9C/B,SAA8BA,EAAgCrD,SAC7DiB,MAACA,EAADjH,IAAQA,EAAR4M,SAAaA,EAAbjN,UAAuBA,GAAa0J,KACxB,UAAd1J,SACKqG,EAAO2W,WACT,GAAIvc,GAAUJ,SACX,GAAEiH,aACL,GAAI2F,EAAU,aACbC,YAAOwB,GAAkBzB,uBAAlB+C,EAA6B9C,QACtCA,QACM,GAAE5F,MAAUwG,GAAiBZ,GAAMrd,KAAK,aAE7C,GAAImQ,SACLJ,GAAYI,GACN,GAAEsH,aAAiBtH,EAAU5B,SAC5BuB,GAAYK,GACb,GAAEsH,aAAiBtH,EAAU3B,SAE7B,GAAEnL,EAAU8M,SAAiBsH,WAGlCA,EA4BI2V,CAAqBvT,EAAUrD,KAI5C,IAAI6W,GAAiBP,GAEd,SAASQ,GAAkBC,GAChCF,GAAiBE,EAOZ,SAASC,GACd/F,EACAjR,GACAiX,eAACA,EAADC,eAAiBA,GAAiB,gBAE5BC,YAAaC,GAASnG,uBAAToG,EAA2BL,UAEzC1G,GAAWW,UACPkG,QAEH9T,EAAW4N,EAEXoF,EAAMa,EAAiBI,GAAajU,EAAUrD,QAAUzY,SAE1D0vB,EACKjpB,EAAgBmpB,EAAY9T,EAAS2T,MAAOX,GAE5Cc,GAAc9T,EAAS2T,OAASX,EAIpC,SAASe,GAAS/T,UACnBqS,GAA0BrS,IAAaA,EAASkU,KAC3ClU,EAASkU,KACP5B,GAA0BtS,IAAaA,EAASmU,OAClDnU,EAASmU,OACPhD,GAAgBnR,IAAaA,EAASoU,OACxCpU,EAASoU,YADX,EAMF,SAASH,GAAajU,EAAgCrD,UACpD6W,GAAexT,EAAUrD,GAG3B,SAAS0X,GAAgBrU,MAC1BuS,GAAwBvS,GAAW,OAC/BmP,OAACA,EAADF,WAASA,GAAcjP,QACtB,CAACmP,OAAAA,EAAQF,WAAAA,GACX,OACCqF,EAAQP,GAAS/T,IAAa,IAC9BmP,OAACA,EAADF,WAASA,GAAcqF,QACtB,CAACnF,OAAAA,EAAQF,WAAAA,IAoDb,SAASsF,GAA6BzH,UACvCG,GAAWH,GACNA,EACEiF,GAAuBjF,GACzBA,EAAWhR,eADb,EAMF,SAAS0Y,GACd1H,UAEIuB,GAAqBvB,GAChBA,EACEkF,GAA8BlF,GAChCA,EAAWhR,eADb,EASF,SAAS2Y,GACd3H,EACAld,EACA+M,EACAK,EAAiC,OAE7BzW,WAASumB,IAAezmB,WAASymB,IAAehkB,YAAUgkB,GAAa,QAEzEzK,GZ14BG,SACLzS,EACA/Q,EACArB,SAEQ,WAAUoS,UAAgB/Q,2BAA8BmF,EAAUxG,OYq4B/D6kB,CAAgCzS,EADnBrJ,WAASumB,GAAc,SAAWzmB,WAASymB,GAAc,SAAW,UACzBA,IAC1D,CAACtvB,MAAOsvB,UAIbuB,GAAkBvB,GACb4H,GAAoB5H,EAAYld,EAAS+M,EAAQK,GAC/CgV,GAA8BlF,GAChC,IACFA,EAEHhR,UAAW4Y,GAAoB5H,EAAWhR,UAAWlM,EAAS+M,EAAQK,IAGnE8P,EAGF,SAAS4H,GACdC,EACA/kB,EACA+M,EACAK,MAEIuV,GAAwBoC,GAAK,OACzBxF,OAACA,EAADF,WAASA,KAAezW,GAAQmc,KAClC3F,GAAmBC,KAAgBtS,EAAOiY,yBAC5CvS,GAASA,GAAuCzS,IACzC8kB,GAAoBlc,EAAM5I,EAAS+M,EAAQK,OAE/C,OACC6X,EAAYxC,GAA0BsC,GACxC,OACArC,GAA0BqC,GAC1B,SACAxD,GAAgBwD,GAChB,SACA,QACAE,GAAaF,EAAGE,GAAY,OACxB1F,OAACA,EAADF,WAASA,KAAe6F,GAAYH,EAAGE,MACzC7F,GAAmBC,KAAgBtS,EAAOiY,yBAC5CvS,GAASA,GAAuCzS,IACzC8kB,GAAoB,IAAIC,GAAKE,GAAYC,GAAWllB,EAAS+M,EAAQK,WAK9EiQ,GAAW0H,GACNI,GAAaJ,EAAI/kB,EAASoN,GAKrC,SAAsBmT,OAChBtxB,EAAOsxB,EAAQ,QACftxB,SACKsxB,QAEHrmB,MAACA,GAASqmB,SAChBtxB,EAAOwH,WAASyD,GAAS,eAAiBvD,WAASuD,GAAS,UAAY0X,GAAW1X,GAAS,gBAAa5F,EAElG,IAAIisB,EAAUtxB,KAAAA,GAXdm2B,CAAaL,GAcf,SAASI,GACdJ,EACA/kB,GACAqlB,cAACA,GAAgB,GAAoC,UAE/C3e,UAACA,EAADiN,SAAYA,EAAZ5M,IAAsBA,EAAtBiH,MAA2BA,GAAS+W,EACpC3U,EAAW,IAAI2U,MAGhBM,IAAiB3e,GAAcH,GAAcG,IAAeJ,GAAYI,IAAeL,GAAYK,KACtG+L,GZn8BG,SAA0B/L,SACvB,iCAAgCA,MYk8B7B+L,CAA6B/L,WAC/B0J,EAAS1J,WAIdiN,IACFvD,EAASuD,SAAWyB,GAAkBzB,IAGpC3F,IACFoC,EAASpC,MAAS,GAAEA,KAIlB7G,GAAUJ,KACZqJ,EAASrJ,IAAMC,GAAaD,EAAK/G,IAG/BsH,GAASP,KAASxE,GAAOvC,IAC3ByS,GZhwBG,SAAyCzS,SACtC,WAAUA,0CY+vBPyS,CAA4CzS,IAInD0e,GAAgBtO,GAAW,OACvBnhB,KAACA,GAAQmhB,EACTkV,EPxlCH,SAAqBr2B,MACtBA,SACFA,EAAOA,EAAK4jB,mBAEL,SACAuE,SACI,mBACJ,SACAE,SACI,eACJ,SACAD,SACI,cACJ,SACAE,SACI,eACJC,SACI,WOukCM+N,CAAYt2B,GACzBA,IAASq2B,IAEXlV,EAASnhB,KAAOq2B,GAEL,iBAATr2B,GACEwX,GAAsBC,KACxB+L,GZv+BD,SAA2CxjB,EAAYyX,SACpD,uBAAsBzX,sBAAyByX,oCYs+BxC+L,CAA8CxjB,EAAMyX,IAC7D0J,EAASnhB,KAAO,qBAGf,IAAKiS,GAAwBlB,GAAU,OAEtCwlB,EA9LH,SAAqDpV,EAAapQ,gBAC/DA,OACD,eACA,kBACI,mBAEJ,UACA,aACA,YACA,YACA,mBACI,cAEJ,cACI,aAGP0hB,GAAmBtR,IAAa7hB,UAAQ6hB,EAASvb,YAC5C,gBAGH6R,UAACA,EAADK,IAAYA,EAAZ4M,SAAiBA,GAAYvD,KAC/BuD,QACK,cAGL5M,GAAQL,IAAcJ,GAAYI,KAAeL,GAAYK,SACxD,kBAGLwZ,GAAgB9P,cAAaA,EAAS+M,oBAATsI,EAAgBx2B,YACvCyoB,GAAqBtH,EAAS+M,MAAMluB,WACrC,cACA,qBACI,mBACJ,aACI,iBAIN,UAsJWy2B,CAAYtV,EAAgCpQ,GAC5DoQ,EAAQ,KAAWoV,KAGjB9G,GAAgBtO,GAAW,OACvBuV,WAACA,EAADC,QAAaA,GA0DhB,SACLxV,EACApQ,SAEM/Q,EAAOmhB,EAASnhB,QAET,YAATA,GAAkC,UAAZ+Q,QACjB,CACL2lB,YAAY,EACZC,QAAU,WAAU5lB,oDAIhBA,QACDlE,OACAC,OACAC,SACEumB,GAAWnS,GAMTyV,GALE,CACLF,YAAY,EACZC,QAASnT,GAAoCzS,SAK9C/D,QACAC,QACAW,QACAC,QACAC,QACAS,QACAE,QACAC,QACAC,QACAC,QACAC,QACAZ,QACAX,QACAF,QACA0B,UACI8nB,QAEJnpB,QACAE,QACAH,QACAE,UACC1N,IAASmoB,GACJ,CACLuO,YAAY,EACZC,QAAU,WAAU5lB,wDAA8DoQ,EAASnhB,eAGxF42B,QAEJ1oB,QACAC,QACAC,QACAC,QACAL,QACAT,QACAF,QACAH,QACAC,SACU,YAATnN,GAAuBmhB,EAAQ,KAM5ByV,GALE,CACLF,YAAY,EACZC,QAAU,WAAU5lB,8DAKrBhD,QACAO,UACEglB,GAAWnS,IA5bb8P,GADsBkD,EA6boBhT,IA5blBoJ,aAAuB4J,EAAIjG,0BAAJ2I,EAAW72B,MAkctD42B,GALE,CACLF,YAAY,EACZC,QAASnT,GAAkDzS,SAK5DvC,SACmB,YAAlB2S,EAASnhB,MAAwB,SAAUmhB,EAMxCyV,GALE,CACLF,YAAY,EACZC,QAAU,kFAzcb,IAAwBxC,IA0TG2C,CAAqB3V,EAAUpQ,IAAY,IACtD,IAAf2lB,GACFlT,GAASmT,MAITlE,GAAmBtR,IAAazZ,WAASyZ,EAASvb,MAAO,OACrDA,KAACA,GAAQub,KACX8Q,GAAgBrsB,SACX,IACFub,EACHvb,KAAM,CAACmxB,SAAUnxB,UAGfoxB,EAAMpxB,EAAKkF,OAAO,MACD,MAAnBlF,EAAKgF,OAAO,IAAcqnB,GAAgB+E,SACrC,IACF7V,EACHvb,KAAM,CAACmxB,SAAUC,EAAKzmB,MAAO,kBAK/B+hB,GAAgBnR,GAAW,OACvBoU,OAACA,GAAUpU,KACboU,EAAQ,OACJrc,OAACA,KAAWS,GAAQ4b,KACtBrc,QACK,IACFiI,EACHoU,OAAQ,IACH5b,EACHsd,YAAa1B,EAAO0B,aAAe/d,EACnCge,YAAa3B,EAAO2B,aAAehe,YAOtCiI,EAGF,SAASpJ,GAAaD,EAAqC/G,UAC5D9G,YAAU6N,GACL,CAACyc,QAAS/b,GAAYzH,IACZ,WAAR+G,EACF,CACLM,QAAQ,GAEAN,EAAIyc,SAAYzc,EAAIqf,KAGvBrf,EAFA,IAAIA,EAAKyc,QAAS/b,GAAYzH,IAMzC,MAAM6lB,GAAa,CAACF,YAAY,GAiGzB,SAAS/F,GAA+B5B,SACvCqB,WAACA,GAAcoF,GAAgBzG,SACf,SAAfqB,IAA2BA,KAML+D,EANkCpF,KAOhC,aAAhBoF,EAAG,MAA4B/F,GAAW+F,MAAUA,EAAIzP,WADlE,IAAwByP,EAQxB,SAAS9M,GACdne,GACAwb,SACEA,EADF1kB,KAEEA,EAFFsnB,SAGEA,EAHF8P,2BAIEA,gBAQIzS,EAAOD,cAAYyB,GAAkBzB,uBAAlBwD,EAA6BvD,UAGlDxH,EAFAka,EAAS1S,GAAiB,aAAT3kB,SAGjByY,GAAUvP,GACZiU,EAAOjU,EAAEiU,KACAlD,GAAY/Q,GACrBiU,EAAOjU,EAAEkU,OACAuF,GAAWzZ,IACpBmuB,GAAS,EACTla,EAAOyH,GAAe1b,KACbxB,WAASwB,IAAM1B,WAAS0B,KAC7BmuB,IACFla,EAAQ,YAAWhY,EAAU+D,MT3zC5B,SAA+Bwb,WAC3BI,GAA4BJ,GS4zC7B4S,CAAsB3S,KAEnBnd,WAAS0B,IAAMA,EAAI,KAAWxB,WAASwB,IAAMpK,MAAMiD,KAAKw1B,MAAMruB,OACjEiU,EAAOyH,GAAe,EAAED,GAAOzb,MAKnCiU,EACKmK,GAAY+P,EAAU,QAAOla,KAAUA,EAGzCia,OAA6B/xB,EAAYF,EAAU+D,GAMrD,SAASsuB,GACdzI,EACAhmB,SAEM/I,KAACA,GAAQ+uB,SACRhmB,EAAOnJ,KAAIsJ,UACViU,EAAOkK,GAAUne,EAAG,CACxBwb,SAAU0J,GAAWW,GAAmBA,EAAgBrK,cAAWrf,EACnErF,KAAAA,EACAo3B,4BAA4B,gBAGjB/xB,IAAT8X,EACK,CAACC,OAAQD,GAGXjU,KAOJ,SAAS4mB,GAAiB3O,EAA4BpQ,UACtDmH,GAAUiJ,EAASrJ,KAOjBvD,GAAexD,IAAY,CAAC,UAAW,WAAW9I,SAAUkZ,EAAmCnhB,OANpGy3B,QAAQ/U,KAAK,iDACN,GC3sCJ,MAAMgV,GAMT,CACFC,WAAY,CACV/U,KAAM,SACNgV,OAAQ,SAEVC,cAAe,CACbjV,KAAM,SACNgV,OAAQ,YAEVE,WAAY,CACVlV,KAAM,SACNgV,OAAQ,QAEVG,UAAW,CACTnV,KAAM,SACNgV,OAAQ,QAEVI,cAAe,CACbpV,KAAM,SACNgV,OAAQ,YAEVK,eAAgB,CACdrV,KAAM,SACNgV,OAAQ,aAEVM,gBAAiB,CACftV,KAAM,SACNgV,OAAQ,cAEVO,aAAc,CACZvV,KAAM,SACNgV,OAAQ,WAEVQ,YAAa,KACbC,aAAc,KACdC,UAAW,CACT1V,KAAM,OACNgV,OAAQ,UAEVW,SAAU,CACR3V,KAAM,OACNgV,OAAQ,cAEVY,eAAgB,CACd5V,KAAM,OACNgV,OAAQ,oBAEVa,YAAa,CACX7V,KAAM,OACNgV,OAAQ,WAEVc,UAAW,CACT9V,KAAM,OACNgV,OAAQ,eAEVe,UAAW,CACT/V,KAAM,QACNgV,OAAQ,UAEVgB,SAAU,CACRhW,KAAM,QACNgV,OAAQ,cAEViB,eAAgB,CACdjW,KAAM,QACNgV,OAAQ,oBAEVkB,YAAa,CACXlW,KAAM,QACNgV,OAAQ,WAEVmB,SAAU,KACVC,UAAW,CACTpW,KAAM,QACNgV,OAAQ,gBAQL,SAASqB,GACd/vB,UAEOA,GAAKA,EAAC,UAwFR,MAAMgwB,GAAyB,CAAC,SAAU,OAAQ,SAAU,QAAS,SAK/DC,GAAqE,CAChFC,KAAM,OACNC,QAAS,OACTf,UAAW,OACXC,SAAU,OACVC,eAAgB,OAChBC,YAAa,OACba,UAAW,OACXZ,UAAW,OAEXxf,OAAQ,OAERgW,aAAc,OAEd3U,KAAM,OACN1J,YAAa,OACbwJ,OAAQ,OACRkf,UAAW,OACXC,YAAa,OACbC,WAAY,OACZC,iBAAkB,OAClBC,cAAe,OACfC,YAAa,OACbtJ,OAAQ,OACRF,WAAY,OACZuH,WAAY,OACZkC,WAAY,OACZhC,cAAe,OACfiC,WAAY,OACZhC,WAAY,OACZiC,WAAY,OACZC,iBAAkB,OAClBjC,UAAW,OACXC,cAAe,OACfC,eAAgB,OAChBC,gBAAiB,OACjB+B,WAAY,OACZC,gBAAiB,OACjB9B,YAAa,OACbD,aAAc,OACdgC,aAAc,OACd9B,aAAc,OACd+B,OAAQ,OACRC,gBAAiB,OACjBC,UAAW,OACXC,UAAW,OACXthB,OAAQ,OACRuhB,SAAU,OACVC,QAAS,OACT9B,UAAW,OACXC,SAAU,OACVC,eAAgB,OAChB6B,YAAa,OACbC,WAAY,OACZ7B,YAAa,OACb8B,UAAW,OACXC,MAAO,OACP9B,SAAU,OACVC,UAAW,OACXlE,MAAO,OACPgG,WAAY,OACZC,YAAa,OACbC,WAAY,OACZC,cAAe,OACfC,WAAY,OACZC,UAAW,OACXC,cAAe,OACfC,eAAgB,OAChBC,gBAAiB,OACjBC,WAAY,OACZC,gBAAiB,OACjBC,aAAc,OACdC,aAAc,OACdC,OAAQ,OACRC,OAAQ,OAERhN,OAAQ,OACRV,MAAO,OACP2N,SAAU,OACVC,UAAW,OACXC,UAAW,OACXC,UAAW,OACXjzB,OAAQ,OACRkzB,OAAQ,QAmCGC,GAAiE,CAC5EhjB,OAAQ,EAERqB,KAAM,EACN2U,aAAc,EACdre,YAAa,EACbwJ,OAAQ,EACRkf,UAAW,EACXC,YAAa,EACbC,WAAY,EACZC,iBAAkB,EAClBC,cAAe,EACfC,YAAa,EACbtJ,OAAQ,EACRF,WAAY,EACZgJ,KAAM,EACNC,QAAS,EACTf,UAAW,EACXC,SAAU,EACVC,eAAgB,EAChBC,YAAa,EACbC,UAAW,EACXf,WAAY,EACZkC,WAAY,EACZhC,cAAe,EACfiC,WAAY,EACZhC,WAAY,EACZiC,WAAY,EACZC,iBAAkB,EAClBjC,UAAW,EACXC,cAAe,EACfC,eAAgB,EAChBC,gBAAiB,EACjB+B,WAAY,EACZC,gBAAiB,EACjB9B,YAAa,EACbD,aAAc,EACdgC,aAAc,EACd9B,aAAc,EACd+B,OAAQ,EACRC,gBAAiB,EACjBC,UAAW,EACXC,UAAW,EACXthB,OAAQ,EACRuhB,SAAU,EACVqB,SAAU,EACVpB,QAAS,EACT9B,UAAW,EACXmD,UAAW,EACXlD,SAAU,EACVC,eAAgB,EAChBkD,UAAW,EACXrB,YAAa,EACbC,WAAY,EACZ7B,YAAa,EACb8B,UAAW,EACXC,MAAO,EACP9B,SAAU,EACVC,UAAW,EACXlE,MAAO,EACPgG,WAAY,EACZC,YAAa,EACbC,WAAY,EACZC,cAAe,EACfC,WAAY,EACZC,UAAW,EACXC,cAAe,EACfC,eAAgB,EAChBC,gBAAiB,EACjBC,WAAY,EACZC,gBAAiB,EACjBC,aAAc,EACdC,aAAc,EACdC,OAAQ,EACRC,OAAQ,EACRI,UAAW,EACXjzB,OAAQ,EACRkzB,OAAQ,GAGJE,GAA+C,IAChDD,GACHje,MAAO,EACPme,UAAW,EACXrF,SAAU,GAGL,SAASsF,GAAen1B,WACpBi1B,GAAsBj1B,GAsHjC,MAyBao1B,GAAe32B,EAzBkC,CAC5D0vB,KAAM,EACNkH,SAAU,EACVC,WAAY,EACZC,aAAc,EACdC,SAAU,EACVC,UAAW,EACXC,iBAAkB,EAClBC,UAAW,EACXC,aAAc,EACdC,QAAS,EACTC,MAAO,EACPC,UAAW,EACXC,cAAe,EACfC,WAAY,EACZC,kBAAmB,EACnBC,cAAe,EACfC,MAAO,EACPC,UAAW,EACXC,cAAe,EACfC,WAAY,EACZC,kBAAmB,EACnBC,cAAe,IC3oBV,SAASC,GAAW3d,SAClB,SAAUA,EClDZ,MAAM4d,GACXj3B,YACS0F,EACAwxB,QADAxxB,KAAAA,OACAwxB,IAAAA,EAYFC,gBAAgB9d,WACjB2d,GAAW3d,KR6oBV+M,GADmBhK,EQ3oBH/C,EAAKxL,MR4oBNuO,EAAEhjB,KAAOgjB,KQ5oBO7jB,KAAKmN,KR2oBtC,IAAqB0W,GSjXrB,SAASgb,GACdjH,EACAhmB,SAEMkd,EAAa8I,GAAYA,EAAShmB,WACpCkd,IACE3uB,UAAQ2uB,GACH/lB,EAAK+lB,GAAY9M,KAAcA,EAASpC,QAExCqP,GAAWH,IAAeiF,GAA8BjF,IAM9D,SAASgQ,GAAYlH,UACnB7uB,EAAKoJ,IAAUP,OAChBitB,GAAgBjH,EAAUhmB,GAAU,OAChCkd,EAAa8I,EAAShmB,MACxBzR,UAAQ2uB,UACH/lB,EAAK+lB,GAAY9M,KAAcA,EAAS1J,YAC1C,OACC0J,EAAWuU,GAAYzH,UACtB9M,KAAcA,EAAS1J,kBAG3B,KAIJ,SAASymB,GAA8BC,EAA4BrgB,SAClEsgB,EAAoB,GACpBpT,EAAuB,GACvBqT,EAAiC,GACjC5mB,EAAkC,GAClCsf,EAA6B,UAEnCp0B,GAAQw7B,GAAa,CAAClQ,EAAYld,QAE5Bqd,GAAWH,GAAa,OACpBlP,MAACA,EAAOtH,UAAW6mB,EAAnBxmB,IAA0BA,EAA1B4M,SAA+BA,KAAa6Z,GAAatQ,KAC3DqQ,GAAS5Z,GAAY5M,EAAK,OACtB2d,EAAQP,GAASjH,GACjBuQ,EAAiB/I,MAAAA,SAAAA,EAAOX,UAC1B2J,EAAWzf,GAAQiP,EAAY,CAACiG,OAAO,UACrCwK,EAAgC,IAEhCF,EAAiB,GAAK,CAAC1J,MAAOA,GAAM7G,EAAYnQ,EAAQ,CAACiX,gBAAgB,QAC1EwJ,EAEHxf,MAAO0f,MAGLH,EAAO,KACLv4B,KAEAsR,GAAYinB,IACdv4B,EAAK,SACL04B,EAAWzf,GAAQ,CAACjZ,GAAI,SAAUgZ,MAAOuf,EAAMzoB,QAAS,CAACqe,OAAO,IAChEwK,EAAY3f,MAAS,GAAE0f,KAAY1f,KAC1B3H,GAAYknB,IACrBv4B,EAAK,SACL04B,EAAWzf,GAAQ,CAACjZ,GAAI,SAAUgZ,MAAOuf,EAAMxoB,QAAS,CAACoe,OAAO,IAChEwK,EAAY3f,MAAS,GAAE0f,KAAY1f,KAChB,YAAVuf,GAAiC,aAAVA,GAAkC,cAAVA,IACxDv4B,EAAKu4B,GAGHv4B,EAAI,OACA44B,EAAqC,CACzC54B,GAAAA,EACA64B,GAAIH,GAEF1f,IACF4f,EAAe5f,MAAQA,GAEzBtH,EAAUlY,KAAKo/B,YAGjBP,EAAQ7+B,KAAKk/B,GACThP,GAAgBxB,IAAe/V,GAAUJ,GAAM,IACjDkT,EAAKzrB,KAAK,CAACuY,IAAAA,EAAKiH,MAAAA,EAAO6f,GAAIH,IAE3BL,EAAQ7+B,KAAKyf,GAAQiP,EAAY,CAAC4B,UAAW,SACzCC,GAAiB7B,EAAYld,IAC/BqtB,EAAQ7+B,KAAKyf,GAAQiP,EAAY,CAAC4B,UAAW,WAG3Cvc,GAAOvC,GAAU,OACb8tB,EAA8C,CAClD9f,MAAQ,GAAE0f,SAEZ1H,EAAU,GAAEhmB,MAAc8tB,EAE5BH,EAAY5mB,IAAM,SACb7F,GAAwBlB,KAC3B2tB,EAAW,KAAWvW,SAEnB,GAAIzD,EAAU,CACnB2Z,EAAU9+B,KAAK,CACbmlB,SAAAA,EACA3F,MAAAA,EACA6f,GAAIH,UAIArO,EAAaX,GAAgBxB,IAAeA,EAAWjuB,OAASqoB,IAAY,OAC9E+H,IACErf,IAAYxC,IAAQwC,IAAYpC,GAClC+vB,EAAW,WAAiBtO,GvBfrC,SAAmCrf,WAC/BmC,GAA0BnC,GuBeZ+tB,CAA0B/tB,GAK1BuC,GAAOvC,KAChB2tB,EAAW,KAAW,CACpBtO,WAAAA,KACGsO,EAAW,OAPhBA,EAAW,OAAa,CACtBtO,WAAAA,KACGsO,EAAW,SAaxB3H,EAAShmB,GAAkB2tB,OAE3BN,EAAQ7+B,KAAKwf,GACbgY,EAAShmB,GAAkBotB,EAAYptB,QAIzCgmB,EAAShmB,GAAkBotB,EAAYptB,MAIpC,CACLia,KAAAA,EACAqT,UAAAA,EACA5mB,UAAAA,EACA2mB,QAAAA,EACArH,SAAAA,GAsBG,SAASgI,GACdhI,EACAtiB,EACA0Y,EACArP,UAEOnY,EAAKoxB,GAAU93B,QAAO,CAAC+/B,EAAsCjuB,SAC7DgB,GAAUhB,UAEbyS,GhBjSC,SAAgCzS,SAC7B,GAAEA,4BAAkCA,qCgBgS/ByS,CAAmCzS,IACrCiuB,QAGH/Q,EAAa8I,EAAShmB,MACZ,UAAZA,GAAgC,QAAT0D,GAAmBsiB,EAAS/nB,QACrDwU,GhB5VkC,+EgB6VlCzS,EAAUzD,KAlCT,SAA+BypB,EAA4BhmB,EAAkB0D,SAC5EwqB,EAAgBzqB,GAAYzD,EAAS0D,OACtCwqB,SACI,EACF,GAAsB,WAAlBA,EAA4B,OAC/BC,EAAkBnI,EAAShmB,IAAY7D,GAAKF,GAAIC,aAIlDmhB,GAAW8Q,IAAoB9Q,GAAW2I,EAAShmB,KAAasH,GAAS6mB,EAAgBpnB,aAMxF,EAsBAqnB,CAAsBpI,EAAUhmB,EAAS0D,UAE5C+O,GAASA,GAAgCzS,EAAS0D,IAC3CuqB,KAILjuB,IAAY/C,IAAiB,SAATyG,EAAiB,OACjC0M,EAAWuU,GAAYqB,EAAShmB,OAClCoQ,MAAAA,GAAAA,EAAU1J,iBACZ+L,GhB/TN,oGgBgUawb,KAKPjuB,IAAYnD,KAAUuf,EAAS,SAAU4J,EAAW,WAAYA,UAClEvT,GAASA,GAA0B,WAAY,CAACzT,KAAM,SAAUgnB,EAAU/mB,OAAQ,WAAY+mB,KACvFiI,KAIPjuB,IAAYtC,IACXsC,IAAYvC,KAAUlP,UAAQ2uB,KAAgB8B,GAAW9B,IACzDld,IAAYpC,IAAWrP,UAAQ2uB,GAE5BA,IAED+Q,EAAmBjuB,GAAmBhJ,QAAMkmB,GAAYhvB,QACvD,CAACmgC,EAA0Bje,KACpBiN,GAAWjN,GAGdie,EAAK7/B,KAAK22B,GAAa/U,EAAUpQ,IAFjCyS,GAASA,GAA0BrC,EAAUpQ,IAIxCquB,IAET,SAGC,IACDruB,IAAYpC,IAA0B,OAAfsf,EAEzB+Q,EAAmBjuB,GAAW,UACzB,KACJqd,GAAWH,IACXY,GAAWZ,IACX8B,GAAW9B,IACXgF,GAAiBhF,IACjBhU,GAAYgU,WAEbzK,GAASA,GAA0ByK,EAAYld,IACxCiuB,EAGTA,EAAmBjuB,GAAkB6kB,GAAe3H,EAA0Bld,EAAS+M,UAElFkhB,IACN,IAME,SAASK,GAAkBtI,EAA4BjZ,SACtDkhB,EAAuC,OAExC,MAAMjuB,KAAWpL,EAAKoxB,GAAW,OAC9BuI,EAAgB1J,GAAemB,EAAShmB,GAAUA,EAAS+M,EAAQ,CAACsY,eAAe,IACzF4I,EAAmBjuB,GAAkBuuB,SAGhCN,EAqBF,SAASr8B,GACd48B,EACA36B,EACA46B,MAEKD,MAIA,MAAMxuB,KAAWpL,EAAK45B,GAAU,OAC7BE,EAAKF,EAAQxuB,MACfzR,UAAQmgC,OACL,MAAMxR,KAAcwR,EACvB76B,EAAE1F,KAAKsgC,EAASvR,EAAYld,QAG9BnM,EAAE1F,KAAKsgC,EAASC,EAAI1uB,IA8BnB,SAAS2uB,GAAmBjrB,EAAYsiB,UACtCpxB,EAAKoxB,GAAU93B,QAAO,CAAC0gC,EAAS5uB,YAC7BA,QAED/D,QACAC,QACA2B,QACAE,QACAD,QACA3B,QACAC,QACAG,QACAC,QACAH,QACAC,QAGAG,QACAC,QACAC,QACAC,QAIAY,QACAR,QACAE,QAIAU,UACIgxB,OAEJnxB,MAEU,SAATiG,GAA4B,UAATA,SACdkrB,OAINlxB,QACAC,UACGuf,EAAa8I,EAAShmB,MACxBzR,UAAQ2uB,IAAeG,GAAWH,OAC/B,MAAM9M,KAAYpZ,QAAMkmB,GACtB9M,EAAS1J,WACZkoB,EAAQpgC,KAAKyf,GAAQmC,EAAU,YAI9Bwe,OAGJ3xB,MACU,UAATyG,SAEKkrB,OAKN/xB,QACAC,QACAC,QACAI,QACAC,QACAC,QACAE,QACAD,UAIG8S,EAAWuU,GAAoBqB,EAAShmB,WAC1CoQ,IAAaA,EAAS1J,WACxBkoB,EAAQpgC,KAAKyf,GAAQmC,EAAU,KAE1Bwe,MAGV,IC1lBE,SAASC,GACdC,EACAC,EACAC,EACAC,GAAgB,MAEZ,YAAaD,QACR,CAACrvB,QAASqvB,EAA8BrvB,eAgB1C,CACLA,QAAS,IAd0CmvB,EAAejgC,KAClE,EAAEqgC,YAAAA,EAAaC,YAAAA,YACPC,EAAYH,EAAiB,OAAMI,GAASN,KAA8B,SACzE,CACL/gB,MAAOkhB,EAAcH,EAAyB/gB,MAC9C/e,KAAM8/B,EAAyB9/B,KAC/B80B,MAAO7a,GAAYimB,GAAe,CAAC9iB,OAAS,GAAE8iB,KAAeG,OAAOF,OAAiBD,EAAcC,SAWlGr3B,EDgbF,SAAoCiuB,SACnC5uB,EAAqB,OACtB,MAAM4I,KAAWpL,EAAKoxB,MACrBiH,GAAgBjH,EAAUhmB,GAAU,OAChCkd,EAAa8I,EAAShmB,GACtBuvB,EAAkBv4B,QAAMkmB,OACzB,MAAMkG,KAAOmM,EACZlS,GAAW+F,GACbhsB,EAAI5I,KAAK40B,GACAjB,GAA0BiB,IACnChsB,EAAI5I,KAAK40B,EAAIlX,kBAKd9U,ECrckBo4B,CAAUR,GAA+BngC,IAAI+zB,IAMtCpsB,KAK3B,SAAS64B,GAASN,SACjBhL,MAACA,EAAD/V,MAAQA,GAAS+gB,SAChBh0B,EAAgBgpB,EAAO/V,GAGzB,SAASyhB,GACdC,EACAC,EACAZ,EACAa,EACAC,SAEM1S,MAACA,EAADmH,KAAQA,GAAQyK,QAEf,EACLe,SAAAA,EACApsB,KAAAA,EACAqsB,eAAAA,EACAC,kBAAAA,EACAC,cAAAA,EAAgB,aAQVlM,EAAQsL,GAASN,UAEhBmB,GAAmBR,EAAkBI,EAAUD,EAAqB,CACzEnsB,KAAAA,EACAsiB,SAAU,EACP2J,GAAiB,CAChB3hB,MAAQ,GAAE+hB,KAAkBhB,EAAyB/gB,QACrD/e,KAAM8/B,EAAyB9/B,aACjBqF,IAAVyvB,EAAsB,CAACA,MAAAA,GAAS,WACtBzvB,IAAV6oB,EAAsB,CAACA,MAAAA,GAAS,WACvB7oB,IAATgwB,EAAqB,CAACA,KAAAA,GAAQ,OAEhC3tB,WAASq5B,GACT,EACI,GAAEL,MAAoB,CACtB3hB,MAAQ,GAAEgiB,KAAqBjB,EAAyB/gB,UAG5D,MACD4hB,KACAK,MAMJ,SAASC,GACdpjB,EACA+E,EACAge,EACAM,SAEMC,KAACA,EAADrxB,MAAOA,EAAPG,QAAcA,GAAW4N,EAEzBpJ,EAAOoJ,EAAQ7d,YAEjB6d,EAAQ+E,SAA4Bvd,IAAlBwY,EAAQ+E,IAAuBge,EAAoBhe,GAChE,CACL,IACKse,EACHzsB,KAAM,IACAmsB,EAAoBhe,MACpBue,EAAO,CAACA,KAAAA,GAAQ,MAChBrxB,EAAQ,CAACA,MAAAA,GAAS,MAClBG,EAAU,CAACA,QAAAA,GAAW,MACtB+c,GAAUkU,EAAazsB,MAAQysB,EAAazsB,KAAO,CAACzU,KAAMkhC,EAAazsB,MAC3EwJ,MAAQ,GAAExJ,KAAQmO,OACd3Y,YAAU4T,EAAQ+E,IAAS,GAAM/E,EAAQ+E,MAK9C,GAGF,SAASwe,GACdnhB,EACA/G,EACAkd,SAQMW,SAACA,GAAY9W,EACbygB,EAAuC,aAAXxnB,EAAwB,IAAM,IAE1D4mB,EAA2B/I,EAAS2J,GACpCW,EAA4BtK,EAAU,GAAE2J,MACxCY,EAAgCvK,EAAU,GAAE2J,UAC5Ca,EAAiCxK,EAAU,GAAE2J,iBAE5C,CACLZ,yBAA0B0B,GAA8B1B,EAA0B1J,GAClFiL,0BAA2BG,GAA8BH,EAA2BjL,GACpFkL,8BAA+BE,GAA8BF,EAA+BlL,GAC5FmL,+BAAgCC,GAA8BD,EAAgCnL,GAC9FsK,eAAAA,GAIJ,SAASc,GACP1B,EACA1J,MAEI0J,MAAAA,GAAAA,EAA0BroB,UAAW,OACjCA,UAACA,KAAcgqB,GAAkC3B,SACnDroB,IAAc2e,GAChB5S,GjBmGC,SACL/L,EACA2e,SAEQ,mEAAkE3e,MAAc2e,gCiBvG3E5S,CAAyD/L,EAAW2e,IAExEqL,SAEA3B,EAIJ,SAAS4B,GACdzhB,EACAmW,SAEM3hB,KAACA,EAADsiB,SAAOA,GAAY9W,GACnB7Y,EAACA,EAADwC,EAAIA,GAAKmtB,KAEX/J,GAAUvY,IAASA,EAAKyE,cACnBzE,EAAKyE,UAGVka,GAA4BhsB,GAAI,IAE9BgsB,GAA4BxpB,GAAI,OAE5B+3B,EAAavT,GAAWhnB,IAAMA,EAAEqQ,UAChCmqB,EAAaxT,GAAWxkB,IAAMA,EAAE6N,aAEjCkqB,GAAcC,IAAexL,EAE3B,CAAA,GAAKwL,GAAcD,IAAevL,EAElC,CAAA,GAAIuL,IAAevL,GAAiBwL,IAAexL,QAClD,IAAI/zB,MAAM,6CAEZsuB,GAA+B/mB,KAAO+mB,GAA+BvpB,GAEhE,aAIF,iBAVA,mBAFA,iBAgBJ,aACF,GAAIgsB,GAA4BxpB,SAE9B,iBAGD,IAAIvH,MAAO,oCAAmC+zB,MC3RjD,MAAMyL,GAAU,UA8CVC,GAAoB,IAAIjE,GAAwBgE,GAASE,IAE/D,SAASC,GAAezpB,UACzB/Q,WAAS+Q,GACJ,QAGFA,EAGF,SAASwpB,GACd9hB,GACAnC,OAACA,IAGDmC,EAAO,IACFA,EACH8W,SAAUsI,GAAkBpf,EAAK8W,SAAUjZ,UAEvCrJ,KAACA,EAAMsiB,SAAUkL,EAAjB7b,OAA4BA,EAAQ8b,WAAYC,KAAOC,GAAaniB,EACpEpC,EAAsBmP,GAAUvY,GAAQA,EAAO,CAACzU,KAAMyU,GAGxD2R,GACF5C,GAASA,GAAkC,kBAGvCjL,EAASsF,EAAQtF,QAAUuF,EAAOukB,QAAQ9pB,OAC1C+pB,EAAYpkB,GAChB,OACAL,EACAC,GAGIykB,EAAcP,GAAezpB,IAC7ByS,KACJA,EADIqT,UAEJA,EAFImE,UAGJA,EAHI1C,yBAIJA,EAJIY,eAKJA,EALItC,QAMJA,EANI3mB,UAOJA,EAPIsoB,8BAQJA,EARI0C,YASJA,EATIC,UAUJA,EAVIC,oCAWJA,GAuOJ,SACE1iB,EACA1H,EACAuF,SAEM5E,EAASwoB,GAAoBzhB,EAAM4hB,KACnC/B,yBAACA,EAADY,eAA2BA,GAAkBU,GAA4BnhB,EAAM/G,EAAQ2oB,IACvFe,EAA8B9C,EAAyB/gB,MAEvDwjB,EAAcP,GAAezpB,GAE7BsqB,EAAiD,IAClDC,GAAmBF,GACtB,CACE78B,GAAI,SACJgZ,MAAO6jB,EACPhE,GAAK,WAAUgE,KAEjB,CACE78B,GAAI,MACJgZ,MAAO6jB,EACPhE,IAAqB,YAAhB2D,EAA4B,iBAAmB,QAAUK,GAEhE,CACE78B,GAAI,MACJgZ,MAAO6jB,EACPhE,IAAqB,YAAhB2D,EAA4B,iBAAmB,QAAUK,IAI5DG,EACY,YAAhBR,GAA6C,UAAhBA,EACzB,GACA,EAGIS,UAAY,oBAAmBJ,0BAA4CA,MAC3EhE,GAAK,OAAMgE,KAEb,CACEI,UAAY,wBAAuBJ,oBAAsCA,SAA2BrqB,iBAAsBqqB,OAC1HhE,GAAK,iBAAgBgE,KAEvB,CACEI,UAAY,wBAAuBJ,oBAAsCA,SAA2BrqB,iBAAsBqqB,OAC1HhE,GAAK,iBAAgBgE,QAIvBlC,GAAiBuC,KAAgCC,GAAoCjjB,EAAK8W,UAC5F4L,oCAACA,EAADQ,iBAAsCA,GDvVvC,SACLhF,SAQMztB,QAACA,KAAYyyB,GAAoBhF,MAClCztB,QACI,CAACyyB,iBAAAA,OAGNC,EAIAT,KAKArjC,UAAQoR,GAAU,KACf,MAAM7R,KAAK6R,EACV7R,EAAE4Y,WACC2rB,IACHA,EAAmC,IAEpCA,EAAyD7jC,KAAKV,KAE1D8jC,IACHA,EAAsC,IAEvCA,EAA4DpjC,KAAKV,IAIlEukC,IACDD,EAAiCzyB,QAAU0yB,QAG1C1yB,EAAO,UACRyyB,EAAiCzyB,QAAUA,EAE5CiyB,EAAsCjyB,SAItCpR,UAAQqjC,IAAuF,IAA/CA,EAAoCxgC,SACtFwgC,EAAsCA,EAAoC,IAErE,CAACA,oCAAAA,EAAqCQ,iBAAAA,GCmSmBE,CAC9DH,IAGIlY,KACJA,EADIqT,UAEJA,EAFI5mB,UAGJA,EAHI2mB,QAIJA,EACArH,SAAUgJ,GACR7B,GAA8BiF,EAAkBrlB,GAE9C2kB,EAAsC,aAAXvpB,EAAwB,aAAe,WAClEwpB,EAAyBxpB,EAEzBspB,EAAyB,IAC1BxX,KACAqT,EACH,CACE5mB,UAAW,IAAIA,KAAcorB,GAC7BzE,QAAAA,MAEC2E,SAGE,CACL/X,KAAAA,EACAqT,UAAAA,EACAmE,UAAAA,EACApE,QAAAA,EACA3mB,UAAAA,EACAqoB,yBAAAA,EACAY,eAAAA,EACAX,8BAAAA,EACA0C,YAAAA,EACAC,UAAAA,EACAC,oCAAAA,GA5TEW,CAAUrjB,EAAM1H,EAAQuF,IAEtBhO,MAACA,EAADzG,KAAQA,KAASk6B,GAA6CxD,EAE9DyD,EAAmB7C,GAChBH,GACL3iB,EACA6iB,EACAZ,EACAa,EACA7iB,EAAOukB,SAILoB,EAAoBD,EAAgBD,GACpCG,EAAiBF,EAAgBzD,GACjC4D,EAAqBH,EAAgB,IAAID,KAA+Cl6B,EAAO,CAACA,KAAAA,GAAQ,KAExGu6B,EAA+ChE,GACnD,CACE,CAACK,YAA6B,YAAhBsC,EAA4B,iBAAmB,OAAQrC,YAAa,OAClF,CAACD,YAAa,aAAcC,YAAa,MACzC,CAACD,YAAa,WAAYC,YAAa,UACvC,CAACD,YAAa,aAAcC,YAAa,MACzC,CAACD,YAA6B,YAAhBsC,EAA4B,iBAAmB,OAAQrC,YAAa,QAEpFJ,EACAC,GAKI8D,EAAmB,CAAC7jC,KAAM,OAAQ8P,MAAO,QAASG,QAAS,EAAGiJ,OAAQupB,EAAarV,QAAS,KAAM7S,MAAM,GACxGupB,EACY,YAAhBvB,EACIqB,EAEAhE,GACE,CACE,CAACK,YAAa,iBAAkBC,YAAa,iBAC7C,CAACD,YAAa,iBAAkBC,YAAa,kBAE/CJ,EACAC,GAGFgE,EAAgB,IACjBN,EAAkB,CACnB5C,SAAU,OACVpsB,KAAM,CAACzU,KAAM,OAAQotB,QAAS,KAAM7S,MAAM,GAC1CumB,eAAgB,gBAChBC,kBAAmB,YACnBC,cAAe8C,OAEdL,EAAkB,CACnB5C,SAAU,OACVpsB,KAAM,CAACzU,KAAM,OAAQotB,QAAS,KAAM7S,MAAM,GAC1CumB,eAAgB,YAChBC,kBAAmB,gBACnBC,cAAe8C,OAEdL,EAAkB,CACnB5C,SAAU,QACVpsB,KAAMovB,EACN/C,eAAgB,gBAChBE,cAAe8C,OAEdL,EAAkB,CACnB5C,SAAU,QACVpsB,KAAMovB,EACN/C,eAAgB,gBAChBE,cAAe8C,KAObE,EAAkC,IAClB,UAAhBzB,EAA0BwB,EAAgB,MAC3CL,EAAe,CAChB7C,SAAU,MACVpsB,KAAM,CACJzU,KAAM,SACFsiC,EAAY,CAACj5B,KAAMi5B,GAAa,GACpCppB,OAAQwpB,EACRtV,QAAS,KACT3S,oBAAqB,OAEvBqmB,eAAgB,YAChBC,kBAAmB,YACnBC,cAAe4C,OAEdD,EAAmB,CACpB9C,SAAU,SACVpsB,KAAM,CACJzU,KAAM,OACNotB,QAAS,QACL9U,WAASwF,EAAOukB,QAAQhsB,SAAWyH,EAAOukB,QAAQhsB,OAAOvG,MAAQ,CAACA,MAAOgO,EAAOukB,QAAQhsB,OAAOvG,OAAS,MACxGwyB,EAAY,CAACj5B,KAAMi5B,GAAa,GACpCppB,OAAQupB,EACRloB,MAAM,GAERumB,eAAgB,UAChBE,cAAe4C,QAIC,YAAhBrB,QACK,IACFH,EACHI,WAAYJ,EAAUI,WAAa,IAAIxkB,OAAOwkB,GAC9CyB,MAAOD,SAMLE,EAAgB,oBAAmBpE,EAAyB/gB,UAC5DolB,EAAgB,oBAAmBrE,EAAyB/gB,UAC5DqlB,EAAW,IAAGD,OAAkBD,KAChCG,EAAoB,GAAEH,OAAkB3rB,OAAY6rB,IACpDE,EAAoB,GAAEH,OAAkB5rB,OAAY6rB,IACpDze,EAAa,UAASma,EAAyB/gB,UAE/CwlB,EAAiD,CACrDC,cAAe1B,GAAmBhD,EAAyB/gB,OAC3Dqf,QAAAA,GAGIqG,EAA2C,CAC/CjC,UAAW,CACT,CACEhd,OAAS,IAAG6e,QAAuB1e,UAAkBA,QAAgB2e,MAEvE,CACE7sB,UAAW,CACT,CACE1R,GAAI,MACJgZ,MAAO+gB,EAAyB/gB,MAChC6f,GAAK,iBAAgBkB,EAAyB/gB,SAEhD,CACEhZ,GAAI,MACJgZ,MAAO+gB,EAAyB/gB,MAChC6f,GAAK,iBAAgBkB,EAAyB/gB,UAI9ChZ,GAAI,MACJgZ,MAAQ,aAAY+gB,EAAyB/gB,QAC7C6f,GAAK,aAAYkB,EAAyB/gB,SAE5C,CACEhZ,GAAI,MACJgZ,MAAQ,aAAY+gB,EAAyB/gB,QAC7C6f,GAAK,aAAYkB,EAAyB/gB,YAEzCtH,GAEL2mB,QAAAA,IAGJ6F,MAAOF,IAGHrzB,QAACA,KAAYg0B,GAAoDnB,GAEjErV,MAACA,EAADmH,KAAQA,GAAQyK,EAChBhL,EAAQsL,GAASN,GACjB6E,EAAmBx9B,EAAKkuB,EAAM,CAAC,UAE/BuP,EAAsB3D,GAAoCpjB,EAAS,WAAYC,EAAOukB,QAAS,CACnGG,UAAW,CAAC,CAAChd,OAAS,IAAGG,OAAe0e,UAAyB1e,OAAe2e,OAChF7vB,KAAM,QACNsiB,SAAU,EACP2J,GAAiB,CAChB3hB,MAAO+gB,EAAyB/gB,MAChC/e,KAAM8/B,EAAyB9/B,aACjBqF,IAAVyvB,EAAsB,CAACA,MAAAA,GAAS,WACtBzvB,IAAV6oB,EAAsB,CAACA,MAAAA,GAAS,MAEhCnkB,EAAQ46B,GAAoB,GAAK,CAACtP,KAAMsP,OAE3CD,KACC50B,EAAQ,CAACA,MAAAA,GAAS,MAClB6yB,EAAsC,CAACjyB,QAASiyB,GAAuC,MAE5F,OAECkC,QACEC,EAAiC,IAAI9Z,KAASqT,EAAWkG,UAC3DK,EACFC,EAAuB,CACrBrC,UAAWsC,EACXb,MAAO,CAACW,EAAqBH,KAG/BI,EAAuBJ,EACvBI,EAAqBrC,UAAUuC,WAAWD,IAGrC,IACF1C,EACH6B,MAAO,CACLY,EACA,CAEErC,UAAAA,EACAyB,MAAOD,KAMf,SAASlB,GAAmBkC,SACnB,CACL,CACEj/B,GAAI,KACJgZ,MAAOimB,EACPpG,GAAK,aAAYoG,KAEnB,CACEj/B,GAAI,KACJgZ,MAAOimB,EACPpG,GAAK,aAAYoG,MClThB,MAAMC,GAAW,WAuFXC,GAAqB,IAAIrH,GAAwBoH,GAAUE,IAEjE,SAASA,GACdllB,GACAnC,OAACA,IAGDmC,EAAO,IACFA,EACH8W,SAAUsI,GAAkBpf,EAAK8W,SAAUjZ,UAGvC0kB,UACJA,EADI1C,yBAEJA,EAFIY,eAGJA,EAHIX,8BAIJA,EAJI0C,YAKJA,EALI5kB,QAMJA,EANIukB,UAOJA,EAPIgD,gBAQJA,GACEC,GAAeplB,EAAMglB,GAAUnnB,UAC5BiiB,EAA6B,WAE9BuF,EAAmB9E,GACvB3iB,EACA6iB,EACAZ,EACAC,EACAjiB,EAAOynB,UAGHC,EAAY3nB,EAAQ2nB,UACpBn8B,EAAOwU,EAAQxU,KACf+L,EAAgB,CACpBpV,KAAM,OACNkZ,OAAQupB,EACRloB,MAAM,UACYlV,IAAdmgC,EAA0B,CAACA,UAAAA,GAAa,WAC/BngC,IAATgE,EAAqB,CAACA,KAAAA,GAAQ,IAG9B46B,EAAQ,IACTqB,EAAiB,CAClBzE,SAAU,QACVpsB,KAAMW,EACN0rB,eAAgB,QAChBE,cAAeoE,OAEdE,EAAiB,CAClBzE,SAAU,QACVpsB,KAAMW,EACN0rB,eAAgB,QAChBE,cAAeoE,OAEdE,EAAiB,CAClBzE,SAAU,OACVpsB,KAAM,CACJzU,KAAM,OACNya,oBAAqB,mBACHpV,IAAdmgC,EAA0B,CAACn8B,KAAMm8B,GAAa,IAEpD1E,eAAgB,QAChBC,kBAAmB,QACnBC,cAAeoE,WAIZ,IACFhD,EACHI,UAAAA,KACIyB,EAAM9hC,OAAS,EAAI,CAAC8hC,MAAAA,GAAS,IAAIA,EAAM,KAI/C,SAASwB,GACPxlB,EACAmW,SAKMW,SAACA,GAAY9W,KAwFrB,SAAgC8W,UAE3BvH,GAAkBuH,EAAS3vB,IAAMooB,GAAkBuH,EAASntB,MAC5D4lB,GAAkBuH,EAASnnB,MAC3B4f,GAAkBuH,EAASlnB,MAC3B2f,GAAkBuH,EAAS2O,UAC3BlW,GAAkBuH,EAAS4O,WAC3BnW,GAAkBuH,EAAS6O,UAC3BpW,GAAkBuH,EAAS8O,SA9F1BC,CAAuB/O,SAClB,CACL7d,OAAQwoB,GAAoBzhB,EAAMmW,GAClC2P,UAAW,aAITC,EA2FR,SAAiDjP,UACxCvH,GAAkBuH,EAASnnB,KAAO4f,GAAkBuH,EAASlnB,IA5FxBo2B,CAAwClP,GAC9EmP,EA8FR,SAA4CnP,UAExCvH,GAAkBuH,EAAS2O,SAC3BlW,GAAkBuH,EAAS4O,UAC3BnW,GAAkBuH,EAAS6O,SAC3BpW,GAAkBuH,EAAS8O,SAnGUM,CAAmCpP,GACpE3vB,EAAI2vB,EAAS3vB,EACbwC,EAAImtB,EAASntB,KAEfo8B,EAA4B,IAG1BE,QACI,IAAI7jC,MAAO,GAAE+zB,2EAGfxmB,EAAKmnB,EAASnnB,GACdC,EAAKknB,EAASlnB,MAEhB2f,GAAkB5f,IAAO4f,GAAkB3f,SAEvC,IAAIxN,MAAO,GAAE+zB,gCACd,GAAI5G,GAAkB5f,GAAK,IAC5BwjB,GAA4BhsB,SAEvB,CAAC8R,OAAQ,aAAc6sB,UAAW,gCAGnC,IAAI1jC,MAAO,4CAA2C+zB,KAEzD,GAAI5G,GAAkB3f,GAAK,IAE5BujB,GAA4BxpB,SAEvB,CAACsP,OAAQ,WAAY6sB,UAAW,gCAGjC,IAAI1jC,MAAO,4CAA2C+zB,WAG1D,IAAI/zB,MAAM,kBACX,OAGCqjC,EAAS3O,EAAS2O,OAClBC,EAAU5O,EAAS4O,QACnBC,EAAS7O,EAAS6O,OAClBC,EAAU9O,EAAS8O,WAErBrW,GAAkBmW,KAAanW,GAAkBkW,SAE7C,IAAIrjC,MAAO,GAAE+zB,2CAGjB5G,GAAkBqW,KAAarW,GAAkBoW,SAE7C,IAAIvjC,MAAO,GAAE+zB,2CAGjB5G,GAAkBkW,IAAWlW,GAAkBoW,SAE3C,IAAIvjC,MAAO,GAAE+zB,kEACd,GAAI5G,GAAkBkW,GAAS,IAChCtS,GAA4BhsB,SAEvB,CAAC8R,OAAQ,aAAc6sB,UAAW,0BAGnC,IAAI1jC,MAAM,iEAEb,GAAImtB,GAAkBoW,GAAS,IAChCxS,GAA4BxpB,SAEvB,CAACsP,OAAQ,WAAY6sB,UAAW,0BAGjC,IAAI1jC,MAAM,uEAGd,IAAIA,MAAM,mBA6Bb,SAASgjC,GAIdplB,EACAmW,EACAtY,SAqBMrJ,KAACA,EAADsiB,SAAOA,EAAP3Q,OAAiBA,EAAQ8b,WAAYC,KAAOC,GAAaniB,EACzDpC,EAAcmP,GAAUvY,GAAQA,EAAQ,CAACzU,KAAMyU,GAGjD2R,GACF5C,GAASA,GAAkC4S,UAGvCld,OAACA,EAAD6sB,UAASA,GAAaN,GAA2BxlB,EAAMmW,IACvD0J,yBACJA,EADIuB,0BAEJA,EAFIC,8BAGJA,EAHIC,+BAIJA,EAJIb,eAKJA,GACEU,GAA4BnhB,EAAM/G,EAAQkd,IAExCgQ,0BAACA,EAADrD,wBAA4BA,EAA5BlD,eAAqDA,EAArDwG,0BAAqEA,GAyD7E,SAIExoB,EACAiiB,EACAuB,EACAC,EACAC,EACAwE,EACA3P,EACAtY,OAOIsoB,EAAkD,GAClDrD,EAAgD,SAC9CH,EAA8B9C,EAAyB/gB,UAEzD8gB,EACAwG,GAA4B,KAEd,QAAdN,EAAqB,OACjBO,EAAyBzoB,EAAQyoB,OACnCzoB,EAAQyoB,OACRzoB,EAAQtF,OACW,QAAnBsF,EAAQtF,OACN,SACA,OACFuF,EAAOynB,SAASe,OACd/tB,EAAyBsF,EAAQtF,OAASsF,EAAQtF,OAAoB,SAAX+tB,EAAoB,SAAW,SAEhF,WAAXA,IAAqC,QAAX/tB,IAC7BiL,GnB1GC,SACL8iB,EACA/tB,EACA9D,SAEQ,GAAE6xB,8BAAmC/tB,SAAc9D,KmBqG9C+O,CAAgD8iB,EAAQ/tB,EAAQ6d,IAG5D,WAAX7d,GAAkC,UAAXA,EACzB6tB,EAA4B,CAC1B,CAACrgC,GAAIwS,EAAQwG,MAAO6jB,EAAqBhE,GAAK,UAASgE,KACvD,CAAC78B,GAAIugC,EAAQvnB,MAAO6jB,EAAqBhE,GAAK,UAASgE,MAGzDG,EAA0B,CACxB,CACEC,UAAY,iBAAgBJ,uBAAyCA,MACrEhE,GAAK,SAAQgE,KAEf,CACEI,UAAY,iBAAgBJ,uBAAyCA,MACrEhE,GAAK,SAAQgE,MAIjB/C,EAAiB,CACf,CAACI,YAAa,UAAWC,YAAav1B,EAAU27B,IAChD,CAACrG,YAAa,SAAUC,YAAaqG,GAAeD,EAAQ/tB,EAAQ,MACpE,CAAC0nB,YAAa,SAAUC,YAAaqG,GAAeD,EAAQ/tB,EAAQ,OAEtE8tB,GAA4B,MACvB,KACDG,EACAC,EACAC,EACW,OAAXnuB,GACFiuB,EAAW,OACXC,EAAgB,MAChBC,EAAgB,QAEhBF,EAAW,SACXC,EAAgB,KAChBC,EAAgB,MAGlBN,EAA4B,CAC1B,CAACrgC,GAAI0gC,EAAe1nB,MAAO6jB,EAAqBhE,GAAK,SAAQgE,KAC7D,CAAC78B,GAAI2gC,EAAe3nB,MAAO6jB,EAAqBhE,GAAK,SAAQgE,KAC7D,CAAC78B,GAAIygC,EAAUznB,MAAO6jB,EAAqBhE,GAAK,UAASgE,MAG3D/C,EAAiB,CACf,CACEI,YAAa,SACbC,YAAapL,GAAM,CAAC/V,MAAO6jB,EAAqBnrB,UAAWivB,EAAe1mC,KAAM,gBAAiB8d,EAAQ,CACvGiX,gBAAgB,KAGpB,CACEkL,YAAa,SACbC,YAAapL,GAAM,CAAC/V,MAAO6jB,EAAqBnrB,UAAWgvB,EAAezmC,KAAM,gBAAiB8d,EAAQ,CACvGiX,gBAAgB,KAGpB,CACEkL,YAAa,UACbC,YAAapL,GAAM,CAAC/V,MAAO6jB,EAAqBnrB,UAAW+uB,EAAUxmC,KAAM,gBAAiB8d,EAAQ,CAClGiX,gBAAgB,WAKnB,EACDlX,EAAQyoB,QAAUzoB,EAAQtF,SAC5BiL,InBrL8C8iB,EmBqLWzoB,EAAQyoB,OnBpL7D,IADkE/tB,EmBqLGsF,EAAQtF,QnBpLlE,UAAY,KAAKA,GAAU+tB,EAAS,OAAS,KAAKA,EAAS,UAAY,KACxF/tB,GAAU+tB,EAAS,OAAS,8CmBsLV,2BAAdP,GACFlG,EAAiB,GACjBkD,EAA0B,CACxB,CAACC,UAAY,UAAS3B,EAA0BtiB,UAAW6f,GAAK,SAAQgE,KACxE,CAACI,UAAY,UAASJ,MAAyBhE,GAAK,SAAQgE,OAEvC,qBAAdmD,IACTlG,EAAiB,CAAC,CAACI,YAAa,GAAIC,YAAa0C,IACjDG,EAA0B,CACxB,CACEC,UAAY,UAASJ,gBAAkCtB,EAA8BviB,UACrF6f,GAAK,SAAQgE,MAIbrB,EACFwB,EAAwBxjC,KAAK,CAC3ByjC,UAAY,UAASJ,gBAAkCrB,EAA+BxiB,UACtF6f,GAAK,SAAQgE,MAGfG,EAAwBxjC,KAAK,CAC3ByjC,UAAY,UAASJ,gBAAkCtB,EAA8BviB,UACrF6f,GAAK,SAAQgE,WAKd,MAAM+D,KAA0B5D,EACnClD,EAAetgC,KAAK,CAClB0gC,YAAa0G,EAAuB/H,GAAGgI,UAAU,EAAG,GACpD1G,YAAaz0B,EAAWA,EAAWk7B,EAAuB3D,UAAW,UAAW,IAAK,KAAM,MnBvN5F,IAA6CsD,EAAwB/tB,QmB2NnE,CAACwqB,wBAAAA,EAAyBqD,0BAAAA,EAA2BvG,eAAAA,EAAgBwG,0BAAAA,GAvM1EQ,CACEhpB,EACAiiB,EACAuB,EACAC,EACAC,EACAwE,EACA3P,EACAtY,KAID4iB,GAAiBuC,GACE,MAAnBvC,EAAyB,KAAO,MAAOoG,GACpB,MAAnBpG,EAAyB,SAAW,UAAWqG,GAC5B,MAAnBrG,EAAyB,UAAY,WAAYsG,KAC/C9D,GACDnM,GAEE/L,KACJA,EADIqT,UAEJA,EACA5mB,UAAWwvB,EACX7I,QAAS8I,EACTnQ,SAAUgJ,GACR7B,GAA8BgF,EAAkCplB,GAE9DrG,EAAkC,IAAIwvB,KAAiBb,GACvDhI,EAAkC,QAAd2H,EAAsB,GAAKmB,EAE/C9B,EAAyCxF,GAC7CC,EACAC,EACAC,EACAsG,SAGK,CACL7D,UAAW,IACLJ,EAAUI,WAAa,MACxBxX,KACAqT,KACsB,IAArB5mB,EAAUtV,OAAe,GAAK,CAAC,CAACsV,UAAAA,EAAW2mB,QAAAA,OAC5C2E,GAEL3E,QAAAA,EACA0B,yBAAAA,EACAY,eAAAA,EACAX,8BAAAA,EACA0C,YAAwB,aAAXvpB,EAAwB,aAAe,WACpD2E,QAAAA,EACAukB,UAAAA,EACAgD,gBAAAA,GAsJJ,SAASmB,GAAeD,EAAwB/tB,EAAwB4uB,SAC9D,GAAEx8B,EAAU27B,MAAWa,KAAa5uB,ICviBvC,MAAM6uB,GAAY,YA2EZC,GAAsB,IAAIxJ,GAAwBuJ,GAAWE,IAEnE,SAASA,GACdrnB,GACAnC,OAACA,IAGDmC,EAAO,IACFA,EACH8W,SAAUsI,GAAkBpf,EAAK8W,SAAUjZ,UAGvC0kB,UACJA,EADI1C,yBAEJA,EAFIY,eAGJA,EAHIX,8BAIJA,EAJIliB,QAKJA,EALIukB,UAMJA,EANIgD,gBAOJA,GACEC,GAAeplB,EAAMmnB,GAAWtpB,GAC9BypB,EAA6B1pB,EAE7B2pB,EAAoBhH,GACxB+G,EACA7G,EACAZ,EACAC,EACAjiB,EAAO2pB,WAGHC,OAA2BriC,IAApB4a,EAAK8W,SAAS3vB,QAAuC/B,IAApB4a,EAAK8W,SAASntB,MAExD+9B,EAAoB,CAAC3nC,KAAM0nC,EAAO,OAAS,QAC3CE,EAAuB,CAAC5nC,KAAM0nC,EAAO,OAAS,cAC5CrsB,EAAc,IACdksB,EAAalsB,YAAc,CAACA,YAAaksB,EAAalsB,aAAe,MACrEksB,EAAajsB,SAAWisB,EAAalsB,YAAc,CAACC,QAASisB,EAAajsB,SAAW,WAGvFosB,GACFC,EAAW,IACNA,KACAtsB,EACHZ,oBAAqB,aAEvBmtB,EAAc,IACTA,KACAvsB,EACHd,MAAM,IAECgtB,EAAalsB,YACtBmI,GAASA,GAAkC,gBAClC+jB,EAAajsB,SACtBkI,GAASA,GAAkC,YAGtC,IACF4e,EACHI,UAAAA,EACAyB,MAAO,IACFuD,EAAkB,CACnB3G,SAAU,OACVpsB,KAAMkzB,EACN7G,eAAgB,QAChBC,kBAAmB,QACnBC,cAAeoE,OAEdoC,EAAkB,CACnB3G,SAAU,UACVpsB,KAAMmzB,EACN9G,eAAgB,QAEhBE,cAAeoE,OAEdoC,EAAkB,CACnB3G,SAAU,UACVpsB,KAAMmzB,EACN9G,eAAgB,QAChBE,cAAeoE,MClIvB,MAAMyC,GAKF,GAEG,SAAS5kC,GAAIwR,EAAcqpB,EAAiCxa,SAC3D7c,EAAa,IAAIo3B,GAAwBppB,EAAMqpB,GACrD+J,GAAsBpzB,GAAQ,CAAChO,WAAAA,EAAY6c,MAAAA,GAgC7CrgB,GAAI4+B,GAASE,GHrDgB,CAAC,MAAO,SAAU,WAAY,OAAQ,UGsDnE9+B,GAAIgiC,GAAUE,GFrCgB,CAAC,QAAS,SEsCxCliC,GAAImkC,GAAWE,GDhEgB,CAAC,OAAQ,YEejC,MAAMQ,GAAqD,CAChE,8BACA,8BACA,4BACA,4BACA,qBChCWC,GAAyF,CACpGjN,WAAY,QACZC,YAAa,SACbC,WAAY,QACZC,cAAe,WACfC,WAAY,QACZC,UAAW,OACXC,cAAe,WACfC,eAAgB,YAChBC,gBAAiB,aACjBC,WAAY,QACZC,gBAAiB,aACjBtE,YAAa,SACbwE,aAAc,UAGHsM,GAAyF,CACpGrQ,WAAY,QACZsQ,YAAa,SACbpO,WAAY,QACZhC,cAAe,WACfC,WAAY,QACZC,UAAW,OACXC,cAAe,WACfC,eAAgB,YAChBC,gBAAiB,aACjB+B,WAAY,QACZC,gBAAiB,aACjBjD,YAAa,SACboB,aAAc,UAGH6P,GAA0BviC,EAAKoiC,IAE/BI,GAA0BxiC,EAAKqiC,IAoO/BI,GAAiBziC,EAPoC,CAChE4vB,OAAQ,EACR8S,UAAW,EACXC,aAAc,EACdC,YAAa,IC1PFC,GAAwB,CACnC,OACA,QACA,OACA,SACA,aACA,cACA,WCdWC,GAAe,UAuSfC,GAAiC,CAC5CxzB,MAAO,CACLyzB,GAAI,QACJC,OAAQ,CAACH,IACTI,OAAQ,iBACRznC,QAAS,SACT0nC,MAAO,YAETC,SAAU,CACRJ,GAAI,kDACJK,UAAW,CAAC,IAAK,KACjBhN,UAAW,kDACXiN,KAAM,SACNx0B,KAAM,CAAC1E,KAAM,OAAQG,YAAa,KAAOF,OAAQ,SACjD5O,QAAS,SACT0nC,MAAO,aAIJ,SAASI,GAAgBC,YACrBA,GAAkB,WAATA,IAAuBA,EAAK7T,QAGzC,SAAS8T,GAAsBD,UAC7BD,GAAgBC,IAAS7wB,WAAS6wB,GAGpC,SAASE,GAAqBC,WAC1BA,EAAK,OC9ST,SAASC,GAAyBnjB,SACjCojB,EAAsC,OACvC,MAAMF,KAASljB,GAAU,GAAI,IAG5BijB,GAAqBC,GAAQ,eAC3BnsB,KAACA,EAADgsB,KAAOA,KAASxvB,GAAQ2vB,KAE1BH,GAAQhsB,EAAM,OAEVC,EAAqB,IACtBzD,EACHwvB,KAAAA,EACAM,KAAMtsB,GAERqsB,EAAQjqC,KAAK6d,OACR,OACCA,EAAoB,IACrBzD,KACCwD,EAAO,CAACusB,OAAQvsB,GAAQ,MACxBgsB,EAAO,CAACA,KAAAA,GAAQ,IAEtBK,EAAQjqC,KAAK6d,WAGVosB,ECeF,SAASG,GAAa1pB,SACpB,WAAYA,EAGd,SAAS2pB,GAAc3pB,SACrB,YAAaA,EAGf,SAAS4pB,GAAc5pB,SACrB,YAAaA,ECkCtB,MAAM6pB,GAAqD,CACzD,aACA,WAIK,SAASC,GAA0BlrC,EAAuBmrC,SACzDnmC,EAAmC,OACpC,MAAMmU,KAAK8xB,GACVjrC,QAAcwG,IAATxG,EAAEmZ,KACTnU,EAAEmU,GAAYY,GAAiB/Z,EAAEmZ,YAGjCgyB,IACFnmC,EAAEuiB,OAASvnB,EAAEunB,QAERviB,ECpEF,SAASomC,GAAO5gC,UACdiP,WAASjP,SAA0BhE,IAAjBgE,EAAI,KAwCxB,SAAS6gC,GAAcrmC,UACrBA,EAAC,MAAYA,EAAC,OAAaA,EAAC,OAsH9B,MA+CDsmC,GAAgCxkC,EAR4C,CAChF4V,MAAO,EACP6uB,OAAQ,EACR9D,OAAQ,EACR+D,QAAS,EACTC,QAAS,IClMJ,SAASC,GACdC,EACAz5B,UAEOy5B,EAAWz5B,IAAYy5B,EAAuB,UAAZz5B,EAAsB,kBAAoB,oBAG9E,SAAS05B,GACdD,EACAz5B,SAEM1H,EAAOqhC,GAA0BF,EAAYz5B,UAC5Ck5B,GAAO5gC,GAAQA,EAAK8tB,KAAOwT,GAG7B,SAASD,GACdF,EACAz5B,UAGOjF,EADM0+B,EAAWz5B,IAAYy5B,EAAuB,UAAZz5B,EAAsB,gBAAkB,kBAC1D,CAAComB,KAAMqT,EAAWrT,OAG1C,MAAMwT,GAAe,GAiKfjC,GAAmC,CAC9CkC,WAAY,QAEZnf,QAAS,EACTuF,WAAY,YACZyD,WAAY,mBAEZoW,KAtKsD,CACtDC,gBAAiB,IACjBC,iBAAkB,IAClB5T,KAAMwT,IAqKNl2B,KvBoFsD,CACtD3E,MAAO,UACPsd,QAAS,SACTC,iBAAkB,GuBrFlB7X,IAAK,GACLZ,KAAM,GACNC,IAAKJ,GACLQ,OAAQ,GACRM,SAAU,GACVT,MAAO,GACPO,KAAM,GACNH,MAAO,GACPH,KAAMN,GACNO,KAAM,CAAClF,MAAO,SACdqF,OAAQ,GACR3E,KAAM,CAACV,MAAO,SACdsF,KvB8YsD,CACtDowB,UAAW,GuB9YXlwB,MAAO,GAEP+sB,QAAS,CACPh5B,KAAM,GACNkP,OAAQ,IACRyyB,IAAK,GACL30B,OAAQ,CAACvG,MAAO,SAChBm7B,SAAU,GACVj2B,KAAM,GACN6lB,MAAO,MAGT0K,SAAU,CACRe,OAAQ,OACRtxB,MAAM,EACN6lB,OAAO,GAGT4M,UAAW,CACTve,KAAM,CACJjZ,QAAS,IAEXi7B,SAAS,GAGXhd,MxBoEwD,CACxDid,aAAc,GAEdC,oBAAqB,GACrBC,qBAAsB,EAEtBC,YAAa,EAEbC,YAAa,EACbC,YAAa,GAEbC,WAAY,GACZC,WAAY,GAGZC,QAAS,EAETC,eAAgB,EAChBC,eAAgB,EAChBC,cAAe,EACfC,cAAe,GwBtFf7J,WAAY,GAEZ5M,ONnH0D,CAC1D0W,4BAA6B,IAC7BC,4BAA6B,IAC7BC,0BAA2B,IAC3BC,0BAA2B,GAC3BC,kBAAmB,KM+GnB7W,OAAQ,CAACmG,aAAc,GAAIrD,aAAc,IACzCiQ,aAAc,GACdD,UAAW,GACXE,YAAa,GAEb8D,UAAWC,GACXruB,MAAO,GAEP6W,MAAO,GAEP3jB,MAAO,CAACm5B,QDlGqB,ICmG7BtsB,OAAQ,CAACssB,QDnGoB,KCuGzBiC,GAAQ,CACZ,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAGWC,GAAoB,CAC/Bh8B,KAAM,GACNi8B,WAAY,GACZxX,WAAY,GACZyX,WAAY,GACZC,cAAe,IAGJC,GAAgB,CAC3BC,KAAMN,GAAM,GACZO,OAAQP,GAAM,GACdQ,IAAKR,GAAM,GACXS,KAAMT,GAAM,GACZU,MAAOV,GAAM,GACbW,OAAQX,GAAM,GACdY,OAAQZ,GAAM,GACda,KAAMb,GAAM,GACZc,MAAOd,GAAM,GACbe,MAAO,OACPC,MAAO,OACPC,MAAO,OACPC,MAAO,OACPC,MAAO,OACPC,MAAO,OACPC,MAAO,OACPC,MAAO,OACPC,MAAO,OACPC,MAAO,OACPC,OAAQ,OACRC,OAAQ,OACRC,OAAQ,OACRC,OAAQ,OACRC,OAAQ,OACRC,OAAQ,QA+FV,SAASC,GAAsBC,SACvBtnC,EAAQtB,EAAK4oC,GAAc,IAC3BC,EAA4C,OAC7C,MAAMtnC,KAAQD,EAAO,OAClBkC,EAAMolC,EAAWrnC,GACvBsnC,EAAmBtnC,GAAe+xB,GAAiD9vB,GAC/E6T,GAAmC7T,GACnCyP,GAAiBzP,UAEhBqlC,EAcT,MAAMC,GAAsB,IACvBlhB,MACA+O,MACA8L,GACH,aACA,UACA,SACA,YACA,QACA,QACA,QACA,QAOK,SAASsG,GAAWC,EAA0B,UAC7C7+B,MAACA,EAAD+L,KAAQA,EAARC,SAAcA,EAAduwB,UAAwBA,KAAcuC,GAAcD,EACpDE,EAAeC,cACnB,GACA/nC,EAAU2hC,IACV7sB,EA1DG,SAAoBA,SAClB,CACLrL,KAAM,CAACqL,KAAAA,GACPoC,MAAO,eACU,CAACpC,KAAAA,iBACD,CAACA,KAAAA,iBACD,CAACA,KAAAA,oBACE,CAACA,KAAAA,KAmDdkzB,CAAWlzB,GAAQ,GAC1B/L,EA3IG,SAA2BA,EAA+B,UACxD,CACL05B,QAAS,CACP,CACEl9B,KAAM,QACN3N,MAAO2Z,WAASxI,GAAS,IAAI88B,MAAkB98B,GAAS88B,KAG5Dn4B,KAAM,CAAC3E,MAAO,CAACsN,OAAQ,eACvBpI,KAAM,CAAClF,MAAO,CAACsN,OAAQ,gBACvB5M,KAAM,CACJV,MAAO,CAACsN,OAAQ,gBAElBa,MAAO,eACU,CACblO,KAAM,CAACqN,OAAQ,8BAEF,CACbrN,KAAM,CAACqN,OAAQ,8BAEF,CACbrN,KAAM,CAACqN,OAAQ,iCAEC,CAChBrN,KAAM,CAACqN,OAAQ,gBAEjB4xB,KAAM,CACJh/B,OAAQ,CAACoN,OAAQ,iBAGrBiY,KAAM,CACJmE,YAAa,CAACpc,OAAQ,gBACtBkb,UAAW,CAAClb,OAAQ,eACpBub,UAAW,CAACvb,OAAQ,iBAEtBjD,MAAO,CACL80B,SAAU,CACR,CAAC7xB,OAAQ,cACT,CAACA,OAAQ,gBACT,CAACA,OAAQ,aACT,CAACA,OAAQ,cACT,CAACA,OAAQ,eACT,CAACA,OAAQ,gBACT,CAACA,OAAQ,gBACT,CAACA,OAAQ,cACT,CAACA,OAAQ,eACT,CAACA,OAAQ,kBA6FL8xB,CAAkBp/B,GAAS,GACnCgM,EAxFG,SAA8BA,SAC5B,CACL0tB,QAAS,CACP,CACEl9B,KAAM,WACN3N,MAAO2Z,WAASwD,GAAY,IAAI0wB,MAAsB1wB,GAAY0wB,KAGtEh8B,KAAM,CACJsL,SAAU,CAACsB,OAAQ,kBAErBa,MAAO,eACU,CACbnC,SAAU,CAACsB,OAAQ,sCAEN,CACbtB,SAAU,CAACsB,OAAQ,sCAEN,CACbtB,SAAU,CAACsB,OAAQ,yCAEH,CAChBtB,SAAU,CAACsB,OAAQ,6BAkEZ+xB,CAAqBrzB,GAAY,GAC5C8yB,GAAc,IAIZvC,GACFxjC,cAAYgmC,EAAc,YAAaxC,GAAW,SAG9C+C,EAAkCjoC,EAAK0nC,EAAcJ,QAEtD,MAAMvnC,IAAQ,CAAC,aAAc,YAAa,WACzC2nC,EAAa3nC,KACfkoC,EAAaloC,GAAQ0R,GAAiBi2B,EAAa3nC,SAIlD,MAAMmoC,KAAkB56B,GACvBo6B,EAAaQ,KAEfD,EAAaC,GAAkB32B,GAAem2B,EAAaQ,SAI1D,MAAMC,KAAkBhT,GACvBuS,EAAaS,KACfF,EAAaE,GAAkBhB,GAAsBO,EAAaS,SAIjE,MAAMC,KAAoBnH,GACzByG,EAAaU,KACfH,EAAaG,GAAoB72B,GAAem2B,EAAaU,YAI7DV,EAAavZ,SACf8Z,EAAa9Z,OAAS5c,GAAem2B,EAAavZ,SAGhDuZ,EAAa3gB,QACfkhB,EAAalhB,MAAQxV,GAAem2B,EAAa3gB,QAG/C2gB,EAAa5wB,QACfmxB,EAAanxB,MAjFjB,SAAgCS,SACxBzX,EAAQtB,EAAK+Y,GAEb8wB,EAAmD,OACpD,MAAMtoC,KAAQD,EAEjBuoC,EAAoBtoC,GAAeonC,GAAsB5vB,EAAYxX,WAEhEsoC,EAyEgBC,CAAuBZ,EAAa5wB,QAGvD4wB,EAAa/Z,QACfsa,EAAata,MAAQpc,GAAem2B,EAAa/Z,QAG/C+Z,EAAahE,OACfuE,EAAavE,KAAOnyB,GAAem2B,EAAahE,OAG3CuE,EAGT,MAAMM,GAAc,CAAC,UAAW3iB,IAE1B4iB,GAA8C,CAClD,QACA,WACA,aACA,UACA,QACA,SACA,eACA,aACA,aACA,SAEA,mBACA,eACA,eACA,YAEA,YACA,aACA,gBACA,oBACA,gBAEA,YACA,aACA,gBACA,oBACA,gBAEA,QACA,YACA,WAGIC,GAAkD,CACtD/E,KAAM,CAAC,kBAAmB,mBAAoB,gBAAiB,iBAAkB,QvB5QjFj2B,KAAM,CAAC,OAAQ,SACfC,IAAK,CAAC,aAAc,qBAAsB,oBAC1CE,KAAM,CAAC,aAAc,qBAAsB,oBAC3CM,KAAM,CAAC,SACPD,KAAM,CAAC,WAAY,cuB4Qd,SAASy6B,GAAuB/xB,GACrCA,EAAS/W,EAAU+W,OAEd,MAAM5W,KAAQyoC,UACV7xB,EAAO5W,MAGZ4W,EAAOuX,SAEJ,MAAMnuB,KAAQ4W,EAAOuX,KACpB4D,GAAuBnb,EAAOuX,KAAKnuB,YAC9B4W,EAAOuX,KAAKnuB,MAKrB4W,EAAOwX,WACJ,MAAMpuB,KAAQ4gC,UACVhqB,EAAOwX,OAAOpuB,MAKrB4W,EAAOrJ,KAAM,KACV,MAAMvN,KAAQgmB,UACVpP,EAAOrJ,KAAKvN,GAGjB4W,EAAOrJ,KAAK/D,SAAW4H,WAASwF,EAAOrJ,KAAK/D,iBACvCoN,EAAOrJ,KAAK/D,QAInBoN,EAAOsI,SACTtI,EAAO0rB,SAAW1rB,EAAO0rB,SAAW,IAAIxrB,OAAOurB,GAAyBzrB,EAAOsI,gBACxEtI,EAAOsI,YAGX,MAAM0pB,KAAYJ,GAAa,KAE7B,MAAMxoC,KAAQgmB,UACVpP,EAAOgyB,GAAU5oC,SAIpB6oC,EAA4BH,GAAgDE,MAC9EC,MACG,MAAM7oC,KAAQ6oC,SACVjyB,EAAOgyB,GAAU5oC,GAO5B8oC,GAA4BlyB,EAAQgyB,OAGjC,MAAM9sB,KTvlBJrd,EAAKkiC,WSylBH/pB,EAAOkF,IAsBlB,SAA6BlF,SACrBhE,gBAACA,EAADC,mBAAkBA,EAAlBF,SAAsCA,GAAYhB,GAAmBiF,EAAOgX,OAG7E/qB,EAAQ+P,KACXgE,EAAOG,MAAM,eAAiB,IACzBH,EAAOG,MAAM,kBACbnE,IAGF/P,EAAQgQ,KACX+D,EAAOG,MAAM,kBAAoB,IAC5BH,EAAOG,MAAM,qBACblE,IAKFhQ,EAAQ8P,UAGJiE,EAAOgX,MAFdhX,EAAOgX,MAAQjb,EAtCjBo2B,CAAoBnyB,OAGf,MAAM5W,KAAQ4W,EACbxF,WAASwF,EAAO5W,KAAU6C,EAAQ+T,EAAO5W,YACpC4W,EAAO5W,UAIX6C,EAAQ+T,QAAUzY,EAAYyY,EAmCvC,SAASkyB,GACPlyB,EACA5W,EACAgpC,EACAC,GAIa,SAATjpC,IACFgpC,EAAS,cAGLjyB,EAA+B,IANKkyB,EAAoBryB,EAAO5W,GAAMipC,GAAqBryB,EAAO5W,MAQjG4W,EAAOG,MAAMiyB,GAAUhpC,IAIxB6C,EAAQkU,KACXH,EAAOG,MAAMiyB,GAAUhpC,GAAQ+W,GAG5BkyB,UAEIryB,EAAO5W,GCzrBX,SAASkpC,GAAYnwB,SACnB,UAAWA,EC/Bb,MAAeowB,GAQbzwC,IAAIqgB,EAA8CmG,UACnDmM,GAAYtS,GACP9gB,KAAKmxC,SAASrwB,EAAMmG,GCgC1B,SAAsBnG,SACpB,WAAYA,EDhCNswB,CAAatwB,GACf9gB,KAAKqxC,UAAUvwB,EAAMmG,GACnByjB,GAAc5pB,GAChB9gB,KAAKsxC,WAAWxwB,EAAMmG,GACpBwjB,GAAc3pB,GAChB9gB,KAAKuxC,WAAWzwB,EAAMmG,GACpBujB,GAAa1pB,GACf9gB,KAAKwxC,UAAU1wB,EAAMmG,GAErBjnB,KAAKyxC,eAAe3wB,EAAMmG,GAI9BwqB,eAAe3wB,EAAemG,MAC/BgqB,GAAYnwB,UACP9gB,KAAK0xC,SAAS5wB,EAAMmG,GACtB,GAAIwX,GAAW3d,UACb9gB,KAAK2xC,QAAQ7wB,EAAMmG,SAEtB,IAAI/jB,MAAMmhB,GAAwBvD,IAKhC4wB,SAAS5wB,EAAUmG,SACpB,IACFnG,EACHgkB,MAAOhkB,EAAKgkB,MAAMrkC,KAAImxC,GAAW5xC,KAAKyxC,eAAeG,EAAS3qB,MAIxDqqB,WACRxwB,EACAmG,SAEO,IACFnG,EACH+wB,QAAS/wB,EAAK+wB,QAAQpxC,KAAImxC,GAAW5xC,KAAKS,IAAImxC,EAAS3qB,MAIjDsqB,WACRzwB,EACAmG,SAEO,IACFnG,EACHgxB,QAAShxB,EAAKgxB,QAAQrxC,KAAImxC,GAAW5xC,KAAKS,IAAImxC,EAAS3qB,MAIjDuqB,UACR1wB,EACAmG,SAEMpI,OAACA,KAAWrE,GAAQsG,QAEnB,IACFtG,EACHqE,OAAQA,EAAOpe,KAAImxC,GAAW5xC,KAAKS,IAAImxC,EAAS3qB,MAI1CkqB,SAASrwB,EAAuCmG,SACjD,IAEDnG,EAEJA,KAAM9gB,KAAKS,IAAIqgB,EAAKA,KAAMmG,IAIpBoqB,UAAUvwB,EAAkBmG,SAC7B,IACFnG,EAEHA,KAAM9gB,KAAKS,IAAIqgB,EAAKA,KAAamG,KEnEvC,MAAM8qB,GAAqB,CACzB1lB,KAAM,EACN8a,OAAQ,EACRjjB,UAAW,GAoCN,MAAM8tB,GAAkB,IAAI7wC,IAAU,CAAC0rB,GAAKE,GAAKD,GAAMM,GAAMF,GAAOK,GAAQC,GAAQP,GAAM7d,GAAMie,KAC1F4kB,GAAyB,IAAI9wC,IAAU,CAAC4rB,GAAKD,GAAMD,KAEhE,SAASqlB,GAAuBpjB,UACvBG,GAAWH,IAA8C,iBAA/BkD,GAAelD,KAAmCA,EAAWnW,IAGhG,SAASw5B,GACPva,EACA3vB,SAEMwC,EAAU,MAANxC,EAAY,IAAM,SAEtBmqC,EAAOxa,EAAS3vB,GAChBoqC,EAAOza,EAASntB,MAElBwkB,GAAWmjB,IAASnjB,GAAWojB,MAC7BH,GAAuBE,IAASF,GAAuBG,GAAO,IAC5DD,EAAKjiB,aACAloB,EACF,GAAIoqC,EAAKliB,aACP1lB,QAEH+3B,EAAavT,GAAWmjB,MAAWA,EAAK95B,aAG1CkqB,KAFevT,GAAWojB,MAAWA,EAAK/5B,kBAGrCkqB,EAAav6B,EAAIwC,EACnB,eACC6nC,YAASF,EAAKrjB,0BAALwjB,EAAY1xC,KACrB2xC,YAASH,EAAKtjB,0BAAL0jB,EAAY5xC,QAEvByxC,GAAqB,WAAXA,SACL7nC,EACF,GAAI+nC,GAAqB,WAAXA,SACZvqC,OAGN,CAAA,GAAIiqC,GAAuBE,UACzBnqC,EACF,GAAIiqC,GAAuBG,UACzB5nC,MAEJ,CAAA,GAAIynC,GAAuBE,UACzBnqC,EACF,GAAIiqC,GAAuBG,UACzB5nC,GAoBJ,SAAS0lB,GACdtM,EACA+T,EACA5Y,EAEI,kBAEE1J,EAAOuY,GAAUhK,GAAKA,EAAEhjB,KAAOgjB,MAEhCmuB,GAAgB7nC,IAAImL,UAChB,WAQHo9B,EAAeP,GAAwBva,EAAU,MAAQua,GAAwBva,EAAU,aAE5F8a,SACI,WAGHC,EAAkB/a,EAAS8a,GAC3BE,EAAe3jB,GAAW0jB,GAAmB9yB,GAAQ8yB,EAAiB,SAAMzsC,MAE9E2sC,EA1CN,SAA6BjhC,UACnBA,OACD,UACI,QACJ,UACI,QACJ,cACI,aACJ,eACI,SAiC4CkhC,CAAoBJ,GACvEK,EAAenb,EAASib,GAExBG,EAAiB/jB,GAAW8jB,GAAgBlzB,GAAQkzB,EAAc,SAAM7sC,EAGxE8sC,IAAmBJ,IACrBI,OAAiB9sC,EACjB6sC,OAAe7sC,EACf2sC,OAAmB3sC,SAIf+sC,EAAUj/B,GAAqBlU,QAAO,CAACozC,EAAIthC,QAE/B,YAAZA,GAAyBitB,GAAgBjH,EAAUhmB,GAAU,OACzDkd,EAAa8I,EAAShmB,OACvB,MAAMuhC,KAAQvqC,QAAMkmB,GAAa,OAC9B9M,EAAWuU,GAAY4c,MACzBnxB,EAAS1J,yBAKP7S,EAAIoa,GAAQmC,EAAU,IAGzBvc,GAEDA,IAAMutC,GAENE,EAAG9yC,KAAK,CAACwR,QAAAA,EAASoQ,SAAAA,YAIjBkxB,IACN,QAGCp5B,UAC0B5T,IAA1BysC,EAAgBxiB,MAEhBrW,EADEhP,YAAU6nC,EAAgBxiB,OACnBwiB,EAAgBxiB,MAAQ,OAAS,KAEjCwiB,EAAgBxiB,MAElB8hB,GAAuB9nC,IAAImL,KACpCwE,EAAS,SAGNA,KAAyBA,KA7KlBi4B,WA8KH,KA/KJ,IlCsR+BngC,KkCpGhCktB,GAAYlH,IAAgC,IAAnBqb,EAAQjwC,cAC5B,QAIL2vC,MAAAA,aAAAA,EAAiB5jB,sBAAOluB,OAAQ8xC,MAAAA,aAAAA,EAAiB5jB,4BAAOluB,QAASwoB,GAAkB,IACjFrK,EAAIo0B,8BACC,KAEP/uB,GlC+FC,SAAmC1B,SAChC,kCAAiCA,MkChG5B0B,CAAsCsuB,EAAgB5jB,MAAMluB,cAKrEwvB,GAAkBuH,EAAS3kB,GAAyBy/B,WACxBxsC,IAA1BysC,EAAgBxiB,OAClB9L,GlCqFI,iBAD4BzS,EkCpFW8gC,2BlCqFU9gC,QkCnFhD,OAILqd,GAAW0jB,IAAoBA,EAAgBr6B,YAAc3P,EAAS4P,GAASo6B,EAAgBr6B,YACjG+L,GlCsFM,6EkCtF0CsuB,EAAgBr6B,gBAG3D,CACL+6B,eAAgBN,EAAeF,OAAmB3sC,EAClDotC,aAAcN,EACdN,aAAAA,EACAjiB,OAAmC,OAA3BkiB,EAAgBliB,QAA0B/C,GAAWpY,GAC7D29B,QAAAA,EACAn5B,OAAAA,IChPJ,SAASy5B,GAAiB70B,SACjB3I,MAAOy9B,EAAQt9B,KAAMu9B,KAAUn+B,GAAQoJ,SAEvClY,EAAK8O,GAAMtS,OAAS,EAAIsS,EAAOA,EAAKzU,KAG7C,SAAS6yC,GAA2B/0B,OAC7B,MAAMrJ,IAAQ,CAAC,OAAQ,OAAQ,OAAQ,SACtCqJ,EAAOrJ,KACTqJ,EAAS,IACJA,GAEFrJ,GAAOtN,EAAK2W,EAAOrJ,GAAO,CAAC,QAAS,kBAIpCqJ,EAGT,SAASg1B,GACPj1B,EACAk1B,EAA8C,GAC9Chc,SAEsB,gBAAlBlZ,EAAQ3I,MACH,CAACjF,QAAS,GACR4N,EAAQ3I,MAEVoD,WAASuF,EAAQ3I,OAAS2I,EAAQ3I,MAAQ,QACtB7P,IAAlBwY,EAAQ3I,MAEV,KAGH69B,EAAW79B,OAAS6hB,EAASzmB,MAExBgI,WAASy6B,EAAW79B,OAAS69B,EAAW79B,MAAQ,UAO7D,SAAS89B,GACPn1B,EACAk1B,EAA8C,WAE1Cl1B,EAAQxI,MAEc,IAAjBwI,EAAQxI,KAAgB,GAAKwI,EAAQxI,UAClBhQ,IAAjBwY,EAAQxI,KAEV,KAGH09B,EAAW19B,MAEc,IAApB09B,EAAW19B,KAAgB,GAAK09B,EAAW19B,YAOjD,MAAM49B,gCACG,gBAEPlV,gBAAgB9d,EAA4CnC,MAC7D8f,GAAW3d,GAAO,OACdxL,KAACA,EAADsiB,SAAOA,GAAY9W,EACnBpC,EAAUmP,GAAUvY,GAAQA,EAAO,CAACzU,KAAMyU,UACxCoJ,EAAQ7d,UACT,WACA,WACA,gBACM8yC,GAAgBj1B,EAASC,EAAOD,EAAQ7d,MAAO+2B,OACrD,eAGC+b,GAAgBj1B,EAASC,EAAOD,EAAQ7d,MAAO+2B,MAC/Cic,GAAen1B,EAASC,EAAOD,EAAQ7d,eAI1C,EAGF89B,IAAI7d,EAA+BizB,EAA8B7vB,SAChEvF,OAACA,GAAUo1B,GACX9sB,OAACA,EAAD8b,WAASA,EAATztB,KAAqBA,EAAMsiB,SAAU13B,KAAM+iC,GAAaniB,EAGxD8W,EAAWsI,GAAkBhgC,EAAGye,GAEhCD,EAAmBmP,GAAUvY,GAAQA,EAAO,CAACzU,KAAMyU,GAEnD0+B,EAAeL,GAAgBj1B,EAASC,EAAOD,EAAQ7d,MAAO+2B,GAC9Dqc,EAA+B,SAAjBv1B,EAAQ7d,MAAmBgzC,GAAen1B,EAASC,EAAOD,EAAQ7d,OAEhFikC,EAA8B,CAClC,IACM7d,EAAS,CAACA,OAAAA,GAAU,GACxB3R,KAAMi+B,GAAiB,IAEA,SAAjB70B,EAAQ7d,WAAuCqF,IAApBwY,EAAQ5N,cAAiD5K,IAAxBwY,EAAQ3N,YACpE,CAACD,QAAS,IACV,MACD4N,IAGLkZ,SAAU5vB,EAAK4vB,EAAU,CAAC,YAOxBsc,EAAa/jB,GAAMzR,EAASkZ,OAE9Buc,EAAkBvc,KAClBsc,EAAY,OACPxB,aAAc0B,EAAft6B,OAAkCA,GAAUo6B,EAClDC,EAAkB,IACbvc,GACFwc,GAAoB,IAChBxc,EAASwc,MACRt6B,EAAS,CAACqW,MAAOrW,GAAU,YAKjCm6B,GACFnP,EAAM1kC,KAAK,IACL2iC,EAAa,CAACA,WAAAA,GAAc,GAChCztB,KAAM,CACJzU,KAAM,UACHgH,EAAK6W,EAAS,CAAC,OAAQ,cAAe,UAAW,eACjDu1B,GAELrc,SAAUuc,IAGVH,GACFlP,EAAM1kC,KAAK,IACL2iC,EAAa,CAACA,WAAAA,GAAc,GAChCztB,KAAM,CACJzU,KAAM,QACNiQ,QAAS,EACTkd,QAAQ,KACLnmB,EAAK6W,EAAS,CAAC,OAAQ,eACvBs1B,GAELpc,SAAUuc,IAIPjwB,EACL,IACK+e,EACH6B,MAAAA,GAEF,IACKiP,EACHp1B,OAAQ+0B,GAA2B/0B,MCnJpC,SAAS01B,GACdriC,EACAsiC,UAEKA,EAIDphB,GAAelhB,GACVuiC,GAAyBviC,EAAOsiC,GAElCE,GAA0BxiC,EAAOsiC,GAN/BtiC,EASJ,SAASyiC,GACd7c,EACA0c,UAEKA,EAIEC,GAAyB3c,EAAU0c,GAHjC1c,EASX,SAAS8c,GAAuB3sC,EAAerD,EAAM4vC,SAC7CtqC,EAAMtF,EAAEqD,UxB8JY6X,EwB7JV5V,KxB8JCzB,WAASqX,IAAU,WAAYA,EwB7J1C5V,EAAI2qC,UAAUL,EACT,IAAI5vC,GAAIqD,GAAOusC,EAAStqC,EAAI2qC,cAEnCtwB,GpC8BC,SAA6BzE,SAC1B,2BAA0BA,MoC/BrByE,CAAgCra,EAAI2qC,SAI1CjwC,ExBqJF,IAAqBkb,EwB9I5B,SAAS40B,GAA0BxyB,EAA2BsyB,WAG3CpuC,KAFjB8b,EAAW0yB,GAAoB,QAAS1yB,EAAUsyB,KAK3C,GAAiB,OAAbtyB,SACF,QAGLsR,GAAmBtR,IAAagR,GAAYhR,EAASvb,MAAO,OACxDA,EAAOiuC,GAAoB,QAAS1yB,EAASvb,KAAM6tC,GACzDtyB,EAAW,IACNA,KACCvb,EAAO,CAACA,KAAAA,GAAQ,WAIjBub,GAGT,SAAS4yB,GAAiC5f,EAAwCsf,MAC5ErlB,GAAW+F,UACNwf,GAA0Bxf,EAAKsf,GACjC,OACCniB,EAAWuiB,GAAoB,QAAS1f,EAAKsf,UAC/CniB,IAAa6C,GAAQ7C,EAAStxB,OAChCsxB,EAAStxB,KAAO,WAEXsxB,GAIX,SAAS0iB,GAA4B/lB,EAA+BwlB,OAC9DjkB,GAAkBvB,GAOf,IACDkF,GAA8BlF,GAAa,OACvC6H,EAAKie,GAAiC9lB,EAAWhR,UAAWw2B,MAC9D3d,QACK,IACF7H,EACHhR,UAAW6Y,GAER,OACC7Y,UAACA,KAAcg3B,GAA8BhmB,SAC5CgmB,UAGJhmB,EApB0B,OAC3B6H,EAAKie,GAAiC9lB,EAAYwlB,MACpD3d,SACKA,EACF,GAAI7C,GAAoChF,SACtC,CAAChR,UAAWgR,EAAWhR,YAsBpC,SAASy2B,GACPnU,EACAkU,SAEMjuC,EAAkC,OACnC,MAAMuL,KAAWwuB,KAChBz4B,iBAAey4B,EAASxuB,GAAU,OAC9Bkd,EAAsDsR,EAAQxuB,MAEhEzR,UAAQ2uB,GAEVzoB,EAAIuL,GAAYkd,EACbruB,KAAIyzB,GAAM2gB,GAA4B3gB,EAAIogB,KAC1CjuB,QAAO6N,GAAMA,QACX,OACCA,EAAK2gB,GAA4B/lB,EAAYwlB,QACxCpuC,IAAPguB,IACF7tB,EAAIuL,GAAWsiB,WAKhB7tB,ECzIF,MAAM0uC,gCACG,qBAEPnW,gBAAgB9d,MACjB2d,GAAW3d,GAAO,OACd8W,SAACA,EAADtiB,KAAWA,GAAQwL,KACZ,SAATxL,GAAoBuY,GAAUvY,IAAuB,SAAdA,EAAKzU,SACzC,MAAM+Q,KAAWiB,GAAyB,OAEvCmiC,EAAiBpd,EADH7kB,GAAoBnB,OAGpCgmB,EAAShmB,KACNqd,GAAW+lB,KAAoB97B,GAAS87B,EAAer8B,MAAS+W,GAAWslB,WACvE,UAMV,EAGFrW,IAAI7d,EAAsBmG,EAA0B/C,SACnD0T,SAACA,EAADtiB,KAAWA,GAAQwL,ErCkLtB,IAAuBm0B,EAAgBC,SqCjL1C7wB,IrCiL0B4wB,IqCjLWrd,EAASnnB,GrCiLJykC,IqCjLUtd,EAASlnB,GrCmLvD,kEADSukC,GAASC,EAAQ,YAAcD,EAAQ,KAAO,6DqChLtD/wB,EACL,IACKpD,EACHxL,KAAM6D,WAAS7D,GAAQ,IAAIA,EAAMzU,KAAM,QAAU,QAEnDomB,ICuRN,SAASkuB,IAAcC,eACrBA,EADqBxd,SAErBA,EAAW,GAFUkN,MAGrBA,QAMI7kB,EAAc,MACdm1B,EAAgB,OACZC,EAAW,IAAIl0C,IAAI,IAAIqF,EAAK4uC,MAAoB5uC,EAAKoxB,SACtD,MAAMhmB,KAAWyjC,EAAU,OACxBvmB,EAAa8I,EAAShmB,GACtB0jC,EAAmBF,EAAexjC,MAEpCye,GAAkBvB,GAAa,OAG3BymB,EAAmB,IACpBD,KACAxmB,GAEL7O,EAAOrO,GAAW2jC,OACTvhB,GAA8BlF,GACvC7O,EAAOrO,GAAW,IACbkd,EACHhR,UAAW,IACNw3B,KACAxmB,EAAWhR,YAGTgR,GAA6B,OAAfA,EACvB7O,EAAOrO,GAAWkd,GAElBgW,GACAlU,GAAW0kB,IACXx6B,GAAYw6B,IACZjlB,GAAkBilB,IAClBn1C,UAAQm1C,MAERr1B,EAAOrO,GAAW0jC,SAItBr1B,EAAS2X,SAEH3X,GAAUrV,EAAQqV,QAAU/Z,EAAY+Z,EAGlD,SAASu1B,GAAgDx2B,SAIjDy2B,iBAACA,EAAD1S,WAAmBA,GAAc/jB,SACnCy2B,GAAoB1S,GACtB1e,GtChQG,SAA8DrF,SAI7Dy2B,iBAACA,EAAD1S,WAAmBA,GAAc/jB,QAC/B,6BAA4BhZ,EAAUyvC,0CAAyDzvC,EACrG+8B,MsC0PS1e,CAAiC,CAACoxB,iBAAAA,EAAkB1S,WAAAA,KAExDA,GAAc0S,ECjWhB,SAASC,GAASh2C,SAChB,WAAYA,EA0Ud,SAASi2C,GAASj2C,SAChB,WAAYA,EAsDd,SAASk2C,GAAQl2C,SACf,UAAWA,EAiEb,SAASm2C,GAAUn2C,SACjB,YAAaA,EAgCf,SAASo2C,GAAWp2C,SAClB,aAAcA,EAuDhB,SAASq2C,GAAar2C,SACpB,eAAgBA,EAkClB,SAASs2C,GAAQt2C,SACf,UAAWA,EAGb,SAASu2C,GAASv2C,SAChB,WAAYA,EAGd,SAASw2C,GAASx2C,SAChB,WAAYA,EAGd,SAASy2C,GAAgBz2C,SACvB,kBAAmBA,EAGrB,SAAS02C,GAAU12C,SACjB,YAAaA,EAEf,SAAS22C,GAAY32C,SACnB,cAAeA,EAGjB,SAAS42C,GAAM52C,SACb,QAASA,EAGX,SAAS62C,GAAS72C,SAChB,WAAYA,EAGd,SAAS82C,GAAW92C,SAClB,aAAcA,EAGhB,SAASo/B,GAAYp/B,SACnB,cAAeA,EAGjB,SAAS+2C,GAAQ/2C,SACf,UAAWA,EAGb,SAASg3C,GAAOh3C,SACd,SAAUA,EC1kBnB,SAASi3C,GAAoB71B,EAAWizB,SAC/B1Q,UAAWuT,KAAOp8B,GAAQsG,KAC7B81B,EAAI,OAqBC,IAAIp8B,EAAM6oB,UApBCuT,EAAGn2C,KAAKf,OACpBg2C,GAASh2C,SACJ,CAAC2mB,OAAQyC,GAAmBppB,EAAGq0C,IACjC,GAAIuC,GAAM52C,IAAMsZ,GAAYtZ,EAAEiZ,WAC5B,IACFjZ,EACHiZ,IAAKk+B,GAAmBn3C,EAAEiZ,MAEvB,GAAIg9B,GAASj2C,GAAI,OACfwtC,UAAW/C,KAAU2M,GAAQp3C,EAAEo3C,YAC/B3M,EACH,IACKzqC,EACHo3C,KAAM,CAAC3M,MAAAA,KAAU2M,IAEnBp3C,SAECA,aAMJohB,EAGT,SAASi2B,GAAoBn2C,EAAUmzC,iBAC/BiD,EAAMpvC,EAAUhH,MAElBquB,GAAW+nB,IAAQh+B,GAAYg+B,EAAIr+B,OACrCq+B,EAAIr+B,IAAMk+B,GAAmBG,EAAIr+B,MAG/BmZ,GAAgBklB,cAASA,EAAIjoB,8BAAJkoB,EAAW/7B,qBAAZg8B,EAA4BhK,UAAW,OAC1DA,UAAW/C,KAAUjvB,GAAU87B,EAAIjoB,MAAM7T,OAChD87B,EAAIjoB,MAAM7T,OAAS,IAAIA,KAAYivB,EAAQ,CAACA,MAAAA,GAAS,OAGnDrW,GAAiBkjB,MACf72C,UAAQ62C,EAAIl5B,WACdk5B,EAAIl5B,UAAYk5B,EAAIl5B,UAAUrd,KAAKyE,UAC3BgoC,UAACA,EAAD/C,MAAYA,EAAZ9a,KAAmBA,KAAS8nB,GAAQjyC,SACnCilC,EAAQjlC,EAAI,IAAIiyC,EAAM9nB,KAAMvG,GAAmB5jB,EAAG6uC,WAEtD,OACC7G,UAACA,EAAD/C,MAAYA,EAAZ9a,KAAmBA,KAAS8nB,GAAQJ,GAAoBC,EAAIl5B,UAAWi2B,GAC7EiD,EAAIl5B,UAAYqsB,EACZ6M,EAAIl5B,UACJ,IACKq5B,EACH9nB,KAAMvG,GAAmBkuB,EAAIl5B,UAAWi2B,WAK3CiD,EAGT,SAASH,GAAmBl+B,SACpBy+B,EAAMz+B,EAAIS,UACZg+B,MAAAA,GAAAA,EAAKlK,UAAW,OACXA,UAAW/C,KAAU3vB,GAAQ48B,QAC7B,IAAIz+B,EAAKS,OAAQ,IAAIoB,EAAM2vB,MAAAA,WAG7BxxB,EAGT,SAASmQ,GAAmBliB,EAASmtC,SAE7BsD,EAAiC3yC,GAC9B2C,EAA4B3C,GAAGylC,gBAE9BmN,EAAO,CAACnN,MAAAA,EAAOoN,MADPxD,EAAWyD,gBAAgBrN,KAAU,YAEnD4J,EAAW0D,qBAAoBtN,OAAAA,GAAW,IAC1C4J,EAAW0D,oBAAoBtN,GAAO/pC,KAAKk3C,GACpCA,YAIJ1wC,EAAGsmC,UACNmK,EAA8BzwC,EAAGsmC,WACjC7lC,EAA4BT,EAAGyoB,MAAQzoB,EAAGyf,QAAQ3hB,GAChDA,EAAEwoC,UAAYmK,EAA8B3yC,EAAEwoC,WAAaxoC,IC5I5D,MAAMgzC,WAAqCxG,GACzCzwC,IAAIqgB,EAAgCizB,SACnC4D,EAAa5D,EAAW4D,YAAc,MACxC72B,EAAKmG,SAAWwX,GAAW3d,GAAO,OAC9BmG,EAA8B,OAC/B,MAAMkjB,KAASrpB,EAAKmG,OACnBijB,GAAqBC,GACvBwN,EAAWv3C,KAAK+pC,GAEhBljB,EAAO7mB,KAAK+pC,GAIhBrpB,EAAKmG,OAASA,SAGhB8sB,EAAW4D,WAAaA,EACjBC,MAAMn3C,IAAIqgB,EAAM+2B,GAAoB/2B,EAAMizB,IAG5CpC,QAAQ7wB,EAAuBizB,SAC9B4D,EAAa5D,EAAW4D,eACzBA,IAAeA,EAAW30C,OAAQ,OAAO8d,QAExCjV,GAAQkoC,EAAWloC,MAAQ,IAAIgT,OAAOiC,EAAK3T,MAC3C8Z,EAA+B,OAEhC,MAAMimB,KAAayK,KAEjBzK,EAAU4K,OAAU5K,EAAU4K,MAAM90C,WAGlC,MAAM0oC,KAAQwB,EAAU4K,OAGxBvvC,WAASmjC,KAAUA,IAAS5qB,EAAK3T,MAAQtB,EAAKvI,QAAQooC,IAAS,IAC/DvrC,UAAQurC,IACPA,EAAKjrC,KAAIsJ,GAAK8B,EAAKvI,QAAQyG,KAAIZ,OAAM,CAACY,EAAGxG,EAAGyF,KAAe,IAAPe,IAAmB,IAANxG,GAAWwG,EAAIf,EAAIzF,EAAI,QAE1F0jB,EAAO7mB,KAAK8sC,QAThBjmB,EAAO7mB,KAAK8sC,UAeZjmB,EAAOjkB,SAAQ8d,EAAKmG,OAASA,GAC1BnG,GAIX,IAAK,MAAMi3B,IAAU,CAAC,WAAY,YAAa,aAAc,aAAc,YAAa,OAChF/1C,EAAQ01C,GAA6Bv4C,UAAU44C,GACrDL,GAA6Bv4C,UAAU44C,GAAU,SAAUj3B,EAAgBmG,UAClEjlB,EAAMjC,KAAKC,KAAM8gB,EAAM+2B,GAAoB/2B,EAAMmG,KAI5D,SAAS4wB,GAAoB/2B,EAAgBmG,UACpCnG,EAAK3T,KACR,IACK8Z,EACHpb,MAAOob,EAAOpb,MAAQ,IAAIgT,OAAOiC,EAAK3T,OAExC8Z,ECzDC,SAAS/C,GACdpD,EACAnC,QAEezY,IAAXyY,IACFA,EAAS4wB,GAAWzuB,EAAKnC,eAGrBq5B,EAmBR,SACEl3B,EACAnC,EAA4B,UAEtBo1B,EAAa,CAACp1B,OAAAA,UACbs5B,GAA4Bx3C,IACjCy3C,GAAez3C,IAAI03C,GAA0B13C,IAAIqgB,EAAMizB,GAAaA,GACpEA,GA1BqBqE,CAAqBt3B,EAAMnC,IAE5CpB,MAACA,EAADC,OAAQA,GAAUsD,EAClBu3B,EAkCD,SACLv3B,EACAw3B,EACA35B,OAEIpB,MAACA,EAADC,OAAQA,GAAU86B,QAEhBC,EAAkB9Z,GAAW3d,IAASmwB,GAAYnwB,GAClD03B,EAAkC,GAEnCD,EAYU,aAATh7B,GAAkC,aAAVC,GAC1Bg7B,EAAgB33C,KAAO,MACvB23C,EAAgB7vC,SAAW,WACT,aAAT4U,GACTi7B,EAAgB33C,KAAO,QACvB23C,EAAgB7vC,SAAW,WACR,aAAV6U,IACTg7B,EAAgB33C,KAAO,QACvB23C,EAAgB7vC,SAAW,YAlBhB,aAAT4U,IACF8G,GAASA,GAAmC,UAC5C9G,OAAQrX,GAEI,aAAVsX,IACF6G,GAASA,GAAmC,WAC5C7G,OAAStX,UAgBPmyC,EAA2B,CAC/Bx3C,KAAM,SACH23C,KACC75B,EAAS85B,GAAmB95B,EAAO05B,UAAY,MAChDI,GAAmB33B,EAAKu3B,WAGP,QAAlBA,EAASx3C,MAAmB03C,IAC9Bl0B,GAASA,IACTg0B,EAASx3C,KAAO,OAGL,aAAT0c,GAA2C,OAAjB86B,EAASx3C,MAAkC,SAAjBw3C,EAASx3C,MAC/DwjB,GAASA,GAAmD,UAEhD,aAAV7G,GAA4C,OAAjB66B,EAASx3C,MAAkC,SAAjBw3C,EAASx3C,MAChEwjB,GAASA,GAAmD,cAI1D9c,EAAU8wC,EAAU,CAACx3C,KAAM,sBAIxBw3C,EA5FUK,CAAkBV,EAAgB,CAACz6B,MAAAA,EAAOC,OAAAA,EAAQ66B,SAAUv3B,EAAKu3B,UAAW15B,SAEtF,IACFq5B,KACCK,EAAW,CAACA,SAAAA,GAAY,IAIhC,MAAMH,GAAiB,IJNhB,cAA6BhH,mEAC+B,CAC/DvO,GACAoD,GACAmC,GACA,IAAI4L,GACJ,IAAIiB,KAGCt0C,IAAIqgB,EAAgFmG,MAErFwX,GAAW3d,GAAO,OACd63B,EAAS9Z,GAAgB/d,EAAK8W,SAAUlqB,GACxCkrC,EAAY/Z,GAAgB/d,EAAK8W,SAAUjqB,GAC3CkrC,EAAWha,GAAgB/d,EAAK8W,SAAUhqB,MAE5C+qC,GAAUC,GAAaC,SAClB74C,KAAK84C,eAAeh4B,EAAMmG,UAI9B2wB,MAAMn3C,IAAIqgB,EAAMmG,GAIlB0qB,QAAQ7wB,EAAuBmG,SAC9BmuB,eAACA,EAADK,iBAAiBA,GAAoBxuB,EAErC2Q,EAAW6c,GAA0B3zB,EAAK8W,SAAU3Q,EAAOqtB,UAE3DyE,EAA2B,IAC5Bj4B,KACC8W,EAAW,CAACA,SAAAA,GAAY,OAG1Bwd,GAAkBK,SACbz1C,KAAKg5C,sCAAsCD,EAA0B9xB,SAGxEgyB,EAAuBj5C,KAAKyxC,eAAezH,KAAKhqC,UAEjD,MAAMk5C,KAAkBl5C,KAAKm5C,2BAC5BD,EAAeta,gBAAgBma,EAA0B9xB,EAAOtI,eAC3Du6B,EAAeva,IAAIoa,EAA0B9xB,EAAQgyB,UAIzDF,EAGC1H,UACRvwB,EACAmG,ULzBG,SAA2BnG,UACxB3gB,UAAQ2gB,EAAK6zB,SAAW7zB,EAAK6zB,OAAL,MK0B1ByE,CAAkBt4B,GACb9gB,KAAKq5C,eAAev4B,EAAMmG,GAE1BjnB,KAAKs5C,kBAAkBx4B,EAAMmG,GAIhCoyB,eACNv4B,EACAmG,SAEM0tB,OAACA,EAAQ7zB,KAAMy4B,KAAc/+B,GAAQsG,GACrChP,IAACA,EAADC,OAAMA,EAAN+yB,MAAcA,GAAS6P,GAEvBL,SAACA,EAAW,GAAZkF,eAAgBA,EAAiB,IAAMvyB,SAEzCnV,GAAOC,EACF/R,KAAKqxC,UACV,IACKvwB,EACH6zB,OAAQ,IACF7iC,EAAM,CAACA,IAAAA,GAAO,MACdC,EAAS,CAACA,OAAAA,GAAU,IAE1B+O,KAAM,CACJ6zB,OAAQ,CAAC7P,MAAAA,GACThkB,KAAMy4B,IAGVtyB,GAGK,IACFzM,EACHsqB,MAAOA,EAAMrkC,KAAIg5C,UACTC,EAAgB,IACjBpF,EACHxP,MAAO2U,GAGHE,EAAa,IAAGJ,EAAUpsC,MAAQ,IAAMqsC,iBAA8BzuC,EAAQ0uC,KAE9E13C,EAAQ/B,KAAKyxC,eAAe8H,EAAW,IAAItyB,EAAQqtB,SAAUoF,EAAeF,eAAgBG,WAClG53C,EAAMoL,KAAOwsC,EAEN53C,MAMPu3C,kBAAkBx4B,EAA0BmG,SAC5C0tB,OAACA,EAAQ7zB,KAAMy4B,EAAfj0C,KAA0BA,KAASs0C,GAAuB94B,GAE3D3gB,UAAQw0C,IAAW7zB,EAAKoqB,UAE3BpqB,EAAO9Y,EAAK8Y,EAAM,CAAC,YACnBuD,GAASA,GAAsC,kBAG3CxF,EAA2B,IAE3By1B,SAACA,EAAW,GAAZkF,eAAgBA,EAAiB,IAAMvyB,EAEvCnV,GAAQ3R,UAAQw0C,IAAWA,EAAO7iC,KAAQ,CAACwiC,EAAWA,EAASxiC,IAAM,MACrEC,GAAW5R,UAAQw0C,IAAWA,EAAO5iC,QAAW,CAACuiC,EAAWA,EAASviC,OAAS,MAE9E8nC,EAAgB15C,UAAQw0C,IAAWA,GAAW,CAACL,EAAWA,EAASK,OAAS,UAG7E,MAAMmF,KAAeD,MACnB,MAAME,KAAYjoC,MAChB,MAAMkoC,KAAejoC,EAAQ,OAC1B2nC,EAAgB,CACpB/E,OAAQmF,EACRhoC,IAAKioC,EACLhoC,OAAQioC,EACRlV,MAAOwP,EAASxP,OAGZ6U,GACHJ,EAAUpsC,MAAQ,IACnBqsC,EACA,WACCr5C,UAAQw0C,GACJ,GAAE5pC,EAAQ+uC,MACVnF,EAAO7iC,IAAO,OAAM/G,EAAQgvC,KAAc,KAC1CpF,EAAO5iC,OAAU,UAAShH,EAAQivC,KAAiB,KAEpDj4C,EAAQ/B,KAAKS,IAAI84C,EAAW,IAAItyB,EAAQqtB,SAAUoF,EAAeF,eAAgBG,IACvF53C,EAAMoL,KAAOwsC,EAGb96B,EAAOze,KAAK4H,EAAKjG,EAAO,CAAC,gBAKzBmpC,EAAU/qC,UAAQw0C,GAAU7zB,EAAKoqB,QAAUyJ,EAAO5iC,OAAS4iC,EAAO5iC,OAAO/O,OAAS,QACjF,CACLsC,KAAMi0C,EAAUj0C,MAAQA,EACxB8W,MAAO,SACJw9B,EACH1O,QAAAA,EACArsB,OAAAA,GAIMsyB,SACRrwB,EACAmG,SAEMjV,MAACA,GAAS8O,SAEZoS,GAAelhB,IAAU8O,EAAKoqB,UAEhCpqB,EAAO9Y,EAAK8Y,EAAM,CAAC,YACnBuD,GAASA,GAAsC,WAG1CuzB,MAAMzG,SAASrwB,EAAMmG,GAGtB+xB,sCACNl4B,EACAmG,SAEM2Q,SAACA,EAADmL,WAAWA,GAAcjiB,GACzBs0B,eAACA,EAADK,iBAAiBA,EAAjB92B,OAAmCA,GAAUsI,EAC7CgzB,EAAmBzE,GAAgB,CAACC,iBAAAA,EAAkB1S,WAAAA,IACtDmX,EAAiB/E,GAAc,CACnCC,eAAAA,EACAxd,SAAU6c,GAA0B7c,EAAU3Q,EAAOqtB,mBAGhDt0C,KAAK2xC,QACV,IACK7wB,KACCm5B,EAAmB,CAAClX,WAAYkX,GAAoB,MACpDC,EAAiB,CAACtiB,SAAUsiB,GAAkB,IAEpD,CAACv7B,OAAAA,IAIGm6B,eAAeh4B,EAA8BizB,SAG7CjiC,IAACA,EAADC,OAAMA,EAANC,MAAcA,KAAU4lB,GAAY9W,EAAK8W,UAGzCtiB,KAACA,EAADiI,MAAOA,EAAPwlB,WAAcA,EAAdvlB,OAA0BA,EAA1BkuB,KAAkCA,EAAlCzkB,OAAwCA,EAAQ2Q,SAAU12B,KAAM+hC,GAAaniB,GAE7Eq5B,aAACA,EAADC,OAAeA,GAAUp6C,KAAKq6C,yBAAyB,CAACvoC,IAAAA,EAAKC,OAAAA,EAAQC,MAAAA,GAAQ+hC,GAE7EuG,EAAc7F,GAA0B7c,EAAUmc,EAAWO,iBAE5Dt0C,KAAKmxC,SACV,IACKlO,KACAmX,EAGHpoC,MAAOmoC,EACPr5B,KAAM,IACAvD,EAAQ,CAACA,MAAAA,GAAS,MAClBC,EAAS,CAACA,OAAAA,GAAU,MACpBkuB,EAAO,CAACA,KAAAA,GAAQ,MAChB3I,EAAa,CAACA,WAAAA,GAAc,GAChCztB,KAAAA,EACAsiB,SAAU0iB,KACNrzB,EAAS,CAACA,OAAAA,GAAU,KAG5B8sB,GAIIsG,yBACNE,EAKAtzB,SAEMnV,IAACA,EAADC,OAAMA,EAANC,MAAcA,GAASuoC,KAEzBzoC,GAAOC,EAAQ,CACbC,GACFqS,GtCxEE,8BAD0BgxB,EsCyEa,IAAKvjC,EAAM,CAACpE,GAAO,MAASqE,EAAS,CAACpE,GAAU,KtCxElDxF,KAAK,YAAYktC,EAASryC,OAAS,EAAI,MAAQ,8BsC2ElFm3C,EAAe,GACfC,EAAS,OAEV,MAAMxoC,IAAW,CAAClE,EAAKC,GAAS,OAC7BqnB,EAAMulB,EAAO3oC,MACfojB,EAAK,OACD5Y,MAACA,EAAD+qB,OAAQA,EAARgE,QAAgBA,EAAhBD,QAAyBA,KAAYsP,GAAoBxlB,EAC/DmlB,EAAavoC,GAAW4oC,MAEnB,MAAMzyC,IAAQ,CAAC,QAAS,SAAU,gBACnB7B,IAAd8uB,EAAIjtB,KACNqyC,EAAOryC,KAAPqyC,EAAOryC,GAAU,IACjBqyC,EAAOryC,GAAM6J,GAAWojB,EAAIjtB,WAM7B,CAACoyC,aAAAA,EAAcC,OAAAA,GACjB,OACCh+B,MAACA,EAAD+qB,OAAQA,EAARgE,QAAgBA,EAAhBD,QAAyBA,KAAYiP,GAAgBnoC,QACpD,CACLmoC,aAAc9F,GAAuB8F,EAAclzB,EAAOqtB,UAC1D8F,OAAQ,IACFh+B,EAAQ,CAACA,MAAAA,GAAS,MAClB+qB,EAAS,CAACA,OAAAA,GAAU,MACpBgE,EAAU,CAACA,QAAAA,GAAW,MACtBD,EAAU,CAACA,QAAAA,GAAW,KtCvG7B,IAA6BmK,EsC6G3B3D,SACL5wB,GACAs0B,eAACA,EAADK,iBAAiBA,KAAqBgF,UAIhC7iB,SAACA,EAADmL,WAAWA,KAAevoB,GAAQsG,EAClCmG,EAA2B,IAC5BwzB,EACHrF,eAAgBD,GAAc,CAACC,eAAAA,EAAgBxd,SAAAA,EAAUkN,OAAO,IAChE2Q,iBAAkBD,GAAgB,CAACC,iBAAAA,EAAkB1S,WAAAA,YAEhD6U,MAAMlG,SAASl3B,EAAMyM,KI7R1BkxB,GAA4B,IFhC3B,cAA+CjH,GAM7CzwC,IACLqgB,EACAizB,UAEAA,EAAWyD,kBAAXzD,EAAWyD,gBAAoB,IAC/BzD,EAAW0D,sBAAX1D,EAAW0D,oBAAwB,IACnC32B,EAAO61B,GAAoB71B,EAAMizB,GAC1B6D,MAAMn3C,IAAIqgB,EAAMizB,GAGlBtC,eAAe3wB,EAAiDizB,OACrEjzB,EAAO61B,GAAoB71B,EAAMizB,IAExBnc,SAAU,OACXA,EAAW,OACZ,MAAOhmB,EAASolC,KAAQ9tC,EAAQ4X,EAAK8W,UACxCA,EAAShmB,GAAWmlC,GAAoBC,EAAKjD,GAG/CjzB,EAAO,IAAIA,EAAM8W,SAAAA,UAGZggB,MAAMnG,eAAe3wB,EAAMizB,GAG7BpC,QAAQ7wB,EAAuBizB,SAC9B7G,UAACA,KAAc1yB,GAAQsG,SACzBosB,EACK,IACF1yB,EACHyM,OAAQ/d,EAAQgkC,GAAWzsC,KAAI,EAAE0M,EAAMutC,YAC9BpQ,KAAM9qC,EAAPwqC,KAAcA,EAAduN,MAAoBA,KAAUoD,GAAUD,EAC1B,WAAhBC,EAAO95C,MACT85C,EAAO95C,KAAO,QACd85C,EAAOjR,QAAS,GACS,UAAhBiR,EAAO95C,OAChB85C,EAAO95C,KAAO,SAIhBkzC,EAAWyD,gBAAgBrqC,GAAkB,SAAVoqC,MAC9B,MAAMD,KAAQzsC,EAAKkpC,EAAW0D,oBAAoBtqC,IAAS,IAC9DmqC,EAAKC,MAAkB,SAAVA,QAGR,CAACpqC,KAAAA,EAAM3N,MAAAA,EAAOm7C,OAAAA,EAAQ3Q,KAAAA,OAK5BlpB,IEvBLm3B,GAA8B,IAAIP,GAiBxC,SAASe,GAAmBJ,UACnB9vC,WAAS8vC,GAAY,CAACx3C,KAAMw3C,GAAYA,GAAY,GCnDtD,MAAMuC,GACXnzC,YAA4BmZ,EAAuB,GAAoBi6B,EAAuB,SAAlEj6B,SAAAA,OAA2Ci6B,SAAAA,EAEhEn6C,eACE,IAAIk6C,GAAMhzC,EAAU5H,KAAK4gB,UAAWhZ,EAAU5H,KAAK66C,WAGrDC,gBACE,IACF96C,KAAK4gB,YACL5gB,KAAK66C,UAIL3rB,IAAuBzrB,UAErBkJ,EAAgB3M,KAAK4gB,SAASnd,GAAMzD,KAAK66C,SAASp3C,IAGpDs3C,gBAAmCt3C,eAEbyC,IAAvBlG,KAAK4gB,SAASnd,GACT,CAACmd,UAAU,EAAMphB,MAAOQ,KAAK4gB,SAASnd,SACbyC,IAAvBlG,KAAK66C,SAASp3C,GAChB,CAACmd,UAAU,EAAOphB,MAAOQ,KAAK66C,SAASp3C,IAEzC,CAACmd,UAAU,EAAOphB,WAAO0G,GAG3B80C,gBAAmCv3C,GAAQjE,MAACA,EAADohB,SAAQA,SAC1C1a,IAAV1G,QACGoE,IAAIH,EAAKjE,EAAOohB,GAIlBhd,IAAuBH,EAAQjE,EAAaohB,iBAC1C5gB,KAAK4gB,EAAW,WAAa,YAAYnd,QAC3Cmd,EAAW,WAAa,YAAYnd,GAAOjE,EACzCQ,KAGFi7C,iBAA8Bx3C,GAAcmd,SAACA,EAADi6B,SAAWA,SAEtC30C,IAAlB0a,EAASnd,QACNG,IAAIH,EAAKmd,EAASnd,IAAM,QACFyC,IAAlB20C,EAASp3C,SACbG,IAAIH,EAAKo3C,EAASp3C,IAAM,GAG1By3C,kBAA+Bz3C,EAAc8F,QAEnCrD,IAAXqD,EAAE9F,SACCG,IAAIH,EAAK8F,EAAE9F,IAAM,GAQnB03C,QAAQC,OACR,MAAM33C,KAAO+C,EAAK40C,EAAMN,WAAY,OACjC9wC,EAAMoxC,EAAML,gBAAgBt3C,QAC7Bu3C,gBAAgBv3C,EAAKuG,KAUzB,SAASqxC,GAAgB77C,SACvB,CACLohB,UAAU,EACVphB,MAAAA,GAIG,SAAS87C,GAAgB97C,SACvB,CACLohB,UAAU,EACVphB,MAAAA,GAMG,SAAS+7C,GAA0BC,SACjC,CACLh7B,EACAC,EACAhX,EACAgyC,WAEMC,EAAOF,EAAQh7B,EAAGhhB,MAAOihB,EAAGjhB,cAC9Bk8C,EAAO,EACFl7B,EACEk7B,EAAO,EACTj7B,EAEFk7B,GAAwBn7B,EAAIC,EAAIhX,EAAUgyC,IAI9C,SAASE,GACdn7B,EACAC,EACAhX,EACAgyC,UAEIj7B,EAAGI,UAAYH,EAAGG,UACpByD,G3C4JG,SACL5a,EACAgyC,EACAj7B,EACAC,SAEQ,eAAcg7B,EAAW92C,wBAAwB8E,EAAS9E,gBAAgBqB,EAAUwa,UAAWxa,EACrGya,cACWza,EAAUwa,M2CpKZ6D,CAAqC5a,EAAUgyC,EAAYj7B,EAAGhhB,MAAOihB,EAAGjhB,QAG5EghB,EAGF,SAASo7B,GACdp7B,EACAC,EACAhX,EACAgyC,EACAI,EAKmBF,gBAERz1C,IAAPsa,QAAiCta,IAAbsa,EAAGhhB,MAElBihB,EAGLD,EAAGI,WAAaH,EAAGG,SACdJ,EACEC,EAAGG,WAAaJ,EAAGI,SACrBH,EACElZ,EAAUiZ,EAAGhhB,MAAOihB,EAAGjhB,OACzBghB,EAEAq7B,EAAWr7B,EAAIC,EAAIhX,EAAUgyC,GChGjC,MAAMK,WAAsBlB,GACjCnzC,YACkBmZ,EAA2B,GAC3Bi6B,EAA2B,GACpCkB,GAAe,SAEhBn7B,EAAUi6B,QAJAj6B,SAAAA,OACAi6B,SAAAA,OACTkB,aAAAA,EAKFr7C,cACCA,EAAQk3C,MAAMl3C,eACpBA,EAAMq7C,aAAe/7C,KAAK+7C,aACnBr7C,GCqDJ,SAASs7C,GAAU12C,SACjB,QAASA,EAGX,SAAS22C,GAAa32C,SACpB,WAAYA,EAGd,SAAS42C,GAAY52C,SACnB,SAAUA,IAAS02C,GAAU12C,KAAU22C,GAAa32C,KAAU62C,GAAY72C,GAG5E,SAAS62C,GAAY72C,UACnBA,IAAS82C,GAAoB92C,IAAS+2C,GAAkB/2C,IAASg3C,GAAqBh3C,IAGxF,SAAS82C,GAAoB92C,SAC3B,aAAcA,EAGhB,SAAS+2C,GAAkB/2C,SACzB,WAAYA,EAGd,SAASg3C,GAAqBh3C,SAC5B,cAAeA,MAGZi3C,aAAAA,GAAAA,EAAAA,eAAAA,EAAAA,iBAAAA,EAAAA,eAAAA,EAAAA,qBAAAA,EAAAA,sBAAAA,KAAAA,QCtJZ,MACMC,GAAS,IACTC,GAAS,IAOTC,GAAU,UACVC,GAAgB,KACf,EACLtmC,IAAK,EACLZ,KAAM,EACNkI,MAAO,EACPhI,MAAO,EACPO,KAAM,EACNrK,KAAM,EACN+J,KAAM,EACNC,KAAM,EACN1E,MAAO,EACPhN,OAAQ,EACRkN,KAAM,EACN8E,MAAO,GAET,IAAIymC,GAAgBC,GAMpB,SAASC,GAAeC,EAAUv6C,EAAQw6C,UACxCJ,GAAiBp6C,GAhCN,OAiCXq6C,GAAQG,GAASL,GACVM,GAAWF,EAASG,QAAQz8C,IAAI08C,IAOzC,SAAS5wC,GAAKhD,EAAGhG,EAAG65C,EAASC,EAAUC,SAC/BC,EAAIh0C,EAAEvG,WAERkC,EADA2R,EAAQ,OAGLtT,EAAIg6C,IAAKh6C,EAAG,IACjB2B,EAAIqE,EAAEhG,IACDsT,GAAS3R,IAAMk4C,EAAS,OAAO75C,EAAW+5C,GAAWA,EAAQh6C,QAAQ4B,IAAM,IAAK2R,EAAewmC,GAAYA,EAAS/5C,QAAQ4B,IAAM,KAAK2R,SAGvItT,EAGT,SAAS05C,GAAW1zC,SACZi0C,EAAS,GACTD,EAAIh0C,EAAEvG,WACRgtB,EAAQ,EACRzsB,EAAI,OAEDA,EAAIg6C,GACTh6C,EAAIgJ,GAAKhD,EAAGhG,EAvDF,IAuDYi5C,KAAiBC,MACvCe,EAAOp9C,KAAKmJ,EAAEk+B,UAAUzX,EAAOzsB,GAAG25C,QAClCltB,IAAUzsB,KAGU,IAAlBi6C,EAAOx6C,YACH,yBAA2BuG,SAG5Bi0C,EAGT,SAASL,GAAc5zC,SACL,MAATA,EAAE,GAGX,SAAsBA,SACdg0C,EAAIh0C,EAAEvG,WAER4C,EADArC,EAAI,KAERA,EAAIgJ,GAAKhD,EAAGhG,EAAGk5C,GAAQD,GAAQC,IAE3Bl5C,IAAMg6C,OACF,2BAA6Bh0C,KAGrC3D,EAAIq3C,GAAW1zC,EAAEk+B,UAAU,EAAGlkC,IAEb,IAAbqC,EAAE5C,YACE,4CAA8CuG,KAlF7C,OAqFTA,EAAIA,EAAEjJ,MAAMiD,EAAI,GAAG25C,QAEb,QACE,wCAA4C3zC,EAGpD3D,EAAIA,EAAEnF,IAAI08C,UACJM,EAASN,GAAc5zC,EAAEjJ,MAAM,GAAG48C,WAEpCO,EAAOC,cACF,CACLA,QAAS93C,EACT63C,OAAQA,GAGVA,EAAOC,QAAU93C,SAGZ63C,EArCeE,CAAap0C,GAwCrC,SAAqBA,SACbk0C,EAAS,CACbj7C,OAAQo6C,IAEJp6C,EAAS,OAMXo7C,EACAv3B,EANAw3B,EAAW,CAAC,EAAG,GACfC,EAAW,EACX9tB,EAAQ,EACRutB,EAAIh0C,EAAEvG,OACNO,EAAI,KAvHK,MA2HTgG,EAAEg0C,EAAI,GAAe,IACvBh6C,EAAIgG,EAAEw0C,YA7HK,OA+HPx6C,GAAK,GASF,KAAM,0BAA4BgG,MAPrCs0C,EA0ER,SAAuBt0C,SACftJ,EAAIsJ,EAAEy0C,MAzMA,SA0MPz0C,EAAEvG,QAAU/C,EAAE+C,OAAS,EAAG,MAAMuG,SAC9BtJ,EAAEQ,KAAIS,UACL+G,GAAK/G,KACP+G,GAAMA,EAAG,MAAMsB,SACZtB,KAhFQg2C,CAAc10C,EAAEk+B,UAAUlkC,EAAI,EAAGg6C,EAAI,IAChD,MAAOr9C,QACD,mCAAqCqJ,EAI7Cg0C,GADAh0C,EAAIA,EAAEjJ,MAAM,EAAGiD,GAAG25C,QACZl6C,OAGRO,EAAI,MAGDg6C,EAAG,MAAMh0C,EAzIH,MA2IPA,EAAE,KAAau0C,IAAav6C,GAEhCq6C,EAAIrxC,GAAKhD,EAAGhG,EA/IA,KAiJRq6C,EAAIL,IACN/6C,EAAOpC,KAAKmJ,EAAEk+B,UAAUzX,EAAO4tB,GAAGV,QAClCltB,EAAQzsB,IAAMq6C,MAIhBr6C,EAAIgJ,GAAKhD,EAAGhG,EAAGi5C,IAEXj5C,IAAMg6C,EACR/6C,EAAOpC,KAAKmJ,EAAEk+B,UAAUzX,EAAOutB,GAAGL,gBAElC16C,EAAOpC,KAAKmJ,EAAEk+B,UAAUzX,EAAOzsB,GAAG25C,QAClC72B,EAAS,GACT2J,IAAUzsB,EACNysB,IAAUutB,EAAG,KAAM,2BAA6Bh0C,OAI/ChG,EAAIg6C,GAAG,IACZh6C,EAAIgJ,GAAKhD,EAAGhG,EAAGk5C,IACXl5C,IAAMg6C,EAAG,KAAM,2BAA6Bh0C,KAChD8c,EAAOjmB,KAAKmJ,EAAEk+B,UAAUzX,EAAOzsB,GAAG25C,QAC9B35C,EAAIg6C,EAAI,GAAKh0C,IAAIhG,KAAOi5C,GAAQ,KAAM,0BAA4BjzC,EACtEymB,IAAUzsB,OAINg6C,EAAI/6C,EAAOQ,SAAW05C,GAAQrtB,KAAK7sB,EAAO+6C,EAAI,SAC5C,2BAA6Bh0C,EAGjCg0C,EAAI,GACNE,EAAO58C,KAAO2B,EAAO,GAEjBs7C,EACFL,EAAOK,SAAWt7C,EAAO,GAAGlC,MAAM,IApJxC,SAAoBO,UACXg8C,GAAMh8C,GAoJAq9C,CAAW17C,EAAO,IAG3Bi7C,EAAOj7C,OAASA,EAAO,GAFvBi7C,EAAOU,SAAW37C,EAAO,IAK3Bi7C,EAAO58C,KAAO2B,EAAO,GAGO,MAA1Bi7C,EAAO58C,KAAKP,OAAO,KACrBm9C,EAAOW,SAAU,EACjBX,EAAO58C,KAAO48C,EAAO58C,KAAKP,MAAM,GAAI,IAGxB,MAAV+lB,IAAgBo3B,EAAOp3B,OAASA,GAChCw3B,EAAS,KAAIJ,EAAOI,SAAWA,EAAS,IACxCA,EAAS,KAAIJ,EAAOY,SAAWR,EAAS,WACrCJ,EAjIiCa,CAAY/0C,GC1D/C,SAASg1C,GACdjU,EACAkU,GAAS,EACTC,EAAkD90B,eAE9CxpB,UAAQmqC,GAAO,OACXoU,EAAYpU,EAAK7pC,KAAIsJ,GAAKw0C,GAAax0C,EAAGy0C,EAAQC,YACjDD,EAAU,IAAGE,EAAUv2C,KAAK,SAAWu2C,EACzC,OAAIl7B,GAAW8mB,GAEXmU,EADLD,EACU/4B,GAAe6kB,G7CkS1B,SAA6BtmB,SAC5BG,EAA6BF,GAAcD,GAAG,UAEhDA,EAAE0B,KACI,IAAI9iB,KAAKA,KAAK+7C,OAAQx6B,KAEtB,IAAIvhB,QAASuhB,G6CtSPy6B,CAAoBtU,IAG7BkU,EAASC,EAAKz4C,EAAUskC,IAASA,EAGnC,SAASuU,GAA6BtgC,EAAkB8rB,OACxD,MAAMyU,KAAWj0C,EAAK0T,EAAMwgC,UAAU7R,WAAa,IAAK,OACrD//B,EAAO2xC,EAAQ3xC,SACjB6xC,EAAc,GAAE7xC,IAAO8xC,OAA8B,WAApBH,EAAQ78C,QAAuB,OAAU,UAAS+gB,GAASzE,YAE3F,MAAMrZ,KAAKg6C,GACTh6C,EAAEi6C,QAAQL,KACX55C,EAAEmlC,UAASA,EAAUnlC,EAAEmlC,QAAQ9rB,EAAOugC,EAASzU,IAC/CnlC,EAAE85C,aAAYA,EAAa95C,EAAE85C,WAAWzgC,EAAOugC,EAASE,KAG9D3U,EAAQjqC,KAAK,CACX+M,KAAMA,EAAOiyC,GACb5V,GAAI,CACF,CACE6V,OAAQ,CAACphC,OAAQ6gC,EAAQ3xC,KAAO8xC,IAChC1U,OAAS,UAASt+B,cAAY6yC,EAAQ3xC,KAAOmyC,QAAWN,gBAMzDO,GAAoBlV,GAGtB,SAASmV,GAAqBjhC,EAAmB8rB,MAClD9rB,EAAMwgC,UAAU7R,WAAa1mC,EAAK+X,EAAMwgC,UAAU7R,WAAWlqC,OAAQ,OACjEmK,EAAOlB,cAAYsS,EAAMkhC,QAAQ,SACvCpV,EAAQzE,QAAQ,CACdz4B,KAAM,QACN3N,MAAO,GACPgqC,GAAI,CACF,CACE6V,OAAQlC,GAAc,YAAa,SACnC5S,OAAS,kCAAiCp9B,sBAM3CoyC,GAAoBlV,GAiEtB,SAASqV,GAA2BnhC,EAAkBy+B,OACtD,MAAM8B,KAAWj0C,EAAK0T,EAAMwgC,UAAU7R,WAAa,QACjD,MAAMhoC,KAAKg6C,GACVh6C,EAAEi6C,QAAQL,IAAY55C,EAAE83C,QAC1BA,EAAQ93C,EAAE83C,MAAMz+B,EAAOugC,EAAS9B,WAK/BA,EA6BT,SAASuC,GAAoBlV,UACpBA,EAAQ5pC,KAAI8I,IACbA,EAAEigC,KAAOjgC,EAAEigC,GAAGxmC,eAAeuG,EAAEigC,GAC5BjgC,KC7KJ,MAAeo2C,GAOpBl4C,YAAYpG,EAAsCu+C,QAAAA,UAAAA,sBANd,sBAEJ,8BAK1Bv+C,SACGA,OAASA,GAOXX,cACC,IAAIwC,MAAM,yCAmBTlD,KAAK6/C,mBAMHx+C,QACJw+C,QAAUx+C,EACXA,GACFA,EAAOy+C,SAAS9/C,4BAKXA,KAAK+/C,UAGPC,qBACEhgD,KAAK+/C,UAAU/8C,OAGjB88C,SAAS/9C,EAAqBk+C,GAE/BjgD,KAAK+/C,UAAUj3C,SAAS/G,GAC1BsiB,GhDgD8B,6CgD5CpBne,IAAR+5C,OACGF,UAAUr5C,OAAOu5C,EAAK,EAAGl+C,QAEzBg+C,UAAU3/C,KAAK2B,GAIjBm+C,YAAYC,SACXF,EAAMjgD,KAAK+/C,UAAUz8C,QAAQ68C,eAC9BJ,UAAUr5C,OAAOu5C,EAAK,GACpBA,EAMFG,aACDH,EAAMjgD,KAAK6/C,QAAQK,YAAYlgD,UAC9B,MAAM+B,KAAS/B,KAAK+/C,UAEvBh+C,EAAM89C,QAAU7/C,KAAK6/C,aAChBA,QAAQC,SAAS/9C,EAAOk+C,KAO1BI,iBAAiBjF,SAChB/5C,EAAS+5C,EAAM/5C,OACrBA,EAAO6+C,YAAYlgD,WACdqB,OAASA,EACd+5C,EAAM/5C,OAASrB,KAGVsgD,uBACCj/C,EAASrB,KAAK6/C,QACdU,EAAYl/C,EAAOA,WAGpB,MAAMU,KAAS/B,KAAK+/C,UACvBh+C,EAAMV,OAASA,OAIZ0+C,UAAY,GACjB1+C,EAAO6+C,YAAYlgD,MACnBqB,EAAOA,OAAO6+C,YAAY7+C,QAGrBA,OAASk/C,EACdl/C,EAAOA,OAASrB,MAIb,MAAMwgD,WAAmBb,GAKvBj/C,cACC+/C,EAAW,IAAKzgD,KAAKyH,mBAC3Bg5C,EAASb,UAAa,SAAQ5/C,KAAK4/C,YACnCa,EAASC,QAAU1gD,KAAK0gD,QACxBD,EAASE,MAAS,SAAQ3gD,KAAK2gD,QAC/BF,EAAS5/C,KAAOb,KAAKa,KACrB4/C,EAASG,UAAY5gD,KAAK4gD,UAC1BH,EAASG,UAAUH,EAASE,OAAS,EAC9BF,EAQTh5C,YACEpG,EACAmB,EACgB3B,EACC+/C,SAEXv/C,EAAQmB,QAHE3B,KAAAA,OACC+/C,UAAAA,yDAIZF,QAAU1gD,KAAK2gD,MAAQn+C,EAExBxC,KAAK4gD,aAAe5gD,KAAK2gD,SAAS3gD,KAAK4gD,kBACpCA,UAAU5gD,KAAK2gD,OAAS,GAI1BE,yBACE,IAAI1/C,IAGN2/C,wBACE,IAAI3/C,IAGNiH,mBACclC,IAAflG,KAAK+gD,aACFA,MAAS,UAASh0C,OAElB/M,KAAK+gD,MAYPC,wBACAJ,UAAU5gD,KAAK2gD,SACb3gD,KAAK0gD,QAGPO,qBACIjhD,KAAK4gD,UAAU5gD,KAAK2gD,OAGxBO,UAAU1+C,QACVk+C,QAAUl+C,GC1LZ,MAAM2+C,WAAqBxB,GACzBj/C,eACE,IAAIygD,GAAa,KAAMv5C,EAAU5H,KAAKohD,UAG/C35C,YAAYpG,EAA8B+/C,SAClC//C,QADkC+/C,QAAAA,0BAIX//C,EAAsBkd,SAC7C6iC,EAAU7iC,EAAM8iC,gBAAe,CAACC,EAAsCt/B,WACpEpC,MAACA,EAAD2F,SAAQA,GAAYvD,KAEtBuD,EAAU,OACNka,EAAK5f,GAAQmC,EAAU,CAAC+S,OAAO,IACrCusB,EACEl5C,EAAK,CACHq3B,GAAAA,EACA7f,MAAAA,EACA2F,SAAAA,KAEA,CACFka,GAAAA,EACA7f,MAAAA,EACA2F,SAAAA,UAGG+7B,IACN,WAEC12C,EAAQw2C,GACH,KAGF,IAAID,GAAa9/C,EAAQ+/C,4BAGF//C,EAAsB3B,SAC9C6lB,SAACA,KAAa61B,GAAS,IAAI17C,GAI3Bq/C,EAAY,IACb3D,EACH71B,SAJyByB,GAAkBzB,WAOtC,IAAI47B,GAAa9/C,EAAQ,EAC7B+G,EAAK22C,IAAaA,IAQhBwC,MAAMnG,QACNgG,QAAU,IAAIphD,KAAKohD,aAGnB,MAAM39C,KAAO23C,EAAMgG,QACjBphD,KAAKohD,QAAQ39C,UAEX29C,QAAQ39C,GAAO23C,EAAMgG,QAAQ39C,QAIjC,MAAM1B,KAASq5C,EAAMoG,SACxBpG,EAAM8E,YAAYn+C,GAClBA,EAAMV,OAASrB,KAGjBo7C,EAAMgF,SAMDqB,eAAehY,SACdiY,EAAa,OAEd,MAAOj+C,EAAK8hB,KAAarc,EAAQlJ,KAAKohD,SACpC3X,EAAOt/B,IAAIob,EAASka,MACvBiiB,EAAWj+C,GAAO8hB,QAIjB67B,QAAUM,EAGVZ,wBACE,IAAI3/C,IAAI0J,EAAK7K,KAAKohD,SAAS3gD,KAAIgF,GAAKA,EAAEg6B,MAGxCohB,yBACE,IAAI1/C,IAAI0J,EAAK7K,KAAKohD,SAAS3gD,KAAIgF,GAAKA,EAAEma,SAGxCxX,aACG,YAAWA,EAAKpI,KAAKohD,WAGxBO,iBACCC,EAAoC,OAErC,MAAMn8C,KAAKoF,EAAK7K,KAAKohD,SAAU,OAC5BxhC,MAACA,EAAD6f,GAAQA,EAARla,SAAYA,GAAY9f,GACxB+f,KAACA,EAADE,IAAOA,KAAQuB,GAAUD,GAAkBzB,GAEjDq8B,EAAWxhD,KAAK,CACdwf,MAAOvT,EAAmBuT,GAC1B/e,KAAM,cACF2kB,EAAO,CAACq8B,MAAOz7B,GAAiBZ,IAAS,MACzCE,EAAM,CAACo8B,SAAU,OAAS,MAC3B76B,EACHwY,GAAI,CAACA,EAAK,GAAEA,kBAITmiB,GCzHJ,MAAMG,GAAe,gBAqBrB,MAAMC,GAMXv6C,eAAew6C,mHACRA,MAAQA,OACRC,WAAa,QACbC,SAAW,IAIpB,MAAMC,GAA6B,CACjCjD,QAAS,KACA,EAGT/mB,MAAO,CAAC7Z,EAAOugC,EAASpE,WAChBvtC,EAAO2xC,EAAQ3xC,KACfk1C,EAAQvD,EAAQsD,UAARtD,EAAQsD,QAAY,IAAIJ,IAChCM,EAAoC,GACpCpjB,EAAqC,GAErCmL,EAAU,IAAIlpC,IACdohD,EAAa,CAAC1pC,EAAwBmC,WACpCiV,EAAmB,WAAVjV,EAAqBnC,EAAEjH,QAAUiH,EAAE+G,UAC9C4iC,EAAKz3C,EAAS,GAAEoC,KAAQ8iB,SACvB,IAAIwyB,EAAU,EAAGpY,EAAQlgC,IAAIq4C,GAAKC,IACrCD,EAAKz3C,EAAS,GAAEoC,KAAQ8iB,KAAUwyB,YAEpCpY,EAAQvmC,IAAI0+C,GACL,EAAExnC,GAAQwnC,IAGb3hD,EAAOi+C,EAAQj+C,KACf6hD,EAAMnkC,EAAMI,OAAOuuB,UAAUrsC,GAC7BypC,OACapkC,IAAjBw0C,EAAOl7C,MACFoJ,QAAM8xC,EAAOl7C,OACd,SAIFiqC,OAACA,EAADI,UAASA,GAAc1wB,WAASuhC,EAAOC,QAAUD,EAAOC,OAAS,OAChElR,IAAWI,GAAaS,MACtB,MAAMqY,KAAWrY,KAEfnxB,WAASwpC,OAIT,MAAMl/C,KAAO+C,EAAKm8C,GzDmHpBhwC,GyDlH0BlP,IACxBomC,IAAcA,EAAY,KAAKzpC,KAAKqD,GAExB,aAAT5C,GACFwjB,GlDK+B,wEkDJ/BwlB,EAAY6Y,EAAI7Y,YAEfJ,IAAWA,EAAS,KAAKrpC,KAAKqD,GAUpCgmC,GAAWI,IACdA,EAAY6Y,EAAI7Y,UACZ,WAAY6Y,IACdjZ,EAASiZ,EAAIjZ,aAIZ,MAAM73B,KAAWi4B,GAAa,GAAI,OAC/B7nB,EAAWzD,EAAMyD,SAASpQ,MAC5BoQ,EAAU,KACRpC,EAAQoC,EAASpC,SAEjBoC,EAAS1J,UAAW,CACtB+L,GAASA,GAAmCzS,EAASoQ,EAAS1J,qBAEzD,IAAKsH,EAAO,CACjByE,GAASA,GAA+CzS,gBAItDoQ,EAASuD,SAAU,CACrB3F,EAAQrB,EAAMsB,QAAQjO,SAKhBmtC,EAAY,CAChBx5B,SAAUvD,EAASuD,SACnBka,GAAI7f,EACJA,MAAOoC,EAASpC,OAGlBsf,EAAU92B,EAAK22C,IAAcA,MAK1BuD,EAAO1iC,GAAQ,KAIdgjC,EAA0B,OACjB,aAAT/hD,EAAqB,CAEnBqqB,GADc3M,EAAMskC,kBAAkBjxC,GAAyBsd,IAAI,WAErE0zB,EAAU,UAEH5gC,EAASrJ,MAClBiqC,EAAU,cAGN/pC,EAAyB,CAAC+G,MAAAA,EAAOhO,QAAAA,EAAS/Q,KAAM+hD,GACtD/pC,EAAEwxB,QAAU,IAAIkY,EAAW1pC,EAAG,WAAY0pC,EAAW1pC,EAAG,WACxDwpC,EAAKJ,MAAM7hD,KAAMkiD,EAAO1iC,GAAS/G,GACjCwpC,EAAKF,SAASviC,GAASyiC,EAAKH,WAAWtwC,GAAW0wC,EAAO1iC,SAG3DyE,GAASA,GAA+CzS,QAIvD,MAAMgO,KAAS6pB,GAAU,GAAI,IAC5B4Y,EAAKF,SAASviC,GAAQ,eACpB/G,EAAyB,CAAChY,KAAM,IAAK+e,MAAAA,GAC3C/G,EAAEwxB,QAAU,IAAIkY,EAAW1pC,EAAG,SAC9BwpC,EAAKJ,MAAM7hD,KAAKyY,GAChBwpC,EAAKF,SAASviC,GAAS/G,EAGrByxB,IACFwU,EAAQxU,KAAQA,EAAa7pC,KAAKsJ,GAGzBs4C,EAAKJ,MAAMxhD,KAAIoY,GAAMM,WAASpP,QAAuB7D,IAAjB6D,EAAE8O,EAAEjH,SAAyB7H,EAAE8O,EAAEjH,SAAW7H,EAAE8O,EAAE+G,OAAU7V,OAIpGa,EAAQs0B,KACXmjB,EAAK98B,SAAW,IAAI47B,GAAa,KAAMjiB,KAI3CmL,QAAS,CAAC9rB,EAAOugC,EAASgE,WAClB31C,EAAO2xC,EAAQ3xC,KAAO40C,UACVe,EAAWz8B,QAAO9c,GAAKA,EAAE4D,OAASA,IACnCnK,OAAS,EACtB8/C,EACAA,EAAWjkC,OAAO,CAChB1R,KAAAA,EACA3N,MAAOs/C,EAAQsD,QAAQH,MAAMxhD,KAAI4hD,UACzBhY,QAACA,EAAD0Y,UAAUA,KAAcvoC,GAAQ6nC,SACtC7nC,EAAKoF,MAAQvT,EAAmBmO,EAAKoF,OAC9BpF,SCpLbwoC,GAA+C,CACnD7D,QAASL,GACiB,aAAjBA,EAAQj+C,MAA2C,WAApBi+C,EAAQ78C,SAAwB68C,EAAQ9U,MAAyB,WAAjB8U,EAAQ9U,KAGhG5R,MAAO,CAAC7Z,EAAOugC,WACPmE,EAAgCnE,EAAQoE,OAAS,OAElD,MAAMb,KAAQvD,EAAQsD,QAAQH,MAAO,OAClCrwC,EAAUywC,EAAKzwC,YAEhBwD,GAAexD,kBAIdmd,EAAQxQ,EAAMskC,kBAAkBjxC,GAChC+Q,EAAYoM,EAAQA,EAAMG,IAAI,aAAUhpB,EAEzC6oB,GAAU7D,GAAoBvI,IAKnCoM,EAAMnrB,IAAI,kBAAmB,CAACumC,MAAO2U,EAAQ3xC,KAAMyS,MAAOyiC,EAAKziC,QAAQ,GACvEqjC,EAAM7iD,KAAKiiD,IALTh+B,GnD4CN,+FmDnCA8+B,gBAAiB,CAAC5kC,EAAOugC,EAASzU,WAC1B4Y,EAAQnE,EAAQoE,OAAO78B,QAAOg8B,GAAqE,IAA7DhY,EAAQhkB,QAAO9c,GAAKA,EAAE4D,OAASk1C,EAAKhY,QAAQ/kC,OAAMtC,aAIzFub,EAAMld,QAAU+hD,GAAgB7kC,IAA2B,IAAjB0kC,EAAMjgD,cAC5CqnC,QASHgZ,EAAUhZ,EAAQhkB,QAAO9c,GAAKA,EAAE4D,OAAS2xC,EAAQ3xC,OAAM,OACzDo9B,EAAS8Y,EAAQ9Y,UACjBA,EAAOjnC,QAAQggD,KAAyB,EAC1CD,EAAQ9Y,OAAU,IAAG0Y,EAClBxiD,KAAI4hD,GAAS,GAAEp2C,cAAYI,EAAmBg2C,EAAKziC,YAAYyiC,EAAKhY,QAAQ/kC,SAC5E6C,KAAK,aACH,KACA,MAAMk6C,KAAQY,EAAO,OAClB7iB,EAAW,GAAEn0B,cAAYI,EAAmBg2C,EAAKziC,YAAYyiC,EAAKhY,QAAQ/kC,OAC3EilC,EAAOzhC,SAASs3B,KACnBmK,EAAU,GAAEA,EAAO9C,UAAU,EAAG8C,EAAOvnC,OAAS,OAAOo9B,MAG3DijB,EAAQ9Y,OAASA,SAGZF,EAAQxrB,OAAOokC,EAAMxiD,KAAI4hD,KAAUl1C,KAAMk1C,EAAKhY,QAAQ/kC,WAG/D+kC,QAAS,CAAC9rB,EAAOugC,EAASzU,QAEpB9rB,EAAMld,SAAW+hD,GAAgB7kC,OAC9B,MAAM8jC,KAAQvD,EAAQoE,OAAQ,OAC3BjlC,EAAcosB,EAAQhkB,QAAO9c,GAAKA,EAAE4D,OAASk1C,EAAKhY,QAAQ/kC,OAAM,GACtE2Y,EAAO7d,KAAO,eACP6d,EAAOze,aACPye,EAAOssB,cAIXF,IAMJ,SAASnvB,GAAOqD,EAAkB3M,SAE/B,UADM3F,cAAYsS,EAAMiR,UAAU5d,OAI5C,SAASwxC,GAAgB7kC,UAChBA,EAAMld,QAAUkiD,GAAahlC,EAAMld,WAAakd,EAAMld,OAAOA,QAAU+hD,GAAgB7kC,EAAMld,OAAOA,SCnFtG,MAAMmiD,GAAQ,SACRC,GAAgB,iBAEvB7Z,GAA0C,CAC9CuV,QAASL,GAA4B,aAAjBA,EAAQj+C,KAE5BwpC,QAAS,CAAC9rB,EAAOugC,EAASzU,WAClBl9B,EAAO2xC,EAAQ3xC,KACfu2C,EAAWv2C,EAAO40C,GAClB4B,EAAYT,GAAO/D,QAAQL,GAC3BxU,EAAOwU,EAAQxU,KAAOwU,EAAQxU,KAAK,GAAK,KACxCsZ,EAAwB,GACxBC,EAGA,MAEF/E,EAAQjiB,YAAc8mB,EAAW,OAC7BG,EAAc,2CAA0C73C,cAAYkB,EAAOq2C,MACjFnE,GAAOP,GAAS,CAACtV,EAAeua,iBACxBC,EAAUp7C,WAAOm7C,EAAIrG,QAAQ,IAAGr3B,SAAf49B,EAAe59B,OAAW,YAC5C29B,EAAQl7C,SAASg7C,IACpBE,EAAQ5jD,KAAK0jD,GAERta,KAIXsV,EAAQsD,QAAQH,MAAMz+C,SAAQ,CAAC6+C,EAAM9+C,WAC7BqO,EAAUywC,EAAKzwC,WACjBA,IAAY/D,IAAK+D,IAAY9D,eAC/ByV,GAAK,qEAIDvZ,EAAMsgC,EAAOA,EAAK/mC,GAAK,KACvB2gD,EA6IZ,SACE3lC,EACAugC,EACAuD,EACA/X,SAEM14B,EAAUywC,EAAKzwC,QACfuyC,EAAQ9B,EAAKhY,QAAQ+Z,OACrBC,EAAQhC,EAAKhY,QAAQ/kC,KACrBq+C,EAAYT,GAAO/D,QAAQL,GAC3BtvB,EAAYvjB,cAAYsS,EAAMiR,UAAU5d,IACxCmd,EAAQxQ,EAAMskC,kBAAkBjxC,GAChC+Q,EAAYoM,EAAQA,EAAMG,IAAI,aAAUhpB,EACxCo+C,EAAUh8C,GAAiB,SAAQknB,MAAclnB,KACjD4B,EAAOqU,EAAMgmC,iBAAiB3yC,IAAY/D,GAAI,QAAU,UAAUoQ,OAClEumC,EAAS,GAAE5yC,UAEX43B,EAAK6V,GAAOP,GAAS,CAAC9pB,EAAgB+uB,IACnC,IACF/uB,EACH,CAACqqB,OAAQ0E,EAAIrG,QAAQ,GAAInT,OAAS,IAAGia,MAAUA,OAC9CnF,OAAQ0E,EAAKxZ,OAAS,IAAG4Z,eAAmBK,SAAat6C,iBAO9Ds/B,EAAGppC,KAAK,CACNi/C,OAAQ,CAACphC,OAAQ6gC,EAAQ3xC,KAAOs2C,IAChClZ,OAAQrf,GAAoBvI,GAAc,IAAG2hC,EAAQ,GAAED,YAAgBC,EAAQ,GAAED,WAAkB,WAG9FV,EACH,CAAC,CAACx2C,KAAMk3C,EAAO7a,GAAI,KACnB,CACE,CACEr8B,KAAMg3C,KACF7Z,EAAO,CAACA,KAAMiU,GAAajU,GAAM,EAAMga,IAAW,CAAC9kD,MAAO,IAC9DgqC,GAAIA,GAEN,CACEr8B,KAAMk3C,KACF/Z,EAAO,CAACA,KAAMiU,GAAajU,IAAS,GACxCd,GAAI,CACF,CACE6V,OAAQ,CAACphC,OAAQkmC,GACjB5Z,OAAS,GAAE4Z,YAAgBA,wBAA4B30B,MAAc20B,SA5LlEM,CAAelmC,EAAOugC,EAASuD,EAAMr4C,GAC1Cq6C,EAAQhC,EAAKhY,QAAQ/kC,KACrB6+C,EAAQ9B,EAAKhY,QAAQ+Z,OACrB50B,EAAYvjB,cAAYsS,EAAMiR,UAAU5d,IAExC8yC,EAAQx5B,GADI3M,EAAMskC,kBAAkBjxC,GAASsd,IAAI,SACR,IAAM,GAErDmb,EAAQjqC,QAAQ8jD,GAChBN,EAAYxjD,KAAKikD,GAEjBR,EAAczjD,KAAK,CACjBovB,UAAWjR,EAAMiR,UAAU5d,GAC3BoM,KACG,aAAYqmC,UACTK,WAAel1B,MAAc20B,aAAiBO,IAAQL,WACvDK,WAAel1B,MAAc20B,aAAiBO,IAAQL,eAM1DV,GAAaE,EAAc7gD,QAC9BqnC,EAAQjqC,KAAK,CACX+M,KAAMA,EAAOs2C,GACbjkD,MAAO,GACPgqC,GAAI,CACF,CACE6V,OAAQwE,EAAcpjD,KAAIf,KAAOqvB,MAAOrvB,EAAE8vB,cAC1C+a,OAAS,GAAEsZ,EAAcpjD,KAAIf,GAAKA,EAAEse,OAAM7V,KAAK,aAAagF,EAAOs2C,oBASrElZ,EAAU,SAAQvnB,GAASzE,eAAmBmlC,mBAC7CrZ,EAAQxrB,OAAO,CACpB1R,KAAMA,EAAO8xC,MACT3U,EAAO,CAACA,KAAO,IAAGC,MAAWgU,GAAajU,OAAY,MACtDsZ,EAAY5gD,OACZ,CACEwmC,GAAI,CACF,CACE6V,OAAQ,CAAC,CAACphC,OAAQ2lC,EAAYz7C,KAAK,UACnCoiC,OAAS,GAAEqZ,EAAYz7C,KAAK,cAAcoiC,OAAYqZ,gBAI5D,MAIR5G,MAAO,CAACz+B,EAAOugC,EAAS9B,WAChB7vC,EAAO2xC,EAAQ3xC,MACflF,EAACA,EAADwC,EAAIA,GAAKq0C,EAAQsD,QAAQF,WACzByC,EAAS18C,GAAKA,EAAEoiC,QAAQ+Z,OACxBQ,EAASn6C,GAAKA,EAAE4/B,QAAQ+Z,OACxBS,EAAS,QAAO54C,cAAY6yC,EAAQ3xC,KAAOmyC,UAI7C4D,GAAO/D,QAAQL,KAAc72C,IAAMwC,SAC9BuyC,QAGHzS,EAAc,CAClBtiC,OAAS/B,IAAN+B,EAAkB,CAACgW,OAAS,GAAE0mC,QAAe,CAACnlD,MAAO,GACxDiL,OAASvE,IAANuE,EAAkB,CAACwT,OAAS,GAAE2mC,QAAe,CAACplD,MAAO,GACxDiR,QAAUvK,IAAN+B,EAAkB,CAACgW,OAAS,GAAE0mC,QAAe,CAAC/kC,MAAO,CAACjC,MAAO,UACjEjN,QAAUxK,IAANuE,EAAkB,CAACwT,OAAS,GAAE2mC,QAAe,CAAChlC,MAAO,CAACjC,MAAO,eAO3C,WAApBmhC,EAAQ78C,YACL,MAAMwB,KAAO+C,EAAK+jC,GACrBA,EAAO9mC,GAAO,CACZ,CACE4rB,KAAO,GAAEw1B,eAAmBA,iBAAqB7hC,GAASzE,QACvDgsB,EAAO9mC,IAEZ,CAACjE,MAAO,UAQRoR,KAACA,EAADG,YAAOA,EAAPiM,OAAoBA,KAAWnM,GAAUiuC,EAAQxpC,KACjDwvC,EAAWt+C,EAAKqK,GAAQ/Q,QAAO,CAACk1B,EAAK/rB,KACzC+rB,EAAI/rB,GAAK,CACP,CACEomB,KAAM,MAAOnpB,IAAN+B,GAAoB,GAAE08C,YAAiBA,YAAmBz+C,IAANuE,GAAoB,GAAEm6C,YAAiBA,QAC/Fv+B,QAAO3mB,GAAKA,IACZyI,KAAK,QACR3I,MAAOqR,EAAO5H,IAEhB,CAACzJ,MAAO,OAEHw1B,IACN,UAEI,CACL,CACE7nB,KAAO,GAAEA,EAAOq2C,QAChB3iD,KAAM,OACNmhC,MAAM,EACNvS,OAAQ,CACNs1B,MAAO,CACLn0C,KAAM,CAACpR,MAAOoR,GACdG,YAAa,CAACvR,MAAOuR,IAEvBw5B,OAAQA,OAGTyS,EACH,CACE7vC,KAAMA,EAAOq2C,GACb3iD,KAAM,OACNmhC,MAAM,EACNvS,OAAQ,CACNs1B,MAAO,IACD/nC,EAAS,CAACA,OAAQ,CAACxd,MAAOwd,IAAW,GACzCpM,KAAM,CAACpR,MAAO,gBAEhB+qC,OAAQ,IAAIA,KAAWua,QAiEjC,SAASzF,GAAOP,EAAyC1zC,UAChD0zC,EAAQO,OAAOv/C,QAAO,CAAC0pC,EAAIua,IAC3BA,EAAIrG,QAIFtyC,EAAGo+B,EAAIua,IAHZxgC,GAAM,GAAEwgC,6DACDva,IAGR,ICpPL,MAAMzzB,GAAoC,CACxCopC,QAASL,GAA4B,UAAjBA,EAAQj+C,KAE5BwpC,QAAS,CAAC9rB,EAAOugC,EAASzU,WAClBl9B,EAAO2xC,EAAQ3xC,KACfu2C,EAAWv2C,EAAO40C,GAClBK,EAAUtD,EAAQsD,QAClBt2C,EAAQ,2CACRlC,EAASw4C,EAAQH,MACpBxhD,KAAIoY,UACGmJ,EAAWzD,EAAMyD,SAASnJ,EAAEjH,gBAE3BoQ,MAAAA,GAAAA,EAAUrJ,IACZ,IAAG7M,KAASG,cAAYsS,EAAMsB,QAAQhH,EAAEjH,QAAS,UAC7C9F,KAASG,cAAYsS,EAAMsB,QAAQhH,EAAEjH,QAAS,CAAC8e,UAAW,aAC9D,GAAE5kB,KAASG,cAAY4M,EAAE+G,aAE/BzX,KAAK,MASFoiC,EAAU,SAAQvnB,GAASzE,eAAmBmlC,YAE9CrE,EAAmBP,EAAQO,OAE3B2F,EAAUn6C,EAAK0T,EAAMwgC,UAAU7R,WAAa,IAC/CptC,QAAO,CAACmlD,EAAKC,IACS,aAAdA,EAAKrkD,KAAsBokD,EAAIpmC,OAAOqmC,EAAK/3C,KAAOq2C,IAASyB,GACjE,IACFxkD,KAAImF,GAAM,8BAA6BA,YACvCuC,KAAK,QAEFknB,EAAQ,6CAA8C21B,EAAW,OAAMA,IAAY,WAElF3a,EAAQxrB,OAAO,CACpB,CACE1R,KAAMA,EAAO8xC,GACbzV,GAAI6V,EACA,CACE,CACEA,OAAAA,EACA9U,OAAS,GAAElb,QAAWkb,OAAY3gC,aAClCu7C,OAAO,IAGX,QC7CL,SAASC,GACd7mC,EACAuQ,EACA7P,EACAomC,SAEMvnC,EAAYgW,GAAqBhF,IAAeA,EAAWhR,UAC3DwnC,EAAWD,EAAMv2B,MACnBhR,EAAW,OAaN,EACJmB,GAAY,IAbIrW,QAAMkV,GACOrd,KAAIyE,UAC5BqgD,EAAoBF,EAAMngD,M1CoI/B,SAAmCA,UACjCA,EAAC,M0CpIAsgD,CAA4BtgD,GAAI,OAC5BilC,MAACA,EAADoN,MAAQA,GAASryC,QAEhB,CAACmqB,KADKo2B,GAAwBlnC,EAAO,CAAC4rB,MAAAA,EAAOoN,MAAAA,OACnCgO,SAGV,CAACl2B,KADKq2B,GAAWnnC,EAAQrZ,EAAgCmqB,SAC/Ck2B,cAI6Br/C,IAAbo/C,EAAyB,CAACA,GAAY,iBAGvDp/C,IAAbo/C,EAAyB,EAAErmC,GAAYqmC,GAAY,GC5BvD,SAASj0C,GAAKkN,EAAkB3M,EAAmD,cAClFkd,EAAavQ,EAAMqZ,SAAShmB,UAC3BwzC,GAAc7mC,EAAOuQ,EAAYld,GAASuhC,GAAQwS,GAAQxS,EAAM50B,EAAMI,UAGxE,SAASgnC,GACd72B,EACAnQ,EACAX,EAAgC,YAG5B8Q,EAAY,IACV8B,GAAW9B,UACN5Q,GAAiB4Q,EAAWtvB,UAEjC6wB,GAAkBvB,GAAa,OAC3BqC,OAACA,EAADF,WAASA,GAAcoF,GAAgBvH,UACtCsC,GAAgB,CAACxB,gBAAiBd,EAAYqC,OAAAA,EAAQF,WAAAA,EAAYjT,KAAAA,EAAMW,OAAAA,MCD9E,SAASpN,GAAQgN,EAAkBS,EAAgC,UAClE4Y,SAACA,EAADlZ,QAAWA,EAAXC,OAAoBA,EAApBwR,MAA4BA,GAAS5R,EACrCuQ,EAAa8I,EAASrmB,WACxBpR,UAAQ2uB,SACH,CAACvd,QAASq0C,GAAsB,CAACr0C,QAASud,GAAaqB,EAAOxR,EAAQK,IACxE,OACClT,EAAQkT,EAAI6mC,aAAe,cAAgB,eAC1CT,GAAc7mC,EAAOuQ,EAAY,WAAWqkB,UAE3C2S,EAA2BH,GAAQxS,EAAMx0B,EAAQ7S,MACnDg6C,SACKA,KAGI,OAAT3S,aAKA4S,EAAchnC,GAAoB,UAAWL,EAASC,UAEtC,IAAhBonC,IACFA,EAAc,CAACC,QAAS,aAGtBz9C,WAASw9C,GACJ,CAACvmD,MAAOumD,GACN5sC,WAAS4sC,GAEdjrC,GAAYirC,GACPA,EAC0B,aAAxBA,EAAYC,QACdJ,GAAsBhuB,EAAUzH,EAAOxR,EAAQK,GAE/C,CAACf,OAAQnS,QAPb,MAgBN,SAASm6C,GACdruB,EACAzH,EACAxR,GACAknC,aAACA,GAA0C,UAErCK,EAAS,GACTloC,EAAO6nC,EAAe,cAAgB,QACtCM,EAA2D,YAExDriD,EAAIsiD,EAAyDx0C,SAC9Dy0C,EAActzC,GAAoBnB,GAElCoQ,EAAkCsO,GAAgB81B,GACpDA,EACA,IACKA,EACHvlD,KAAO+2B,EAASyuB,GAAoCxlD,MAGpD80B,EAAQ3T,EAAS2T,OAASM,GAAajU,EAAUrD,GACjDlb,EAAMmF,QAAM+sB,GAAOxtB,KAAK,UAE1B3I,KAEA2U,GAAOvC,GAAU,OACb00C,EAAuB,MAAZ10C,EAAkB,KAAO,KACpC4e,EAAY+F,GAAYqB,EAAS0uB,OAEnCptC,GAAS8I,EAASrJ,MAAQ6X,EAAW,OACjCkC,EAAa7S,GAAQmC,EAAU,CAAChE,KAAAA,IAChC2U,EAAW9S,GAAQ2Q,EAAW,CAACxS,KAAAA,KAC/BmT,OAACA,EAADF,WAASA,GAAcoF,GAAgBrU,GAC7CxiB,EAAQyyB,GAAoBS,EAAYC,EAAUxB,EAAQF,EAAYtS,GACtEunC,EAAOI,IAAY,OACd,GAAIn2B,GAASA,EAAMuiB,eAAiB9gC,GAA4B,cAAjBue,EAAMrW,OAAwB,OAC5EqX,OAACA,EAADF,WAASA,GAAcoF,GAAgBrU,GAC7CxiB,EAAQ4xB,GAAgB,CACtBxB,gBAAiB5N,EACjBmP,OAAAA,EACAF,WAAAA,EACAjT,KAAAA,EACAW,OAAAA,EACA0S,gBAAgB,IACfpT,QAIPze,IAAAA,EAAUmmD,GAAQ3jC,EAAUrD,EAAQX,GAAMC,QAE1CkoC,EAAO/lD,KAAK,CAACwR,QAAAA,EAASnO,IAAAA,EAAKjE,MAAAA,IAG7BgE,GAAQo0B,GAAU,CAAC9I,EAAYld,KACzBqd,GAAWH,GACbhrB,EAAIgrB,EAAYld,GACPmiB,GAAuBjF,IAChChrB,EAAIgrB,EAAWhR,UAAWlM,YAIxBvL,EAAM,OACP,MAAMuL,QAACA,EAADnO,IAAUA,EAAVjE,MAAeA,KAAU2mD,EAC7BD,EAAOt0C,IAAavL,EAAI5C,KAC3B4C,EAAI5C,GAAOjE,UAIR6G,EAGF,SAASu/C,GACdhuB,EACAzH,EACAxR,GACAknC,aAACA,GAA0C,UAErCvgD,EAAO2gD,GAAYruB,EAAUzH,EAAOxR,EAAQ,CAACknC,aAAAA,IAE7CU,EAAYr9C,EAAQ5D,GAAM7E,KAAI,EAAEgD,EAAKjE,KAAY,IAAGiE,OAASjE,aAC5D+mD,EAAUvjD,OAAS,EAAI,CAACib,OAAS,IAAGsoC,EAAUp+C,KAAK,eAAYjC,EC5IjE,SAASkV,GAAKmD,SACbG,QAACA,EAADC,OAAUA,GAAUJ,EAEpBioC,EAAaznC,GAAoB,OAAQL,EAASC,UAGrC,IAAf6nC,EAEK,GAGF,IACDA,EAAa,CAACprC,KAAMorC,GAAc,MACnClrC,GAAoBiD,MACpB7M,GAAY6M,IAInB,SAASjD,GAAoBiD,SACrBjJ,KAACA,EAADoJ,QAAOA,EAAPC,OAAgBA,GAAUJ,MAEZ,IAAhBI,EAAOvD,WACF,SAGHqrC,EAAe1nC,GAAoB,sBAAuBL,EAASC,UAErD,MAAhB8nC,EACK,CAACnrC,oBAAqB,CAAC9b,MAAOinD,IAGhCnxC,KAAQoI,GAAgB,GAAK,CAACpC,oBAAqB,CAAC9b,MAAO8V,IAG7D,SAAS5D,GAAY6M,SACpBqZ,SAACA,EAADlZ,QAAWA,EAAXC,OAAoBA,EAApBwR,MAA4BA,GAAS5R,EACrCuQ,EAAa8I,EAASlmB,eAExBod,SACKs2B,GAAc7mC,EAAOuQ,EAAY,eAAeqkB,GAAQwS,GAAQxS,EAAM50B,EAAMI,gBAK/E+nC,EAAmB3nC,GAAoB,cAAeL,EAASC,MAC7C,MAApB+nC,QACK,CACLh1C,YAAawM,GAAiBwoC,QAId,IAAhB/nC,EAAOvD,WACF,SAGH9V,EAAO2gD,GAAYruB,EAAUzH,EAAOxR,UAEtC/T,EAAQtF,UAIL,CACLoM,YAAa,CACXuM,OAAQ/U,EAAQ5D,GACb7E,KAAI,EAAEgD,EAAKjE,GAAQ6D,IAAW,IAAGA,EAAQ,EAAI,KAAO,KAAKI,WAAajE,OACtE2I,KAAK,SC7DP,SAASw+C,GACd/0C,EACA2M,EACAS,EAII,UAEEN,QAACA,EAADkZ,SAAUA,EAAVjZ,OAAoBA,GAAUJ,GAC9BU,UAACA,GAAaD,MAChBoR,WAACA,EAADw2B,aAAaA,GAAgB5nC,OAEd9Y,IAAfkqB,IAEFw2B,IAAAA,EAAiB7nC,GAAoBnN,EAAS8M,EAASC,EAAQ,CAACM,UAAAA,EAAWC,gBAAgB,UAEtEhZ,IAAjB0gD,IACFx2B,EAAalS,GAAiB0oC,WAI5B93B,EAAa8I,EAAShmB,UAErBwzC,GAAc7mC,EAAOuQ,EAAY7P,GAAarN,GAASuhC,GACrD/0B,GAAa,CAClBxM,QAAAA,EACAkd,WAAYqkB,EACZz0B,QAAAA,EACAC,OAAAA,EACA6Q,UAAWjR,EAAMiR,UAAU5d,GAC3Bmd,MAAOxQ,EAAMskC,kBAAkBjxC,GAC/Bue,MAAO,KACPC,WAAAA,MCtCC,SAASzf,GAAM4N,EAAkBS,EAAqC,CAACgP,YAAQ9nB,UAC9EwY,QAACA,EAADkZ,SAAUA,EAAVjZ,OAAoBA,GAAUJ,GAC7B1d,KAAM8vC,GAAYjyB,EAGnBsP,EAAShP,EAAIgP,QAAUjP,GAAoB,SAAUL,EAASC,GAE9DkoC,EAAsBl+C,EAAS,CAAC,MAAO,QAAS,SAAU,SAAU,YAAagoC,GACnF,mBACAzqC,EAEE4gD,EACJ/nC,IAA+B,IAAXiP,EAAkB,aAAU9nB,EAAWwY,EAASC,EAAQ,CAACM,UAAW,UAExFN,EAAOrJ,MAAgB,IAAX0Y,GAAmB,UAG/B64B,EAEIE,EACJhoC,IAA+B,IAAXiP,EAAmB,aAAU9nB,EAAWwY,EAASC,EAAQ,CAACM,UAAW,YAEzFN,EAAOrJ,MAAgB,IAAX0Y,GAAoB,SAE5Bg5B,EAAiBh5B,EAAS,OAAS,SAEnCi5B,EAA4C,IAC5CH,EAAc,CAACl2C,KAAMsN,GAAiB4oC,IAAgB,MACtDC,EAAgB,CAACl2C,OAAQqN,GAAiB6oC,IAAkB,WAG9DroC,EAAQ/N,QAAUqd,EAAStP,EAAQ9N,KAAO8N,EAAQ7N,SACpDwT,GAASA,GAA0B,WAAY,CAACzT,KAAM,SAAU8N,EAAS7N,OAAQ,WAAY6N,KAGxF,IACFuoC,KACAN,GAAY,QAASpoC,EAAO,CAC7BU,UAAW+nC,EACXJ,aAAc54B,EAAS84B,EAAcC,OAEpCJ,GAAY,OAAQpoC,EAAO,CAE5BqoC,aAAchvB,EAAShnB,KAAOk2C,OAAc5gD,OAE3CygD,GAAY,SAAUpoC,EAAO,CAE9BqoC,aAAchvB,EAAS/mB,OAASk2C,OAAgB7gD,KChD/C,SAAS42B,GAAOve,SACfqZ,SAACA,EAADtiB,KAAWA,GAAQiJ,EACnBnN,EAAQwmB,EAASxmB,aAElBsc,GAAWpY,IAASsb,GAAWxf,GAC3Bg0C,GAAc7mC,EAAOnN,EAAO,UAAU8iB,GAAMhW,GAAiBgW,EAAG10B,SAElE,GCNF,SAAS0nD,GACdt1C,EACA8M,SAKMyoC,EAAqBzoC,EpE6StB,SAA0B9M,UACvBA,QACD/D,SACI,eACJC,SACI,eACJC,SACI,gBACJC,SACI,gBACJG,SACI,mBACJF,SACI,oBACJG,SACI,oBACJF,SACI,iBoEjUWk5C,CAAiBx1C,OAInCu1C,SACKA,ECMJ,SAASE,GACdz1C,EACA2M,GACA+oC,WACEA,EADFroC,UAEEA,UAMI2Y,SAACA,EAADlZ,QAAWA,EAAXC,OAAoBA,EAApBwR,MAA4BA,GAAS5R,EAErCuQ,EAAa8I,EAAShmB,GACtBse,EAAc0H,EAAS3kB,GAAyBrB,IAChD4d,EAAYjR,EAAMiR,UAAU5d,GAC5Bmd,EAAQxQ,EAAMskC,kBAAkBjxC,GAEhCkI,EAASotC,GAAUt1C,EAAS8M,GAG5B0R,EAAam3B,GAAwB,CACzChpC,MAAAA,EACA+oC,WAAAA,EACA11C,QAAAA,EACA4d,UAAAA,EACAT,MAAAA,IAGIu2B,GACHx2B,GAAc3a,GAAOvC,KAAagmB,EAASvnB,UAAYunB,EAASznB,YAE5DyP,MAAOrB,EAAMkhC,QAAQ7tC,IAuBvB,SACLqV,SAIMrV,QAACA,EAADkd,WAAUA,EAAVU,UAAsBA,EAAtBW,MAAiCA,EAAjCrW,OAAwCA,EAAxC4E,QAAgDA,GAAWuI,KAG7DoJ,GAAkBvB,IAAeqB,GAASve,IAAYue,EAAMuiB,aAAc,IACxEzjB,GAAWH,GAAa,KACtBiB,EAAejB,EAAWiB,qBAET7pB,IAAjB6pB,GAA+C,SAAjBrR,EAAQ7d,MAAgC,WAAZ+Q,GAAoC,UAAZA,IAGpFme,EAAe,SAGI7pB,IAAjB6pB,SACK3R,GAA0B,CAC/BoR,UAAAA,EACAI,gBAAiBd,EACjBgB,YAAa,QACbC,aAAAA,EACAjW,OAAAA,WAKCsE,GAA+B0Q,EAAYU,EAAW,CAACS,OAAQ,OAAQ,CAACnW,OAAAA,WAG1EsE,GAAuC6I,GAtDxCugC,CAAY,CACV51C,QAAAA,EACAkd,WAAAA,EACAoB,YAAAA,EACAxR,QAAAA,EACAC,OAAAA,EACA6Q,UAAAA,EACAT,MAAAA,EACAoB,MAAAA,EACArW,OAAAA,EACAsW,WAAAA,WAGDk1B,EAAW,EAAErmC,GAAarN,GAAU0zC,QAAYp/C,EA4ClD,SAASqhD,IAAwBhpC,MACtCA,EADsC+oC,WAEtCA,EAFsC11C,QAGtCA,EAHsC4d,UAItCA,EAJsCT,MAKtCA,UAQMrQ,QAACA,EAADC,OAAUA,GAAUJ,QACnB,WACC8nC,EAActzC,GAAoBnB,GAClCqN,EAAYjM,GAAqBpB,GAEjC61C,EAAuB1oC,GAAoBnN,EAAS8M,EAASC,EAAQ,CAACM,UAAAA,YAC/C/Y,IAAzBuhD,SACKrpC,GAAgCxM,EAAS61C,UAG1CH,OACD,gBACA,eACC93B,EAAW,OACP7M,EAAYoM,EAAMG,IAAI,WACxBvmB,EAAS,CAAC0gB,GAAeA,GAAgBA,IAAgB1G,YAMvDoM,EAAM24B,qCACD,CACL34B,MAAOS,EACPhwB,MAAO,MAMI,cAAf8nD,QACqB,MAAhBjB,EAAsB,CAACzmC,MAAO,CAACjC,MAAO,WAAa,CAACne,MAAO,UAG1D6mD,OACD,eAEI,CACLpoC,OAAS,OAAMM,EAAMhB,MAAMU,UAAUM,EAAMf,OAAOS,iBAEjD,cACI,CAACA,OAAQ,YACb,UACI,CAAC2B,MAAO,CAACjC,MAAO,cACpB,UACI,CAACne,MAAO,aAIlB,YAEI,IADS+e,EAAMrL,GAAetB,IACjB+1C,KAAM,MCxKlC,MAAMC,GAAoD,CACxDC,KAAM,IACN1gB,OAAQ,KACR2gB,MAAO,MAGHC,GAAsB,CAC1BC,IAAK,IACLC,OAAQ,KACRC,OAAQ,MAGH,SAASC,GACdv2C,EACA8M,EACAC,EACAypC,EAAiC,aAEjB,WAAZx2C,GAAoC,UAAZA,SACnBoB,GAAqBpB,SAExBy2C,EAA2B,MAAZz2C,EAAkB,QAAU,WAC3CwK,EAAQ2C,GAAoBspC,EAAc3pC,EAASC,OAErD2pC,SAEAxtC,GAAYsB,IACdiI,G/DuLG,SAA8CjI,SAC3C,OAAMA,4C+DxLHiI,CAAiDgkC,IAC1DC,OAAuBpiD,GAEvBoiD,EAAuBlsC,EAGT,MAAZxK,EACKg2C,GAAkBU,IAA0C,QAAjBF,EAAyB,OAAS,WAE7EL,GAAoBO,GAAwBF,GC3BhD,SAASG,GACd32C,EACA2M,GACA+oC,WACEA,EADFkB,YAEEA,EAFFxtC,MAGEA,WAOEA,EACKytC,GAAc72C,EAAS2M,EAAO,CAAC+oC,WAAAA,EAAYkB,YAAAA,IAE7CnB,GAAcz1C,EAAS2M,EAAO,CAAC+oC,WAAAA,IAGjC,SAASmB,GACd72C,EACA2M,GACA+oC,WACEA,EADFkB,YAEEA,UAMI9pC,QAACA,EAADC,OAAUA,GAAUJ,EACpB+nC,EAAWrzC,GAAyBrB,GACpC6hB,EAAcvgB,GAAetB,GAE7B82C,EAkBR,SACEnqC,EACA+oC,EACA11C,SAEMgmB,SAACA,EAADtiB,KAAWA,EAAXoJ,QAAiBA,EAAjByR,MAA0BA,EAA1BxR,OAAiCA,GAAUJ,EAE3CoqC,EAAc51C,GAAoBnB,GAClC6hB,EAAcvgB,GAAetB,GAC7BqN,EAAYjM,GAAqBpB,GAEjCkd,EAAa8I,EAAS+wB,GACtBn5B,EAAYjR,EAAMiR,UAAUm5B,GAC5B55B,EAAQxQ,EAAMskC,kBAAkB8F,GAEhC7uC,EAEAotC,GADJt1C,KAAWgmB,GAAYhmB,KAAW8M,EACpB9M,EACA+2C,EADSpqC,EAAMG,aAG1BoQ,IAA2B,OAAZld,GAAgC,OAAZA,KAAsBgmB,EAASvnB,UAAYunB,EAASznB,WAAY,OAChGy4C,EAAgB11C,GAAetB,GAE/B1H,EAAOqU,EAAMG,QAAQkqC,UACf,MAAR1+C,EACK,EACJ0+C,GAAgB,CAACppD,MAAO0K,IAGpB,EACJ+U,GAAY,CAACW,MAAOrB,EAAMkhC,QAAQ7tC,WAKnC0zC,EAyCD,UAAsB1zC,QAC3BA,EAD2Bkd,WAE3BA,EAF2BoB,YAG3BA,EAH2BxR,QAI3BA,EAJ2BC,OAK3BA,EAL2B6Q,UAM3BA,EAN2BT,MAO3BA,EAP2BoB,MAQ3BA,EAR2BrW,OAS3BA,EAT2BsW,WAU3BA,OAKEC,GAAkBvB,IAClBqB,GAEAve,EAAQnG,OAAO,KAAO0kB,EAAMuiB,aAAajnC,OAAO,UAEzC2S,GAA+B0Q,EAAYU,EAAW,CAACS,OAAQ,SAAU,CAACnW,OAAAA,WAE5EsE,GAAuC,CAC5CxM,QAAAA,EACAkd,WAAYoB,EACZV,UAAAA,EACAT,MAAAA,EACAoB,MAAAA,EACAzR,QAAAA,EACAC,OAAAA,EACA7E,OAAAA,EACAsW,WAAAA,IAxEey4B,CAAa,CAC5Bj3C,QAAAA,EACAkd,WAAAA,EACAoB,YAAa0H,EAAShmB,GACtB8M,QAAAA,EACAC,OAAAA,EACA6Q,UAAAA,EACAT,MAAAA,EACAoB,MAAAA,EACArW,OAAAA,EACAsW,gBAAYlqB,YAGGA,IAAbo/C,QACK,EAAErmC,GAAYqmC,UASrBwD,GAAgBl3C,EAAS8M,IACzBoqC,GAAgBl3C,EAAS,EACtBA,GAAUuN,GAAmBvN,EAAS8M,EAASC,EAAOG,QACtD2U,GAActU,GAAmBsU,EAAa/U,EAASC,EAAOG,UAEjEgqC,GAAgBl3C,EAAS+M,EAAOrJ,KAChCwzC,GAAgBl3C,EAAS+M,EAAOrJ,OAAS,EACtC2J,GAAYsoC,GAAwB,CACnChpC,MAAAA,EACA+oC,WAAAA,EACA11C,QAAAA,EACA4d,UAAAA,EACAT,MAAAA,GALWw4B,IAnFEwB,CAAqBxqC,EAAOiqC,EAAalC,SAQrD,IACFe,GAAcz1C,EAAS2M,EAAO,CAAC+oC,WAAAA,EAAYroC,UAP9BypC,EAAWj1B,GAEzB00B,GAAyBv2C,EAAS8M,EAASC,GAE3C3L,GAAqBpB,QAIpB82C,GAuHP,SAASI,GACPl3C,EACA8M,SAEM+U,EAAcvgB,GAAetB,GAC7BqN,EAAYjM,GAAqBpB,WACZ1L,IAAvBwY,EAAQO,SACH,EAAEA,GAAYb,GAAgCxM,EAAS8M,EAAQO,KACjE,QAAyB/Y,IAArBwY,EAAQ9M,SACV,EAAEqN,GAAYb,GAAgCxM,EAAS8M,EAAQ9M,KACjE,GAAI8M,EAAQ+U,GAAc,OACzBu1B,EAAgBtqC,EAAQ+U,OAC1BpF,GAAmB26B,SAGd,EAAEv1B,GAAcrV,GAAgCxM,EAASo3C,IAFhE3kC,GhEpBC,SAAsCoP,SACnC,0DAAyDA,KgEmBpDpP,CAAyCoP,KCpKjD,SAASw1B,GACd1qC,EACA3M,EACA0D,SAEMqJ,OAACA,EAADiZ,SAASA,EAATlZ,QAAmBA,GAAWH,EAE9B+nC,EAAWrzC,GAAyBrB,GACpC6hB,EAAcvgB,GAAetB,GAC7Bkd,EAAa8I,EAAShmB,GACtBs3C,EAActxB,EAAS0uB,GAEvBv3B,EAAQxQ,EAAMskC,kBAAkBjxC,GAChC+Q,EAAYoM,EAAQA,EAAMG,IAAI,aAAUhpB,EACxCspB,EAAYjR,EAAMiR,UAAU5d,GAE5BmI,EAAS2E,EAAQ3E,OACjBovC,EACJvxB,EAASnE,IAAgBmE,EAAS1tB,MAAQ6U,GAAoB,OAAQL,EAASC,EAAQ,CAACM,UAAWwU,IAE/F21B,EAAqB,QAAT9zC,IAA+B,MAAZ1D,EAA6B,aAAXmI,EAAmC,eAAXA,OAI7EkV,GAAWH,MACV/V,GAAU+V,EAAWnW,MAAQO,GAAS4V,EAAWnW,MAASmW,EAAWvJ,WAAa2jC,IACjFC,IAAe96B,GAAmB86B,IACnCl+B,GAAkBtI,GAkBd,OAAM0N,GAAkBvB,IAAe7D,GAAkBtI,IAAeymC,KAAeF,EAgDhG,SACElnC,EACApQ,EACA2M,SAEMG,QAACA,EAADkZ,SAAUA,EAAVjZ,OAAoBA,EAApBwR,MAA4BA,GAAS5R,EACrCxE,EAAS2E,EAAQ3E,OAEjByV,EAAYjR,EAAMiR,UAAU5d,GAC5Bmd,EAAQxQ,EAAMskC,kBAAkBjxC,GAChCg3C,EAAgB11C,GAAetB,GAC/B00C,EAAWrzC,GAAyBrB,GAGpC4hB,EAA+B,eAAXzZ,GAAuC,MAAZnI,GAAgC,aAAXmI,GAAqC,MAAZnI,MAG/Fy3C,GACAzxB,EAAS1tB,MAAQwU,EAAQxU,QACvBspB,EACF61B,EAAa1C,GAAY,OAAQpoC,EAAO,CACtCU,UAAW2pC,EACXx4B,WAAYlS,GAAiBQ,EAAQxU,QAGvCma,GjE4GC,SAA0C/O,SACvC,2CAA0CA,MiE7GrC+O,CAA6C3F,EAAQ7d,cAK5DyoD,EAAW/1B,GAAY,CAAC3hB,QAAAA,EAASoQ,SAAAA,EAAUtD,QAAAA,EAASC,OAAAA,EAAQgE,UAAWoM,MAAAA,SAAAA,EAAOG,IAAI,QAASsE,iBAAAA,IAEjG61B,EAAaA,GAAc,EAAET,GAAgBW,GAAeX,EAAep5B,EAAWT,EAAOpQ,EAAQ2qC,UAW/FE,EAA0C,UAAvBz6B,MAAAA,SAAAA,EAAOG,IAAI,UAAwB,SAAUm6B,EAAWT,GAA6B,MAAX,SAE7F3pC,EAAYkpC,GAAyBv2C,EAAS8M,EAASC,EAAQ6qC,GAC/DriB,EAAuB,OAAdloB,GAAoC,OAAdA,EAC/BnF,EAASotC,GAAUt1C,EAAS8M,GAE5B+qC,EAASrrC,GAAuC,CACpDxM,QAAAA,EACAkd,WAAY9M,EACZtD,QAAAA,EACAC,OAAAA,EACA6Q,UAAAA,EACAT,MAAAA,EACAoB,MAAAA,EACArW,OAAAA,EACAsW,WAAYm3B,GAAwB,CAAChpC,MAAAA,EAAO+oC,WAAY,MAAO11C,QAAAA,EAAS4d,UAAAA,EAAWT,MAAAA,IACnFgB,aAAcoX,EACV,GACArsB,GAAYwuC,GACZ,CAACrrC,OAAS,MAAKqrC,QACfj7B,GAAmBi7B,IAClB,EAAIA,EAASv/B,MAAQ,EACtB,OAGF6+B,QACK,EAAE3pC,GAAYwqC,KAAWJ,GAC3B,OAGCK,EAAa12C,GAAqBszC,GAClCqD,EAAUN,EAAWT,GACrBgB,EAAa9vC,EAAS,IAAI6vC,EAAS7vC,OAAAA,GAAU6vC,QAC5C,EACJ1qC,GAAYwqC,GAGZC,GAAavpD,UAAQspD,GAClB,CAACA,EAAO,GAAI,IAAIA,EAAO,GAAI3vC,OAAQ8vC,IACnC,IACKH,EACH3vC,OAAQ8vC,KAnITC,CAAgB/6B,EAAYld,EAAS2M,GAErCkqC,GAAc72C,EAAS2M,EAAO,CAAC+oC,WAAY,YAAakB,YAAa,cApB5E,aACMc,EAAW/1B,GAAY,CAAC3hB,QAAAA,EAASoQ,SAAU8M,EAAYpQ,QAAAA,EAASC,OAAAA,EAAQgE,UAAAA,IACxEuT,YAAO3X,EAAMwgC,UAAU+K,KAAKl4C,uBAArBm4C,EAAgC,UAwL1C,UAAyB/nC,SAC9BA,EAD8BwO,UAE9BA,EAF8B5e,QAG9BA,EAH8B03C,SAI9BA,EAJ8B95B,UAK9BA,EAL8B9Q,QAM9BA,EAN8BysB,QAO9BA,EAAU,EAPoB6e,cAQ9BA,EAR8Bl+B,QAS9BA,EAT8BnN,OAU9BA,UAaM2nC,EAAWrzC,GAAyBrB,GAEpCqN,EAAYjM,GAAqBpB,GACjC83C,EAAa12C,GAAqBszC,GAElCxsC,EAASotC,GAAUt1C,EAAS8M,GAE5BqR,EAAejV,GAAYwuC,GAC7B,CAACrrC,OAAS,MAAKqrC,EAASrrC,aACxBoQ,GAAmBi7B,IAClB,EAAIA,EAASv/B,MAAQ,EACtB,MAEAhR,GAAUiJ,EAASrJ,MAAQqJ,EAASuD,eAC/B,EACJmkC,GAAaO,GAAW,CACvBr4C,QAAAA,EACAoQ,SAAAA,EACAwN,UAAAA,EACA9Q,QAAAA,EACAqR,aAAAA,EACAjW,OAAQowC,GAAc5D,EAAUnb,EAASrf,EAASk+B,EAAelwC,GACjE6E,OAAAA,KAEDM,GAAYgrC,GAAW,CACtBr4C,QAAAA,EACAoQ,SAAAA,EACAwN,UAAAA,EACA9Q,QAAAA,EACAqR,aAAcjV,GAAYiV,GAAgB,CAAC9R,OAAS,KAAI8R,EAAa9R,UAAY,EAAI8R,EACrFjW,OAAQowC,GAAct4C,EAASu5B,EAASrf,EAASk+B,EAAelwC,GAChE6E,OAAAA,KAGC,GAAIzF,GAAS8I,EAASrJ,KAAM,OAC3BwxC,EAAW/rC,GACf4D,EACAwN,EACA,GACA,CAAC1V,OAAQowC,GAAc5D,EAAUnb,EAASrf,EAASk+B,EAAelwC,QAGhEmV,GAAWuB,SACN,EACJk5B,GAAaS,GACblrC,GAAYb,GACXoS,EACAhB,EACA,GACA,CAAC1V,OAAQowC,GAAct4C,EAASu5B,EAASrf,EAASk+B,EAAelwC,MAGhE,GAAId,GAAYgJ,EAASrJ,MAAQqJ,EAASrJ,IAAIqf,WAC5C,EACJ0xB,GAAaS,GACblrC,GAAY,CACXhB,OAAS,UAASuR,OAAe3P,GAAQmC,EAAU,CAAChE,KAAM,eAAegE,EAASrJ,IAAIqf,QACtFle,OAAQowC,GAAct4C,EAASu5B,EAASrf,EAASk+B,EAAelwC,iBAKxEuK,GAASA,GAAqCiiC,IA1QrC8D,CAAgB,CACrBpoC,SAAU8M,EACV0B,UAAW04B,EACXt3C,QAAAA,EACA8M,QAAAA,EACA8Q,UAAAA,EACA85B,SAAAA,EACAU,eAToB9zB,MAAAA,SAAAA,EAAMhH,IAAI,eAAgB,GAU9Cic,QAASh3B,GAAOvC,GAAWmN,GAAoB,aAAcL,EAASC,QAAUzY,EAChF4lB,QAASiD,EAAMG,IAAI,WACnBvQ,OAAAA,KAQN,SAAS4qC,GACP91B,EACAjE,EACAT,EACApQ,EACA2qC,MAEIj7B,GAAmBi7B,GAAW,KAC5Bv6B,QASK,CACL44B,KAAM2B,EAASv/B,KACfnK,MAAO,CAACjC,MAAO8V,IAXR,OACH9Q,EAAYoM,EAAMG,IAAI,WACV,SAAdvM,QACK,CAACoM,MAAOS,EAAWzF,KAAMu/B,EAASv/B,MACd,IAAlBu/B,EAASv/B,OAClB1F,GjEkJD,SAAmD1B,SAChD,0CAAyCA,WiEnJlC0B,CAAsD1B,IAC/D2mC,OAAWpjD,QAQV,CAAA,GAAI4U,GAAYwuC,UACdA,EACF,GAAIA,QACF,CAAC9pD,MAAO8pD,MAIbv6B,EAAO,OACHs7B,EAAat7B,EAAMG,IAAI,YACzBnU,GAAcsvC,IAAehiD,WAASgiD,EAAWryB,YAC5C,CAACx4B,MAAO6qD,EAAWryB,KAAO,SAI9B,CAACx4B,MADY8rC,GAA0B3sB,EAAO+sB,KAAMjY,GAC9B,GAgG/B,SAASy2B,GACPt4C,EACAu5B,EACArf,EACA+Q,EACA/iB,MAEI7J,GAAuB2B,UAClB,QAGH04C,EAA4B,MAAZ14C,GAA+B,OAAZA,GAAoBu5B,EAAU,EAAIA,EAAU,KAEjFrwB,GAAYgR,IAAYhR,GAAYhB,IAAWgB,GAAY+hB,GAAY,OACnE0tB,EAAclsC,GAAoByN,GAClC0+B,EAAansC,GAAoBvE,GACjC2wC,EAAgBpsC,GAAoBwe,SAMnC,CACL5e,QALQwsC,EAAiB,GAAEA,OAAqB,KACxCF,EAAe,IAAGA,iBAA6B,KAC/CC,EAAc,IAAGA,OAAgBF,KAAmBA,WAM9DxwC,EAASA,GAAU,EACZ+iB,GAAa/Q,GAAWhS,EAASwwC,GAAiBxwC,EAASwwC,GAgG/D,SAASL,IAAWr4C,QACzBA,EADyBoQ,SAEzBA,EAFyBwN,UAGzBA,EAHyB9Q,QAIzBA,EAJyBqR,aAKzBA,EALyBjW,OAMzBA,EANyB6E,OAOzBA,WAiBOP,GAA4B,CACjC4D,SAAAA,EACApQ,QAAAA,EACA8M,QAAAA,EACAN,IAXQA,GAA0B,CAClCoR,UAAAA,EACAI,gBAAiB5N,EACjB+N,aAAAA,EACAjW,OAAAA,IAQA6E,OAAAA,ICjVJ,MAAM+rC,GAAgB,IAAIvpD,IAAI,CAAC,OAAQ,QAAS,WAEzC,SAASwpD,GAAgBpsC,EAAkBqsC,SAC1Ch6C,KAACA,EAADC,OAAmBA,GAAuC,YAAjB+5C,EAAOj6C,MAAsBA,GAAM4N,GAAS,SACpF,IACFssC,GAAkBtsC,EAAMG,QAASksC,MACjCE,GAAqBvsC,EAAO,OAAQ3N,MACpCk6C,GAAqBvsC,EAAO,SAAU1N,MACtC81C,GAAY,UAAWpoC,MACvBooC,GAAY,cAAepoC,MAC3BooC,GAAY,gBAAiBpoC,MAC7BooC,GAAY,cAAepoC,MAC3BooC,GAAY,aAAcpoC,MAC1Bue,GAAOve,MACPhN,GAAQgN,MACRlN,GAAKkN,EAAO,WACZnD,GAAKmD,IAKZ,SAASusC,GAAqBvsC,EAAkB3M,EAAkB0zC,SAC1D3mC,OAACA,EAADrJ,KAASA,EAAToJ,QAAeA,GAAWH,KAIhB,SAFAQ,GAAoB,UAAWL,EAASC,IAE9B2mC,IAAa53B,GAAWpY,GAAO,OAGjD+Z,EAwBV,SACE9Q,GACA0P,QAACA,GAAU,EAAXonB,SAAkBA,UAEZ0V,EAAc1V,EAASv1C,QAAO,CAACkrD,EAAwBp5C,WACrDq5C,EAAiB1sC,EAAMskC,kBAAkBjxC,MAC3Cq5C,EAAgB,OACZtoC,EAAYsoC,EAAe/7B,IAAI,QAC/BtP,EAAQrB,EAAMsB,QAAQjO,EAAS,CAACoM,KAAM,UAGxC4B,GAASsL,GAAoBvI,KAC/BqoC,EAAWprC,IAAS,UAGjBorC,IACN,IAEGvhB,EAASjjC,EAAKukD,MAChBthB,EAAOzmC,OAAS,EAAG,OACf4D,EAAKqnB,EAAU,KAAO,YACrBwb,EAAOhpC,KAAImf,GAAS0P,GAAsB1P,EAAOqO,KAAU9lB,KAAM,IAAGvB,aA7C9DskD,CAA0B3sC,EAAO,CAAC0P,SAAS,EAAMonB,SAAUlgC,QACpEka,QACK,EACJzd,GAAU,EAGRyd,KAAAA,EAAM7vB,MAAO,SACXoJ,QAAM08C,YAKVA,EAAW,EAAE1zC,GAAU0zC,GAAY,GAG5C,SAASuF,GAAkBv1C,EAAes1C,UACjCzvC,GAAgBrb,QAAO,CAAC+jB,EAAG9b,KAC3B2iD,GAAcvgD,IAAIpC,SAAwB7B,IAAfoP,EAAKvN,IAAwC,WAAjB6iD,EAAO7iD,KACjE8b,EAAE9b,GAAQmW,GAAiB5I,EAAKvN,KAE3B8b,IACN,ICnEE,SAASs7B,GAAQ5gC,SAChBI,OAACA,EAADD,QAASA,GAAWH,KAEVQ,GAAoB,UAAWL,EAASC,GAC3C,OACLV,EASV,SACEM,GACA0P,QAACA,GAAU,EAAXonB,SAAkBA,UAEZ0V,EAAc1V,EAASv1C,QAAO,CAACkrD,EAAwBp5C,WACrDq5C,EAAiB1sC,EAAMskC,kBAAkBjxC,MAC3Cq5C,EAAgB,OACZtoC,EAAYsoC,EAAe/7B,IAAI,QAC/BtP,EAAQrB,EAAMsB,QAAQjO,EAAS,CAACoM,KAAM,UAGxC4B,GAASsL,GAAoBvI,KAC/BqoC,EAAWprC,IAAS,UAGjBorC,IACN,IAEGvhB,EAASjjC,EAAKukD,MAChBthB,EAAOzmC,OAAS,EAAG,OACf4D,EAAKqnB,EAAU,KAAO,YACrBwb,EAAOhpC,KAAImf,GAAS0P,GAAsB1P,EAAOqO,KAAU9lB,KAAM,IAAGvB,aA9B5DskD,CAA0B3sC,EAAO,CAAC82B,SAAUnhC,QAEvD+J,QACK,CAACkhC,QAAS,CAAClhC,OAAAA,UAGf,GA6BF,SAASktC,GAAepjD,EAAcvI,WAC7B0G,IAAV1G,QACK,EAAEuI,GAAOmW,GAAiB1e,IC/CrC,MAAM4rD,GAAU,UAEVC,GAAsC,CAC1ClM,QAASL,GACiB,UAAjBA,EAAQj+C,MAAoBi+C,EAAQuM,QAG7CjzB,MAAO,CAAC7Z,EAAOugC,QAGTA,EAAQO,WACL,MAAM91C,KAAKu1C,EAAQO,OACtB91C,EAAEu0C,SAAWv/B,EAAMkhC,QAAQ2L,KAKjCpO,MAAO,CAACz+B,EAAOugC,EAAS9B,WAChB/0C,EAACA,EAADwC,EAAIA,GAAKq0C,EAAQsD,QAAQF,WACzBvR,EAAWpyB,EAAMjJ,QACnBoY,GAAWijB,UACbtsB,GpEoCI,gDoEpCgDssB,YAC7CqM,QAGHsO,EAAU,CACdn+C,KAAMoR,EAAMkhC,QAAQ2L,IACpBvqD,KAAM,OACN0qD,aAAa,EACbzU,KAAM,CAACxxC,KAAMiZ,EAAMkhC,QAAQ,UAC3BhwB,OAAQ,CACN8a,OAAQ,CACN35B,KAAM,CAACpR,MAAO,eACdyR,YAAa,CAACzR,MAAO,KACrBqR,OAAQ,CAACrR,MAAO,eAChBgsD,UAAW,CAAChsD,OAAO,MAChB+R,GAAQgN,EAAO,CAACsnC,cAAc,MAGrCxiB,UAAW,CACT,CACExiC,KAAM,UACNoH,EAAG,CAAC+V,KAAM/V,IAAMwC,EAAI,qBAAuB,KAC3CA,EAAG,CAACuT,KAAMvT,IAAMxC,EAAI,qBAAuB,KAC3CiC,KAAM,CAACqU,EAAMgmC,iBAAiB,SAAUhmC,EAAMgmC,iBAAiB,kBAKjElhD,EAAQ,EACRooD,GAAS,SACbzO,EAAMx5C,SAAQ,CAAC8R,EAAM/R,WACb4J,EAAOmI,EAAKnI,MAAQ,GACtBA,IAASoR,EAAMwgC,UAAUzpC,KAAK,GAAGnI,KACnC9J,EAAQE,EACC4J,EAAK7J,QAAQ8nD,KAAY,IAClCK,GAAS,MAIRA,GACHzO,EAAMt2C,OAAOrD,EAAQ,EAAG,EAAGioD,GAGtBtO,IC5DL0O,GAA4C,CAChDvM,QAASL,GAEY,UAAjBA,EAAQj+C,MACY,WAApBi+C,EAAQ78C,SACR68C,EAAQ9U,MACS,WAAjB8U,EAAQ9U,OACPD,GAAgB+U,EAAQ9U,MAI7B5R,MAAO,CAAC7Z,EAAOugC,EAASpE,IAAWiR,GAA0B7M,EAASpE,GAEtEyI,gBAAiB,CAAC5kC,EAAOugC,EAASzU,WAC1Bl9B,EAAO2xC,EAAQ3xC,KACfk1C,EAAOvD,EAAQsD,QACfpY,EAAO8U,EAAQ9U,KACfM,EAAOwU,EAAQxU,MAAQwU,EAAQxU,KAAK,GACpCx+B,EAAQu/C,GAAQlM,QAAQL,GAAW,2CAA6C,eAEtFuD,EAAKJ,MAAMz+C,SAAQ,CAACqV,EAAGtV,WACfqoD,EAAS7gD,EAAS,GAAEoC,KAAQ0L,EAAE+G,SAClByqB,EAAQhkB,QAAO9c,GAAKA,EAAE4D,OAASy+C,IAElC5oD,QACbqnC,EAAQzE,QAAQ,CACdz4B,KAAMy+C,KACFthB,EAAO,CAACA,KAAMiU,GAAajU,EAAK/mC,KAAO,CAAC/D,MAAO,MACnDgqC,GAAIsV,EAAQO,OACR,CACE,CACEA,OAAQP,EAAQO,OAChB9U,OAAS,+CAA8Cz+B,KAASG,cAAY4M,EAAE+G,mBAGlF,GACJoqB,KAAMA,EAAKnxB,EAAE+G,QAAUoqB,EAAKnxB,EAAEjH,UAAYo4B,OAKzCK,GAGTA,QAAS,CAAC9rB,EAAOugC,EAASzU,WAClBl9B,EAAO2xC,EAAQ3xC,KACfk1C,EAAOvD,EAAQsD,QACfnkC,EAASosB,EAAQhkB,QAAO9c,GAAKA,EAAE4D,OAASA,EAAO8xC,KAAO,GACtDxV,EAASt8B,EAAO40C,GAChBn4C,EAASy4C,EAAKJ,MAAMxhD,KAAIoY,GAAK9N,EAAS,GAAEoC,KAAQ0L,EAAE+G,WAClD/H,EAAQjO,EAAOnJ,KAAIsJ,GAAM,GAAEA,eAAc5B,KAAK,eAEhDyB,EAAO5G,SACTib,EAAOssB,OAAU,GAAE1yB,gBAAoB4xB,eAAoB7/B,EAAOzB,KAAK,yBAGlE8V,EAAOze,aACPye,EAAOurB,GAEPa,ICjEEwhB,GAAS,UAEhBniB,GAAqC,CACzCyV,QAASL,GACiB,UAAjBA,EAAQj+C,QAAsBi+C,EAAQpV,OAG/CW,QAAS,CAAC9rB,EAAOugC,EAASzU,IACjBA,EAAQxrB,OAAO,CACpB1R,KAAM2xC,EAAQ3xC,KAAO0+C,GACrBrsD,OAAO,EACPgqC,GAAI,CAAC,CAAC6V,OAAQP,EAAQO,OAAQ9U,OAAQuU,EAAQpV,WAIlDsV,WAAY,CAACzgC,EAAOugC,WACZgN,EAAMhN,EAAQ3xC,KAAO8xC,GACrBhhC,EAAS6gC,EAAQ3xC,KAAO0+C,SAG3B,GAAE5tC,cAAmB6tC,OACD,WAApBhN,EAAQ78C,QAAwB,GAAEgc,oBAA4B,GAAEA,qBAA0B+E,GAASzE,SACnG,GAAEN,OAAY6tC,aChBfniB,GAA2B,CAC/BwV,QAASL,QACkB54C,IAAlB44C,EAAQnV,QAAyC,IAAlBmV,EAAQnV,MAGhDvR,MAAO,CAAC7Z,EAAOugC,KACTA,EAAQnV,QACVmV,EAAQnV,MAAQphC,WAASu2C,EAAQnV,OAASwT,GAAc2B,EAAQnV,MAAO,QAAUmV,EAAQnV,QAI7FwZ,gBAAiB,CAAC5kC,EAAOugC,EAASzU,QAC5BqhB,GAAcvM,QAAQL,OACnB,MAAMuD,KAAQvD,EAAQsD,QAAQH,MAAO,OAClC8J,EAAM1hB,EAAQ2hB,WAAUzO,GAAKA,EAAEpwC,OAASpC,EAAS,GAAE+zC,EAAQ3xC,QAAQk1C,EAAKziC,YACjE,IAATmsC,GACF1hB,EAAQ0hB,GAAKviB,GAAGppC,KAAK,CAACi/C,OAAQP,EAAQnV,MAAOY,OAAQ,gBAKpDF,GAGTA,QAAS,CAAC9rB,EAAOugC,EAASzU,cACf4hB,EAASF,EAAaxhB,IAChB,IAATwhB,GAAc1hB,EAAQ0hB,GAAKviB,IAC7Ba,EAAQ0hB,GAAKviB,GAAGppC,KAAK,CAACi/C,OAAQP,EAAQnV,MAAOY,OAAAA,OAK5B,aAAjBuU,EAAQj+C,SACL,MAAMwhD,KAAQvD,EAAQsD,QAAQH,MAAO,OAClCiK,EAAO7hB,EAAQ2hB,WAAUzO,GAAKA,EAAEpwC,OAASk1C,EAAKhY,QAAQ+Z,YAC5D6H,EAASC,EAAM,WAED,IAAVA,EAAa,CAEfD,EADa5hB,EAAQ2hB,WAAUzO,GAAKA,EAAEpwC,OAASk1C,EAAKhY,QAAQ/kC,OAC7C,aAGd,KACD6mD,EAAO9hB,EAAQ2hB,WAAUzO,GAAKA,EAAEpwC,OAAS2xC,EAAQ3xC,KAAO8xC,KAC5DgN,EAASE,EAAM,QAEXziB,GAAOyV,QAAQL,KACjBqN,EAAO9hB,EAAQ2hB,WAAUzO,GAAKA,EAAEpwC,OAAS2xC,EAAQ3xC,KAAO0+C,KACxDI,EAASE,EAAM,iBAIZ9hB,IC/CL+hB,GAA6C,CACjDjN,QAASL,UACDh+B,EAA2B,WAApBg+B,EAAQ78C,SAAwB68C,EAAQ9U,MAAQD,GAAgB+U,EAAQ9U,MAC/EqiB,EAA2C,IAAjCvN,EAAQsD,QAAQH,MAAMj/C,QAAgB87C,EAAQsD,QAAQH,MAAM,GAAGriC,QAAU0pB,UACrFxoB,IAASurC,GACXhoC,GxE0DJ,mGwEvDSvD,GAAQurC,GAGjBj0B,MAAO,CAAC7Z,EAAOugC,EAASpE,WAEhB4R,EAAU1kD,EAAU8yC,MAC1B4R,EAAQ3R,OAASpyC,WAAS+jD,EAAQ3R,QAC9B,CAAC95C,KAAMyrD,EAAQ3R,OAAQjR,OAAQoV,EAAQpV,QACvC,IAAI4iB,EAAQ3R,OAAQjR,OAAQoV,EAAQpV,QACxCiiB,GAA0B7M,EAASwN,GAE/BnzC,WAASuhC,EAAOC,UAAYD,EAAOC,OAAOnR,IAAMkR,EAAOC,OAAOhR,OAAQ,OAClE4iB,EAAe,gEAChB,MAAMxI,KAAOjF,EAAQO,OACxB0E,EAAI19B,OAASzd,QAAMm7C,EAAI19B,QAAU,IAC5B09B,EAAI19B,OAAOvd,SAASyjD,IACvBxI,EAAI19B,OAAOjmB,KAAKmsD,SAKhBxI,EAAM9Z,GAAsB6U,EAAQ9U,MAAQ8U,EAAQ9U,KAAK7T,OAAS,QAClEsnB,EAAmBl1C,WAASw7C,GAAO5G,GAAc4G,EAAK,QAAUn7C,QAAMm7C,GAC5EjF,EAAQ9U,KAAO,CAAC7T,OAAQ,CAACorB,MAAO9D,KAGlC0F,gBAAiB,CAAC5kC,EAAOugC,EAASzU,WAC1BmiB,EAAU1N,EAAQ3xC,KAClBswC,EAASxT,GAAsB6U,EAAQ9U,OAAU8U,EAAQ9U,KAAK7T,OAC9Ds2B,EAAYt/C,GAAkB5D,UAC5BmjD,EAAK9kD,EAAU2B,UACrBmjD,EAAG5O,SAAW3wC,EACPu/C,OAGJ,MAAMrK,KAAQvD,EAAQsD,QAAQH,MAAO,KACnCI,EAAKU,UAAW,eACf/2C,EAAU,GAAEjB,EAAQs3C,EAAKziC,gBACzB+sC,EAAU,GAAEH,KAAWxgD,OAGJ,IAFPq+B,EAAQhkB,QAAO9c,GAAKA,EAAE4D,OAASw/C,IAEnC3pD,OAAc,OACpBq8C,EAAS5B,EAAO8D,MACnB9gD,IAAIgsD,EAAU,GAAEzgD,cAChB6S,OAAO4+B,EAAO8D,MAAM9gD,IAAIgsD,EAAU,GAAEzgD,cACpC6S,OAAO4+B,EAAO8D,MAAM9gD,IAAIgsD,EAAU,GAAEzgD,eAEvCq+B,EAAQzE,QAAQ,CACdz4B,KAAMw/C,KACD7N,EAAQxU,KAAuB,GAAhB,CAAC9qC,MAAO,MAC5BgqC,GAAI,EAED6V,OAAAA,EAAQ9U,OAAQ,sDAAuD4a,OAAO,GAC/E,CAAC9F,OAAQ5B,EAAO8D,MAAOhX,OAAS,kCAAiCoiB,IAAUxH,OAAO,cAMnF9a,GAGTA,QAAS,CAAC9rB,EAAOugC,EAASzU,WAClBl9B,EAAO2xC,EAAQ3xC,KACfk1C,EAAOvD,EAAQsD,QACfwK,EAAQviB,EAAQ99B,MAAKhD,GAAKA,EAAE4D,OAASA,EAAO8xC,KAC5CxV,EAASt8B,EAAO40C,GAChBn4C,EAASy4C,EAAKJ,MAAM57B,QAAOxN,GAAKA,EAAEkqC,YAAWtiD,KAAIoY,GAAK9N,EAAS,GAAEoC,KAAQpC,EAAQ8N,EAAE+G,mBAEnF2qB,EAAU,GADF3gC,EAAOnJ,KAAIsJ,GAAM,GAAEA,eAAc5B,KAAK,sBACdshC,eAAoB7/B,EAAOzB,KAAK,iBAElE22C,EAAQO,QAAUz1C,EAAO5G,OAAS,EACpC4pD,EAAMpjB,GAAGppC,KAAK,CACZi/C,OAAQz1C,EAAOnJ,KAAIwd,KAAYA,OAAAA,MAC/BssB,OAAAA,IAEO3gC,EAAO5G,OAAS,IACzB4pD,EAAMriB,OAASA,SACRqiB,EAAMptD,aACNotD,EAAMpjB,UAGTE,EAASW,EAAQ99B,MAAKhD,GAAKA,EAAE4D,OAASA,EAAO0+C,KAC7CxM,EAASpV,GAAsB6U,EAAQ9U,OAAS8U,EAAQ9U,KAAK7T,cAC/DuT,IACGoV,EAAQO,OACR3V,EAAOF,GAAGppC,KAAK,IAAIspC,EAAOF,GAAG,GAAI6V,OAAAA,IADjB3V,EAAOF,GAAG,GAAG6V,OAASA,GAItChV,ICrGX,MAAMwiB,GAAS,oBACTC,GAAQ,mBAERjwB,GAA2C,CAC/CsiB,QAASL,GACiB,aAAjBA,EAAQj+C,MAAuBi+C,EAAQjiB,UAGhDwN,QAAS,CAAC9rB,EAAOugC,EAASzU,WAClBl9B,EAAO2xC,EAAQ3xC,KACfw2C,EAAYoJ,GAAe5N,QAAQL,GACnCllC,EAASzM,EAAO0/C,IAChB5kD,EAACA,EAADwC,EAAIA,GAAKq0C,EAAQsD,QAAQF,eAC3B7C,EAASlC,GAAc2B,EAAQjiB,UAAW,gBAEzC8mB,IACHtE,EAASA,EAAO5+C,KAAIP,IAAOA,EAAEw9C,QAAQ,GAAGI,SAAW3wC,EAAO6/C,GAAiB9sD,MAG7EmqC,EAAQjqC,KACN,CACE+M,KAAMyM,EACNpa,MAAO,GACPgqC,GAAI,CACF,CACE6V,OAAQA,EAAO5+C,KAAIP,GAAKA,EAAEw9C,QAAQ,KAClCnT,OACE,gCACOrkC,IAAN+B,EAAmB,eAAc07C,EAAYzoC,GAAOqD,EAAO1Q,IAAM,SAAQ5F,EAAEoiC,QAAQ+Z,YAAc,UAC3Fl+C,IAANuE,EAAmB,eAAck5C,EAAYzoC,GAAOqD,EAAOzQ,IAAM,SAAQrD,EAAE4/B,QAAQ+Z,YAAc,IAClG,OAIR,CACEj3C,KAAMA,EAAO2/C,GACbttD,MAAO,GACPgqC,GAAI,CACF,CACE6V,OAAQA,EACR9U,OAAS,OAAM3wB,qBAA0BA,0BAMvC1T,IAAN+B,GACFglD,GAAQ1uC,EAAOugC,EAAS72C,EAAG,QAASoiC,QAG5BnkC,IAANuE,GACFwiD,GAAQ1uC,EAAOugC,EAASr0C,EAAG,SAAU4/B,GAGhCA,IAMX,SAAS4iB,GACP1uC,EACAugC,EACAuD,EACAn4C,EACAmgC,SAEMl9B,EAAO2xC,EAAQ3xC,KACfyM,EAASzM,EAAO0/C,GAChBK,EAAQ//C,EAAO2/C,GACfl7C,EAAUywC,EAAKzwC,QACf+xC,EAAYoJ,GAAe5N,QAAQL,GACnC7gC,EAASosB,EAAQhkB,QAAO9c,GAAKA,EAAE4D,OAASk1C,EAAKhY,QAAQsZ,EAAY,OAAS,YAAW,GACrFwJ,EAAS5uC,EAAMgmC,iBAAiBr6C,GAAM+T,OACtCmvC,EAAY7uC,EAAMskC,kBAAkBjxC,GACpC+Q,EAAYyqC,EAAUl+B,IAAI,QAC1Bm+B,EAAWD,EAAUl+B,IAAI,WAEzB9V,EAAU,GAAEQ,YAAiBhI,IAkB7B24B,EAAU,GAhBDoZ,EAEG,QAAdhhC,EACA,SACc,WAAdA,EACA,YACc,QAAdA,EACA,SACA,YAPA,eAeuBvJ,MAjBX,GAFFuqC,EAAiB/xC,IAAY/D,GAAKw/C,EAAW,GAAK,IAAOA,EAAW,IAAM,GAA9D,KAEDH,KAASt7C,OAAa+xC,EAAa,GAAEwJ,IAAY,QAAO/zC,SAUpEuqC,EAEK,QAAdhhC,EACC,KAAIyqC,EAAUl+B,IAAI,aAAe,IACpB,WAAdvM,EACC,KAAIyqC,EAAUl+B,IAAI,aAAe,IAClC,GALA,MAQJjR,EAAOurB,GAAGppC,KAAK,CACbi/C,OAAQ,CAACphC,OAAQivC,GACjB3iB,OAAQoZ,EAAYpZ,EAAU,cAAaA,SAAc4iB,OCnG7D,MAAMN,GAAS,eACTC,GAAQ,cAERhjB,GAAsC,CAC1CqV,QAASL,GACiB,aAAjBA,EAAQj+C,MAAuBi+C,EAAQhV,KAGhDO,QAAS,CAAC9rB,EAAOugC,EAASzU,WAClBl9B,EAAO2xC,EAAQ3xC,KACfw2C,EAAYoJ,GAAe5N,QAAQL,GACnCoO,EAAQ//C,EAAO2/C,IACf7kD,EAACA,EAADwC,EAAIA,GAAKq0C,EAAQsD,QAAQF,WACzBoL,EAAKrhD,cAAYsS,EAAMiR,UAAU3hB,KACjC0/C,EAAKthD,cAAYsS,EAAMiR,UAAU1hB,SACnCuxC,EAASlC,GAAc2B,EAAQhV,KAAM,gBAEpC6Z,IACHtE,EAASA,EAAO5+C,KAAIP,IAAOA,EAAE49C,SAAW3wC,EAAO6/C,GAAiB9sD,MAGlEmqC,EAAQjqC,KACN,CACE+M,KAAMA,EAAO0/C,GACbrjB,GAAI,CACF,CACE6V,OAAQA,EACR9U,OAASoZ,EAEL,IACA,CAAC2J,EAAM,aAAYA,cAAiB,GAAIC,EAAM,aAAYA,cAAiB,IACxElnC,QAAOrI,KAAUA,IACjB7V,KAAK,MACR,IALC,8BASX,CACEgF,KAAM+/C,EACN1jB,GAAI,CACF,CACE6V,OAAQA,EACR8F,OAAO,EACP5a,OAAQ,+DAMNrkC,IAAN+B,GACFglD,GAAQ1uC,EAAOugC,EAAS72C,EAAG,QAASoiC,QAG5BnkC,IAANuE,GACFwiD,GAAQ1uC,EAAOugC,EAASr0C,EAAG,SAAU4/B,GAGhCA,IAMX,SAAS4iB,GACP1uC,EACAugC,EACAuD,EACAn4C,EACAmgC,SAEMl9B,EAAO2xC,EAAQ3xC,KACfyE,EAAUywC,EAAKzwC,QACf+xC,EAAYoJ,GAAe5N,QAAQL,GACnC7gC,EAASosB,EAAQhkB,QAAO9c,GAAKA,EAAE4D,OAASk1C,EAAKhY,QAAQsZ,EAAY,OAAS,YAAW,GACrFwJ,EAAS5uC,EAAMgmC,iBAAiBr6C,GAAM+T,OACtCmvC,EAAY7uC,EAAMskC,kBAAkBjxC,GACpC+Q,EAAYyqC,EAAUl+B,IAAI,QAC1BhD,EAAOy3B,EAAYzoC,GAAOqD,EAAO3M,GAAWqM,EAAO9Q,KACnD+/C,EAAQ//C,EAAO2/C,GAkBfviB,EAAU,GAhBAoZ,EAEE,QAAdhhC,EACA,UACc,WAAdA,EACA,aACc,QAAdA,EACA,UACA,aAPA,gBAewBuJ,MAjBZ,GAAE/e,IAAO0/C,MAAUj7C,QAiBas7C,IAPnCvJ,EAEK,QAAdhhC,EACC,KAAIyqC,EAAUl+B,IAAI,aAAe,IACpB,WAAdvM,EACC,KAAIyqC,EAAUl+B,IAAI,aAAe,IAClC,GALA,MAQJjR,EAAOurB,GAAGppC,KAAK,CACbi/C,OAAQ,CAACphC,OAAQivC,GACjB3iB,OAAQoZ,EAAYpZ,EAAU,cAAaA,SAAc4iB,OC/EtD,MAAM7N,GAAQ,SACRL,GAAQ,SACRG,GAAS,UAETkE,GAAuB,qBAiCvBpE,GAA0C,CACrDnpC,GACA6zB,GACAwY,GACA1Y,MAIAwZ,GACAsK,GAEA7jB,GACA9M,GACAiN,GACAuhB,IAaK,SAASroC,GAASzE,GAAc2iB,OAACA,GAAU,CAACA,QAAQ,QACrD/zB,EAAO+zB,EAASj1B,cAAYsS,EAAMpR,MAAQoR,EAAMpR,WAC9CsgD,EAZR,SAAuBlvC,OACjBld,EAASkd,EAAMld,YACZA,IACDqsD,GAAarsD,IACjBA,EAASA,EAAOA,cAGXA,EAKYssD,CAAcpvC,MAC7BkvC,EAAY,OACRz7C,MAACA,GAASy7C,MACX,MAAM77C,KAAWK,GAChBD,EAAMJ,KACRzE,GAAS,eAAcyE,gBAAsB3F,cAAYwhD,EAAW5tC,QAAQjO,gBAI3EzE,EAGF,SAASygD,GAAoBrvC,UAC3B1T,EAAK0T,EAAMwgC,UAAU7R,WAAa,IAAIptC,QAAO,CAAC+tD,EAAY/O,IACxD+O,GAAc/O,EAAQsD,QAAQH,MAAMl5C,MAAKs5C,GAAQA,EAAKziC,QAAU0pB,OACtE,GAKE,SAASqiB,GAA0B7M,EAA6BpE,IACjEnyC,WAASmyC,EAAOC,SAAYD,EAAOC,OAAOnR,WAAWsV,EAAQO,QAC7D92C,WAASmyC,EAAOC,SAAYD,EAAOC,OAAOhR,cAAcmV,EAAQnV,OAChEphC,WAASmyC,EAAOC,SAAYD,EAAOC,OAAOjR,eAAeoV,EAAQpV,OCvHvE,MAAMokB,GAAU,UACVC,GAAU,UACVC,GAAW,WACXC,GAAa,aACbC,GAAkB,kBAClBC,GAAmB,mBACnBC,GAAiB,iBACjBC,GAAwB,wBACxBC,GAAoB,oBACpBC,GAAmB,mBACnBC,GAAmB,mBACnBC,GAAkB,kBACxB,SAASC,GAAQ7tD,QACVA,KAAOA,EAkFd,IAAI8tD,GAAWnsD,GAAQa,GAAOL,GAAQ4rD,GA/EtCF,GAAQvvD,UAAU0vD,MAAQ,SAAUC,OAC9B5pD,EAAG3B,EAAGg6C,KACNuR,EAAQ9uD,MAAO,OAAO,MAErBkF,EAKP,SAAkBS,UACRA,EAAK9E,WACNqtD,UACIvoD,EAAKopD,cAETZ,QACAG,SACI,CAAC3oD,EAAKkiD,KAAMliD,EAAKmiD,YAErBsG,SACI,CAACzoD,EAAKqpD,QAAQnwC,OAAOlZ,EAAK/F,gBAE9ByuD,SACI,CAAC1oD,EAAK0pB,KAAM1pB,EAAKspD,WAAYtpD,EAAKupD,gBAEtCX,SACI,CAAC5oD,EAAKwpD,OAAQxpD,EAAK8D,eAEvB+kD,UACI7oD,EAAKypD,gBAETpB,SACI,CAACroD,EAAKlC,IAAKkC,EAAKnG,YAEpBivD,SACI,CAAC9oD,EAAK0pD,eAEVpB,QACAF,QACAD,iBAEI,IApCFtM,CAASxhD,MAAOuD,EAAI,EAAGg6C,EAAIr4C,EAAElC,OAAQO,EAAIg6C,IAAKh6C,KACjD2B,EAAE3B,GAAGsrD,MAAMC,GAAU,OAAO,IAoFpCH,GAAY,IATc,GAUO,UACjCA,GAVe,GAUO,QACtBA,GAVsB,GAUO,aAC7BA,GAVmB,GAUO,UAC1BA,GAVuB,GAUO,OAC9BA,GAV0B,GAUO,UACjCA,GAVsB,GAUO,aAC7BA,GAVyB,GAUO,SAChCA,GAV6B,GAUO,oBACpC,IAIIW,GAAmB,aAQnBC,GAAyB,sBAMzBC,GAAuB,6BACvBC,GAA4B,wCAC5BC,GAA4B,iDAE5BhT,GAAU,UACViT,GAAW,YAEXC,GAA+B,IAAIrtD,OAAO,wzJAE9CstD,GAA8B,IAAIttD,OAAO,quLAKzC,SAASutD,GAAOhyC,EAAWiyC,OAEpBjyC,QACG,IAAI5a,MAAM,WAAa6sD,GAIjC,SAASC,GAAeC,UACfA,GAAM,IAAQA,GAAM,GAG7B,SAASC,GAAWD,SACX,yBAAyB3sD,QAAQ2sD,IAAO,EAGjD,SAASE,GAAaF,SACb,WAAW3sD,QAAQ2sD,IAAO,EAInC,SAASG,GAAaH,UACN,KAAPA,GAAsB,IAAPA,GAAsB,KAAPA,GAAsB,KAAPA,GAAsB,MAAPA,GAAeA,GAAM,MAAU,CAAC,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,MAAQ,OAAQ3sD,QAAQ2sD,IAAO,EAI5P,SAASI,GAAiBJ,UACV,KAAPA,GAAsB,KAAPA,GAAsB,OAAPA,GAAwB,OAAPA,EAIxD,SAASK,GAAkBL,UACX,KAAPA,GAAsB,KAAPA,GACtBA,GAAM,IAAQA,GAAM,IACpBA,GAAM,IAAQA,GAAM,KACb,KAAPA,GACAA,GAAM,KAAQL,GAA6BvgC,KAAKpiB,OAAOsjD,aAAaN,IAGtE,SAASO,GAAiBP,UACV,KAAPA,GAAsB,KAAPA,GACtBA,GAAM,IAAQA,GAAM,IACpBA,GAAM,IAAQA,GAAM,KACpBA,GAAM,IAAQA,GAAM,IACb,KAAPA,GACAA,GAAM,KAAQJ,GAA4BxgC,KAAKpiB,OAAOsjD,aAAaN,IAIrE,MAAMQ,GAAW,IACT,KACA,KACA,MACC,MACA,MACA,MACA,MACA,OACC,OACA,OACA,OACA,OACA,OACA,QACC,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACC,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACC,UACA,UACA,UACA,UACA,WACC,WACA,WACA,YACC,YACA,aACC,aACA,GAGhB,SAASC,UACArtD,GAAQL,IAAQ,OACfitD,EAAKztD,GAAOiG,WAAWpF,QAEzB+sD,GAAaH,KAAOI,GAAiBJ,WACrC5sD,IAOR,SAASstD,GAAc3kD,OACjBzI,EACAqtD,EACAX,EACAY,EAAO,MACXD,EAAiB,MAAX5kD,EAAiB,EAAI,EAEtBzI,EAAI,EAAGA,EAAIqtD,IAAOrtD,EACjBF,GAAQL,IAAUktD,GAAW1tD,GAAOa,MACtC4sD,EAAKztD,GAAOa,MACZwtD,EAAc,GAAPA,EAAY,mBAAmBvtD,QAAQ2sD,EAAGxrC,gBAEjDqsC,GAAW,GAAIvB,GAAwB7S,WAIpCzvC,OAAOsjD,aAAaM,GAG7B,SAASE,SACHd,EAAIY,EAAMG,EAAKC,MAEnBJ,EAAO,EAEI,OAHXZ,EAAKztD,GAAOa,MAIVytD,GAAW,GAAIvB,GAAwB7S,IAGlCr5C,GAAQL,IAGRktD,GAFLD,EAAKztD,GAAOa,QAMZwtD,EAAc,GAAPA,EAAY,mBAAmBvtD,QAAQ2sD,EAAGxrC,sBAG/CosC,EAAO,SAAmB,MAAPZ,IACrBa,GAAW,GAAIvB,GAAwB7S,IAIrCmU,GAAQ,MACH5jD,OAAOsjD,aAAaM,IAG7BG,EAA+B,OAAxBH,EAAO,OAAW,IACzBI,EAAgC,OAAzBJ,EAAO,MAAU,MACjB5jD,OAAOsjD,aAAaS,EAAKC,IAGlC,SAASC,SACHjB,EAAIjjD,MACRijD,EAAKztD,GAAOiG,WAAWpF,MACvB2J,EAAKC,OAAOsjD,aAAaN,GAEd,KAAPA,IAC+B,MAA7BztD,GAAOiG,WAAWpF,KACpBytD,GAAW,GAAIvB,GAAwB7S,MAGvCr5C,IACF4sD,EAAKU,GAAc,OAED,OAAPV,GAAgBK,GAAkBL,EAAGxnD,WAAW,KACzDqoD,GAAW,GAAIvB,GAAwB7S,IAGzC1vC,EAAKijD,GAGA5sD,GAAQL,IAGRwtD,GAFLP,EAAKztD,GAAOiG,WAAWpF,QAMrBA,GACF2J,GAAMC,OAAOsjD,aAAaN,GAEf,KAAPA,IACFjjD,EAAKA,EAAGrB,OAAO,EAAGqB,EAAGhK,OAAS,GAEG,MAA7BR,GAAOiG,WAAWpF,KACpBytD,GAAW,GAAIvB,GAAwB7S,MAGvCr5C,IACF4sD,EAAKU,GAAc,OAED,OAAPV,GAAgBO,GAAiBP,EAAGxnD,WAAW,KACxDqoD,GAAW,GAAIvB,GAAwB7S,IAGzC1vC,GAAMijD,UAIHjjD,EA0BT,SAASmkD,SACHnhC,EAAOhjB,SACXgjB,EAAQ3sB,GAkBD,CACLxC,KAdgB,KAHlBmM,EAAkC,KAA7BxK,GAAOiG,WAAWpF,IAAkB6tD,KA3B3C,eACMlhC,EAAOigC,MACXjgC,EAAQ3sB,KAEDA,GAAQL,IAAQ,IAGV,MAFXitD,EAAKztD,GAAOiG,WAAWpF,YAIrBA,GAAQ2sB,EACDkhC,SAGLV,GAAiBP,WACjB5sD,UAMCb,GAAOlC,MAAM0vB,EAAO3sB,IAOuC+tD,IAG3DpuD,OA/Ra,EAiSTytD,GAAS9oD,eAAeqF,GAhSlB,EAmSC,SAAPA,EAlSU,EAoSH,SAAPA,GAAwB,UAAPA,EAxSJ,EAEJ,EA8SlBxN,MAAOwN,EACPgjB,MAAOA,EACPvJ,IAAKpjB,IAKT,SAASguD,SAGHC,EAEAC,EACAC,EACAC,EANAzhC,EAAQ3sB,GACRwtD,EAAOruD,GAAOiG,WAAWpF,IAEzBquD,EAAMlvD,GAAOa,WAKTwtD,QAED,QAEA,QAEA,QAEA,QAEA,QAEA,SAEA,SAEA,QAEA,QAEA,QAEA,QAEA,YAEDxtD,GACK,CACLxC,KAtVc,EAuVdrB,MAAOyN,OAAOsjD,aAAaM,GAC3B7gC,MAAOA,EACPvJ,IAAKpjB,eAMO,MAFdiuD,EAAQ9uD,GAAOiG,WAAWpF,GAAQ,WAGxBwtD,QACD,QAEA,QAEA,QAEA,QAEA,QAEA,QAEA,SAEA,QAEA,QAEA,UAEHxtD,IAAS,EACF,CACLxC,KAvXQ,EAwXRrB,MAAOyN,OAAOsjD,aAAaM,GAAQ5jD,OAAOsjD,aAAae,GACvDthC,MAAOA,EACPvJ,IAAKpjB,SAGJ,QAEA,UAEHA,IAAS,EAEwB,KAA7Bb,GAAOiG,WAAWpF,OAClBA,GAGG,CACLxC,KAxYQ,EAyYRrB,MAAOgD,GAAOlC,MAAM0vB,EAAO3sB,IAC3B2sB,MAAOA,EACPvJ,IAAKpjB,WAUL,UAFZouD,EAAMjvD,GAAOmJ,OAAOtI,GAAO,IAIlB,CACLxC,KAxZgB,EAyZhBrB,MAAOiyD,EACPzhC,MAAOA,EACPvJ,IALFpjB,IAAS,GAYC,SAFZmuD,EAAMC,EAAI9lD,OAAO,EAAG,KAES,QAAR6lD,GAAyB,QAARA,EAE7B,CACL3wD,KAragB,EAsahBrB,MAAOgyD,EACPxhC,MAAOA,EACPvJ,IALFpjB,IAAS,GAYPquD,KAFJH,EAAMC,EAAI7lD,OAAO,EAAG,IAEJ,IAAM,SAASrI,QAAQouD,IAAQ,GAAa,OAARH,EAE3C,CACL1wD,KAlbgB,EAmbhBrB,MAAO+xD,EACPvhC,MAAOA,EACPvJ,IALFpjB,IAAS,IASC,OAARkuD,GACFT,GAAW,GAAIvB,GAAwB7S,IAIrC,eAAep5C,QAAQouD,IAAQ,EAE1B,CACL7wD,KAjcgB,EAkchBrB,MAAOkyD,EACP1hC,MAAOA,EACPvJ,MALApjB,SASJytD,GAAW,GAAIvB,GAAwB7S,KAuDzC,SAASiV,SACHC,EAAQ5hC,EAAOigC,KAEnBH,GAAOE,IADPC,EAAKztD,GAAOa,KACaoF,WAAW,KAAc,MAAPwnD,EAAY,sEACvDjgC,EAAQ3sB,GACRuuD,EAAS,GAEE,MAAP3B,EAAY,IACd2B,EAASpvD,GAAOa,MAChB4sD,EAAKztD,GAAOa,IAGG,MAAXuuD,EAAgB,IACP,MAAP3B,GAAqB,MAAPA,UACd5sD,GAjEV,SAAwB2sB,OAClB4hC,EAAS,QAENvuD,GAAQL,IACRktD,GAAW1tD,GAAOa,MAIvBuuD,GAAUpvD,GAAOa,aAGG,IAAlBuuD,EAAO5uD,QACT8tD,GAAW,GAAIvB,GAAwB7S,IAGrC4T,GAAkB9tD,GAAOiG,WAAWpF,MACtCytD,GAAW,GAAIvB,GAAwB7S,IAGlC,CACL77C,KAjesB,EAketBrB,MAAOqyD,SAAS,KAAOD,EAAQ,IAC/B5hC,MAAOA,EACPvJ,IAAKpjB,IA2CMyuD,CAAe9hC,MAGpBmgC,GAAaF,UA1CvB,SAA0BjgC,OACpB4hC,EAAS,IAAMpvD,GAAOa,WAEnBA,GAAQL,IACRmtD,GAAa3tD,GAAOa,MAIzBuuD,GAAUpvD,GAAOa,aAGfitD,GAAkB9tD,GAAOiG,WAAWpF,MAAW2sD,GAAextD,GAAOiG,WAAWpF,OAClFytD,GAAW,GAAIvB,GAAwB7S,IAGlC,CACL77C,KAxfsB,EAyftBrB,MAAOqyD,SAASD,EAAQ,GACxBG,OAAO,EACP/hC,MAAOA,EACPvJ,IAAKpjB,IAuBM2uD,CAAiBhiC,GAItBigC,GAAMD,GAAeC,EAAGxnD,WAAW,KACrCqoD,GAAW,GAAIvB,GAAwB7S,SAIpCsT,GAAextD,GAAOiG,WAAWpF,MACtCuuD,GAAUpvD,GAAOa,MAGnB4sD,EAAKztD,GAAOa,OAGH,MAAP4sD,EAAY,KACd2B,GAAUpvD,GAAOa,MAEV2sD,GAAextD,GAAOiG,WAAWpF,MACtCuuD,GAAUpvD,GAAOa,MAGnB4sD,EAAKztD,GAAOa,OAGH,MAAP4sD,GAAqB,MAAPA,KAChB2B,GAAUpvD,GAAOa,MAGN,OAFX4sD,EAAKztD,GAAOa,MAEa,MAAP4sD,IAChB2B,GAAUpvD,GAAOa,OAGf2sD,GAAextD,GAAOiG,WAAWpF,UAC5B2sD,GAAextD,GAAOiG,WAAWpF,MACtCuuD,GAAUpvD,GAAOa,WAGnBytD,GAAW,GAAIvB,GAAwB7S,WAIvC4T,GAAkB9tD,GAAOiG,WAAWpF,MACtCytD,GAAW,GAAIvB,GAAwB7S,IAGlC,CACL77C,KAnkBsB,EAokBtBrB,MAAOiO,WAAWmkD,GAClB5hC,MAAOA,EACPvJ,IAAKpjB,IAuOT,SAAS4uD,SACHjiC,EAAOkiC,EAAMrtD,EAAOrF,SACxBovD,GAAY,KACZ8B,KACA1gC,EAAQ3sB,GACR6uD,EArFF,eACMjC,EAAI3nD,EAAK6pD,EAAaC,MAE1BtC,GAAc,OADdG,EAAKztD,GAAOa,KACO,sDACnBiF,EAAM9F,GAAOa,MACb8uD,GAAc,EACdC,GAAa,EAEN/uD,GAAQL,OAEbsF,GADA2nD,EAAKztD,GAAOa,MAGD,OAAP4sD,EAGEI,IAFJJ,EAAKztD,GAAOa,OAEYoF,WAAW,KACjCqoD,GAAW,GAAIrB,IAGjBnnD,GAAO2nD,OACF,GAAII,GAAiBJ,EAAGxnD,WAAW,IACxCqoD,GAAW,GAAIrB,SACV,GAAI0C,EACE,MAAPlC,IACFkC,GAAc,OAEX,IACM,MAAPlC,EAAY,CACdmC,GAAa,QAEG,MAAPnC,IACTkC,GAAc,UAKfC,GACHtB,GAAW,GAAIrB,IAKV,CACLjwD,MAFK8I,EAAIqD,OAAO,EAAGrD,EAAItF,OAAS,GAGhCqvD,QAAS/pD,GAyCJgqD,GACPztD,EAtCF,eACMorD,EAAI3nD,EAAKzD,MACbyD,EAAM,GACNzD,EAAQ,GAEDxB,GAAQL,IAGRwtD,IAFLP,EAAKztD,GAAOa,KAEaoF,WAAW,OAIlCpF,GAES,OAAP4sD,GAAe5sD,GAAQL,GACzB8tD,GAAW,GAAIvB,GAAwB7S,KAEvC73C,GAASorD,EACT3nD,GAAO2nD,UAIPprD,EAAM0tD,OAAO,cAAgB,GAC/BzB,GAAW,GAAItB,GAAsB3qD,GAGhC,CACLrF,MAAOqF,EACPwtD,QAAS/pD,GAUHkqD,GACRhzD,EA7HF,SAAoBizD,EAAS5tD,OACvB6tD,EAAMD,EAEN5tD,EAAMvB,QAAQ,MAAQ,IASxBovD,EAAMA,EAAIznD,QAAQ,0BAA0B,CAAC0nD,EAAIC,QAC3Cf,SAASe,EAAI,KAAO,cACf,IAGT9B,GAAW,GAAItB,OACdvkD,QAAQ,kCAAmC,cAK1C1I,OAAOmwD,GACX,MAAOxyD,GACP4wD,GAAW,GAAItB,eAOR,IAAIjtD,OAAOkwD,EAAS5tD,GAC3B,MAAOguD,UACA,MA2FDC,CAAWZ,EAAK1yD,MAAOqF,EAAMrF,OAC9B,CACL6yD,QAASH,EAAKG,QAAUxtD,EAAMwtD,QAC9B7yD,MAAOA,EACPuzD,MAAO,CACLN,QAASP,EAAK1yD,MACdqF,MAAOA,EAAMrF,OAEfwwB,MAAOA,EACPvJ,IAAKpjB,IAQT,SAAS2vD,QACPtC,KAEIrtD,IAASL,SACJ,CACLnC,KA90BS,EA+0BTmvB,MAAO3sB,GACPojB,IAAKpjB,UAIH4sD,EAAKztD,GAAOiG,WAAWpF,WAEzBitD,GAAkBL,GACbkB,KAIE,KAAPlB,GAAsB,KAAPA,GAAsB,KAAPA,EACzBoB,KAIE,KAAPpB,GAAsB,KAAPA,EAjRrB,eAEMgD,EACAjjC,EACAigC,EACAY,EAJAvoD,EAAM,GAKNypD,GAAQ,MAEZjC,GAAiB,OADjBmD,EAAQzwD,GAAOa,MACoB,MAAV4vD,EAAe,2CACxCjjC,EAAQ3sB,KACNA,GAEKA,GAAQL,IAAQ,KACrBitD,EAAKztD,GAAOa,SAED4vD,EAAO,CAChBA,EAAQ,SAEH,GAAW,OAAPhD,MACTA,EAAKztD,GAAOa,QAEAgtD,GAAiBJ,EAAGxnD,WAAW,IA+D9B,OAAPwnD,GAAiC,OAAlBztD,GAAOa,OACtBA,eA/DI4sD,OACD,QACA,IACmB,MAAlBztD,GAAOa,OACPA,GACFiF,GAAOyoD,MAEPzoD,GAAOqoD,GAAcV,aAKpB,IACH3nD,GAAO,eAGJ,IACHA,GAAO,eAGJ,IACHA,GAAO,eAGJ,IACHA,GAAO,eAGJ,IACHA,GAAO,eAGJ,IACHA,GAAO,mBAIH6nD,GAAaF,IAGF,KAFbY,EAAO,WAAWvtD,QAAQ2sD,MAGxB8B,GAAQ,GAGN1uD,GAAQL,IAAUmtD,GAAa3tD,GAAOa,OACxC0uD,GAAQ,EACRlB,EAAc,EAAPA,EAAW,WAAWvtD,QAAQd,GAAOa,OAGxC,OAAOC,QAAQ2sD,IAAO,GAAK5sD,GAAQL,IAAUmtD,GAAa3tD,GAAOa,OACnEwtD,EAAc,EAAPA,EAAW,WAAWvtD,QAAQd,GAAOa,SAIhDiF,GAAO2E,OAAOsjD,aAAaM,IAE3BvoD,GAAO2nD,MAUV,CAAA,GAAII,GAAiBJ,EAAGxnD,WAAW,UAGxCH,GAAO2nD,SAIG,KAAVgD,GACFnC,GAAW,GAAIvB,GAAwB7S,IAGlC,CACL77C,KA7qBqB,EA8qBrBrB,MAAO8I,EACPypD,MAAOA,EACP/hC,MAAOA,EACPvJ,IAAKpjB,IA0KE6vD,GAKE,KAAPjD,EACED,GAAextD,GAAOiG,WAAWpF,GAAQ,IACpCsuD,KAGFN,KAGLrB,GAAeC,GACV0B,KAGFN,KAGT,SAAS8B,WACDC,EAAQxE,UACdvrD,GAAQ+vD,EAAM3sC,IACdmoC,GAAYoE,KACZ3vD,GAAQ+vD,EAAM3sC,IACP2sC,EAGT,SAASC,WACDC,EAAMjwD,GACZurD,GAAYoE,KACZ3vD,GAAQiwD,EASV,SAASC,GAAuBC,EAAU3L,EAAMC,SACxCniD,EAAO,IAAI+oD,GAAqB,OAAb8E,GAAkC,OAAbA,EAl3BlB,oBALD,2BAw3B3B7tD,EAAK6tD,SAAWA,EAChB7tD,EAAKkiD,KAAOA,EACZliD,EAAKmiD,MAAQA,EACNniD,EAGT,SAAS8tD,GAAqBzE,EAAQpiD,SAC9BjH,EAAO,IAAI+oD,GA93BQ,yBA+3BzB/oD,EAAKqpD,OAASA,EACdrpD,EAAK/F,UAAYgN,EACVjH,EAWT,SAAS+tD,GAAiBvmD,SAClBxH,EAAO,IAAI+oD,GAAQY,WACzB3pD,EAAKwH,KAAOA,EACLxH,EAGT,SAASguD,GAAcP,SACfztD,EAAO,IAAI+oD,GAh5BC,kBAi5BlB/oD,EAAKnG,MAAQ4zD,EAAM5zD,MACnBmG,EAAKiuD,IAAMpxD,GAAOlC,MAAM8yD,EAAMpjC,MAAOojC,EAAM3sC,KAEvC2sC,EAAML,QACS,OAAbptD,EAAKiuD,MACPjuD,EAAKiuD,IAAM,UAGbjuD,EAAKotD,MAAQK,EAAML,OAGdptD,EAGT,SAASkuD,GAAuBC,EAAU3E,EAAQ1lD,SAC1C9D,EAAO,IAAI+oD,GA95BU,2BA+5B3B/oD,EAAKouD,SAAwB,MAAbD,EAChBnuD,EAAKwpD,OAASA,EACdxpD,EAAK8D,SAAWA,EACX9D,EAAKouD,WAAUtqD,EAASuqD,QAAS,GAC/BruD,EAST,SAASsuD,GAAeC,EAAMzwD,EAAKjE,SAC3BmG,EAAO,IAAI+oD,GA36BE,mBA46BnB/oD,EAAKlC,IAAMA,EACXkC,EAAKnG,MAAQA,EACbmG,EAAKuuD,KAAOA,EACLvuD,EAYT,SAASmrD,GAAWsC,EAAOe,OACrBC,EACAxnD,EAAO1N,MAAMC,UAAUmB,MAAMP,KAAKH,UAAW,GAC7Cy0D,EAAMF,EAAclpD,QAAQ,UAAU,CAACqpD,EAAOjxD,KAChDysD,GAAOzsD,EAAQuJ,EAAK5J,OAAQ,sCACrB4J,EAAKvJ,YAEd+wD,EAAQ,IAAIlxD,MAAMmxD,IACZhxD,MAAQA,GACd+wD,EAAM1iD,YAAc2iD,EACdD,EAIR,SAASG,GAAgBnB,GAp+BV,IAq+BTA,EAAMvyD,MACRiwD,GAAWsC,EAn8BY,2BA/BD,IAq+BpBA,EAAMvyD,MACRiwD,GAAWsC,EA38Be,qBAzBL,IAu+BnBA,EAAMvyD,MACRiwD,GAAWsC,EA98Be,qBA/BR,IAg/BhBA,EAAMvyD,MACRiwD,GAAWsC,EAj9BmB,yBA/Bf,IAm/BbA,EAAMvyD,MACRiwD,GAAWsC,EAp9BiB,4BAw9B9BtC,GAAWsC,EAAO7D,GAAwB6D,EAAM5zD,OAKlD,SAASg1D,GAAOh1D,SACR4zD,EAAQD,KA3/BM,IA6/BhBC,EAAMvyD,MAA4BuyD,EAAM5zD,QAAUA,GACpD+0D,GAAgBnB,GAKpB,SAASloD,GAAM1L,UAngCO,IAogCbovD,GAAU/tD,MAA4B+tD,GAAUpvD,QAAUA,EAInE,SAASi1D,GAAaC,UA3gCH,IA4gCV9F,GAAU/tD,MAAyB+tD,GAAUpvD,QAAUk1D,EAIhE,SAASC,WACD5F,EAAW,OACjB1rD,GAAQurD,GAAU5+B,MAClBwkC,GAAO,MAECtpD,GAAM,MACRA,GAAM,MACRioD,KACApE,EAAS3uD,KAAK,QAEd2uD,EAAS3uD,KAAKw0D,MAET1pD,GAAM,MACTspD,GAAO,aAKbrB,KAjKF,SAA+BpE,SACvBppD,EAAO,IAAI+oD,GAl3BS,0BAm3B1B/oD,EAAKopD,SAAWA,EACTppD,EA+JAkvD,CAAsB9F,GAI/B,SAAS+F,KACPzxD,GAAQurD,GAAU5+B,YACZojC,EAAQD,YAriCS,IAwiCnBC,EAAMvyD,MA1iCc,IA0iCiBuyD,EAAMvyD,MACzCuyD,EAAMrB,OACRjB,GAAWsC,EAAO1D,IAGbiE,GAAcP,IAGhBM,GAAiBN,EAAM5zD,OAGhC,SAASu1D,SACH3B,EAAO3vD,EAAKuJ,SAChB3J,GAAQurD,GAAU5+B,MA1jCE,KA2jCpBojC,EAAQxE,IAEE/tD,MACRmM,EAAK8nD,KACLN,GAAO,KAEAP,GAAe,OAAQjnD,EADtB4nD,OAjkCG,IAqkCTxB,EAAMvyD,MAhkCU,IAgkCWuyD,EAAMvyD,MAGnC4C,EAAMqxD,KACNN,GAAO,KAEAP,GAAe,OAAQxwD,EADtBmxD,YAJRL,GAAgBnB,GASpB,SAAS4B,SAEHvrD,EAEAhG,EAHA2rD,EAAa,GAIb3uD,EAAM,GACNkE,EAAWsI,WACf5J,GAAQurD,GAAU5+B,MAClBwkC,GAAO,MAECtpD,GAAM,MASZzH,EAAM,MARNgG,EAAWsrD,MAEEtxD,IAAI5C,OAASyuD,GACjB7lD,EAAShG,IAAI0J,KAEbxI,EAAS8E,EAAShG,IAAIjE,QAK3BH,OAAOF,UAAUwI,eAAe5H,KAAKU,EAAKgD,GAC5CqtD,GAAW,GA9jCoB,wEAgkC/BrwD,EAAIgD,IAAO,EAGb2rD,EAAWhvD,KAAKqJ,GAEXyB,GAAM,MACTspD,GAAO,YAIXA,GAAO,KAlLT,SAAgCpF,SACxBzpD,EAAO,IAAI+oD,GAt6BU,2BAu6B3B/oD,EAAKypD,WAAaA,EACXzpD,EAgLAsvD,CAAuB7F,GAYhC,MAAM8F,GAAgB,IACd,GAGR,SAASC,SACHt0D,EAAMuyD,EAAOp1C,KAEb9S,GAAM,YAfZ,WACEspD,GAAO,WACDx2C,EAAOo3C,YACbZ,GAAO,KACAx2C,EAYEq3C,MAGLnqD,GAAM,YACDypD,QAGLzpD,GAAM,YACD8pD,QAGTn0D,EAAO+tD,GAAU/tD,KACjBwC,GAAQurD,GAAU5+B,MAjpCE,IAmpChBnvB,GAA4Bq0D,GAActG,GAAUpvD,OACtDwe,EAAO01C,GAAiBP,KAAM3zD,YACzB,GAhpCgB,IAgpCZqB,GAlpCa,IAkpCkBA,EACpC+tD,GAAUmD,OACZjB,GAAWlC,GAAWc,IAGxB1xC,EAAO21C,GAAcR,UAChB,CAAA,GA1pCU,IA0pCNtyD,QACH,IAAIqC,MAAMysD,IA9pCM,IA+pCb9uD,IACTuyD,EAAQD,MACF3zD,MAAwB,SAAhB4zD,EAAM5zD,MACpBwe,EAAO21C,GAAcP,IA9pCF,IA+pCVvyD,IACTuyD,EAAQD,MACF3zD,MAAQ,KACdwe,EAAO21C,GAAcP,IACZloD,GAAM,MAAQA,GAAM,OAC7B8S,EAAO21C,GAAc1B,MACrBoB,MAEAkB,GAAgBpB,aAGXn1C,EAIT,SAASs3C,WACD1oD,EAAO,MACb4nD,GAAO,MAEFtpD,GAAM,UACF7H,GAAQL,KACb4J,EAAKxM,KAAKw0D,OAEN1pD,GAAM,OAIVspD,GAAO,YAIXA,GAAO,KACA5nD,EAcT,SAAS2oD,YACPf,GAAO,KAZT,WACEnxD,GAAQurD,GAAU5+B,YACZojC,EAAQD,YAlYhB,SAA0BC,UAp0BJ,IAq0BbA,EAAMvyD,MAp0BI,IAo0BwBuyD,EAAMvyD,MAv0BvB,IAu0BgDuyD,EAAMvyD,MAn0BzD,IAm0ByFuyD,EAAMvyD,KAmY/G20D,CAAiBpC,IACpBmB,GAAgBnB,GAGXM,GAAiBN,EAAM5zD,OAKvBi2D,GAGT,SAASC,KACPlB,GAAO,WACDx2C,EAAOo3C,YACbZ,GAAO,KACAx2C,EA0BT,SAAS23C,WACD33C,EAxBR,eACMA,MACJA,EAAOm3C,UAGDjqD,GAAM,KAER8S,EAAO61C,GAAuB,IAAK71C,EADxBu3C,WAEN,GAAIrqD,GAAM,KAEf8S,EAAOy1C,GAAqBz1C,EADrBs3C,UAEF,CAAA,IAAIpqD,GAAM,WAEf8S,EAAO61C,GAAuB,IAAK71C,EADxB03C,aAOR13C,EAKM43C,MA/uCO,IAivChBhH,GAAU/tD,OACRqK,GAAM,OAASA,GAAM,aACjB,IAAIhI,MAAMysD,WAIb3xC,EAIT,SAAS63C,SACHzC,EAAOp1C,KA5vCS,IA8vChB4wC,GAAU/tD,MAjwCG,IAiwCyB+tD,GAAU/tD,KAClDmd,EAAO23C,SACF,CAAA,GAAIzqD,GAAM,OAASA,GAAM,YACxB,IAAIhI,MAAMysD,IACX,GAAIzkD,GAAM,MAAQA,GAAM,MAAQA,GAAM,MAAQA,GAAM,KACzDkoD,EAAQD,KACRn1C,EAAO63C,KACP73C,EA7TJ,SAA+Bw1C,EAAUnE,SACjC1pD,EAAO,IAAI+oD,GAl7BS,0BAm7B1B/oD,EAAK6tD,SAAWA,EAChB7tD,EAAK0pD,SAAWA,EAChB1pD,EAAKqG,QAAS,EACPrG,EAwTEmwD,CAAsB1C,EAAM5zD,MAAOwe,OACrC,CAAA,GAAIy2C,GAAa,WAAaA,GAAa,SAAWA,GAAa,gBAClE,IAAIvxD,MAAMysD,IAEhB3xC,EAAO23C,aAGF33C,EAGT,SAAS+3C,GAAiB3C,OACpB4C,EAAO,KAhxCS,IAkxChB5C,EAAMvyD,MArxCO,IAqxCqBuyD,EAAMvyD,YACnC,SAGDuyD,EAAM5zD,WACP,KACHw2D,EAAO,YAGJ,KACHA,EAAO,YAGJ,IACHA,EAAO,YAGJ,IACHA,EAAO,YAGJ,IACHA,EAAO,YAGJ,SACA,SACA,UACA,MACHA,EAAO,YAGJ,QACA,QACA,SACA,SACA,iBACA,KACHA,EAAO,YAGJ,SACA,SACA,MACHA,EAAO,YAGJ,QACA,IACHA,EAAO,YAGJ,QACA,QACA,IACHA,EAAO,UAIJA,EA8DT,SAASpB,SACH52C,EAAMixC,SACVjxC,EAtDF,eACMi4C,EAAQC,EAASl4C,EAAMo1C,EAAO4C,EAAM7lC,EAAO23B,EAAO0L,EAAU3L,EAAMtkD,KACtE0yD,EAASrH,GACT/G,EAAOgO,KAIM,KAFbG,EAAOD,GADP3C,EAAQxE,YAIC/G,MAGTuL,EAAM4C,KAAOA,EACb7C,KACA+C,EAAU,CAACD,EAAQrH,IAEnBz+B,EAAQ,CAAC03B,EAAMuL,EADftL,EAAQ+N,OAGAG,EAAOD,GAAiBnH,KAAc,GAAG,MAExCz+B,EAAMntB,OAAS,GAAKgzD,GAAQ7lC,EAAMA,EAAMntB,OAAS,GAAGgzD,MACzDlO,EAAQ33B,EAAMgmC,MACd3C,EAAWrjC,EAAMgmC,MAAM32D,MACvBqoD,EAAO13B,EAAMgmC,MACbD,EAAQC,MACRn4C,EAAOu1C,GAAuBC,EAAU3L,EAAMC,GAC9C33B,EAAM/vB,KAAK4d,IAIbo1C,EAAQD,MACF6C,KAAOA,EACb7lC,EAAM/vB,KAAKgzD,GACX8C,EAAQ91D,KAAKwuD,IACb5wC,EAAO63C,KACP1lC,EAAM/vB,KAAK4d,OAKbA,EAAOmS,EADP5sB,EAAI4sB,EAAMntB,OAAS,GAEnBkzD,EAAQC,MAED5yD,EAAI,GACT2yD,EAAQC,MACRn4C,EAAOu1C,GAAuBpjC,EAAM5sB,EAAI,GAAG/D,MAAO2wB,EAAM5sB,EAAI,GAAIya,GAChEza,GAAK,SAGAya,EAMAo4C,GAEHlrD,GAAM,OACRioD,KACAlE,EAAa2F,KACbJ,GAAO,KAEPx2C,EAjgBJ,SAAqCqR,EAAM4/B,EAAYC,SAC/CvpD,EAAO,IAAI+oD,GAp4Be,gCAq4BhC/oD,EAAK0pB,KAAOA,EACZ1pB,EAAKspD,WAAaA,EAClBtpD,EAAKupD,UAAYA,EACVvpD,EA4fE0wD,CAA4Br4C,EAAMixC,EAD7B2F,OAIP52C,EAIT,SAASo3C,WACDp3C,EAAO42C,QAET1pD,GAAM,WACF,IAAIhI,MAAMysD,WAGX3xC,ECxgDT,SAASyhC,GAAQ95C,SACTwH,EAAiB,SAEL,eAAdxH,EAAK9E,KACA,CAAC8E,EAAKwH,MAGG,YAAdxH,EAAK9E,KACA,CAAC8E,EAAKnG,QAGG,qBAAdmG,EAAK9E,OACPsM,EAAK/M,QAAQq/C,GAAQ95C,EAAKwpD,SAC1BhiD,EAAK/M,QAAQq/C,GAAQ95C,EAAK8D,YAGrB0D,GAGT,SAASmpD,GAAgB3wD,SACE,qBAArBA,EAAKwpD,OAAOtuD,KACPy1D,GAAgB3wD,EAAKwpD,QAEF,UAArBxpD,EAAKwpD,OAAOhiD,KAGd,SAASopD,GAAmB7Q,SAC3B8Q,EDg/CR,SAAiB3F,GAEfxtD,GAAQ,EACRL,IAFAR,GAASquD,GAEO7tD,OAChB4rD,GAAY,KACZyE,WACMr1C,EAAOo3C,QAh7CA,IAk7CTxG,GAAU/tD,WACN,IAAIqC,MAAM,2CAGX8a,EC5/CKoa,CAAMstB,GACZ+Q,EAAa,IAAIt1D,WACvBq1D,EAAI3H,OAAOlpD,IACS,qBAAdA,EAAK9E,MAA+By1D,GAAgB3wD,IACtD8wD,EAAW3yD,IAAI27C,GAAQ95C,GAAMrF,MAAM,GAAG6H,KAAK,SAIxCsuD,EC5BF,MAAMC,WAAmB/W,GAGvBj/C,eACE,IAAIg2D,GAAW,KAAM12D,KAAKue,MAAO3W,EAAU5H,KAAKqmB,SAGzD5e,YACEpG,EACiBkd,EACA8H,SAEXhlB,QAHWkd,MAAAA,OACA8H,OAAAA,iEAMZrI,KAAO0nC,GAAW1lD,KAAKue,MAAOve,KAAKqmB,OAAQrmB,WAE3C22D,iBAAmBJ,GAAmBv2D,KAAKge,MAG3C6iC,yBACE7gD,KAAK22D,iBAGP7V,wBACE,IAAI3/C,IAGNwgD,iBACE,CACL9gD,KAAM,SACNmd,KAAMhe,KAAKge,MAIR5V,aACG,UAASpI,KAAKge,QCkBnB,SAASynC,GACdlnC,EACA+4B,EACAsf,EACA9qD,EAAQ,eAEFqB,EAAO5E,WAAS+uC,GAAQA,EAAOA,EAAKnN,MACpCga,EAAQp5C,EAAQoC,GAChB03C,EAAQ54C,cAAYk4C,EAAQ7E,QAC9BR,MAGFA,EAAUvgC,EAAMs4C,sBAAsB1S,EAAOh3C,GAC7C,MAAOjN,SAEC,KAAIikD,OAGVrF,EAAQsD,QAAQ78B,SAAU,OACtBxjB,EAAQ60D,GAAUr4C,EAAMwgC,UAAUz5C,KAAKsuD,IACvCkD,EAAShY,EAAQsD,QAAQ78B,SAAS7kB,QACpCqB,EAAMV,OACRy1D,EAAOzW,iBAAiBt+C,GAExBA,EAAMV,OAASy1D,QAIbznC,EAAQ,mBAAkBw1B,MAAU/4C,IACpB,WAApBgzC,EAAQ78C,QAAuB,IAAO,KAAIgK,cAAY6yC,EAAQ78C,cAE1De,EAAU,eAAc6hD,aAER,IAAfvN,EAAKC,MAAmB,GAAEv0C,QAAaqsB,IAAU,IAAGrsB,QAAaqsB,IAGnE,SAAS0nC,GAAqBx4C,EAAcpR,EAAciM,SACzD+qC,EAAQp5C,EAAQoC,GAChByqB,EAAWxe,EAAM,aAEnB0lC,EADAl/B,EAAQxG,EAAM,UAIhB0lC,EAAUvgC,EAAMs4C,sBAAsB1S,EAAOh3C,GAC7C,MAAOjN,UAEAikD,KAGJvsB,GAAahY,GAQX,GAAIgY,IAAahY,EAAO,OACvBiqB,EAAYiV,EAAQsD,QAAQH,MAAM57B,QAAOxN,GAAKA,EAAEjH,UAAYgmB,KAC7DiS,EAAU7mC,QAAU6mC,EAAU7mC,OAAS,GAC1C4c,EAAQk/B,EAAQsD,QAAQH,MAAM,GAAGriC,MACjC2D,IACIsmB,EAAU7mC,OAAiB,YAAR,OAClB,YAAWiJ,cAAY2rB,mCAA0C3rB,cAAYmN,EAAO+wB,WACpF,kBAAiBl+B,cAAY2T,QAGlCA,EAAQiqB,EAAU,GAAGjqB,YAjBvBA,EAAQk/B,EAAQsD,QAAQH,MAAM,GAAGriC,MAC7Bk/B,EAAQsD,QAAQH,MAAMj/C,OAAS,GACjCugB,GAEK,sGAAiBtX,cAAY2T,aAiB9B,GAAEk/B,EAAQ3xC,QAAQlB,cAAYI,EAAmBuT,OC3HpD,SAAS8lC,GAAWnnC,EAAcy4C,EAAyCrxD,UACzEwF,EAAY6rD,GAAW7vC,GACxB5e,WAAS4e,GACJA,E5EkCN,SAA8BA,UAC5BA,MAAAA,SAAAA,EAAS,M4ElCH8vC,CAAqB9vC,GACvBs+B,GAAwBlnC,EAAO4I,EAAWxhB,GAG1CyiB,GAAsBjB,KCInC,SAAS+vC,GACPhhC,EACAzS,EACAgV,EACA0+B,WAEAjhC,EAAKzG,SAALyG,EAAKzG,OAAW,OAChByG,EAAKzG,QAAOhM,OAAAA,GAAU,OACtByS,EAAKzG,OAAOhM,IAAM8mB,WAAAA,OAAW,IAE5BrU,EAAKzG,OAAOhM,GAAM8mB,OAAO9R,GAAkB0+B,EAGvC,SAASC,GACdC,EACAnD,EACAv1C,EACAK,EAEI,CAACoX,QAAQ,UAEPkhC,QAACA,EAADv9C,OAAUA,EAAVgV,MAAkBA,EAAlBkO,UAAyBA,EAAzBtH,MAAoCA,EAApCmH,OAA2CA,KAAW5G,GAAQmhC,EAASvc,cAEzEwc,OAIC,MAAMvvD,KAAQmuB,EAAM,OACjBqhC,EAAWv9B,GAAmBjyB,GAC9ByvD,EAAYthC,EAAKnuB,MAEnBwvD,GAAYA,IAAarD,GAAqB,SAAbqD,SAE5BrhC,EAAKnuB,QACP,GAAI+xB,GAAuC09B,GAAY,OAGtD15C,UAACA,KAAc25C,GAAoBD,EACnCE,EAAa9uD,QAAMkV,GAEnB65C,EAAYp/B,GAA4BxwB,MAC1C4vD,EAAW,OACPl/B,OAACA,EAADhV,KAASA,GAAQk0C,EAcvBT,GAAchhC,EAAMzS,EAAMgV,EAVZ,IACTi/B,EAAWj3D,KAAIyE,UACVmqB,KAACA,KAASuoC,GAAqB1yD,QAC9B,CACLmqB,KAAMq2B,GAAW,KAAMr2B,MACpBuoC,MAGPH,WAGKvhC,EAAKnuB,QACP,GAAkB,OAAd4vD,EAAoB,OAEvBE,EAAuB,CAC3B55C,OACEy5C,EACGj3D,KAAIyE,UACGmqB,KAACA,KAASuoC,GAAqB1yD,QAC7B,GAAEwgD,GAAW,KAAMr2B,QAAWlR,GAAyBy5C,WAEhEzvD,KAAK,IAAMgW,GAAyBs5C,IAE3CvhC,EAAKnuB,GAAQ8vD,QAEV,GAAI/8C,GAAY08C,GAAY,OAC3BG,EAAYp/B,GAA4BxwB,MAC1C4vD,EAAW,OACPl/B,OAACA,EAADhV,KAASA,GAAQk0C,EACvBT,GAAchhC,EAAMzS,EAAMgV,EAAQ++B,UAC3BthC,EAAKnuB,IAMZY,EAAS,CAAC,aAAc,iBAAkBZ,IAAwB,OAAfmuB,EAAKnuB,WACnDmuB,EAAKnuB,MAIH,SAATmsD,EAAiB,KACdh+B,EAAK+D,eAKN/D,EAAKzG,OAAQ,OAETwK,KAACA,GAAQ/D,EAAKzG,OACpByG,EAAKzG,OAAS,IACRwK,EAAO,CAACA,KAAAA,GAAQ,IAGlBrvB,EAAQsrB,EAAKzG,gBACRyG,EAAKzG,aAIT,CACLV,MAAAA,EACAhV,OAAAA,KACGmc,EACHhb,QAAQ,EACR+f,QAAQ,EACR7f,MAAM,EAIN+f,UAAW,EACXC,UAAW,EACXM,OAAO,EACPoB,OAAQnwB,EAAgBmwB,EAAQ,IAE7B,KAGA9d,EAAIoX,QAAUihC,EAASS,6BAKV5xD,IAAd+2B,EAAyB,aACvBjf,EAAOif,YACP/G,EAAKzG,iCAAQwL,uBAAQsP,QAAUzvB,GAAYob,EAAKzG,OAAOwL,OAAOsP,OAAOl5B,QACvE2M,EAAO1R,EAAW2wB,EAAW,cAAe/G,EAAKzG,OAAOwL,OAAOsP,OAAOl5B,KAAK4M,SAE7Ei5C,GAAchhC,EAAM,SAAU,OAAQ,CAACjY,OAAQD,OAGzB,OAApBkY,EAAKsC,mBACAtC,EAAKsC,WAIVtC,EAAKzG,OAAQ,KACV,MAAMhM,KAAQsW,GACZs9B,EAASU,YAAYt0C,WACjByS,EAAKzG,OAAOhM,GAGnB7Y,EAAQsrB,EAAKzG,gBACRyG,EAAKzG,aAIVuoC,EAlKV,SAAuBriC,EAAkDhX,MAClEgX,SAGDx1B,UAAQw1B,KAAW9a,GAAO8a,GACrBA,EAAMl1B,KAAIuhB,GAAYiU,GAAajU,EAAUrD,KAASxW,KAAK,MAE7DwtB,EA2JesiC,CAActiC,EAAOhX,SAElC,CACLoQ,MAAAA,EACAhV,OAAAA,EACAkgB,MAAM,KACF+9B,EAAc,CAACriC,MAAOqiC,GAAe,MACtC9hC,MACiB,IAAhBvX,EAAOvD,KAAiB,CAACA,MAAM,GAAS,GAC5C0hB,OAAQnwB,EAAgBmwB,EAAQ,MAS/B,SAASo7B,GAAoB35C,SAC5BurC,KAACA,GAAQvrC,EAAMwgC,UACf1U,EAAuB,OAExB,MAAMz4B,KAAWsC,MAChB41C,EAAKl4C,OACF,MAAMskB,KAAQ4zB,EAAKl4C,OACjBskB,EAAKhH,IAAI,aAAegH,EAAKhH,IAAI,aAAc,OAG5C3a,EAAuB,MAAZ3C,EAAkB,SAAW,QACxC24B,EAAShsB,EAAMgmC,iBAAiBhwC,GAAU0J,OAE5C1J,IAAag2B,GACfF,EAAQjqC,KAAK,CACX+M,KAAMoH,EACNg2B,OAAQA,WAObF,EC/MT,SAAS8tB,GACPC,EACAz5C,EACA/M,EACAmI,UAGO1a,OAAOg5D,OAAOh4D,MAAM,KAAM,CAC/B,MACG+3D,EAAY33D,KAAI63D,OACE,eAAfA,EAA6B,OACzBC,EAAsB,MAAZ3mD,EAAkB,SAAW,OACvC4mD,EAAgB75C,EAAmB,MAAZ/M,EAAkB,aAAe,aAAe,GACvE6mD,EAAgB95C,EAAmB,MAAZ/M,EAAkB,UAAY,cAAgB,GAErE9J,EAAQ,IAAI3G,IAAI,IAAIqF,EAAKgyD,MAAmBhyD,EAAKiyD,KAEjDC,EAA8B,OAC/B,MAAM3wD,KAAQD,EAAM8B,SACvB8uD,EAA4B3wD,GAAQ,CAElCkW,OAAS,GAAElE,EAAM,eAAmBw+C,QAAcl6C,GAChDm6C,EAAczwD,SACTsW,GAAoBo6C,EAAc1wD,cAItC2wD,SAGF/5C,EAAO25C,QAOb,SAASK,GACd/mD,EACA+Q,EACA5I,EACA4E,SAEMi6C,EACU,SAAdj2C,EACI,CAAC,eAAgB,YACH,UAAdA,EACA,CAAC,eAAgB,a5EuElB,SAAwB9hB,UACtBA,KAAQ+pB,G4EvETiuC,CAAel2C,GACf,CAAC,oBACa,SAAdA,GAAsC,QAAdA,EACxB,CAAC,gBACD,GAEAm2C,EAA0B,MAAZlnD,EAAkB,QAAU,QAC1CmnD,EAAaj+C,GAAYf,GAAU,aAAgB,OAAMvO,EAAUuO,KAEnEi/C,EAAoB,IAGrBJ,KACAA,EAAqBn4D,KAAIyE,GAAK4zD,EAAc5zD,EAAEyG,OAAO,MAGpDstD,EAAgB,CAAC,OAAQF,EAAYD,SAEpC,CACLI,iBAAkBf,GAA6Ba,EAAmBr6C,EAAQ/M,EAASmI,GACnFo/C,aAAchB,GAA6Bc,EAAet6C,EAAQ/M,EAASmI,GAC3Eq/C,gBAAiBC,GAAmB,IAAIJ,KAAkBD,GAAoBr6C,IAI3E,SAAS06C,GAAmBC,EAA2B36C,SACtD46C,EAAU,CAAC,QACZ,MAAMjB,KAAcgB,EAAiB,WAEpCx6C,YAAQH,EAAO25C,uBAAPkB,EAAoB16C,SAC5BA,EAAO,CACTA,EAAQlW,QAAMkW,OACT,MAAMvV,KAAKuV,EACdy6C,EAAQn5D,KAAKue,EAAOG,MAAMvV,YAIzBlK,OAAOg5D,OAAOh4D,MAAM,KAAMk5D,GAE5B,SAASE,GACdhwD,EACA2V,EACAN,EACA46C,EAAoC,UAE9Bn6C,EAAcF,GAAe5V,EAAUqV,EAAOM,WAEhClZ,IAAhBqZ,QACK,CACLo6C,WAAY,QACZC,YAAar6C,OAIZ,MAAMo6C,IAAc,CAAC,mBAAoB,eAAgB,mBAAoB,eACpCzzD,eAAxCwzD,EAAYC,yBAAclwD,UACrB,CAACkwD,WAAAA,EAAYC,YAAaF,EAAYC,GAAYlwD,UAGtD,GC1EF,MAAMowD,GAET,CACF9qC,MAAO,EAAExQ,MAAAA,EAAO3M,QAAAA,KAAa2M,EAAMiR,UAAU5d,GAE7Cuf,OAAQ,EAAEvB,gBAAAA,EAAiBjR,OAAAA,EAAQuX,KAAAA,YAC3B/E,OAACA,EAADF,WAASA,GAAciF,SACtB7D,GAAYzC,EAAiBA,EAAgB/uB,KAAMswB,EAAQF,EAAYtS,GAAQ,IAGxFsS,WAAY,EAAEiF,KAAAA,EAAMtG,gBAAAA,EAAiBjN,UAAAA,YAC7BsO,WAACA,GAAciF,SACd1D,GAAgBvB,EAAYrB,EAAiBjN,IAGtDsX,KAAM,EAAErK,gBAAAA,EAAiBsG,KAAAA,EAAMvT,UAAAA,KAAeuT,EAAK+D,MA8D9C,SAAqBtX,EAAsBX,UACxCiJ,GAAkBtI,IAAcsM,GAAWjN,KAAcjJ,GAAUiJ,MAAAA,SAAAA,EAAUrJ,OAASO,GAAS8I,MAAAA,SAAAA,EAAUrJ,KA/DtDmhD,CAAYn3C,EAAWiN,GAElFuK,UAAW,EAAE5b,MAAAA,EAAO3M,QAAAA,KAgEf,SAAmB2M,EAAkB3M,SACpCmoD,EAAgD,MAAZnoD,EAAkB,IAAM,OAC9D2M,EAAMskC,kBAAkBkX,UACnBx7C,EAAMiR,UAAUuqC,UAnEQ5/B,CAAU5b,EAAO3M,GAElD4mB,WAAY,EAAEtC,KAAAA,EAAMwE,WAAAA,EAAY3gB,OAAAA,EAAQnI,QAAAA,KACtCskB,EAAKsC,YAAcwhC,GAAkBt/B,EAAY3gB,EAAQnI,GAE3D8oB,WAAY,EAAEA,WAAAA,KAAgBA,EAE9BhC,cAAe,EAAExC,KAAAA,EAAMwE,WAAAA,EAAY3gB,OAAAA,EAAQnI,QAAAA,KACzCskB,EAAKwC,eAAiBuhC,GAAqBv/B,EAAY3gB,EAAQnI,GAEjEgpB,WAAY,EAAE1E,KAAAA,EAAMtG,gBAAAA,EAAiBhe,QAAAA,KAAaskB,EAAK0E,YAiMlD,SAA2B/5B,EAAY+Q,MAC5B,MAAZA,GAAmBjJ,EAAS,CAAC,eAAgB,YAAa9H,UACrD,SAnM4Dq5D,CAAkBtqC,EAAgB/uB,KAAM+Q,GAE7GopB,aAAc,EAAE9E,KAAAA,EAAMtG,gBAAAA,EAAiBjN,UAAAA,KACrCuT,EAAK8E,cAqMF,SAA6Bn6B,EAAY8hB,EAAsBw3C,EAAsB1zD,MAErF0zD,IAAgBhhD,WAAS1S,IAAoB,YAAT5F,GAA+B,YAATA,QAC3C,QAAd8hB,GAAqC,WAAdA,GAClB,gBAxMTy3C,CACExqC,EAAgB/uB,KAChB8hB,EACAsM,GAAWW,MAAsBA,EAAgBrK,SACjD0J,GAAWW,GAAmBA,EAAgBnpB,UAAOP,GAIzD6T,OAAQ,EAAEA,OAAAA,KAAYA,EAEtB4iB,UAAW,EAAE/qB,QAAAA,EAAS2M,MAAAA,EAAO2X,KAAAA,EAAMtG,gBAAAA,EAAiBjN,UAAAA,YAC5CpO,EAAuB,MAAZ3C,EAAkB,QAAsB,MAAZA,EAAkB,cAAW1L,EACpEgE,EAAOqK,EAAWgK,EAAMgmC,iBAAiBhwC,QAAYrO,SACpDgwB,EAAKyG,WAsMT,UAA0B/M,gBAC/BA,EAD+BjN,UAE/BA,EAF+BzY,KAG/BA,EACAN,OAAQiB,QAOHA,IAASogB,GAAkBtI,IAA4B,QAAdA,EAAqB,IAC7DsM,GAAWW,GAAkB,UAC3B7W,GAAU6W,EAAgBjX,WAErB,CAACsF,OAAS,QAAO/T,EAAK+T,iBAI7B2R,EAAgBrK,UAChB5c,EAAS,CAAC,QAAS,QAAS,MAAO,qBAAYqe,GAAkB4I,EAAgBrK,8BAAlC+C,EAA6C9C,mBAMzF,CAACvH,OAAS,QAAO/T,EAAK+T,qBAhOJo8C,CAAiB,CAACzqC,gBAAAA,EAAiBjN,UAAAA,EAAWzY,KAAAA,EAAMN,OAAQssB,EAAKtsB,UAG5F+rB,MAAO,EAAEO,KAAAA,EAAM3X,MAAAA,EAAO3M,QAAAA,cACD1L,IAAfgwB,EAAKP,aACAO,EAAKP,YAER2kC,EAAgBC,GAAiBh8C,EAAO3M,WACxB1L,IAAlBo0D,SACKA,QAEHt4C,EAAWzD,EAAMi8C,cAAc5oD,GAC/B00C,EAAuB,MAAZ10C,EAAkB,KAAO,KACpC4e,EAAYjS,EAAMyD,SAASskC,UAG1BxmC,GACLkC,EAAW,CAACqR,GAAerR,IAAa,GACxCiN,GAAWuB,GAAa,CAAC6C,GAAe7C,IAAc,KAI1D5mB,OAAQ,EAAEssB,KAAAA,EAAMtG,gBAAAA,KAyOX,SAAgBsG,EAAoBtG,SACnC/kB,EAAOqrB,EAAKtsB,UAEdzJ,UAAQ0K,UACHwtB,GAAWzI,EAAiB/kB,GAC9B,GAAIiQ,GAAYjQ,UACdA,SA/O4BjB,CAAOssB,EAAMtG,GAElDkN,OAAQ,EAAE5G,KAAAA,EAAMtG,gBAAAA,EAAiBta,KAAAA,KAAU4gB,EAAK4G,QAmP3C,SAAuBxnB,EAAY0M,MAC3B,SAAT1M,GAAmB6e,GAAWnS,UACzB,SAEF,EAvPmDy4C,CAAcnlD,EAAMsa,IAoDzE,SAAS8qC,GAAmBntD,SACzB,MAAKA,EAAM0Q,8BAGd,SAASg8C,GACd1sD,EACAwM,EACAnI,EACA+oD,WAEcz0D,IAAVqH,EAAqB,IACP,MAAZqE,EAAiB,IACfkJ,GAAYvN,GAAQ,OAChBtN,EAAIy6D,GAAmBntD,SAEtB,CACL0Q,OACG,SAAQhe,QAAQA,sBAAsBA,QAAQA,yBAC3CA,qBAAqBA,UAJT6a,GAAYf,GAAW,IAAGA,EAAOkE,oBAAiC,QAAXlE,2BAQxE,GAAKxM,GAASA,EAAQ,KAAS,IAAMA,GAASA,EAAQ,UAClD,YAGLuN,GAAYf,GAAS,OACjBnT,EAAK2G,GAAS,IAAM,KAAOA,EAAQ,MAAQ,YAC1C,CAAC0Q,OAAS,GAAElE,EAAOkE,UAAUrX,qCAG9B2G,GAAS,IAAM,KAAOA,KAAuB,QAAXwM,GAAoB,SAAW,SAErEe,GAAYvN,GAAQ,OAChBtN,EAAIy6D,GAAmBntD,SAGtB,CACL0Q,OAAS,GAAEhe,qBAAqBA,gBAAgBA,QAAQA,eAF3C06D,EAAsB,WAAa,mBAE0C16D,QAAQA,iBAH/E6a,GAAYf,GAAW,IAAGA,EAAOkE,qBAAkC,SAAXlE,2BAO3ExM,GAAS,IAAM,KAAOA,GAAU,KAAOA,GAASA,GAAS,WACpDotD,EAAsB,SAAW,QAGtC7/C,GAAYf,GAAS,OACjBnT,EAAK,IAAM2G,GAASA,GAAS,IAAM,MAAQ,YAC1C,CAAC0Q,OAAS,GAAElE,EAAOkE,UAAUrX,sCAG9B,IAAM2G,GAASA,GAAS,OAAqB,SAAXwM,GAAqB,MAAQ,UAMtE,SAASigD,GACdzsD,EACAwM,EACAnI,WAEc1L,IAAVqH,eAIEqtD,EAAkB,MAAZhpD,EACNiK,EAAa++C,EAAM,EAAI,GACvBC,EAAaD,EAAM,SAAW,UAEhC9/C,GAAYvN,GAAQ,OAChBtN,EAAIy6D,GAAmBntD,SAEtB,CACL0Q,OACG,IAAGpC,EAAc,IAAG5b,UAAYA,oBAAoB26D,EAAM,KAAO,gBAC9D/+C,OAAgB5b,QAAQA,OAAO,IAAM4b,UAJxBf,GAAYf,GAAW,IAAGA,EAAOkE,eAAe48C,MAAiB9gD,IAAW8gD,4BAQ9FttD,EAAQsO,GAAc,KAAQ,SAE1B++C,EAAM,KAAO,YAGlB9/C,GAAYf,GAAS,OACjBnT,EAAKiV,EAAatO,GAASA,EAAQ,IAAMsO,EAAa,MAAQ,YAE7D,CACLoC,OAAS,GAFW,GAAElE,EAAOkE,UAAUrX,MAAOi0D,kCAM7Ch/C,EAAatO,GAASA,EAAQ,IAAMsO,KAAiB9B,IAAW8gD,GAC5D,OAGF,QAyDF,SAASN,GAAiBh8C,EAAkB3M,SAC3C00C,EAAuB,MAAZ10C,EAAkB,KAAO,KACpCoQ,EAAWzD,EAAMyD,SAASpQ,GAC1B4e,EAAYjS,EAAMyD,SAASskC,GAE3BjmC,EAAS2B,EAAWA,EAAS2T,WAAQzvB,EACrCoa,EAASkQ,EAAYA,EAAUmF,WAAQzvB,SAEzCma,GAAUC,EACLF,GAAWC,EAAQC,GACjBD,IAEAC,SAEWpa,IAAXma,EAEFA,OACana,IAAXoa,EAEFA,OAFF,IClUF,MAAMw6C,WAAsBnb,GAG1Bj/C,eACE,IAAIo6D,GAAc,KAAMlzD,EAAU5H,KAAKqjC,YAGhD57B,YAAYpG,EAAuCgiC,SAC3ChiC,QAD2CgiC,UAAAA,0CAG5CszB,iBAAmBJ,GAAmBv2D,KAAKqjC,UAAUQ,uCAGzBxiC,EAAsBkd,UAEvDA,EAAMw8C,iBAAgB,CAAC/4C,EAAiCpQ,QACjDkgB,GAAgB9P,IAGjBiR,GAAYjR,EAASvb,MAAO,OACxBmZ,MAACA,EAAD2F,SAAQA,GAAYvD,EACpBvb,EAAiDub,EAASvb,KAE1Do9B,EACJp9B,EACGhG,KAAI,CAACu6D,EAAWz3D,IACP,GAAE6kB,GAAsB,CAACxI,MAAAA,EAAO2F,SAAAA,EAAU/d,MAAOwzD,SAAiBz3D,SAE3E4E,KAAK,IAAM1B,EAAKzD,OAErB3B,EAAS,IAAIy5D,GAAcz5D,EAAQ,CACjCwiC,UAAAA,EACApE,GAAIw7B,GAAoBj5C,EAAUpQ,EAAS,CAACmjB,OAAO,UAIlD1zB,EAGFy/C,wBACE,IAAI3/C,IAAI,CAACnB,KAAKqjC,UAAU5D,KAG1BohB,yBACE7gD,KAAK22D,iBAGPhV,iBACE,CACL9gD,KAAM,UACNmd,KAAMhe,KAAKqjC,UAAUQ,UACrBpE,GAAIz/B,KAAKqjC,UAAU5D,IAIhBr3B,aACG,aAAYA,EAAKpI,KAAKqjC,cAI3B,SAAS43B,GAAoBj5C,EAAiCpQ,EAA2BoN,UACvFa,GAAQmC,EAAU,CAAChW,OAAQ4F,EAASqe,OAAQ,gBAAkBjR,GAAO,KC/DvE,SAASk8C,GAAiBtpD,EAAuBmI,UAClDpR,EAAS,CAAC,MAAO,UAAWoR,GACvB,SACEpR,EAAS,CAAC,OAAQ,SAAUoR,IAGpB,QAAZnI,EAFE,MAE0B,SAG9B,SAASupD,GACdpzD,EACAquB,EACAzX,EACA/M,SAEMwpD,EACQ,QAAZxpD,EAAoB+M,EAAOuqB,UAAwB,WAAZt3B,EAAuB+M,EAAOwqB,aAAexqB,EAAOyqB,mBAEtFz8B,GAAiBypB,GAAU,IAAIruB,GAAOqzD,EAAqBrzD,GAAO4W,EAAOyX,OAAOruB,IAGlF,SAASszD,GACdjM,EACAh5B,EACAzX,EACA/M,SAEM9J,EAAQ,OACT,MAAMC,KAAQqnD,EAAY,OACvB5vD,EAAQ27D,GAAkBpzD,EAAMquB,GAAU,GAAIzX,EAAQ/M,QAC9C1L,IAAV1G,IACFsI,EAAMC,GAAQvI,UAGXsI,ECrCF,MAAMwzD,GAAmC,CAAC,MAAO,UAG3CC,GAA6B,CAAC,SAAU,UCyB9C,SAASC,GAAmBj9C,EAAc3M,SACzC+jB,EAAQpX,EAAMwgC,UAAU0c,cAAc7pD,GAAS+jB,MAC/ChX,EAASJ,EAAMI,OAASJ,EAAMI,YAASzY,EACvCw1D,EAAgBn9C,EAAMwgC,UAAU0c,cAAc7pD,GAAS8pD,cACzDn9C,EAAMwgC,UAAU0c,cAAc7pD,GAAS8pD,mBACvCx1D,GAEE01B,YACJA,EACAC,WAAY8/B,EAFR5jC,YAGJA,GACEsjC,GAAoB,CAAC,cAAe,aAAc,eAAgBK,EAActlC,OAAQzX,EAAQ/M,GAC9FgqD,EAAgBV,GAAiBtpD,EAASmmB,GAE1C8D,EAAavuB,EAAequD,SAE3B,CACLxuD,KAAO,GAAEyE,UACT/Q,KAAM,QACNg7D,KAAO,GAAED,UACTjmC,MAAO,CACLtkB,KAAMskB,KACU,QAAZ/jB,EAAoB,CAACmI,OAAQ,QAAU,GAC3C+E,MAAO,iBACJg9C,GAA2BjgC,EAAY+/B,MACvCG,GAAwBH,EAAe//B,EAAYD,MACnDogC,GAAyBr9C,EAAQ+8C,EAAe9pD,EAASm3B,GAAyBH,MAKpF,SAASmzB,GAAwBH,EAA8BruD,EAAeqM,EAAsB,iBACjGA,OACD,cACI,CAACwC,MAAO,YACZ,YACI,CAACA,MAAO,eAGbA,EAAQ49C,GAAkBzsD,EAAyB,QAAlBquD,EAA0B,OAAS,MAAyB,QAAlBA,EAA0B,IAAM,YAC1Gx/C,EAAQ,CAACA,MAAAA,GAAS,GAGpB,SAAS0/C,GAA2BvuD,EAAeqE,SAClDyK,EAAW49C,GAAqB1sD,EAAmB,QAAZqE,EAAoB,OAAS,MAAmB,QAAZA,EAAoB,IAAM,KAAK,UACzGyK,EAAW,CAACA,SAAAA,GAAY,GAG1B,SAAS4/C,GAAqB19C,EAAc3M,SAC3CsqD,EAAe39C,EAAMwgC,UAAU0c,cAAc7pD,GAC7CuqD,EAAS,OACV,MAAMC,KAAcb,MACnBW,EAAaE,OACV,MAAMC,KAAmBH,EAAaE,GAAa,OAChDz+C,EAAQ2+C,GAAoB/9C,EAAO3M,EAASwqD,EAAYF,EAAcG,GAC/D,MAAT1+C,GACFw+C,EAAO/7D,KAAKud,UAKbw+C,EAGT,SAASI,GAAQb,EAAsC9pD,SAC/CnL,KAACA,GAAQi1D,SACX1oC,GAAYvsB,GACP,CACLmZ,MAAOC,GAAQpZ,EAAM,CAACuX,KAAM,UAC5B5M,MAAO3K,EAAK2K,OAAS,aAEdjR,UAAQsG,GACV,CACLmZ,MAAOq7C,GAAoBS,EAAe9pD,EAAS,CAACoM,KAAM,UAC1D5M,MAAO,aAGF,CACLwO,MAAOC,GAAQ67C,EAAe,CAAC19C,KAAM,UACrC5M,MAAO3K,GAAQ,aAKd,SAAS+1D,GACdd,EACA9pD,EACA+M,SAEMwS,OAACA,EAADF,WAASA,EAATyJ,WAAqBA,EAArBoO,YAAiCA,EAAjChR,YAA8CA,EAA9CmF,UAA2DA,GAAao+B,GAC5E,CAAC,SAAU,aAAc,aAAc,cAAe,cAAe,aACrEK,EAActlC,OACdzX,EACA/M,GAGI6qD,EAAgBrrC,GAAgB,CACpCxB,gBAAiB8rC,EACjBvqC,OAAAA,EACAF,WAAAA,EACAjT,KAAM,SACNW,OAAAA,IACCV,OACG29C,EAAgBV,GAAiBtpD,EAASkmB,SAEzC,CACLzmB,KAAM,CACJ4M,OAAQgf,EACJ3wB,EACEA,EAAW2wB,EAAW,cAAew/B,GACrC,cACA58C,GAAQ67C,EAAe,CAAC19C,KAAM,YAEhCy+C,MAEU,QAAZ7qD,EAAoB,CAACmI,OAAQ,QAAU,GAC3C+E,MAAO,cACPjF,MAAO,WACJiiD,GAA2BphC,EAAYkhC,MACvCG,GAAwBH,EAAelhC,EAAYoO,MACnDkzB,GAAyBr9C,EAAQ+8C,EAAe9pD,EAASo3B,GAAyBH,KAIlF,SAASyzB,GACd/9C,EACA3M,EACAwqD,EACAF,EACAG,MAEIA,EAAiB,KACf1mC,EAAQ,WACN+lC,cAACA,GAAiBQ,EAClBv9C,EAASJ,EAAMI,OAASJ,EAAMI,YAASzY,KACzCw1D,GAAiBW,EAAgBphC,OAAQ,OACrCnD,YAACA,GAAeujC,GAAoB,CAAC,eAAgBK,EAActlC,OAAQzX,EAAQ/M,IAI1E,QAAZA,IAAsBjJ,EAAS,CAAC,MAAO,UAAWmvB,IACtC,WAAZlmB,IAAyBjJ,EAAS,CAAC,OAAQ,SAAUmvB,MAEtDnC,EAAQ6mC,GAAmBd,EAAe9pD,EAAS+M,UAIjD+9C,EAAuBhP,GAAanvC,KAAW2U,GAAe3U,EAAMvM,OAEpE83C,EAAOuS,EAAgBvS,KAEvB6S,GAAU7S,MAAAA,SAAAA,EAAM9mD,QAAS,KAC3B2yB,GAASgnC,EAAS,OACdlpC,EAA0B,QAAZ7hB,EAAoB,SAAW,cAE5C,CACLzE,KAAMoR,EAAMkhC,QAAS,GAAE7tC,KAAWwqD,KAClCv7D,KAAM,QACNg7D,KAAO,GAAEjqD,KAAWwqD,OAEhBF,EAAaR,cACb,CACE5kB,KAAM,CAACxxC,KAAMiZ,EAAMkhC,QAAS,GAAE7tC,aAC9BnL,KAAM81D,GAAQb,EAAe9pD,IAE/B,MACA+qD,GAAWD,EACX,CACE5lB,KAAM,CAACxxC,KAAMiZ,EAAMkhC,QAAS,gBAAe7tC,OAE7C,MAEA+jB,EAAQ,CAACA,MAAAA,GAAS,MAClB0mC,EAAgBO,WAChB,CACEntC,OAAQ,CACN8a,OAAQ,EACL9W,GAAc4oC,EAAgBO,cAIrC,MACAD,EAAU,CAAC7S,KAAAA,GAAQ,YAItB,KAGT,MAAM+S,GAAoB,CACxB9qD,OAAQ,CACNie,MAAO,EACPvJ,IAAK,GAEP3U,IAAK,CACHke,MAAO,EACPvJ,IAAK,IAIF,SAASq2C,GAAmBlhC,EAA0BggC,UACpDiB,GAAkBjB,GAAehgC,GA8BnC,SAASogC,GACdr9C,EACA+8C,EACA9pD,EACAw9C,EACA2N,SAEMj1D,EAAQ,OACT,MAAMC,KAAQqnD,EAAY,KACxB2N,EAAch1D,kBAIbvI,EAAQ27D,GAAkBpzD,EAAM2zD,MAAAA,SAAAA,EAAetlC,OAAQzX,EAAQ/M,QACvD1L,IAAV1G,IACFsI,EAAMi1D,EAAch1D,IAASvI,UAG1BsI,EClRF,SAASk1D,GAAsBz+C,SAC7B,IACF0+C,GAAY1+C,EAAO,YACnB0+C,GAAY1+C,EAAO,aACnB0+C,GAAY1+C,EAAO,iBACnB0+C,GAAY1+C,EAAO,gBAInB,SAAS0+C,GAAY1+C,EAAchK,SAClC3C,EAAuB,UAAb2C,EAAuB,IAAM,IACvCrK,EAAOqU,EAAMwgC,UAAUme,WAAWhuC,IAAI3a,OACvCrK,GAAiB,WAATA,QACJ,SAIHiD,EAAOoR,EAAMgmC,iBAAiBhwC,GAAU0J,UAEjC,SAAT/T,EAAiB,OACb+gD,EAAiB1sC,EAAMskC,kBAAkBjxC,MAE3Cq5C,EAAgB,OACZpqD,EAAOoqD,EAAe/7B,IAAI,QAC1BlU,EAAQiwC,EAAe/7B,IAAI,YAE7BjE,GAAkBpqB,IAASka,GAAcC,GAAQ,OAC7CwU,EAAYjR,EAAMiR,UAAU5d,MAE9B87C,GAAanvC,EAAMld,QAAS,IAKO,gBADfkd,EAAMld,OAAO09C,UAAU98C,QAC3B8sB,MAAMnd,SACf,CAACurD,GAAW3tC,EAAWxU,UAI3B,CACLmiD,GAAW3tC,EAAWxU,GACtB,CACE7N,KAAAA,EACAo9B,OAAQ6yB,GAAS5tC,EAAWy7B,EAAiB,WAAUz7B,uBAMzD,IAAItsB,MAAM,0DACX,GAAY,aAARgH,EAAqB,OACxBmzD,EAAUlwD,EAAKmwD,SAAS,SACxBt/C,EAAOq/C,EAAU,qBAAuB,qBAExCE,EAAY,YAAWv/C,QAAWA,OADnBotB,GAA4B7sB,EAAMI,OAAO+sB,KAAM2xB,EAAU,QAAU,kBAEjF,CAAC,CAAClwD,KAAAA,EAAMm9B,KAAMizB,EAAU/zB,GAAI,CAAC,CAACe,OAAQgzB,EAAUle,OAAQ,0BAExD,CACL,CACElyC,KAAAA,EACA3N,MAAO0K,IAMf,SAASizD,GAAW3tC,EAAmBxU,SAC9B,CACL7N,KAAO,GAAEqiB,SACThwB,MAAOwb,EAAMgd,MAIV,SAASolC,GAAS5tC,EAAmBy7B,EAAgCuS,SACpE38D,EAAOoqD,EAAe/7B,IAAI,QAC1B5C,EAAU2+B,EAAe/7B,IAAI,WAC7B1C,EAAe7f,EAAgBs+C,EAAe/7B,IAAI,gBAAiB5C,OAErEC,EAAe0+B,EAAe/7B,IAAI,uBACtC3C,EACW,SAAT1rB,OAEqBqF,IAAjBqmB,EACEA,EACAD,IAIA,aAAYkxC,MAAgBn/C,GAAoBkO,OAAkBlO,GACxEmO,SACMgD,SClFH,SAASiuC,GAA8BC,SAClB,eAAnBA,EAAkC,QAA6B,gBAAnBA,EAAmC,SAAWA,ECZ5F,SAASC,GAAiB/lC,EAA8BrZ,UACtD/X,EAAKoxB,GAAU93B,QAAO,CAAC2vB,EAAQ7d,WAC9BgsD,EAAWhmC,EAAShmB,SACnB,IACF6d,KACA21B,GAAc7mC,EAAOq/C,EAAUhsD,GAASojB,GAAO9W,GAAiB8W,EAAIx1B,YAExE,ICTE,SAASq+D,GAAoBjsD,EAAuB2M,MACrDmvC,GAAanvC,SACI,UAAZ3M,EAAsB,cAAgB,SACxC,GAAI2xC,GAAahlC,SACf,SACF,GAAIu/C,GAAcv/C,UAChBpK,GAAOvC,IAAwB,UAAZA,GAAmC,WAAZA,EAAuB,cAAgB,eAGpF,IAAI1O,MAAM,kCAGX,SAAS66D,GAAkB97D,EAAkB2P,SAC5CosD,EAAsB/7D,EAAQ8sB,MAAMnd,GACpC0kB,EAAQniB,GAAOvC,GAAW,OAAS,eAEb,gBAAxBosD,GAC8B,WAA5B/7D,EAAQq0B,GAAO1kB,IACjByS,G3FiRC,SAA+CzS,SAC5C,4CAA2CA,6E2FlRtCyS,CAAkDzS,IAEtD,eAGF3P,EAAQq0B,GAAO1kB,IAAY,SChBpC,MAiBaqsD,GAA8Bz3D,EAjB+B,CpE6LxE4U,KAAM,EACN8iD,WAAY,EACZC,cAAe,EACfjzB,QAAS,EACTjuB,aAAc,EACdvL,YAAa,EACb0sD,UAAW,EACXC,UAAW,EACXltC,OAAQ,EACRF,WAAY,EACZqtC,eAAgB,EAChBC,gBAAiB,EACjBC,oBAAqB,EACrBC,oBAAqB,EACrBC,kBAAmB,EACnBC,UAAW,EACXnmC,WAAY,EACZE,cAAe,EACfC,WAAY,EACZC,UAAW,EACXC,cAAe,EACfC,eAAgB,EAChBC,gBAAiB,EACjB+B,WAAY,EACZ7B,YAAa,EACbD,aAAc,EACdgC,aAAc,EACd9B,aAAc,EACdgC,gBAAiB,EACjB0jC,QAAS,EACTC,QAAS,EACT/kD,OAAQ,EACRC,OAAQ,EACRuS,QAAS,EACTwyC,WAAY,EACZC,YAAa,EACbC,WAAY,EACZC,iBAAkB,EAClBC,gBAAiB,EACjBC,YAAa,EACbC,aAAc,EACdC,cAAe,EACfC,WAAY,EACZC,kBAAmB,EACnBC,kBAAmB,EACnBC,WAAY,EACZ9iC,UAAW,EACXpB,YAAa,EACb5F,MAAO,EACPgG,WAAY,EACZC,YAAa,EACbE,cAAe,EACfC,WAAY,EACZC,UAAW,EACXC,cAAe,EACfC,eAAgB,EAChBC,gBAAiB,EACjBC,WAAY,EACZC,gBAAiB,EACjBC,aAAc,EACdvE,YAAa,EACbwE,aAAc,EACd17B,KAAM,EACN+I,OAAQ,EACRkzB,OAAQ,EoE3PRw6B,QAAS,EACTr6B,UAAW,EACX0a,WAAY,EAEZ7mC,QAAS,EACTK,MAAO,EACPN,OAAQ,EACRD,KAAM,EACN1G,KAAM,EACN+G,YAAa,EACbC,WAAY,EAEZue,OAAQ,IAKH,MAAMiwC,WAAwB9kB,ICA9B,MAAM+kB,GAET,CACFz7D,QAMK,SACL07D,GACAhwC,gBAACA,EAADrR,MAAkBA,EAAlB3M,QAAyBA,EAAzBiuD,WAAkCA,EAAlCC,WAA8CA,OAE3B,WAAfA,eAIEphD,QAACA,EAADkZ,SAAUA,EAAVjZ,OAAoBA,EAApBrJ,KAA4BA,GAAQiJ,EACpCyP,EAAStP,EAAQsP,QAAmB,UAAT1Y,MAE7BjP,EAAM,IACLiY,GAAgB,GAAIC,EAAOuP,OAC3BiyC,GAAaxhD,EAAO,CAACyP,OAAAA,WAGpBqxC,EAAgBQ,EAAW3wC,IAAI,kBAAoBvQ,EAAOwX,OAAOkpC,cACjEH,EAAkBW,EAAW3wC,IAAI,oBAAsBvQ,EAAOwX,OAAO+oC,gBACrEK,EAAoBM,EAAW3wC,IAAI,sBAAwBvQ,EAAOwX,OAAOopC,kBAEzEzuD,OAA4B5K,IAAlBm5D,EAA8BW,GAAYpoC,EAAS9mB,UAAY4N,EAAQ5N,aAAU5K,KAE7FG,EAAIuK,QAEU,SAAZgB,GAAuBoc,GAAUpc,IAAYnD,UACxCpI,EAAIuK,aAEPvK,EAAIuK,KAAJ,MAEEsuD,SACK74D,EAAIuK,MAEXvK,EAAIuK,KAAOsN,GAAiBS,EAAOwX,OAAO8pC,qBAAuB,SACjE55D,EAAI0K,YAAcmN,GAAiBpN,GAAW,SAE3C,GAAI3Q,UAAQkG,EAAIuK,MAAO,OACtBA,EACJsvD,GAAuBtoC,EAAShnB,MAAQgnB,EAASjnB,QAAU+N,EAAQ9N,OAASod,GAAUtP,EAAQ/N,OAC5FC,IACFvK,EAAIuK,KAAOsN,GAAiBtN,OAMhCvK,EAAIwK,UACU,WAAZe,IAA0Boc,GAAUpc,IAAYnD,UAC3CpI,EAAIwK,eAEPxK,EAAIwK,OAAJ,OAAuB0uD,SAElBl5D,EAAIwK,YACN,GAAI1Q,UAAQkG,EAAIwK,QAAS,OACxBA,EAASlE,EACbuzD,GAA0CtoC,EAAS/mB,QAAU+mB,EAASjnB,OACtE+N,EAAQ7N,OACRmd,EAAStP,EAAQ/N,WAAQzK,GAEvB2K,IACFxK,EAAIwK,OAAS,CAACrR,MAAOqR,OAMzBe,IAAY7C,GAAS,OACjB+O,EAAYmR,GAAWW,IAAoBuwC,GAAkB5hD,EAAOshD,EAAYjwC,GAElF9R,EACFzX,EAAIyK,QAAU,CACZ,CAACue,KAAMvR,KAAcI,GAAiBpN,GAAW,IACjDoN,GAAiBS,EAAOwX,OAAO8W,oBAExBn8B,IACTzK,EAAIyK,QAAUoN,GAAiBpN,WAInCzK,EAAM,IAAIA,KAAQu5D,GAEXh1D,EAAQvE,QAAOH,EAAYG,GArFlC+5D,SAwFK,SAAkBC,GAAmB9hD,MAACA,EAADuhD,WAAQA,EAARD,WAAoBA,OAC3C,aAAfC,eAIEnhD,OAACA,EAADD,QAASA,EAATkZ,SAAkBA,GAAYrZ,MAEhClY,EAAyB,SAGvByK,OAA8B5K,KADZ25D,EAAW3wC,IAAI,oBAAsBvQ,EAAOwX,OAAOooC,iBAC3ByB,GAAYpoC,EAAS9mB,UAAY4N,EAAQ5N,aAAU5K,EAC/F4K,IAEFzK,EAAIyK,QAAUoN,GAAiBpN,WAGjCzK,EAAM,IAAIA,KAAQg6D,GACXz1D,EAAQvE,QAAOH,EAAYG,UAG7B,SAAgBi6D,GAA0B1wC,gBAACA,EAADrR,MAAkBA,EAAlB3M,QAAyBA,EAAzBiuD,WAAkCA,UAC3E1pC,EAAS5X,EAAM4X,OAAOvkB,IAAY,GAClC+M,EAASJ,EAAMI,OAEfb,EAAYmR,GAAWW,GAAmBuwC,GAAkB5hD,EAAOshD,EAAYjwC,QAAmB1pB,EAClG4K,EAAUgN,EAAY,CAAC,CAACuR,KAAMvR,EAAWte,MAAO,GAAI,CAACA,MAAOmf,EAAOwX,OAAO8W,yBAAsB/mC,GAEhGirB,OAACA,EAADF,WAASA,GAAckF,EAEvB9kB,EAAO2f,GAAmBC,GAC5BK,GAAiB,CACf1B,gBAAAA,EACAhQ,MAAO,cACPuR,OAAAA,EACAF,WAAAA,EACAtS,OAAAA,SAEFzY,EAEEq6D,EAAa,IACbzvD,EAAU,CAACA,QAAAA,GAAW,MACtBO,EAAO,CAACA,KAAAA,GAAQ,MACjBivD,UAGE11D,EAAQ21D,QAAcr6D,EAAYq6D,GAnIzCr3D,QAsIK,SAAiBs3D,GAAkBX,WAACA,UACnCloB,EAAakoB,EAAW3wC,IAAI,qBAC3ByoB,MAAAA,GAAAA,EAAY30C,OAAS,IAAIw9D,EAAa5vD,KAAM,CAACpR,MAAO,gBAAkBghE,IAG/E,SAASR,GAAYlxC,UACZ2xC,GAA0B3xC,GAAY,CAAC/kB,EAAW22D,IAAmBC,KAAK3pD,IAAIjN,EAAG22D,EAAelhE,SAGlG,SAAS0gE,GACdpxC,UAEO2xC,GAAqB3xC,GAAY,CAAC/kB,EAAM22D,IACtC/zD,EAAmB5C,EAAG22D,EAAelhE,SAIhD,SAASihE,GACP3xC,EACA8xC,UjF2dK,SACL9xC,SAEMhR,EAAYgR,GAAcA,EAAU,kBACjChR,IAAc3d,UAAQ2d,IAAc8S,GAAW9S,IiF7dpD+iD,CAAuB/xC,GAClBlmB,QAAMkmB,EAAWhR,WAAWhe,OAAO8gE,EAAS9xC,EAAWtvB,OACrDoxB,GAAW9B,GACbA,EAAWtvB,WADb,EAMT,SAAS2gE,GAAkB5hD,EAAkBshD,EAA6B79C,SAClE21B,EAAakoB,EAAW3wC,IAAI,iBAC7ByoB,MAAAA,IAAAA,EAAY30C,OAAQ,aAEnB4c,EAAQ3T,cAAY+V,EAASpC,cAC5B+3B,EACJl3C,KAAI0M,GAEK,iBADMlB,cAAYlB,EAAQoC,GAAQmyC,aACHnyC,KAAQyS,iBAAqBzS,KAAQyS,4BAE7EzX,KAAK,QChLH,MAAM24D,GAET,CACF1C,UAAW,EAAEA,UAAAA,KAAeA,EAE5BjtC,OAAQ,EAAEvB,gBAAAA,EAAiBuG,OAAAA,EAAQxX,OAAAA,YAC3BwS,OAACA,EAADF,WAASA,GAAckF,SACtB9D,GAAYzC,EAAiBA,EAAgB/uB,KAAMswB,EAAQF,EAAYtS,GAAQ,IAGxFsS,WAAY,EAAEkF,OAAAA,EAAQvG,gBAAAA,EAAiBjN,UAAAA,YAC/BsO,WAACA,GAAckF,SACd3D,GAAgBvB,EAAYrB,EAAiBjN,IAGtD27C,eAAgBr3C,UACRkP,OAACA,EAAD4qC,aAASA,GAAgB95C,SACxBkP,EAAOmoC,gBAAkByC,EAAazC,gBAoJ1C,UAA+ByC,aACpCA,EADoCxiD,MAEpCA,EAFoC6/C,UAGpCA,EAHoCrkD,OAIpCA,EAJoC4I,UAKpCA,UAQMkqB,4BACJA,EADIC,4BAEJA,EAFIC,0BAGJA,EAHIC,0BAIJA,GACE+zB,KACA51C,GAAyBxI,SACT,eAAdy7C,EACa,QAAXrkD,GAA+B,WAAXA,EACfinD,GAAqBziD,EAAO,QAASuuB,EAA6BD,GAElEC,EAIFk0B,GAAqBziD,EAAO,SAAUyuB,EAA2BD,UAhLXk0B,CAAsBh6C,IAGvF+T,aAAc,EAAE7E,OAAAA,EAAQ4qC,aAAAA,EAAcp+C,UAAAA,KACpCwT,EAAO6E,cAAgB+lC,EAAa/lC,cAuLjC,SAA6BrY,MAC9Bha,EAAS,CAAC,WAAY,YAAa,MAAO,UAAWga,SAChD,gBAzL6Cy3C,CAAoBz3C,GAE1E88C,WAAY,EAAEtpC,OAAAA,EAAQzX,QAAAA,EAAS9M,QAAAA,EAASgmB,SAAAA,KACtCzB,EAAOspC,YA6BJ,SACLnqD,EACA1D,EACAsvD,EACAC,MAEgB,UAAZvvD,EAAqB,OAEjBT,EAAQ+uD,GAA+BgB,IAAoBC,KAC7DhwD,SACKA,SAIHmE,OACD,UACA,WACA,YACA,eACI,aACJ,WACA,YACA,aACI,aACJ,UACA,YACA,aACA,WACA,eACA,WACA,aACI,UA5DY8rD,CAAkB1iD,EAAQ7d,KAAM+Q,EAASgmB,EAASzmB,MAAOuN,EAAQvN,OAExFwkB,MAAO,EAAE/F,gBAAAA,EAAiBjR,OAAAA,KAAY27C,GAAc1qC,EAAiBjR,EAAQ,CAACiX,gBAAgB,IAE9F/0B,KAAM,EAAEi/D,WAAAA,EAAYn9C,UAAAA,EAAW/Q,QAAAA,SACzBD,GAAeC,IAAYuZ,GAAyBxI,OACnC,aAAfm9C,cAGC,GAAmB,WAAfA,gBAGJA,GAGTl2D,OAAQ,EAAEgmB,gBAAAA,EAAiBuG,OAAAA,KAGtB,SAAgBA,EAAwBvG,SACvC/kB,EAAOsrB,EAAOvsB,UAEhBzJ,UAAQ0K,UACHwtB,GAAWzI,EAAiB/kB,GAC9B,GAAIiQ,GAAYjQ,UACdA,SAT8BjB,CAAOusB,EAAQvG,IAwDjD,SAASyxC,GAAcp6C,SAMtBkP,OAACA,GAAUlP,SAEVta,EAAgBwpB,EAAOt1B,KAGzB,UAAqB+Q,QAC1BA,EAD0B2T,SAE1BA,EAF0B5C,UAG1BA,OAQIhR,GAAeC,GAAU,IACvBjJ,EAAS,CAAC,UAAW,QAAS,OAAQ4c,SACjC,YAGL4F,GAAyBxI,SACpB,iBAGJ,SAvB6B2U,CAAYrQ,IA0B3C,SAASq6C,IAAaP,aAC3BA,EAD2BjB,WAE3BA,EAF2B/lD,OAG3BA,EAH2Boc,OAI3BA,WAQEA,EAAOioC,WACP2C,EAAajB,EAAa,oBAAsB,oBAK7C,SAA0B/lD,EAAsB+lD,UAC7C/lD,OACD,UACA,eACI,iBAEJ,WACA,YACA,iBACA7T,uBAKmB,aAAf45D,EAA4B,kBAAe55D,GAlBpDq7D,CAAiBxnD,EAAQ+lD,GAwD7B,SAASkB,GAAqBziD,EAAchK,EAA8B4C,EAAaH,SAE9E,CAACiH,OAAS,SADEM,EAAMgmC,iBAAiBhwC,GAAU0J,WACZ9G,MAAQH,MCzN3C,SAASwqD,GAAYjjD,SACpBkjD,EAAkBC,GAAYnjD,GAKtC,SAAyBA,SACjBqZ,SAACA,GAAYrZ,EAEbkjD,EAAwC,OAEzC,MAAM7vD,IAAW,CAACnD,MAAU46B,IAAwB,OACjDrU,EAAMwB,GAAmBoB,EAAShmB,IAEnCojB,GAAQzW,EAAMskC,kBAAkBjxC,KAIjCA,IAAYhD,IAASqgB,GAAW+F,IAAQA,EAAIn0B,OAASuoB,KAIzDq4C,EAAgB7vD,GAAW+vD,GAAsBpjD,EAAO3M,YAGnD6vD,EAxBsCG,CAAgBrjD,GA4J/D,SAA4BA,SACpBivC,QAACA,EAADvrD,QAAUA,GAAWsc,EAAMwgC,cAE5B,MAAMh9C,KAASwc,EAAMijC,SAAU,CAClCggB,GAAYz/D,OAEP,MAAM6P,KAAWpL,EAAKzE,EAAMg9C,UAAUyO,SACzCvrD,EAAQk0B,OAAOvkB,GAAWmsD,GAAkBx/C,EAAMwgC,UAAU98C,QAAS2P,GAErC,WAA5B3P,EAAQk0B,OAAOvkB,KAIjB47C,EAAQ57C,GAAWiwD,GAAqBrU,EAAQ57C,GAAU7P,EAAMg9C,UAAUyO,QAAQ57C,IAE7E47C,EAAQ57C,KAGX3P,EAAQk0B,OAAOvkB,GAAW,qBACnB47C,EAAQ57C,SAMlB,MAAMA,KAAWpL,EAAKgnD,OACpB,MAAMzrD,KAASwc,EAAMijC,SACnBz/C,EAAMg9C,UAAUyO,QAAQ57C,IAKG,WAA5B3P,EAAQk0B,OAAOvkB,WAEV7P,EAAMg9C,UAAUyO,QAAQ57C,UAK9B47C,EAnM+DsU,CAAmBvjD,UACzFA,EAAMwgC,UAAUyO,QAAUiU,EACnBA,EA2CT,SAASM,GACPviE,EACAiK,EACA0sB,EACAnU,UAEQvY,OACD,sBACevD,IAAXiwB,MACJ,iBAEMA,MAAAA,IAAAA,EAAQvsB,YACd,WAEc,UAAbH,GAAwBjK,KAAUwiB,MAAAA,SAAAA,EAAU2T,cACvC,SAINn2B,KAAW22B,GAAU,IAAI1sB,GAG3B,SAASk4D,GAAsBpjD,EAAkB3M,eAClDukB,EAAS5X,EAAM4X,OAAOvkB,SAEpB8M,QAACA,EAADkZ,SAAUA,EAAVjZ,OAAoBA,GAAUJ,EAC9BwiD,EAAepiD,EAAOwX,OACtB0pC,EAAa,IAAIH,GAAgB,GA7CzC,SAA+BnhD,EAAkB3M,SACzCmd,EAAQxQ,EAAMiR,UAAU5d,MACX,UAAf2M,EAAMjJ,KAAkB,IACV,UAAZ1D,QAEK,CAACf,OAAQke,GACX,GAAgB,SAAZnd,QACF,CAACX,YAAa8d,SAIT,UAAZnd,EACK2M,EAAMG,QAAQsP,OAAS,CAACpd,KAAMme,GAAS,CAACle,OAAQke,GAElD,EAAEnd,GAAUmd,GA+BwBizC,CAAsBzjD,EAAO3M,KvB0BnE,SACL2M,EACA3M,EACAiuD,eAEMjgD,YAAQrB,EAAMyD,SAASpQ,uBAAfqwD,EAAyBriD,UAClC,MAAMk/B,KAAWj0C,EAAK0T,EAAMwgC,UAAU7R,WAAa,IAAK,OACrDmV,EAAOvD,EAAQsD,QAAQD,SAASviC,IAAUk/B,EAAQsD,QAAQF,WAAWtwC,MACvEywC,GAAQ+J,GAAejN,QAAQL,GAAU,OACrCojB,EAAmBrC,EAAW3wC,IAAI,eAAiB,GACzDgzC,EAAiB9hE,KAAK0+C,EAAQ3xC,MAC9B0yD,EAAWj8D,IAAI,aAAcs+D,GAAkB,GAC/C7f,EAAKU,WAAY,IuBrCrBof,CAAuB5jD,EAAO3M,EAASiuD,SAEjCvI,OAAqBpxD,IAAXiwB,GAAwBA,EAAS4qC,EAAazJ,WAC9DuI,EAAWj8D,IAAI,UAAW0zD,OAAoBpxD,IAAXiwB,GAC/BmhC,SACKuI,EAGT1pC,EAASA,GAAU,SAEbxT,EAAYpE,EAAMskC,kBAAkBjxC,GAASsd,IAAI,QACjDU,EAAkB4G,GAAmBoB,EAAShmB,IAC9C2T,EAAW0J,GAAWW,aAAmB5I,GAAkB4I,EAAgBrK,8BAAlC+C,EAA6C9C,UAAOtf,EAE7F6T,EAASoc,EAAOpc,QAAU4E,EAAOwX,OAAOpc,QAAU,QAClD+lD,EAAauB,GAAc,CAAClrC,OAAAA,EAAQvkB,QAAAA,EAAS2T,SAAAA,EAAU5C,UAAAA,IAIvDy/C,EAA+B,CACnCjsC,OAAAA,EACAvkB,QAAAA,EACA2M,MAAAA,EACAG,QAAAA,EACAkZ,SAAAA,EACAhI,gBAAAA,EACAmxC,aAAAA,EACApiD,OAAAA,EACAgE,UAAAA,EACA5I,OAAAA,EACA+lD,WAAAA,EACA1B,UAdgBkD,GAAa,CAACnrC,OAAAA,EAAQ2pC,WAAAA,EAAY/lD,OAAAA,EAAQgnD,aAAAA,SAiBvD,MAAMt3D,KAAYw0D,GAA6B,IAEhC,aAAf6B,GAA6Br2D,EAAS4D,WAAW,WAClC,WAAfyyD,GAA2Br2D,EAAS4D,WAAW,2BAK5C7N,EAAQiK,KAAYq3D,GAAcA,GAAYr3D,GAAU24D,GAAcjsC,EAAO1sB,WACrEvD,IAAV1G,EAAqB,OACjBohB,EAAWmhD,GAAWviE,EAAOiK,EAAU0sB,EAAQ5X,EAAMyD,SAASpQ,KAChEgP,QAAwC1a,IAA5ByY,EAAOwX,OAAO1sB,KAC5Bo2D,EAAWj8D,IAAI6F,EAAUjK,EAAOohB,UAKhCyhD,aAAiBlsC,wBAAQyB,WAAY,GACrC+f,EAAakoB,EAAW3wC,IAAI,cAC5BozC,EAA6B,GAE7BC,EAAyC,CAAC3yC,gBAAAA,EAAiBrR,MAAAA,EAAO3M,QAAAA,EAASiuD,WAAAA,EAAYC,WAAAA,OAExF,MAAMr8C,IAAQ,CAAC,SAAU,SAAU,QAAS,UAAW,WAAY,WAAY,OAC5E++C,EAAqB7E,GAAiB0E,EAAe5+C,IAAS,GAAIlF,GAElE/e,EACJikB,KAAQk8C,GACJA,GAAkBl8C,GAAM++C,EAAoBD,GAC5CC,OAEQt8D,IAAV1G,GAAwBoL,EAAQpL,KAClC8iE,EAAa7+C,GAAQ,IACfk0B,MAAAA,GAAAA,EAAY30C,QAAUisB,GAAWW,GACjC,CAACziB,KAAO,GAAEpC,EAAQ6kB,EAAgBhQ,iBAAiB6D,KACnD,MACAk0B,MAAAA,GAAAA,EAAY30C,OAAS,CAACuoD,cAAe5T,GAAc,GACvDpN,OAAQ/qC,UAKToL,EAAQ03D,IACXzC,EAAWj8D,IAAI,SAAU0+D,cAAgBnsC,iBAAAssC,EAAQ7qC,kBAG5CioC,EA6CF,SAASgC,GAAqBa,EAA+BC,OAC7DD,SACIC,EAAYjiE,cAEfkiE,EAAeF,EAAa3nB,gBAAgB,UAC5C8nB,EAAcF,EAAY5nB,gBAAgB,aAE5C6nB,EAAahiD,UAAYiiD,EAAYjiD,UAAYgiD,EAAapjE,QAAUqjE,EAAYrjE,iBAMpFsjE,GAAa,MAEZ,MAAM/6D,KAAQk2D,GAA6B,OACxC8E,EAA0BnnB,GAC9B8mB,EAAa3nB,gBAAgBhzC,GAC7B46D,EAAY5nB,gBAAgBhzC,GAC5BA,EACA,WAGCyY,EAAmBC,YACV1Y,OACD,oBACIi7D,GAAgBxiD,EAAIC,OACxB,eACIF,GAAoBC,EAAIC,OAC5B,cAEHqiD,GAAa,EACNxnB,GAAa,iBAEjBK,GAA6Cn7B,EAAIC,EAAI1Y,EAAM,aAGtE26D,EAAa1nB,gBAAgBjzC,EAAMg7D,eAEjCD,cACEJ,EAAa7nB,iCAAbooB,EAAuBxzC,qBAAvByzC,EAA+B9C,UACjC/0D,EAAqBq3D,EAAa7nB,SAAU,CAAC,SAAU,uBAErD6nB,EAAa9hD,iCAAbuiD,EAAuB1zC,qBAAvB2zC,EAA+BhD,UACjC/0D,EAAqBq3D,EAAa9hD,SAAU,CAAC,SAAU,qBAIpD8hD,EAGT,SAASM,GAAgBK,EAAuBC,SAC5B,WAAdA,EAAI9jE,MAEC8jE,EAEFD,EC3PF,SAASE,GAAgBhlD,SACxBilD,EAAuBjlD,EAAMwgC,UAAUyO,QACvCiW,EAAoD,OAErD,MAAM7xD,KAAWpL,EAAKg9D,GAAuB,OAC1CvY,EAAiB1sC,EAAMskC,kBAAkBjxC,GACzC8xD,EAAa19D,EAAUilD,EAAe/7B,IAAI,eAC5Cu0C,EAAeC,OACZ,MAAMC,KAAyBF,EAAeC,GAAa,CAC/C7B,GAAqB8B,EAAuBH,EAAqB5xD,KAG9E6xD,EAAeC,GAAYtjE,KAAKojE,EAAqB5xD,SAIzD6xD,EAAeC,GAAc,CAACF,EAAqB5xD,GAASlR,gBAIhDmK,EAAK44D,GAClBrkE,OACAqB,KAAImjE,GAMF,SAAwB/D,EAA6BlhD,eACpD24C,QAACA,EAADr6B,UAAUA,EAAV0a,WAAqBA,KAAexhB,GAAU0pC,EAAW/kB,aAE3Dwc,UAIgB,IAAhB34C,EAAOvD,MAAiClV,MAAfiwB,EAAO/a,OAClC+a,EAAO/a,MAAO,gBAGZ+a,EAAO1G,qBAAPo0C,EAAe3/D,QAAS,OACpBmC,EAAM8vB,EAAO1G,OAAOvrB,QAAQqmC,QAC9BlkC,EAAIuK,MAA8B,gBAAtBvK,EAAIuK,KAAJ,OAAwCvK,EAAIwK,QAAWslB,EAAOtlB,SAE5ExK,EAAIwK,OAAS,CAACrR,MAAO,oBAIlB,MAAMiK,KAAY4/B,GACjBlT,EAAO1sB,WACFpD,EAAIoD,GAKZ0sB,EAAOR,cAEHQ,EAAOR,cAGEzvB,IAAd+2B,EAAyB,aACvBjf,EAAOif,YACP9G,EAAO1G,iCAAQwL,uBAAQsP,QAAUzvB,GAAYqb,EAAO1G,OAAOwL,OAAOsP,OAAOl5B,QAC3E2M,EAAO1R,EAAW2wB,EAAW,cAAe9G,EAAO1G,OAAOwL,OAAOsP,OAAOl5B,KAAK4M,SA3EnF,SACEkY,EACA1S,EACAgV,EACA0+B,WAEAhhC,EAAO1G,SAAP0G,EAAO1G,OAAW,OAClB0G,EAAO1G,QAAOhM,OAAAA,GAAU,OACxB0S,EAAO1G,OAAOhM,IAAM8mB,WAAAA,OAAW,IAE9BpU,EAAO1G,OAAOhM,GAAM8mB,OAAO9R,GAAkB0+B,EAmE5C2M,CAAgB3tC,EAAQ,SAAU,OAAQ,CAAClY,OAAQD,WAG9CmY,EA7CK4tC,CAAeH,EAAGrlD,EAAMI,UACjC0H,QAAOu9C,QAAW19D,IAAN09D,ICxCV,SAASI,GAAoBzlD,UAC9BglC,GAAahlC,IAAUu/C,GAAcv/C,GAOpC,SAAgDA,UAC9CA,EAAMijC,SAAS1hD,QAAO,CAACmkE,EAAaliE,IAClCkiE,EAAYplD,OAAO9c,EAAMiiE,wBAC/BE,GAA2B3lD,IATrB4lD,CAAuC5lD,GAEvC2lD,GAA2B3lD,GAU/B,SAAS2lD,GAA2B3lD,SACnCwgC,EAAYxgC,EAAMwgC,UAAUhc,eAC7Bgc,GAAaA,EAAU9+B,aACnB,SAGH8iB,EAAagc,EAAUjE,WACvB3tC,KAACA,GAAQ41B,KAEVgc,EAAUz5C,KAWR,OAEC4E,EAAkB,CACtB+T,OAAS,IAAG8gC,EAAU70C,KAAKzJ,KAAI2d,GAAOA,EAAIH,SAAQ9V,KAAK,UAGnDi8D,EAAiBrlB,EAAUz5C,KAAKxF,QAAO,CAACukE,EAAS/+D,WAC/C9C,EAAiBsY,GAAYxV,GAAQA,EAAK2Y,OAAU,SAAQM,EAAM+lD,iBAAiBh/D,cACpFqD,EAAS07D,EAAS7hE,IAErB6hE,EAAQjkE,KAAKoC,GAER6hE,IACN,OAECD,EAAKphE,QAAU,QACX,IAAIE,MAAM,uDAGX,CACL,CACEiK,KAAAA,EACAjD,KAAAA,EACAq6D,IAAK,CACHtmD,OAAQmmD,EAAKphE,OAAS,EAAK,IAAGohE,EAAKj8D,KAAK,SAAWi8D,EAAK,OAEvDrhC,UAnCA,CACL,CACE51B,KAAAA,EAEI0vB,UAAW,CAAC5e,OAAQ,8BAErB8kB,ICPJ,MAAMyhC,GAAuD,CAClE,OACA,YACA,aACA,SACA,SACA,YACA,WACA,WACA,cACA,WACA,WACA,QACA,WACA,SACA,QACA,UACA,QC1CK,MAAMC,WAA4B7pB,GAGvCnzC,YACE0F,EACOu3D,EACAx6D,EACA5E,SAGL,IAAIo/D,IACHv3D,KAAAA,SANIu3D,oBAAAA,OACAx6D,KAAAA,OACA5E,KAAAA,oBANO,uBAkBLtF,KAAKsF,MCVX,SAASq/D,GAAgBpmD,GAC9BA,EAAMwgC,UAAUhc,WAAa2+B,GAAYnjD,GAG3C,SAA6BA,MACvBA,EAAMqmD,cAAe,OACjBviB,EAAO9oC,GAAegF,EAAMmmD,qBAC5BH,IAAQliB,IAAuB,MAAdA,EAAKtzB,OAAmC,MAAlBszB,EAAKxlB,YAC5C3yB,EAAOq6D,EAAM,CAAChmD,EAAMgmC,iBAAiB,SAAUhmC,EAAMgmC,iBAAiB,gBAAar+C,EACnFZ,EAAOi/D,EAsBjB,SAAuBhmD,SACfjZ,EAA+B,IAE/BsyB,SAACA,GAAYrZ,MAEd,MAAMsmD,IAAiB,CAC1B,CAACv2D,GAAWD,IACZ,CAACG,GAAYD,MAETioB,GAAmBoB,EAASitC,EAAc,MAAQruC,GAAmBoB,EAASitC,EAAc,OAC9Fv/D,EAAKlF,KAAK,CACR6d,OAAQM,EAAMkhC,QAAS,WAAUn6C,EAAKtC,YAKxCub,EAAMsgB,gBAAgBjwB,KAAU2P,EAAMi8C,cAAc5rD,IAAO/N,OAASuoB,IACtE9jB,EAAKlF,KAAK,CACR6d,OAAQM,EAAMkhC,QAAS,WAAUn6C,EAAKtC,YAItB,IAAhBsC,EAAKtC,QAEPsC,EAAKlF,KAAKme,EAAMumD,gBAAgBvoB,GAAewoB,cAG1Cz/D,EAjDc0/D,CAAczmD,QAASrY,EAEpC++D,EAAW,IAAIR,GACnBlmD,EAAM2mD,gBAAe,GACrB,IACM3rD,GAAegF,EAAMI,OAAOokB,aAAe,MAC3Csf,GAAQ,IAEdn4C,EACA5E,UAGG2/D,EAAS/1C,IAAI,SAChB+1C,EAASrhE,IAAI,OAAQ,cAAc,GAG9BqhE,SAxByCE,CAAoB5mD,GA6FxE,SAAiCA,MACD,IAA1BA,EAAMijC,SAASx+C,kBAIfoiE,MAGC,MAAMrjE,KAASwc,EAAMijC,SACxBmjB,GAAgB5iE,SAIZsjE,EAAWl8D,EAAMoV,EAAMijC,UAAUz/C,UAC/BghC,EAAahhC,EAAMg9C,UAAUhc,cAC9BA,EAGE,CAAA,GAAKqiC,EAIL,OACC7jB,EAxDZ,SAA2B+jB,EAA4BC,SAC/CC,EAAsBr8D,EAAMq7D,IAAuBz8D,IAElDJ,iBAAe29D,EAAM1kD,SAAU7Y,KAAUJ,iBAAe49D,EAAO3kD,SAAU7Y,OAK5EJ,iBAAe29D,EAAM1kD,SAAU7Y,IAC/BJ,iBAAe49D,EAAO3kD,SAAU7Y,IAEhCR,EAAU+9D,EAAMp2C,IAAInnB,GAAOw9D,EAAOr2C,IAAInnB,UAO7BR,EAAU+9D,EAAMp7D,KAAMq7D,EAAOr7D,MAChC,IACJs7D,SACKF,EACF,GAAI/9D,EAAU+9D,EAAM1kD,SAAU,WAC5B2kD,EACF,GAAIh+D,EAAUg+D,EAAO3kD,SAAU,WAC7B0kD,SAKJ,KA0BWG,CAAkBL,EAAmBriC,UAC/Cwe,IACF6jB,EAAoB7jB,KAEbA,SAPT6jB,EAAoBriC,GACb,SAJA,QAePqiC,GAAqBC,EAAU,OAE3Bl4D,EAAOoR,EAAM2mD,gBAAe,GAC5BQ,EAAkB,IAAIjB,GAC1Bt3D,EACAi4D,EAAkBV,oBAClBU,EAAkBl7D,KAClBtC,EAAUw9D,EAAkB9/D,WAIzB,MAAMvD,KAASwc,EAAMijC,SAAU,OAC5Bze,EAAahhC,EAAMg9C,UAAUhc,WAC/BA,IACEA,EAAW4iC,OACbD,EAAgBpgE,KAAKlF,QAAQ2B,EAAMg9C,UAAUhc,WAAWz9B,MAE1DvD,EAAM6jE,iBAAiB7iC,EAAW7T,IAAI,QAAS/hB,GAC/C41B,EAAW9iB,QAAS,UAIjBylD,SAnJsEG,CAAwBtnD,GCAzG,SAASunD,GAAavnD,EAAuByD,EAAiCpQ,EAAkB+M,MAC1FgS,GAAiB3O,EAAUpQ,GAAU,OAGjC0kB,EAAQorC,GAAYnjD,GACtBA,EAAM2X,KAAKtkB,IAA+B2M,EAAM4X,OAAOvkB,IAAuC,GAC9F,GAEE8gB,EAAa7S,GAAQmC,EAAU,CAAChE,KAAM,UACtC2U,EAAW9S,GAAQmC,EAAU,CAAChE,KAAM,QAAS0S,UAAW,cAEvD,CACLq1C,UAAWlmD,GAAQmC,EAAU,CAAC0O,UAAW,QAASqE,OAAO,IACzDqsB,QAASnvB,GAAoBS,EAAYC,EAAU2D,EAAMnF,OAAQmF,EAAMrF,WAAYtS,UAGhF,GAGT,SAASqnD,GAAOrtD,EAAgBiH,SACtB,GAAElH,GAAYC,MAAQiH,IAUzB,SAASqmD,GAAiB1nD,EAAcqB,EAAejH,SAEtDlV,EAAMuiE,GADUptD,GAAaD,OAAKzS,IAAc,GACpB0Z,UAC3BrB,EAAMkhC,QAAS,GAAEh8C,UAO1B,SAASyiE,GAAmBxmE,EAAyCiZ,EAA0B4F,OACzFkhB,EACA0mC,EAKF1mC,EAXJ,SAAwB//B,SACf,OAAQA,EAOX0mE,CAAe1mE,GACZ6I,WAAS7I,EAAE+/B,IAAM,CAAC//B,EAAE+/B,GAAK,GAAE//B,EAAE+/B,UAAY,CAAC//B,EAAE+/B,GAAG,GAAI//B,EAAE+/B,GAAG,IAExD,CAAC5f,GAAQngB,EAAG,CAACq1B,OAAO,IAAQlV,GAAQngB,EAAG,CAACgxB,UAAW,MAAOqE,OAAO,WAGlEsxC,EAAgB,IAAIztD,GAAaD,OAAKzS,IACtCzC,EAAMuiE,GAAOK,EAAe3mE,EAAEkgB,QAC9B3B,OAACA,EAADqoD,aAASA,GA7BjB,SAA6B/nD,EAAc9a,SAClC,CACLwa,OAAQM,EAAMkhC,QAAS,GAAEh8C,UACzB6iE,aAAc/nD,EAAMkhC,QAAS,GAAEh8C,aA0BF8iE,CAAoBhoD,EAAO9a,MAEtDqV,GAAkButD,EAAcjtD,QAAS,OACrCg+B,EAAMivB,EAAcjtD,OAC1B+sD,EAAOpP,GAAqBx4C,EAAO64B,EAAIjN,MAAOiN,UACvCivB,EAAcjtD,aAYhB,CAAC3V,IAAAA,EAAK+iE,aATsB,CACjC7tD,IAAK0tD,EACLzmD,MAAOlgB,EAAEkgB,MACT6f,GAAI,CAACA,MACDxhB,EAAS,CAACA,OAAAA,GAAU,MACpBqoD,EAAe,CAACA,aAAAA,GAAgB,MAChCH,EAAO,CAACA,KAAAA,GAAQ,KAsBjB,MAAMM,WAAgB9mB,GACpBj/C,eACE,IAAI+lE,GAAQ,KAAM7+D,EAAU5H,KAAK6rB,OAG1CpkB,YAAYpG,EAA8BwqB,SAClCxqB,QADkCwqB,KAAAA,0BAIXxqB,EAAsBkd,SAC7CsN,EAAOtN,EAAM8iC,gBAAe,CAACqlB,EAAuC1kD,EAAUpQ,QAC9E0e,GAAgBtO,IAAajJ,GAAUiJ,EAASrJ,KAAM,OAClDlV,IAACA,EAAD+iE,aAAMA,GAAgBN,GAAmBlkD,EAAUA,EAASrJ,IAAK4F,GACvEmoD,EAAkBjjE,GAAO,IACpB+iE,KACAE,EAAkBjjE,MAClBqiE,GAAavnD,EAAOyD,EAAUpQ,EAAS2M,EAAMI,gBAG7C+nD,IACN,WAEC97D,EAAQihB,GACH,KAGF,IAAI46C,GAAQplE,EAAQwqB,4BAOGxqB,EAAsB3B,EAAiB6e,SAC/D9a,IAACA,EAAD+iE,aAAMA,GAAgBN,GAAmBxmE,EAAGA,EAAEiZ,IAAK4F,UAClD,IAAIkoD,GAAQplE,EAAQ,EACxBoC,GAAM+iE,IAQJjlB,MAAMnG,EAAgBurB,OACtB,MAAMljE,KAAO+C,EAAK40C,EAAMvvB,MACvBpoB,KAAOzD,KAAK6rB,MACd86C,EAAavrB,EAAMvvB,KAAKpoB,GAAKwa,OAAQje,KAAK6rB,KAAKpoB,GAAKwa,aAE/C4N,KAAKpoB,GAAKg8B,GAAK91B,EAAO,IAAI3J,KAAK6rB,KAAKpoB,GAAKg8B,MAAO2b,EAAMvvB,KAAKpoB,GAAKg8B,IAAKr3B,SAErEyjB,KAAKpoB,GAAO23C,EAAMvvB,KAAKpoB,OAI3B,MAAM1B,KAASq5C,EAAMoG,SACxBpG,EAAM8E,YAAYn+C,GAClBA,EAAMV,OAASrB,KAEjBo7C,EAAMgF,SAGDU,wBACE,IAAI3/C,IACT0J,EAAK7K,KAAK6rB,MACPprB,KAAIyE,GAAKA,EAAEu6B,KACXrgC,KAAK,IAILyhD,yBACE,IAAI1/C,IAAI0J,EAAK7K,KAAK6rB,MAAMprB,KAAIyE,GAAKA,EAAE0a,SAGrCxX,aACG,OAAMA,EAAKpI,KAAK6rB,QAGnB81B,kBACE92C,EAAK7K,KAAK6rB,MAAMrrB,SAAQmY,UACvB0qB,EAA2B,IAE1BujC,KAAUC,GAAeluD,EAAI8mB,IAC9BrmB,OAACA,KAAW6N,GAAUtO,EAAIA,IAC1BmuD,EAA2B,CAC/BjmE,KAAM,MACN+e,MAAOvT,EAAmBsM,EAAIiH,OAC9B6f,GAAImnC,EACJ3oD,OAAQtF,EAAIsF,UACPnF,GAAkBM,GAAqB,CAACA,OAAQ,MAApB,CAACA,OAAAA,MAC9BT,EAAIwtD,KAAO,CAACA,KAAM,CAACloD,OAAS,QAAOtF,EAAIwtD,UAAY,MACpDl/C,IAGA7N,GAAUT,EAAI2tD,eACjBjjC,EAAUjjC,KAAK,CACbS,KAAM,SACN+e,MAAOvT,EAAmBsM,EAAIiH,OAC9B3B,OAAQtF,EAAI2tD,eAEdQ,EAAS1tD,OAAS,CAAC6E,OAAQtF,EAAI2tD,eAGjCjjC,EAAUjjC,KAAK0mE,OAEV,MAAMrnC,KAAMonC,MACV,IAAItjE,EAAI,EAAGA,EAAI,EAAGA,IACrB8/B,EAAUjjC,KAAK,CACbS,KAAM,UACNmd,KAAM6B,GAAQ,CAACD,MAAOgnD,EAAMrjE,IAAK,CAACya,KAAM,UACxCyhB,GAAIA,EAAGl8B,YAKToV,EAAIyoC,SACN/d,EAAUjjC,KAAK,CACbS,KAAM,UACNmd,KAAMrF,EAAIyoC,QACV3hB,GAAI9mB,EAAIotD,YAGL1iC,MC5Mb,SAAS0jC,GAAaC,EAAmBp1D,EAAkBoQ,EAA4BzD,eAC/E2qC,EAAcwY,GAAYnjD,GAASA,EAAMqZ,SAAS3kB,GAAyBrB,SAAY1L,KAG3FoqB,GAAgBtO,IAChB0/C,GAAYnjD,IACZsV,GAAW7R,EAAUknC,EAAa3qC,EAAMG,QAASH,EAAMI,QAEvDqoD,EAAKljE,IAAI+b,GAAQmC,EAAU,KAC3BglD,EAAKljE,IAAI+b,GAAQmC,EAAU,CAACiO,OAAQ,SAEhCjO,EAASrJ,KAAOgY,GAAiB3O,EAAUpQ,IAC7Co1D,EAAKljE,IAAI+b,GAAQmC,EAAU,CAAC0O,UAAW,gBAEpC,GAAyB9e,K7GiFpB1B,G6GjF8B,OAClC+2D,E7GkEH,SAAuCr1D,UACpCA,QACDvD,SACI,SACJE,SACI,UACJD,SACI,SACJE,SACI,M6G3EU04D,CAA8Bt1D,GACjDo1D,EAAKljE,IAAIya,EAAMkhC,QAAQwnB,SAEvBD,EAAKljE,IAAI+b,GAAQmC,WAEf8P,GAAgB9P,IhGsZf,SAAsBhH,UACpB7B,WAAS6B,IAAU,UAAWA,EgGvZJmsD,WAAanlD,EAAS+M,0BAATsI,EAAgBrc,QAC5DgsD,EAAKljE,IAAIke,EAAS+M,MAAM/T,MAAM4E,OAEzBonD,EAkBF,MAAMI,WAAsBznB,GAC1Bj/C,eACE,IAAI0mE,GAAc,KAAM,IAAIjmE,IAAInB,KAAKqnE,YAAaz/D,EAAU5H,KAAKsnE,WAO1E7/D,YAAYpG,EAA8BgmE,EAAiCC,SACnEjmE,QADkCgmE,WAAAA,OAAiCC,SAAAA,uBAKlEtnE,KAAKqnE,mCAGiBhmE,EAAsBkd,OAC/CugB,GAAc,EAClBvgB,EAAMw8C,iBAAgBpkC,IAChBA,EAAGre,YACLwmB,GAAc,YAIZyoC,EAAiB,GACjBP,EAAO,IAAI7lE,WAEZ29B,GAKLvgB,EAAMw8C,iBAAgB,CAAC/4C,EAAUpQ,WACzB0G,UAACA,EAADsH,MAAYA,GAASoC,KACvB1J,KACgB,UAAdA,EAAuB,CACzBivD,EAAK,OAALA,EAAK,KAAS,IACdA,EAAK,KAAL,MAAqB,IAAIpmE,IAAI,CAAC0e,GAAQmC,EAAU,CAAC+S,OAAO,UACnD,IACD9c,GAAYK,IAAcJ,GAAYI,GAAY,OAC9C1R,EAAKqR,GAAYK,GAAa,SAAW,SACzCkvD,EAAWlvD,EAAU1R,GAC3B2gE,EAAKC,KAALD,EAAKC,GAAc,IACnBD,EAAKC,GAAU5gE,GAAM,IAAIzF,IAAI,CAAC0e,GAAQ,CAACjZ,GAAAA,EAAIgZ,MAAO4nD,GAAW,CAACzyC,OAAO,WAErEwyC,EAAK3nD,KAAL2nD,EAAK3nD,GAAW,IAChB2nD,EAAK3nD,GAAOtH,GAAa,IAAInX,IAAI,CAAC0e,GAAQmC,EAAU,CAAC+S,OAAO,MAI1D3f,GAAexD,IAA2C,iBAA/B2M,EAAMkpD,YAAY71D,KAC/C21D,EAAK3nD,KAAL2nD,EAAK3nD,GAAW,IAChB2nD,EAAK3nD,GAAL,IAAqB,IAAIze,IAAI,CAAC0e,GAAQ,CAACD,MAAAA,EAAOtH,UAAW,OAAQ,CAACyc,OAAO,MACzEwyC,EAAK3nD,GAAL,IAAqB,IAAIze,IAAI,CAAC0e,GAAQ,CAACD,MAAAA,EAAOtH,UAAW,OAAQ,CAACyc,OAAO,YAI7EgyC,GAAaC,EAAMp1D,EAASoQ,EAAUzD,MAItCyoD,EAAK98D,KAAO1D,EAAK+gE,GAAMvkE,SAAW,EAC7B,KAGF,IAAIokE,GAAc/lE,EAAQ2lE,EAAMO,IApC9B,8BAuCqBlmE,EAAsB3B,SAC9CsnE,EAAO,IAAI7lE,IACXomE,EAAiB,OAElB,MAAMh+D,KAAK7J,EAAE4Y,UAAW,OACrB1R,GAACA,EAADgZ,MAAKA,EAAL6f,GAAYA,GAAMl2B,KACpB3C,KACS,UAAPA,EACF2gE,EAAK,OAALA,EAAK,KAAS,IACdA,EAAK,KAAL,MAAqB,IAAIpmE,IAAI,CAACs+B,GAAU5f,GAAQtW,EAAG,CAACwrB,OAAO,WAE3DwyC,EAAK3nD,KAAL2nD,EAAK3nD,GAAW,IAChB2nD,EAAK3nD,GAAOhZ,GAAM,IAAIzF,IAAI,CAACs+B,GAAU5f,GAAQtW,EAAG,CAACwrB,OAAO,UAKzD,MAAMxrB,KAAK7J,EAAEu/B,SAAW,GAC3B+nC,EAAKljE,IAAIyF,UAGPy9D,EAAK98D,KAAO1D,EAAK+gE,GAAMvkE,SAAW,EAC7B,KAGF,IAAIokE,GAAc/lE,EAAQ2lE,EAAMO,GAGlChmB,MAAMnG,UACPnxC,EAASjK,KAAKqnE,WAAYjsB,EAAMisB,aAjHxC,SAAuBK,EAA0BC,OAC1C,MAAM/nD,KAASpZ,EAAKmhE,GAAgB,OAEjCC,EAAMD,EAAc/nD,OACrB,MAAMhZ,KAAMJ,EAAKohE,GAChBhoD,KAAS8nD,EAEXA,EAAe9nD,GAAOhZ,GAAM,IAAIzF,IAAI,IAAKumE,EAAe9nD,GAAOhZ,IAAO,MAAQghE,EAAIhhE,KAElF8gE,EAAe9nD,GAAS,EAAEhZ,GAAKghE,EAAIhhE,KAyGrCihE,CAAc7nE,KAAKsnE,SAAUlsB,EAAMksB,WAC5B,IrGvEN,YAAkB16D,GACvB0W,GAAQwkD,SAASl7D,GqGwEbyX,CAAU,uCACH,GAIJ0jD,cAAct+B,GACnBA,EAAOjmC,QAAQxD,KAAKqnE,WAAWvjE,IAAK9D,KAAKqnE,YAGpCxmB,yBACE,IAAI1/C,IAAI,IAAInB,KAAKqnE,cAAe7gE,EAAKxG,KAAKsnE,YAG5CxmB,uBACCz6C,EAAM,IAAIlF,QAEX,MAAMye,KAASpZ,EAAKxG,KAAKsnE,cACvB,MAAM1gE,KAAMJ,EAAKxG,KAAKsnE,SAAS1nD,IAAS,OACrCiE,EAAI7jB,KAAKsnE,SAAS1nD,GAAOhZ,GAChB,IAAXid,EAAE3Z,KACJ7D,EAAIvC,IAAK,GAAE8C,KAAMgZ,KAEjBiE,EAAErgB,QAAQ6C,EAAIvC,IAAKuC,UAKlBA,EAGF+B,aACG,aAAYA,EAAK,CAACi/D,WAAYrnE,KAAKqnE,WAAYC,SAAUtnE,KAAKsnE,aAGjE3lB,iBACCimB,EAAqB,GACrBn+B,EAAmB,GACnBhK,EAAe,OAEhB,MAAM7f,KAASpZ,EAAKxG,KAAKsnE,cACvB,MAAM1gE,KAAMJ,EAAKxG,KAAKsnE,SAAS1nD,QAC7B,MAAMooD,KAAShoE,KAAKsnE,SAAS1nD,GAAOhZ,GACvC64B,EAAGr/B,KAAK4nE,GACRJ,EAAIxnE,KAAKwG,GACT6iC,EAAOrpC,KAAe,MAAVwf,EAAgB,KAAOvT,EAAmBuT,UAKvB,CACnC/e,KAAM,YACNo+B,QAAS,IAAIj/B,KAAKqnE,YAAY5mE,IAAI4L,GAClCu7D,IAAAA,EACAn+B,OAAAA,EACAhK,GAAAA,ICxLC,MAAMwoC,WAAkBtoB,GActBl4C,YACLpG,EACgBkd,EACApR,EACT7H,SAEDjE,QAJUkd,MAAAA,OACApR,KAAAA,OACT7H,KAAAA,0GAIF,MAAMsM,KAAWK,GAAgB,OAC9B+P,EAAWzD,EAAMvM,MAAMJ,MACzBoQ,EAAU,OACNrJ,IAACA,EAADlS,KAAMA,GAAQub,OACfpQ,GAAW,CACdzE,KAAMoR,EAAMkhC,QAAS,GAAE7tC,YACvB63B,OAAQ,CAAC5pB,GAAQmC,MAAejJ,GAAUJ,GAAO,CAACkH,GAAQmC,EAAU,CAAC0O,UAAW,SAAW,OACvFsC,GAAYvsB,GACZ,CAACyhE,UAAWzhE,GACZtG,UAAQsG,GACR,CAAC0hE,eAAgBlN,GAAoBj5C,EAAUpQ,IAC/C,UAILw2D,WAAa7pD,EAAMxc,MAGnBqG,WACD/B,EAAO,YAEN,MAAMuL,KAAWK,GAChBjS,KAAK4R,KACPvL,GAAQ,IAAGuL,EAAQnG,OAAO,MAAMrD,EAAKpI,KAAK4R,cAIvCvL,qBAIDZ,EAAc,OAEf,MAAMmM,KAAWK,GAAgB,iBAChCjS,KAAK4R,iBAALy2D,EAAe5+B,QACjBhkC,EAAErF,QAAQJ,KAAK4R,GAAS63B,eAGrBhkC,EAGFo7C,wBACCynB,EAAY,IAAInnE,IAAYnB,KAAKypC,YAElC,MAAM73B,KAAWK,GAChBjS,KAAK4R,KACH5R,KAAK4R,GAASs2D,WAChBI,EAAUxkE,IAAI9D,KAAK4R,GAASs2D,UAAUtoD,OAEpC5f,KAAK4R,GAASu2D,gBAChBG,EAAUxkE,IAAI9D,KAAK4R,GAASu2D,wBAK3BG,EAGFxnB,wBACE,IAAI3/C,IAMN6/C,mBACEhhD,KAAKmN,KAGNo7D,0CACAC,EAAiE,OAElE,MAAM52D,KAAWsC,GAAyB,OACvCu0D,EAAsBzoE,KAAKooE,WAAWrpB,UAAUmE,OAAOtxC,MACzD62D,IAAwBA,EAAoBxoD,OAAQ,OAEhDpf,EAAO4nE,EAAoBv5C,IAAI,QAC/BlU,EAAQytD,EAAoBv5C,IAAI,YAElCjE,GAAkBpqB,IAASka,GAAcC,GAAQ,OAE7C4E,EAAQ8oD,GADCC,GAAe3oE,KAAKooE,WAAYx2D,IAE3CgO,EACF4oD,EAA+B52D,GAAWgO,EAE1CyE,GAASA,GAAyBzS,aAMnC42D,EAGDI,4BACNh3D,EACAi3D,EACAL,SAEMM,EAAe,CAACh3D,IAAK,IAAKC,OAAQ,IAAKC,WAAO9L,GAAW0L,GAEzD63B,EAAmB,GACnBm+B,EAAqB,GACrBnoC,EAAe,GAEjBqpC,GAAgBN,GAAkCA,EAA+BM,KAC/ED,GAEFp/B,EAAOrpC,KAAM,YAAWooE,EAA+BM,MAEvDlB,EAAIxnE,KAAK,SAGTqpC,EAAOrpC,KAAKooE,EAA+BM,IAC3ClB,EAAIxnE,KAAK,aAGXq/B,EAAGr/B,KAAM,YAAWooE,EAA+BM,aAG/CZ,UAACA,EAADC,eAAYA,GAAkBnoE,KAAK4R,MACrCs2D,EAAW,OACPthE,GAACA,EAAKgsB,GAANhT,MAAuBA,GAASsoD,EACtCz+B,EAAOrpC,KAAKwf,GACZgoD,EAAIxnE,KAAKwG,GACT64B,EAAGr/B,KAAKyf,GAAQqoD,EAAW,CAACnzC,OAAO,UAC1BozC,IACT1+B,EAAOrpC,KAAK+nE,GACZP,EAAIxnE,KAAK,OACTq/B,EAAGr/B,KAAK+nE,UAGH,CACLh7D,KAAMnN,KAAK4R,GAASzE,KAEpB3K,OAAQqmE,GAAmB7oE,KAAKsF,KAChC+9B,UAAW,CACT,CACExiC,KAAM,YACNo+B,QAASj/B,KAAK4R,GAAS63B,UACnBA,EAAOzmC,OACP,CACEymC,OAAAA,EACAm+B,IAAAA,EACAnoC,GAAAA,GAEF,MAMJspC,wBAAwBP,SACxBt9B,QAACA,GAAWlrC,KAAKue,MAAM67B,QACvBqhB,cAACA,GAAiBz7D,KAAKue,MAAMwgC,UAC7Bz5C,EAAiB,GAEjB0jE,EAA6C,OAC9C,MAAMpN,KAAiBN,GAAiB,KACtC,MAAMc,KAAcb,GAAc,OAC/B0N,GAAWxN,EAAcG,IAAkBH,EAAcG,GAAeQ,KAAgB,OACzF,MAAMhmC,KAAU6yC,EAAS,qBACxB7yC,EAAO0zB,2BAAM9mD,QAAS,EAAG,CAC3BgmE,EAAcpN,IAAiB,aAMjCoN,EAAcpN,GAAgB,OAC1B4B,EAAe,gBAAex9D,KAAKgS,MAAM7E,UAEzC+7D,EACc,QAAlBtN,EACI1wB,EACE,CAACjtB,OAAS,QAAOu/C,OAAiBtyB,MAClC,EACFA,EACA,CAACjtB,OAAS,OAAMu/C,MAAgBtyB,MAChC,CAACjtB,OAAQu/C,GAEfl4D,EAAKlF,KAAK,CACR+M,KAAO,GAAEnN,KAAKgS,MAAM7E,QAAQyuD,IAC5Bv4B,UAAW,CACT,CACExiC,KAAM,WACNmvB,MAAO,EACPk5C,KAAAA,aAOJp3D,IAACA,EAADC,OAAMA,GAAUi3D,SAElBl3D,GAAOC,IACTzM,EAAKsgC,QAAQ5lC,KAAK4oE,4BAA4B,QAAS,KAAMJ,IAGxDljE,EAGFq8C,iBACCr8C,EAAiB,OACnBujE,EAAkB,WAChBL,EAAiCxoE,KAAKuoE,qCAEtCx2D,OAACA,EAADD,IAASA,EAATE,MAAcA,GAAShS,QAEzB+R,GAAUD,IAAQ02D,EAA+BvgE,GAAKugE,EAA+B/9D,GAAI,CAE3Fo+D,EAAmB,SAAQ7oE,KAAK+R,OAAO5E,QAAQnN,KAAK8R,IAAI3E,aAElDs8B,EAAmB,GAAG5qB,OAC1B2pD,EAA+BvgE,GAAK,GACpCugE,EAA+B/9D,GAAK,IAEhCm9D,EAAMn+B,EAAOhpC,KAAI,IAAmB,aAE1C6E,EAAKlF,KAAK,CACR+M,KAAM07D,EACNrmE,OAAQxC,KAAKsF,KACb+9B,UAAW,CACT,CACExiC,KAAM,YACNo+B,QAASj/B,KAAKypC,OACdA,OAAAA,EACAm+B,IAAAA,UAMH,MAAMh2D,IAAW,CAACjE,EAAQD,GACzB1N,KAAK4R,IACPtM,EAAKlF,KAAKJ,KAAK4oE,4BAA4Bh3D,EAASi3D,EAAiBL,OAIrEx2D,EAAO,OACHm3D,EAAYnpE,KAAK+oE,wBAAwBP,GAC3CW,GACF7jE,EAAKlF,QAAQ+oE,UAIV7jE,GCxQX,SAAS8jE,GAAQ3W,SAEG,MAAfA,EAAQ,IAA8C,MAAhCA,EAAQA,EAAQzvD,OAAS,IAChC,MAAfyvD,EAAQ,IAA8C,MAAhCA,EAAQA,EAAQzvD,OAAS,GAEzCyvD,EAAQnyD,MAAM,GAAI,GAEpBmyD,EA+BF,SAAS4W,GAA+BhmC,SACvCwX,EAAyB,UAC/B3zC,EAAYm8B,EAAUhd,QAAQA,OACxB2B,GAAiB3B,GAAS,KAExBrc,EAAwD,KAKxDkd,GAAsBb,GACxBrc,EAAMyP,GAAiB4M,EAAO7e,OACrB8f,GAAoBjB,GAC7Brc,EAAMyP,GAAiB4M,EAAOkB,KACrBH,GAAmBf,GAC5Brc,EAAMyP,GAAiB4M,EAAOgB,IACrBG,GAAmBnB,GAC5Brc,EAAMyP,GAAiB4M,EAAOoB,IACrBC,GAAoBrB,GAC7Brc,EAAMyP,GAAiB4M,EAAOsB,KACrBC,GAAsBvB,GAC/Brc,EAAMqc,EAAOrL,MAAM,GACV6M,GAAsBxB,KAC/Brc,GAAOqc,EAAOyB,OAASzB,EAAM,IAAQ,IAGnCrc,IACEwZ,GAAWxZ,GACb6wC,EAASx0B,EAAOzG,OAAS,OAChBvX,WAAS2B,GAClB6wC,EAASx0B,EAAOzG,OAAS,SAChBrX,WAASyB,KAClB6wC,EAASx0B,EAAOzG,OAAS,WAIzByG,EAAOd,WACTs1B,EAASx0B,EAAOzG,OAAS,YAKxBi7B,EAMF,SAASyuB,GAAwB/qD,SAChCs8B,EAAyB,YAEtB/2C,EAAIke,G9G1DR,IAAoB1J,E8G2DnBkZ,GAA+BxP,GACjC64B,EAAS74B,EAASpC,OAAS,OAET,iBAAlBoC,EAASnhB,O9G9DYyX,E8G+DV0J,EAAS1J,U9G9DjB/P,WAAS+P,IAAc3P,EAAS,CAAC,MAAO,OAAQ2P,I8GgEnDuiC,EAAS74B,EAASpC,OAAS,SAClBlT,EAAgBsV,EAASpC,OAAS,EAGrCoC,EAASpC,SAASi7B,IACtBA,EAAS74B,EAASpC,OAAS,WAEpBkS,GAAgB9P,IAAagR,GAAYhR,EAASvb,OAASiG,EAAgBsV,EAASvb,KAAKmZ,OAAS,IAErGoC,EAASvb,KAAKmZ,SAASi7B,IAC3BA,EAAS74B,EAASvb,KAAKmZ,OAAS,gBAKlC8hD,GAAYnjD,IAAUmvC,GAAanvC,KAErCA,EAAMw8C,iBAAgB,CAAC/4C,EAAUpQ,QAC3B0e,GAAgBtO,GAClBle,EAAIke,OACC,OACCqkC,EAActzC,GAAoBnB,GAClC23D,EAAehrD,EAAMyD,SAASqkC,GACpCviD,EAAI,IACCke,EACHnhB,KAAM0oE,EAAa1oE,WAOvB6gE,GAAYnjD,GAAQ,OAChBjJ,KAACA,EAADoJ,QAAOA,EAAPkZ,SAAgBA,GAAYrZ,KAEhCmP,GAAWpY,KAEViJ,EAAMqZ,SAASxmB,MAChB,OAEMo4D,EAAsB5xC,EADgB,eAAnBlZ,EAAQ3E,OAA0B,IAAM,KAG/DkV,GAAWu6C,IACkB,iBAA7BA,EAAoB3oE,QAClB2oE,EAAoB5pD,SAASi7B,KAE/BA,EAAS2uB,EAAoB5pD,OAAS,kBAKrCi7B,EAuBF,MAAM4uB,WAAkB9pB,GAGtBj/C,eACE,IAAI+oE,GAAU,KAAM7hE,EAAU5H,KAAK0pE,SAG5CjiE,YAAYpG,EAAsB+2B,SAC1B/2B,iCAEDqoE,OAAStxC,EAGThwB,aACG,SAAQA,EAAKpI,KAAK0pE,8BAMDroE,EAAsBkd,EAAcorD,aAEzD/oD,EAAW,SACTtb,EAAOiZ,EAAMjZ,YACd62C,GAAY72C,IAAb,MAAsBA,aAAAA,EAAM6rB,qBAANy4C,EAAcxxC,QACtCxX,EAAWtb,EAAK6rB,OAAOiH,OAGlBp4B,KAAK6pE,kBAAkBxoE,EAAQuf,EAAU,GAAI+oD,4BAOpDtoE,EACAuf,EACAi6B,EACA8uB,OAGK,MAAM/pD,KAASpZ,EAAKq0C,GAAW,OAC5BivB,EAAWH,EAAc5uB,gBAAgBn7B,QACxB1Z,IAAnB4jE,EAAStqE,QAGTsqE,EAASlpD,UACTkpD,EAAStqE,QAAUq7C,EAASj7B,IACT,YAAnBkqD,EAAStqE,OACW,YAApBq7C,EAASj7B,UAEFi7B,EAASj7B,GAEhByE,GAASA,GAA2BzE,EAAOi7B,EAASj7B,GAAQkqD,EAAStqE,aAKtE,MAAMogB,KAASpZ,EAAKoa,GAAW,OAC5BkpD,EAAWH,EAAcz6C,IAAItP,QAClB1Z,IAAb4jE,IAEEA,IAAalpD,EAAShB,UACjBgB,EAAShB,GAEhByE,GAASA,GAA2BzE,EAAOgB,EAAShB,GAAQkqD,WAK5D1xC,EAAQ,IAAIwiB,GAAMh6B,EAAUi6B,GAGlC8uB,EAAcxuB,QAAQ/iB,SAGhBvf,EAAkB,OACnB,MAAMpV,KAAO+C,EAAK4xB,EAAM0iB,WAAY,OACjC9wC,EAAMouB,EAAMlJ,IAAIzrB,GACV,OAARuG,IACF6O,EAAEpV,GAAOuG,UAIU,IAAnBxD,EAAKqS,GAAG7V,QAAgB2mE,EAAc5tB,aACjC,KAGF,IAAI0tB,GAAUpoE,EAAQwX,sBAItB7Y,KAAK0pE,OAGPnoB,MAAMnG,QACNsuB,OAAS,IAAI1pE,KAAK0pE,UAAWtuB,EAAMhjB,OACxCgjB,EAAMgF,SAMD2pB,4BACCC,EAA4B,OAC7B,MAAMpqD,KAASpZ,EAAKxG,KAAK0pE,QAAS,OAC/B7wD,EAAI7Y,KAAK0pE,OAAO9pD,GACS,IAA3BlT,EAAgBkT,KAClBoqD,EAAYpqD,GAAS/G,UAGlBmxD,EAIFlpB,wBACE,IAAI3/C,IAAIqF,EAAKxG,KAAK0pE,SAGpB7oB,yBACE,IAAI1/C,IAAIqF,EAAKxG,KAAK0pE,SAGpBO,mBAAmBC,GAAa,UAC9B1jE,EAAKxG,KAAK0pE,QACdrjD,QAAOzG,IAAUsqD,GAAax9D,EAAgBkT,GAAS,IACvDnf,KAAImf,UACG5B,EA3Rd,SAAyB4B,EAAewY,SAChC3yB,EAAImG,EAAoBgU,MAChB,WAAVwY,QACM,YAAW3yB,KACd,GAAc,YAAV2yB,QACD,aAAY3yB,KACf,GAAc,WAAV2yB,QACD,YAAW3yB,KACd,GAAc,SAAV2yB,QACD,UAAS3yB,KACZ,GAAc,YAAV2yB,SACF3yB,EACF,GAAI2yB,EAAM/qB,WAAW,eAElB,aAAY5H,MADF2jE,GAAQhxC,EAAM93B,MAAM,EAAG83B,EAAMp1B,aAE1C,GAAIo1B,EAAM/qB,WAAW,cAElB,YAAW5H,MADD2jE,GAAQhxC,EAAM93B,MAAM,EAAG83B,EAAMp1B,oBAG/CqhB,GxGqCM,uBwGrCiC+T,OAChC,KAuQUg9B,CAAgBx1C,EAAO5f,KAAK0pE,OAAO9pD,QAC3C5B,SACI,WAG2B,CAClCnd,KAAM,UACNmd,KAAAA,EACAyhB,GAAIhzB,EAAoBmT,OAI3ByG,QAAO3mB,GAAW,OAANA,KCvVZ,MAAMyqE,WAAuBxqB,GAC3Bj/C,eACE,IAAIypE,GAAe,MAG5B1iE,YAAYpG,SACJA,GAGDw/C,yBACE,IAAI1/C,IAGN2/C,wBACE,IAAI3/C,IAAI,CAACmoC,KAGXlhC,aACE,aAGFu5C,iBACE,CAAC9gD,KAAM,aAAc4+B,GAAI6J,KCrB7B,MAAM8gC,WAAsBzqB,GAC1Bj/C,eACE,IAAI0pE,GAAc,KAAMpqE,KAAKinB,QAGtCxf,YAAYpG,EAA8B4lB,SAClC5lB,QADkC4lB,OAAAA,EAInC45B,yBACE,IAAI1/C,IAGN2/C,kBAIA14C,aACG,aAAYA,EAAKpI,KAAKinB,UAGzB06B,iBACE,CACL9gD,KAAM,gBACc,IAAhBb,KAAKinB,OAAkB,GAAKjnB,KAAKinB,SCxBpC,MAAMojD,WAAqB1qB,GACzBj/C,eACE,IAAI2pE,GAAa,KAAMrqE,KAAKinB,QAGrCxf,YAAYpG,EAA8B4lB,SAClC5lB,QADkC4lB,OAAAA,EAInC45B,yBACE,IAAI1/C,IAGN2/C,wBACE,IAAI3/C,IAAI,CAACnB,KAAKinB,OAAOwY,IAAM,SAG7Br3B,aACG,QAAOA,EAAKpI,KAAKinB,UAGpB06B,iBACE,CACL9gD,KAAM,cACHb,KAAKinB,SCfP,MAAMqjD,WAAmB3qB,GAO9Bl4C,YAAYnC,OAIN6rB,WAHE,mFAEN7rB,IAAAA,EAAS,CAAC6H,KAAM,WAGXgvC,GAAY72C,KACf6rB,EAAS7rB,EAAK6rB,OAAS,IAAInpB,EAAK1C,EAAK6rB,OAAQ,CAAC,WAAc,IAG1D8qB,GAAa32C,QACVilE,MAAQ,CAAC3gE,OAAQtE,EAAKsE,aACtB,GAAIoyC,GAAU12C,YACdilE,MAAQ,CAAC94D,IAAKnM,EAAKmM,MAEnB0f,EAAOtwB,KAAM,KAGZ2pE,EAAmB,kBAAkBC,KAAKnlE,EAAKmM,KAAK,GACnD9I,EAAS,CAAC,OAAQ,MAAO,MAAO,MAAO,YAAa6hE,KACvDA,EAAmB,QAIrBr5C,EAAOtwB,KAAO2pE,QAEPnuB,GAAkB/2C,QAEtBilE,MAAQ,CAAC3gE,OAAQ,CAAC,CAAC/I,KAAM,aACrBq7C,GAAY52C,IAAS62C,GAAY72C,WACrCilE,MAAQ,SAIVG,WAAavuB,GAAY72C,GAG1BA,EAAK6H,YACFwzC,MAAQr7C,EAAK6H,MAGhBgkB,IAAWvmB,EAAQumB,UAChBo5C,MAAMp5C,OAASA,GAIjB0vB,yBACE,IAAI1/C,IAGN2/C,oCAKE9gD,KAAKuqE,MAGPI,kBACI3qE,KAAK2gD,+BAIP3gD,KAAK0qE,iCAIL1qE,KAAK2gD,mBAGDxzC,QACNwzC,MAAQxzC,aAGJ9L,SACH,IAAI6B,MAAM,kCAGXk9C,eACC,IAAIl9C,MAAM,iDAGXkF,aACC,IAAIlF,MAAM,uBAGXy+C,iBACE,CACLx0C,KAAMnN,KAAK2gD,SACR3gD,KAAKuqE,MACRlnC,UAAW,KCvGV,SAASunC,GAAiBjlE,UACxBA,aAAgB2kE,IAAc3kE,aAAgBykE,IAAiBzkE,aAAgB0kE,sBAOjF,MAAeQ,GAGpBpjE,kEACmB,GAIZqjE,0BACY,iFAIV9qE,4BAaJ,MAAe+qE,WAA0BF,GAStCG,cACNrlE,EACApE,EACA0pE,GAEAA,EAAOrnE,IAAI+B,EAAMpE,OAEZ,MAAMQ,KAAS4D,EAAK67C,cAClBwpB,cAAcjpE,EAAOR,EAAQ,EAAG0pE,UAGhCA,EAMFC,SAASvlE,SAERwlE,EAAkB,IADTnrE,KAAKgrE,cAAcrlE,EAAM,EAAG,IAAI1E,KACZiI,WAAWzC,MAAK,CAACxG,EAAG2F,IAAMA,EAAE,GAAK3F,EAAE,SAEjE,MAAM2sD,KAASue,OACbxsC,IAAIiuB,EAAM,WAGV5sD,KAAKorE,cAOT,MAAeC,WAAyBR,GAStCK,SAASvlE,QACTg5B,IAAIh5B,OAEJ,MAAM5D,KAAS4D,EAAK67C,cAClB0pB,SAASnpE,UAGT/B,KAAKorE,cC/ET,MAAME,WAA4BD,GAChCE,WAAWlqE,EAAsBmqE,SAChCC,EAAaD,EAAMjgE,YACpB,MAAM5F,KAAQ6lE,EACjBnqE,EAAO6+C,YAAYv6C,GACnBA,EAAKtE,OAASoqE,EACd9lE,EAAKy6C,SAIFzhB,IAAIh5B,SACH+lE,EAAS/lE,EAAK67C,SAAS/gD,KAAIwH,GAAKA,EAAEG,SAClCujE,EAAmC,OAEpC,IAAIpoE,EAAI,EAAGA,EAAImoE,EAAO1oE,OAAQO,SACN2C,IAAvBylE,EAAQD,EAAOnoE,IACjBooE,EAAQD,EAAOnoE,IAAM,CAACoC,EAAK67C,SAASj+C,IAEpCooE,EAAQD,EAAOnoE,IAAInD,KAAKuF,EAAK67C,SAASj+C,QAIrC,MAAM0F,KAAKzC,EAAKmlE,GACfA,EAAQ1iE,GAAGjG,OAAS,SACjB8nE,mBACAS,WAAW5lE,EAAMgmE,EAAQ1iE,MAS/B,MAAM2iE,WAAyCP,GAGpD5jE,YAAY8W,sDAELqvC,oBAAsBrvC,GAASqvC,GAAoBrvC,GAGnDogB,IAAIh5B,GACLA,aAAgBwkE,KAKdnqE,KAAK4tD,sBACJgd,GAAiBjlE,EAAKtE,SAAWsE,EAAKtE,kBAAkB+lE,IAAiBzhE,EAAKtE,kBAAkBooE,WAG9FqB,cACLnlE,EAAKy6C,YAYN,MAAMyrB,WAAiChB,GACrCK,SAASvlE,eACTg5B,IAAIh5B,EAAM,IAAIxE,KAEZnB,KAAKorE,aAGPzsC,IAAIh5B,EAAoBmmE,OACzBhrB,EAAiB,IAAI3/C,IAErBwE,aAAgBw7C,KAClBL,EAAiBn7C,EAAKm7C,iBAClB12C,EAAgB02C,EAAgBgrB,UAC7BhB,cACLnlE,EAAK87C,eAAeqqB,GACe,IAA/BnmE,EAAKm7C,eAAe99C,QACtB2C,EAAKy6C,eAKN,MAAMr+C,KAAS4D,EAAK67C,cAClB7iB,IAAI58B,EAAO,IAAIZ,IAAI,IAAI2qE,KAAmBhrB,MAQ9C,MAAMirB,WAAqCV,GAChD5jE,sBAIOk3B,IAAIh5B,GACLA,aAAgB66C,KAAe76C,EAAKs7C,oBACjC6pB,cACLnlE,EAAKy6C,WAQJ,MAAM4rB,WAAoBjB,GACxBpsC,IAAIh5B,QACLilE,GAAiBjlE,IAIjBA,EAAKq6C,cAAgB,OAKpB,MAAMj+C,KAAS4D,EAAK67C,YACnBz/C,aAAiB0nE,MACf9jE,aAAgB8jE,QACbqB,cACLnlE,EAAK47C,MAAMx/C,OACN,IAED4I,EAAkBhF,EAAKm7C,iBAAkB/+C,EAAM8+C,iCAG9CiqB,cACL/oE,EAAMu+C,mBAcT,MAAM2rB,WAAmBlB,GACvBpsC,IAAIh5B,SACHumE,EAAmB,IAAIvmE,EAAK67C,UAC5B2qB,EAAgBxmE,EAAK67C,SAASn7B,QAAQtkB,GAA8BA,aAAiB0nE,QAEvF9jE,EAAKq6C,cAAgB,GAAKmsB,EAAcnpE,QAAU,EAAG,OACjDopE,EAAqB,GACrBC,EAAmB,IAAIlrE,QACxB,MAAMmrE,KAAaH,EAAe,OAC/B/zC,EAAQk0C,EAAUl0C,UACnB,MAAMnvB,KAAKzC,EAAK4xB,GACbnvB,KAAKmjE,EAEAA,EAAYnjE,KAAOmvB,EAAMnvB,IAClCojE,EAAiBvoE,IAAImF,GAFrBmjE,EAAYnjE,GAAKmvB,EAAMnvB,OAOxB,MAAM2W,KAASysD,SACXD,EAAYxsD,OAGhBhV,EAAQwhE,GAAc,MACpBtB,oBACCyB,EAAkB,IAAI9C,GAAU9jE,EAAMymE,OACvC,MAAMI,KAAaN,EAAkB,IACpCM,aAAqB/C,OAClB,MAAMhmE,KAAO+C,EAAK4lE,UACdI,EAAUp0C,MAAM30B,GAI3BkC,EAAKu6C,YAAYssB,GACjBA,EAAUnrE,OAASkrE,EAGfC,aAAqB/C,IAA8C,IAAjCjjE,EAAKgmE,EAAUp0C,OAAOp1B,QAC1DwpE,EAAUpsB,aAaf,MAAMqsB,WAA6B1B,GACjCpsC,IAAIh5B,GACLA,aAAgB66C,IAAc76C,EAAKq6C,cAAgB,GAAKr6C,aAAgBsiE,IAEjEtiE,aAAgB2kE,UAGpBQ,cACLnlE,EAAKy6C,WAQJ,MAAMssB,WAAuB3B,GAC3BpsC,IAAIh5B,SACHgnE,EAAmBhnE,EAAK67C,SAASn7B,QAAQpe,GAAyBA,aAAak5C,KAC/EyrB,EAAcD,EAAiBxW,UAChC,MAAM5wC,KAAYonD,OAChB7B,cACL8B,EAAYrrB,MAAMh8B,IAKjB,MAAMsnD,WAAwB9B,GAC5BpsC,IAAIh5B,SACHmnE,EAAcnnE,EAAK67C,SAASn7B,QAAQtkB,GAAkCA,aAAiBqlE,KAKvF2F,EAA2C,OAG5C,MAAMC,KAAOF,EAAa,OACvBG,EAAW7kE,EAAK4kE,EAAIE,SACpBD,KAAYF,IAChBA,EAAkBE,GAAY,IAEhCF,EAAkBE,GAAU7sE,KAAK4sE,OAI9B,MAAMrvD,KAASnX,EAAKumE,GAAoB,OACrCI,EAAgBJ,EAAkBpvD,MACpCwvD,EAAcnqE,OAAS,EAAG,OACtBoqE,EAAaD,EAAchX,UAC5B,MAAM6W,KAAOG,EACZC,EAAW7rB,MAAMyrB,KACnBrnE,EAAKu6C,YAAY8sB,GACjBA,EAAI3rE,OAAS+rE,EACbJ,EAAI5sB,cAEC0qB,kBAWV,MAAMuC,WAAkBtC,GAC7BtjE,YAAoB8W,gBAAAA,MAAAA,EAIbogB,IAAIh5B,SACH2nE,IACJ1C,GAAiBjlE,IACjBA,aAAgB+wD,IAChB/wD,aAAgB8jE,IAChB9jE,aAAgBwkE,IAGZoD,EAA4B,GAC5BC,EAA2B,OAE5B,MAAMzrE,KAAS4D,EAAK67C,SACnBz/C,aAAiB0kE,KACf6G,IAAe3iE,EAAkBhF,EAAKm7C,iBAAkB/+C,EAAM8+C,mBAChE0sB,EAAentE,KAAK2B,GAEpByrE,EAAcptE,KAAK2B,OAKrBwrE,EAAevqE,OAAS,EAAG,OACvByqE,EAAcF,EAAepX,UAC9B,MAAMx9C,KAAO40D,EAChBE,EAAYlsB,MAAM5oC,EAAK3Y,KAAKue,MAAMooD,aAAa38B,KAAKhqC,KAAKue,aAEtDusD,cACDnlE,aAAgB8gE,GAClB9gE,EAAK47C,MAAMksB,EAAaztE,KAAKue,MAAMooD,aAAa38B,KAAKhqC,KAAKue,QAE1DkvD,EAAYntB,oBAGZktB,EAAcxqE,OAAS,EAAG,OACtB0qE,EAAeF,EAAcrX,UAC9B,MAAMx9C,KAAO60D,EAChBE,EAAansB,MAAM5oC,EAAK3Y,KAAKue,MAAMooD,aAAa38B,KAAKhqC,KAAKue,aAEvDusD,gBAYJ,MAAM6C,WAAqB5C,GACzBpsC,IAAIh5B,SACH67C,EAAW,IAAI77C,EAAK67C,cACHz4C,EAAKy4C,GAAUz/C,GAASA,aAAiBy+C,MAEzC76C,EAAKq6C,eAAiB,eAIvC4tB,EAAgC,OAIlCC,MAEC,MAAM9rE,KAASy/C,KACdz/C,aAAiBy+C,GAAY,KAC3BstB,EAAa/rE,OAEmB,IAA7B+rE,EAAW9tB,eAAqB,OAC9B+tB,GAAYD,EAAWtsB,cAC1BusB,aAAoBvtB,UACtBstB,EAAaC,EAMjBH,EAAcxtE,QAAQ0tE,EAAWtsB,UAE7BqsB,GAMFloE,EAAKu6C,YAAYn+C,GACjBA,EAAMV,OAASwsE,EAAWxsE,OAE1BwsE,EAAWxsE,OAAO6+C,YAAY2tB,GAC9BA,EAAWxsE,OAASysE,OAEfhD,eAEL+C,EAAaC,OAGfF,EAAcxtE,KAAK2B,MAInB6rE,EAAc5qE,OAAQ,MACnB8nE,kBACA,MAAM/oE,KAAS6rE,EAClB7rE,EAAMV,OAAO6+C,YAAYn+C,GACzBA,EAAMV,OAASwsE,IC/XhB,MAAMG,WAAmCruB,GACvCj/C,eACE,IAAIstE,GAA2B,KAAMpmE,EAAU5H,KAAKqjC,YAG7D57B,YAAYpG,EAAuCgiC,SAC3ChiC,QAD2CgiC,UAAAA,EAI5C0kC,cAAct+B,QACdpG,UAAUpE,QAAUt1B,EAAO3J,KAAKqjC,UAAUpE,QAAQpgB,OAAO4qB,IAASzlB,GAAKA,IAGvE68B,wBACCx6C,EAAM,IAAIlF,WAEZnB,KAAKqjC,UAAUpE,cACZoE,UAAUpE,QAAQz7B,QAAQ6C,EAAIvC,IAAKuC,QAErCg9B,UAAUgC,cACZ5kC,KAAIwtE,GAAKA,EAAEruD,QACXyG,QAAO5gB,QAAWS,IAANT,IACZjC,QAAQ6C,EAAIvC,IAAKuC,GAEbA,EAGFy6C,wBACE,IAAI3/C,IAAInB,KAAKqjC,UAAUgC,cAAc5kC,IAAIT,KAAKkuE,iBAG/CA,eAAeC,UACdA,EAAsB1uC,IAAM5f,GAAQsuD,GAGtC/lE,aACG,0BAAyBA,EAAKpI,KAAKqjC,aAGtCse,iBACClY,EAAmB,GACnBm+B,EAAqB,GACrBnoC,EAAe,OAChB,MAAM4F,KAAiBrlC,KAAKqjC,UAAUgC,cACzCuiC,EAAIxnE,KAAKilC,EAAcz+B,IACvB64B,EAAGr/B,KAAKJ,KAAKkuE,eAAe7oC,IAC5BoE,EAAOrpC,UAA6B8F,IAAxBm/B,EAAczlB,MAAsB,KAAOylB,EAAczlB,aAGjEqf,EAAUj/B,KAAKqjC,UAAUpE,cAExB,CACLp+B,KAAM,gBACN4+B,GAAAA,EACAmoC,IAAAA,EACAn+B,OAAAA,UACgBvjC,IAAZ+4B,EAAwB,CAACA,QAAAA,GAAW,KCGvC,MAAMmvC,WAAkBzuB,GAGtBj/C,eACE,IAAI0tE,GAAU,KAAMxmE,EAAU5H,KAAKquE,SAG5C5mE,YAAYpG,EAAsB8uB,SAC1B9uB,iCAEDgtE,OAASl+C,2BAGgB9uB,EAAsBitE,SAC9Cn+C,MAACA,EAAD8O,QAAQA,EAARQ,GAAiBA,EAAjB3lB,OAAqBA,EAAS,QAAUw0D,EAExCC,EAAuB,GACvBC,EAAyB,WACHtoE,IAAxBooE,EAAe7nE,SACZ,MAAMyhE,KAAaoG,EAAe7nE,KACrC8nE,EAAWnuE,KAAK8nE,EAAUtoD,OAC1B4uD,EAAUpuE,KAAKuM,EAAgBu7D,EAAU92D,MAAO,oBAG9C3K,EAAmB,CACvBmZ,MAAO2uD,EACPn9D,MAAOo9D,OAELC,SAIFA,EApCN,SAAwBhvC,UACft/B,UAAQs/B,IAAOA,EAAGt2B,OAAMI,GAAKhB,WAASgB,MAAOk2B,EAAGz8B,OAAS,EAgC1D0rE,CAAejvC,GACFA,EACNl3B,WAASk3B,GACH,CAACA,EAAK,GAAEA,SAER,CAAE,GAAE6uC,EAAen+C,cAAgB,GAAEm+C,EAAen+C,aAG9D,IAAIi+C,GAAU/sE,EAAQ,CAC3BstE,WAAYx+C,EACZ8O,QAAAA,EACAnlB,OAAAA,EACArT,KAAAA,EACAmoE,QAAS,GACTnvC,GAAIgvC,4BAIuBptE,EAAsBkd,SAC7CswD,EAAkBtwD,EAAM4R,OACxByH,SAACA,GAAYrZ,MAEdswD,SACI,WAGHx7B,eAACA,EAADX,aAAiBA,EAAjB54B,OAA+BA,EAA/B2W,OAAuCA,GAAUo+C,MAEnDC,KACAz7B,EAAgB,CAElBy7B,EAAoBv4C,GADPqB,EAASyb,UAIlB07B,EA3HV,SAA0BxwD,UACjBA,EAAM4R,MAAM8iB,QAAQnzC,QAAO,CAAC2pC,EAAQulC,WAGnCC,EAASpvD,GAFEmvD,EAAGhtD,iBAGhBitD,GACFxlC,EAAOrpC,KAAK6uE,GAEPxlC,IACN,IAkHeylC,CAAiB3wD,GAC3BkB,EAAWlB,EAAMqZ,SAASxmB,UAE5B3K,SAEFA,EADEtG,UAAQsf,IAAawP,GAAWxP,GAC3BD,GAAWC,GAIXsvD,EAAQjvE,QACb,CAACyJ,EAAGqW,KACFrW,EAAEqW,MAAMxf,KAAKwf,GACbrW,EAAE6H,MAAMhR,KAAsB,MAAjBsyC,EAAuB,aAAe,aAC5CnpC,IAET,CAACqW,MAAO,GAAIxO,MAAO,KAIhB,IAAIg9D,GAAU/sE,EAAQ,CAC3BytE,kBAAAA,EACAH,WAAYpwD,EAAMsB,QAAQ6yB,GAC1Bk8B,QAAS,GACTG,QAAAA,EACAtoE,KAAAA,EACAqT,OAAAA,EACA2W,OAAAA,EACAgP,GAAI,CACFlhB,EAAMsB,QAAQ6yB,EAAc,CAACziB,OAAQ,QAAS8E,OAAO,IACrDxW,EAAMsB,QAAQ6yB,EAAc,CAACziB,OAAQ,MAAO8E,OAAO,0BAMhD/0B,KAAKquE,OAGPtG,cAAct+B,QACd4kC,OAAOO,QAAQxuE,QAAQqpC,GAGvBoX,wBACCx6C,EAAM,IAAIlF,WAEhBkF,EAAIvC,IAAI9D,KAAKquE,OAAOM,iBAEfQ,mBAAmB3rE,QAAQ6C,EAAIvC,IAAKuC,QACpCgoE,OAAOO,QAAQprE,QAAQ6C,EAAIvC,IAAKuC,QAChCgoE,OAAO5nE,KAAKmZ,MAAMpc,QAAQ6C,EAAIvC,IAAKuC,GAEjCA,EAGFy6C,wBACE,IAAI3/C,IAAInB,KAAKquE,OAAO5uC,IAGtBr3B,aACG,SAAQA,EAAKpI,KAAKquE,UAGpBc,yBACAL,kBAACA,EAADr+C,OAAoBA,EAApBwO,QAA4BA,GAAWj/B,KAAKquE,cAC9CS,EACEA,EAAkBn2D,IAChB8X,EAGK,CAAC5Q,GAAQivD,EAAmB,CAACp+C,UAAW,SAE1C,CAEL7Q,GAAQivD,EAAmB,IAC3BjvD,GAAQivD,EAAmB,CAACp+C,UAAW,SAGpC,CAAC7Q,GAAQivD,IAEX7vC,GAAW,GAGb0iB,iBACCte,EAA2B,IAC3BurC,QAACA,EAADE,kBAAUA,EAAmBH,WAAY/uD,EAAzCmvD,QAAgDA,EAAhDtoE,KAAyDA,EAAzDqT,OAA+DA,EAA/D2W,OAAuEA,EAAvEgP,GAA+EA,GAAMz/B,KAAKquE,UAG5F59C,GAAUq+C,EAAmB,OACzB/+C,aAACA,EAAe,GAAhBpX,IAAqBA,GAAOm2D,EAC9Bn2D,GAGF0qB,EAAUjjC,KAAK,CACbS,KAAM,UACNmd,KACG,GAAE+R,KACHlQ,GAAQivD,EAAmB,CAAC9wD,KAAM,UACjC,IAAG,EAAI+R,KACRlQ,GAAQivD,EAAmB,CAAC9wD,KAAM,QAAS0S,UAAW,QACxD+O,GAAI5f,GAAQivD,EAAmB,CAACp+C,UAAW,MAAOqE,OAAO,MAI7DsO,EAAUjjC,KAAK,CACbS,KAAM,SACN+e,MAAAA,EACAqf,QAAS,IAAI8vC,KAAYH,GACzBnrE,IAAKoc,GAAQivD,EAAmB,CAACp+C,UAAW,QAC5CqnB,OAAQ,QACRv4C,MAAO,WAKX6jC,EAAUjjC,KAAK,CACbS,KAAM,QACNo+B,QAAS,IAAIj/B,KAAKmvE,sBAAuBP,GACzChvD,MAAAA,EACAnZ,KAAAA,EACAg5B,GAAAA,EACA3lB,OAAAA,IAGKupB,GCpPJ,MAAM+rC,WAA4BzvB,GAChCj/C,eACE,IAAI0uE,GAAoB,KAAMxnE,EAAU5H,KAAKqjC,YAGtD57B,YAAYpG,EAAuCgiC,SAC3ChiC,QAD2CgiC,UAAAA,EAI5C0kC,cAAct+B,QACdpG,UAAUpE,QAAUt1B,EAAO3J,KAAKqjC,UAAUpE,QAAQpgB,OAAO4qB,IAASzlB,GAAKA,IAGvE68B,wBACCx6C,EAAM,IAAIlF,WAEfnB,KAAKqjC,UAAUpE,SAAW,IAAIz7B,QAAQ6C,EAAIvC,IAAKuC,IAC/CrG,KAAKqjC,UAAU58B,MAAQ,IAAIjD,SAAQqgB,GAAKxd,EAAIvC,IAAI+f,EAAEjE,cAE9CyjB,UAAUgsC,OACZ5uE,KAAIwtE,GAAKA,EAAEruD,QACXyG,QAAO5gB,QAAWS,IAANT,IACZjC,QAAQ6C,EAAIvC,IAAKuC,GAEbA,EAGFy6C,wBACE,IAAI3/C,IAAInB,KAAKqjC,UAAUgsC,OAAO5uE,IAAIT,KAAKkuE,iBAGxCA,eAAeoB,UACdA,EAAe7vC,IAAM5f,GAAQyvD,GAG/BlnE,aACG,mBAAkBA,EAAKpI,KAAKqjC,aAG/Bse,iBACClY,EAAmB,GACnBm+B,EAAsC,GACtCnoC,EAAe,GACfxY,EAAS,OAEV,MAAMooD,KAAUrvE,KAAKqjC,UAAUgsC,OAClCzH,EAAIxnE,KAAKivE,EAAOzoE,IAChB64B,EAAGr/B,KAAKJ,KAAKkuE,eAAemB,IAC5BpoD,EAAO7mB,UAAsB8F,IAAjBmpE,EAAOllC,MAAsB,KAAOklC,EAAOllC,OACvDV,EAAOrpC,UAAsB8F,IAAjBmpE,EAAOzvD,MAAsB,KAAOyvD,EAAOzvD,aAGnD/F,EAAQ7Z,KAAKqjC,UAAUxpB,MACvBolB,EAAUj/B,KAAKqjC,UAAUpE,WAE3BplB,GAAsB,OAAbA,EAAM,IAA4B,OAAbA,EAAM,IAAe+tD,EAAIz+D,OAAMzE,GAAKyT,GAAczT,WAE3E,CACL7D,KAAM,gBACN4+B,GAAAA,EACAmoC,IAAKA,EACLn+B,OAAAA,UACgBvjC,IAAZ+4B,EAAwB,CAACA,QAAAA,GAAW,UAItCsvC,EAAuB,GACvBC,EAAyB,WACHtoE,IAAxBlG,KAAKqjC,UAAU58B,SACZ,MAAMyhE,KAAaloE,KAAKqjC,UAAU58B,KACrC8nE,EAAWnuE,KAAK8nE,EAAUtoD,OAC1B4uD,EAAUpuE,KAAK8nE,EAAU92D,OAAS,mBAGhC3K,EAAqB,CACzBmZ,MAAO2uD,EACPn9D,MAAOo9D,GAEHe,EAAcvvE,KAAKqjC,UAAUksC,kBAE5B,CACL1uE,KAAM,SACNomB,OAAAA,EACAwY,GAAAA,EACAmoC,IAAAA,EACAn+B,OAAAA,EACAhjC,KAAAA,UACoBP,IAAhBqpE,EAA4B,CAACA,YAAAA,GAAe,WAChCrpE,IAAZ+4B,EAAwB,CAACA,QAAAA,GAAW,WAC1B/4B,IAAV2T,EAAsB,CAACA,MAAAA,GAAS,KCxDnC,SAAS21D,GAAc7pE,MACxBA,aAAgBsiE,MACS,IAAvBtiE,EAAKq6C,eAAyBr6C,EAAK67C,SAAS,aAAchB,GAevD,OAGCivB,EAAY9pE,EAAK4Y,MAAMwgC,UAAUz5C,KAAK6d,KAC5CusD,GAAoBD,SAGdE,GA1DU39D,EA0DYrM,WAzDvBjF,EAAMiF,QACPA,aAAgBsiE,IAAY,OAC1BhlE,EAAO0C,EAAKjF,WAEduC,aAAgBu9C,GAAY,OACxBovB,EAAUC,GAAqB5sE,EAAK+9C,YAC1C/9C,EAAKi+C,UAAU0uB,GAEf59D,EAAMuM,MAAMwgC,UAAUz5C,KAAKwqE,YAAYF,GAAW3sE,OAElDA,aAAgBmkE,IAChBnkE,aAAgBmrE,IAChBnrE,aAAgBmsE,IAChBnsE,aAAgB+qE,KAEhB/qE,EAAK8kE,cAAc/1D,EAAMy3B,YAEtB,MAAM8T,KAAK53C,EAAK67C,SAAShhD,QAAQE,GACpC68C,EAAEl8C,OAAS4B,QAGN,CAACA,UAGH0C,EAAK67C,SAAShhD,QAAQE,KAkCrBuC,EAAuB0C,EAAK67C,SAAS/gD,IAAIkvE,GAAQvwE,WAClD,MAAM8F,KAAKjC,EACdiC,EAAE7D,OAASouE,MAzB4D,OAEnE1tE,EAAQ4D,EAAK67C,SAAS,IAG1Bz/C,aAAiBqlE,IACjBrlE,aAAiBqsE,IACjBrsE,aAAiBqtE,IACjBrtE,aAAiBisE,KAEjBjsE,EAAMgmE,cAAcpiE,EAAK8jC,QAG3B1nC,EAAMu+C,iBACNkvB,GAAc7pE,QAehBA,EAAK67C,SAAS/gD,IAAI+uE,IAjEtB,IAAsBx9D,EAqEtB,SAAS09D,GAAoB/pE,MACvBA,aAAgB66C,IAAc76C,EAAK9E,OAAS07C,GAAewoB,MAClC,IAAvBp/D,EAAKq6C,cAAqB,OACtBj+C,EAAQ4D,EAAK67C,SAAS,GACtBz/C,aAAiBkmE,KACrBlmE,EAAMu+C,iBACNovB,GAAoB/pE,KC/ErB,MAAMkqE,GAAqB,SAM3B,SAASE,GAAWvE,OACpB,MAAM7lE,KAAQ6lE,EAAO,KACnB,MAAMzpE,KAAS4D,EAAK67C,YACnBz/C,EAAMV,SAAWsE,SAEZ,MAINoqE,GAAWpqE,EAAK67C,iBACZ,SAIJ,EAST,SAASwuB,GAAaC,EAAsBzE,OACtC0E,GAAW,MAEV,MAAMvqE,KAAQ6lE,EACjB0E,EAAWD,EAAU/E,SAASvlE,IAASuqE,SAGlCA,EAGT,SAASC,GAA2BC,EAA8B7xD,EAAc8xD,OAC1EC,EAAQF,EAAc/L,QACtB6L,GAAW,SAEfA,EAAWF,GAAa,IAAIO,GAA2CD,IAAUJ,EACjFA,EAAWF,GAAa,IAAIO,GAA4ChyD,GAAQ+xD,IAAUJ,EAG1FI,EAAQA,EAAMjqD,QAAO5mB,GAAKA,EAAEugD,cAAgB,IAE5CkwB,EAAWF,GAAa,IAAIO,GAAmCD,IAAUJ,EAEzEI,EAAQA,EAAMjqD,QAAO5mB,GAAKA,EAAEugD,cAAgB,IAEvCqwB,IAGHH,EAAWF,GAAa,IAAIO,GAA0BD,IAAUJ,EAChEA,EAAWF,GAAa,IAAIO,GAAqBhyD,GAAQ+xD,IAAUJ,EACnEA,EAAWF,GAAa,IAAIO,GAAuCD,IAAUJ,EAC7EA,EAAWF,GAAa,IAAIO,GAAyBD,IAAUJ,EAC/DA,EAAWF,GAAa,IAAIO,GAA8BD,IAAUJ,EACpEA,EAAWF,GAAa,IAAIO,GAA6BD,IAAUJ,EACnEA,EAAWF,GAAa,IAAIO,GAAkCD,IAAUJ,EACxEA,EAAWF,GAAa,IAAIO,GAA2BD,IAAUJ,GAGnEE,EAAc/L,QAAUiM,EAEjBJ,ECpEF,MAAMM,GACX/oE,YAAYgpE,4BACVpxE,OAAOC,eAAeU,KAAM,SAAU,CACpCqE,YAAY,EACZ6qB,IAAKuhD,oBAMcC,EAAgBnuB,UAC9B,IAAIiuB,IAAiB,IAAME,EAAOnuB,MCoCtC,SAASouB,GAAiBpyD,GAC3BmjD,GAAYnjD,GAOlB,SAA8BA,SACtBqyD,EAA4CryD,EAAMwgC,UAAUmE,WAE7D,MAAMtxC,KAAWi/D,EAAUD,GAAuB,OAC/CE,EAAUC,GAAsBxyD,EAAO3M,MACtBg/D,EAAqBh/D,GAC7BopC,gBAAgB,UAAW81B,GAC1CE,GAAqBzyD,EAAO3M,GAExB2M,EAAMwgC,UAAUz5C,KAAK2rE,UAAW,KAE9BC,EAAqB3yD,QACjBmvC,GAAawjB,IAAgBA,EAAY7vE,QAC/C6vE,EAAcA,EAAY7vE,UAKZ,WAFA6vE,EAAYnyB,UAAU98C,QAAQ8sB,MAAMnd,OAG7C,MAAMsJ,KAAU41D,EAAQtxE,MAEvByb,GAAgBC,KAElBA,EAAO5V,KAAOuqE,GAAqB30D,EAAO5V,KAAK2F,QAAQ4kE,GAAoB,OA7BnFsB,CAAqB5yD,GAqCzB,SAAiCA,OAC1B,MAAMxc,KAASwc,EAAMijC,SACxBmvB,GAAiB5uE,SAGb6uE,EAA4CryD,EAAMwgC,UAAUmE,WAE7D,MAAMtxC,KAAWi/D,EAAUD,GAAuB,KACjDE,EACAM,EAAmC,SAElC,MAAMrvE,KAASwc,EAAMijC,SAAU,OAC5B6vB,EAAiBtvE,EAAMg9C,UAAUmE,OAAOtxC,MAC1Cy/D,EAAgB,CAEhBP,OADc5qE,IAAZ4qE,EACQO,EAAet2B,gBAAgB,WAE/Ba,GACRk1B,EACAO,EAAet2B,gBAAgB,WAC/B,UACA,QACAu2B,UAIEC,EAAKF,EAAeniD,IAAI,mBAC1BkiD,GAAmBG,GAAMH,EAAgBjnC,QAAUonC,EAAGpnC,OACxD9lB,GAASA,IAEX+sD,EAAkBG,GAItBX,EAAqBh/D,GAASopC,gBAAgB,UAAW81B,GAErDM,GACFR,EAAqBh/D,GAAShO,IAAI,kBAAmBwtE,GAAiB,IAxExEI,CAAwBjzD,GAwGrB,SAASwyD,GAAsBxyD,EAAkB3M,SAChD+Q,EAAYpE,EAAMskC,kBAAkBjxC,GAASsd,IAAI,SACjD0I,SAACA,GAAYrZ,EAEbrD,EA3BR,SACEA,EACA8G,EACAW,EACA8uD,MAEe,iBAAXv2D,EAA2B,OACvBrD,MAACA,EAAD65D,OAAQA,GAAUC,GAAyB3vD,EAAUW,OACtD9K,cACHwM,GAASqtD,QAGN,QAAexrE,IAAXgV,GAAwBu2D,EAAYG,sBAAuB,OAE9D/5D,MAACA,GAAS85D,GAAyB3vD,EAAUW,MAC/C9K,QACK,sBAIJqD,EAOQ22D,CACbtzD,EAAMkpD,YAAY71D,GAClB2M,EAAMi8C,cAAc5oD,GACpB+Q,EACApE,EAAMI,OAAOoQ,cAEX7T,IAAWqD,EAAMkpD,YAAY71D,KAC/B2M,EAAMuzD,gBAAgBlgE,GAAW,IAC5B2M,EAAMuzD,gBAAgBlgE,GACzBsJ,OAAAA,IAKY,MAAZtJ,GAAmB4kB,GAAmBoB,EAASnnB,IAC7C+lB,GAAmBoB,EAAS3vB,GACvB2zC,GACLm2B,GAAyBpvD,EAAWzH,EAAQqD,EAAO,KACnDwzD,GAAyBpvD,EAAWzH,EAAQqD,EAAO,MACnD,SACA,QACA+yD,IAGKS,GAAyBpvD,EAAWzH,EAAQqD,EAAO,MAEvC,MAAZ3M,GAAmB4kB,GAAmBoB,EAASlnB,IACpD8lB,GAAmBoB,EAASntB,GACvBmxC,GACLm2B,GAAyBpvD,EAAWzH,EAAQqD,EAAO,KACnDwzD,GAAyBpvD,EAAWzH,EAAQqD,EAAO,MACnD,SACA,QACA+yD,IAGKS,GAAyBpvD,EAAWzH,EAAQqD,EAAO,MAGvDwzD,GAAyBpvD,EAAWzH,EAAQqD,EAAO3M,GAc5D,SAASogE,GACP92D,EACAra,EACA0kB,eAGM0sD,YAAqBjrD,GAAkBzB,uBAAlB+C,EAA6B9C,WAC3C,aAAT3kB,GAAuBoxE,EAlB7B,SACE/2D,EACAra,EACA0kB,UAEOrK,EAAOza,KAAIsJ,IAET,CAACkU,OAAS,UADJiK,GAAUne,EAAG,CAACwb,SAAAA,EAAU1kB,KAAAA,WAa9BqxE,CAAsBh3D,EAAQra,EAAMoxE,GAGtC,CAAC/2D,GAGV,SAAS62D,GACPpvD,EACAzH,EACAqD,EACA3M,SAEMgmB,SAACA,GAAYrZ,EACbqR,EAAkB4G,GAAmBoB,EAAShmB,KAE9C/Q,KAACA,GAAQ+uB,EACTrK,EAAWqK,EAAe,Y/GkM3B,SAA2B1U,UACzBA,GAAUA,EAAM,U+GjMnBi3D,CAAkBj3D,GAAS,OACvBk3D,EAAgBL,GAAyBpvD,OAAWzc,EAAWqY,EAAO3M,GAEtEygE,EAAYL,GAA4B92D,EAAOm3D,UAAWxxE,EAAM0kB,UAE/D81B,GAAa,IAAI+2B,EAAc5yE,SAAU6yE,IAC3C,GAAIv3D,GAAYI,UACdmgC,GAAa,CAACngC,IAChB,GAAIA,GAAqB,iBAAXA,IAA8BmQ,GAAkBnQ,UAC5DmgC,GAAa22B,GAA4B92D,EAAQra,EAAM0kB,UAG1D4K,EAAQ5R,EAAM4R,SAChBA,GAASve,IAAYue,EAAMuiB,aAAc,IACtB,cAAjBviB,EAAMrW,cACDwhC,GAAa,CAAC,CAAC,EAAG,WAGrBh2C,EAAOiZ,EAAMumD,gBAAgBvoB,GAAewoB,aAC3CzpB,GAAa,CAClB,CACEh2C,KAAAA,EACAsa,MAAOrB,EAAMsB,QAAQjO,EAAS,CAACqe,OAAQ,WAEzC,CACE3qB,KAAAA,EACAsa,MAAOrB,EAAMsB,QAAQjO,EAAS,CAACqe,OAAQ,iBAKvCxpB,EACJ2O,GAAexD,IAAYqd,GAAWW,GA2InC,SACLrR,EACA3M,EACA+Q,OAEKsI,GAAkBtI,gBAKjBX,EAAWzD,EAAMyD,SAASpQ,GAC1BnL,EAAOub,EAASvb,QAGlBwsB,GAAYxsB,SACP,CACLG,GAAI,MACJgZ,MAAOq7C,GAAoBj5C,EAAUpQ,GACrCR,MAAO,mBAIL+e,MAACA,GAAS5R,EACV+zD,EAAkBniD,EACpB,IAAKA,EAAMmjB,aAAe,CAACnjB,EAAMmjB,cAAgB,MAAQnjB,EAAM8iB,QAAQxyC,KAAI8I,GAAKA,EAAEyY,SAASpC,cAC3F1Z,KAGA8sB,GAAYvsB,GAAO,QAEd8rE,GAAmB9rE,EADD0pB,IAAU0gD,EAAcyB,EAAiB7rE,EAAKmZ,QAElE,GAAImT,GAAiBtsB,GAAO,OAC3BmxB,SAACA,EAADxmB,MAAWA,GAAS3K,EACpB+rE,EAAmBj0D,EAAMyD,SAAS4V,IAClCtf,UAACA,EAADsH,MAAYA,GAAS4yD,EAErBC,EAAmBtiD,IAAU0gD,EAAcyB,EAAiB1yD,MAE9D3H,GAAYK,IAAcJ,GAAYI,UACjCi6D,GACL,CACE3yD,MAAOC,GAAQ2yD,GACfphE,MAAAA,GAEFqhE,GAEG,GAAIt6D,GAAcG,KAAeA,SAC/Bi6D,GACL,CACE3rE,GAAI0R,EACJsH,MAAAA,EACAxO,MAAAA,GAEFqhE,OAGC,CAAA,GAAa,eAAThsE,QACF,CACLG,GAAI,MACJgZ,MAAOrB,EAAMsB,QAAQjO,GACrBR,MAAO,cAEJ,GAAIy/D,EAAc,CAAC,iBAAa3qE,GAAoCO,UAClE,SA1MkDisE,CAAWn0D,EAAO3M,EAAS+Q,QAAazc,KAE/FwpB,GAAWE,GAAkB,QAExB0rB,GADG02B,GAA4B,CAACpiD,EAAgB9jB,OAAQjL,EAAM0kB,UAIjEvD,EAAW4N,KACF,iBAAX1U,EAA2B,OACvB5V,EAAOiZ,EAAMumD,gBAAgBvoB,GAAewoB,OAC5CnlD,MAACA,GAASgQ,SACT0rB,GAAa,CAClB,CACEh2C,KAAAA,EACAsa,MAAOC,GAAQ,CAACD,MAAAA,EAAOtH,UAAW,SAEpC,CACEhT,KAAAA,EACAsa,MAAOC,GAAQ,CAACD,MAAAA,EAAOtH,UAAW,WAGjC,GAAIS,GAAUiJ,EAASrJ,KAAM,IAC9BsS,GAAkBtI,UAGX24B,GAFS,gBAAd34B,EAEkB,GAKF,CAClB,CAGErd,KAAMurE,EAAepqE,GACjB8X,EAAMumD,gBAAgBvoB,GAAewoB,MACrCxmD,EAAMumD,gBAAgBvoB,GAAeo2B,KAEzC/yD,MAAOrB,EAAMsB,QAAQjO,EAAS+e,GAAiB3O,EAAUpQ,GAAW,CAAC8e,UAAW,SAAW,IAE3FjqB,MACW,IAATA,GAAkB0S,WAAS1S,GAKvBA,EAJA,CACEmZ,MAAOrB,EAAMsB,QAAQjO,EAAS,IAC9BhL,GAAI,UAKX,OAEC+R,IAACA,GAAOqJ,KACVjJ,GAAUJ,GAAM,OACZi6D,EAAY3M,GAAiB1nD,EAAOyD,EAASpC,MAAOjH,UACnD2iC,GAAa,CAClB,IAAIk1B,IAAiB,WACbvyD,EAASM,EAAMs0D,cAAcD,SAC3B,IAAG30D,YAAiBA,sBAIzBq9B,GAAa,CAClB,CACEh2C,KAAMiZ,EAAMumD,gBAAgBvoB,GAAewoB,MAC3CnlD,MAAOrB,EAAMsB,QAAQjO,EAAS,QAKjC,GACLoQ,EAASuD,UACTsrD,EAAc,CAAC,OAAQ,OAAQluD,IAC/BkR,GACE7R,EACA0/C,GAAYnjD,GAASA,EAAMqZ,SAAS3kB,GAAyBrB,SAAY1L,EACzEqY,EAAMG,QACNH,EAAMI,QAER,OACMrZ,EAAOiZ,EAAMumD,gBAAgBvoB,GAAewoB,aAC3CzpB,GAAa,CAClB,CACEh2C,KAAAA,EACAsa,MAAOrB,EAAMsB,QAAQjO,IAEvB,CACEtM,KAAAA,EACAsa,MAAOrB,EAAMsB,QAAQjO,EAAS,CAACqe,OAAQ,WAGtC,OACEqrB,GADE70C,EACW,CAClB,CAGEnB,KAAMurE,EAAepqE,GACjB8X,EAAMumD,gBAAgBvoB,GAAewoB,MACrCxmD,EAAMumD,gBAAgBvoB,GAAeo2B,KACzC/yD,MAAOrB,EAAMsB,QAAQjO,GACrBnL,KAAMA,IAIU,CAClB,CACEnB,KAAMiZ,EAAMumD,gBAAgBvoB,GAAewoB,MAC3CnlD,MAAOrB,EAAMsB,QAAQjO,MAM7B,SAAS2gE,GAAmB9rE,EAAiCgsE,SACrD7rE,GAACA,EAADgZ,MAAKA,EAALxO,MAAYA,GAAS3K,QACpB,CAELG,GAAIA,IAAO6rE,EAAmB,MAAQ7/C,OAElChT,EAAQ,CAACA,MAAOixD,EAAwBjxD,IAAU,MAElDxO,EAAQ,CAACA,MAAAA,GAAS,IAI1B,SAAS4/D,GAAqBzyD,EAAkB3M,eACxCmd,EAAQxQ,EAAMwgC,UAAUmE,OAAOtxC,GAC/BkP,EAAOvC,EAAMuzD,gBAAgBlgE,GAASsJ,OACtCvC,YAAM4F,EAAMyD,SAASpQ,uBAAfqwD,EAAyBtpD,IAC/BuC,EAASmQ,GAAkBvK,IAASA,EACpC1H,EAASJ,GAAYL,IAAQG,GAAkBH,EAAIS,SAAWT,EAAIS,QAEpE8B,GAAU9B,IAIZ2V,EAAMnrB,IAAI,kBAAmBsX,GAAU9B,GAAQ,GAiF5C,SAASu4D,GACd3vD,EACAW,SAEMrK,UAACA,EAADzX,KAAYA,GAAQmhB,SAErB1J,EAOD/P,WAAS+P,KAAeE,GAAuBF,GAC1C,CACLT,OAAO,EACP65D,OAAQrtD,GAAmD/L,IAIlD,iBAATzX,GACgB,QAAd8hB,EACK,CACL9K,OAAO,EACP65D,OAAQrtD,GAA2CrC,IAKlD,CAACnK,OAAO,GAtBN,CACLA,OAAO,EACP65D,OAAQrtD,GAAoDrC,IA0BlE,SAASsvD,GACP9wD,EACAC,EACAhX,EACAgyC,UAEIj7B,EAAGI,UAAYH,EAAGG,UACpByD,GrHtPG,SAA2C5a,EAAqBgyC,EAAiCj7B,EAAOC,SACrG,eAAcg7B,EAAW92C,wBAAwB8E,EAAS9E,gBAAgBqB,EAAUwa,UAAWxa,EACrGya,2CqHoPS4D,CAA2C5a,EAAUgyC,EAAYj7B,EAAGhhB,MAAOihB,EAAGjhB,QAGlF,CAACohB,SAAUJ,EAAGI,SAAUphB,MAAO,IAAIghB,EAAGhhB,SAAUihB,EAAGjhB,QAMrD,SAASszE,GAAahC,SACrBiC,EAAgBlC,EACpBC,EAAQrwE,KAAIya,OAEND,GAAgBC,GAAS,OACpBzU,KAAMusE,KAAOC,GAAqB/3D,SAClC+3D,SAEF/3D,KAET21D,GAGIqC,EAAuBrC,EAC3BC,EACGrwE,KAAIujB,OACC/I,GAAgB+I,GAAI,OAChBza,EAAIya,EAAEvd,iBACFP,IAANqD,GAAoBsnE,EAAetnE,KACjC,OAAQA,GAAc,UAATA,EAAE3C,WAEV2C,EAAEqW,MAEK,cAAZrW,EAAE6H,cAEG7H,EAAE6H,OAGN7H,MAIV8c,QAAO9c,QAAWrD,IAANqD,IACfsnE,MAG2B,IAAzBkC,EAAc/vE,cAEX,GAA6B,IAAzB+vE,EAAc/vE,OAAc,OAC/BkY,EAAS41D,EAAQ,MACnB71D,GAAgBC,IAAWg4D,EAAMlwE,OAAS,EAAG,KAC3CyD,EAAOysE,EAAM,MACbA,EAAMlwE,OAAS,EACjBqhB,GAASA,IACT5d,GAAO,UAGH0S,WAAS1S,IAAS,UAAWA,EAAM,OAC/ByhE,EAAYzhE,EAAKmZ,MACnB1E,EAAO0E,QAAUsoD,IACnBzhE,GAAOA,EAAK2K,OAAQ,CAACA,MAAO3K,EAAK2K,cAIhC,IACF8J,EACHzU,KAAAA,UAGGyU,QAIHi4D,EAAmBtC,EACvBqC,EAAMzyE,KAAI8I,GACJsnE,EAAetnE,MAAQ,OAAQA,IAAOhB,WAASgB,EAAE3C,KAAO2C,EAAE3C,MAAMwsE,GAC3D7pE,GAET8a,GrHzTC,SAA2B5d,SACxB,0BAAyBT,EAC/BS,8EqHuTW4d,CAA8B9a,KAChC,KAETsnE,OAGEpqE,EAE4B,IAA5B0sE,EAAiBnwE,OACnByD,EAAO0sE,EAAiB,GACfA,EAAiBnwE,OAAS,IACnCqhB,GAASA,IACT5d,GAAO,SAGH4sE,EAAUxC,EACdC,EAAQrwE,KAAIujB,GACN/I,GAAgB+I,GACXA,EAAE1e,KAEJ,QAET2C,GAAKA,OAGgB,IAAnBorE,EAAQrwE,QAA+B,OAAfqwE,EAAQ,GAAa,OAEN,CACvC/tE,KAAM+tE,EAAQ,GACd5pC,OAAQspC,EAActyE,KAAIujB,GAAMA,EAA6BpE,WACzDnZ,EAAO,CAACA,KAAAA,GAAQ,UAMjB,CAACgjC,OAAQspC,KAAmBtsE,EAAO,CAACA,KAAAA,GAAQ,IAO9C,SAASiiE,GAAmBxtD,MAC7BD,GAAgBC,IAAW3S,WAAS2S,EAAO0E,cACtC1E,EAAO0E,MACT,GvHldF,SAAgC1E,UAChC/a,UAAQ+a,IACJ,WAAYA,KAAY,SAAUA,GuHgdhCo4D,CAAuBp4D,GAAS,KACrC0E,MACC,MAAM2zD,KAAkBr4D,EAAOuuB,UAC9BxuB,GAAgBs4D,IAAmBhrE,WAASgrE,EAAe3zD,UACxDA,GAEE,GAAIA,IAAU2zD,EAAe3zD,aAClCyE,GrHpWR,6KqHqWezE,OAHPA,EAAQ2zD,EAAe3zD,aAO7ByE,GrHtWF,sQqHuWSzE,EACF,GvHzdF,SAA+B1E,UAC/B/a,UAAQ+a,IACJ,WAAYA,GAAU,SAAUA,EuHud9Bs4D,CAAsBt4D,GAAS,CACxCmJ,GrHtWF,iLqHuWQzE,EAAQ1E,EAAOuuB,OAAO,UACrBlhC,WAASqX,GAASA,OAAQ1Z,GAM9B,SAASyiE,GAAepqD,EAAc3M,UAepCkhE,GAdgCv0D,EAAMwgC,UAAUmE,OAAOtxC,GAE/Bsd,IAAI,WAAWzuB,KAAKya,IAI7CD,GAAgBC,KAClBA,EAAO5V,KAAOiZ,EAAM+lD,iBAAiBppD,EAAO5V,OAGvC4V,MC7qBJ,SAASu4D,GAAel1D,UACzBglC,GAAahlC,IAAUu/C,GAAcv/C,GAEhCA,EAAMijC,SAAS1hD,QAAO,CAACojD,EAAQnhD,IAC7BmhD,EAAOrkC,OAAO40D,GAAe1xE,KACnC2xE,GAAuBn1D,IAInBm1D,GAAuBn1D,GAI3B,SAASm1D,GAAuBn1D,UAC9B/X,EAAK+X,EAAMwgC,UAAUmE,QAAQpjD,QAAO,CAACojD,EAAmBtxC,WACvDq5C,EAAiB1sC,EAAMwgC,UAAUmE,OAAOtxC,MAC1Cq5C,EAAehrC,cAEVijC,QAGHn0B,EAAQk8B,EAAenQ,WACvB3tC,KAACA,EAADtM,KAAOA,EAAPuwE,gBAAaA,EAAiBN,QAASz+D,EAAI2I,MAAOxI,EAAlDsZ,QAAsDA,KAAY6nD,GAAmB5kD,EACrF/T,EAqBH,SACLqvC,EACA76B,EACA5d,EACA2M,MAGIpK,GAAOvC,OACLmJ,GAAcsvC,SAET,CACLryB,KAAM,CAAC/Z,OAAS,GAAEuR,gBAGjB,GAAIrW,WAASkxC,IAAepvC,GAAgBovC,SAC1C,IACFA,EACH/kD,KAAMiZ,EAAM+lD,iBAAiBja,EAAW/kD,cAGrC+kD,EAzCSupB,CAAmB7kD,EAAM/T,MAAO7N,EAAMyE,EAAS2M,GAEvDrD,EAASytD,GAAepqD,EAAO3M,GAC/BiiE,EAAYzC,EvE+Hf,SACL7yD,EACAnF,EACAg0C,EACAlyC,SAEM44D,EAAe/c,GAAqBx4C,EAAOnF,EAAO+wB,MAAO/wB,SAExD,CACL6E,OACEiN,GAAoBkiC,EAAUl+B,IAAI,UAAY/uB,UAAQ+a,IAAWA,EAAO,GAAKA,EAAO,GAC/E,WAAU44D,iBAA4BA,KACvCA,GuE1IFC,CAA6Bx1D,EAAO6yD,EAAiBnmB,EAAgB/vC,GACrE,YAEJgoC,EAAO9iD,KAAK,CACV+M,KAAAA,EACAtM,KAAAA,KACIqa,EAAS,CAACA,OAAAA,GAAU,MACpB24D,EAAY,CAACA,UAAAA,GAAa,GAC9B74D,MAAAA,UACgB9U,IAAZ4lB,EAAwB,CAACA,QAASA,GAAkB,MACrD6nD,IAGEzwB,IACN,IC5BE,MAAM8wB,WAAuBp5B,GAGlCnzC,YAAY0F,EAAc8mE,SAEtB,IACC9mE,KAAAA,sBALW,QAOT6tC,gBAAgB,OAAQi5B,GAMxBvsB,sCACoB,IAArB1nD,KAAKkvB,IAAI,SAGNnmB,EAAK/I,KAAKkvB,IAAI,YAAYlL,GAAK7jB,UAAQ6jB,IAAmB,IAAbA,EAAEhhB,QAAgBghB,EAAE,IAAM,GAAKA,EAAE,IAAM,KCUxF,MAAMkwD,GAAoC,CAAC,QAAS,UAE3D,SAAShhE,GAAetB,SACH,MAAZA,EAAkB,QAAsB,MAAZA,EAAkB,cAAW1L,EAmBlE,SAASiuE,GAAiB51D,EAAkB3M,SACpCoQ,EAAWzD,EAAMyD,SAASpQ,MAE5BoQ,MAAAA,GAAAA,EAAUrJ,IAAK,OACXA,IAACA,EAADiH,MAAMA,GAASoC,EACfzN,EAAWrB,GAAetB,GAC1BgrD,EAAar+C,EAAMkhC,QAAQlrC,MAE7B4E,WAASR,IAAQA,EAAIM,aAAuB/S,IAAbyS,EAAIqf,YAC9B,IAAIw4C,IAAiB,WACpBhhD,EAAYjR,EAAMiR,UAAU5d,GAC5BwiE,EAAY,YAAW5kD,oBAA4BA,aAAqB7W,EAAIqf,aAC1E,GAAEzZ,EAAMs0D,cAAcjW,SAAkBwX,QAE7C,GAAIr7D,GAAUJ,GAAM,OACnBi6D,EAAY3M,GAAiB1nD,EAAOqB,EAAOjH,UAG1C,IAAI63D,IAAiB,WACpB6D,EAAc91D,EAAMs0D,cAAcD,GAClCwB,EAAY,IAAGC,YAAsBA,cAAwBA,eAC3D,GAAE91D,EAAMs0D,cAAcjW,SAAkBwX,UAUjD,SAASE,GAAqB1iE,EAAuB2M,SACpDg2D,EAAiBh2D,EAAMuzD,gBAAgBlgE,IACvC1H,KAACA,GAAQqU,EAGToE,EADkBpE,EAAMskC,kBAAkBjxC,GACdsd,IAAI,YAIjC,MAAMzlB,KAAYyqE,WACYhuE,IAA7BquE,EAAe9qE,GAAyB,OACpC+qE,EAAuB9nD,GAAyB/J,EAAWlZ,GAC3DgrE,EAAyB9nD,GAAoC/a,EAASnI,MACvE+qE,EAEE,GAAIC,EAETpwD,GAASowD,eAEDhrE,OACD,eACGuR,EAAQu5D,EAAev5D,SACzB7a,UAAQ6a,OACN7G,GAAOvC,UACFypC,GACLrgC,EAAMva,KAAIsJ,OACE,UAANA,GAAuB,WAANA,EAAgB,OAK7B6yD,EAAar+C,EAAMkhC,QAAQ11C,GAC3B8oE,EAAgBt0D,EAAMs0D,cAAc7oC,KAAKzrB,UACxCiyD,GAAiBkE,SAAS7B,EAAejW,UAE3C7yD,WAIR,GAAIoP,WAAS6B,UACXqgC,GAAa,CAClB/1C,KAAMiZ,EAAMumD,gBAAgBvoB,GAAewoB,MAC3CnlD,MAAO5E,EAAM4E,MACbnZ,KAAM,CAACG,GAAI,MAAOgZ,MAAOrB,EAAMsB,QAAQjO,aAIpCypC,GAAargC,OAEjB,gBACIqgC,GAAas5B,GAAYJ,EAAe9qE,UApCnD4a,GAASA,GAA8C1B,EAAWlZ,EAAUmI,OA0C9EA,IAAY/D,IAAK+D,IAAY9D,GAAG,OAC5B2lB,EAAc7hB,IAAY/D,GAAI,QAAU,SACxCs1B,EAAYj5B,EAAKupB,MACnBqX,GAAO3H,GAAY,IACjBlY,GAAkBtI,UACb04B,GAAa,CAACrjB,KAAMmL,EAAUnL,OAErC3T,GAASA,GAAwBoP,WAKjClI,SAACA,EAADD,SAAWA,GAAYipD,EACvBvwD,EAyBR,SAAsBpS,EAAuB2M,SACrCrU,KAACA,EAADyU,OAAOA,EAAPrJ,KAAeA,EAAfsiB,SAAqBA,GAAYrZ,EAEjCs0D,EAAgBt0D,EAAMs0D,cAAc7oC,KAAKzrB,IAEzC1d,KAACA,GAAQ21B,GAAmBoB,EAAShmB,IAGrC+Q,EADkBpE,EAAMskC,kBAAkBjxC,GACdsd,IAAI,SAEhChU,OAACA,EAAD0Q,UAASA,GAAarN,EAAMuzD,gBAAgBlgE,UAE1CA,QACD/D,QACAC,OAEC+iE,EAAc,CAAC,QAAS,QAASluD,MAC/B/Q,IAAY/D,IAAM3D,EAAKqT,OAKpB,GAAI3L,IAAY9D,KAAM5D,EAAKsT,OAAQ,OAClChV,EAAI+iC,GAA0B5sB,EAAO+sB,KAAM,aAC7CZ,GAAOtiC,UACFA,OARuB,OAC1BylE,EAAI1iC,GAA0B5sB,EAAO+sB,KAAM,YAC7CZ,GAAOmjC,UACFA,QAaP15D,EAAWrB,GAAetB,GAC1BgrD,EAAar+C,EAAMkhC,QAAQlrC,UAE7B3C,IAAY9D,IAAKod,GAAoBvI,GAEhC,CAAC6tD,GAAiBkE,SAAS7B,EAAejW,GAAa,GAEvD,CAAC,EAAG4T,GAAiBkE,SAAS7B,EAAejW,SAInD/tD,UAGG0c,EAAWqpD,GAAat/D,EADjBiJ,EAAMwgC,UAAUmE,OAAOtxC,GAASsd,IAAI,QACPvQ,GACpC2M,EAmJZ,SACEhW,EACApL,EACAqU,EACAI,SAEMk2D,EAAgB,CACpB5sE,EAAGksE,GAAiB51D,EAAO,KAC3B9T,EAAG0pE,GAAiB51D,EAAO,aAGrBjJ,OACD,UACA,gBAC8BpP,IAA7ByY,EAAOoQ,MAAM+lD,mBACRn2D,EAAOoQ,MAAM+lD,kBAEhB39D,EAAM49D,GAAU7qE,EAAM2qE,EAAel2D,EAAO+sB,aAE9CrjC,WAAS8O,GACJA,EAAM,EAEN,IAAIq5D,IAAiB,IAAO,GAAEr5D,EAAI8G,mBAGxC,WACA,YACA,cACIU,EAAOoQ,MAAM2d,mBACjB,cACI/tB,EAAOoQ,MAAMsd,gBACjB,YACA,aACA,aACC1tB,EAAOoQ,MAAMimD,eACRr2D,EAAOoQ,MAAMimD,cAGhBC,EAAYF,GAAU7qE,EAAM2qE,EAAel2D,EAAO+sB,aACpDrjC,WAAS4sE,GACJtU,KAAKn3C,IAAI0rD,GAA4BD,EAAW,GAEhD,IAAIzE,IAAiB,IAAO,cAAqCyE,EAAUh3D,sBAMlF,IAAI/a,MAAMmhB,GAAgC,OAAQ/O,IAnMnC6/D,CAAa7/D,EAAMpL,EAAMqU,EAAOI,UAC7CyM,GAAuBzI,GAiG1B,SACL4I,EACAD,EACAkyC,SAGM/3D,EAAI,WACF2vE,EAAO/2D,GAAoBiN,GAC3B+pD,EAAOh3D,GAAoBkN,GAC3ByM,EAAQ,IAAGo9C,OAAUC,SAAY7X,eAC/B,YAAW6X,MAASD,OAAUp9C,MAASA,aAE7Cld,GAAYwQ,GACP,IAAIklD,GAAiB/qE,GAErB,CAACwY,OAAQxY,KA/GL6vE,CACL/pD,EACAD,EAiEH,SACL3I,EACAhE,EACAzD,EACAtJ,UAEQ+Q,OACD,kBACIhE,EAAOoQ,MAAM4d,kBACjB,kBACIhuB,EAAOoQ,MAAM6d,kBACjB,wBACY1mC,IAAXgV,GAAwB/a,UAAQ+a,GAC3BA,EAAOlY,OAAS,GAEvBqhB,GxHiDD,SAAyCzS,SACtC,cAAaA,qCwHlDNyS,CAA4CzS,IAE9C,IAjFL2jE,CAAiC5yD,EAAWhE,EAAQzD,EAAQtJ,IAGvD,CAAC2Z,EAAUD,QAIjBnd,SACI,CAAC,EAAa,EAAVwyD,KAAK6U,SAEb1mE,SAGI,CAAC,EAAG,UAERb,SAEI,CACL,EACA,IAAIuiE,IAAiB,IAGX,OAFEjyD,EAAMs0D,cAAc,YACpBt0D,EAAMs0D,cAAc,uBAM/B3jE,SAEI,CAACyP,EAAOoQ,MAAM0d,eAAgB9tB,EAAOoQ,MAAM2d,qBAC/Cv9B,SACI,EAEJ,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,EAAG,EAAG,SAETP,SACI,cACJH,QACAC,QACAC,SACe,YAAdgU,EAEc,YAAT9hB,EAAqB,WAAa,eAEvBqF,IAAd0lB,EACK,YAES,SAATtW,GAA4B,aAATA,EAAsB,UAAY,YAG7DvG,QACAC,QACAC,SAEI,CAAC0P,EAAOoQ,MAAMud,WAAY3tB,EAAOoQ,MAAMwd,kBAG5C,IAAIrpC,MAAO,qCAAoC0O,KA3I3C6jE,CAAa7jE,EAAS2M,eAGhBrY,IAAbqlB,QAAuCrlB,IAAbolB,IAE3BoB,GAAyB/J,EAAW,aACpCxiB,UAAQ6jB,IACK,IAAbA,EAAEhhB,OAEKq4C,GAAa,CAAC9vB,GAAYvH,EAAE,GAAIsH,GAAYtH,EAAE,KAGhDs3B,GAAat3B,GAGtB,SAAS2wD,GAAYnpD,UlH4Od,SAA0BA,UACvBjjB,WAASijB,MAAaA,EAAM,KkH5OhCkqD,CAAiBlqD,GACZ,CACLA,OAAQA,EAAOre,QACZ0jE,EAAUrlD,EAAQ,CAAC,UAGnB,CAACA,OAAQA,GAwKlB,SAASopD,GAAat/D,EAAY+W,EAA2B1N,MACvD0N,SACEvR,GAAYuR,GACP,CAACpO,OAAS,GAAEoO,EAAKpO,gBAAgB22D,GAAat/D,GAAM,EAAOqJ,MAE3D,SAGHrJ,OACD,UACA,cACIqJ,EAAOoQ,MAAMod,gBACjB,WACA,YACA,cACIxtB,EAAOoQ,MAAM0d,mBACjB,cACI9tB,EAAOoQ,MAAMqd,gBACjB,YACA,aACA,gBACIztB,EAAOoQ,MAAMyd,cAIlB,IAAItpC,MAAMmhB,GAAgC,OAAQ/O,IAGnD,MAAM4/D,GAA4B,IAwDzC,SAASH,GACP7qE,EACA2qE,EACAxpC,SAEMsqC,EAAY7qC,GAAO5gC,EAAKqT,OAASrT,EAAKqT,MAAMya,KAAOsT,GAA0BD,EAAY,SACzFuqC,EAAa9qC,GAAO5gC,EAAKsT,QAAUtT,EAAKsT,OAAOwa,KAAOsT,GAA0BD,EAAY,iBAE9FwpC,EAAc5sE,GAAK4sE,EAAcpqE,EAC5B,IAAI+lE,IAAiB,IAKlB,OAJM,CACZqE,EAAc5sE,EAAI4sE,EAAc5sE,EAAEgW,OAAS03D,EAC3Cd,EAAcpqE,EAAIoqE,EAAcpqE,EAAEwT,OAAS23D,GAEzBztE,KAAK,WAItBw4D,KAAKxpD,IAAIw+D,EAAWC,GC9ZtB,SAASC,GAAmBt3D,EAAc9U,GAC3Ci4D,GAAYnjD,GAOlB,SAAgCA,EAAkB9U,SAC1CmnE,EAA4CryD,EAAMwgC,UAAUmE,QAC5DvkC,OAACA,EAADiZ,SAASA,EAATlZ,QAAmBA,EAAnBozD,gBAA4BA,GAAmBvzD,MAEhD,MAAM3M,KAAWpL,EAAKoqE,GAAuB,OAC1C2D,EAAiBzC,EAAgBlgE,GACjCkkE,EAAiBlF,EAAqBh/D,GACtCmkE,EAAkBx3D,EAAMskC,kBAAkBjxC,GAC1Cge,EAAkB4G,GAAmBoB,EAAShmB,IAE9CokE,EAAiBzB,EAAe9qE,GAChCkZ,EAAYozD,EAAgB7mD,IAAI,QAChC+mD,EAAeF,EAAgB7mD,IAAI,WACnCgnD,EAAoBH,EAAgB7mD,IAAI,gBAExCslD,EAAuB9nD,GAAyB/J,EAAWlZ,GAC3DgrE,EAAyB9nD,GAAoC/a,EAASnI,WAErDvD,IAAnB8vE,IAEGxB,EAEMC,GAETpwD,GAASowD,GAHTpwD,GAASA,GAA8C1B,EAAWlZ,EAAUmI,KAM5E4iE,QAAmDtuE,IAA3BuuE,UACHvuE,IAAnB8vE,EAA8B,OAC1BzwD,EAAWqK,EAAe,SAC1B/uB,EAAO+uB,EAAgB/uB,YAErB4I,OAED,gBACA,YACC+Z,GAAW+wD,EAAe9qE,KAAuB,aAAT5I,GAAuB0kB,EACjEuwD,EAAelyE,IAAI6F,EAAU,CAACwU,OAAQiK,GAAUqsD,EAAe9qE,GAAW,CAAC5I,KAAAA,EAAM0kB,SAAAA,MAAa,GAE9FuwD,EAAelyE,IAAI6F,EAAU8qE,EAAe9qE,IAAkB,iBAIhEqsE,EAAe56B,kBACbzxC,EACA8qE,QAGD,OACC/0E,EACJiK,KAAY0sE,GACRA,GAAW1sE,GAAU,CACnB8U,MAAAA,EACA3M,QAAAA,EACAge,gBAAAA,EACAjN,UAAAA,EACAszD,aAAAA,EACAC,kBAAAA,EACAh7D,OAAQq5D,EAAer5D,OACvBwD,QAAAA,EACAC,OAAAA,IAEFA,EAAOoQ,MAAMtlB,QACLvD,IAAV1G,GACFs2E,EAAelyE,IAAI6F,EAAUjK,GAAO,KAtE1C42E,CAAuB73D,EAAO9U,GAE9B4sE,GAA0B93D,EAAO9U,GAuF9B,MAAM0sE,GAET,CACFtqD,KAAM,EAAEtN,MAAAA,EAAOqR,gBAAAA,KAAsBX,GAAWW,GA0E3C,SAAcrR,EAAcyD,SAC3BrJ,EAAMqJ,EAASrJ,OACjBI,GAAUJ,GAAM,OACZi6D,EAAY3M,GAAiB1nD,EAAOyD,EAASpC,MAAOjH,UACnD,IAAI63D,IAAiB,IACnBjyD,EAAMs0D,cAAcD,KAExB,GAAI15D,GAASP,IAAQK,GAAYL,SAAqBzS,IAAbyS,EAAIqf,WAE3C,CACLA,KAAMrf,EAAIqf,aApFqDnM,CAAKtN,EAAOqR,QAAmB1pB,EAElGgW,YAAa,EAAEtK,QAAAA,EAASge,gBAAAA,KAwFnB,SAAqBhe,EAAuB/Q,MAC7C8H,EAAS,CAAC8F,GAAOC,GAAMC,IAASiD,IAAqB,YAAT/Q,QACvC,aA1FoCqb,CAAYtK,EAASge,EAAgB/uB,MAElForB,KAAM,EAAEtJ,UAAAA,EAAW/Q,QAAAA,EAASsJ,OAAAA,EAAQ0U,gBAAAA,KA6F/B,SACLjN,EACA/Q,EACA0kE,EACA1mD,sBAGE2G,GAAY3G,mBAAkBjX,KAC9BxY,UAAQm2E,IACRzF,EAAc,CAACxnD,GAAgBA,IAAgB1G,iBAI1C/Q,KAAWqC,SAAsC/N,EA1GC+lB,CAAKtJ,EAAW/Q,EAASsJ,EAAQ0U,GAE1FtD,QAAS,EAAE1a,QAAAA,EAAS+Q,UAAAA,EAAWiN,gBAAAA,EAAiBlR,QAAAA,EAASC,OAAAA,KA2GpD,SACL/M,EACA+Q,EACA8uD,EACA7hD,EACAlR,EACA63D,MAEI3kE,KAAWqC,GAA8B,IACvCkX,GAAyBxI,GAAY,SACDzc,IAAlCurE,EAAY+E,yBACP/E,EAAY+E,wBAGf31E,KAACA,EAADkZ,OAAOA,GAAU2E,KACV,QAAT7d,KAAoBouB,GAAWW,KAAqBA,EAAgBjX,MAAOiX,EAAgBrK,YAC7E,aAAXxL,GAAqC,MAAZnI,GAAgC,eAAXmI,GAAuC,MAAZnI,UACrE2kE,EAAU5nD,sBAKnBhM,IAAc0G,UACTooD,EAAYzlC,oBAjIrB1f,CAAQ1a,EAAS+Q,EAAWhE,EAAOoQ,MAAOa,EAAiBlR,EAASC,EAAOjJ,KAE7E6W,aAAc,EAAE0pD,aAAAA,EAAcrkE,QAAAA,EAAS8M,QAAAA,EAASC,OAAAA,KAqI3C,SACL83D,EACA7kE,EACA0D,EACAm8D,WAEqBvrE,IAAjBuwE,YAKA7kE,KAAWqC,GAA8B,OAMrCyiE,iBAACA,EAADzqC,oBAAmBA,EAAnBC,qBAAwCA,GAAwBulC,SAE/D9kE,EAAgB+pE,EAA2B,QAATphE,EAAiB22B,EAAsBC,UAvJhF3f,CAAa0pD,EAAcrkE,EAAS8M,EAAQ7d,KAAM8d,EAAOoQ,OAE3DvC,aAAc,EAAEypD,aAAAA,EAAcrkE,QAAAA,EAAS+Q,UAAAA,EAAWjE,QAAAA,EAASw3D,kBAAAA,EAAmBv3D,OAAAA,KA0JzE,SACL83D,EACA7kE,EACA+Q,EACArN,EACAqhE,EACAlF,WAEqBvrE,IAAjBuwE,YAKA7kE,KAAWqC,IAGT0O,IAAc0G,GAAgB,OAC1ButD,iBAACA,GAAoBnF,SAEpB9kE,EACLiqE,EAKA97D,GAAY67D,GAAqB,CAAC14D,OAAS,GAAE04D,EAAkB14D,YAAc04D,EAAoB,UAlLrGnqD,CAAaypD,EAAcrkE,EAAS+Q,EAAWjE,EAAQ7d,KAAMq1E,EAAmBv3D,EAAOoQ,OAEzFjD,QAAS,EAAE8D,gBAAAA,EAAiBjN,UAAAA,EAAW/Q,QAAAA,EAAS+M,OAAAA,KAuL3C,SACLgE,EACAlc,EACAmL,EACA6/D,MAEgB,MAAZ7/D,QAA4C1L,IAAzBurE,EAAYoF,gBAC7B3rD,GAAoBvI,IAAuB,eAATlc,EAChCqU,GAAY22D,EAAYoF,UACnB,CAAC54D,OAAS,IAAGwzD,EAAYoF,SAAS54D,WAEjCwzD,EAAYoF,SAGjBpF,EAAYoF,YAGjB3rD,GAAoBvI,IAAuB,eAATlc,SAG7B,SAzMAqlB,CAAQnJ,EADFsM,GAAWW,GAAmBA,EAAgBnpB,UAAOP,EAClC0L,EAAS+M,EAAOoQ,OAElD1C,KAAM,EAAEza,QAAAA,EAASge,gBAAAA,EAAiB1U,OAAAA,EAAQwD,QAAAA,EAASiE,UAAAA,KA4M9C,SACL/Q,EACAoQ,EACAs0D,EACA53D,EACAiE,MAG0B2zD,GAAuC,iBAApBA,GAEvCprD,GAAoBvI,GAAY,IAC9BxiB,UAAQm2E,GAAkB,OACtBhR,EAAQgR,EAAgB,GACxBQ,EAAOR,EAAgBA,EAAgBtzE,OAAS,MAElDsiE,GAAS,GAAKwR,GAAQ,SAEjB,SAGJ,KAUK,SAAZllE,GAAwC,iBAAlBoQ,EAASnhB,OAA4BuqB,GAAuBzI,UAC7E,OAMLsM,GAAWjN,KAAaA,EAASrJ,MACnCk4D,EAAc,IAAI38D,MAA4BG,IAAgCzC,GAC9E,OACMmI,OAACA,EAADlZ,KAASA,GAAQ6d,SACnB/V,EAAS,CAAC,MAAO,OAAQ,OAAQ,SAAU9H,MAC7B,eAAXkZ,GAAuC,MAAZnI,GAAgC,aAAXmI,GAAqC,MAAZnI,UAO3E,EA5PLya,CAAKza,EAASge,EAAiB1U,EAAQwD,EAASiE,IAI7C,SAASo0D,GAAgBx4D,GAC1BmjD,GAAYnjD,GDjHX,SAA6BA,SAC5BqyD,EAA4CryD,EAAMwgC,UAAUmE,WAG7D,MAAMtxC,KAAWuD,GAAgB,OAC9B2gE,EAAiBlF,EAAqBh/D,OACvCkkE,iBAICkB,EAAoB1C,GAAqB1iE,EAAS2M,GAExDu3D,EAAe96B,gBAAgB,QAASg8B,ICsGxCC,CAAoB14D,GAEpB83D,GAA0B93D,EAAO,SAI9B,SAAS83D,GAA0B93D,EAAc9U,SAChDmnE,EAA4CryD,EAAMwgC,UAAUmE,WAE7D,MAAMnhD,KAASwc,EAAMijC,SACP,UAAb/3C,EACFstE,GAAgBh1E,GAEhB8zE,GAAmB9zE,EAAO0H,OAIzB,MAAMmI,KAAWpL,EAAKoqE,GAAuB,KAC5CsG,MAEC,MAAMn1E,KAASwc,EAAMijC,SAAU,OAC5B6vB,EAAiBtvE,EAAMg9C,UAAUmE,OAAOtxC,MAC1Cy/D,EAAgB,CAElB6F,EAAoBt7B,GAClBs7B,EAF6B7F,EAAet2B,gBAAgBtxC,GAI5DA,EACA,QACA8xC,IAAkC,CAAC/6B,EAAIC,YAC7BhX,OACD,eAEC+W,EAAGwX,MAAQvX,EAAGuX,KACTxX,EAAGwX,KAAOvX,EAAGuX,KAEf,SAGJ,OAKf44C,EAAqBh/D,GAASopC,gBAAgBvxC,EAAUytE,ICpMrD,SAASv0D,GACd4xD,EACA3iE,EACAoQ,EACA1M,SAEM6hE,EA8BR,SAAqBvlE,EAAkBoQ,EAAiD1M,UAC9E0M,EAASnhB,UACV,cACA,mBACC8Q,GAAeC,IAAmC,aAAvB4E,GAAU5E,SACvB,UAAZA,GAAyC,YAAlBoQ,EAASnhB,MAClCwjB,GAASA,GAAwCzS,EAAS,YAErD,aAGLA,KAAWqC,OACT48D,EAAc,CAAC,OAAQ,MAAO,QAAS,QAASv7D,EAAKzU,YAGhD,YAEJ,GAAkB,QAAdyU,EAAKzU,MAAkB+Q,KAAWwC,SACpC,cAILia,GADkB/Y,EAAKpC,GAAetB,MAKtCyiB,GAA0BrS,cAAaA,EAASkU,mBAATkhD,EAAe16C,SAHjD,OAOF,YAGJ,kBACC/qB,GAAeC,GACV,OACyB,aAAvB4E,GAAU5E,IACnByS,GAASA,GAAwCzS,EAAS,aAEnD,WACEqd,GAAWjN,IAAaA,EAASuD,UAAYyB,GAAkBhF,EAASuD,UAAUG,IACpF,MAEF,WAEJ,sBACC/T,GAAeC,GACbqd,GAAWjN,IAAajJ,GAAUiJ,EAASrJ,KACtC,cAGF,SACyB,aAAvBnC,GAAU5E,IACnByS,GAASA,GAAwCzS,EAAS,iBAEnD,WAGF,aAEJ,uBAKD,IAAI1O,MAAMmhB,GAA6BrC,EAASnhB,OA/F7By2B,CAAY1lB,EAASoQ,EAAU1M,IAClDzU,KAACA,GAAQ0zE,SAEVn/D,GAAexD,QAIP1L,IAATrF,EpHixBC,SAAiC+Q,EAAkB+Q,OACnD00D,GAAuBzlE,UACnB,SAEDA,QACDylE,QACAA,QACAA,QACAA,UACIlsD,GAAyBxI,IAAcha,EAAS,CAAC,OAAQ,SAAUga,QACvE00D,QACAA,QACAA,QACAA,QACAA,QACAA,UAIDlsD,GAAyBxI,IACzByI,GAAuBzI,IACvBha,EAAS,CAAC,OAAQ,QAAS,WAAYga,QAEtC00D,QACAA,QACAA,SACkB,SAAd10D,OACJ00D,QACAA,SACkB,YAAd10D,GAA2ByI,GAAuBzI,IoH5yBtD20D,CAAwB1lE,EAAS/Q,GAMlCouB,GAAWjN,KpHgvBsBu1D,EoHhvBiB12E,EpHgvBS22E,EoHhvBHx1D,EAASnhB,OpHivBnE8H,EAAS,CAACsgB,GAASE,IAAUquD,QACNtxE,IAAlBqxE,GAA+BtsD,GAAkBssD,GAC/CC,IAAiBtuD,GACnBvgB,EAAS,CAAC0gB,GAAgBA,QAAenjB,GAAYqxE,GACnDC,IAAiBxuD,IACnBrgB,EACL,CACE0gB,GACAA,GACAA,GACAA,GACAA,GACAA,GACAA,GACAA,QACAnjB,GAEFqxE,MoHjwBAlzD,G1HgOC,SAAsC1B,EAAsBw0D,SACzD,gCAA+Bx0D,2BAAmCw0D,oB0HjO7D9yD,CAAyCxjB,EAAMs2E,IACjDA,GAGFt2E,GAVLwjB,G1HkOC,SAAqCzS,EAAkB+Q,EAAsBw0D,SAC1E,YAAWvlE,0BAAgC+Q,2BAAmCw0D,oB0HnOzE9yD,CAAwCzS,EAAS/Q,EAAMs2E,IACzDA,GAYJA,EAlBE,KpH0vBJ,IAAkCI,EAA0BC,EqHrvB5D,SAASC,GAAel5D,GACzBmjD,GAAYnjD,GACdA,EAAMwgC,UAAUmE,OASpB,SAA4B3kC,SACpBqZ,SAACA,EAADtiB,KAAWA,EAAXoJ,QAAiBA,GAAWH,SAE3BpJ,GAAerV,QAAO,CAAC43E,EAAsC9lE,WAC5Dge,EAAkB4G,GAAmBoB,EAAShmB,OAGhDge,GAAmBta,IAASmY,IAAY7b,IAAYhD,IAASghB,EAAgB/uB,OAASuoB,UACjFsuD,MAELnD,EAAiB3kD,GAAmBA,EAAe,SAEnDA,GAAsC,OAAnB2kD,IAA8C,IAAnBA,EAA0B,CAC1EA,IAAAA,EAAmB,UAEboD,EAAQh1D,GAAU4xD,EAAgB3iE,EAASge,EAAiBlR,GAClEg5D,EAAgB9lE,GAAW,IAAIoiE,GAAez1D,EAAMiR,UAAW,GAAE5d,KAAW,GAAO,CACjFpS,MAAOm4E,EACP/2D,SAAU2zD,EAAe1zE,OAAS82E,WAI/BD,IACN,IAhCwBE,CAAmBr5D,GAE5CA,EAAMwgC,UAAUmE,OAqCpB,SAA+B3kC,SACvBm5D,EAAwCn5D,EAAMwgC,UAAUmE,OAAS,GAEjE20B,EAAiF,GACjF51E,EAAUsc,EAAMwgC,UAAU98C,YAG3B,MAAMF,KAASwc,EAAMijC,SAAU,CAClCi2B,GAAe11E,OAGV,MAAM6P,KAAWpL,EAAKzE,EAAMg9C,UAAUmE,QAAS,aAElDjhD,EAAQ8sB,OAAMnd,OAAAA,GAAaisD,GAAoBjsD,EAAS2M,IAEzB,WAA3Btc,EAAQ8sB,MAAMnd,GAAuB,OACjCkmE,EAAoBD,EAA2BjmE,GAC/CmmE,EAAiBh2E,EAAMg9C,UAAUmE,OAAOtxC,GAASmpC,gBAAgB,QAEnE+8B,EACE3tD,GAAgB2tD,EAAkBt4E,MAAOu4E,EAAev4E,OAE1Dq4E,EAA2BjmE,GAAWgqC,GACpCk8B,EACAC,EACA,OACA,QACAC,KAIF/1E,EAAQ8sB,MAAMnd,GAAW,qBAElBimE,EAA2BjmE,IAGpCimE,EAA2BjmE,GAAWmmE,QAOzC,MAAMnmE,KAAWpL,EAAKqxE,GAA6B,OAEhD1qE,EAAOoR,EAAMiR,UAAU5d,GAAS,GAChCqiE,EAAmB4D,EAA2BjmE,GACpD8lE,EAAgB9lE,GAAW,IAAIoiE,GAAe7mE,EAAM8mE,OAG/C,MAAMlyE,KAASwc,EAAMijC,SAAU,OAC5By2B,EAAal2E,EAAMg9C,UAAUmE,OAAOtxC,GACtCqmE,IACFl2E,EAAMm2E,YAAYD,EAAW/oD,IAAI,QAAS/hB,GAC1C8qE,EAAWh4D,QAAS,WAKnBy3D,EAhGoBS,CAAsB55D,GAiCnD,MAAMy5D,GAAsBz8B,IAC1B,CAAC8nB,EAAgBC,IAAmB74C,GAAoB44C,GAAO54C,GAAoB64C,KCsC9E,MAAM8U,GAGX3wE,6CACO4wE,QAAU,GAGV3H,OAAO4H,EAAiB1I,QACxByI,QAAQC,GAAW1I,EAGnBzlE,IAAIgD,eACqBjH,IAAvBlG,KAAKq4E,QAAQlrE,GAGf+hB,IAAI/hB,QAGFnN,KAAKq4E,QAAQlrE,IAASA,IAASnN,KAAKq4E,QAAQlrE,IACjDA,EAAOnN,KAAKq4E,QAAQlrE,UAGfA,GAcJ,SAASu0D,GAAYnjD,SACH,UAAhBA,MAAAA,SAAAA,EAAO1d,MAGT,SAAS6sD,GAAanvC,SACJ,WAAhBA,MAAAA,SAAAA,EAAO1d,MAGT,SAASi9D,GAAcv/C,SACL,YAAhBA,MAAAA,SAAAA,EAAO1d,MAGT,SAAS0iD,GAAahlC,SACJ,WAAhBA,MAAAA,SAAAA,EAAO1d,MAGT,MAAe03E,GA2BpB9wE,YACEqZ,EACgBjgB,EACAQ,EAChBm3E,EACgB75D,EAChB1c,EACAypC,QALgB7qC,KAAAA,OACAQ,OAAAA,OAEAsd,OAAAA,gYA0ZSrJ,+BAIrBA,EAAKwhC,mBAAL2hC,EAAWnzE,OACbgQ,EAAKwhC,KAAKxxC,KAAOtF,KAAKskE,iBAAiBhvD,EAAKwhC,KAAKxxC,iBAI/CgQ,EAAKwhC,6BAAL4hC,EAAW1mE,oBAAX2mE,EAAkBrzE,OACpBgQ,EAAKwhC,KAAK9kC,MAAM1M,KAAOtF,KAAKskE,iBAAiBhvD,EAAKwhC,KAAK9kC,MAAM1M,OAGxDgQ,UAnaFjU,OAASA,OACTsd,OAASA,OACT+sB,KAAOnyB,GAAemyB,QAGtBv+B,KAAO2T,EAAK3T,MAAQqrE,OACpB7iD,MAAQ9a,GAAOiG,EAAK6U,OAAS,CAACtkB,KAAMyP,EAAK6U,OAAS7U,EAAK6U,MAAQpc,GAAeuH,EAAK6U,YAASzvB,OAG5F0yE,aAAev3E,EAASA,EAAOu3E,aAAe,IAAIR,QAClDS,kBAAoBx3E,EAASA,EAAOw3E,kBAAoB,IAAIT,QAC5DU,cAAgBz3E,EAASA,EAAOy3E,cAAgB,IAAIV,QAEpD9yE,KAAOwb,EAAKxb,UAEZoM,YAAcoP,EAAKpP,iBACnBkwC,YAAgC9gC,EAAKuiB,WAAa,IrFmdxC5iC,KAAIf,GACfg2C,GAASh2C,GACJ,CACL2mB,OAAQhf,EAA4B3H,EAAE2mB,OAAQyC,KAG3CppB,SqFxdF06C,OAAkB,UAATv5C,GAA6B,SAATA,EAAkB,G/FyDjD,SACLigB,EACAi4D,EACAp6D,SAEMq6D,EAAoBr6D,EAAOo6D,GAC3B3+B,EAA8C,IAG7CjP,QAAS8tC,EAAV/tC,QAAyBA,GAAW8tC,OACpB9yE,IAAlB+yE,IACF7+B,EAAOjP,QAAU8tC,QAGH/yE,IAAZglC,IACG9X,GAAYtS,KAAUoS,GAAepS,EAAK9O,QAAWw4B,GAAa1pB,MACrEs5B,EAAOlP,QAAUA,GAIjBT,GAAc3pB,KAChBs5B,EAAOlP,QAAU,OAId,MAAMnjC,KAAQijC,WACE9kC,IAAf4a,EAAK/Y,MACM,YAATA,EAAoB,OAChBojC,EAAmCrqB,EAAK/Y,GAE9CqyC,EAAOryC,GAAQM,WAAS8iC,GACpBA,EACA,CACEr5B,IAAKq5B,EAAQr5B,KAAOmnE,EACpBlnE,OAAQo5B,EAAQp5B,QAAUknE,QAG/B7+B,EAAOryC,GAAgB+Y,EAAK/Y,UAK5BqyC,E+FnGoD8+B,CAAyBp4D,EAAMjgB,EAAM8d,QAEzFogC,UAAY,CACfz5C,KAAM,CACJ++D,QAAShjE,EAASA,EAAO09C,UAAUz5C,KAAK++D,QAAU,GAClDyL,YAAazuE,EAASA,EAAO09C,UAAUz5C,KAAKwqE,YAAc,GAC1DqJ,oBAAqB93E,EAASA,EAAO09C,UAAUz5C,KAAK6zE,oBAAsB,GAE1ElI,UAAW79C,GAAYtS,IAAUzf,GAAUA,EAAO09C,UAAUz5C,KAAK2rE,gBAA2B/qE,IAAd4a,EAAKxb,MAErF43D,WAAY,IAAItiB,GAChB6gB,cAAe,CAAC3pD,IAAK,GAAIC,OAAQ,GAAIC,MAAO,IAC5CsD,KAAM,KACNrT,QAAS,CACP8sB,MAAO,GACPmH,KAAM,GACNC,OAAQ,MACJl0B,EAAU2F,EAAU3F,GAAW,IAErCirC,UAAW,KACXgW,OAAQ,KACRngB,WAAY,KACZ+mB,KAAM,GACN0D,QAAS,uBAKJxtD,KAAKukD,iBAAiB,6BAItBvkD,KAAKukD,iBAAiB,UAGxBnsB,aACAghD,kBAEAC,uBACAC,sCAEAC,uBACA5U,uBACA6U,iBACAC,2BACAC,oBACAC,iBAOAP,cDtPF,SAAqB76D,GAAcq7D,YAACA,GAAwC,IACjFnC,GAAel5D,GACfoyD,GAAiBpyD,OACZ,MAAMxW,KAAQ0kB,GACjBopD,GAAmBt3D,EAAOxW,GAEvB6xE,GAEH7C,GAAgBx4D,GC+OhBs7D,CAAY75E,MAGP2kE,kBACLA,GAAgB3kE,MAUVs5E,iCACwB,UAA1Bt5E,KAAKy/C,QAAQ,eACVknB,aAAa3mE,KAAKy/C,QAAQ,SAAU,SAEZ,WAA3Bz/C,KAAKy/C,QAAQ,gBACVknB,aAAa3mE,KAAKy/C,QAAQ,UAAW,UAQvCi6B,eACLlY,GAAYxhE,MAUN85E,uBAAuBpuC,SAEtB5sB,MAAO5d,KAAM64E,GAAYruC,EAE1BxrC,EAAmB,OACpB,MAAMuJ,KAAYjD,EAAKuzE,GAAW,OAC/Bv6E,EAAQu6E,EAAStwE,QACTvD,IAAV1G,IACFU,EAAEuJ,GAAYyU,GAAiB1e,WAI5BU,EAGF85E,yBAAyBC,OAC1BC,EAA6B,UAC7Bl6E,KAAK0rC,OACPwuC,EAAcl6E,KAAK85E,uBAAuB95E,KAAK0rC,OAG5CuuC,IAECj6E,KAAK0R,cACPwoE,EAAW,YAAkBh8D,GAAiBle,KAAK0R,cAKnC,SAAd1R,KAAKa,MAAiC,UAAdb,KAAKa,MAS5B+J,EAAQsvE,QAAeh0E,EAAYg0E,EAR/B,CACL38D,MAAOvd,KAAKukD,iBAAiB,SAC7B/mC,OAAQxd,KAAKukD,iBAAiB,aAC1B21B,GAAe,IAQpBC,qBACAn6E,KAAKo6C,oBAIJjP,QAACA,KAAYiP,GAAUp6C,KAAKo6C,QAE5B2E,UAACA,EAADpgC,OAAYA,GAAU3e,KACtBo6E,ErCpHH,SACLC,EACA17D,SAEMy7D,EAAY,OAEb,MAAMxoE,KAAWK,GAAgB,OAC9BoqD,EAAkBge,EAAqBzoE,MACzCyqD,MAAAA,GAAAA,EAAiBX,cAAe,OAC5B9/B,YAACA,EAAD7D,YAAcA,GAAesjC,GACjC,CAAC,cAAe,eAChBgB,EAAgBX,cAActlC,OAC9BzX,EACA/M,GAGIgqD,EAAgBV,GAAiBtpD,EAASmmB,GAC1ChO,EAAO+yC,GAAmBlhC,EAAaggC,QAChC11D,IAAT6jB,IACFqwD,EAAUxe,GAAiB7xC,WAK1Bnf,EAAQwvE,QAAal0E,EAAYk0E,EqC4FpBE,CAAwBv7B,EAAU0c,cAAe98C,SAE5D,CACL2N,QAAS6e,KACNnrC,KAAKu6E,2BACLngC,KACCggC,EAAY,CAACA,UAAAA,GAAa,IAIxBG,8BACD,GAKFC,4BACC/e,cAACA,GAAiBz7D,KAAK++C,cACzB07B,EAAc,OAEb,MAAM7oE,KAAWK,GAChBwpD,EAAc7pD,GAAS+jB,OACzB8kD,EAAYr6E,KAAKo7D,GAAmBx7D,KAAM4R,QAIzC,MAAMA,KAAW0pD,GACpBmf,EAAcA,EAAY57D,OAAOo9C,GAAqBj8D,KAAM4R,WAEvD6oE,EAKFC,sB3CzKF,SAAsBC,EAAoCh8D,SACzD1W,EAACA,EAAI,GAALwC,EAASA,EAAI,IAAMkwE,QAClB,IACF1yE,EAAExH,KAAIR,GAAKm3D,GAAan3D,EAAG,OAAQ0e,QACnClU,EAAEhK,KAAIR,GAAKm3D,GAAan3D,EAAG,OAAQ0e,QACnC1W,EAAExH,KAAIR,GAAKm3D,GAAan3D,EAAG,OAAQ0e,QACnClU,EAAEhK,KAAIR,GAAKm3D,GAAan3D,EAAG,OAAQ0e,MACtC0H,QAAOpmB,GAAKA,I2CmKLy6E,CAAa16E,KAAK++C,UAAU+K,KAAM9pD,KAAK2e,QAGzC4kD,yBACEA,GAAgBvjE,MAGlBgkE,6BACEA,GAAoBhkE,MAGtBi4D,sBACCrgC,SAACA,KAAagjD,GAAmB56E,KAAK21B,OAAU,GAEhDA,EAAiB,IAClBjc,GAAmB1Z,KAAK2e,OAAOgX,OAAOlb,0BACtCmgE,KACChjD,EAAW,CAACnI,OAAQ,CAAC8a,OAAQ3S,IAAa,OAG5CjC,EAAMtkB,YACJ1I,EAAS,CAAC,OAAQ,SAAU3I,KAAKa,MAE/B8H,EAAsB,CAAC,cAAUzC,GAAYyvB,EAAM/b,UACrD+b,EAAM9b,QAAN8b,EAAM9b,MAAU,UAOlB8b,EAAM/b,SAAN+b,EAAM/b,OAAW,SAGZhP,EAAQ+qB,QAASzvB,EAAYyvB,EAQjCklD,cAAcxwC,EAAoB,UACjC1sB,EAAqB,IAE3B0sB,EAAUA,EAAQxrB,OAAO7e,KAAK86E,oBAElB93E,OAAS,IACnB2a,EAAM0sB,QAAUA,SAGZ+P,EAASp6C,KAAKm6E,iBAChB//B,IACFz8B,EAAMy8B,OAASA,GAGjBz8B,EAAMq/B,MAAQ,GAAGn+B,OAAO7e,KAAKw6E,sBAAuBx6E,KAAK+6E,uBAInD73B,GAAUljD,KAAKqB,QAAUqsD,GAAa1tD,KAAKqB,QAAUoyE,GAAezzE,MAAQ,GAC9EkjD,EAAOlgD,OAAS,IAClB2a,EAAMulC,OAASA,SAGX4G,EAAO9pD,KAAK06E,eACd5wB,EAAK9mD,OAAS,IAChB2a,EAAMmsC,KAAOA,SAGT0D,EAAUxtD,KAAKujE,yBACjB/V,EAAQxqD,OAAS,IACnB2a,EAAM6vC,QAAUA,GAGX7vC,EAGF8hC,QAAQpuC,UACNtG,GAAS/K,KAAKmN,KAAQ,GAAEnN,KAAKmN,QAAU,IAAMkE,GAG/C2pE,YAAYn6E,UACVb,KAAKy/C,QAAQlD,GAAe17C,GAAM4jB,eAQpCqgD,gBAAgB33D,SACf8tE,EAAWj7E,KAAKg7E,YAAY7tE,GAI5ByzC,EAAY5gD,KAAK++C,UAAUz5C,KAAK6zE,2BACtCv4B,EAAUq6B,IAAar6B,EAAUq6B,IAAa,GAAK,EAE5CA,EAGF12B,iBAAiBmZ,MAClBhQ,GAAa1tD,KAAKqB,QAAS,OAEvBuQ,EAAU0C,GADCmpD,GAA8BC,IAEzCzS,EAAiBjrD,KAAK++C,UAAUmE,OAAOtxC,MAEzCq5C,IAAmBA,EAAehrC,OAAQ,OAEtCpf,EAAOoqD,EAAe/7B,IAAI,QAC1BlU,EAAQiwC,EAAe/7B,IAAI,YAE7BjE,GAAkBpqB,IAASka,GAAcC,GAAQ,OAC7CwU,EAAYy7B,EAAe/7B,IAAI,QAE/BtP,EAAQ8oD,GADCC,GAAe3oE,KAAM4R,OAEhCgO,EAAO,OAEF,CACL3B,OAAQm/C,GAAS5tC,EAAWy7B,EAFbprC,GAAQ,CAACvH,UAAW,WAAYsH,MAAAA,GAAQ,CAAC5B,KAAM,mBAKhEqG,GAASA,GAAyBzS,IAC3B,aAMR,CACLqM,OAAQje,KAAK84E,cAAc5pD,IAAIlvB,KAAKy/C,QAAQie,KAOzC4G,iBAAiBn3D,SAChBxH,EAAO3F,KAAK++C,UAAUz5C,KAAKwqE,YAAY3iE,UAExCxH,EAMEA,EAAKq7C,YAHH7zC,EAMJ0lE,cAAcqI,UACZl7E,KAAK84E,cAAc5pD,IAAIgsD,GAGzBvU,aAAa2R,EAAiB1I,QAC9BkJ,cAAcpI,OAAO4H,EAAS1I,GAG9BsI,YAAYI,EAAiB1I,QAC7BgJ,aAAalI,OAAO4H,EAAS1I,GAG7BhK,iBAAiB0S,EAAiB1I,QAClCiJ,kBAAkBnI,OAAO4H,EAAS1I,GAMlCpgD,UAAU2rD,EAA0C/iD,UACrDA,EAIKp4B,KAAKy/C,QAAQ07B,GAOnBvoE,GAAUuoE,IAAsB/lE,GAAe+lE,IAAsBn7E,KAAK++C,UAAUmE,OAAOi4B,SAEvFvC,aAAazuE,IAAInK,KAAKy/C,QAAQ07B,IAE5Bn7E,KAAK44E,aAAa1pD,IAAIlvB,KAAKy/C,QAAQ07B,WAQvCjW,eAAe9sC,UAChBA,EAIKp4B,KAAKy/C,QAAQ,cAInBz/C,KAAK++C,UAAUhc,aAAe/iC,KAAK++C,UAAUhc,WAAW9iB,QACzDjgB,KAAK64E,kBAAkB1uE,IAAInK,KAAKy/C,QAAQ,eAEjCz/C,KAAK64E,kBAAkB3pD,IAAIlvB,KAAKy/C,QAAQ,sBA2B5CoD,kBAAkBjxC,OAElB5R,KAAK++C,UAAUmE,aACZ,IAAIhgD,MACR,wIAIEk4E,EAAsBp7E,KAAK++C,UAAUmE,OAAOtxC,UAC9CwpE,IAAwBA,EAAoBn7D,OACvCm7D,EAEFp7E,KAAKqB,OAASrB,KAAKqB,OAAOwhD,kBAAkBjxC,QAAW1L,EAMzD2wD,sBAAsBwkB,EAAsBC,OAC7CC,EAAMv7E,KAAK++C,UAAU7R,UAAUmuC,OAC9BE,GAAOv7E,KAAKqB,SACfk6E,EAAMv7E,KAAKqB,OAAOw1D,sBAAsBwkB,EAAcC,KAEnDC,QACG,IAAIr4E,M5HjkBT,SAA2BiK,SACxB,kCAAiCA,M4HgkBrBkX,CAA8Bi3D,WAEzCC,EAMFC,uDAEEz8B,UAAU+K,KAAK7hD,wBAAGc,MAAK9I,GAAKA,EAAEw7E,oCACnCz7E,KAAK++C,UAAU+K,KAAKr/C,sBAApBixE,EAAuB3yE,MAAK9I,GAAKA,EAAEw7E,yBAMlC,MAAeE,WAAuBpD,GAIpC14D,QAAQjO,EAA2BoN,EAAsB,UACxDgD,EAAWhiB,KAAKgiB,SAASpQ,MAE1BoQ,SAIEnC,GAAQmC,EAAUhD,GAKpBqiC,eAAqB57C,EAAoD6kC,U5GxE3E,SACLlK,EACA36B,EACA6kC,EACAjK,UAEKD,EAIE55B,EAAK45B,GAAStgC,QAAO,CAACL,EAAGmS,WACxBnR,EAAM2/B,EAAQxuB,UAChBzR,UAAQM,GACHA,EAAIX,QAAO,CAAC87E,EAAO9sD,IACjBrpB,EAAE1F,KAAKsgC,EAASu7C,EAAI9sD,EAAYld,IACtCnS,GAEIgG,EAAE1F,KAAKsgC,EAAS5gC,EAAGgB,EAAKmR,KAEhC04B,GAZMA,E4GkEAxqC,CACLE,KAAK67E,cACL,CAAC52B,EAAQ/wB,EAAgBhvB,WACjB8c,EAAWuU,GAAYrC,UACzBlS,EACKvc,EAAEw/C,EAAKjjC,EAAU9c,GAEnB+/C,IAET3a,GAIGywB,gBAAgBt1D,EAAuD/F,GAC5E8D,GACExD,KAAK67E,cACL,CAAC3nD,EAAIhvB,WACG8c,EAAWuU,GAAYrC,GACzBlS,GACFvc,EAAEuc,EAAU9c,KAGhBxF,ICtrBC,MAAMo8E,WAA6Bn8B,GACjCj/C,eACE,IAAIo7E,GAAqB,KAAMl0E,EAAU5H,KAAKqjC,YAGvD57B,YAAYpG,EAA8BgiC,SAClChiC,QADkCgiC,UAAAA,OAEnCA,UAAYz7B,EAAUy7B,SACrB04C,EAAc/7E,KAAKqjC,UAAU5D,IAAM,MAACv5B,OAAWA,QAChDm9B,UAAU5D,GAAK,CAACs8C,EAAY,IAAM,QAASA,EAAY,IAAM,WAG7Dl7B,yBACE,IAAI1/C,IAAI,CAACnB,KAAKqjC,UAAU24C,WAAah8E,KAAKqjC,UAAUpE,SAAW,KAGjE6hB,wBACE,IAAI3/C,IAAInB,KAAKqjC,UAAU5D,IAGzBr3B,aACG,oBAAmBA,EAAKpI,KAAKqjC,aAGhCse,iBACCq6B,QAACA,KAAYxhE,GAAQxa,KAAKqjC,gBACD,CAC7BxiC,KAAM,MACN+e,MAAOo8D,KACJxhE,IC3BF,MAAMyhE,WAA0Bt8B,GAC9Bj/C,eACE,IAAIu7E,GAAkB,KAAM,IAAIj8E,KAAKqmB,SAG9C5e,YAAYpG,EAAsCglB,SAC1ChlB,QAD0CglB,OAAAA,cAI/BhlB,EAAsBkd,SACjCI,OAACA,EAADrJ,KAASA,EAAToJ,QAAeA,GAAWH,KAGhB,WADAQ,GAAoB,UAAWL,EAASC,UAE/C,WAGH0H,EAAS9H,EAAM8iC,gBAAe,CAAC2J,EAAyChpC,EAAUpQ,WAChFq5C,EAAiB71C,GAAexD,IAAY2M,EAAMskC,kBAAkBjxC,MACtEq5C,EAAgB,CAMd//B,GALc+/B,EAAe/7B,IAAI,UAKwB,UAAvBlN,EAAS1J,YAA0BoV,GAAWpY,KAClF01C,EAAWhpC,EAASpC,OAASoC,UAG1BgpC,IACN,WAEExkD,EAAK6f,GAAQrjB,OAIX,IAAIi5E,GAAkB56E,EAAQglB,GAH5B,KAMJw6B,yBACE,IAAI1/C,IAAIqF,EAAKxG,KAAKqmB,SAGpBy6B,wBACE,IAAI3/C,IAGNiH,aACG,iBAAgBA,EAAKpI,KAAKqmB,UAM7Bs7B,iBACCqC,EAAUx9C,EAAKxG,KAAKqmB,QAAQvmB,QAAO,CAACo8E,EAAat8D,WAC/CoC,EAAWhiB,KAAKqmB,OAAOzG,GACvBxB,EAAMsI,GAAS1E,EAAU,CAAChE,KAAM,iBAErB,OAAbgE,IACoB,aAAlBA,EAASnhB,KACXq7E,EAAY97E,KAAM,WAAUge,kBAAoBA,mBAAqBA,QAC1C,iBAAlB4D,EAASnhB,OAClBq7E,EAAY97E,KAAM,WAAUge,MAC5B89D,EAAY97E,KAAM,aAAYge,QAK3B89D,IACN,WAEIl4B,EAAQhhD,OAAS,EACpB,CACEnC,KAAM,SACNmd,KAAMgmC,EAAQ77C,KAAK,SAErB,MC/ED,MAAMg0E,WAA6Bx8B,GACjCj/C,eACE,IAAIy7E,GAAqBn8E,KAAKqB,OAAQuG,EAAU5H,KAAKqjC,YAG9D57B,YAAYpG,EAA8BgiC,SAClChiC,QADkCgiC,UAAAA,OAEnCA,UAAYz7B,EAAUy7B,SACrB+4C,QAACA,EAAD38C,GAAUA,EAAK,IAAMz/B,KAAKqjC,eAC3BA,UAAU5D,GAAK28C,EAAQ37E,KAAI,CAACgF,EAAGlC,IAAMk8B,EAAGl8B,IAAMkC,IAG9Co7C,yBACE,IAAI1/C,IAAInB,KAAKqjC,UAAU+4C,SAGzBt7B,wBACE,IAAI3/C,IAAInB,KAAKqjC,UAAU5D,IAGzBr3B,aACG,oBAAmBA,EAAKpI,KAAKqjC,aAGhCse,iBACEy6B,QAAS3yC,EAAVhK,GAAkBA,GAAMz/B,KAAKqjC,gBAEA,CACjCxiC,KAAM,UACN4oC,OAAAA,EACAhK,GAAAA,IC9BC,MAAM48C,WAA0B18B,GAC9Bj/C,eACE,IAAI27E,GAAkB,KAAMz0E,EAAU5H,KAAKqjC,YAGpD57B,YAAYpG,EAA8BgiC,SAClChiC,QADkCgiC,UAAAA,OAEnCA,UAAYz7B,EAAUy7B,SACrB04C,EAAc/7E,KAAKqjC,UAAU5D,IAAM,MAACv5B,OAAWA,QAChDm9B,UAAU5D,GAAK,CAACs8C,EAAY,IAAM,MAAOA,EAAY,IAAM,SAG3Dl7B,yBACE,IAAI1/C,IAAInB,KAAKqjC,UAAUi5C,MAGzBx7B,wBACE,IAAI3/C,IAAInB,KAAKqjC,UAAU5D,IAGzBr3B,aACG,iBAAgBA,EAAKpI,KAAKqjC,aAG7Bse,iBACC26B,KAACA,EAAD78C,GAAOA,GAAMz/B,KAAKqjC,gBACQ,CAC9BxiC,KAAM,OACN4oC,OAAQ6yC,EACR78C,GAAAA,IC3BC,MAAM88C,WAAoB58B,GACxBj/C,eACE,IAAI67E,GAAY,KAAM30E,EAAU5H,KAAKypC,QAASzpC,KAAKw8E,QAASx8E,KAAKie,wBAGnD5c,EAAsBkd,MACvCA,EAAMwgC,UAAUhc,aAAexkB,EAAMwgC,UAAUhc,WAAW4iC,aACrDtkE,MAGLo7E,EAAiB,MAEhB,MAAMC,IAAe,CACxB,CAACpuE,GAAWD,IACZ,CAACG,GAAYD,KACqB,OAC5BouE,EAAOD,EAAYj8E,KAAImR,UACrBojB,EAAMwB,GAAmBjY,EAAMqZ,SAAShmB,WACvCqd,GAAW+F,GACdA,EAAIpV,MACJ8P,GAAWsF,GACX,CAAChX,KAAO,GAAEgX,EAAIlpB,SACd8kB,GAAWoE,GACX,CAAChX,KAAO,GAAEgX,EAAG,cACb9uB,MAGFy2E,EAAK,IAAMA,EAAK,MAClBt7E,EAAS,IAAIk7E,GAAYl7E,EAAQs7E,EAAM,KAAMp+D,EAAMkhC,QAAS,WAAUg9B,UAItEl+D,EAAMsgB,gBAAgBjwB,IAAQ,OAC1BoT,EAAWzD,EAAMi8C,cAAc5rD,IACjCoT,EAASnhB,OAASuoB,KACpB/nB,EAAS,IAAIk7E,GAAYl7E,EAAQ,KAAM2gB,EAASpC,MAAOrB,EAAMkhC,QAAS,WAAUg9B,cAI7Ep7E,EAGToG,YACEpG,EACQooC,EACA+yC,EACAv+D,SAEF5c,QAJEooC,OAAAA,OACA+yC,QAAAA,OACAv+D,OAAAA,EAKH4iC,wBACCpX,GAAUzpC,KAAKypC,QAAU,IAAIpjB,OAAO9d,mBACnC,IAAIpH,IAAI,IAAKnB,KAAKw8E,QAAU,CAACx8E,KAAKw8E,SAAW,MAAQ/yC,IAGvDqX,wBACE,IAAI3/C,IAGNiH,aACG,WAAUpI,KAAKw8E,WAAWx8E,KAAKie,UAAU7V,EAAKpI,KAAKypC,UAGtDkY,iBACE,IACD3hD,KAAKw8E,QACL,CACE,CACE37E,KAAM,SACNmd,KAAO,kBAAiBhe,KAAKw8E,eAGjC,GACJ,CACE37E,KAAM,aACFb,KAAKypC,OAAS,CAACA,OAAQzpC,KAAKypC,QAAU,MACtCzpC,KAAKw8E,QAAU,CAACA,QAASx8E,KAAKw8E,SAAW,GAC7Cv+D,OAAQje,KAAKie,UC/Ed,MAAM2+D,WAAqBj9B,GACzBj/C,eACE,IAAIk8E,GAAa,KAAM58E,KAAK+iC,WAAYn7B,EAAU5H,KAAKypC,QAAS7hC,EAAU5H,KAAKy/B,KAGxFh4B,YACEpG,EACQ0hC,EACA0G,EACAhK,SAEFp+B,QAJE0hC,WAAAA,OACA0G,OAAAA,OACAhK,GAAAA,kBAKap+B,EAAsBkd,OACtCA,EAAM2mD,wBACF7jE,MAGJ,MAAMq7E,IAAe,CACxB,CAACpuE,GAAWD,IACZ,CAACG,GAAYD,KACqB,OAC5BouE,EAAOD,EAAYj8E,KAAImR,UACrBojB,EAAMwB,GAAmBjY,EAAMqZ,SAAShmB,WACvCqd,GAAW+F,GACdA,EAAIpV,MACJ8P,GAAWsF,GACX,CAAChX,KAAO,GAAEgX,EAAIlpB,SACd8kB,GAAWoE,GACX,CAAChX,KAAO,GAAEgX,EAAG,cACb9uB,KAGA+pB,EAASysD,EAAY,KAAOluE,GAAa,IAAM,IAEjDmuE,EAAK,IAAMA,EAAK,MAClBt7E,EAAS,IAAIu7E,GAAav7E,EAAQkd,EAAM2mD,iBAAkByX,EAAM,CAC9Dp+D,EAAMkhC,QAAS,IAAGxvB,KAClB1R,EAAMkhC,QAAS,IAAGxvB,eAKjB5uB,EAGFw/C,yBACE,IAAI1/C,IAAInB,KAAKypC,OAAOpjB,OAAO9d,aAG7Bu4C,wBACE,IAAI3/C,IAAInB,KAAKy/B,IAGfr3B,aACG,YAAWpI,KAAK+iC,cAAc36B,EAAKpI,KAAKypC,WAAWrhC,EAAKpI,KAAKy/B,MAGhEkiB,iBACE,CACL9gD,KAAM,WACNkiC,WAAY/iC,KAAK+iC,WACjB0G,OAAQzpC,KAAKypC,OACbhK,GAAIz/B,KAAKy/B,KC5DR,MAAMo9C,WAAmBl9B,GACvBj/C,eACE,IAAIm8E,GAAW,KAAMj1E,EAAU5H,KAAKqjC,YAG7C57B,YAAYpG,EAAuCgiC,SAC3ChiC,QAD2CgiC,UAAAA,EAI5Cwd,yBACE,IAAI1/C,IAAI,CAACnB,KAAKqjC,UAAU5S,OAAQzwB,KAAKqjC,UAAU5/B,OAASzD,KAAKqjC,UAAUpE,SAAW,KAGpF6hB,wBACE,IAAI3/C,IAAI,CAACnB,KAAKqjC,UAAU5S,SAGzBqsD,gBAAgBC,SAChB/sD,MAACA,EAAQ,EAATk5C,KAAYA,EAAZlxC,KAAkBA,GAAQ+kD,QAGzB,CAAC9+D,OAAS,YAFF,CAAC+R,EAAOk5C,KAAUlxC,EAAO,CAACA,GAAQ,IAAK7vB,KAAK,kCAK7B9G,EAAsB27E,UAC7C,IAAIH,GAAWx7E,EAAQ27E,2BAGD37E,EAAsBkd,SAC7CqZ,EAAWrZ,EAAMqZ,SACjBwa,EAAOxa,EAAS3vB,EAChBoqC,EAAOza,EAASntB,KAElBwkB,GAAWmjB,IAASnjB,GAAWojB,GAAO,OAClC4qC,EAAiB7qC,EAAK3hB,OAAS2hB,EAAOC,EAAK5hB,OAAS4hB,OAAOnsC,UAC1CA,IAAnB+2E,eAGEC,EAAa9qC,EAAK3hB,OAAS4hB,EAAOA,EAAK5hB,OAAS2hB,OAAOlsC,GACvD6xC,OAACA,EAADv4C,MAASA,EAATqa,MAAgBA,EAAhBkjE,QAAuBA,GAAWE,EAAexsD,OACjD0sD,EAAgB58C,GAAmBhiB,EAAMjJ,KAAMsiB,UAE9C,IAAIilD,GAAWx7E,EAAQ,CAC5BovB,OAAQwsD,EAAer9D,MACvBnc,IAAKy5E,EAAWt9D,SACZm4B,EAAS,CAACA,OAAAA,GAAU,WACV7xC,IAAV1G,EAAsB,CAACA,MAAAA,GAAS,MAChCqa,EAAQ,CAACA,MAAAA,GAAS,WACN3T,IAAZ62E,EAAwB,CAACA,QAAAA,GAAW,MACpCI,EAAcn6E,OAAS,CAACi8B,QAASk+C,GAAiB,YAGnD,KAGF/0E,aACG,UAASA,EAAKpI,KAAKqjC,aAGtBse,iBACClxB,OAACA,EAADhtB,IAASA,EAATs5E,QAAcA,EAAdhlC,OAAuBA,EAAvB9Y,QAA+BA,EAA/Bz/B,MAAwCA,EAAxCqa,MAA+CA,EAAQ,CAAC,KAAM,OAAyB7Z,KAAKqjC,UAE5F25C,EAAqC,CACzCn8E,KAAM,SACN+e,MAAO6Q,EACPhtB,IAAAA,KACIs5E,EAAU,CAACA,S5FqLYr9E,E4FrLcq9E,O5FsLtB72E,KAAhBxG,MAAAA,SAAAA,EAAC,M4FtLgDM,KAAK88E,gBAAgBC,GAAWA,IAAW,GAC/FhlC,OAAQ,WACJ9Y,EAAU,CAACA,QAAAA,GAAW,GAC1Bz/B,MAAQu4C,GAAqB,UAAXA,EAA6B,KAARv4C,G5FkLtC,IAA0BE,K4F/KzBq4C,GAAqB,UAAXA,EAAoB,OAezB,CAACilC,EAdkC,CACxCn8E,KAAM,SACN4+B,GAAI,CAAE,WAAUhP,WAChBm3C,IAAK,CAAC7vB,GACNtO,OAAQ,CAAChZ,GACT5W,MAAAA,EACA01D,aAAa,KACTtwC,EAAU,CAACA,QAAAA,GAAW,IAEgB,CAC1Cp+B,KAAM,UACNmd,KAAO,SAAQyS,8BAAmCA,mBAAwBA,IAC1EgP,GAAIhP,UAIC,CAACusD,IC9FP,MAAMI,WAA2Bz9B,GAC/Bj/C,eACE,IAAI08E,GAAmB,KAAMx1E,EAAU5H,KAAKqjC,YAGrD57B,YAAYpG,EAA8BgiC,SAClChiC,QADkCgiC,UAAAA,OAEnCA,UAAYz7B,EAAUy7B,SACrB04C,EAAc/7E,KAAKqjC,UAAU5D,IAAM,MAACv5B,OAAWA,QAChDm9B,UAAU5D,GAAK,CAACs8C,EAAY,IAAM14C,EAAUmG,GAAIuyC,EAAY,IAAM14C,EAAUg6C,OAG5Ex8B,yBACE,IAAI1/C,IAAI,CAACnB,KAAKqjC,UAAUg6C,MAAOr9E,KAAKqjC,UAAUmG,MAAQxpC,KAAKqjC,UAAUpE,SAAW,KAGlF6hB,wBACE,IAAI3/C,IAAInB,KAAKqjC,UAAU5D,IAGzBr3B,aACG,kBAAiBA,EAAKpI,KAAKqjC,aAG9Bse,iBACC07B,MAACA,EAAD7zC,GAAQA,KAAOhvB,GAAQxa,KAAKqjC,gBACD,CAC/BxiC,KAAM,QACNoH,EAAGuhC,EACH/+B,EAAG4yE,KACA7iE,IC3BF,MAAM8iE,WAAmB39B,GACvBj/C,eACE,IAAI48E,GAAW,KAAM11E,EAAU5H,KAAKqjC,WAAYrjC,KAAKu9E,WAG9D91E,YAAYpG,EAAsCgiC,EAA4Ck6C,SACtFl8E,QAD0CgiC,UAAAA,OAA4Ck6C,UAAAA,cAI3El8E,EAAsBkd,EAAc8kB,EAA4Bof,SAC3E4hB,EAAU9lD,EAAMwgC,UAAUz5C,KAAK++D,SAC/BvtB,KAACA,GAAQzT,MACXm6C,EAAiB,Q9F4VlB,SAAsB1mC,SACpB,SAAUA,E8F3VX2mC,CAAa3mC,GAAO,KAClB4mC,EAAaC,GAAW7mC,EAAKxxC,KAAM++D,GAElCqZ,IACHA,EAAa,IAAIpT,GAAWxzB,EAAKxxC,MACjC++D,EAAQjkE,KAAKs9E,UAGTE,EAAiBr/D,EAAMkhC,QAAS,UAASgD,KAC/C+6B,EAAiB,IAAIh9B,GACnBk9B,EACAE,EACArhC,GAAeshC,OACft/D,EAAMwgC,UAAUz5C,KAAK6zE,qBAEvB56D,EAAMwgC,UAAUz5C,KAAKwqE,YAAY8N,GAAkBJ,OAC9C,G9F8UJ,SAA2B1mC,SACzB,UAAWA,E8F/ULgnC,CAAkBhnC,GAAO,OAC5B0V,EAAU1V,EAAK3M,UAEjB2U,EADJzb,EAAY,CAAC5D,GAAI+sB,KAAYnpB,OAI3Byb,EAAUvgC,EAAMs4C,sBAAsB9rD,EAAQyhD,GAAUA,GACxD,MAAOtsD,SACD,IAAIgD,MrI6BX,SAAuCiK,SACpC,2DAA0DA,8BqI9B5CkX,CAA0CmoC,OAG5DgxB,EAAiB1+B,EAAQi/B,cACpBP,QACG,IAAIt6E,MrI4BX,SAA0BiK,SAE5B,iCAAgCA,oFqI9BbkX,CAA6BmoC,WAI1C,IAAI8wB,GAAWj8E,EAAQgiC,EAAWm6C,EAAex8B,aAGnDH,yBACE,IAAI1/C,IAAI,CAACnB,KAAKqjC,UAAU26C,SAG1Bl9B,wBACE,IAAI3/C,IAAInB,KAAKqjC,UAAU5D,GAAK72B,QAAM5I,KAAKqjC,UAAU5D,IAAMz/B,KAAKqjC,UAAUyT,KAAKrN,QAG7ErhC,aACG,UAASA,EAAK,CAACi7B,UAAWrjC,KAAKqjC,UAAWk6C,UAAWv9E,KAAKu9E,cAG7D57B,eACDs8B,KAEAj+E,KAAKqjC,UAAUyT,KAAKrN,OAEtBw0C,EAAU,CACRr0E,OAAQ5J,KAAKqjC,UAAUyT,KAAKrN,UACxBzpC,KAAKqjC,UAAU5D,GAAK,CAACA,GAAI72B,QAAM5I,KAAKqjC,UAAU5D,KAAO,QAEtD,KAEDy+C,EAASl+E,KAAKqjC,UAAU5D,GACvBl3B,WAAS21E,KACZ75D,GrIqCN,wIqIpCM65D,EAAS,WAGXD,EAAU,CACRx+C,GAAI,CAACy+C,UAIF,CACLr9E,KAAM,SACNi2C,KAAM92C,KAAKu9E,UACX95E,IAAKzD,KAAKqjC,UAAUyT,KAAKrzC,IACzBgmC,OAAQ,CAACzpC,KAAKqjC,UAAU26C,WACrBC,KACCj+E,KAAKqjC,UAAU86C,QAAU,CAACA,QAASn+E,KAAKqjC,UAAU86C,SAAW,KC7FhE,MAAMC,WAA8Bz+B,GAClCj/C,eACE,IAAI09E,GAAsB,KAAMx2E,EAAU5H,KAAKqjC,YAGxD57B,YAAYpG,EAA8BgiC,SAClChiC,QADkCgiC,UAAAA,OAEnCA,UAAYz7B,EAAUy7B,SACrB04C,EAAc/7E,KAAKqjC,UAAU5D,IAAM,MAACv5B,OAAWA,QAChDm9B,UAAU5D,GAAK,CAACs8C,EAAY,IAAM,OAAQA,EAAY,IAAM,SAG5Dl7B,yBACE,IAAI1/C,IAAI,CAACnB,KAAKqjC,UAAUrZ,YAAchqB,KAAKqjC,UAAUpE,SAAW,KAGlE6hB,wBACE,IAAI3/C,IAAInB,KAAKqjC,UAAU5D,IAGzBr3B,aACG,qBAAoBA,EAAKpI,KAAKqjC,aAGjCse,iBACC33B,SAACA,KAAaxP,GAAQxa,KAAKqjC,gBACG,CAClCxiC,KAAM,WACN+e,MAAOoK,KACJxP,IC7BF,MAAM6jE,WAAgC1+B,GACpCj/C,eACE,IAAI29E,GAAwB,KAAMz2E,EAAU5H,KAAKqjC,YAG1D57B,YAAYpG,EAA8BgiC,SAClChiC,QADkCgiC,UAAAA,OAEnCA,UAAYz7B,EAAUy7B,SACrB04C,EAAc/7E,KAAKqjC,UAAU5D,IAAM,MAACv5B,OAAWA,QAChDm9B,UAAU5D,GAAK,CAACs8C,EAAY,IAAM14C,EAAUmG,GAAIuyC,EAAY,IAAM14C,EAAUi7C,YAG5Ez9B,yBACE,IAAI1/C,IAAI,CAACnB,KAAKqjC,UAAUi7C,WAAYt+E,KAAKqjC,UAAUmG,MAAQxpC,KAAKqjC,UAAUpE,SAAW,KAGvF6hB,wBACE,IAAI3/C,IAAInB,KAAKqjC,UAAU5D,IAGzBr3B,aACG,uBAAsBA,EAAKpI,KAAKqjC,aAGnCse,iBACC28B,WAACA,EAAD90C,GAAaA,KAAOhvB,GAAQxa,KAAKqjC,gBACD,CACpCxiC,KAAM,aACNoH,EAAGuhC,EACH/+B,EAAG6zE,KACA9jE,IC9BF,MAAM+jE,WAA2B5+B,GAC/Bj/C,eACE,IAAI69E,GAAmB,KAAM32E,EAAU5H,KAAKqjC,YAGrD57B,YAAYpG,EAA8BgiC,SAClChiC,QADkCgiC,UAAAA,EAInC0kC,cAAct+B,QACdpG,UAAUpE,QAAUt1B,GAAQ3J,KAAKqjC,UAAUpE,SAAW,IAAIpgB,OAAO4qB,IAASzlB,GAAKA,IAG/E88B,kBAIAD,yBACE,IAAI1/C,IAAI,CAACnB,KAAKqjC,UAAUm7C,MAAOx+E,KAAKqjC,UAAU7jC,SAAWQ,KAAKqjC,UAAUpE,SAAW,KAGrF72B,aACG,kBAAiBA,EAAKpI,KAAKqjC,aAG9Bse,iBACC68B,MAACA,EAADh/E,MAAQA,EAARy/B,QAAeA,EAAfjlB,MAAwBA,EAAxBpT,GAA+BA,GAAM5G,KAAKqjC,gBACzC,CACLxiC,KAAM,QACN+e,MAAO4+D,EACPh/E,MAAAA,UACc0G,IAAV8T,EAAsB,CAACA,MAAAA,GAAS,WACzB9T,IAAPU,EAAmB,CAACA,GAAAA,GAAM,WACdV,IAAZ+4B,EAAwB,CAACA,QAAAA,GAAW,KCjCvC,MAAMw/C,WAA4B9+B,GAChCj/C,eACE,IAAI+9E,GAAoB,KAAM72E,EAAU5H,KAAKqjC,YAGtD57B,YAAYpG,EAA8BgiC,SAClChiC,QADkCgiC,UAAAA,EAInCwd,yBACE,IAAI1/C,IAGN2/C,wBACE,IAAI3/C,IAGNiH,aACG,mBAAkBA,EAAKpI,KAAKqjC,aAG/Bse,iBACE,CACL9gD,KAAM,SACNqJ,KAAMlK,KAAKqjC,UAAUq7C,SCC3B,SAASC,GAAar5E,OAEhBs5E,EAAe,kBAKVC,EAASl5E,EAAoBm5E,MAChCn5E,aAAgB2kE,KAGb3kE,EAAKw2C,cAAgBH,GAAUr2C,EAAKL,MAAO,CAC9CA,EAAKlF,KAAK0+E,GAMVA,EALwB,CACtB3xE,KAAM,KACN3K,OAAQs8E,EAAW3xE,KACnBk2B,UAAW,OAMb19B,aAAgB8jE,KACd9jE,EAAKtE,kBAAkBipE,KAAewU,EAAWt8E,QAEnDs8E,EAAW3tD,OAAS,IACd2tD,EAAW3tD,QAAU,GACzBiH,MAAOzyB,EAAKokE,uBAId+U,EAAWz7C,UAAUjjC,QAAQuF,EAAKskE,oBAAmB,KAGrD6U,EAAWz7C,UAAUjjC,QAAQuF,EAAKskE,uBAIlCtkE,aAAgBsiE,UACb6W,EAAW3xE,OACd2xE,EAAW3xE,KAAQ,QAAOyxE,MAGvBE,EAAWt8E,QAAUs8E,EAAWz7C,UAAUrgC,OAAS,GACtDsC,EAAKlF,KAAK0+E,GACVn5E,EAAKL,KAAOw5E,EAAW3xE,MAEvBxH,EAAKL,KAAOw5E,EAAWt8E,YAGzB8C,EAAKlF,QAAQuF,EAAKg8C,gBAOlBh8C,aAAgBykE,IAChBzkE,aAAgB0kE,IAChB1kE,aAAgBs2E,IAChBt2E,aAAgB+wD,IAChB/wD,aAAgBm1D,IAChBn1D,aAAgBi3E,IAChBj3E,aAAgByhE,IAChBzhE,aAAgB23E,IAChB33E,aAAgBypE,IAChBzpE,aAAgBqoE,IAChBroE,aAAgB02E,IAChB12E,aAAgBw2E,IAChBx2E,aAAgBm2E,IAChBn2E,aAAgBy3E,IAChBz3E,aAAgBy4E,IAChBz4E,aAAgB04E,IAChB14E,aAAgBwkE,IAChBxkE,aAAgB84E,IAChB94E,aAAgB44E,KAEhBO,EAAWz7C,UAAUjjC,KAAKuF,EAAKg8C,aAI/Bh8C,aAAgB8gE,IAChB9gE,aAAgBw7C,IAChBx7C,aAAgBk3E,IAChBl3E,aAAgByoE,IAChBzoE,aAAgB42E,KAEhBuC,EAAWz7C,UAAUjjC,QAAQuF,EAAKg8C,YAGhCh8C,aAAgB66C,MACds+B,EAAWt8E,QAA0C,IAAhCs8E,EAAWz7C,UAAUrgC,OAC5C2C,EAAKu7C,UAAU49B,EAAWt8E,aACrB,GAAImD,EAAKtE,kBAAkBm/C,GAGhC76C,EAAKu7C,UAAU49B,EAAW3xE,cAErB2xE,EAAW3xE,OACd2xE,EAAW3xE,KAAQ,QAAOyxE,KAK5Bj5E,EAAKu7C,UAAU49B,EAAW3xE,MAGC,IAAvBxH,EAAKq6C,cAAqB,CAC5B16C,EAAKlF,KAAK0+E,GAMVA,EALwB,CACtB3xE,KAAM,KACN3K,OAAQs8E,EAAW3xE,KACnBk2B,UAAW,WAOX19B,EAAKq6C,oBACN,EAECr6C,aAAgB66C,MAAgBs+B,EAAWt8E,QAAUs8E,EAAWz7C,UAAUrgC,OAAS,IAErFsC,EAAKlF,KAAK0+E,cAGT,EACHD,EAASl5E,EAAK67C,SAAS,GAAIs9B,kBAGtBA,EAAW3xE,OACd2xE,EAAW3xE,KAAQ,QAAOyxE,SAGxBp8E,EAASs8E,EAAW3xE,MACnB2xE,EAAWt8E,QAAUs8E,EAAWz7C,UAAUrgC,OAAS,EACtDsC,EAAKlF,KAAK0+E,GAEVt8E,EAASs8E,EAAWt8E,WAGjB,MAAMT,KAAS4D,EAAK67C,SAAU,CAMjCq9B,EAAS98E,EALe,CACtBoL,KAAM,KACN3K,OAAQA,EACR6gC,UAAW,cCvKhB,SAAS07C,GAAchlE,SACb,QAAXA,GAA+B,SAAXA,GAAqBe,GAAYf,GAEhD,SAEF,SAYT,SAASilE,GAAiBzgE,EAAmB3M,SACrCI,MAACA,EAAD2M,OAAQA,EAAR5c,MAAgBA,EAAhBg9C,UAAuBA,GAAaxgC,KACtCA,EAAMsgB,gBAAgBjtB,GAAU,aAC5BoQ,EAAWhQ,EAAMJ,GACjB+H,EAAcwhD,GAAkB,QAAS,KAAMx8C,EAAQ/M,OACzD+jB,EAAQ2kC,GAAct4C,EAAUrD,EAAQ,CAC1CiX,gBAAgB,EAChBC,oBAAgC3vB,IAAhByT,KAA+BA,IAG7C5X,EAAMg9C,UAAU0c,cAAc7pD,GAAS+jB,QAEzCA,EAAQx1B,UAAQw1B,GAASA,EAAMxtB,KAAK,MAAQwtB,EAG5CA,GAAU,MAAK5zB,EAAMg9C,UAAU0c,cAAc7pD,GAAS+jB,QACtD5zB,EAAMg9C,UAAU0c,cAAc7pD,GAAS+jB,MAAQ,YAG3CmC,EAAcqjC,GAAkB,cAAen5C,EAASoU,OAAQzX,EAAQ/M,GAExEqpB,EACgB,OAApBjZ,EAASoU,QAAkBzpB,YAAgBqV,EAASoU,2BAAT6oD,EAAiBhkD,OAAQtc,EAAOyX,OAAO6E,QAAQ,GACtFmhC,EAAazzD,EAAS,CAAC,SAAU,SAAUmvB,GAAe,SAAW,SAE3EinB,EAAU0c,cAAc7pD,GAAW,CACjC+jB,MAA2B,OAApB3T,EAASoU,OAAkBT,EAAQ,KAC1C+lC,cAAe15C,GACdo6C,GAAyB,UAAZxqD,EAAsB,GAAK,CAACstE,GAAoB3gE,EAAO3M,EAASqpB,MAKpF,SAASikD,GAAoB3gE,EAAmB3M,EAAwBqpB,SAChE1mB,EAAuB,QAAZ3C,EAAoB,SAAW,cAEzC,CACLqpB,OAAAA,EACA2hC,WAAYr+C,EAAMxc,MAAMg9C,UAAUme,WAAWhuC,IAAI3a,GAAYgK,EAAMxc,MAAMwiD,iBAAiBhwC,QAAYrO,EACtG4jD,KAAM,IAIV,SAASq1B,GAAe5gE,EAAmB3M,SACnC7P,MAACA,GAASwc,KACZxc,EAAMg9C,UAAU+K,KAAKl4C,GAAU,OAC3B6pD,cAACA,EAADx5D,QAAgBA,GAAWsc,EAAMwgC,aACvC98C,EAAQi0B,KAAKtkB,GAAWmsD,GAAkB97D,EAAS2P,GAErB,WAA1B3P,EAAQi0B,KAAKtkB,GAAuB,OAEhCgqD,EAA4B,MAAZhqD,EAAkB,SAAW,MAE7CsqD,EAAeT,EAAcG,OAC9B,MAAMwjB,KAAiBr9E,EAAMg9C,UAAU+K,KAAKl4C,GAAU,OACnDwqD,EAAa2iB,GAAcK,EAAclwD,IAAI,WACnDgtC,EAAaE,KAAbF,EAAaE,GAAgB,CAAC8iB,GAAoB3gE,EAAOq9C,GAAe,WAGlEyjB,EAAWjoB,GAAagoB,EAAe,OAAQ7gE,EAAMI,OAAQ,CAACyX,QAAQ,IACxEipD,GAEFnjB,EAAaE,GAAY,GAAGtS,KAAK1pD,KAAKi/E,GAExCD,EAActnB,eAAgB,KC7D/B,SAASwnB,GAAwB/gE,OACjC,MAAMxc,KAASwc,EAAMijC,SACxBz/C,EAAMs3E,kBAOV,SAASkG,GAAiChhE,EAAcm/C,SAQhDnpD,EAAWkpD,GAA8BC,GACzC9rD,EAAU0C,GAAwBC,GAClCtS,EAAUsc,EAAMwgC,UAAU98C,QAC1Bu9E,EAAiBjhE,EAAMwgC,UAAUme,eAEnCuiB,MAEC,MAAM19E,KAASwc,EAAMijC,SAAU,OAC5Bk+B,EAAY39E,EAAMg9C,UAAUme,WAAWniB,gBAAgBxmC,GACvDorE,EAAe19E,EAAQ8sB,MAAMnd,IAAYisD,GAAoBjsD,EAAS2M,MACvD,gBAAjBohE,GAAsD,SAApBD,EAAUlgF,MAAkB,CAGhEigF,OAAav5E,WAIXu5E,EAAY,IACO,gBAAjBE,GAAkCF,EAAWjgF,QAAUkgF,EAAUlgF,MAAO,CAG1EigF,OAAav5E,QAGfu5E,EAAa7jC,GAAqD6jC,EAAYC,EAAWnrE,EAAU,SAEnGkrE,EAAaC,KAIbD,EAAY,KAET,MAAM19E,KAASwc,EAAMijC,SACxBjjC,EAAMooD,aAAa5kE,EAAM09C,QAAQlrC,GAAWgK,EAAMkhC,QAAQie,IAC1D37D,EAAMg9C,UAAUme,WAAWt5D,IAAI2Q,EAAU,UAAU,GAErDirE,EAAexkC,gBAAgB0iB,EAAgB+hB,QAE/CD,EAAexkC,gBAAgB0iB,EAAgB,CAC7C98C,UAAU,EACVphB,WAAO0G,IAoBb,SAAS05E,GAAgBrhE,EAAkBhK,SACnC3C,EAAuB,UAAb2C,EAAuB,IAAM,IACvCoK,EAASJ,EAAMI,OACfssC,EAAiB1sC,EAAMskC,kBAAkBjxC,MAE3Cq5C,EAAgB,OACZtoC,EAAYsoC,EAAe/7B,IAAI,QAC/BlU,EAAQiwC,EAAe/7B,IAAI,YAE7BjE,GAAkBtI,GAAY,OAC1BzY,EAAOqhC,GAA0B5sB,EAAO+sB,KAAMn3B,UAChDwG,GAAcC,IAAU8vB,GAAO5gC,GAE1B,OAEAA,SAGFkhC,GAA4BzsB,EAAO+sB,KAAMn3B,GAE7C,GAAIgK,EAAMqmD,eAAgC,QAAfrmD,EAAMjJ,YAE/B81B,GAA4BzsB,EAAO+sB,KAAMn3B,GAC3C,OACCrK,EAAOqhC,GAA0B5sB,EAAO+sB,KAAMn3B,UAC7Cu2B,GAAO5gC,GAAQA,EAAK8tB,KAAO9tB,GC3G/B,SAAS21E,GACd79D,EACAvb,EACAuY,UAEOa,GAAQpZ,EAAM,CAACwpB,OAAS,MAAKpQ,GAAQmC,QAAiBhD,GAAO,KAG/D,MAAM8gE,WAAmBnE,GAO9Bl0E,YAAYqZ,EAA2Bzf,EAAem3E,EAAyB75D,SACvEmC,EAAM,QAASzf,EAAQm3E,EAAiB75D,EAAQmC,EAAK7e,yFAEtDF,MAAQg+E,GAAWj/D,EAAKA,KAAM9gB,KAAMA,KAAKy/C,QAAQ,cAAUv5C,EAAWyY,QACtE6iC,SAAW,CAACxhD,KAAK+B,YAEjBiQ,MAAQhS,KAAKggF,UAAUl/D,EAAK9O,OAG3BguE,UACNhuE,OAGKkhB,GAAelhB,SACX,CAACA,MAAOhS,KAAKigF,kBAAkBjuE,EAAO,gBAGzCqjC,EAAW7uC,EAAKwL,GAChBkuE,EAAkB,OACnB,MAAMtuE,KAAWyjC,EAAU,KACzB,CAAC3nC,EAAKC,GAAQ7E,SAAS8I,GAAU,CAEpCyS,GAASA,GAAgCzS,EAAS,sBAI9CoQ,EAAWhQ,EAAMJ,WACA1L,IAAnB8b,EAASpC,MAAqB,CAChCyE,GAASA,GAA0BrC,EAAUpQ,UAI/CsuE,EAAgBtuE,GAAW5R,KAAKigF,kBAAkBj+D,EAAUpQ,UAGvDsuE,EAGDD,kBAAkBj+D,EAAyDpQ,SAG3E8pD,EAAgB3kC,GAAa/U,EAAUpQ,UACzC8pD,EAActlC,OAChBslC,EAActlC,OAAS7c,GAAemiD,EAActlC,QAClB,OAAzBslC,EAActlC,SACvBslC,EAActlC,OAAS,MAElBslC,EAGF78B,gBAAgBjtB,WACZ5R,KAAKgS,MAAMJ,GAGfoQ,SAASpQ,UACP5R,KAAKgS,MAAMJ,GAGb4nE,iBACAz6B,UAAUz5C,KAAOk0E,GAAUx5E,WAC3B+B,MAAMy3E,YAGNH,kBACLiG,GAAwBt/E,MAGnBu5E,uBAIAx3E,MAAMw3E,uBACNx6B,UAAU7R,UAAYltC,KAAK+B,MAAMg9C,UAAU7R,UAG3CysC,sBACA53E,MAAM43E,iBAGNF,2BACA13E,MAAM03E,sBFtGR,SAA2Bl7D,OAC3B,MAAM3M,KAAWK,GACpB+sE,GAAiBzgE,EAAO3M,GAG1ButE,GAAe5gE,EAAO,KACtB4gE,GAAe5gE,EAAO,KEkGpB4hE,CAAkBngF,MAGbogF,iCAAiC/1C,UAC/BrqC,KAAK+B,MAAMq+E,iCAAiC/1C,GAG9CywC,8BACA/4E,MAAM+4E,kBACJ,GAGFuF,sBAAsB/6E,UACpBtF,KAAK+B,MAAMs+E,sBAAsB/6E,GAGlCg7E,8BACAC,EAAyB,OAE1B,MAAM3uE,KAAWK,OACf,MAAMmqD,KAAcb,GAAc,OAC/BilB,EAAwBxgF,KAAK++C,UAAU0c,cAAc7pD,GACrDyqD,EAAkBmkB,EAAsBpkB,IAExCV,cAACA,GAAiB8kB,KACpB9kB,EAAe,OACX3jC,EAAcojC,GAAkB,cAAeO,EAActlC,OAAQp2B,KAAK2e,OAAQ/M,MAEpF,CAAC,QAAS,UAAU9I,SAASivB,GAAc,OACvC6jC,EAAgBV,GAAiBtpD,EAASmmB,GAChDwoD,EAAa3kD,cAAb2kD,EAAa3kD,YAAgB,IAC7B2kD,EAAa3kD,YAAYggC,GAAiB,UAI1CS,MAAAA,GAAAA,EAAkB,GAAI,OAElB9nD,EAAuB,QAAZ3C,EAAoB,SAAW,QAC1C6uE,EAA0B,WAAfrkB,EAA0B,aAAe,aAC1C,UAAZxqD,GAAwB5R,KAAK+B,MAAMg9C,UAAUme,WAAWhuC,IAAI3a,KAE9DgsE,EAAaE,KAAbF,EAAaE,GAAc,IAC3BF,EAAaE,GAAU7uE,GAAW,IAGhC4uE,EAAsB7qD,QACxB4qD,EAAazmE,SAAbymE,EAAazmE,OAAW,IACxBymE,EAAazmE,OAAmB,QAAZlI,EAAoB,WAAa,eAAiB,YAKvE2uE,EAGChG,8BACFxoE,OAACA,EAADD,IAASA,GAAO9R,KAAKgS,MAErBk5B,EAAUn5B,EAAS/R,KAAK0gF,uBAAyB5uE,EAAM,OAAI5L,MAE7DkW,EAAqB,aAIpBtK,GAA0C,gBAAnC9R,KAAK++C,UAAU98C,QAAQ8sB,MAAM9mB,KAE7B8J,GAA6C,gBAAnC/R,KAAK++C,UAAU98C,QAAQ8sB,MAAMtkB,KADjD2R,EAAQ,QAKH,IACFpc,KAAKsgF,2BAEJp1C,EAAU,CAACA,QAAAA,GAAW,GAC1BD,OAAQ,OACR7uB,MAAAA,GAIG4gD,+BAEEh9D,KAAK+B,MAAMi7D,wBAGZ0jB,4BACF1gF,KAAKqB,QAAUrB,KAAKqB,kBAAkBy+E,IAKnC,OAGE,CAAC7hE,OAAS,gBADWje,KAAKy/C,QAAQ,wBAKtCkhC,sBAIA9F,cAAcxwC,UACfrqC,KAAKqB,QAAUrB,KAAKqB,kBAAkBy+E,GAIjC,IACD9/E,KAAK6+B,gBAAgB,UACrB,CACEpP,OAAQ,CACN8a,OAAQ,CAGNW,QAAS,CAACtrB,MAAOC,GAAQ7f,KAAKgS,MAAMD,OAAQ,CAAC/F,OAAQ,iBAI3D,MACD4rC,MAAMijC,cAAcxwC,IAGpBuN,MAAMijC,cAAcxwC,GAMrBu2C,wCACAn3C,EAAmB,GACnBm+B,EAAqB,GACrBnoC,EAAe,MAEjBz/B,KAAK+B,iBAAiB+9E,OACpB9/E,KAAK+B,MAAM88B,gBAAgB,UAAW,OAClCjf,EAAQC,GAAQ7f,KAAK+B,MAAMiQ,MAAMD,QACvC03B,EAAOrpC,KAAKwf,GACZgoD,EAAIxnE,KAAK,YACTq/B,EAAGr/B,KAAM,YAAWwf,eAGjB,MAAMhO,KAAWsC,GAAyB,OACvCu0D,EAAsBzoE,KAAK+B,MAAMg9C,UAAUmE,OAAOtxC,MACpD62D,IAAwBA,EAAoBxoD,OAAQ,OAChDpf,EAAO4nE,EAAoBv5C,IAAI,QAC/BlU,EAAQytD,EAAoBv5C,IAAI,YAElCjE,GAAkBpqB,IAASka,GAAcC,GAAQ,OAE7C4E,EAAQ8oD,GADCC,GAAe3oE,KAAK+B,MAAO6P,IAEtCgO,GACF6pB,EAAOrpC,KAAKwf,GACZgoD,EAAIxnE,KAAK,YACTq/B,EAAGr/B,KAAM,YAAWwf,MAEpByE,GAASA,GAAyBzS,YAMrC,CAAC63B,OAAAA,EAAQm+B,IAAAA,EAAKnoC,GAAAA,GAGfohD,sBACA1zE,KAACA,EAAD7H,KAAOA,GAAQtF,KAAK++C,UAAUz5C,KAAKw7E,WACnChvE,IAACA,EAADC,OAAMA,GAAU/R,KAAKgS,OACrBy3B,OAACA,EAADm+B,IAASA,EAATnoC,GAAcA,GAAMz/B,KAAK4gF,kCACzB3hD,EAAoB,OAErB,MAAMrtB,KAAWK,GAAgB,OAC9B+P,EAAWhiB,KAAKgS,MAAMJ,MACxBoQ,EAAU,CACZid,EAAQ7+B,KAAKyf,GAAQmC,UAEfrJ,IAACA,EAADlS,KAAMA,GAAQub,KAEhBjJ,GAAUJ,IACZsmB,EAAQ7+B,KAAKyf,GAAQmC,EAAU,CAAC0O,UAAW,SAGzCsC,GAAYvsB,GAAO,OACfmZ,MAACA,EAADhZ,GAAQA,EAAKgsB,IAAmBnsB,EAChCs6E,EAAalB,GAAmB79D,EAAUvb,GAC5CqL,GAAOC,GAIT03B,EAAOrpC,KAAK2gF,GACZnZ,EAAIxnE,KAAK,OACTq/B,EAAGr/B,KAAK2gF,KAERt3C,EAAOrpC,KAAKwf,GACZgoD,EAAIxnE,KAAKwG,GACT64B,EAAGr/B,KAAK2gF,SAEL,GAAI5gF,UAAQsG,GAAO,OAClBs6E,EAAa9lB,GAAoBj5C,EAAUpQ,GACjD63B,EAAOrpC,KAAK2gF,GACZnZ,EAAIxnE,KAAK,OACTq/B,EAAGr/B,KAAK2gF,WAKRC,IAAUlvE,KAASC,QAElB,CACL5E,KAAAA,EACA7H,KAAAA,EACA25B,QAAAA,KACI+hD,GAASv3C,EAAOzmC,OAAS,EACzB,CACEsV,UAAW,IACL0oE,EAAQ,CAACA,MAAAA,GAAS,MAClBv3C,EAAOzmC,OAAS,CAACymC,OAAAA,EAAQm+B,IAAAA,EAAKnoC,GAAAA,GAAM,KAG5C,IAIAwhD,gBAAgBrvE,SAChBI,MAACA,GAAShS,KACVgiB,EAAWhQ,EAAMJ,UAEnBoQ,EACEgR,GAAYhR,EAASvb,MAChB,CAACo5E,GAAmB79D,EAAUA,EAASvb,KAAM,CAACuX,KAAM,WAClD7d,UAAQ6hB,EAASvb,MACnB,CAACw0D,GAAoBj5C,EAAUpQ,EAAS,CAACoM,KAAM,WAEjD,CAAC6B,GAAQmC,EAAU,CAAChE,KAAM,WAE5B,GAGDkjE,eAAetvE,SACfI,MAACA,GAAShS,KACVgiB,EAAWhQ,EAAMJ,MACnBoQ,EAAU,OACNvb,KAACA,GAAQub,QAER,EADQgR,GAAYvsB,GAAQA,EAAK2K,OAASjR,UAAQsG,IAASA,IAAS,mBAGtE,GAGD+1D,2BACAxqD,MAACA,EAAD2M,OAAQA,GAAU3e,QACpBgS,EAAMA,aAEDwqD,GAAmBxqD,EAAMA,MAAO,QAAS2M,SAG5CwiE,EAAoB,CACxBrvE,IAAK,CAAC,MAAO,UACbC,OAAQ,CAAC,OAAQ,cAGd,MAAMH,KAAW0pD,MAChBtpD,EAAMJ,GAAU,aACZkmB,EAAcqjC,GAAkB,wBAAenpD,EAAMJ,uBAANwvE,EAAgBhrD,OAAQzX,EAAQ/M,MACjFuvE,EAAkBvvE,GAAS9I,SAASgvB,UAE/B0kC,GAAmBxqD,EAAMJ,GAAUA,EAAS+M,IAOpDo8D,sBACCh5E,MAACA,GAAS/B,KAKVsF,EH/MH,SAA2B+7E,SAC1B/7E,EAAiB,GACjBu5E,EAAWF,GAAar5E,OAEzB,MAAMvD,KAASs/E,EAAK7/B,SACvBq9B,EAAS98E,EAAO,CACdS,OAAQ6+E,EAAKl0E,KACbA,KAAM,KACNk2B,UAAW,YAIR/9B,EGmMQg8E,CADKthF,KAAK++C,UAAUz5C,KAAKw7E,WAGhC5G,EAAcn4E,EAAMi4E,0BAAyB,GAE7CrkD,EAAQ31B,KAAKw8D,sBAAwBz6D,EAAMk2D,gBAC3Cn5C,EAAQ/c,EAAM4+E,2BAoBb,CAlBW,CAChBxzE,KAAMnN,KAAKy/C,QAAQ,QACnB5+C,KAAM,WACF80B,EAAQ,CAACA,MAAAA,GAAS,MAClB7W,EAAQ,CAACA,MAAAA,GAAS,GACtBg4B,KAAM,CACJ9kC,MAAOhS,KAAK6gF,iBAGdp6E,KAAM,CACJmZ,MAAO3N,GAAexR,KAAIyE,GAAKlF,KAAKihF,gBAAgB/7E,KAAI9F,OACxDgS,MAAOa,GAAexR,KAAIyE,GAAKlF,KAAKkhF,eAAeh8E,KAAI9F,WAErDkG,EAAKtC,OAAS,EAAI,CAACsC,KAAMA,GAAQ,MACjC40E,EAAc,CAACzqD,OAAQ,CAAC8a,OAAQ2vC,IAAgB,MACjDn4E,EAAM84E,cAAcr7B,GAAqBx/C,KAAM,OAM5C67E,oBACD77E,KAAKgS,OCtWT,SAAS2rE,GAAWr4E,EAAY++D,OAChC,MAAMjpB,KAASipB,EAAS,mBACrBkd,EAAYnmC,EAAM91C,QAGpBA,EAAK6H,MAAQiuC,EAAMuvB,WAAarlE,EAAK6H,OAASiuC,EAAMomC,wBAIlDC,YAAan8E,EAAI,2BAAJskE,EAAgB8X,KAC7BC,YAAeJ,EAAUpwD,2BAAVywD,EAAkBC,WAGnCJ,GAAcE,iBAKZG,YAAgBx8E,EAAI,2BAAJy8E,EAAgBF,YACjCC,GAAiBH,IAAiBG,IAAkBH,iBAInDK,YAAYT,EAAUpwD,2BAAV8wD,EAAkBP,SAC/BD,IAAcO,GAAcP,IAAeO,KAI5C/lC,GAAa32C,IAAS22C,GAAaslC,OACjCh6E,EAAUjC,EAAKsE,OAAQ23E,EAAU33E,eAC5BwxC,OAEJ,GAAIY,GAAU12C,IAAS02C,GAAUulC,OAClCj8E,EAAKmM,MAAQ8vE,EAAU9vE,WAClB2pC,OAEJ,GAAIc,GAAY52C,IACjBA,EAAK6H,OAASiuC,EAAMomC,gBACfpmC,SAIN,KAwLF,SAASo+B,GAAUj7D,aACpB2jE,EAtLN,SAAmB3jE,EAAc8lD,MAC3B9lD,EAAMjZ,OAASiZ,EAAMld,OAAQ,IAGZ,OAAfkd,EAAMjZ,KAAe,OAEjB9C,EAAS,IAAI8nE,GAAW,CAAC1gE,OAAQ,YACvCy6D,EAAQjkE,KAAKoC,GACNA,QAGH2/E,EAAiBxE,GAAWp/D,EAAMjZ,KAAM++D,MAE1C8d,SACGhmC,GAAY59B,EAAMjZ,QACrB68E,EAAe78E,KAAK6rB,OAAS/nB,EAAU,GAAImV,EAAMjZ,KAAK6rB,OAAQgxD,EAAe78E,KAAK6rB,UAI/EgxD,EAAexX,WAAapsD,EAAMjZ,KAAK6H,OAC1Cg1E,EAAeX,SAAWjjE,EAAMjZ,KAAK6H,MAGhCg1E,EACF,OACC3/E,EAAS,IAAI8nE,GAAW/rD,EAAMjZ,aACpC++D,EAAQjkE,KAAKoC,GACNA,UAIF+b,EAAMld,OAAO09C,UAAUz5C,KAAKw7E,UAC/BviE,EAAMld,OAAO09C,UAAUz5C,KAAKw7E,UAC5BviE,EAAMld,OAAO09C,UAAUz5C,KAAK6d,KAqJvBi/D,CAAU7jE,EAAOA,EAAMwgC,UAAUz5C,KAAK++D,eAE3CyL,YAACA,EAADqJ,oBAAcA,GAAuB56D,EAAMwgC,UAAUz5C,KACrDA,EAAOiZ,EAAMjZ,KAGbqkE,IADUrkE,IAAS62C,GAAY72C,IAAS02C,GAAU12C,IAAS22C,GAAa32C,MAEhEiZ,EAAMld,OAASkd,EAAMld,OAAO09C,UAAUz5C,KAAKqkE,cAAcjpE,QAAU,IAAIo7C,GAEjFK,GAAY72C,IAEV82C,GAAoB92C,GACtB48E,EAAO,IAAI7X,GAAa6X,EAAM58E,EAAK+8E,UAC1B/lC,GAAqBh3C,KAC9B48E,EAAO,IAAI9X,GAAc8X,EAAM58E,EAAKg9E,YAGtC3Y,EAAc5tB,cAAe,GACI,QAAxBz2C,MAAAA,aAAAA,EAAM6rB,6BAAQiH,SAEvBuxC,EAAc5tB,cAAe,GAG/BmmC,EAAOzY,GAAUpuB,aAAa6mC,EAAM3jE,EAAOorD,IAAkBuY,EAS7DA,EAAO,IAAI/X,GAAe+X,SAIpBK,EAAgBhkE,EAAMld,QAAUkiD,GAAahlC,EAAMld,SACrDqgE,GAAYnjD,IAAUmvC,GAAanvC,KACjCgkE,IACFL,EAAOzb,GAAQ+b,iBAAiBN,EAAM3jE,IAAU2jE,GAIhD3jE,EAAMqjC,WAAW5+C,OAAS,IAC5Bk/E,EA1LG,SAA6BA,EAAoB3jE,EAAcorD,OAChE8Y,EAAgB,MAEf,MAAM/iF,KAAK6e,EAAMqjC,WAAY,KAC5B8gC,EACAC,KAEAtsC,GAAY32C,GACdijF,EAAgBT,EAAO,IAAIpnB,GAAconB,EAAMxiF,GAC/CgjF,EAAc,eACT,GAAIhtC,GAASh2C,GAAI,OAChBm7C,EAAWwuB,GAA+B3pE,GAChDijF,EAAgBT,EAAOzY,GAAUI,kBAAkBqY,EAAM,GAAIrnC,EAAU8uB,IAAkBuY,EAEzFA,EAAO,IAAIxrB,GAAWwrB,EAAM3jE,EAAO7e,EAAE2mB,aAChC,GAAIiwB,GAAM52C,GACfijF,EAAgBT,EAAOzb,GAAQmc,kBAAkBV,EAAMxiF,EAAG6e,GAC1DmkE,EAAc,cACT,GAAIlsC,GAAW92C,GACpBgjF,EAAc,YAGSx8E,IAFNyjE,EAAc5uB,gBAAgBr7C,EAAEkgB,OAEpCpgB,QACX0iF,EAAO,IAAIzY,GAAUyY,EAAM,EAAExiF,EAAEkgB,OAAQ8iE,IACvC/Y,EAAc/lE,IAAIlE,EAAEkgB,MAAO8iE,GAAa,IAE1CC,EAAgBT,EAAO/gC,GAAayhC,kBAAkBV,EAAMxiF,QACvD,GAAIo/B,GAAYp/B,GACrBijF,EAAgBT,EAAO9a,GAAcwb,kBAAkBV,EAAMxiF,GAC7DgjF,EAAc,SACV90B,GAAoBrvC,KACtB2jE,EAAO,IAAI/X,GAAe+X,SAEvB,GAAIvsC,GAASj2C,GAClBijF,EAAgBT,EAAO5E,GAAWuF,KAAKX,EAAM3jE,EAAO7e,EAAG+iF,KACvDC,EAAc,eACT,GAAIxsC,GAASx2C,GAClBijF,EAAgBT,EAAO,IAAI9S,GAAoB8S,EAAMxiF,GACrDgjF,EAAc,cACT,GAAIvsC,GAAgBz2C,GACzBijF,EAAgBT,EAAO,IAAIlU,GAA2BkU,EAAMxiF,GAC5DgjF,EAAc,cACT,GAAIjsC,GAAQ/2C,GACjBijF,EAAgBT,EAAO9T,GAAUwU,kBAAkBV,EAAMxiF,GACzDgjF,EAAc,eACT,GAAIhsC,GAAOh3C,GAChBijF,EAAgBT,EAAO,IAAI7F,GAAkB6F,EAAMxiF,GACnDgjF,EAAc,eACT,GAAItsC,GAAU12C,GACnBijF,EAAgBT,EAAO,IAAI/F,GAAqB+F,EAAMxiF,GACtDgjF,EAAc,eACT,GAAI9sC,GAAQl2C,GACjBijF,EAAgBT,EAAO,IAAI3D,GAAmB2D,EAAMxiF,GACpDgjF,EAAc,eACT,GAAIzsC,GAASv2C,GAClBwiF,EAAO,IAAIzD,GAAoByD,EAAMxiF,QAChC,GAAI62C,GAAS72C,GAClBijF,EAAgBT,EAAOrF,GAAW+F,kBAAkBV,EAAMxiF,GAC1DgjF,EAAc,eACT,GAAI7sC,GAAUn2C,GACnBijF,EAAgBT,EAAO,IAAIpG,GAAqBoG,EAAMxiF,GACtDgjF,EAAc,eACT,GAAI5sC,GAAWp2C,GACpBijF,EAAgBT,EAAO,IAAI9D,GAAsB8D,EAAMxiF,GACvDgjF,EAAc,eACT,GAAI3sC,GAAar2C,GACtBijF,EAAgBT,EAAO,IAAI7D,GAAwB6D,EAAMxiF,GACzDgjF,EAAc,cACT,CAAA,IAAI1sC,GAAQt2C,GAGZ,CACL2kB,G9I9GI,kCAAiCre,E8I8GQtG,gBAH7CijF,EAAgBT,EAAO,IAAI9E,GAAmB8E,EAAMxiF,GACpDgjF,EAAc,aAMZC,QAAiCz8E,IAAhBw8E,MACd,MAAM9iE,KAAS+iE,EAAc7hC,kBAAoB,GACpD6oB,EAAc/lE,IAAIgc,EAAO8iE,GAAa,UAKrCR,EAuGEY,CAAoBZ,EAAM3jE,EAAOorD,UAIpCoZ,EtC5JD,SAAkCxkE,SACjCs8B,EAAyB,MAE3B6mB,GAAYnjD,IAAUA,EAAMwgC,UAAU7R,cACnC,MAAM//B,KAAQ3G,EAAK+X,EAAMwgC,UAAU7R,WAAY,OAC5C4R,EAAUvgC,EAAMwgC,UAAU7R,UAAU//B,OACrC,MAAMk1C,KAAQvD,EAAQsD,QAAQH,OAC5BI,EAAKzwC,SAAWlF,EAAgB21C,EAAKziC,OAAS,IACjDi7B,EAASwH,EAAKziC,OAAS,kBAMxBi7B,EsC8ImBmoC,CAAyBzkE,GAC7C0kE,EAAmB3Z,GAAwB/qD,GACjD2jE,EAAOzY,GAAUI,kBAAkBqY,EAAM,GAAI,IAAIa,KAAsBE,GAAmBtZ,IAAkBuY,EAExGxgB,GAAYnjD,KACd2jE,EAAO3F,GAAY2G,SAAShB,EAAM3jE,GAClC2jE,EAAOtF,GAAasG,SAAShB,EAAM3jE,KAGjCmjD,GAAYnjD,IAAUmvC,GAAanvC,MAChCgkE,IACHL,EAAOzb,GAAQ+b,iBAAiBN,EAAM3jE,IAAU2jE,GAGlDA,EAAO/gC,GAAaqhC,iBAAiBN,EAAM3jE,IAAU2jE,EACrDA,EAAOpnB,GAAcqoB,qBAAqBjB,EAAM3jE,UAI5C6kE,EAAU7kE,EAAMy8D,YAAYz+B,GAAeo2B,KAC3C/e,EAAM,IAAIpT,GAAW0hC,EAAMkB,EAAS7mC,GAAeo2B,IAAKwG,MAC9DrJ,EAAYsT,GAAWxvB,EACvBsuB,EAAOtuB,EAEH8N,GAAYnjD,GAAQ,OAChByuD,EAAM5F,GAAcob,iBAAiBN,EAAM3jE,GAC7CyuD,IACFkV,EAAOlV,EAEHpf,GAAoBrvC,KACtB2jE,EAAO,IAAI/X,GAAe+X,KAG9BA,EAAOrF,GAAW2F,iBAAiBN,EAAM3jE,IAAU2jE,EACnDA,EAAO9T,GAAUoU,iBAAiBN,EAAM3jE,IAAU2jE,EAGhDxgB,GAAYnjD,KACd2jE,EAAOjG,GAAkB4G,KAAKX,EAAM3jE,IAAU2jE,SAI1CmB,EAAW9kE,EAAMy8D,YAAYz+B,GAAewoB,MAC5C5hD,EAAO,IAAIq9B,GAAW0hC,EAAMmB,EAAU9mC,GAAewoB,KAAMoU,GACjErJ,EAAYuT,GAAYlgE,EACxB++D,EAAO/+D,EAEHu+C,GAAYnjD,I/DhQX,SAA+BA,EAAkB4E,OACjD,MAAO+pB,EAAW4R,KAAY51C,EAAQqV,EAAMwgC,UAAU7R,WAAa,IAAK,OACrEo2C,EAAa/kE,EAAMkhC,QAAS,UAASvS,KAC3C3uB,EAAMwgC,UAAUz5C,KAAKwqE,YAAYwT,GAAcxkC,EAAQi/B,aAAe,IAAIv9B,GACxE,IAAIkW,GAAWvzC,EAAM5E,EAAO,CAAC4rB,MAAO+C,IACpCo2C,EACA/mC,GAAeshC,OACft/D,EAAMwgC,UAAUz5C,KAAK6zE,sB+D0PvBoK,CAAsBhlE,EAAO4E,OAI3B29D,EAAY,QACZpzB,GAAanvC,GAAQ,OACjBilE,EAAYjlE,EAAMkhC,QAAQ,SAIhCyiC,EC9YG,SACL7gF,EACA2Q,SAEMF,IAACA,EAADC,OAAMA,GAAUC,KAClBF,GAAOC,EAAQ,KACbwuC,EAAY,SAEX,MAAMv+B,IAAY,CAAClQ,EAAKC,MACvBihB,GAAYhR,EAASvb,MAAO,OACxBmZ,MAACA,EAADhZ,GAAQA,EAAKgsB,IAAmB5Q,EAASvb,KAC/CpF,EAASk/C,EAAY,IAAIytB,GAA2B3sE,EAAQ,CAC1DgkC,cAAe,CACb,CACEz+B,GAAAA,EACAgZ,MAAAA,EACA6f,GAAIogD,GAAmB79D,EAAUA,EAASvb,KAAM,CAACsuB,OAAO,MAG5DkK,QAAS,CAACpf,GAAQmC,aAIjBu+B,SAEF,KDqXEkjC,CAA2BvB,EAAM3jE,EAAMvM,QAAUkwE,EAExDpB,EAAY,IAAI7Y,GAAUia,EAAM3jE,EAAOilE,EAAWrgE,EAAK69B,aACvD8uB,EAAY0T,GAAa1C,QAGpB,IACFviE,EAAMwgC,UAAUz5C,KACnBwqE,YAAAA,EACAqJ,oBAAAA,EACAvlB,IAAAA,EACAzwC,KAAAA,EACA29D,UAAAA,EACAnX,cAAAA,GEtZG,MAAM+Z,WAAoBnL,GAG/B9wE,YAAYqZ,EAA4Bzf,EAAem3E,EAAyB75D,qBACxEmC,EAAM,SAAUzf,EAAQm3E,EAAiB75D,EAAQmC,EAAK7e,oCAE9B,sBAA1B6e,EAAK7e,kCAASi0B,2BAAMjuB,IAA4C,sBAA1B6Y,EAAK7e,kCAASi0B,2BAAMzrB,IAC5D4Z,GhJqFJ,qHgJlFOm9B,SAAWxhD,KAAK2jF,YAAY7iE,GAAMrgB,KAAI,CAACsB,EAAOwB,IAC1Cw8E,GAAWh+E,EAAO/B,KAAMA,KAAKy/C,QAAS,UAASl8C,UAAM2C,EAAWyY,KAIpE66D,iBACAz6B,UAAUz5C,KAAOk0E,GAAUx5E,UAC3B,MAAM+B,KAAS/B,KAAKwhD,SACvBz/C,EAAMy3E,YAIHD,uBAIAx6B,UAAU7R,UAAY,OACtB,MAAMnrC,KAAS/B,KAAKwhD,SAAU,CACjCz/C,EAAMw3E,sBACD,MAAM91E,KAAO+C,EAAKzE,EAAMg9C,UAAU7R,gBAChC6R,UAAU7R,UAAUzpC,GAAO1B,EAAMg9C,UAAU7R,UAAUzpC,IAKzDk2E,qBACA,MAAM53E,KAAS/B,KAAKwhD,SACvBz/C,EAAM43E,iBAIHF,0BACA,MAAM13E,KAAS/B,KAAKwhD,SACvBz/C,EAAM03E,sBAMFkK,YAAY7iE,UACd2pB,GAAc3pB,GACTA,EAAKgxB,QACHpH,GAAc5pB,GAChBA,EAAK+wB,QAEP/wB,EAAKjC,OAGPw6D,mBJnDF,SAA+B96D,GACpC+gE,GAAwB/gE,SAGlBqlE,EAAqC,IAAzBrlE,EAAM67B,OAAOlP,QAAgB,QAAU,aAGnD24C,OAAsC39E,IAAzBqY,EAAM67B,OAAOlP,QAAwB,SAAW,cAEnEq0C,GAAiChhE,EAAOqlE,GACxCrE,GAAiChhE,EAAOslE,GI0CtCC,CAAsB9jF,MAGjB+jF,wBACE,KAGF3D,iCAAiC/1C,UAC/BrqC,KAAKwhD,SAAS1hD,QAAO,CAAC0iD,EAAIzgD,IAAUA,EAAMq+E,iCAAiC59B,IAAKnY,GAGlFywC,8BACAt5B,SAASh+C,SAAQzB,GAASA,EAAM+4E,oBAC9B,GAGF9d,8BACCgnB,EAAgBhnB,GAAsBh9D,UAEvC,MAAM+B,KAAS/B,KAAKwhD,SACvBwiC,EAAc5jF,QAAQ2B,EAAMi7D,gCAGvBgnB,EAGF3D,sBAAsB/6E,UACpBtF,KAAKwhD,SAAS1hD,QAAO,CAACmkF,EAAIliF,IAAUA,EAAMs+E,sBAAsB4D,IAAK3+E,GAGvEy1E,uBAEE/6E,KAAKwhD,SAAS/gD,KAAIsB,UACjB4zB,EAAQ5zB,EAAMk2D,gBACdn5C,EAAQ/c,EAAM4+E,qBACdzG,EAAcn4E,EAAMi4E,0BAAyB,SAE5C,CACLn5E,KAAM,QACNsM,KAAMpL,EAAM09C,QAAQ,YAChB9pB,EAAQ,CAACA,MAAAA,GAAS,MAClB7W,EAAQ,CAACA,MAAAA,GAAS,MAClBo7D,EAAc,CAACzqD,OAAQ,CAAC8a,OAAQ2vC,IAAgB,MACjDn4E,EAAM84E,oBAKR8F,sBAIGpG,8BACFrvC,EAAUlrC,KAAKo6C,OAAOlP,cACrB,IACU,MAAXA,EAAkB,CAACA,QAASA,GAAW,GAC3CD,OAAQ,OAER7uB,MAAO,SCzGb,MAAM8nE,GAAkE,CACtE5sB,QAAS,EACTn9B,UAAW,EACXpL,MAAO,KACJgO,GACHE,UAAW,EACXxN,OAAQ,GAGG00D,GAA4B39E,EAAK09E,IAEvC,MAAME,WAAsBxpC,GACjCnzC,YACkBmZ,EAAwC,GACxCi6B,EAAwC,GACjDid,GAAgB,gBAFPl3C,SAAAA,OACAi6B,SAAAA,OACTid,cAAAA,EAKFp3D,eACE,IAAI0jF,GAAcx8E,EAAU5H,KAAK4gB,UAAWhZ,EAAU5H,KAAK66C,UAAW76C,KAAK83D,eAG7EC,YAAYt0C,SAGJ,SAATA,IAKS,SAATA,GAA4B,UAATA,IACZzjB,KAAKkvB,IAAIzL,MA3CT,KADQ1Z,EA+CG/J,KAAKkvB,IAAIzL,KA9CL,OAAN1Z,IADxB,IAAuBA,EAkDd0xE,4BACE3gE,GAAY9a,KAAK4gB,SAAS7G,SCtCrC,MAAMsqE,GAAkD,CACtDn8B,OAAQ,MACRF,IAAK,SACLH,KAAM,QACNC,MAAO,QA2ET,SAASw8B,GACPC,EACAC,OAEID,SA4BKC,EAAe/jF,KAAI2+E,GAAiBA,EAAc1+E,UA5BtC,IAEf6jF,EAAgBvhF,SAAWwhF,EAAexhF,oBAGxCA,EAASuhF,EAAgBvhF,WAC1B,IAAIO,EAAI,EAAGA,EAAIP,EAAQO,IAAK,OACzB0c,EAASskE,EAAgBhhF,GACzBxB,EAAQyiF,EAAejhF,QAEvB0c,KAAale,SAEZ,GAAIke,GAAUle,EAAO,OACpB6gE,EAAe3iD,EAAO86B,gBAAgB,UACtC8nB,EAAc9gE,EAAMg5C,gBAAgB,aAEtC6nB,EAAahiD,UAAYiiD,EAAYjiD,UAAYgiD,EAAapjE,QAAUqjE,EAAYrjE,aAMtF+kF,EAAgBhhF,GAAKkhF,GAAmBxkE,EAAQle,YAQjDwiF,EAGT,SAASE,GAAmBxkE,EAAuBle,OAC5C,MAAMgG,KAAQo8E,GAA2B,OACtCphB,EAA0BnnB,GAC9B37B,EAAO86B,gBAAgBhzC,GACvBhG,EAAMg5C,gBAAgBhzC,GACtBA,EACA,SAGCyY,EAAmBC,YACV1Y,OACD,eACIwY,GAAoBC,EAAIC,OAC5B,kBACI,CACLG,SAAUJ,EAAGI,SACbphB,MAAOmN,EAAgB6T,EAAGhhB,MAAOihB,EAAGjhB,eAGnCm8C,GAA2Cn7B,EAAIC,EAAI1Y,EAAM,WAGpEkY,EAAO+6B,gBAAgBjzC,EAAMg7D,UAExB9iD,EAGT,SAAS8hD,GACPviE,EACAiK,EACAysB,EACA3X,EACA3M,MAEiB,YAAbnI,cACcvD,IAATgwB,SAGTA,EAAOA,GAAQ,GAEPzsB,OACD,iBACA,oBACIjK,KAAWsb,GAAYob,EAAKwE,YAAcxE,EAAKwE,WAAaptB,EAAe4oB,EAAKwE,iBACpF,iBACMxE,EAAKtsB,WAEX,iBAEMssB,EAAK0B,YAAc1B,EAAKwE,eAC9B,WAECl7B,IAAU+6D,GAAiBh8C,EAAO3M,UAC7B,SAINpS,IAAU02B,EAAKzsB,GAMxB,MAAMi7E,GAA6B,IAAIvjF,IAAI,CACzC,OACA,YAEA,SACA,aACA,SACA,YACA,YACA,WACA,gBAGF,SAASwjF,GAAU/yE,EAA+B2M,mBAC5C2X,EAAO3X,EAAM2X,KAAKtkB,SAEhBwtE,EAAgB,IAAIgF,GAEpBx0D,EAAkB4G,GAAmBjY,EAAMqZ,SAAShmB,KAIpD0D,KAACA,EAADqJ,OAAOA,GAAUJ,EAEjBxE,aACJmc,wBAAMnc,oBACN4E,EAAmB,MAAZ/M,EAAkB,QAAU,6BAAnCgzE,EAA6C7qE,oBAC7C4E,EAAOuX,yBAAP2uD,EAAa9qE,S/DiDV,SAAuBnI,SACT,MAAZA,EAAkB,SAAW,O+DjDlCkzE,CAAclzE,GAEV+Q,EAAYpE,EAAMskC,kBAAkBjxC,GAASsd,IAAI,QAEjDwqC,EAAcf,GAAe/mD,EAAS+Q,EAAW5I,EAAQwE,EAAMI,QAE/D24C,OACKpxD,IAATgwB,GAAsBA,EAAOujC,GAAc,UAAW96C,EAAOG,gBAAOoX,sBAAA6uD,EAAMjmE,MAAO46C,GAAaE,eAChGwlB,EAAcx7E,IAAI,UAAW0zD,OAAkBpxD,IAATgwB,GAClCohC,SACK8nB,EAGTlpD,EAAOA,GAAQ,SAETwE,E/DpHD,SACL9K,EACAsG,EACAtkB,EACA2N,EACAm6C,SAEMh/B,EAAaxE,MAAAA,SAAAA,EAAMwE,mBAENx0B,IAAfw0B,SACK5f,GAAY4f,GAAcA,EAAaptB,EAAeotB,GACxD,OAEEk/B,YAAarsD,GAASksD,GAAc,aAAcl6C,EAAa2W,MAAAA,SAAAA,EAAMpX,MAAO46C,eACrExzD,IAAVqH,EACKD,EAAeC,GAIpBqE,IAAY/D,KACZlF,EAAS,CAACwgB,GAASF,IAAU2G,EAAgB/uB,OAC3CouB,GAAWW,IAAoBA,EAAgBrK,gBAE1C,K+D6FMy/D,CAAcp1D,EAAiBsG,EAAMtkB,EAAS+M,EAAOG,MAAO46C,GAEzE0I,EAA6B,CACjCxyC,gBAAAA,EACAsG,KAAAA,EACAtkB,QAAAA,EACA2M,MAAAA,EACAoE,UAAAA,EACA5I,OAAAA,EACA2gB,WAAAA,EACAplB,KAAAA,EACAqJ,OAAAA,OAGG,MAAMlV,KAAY06E,GAA2B,OAC1C3kF,EACJiK,KAAYowD,GAAYA,GAAUpwD,GAAU24D,GAAcllC,GAAezzB,GAAYysB,EAAKzsB,QAAYvD,EAElG++E,OAAqB/+E,IAAV1G,EAEXohB,EAAWmhD,GAAWviE,EAAOiK,EAAUysB,EAAM3X,EAAO3M,MAEtDqzE,GAAYrkE,EACdw+D,EAAcx7E,IAAI6F,EAAUjK,EAAOohB,OAC9B,OACCg5C,YAACA,EAADD,WAA0BA,GAC9Bz8B,GAAezzB,IAA0B,WAAbA,EACxBgwD,GAAchwD,EAAUkV,EAAOG,MAAOoX,EAAKpX,MAAO46C,GAClD,GACAwrB,OAAiCh/E,IAAhB0zD,EAEnBqrB,IAAaC,EAEf9F,EAAcx7E,IAAI6F,EAAUjK,EAAOohB,IAIlB,iBAAf+4C,GAED+qB,GAA2Bv6E,IAAIV,IAAay7E,GAE7CprD,GAAuB8/B,IACvB9+C,GAAY8+C,KAGZwlB,EAAcx7E,IAAI6F,EAAUmwD,GAAa,UAMzCurB,EAAejvD,EAAK0B,UAAY,GAChCwtD,EAAarrD,GAAWj6B,QAAO,CAACI,EAAiBujB,SAChD27D,EAAcrnB,YAAYt0C,UAEtBvjB,QAGHmlF,EAAmB1nB,GAAiBwnB,EAAa1hE,IAAS,GAAIlF,GAE9D/e,EAAiB,WAATikB,EC/SX,SAAgBlF,EAAkB3M,EAA+B0zE,SAChE1tD,SAACA,EAADjZ,OAAWA,GAAUJ,EAErBqR,EACJ4G,GAA2BoB,EAAShmB,KAAa4kB,GAAmBoB,EAAS3kB,GAAyBrB,KAClGskB,EAAO3X,EAAM2X,KAAKtkB,IAAY,IAC9Buf,OAACA,EAADF,WAASA,GAAciF,SAEzBlF,GAAmBC,GACd,CACL5f,KAAMigB,GAAiB,CACrB1B,gBAAAA,EACAhQ,MAAO,cACPuR,OAAAA,EACAF,WAAAA,EACAtS,OAAAA,OAEC2mE,GAIAA,ED0R6B71D,CAAclR,EAAO3M,EAASyzE,GAAoBA,cAEtEn/E,IAAV1G,GAAwBoL,EAAQpL,KAClCU,EAAEujB,GAAQ,CAAC8mB,OAAQ/qC,IAEdU,IACN,WAGE0K,EAAQw6E,IACXhG,EAAcx7E,IAAI,SAAUwhF,IAAclvD,EAAK0B,eAAgC1xB,IAApBgwB,EAAKwE,YAG3D0kD,EEtSF,SAASmG,GAAYC,EAA0B5tD,EAA4BjZ,SAE1ED,EAAoCnF,GAAeisE,GAGnDC,EAAkB1mE,GAAoB,SAAUL,EAASC,MAC/DD,EAAQ3E,OAgEV,SAAgBzE,EAAYsiB,EAA4B6tD,UAC9CnwE,QACD4X,QACAK,QACAC,QACApe,QACA+d,QACAH,gBAKD/kB,EAACA,EAADwC,EAAIA,EAAJgG,GAAOA,EAAPC,GAAWA,GAAMknB,SAEftiB,QACDyX,MACCkC,GAAWhnB,KAAOiR,GAASjR,EAAE0Q,MAASsW,GAAWxkB,IAAMA,EAAE6N,YAAcrQ,EAAEqQ,iBACpE,cAEL2W,GAAWxkB,KAAOyO,GAASzO,EAAEkO,MAASsW,GAAWhnB,IAAMA,EAAEqQ,YAAc7N,EAAE6N,iBACpE,gBAEL5H,GAAMD,EAAI,IAERg1E,SACKA,MAIJh1E,IACEwe,GAAWhnB,IAAMA,EAAEpH,OAASmoB,KAAiBjQ,GAAU9Q,EAAE0Q,MAASyb,GAAiBnsB,UAC/E,iBAKNyI,IACEue,GAAWxkB,IAAMA,EAAE5J,OAASmoB,KAAiBjQ,GAAUtO,EAAEkO,MAASyb,GAAiB3pB,UAC/E,gBAMV2iB,MAGC3c,KAAQwe,GAAWhnB,KAAMiR,GAASjR,EAAE0Q,OAASjI,KAAQue,GAAWxkB,KAAMyO,GAASzO,EAAEkO,kBAKlFmU,MAECpc,SACEue,GAAWxkB,IAAMyO,GAASzO,EAAEkO,KACvB,aAEA,WAEJ,GAAIlI,SACLwe,GAAWhnB,IAAMiR,GAASjR,EAAE0Q,KACvB,WAEA,aAEJ,GAAIrD,IAAS8X,GAAM,IACpBnlB,IAAMwC,QACD,WACF,GAAIA,IAAMxC,QACR,kBAKRglB,QACAI,UAEGq4D,EAAgBzxD,GAA4BhsB,GAC5C09E,EAAgB1xD,GAA4BxpB,MAE9Cg7E,SACKA,EACF,GAAIC,IAAkBC,QACX,SAATrwE,EAAkB,aAAe,WACnC,IAAKowE,GAAiBC,QACX,SAATrwE,EAAkB,WAAa,aACjC,GAAIowE,GAAiBC,EAAe,OACnCvzC,EAAOnqC,EACPoqC,EAAO5nC,EAEPm7E,EAAcxzC,EAAKvxC,OAASqoB,GAC5B28D,EAAcxzC,EAAKxxC,OAASqoB,UAG9B08D,IAAgBC,EACF,SAATvwE,EAAkB,WAAa,cAC5BswE,GAAeC,EACT,SAATvwE,EAAkB,aAAe,YAGrC88B,EAAK95B,WAAa+5B,EAAK/5B,UACV,SAAThD,EAAkB,WAAa,aAC7B88B,EAAK95B,YAAc+5B,EAAK/5B,WACjB,SAAThD,EAAkB,aAEpB,yBAMN,WAhLUyE,CAAO2E,EAAQ7d,KAAM+2B,EAAU6tD,QACxBv/E,IAApBu/E,GAAiCA,IAAoB/mE,EAAQ3E,QAC/DsK,GpJiMM,qBoJjMgC3F,EAAQ3E,4BAAQ0rE,OAGnC,QAAjB/mE,EAAQ7d,MAAkB6d,EAAQ3E,OAAQ,OACtC+rE,EAAkB/mE,GAAoB,kBAAmBL,EAASC,WAChDzY,IAApB4/E,EAA+B,OAC3BC,EACgB,eAAnBrnE,EAAQ3E,QAA2B6d,EAASnnB,IAA2B,aAAnBiO,EAAQ3E,QAAyB6d,EAASlnB,GAC3F,CAAC,gBACDs1E,GAA4BtnE,EAAQ3E,YAErC,MAAMksE,KAAWF,EACpBrnE,EAAQunE,GAAWH,OAGW5/E,IAA5BwY,EAAQonE,wBACHpnE,EAAQonE,sBAOI5/E,IADA6Y,GAAoB,UAAWL,EAASC,KAE/DD,EAAQ5N,QAmBZ,SAAiBwE,EAAYsiB,MACvBjvB,EAAS,CAACukB,GAAOG,GAAME,GAAQC,IAASlY,KAErCwpB,GAAYlH,SACR,UAvBS9mB,CAAQ4N,EAAQ7d,KAAM+2B,gBAKlB1xB,IADA6Y,GAAoB,SAAUL,EAASC,KAE7DD,EAAQ1B,OAMZ,SAAgB0B,EAAmCkZ,EAA4BjZ,MACzEiZ,EAASpmB,MAAQkN,EAAQlN,MAAQuN,GAAoB,OAAQL,EAASC,SACjE,iBAEFD,EAAQ1B,OAVIA,CAAO0B,EAASkZ,EAAUjZ,IAGtCD,EC9DT,SAASw7D,GAAY37D,EAAkB2nE,SAC/BvnE,OAACA,GAAUJ,QAEV,IACFkR,GAAuBlR,EAAO,CAC/BnC,MAAO,SACPC,SAAU,SACV1L,MAAO,UACPzG,KAAM,UACN6P,OAAQ,SACRlK,MAAO,cAEN4f,GAAqB,IAAKlR,EAAO,CAAC+oC,WAAY,WAC9C73B,GAAqB,IAAKlR,EAAO,CAAC+oC,WAAY,WAC9C73B,GAAmB,OAAQlR,MAC3BkR,GAAmB,QAASlR,MAC5B4nE,GAAY5nE,EAAOI,EAAQunE,IAI3B,SAASC,GAAY5nE,EAAkBI,EAAgBunE,UACxDA,EACK,CAAC/0E,MAAO,CAAC3R,MAAO0mF,IAElBz2D,GAAmB,QAASlR,GCSrC,SAASnC,GAAMsC,EAAkBkZ,EAA4BjZ,WAEjDzY,IADA6Y,GAAoB,QAASL,EAASC,SAEvC,SAMX,SAAStC,GAASqC,EAAkBkZ,EAA4BjZ,WAEpDzY,IADA6Y,GAAoB,WAAYL,EAASC,SAE1C,SCTX,SAASynE,GAAY7nE,SACbI,OAACA,EAADD,QAASA,GAAWH,GACpBxE,OAACA,GAAU2E,EAEXkqC,EAA2B,eAAX7uC,EAA0B,QAAU,SACpDgV,EAAQxQ,EAAMskC,kBAA6B,eAAX9oC,EAA0B,IAAM,KAEhEssE,EACJtnE,GAAoB,OAAQL,EAASC,EAAQ,CAACM,UAAW2pC,KAAmBjqC,EAAO1I,KAAKqzC,iBAEjEpjD,IAArBmgF,SACKA,EACF,OACCh8B,EAAat7B,EAAQA,EAAMG,IAAI,cAAWhpB,KAC5CmkD,GAActvC,GAAcsvC,IAAehiD,WAASgiD,EAAWryB,aACvC,EAAlBqyB,EAAWryB,KAAY,SAKP,EAFFsT,GAA0B3sB,EAAO+sB,KAAMkd,GAEhC,GCvCnC,MAAM09B,GAA2C,CAC/CjwE,ICpB+B,CAC/BkwE,OAAQ,MACRrM,YAAc37D,IACL,IACFkR,GAAuBlR,EAAO,CAC/BnC,MAAO,SACPC,SAAU,SACV1L,MAAO,UACPzG,KAAM,SACN6P,OAAQ,SACRlK,MAAO,cAEN4f,GAAqB,IAAKlR,EAAO,CAAC+oC,WAAY,WAC9C73B,GAAqB,IAAKlR,EAAO,CAAC+oC,WAAY,WAG9C73B,GAAoBlR,EAAO,SAAU,UACrCkR,GAAoBlR,EAAO,QAAS,UDI3C9I,KErBgC,CAChC8wE,OAAQ,OACRrM,YAAc37D,IACL,IACFkR,GAAuBlR,EAAO,CAC/BnC,MAAO,SACPC,SAAU,SACV1L,MAAO,UACPoJ,OAAQ,UACR7P,KAAM,SACN2F,MAAO,cAEN4f,GAA4B,IAAKlR,EAAO,CACzC+oC,WAAY,YACZkB,YAAa,YACbxtC,MAAgC,eAAzBuD,EAAMG,QAAQ3E,YAEpB0V,GAA4B,IAAKlR,EAAO,CACzC+oC,WAAY,YACZkB,YAAa,YACbxtC,MAAgC,aAAzBuD,EAAMG,QAAQ3E,YAEpB0V,GAAelR,MFAtB7I,IGtB+B,CAC/B6wE,OAAQ,OACRrM,YAAc37D,IACL,IACFkR,GAAuBlR,EAAO,CAC/BnC,MAAO,SACPC,SAAU,SACV1L,MAAO,UACPoJ,OAAQ,SACR7P,KAAM,SACN2F,MAAO,cAEN4f,GAAoBlR,EAAO,IAAK,UAChCkR,GAAoBlR,EAAO,IAAK,UHUvCzI,OHakC,CAClCywE,OAAQ,SACRrM,YAAc37D,GACL27D,GAAY37D,EAAO,WGf5BnI,SIpBoC,CACpCmwE,OAAQ,QACRrM,YAAc37D,IACL,IACFkR,GAAuBlR,EAAO,CAC/BnC,MAAO,SACPC,SAAU,SACV1L,MAAO,UACPzG,KAAM,SACN6P,OAAQ,SACRlK,MAAO,aAIb22E,sBAAwBjoE,UAChBqZ,SAACA,GAAYrZ,EACbkoE,EAAW7uD,EAASzmB,YAUnB,CARgC,CACrCtQ,KAAM,WACNkiC,WAAYxkB,EAAM2mD,oBAEduhB,GAAYx3D,GAAWw3D,IAAaA,EAAS5lF,OAASuoB,GACtD,CAACxJ,MAAOC,GAAQ4mE,EAAU,CAACzoE,KAAM,WACjC,OJHRrI,MKzBiC,CACjC4wE,OAAQ,QACRrM,YAAc37D,IACL,IACFkR,GAAuBlR,EAAO,CAC/BnC,MAAO,SACPC,SAAU,SACV1L,MAAO,SACPoJ,OAAQ,SACR7P,KAAM,SACN2F,MAAO,cAEN4f,GAAoBlR,EAAO,IAAK,YAChCkR,GAAoBlR,EAAO,IAAK,YAChCkR,GAAYlR,EAAO,ULY1BrI,KM1BgC,CAChCqwE,OAAQ,OACRrM,YAAc37D,IACL,IACFkR,GAAuBlR,EAAO,CAC/BnC,MAAO,SACPC,SAAU,SACV1L,MAAO,UACPzG,KAAM,SACN6P,OAAQ,SACRlK,MAAO,cAEN4f,GAAqB,IAAKlR,EAAO,CAAC+oC,WAAY,WAC9C73B,GAAqB,IAAKlR,EAAO,CAAC+oC,WAAY,WAC9C73B,GAAmB,OAAQlR,EAAO,CACnCU,UAAW,mBAEVwQ,GAAelR,MNUtBxI,MHEiC,CACjCwwE,OAAQ,SACRrM,YAAc37D,GACL27D,GAAY37D,IGJrB3I,KO5BgC,CAChC2wE,OAAQ,OACRrM,YAAc37D,IACL,IACFkR,GAAuBlR,EAAO,CAC/BnC,MAAO,SACPC,SAAU,SACV1L,MAAO,UACPoJ,OAAQ,SACR7P,KAAM,SACN2F,MAAO,cAEN4f,GAAoBlR,EAAO,IAAK,WAChCkR,GAAoBlR,EAAO,IAAK,WPgBvC1I,KQ7BgC,CAChC0wE,OAAQ,OACRrM,YAAc37D,UACNG,QAACA,GAAWH,EACZxE,EAAS2E,EAAQ3E,cAElBwE,EAAMqZ,SAAS3vB,GAAMsW,EAAMqZ,SAASntB,GAAM8T,EAAMqZ,SAASvnB,UAAakO,EAAMqZ,SAASznB,UAKnF,IACFsf,GAAuBlR,EAAO,CAC/BnC,MAAO,SACPC,SAAU,SACV1L,MAAO,UACPoJ,OAAQ,SACR7P,KAAM,SACN2F,MAAO,cAEN4f,GAA4B,IAAKlR,EAAO,CACzC+oC,WAAuB,eAAXvtC,EAA0B,YAAc,MACpDyuC,YAAa,YACbxtC,MAAkB,aAAXjB,OAEN0V,GAA4B,IAAKlR,EAAO,CACzC+oC,WAAuB,aAAXvtC,EAAwB,YAAc,MAClDyuC,YAAa,YACbxtC,MAAkB,eAAXjB,OAEN0V,GAAmB,OAAQlR,EAAO,CACnCU,UAAW,iBAvBN,KRsBXjJ,OHakC,CAClCuwE,OAAQ,SACRrM,YAAc37D,GACL27D,GAAY37D,EAAO,WGf5BlN,KF1BgC,CAChCk1E,OAAQ,OAERrM,YAAc37D,UACNI,OAACA,EAADiZ,SAASA,GAAYrZ,QAEpB,IACFkR,GAAuBlR,EAAO,CAC/BnC,MAAO,UACPC,SAAU,UACV1L,MAAO,UACPzG,KAAM,SACN6P,OAAQ,SACRlK,MAAO,eAEN4f,GAAqB,IAAKlR,EAAO,CAAC+oC,WAAY,WAC9C73B,GAAqB,IAAKlR,EAAO,CAAC+oC,WAAY,WAC9C73B,GAAYlR,MACZkR,GAAmB,OAAQlR,EAAO,CACnCU,UAAW,gBAEVwQ,GAAmB,QAASlR,MAC5BkR,GAAsB,QAASrT,GAAMmC,EAAMG,QAASkZ,EAAUjZ,OAC9D8Q,GAAsB,WAAYpT,GAASkC,EAAMG,QAASkZ,EAAUjZ,OACpE8Q,GAAqB,SAAUlR,EAAO,CAAC+oC,WAAY,UACnD73B,GAAqB,QAASlR,EAAO,CAAC+oC,WAAY,UEEzDrxC,KD3BgC,CAChCswE,OAAQ,OAERrM,YAAc37D,UACNI,OAACA,EAADD,QAASA,GAAWH,EACpBxE,EAAS2E,EAAQ3E,OAEjB6uC,EAA2B,eAAX7uC,EAA0B,QAAU,SACpD2sE,EAAgC,eAAX3sE,EAA0B,SAAW,cAEzD,IACF0V,GAAuBlR,EAAO,CAC/BnC,MAAO,SACPC,SAAU,SACV1L,MAAO,UACPoJ,OAAQ,SACR7P,KAAM,SACN2F,MAAO,cAGN4f,GAAqB,IAAKlR,EAAO,CAAC+oC,WAAY,MAAOroC,UAAW,UAChEwQ,GAAqB,IAAKlR,EAAO,CAAC+oC,WAAY,MAAOroC,UAAW,UAGhEwQ,GAAmB,OAAQlR,EAAO,CACnCqoC,aAAcw/B,GAAY7nE,GAC1BU,UAAW2pC,KAEZ89B,GAAqBxoE,GAAiBa,GAAoB,YAAaL,EAASC,OCArFxI,MMXiC,CACjCowE,OAAQ,QACRrM,YAAc37D,IACL,IACFkR,GAAuBlR,EAAO,CAC/BnC,MAAO,SACPC,SAAU,SACV1L,MAAO,UACPzG,KAAM,UACN6P,OAAQ,SACRlK,MAAO,cAEN4f,GAAqB,IAAKlR,EAAO,CAAC+oC,WAAY,WAC9C73B,GAAqB,IAAKlR,EAAO,CAAC+oC,WAAY,WAC9C73B,GAAmB,OAAQlR,MAC3BkR,GAAelR,ONDjB,SAASooE,GAAgBpoE,MAC1B5V,EAAS,CAACskB,GAAMH,GAAMQ,IAAQ/O,EAAMjJ,MAAO,OACvCkrB,EAAUD,GAAmBhiB,EAAMjJ,KAAMiJ,EAAMqZ,aACjD4I,EAAQx9B,OAAS,SAkBzB,SAAuBub,EAAkBiiB,SAGhC,CACL,CACErzB,KAAMoR,EAAMkhC,QAAQ,aACpB5+C,KAAM,QACNi2C,KAAM,CACJ9kC,MAAO,CACL7E,KAAMy5E,GAAsBroE,EAAMumD,gBAAgBvoB,GAAewoB,MACjEz/D,KAAMiZ,EAAMumD,gBAAgBvoB,GAAewoB,MAC3C9lC,QAASuB,IAGb/Q,OAAQ,CACN8a,OAAQ,CACNhtB,MAAO,CAACqC,MAAO,CAACjC,MAAO,UACvBH,OAAQ,CAACoC,MAAO,CAACjC,MAAO,aAI5Bq/B,MAAO6pC,GAAatoE,EAAO,CAACuoE,WAAYF,OAtCjCG,CAAcxoE,EAAOiiB,QAGzB,GAAIjiB,EAAMjJ,OAASyX,GAAK,OACvBi6D,EAAkBppE,GAAyB7U,MAAKhB,GACpDgX,GAAoBhX,EAAMwW,EAAMG,QAASH,EAAMI,aAE7CJ,EAAM4R,QAAU5R,EAAMyD,SAAS,SAAWglE,SA2ClD,SAAgDzoE,SAEvCjJ,GAAQuxE,GAAatoE,EAAO,CAACuoE,WAAYG,KAG1CC,EAAa3oE,EAAMiR,UAAUjR,EAAM4R,MAAMuiB,cACzCi8B,EAAa,CAAC3vD,EAAsB,KAAOT,EAAMsB,QAAQtB,EAAM4R,MAAMuiB,aAAc1zB,GAEnFmoE,EAAkB,CAACC,EAAqBppE,IAOpC,GAAEopE,KANY,CACpBzY,EAAW,CAAC3iE,OAAQ,MAAOikB,OAAQ,QAASjS,KAAAA,IAC5C2wD,EAAW,CAAC3iE,OAAQ,MAAOikB,OAAQ,QAASjS,KAAAA,IAC5C2wD,EAAW,CAAC3iE,OAAQ,MAAOikB,OAAQ,MAAOjS,KAAAA,IAC1C2wD,EAAW,CAAC3iE,OAAQ,MAAOikB,OAAQ,MAAOjS,KAAAA,KAEZvd,KAAImf,GAAU,UAASsnE,MAAetnE,OAAUzX,KAAK,YAGnFk/E,EACAC,EAG6B,MAA7B/oE,EAAM4R,MAAMuiB,cAGd20C,EAAc,IACTx/E,EAAKyN,EAAKma,OAAO8a,OAAQ,CAAC,IAAK,KAAM,KAAM,YAAa3sB,KAC3D3V,EAAG,CAACgW,OAAQkpE,EAAgB,MAAO,UACnC12E,GAAI,CAACwN,OAAQkpE,EAAgB,MAAO,UACpCnlD,KAAM,CAACxiC,OAAO,IAGhB8nF,EAAmB,CACjBr/E,EAAG,CAAC2X,MAAO,CAACjC,MAAO,KAAMgqC,MAAO,GAChCnqC,OAAQ,CAACoC,MAAO,CAACjC,MAAO,YAI1BrI,EAAKma,OAAO8a,OAAS,IAChBviC,EAAKsN,EAAKma,OAAO8a,OAAQ,CAAC,IAAK,KAAM,OACxC/sB,OAAQ,CAACoC,MAAO,CAACjC,MAAO,cAG1B0pE,EAAc,IACTx/E,EAAKyN,EAAKma,OAAO8a,OAAQ,CAAC,IAAK,KAAM,KAAM,UAC9C9/B,EAAG,CAACwT,OAAQkpE,EAAgB,MAAO,UACnCz2E,GAAI,CAACuN,OAAQkpE,EAAgB,MAAO,UACpCnlD,KAAM,CAACxiC,OAAO,IAEhB8nF,EAAmB,CACjB78E,EAAG,CAACmV,MAAO,CAACjC,MAAO,KAAMgqC,MAAO,GAChCpqC,MAAO,CAACqC,MAAO,CAACjC,MAAO,WAEzBrI,EAAKma,OAAO8a,OAAS,IAChBviC,EAAKsN,EAAKma,OAAO8a,OAAQ,CAAC,IAAK,KAAM,OACxChtB,MAAO,CAACqC,MAAO,CAACjC,MAAO,gBAKtB,MAAMla,KAAOma,GAA0B,OACpCg8C,EAAcn7C,GAAchb,EAAK8a,EAAMG,QAASH,EAAMI,QAExDrJ,EAAKma,OAAO8a,OAAO9mC,IACrB4jF,EAAY5jF,GAAO6R,EAAKma,OAAO8a,OAAO9mC,UAC/B6R,EAAKma,OAAO8a,OAAO9mC,IACjBm2D,IACTytB,EAAY5jF,GAAOya,GAAiB07C,IAGlCA,IACFtkD,EAAKma,OAAO8a,OAAO9mC,GAAO,CAACjE,MAAO,UAIhCy/B,EAAoB,MAEtB1gB,EAAM4R,MAAMkjB,eAAgB,OAExBk0C,EAAehpE,EAAMyD,SAASzD,EAAM4R,MAAMkjB,gBAC1CzzB,EAAQC,GAAQ0nE,GAClB3nE,GACFqf,EAAQ7+B,KAAKwf,IAGX2nE,MAAAA,GAAAA,EAAc5uE,KAAO4uE,MAAAA,GAAAA,EAAchiE,WACrC0Z,EAAQ7+B,KAAKyf,GAAQ0nE,EAAc,CAAC72D,UAAW,SAgBnD22D,EAZyB,CACvB,SACA,cACA,aACA,YACA,aACA,mBACA,mBACA,iBAI6BvnF,QAAO,CAAC2vB,EAAQ1nB,QACzCuN,EAAKma,OAAO8a,OAAOxiC,SACd,IAAI0nB,GAAS1nB,GAAOuN,EAAKma,OAAO8a,OAAOxiC,IACzC,OACC6xD,EAAcn7C,GAAc1W,EAAMwW,EAAMG,QAASH,EAAMI,oBACzCzY,IAAhB0zD,EACK,IAAInqC,GAAS1nB,GAAOmW,GAAiB07C,IAErCnqC,KAGV43D,GAGCA,EAAYx2E,SACdw2E,EAAYG,iBAAmB,CAAChoF,OAAO,GACvC6nF,EAAY1rE,aAAe,CAACnc,MAAO,UAG9B,CACL,CACEqB,KAAM,QACNi2C,KAAM,CACJ9kC,MAAO,CACL1M,KAAMiZ,EAAMumD,gBAAgBvoB,GAAewoB,MAC3C53D,KAAM85E,GAAqB1oE,EAAMumD,gBAAgBvoB,GAAewoB,MAChE9lC,QAAAA,EACA3mB,UAAW,CACTmxB,OAAQ,CACNklC,EAAW,CAAC1+C,OAAQ,UACpB0+C,EAAW,CAAC1+C,OAAQ,UACpB0+C,EAAW,CAAC1+C,OAAQ,QACpB0+C,EAAW,CAAC1+C,OAAQ,SAEtB23C,IAAK,CAAC,MAAO,MAAO,MAAO,UAIjCn4C,OAAQ,CACN8a,OAAQ88C,GAEVrqC,MAAO,CACL,CACEn8C,KAAM,QACN4uB,OAAQ,CAAC8a,OAAQ+8C,GACjBtqC,MAAO,CAAC1nC,OA7LLmyE,CAAuClpE,UAI3CsoE,GAAatoE,GAGtB,MAAMqoE,GAAsB,gBA4B5B,MAAMK,GAAqB,eA0N3B,SAASJ,GAAatoE,EAAkBS,EAA4B,CAAC8nE,WAAY,WACzExxE,KAACA,EAADoJ,QAAOA,EAAPkZ,SAAgBA,EAAhBjZ,OAA0BA,GAAUJ,EAEpCyjB,EAAOr1B,EAAgB+R,EAAQsjB,KAuCvC,SAAmBzjB,SACX+zB,EAAS/zB,EAAMskC,kBAAkB,KACjCrQ,EAASj0B,EAAMskC,kBAAkB,cAC/BvQ,GAAUA,EAAOpjB,IAAI,oBAAwBsjB,GAAUA,EAAOtjB,IAAI,0BAA6BhpB,EA1C5DwhF,CAAUnpE,GAiDvD,SAAwBA,SAChBwkB,EAAaxkB,EAAMwgC,UAAUhc,oBAC5BA,GAAeA,EAAW4iC,aAAez/D,EAnDayhF,CAAeppE,IACtEO,EAAQF,GAAUF,GAClBjb,EAAMm0B,EAASn0B,IACfgD,EA/DD,SAAiB8X,SAChBqZ,SAACA,EAADzH,MAAWA,EAAX7a,KAAkBA,EAAlBoJ,QAAwBA,EAAxBC,OAAiCA,GAAUJ,EAC3CnN,EAAQwmB,EAASxmB,YAEnBjR,UAAQiR,IAAUwf,GAAWxf,IAAU1I,EAAc0I,EAAM5R,SAC3D4R,GAAS1I,EAAcqW,GAAoB,QAASL,EAASC,MAG1D,IAAKxe,UAAQiR,IAAU6d,GAAW7d,MAAY+e,SAE5C3Q,GAAWpO,EAAO,CAAC4M,KAAM,UAC3B,GAAI0P,GAAWpY,GAAf,OAECu9B,EAAsC,eAAnBn0B,EAAQ3E,OAA0B,IAAM,IAC3DyvD,EAAsB5xC,EAASib,MACjC5jB,GAAWu6C,GAAsB,OAC7BjgE,EAAIigE,EAAoB/iE,QAE1BtG,UAAQoJ,SACH,CACLqW,MAAOC,GAAQ2pD,EAAqB,CAACx9D,OAAQ6mC,EAAkB5iB,OAAQ,aAAcjS,KAAM,WAExF,GAAIgV,GAAYzpB,SACd,CACLqW,MAAOC,GACL,CAGEvH,UAAWwmB,GAAYvgB,EAAMqZ,UAAYruB,EAAE3C,QAAKV,EAChD0Z,MAAOrW,EAAEqW,OAEX,CAAC5B,KAAM,WAGN,GAAI+U,GAAiBxpB,SAEnB,CACLqW,MAAOC,GAFctB,EAAMyD,SAASzY,EAAEquB,UAEP,CAAC5Z,KAAM,UACtC5M,MAAO7H,EAAE6H,OAEN,GAAU,OAAN7H,qBAGF,CACLqW,MAAOC,GAAQ2pD,EAAqB,CAElC94C,oBAAWnS,EAAM4R,sBAAOM,OAAS,WAAQvqB,EACzC8X,KAAM,cAgBHu+C,CAAQh+C,GACfgtC,EAqDR,SAAyBhtC,OAClBA,EAAMwgC,UAAU7R,UAAW,OAAO,WACjC06C,EAAYphF,EAAK+X,EAAMwgC,UAAU7R,WAAWlqC,WAC9C6kF,EAAcD,EACdvmF,EAASkd,EAAMld,YACZA,GAA0B,IAAhBwmF,GACfA,EAAcrhF,EAAKnF,EAAO09C,UAAU7R,WAAWlqC,OAC/C3B,EAASA,EAAOA,cAEXwmF,EACH,CACEt8B,YAAaq8B,EAAY,KAAOrpE,EAAMqZ,SAASrmB,SAEjD,KAlEgBu2E,CAAgBvpE,GAC9BnD,EAAO2D,GAAoB,OAAQL,EAASC,GAE5C6nE,EAAwBF,GAAahxE,GAAMkxE,sBAC7CF,GAAahxE,GAAMkxE,sBAAsBjoE,GACzC,WAEG,CACL,CACEpR,KAAMoR,EAAMkhC,QAAQ,SACpB5+C,KAAMylF,GAAahxE,GAAMixE,UACrBvkD,EAAO,CAACA,MAAM,GAAQ,MACtBljB,EAAQ,CAACA,MAAAA,GAAS,MAClBrb,EAAM,CAACA,IAAKA,EAAImc,OAAS,MACzBnZ,EAAO,CAACA,KAAAA,GAAQ,MAChB8kD,GAA4B,OACnB,IAATnwC,EAAiB,CAACA,KAAAA,GAAQ,GAC9B07B,KAAM,CAACxxC,KAAM0Z,EAAI8nE,WAAavoE,EAAMumD,gBAAgBvoB,GAAewoB,OACnEt1C,OAAQ,CACN8a,OAAQ+7C,GAAahxE,GAAM4kE,YAAY37D,OAErCioE,EACA,CACEnjD,UAAWmjD,GAEb,KSjRH,MAAMuB,WAAkBpM,GAiB7Bl0E,YACEqZ,EACAzf,EACAm3E,EACAwP,EAAoC,GACpCrpE,SAEMmC,EAAM,OAAQzf,EAAQm3E,EAAiB75D,OAAQzY,EAAW6kC,GAAcjqB,GAAQA,EAAK4qB,UAAOxlC,kFApBtD,oDAID,+BAEK,kCAEY,wBAEZ,uBACvB,UAWnBwY,EAAUmP,GAAU/M,EAAKxL,MAAQ,IAAIwL,EAAKxL,MAAQ,CAACzU,KAAMigB,EAAKxL,MAC9DA,EAAOoJ,EAAQ7d,UAGEqF,IAAnBwY,EAAQsP,SACVtP,EAAQsP,ObPP,SAAuBtP,EAAkBC,GAA2B2jE,UAACA,OACtEA,SACK,QAEH2F,EAAexpE,GAAc,SAAUC,EAASC,GAChDrJ,EAAOoJ,EAAQ7d,YACd8L,EAAgBs7E,EAAc3yE,IAAS4X,IAAS5X,IAAS2X,IAAQ3X,IAAS8X,IaC5D86D,CAAcxpE,EAASC,EAAQ,CAC9C2jE,UAAWxhE,EAAKxb,MAAQg3C,GAAqBx7B,EAAKxb,eAIhDsyB,EAAY53B,KAAK43B,SAAWgI,GAAa9e,EAAK8W,UAAY,GAAItiB,EAAMoJ,EAAQsP,OAAQrP,QACrFD,QAAU6mE,GAAY7mE,EAASkZ,EAAUjZ,QAEzCzU,KCjGF,UAAwB0tB,SAACA,EAAD1tB,KAAWA,QACnC,MAAM0H,KAAWsC,GAAyB,OACvCK,EAAWrB,GAAetB,GAC5Bk5B,GAAO5gC,EAAKqK,KACV0f,GAA4B2D,EAAShmB,aAChC1H,EAAKqK,GACZ8P,GAASA,GAAwB9P,YAKhCrK,EDsFOi+E,CAAe,CACzBvwD,SAAUA,EACV1tB,KAAM6gC,GAAcjqB,GAChB,IACKknE,KACClnE,EAAKvD,MAAQ,CAACA,MAAOuD,EAAKvD,OAAS,MACnCuD,EAAKtD,OAAS,CAACA,OAAQsD,EAAKtD,QAAU,IAE5CwqE,SAID73D,MAAQA,GAAM7a,EAAMsiB,QACpBk6C,gBAAkB9xE,KAAKooF,WAAW9yE,EAAMsiB,QAExCywD,cAAgBroF,KAAKsoF,SAAS1wD,QAC9B2wD,iBAAmBvoF,KAAKwoF,YAAY5wD,QACpC8sC,oBAAsB5jD,EAAKiiB,gBAG3BmK,WAAapsB,EAAKmG,QAAU,IAAIZ,QAAOxN,GAAKqxB,GAAqBrxB,+BAIhE+e,SAACA,GAAY53B,KACbyoF,EAAiBzoF,KAAKsV,OAASmY,GAC/Bi7D,EAAiB9wD,GAAYrnB,GAAqBxH,MAAK6I,GAAWye,GAAkBuH,EAAShmB,aAC5F62E,GAAkBC,EAOpBjhB,YAAY71D,SACXmd,EAAQ/uB,KAAK8xE,gBAAgBlgE,UAC5Bmd,EAAQA,EAAM7T,YAAShV,EAGzBgwB,KAAKtkB,UACH5R,KAAKqoF,cAAcz2E,GAGrBukB,OAAOvkB,UACL5R,KAAKuoF,iBAAiB32E,GAGvBw2E,WAAW9yE,EAAYsiB,UACtBziB,GAAerV,QAAO,CAACojD,EAAQtxC,WAC9Bge,EAAkB4G,GAAmBoB,EAAShmB,WAGhDge,IACFszB,EAAOtxC,GAAW5R,KAAK2oF,UAAU/4D,EAAgBb,OAAS,KAErDm0B,IACN,IAGGylC,UAAU55D,SACV7T,OAACA,EAADF,MAASA,GAAS+T,EAElB65D,EAAgBrvE,GAAewV,UACjC5uB,UAAQ+a,KACV0tE,EAAc1tE,OAASA,EAAOza,IAAIgZ,KAEhCtZ,UAAQ6a,KACV4tE,EAAc5tE,MAAQA,EAAMva,IAAIgZ,KAE3BmvE,EAGDN,SAAS1wD,UACR1jB,GAAwBpU,QAAO,CAAC+oF,EAAOj3E,WAItCkd,EAAa8I,EAAShmB,MAE1Bye,GAAkBvB,IACjBld,IAAY/D,IAAKwiB,GAAkBuH,EAASnnB,KAC5CmB,IAAY9D,IAAKuiB,GAAkBuH,EAASlnB,IAC7C,OACMo4E,EAAWz4D,GAAkBvB,GAAcA,EAAWoH,UAAOhwB,EAEnE2iF,EAAMj3E,GAAWk3E,EACb9oF,KAAK+oF,SAAS,IAAID,IAClBA,SAECD,IACN,IAGGE,SAAS7yD,SACTpuB,EAAQtB,EAAK0vB,GACb8yD,EAAe,OAChB,MAAMjhF,KAAQD,EAAO,OAClBkC,EAAMksB,EAAKnuB,GACjBihF,EAAajhF,GAAe+xB,GAAiD9vB,GACzE6T,GAAmC7T,GACnCyP,GAAiBzP,UAEhBg/E,EAGDR,YAAY5wD,UACX3iB,GAA2BnV,QAAO,CAACmpF,EAASr3E,WAC3Cge,EAAkB4G,GAAmBoB,EAAShmB,OAEhDge,GxKuMH,SAAuBhe,UACpBA,QACDnD,QACAC,QACAC,QACAE,QACAD,QACAG,QACAG,QACAC,UACI,OACJH,QACAC,QACAH,UACI,GwKrNgBo6E,CAAct3E,GAAU,OACvCukB,EAASvG,EAAgBuG,OAC/B8yD,EAAQr3E,GAAWukB,EACf5c,GAAe4c,GACfA,SAGC8yD,IACN,IAGEzP,iBACAz6B,UAAUz5C,KAAOk0E,GAAUx5E,MAG3Bq5E,mBrBrIF,SAA6B96D,SAC5BrU,KAACA,EAAD60C,UAAOA,GAAaxgC,MACrB,MAAM3M,KAAWsC,GAAyB,OACvCK,EAAWrB,GAAetB,MAE5B1H,EAAKqK,GAAW,OACZ40E,EAAgBj/E,EAAKqK,GAC3BwqC,EAAUme,WAAWt5D,IAAI2Q,EAAUu2B,GAAOq+C,GAAiB,OAASA,GAAe,OAC9E,OACC/C,EAAcxG,GAAgBrhE,EAAOhK,GAC3CwqC,EAAUme,WAAWt5D,IAAI2Q,EAAU6xE,GAAa,KqB4HlDgD,CAAoBppF,MAGfu5E,uBACAx6B,UAAU7R,UlF3NZ,SAA4B3uB,EAAkB8qE,SAC7CC,EAAuG,GACvGC,EAAkBhrE,EAAMI,OAAOuuB,cAEhCm8C,IAAYA,EAAQrmF,OAAQ,OAAOsmF,MAEnC,MAAMt0D,KAAOq0D,EAAS,OACnBl8E,EAAOpC,EAAQiqB,EAAI7nB,MACnButC,EAAS1lB,EAAI2lB,OACb95C,EAAO0H,WAASmyC,GAAUA,EAASA,EAAO75C,KAC1C2oF,EAAgCrwE,WAASuhC,GAAU9yC,EAAU8yC,GAAU,CAAC75C,KAAAA,GAMxE6hD,EAAM6mC,EAAgB1oF,OACvB,MAAM4C,KAAOi/C,EAEJ,WAARj/C,GAA4B,cAARA,IAIZ,SAARA,IACF+lF,EAAS/lF,GAAO,IAAIi/C,EAAIj/C,MAAS+lF,EAAS/lF,UAGtByC,IAAlBsjF,EAAS/lF,KAAwC,IAAlB+lF,EAAS/lF,KAC1C+lF,EAAS/lF,GAAOi/C,EAAIj/C,IAAQ+lF,EAAS/lF,WAInCq7C,EAAoCwqC,EAASn8E,GAAQ,IACtDq8E,EACHr8E,KAAAA,EACAtM,KAAAA,EACAypC,KAAMtV,EAAIx1B,MACVwqC,KAAMhV,EAAIgV,KACVqV,OAAQ92C,WAASihF,EAAShgD,IAAM2T,GAAcqsC,EAAShgD,GAAI,SAAW5gC,QAAMhB,EAAU4hF,EAAShgD,UAG5F,MAAMtkC,KAAKg6C,GACVh6C,EAAEi6C,QAAQL,IAAY55C,EAAEkzB,OAC1BlzB,EAAEkzB,MAAM7Z,EAAOugC,EAAS9pB,UAKvBs0D,EkF2KsBG,CAAmBzpF,KAAMA,KAAKktC,WAGpDysC,sBACA56B,UAAUzpC,KAAOqxE,GAAgB3mF,MAGjCy5E,sBf9NF,IAAuBl7D,Oe+NrBwgC,UAAU+K,Mf/NWvrC,Ee+NUve,Kf9N/BkU,GAAwBpU,QAAO,CAACo2B,EAAMtkB,KACvC2M,EAAMwgC,UAAUmE,OAAOtxC,KACzBskB,EAAKtkB,GAAW,CAAC+yE,GAAU/yE,EAAS2M,KAE/B2X,IACN,Ke4NIkqD,iCAAiC/1C,UlHtKnC,SAAiC9rB,EAAkB8rB,OACpDq/C,GAAgB,MACf,MAAM5qC,KAAWj0C,EAAK0T,EAAMwgC,UAAU7R,WAAa,IAAK,OACrD//B,EAAO2xC,EAAQ3xC,KACf03C,EAAQ54C,cAAYkB,EAAOmyC,OAEZ,IADPjV,EAAQhkB,QAAO9c,GAAKA,EAAE4D,OAASA,IACnCnK,OAAc,OAChBf,EAA8B,WAApB68C,EAAQ78C,QAAuB,QAAU68C,EAAQ78C,QAC3D0nF,EAA2B,UAAjB7qC,EAAQj+C,KAAmB,gBAAkB,IAC7DwpC,EAAQjqC,KAAK,CACX+M,KAAM2xC,EAAQ3xC,KACdo9B,OAAS,GAAE+Y,MAAwBuB,MAAU54C,cAAYhK,KAAW0nF,MAGxED,GAAgB,MAEX,MAAMxkF,KAAKg6C,GACVh6C,EAAEi6C,QAAQL,IAAY55C,EAAEi+C,kBAC1B9Y,EAAUnlC,EAAEi+C,gBAAgB5kC,EAAOugC,EAASzU,IAK9Cq/C,GAEqB,IADPr/C,EAAQhkB,QAAO9c,GAAgB,SAAXA,EAAE4D,OAC1BnK,QACVqnC,EAAQzE,QAAQ,CACdz4B,KAAM,OACN3N,MAAO,GACPgqC,GAAI,CAAC,CAAC6V,OAAQ,YAAa9U,OAAQ,+CAKlCgV,GAAoBlV,GkHqIlBu/C,CAAwB5pF,KAAMqqC,GAGhCywC,wBACE,IAAI5iB,GAAoBl4D,SAAU6+C,GAA6B7+C,KAAM,KAGvEqgF,sBAAsB/6E,UlHzIxB,SAAmCiZ,EAAkBjZ,SACpDukF,EAAW,IAAIvkF,OAChB,MAAMw5C,KAAWj0C,EAAK0T,EAAMwgC,UAAU7R,WAAa,IAAK,OACrD5C,EAAe,CAACn9B,KAAM2xC,EAAQ3xC,KAAOmyC,OACvCR,EAAQxU,KAAM,OACVb,EAASqV,EAAQsD,QAAQH,MAAMxhD,KAAI4hD,UACjChY,QAACA,KAAY7vB,GAAQ6nC,SACpB7nC,KAGT8vB,EAAK1gC,OAASk1C,EAAQxU,KAAK7pC,KAAI8C,KAC7BiiB,KAAMxC,GAASzE,EAAO,CAAC2iB,QAAQ,IAC/BuI,OAAAA,EACA7/B,OAAQ20C,GAAah7C,GAAG,OAGXsmF,EAASxjE,QAAOrC,GAAKA,EAAE7W,OAAS2xC,EAAQ3xC,KAAOmyC,KAClDt8C,QACZ6mF,EAASzpF,KAAKkqC,UAIXu/C,EkHoHEC,CAA0B9pF,KAAMsF,GAGlC60E,wBACE,KAGFnd,+BACEA,GAAsBh9D,MAGxB+6E,oBACD/9B,EAAQh9C,KAAK++C,UAAUzpC,MAAQ,UAK9BtV,KAAKqB,QAAWkiD,GAAavjD,KAAKqB,UACrC27C,EAAQ0C,GAA2B1/C,KAAMg9C,IAGpCA,EAAMv8C,IAAIT,KAAK+pF,kBAEjBpJ,2BACC7hE,MAACA,GAAS9e,KAAK0rC,MAAQ,eACfxlC,IAAV4Y,EACKA,EAEL9e,KAAK43B,SAAS3vB,GAAKjI,KAAK43B,SAASntB,EAC5B,cAMDoxE,oBACD77E,KAAK43B,2BAIL53B,KAAK0e,QAAQ7d,KAGfg+B,gBAAgBjtB,UACdo4E,GAA2BhqF,KAAK43B,SAAUhmB,GAG5CoQ,SAASpQ,UAEP2kB,GADYv2B,KAAK43B,SAAShmB,IAI5B4oD,cAAc5oD,SACboQ,EAAWhiB,KAAKgiB,SAASpQ,UAC3B0e,GAAgBtO,GACXA,EAEF,MEpSJ,MAAMioE,WAAmB1R,GAK9B9wE,YACEqZ,EACAzf,EACAm3E,EACAwP,EACArpE,SAEMmC,EAAM,QAASzf,EAAQm3E,EAAiB75D,EAAQmC,EAAK7e,QAAS6e,EAAK4qB,uCAEnEwxB,EAAa,IACd8qB,KACClnE,EAAKvD,MAAQ,CAACA,MAAOuD,EAAKvD,OAAS,MACnCuD,EAAKtD,OAAS,CAACA,OAAQsD,EAAKtD,QAAU,SAGvCgkC,SAAW1gC,EAAKgkB,MAAMrkC,KAAI,CAACqkC,EAAOvhC,QACjC0tC,GAAYnM,UACP,IAAImlD,GAAWnlD,EAAO9kC,KAAMA,KAAKy/C,QAAS,SAAQl8C,KAAM25D,EAAYv+C,GACtE,GAAI8f,GAAWqG,UACb,IAAIijD,GAAUjjD,EAAO9kC,KAAMA,KAAKy/C,QAAS,SAAQl8C,KAAM25D,EAAYv+C,SAGtE,IAAIzb,MAAMmhB,GAAwBygB,OAIrC00C,iBACAz6B,UAAUz5C,KAAOk0E,GAAUx5E,UAC3B,MAAM+B,KAAS/B,KAAKwhD,SACvBz/C,EAAMy3E,YAIHH,kBvB3CF,IAA8B96D,EACnC+gE,GADmC/gE,EuB4CZve,MvBzCvBu/E,GAAiChhE,EAAO,SACxCghE,GAAiChhE,EAAO,UuB2CjCg7D,uBAIAx6B,UAAU7R,UAAY,OACtB,MAAMnrC,KAAS/B,KAAKwhD,SAAU,CACjCz/C,EAAMw3E,sBACD,MAAM91E,KAAO+C,EAAKzE,EAAMg9C,UAAU7R,gBAChC6R,UAAU7R,UAAUzpC,GAAO1B,EAAMg9C,UAAU7R,UAAUzpC,IAKzDk2E,qBACA,MAAM53E,KAAS/B,KAAKwhD,SACvBz/C,EAAM43E,iBAIHF,uBjB7CF,SAAwBl7D,SACvBurC,KAACA,EAAD7nD,QAAOA,GAAWsc,EAAMwgC,UACxBmrC,EAAwC,CAACliC,IAAK,EAAGE,OAAQ,EAAGJ,MAAO,EAAGD,KAAM,OAE7E,MAAM9lD,KAASwc,EAAMijC,SAAU,CAClCz/C,EAAM03E,0BAED,MAAM7nE,KAAWpL,EAAKzE,EAAMg9C,UAAU+K,MACzC7nD,EAAQi0B,KAAKtkB,GAAWmsD,GAAkBx/C,EAAMwgC,UAAU98C,QAAS2P,GACrC,WAA1B3P,EAAQi0B,KAAKtkB,KAIfk4C,EAAKl4C,GAAW0yE,GAAoBx6B,EAAKl4C,GAAU7P,EAAMg9C,UAAU+K,KAAKl4C,IAEnEk4C,EAAKl4C,KAGR3P,EAAQi0B,KAAKtkB,GAAW,qBACjBk4C,EAAKl4C,SAOf,MAAMA,KAAWsC,GAAyB,KACxC,MAAMnS,KAASwc,EAAMijC,YACnBz/C,EAAMg9C,UAAU+K,KAAKl4C,OAKI,gBAA1B3P,EAAQi0B,KAAKtkB,GAA4B,CAE3Ck4C,EAAKl4C,IAAYk4C,EAAKl4C,IAAY,IAAIiN,OAAO9c,EAAMg9C,UAAU+K,KAAKl4C,QAG7D,MAAMwtE,KAAiBr9E,EAAMg9C,UAAU+K,KAAKl4C,GAAU,OAClDpS,MAAOua,EAAR6G,SAAgBA,GAAYw+D,EAAcrkC,gBAAgB,cAC5DjgC,GAAYf,OAIZmwE,EAAUnwE,GAAU,IAAM6G,EAAU,OAEhCupE,EAAiB9F,GAAgBtqE,GACnCmwE,EAAUnwE,GAAUmwE,EAAUC,IAChC/K,EAAcx7E,IAAI,SAAUumF,GAAgB,GAGhDD,EAAUnwE,cAOPhY,EAAMg9C,UAAU+K,KAAKl4C,MAIA,gBAA1B3P,EAAQi0B,KAAKtkB,IAA8Bk4C,EAAKl4C,IAAYk4C,EAAKl4C,GAAS5O,OAAS,MAChF,MAAMq0D,KAAYvN,EAAKl4C,GACpBylD,EAASnoC,IAAI,UAAYmoC,EAASz2C,SAASqZ,OAC/Co9B,EAASxc,SAAS5gB,MAAO,IiBnB/BmwD,CAAepqF,MAGVogF,iCAAiC/1C,UAC/BrqC,KAAKwhD,SAAS1hD,QAAO,CAAC0iD,EAAIzgD,IAAUA,EAAMq+E,iCAAiC59B,IAAKnY,GAIlFywC,yBACE96E,KAAKwhD,SAAS1hD,QAAO,CAACuqC,EAAStoC,IAC7BsoC,EAAQxrB,OAAO9c,EAAM+4E,oBAC3B5iB,GAAoBl4D,OAGlBg9D,+BACEh9D,KAAKwhD,SAAS1hD,QAAO,CAACuqC,EAAStoC,IAC7BsoC,EAAQxrB,OAAO9c,EAAMi7D,0BAC3BA,GAAsBh9D,OAGpBqgF,sBAAsB/6E,UACpBtF,KAAKwhD,SAAS1hD,QAAO,CAACmkF,EAAIliF,IAAUA,EAAMs+E,sBAAsB4D,IAAK3+E,GAGvEq7E,2BACC0J,EAAe,IAAIlpF,QACpB,MAAMY,KAAS/B,KAAKwhD,aAClB,MAAM1iC,KAASlW,QAAM7G,EAAM4+E,sBAC9B0J,EAAavmF,IAAIgb,SAGfQ,EAASpgB,MAAM43C,KAAKuzC,UACnB/qE,EAAOtc,OAAS,EAAIsc,EAA2B,IAAlBA,EAAOtc,OAAesc,EAAO,QAAKpZ,EAGjE+xD,oBACDtiC,EAAQiiB,MAAMqgB,mBACdtiC,SACKA,MAGJ,MAAM5zB,KAAS/B,KAAKwhD,YACvB7rB,EAAQ5zB,EAAMk2D,gBACVtiC,SACKA,EAMNwkD,wBACE,KAGFY,uBpHkBF,SAAqCx8D,EAAmBy+B,OACxD,MAAMj7C,KAASwc,EAAMijC,SACpBkgB,GAAY3/D,KACdi7C,EAAQ0C,GAA2B39C,EAAOi7C,WAIvCA,EoHxBEstC,CACLtqF,KACAA,KAAKwhD,SAAShhD,SAAQuB,GACbA,EAAMg5E,mBAKZxX,yBACEvjE,KAAKwhD,SAAS1hD,QAAO,CAAC0tD,EAASzrD,IAC7ByrD,EAAQ3uC,OAAO9c,EAAMwhE,oBAC3BA,GAAgBvjE,QCvIhB,SAAS+/E,GACdj/D,EACAzf,EACAm3E,EACA+R,EACA5rE,MAEIyU,GAAYtS,UACP,IAAIg/D,GAAWh/D,EAAMzf,EAAQm3E,EAAiB75D,GAChD,GAAIsyB,GAAYnwB,UACd,IAAImpE,GAAWnpE,EAAMzf,EAAQm3E,EAAiB+R,EAAU5rE,GAC1D,GAAI8f,GAAW3d,UACb,IAAIinE,GAAUjnE,EAAMzf,EAAQm3E,EAAiB+R,EAAU5rE,GACzD,GzI0CF,SAAyBmC,UACvB2pB,GAAc3pB,IAAS4pB,GAAc5pB,IAAS0pB,GAAa1pB,GyI3CvD0pE,CAAgB1pE,UAClB,IAAI4iE,GAAY5iE,EAAMzf,EAAQm3E,EAAiB75D,SAElD,IAAIzb,MAAMmhB,GAAwBvD,UCzB7B2pE,GAAUC,wDCsEhB,SAAiBC,EAAyB3rE,EAAsB,IrKNhE,IAAa4rE,EqKQd5rE,EAAIoE,SrKRUwnE,EqKUR5rE,EAAIoE,OrKTdE,GAAUsnE,GqKYN5rE,EAAIkW,YAEN21D,GAA6B7rE,EAAIkW,sBAK3BvW,EAAS4wB,GAAWI,cAAY3wB,EAAIL,OAAQgsE,EAAUhsE,SAMtDmC,EAAOoD,GAAUymE,EAAWhsE,GAM5BJ,EAAewhE,GAAWj/D,EAAM,KAAM,QAAI5a,EAAWyY,GAc3DJ,EAAM6Z,QnD7BH,SAA0B9yB,EAAqBiZ,GAEpDwxD,GAAWzqE,EAAK++D,aAEZymB,EAAmB,EACnBC,EAAoB,MAEnB,IAAIxnF,EAAI,EAAGA,EAhFmB,GAiF5B4sE,GAA2B7qE,EAAMiZ,GAAO,GADJhb,IAIzCunF,IAIFxlF,EAAK++D,QAAQ5jE,IAAI+uE,QAEZ,IAAIjsE,EAAI,EAAGA,EA1FmB,GA2F5B4sE,GAA2B7qE,EAAMiZ,GAAO,GADJhb,IAIzCwnF,IAIFhb,GAAWzqE,EAAK++D,SAlGmB,IAoG/B1D,KAAK3pD,IAAI8zE,EAAkBC,IAC7B1mE,GAAU,yCmDMV2mE,CAAiBzsE,EAAMwgC,UAAUz5C,KAAMiZ,SAYhC,CACLuC,KAkEN,SACEvC,EACA0sE,EACAC,EAAqB,GACrBC,SAGMC,EAAW7sE,EAAMI,OAAS+xB,GAAuBnyB,EAAMI,aAAUzY,EAEjEZ,EAAO,GAAGuZ,OACdN,EAAM8hE,sBAAsB,I5BWzB,SAA0BjQ,EAA8B8a,SACvD5lF,EAAiB,GAKjBu5E,EAAWF,GAAar5E,OAE1B+lF,EAAc,MAEb,MAAMhK,KAAQjR,EAAc/L,QAAS,CAEnCgd,EAAK1W,YACR0W,EAAKG,SAAY,UAAS6J,WAGtBC,EAAkBjK,EAAK1/B,WAE7Bk9B,EAASwC,EAAMiK,OAIZ,MAAMtnE,KAAK1e,EACa,IAAvB0e,EAAEqf,UAAUrgC,eACPghB,EAAEqf,cAKTkoD,EAAU,MACT,MAAOhoF,EAAGygB,KAAM1e,EAAK4D,UACW,KAA9B8a,EAAEqf,WAAa,IAAIrgC,QAAiBghB,EAAExhB,QACzC8C,EAAKoB,OAAO6kF,IAAW,EAAGjmF,EAAKoB,OAAOnD,EAAG,GAAG,QAK3C,MAAMygB,KAAK1e,MACT,MAAM5F,KAAKskB,EAAEqf,WAAa,GACd,WAAX3jC,EAAEmB,OACJnB,EAAEo3C,KAAOs5B,EAAcN,YAAYpwE,EAAEo3C,MAAMkK,iBAM5C,MAAMh9B,KAAK1e,EACV0e,EAAE7W,QAAQ+9E,IACZlnE,EAAEpa,OAASshF,EAASlnE,EAAE7W,cAInB7H,E4B7DLkmF,CAAiBjtE,EAAMwgC,UAAUz5C,KAAM4lF,IAGnCjnB,EAAc1lD,EAAMylD,sBACpBruC,EAAQpX,EAAM05C,gBACdn5C,EAAQP,EAAMoiE,qBACdzG,EAAc37D,EAAMy7D,0BAAyB,OAE/CgK,EAAgBzlE,EAAMy+C,wBAG1BgnB,EAAgBA,EAAc39D,QAAOpI,GACd,UAAhBA,EAAO9Q,MAAoC,WAAhB8Q,EAAO9Q,WAAuCjH,IAAjB+X,EAAOze,QAClEyrF,EAAmBhtE,EAAO9Q,OAAS8Q,EAAOze,OACnC,WAKLynB,OAACA,KAAWwkE,GAAsBR,QAEjC,CACLS,QAAS,gDACLntE,EAAM7M,YAAc,CAACA,YAAa6M,EAAM7M,aAAe,MACxD+5E,KACC91D,EAAQ,CAACA,MAAAA,GAAS,MAClB7W,EAAQ,CAACA,MAAAA,GAAS,MAClBo7D,EAAc,CAACzqD,OAAQ,CAAC8a,OAAQ2vC,IAAgB,GACpD50E,KAAAA,KACI2+D,EAAYjhE,OAAS,EAAI,CAACihE,YAAaA,GAAe,MACvD1lD,EAAMs8D,cAAc,IAClBmJ,KACAzlE,EAAM6hE,iCAAiC,OACvCh2C,GAAyBnjB,QAE1BmkE,EAAW,CAACzsE,OAAQysE,GAAY,MAChCD,EAAW,CAACA,SAAAA,GAAY,IA1HbQ,CACbptE,EAsBN,SACEosE,EACAtyC,EACA15B,EACAJ,SAEMhB,EAAQgB,EAAMwgC,UAAUme,WAAWhuC,IAAI,SACvC1R,EAASe,EAAMwgC,UAAUme,WAAWhuC,IAAI,eAC7BhpB,IAAbmyC,GACFA,EAAW,CAACx3C,KAAM,OACd0d,EAAMi9D,2BACRnjC,EAASuzC,QAAS,IAEXrjF,WAAS8vC,KAClBA,EAAW,CAACx3C,KAAMw3C,OAEhB96B,GAASC,I1IjFWquE,E0IiFSxzC,EAASx3C,K1IhFlB,QAAjBgrF,GAA2C,UAAjBA,GAA6C,UAAjBA,M0IiF7C,SAAVtuE,GAA+B,SAAXC,EACtB6G,GAASA,MACTg0B,EAASx3C,KAAO,WACX,GAAc,SAAV0c,GAA+B,SAAXC,EAAmB,OAI1CjJ,EAAqB,SAAVgJ,EAAmB,QAAU,SAE9C8G,GAASA,GAAwB/P,GAAwBC,WAGnDu3E,EAA+B,UAAbv3E,EAAuB,SAAW,QAC1D8jC,EAASx3C,K1I3FR,SAAoB0T,UAClBA,EAAa,OAAMD,GAAwBC,KAA0B,M0I0FxDw3E,CAAWD,G1I/F1B,IAAmBD,Q0ImGjB,IACyB,IAA1BrlF,EAAK6xC,GAAUr1C,QAAgBq1C,EAASx3C,KACtB,QAAlBw3C,EAASx3C,KACP,GACA,CAACw3C,SAAUA,EAASx3C,MACtB,CAACw3C,SAAAA,MACFzN,GAA0BjsB,GAAQ,MAClCisB,GAA0B+/C,GAAW,IA9DtCqB,CAAsBrB,EAAW7pE,EAAKu3B,SAAU15B,EAAQJ,GACxDosE,EAAUO,SACVP,EAAUQ,UAKVc,WAAYnrE,WAIV9B,EAAIoE,SrK5DVE,GAAUH,IqKgEJnE,EAAIkW,Y1J8wBVO,GAAkBR,mPrB/vBb,SAAoBi3D,EAAe9wC,SAClC+wC,EAAW3lF,EAAK0lF,GAChBE,EAAY5lF,EAAK40C,MACnB+wC,EAASnpF,SAAWopF,EAAUppF,cACzB,MAEJ,MAAMS,KAAO0oF,KACZD,EAAKzoF,KAAS23C,EAAM33C,UACf,SAGJ,qPA4MF,WACLqJ,EAAY"} \ No newline at end of file diff --git a/src/citationnet/static/vega.min.js b/src/citationnet/static/vega.min.js new file mode 100644 index 0000000..b882322 --- /dev/null +++ b/src/citationnet/static/vega.min.js @@ -0,0 +1,2 @@ +!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).vega={})}(this,(function(t){"use strict";var e="5.20.2";function n(t,e,n){return t.fields=e||[],t.fname=n,t}function r(t){return null==t?null:t.fname}function i(t){return null==t?null:t.fields}function o(t){return 1===t.length?a(t[0]):u(t)}const a=t=>function(e){return e[t]},u=t=>{const e=t.length;return function(n){for(let r=0;rr&&c(),u=r=i+1):"]"===o&&(u||s("Access path missing open bracket: "+t),u>0&&c(),u=0,r=i+1):i>r?c():r=i+1}return u&&s("Access path missing closing bracket: "+t),a&&s("Access path missing closing quote: "+t),i>r&&(i++,c()),e}function c(t,e,r){const i=l(t);return t=1===i.length?i[0]:t,n((r&&r.get||o)(i),[t],e||t)}const f=c("id"),h=n((t=>t),[],"identity"),d=n((()=>0),[],"zero"),p=n((()=>1),[],"one"),g=n((()=>!0),[],"true"),m=n((()=>!1),[],"false");function y(t,e,n){const r=[e].concat([].slice.call(n));console[t].apply(console,r)}function v(t,e){let n=t||0;return{level(t){return arguments.length?(n=+t,this):n},error(){return n>=1&&y(e||"error","ERROR",arguments),this},warn(){return n>=2&&y(e||"warn","WARN",arguments),this},info(){return n>=3&&y(e||"log","INFO",arguments),this},debug(){return n>=4&&y(e||"log","DEBUG",arguments),this}}}var _=Array.isArray;function x(t){return t===Object(t)}const b=t=>"__proto__"!==t;function w(...t){return t.reduce(((t,e)=>{for(const n in e)if("signals"===n)t.signals=A(t.signals,e.signals);else{const r="legend"===n?{layout:1}:"style"===n||null;k(t,n,e[n],r)}return t}),{})}function k(t,e,n,r){if(!b(e))return;let i,o;if(x(n)&&!_(n))for(i in o=x(t[e])?t[e]:t[e]={},n)r&&(!0===r||r[i])?k(o,i,n[i]):b(i)&&(o[i]=n[i]);else t[e]=n}function A(t,e){if(null==t)return e;const n={},r=[];function i(t){n[t.name]||(n[t.name]=1,r.push(t))}return e.forEach(i),t.forEach(i),r}function M(t){return t[t.length-1]}function E(t){return null==t||""===t?null:+t}const D=t=>e=>t*Math.exp(e),C=t=>e=>Math.log(t*e),F=t=>e=>Math.sign(e)*Math.log1p(Math.abs(e/t)),S=t=>e=>Math.sign(e)*Math.expm1(Math.abs(e))*t,B=t=>e=>e<0?-Math.pow(-e,t):Math.pow(e,t);function T(t,e,n,r){const i=n(t[0]),o=n(M(t)),a=(o-i)*e;return[r(i-a),r(o-a)]}function z(t,e){return T(t,e,E,h)}function N(t,e){var n=Math.sign(t[0]);return T(t,e,C(n),D(n))}function O(t,e,n){return T(t,e,B(n),B(1/n))}function R(t,e,n){return T(t,e,F(n),S(n))}function $(t,e,n,r,i){const o=r(t[0]),a=r(M(t)),u=null!=e?r(e):(o+a)/2;return[i(u+(o-u)*n),i(u+(a-u)*n)]}function q(t,e,n){return $(t,e,n,E,h)}function L(t,e,n){const r=Math.sign(t[0]);return $(t,e,n,C(r),D(r))}function U(t,e,n,r){return $(t,e,n,B(r),B(1/r))}function P(t,e,n,r){return $(t,e,n,F(r),S(r))}function j(t){return 1+~~(new Date(t).getMonth()/3)}function I(t){return 1+~~(new Date(t).getUTCMonth()/3)}function W(t){return null!=t?_(t)?t:[t]:[]}function H(t,e,n){let r,i=t[0],o=t[1];return o=n-e?[e,n]:[i=Math.min(Math.max(i,e),n-r),i+r]}function Y(t){return"function"==typeof t}function V(t,e,r){r=r||{},e=W(e)||[];const o=[],a=[],u={},s=r.comparator||X;return W(t).forEach(((t,n)=>{null!=t&&(o.push("descending"===e[n]?-1:1),a.push(t=Y(t)?t:c(t,null,r)),(i(t)||[]).forEach((t=>u[t]=1)))})),0===a.length?null:n(s(a,o),Object.keys(u))}const G=(t,e)=>(te||null==e)&&null!=t?1:(e=e instanceof Date?+e:e,(t=t instanceof Date?+t:t)!==t&&e==e?-1:e!=e&&t==t?1:0),X=(t,e)=>1===t.length?J(t[0],e[0]):Z(t,e,t.length),J=(t,e)=>function(n,r){return G(t(n),t(r))*e},Z=(t,e,n)=>(e.push(0),function(r,i){let o,a=0,u=-1;for(;0===a&&++ut}function K(t,e){let n;return r=>{n&&clearTimeout(n),n=setTimeout((()=>(e(r),n=null)),t)}}function tt(t){for(let e,n,r=1,i=arguments.length;ro&&(o=r))}else{for(r=e(t[a]);ao&&(o=r))}return[i,o]}function nt(t,e){const n=t.length;let r,i,o,a,u,s=-1;if(null==e){for(;++s=i){r=o=i;break}if(s===n)return[-1,-1];for(a=u=s;++si&&(r=i,a=s),o=i){r=o=i;break}if(s===n)return[-1,-1];for(a=u=s;++si&&(r=i,a=s),or(t)?n[t]:void 0,set(t,e){return r(t)||(++i.size,n[t]===ot&&--i.empty),n[t]=e,this},delete(t){return r(t)&&(--i.size,++i.empty,n[t]=ot),this},clear(){i.size=i.empty=0,i.object=n={}},test(t){return arguments.length?(e=t,i):e},clean(){const t={};let r=0;for(const i in n){const o=n[i];o===ot||e&&e(o)||(t[i]=o,++r)}i.size=r,i.empty=0,i.object=n=t}};return t&&Object.keys(t).forEach((e=>{i.set(e,t[e])})),i}function ut(t,e,n,r,i,o){if(!n&&0!==n)return o;const a=+n;let u,s=t[0],l=M(t);la&&(i=o,o=a,a=i),r=void 0===r||r,((n=void 0===n||n)?o<=t:ot.replace(/\\(.)/g,"$1"))):W(t));const i=t&&t.length,a=r&&r.get||o,u=t=>a(e?[t]:l(t));let s;if(i)if(1===i){const e=u(t[0]);s=function(t){return""+e(t)}}else{const e=t.map(u);s=function(t){let n=""+e[0](t),r=0;for(;++r{e={},n={},r=0},o=(i,o)=>(++r>t&&(n=e,e={},r=1),e[i]=o);return i(),{clear:i,has:t=>it(e,t)||it(n,t),get:t=>it(e,t)?e[t]:it(n,t)?o(t,n[t]):void 0,set:(t,n)=>it(e,t)?e[t]=n:o(t,n)}}function _t(t,e,n,r){const i=e.length,o=n.length;if(!o)return e;if(!i)return n;const a=r||new e.constructor(i+o);let u=0,s=0,l=0;for(;u0?n[s++]:e[u++];for(;u=0;)n+=t;return n}function bt(t,e,n,r){const i=n||" ",o=t+"",a=e-o.length;return a<=0?o:"left"===r?xt(i,a)+o:"center"===r?xt(i,~~(a/2))+o+xt(i,Math.ceil(a/2)):o+xt(i,a)}function wt(t){return t&&M(t)-t[0]||0}function kt(t){return _(t)?"["+t.map(kt)+"]":x(t)||gt(t)?JSON.stringify(t).replace("\u2028","\\u2028").replace("\u2029","\\u2029"):t}function At(t){return null==t||""===t?null:!(!t||"false"===t||"0"===t)&&!!t}const Mt=t=>dt(t)||ft(t)?t:Date.parse(t);function Et(t,e){return e=e||Mt,null==t||""===t?null:e(t)}function Dt(t){return null==t||""===t?null:t+""}function Ct(t){const e={},n=t.length;for(let r=0;r9999?"+"+Ot(t,6):Ot(t,4)}(t.getUTCFullYear())+"-"+Ot(t.getUTCMonth()+1,2)+"-"+Ot(t.getUTCDate(),2)+(i?"T"+Ot(e,2)+":"+Ot(n,2)+":"+Ot(r,2)+"."+Ot(i,3)+"Z":r?"T"+Ot(e,2)+":"+Ot(n,2)+":"+Ot(r,2)+"Z":n||e?"T"+Ot(e,2)+":"+Ot(n,2)+"Z":"")}function $t(t){var e=new RegExp('["'+t+"\n\r]"),n=t.charCodeAt(0);function r(t,e){var r,i=[],o=t.length,a=0,u=0,s=o<=0,l=!1;function c(){if(s)return Tt;if(l)return l=!1,Bt;var e,r,i=a;if(34===t.charCodeAt(i)){for(;a++=o?s=!0:10===(r=t.charCodeAt(a++))?l=!0:13===r&&(l=!0,10===t.charCodeAt(a)&&++a),t.slice(i+1,e-1).replace(/""/g,'"')}for(;a1)r=Ht(t,e,n);else for(i=0,r=new Array(o=t.arcs.length);ie?1:t>=e?0:NaN}function Vt(t){let e=t,n=t;function r(t,e,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;n(t[o],e)<0?r=o+1:i=o}return r}return 1===t.length&&(e=(e,n)=>t(e)-n,n=function(t){return(e,n)=>Yt(t(e),n)}(t)),{left:r,center:function(t,n,i,o){null==i&&(i=0),null==o&&(o=t.length);const a=r(t,n,i,o-1);return a>i&&e(t[a-1],n)>-e(t[a],n)?a-1:a},right:function(t,e,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;n(t[o],e)>0?i=o:r=o+1}return r}}}function Gt(t){return null===t?NaN:+t}const Xt=Vt(Yt),Jt=Xt.right,Zt=Xt.left;Vt(Gt).center;class Qt{constructor(){this._partials=new Float64Array(32),this._n=0}add(t){const e=this._partials;let n=0;for(let r=0;r0){for(o=t[--i];i>0&&(e=o,n=t[--i],o=e+n,r=n-(o-e),!r););i>0&&(r<0&&t[i-1]<0||r>0&&t[i-1]>0)&&(n=2*r,e=o+n,n==e-o&&(o=e))}return o}}var Kt=Math.sqrt(50),te=Math.sqrt(10),ee=Math.sqrt(2);function ne(t,e,n){var r,i,o,a,u=-1;if(n=+n,(t=+t)===(e=+e)&&n>0)return[t];if((r=e0){let n=Math.round(t/a),r=Math.round(e/a);for(n*ae&&--r,o=new Array(i=r-n+1);++ue&&--r,o=new Array(i=r-n+1);++u=0?(o>=Kt?10:o>=te?5:o>=ee?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(o>=Kt?10:o>=te?5:o>=ee?2:1)}function ie(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),o=r/i;return o>=Kt?i*=10:o>=te?i*=5:o>=ee&&(i*=2),e=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n=i)&&(n=i)}return n}function ae(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n>e||void 0===n&&e>=e)&&(n=e);else{let r=-1;for(let i of t)null!=(i=e(i,++r,t))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}function ue(t,e,n=0,r=t.length-1,i=Yt){for(;r>n;){if(r-n>600){const o=r-n+1,a=e-n+1,u=Math.log(o),s=.5*Math.exp(2*u/3),l=.5*Math.sqrt(u*s*(o-s)/o)*(a-o/2<0?-1:1);ue(t,e,Math.max(n,Math.floor(e-a*s/o+l)),Math.min(r,Math.floor(e+(o-a)*s/o+l)),i)}const o=t[e];let a=n,u=r;for(se(t,n,e),i(t[r],o)>0&&se(t,n,r);a0;)--u}0===i(t[n],o)?se(t,n,u):(++u,se(t,u,r)),u<=e&&(n=u+1),e<=u&&(r=u-1)}return t}function se(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function le(t,e,n){if(r=(t=Float64Array.from(function*(t,e){if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(yield e);else{let n=-1;for(let r of t)null!=(r=e(r,++n,t))&&(r=+r)>=r&&(yield r)}}(t,n))).length){if((e=+e)<=0||r<2)return ae(t);if(e>=1)return oe(t);var r,i=(r-1)*e,o=Math.floor(i),a=oe(ue(t,o).subarray(0,o+1));return a+(ae(t.subarray(o+1))-a)*(i-o)}}function ce(t,e,n=Gt){if(r=t.length){if((e=+e)<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,o=Math.floor(i),a=+n(t[o],o,t);return a+(+n(t[o+1],o+1,t)-a)*(i-o)}}function fe(t,e){return le(t,.5,e)}function he(t){return Array.from(function*(t){for(const e of t)yield*e}(t))}function de(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((e-t)/n)),o=new Array(i);++r1?r[0]+r.slice(2):r,+t.slice(n+1)]}function me(t){return(t=ge(Math.abs(t)))?t[1]:NaN}var ye,ve=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function _e(t){if(!(e=ve.exec(t)))throw new Error("invalid format: "+t);var e;return new xe({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function xe(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function be(t,e){var n=ge(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}_e.prototype=xe.prototype,xe.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var we={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>be(100*t,e),r:be,s:function(t,e){var n=ge(t,e);if(!n)return t+"";var r=n[0],i=n[1],o=i-(ye=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,a=r.length;return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+ge(t,Math.max(0,e+o-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function ke(t){return t}var Ae,Me,Ee,De=Array.prototype.map,Ce=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Fe(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?ke:(e=De.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,o=[],a=0,u=e[0],s=0;i>0&&u>0&&(s+u+1>r&&(u=Math.max(1,r-s)),o.push(t.substring(i-=u,i+u)),!((s+=u+1)>r));)u=e[a=(a+1)%e.length];return o.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",o=void 0===t.currency?"":t.currency[1]+"",a=void 0===t.decimal?".":t.decimal+"",u=void 0===t.numerals?ke:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(De.call(t.numerals,String)),s=void 0===t.percent?"%":t.percent+"",l=void 0===t.minus?"−":t.minus+"",c=void 0===t.nan?"NaN":t.nan+"";function f(t){var e=(t=_e(t)).fill,n=t.align,f=t.sign,h=t.symbol,d=t.zero,p=t.width,g=t.comma,m=t.precision,y=t.trim,v=t.type;"n"===v?(g=!0,v="g"):we[v]||(void 0===m&&(m=12),y=!0,v="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var _="$"===h?i:"#"===h&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",x="$"===h?o:/[%p]/.test(v)?s:"",b=we[v],w=/[defgprs%]/.test(v);function k(t){var i,o,s,h=_,k=x;if("c"===v)k=b(t)+k,t="";else{var A=(t=+t)<0||1/t<0;if(t=isNaN(t)?c:b(Math.abs(t),m),y&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),A&&0==+t&&"+"!==f&&(A=!1),h=(A?"("===f?f:l:"-"===f||"("===f?"":f)+h,k=("s"===v?Ce[8+ye/3]:"")+k+(A&&"("===f?")":""),w)for(i=-1,o=t.length;++i(s=t.charCodeAt(i))||s>57){k=(46===s?a+t.slice(i+1):t.slice(i))+k,t=t.slice(0,i);break}}g&&!d&&(t=r(t,1/0));var M=h.length+t.length+k.length,E=M>1)+h+t+k+E.slice(M);break;default:t=E+h+t+k}return u(t)}return m=void 0===m?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,m)):Math.max(0,Math.min(20,m)),k.toString=function(){return t+""},k}return{format:f,formatPrefix:function(t,e){var n=f(((t=_e(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(me(e)/3))),i=Math.pow(10,-r),o=Ce[8+r/3];return function(t){return n(i*t)+o}}}}function Se(t){return Math.max(0,-me(Math.abs(t)))}function Be(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(me(e)/3)))-me(Math.abs(t)))}function Te(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,me(e)-me(t))+1}!function(t){Ae=Fe(t),Me=Ae.format,Ee=Ae.formatPrefix}({thousands:",",grouping:[3],currency:["$",""]});var ze=new Date,Ne=new Date;function Oe(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=function(e){return t(e=new Date(+e)),e},i.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},i.round=function(t){var e=i(t),n=i.ceil(t);return t-e0))return u;do{u.push(a=new Date(+n)),e(n,o),t(n)}while(a=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(i.count=function(e,r){return ze.setTime(+e),Ne.setTime(+r),t(ze),t(Ne),Math.floor(n(ze,Ne))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(e){return r(e)%t==0}:function(e){return i.count(0,e)%t==0}):i:null}),i}var Re=Oe((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));Re.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?Oe((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):Re:null};var $e=1e3,qe=6e4,Le=36e5,Ue=864e5,Pe=6048e5,je=Oe((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+e*$e)}),(function(t,e){return(e-t)/$e}),(function(t){return t.getUTCSeconds()})),Ie=Oe((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*$e)}),(function(t,e){t.setTime(+t+e*qe)}),(function(t,e){return(e-t)/qe}),(function(t){return t.getMinutes()})),We=Oe((function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*$e-t.getMinutes()*qe)}),(function(t,e){t.setTime(+t+e*Le)}),(function(t,e){return(e-t)/Le}),(function(t){return t.getHours()})),He=Oe((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*qe)/Ue),(t=>t.getDate()-1));function Ye(t){return Oe((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*qe)/Pe}))}var Ve=Ye(0),Ge=Ye(1);Ye(2),Ye(3);var Xe=Ye(4);Ye(5),Ye(6);var Je=Oe((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})),Ze=Oe((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));Ze.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Oe((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null};var Qe=Oe((function(t){t.setUTCSeconds(0,0)}),(function(t,e){t.setTime(+t+e*qe)}),(function(t,e){return(e-t)/qe}),(function(t){return t.getUTCMinutes()})),Ke=Oe((function(t){t.setUTCMinutes(0,0,0)}),(function(t,e){t.setTime(+t+e*Le)}),(function(t,e){return(e-t)/Le}),(function(t){return t.getUTCHours()})),tn=Oe((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/Ue}),(function(t){return t.getUTCDate()-1}));function en(t){return Oe((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/Pe}))}var nn=en(0),rn=en(1);en(2),en(3);var on=en(4);en(5),en(6);var an=Oe((function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCMonth(t.getUTCMonth()+e)}),(function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())}),(function(t){return t.getUTCMonth()})),un=Oe((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));un.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Oe((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};const sn="year",ln="quarter",cn="month",fn="week",hn="date",dn="day",pn="dayofyear",gn="hours",mn="minutes",yn="seconds",vn="milliseconds",_n=[sn,ln,cn,fn,hn,dn,pn,gn,mn,yn,vn],xn=_n.reduce(((t,e,n)=>(t[e]=1+n,t)),{});function bn(t){const e=W(t).slice(),n={};e.length||s("Missing time unit."),e.forEach((t=>{it(xn,t)?n[t]=1:s(`Invalid time unit: ${t}.`)}));return(n.week||n.day?1:0)+(n.quarter||n.month||n.date?1:0)+(n.dayofyear?1:0)>1&&s(`Incompatible time units: ${t}`),e.sort(((t,e)=>xn[t]-xn[e])),e}const wn={[sn]:"%Y ",[ln]:"Q%q ",[cn]:"%b ",[hn]:"%d ",[fn]:"W%U ",[dn]:"%a ",[pn]:"%j ",[gn]:"%H:00",[mn]:"00:%M",[yn]:":%S",[vn]:".%L","year-month":"%Y-%m ","year-month-date":"%Y-%m-%d ","hours-minutes":"%H:%M"};function kn(t,e){const n=tt({},wn,e),r=bn(t),i=r.length;let o,a,u="",s=0;for(s=0;ss;--o)if(a=r.slice(s,o).join("-"),null!=n[a]){u+=n[a],s=o;break}return u.trim()}const An=new Date;function Mn(t){return An.setFullYear(t),An.setMonth(0),An.setDate(1),An.setHours(0,0,0,0),An}function En(t){return Cn(new Date(t))}function Dn(t){return Fn(new Date(t))}function Cn(t){return He.count(Mn(t.getFullYear())-1,t)}function Fn(t){return Ve.count(Mn(t.getFullYear())-1,t)}function Sn(t){return Mn(t).getDay()}function Bn(t,e,n,r,i,o,a){if(0<=t&&t<100){const u=new Date(-1,e,n,r,i,o,a);return u.setFullYear(t),u}return new Date(t,e,n,r,i,o,a)}function Tn(t){return Nn(new Date(t))}function zn(t){return On(new Date(t))}function Nn(t){const e=Date.UTC(t.getUTCFullYear(),0,1);return tn.count(e-1,t)}function On(t){const e=Date.UTC(t.getUTCFullYear(),0,1);return nn.count(e-1,t)}function Rn(t){return An.setTime(Date.UTC(t,0,1)),An.getUTCDay()}function $n(t,e,n,r,i,o,a){if(0<=t&&t<100){const t=new Date(Date.UTC(-1,e,n,r,i,o,a));return t.setUTCFullYear(n.y),t}return new Date(Date.UTC(t,e,n,r,i,o,a))}function qn(t,e,n,r,i){const o=e||1,a=M(t),u=(t,e,i)=>function(t,e,n,r){const i=n<=1?t:r?(e,i)=>r+n*Math.floor((t(e,i)-r)/n):(e,r)=>n*Math.floor(t(e,r)/n);return e?(t,n)=>e(i(t,n),n):i}(n[i=i||t],r[i],t===a&&o,e),s=new Date,l=Ct(t),c=l.year?u(sn):Q(2012),f=l.month?u(cn):l.quarter?u(ln):d,h=l.week&&l.day?u(dn,1,fn+dn):l.week?u(fn,1):l.day?u(dn,1):l.date?u(hn,1):l.dayofyear?u(pn,1):p,g=l.hours?u(gn):d,m=l.minutes?u(mn):d,y=l.seconds?u(yn):d,v=l.milliseconds?u(vn):d;return function(t){s.setTime(+t);const e=c(s);return i(e,f(s),h(s,e),g(s),m(s),y(s),v(s))}}function Ln(t,e,n){return e+7*t-(n+6)%7}const Un={[sn]:t=>t.getFullYear(),[ln]:t=>Math.floor(t.getMonth()/3),[cn]:t=>t.getMonth(),[hn]:t=>t.getDate(),[gn]:t=>t.getHours(),[mn]:t=>t.getMinutes(),[yn]:t=>t.getSeconds(),[vn]:t=>t.getMilliseconds(),[pn]:t=>Cn(t),[fn]:t=>Fn(t),[fn+dn]:(t,e)=>Ln(Fn(t),t.getDay(),Sn(e)),[dn]:(t,e)=>Ln(1,t.getDay(),Sn(e))},Pn={[ln]:t=>3*t,[fn]:(t,e)=>Ln(t,0,Sn(e))};function jn(t,e){return qn(t,e||1,Un,Pn,Bn)}const In={[sn]:t=>t.getUTCFullYear(),[ln]:t=>Math.floor(t.getUTCMonth()/3),[cn]:t=>t.getUTCMonth(),[hn]:t=>t.getUTCDate(),[gn]:t=>t.getUTCHours(),[mn]:t=>t.getUTCMinutes(),[yn]:t=>t.getUTCSeconds(),[vn]:t=>t.getUTCMilliseconds(),[pn]:t=>Nn(t),[fn]:t=>On(t),[dn]:(t,e)=>Ln(1,t.getUTCDay(),Rn(e)),[fn+dn]:(t,e)=>Ln(On(t),t.getUTCDay(),Rn(e))},Wn={[ln]:t=>3*t,[fn]:(t,e)=>Ln(t,0,Rn(e))};function Hn(t,e){return qn(t,e||1,In,Wn,$n)}const Yn={[sn]:Ze,[ln]:Je.every(3),[cn]:Je,[fn]:Ve,[hn]:He,[dn]:He,[pn]:He,[gn]:We,[mn]:Ie,[yn]:je,[vn]:Re},Vn={[sn]:un,[ln]:an.every(3),[cn]:an,[fn]:nn,[hn]:tn,[dn]:tn,[pn]:tn,[gn]:Ke,[mn]:Qe,[yn]:je,[vn]:Re};function Gn(t){return Yn[t]}function Xn(t){return Vn[t]}function Jn(t,e,n){return t?t.offset(e,n):void 0}function Zn(t,e,n){return Jn(Gn(t),e,n)}function Qn(t,e,n){return Jn(Xn(t),e,n)}function Kn(t,e,n,r){return t?t.range(e,n,r):void 0}function tr(t,e,n,r){return Kn(Gn(t),e,n,r)}function er(t,e,n,r){return Kn(Xn(t),e,n,r)}const nr=1e3,rr=6e4,ir=36e5,or=864e5,ar=2592e6,ur=31536e6,sr=[sn,cn,hn,gn,mn,yn,vn],lr=sr.slice(0,-1),cr=lr.slice(0,-1),fr=cr.slice(0,-1),hr=fr.slice(0,-1),dr=[sn,cn],pr=[sn],gr=[[lr,1,nr],[lr,5,5e3],[lr,15,15e3],[lr,30,3e4],[cr,1,rr],[cr,5,3e5],[cr,15,9e5],[cr,30,18e5],[fr,1,ir],[fr,3,108e5],[fr,6,216e5],[fr,12,432e5],[hr,1,or],[[sn,fn],1,6048e5],[dr,1,ar],[dr,3,7776e6],[pr,1,ur]];function mr(t){const e=t.extent,n=t.maxbins||40,r=Math.abs(wt(e))/n;let i,o,a=Vt((t=>t[2])).right(gr,r);return a===gr.length?(i=pr,o=ie(e[0]/ur,e[1]/ur,n)):a?(a=gr[r/gr[a-1][2]=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Pi,s:ji,S:si,u:li,U:ci,V:hi,w:di,W:pi,x:null,X:null,y:gi,Y:yi,Z:_i,"%":Ui},x={a:function(t){return a[t.getUTCDay()]},A:function(t){return o[t.getUTCDay()]},b:function(t){return s[t.getUTCMonth()]},B:function(t){return u[t.getUTCMonth()]},c:null,d:xi,e:xi,f:Mi,g:Ri,G:qi,H:bi,I:wi,j:ki,L:Ai,m:Ei,M:Di,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Pi,s:ji,S:Ci,u:Fi,U:Si,V:Ti,w:zi,W:Ni,x:null,X:null,y:Oi,Y:$i,Z:Li,"%":Ui},b={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=p.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=f.exec(e.slice(n));return r?(t.w=h.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=y.exec(e.slice(n));return r?(t.m=v.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=g.exec(e.slice(n));return r?(t.m=m.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return A(t,e,n,r)},d:Wr,e:Wr,f:Jr,g:Ur,G:Lr,H:Yr,I:Yr,j:Hr,L:Xr,m:Ir,M:Vr,p:function(t,e,n){var r=l.exec(e.slice(n));return r?(t.p=c.get(r[0].toLowerCase()),n+r[0].length):-1},q:jr,Q:Qr,s:Kr,S:Gr,u:Or,U:Rr,V:$r,w:Nr,W:qr,x:function(t,e,r){return A(t,n,e,r)},X:function(t,e,n){return A(t,r,e,n)},y:Ur,Y:Lr,Z:Pr,"%":Zr};function w(t,e){return function(n){var r,i,o,a=[],u=-1,s=0,l=t.length;for(n instanceof Date||(n=new Date(+n));++u53)return null;"w"in o||(o.w=1),"Z"in o?(i=(r=vr(_r(o.y,0,1))).getUTCDay(),r=i>4||0===i?rn.ceil(r):rn(r),r=tn.offset(r,7*(o.V-1)),o.y=r.getUTCFullYear(),o.m=r.getUTCMonth(),o.d=r.getUTCDate()+(o.w+6)%7):(i=(r=yr(_r(o.y,0,1))).getDay(),r=i>4||0===i?Ge.ceil(r):Ge(r),r=He.offset(r,7*(o.V-1)),o.y=r.getFullYear(),o.m=r.getMonth(),o.d=r.getDate()+(o.w+6)%7)}else("W"in o||"U"in o)&&("w"in o||(o.w="u"in o?o.u%7:"W"in o?1:0),i="Z"in o?vr(_r(o.y,0,1)).getUTCDay():yr(_r(o.y,0,1)).getDay(),o.m=0,o.d="W"in o?(o.w+6)%7+7*o.W-(i+5)%7:o.w+7*o.U-(i+6)%7);return"Z"in o?(o.H+=o.Z/100|0,o.M+=o.Z%100,vr(o)):yr(o)}}function A(t,e,n,r){for(var i,o,a=0,u=e.length,s=n.length;a=s)return-1;if(37===(i=e.charCodeAt(a++))){if(i=e.charAt(a++),!(o=b[i in Er?e.charAt(a++):i])||(r=o(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return _.x=w(n,_),_.X=w(r,_),_.c=w(e,_),x.x=w(n,x),x.X=w(r,x),x.c=w(e,x),{format:function(t){var e=w(t+="",_);return e.toString=function(){return t},e},parse:function(t){var e=k(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=w(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=k(t+="",!0);return e.toString=function(){return t},e}}}var br,wr,kr,Ar,Mr,Er={"-":"",_:" ",0:"0"},Dr=/^\s*\d+/,Cr=/^%/,Fr=/[\\^$*+?|[\]().{}]/g;function Sr(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o[t.toLowerCase(),e])))}function Nr(t,e,n){var r=Dr.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function Or(t,e,n){var r=Dr.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Rr(t,e,n){var r=Dr.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function $r(t,e,n){var r=Dr.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function qr(t,e,n){var r=Dr.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function Lr(t,e,n){var r=Dr.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Ur(t,e,n){var r=Dr.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Pr(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function jr(t,e,n){var r=Dr.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function Ir(t,e,n){var r=Dr.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function Wr(t,e,n){var r=Dr.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Hr(t,e,n){var r=Dr.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function Yr(t,e,n){var r=Dr.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Vr(t,e,n){var r=Dr.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Gr(t,e,n){var r=Dr.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Xr(t,e,n){var r=Dr.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Jr(t,e,n){var r=Dr.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Zr(t,e,n){var r=Cr.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Qr(t,e,n){var r=Dr.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Kr(t,e,n){var r=Dr.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function ti(t,e){return Sr(t.getDate(),e,2)}function ei(t,e){return Sr(t.getHours(),e,2)}function ni(t,e){return Sr(t.getHours()%12||12,e,2)}function ri(t,e){return Sr(1+He.count(Ze(t),t),e,3)}function ii(t,e){return Sr(t.getMilliseconds(),e,3)}function oi(t,e){return ii(t,e)+"000"}function ai(t,e){return Sr(t.getMonth()+1,e,2)}function ui(t,e){return Sr(t.getMinutes(),e,2)}function si(t,e){return Sr(t.getSeconds(),e,2)}function li(t){var e=t.getDay();return 0===e?7:e}function ci(t,e){return Sr(Ve.count(Ze(t)-1,t),e,2)}function fi(t){var e=t.getDay();return e>=4||0===e?Xe(t):Xe.ceil(t)}function hi(t,e){return t=fi(t),Sr(Xe.count(Ze(t),t)+(4===Ze(t).getDay()),e,2)}function di(t){return t.getDay()}function pi(t,e){return Sr(Ge.count(Ze(t)-1,t),e,2)}function gi(t,e){return Sr(t.getFullYear()%100,e,2)}function mi(t,e){return Sr((t=fi(t)).getFullYear()%100,e,2)}function yi(t,e){return Sr(t.getFullYear()%1e4,e,4)}function vi(t,e){var n=t.getDay();return Sr((t=n>=4||0===n?Xe(t):Xe.ceil(t)).getFullYear()%1e4,e,4)}function _i(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Sr(e/60|0,"0",2)+Sr(e%60,"0",2)}function xi(t,e){return Sr(t.getUTCDate(),e,2)}function bi(t,e){return Sr(t.getUTCHours(),e,2)}function wi(t,e){return Sr(t.getUTCHours()%12||12,e,2)}function ki(t,e){return Sr(1+tn.count(un(t),t),e,3)}function Ai(t,e){return Sr(t.getUTCMilliseconds(),e,3)}function Mi(t,e){return Ai(t,e)+"000"}function Ei(t,e){return Sr(t.getUTCMonth()+1,e,2)}function Di(t,e){return Sr(t.getUTCMinutes(),e,2)}function Ci(t,e){return Sr(t.getUTCSeconds(),e,2)}function Fi(t){var e=t.getUTCDay();return 0===e?7:e}function Si(t,e){return Sr(nn.count(un(t)-1,t),e,2)}function Bi(t){var e=t.getUTCDay();return e>=4||0===e?on(t):on.ceil(t)}function Ti(t,e){return t=Bi(t),Sr(on.count(un(t),t)+(4===un(t).getUTCDay()),e,2)}function zi(t){return t.getUTCDay()}function Ni(t,e){return Sr(rn.count(un(t)-1,t),e,2)}function Oi(t,e){return Sr(t.getUTCFullYear()%100,e,2)}function Ri(t,e){return Sr((t=Bi(t)).getUTCFullYear()%100,e,2)}function $i(t,e){return Sr(t.getUTCFullYear()%1e4,e,4)}function qi(t,e){var n=t.getUTCDay();return Sr((t=n>=4||0===n?on(t):on.ceil(t)).getUTCFullYear()%1e4,e,4)}function Li(){return"+0000"}function Ui(){return"%"}function Pi(t){return+t}function ji(t){return Math.floor(+t/1e3)}function Ii(t){const e={};return n=>e[n]||(e[n]=t(n))}function Wi(t){const e=Ii(t.format),n=t.formatPrefix;return{format:e,formatPrefix:n,formatFloat(t){const n=_e(t||",");if(null==n.precision){switch(n.precision=12,n.type){case"%":n.precision-=2;break;case"e":n.precision-=1}return r=e(n),i=e(".1f")(1)[1],t=>{const e=r(t),n=e.indexOf(i);if(n<0)return e;let o=function(t,e){let n,r=t.lastIndexOf("e");if(r>0)return r;for(r=t.length;--r>e;)if(n=t.charCodeAt(r),n>=48&&n<=57)return r+1}(e,n);const a=on;)if("0"!==e[o]){++o;break}return e.slice(0,o)+a}}return e(n);var r,i},formatSpan(t,r,i,o){o=_e(null==o?",f":o);const a=ie(t,r,i),u=Math.max(Math.abs(t),Math.abs(r));let s;if(null==o.precision)switch(o.type){case"s":return isNaN(s=Be(a,u))||(o.precision=s),n(o,u);case"":case"e":case"g":case"p":case"r":isNaN(s=Te(a,u))||(o.precision=s-("e"===o.type));break;case"f":case"%":isNaN(s=Se(a))||(o.precision=s-2*("%"===o.type))}return e(o)}}}let Hi,Yi;function Vi(){return Hi=Wi({format:Me,formatPrefix:Ee})}function Gi(t){return Wi(Fe(t))}function Xi(t){return arguments.length?Hi=Gi(t):Hi}function Ji(t,e,n){x(n=n||{})||s(`Invalid time multi-format specifier: ${n}`);const r=e(yn),i=e(mn),o=e(gn),a=e(hn),u=e(fn),l=e(cn),c=e(ln),f=e(sn),h=t(n.milliseconds||".%L"),d=t(n.seconds||":%S"),p=t(n.minutes||"%I:%M"),g=t(n.hours||"%I %p"),m=t(n.date||n.day||"%a %d"),y=t(n.week||"%b %d"),v=t(n.month||"%B"),_=t(n.quarter||"%B"),b=t(n.year||"%Y");return t=>(r(t)gt(t)?e(t):Ji(e,Gn,t),utcFormat:t=>gt(t)?n(t):Ji(n,Xn,t),timeParse:Ii(t.parse),utcParse:Ii(t.utcParse)}}function Qi(){return Yi=Zi({format:wr,parse:kr,utcFormat:Ar,utcParse:Mr})}function Ki(t){return Zi(xr(t))}function to(t){return arguments.length?Yi=Ki(t):Yi}!function(t){br=xr(t),wr=br.format,kr=br.parse,Ar=br.utcFormat,Mr=br.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]}),Vi(),Qi();const eo=(t,e)=>tt({},t,e);function no(t,e){const n=t?Gi(t):Xi(),r=e?Ki(e):to();return eo(n,r)}function ro(t,e){const n=arguments.length;return n&&2!==n&&s("defaultLocale expects either zero or two arguments."),n?eo(Xi(t),to(e)):eo(Xi(),to())}const io=/^([A-Za-z]+:)?\/\//,oo=/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,ao=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g,uo="file://";async function so(t,e){const n=await this.sanitize(t,e),r=n.href;return n.localFile?this.file(r):this.http(r,e)}async function lo(t,e){e=tt({},this.options,e);const n=this.fileAccess,r={href:null};let i,o,a;const u=oo.test(t.replace(ao,""));null!=t&&"string"==typeof t&&u||s("Sanitize failure, invalid URI: "+kt(t));const l=io.test(t);return(a=e.baseURL)&&!l&&(t.startsWith("/")||"/"===a[a.length-1]||(t="/"+t),t=a+t),o=(i=t.startsWith(uo))||"file"===e.mode||"http"!==e.mode&&!l&&n,i?t=t.slice(uo.length):t.startsWith("//")&&("file"===e.defaultProtocol?(t=t.slice(2),o=!0):t=(e.defaultProtocol||"http")+":"+t),Object.defineProperty(r,"localFile",{value:!!o}),r.href=t,e.target&&(r.target=e.target+""),e.rel&&(r.rel=e.rel+""),"image"===e.context&&e.crossOrigin&&(r.crossOrigin=e.crossOrigin+""),r}function co(t){return t?e=>new Promise(((n,r)=>{t.readFile(e,((t,e)=>{t?r(t):n(e)}))})):fo}async function fo(){s("No file system access.")}function ho(t){return t?async function(e,n){const r=tt({},this.options.http,n),i=n&&n.response,o=await t(e,r);return o.ok?Y(o[i])?o[i]():o.text():s(o.status+""+o.statusText)}:po}async function po(){s("No HTTP fetch method available.")}const go=t=>!(Number.isNaN(+t)||t instanceof Date),mo={boolean:At,integer:E,number:E,date:Et,string:Dt,unknown:h},yo=[t=>"true"===t||"false"===t||!0===t||!1===t,t=>go(t)&&Number.isInteger(+t),go,t=>!Number.isNaN(Date.parse(t))],vo=["boolean","integer","number","date"];function _o(t,e){if(!t||!t.length)return"unknown";const n=t.length,r=yo.length,i=yo.map(((t,e)=>e+1));for(let a,u,s=0,l=0;s0===t?e:t),0)-1]}function xo(t,e){return e.reduce(((e,n)=>(e[n]=_o(t,n),e)),{})}function bo(t){const e=function(e,n){const r={delimiter:t};return wo(e,n?tt(n,r):r)};return e.responseType="text",e}function wo(t,e){return e.header&&(t=e.header.map(kt).join(e.delimiter)+"\n"+t),$t(e.delimiter).parse(t+"")}function ko(t,e){const n=e&&e.property?c(e.property):h;return!x(t)||(r=t,"function"==typeof Buffer&&Y(Buffer.isBuffer)&&Buffer.isBuffer(r))?n(JSON.parse(t)):function(t,e){!_(t)&&ht(t)&&(t=[...t]);return e&&e.copy?JSON.parse(JSON.stringify(t)):t}(n(t),e);var r}wo.responseType="text",ko.responseType="json";const Ao={interior:(t,e)=>t!==e,exterior:(t,e)=>t===e};function Mo(t,e){let n,r,i,o;return t=ko(t,e),e&&e.feature?(n=Lt,i=e.feature):e&&e.mesh?(n=It,i=e.mesh,o=Ao[e.filter]):s("Missing TopoJSON feature or mesh parameter."),r=(r=t.objects[i])?n(t,r,o):s("Invalid TopoJSON object: "+i),r&&r.features||[r]}Mo.responseType="json";const Eo={dsv:wo,csv:bo(","),tsv:bo("\t"),json:ko,topojson:Mo};function Do(t,e){return arguments.length>1?(Eo[t]=e,this):it(Eo,t)?Eo[t]:null}function Co(t){const e=Do(t);return e&&e.responseType||"text"}function Fo(t,e,n,r){const i=Do((e=e||{}).type||"json");return i||s("Unknown data format type: "+e.type),t=i(t,e),e.parse&&function(t,e,n,r){if(!t.length)return;const i=to();n=n||i.timeParse,r=r||i.utcParse;let o,a,u,s,l,c,f=t.columns||Object.keys(t[0]);"auto"===e&&(e=xo(t,f));f=Object.keys(e);const h=f.map((t=>{const i=e[t];let o,a;if(i&&(i.startsWith("date:")||i.startsWith("utc:"))){o=i.split(/:(.+)?/,2),a=o[1],("'"===a[0]&&"'"===a[a.length-1]||'"'===a[0]&&'"'===a[a.length-1])&&(a=a.slice(1,-1));return("utc"===o[0]?r:n)(a)}if(!mo[i])throw Error("Illegal format pattern: "+t+":"+i);return mo[i]}));for(u=0,l=t.length,c=f.length;u({options:n||{},sanitize:lo,load:so,fileAccess:!!e,file:co(e),http:ho(t)})}("undefined"!=typeof fetch&&fetch,null);function Bo(t){const e=t||h,n=[],r={};return n.add=t=>{const i=e(t);return r[i]||(r[i]=1,n.push(t)),n},n.remove=t=>{const i=e(t);if(r[i]){r[i]=0;const e=n.indexOf(t);e>=0&&n.splice(e,1)}return n},n}async function To(t,e){try{await e(t)}catch(e){t.error(e)}}const zo=Symbol("vega_id");let No=1;function Oo(t){return!(!t||!Ro(t))}function Ro(t){return t[zo]}function $o(t,e){return t[zo]=e,t}function qo(t){const e=t===Object(t)?t:{data:t};return Ro(e)?e:$o(e,No++)}function Lo(t){return Uo(t,qo({}))}function Uo(t,e){for(const n in t)e[n]=t[n];return e}function Po(t,e){return $o(e,Ro(t))}function jo(t,e){return t?e?(n,r)=>t(n,r)||Ro(e(n))-Ro(e(r)):(e,n)=>t(e,n)||Ro(e)-Ro(n):null}function Io(t){return t&&t.constructor===Wo}function Wo(){const t=[],e=[],n=[],r=[],i=[];let o=null,a=!1;return{constructor:Wo,insert(e){const n=W(e),r=n.length;for(let e=0;e{p(t)&&(l[Ro(t)]=-1)}));for(f=0,h=t.length;f0&&(y(g,p,d.value),u.modifies(p));for(f=0,h=i.length;f{p(t)&&l[Ro(t)]>0&&y(t,d.field,d.value)})),u.modifies(d.field);if(a)u.mod=e.length||r.length?s.filter((t=>l[Ro(t)]>0)):s.slice();else for(m in c)u.mod.push(c[m]);return(o||null==o&&(e.length||r.length))&&u.clean(!0),u}}}const Ho="_:mod:_";function Yo(){Object.defineProperty(this,Ho,{writable:!0,value:{}})}Yo.prototype={set(t,e,n,r){const i=this,o=i[t],a=i[Ho];return null!=e&&e>=0?(o[e]!==n||r)&&(o[e]=n,a[e+":"+t]=-1,a[t]=-1):(o!==n||r)&&(i[t]=n,a[t]=_(n)?1+n.length:-1),i},modified(t,e){const n=this[Ho];if(!arguments.length){for(const t in n)if(n[t])return!0;return!1}if(_(t)){for(let e=0;e=0?e+1{a instanceof Xo?(a!==this&&(e&&a.targets().add(this),o.push(a)),i.push({op:a,name:t,index:n})):r.set(t,n,a)};for(a in t)if(u=t[a],"pulse"===a)W(u).forEach((t=>{t instanceof Xo?t!==this&&(t.targets().add(this),o.push(t)):s("Pulse parameters must be operator instances.")})),this.source=u;else if(_(u))for(r.set(a,-1,Array(l=u.length)),c=0;c{const n=Date.now();return n-e>t?(e=n,1):0}))},debounce(t){const e=Ko();return this.targets().add(Ko(null,null,K(t,(t=>{const n=t.dataflow;e.receive(t),n&&n.run&&n.run()})))),e},between(t,e){let n=!1;return t.targets().add(Ko(null,null,(()=>n=!0))),e.targets().add(Ko(null,null,(()=>n=!1))),this.filter((()=>n))},detach(){this._filter=g,this._targets=null}};const ta={skip:!0};function ea(t,e,n,r,i,o){const a=tt({},o,ta);let u,s;Y(n)||(n=Q(n)),void 0===r?u=e=>t.touch(n(e)):Y(r)?(s=new Xo(null,r,i,!1),u=e=>{s.evaluate(e);const r=n(e),i=s.value;Io(i)?t.pulse(r,i,o):t.update(r,i,a)}):u=e=>t.update(n(e),r,a),e.apply(u)}function na(t,e,n,r,i,o){if(void 0===r)e.targets().add(n);else{const a=o||{},u=new Xo(null,function(t,e){return e=Y(e)?e:Q(e),t?function(n,r){const i=e(n,r);return t.skip()||(t.skip(i!==this.value).value=i),i}:e}(n,r),i,!1);u.modified(a.force),u.rank=e.rank,e.targets().add(u),n&&(u.skip(!0),u.value=n.value,u.targets().add(n),t.connect(n,[u]))}}const ra={};function ia(t,e,n){this.dataflow=t,this.stamp=null==e?-1:e,this.add=[],this.rem=[],this.mod=[],this.fields=null,this.encode=n||null}function oa(t,e){const n=[];return St(t,e,(t=>n.push(t))),n}function aa(t,e){const n={};return t.visit(e,(t=>{n[Ro(t)]=1})),t=>n[Ro(t)]?null:t}function ua(t,e){return t?(n,r)=>t(n,r)&&e(n,r):e}function sa(t,e,n,r){const i=this,o=n.length;let a=0;this.dataflow=t,this.stamp=e,this.fields=null,this.encode=r||null,this.pulses=n;for(let t=0;te[t]=!0)):e[t]=!0,this},modified(t,e){const n=this.fields;return!(!e&&!this.mod.length||!n)&&(arguments.length?_(t)?t.some((t=>n[t])):n[t]:!!n)},filter(t,e){const n=this;return 1&t&&(n.addF=ua(n.addF,e)),2&t&&(n.remF=ua(n.remF,e)),4&t&&(n.modF=ua(n.modF,e)),16&t&&(n.srcF=ua(n.srcF,e)),n},materialize(t){const e=this;return 1&(t=t||7)&&e.addF&&(e.add=oa(e.add,e.addF),e.addF=null),2&t&&e.remF&&(e.rem=oa(e.rem,e.remF),e.remF=null),4&t&&e.modF&&(e.mod=oa(e.mod,e.modF),e.modF=null),16&t&&e.srcF&&(e.source=e.source.filter(e.srcF),e.srcF=null),e},visit(t,e){const n=this,r=e;if(16&t)return St(n.source,n.srcF,r),n;1&t&&St(n.add,n.addF,r),2&t&&St(n.rem,n.remF,r),4&t&&St(n.mod,n.modF,r);const i=n.source;if(8&t&&i){const t=n.add.length+n.mod.length;t===i.length||St(i,t?aa(n,5):n.srcF,r)}return n}},st(sa,ia,{fork(t){const e=new ia(this.dataflow).init(this,t&this.NO_FIELDS);return void 0!==t&&(t&e.ADD&&this.visit(e.ADD,(t=>e.add.push(t))),t&e.REM&&this.visit(e.REM,(t=>e.rem.push(t))),t&e.MOD&&this.visit(e.MOD,(t=>e.mod.push(t)))),e},changed(t){return this.changes&t},modified(t){const e=this,n=e.fields;return n&&e.changes&e.MOD?_(t)?t.some((t=>n[t])):n[t]:0},filter(){s("MultiPulse does not support filtering.")},materialize(){s("MultiPulse does not support materialization.")},visit(t,e){const n=this,r=n.pulses,i=r.length;let o=0;if(t&n.SOURCE)for(;oe=[],size:()=>e.length,peek:()=>e[0],push:n=>(e.push(n),ha(e,0,e.length-1,t)),pop:()=>{const n=e.pop();let r;return e.length?(r=e[0],e[0]=n,function(t,e,n){const r=e,i=t.length,o=t[e];let a,u=1+(e<<1);for(;u=0&&(u=a),t[e]=t[u],u=1+((e=u)<<1);t[e]=o,ha(t,r,e,n)}(e,0,t)):r=n,r}}}function ha(t,e,n,r){let i,o;const a=t[n];for(;n>e&&(o=n-1>>1,i=t[o],r(a,i)<0);)t[n]=i,n=o;return t[n]=a}function da(){this.logger(v()),this.logLevel(1),this._clock=0,this._rank=0,this._locale=ro();try{this._loader=So()}catch(t){}this._touched=Bo(f),this._input={},this._pulse=null,this._heap=fa(((t,e)=>t.qrank-e.qrank)),this._postrun=[]}function pa(t){return function(){return this._log[t].apply(this,arguments)}}function ga(t,e){Xo.call(this,t,null,e)}da.prototype={stamp(){return this._clock},loader(t){return arguments.length?(this._loader=t,this):this._loader},locale(t){return arguments.length?(this._locale=t,this):this._locale},logger(t){return arguments.length?(this._log=t,this):this._log},error:pa("error"),warn:pa("warn"),info:pa("info"),debug:pa("debug"),logLevel:pa("level"),cleanThreshold:1e4,add:function(t,e,n,r){let i,o=1;return t instanceof Xo?i=t:t&&t.prototype instanceof Xo?i=new t:Y(t)?i=new Xo(null,t):(o=0,i=new Xo(t,e)),this.rank(i),o&&(r=n,n=e),n&&this.connect(i,i.parameters(n,r)),this.touch(i),i},connect:function(t,e){const n=t.rank,r=e.length;for(let i=0;i=0;)e.push(n=r[i]),n===t&&s("Cycle detected in dataflow graph.")},pulse:function(t,e,n){this.touch(t,n||ca);const r=new ia(this,this._clock+(this._pulse?0:1)),i=t.pulse&&t.pulse.source||[];return r.target=t,this._input[t.id]=e.pulse(r,i),this},touch:function(t,e){const n=e||ca;return this._pulse?this._enqueue(t):this._touched.add(t),n.skip&&t.skip(!0),this},update:function(t,e,n){const r=n||ca;return(t.set(e)||r.force)&&this.touch(t,r),this},changeset:Wo,ingest:function(t,e,n){return e=this.parse(e,n),this.pulse(t,this.changeset().insert(e))},parse:function(t,e){const n=this.locale();return Fo(t,e,n.timeParse,n.utcParse)},preload:async function(t,e,n){const r=this,i=r._pending||function(t){let e;const n=new Promise((t=>e=t));return n.requests=0,n.done=()=>{0==--n.requests&&(t._pending=null,e(t))},t._pending=n}(r);i.requests+=1;const o=await r.request(e,n);return r.pulse(t,r.changeset().remove(g).insert(o.data||[])),i.done(),o},request:async function(t,e){const n=this;let r,i=0;try{r=await n.loader().load(t,{context:"dataflow",response:Co(e&&e.type)});try{r=n.parse(r,e)}catch(e){i=-2,n.warn("Data ingestion failed",t,e)}}catch(e){i=-1,n.warn("Loading failed",t,e)}return{data:r,status:i}},events:function(t,e,n,r){const i=this,o=Ko(n,r),a=function(t){t.dataflow=i;try{o.receive(t)}catch(t){i.error(t)}finally{i.run()}};let u;u="string"==typeof t&&"undefined"!=typeof document?document.querySelectorAll(t):W(t);const s=u.length;for(let t=0;tr._enqueue(t,!0))),r._touched=Bo(f);let a,u,s,l=0;try{for(;r._heap.size()>0;)a=r._heap.pop(),a.rank===a.qrank?(u=a.run(r._getPulse(a,t)),u.then?u=await u:u.async&&(i.push(u.async),u=ra),u!==ra&&a._targets&&a._targets.forEach((t=>r._enqueue(t))),++l):r._enqueue(a,!0)}catch(t){r._heap.clear(),s=t}if(r._input={},r._pulse=null,r.debug(`Pulse ${o}: ${l} operators`),s&&(r._postrun=[],r.error(s)),r._postrun.length){const t=r._postrun.sort(((t,e)=>e.priority-t.priority));r._postrun=[];for(let e=0;er.runAsync(null,(()=>{t.forEach((t=>{try{t(r)}catch(t){r.error(t)}}))})))),r},run:function(t,e,n){return this._pulse?la(this):(this.evaluate(t,e,n),this)},runAsync:async function(t,e,n){for(;this._running;)await this._running;const r=()=>this._running=null;return(this._running=this.evaluate(t,e,n)).then(r,r),this._running},runAfter:function(t,e,n){if(this._pulse||e)this._postrun.push({priority:n||0,callback:t});else try{t(this)}catch(t){this.error(t)}},_enqueue:function(t,e){const n=t.stampt.pulse)),e):this._input[t.id]||function(t,e){if(e&&e.stamp===t.stamp)return e;t=t.fork(),e&&e!==ra&&(t.source=e.source);return t}(this._pulse,n&&n.pulse)}},st(ga,Xo,{run(t){if(t.stampthis.pulse=t)):e!==t.StopPropagation&&(this.pulse=e),e},evaluate(t){const e=this.marshall(t.stamp),n=this.transform(e,t);return e.clear(),n},transform(){}});const ma={};function ya(t){const e=va(t);return e&&e.Definition||null}function va(t){return t=t&&t.toLowerCase(),it(ma,t)?ma[t]:null}function*_a(t,e){if(null==e)for(let e of t)null!=e&&""!==e&&(e=+e)>=e&&(yield e);else{let n=-1;for(let r of t)r=e(r,++n,t),null!=r&&""!==r&&(r=+r)>=r&&(yield r)}}function xa(t,e,n){const r=Float64Array.from(_a(t,n));return r.sort(Yt),e.map((t=>ce(r,t)))}function ba(t,e){return xa(t,[.25,.5,.75],e)}function wa(t,e){const n=t.length,r=function(t,e){const n=function(t,e){let n,r=0,i=0,o=0;if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(n=e-i,i+=n/++r,o+=n*(e-i));else{let a=-1;for(let u of t)null!=(u=e(u,++a,t))&&(u=+u)>=u&&(n=u-i,i+=n/++r,o+=n*(u-i))}if(r>1)return o/(r-1)}(t,e);return n?Math.sqrt(n):n}(t,e),i=ba(t,e),o=(i[2]-i[0])/1.34;return 1.06*(Math.min(r,o)||r||Math.abs(i[0])||1)*Math.pow(n,-.2)}function ka(t){const e=t.maxbins||20,n=t.base||10,r=Math.log(n),i=t.divide||[5,2];let o,a,u,s,l,c,f=t.extent[0],h=t.extent[1];const d=t.span||h-f||Math.abs(f)||1;if(t.step)o=t.step;else if(t.steps){for(s=d/e,l=0,c=t.steps.length;le;)o*=n;for(l=0,c=i.length;l=u&&d/s<=e&&(o=s)}s=Math.log(o);const p=s>=0?0:1+~~(-s/r),g=Math.pow(n,-p-1);return(t.nice||void 0===t.nice)&&(s=Math.floor(f/o+g)*o,f=ft);const i=t.length,o=new Float64Array(i);let a,u=0,s=1,l=r(t[0]),c=l,f=l+e;for(;s=f){for(c=(l+c)/2;u>1);ia;)t[i--]=t[o]}o=a,a=r}return t}(o,e+e/4):o}t.random=Math.random;const Ea=Math.sqrt(2*Math.PI),Da=Math.SQRT2;let Ca=NaN;function Fa(e,n){e=e||0,n=null==n?1:n;let r,i,o=0,a=0;if(Ca==Ca)o=Ca,Ca=NaN;else{do{o=2*t.random()-1,a=2*t.random()-1,r=o*o+a*a}while(0===r||r>1);i=Math.sqrt(-2*Math.log(r)/r),o*=i,Ca=a*i}return e+o*n}function Sa(t,e,n){const r=(t-(e||0))/(n=null==n?1:n);return Math.exp(-.5*r*r)/(n*Ea)}function Ba(t,e,n){const r=(t-(e=e||0))/(n=null==n?1:n),i=Math.abs(r);let o;if(i>37)o=0;else{const t=Math.exp(-i*i/2);let e;i<7.07106781186547?(e=.0352624965998911*i+.700383064443688,e=e*i+6.37396220353165,e=e*i+33.912866078383,e=e*i+112.079291497871,e=e*i+221.213596169931,e=e*i+220.206867912376,o=t*e,e=.0883883476483184*i+1.75566716318264,e=e*i+16.064177579207,e=e*i+86.7807322029461,e=e*i+296.564248779674,e=e*i+637.333633378831,e=e*i+793.826512519948,e=e*i+440.413735824752,o/=e):(e=i+.65,e=i+4/e,e=i+3/e,e=i+2/e,e=i+1/e,o=t/e/2.506628274631)}return r>0?1-o:o}function Ta(t,e,n){return t<0||t>1?NaN:(e||0)+(null==n?1:n)*Da*function(t){let e,n=-Math.log((1-t)*(1+t));n<6.25?(n-=3.125,e=-364441206401782e-35,e=e*n-16850591381820166e-35,e=128584807152564e-32+e*n,e=11157877678025181e-33+e*n,e=e*n-1333171662854621e-31,e=20972767875968562e-33+e*n,e=6637638134358324e-30+e*n,e=e*n-4054566272975207e-29,e=e*n-8151934197605472e-29,e=26335093153082323e-28+e*n,e=e*n-12975133253453532e-27,e=e*n-5415412054294628e-26,e=1.0512122733215323e-9+e*n,e=e*n-4.112633980346984e-9,e=e*n-2.9070369957882005e-8,e=4.2347877827932404e-7+e*n,e=e*n-13654692000834679e-22,e=e*n-13882523362786469e-21,e=.00018673420803405714+e*n,e=e*n-.000740702534166267,e=e*n-.006033670871430149,e=.24015818242558962+e*n,e=1.6536545626831027+e*n):n<16?(n=Math.sqrt(n)-3.25,e=2.2137376921775787e-9,e=9.075656193888539e-8+e*n,e=e*n-2.7517406297064545e-7,e=1.8239629214389228e-8+e*n,e=15027403968909828e-22+e*n,e=e*n-4013867526981546e-21,e=29234449089955446e-22+e*n,e=12475304481671779e-21+e*n,e=e*n-47318229009055734e-21,e=6828485145957318e-20+e*n,e=24031110387097894e-21+e*n,e=e*n-.0003550375203628475,e=.0009532893797373805+e*n,e=e*n-.0016882755560235047,e=.002491442096107851+e*n,e=e*n-.003751208507569241,e=.005370914553590064+e*n,e=1.0052589676941592+e*n,e=3.0838856104922208+e*n):Number.isFinite(n)?(n=Math.sqrt(n)-5,e=-27109920616438573e-27,e=e*n-2.555641816996525e-10,e=1.5076572693500548e-9+e*n,e=e*n-3.789465440126737e-9,e=7.61570120807834e-9+e*n,e=e*n-1.496002662714924e-8,e=2.914795345090108e-8+e*n,e=e*n-6.771199775845234e-8,e=2.2900482228026655e-7+e*n,e=e*n-9.9298272942317e-7,e=4526062597223154e-21+e*n,e=e*n-1968177810553167e-20,e=7599527703001776e-20+e*n,e=e*n-.00021503011930044477,e=e*n-.00013871931833623122,e=1.0103004648645344+e*n,e=4.849906401408584+e*n):e=1/0;return e*t}(2*t-1)}function za(t,e){let n,r;const i={mean(t){return arguments.length?(n=t||0,i):n},stdev(t){return arguments.length?(r=null==t?1:t,i):r},sample:()=>Fa(n,r),pdf:t=>Sa(t,n,r),cdf:t=>Ba(t,n,r),icdf:t=>Ta(t,n,r)};return i.mean(t).stdev(e)}function Na(e,n){const r=za();let i=0;const o={data(t){return arguments.length?(e=t,i=t?t.length:0,o.bandwidth(n)):e},bandwidth(t){return arguments.length?(!(n=t)&&e&&(n=wa(e)),o):n},sample:()=>e[~~(t.random()*i)]+n*r.sample(),pdf(t){let o=0,a=0;for(;aOa(n,r),pdf:t=>Ra(t,n,r),cdf:t=>$a(t,n,r),icdf:t=>qa(t,n,r)};return i.mean(t).stdev(e)}function Ua(e,n){let r,i=0;const o={weights(t){return arguments.length?(r=function(t){const e=[];let n,r=0;for(n=0;n=e&&t<=n?1/(n-e):0}function Ia(t,e,n){return null==n&&(n=null==e?1:e,e=0),tn?1:(t-e)/(n-e)}function Wa(t,e,n){return null==n&&(n=null==e?1:e,e=0),t>=0&&t<=1?e+t*(n-e):NaN}function Ha(t,e){let n,r;const i={min(t){return arguments.length?(n=t||0,i):n},max(t){return arguments.length?(r=null==t?1:t,i):r},sample:()=>Pa(n,r),pdf:t=>ja(t,n,r),cdf:t=>Ia(t,n,r),icdf:t=>Wa(t,n,r)};return null==e&&(e=null==t?1:t,t=0),i.min(t).max(e)}function Ya(t,e,n,r){const i=r-t*t,o=Math.abs(i)<1e-24?0:(n-t*e)/i;return[e-o*t,o]}function Va(t,e,n,r){t=t.filter((t=>{let r=e(t),i=n(t);return null!=r&&(r=+r)>=r&&null!=i&&(i=+i)>=i})),r&&t.sort(((t,n)=>e(t)-e(n)));const i=t.length,o=new Float64Array(i),a=new Float64Array(i);let u,s,l,c=0,f=0,h=0;for(l of t)o[c]=u=+e(l),a[c]=s=+n(l),++c,f+=(u-f)/c,h+=(s-h)/c;for(c=0;c=i&&null!=o&&(o=+o)>=o&&r(i,o,++a)}function Xa(t,e,n,r,i){let o=0,a=0;return Ga(t,e,n,((t,e)=>{const n=e-i(t),u=e-r;o+=n*n,a+=u*u})),1-o/a}function Ja(t,e,n){let r=0,i=0,o=0,a=0,u=0;Ga(t,e,n,((t,e)=>{++u,r+=(t-r)/u,i+=(e-i)/u,o+=(t*e-o)/u,a+=(t*t-a)/u}));const s=Ya(r,i,o,a),l=t=>s[0]+s[1]*t;return{coef:s,predict:l,rSquared:Xa(t,e,n,i,l)}}function Za(t,e,n){let r=0,i=0,o=0,a=0,u=0;Ga(t,e,n,((t,e)=>{++u,t=Math.log(t),r+=(t-r)/u,i+=(e-i)/u,o+=(t*e-o)/u,a+=(t*t-a)/u}));const s=Ya(r,i,o,a),l=t=>s[0]+s[1]*Math.log(t);return{coef:s,predict:l,rSquared:Xa(t,e,n,i,l)}}function Qa(t,e,n){const[r,i,o,a]=Va(t,e,n);let u,s,l,c=0,f=0,h=0,d=0,p=0;Ga(t,e,n,((t,e)=>{u=r[p++],s=Math.log(e),l=u*e,c+=(e*s-c)/p,f+=(l-f)/p,h+=(l*s-h)/p,d+=(u*l-d)/p}));const[g,m]=Ya(f/a,c/a,h/a,d/a),y=t=>Math.exp(g+m*(t-o));return{coef:[Math.exp(g-m*o),m],predict:y,rSquared:Xa(t,e,n,a,y)}}function Ka(t,e,n){let r=0,i=0,o=0,a=0,u=0,s=0;Ga(t,e,n,((t,e)=>{const n=Math.log(t),l=Math.log(e);++s,r+=(n-r)/s,i+=(l-i)/s,o+=(n*l-o)/s,a+=(n*n-a)/s,u+=(e-u)/s}));const l=Ya(r,i,o,a),c=t=>l[0]*Math.pow(t,l[1]);return l[0]=Math.exp(l[0]),{coef:l,predict:c,rSquared:Xa(t,e,n,u,c)}}function tu(t,e,n){const[r,i,o,a]=Va(t,e,n),u=r.length;let s,l,c,f,h=0,d=0,p=0,g=0,m=0;for(s=0;s_*(t-=o)*t+x*t+b+a;return{coef:[b-x*o+_*o*o+a,x-2*_*o,_],predict:w,rSquared:Xa(t,e,n,a,w)}}function eu(t,e,n,r){if(1===r)return Ja(t,e,n);if(2===r)return tu(t,e,n);const[i,o,a,u]=Va(t,e,n),s=i.length,l=[],c=[],f=r+1;let h,d,p,g,m;for(h=0;hMath.abs(t[r][a])&&(a=i);for(o=r;o=r;o--)t[o][i]-=t[o][r]*t[r][i]/t[r][r]}for(i=e-1;i>=0;--i){for(u=0,o=i+1;o{t-=a;let e=u+y[0]+y[1]*t+y[2]*t*t;for(h=3;h=0;--o)for(u=e[o],s=1,i[o]+=u,a=1;a<=o;++a)s*=(o+1-a)/a,i[o-a]+=u*Math.pow(n,a)*s;return i[0]+=r,i}function ru(t,e,n,r){const[i,o,a,u]=Va(t,e,n,!0),s=i.length,l=Math.max(2,~~(r*s)),c=new Float64Array(s),f=new Float64Array(s),h=new Float64Array(s).fill(1);for(let t=-1;++t<=2;){const e=[0,l-1];for(let t=0;ti[a]-n?r:a;let s=0,l=0,d=0,p=0,g=0;const m=1/Math.abs(i[u]-n||1);for(let t=r;t<=a;++t){const e=i[t],r=o[t],a=iu(Math.abs(n-e)*m)*h[t],u=e*a;s+=a,l+=u,d+=r*a,p+=r*u,g+=e*u}const[y,v]=Ya(l/s,d/s,p/s,g/s);c[t]=y+v*n,f[t]=Math.abs(o[t]-c[t]),ou(i,t+1,e)}if(2===t)break;const n=fe(f);if(Math.abs(n)<1e-12)break;for(let t,e,r=0;r=1?1e-12:(e=1-t*t)*e}return function(t,e,n,r){const i=t.length,o=[];let a,u=0,s=0,l=[];for(;u=t.length))for(;e>i&&t[o]-r<=r-t[i];)n[0]=++i,n[1]=o,++o}const au=.1*Math.PI/180;function uu(t,e,n,r){n=n||25,r=Math.max(n,r||200);const i=e=>[e,t(e)],o=e[0],a=e[1],u=a-o,s=u/r,l=[i(o)],c=[];if(n===r){for(let t=1;t0;)c.push(i(o+t/n*u));let f=l[0],h=c[c.length-1];for(;h;){const t=i((f[0]+h[0])/2);t[0]-f[0]>=s&&su(f,t,h)>au?c.push(t):(f=h,l.push(h),c.pop()),h=c[c.length-1]}return l}function su(t,e,n){const r=Math.atan2(n[1]-t[1],n[0]-t[0]),i=Math.atan2(e[1]-t[1],e[0]-t[0]);return Math.abs(r-i)}function lu(t){return t&&t.length?1===t.length?t[0]:(e=t,t=>{const n=e.length;let r=1,i=String(e[0](t));for(;r{},hu={init:fu,add:fu,rem:fu,idx:0},du={values:{init:t=>t.cell.store=!0,value:t=>t.cell.data.values(),idx:-1},count:{value:t=>t.cell.num},__count__:{value:t=>t.missing+t.valid},missing:{value:t=>t.missing},valid:{value:t=>t.valid},sum:{init:t=>t.sum=0,value:t=>t.sum,add:(t,e)=>t.sum+=+e,rem:(t,e)=>t.sum-=e},product:{init:t=>t.product=1,value:t=>t.valid?t.product:void 0,add:(t,e)=>t.product*=e,rem:(t,e)=>t.product/=e},mean:{init:t=>t.mean=0,value:t=>t.valid?t.mean:void 0,add:(t,e)=>(t.mean_d=e-t.mean,t.mean+=t.mean_d/t.valid),rem:(t,e)=>(t.mean_d=e-t.mean,t.mean-=t.valid?t.mean_d/t.valid:t.mean)},average:{value:t=>t.valid?t.mean:void 0,req:["mean"],idx:1},variance:{init:t=>t.dev=0,value:t=>t.valid>1?t.dev/(t.valid-1):void 0,add:(t,e)=>t.dev+=t.mean_d*(e-t.mean),rem:(t,e)=>t.dev-=t.mean_d*(e-t.mean),req:["mean"],idx:1},variancep:{value:t=>t.valid>1?t.dev/t.valid:void 0,req:["variance"],idx:2},stdev:{value:t=>t.valid>1?Math.sqrt(t.dev/(t.valid-1)):void 0,req:["variance"],idx:2},stdevp:{value:t=>t.valid>1?Math.sqrt(t.dev/t.valid):void 0,req:["variance"],idx:2},stderr:{value:t=>t.valid>1?Math.sqrt(t.dev/(t.valid*(t.valid-1))):void 0,req:["variance"],idx:2},distinct:{value:t=>t.cell.data.distinct(t.get),req:["values"],idx:3},ci0:{value:t=>t.cell.data.ci0(t.get),req:["values"],idx:3},ci1:{value:t=>t.cell.data.ci1(t.get),req:["values"],idx:3},median:{value:t=>t.cell.data.q2(t.get),req:["values"],idx:3},q1:{value:t=>t.cell.data.q1(t.get),req:["values"],idx:3},q3:{value:t=>t.cell.data.q3(t.get),req:["values"],idx:3},min:{init:t=>t.min=void 0,value:t=>t.min=Number.isNaN(t.min)?t.cell.data.min(t.get):t.min,add:(t,e)=>{(e{e<=t.min&&(t.min=NaN)},req:["values"],idx:4},max:{init:t=>t.max=void 0,value:t=>t.max=Number.isNaN(t.max)?t.cell.data.max(t.get):t.max,add:(t,e)=>{(e>t.max||void 0===t.max)&&(t.max=e)},rem:(t,e)=>{e>=t.max&&(t.max=NaN)},req:["values"],idx:4},argmin:{init:t=>t.argmin=void 0,value:t=>t.argmin||t.cell.data.argmin(t.get),add:(t,e,n)=>{e{e<=t.min&&(t.argmin=void 0)},req:["min","values"],idx:3},argmax:{init:t=>t.argmax=void 0,value:t=>t.argmax||t.cell.data.argmax(t.get),add:(t,e,n)=>{e>t.max&&(t.argmax=n)},rem:(t,e)=>{e>=t.max&&(t.argmax=void 0)},req:["max","values"],idx:3}},pu=Object.keys(du);function gu(t,e){return du[t](e)}function mu(t,e){return t.idx-e.idx}function yu(){this.valid=0,this.missing=0,this._ops.forEach((t=>t.init(this)))}function vu(t,e){null!=t&&""!==t?t==t&&(++this.valid,this._ops.forEach((n=>n.add(this,t,e)))):++this.missing}function _u(t,e){null!=t&&""!==t?t==t&&(--this.valid,this._ops.forEach((n=>n.rem(this,t,e)))):--this.missing}function xu(t){return this._out.forEach((e=>t[e.out]=e.value(this))),t}function bu(t,e){const n=e||h,r=function(t){const e={};t.forEach((t=>e[t.name]=t));const n=t=>{t.req&&t.req.forEach((t=>{e[t]||n(e[t]=du[t]())}))};return t.forEach(n),Object.values(e).sort(mu)}(t),i=t.slice().sort(mu);function o(t){this._ops=r,this._out=i,this.cell=t,this.init()}return o.prototype.init=yu,o.prototype.add=vu,o.prototype.rem=_u,o.prototype.set=xu,o.prototype.get=n,o.fields=t.map((t=>t.out)),o}function wu(t){this._key=t?c(t):Ro,this.reset()}pu.forEach((t=>{du[t]=function(t,e){return n=>tt({name:t,out:n||t},hu,e)}(t,du[t])}));const ku=wu.prototype;function Au(t){ga.call(this,null,t),this._adds=[],this._mods=[],this._alen=0,this._mlen=0,this._drop=!0,this._cross=!1,this._dims=[],this._dnames=[],this._measures=[],this._countOnly=!1,this._counts=null,this._prev=null,this._inputs=null,this._outputs=null}ku.reset=function(){this._add=[],this._rem=[],this._ext=null,this._get=null,this._q=null},ku.add=function(t){this._add.push(t)},ku.rem=function(t){this._rem.push(t)},ku.values=function(){if(this._get=null,0===this._rem.length)return this._add;const t=this._add,e=this._rem,n=this._key,r=t.length,i=e.length,o=Array(r-i),a={};let u,s,l;for(u=0;u=0;)r=t(e[i])+"",it(n,r)||(n[r]=1,++o);return o},ku.extent=function(t){if(this._get!==t||!this._ext){const e=this.values(),n=nt(e,t);this._ext=[e[n[0]],e[n[1]]],this._get=t}return this._ext},ku.argmin=function(t){return this.extent(t)[0]||{}},ku.argmax=function(t){return this.extent(t)[1]||{}},ku.min=function(t){const e=this.extent(t)[0];return null!=e?t(e):void 0},ku.max=function(t){const e=this.extent(t)[1];return null!=e?t(e):void 0},ku.quartile=function(t){return this._get===t&&this._q||(this._q=ba(this.values(),t),this._get=t),this._q},ku.q1=function(t){return this.quartile(t)[0]},ku.q2=function(t){return this.quartile(t)[1]},ku.q3=function(t){return this.quartile(t)[2]},ku.ci=function(t){return this._get===t&&this._ci||(this._ci=Aa(this.values(),1e3,.05,t),this._get=t),this._ci},ku.ci0=function(t){return this.ci(t)[0]},ku.ci1=function(t){return this.ci(t)[1]},Au.Definition={type:"Aggregate",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"ops",type:"enum",array:!0,values:pu},{name:"fields",type:"field",null:!0,array:!0},{name:"as",type:"string",null:!0,array:!0},{name:"drop",type:"boolean",default:!0},{name:"cross",type:"boolean",default:!1},{name:"key",type:"field"}]},st(Au,ga,{transform(t,e){const n=this,r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=t.modified();return n.stamp=r.stamp,n.value&&(i||e.modified(n._inputs,!0))?(n._prev=n.value,n.value=i?n.init(t):{},e.visit(e.SOURCE,(t=>n.add(t)))):(n.value=n.value||n.init(t),e.visit(e.REM,(t=>n.rem(t))),e.visit(e.ADD,(t=>n.add(t)))),r.modifies(n._outputs),n._drop=!1!==t.drop,t.cross&&n._dims.length>1&&(n._drop=!1,n.cross()),e.clean()&&n._drop&&r.clean(!0).runAfter((()=>this.clean())),n.changes(r)},cross(){const t=this,e=t.value,n=t._dnames,r=n.map((()=>({}))),i=n.length;function o(t){let e,o,a,u;for(e in t)for(a=t[e].tuple,o=0;o{const e=r(t);return a(t),n.push(e),e})),this.cellkey=t.key?t.key:lu(this._dims),this._countOnly=!0,this._counts=[],this._measures=[];const u=t.fields||[null],l=t.ops||["count"],c=t.as||[],f=u.length,h={};let d,p,g,m,y,v;for(f!==l.length&&s("Unmatched number of fields and aggregate ops."),v=0;vbu(t,t.field))),{}},cellkey:lu(),cell(t,e){let n=this.value[t];return n?0===n.num&&this._drop&&n.stampo.push(t),remove:t=>a[r(t)]=++u,size:()=>i.length,data:(t,e)=>(u&&(i=i.filter((t=>!a[r(t)])),a={},u=0),e&&t&&i.sort(t),o.length&&(i=t?_t(t,i,o.sort(t)):i.concat(o),o=[]),i)}}function Du(t){ga.call(this,[],t)}function Cu(t){Xo.call(this,null,Fu,t)}function Fu(t){return this.value&&!t.modified()?this.value:V(t.fields,t.orders)}function Su(t){ga.call(this,null,t)}function Bu(t){ga.call(this,null,t)}Mu.Definition={type:"Bin",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"interval",type:"boolean",default:!0},{name:"anchor",type:"number"},{name:"maxbins",type:"number",default:20},{name:"base",type:"number",default:10},{name:"divide",type:"number",array:!0,default:[5,2]},{name:"extent",type:"number",array:!0,length:2,required:!0},{name:"span",type:"number"},{name:"step",type:"number"},{name:"steps",type:"number",array:!0},{name:"minstep",type:"number",default:0},{name:"nice",type:"boolean",default:!0},{name:"name",type:"string"},{name:"as",type:"string",array:!0,length:2,default:["bin0","bin1"]}]},st(Mu,ga,{transform(t,e){const n=!1!==t.interval,r=this._bins(t),o=r.start,a=r.step,u=t.as||["bin0","bin1"],s=u[0],l=u[1];let c;return c=t.modified()?(e=e.reflow(!0)).SOURCE:e.modified(i(t.field))?e.ADD_MOD:e.ADD,e.visit(c,n?t=>{const e=r(t);t[s]=e,t[l]=null==e?null:o+a*(1+(e-o)/a)}:t=>t[s]=r(t)),e.modifies(n?u:s)},_bins(t){if(this.value&&!t.modified())return this.value;const e=t.field,o=ka(t),a=o.step;let u,s,l=o.start,c=l+Math.ceil((o.stop-l)/a)*a;null!=(u=t.anchor)&&(s=u-(l+a*Math.floor((u-l)/a)),l+=s,c+=s);const f=function(t){let n=E(e(t));return null==n?null:nc?1/0:(n=Math.max(l,Math.min(n,c-a)),l+a*Math.floor(1e-14+(n-l)/a))};return f.start=l,f.stop=o.stop,f.step=a,this.value=n(f,i(e),t.name||"bin_"+r(e))}}),Du.Definition={type:"Collect",metadata:{source:!0},params:[{name:"sort",type:"compare"}]},st(Du,ga,{transform(t,e){const n=e.fork(e.ALL),r=Eu(Ro,this.value,n.materialize(n.ADD).add),i=t.sort,o=e.changed()||i&&(t.modified("sort")||e.modified(i.fields));return n.visit(n.REM,r.remove),this.modified(o),this.value=n.source=r.data(jo(i),o),e.source&&e.source.root&&(this.value.root=e.source.root),n}}),st(Cu,Xo),Su.Definition={type:"CountPattern",metadata:{generates:!0,changes:!0},params:[{name:"field",type:"field",required:!0},{name:"case",type:"enum",values:["upper","lower","mixed"],default:"mixed"},{name:"pattern",type:"string",default:'[\\w"]+'},{name:"stopwords",type:"string",default:""},{name:"as",type:"string",array:!0,length:2,default:["text","count"]}]},st(Su,ga,{transform(t,e){const n=e=>n=>{for(var r,i=function(t,e,n){switch(e){case"upper":t=t.toUpperCase();break;case"lower":t=t.toLowerCase()}return t.match(n)}(u(n),t.case,o)||[],s=0,l=i.length;si[t]=1+(i[t]||0))),c=n((t=>i[t]-=1));return r?e.visit(e.SOURCE,l):(e.visit(e.ADD,l),e.visit(e.REM,c)),this._finish(e,s)},_parameterCheck(t,e){let n=!1;return!t.modified("stopwords")&&this._stop||(this._stop=new RegExp("^"+(t.stopwords||"")+"$","i"),n=!0),!t.modified("pattern")&&this._match||(this._match=new RegExp(t.pattern||"[\\w']+","g"),n=!0),(t.modified("field")||e.modified(t.field.fields))&&(n=!0),n&&(this._counts={}),n},_finish(t,e){const n=this._counts,r=this._tuples||(this._tuples={}),i=e[0],o=e[1],a=t.fork(t.NO_SOURCE|t.NO_FIELDS);let u,s,l;for(u in n)s=r[u],l=n[u]||0,!s&&l?(r[u]=s=qo({}),s[i]=u,s[o]=l,a.add.push(s)):0===l?(s&&a.rem.push(s),n[u]=null,r[u]=null):s[o]!==l&&(s[o]=l,a.mod.push(s));return a.modifies(e)}}),Bu.Definition={type:"Cross",metadata:{generates:!0},params:[{name:"filter",type:"expr"},{name:"as",type:"string",array:!0,length:2,default:["a","b"]}]},st(Bu,ga,{transform(t,e){const n=e.fork(e.NO_SOURCE),r=t.as||["a","b"],i=r[0],o=r[1],a=!this.value||e.changed(e.ADD_REM)||t.modified("as")||t.modified("filter");let u=this.value;return a?(u&&(n.rem=u),u=e.materialize(e.SOURCE).source,n.add=this.value=function(t,e,n,r){for(var i,o,a=[],u={},s=t.length,l=0;lNu(t,e)))):typeof r[n]===zu&&r[n](t[n]);return r}function Ou(t){ga.call(this,null,t)}const Ru=[{key:{function:"normal"},params:[{name:"mean",type:"number",default:0},{name:"stdev",type:"number",default:1}]},{key:{function:"lognormal"},params:[{name:"mean",type:"number",default:0},{name:"stdev",type:"number",default:1}]},{key:{function:"uniform"},params:[{name:"min",type:"number",default:0},{name:"max",type:"number",default:1}]},{key:{function:"kde"},params:[{name:"field",type:"field",required:!0},{name:"from",type:"data"},{name:"bandwidth",type:"number",default:0}]}],$u={key:{function:"mixture"},params:[{name:"distributions",type:"param",array:!0,params:Ru},{name:"weights",type:"number",array:!0}]};function qu(t,e){return t?t.map(((t,n)=>e[n]||r(t))):null}function Lu(t,e,n){const r=[],i=t=>t(s);let o,a,u,s,l,c;if(null==e)r.push(t.map(n));else for(o={},a=0,u=t.length;at.materialize(t.SOURCE).source}(e)),i=t.steps||t.minsteps||25,o=t.steps||t.maxsteps||200;let a=t.method||"pdf";"pdf"!==a&&"cdf"!==a&&s("Invalid density method: "+a),t.extent||r.data||s("Missing density extent parameter."),a=r[a];const u=t.as||["value","density"],l=uu(a,t.extent||et(r.data()),i,o).map((t=>{const e={};return e[u[0]]=t[0],e[u[1]]=t[1],qo(e)}));this.value&&(n.rem=this.value),this.value=n.add=n.source=l}return n}});function Uu(t){ga.call(this,null,t)}Uu.Definition={type:"DotBin",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"groupby",type:"field",array:!0},{name:"step",type:"number"},{name:"smooth",type:"boolean",default:!1},{name:"as",type:"string",default:"bin"}]};function Pu(t){Xo.call(this,null,ju,t),this.modified(!0)}function ju(t){const e=t.expr;return this.value&&!t.modified("expr")?this.value:n((n=>e(n,t)),i(e),r(e))}function Iu(t){ga.call(this,[void 0,void 0],t)}function Wu(t,e){Xo.call(this,t),this.parent=e,this.count=0}function Hu(t){ga.call(this,{},t),this._keys=at();const e=this._targets=[];e.active=0,e.forEach=t=>{for(let n=0,r=e.active;nc(t))):c(t.name,t.as)}function Gu(t){ga.call(this,at(),t)}function Xu(t){ga.call(this,[],t)}function Ju(t){ga.call(this,[],t)}function Zu(t){ga.call(this,null,t)}function Qu(t){ga.call(this,[],t)}st(Uu,ga,{transform(t,e){if(this.value&&!t.modified()&&!e.changed())return e;const n=e.materialize(e.SOURCE).source,r=Lu(e.source,t.groupby,h),i=t.smooth||!1,o=t.field,a=t.step||((t,e)=>wt(et(t,e))/30)(n,o),u=jo(((t,e)=>o(t)-o(e))),s=t.as||"bin",l=r.length;let c,f=1/0,d=-1/0,p=0;for(;pd&&(d=e),t[++c][s]=e}return this.value={start:f,stop:d,step:a},e.reflow(!0).modifies(s)}}),st(Pu,Xo),Iu.Definition={type:"Extent",metadata:{},params:[{name:"field",type:"field",required:!0}]},st(Iu,ga,{transform(t,e){const n=this.value,i=t.field,o=e.changed()||e.modified(i.fields)||t.modified("field");let a=n[0],u=n[1];if((o||null==a)&&(a=1/0,u=-1/0),e.visit(o?e.SOURCE:e.ADD,(t=>{const e=E(i(t));null!=e&&(eu&&(u=e))})),!Number.isFinite(a)||!Number.isFinite(u)){let t=r(i);t&&(t=` for field "${t}"`),e.dataflow.warn(`Infinite extent${t}: [${a}, ${u}]`),a=u=void 0}this.value=[a,u]}}),st(Wu,Xo,{connect(t){return this.detachSubflow=t.detachSubflow,this.targets().add(t),t.source=this},add(t){this.count+=1,this.value.add.push(t)},rem(t){this.count-=1,this.value.rem.push(t)},mod(t){this.value.mod.push(t)},init(t){this.value.init(t,t.NO_SOURCE)},evaluate(){return this.value}}),st(Hu,ga,{activate(t){this._targets[this._targets.active++]=t},subflow(t,e,n,r){const i=this.value;let o,a,u=it(i,t)&&i[t];return u?u.value.stampt&&t.count>0));this.initTargets(t)}},initTargets(t){const e=this._targets,n=e.length,r=t?t.length:0;let i=0;for(;ithis.subflow(t,i,e);return this._group=t.group||{},this.initTargets(),e.visit(e.REM,(t=>{const e=Ro(t),n=o.get(e);void 0!==n&&(o.delete(e),u(n).rem(t))})),e.visit(e.ADD,(t=>{const e=r(t);o.set(Ro(t),e),u(e).add(t)})),a||e.modified(r.fields)?e.visit(e.MOD,(t=>{const e=Ro(t),n=o.get(e),i=r(t);n===i?u(i).mod(t):(o.set(e,i),u(n).rem(t),u(i).add(t))})):e.changed(e.MOD)&&e.visit(e.MOD,(t=>{u(o.get(Ro(t))).mod(t)})),a&&e.visit(e.REFLOW,(t=>{const e=Ro(t),n=o.get(e),i=r(t);n!==i&&(o.set(e,i),u(n).rem(t),u(i).add(t))})),e.clean()?n.runAfter((()=>{this.clean(),o.clean()})):o.empty>n.cleanThreshold&&n.runAfter(o.clean),e}}),st(Yu,Xo),Gu.Definition={type:"Filter",metadata:{changes:!0},params:[{name:"expr",type:"expr",required:!0}]},st(Gu,ga,{transform(t,e){const n=e.dataflow,r=this.value,i=e.fork(),o=i.add,a=i.rem,u=i.mod,s=t.expr;let l=!0;function c(e){const n=Ro(e),i=s(e,t),c=r.get(n);i&&c?(r.delete(n),o.push(e)):i||c?l&&i&&!c&&u.push(e):(r.set(n,1),a.push(e))}return e.visit(e.REM,(t=>{const e=Ro(t);r.has(e)?r.delete(e):a.push(t)})),e.visit(e.ADD,(e=>{s(e,t)?o.push(e):r.set(Ro(e),1)})),e.visit(e.MOD,c),t.modified()&&(l=!1,e.visit(e.REFLOW,c)),r.empty>n.cleanThreshold&&n.runAfter(r.clean),i}}),Xu.Definition={type:"Flatten",metadata:{generates:!0},params:[{name:"fields",type:"field",array:!0,required:!0},{name:"index",type:"string"},{name:"as",type:"string",array:!0}]},st(Xu,ga,{transform(t,e){const n=e.fork(e.NO_SOURCE),r=t.fields,i=qu(r,t.as||[]),o=t.index||null,a=i.length;return n.rem=this.value,e.visit(e.SOURCE,(t=>{const e=r.map((e=>e(t))),u=e.reduce(((t,e)=>Math.max(t,e.length)),0);let s,l,c,f=0;for(;f{for(let e,r=0;re[r]=n(e,t)))}}),st(Qu,ga,{transform(t,e){const n=e.fork(e.ALL),r=t.generator;let i,o,a,u=this.value,s=t.size-u.length;if(s>0){for(i=[];--s>=0;)i.push(a=qo(r(t))),u.push(a);n.add=n.add.length?n.materialize(n.ADD).add.concat(i):i}else o=u.slice(0,-s),n.rem=n.rem.length?n.materialize(n.REM).rem.concat(o):o,u=u.slice(-s);return n.source=this.value=u,n}});const Ku={value:"value",median:fe,mean:function(t,e){let n=0,r=0;if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(++n,r+=e);else{let i=-1;for(let o of t)null!=(o=e(o,++i,t))&&(o=+o)>=o&&(++n,r+=o)}if(n)return r/n},min:ae,max:oe},ts=[];function es(t){ga.call(this,[],t)}function ns(t){Au.call(this,t)}function rs(t){ga.call(this,null,t)}function is(t){Xo.call(this,null,os,t)}function os(t){return this.value&&!t.modified()?this.value:mt(t.fields,t.flat)}function as(t){ga.call(this,[],t),this._pending=null}function us(t,e,n){n.forEach(qo);const r=e.fork(e.NO_FIELDS&e.NO_SOURCE);return r.rem=t.value,t.value=r.source=r.add=n,t._pending=null,r.rem.length&&r.clean(!0),r}function ss(t){ga.call(this,{},t)}function ls(t){Xo.call(this,null,cs,t)}function cs(t){if(this.value&&!t.modified())return this.value;const e=t.extents,n=e.length;let r,i,o=1/0,a=-1/0;for(r=0;ra&&(a=i[1]);return[o,a]}function fs(t){Xo.call(this,null,hs,t)}function hs(t){return this.value&&!t.modified()?this.value:t.values.reduce(((t,e)=>t.concat(e)),[])}function ds(t){ga.call(this,null,t)}function ps(t){Au.call(this,t)}function gs(t){Hu.call(this,t)}function ms(t){ga.call(this,null,t)}function ys(t){ga.call(this,null,t)}function vs(t){ga.call(this,null,t)}es.Definition={type:"Impute",metadata:{changes:!0},params:[{name:"field",type:"field",required:!0},{name:"key",type:"field",required:!0},{name:"keyvals",array:!0},{name:"groupby",type:"field",array:!0},{name:"method",type:"enum",default:"value",values:["value","mean","median","max","min"]},{name:"value",default:0}]},st(es,ga,{transform(t,e){var n,i,o,a,u,l,c,f,h,d,p=e.fork(e.ALL),g=function(t){var e,n=t.method||Ku.value;if(null!=Ku[n])return n===Ku.value?(e=void 0!==t.value?t.value:0,()=>e):Ku[n];s("Unrecognized imputation method: "+n)}(t),m=function(t){const e=t.field;return t=>t?e(t):NaN}(t),y=r(t.field),v=r(t.key),_=(t.groupby||[]).map(r),x=function(t,e,n,r){var i,o,a,u,s,l,c,f,h=t=>t(f),d=[],p=r?r.slice():[],g={},m={};for(p.forEach(((t,e)=>g[t]=e+1)),u=0,c=t.length;un.add(t)))):(i=n.value=n.value||this.init(t),e.visit(e.REM,(t=>n.rem(t))),e.visit(e.ADD,(t=>n.add(t)))),n.changes(),e.visit(e.SOURCE,(t=>{tt(t,i[n.cellkey(t)].tuple)})),e.reflow(r).modifies(this._outputs)},changes(){const t=this._adds,e=this._mods;let n,r;for(n=0,r=this._alen;n{const n=Na(e,u)[l],r=t.counts?e.length:1;uu(n,h||et(e),d,p).forEach((t=>{const n={};for(let t=0;t(this._pending=W(t.data),t=>t.touch(this))))}}return n.request(t.url,t.format).then((t=>us(this,e,W(t.data))))}}),ss.Definition={type:"Lookup",metadata:{modifies:!0},params:[{name:"index",type:"index",params:[{name:"from",type:"data",required:!0},{name:"key",type:"field",required:!0}]},{name:"values",type:"field",array:!0},{name:"fields",type:"field",array:!0,required:!0},{name:"as",type:"string",array:!0},{name:"default",default:null}]},st(ss,ga,{transform(t,e){const n=t.fields,i=t.index,o=t.values,a=null==t.default?null:t.default,u=t.modified(),l=n.length;let c,f,h,d=u?e.SOURCE:e.ADD,p=e,g=t.as;return o?(f=o.length,l>1&&!g&&s('Multi-field lookup requires explicit "as" parameter.'),g&&g.length!==l*f&&s('The "as" parameter has too few output field names.'),g=g||o.map(r),c=function(t){for(var e,r,u=0,s=0;ue.modified(t.fields))),d|=h?e.MOD:0),e.visit(d,c),p.modifies(g)}}),st(ls,Xo),st(fs,Xo),st(ds,ga,{transform(t,e){return this.modified(t.modified()),this.value=t,e.fork(e.NO_SOURCE|e.NO_FIELDS)}}),ps.Definition={type:"Pivot",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"field",type:"field",required:!0},{name:"value",type:"field",required:!0},{name:"op",type:"enum",values:pu,default:"sum"},{name:"limit",type:"number",default:0},{name:"key",type:"field"}]},st(ps,Au,{_transform:Au.prototype.transform,transform(t,e){return this._transform(function(t,e){const r=t.field,o=t.value,a=("count"===t.op?"__count__":t.op)||"sum",u=i(r).concat(i(o)),s=function(t,e,n){const r={},i=[];return n.visit(n.SOURCE,(e=>{const n=t(e);r[n]||(r[n]=1,i.push(n))})),i.sort(G),e?i.slice(0,e):i}(r,t.limit||0,e);e.changed()&&t.set("__pivot__",null,null,!0);return{key:t.key,groupby:t.groupby,ops:s.map((()=>a)),fields:s.map((t=>function(t,e,r,i){return n((n=>e(n)===t?r(n):NaN),i,t+"")}(t,r,o,u))),as:s.map((t=>t+"")),modified:t.modified.bind(t)}}(t,e),e)}}),st(gs,Hu,{transform(t,e){const n=t.subflow,r=t.field,o=t=>this.subflow(Ro(t),n,e,t);return(t.modified("field")||r&&e.modified(i(r)))&&s("PreFacet does not support field modification."),this.initTargets(),r?(e.visit(e.MOD,(t=>{const e=o(t);r(t).forEach((t=>e.mod(t)))})),e.visit(e.ADD,(t=>{const e=o(t);r(t).forEach((t=>e.add(qo(t))))})),e.visit(e.REM,(t=>{const e=o(t);r(t).forEach((t=>e.rem(t)))}))):(e.visit(e.MOD,(t=>o(t).mod(t))),e.visit(e.ADD,(t=>o(t).add(t))),e.visit(e.REM,(t=>o(t).rem(t)))),e.clean()&&e.runAfter((()=>this.clean())),e}}),ms.Definition={type:"Project",metadata:{generates:!0,changes:!0},params:[{name:"fields",type:"field",array:!0},{name:"as",type:"string",null:!0,array:!0}]},st(ms,ga,{transform(t,e){const n=e.fork(e.NO_SOURCE),r=t.fields,i=qu(t.fields,t.as||[]),o=r?(t,e)=>function(t,e,n,r){for(let i=0,o=n.length;i{const e=Ro(t);n.rem.push(a[e]),a[e]=null})),e.visit(e.ADD,(t=>{const e=o(t,qo({}));a[Ro(t)]=e,n.add.push(e)})),e.visit(e.MOD,(t=>{n.mod.push(o(t,a[Ro(t)]))})),n}}),st(ys,ga,{transform(t,e){return this.value=t.value,t.modified("value")?e.fork(e.NO_SOURCE|e.NO_FIELDS):e.StopPropagation}}),vs.Definition={type:"Quantile",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"field",type:"field",required:!0},{name:"probs",type:"number",array:!0},{name:"step",type:"number",default:.01},{name:"as",type:"string",array:!0,default:["prob","value"]}]};function _s(t){ga.call(this,null,t)}function xs(t){ga.call(this,[],t),this.count=0}function bs(t){ga.call(this,null,t)}function ws(t){ga.call(this,null,t),this.modified(!0)}function ks(t){ga.call(this,null,t)}st(vs,ga,{transform(t,e){const n=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=t.as||["prob","value"];if(this.value&&!t.modified()&&!e.changed())return n.source=this.value,n;const o=Lu(e.materialize(e.SOURCE).source,t.groupby,t.field),a=(t.groupby||[]).map(r),u=[],s=t.step||.01,l=t.probs||de(s/2,1-1e-14,s),c=l.length;return o.forEach((t=>{const e=xa(t,l);for(let n=0;n{const e=Ro(t);n.rem.push(r[e]),r[e]=null})),e.visit(e.ADD,(t=>{const e=Lo(t);r[Ro(t)]=e,n.add.push(e)})),e.visit(e.MOD,(t=>{const e=r[Ro(t)];for(const r in t)e[r]=t[r],n.modifies(r);n.mod.push(e)}))),n}}),xs.Definition={type:"Sample",metadata:{},params:[{name:"size",type:"number",default:1e3}]},st(xs,ga,{transform(e,n){const r=n.fork(n.NO_SOURCE),i=e.modified("size"),o=e.size,a=this.value.reduce(((t,e)=>(t[Ro(e)]=1,t)),{});let u=this.value,s=this.count,l=0;function c(e){let n,i;u.length=l&&(n=u[i],a[Ro(n)]&&r.rem.push(n),u[i]=e)),++s}if(n.rem.length&&(n.visit(n.REM,(t=>{const e=Ro(t);a[e]&&(a[e]=-1,r.rem.push(t)),--s})),u=u.filter((t=>-1!==a[Ro(t)]))),(n.rem.length||i)&&u.length{a[Ro(t)]||c(t)})),l=-1),i&&u.length>o){const t=u.length-o;for(let e=0;e{a[Ro(t)]&&r.mod.push(t)})),n.add.length&&n.visit(n.ADD,c),(n.add.length||l<0)&&(r.add=u.filter((t=>!a[Ro(t)]))),this.count=s,this.value=r.source=u,r}}),bs.Definition={type:"Sequence",metadata:{generates:!0,changes:!0},params:[{name:"start",type:"number",required:!0},{name:"stop",type:"number",required:!0},{name:"step",type:"number",default:1},{name:"as",type:"string",default:"data"}]},st(bs,ga,{transform(t,e){if(this.value&&!t.modified())return;const n=e.materialize().fork(e.MOD),r=t.as||"data";return n.rem=this.value?e.rem.concat(this.value):e.rem,this.value=de(t.start,t.stop,t.step||1).map((t=>{const e={};return e[r]=t,qo(e)})),n.add=e.add.concat(this.value),n}}),st(ws,ga,{transform(t,e){return this.value=e.source,e.changed()?e.fork(e.NO_SOURCE|e.NO_FIELDS):e.StopPropagation}});const As=["unit0","unit1"];function Ms(t){ga.call(this,at(),t)}function Es(t){ga.call(this,null,t)}ks.Definition={type:"TimeUnit",metadata:{modifies:!0},params:[{name:"field",type:"field",required:!0},{name:"interval",type:"boolean",default:!0},{name:"units",type:"enum",values:_n,array:!0},{name:"step",type:"number",default:1},{name:"maxbins",type:"number",default:40},{name:"extent",type:"date",array:!0},{name:"timezone",type:"enum",default:"local",values:["local","utc"]},{name:"as",type:"string",array:!0,length:2,default:As}]},st(ks,ga,{transform(t,e){const n=t.field,r=!1!==t.interval,o="utc"===t.timezone,a=this._floor(t,e),u=(o?Xn:Gn)(a.unit).offset,s=t.as||As,l=s[0],c=s[1],f=a.step;let h=a.start||1/0,d=a.stop||-1/0,p=e.ADD;return(t.modified()||e.modified(i(n)))&&(p=(e=e.reflow(!0)).SOURCE,h=1/0,d=-1/0),e.visit(p,(t=>{const e=n(t);let i,o;null==e?(t[l]=null,r&&(t[c]=null)):(t[l]=i=o=a(e),r&&(t[c]=o=u(i,f)),id&&(d=o))})),a.start=h,a.stop=d,e.modifies(r?s:l)},_floor(t,e){const n="utc"===t.timezone,{units:r,step:i}=t.units?{units:t.units,step:t.step||1}:mr({extent:t.extent||et(e.materialize(e.SOURCE).source,t.field),maxbins:t.maxbins}),o=bn(r),a=this.value||{},u=(n?Hn:jn)(o,i);return u.unit=M(o),u.units=o,u.step=i,u.start=a.start,u.stop=a.stop,this.value=u}}),st(Ms,ga,{transform(t,e){const n=e.dataflow,r=t.field,i=this.value,o=t=>i.set(r(t),t);let a=!0;return t.modified("field")||e.modified(r.fields)?(i.clear(),e.visit(e.SOURCE,o)):e.changed()?(e.visit(e.REM,(t=>i.delete(r(t)))),e.visit(e.ADD,o)):a=!1,this.modified(a),i.empty>n.cleanThreshold&&n.runAfter(i.clean),e.fork()}}),st(Es,ga,{transform(t,e){(!this.value||t.modified("field")||t.modified("sort")||e.changed()||t.sort&&e.modified(t.sort.fields))&&(this.value=(t.sort?e.source.slice().sort(jo(t.sort)):e.source).map(t.field))}});const Ds={row_number:function(){return{next:t=>t.index+1}},rank:function(){let t;return{init:()=>t=1,next:e=>{const n=e.index,r=e.data;return n&&e.compare(r[n-1],r[n])?t=n+1:t}}},dense_rank:function(){let t;return{init:()=>t=1,next:e=>{const n=e.index,r=e.data;return n&&e.compare(r[n-1],r[n])?++t:t}}},percent_rank:function(){const t=Ds.rank(),e=t.next;return{init:t.init,next:t=>(e(t)-1)/(t.data.length-1)}},cume_dist:function(){let t;return{init:()=>t=0,next:e=>{const n=e.data,r=e.compare;let i=e.index;if(t0||s("ntile num must be greater than zero.");const n=Ds.cume_dist(),r=n.next;return{init:n.init,next:t=>Math.ceil(e*r(t))}},lag:function(t,e){return e=+e||1,{next:n=>{const r=n.index-e;return r>=0?t(n.data[r]):null}}},lead:function(t,e){return e=+e||1,{next:n=>{const r=n.index+e,i=n.data;return rt(e.data[e.i0])}},last_value:function(t){return{next:e=>t(e.data[e.i1-1])}},nth_value:function(t,e){return(e=+e)>0||s("nth_value nth must be greater than zero."),{next:n=>{const r=n.i0+(e-1);return re=null,next:n=>{const r=t(n.data[n.index]);return null!=r?e=r:e}}},next_value:function(t){let e,n;return{init:()=>(e=null,n=-1),next:r=>{const i=r.data;return r.index<=n?e:(n=function(t,e,n){for(let r=e.length;nc[t]=1))}m(t.sort),e.forEach(((t,e)=>{const i=n[e],c=r(i),y=cu(t,c,a[e]);if(m(i),u.push(y),it(Ds,t))l.push(function(t,e,n,r){const i=Ds[t](e,n);return{init:i.init||d,update:function(t,e){e[r]=i.next(t)}}}(t,n[e],o[e],y));else{if(null==i&&"count"!==t&&s("Null aggregate field specified."),"count"===t)return void h.push(y);g=!1;let e=f[c];e||(e=f[c]=[],e.field=i,p.push(e)),e.push(gu(t,y))}})),(h.length||p.length)&&(this.cell=function(t,e,n){t=t.map((t=>bu(t,t.field)));const r={num:0,agg:null,store:!1,count:e};if(!n)for(var i=t.length,o=r.agg=Array(i),a=0;a0&&!i(o[n],o[n-1])&&(t.i0=e.left(o,o[n])),rt.init())),this.cell&&this.cell.init()},Ss.update=function(t,e){const n=this.cell,r=this.windows,i=t.data,o=r&&r.length;let a;if(n){for(a=t.p0;athis.group(i(t));let a=this.state;a&&!n||(a=this.state=new Fs(t)),n||e.modified(a.inputs)?(this.value={},e.visit(e.SOURCE,(t=>o(t).add(t)))):(e.visit(e.REM,(t=>o(t).remove(t))),e.visit(e.ADD,(t=>o(t).add(t))));for(let e=0,n=this._mlen;eqs)if(Math.abs(c*u-s*l)>qs&&i){var h=n-o,d=r-a,p=u*u+s*s,g=h*h+d*d,m=Math.sqrt(p),y=Math.sqrt(f),v=i*Math.tan((Rs-Math.acos((p+f-g)/(2*m*y)))/2),_=v/y,x=v/m;Math.abs(_-1)>qs&&(this._+="L"+(t+_*l)+","+(e+_*c)),this._+="A"+i+","+i+",0,0,"+ +(c*h>l*d)+","+(this._x1=t+x*u)+","+(this._y1=e+x*s)}else this._+="L"+(this._x1=t)+","+(this._y1=e);else;},arc:function(t,e,n,r,i,o){t=+t,e=+e,o=!!o;var a=(n=+n)*Math.cos(r),u=n*Math.sin(r),s=t+a,l=e+u,c=1^o,f=o?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+s+","+l:(Math.abs(this._x1-s)>qs||Math.abs(this._y1-l)>qs)&&(this._+="L"+s+","+l),n&&(f<0&&(f=f%$s+$s),f>Ls?this._+="A"+n+","+n+",0,1,"+c+","+(t-a)+","+(e-u)+"A"+n+","+n+",0,1,"+c+","+(this._x1=s)+","+(this._y1=l):f>qs&&(this._+="A"+n+","+n+",0,"+ +(f>=Rs)+","+c+","+(this._x1=t+n*Math.cos(i))+","+(this._y1=e+n*Math.sin(i))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var Is=Math.abs,Ws=Math.atan2,Hs=Math.cos,Ys=Math.max,Vs=Math.min,Gs=Math.sin,Xs=Math.sqrt,Js=1e-12,Zs=Math.PI,Qs=Zs/2,Ks=2*Zs;function tl(t){return t>1?0:t<-1?Zs:Math.acos(t)}function el(t){return t>=1?Qs:t<=-1?-Qs:Math.asin(t)}function nl(t){return t.innerRadius}function rl(t){return t.outerRadius}function il(t){return t.startAngle}function ol(t){return t.endAngle}function al(t){return t&&t.padAngle}function ul(t,e,n,r,i,o,a,u){var s=n-t,l=r-e,c=a-i,f=u-o,h=f*s-c*l;if(!(h*hS*S+B*B&&(A=E,M=D),{cx:A,cy:M,x01:-c,y01:-f,x11:A*(i/b-1),y11:M*(i/b-1)}}function ll(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function cl(t){this._context=t}function fl(t){return new cl(t)}function hl(t){return t[0]}function dl(t){return t[1]}function pl(t,e){var n=js(!0),r=null,i=fl,o=null;function a(a){var u,s,l,c=(a=ll(a)).length,f=!1;for(null==r&&(o=i(l=Ps())),u=0;u<=c;++u)!(u=c;--f)u.point(m[f],y[f]);u.lineEnd(),u.areaEnd()}g&&(m[l]=+t(h,l,s),y[l]=+e(h,l,s),u.point(r?+r(h,l,s):m[l],n?+n(h,l,s):y[l]))}if(d)return u=null,d+""||null}function l(){return pl().defined(i).curve(a).context(o)}return t="function"==typeof t?t:void 0===t?hl:js(+t),e="function"==typeof e?e:js(void 0===e?0:+e),n="function"==typeof n?n:void 0===n?dl:js(+n),s.x=function(e){return arguments.length?(t="function"==typeof e?e:js(+e),r=null,s):t},s.x0=function(e){return arguments.length?(t="function"==typeof e?e:js(+e),s):t},s.x1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:js(+t),s):r},s.y=function(t){return arguments.length?(e="function"==typeof t?t:js(+t),n=null,s):e},s.y0=function(t){return arguments.length?(e="function"==typeof t?t:js(+t),s):e},s.y1=function(t){return arguments.length?(n=null==t?null:"function"==typeof t?t:js(+t),s):n},s.lineX0=s.lineY0=function(){return l().x(t).y(e)},s.lineY1=function(){return l().x(t).y(n)},s.lineX1=function(){return l().x(r).y(e)},s.defined=function(t){return arguments.length?(i="function"==typeof t?t:js(!!t),s):i},s.curve=function(t){return arguments.length?(a=t,null!=o&&(u=a(o)),s):a},s.context=function(t){return arguments.length?(null==t?o=u=null:u=a(o=t),s):o},s}cl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}};var ml={draw:function(t,e){var n=Math.sqrt(e/Zs);t.moveTo(n,0),t.arc(0,0,n,0,Ks)}};function yl(){}function vl(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function _l(t){this._context=t}function xl(t){this._context=t}function bl(t){this._context=t}function wl(t,e){this._basis=new _l(t),this._beta=e}_l.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:vl(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:vl(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},xl.prototype={areaStart:yl,areaEnd:yl,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:vl(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},bl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:vl(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},wl.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var r,i=t[0],o=e[0],a=t[n]-i,u=e[n]-o,s=-1;++s<=n;)r=s/n,this._basis.point(this._beta*t[s]+(1-this._beta)*(i+r*a),this._beta*e[s]+(1-this._beta)*(o+r*u));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var kl=function t(e){function n(t){return 1===e?new _l(t):new wl(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function Al(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function Ml(t,e){this._context=t,this._k=(1-e)/6}Ml.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Al(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Al(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var El=function t(e){function n(t){return new Ml(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Dl(t,e){this._context=t,this._k=(1-e)/6}Dl.prototype={areaStart:yl,areaEnd:yl,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Al(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Cl=function t(e){function n(t){return new Dl(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Fl(t,e){this._context=t,this._k=(1-e)/6}Fl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Al(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Sl=function t(e){function n(t){return new Fl(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Bl(t,e,n){var r=t._x1,i=t._y1,o=t._x2,a=t._y2;if(t._l01_a>Js){var u=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,s=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*u-t._x0*t._l12_2a+t._x2*t._l01_2a)/s,i=(i*u-t._y0*t._l12_2a+t._y2*t._l01_2a)/s}if(t._l23_a>Js){var l=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,c=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*l+t._x1*t._l23_2a-e*t._l12_2a)/c,a=(a*l+t._y1*t._l23_2a-n*t._l12_2a)/c}t._context.bezierCurveTo(r,i,o,a,t._x2,t._y2)}function Tl(t,e){this._context=t,this._alpha=e}Tl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Bl(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var zl=function t(e){function n(t){return e?new Tl(t,e):new Ml(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Nl(t,e){this._context=t,this._alpha=e}Nl.prototype={areaStart:yl,areaEnd:yl,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Bl(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Ol=function t(e){function n(t){return e?new Nl(t,e):new Dl(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Rl(t,e){this._context=t,this._alpha=e}Rl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Bl(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var $l=function t(e){function n(t){return e?new Rl(t,e):new Fl(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function ql(t){this._context=t}function Ll(t){return t<0?-1:1}function Ul(t,e,n){var r=t._x1-t._x0,i=e-t._x1,o=(t._y1-t._y0)/(r||i<0&&-0),a=(n-t._y1)/(i||r<0&&-0),u=(o*i+a*r)/(r+i);return(Ll(o)+Ll(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(u))||0}function Pl(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function jl(t,e,n){var r=t._x0,i=t._y0,o=t._x1,a=t._y1,u=(o-r)/3;t._context.bezierCurveTo(r+u,i+u*e,o-u,a-u*n,o,a)}function Il(t){this._context=t}function Wl(t){this._context=new Hl(t)}function Hl(t){this._context=t}function Yl(t){this._context=t}function Vl(t){var e,n,r=t.length-1,i=new Array(r),o=new Array(r),a=new Array(r);for(i[0]=0,o[0]=2,a[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(a[e]-i[e+1])/o[e];for(o[r-1]=(t[r]+i[r-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};const Jl=()=>"undefined"!=typeof Image?Image:null;function Zl(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}function Ql(t,e){switch(arguments.length){case 0:break;case 1:"function"==typeof t?this.interpolator(t):this.range(t);break;default:this.domain(t),"function"==typeof e?this.interpolator(e):this.range(e)}return this}const Kl=Symbol("implicit");function tc(){var t=new Map,e=[],n=[],r=Kl;function i(i){var o=i+"",a=t.get(o);if(!a){if(r!==Kl)return r;t.set(o,a=e.push(i))}return n[(a-1)%n.length]}return i.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new Map;for(const r of n){const n=r+"";t.has(n)||t.set(n,e.push(r))}return i},i.range=function(t){return arguments.length?(n=Array.from(t),i):n.slice()},i.unknown=function(t){return arguments.length?(r=t,i):r},i.copy=function(){return tc(e,n).unknown(r)},Zl.apply(i,arguments),i}function ec(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function nc(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function rc(){}var ic=.7,oc=1/ic,ac="\\s*([+-]?\\d+)\\s*",uc="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",sc="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",lc=/^#([0-9a-f]{3,8})$/,cc=new RegExp("^rgb\\("+[ac,ac,ac]+"\\)$"),fc=new RegExp("^rgb\\("+[sc,sc,sc]+"\\)$"),hc=new RegExp("^rgba\\("+[ac,ac,ac,uc]+"\\)$"),dc=new RegExp("^rgba\\("+[sc,sc,sc,uc]+"\\)$"),pc=new RegExp("^hsl\\("+[uc,sc,sc]+"\\)$"),gc=new RegExp("^hsla\\("+[uc,sc,sc,uc]+"\\)$"),mc={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function yc(){return this.rgb().formatHex()}function vc(){return this.rgb().formatRgb()}function _c(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=lc.exec(t))?(n=e[1].length,e=parseInt(e[1],16),6===n?xc(e):3===n?new Ac(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?bc(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?bc(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=cc.exec(t))?new Ac(e[1],e[2],e[3],1):(e=fc.exec(t))?new Ac(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=hc.exec(t))?bc(e[1],e[2],e[3],e[4]):(e=dc.exec(t))?bc(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=pc.exec(t))?Cc(e[1],e[2]/100,e[3]/100,1):(e=gc.exec(t))?Cc(e[1],e[2]/100,e[3]/100,e[4]):mc.hasOwnProperty(t)?xc(mc[t]):"transparent"===t?new Ac(NaN,NaN,NaN,0):null}function xc(t){return new Ac(t>>16&255,t>>8&255,255&t,1)}function bc(t,e,n,r){return r<=0&&(t=e=n=NaN),new Ac(t,e,n,r)}function wc(t){return t instanceof rc||(t=_c(t)),t?new Ac((t=t.rgb()).r,t.g,t.b,t.opacity):new Ac}function kc(t,e,n,r){return 1===arguments.length?wc(t):new Ac(t,e,n,null==r?1:r)}function Ac(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function Mc(){return"#"+Dc(this.r)+Dc(this.g)+Dc(this.b)}function Ec(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function Dc(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function Cc(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Bc(t,e,n,r)}function Fc(t){if(t instanceof Bc)return new Bc(t.h,t.s,t.l,t.opacity);if(t instanceof rc||(t=_c(t)),!t)return new Bc;if(t instanceof Bc)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),o=Math.max(e,n,r),a=NaN,u=o-i,s=(o+i)/2;return u?(a=e===o?(n-r)/u+6*(n0&&s<1?0:a,new Bc(a,u,s,t.opacity)}function Sc(t,e,n,r){return 1===arguments.length?Fc(t):new Bc(t,e,n,null==r?1:r)}function Bc(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function Tc(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}ec(rc,_c,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:yc,formatHex:yc,formatHsl:function(){return Fc(this).formatHsl()},formatRgb:vc,toString:vc}),ec(Ac,kc,nc(rc,{brighter:function(t){return t=null==t?oc:Math.pow(oc,t),new Ac(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?ic:Math.pow(ic,t),new Ac(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Mc,formatHex:Mc,formatRgb:Ec,toString:Ec})),ec(Bc,Sc,nc(rc,{brighter:function(t){return t=null==t?oc:Math.pow(oc,t),new Bc(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?ic:Math.pow(ic,t),new Bc(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new Ac(Tc(t>=240?t-240:t+120,i,r),Tc(t,i,r),Tc(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));const zc=Math.PI/180,Nc=180/Math.PI,Oc=.96422,Rc=.82521,$c=4/29,qc=6/29,Lc=3*qc*qc;function Uc(t){if(t instanceof jc)return new jc(t.l,t.a,t.b,t.opacity);if(t instanceof Xc)return Jc(t);t instanceof Ac||(t=wc(t));var e,n,r=Yc(t.r),i=Yc(t.g),o=Yc(t.b),a=Ic((.2225045*r+.7168786*i+.0606169*o)/1);return r===i&&i===o?e=n=a:(e=Ic((.4360747*r+.3850649*i+.1430804*o)/Oc),n=Ic((.0139322*r+.0971045*i+.7141733*o)/Rc)),new jc(116*a-16,500*(e-a),200*(a-n),t.opacity)}function Pc(t,e,n,r){return 1===arguments.length?Uc(t):new jc(t,e,n,null==r?1:r)}function jc(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function Ic(t){return t>.008856451679035631?Math.pow(t,1/3):t/Lc+$c}function Wc(t){return t>qc?t*t*t:Lc*(t-$c)}function Hc(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Yc(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Vc(t){if(t instanceof Xc)return new Xc(t.h,t.c,t.l,t.opacity);if(t instanceof jc||(t=Uc(t)),0===t.a&&0===t.b)return new Xc(NaN,0=1?(n=1,e-1):Math.floor(n*e),i=t[r],o=t[r+1],a=r>0?t[r-1]:2*i-o,u=r()=>t;function df(t,e){return function(n){return t+n*e}}function pf(t,e){var n=e-t;return n?df(t,n>180||n<-180?n-360*Math.round(n/360):n):hf(isNaN(t)?e:t)}function gf(t){return 1==(t=+t)?mf:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):hf(isNaN(e)?n:e)}}function mf(t,e){var n=e-t;return n?df(t,n):hf(isNaN(t)?e:t)}var yf=function t(e){var n=gf(e);function r(t,e){var r=n((t=kc(t)).r,(e=kc(e)).r),i=n(t.g,e.g),o=n(t.b,e.b),a=mf(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=o(e),t.opacity=a(e),t+""}}return r.gamma=t,r}(1);function vf(t){return function(e){var n,r,i=e.length,o=new Array(i),a=new Array(i),u=new Array(i);for(n=0;no&&(i=e.slice(o,i),u[a]?u[a]+=i:u[++a]=i),(n=n[0])===(r=r[0])?u[a]?u[a]+=r:u[++a]=r:(u[++a]=null,s.push({i:a,x:Mf(n,r)})),o=Cf.lastIndex;return o180?e+=360:e-t>180&&(t+=360),o.push({i:n.push(i(n)+"rotate(",null,r)-2,x:Mf(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(o.rotate,a.rotate,u,s),function(t,e,n,o){t!==e?o.push({i:n.push(i(n)+"skewX(",null,r)-2,x:Mf(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(o.skewX,a.skewX,u,s),function(t,e,n,r,o,a){if(t!==n||e!==r){var u=o.push(i(o)+"scale(",null,",",null,")");a.push({i:u-4,x:Mf(t,n)},{i:u-2,x:Mf(e,r)})}else 1===n&&1===r||o.push(i(o)+"scale("+n+","+r+")")}(o.scaleX,o.scaleY,a.scaleX,a.scaleY,u,s),o=a=null,function(t){for(var e,n=-1,r=s.length;++ne&&(n=t,t=e,e=n),function(n){return Math.max(t,Math.min(e,n))}}(a[0],a[t-1])),r=t>2?rh:nh,i=o=null,f}function f(e){return null==e||isNaN(e=+e)?n:(i||(i=r(a.map(t),u,s)))(t(l(e)))}return f.invert=function(n){return l(e((o||(o=r(u,a.map(t),Mf)))(n)))},f.domain=function(t){return arguments.length?(a=Array.from(t,Qf),c()):a.slice()},f.range=function(t){return arguments.length?(u=Array.from(t),c()):u.slice()},f.rangeRound=function(t){return u=Array.from(t),s=Bf,c()},f.clamp=function(t){return arguments.length?(l=!!t||th,c()):l!==th},f.interpolate=function(t){return arguments.length?(s=t,c()):s},f.unknown=function(t){return arguments.length?(n=t,f):n},function(n,r){return t=n,e=r,c()}}function ah(){return oh()(th,th)}function uh(t,e,n,r){var i,o=ie(t,e,n);switch((r=_e(null==r?",f":r)).type){case"s":var a=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=Be(o,a))||(r.precision=i),Ee(r,a);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=Te(o,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=Se(o))||(r.precision=i-2*("%"===r.type))}return Me(r)}function sh(t){var e=t.domain;return t.ticks=function(t){var n=e();return ne(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return uh(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i,o=e(),a=0,u=o.length-1,s=o[a],l=o[u],c=10;for(l0;){if((i=re(s,l,n))===r)return o[a]=s,o[u]=l,e(o);if(i>0)s=Math.floor(s/i)*i,l=Math.ceil(l/i)*i;else{if(!(i<0))break;s=Math.ceil(s*i)/i,l=Math.floor(l*i)/i}r=i}return t},t}function lh(t,e){var n,r=0,i=(t=t.slice()).length-1,o=t[r],a=t[i];return a0){for(;h<=d;++h)for(c=1,l=n(h);cs)break;g.push(f)}}else for(;h<=d;++h)for(c=o-1,l=n(h);c>=1;--c)if(!((f=l*c)s)break;g.push(f)}2*g.length0?r:1:0}const Ph="linear",jh="log",Ih="pow",Wh="sqrt",Hh="symlog",Yh="time",Vh="utc",Gh="sequential",Xh="quantile",Jh="quantize",Zh="threshold",Qh="ordinal",Kh="point",td="band",ed="bin-ordinal",nd="continuous",rd="discrete",id="discretizing",od="interpolating",ad="temporal";function ud(){const t=tc().unknown(void 0),e=t.domain,n=t.range;let r,i,o=[0,1],a=!1,u=0,s=0,l=.5;function c(){const t=e().length,c=o[1]d+r*t));return n(c?p.reverse():p)}return delete t.unknown,t.domain=function(t){return arguments.length?(e(t),c()):e()},t.range=function(t){return arguments.length?(o=[+t[0],+t[1]],c()):o.slice()},t.rangeRound=function(t){return o=[+t[0],+t[1]],a=!0,c()},t.bandwidth=function(){return i},t.step=function(){return r},t.round=function(t){return arguments.length?(a=!!t,c()):a},t.padding=function(t){return arguments.length?(s=Math.max(0,Math.min(1,t)),u=s,c()):u},t.paddingInner=function(t){return arguments.length?(u=Math.max(0,Math.min(1,t)),c()):u},t.paddingOuter=function(t){return arguments.length?(s=Math.max(0,Math.min(1,t)),c()):s},t.align=function(t){return arguments.length?(l=Math.max(0,Math.min(1,t)),c()):l},t.invertRange=function(t){if(null==t[0]||null==t[1])return;const r=o[1]o[1-r])?void 0:(s=Math.max(0,Jt(a,f)-1),l=f===h?s:Jt(a,h)-1,f-a[s]>i+1e-10&&++s,r&&(c=s,s=u-l,l=u-c),s>l?void 0:e().slice(s,l+1))},t.invert=function(e){const n=t.invertRange([e,e]);return n?n[0]:n},t.copy=function(){return ud().domain(e()).range(o).round(a).paddingInner(u).paddingOuter(s).align(l)},c()}function sd(t){const e=t.copy;return t.padding=t.paddingOuter,delete t.paddingInner,t.copy=function(){return sd(e())},t}var ld=Array.prototype.map;function cd(t){return ld.call(t,E)}const fd=Array.prototype.slice;const hd={};function dd(t,e,n){const r=function(){const n=e();return n.invertRange||(n.invertRange=n.invert?function(t){return function(e){let n,r=e[0],i=e[1];return i=u&&n[o]<=s&&(l<0&&(l=o),r=o);if(!(l<0))return u=t.invertExtent(n[l]),s=t.invertExtent(n[r]),[void 0===u[0]?u[1]:u[0],void 0===s[1]?s[0]:s[1]]}}(n):void 0),n.type=t,n};return r.metadata=Ct(W(n)),r}function pd(t,e,n){return arguments.length>1?(hd[t]=dd(t,e,n),this):gd(t)?hd[t]:void 0}function gd(t){return it(hd,t)}function md(t,e){const n=hd[t];return n&&n.metadata[e]}function yd(t){return md(t,nd)}function vd(t){return md(t,rd)}function _d(t){return md(t,id)}function xd(t){return md(t,jh)}function bd(t){return md(t,od)}function wd(t){return md(t,Xh)}pd("identity",(function t(e){var n;function r(t){return null==t||isNaN(t=+t)?n:t}return r.invert=r,r.domain=r.range=function(t){return arguments.length?(e=Array.from(t,Qf),r):e.slice()},r.unknown=function(t){return arguments.length?(n=t,r):n},r.copy=function(){return t(e).unknown(n)},e=arguments.length?Array.from(e,Qf):[0,1],sh(r)})),pd(Ph,(function t(){var e=ah();return e.copy=function(){return ih(e,t())},Zl.apply(e,arguments),sh(e)}),nd),pd(jh,(function t(){var e=mh(oh()).domain([1,10]);return e.copy=function(){return ih(e,t()).base(e.base())},Zl.apply(e,arguments),e}),[nd,jh]),pd(Ih,Ah,nd),pd(Wh,(function(){return Ah.apply(null,arguments).exponent(.5)}),nd),pd(Hh,(function t(){var e=_h(oh());return e.copy=function(){return ih(e,t()).constant(e.constant())},Zl.apply(e,arguments)}),nd),pd(Yh,(function(){return Zl.apply(zh(Ze,Je,Ve,He,We,Ie,je,Re,wr).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}),[nd,ad]),pd(Vh,(function(){return Zl.apply(zh(un,an,nn,tn,Ke,Qe,je,Re,Ar).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}),[nd,ad]),pd(Gh,Rh,[nd,od]),pd("sequential-linear",Rh,[nd,od]),pd("sequential-log",(function t(){var e=mh(Nh()).domain([1,10]);return e.copy=function(){return Oh(e,t()).base(e.base())},Ql.apply(e,arguments)}),[nd,od,jh]),pd("sequential-pow",$h,[nd,od]),pd("sequential-sqrt",(function(){return $h.apply(null,arguments).exponent(.5)}),[nd,od]),pd("sequential-symlog",(function t(){var e=_h(Nh());return e.copy=function(){return Oh(e,t()).constant(e.constant())},Ql.apply(e,arguments)}),[nd,od]),pd("diverging-linear",(function t(){var e=sh(qh()(th));return e.copy=function(){return Oh(e,t())},Ql.apply(e,arguments)}),[nd,od]),pd("diverging-log",(function t(){var e=mh(qh()).domain([.1,1,10]);return e.copy=function(){return Oh(e,t()).base(e.base())},Ql.apply(e,arguments)}),[nd,od,jh]),pd("diverging-pow",Lh,[nd,od]),pd("diverging-sqrt",(function(){return Lh.apply(null,arguments).exponent(.5)}),[nd,od]),pd("diverging-symlog",(function t(){var e=_h(qh());return e.copy=function(){return Oh(e,t()).constant(e.constant())},Ql.apply(e,arguments)}),[nd,od]),pd(Xh,(function t(){var e,n=[],r=[],i=[];function o(){var t=0,e=Math.max(1,r.length);for(i=new Array(e-1);++t0?i[e-1]:n[0],e=i?[o[i-1],r]:[o[e-1],o[e]]},u.unknown=function(t){return arguments.length?(e=t,u):u},u.thresholds=function(){return o.slice()},u.copy=function(){return t().domain([n,r]).range(a).unknown(e)},Zl.apply(sh(u),arguments)}),id),pd(Zh,(function t(){var e,n=[.5],r=[0,1],i=1;function o(t){return null!=t&&t<=t?r[Jt(n,t,0,i)]:e}return o.domain=function(t){return arguments.length?(n=Array.from(t),i=Math.min(n.length,r.length-1),o):n.slice()},o.range=function(t){return arguments.length?(r=Array.from(t),i=Math.min(n.length,r.length-1),o):r.slice()},o.invertExtent=function(t){var e=r.indexOf(t);return[n[e-1],n[e]]},o.unknown=function(t){return arguments.length?(e=t,o):e},o.copy=function(){return t().domain(n).range(r).unknown(e)},Zl.apply(o,arguments)}),id),pd(ed,(function t(){let e=[],n=[];function r(t){return null==t||t!=t?void 0:n[(Jt(e,t)-1)%n.length]}return r.domain=function(t){return arguments.length?(e=cd(t),r):e.slice()},r.range=function(t){return arguments.length?(n=fd.call(t),r):n.slice()},r.tickFormat=function(t,n){return uh(e[0],M(e),null==t?10:t,n)},r.copy=function(){return t().domain(r.domain()).range(r.range())},r}),[rd,id]),pd(Qh,tc,rd),pd(td,ud,rd),pd(Kh,(function(){return sd(ud().paddingInner(1))}),rd);const kd=["clamp","base","constant","exponent"];function Ad(t,e){const n=e[0],r=M(e)-n;return function(e){return t(n+e*r)}}function Md(t,e,n){return Jf(Cd(e||"rgb",n),t)}function Ed(t,e){const n=new Array(e),r=e+1;for(let i=0;it[e]?a[e](t[e]()):0)),a):Q(.5)}function Cd(t,e){const n=Zf[function(t){return"interpolate"+t.toLowerCase().split("-").map((t=>t[0].toUpperCase()+t.slice(1))).join("")}(t)];return null!=e&&n&&n.gamma?n.gamma(e):n}function Fd(t){const e=t.length/6|0,n=new Array(e);for(let r=0;r1?(Bd[t]=e,this):Bd[t]}Sd({category10:"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf",category20:"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5",category20b:"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6",category20c:"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9",tableau10:"4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac",tableau20:"4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5",accent:"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666",dark2:"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666",paired:"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928",pastel1:"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2",pastel2:"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc",set1:"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999",set2:"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3",set3:"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"},Fd),Sd({blues:"cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90",greens:"d3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429",greys:"e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e",oranges:"fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303",purples:"e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c",reds:"fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13",blueGreen:"d5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429",bluePurple:"ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71",greenBlue:"d3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1",orangeRed:"fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403",purpleBlue:"dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281",purpleBlueGreen:"dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353",purpleRed:"dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a",redPurple:"fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174",yellowGreen:"e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034",yellowOrangeBrown:"feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204",yellowOrangeRed:"fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225",blueOrange:"134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07",brownBlueGreen:"704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147",purpleGreen:"5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29",purpleOrange:"4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07",redBlue:"8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85",redGrey:"8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434",yellowGreenBlue:"eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185",redYellowBlue:"a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695",redYellowGreen:"a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837",pinkYellowGreen:"8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419",spectral:"9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2",viridis:"440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725",magma:"0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf",inferno:"0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4",plasma:"0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921",cividis:"00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647",rainbow:"6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa",sinebow:"ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040",turbo:"23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00",browns:"eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632",tealBlues:"bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985",teals:"bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667",warmGreys:"dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e",goldGreen:"f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36",goldOrange:"f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26",goldRed:"f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e",lightGreyRed:"efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b",lightGreyTeal:"e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc",lightMulti:"e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c",lightOrange:"f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b",lightTealBlue:"e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988",darkBlue:"3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff",darkGold:"3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff",darkGreen:"3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa",darkMulti:"3737371f5287197d8c29a86995ce3fffe800ffffff",darkRed:"3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c"},(t=>Md(Fd(t))));const zd="symbol",Nd=t=>_(t)?t.map((t=>String(t))):String(t),Od=(t,e)=>t[1]-e[1],Rd=(t,e)=>e[1]-t[1];function $d(t,e,n){let r;return dt(e)&&(t.bins&&(e=Math.max(e,t.bins.length)),null!=n&&(e=Math.min(e,Math.floor(wt(t.domain())/n||1)))),x(e)&&(r=e.step,e=e.interval),gt(e)&&(e=t.type===Yh?Gn(e):t.type==Vh?Xn(e):s("Only time and utc scales accept interval strings."),r&&(e=e.every(r))),e}function qd(t,e,n){let r=t.range(),i=r[0],o=M(r),a=Od;if(i>o&&(r=o,o=i,i=r,a=Rd),i=Math.floor(i),o=Math.ceil(o),e=e.map((e=>[e,t(e)])).filter((t=>i<=t[1]&&t[1]<=o)).sort(a).map((t=>t[0])),n>0&&e.length>1){const t=[e[0],M(e)];for(;e.length>n&&e.length>=3;)e=e.filter(((t,e)=>!(e%2)));e.length<3&&(e=t)}return e}function Ld(t,e){return t.bins?qd(t,t.bins):t.ticks?t.ticks(e):t.domain()}function Ud(t,e,n,r,i,o){const a=e.type;let u=Nd;if(a===Yh||i===Yh)u=t.timeFormat(r);else if(a===Vh||i===Vh)u=t.utcFormat(r);else if(xd(a)){const i=t.formatFloat(r);if(o||e.bins)u=i;else{const t=Pd(e,n,!1);u=e=>t(e)?i(e):""}}else if(e.tickFormat){const i=e.domain();u=t.formatSpan(i[0],i[i.length-1],n,r)}else r&&(u=t.format(r));return u}function Pd(t,e,n){const r=Ld(t,e),i=t.base(),o=Math.log(i),a=Math.max(1,i*e/r.length),u=t=>{let e=t/Math.pow(i,Math.round(Math.log(t)/o));return e*i1?r[1]-r[0]:r[0];for(o=1;ojd[t.type]||t.bins)(e)?Yd(u):"discrete"===r?Gd(u):Xd(u)}const Yd=t=>(e,n,r)=>{const i=Vd(r[n+1],Vd(r.max,1/0)),o=Jd(e,t),a=Jd(i,t);return o&&a?o+" – "+a:a?"< "+a:"≥ "+o},Vd=(t,e)=>null!=t?t:e,Gd=t=>(e,n)=>n?t(e):null,Xd=t=>e=>t(e),Jd=(t,e)=>Number.isFinite(t)?e(t):null;function Zd(t,e,n,r){const i=r||e.type;return gt(n)&&function(t){return md(t,ad)}(i)&&(n=n.replace(/%a/g,"%A").replace(/%b/g,"%B")),n||i!==Yh?n||i!==Vh?Hd(t,e,5,null,n,r,!0):t.utcFormat("%A, %d %B %Y, %X UTC"):t.timeFormat("%A, %d %B %Y, %X")}function Qd(t,e,n){n=n||{};const r=Math.max(3,n.maxlen||7),i=Zd(t,e,n.format,n.formatType);if(_d(e.type)){const t=Wd(e).slice(1).map(i),n=t.length;return`${n} boundar${1===n?"y":"ies"}: ${t.join(", ")}`}if(vd(e.type)){const t=e.domain(),n=t.length;return`${n} value${1===n?"":"s"}: ${n>r?t.slice(0,r-2).map(i).join(", ")+", ending with "+t.slice(-1).map(i):t.map(i).join(", ")}`}{const t=e.domain();return`values from ${i(t[0])} to ${i(M(t))}`}}let Kd=0;const tp="p_";function ep(t){return t&&t.gradient}function np(t,e,n){const r=t.gradient;let i=t.id,o="radial"===r?tp:"";return i||(i=t.id="gradient_"+Kd++,"radial"===r?(t.x1=rp(t.x1,.5),t.y1=rp(t.y1,.5),t.r1=rp(t.r1,0),t.x2=rp(t.x2,.5),t.y2=rp(t.y2,.5),t.r2=rp(t.r2,.5),o=tp):(t.x1=rp(t.x1,0),t.y1=rp(t.y1,0),t.x2=rp(t.x2,1),t.y2=rp(t.y2,0))),e[i]=t,"url("+(n||"")+"#"+o+i+")"}function rp(t,e){return null!=t?t:e}function ip(t,e){var n,r=[];return n={gradient:"linear",x1:t?t[0]:0,y1:t?t[1]:0,x2:e?e[0]:1,y2:e?e[1]:0,stops:r,stop:function(t,e){return r.push({offset:t,color:e}),n}}}const op={basis:{curve:function(t){return new _l(t)}},"basis-closed":{curve:function(t){return new xl(t)}},"basis-open":{curve:function(t){return new bl(t)}},bundle:{curve:kl,tension:"beta",value:.85},cardinal:{curve:El,tension:"tension",value:0},"cardinal-open":{curve:Sl,tension:"tension",value:0},"cardinal-closed":{curve:Cl,tension:"tension",value:0},"catmull-rom":{curve:zl,tension:"alpha",value:.5},"catmull-rom-closed":{curve:Ol,tension:"alpha",value:.5},"catmull-rom-open":{curve:$l,tension:"alpha",value:.5},linear:{curve:fl},"linear-closed":{curve:function(t){return new ql(t)}},monotone:{horizontal:function(t){return new Wl(t)},vertical:function(t){return new Il(t)}},natural:{curve:function(t){return new Yl(t)}},step:{curve:function(t){return new Gl(t,.5)}},"step-after":{curve:function(t){return new Gl(t,1)}},"step-before":{curve:function(t){return new Gl(t,0)}}};function ap(t,e,n){var r=it(op,t)&&op[t],i=null;return r&&(i=r.curve||r[e||"vertical"],r.tension&&null!=n&&(i=i[r.tension](n))),i}const up={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},sp=[/([MLHVCSQTAZmlhvcsqtaz])/g,/###/,/(\.\d+)(\.\d)/g,/(\d)([-+])/g,/\s|,|###/];function lp(t){const e=[];let n,r,i,o,a,u,s,l,c,f;const h=t.slice().replace(sp[0],"###$1").split(sp[1]).slice(1);for(s=0,c=h.length;su){const t=i.length;for(l=1,e.push([a].concat(i.slice(l,l+=u))),a="M"===a?"L":"m"===a?"l":a;l1&&(g=Math.sqrt(g),n*=g,r*=g);const m=h/n,y=f/n,v=-f/r,_=h/r,x=m*u+y*s,b=v*u+_*s,w=m*t+y*e,k=v*t+_*e;let A=1/((w-x)*(w-x)+(k-b)*(k-b))-.25;A<0&&(A=0);let M=Math.sqrt(A);o==i&&(M=-M);const E=.5*(x+w)-M*(k-b),D=.5*(b+k)+M*(w-x),C=Math.atan2(b-D,x-E);let F=Math.atan2(k-D,w-E)-C;F<0&&1===o?F+=hp:F>0&&0===o&&(F-=hp);const S=Math.ceil(Math.abs(F/(fp+.001))),B=[];for(let t=0;t+t}function Tp(t,e,n){return Math.max(e,Math.min(t,n))}function zp(){var t=Dp,e=Cp,n=Fp,r=Sp,i=Bp(0),o=i,a=i,u=i,s=null;function l(l,c,f){var h,d=null!=c?c:+t.call(this,l),p=null!=f?f:+e.call(this,l),g=+n.call(this,l),m=+r.call(this,l),y=Math.min(g,m)/2,v=Tp(+i.call(this,l),0,y),_=Tp(+o.call(this,l),0,y),x=Tp(+a.call(this,l),0,y),b=Tp(+u.call(this,l),0,y);if(s||(s=h=Ps()),v<=0&&_<=0&&x<=0&&b<=0)s.rect(d,p,g,m);else{var w=d+g,k=p+m;s.moveTo(d+v,p),s.lineTo(w-_,p),s.bezierCurveTo(w-Ep*_,p,w,p+Ep*_,w,p+_),s.lineTo(w,k-b),s.bezierCurveTo(w,k-Ep*b,w-Ep*b,k,w-b,k),s.lineTo(d+x,k),s.bezierCurveTo(d+Ep*x,k,d,k-Ep*x,d,k-x),s.lineTo(d,p+v),s.bezierCurveTo(d,p+Ep*v,d+Ep*v,p,d+v,p),s.closePath()}if(h)return s=null,h+""||null}return l.x=function(e){return arguments.length?(t=Bp(e),l):t},l.y=function(t){return arguments.length?(e=Bp(t),l):e},l.width=function(t){return arguments.length?(n=Bp(t),l):n},l.height=function(t){return arguments.length?(r=Bp(t),l):r},l.cornerRadius=function(t,e,n,r){return arguments.length?(i=Bp(t),o=null!=e?Bp(e):i,u=null!=n?Bp(n):i,a=null!=r?Bp(r):o,l):i},l.context=function(t){return arguments.length?(s=null==t?null:t,l):s},l}function Np(){var t,e,n,r,i,o,a,u,s=null;function l(t,e,n){const r=n/2;if(i){var l=a-e,c=t-o;if(l||c){var f=Math.sqrt(l*l+c*c),h=(l/=f)*u,d=(c/=f)*u,p=Math.atan2(c,l);s.moveTo(o-h,a-d),s.lineTo(t-l*r,e-c*r),s.arc(t,e,r,p-Math.PI,p),s.lineTo(o+h,a+d),s.arc(o,a,u,p,p+Math.PI)}else s.arc(t,e,r,0,hp);s.closePath()}else i=1;o=t,a=e,u=r}function c(o){var a,u,c,f=o.length,h=!1;for(null==s&&(s=c=Ps()),a=0;a<=f;++a)!(at.x||0,$p=t=>t.y||0,qp=t=>!(!1===t.defined),Lp=function(){var t=nl,e=rl,n=js(0),r=null,i=il,o=ol,a=al,u=null;function s(){var s,l,c=+t.apply(this,arguments),f=+e.apply(this,arguments),h=i.apply(this,arguments)-Qs,d=o.apply(this,arguments)-Qs,p=Is(d-h),g=d>h;if(u||(u=s=Ps()),fJs)if(p>Ks-Js)u.moveTo(f*Hs(h),f*Gs(h)),u.arc(0,0,f,h,d,!g),c>Js&&(u.moveTo(c*Hs(d),c*Gs(d)),u.arc(0,0,c,d,h,g));else{var m,y,v=h,_=d,x=h,b=d,w=p,k=p,A=a.apply(this,arguments)/2,M=A>Js&&(r?+r.apply(this,arguments):Xs(c*c+f*f)),E=Vs(Is(f-c)/2,+n.apply(this,arguments)),D=E,C=E;if(M>Js){var F=el(M/c*Gs(A)),S=el(M/f*Gs(A));(w-=2*F)>Js?(x+=F*=g?1:-1,b-=F):(w=0,x=b=(h+d)/2),(k-=2*S)>Js?(v+=S*=g?1:-1,_-=S):(k=0,v=_=(h+d)/2)}var B=f*Hs(v),T=f*Gs(v),z=c*Hs(b),N=c*Gs(b);if(E>Js){var O,R=f*Hs(_),$=f*Gs(_),q=c*Hs(x),L=c*Gs(x);if(pJs?C>Js?(m=sl(q,L,B,T,f,C,g),y=sl(R,$,z,N,f,C,g),u.moveTo(m.cx+m.x01,m.cy+m.y01),CJs&&w>Js?D>Js?(m=sl(z,N,R,$,c,-D,g),y=sl(B,T,q,L,c,-D,g),u.lineTo(m.cx+m.x01,m.cy+m.y01),Dt.startAngle||0)).endAngle((t=>t.endAngle||0)).padAngle((t=>t.padAngle||0)).innerRadius((t=>t.innerRadius||0)).outerRadius((t=>t.outerRadius||0)).cornerRadius((t=>t.cornerRadius||0)),Up=gl().x(Rp).y1($p).y0((t=>(t.y||0)+(t.height||0))).defined(qp),Pp=gl().y($p).x1(Rp).x0((t=>(t.x||0)+(t.width||0))).defined(qp),jp=pl().x(Rp).y($p).defined(qp),Ip=zp().x(Rp).y($p).width((t=>t.width||0)).height((t=>t.height||0)).cornerRadius((t=>Op(t.cornerRadiusTopLeft,t.cornerRadius)||0),(t=>Op(t.cornerRadiusTopRight,t.cornerRadius)||0),(t=>Op(t.cornerRadiusBottomRight,t.cornerRadius)||0),(t=>Op(t.cornerRadiusBottomLeft,t.cornerRadius)||0)),Wp=function(t,e){var n=null;function r(){var r;if(n||(n=r=Ps()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),r)return n=null,r+""||null}return t="function"==typeof t?t:js(t||ml),e="function"==typeof e?e:js(void 0===e?64:+e),r.type=function(e){return arguments.length?(t="function"==typeof e?e:js(e),r):t},r.size=function(t){return arguments.length?(e="function"==typeof t?t:js(+t),r):e},r.context=function(t){return arguments.length?(n=null==t?null:t,r):n},r}().type((t=>Ap(t.shape||"circle"))).size((t=>Op(t.size,64))),Hp=Np().x(Rp).y($p).defined(qp).size((t=>t.size||1));function Yp(t){return t.cornerRadius||t.cornerRadiusTopLeft||t.cornerRadiusTopRight||t.cornerRadiusBottomRight||t.cornerRadiusBottomLeft}function Vp(t,e,n,r){return Ip.context(t)(e,n,r)}var Gp=1;function Xp(){Gp=1}function Jp(t,e,n){var r=e.clip,i=t._defs,o=e.clip_id||(e.clip_id="clip"+Gp++),a=i.clipping[o]||(i.clipping[o]={id:o});return Y(r)?a.path=r(null):Yp(n)?a.path=Vp(null,n,0,0):(a.width=n.width||0,a.height=n.height||0),"url(#"+o+")"}function Zp(t){this.clear(),t&&this.union(t)}function Qp(t){this.mark=t,this.bounds=this.bounds||new Zp}function Kp(t){Qp.call(this,t),this.items=this.items||[]}function tg(t){this._pending=0,this._loader=t||So()}function eg(t){t._pending+=1}function ng(t){t._pending-=1}function rg(t,e,n){if(e.stroke&&0!==e.opacity&&0!==e.strokeOpacity){const r=null!=e.strokeWidth?+e.strokeWidth:1;t.expand(r+(n?function(t,e){return t.strokeJoin&&"miter"!==t.strokeJoin?0:e}(e,r):0))}return t}Zp.prototype={clone(){return new Zp(this)},clear(){return this.x1=+Number.MAX_VALUE,this.y1=+Number.MAX_VALUE,this.x2=-Number.MAX_VALUE,this.y2=-Number.MAX_VALUE,this},empty(){return this.x1===+Number.MAX_VALUE&&this.y1===+Number.MAX_VALUE&&this.x2===-Number.MAX_VALUE&&this.y2===-Number.MAX_VALUE},equals(t){return this.x1===t.x1&&this.y1===t.y1&&this.x2===t.x2&&this.y2===t.y2},set(t,e,n,r){return nthis.x2&&(this.x2=t),e>this.y2&&(this.y2=e),this},expand(t){return this.x1-=t,this.y1-=t,this.x2+=t,this.y2+=t,this},round(){return this.x1=Math.floor(this.x1),this.y1=Math.floor(this.y1),this.x2=Math.ceil(this.x2),this.y2=Math.ceil(this.y2),this},scale(t){return this.x1*=t,this.y1*=t,this.x2*=t,this.y2*=t,this},translate(t,e){return this.x1+=t,this.x2+=t,this.y1+=e,this.y2+=e,this},rotate(t,e,n){const r=this.rotatedPoints(t,e,n);return this.clear().add(r[0],r[1]).add(r[2],r[3]).add(r[4],r[5]).add(r[6],r[7])},rotatedPoints(t,e,n){var{x1:r,y1:i,x2:o,y2:a}=this,u=Math.cos(t),s=Math.sin(t),l=e-e*u+n*s,c=n-e*s-n*u;return[u*r-s*i+l,s*r+u*i+c,u*r-s*a+l,s*r+u*a+c,u*o-s*i+l,s*o+u*i+c,u*o-s*a+l,s*o+u*a+c]},union(t){return t.x1this.x2&&(this.x2=t.x2),t.y2>this.y2&&(this.y2=t.y2),this},intersect(t){return t.x1>this.x1&&(this.x1=t.x1),t.y1>this.y1&&(this.y1=t.y1),t.x2=t.x2&&this.y1<=t.y1&&this.y2>=t.y2},alignsWith(t){return t&&(this.x1==t.x1||this.x2==t.x2||this.y1==t.y1||this.y2==t.y2)},intersects(t){return t&&!(this.x2t.x2||this.y2t.y2)},contains(t,e){return!(tthis.x2||ethis.y2)},width(){return this.x2-this.x1},height(){return this.y2-this.y1}},st(Kp,Qp),tg.prototype={pending(){return this._pending},sanitizeURL(t){const e=this;return eg(e),e._loader.sanitize(t,{context:"href"}).then((t=>(ng(e),t))).catch((()=>(ng(e),null)))},loadImage(t){const e=this,n=Jl();return eg(e),e._loader.sanitize(t,{context:"image"}).then((t=>{const r=t.href;if(!r||!n)throw{url:r};const i=new n,o=it(t,"crossOrigin")?t.crossOrigin:"anonymous";return null!=o&&(i.crossOrigin=o),i.onload=()=>ng(e),i.onerror=()=>ng(e),i.src=r,i})).catch((t=>(ng(e),{complete:!1,width:0,height:0,src:t&&t.url||""})))},ready(){const t=this;return new Promise((e=>{!function n(r){t.pending()?setTimeout((()=>{n(!0)}),10):e(r)}(!1)}))}};const ig=hp-1e-8;let og,ag,ug,sg,lg,cg,fg,hg;const dg=(t,e)=>og.add(t,e),pg=(t,e)=>dg(ag=t,ug=e),gg=t=>dg(t,og.y1),mg=t=>dg(og.x1,t),yg=(t,e)=>lg*t+fg*e,vg=(t,e)=>cg*t+hg*e,_g=(t,e)=>dg(yg(t,e),vg(t,e)),xg=(t,e)=>pg(yg(t,e),vg(t,e));function bg(t,e){return og=t,e?(sg=e*cp,lg=hg=Math.cos(sg),cg=Math.sin(sg),fg=-cg):(lg=hg=1,sg=cg=fg=0),wg}const wg={beginPath(){},closePath(){},moveTo:xg,lineTo:xg,rect(t,e,n,r){sg?(_g(t+n,e),_g(t+n,e+r),_g(t,e+r),xg(t,e)):(dg(t+n,e+r),pg(t,e))},quadraticCurveTo(t,e,n,r){const i=yg(t,e),o=vg(t,e),a=yg(n,r),u=vg(n,r);kg(ag,i,a,gg),kg(ug,o,u,mg),pg(a,u)},bezierCurveTo(t,e,n,r,i,o){const a=yg(t,e),u=vg(t,e),s=yg(n,r),l=vg(n,r),c=yg(i,o),f=vg(i,o);Ag(ag,a,s,c,gg),Ag(ug,u,l,f,mg),pg(c,f)},arc(t,e,n,r,i,o){if(r+=sg,i+=sg,ag=n*Math.cos(i)+t,ug=n*Math.sin(i)+e,Math.abs(i-r)>ig)dg(t-n,e-n),dg(t+n,e+n);else{const a=r=>dg(n*Math.cos(r)+t,n*Math.sin(r)+e);let u,s;if(a(r),a(i),i!==r)if((r%=hp)<0&&(r+=hp),(i%=hp)<0&&(i+=hp),ii;++s,u-=fp)a(u);else for(u=r-r%fp+fp,s=0;s<4&&u1e-14?(s=a*a+u*o,s>=0&&(s=Math.sqrt(s),l=(-a+s)/o,c=(-a-s)/o)):l=.5*u/a,0m)return!1;d>g&&(g=d)}else if(f>0){if(d0&&(t.globalAlpha=n,t.fillStyle=Rg(t,e,e.fill),!0)}var qg=[];function Lg(t,e,n){var r=null!=(r=e.strokeWidth)?r:1;return!(r<=0)&&((n*=null==e.strokeOpacity?1:e.strokeOpacity)>0&&(t.globalAlpha=n,t.strokeStyle=Rg(t,e,e.stroke),t.lineWidth=r,t.lineCap=e.strokeCap||"butt",t.lineJoin=e.strokeJoin||"miter",t.miterLimit=e.strokeMiterLimit||10,t.setLineDash&&(t.setLineDash(e.strokeDash||qg),t.lineDashOffset=e.strokeDashOffset||0),!0))}function Ug(t,e){return t.zindex-e.zindex||t.index-e.index}function Pg(t){if(!t.zdirty)return t.zitems;var e,n,r,i=t.items,o=[];for(n=0,r=i.length;n=0;)if(n=e(i[r]))return n;if(i===o)for(r=(i=t.items).length;--r>=0;)if(!i[r].zindex&&(n=e(i[r])))return n;return null}function Wg(t){return function(e,n,r){jg(n,(n=>{r&&!r.intersects(n.bounds)||Yg(t,e,n,n)}))}}function Hg(t){return function(e,n,r){!n.items.length||r&&!r.intersects(n.bounds)||Yg(t,e,n.items[0],n.items)}}function Yg(t,e,n,r){var i=null==n.opacity?1:n.opacity;0!==i&&(t(e,r)||(zg(e,n),n.fill&&$g(e,n,i)&&e.fill(),n.stroke&&Lg(e,n,i)&&e.stroke()))}function Vg(t){return t=t||g,function(e,n,r,i,o,a){return r*=e.pixelRatio,i*=e.pixelRatio,Ig(n,(n=>{const u=n.bounds;if((!u||u.contains(o,a))&&u)return t(e,n,r,i,o,a)?n:void 0}))}}function Gg(t,e){return function(n,r,i,o){var a,u,s=Array.isArray(r)?r[0]:r,l=null==e?s.fill:e,c=s.stroke&&n.isPointInStroke;return c&&(a=s.strokeWidth,u=s.strokeCap,n.lineWidth=null!=a?a:1,n.lineCap=null!=u?u:"butt"),!t(n,r)&&(l&&n.isPointInPath(i,o)||c&&n.isPointInStroke(i,o))}}function Xg(t){return Vg(Gg(t))}function Jg(t,e){return"translate("+t+","+e+")"}function Zg(t){return"rotate("+t+")"}function Qg(t){return Jg(t.x||0,t.y||0)}function Kg(t,e,n){function r(t,n){var r=n.x||0,i=n.y||0,o=n.angle||0;t.translate(r,i),o&&t.rotate(o*=cp),t.beginPath(),e(t,n),o&&t.rotate(-o),t.translate(-r,-i)}return{type:t,tag:"path",nested:!1,attr:function(t,n){t("transform",function(t){return Jg(t.x||0,t.y||0)+(t.angle?" "+Zg(t.angle):"")}(n)),t("d",e(null,n))},bound:function(t,n){return e(bg(t,n.angle),n),rg(t,n).translate(n.x||0,n.y||0)},draw:Wg(r),pick:Xg(r),isect:n||Cg(r)}}var tm=Kg("arc",(function(t,e){return Lp.context(t)(e)}));function em(t,e,n){function r(t,n){t.beginPath(),e(t,n)}const i=Gg(r);return{type:t,tag:"path",nested:!0,attr:function(t,n){var r=n.mark.items;r.length&&t("d",e(null,r))},bound:function(t,n){var r=n.items;return 0===r.length?t:(e(bg(t),r),rg(t,r[0]))},draw:Hg(r),pick:function(t,e,n,r,o,a){var u=e.items,s=e.bounds;return!u||!u.length||s&&!s.contains(o,a)?null:(n*=t.pixelRatio,r*=t.pixelRatio,i(t,u,n,r)?u[0]:null)},isect:Fg,tip:n}}var nm=em("area",(function(t,e){const n=e[0],r=n.interpolate||"linear";return("horizontal"===n.orient?Pp:Up).curve(ap(r,n.orient,n.tension)).context(t)(e)}),(function(t,e){for(var n,r,i="horizontal"===t[0].orient?e[1]:e[0],o="horizontal"===t[0].orient?"y":"x",a=t.length,u=1/0;--a>=0;)!1!==t[a].defined&&(r=Math.abs(t[a][o]-i)).5&&e<1.5?.5-Math.abs(e-1):0}function om(t,e){const n=im(e);t("d",Vp(null,e,n,n))}function am(t,e,n,r){const i=im(e);t.beginPath(),Vp(t,e,(n||0)+i,(r||0)+i)}const um=Gg(am),sm=Gg(am,!1),lm=Gg(am,!0);var cm={type:"group",tag:"g",nested:!1,attr:function(t,e){t("transform",Qg(e))},bound:function(t,e){if(!e.clip&&e.items){const n=e.items,r=n.length;for(let e=0;e{const r=e.x||0,i=e.y||0,o=e.strokeForeground,a=null==e.opacity?1:e.opacity;(e.stroke||e.fill)&&a&&(am(t,e,r,i),zg(t,e),e.fill&&$g(t,e,a)&&t.fill(),e.stroke&&!o&&Lg(t,e,a)&&t.stroke()),t.save(),t.translate(r,i),e.clip&&rm(t,e),n&&n.translate(-r,-i),jg(e,(e=>{this.draw(t,e,n)})),n&&n.translate(r,i),t.restore(),o&&e.stroke&&a&&(am(t,e,r,i),zg(t,e),Lg(t,e,a)&&t.stroke())}))},pick:function(t,e,n,r,i,o){if(e.bounds&&!e.bounds.contains(i,o)||!e.items)return null;const a=n*t.pixelRatio,u=r*t.pixelRatio;return Ig(e,(s=>{let l,c,f;const h=s.bounds;if(h&&!h.contains(i,o))return;c=s.x||0,f=s.y||0;const d=c+(s.width||0),p=f+(s.height||0),g=s.clip;if(g&&(id||op))return;if(t.save(),t.translate(c,f),c=i-c,f=o-f,g&&Yp(s)&&!lm(t,s,a,u))return t.restore(),null;const m=s.strokeForeground,y=!1!==e.interactive;return y&&m&&s.stroke&&sm(t,s,a,u)?(t.restore(),s):(l=Ig(s,(t=>function(t,e,n){return(!1!==t.interactive||"group"===t.marktype)&&t.bounds&&t.bounds.contains(e,n)}(t,c,f)?this.pick(t,n,r,c,f):null)),!l&&y&&(s.fill||!m&&s.stroke)&&um(t,s,a,u)&&(l=s),t.restore(),l||null)}))},isect:Sg,content:function(t,e,n){t("clip-path",e.clip?Jp(n,e,e):null)},background:function(t,e){t("class","background"),t("aria-hidden",!0),om(t,e)},foreground:function(t,e){t("class","foreground"),t("aria-hidden",!0),e.strokeForeground?om(t,e):t("d","")}},fm={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",version:"1.1"};function hm(t,e){var n=t.image;return(!n||t.url&&t.url!==n.url)&&(n={complete:!1,width:0,height:0},e.loadImage(t.url).then((e=>{t.image=e,t.image.url=t.url}))),n}function dm(t,e){return null!=t.width?t.width:e&&e.width?!1!==t.aspect&&t.height?t.height*e.width/e.height:e.width:0}function pm(t,e){return null!=t.height?t.height:e&&e.height?!1!==t.aspect&&t.width?t.width*e.height/e.width:e.height:0}function gm(t,e){return"center"===t?e/2:"right"===t?e:0}function mm(t,e){return"middle"===t?e/2:"bottom"===t?e:0}var ym={type:"image",tag:"image",nested:!1,attr:function(t,e,n){const r=hm(e,n),i=dm(e,r),o=pm(e,r),a=(e.x||0)-gm(e.align,i),u=(e.y||0)-mm(e.baseline,o);t("href",!r.src&&r.toDataURL?r.toDataURL():r.src||"",fm["xmlns:xlink"],"xlink:href"),t("transform",Jg(a,u)),t("width",i),t("height",o),t("preserveAspectRatio",!1===e.aspect?"none":"xMidYMid")},bound:function(t,e){const n=e.image,r=dm(e,n),i=pm(e,n),o=(e.x||0)-gm(e.align,r),a=(e.y||0)-mm(e.baseline,i);return t.set(o,a,o+r,a+i)},draw:function(t,e,n){jg(e,(e=>{if(n&&!n.intersects(e.bounds))return;const r=hm(e,this);let i=dm(e,r),o=pm(e,r);if(0===i||0===o)return;let a,u,s,l,c=(e.x||0)-gm(e.align,i),f=(e.y||0)-mm(e.baseline,o);!1!==e.aspect&&(u=r.width/r.height,s=e.width/e.height,u==u&&s==s&&u!==s&&(s=0;)if(!1!==t[o].defined&&(n=t[o].x-e[0])*n+(r=t[o].y-e[1])*r{if(!n||n.intersects(e.bounds)){var r=null==e.opacity?1:e.opacity;r&&km(t,e,r)&&(zg(t,e),t.stroke())}}))},pick:Vg((function(t,e,n,r){return!!t.isPointInStroke&&(km(t,e,1)&&t.isPointInStroke(n,r))})),isect:Bg},Mm=Kg("shape",(function(t,e){return(e.mark.shape||e.shape).context(t)(e)})),Em=Kg("symbol",(function(t,e){return Wp.context(t)(e)}),Fg);const Dm=vt();var Cm={height:Nm,measureWidth:Tm,estimateWidth:Sm,width:Sm,canvas:Fm};function Fm(t){Cm.width=t&&Eg?Tm:Sm}function Sm(t,e){return Bm(qm(t,e),Nm(t))}function Bm(t,e){return~~(.8*t.length*e)}function Tm(t,e){return Nm(t)<=0||!(e=qm(t,e))?0:zm(e,Um(t))}function zm(t,e){const n=`(${e}) ${t}`;let r=Dm.get(n);return void 0===r&&(Eg.font=e,r=Eg.measureText(t).width,Dm.set(n,r)),r}function Nm(t){return null!=t.fontSize?+t.fontSize||0:11}function Om(t){return null!=t.lineHeight?t.lineHeight:Nm(t)+2}function Rm(t){return e=t.lineBreak&&t.text&&!_(t.text)?t.text.split(t.lineBreak):t.text,_(e)?e.length>1?e:e[0]:e;var e}function $m(t){const e=Rm(t);return(_(e)?e.length-1:0)*Om(t)}function qm(t,e){const n=null==e?"":(e+"").trim();return t.limit>0&&n.length?function(t,e){var n=+t.limit,r=function(t){if(Cm.width===Tm){const e=Um(t);return t=>zm(t,e)}{const e=Nm(t);return t=>Bm(t,e)}}(t);if(r(e)>>1,r(e.slice(i))>n?u=i+1:s=i;return o+e.slice(u)}for(;u>>1),r(e.slice(0,i))Math.max(t,Cm.width(e,n))),0)):r=Cm.width(e,f),"center"===o?l-=r/2:"right"===o&&(l-=r),t.set(l+=u,c+=s,l+r,c+i),e.angle&&!n)t.rotate(e.angle*cp,u,s);else if(2===n)return t.rotatedPoints(e.angle*cp,u,s);return t}var Ym={arc:tm,area:nm,group:cm,image:ym,line:vm,path:xm,rect:wm,rule:Am,shape:Mm,symbol:Em,text:{type:"text",tag:"text",nested:!1,attr:function(t,e){var n,r=e.dx||0,i=(e.dy||0)+Pm(e),o=Wm(e),a=o.x1,u=o.y1,s=e.angle||0;t("text-anchor",jm[e.align]||"start"),s?(n=Jg(a,u)+" "+Zg(s),(r||i)&&(n+=" "+Jg(r,i))):n=Jg(a+r,u+i),t("transform",n)},bound:Hm,draw:function(t,e,n){jg(e,(e=>{var r,i,o,a,u,s,l,c=null==e.opacity?1:e.opacity;if(!(n&&!n.intersects(e.bounds)||0===c||e.fontSize<=0||null==e.text||0===e.text.length)){if(t.font=Um(e),t.textAlign=e.align||"left",i=(r=Wm(e)).x1,o=r.y1,e.angle&&(t.save(),t.translate(i,o),t.rotate(e.angle*cp),i=o=0),i+=e.dx||0,o+=(e.dy||0)+Pm(e),s=Rm(e),zg(t,e),_(s))for(u=Om(e),a=0;a=0;)if(!1!==t[i].defined&&(n=t[i].x-e[0])*n+(r=t[i].y-e[1])*r<(n=t[i].size||1)*n)return t[i];return null}))};function Vm(t,e,n){var r=Ym[t.mark.marktype],i=e||r.bound;return r.nested&&(t=t.mark),i(t.bounds||(t.bounds=new Zp),t,n)}var Gm={mark:null};function Xm(t,e,n){var r,i,o,a,u=Ym[t.marktype],s=u.bound,l=t.items,c=l&&l.length;if(u.nested)return c?o=l[0]:(Gm.mark=t,o=Gm),a=Vm(o,s,n),e=e&&e.union(a)||a;if(e=e||t.bounds&&t.bounds.clear()||new Zp,c)for(r=0,i=l.length;re;)t.removeChild(n[--r]);return t}function ay(t){return"mark-"+t.marktype+(t.role?" role-"+t.role:"")+(t.name?" "+t.name:"")}function uy(t,e){const n=e.getBoundingClientRect();return[t.clientX-n.left-(e.clientLeft||0),t.clientY-n.top-(e.clientTop||0)]}function sy(t,e){this._active=null,this._handlers={},this._loader=t||So(),this._tooltip=e||ly}function ly(t,e,n,r){t.element().setAttribute("title",r||"")}function cy(t){this._el=null,this._bgcolor=null,this._loader=new tg(t)}ty.prototype={toJSON(t){return Zm(this.root,t||0)},mark(t,e,n){const r=ey(t,e=e||this.root.items[0]);return e.items[n]=r,r.zindex&&(r.group.zdirty=!0),r}},sy.prototype={initialize(t,e,n){return this._el=t,this._obj=n||null,this.origin(e)},element(){return this._el},canvas(){return this._el&&this._el.firstChild},origin(t){return arguments.length?(this._origin=t||[0,0],this):this._origin.slice()},scene(t){return arguments.length?(this._scene=t,this):this._scene},on(){},off(){},_handlerIndex(t,e,n){for(let r=t?t.length:0;--r>=0;)if(t[r].type===e&&(!n||t[r].handler===n))return r;return-1},handlers(t){const e=this._handlers,n=[];if(t)n.push(...e[this.eventName(t)]);else for(const t in e)n.push(...e[t]);return n},eventName(t){const e=t.indexOf(".");return e<0?t:t.slice(0,e)},handleHref(t,e,n){this._loader.sanitize(n,{context:"href"}).then((e=>{const n=new MouseEvent(t.type,t),r=ny(null,"a");for(const t in e)r.setAttribute(t,e[t]);r.dispatchEvent(n)})).catch((()=>{}))},handleTooltip(t,e,n){if(e&&null!=e.tooltip){e=function(t,e,n,r){var i,o,a=t&&t.mark;if(a&&(i=Ym[a.marktype]).tip){for((o=uy(e,n))[0]-=r[0],o[1]-=r[1];t=t.mark.group;)o[0]-=t.x||0,o[1]-=t.y||0;t=i.tip(a.items,o)}return t}(e,t,this.canvas(),this._origin);const r=n&&e&&e.tooltip||null;this._tooltip.call(this._obj,this,t,e,r)}},getItemBoundingClientRect(t){const e=this.canvas();if(!e)return;const n=e.getBoundingClientRect(),r=this._origin,i=t.bounds,o=i.width(),a=i.height();let u=i.x1+r[0]+n.left,s=i.y1+r[1]+n.top;for(;t.mark&&(t=t.mark.group);)u+=t.x||0,s+=t.y||0;return{x:u,y:s,width:o,height:a,left:u,top:s,right:u+o,bottom:s+a}}},cy.prototype={initialize(t,e,n,r,i){return this._el=t,this.resize(e,n,r,i)},element(){return this._el},canvas(){return this._el&&this._el.firstChild},background(t){return 0===arguments.length?this._bgcolor:(this._bgcolor=t,this)},resize(t,e,n,r){return this._width=t,this._height=e,this._origin=n||[0,0],this._scale=r||1,this},dirty(){},render(t){const e=this;return e._call=function(){e._render(t)},e._call(),e._call=null,e},_render(){},renderAsync(t){const e=this.render(t);return this._ready?this._ready.then((()=>e)):Promise.resolve(e)},_load(t,e){var n=this,r=n._loader[t](e);if(!n._ready){const t=n._call;n._ready=n._loader.ready().then((e=>{e&&t(),n._ready=null}))}return r},sanitizeURL(t){return this._load("sanitizeURL",t)},loadImage(t){return this._load("loadImage",t)}};const fy="dragenter",hy="dragleave",dy="dragover",py="mousedown",gy="mousemove",my="mouseout",yy="mouseover",vy="click",_y="mousewheel",xy="touchstart",by="touchmove",wy="touchend",ky=gy,Ay=my,My=vy;function Ey(t,e){sy.call(this,t,e),this._down=null,this._touch=null,this._first=!0,this._events={}}function Dy(t,e){(t=>t===xy||t===by||t===wy?[xy,by,wy]:[t])(e).forEach((e=>function(t,e){const n=t.canvas();n&&!t._events[e]&&(t._events[e]=1,n.addEventListener(e,t[e]?n=>t[e](n):n=>t.fire(e,n)))}(t,e)))}function Cy(t,e,n){return function(r){const i=this._active,o=this.pickEvent(r);o===i||(i&&i.exit||this.fire(n,r),this._active=o,this.fire(e,r)),this.fire(t,r)}}function Fy(t){return function(e){this.fire(t,e),this._active=null}}st(Ey,sy,{initialize(t,e,n){return this._canvas=t&&ry(t,"canvas"),[vy,py,gy,my,hy].forEach((t=>Dy(this,t))),sy.prototype.initialize.call(this,t,e,n)},canvas(){return this._canvas},context(){return this._canvas.getContext("2d")},events:["keydown","keypress","keyup",fy,hy,dy,py,"mouseup",gy,my,yy,vy,"dblclick","wheel",_y,xy,by,wy],DOMMouseScroll(t){this.fire(_y,t)},mousemove:Cy(gy,yy,my),dragover:Cy(dy,fy,hy),mouseout:Fy(my),dragleave:Fy(hy),mousedown(t){this._down=this._active,this.fire(py,t)},click(t){this._down===this._active&&(this.fire(vy,t),this._down=null)},touchstart(t){this._touch=this.pickEvent(t.changedTouches[0]),this._first&&(this._active=this._touch,this._first=!1),this.fire(xy,t,!0)},touchmove(t){this.fire(by,t,!0)},touchend(t){this.fire(wy,t,!0),this._touch=null},fire(t,e,n){const r=n?this._touch:this._active,i=this._handlers[t];if(e.vegaType=t,t===My&&r&&r.href?this.handleHref(e,r,r.href):t!==ky&&t!==Ay||this.handleTooltip(e,r,t!==Ay),i)for(let t=0,n=i.length;t=0&&r.splice(i,1),this},pickEvent(t){const e=uy(t,this._canvas),n=this._origin;return this.pick(this._scene,e[0],e[1],e[0]-n[0],e[1]-n[1])},pick(t,e,n,r,i){const o=this.context();return Ym[t.marktype].pick.call(this,o,t,e,n,r,i)}});var Sy="undefined"!=typeof window&&window.devicePixelRatio||1;function By(t){cy.call(this,t),this._options={},this._redraw=!1,this._dirty=new Zp,this._tempb=new Zp}const Ty=cy.prototype;function zy(t,e){sy.call(this,t,e);const n=this;n._hrefHandler=Ny(n,((t,e)=>{e&&e.href&&n.handleHref(t,e,e.href)})),n._tooltipHandler=Ny(n,((t,e)=>{n.handleTooltip(t,e,t.type!==Ay)}))}st(By,cy,{initialize(t,e,n,r,i,o){return this._options=o||{},this._canvas=this._options.externalContext?null:Xl(1,1,this._options.type),t&&this._canvas&&(oy(t,0).appendChild(this._canvas),this._canvas.setAttribute("class","marks")),Ty.initialize.call(this,t,e,n,r,i)},resize(t,e,n,r){if(Ty.resize.call(this,t,e,n,r),this._canvas)!function(t,e,n,r,i,o){const a="undefined"!=typeof HTMLElement&&t instanceof HTMLElement&&null!=t.parentNode,u=t.getContext("2d"),s=a?Sy:i;t.width=e*s,t.height=n*s;for(const t in o)u[t]=o[t];a&&1!==s&&(t.style.width=e+"px",t.style.height=n+"px"),u.pixelRatio=s,u.setTransform(s,0,0,s,s*r[0],s*r[1])}(this._canvas,this._width,this._height,this._origin,this._scale,this._options.context);else{const t=this._options.externalContext;t||s("CanvasRenderer is missing a valid canvas or context"),t.scale(this._scale,this._scale),t.translate(this._origin[0],this._origin[1])}return this._redraw=!0,this},canvas(){return this._canvas},context(){return this._options.externalContext||(this._canvas?this._canvas.getContext("2d"):null)},dirty(t){const e=this._tempb.clear().union(t.bounds);let n=t.mark.group;for(;n;)e.translate(n.x||0,n.y||0),n=n.mark.group;this._dirty.union(e)},_render(t){const e=this.context(),n=this._origin,r=this._width,i=this._height,o=this._dirty,a=((t,e,n)=>(new Zp).set(0,0,e,n).translate(-t[0],-t[1]))(n,r,i);e.save();const u=this._redraw||o.empty()?(this._redraw=!1,a.expand(1)):function(t,e,n){return e.expand(1).round(),t.pixelRatio%1&&e.scale(t.pixelRatio).round().scale(1/t.pixelRatio),e.translate(-n[0]%1,-n[1]%1),t.beginPath(),t.rect(e.x1,e.y1,e.width(),e.height()),t.clip(),e}(e,a.intersect(o),n);return this.clear(-n[0],-n[1],r,i),this.draw(e,t,u),e.restore(),o.clear(),this},draw(t,e,n){const r=Ym[e.marktype];e.clip&&function(t,e){var n=e.clip;t.save(),Y(n)?(t.beginPath(),n(t),t.clip()):rm(t,e.group)}(t,e),r.draw.call(this,t,e,n),e.clip&&t.restore()},clear(t,e,n,r){const i=this._options,o=this.context();"pdf"===i.type||i.externalContext||o.clearRect(t,e,n,r),null!=this._bgcolor&&(o.fillStyle=this._bgcolor,o.fillRect(t,e,n,r))}});const Ny=(t,e)=>n=>{let r=n.target.__data__;r=Array.isArray(r)?r[0]:r,n.vegaType=n.type,e.call(t._obj,n,r)};st(zy,sy,{initialize(t,e,n){let r=this._svg;return r&&(r.removeEventListener(My,this._hrefHandler),r.removeEventListener(ky,this._tooltipHandler),r.removeEventListener(Ay,this._tooltipHandler)),this._svg=r=t&&ry(t,"svg"),r&&(r.addEventListener(My,this._hrefHandler),r.addEventListener(ky,this._tooltipHandler),r.addEventListener(Ay,this._tooltipHandler)),sy.prototype.initialize.call(this,t,e,n)},canvas(){return this._svg},on(t,e){const n=this.eventName(t),r=this._handlers;if(this._handlerIndex(r[n],t,e)<0){const i={type:t,handler:e,listener:Ny(this,e)};(r[n]||(r[n]=[])).push(i),this._svg&&this._svg.addEventListener(n,i.listener)}return this},off(t,e){const n=this.eventName(t),r=this._handlers[n],i=this._handlerIndex(r,t,e);return i>=0&&(this._svg&&this._svg.removeEventListener(n,r[i].listener),r.splice(i,1)),this}});const Oy="aria-hidden",Ry="aria-label",$y="role",qy="aria-roledescription",Ly="graphics-object",Uy="graphics-symbol",Py=(t,e,n)=>({[$y]:t,[qy]:e,[Ry]:n||void 0}),jy=Ct(["axis-domain","axis-grid","axis-label","axis-tick","axis-title","legend-band","legend-entry","legend-gradient","legend-label","legend-title","legend-symbol","title"]),Iy={axis:{desc:"axis",caption:function(t){const e=t.datum,n=t.orient,r=e.title?Gy(t):null,i=t.context,o=i.scales[e.scale].value,a=i.dataflow.locale(),u=o.type;return("left"===n||"right"===n?"Y":"X")+"-axis"+(r?` titled '${r}'`:"")+` for a ${vd(u)?"discrete":u} scale`+` with ${Qd(a,o,t)}`}},legend:{desc:"legend",caption:function(t){const e=t.datum,n=e.title?Gy(t):null,r=`${e.type||""} legend`.trim(),i=e.scales,o=Object.keys(i),a=t.context,u=a.scales[i[o[0]]].value,s=a.dataflow.locale();return l=r,(l.length?l[0].toUpperCase()+l.slice(1):l)+(n?` titled '${n}'`:"")+` for ${function(t){return(t=t.map((t=>t+("fill"===t||"stroke"===t?" color":"")))).length<2?t[0]:t.slice(0,-1).join(", ")+" and "+M(t)}(o)}`+` with ${Qd(s,u,t)}`;var l}},"title-text":{desc:"title",caption:t=>`Title text '${Vy(t)}'`},"title-subtitle":{desc:"subtitle",caption:t=>`Subtitle text '${Vy(t)}'`}},Wy={ariaRole:$y,ariaRoleDescription:qy,description:Ry};function Hy(t,e){const n=!1===e.aria;if(t(Oy,n||void 0),n||null==e.description)for(const e in Wy)t(Wy[e],void 0);else{const n=e.mark.marktype;t(Ry,e.description),t($y,e.ariaRole||("group"===n?Ly:Uy)),t(qy,e.ariaRoleDescription||`${n} mark`)}}function Yy(t){return!1===t.aria?{[Oy]:!0}:jy[t.role]?null:Iy[t.role]?function(t,e){try{const n=t.items[0],r=e.caption||(()=>"");return Py(e.role||Uy,e.desc,n.description||r(n))}catch(t){return null}}(t,Iy[t.role]):function(t){const e=t.marktype,n="group"===e||"text"===e||t.items.some((t=>null!=t.description&&!1!==t.aria));return Py(n?Ly:Uy,`${e} mark container`,t.description)}(t)}function Vy(t){return W(t.text).join(" ")}function Gy(t){try{return W(M(t.items).items[0].text).join(" ")}catch(t){return null}}const Xy=t=>(t+"").replace(/&/g,"&").replace(//g,">");function Jy(){let t="",e="",n="";const r=[],i=()=>e=n="",o=(t,n)=>{var r;return null!=n&&(e+=` ${t}="${r=n,Xy(r).replace(/"/g,""").replace(/\t/g," ").replace(/\n/g," ").replace(/\r/g," ")}"`),a},a={open(u,...s){(o=>{e&&(t+=`${e}>${n}`,i()),r.push(o)})(u),e="<"+u;for(const t of s)for(const e in t)o(e,t[e]);return a},close(){const o=r.pop();return t+=e?e+(n?`>${n}`:"/>"):``,i(),a},attr:o,text:t=>(n+=Xy(t),a),toString:()=>t};return a}const Zy=t=>Qy(Jy(),t)+"";function Qy(t,e){if(t.open(e.tagName),e.hasAttributes()){const n=e.attributes,r=n.length;for(let e=0;e1&&t.previousSibling!=e}(a,n))&&e.insertBefore(a,n?n.nextSibling:e.firstChild),a}st(rv,cy,{initialize(t,e,n,r,i){return this._defs={},this._clearDefs(),t&&(this._svg=iy(t,0,"svg",nv),this._svg.setAttributeNS(ev,"xmlns",nv),this._svg.setAttributeNS(ev,"xmlns:xlink",fm["xmlns:xlink"]),this._svg.setAttribute("version",fm.version),this._svg.setAttribute("class","marks"),oy(t,1),this._root=iy(this._svg,0,"g",nv),pv(this._root,tv),oy(this._svg,1)),this.background(this._bgcolor),iv.initialize.call(this,t,e,n,r,i)},background(t){return arguments.length&&this._svg&&this._svg.style.setProperty("background-color",t),iv.background.apply(this,arguments)},resize(t,e,n,r){return iv.resize.call(this,t,e,n,r),this._svg&&(pv(this._svg,{width:this._width*this._scale,height:this._height*this._scale,viewBox:`0 0 ${this._width} ${this._height}`}),this._root.setAttribute("transform",`translate(${this._origin})`)),this._dirty=[],this},canvas(){return this._svg},svg(){const t=this._svg,e=this._bgcolor;if(!t)return null;let n;e&&(t.removeAttribute("style"),n=iy(t,0,"rect",nv),pv(n,{width:this._width,height:this._height,fill:e}));const r=Zy(t);return e&&(t.removeChild(n),this._svg.style.setProperty("background-color",e)),r},_render(t){return this._dirtyCheck()&&(this._dirtyAll&&this._clearDefs(),this.mark(this._root,t),oy(this._root,1)),this.defs(),this._dirty=[],++this._dirtyID,this},dirty(t){t.dirty!==this._dirtyID&&(t.dirty=this._dirtyID,this._dirty.push(t))},isDirty(t){return this._dirtyAll||!t._svg||t.dirty===this._dirtyID},_dirtyCheck(){this._dirtyAll=!0;const t=this._dirty;if(!t.length||!this._dirtyID)return!0;const e=++this._dirtyID;let n,r,i,o,a,u,s;for(a=0,u=t.length;a{t.dirty=e}))),r.zdirty||(n.exit?(o.nested&&r.items.length?(s=r.items[0],s._svg&&this._update(o,s._svg,s)):n._svg&&(s=n._svg.parentNode,s&&s.removeChild(n._svg)),n._svg=null):(n=o.nested?r.items[0]:n,n._update!==e&&(n._svg&&n._svg.ownerSVGElement?this._update(o,n._svg,n):(this._dirtyAll=!1,ov(n,e)),n._update=e)));return!this._dirtyAll},mark(t,e,n){if(!this.isDirty(e))return e._svg;const r=this._svg,i=Ym[e.marktype],o=!1===e.interactive?"none":null,a="g"===i.tag;let u=null,s=0;const l=sv(e,t,n,"g",r);l.setAttribute("class",ay(e));const c=Yy(e);for(const t in c)gv(l,t,c[t]);a||gv(l,"pointer-events",o),gv(l,"clip-path",e.clip?Jp(this,e,e.group):null);const f=t=>{const e=this.isDirty(t),n=sv(t,l,u,i.tag,r);e&&(this._update(i,n,t),a&&function(t,e,n){e=e.lastChild.previousSibling;let r,i=0;jg(n,(n=>{r=t.mark(e,n,r),++i})),oy(e,1+i)}(this,n,t)),u=n,++s};return i.nested?e.items.length&&f(e.items[0]):jg(e,f),oy(l,s),l},_update(t,e,n){lv=e,cv=e.__values__,Hy(hv,n),t.attr(hv,n,this);const r=fv[t.type];r&&r.call(this,t,e,n),lv&&this.style(lv,n)},style(t,e){if(null!=e)for(const n in Ky){let r="font"===n?Lm(e):e[n];if(r===cv[n])continue;const i=Ky[n];null==r?t.removeAttribute(i):(ep(r)&&(r=np(r,this._defs.gradient,mv())),t.setAttribute(i,r+"")),cv[n]=r}},defs(){const t=this._svg,e=this._defs;let n=e.el,r=0;for(const i in e.gradient)n||(e.el=n=iy(t,1,"defs",nv)),r=av(n,e.gradient[i],r);for(const i in e.clipping)n||(e.el=n=iy(t,1,"defs",nv)),r=uv(n,e.clipping[i],r);n&&(0===r?(t.removeChild(n),e.el=null):oy(n,r))},_clearDefs(){const t=this._defs;t.gradient={},t.clipping={}}});let lv=null,cv=null;const fv={group(t,e,n){const r=lv=e.childNodes[2];cv=r.__values__,t.foreground(hv,n,this),cv=e.__values__,lv=e.childNodes[1],t.content(hv,n,this);const i=lv=e.childNodes[0];t.background(hv,n,this);const o=!1===n.mark.interactive?"none":null;if(o!==cv.events&&(gv(r,"pointer-events",o),gv(i,"pointer-events",o),cv.events=o),n.strokeForeground&&n.stroke){const t=n.fill;gv(r,"display",null),this.style(i,n),gv(i,"stroke",null),t&&(n.fill=null),cv=r.__values__,this.style(r,n),t&&(n.fill=t),lv=null}else gv(r,"display","none")},image(t,e,n){!1===n.smooth?(dv(e,"image-rendering","optimizeSpeed"),dv(e,"image-rendering","pixelated")):dv(e,"image-rendering",null)},text(t,e,n){const r=Rm(n);let i,o,a,u;_(r)?(o=r.map((t=>qm(n,t))),i=o.join("\n"),i!==cv.text&&(oy(e,0),a=e.ownerDocument,u=Om(n),o.forEach(((t,r)=>{const i=ny(a,"tspan",nv);i.__data__=n,i.textContent=t,r&&(i.setAttribute("x",0),i.setAttribute("dy",u)),e.appendChild(i)})),cv.text=i)):(o=qm(n,r),o!==cv.text&&(e.textContent=o,cv.text=o)),gv(e,"font-family",Lm(n)),gv(e,"font-size",Nm(n)+"px"),gv(e,"font-style",n.fontStyle),gv(e,"font-variant",n.fontVariant),gv(e,"font-weight",n.fontWeight)}};function hv(t,e,n){e!==cv[t]&&(n?function(t,e,n,r){null!=n?t.setAttributeNS(r,e,n):t.removeAttributeNS(r,e)}(lv,t,e,n):gv(lv,t,e),cv[t]=e)}function dv(t,e,n){n!==cv[e]&&(null==n?t.style.removeProperty(e):t.style.setProperty(e,n+""),cv[e]=n)}function pv(t,e){for(const n in e)gv(t,n,e[n])}function gv(t,e,n){null!=n?t.setAttribute(e,n):t.removeAttribute(e)}function mv(){let t;return"undefined"==typeof window?"":(t=window.location).hash?t.href.slice(0,-t.hash.length):t.href}function yv(t){cy.call(this,t),this._text=null,this._defs={gradient:{},clipping:{}}}st(yv,cy,{svg(){return this._text},_render(t){const e=Jy();e.open("svg",tt({},fm,{class:"marks",width:this._width*this._scale,height:this._height*this._scale,viewBox:`0 0 ${this._width} ${this._height}`}));const n=this._bgcolor;return n&&"transparent"!==n&&"none"!==n&&e.open("rect",{width:this._width,height:this._height,fill:n}).close(),e.open("g",tv,{transform:"translate("+this._origin+")"}),this.mark(e,t),e.close(),this.defs(e),this._text=e.close()+"",this},mark(t,e){const n=Ym[e.marktype],r=n.tag,i=[Hy,n.attr];t.open("g",{class:ay(e),"clip-path":e.clip?Jp(this,e,e.group):null},Yy(e),{"pointer-events":"g"!==r&&!1===e.interactive?"none":null});const o=o=>{const a=this.href(o);if(a&&t.open("a",a),t.open(r,this.attr(e,o,i,"g"!==r?r:null)),"text"===r){const e=Rm(o);if(_(e)){const n={x:0,dy:Om(o)};for(let r=0;rthis.mark(t,e))),t.close(),r&&a?(i&&(o.fill=null),o.stroke=a,t.open("path",this.attr(e,o,n.foreground,"bgrect")).close(),i&&(o.fill=i)):t.open("path",this.attr(e,o,n.foreground,"bgfore")).close()}t.close(),a&&t.close()};return n.nested?e.items&&e.items.length&&o(e.items[0]):jg(e,o),t.close()},href(t){const e=t.href;let n;if(e){if(n=this._hrefs&&this._hrefs[e])return n;this.sanitizeURL(e).then((t=>{t["xlink:href"]=t.href,t.href=null,(this._hrefs||(this._hrefs={}))[e]=t}))}return null},attr(t,e,n,r){const i={},o=(t,e,n,r)=>{i[r||t]=e};return Array.isArray(n)?n.forEach((t=>t(o,e,this))):n(o,e,this),r&&function(t,e,n,r,i){if(null==e)return t;"bgrect"===r&&!1===n.interactive&&(t["pointer-events"]="none");if("bgfore"===r&&(!1===n.interactive&&(t["pointer-events"]="none"),t.display="none",null!==e.fill))return t;"image"===r&&!1===e.smooth&&(t.style="image-rendering: optimizeSpeed; image-rendering: pixelated;");"text"===r&&(t["font-family"]=Lm(e),t["font-size"]=Nm(e)+"px",t["font-style"]=e.fontStyle,t["font-variant"]=e.fontVariant,t["font-weight"]=e.fontWeight);for(const n in Ky){let r=e[n];const o=Ky[n];("transparent"!==r||"fill"!==o&&"stroke"!==o)&&null!=r&&(ep(r)&&(r=np(r,i.gradient,"")),t[o]=r)}}(i,e,t,r,this._defs),i},defs(t){const e=this._defs.gradient,n=this._defs.clipping;if(0!==Object.keys(e).length+Object.keys(n).length){t.open("defs");for(const n in e){const r=e[n],i=r.stops;"radial"===r.gradient?(t.open("pattern",{id:tp+n,viewBox:"0,0,1,1",width:"100%",height:"100%",preserveAspectRatio:"xMidYMid slice"}),t.open("rect",{width:"1",height:"1",fill:"url(#"+n+")"}).close(),t.close(),t.open("radialGradient",{id:n,fx:r.x1,fy:r.y1,fr:r.r1,cx:r.x2,cy:r.y2,r:r.r2})):t.open("linearGradient",{id:n,x1:r.x1,x2:r.x2,y1:r.y1,y2:r.y2});for(let e=0;e1?(bv[t]=e,this):bv[t]}function kv(t,e,n){const r=[],i=(new Zp).union(e),o=t.marktype;return o?Av(t,i,n,r):"group"===o?Mv(t,i,n,r):s("Intersect scene must be mark node or group item.")}function Av(t,e,n,r){if(function(t,e,n){return t.bounds&&e.intersects(t.bounds)&&("group"===t.marktype||!1!==t.interactive&&(!n||n(t)))}(t,e,n)){const i=t.items,o=t.marktype,a=i.length;let u=0;if("group"===o)for(;u=0;r--)if(i[r]!=o[r])return!1;for(r=i.length-1;r>=0;r--)if(!Fv(t[n=i[r]],e[n],n))return!1;return typeof t==typeof e}(t,e):t==e)}function Sv(t,e){return Fv(lp(t),lp(e))}const Bv="top",Tv="left",zv="right",Nv="bottom",Ov="start",Rv="middle",$v="end",qv="group",Lv="axis",Uv="title",Pv="frame",jv="scope",Iv="legend",Wv="row-header",Hv="row-footer",Yv="row-title",Vv="column-header",Gv="column-footer",Xv="column-title",Jv="padding",Zv="fit",Qv="fit-x",Kv="fit-y",t_="none",e_="all",n_="each",r_="flush",i_="column",o_="row";function a_(t){ga.call(this,null,t)}function u_(t,e,n){return e(t.bounds.clear(),t,n)}st(a_,ga,{transform(t,e){const n=e.dataflow,r=t.mark,i=r.marktype,o=Ym[i],a=o.bound;let u,s=r.bounds;if(o.nested)r.items.length&&n.dirty(r.items[0]),s=u_(r,a),r.items.forEach((t=>{t.bounds.clear().union(s)}));else if(i===qv||t.modified())switch(e.visit(e.MOD,(t=>n.dirty(t))),s.clear(),r.items.forEach((t=>s.union(u_(t,a)))),r.role){case Lv:case Iv:case Uv:e.reflow()}else u=e.changed(e.REM),e.visit(e.ADD,(t=>{s.union(u_(t,a))})),e.visit(e.MOD,(t=>{u=u||s.alignsWith(t.bounds),n.dirty(t),s.union(u_(t,a))})),u&&(s.clear(),r.items.forEach((t=>s.union(t.bounds))));return Cv(r),e.modifies("bounds")}});const s_=":vega_identifier:";function l_(t){ga.call(this,0,t)}function c_(t){ga.call(this,null,t)}function f_(t){ga.call(this,null,t)}l_.Definition={type:"Identifier",metadata:{modifies:!0},params:[{name:"as",type:"string",required:!0}]},st(l_,ga,{transform(t,e){const n=(i=e.dataflow)._signals[s_]||(i._signals[s_]=i.add(0)),r=t.as;var i;let o=n.value;return e.visit(e.ADD,(t=>t[r]=t[r]||++o)),n.set(this.value=o),e}}),st(c_,ga,{transform(t,e){let n=this.value;n||(n=e.dataflow.scenegraph().mark(t.markdef,function(t){const e=t.groups,n=t.parent;return e&&1===e.size?e.get(Object.keys(e.object)[0]):e&&n?e.lookup(n):null}(t),t.index),n.group.context=t.context,t.context.group||(t.context.group=n.group),n.source=this.source,n.clip=t.clip,n.interactive=t.interactive,this.value=n);const r=n.marktype===qv?Kp:Qp;return e.visit(e.ADD,(t=>r.call(t,n))),(t.modified("clip")||t.modified("interactive"))&&(n.clip=t.clip,n.interactive=!!t.interactive,n.zdirty=!0,e.reflow()),n.items=e.source,e}});const h_={parity:t=>t.filter(((t,e)=>e%2?t.opacity=0:1)),greedy:(t,e)=>{let n;return t.filter(((t,r)=>r&&d_(n.bounds,t.bounds,e)?t.opacity=0:(n=t,1)))}},d_=(t,e,n)=>n>Math.max(e.x1-t.x2,t.x1-e.x2,e.y1-t.y2,t.y1-e.y2),p_=(t,e)=>{for(var n,r=1,i=t.length,o=t[0].bounds;r{const e=t.bounds;return e.width()>1&&e.height()>1},m_=t=>(t.forEach((t=>t.opacity=1)),t),y_=(t,e)=>t.reflow(e.modified()).modifies("opacity");function v_(t){ga.call(this,null,t)}st(f_,ga,{transform(t,e){const n=h_[t.method]||h_.parity,r=t.separation||0;let i,o,a=e.materialize(e.SOURCE).source;if(!a||!a.length)return;if(!t.method)return t.modified("method")&&(m_(a),e=y_(e,t)),e;if(a=a.filter(g_),!a.length)return;if(t.sort&&(a=a.slice().sort(t.sort)),i=m_(a),e=y_(e,t),i.length>=3&&p_(i,r)){do{i=n(i,r)}while(i.length>=3&&p_(i,r));i.length<3&&!M(a).opacity&&(i.length>1&&(M(i).opacity=0),M(a).opacity=1)}t.boundScale&&t.boundTolerance>=0&&(o=((t,e,n)=>{var r=t.range(),i=new Zp;return e===Bv||e===Nv?i.set(r[0],-1/0,r[1],1/0):i.set(-1/0,r[0],1/0,r[1]),i.expand(n||1),t=>i.encloses(t.bounds)})(t.boundScale,t.boundOrient,+t.boundTolerance),a.forEach((t=>{o(t)||(t.opacity=0)})));const u=i[0].mark.bounds.clear();return a.forEach((t=>{t.opacity&&u.union(t.bounds)})),e}}),st(v_,ga,{transform(t,e){const n=e.dataflow;if(e.visit(e.ALL,(t=>n.dirty(t))),e.fields&&e.fields.zindex){const t=e.source&&e.source[0];t&&(t.mark.zdirty=!0)}}});const __=new Zp;function x_(t,e,n){return t[e]===n?0:(t[e]=n,1)}function b_(t){var e=t.items[0].orient;return e===Tv||e===zv}function w_(t,e,n,r){var i,o,a=e.items[0],u=a.datum,s=null!=a.translate?a.translate:.5,l=a.orient,c=function(t){let e=+t.grid;return[t.ticks?e++:-1,t.labels?e++:-1,e+ +t.domain]}(u),f=a.range,h=a.offset,d=a.position,p=a.minExtent,g=a.maxExtent,m=u.title&&a.items[c[2]].items[0],y=a.titlePadding,v=a.bounds,_=m&&$m(m),x=0,b=0;switch(__.clear().union(v),v.clear(),(i=c[0])>-1&&v.union(a.items[i].bounds),(i=c[1])>-1&&v.union(a.items[i].bounds),l){case Bv:x=d||0,b=-h,o=Math.max(p,Math.min(g,-v.y1)),v.add(0,-o).add(f,0),m&&k_(t,m,o,y,_,0,-1,v);break;case Tv:x=-h,b=d||0,o=Math.max(p,Math.min(g,-v.x1)),v.add(-o,0).add(0,f),m&&k_(t,m,o,y,_,1,-1,v);break;case zv:x=n+h,b=d||0,o=Math.max(p,Math.min(g,v.x2)),v.add(0,0).add(o,f),m&&k_(t,m,o,y,_,1,1,v);break;case Nv:x=d||0,b=r+h,o=Math.max(p,Math.min(g,v.y2)),v.add(0,0).add(f,o),m&&k_(t,m,o,y,0,0,1,v);break;default:x=a.x,b=a.y}return rg(v.translate(x,b),a),x_(a,"x",x+s)|x_(a,"y",b+s)&&(a.bounds=__,t.dirty(a),a.bounds=v,t.dirty(a)),a.mark.bounds.clear().union(v)}function k_(t,e,n,r,i,o,a,u){const s=e.bounds;if(e.auto){const u=a*(n+i+r);let l=0,c=0;t.dirty(e),o?l=(e.x||0)-(e.x=u):c=(e.y||0)-(e.y=u),e.mark.bounds.clear().union(s.translate(-l,-c)),t.dirty(e)}u.union(s)}const A_=(t,e)=>Math.floor(Math.min(t,e)),M_=(t,e)=>Math.ceil(Math.max(t,e));function E_(t){return(new Zp).set(0,0,t.width||0,t.height||0)}function D_(t){const e=t.bounds.clone();return e.empty()?e.set(0,0,0,0):e.translate(-(t.x||0),-(t.y||0))}function C_(t,e,n){const r=x(t)?t[e]:t;return null!=r?r:void 0!==n?n:0}function F_(t){return t<0?Math.ceil(-t):0}function S_(t,e,n){var r,i,o,a,u,s,l,c,f,h,d,p=!n.nodirty,g=n.bounds===r_?E_:D_,m=__.set(0,0,0,0),y=C_(n.align,i_),v=C_(n.align,o_),_=C_(n.padding,i_),x=C_(n.padding,o_),b=n.columns||e.length,w=b<=0?1:Math.ceil(e.length/b),k=e.length,A=Array(k),M=Array(b),E=0,D=Array(k),C=Array(w),F=0,S=Array(k),B=Array(k),T=Array(k);for(i=0;i1)for(i=0;i0&&(S[i]+=f/2);if(v&&C_(n.center,o_)&&1!==b)for(i=0;i0&&(B[i]+=h/2);for(i=0;ii&&(t.warn("Grid headers exceed limit: "+i),e=e.slice(0,i)),A+=o,g=0,y=e.length;g=0&&null==(x=n[m]);m-=h);u?(b=null==d?x.x:Math.round(x.bounds.x1+d*x.bounds.width()),w=A):(b=A,w=null==d?x.y:Math.round(x.bounds.y1+d*x.bounds.height())),v.union(_.bounds.translate(b-(_.x||0),w-(_.y||0))),_.x=b,_.y=w,t.dirty(_),M=a(M,v[l])}return M}function O_(t,e,n,r,i,o){if(e){t.dirty(e);var a=n,u=n;r?a=Math.round(i.x1+o*i.width()):u=Math.round(i.y1+o*i.height()),e.bounds.translate(a-(e.x||0),u-(e.y||0)),e.mark.bounds.clear().union(e.bounds),e.x=a,e.y=u,t.dirty(e)}}function R_(t,e,n,r,i,o,a){const u=function(t,e){const n=t[e]||{};return(e,r)=>null!=n[e]?n[e]:null!=t[e]?t[e]:r}(n,e),s=function(t,e){let n=-1/0;return t.forEach((t=>{null!=t.offset&&(n=Math.max(n,t.offset))})),n>-1/0?n:e}(t,u("offset",0)),l=u("anchor",Ov),c=l===$v?1:l===Rv?.5:0,f={align:n_,bounds:u("bounds",r_),columns:"vertical"===u("direction")?1:t.length,padding:u("margin",8),center:u("center"),nodirty:!0};switch(e){case Tv:f.anchor={x:Math.floor(r.x1)-s,column:$v,y:c*(a||r.height()+2*r.y1),row:l};break;case zv:f.anchor={x:Math.ceil(r.x2)+s,y:c*(a||r.height()+2*r.y1),row:l};break;case Bv:f.anchor={y:Math.floor(i.y1)-s,row:$v,x:c*(o||i.width()+2*i.x1),column:l};break;case Nv:f.anchor={y:Math.ceil(i.y2)+s,x:c*(o||i.width()+2*i.x1),column:l};break;case"top-left":f.anchor={x:s,y:s};break;case"top-right":f.anchor={x:o-s,y:s,column:$v};break;case"bottom-left":f.anchor={x:s,y:a-s,row:$v};break;case"bottom-right":f.anchor={x:o-s,y:a-s,column:$v,row:$v}}return f}function $_(t,e){var n,r,i=e.items[0],o=i.datum,a=i.orient,u=i.bounds,s=i.x,l=i.y;return i._bounds?i._bounds.clear().union(u):i._bounds=u.clone(),u.clear(),function(t,e,n){var r=e.padding,i=r-n.x,o=r-n.y;if(e.datum.title){var a=e.items[1].items[0],u=a.anchor,s=e.titlePadding||0,l=r-a.x,c=r-a.y;switch(a.orient){case Tv:i+=Math.ceil(a.bounds.width())+s;break;case zv:case Nv:break;default:o+=a.bounds.height()+s}switch((i||o)&&L_(t,n,i,o),a.orient){case Tv:c+=q_(e,n,a,u,1,1);break;case zv:l+=q_(e,n,a,$v,0,0)+s,c+=q_(e,n,a,u,1,1);break;case Nv:l+=q_(e,n,a,u,0,0),c+=q_(e,n,a,$v,-1,0,1)+s;break;default:l+=q_(e,n,a,u,0,0)}(l||c)&&L_(t,a,l,c),(l=Math.round(a.bounds.x1-r))<0&&(L_(t,n,-l,0),L_(t,a,-l,0))}else(i||o)&&L_(t,n,i,o)}(t,i,i.items[0].items[0]),u=function(t,e){return t.items.forEach((t=>e.union(t.bounds))),e.x1=t.padding,e.y1=t.padding,e}(i,u),n=2*i.padding,r=2*i.padding,u.empty()||(n=Math.ceil(u.width()+n),r=Math.ceil(u.height()+r)),"symbol"===o.type&&function(t){const e=t.reduce(((t,e)=>(t[e.column]=Math.max(e.bounds.x2-e.x,t[e.column]||0),t)),{});t.forEach((t=>{t.width=e[t.column],t.height=t.bounds.y2-t.y}))}(i.items[0].items[0].items[0].items),a!==t_&&(i.x=s=0,i.y=l=0),i.width=n,i.height=r,rg(u.set(s,l,s+n,l+r),i),i.mark.bounds.clear().union(u),i}function q_(t,e,n,r,i,o,a){const u="symbol"!==t.datum.type,s=n.datum.vgrad,l=(!u||!o&&s||a?e:e.items[0]).bounds[i?"y2":"x2"]-t.padding,c=s&&o?l:0,f=s&&o?0:l,h=i<=0?0:$m(n);return Math.round(r===Ov?c:r===$v?f-h:.5*(l-h))}function L_(t,e,n,r){e.x+=n,e.y+=r,e.bounds.translate(n,r),e.mark.bounds.translate(n,r),t.dirty(e)}function U_(t){ga.call(this,null,t)}st(U_,ga,{transform(t,e){const n=e.dataflow;return t.mark.items.forEach((e=>{t.layout&&B_(n,e,t.layout),function(t,e,n){var r,i,o,a,u,s=e.items,l=Math.max(0,e.width||0),c=Math.max(0,e.height||0),f=(new Zp).set(0,0,l,c),h=f.clone(),d=f.clone(),p=[];for(a=0,u=s.length;a{(o=t.orient||zv)!==t_&&(e[o]||(e[o]=[])).push(t)}));for(const r in e){const i=e[r];S_(t,i,R_(i,r,n.legends,h,d,l,c))}p.forEach((e=>{const r=e.bounds;if(r.equals(e._bounds)||(e.bounds=e._bounds,t.dirty(e),e.bounds=r,t.dirty(e)),n.autosize&&n.autosize.type===Zv)switch(e.orient){case Tv:case zv:f.add(r.x1,0).add(r.x2,0);break;case Bv:case Nv:f.add(0,r.y1).add(0,r.y2)}else f.union(r)}))}f.union(h).union(d),r&&f.union(function(t,e,n,r,i){var o,a=e.items[0],u=a.frame,s=a.orient,l=a.anchor,c=a.offset,f=a.padding,h=a.items[0].items[0],d=a.items[1]&&a.items[1].items[0],p=s===Tv||s===zv?r:n,g=0,m=0,y=0,v=0,_=0;if(u!==qv?s===Tv?(g=i.y2,p=i.y1):s===zv?(g=i.y1,p=i.y2):(g=i.x1,p=i.x2):s===Tv&&(g=r,p=0),o=l===Ov?g:l===$v?p:(g+p)/2,d&&d.text){switch(s){case Bv:case Nv:_=h.bounds.height()+f;break;case Tv:v=h.bounds.width()+f;break;case zv:v=-h.bounds.width()-f}__.clear().union(d.bounds),__.translate(v-(d.x||0),_-(d.y||0)),x_(d,"x",v)|x_(d,"y",_)&&(t.dirty(d),d.bounds.clear().union(__),d.mark.bounds.clear().union(__),t.dirty(d)),__.clear().union(d.bounds)}else __.clear();switch(__.union(h.bounds),s){case Bv:m=o,y=i.y1-__.height()-c;break;case Tv:m=i.x1-__.width()-c,y=o;break;case zv:m=i.x2+__.width()+c,y=o;break;case Nv:m=o,y=i.y2+c;break;default:m=a.x,y=a.y}return x_(a,"x",m)|x_(a,"y",y)&&(__.translate(m,y),t.dirty(a),a.bounds.clear().union(__),e.bounds.clear().union(__),t.dirty(a)),a.bounds}(t,r,l,c,f));e.clip&&f.set(0,0,e.width||0,e.height||0);!function(t,e,n,r){const i=r.autosize||{},o=i.type;if(t._autosize<1||!o)return;let a=t._width,u=t._height,s=Math.max(0,e.width||0),l=Math.max(0,Math.ceil(-n.x1)),c=Math.max(0,e.height||0),f=Math.max(0,Math.ceil(-n.y1));const h=Math.max(0,Math.ceil(n.x2-s)),d=Math.max(0,Math.ceil(n.y2-c));if(i.contains===Jv){const e=t.padding();a-=e.left+e.right,u-=e.top+e.bottom}o===t_?(l=0,f=0,s=a,c=u):o===Zv?(s=Math.max(0,a-l-h),c=Math.max(0,u-f-d)):o===Qv?(s=Math.max(0,a-l-h),u=c+f+d):o===Kv?(a=s+l+h,c=Math.max(0,u-f-d)):"pad"===o&&(a=s+l+h,u=c+f+d);t._resizeView(a,u,s,c,[l,f],i.resize)}(t,e,f,n)}(n,e,t)})),function(t){return t&&"legend-entry"!==t.mark.role}(t.mark.group)?e.reflow():e}});var P_=Object.freeze({__proto__:null,bound:a_,identifier:l_,mark:c_,overlap:f_,render:v_,viewlayout:U_});function j_(t){ga.call(this,null,t)}function I_(t){ga.call(this,null,t)}function W_(){return qo({})}function H_(t){ga.call(this,null,t)}function Y_(t){ga.call(this,[],t)}st(j_,ga,{transform(t,e){if(this.value&&!t.modified())return e.StopPropagation;var n=e.dataflow.locale(),r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=this.value,o=t.scale,a=$d(o,null==t.count?t.values?t.values.length:10:t.count,t.minstep),u=t.format||Ud(n,o,a,t.formatSpecifier,t.formatType,!!t.values),s=t.values?qd(o,t.values,a):Ld(o,a);return i&&(r.rem=i),i=s.map(((t,e)=>qo({index:e/(s.length-1||1),value:t,label:u(t)}))),t.extra&&i.length&&i.push(qo({index:-1,extra:{value:i[0].value},label:""})),r.source=i,r.add=i,this.value=i,r}}),st(I_,ga,{transform(t,e){var n=e.dataflow,r=e.fork(e.NO_SOURCE|e.NO_FIELDS),i=t.item||W_,o=t.key||Ro,a=this.value;return _(r.encode)&&(r.encode=null),a&&(t.modified("key")||e.modified(o))&&s("DataJoin does not support modified key function or fields."),a||(e=e.addAll(),this.value=a=function(t){const e=at().test((t=>t.exit));return e.lookup=n=>e.get(t(n)),e}(o)),e.visit(e.ADD,(t=>{const e=o(t);let n=a.get(e);n?n.exit?(a.empty--,r.add.push(n)):r.mod.push(n):(n=i(t),a.set(e,n),r.add.push(n)),n.datum=t,n.exit=!1})),e.visit(e.MOD,(t=>{const e=o(t),n=a.get(e);n&&(n.datum=t,r.mod.push(n))})),e.visit(e.REM,(t=>{const e=o(t),n=a.get(e);t!==n.datum||n.exit||(r.rem.push(n),n.exit=!0,++a.empty)})),e.changed(e.ADD_MOD)&&r.modifies("datum"),(e.clean()||t.clean&&a.empty>n.cleanThreshold)&&n.runAfter(a.clean),r}}),st(H_,ga,{transform(t,e){var n=e.fork(e.ADD_REM),r=t.mod||!1,i=t.encoders,o=e.encode;if(_(o)){if(!n.changed()&&!o.every((t=>i[t])))return e.StopPropagation;o=o[0],n.encode=null}var a="enter"===o,u=i.update||m,s=i.enter||m,l=i.exit||m,c=(o&&!a?i[o]:u)||m;if(e.changed(e.ADD)&&(e.visit(e.ADD,(e=>{s(e,t),u(e,t)})),n.modifies(s.output),n.modifies(u.output),c!==m&&c!==u&&(e.visit(e.ADD,(e=>{c(e,t)})),n.modifies(c.output))),e.changed(e.REM)&&l!==m&&(e.visit(e.REM,(e=>{l(e,t)})),n.modifies(l.output)),a||c!==m){const i=e.MOD|(t.modified()?e.REFLOW:0);a?(e.visit(i,(e=>{const i=s(e,t)||r;(c(e,t)||i)&&n.mod.push(e)})),n.mod.length&&n.modifies(s.output)):e.visit(i,(e=>{(c(e,t)||r)&&n.mod.push(e)})),n.mod.length&&n.modifies(c.output)}return n.changed()?n:e.StopPropagation}}),st(Y_,ga,{transform(t,e){if(null!=this.value&&!t.modified())return e.StopPropagation;var n,r,i,o,a,u=e.dataflow.locale(),s=e.fork(e.NO_SOURCE|e.NO_FIELDS),l=this.value,c=t.type||zd,f=t.scale,h=+t.limit,d=$d(f,null==t.count?5:t.count,t.minstep),p=!!t.values||c===zd,g=t.format||Hd(u,f,d,c,t.formatSpecifier,t.formatType,p),m=t.values||Wd(f,d);return l&&(s.rem=l),c===zd?(h&&m.length>h?(e.dataflow.warn("Symbol legend count exceeds limit, filtering items."),l=m.slice(0,h-1),a=!0):l=m,Y(i=t.size)?(t.values||0!==f(l[0])||(l=l.slice(1)),o=l.reduce(((e,n)=>Math.max(e,i(n,t))),0)):i=Q(o=i||8),l=l.map(((e,n)=>qo({index:n,label:g(e,n,l),value:e,offset:o,size:i(e,t)}))),a&&(a=m[l.length],l.push(qo({index:l.length,label:`…${m.length-l.length} entries`,value:a,offset:o,size:i(a,t)})))):"gradient"===c?(n=f.domain(),r=Dd(f,n[0],M(n)),m.length<3&&!t.values&&n[0]!==M(n)&&(m=[n[0],M(n)]),l=m.map(((t,e)=>qo({index:e,label:g(t,e,m),value:t,perc:r(t)})))):(i=m.length-1,r=function(t){const e=t.domain(),n=e.length-1;let r=+e[0],i=+M(e),o=i-r;if(t.type===Zh){const t=n?o/n:.1;r-=t,i+=t,o=i-r}return t=>(t-r)/o}(f),l=m.map(((t,e)=>qo({index:e,label:g(t,e,m),value:t,perc:e?r(t):0,perc2:e===i?1:r(m[e+1])})))),s.source=l,s.add=l,this.value=l,s}});const V_=t=>t.source.x,G_=t=>t.source.y,X_=t=>t.target.x,J_=t=>t.target.y;function Z_(t){ga.call(this,{},t)}Z_.Definition={type:"LinkPath",metadata:{modifies:!0},params:[{name:"sourceX",type:"field",default:"source.x"},{name:"sourceY",type:"field",default:"source.y"},{name:"targetX",type:"field",default:"target.x"},{name:"targetY",type:"field",default:"target.y"},{name:"orient",type:"enum",default:"vertical",values:["horizontal","vertical","radial"]},{name:"shape",type:"enum",default:"line",values:["line","arc","curve","diagonal","orthogonal"]},{name:"require",type:"signal"},{name:"as",type:"string",default:"path"}]},st(Z_,ga,{transform(t,e){var n=t.sourceX||V_,r=t.sourceY||G_,i=t.targetX||X_,o=t.targetY||J_,a=t.as||"path",u=t.orient||"vertical",l=t.shape||"line",c=ex.get(l+"-"+u)||ex.get(l);return c||s("LinkPath unsupported type: "+t.shape+(t.orient?"-"+t.orient:"")),e.visit(e.SOURCE,(t=>{t[a]=c(n(t),r(t),i(t),o(t))})),e.reflow(t.modified()).modifies(a)}});const Q_=(t,e,n,r)=>"M"+t+","+e+"L"+n+","+r,K_=(t,e,n,r)=>{var i=n-t,o=r-e,a=Math.sqrt(i*i+o*o)/2;return"M"+t+","+e+"A"+a+","+a+" "+180*Math.atan2(o,i)/Math.PI+" 0 1 "+n+","+r},tx=(t,e,n,r)=>{const i=n-t,o=r-e,a=.2*(i+o),u=.2*(o-i);return"M"+t+","+e+"C"+(t+a)+","+(e+u)+" "+(n+u)+","+(r-a)+" "+n+","+r},ex=at({line:Q_,"line-radial":(t,e,n,r)=>Q_(e*Math.cos(t),e*Math.sin(t),r*Math.cos(n),r*Math.sin(n)),arc:K_,"arc-radial":(t,e,n,r)=>K_(e*Math.cos(t),e*Math.sin(t),r*Math.cos(n),r*Math.sin(n)),curve:tx,"curve-radial":(t,e,n,r)=>tx(e*Math.cos(t),e*Math.sin(t),r*Math.cos(n),r*Math.sin(n)),"orthogonal-horizontal":(t,e,n,r)=>"M"+t+","+e+"V"+r+"H"+n,"orthogonal-vertical":(t,e,n,r)=>"M"+t+","+e+"H"+n+"V"+r,"orthogonal-radial":(t,e,n,r)=>{const i=Math.cos(t),o=Math.sin(t),a=Math.cos(n),u=Math.sin(n);return"M"+e*i+","+e*o+"A"+e+","+e+" 0 0,"+((Math.abs(n-t)>Math.PI?n<=t:n>t)?1:0)+" "+e*a+","+e*u+"L"+r*a+","+r*u},"diagonal-horizontal":(t,e,n,r)=>{const i=(t+n)/2;return"M"+t+","+e+"C"+i+","+e+" "+i+","+r+" "+n+","+r},"diagonal-vertical":(t,e,n,r)=>{const i=(e+r)/2;return"M"+t+","+e+"C"+t+","+i+" "+n+","+i+" "+n+","+r},"diagonal-radial":(t,e,n,r)=>{const i=Math.cos(t),o=Math.sin(t),a=Math.cos(n),u=Math.sin(n),s=(e+r)/2;return"M"+e*i+","+e*o+"C"+s*i+","+s*o+" "+s*a+","+s*u+" "+r*a+","+r*u}});function nx(t){ga.call(this,null,t)}nx.Definition={type:"Pie",metadata:{modifies:!0},params:[{name:"field",type:"field"},{name:"startAngle",type:"number",default:0},{name:"endAngle",type:"number",default:6.283185307179586},{name:"sort",type:"boolean",default:!1},{name:"as",type:"string",array:!0,length:2,default:["startAngle","endAngle"]}]},st(nx,ga,{transform(t,e){var n,r,i,o=t.as||["startAngle","endAngle"],a=o[0],u=o[1],s=t.field||p,l=t.startAngle||0,c=null!=t.endAngle?t.endAngle:2*Math.PI,f=e.source,h=f.map(s),d=h.length,g=l,m=(c-l)/pe(h),y=de(d);for(t.sort&&y.sort(((t,e)=>h[t]-h[e])),n=0;nt+(e<0?-1:e>0?1:0)),0))!==e.length&&n.warn("Log scale domain includes zero: "+kt(e)));return e}function ux(t,e,n){return Y(t)&&(e||n)?Ad(t,sx(e||[0,1],n)):t}function sx(t,e){return e?t.slice().reverse():t}function lx(t){ga.call(this,null,t)}st(ox,ga,{transform(t,e){var n=e.dataflow,r=this.value,i=function(t){var e,n=t.type,r="";if(n===Gh)return"sequential-linear";(function(t){const e=t.type;return yd(e)&&e!==Yh&&e!==Vh&&(t.scheme||t.range&&t.range.length&&t.range.every(gt))})(t)&&(r=2===(e=t.rawDomain?t.rawDomain.length:t.domain?t.domain.length+ +(null!=t.domainMid):0)?"sequential-":3===e?"diverging-":"");return(r+n||Ph).toLowerCase()}(t);for(i in r&&i===r.type||(this.value=r=pd(i)()),t)if(!ix[i]){if("padding"===i&&rx(r.type))continue;Y(r[i])?r[i](t[i]):n.warn("Unsupported scale property: "+i)}return function(t,e,n){var r=t.type,i=e.round||!1,o=e.range;if(null!=e.rangeStep)o=function(t,e,n){t!==td&&t!==Kh&&s("Only band and point scales support rangeStep.");var r=(null!=e.paddingOuter?e.paddingOuter:e.padding)||0,i=t===Kh?1:(null!=e.paddingInner?e.paddingInner:e.padding)||0;return[0,e.rangeStep*Uh(n,i,r)]}(r,e,n);else if(e.scheme&&(o=function(t,e,n){var r,i=e.schemeExtent;_(e.scheme)?r=Md(e.scheme,e.interpolate,e.interpolateGamma):(r=Td(e.scheme.toLowerCase()))||s(`Unrecognized scheme name: ${e.scheme}`);return n=t===Zh?n+1:t===ed?n-1:t===Xh||t===Jh?+e.schemeCount||5:n,bd(t)?ux(r,i,e.reverse):Y(r)?Ed(ux(r,i),n):t===Qh?r:r.slice(0,n)}(r,e,n),Y(o))){if(t.interpolator)return t.interpolator(o);s(`Scale type ${r} does not support interpolating color schemes.`)}if(o&&bd(r))return t.interpolator(Md(sx(o,e.reverse),e.interpolate,e.interpolateGamma));o&&e.interpolate&&t.interpolate?t.interpolate(Cd(e.interpolate,e.interpolateGamma)):Y(t.round)?t.round(i):Y(t.rangeRound)&&t.interpolate(i?Bf:Sf);o&&t.range(sx(o,e.reverse))}(r,t,function(t,e,n){let r=e.bins;if(r&&!_(r)){const e=t.domain(),n=e[0],i=M(e),o=r.step;let a=null==r.start?n:r.start,u=null==r.stop?i:r.stop;o||s("Scale bins parameter missing step property."),ai&&(u=o*Math.floor(i/o)),r=de(a,u+o/2,o)}r?t.bins=r:t.bins&&delete t.bins;t.type===ed&&(r?e.domain||e.domainRaw||(t.domain(r),n=r.length):t.bins=t.domain());return n}(r,t,function(t,e,n){const r=function(t,e,n){return e?(t.domain(ax(t.type,e,n)),e.length):-1}(t,e.domainRaw,n);if(r>-1)return r;var i,o,a=e.domain,u=t.type,s=e.zero||void 0===e.zero&&function(t){const e=t.type;return!t.bins&&(e===Ph||e===Ih||e===Wh)}(t);if(!a)return 0;rx(u)&&e.padding&&a[0]!==M(a)&&(a=function(t,e,n,r,i,o){var a=Math.abs(M(n)-n[0]),u=a/(a-2*r),s=t===jh?L(e,null,u):t===Wh?U(e,null,u,.5):t===Ih?U(e,null,u,i||1):t===Hh?P(e,null,u,o||1):q(e,null,u);return(e=e.slice())[0]=s[0],e[e.length-1]=s[1],e}(u,a,e.range,e.padding,e.exponent,e.constant));if((s||null!=e.domainMin||null!=e.domainMax||null!=e.domainMid)&&(i=(a=a.slice()).length-1||1,s&&(a[0]>0&&(a[0]=0),a[i]<0&&(a[i]=0)),null!=e.domainMin&&(a[0]=e.domainMin),null!=e.domainMax&&(a[i]=e.domainMax),null!=e.domainMid)){const t=(o=e.domainMid)>a[i]?i+1:ot(s);if(null==e)d.push(t.slice());else for(i={},o=0,a=t.length;oh&&(h=f),n&&c.sort(n)}return d.max=h,d}(e.source,t.groupby,l,c),r=0,i=n.length,o=n.max;r0?1:t<0?-1:0},qx=Math.sqrt,Lx=Math.tan;function Ux(t){return t>1?0:t<-1?bx:Math.acos(t)}function Px(t){return t>1?wx:t<-1?-wx:Math.asin(t)}function jx(){}function Ix(t,e){t&&Hx.hasOwnProperty(t.type)&&Hx[t.type](t,e)}var Wx={Feature:function(t,e){Ix(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r=0?1:-1,i=r*n,o=Sx(e=(e*=Ex)/2+kx),a=Rx(e),u=Kx*a,s=Qx*o+u*Sx(i),l=u*r*Rx(i);fb.add(Fx(l,s)),Zx=t,Qx=o,Kx=a}function vb(t){return[Fx(t[1],t[0]),Px(t[2])]}function _b(t){var e=t[0],n=t[1],r=Sx(n);return[r*Sx(e),r*Rx(e),Rx(n)]}function xb(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function bb(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function wb(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function kb(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function Ab(t){var e=qx(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}var Mb,Eb,Db,Cb,Fb,Sb,Bb,Tb,zb,Nb,Ob,Rb,$b,qb,Lb,Ub,Pb={point:jb,lineStart:Wb,lineEnd:Hb,polygonStart:function(){Pb.point=Yb,Pb.lineStart=Vb,Pb.lineEnd=Gb,sb=new Qt,db.polygonStart()},polygonEnd:function(){db.polygonEnd(),Pb.point=jb,Pb.lineStart=Wb,Pb.lineEnd=Hb,fb<0?(tb=-(nb=180),eb=-(rb=90)):sb>_x?rb=90:sb<-1e-6&&(eb=-90),cb[0]=tb,cb[1]=nb},sphere:function(){tb=-(nb=180),eb=-(rb=90)}};function jb(t,e){lb.push(cb=[tb=t,nb=t]),erb&&(rb=e)}function Ib(t,e){var n=_b([t*Ex,e*Ex]);if(ub){var r=bb(ub,n),i=bb([r[1],-r[0],0],r);Ab(i),i=vb(i);var o,a=t-ib,u=a>0?1:-1,s=i[0]*Mx*u,l=Dx(a)>180;l^(u*ibrb&&(rb=o):l^(u*ib<(s=(s+360)%360-180)&&srb&&(rb=e)),l?tXb(tb,nb)&&(nb=t):Xb(t,nb)>Xb(tb,nb)&&(tb=t):nb>=tb?(tnb&&(nb=t)):t>ib?Xb(tb,t)>Xb(tb,nb)&&(nb=t):Xb(t,nb)>Xb(tb,nb)&&(tb=t)}else lb.push(cb=[tb=t,nb=t]);erb&&(rb=e),ub=n,ib=t}function Wb(){Pb.point=Ib}function Hb(){cb[0]=tb,cb[1]=nb,Pb.point=jb,ub=null}function Yb(t,e){if(ub){var n=t-ib;sb.add(Dx(n)>180?n+(n>0?360:-360):n)}else ob=t,ab=e;db.point(t,e),Ib(t,e)}function Vb(){db.lineStart()}function Gb(){Yb(ob,ab),db.lineEnd(),Dx(sb)>_x&&(tb=-(nb=180)),cb[0]=tb,cb[1]=nb,ub=null}function Xb(t,e){return(e-=t)<0?e+360:e}function Jb(t,e){return t[0]-e[0]}function Zb(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:ebx?t+Math.round(-t/Ax)*Ax:t,e]}function fw(t,e,n){return(t%=Ax)?e||n?lw(dw(t),pw(e,n)):dw(t):e||n?pw(e,n):cw}function hw(t){return function(e,n){return[(e+=t)>bx?e-Ax:e<-bx?e+Ax:e,n]}}function dw(t){var e=hw(t);return e.invert=hw(-t),e}function pw(t,e){var n=Sx(t),r=Rx(t),i=Sx(e),o=Rx(e);function a(t,e){var a=Sx(e),u=Sx(t)*a,s=Rx(t)*a,l=Rx(e),c=l*n+u*r;return[Fx(s*i-c*o,u*n-l*r),Px(c*i+s*o)]}return a.invert=function(t,e){var a=Sx(e),u=Sx(t)*a,s=Rx(t)*a,l=Rx(e),c=l*i-s*o;return[Fx(s*i+l*o,u*n+c*r),Px(c*n-u*r)]},a}function gw(t,e){(e=_b(e))[0]-=t,Ab(e);var n=Ux(-e[1]);return((-e[2]<0?-n:n)+Ax-_x)%Ax}function mw(){var t,e=[];return{point:function(e,n,r){t.push([e,n,r])},lineStart:function(){e.push(t=[])},lineEnd:jx,rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))},result:function(){var n=e;return e=[],t=null,n}}}function yw(t,e){return Dx(t[0]-e[0])<_x&&Dx(t[1]-e[1])<_x}function vw(t,e,n,r){this.x=t,this.z=e,this.o=n,this.e=r,this.v=!1,this.n=this.p=null}function _w(t,e,n,r,i){var o,a,u=[],s=[];if(t.forEach((function(t){if(!((e=t.length-1)<=0)){var e,n,r=t[0],a=t[e];if(yw(r,a)){if(!r[2]&&!a[2]){for(i.lineStart(),o=0;o=0;--o)i.point((c=l[o])[0],c[1]);else r(h.x,h.p.x,-1,i);h=h.p}l=(h=h.o).z,d=!d}while(!h.v);i.lineEnd()}}}function xw(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r=0?1:-1,E=M*A,D=E>bx,C=m*w;if(s.add(Fx(C*M*Rx(E),y*k+C*Sx(E))),a+=D?A+M*Ax:A,D^p>=n^x>=n){var F=bb(_b(d),_b(_));Ab(F);var S=bb(o,F);Ab(S);var B=(D^A>=0?-1:1)*Px(S[2]);(r>B||r===B&&(F[0]||F[1]))&&(u+=D^A>=0?1:-1)}}return(a<-1e-6||a<_x&&s<-1e-12)^1&u}(o,r);a.length?(f||(i.polygonStart(),f=!0),_w(a,Aw,t,n,i)):t&&(f||(i.polygonStart(),f=!0),i.lineStart(),n(null,null,1,i),i.lineEnd()),f&&(i.polygonEnd(),f=!1),a=o=null},sphere:function(){i.polygonStart(),i.lineStart(),n(null,null,1,i),i.lineEnd(),i.polygonEnd()}};function d(e,n){t(e,n)&&i.point(e,n)}function p(t,e){s.point(t,e)}function g(){h.point=p,s.lineStart()}function m(){h.point=d,s.lineEnd()}function y(t,e){u.push([t,e]),c.point(t,e)}function v(){c.lineStart(),u=[]}function _(){y(u[0][0],u[0][1]),c.lineEnd();var t,e,n,r,s=c.clean(),h=l.result(),d=h.length;if(u.pop(),o.push(u),u=null,d)if(1&s){if((e=(n=h[0]).length-1)>0){for(f||(i.polygonStart(),f=!0),i.lineStart(),t=0;t1&&2&s&&h.push(h.pop().concat(h.shift())),a.push(h.filter(kw))}return h}}function kw(t){return t.length>1}function Aw(t,e){return((t=t.x)[0]<0?t[1]-wx-_x:wx-t[1])-((e=e.x)[0]<0?e[1]-wx-_x:wx-e[1])}cw.invert=cw;var Mw=ww((function(){return!0}),(function(t){var e,n=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(o,a){var u=o>0?bx:-bx,s=Dx(o-n);Dx(s-bx)<_x?(t.point(n,r=(r+a)/2>0?wx:-wx),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(u,r),t.point(o,r),e=0):i!==u&&s>=bx&&(Dx(n-i)<_x&&(n-=i*_x),Dx(o-u)<_x&&(o-=u*_x),r=function(t,e,n,r){var i,o,a=Rx(t-n);return Dx(a)>_x?Cx((Rx(e)*(o=Sx(r))*Rx(n)-Rx(r)*(i=Sx(e))*Rx(t))/(i*o*a)):(e+r)/2}(n,r,o,a),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(u,r),e=0),t.point(n=o,r=a),i=u},lineEnd:function(){t.lineEnd(),n=r=NaN},clean:function(){return 2-e}}}),(function(t,e,n,r){var i;if(null==t)i=n*wx,r.point(-bx,i),r.point(0,i),r.point(bx,i),r.point(bx,0),r.point(bx,-i),r.point(0,-i),r.point(-bx,-i),r.point(-bx,0),r.point(-bx,i);else if(Dx(t[0]-e[0])>_x){var o=t[0]0,i=Dx(e)>_x;function o(t,n){return Sx(t)*Sx(n)>e}function a(t,n,r){var i=[1,0,0],o=bb(_b(t),_b(n)),a=xb(o,o),u=o[0],s=a-u*u;if(!s)return!r&&t;var l=e*a/s,c=-e*u/s,f=bb(i,o),h=kb(i,l);wb(h,kb(o,c));var d=f,p=xb(h,d),g=xb(d,d),m=p*p-g*(xb(h,h)-1);if(!(m<0)){var y=qx(m),v=kb(d,(-p-y)/g);if(wb(v,h),v=vb(v),!r)return v;var _,x=t[0],b=n[0],w=t[1],k=n[1];b0^v[1]<(Dx(v[0]-x)<_x?w:k):w<=v[1]&&v[1]<=k:A>bx^(x<=v[0]&&v[0]<=b)){var E=kb(d,(-p+y)/g);return wb(E,h),[v,vb(E)]}}}function u(e,n){var i=r?t:bx-t,o=0;return e<-i?o|=1:e>i&&(o|=2),n<-i?o|=4:n>i&&(o|=8),o}return ww(o,(function(t){var e,n,s,l,c;return{lineStart:function(){l=s=!1,c=1},point:function(f,h){var d,p=[f,h],g=o(f,h),m=r?g?0:u(f,h):g?u(f+(f<0?bx:-bx),h):0;if(!e&&(l=s=g)&&t.lineStart(),g!==s&&(!(d=a(e,p))||yw(e,d)||yw(p,d))&&(p[2]=1),g!==s)c=0,g?(t.lineStart(),d=a(p,e),t.point(d[0],d[1])):(d=a(e,p),t.point(d[0],d[1],2),t.lineEnd()),e=d;else if(i&&e&&r^g){var y;m&n||!(y=a(p,e,!0))||(c=0,r?(t.lineStart(),t.point(y[0][0],y[0][1]),t.point(y[1][0],y[1][1]),t.lineEnd()):(t.point(y[1][0],y[1][1]),t.lineEnd(),t.lineStart(),t.point(y[0][0],y[0][1],3)))}!g||e&&yw(e,p)||t.point(p[0],p[1]),e=p,s=g,n=m},lineEnd:function(){s&&t.lineEnd(),e=null},clean:function(){return c|(l&&s)<<1}}}),(function(e,r,i,o){!function(t,e,n,r,i,o){if(n){var a=Sx(e),u=Rx(e),s=r*n;null==i?(i=e+r*Ax,o=e-s/2):(i=gw(a,i),o=gw(a,o),(r>0?io)&&(i+=r*Ax));for(var l,c=i;r>0?c>o:c0)do{l.point(0===c||3===c?t:n,c>1?r:e)}while((c=(c+u+4)%4)!==f);else l.point(o[0],o[1])}function a(r,i){return Dx(r[0]-t)<_x?i>0?0:3:Dx(r[0]-n)<_x?i>0?2:1:Dx(r[1]-e)<_x?i>0?1:0:i>0?3:2}function u(t,e){return s(t.x,e.x)}function s(t,e){var n=a(t,1),r=a(e,1);return n!==r?n-r:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(a){var s,l,c,f,h,d,p,g,m,y,v,_=a,x=mw(),b={point:w,lineStart:function(){b.point=k,l&&l.push(c=[]);y=!0,m=!1,p=g=NaN},lineEnd:function(){s&&(k(f,h),d&&m&&x.rejoin(),s.push(x.result()));b.point=w,m&&_.lineEnd()},polygonStart:function(){_=x,s=[],l=[],v=!0},polygonEnd:function(){var e=function(){for(var e=0,n=0,i=l.length;nr&&(h-o)*(r-a)>(d-a)*(t-o)&&++e:d<=r&&(h-o)*(r-a)<(d-a)*(t-o)&&--e;return e}(),n=v&&e,i=(s=he(s)).length;(n||i)&&(a.polygonStart(),n&&(a.lineStart(),o(null,null,1,a),a.lineEnd()),i&&_w(s,u,e,o,a),a.polygonEnd());_=a,s=l=c=null}};function w(t,e){i(t,e)&&_.point(t,e)}function k(o,a){var u=i(o,a);if(l&&c.push([o,a]),y)f=o,h=a,d=u,y=!1,u&&(_.lineStart(),_.point(o,a));else if(u&&m)_.point(o,a);else{var s=[p=Math.max(Cw,Math.min(Dw,p)),g=Math.max(Cw,Math.min(Dw,g))],x=[o=Math.max(Cw,Math.min(Dw,o)),a=Math.max(Cw,Math.min(Dw,a))];!function(t,e,n,r,i,o){var a,u=t[0],s=t[1],l=0,c=1,f=e[0]-u,h=e[1]-s;if(a=n-u,f||!(a>0)){if(a/=f,f<0){if(a0){if(a>c)return;a>l&&(l=a)}if(a=i-u,f||!(a<0)){if(a/=f,f<0){if(a>c)return;a>l&&(l=a)}else if(f>0){if(a0)){if(a/=h,h<0){if(a0){if(a>c)return;a>l&&(l=a)}if(a=o-s,h||!(a<0)){if(a/=h,h<0){if(a>c)return;a>l&&(l=a)}else if(h>0){if(a0&&(t[0]=u+l*f,t[1]=s+l*h),c<1&&(e[0]=u+c*f,e[1]=s+c*h),!0}}}}}(s,x,t,e,n,r)?u&&(_.lineStart(),_.point(o,a),v=!1):(m||(_.lineStart(),_.point(s[0],s[1])),_.point(x[0],x[1]),u||_.lineEnd(),v=!1)}p=o,g=a,m=u}return b}}function Sw(t,e,n){var r=de(t,e-_x,n).concat(e);return function(t){return r.map((function(e){return[t,e]}))}}function Bw(t,e,n){var r=de(t,e-_x,n).concat(e);return function(t){return r.map((function(e){return[e,t]}))}}var Tw,zw,Nw,Ow,Rw=t=>t,$w=new Qt,qw=new Qt,Lw={point:jx,lineStart:jx,lineEnd:jx,polygonStart:function(){Lw.lineStart=Uw,Lw.lineEnd=Iw},polygonEnd:function(){Lw.lineStart=Lw.lineEnd=Lw.point=jx,$w.add(Dx(qw)),qw=new Qt},result:function(){var t=$w/2;return $w=new Qt,t}};function Uw(){Lw.point=Pw}function Pw(t,e){Lw.point=jw,Tw=Nw=t,zw=Ow=e}function jw(t,e){qw.add(Ow*t-Nw*e),Nw=t,Ow=e}function Iw(){jw(Tw,zw)}var Ww=1/0,Hw=Ww,Yw=-Ww,Vw=Yw,Gw={point:function(t,e){tYw&&(Yw=t);eVw&&(Vw=e)},lineStart:jx,lineEnd:jx,polygonStart:jx,polygonEnd:jx,result:function(){var t=[[Ww,Hw],[Yw,Vw]];return Yw=Vw=-(Hw=Ww=1/0),t}};var Xw,Jw,Zw,Qw,Kw=0,tk=0,ek=0,nk=0,rk=0,ik=0,ok=0,ak=0,uk=0,sk={point:lk,lineStart:ck,lineEnd:dk,polygonStart:function(){sk.lineStart=pk,sk.lineEnd=gk},polygonEnd:function(){sk.point=lk,sk.lineStart=ck,sk.lineEnd=dk},result:function(){var t=uk?[ok/uk,ak/uk]:ik?[nk/ik,rk/ik]:ek?[Kw/ek,tk/ek]:[NaN,NaN];return Kw=tk=ek=nk=rk=ik=ok=ak=uk=0,t}};function lk(t,e){Kw+=t,tk+=e,++ek}function ck(){sk.point=fk}function fk(t,e){sk.point=hk,lk(Zw=t,Qw=e)}function hk(t,e){var n=t-Zw,r=e-Qw,i=qx(n*n+r*r);nk+=i*(Zw+t)/2,rk+=i*(Qw+e)/2,ik+=i,lk(Zw=t,Qw=e)}function dk(){sk.point=lk}function pk(){sk.point=mk}function gk(){yk(Xw,Jw)}function mk(t,e){sk.point=yk,lk(Xw=Zw=t,Jw=Qw=e)}function yk(t,e){var n=t-Zw,r=e-Qw,i=qx(n*n+r*r);nk+=i*(Zw+t)/2,rk+=i*(Qw+e)/2,ik+=i,ok+=(i=Qw*t-Zw*e)*(Zw+t),ak+=i*(Qw+e),uk+=3*i,lk(Zw=t,Qw=e)}function vk(t){this._context=t}vk.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,Ax)}},result:jx};var _k,xk,bk,wk,kk,Ak=new Qt,Mk={point:jx,lineStart:function(){Mk.point=Ek},lineEnd:function(){_k&&Dk(xk,bk),Mk.point=jx},polygonStart:function(){_k=!0},polygonEnd:function(){_k=null},result:function(){var t=+Ak;return Ak=new Qt,t}};function Ek(t,e){Mk.point=Dk,xk=wk=t,bk=kk=e}function Dk(t,e){wk-=t,kk-=e,Ak.add(qx(wk*wk+kk*kk)),wk=t,kk=e}function Ck(){this._string=[]}function Fk(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function Sk(t,e){var n,r,i=4.5;function o(t){return t&&("function"==typeof i&&r.pointRadius(+i.apply(this,arguments)),Gx(t,n(r))),r.result()}return o.area=function(t){return Gx(t,n(Lw)),Lw.result()},o.measure=function(t){return Gx(t,n(Mk)),Mk.result()},o.bounds=function(t){return Gx(t,n(Gw)),Gw.result()},o.centroid=function(t){return Gx(t,n(sk)),sk.result()},o.projection=function(e){return arguments.length?(n=null==e?(t=null,Rw):(t=e).stream,o):t},o.context=function(t){return arguments.length?(r=null==t?(e=null,new Ck):new vk(e=t),"function"!=typeof i&&r.pointRadius(i),o):e},o.pointRadius=function(t){return arguments.length?(i="function"==typeof t?t:(r.pointRadius(+t),+t),o):i},o.projection(t).context(e)}function Bk(t){return function(e){var n=new Tk;for(var r in t)n[r]=t[r];return n.stream=e,n}}function Tk(){}function zk(t,e,n){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),Gx(n,t.stream(Gw)),e(Gw.result()),null!=r&&t.clipExtent(r),t}function Nk(t,e,n){return zk(t,(function(n){var r=e[1][0]-e[0][0],i=e[1][1]-e[0][1],o=Math.min(r/(n[1][0]-n[0][0]),i/(n[1][1]-n[0][1])),a=+e[0][0]+(r-o*(n[1][0]+n[0][0]))/2,u=+e[0][1]+(i-o*(n[1][1]+n[0][1]))/2;t.scale(150*o).translate([a,u])}),n)}function Ok(t,e,n){return Nk(t,[[0,0],e],n)}function Rk(t,e,n){return zk(t,(function(n){var r=+e,i=r/(n[1][0]-n[0][0]),o=(r-i*(n[1][0]+n[0][0]))/2,a=-i*n[0][1];t.scale(150*i).translate([o,a])}),n)}function $k(t,e,n){return zk(t,(function(n){var r=+e,i=r/(n[1][1]-n[0][1]),o=-i*n[0][0],a=(r-i*(n[1][1]+n[0][1]))/2;t.scale(150*i).translate([o,a])}),n)}Ck.prototype={_radius:4.5,_circle:Fk(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._string.push("M",t,",",e),this._point=1;break;case 1:this._string.push("L",t,",",e);break;default:null==this._circle&&(this._circle=Fk(this._radius)),this._string.push("M",t,",",e,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}},Tk.prototype={constructor:Tk,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var qk=Sx(30*Ex);function Lk(t,e){return+e?function(t,e){function n(r,i,o,a,u,s,l,c,f,h,d,p,g,m){var y=l-r,v=c-i,_=y*y+v*v;if(_>4*e&&g--){var x=a+h,b=u+d,w=s+p,k=qx(x*x+b*b+w*w),A=Px(w/=k),M=Dx(Dx(w)-1)<_x||Dx(o-f)<_x?(o+f)/2:Fx(b,x),E=t(M,A),D=E[0],C=E[1],F=D-r,S=C-i,B=v*F-y*S;(B*B/_>e||Dx((y*F+v*S)/_-.5)>.3||a*h+u*d+s*p2?t[2]%360*Ex:0,F()):[m*Mx,y*Mx,v*Mx]},D.angle=function(t){return arguments.length?(_=t%360*Ex,F()):_*Mx},D.reflectX=function(t){return arguments.length?(x=t?-1:1,F()):x<0},D.reflectY=function(t){return arguments.length?(b=t?-1:1,F()):b<0},D.precision=function(t){return arguments.length?(a=Lk(u,E=t*t),S()):qx(E)},D.fitExtent=function(t,e){return Nk(D,t,e)},D.fitSize=function(t,e){return Ok(D,t,e)},D.fitWidth=function(t,e){return Rk(D,t,e)},D.fitHeight=function(t,e){return $k(D,t,e)},function(){return e=t.apply(this,arguments),D.invert=e.invert&&C,F()}}function Wk(t){var e=0,n=bx/3,r=Ik(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*Ex,n=t[1]*Ex):[e*Mx,n*Mx]},i}function Hk(t,e){var n=Rx(t),r=(n+Rx(e))/2;if(Dx(r)<_x)return function(t){var e=Sx(t);function n(t,n){return[t*e,Rx(n)/e]}return n.invert=function(t,n){return[t/e,Px(n*e)]},n}(t);var i=1+n*(2*r-n),o=qx(i)/r;function a(t,e){var n=qx(i-2*r*Rx(e))/r;return[n*Rx(t*=r),o-n*Sx(t)]}return a.invert=function(t,e){var n=o-e,a=Fx(t,Dx(n))*$x(n);return n*r<0&&(a-=bx*$x(t)*$x(n)),[a/r,Px((i-(t*t+n*n)*r*r)/(2*r))]},a}function Yk(){return Wk(Hk).scale(155.424).center([0,33.6442])}function Vk(){return Yk().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])}function Gk(t){return function(e,n){var r=Sx(e),i=Sx(n),o=t(r*i);return o===1/0?[2,0]:[o*i*Rx(e),o*Rx(n)]}}function Xk(t){return function(e,n){var r=qx(e*e+n*n),i=t(r),o=Rx(i),a=Sx(i);return[Fx(e*o,r*a),Px(r&&n*o/r)]}}var Jk=Gk((function(t){return qx(2/(1+t))}));Jk.invert=Xk((function(t){return 2*Px(t/2)}));var Zk=Gk((function(t){return(t=Ux(t))&&t/Rx(t)}));function Qk(t,e){return[t,Nx(Lx((wx+e)/2))]}function Kk(t){var e,n,r,i=jk(t),o=i.center,a=i.scale,u=i.translate,s=i.clipExtent,l=null;function c(){var o=bx*a(),u=i(function(t){function e(e){return(e=t(e[0]*Ex,e[1]*Ex))[0]*=Mx,e[1]*=Mx,e}return t=fw(t[0]*Ex,t[1]*Ex,t.length>2?t[2]*Ex:0),e.invert=function(e){return(e=t.invert(e[0]*Ex,e[1]*Ex))[0]*=Mx,e[1]*=Mx,e},e}(i.rotate()).invert([0,0]));return s(null==l?[[u[0]-o,u[1]-o],[u[0]+o,u[1]+o]]:t===Qk?[[Math.max(u[0]-o,l),e],[Math.min(u[0]+o,n),r]]:[[l,Math.max(u[1]-o,e)],[n,Math.min(u[1]+o,r)]])}return i.scale=function(t){return arguments.length?(a(t),c()):a()},i.translate=function(t){return arguments.length?(u(t),c()):u()},i.center=function(t){return arguments.length?(o(t),c()):o()},i.clipExtent=function(t){return arguments.length?(null==t?l=e=n=r=null:(l=+t[0][0],e=+t[0][1],n=+t[1][0],r=+t[1][1]),c()):null==l?null:[[l,e],[n,r]]},c()}function tA(t){return Lx((wx+t)/2)}function eA(t,e){var n=Sx(t),r=t===e?Rx(t):Nx(n/Sx(e))/Nx(tA(e)/tA(t)),i=n*Ox(tA(t),r)/r;if(!r)return Qk;function o(t,e){i>0?e<-wx+_x&&(e=-wx+_x):e>wx-_x&&(e=wx-_x);var n=i/Ox(tA(e),r);return[n*Rx(r*t),i-n*Sx(r*t)]}return o.invert=function(t,e){var n=i-e,o=$x(r)*qx(t*t+n*n),a=Fx(t,Dx(n))*$x(n);return n*r<0&&(a-=bx*$x(t)*$x(n)),[a/r,2*Cx(Ox(i/o,1/r))-wx]},o}function nA(t,e){return[t,e]}function rA(t,e){var n=Sx(t),r=t===e?Rx(t):(n-Sx(e))/(e-t),i=n/r+t;if(Dx(r)<_x)return nA;function o(t,e){var n=i-e,o=r*t;return[n*Rx(o),i-n*Sx(o)]}return o.invert=function(t,e){var n=i-e,o=Fx(t,Dx(n))*$x(n);return n*r<0&&(o-=bx*$x(t)*$x(n)),[o/r,i-$x(r)*qx(t*t+n*n)]},o}Zk.invert=Xk((function(t){return t})),Qk.invert=function(t,e){return[t,2*Cx(Tx(e))-wx]},nA.invert=nA;var iA=1.340264,oA=-.081106,aA=893e-6,uA=.003796,sA=qx(3)/2;function lA(t,e){var n=Px(sA*Rx(e)),r=n*n,i=r*r*r;return[t*Sx(n)/(sA*(iA+3*oA*r+i*(7*aA+9*uA*r))),n*(iA+oA*r+i*(aA+uA*r))]}function cA(t,e){var n=Sx(e),r=Sx(t)*n;return[n*Rx(t)/r,Rx(e)/r]}function fA(t,e){var n=e*e,r=n*n;return[t*(.8707-.131979*n+r*(r*(.003971*n-.001529*r)-.013791)),e*(1.007226+n*(.015085+r*(.028874*n-.044475-.005916*r)))]}function hA(t,e){return[Sx(e)*Rx(t),Rx(e)]}function dA(t,e){var n=Sx(e),r=1+Sx(t)*n;return[n*Rx(t)/r,Rx(e)/r]}function pA(t,e){return[Nx(Lx((wx+e)/2)),-t]}lA.invert=function(t,e){for(var n,r=e,i=r*r,o=i*i*i,a=0;a<12&&(o=(i=(r-=n=(r*(iA+oA*i+o*(aA+uA*i))-e)/(iA+3*oA*i+o*(7*aA+9*uA*i)))*r)*i*i,!(Dx(n)_x&&--i>0);return[t/(.8707+(o=r*r)*(o*(o*o*o*(.003971-.001529*o)-.013791)-.131979)),r]},hA.invert=Xk(Px),dA.invert=Xk((function(t){return 2*Cx(t)})),pA.invert=function(t,e){return[-e,2*Cx(Tx(t))-wx]};var gA=Math.abs,mA=Math.cos,yA=Math.sin,vA=Math.PI,_A=vA/2,xA=function(t){return t>0?Math.sqrt(t):0}(2);function bA(t){return t>1?_A:t<-1?-_A:Math.asin(t)}function wA(t,e){var n,r=t*yA(e),i=30;do{e-=n=(e+yA(e)-r)/(1+mA(e))}while(gA(n)>1e-6&&--i>0);return e/2}var kA=function(t,e,n){function r(r,i){return[t*r*mA(i=wA(n,i)),e*yA(i)]}return r.invert=function(r,i){return i=bA(i/e),[r/(t*mA(i)),bA((2*i+yA(2*i))/n)]},r}(xA/_A,xA,vA);const AA=Sk(),MA=["clipAngle","clipExtent","scale","translate","center","rotate","parallels","precision","reflectX","reflectY","coefficient","distance","fraction","lobes","parallel","radius","ratio","spacing","tilt"];function EA(t,e){return function n(){const r=e();return r.type=t,r.path=Sk().projection(r),r.copy=r.copy||function(){const t=n();return MA.forEach((e=>{r[e]&&t[e](r[e]())})),t.path.pointRadius(r.path.pointRadius()),t},r}}function DA(t,e){if(!t||"string"!=typeof t)throw new Error("Projection type must be a name string.");return t=t.toLowerCase(),arguments.length>1?(FA[t]=EA(t,e),this):FA[t]||null}function CA(t){return t&&t.path||AA}const FA={albers:Vk,albersusa:function(){var t,e,n,r,i,o,a=Vk(),u=Yk().rotate([154,0]).center([-2,58.5]).parallels([55,65]),s=Yk().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(t,e){o=[t,e]}};function c(t){var e=t[0],a=t[1];return o=null,n.point(e,a),o||(r.point(e,a),o)||(i.point(e,a),o)}function f(){return t=e=null,c}return c.invert=function(t){var e=a.scale(),n=a.translate(),r=(t[0]-n[0])/e,i=(t[1]-n[1])/e;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?u:i>=.166&&i<.234&&r>=-.214&&r<-.115?s:a).invert(t)},c.stream=function(n){return t&&e===n?t:(r=[a.stream(e=n),u.stream(n),s.stream(n)],i=r.length,t={point:function(t,e){for(var n=-1;++n2?t[2]+90:90]):[(t=n())[0],t[1],t[2]-90]},n([0,0,90]).scale(159.155)}};for(const t in FA)DA(t,FA[t]);function SA(){}const BA=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]];function TA(){var t=1,e=1,n=a;function r(t,e){return e.map((e=>i(t,e)))}function i(r,i){var a=[],u=[];return function(n,r,i){var a,u,s,l,c,f,h=new Array,d=new Array;a=u=-1,l=n[0]>=r,BA[l<<1].forEach(p);for(;++a=r,BA[s|l<<1].forEach(p);BA[l<<0].forEach(p);for(;++u=r,c=n[u*t]>=r,BA[l<<1|c<<2].forEach(p);++a=r,f=c,c=n[u*t+a+1]>=r,BA[s|l<<1|c<<2|f<<3].forEach(p);BA[l|c<<3].forEach(p)}a=-1,c=n[u*t]>=r,BA[c<<2].forEach(p);for(;++a=r,BA[c<<2|f<<3].forEach(p);function p(t){var e,n,r=[t[0][0]+a,t[0][1]+u],s=[t[1][0]+a,t[1][1]+u],l=o(r),c=o(s);(e=d[l])?(n=h[c])?(delete d[e.end],delete h[n.start],e===n?(e.ring.push(s),i(e.ring)):h[e.start]=d[n.end]={start:e.start,end:n.end,ring:e.ring.concat(n.ring)}):(delete d[e.end],e.ring.push(s),d[e.end=c]=e):(e=h[c])?(n=d[l])?(delete h[e.start],delete d[n.end],e===n?(e.ring.push(s),i(e.ring)):h[n.start]=d[e.end]={start:n.start,end:e.end,ring:n.ring.concat(e.ring)}):(delete h[e.start],e.ring.unshift(r),h[e.start=l]=e):h[l]=d[c]={start:l,end:c,ring:[r,s]}}BA[c<<3].forEach(p)}(r,i,(t=>{n(t,r,i),function(t){var e=0,n=t.length,r=t[n-1][1]*t[0][0]-t[n-1][0]*t[0][1];for(;++e0?a.push([t]):u.push(t)})),u.forEach((t=>{for(var e,n=0,r=a.length;n{var o,a=n[0],u=n[1],s=0|a,l=0|u,c=r[l*t+s];a>0&&a0&&u=0&&o>=0||s("invalid size"),t=i,e=o,r},r.smooth=function(t){return arguments.length?(n=t?a:SA,r):n===a},r}function zA(t,e){for(var n,r=-1,i=e.length;++rr!=d>r&&n<(h-l)*(r-c)/(d-c)+l&&(i=-i)}return i}function OA(t,e,n){var r,i,o,a;return function(t,e,n){return(e[0]-t[0])*(n[1]-t[1])==(n[0]-t[0])*(e[1]-t[1])}(t,e,n)&&(i=t[r=+(t[0]===e[0])],o=n[r],a=e[r],i<=o&&o<=a||a<=o&&o<=i)}function RA(t,e,n){return function(r){var i=et(r),o=n?Math.min(i[0],0):i[0],a=i[1],u=a-o,s=e?ie(o,a,t):u/(t+1);return de(o+s,a,s)}}function $A(t){ga.call(this,null,t)}function qA(t,e,n,r,i){const o=t.x1||0,a=t.y1||0,u=e*n<0;function s(t){t.forEach(l)}function l(t){u&&t.reverse(),t.forEach(c)}function c(t){t[0]=(t[0]-o)*e+r,t[1]=(t[1]-a)*n+i}return function(t){return t.coordinates.forEach(s),t}}function LA(t,e,n){const r=t>=0?t:wa(e,n);return Math.round((Math.sqrt(4*r*r+1)-1)/2)}function UA(t){return Y(t)?t:Q(+t)}function PA(){var t=t=>t[0],e=t=>t[1],n=p,r=[-1,-1],i=960,o=500,a=2;function u(u,s){const l=LA(r[0],u,t)>>a,c=LA(r[1],u,e)>>a,f=l?l+2:0,h=c?c+2:0,d=2*f+(i>>a),p=2*h+(o>>a),g=new Float32Array(d*p),m=new Float32Array(d*p);let y=g;u.forEach((r=>{const i=f+(+t(r)>>a),o=h+(+e(r)>>a);i>=0&&i=0&&o0&&c>0?(jA(d,p,g,m,l),IA(d,p,m,g,c),jA(d,p,g,m,l),IA(d,p,m,g,c),jA(d,p,g,m,l),IA(d,p,m,g,c)):l>0?(jA(d,p,g,m,l),jA(d,p,m,g,l),jA(d,p,g,m,l),y=m):c>0&&(IA(d,p,g,m,c),IA(d,p,m,g,c),IA(d,p,g,m,c),y=m);const v=s?Math.pow(2,-2*a):1/pe(y);for(let t=0,e=d*p;t>a),y2:h+(o>>a)}}return u.x=function(e){return arguments.length?(t=UA(e),u):t},u.y=function(t){return arguments.length?(e=UA(t),u):e},u.weight=function(t){return arguments.length?(n=UA(t),u):n},u.size=function(t){if(!arguments.length)return[i,o];var e=+t[0],n=+t[1];return e>=0&&n>=0||s("invalid size"),i=e,o=n,u},u.cellSize=function(t){return arguments.length?((t=+t)>=1||s("invalid cell size"),a=Math.floor(Math.log(t)/Math.LN2),u):1<=i&&(e>=o&&(u-=n[e-o+a*t]),r[e-i+a*t]=u/Math.min(e+1,t-1+o-e,o))}function IA(t,e,n,r,i){const o=1+(i<<1);for(let a=0;a=i&&(u>=o&&(s-=n[a+(u-o)*t]),r[a+(u-i)*t]=s/Math.min(u+1,e-1+o-u,o))}function WA(t){ga.call(this,null,t)}$A.Definition={type:"Isocontour",metadata:{generates:!0},params:[{name:"field",type:"field"},{name:"thresholds",type:"number",array:!0},{name:"levels",type:"number"},{name:"nice",type:"boolean",default:!1},{name:"resolve",type:"enum",values:["shared","independent"],default:"independent"},{name:"zero",type:"boolean",default:!0},{name:"smooth",type:"boolean",default:!0},{name:"scale",type:"number",expr:!0},{name:"translate",type:"number",array:!0,expr:!0},{name:"as",type:"string",null:!0,default:"contour"}]},st($A,ga,{transform(t,e){if(this.value&&!e.changed()&&!t.modified())return e.StopPropagation;var n=e.fork(e.NO_SOURCE|e.NO_FIELDS),r=e.materialize(e.SOURCE).source,i=t.field||h,o=TA().smooth(!1!==t.smooth),a=t.thresholds||function(t,e,n){const r=RA(n.levels||10,n.nice,!1!==n.zero);return"shared"!==n.resolve?r:r(t.map((t=>oe(e(t).values))))}(r,i,t),u=null===t.as?null:t.as||"contour",s=[];return r.forEach((e=>{const n=i(e),r=o.size([n.width,n.height])(n.values,_(a)?a:a(n.values));!function(t,e,n,r){let i=r.scale||e.scale,o=r.translate||e.translate;Y(i)&&(i=i(n,r));Y(o)&&(o=o(n,r));if((1===i||null==i)&&!o)return;const a=(dt(i)?i:i[0])||1,u=(dt(i)?i:i[1])||1,s=o&&o[0]||0,l=o&&o[1]||0;t.forEach(qA(e,a,u,s,l))}(r,n,e,t),r.forEach((t=>{s.push(Uo(e,qo(null!=u?{[u]:t}:t)))}))})),this.value&&(n.rem=this.value),this.value=n.source=n.add=s,n}}),WA.Definition={type:"KDE2D",metadata:{generates:!0},params:[{name:"size",type:"number",array:!0,length:2,required:!0},{name:"x",type:"field",required:!0},{name:"y",type:"field",required:!0},{name:"weight",type:"field"},{name:"groupby",type:"field",array:!0},{name:"cellSize",type:"number"},{name:"bandwidth",type:"number",array:!0,length:2},{name:"counts",type:"boolean",default:!1},{name:"as",type:"string",default:"grid"}]};const HA=["x","y","weight","size","cellSize","bandwidth"];function YA(t,e){return HA.forEach((n=>null!=e[n]?t[n](e[n]):0)),t}function VA(t){ga.call(this,null,t)}st(WA,ga,{transform(t,e){if(this.value&&!e.changed()&&!t.modified())return e.StopPropagation;var n,i=e.fork(e.NO_SOURCE|e.NO_FIELDS),o=function(t,e){var n,r,i,o,a,u,s=[],l=t=>t(o);if(null==e)s.push(t);else for(n={},r=0,i=t.length;rqo(function(t,e){for(let n=0;n_x})).map(s)).concat(de(Bx(o/d)*d,i,d).filter((function(t){return Dx(t%g)>_x})).map(l))}return y.lines=function(){return v().map((function(t){return{type:"LineString",coordinates:t}}))},y.outline=function(){return{type:"Polygon",coordinates:[c(r).concat(f(a).slice(1),c(n).reverse().slice(1),f(u).reverse().slice(1))]}},y.extent=function(t){return arguments.length?y.extentMajor(t).extentMinor(t):y.extentMinor()},y.extentMajor=function(t){return arguments.length?(r=+t[0][0],n=+t[1][0],u=+t[0][1],a=+t[1][1],r>n&&(t=r,r=n,n=t),u>a&&(t=u,u=a,a=t),y.precision(m)):[[r,u],[n,a]]},y.extentMinor=function(n){return arguments.length?(e=+n[0][0],t=+n[1][0],o=+n[0][1],i=+n[1][1],e>t&&(n=e,e=t,t=n),o>i&&(n=o,o=i,i=n),y.precision(m)):[[e,o],[t,i]]},y.step=function(t){return arguments.length?y.stepMajor(t).stepMinor(t):y.stepMinor()},y.stepMajor=function(t){return arguments.length?(p=+t[0],g=+t[1],y):[p,g]},y.stepMinor=function(t){return arguments.length?(h=+t[0],d=+t[1],y):[h,d]},y.precision=function(h){return arguments.length?(m=+h,s=Sw(o,i,90),l=Bw(e,t,m),c=Sw(u,a,90),f=Bw(r,n,m),y):m},y.extentMajor([[-180,-89.999999],[180,89.999999]]).extentMinor([[-180,-80.000001],[180,80.000001]])}()}function eM(t){ga.call(this,null,t)}function nM(t){if(!Y(t))return!1;const e=Ct(i(t));return e.$x||e.$y||e.$value||e.$max}function rM(t){ga.call(this,null,t),this.modified(!0)}function iM(t,e,n){Y(t[e])&&t[e](n)}JA.Definition={type:"GeoJSON",metadata:{},params:[{name:"fields",type:"field",array:!0,length:2},{name:"geojson",type:"field"}]},st(JA,ga,{transform(t,e){var n,r=this._features,o=this._points,a=t.fields,u=a&&a[0],s=a&&a[1],l=t.geojson||!a&&h,c=e.ADD;n=t.modified()||e.changed(e.REM)||e.modified(i(l))||u&&e.modified(i(u))||s&&e.modified(i(s)),this.value&&!n||(c=e.SOURCE,this._features=r=[],this._points=o=[]),l&&e.visit(c,(t=>r.push(l(t)))),u&&s&&(e.visit(c,(t=>{var e=u(t),n=s(t);null!=e&&null!=n&&(e=+e)===e&&(n=+n)===n&&o.push([e,n])})),r=r.concat({type:GA,geometry:{type:"MultiPoint",coordinates:o}})),this.value={type:XA,features:r}}}),ZA.Definition={type:"GeoPath",metadata:{modifies:!0},params:[{name:"projection",type:"projection"},{name:"field",type:"field"},{name:"pointRadius",type:"number",expr:!0},{name:"as",type:"string",default:"path"}]},st(ZA,ga,{transform(t,e){var n=e.fork(e.ALL),r=this.value,i=t.field||h,o=t.as||"path",a=n.SOURCE;!r||t.modified()?(this.value=r=CA(t.projection),n.materialize().reflow()):a=i===h||e.modified(i.fields)?n.ADD_MOD:n.ADD;const u=function(t,e){const n=t.pointRadius();t.context(null),null!=e&&t.pointRadius(e);return n}(r,t.pointRadius);return n.visit(a,(t=>t[o]=r(i(t)))),r.pointRadius(u),n.modifies(o)}}),QA.Definition={type:"GeoPoint",metadata:{modifies:!0},params:[{name:"projection",type:"projection",required:!0},{name:"fields",type:"field",array:!0,required:!0,length:2},{name:"as",type:"string",array:!0,length:2,default:["x","y"]}]},st(QA,ga,{transform(t,e){var n,r=t.projection,i=t.fields[0],o=t.fields[1],a=t.as||["x","y"],u=a[0],s=a[1];function l(t){const e=r([i(t),o(t)]);e?(t[u]=e[0],t[s]=e[1]):(t[u]=void 0,t[s]=void 0)}return t.modified()?e=e.materialize().reflow(!0).visit(e.SOURCE,l):(n=e.modified(i.fields)||e.modified(o.fields),e.visit(n?e.ADD_MOD:e.ADD,l)),e.modifies(a)}}),KA.Definition={type:"GeoShape",metadata:{modifies:!0,nomod:!0},params:[{name:"projection",type:"projection"},{name:"field",type:"field",default:"datum"},{name:"pointRadius",type:"number",expr:!0},{name:"as",type:"string",default:"shape"}]},st(KA,ga,{transform(t,e){var n=e.fork(e.ALL),r=this.value,i=t.as||"shape",o=n.ADD;return r&&!t.modified()||(this.value=r=function(t,e,n){const r=null==n?n=>t(e(n)):r=>{var i=t.pointRadius(),o=t.pointRadius(n)(e(r));return t.pointRadius(i),o};return r.context=e=>(t.context(e),r),r}(CA(t.projection),t.field||c("datum"),t.pointRadius),n.materialize().reflow(),o=n.SOURCE),n.visit(o,(t=>t[i]=r)),n.modifies(i)}}),tM.Definition={type:"Graticule",metadata:{changes:!0,generates:!0},params:[{name:"extent",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"extentMajor",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"extentMinor",type:"array",array:!0,length:2,content:{type:"number",array:!0,length:2}},{name:"step",type:"number",array:!0,length:2},{name:"stepMajor",type:"number",array:!0,length:2,default:[90,360]},{name:"stepMinor",type:"number",array:!0,length:2,default:[10,10]},{name:"precision",type:"number",default:2.5}]},st(tM,ga,{transform(t,e){var n,r=this.value,i=this.generator;if(!r.length||t.modified())for(const e in t)Y(i[e])&&i[e](t[e]);return n=i(),r.length?e.mod.push(Po(r[0],n)):e.add.push(qo(n)),r[0]=n,e}}),eM.Definition={type:"heatmap",metadata:{modifies:!0},params:[{name:"field",type:"field"},{name:"color",type:"string",expr:!0},{name:"opacity",type:"number",expr:!0},{name:"resolve",type:"enum",values:["shared","independent"],default:"independent"},{name:"as",type:"string",default:"image"}]},st(eM,ga,{transform(t,e){if(!e.changed()&&!t.modified())return e.StopPropagation;var n=e.materialize(e.SOURCE).source,r="shared"===t.resolve,i=t.field||h,o=function(t,e){let n;Y(t)?(n=n=>t(n,e),n.dep=nM(t)):t?n=Q(t):(n=t=>t.$value/t.$max||0,n.dep=!0);return n}(t.opacity,t),a=function(t,e){let n;Y(t)?(n=n=>kc(t(n,e)),n.dep=nM(t)):n=Q(kc(t||"#888"));return n}(t.color,t),u=t.as||"image",s={$x:0,$y:0,$value:0,$max:r?oe(n.map((t=>oe(i(t).values)))):0};return n.forEach((t=>{const e=i(t),n=tt({},t,s);r||(n.$max=oe(e.values||[])),t[u]=function(t,e,n,r){const i=t.width,o=t.height,a=t.x1||0,u=t.y1||0,s=t.x2||i,l=t.y2||o,c=t.values,f=c?t=>c[t]:d,h=Xl(s-a,l-u),p=h.getContext("2d"),g=p.getImageData(0,0,s-a,l-u),m=g.data;for(let t=u,o=0;t{null!=t[e]&&iM(n,e,t[e])}))):MA.forEach((e=>{t.modified(e)&&iM(n,e,t[e])})),null!=t.pointRadius&&n.path.pointRadius(t.pointRadius),t.fit&&function(t,e){const n=function(t){return 1===(t=W(t)).length?t[0]:{type:XA,features:t.reduce(((t,e)=>t.concat(function(t){return t.type===XA?t.features:W(t).filter((t=>null!=t)).map((t=>t.type===GA?t:{type:GA,geometry:t}))}(e))),[])}}(e.fit);e.extent?t.fitExtent(e.extent,n):e.size&&t.fitSize(e.size,n)}(n,t),e.fork(e.NO_SOURCE|e.NO_FIELDS)}});var oM=Object.freeze({__proto__:null,contour:VA,geojson:JA,geopath:ZA,geopoint:QA,geoshape:KA,graticule:tM,heatmap:eM,isocontour:$A,kde2d:WA,projection:rM});function aM(t,e,n,r){if(isNaN(e)||isNaN(n))return t;var i,o,a,u,s,l,c,f,h,d=t._root,p={data:r},g=t._x0,m=t._y0,y=t._x1,v=t._y1;if(!d)return t._root=p,t;for(;d.length;)if((l=e>=(o=(g+y)/2))?g=o:y=o,(c=n>=(a=(m+v)/2))?m=a:v=a,i=d,!(d=d[f=c<<1|l]))return i[f]=p,t;if(u=+t._x.call(null,d.data),s=+t._y.call(null,d.data),e===u&&n===s)return p.next=d,i?i[f]=p:t._root=p,t;do{i=i?i[f]=new Array(4):t._root=new Array(4),(l=e>=(o=(g+y)/2))?g=o:y=o,(c=n>=(a=(m+v)/2))?m=a:v=a}while((f=c<<1|l)==(h=(s>=a)<<1|u>=o));return i[h]=d,i[f]=p,t}function uM(t,e,n,r,i){this.node=t,this.x0=e,this.y0=n,this.x1=r,this.y1=i}function sM(t){return t[0]}function lM(t){return t[1]}function cM(t,e,n){var r=new fM(null==e?sM:e,null==n?lM:n,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function fM(t,e,n,r,i,o){this._x=t,this._y=e,this._x0=n,this._y0=r,this._x1=i,this._y1=o,this._root=void 0}function hM(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var dM=cM.prototype=fM.prototype;function pM(t){return function(){return t}}function gM(t){return 1e-6*(t()-.5)}function mM(t){return t.x+t.vx}function yM(t){return t.y+t.vy}function vM(t){return t.index}function _M(t,e){var n=t.get(e);if(!n)throw new Error("node not found: "+e);return n}dM.copy=function(){var t,e,n=new fM(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return n;if(!r.length)return n._root=hM(r),n;for(t=[{source:r,target:n._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(e=r.source[i])&&(e.length?t.push({source:e,target:r.target[i]=new Array(4)}):r.target[i]=hM(e));return n},dM.add=function(t){const e=+this._x.call(null,t),n=+this._y.call(null,t);return aM(this.cover(e,n),e,n,t)},dM.addAll=function(t){var e,n,r,i,o=t.length,a=new Array(o),u=new Array(o),s=1/0,l=1/0,c=-1/0,f=-1/0;for(n=0;nc&&(c=r),if&&(f=i));if(s>c||l>f)return this;for(this.cover(s,l).cover(c,f),n=0;nt||t>=i||r>e||e>=o;)switch(u=(eh||(o=s.y0)>d||(a=s.x1)=y)<<1|t>=m)&&(s=p[p.length-1],p[p.length-1]=p[p.length-1-l],p[p.length-1-l]=s)}else{var v=t-+this._x.call(null,g.data),_=e-+this._y.call(null,g.data),x=v*v+_*_;if(x=(u=(p+m)/2))?p=u:m=u,(c=a>=(s=(g+y)/2))?g=s:y=s,e=d,!(d=d[f=c<<1|l]))return this;if(!d.length)break;(e[f+1&3]||e[f+2&3]||e[f+3&3])&&(n=e,h=f)}for(;d.data!==t;)if(r=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,r?(i?r.next=i:delete r.next,this):e?(i?e[f]=i:delete e[f],(d=e[0]||e[1]||e[2]||e[3])&&d===(e[3]||e[2]||e[1]||e[0])&&!d.length&&(n?n[h]=d:this._root=d),this):(this._root=i,this)},dM.removeAll=function(t){for(var e=0,n=t.length;e{}};function bM(){for(var t,e=0,n=arguments.length,r={};e=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function AM(t,e){for(var n,r=0,i=t.length;r0)for(var n,r,i=new Array(n),o=0;o=0&&e._call.call(null,t),e=e._next;--CM}()}finally{CM=0,function(){var t,e,n=EM,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:EM=e);DM=t,jM(r)}(),TM=0}}function PM(){var t=NM.now(),e=t-BM;e>1e3&&(zM-=e,BM=t)}function jM(t){CM||(FM&&(FM=clearTimeout(FM)),t-TM>24?(t<1/0&&(FM=setTimeout(UM,t-NM.now()-zM)),SM&&(SM=clearInterval(SM))):(SM||(BM=NM.now(),SM=setInterval(PM,1e3)),CM=1,OM(UM)))}qM.prototype=LM.prototype={constructor:qM,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?RM():+n)+(null==e?0:+e),this._next||DM===this||(DM?DM._next=this:EM=this,DM=this),this._call=t,this._time=n,jM()},stop:function(){this._call&&(this._call=null,this._time=1/0,jM())}};const IM=4294967296;function WM(t){return t.x}function HM(t){return t.y}var YM=Math.PI*(3-Math.sqrt(5));function VM(t){var e,n=1,r=.001,i=1-Math.pow(r,1/300),o=0,a=.6,u=new Map,s=LM(f),l=bM("tick","end"),c=function(){let t=1;return()=>(t=(1664525*t+1013904223)%IM)/IM}();function f(){h(),l.call("tick",e),n1?(null==n?u.delete(t):u.set(t,p(n)),e):u.get(t)},find:function(e,n,r){var i,o,a,u,s,l=0,c=t.length;for(null==r?r=1/0:r*=r,l=0;l1?(l.on(t,n),e):l.on(t)}}}const GM={center:function(t,e){var n,r=1;function i(){var i,o,a=n.length,u=0,s=0;for(i=0;il+p||oc+p||as.index){var g=l-u.x-u.vx,m=c-u.y-u.vy,y=g*g+m*m;yt.r&&(t.r=t[e].r)}function s(){if(e){var r,i,o=e.length;for(n=new Array(o),r=0;r=u)){(t.data!==e||t.next)&&(0===f&&(p+=(f=gM(n))*f),0===h&&(p+=(h=gM(n))*h),p[u(t,e,r),t])));for(a=0,i=new Array(l);ae(t,n):e)}KM.Definition={type:"Force",metadata:{modifies:!0},params:[{name:"static",type:"boolean",default:!1},{name:"restart",type:"boolean",default:!1},{name:"iterations",type:"number",default:300},{name:"alpha",type:"number",default:1},{name:"alphaMin",type:"number",default:.001},{name:"alphaTarget",type:"number",default:0},{name:"velocityDecay",type:"number",default:.4},{name:"forces",type:"param",array:!0,params:[{key:{force:"center"},params:[{name:"x",type:"number",default:0},{name:"y",type:"number",default:0}]},{key:{force:"collide"},params:[{name:"radius",type:"number",expr:!0},{name:"strength",type:"number",default:.7},{name:"iterations",type:"number",default:1}]},{key:{force:"nbody"},params:[{name:"strength",type:"number",default:-30},{name:"theta",type:"number",default:.9},{name:"distanceMin",type:"number",default:1},{name:"distanceMax",type:"number"}]},{key:{force:"link"},params:[{name:"links",type:"data"},{name:"id",type:"field"},{name:"distance",type:"number",default:30,expr:!0},{name:"strength",type:"number",expr:!0},{name:"iterations",type:"number",default:1}]},{key:{force:"x"},params:[{name:"strength",type:"number",default:.1},{name:"x",type:"field"}]},{key:{force:"y"},params:[{name:"strength",type:"number",default:.1},{name:"y",type:"field"}]}]},{name:"as",type:"string",array:!0,modify:!1,default:QM}]},st(KM,ga,{transform(t,e){var n,r,i=this.value,o=e.changed(e.ADD_REM),a=t.modified(JM),u=t.iterations||300;if(i?(o&&(e.modifies("index"),i.nodes(e.source)),(a||e.changed(e.MOD))&&tE(i,t,0,e)):(this.value=i=function(t,e){const n=VM(t),r=n.stop,i=n.restart;let o=!1;return n.stopped=()=>o,n.restart=()=>(o=!1,i()),n.stop=()=>(o=!0,r()),tE(n,e,!0).on("end",(()=>o=!0))}(e.source,t),i.on("tick",(n=e.dataflow,r=this,()=>n.touch(r).run())),t.static||(o=!0,i.tick()),e.modifies("index")),a||o||t.modified(ZM)||e.changed()&&t.restart)if(i.alpha(Math.max(i.alpha(),t.alpha||1)).alphaDecay(1-Math.pow(i.alphaMin(),1/u)),t.static)for(i.stop();--u>=0;)i.tick();else if(i.stopped()&&i.restart(),!o)return e.StopPropagation;return this.finish(t,e)},finish(t,e){const n=e.dataflow;for(let t,e=this._argops,u=0,s=e.length;u=0;)e+=n[r].value;else e=1;t.value=e}function lE(t,e){t instanceof Map?(t=[void 0,t],void 0===e&&(e=fE)):void 0===e&&(e=cE);for(var n,r,i,o,a,u=new pE(t),s=[u];n=s.pop();)if((i=e(n.data))&&(a=(i=Array.from(i)).length))for(n.children=i,o=a-1;o>=0;--o)s.push(r=i[o]=new pE(i[o])),r.parent=n,r.depth=n.depth+1;return u.eachBefore(dE)}function cE(t){return t.children}function fE(t){return Array.isArray(t)?t[1]:null}function hE(t){void 0!==t.data.value&&(t.value=t.data.value),t.data=t.data.data}function dE(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function pE(t){this.data=t,this.depth=this.height=0,this.parent=null}function gE(t){for(var e,n,r=0,i=(t=function(t){for(var e,n,r=t.length;r;)n=Math.random()*r--|0,e=t[r],t[r]=t[n],t[n]=e;return t}(Array.from(t))).length,o=[];r0&&n*n>r*r+i*i}function _E(t,e){for(var n=0;n(a*=a)?(r=(l+a-i)/(2*l),o=Math.sqrt(Math.max(0,a/l-r*r)),n.x=t.x-r*u-o*s,n.y=t.y-r*s+o*u):(r=(l+i-a)/(2*l),o=Math.sqrt(Math.max(0,i/l-r*r)),n.x=e.x+r*u-o*s,n.y=e.y+r*s+o*u)):(n.x=e.x+n.r,n.y=e.y)}function AE(t,e){var n=t.r+e.r-1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function ME(t){var e=t._,n=t.next._,r=e.r+n.r,i=(e.x*n.r+n.x*e.r)/r,o=(e.y*n.r+n.y*e.r)/r;return i*i+o*o}function EE(t){this._=t,this.next=null,this.previous=null}function DE(t){if(!(i=(t=function(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}(t)).length))return 0;var e,n,r,i,o,a,u,s,l,c,f;if((e=t[0]).x=0,e.y=0,!(i>1))return e.r;if(n=t[1],e.x=-n.r,n.x=e.r,n.y=0,!(i>2))return e.r+n.r;kE(n,e,r=t[2]),e=new EE(e),n=new EE(n),r=new EE(r),e.next=r.previous=n,n.next=e.previous=r,r.next=n.previous=e;t:for(u=3;u=0;--r)o.push(n[r]);return this},find:function(t,e){let n=-1;for(const r of this)if(t.call(e,r,++n,this))return r},sum:function(t){return this.eachAfter((function(e){for(var n=+t(e.data)||0,r=e.children,i=r&&r.length;--i>=0;)n+=r[i].value;e.value=n}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),i=null;t=n.pop(),e=r.pop();for(;t===e;)i=t,t=n.pop(),e=r.pop();return i}(e,t),r=[e];e!==n;)e=e.parent,r.push(e);for(var i=r.length;t!==n;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){return Array.from(this)},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(n){n!==t&&e.push({source:n.parent,target:n})})),e},copy:function(){return lE(this).eachBefore(hE)},[Symbol.iterator]:function*(){var t,e,n,r,i=this,o=[i];do{for(t=o.reverse(),o=[];i=t.pop();)if(yield i,e=i.children)for(n=0,r=e.length;n0)throw new Error("cycle");return o}return n.id=function(e){return arguments.length?(t=FE(e),n):t},n.parentId=function(t){return arguments.length?(e=FE(t),n):e},n}function IE(t,e){return t.parent===e.parent?1:2}function WE(t){var e=t.children;return e?e[0]:t.t}function HE(t){var e=t.children;return e?e[e.length-1]:t.t}function YE(t,e,n){var r=n/(e.i-t.i);e.c-=r,e.s+=n,t.c+=r,e.z+=n,e.m+=n}function VE(t,e,n){return t.a.parent===e.parent?t.a:n}function GE(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}function XE(t,e,n,r,i){for(var o,a=t.children,u=-1,s=a.length,l=t.value&&(i-n)/t.value;++uh&&(h=u),m=c*c*g,(d=Math.max(h/m,m/f))>p){c-=u;break}p=d}y.push(a={value:c,dice:s1?e:1)},n}(JE);var KE=function t(e){function n(t,n,r,i,o){if((a=t._squarify)&&a.ratio===e)for(var a,u,s,l,c,f=-1,h=a.length,d=t.value;++f1?e:1)},n}(JE);function tD(t,e,n){const r={};return t.each((t=>{const i=t.data;n(i)&&(r[e(i)]=t)})),t.lookup=r,t}function eD(t){ga.call(this,null,t)}eD.Definition={type:"Nest",metadata:{treesource:!0,changes:!0},params:[{name:"keys",type:"field",array:!0},{name:"generate",type:"boolean"}]};const nD=t=>t.values;function rD(){const t=[],e={entries:t=>r(n(t,0),0),key:n=>(t.push(n),e)};function n(e,r){if(r>=t.length)return e;const i=e.length,o=t[r++],a={},u={};let s,l,c,f=-1;for(;++ft.length)return e;const i=[];for(const t in e)i.push({key:t,values:r(e[t],n)});return i}return e}function iD(t){ga.call(this,null,t)}st(eD,ga,{transform(t,e){e.source||s("Nest transform requires an upstream data source.");var n=t.generate,r=t.modified(),i=e.clone(),o=this.value;return(!o||r||e.changed())&&(o&&o.each((t=>{t.children&&Oo(t.data)&&i.rem.push(t.data)})),this.value=o=lE({values:W(t.keys).reduce(((t,e)=>(t.key(e),t)),rD()).entries(i.source)},nD),n&&o.each((t=>{t.children&&(t=qo(t.data),i.add.push(t),i.source.push(t))})),tD(o,Ro,Ro)),i.source.root=o,i}});const oD=(t,e)=>t.parent===e.parent?1:2;st(iD,ga,{transform(t,e){e.source&&e.source.root||s(this.constructor.name+" transform requires a backing tree data source.");const n=this.layout(t.method),r=this.fields,i=e.source.root,o=t.as||r;t.field?i.sum(t.field):i.count(),t.sort&&i.sort(jo(t.sort,(t=>t.data))),function(t,e,n){for(let r,i=0,o=e.length;ifunction(t,e,n){const r=t.data,i=e.length-1;for(let o=0;o=0;--i)u.push(n=e.children[i]=new GE(r[i],i)),n.parent=e;return(a.parent=new GE(null,0)).children=[a],a}(i);if(s.eachAfter(o),s.parent.m=-s.z,s.eachBefore(a),r)i.eachBefore(u);else{var l=i,c=i,f=i;i.eachBefore((function(t){t.xc.x&&(c=t),t.depth>f.depth&&(f=t)}));var h=l===c?1:t(l,c)/2,d=h-l.x,p=e/(c.x+h+d),g=n/(f.depth||1);i.eachBefore((function(t){t.x=(t.x+d)*p,t.y=t.depth*g}))}return i}function o(e){var n=e.children,r=e.parent.children,i=e.i?r[e.i-1]:null;if(n){!function(t){for(var e,n=0,r=0,i=t.children,o=i.length;--o>=0;)(e=i[o]).z+=n,e.m+=n,n+=e.s+(r+=e.c)}(e);var o=(n[0].z+n[n.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-o):e.z=o}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,n,r){if(n){for(var i,o=e,a=e,u=n,s=o.parent.children[0],l=o.m,c=a.m,f=u.m,h=s.m;u=HE(u),o=WE(o),u&&o;)s=WE(s),(a=HE(a)).a=e,(i=u.z+f-o.z-l+t(u._,o._))>0&&(YE(VE(u,e,r),e,i),l+=i,c+=i),f+=u.m,l+=o.m,h+=s.m,c+=a.m;u&&!HE(a)&&(a.t=u,a.m+=f-c),o&&!WE(s)&&(s.t=o,s.m+=l-h,r=e)}return r}(e,i,e.parent.A||r[0])}function a(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function u(t){t.x*=e,t.y=t.depth*n}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i},cluster:function(){var t=oE,e=1,n=1,r=!1;function i(i){var o,a=0;i.eachAfter((function(e){var n=e.children;n?(e.x=function(t){return t.reduce(aE,0)/t.length}(n),e.y=function(t){return 1+t.reduce(uE,0)}(n)):(e.x=o?a+=t(e,o):0,e.y=0,o=e)}));var u=function(t){for(var e;e=t.children;)t=e[0];return t}(i),s=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(i),l=u.x-t(u,s)/2,c=s.x+t(s,u)/2;return i.eachAfter(r?function(t){t.x=(t.x-i.x)*e,t.y=(i.y-t.y)*n}:function(t){t.x=(t.x-l)/(c-l)*e,t.y=(1-(i.y?t.y/i.y:1))*n})}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i}},hD=["x","y","depth","children"];function dD(t){iD.call(this,t)}function pD(t){ga.call(this,[],t)}dD.Definition={type:"Tree",metadata:{tree:!0,modifies:!0},params:[{name:"field",type:"field"},{name:"sort",type:"compare"},{name:"method",type:"enum",default:"tidy",values:["tidy","cluster"]},{name:"size",type:"number",array:!0,length:2},{name:"nodeSize",type:"number",array:!0,length:2},{name:"separation",type:"boolean",default:!0},{name:"as",type:"string",array:!0,length:hD.length,default:hD}]},st(dD,iD,{layout(t){const e=t||"tidy";if(it(fD,e))return fD[e]();s("Unrecognized Tree layout method: "+e)},params:["size","nodeSize"],fields:hD}),pD.Definition={type:"TreeLinks",metadata:{tree:!0,generates:!0,changes:!0},params:[]},st(pD,ga,{transform(t,e){const n=this.value,r=e.source&&e.source.root,i=e.fork(e.NO_SOURCE),o={};return r||s("TreeLinks transform requires a tree data source."),e.changed(e.ADD_REM)?(i.rem=n,e.visit(e.SOURCE,(t=>o[Ro(t)]=1)),r.each((t=>{const e=t.data,n=t.parent&&t.parent.data;n&&o[Ro(e)]&&o[Ro(n)]&&i.add.push(qo({source:n,target:e}))})),this.value=i.add):e.changed(e.MOD)&&(e.visit(e.MOD,(t=>o[Ro(t)]=1)),n.forEach((t=>{(o[Ro(t.source)]||o[Ro(t.target)])&&i.mod.push(t)}))),i}});const gD={binary:function(t,e,n,r,i){var o,a,u=t.children,s=u.length,l=new Array(s+1);for(l[0]=a=o=0;o=n-1){var c=u[e];return c.x0=i,c.y0=o,c.x1=a,void(c.y1=s)}var f=l[e],h=r/2+f,d=e+1,p=n-1;for(;d>>1;l[g]s-o){var v=r?(i*y+a*m)/r:a;t(e,d,m,i,o,v,s),t(d,n,y,v,o,a,s)}else{var _=r?(o*y+s*m)/r:s;t(e,d,m,i,o,a,_),t(d,n,y,i,_,a,s)}}(0,s,t.value,e,n,r,i)},dice:$E,slice:XE,slicedice:function(t,e,n,r,i){(1&t.depth?XE:$E)(t,e,n,r,i)},squarify:QE,resquarify:KE},mD=["x0","y0","x1","y1","depth","children"];function yD(t){iD.call(this,t)}yD.Definition={type:"Treemap",metadata:{tree:!0,modifies:!0},params:[{name:"field",type:"field"},{name:"sort",type:"compare"},{name:"method",type:"enum",default:"squarify",values:["squarify","resquarify","binary","dice","slice","slicedice"]},{name:"padding",type:"number",default:0},{name:"paddingInner",type:"number",default:0},{name:"paddingOuter",type:"number",default:0},{name:"paddingTop",type:"number",default:0},{name:"paddingRight",type:"number",default:0},{name:"paddingBottom",type:"number",default:0},{name:"paddingLeft",type:"number",default:0},{name:"ratio",type:"number",default:1.618033988749895},{name:"round",type:"boolean",default:!1},{name:"size",type:"number",array:!0,length:2},{name:"as",type:"string",array:!0,length:mD.length,default:mD}]},st(yD,iD,{layout(){const t=function(){var t=QE,e=!1,n=1,r=1,i=[0],o=SE,a=SE,u=SE,s=SE,l=SE;function c(t){return t.x0=t.y0=0,t.x1=n,t.y1=r,t.eachBefore(f),i=[0],e&&t.eachBefore(RE),t}function f(e){var n=i[e.depth],r=e.x0+n,c=e.y0+n,f=e.x1-n,h=e.y1-n;f{const n=t.tile();n.ratio&&t.tile(n.ratio(e))},t.method=e=>{it(gD,e)?t.tile(gD[e]):s("Unrecognized Treemap layout method: "+e)},t},params:["method","ratio","size","round","padding","paddingInner","paddingOuter","paddingTop","paddingRight","paddingBottom","paddingLeft"],fields:mD});var vD=Object.freeze({__proto__:null,nest:eD,pack:uD,partition:lD,stratify:cD,tree:dD,treelinks:pD,treemap:yD});function _D(t,e,n,r){const i=t.width,o=t.height,a=n||r,u=Xl(i,o).getContext("2d");e.forEach((t=>xD(u,t,a)));const s=new Uint32Array(u.getImageData(0,0,i,o).data.buffer),l=t.bitmap(),c=a&&t.bitmap();let f,h,d,p,g;for(h=0;h{e.items.forEach((e=>xD(t,e.items,n)))})):Ym[r].draw(t,{items:n?e.map(bD):e})}function bD(t){const e=Uo(t,{});return e.stroke&&(e.strokeOpacity=1),e.fill&&(e.fillOpacity=.0625,e.stroke="#000",e.strokeOpacity=1,e.strokeWidth=2),e}const wD=31,kD=new Uint32Array(33),AD=new Uint32Array(33);AD[0]=0,kD[0]=~AD[0];for(let t=1;t<=32;++t)AD[t]=AD[t-1]<<1|1,kD[t]=~AD[t];function MD(t,e,n){const r=Math.max(1,Math.sqrt(t*e/1e6)),i=~~((t+2*n+r)/r),o=~~((e+2*n+r)/r),a=t=>~~((t+n)/r);return a.invert=t=>t*r-n,a.bitmap=()=>function(t,e){const n=new Uint32Array(~~((t*e+32)/32));function r(t,e){n[t]|=e}function i(t,e){n[t]&=e}return{array:n,get:(e,r)=>{const i=r*t+e;return n[i>>>5]&1<<(i&wD)},set:(e,n)=>{const i=n*t+e;r(i>>>5,1<<(i&wD))},clear:(e,n)=>{const r=n*t+e;i(r>>>5,~(1<<(r&wD)))},getRange:(e,r,i,o)=>{let a,u,s,l,c=o;for(;c>=r;--c)if(a=c*t+e,u=c*t+i,s=a>>>5,l=u>>>5,s===l){if(n[s]&kD[a&wD]&AD[1+(u&wD)])return!0}else{if(n[s]&kD[a&wD])return!0;if(n[l]&AD[1+(u&wD)])return!0;for(let t=s+1;t{let a,u,s,l,c;for(;n<=o;++n)if(a=n*t+e,u=n*t+i,s=a>>>5,l=u>>>5,s===l)r(s,kD[a&wD]&AD[1+(u&wD)]);else for(r(s,kD[a&wD]),r(l,AD[1+(u&wD)]),c=s+1;c{let a,u,s,l,c;for(;n<=o;++n)if(a=n*t+e,u=n*t+r,s=a>>>5,l=u>>>5,s===l)i(s,AD[a&wD]|kD[1+(u&wD)]);else for(i(s,AD[a&wD]),i(l,kD[1+(u&wD)]),c=s+1;cn<0||r<0||o>=e||i>=t}}(i,o),a.ratio=r,a.padding=n,a.width=t,a.height=e,a}function ED(t,e,n,r,i,o){let a=n/2;return t-a<0||t+a>i||e-(a=r/2)<0||e+a>o}function DD(t,e,n,r,i,o,a,u){const s=i*o/(2*r),l=t(e-s),c=t(e+s),f=t(n-(o/=2)),h=t(n+o);return a.outOfBounds(l,f,c,h)||a.getRange(l,f,c,h)||u&&u.getRange(l,f,c,h)}const CD=[-1,-1,1,1],FD=[-1,1,-1,1];const SD=["right","center","left"],BD=["bottom","middle","top"];function TD(t,e,n,r,i,o,a,u,s,l,c,f){return!(i.outOfBounds(t,n,e,r)||(f&&o?o.getRange(t,n,e,r)||!function(t,e,n,r,i){return i[0]<=t&&n<=i[2]&&i[3]<=e&&r<=i[5]}(a,s,u,l,c):i.getRange(t,n,e,r)))}const zD={"top-left":0,top:1,"top-right":2,left:4,middle:5,right:6,"bottom-left":8,bottom:9,"bottom-right":10},ND={naive:function(t,e,n,r){const i=t.width,o=t.height;return function(t){const e=t.datum.datum.items[r].items,n=e.length,a=t.datum.fontSize,u=Cm.width(t.datum,t.datum.text);let s,l,c,f,h,d,p,g=0;for(let r=0;r=g&&(g=p,t.x=h,t.y=d);return h=u/2,d=a/2,s=t.x-h,l=t.x+h,c=t.y-d,f=t.y+d,t.align="center",s<0&&l<=i?t.align="left":0<=s&&i=1;)h=(d+p)/2,DD(t,c,f,l,s,h,a,u)?p=h:d=h;if(d>r)return[c,f,d,!0]}}return function(e){const u=e.datum.datum.items[r].items,l=u.length,c=e.datum.fontSize,f=Cm.width(e.datum,e.datum.text);let h,d,p,g,m,y,v,_,x,b,w,k,A,M,E,D,C,F=n?c:0,S=!1,B=!1,T=0;for(let r=0;rd&&(C=h,h=d,d=C),p>g&&(C=p,p=g,g=C),x=t(h),w=t(d),b=~~((x+w)/2),k=t(p),M=t(g),A=~~((k+M)/2),v=b;v>=x;--v)for(_=A;_>=k;--_)D=s(v,_,F,f,c),D&&([e.x,e.y,F,S]=D);for(v=b;v<=w;++v)for(_=A;_<=M;++_)D=s(v,_,F,f,c),D&&([e.x,e.y,F,S]=D);S||n||(E=Math.abs(d-h+g-p),m=(h+d)/2,y=(p+g)/2,E>=T&&!ED(m,y,f,c,i,o)&&!DD(t,m,y,c,f,c,a,null)&&(T=E,e.x=m,e.y=y,B=!0))}return!(!S&&!B)&&(m=f/2,y=c/2,a.setRange(t(e.x-m),t(e.y-y),t(e.x+m),t(e.y+y)),e.align="center",e.baseline="middle",!0)}},floodfill:function(t,e,n,r){const i=t.width,o=t.height,a=e[0],u=e[1],s=t.bitmap();return function(e){const l=e.datum.datum.items[r].items,c=l.length,f=e.datum.fontSize,h=Cm.width(e.datum,e.datum.text),d=[];let p,g,m,y,v,_,x,b,w,k,A,M,E=n?f:0,D=!1,C=!1,F=0;for(let r=0;r=1;)A=(w+k)/2,DD(t,v,_,f,h,A,a,u)?k=A:w=A;w>E&&(e.x=v,e.y=_,E=w,D=!0)}}D||n||(M=Math.abs(g-p+y-m),v=(p+g)/2,_=(m+y)/2,M>=F&&!ED(v,_,h,f,i,o)&&!DD(t,v,_,f,h,f,a,null)&&(F=M,e.x=v,e.y=_,C=!0))}return!(!D&&!C)&&(v=h/2,_=f/2,a.setRange(t(e.x-v),t(e.y-_),t(e.x+v),t(e.y+_)),e.align="center",e.baseline="middle",!0)}}};function OD(t,e,n,r,i,o,a,u,s,l,c){if(!t.length)return t;const f=Math.max(r.length,i.length),h=function(t,e){const n=new Float64Array(e),r=t.length;for(let e=0;e[t.x,t.x,t.x,t.y,t.y,t.y];return t?"line"===t||"area"===t?t=>i(t.datum):"line"===e?t=>{const e=t.datum.items[r].items;return i(e.length?e["start"===n?0:e.length-1]:{x:NaN,y:NaN})}:t=>{const e=t.datum.bounds;return[e.x1,(e.x1+e.x2)/2,e.x2,e.y1,(e.y1+e.y2)/2,e.y2]}:i}(p,g,u,s),v=MD(e[0],e[1],l),_=m&&"naive"===c;var x;const b=t.map((t=>({datum:t,opacity:0,x:void 0,y:void 0,align:void 0,baseline:void 0,boundary:y(t)})));let w;if(!_){n&&b.sort(((t,e)=>n(t.datum,e.datum)));let e=!1;for(let t=0;tt.datum))].concat(o)),w=o.length?_D(v,o,e,m):function(t,e){const n=t.bitmap();return(e||[]).forEach((e=>n.set(t(e.boundary[0]),t(e.boundary[3])))),[n,void 0]}(v,a&&b)}const k=m?ND[c](v,w,a,s):function(t,e,n,r){const i=t.width,o=t.height,a=e[0],u=e[1],s=r.length;return function(e){const l=e.boundary,c=e.datum.fontSize;if(l[2]<0||l[5]<0||l[0]>i||l[3]>o)return!1;let f,h,d,p,g,m,y,v,_,x,b,w,k,A,M,E=0;for(let i=0;i>>2&3)-1,d=0===f&&0===h||r[i]<0,p=f&&h?Math.SQRT1_2:1,g=r[i]<0?-1:1,m=l[1+f]+r[i]*f*p,b=l[4+h]+g*c*h/2+r[i]*h*p,v=b-c/2,_=b+c/2,w=t(m),A=t(v),M=t(_),!E){if(!TD(w,w,A,M,a,u,m,m,v,_,l,d))continue;E=Cm.width(e.datum,e.datum.text)}if(x=m+g*E*f/2,m=x-E/2,y=x+E/2,w=t(m),k=t(y),TD(w,k,A,M,a,u,m,y,v,_,l,d))return e.x=f?f*g<0?y:m:x,e.y=h?h*g<0?_:v:b,e.align=SD[f*g+1],e.baseline=BD[h*g+1],a.setRange(w,A,k,M),!0}return!1}}(v,w,d,h);return b.forEach((t=>t.opacity=+k(t))),b}const RD=["x","y","opacity","align","baseline"],$D=["top-left","left","bottom-left","top","bottom","top-right","right","bottom-right"];function qD(t){ga.call(this,null,t)}qD.Definition={type:"Label",metadata:{modifies:!0},params:[{name:"size",type:"number",array:!0,length:2,required:!0},{name:"sort",type:"compare"},{name:"anchor",type:"string",array:!0,default:$D},{name:"offset",type:"number",array:!0,default:[1]},{name:"padding",type:"number",default:0},{name:"lineAnchor",type:"string",values:["start","end"],default:"end"},{name:"markIndex",type:"number",default:0},{name:"avoidBaseMark",type:"boolean",default:!0},{name:"avoidMarks",type:"data",array:!0},{name:"method",type:"string",default:"naive"},{name:"as",type:"string",array:!0,length:RD.length,default:RD}]},st(qD,ga,{transform(t,e){const n=t.modified();if(!(n||e.changed(e.ADD_REM)||function(n){const r=t[n];return Y(r)&&e.modified(r.fields)}("sort")))return;t.size&&2===t.size.length||s("Size parameter should be specified as a [width, height] array.");const r=t.as||RD;return OD(e.materialize(e.SOURCE).source||[],t.size,t.sort,W(null==t.offset?1:t.offset),W(t.anchor||$D),t.avoidMarks||[],!1!==t.avoidBaseMark,t.lineAnchor||"end",t.markIndex||0,t.padding||0,t.method||"naive").forEach((t=>{const e=t.datum;e[r[0]]=t.x,e[r[1]]=t.y,e[r[2]]=t.opacity,e[r[3]]=t.align,e[r[4]]=t.baseline})),e.reflow(n).modifies(r)}});var LD=Object.freeze({__proto__:null,label:qD});function UD(t,e){var n,r,i,o,a,u,s=[],l=function(t){return t(o)};if(null==e)s.push(t);else for(n={},r=0,i=t.length;r{ru(e,t.x,t.y,t.bandwidth||.3).forEach((t=>{const n={};for(let t=0;t"poly"===t?e:"quad"===t?2:1)(a,u),c=t.as||[r(t.x),r(t.y)],f=jD[a],h=[];let d=t.extent;it(jD,a)||s("Invalid regression method: "+a),null!=d&&"log"===a&&d[0]<=0&&(e.dataflow.warn("Ignoring extent with values <= 0 for log regression."),d=null),i.forEach((n=>{if(n.length<=l)return void e.dataflow.warn("Skipping regression with more parameters than data points.");const r=f(n,t.x,t.y,u);if(t.params)return void h.push(qo({keys:n.dims,coef:r.coef,rSquared:r.rSquared}));const i=d||et(n,t.x),s=t=>{const e={};for(let t=0;ts([t,r.predict(t)]))):uu(r.predict,i,25,200).forEach(s)})),this.value&&(n.rem=this.value),this.value=n.add=n.source=h}return n}});var WD=Object.freeze({__proto__:null,loess:PD,regression:ID});const HD=Math.pow(2,-52),YD=new Uint32Array(512);class VD{static from(t,e=eC,n=nC){const r=t.length,i=new Float64Array(2*r);for(let o=0;o>1;if(e>0&&"number"!=typeof t[0])throw new Error("Expected coords to contain numbers.");this.coords=t;const n=Math.max(2*e-5,0);this._triangles=new Uint32Array(3*n),this._halfedges=new Int32Array(3*n),this._hashSize=Math.ceil(Math.sqrt(e)),this._hullPrev=new Uint32Array(e),this._hullNext=new Uint32Array(e),this._hullTri=new Uint32Array(e),this._hullHash=new Int32Array(this._hashSize).fill(-1),this._ids=new Uint32Array(e),this._dists=new Float64Array(e),this.update()}update(){const{coords:t,_hullPrev:e,_hullNext:n,_hullTri:r,_hullHash:i}=this,o=t.length>>1;let a=1/0,u=1/0,s=-1/0,l=-1/0;for(let e=0;es&&(s=n),r>l&&(l=r),this._ids[e]=e}const c=(a+s)/2,f=(u+l)/2;let h,d,p,g=1/0;for(let e=0;e0&&(d=e,g=n)}let v=t[2*d],_=t[2*d+1],x=1/0;for(let e=0;er&&(e[n++]=i,r=this._dists[i])}return this.hull=e.subarray(0,n),this.triangles=new Uint32Array(0),void(this.halfedges=new Uint32Array(0))}if(JD(m,y,v,_,b,w)){const t=d,e=v,n=_;d=p,v=b,_=w,p=t,b=e,w=n}const k=function(t,e,n,r,i,o){const a=n-t,u=r-e,s=i-t,l=o-e,c=a*a+u*u,f=s*s+l*l,h=.5/(a*l-u*s);return{x:t+(l*c-u*f)*h,y:e+(a*f-s*c)*h}}(m,y,v,_,b,w);this._cx=k.x,this._cy=k.y;for(let e=0;e0&&Math.abs(l-o)<=HD&&Math.abs(c-a)<=HD)continue;if(o=l,a=c,s===h||s===d||s===p)continue;let f=0;for(let t=0,e=this._hashKey(l,c);t0?3-n:1+n)/4}(t-this._cx,e-this._cy)*this._hashSize)%this._hashSize}_legalize(t){const{_triangles:e,_halfedges:n,coords:r}=this;let i=0,o=0;for(;;){const a=n[t],u=t-t%3;if(o=u+(t+2)%3,-1===a){if(0===i)break;t=YD[--i];continue}const s=a-a%3,l=u+(t+1)%3,c=s+(a+2)%3,f=e[o],h=e[t],d=e[l],p=e[c];if(ZD(r[2*f],r[2*f+1],r[2*h],r[2*h+1],r[2*d],r[2*d+1],r[2*p],r[2*p+1])){e[t]=p,e[a]=f;const r=n[c];if(-1===r){let e=this._hullStart;do{if(this._hullTri[e]===c){this._hullTri[e]=t;break}e=this._hullPrev[e]}while(e!==this._hullStart)}this._link(t,r),this._link(a,n[o]),this._link(o,c);const u=s+(a+1)%3;i=33306690738754716e-32*Math.abs(a+u)?a-u:0}function JD(t,e,n,r,i,o){return(XD(i,o,t,e,n,r)||XD(t,e,n,r,i,o)||XD(n,r,i,o,t,e))<0}function ZD(t,e,n,r,i,o,a,u){const s=t-a,l=e-u,c=n-a,f=r-u,h=i-a,d=o-u,p=c*c+f*f,g=h*h+d*d;return s*(f*g-p*d)-l*(c*g-p*h)+(s*s+l*l)*(c*d-f*h)<0}function QD(t,e,n,r,i,o){const a=n-t,u=r-e,s=i-t,l=o-e,c=a*a+u*u,f=s*s+l*l,h=.5/(a*l-u*s),d=(l*c-u*f)*h,p=(a*f-s*c)*h;return d*d+p*p}function KD(t,e,n,r){if(r-n<=20)for(let i=n+1;i<=r;i++){const r=t[i],o=e[r];let a=i-1;for(;a>=n&&e[t[a]]>o;)t[a+1]=t[a--];t[a+1]=r}else{let i=n+1,o=r;tC(t,n+r>>1,i),e[t[n]]>e[t[r]]&&tC(t,n,r),e[t[i]]>e[t[r]]&&tC(t,i,r),e[t[n]]>e[t[i]]&&tC(t,n,i);const a=t[i],u=e[a];for(;;){do{i++}while(e[t[i]]u);if(o=o-n?(KD(t,e,i,r),KD(t,e,n,o-1)):(KD(t,e,n,o-1),KD(t,e,i,r))}}function tC(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function eC(t){return t[0]}function nC(t){return t[1]}const rC=1e-6;class iC{constructor(){this._x0=this._y0=this._x1=this._y1=null,this._=""}moveTo(t,e){this._+=`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")}lineTo(t,e){this._+=`L${this._x1=+t},${this._y1=+e}`}arc(t,e,n){const r=(t=+t)+(n=+n),i=e=+e;if(n<0)throw new Error("negative radius");null===this._x1?this._+=`M${r},${i}`:(Math.abs(this._x1-r)>rC||Math.abs(this._y1-i)>rC)&&(this._+="L"+r+","+i),n&&(this._+=`A${n},${n},0,1,1,${t-n},${e}A${n},${n},0,1,1,${this._x1=r},${this._y1=i}`)}rect(t,e,n,r){this._+=`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${+n}v${+r}h${-n}Z`}value(){return this._||null}}class oC{constructor(){this._=[]}moveTo(t,e){this._.push([t,e])}closePath(){this._.push(this._[0].slice())}lineTo(t,e){this._.push([t,e])}value(){return this._.length?this._:null}}class aC{constructor(t,[e,n,r,i]=[0,0,960,500]){if(!((r=+r)>=(e=+e)&&(i=+i)>=(n=+n)))throw new Error("invalid bounds");this.delaunay=t,this._circumcenters=new Float64Array(2*t.points.length),this.vectors=new Float64Array(2*t.points.length),this.xmax=r,this.xmin=e,this.ymax=i,this.ymin=n,this._init()}update(){return this.delaunay.update(),this._init(),this}_init(){const{delaunay:{points:t,hull:e,triangles:n},vectors:r}=this,i=this.circumcenters=this._circumcenters.subarray(0,n.length/3*2);for(let e,r,o=0,a=0,u=n.length;o1;)i-=2;for(let t=2;t4)for(let t=0;t0){if(e>=this.ymax)return null;(i=(this.ymax-e)/r)0){if(t>=this.xmax)return null;(i=(this.xmax-t)/n)this.xmax?2:0)|(ethis.ymax?8:0)}}const uC=2*Math.PI,sC=Math.pow;function lC(t){return t[0]}function cC(t){return t[1]}function fC(t,e,n){return[t+Math.sin(t+e)*n,e+Math.cos(t-e)*n]}class hC{static from(t,e=lC,n=cC,r){return new hC("length"in t?function(t,e,n,r){const i=t.length,o=new Float64Array(2*i);for(let a=0;a2&&function(t){const{triangles:e,coords:n}=t;for(let t=0;t1e-10)return!1}return!0}(t)){this.collinear=Int32Array.from({length:e.length/2},((t,e)=>e)).sort(((t,n)=>e[2*t]-e[2*n]||e[2*t+1]-e[2*n+1]));const t=this.collinear[0],n=this.collinear[this.collinear.length-1],r=[e[2*t],e[2*t+1],e[2*n],e[2*n+1]],i=1e-8*Math.hypot(r[3]-r[1],r[2]-r[0]);for(let t=0,n=e.length/2;t0&&(this.triangles=new Int32Array(3).fill(-1),this.halfedges=new Int32Array(3).fill(-1),this.triangles[0]=r[0],this.triangles[1]=r[1],this.triangles[2]=r[1],o[r[0]]=1,2===r.length&&(o[r[1]]=0))}voronoi(t){return new aC(this,t)}*neighbors(t){const{inedges:e,hull:n,_hullIndex:r,halfedges:i,triangles:o,collinear:a}=this;if(a){const e=a.indexOf(t);return e>0&&(yield a[e-1]),void(e=0&&i!==n&&i!==r;)n=i;return i}_step(t,e,n){const{inedges:r,hull:i,_hullIndex:o,halfedges:a,triangles:u,points:s}=this;if(-1===r[t]||!s.length)return(t+1)%(s.length>>1);let l=t,c=sC(e-s[2*t],2)+sC(n-s[2*t+1],2);const f=r[t];let h=f;do{let r=u[h];const f=sC(e-s[2*r],2)+sC(n-s[2*r+1],2);if(f=f));)if(e.x=a+i,e.y=l+o,!(e.x+e.x0<0||e.y+e.y0<0||e.x+e.x1>u[0]||e.y+e.y1>u[1])&&(!n||!bC(e,t,u[0]))&&(!n||kC(e,n))){for(var g,m=e.sprite,y=e.width>>5,v=u[0]>>5,_=e.x-(y<<4),x=127&_,b=32-x,w=e.y1-e.y0,k=(e.y+e.y0)*v+(_>>5),A=0;A>>x:0);k+=v}return e.sprite=null,!0}return!1}return f.layout=function(){for(var s=function(t){t.width=t.height=1;var e=Math.sqrt(t.getContext("2d").getImageData(0,0,1,1).data.length>>2);t.width=2048/e,t.height=vC/e;var n=t.getContext("2d");return n.fillStyle=n.strokeStyle="red",n.textAlign="center",{context:n,ratio:e}}(Xl()),f=function(t){var e=[],n=-1;for(;++n>5)*u[1]),d=null,p=l.length,g=-1,m=[],y=l.map((u=>({text:t(u),font:e(u),style:r(u),weight:i(u),rotate:o(u),size:~~(n(u)+1e-14),padding:a(u),xoff:0,yoff:0,x1:0,y1:0,x0:0,y0:0,hasText:!1,sprite:null,datum:u}))).sort(((t,e)=>e.size-t.size));++g>1,v.y=u[1]*(c()+.5)>>1,xC(s,v,y,g),v.hasText&&h(f,v,d)&&(m.push(v),d?wC(d,v):d=[{x:v.x+v.x0,y:v.y+v.y0},{x:v.x+v.x1,y:v.y+v.y1}],v.x-=u[0]>>1,v.y-=u[1]>>1)}return m},f.words=function(t){return arguments.length?(l=t,f):l},f.size=function(t){return arguments.length?(u=[+t[0],+t[1]],f):u},f.font=function(t){return arguments.length?(e=MC(t),f):e},f.fontStyle=function(t){return arguments.length?(r=MC(t),f):r},f.fontWeight=function(t){return arguments.length?(i=MC(t),f):i},f.rotate=function(t){return arguments.length?(o=MC(t),f):o},f.text=function(e){return arguments.length?(t=MC(e),f):t},f.spiral=function(t){return arguments.length?(s=EC[t]||t,f):s},f.fontSize=function(t){return arguments.length?(n=MC(t),f):n},f.padding=function(t){return arguments.length?(a=MC(t),f):a},f.random=function(t){return arguments.length?(c=t,f):c},f}function xC(t,e,n,r){if(!e.sprite){var i=t.context,o=t.ratio;i.clearRect(0,0,2048/o,vC/o);var a,u,s,l,c,f=0,h=0,d=0,p=n.length;for(--r;++r>5<<5,s=~~Math.max(Math.abs(v+_),Math.abs(v-_))}else a=a+31>>5<<5;if(s>d&&(d=s),f+a>=2048&&(f=0,h+=d,d=0),h+s>=vC)break;i.translate((f+(a>>1))/o,(h+(s>>1))/o),e.rotate&&i.rotate(e.rotate*yC),i.fillText(e.text,0,0),e.padding&&(i.lineWidth=2*e.padding,i.strokeText(e.text,0,0)),i.restore(),e.width=a,e.height=s,e.xoff=f,e.yoff=h,e.x1=a>>1,e.y1=s>>1,e.x0=-e.x1,e.y0=-e.y1,e.hasText=!0,f+=a}for(var b=i.getImageData(0,0,2048/o,vC/o).data,w=[];--r>=0;)if((e=n[r]).hasText){for(u=(a=e.width)>>5,s=e.y1-e.y0,l=0;l>5),E=b[2048*(h+c)+(f+l)<<2]?1<<31-l%32:0;w[M]|=E,k|=E}k?A=c:(e.y0++,s--,c--,h++)}e.y1=e.y0+A,e.sprite=w.slice(0,(e.y1-e.y0)*u)}}}function bC(t,e,n){n>>=5;for(var r,i=t.sprite,o=t.width>>5,a=t.x-(o<<4),u=127&a,s=32-u,l=t.y1-t.y0,c=(t.y+t.y0)*n+(a>>5),f=0;f>>u:0))&e[c+h])return!0;c+=n}return!1}function wC(t,e){var n=t[0],r=t[1];e.x+e.x0r.x&&(r.x=e.x+e.x1),e.y+e.y1>r.y&&(r.y=e.y+e.y1)}function kC(t,e){return t.x+t.x1>e[0].x&&t.x+t.x0e[0].y&&t.y+t.y0e(t(n))}i.forEach((t=>{t[a[0]]=NaN,t[a[1]]=NaN,t[a[3]]=0}));const c=o.words(i).text(e.text).size(e.size||[500,500]).padding(e.padding||1).spiral(e.spiral||"archimedean").rotate(e.rotate||0).font(e.font||"sans-serif").fontStyle(e.fontStyle||"normal").fontWeight(e.fontWeight||"normal").fontSize(l).random(t.random).layout(),f=o.size(),h=f[0]>>1,d=f[1]>>1,p=c.length;for(let t,e,n=0;nnew Uint8Array(t),TC=t=>new Uint16Array(t),zC=t=>new Uint32Array(t);function NC(t,e,n){const r=(e<257?BC:e<65537?TC:zC)(t);return n&&r.set(n),r}function OC(t,e,n){const r=1<{const r=t[e],i=t[n];return ri?1:0})),function(t,e){return Array.from(e,(e=>t[e]))}(t,e)}(h,s),a)l=e,c=t,e=Array(a+u),t=zC(a+u),function(t,e,n,r,i,o,a,u,s){let l,c=0,f=0;for(l=0;c0)for(f=0;ft,size:()=>n}}function $C(t){ga.call(this,function(){let t=8,e=[],n=zC(0),r=NC(0,t),i=NC(0,t);return{data:()=>e,seen:()=>n=function(t,e,n){return t.length>=e?t:((n=n||new t.constructor(e)).set(t),n)}(n,e.length),add(t){for(let n,r=0,i=e.length,o=t.length;re.length,curr:()=>r,prev:()=>i,reset:t=>i[t]=r[t],all:()=>t<257?255:t<65537?65535:4294967295,set(t,e){r[t]|=e},clear(t,e){r[t]&=~e},resize(e,n){(e>r.length||n>t)&&(t=Math.max(n,t),r=NC(e,t,r),i=NC(e,t))}}}(),t),this._indices=null,this._dims=null}function qC(t){ga.call(this,null,t)}$C.Definition={type:"CrossFilter",metadata:{},params:[{name:"fields",type:"field",array:!0,required:!0},{name:"query",type:"array",array:!0,required:!0,content:{type:"number",array:!0,length:2}}]},st($C,ga,{transform(t,e){return this._dims?t.modified("fields")||t.fields.some((t=>e.modified(t.fields)))?this.reinit(t,e):this.eval(t,e):this.init(t,e)},init(t,e){const n=t.fields,r=t.query,i=this._indices={},o=this._dims=[],a=r.length;let u,s,l=0;for(;l{const t=i.remove(e,n);for(const e in r)r[e].reindex(t)}))},update(t,e,n){const r=this._dims,i=t.query,o=e.stamp,a=r.length;let u,s,l=0;for(n.filters=0,s=0;sd)for(m=d,y=Math.min(f,p);mp)for(m=Math.max(f,p),y=h;mc)for(d=c,p=Math.min(s,f);df)for(d=Math.max(s,f),p=l;du[t]&n?null:a[t];return o.filter(o.MOD,l),i&i-1?(o.filter(o.ADD,(t=>{const e=u[t]&n;return!e&&e^s[t]&n?a[t]:null})),o.filter(o.REM,(t=>{const e=u[t]&n;return e&&!(e^e^s[t]&n)?a[t]:null}))):(o.filter(o.ADD,l),o.filter(o.REM,(t=>(u[t]&n)===i?a[t]:null))),o.filter(o.SOURCE,(t=>l(t._index)))}});var LC=Object.freeze({__proto__:null,crossfilter:$C,resolvefilter:qC});const UC="RawCode",PC="Literal",jC="Property",IC="Identifier",WC="ArrayExpression",HC="BinaryExpression",YC="CallExpression",VC="ConditionalExpression",GC="LogicalExpression",XC="MemberExpression",JC="ObjectExpression",ZC="UnaryExpression";function QC(t){this.type=t}var KC,tF,eF,nF,rF;QC.prototype.visit=function(t){let e,n,r;if(t(this))return 1;for(e=function(t){switch(t.type){case WC:return t.elements;case HC:case GC:return[t.left,t.right];case YC:return[t.callee].concat(t.arguments);case VC:return[t.test,t.consequent,t.alternate];case XC:return[t.object,t.property];case JC:return t.properties;case jC:return[t.key,t.value];case ZC:return[t.argument];case IC:case PC:case UC:default:return[]}}(this),n=0,r=e.length;n",KC[3]="Identifier",KC[4]="Keyword",KC[5]="Null",KC[6]="Numeric",KC[7]="Punctuator",KC[8]="String",KC[9]="RegularExpression";var iF="Identifier",oF="Unexpected token %0",aF="Invalid regular expression",uF="Invalid regular expression: missing /",sF="Octal literals are not allowed in strict mode.",lF="ILLEGAL",cF="Disabled.",fF=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),hF=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]");function dF(t,e){if(!t)throw new Error("ASSERT: "+e)}function pF(t){return t>=48&&t<=57}function gF(t){return"0123456789abcdefABCDEF".indexOf(t)>=0}function mF(t){return"01234567".indexOf(t)>=0}function yF(t){return 32===t||9===t||11===t||12===t||160===t||t>=5760&&[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(t)>=0}function vF(t){return 10===t||13===t||8232===t||8233===t}function _F(t){return 36===t||95===t||t>=65&&t<=90||t>=97&&t<=122||92===t||t>=128&&fF.test(String.fromCharCode(t))}function xF(t){return 36===t||95===t||t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||92===t||t>=128&&hF.test(String.fromCharCode(t))}const bF={if:1,in:1,do:1,var:1,for:1,new:1,try:1,let:1,this:1,else:1,case:1,void:1,with:1,enum:1,while:1,break:1,catch:1,throw:1,const:1,yield:1,class:1,super:1,return:1,typeof:1,delete:1,switch:1,export:1,import:1,public:1,static:1,default:1,finally:1,extends:1,package:1,private:1,function:1,continue:1,debugger:1,interface:1,protected:1,instanceof:1,implements:1};function wF(){for(;eF1114111||"}"!==t)&&LF({},oF,lF),e<=65535?String.fromCharCode(e):(n=55296+(e-65536>>10),r=56320+(e-65536&1023),String.fromCharCode(n,r))}function MF(){var t,e;for(t=tF.charCodeAt(eF++),e=String.fromCharCode(t),92===t&&(117!==tF.charCodeAt(eF)&&LF({},oF,lF),++eF,(t=kF("u"))&&"\\"!==t&&_F(t.charCodeAt(0))||LF({},oF,lF),e=t);eF>>="===(r=tF.substr(eF,4))?{type:7,value:r,start:i,end:eF+=4}:">>>"===(n=r.substr(0,3))||"<<="===n||">>="===n?{type:7,value:n,start:i,end:eF+=3}:a===(e=n.substr(0,2))[1]&&"+-<>&|".indexOf(a)>=0||"=>"===e?{type:7,value:e,start:i,end:eF+=2}:("//"===e&&LF({},oF,lF),"<>=!+-*%&|^/".indexOf(a)>=0?{type:7,value:a,start:i,end:++eF}:void LF({},oF,lF))}function CF(){var t,e,n;if(dF(pF((n=tF[eF]).charCodeAt(0))||"."===n,"Numeric literal must start with a decimal digit or a decimal point"),e=eF,t="","."!==n){if(t=tF[eF++],n=tF[eF],"0"===t){if("x"===n||"X"===n)return++eF,function(t){let e="";for(;eF=0&&LF({},aF,n),{value:n,literal:e}}(),r=function(t,e){let n=t;e.indexOf("u")>=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}/g,((t,e)=>{if(parseInt(e,16)<=1114111)return"x";LF({},aF)})).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"x"));try{new RegExp(n)}catch(t){LF({},aF)}try{return new RegExp(t,e)}catch(t){return null}}(e.value,n.value),{literal:e.literal+n.literal,value:r,regex:{pattern:e.value,flags:n.value},start:t,end:eF}}function SF(){if(wF(),eF>=nF)return{type:2,start:eF,end:eF};const t=tF.charCodeAt(eF);return _F(t)?EF():40===t||41===t||59===t?DF():39===t||34===t?function(){var t,e,n,r,i="",o=!1;for(dF("'"===(t=tF[eF])||'"'===t,"String literal must starts with a quote"),e=eF,++eF;eF=0&&eF(dF(e":case"<=":case">=":case"instanceof":case"in":e=7;break;case"<<":case">>":case">>>":e=8;break;case"+":case"-":e=9;break;case"*":case"/":case"%":e=11}return e}function nS(){var t,e;return t=function(){var t,e,n,r,i,o,a,u,s,l;if(t=rF,s=tS(),0===(i=eS(r=rF)))return s;for(r.prec=i,BF(),e=[t,rF],o=[s,r,a=tS()];(i=eS(rF))>0;){for(;o.length>2&&i<=o[o.length-2].prec;)a=o.pop(),u=o.pop().value,s=o.pop(),e.pop(),n=zF(u,s,a),o.push(n);(r=BF()).prec=i,o.push(r),e.push(rF),n=tS(),o.push(n)}for(n=o[l=o.length-1],e.pop();l>1;)e.pop(),n=zF(o[l-1].value,o[l-2],n),l-=2;return n}(),jF("?")&&(BF(),e=nS(),PF(":"),t=function(t,e,n){const r=new QC("ConditionalExpression");return r.test=t,r.consequent=e,r.alternate=n,r}(t,e,nS())),t}function rS(){const t=nS();if(jF(","))throw new Error(cF);return t}function iS(t){eF=0,nF=(tF=t).length,rF=null,TF();const e=rS();if(2!==rF.type)throw new Error("Unexpect token after expression.");return e}var oS={NaN:"NaN",E:"Math.E",LN2:"Math.LN2",LN10:"Math.LN10",LOG2E:"Math.LOG2E",LOG10E:"Math.LOG10E",PI:"Math.PI",SQRT1_2:"Math.SQRT1_2",SQRT2:"Math.SQRT2",MIN_VALUE:"Number.MIN_VALUE",MAX_VALUE:"Number.MAX_VALUE"};function aS(t){function e(e,n,r){return i=>function(e,n,r,i){let o=t(n[0]);return r&&(o=r+"("+o+")",0===r.lastIndexOf("new ",0)&&(o="("+o+")")),o+"."+e+(i<0?"":0===i?"()":"("+n.slice(1).map(t).join(",")+")")}(e,i,n,r)}const n="new Date",r="String",i="RegExp";return{isNaN:"Number.isNaN",isFinite:"Number.isFinite",abs:"Math.abs",acos:"Math.acos",asin:"Math.asin",atan:"Math.atan",atan2:"Math.atan2",ceil:"Math.ceil",cos:"Math.cos",exp:"Math.exp",floor:"Math.floor",log:"Math.log",max:"Math.max",min:"Math.min",pow:"Math.pow",random:"Math.random",round:"Math.round",sin:"Math.sin",sqrt:"Math.sqrt",tan:"Math.tan",clamp:function(e){e.length<3&&s("Missing arguments to clamp function."),e.length>3&&s("Too many arguments to clamp function.");const n=e.map(t);return"Math.max("+n[1]+", Math.min("+n[2]+","+n[0]+"))"},now:"Date.now",utc:"Date.UTC",datetime:n,date:e("getDate",n,0),day:e("getDay",n,0),year:e("getFullYear",n,0),month:e("getMonth",n,0),hours:e("getHours",n,0),minutes:e("getMinutes",n,0),seconds:e("getSeconds",n,0),milliseconds:e("getMilliseconds",n,0),time:e("getTime",n,0),timezoneoffset:e("getTimezoneOffset",n,0),utcdate:e("getUTCDate",n,0),utcday:e("getUTCDay",n,0),utcyear:e("getUTCFullYear",n,0),utcmonth:e("getUTCMonth",n,0),utchours:e("getUTCHours",n,0),utcminutes:e("getUTCMinutes",n,0),utcseconds:e("getUTCSeconds",n,0),utcmilliseconds:e("getUTCMilliseconds",n,0),length:e("length",null,-1),parseFloat:"parseFloat",parseInt:"parseInt",upper:e("toUpperCase",r,0),lower:e("toLowerCase",r,0),substring:e("substring",r),split:e("split",r),trim:e("trim",r,0),regexp:i,test:e("test",i),if:function(e){e.length<3&&s("Missing arguments to if function."),e.length>3&&s("Too many arguments to if function.");const n=e.map(t);return"("+n[0]+"?"+n[1]+":"+n[2]+")"}}}function uS(t){const e=(t=t||{}).allowed?Ct(t.allowed):{},n=t.forbidden?Ct(t.forbidden):{},r=t.constants||oS,i=(t.functions||aS)(h),o=t.globalvar,a=t.fieldvar,u=Y(o)?o:t=>`${o}["${t}"]`;let l={},c={},f=0;function h(t){if(gt(t))return t;const e=d[t.type];return null==e&&s("Unsupported type: "+t.type),e(t)}const d={Literal:t=>t.raw,Identifier:t=>{const i=t.name;return f>0?i:it(n,i)?s("Illegal identifier: "+i):it(r,i)?r[i]:it(e,i)?i:(l[i]=1,u(i))},MemberExpression:t=>{const e=!t.computed,n=h(t.object);e&&(f+=1);const r=h(t.property);return n===a&&(c[function(t){const e=t&&t.length-1;return e&&('"'===t[0]&&'"'===t[e]||"'"===t[0]&&"'"===t[e])?t.slice(1,-1):t}(r)]=1),e&&(f-=1),n+(e?"."+r:"["+r+"]")},CallExpression:t=>{"Identifier"!==t.callee.type&&s("Illegal callee type: "+t.callee.type);const e=t.callee.name,n=t.arguments,r=it(i,e)&&i[e];return r||s("Unrecognized function: "+e),Y(r)?r(n):r+"("+n.map(h).join(",")+")"},ArrayExpression:t=>"["+t.elements.map(h).join(",")+"]",BinaryExpression:t=>"("+h(t.left)+" "+t.operator+" "+h(t.right)+")",UnaryExpression:t=>"("+t.operator+h(t.argument)+")",ConditionalExpression:t=>"("+h(t.test)+"?"+h(t.consequent)+":"+h(t.alternate)+")",LogicalExpression:t=>"("+h(t.left)+t.operator+h(t.right)+")",ObjectExpression:t=>"{"+t.properties.map(h).join(",")+"}",Property:t=>{f+=1;const e=h(t.key);return f-=1,e+":"+h(t.value)}};function p(t){const e={code:h(t),globals:Object.keys(l),fields:Object.keys(c)};return l={},c={},e}return p.functions=i,p.constants=r,p}const sS="intersect",lS="union",cS="index:unit";function fS(t,e){for(var n,r,i=e.fields,o=e.values,a=i.length,u=0;u>>1;n(t[o],e)<0?r=o+1:i=o}return r}return 1===t.length&&(e=(e,n)=>t(e)-n,n=function(t){return(e,n)=>function(t,e){return te?1:t>=e?0:NaN}(t(e),n)}(t)),{left:r,center:function(t,n,i,o){null==i&&(i=0),null==o&&(o=t.length);const a=r(t,n,i,o-1);return a>i&&e(t[a-1],n)>-e(t[a],n)?a-1:a},right:function(t,e,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;n(t[o],e)>0?i=o:r=o+1}return r}}}(hS),pS=dS.left,gS=dS.right;var mS={E_union:function(t,e){if(!t.length)return e;for(var n=0,r=e.length;ne.indexOf(t)>=0)):e},R_union:function(t,e){var n=E(e[0]),r=E(e[1]);return n>r&&(n=e[1],r=e[0]),t.length?(t[0]>n&&(t[0]=n),t[1]r&&(n=e[1],r=e[0]),t.length?rr&&(t[1]=r),t):[n,r]}};function yS(t,e,n,r){e[0].type!==PC&&s("First argument to selection functions must be a string literal.");const i=e[0].value,o="unit",a="@unit",u=":"+i;(e.length>=2&&M(e).value)!==sS||it(r,a)||(r["@unit"]=n.getData(i).indataRef(n,o)),it(r,u)||(r[u]=n.getData(i).tuplesRef())}function vS(t){const e=this.context.data[t];return e?e.values.value:[]}const _S=t=>function(e,n){return this.context.dataflow.locale()[t](n)(e)},xS=_S("format"),bS=_S("timeFormat"),wS=_S("utcFormat"),kS=_S("timeParse"),AS=_S("utcParse"),MS=new Date(2e3,0,1);function ES(t,e,n){return Number.isInteger(t)&&Number.isInteger(e)?(MS.setYear(2e3),MS.setMonth(t),MS.setDate(e),bS.call(this,MS,n)):""}function DS(t,e,n,r){e[0].type!==PC&&s("First argument to data functions must be a string literal.");const i=e[0].value,o=":"+i;if(!it(o,r))try{r[o]=n.getData(i).tuplesRef()}catch(t){}}function CS(t,e,n,r){if(e[0].type===PC)FS(n,r,e[0].value);else for(t in n.scales)FS(n,r,t)}function FS(t,e,n){const r="%"+n;if(!it(e,r))try{e[r]=t.scaleRef(n)}catch(t){}}function SS(t,e){let n;return Y(t)?t:gt(t)?(n=e.scales[t])&&n.value:void 0}function BS(t,e,n){e.__bandwidth=t=>t&&t.bandwidth?t.bandwidth():0,n._bandwidth=CS,n._range=CS,n._scale=CS;const r=e=>"_["+(e.type===PC?kt("%"+e.value):kt("%")+"+"+t(e))+"]";return{_bandwidth:t=>`this.__bandwidth(${r(t[0])})`,_range:t=>`${r(t[0])}.range()`,_scale:e=>`${r(e[0])}(${t(e[1])})`}}function TS(t,e){return function(n,r,i){if(n){const e=SS(n,(i||this).context);return e&&e.path[t](r)}return e(r)}}const zS=TS("area",(function(t){return hb=new Qt,Gx(t,db),2*hb})),NS=TS("bounds",(function(t){var e,n,r,i,o,a,u;if(rb=nb=-(tb=eb=1/0),lb=[],Gx(t,Pb),n=lb.length){for(lb.sort(Jb),e=1,o=[r=lb[0]];eXb(r[0],r[1])&&(r[1]=i[1]),Xb(i[0],r[1])>Xb(r[0],r[1])&&(r[0]=i[0])):o.push(r=i);for(a=-1/0,e=0,r=o[n=o.length-1];e<=n;r=i,++e)i=o[e],(u=Xb(r[1],i[0]))>a&&(a=u,tb=i[0],nb=r[1])}return lb=cb=null,tb===1/0||eb===1/0?[[NaN,NaN],[NaN,NaN]]:[[tb,eb],[nb,rb]]})),OS=TS("centroid",(function(t){Mb=Eb=Db=Cb=Fb=Sb=Bb=Tb=0,zb=new Qt,Nb=new Qt,Ob=new Qt,Gx(t,Qb);var e=+zb,n=+Nb,r=+Ob,i=zx(e,n,r);return iUS(t,e)}const jS={};function IS(t){return _(t)||ArrayBuffer.isView(t)?t:null}function WS(t){return IS(t)||(gt(t)?t:null)}const HS=t=>t.data;function YS(t,e){const n=vS.call(e,t);return n.root&&n.root.lookup||{}}const VS=()=>"undefined"!=typeof window&&window||null;const GS={random:()=>t.random(),cumulativeNormal:Ba,cumulativeLogNormal:$a,cumulativeUniform:Ia,densityNormal:Sa,densityLogNormal:Ra,densityUniform:ja,quantileNormal:Ta,quantileLogNormal:qa,quantileUniform:Wa,sampleNormal:Fa,sampleLogNormal:Oa,sampleUniform:Pa,isArray:_,isBoolean:ct,isDate:ft,isDefined:t=>void 0!==t,isNumber:dt,isObject:x,isRegExp:pt,isString:gt,isTuple:Oo,isValid:t=>null!=t&&t==t,toBoolean:At,toDate:Et,toNumber:E,toString:Dt,indexof:function(t,...e){return WS(t).indexOf(...e)},join:function(t,...e){return IS(t).join(...e)},lastindexof:function(t,...e){return WS(t).lastIndexOf(...e)},replace:function(t,e,n){return Y(n)&&s("Function argument passed to replace."),String(t).replace(e,n)},reverse:function(t){return IS(t).slice().reverse()},slice:function(t,...e){return WS(t).slice(...e)},flush:ut,lerp:yt,merge:function(){const t=[].slice.call(arguments);return t.unshift({}),tt(...t)},pad:bt,peek:M,pluck:function(t,e){const n=jS[e]||(jS[e]=c(e));return _(t)?t.map(n):n(t)},span:wt,inrange:lt,truncate:Ft,rgb:kc,lab:Pc,hcl:Gc,hsl:Sc,luminance:qS,contrast:function(t,e){const n=qS(t),r=qS(e);return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)},sequence:de,format:xS,utcFormat:wS,utcParse:AS,utcOffset:Qn,utcSequence:er,timeFormat:bS,timeParse:kS,timeOffset:Zn,timeSequence:tr,timeUnitSpecifier:kn,monthFormat:function(t){return ES.call(this,t,1,"%B")},monthAbbrevFormat:function(t){return ES.call(this,t,1,"%b")},dayFormat:function(t){return ES.call(this,0,2+t,"%A")},dayAbbrevFormat:function(t){return ES.call(this,0,2+t,"%a")},quarter:j,utcquarter:I,week:Dn,utcweek:zn,dayofyear:En,utcdayofyear:Tn,warn:function(){return RS(this.context.dataflow,"warn",arguments)},info:function(){return RS(this.context.dataflow,"info",arguments)},debug:function(){return RS(this.context.dataflow,"debug",arguments)},extent:et,inScope:function(t){const e=this.context.group;let n=!1;if(e)for(;t;){if(t===e){n=!0;break}t=t.mark.group}return n},intersect:function(t,e,n){if(!t)return[];const[r,i]=t,o=(new Zp).set(r[0],r[1],i[0],i[1]);return kv(n||this.context.dataflow.scenegraph().root,o,function(t){let e=null;if(t){const n=W(t.marktype),r=W(t.markname);e=t=>(!n.length||n.some((e=>t.marktype===e)))&&(!r.length||r.some((e=>t.name===e)))}return e}(e))},clampRange:H,pinchDistance:function(t){const e=t.touches,n=e[0].clientX-e[1].clientX,r=e[0].clientY-e[1].clientY;return Math.sqrt(n*n+r*r)},pinchAngle:function(t){const e=t.touches;return Math.atan2(e[0].clientY-e[1].clientY,e[0].clientX-e[1].clientX)},screen:function(){const t=VS();return t?t.screen:{}},containerSize:function(){const t=this.context.dataflow,e=t.container&&t.container();return e?[e.clientWidth,e.clientHeight]:[void 0,void 0]},windowSize:function(){const t=VS();return t?[t.innerWidth,t.innerHeight]:[void 0,void 0]},bandspace:function(t,e,n){return Uh(t||0,e||0,n||0)},setdata:function(t,e){const n=this.context.dataflow,r=this.context.data[t].input;return n.pulse(r,n.changeset().remove(g).insert(e)),1},pathShape:function(t){let e=null;return function(n){return n?xp(n,e=e||lp(t)):t}},panLinear:z,panLog:N,panPow:O,panSymlog:R,zoomLinear:q,zoomLog:L,zoomPow:U,zoomSymlog:P,encode:function(t,e,n){if(t){const n=this.context.dataflow,r=t.mark.source;n.pulse(r,n.changeset().encode(t,e))}return void 0!==n?n:t},modify:function(t,e,n,r,i,o){const a=this.context.dataflow,u=this.context.data[t],s=u.input,l=a.stamp();let c,f,h=u.changes;if(!1===a._trigger||!(s.value.length||e||r))return 0;if((!h||h.stamp{u.modified=!0,a.pulse(s,h).run()}),!0,1)),n&&(c=!0===n?g:_(n)||Oo(n)?n:PS(n),h.remove(c)),e&&h.insert(e),r&&(c=PS(r),s.value.some(c)?h.remove(c):h.insert(r)),i)for(f in o)h.modify(i,f,o[f]);return 1}},XS=["view","item","group","xy","x","y"],JS="this.",ZS={},QS={forbidden:["_"],allowed:["datum","event","item"],fieldvar:"datum",globalvar:t=>`_[${kt("$"+t)}]`,functions:function(t){const e=aS(t);XS.forEach((t=>e[t]="event.vega."+t));for(const t in GS)e[t]=JS+t;return tt(e,BS(t,GS,ZS)),e},constants:oS,visitors:ZS},KS=uS(QS);function tB(t,e,n){return 1===arguments.length?GS[t]:(GS[t]=e,n&&(ZS[t]=n),KS&&(KS.functions[t]=JS+t),this)}function eB(t,e){const n={};let r;try{r=iS(t=gt(t)?t:kt(t)+"")}catch(e){s("Expression parse error: "+t)}r.visit((t=>{if(t.type!==YC)return;const r=t.callee.name,i=QS.visitors[r];i&&i(r,t.arguments,e,n)}));const i=KS(r);return i.globals.forEach((t=>{const r="$"+t;!it(n,r)&&e.getSignal(t)&&(n[r]=e.signalRef(t))})),{$expr:tt({code:i.code},e.options.ast?{ast:r}:null),$fields:i.fields,$params:n}}tB("bandwidth",(function(t,e){const n=SS(t,(e||this).context);return n&&n.bandwidth?n.bandwidth():0}),CS),tB("copy",(function(t,e){const n=SS(t,(e||this).context);return n?n.copy():void 0}),CS),tB("domain",(function(t,e){const n=SS(t,(e||this).context);return n?n.domain():[]}),CS),tB("range",(function(t,e){const n=SS(t,(e||this).context);return n&&n.range?n.range():[]}),CS),tB("invert",(function(t,e,n){const r=SS(t,(n||this).context);return r?_(e)?(r.invertRange||r.invert)(e):(r.invert||r.invertExtent)(e):void 0}),CS),tB("scale",(function(t,e,n){const r=SS(t,(n||this).context);return r?r(e):void 0}),CS),tB("gradient",(function(t,e,n,r,i){t=SS(t,(i||this).context);const o=ip(e,n);let a=t.domain(),u=a[0],s=M(a),l=h;return s-u?l=Dd(t,u,s):t=(t.interpolator?pd("sequential")().interpolator(t.interpolator()):pd("linear")().interpolate(t.interpolate()).range(t.range())).domain([u=0,s=1]),t.ticks&&(a=t.ticks(+r||15),u!==a[0]&&a.unshift(u),s!==M(a)&&a.push(s)),a.forEach((e=>o.stop(l(e),t(e)))),o}),CS),tB("geoArea",zS,CS),tB("geoBounds",NS,CS),tB("geoCentroid",OS,CS),tB("geoShape",(function(t,e,n){const r=SS(t,(n||this).context);return function(t){return r?r.path.context(t)(e):""}}),CS),tB("indata",(function(t,e,n){const r=this.context.data[t]["index:"+e],i=r?r.value.get(n):void 0;return i?i.count:i}),(function(t,e,n,r){e[0].type!==PC&&s("First argument to indata must be a string literal."),e[1].type!==PC&&s("Second argument to indata must be a string literal.");const i=e[0].value,o=e[1].value,a="@"+o;it(a,r)||(r[a]=n.getData(i).indataRef(n,o))})),tB("data",vS,DS),tB("treePath",(function(t,e,n){const r=YS(t,this),i=r[e],o=r[n];return i&&o?i.path(o).map(HS):void 0}),DS),tB("treeAncestors",(function(t,e){const n=YS(t,this)[e];return n?n.ancestors().map(HS):void 0}),DS),tB("vlSelectionTest",(function(t,e,n){for(var r,i,o,a,u,s=this.context.data[t],l=s?s.values.value:[],c=s?s[cS]&&s[cS].value:void 0,f=n===sS,h=l.length,d=0;d(t[o[n].field]=e,t)),{}))}if(e=e||lS,Object.keys(y).forEach((t=>{y[t]=Object.keys(y[t]).map((e=>y[t][e])).reduce(((n,r)=>void 0===n?r:mS[_[t]+"_"+e](n,r)))})),m=Object.keys(v),n&&m.length){y[r?"vlPoint":"vlMulti"]=e===lS?{or:m.reduce(((t,e)=>(t.push(...v[e]),t)),[])}:{and:m.map((t=>({or:v[t]})))}}return y}),yS),tB("vlSelectionTuples",(function(t,e){return t.map((t=>tt({values:e.fields.map((e=>(e.getter||(e.getter=c(e.field)))(t.datum)))},e)))}));const nB=Ct(["rule"]),rB=Ct(["group","image","rect"]);function iB(t){return(t+"").toLowerCase()}function oB(t,e,n){";"!==n[n.length-1]&&(n="return("+n+");");const r=Function(...e.concat(n));return t&&t.functions?r.bind(t.functions):r}var aB={operator:(t,e)=>oB(t,["_"],e.code),parameter:(t,e)=>oB(t,["datum","_"],e.code),event:(t,e)=>oB(t,["event"],e.code),handler:(t,e)=>oB(t,["_","event"],`var datum=event.item&&event.item.datum;return ${e.code};`),encode:(t,e)=>{const{marktype:n,channels:r}=e;let i="var o=item,datum=o.datum,m=0,$;";for(const t in r){const e="o["+kt(t)+"]";i+=`$=${r[t].code};if(${e}!==$)${e}=$,m=1;`}return i+=function(t,e){let n="";return nB[e]||(t.x2&&(t.x?(rB[e]&&(n+="if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;"),n+="o.width=o.x2-o.x;"):n+="o.x=o.x2-(o.width||0);"),t.xc&&(n+="o.x=o.xc-(o.width||0)/2;"),t.y2&&(t.y?(rB[e]&&(n+="if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;"),n+="o.height=o.y2-o.y;"):n+="o.y=o.y2-(o.height||0);"),t.yc&&(n+="o.y=o.yc-(o.height||0)/2;")),n}(r,n),i+="return m;",oB(t,["item","_"],i)},codegen:{get(t){const e=`[${t.map(kt).join("][")}]`,n=Function("_",`return _${e};`);return n.path=e,n},comparator(t,e){let n;const r=Function("a","b","var u, v; return "+t.map(((t,r)=>{const i=e[r];let o,a;return t.path?(o=`a${t.path}`,a=`b${t.path}`):((n=n||{})["f"+r]=t,o=`this.f${r}(a)`,a=`this.f${r}(b)`),function(t,e,n,r){return`((u = ${t}) < (v = ${e}) || u == null) && v != null ? ${n}\n : (u > v || v == null) && u != null ? ${r}\n : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? ${n}\n : v !== v && u === u ? ${r} : `}(o,a,-i,i)})).join("")+"0;");return n?r.bind(n):r}}};function uB(t,e,n){if(!t||!x(t))return t;for(let r,i=0,o=sB.length;it&&t.$tupleid?Ro:t));return e.fn[n]||(e.fn[n]=V(r,t.$order,e.expr.codegen))}},{key:"$context",parse:function(t,e){return e}},{key:"$subflow",parse:function(t,e){const n=t.$subflow;return function(t,r,i){const o=e.fork().parse(n),a=o.get(n.operators[0].id),u=o.signals.parent;return u&&u.set(i),a.detachSubflow=()=>e.detach(o),a}}},{key:"$tupleid",parse:function(){return Ro}}];const lB={skip:!0};function cB(t,e,n,r){return new fB(t,e,n,r)}function fB(t,e,n,r){this.dataflow=t,this.transforms=e,this.events=t.events.bind(t),this.expr=r||aB,this.signals={},this.scales={},this.nodes={},this.data={},this.fn={},n&&(this.functions=Object.create(n),this.functions.context=this)}function hB(t){this.dataflow=t.dataflow,this.transforms=t.transforms,this.events=t.events,this.expr=t.expr,this.signals=Object.create(t.signals),this.scales=Object.create(t.scales),this.nodes=Object.create(t.nodes),this.data=Object.create(t.data),this.fn=Object.create(t.fn),t.functions&&(this.functions=Object.create(t.functions),this.functions.context=this)}function dB(t,e){t&&(null==e?t.removeAttribute("aria-label"):t.setAttribute("aria-label",e))}fB.prototype=hB.prototype={fork(){const t=new hB(this);return(this.subcontext||(this.subcontext=[])).push(t),t},detach(t){this.subcontext=this.subcontext.filter((e=>e!==t));const e=Object.keys(t.nodes);for(const n of e)t.nodes[n]._targets=null;for(const n of e)t.nodes[n].detach();t.nodes=null},get(t){return this.nodes[t]},set(t,e){return this.nodes[t]=e},add(t,e){const n=this,r=n.dataflow,i=t.value;if(n.set(t.id,e),function(t){return"collect"===iB(t)}(t.type)&&i&&(i.$ingest?r.ingest(e,i.$ingest,i.$format):i.$request?r.preload(e,i.$request,i.$format):r.pulse(e,r.changeset().insert(i))),t.root&&(n.root=e),t.parent){let i=n.get(t.parent.$ref);i?(r.connect(i,[e]),e.targets().add(i)):(n.unresolved=n.unresolved||[]).push((()=>{i=n.get(t.parent.$ref),r.connect(i,[e]),e.targets().add(i)}))}if(t.signal&&(n.signals[t.signal]=e),t.scale&&(n.scales[t.scale]=e),t.data)for(const r in t.data){const i=n.data[r]||(n.data[r]={});t.data[r].forEach((t=>i[t]=e))}},resolve(){return(this.unresolved||[]).forEach((t=>t())),delete this.unresolved,this},operator(t,e){this.add(t,this.dataflow.add(t.value,e))},transform(t,e){this.add(t,this.dataflow.add(this.transforms[iB(e)]))},stream(t,e){this.set(t.id,e)},update(t,e,n,r,i){this.dataflow.on(e,n,r,i,t.options)},operatorExpression(t){return this.expr.operator(this,t)},parameterExpression(t){return this.expr.parameter(this,t)},eventExpression(t){return this.expr.event(this,t)},handlerExpression(t){return this.expr.handler(this,t)},encodeExpression(t){return this.expr.encode(this,t)},parse:function(t){const e=this,n=t.operators||[];return t.background&&(e.background=t.background),t.eventConfig&&(e.eventConfig=t.eventConfig),t.locale&&(e.locale=t.locale),n.forEach((t=>e.parseOperator(t))),n.forEach((t=>e.parseOperatorParameters(t))),(t.streams||[]).forEach((t=>e.parseStream(t))),(t.updates||[]).forEach((t=>e.parseUpdate(t))),e.resolve()},parseOperator:function(t){const e=this;!function(t){return"operator"===iB(t)}(t.type)&&t.type?e.transform(t,t.type):e.operator(t,t.update?e.operatorExpression(t.update):null)},parseOperatorParameters:function(t){const e=this;if(t.params){const n=e.get(t.id);n||s("Invalid operator id: "+t.id),e.dataflow.connect(n,n.parameters(e.parseParameters(t.params),t.react,t.initonly))}},parseParameters:function(t,e){e=e||{};const n=this;for(const r in t){const i=t[r];e[r]=_(i)?i.map((t=>uB(t,n,e))):uB(i,n,e)}return e},parseStream:function(t){var e,n=this,r=null!=t.filter?n.eventExpression(t.filter):void 0,i=null!=t.stream?n.get(t.stream):void 0;t.source?i=n.events(t.source,t.type,r):t.merge&&(i=(e=t.merge.map((t=>n.get(t))))[0].merge.apply(e[0],e.slice(1))),t.between&&(e=t.between.map((t=>n.get(t))),i=i.between(e[0],e[1])),t.filter&&(i=i.filter(r)),null!=t.throttle&&(i=i.throttle(+t.throttle)),null!=t.debounce&&(i=i.debounce(+t.debounce)),null==i&&s("Invalid stream definition: "+JSON.stringify(t)),t.consume&&i.consume(!0),n.stream(t,i)},parseUpdate:function(t){var e,n=this,r=x(r=t.source)?r.$ref:r,i=n.get(r),o=t.update,a=void 0;i||s("Source not defined: "+t.source),e=t.target&&t.target.$expr?n.eventExpression(t.target.$expr):n.get(t.target),o&&o.$expr&&(o.$params&&(a=n.parseParameters(o.$params)),o=n.handlerExpression(o.$expr)),n.update(t,i,e,o,a)},getState:function(t){var e=this,n={};if(t.signals){var r=n.signals={};Object.keys(e.signals).forEach((n=>{const i=e.signals[n];t.signals(n,i)&&(r[n]=i.value)}))}if(t.data){var i=n.data={};Object.keys(e.data).forEach((n=>{const r=e.data[n];t.data(n,r)&&(i[n]=r.input.value)}))}return e.subcontext&&!1!==t.recurse&&(n.subcontext=e.subcontext.map((e=>e.getState(t)))),n},setState:function(t){var e=this,n=e.dataflow,r=t.data,i=t.signals;Object.keys(i||{}).forEach((t=>{n.update(e.signals[t],i[t],lB)})),Object.keys(r||{}).forEach((t=>{n.pulse(e.data[t].input,n.changeset().remove(g).insert(r[t]))})),(t.subcontext||[]).forEach(((t,n)=>{const r=e.subcontext[n];r&&r.setState(t)}))}};const pB="default";function gB(t,e){const n=t.globalCursor()?"undefined"!=typeof document&&document.body:t.container();if(n)return null==e?n.style.removeProperty("cursor"):n.style.cursor=e}function mB(t,e){var n=t._runtime.data;return it(n,e)||s("Unrecognized data set: "+e),n[e]}function yB(t,e){Io(e)||s("Second argument to changes must be a changeset.");const n=mB(this,t);return n.modified=!0,this.pulse(n.input,e)}function vB(t){var e=t.padding();return Math.max(0,t._viewWidth+e.left+e.right)}function _B(t){var e=t.padding();return Math.max(0,t._viewHeight+e.top+e.bottom)}function xB(t){var e=t.padding(),n=t._origin;return[e.left+n[0],e.top+n[1]]}function bB(t,e,n){var r,i,o=t._renderer,a=o&&o.canvas();return a&&(i=xB(t),(r=uy(e.changedTouches?e.changedTouches[0]:e,a))[0]-=i[0],r[1]-=i[1]),e.dataflow=t,e.item=n,e.vega=function(t,e,n){const r=e?"group"===e.mark.marktype?e:e.mark.group:null;function i(t){var n,i=r;if(t)for(n=e;n;n=n.mark.group)if(n.mark.name===t){i=n;break}return i&&i.mark&&i.mark.interactive?i:{}}function o(t){if(!t)return n;gt(t)&&(t=i(t));const e=n.slice();for(;t;)e[0]-=t.x||0,e[1]-=t.y||0,t=t.mark&&t.mark.group;return e}return{view:Q(t),item:Q(e||{}),group:i,xy:o,x:t=>o(t)[0],y:t=>o(t)[1]}}(t,n,r),e}const wB="view",kB={trap:!1};function AB(t,e,n,r){t._eventListeners.push({type:n,sources:W(e),handler:r})}function MB(t,e,n){const r=t._eventConfig&&t._eventConfig[e];return!(!1===r||x(r)&&!r[n])||(t.warn(`Blocked ${e} ${n} event listener.`),!1)}function EB(t){return t.item}function DB(t){return t.item.mark.source}function CB(t){return function(e,n){return n.vega.view().changeset().encode(n.item,t)}}function FB(t,e,n){const r=document.createElement(t);for(const t in e)r.setAttribute(t,e[t]);return null!=n&&(r.textContent=n),r}function SB(t,e,n,r){const i=n.event||"input",o=()=>t.update(e.value);r.signal(n.signal,e.value),e.addEventListener(i,o),AB(r,e,i,o),t.set=t=>{e.value=t,e.dispatchEvent(function(t){return"undefined"!=typeof Event?new Event(t):{type:t}}(i))}}function BB(t,e,n,r){const i=r.signal(n.signal),o=FB("div",{class:"vega-bind"}),a="radio"===n.input?o:o.appendChild(FB("label"));a.appendChild(FB("span",{class:"vega-bind-name"},n.name||n.signal)),e.appendChild(o);let u=TB;switch(n.input){case"checkbox":u=zB;break;case"select":u=NB;break;case"radio":u=OB;break;case"range":u=RB}u(t,a,n,i)}function TB(t,e,n,r){const i=FB("input");for(const t in n)"signal"!==t&&"element"!==t&&i.setAttribute("input"===t?"type":t,n[t]);i.setAttribute("name",n.signal),i.value=r,e.appendChild(i),i.addEventListener("input",(()=>t.update(i.value))),t.elements=[i],t.set=t=>i.value=t}function zB(t,e,n,r){const i={type:"checkbox",name:n.signal};r&&(i.checked=!0);const o=FB("input",i);e.appendChild(o),o.addEventListener("change",(()=>t.update(o.checked))),t.elements=[o],t.set=t=>o.checked=!!t||null}function NB(t,e,n,r){const i=FB("select",{name:n.signal}),o=n.labels||[];n.options.forEach(((t,e)=>{const n={value:t};$B(t,r)&&(n.selected=!0),i.appendChild(FB("option",n,(o[e]||t)+""))})),e.appendChild(i),i.addEventListener("change",(()=>{t.update(n.options[i.selectedIndex])})),t.elements=[i],t.set=t=>{for(let e=0,r=n.options.length;e{const u={type:"radio",name:n.signal,value:e};$B(e,r)&&(u.checked=!0);const s=FB("input",u);s.addEventListener("change",(()=>t.update(e)));const l=FB("label",{},(o[a]||e)+"");return l.prepend(s),i.appendChild(l),s})),t.set=e=>{const n=t.elements,r=n.length;for(let t=0;t{s.textContent=u.value,t.update(+u.value)};u.addEventListener("input",l),u.addEventListener("change",l),t.elements=[u],t.set=t=>{u.value=t,s.textContent=t}}function $B(t,e){return t===e||t+""==e+""}function qB(t,e,n,r,i,o){return(e=e||new r(t.loader())).initialize(n,vB(t),_B(t),xB(t),i,o).background(t.background())}function LB(t,e){return e?function(){try{e.apply(this,arguments)}catch(e){t.error(e)}}:null}function UB(t,e,n){if("string"==typeof e){if("undefined"==typeof document)return t.error("DOM document instance not found."),null;if(!(e=document.querySelector(e)))return t.error("Signal bind element not found: "+e),null}if(e&&n)try{e.innerHTML=""}catch(n){e=null,t.error(n)}return e}const PB=t=>+t||0;function jB(t){return x(t)?{top:PB(t.top),bottom:PB(t.bottom),left:PB(t.left),right:PB(t.right)}:(t=>({top:t,bottom:t,left:t,right:t}))(PB(t))}async function IB(t,e,n,r){const i=wv(e),o=i&&i.headless;return o||s("Unrecognized renderer type: "+e),await t.runAsync(),qB(t,null,null,o,n,r).renderAsync(t._scenegraph.root)}var WB="width",HB="height",YB="padding",VB={skip:!0};function GB(t,e){var n=t.autosize(),r=t.padding();return e-(n&&n.contains===YB?r.left+r.right:0)}function XB(t,e){var n=t.autosize(),r=t.padding();return e-(n&&n.contains===YB?r.top+r.bottom:0)}function JB(t,e){return e.modified&&_(e.input.value)&&t.indexOf("_:vega:_")}function ZB(t,e){return!("parent"===t||e instanceof ma.proxy)}function QB(t,e,n,r){const i=t.element();i&&i.setAttribute("title",function(t){return null==t?"":_(t)?KB(t):x(t)&&!ft(t)?(e=t,Object.keys(e).map((t=>{const n=e[t];return t+": "+(_(n)?KB(n):tT(n))})).join("\n")):t+"";var e}(r))}function KB(t){return"["+t.map(tT).join(", ")+"]"}function tT(t){return _(t)?"[…]":x(t)&&!ft(t)?"{…}":t}function eT(t,e){const n=this;if(e=e||{},da.call(n),e.loader&&n.loader(e.loader),e.logger&&n.logger(e.logger),null!=e.logLevel&&n.logLevel(e.logLevel),e.locale||t.locale){const r=tt({},t.locale,e.locale);n.locale(no(r.number,r.time))}n._el=null,n._elBind=null,n._renderType=e.renderer||xv.Canvas,n._scenegraph=new ty;const r=n._scenegraph.root;n._renderer=null,n._tooltip=e.tooltip||QB,n._redraw=!0,n._handler=(new Ey).scene(r),n._globalCursor=!1,n._preventDefault=!1,n._timers=[],n._eventListeners=[],n._resizeListeners=[],n._eventConfig=function(t){const e=tt({defaults:{}},t),n=(t,e)=>{e.forEach((e=>{_(t[e])&&(t[e]=Ct(t[e]))}))};return n(e.defaults,["prevent","allow"]),n(e,["view","window","selector"]),e}(t.eventConfig),n.globalCursor(n._eventConfig.globalCursor);const i=function(t,e,n){return cB(t,ma,GS,n).parse(e)}(n,t,e.expr);n._runtime=i,n._signals=i.signals,n._bind=(t.bindings||[]).map((t=>({state:null,param:tt({},t)}))),i.root&&i.root.set(r),r.source=i.data.root.input,n.pulse(i.data.root.input,n.changeset().insert(r.items)),n._width=n.width(),n._height=n.height(),n._viewWidth=GB(n,n._width),n._viewHeight=XB(n,n._height),n._origin=[0,0],n._resize=0,n._autosize=1,function(t){var e=t._signals,n=e.width,r=e.height,i=e.padding;function o(){t._autosize=t._resize=1}t._resizeWidth=t.add(null,(e=>{t._width=e.size,t._viewWidth=GB(t,e.size),o()}),{size:n}),t._resizeHeight=t.add(null,(e=>{t._height=e.size,t._viewHeight=XB(t,e.size),o()}),{size:r});const a=t.add(null,o,{pad:i});t._resizeWidth.rank=n.rank+1,t._resizeHeight.rank=r.rank+1,a.rank=i.rank+1}(n),function(t){t.add(null,(e=>(t._background=e.bg,t._resize=1,e.bg)),{bg:t._signals.background})}(n),function(t){const e=t._signals.cursor||(t._signals.cursor=t.add({user:pB,item:null}));t.on(t.events("view","mousemove"),e,((t,n)=>{const r=e.value,i=r?gt(r)?r:r.user:pB,o=n.item&&n.item.cursor||null;return r&&i===r.user&&o==r.item?r:{user:i,item:o}})),t.add(null,(function(e){let n=e.cursor,r=this.value;return gt(n)||(r=n.item,n=n.user),gB(t,n&&n!==pB?n:r||n),r}),{cursor:e})}(n),n.description(t.description),e.hover&&n.hover(),e.container&&n.initialize(e.container,e.bind)}function nT(t,e){return it(t._signals,e)?t._signals[e]:s("Unrecognized signal name: "+kt(e))}function rT(t,e){const n=(t._targets||[]).filter((t=>t._update&&t._update.handler===e));return n.length?n[0]:null}function iT(t,e,n,r){let i=rT(n,r);return i||(i=LB(t,(()=>r(e,n.value))),i.handler=r,t.on(n,null,i)),t}function oT(t,e,n){const r=rT(e,n);return r&&e._targets.remove(r),t}st(eT,da,{async evaluate(t,e,n){if(await da.prototype.evaluate.call(this,t,e),this._redraw||this._resize)try{this._renderer&&(this._resize&&(this._resize=0,function(t){var e=xB(t),n=vB(t),r=_B(t);t._renderer.background(t.background()),t._renderer.resize(n,r,e),t._handler.origin(e),t._resizeListeners.forEach((e=>{try{e(n,r)}catch(e){t.error(e)}}))}(this)),await this._renderer.renderAsync(this._scenegraph.root)),this._redraw=!1}catch(t){this.error(t)}return n&&To(this,n),this},dirty(t){this._redraw=!0,this._renderer&&this._renderer.dirty(t)},description(t){if(arguments.length){const e=null!=t?t+"":null;return e!==this._desc&&dB(this._el,this._desc=e),this}return this._desc},container(){return this._el},scenegraph(){return this._scenegraph},origin(){return this._origin.slice()},signal(t,e,n){const r=nT(this,t);return 1===arguments.length?r.value:this.update(r,e,n)},width(t){return arguments.length?this.signal("width",t):this.signal("width")},height(t){return arguments.length?this.signal("height",t):this.signal("height")},padding(t){return arguments.length?this.signal("padding",jB(t)):jB(this.signal("padding"))},autosize(t){return arguments.length?this.signal("autosize",t):this.signal("autosize")},background(t){return arguments.length?this.signal("background",t):this.signal("background")},renderer(t){return arguments.length?(wv(t)||s("Unrecognized renderer type: "+t),t!==this._renderType&&(this._renderType=t,this._resetRenderer()),this):this._renderType},tooltip(t){return arguments.length?(t!==this._tooltip&&(this._tooltip=t,this._resetRenderer()),this):this._tooltip},loader(t){return arguments.length?(t!==this._loader&&(da.prototype.loader.call(this,t),this._resetRenderer()),this):this._loader},resize(){return this._autosize=1,this.touch(nT(this,"autosize"))},_resetRenderer(){this._renderer&&(this._renderer=null,this.initialize(this._el,this._elBind))},_resizeView:function(t,e,n,r,i,o){this.runAfter((a=>{let u=0;a._autosize=0,a.width()!==n&&(u=1,a.signal(WB,n,VB),a._resizeWidth.skip(!0)),a.height()!==r&&(u=1,a.signal(HB,r,VB),a._resizeHeight.skip(!0)),a._viewWidth!==t&&(a._resize=1,a._viewWidth=t),a._viewHeight!==e&&(a._resize=1,a._viewHeight=e),a._origin[0]===i[0]&&a._origin[1]===i[1]||(a._resize=1,a._origin=i),u&&a.run("enter"),o&&a.runAfter((t=>t.resize()))}),!1,1)},addEventListener(t,e,n){let r=e;return n&&!1===n.trap||(r=LB(this,e),r.raw=e),this._handler.on(t,r),this},removeEventListener(t,e){for(var n,r,i=this._handler.handlers(t),o=i.length;--o>=0;)if(r=i[o].type,n=i[o].handler,t===r&&(e===n||e===n.raw)){this._handler.off(r,n);break}return this},addResizeListener(t){const e=this._resizeListeners;return e.indexOf(t)<0&&e.push(t),this},removeResizeListener(t){var e=this._resizeListeners,n=e.indexOf(t);return n>=0&&e.splice(n,1),this},addSignalListener(t,e){return iT(this,t,nT(this,t),e)},removeSignalListener(t,e){return oT(this,nT(this,t),e)},addDataListener(t,e){return iT(this,t,mB(this,t).values,e)},removeDataListener(t,e){return oT(this,mB(this,t).values,e)},globalCursor(t){if(arguments.length){if(this._globalCursor!==!!t){const e=gB(this,null);this._globalCursor=!!t,e&&gB(this,e)}return this}return this._globalCursor},preventDefault(t){return arguments.length?(this._preventDefault=t,this):this._preventDefault},timer:function(t,e){this._timers.push(function(t,e,n){var r=new qM,i=e;return null==e?(r.restart(t,e,n),r):(r._restart=r.restart,r.restart=function(t,e,n){e=+e,n=null==n?RM():+n,r._restart((function o(a){a+=i,r._restart(o,i+=e,n),t(a)}),e,n)},r.restart(t,e,n),r)}((function(e){t({timestamp:Date.now(),elapsed:e})}),e))},events:function(t,e,n){var r,i=this,o=new Qo(n),a=function(n,r){i.runAsync(null,(()=>{t===wB&&function(t,e){var n=t._eventConfig.defaults,r=n.prevent,i=n.allow;return!1!==r&&!0!==i&&(!0===r||!1===i||(r?r[e]:i?!i[e]:t.preventDefault()))}(i,e)&&n.preventDefault(),o.receive(bB(i,n,r))}))};if("timer"===t)MB(i,"timer",e)&&i.timer(a,e);else if(t===wB)MB(i,"view",e)&&i.addEventListener(e,a,kB);else if("window"===t?MB(i,"window",e)&&"undefined"!=typeof window&&(r=[window]):"undefined"!=typeof document&&MB(i,"selector",e)&&(r=document.querySelectorAll(t)),r){for(var u=0,s=r.length;u=0;)i[t].stop();for(t=o.length;--t>=0;)for(e=(n=o[t]).sources.length;--e>=0;)n.sources[e].removeEventListener(n.type,n.handler);return r&&r.call(this,this._handler,null,null,null),this},hover:function(t,e){return e=[e||"update",(t=[t||"hover"])[0]],this.on(this.events("view","mouseover",EB),DB,CB(t)),this.on(this.events("view","mouseout",EB),DB,CB(e)),this},data:function(t,e){return arguments.length<2?mB(this,t).values.value:yB.call(this,t,Wo().remove(g).insert(e))},change:yB,insert:function(t,e){return yB.call(this,t,Wo().insert(e))},remove:function(t,e){return yB.call(this,t,Wo().remove(e))},scale:function(t){var e=this._runtime.scales;return it(e,t)||s("Unrecognized scale or projection: "+t),e[t].value},initialize:function(t,e){const n=this,r=n._renderType,i=n._eventConfig.bind,o=wv(r);t=n._el=t?UB(n,t,!0):null,function(t){const e=t.container();e&&(e.setAttribute("role","graphics-document"),e.setAttribute("aria-roleDescription","visualization"),dB(e,t.description()))}(n),o||n.error("Unrecognized renderer type: "+r);const a=o.handler||Ey,u=t?o.renderer:o.headless;return n._renderer=u?qB(n,n._renderer,t,u):null,n._handler=function(t,e,n,r){const i=new r(t.loader(),LB(t,t.tooltip())).scene(t.scenegraph().root).initialize(n,xB(t),t);return e&&e.handlers().forEach((t=>{i.on(t.type,t.handler)})),i}(n,n._handler,t,a),n._redraw=!0,t&&"none"!==i&&(e=e?n._elBind=UB(n,e,!0):t.appendChild(FB("form",{class:"vega-bindings"})),n._bind.forEach((t=>{t.param.element&&"container"!==i&&(t.element=UB(n,t.param.element,!!t.param.input))})),n._bind.forEach((t=>{!function(t,e,n){if(!e)return;const r=n.param;let i=n.state;i||(i=n.state={elements:null,active:!1,set:null,update:e=>{e!=t.signal(r.signal)&&t.runAsync(null,(()=>{i.source=!0,t.signal(r.signal,e)}))}},r.debounce&&(i.update=K(r.debounce,i.update))),(null==r.input&&r.element?SB:BB)(i,e,r,t),i.active||(t.on(t._signals[r.signal],null,(()=>{i.source?i.source=!1:i.set(t.signal(r.signal))})),i.active=!0)}(n,t.element||e,t)}))),n},toImageURL:async function(t,e){t!==xv.Canvas&&t!==xv.SVG&&t!==xv.PNG&&s("Unrecognized image type: "+t);const n=await IB(this,t,e);return t===xv.SVG?function(t,e){const n=new Blob([t],{type:e});return window.URL.createObjectURL(n)}(n.svg(),"image/svg+xml"):n.canvas().toDataURL("image/png")},toCanvas:async function(t,e){return(await IB(this,xv.Canvas,t,e)).canvas()},toSVG:async function(t){return(await IB(this,xv.SVG,t)).svg()},getState:function(t){return this._runtime.getState(t||{data:JB,signals:ZB,recurse:!0})},setState:function(t){return this.runAsync(null,(e=>{e._trigger=!1,e._runtime.setState(t)}),(t=>{t._trigger=!0})),this}});const aT="[",uT="]",sT=/[[\]{}]/,lT={"*":1,arc:1,area:1,group:1,image:1,line:1,path:1,rect:1,rule:1,shape:1,symbol:1,text:1,trail:1};let cT,fT;function hT(t,e,n){return cT=e||"view",fT=n||lT,pT(t.trim()).map(gT)}function dT(t,e,n,r,i){const o=t.length;let a,u=0;for(;e=0?--u:r&&r.indexOf(a)>=0&&++u}return e}function pT(t){const e=[],n=t.length;let r=0,i=0;for(;i"!==(t=t.slice(r+1).trim())[0])throw"Expected '>' after between selector: "+t;n=n.map(gT);const i=gT(t.slice(1).trim());if(i.between)return{between:n,stream:i};i.between=n;return i}(t):function(t){const e={source:cT},n=[];let r,i,o=[0,0],a=0,u=0,s=t.length,l=0;if("}"===t[s-1]){if(l=t.lastIndexOf("{"),!(l>=0))throw"Unmatched right brace: "+t;try{o=function(t){const e=t.split(",");if(!t.length||e.length>2)throw t;return e.map((e=>{const n=+e;if(n!=n)throw t;return n}))}(t.substring(l+1,s-1))}catch(e){throw"Invalid throttle specification: "+t}s=(t=t.slice(0,l).trim()).length,l=0}if(!s)throw t;"@"===t[0]&&(a=++l);r=dT(t,l,":"),r1?(e.type=n[1],a?e.markname=n[0].slice(1):!function(t){return fT[t]}(n[0])?e.source=n[0]:e.marktype=n[0]):e.type=n[0];"!"===e.type.slice(-1)&&(e.consume=!0,e.type=e.type.slice(0,-1));null!=i&&(e.filter=i);o[0]&&(e.throttle=o[0]);o[1]&&(e.debounce=o[1]);return e}(t)}function mT(t){return x(t)?t:{type:t||"pad"}}const yT=t=>+t||0;function vT(t){return x(t)?t.signal?t:{top:yT(t.top),bottom:yT(t.bottom),left:yT(t.left),right:yT(t.right)}:{top:e=yT(t),bottom:e,left:e,right:e};var e}const _T=t=>x(t)&&!_(t)?tt({},t):{value:t};function xT(t,e,n,r){if(null!=n){return x(n)&&!_(n)||_(n)&&n.length&&x(n[0])?t.update[e]=n:t[r||"enter"][e]={value:n},1}return 0}function bT(t,e,n){for(const n in e)xT(t,n,e[n]);for(const e in n)xT(t,e,n[e],"update")}function wT(t,e,n){for(const r in e)n&&it(n,r)||(t[r]=tt(t[r]||{},e[r]));return t}function kT(t,e){return e&&(e.enter&&e.enter[t]||e.update&&e.update[t])}const AT="mark",MT="frame",ET="scope",DT="legend-label",CT="title-text",FT="title-subtitle";function ST(t,e,n){t[e]=n&&n.signal?{signal:n.signal}:{value:n}}const BT=t=>gt(t)?kt(t):t.signal?`(${t.signal})`:OT(t);function TT(t){if(null!=t.gradient)return function(t){const e=[t.start,t.stop,t.count].map((t=>null==t?null:kt(t)));for(;e.length&&null==M(e);)e.pop();return e.unshift(BT(t.gradient)),`gradient(${e.join(",")})`}(t);let e=t.signal?`(${t.signal})`:t.color?function(t){return t.c?zT("hcl",t.h,t.c,t.l):t.h||t.s?zT("hsl",t.h,t.s,t.l):t.l||t.a?zT("lab",t.l,t.a,t.b):t.r||t.g||t.b?zT("rgb",t.r,t.g,t.b):null}(t.color):null!=t.field?OT(t.field):void 0!==t.value?kt(t.value):void 0;return null!=t.scale&&(e=function(t,e){const n=BT(t.scale);null!=t.range?e=`lerp(_range(${n}), ${+t.range})`:(void 0!==e&&(e=`_scale(${n}, ${e})`),t.band&&(e=(e?e+"+":"")+`_bandwidth(${n})`+(1==+t.band?"":"*"+NT(t.band)),t.extra&&(e=`(datum.extra ? _scale(${n}, datum.extra.value) : ${e})`)),null==e&&(e="0"));return e}(t,e)),void 0===e&&(e=null),null!=t.exponent&&(e=`pow(${e},${NT(t.exponent)})`),null!=t.mult&&(e+=`*${NT(t.mult)}`),null!=t.offset&&(e+=`+${NT(t.offset)}`),t.round&&(e=`round(${e})`),e}const zT=(t,e,n,r)=>`(${t}(${[e,n,r].map(TT).join(",")})+'')`;function NT(t){return x(t)?"("+TT(t)+")":t}function OT(t){return RT(x(t)?t:{datum:t})}function RT(t){let e,n,r;if(t.signal)e="datum",r=t.signal;else if(t.group||t.parent){for(n=Math.max(1,t.level||1),e="item";n-- >0;)e+=".mark.group";t.parent?(r=t.parent,e+=".datum"):r=t.group}else t.datum?(e="datum",r=t.datum):s("Invalid field reference: "+kt(t));return t.signal||(r=gt(r)?l(r).map(kt).join("]["):RT(r)),e+"["+r+"]"}function $T(t,e,n,r,i,o){const a={};(o=o||{}).encoders={$encode:a},t=function(t,e,n,r,i){const o={},a={};let u,s,l,c;for(s in s="lineBreak","text"!==e||null==i[s]||kT(s,t)||ST(o,s,i[s]),("legend"==n||String(n).startsWith("axis"))&&(n=null),c=n===MT?i.group:n===AT?tt({},i.mark,i[e]):null,c)l=kT(s,t)||("fill"===s||"stroke"===s)&&(kT("fill",t)||kT("stroke",t)),l||ST(o,s,c[s]);for(s in W(r).forEach((e=>{const n=i.style&&i.style[e];for(const e in n)kT(e,t)||ST(o,e,n[e])})),t=tt({},t),o)c=o[s],c.signal?(u=u||{})[s]=c:a[s]=c;return t.enter=tt(a,t.enter),u&&(t.update=tt(u,t.update)),t}(t,e,n,r,i.config);for(const n in t)a[n]=qT(t[n],e,o,i);return o}function qT(t,e,n,r){const i={},o={};for(const e in t)null!=t[e]&&(i[e]=LT((a=t[e],_(a)?function(t){let e="";return t.forEach((t=>{const n=TT(t);e+=t.test?`(${t.test})?${n}:`:n})),":"===M(e)&&(e+="null"),e}(a):TT(a)),r,n,o));var a;return{$expr:{marktype:e,channels:i},$fields:Object.keys(o),$output:Object.keys(t)}}function LT(t,e,n,r){const i=eB(t,e);return i.$fields.forEach((t=>r[t]=1)),tt(n,i.$params),i.$expr}const UT=["value","update","init","react","bind"];function PT(t,e){s(t+' for "outer" push: '+kt(e))}function jT(t,e){const n=t.name;if("outer"===t.push)e.signals[n]||PT("No prior signal definition",n),UT.forEach((e=>{void 0!==t[e]&&PT("Invalid property ",e)}));else{const r=e.addSignal(n,t.value);!1===t.react&&(r.react=!1),t.bind&&e.addBinding(n,t.bind)}}function IT(t,e,n,r){this.id=-1,this.type=t,this.value=e,this.params=n,r&&(this.parent=r)}function WT(t,e,n,r){return new IT(t,e,n,r)}function HT(t,e){return WT("operator",t,e)}function YT(t){const e={$ref:t.id};return t.id<0&&(t.refs=t.refs||[]).push(e),e}function VT(t,e){return e?{$field:t,$name:e}:{$field:t}}const GT=VT("key");function XT(t,e){return{$compare:t,$order:e}}function JT(t,e){return(t&&t.signal?"$"+t.signal:t||"")+(t&&e?"_":"")+(e&&e.signal?"$"+e.signal:e||"")}const ZT="scope",QT="view";function KT(t){return t&&t.signal}function tz(t){if(KT(t))return!0;if(x(t))for(const e in t)if(tz(t[e]))return!0;return!1}function ez(t,e){return null!=t?t:e}function nz(t){return t&&t.signal||t}const rz="timer";function iz(t,e){return(t.merge?oz:t.stream?az:t.type?uz:s("Invalid stream specification: "+kt(t)))(t,e)}function oz(t,e){const n=sz({merge:t.merge.map((t=>iz(t,e)))},t,e);return e.addStream(n).id}function az(t,e){const n=sz({stream:iz(t.stream,e)},t,e);return e.addStream(n).id}function uz(t,e){let n;t.type===rz?(n=e.event(rz,t.throttle),t={between:t.between,filter:t.filter}):n=e.event(function(t){return t===ZT?QT:t||QT}(t.source),t.type);const r=sz({stream:n},t,e);return 1===Object.keys(r).length?n:e.addStream(r).id}function sz(t,e,n){let r=e.between;return r&&(2!==r.length&&s('Stream "between" parameter must have 2 entries: '+kt(e)),t.between=[iz(r[0],n),iz(r[1],n)]),r=e.filter?[].concat(e.filter):[],(e.marktype||e.markname||e.markrole)&&r.push(function(t,e,n){const r="event.item";return r+(t&&"*"!==t?"&&"+r+".mark.marktype==='"+t+"'":"")+(n?"&&"+r+".mark.role==='"+n+"'":"")+(e?"&&"+r+".mark.name==='"+e+"'":"")}(e.marktype,e.markname,e.markrole)),e.source===ZT&&r.push("inScope(event.item)"),r.length&&(t.filter=eB("("+r.join(")&&(")+")",n).$expr),null!=(r=e.throttle)&&(t.throttle=+r),null!=(r=e.debounce)&&(t.debounce=+r),e.consume&&(t.consume=!0),t}const lz={code:"_.$value",ast:{type:"Identifier",value:"value"}};function cz(t,e,n){const r=t.encode,i={target:n};let o=t.events,a=t.update,u=[];o||s("Signal update missing events specification."),gt(o)&&(o=hT(o,e.isSubscope()?ZT:QT)),o=W(o).filter((t=>t.signal||t.scale?(u.push(t),0):1)),u.length>1&&(u=[fz(u)]),o.length&&u.push(o.length>1?{merge:o}:o[0]),null!=r&&(a&&s("Signal encode and update are mutually exclusive."),a="encode(item(),"+kt(r)+")"),i.update=gt(a)?eB(a,e):null!=a.expr?eB(a.expr,e):null!=a.value?a.value:null!=a.signal?{$expr:lz,$params:{$value:e.signalRef(a.signal)}}:s("Invalid signal update specification."),t.force&&(i.options={force:!0}),u.forEach((t=>e.addUpdate(tt(function(t,e){return{source:t.signal?e.signalRef(t.signal):t.scale?e.scaleRef(t.scale):iz(t,e)}}(t,e),i))))}function fz(t){return{signal:"["+t.map((t=>t.scale?'scale("'+t.scale+'")':t.signal))+"]"}}const hz=t=>(e,n,r)=>WT(t,n,e||void 0,r),dz=hz("aggregate"),pz=hz("axisticks"),gz=hz("bound"),mz=hz("collect"),yz=hz("compare"),vz=hz("datajoin"),_z=hz("encode"),xz=hz("expression"),bz=hz("facet"),wz=hz("field"),kz=hz("key"),Az=hz("legendentries"),Mz=hz("load"),Ez=hz("mark"),Dz=hz("multiextent"),Cz=hz("multivalues"),Fz=hz("overlap"),Sz=hz("params"),Bz=hz("prefacet"),Tz=hz("projection"),zz=hz("proxy"),Nz=hz("relay"),Oz=hz("render"),Rz=hz("scale"),$z=hz("sieve"),qz=hz("sortitems"),Lz=hz("viewlayout"),Uz=hz("values");let Pz=0;const jz={min:"min",max:"max",count:"sum"};function Iz(t,e){const n=e.getScale(t.name).params;let r;for(r in n.domain=Vz(t.domain,t,e),null!=t.range&&(n.range=eN(t,e,n)),null!=t.interpolate&&function(t,e){e.interpolate=Wz(t.type||t),null!=t.gamma&&(e.interpolateGamma=Wz(t.gamma))}(t.interpolate,n),null!=t.nice&&(n.nice=function(t){return x(t)?{interval:Wz(t.interval),step:Wz(t.step)}:Wz(t)}(t.nice)),null!=t.bins&&(n.bins=function(t,e){return t.signal||_(t)?Hz(t,e):e.objectProperty(t)}(t.bins,e)),t)it(n,r)||"name"===r||(n[r]=Wz(t[r],e))}function Wz(t,e){return x(t)?t.signal?e.signalRef(t.signal):s("Unsupported object: "+kt(t)):t}function Hz(t,e){return t.signal?e.signalRef(t.signal):t.map((t=>Wz(t,e)))}function Yz(t){s("Can not find data set: "+kt(t))}function Vz(t,e,n){if(t)return t.signal?n.signalRef(t.signal):(_(t)?Gz:t.fields?Jz:Xz)(t,e,n);null==e.domainMin&&null==e.domainMax||s("No scale domain defined for domainMin/domainMax to override.")}function Gz(t,e,n){return t.map((t=>Wz(t,n)))}function Xz(t,e,n){const r=n.getData(t.data);return r||Yz(t.data),vd(e.type)?r.valuesRef(n,t.field,Qz(t.sort,!1)):wd(e.type)?r.domainRef(n,t.field):r.extentRef(n,t.field)}function Jz(t,e,n){const r=t.data,i=t.fields.reduce(((t,e)=>(e=gt(e)?{data:r,field:e}:_(e)||e.signal?function(t,e){const n="_:vega:_"+Pz++,r=mz({});if(_(t))r.value={$ingest:t};else if(t.signal){const i="setdata("+kt(n)+","+t.signal+")";r.params.input=e.signalRef(i)}return e.addDataPipeline(n,[r,$z({})]),{data:n,field:"data"}}(e,n):e,t.push(e),t)),[]);return(vd(e.type)?Zz:wd(e.type)?Kz:tN)(t,n,i)}function Zz(t,e,n){const r=Qz(t.sort,!0);let i,o;const a=n.map((t=>{const n=e.getData(t.data);return n||Yz(t.data),n.countsRef(e,t.field,r)})),u={groupby:GT,pulse:a};r&&(i=r.op||"count",o=r.field?JT(i,r.field):"count",u.ops=[jz[i]],u.fields=[e.fieldRef(o)],u.as=[o]),i=e.add(dz(u));const s=e.add(mz({pulse:YT(i)}));return o=e.add(Uz({field:GT,sort:e.sortRef(r),pulse:YT(s)})),YT(o)}function Qz(t,e){return t&&(t.field||t.op?t.field||"count"===t.op?e&&t.field&&t.op&&!jz[t.op]&&s("Multiple domain scales can not be sorted using "+t.op):s("No field provided for sort aggregate op: "+t.op):x(t)?t.field="key":t={field:"key"}),t}function Kz(t,e,n){const r=n.map((t=>{const n=e.getData(t.data);return n||Yz(t.data),n.domainRef(e,t.field)}));return YT(e.add(Cz({values:r})))}function tN(t,e,n){const r=n.map((t=>{const n=e.getData(t.data);return n||Yz(t.data),n.extentRef(e,t.field)}));return YT(e.add(Dz({extents:r})))}function eN(t,e,n){const r=e.config.range;let i=t.range;if(i.signal)return e.signalRef(i.signal);if(gt(i)){if(r&&it(r,i))return eN(t=tt({},t,{range:r[i]}),e,n);"width"===i?i=[0,{signal:"width"}]:"height"===i?i=vd(t.type)?[0,{signal:"height"}]:[{signal:"height"},0]:s("Unrecognized scale range value: "+kt(i))}else{if(i.scheme)return n.scheme=_(i.scheme)?Hz(i.scheme,e):Wz(i.scheme,e),i.extent&&(n.schemeExtent=Hz(i.extent,e)),void(i.count&&(n.schemeCount=Wz(i.count,e)));if(i.step)return void(n.rangeStep=Wz(i.step,e));if(vd(t.type)&&!_(i))return Vz(i,t,e);_(i)||s("Unsupported range type: "+kt(i))}return i.map((t=>(_(t)?Hz:Wz)(t,e)))}function nN(t,e,n){return _(t)?t.map((t=>nN(t,e,n))):x(t)?t.signal?n.signalRef(t.signal):"fit"===e?t:s("Unsupported parameter object: "+kt(t)):t}const rN="top",iN="left",oN="right",aN="bottom",uN="center",sN="index",lN="label",cN="perc",fN="value",hN="guide-label",dN="guide-title",pN="group-title",gN="group-subtitle",mN="symbol",yN="gradient",vN="discrete",_N="size",xN=[_N,"shape","fill","stroke","strokeWidth","strokeDash","opacity"],bN={name:1,style:1,interactive:1},wN={value:0},kN={value:1},AN="group",MN="rect",EN="rule",DN="text";function CN(t){return t.type=AN,t.interactive=t.interactive||!1,t}function FN(t,e){const n=(n,r)=>ez(t[n],ez(e[n],r));return n.isVertical=n=>"vertical"===ez(t.direction,e.direction||(n?e.symbolDirection:e.gradientDirection)),n.gradientLength=()=>ez(t.gradientLength,e.gradientLength||e.gradientWidth),n.gradientThickness=()=>ez(t.gradientThickness,e.gradientThickness||e.gradientHeight),n.entryColumns=()=>ez(t.columns,ez(e.columns,+n.isVertical(!0))),n}function SN(t,e){const n=e&&(e.update&&e.update[t]||e.enter&&e.enter[t]);return n&&n.signal?n:n?n.value:null}function BN(t,e,n){return`item.anchor === 'start' ? ${t} : item.anchor === 'end' ? ${e} : ${n}`}const TN=BN(kt(iN),kt(oN),kt(uN));function zN(t,e){return e?t?x(t)?Object.assign({},t,{offset:zN(t.offset,e)}):{value:t,offset:e}:e:t}function NN(t,e){return e?(t.name=e.name,t.style=e.style||t.style,t.interactive=!!e.interactive,t.encode=wT(t.encode,e,bN)):t.interactive=!1,t}function ON(t,e,n,r){const i=FN(t,n),o=i.isVertical(),a=i.gradientThickness(),u=i.gradientLength();let s,l,c,f,h;o?(l=[0,1],c=[0,0],f=a,h=u):(l=[0,0],c=[1,0],f=u,h=a);const d={enter:s={opacity:wN,x:wN,y:wN,width:_T(f),height:_T(h)},update:tt({},s,{opacity:kN,fill:{gradient:e,start:l,stop:c}}),exit:{opacity:wN}};return bT(d,{stroke:i("gradientStrokeColor"),strokeWidth:i("gradientStrokeWidth")},{opacity:i("gradientOpacity")}),NN({type:MN,role:"legend-gradient",encode:d},r)}function RN(t,e,n,r,i){const o=FN(t,n),a=o.isVertical(),u=o.gradientThickness(),s=o.gradientLength();let l,c,f,h,d="";a?(l="y",f="y2",c="x",h="width",d="1-"):(l="x",f="x2",c="y",h="height");const p={opacity:wN,fill:{scale:e,field:fN}};p[l]={signal:d+"datum."+cN,mult:s},p[c]=wN,p[f]={signal:d+"datum.perc2",mult:s},p[h]=_T(u);const g={enter:p,update:tt({},p,{opacity:kN}),exit:{opacity:wN}};return bT(g,{stroke:o("gradientStrokeColor"),strokeWidth:o("gradientStrokeWidth")},{opacity:o("gradientOpacity")}),NN({type:MN,role:"legend-band",key:fN,from:i,encode:g},r)}function $N(t,e,n,r){const i=FN(t,e),o=i.isVertical(),a=_T(i.gradientThickness()),u=i.gradientLength();let s,l,c,f,h=i("labelOverlap"),d="";const p={enter:s={opacity:wN},update:l={opacity:kN,text:{field:lN}},exit:{opacity:wN}};return bT(p,{fill:i("labelColor"),fillOpacity:i("labelOpacity"),font:i("labelFont"),fontSize:i("labelFontSize"),fontStyle:i("labelFontStyle"),fontWeight:i("labelFontWeight"),limit:ez(t.labelLimit,e.gradientLabelLimit)}),o?(s.align={value:"left"},s.baseline=l.baseline={signal:'datum.perc<=0?"bottom":datum.perc>=1?"top":"middle"'},c="y",f="x",d="1-"):(s.align=l.align={signal:'datum.perc<=0?"left":datum.perc>=1?"right":"center"'},s.baseline={value:"top"},c="x",f="y"),s[c]=l[c]={signal:d+"datum."+cN,mult:u},s[f]=l[f]=a,a.offset=ez(t.labelOffset,e.gradientLabelOffset)||0,h=h?{separation:i("labelSeparation"),method:h,order:"datum.index"}:void 0,NN({type:DN,role:DT,style:hN,key:fN,from:r,encode:p,overlap:h},n)}function qN(t,e,n,r,i){const o=FN(t,e),a=n.entries,u=!(!a||!a.interactive),s=a?a.name:void 0,l=o("clipHeight"),c=o("symbolOffset"),f={data:"value"},h=`(${i}) ? datum.offset : datum.size`,d=l?_T(l):{field:_N},p="datum.index",g=`max(1, ${i})`;let m,y,v,_,x;d.mult=.5,m={enter:y={opacity:wN,x:{signal:h,mult:.5,offset:c},y:d},update:v={opacity:kN,x:y.x,y:y.y},exit:{opacity:wN}};let b=null,w=null;t.fill||(b=e.symbolBaseFillColor,w=e.symbolBaseStrokeColor),bT(m,{fill:o("symbolFillColor",b),shape:o("symbolType"),size:o("symbolSize"),stroke:o("symbolStrokeColor",w),strokeDash:o("symbolDash"),strokeDashOffset:o("symbolDashOffset"),strokeWidth:o("symbolStrokeWidth")},{opacity:o("symbolOpacity")}),xN.forEach((e=>{t[e]&&(v[e]=y[e]={scale:t[e],field:fN})}));const k=NN({type:"symbol",role:"legend-symbol",key:fN,from:f,clip:!!l||void 0,encode:m},n.symbols),A=_T(c);A.offset=o("labelOffset"),m={enter:y={opacity:wN,x:{signal:h,offset:A},y:d},update:v={opacity:kN,text:{field:lN},x:y.x,y:y.y},exit:{opacity:wN}},bT(m,{align:o("labelAlign"),baseline:o("labelBaseline"),fill:o("labelColor"),fillOpacity:o("labelOpacity"),font:o("labelFont"),fontSize:o("labelFontSize"),fontStyle:o("labelFontStyle"),fontWeight:o("labelFontWeight"),limit:o("labelLimit")});const M=NN({type:DN,role:DT,style:hN,key:fN,from:f,encode:m},n.labels);return m={enter:{noBound:{value:!l},width:wN,height:l?_T(l):wN,opacity:wN},exit:{opacity:wN},update:v={opacity:kN,row:{signal:null},column:{signal:null}}},o.isVertical(!0)?(_=`ceil(item.mark.items.length / ${g})`,v.row.signal=`${p}%${_}`,v.column.signal=`floor(${p} / ${_})`,x={field:["row",p]}):(v.row.signal=`floor(${p} / ${g})`,v.column.signal=`${p} % ${g}`,x={field:p}),v.column.signal=`(${i})?${v.column.signal}:${p}`,CN({role:ET,from:r={facet:{data:r,name:"value",groupby:sN}},encode:wT(m,a,bN),marks:[k,M],name:s,interactive:u,sort:x})}const LN='item.orient === "left"',UN='item.orient === "right"',PN=`(${LN} || ${UN})`,jN=`datum.vgrad && ${PN}`,IN=BN('"top"','"bottom"','"middle"'),WN=`datum.vgrad && ${UN} ? (${BN('"right"','"left"','"center"')}) : (${PN} && !(datum.vgrad && ${LN})) ? "left" : ${TN}`,HN=`item._anchor || (${PN} ? "middle" : "start")`,YN=`${jN} ? (${LN} ? -90 : 90) : 0`,VN=`${PN} ? (datum.vgrad ? (${UN} ? "bottom" : "top") : ${IN}) : "top"`;function GN(t,e){let n;return x(t)&&(t.signal?n=t.signal:t.path?n="pathShape("+XN(t.path)+")":t.sphere&&(n="geoShape("+XN(t.sphere)+', {type: "Sphere"})')),n?e.signalRef(n):!!t}function XN(t){return x(t)&&t.signal?t.signal:kt(t)}function JN(t){const e=t.role||"";return e.indexOf("axis")&&e.indexOf("legend")&&e.indexOf("title")?t.type===AN?ET:e||AT:e}function ZN(t){return{marktype:t.type,name:t.name||void 0,role:t.role||JN(t),zindex:+t.zindex||void 0,aria:t.aria,description:t.description}}function QN(t,e){return t&&t.signal?e.signalRef(t.signal):!1!==t}function KN(t,e){const n=ya(t.type);n||s("Unrecognized transform type: "+kt(t.type));const r=WT(n.type.toLowerCase(),null,tO(n,t,e));return t.signal&&e.addSignal(t.signal,e.proxy(r)),r.metadata=n.metadata||{},r}function tO(t,e,n){const r={},i=t.params.length;for(let o=0;orO(t,e,n)))):rO(t,r,n)}(t,e,n):"projection"===r?n.projectionRef(e[t.name]):t.array&&!KT(i)?i.map((e=>nO(t,e,n))):nO(t,i,n):void(t.required&&s("Missing required "+kt(e.type)+" parameter: "+kt(t.name)))}function nO(t,e,n){const r=t.type;if(KT(e))return uO(r)?s("Expression references can not be signals."):sO(r)?n.fieldRef(e):lO(r)?n.compareRef(e):n.signalRef(e.signal);{const i=t.expr||sO(r);return i&&iO(e)?n.exprRef(e.expr,e.as):i&&oO(e)?VT(e.field,e.as):uO(r)?eB(e,n):aO(r)?YT(n.getData(e).values):sO(r)?VT(e):lO(r)?n.compareRef(e):e}}function rO(t,e,n){const r=t.params.length;let i;for(let n=0;nt&&t.expr,oO=t=>t&&t.field,aO=t=>"data"===t,uO=t=>"expr"===t,sO=t=>"field"===t,lO=t=>"compare"===t;function cO(t,e){return t.$ref?t:t.data&&t.data.$ref?t.data:YT(e.getData(t.data).output)}function fO(t,e,n,r,i){this.scope=t,this.input=e,this.output=n,this.values=r,this.aggregate=i,this.index={}}function hO(t){return gt(t)?t:null}function dO(t,e,n){const r=JT(n.op,n.field);let i;if(e.ops){for(let t=0,n=e.as.length;tnull==t?"null":t)).join(",")+"),0)",e);s.update=l.$expr,s.params=l.$params}function mO(t,e){const n=JN(t),r=t.type===AN,i=t.from&&t.from.facet,o=t.overlap;let a,u,l,c,f,h,d,p=t.layout||n===ET||n===MT;const g=n===AT||p||i,m=function(t,e,n){let r,i,o,a,u;return t?(r=t.facet)&&(e||s("Only group marks can be faceted."),null!=r.field?a=u=cO(r,n):(t.data?u=YT(n.getData(t.data).aggregate):(o=KN(tt({type:"aggregate",groupby:W(r.groupby)},r.aggregate),n),o.params.key=n.keyRef(r.groupby),o.params.pulse=cO(r,n),a=u=YT(n.add(o))),i=n.keyRef(r.groupby,!0))):a=YT(n.add(mz(null,[{}]))),a||(a=cO(t,n)),{key:i,pulse:a,parent:u}}(t.from,r,e);u=e.add(vz({key:m.key||(t.key?VT(t.key):void 0),pulse:m.pulse,clean:!r}));const y=YT(u);u=l=e.add(mz({pulse:y})),u=e.add(Ez({markdef:ZN(t),interactive:QN(t.interactive,e),clip:GN(t.clip,e),context:{$context:!0},groups:e.lookup(),parent:e.signals.parent?e.signalRef("parent"):null,index:e.markpath(),pulse:YT(u)}));const v=YT(u);u=c=e.add(_z($T(t.encode,t.type,n,t.style,e,{mod:!1,pulse:v}))),u.params.parent=e.encode(),t.transform&&t.transform.forEach((t=>{const n=KN(t,e),r=n.metadata;(r.generates||r.changes)&&s("Mark transforms should not generate new data."),r.nomod||(c.params.mod=!0),n.params.pulse=YT(u),e.add(u=n)})),t.sort&&(u=e.add(qz({sort:e.compareRef(t.sort),pulse:YT(u)})));const _=YT(u);(i||p)&&(p=e.add(Lz({layout:e.objectProperty(t.layout),legends:e.legends,mark:v,pulse:_})),h=YT(p));const x=e.add(gz({mark:v,pulse:h||_}));d=YT(x),r&&(g&&(a=e.operators,a.pop(),p&&a.pop()),e.pushState(_,h||d,y),i?function(t,e,n){const r=t.from.facet,i=r.name,o=cO(r,e);let a;r.name||s("Facet must have a name: "+kt(r)),r.data||s("Facet must reference a data set: "+kt(r)),r.field?a=e.add(Bz({field:e.fieldRef(r.field),pulse:o})):r.groupby?a=e.add(bz({key:e.keyRef(r.groupby),group:YT(e.proxy(n.parent)),pulse:o})):s("Facet must specify groupby or field: "+kt(r));const u=e.fork(),l=u.add(mz()),c=u.add($z({pulse:YT(l)}));u.addData(i,new fO(u,l,l,c)),u.addSignal("parent",null),a.params.subflow={$subflow:u.parse(t).toRuntime()}}(t,e,m):g?function(t,e,n){const r=e.add(Bz({pulse:n.pulse})),i=e.fork();i.add($z()),i.addSignal("parent",null),r.params.subflow={$subflow:i.parse(t).toRuntime()}}(t,e,m):e.parse(t),e.popState(),g&&(p&&a.push(p),a.push(x))),o&&(d=function(t,e,n){const r=t.method,i=t.bound,o=t.separation,a={separation:KT(o)?n.signalRef(o.signal):o,method:KT(r)?n.signalRef(r.signal):r,pulse:e};t.order&&(a.sort=n.compareRef({field:t.order}));if(i){const t=i.tolerance;a.boundTolerance=KT(t)?n.signalRef(t.signal):+t,a.boundScale=n.scaleRef(i.scale),a.boundOrient=i.orient}return YT(n.add(Fz(a)))}(o,d,e));const b=e.add(Oz({pulse:d})),w=e.add($z({pulse:YT(b)},void 0,e.parent()));null!=t.name&&(f=t.name,e.addData(f,new fO(e,l,b,w)),t.on&&t.on.forEach((t=>{(t.insert||t.remove||t.toggle)&&s("Marks only support modify triggers."),gO(t,e,f)})))}function yO(t,e){const n=e.config.legend,r=t.encode||{},i=FN(t,n),o=r.legend||{},a=o.name||void 0,u=o.interactive,l=o.style,c={};let f,h,d,p=0;xN.forEach((e=>t[e]?(c[e]=t[e],p=p||t[e]):0)),p||s("Missing valid scale for legend.");const g=function(t,e){let n=t.type||mN;t.type||1!==function(t){return xN.reduce(((e,n)=>e+(t[n]?1:0)),0)}(t)||!t.fill&&!t.stroke||(n=yd(e)?yN:_d(e)?vN:mN);return n!==yN?n:_d(e)?vN:yN}(t,e.scaleType(p)),m={title:null!=t.title,scales:c,type:g,vgrad:"symbol"!==g&&i.isVertical()},y=YT(e.add(mz(null,[m]))),v=YT(e.add(Az(h={type:g,scale:e.scaleRef(p),count:e.objectProperty(i("tickCount")),limit:e.property(i("symbolLimit")),values:e.objectProperty(t.values),minstep:e.property(t.tickMinStep),formatType:e.property(t.formatType),formatSpecifier:e.property(t.format)})));return g===yN?(d=[ON(t,p,n,r.gradient),$N(t,n,r.labels,v)],h.count=h.count||e.signalRef(`max(2,2*floor((${nz(i.gradientLength())})/100))`)):g===vN?d=[RN(t,p,n,r.gradient,v),$N(t,n,r.labels,v)]:(f=function(t,e){const n=FN(t,e);return{align:n("gridAlign"),columns:n.entryColumns(),center:{row:!0,column:!1},padding:{row:n("rowPadding"),column:n("columnPadding")}}}(t,n),d=[qN(t,n,r,v,nz(f.columns))],h.size=function(t,e,n){const r=nz(_O("size",t,n)),i=nz(_O("strokeWidth",t,n)),o=nz(function(t,e,n){return SN("fontSize",t)||function(t,e,n){const r=e.config.style[n];return r&&r[t]}("fontSize",e,n)}(n[1].encode,e,hN));return eB(`max(ceil(sqrt(${r})+${i}),${o})`,e)}(t,e,d[0].marks)),d=[CN({role:"legend-entry",from:y,encode:{enter:{x:{value:0},y:{value:0}}},marks:d,layout:f,interactive:u})],m.title&&d.push(function(t,e,n,r){const i=FN(t,e),o={enter:{opacity:wN},update:{opacity:kN,x:{field:{group:"padding"}},y:{field:{group:"padding"}}},exit:{opacity:wN}};return bT(o,{orient:i("titleOrient"),_anchor:i("titleAnchor"),anchor:{signal:HN},angle:{signal:YN},align:{signal:WN},baseline:{signal:VN},text:t.title,fill:i("titleColor"),fillOpacity:i("titleOpacity"),font:i("titleFont"),fontSize:i("titleFontSize"),fontStyle:i("titleFontStyle"),fontWeight:i("titleFontWeight"),limit:i("titleLimit"),lineHeight:i("titleLineHeight")},{align:i("titleAlign"),baseline:i("titleBaseline")}),NN({type:DN,role:"legend-title",style:dN,from:r,encode:o},n)}(t,n,r.title,y)),mO(CN({role:"legend",from:y,encode:wT(vO(i,t,n),o,bN),marks:d,aria:i("aria"),description:i("description"),zindex:i("zindex"),name:a,interactive:u,style:l}),e)}function vO(t,e,n){const r={enter:{},update:{}};return bT(r,{orient:t("orient"),offset:t("offset"),padding:t("padding"),titlePadding:t("titlePadding"),cornerRadius:t("cornerRadius"),fill:t("fillColor"),stroke:t("strokeColor"),strokeWidth:n.strokeWidth,strokeDash:n.strokeDash,x:t("legendX"),y:t("legendY"),format:e.format,formatType:e.formatType}),r}function _O(t,e,n){return e[t]?`scale("${e[t]}",datum)`:SN(t,n[0].encode)}fO.fromEntries=function(t,e){const n=e.length,r=e[n-1],i=e[n-2];let o=e[0],a=null,u=1;for(o&&"load"===o.type&&(o=e[1]),t.add(e[0]);u{n.push(KN(t,e))})),t.on&&t.on.forEach((n=>{gO(n,e,t.name)})),e.addDataPipeline(t.name,function(t,e,n){const r=[];let i,o,a,u,s,l=null,c=!1,f=!1;t.values?KT(t.values)||tz(t.format)?(r.push(AO(e,t)),r.push(l=kO())):r.push(l=kO({$ingest:t.values,$format:t.format})):t.url?tz(t.url)||tz(t.format)?(r.push(AO(e,t)),r.push(l=kO())):r.push(l=kO({$request:t.url,$format:t.format})):t.source&&(l=i=W(t.source).map((t=>YT(e.getData(t).output))),r.push(null));for(o=0,a=n.length;ot===aN||t===rN,EO=(t,e,n)=>KT(t)?TO(t.signal,e,n):t===iN||t===rN?e:n,DO=(t,e,n)=>KT(t)?SO(t.signal,e,n):MO(t)?e:n,CO=(t,e,n)=>KT(t)?BO(t.signal,e,n):MO(t)?n:e,FO=(t,e,n)=>KT(t)?zO(t.signal,e,n):t===rN?{value:e}:{value:n},SO=(t,e,n)=>OO(`${t} === 'top' || ${t} === 'bottom'`,e,n),BO=(t,e,n)=>OO(`${t} !== 'top' && ${t} !== 'bottom'`,e,n),TO=(t,e,n)=>$O(`${t} === 'left' || ${t} === 'top'`,e,n),zO=(t,e,n)=>$O(`${t} === 'top'`,e,n),NO=(t,e,n)=>$O(`${t} === 'right'`,e,n),OO=(t,e,n)=>(e=null!=e?_T(e):e,n=null!=n?_T(n):n,RO(e)&&RO(n)?{signal:`${t} ? (${e=e?e.signal||kt(e.value):null}) : (${n=n?n.signal||kt(n.value):null})`}:[tt({test:t},e)].concat(n||[])),RO=t=>null==t||1===Object.keys(t).length,$O=(t,e,n)=>({signal:`${t} ? (${LO(e)}) : (${LO(n)})`}),qO=(t,e,n,r,i)=>({signal:(null!=r?`${t} === 'left' ? (${LO(r)}) : `:"")+(null!=n?`${t} === 'bottom' ? (${LO(n)}) : `:"")+(null!=i?`${t} === 'right' ? (${LO(i)}) : `:"")+(null!=e?`${t} === 'top' ? (${LO(e)}) : `:"")+"(null)"}),LO=t=>KT(t)?t.signal:null==t?null:kt(t),UO=(t,e)=>{const n=t.signal;return n&&n.endsWith("(null)")?{signal:n.slice(0,-6)+e.signal}:t};function PO(t,e,n,r){let i;if(e&&it(e,t))return e[t];if(it(n,t))return n[t];if(t.startsWith("title")){switch(t){case"titleColor":i="fill";break;case"titleFont":case"titleFontSize":case"titleFontWeight":i=t[5].toLowerCase()+t.slice(6)}return r["guide-title"][i]}if(t.startsWith("label")){switch(t){case"labelColor":i="fill";break;case"labelFont":case"labelFontSize":i=t[5].toLowerCase()+t.slice(6)}return r["guide-label"][i]}return null}function jO(t){const e={};for(const n of t)if(n)for(const t in n)e[t]=1;return Object.keys(e)}function IO(t,e){return{scale:t.scale,range:e}}function WO(t,e,n,r,i){const o=FN(t,e),a=t.orient,u=t.gridScale,s=EO(a,1,-1),l=function(t,e){if(1===e);else if(x(t)){let n=t=tt({},t);for(;null!=n.mult;){if(!x(n.mult))return n.mult=KT(e)?{signal:`(${n.mult}) * (${e.signal})`}:n.mult*e,t;n=n.mult=tt({},n.mult)}n.mult=e}else t=KT(e)?{signal:`(${e.signal}) * (${t||0})`}:e*(t||0);return t}(t.offset,s);let c,f,h;const d={enter:c={opacity:wN},update:h={opacity:kN},exit:f={opacity:wN}};bT(d,{stroke:o("gridColor"),strokeCap:o("gridCap"),strokeDash:o("gridDash"),strokeDashOffset:o("gridDashOffset"),strokeOpacity:o("gridOpacity"),strokeWidth:o("gridWidth")});const p={scale:t.scale,field:fN,band:i.band,extra:i.extra,offset:i.offset,round:o("tickRound")},g=DO(a,{signal:"height"},{signal:"width"}),m=u?{scale:u,range:0,mult:s,offset:l}:{value:0,offset:l},y=u?{scale:u,range:1,mult:s,offset:l}:tt(g,{mult:s,offset:l});return c.x=h.x=DO(a,p,m),c.y=h.y=CO(a,p,m),c.x2=h.x2=CO(a,y),c.y2=h.y2=DO(a,y),f.x=DO(a,p),f.y=CO(a,p),NN({type:EN,role:"axis-grid",key:fN,from:r,encode:d},n)}function HO(t,e,n,r,i){return{signal:'flush(range("'+t+'"), scale("'+t+'", datum.value), '+e+","+n+","+r+","+i+")"}}function YO(t,e,n,r,i,o){const a=FN(t,e),u=t.orient,s=t.scale,l=EO(u,-1,1),c=nz(a("labelFlush")),f=nz(a("labelFlushOffset")),h=a("labelAlign"),d=a("labelBaseline");let p,g=0===c||!!c;const m=_T(i);m.mult=l,m.offset=_T(a("labelPadding")||0),m.offset.mult=l;const y={scale:s,field:fN,band:.5,offset:zN(o.offset,a("labelOffset"))},v=DO(u,g?HO(s,c,'"left"','"right"','"center"'):{value:"center"},((t,e,n)=>KT(t)?NO(t.signal,e,n):t===oN?{value:e}:{value:n})(u,"left","right")),_=DO(u,FO(u,"bottom","top"),g?HO(s,c,'"top"','"bottom"','"middle"'):{value:"middle"}),x=HO(s,c,`-(${f})`,f,0);g=g&&f;const b={opacity:wN,x:DO(u,y,m),y:CO(u,y,m)},w={enter:b,update:p={opacity:kN,text:{field:lN},x:b.x,y:b.y,align:v,baseline:_},exit:{opacity:wN,x:b.x,y:b.y}};bT(w,{dx:!h&&g?DO(u,x):null,dy:!d&&g?CO(u,x):null}),bT(w,{angle:a("labelAngle"),fill:a("labelColor"),fillOpacity:a("labelOpacity"),font:a("labelFont"),fontSize:a("labelFontSize"),fontWeight:a("labelFontWeight"),fontStyle:a("labelFontStyle"),limit:a("labelLimit"),lineHeight:a("labelLineHeight")},{align:h,baseline:d});const k=a("labelBound");let A=a("labelOverlap");return A=A||k?{separation:a("labelSeparation"),method:A,order:"datum.index",bound:k?{scale:s,orient:u,tolerance:k}:null}:void 0,p.align!==v&&(p.align=UO(p.align,v)),p.baseline!==_&&(p.baseline=UO(p.baseline,_)),NN({type:DN,role:"axis-label",style:hN,key:fN,from:r,encode:w,overlap:A},n)}function VO(t,e,n,r){const i=FN(t,e),o=t.orient,a=EO(o,-1,1);let u,s;const l={enter:u={opacity:wN,anchor:_T(i("titleAnchor",null)),align:{signal:TN}},update:s=tt({},u,{opacity:kN,text:_T(t.title)}),exit:{opacity:wN}},c={signal:`lerp(range("${t.scale}"), ${BN(0,1,.5)})`};return s.x=DO(o,c),s.y=CO(o,c),u.angle=DO(o,wN,((t,e)=>0===e?0:KT(t)?{signal:`(${t.signal}) * ${e}`}:{value:t*e})(a,90)),u.baseline=DO(o,FO(o,aN,rN),{value:aN}),s.angle=u.angle,s.baseline=u.baseline,bT(l,{fill:i("titleColor"),fillOpacity:i("titleOpacity"),font:i("titleFont"),fontSize:i("titleFontSize"),fontStyle:i("titleFontStyle"),fontWeight:i("titleFontWeight"),limit:i("titleLimit"),lineHeight:i("titleLineHeight")},{align:i("titleAlign"),angle:i("titleAngle"),baseline:i("titleBaseline")}),function(t,e,n,r){const i=(t,e)=>null!=t?(n.update[e]=UO(_T(t),n.update[e]),!1):!kT(e,r),o=i(t("titleX"),"x"),a=i(t("titleY"),"y");n.enter.auto=a===o?_T(a):DO(e,_T(a),_T(o))}(i,o,l,n),l.update.align=UO(l.update.align,u.align),l.update.angle=UO(l.update.angle,u.angle),l.update.baseline=UO(l.update.baseline,u.baseline),NN({type:DN,role:"axis-title",style:dN,from:r,encode:l},n)}function GO(t,e){const n=function(t,e){var n,r,i,o=e.config,a=o.style,u=o.axis,s="band"===e.scaleType(t.scale)&&o.axisBand,l=t.orient;if(KT(l)){const t=jO([o.axisX,o.axisY]),e=jO([o.axisTop,o.axisBottom,o.axisLeft,o.axisRight]);for(i of(n={},t))n[i]=DO(l,PO(i,o.axisX,u,a),PO(i,o.axisY,u,a));for(i of(r={},e))r[i]=qO(l.signal,PO(i,o.axisTop,u,a),PO(i,o.axisBottom,u,a),PO(i,o.axisLeft,u,a),PO(i,o.axisRight,u,a))}else n=l===rN||l===aN?o.axisX:o.axisY,r=o["axis"+l[0].toUpperCase()+l.slice(1)];return n||r||s?tt({},u,n,r,s):u}(t,e),r=t.encode||{},i=r.axis||{},o=i.name||void 0,a=i.interactive,u=i.style,s=FN(t,n),l=function(t){const e=t("tickBand");let n,r,i=t("tickOffset");return e?e.signal?(n={signal:`(${e.signal}) === 'extent' ? 1 : 0.5`},r={signal:`(${e.signal}) === 'extent'`},x(i)||(i={signal:`(${e.signal}) === 'extent' ? 0 : ${i}`})):"extent"===e?(n=1,r=!0,i=0):(n=.5,r=!1):(n=t("bandPosition"),r=t("tickExtra")),{extra:r,band:n,offset:i}}(s),c={scale:t.scale,ticks:!!s("ticks"),labels:!!s("labels"),grid:!!s("grid"),domain:!!s("domain"),title:null!=t.title},f=YT(e.add(mz({},[c]))),h=YT(e.add(pz({scale:e.scaleRef(t.scale),extra:e.property(l.extra),count:e.objectProperty(t.tickCount),values:e.objectProperty(t.values),minstep:e.property(t.tickMinStep),formatType:e.property(t.formatType),formatSpecifier:e.property(t.format)}))),d=[];let p;return c.grid&&d.push(WO(t,n,r.grid,h,l)),c.ticks&&(p=s("tickSize"),d.push(function(t,e,n,r,i,o){const a=FN(t,e),u=t.orient,s=EO(u,-1,1);let l,c,f;const h={enter:l={opacity:wN},update:f={opacity:kN},exit:c={opacity:wN}};bT(h,{stroke:a("tickColor"),strokeCap:a("tickCap"),strokeDash:a("tickDash"),strokeDashOffset:a("tickDashOffset"),strokeOpacity:a("tickOpacity"),strokeWidth:a("tickWidth")});const d=_T(i);d.mult=s;const p={scale:t.scale,field:fN,band:o.band,extra:o.extra,offset:o.offset,round:a("tickRound")};return f.y=l.y=DO(u,wN,p),f.y2=l.y2=DO(u,d),c.x=DO(u,p),f.x=l.x=CO(u,wN,p),f.x2=l.x2=CO(u,d),c.y=CO(u,p),NN({type:EN,role:"axis-tick",key:fN,from:r,encode:h},n)}(t,n,r.ticks,h,p,l))),c.labels&&(p=c.ticks?p:0,d.push(YO(t,n,r.labels,h,p,l))),c.domain&&d.push(function(t,e,n,r){const i=FN(t,e),o=t.orient;let a,u;const s={enter:a={opacity:wN},update:u={opacity:kN},exit:{opacity:wN}};bT(s,{stroke:i("domainColor"),strokeCap:i("domainCap"),strokeDash:i("domainDash"),strokeDashOffset:i("domainDashOffset"),strokeWidth:i("domainWidth"),strokeOpacity:i("domainOpacity")});const l=IO(t,0),c=IO(t,1);return a.x=u.x=DO(o,l,wN),a.x2=u.x2=DO(o,c),a.y=u.y=CO(o,l,wN),a.y2=u.y2=CO(o,c),NN({type:EN,role:"axis-domain",from:r,encode:s},n)}(t,n,r.domain,f)),c.title&&d.push(VO(t,n,r.title,f)),mO(CN({role:"axis",from:f,encode:wT(XO(s,t),i,bN),marks:d,aria:s("aria"),description:s("description"),zindex:s("zindex"),name:o,interactive:a,style:u}),e)}function XO(t,e){const n={enter:{},update:{}};return bT(n,{orient:t("orient"),offset:t("offset")||0,position:ez(e.position,0),titlePadding:t("titlePadding"),minExtent:t("minExtent"),maxExtent:t("maxExtent"),range:{signal:`abs(span(range("${e.scale}")))`},translate:t("translate"),format:e.format,formatType:e.formatType}),n}function JO(t,e,n){const r=W(t.signals),i=W(t.scales);return n||r.forEach((t=>jT(t,e))),W(t.projections).forEach((t=>function(t,e){const n=e.config.projection||{},r={};for(const n in t)"name"!==n&&(r[n]=nN(t[n],n,e));for(const t in n)null==r[t]&&(r[t]=nN(n[t],t,e));e.addProjection(t.name,r)}(t,e))),i.forEach((t=>function(t,e){const n=t.type||"linear";gd(n)||s("Unrecognized scale type: "+kt(n)),e.addScale(t.name,{type:n,domain:void 0})}(t,e))),W(t.data).forEach((t=>wO(t,e))),i.forEach((t=>Iz(t,e))),(n||r).forEach((t=>function(t,e){const n=e.getSignal(t.name);let r=t.update;t.init&&(r?s("Signals can not include both init and update expressions."):(r=t.init,n.initonly=!0)),r&&(r=eB(r,e),n.update=r.$expr,n.params=r.$params),t.on&&t.on.forEach((t=>cz(t,e,n.id)))}(t,e))),W(t.axes).forEach((t=>GO(t,e))),W(t.marks).forEach((t=>mO(t,e))),W(t.legends).forEach((t=>yO(t,e))),t.title&&xO(t.title,e),e.parseLambdas(),e}function ZO(t,e){const n=e.config,r=YT(e.root=e.add(HT())),i=function(t,e){const n=n=>ez(t[n],e[n]),r=[QO("background",n("background")),QO("autosize",mT(n("autosize"))),QO("padding",vT(n("padding"))),QO("width",n("width")||0),QO("height",n("height")||0)],i=r.reduce(((t,e)=>(t[e.name]=e,t)),{}),o={};return W(t.signals).forEach((t=>{it(i,t.name)?t=tt(i[t.name],t):r.push(t),o[t.name]=t})),W(e.signals).forEach((t=>{it(o,t.name)||it(i,t.name)||r.push(t)})),r}(t,n);i.forEach((t=>jT(t,e))),e.description=t.description||n.description,e.eventConfig=n.events,e.legends=e.objectProperty(n.legend&&n.legend.layout),e.locale=n.locale;const o=e.add(mz()),a=e.add(_z($T((t=>wT({enter:{x:{value:0},y:{value:0}},update:{width:{signal:"width"},height:{signal:"height"}}},t))(t.encode),AN,MT,t.style,e,{pulse:YT(o)}))),u=e.add(Lz({layout:e.objectProperty(t.layout),legends:e.legends,autosize:e.signalRef("autosize"),mark:r,pulse:YT(a)}));e.operators.pop(),e.pushState(YT(a),YT(u),null),JO(t,e,i),e.operators.push(u);let s=e.add(gz({mark:r,pulse:YT(u)}));return s=e.add(Oz({pulse:YT(s)})),s=e.add($z({pulse:YT(s)})),e.addData("root",new fO(e,o,o,s)),e}function QO(t,e){return e&&e.signal?{name:t,update:e.signal}:{name:t,value:e}}function KO(t,e){this.config=t||{},this.options=e||{},this.bindings=[],this.field={},this.signals={},this.lambdas={},this.scales={},this.events={},this.data={},this.streams=[],this.updates=[],this.operators=[],this.eventConfig=null,this.locale=null,this._id=0,this._subid=0,this._nextsub=[0],this._parent=[],this._encode=[],this._lookup=[],this._markpath=[]}function tR(t){this.config=t.config,this.options=t.options,this.legends=t.legends,this.field=Object.create(t.field),this.signals=Object.create(t.signals),this.lambdas=Object.create(t.lambdas),this.scales=Object.create(t.scales),this.events=Object.create(t.events),this.data=Object.create(t.data),this.streams=[],this.updates=[],this.operators=[],this._id=0,this._subid=++t._nextsub[0],this._nextsub=t._nextsub,this._parent=t._parent.slice(),this._encode=t._encode.slice(),this._lookup=t._lookup.slice(),this._markpath=t._markpath}function eR(t){return(_(t)?nR:rR)(t)}function nR(t){const e=t.length;let n="[";for(let r=0;r0?",":"")+(x(e)?e.signal||eR(e):kt(e))}return n+"]"}function rR(t){let e,n,r="{",i=0;for(e in t)n=t[e],r+=(++i>1?",":"")+kt(e)+":"+(x(n)?n.signal||eR(n):kt(n));return r+"}"}KO.prototype=tR.prototype={parse(t){return JO(t,this)},fork(){return new tR(this)},isSubscope(){return this._subid>0},toRuntime(){return this.finish(),{description:this.description,operators:this.operators,streams:this.streams,updates:this.updates,bindings:this.bindings,eventConfig:this.eventConfig,locale:this.locale}},id(){return(this._subid?this._subid+":":0)+this._id++},add(t){return this.operators.push(t),t.id=this.id(),t.refs&&(t.refs.forEach((e=>{e.$ref=t.id})),t.refs=null),t},proxy(t){const e=t instanceof IT?YT(t):t;return this.add(zz({value:e}))},addStream(t){return this.streams.push(t),t.id=this.id(),t},addUpdate(t){return this.updates.push(t),t},finish(){let t,e;for(t in this.root&&(this.root.root=!0),this.signals)this.signals[t].signal=t;for(t in this.scales)this.scales[t].scale=t;function n(t,e,n){let r,i;t&&(r=t.data||(t.data={}),i=r[e]||(r[e]=[]),i.push(n))}for(t in this.data){e=this.data[t],n(e.input,t,"input"),n(e.output,t,"output"),n(e.values,t,"values");for(const r in e.index)n(e.index[r],t,"index:"+r)}return this},pushState(t,e,n){this._encode.push(YT(this.add($z({pulse:t})))),this._parent.push(e),this._lookup.push(n?YT(this.proxy(n)):null),this._markpath.push(-1)},popState(){this._encode.pop(),this._parent.pop(),this._lookup.pop(),this._markpath.pop()},parent(){return M(this._parent)},encode(){return M(this._encode)},lookup(){return M(this._lookup)},markpath(){const t=this._markpath;return++t[t.length-1]},fieldRef(t,e){if(gt(t))return VT(t,e);t.signal||s("Unsupported field reference: "+kt(t));const n=t.signal;let r=this.field[n];if(!r){const t={name:this.signalRef(n)};e&&(t.as=e),this.field[n]=r=YT(this.add(wz(t)))}return r},compareRef(t){let e=!1;const n=t=>KT(t)?(e=!0,this.signalRef(t.signal)):function(t){return t&&t.expr}(t)?(e=!0,this.exprRef(t.expr)):t,r=W(t.field).map(n),i=W(t.order).map(n);return e?YT(this.add(yz({fields:r,orders:i}))):XT(r,i)},keyRef(t,e){let n=!1;const r=this.signals;return t=W(t).map((t=>KT(t)?(n=!0,YT(r[t.signal])):t)),n?YT(this.add(kz({fields:t,flat:e}))):function(t,e){const n={$key:t};return e&&(n.$flat=!0),n}(t,e)},sortRef(t){if(!t)return t;const e=JT(t.op,t.field),n=t.order||"ascending";return n.signal?YT(this.add(yz({fields:e,orders:this.signalRef(n.signal)}))):XT(e,n)},event(t,e){const n=t+":"+e;if(!this.events[n]){const r=this.id();this.streams.push({id:r,source:t,type:e}),this.events[n]=r}return this.events[n]},hasOwnSignal(t){return it(this.signals,t)},addSignal(t,e){this.hasOwnSignal(t)&&s("Duplicate signal name: "+kt(t));const n=e instanceof IT?e:this.add(HT(e));return this.signals[t]=n},getSignal(t){return this.signals[t]||s("Unrecognized signal name: "+kt(t)),this.signals[t]},signalRef(t){return this.signals[t]?YT(this.signals[t]):(it(this.lambdas,t)||(this.lambdas[t]=this.add(HT(null))),YT(this.lambdas[t]))},parseLambdas(){const t=Object.keys(this.lambdas);for(let e=0,n=t.length;er+Math.floor(o*t.random()),pdf:t=>t===Math.floor(t)&&t>=r&&t=i?1:(e-r+1)/o},icdf:t=>t>=0&&t<=1?r-1+Math.floor(t*o):NaN};return a.min(e).max(n)},t.randomKDE=Na,t.randomLCG=function(t){return function(){return(t=(1103515245*t+12345)%2147483647)/2147483647}},t.randomLogNormal=La,t.randomMixture=Ua,t.randomNormal=za,t.randomUniform=Ha,t.read=Fo,t.regressionExp=Qa,t.regressionLinear=Ja,t.regressionLoess=ru,t.regressionLog=Za,t.regressionPoly=eu,t.regressionPow=Ka,t.regressionQuad=tu,t.renderModule=wv,t.repeat=xt,t.resetDefaultLocale=function(){return Vi(),Qi(),ro()},t.resetSVGClipId=Xp,t.resetSVGDefIds=function(){Xp(),Kd=0},t.responseType=Co,t.runtimeContext=cB,t.sampleCurve=uu,t.sampleLogNormal=Oa,t.sampleNormal=Fa,t.sampleUniform=Pa,t.scale=pd,t.sceneEqual=Fv,t.sceneFromJSON=Qm,t.scenePickVisit=Ig,t.sceneToJSON=Zm,t.sceneVisit=jg,t.sceneZOrder=Pg,t.scheme=Td,t.serializeXML=Zy,t.setRandom=function(e){t.random=e},t.span=wt,t.splitAccessPath=l,t.stringValue=kt,t.textMetrics=Cm,t.timeBin=mr,t.timeFloor=jn,t.timeFormatLocale=to,t.timeInterval=Gn,t.timeOffset=Zn,t.timeSequence=tr,t.timeUnitSpecifier=kn,t.timeUnits=bn,t.toBoolean=At,t.toDate=Et,t.toNumber=E,t.toSet=Ct,t.toString=Dt,t.transform=va,t.transforms=ma,t.truncate=Ft,t.truthy=g,t.tupleid=Ro,t.typeParsers=mo,t.utcFloor=Hn,t.utcInterval=Xn,t.utcOffset=Qn,t.utcSequence=er,t.utcdayofyear=Tn,t.utcquarter=I,t.utcweek=zn,t.version=iR,t.visitArray=St,t.week=Dn,t.writeConfig=k,t.zero=d,t.zoomLinear=q,t.zoomLog=L,t.zoomPow=U,t.zoomSymlog=P,Object.defineProperty(t,"__esModule",{value:!0})})); +//# sourceMappingURL=vega.min.js.map diff --git a/src/citationnet/static/vega.min.js.map b/src/citationnet/static/vega.min.js.map new file mode 100644 index 0000000..c87db80 --- /dev/null +++ b/src/citationnet/static/vega.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vega.min.js","sources":["../../vega-util/build/vega-util.module.js","../../../node_modules/d3-dsv/src/dsv.js","../../../node_modules/topojson-client/src/identity.js","../../../node_modules/topojson-client/src/feature.js","../../../node_modules/topojson-client/src/transform.js","../../../node_modules/topojson-client/src/reverse.js","../../../node_modules/topojson-client/src/stitch.js","../../../node_modules/topojson-client/src/mesh.js","../../../node_modules/d3-array/src/ascending.js","../../../node_modules/d3-array/src/bisector.js","../../../node_modules/d3-array/src/number.js","../../../node_modules/d3-array/src/bisect.js","../../../node_modules/d3-array/src/fsum.js","../../../node_modules/d3-array/src/ticks.js","../../../node_modules/d3-array/src/max.js","../../../node_modules/d3-array/src/min.js","../../../node_modules/d3-array/src/quickselect.js","../../../node_modules/d3-array/src/quantile.js","../../../node_modules/d3-array/src/median.js","../../../node_modules/d3-array/src/merge.js","../../../node_modules/d3-array/src/range.js","../../../node_modules/d3-array/src/sum.js","../../../node_modules/d3-format/src/formatDecimal.js","../../../node_modules/d3-format/src/exponent.js","../../../node_modules/d3-format/src/formatSpecifier.js","../../../node_modules/d3-format/src/formatPrefixAuto.js","../../../node_modules/d3-format/src/formatRounded.js","../../../node_modules/d3-format/src/formatTypes.js","../../../node_modules/d3-format/src/identity.js","../../../node_modules/d3-format/src/locale.js","../../../node_modules/d3-format/src/defaultLocale.js","../../../node_modules/d3-format/src/formatGroup.js","../../../node_modules/d3-format/src/formatNumerals.js","../../../node_modules/d3-format/src/formatTrim.js","../../../node_modules/d3-format/src/precisionFixed.js","../../../node_modules/d3-format/src/precisionPrefix.js","../../../node_modules/d3-format/src/precisionRound.js","../../../node_modules/d3-time/src/interval.js","../../../node_modules/d3-time/src/millisecond.js","../../../node_modules/d3-time/src/duration.js","../../../node_modules/d3-time/src/second.js","../../../node_modules/d3-time/src/minute.js","../../../node_modules/d3-time/src/hour.js","../../../node_modules/d3-time/src/day.js","../../../node_modules/d3-time/src/week.js","../../../node_modules/d3-time/src/month.js","../../../node_modules/d3-time/src/year.js","../../../node_modules/d3-time/src/utcMinute.js","../../../node_modules/d3-time/src/utcHour.js","../../../node_modules/d3-time/src/utcDay.js","../../../node_modules/d3-time/src/utcWeek.js","../../../node_modules/d3-time/src/utcMonth.js","../../../node_modules/d3-time/src/utcYear.js","../../vega-time/build/vega-time.module.js","../../../node_modules/d3-time-format/src/locale.js","../../../node_modules/d3-time-format/src/defaultLocale.js","../../vega-format/build/vega-format.module.js","../../vega-loader/build/vega-loader.browser.module.js","../../vega-dataflow/build/vega-dataflow.module.js","../../vega-statistics/build/vega-statistics.module.js","../../../node_modules/d3-array/src/deviation.js","../../../node_modules/d3-array/src/variance.js","../../vega-transforms/build/vega-transforms.module.js","../../../node_modules/d3-array/src/mean.js","../../../node_modules/d3-path/src/path.js","../../../node_modules/d3-shape/src/constant.js","../../../node_modules/d3-shape/src/math.js","../../../node_modules/d3-shape/src/arc.js","../../../node_modules/d3-shape/src/array.js","../../../node_modules/d3-shape/src/curve/linear.js","../../../node_modules/d3-shape/src/point.js","../../../node_modules/d3-shape/src/line.js","../../../node_modules/d3-shape/src/area.js","../../../node_modules/d3-shape/src/symbol/circle.js","../../../node_modules/d3-shape/src/noop.js","../../../node_modules/d3-shape/src/curve/basis.js","../../../node_modules/d3-shape/src/curve/basisClosed.js","../../../node_modules/d3-shape/src/curve/basisOpen.js","../../../node_modules/d3-shape/src/curve/bundle.js","../../../node_modules/d3-shape/src/curve/cardinal.js","../../../node_modules/d3-shape/src/curve/cardinalClosed.js","../../../node_modules/d3-shape/src/curve/cardinalOpen.js","../../../node_modules/d3-shape/src/curve/catmullRom.js","../../../node_modules/d3-shape/src/curve/catmullRomClosed.js","../../../node_modules/d3-shape/src/curve/catmullRomOpen.js","../../../node_modules/d3-shape/src/curve/linearClosed.js","../../../node_modules/d3-shape/src/curve/monotone.js","../../../node_modules/d3-shape/src/curve/natural.js","../../../node_modules/d3-shape/src/curve/step.js","../../vega-canvas/build/vega-canvas.browser.module.js","../../../node_modules/d3-scale/src/init.js","../../../node_modules/d3-scale/src/ordinal.js","../../../node_modules/d3-color/src/define.js","../../../node_modules/d3-color/src/color.js","../../../node_modules/d3-color/src/math.js","../../../node_modules/d3-color/src/lab.js","../../../node_modules/d3-color/src/cubehelix.js","../../../node_modules/d3-interpolate/src/basis.js","../../../node_modules/d3-interpolate/src/basisClosed.js","../../../node_modules/d3-interpolate/src/constant.js","../../../node_modules/d3-interpolate/src/color.js","../../../node_modules/d3-interpolate/src/rgb.js","../../../node_modules/d3-interpolate/src/numberArray.js","../../../node_modules/d3-interpolate/src/array.js","../../../node_modules/d3-interpolate/src/date.js","../../../node_modules/d3-interpolate/src/number.js","../../../node_modules/d3-interpolate/src/object.js","../../../node_modules/d3-interpolate/src/string.js","../../../node_modules/d3-interpolate/src/value.js","../../../node_modules/d3-interpolate/src/round.js","../../../node_modules/d3-interpolate/src/transform/decompose.js","../../../node_modules/d3-interpolate/src/transform/parse.js","../../../node_modules/d3-interpolate/src/transform/index.js","../../../node_modules/d3-interpolate/src/zoom.js","../../../node_modules/d3-interpolate/src/hsl.js","../../../node_modules/d3-interpolate/src/hcl.js","../../../node_modules/d3-interpolate/src/cubehelix.js","../../../node_modules/d3-interpolate/src/piecewise.js","../../../node_modules/d3-interpolate/src/discrete.js","../../../node_modules/d3-interpolate/src/hue.js","../../../node_modules/d3-interpolate/src/lab.js","../../../node_modules/d3-interpolate/src/quantize.js","../../../node_modules/d3-scale/src/number.js","../../../node_modules/d3-scale/src/continuous.js","../../../node_modules/d3-scale/src/constant.js","../../../node_modules/d3-scale/src/tickFormat.js","../../../node_modules/d3-scale/src/linear.js","../../../node_modules/d3-scale/src/nice.js","../../../node_modules/d3-scale/src/log.js","../../../node_modules/d3-scale/src/symlog.js","../../../node_modules/d3-scale/src/pow.js","../../../node_modules/d3-scale/src/time.js","../../../node_modules/d3-scale/src/sequential.js","../../../node_modules/d3-scale/src/diverging.js","../../vega-scale/build/vega-scale.module.js","../../../node_modules/d3-scale/src/identity.js","../../../node_modules/d3-scale/src/utcTime.js","../../../node_modules/d3-scale/src/quantile.js","../../../node_modules/d3-scale/src/quantize.js","../../../node_modules/d3-scale/src/threshold.js","../../vega-scenegraph/build/vega-scenegraph.module.js","../../../node_modules/d3-shape/src/symbol.js","../../vega-view-transforms/build/vega-view-transforms.module.js","../../vega-encode/build/vega-encode.module.js","../../../node_modules/d3-geo/src/math.js","../../../node_modules/d3-geo/src/noop.js","../../../node_modules/d3-geo/src/stream.js","../../../node_modules/d3-geo/src/area.js","../../../node_modules/d3-geo/src/bounds.js","../../../node_modules/d3-geo/src/cartesian.js","../../../node_modules/d3-geo/src/centroid.js","../../../node_modules/d3-geo/src/compose.js","../../../node_modules/d3-geo/src/rotation.js","../../../node_modules/d3-geo/src/circle.js","../../../node_modules/d3-geo/src/clip/buffer.js","../../../node_modules/d3-geo/src/pointEqual.js","../../../node_modules/d3-geo/src/clip/rejoin.js","../../../node_modules/d3-geo/src/polygonContains.js","../../../node_modules/d3-geo/src/clip/index.js","../../../node_modules/d3-geo/src/clip/antimeridian.js","../../../node_modules/d3-geo/src/clip/circle.js","../../../node_modules/d3-geo/src/clip/rectangle.js","../../../node_modules/d3-geo/src/clip/line.js","../../../node_modules/d3-geo/src/graticule.js","../../../node_modules/d3-geo/src/path/area.js","../../../node_modules/d3-geo/src/identity.js","../../../node_modules/d3-geo/src/path/bounds.js","../../../node_modules/d3-geo/src/path/centroid.js","../../../node_modules/d3-geo/src/path/context.js","../../../node_modules/d3-geo/src/path/measure.js","../../../node_modules/d3-geo/src/path/string.js","../../../node_modules/d3-geo/src/path/index.js","../../../node_modules/d3-geo/src/transform.js","../../../node_modules/d3-geo/src/projection/fit.js","../../../node_modules/d3-geo/src/projection/resample.js","../../../node_modules/d3-geo/src/projection/index.js","../../../node_modules/d3-geo/src/projection/conic.js","../../../node_modules/d3-geo/src/projection/conicEqualArea.js","../../../node_modules/d3-geo/src/projection/cylindricalEqualArea.js","../../../node_modules/d3-geo/src/projection/albers.js","../../../node_modules/d3-geo/src/projection/azimuthal.js","../../../node_modules/d3-geo/src/projection/azimuthalEqualArea.js","../../../node_modules/d3-geo/src/projection/azimuthalEquidistant.js","../../../node_modules/d3-geo/src/projection/mercator.js","../../../node_modules/d3-geo/src/projection/conicConformal.js","../../../node_modules/d3-geo/src/projection/equirectangular.js","../../../node_modules/d3-geo/src/projection/conicEquidistant.js","../../../node_modules/d3-geo/src/projection/equalEarth.js","../../../node_modules/d3-geo/src/projection/gnomonic.js","../../../node_modules/d3-geo/src/projection/naturalEarth1.js","../../../node_modules/d3-geo/src/projection/orthographic.js","../../../node_modules/d3-geo/src/projection/stereographic.js","../../../node_modules/d3-geo/src/projection/transverseMercator.js","../../../node_modules/d3-geo-projection/src/math.js","../../../node_modules/d3-geo-projection/src/mollweide.js","../../vega-projection/build/vega-projection.module.js","../../../node_modules/d3-geo/src/projection/albersUsa.js","../../../node_modules/d3-geo/src/projection/identity.js","../../vega-geo/build/vega-geo.module.js","../../../node_modules/d3-quadtree/src/add.js","../../../node_modules/d3-quadtree/src/quad.js","../../../node_modules/d3-quadtree/src/x.js","../../../node_modules/d3-quadtree/src/y.js","../../../node_modules/d3-quadtree/src/quadtree.js","../../../node_modules/d3-force/src/constant.js","../../../node_modules/d3-force/src/jiggle.js","../../../node_modules/d3-force/src/collide.js","../../../node_modules/d3-force/src/link.js","../../../node_modules/d3-quadtree/src/cover.js","../../../node_modules/d3-quadtree/src/data.js","../../../node_modules/d3-quadtree/src/extent.js","../../../node_modules/d3-quadtree/src/find.js","../../../node_modules/d3-quadtree/src/remove.js","../../../node_modules/d3-quadtree/src/root.js","../../../node_modules/d3-quadtree/src/size.js","../../../node_modules/d3-quadtree/src/visit.js","../../../node_modules/d3-quadtree/src/visitAfter.js","../../../node_modules/d3-dispatch/src/dispatch.js","../../../node_modules/d3-timer/src/timer.js","../../../node_modules/d3-force/src/lcg.js","../../../node_modules/d3-force/src/simulation.js","../../vega-force/build/vega-force.module.js","../../../node_modules/d3-force/src/center.js","../../../node_modules/d3-force/src/manyBody.js","../../../node_modules/d3-force/src/x.js","../../../node_modules/d3-force/src/y.js","../../../node_modules/d3-hierarchy/src/cluster.js","../../../node_modules/d3-hierarchy/src/hierarchy/count.js","../../../node_modules/d3-hierarchy/src/hierarchy/index.js","../../../node_modules/d3-hierarchy/src/pack/enclose.js","../../../node_modules/d3-hierarchy/src/array.js","../../../node_modules/d3-hierarchy/src/pack/siblings.js","../../../node_modules/d3-hierarchy/src/accessors.js","../../../node_modules/d3-hierarchy/src/constant.js","../../../node_modules/d3-hierarchy/src/pack/index.js","../../../node_modules/d3-hierarchy/src/treemap/round.js","../../../node_modules/d3-hierarchy/src/treemap/dice.js","../../../node_modules/d3-hierarchy/src/hierarchy/each.js","../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../../../node_modules/d3-hierarchy/src/hierarchy/find.js","../../../node_modules/d3-hierarchy/src/hierarchy/sum.js","../../../node_modules/d3-hierarchy/src/hierarchy/sort.js","../../../node_modules/d3-hierarchy/src/hierarchy/path.js","../../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../../../node_modules/d3-hierarchy/src/hierarchy/descendants.js","../../../node_modules/d3-hierarchy/src/hierarchy/leaves.js","../../../node_modules/d3-hierarchy/src/hierarchy/links.js","../../../node_modules/d3-hierarchy/src/hierarchy/iterator.js","../../../node_modules/d3-hierarchy/src/stratify.js","../../../node_modules/d3-hierarchy/src/tree.js","../../../node_modules/d3-hierarchy/src/treemap/slice.js","../../../node_modules/d3-hierarchy/src/treemap/squarify.js","../../../node_modules/d3-hierarchy/src/treemap/resquarify.js","../../vega-hierarchy/build/vega-hierarchy.module.js","../../../node_modules/d3-hierarchy/src/partition.js","../../../node_modules/d3-hierarchy/src/treemap/binary.js","../../../node_modules/d3-hierarchy/src/treemap/sliceDice.js","../../../node_modules/d3-hierarchy/src/treemap/index.js","../../vega-label/build/vega-label.module.js","../../vega-regression/build/vega-regression.module.js","../../../node_modules/delaunator/index.js","../../../node_modules/d3-delaunay/src/path.js","../../../node_modules/d3-delaunay/src/polygon.js","../../../node_modules/d3-delaunay/src/voronoi.js","../../../node_modules/d3-delaunay/src/delaunay.js","../../vega-voronoi/build/vega-voronoi.module.js","../../vega-wordcloud/build/vega-wordcloud.module.js","../../vega-crossfilter/build/vega-crossfilter.module.js","../../../node_modules/d3-array/src/permute.js","../../vega-expression/build/vega-expression.module.js","../../vega-selections/build/vega-selection.module.js","../../vega-functions/build/vega-functions.module.js","../../vega-runtime/build/vega-runtime.module.js","../../vega-view/build/vega-view.module.js","../../../node_modules/d3-timer/src/interval.js","../../vega-event-selector/build/vega-event-selector.module.js","../../vega-parser/build/vega-parser.module.js","../index.js"],"sourcesContent":["function accessor (fn, fields, name) {\n fn.fields = fields || [];\n fn.fname = name;\n return fn;\n}\nfunction accessorName(fn) {\n return fn == null ? null : fn.fname;\n}\nfunction accessorFields(fn) {\n return fn == null ? null : fn.fields;\n}\n\nfunction getter (path) {\n return path.length === 1 ? get1(path[0]) : getN(path);\n}\n\nconst get1 = field => function (obj) {\n return obj[field];\n};\n\nconst getN = path => {\n const len = path.length;\n return function (obj) {\n for (let i = 0; i < len; ++i) {\n obj = obj[path[i]];\n }\n\n return obj;\n };\n};\n\nfunction error (message) {\n throw Error(message);\n}\n\nfunction splitAccessPath (p) {\n const path = [],\n n = p.length;\n let q = null,\n b = 0,\n s = '',\n i,\n j,\n c;\n p = p + '';\n\n function push() {\n path.push(s + p.substring(i, j));\n s = '';\n i = j + 1;\n }\n\n for (i = j = 0; j < n; ++j) {\n c = p[j];\n\n if (c === '\\\\') {\n s += p.substring(i, j);\n s += p.substring(++j, ++j);\n i = j;\n } else if (c === q) {\n push();\n q = null;\n b = -1;\n } else if (q) {\n continue;\n } else if (i === b && c === '\"') {\n i = j + 1;\n q = c;\n } else if (i === b && c === \"'\") {\n i = j + 1;\n q = c;\n } else if (c === '.' && !b) {\n if (j > i) {\n push();\n } else {\n i = j + 1;\n }\n } else if (c === '[') {\n if (j > i) push();\n b = i = j + 1;\n } else if (c === ']') {\n if (!b) error('Access path missing open bracket: ' + p);\n if (b > 0) push();\n b = 0;\n i = j + 1;\n }\n }\n\n if (b) error('Access path missing closing bracket: ' + p);\n if (q) error('Access path missing closing quote: ' + p);\n\n if (j > i) {\n j++;\n push();\n }\n\n return path;\n}\n\nfunction field (field, name, opt) {\n const path = splitAccessPath(field);\n field = path.length === 1 ? path[0] : field;\n return accessor((opt && opt.get || getter)(path), [field], name || field);\n}\n\nconst id = field('id');\nconst identity = accessor(_ => _, [], 'identity');\nconst zero = accessor(() => 0, [], 'zero');\nconst one = accessor(() => 1, [], 'one');\nconst truthy = accessor(() => true, [], 'true');\nconst falsy = accessor(() => false, [], 'false');\n\nfunction log$1(method, level, input) {\n const args = [level].concat([].slice.call(input));\n console[method].apply(console, args); // eslint-disable-line no-console\n}\n\nconst None = 0;\nconst Error$1 = 1;\nconst Warn = 2;\nconst Info = 3;\nconst Debug = 4;\nfunction logger (_, method) {\n let level = _ || None;\n return {\n level(_) {\n if (arguments.length) {\n level = +_;\n return this;\n } else {\n return level;\n }\n },\n\n error() {\n if (level >= Error$1) log$1(method || 'error', 'ERROR', arguments);\n return this;\n },\n\n warn() {\n if (level >= Warn) log$1(method || 'warn', 'WARN', arguments);\n return this;\n },\n\n info() {\n if (level >= Info) log$1(method || 'log', 'INFO', arguments);\n return this;\n },\n\n debug() {\n if (level >= Debug) log$1(method || 'log', 'DEBUG', arguments);\n return this;\n }\n\n };\n}\n\nvar isArray = Array.isArray;\n\nfunction isObject (_) {\n return _ === Object(_);\n}\n\nconst isLegalKey = key => key !== '__proto__';\n\nfunction mergeConfig(...configs) {\n return configs.reduce((out, source) => {\n for (const key in source) {\n if (key === 'signals') {\n // for signals, we merge the signals arrays\n // source signals take precedence over\n // existing signals with the same name\n out.signals = mergeNamed(out.signals, source.signals);\n } else {\n // otherwise, merge objects subject to recursion constraints\n // for legend block, recurse for the layout entry only\n // for style block, recurse for all properties\n // otherwise, no recursion: objects overwrite, no merging\n const r = key === 'legend' ? {\n layout: 1\n } : key === 'style' ? true : null;\n writeConfig(out, key, source[key], r);\n }\n }\n\n return out;\n }, {});\n}\nfunction writeConfig(output, key, value, recurse) {\n if (!isLegalKey(key)) return;\n let k, o;\n\n if (isObject(value) && !isArray(value)) {\n o = isObject(output[key]) ? output[key] : output[key] = {};\n\n for (k in value) {\n if (recurse && (recurse === true || recurse[k])) {\n writeConfig(o, k, value[k]);\n } else if (isLegalKey(k)) {\n o[k] = value[k];\n }\n }\n } else {\n output[key] = value;\n }\n}\n\nfunction mergeNamed(a, b) {\n if (a == null) return b;\n const map = {},\n out = [];\n\n function add(_) {\n if (!map[_.name]) {\n map[_.name] = 1;\n out.push(_);\n }\n }\n\n b.forEach(add);\n a.forEach(add);\n return out;\n}\n\nfunction peek (array) {\n return array[array.length - 1];\n}\n\nfunction toNumber (_) {\n return _ == null || _ === '' ? null : +_;\n}\n\nconst exp = sign => x => sign * Math.exp(x);\n\nconst log = sign => x => Math.log(sign * x);\n\nconst symlog = c => x => Math.sign(x) * Math.log1p(Math.abs(x / c));\n\nconst symexp = c => x => Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n\nconst pow = exponent => x => x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n\nfunction pan(domain, delta, lift, ground) {\n const d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n dd = (d1 - d0) * delta;\n return [ground(d0 - dd), ground(d1 - dd)];\n}\n\nfunction panLinear(domain, delta) {\n return pan(domain, delta, toNumber, identity);\n}\nfunction panLog(domain, delta) {\n var sign = Math.sign(domain[0]);\n return pan(domain, delta, log(sign), exp(sign));\n}\nfunction panPow(domain, delta, exponent) {\n return pan(domain, delta, pow(exponent), pow(1 / exponent));\n}\nfunction panSymlog(domain, delta, constant) {\n return pan(domain, delta, symlog(constant), symexp(constant));\n}\n\nfunction zoom(domain, anchor, scale, lift, ground) {\n const d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n return [ground(da + (d0 - da) * scale), ground(da + (d1 - da) * scale)];\n}\n\nfunction zoomLinear(domain, anchor, scale) {\n return zoom(domain, anchor, scale, toNumber, identity);\n}\nfunction zoomLog(domain, anchor, scale) {\n const sign = Math.sign(domain[0]);\n return zoom(domain, anchor, scale, log(sign), exp(sign));\n}\nfunction zoomPow(domain, anchor, scale, exponent) {\n return zoom(domain, anchor, scale, pow(exponent), pow(1 / exponent));\n}\nfunction zoomSymlog(domain, anchor, scale, constant) {\n return zoom(domain, anchor, scale, symlog(constant), symexp(constant));\n}\n\nfunction quarter(date) {\n return 1 + ~~(new Date(date).getMonth() / 3);\n}\nfunction utcquarter(date) {\n return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n\nfunction array (_) {\n return _ != null ? isArray(_) ? _ : [_] : [];\n}\n\n/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nfunction clampRange (range, min, max) {\n let lo = range[0],\n hi = range[1],\n span;\n\n if (hi < lo) {\n span = hi;\n hi = lo;\n lo = span;\n }\n\n span = hi - lo;\n return span >= max - min ? [min, max] : [lo = Math.min(Math.max(lo, min), max - span), lo + span];\n}\n\nfunction isFunction (_) {\n return typeof _ === 'function';\n}\n\nconst DESCENDING = 'descending';\nfunction compare (fields, orders, opt) {\n opt = opt || {};\n orders = array(orders) || [];\n const ord = [],\n get = [],\n fmap = {},\n gen = opt.comparator || comparator;\n array(fields).forEach((f, i) => {\n if (f == null) return;\n ord.push(orders[i] === DESCENDING ? -1 : 1);\n get.push(f = isFunction(f) ? f : field(f, null, opt));\n (accessorFields(f) || []).forEach(_ => fmap[_] = 1);\n });\n return get.length === 0 ? null : accessor(gen(get, ord), Object.keys(fmap));\n}\nconst ascending = (u, v) => (u < v || u == null) && v != null ? -1 : (u > v || v == null) && u != null ? 1 : (v = v instanceof Date ? +v : v, u = u instanceof Date ? +u : u) !== u && v === v ? -1 : v !== v && u === u ? 1 : 0;\n\nconst comparator = (fields, orders) => fields.length === 1 ? compare1(fields[0], orders[0]) : compareN(fields, orders, fields.length);\n\nconst compare1 = (field, order) => function (a, b) {\n return ascending(field(a), field(b)) * order;\n};\n\nconst compareN = (fields, orders, n) => {\n orders.push(0); // pad zero for convenient lookup\n\n return function (a, b) {\n let f,\n c = 0,\n i = -1;\n\n while (c === 0 && ++i < n) {\n f = fields[i];\n c = ascending(f(a), f(b));\n }\n\n return c * orders[i];\n };\n};\n\nfunction constant (_) {\n return isFunction(_) ? _ : () => _;\n}\n\nfunction debounce (delay, handler) {\n let tid;\n return e => {\n if (tid) clearTimeout(tid);\n tid = setTimeout(() => (handler(e), tid = null), delay);\n };\n}\n\nfunction extend (_) {\n for (let x, k, i = 1, len = arguments.length; i < len; ++i) {\n x = arguments[i];\n\n for (k in x) {\n _[k] = x[k];\n }\n }\n\n return _;\n}\n\n/**\n * Return an array with minimum and maximum values, in the\n * form [min, max]. Ignores null, undefined, and NaN values.\n */\nfunction extent (array, f) {\n let i = 0,\n n,\n v,\n min,\n max;\n\n if (array && (n = array.length)) {\n if (f == null) {\n // find first valid value\n for (v = array[i]; i < n && (v == null || v !== v); v = array[++i]);\n\n min = max = v; // visit all other values\n\n for (; i < n; ++i) {\n v = array[i]; // skip null/undefined; NaN will fail all comparisons\n\n if (v != null) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n } else {\n // find first valid value\n for (v = f(array[i]); i < n && (v == null || v !== v); v = f(array[++i]));\n\n min = max = v; // visit all other values\n\n for (; i < n; ++i) {\n v = f(array[i]); // skip null/undefined; NaN will fail all comparisons\n\n if (v != null) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n }\n }\n }\n\n return [min, max];\n}\n\nfunction extentIndex (array, f) {\n const n = array.length;\n let i = -1,\n a,\n b,\n c,\n u,\n v;\n\n if (f == null) {\n while (++i < n) {\n b = array[i];\n\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n\n if (i === n) return [-1, -1];\n u = v = i;\n\n while (++i < n) {\n b = array[i];\n\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n } else {\n while (++i < n) {\n b = f(array[i], i, array);\n\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n\n if (i === n) return [-1, -1];\n u = v = i;\n\n while (++i < n) {\n b = f(array[i], i, array);\n\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n }\n\n return [u, v];\n}\n\nconst hop = Object.prototype.hasOwnProperty;\nfunction has (object, property) {\n return hop.call(object, property);\n}\n\nconst NULL = {};\nfunction fastmap (input) {\n let obj = {},\n test;\n\n function has$1(key) {\n return has(obj, key) && obj[key] !== NULL;\n }\n\n const map = {\n size: 0,\n empty: 0,\n object: obj,\n has: has$1,\n\n get(key) {\n return has$1(key) ? obj[key] : undefined;\n },\n\n set(key, value) {\n if (!has$1(key)) {\n ++map.size;\n if (obj[key] === NULL) --map.empty;\n }\n\n obj[key] = value;\n return this;\n },\n\n delete(key) {\n if (has$1(key)) {\n --map.size;\n ++map.empty;\n obj[key] = NULL;\n }\n\n return this;\n },\n\n clear() {\n map.size = map.empty = 0;\n map.object = obj = {};\n },\n\n test(_) {\n if (arguments.length) {\n test = _;\n return map;\n } else {\n return test;\n }\n },\n\n clean() {\n const next = {};\n let size = 0;\n\n for (const key in obj) {\n const value = obj[key];\n\n if (value !== NULL && (!test || !test(value))) {\n next[key] = value;\n ++size;\n }\n }\n\n map.size = size;\n map.empty = 0;\n map.object = obj = next;\n }\n\n };\n if (input) Object.keys(input).forEach(key => {\n map.set(key, input[key]);\n });\n return map;\n}\n\nfunction flush (range, value, threshold, left, right, center) {\n if (!threshold && threshold !== 0) return center;\n const t = +threshold;\n let a = range[0],\n b = peek(range),\n l; // swap endpoints if range is reversed\n\n if (b < a) {\n l = a;\n a = b;\n b = l;\n } // compare value to endpoints\n\n\n l = Math.abs(value - a);\n const r = Math.abs(b - value); // adjust if value is within threshold distance of endpoint\n\n return l < r && l <= t ? left : r <= t ? right : center;\n}\n\nfunction inherits (child, parent, members) {\n const proto = child.prototype = Object.create(parent.prototype);\n Object.defineProperty(proto, 'constructor', {\n value: child,\n writable: true,\n enumerable: true,\n configurable: true\n });\n return extend(proto, members);\n}\n\n/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nfunction inrange (value, range, left, right) {\n let r0 = range[0],\n r1 = range[range.length - 1],\n t;\n\n if (r0 > r1) {\n t = r0;\n r0 = r1;\n r1 = t;\n }\n\n left = left === undefined || left;\n right = right === undefined || right;\n return (left ? r0 <= value : r0 < value) && (right ? value <= r1 : value < r1);\n}\n\nfunction isBoolean (_) {\n return typeof _ === 'boolean';\n}\n\nfunction isDate (_) {\n return Object.prototype.toString.call(_) === '[object Date]';\n}\n\nfunction isIterable (_) {\n return _ && isFunction(_[Symbol.iterator]);\n}\n\nfunction isNumber (_) {\n return typeof _ === 'number';\n}\n\nfunction isRegExp (_) {\n return Object.prototype.toString.call(_) === '[object RegExp]';\n}\n\nfunction isString (_) {\n return typeof _ === 'string';\n}\n\nfunction key (fields, flat, opt) {\n if (fields) {\n fields = flat ? array(fields).map(f => f.replace(/\\\\(.)/g, '$1')) : array(fields);\n }\n\n const len = fields && fields.length,\n gen = opt && opt.get || getter,\n map = f => gen(flat ? [f] : splitAccessPath(f));\n\n let fn;\n\n if (!len) {\n fn = function () {\n return '';\n };\n } else if (len === 1) {\n const get = map(fields[0]);\n\n fn = function (_) {\n return '' + get(_);\n };\n } else {\n const get = fields.map(map);\n\n fn = function (_) {\n let s = '' + get[0](_),\n i = 0;\n\n while (++i < len) s += '|' + get[i](_);\n\n return s;\n };\n }\n\n return accessor(fn, fields, 'key');\n}\n\nfunction lerp (array, frac) {\n const lo = array[0],\n hi = peek(array),\n f = +frac;\n return !f ? lo : f === 1 ? hi : lo + f * (hi - lo);\n}\n\nconst DEFAULT_MAX_SIZE = 10000; // adapted from https://github.com/dominictarr/hashlru/ (MIT License)\n\nfunction lruCache (maxsize) {\n maxsize = +maxsize || DEFAULT_MAX_SIZE;\n let curr, prev, size;\n\n const clear = () => {\n curr = {};\n prev = {};\n size = 0;\n };\n\n const update = (key, value) => {\n if (++size > maxsize) {\n prev = curr;\n curr = {};\n size = 1;\n }\n\n return curr[key] = value;\n };\n\n clear();\n return {\n clear,\n has: key => has(curr, key) || has(prev, key),\n get: key => has(curr, key) ? curr[key] : has(prev, key) ? update(key, prev[key]) : undefined,\n set: (key, value) => has(curr, key) ? curr[key] = value : update(key, value)\n };\n}\n\nfunction merge (compare, array0, array1, output) {\n const n0 = array0.length,\n n1 = array1.length;\n if (!n1) return array0;\n if (!n0) return array1;\n const merged = output || new array0.constructor(n0 + n1);\n let i0 = 0,\n i1 = 0,\n i = 0;\n\n for (; i0 < n0 && i1 < n1; ++i) {\n merged[i] = compare(array0[i0], array1[i1]) > 0 ? array1[i1++] : array0[i0++];\n }\n\n for (; i0 < n0; ++i0, ++i) {\n merged[i] = array0[i0];\n }\n\n for (; i1 < n1; ++i1, ++i) {\n merged[i] = array1[i1];\n }\n\n return merged;\n}\n\nfunction repeat (str, reps) {\n let s = '';\n\n while (--reps >= 0) s += str;\n\n return s;\n}\n\nfunction pad (str, length, padchar, align) {\n const c = padchar || ' ',\n s = str + '',\n n = length - s.length;\n return n <= 0 ? s : align === 'left' ? repeat(c, n) + s : align === 'center' ? repeat(c, ~~(n / 2)) + s + repeat(c, Math.ceil(n / 2)) : s + repeat(c, n);\n}\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\n\nfunction span (array) {\n return array && peek(array) - array[0] || 0;\n}\n\nfunction $(x) {\n return isArray(x) ? '[' + x.map($) + ']' : isObject(x) || isString(x) ? // Output valid JSON and JS source strings.\n // See http://timelessrepo.com/json-isnt-a-javascript-subset\n JSON.stringify(x).replace('\\u2028', '\\\\u2028').replace('\\u2029', '\\\\u2029') : x;\n}\n\nfunction toBoolean (_) {\n return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n}\n\nconst defaultParser = _ => isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\n\nfunction toDate (_, parser) {\n parser = parser || defaultParser;\n return _ == null || _ === '' ? null : parser(_);\n}\n\nfunction toString (_) {\n return _ == null || _ === '' ? null : _ + '';\n}\n\nfunction toSet (_) {\n const s = {},\n n = _.length;\n\n for (let i = 0; i < n; ++i) s[_[i]] = true;\n\n return s;\n}\n\nfunction truncate (str, length, align, ellipsis) {\n const e = ellipsis != null ? ellipsis : '\\u2026',\n s = str + '',\n n = s.length,\n l = Math.max(0, length - e.length);\n return n <= length ? s : align === 'left' ? e + s.slice(n - l) : align === 'center' ? s.slice(0, Math.ceil(l / 2)) + e + s.slice(n - ~~(l / 2)) : s.slice(0, l) + e;\n}\n\nfunction visitArray (array, filter, visitor) {\n if (array) {\n if (filter) {\n const n = array.length;\n\n for (let i = 0; i < n; ++i) {\n const t = filter(array[i]);\n if (t) visitor(t, i, array);\n }\n } else {\n array.forEach(visitor);\n }\n }\n}\n\nexport { Debug, Error$1 as Error, Info, None, Warn, accessor, accessorFields, accessorName, array, ascending, clampRange, compare, constant, debounce, error, extend, extent, extentIndex, falsy, fastmap, field, flush, has as hasOwnProperty, id, identity, inherits, inrange, isArray, isBoolean, isDate, isFunction, isIterable, isNumber, isObject, isRegExp, isString, key, lerp, logger, lruCache, merge, mergeConfig, one, pad, panLinear, panLog, panPow, panSymlog, peek, quarter, repeat, span, splitAccessPath, $ as stringValue, toBoolean, toDate, toNumber, toSet, toString, truncate, truthy, utcquarter, visitArray, writeConfig, zero, zoomLinear, zoomLog, zoomPow, zoomSymlog };\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","export default function(x) {\n return x;\n}\n","import reverse from \"./reverse.js\";\nimport transform from \"./transform.js\";\n\nexport default function(topology, o) {\n if (typeof o === \"string\") o = topology.objects[o];\n return o.type === \"GeometryCollection\"\n ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n : feature(topology, o);\n}\n\nfunction feature(topology, o) {\n var id = o.id,\n bbox = o.bbox,\n properties = o.properties == null ? {} : o.properties,\n geometry = object(topology, o);\n return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n var transformPoint = transform(topology.transform),\n arcs = topology.arcs;\n\n function arc(i, points) {\n if (points.length) points.pop();\n for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n points.push(transformPoint(a[k], k));\n }\n if (i < 0) reverse(points, n);\n }\n\n function point(p) {\n return transformPoint(p);\n }\n\n function line(arcs) {\n var points = [];\n for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n return points;\n }\n\n function ring(arcs) {\n var points = line(arcs);\n while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n return points;\n }\n\n function polygon(arcs) {\n return arcs.map(ring);\n }\n\n function geometry(o) {\n var type = o.type, coordinates;\n switch (type) {\n case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n case \"Point\": coordinates = point(o.coordinates); break;\n case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n case \"LineString\": coordinates = line(o.arcs); break;\n case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n case \"Polygon\": coordinates = polygon(o.arcs); break;\n case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n default: return null;\n }\n return {type: type, coordinates: coordinates};\n }\n\n return geometry(o);\n}\n","import identity from \"./identity.js\";\n\nexport default function(transform) {\n if (transform == null) return identity;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function(input, i) {\n if (!i) x0 = y0 = 0;\n var j = 2, n = input.length, output = new Array(n);\n output[0] = (x0 += input[0]) * kx + dx;\n output[1] = (y0 += input[1]) * ky + dy;\n while (j < n) output[j] = input[j], ++j;\n return output;\n };\n}\n","export default function(array, n) {\n var t, j = array.length, i = j - n;\n while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n","export default function(topology, arcs) {\n var stitchedArcs = {},\n fragmentByStart = {},\n fragmentByEnd = {},\n fragments = [],\n emptyIndex = -1;\n\n // Stitch empty arcs first, since they may be subsumed by other arcs.\n arcs.forEach(function(i, j) {\n var arc = topology.arcs[i < 0 ? ~i : i], t;\n if (arc.length < 3 && !arc[1][0] && !arc[1][1]) {\n t = arcs[++emptyIndex], arcs[emptyIndex] = i, arcs[j] = t;\n }\n });\n\n arcs.forEach(function(i) {\n var e = ends(i),\n start = e[0],\n end = e[1],\n f, g;\n\n if (f = fragmentByEnd[start]) {\n delete fragmentByEnd[f.end];\n f.push(i);\n f.end = end;\n if (g = fragmentByStart[end]) {\n delete fragmentByStart[g.start];\n var fg = g === f ? f : f.concat(g);\n fragmentByStart[fg.start = f.start] = fragmentByEnd[fg.end = g.end] = fg;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else if (f = fragmentByStart[end]) {\n delete fragmentByStart[f.start];\n f.unshift(i);\n f.start = start;\n if (g = fragmentByEnd[start]) {\n delete fragmentByEnd[g.end];\n var gf = g === f ? f : g.concat(f);\n fragmentByStart[gf.start = g.start] = fragmentByEnd[gf.end = f.end] = gf;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else {\n f = [i];\n fragmentByStart[f.start = start] = fragmentByEnd[f.end = end] = f;\n }\n });\n\n function ends(i) {\n var arc = topology.arcs[i < 0 ? ~i : i], p0 = arc[0], p1;\n if (topology.transform) p1 = [0, 0], arc.forEach(function(dp) { p1[0] += dp[0], p1[1] += dp[1]; });\n else p1 = arc[arc.length - 1];\n return i < 0 ? [p1, p0] : [p0, p1];\n }\n\n function flush(fragmentByEnd, fragmentByStart) {\n for (var k in fragmentByEnd) {\n var f = fragmentByEnd[k];\n delete fragmentByStart[f.start];\n delete f.start;\n delete f.end;\n f.forEach(function(i) { stitchedArcs[i < 0 ? ~i : i] = 1; });\n fragments.push(f);\n }\n }\n\n flush(fragmentByEnd, fragmentByStart);\n flush(fragmentByStart, fragmentByEnd);\n arcs.forEach(function(i) { if (!stitchedArcs[i < 0 ? ~i : i]) fragments.push([i]); });\n\n return fragments;\n}\n","import {object} from \"./feature.js\";\nimport stitch from \"./stitch.js\";\n\nexport default function(topology) {\n return object(topology, meshArcs.apply(this, arguments));\n}\n\nexport function meshArcs(topology, object, filter) {\n var arcs, i, n;\n if (arguments.length > 1) arcs = extractArcs(topology, object, filter);\n else for (i = 0, arcs = new Array(n = topology.arcs.length); i < n; ++i) arcs[i] = i;\n return {type: \"MultiLineString\", arcs: stitch(topology, arcs)};\n}\n\nfunction extractArcs(topology, object, filter) {\n var arcs = [],\n geomsByArc = [],\n geom;\n\n function extract0(i) {\n var j = i < 0 ? ~i : i;\n (geomsByArc[j] || (geomsByArc[j] = [])).push({i: i, g: geom});\n }\n\n function extract1(arcs) {\n arcs.forEach(extract0);\n }\n\n function extract2(arcs) {\n arcs.forEach(extract1);\n }\n\n function extract3(arcs) {\n arcs.forEach(extract2);\n }\n\n function geometry(o) {\n switch (geom = o, o.type) {\n case \"GeometryCollection\": o.geometries.forEach(geometry); break;\n case \"LineString\": extract1(o.arcs); break;\n case \"MultiLineString\": case \"Polygon\": extract2(o.arcs); break;\n case \"MultiPolygon\": extract3(o.arcs); break;\n }\n }\n\n geometry(object);\n\n geomsByArc.forEach(filter == null\n ? function(geoms) { arcs.push(geoms[0].i); }\n : function(geoms) { if (filter(geoms[0].g, geoms[geoms.length - 1].g)) arcs.push(geoms[0].i); });\n\n return arcs;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(f) {\n let delta = f;\n let compare = f;\n\n if (f.length === 1) {\n delta = (d, x) => f(d) - x;\n compare = ascendingComparator(f);\n }\n\n function left(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n }\n\n function right(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n\n function center(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction ascendingComparator(f) {\n return (d, x) => ascending(f(d), x);\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n constructor() {\n this._partials = new Float64Array(32);\n this._n = 0;\n }\n add(x) {\n const p = this._partials;\n let i = 0;\n for (let j = 0; j < this._n && j < 32; j++) {\n const y = p[j],\n hi = x + y,\n lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n if (lo) p[i++] = lo;\n x = hi;\n }\n p[i] = x;\n this._n = i + 1;\n return this;\n }\n valueOf() {\n const p = this._partials;\n let n = this._n, x, y, lo, hi = 0;\n if (n > 0) {\n hi = p[--n];\n while (n > 0) {\n x = hi;\n y = p[--n];\n hi = x + y;\n lo = y - (hi - x);\n if (lo) break;\n }\n if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n y = lo * 2;\n x = hi + y;\n if (y == x - hi) hi = x;\n }\n }\n return hi;\n }\n}\n\nexport function fsum(values, valueof) {\n const adder = new Adder();\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n adder.add(value);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n adder.add(value);\n }\n }\n }\n return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n const adder = new Adder();\n let index = -1;\n return Float64Array.from(values, valueof === undefined\n ? v => adder.add(+v || 0)\n : v => adder.add(+valueof(v, ++index, values) || 0)\n );\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n let r0 = Math.round(start / step), r1 = Math.round(stop / step);\n if (r0 * step < start) ++r0;\n if (r1 * step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n while (++i < n) ticks[i] = (r0 + i) * step;\n } else {\n step = -step;\n let r0 = Math.round(start * step), r1 = Math.round(stop * step);\n if (r0 / step < start) ++r0;\n if (r1 / step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n while (++i < n) ticks[i] = (r0 + i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","import ascending from \"./ascending.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = array.length - 1, compare = ascending) {\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","import max from \"./max.js\";\nimport min from \"./min.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","import quantile from \"./quantile.js\";\n\nexport default function(values, valueof) {\n return quantile(values, 0.5, valueof);\n}\n","function* flatten(arrays) {\n for (const array of arrays) {\n yield* array;\n }\n}\n\nexport default function merge(arrays) {\n return Array.from(flatten(arrays));\n}\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export default function sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = function(date) {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval.js\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import { array, error, hasOwnProperty, extend, peek, toSet, constant, zero, one, span } from 'vega-util';\nimport { timeDay, timeWeek, utcDay, utcWeek, timeYear, timeMonth, timeHour, timeMinute, timeSecond, timeMillisecond, utcYear, utcMonth, utcHour, utcMinute, utcSecond, utcMillisecond } from 'd3-time';\nimport { bisector, tickStep } from 'd3-array';\n\nconst YEAR = 'year';\nconst QUARTER = 'quarter';\nconst MONTH = 'month';\nconst WEEK = 'week';\nconst DATE = 'date';\nconst DAY = 'day';\nconst DAYOFYEAR = 'dayofyear';\nconst HOURS = 'hours';\nconst MINUTES = 'minutes';\nconst SECONDS = 'seconds';\nconst MILLISECONDS = 'milliseconds';\nconst TIME_UNITS = [YEAR, QUARTER, MONTH, WEEK, DATE, DAY, DAYOFYEAR, HOURS, MINUTES, SECONDS, MILLISECONDS];\nconst UNITS = TIME_UNITS.reduce((o, u, i) => (o[u] = 1 + i, o), {});\nfunction timeUnits(units) {\n const u = array(units).slice(),\n m = {}; // check validity\n\n if (!u.length) error('Missing time unit.');\n u.forEach(unit => {\n if (hasOwnProperty(UNITS, unit)) {\n m[unit] = 1;\n } else {\n error(`Invalid time unit: ${unit}.`);\n }\n });\n const numTypes = (m[WEEK] || m[DAY] ? 1 : 0) + (m[QUARTER] || m[MONTH] || m[DATE] ? 1 : 0) + (m[DAYOFYEAR] ? 1 : 0);\n\n if (numTypes > 1) {\n error(`Incompatible time units: ${units}`);\n } // ensure proper sort order\n\n\n u.sort((a, b) => UNITS[a] - UNITS[b]);\n return u;\n}\nconst defaultSpecifiers = {\n [YEAR]: '%Y ',\n [QUARTER]: 'Q%q ',\n [MONTH]: '%b ',\n [DATE]: '%d ',\n [WEEK]: 'W%U ',\n [DAY]: '%a ',\n [DAYOFYEAR]: '%j ',\n [HOURS]: '%H:00',\n [MINUTES]: '00:%M',\n [SECONDS]: ':%S',\n [MILLISECONDS]: '.%L',\n [`${YEAR}-${MONTH}`]: '%Y-%m ',\n [`${YEAR}-${MONTH}-${DATE}`]: '%Y-%m-%d ',\n [`${HOURS}-${MINUTES}`]: '%H:%M'\n};\nfunction timeUnitSpecifier(units, specifiers) {\n const s = extend({}, defaultSpecifiers, specifiers),\n u = timeUnits(units),\n n = u.length;\n let fmt = '',\n start = 0,\n end,\n key;\n\n for (start = 0; start < n;) {\n for (end = u.length; end > start; --end) {\n key = u.slice(start, end).join('-');\n\n if (s[key] != null) {\n fmt += s[key];\n start = end;\n break;\n }\n }\n }\n\n return fmt.trim();\n}\n\nconst t0 = new Date();\n\nfunction localYear(y) {\n t0.setFullYear(y);\n t0.setMonth(0);\n t0.setDate(1);\n t0.setHours(0, 0, 0, 0);\n return t0;\n}\n\nfunction dayofyear(d) {\n return localDayOfYear(new Date(d));\n}\nfunction week(d) {\n return localWeekNum(new Date(d));\n}\nfunction localDayOfYear(d) {\n return timeDay.count(localYear(d.getFullYear()) - 1, d);\n}\nfunction localWeekNum(d) {\n return timeWeek.count(localYear(d.getFullYear()) - 1, d);\n}\nfunction localFirst(y) {\n return localYear(y).getDay();\n}\nfunction localDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(-1, m, d, H, M, S, L);\n date.setFullYear(y);\n return date;\n }\n\n return new Date(y, m, d, H, M, S, L);\n}\nfunction utcdayofyear(d) {\n return utcDayOfYear(new Date(d));\n}\nfunction utcweek(d) {\n return utcWeekNum(new Date(d));\n}\nfunction utcDayOfYear(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcDay.count(y - 1, d);\n}\nfunction utcWeekNum(d) {\n const y = Date.UTC(d.getUTCFullYear(), 0, 1);\n return utcWeek.count(y - 1, d);\n}\nfunction utcFirst(y) {\n t0.setTime(Date.UTC(y, 0, 1));\n return t0.getUTCDay();\n}\nfunction utcDate(y, m, d, H, M, S, L) {\n if (0 <= y && y < 100) {\n const date = new Date(Date.UTC(-1, m, d, H, M, S, L));\n date.setUTCFullYear(d.y);\n return date;\n }\n\n return new Date(Date.UTC(y, m, d, H, M, S, L));\n}\n\nfunction floor(units, step, get, inv, newDate) {\n const s = step || 1,\n b = peek(units),\n _ = (unit, p, key) => {\n key = key || unit;\n return getUnit(get[key], inv[key], unit === b && s, p);\n };\n\n const t = new Date(),\n u = toSet(units),\n y = u[YEAR] ? _(YEAR) : constant(2012),\n m = u[MONTH] ? _(MONTH) : u[QUARTER] ? _(QUARTER) : zero,\n d = u[WEEK] && u[DAY] ? _(DAY, 1, WEEK + DAY) : u[WEEK] ? _(WEEK, 1) : u[DAY] ? _(DAY, 1) : u[DATE] ? _(DATE, 1) : u[DAYOFYEAR] ? _(DAYOFYEAR, 1) : one,\n H = u[HOURS] ? _(HOURS) : zero,\n M = u[MINUTES] ? _(MINUTES) : zero,\n S = u[SECONDS] ? _(SECONDS) : zero,\n L = u[MILLISECONDS] ? _(MILLISECONDS) : zero;\n return function (v) {\n t.setTime(+v);\n const year = y(t);\n return newDate(year, m(t), d(t, year), H(t), M(t), S(t), L(t));\n };\n}\n\nfunction getUnit(f, inv, step, phase) {\n const u = step <= 1 ? f : phase ? (d, y) => phase + step * Math.floor((f(d, y) - phase) / step) : (d, y) => step * Math.floor(f(d, y) / step);\n return inv ? (d, y) => inv(u(d, y), y) : u;\n} // returns the day of the year based on week number, day of week,\n// and the day of the week for the first day of the year\n\n\nfunction weekday(week, day, firstDay) {\n return day + week * 7 - (firstDay + 6) % 7;\n} // -- LOCAL TIME --\n\n\nconst localGet = {\n [YEAR]: d => d.getFullYear(),\n [QUARTER]: d => Math.floor(d.getMonth() / 3),\n [MONTH]: d => d.getMonth(),\n [DATE]: d => d.getDate(),\n [HOURS]: d => d.getHours(),\n [MINUTES]: d => d.getMinutes(),\n [SECONDS]: d => d.getSeconds(),\n [MILLISECONDS]: d => d.getMilliseconds(),\n [DAYOFYEAR]: d => localDayOfYear(d),\n [WEEK]: d => localWeekNum(d),\n [WEEK + DAY]: (d, y) => weekday(localWeekNum(d), d.getDay(), localFirst(y)),\n [DAY]: (d, y) => weekday(1, d.getDay(), localFirst(y))\n};\nconst localInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, localFirst(y))\n};\nfunction timeFloor(units, step) {\n return floor(units, step || 1, localGet, localInv, localDate);\n} // -- UTC TIME --\n\nconst utcGet = {\n [YEAR]: d => d.getUTCFullYear(),\n [QUARTER]: d => Math.floor(d.getUTCMonth() / 3),\n [MONTH]: d => d.getUTCMonth(),\n [DATE]: d => d.getUTCDate(),\n [HOURS]: d => d.getUTCHours(),\n [MINUTES]: d => d.getUTCMinutes(),\n [SECONDS]: d => d.getUTCSeconds(),\n [MILLISECONDS]: d => d.getUTCMilliseconds(),\n [DAYOFYEAR]: d => utcDayOfYear(d),\n [WEEK]: d => utcWeekNum(d),\n [DAY]: (d, y) => weekday(1, d.getUTCDay(), utcFirst(y)),\n [WEEK + DAY]: (d, y) => weekday(utcWeekNum(d), d.getUTCDay(), utcFirst(y))\n};\nconst utcInv = {\n [QUARTER]: q => 3 * q,\n [WEEK]: (w, y) => weekday(w, 0, utcFirst(y))\n};\nfunction utcFloor(units, step) {\n return floor(units, step || 1, utcGet, utcInv, utcDate);\n}\n\nconst timeIntervals = {\n [YEAR]: timeYear,\n [QUARTER]: timeMonth.every(3),\n [MONTH]: timeMonth,\n [WEEK]: timeWeek,\n [DATE]: timeDay,\n [DAY]: timeDay,\n [DAYOFYEAR]: timeDay,\n [HOURS]: timeHour,\n [MINUTES]: timeMinute,\n [SECONDS]: timeSecond,\n [MILLISECONDS]: timeMillisecond\n};\nconst utcIntervals = {\n [YEAR]: utcYear,\n [QUARTER]: utcMonth.every(3),\n [MONTH]: utcMonth,\n [WEEK]: utcWeek,\n [DATE]: utcDay,\n [DAY]: utcDay,\n [DAYOFYEAR]: utcDay,\n [HOURS]: utcHour,\n [MINUTES]: utcMinute,\n [SECONDS]: utcSecond,\n [MILLISECONDS]: utcMillisecond\n};\nfunction timeInterval(unit) {\n return timeIntervals[unit];\n}\nfunction utcInterval(unit) {\n return utcIntervals[unit];\n}\n\nfunction offset(ival, date, step) {\n return ival ? ival.offset(date, step) : undefined;\n}\n\nfunction timeOffset(unit, date, step) {\n return offset(timeInterval(unit), date, step);\n}\nfunction utcOffset(unit, date, step) {\n return offset(utcInterval(unit), date, step);\n}\n\nfunction sequence(ival, start, stop, step) {\n return ival ? ival.range(start, stop, step) : undefined;\n}\n\nfunction timeSequence(unit, start, stop, step) {\n return sequence(timeInterval(unit), start, stop, step);\n}\nfunction utcSequence(unit, start, stop, step) {\n return sequence(utcInterval(unit), start, stop, step);\n}\n\nconst durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\nconst Milli = [YEAR, MONTH, DATE, HOURS, MINUTES, SECONDS, MILLISECONDS],\n Seconds = Milli.slice(0, -1),\n Minutes = Seconds.slice(0, -1),\n Hours = Minutes.slice(0, -1),\n Day = Hours.slice(0, -1),\n Week = [YEAR, WEEK],\n Month = [YEAR, MONTH],\n Year = [YEAR];\nconst intervals = [[Seconds, 1, durationSecond], [Seconds, 5, 5 * durationSecond], [Seconds, 15, 15 * durationSecond], [Seconds, 30, 30 * durationSecond], [Minutes, 1, durationMinute], [Minutes, 5, 5 * durationMinute], [Minutes, 15, 15 * durationMinute], [Minutes, 30, 30 * durationMinute], [Hours, 1, durationHour], [Hours, 3, 3 * durationHour], [Hours, 6, 6 * durationHour], [Hours, 12, 12 * durationHour], [Day, 1, durationDay], [Week, 1, durationWeek], [Month, 1, durationMonth], [Month, 3, 3 * durationMonth], [Year, 1, durationYear]];\nfunction bin (opt) {\n const ext = opt.extent,\n max = opt.maxbins || 40,\n target = Math.abs(span(ext)) / max;\n let i = bisector(i => i[2]).right(intervals, target),\n units,\n step;\n\n if (i === intervals.length) {\n units = Year, step = tickStep(ext[0] / durationYear, ext[1] / durationYear, max);\n } else if (i) {\n i = intervals[target / intervals[i - 1][2] < intervals[i][2] / target ? i - 1 : i];\n units = i[0];\n step = i[1];\n } else {\n units = Milli;\n step = Math.max(tickStep(ext[0], ext[1], max), 1);\n }\n\n return {\n units,\n step\n };\n}\n\nexport { DATE, DAY, DAYOFYEAR, HOURS, MILLISECONDS, MINUTES, MONTH, QUARTER, SECONDS, TIME_UNITS, WEEK, YEAR, dayofyear, bin as timeBin, timeFloor, timeInterval, timeOffset, timeSequence, timeUnitSpecifier, timeUnits, utcFloor, utcInterval, utcOffset, utcSequence, utcdayofyear, utcweek, week };\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import { tickStep } from 'd3-array';\nimport { formatSpecifier, precisionFixed, precisionRound, precisionPrefix, formatLocale, format, formatPrefix } from 'd3-format';\nimport { SECONDS, MINUTES, HOURS, DATE, WEEK, MONTH, QUARTER, YEAR, MILLISECONDS, DAY, timeInterval, utcInterval } from 'vega-time';\nimport { isString, isObject, error, extend } from 'vega-util';\nimport { timeFormat, timeParse, utcFormat, utcParse, timeFormatLocale as timeFormatLocale$1 } from 'd3-time-format';\n\nfunction memoize (method) {\n const cache = {};\n return spec => cache[spec] || (cache[spec] = method(spec));\n}\n\nfunction trimZeroes(numberFormat, decimalChar) {\n return x => {\n const str = numberFormat(x),\n dec = str.indexOf(decimalChar);\n if (dec < 0) return str;\n let idx = rightmostDigit(str, dec);\n const end = idx < str.length ? str.slice(idx) : '';\n\n while (--idx > dec) if (str[idx] !== '0') {\n ++idx;\n break;\n }\n\n return str.slice(0, idx) + end;\n };\n}\n\nfunction rightmostDigit(str, dec) {\n let i = str.lastIndexOf('e'),\n c;\n if (i > 0) return i;\n\n for (i = str.length; --i > dec;) {\n c = str.charCodeAt(i);\n if (c >= 48 && c <= 57) return i + 1; // is digit\n }\n}\n\nfunction numberLocale(locale) {\n const format = memoize(locale.format),\n formatPrefix = locale.formatPrefix;\n return {\n format,\n formatPrefix,\n\n formatFloat(spec) {\n const s = formatSpecifier(spec || ',');\n\n if (s.precision == null) {\n s.precision = 12;\n\n switch (s.type) {\n case '%':\n s.precision -= 2;\n break;\n\n case 'e':\n s.precision -= 1;\n break;\n }\n\n return trimZeroes(format(s), // number format\n format('.1f')(1)[1] // decimal point character\n );\n } else {\n return format(s);\n }\n },\n\n formatSpan(start, stop, count, specifier) {\n specifier = formatSpecifier(specifier == null ? ',f' : specifier);\n const step = tickStep(start, stop, count),\n value = Math.max(Math.abs(start), Math.abs(stop));\n let precision;\n\n if (specifier.precision == null) {\n switch (specifier.type) {\n case 's':\n {\n if (!isNaN(precision = precisionPrefix(step, value))) {\n specifier.precision = precision;\n }\n\n return formatPrefix(specifier, value);\n }\n\n case '':\n case 'e':\n case 'g':\n case 'p':\n case 'r':\n {\n if (!isNaN(precision = precisionRound(step, value))) {\n specifier.precision = precision - (specifier.type === 'e');\n }\n\n break;\n }\n\n case 'f':\n case '%':\n {\n if (!isNaN(precision = precisionFixed(step))) {\n specifier.precision = precision - (specifier.type === '%') * 2;\n }\n\n break;\n }\n }\n }\n\n return format(specifier);\n }\n\n };\n}\n\nlet defaultNumberLocale;\nresetNumberFormatDefaultLocale();\nfunction resetNumberFormatDefaultLocale() {\n return defaultNumberLocale = numberLocale({\n format: format,\n formatPrefix: formatPrefix\n });\n}\nfunction numberFormatLocale(definition) {\n return numberLocale(formatLocale(definition));\n}\nfunction numberFormatDefaultLocale(definition) {\n return arguments.length ? defaultNumberLocale = numberFormatLocale(definition) : defaultNumberLocale;\n}\n\nfunction timeMultiFormat(format, interval, spec) {\n spec = spec || {};\n\n if (!isObject(spec)) {\n error(`Invalid time multi-format specifier: ${spec}`);\n }\n\n const second = interval(SECONDS),\n minute = interval(MINUTES),\n hour = interval(HOURS),\n day = interval(DATE),\n week = interval(WEEK),\n month = interval(MONTH),\n quarter = interval(QUARTER),\n year = interval(YEAR),\n L = format(spec[MILLISECONDS] || '.%L'),\n S = format(spec[SECONDS] || ':%S'),\n M = format(spec[MINUTES] || '%I:%M'),\n H = format(spec[HOURS] || '%I %p'),\n d = format(spec[DATE] || spec[DAY] || '%a %d'),\n w = format(spec[WEEK] || '%b %d'),\n m = format(spec[MONTH] || '%B'),\n q = format(spec[QUARTER] || '%B'),\n y = format(spec[YEAR] || '%Y');\n return date => (second(date) < date ? L : minute(date) < date ? S : hour(date) < date ? M : day(date) < date ? H : month(date) < date ? week(date) < date ? d : w : year(date) < date ? quarter(date) < date ? m : q : y)(date);\n}\n\nfunction timeLocale(locale) {\n const timeFormat = memoize(locale.format),\n utcFormat = memoize(locale.utcFormat);\n return {\n timeFormat: spec => isString(spec) ? timeFormat(spec) : timeMultiFormat(timeFormat, timeInterval, spec),\n utcFormat: spec => isString(spec) ? utcFormat(spec) : timeMultiFormat(utcFormat, utcInterval, spec),\n timeParse: memoize(locale.parse),\n utcParse: memoize(locale.utcParse)\n };\n}\n\nlet defaultTimeLocale;\nresetTimeFormatDefaultLocale();\nfunction resetTimeFormatDefaultLocale() {\n return defaultTimeLocale = timeLocale({\n format: timeFormat,\n parse: timeParse,\n utcFormat: utcFormat,\n utcParse: utcParse\n });\n}\nfunction timeFormatLocale(definition) {\n return timeLocale(timeFormatLocale$1(definition));\n}\nfunction timeFormatDefaultLocale(definition) {\n return arguments.length ? defaultTimeLocale = timeFormatLocale(definition) : defaultTimeLocale;\n}\n\nconst createLocale = (number, time) => extend({}, number, time);\n\nfunction locale(numberSpec, timeSpec) {\n const number = numberSpec ? numberFormatLocale(numberSpec) : numberFormatDefaultLocale();\n const time = timeSpec ? timeFormatLocale(timeSpec) : timeFormatDefaultLocale();\n return createLocale(number, time);\n}\nfunction defaultLocale(numberSpec, timeSpec) {\n const args = arguments.length;\n\n if (args && args !== 2) {\n error('defaultLocale expects either zero or two arguments.');\n }\n\n return args ? createLocale(numberFormatDefaultLocale(numberSpec), timeFormatDefaultLocale(timeSpec)) : createLocale(numberFormatDefaultLocale(), timeFormatDefaultLocale());\n}\nfunction resetDefaultLocale() {\n resetNumberFormatDefaultLocale();\n resetTimeFormatDefaultLocale();\n return defaultLocale();\n}\n\nexport { defaultLocale, locale, numberFormatDefaultLocale, numberFormatLocale, resetDefaultLocale, resetNumberFormatDefaultLocale, resetTimeFormatDefaultLocale, timeFormatDefaultLocale, timeFormatLocale };\n","import { extend, error, isFunction, stringValue, toBoolean, toNumber, toDate, toString, identity, field, isObject, isArray, isIterable, hasOwnProperty } from 'vega-util';\nimport { dsvFormat } from 'd3-dsv';\nimport { feature, mesh } from 'topojson-client';\nimport { timeFormatDefaultLocale } from 'vega-format';\n\n// https://... file://... //...\n\nconst protocol_re = /^([A-Za-z]+:)?\\/\\//; // Matches allowed URIs. From https://github.com/cure53/DOMPurify/blob/master/src/regexp.js with added file://\n\nconst allowed_re = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i; // eslint-disable-line no-useless-escape\n\nconst whitespace_re = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g; // eslint-disable-line no-control-regex\n// Special treatment in node.js for the file: protocol\n\nconst fileProtocol = 'file://';\n/**\n * Factory for a loader constructor that provides methods for requesting\n * files from either the network or disk, and for sanitizing request URIs.\n * @param {function} fetch - The Fetch API for HTTP network requests.\n * If null or undefined, HTTP loading will be disabled.\n * @param {object} fs - The file system interface for file loading.\n * If null or undefined, local file loading will be disabled.\n * @return {function} A loader constructor with the following signature:\n * param {object} [options] - Optional default loading options to use.\n * return {object} - A new loader instance.\n */\n\nfunction loaderFactory (fetch, fs) {\n return options => ({\n options: options || {},\n sanitize: sanitize,\n load: load,\n fileAccess: !!fs,\n file: fileLoader(fs),\n http: httpLoader(fetch)\n });\n}\n/**\n * Load an external resource, typically either from the web or from the local\n * filesystem. This function uses {@link sanitize} to first sanitize the uri,\n * then calls either {@link http} (for web requests) or {@link file} (for\n * filesystem loading).\n * @param {string} uri - The resource indicator (e.g., URL or filename).\n * @param {object} [options] - Optional loading options. These options will\n * override any existing default options.\n * @return {Promise} - A promise that resolves to the loaded content.\n */\n\nasync function load(uri, options) {\n const opt = await this.sanitize(uri, options),\n url = opt.href;\n return opt.localFile ? this.file(url) : this.http(url, options);\n}\n/**\n * URI sanitizer function.\n * @param {string} uri - The uri (url or filename) to check.\n * @param {object} options - An options hash.\n * @return {Promise} - A promise that resolves to an object containing\n * sanitized uri data, or rejects it the input uri is deemed invalid.\n * The properties of the resolved object are assumed to be\n * valid attributes for an HTML 'a' tag. The sanitized uri *must* be\n * provided by the 'href' property of the returned object.\n */\n\n\nasync function sanitize(uri, options) {\n options = extend({}, this.options, options);\n const fileAccess = this.fileAccess,\n result = {\n href: null\n };\n let isFile, loadFile, base;\n const isAllowed = allowed_re.test(uri.replace(whitespace_re, ''));\n\n if (uri == null || typeof uri !== 'string' || !isAllowed) {\n error('Sanitize failure, invalid URI: ' + stringValue(uri));\n }\n\n const hasProtocol = protocol_re.test(uri); // if relative url (no protocol/host), prepend baseURL\n\n if ((base = options.baseURL) && !hasProtocol) {\n // Ensure that there is a slash between the baseURL (e.g. hostname) and url\n if (!uri.startsWith('/') && base[base.length - 1] !== '/') {\n uri = '/' + uri;\n }\n\n uri = base + uri;\n } // should we load from file system?\n\n\n loadFile = (isFile = uri.startsWith(fileProtocol)) || options.mode === 'file' || options.mode !== 'http' && !hasProtocol && fileAccess;\n\n if (isFile) {\n // strip file protocol\n uri = uri.slice(fileProtocol.length);\n } else if (uri.startsWith('//')) {\n if (options.defaultProtocol === 'file') {\n // if is file, strip protocol and set loadFile flag\n uri = uri.slice(2);\n loadFile = true;\n } else {\n // if relative protocol (starts with '//'), prepend default protocol\n uri = (options.defaultProtocol || 'http') + ':' + uri;\n }\n } // set non-enumerable mode flag to indicate local file load\n\n\n Object.defineProperty(result, 'localFile', {\n value: !!loadFile\n }); // set uri\n\n result.href = uri; // set default result target, if specified\n\n if (options.target) {\n result.target = options.target + '';\n } // set default result rel, if specified (#1542)\n\n\n if (options.rel) {\n result.rel = options.rel + '';\n } // provide control over cross-origin image handling (#2238)\n // https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image\n\n\n if (options.context === 'image' && options.crossOrigin) {\n result.crossOrigin = options.crossOrigin + '';\n } // return\n\n\n return result;\n}\n/**\n * File system loader factory.\n * @param {object} fs - The file system interface.\n * @return {function} - A file loader with the following signature:\n * param {string} filename - The file system path to load.\n * param {string} filename - The file system path to load.\n * return {Promise} A promise that resolves to the file contents.\n */\n\n\nfunction fileLoader(fs) {\n return fs ? filename => new Promise((accept, reject) => {\n fs.readFile(filename, (error, data) => {\n if (error) reject(error);else accept(data);\n });\n }) : fileReject;\n}\n/**\n * Default file system loader that simply rejects.\n */\n\n\nasync function fileReject() {\n error('No file system access.');\n}\n/**\n * HTTP request handler factory.\n * @param {function} fetch - The Fetch API method.\n * @return {function} - An http loader with the following signature:\n * param {string} url - The url to request.\n * param {object} options - An options hash.\n * return {Promise} - A promise that resolves to the file contents.\n */\n\n\nfunction httpLoader(fetch) {\n return fetch ? async function (url, options) {\n const opt = extend({}, this.options.http, options),\n type = options && options.response,\n response = await fetch(url, opt);\n return !response.ok ? error(response.status + '' + response.statusText) : isFunction(response[type]) ? response[type]() : response.text();\n } : httpReject;\n}\n/**\n * Default http request handler that simply rejects.\n */\n\n\nasync function httpReject() {\n error('No HTTP fetch method available.');\n}\n\nconst isValid = _ => _ != null && _ === _;\n\nconst isBoolean = _ => _ === 'true' || _ === 'false' || _ === true || _ === false;\n\nconst isDate = _ => !Number.isNaN(Date.parse(_));\n\nconst isNumber = _ => !Number.isNaN(+_) && !(_ instanceof Date);\n\nconst isInteger = _ => isNumber(_) && Number.isInteger(+_);\n\nconst typeParsers = {\n boolean: toBoolean,\n integer: toNumber,\n number: toNumber,\n date: toDate,\n string: toString,\n unknown: identity\n};\nconst typeTests = [isBoolean, isInteger, isNumber, isDate];\nconst typeList = ['boolean', 'integer', 'number', 'date'];\nfunction inferType(values, field) {\n if (!values || !values.length) return 'unknown';\n const n = values.length,\n m = typeTests.length,\n a = typeTests.map((_, i) => i + 1);\n\n for (let i = 0, t = 0, j, value; i < n; ++i) {\n value = field ? values[i][field] : values[i];\n\n for (j = 0; j < m; ++j) {\n if (a[j] && isValid(value) && !typeTests[j](value)) {\n a[j] = 0;\n ++t;\n if (t === typeTests.length) return 'string';\n }\n }\n }\n\n return typeList[a.reduce((u, v) => u === 0 ? v : u, 0) - 1];\n}\nfunction inferTypes(data, fields) {\n return fields.reduce((types, field) => {\n types[field] = inferType(data, field);\n return types;\n }, {});\n}\n\nfunction delimitedFormat(delimiter) {\n const parse = function (data, format) {\n const delim = {\n delimiter: delimiter\n };\n return dsv(data, format ? extend(format, delim) : delim);\n };\n\n parse.responseType = 'text';\n return parse;\n}\nfunction dsv(data, format) {\n if (format.header) {\n data = format.header.map(stringValue).join(format.delimiter) + '\\n' + data;\n }\n\n return dsvFormat(format.delimiter).parse(data + '');\n}\ndsv.responseType = 'text';\n\nfunction isBuffer(_) {\n return typeof Buffer === 'function' && isFunction(Buffer.isBuffer) ? Buffer.isBuffer(_) : false;\n}\n\nfunction json(data, format) {\n const prop = format && format.property ? field(format.property) : identity;\n return isObject(data) && !isBuffer(data) ? parseJSON(prop(data), format) : prop(JSON.parse(data));\n}\njson.responseType = 'json';\n\nfunction parseJSON(data, format) {\n if (!isArray(data) && isIterable(data)) {\n data = [...data];\n }\n\n return format && format.copy ? JSON.parse(JSON.stringify(data)) : data;\n}\n\nconst filters = {\n interior: (a, b) => a !== b,\n exterior: (a, b) => a === b\n};\nfunction topojson(data, format) {\n let method, object, property, filter;\n data = json(data, format);\n\n if (format && format.feature) {\n method = feature;\n property = format.feature;\n } else if (format && format.mesh) {\n method = mesh;\n property = format.mesh;\n filter = filters[format.filter];\n } else {\n error('Missing TopoJSON feature or mesh parameter.');\n }\n\n object = (object = data.objects[property]) ? method(data, object, filter) : error('Invalid TopoJSON object: ' + property);\n return object && object.features || [object];\n}\ntopojson.responseType = 'json';\n\nconst format = {\n dsv: dsv,\n csv: delimitedFormat(','),\n tsv: delimitedFormat('\\t'),\n json: json,\n topojson: topojson\n};\nfunction formats(name, reader) {\n if (arguments.length > 1) {\n format[name] = reader;\n return this;\n } else {\n return hasOwnProperty(format, name) ? format[name] : null;\n }\n}\nfunction responseType(type) {\n const f = formats(type);\n return f && f.responseType || 'text';\n}\n\nfunction read (data, schema, timeParser, utcParser) {\n schema = schema || {};\n const reader = formats(schema.type || 'json');\n if (!reader) error('Unknown data format type: ' + schema.type);\n data = reader(data, schema);\n if (schema.parse) parse(data, schema.parse, timeParser, utcParser);\n if (hasOwnProperty(data, 'columns')) delete data.columns;\n return data;\n}\n\nfunction parse(data, types, timeParser, utcParser) {\n if (!data.length) return; // early exit for empty data\n\n const locale = timeFormatDefaultLocale();\n timeParser = timeParser || locale.timeParse;\n utcParser = utcParser || locale.utcParse;\n let fields = data.columns || Object.keys(data[0]),\n datum,\n field,\n i,\n j,\n n,\n m;\n if (types === 'auto') types = inferTypes(data, fields);\n fields = Object.keys(types);\n const parsers = fields.map(field => {\n const type = types[field];\n let parts, pattern;\n\n if (type && (type.startsWith('date:') || type.startsWith('utc:'))) {\n parts = type.split(/:(.+)?/, 2); // split on first :\n\n pattern = parts[1];\n\n if (pattern[0] === '\\'' && pattern[pattern.length - 1] === '\\'' || pattern[0] === '\"' && pattern[pattern.length - 1] === '\"') {\n pattern = pattern.slice(1, -1);\n }\n\n const parse = parts[0] === 'utc' ? utcParser : timeParser;\n return parse(pattern);\n }\n\n if (!typeParsers[type]) {\n throw Error('Illegal format pattern: ' + field + ':' + type);\n }\n\n return typeParsers[type];\n });\n\n for (i = 0, n = data.length, m = fields.length; i < n; ++i) {\n datum = data[i];\n\n for (j = 0; j < m; ++j) {\n field = fields[j];\n datum[field] = parsers[j](datum[field]);\n }\n }\n}\n\nconst loader = loaderFactory(typeof fetch !== 'undefined' && fetch, // use built-in fetch API\nnull // no file system access\n);\n\nexport { format, formats, inferType, inferTypes, loader, read, responseType, typeParsers };\n","import { identity, array, isFunction, constant, isArray, id, error, truthy, debounce, extend, visitArray, inherits, logger, Error, hasOwnProperty } from 'vega-util';\nimport { read, responseType, loader } from 'vega-loader';\nimport { defaultLocale } from 'vega-format';\n\nfunction UniqueList(idFunc) {\n const $ = idFunc || identity,\n list = [],\n ids = {};\n\n list.add = _ => {\n const id = $(_);\n\n if (!ids[id]) {\n ids[id] = 1;\n list.push(_);\n }\n\n return list;\n };\n\n list.remove = _ => {\n const id = $(_);\n\n if (ids[id]) {\n ids[id] = 0;\n const idx = list.indexOf(_);\n if (idx >= 0) list.splice(idx, 1);\n }\n\n return list;\n };\n\n return list;\n}\n\n/**\n * Invoke and await a potentially async callback function. If\n * an error occurs, trap it and route to Dataflow.error.\n * @param {Dataflow} df - The dataflow instance\n * @param {function} callback - A callback function to invoke\n * and then await. The dataflow will be passed as the single\n * argument to the function.\n */\nasync function asyncCallback (df, callback) {\n try {\n await callback(df);\n } catch (err) {\n df.error(err);\n }\n}\n\nconst TUPLE_ID_KEY = Symbol('vega_id');\nlet TUPLE_ID = 1;\n/**\n * Checks if an input value is a registered tuple.\n * @param {*} t - The value to check.\n * @return {boolean} True if the input is a tuple, false otherwise.\n */\n\nfunction isTuple(t) {\n return !!(t && tupleid(t));\n}\n/**\n * Returns the id of a tuple.\n * @param {object} t - The input tuple.\n * @return {*} the tuple id.\n */\n\nfunction tupleid(t) {\n return t[TUPLE_ID_KEY];\n}\n/**\n * Sets the id of a tuple.\n * @param {object} t - The input tuple.\n * @param {*} id - The id value to set.\n * @return {object} the input tuple.\n */\n\nfunction setid(t, id) {\n t[TUPLE_ID_KEY] = id;\n return t;\n}\n/**\n * Ingest an object or value as a data tuple.\n * If the input value is an object, an id field will be added to it. For\n * efficiency, the input object is modified directly. A copy is not made.\n * If the input value is a literal, it will be wrapped in a new object\n * instance, with the value accessible as the 'data' property.\n * @param datum - The value to ingest.\n * @return {object} The ingested data tuple.\n */\n\n\nfunction ingest$1(datum) {\n const t = datum === Object(datum) ? datum : {\n data: datum\n };\n return tupleid(t) ? t : setid(t, TUPLE_ID++);\n}\n/**\n * Given a source tuple, return a derived copy.\n * @param {object} t - The source tuple.\n * @return {object} The derived tuple.\n */\n\nfunction derive(t) {\n return rederive(t, ingest$1({}));\n}\n/**\n * Rederive a derived tuple by copying values from the source tuple.\n * @param {object} t - The source tuple.\n * @param {object} d - The derived tuple.\n * @return {object} The derived tuple.\n */\n\nfunction rederive(t, d) {\n for (const k in t) d[k] = t[k];\n\n return d;\n}\n/**\n * Replace an existing tuple with a new tuple.\n * @param {object} t - The existing data tuple.\n * @param {object} d - The new tuple that replaces the old.\n * @return {object} The new tuple.\n */\n\nfunction replace(t, d) {\n return setid(d, tupleid(t));\n}\n/**\n * Generate an augmented comparator function that provides stable\n * sorting by tuple id when the given comparator produces ties.\n * @param {function} cmp - The comparator to augment.\n * @param {function} [f] - Optional tuple accessor function.\n * @return {function} An augmented comparator function.\n */\n\nfunction stableCompare(cmp, f) {\n return !cmp ? null : f ? (a, b) => cmp(a, b) || tupleid(f(a)) - tupleid(f(b)) : (a, b) => cmp(a, b) || tupleid(a) - tupleid(b);\n}\n\nfunction isChangeSet(v) {\n return v && v.constructor === changeset;\n}\nfunction changeset() {\n const add = [],\n // insert tuples\n rem = [],\n // remove tuples\n mod = [],\n // modify tuples\n remp = [],\n // remove by predicate\n modp = []; // modify by predicate\n\n let clean = null,\n reflow = false;\n return {\n constructor: changeset,\n\n insert(t) {\n const d = array(t),\n n = d.length;\n\n for (let i = 0; i < n; ++i) add.push(d[i]);\n\n return this;\n },\n\n remove(t) {\n const a = isFunction(t) ? remp : rem,\n d = array(t),\n n = d.length;\n\n for (let i = 0; i < n; ++i) a.push(d[i]);\n\n return this;\n },\n\n modify(t, field, value) {\n const m = {\n field: field,\n value: constant(value)\n };\n\n if (isFunction(t)) {\n m.filter = t;\n modp.push(m);\n } else {\n m.tuple = t;\n mod.push(m);\n }\n\n return this;\n },\n\n encode(t, set) {\n if (isFunction(t)) modp.push({\n filter: t,\n field: set\n });else mod.push({\n tuple: t,\n field: set\n });\n return this;\n },\n\n clean(value) {\n clean = value;\n return this;\n },\n\n reflow() {\n reflow = true;\n return this;\n },\n\n pulse(pulse, tuples) {\n const cur = {},\n out = {};\n let i, n, m, f, t, id; // build lookup table of current tuples\n\n for (i = 0, n = tuples.length; i < n; ++i) {\n cur[tupleid(tuples[i])] = 1;\n } // process individual tuples to remove\n\n\n for (i = 0, n = rem.length; i < n; ++i) {\n t = rem[i];\n cur[tupleid(t)] = -1;\n } // process predicate-based removals\n\n\n for (i = 0, n = remp.length; i < n; ++i) {\n f = remp[i];\n tuples.forEach(t => {\n if (f(t)) cur[tupleid(t)] = -1;\n });\n } // process all add tuples\n\n\n for (i = 0, n = add.length; i < n; ++i) {\n t = add[i];\n id = tupleid(t);\n\n if (cur[id]) {\n // tuple already resides in dataset\n // if flagged for both add and remove, cancel\n cur[id] = 1;\n } else {\n // tuple does not reside in dataset, add\n pulse.add.push(ingest$1(add[i]));\n }\n } // populate pulse rem list\n\n\n for (i = 0, n = tuples.length; i < n; ++i) {\n t = tuples[i];\n if (cur[tupleid(t)] < 0) pulse.rem.push(t);\n } // modify helper method\n\n\n function modify(t, f, v) {\n if (v) {\n t[f] = v(t);\n } else {\n pulse.encode = f;\n }\n\n if (!reflow) out[tupleid(t)] = t;\n } // process individual tuples to modify\n\n\n for (i = 0, n = mod.length; i < n; ++i) {\n m = mod[i];\n t = m.tuple;\n f = m.field;\n id = cur[tupleid(t)];\n\n if (id > 0) {\n modify(t, f, m.value);\n pulse.modifies(f);\n }\n } // process predicate-based modifications\n\n\n for (i = 0, n = modp.length; i < n; ++i) {\n m = modp[i];\n f = m.filter;\n tuples.forEach(t => {\n if (f(t) && cur[tupleid(t)] > 0) {\n modify(t, m.field, m.value);\n }\n });\n pulse.modifies(m.field);\n } // upon reflow request, populate mod with all non-removed tuples\n // otherwise, populate mod with modified tuples only\n\n\n if (reflow) {\n pulse.mod = rem.length || remp.length ? tuples.filter(t => cur[tupleid(t)] > 0) : tuples.slice();\n } else {\n for (id in out) pulse.mod.push(out[id]);\n } // set pulse garbage collection request\n\n\n if (clean || clean == null && (rem.length || remp.length)) {\n pulse.clean(true);\n }\n\n return pulse;\n }\n\n };\n}\n\nconst CACHE = '_:mod:_';\n/**\n * Hash that tracks modifications to assigned values.\n * Callers *must* use the set method to update values.\n */\n\nfunction Parameters() {\n Object.defineProperty(this, CACHE, {\n writable: true,\n value: {}\n });\n}\nParameters.prototype = {\n /**\n * Set a parameter value. If the parameter value changes, the parameter\n * will be recorded as modified.\n * @param {string} name - The parameter name.\n * @param {number} index - The index into an array-value parameter. Ignored if\n * the argument is undefined, null or less than zero.\n * @param {*} value - The parameter value to set.\n * @param {boolean} [force=false] - If true, records the parameter as modified\n * even if the value is unchanged.\n * @return {Parameters} - This parameter object.\n */\n set(name, index, value, force) {\n const o = this,\n v = o[name],\n mod = o[CACHE];\n\n if (index != null && index >= 0) {\n if (v[index] !== value || force) {\n v[index] = value;\n mod[index + ':' + name] = -1;\n mod[name] = -1;\n }\n } else if (v !== value || force) {\n o[name] = value;\n mod[name] = isArray(value) ? 1 + value.length : -1;\n }\n\n return o;\n },\n\n /**\n * Tests if one or more parameters has been modified. If invoked with no\n * arguments, returns true if any parameter value has changed. If the first\n * argument is array, returns trues if any parameter name in the array has\n * changed. Otherwise, tests if the given name and optional array index has\n * changed.\n * @param {string} name - The parameter name to test.\n * @param {number} [index=undefined] - The parameter array index to test.\n * @return {boolean} - Returns true if a queried parameter was modified.\n */\n modified(name, index) {\n const mod = this[CACHE];\n\n if (!arguments.length) {\n for (const k in mod) {\n if (mod[k]) return true;\n }\n\n return false;\n } else if (isArray(name)) {\n for (let k = 0; k < name.length; ++k) {\n if (mod[name[k]]) return true;\n }\n\n return false;\n }\n\n return index != null && index >= 0 ? index + 1 < mod[name] || !!mod[index + ':' + name] : !!mod[name];\n },\n\n /**\n * Clears the modification records. After calling this method,\n * all parameters are considered unmodified.\n */\n clear() {\n this[CACHE] = {};\n return this;\n }\n\n};\n\nlet OP_ID = 0;\nconst PULSE = 'pulse',\n NO_PARAMS = new Parameters(); // Boolean Flags\n\nconst SKIP$1 = 1,\n MODIFIED = 2;\n/**\n * An Operator is a processing node in a dataflow graph.\n * Each operator stores a value and an optional value update function.\n * Operators can accept a hash of named parameters. Parameter values can\n * either be direct (JavaScript literals, arrays, objects) or indirect\n * (other operators whose values will be pulled dynamically). Operators\n * included as parameters will have this operator added as a dependency.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {function(object, Pulse)} [update] - An update function. Upon\n * evaluation of this operator, the update function will be invoked and the\n * return value will be used as the new value of this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @see parameters\n */\n\nfunction Operator(init, update, params, react) {\n this.id = ++OP_ID;\n this.value = init;\n this.stamp = -1;\n this.rank = -1;\n this.qrank = -1;\n this.flags = 0;\n\n if (update) {\n this._update = update;\n }\n\n if (params) this.parameters(params, react);\n}\n\nfunction flag(bit) {\n return function (state) {\n const f = this.flags;\n if (arguments.length === 0) return !!(f & bit);\n this.flags = state ? f | bit : f & ~bit;\n return this;\n };\n}\n\nOperator.prototype = {\n /**\n * Returns a list of target operators dependent on this operator.\n * If this list does not exist, it is created and then returned.\n * @return {UniqueList}\n */\n targets() {\n return this._targets || (this._targets = UniqueList(id));\n },\n\n /**\n * Sets the value of this operator.\n * @param {*} value - the value to set.\n * @return {Number} Returns 1 if the operator value has changed\n * according to strict equality, returns 0 otherwise.\n */\n set(value) {\n if (this.value !== value) {\n this.value = value;\n return 1;\n } else {\n return 0;\n }\n },\n\n /**\n * Indicates that operator evaluation should be skipped on the next pulse.\n * This operator will still propagate incoming pulses, but its update function\n * will not be invoked. The skip flag is reset after every pulse, so calling\n * this method will affect processing of the next pulse only.\n */\n skip: flag(SKIP$1),\n\n /**\n * Indicates that this operator's value has been modified on its most recent\n * pulse. Normally modification is checked via strict equality; however, in\n * some cases it is more efficient to update the internal state of an object.\n * In those cases, the modified flag can be used to trigger propagation. Once\n * set, the modification flag persists across pulses until unset. The flag can\n * be used with the last timestamp to test if a modification is recent.\n */\n modified: flag(MODIFIED),\n\n /**\n * Sets the parameters for this operator. The parameter values are analyzed for\n * operator instances. If found, this operator will be added as a dependency\n * of the parameterizing operator. Operator values are dynamically marshalled\n * from each operator parameter prior to evaluation. If a parameter value is\n * an array, the array will also be searched for Operator instances. However,\n * the search does not recurse into sub-arrays or object properties.\n * @param {object} params - A hash of operator parameters.\n * @param {boolean} [react=true] - A flag indicating if this operator should\n * automatically update (react) when parameter values change. In other words,\n * this flag determines if the operator registers itself as a listener on\n * any upstream operators included in the parameters.\n * @param {boolean} [initonly=false] - A flag indicating if this operator\n * should calculate an update only upon its initiatal evaluation, then\n * deregister dependencies and suppress all future update invocations.\n * @return {Operator[]} - An array of upstream dependencies.\n */\n parameters(params, react, initonly) {\n react = react !== false;\n const argval = this._argval = this._argval || new Parameters(),\n argops = this._argops = this._argops || [],\n deps = [];\n let name, value, n, i;\n\n const add = (name, index, value) => {\n if (value instanceof Operator) {\n if (value !== this) {\n if (react) value.targets().add(this);\n deps.push(value);\n }\n\n argops.push({\n op: value,\n name: name,\n index: index\n });\n } else {\n argval.set(name, index, value);\n }\n };\n\n for (name in params) {\n value = params[name];\n\n if (name === PULSE) {\n array(value).forEach(op => {\n if (!(op instanceof Operator)) {\n error('Pulse parameters must be operator instances.');\n } else if (op !== this) {\n op.targets().add(this);\n deps.push(op);\n }\n });\n this.source = value;\n } else if (isArray(value)) {\n argval.set(name, -1, Array(n = value.length));\n\n for (i = 0; i < n; ++i) add(name, i, value[i]);\n } else {\n add(name, -1, value);\n }\n }\n\n this.marshall().clear(); // initialize values\n\n if (initonly) argops.initonly = true;\n return deps;\n },\n\n /**\n * Internal method for marshalling parameter values.\n * Visits each operator dependency to pull the latest value.\n * @return {Parameters} A Parameters object to pass to the update function.\n */\n marshall(stamp) {\n const argval = this._argval || NO_PARAMS,\n argops = this._argops;\n let item, i, op, mod;\n\n if (argops) {\n const n = argops.length;\n\n for (i = 0; i < n; ++i) {\n item = argops[i];\n op = item.op;\n mod = op.modified() && op.stamp === stamp;\n argval.set(item.name, item.index, op.value, mod);\n }\n\n if (argops.initonly) {\n for (i = 0; i < n; ++i) {\n item = argops[i];\n item.op.targets().remove(this);\n }\n\n this._argops = null;\n this._update = null;\n }\n }\n\n return argval;\n },\n\n /**\n * Detach this operator from the dataflow.\n * Unregisters listeners on upstream dependencies.\n */\n detach() {\n const argops = this._argops;\n let i, n, item, op;\n\n if (argops) {\n for (i = 0, n = argops.length; i < n; ++i) {\n item = argops[i];\n op = item.op;\n\n if (op._targets) {\n op._targets.remove(this);\n }\n }\n } // remove references to the source and pulse object,\n // if present, to prevent memory leaks of old data.\n\n\n this.pulse = null;\n this.source = null;\n },\n\n /**\n * Delegate method to perform operator processing.\n * Subclasses can override this method to perform custom processing.\n * By default, it marshalls parameters and calls the update function\n * if that function is defined. If the update function does not\n * change the operator value then StopPropagation is returned.\n * If no update function is defined, this method does nothing.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return The output pulse or StopPropagation. A falsy return value\n * (including undefined) will let the input pulse pass through.\n */\n evaluate(pulse) {\n const update = this._update;\n\n if (update) {\n const params = this.marshall(pulse.stamp),\n v = update.call(this, params, pulse);\n params.clear();\n\n if (v !== this.value) {\n this.value = v;\n } else if (!this.modified()) {\n return pulse.StopPropagation;\n }\n }\n },\n\n /**\n * Run this operator for the current pulse. If this operator has already\n * been run at (or after) the pulse timestamp, returns StopPropagation.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\n run(pulse) {\n if (pulse.stamp < this.stamp) return pulse.StopPropagation;\n let rv;\n\n if (this.skip()) {\n this.skip(false);\n rv = 0;\n } else {\n rv = this.evaluate(pulse);\n }\n\n return this.pulse = rv || pulse;\n }\n\n};\n\n/**\n * Add an operator to the dataflow graph. This function accepts a\n * variety of input argument types. The basic signature supports an\n * initial value, update function and parameters. If the first parameter\n * is an Operator instance, it will be added directly. If it is a\n * constructor for an Operator subclass, a new instance will be instantiated.\n * Otherwise, if the first parameter is a function instance, it will be used\n * as the update function and a null initial value is assumed.\n * @param {*} init - One of: the operator to add, the initial value of\n * the operator, an operator class to instantiate, or an update function.\n * @param {function} [update] - The operator update function.\n * @param {object} [params] - The operator parameters.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @return {Operator} - The added operator.\n */\n\nfunction add (init, update, params, react) {\n let shift = 1,\n op;\n\n if (init instanceof Operator) {\n op = init;\n } else if (init && init.prototype instanceof Operator) {\n op = new init();\n } else if (isFunction(init)) {\n op = new Operator(null, init);\n } else {\n shift = 0;\n op = new Operator(init, update);\n }\n\n this.rank(op);\n\n if (shift) {\n react = params;\n params = update;\n }\n\n if (params) this.connect(op, op.parameters(params, react));\n this.touch(op);\n return op;\n}\n\n/**\n * Connect a target operator as a dependent of source operators.\n * If necessary, this method will rerank the target operator and its\n * dependents to ensure propagation proceeds in a topologically sorted order.\n * @param {Operator} target - The target operator.\n * @param {Array} - The source operators that should propagate\n * to the target operator.\n */\nfunction connect (target, sources) {\n const targetRank = target.rank,\n n = sources.length;\n\n for (let i = 0; i < n; ++i) {\n if (targetRank < sources[i].rank) {\n this.rerank(target);\n return;\n }\n }\n}\n\nlet STREAM_ID = 0;\n/**\n * Models an event stream.\n * @constructor\n * @param {function(Object, number): boolean} [filter] - Filter predicate.\n * Events pass through when truthy, events are suppressed when falsy.\n * @param {function(Object): *} [apply] - Applied to input events to produce\n * new event values.\n * @param {function(Object)} [receive] - Event callback function to invoke\n * upon receipt of a new event. Use to override standard event processing.\n */\n\nfunction EventStream(filter, apply, receive) {\n this.id = ++STREAM_ID;\n this.value = null;\n if (receive) this.receive = receive;\n if (filter) this._filter = filter;\n if (apply) this._apply = apply;\n}\n/**\n * Creates a new event stream instance with the provided\n * (optional) filter, apply and receive functions.\n * @param {function(Object, number): boolean} [filter] - Filter predicate.\n * Events pass through when truthy, events are suppressed when falsy.\n * @param {function(Object): *} [apply] - Applied to input events to produce\n * new event values.\n * @see EventStream\n */\n\nfunction stream(filter, apply, receive) {\n return new EventStream(filter, apply, receive);\n}\nEventStream.prototype = {\n _filter: truthy,\n _apply: identity,\n\n targets() {\n return this._targets || (this._targets = UniqueList(id));\n },\n\n consume(_) {\n if (!arguments.length) return !!this._consume;\n this._consume = !!_;\n return this;\n },\n\n receive(evt) {\n if (this._filter(evt)) {\n const val = this.value = this._apply(evt),\n trg = this._targets,\n n = trg ? trg.length : 0;\n\n for (let i = 0; i < n; ++i) trg[i].receive(val);\n\n if (this._consume) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n }\n },\n\n filter(filter) {\n const s = stream(filter);\n this.targets().add(s);\n return s;\n },\n\n apply(apply) {\n const s = stream(null, apply);\n this.targets().add(s);\n return s;\n },\n\n merge() {\n const s = stream();\n this.targets().add(s);\n\n for (let i = 0, n = arguments.length; i < n; ++i) {\n arguments[i].targets().add(s);\n }\n\n return s;\n },\n\n throttle(pause) {\n let t = -1;\n return this.filter(() => {\n const now = Date.now();\n\n if (now - t > pause) {\n t = now;\n return 1;\n } else {\n return 0;\n }\n });\n },\n\n debounce(delay) {\n const s = stream();\n this.targets().add(stream(null, null, debounce(delay, e => {\n const df = e.dataflow;\n s.receive(e);\n if (df && df.run) df.run();\n })));\n return s;\n },\n\n between(a, b) {\n let active = false;\n a.targets().add(stream(null, null, () => active = true));\n b.targets().add(stream(null, null, () => active = false));\n return this.filter(() => active);\n },\n\n detach() {\n // ensures compatibility with operators (#2753)\n // remove references to other streams and filter functions that may\n // be bound to subcontexts that need to be garbage collected.\n this._filter = truthy;\n this._targets = null;\n }\n\n};\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor. The input must\n * support the addEventListener method.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @param {function(object): *} [apply] - Event application function.\n * If provided, this function will be invoked and the result will be\n * used as the downstream event value.\n * @return {EventStream}\n */\n\nfunction events (source, type, filter, apply) {\n const df = this,\n s = stream(filter, apply),\n send = function (e) {\n e.dataflow = df;\n\n try {\n s.receive(e);\n } catch (error) {\n df.error(error);\n } finally {\n df.run();\n }\n };\n\n let sources;\n\n if (typeof source === 'string' && typeof document !== 'undefined') {\n sources = document.querySelectorAll(source);\n } else {\n sources = array(source);\n }\n\n const n = sources.length;\n\n for (let i = 0; i < n; ++i) {\n sources[i].addEventListener(type, send);\n }\n\n return s;\n}\n\nfunction parse(data, format) {\n const locale = this.locale();\n return read(data, format, locale.timeParse, locale.utcParse);\n}\n/**\n * Ingests new data into the dataflow. First parses the data using the\n * vega-loader read method, then pulses a changeset to the target operator.\n * @param {Operator} target - The Operator to target with ingested data,\n * typically a Collect transform instance.\n * @param {*} data - The input data, prior to parsing. For JSON this may\n * be a string or an object. For CSV, TSV, etc should be a string.\n * @param {object} format - The data format description for parsing\n * loaded data. This object is passed to the vega-loader read method.\n * @returns {Dataflow}\n */\n\nfunction ingest(target, data, format) {\n data = this.parse(data, format);\n return this.pulse(target, this.changeset().insert(data));\n}\n/**\n * Request data from an external source, parse it, and return a Promise.\n * @param {string} url - The URL from which to load the data. This string\n * is passed to the vega-loader load method.\n * @param {object} [format] - The data format description for parsing\n * loaded data. This object is passed to the vega-loader read method.\n * @return {Promise} A Promise that resolves upon completion of the request.\n * The resolved object contains the following properties:\n * - data: an array of parsed data (or null upon error)\n * - status: a code for success (0), load fail (-1), or parse fail (-2)\n */\n\nasync function request(url, format) {\n const df = this;\n let status = 0,\n data;\n\n try {\n data = await df.loader().load(url, {\n context: 'dataflow',\n response: responseType(format && format.type)\n });\n\n try {\n data = df.parse(data, format);\n } catch (err) {\n status = -2;\n df.warn('Data ingestion failed', url, err);\n }\n } catch (err) {\n status = -1;\n df.warn('Loading failed', url, err);\n }\n\n return {\n data,\n status\n };\n}\nasync function preload(target, url, format) {\n const df = this,\n pending = df._pending || loadPending(df);\n pending.requests += 1;\n const res = await df.request(url, format);\n df.pulse(target, df.changeset().remove(truthy).insert(res.data || []));\n pending.done();\n return res;\n}\n\nfunction loadPending(df) {\n let accept;\n const pending = new Promise(a => accept = a);\n pending.requests = 0;\n\n pending.done = () => {\n if (--pending.requests === 0) {\n df._pending = null;\n accept(df);\n }\n };\n\n return df._pending = pending;\n}\n\nconst SKIP = {\n skip: true\n};\n/**\n * Perform operator updates in response to events. Applies an\n * update function to compute a new operator value. If the update function\n * returns a {@link ChangeSet}, the operator will be pulsed with those tuple\n * changes. Otherwise, the operator value will be updated to the return value.\n * @param {EventStream|Operator} source - The event source to react to.\n * This argument can be either an EventStream or an Operator.\n * @param {Operator|function(object):Operator} target - The operator to update.\n * This argument can either be an Operator instance or (if the source\n * argument is an EventStream), a function that accepts an event object as\n * input and returns an Operator to target.\n * @param {function(Parameters,Event): *} [update] - Optional update function\n * to compute the new operator value, or a literal value to set. Update\n * functions expect to receive a parameter object and event as arguments.\n * This function can either return a new operator value or (if the source\n * argument is an EventStream) a {@link ChangeSet} instance to pulse\n * the target operator with tuple changes.\n * @param {object} [params] - The update function parameters.\n * @param {object} [options] - Additional options hash. If not overridden,\n * updated operators will be skipped by default.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @return {Dataflow}\n */\n\nfunction on (source, target, update, params, options) {\n const fn = source instanceof Operator ? onOperator : onStream;\n fn(this, source, target, update, params, options);\n return this;\n}\n\nfunction onStream(df, stream, target, update, params, options) {\n const opt = extend({}, options, SKIP);\n let func, op;\n if (!isFunction(target)) target = constant(target);\n\n if (update === undefined) {\n func = e => df.touch(target(e));\n } else if (isFunction(update)) {\n op = new Operator(null, update, params, false);\n\n func = e => {\n op.evaluate(e);\n const t = target(e),\n v = op.value;\n isChangeSet(v) ? df.pulse(t, v, options) : df.update(t, v, opt);\n };\n } else {\n func = e => df.update(target(e), update, opt);\n }\n\n stream.apply(func);\n}\n\nfunction onOperator(df, source, target, update, params, options) {\n if (update === undefined) {\n source.targets().add(target);\n } else {\n const opt = options || {},\n op = new Operator(null, updater(target, update), params, false);\n op.modified(opt.force);\n op.rank = source.rank; // immediately follow source\n\n source.targets().add(op); // add dependency\n\n if (target) {\n op.skip(true); // skip first invocation\n\n op.value = target.value; // initialize value\n\n op.targets().add(target); // chain dependencies\n\n df.connect(target, [op]); // rerank as needed, #1672\n }\n }\n}\n\nfunction updater(target, update) {\n update = isFunction(update) ? update : constant(update);\n return target ? function (_, pulse) {\n const value = update(_, pulse);\n\n if (!target.skip()) {\n target.skip(value !== this.value).value = value;\n }\n\n return value;\n } : update;\n}\n\n/**\n * Assigns a rank to an operator. Ranks are assigned in increasing order\n * by incrementing an internal rank counter.\n * @param {Operator} op - The operator to assign a rank.\n */\n\nfunction rank(op) {\n op.rank = ++this._rank;\n}\n/**\n * Re-ranks an operator and all downstream target dependencies. This\n * is necessary when upstream dependencies of higher rank are added to\n * a target operator.\n * @param {Operator} op - The operator to re-rank.\n */\n\nfunction rerank(op) {\n const queue = [op];\n let cur, list, i;\n\n while (queue.length) {\n this.rank(cur = queue.pop());\n\n if (list = cur._targets) {\n for (i = list.length; --i >= 0;) {\n queue.push(cur = list[i]);\n if (cur === op) error('Cycle detected in dataflow graph.');\n }\n }\n }\n}\n\n/**\n * Sentinel value indicating pulse propagation should stop.\n */\n\nconst StopPropagation = {}; // Pulse visit type flags\n\nconst ADD = 1 << 0,\n REM = 1 << 1,\n MOD = 1 << 2,\n ADD_REM = ADD | REM,\n ADD_MOD = ADD | MOD,\n ALL = ADD | REM | MOD,\n REFLOW = 1 << 3,\n SOURCE = 1 << 4,\n NO_SOURCE = 1 << 5,\n NO_FIELDS = 1 << 6;\n/**\n * A Pulse enables inter-operator communication during a run of the\n * dataflow graph. In addition to the current timestamp, a pulse may also\n * contain a change-set of added, removed or modified data tuples, as well as\n * a pointer to a full backing data source. Tuple change sets may not\n * be fully materialized; for example, to prevent needless array creation\n * a change set may include larger arrays and corresponding filter functions.\n * The pulse provides a {@link visit} method to enable proper and efficient\n * iteration over requested data tuples.\n *\n * In addition, each pulse can track modification flags for data tuple fields.\n * Responsible transform operators should call the {@link modifies} method to\n * indicate changes to data fields. The {@link modified} method enables\n * querying of this modification state.\n *\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The current propagation timestamp.\n * @param {string} [encode] - An optional encoding set name, which is then\n * accessible as Pulse.encode. Operators can respond to (or ignore) this\n * setting as appropriate. This parameter can be used in conjunction with\n * the Encode transform in the vega-encode module.\n */\n\nfunction Pulse(dataflow, stamp, encode) {\n this.dataflow = dataflow;\n this.stamp = stamp == null ? -1 : stamp;\n this.add = [];\n this.rem = [];\n this.mod = [];\n this.fields = null;\n this.encode = encode || null;\n}\n\nfunction materialize(data, filter) {\n const out = [];\n visitArray(data, filter, _ => out.push(_));\n return out;\n}\n\nfunction filter(pulse, flags) {\n const map = {};\n pulse.visit(flags, t => {\n map[tupleid(t)] = 1;\n });\n return t => map[tupleid(t)] ? null : t;\n}\n\nfunction addFilter(a, b) {\n return a ? (t, i) => a(t, i) && b(t, i) : b;\n}\n\nPulse.prototype = {\n /**\n * Sentinel value indicating pulse propagation should stop.\n */\n StopPropagation,\n\n /**\n * Boolean flag indicating ADD (added) tuples.\n */\n ADD,\n\n /**\n * Boolean flag indicating REM (removed) tuples.\n */\n REM,\n\n /**\n * Boolean flag indicating MOD (modified) tuples.\n */\n MOD,\n\n /**\n * Boolean flag indicating ADD (added) and REM (removed) tuples.\n */\n ADD_REM,\n\n /**\n * Boolean flag indicating ADD (added) and MOD (modified) tuples.\n */\n ADD_MOD,\n\n /**\n * Boolean flag indicating ADD, REM and MOD tuples.\n */\n ALL,\n\n /**\n * Boolean flag indicating all tuples in a data source\n * except for the ADD, REM and MOD tuples.\n */\n REFLOW,\n\n /**\n * Boolean flag indicating a 'pass-through' to a\n * backing data source, ignoring ADD, REM and MOD tuples.\n */\n SOURCE,\n\n /**\n * Boolean flag indicating that source data should be\n * suppressed when creating a forked pulse.\n */\n NO_SOURCE,\n\n /**\n * Boolean flag indicating that field modifications should be\n * suppressed when creating a forked pulse.\n */\n NO_FIELDS,\n\n /**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created.\n * @return {Pulse} - The forked pulse instance.\n * @see init\n */\n fork(flags) {\n return new Pulse(this.dataflow).init(this, flags);\n },\n\n /**\n * Creates a copy of this pulse with new materialized array\n * instances for the ADD, REM, MOD, and SOURCE arrays.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse} - The cloned pulse instance.\n * @see init\n */\n clone() {\n const p = this.fork(ALL);\n p.add = p.add.slice();\n p.rem = p.rem.slice();\n p.mod = p.mod.slice();\n if (p.source) p.source = p.source.slice();\n return p.materialize(ALL | SOURCE);\n },\n\n /**\n * Returns a pulse that adds all tuples from a backing source. This is\n * useful for cases where operators are added to a dataflow after an\n * upstream data pipeline has already been processed, ensuring that\n * new operators can observe all tuples within a stream.\n * @return {Pulse} - A pulse instance with all source tuples included\n * in the add array. If the current pulse already has all source\n * tuples in its add array, it is returned directly. If the current\n * pulse does not have a backing source, it is returned directly.\n */\n addAll() {\n let p = this;\n const reuse = !p.source || p.add === p.rem // special case for indexed set (e.g., crossfilter)\n || !p.rem.length && p.source.length === p.add.length;\n\n if (reuse) {\n return p;\n } else {\n p = new Pulse(this.dataflow).init(this);\n p.add = p.source;\n p.rem = []; // new operators can ignore rem #2769\n\n return p;\n }\n },\n\n /**\n * Initialize this pulse based on the values of another pulse. This method\n * is used internally by {@link fork} to initialize a new forked tuple.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {Pulse} src - The source pulse to copy from.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created. By default, source data arrays are copied\n * to the new pulse. Use the NO_SOURCE flag to enforce a null source.\n * @return {Pulse} - Returns this Pulse instance.\n */\n init(src, flags) {\n const p = this;\n p.stamp = src.stamp;\n p.encode = src.encode;\n\n if (src.fields && !(flags & NO_FIELDS)) {\n p.fields = src.fields;\n }\n\n if (flags & ADD) {\n p.addF = src.addF;\n p.add = src.add;\n } else {\n p.addF = null;\n p.add = [];\n }\n\n if (flags & REM) {\n p.remF = src.remF;\n p.rem = src.rem;\n } else {\n p.remF = null;\n p.rem = [];\n }\n\n if (flags & MOD) {\n p.modF = src.modF;\n p.mod = src.mod;\n } else {\n p.modF = null;\n p.mod = [];\n }\n\n if (flags & NO_SOURCE) {\n p.srcF = null;\n p.source = null;\n } else {\n p.srcF = src.srcF;\n p.source = src.source;\n if (src.cleans) p.cleans = src.cleans;\n }\n\n return p;\n },\n\n /**\n * Schedules a function to run after pulse propagation completes.\n * @param {function} func - The function to run.\n */\n runAfter(func) {\n this.dataflow.runAfter(func);\n },\n\n /**\n * Indicates if tuples have been added, removed or modified.\n * @param {number} [flags] - The tuple types (ADD, REM or MOD) to query.\n * Defaults to ALL, returning true if any tuple type has changed.\n * @return {boolean} - Returns true if one or more queried tuple types have\n * changed, false otherwise.\n */\n changed(flags) {\n const f = flags || ALL;\n return f & ADD && this.add.length || f & REM && this.rem.length || f & MOD && this.mod.length;\n },\n\n /**\n * Forces a \"reflow\" of tuple values, such that all tuples in the backing\n * source are added to the MOD set, unless already present in the ADD set.\n * @param {boolean} [fork=false] - If true, returns a forked copy of this\n * pulse, and invokes reflow on that derived pulse.\n * @return {Pulse} - The reflowed pulse instance.\n */\n reflow(fork) {\n if (fork) return this.fork(ALL).reflow();\n const len = this.add.length,\n src = this.source && this.source.length;\n\n if (src && src !== len) {\n this.mod = this.source;\n if (len) this.filter(MOD, filter(this, ADD));\n }\n\n return this;\n },\n\n /**\n * Get/set metadata to pulse requesting garbage collection\n * to reclaim currently unused resources.\n */\n clean(value) {\n if (arguments.length) {\n this.cleans = !!value;\n return this;\n } else {\n return this.cleans;\n }\n },\n\n /**\n * Marks one or more data field names as modified to assist dependency\n * tracking and incremental processing by transform operators.\n * @param {string|Array} _ - The field(s) to mark as modified.\n * @return {Pulse} - This pulse instance.\n */\n modifies(_) {\n const hash = this.fields || (this.fields = {});\n\n if (isArray(_)) {\n _.forEach(f => hash[f] = true);\n } else {\n hash[_] = true;\n }\n\n return this;\n },\n\n /**\n * Checks if one or more data fields have been modified during this pulse\n * propagation timestamp.\n * @param {string|Array} _ - The field(s) to check for modified.\n * @param {boolean} nomod - If true, will check the modified flag even if\n * no mod tuples exist. If false (default), mod tuples must be present.\n * @return {boolean} - Returns true if any of the provided fields has been\n * marked as modified, false otherwise.\n */\n modified(_, nomod) {\n const fields = this.fields;\n return !((nomod || this.mod.length) && fields) ? false : !arguments.length ? !!fields : isArray(_) ? _.some(f => fields[f]) : fields[_];\n },\n\n /**\n * Adds a filter function to one more tuple sets. Filters are applied to\n * backing tuple arrays, to determine the actual set of tuples considered\n * added, removed or modified. They can be used to delay materialization of\n * a tuple set in order to avoid expensive array copies. In addition, the\n * filter functions can serve as value transformers: unlike standard predicate\n * function (which return boolean values), Pulse filters should return the\n * actual tuple value to process. If a tuple set is already filtered, the\n * new filter function will be appended into a conjuntive ('and') query.\n * @param {number} flags - Flags indicating the tuple set(s) to filter.\n * @param {function(*):object} filter - Filter function that will be applied\n * to the tuple set array, and should return a data tuple if the value\n * should be included in the tuple set, and falsy (or null) otherwise.\n * @return {Pulse} - Returns this pulse instance.\n */\n filter(flags, filter) {\n const p = this;\n if (flags & ADD) p.addF = addFilter(p.addF, filter);\n if (flags & REM) p.remF = addFilter(p.remF, filter);\n if (flags & MOD) p.modF = addFilter(p.modF, filter);\n if (flags & SOURCE) p.srcF = addFilter(p.srcF, filter);\n return p;\n },\n\n /**\n * Materialize one or more tuple sets in this pulse. If the tuple set(s) have\n * a registered filter function, it will be applied and the tuple set(s) will\n * be replaced with materialized tuple arrays.\n * @param {number} flags - Flags indicating the tuple set(s) to materialize.\n * @return {Pulse} - Returns this pulse instance.\n */\n materialize(flags) {\n flags = flags || ALL;\n const p = this;\n\n if (flags & ADD && p.addF) {\n p.add = materialize(p.add, p.addF);\n p.addF = null;\n }\n\n if (flags & REM && p.remF) {\n p.rem = materialize(p.rem, p.remF);\n p.remF = null;\n }\n\n if (flags & MOD && p.modF) {\n p.mod = materialize(p.mod, p.modF);\n p.modF = null;\n }\n\n if (flags & SOURCE && p.srcF) {\n p.source = p.source.filter(p.srcF);\n p.srcF = null;\n }\n\n return p;\n },\n\n /**\n * Visit one or more tuple sets in this pulse.\n * @param {number} flags - Flags indicating the tuple set(s) to visit.\n * Legal values are ADD, REM, MOD and SOURCE (if a backing data source\n * has been set).\n * @param {function(object):*} - Visitor function invoked per-tuple.\n * @return {Pulse} - Returns this pulse instance.\n */\n visit(flags, visitor) {\n const p = this,\n v = visitor;\n\n if (flags & SOURCE) {\n visitArray(p.source, p.srcF, v);\n return p;\n }\n\n if (flags & ADD) visitArray(p.add, p.addF, v);\n if (flags & REM) visitArray(p.rem, p.remF, v);\n if (flags & MOD) visitArray(p.mod, p.modF, v);\n const src = p.source;\n\n if (flags & REFLOW && src) {\n const sum = p.add.length + p.mod.length;\n\n if (sum === src.length) ; else if (sum) {\n visitArray(src, filter(p, ADD_MOD), v);\n } else {\n // if no add/rem/mod tuples, visit source\n visitArray(src, p.srcF, v);\n }\n }\n\n return p;\n }\n\n};\n\n/**\n * Represents a set of multiple pulses. Used as input for operators\n * that accept multiple pulses at a time. Contained pulses are\n * accessible via the public \"pulses\" array property. This pulse doe\n * not carry added, removed or modified tuples directly. However,\n * the visit method can be used to traverse all such tuples contained\n * in sub-pulses with a timestamp matching this parent multi-pulse.\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The timestamp.\n * @param {Array} pulses - The sub-pulses for this multi-pulse.\n */\n\nfunction MultiPulse(dataflow, stamp, pulses, encode) {\n const p = this,\n n = pulses.length;\n let c = 0;\n this.dataflow = dataflow;\n this.stamp = stamp;\n this.fields = null;\n this.encode = encode || null;\n this.pulses = pulses;\n\n for (let i = 0; i < n; ++i) {\n const pulse = pulses[i];\n if (pulse.stamp !== stamp) continue;\n\n if (pulse.fields) {\n const hash = p.fields || (p.fields = {});\n\n for (const f in pulse.fields) {\n hash[f] = 1;\n }\n }\n\n if (pulse.changed(p.ADD)) c |= p.ADD;\n if (pulse.changed(p.REM)) c |= p.REM;\n if (pulse.changed(p.MOD)) c |= p.MOD;\n }\n\n this.changes = c;\n}\ninherits(MultiPulse, Pulse, {\n /**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse}\n */\n fork(flags) {\n const p = new Pulse(this.dataflow).init(this, flags & this.NO_FIELDS);\n\n if (flags !== undefined) {\n if (flags & p.ADD) this.visit(p.ADD, t => p.add.push(t));\n if (flags & p.REM) this.visit(p.REM, t => p.rem.push(t));\n if (flags & p.MOD) this.visit(p.MOD, t => p.mod.push(t));\n }\n\n return p;\n },\n\n changed(flags) {\n return this.changes & flags;\n },\n\n modified(_) {\n const p = this,\n fields = p.fields;\n return !(fields && p.changes & p.MOD) ? 0 : isArray(_) ? _.some(f => fields[f]) : fields[_];\n },\n\n filter() {\n error('MultiPulse does not support filtering.');\n },\n\n materialize() {\n error('MultiPulse does not support materialization.');\n },\n\n visit(flags, visitor) {\n const p = this,\n pulses = p.pulses,\n n = pulses.length;\n let i = 0;\n\n if (flags & p.SOURCE) {\n for (; i < n; ++i) {\n pulses[i].visit(flags, visitor);\n }\n } else {\n for (; i < n; ++i) {\n if (pulses[i].stamp === p.stamp) {\n pulses[i].visit(flags, visitor);\n }\n }\n }\n\n return p;\n }\n\n});\n\n/* eslint-disable require-atomic-updates */\n/**\n * Evaluates the dataflow and returns a Promise that resolves when pulse\n * propagation completes. This method will increment the current timestamp\n * and process all updated, pulsed and touched operators. When invoked for\n * the first time, all registered operators will be processed. This method\n * should not be invoked by third-party clients, use {@link runAsync} or\n * {@link run} instead.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode package.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Promise} - A promise that resolves to this dataflow after\n * evaluation completes.\n */\n\nasync function evaluate(encode, prerun, postrun) {\n const df = this,\n async = []; // if the pulse value is set, this is a re-entrant call\n\n if (df._pulse) return reentrant(df); // wait for pending datasets to load\n\n if (df._pending) await df._pending; // invoke prerun function, if provided\n\n if (prerun) await asyncCallback(df, prerun); // exit early if there are no updates\n\n if (!df._touched.length) {\n df.debug('Dataflow invoked, but nothing to do.');\n return df;\n } // increment timestamp clock\n\n\n const stamp = ++df._clock; // set the current pulse\n\n df._pulse = new Pulse(df, stamp, encode); // initialize priority queue, reset touched operators\n\n df._touched.forEach(op => df._enqueue(op, true));\n\n df._touched = UniqueList(id);\n let count = 0,\n op,\n next,\n error;\n\n try {\n while (df._heap.size() > 0) {\n // dequeue operator with highest priority\n op = df._heap.pop(); // re-queue if rank changed\n\n if (op.rank !== op.qrank) {\n df._enqueue(op, true);\n\n continue;\n } // otherwise, evaluate the operator\n\n\n next = op.run(df._getPulse(op, encode));\n\n if (next.then) {\n // await if operator returns a promise directly\n next = await next;\n } else if (next.async) {\n // queue parallel asynchronous execution\n async.push(next.async);\n next = StopPropagation;\n } // propagate evaluation, enqueue dependent operators\n\n\n if (next !== StopPropagation) {\n if (op._targets) op._targets.forEach(op => df._enqueue(op));\n } // increment visit counter\n\n\n ++count;\n }\n } catch (err) {\n df._heap.clear();\n\n error = err;\n } // reset pulse map\n\n\n df._input = {};\n df._pulse = null;\n df.debug(`Pulse ${stamp}: ${count} operators`);\n\n if (error) {\n df._postrun = [];\n df.error(error);\n } // invoke callbacks queued via runAfter\n\n\n if (df._postrun.length) {\n const pr = df._postrun.sort((a, b) => b.priority - a.priority);\n\n df._postrun = [];\n\n for (let i = 0; i < pr.length; ++i) {\n await asyncCallback(df, pr[i].callback);\n }\n } // invoke postrun function, if provided\n\n\n if (postrun) await asyncCallback(df, postrun); // handle non-blocking asynchronous callbacks\n\n if (async.length) {\n Promise.all(async).then(cb => df.runAsync(null, () => {\n cb.forEach(f => {\n try {\n f(df);\n } catch (err) {\n df.error(err);\n }\n });\n }));\n }\n\n return df;\n}\n/**\n * Queues dataflow evaluation to run once any other queued evaluations have\n * completed and returns a Promise that resolves when the queued pulse\n * propagation completes. If provided, a callback function will be invoked\n * immediately before evaluation commences. This method will ensure a\n * separate evaluation is invoked for each time it is called.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode package.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Promise} - A promise that resolves to this dataflow after\n * evaluation completes.\n */\n\nasync function runAsync(encode, prerun, postrun) {\n // await previously queued functions\n while (this._running) await this._running; // run dataflow, manage running promise\n\n\n const clear = () => this._running = null;\n\n (this._running = this.evaluate(encode, prerun, postrun)).then(clear, clear);\n return this._running;\n}\n/**\n * Requests dataflow evaluation and the immediately returns this dataflow\n * instance. If there are pending data loading or other asynchronous\n * operations, the dataflow will evaluate asynchronously after this method\n * has been invoked. To track when dataflow evaluation completes, use the\n * {@link runAsync} method instead. This method will raise an error if\n * invoked while the dataflow is already in the midst of evaluation.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode module.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Dataflow} - This dataflow instance.\n */\n\nfunction run(encode, prerun, postrun) {\n return this._pulse ? reentrant(this) : (this.evaluate(encode, prerun, postrun), this);\n}\n/**\n * Schedules a callback function to be invoked after the current pulse\n * propagation completes. If no propagation is currently occurring,\n * the function is invoked immediately. Callbacks scheduled via runAfter\n * are invoked immediately upon completion of the current cycle, before\n * any request queued via runAsync. This method is primarily intended for\n * internal use. Third-party callers using runAfter to schedule a callback\n * that invokes {@link run} or {@link runAsync} should not use this method,\n * but instead use {@link runAsync} with prerun or postrun arguments.\n * @param {function(Dataflow)} callback - The callback function to run.\n * The callback will be invoked with this Dataflow instance as its\n * sole argument.\n * @param {boolean} enqueue - A boolean flag indicating that the\n * callback should be queued up to run after the next propagation\n * cycle, suppressing immediate invocation when propagation is not\n * currently occurring.\n * @param {number} [priority] - A priority value used to sort registered\n * callbacks to determine execution order. This argument is intended\n * for internal Vega use only.\n */\n\nfunction runAfter(callback, enqueue, priority) {\n if (this._pulse || enqueue) {\n // pulse propagation is currently running, queue to run after\n this._postrun.push({\n priority: priority || 0,\n callback: callback\n });\n } else {\n // pulse propagation already complete, invoke immediately\n try {\n callback(this);\n } catch (err) {\n this.error(err);\n }\n }\n}\n/**\n * Raise an error for re-entrant dataflow evaluation.\n */\n\nfunction reentrant(df) {\n df.error('Dataflow already running. Use runAsync() to chain invocations.');\n return df;\n}\n/**\n * Enqueue an operator into the priority queue for evaluation. The operator\n * will be enqueued if it has no registered pulse for the current cycle, or if\n * the force argument is true. Upon enqueue, this method also sets the\n * operator's qrank to the current rank value.\n * @param {Operator} op - The operator to enqueue.\n * @param {boolean} [force] - A flag indicating if the operator should be\n * forceably added to the queue, even if it has already been previously\n * enqueued during the current pulse propagation. This is useful when the\n * dataflow graph is dynamically modified and the operator rank changes.\n */\n\n\nfunction enqueue(op, force) {\n const q = op.stamp < this._clock;\n if (q) op.stamp = this._clock;\n\n if (q || force) {\n op.qrank = op.rank;\n\n this._heap.push(op);\n }\n}\n/**\n * Provide a correct pulse for evaluating an operator. If the operator has an\n * explicit source operator, we will try to pull the pulse(s) from it.\n * If there is an array of source operators, we build a multi-pulse.\n * Otherwise, we return a current pulse with correct source data.\n * If the pulse is the pulse map has an explicit target set, we use that.\n * Else if the pulse on the upstream source operator is current, we use that.\n * Else we use the pulse from the pulse map, but copy the source tuple array.\n * @param {Operator} op - The operator for which to get an input pulse.\n * @param {string} [encode] - An (optional) encoding set name with which to\n * annotate the returned pulse. See {@link run} for more information.\n */\n\nfunction getPulse(op, encode) {\n const s = op.source,\n stamp = this._clock;\n return s && isArray(s) ? new MultiPulse(this, stamp, s.map(_ => _.pulse), encode) : this._input[op.id] || singlePulse(this._pulse, s && s.pulse);\n}\n\nfunction singlePulse(p, s) {\n if (s && s.stamp === p.stamp) {\n return s;\n }\n\n p = p.fork();\n\n if (s && s !== StopPropagation) {\n p.source = s.source;\n }\n\n return p;\n}\n\nconst NO_OPT = {\n skip: false,\n force: false\n};\n/**\n * Touches an operator, scheduling it to be evaluated. If invoked outside of\n * a pulse propagation, the operator will be evaluated the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the operator\n * will be queued for evaluation if and only if the operator has not yet been\n * evaluated on the current propagation timestamp.\n * @param {Operator} op - The operator to touch.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\n\nfunction touch(op, options) {\n const opt = options || NO_OPT;\n\n if (this._pulse) {\n // if in midst of propagation, add to priority queue\n this._enqueue(op);\n } else {\n // otherwise, queue for next propagation\n this._touched.add(op);\n }\n\n if (opt.skip) op.skip(true);\n return this;\n}\n/**\n * Updates the value of the given operator.\n * @param {Operator} op - The operator to update.\n * @param {*} value - The value to set.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\n\nfunction update(op, value, options) {\n const opt = options || NO_OPT;\n\n if (op.set(value) || opt.force) {\n this.touch(op, opt);\n }\n\n return this;\n}\n/**\n * Pulses an operator with a changeset of tuples. If invoked outside of\n * a pulse propagation, the pulse will be applied the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the pulse\n * will be added to the set of active pulses and will be applied if and\n * only if the target operator has not yet been evaluated on the current\n * propagation timestamp.\n * @param {Operator} op - The operator to pulse.\n * @param {ChangeSet} value - The tuple changeset to apply.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\n\nfunction pulse(op, changeset, options) {\n this.touch(op, options || NO_OPT);\n const p = new Pulse(this, this._clock + (this._pulse ? 0 : 1)),\n t = op.pulse && op.pulse.source || [];\n p.target = op;\n this._input[op.id] = changeset.pulse(p, t);\n return this;\n}\n\nfunction Heap(cmp) {\n let nodes = [];\n return {\n clear: () => nodes = [],\n size: () => nodes.length,\n peek: () => nodes[0],\n push: x => {\n nodes.push(x);\n return siftdown(nodes, 0, nodes.length - 1, cmp);\n },\n pop: () => {\n const last = nodes.pop();\n let item;\n\n if (nodes.length) {\n item = nodes[0];\n nodes[0] = last;\n siftup(nodes, 0, cmp);\n } else {\n item = last;\n }\n\n return item;\n }\n };\n}\n\nfunction siftdown(array, start, idx, cmp) {\n let parent, pidx;\n const item = array[idx];\n\n while (idx > start) {\n pidx = idx - 1 >> 1;\n parent = array[pidx];\n\n if (cmp(item, parent) < 0) {\n array[idx] = parent;\n idx = pidx;\n continue;\n }\n\n break;\n }\n\n return array[idx] = item;\n}\n\nfunction siftup(array, idx, cmp) {\n const start = idx,\n end = array.length,\n item = array[idx];\n let cidx = (idx << 1) + 1,\n ridx;\n\n while (cidx < end) {\n ridx = cidx + 1;\n\n if (ridx < end && cmp(array[cidx], array[ridx]) >= 0) {\n cidx = ridx;\n }\n\n array[idx] = array[cidx];\n idx = cidx;\n cidx = (idx << 1) + 1;\n }\n\n array[idx] = item;\n return siftdown(array, start, idx, cmp);\n}\n\n/**\n * A dataflow graph for reactive processing of data streams.\n * @constructor\n */\n\nfunction Dataflow() {\n this.logger(logger());\n this.logLevel(Error);\n this._clock = 0;\n this._rank = 0;\n this._locale = defaultLocale();\n\n try {\n this._loader = loader();\n } catch (e) {// do nothing if loader module is unavailable\n }\n\n this._touched = UniqueList(id);\n this._input = {};\n this._pulse = null;\n this._heap = Heap((a, b) => a.qrank - b.qrank);\n this._postrun = [];\n}\n\nfunction logMethod(method) {\n return function () {\n return this._log[method].apply(this, arguments);\n };\n}\n\nDataflow.prototype = {\n /**\n * The current timestamp of this dataflow. This value reflects the\n * timestamp of the previous dataflow run. The dataflow is initialized\n * with a stamp value of 0. The initial run of the dataflow will have\n * a timestap of 1, and so on. This value will match the\n * {@link Pulse.stamp} property.\n * @return {number} - The current timestamp value.\n */\n stamp() {\n return this._clock;\n },\n\n /**\n * Gets or sets the loader instance to use for data file loading. A\n * loader object must provide a \"load\" method for loading files and a\n * \"sanitize\" method for checking URL/filename validity. Both methods\n * should accept a URI and options hash as arguments, and return a Promise\n * that resolves to the loaded file contents (load) or a hash containing\n * sanitized URI data with the sanitized url assigned to the \"href\" property\n * (sanitize).\n * @param {object} _ - The loader instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current loader instance. Otherwise returns this Dataflow instance.\n */\n loader(_) {\n if (arguments.length) {\n this._loader = _;\n return this;\n } else {\n return this._loader;\n }\n },\n\n /**\n * Gets or sets the locale instance to use for formatting and parsing\n * string values. The locale object should be provided by the\n * vega-format library, and include methods such as format, timeFormat,\n * utcFormat, timeParse, and utcParse.\n * @param {object} _ - The locale instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current locale instance. Otherwise returns this Dataflow instance.\n */\n locale(_) {\n if (arguments.length) {\n this._locale = _;\n return this;\n } else {\n return this._locale;\n }\n },\n\n /**\n * Get or set the logger instance used to log messages. If no arguments are\n * provided, returns the current logger instance. Otherwise, sets the logger\n * and return this Dataflow instance. Provided loggers must support the full\n * API of logger objects generated by the vega-util logger method. Note that\n * by default the log level of the new logger will be used; use the logLevel\n * method to adjust the log level as needed.\n */\n logger(logger) {\n if (arguments.length) {\n this._log = logger;\n return this;\n } else {\n return this._log;\n }\n },\n\n /**\n * Logs an error message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit error messages.\n */\n error: logMethod('error'),\n\n /**\n * Logs a warning message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit warning messages.\n */\n warn: logMethod('warn'),\n\n /**\n * Logs a information message. By default, logged messages are written to\n * console output. The message will only be logged if the current log level is\n * high enough to permit information messages.\n */\n info: logMethod('info'),\n\n /**\n * Logs a debug message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit debug messages.\n */\n debug: logMethod('debug'),\n\n /**\n * Get or set the current log level. If an argument is provided, it\n * will be used as the new log level.\n * @param {number} [level] - Should be one of None, Warn, Info\n * @return {number} - The current log level.\n */\n logLevel: logMethod('level'),\n\n /**\n * Empty entry threshold for garbage cleaning. Map data structures will\n * perform cleaning once the number of empty entries exceeds this value.\n */\n cleanThreshold: 1e4,\n // OPERATOR REGISTRATION\n add,\n connect,\n rank,\n rerank,\n // OPERATOR UPDATES\n pulse,\n touch,\n update,\n changeset,\n // DATA LOADING\n ingest,\n parse,\n preload,\n request,\n // EVENT HANDLING\n events,\n on,\n // PULSE PROPAGATION\n evaluate,\n run,\n runAsync,\n runAfter,\n _enqueue: enqueue,\n _getPulse: getPulse\n};\n\n/**\n * Abstract class for operators that process data tuples.\n * Subclasses must provide a {@link transform} method for operator processing.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {Operator} [source] - The operator from which to receive pulses.\n */\n\nfunction Transform(init, params) {\n Operator.call(this, init, null, params);\n}\ninherits(Transform, Operator, {\n /**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\n run(pulse) {\n if (pulse.stamp < this.stamp) return pulse.StopPropagation;\n let rv;\n\n if (this.skip()) {\n this.skip(false);\n } else {\n rv = this.evaluate(pulse);\n }\n\n rv = rv || pulse;\n\n if (rv.then) {\n rv = rv.then(_ => this.pulse = _);\n } else if (rv !== pulse.StopPropagation) {\n this.pulse = rv;\n }\n\n return rv;\n },\n\n /**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Marshalls parameter values and then invokes {@link transform}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n value (including undefined) will let the input pulse pass through.\n */\n evaluate(pulse) {\n const params = this.marshall(pulse.stamp),\n out = this.transform(params, pulse);\n params.clear();\n return out;\n },\n\n /**\n * Process incoming pulses.\n * Subclasses should override this method to implement transforms.\n * @param {Parameters} _ - The operator parameter values.\n * @param {Pulse} pulse - The current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n * value (including undefined) will let the input pulse pass through.\n */\n transform() {}\n\n});\n\nconst transforms = {};\nfunction definition(type) {\n const t = transform(type);\n return t && t.Definition || null;\n}\nfunction transform(type) {\n type = type && type.toLowerCase();\n return hasOwnProperty(transforms, type) ? transforms[type] : null;\n}\n\nexport { Dataflow, EventStream, MultiPulse, Operator, Parameters, Pulse, Transform, UniqueList, asyncCallback, changeset, definition, derive, ingest$1 as ingest, isChangeSet, isTuple, rederive, replace, stableCompare, transform, transforms, tupleid };\n","import { ascending, quantileSorted, deviation, quantile, median } from 'd3-array';\n\nfunction* numbers (values, valueof) {\n if (valueof == null) {\n for (let value of values) {\n if (value != null && value !== '' && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n\n for (let value of values) {\n value = valueof(value, ++index, values);\n\n if (value != null && value !== '' && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n\nfunction quantiles (array, p, f) {\n const values = Float64Array.from(numbers(array, f)); // don't depend on return value from typed array sort call\n // protects against undefined sort results in Safari (vega/vega-lite#4964)\n\n values.sort(ascending);\n return p.map(_ => quantileSorted(values, _));\n}\n\nfunction quartiles (array, f) {\n return quantiles(array, [0.25, 0.50, 0.75], f);\n}\n\n// Theory, Practice, and Visualization. Wiley.\n\nfunction estimateBandwidth (array, f) {\n const n = array.length,\n d = deviation(array, f),\n q = quartiles(array, f),\n h = (q[2] - q[0]) / 1.34,\n v = Math.min(d, h) || d || Math.abs(q[0]) || 1;\n return 1.06 * v * Math.pow(n, -0.2);\n}\n\nfunction bin (_) {\n // determine range\n const maxb = _.maxbins || 20,\n base = _.base || 10,\n logb = Math.log(base),\n div = _.divide || [5, 2];\n let min = _.extent[0],\n max = _.extent[1],\n step,\n level,\n minstep,\n v,\n i,\n n;\n const span = _.span || max - min || Math.abs(min) || 1;\n\n if (_.step) {\n // if step size is explicitly given, use that\n step = _.step;\n } else if (_.steps) {\n // if provided, limit choice to acceptable step sizes\n v = span / maxb;\n\n for (i = 0, n = _.steps.length; i < n && _.steps[i] < v; ++i);\n\n step = _.steps[Math.max(0, i - 1)];\n } else {\n // else use span to determine step size\n level = Math.ceil(Math.log(maxb) / logb);\n minstep = _.minstep || 0;\n step = Math.max(minstep, Math.pow(base, Math.round(Math.log(span) / logb) - level)); // increase step size if too many bins\n\n while (Math.ceil(span / step) > maxb) {\n step *= base;\n } // decrease step size if allowed\n\n\n for (i = 0, n = div.length; i < n; ++i) {\n v = step / div[i];\n if (v >= minstep && span / v <= maxb) step = v;\n }\n } // update precision, min and max\n\n\n v = Math.log(step);\n const precision = v >= 0 ? 0 : ~~(-v / logb) + 1,\n eps = Math.pow(base, -precision - 1);\n\n if (_.nice || _.nice === undefined) {\n v = Math.floor(min / step + eps) * step;\n min = min < v ? v - step : v;\n max = Math.ceil(max / step) * step;\n }\n\n return {\n start: min,\n stop: max === min ? min + step : max,\n step: step\n };\n}\n\nvar random = Math.random;\nfunction setRandom(r) {\n random = r;\n}\n\nfunction bootstrapCI (array, samples, alpha, f) {\n if (!array.length) return [undefined, undefined];\n const values = Float64Array.from(numbers(array, f)),\n n = values.length,\n m = samples;\n let a, i, j, mu;\n\n for (j = 0, mu = Array(m); j < m; ++j) {\n for (a = 0, i = 0; i < n; ++i) {\n a += values[~~(random() * n)];\n }\n\n mu[j] = a / n;\n }\n\n mu.sort(ascending);\n return [quantile(mu, alpha / 2), quantile(mu, 1 - alpha / 2)];\n}\n\n// Dot density binning for dot plot construction.\n// Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n// https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\nfunction dotbin (array, step, smooth, f) {\n f = f || (_ => _);\n\n const n = array.length,\n v = new Float64Array(n);\n let i = 0,\n j = 1,\n a = f(array[0]),\n b = a,\n w = a + step,\n x;\n\n for (; j < n; ++j) {\n x = f(array[j]);\n\n if (x >= w) {\n b = (a + b) / 2;\n\n for (; i < j; ++i) v[i] = b;\n\n w = x + step;\n a = x;\n }\n\n b = x;\n }\n\n b = (a + b) / 2;\n\n for (; i < j; ++i) v[i] = b;\n\n return smooth ? smoothing(v, step + step / 4) : v;\n} // perform smoothing to reduce variance\n// swap points between \"adjacent\" stacks\n// Wilkinson defines adjacent as within step/4 units\n\nfunction smoothing(v, thresh) {\n const n = v.length;\n let a = 0,\n b = 1,\n c,\n d; // get left stack\n\n while (v[a] === v[b]) ++b;\n\n while (b < n) {\n // get right stack\n c = b + 1;\n\n while (v[b] === v[c]) ++c; // are stacks adjacent?\n // if so, compare sizes and swap as needed\n\n\n if (v[b] - v[b - 1] < thresh) {\n d = b + (a + c - b - b >> 1);\n\n while (d < b) v[d++] = v[b];\n\n while (d > b) v[d--] = v[a];\n } // update left stack indices\n\n\n a = b;\n b = c;\n }\n\n return v;\n}\n\nfunction lcg (seed) {\n // Random numbers using a Linear Congruential Generator with seed value\n // Uses glibc values from https://en.wikipedia.org/wiki/Linear_congruential_generator\n return function () {\n seed = (1103515245 * seed + 12345) % 2147483647;\n return seed / 2147483647;\n };\n}\n\nfunction integer (min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n\n let a, b, d;\n const dist = {\n min(_) {\n if (arguments.length) {\n a = _ || 0;\n d = b - a;\n return dist;\n } else {\n return a;\n }\n },\n\n max(_) {\n if (arguments.length) {\n b = _ || 0;\n d = b - a;\n return dist;\n } else {\n return b;\n }\n },\n\n sample() {\n return a + Math.floor(d * random());\n },\n\n pdf(x) {\n return x === Math.floor(x) && x >= a && x < b ? 1 / d : 0;\n },\n\n cdf(x) {\n const v = Math.floor(x);\n return v < a ? 0 : v >= b ? 1 : (v - a + 1) / d;\n },\n\n icdf(p) {\n return p >= 0 && p <= 1 ? a - 1 + Math.floor(p * d) : NaN;\n }\n\n };\n return dist.min(min).max(max);\n}\n\nconst SQRT2PI = Math.sqrt(2 * Math.PI);\nconst SQRT2 = Math.SQRT2;\n\nlet nextSample = NaN;\nfunction sampleNormal(mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n let x = 0,\n y = 0,\n rds,\n c;\n\n if (nextSample === nextSample) {\n x = nextSample;\n nextSample = NaN;\n } else {\n do {\n x = random() * 2 - 1;\n y = random() * 2 - 1;\n rds = x * x + y * y;\n } while (rds === 0 || rds > 1);\n\n c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform\n\n x *= c;\n nextSample = y * c;\n }\n\n return mean + x * stdev;\n}\nfunction densityNormal(value, mean, stdev) {\n stdev = stdev == null ? 1 : stdev;\n const z = (value - (mean || 0)) / stdev;\n return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI);\n} // Approximation from West (2009)\n// Better Approximations to Cumulative Normal Functions\n\nfunction cumulativeNormal(value, mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n const z = (value - mean) / stdev,\n Z = Math.abs(z);\n let cd;\n\n if (Z > 37) {\n cd = 0;\n } else {\n const exp = Math.exp(-Z * Z / 2);\n let sum;\n\n if (Z < 7.07106781186547) {\n sum = 3.52624965998911e-02 * Z + 0.700383064443688;\n sum = sum * Z + 6.37396220353165;\n sum = sum * Z + 33.912866078383;\n sum = sum * Z + 112.079291497871;\n sum = sum * Z + 221.213596169931;\n sum = sum * Z + 220.206867912376;\n cd = exp * sum;\n sum = 8.83883476483184e-02 * Z + 1.75566716318264;\n sum = sum * Z + 16.064177579207;\n sum = sum * Z + 86.7807322029461;\n sum = sum * Z + 296.564248779674;\n sum = sum * Z + 637.333633378831;\n sum = sum * Z + 793.826512519948;\n sum = sum * Z + 440.413735824752;\n cd = cd / sum;\n } else {\n sum = Z + 0.65;\n sum = Z + 4 / sum;\n sum = Z + 3 / sum;\n sum = Z + 2 / sum;\n sum = Z + 1 / sum;\n cd = exp / sum / 2.506628274631;\n }\n }\n\n return z > 0 ? 1 - cd : cd;\n} // Approximation of Probit function using inverse error function.\n\nfunction quantileNormal(p, mean, stdev) {\n if (p < 0 || p > 1) return NaN;\n return (mean || 0) + (stdev == null ? 1 : stdev) * SQRT2 * erfinv(2 * p - 1);\n} // Approximate inverse error function. Implementation from \"Approximating\n// the erfinv function\" by Mike Giles, GPU Computing Gems, volume 2, 2010.\n// Ported from Apache Commons Math, http://www.apache.org/licenses/LICENSE-2.0\n\nfunction erfinv(x) {\n // beware that the logarithm argument must be\n // commputed as (1.0 - x) * (1.0 + x),\n // it must NOT be simplified as 1.0 - x * x as this\n // would induce rounding errors near the boundaries +/-1\n let w = -Math.log((1 - x) * (1 + x)),\n p;\n\n if (w < 6.25) {\n w -= 3.125;\n p = -3.6444120640178196996e-21;\n p = -1.685059138182016589e-19 + p * w;\n p = 1.2858480715256400167e-18 + p * w;\n p = 1.115787767802518096e-17 + p * w;\n p = -1.333171662854620906e-16 + p * w;\n p = 2.0972767875968561637e-17 + p * w;\n p = 6.6376381343583238325e-15 + p * w;\n p = -4.0545662729752068639e-14 + p * w;\n p = -8.1519341976054721522e-14 + p * w;\n p = 2.6335093153082322977e-12 + p * w;\n p = -1.2975133253453532498e-11 + p * w;\n p = -5.4154120542946279317e-11 + p * w;\n p = 1.051212273321532285e-09 + p * w;\n p = -4.1126339803469836976e-09 + p * w;\n p = -2.9070369957882005086e-08 + p * w;\n p = 4.2347877827932403518e-07 + p * w;\n p = -1.3654692000834678645e-06 + p * w;\n p = -1.3882523362786468719e-05 + p * w;\n p = 0.0001867342080340571352 + p * w;\n p = -0.00074070253416626697512 + p * w;\n p = -0.0060336708714301490533 + p * w;\n p = 0.24015818242558961693 + p * w;\n p = 1.6536545626831027356 + p * w;\n } else if (w < 16.0) {\n w = Math.sqrt(w) - 3.25;\n p = 2.2137376921775787049e-09;\n p = 9.0756561938885390979e-08 + p * w;\n p = -2.7517406297064545428e-07 + p * w;\n p = 1.8239629214389227755e-08 + p * w;\n p = 1.5027403968909827627e-06 + p * w;\n p = -4.013867526981545969e-06 + p * w;\n p = 2.9234449089955446044e-06 + p * w;\n p = 1.2475304481671778723e-05 + p * w;\n p = -4.7318229009055733981e-05 + p * w;\n p = 6.8284851459573175448e-05 + p * w;\n p = 2.4031110387097893999e-05 + p * w;\n p = -0.0003550375203628474796 + p * w;\n p = 0.00095328937973738049703 + p * w;\n p = -0.0016882755560235047313 + p * w;\n p = 0.0024914420961078508066 + p * w;\n p = -0.0037512085075692412107 + p * w;\n p = 0.005370914553590063617 + p * w;\n p = 1.0052589676941592334 + p * w;\n p = 3.0838856104922207635 + p * w;\n } else if (Number.isFinite(w)) {\n w = Math.sqrt(w) - 5.0;\n p = -2.7109920616438573243e-11;\n p = -2.5556418169965252055e-10 + p * w;\n p = 1.5076572693500548083e-09 + p * w;\n p = -3.7894654401267369937e-09 + p * w;\n p = 7.6157012080783393804e-09 + p * w;\n p = -1.4960026627149240478e-08 + p * w;\n p = 2.9147953450901080826e-08 + p * w;\n p = -6.7711997758452339498e-08 + p * w;\n p = 2.2900482228026654717e-07 + p * w;\n p = -9.9298272942317002539e-07 + p * w;\n p = 4.5260625972231537039e-06 + p * w;\n p = -1.9681778105531670567e-05 + p * w;\n p = 7.5995277030017761139e-05 + p * w;\n p = -0.00021503011930044477347 + p * w;\n p = -0.00013871931833623122026 + p * w;\n p = 1.0103004648645343977 + p * w;\n p = 4.8499064014085844221 + p * w;\n } else {\n p = Infinity;\n }\n\n return p * x;\n}\n\nfunction gaussian (mean, stdev) {\n let mu, sigma;\n const dist = {\n mean(_) {\n if (arguments.length) {\n mu = _ || 0;\n return dist;\n } else {\n return mu;\n }\n },\n\n stdev(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n return dist;\n } else {\n return sigma;\n }\n },\n\n sample: () => sampleNormal(mu, sigma),\n pdf: value => densityNormal(value, mu, sigma),\n cdf: value => cumulativeNormal(value, mu, sigma),\n icdf: p => quantileNormal(p, mu, sigma)\n };\n return dist.mean(mean).stdev(stdev);\n}\n\nfunction kde (support, bandwidth) {\n const kernel = gaussian();\n let n = 0;\n const dist = {\n data(_) {\n if (arguments.length) {\n support = _;\n n = _ ? _.length : 0;\n return dist.bandwidth(bandwidth);\n } else {\n return support;\n }\n },\n\n bandwidth(_) {\n if (!arguments.length) return bandwidth;\n bandwidth = _;\n if (!bandwidth && support) bandwidth = estimateBandwidth(support);\n return dist;\n },\n\n sample() {\n return support[~~(random() * n)] + bandwidth * kernel.sample();\n },\n\n pdf(x) {\n let y = 0,\n i = 0;\n\n for (; i < n; ++i) {\n y += kernel.pdf((x - support[i]) / bandwidth);\n }\n\n return y / bandwidth / n;\n },\n\n cdf(x) {\n let y = 0,\n i = 0;\n\n for (; i < n; ++i) {\n y += kernel.cdf((x - support[i]) / bandwidth);\n }\n\n return y / n;\n },\n\n icdf() {\n throw Error('KDE icdf not supported.');\n }\n\n };\n return dist.data(support);\n}\n\nfunction sampleLogNormal(mean, stdev) {\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n return Math.exp(mean + sampleNormal() * stdev);\n}\nfunction densityLogNormal(value, mean, stdev) {\n if (value <= 0) return 0;\n mean = mean || 0;\n stdev = stdev == null ? 1 : stdev;\n const z = (Math.log(value) - mean) / stdev;\n return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI * value);\n}\nfunction cumulativeLogNormal(value, mean, stdev) {\n return cumulativeNormal(Math.log(value), mean, stdev);\n}\nfunction quantileLogNormal(p, mean, stdev) {\n return Math.exp(quantileNormal(p, mean, stdev));\n}\nfunction lognormal (mean, stdev) {\n let mu, sigma;\n const dist = {\n mean(_) {\n if (arguments.length) {\n mu = _ || 0;\n return dist;\n } else {\n return mu;\n }\n },\n\n stdev(_) {\n if (arguments.length) {\n sigma = _ == null ? 1 : _;\n return dist;\n } else {\n return sigma;\n }\n },\n\n sample: () => sampleLogNormal(mu, sigma),\n pdf: value => densityLogNormal(value, mu, sigma),\n cdf: value => cumulativeLogNormal(value, mu, sigma),\n icdf: p => quantileLogNormal(p, mu, sigma)\n };\n return dist.mean(mean).stdev(stdev);\n}\n\nfunction mixture (dists, weights) {\n let m = 0,\n w;\n\n function normalize(x) {\n const w = [];\n let sum = 0,\n i;\n\n for (i = 0; i < m; ++i) {\n sum += w[i] = x[i] == null ? 1 : +x[i];\n }\n\n for (i = 0; i < m; ++i) {\n w[i] /= sum;\n }\n\n return w;\n }\n\n const dist = {\n weights(_) {\n if (arguments.length) {\n w = normalize(weights = _ || []);\n return dist;\n }\n\n return weights;\n },\n\n distributions(_) {\n if (arguments.length) {\n if (_) {\n m = _.length;\n dists = _;\n } else {\n m = 0;\n dists = [];\n }\n\n return dist.weights(weights);\n }\n\n return dists;\n },\n\n sample() {\n const r = random();\n let d = dists[m - 1],\n v = w[0],\n i = 0; // first select distribution\n\n for (; i < m - 1; v += w[++i]) {\n if (r < v) {\n d = dists[i];\n break;\n }\n } // then sample from it\n\n\n return d.sample();\n },\n\n pdf(x) {\n let p = 0,\n i = 0;\n\n for (; i < m; ++i) {\n p += w[i] * dists[i].pdf(x);\n }\n\n return p;\n },\n\n cdf(x) {\n let p = 0,\n i = 0;\n\n for (; i < m; ++i) {\n p += w[i] * dists[i].cdf(x);\n }\n\n return p;\n },\n\n icdf() {\n throw Error('Mixture icdf not supported.');\n }\n\n };\n return dist.distributions(dists).weights(weights);\n}\n\nfunction sampleUniform(min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return min + (max - min) * random();\n}\nfunction densityUniform(value, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return value >= min && value <= max ? 1 / (max - min) : 0;\n}\nfunction cumulativeUniform(value, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return value < min ? 0 : value > max ? 1 : (value - min) / (max - min);\n}\nfunction quantileUniform(p, min, max) {\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return p >= 0 && p <= 1 ? min + p * (max - min) : NaN;\n}\nfunction uniform (min, max) {\n let a, b;\n const dist = {\n min(_) {\n if (arguments.length) {\n a = _ || 0;\n return dist;\n } else {\n return a;\n }\n },\n\n max(_) {\n if (arguments.length) {\n b = _ == null ? 1 : _;\n return dist;\n } else {\n return b;\n }\n },\n\n sample: () => sampleUniform(a, b),\n pdf: value => densityUniform(value, a, b),\n cdf: value => cumulativeUniform(value, a, b),\n icdf: p => quantileUniform(p, a, b)\n };\n\n if (max == null) {\n max = min == null ? 1 : min;\n min = 0;\n }\n\n return dist.min(min).max(max);\n}\n\n// Ordinary Least Squares\nfunction ols (uX, uY, uXY, uX2) {\n const delta = uX2 - uX * uX,\n slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta,\n intercept = uY - slope * uX;\n return [intercept, slope];\n}\n\nfunction points(data, x, y, sort) {\n data = data.filter(d => {\n let u = x(d),\n v = y(d);\n return u != null && (u = +u) >= u && v != null && (v = +v) >= v;\n });\n\n if (sort) {\n data.sort((a, b) => x(a) - x(b));\n }\n\n const n = data.length,\n X = new Float64Array(n),\n Y = new Float64Array(n); // extract values, calculate means\n\n let i = 0,\n ux = 0,\n uy = 0,\n xv,\n yv,\n d;\n\n for (d of data) {\n X[i] = xv = +x(d);\n Y[i] = yv = +y(d);\n ++i;\n ux += (xv - ux) / i;\n uy += (yv - uy) / i;\n } // mean center the data\n\n\n for (i = 0; i < n; ++i) {\n X[i] -= ux;\n Y[i] -= uy;\n }\n\n return [X, Y, ux, uy];\n}\nfunction visitPoints(data, x, y, callback) {\n let i = -1,\n u,\n v;\n\n for (const d of data) {\n u = x(d);\n v = y(d);\n\n if (u != null && (u = +u) >= u && v != null && (v = +v) >= v) {\n callback(u, v, ++i);\n }\n }\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction rSquared (data, x, y, uY, predict) {\n let SSE = 0,\n SST = 0;\n visitPoints(data, x, y, (dx, dy) => {\n const sse = dy - predict(dx),\n sst = dy - uY;\n SSE += sse * sse;\n SST += sst * sst;\n });\n return 1 - SSE / SST;\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction linear (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] + coef[1] * x;\n\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction log (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n ++n;\n dx = Math.log(dx);\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n });\n\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] + coef[1] * Math.log(x);\n\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, Y, predict)\n };\n}\n\nfunction exp (data, x, y) {\n // eslint-disable-next-line no-unused-vars\n const [xv, yv, ux, uy] = points(data, x, y);\n let YL = 0,\n XY = 0,\n XYL = 0,\n X2Y = 0,\n n = 0,\n dx,\n ly,\n xy;\n visitPoints(data, x, y, (_, dy) => {\n dx = xv[n++];\n ly = Math.log(dy);\n xy = dx * dy;\n YL += (dy * ly - YL) / n;\n XY += (xy - XY) / n;\n XYL += (xy * ly - XYL) / n;\n X2Y += (dx * xy - X2Y) / n;\n });\n\n const [c0, c1] = ols(XY / uy, YL / uy, XYL / uy, X2Y / uy),\n predict = x => Math.exp(c0 + c1 * (x - ux));\n\n return {\n coef: [Math.exp(c0 - c1 * ux), c1],\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n\nfunction pow (data, x, y) {\n let X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n YS = 0,\n n = 0;\n visitPoints(data, x, y, (dx, dy) => {\n const lx = Math.log(dx),\n ly = Math.log(dy);\n ++n;\n X += (lx - X) / n;\n Y += (ly - Y) / n;\n XY += (lx * ly - XY) / n;\n X2 += (lx * lx - X2) / n;\n YS += (dy - YS) / n;\n });\n\n const coef = ols(X, Y, XY, X2),\n predict = x => coef[0] * Math.pow(x, coef[1]);\n\n coef[0] = Math.exp(coef[0]);\n return {\n coef: coef,\n predict: predict,\n rSquared: rSquared(data, x, y, YS, predict)\n };\n}\n\nfunction quad (data, x, y) {\n const [xv, yv, ux, uy] = points(data, x, y),\n n = xv.length;\n let X2 = 0,\n X3 = 0,\n X4 = 0,\n XY = 0,\n X2Y = 0,\n i,\n dx,\n dy,\n x2;\n\n for (i = 0; i < n;) {\n dx = xv[i];\n dy = yv[i++];\n x2 = dx * dx;\n X2 += (x2 - X2) / i;\n X3 += (x2 * dx - X3) / i;\n X4 += (x2 * x2 - X4) / i;\n XY += (dx * dy - XY) / i;\n X2Y += (x2 * dy - X2Y) / i;\n }\n\n const X2X2 = X4 - X2 * X2,\n d = X2 * X2X2 - X3 * X3,\n a = (X2Y * X2 - XY * X3) / d,\n b = (XY * X2X2 - X2Y * X3) / d,\n c = -a * X2,\n predict = x => {\n x = x - ux;\n return a * x * x + b * x + c + uy;\n }; // transform coefficients back from mean-centered space\n\n\n return {\n coef: [c - b * ux + a * ux * ux + uy, b - 2 * a * ux, a],\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\n// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE\n// ... which was adapted from regression-js by Tom Alexander\n// Source: https://github.com/Tom-Alexander/regression-js/blob/master/src/regression.js#L246\n// License: https://github.com/Tom-Alexander/regression-js/blob/master/LICENSE\n\nfunction poly (data, x, y, order) {\n // use more efficient methods for lower orders\n if (order === 1) return linear(data, x, y);\n if (order === 2) return quad(data, x, y);\n const [xv, yv, ux, uy] = points(data, x, y),\n n = xv.length,\n lhs = [],\n rhs = [],\n k = order + 1;\n let i, j, l, v, c;\n\n for (i = 0; i < k; ++i) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i) * yv[l];\n }\n\n lhs.push(v);\n c = new Float64Array(k);\n\n for (j = 0; j < k; ++j) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i + j);\n }\n\n c[j] = v;\n }\n\n rhs.push(c);\n }\n\n rhs.push(lhs);\n\n const coef = gaussianElimination(rhs),\n predict = x => {\n x -= ux;\n let y = uy + coef[0] + coef[1] * x + coef[2] * x * x;\n\n for (i = 3; i < k; ++i) y += coef[i] * Math.pow(x, i);\n\n return y;\n };\n\n return {\n coef: uncenter(k, coef, -ux, uy),\n predict: predict,\n rSquared: rSquared(data, x, y, uy, predict)\n };\n}\n\nfunction uncenter(k, a, x, y) {\n const z = Array(k);\n let i, j, v, c; // initialize to zero\n\n for (i = 0; i < k; ++i) z[i] = 0; // polynomial expansion\n\n\n for (i = k - 1; i >= 0; --i) {\n v = a[i];\n c = 1;\n z[i] += v;\n\n for (j = 1; j <= i; ++j) {\n c *= (i + 1 - j) / j; // binomial coefficent\n\n z[i - j] += v * Math.pow(x, j) * c;\n }\n } // bias term\n\n\n z[0] += y;\n return z;\n} // Given an array for a two-dimensional matrix and the polynomial order,\n// solve A * x = b using Gaussian elimination.\n\n\nfunction gaussianElimination(matrix) {\n const n = matrix.length - 1,\n coef = [];\n let i, j, k, r, t;\n\n for (i = 0; i < n; ++i) {\n r = i; // max row\n\n for (j = i + 1; j < n; ++j) {\n if (Math.abs(matrix[i][j]) > Math.abs(matrix[i][r])) {\n r = j;\n }\n }\n\n for (k = i; k < n + 1; ++k) {\n t = matrix[k][i];\n matrix[k][i] = matrix[k][r];\n matrix[k][r] = t;\n }\n\n for (j = i + 1; j < n; ++j) {\n for (k = n; k >= i; k--) {\n matrix[k][j] -= matrix[k][i] * matrix[i][j] / matrix[i][i];\n }\n }\n }\n\n for (j = n - 1; j >= 0; --j) {\n t = 0;\n\n for (k = j + 1; k < n; ++k) {\n t += matrix[k][j] * coef[k];\n }\n\n coef[j] = (matrix[n][j] - t) / matrix[j][j];\n }\n\n return coef;\n}\n\nconst maxiters = 2,\n epsilon = 1e-12; // Adapted from science.js by Jason Davies\n// Source: https://github.com/jasondavies/science.js/blob/master/src/stats/loess.js\n// License: https://github.com/jasondavies/science.js/blob/master/LICENSE\n\nfunction loess (data, x, y, bandwidth) {\n const [xv, yv, ux, uy] = points(data, x, y, true),\n n = xv.length,\n bw = Math.max(2, ~~(bandwidth * n)),\n // # nearest neighbors\n yhat = new Float64Array(n),\n residuals = new Float64Array(n),\n robustWeights = new Float64Array(n).fill(1);\n\n for (let iter = -1; ++iter <= maxiters;) {\n const interval = [0, bw - 1];\n\n for (let i = 0; i < n; ++i) {\n const dx = xv[i],\n i0 = interval[0],\n i1 = interval[1],\n edge = dx - xv[i0] > xv[i1] - dx ? i0 : i1;\n let W = 0,\n X = 0,\n Y = 0,\n XY = 0,\n X2 = 0;\n const denom = 1 / Math.abs(xv[edge] - dx || 1); // avoid singularity!\n\n for (let k = i0; k <= i1; ++k) {\n const xk = xv[k],\n yk = yv[k],\n w = tricube(Math.abs(dx - xk) * denom) * robustWeights[k],\n xkw = xk * w;\n W += w;\n X += xkw;\n Y += yk * w;\n XY += yk * xkw;\n X2 += xk * xkw;\n } // linear regression fit\n\n\n const [a, b] = ols(X / W, Y / W, XY / W, X2 / W);\n yhat[i] = a + b * dx;\n residuals[i] = Math.abs(yv[i] - yhat[i]);\n updateInterval(xv, i + 1, interval);\n }\n\n if (iter === maxiters) {\n break;\n }\n\n const medianResidual = median(residuals);\n if (Math.abs(medianResidual) < epsilon) break;\n\n for (let i = 0, arg, w; i < n; ++i) {\n arg = residuals[i] / (6 * medianResidual); // default to epsilon (rather than zero) for large deviations\n // keeping weights tiny but non-zero prevents singularites\n\n robustWeights[i] = arg >= 1 ? epsilon : (w = 1 - arg * arg) * w;\n }\n }\n\n return output(xv, yhat, ux, uy);\n} // weighting kernel for local regression\n\nfunction tricube(x) {\n return (x = 1 - x * x * x) * x * x;\n} // advance sliding window interval of nearest neighbors\n\n\nfunction updateInterval(xv, i, interval) {\n const val = xv[i];\n let left = interval[0],\n right = interval[1] + 1;\n if (right >= xv.length) return; // step right if distance to new right edge is <= distance to old left edge\n // step when distance is equal to ensure movement over duplicate x values\n\n while (i > left && xv[right] - val <= val - xv[left]) {\n interval[0] = ++left;\n interval[1] = right;\n ++right;\n }\n} // generate smoothed output points\n// average points with repeated x values\n\n\nfunction output(xv, yhat, ux, uy) {\n const n = xv.length,\n out = [];\n let i = 0,\n cnt = 0,\n prev = [],\n v;\n\n for (; i < n; ++i) {\n v = xv[i] + ux;\n\n if (prev[0] === v) {\n // average output values via online update\n prev[1] += (yhat[i] - prev[1]) / ++cnt;\n } else {\n // add new output point\n cnt = 0;\n prev[1] += uy;\n prev = [v, yhat[i]];\n out.push(prev);\n }\n }\n\n prev[1] += uy;\n return out;\n}\n\n// subdivide up to accuracy of 0.1 degrees\nconst MIN_RADIANS = 0.1 * Math.PI / 180; // Adaptively sample an interpolated function over a domain extent\n\nfunction sampleCurve (f, extent, minSteps, maxSteps) {\n minSteps = minSteps || 25;\n maxSteps = Math.max(minSteps, maxSteps || 200);\n\n const point = x => [x, f(x)],\n minX = extent[0],\n maxX = extent[1],\n span = maxX - minX,\n stop = span / maxSteps,\n prev = [point(minX)],\n next = [];\n\n if (minSteps === maxSteps) {\n // no adaptation, sample uniform grid directly and return\n for (let i = 1; i < maxSteps; ++i) {\n prev.push(point(minX + i / minSteps * span));\n }\n\n prev.push(point(maxX));\n return prev;\n } else {\n // sample minimum points on uniform grid\n // then move on to perform adaptive refinement\n next.push(point(maxX));\n\n for (let i = minSteps; --i > 0;) {\n next.push(point(minX + i / minSteps * span));\n }\n }\n\n let p0 = prev[0],\n p1 = next[next.length - 1];\n\n while (p1) {\n // midpoint for potential curve subdivision\n const pm = point((p0[0] + p1[0]) / 2);\n\n if (pm[0] - p0[0] >= stop && angleDelta(p0, pm, p1) > MIN_RADIANS) {\n // maximum resolution has not yet been met, and\n // subdivision midpoint sufficiently different from endpoint\n // save subdivision, push midpoint onto the visitation stack\n next.push(pm);\n } else {\n // subdivision midpoint sufficiently similar to endpoint\n // skip subdivision, store endpoint, move to next point on the stack\n p0 = p1;\n prev.push(p1);\n next.pop();\n }\n\n p1 = next[next.length - 1];\n }\n\n return prev;\n}\n\nfunction angleDelta(p, q, r) {\n const a0 = Math.atan2(r[1] - p[1], r[0] - p[0]),\n a1 = Math.atan2(q[1] - p[1], q[0] - p[0]);\n return Math.abs(a0 - a1);\n}\n\nexport { estimateBandwidth as bandwidthNRD, bin, bootstrapCI, cumulativeLogNormal, cumulativeNormal, cumulativeUniform, densityLogNormal, densityNormal, densityUniform, dotbin, quantileLogNormal, quantileNormal, quantileUniform, quantiles, quartiles, random, integer as randomInteger, kde as randomKDE, lcg as randomLCG, lognormal as randomLogNormal, mixture as randomMixture, gaussian as randomNormal, uniform as randomUniform, exp as regressionExp, linear as regressionLinear, loess as regressionLoess, log as regressionLog, poly as regressionPoly, pow as regressionPow, quad as regressionQuad, sampleCurve, sampleLogNormal, sampleNormal, sampleUniform, setRandom };\n","import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n const v = variance(values, valueof);\n return v ? Math.sqrt(v) : v;\n}\n","export default function variance(values, valueof) {\n let count = 0;\n let delta;\n let mean = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n }\n if (count > 1) return sum / (count - 1);\n}\n","import { extend, identity, field, hasOwnProperty, extentIndex, inherits, array, accessorName, error, accessorFields, accessor, toNumber, merge, compare, truthy, extent, span, fastmap, isArray, key, ascending, peek, zero, constant } from 'vega-util';\nimport { tupleid, Transform, replace, ingest, stableCompare, Operator, derive, rederive } from 'vega-dataflow';\nimport { quartiles, bootstrapCI, bin, randomKDE, randomMixture, randomNormal, randomLogNormal, randomUniform, sampleCurve, dotbin, quantiles, random } from 'vega-statistics';\nimport { median, mean, min, max, range, bisector } from 'd3-array';\nimport { TIME_UNITS, utcInterval, timeInterval, timeBin, timeUnits, utcFloor, timeFloor } from 'vega-time';\n\nfunction multikey(f) {\n return x => {\n const n = f.length;\n let i = 1,\n k = String(f[0](x));\n\n for (; i < n; ++i) {\n k += '|' + f[i](x);\n }\n\n return k;\n };\n}\nfunction groupkey(fields) {\n return !fields || !fields.length ? function () {\n return '';\n } : fields.length === 1 ? fields[0] : multikey(fields);\n}\n\nfunction measureName(op, field, as) {\n return as || op + (!field ? '' : '_' + field);\n}\n\nconst noop = () => {};\n\nconst base_op = {\n init: noop,\n add: noop,\n rem: noop,\n idx: 0\n};\nconst AggregateOps = {\n values: {\n init: m => m.cell.store = true,\n value: m => m.cell.data.values(),\n idx: -1\n },\n count: {\n value: m => m.cell.num\n },\n __count__: {\n value: m => m.missing + m.valid\n },\n missing: {\n value: m => m.missing\n },\n valid: {\n value: m => m.valid\n },\n sum: {\n init: m => m.sum = 0,\n value: m => m.sum,\n add: (m, v) => m.sum += +v,\n rem: (m, v) => m.sum -= v\n },\n product: {\n init: m => m.product = 1,\n value: m => m.valid ? m.product : undefined,\n add: (m, v) => m.product *= v,\n rem: (m, v) => m.product /= v\n },\n mean: {\n init: m => m.mean = 0,\n value: m => m.valid ? m.mean : undefined,\n add: (m, v) => (m.mean_d = v - m.mean, m.mean += m.mean_d / m.valid),\n rem: (m, v) => (m.mean_d = v - m.mean, m.mean -= m.valid ? m.mean_d / m.valid : m.mean)\n },\n average: {\n value: m => m.valid ? m.mean : undefined,\n req: ['mean'],\n idx: 1\n },\n variance: {\n init: m => m.dev = 0,\n value: m => m.valid > 1 ? m.dev / (m.valid - 1) : undefined,\n add: (m, v) => m.dev += m.mean_d * (v - m.mean),\n rem: (m, v) => m.dev -= m.mean_d * (v - m.mean),\n req: ['mean'],\n idx: 1\n },\n variancep: {\n value: m => m.valid > 1 ? m.dev / m.valid : undefined,\n req: ['variance'],\n idx: 2\n },\n stdev: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / (m.valid - 1)) : undefined,\n req: ['variance'],\n idx: 2\n },\n stdevp: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / m.valid) : undefined,\n req: ['variance'],\n idx: 2\n },\n stderr: {\n value: m => m.valid > 1 ? Math.sqrt(m.dev / (m.valid * (m.valid - 1))) : undefined,\n req: ['variance'],\n idx: 2\n },\n distinct: {\n value: m => m.cell.data.distinct(m.get),\n req: ['values'],\n idx: 3\n },\n ci0: {\n value: m => m.cell.data.ci0(m.get),\n req: ['values'],\n idx: 3\n },\n ci1: {\n value: m => m.cell.data.ci1(m.get),\n req: ['values'],\n idx: 3\n },\n median: {\n value: m => m.cell.data.q2(m.get),\n req: ['values'],\n idx: 3\n },\n q1: {\n value: m => m.cell.data.q1(m.get),\n req: ['values'],\n idx: 3\n },\n q3: {\n value: m => m.cell.data.q3(m.get),\n req: ['values'],\n idx: 3\n },\n min: {\n init: m => m.min = undefined,\n value: m => m.min = Number.isNaN(m.min) ? m.cell.data.min(m.get) : m.min,\n add: (m, v) => {\n if (v < m.min || m.min === undefined) m.min = v;\n },\n rem: (m, v) => {\n if (v <= m.min) m.min = NaN;\n },\n req: ['values'],\n idx: 4\n },\n max: {\n init: m => m.max = undefined,\n value: m => m.max = Number.isNaN(m.max) ? m.cell.data.max(m.get) : m.max,\n add: (m, v) => {\n if (v > m.max || m.max === undefined) m.max = v;\n },\n rem: (m, v) => {\n if (v >= m.max) m.max = NaN;\n },\n req: ['values'],\n idx: 4\n },\n argmin: {\n init: m => m.argmin = undefined,\n value: m => m.argmin || m.cell.data.argmin(m.get),\n add: (m, v, t) => {\n if (v < m.min) m.argmin = t;\n },\n rem: (m, v) => {\n if (v <= m.min) m.argmin = undefined;\n },\n req: ['min', 'values'],\n idx: 3\n },\n argmax: {\n init: m => m.argmax = undefined,\n value: m => m.argmax || m.cell.data.argmax(m.get),\n add: (m, v, t) => {\n if (v > m.max) m.argmax = t;\n },\n rem: (m, v) => {\n if (v >= m.max) m.argmax = undefined;\n },\n req: ['max', 'values'],\n idx: 3\n }\n};\nconst ValidAggregateOps = Object.keys(AggregateOps);\n\nfunction measure(key, value) {\n return out => extend({\n name: key,\n out: out || key\n }, base_op, value);\n}\n\nValidAggregateOps.forEach(key => {\n AggregateOps[key] = measure(key, AggregateOps[key]);\n});\nfunction createMeasure(op, name) {\n return AggregateOps[op](name);\n}\n\nfunction compareIndex(a, b) {\n return a.idx - b.idx;\n}\n\nfunction resolve(agg) {\n const map = {};\n agg.forEach(a => map[a.name] = a);\n\n const getreqs = a => {\n if (!a.req) return;\n a.req.forEach(key => {\n if (!map[key]) getreqs(map[key] = AggregateOps[key]());\n });\n };\n\n agg.forEach(getreqs);\n return Object.values(map).sort(compareIndex);\n}\n\nfunction init() {\n this.valid = 0;\n this.missing = 0;\n\n this._ops.forEach(op => op.init(this));\n}\n\nfunction add(v, t) {\n if (v == null || v === '') {\n ++this.missing;\n return;\n }\n\n if (v !== v) return;\n ++this.valid;\n\n this._ops.forEach(op => op.add(this, v, t));\n}\n\nfunction rem(v, t) {\n if (v == null || v === '') {\n --this.missing;\n return;\n }\n\n if (v !== v) return;\n --this.valid;\n\n this._ops.forEach(op => op.rem(this, v, t));\n}\n\nfunction set(t) {\n this._out.forEach(op => t[op.out] = op.value(this));\n\n return t;\n}\n\nfunction compileMeasures(agg, field) {\n const get = field || identity,\n ops = resolve(agg),\n out = agg.slice().sort(compareIndex);\n\n function ctr(cell) {\n this._ops = ops;\n this._out = out;\n this.cell = cell;\n this.init();\n }\n\n ctr.prototype.init = init;\n ctr.prototype.add = add;\n ctr.prototype.rem = rem;\n ctr.prototype.set = set;\n ctr.prototype.get = get;\n ctr.fields = agg.map(op => op.out);\n return ctr;\n}\n\nfunction TupleStore(key) {\n this._key = key ? field(key) : tupleid;\n this.reset();\n}\nconst prototype$1 = TupleStore.prototype;\n\nprototype$1.reset = function () {\n this._add = [];\n this._rem = [];\n this._ext = null;\n this._get = null;\n this._q = null;\n};\n\nprototype$1.add = function (v) {\n this._add.push(v);\n};\n\nprototype$1.rem = function (v) {\n this._rem.push(v);\n};\n\nprototype$1.values = function () {\n this._get = null;\n if (this._rem.length === 0) return this._add;\n const a = this._add,\n r = this._rem,\n k = this._key,\n n = a.length,\n m = r.length,\n x = Array(n - m),\n map = {};\n let i, j, v; // use unique key field to clear removed values\n\n for (i = 0; i < m; ++i) {\n map[k(r[i])] = 1;\n }\n\n for (i = 0, j = 0; i < n; ++i) {\n if (map[k(v = a[i])]) {\n map[k(v)] = 0;\n } else {\n x[j++] = v;\n }\n }\n\n this._rem = [];\n return this._add = x;\n}; // memoizing statistics methods\n\n\nprototype$1.distinct = function (get) {\n const v = this.values(),\n map = {};\n let n = v.length,\n count = 0,\n s;\n\n while (--n >= 0) {\n s = get(v[n]) + '';\n\n if (!hasOwnProperty(map, s)) {\n map[s] = 1;\n ++count;\n }\n }\n\n return count;\n};\n\nprototype$1.extent = function (get) {\n if (this._get !== get || !this._ext) {\n const v = this.values(),\n i = extentIndex(v, get);\n this._ext = [v[i[0]], v[i[1]]];\n this._get = get;\n }\n\n return this._ext;\n};\n\nprototype$1.argmin = function (get) {\n return this.extent(get)[0] || {};\n};\n\nprototype$1.argmax = function (get) {\n return this.extent(get)[1] || {};\n};\n\nprototype$1.min = function (get) {\n const m = this.extent(get)[0];\n return m != null ? get(m) : undefined;\n};\n\nprototype$1.max = function (get) {\n const m = this.extent(get)[1];\n return m != null ? get(m) : undefined;\n};\n\nprototype$1.quartile = function (get) {\n if (this._get !== get || !this._q) {\n this._q = quartiles(this.values(), get);\n this._get = get;\n }\n\n return this._q;\n};\n\nprototype$1.q1 = function (get) {\n return this.quartile(get)[0];\n};\n\nprototype$1.q2 = function (get) {\n return this.quartile(get)[1];\n};\n\nprototype$1.q3 = function (get) {\n return this.quartile(get)[2];\n};\n\nprototype$1.ci = function (get) {\n if (this._get !== get || !this._ci) {\n this._ci = bootstrapCI(this.values(), 1000, 0.05, get);\n this._get = get;\n }\n\n return this._ci;\n};\n\nprototype$1.ci0 = function (get) {\n return this.ci(get)[0];\n};\n\nprototype$1.ci1 = function (get) {\n return this.ci(get)[1];\n};\n\n/**\n * Group-by aggregation operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {Array} [params.fields] - An array of accessors to aggregate.\n * @param {Array} [params.ops] - An array of strings indicating aggregation operations.\n * @param {Array} [params.as] - An array of output field names for aggregated values.\n * @param {boolean} [params.cross=false] - A flag indicating that the full\n * cross-product of groupby values should be generated, including empty cells.\n * If true, the drop parameter is ignored and empty cells are retained.\n * @param {boolean} [params.drop=true] - A flag indicating if empty cells should be removed.\n */\n\nfunction Aggregate(params) {\n Transform.call(this, null, params);\n this._adds = []; // array of added output tuples\n\n this._mods = []; // array of modified output tuples\n\n this._alen = 0; // number of active added tuples\n\n this._mlen = 0; // number of active modified tuples\n\n this._drop = true; // should empty aggregation cells be removed\n\n this._cross = false; // produce full cross-product of group-by values\n\n this._dims = []; // group-by dimension accessors\n\n this._dnames = []; // group-by dimension names\n\n this._measures = []; // collection of aggregation monoids\n\n this._countOnly = false; // flag indicating only count aggregation\n\n this._counts = null; // collection of count fields\n\n this._prev = null; // previous aggregation cells\n\n this._inputs = null; // array of dependent input tuple field names\n\n this._outputs = null; // array of output tuple field names\n}\nAggregate.Definition = {\n 'type': 'Aggregate',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidAggregateOps\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'drop',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'cross',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(Aggregate, Transform, {\n transform(_, pulse) {\n const aggr = this,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n mod = _.modified();\n\n aggr.stamp = out.stamp;\n\n if (aggr.value && (mod || pulse.modified(aggr._inputs, true))) {\n aggr._prev = aggr.value;\n aggr.value = mod ? aggr.init(_) : {};\n pulse.visit(pulse.SOURCE, t => aggr.add(t));\n } else {\n aggr.value = aggr.value || aggr.init(_);\n pulse.visit(pulse.REM, t => aggr.rem(t));\n pulse.visit(pulse.ADD, t => aggr.add(t));\n } // Indicate output fields and return aggregate tuples.\n\n\n out.modifies(aggr._outputs); // Should empty cells be dropped?\n\n aggr._drop = _.drop !== false; // If domain cross-product requested, generate empty cells as needed\n // and ensure that empty cells are not dropped\n\n if (_.cross && aggr._dims.length > 1) {\n aggr._drop = false;\n aggr.cross();\n }\n\n if (pulse.clean() && aggr._drop) {\n out.clean(true).runAfter(() => this.clean());\n }\n\n return aggr.changes(out);\n },\n\n cross() {\n const aggr = this,\n curr = aggr.value,\n dims = aggr._dnames,\n vals = dims.map(() => ({})),\n n = dims.length; // collect all group-by domain values\n\n function collect(cells) {\n let key, i, t, v;\n\n for (key in cells) {\n t = cells[key].tuple;\n\n for (i = 0; i < n; ++i) {\n vals[i][v = t[dims[i]]] = v;\n }\n }\n }\n\n collect(aggr._prev);\n collect(curr); // iterate over key cross-product, create cells as needed\n\n function generate(base, tuple, index) {\n const name = dims[index],\n v = vals[index++];\n\n for (const k in v) {\n const key = base ? base + '|' + k : k;\n tuple[name] = v[k];\n if (index < n) generate(key, tuple, index);else if (!curr[key]) aggr.cell(key, tuple);\n }\n }\n\n generate('', {}, 0);\n },\n\n init(_) {\n // initialize input and output fields\n const inputs = this._inputs = [],\n outputs = this._outputs = [],\n inputMap = {};\n\n function inputVisit(get) {\n const fields = array(accessorFields(get)),\n n = fields.length;\n let i = 0,\n f;\n\n for (; i < n; ++i) {\n if (!inputMap[f = fields[i]]) {\n inputMap[f] = 1;\n inputs.push(f);\n }\n }\n } // initialize group-by dimensions\n\n\n this._dims = array(_.groupby);\n this._dnames = this._dims.map(d => {\n const dname = accessorName(d);\n inputVisit(d);\n outputs.push(dname);\n return dname;\n });\n this.cellkey = _.key ? _.key : groupkey(this._dims); // initialize aggregate measures\n\n this._countOnly = true;\n this._counts = [];\n this._measures = [];\n const fields = _.fields || [null],\n ops = _.ops || ['count'],\n as = _.as || [],\n n = fields.length,\n map = {};\n let field, op, m, mname, outname, i;\n\n if (n !== ops.length) {\n error('Unmatched number of fields and aggregate ops.');\n }\n\n for (i = 0; i < n; ++i) {\n field = fields[i];\n op = ops[i];\n\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n\n mname = accessorName(field);\n outname = measureName(op, mname, as[i]);\n outputs.push(outname);\n\n if (op === 'count') {\n this._counts.push(outname);\n\n continue;\n }\n\n m = map[mname];\n\n if (!m) {\n inputVisit(field);\n m = map[mname] = [];\n m.field = field;\n\n this._measures.push(m);\n }\n\n if (op !== 'count') this._countOnly = false;\n m.push(createMeasure(op, outname));\n }\n\n this._measures = this._measures.map(m => compileMeasures(m, m.field));\n return {}; // aggregation cells (this.value)\n },\n\n // -- Cell Management -----\n cellkey: groupkey(),\n\n cell(key, t) {\n let cell = this.value[key];\n\n if (!cell) {\n cell = this.value[key] = this.newcell(key, t);\n this._adds[this._alen++] = cell;\n } else if (cell.num === 0 && this._drop && cell.stamp < this.stamp) {\n cell.stamp = this.stamp;\n this._adds[this._alen++] = cell;\n } else if (cell.stamp < this.stamp) {\n cell.stamp = this.stamp;\n this._mods[this._mlen++] = cell;\n }\n\n return cell;\n },\n\n newcell(key, t) {\n const cell = {\n key: key,\n num: 0,\n agg: null,\n tuple: this.newtuple(t, this._prev && this._prev[key]),\n stamp: this.stamp,\n store: false\n };\n\n if (!this._countOnly) {\n const measures = this._measures,\n n = measures.length;\n cell.agg = Array(n);\n\n for (let i = 0; i < n; ++i) {\n cell.agg[i] = new measures[i](cell);\n }\n }\n\n if (cell.store) {\n cell.data = new TupleStore();\n }\n\n return cell;\n },\n\n newtuple(t, p) {\n const names = this._dnames,\n dims = this._dims,\n n = dims.length,\n x = {};\n\n for (let i = 0; i < n; ++i) {\n x[names[i]] = dims[i](t);\n }\n\n return p ? replace(p.tuple, x) : ingest(x);\n },\n\n clean() {\n const cells = this.value;\n\n for (const key in cells) {\n if (cells[key].num === 0) {\n delete cells[key];\n }\n }\n },\n\n // -- Process Tuples -----\n add(t) {\n const key = this.cellkey(t),\n cell = this.cell(key, t);\n cell.num += 1;\n if (this._countOnly) return;\n if (cell.store) cell.data.add(t);\n const agg = cell.agg;\n\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].add(agg[i].get(t), t);\n }\n },\n\n rem(t) {\n const key = this.cellkey(t),\n cell = this.cell(key, t);\n cell.num -= 1;\n if (this._countOnly) return;\n if (cell.store) cell.data.rem(t);\n const agg = cell.agg;\n\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].rem(agg[i].get(t), t);\n }\n },\n\n celltuple(cell) {\n const tuple = cell.tuple,\n counts = this._counts; // consolidate stored values\n\n if (cell.store) {\n cell.data.values();\n } // update tuple properties\n\n\n for (let i = 0, n = counts.length; i < n; ++i) {\n tuple[counts[i]] = cell.num;\n }\n\n if (!this._countOnly) {\n const agg = cell.agg;\n\n for (let i = 0, n = agg.length; i < n; ++i) {\n agg[i].set(tuple);\n }\n }\n\n return tuple;\n },\n\n changes(out) {\n const adds = this._adds,\n mods = this._mods,\n prev = this._prev,\n drop = this._drop,\n add = out.add,\n rem = out.rem,\n mod = out.mod;\n let cell, key, i, n;\n if (prev) for (key in prev) {\n cell = prev[key];\n if (!drop || cell.num) rem.push(cell.tuple);\n }\n\n for (i = 0, n = this._alen; i < n; ++i) {\n add.push(this.celltuple(adds[i]));\n adds[i] = null; // for garbage collection\n }\n\n for (i = 0, n = this._mlen; i < n; ++i) {\n cell = mods[i];\n (cell.num === 0 && drop ? rem : mod).push(this.celltuple(cell));\n mods[i] = null; // for garbage collection\n }\n\n this._alen = this._mlen = 0; // reset list of active cells\n\n this._prev = null;\n return out;\n }\n\n});\n\nconst EPSILON$1 = 1e-14;\n/**\n * Generates a binning function for discretizing data.\n * @constructor\n * @param {object} params - The parameters for this operator. The\n * provided values should be valid options for the {@link bin} function.\n * @param {function(object): *} params.field - The data field to bin.\n */\n\nfunction Bin(params) {\n Transform.call(this, null, params);\n}\nBin.Definition = {\n 'type': 'Bin',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'interval',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'anchor',\n 'type': 'number'\n }, {\n 'name': 'maxbins',\n 'type': 'number',\n 'default': 20\n }, {\n 'name': 'base',\n 'type': 'number',\n 'default': 10\n }, {\n 'name': 'divide',\n 'type': 'number',\n 'array': true,\n 'default': [5, 2]\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'span',\n 'type': 'number'\n }, {\n 'name': 'step',\n 'type': 'number'\n }, {\n 'name': 'steps',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'minstep',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'name',\n 'type': 'string'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['bin0', 'bin1']\n }]\n};\ninherits(Bin, Transform, {\n transform(_, pulse) {\n const band = _.interval !== false,\n bins = this._bins(_),\n start = bins.start,\n step = bins.step,\n as = _.as || ['bin0', 'bin1'],\n b0 = as[0],\n b1 = as[1];\n\n let flag;\n\n if (_.modified()) {\n pulse = pulse.reflow(true);\n flag = pulse.SOURCE;\n } else {\n flag = pulse.modified(accessorFields(_.field)) ? pulse.ADD_MOD : pulse.ADD;\n }\n\n pulse.visit(flag, band ? t => {\n const v = bins(t); // minimum bin value (inclusive)\n\n t[b0] = v; // maximum bin value (exclusive)\n // use convoluted math for better floating point agreement\n // see https://github.com/vega/vega/issues/830\n // infinite values propagate through this formula! #2227\n\n t[b1] = v == null ? null : start + step * (1 + (v - start) / step);\n } : t => t[b0] = bins(t));\n return pulse.modifies(band ? as : b0);\n },\n\n _bins(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n\n const field = _.field,\n bins = bin(_),\n step = bins.step;\n let start = bins.start,\n stop = start + Math.ceil((bins.stop - start) / step) * step,\n a,\n d;\n\n if ((a = _.anchor) != null) {\n d = a - (start + step * Math.floor((a - start) / step));\n start += d;\n stop += d;\n }\n\n const f = function (t) {\n let v = toNumber(field(t));\n return v == null ? null : v < start ? -Infinity : v > stop ? +Infinity : (v = Math.max(start, Math.min(v, stop - step)), start + step * Math.floor(EPSILON$1 + (v - start) / step));\n };\n\n f.start = start;\n f.stop = bins.stop;\n f.step = step;\n return this.value = accessor(f, accessorFields(field), _.name || 'bin_' + accessorName(field));\n }\n\n});\n\nfunction SortedList (idFunc, source, input) {\n const $ = idFunc;\n let data = source || [],\n add = input || [],\n rem = {},\n cnt = 0;\n return {\n add: t => add.push(t),\n remove: t => rem[$(t)] = ++cnt,\n size: () => data.length,\n data: (compare, resort) => {\n if (cnt) {\n data = data.filter(t => !rem[$(t)]);\n rem = {};\n cnt = 0;\n }\n\n if (resort && compare) {\n data.sort(compare);\n }\n\n if (add.length) {\n data = compare ? merge(compare, data, add.sort(compare)) : data.concat(add);\n add = [];\n }\n\n return data;\n }\n };\n}\n\n/**\n * Collects all data tuples that pass through this operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for additionally sorting the collected tuples.\n */\n\nfunction Collect(params) {\n Transform.call(this, [], params);\n}\nCollect.Definition = {\n 'type': 'Collect',\n 'metadata': {\n 'source': true\n },\n 'params': [{\n 'name': 'sort',\n 'type': 'compare'\n }]\n};\ninherits(Collect, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.ALL),\n list = SortedList(tupleid, this.value, out.materialize(out.ADD).add),\n sort = _.sort,\n mod = pulse.changed() || sort && (_.modified('sort') || pulse.modified(sort.fields));\n out.visit(out.REM, list.remove);\n this.modified(mod);\n this.value = out.source = list.data(stableCompare(sort), mod); // propagate tree root if defined\n\n if (pulse.source && pulse.source.root) {\n this.value.root = pulse.source.root;\n }\n\n return out;\n }\n\n});\n\n/**\n * Generates a comparator function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - The fields to compare.\n * @param {Array} [params.orders] - The sort orders.\n * Each entry should be one of \"ascending\" (default) or \"descending\".\n */\n\nfunction Compare(params) {\n Operator.call(this, null, update$5, params);\n}\ninherits(Compare, Operator);\n\nfunction update$5(_) {\n return this.value && !_.modified() ? this.value : compare(_.fields, _.orders);\n}\n\n/**\n * Count regexp-defined pattern occurrences in a text field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the text field.\n * @param {string} [params.pattern] - RegExp string defining the text pattern.\n * @param {string} [params.case] - One of 'lower', 'upper' or null (mixed) case.\n * @param {string} [params.stopwords] - RegExp string of words to ignore.\n */\n\nfunction CountPattern(params) {\n Transform.call(this, null, params);\n}\nCountPattern.Definition = {\n 'type': 'CountPattern',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'case',\n 'type': 'enum',\n 'values': ['upper', 'lower', 'mixed'],\n 'default': 'mixed'\n }, {\n 'name': 'pattern',\n 'type': 'string',\n 'default': '[\\\\w\"]+'\n }, {\n 'name': 'stopwords',\n 'type': 'string',\n 'default': ''\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['text', 'count']\n }]\n};\n\nfunction tokenize(text, tcase, match) {\n switch (tcase) {\n case 'upper':\n text = text.toUpperCase();\n break;\n\n case 'lower':\n text = text.toLowerCase();\n break;\n }\n\n return text.match(match);\n}\n\ninherits(CountPattern, Transform, {\n transform(_, pulse) {\n const process = update => tuple => {\n var tokens = tokenize(get(tuple), _.case, match) || [],\n t;\n\n for (var i = 0, n = tokens.length; i < n; ++i) {\n if (!stop.test(t = tokens[i])) update(t);\n }\n };\n\n const init = this._parameterCheck(_, pulse),\n counts = this._counts,\n match = this._match,\n stop = this._stop,\n get = _.field,\n as = _.as || ['text', 'count'],\n add = process(t => counts[t] = 1 + (counts[t] || 0)),\n rem = process(t => counts[t] -= 1);\n\n if (init) {\n pulse.visit(pulse.SOURCE, add);\n } else {\n pulse.visit(pulse.ADD, add);\n pulse.visit(pulse.REM, rem);\n }\n\n return this._finish(pulse, as); // generate output tuples\n },\n\n _parameterCheck(_, pulse) {\n let init = false;\n\n if (_.modified('stopwords') || !this._stop) {\n this._stop = new RegExp('^' + (_.stopwords || '') + '$', 'i');\n init = true;\n }\n\n if (_.modified('pattern') || !this._match) {\n this._match = new RegExp(_.pattern || '[\\\\w\\']+', 'g');\n init = true;\n }\n\n if (_.modified('field') || pulse.modified(_.field.fields)) {\n init = true;\n }\n\n if (init) this._counts = {};\n return init;\n },\n\n _finish(pulse, as) {\n const counts = this._counts,\n tuples = this._tuples || (this._tuples = {}),\n text = as[0],\n count = as[1],\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n let w, t, c;\n\n for (w in counts) {\n t = tuples[w];\n c = counts[w] || 0;\n\n if (!t && c) {\n tuples[w] = t = ingest({});\n t[text] = w;\n t[count] = c;\n out.add.push(t);\n } else if (c === 0) {\n if (t) out.rem.push(t);\n counts[w] = null;\n tuples[w] = null;\n } else if (t[count] !== c) {\n t[count] = c;\n out.mod.push(t);\n }\n }\n\n return out.modifies(as);\n }\n\n});\n\n/**\n * Perform a cross-product of a tuple stream with itself.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object):boolean} [params.filter] - An optional filter\n * function for selectively including tuples in the cross product.\n * @param {Array} [params.as] - The names of the output fields.\n */\n\nfunction Cross(params) {\n Transform.call(this, null, params);\n}\nCross.Definition = {\n 'type': 'Cross',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'filter',\n 'type': 'expr'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['a', 'b']\n }]\n};\ninherits(Cross, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n as = _.as || ['a', 'b'],\n a = as[0],\n b = as[1],\n reset = !this.value || pulse.changed(pulse.ADD_REM) || _.modified('as') || _.modified('filter');\n\n let data = this.value;\n\n if (reset) {\n if (data) out.rem = data;\n data = pulse.materialize(pulse.SOURCE).source;\n out.add = this.value = cross(data, a, b, _.filter || truthy);\n } else {\n out.mod = data;\n }\n\n out.source = this.value;\n return out.modifies(as);\n }\n\n});\n\nfunction cross(input, a, b, filter) {\n var data = [],\n t = {},\n n = input.length,\n i = 0,\n j,\n left;\n\n for (; i < n; ++i) {\n t[a] = left = input[i];\n\n for (j = 0; j < n; ++j) {\n t[b] = input[j];\n\n if (filter(t)) {\n data.push(ingest(t));\n t = {};\n t[a] = left;\n }\n }\n }\n\n return data;\n}\n\nconst Distributions = {\n kde: randomKDE,\n mixture: randomMixture,\n normal: randomNormal,\n lognormal: randomLogNormal,\n uniform: randomUniform\n};\nconst DISTRIBUTIONS = 'distributions',\n FUNCTION = 'function',\n FIELD = 'field';\n/**\n * Parse a parameter object for a probability distribution.\n * @param {object} def - The distribution parameter object.\n * @param {function():Array} - A method for requesting\n * source data. Used for distributions (such as KDE) that\n * require sample data points. This method will only be\n * invoked if the 'from' parameter for a target data source\n * is not provided. Typically this method returns backing\n * source data for a Pulse object.\n * @return {object} - The output distribution object.\n */\n\nfunction parse(def, data) {\n const func = def[FUNCTION];\n\n if (!hasOwnProperty(Distributions, func)) {\n error('Unknown distribution function: ' + func);\n }\n\n const d = Distributions[func]();\n\n for (const name in def) {\n // if data field, extract values\n if (name === FIELD) {\n d.data((def.from || data()).map(def[name]));\n } // if distribution mixture, recurse to parse each definition\n else if (name === DISTRIBUTIONS) {\n d[name](def[name].map(_ => parse(_, data)));\n } // otherwise, simply set the parameter\n else if (typeof d[name] === FUNCTION) {\n d[name](def[name]);\n }\n }\n\n return d;\n}\n\n/**\n * Grid sample points for a probability density. Given a distribution and\n * a sampling extent, will generate points suitable for plotting either\n * PDF (probability density function) or CDF (cumulative distribution\n * function) curves.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.distribution - The probability distribution. This\n * is an object parameter dependent on the distribution type.\n * @param {string} [params.method='pdf'] - The distribution method to sample.\n * One of 'pdf' or 'cdf'.\n * @param {Array} [params.extent] - The [min, max] extent over which\n * to sample the distribution. This argument is required in most cases, but\n * can be omitted if the distribution (e.g., 'kde') supports a 'data' method\n * that returns numerical sample points from which the extent can be deduced.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\n\nfunction Density(params) {\n Transform.call(this, null, params);\n}\nconst distributions = [{\n 'key': {\n 'function': 'normal'\n },\n 'params': [{\n 'name': 'mean',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'stdev',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'lognormal'\n },\n 'params': [{\n 'name': 'mean',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'stdev',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'uniform'\n },\n 'params': [{\n 'name': 'min',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'max',\n 'type': 'number',\n 'default': 1\n }]\n}, {\n 'key': {\n 'function': 'kde'\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'from',\n 'type': 'data'\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0\n }]\n}];\nconst mixture = {\n 'key': {\n 'function': 'mixture'\n },\n 'params': [{\n 'name': 'distributions',\n 'type': 'param',\n 'array': true,\n 'params': distributions\n }, {\n 'name': 'weights',\n 'type': 'number',\n 'array': true\n }]\n};\nDensity.Definition = {\n 'type': 'Density',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'steps',\n 'type': 'number'\n }, {\n 'name': 'minsteps',\n 'type': 'number',\n 'default': 25\n }, {\n 'name': 'maxsteps',\n 'type': 'number',\n 'default': 200\n }, {\n 'name': 'method',\n 'type': 'string',\n 'default': 'pdf',\n 'values': ['pdf', 'cdf']\n }, {\n 'name': 'distribution',\n 'type': 'param',\n 'params': distributions.concat(mixture)\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['value', 'density']\n }]\n};\ninherits(Density, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n if (!this.value || pulse.changed() || _.modified()) {\n const dist = parse(_.distribution, source(pulse)),\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200;\n let method = _.method || 'pdf';\n\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n\n if (!_.extent && !dist.data) {\n error('Missing density extent parameter.');\n }\n\n method = dist[method];\n const as = _.as || ['value', 'density'],\n domain = _.extent || extent(dist.data()),\n values = sampleCurve(method, domain, minsteps, maxsteps).map(v => {\n const tuple = {};\n tuple[as[0]] = v[0];\n tuple[as[1]] = v[1];\n return ingest(tuple);\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n\n return out;\n }\n\n});\n\nfunction source(pulse) {\n return () => pulse.materialize(pulse.SOURCE).source;\n}\n\nfunction fieldNames(fields, as) {\n if (!fields) return null;\n return fields.map((f, i) => as[i] || accessorName(f));\n}\nfunction partition$1(data, groupby, field) {\n const groups = [],\n get = f => f(t);\n\n let map, i, n, t, k, g; // partition data points into groups\n\n if (groupby == null) {\n groups.push(data.map(field));\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n\n g.push(field(t));\n }\n }\n\n return groups;\n}\n\nconst Output = 'bin';\n/**\n * Dot density binning for dot plot construction.\n * Based on Leland Wilkinson, Dot Plots, The American Statistician, 1999.\n * https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to bin.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {number} [params.step] - The step size (bin width) within which dots should be\n * stacked. Defaults to 1/30 of the extent of the data *field*.\n * @param {boolean} [params.smooth=false] - A boolean flag indicating if dot density\n * stacks should be smoothed to reduce variance.\n */\n\nfunction DotBin(params) {\n Transform.call(this, null, params);\n}\nDotBin.Definition = {\n 'type': 'DotBin',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number'\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': Output\n }]\n};\n\nconst autostep = (data, field) => span(extent(data, field)) / 30;\n\ninherits(DotBin, Transform, {\n transform(_, pulse) {\n if (this.value && !(_.modified() || pulse.changed())) {\n return pulse; // early exit\n }\n\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(pulse.source, _.groupby, identity),\n smooth = _.smooth || false,\n field = _.field,\n step = _.step || autostep(source, field),\n sort = stableCompare((a, b) => field(a) - field(b)),\n as = _.as || Output,\n n = groups.length; // compute dotplot bins per group\n\n let min = Infinity,\n max = -Infinity,\n i = 0,\n j;\n\n for (; i < n; ++i) {\n const g = groups[i].sort(sort);\n j = -1;\n\n for (const v of dotbin(g, step, smooth, field)) {\n if (v < min) min = v;\n if (v > max) max = v;\n g[++j][as] = v;\n }\n }\n\n this.value = {\n start: min,\n stop: max,\n step: step\n };\n return pulse.reflow(true).modifies(as);\n }\n\n});\n\n/**\n * Wraps an expression function with access to external parameters.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function} params.expr - The expression function. The\n * function should accept both a datum and a parameter object.\n * This operator's value will be a new function that wraps the\n * expression function with access to this operator's parameters.\n */\n\nfunction Expression(params) {\n Operator.call(this, null, update$4, params);\n this.modified(true);\n}\ninherits(Expression, Operator);\n\nfunction update$4(_) {\n const expr = _.expr;\n return this.value && !_.modified('expr') ? this.value : accessor(datum => expr(datum, _), accessorFields(expr), accessorName(expr));\n}\n\n/**\n * Computes extents (min/max) for a data field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field over which to compute extends.\n */\n\nfunction Extent(params) {\n Transform.call(this, [undefined, undefined], params);\n}\nExtent.Definition = {\n 'type': 'Extent',\n 'metadata': {},\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }]\n};\ninherits(Extent, Transform, {\n transform(_, pulse) {\n const extent = this.value,\n field = _.field,\n mod = pulse.changed() || pulse.modified(field.fields) || _.modified('field');\n\n let min = extent[0],\n max = extent[1];\n\n if (mod || min == null) {\n min = +Infinity;\n max = -Infinity;\n }\n\n pulse.visit(mod ? pulse.SOURCE : pulse.ADD, t => {\n const v = toNumber(field(t));\n\n if (v != null) {\n // NaNs will fail all comparisons!\n if (v < min) min = v;\n if (v > max) max = v;\n }\n });\n\n if (!Number.isFinite(min) || !Number.isFinite(max)) {\n let name = accessorName(field);\n if (name) name = ` for field \"${name}\"`;\n pulse.dataflow.warn(`Infinite extent${name}: [${min}, ${max}]`);\n min = max = undefined;\n }\n\n this.value = [min, max];\n }\n\n});\n\n/**\n * Provides a bridge between a parent transform and a target subflow that\n * consumes only a subset of the tuples that pass through the parent.\n * @constructor\n * @param {Pulse} pulse - A pulse to use as the value of this operator.\n * @param {Transform} parent - The parent transform (typically a Facet instance).\n */\n\nfunction Subflow(pulse, parent) {\n Operator.call(this, pulse);\n this.parent = parent;\n this.count = 0;\n}\ninherits(Subflow, Operator, {\n /**\n * Routes pulses from this subflow to a target transform.\n * @param {Transform} target - A transform that receives the subflow of tuples.\n */\n connect(target) {\n this.detachSubflow = target.detachSubflow;\n this.targets().add(target);\n return target.source = this;\n },\n\n /**\n * Add an 'add' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being added.\n */\n add(t) {\n this.count += 1;\n this.value.add.push(t);\n },\n\n /**\n * Add a 'rem' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being removed.\n */\n rem(t) {\n this.count -= 1;\n this.value.rem.push(t);\n },\n\n /**\n * Add a 'mod' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being modified.\n */\n mod(t) {\n this.value.mod.push(t);\n },\n\n /**\n * Re-initialize this operator's pulse value.\n * @param {Pulse} pulse - The pulse to copy from.\n * @see Pulse.init\n */\n init(pulse) {\n this.value.init(pulse, pulse.NO_SOURCE);\n },\n\n /**\n * Evaluate this operator. This method overrides the\n * default behavior to simply return the contained pulse value.\n * @return {Pulse}\n */\n evaluate() {\n // assert: this.value.stamp === pulse.stamp\n return this.value;\n }\n\n});\n\n/**\n * Facets a dataflow into a set of subflows based on a key.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): *} params.key - The key field to facet by.\n */\n\nfunction Facet(params) {\n Transform.call(this, {}, params);\n this._keys = fastmap(); // cache previously calculated key values\n // keep track of active subflows, use as targets array for listeners\n // this allows us to limit propagation to only updated subflows\n\n const a = this._targets = [];\n a.active = 0;\n\n a.forEach = f => {\n for (let i = 0, n = a.active; i < n; ++i) {\n f(a[i], i, a);\n }\n };\n}\ninherits(Facet, Transform, {\n activate(flow) {\n this._targets[this._targets.active++] = flow;\n },\n\n // parent argument provided by PreFacet subclass\n subflow(key, flow, pulse, parent) {\n const flows = this.value;\n let sf = hasOwnProperty(flows, key) && flows[key],\n df,\n p;\n\n if (!sf) {\n p = parent || (p = this._group[key]) && p.tuple;\n df = pulse.dataflow;\n sf = new Subflow(pulse.fork(pulse.NO_SOURCE), this);\n df.add(sf).connect(flow(df, key, p));\n flows[key] = sf;\n this.activate(sf);\n } else if (sf.value.stamp < pulse.stamp) {\n sf.init(pulse);\n this.activate(sf);\n }\n\n return sf;\n },\n\n clean() {\n const flows = this.value;\n let detached = 0;\n\n for (const key in flows) {\n if (flows[key].count === 0) {\n const detach = flows[key].detachSubflow;\n if (detach) detach();\n delete flows[key];\n ++detached;\n }\n } // remove inactive targets from the active targets array\n\n\n if (detached) {\n const active = this._targets.filter(sf => sf && sf.count > 0);\n\n this.initTargets(active);\n }\n },\n\n initTargets(act) {\n const a = this._targets,\n n = a.length,\n m = act ? act.length : 0;\n let i = 0;\n\n for (; i < m; ++i) {\n a[i] = act[i];\n }\n\n for (; i < n && a[i] != null; ++i) {\n a[i] = null; // ensure old flows can be garbage collected\n }\n\n a.active = m;\n },\n\n transform(_, pulse) {\n const df = pulse.dataflow,\n key = _.key,\n flow = _.subflow,\n cache = this._keys,\n rekey = _.modified('key'),\n subflow = key => this.subflow(key, flow, pulse);\n\n this._group = _.group || {};\n this.initTargets(); // reset list of active subflows\n\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t),\n k = cache.get(id);\n\n if (k !== undefined) {\n cache.delete(id);\n subflow(k).rem(t);\n }\n });\n pulse.visit(pulse.ADD, t => {\n const k = key(t);\n cache.set(tupleid(t), k);\n subflow(k).add(t);\n });\n\n if (rekey || pulse.modified(key.fields)) {\n pulse.visit(pulse.MOD, t => {\n const id = tupleid(t),\n k0 = cache.get(id),\n k1 = key(t);\n\n if (k0 === k1) {\n subflow(k1).mod(t);\n } else {\n cache.set(id, k1);\n subflow(k0).rem(t);\n subflow(k1).add(t);\n }\n });\n } else if (pulse.changed(pulse.MOD)) {\n pulse.visit(pulse.MOD, t => {\n subflow(cache.get(tupleid(t))).mod(t);\n });\n }\n\n if (rekey) {\n pulse.visit(pulse.REFLOW, t => {\n const id = tupleid(t),\n k0 = cache.get(id),\n k1 = key(t);\n\n if (k0 !== k1) {\n cache.set(id, k1);\n subflow(k0).rem(t);\n subflow(k1).add(t);\n }\n });\n }\n\n if (pulse.clean()) {\n df.runAfter(() => {\n this.clean();\n cache.clean();\n });\n } else if (cache.empty > df.cleanThreshold) {\n df.runAfter(cache.clean);\n }\n\n return pulse;\n }\n\n});\n\n/**\n * Generates one or more field accessor functions.\n * If the 'name' parameter is an array, an array of field accessors\n * will be created and the 'as' parameter will be ignored.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.name - The field name(s) to access.\n * @param {string} params.as - The accessor function name.\n */\n\nfunction Field(params) {\n Operator.call(this, null, update$3, params);\n}\ninherits(Field, Operator);\n\nfunction update$3(_) {\n return this.value && !_.modified() ? this.value : isArray(_.name) ? array(_.name).map(f => field(f)) : field(_.name, _.as);\n}\n\n/**\n * Filters data tuples according to a predicate function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The predicate expression function\n * that determines a tuple's filter status. Truthy values pass the filter.\n */\n\nfunction Filter(params) {\n Transform.call(this, fastmap(), params);\n}\nFilter.Definition = {\n 'type': 'Filter',\n 'metadata': {\n 'changes': true\n },\n 'params': [{\n 'name': 'expr',\n 'type': 'expr',\n 'required': true\n }]\n};\ninherits(Filter, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow,\n cache = this.value,\n // cache ids of filtered tuples\n output = pulse.fork(),\n add = output.add,\n rem = output.rem,\n mod = output.mod,\n test = _.expr;\n let isMod = true;\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n if (!cache.has(id)) rem.push(t);else cache.delete(id);\n });\n pulse.visit(pulse.ADD, t => {\n if (test(t, _)) add.push(t);else cache.set(tupleid(t), 1);\n });\n\n function revisit(t) {\n const id = tupleid(t),\n b = test(t, _),\n s = cache.get(id);\n\n if (b && s) {\n cache.delete(id);\n add.push(t);\n } else if (!b && !s) {\n cache.set(id, 1);\n rem.push(t);\n } else if (isMod && b && !s) {\n mod.push(t);\n }\n }\n\n pulse.visit(pulse.MOD, revisit);\n\n if (_.modified()) {\n isMod = false;\n pulse.visit(pulse.REFLOW, revisit);\n }\n\n if (cache.empty > df.cleanThreshold) df.runAfter(cache.clean);\n return output;\n }\n\n});\n\n/**\n * Flattens array-typed field values into new data objects.\n * If multiple fields are specified, they are treated as parallel arrays,\n * with output values included for each matching index (or null if missing).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of field\n * accessors for the tuple fields that should be flattened.\n * @param {string} [params.index] - Optional output field name for index\n * value. If unspecified, no index field is included in the output.\n * @param {Array} [params.as] - Output field names for flattened\n * array fields. Any unspecified fields will use the field name provided\n * by the fields accessors.\n */\n\nfunction Flatten(params) {\n Transform.call(this, [], params);\n}\nFlatten.Definition = {\n 'type': 'Flatten',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'index',\n 'type': 'string'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Flatten, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(fields, _.as || []),\n index = _.index || null,\n m = as.length; // remove any previous results\n\n out.rem = this.value; // generate flattened tuples\n\n pulse.visit(pulse.SOURCE, t => {\n const arrays = fields.map(f => f(t)),\n maxlen = arrays.reduce((l, a) => Math.max(l, a.length), 0);\n let i = 0,\n j,\n d,\n v;\n\n for (; i < maxlen; ++i) {\n d = derive(t);\n\n for (j = 0; j < m; ++j) {\n d[as[j]] = (v = arrays[j][i]) == null ? null : v;\n }\n\n if (index) {\n d[index] = i;\n }\n\n out.add.push(d);\n }\n });\n this.value = out.source = out.add;\n if (index) out.modifies(index);\n return out.modifies(as);\n }\n\n});\n\n/**\n * Folds one more tuple fields into multiple tuples in which the field\n * name and values are available under new 'key' and 'value' fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.fields - An array of field accessors\n * for the tuple fields that should be folded.\n * @param {Array} [params.as] - Output field names for folded key\n * and value fields, defaults to ['key', 'value'].\n */\n\nfunction Fold(params) {\n Transform.call(this, [], params);\n}\nFold.Definition = {\n 'type': 'Fold',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['key', 'value']\n }]\n};\ninherits(Fold, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n fnames = fields.map(accessorName),\n as = _.as || ['key', 'value'],\n k = as[0],\n v = as[1],\n n = fields.length;\n out.rem = this.value;\n pulse.visit(pulse.SOURCE, t => {\n for (let i = 0, d; i < n; ++i) {\n d = derive(t);\n d[k] = fnames[i];\n d[v] = fields[i](t);\n out.add.push(d);\n }\n });\n this.value = out.source = out.add;\n return out.modifies(as);\n }\n\n});\n\n/**\n * Invokes a function for each data tuple and saves the results as a new field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The formula function to invoke for each tuple.\n * @param {string} params.as - The field name under which to save the result.\n * @param {boolean} [params.initonly=false] - If true, the formula is applied to\n * added tuples only, and does not update in response to modifications.\n */\n\nfunction Formula(params) {\n Transform.call(this, null, params);\n}\nFormula.Definition = {\n 'type': 'Formula',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'expr',\n 'type': 'expr',\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'required': true\n }, {\n 'name': 'initonly',\n 'type': 'boolean'\n }]\n};\ninherits(Formula, Transform, {\n transform(_, pulse) {\n const func = _.expr,\n as = _.as,\n mod = _.modified(),\n flag = _.initonly ? pulse.ADD : mod ? pulse.SOURCE : pulse.modified(func.fields) || pulse.modified(as) ? pulse.ADD_MOD : pulse.ADD;\n\n if (mod) {\n // parameters updated, need to reflow\n pulse = pulse.materialize().reflow(true);\n }\n\n if (!_.initonly) {\n pulse.modifies(as);\n }\n\n return pulse.visit(flag, t => t[as] = func(t, _));\n }\n\n});\n\n/**\n * Generates data tuples using a provided generator function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Parameters): object} params.generator - A tuple generator\n * function. This function is given the operator parameters as input.\n * Changes to any additional parameters will not trigger re-calculation\n * of previously generated tuples. Only future tuples are affected.\n * @param {number} params.size - The number of tuples to produce.\n */\n\nfunction Generate(params) {\n Transform.call(this, [], params);\n}\ninherits(Generate, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.ALL),\n gen = _.generator;\n let data = this.value,\n num = _.size - data.length,\n add,\n rem,\n t;\n\n if (num > 0) {\n // need more tuples, generate and add\n for (add = []; --num >= 0;) {\n add.push(t = ingest(gen(_)));\n data.push(t);\n }\n\n out.add = out.add.length ? out.materialize(out.ADD).add.concat(add) : add;\n } else {\n // need fewer tuples, remove\n rem = data.slice(0, -num);\n out.rem = out.rem.length ? out.materialize(out.REM).rem.concat(rem) : rem;\n data = data.slice(-num);\n }\n\n out.source = this.value = data;\n return out;\n }\n\n});\n\nconst Methods = {\n value: 'value',\n median: median,\n mean: mean,\n min: min,\n max: max\n};\nconst Empty = [];\n/**\n * Impute missing values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to impute.\n * @param {Array} [params.groupby] - An array of\n * accessors to determine series within which to perform imputation.\n * @param {function(object): *} params.key - An accessor for a key value.\n * Each key value should be unique within a group. New tuples will be\n * imputed for any key values that are not found within a group.\n * @param {Array<*>} [params.keyvals] - Optional array of required key\n * values. New tuples will be imputed for any key values that are not\n * found within a group. In addition, these values will be automatically\n * augmented with the key values observed in the input data.\n * @param {string} [method='value'] - The imputation method to use. One of\n * 'value', 'mean', 'median', 'max', 'min'.\n * @param {*} [value=0] - The constant value to use for imputation\n * when using method 'value'.\n */\n\nfunction Impute(params) {\n Transform.call(this, [], params);\n}\nImpute.Definition = {\n 'type': 'Impute',\n 'metadata': {\n 'changes': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'keyvals',\n 'array': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'value',\n 'values': ['value', 'mean', 'median', 'max', 'min']\n }, {\n 'name': 'value',\n 'default': 0\n }]\n};\n\nfunction getValue(_) {\n var m = _.method || Methods.value,\n v;\n\n if (Methods[m] == null) {\n error('Unrecognized imputation method: ' + m);\n } else if (m === Methods.value) {\n v = _.value !== undefined ? _.value : 0;\n return () => v;\n } else {\n return Methods[m];\n }\n}\n\nfunction getField(_) {\n const f = _.field;\n return t => t ? f(t) : NaN;\n}\n\ninherits(Impute, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n impute = getValue(_),\n field = getField(_),\n fName = accessorName(_.field),\n kName = accessorName(_.key),\n gNames = (_.groupby || []).map(accessorName),\n groups = partition(pulse.source, _.groupby, _.key, _.keyvals),\n curr = [],\n prev = this.value,\n m = groups.domain.length,\n group,\n value,\n gVals,\n kVal,\n g,\n i,\n j,\n l,\n n,\n t;\n\n for (g = 0, l = groups.length; g < l; ++g) {\n group = groups[g];\n gVals = group.values;\n value = NaN; // add tuples for missing values\n\n for (j = 0; j < m; ++j) {\n if (group[j] != null) continue;\n kVal = groups.domain[j];\n t = {\n _impute: true\n };\n\n for (i = 0, n = gVals.length; i < n; ++i) t[gNames[i]] = gVals[i];\n\n t[kName] = kVal;\n t[fName] = Number.isNaN(value) ? value = impute(group, field) : value;\n curr.push(ingest(t));\n }\n } // update pulse with imputed tuples\n\n\n if (curr.length) out.add = out.materialize(out.ADD).add.concat(curr);\n if (prev.length) out.rem = out.materialize(out.REM).rem.concat(prev);\n this.value = curr;\n return out;\n }\n\n});\n\nfunction partition(data, groupby, key, keyvals) {\n var get = f => f(t),\n groups = [],\n domain = keyvals ? keyvals.slice() : [],\n kMap = {},\n gMap = {},\n gVals,\n gKey,\n group,\n i,\n j,\n k,\n n,\n t;\n\n domain.forEach((k, i) => kMap[k] = i + 1);\n\n for (i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = key(t);\n j = kMap[k] || (kMap[k] = domain.push(k));\n gKey = (gVals = groupby ? groupby.map(get) : Empty) + '';\n\n if (!(group = gMap[gKey])) {\n group = gMap[gKey] = [];\n groups.push(group);\n group.values = gVals;\n }\n\n group[j - 1] = t;\n }\n\n groups.domain = domain;\n return groups;\n}\n\n/**\n * Extend input tuples with aggregate values.\n * Calcuates aggregate values and joins them with the input stream.\n * @constructor\n */\n\nfunction JoinAggregate(params) {\n Aggregate.call(this, params);\n}\nJoinAggregate.Definition = {\n 'type': 'JoinAggregate',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidAggregateOps\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(JoinAggregate, Aggregate, {\n transform(_, pulse) {\n const aggr = this,\n mod = _.modified();\n\n let cells; // process all input tuples to calculate aggregates\n\n if (aggr.value && (mod || pulse.modified(aggr._inputs, true))) {\n cells = aggr.value = mod ? aggr.init(_) : {};\n pulse.visit(pulse.SOURCE, t => aggr.add(t));\n } else {\n cells = aggr.value = aggr.value || this.init(_);\n pulse.visit(pulse.REM, t => aggr.rem(t));\n pulse.visit(pulse.ADD, t => aggr.add(t));\n } // update aggregation cells\n\n\n aggr.changes(); // write aggregate values to input tuples\n\n pulse.visit(pulse.SOURCE, t => {\n extend(t, cells[aggr.cellkey(t)].tuple);\n });\n return pulse.reflow(mod).modifies(this._outputs);\n },\n\n changes() {\n const adds = this._adds,\n mods = this._mods;\n let i, n;\n\n for (i = 0, n = this._alen; i < n; ++i) {\n this.celltuple(adds[i]);\n adds[i] = null; // for garbage collection\n }\n\n for (i = 0, n = this._mlen; i < n; ++i) {\n this.celltuple(mods[i]);\n mods[i] = null; // for garbage collection\n }\n\n this._alen = this._mlen = 0; // reset list of active cells\n }\n\n});\n\n/**\n * Compute kernel density estimates (KDE) for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {function(object): *} params.field - An accessor for the data field\n * to estimate.\n * @param {number} [params.bandwidth=0] - The KDE kernel bandwidth.\n * If zero or unspecified, the bandwidth is automatically determined.\n * @param {boolean} [params.counts=false] - A boolean flag indicating if the\n * output values should be probability estimates (false, default) or\n * smoothed counts (true).\n * @param {string} [params.cumulative=false] - A boolean flag indicating if a\n * density (false) or cumulative distribution (true) should be generated.\n * @param {Array} [params.extent] - The domain extent over which to\n * plot the density. If unspecified, the [min, max] data extent is used.\n * @param {string} [params.resolve='independent'] - Indicates how parameters for\n * multiple densities should be resolved. If \"independent\" (the default), each\n * density may have its own domain extent and dynamic number of curve sample\n * steps. If \"shared\", the KDE transform will ensure that all densities are\n * defined over a shared domain and curve steps, enabling stacking.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\n\nfunction KDE(params) {\n Transform.call(this, null, params);\n}\nKDE.Definition = {\n 'type': 'KDE',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'cumulative',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'counts',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'steps',\n 'type': 'number'\n }, {\n 'name': 'minsteps',\n 'type': 'number',\n 'default': 25\n }, {\n 'name': 'maxsteps',\n 'type': 'number',\n 'default': 200\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['value', 'density']\n }]\n};\ninherits(KDE, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(source, _.groupby, _.field),\n names = (_.groupby || []).map(accessorName),\n bandwidth = _.bandwidth,\n method = _.cumulative ? 'cdf' : 'pdf',\n as = _.as || ['value', 'density'],\n values = [];\n let domain = _.extent,\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200;\n\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n\n if (_.resolve === 'shared') {\n if (!domain) domain = extent(source, _.field);\n minsteps = maxsteps = _.steps || maxsteps;\n }\n\n groups.forEach(g => {\n const density = randomKDE(g, bandwidth)[method],\n scale = _.counts ? g.length : 1,\n local = domain || extent(g);\n sampleCurve(density, local, minsteps, maxsteps).forEach(v => {\n const t = {};\n\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n\n t[as[0]] = v[0];\n t[as[1]] = v[1] * scale;\n values.push(ingest(t));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n\n return out;\n }\n\n});\n\n/**\n * Generates a key function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - The field name(s) for the key function.\n * @param {boolean} params.flat - A boolean flag indicating if the field names\n * should be treated as flat property names, side-stepping nested field\n * lookups normally indicated by dot or bracket notation.\n */\n\nfunction Key(params) {\n Operator.call(this, null, update$2, params);\n}\ninherits(Key, Operator);\n\nfunction update$2(_) {\n return this.value && !_.modified() ? this.value : key(_.fields, _.flat);\n}\n\n/**\n * Load and parse data from an external source. Marshalls parameter\n * values and then invokes the Dataflow request method.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.url - The URL to load from.\n * @param {object} params.format - The data format options.\n */\n\nfunction Load(params) {\n Transform.call(this, [], params);\n this._pending = null;\n}\ninherits(Load, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow;\n\n if (this._pending) {\n // update state and return pulse\n return output(this, pulse, this._pending);\n }\n\n if (stop(_)) return pulse.StopPropagation;\n\n if (_.values) {\n // parse and ingest values, return output pulse\n return output(this, pulse, df.parse(_.values, _.format));\n } else if (_.async) {\n // return promise for non-blocking async loading\n const p = df.request(_.url, _.format).then(res => {\n this._pending = array(res.data);\n return df => df.touch(this);\n });\n return {\n async: p\n };\n } else {\n // return promise for synchronous loading\n return df.request(_.url, _.format).then(res => output(this, pulse, array(res.data)));\n }\n }\n\n});\n\nfunction stop(_) {\n return _.modified('async') && !(_.modified('values') || _.modified('url') || _.modified('format'));\n}\n\nfunction output(op, pulse, data) {\n data.forEach(ingest);\n const out = pulse.fork(pulse.NO_FIELDS & pulse.NO_SOURCE);\n out.rem = op.value;\n op.value = out.source = out.add = data;\n op._pending = null;\n if (out.rem.length) out.clean(true);\n return out;\n}\n\n/**\n * Extend tuples by joining them with values from a lookup table.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Map} params.index - The lookup table map.\n * @param {Array} params.as - Output field names for each lookup value.\n * @param {*} [params.default] - A default value to use if lookup fails.\n */\n\nfunction Lookup(params) {\n Transform.call(this, {}, params);\n}\nLookup.Definition = {\n 'type': 'Lookup',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'index',\n 'type': 'index',\n 'params': [{\n 'name': 'from',\n 'type': 'data',\n 'required': true\n }, {\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }]\n }, {\n 'name': 'values',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }, {\n 'name': 'default',\n 'default': null\n }]\n};\ninherits(Lookup, Transform, {\n transform(_, pulse) {\n const keys = _.fields,\n index = _.index,\n values = _.values,\n defaultValue = _.default == null ? null : _.default,\n reset = _.modified(),\n n = keys.length;\n\n let flag = reset ? pulse.SOURCE : pulse.ADD,\n out = pulse,\n as = _.as,\n set,\n m,\n mods;\n\n if (values) {\n m = values.length;\n\n if (n > 1 && !as) {\n error('Multi-field lookup requires explicit \"as\" parameter.');\n }\n\n if (as && as.length !== n * m) {\n error('The \"as\" parameter has too few output field names.');\n }\n\n as = as || values.map(accessorName);\n\n set = function (t) {\n for (var i = 0, k = 0, j, v; i < n; ++i) {\n v = index.get(keys[i](t));\n if (v == null) for (j = 0; j < m; ++j, ++k) t[as[k]] = defaultValue;else for (j = 0; j < m; ++j, ++k) t[as[k]] = values[j](v);\n }\n };\n } else {\n if (!as) {\n error('Missing output field names.');\n }\n\n set = function (t) {\n for (var i = 0, v; i < n; ++i) {\n v = index.get(keys[i](t));\n t[as[i]] = v == null ? defaultValue : v;\n }\n };\n }\n\n if (reset) {\n out = pulse.reflow(true);\n } else {\n mods = keys.some(k => pulse.modified(k.fields));\n flag |= mods ? pulse.MOD : 0;\n }\n\n pulse.visit(flag, set);\n return out.modifies(as);\n }\n\n});\n\n/**\n * Computes global min/max extents over a collection of extents.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array>} params.extents - The input extents.\n */\n\nfunction MultiExtent(params) {\n Operator.call(this, null, update$1, params);\n}\ninherits(MultiExtent, Operator);\n\nfunction update$1(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n\n const ext = _.extents,\n n = ext.length;\n let min = +Infinity,\n max = -Infinity,\n i,\n e;\n\n for (i = 0; i < n; ++i) {\n e = ext[i];\n if (e[0] < min) min = e[0];\n if (e[1] > max) max = e[1];\n }\n\n return [min, max];\n}\n\n/**\n * Merge a collection of value arrays.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array>} params.values - The input value arrrays.\n */\n\nfunction MultiValues(params) {\n Operator.call(this, null, update, params);\n}\ninherits(MultiValues, Operator);\n\nfunction update(_) {\n return this.value && !_.modified() ? this.value : _.values.reduce((data, _) => data.concat(_), []);\n}\n\n/**\n * Operator whose value is simply its parameter hash. This operator is\n * useful for enabling reactive updates to values of nested objects.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction Params(params) {\n Transform.call(this, null, params);\n}\ninherits(Params, Transform, {\n transform(_, pulse) {\n this.modified(_.modified());\n this.value = _;\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); // do not pass tuples\n }\n\n});\n\n/**\n * Aggregate and pivot selected field values to become new fields.\n * This operator is useful to construction cross-tabulations.\n * @constructor\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby. These fields act just like groupby fields of an Aggregate transform.\n * @param {function(object): *} params.field - The field to pivot on. The unique\n * values of this field become new field names in the output stream.\n * @param {function(object): *} params.value - The field to populate pivoted fields.\n * The aggregate values of this field become the values of the new pivoted fields.\n * @param {string} [params.op] - The aggregation operation for the value field,\n * applied per cell in the output stream. The default is \"sum\".\n * @param {number} [params.limit] - An optional parameter indicating the maximum\n * number of pivoted fields to generate. The pivoted field names are sorted in\n * ascending order prior to enforcing the limit.\n */\n\nfunction Pivot(params) {\n Aggregate.call(this, params);\n}\nPivot.Definition = {\n 'type': 'Pivot',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'value',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'op',\n 'type': 'enum',\n 'values': ValidAggregateOps,\n 'default': 'sum'\n }, {\n 'name': 'limit',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'key',\n 'type': 'field'\n }]\n};\ninherits(Pivot, Aggregate, {\n _transform: Aggregate.prototype.transform,\n\n transform(_, pulse) {\n return this._transform(aggregateParams(_, pulse), pulse);\n }\n\n}); // Shoehorn a pivot transform into an aggregate transform!\n// First collect all unique pivot field values.\n// Then generate aggregate fields for each output pivot field.\n\nfunction aggregateParams(_, pulse) {\n const key = _.field,\n value = _.value,\n op = (_.op === 'count' ? '__count__' : _.op) || 'sum',\n fields = accessorFields(key).concat(accessorFields(value)),\n keys = pivotKeys(key, _.limit || 0, pulse); // if data stream content changes, pivot fields may change\n // flag parameter modification to ensure re-initialization\n\n if (pulse.changed()) _.set('__pivot__', null, null, true);\n return {\n key: _.key,\n groupby: _.groupby,\n ops: keys.map(() => op),\n fields: keys.map(k => get(k, key, value, fields)),\n as: keys.map(k => k + ''),\n modified: _.modified.bind(_)\n };\n} // Generate aggregate field accessor.\n// Output NaN for non-existent values; aggregator will ignore!\n\n\nfunction get(k, key, value, fields) {\n return accessor(d => key(d) === k ? value(d) : NaN, fields, k + '');\n} // Collect (and optionally limit) all unique pivot values.\n\n\nfunction pivotKeys(key, limit, pulse) {\n const map = {},\n list = [];\n pulse.visit(pulse.SOURCE, t => {\n const k = key(t);\n\n if (!map[k]) {\n map[k] = 1;\n list.push(k);\n }\n });\n list.sort(ascending);\n return limit ? list.slice(0, limit) : list;\n}\n\n/**\n * Partitions pre-faceted data into tuple subflows.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): Array} params.field - The field\n * accessor for an array of subflow tuple objects.\n */\n\nfunction PreFacet(params) {\n Facet.call(this, params);\n}\ninherits(PreFacet, Facet, {\n transform(_, pulse) {\n const flow = _.subflow,\n field = _.field,\n subflow = t => this.subflow(tupleid(t), flow, pulse, t);\n\n if (_.modified('field') || field && pulse.modified(accessorFields(field))) {\n error('PreFacet does not support field modification.');\n }\n\n this.initTargets(); // reset list of active subflows\n\n if (field) {\n pulse.visit(pulse.MOD, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.mod(_));\n });\n pulse.visit(pulse.ADD, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.add(ingest(_)));\n });\n pulse.visit(pulse.REM, t => {\n const sf = subflow(t);\n field(t).forEach(_ => sf.rem(_));\n });\n } else {\n pulse.visit(pulse.MOD, t => subflow(t).mod(t));\n pulse.visit(pulse.ADD, t => subflow(t).add(t));\n pulse.visit(pulse.REM, t => subflow(t).rem(t));\n }\n\n if (pulse.clean()) {\n pulse.runAfter(() => this.clean());\n }\n\n return pulse;\n }\n\n});\n\n/**\n * Performs a relational projection, copying selected fields from source\n * tuples to a new set of derived tuples.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.as] - Output field names for each projected\n * field. Any unspecified fields will use the field name provided by\n * the field accessor.\n */\n\nfunction Project(params) {\n Transform.call(this, null, params);\n}\nProject.Definition = {\n 'type': 'Project',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }]\n};\ninherits(Project, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(_.fields, _.as || []),\n derive = fields ? (s, t) => project(s, t, fields, as) : rederive;\n let lut;\n\n if (this.value) {\n lut = this.value;\n } else {\n pulse = pulse.addAll();\n lut = this.value = {};\n }\n\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n pulse.visit(pulse.ADD, t => {\n const dt = derive(t, ingest({}));\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n pulse.visit(pulse.MOD, t => {\n out.mod.push(derive(t, lut[tupleid(t)]));\n });\n return out;\n }\n\n});\n\nfunction project(s, t, fields, as) {\n for (let i = 0, n = fields.length; i < n; ++i) {\n t[as[i]] = fields[i](s);\n }\n\n return t;\n}\n\n/**\n * Proxy the value of another operator as a pure signal value.\n * Ensures no tuples are propagated.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {*} params.value - The value to proxy, becomes the value of this operator.\n */\n\nfunction Proxy(params) {\n Transform.call(this, null, params);\n}\ninherits(Proxy, Transform, {\n transform(_, pulse) {\n this.value = _.value;\n return _.modified('value') ? pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS) : pulse.StopPropagation;\n }\n\n});\n\n/**\n * Generates sample quantile values from an input data stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the data field\n * over which to calculate quantile values.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {Array} [params.probs] - An array of probabilities in\n * the range (0, 1) for which to compute quantile values. If not specified,\n * the *step* parameter will be used.\n * @param {Array} [params.step=0.01] - A probability step size for\n * sampling quantile values. All values from one-half the step size up to\n * 1 (exclusive) will be sampled. This parameter is only used if the\n * *quantiles* parameter is not provided.\n */\n\nfunction Quantile(params) {\n Transform.call(this, null, params);\n}\nQuantile.Definition = {\n 'type': 'Quantile',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'probs',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 0.01\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'default': ['prob', 'value']\n }]\n};\nconst EPSILON = 1e-14;\ninherits(Quantile, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n as = _.as || ['prob', 'value'];\n\n if (this.value && !_.modified() && !pulse.changed()) {\n out.source = this.value;\n return out;\n }\n\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition$1(source, _.groupby, _.field),\n names = (_.groupby || []).map(accessorName),\n values = [],\n step = _.step || 0.01,\n p = _.probs || range(step / 2, 1 - EPSILON, step),\n n = p.length;\n groups.forEach(g => {\n const q = quantiles(g, p);\n\n for (let i = 0; i < n; ++i) {\n const t = {};\n\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n\n t[as[0]] = p[i];\n t[as[1]] = q[i];\n values.push(ingest(t));\n }\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n return out;\n }\n\n});\n\n/**\n * Relays a data stream between data processing pipelines.\n * If the derive parameter is set, this transform will create derived\n * copies of observed tuples. This provides derived data streams in which\n * modifications to the tuples do not pollute an upstream data source.\n * @param {object} params - The parameters for this operator.\n * @param {number} [params.derive=false] - Boolean flag indicating if\n * the transform should make derived copies of incoming tuples.\n * @constructor\n */\n\nfunction Relay(params) {\n Transform.call(this, null, params);\n}\ninherits(Relay, Transform, {\n transform(_, pulse) {\n let out, lut;\n\n if (this.value) {\n lut = this.value;\n } else {\n out = pulse = pulse.addAll();\n lut = this.value = {};\n }\n\n if (_.derive) {\n out = pulse.fork(pulse.NO_SOURCE);\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n pulse.visit(pulse.ADD, t => {\n const dt = derive(t);\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n pulse.visit(pulse.MOD, t => {\n const dt = lut[tupleid(t)];\n\n for (const k in t) {\n dt[k] = t[k]; // down stream writes may overwrite re-derived tuples\n // conservatively mark all source fields as modified\n\n out.modifies(k);\n }\n\n out.mod.push(dt);\n });\n }\n\n return out;\n }\n\n});\n\n/**\n * Samples tuples passing through this operator.\n * Uses reservoir sampling to maintain a representative sample.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {number} [params.size=1000] - The maximum number of samples.\n */\n\nfunction Sample(params) {\n Transform.call(this, [], params);\n this.count = 0;\n}\nSample.Definition = {\n 'type': 'Sample',\n 'metadata': {},\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'default': 1000\n }]\n};\ninherits(Sample, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE),\n mod = _.modified('size'),\n num = _.size,\n map = this.value.reduce((m, t) => (m[tupleid(t)] = 1, m), {});\n\n let res = this.value,\n cnt = this.count,\n cap = 0; // sample reservoir update function\n\n function update(t) {\n let p, idx;\n\n if (res.length < num) {\n res.push(t);\n } else {\n idx = ~~((cnt + 1) * random());\n\n if (idx < res.length && idx >= cap) {\n p = res[idx];\n if (map[tupleid(p)]) out.rem.push(p); // eviction\n\n res[idx] = t;\n }\n }\n\n ++cnt;\n }\n\n if (pulse.rem.length) {\n // find all tuples that should be removed, add to output\n pulse.visit(pulse.REM, t => {\n const id = tupleid(t);\n\n if (map[id]) {\n map[id] = -1;\n out.rem.push(t);\n }\n\n --cnt;\n }); // filter removed tuples out of the sample reservoir\n\n res = res.filter(t => map[tupleid(t)] !== -1);\n }\n\n if ((pulse.rem.length || mod) && res.length < num && pulse.source) {\n // replenish sample if backing data source is available\n cap = cnt = res.length;\n pulse.visit(pulse.SOURCE, t => {\n // update, but skip previously sampled tuples\n if (!map[tupleid(t)]) update(t);\n });\n cap = -1;\n }\n\n if (mod && res.length > num) {\n const n = res.length - num;\n\n for (let i = 0; i < n; ++i) {\n map[tupleid(res[i])] = -1;\n out.rem.push(res[i]);\n }\n\n res = res.slice(n);\n }\n\n if (pulse.mod.length) {\n // propagate modified tuples in the sample reservoir\n pulse.visit(pulse.MOD, t => {\n if (map[tupleid(t)]) out.mod.push(t);\n });\n }\n\n if (pulse.add.length) {\n // update sample reservoir\n pulse.visit(pulse.ADD, update);\n }\n\n if (pulse.add.length || cap < 0) {\n // output newly added tuples\n out.add = res.filter(t => !map[tupleid(t)]);\n }\n\n this.count = cnt;\n this.value = out.source = res;\n return out;\n }\n\n});\n\n/**\n * Generates data tuples for a specified sequence range of numbers.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {number} params.start - The first number in the sequence.\n * @param {number} params.stop - The last number (exclusive) in the sequence.\n * @param {number} [params.step=1] - The step size between numbers in the sequence.\n */\n\nfunction Sequence(params) {\n Transform.call(this, null, params);\n}\nSequence.Definition = {\n 'type': 'Sequence',\n 'metadata': {\n 'generates': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'start',\n 'type': 'number',\n 'required': true\n }, {\n 'name': 'stop',\n 'type': 'number',\n 'required': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'data'\n }]\n};\ninherits(Sequence, Transform, {\n transform(_, pulse) {\n if (this.value && !_.modified()) return;\n const out = pulse.materialize().fork(pulse.MOD),\n as = _.as || 'data';\n out.rem = this.value ? pulse.rem.concat(this.value) : pulse.rem;\n this.value = range(_.start, _.stop, _.step || 1).map(v => {\n const t = {};\n t[as] = v;\n return ingest(t);\n });\n out.add = pulse.add.concat(this.value);\n return out;\n }\n\n});\n\n/**\n * Propagates a new pulse without any tuples so long as the input\n * pulse contains some added, removed or modified tuples.\n * @param {object} params - The parameters for this operator.\n * @constructor\n */\n\nfunction Sieve(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\ninherits(Sieve, Transform, {\n transform(_, pulse) {\n this.value = pulse.source;\n return pulse.changed() ? pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS) : pulse.StopPropagation;\n }\n\n});\n\n/**\n * Discretize dates to specific time units.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The data field containing date/time values.\n */\n\nfunction TimeUnit(params) {\n Transform.call(this, null, params);\n}\nconst OUTPUT = ['unit0', 'unit1'];\nTimeUnit.Definition = {\n 'type': 'TimeUnit',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'interval',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'units',\n 'type': 'enum',\n 'values': TIME_UNITS,\n 'array': true\n }, {\n 'name': 'step',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'maxbins',\n 'type': 'number',\n 'default': 40\n }, {\n 'name': 'extent',\n 'type': 'date',\n 'array': true\n }, {\n 'name': 'timezone',\n 'type': 'enum',\n 'default': 'local',\n 'values': ['local', 'utc']\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': OUTPUT\n }]\n};\ninherits(TimeUnit, Transform, {\n transform(_, pulse) {\n const field = _.field,\n band = _.interval !== false,\n utc = _.timezone === 'utc',\n floor = this._floor(_, pulse),\n offset = (utc ? utcInterval : timeInterval)(floor.unit).offset,\n as = _.as || OUTPUT,\n u0 = as[0],\n u1 = as[1],\n step = floor.step;\n\n let min = floor.start || Infinity,\n max = floor.stop || -Infinity,\n flag = pulse.ADD;\n\n if (_.modified() || pulse.modified(accessorFields(field))) {\n pulse = pulse.reflow(true);\n flag = pulse.SOURCE;\n min = Infinity;\n max = -Infinity;\n }\n\n pulse.visit(flag, t => {\n const v = field(t);\n let a, b;\n\n if (v == null) {\n t[u0] = null;\n if (band) t[u1] = null;\n } else {\n t[u0] = a = b = floor(v);\n if (band) t[u1] = b = offset(a, step);\n if (a < min) min = a;\n if (b > max) max = b;\n }\n });\n floor.start = min;\n floor.stop = max;\n return pulse.modifies(band ? as : u0);\n },\n\n _floor(_, pulse) {\n const utc = _.timezone === 'utc'; // get parameters\n\n const {\n units,\n step\n } = _.units ? {\n units: _.units,\n step: _.step || 1\n } : timeBin({\n extent: _.extent || extent(pulse.materialize(pulse.SOURCE).source, _.field),\n maxbins: _.maxbins\n }); // check / standardize time units\n\n const tunits = timeUnits(units),\n prev = this.value || {},\n floor = (utc ? utcFloor : timeFloor)(tunits, step);\n floor.unit = peek(tunits);\n floor.units = tunits;\n floor.step = step;\n floor.start = prev.start;\n floor.stop = prev.stop;\n return this.value = floor;\n }\n\n});\n\n/**\n * An index that maps from unique, string-coerced, field values to tuples.\n * Assumes that the field serves as a unique key with no duplicate values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field accessor to index.\n */\n\nfunction TupleIndex(params) {\n Transform.call(this, fastmap(), params);\n}\ninherits(TupleIndex, Transform, {\n transform(_, pulse) {\n const df = pulse.dataflow,\n field = _.field,\n index = this.value,\n set = t => index.set(field(t), t);\n\n let mod = true;\n\n if (_.modified('field') || pulse.modified(field.fields)) {\n index.clear();\n pulse.visit(pulse.SOURCE, set);\n } else if (pulse.changed()) {\n pulse.visit(pulse.REM, t => index.delete(field(t)));\n pulse.visit(pulse.ADD, set);\n } else {\n mod = false;\n }\n\n this.modified(mod);\n if (index.empty > df.cleanThreshold) df.runAfter(index.clean);\n return pulse.fork();\n }\n\n});\n\n/**\n * Extracts an array of values. Assumes the source data has already been\n * reduced as needed (e.g., by an upstream Aggregate transform).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The domain field to extract.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting the values. The comparator will be\n * applied to backing tuples prior to value extraction.\n */\n\nfunction Values(params) {\n Transform.call(this, null, params);\n}\ninherits(Values, Transform, {\n transform(_, pulse) {\n const run = !this.value || _.modified('field') || _.modified('sort') || pulse.changed() || _.sort && pulse.modified(_.sort.fields);\n\n if (run) {\n this.value = (_.sort ? pulse.source.slice().sort(stableCompare(_.sort)) : pulse.source).map(_.field);\n }\n }\n\n});\n\nfunction WindowOp(op, field, param, as) {\n const fn = WindowOps[op](field, param);\n return {\n init: fn.init || zero,\n update: function (w, t) {\n t[as] = fn.next(w);\n }\n };\n}\nconst WindowOps = {\n row_number: function () {\n return {\n next: w => w.index + 1\n };\n },\n rank: function () {\n let rank;\n return {\n init: () => rank = 1,\n next: w => {\n const i = w.index,\n data = w.data;\n return i && w.compare(data[i - 1], data[i]) ? rank = i + 1 : rank;\n }\n };\n },\n dense_rank: function () {\n let drank;\n return {\n init: () => drank = 1,\n next: w => {\n const i = w.index,\n d = w.data;\n return i && w.compare(d[i - 1], d[i]) ? ++drank : drank;\n }\n };\n },\n percent_rank: function () {\n const rank = WindowOps.rank(),\n next = rank.next;\n return {\n init: rank.init,\n next: w => (next(w) - 1) / (w.data.length - 1)\n };\n },\n cume_dist: function () {\n let cume;\n return {\n init: () => cume = 0,\n next: w => {\n const d = w.data,\n c = w.compare;\n let i = w.index;\n\n if (cume < i) {\n while (i + 1 < d.length && !c(d[i], d[i + 1])) ++i;\n\n cume = i;\n }\n\n return (1 + cume) / d.length;\n }\n };\n },\n ntile: function (field, num) {\n num = +num;\n if (!(num > 0)) error('ntile num must be greater than zero.');\n const cume = WindowOps.cume_dist(),\n next = cume.next;\n return {\n init: cume.init,\n next: w => Math.ceil(num * next(w))\n };\n },\n lag: function (field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n const i = w.index - offset;\n return i >= 0 ? field(w.data[i]) : null;\n }\n };\n },\n lead: function (field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n const i = w.index + offset,\n d = w.data;\n return i < d.length ? field(d[i]) : null;\n }\n };\n },\n first_value: function (field) {\n return {\n next: w => field(w.data[w.i0])\n };\n },\n last_value: function (field) {\n return {\n next: w => field(w.data[w.i1 - 1])\n };\n },\n nth_value: function (field, nth) {\n nth = +nth;\n if (!(nth > 0)) error('nth_value nth must be greater than zero.');\n return {\n next: w => {\n const i = w.i0 + (nth - 1);\n return i < w.i1 ? field(w.data[i]) : null;\n }\n };\n },\n prev_value: function (field) {\n let prev;\n return {\n init: () => prev = null,\n next: w => {\n const v = field(w.data[w.index]);\n return v != null ? prev = v : prev;\n }\n };\n },\n next_value: function (field) {\n let v, i;\n return {\n init: () => (v = null, i = -1),\n next: w => {\n const d = w.data;\n return w.index <= i ? v : (i = find(field, d, w.index)) < 0 ? (i = d.length, v = null) : v = field(d[i]);\n }\n };\n }\n};\n\nfunction find(field, data, index) {\n for (let n = data.length; index < n; ++index) {\n const v = field(data[index]);\n if (v != null) return index;\n }\n\n return -1;\n}\n\nconst ValidWindowOps = Object.keys(WindowOps);\n\nfunction WindowState(_) {\n const ops = array(_.ops),\n fields = array(_.fields),\n params = array(_.params),\n as = array(_.as),\n outputs = this.outputs = [],\n windows = this.windows = [],\n inputs = {},\n map = {},\n counts = [],\n measures = [];\n let countOnly = true;\n\n function visitInputs(f) {\n array(accessorFields(f)).forEach(_ => inputs[_] = 1);\n }\n\n visitInputs(_.sort);\n ops.forEach((op, i) => {\n const field = fields[i],\n mname = accessorName(field),\n name = measureName(op, mname, as[i]);\n visitInputs(field);\n outputs.push(name); // Window operation\n\n if (hasOwnProperty(WindowOps, op)) {\n windows.push(WindowOp(op, fields[i], params[i], name));\n } // Aggregate operation\n else {\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n\n if (op === 'count') {\n counts.push(name);\n return;\n }\n\n countOnly = false;\n let m = map[mname];\n\n if (!m) {\n m = map[mname] = [];\n m.field = field;\n measures.push(m);\n }\n\n m.push(createMeasure(op, name));\n }\n });\n\n if (counts.length || measures.length) {\n this.cell = cell(measures, counts, countOnly);\n }\n\n this.inputs = Object.keys(inputs);\n}\nconst prototype = WindowState.prototype;\n\nprototype.init = function () {\n this.windows.forEach(_ => _.init());\n if (this.cell) this.cell.init();\n};\n\nprototype.update = function (w, t) {\n const cell = this.cell,\n wind = this.windows,\n data = w.data,\n m = wind && wind.length;\n let j;\n\n if (cell) {\n for (j = w.p0; j < w.i0; ++j) cell.rem(data[j]);\n\n for (j = w.p1; j < w.i1; ++j) cell.add(data[j]);\n\n cell.set(t);\n }\n\n for (j = 0; j < m; ++j) wind[j].update(w, t);\n};\n\nfunction cell(measures, counts, countOnly) {\n measures = measures.map(m => compileMeasures(m, m.field));\n const cell = {\n num: 0,\n agg: null,\n store: false,\n count: counts\n };\n\n if (!countOnly) {\n var n = measures.length,\n a = cell.agg = Array(n),\n i = 0;\n\n for (; i < n; ++i) a[i] = new measures[i](cell);\n }\n\n if (cell.store) {\n var store = cell.data = new TupleStore();\n }\n\n cell.add = function (t) {\n cell.num += 1;\n if (countOnly) return;\n if (store) store.add(t);\n\n for (let i = 0; i < n; ++i) {\n a[i].add(a[i].get(t), t);\n }\n };\n\n cell.rem = function (t) {\n cell.num -= 1;\n if (countOnly) return;\n if (store) store.rem(t);\n\n for (let i = 0; i < n; ++i) {\n a[i].rem(a[i].get(t), t);\n }\n };\n\n cell.set = function (t) {\n let i, n; // consolidate stored values\n\n if (store) store.values(); // update tuple properties\n\n for (i = 0, n = counts.length; i < n; ++i) t[counts[i]] = cell.num;\n\n if (!countOnly) for (i = 0, n = a.length; i < n; ++i) a[i].set(t);\n };\n\n cell.init = function () {\n cell.num = 0;\n if (store) store.reset();\n\n for (let i = 0; i < n; ++i) a[i].init();\n };\n\n return cell;\n}\n\n/**\n * Perform window calculations and write results to the input stream.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator function for sorting tuples within a window.\n * @param {Array} [params.groupby] - An array of accessors by which to partition tuples into separate windows.\n * @param {Array} params.ops - An array of strings indicating window operations to perform.\n * @param {Array} [params.fields] - An array of accessors\n * for data fields to use as inputs to window operations.\n * @param {Array<*>} [params.params] - An array of parameter values for window operations.\n * @param {Array} [params.as] - An array of output field names for window operations.\n * @param {Array} [params.frame] - Window frame definition as two-element array.\n * @param {boolean} [params.ignorePeers=false] - If true, base window frame boundaries on row\n * number alone, ignoring peers with identical sort values. If false (default),\n * the window boundaries will be adjusted to include peer values.\n */\n\nfunction Window(params) {\n Transform.call(this, {}, params);\n this._mlen = 0;\n this._mods = [];\n}\nWindow.Definition = {\n 'type': 'Window',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'ops',\n 'type': 'enum',\n 'array': true,\n 'values': ValidWindowOps.concat(ValidAggregateOps)\n }, {\n 'name': 'params',\n 'type': 'number',\n 'null': true,\n 'array': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'null': true,\n 'array': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'array': true\n }, {\n 'name': 'frame',\n 'type': 'number',\n 'null': true,\n 'array': true,\n 'length': 2,\n 'default': [null, 0]\n }, {\n 'name': 'ignorePeers',\n 'type': 'boolean',\n 'default': false\n }]\n};\ninherits(Window, Transform, {\n transform(_, pulse) {\n this.stamp = pulse.stamp;\n\n const mod = _.modified(),\n cmp = stableCompare(_.sort),\n key = groupkey(_.groupby),\n group = t => this.group(key(t)); // initialize window state\n\n\n let state = this.state;\n\n if (!state || mod) {\n state = this.state = new WindowState(_);\n } // partition input tuples\n\n\n if (mod || pulse.modified(state.inputs)) {\n this.value = {};\n pulse.visit(pulse.SOURCE, t => group(t).add(t));\n } else {\n pulse.visit(pulse.REM, t => group(t).remove(t));\n pulse.visit(pulse.ADD, t => group(t).add(t));\n } // perform window calculations for each modified partition\n\n\n for (let i = 0, n = this._mlen; i < n; ++i) {\n processPartition(this._mods[i], state, cmp, _);\n }\n\n this._mlen = 0;\n this._mods = []; // TODO don't reflow everything?\n\n return pulse.reflow(mod).modifies(state.outputs);\n },\n\n group(key) {\n let group = this.value[key];\n\n if (!group) {\n group = this.value[key] = SortedList(tupleid);\n group.stamp = -1;\n }\n\n if (group.stamp < this.stamp) {\n group.stamp = this.stamp;\n this._mods[this._mlen++] = group;\n }\n\n return group;\n }\n\n});\n\nfunction processPartition(list, state, cmp, _) {\n const sort = _.sort,\n range = sort && !_.ignorePeers,\n frame = _.frame || [null, 0],\n data = list.data(cmp),\n // use cmp for stable sort\n n = data.length,\n b = range ? bisector(sort) : null,\n w = {\n i0: 0,\n i1: 0,\n p0: 0,\n p1: 0,\n index: 0,\n data: data,\n compare: sort || constant(-1)\n };\n state.init();\n\n for (let i = 0; i < n; ++i) {\n setWindow(w, frame, i, n);\n if (range) adjustRange(w, b);\n state.update(w, data[i]);\n }\n}\n\nfunction setWindow(w, f, i, n) {\n w.p0 = w.i0;\n w.p1 = w.i1;\n w.i0 = f[0] == null ? 0 : Math.max(0, i - Math.abs(f[0]));\n w.i1 = f[1] == null ? n : Math.min(n, i + Math.abs(f[1]) + 1);\n w.index = i;\n} // if frame type is 'range', adjust window for peer values\n\n\nfunction adjustRange(w, bisect) {\n const r0 = w.i0,\n r1 = w.i1 - 1,\n c = w.compare,\n d = w.data,\n n = d.length - 1;\n if (r0 > 0 && !c(d[r0], d[r0 - 1])) w.i0 = bisect.left(d, d[r0]);\n if (r1 < n && !c(d[r1], d[r1 + 1])) w.i1 = bisect.right(d, d[r1]);\n}\n\nexport { Aggregate as aggregate, Bin as bin, Collect as collect, Compare as compare, CountPattern as countpattern, Cross as cross, Density as density, DotBin as dotbin, Expression as expression, Extent as extent, Facet as facet, Field as field, Filter as filter, Flatten as flatten, Fold as fold, Formula as formula, Generate as generate, Impute as impute, JoinAggregate as joinaggregate, KDE as kde, Key as key, Load as load, Lookup as lookup, MultiExtent as multiextent, MultiValues as multivalues, Params as params, Pivot as pivot, PreFacet as prefacet, Project as project, Proxy as proxy, Quantile as quantile, Relay as relay, Sample as sample, Sequence as sequence, Sieve as sieve, Subflow as subflow, TimeUnit as timeunit, TupleIndex as tupleindex, Values as values, Window as window };\n","export default function mean(values, valueof) {\n let count = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n }\n if (count) return sum / count;\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n var x1 = null,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import {pi, tau} from \"../math.js\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop.js\";\nimport {point} from \"./cardinal.js\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal.js\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed.js\";\nimport noop from \"../noop.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","function domCanvas(w, h) {\n if (typeof document !== 'undefined' && document.createElement) {\n const c = document.createElement('canvas');\n\n if (c && c.getContext) {\n c.width = w;\n c.height = h;\n return c;\n }\n }\n\n return null;\n}\nconst domImage = () => typeof Image !== 'undefined' ? Image : null;\n\nexport { domCanvas as canvas, domCanvas, domImage as image };\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new Map(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new Map();\n for (const value of _) {\n const key = value + \"\";\n if (index.has(key)) continue;\n index.set(key, domain.push(value));\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return hcl2lab(this).rgb();\n }\n}));\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n if (values === undefined) values = interpolate, interpolate = value;\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n","import {hue} from \"./color.js\";\n\nexport default function(a, b) {\n var i = hue(+a, +b);\n return function(t) {\n var x = i(t);\n return x - 360 * Math.floor(x / 360);\n };\n}\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n a = color(start.a, end.a),\n b = color(start.b, end.b),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport function loggish(transform) {\n var scale = transform(transformLog, transformExp),\n domain = scale.domain,\n base = 10,\n logs,\n pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.floor(i), j = Math.ceil(j);\n if (u > 0) for (; i <= j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i <= j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n if (z.length * 2 < n) z = ticks(u, v, n);\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n return scale;\n}\n\nexport default function log() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, log()).base(scale.base());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import {bisector, tickStep} from \"d3-array\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target),\n step;\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n return interval.every(step);\n }\n\n return interval;\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1]))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n s = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1, r2;\n return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n return scale;\n };\n}\n\nexport default function diverging() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, diverging());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","import { toNumber, peek, hasOwnProperty, toSet, array, constant, isNumber, span, isObject, isString, error, isArray } from 'vega-util';\nimport { bisectRight, range, bisect } from 'd3-array';\nimport * as $ from 'd3-scale';\nimport { scaleOrdinal, tickFormat as tickFormat$1 } from 'd3-scale';\nexport { scaleImplicit } from 'd3-scale';\nimport * as $$1 from 'd3-interpolate';\nimport { timeInterval, utcInterval } from 'vega-time';\n\nfunction bandSpace (count, paddingInner, paddingOuter) {\n const space = count - paddingInner + paddingOuter * 2;\n return count ? space > 0 ? space : 1 : 0;\n}\n\nconst Identity = 'identity';\nconst Linear = 'linear';\nconst Log = 'log';\nconst Pow = 'pow';\nconst Sqrt = 'sqrt';\nconst Symlog = 'symlog';\nconst Time = 'time';\nconst UTC = 'utc';\nconst Sequential = 'sequential';\nconst Diverging = 'diverging';\nconst Quantile = 'quantile';\nconst Quantize = 'quantize';\nconst Threshold = 'threshold';\nconst Ordinal = 'ordinal';\nconst Point = 'point';\nconst Band = 'band';\nconst BinOrdinal = 'bin-ordinal'; // categories\n\nconst Continuous = 'continuous';\nconst Discrete = 'discrete';\nconst Discretizing = 'discretizing';\nconst Interpolating = 'interpolating';\nconst Temporal = 'temporal';\n\nfunction invertRange (scale) {\n return function (_) {\n let lo = _[0],\n hi = _[1],\n t;\n\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n\n return [scale.invert(lo), scale.invert(hi)];\n };\n}\n\nfunction invertRangeExtent (scale) {\n return function (_) {\n const range = scale.range();\n let lo = _[0],\n hi = _[1],\n min = -1,\n max,\n t,\n i,\n n;\n\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n\n for (i = 0, n = range.length; i < n; ++i) {\n if (range[i] >= lo && range[i] <= hi) {\n if (min < 0) min = i;\n max = i;\n }\n }\n\n if (min < 0) return undefined;\n lo = scale.invertExtent(range[min]);\n hi = scale.invertExtent(range[max]);\n return [lo[0] === undefined ? lo[1] : lo[0], hi[1] === undefined ? hi[0] : hi[1]];\n };\n}\n\nfunction band() {\n const scale = scaleOrdinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range;\n let range$1 = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n delete scale.unknown;\n\n function rescale() {\n const n = domain().length,\n reverse = range$1[1] < range$1[0],\n stop = range$1[1 - reverse],\n space = bandSpace(n, paddingInner, paddingOuter);\n let start = range$1[reverse - 0];\n step = (stop - start) / (space || 1);\n\n if (round) {\n step = Math.floor(step);\n }\n\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n\n if (round) {\n start = Math.round(start);\n bandwidth = Math.round(bandwidth);\n }\n\n const values = range(n).map(i => start + step * i);\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function (_) {\n if (arguments.length) {\n domain(_);\n return rescale();\n } else {\n return domain();\n }\n };\n\n scale.range = function (_) {\n if (arguments.length) {\n range$1 = [+_[0], +_[1]];\n return rescale();\n } else {\n return range$1.slice();\n }\n };\n\n scale.rangeRound = function (_) {\n range$1 = [+_[0], +_[1]];\n round = true;\n return rescale();\n };\n\n scale.bandwidth = function () {\n return bandwidth;\n };\n\n scale.step = function () {\n return step;\n };\n\n scale.round = function (_) {\n if (arguments.length) {\n round = !!_;\n return rescale();\n } else {\n return round;\n }\n };\n\n scale.padding = function (_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n paddingInner = paddingOuter;\n return rescale();\n } else {\n return paddingInner;\n }\n };\n\n scale.paddingInner = function (_) {\n if (arguments.length) {\n paddingInner = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingInner;\n }\n };\n\n scale.paddingOuter = function (_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingOuter;\n }\n };\n\n scale.align = function (_) {\n if (arguments.length) {\n align = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return align;\n }\n };\n\n scale.invertRange = function (_) {\n // bail if range has null or undefined values\n if (_[0] == null || _[1] == null) return;\n const reverse = range$1[1] < range$1[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1;\n let lo = +_[0],\n hi = +_[1],\n a,\n b,\n t; // bail if either range endpoint is invalid\n\n if (lo !== lo || hi !== hi) return; // order range inputs, bail if outside of scale range\n\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n\n if (hi < values[0] || lo > range$1[1 - reverse]) return; // binary search to index into scale range\n\n a = Math.max(0, bisectRight(values, lo) - 1);\n b = lo === hi ? a : bisectRight(values, hi) - 1; // increment index a if lo is within padding gap\n\n if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) {\n // map + swap\n t = a;\n a = n - b;\n b = n - t;\n }\n\n return a > b ? undefined : domain().slice(a, b + 1);\n };\n\n scale.invert = function (_) {\n const value = scale.invertRange([_, _]);\n return value ? value[0] : value;\n };\n\n scale.copy = function () {\n return band().domain(domain()).range(range$1).round(round).paddingInner(paddingInner).paddingOuter(paddingOuter).align(align);\n };\n\n return rescale();\n}\n\nfunction pointish(scale) {\n const copy = scale.copy;\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n\n scale.copy = function () {\n return pointish(copy());\n };\n\n return scale;\n}\n\nfunction point() {\n return pointish(band().paddingInner(1));\n}\n\nvar map = Array.prototype.map;\nfunction numbers(_) {\n return map.call(_, toNumber);\n}\n\nconst slice = Array.prototype.slice;\n\nfunction scaleBinOrdinal() {\n let domain = [],\n range = [];\n\n function scale(x) {\n return x == null || x !== x ? undefined : range[(bisect(domain, x) - 1) % range.length];\n }\n\n scale.domain = function (_) {\n if (arguments.length) {\n domain = numbers(_);\n return scale;\n } else {\n return domain.slice();\n }\n };\n\n scale.range = function (_) {\n if (arguments.length) {\n range = slice.call(_);\n return scale;\n } else {\n return range.slice();\n }\n };\n\n scale.tickFormat = function (count, specifier) {\n return tickFormat$1(domain[0], peek(domain), count == null ? 10 : count, specifier);\n };\n\n scale.copy = function () {\n return scaleBinOrdinal().domain(scale.domain()).range(scale.range());\n };\n\n return scale;\n}\n\nconst scales = {};\n/**\n * Augment scales with their type and needed inverse methods.\n */\n\nfunction create(type, constructor, metadata) {\n const ctr = function scale() {\n const s = constructor();\n\n if (!s.invertRange) {\n s.invertRange = s.invert ? invertRange(s) : s.invertExtent ? invertRangeExtent(s) : undefined;\n }\n\n s.type = type;\n return s;\n };\n\n ctr.metadata = toSet(array(metadata));\n return ctr;\n}\n\nfunction scale(type, scale, metadata) {\n if (arguments.length > 1) {\n scales[type] = create(type, scale, metadata);\n return this;\n } else {\n return isValidScaleType(type) ? scales[type] : undefined;\n }\n} // identity scale\n\nscale(Identity, $.scaleIdentity); // continuous scales\n\nscale(Linear, $.scaleLinear, Continuous);\nscale(Log, $.scaleLog, [Continuous, Log]);\nscale(Pow, $.scalePow, Continuous);\nscale(Sqrt, $.scaleSqrt, Continuous);\nscale(Symlog, $.scaleSymlog, Continuous);\nscale(Time, $.scaleTime, [Continuous, Temporal]);\nscale(UTC, $.scaleUtc, [Continuous, Temporal]); // sequential scales\n\nscale(Sequential, $.scaleSequential, [Continuous, Interpolating]); // backwards compat\n\nscale(`${Sequential}-${Linear}`, $.scaleSequential, [Continuous, Interpolating]);\nscale(`${Sequential}-${Log}`, $.scaleSequentialLog, [Continuous, Interpolating, Log]);\nscale(`${Sequential}-${Pow}`, $.scaleSequentialPow, [Continuous, Interpolating]);\nscale(`${Sequential}-${Sqrt}`, $.scaleSequentialSqrt, [Continuous, Interpolating]);\nscale(`${Sequential}-${Symlog}`, $.scaleSequentialSymlog, [Continuous, Interpolating]); // diverging scales\n\nscale(`${Diverging}-${Linear}`, $.scaleDiverging, [Continuous, Interpolating]);\nscale(`${Diverging}-${Log}`, $.scaleDivergingLog, [Continuous, Interpolating, Log]);\nscale(`${Diverging}-${Pow}`, $.scaleDivergingPow, [Continuous, Interpolating]);\nscale(`${Diverging}-${Sqrt}`, $.scaleDivergingSqrt, [Continuous, Interpolating]);\nscale(`${Diverging}-${Symlog}`, $.scaleDivergingSymlog, [Continuous, Interpolating]); // discretizing scales\n\nscale(Quantile, $.scaleQuantile, [Discretizing, Quantile]);\nscale(Quantize, $.scaleQuantize, Discretizing);\nscale(Threshold, $.scaleThreshold, Discretizing); // discrete scales\n\nscale(BinOrdinal, scaleBinOrdinal, [Discrete, Discretizing]);\nscale(Ordinal, $.scaleOrdinal, Discrete);\nscale(Band, band, Discrete);\nscale(Point, point, Discrete);\nfunction isValidScaleType(type) {\n return hasOwnProperty(scales, type);\n}\n\nfunction hasType(key, type) {\n const s = scales[key];\n return s && s.metadata[type];\n}\n\nfunction isContinuous(key) {\n return hasType(key, Continuous);\n}\nfunction isDiscrete(key) {\n return hasType(key, Discrete);\n}\nfunction isDiscretizing(key) {\n return hasType(key, Discretizing);\n}\nfunction isLogarithmic(key) {\n return hasType(key, Log);\n}\nfunction isTemporal(key) {\n return hasType(key, Temporal);\n}\nfunction isInterpolating(key) {\n return hasType(key, Interpolating);\n}\nfunction isQuantile(key) {\n return hasType(key, Quantile);\n}\n\nconst scaleProps = ['clamp', 'base', 'constant', 'exponent'];\nfunction interpolateRange(interpolator, range) {\n const start = range[0],\n span = peek(range) - start;\n return function (i) {\n return interpolator(start + i * span);\n };\n}\nfunction interpolateColors(colors, type, gamma) {\n return $$1.piecewise(interpolate(type || 'rgb', gamma), colors);\n}\nfunction quantizeInterpolator(interpolator, count) {\n const samples = new Array(count),\n n = count + 1;\n\n for (let i = 0; i < count;) samples[i] = interpolator(++i / n);\n\n return samples;\n}\nfunction scaleCopy(scale) {\n const t = scale.type,\n s = scale.copy();\n s.type = t;\n return s;\n}\nfunction scaleFraction(scale$1, min, max) {\n const delta = max - min;\n let i, t, s;\n\n if (!delta || !Number.isFinite(delta)) {\n return constant(0.5);\n } else {\n i = (t = scale$1.type).indexOf('-');\n t = i < 0 ? t : t.slice(i + 1);\n s = scale(t)().domain([min, max]).range([0, 1]);\n scaleProps.forEach(m => scale$1[m] ? s[m](scale$1[m]()) : 0);\n return s;\n }\n}\nfunction interpolate(type, gamma) {\n const interp = $$1[method(type)];\n return gamma != null && interp && interp.gamma ? interp.gamma(gamma) : interp;\n}\n\nfunction method(type) {\n return 'interpolate' + type.toLowerCase().split('-').map(s => s[0].toUpperCase() + s.slice(1)).join('');\n}\n\nconst continuous = {\n blues: 'cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90',\n greens: 'd3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429',\n greys: 'e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e',\n oranges: 'fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303',\n purples: 'e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c',\n reds: 'fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13',\n blueGreen: 'd5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429',\n bluePurple: 'ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71',\n greenBlue: 'd3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1',\n orangeRed: 'fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403',\n purpleBlue: 'dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281',\n purpleBlueGreen: 'dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353',\n purpleRed: 'dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a',\n redPurple: 'fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174',\n yellowGreen: 'e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034',\n yellowOrangeBrown: 'feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204',\n yellowOrangeRed: 'fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225',\n blueOrange: '134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07',\n brownBlueGreen: '704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147',\n purpleGreen: '5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29',\n purpleOrange: '4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07',\n redBlue: '8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85',\n redGrey: '8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434',\n yellowGreenBlue: 'eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185',\n redYellowBlue: 'a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695',\n redYellowGreen: 'a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837',\n pinkYellowGreen: '8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419',\n spectral: '9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2',\n viridis: '440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725',\n magma: '0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf',\n inferno: '0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4',\n plasma: '0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921',\n cividis: '00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647',\n rainbow: '6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa',\n sinebow: 'ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040',\n turbo: '23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00',\n browns: 'eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632',\n tealBlues: 'bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985',\n teals: 'bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667',\n warmGreys: 'dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e',\n goldGreen: 'f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36',\n goldOrange: 'f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26',\n goldRed: 'f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e',\n lightGreyRed: 'efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b',\n lightGreyTeal: 'e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc',\n lightMulti: 'e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c',\n lightOrange: 'f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b',\n lightTealBlue: 'e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988',\n darkBlue: '3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff',\n darkGold: '3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff',\n darkGreen: '3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa',\n darkMulti: '3737371f5287197d8c29a86995ce3fffe800ffffff',\n darkRed: '3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c'\n};\nconst discrete = {\n category10: '1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf',\n category20: '1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5',\n category20b: '393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6',\n category20c: '3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9',\n tableau10: '4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac',\n tableau20: '4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5',\n accent: '7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666',\n dark2: '1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666',\n paired: 'a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928',\n pastel1: 'fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2',\n pastel2: 'b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc',\n set1: 'e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999',\n set2: '66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3',\n set3: '8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f'\n};\n\nfunction colors(palette) {\n const n = palette.length / 6 | 0,\n c = new Array(n);\n\n for (let i = 0; i < n;) {\n c[i] = '#' + palette.slice(i * 6, ++i * 6);\n }\n\n return c;\n}\n\nfunction apply(_, f) {\n for (const k in _) scheme(k, f(_[k]));\n}\n\nconst schemes = {};\napply(discrete, colors);\napply(continuous, _ => interpolateColors(colors(_)));\nfunction scheme(name, scheme) {\n name = name && name.toLowerCase();\n\n if (arguments.length > 1) {\n schemes[name] = scheme;\n return this;\n } else {\n return schemes[name];\n }\n}\n\nconst SymbolLegend = 'symbol';\nconst DiscreteLegend = 'discrete';\nconst GradientLegend = 'gradient';\n\nconst defaultFormatter = value => isArray(value) ? value.map(v => String(v)) : String(value);\n\nconst ascending = (a, b) => a[1] - b[1];\n\nconst descending = (a, b) => b[1] - a[1];\n/**\n * Determine the tick count or interval function.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} count - The desired tick count or interval specifier.\n * @param {number} minStep - The desired minimum step between tick values.\n * @return {*} - The tick count or interval function.\n */\n\n\nfunction tickCount(scale, count, minStep) {\n let step;\n\n if (isNumber(count)) {\n if (scale.bins) {\n count = Math.max(count, scale.bins.length);\n }\n\n if (minStep != null) {\n count = Math.min(count, Math.floor(span(scale.domain()) / minStep || 1));\n }\n }\n\n if (isObject(count)) {\n step = count.step;\n count = count.interval;\n }\n\n if (isString(count)) {\n count = scale.type === Time ? timeInterval(count) : scale.type == UTC ? utcInterval(count) : error('Only time and utc scales accept interval strings.');\n if (step) count = count.every(step);\n }\n\n return count;\n}\n/**\n * Filter a set of candidate tick values, ensuring that only tick values\n * that lie within the scale range are included.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {Array<*>} ticks - The candidate tick values.\n * @param {*} count - The tick count or interval function.\n * @return {Array<*>} - The filtered tick values.\n */\n\nfunction validTicks(scale, ticks, count) {\n let range = scale.range(),\n lo = range[0],\n hi = peek(range),\n cmp = ascending;\n\n if (lo > hi) {\n range = hi;\n hi = lo;\n lo = range;\n cmp = descending;\n }\n\n lo = Math.floor(lo);\n hi = Math.ceil(hi); // filter ticks to valid values within the range\n // additionally sort ticks in range order (#2579)\n\n ticks = ticks.map(v => [v, scale(v)]).filter(_ => lo <= _[1] && _[1] <= hi).sort(cmp).map(_ => _[0]);\n\n if (count > 0 && ticks.length > 1) {\n const endpoints = [ticks[0], peek(ticks)];\n\n while (ticks.length > count && ticks.length >= 3) {\n ticks = ticks.filter((_, i) => !(i % 2));\n }\n\n if (ticks.length < 3) {\n ticks = endpoints;\n }\n }\n\n return ticks;\n}\n/**\n * Generate tick values for the given scale and approximate tick count or\n * interval value. If the scale has a 'ticks' method, it will be used to\n * generate the ticks, with the count argument passed as a parameter. If the\n * scale lacks a 'ticks' method, the full scale domain will be returned.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} [count] - The approximate number of desired ticks.\n * @return {Array<*>} - The generated tick values.\n */\n\nfunction tickValues(scale, count) {\n return scale.bins ? validTicks(scale, scale.bins) : scale.ticks ? scale.ticks(count) : scale.domain();\n}\n/**\n * Generate a label format function for a scale. If the scale has a\n * 'tickFormat' method, it will be used to generate the formatter, with the\n * count and specifier arguments passed as parameters. If the scale lacks a\n * 'tickFormat' method, the returned formatter performs simple string coercion.\n * If the input scale is a logarithmic scale and the format specifier does not\n * indicate a desired decimal precision, a special variable precision formatter\n * that automatically trims trailing zeroes will be generated.\n * @param {Scale} scale - The scale for which to generate the label formatter.\n * @param {*} [count] - The approximate number of desired ticks.\n * @param {string} [specifier] - The format specifier. Must be a legal d3\n * specifier string (see https://github.com/d3/d3-format#formatSpecifier) or\n * time multi-format specifier object.\n * @return {function(*):string} - The generated label formatter.\n */\n\nfunction tickFormat(locale, scale, count, specifier, formatType, noSkip) {\n const type = scale.type;\n let format = defaultFormatter;\n\n if (type === Time || formatType === Time) {\n format = locale.timeFormat(specifier);\n } else if (type === UTC || formatType === UTC) {\n format = locale.utcFormat(specifier);\n } else if (isLogarithmic(type)) {\n const varfmt = locale.formatFloat(specifier);\n\n if (noSkip || scale.bins) {\n format = varfmt;\n } else {\n const test = tickLog(scale, count, false);\n\n format = _ => test(_) ? varfmt(_) : '';\n }\n } else if (scale.tickFormat) {\n // if d3 scale has tickFormat, it must be continuous\n const d = scale.domain();\n format = locale.formatSpan(d[0], d[d.length - 1], count, specifier);\n } else if (specifier) {\n format = locale.format(specifier);\n }\n\n return format;\n}\nfunction tickLog(scale, count, values) {\n const ticks = tickValues(scale, count),\n base = scale.base(),\n logb = Math.log(base),\n k = Math.max(1, base * count / ticks.length); // apply d3-scale's log format filter criteria\n\n const test = d => {\n let i = d / Math.pow(base, Math.round(Math.log(d) / logb));\n if (i * base < base - 0.5) i *= base;\n return i <= k;\n };\n\n return values ? ticks.filter(test) : test;\n}\n\nconst symbols = {\n [Quantile]: 'quantiles',\n [Quantize]: 'thresholds',\n [Threshold]: 'domain'\n};\nconst formats = {\n [Quantile]: 'quantiles',\n [Quantize]: 'domain'\n};\nfunction labelValues(scale, count) {\n return scale.bins ? binValues(scale.bins) : scale.type === Log ? tickLog(scale, count, true) : symbols[scale.type] ? thresholdValues(scale[symbols[scale.type]]()) : tickValues(scale, count);\n}\nfunction thresholdFormat(locale, scale, specifier) {\n const _ = scale[formats[scale.type]](),\n n = _.length;\n\n let d = n > 1 ? _[1] - _[0] : _[0],\n i;\n\n for (i = 1; i < n; ++i) {\n d = Math.min(d, _[i] - _[i - 1]);\n } // tickCount = 3 ticks times 10 for increased resolution\n\n\n return locale.formatSpan(0, d, 3 * 10, specifier);\n}\n\nfunction thresholdValues(thresholds) {\n const values = [-Infinity].concat(thresholds);\n values.max = +Infinity;\n return values;\n}\n\nfunction binValues(bins) {\n const values = bins.slice(0, -1);\n values.max = peek(bins);\n return values;\n}\n\nconst isDiscreteRange = scale => symbols[scale.type] || scale.bins;\n\nfunction labelFormat(locale, scale, count, type, specifier, formatType, noSkip) {\n const format = formats[scale.type] && formatType !== Time && formatType !== UTC ? thresholdFormat(locale, scale, specifier) : tickFormat(locale, scale, count, specifier, formatType, noSkip);\n return type === SymbolLegend && isDiscreteRange(scale) ? formatRange(format) : type === DiscreteLegend ? formatDiscrete(format) : formatPoint(format);\n}\n\nconst formatRange = format => (value, index, array) => {\n const limit = get(array[index + 1], get(array.max, +Infinity)),\n lo = formatValue(value, format),\n hi = formatValue(limit, format);\n return lo && hi ? lo + ' \\u2013 ' + hi : hi ? '< ' + hi : '\\u2265 ' + lo;\n};\n\nconst get = (value, dflt) => value != null ? value : dflt;\n\nconst formatDiscrete = format => (value, index) => index ? format(value) : null;\n\nconst formatPoint = format => value => format(value);\n\nconst formatValue = (value, format) => Number.isFinite(value) ? format(value) : null;\n\nfunction labelFraction(scale) {\n const domain = scale.domain(),\n count = domain.length - 1;\n let lo = +domain[0],\n hi = +peek(domain),\n span = hi - lo;\n\n if (scale.type === Threshold) {\n const adjust = count ? span / count : 0.1;\n lo -= adjust;\n hi += adjust;\n span = hi - lo;\n }\n\n return value => (value - lo) / span;\n}\n\nfunction format(locale, scale, specifier, formatType) {\n const type = formatType || scale.type; // replace abbreviated time specifiers to improve screen reader experience\n\n if (isString(specifier) && isTemporal(type)) {\n specifier = specifier.replace(/%a/g, '%A').replace(/%b/g, '%B');\n }\n\n return !specifier && type === Time ? locale.timeFormat('%A, %d %B %Y, %X') : !specifier && type === UTC ? locale.utcFormat('%A, %d %B %Y, %X UTC') : labelFormat(locale, scale, 5, null, specifier, formatType, true);\n}\n\nfunction domainCaption(locale, scale, opt) {\n opt = opt || {};\n const max = Math.max(3, opt.maxlen || 7),\n fmt = format(locale, scale, opt.format, opt.formatType); // if scale breaks domain into bins, describe boundaries\n\n if (isDiscretizing(scale.type)) {\n const v = labelValues(scale).slice(1).map(fmt),\n n = v.length;\n return `${n} boundar${n === 1 ? 'y' : 'ies'}: ${v.join(', ')}`;\n } // if scale domain is discrete, list values\n else if (isDiscrete(scale.type)) {\n const d = scale.domain(),\n n = d.length,\n v = n > max ? d.slice(0, max - 2).map(fmt).join(', ') + ', ending with ' + d.slice(-1).map(fmt) : d.map(fmt).join(', ');\n return `${n} value${n === 1 ? '' : 's'}: ${v}`;\n } // if scale domain is continuous, describe value range\n else {\n const d = scale.domain();\n return `values from ${fmt(d[0])} to ${fmt(peek(d))}`;\n }\n}\n\nexport { Band, BinOrdinal, DiscreteLegend, Diverging, GradientLegend, Identity, Linear, Log, Ordinal, Point, Pow, Quantile, Quantize, Sequential, Sqrt, SymbolLegend, Symlog, Threshold, Time, UTC, bandSpace, domainCaption, interpolate, interpolateColors, interpolateRange, isContinuous, isDiscrete, isDiscretizing, isInterpolating, isLogarithmic, isQuantile, isTemporal, isValidScaleType, labelFormat, labelFraction, labelValues, quantizeInterpolator, scale, scaleCopy, scaleFraction, scheme, tickCount, tickFormat, tickValues, validTicks };\n","import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n var unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n return linearish(scale);\n}\n","import {calendar} from \"./time.js\";\nimport {utcFormat} from \"d3-time-format\";\nimport {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond} from \"d3-time\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n return initRange.apply(calendar(utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import { hasOwnProperty, isFunction, inherits, truthy, lruCache, isArray, error, toSet, array, peek, extend, isNumber, isObject } from 'vega-util';\nimport { curveBasis, curveBasisClosed, curveBasisOpen, curveBundle, curveCardinal, curveCardinalOpen, curveCardinalClosed, curveCatmullRom, curveCatmullRomClosed, curveCatmullRomOpen, curveLinear, curveLinearClosed, curveMonotoneY, curveMonotoneX, curveNatural, curveStep, curveStepAfter, curveStepBefore, arc as arc$2, area as area$2, line as line$2, symbol as symbol$2 } from 'd3-shape';\nimport { path as path$3 } from 'd3-path';\nimport { image as image$1, canvas } from 'vega-canvas';\nimport { loader } from 'vega-loader';\nimport { isDiscrete, domainCaption } from 'vega-scale';\n\nlet gradient_id = 0;\nfunction resetSVGGradientId() {\n gradient_id = 0;\n}\nconst patternPrefix = 'p_';\nfunction isGradient(value) {\n return value && value.gradient;\n}\nfunction gradientRef(g, defs, base) {\n const type = g.gradient;\n let id = g.id,\n prefix = type === 'radial' ? patternPrefix : ''; // check id, assign default values as needed\n\n if (!id) {\n id = g.id = 'gradient_' + gradient_id++;\n\n if (type === 'radial') {\n g.x1 = get(g.x1, 0.5);\n g.y1 = get(g.y1, 0.5);\n g.r1 = get(g.r1, 0);\n g.x2 = get(g.x2, 0.5);\n g.y2 = get(g.y2, 0.5);\n g.r2 = get(g.r2, 0.5);\n prefix = patternPrefix;\n } else {\n g.x1 = get(g.x1, 0);\n g.y1 = get(g.y1, 0);\n g.x2 = get(g.x2, 1);\n g.y2 = get(g.y2, 0);\n }\n } // register definition\n\n\n defs[id] = g; // return url reference\n\n return 'url(' + (base || '') + '#' + prefix + id + ')';\n}\n\nfunction get(val, def) {\n return val != null ? val : def;\n}\n\nfunction Gradient (p0, p1) {\n var stops = [],\n gradient;\n return gradient = {\n gradient: 'linear',\n x1: p0 ? p0[0] : 0,\n y1: p0 ? p0[1] : 0,\n x2: p1 ? p1[0] : 1,\n y2: p1 ? p1[1] : 0,\n stops: stops,\n stop: function (offset, color) {\n stops.push({\n offset: offset,\n color: color\n });\n return gradient;\n }\n };\n}\n\nconst lookup = {\n 'basis': {\n curve: curveBasis\n },\n 'basis-closed': {\n curve: curveBasisClosed\n },\n 'basis-open': {\n curve: curveBasisOpen\n },\n 'bundle': {\n curve: curveBundle,\n tension: 'beta',\n value: 0.85\n },\n 'cardinal': {\n curve: curveCardinal,\n tension: 'tension',\n value: 0\n },\n 'cardinal-open': {\n curve: curveCardinalOpen,\n tension: 'tension',\n value: 0\n },\n 'cardinal-closed': {\n curve: curveCardinalClosed,\n tension: 'tension',\n value: 0\n },\n 'catmull-rom': {\n curve: curveCatmullRom,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-closed': {\n curve: curveCatmullRomClosed,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-open': {\n curve: curveCatmullRomOpen,\n tension: 'alpha',\n value: 0.5\n },\n 'linear': {\n curve: curveLinear\n },\n 'linear-closed': {\n curve: curveLinearClosed\n },\n 'monotone': {\n horizontal: curveMonotoneY,\n vertical: curveMonotoneX\n },\n 'natural': {\n curve: curveNatural\n },\n 'step': {\n curve: curveStep\n },\n 'step-after': {\n curve: curveStepAfter\n },\n 'step-before': {\n curve: curveStepBefore\n }\n};\nfunction curves(type, orientation, tension) {\n var entry = hasOwnProperty(lookup, type) && lookup[type],\n curve = null;\n\n if (entry) {\n curve = entry.curve || entry[orientation || 'vertical'];\n\n if (entry.tension && tension != null) {\n curve = curve[entry.tension](tension);\n }\n }\n\n return curve;\n}\n\n// Path parsing and rendering code adapted from fabric.js -- Thanks!\nconst cmdlen = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7\n},\n regexp = [/([MLHVCSQTAZmlhvcsqtaz])/g, /###/, /(\\.\\d+)(\\.\\d)/g, /(\\d)([-+])/g, /\\s|,|###/];\nfunction pathParse (pathstr) {\n const result = [];\n let curr, chunks, parsed, param, cmd, len, i, j, n, m; // First, break path into command sequence\n\n const path = pathstr.slice().replace(regexp[0], '###$1').split(regexp[1]).slice(1); // Next, parse each command in turn\n\n for (i = 0, n = path.length; i < n; ++i) {\n curr = path[i];\n chunks = curr.slice(1).trim().replace(regexp[2], '$1###$2').replace(regexp[3], '$1###$2').split(regexp[4]);\n cmd = curr.charAt(0);\n parsed = [cmd];\n\n for (j = 0, m = chunks.length; j < m; ++j) {\n if ((param = +chunks[j]) === param) {\n // not NaN\n parsed.push(param);\n }\n }\n\n len = cmdlen[cmd.toLowerCase()];\n\n if (parsed.length - 1 > len) {\n const m = parsed.length;\n j = 1;\n result.push([cmd].concat(parsed.slice(j, j += len))); // handle implicit lineTo (#2803)\n\n cmd = cmd === 'M' ? 'L' : cmd === 'm' ? 'l' : cmd;\n\n for (; j < m; j += len) {\n result.push([cmd].concat(parsed.slice(j, j + len)));\n }\n } else {\n result.push(parsed);\n }\n }\n\n return result;\n}\n\nconst DegToRad = Math.PI / 180;\nconst Epsilon = 1e-14;\nconst HalfPi = Math.PI / 2;\nconst Tau = Math.PI * 2;\nconst HalfSqrt3 = Math.sqrt(3) / 2;\n\nvar segmentCache = {};\nvar bezierCache = {};\nvar join = [].join; // Copied from Inkscape svgtopdf, thanks!\n\nfunction segments(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\n const key = join.call(arguments);\n\n if (segmentCache[key]) {\n return segmentCache[key];\n }\n\n const th = rotateX * DegToRad;\n const sin_th = Math.sin(th);\n const cos_th = Math.cos(th);\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n const px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\n const py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\n let pl = px * px / (rx * rx) + py * py / (ry * ry);\n\n if (pl > 1) {\n pl = Math.sqrt(pl);\n rx *= pl;\n ry *= pl;\n }\n\n const a00 = cos_th / rx;\n const a01 = sin_th / rx;\n const a10 = -sin_th / ry;\n const a11 = cos_th / ry;\n const x0 = a00 * ox + a01 * oy;\n const y0 = a10 * ox + a11 * oy;\n const x1 = a00 * x + a01 * y;\n const y1 = a10 * x + a11 * y;\n const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\n let sfactor_sq = 1 / d - 0.25;\n if (sfactor_sq < 0) sfactor_sq = 0;\n let sfactor = Math.sqrt(sfactor_sq);\n if (sweep == large) sfactor = -sfactor;\n const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\n const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\n const th0 = Math.atan2(y0 - yc, x0 - xc);\n const th1 = Math.atan2(y1 - yc, x1 - xc);\n let th_arc = th1 - th0;\n\n if (th_arc < 0 && sweep === 1) {\n th_arc += Tau;\n } else if (th_arc > 0 && sweep === 0) {\n th_arc -= Tau;\n }\n\n const segs = Math.ceil(Math.abs(th_arc / (HalfPi + 0.001)));\n const result = [];\n\n for (let i = 0; i < segs; ++i) {\n const th2 = th0 + i * th_arc / segs;\n const th3 = th0 + (i + 1) * th_arc / segs;\n result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\n }\n\n return segmentCache[key] = result;\n}\nfunction bezier(params) {\n const key = join.call(params);\n\n if (bezierCache[key]) {\n return bezierCache[key];\n }\n\n var cx = params[0],\n cy = params[1],\n th0 = params[2],\n th1 = params[3],\n rx = params[4],\n ry = params[5],\n sin_th = params[6],\n cos_th = params[7];\n const a00 = cos_th * rx;\n const a01 = -sin_th * ry;\n const a10 = sin_th * rx;\n const a11 = cos_th * ry;\n const cos_th0 = Math.cos(th0);\n const sin_th0 = Math.sin(th0);\n const cos_th1 = Math.cos(th1);\n const sin_th1 = Math.sin(th1);\n const th_half = 0.5 * (th1 - th0);\n const sin_th_h2 = Math.sin(th_half * 0.5);\n const t = 8 / 3 * sin_th_h2 * sin_th_h2 / Math.sin(th_half);\n const x1 = cx + cos_th0 - t * sin_th0;\n const y1 = cy + sin_th0 + t * cos_th0;\n const x3 = cx + cos_th1;\n const y3 = cy + sin_th1;\n const x2 = x3 + t * sin_th1;\n const y2 = y3 - t * cos_th1;\n return bezierCache[key] = [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3];\n}\n\nconst temp = ['l', 0, 0, 0, 0, 0, 0, 0];\n\nfunction scale$1(current, sX, sY) {\n const c = temp[0] = current[0];\n\n if (c === 'a' || c === 'A') {\n temp[1] = sX * current[1];\n temp[2] = sY * current[2];\n temp[3] = current[3];\n temp[4] = current[4];\n temp[5] = current[5];\n temp[6] = sX * current[6];\n temp[7] = sY * current[7];\n } else if (c === 'h' || c === 'H') {\n temp[1] = sX * current[1];\n } else if (c === 'v' || c === 'V') {\n temp[1] = sY * current[1];\n } else {\n for (var i = 1, n = current.length; i < n; ++i) {\n temp[i] = (i % 2 == 1 ? sX : sY) * current[i];\n }\n }\n\n return temp;\n}\n\nfunction pathRender (context, path, l, t, sX, sY) {\n var current,\n // current instruction\n previous = null,\n x = 0,\n // current x\n y = 0,\n // current y\n controlX = 0,\n // current control point x\n controlY = 0,\n // current control point y\n tempX,\n tempY,\n tempControlX,\n tempControlY;\n if (l == null) l = 0;\n if (t == null) t = 0;\n if (sX == null) sX = 1;\n if (sY == null) sY = sX;\n if (context.beginPath) context.beginPath();\n\n for (var i = 0, len = path.length; i < len; ++i) {\n current = path[i];\n\n if (sX !== 1 || sY !== 1) {\n current = scale$1(current, sX, sY);\n }\n\n switch (current[0]) {\n // first letter\n case 'l':\n // lineto, relative\n x += current[1];\n y += current[2];\n context.lineTo(x + l, y + t);\n break;\n\n case 'L':\n // lineto, absolute\n x = current[1];\n y = current[2];\n context.lineTo(x + l, y + t);\n break;\n\n case 'h':\n // horizontal lineto, relative\n x += current[1];\n context.lineTo(x + l, y + t);\n break;\n\n case 'H':\n // horizontal lineto, absolute\n x = current[1];\n context.lineTo(x + l, y + t);\n break;\n\n case 'v':\n // vertical lineto, relative\n y += current[1];\n context.lineTo(x + l, y + t);\n break;\n\n case 'V':\n // verical lineto, absolute\n y = current[1];\n context.lineTo(x + l, y + t);\n break;\n\n case 'm':\n // moveTo, relative\n x += current[1];\n y += current[2];\n context.moveTo(x + l, y + t);\n break;\n\n case 'M':\n // moveTo, absolute\n x = current[1];\n y = current[2];\n context.moveTo(x + l, y + t);\n break;\n\n case 'c':\n // bezierCurveTo, relative\n tempX = x + current[5];\n tempY = y + current[6];\n controlX = x + current[3];\n controlY = y + current[4];\n context.bezierCurveTo(x + current[1] + l, // x1\n y + current[2] + t, // y1\n controlX + l, // x2\n controlY + t, // y2\n tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'C':\n // bezierCurveTo, absolute\n x = current[5];\n y = current[6];\n controlX = current[3];\n controlY = current[4];\n context.bezierCurveTo(current[1] + l, current[2] + t, controlX + l, controlY + t, x + l, y + t);\n break;\n\n case 's':\n // shorthand cubic bezierCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4]; // calculate reflection of previous control points\n\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.bezierCurveTo(controlX + l, controlY + t, x + current[1] + l, y + current[2] + t, tempX + l, tempY + t); // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n\n controlX = x + current[1];\n controlY = y + current[2];\n x = tempX;\n y = tempY;\n break;\n\n case 'S':\n // shorthand cubic bezierCurveTo, absolute\n tempX = current[3];\n tempY = current[4]; // calculate reflection of previous control points\n\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.bezierCurveTo(controlX + l, controlY + t, current[1] + l, current[2] + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY; // set control point to 2nd one of this command\n // the first control point is assumed to be the reflection of\n // the second control point on the previous command relative\n // to the current point.\n\n controlX = current[1];\n controlY = current[2];\n break;\n\n case 'q':\n // quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[3];\n tempY = y + current[4];\n controlX = x + current[1];\n controlY = y + current[2];\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'Q':\n // quadraticCurveTo, absolute\n tempX = current[3];\n tempY = current[4];\n context.quadraticCurveTo(current[1] + l, current[2] + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = current[1];\n controlY = current[2];\n break;\n\n case 't':\n // shorthand quadraticCurveTo, relative\n // transform to absolute x,y\n tempX = x + current[1];\n tempY = y + current[2];\n\n if (previous[0].match(/[QqTt]/) === null) {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n } else if (previous[0] === 't') {\n // calculate reflection of previous control points for t\n controlX = 2 * x - tempControlX;\n controlY = 2 * y - tempControlY;\n } else if (previous[0] === 'q') {\n // calculate reflection of previous control points for q\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n\n tempControlX = controlX;\n tempControlY = controlY;\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n controlX = x + current[1];\n controlY = y + current[2];\n break;\n\n case 'T':\n tempX = current[1];\n tempY = current[2]; // calculate reflection of previous control points\n\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n context.quadraticCurveTo(controlX + l, controlY + t, tempX + l, tempY + t);\n x = tempX;\n y = tempY;\n break;\n\n case 'a':\n drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + x + l, current[7] + y + t]);\n x += current[6];\n y += current[7];\n break;\n\n case 'A':\n drawArc(context, x + l, y + t, [current[1], current[2], current[3], current[4], current[5], current[6] + l, current[7] + t]);\n x = current[6];\n y = current[7];\n break;\n\n case 'z':\n case 'Z':\n context.closePath();\n break;\n }\n\n previous = current;\n }\n}\n\nfunction drawArc(context, x, y, coords) {\n const seg = segments(coords[5], // end x\n coords[6], // end y\n coords[0], // radius x\n coords[1], // radius y\n coords[3], // large flag\n coords[4], // sweep flag\n coords[2], // rotation\n x, y);\n\n for (let i = 0; i < seg.length; ++i) {\n const bez = bezier(seg[i]);\n context.bezierCurveTo(bez[0], bez[1], bez[2], bez[3], bez[4], bez[5]);\n }\n}\n\nconst Tan30 = 0.5773502691896257;\nconst builtins = {\n 'circle': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, Tau);\n }\n },\n 'cross': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n s = r / 2.5;\n context.moveTo(-r, -s);\n context.lineTo(-r, s);\n context.lineTo(-s, s);\n context.lineTo(-s, r);\n context.lineTo(s, r);\n context.lineTo(s, s);\n context.lineTo(r, s);\n context.lineTo(r, -s);\n context.lineTo(s, -s);\n context.lineTo(s, -r);\n context.lineTo(-s, -r);\n context.lineTo(-s, -s);\n context.closePath();\n }\n },\n 'diamond': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(-r, 0);\n context.lineTo(0, -r);\n context.lineTo(r, 0);\n context.lineTo(0, r);\n context.closePath();\n }\n },\n 'square': {\n draw: function (context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n },\n 'arrow': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n s = r / 7,\n t = r / 2.5,\n v = r / 8;\n context.moveTo(-s, r);\n context.lineTo(s, r);\n context.lineTo(s, -v);\n context.lineTo(t, -v);\n context.lineTo(0, -r);\n context.lineTo(-t, -v);\n context.lineTo(-s, -v);\n context.closePath();\n }\n },\n 'wedge': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r,\n o = h - r * Tan30,\n b = r / 4;\n context.moveTo(0, -h - o);\n context.lineTo(-b, h - o);\n context.lineTo(b, h - o);\n context.closePath();\n }\n },\n 'triangle': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r,\n o = h - r * Tan30;\n context.moveTo(0, -h - o);\n context.lineTo(-r, h - o);\n context.lineTo(r, h - o);\n context.closePath();\n }\n },\n 'triangle-up': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(0, -h);\n context.lineTo(-r, h);\n context.lineTo(r, h);\n context.closePath();\n }\n },\n 'triangle-down': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(0, h);\n context.lineTo(-r, -h);\n context.lineTo(r, -h);\n context.closePath();\n }\n },\n 'triangle-right': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(h, 0);\n context.lineTo(-h, -r);\n context.lineTo(-h, r);\n context.closePath();\n }\n },\n 'triangle-left': {\n draw: function (context, size) {\n var r = Math.sqrt(size) / 2,\n h = HalfSqrt3 * r;\n context.moveTo(-h, 0);\n context.lineTo(h, -r);\n context.lineTo(h, r);\n context.closePath();\n }\n },\n 'stroke': {\n draw: function (context, size) {\n const r = Math.sqrt(size) / 2;\n context.moveTo(-r, 0);\n context.lineTo(r, 0);\n }\n }\n};\nfunction symbols(_) {\n return hasOwnProperty(builtins, _) ? builtins[_] : customSymbol(_);\n}\nvar custom = {};\n\nfunction customSymbol(path) {\n if (!hasOwnProperty(custom, path)) {\n const parsed = pathParse(path);\n custom[path] = {\n draw: function (context, size) {\n pathRender(context, parsed, 0, 0, Math.sqrt(size) / 2);\n }\n };\n }\n\n return custom[path];\n}\n\nconst C = 0.448084975506; // C = 1 - c\n\nfunction rectangleX(d) {\n return d.x;\n}\n\nfunction rectangleY(d) {\n return d.y;\n}\n\nfunction rectangleWidth(d) {\n return d.width;\n}\n\nfunction rectangleHeight(d) {\n return d.height;\n}\n\nfunction number(_) {\n return typeof _ === 'function' ? _ : () => +_;\n}\n\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(value, max));\n}\n\nfunction vg_rect () {\n var x = rectangleX,\n y = rectangleY,\n width = rectangleWidth,\n height = rectangleHeight,\n crTL = number(0),\n crTR = crTL,\n crBL = crTL,\n crBR = crTL,\n context = null;\n\n function rectangle(_, x0, y0) {\n var buffer,\n x1 = x0 != null ? x0 : +x.call(this, _),\n y1 = y0 != null ? y0 : +y.call(this, _),\n w = +width.call(this, _),\n h = +height.call(this, _),\n s = Math.min(w, h) / 2,\n tl = clamp(+crTL.call(this, _), 0, s),\n tr = clamp(+crTR.call(this, _), 0, s),\n bl = clamp(+crBL.call(this, _), 0, s),\n br = clamp(+crBR.call(this, _), 0, s);\n if (!context) context = buffer = path$3();\n\n if (tl <= 0 && tr <= 0 && bl <= 0 && br <= 0) {\n context.rect(x1, y1, w, h);\n } else {\n var x2 = x1 + w,\n y2 = y1 + h;\n context.moveTo(x1 + tl, y1);\n context.lineTo(x2 - tr, y1);\n context.bezierCurveTo(x2 - C * tr, y1, x2, y1 + C * tr, x2, y1 + tr);\n context.lineTo(x2, y2 - br);\n context.bezierCurveTo(x2, y2 - C * br, x2 - C * br, y2, x2 - br, y2);\n context.lineTo(x1 + bl, y2);\n context.bezierCurveTo(x1 + C * bl, y2, x1, y2 - C * bl, x1, y2 - bl);\n context.lineTo(x1, y1 + tl);\n context.bezierCurveTo(x1, y1 + C * tl, x1 + C * tl, y1, x1 + tl, y1);\n context.closePath();\n }\n\n if (buffer) {\n context = null;\n return buffer + '' || null;\n }\n }\n\n rectangle.x = function (_) {\n if (arguments.length) {\n x = number(_);\n return rectangle;\n } else {\n return x;\n }\n };\n\n rectangle.y = function (_) {\n if (arguments.length) {\n y = number(_);\n return rectangle;\n } else {\n return y;\n }\n };\n\n rectangle.width = function (_) {\n if (arguments.length) {\n width = number(_);\n return rectangle;\n } else {\n return width;\n }\n };\n\n rectangle.height = function (_) {\n if (arguments.length) {\n height = number(_);\n return rectangle;\n } else {\n return height;\n }\n };\n\n rectangle.cornerRadius = function (tl, tr, br, bl) {\n if (arguments.length) {\n crTL = number(tl);\n crTR = tr != null ? number(tr) : crTL;\n crBR = br != null ? number(br) : crTL;\n crBL = bl != null ? number(bl) : crTR;\n return rectangle;\n } else {\n return crTL;\n }\n };\n\n rectangle.context = function (_) {\n if (arguments.length) {\n context = _ == null ? null : _;\n return rectangle;\n } else {\n return context;\n }\n };\n\n return rectangle;\n}\n\nfunction vg_trail () {\n var x,\n y,\n size,\n defined,\n context = null,\n ready,\n x1,\n y1,\n r1;\n\n function point(x2, y2, w2) {\n const r2 = w2 / 2;\n\n if (ready) {\n var ux = y1 - y2,\n uy = x2 - x1;\n\n if (ux || uy) {\n // get normal vector\n var ud = Math.sqrt(ux * ux + uy * uy),\n rx = (ux /= ud) * r1,\n ry = (uy /= ud) * r1,\n t = Math.atan2(uy, ux); // draw segment\n\n context.moveTo(x1 - rx, y1 - ry);\n context.lineTo(x2 - ux * r2, y2 - uy * r2);\n context.arc(x2, y2, r2, t - Math.PI, t);\n context.lineTo(x1 + rx, y1 + ry);\n context.arc(x1, y1, r1, t, t + Math.PI);\n } else {\n context.arc(x2, y2, r2, 0, Tau);\n }\n\n context.closePath();\n } else {\n ready = 1;\n }\n\n x1 = x2;\n y1 = y2;\n r1 = r2;\n }\n\n function trail(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n if (context == null) context = buffer = path$3();\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) ready = 0;\n }\n\n if (defined0) point(+x(d, i, data), +y(d, i, data), +size(d, i, data));\n }\n\n if (buffer) {\n context = null;\n return buffer + '' || null;\n }\n }\n\n trail.x = function (_) {\n if (arguments.length) {\n x = _;\n return trail;\n } else {\n return x;\n }\n };\n\n trail.y = function (_) {\n if (arguments.length) {\n y = _;\n return trail;\n } else {\n return y;\n }\n };\n\n trail.size = function (_) {\n if (arguments.length) {\n size = _;\n return trail;\n } else {\n return size;\n }\n };\n\n trail.defined = function (_) {\n if (arguments.length) {\n defined = _;\n return trail;\n } else {\n return defined;\n }\n };\n\n trail.context = function (_) {\n if (arguments.length) {\n if (_ == null) {\n context = null;\n } else {\n context = _;\n }\n\n return trail;\n } else {\n return context;\n }\n };\n\n return trail;\n}\n\nfunction value$1(a, b) {\n return a != null ? a : b;\n}\n\nconst x = item => item.x || 0,\n y = item => item.y || 0,\n w = item => item.width || 0,\n h = item => item.height || 0,\n xw = item => (item.x || 0) + (item.width || 0),\n yh = item => (item.y || 0) + (item.height || 0),\n sa = item => item.startAngle || 0,\n ea = item => item.endAngle || 0,\n pa = item => item.padAngle || 0,\n ir = item => item.innerRadius || 0,\n or = item => item.outerRadius || 0,\n cr = item => item.cornerRadius || 0,\n tl = item => value$1(item.cornerRadiusTopLeft, item.cornerRadius) || 0,\n tr = item => value$1(item.cornerRadiusTopRight, item.cornerRadius) || 0,\n br = item => value$1(item.cornerRadiusBottomRight, item.cornerRadius) || 0,\n bl = item => value$1(item.cornerRadiusBottomLeft, item.cornerRadius) || 0,\n sz = item => value$1(item.size, 64),\n ts = item => item.size || 1,\n def = item => !(item.defined === false),\n type = item => symbols(item.shape || 'circle');\n\nconst arcShape = arc$2().startAngle(sa).endAngle(ea).padAngle(pa).innerRadius(ir).outerRadius(or).cornerRadius(cr),\n areavShape = area$2().x(x).y1(y).y0(yh).defined(def),\n areahShape = area$2().y(y).x1(x).x0(xw).defined(def),\n lineShape = line$2().x(x).y(y).defined(def),\n rectShape = vg_rect().x(x).y(y).width(w).height(h).cornerRadius(tl, tr, br, bl),\n symbolShape = symbol$2().type(type).size(sz),\n trailShape = vg_trail().x(x).y(y).defined(def).size(ts);\nfunction hasCornerRadius(item) {\n return item.cornerRadius || item.cornerRadiusTopLeft || item.cornerRadiusTopRight || item.cornerRadiusBottomRight || item.cornerRadiusBottomLeft;\n}\nfunction arc$1(context, item) {\n return arcShape.context(context)(item);\n}\nfunction area$1(context, items) {\n const item = items[0],\n interp = item.interpolate || 'linear';\n return (item.orient === 'horizontal' ? areahShape : areavShape).curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction line$1(context, items) {\n const item = items[0],\n interp = item.interpolate || 'linear';\n return lineShape.curve(curves(interp, item.orient, item.tension)).context(context)(items);\n}\nfunction rectangle(context, item, x, y) {\n return rectShape.context(context)(item, x, y);\n}\nfunction shape$1(context, item) {\n return (item.mark.shape || item.shape).context(context)(item);\n}\nfunction symbol$1(context, item) {\n return symbolShape.context(context)(item);\n}\nfunction trail$1(context, items) {\n return trailShape.context(context)(items);\n}\n\nvar clip_id = 1;\nfunction resetSVGClipId() {\n clip_id = 1;\n}\nfunction clip$1 (renderer, item, size) {\n var clip = item.clip,\n defs = renderer._defs,\n id = item.clip_id || (item.clip_id = 'clip' + clip_id++),\n c = defs.clipping[id] || (defs.clipping[id] = {\n id: id\n });\n\n if (isFunction(clip)) {\n c.path = clip(null);\n } else if (hasCornerRadius(size)) {\n c.path = rectangle(null, size, 0, 0);\n } else {\n c.width = size.width || 0;\n c.height = size.height || 0;\n }\n\n return 'url(#' + id + ')';\n}\n\nfunction Bounds(b) {\n this.clear();\n if (b) this.union(b);\n}\nBounds.prototype = {\n clone() {\n return new Bounds(this);\n },\n\n clear() {\n this.x1 = +Number.MAX_VALUE;\n this.y1 = +Number.MAX_VALUE;\n this.x2 = -Number.MAX_VALUE;\n this.y2 = -Number.MAX_VALUE;\n return this;\n },\n\n empty() {\n return this.x1 === +Number.MAX_VALUE && this.y1 === +Number.MAX_VALUE && this.x2 === -Number.MAX_VALUE && this.y2 === -Number.MAX_VALUE;\n },\n\n equals(b) {\n return this.x1 === b.x1 && this.y1 === b.y1 && this.x2 === b.x2 && this.y2 === b.y2;\n },\n\n set(x1, y1, x2, y2) {\n if (x2 < x1) {\n this.x2 = x1;\n this.x1 = x2;\n } else {\n this.x1 = x1;\n this.x2 = x2;\n }\n\n if (y2 < y1) {\n this.y2 = y1;\n this.y1 = y2;\n } else {\n this.y1 = y1;\n this.y2 = y2;\n }\n\n return this;\n },\n\n add(x, y) {\n if (x < this.x1) this.x1 = x;\n if (y < this.y1) this.y1 = y;\n if (x > this.x2) this.x2 = x;\n if (y > this.y2) this.y2 = y;\n return this;\n },\n\n expand(d) {\n this.x1 -= d;\n this.y1 -= d;\n this.x2 += d;\n this.y2 += d;\n return this;\n },\n\n round() {\n this.x1 = Math.floor(this.x1);\n this.y1 = Math.floor(this.y1);\n this.x2 = Math.ceil(this.x2);\n this.y2 = Math.ceil(this.y2);\n return this;\n },\n\n scale(s) {\n this.x1 *= s;\n this.y1 *= s;\n this.x2 *= s;\n this.y2 *= s;\n return this;\n },\n\n translate(dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n },\n\n rotate(angle, x, y) {\n const p = this.rotatedPoints(angle, x, y);\n return this.clear().add(p[0], p[1]).add(p[2], p[3]).add(p[4], p[5]).add(p[6], p[7]);\n },\n\n rotatedPoints(angle, x, y) {\n var {\n x1,\n y1,\n x2,\n y2\n } = this,\n cos = Math.cos(angle),\n sin = Math.sin(angle),\n cx = x - x * cos + y * sin,\n cy = y - x * sin - y * cos;\n return [cos * x1 - sin * y1 + cx, sin * x1 + cos * y1 + cy, cos * x1 - sin * y2 + cx, sin * x1 + cos * y2 + cy, cos * x2 - sin * y1 + cx, sin * x2 + cos * y1 + cy, cos * x2 - sin * y2 + cx, sin * x2 + cos * y2 + cy];\n },\n\n union(b) {\n if (b.x1 < this.x1) this.x1 = b.x1;\n if (b.y1 < this.y1) this.y1 = b.y1;\n if (b.x2 > this.x2) this.x2 = b.x2;\n if (b.y2 > this.y2) this.y2 = b.y2;\n return this;\n },\n\n intersect(b) {\n if (b.x1 > this.x1) this.x1 = b.x1;\n if (b.y1 > this.y1) this.y1 = b.y1;\n if (b.x2 < this.x2) this.x2 = b.x2;\n if (b.y2 < this.y2) this.y2 = b.y2;\n return this;\n },\n\n encloses(b) {\n return b && this.x1 <= b.x1 && this.x2 >= b.x2 && this.y1 <= b.y1 && this.y2 >= b.y2;\n },\n\n alignsWith(b) {\n return b && (this.x1 == b.x1 || this.x2 == b.x2 || this.y1 == b.y1 || this.y2 == b.y2);\n },\n\n intersects(b) {\n return b && !(this.x2 < b.x1 || this.x1 > b.x2 || this.y2 < b.y1 || this.y1 > b.y2);\n },\n\n contains(x, y) {\n return !(x < this.x1 || x > this.x2 || y < this.y1 || y > this.y2);\n },\n\n width() {\n return this.x2 - this.x1;\n },\n\n height() {\n return this.y2 - this.y1;\n }\n\n};\n\nfunction Item(mark) {\n this.mark = mark;\n this.bounds = this.bounds || new Bounds();\n}\n\nfunction GroupItem(mark) {\n Item.call(this, mark);\n this.items = this.items || [];\n}\ninherits(GroupItem, Item);\n\nfunction ResourceLoader(customLoader) {\n this._pending = 0;\n this._loader = customLoader || loader();\n}\n\nfunction increment(loader) {\n loader._pending += 1;\n}\n\nfunction decrement(loader) {\n loader._pending -= 1;\n}\n\nResourceLoader.prototype = {\n pending() {\n return this._pending;\n },\n\n sanitizeURL(uri) {\n const loader = this;\n increment(loader);\n return loader._loader.sanitize(uri, {\n context: 'href'\n }).then(opt => {\n decrement(loader);\n return opt;\n }).catch(() => {\n decrement(loader);\n return null;\n });\n },\n\n loadImage(uri) {\n const loader = this,\n Image = image$1();\n increment(loader);\n return loader._loader.sanitize(uri, {\n context: 'image'\n }).then(opt => {\n const url = opt.href;\n if (!url || !Image) throw {\n url: url\n };\n const img = new Image(); // set crossOrigin only if cors is defined; empty string sets anonymous mode\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/crossOrigin\n\n const cors = hasOwnProperty(opt, 'crossOrigin') ? opt.crossOrigin : 'anonymous';\n if (cors != null) img.crossOrigin = cors; // attempt to load image resource\n\n img.onload = () => decrement(loader);\n\n img.onerror = () => decrement(loader);\n\n img.src = url;\n return img;\n }).catch(e => {\n decrement(loader);\n return {\n complete: false,\n width: 0,\n height: 0,\n src: e && e.url || ''\n };\n });\n },\n\n ready() {\n const loader = this;\n return new Promise(accept => {\n function poll(value) {\n if (!loader.pending()) accept(value);else setTimeout(() => {\n poll(true);\n }, 10);\n }\n\n poll(false);\n });\n }\n\n};\n\nfunction boundStroke (bounds, item, miter) {\n if (item.stroke && item.opacity !== 0 && item.strokeOpacity !== 0) {\n const sw = item.strokeWidth != null ? +item.strokeWidth : 1;\n bounds.expand(sw + (miter ? miterAdjustment(item, sw) : 0));\n }\n\n return bounds;\n}\n\nfunction miterAdjustment(item, strokeWidth) {\n // TODO: more sophisticated adjustment? Or miter support in boundContext?\n return item.strokeJoin && item.strokeJoin !== 'miter' ? 0 : strokeWidth;\n}\n\nconst circleThreshold = Tau - 1e-8;\nlet bounds, lx, ly, rot, ma, mb, mc, md;\n\nconst add = (x, y) => bounds.add(x, y);\n\nconst addL = (x, y) => add(lx = x, ly = y);\n\nconst addX = x => add(x, bounds.y1);\n\nconst addY = y => add(bounds.x1, y);\n\nconst px = (x, y) => ma * x + mc * y;\n\nconst py = (x, y) => mb * x + md * y;\n\nconst addp = (x, y) => add(px(x, y), py(x, y));\n\nconst addpL = (x, y) => addL(px(x, y), py(x, y));\n\nfunction boundContext (_, deg) {\n bounds = _;\n\n if (deg) {\n rot = deg * DegToRad;\n ma = md = Math.cos(rot);\n mb = Math.sin(rot);\n mc = -mb;\n } else {\n ma = md = 1;\n rot = mb = mc = 0;\n }\n\n return context$1;\n}\nconst context$1 = {\n beginPath() {},\n\n closePath() {},\n\n moveTo: addpL,\n lineTo: addpL,\n\n rect(x, y, w, h) {\n if (rot) {\n addp(x + w, y);\n addp(x + w, y + h);\n addp(x, y + h);\n addpL(x, y);\n } else {\n add(x + w, y + h);\n addL(x, y);\n }\n },\n\n quadraticCurveTo(x1, y1, x2, y2) {\n const px1 = px(x1, y1),\n py1 = py(x1, y1),\n px2 = px(x2, y2),\n py2 = py(x2, y2);\n quadExtrema(lx, px1, px2, addX);\n quadExtrema(ly, py1, py2, addY);\n addL(px2, py2);\n },\n\n bezierCurveTo(x1, y1, x2, y2, x3, y3) {\n const px1 = px(x1, y1),\n py1 = py(x1, y1),\n px2 = px(x2, y2),\n py2 = py(x2, y2),\n px3 = px(x3, y3),\n py3 = py(x3, y3);\n cubicExtrema(lx, px1, px2, px3, addX);\n cubicExtrema(ly, py1, py2, py3, addY);\n addL(px3, py3);\n },\n\n arc(cx, cy, r, sa, ea, ccw) {\n sa += rot;\n ea += rot; // store last point on path\n\n lx = r * Math.cos(ea) + cx;\n ly = r * Math.sin(ea) + cy;\n\n if (Math.abs(ea - sa) > circleThreshold) {\n // treat as full circle\n add(cx - r, cy - r);\n add(cx + r, cy + r);\n } else {\n const update = a => add(r * Math.cos(a) + cx, r * Math.sin(a) + cy);\n\n let s, i; // sample end points\n\n update(sa);\n update(ea); // sample interior points aligned with 90 degrees\n\n if (ea !== sa) {\n sa = sa % Tau;\n if (sa < 0) sa += Tau;\n ea = ea % Tau;\n if (ea < 0) ea += Tau;\n\n if (ea < sa) {\n ccw = !ccw; // flip direction\n\n s = sa;\n sa = ea;\n ea = s; // swap end-points\n }\n\n if (ccw) {\n ea -= Tau;\n s = sa - sa % HalfPi;\n\n for (i = 0; i < 4 && s > ea; ++i, s -= HalfPi) update(s);\n } else {\n s = sa - sa % HalfPi + HalfPi;\n\n for (i = 0; i < 4 && s < ea; ++i, s = s + HalfPi) update(s);\n }\n }\n }\n }\n\n};\n\nfunction quadExtrema(x0, x1, x2, cb) {\n const t = (x0 - x1) / (x0 + x2 - 2 * x1);\n if (0 < t && t < 1) cb(x0 + (x1 - x0) * t);\n}\n\nfunction cubicExtrema(x0, x1, x2, x3, cb) {\n const a = x3 - x0 + 3 * x1 - 3 * x2,\n b = x0 + x2 - 2 * x1,\n c = x0 - x1;\n let t0 = 0,\n t1 = 0,\n r; // solve for parameter t\n\n if (Math.abs(a) > Epsilon) {\n // quadratic equation\n r = b * b + c * a;\n\n if (r >= 0) {\n r = Math.sqrt(r);\n t0 = (-b + r) / a;\n t1 = (-b - r) / a;\n }\n } else {\n // linear equation\n t0 = 0.5 * c / b;\n } // calculate position\n\n\n if (0 < t0 && t0 < 1) cb(cubic(t0, x0, x1, x2, x3));\n if (0 < t1 && t1 < 1) cb(cubic(t1, x0, x1, x2, x3));\n}\n\nfunction cubic(t, x0, x1, x2, x3) {\n const s = 1 - t,\n s2 = s * s,\n t2 = t * t;\n return s2 * s * x0 + 3 * s2 * t * x1 + 3 * s * t2 * x2 + t2 * t * x3;\n}\n\nvar context = (context = canvas(1, 1)) ? context.getContext('2d') : null;\n\nconst b = new Bounds();\nfunction intersectPath(draw) {\n return function (item, brush) {\n // rely on (inaccurate) bounds intersection if no context\n if (!context) return true; // add path to offscreen graphics context\n\n draw(context, item); // get bounds intersection region\n\n b.clear().union(item.bounds).intersect(brush).round();\n const {\n x1,\n y1,\n x2,\n y2\n } = b; // iterate over intersection region\n // perform fine grained inclusion test\n\n for (let y = y1; y <= y2; ++y) {\n for (let x = x1; x <= x2; ++x) {\n if (context.isPointInPath(x, y)) {\n return true;\n }\n }\n } // false if no hits in intersection region\n\n\n return false;\n };\n}\nfunction intersectPoint(item, box) {\n return box.contains(item.x || 0, item.y || 0);\n}\nfunction intersectRect(item, box) {\n const x = item.x || 0,\n y = item.y || 0,\n w = item.width || 0,\n h = item.height || 0;\n return box.intersects(b.set(x, y, x + w, y + h));\n}\nfunction intersectRule(item, box) {\n const x = item.x || 0,\n y = item.y || 0,\n x2 = item.x2 != null ? item.x2 : x,\n y2 = item.y2 != null ? item.y2 : y;\n return intersectBoxLine(box, x, y, x2, y2);\n}\nfunction intersectBoxLine(box, x, y, u, v) {\n const {\n x1,\n y1,\n x2,\n y2\n } = box,\n dx = u - x,\n dy = v - y;\n let t0 = 0,\n t1 = 1,\n p,\n q,\n r,\n e;\n\n for (e = 0; e < 4; ++e) {\n if (e === 0) {\n p = -dx;\n q = -(x1 - x);\n }\n\n if (e === 1) {\n p = dx;\n q = x2 - x;\n }\n\n if (e === 2) {\n p = -dy;\n q = -(y1 - y);\n }\n\n if (e === 3) {\n p = dy;\n q = y2 - y;\n }\n\n if (Math.abs(p) < 1e-10 && q < 0) return false;\n r = q / p;\n\n if (p < 0) {\n if (r > t1) return false;else if (r > t0) t0 = r;\n } else if (p > 0) {\n if (r < t0) return false;else if (r < t1) t1 = r;\n }\n }\n\n return true;\n}\n\nfunction blend (context, item) {\n context.globalCompositeOperation = item.blend || 'source-over';\n}\n\nfunction value (value, dflt) {\n return value == null ? dflt : value;\n}\n\nfunction addStops(gradient, stops) {\n const n = stops.length;\n\n for (let i = 0; i < n; ++i) {\n gradient.addColorStop(stops[i].offset, stops[i].color);\n }\n\n return gradient;\n}\n\nfunction gradient (context, spec, bounds) {\n const w = bounds.width(),\n h = bounds.height();\n let gradient;\n\n if (spec.gradient === 'radial') {\n gradient = context.createRadialGradient(bounds.x1 + value(spec.x1, 0.5) * w, bounds.y1 + value(spec.y1, 0.5) * h, Math.max(w, h) * value(spec.r1, 0), bounds.x1 + value(spec.x2, 0.5) * w, bounds.y1 + value(spec.y2, 0.5) * h, Math.max(w, h) * value(spec.r2, 0.5));\n } else {\n // linear gradient\n const x1 = value(spec.x1, 0),\n y1 = value(spec.y1, 0),\n x2 = value(spec.x2, 1),\n y2 = value(spec.y2, 0);\n\n if (x1 === x2 || y1 === y2 || w === h) {\n // axis aligned: use normal gradient\n gradient = context.createLinearGradient(bounds.x1 + x1 * w, bounds.y1 + y1 * h, bounds.x1 + x2 * w, bounds.y1 + y2 * h);\n } else {\n // not axis aligned: render gradient into a pattern (#2365)\n // this allows us to use normalized bounding box coordinates\n const image = canvas(Math.ceil(w), Math.ceil(h)),\n ictx = image.getContext('2d');\n ictx.scale(w, h);\n ictx.fillStyle = addStops(ictx.createLinearGradient(x1, y1, x2, y2), spec.stops);\n ictx.fillRect(0, 0, w, h);\n return context.createPattern(image, 'no-repeat');\n }\n }\n\n return addStops(gradient, spec.stops);\n}\n\nfunction color (context, item, value) {\n return isGradient(value) ? gradient(context, value, item.bounds) : value;\n}\n\nfunction fill (context, item, opacity) {\n opacity *= item.fillOpacity == null ? 1 : item.fillOpacity;\n\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.fillStyle = color(context, item, item.fill);\n return true;\n } else {\n return false;\n }\n}\n\nvar Empty = [];\nfunction stroke (context, item, opacity) {\n var lw = (lw = item.strokeWidth) != null ? lw : 1;\n if (lw <= 0) return false;\n opacity *= item.strokeOpacity == null ? 1 : item.strokeOpacity;\n\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.strokeStyle = color(context, item, item.stroke);\n context.lineWidth = lw;\n context.lineCap = item.strokeCap || 'butt';\n context.lineJoin = item.strokeJoin || 'miter';\n context.miterLimit = item.strokeMiterLimit || 10;\n\n if (context.setLineDash) {\n context.setLineDash(item.strokeDash || Empty);\n context.lineDashOffset = item.strokeDashOffset || 0;\n }\n\n return true;\n } else {\n return false;\n }\n}\n\nfunction compare(a, b) {\n return a.zindex - b.zindex || a.index - b.index;\n}\n\nfunction zorder(scene) {\n if (!scene.zdirty) return scene.zitems;\n var items = scene.items,\n output = [],\n item,\n i,\n n;\n\n for (i = 0, n = items.length; i < n; ++i) {\n item = items[i];\n item.index = i;\n if (item.zindex) output.push(item);\n }\n\n scene.zdirty = false;\n return scene.zitems = output.sort(compare);\n}\nfunction visit(scene, visitor) {\n var items = scene.items,\n i,\n n;\n if (!items || !items.length) return;\n const zitems = zorder(scene);\n\n if (zitems && zitems.length) {\n for (i = 0, n = items.length; i < n; ++i) {\n if (!items[i].zindex) visitor(items[i]);\n }\n\n items = zitems;\n }\n\n for (i = 0, n = items.length; i < n; ++i) {\n visitor(items[i]);\n }\n}\nfunction pickVisit(scene, visitor) {\n var items = scene.items,\n hit,\n i;\n if (!items || !items.length) return null;\n const zitems = zorder(scene);\n if (zitems && zitems.length) items = zitems;\n\n for (i = items.length; --i >= 0;) {\n if (hit = visitor(items[i])) return hit;\n }\n\n if (items === zitems) {\n for (items = scene.items, i = items.length; --i >= 0;) {\n if (!items[i].zindex) {\n if (hit = visitor(items[i])) return hit;\n }\n }\n }\n\n return null;\n}\n\nfunction drawAll(path) {\n return function (context, scene, bounds) {\n visit(scene, item => {\n if (!bounds || bounds.intersects(item.bounds)) {\n drawPath(path, context, item, item);\n }\n });\n };\n}\nfunction drawOne(path) {\n return function (context, scene, bounds) {\n if (scene.items.length && (!bounds || bounds.intersects(scene.bounds))) {\n drawPath(path, context, scene.items[0], scene.items);\n }\n };\n}\n\nfunction drawPath(path, context, item, items) {\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity === 0) return;\n if (path(context, items)) return;\n blend(context, item);\n\n if (item.fill && fill(context, item, opacity)) {\n context.fill();\n }\n\n if (item.stroke && stroke(context, item, opacity)) {\n context.stroke();\n }\n}\n\nfunction pick$1(test) {\n test = test || truthy;\n return function (context, scene, x, y, gx, gy) {\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return pickVisit(scene, item => {\n const b = item.bounds; // first hit test against bounding box\n\n if (b && !b.contains(gx, gy) || !b) return; // if in bounding box, perform more careful test\n\n if (test(context, item, x, y, gx, gy)) return item;\n });\n };\n}\nfunction hitPath(path, filled) {\n return function (context, o, x, y) {\n var item = Array.isArray(o) ? o[0] : o,\n fill = filled == null ? item.fill : filled,\n stroke = item.stroke && context.isPointInStroke,\n lw,\n lc;\n\n if (stroke) {\n lw = item.strokeWidth;\n lc = item.strokeCap;\n context.lineWidth = lw != null ? lw : 1;\n context.lineCap = lc != null ? lc : 'butt';\n }\n\n return path(context, o) ? false : fill && context.isPointInPath(x, y) || stroke && context.isPointInStroke(x, y);\n };\n}\nfunction pickPath(path) {\n return pick$1(hitPath(path));\n}\n\nfunction translate(x, y) {\n return 'translate(' + x + ',' + y + ')';\n}\nfunction rotate(a) {\n return 'rotate(' + a + ')';\n}\nfunction scale(scaleX, scaleY) {\n return 'scale(' + scaleX + ',' + scaleY + ')';\n}\nfunction translateItem(item) {\n return translate(item.x || 0, item.y || 0);\n}\nfunction rotateItem(item) {\n return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '');\n}\nfunction transformItem(item) {\n return translate(item.x || 0, item.y || 0) + (item.angle ? ' ' + rotate(item.angle) : '') + (item.scaleX || item.scaleY ? ' ' + scale(item.scaleX || 1, item.scaleY || 1) : '');\n}\n\nfunction markItemPath (type, shape, isect) {\n function attr(emit, item) {\n emit('transform', rotateItem(item));\n emit('d', shape(null, item));\n }\n\n function bound(bounds, item) {\n shape(boundContext(bounds, item.angle), item);\n return boundStroke(bounds, item).translate(item.x || 0, item.y || 0);\n }\n\n function draw(context, item) {\n var x = item.x || 0,\n y = item.y || 0,\n a = item.angle || 0;\n context.translate(x, y);\n if (a) context.rotate(a *= DegToRad);\n context.beginPath();\n shape(context, item);\n if (a) context.rotate(-a);\n context.translate(-x, -y);\n }\n\n return {\n type: type,\n tag: 'path',\n nested: false,\n attr: attr,\n bound: bound,\n draw: drawAll(draw),\n pick: pickPath(draw),\n isect: isect || intersectPath(draw)\n };\n}\n\nvar arc = markItemPath('arc', arc$1);\n\nfunction pickArea(a, p) {\n var v = a[0].orient === 'horizontal' ? p[1] : p[0],\n z = a[0].orient === 'horizontal' ? 'y' : 'x',\n i = a.length,\n min = +Infinity,\n hit,\n d;\n\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n d = Math.abs(a[i][z] - v);\n\n if (d < min) {\n min = d;\n hit = a[i];\n }\n }\n\n return hit;\n}\nfunction pickLine(a, p) {\n var t = Math.pow(a[0].strokeWidth || 1, 2),\n i = a.length,\n dx,\n dy,\n dd;\n\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n if (dd < t) return a[i];\n }\n\n return null;\n}\nfunction pickTrail(a, p) {\n var i = a.length,\n dx,\n dy,\n dd;\n\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n dx = a[i].size || 1;\n if (dd < dx * dx) return a[i];\n }\n\n return null;\n}\n\nfunction markMultiItemPath (type, shape, tip) {\n function attr(emit, item) {\n var items = item.mark.items;\n if (items.length) emit('d', shape(null, items));\n }\n\n function bound(bounds, mark) {\n var items = mark.items;\n\n if (items.length === 0) {\n return bounds;\n } else {\n shape(boundContext(bounds), items);\n return boundStroke(bounds, items[0]);\n }\n }\n\n function draw(context, items) {\n context.beginPath();\n shape(context, items);\n }\n\n const hit = hitPath(draw);\n\n function pick(context, scene, x, y, gx, gy) {\n var items = scene.items,\n b = scene.bounds;\n\n if (!items || !items.length || b && !b.contains(gx, gy)) {\n return null;\n }\n\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return hit(context, items, x, y) ? items[0] : null;\n }\n\n return {\n type: type,\n tag: 'path',\n nested: true,\n attr: attr,\n bound: bound,\n draw: drawOne(draw),\n pick: pick,\n isect: intersectPoint,\n tip: tip\n };\n}\n\nvar area = markMultiItemPath('area', area$1, pickArea);\n\nfunction clip (context, scene) {\n var clip = scene.clip;\n context.save();\n\n if (isFunction(clip)) {\n context.beginPath();\n clip(context);\n context.clip();\n } else {\n clipGroup(context, scene.group);\n }\n}\nfunction clipGroup(context, group) {\n context.beginPath();\n hasCornerRadius(group) ? rectangle(context, group, 0, 0) : context.rect(0, 0, group.width || 0, group.height || 0);\n context.clip();\n}\n\nfunction offset$1(item) {\n const sw = value(item.strokeWidth, 1);\n return item.strokeOffset != null ? item.strokeOffset : item.stroke && sw > 0.5 && sw < 1.5 ? 0.5 - Math.abs(sw - 1) : 0;\n}\n\nfunction attr$5(emit, item) {\n emit('transform', translateItem(item));\n}\n\nfunction emitRectangle(emit, item) {\n const off = offset$1(item);\n emit('d', rectangle(null, item, off, off));\n}\n\nfunction background(emit, item) {\n emit('class', 'background');\n emit('aria-hidden', true);\n emitRectangle(emit, item);\n}\n\nfunction foreground(emit, item) {\n emit('class', 'foreground');\n emit('aria-hidden', true);\n\n if (item.strokeForeground) {\n emitRectangle(emit, item);\n } else {\n emit('d', '');\n }\n}\n\nfunction content(emit, item, renderer) {\n const url = item.clip ? clip$1(renderer, item, item) : null;\n emit('clip-path', url);\n}\n\nfunction bound$5(bounds, group) {\n if (!group.clip && group.items) {\n const items = group.items,\n m = items.length;\n\n for (let j = 0; j < m; ++j) {\n bounds.union(items[j].bounds);\n }\n }\n\n if ((group.clip || group.width || group.height) && !group.noBound) {\n bounds.add(0, 0).add(group.width || 0, group.height || 0);\n }\n\n boundStroke(bounds, group);\n return bounds.translate(group.x || 0, group.y || 0);\n}\n\nfunction rectanglePath(context, group, x, y) {\n const off = offset$1(group);\n context.beginPath();\n rectangle(context, group, (x || 0) + off, (y || 0) + off);\n}\n\nconst hitBackground = hitPath(rectanglePath);\nconst hitForeground = hitPath(rectanglePath, false);\nconst hitCorner = hitPath(rectanglePath, true);\n\nfunction draw$4(context, scene, bounds) {\n visit(scene, group => {\n const gx = group.x || 0,\n gy = group.y || 0,\n fore = group.strokeForeground,\n opacity = group.opacity == null ? 1 : group.opacity; // draw group background\n\n if ((group.stroke || group.fill) && opacity) {\n rectanglePath(context, group, gx, gy);\n blend(context, group);\n\n if (group.fill && fill(context, group, opacity)) {\n context.fill();\n }\n\n if (group.stroke && !fore && stroke(context, group, opacity)) {\n context.stroke();\n }\n } // setup graphics context, set clip and bounds\n\n\n context.save();\n context.translate(gx, gy);\n if (group.clip) clipGroup(context, group);\n if (bounds) bounds.translate(-gx, -gy); // draw group contents\n\n visit(group, item => {\n this.draw(context, item, bounds);\n }); // restore graphics context\n\n if (bounds) bounds.translate(gx, gy);\n context.restore(); // draw group foreground\n\n if (fore && group.stroke && opacity) {\n rectanglePath(context, group, gx, gy);\n blend(context, group);\n\n if (stroke(context, group, opacity)) {\n context.stroke();\n }\n }\n });\n}\n\nfunction pick(context, scene, x, y, gx, gy) {\n if (scene.bounds && !scene.bounds.contains(gx, gy) || !scene.items) {\n return null;\n }\n\n const cx = x * context.pixelRatio,\n cy = y * context.pixelRatio;\n return pickVisit(scene, group => {\n let hit, dx, dy; // first hit test bounding box\n\n const b = group.bounds;\n if (b && !b.contains(gx, gy)) return; // passed bounds check, test rectangular clip\n\n dx = group.x || 0;\n dy = group.y || 0;\n const dw = dx + (group.width || 0),\n dh = dy + (group.height || 0),\n c = group.clip;\n if (c && (gx < dx || gx > dw || gy < dy || gy > dh)) return; // adjust coordinate system\n\n context.save();\n context.translate(dx, dy);\n dx = gx - dx;\n dy = gy - dy; // test background for rounded corner clip\n\n if (c && hasCornerRadius(group) && !hitCorner(context, group, cx, cy)) {\n context.restore();\n return null;\n }\n\n const fore = group.strokeForeground,\n ix = scene.interactive !== false; // hit test against group foreground\n\n if (ix && fore && group.stroke && hitForeground(context, group, cx, cy)) {\n context.restore();\n return group;\n } // hit test against contained marks\n\n\n hit = pickVisit(group, mark => pickMark(mark, dx, dy) ? this.pick(mark, x, y, dx, dy) : null); // hit test against group background\n\n if (!hit && ix && (group.fill || !fore && group.stroke) && hitBackground(context, group, cx, cy)) {\n hit = group;\n } // restore state and return\n\n\n context.restore();\n return hit || null;\n });\n}\n\nfunction pickMark(mark, x, y) {\n return (mark.interactive !== false || mark.marktype === 'group') && mark.bounds && mark.bounds.contains(x, y);\n}\n\nvar group = {\n type: 'group',\n tag: 'g',\n nested: false,\n attr: attr$5,\n bound: bound$5,\n draw: draw$4,\n pick: pick,\n isect: intersectRect,\n content: content,\n background: background,\n foreground: foreground\n};\n\nvar metadata = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'version': '1.1'\n};\n\nfunction getImage(item, renderer) {\n var image = item.image;\n\n if (!image || item.url && item.url !== image.url) {\n image = {\n complete: false,\n width: 0,\n height: 0\n };\n renderer.loadImage(item.url).then(image => {\n item.image = image;\n item.image.url = item.url;\n });\n }\n\n return image;\n}\n\nfunction imageWidth(item, image) {\n return item.width != null ? item.width : !image || !image.width ? 0 : item.aspect !== false && item.height ? item.height * image.width / image.height : image.width;\n}\n\nfunction imageHeight(item, image) {\n return item.height != null ? item.height : !image || !image.height ? 0 : item.aspect !== false && item.width ? item.width * image.height / image.width : image.height;\n}\n\nfunction imageXOffset(align, w) {\n return align === 'center' ? w / 2 : align === 'right' ? w : 0;\n}\n\nfunction imageYOffset(baseline, h) {\n return baseline === 'middle' ? h / 2 : baseline === 'bottom' ? h : 0;\n}\n\nfunction attr$4(emit, item, renderer) {\n const img = getImage(item, renderer),\n w = imageWidth(item, img),\n h = imageHeight(item, img),\n x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h),\n i = !img.src && img.toDataURL ? img.toDataURL() : img.src || '';\n emit('href', i, metadata['xmlns:xlink'], 'xlink:href');\n emit('transform', translate(x, y));\n emit('width', w);\n emit('height', h);\n emit('preserveAspectRatio', item.aspect === false ? 'none' : 'xMidYMid');\n}\n\nfunction bound$4(bounds, item) {\n const img = item.image,\n w = imageWidth(item, img),\n h = imageHeight(item, img),\n x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h);\n return bounds.set(x, y, x + w, y + h);\n}\n\nfunction draw$3(context, scene, bounds) {\n visit(scene, item => {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n const img = getImage(item, this);\n let w = imageWidth(item, img);\n let h = imageHeight(item, img);\n if (w === 0 || h === 0) return; // early exit\n\n let x = (item.x || 0) - imageXOffset(item.align, w),\n y = (item.y || 0) - imageYOffset(item.baseline, h),\n opacity,\n ar0,\n ar1,\n t;\n\n if (item.aspect !== false) {\n ar0 = img.width / img.height;\n ar1 = item.width / item.height;\n\n if (ar0 === ar0 && ar1 === ar1 && ar0 !== ar1) {\n if (ar1 < ar0) {\n t = w / ar0;\n y += (h - t) / 2;\n h = t;\n } else {\n t = h * ar0;\n x += (w - t) / 2;\n w = t;\n }\n }\n }\n\n if (img.complete || img.toDataURL) {\n blend(context, item);\n context.globalAlpha = (opacity = item.opacity) != null ? opacity : 1;\n context.imageSmoothingEnabled = item.smooth !== false;\n context.drawImage(img, x, y, w, h);\n }\n });\n}\n\nvar image = {\n type: 'image',\n tag: 'image',\n nested: false,\n attr: attr$4,\n bound: bound$4,\n draw: draw$3,\n pick: pick$1(),\n isect: truthy,\n // bounds check is sufficient\n get: getImage,\n xOffset: imageXOffset,\n yOffset: imageYOffset\n};\n\nvar line = markMultiItemPath('line', line$1, pickLine);\n\nfunction attr$3(emit, item) {\n var sx = item.scaleX || 1,\n sy = item.scaleY || 1;\n\n if (sx !== 1 || sy !== 1) {\n emit('vector-effect', 'non-scaling-stroke');\n }\n\n emit('transform', transformItem(item));\n emit('d', item.path);\n}\n\nfunction path$1(context, item) {\n var path = item.path;\n if (path == null) return true;\n var x = item.x || 0,\n y = item.y || 0,\n sx = item.scaleX || 1,\n sy = item.scaleY || 1,\n a = (item.angle || 0) * DegToRad,\n cache = item.pathCache;\n\n if (!cache || cache.path !== path) {\n (item.pathCache = cache = pathParse(path)).path = path;\n }\n\n if (a && context.rotate && context.translate) {\n context.translate(x, y);\n context.rotate(a);\n pathRender(context, cache, 0, 0, sx, sy);\n context.rotate(-a);\n context.translate(-x, -y);\n } else {\n pathRender(context, cache, x, y, sx, sy);\n }\n}\n\nfunction bound$3(bounds, item) {\n return path$1(boundContext(bounds, item.angle), item) ? bounds.set(0, 0, 0, 0) : boundStroke(bounds, item, true);\n}\n\nvar path$2 = {\n type: 'path',\n tag: 'path',\n nested: false,\n attr: attr$3,\n bound: bound$3,\n draw: drawAll(path$1),\n pick: pickPath(path$1),\n isect: intersectPath(path$1)\n};\n\nfunction attr$2(emit, item) {\n emit('d', rectangle(null, item));\n}\n\nfunction bound$2(bounds, item) {\n var x, y;\n return boundStroke(bounds.set(x = item.x || 0, y = item.y || 0, x + item.width || 0, y + item.height || 0), item);\n}\n\nfunction draw$2(context, item) {\n context.beginPath();\n rectangle(context, item);\n}\n\nvar rect = {\n type: 'rect',\n tag: 'path',\n nested: false,\n attr: attr$2,\n bound: bound$2,\n draw: drawAll(draw$2),\n pick: pickPath(draw$2),\n isect: intersectRect\n};\n\nfunction attr$1(emit, item) {\n emit('transform', translateItem(item));\n emit('x2', item.x2 != null ? item.x2 - (item.x || 0) : 0);\n emit('y2', item.y2 != null ? item.y2 - (item.y || 0) : 0);\n}\n\nfunction bound$1(bounds, item) {\n var x1, y1;\n return boundStroke(bounds.set(x1 = item.x || 0, y1 = item.y || 0, item.x2 != null ? item.x2 : x1, item.y2 != null ? item.y2 : y1), item);\n}\n\nfunction path(context, item, opacity) {\n var x1, y1, x2, y2;\n\n if (item.stroke && stroke(context, item, opacity)) {\n x1 = item.x || 0;\n y1 = item.y || 0;\n x2 = item.x2 != null ? item.x2 : x1;\n y2 = item.y2 != null ? item.y2 : y1;\n context.beginPath();\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n return true;\n }\n\n return false;\n}\n\nfunction draw$1(context, scene, bounds) {\n visit(scene, item => {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n var opacity = item.opacity == null ? 1 : item.opacity;\n\n if (opacity && path(context, item, opacity)) {\n blend(context, item);\n context.stroke();\n }\n });\n}\n\nfunction hit$1(context, item, x, y) {\n if (!context.isPointInStroke) return false;\n return path(context, item, 1) && context.isPointInStroke(x, y);\n}\n\nvar rule = {\n type: 'rule',\n tag: 'line',\n nested: false,\n attr: attr$1,\n bound: bound$1,\n draw: draw$1,\n pick: pick$1(hit$1),\n isect: intersectRule\n};\n\nvar shape = markItemPath('shape', shape$1);\n\nvar symbol = markItemPath('symbol', symbol$1, intersectPoint);\n\nconst widthCache = lruCache();\nvar textMetrics = {\n height: fontSize,\n measureWidth: measureWidth,\n estimateWidth: estimateWidth,\n width: estimateWidth,\n canvas: useCanvas\n};\nuseCanvas(true);\n\nfunction useCanvas(use) {\n textMetrics.width = use && context ? measureWidth : estimateWidth;\n} // make simple estimate if no canvas is available\n\n\nfunction estimateWidth(item, text) {\n return _estimateWidth(textValue(item, text), fontSize(item));\n}\n\nfunction _estimateWidth(text, currentFontHeight) {\n return ~~(0.8 * text.length * currentFontHeight);\n} // measure text width if canvas is available\n\n\nfunction measureWidth(item, text) {\n return fontSize(item) <= 0 || !(text = textValue(item, text)) ? 0 : _measureWidth(text, font(item));\n}\n\nfunction _measureWidth(text, currentFont) {\n const key = `(${currentFont}) ${text}`;\n let width = widthCache.get(key);\n\n if (width === undefined) {\n context.font = currentFont;\n width = context.measureText(text).width;\n widthCache.set(key, width);\n }\n\n return width;\n}\n\nfunction fontSize(item) {\n return item.fontSize != null ? +item.fontSize || 0 : 11;\n}\nfunction lineHeight(item) {\n return item.lineHeight != null ? item.lineHeight : fontSize(item) + 2;\n}\n\nfunction lineArray(_) {\n return isArray(_) ? _.length > 1 ? _ : _[0] : _;\n}\n\nfunction textLines(item) {\n return lineArray(item.lineBreak && item.text && !isArray(item.text) ? item.text.split(item.lineBreak) : item.text);\n}\nfunction multiLineOffset(item) {\n const tl = textLines(item);\n return (isArray(tl) ? tl.length - 1 : 0) * lineHeight(item);\n}\nfunction textValue(item, line) {\n const text = line == null ? '' : (line + '').trim();\n return item.limit > 0 && text.length ? truncate(item, text) : text;\n}\n\nfunction widthGetter(item) {\n if (textMetrics.width === measureWidth) {\n // we are using canvas\n const currentFont = font(item);\n return text => _measureWidth(text, currentFont);\n } else {\n // we are relying on estimates\n const currentFontHeight = fontSize(item);\n return text => _estimateWidth(text, currentFontHeight);\n }\n}\n\nfunction truncate(item, text) {\n var limit = +item.limit,\n width = widthGetter(item);\n if (width(text) < limit) return text;\n var ellipsis = item.ellipsis || '\\u2026',\n rtl = item.dir === 'rtl',\n lo = 0,\n hi = text.length,\n mid;\n limit -= width(ellipsis);\n\n if (rtl) {\n while (lo < hi) {\n mid = lo + hi >>> 1;\n if (width(text.slice(mid)) > limit) lo = mid + 1;else hi = mid;\n }\n\n return ellipsis + text.slice(lo);\n } else {\n while (lo < hi) {\n mid = 1 + (lo + hi >>> 1);\n if (width(text.slice(0, mid)) < limit) lo = mid;else hi = mid - 1;\n }\n\n return text.slice(0, lo) + ellipsis;\n }\n}\n\nfunction fontFamily(item, quote) {\n var font = item.font;\n return (quote && font ? String(font).replace(/\"/g, '\\'') : font) || 'sans-serif';\n}\nfunction font(item, quote) {\n return '' + (item.fontStyle ? item.fontStyle + ' ' : '') + (item.fontVariant ? item.fontVariant + ' ' : '') + (item.fontWeight ? item.fontWeight + ' ' : '') + fontSize(item) + 'px ' + fontFamily(item, quote);\n}\nfunction offset(item) {\n // perform our own font baseline calculation\n // why? not all browsers support SVG 1.1 'alignment-baseline' :(\n // this also ensures consistent layout across renderers\n var baseline = item.baseline,\n h = fontSize(item);\n return Math.round(baseline === 'top' ? 0.79 * h : baseline === 'middle' ? 0.30 * h : baseline === 'bottom' ? -0.21 * h : baseline === 'line-top' ? 0.29 * h + 0.5 * lineHeight(item) : baseline === 'line-bottom' ? 0.29 * h - 0.5 * lineHeight(item) : 0);\n}\n\nconst textAlign = {\n 'left': 'start',\n 'center': 'middle',\n 'right': 'end'\n};\nconst tempBounds = new Bounds();\n\nfunction anchorPoint(item) {\n var x = item.x || 0,\n y = item.y || 0,\n r = item.radius || 0,\n t;\n\n if (r) {\n t = (item.theta || 0) - HalfPi;\n x += r * Math.cos(t);\n y += r * Math.sin(t);\n }\n\n tempBounds.x1 = x;\n tempBounds.y1 = y;\n return tempBounds;\n}\n\nfunction attr(emit, item) {\n var dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item),\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n a = item.angle || 0,\n t;\n emit('text-anchor', textAlign[item.align] || 'start');\n\n if (a) {\n t = translate(x, y) + ' ' + rotate(a);\n if (dx || dy) t += ' ' + translate(dx, dy);\n } else {\n t = translate(x + dx, y + dy);\n }\n\n emit('transform', t);\n}\n\nfunction bound(bounds, item, mode) {\n var h = textMetrics.height(item),\n a = item.align,\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item) - Math.round(0.8 * h),\n // use 4/5 offset\n tl = textLines(item),\n w; // get dimensions\n\n if (isArray(tl)) {\n // multi-line text\n h += lineHeight(item) * (tl.length - 1);\n w = tl.reduce((w, t) => Math.max(w, textMetrics.width(item, t)), 0);\n } else {\n // single-line text\n w = textMetrics.width(item, tl);\n } // horizontal alignment\n\n\n if (a === 'center') {\n dx -= w / 2;\n } else if (a === 'right') {\n dx -= w;\n } else ;\n\n bounds.set(dx += x, dy += y, dx + w, dy + h);\n\n if (item.angle && !mode) {\n bounds.rotate(item.angle * DegToRad, x, y);\n } else if (mode === 2) {\n return bounds.rotatedPoints(item.angle * DegToRad, x, y);\n }\n\n return bounds;\n}\n\nfunction draw(context, scene, bounds) {\n visit(scene, item => {\n var opacity = item.opacity == null ? 1 : item.opacity,\n p,\n x,\n y,\n i,\n lh,\n tl,\n str;\n if (bounds && !bounds.intersects(item.bounds) || // bounds check\n opacity === 0 || item.fontSize <= 0 || item.text == null || item.text.length === 0) return;\n context.font = font(item);\n context.textAlign = item.align || 'left';\n p = anchorPoint(item);\n x = p.x1, y = p.y1;\n\n if (item.angle) {\n context.save();\n context.translate(x, y);\n context.rotate(item.angle * DegToRad);\n x = y = 0; // reset x, y\n }\n\n x += item.dx || 0;\n y += (item.dy || 0) + offset(item);\n tl = textLines(item);\n blend(context, item);\n\n if (isArray(tl)) {\n lh = lineHeight(item);\n\n for (i = 0; i < tl.length; ++i) {\n str = textValue(item, tl[i]);\n\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n\n y += lh;\n }\n } else {\n str = textValue(item, tl);\n\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n }\n\n if (item.angle) context.restore();\n });\n}\n\nfunction hit(context, item, x, y, gx, gy) {\n if (item.fontSize <= 0) return false;\n if (!item.angle) return true; // bounds sufficient if no rotation\n // project point into space of unrotated bounds\n\n var p = anchorPoint(item),\n ax = p.x1,\n ay = p.y1,\n b = bound(tempBounds, item, 1),\n a = -item.angle * DegToRad,\n cos = Math.cos(a),\n sin = Math.sin(a),\n px = cos * gx - sin * gy + (ax - cos * ax + sin * ay),\n py = sin * gx + cos * gy + (ay - sin * ax - cos * ay);\n return b.contains(px, py);\n}\n\nfunction intersectText(item, box) {\n const p = bound(tempBounds, item, 2);\n return intersectBoxLine(box, p[0], p[1], p[2], p[3]) || intersectBoxLine(box, p[0], p[1], p[4], p[5]) || intersectBoxLine(box, p[4], p[5], p[6], p[7]) || intersectBoxLine(box, p[2], p[3], p[6], p[7]);\n}\n\nvar text = {\n type: 'text',\n tag: 'text',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick$1(hit),\n isect: intersectText\n};\n\nvar trail = markMultiItemPath('trail', trail$1, pickTrail);\n\nvar Marks = {\n arc: arc,\n area: area,\n group: group,\n image: image,\n line: line,\n path: path$2,\n rect: rect,\n rule: rule,\n shape: shape,\n symbol: symbol,\n text: text,\n trail: trail\n};\n\nfunction boundItem (item, func, opt) {\n var type = Marks[item.mark.marktype],\n bound = func || type.bound;\n if (type.nested) item = item.mark;\n return bound(item.bounds || (item.bounds = new Bounds()), item, opt);\n}\n\nvar DUMMY = {\n mark: null\n};\nfunction boundMark (mark, bounds, opt) {\n var type = Marks[mark.marktype],\n bound = type.bound,\n items = mark.items,\n hasItems = items && items.length,\n i,\n n,\n item,\n b;\n\n if (type.nested) {\n if (hasItems) {\n item = items[0];\n } else {\n // no items, fake it\n DUMMY.mark = mark;\n item = DUMMY;\n }\n\n b = boundItem(item, bound, opt);\n bounds = bounds && bounds.union(b) || b;\n return bounds;\n }\n\n bounds = bounds || mark.bounds && mark.bounds.clear() || new Bounds();\n\n if (hasItems) {\n for (i = 0, n = items.length; i < n; ++i) {\n bounds.union(boundItem(items[i], bound, opt));\n }\n }\n\n return mark.bounds = bounds;\n}\n\nconst keys = ['marktype', 'name', 'role', 'interactive', 'clip', 'items', 'zindex', 'x', 'y', 'width', 'height', 'align', 'baseline', // layout\n'fill', 'fillOpacity', 'opacity', 'blend', // fill\n'stroke', 'strokeOpacity', 'strokeWidth', 'strokeCap', // stroke\n'strokeDash', 'strokeDashOffset', // stroke dash\n'strokeForeground', 'strokeOffset', // group\n'startAngle', 'endAngle', 'innerRadius', 'outerRadius', // arc\n'cornerRadius', 'padAngle', // arc, rect\n'cornerRadiusTopLeft', 'cornerRadiusTopRight', // rect, group\n'cornerRadiusBottomLeft', 'cornerRadiusBottomRight', 'interpolate', 'tension', 'orient', 'defined', // area, line\n'url', 'aspect', 'smooth', // image\n'path', 'scaleX', 'scaleY', // path\n'x2', 'y2', // rule\n'size', 'shape', // symbol\n'text', 'angle', 'theta', 'radius', 'dir', 'dx', 'dy', // text\n'ellipsis', 'limit', 'lineBreak', 'lineHeight', 'font', 'fontSize', 'fontWeight', 'fontStyle', 'fontVariant', // font\n'description', 'aria', 'ariaRole', 'ariaRoleDescription' // aria\n];\nfunction sceneToJSON(scene, indent) {\n return JSON.stringify(scene, keys, indent);\n}\nfunction sceneFromJSON(json) {\n const scene = typeof json === 'string' ? JSON.parse(json) : json;\n return initialize(scene);\n}\n\nfunction initialize(scene) {\n var type = scene.marktype,\n items = scene.items,\n parent,\n i,\n n;\n\n if (items) {\n for (i = 0, n = items.length; i < n; ++i) {\n parent = type ? 'mark' : 'group';\n items[i][parent] = scene;\n if (items[i].zindex) items[i][parent].zdirty = true;\n if ('group' === (type || parent)) initialize(items[i]);\n }\n }\n\n if (type) boundMark(scene);\n return scene;\n}\n\nfunction Scenegraph(scene) {\n if (arguments.length) {\n this.root = sceneFromJSON(scene);\n } else {\n this.root = createMark({\n marktype: 'group',\n name: 'root',\n role: 'frame'\n });\n this.root.items = [new GroupItem(this.root)];\n }\n}\nScenegraph.prototype = {\n toJSON(indent) {\n return sceneToJSON(this.root, indent || 0);\n },\n\n mark(markdef, group, index) {\n group = group || this.root.items[0];\n const mark = createMark(markdef, group);\n group.items[index] = mark;\n if (mark.zindex) mark.group.zdirty = true;\n return mark;\n }\n\n};\n\nfunction createMark(def, group) {\n const mark = {\n bounds: new Bounds(),\n clip: !!def.clip,\n group: group,\n interactive: def.interactive === false ? false : true,\n items: [],\n marktype: def.marktype,\n name: def.name || undefined,\n role: def.role || undefined,\n zindex: def.zindex || 0\n }; // add accessibility properties if defined\n\n if (def.aria != null) {\n mark.aria = def.aria;\n }\n\n if (def.description) {\n mark.description = def.description;\n }\n\n return mark;\n}\n\n// create a new DOM element\nfunction domCreate(doc, tag, ns) {\n if (!doc && typeof document !== 'undefined' && document.createElement) {\n doc = document;\n }\n\n return doc ? ns ? doc.createElementNS(ns, tag) : doc.createElement(tag) : null;\n} // find first child element with matching tag\n\nfunction domFind(el, tag) {\n tag = tag.toLowerCase();\n var nodes = el.childNodes,\n i = 0,\n n = nodes.length;\n\n for (; i < n; ++i) if (nodes[i].tagName.toLowerCase() === tag) {\n return nodes[i];\n }\n} // retrieve child element at given index\n// create & insert if doesn't exist or if tags do not match\n\nfunction domChild(el, index, tag, ns) {\n var a = el.childNodes[index],\n b;\n\n if (!a || a.tagName.toLowerCase() !== tag.toLowerCase()) {\n b = a || null;\n a = domCreate(el.ownerDocument, tag, ns);\n el.insertBefore(a, b);\n }\n\n return a;\n} // remove all child elements at or above the given index\n\nfunction domClear(el, index) {\n var nodes = el.childNodes,\n curr = nodes.length;\n\n while (curr > index) el.removeChild(nodes[--curr]);\n\n return el;\n} // generate css class name for mark\n\nfunction cssClass(mark) {\n return 'mark-' + mark.marktype + (mark.role ? ' role-' + mark.role : '') + (mark.name ? ' ' + mark.name : '');\n}\n\nfunction point (event, el) {\n const rect = el.getBoundingClientRect();\n return [event.clientX - rect.left - (el.clientLeft || 0), event.clientY - rect.top - (el.clientTop || 0)];\n}\n\nfunction resolveItem (item, event, el, origin) {\n var mark = item && item.mark,\n mdef,\n p;\n\n if (mark && (mdef = Marks[mark.marktype]).tip) {\n p = point(event, el);\n p[0] -= origin[0];\n p[1] -= origin[1];\n\n while (item = item.mark.group) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n }\n\n item = mdef.tip(mark.items, p);\n }\n\n return item;\n}\n\n/**\n * Create a new Handler instance.\n * @param {object} [customLoader] - Optional loader instance for\n * href URL sanitization. If not specified, a standard loader\n * instance will be generated.\n * @param {function} [customTooltip] - Optional tooltip handler\n * function for custom tooltip display.\n * @constructor\n */\n\nfunction Handler(customLoader, customTooltip) {\n this._active = null;\n this._handlers = {};\n this._loader = customLoader || loader();\n this._tooltip = customTooltip || defaultTooltip;\n} // The default tooltip display handler.\n// Sets the HTML title attribute on the visualization container.\n\nfunction defaultTooltip(handler, event, item, value) {\n handler.element().setAttribute('title', value || '');\n}\n\nHandler.prototype = {\n /**\n * Initialize a new Handler instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {object} [obj] - Optional context object that should serve as\n * the \"this\" context for event callbacks.\n * @return {Handler} - This handler instance.\n */\n initialize(el, origin, obj) {\n this._el = el;\n this._obj = obj || null;\n return this.origin(origin);\n },\n\n /**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\n element() {\n return this._el;\n },\n\n /**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\n canvas() {\n return this._el && this._el.firstChild;\n },\n\n /**\n * Get / set the origin coordinates of the visualization.\n */\n origin(origin) {\n if (arguments.length) {\n this._origin = origin || [0, 0];\n return this;\n } else {\n return this._origin.slice();\n }\n },\n\n /**\n * Get / set the scenegraph root.\n */\n scene(scene) {\n if (!arguments.length) return this._scene;\n this._scene = scene;\n return this;\n },\n\n /**\n * Add an event handler. Subclasses should override this method.\n */\n on()\n /*type, handler*/\n {},\n\n /**\n * Remove an event handler. Subclasses should override this method.\n */\n off()\n /*type, handler*/\n {},\n\n /**\n * Utility method for finding the array index of an event handler.\n * @param {Array} h - An array of registered event handlers.\n * @param {string} type - The event type.\n * @param {function} handler - The event handler instance to find.\n * @return {number} - The handler's array index or -1 if not registered.\n */\n _handlerIndex(h, type, handler) {\n for (let i = h ? h.length : 0; --i >= 0;) {\n if (h[i].type === type && (!handler || h[i].handler === handler)) {\n return i;\n }\n }\n\n return -1;\n },\n\n /**\n * Returns an array with registered event handlers.\n * @param {string} [type] - The event type to query. Any annotations\n * are ignored; for example, for the argument \"click.foo\", \".foo\" will\n * be ignored and the method returns all \"click\" handlers. If type is\n * null or unspecified, this method returns handlers for all types.\n * @return {Array} - A new array containing all registered event handlers.\n */\n handlers(type) {\n const h = this._handlers,\n a = [];\n\n if (type) {\n a.push(...h[this.eventName(type)]);\n } else {\n for (const k in h) {\n a.push(...h[k]);\n }\n }\n\n return a;\n },\n\n /**\n * Parses an event name string to return the specific event type.\n * For example, given \"click.foo\" returns \"click\"\n * @param {string} name - The input event type string.\n * @return {string} - A string with the event type only.\n */\n eventName(name) {\n const i = name.indexOf('.');\n return i < 0 ? name : name.slice(0, i);\n },\n\n /**\n * Handle hyperlink navigation in response to an item.href value.\n * @param {Event} event - The event triggering hyperlink navigation.\n * @param {Item} item - The scenegraph item.\n * @param {string} href - The URL to navigate to.\n */\n handleHref(event, item, href) {\n this._loader.sanitize(href, {\n context: 'href'\n }).then(opt => {\n const e = new MouseEvent(event.type, event),\n a = domCreate(null, 'a');\n\n for (const name in opt) a.setAttribute(name, opt[name]);\n\n a.dispatchEvent(e);\n }).catch(() => {\n /* do nothing */\n });\n },\n\n /**\n * Handle tooltip display in response to an item.tooltip value.\n * @param {Event} event - The event triggering tooltip display.\n * @param {Item} item - The scenegraph item.\n * @param {boolean} show - A boolean flag indicating whether\n * to show or hide a tooltip for the given item.\n */\n handleTooltip(event, item, show) {\n if (item && item.tooltip != null) {\n item = resolveItem(item, event, this.canvas(), this._origin);\n const value = show && item && item.tooltip || null;\n\n this._tooltip.call(this._obj, this, event, item, value);\n }\n },\n\n /**\n * Returns the size of a scenegraph item and its position relative\n * to the viewport.\n * @param {Item} item - The scenegraph item.\n * @return {object} - A bounding box object (compatible with the\n * DOMRect type) consisting of x, y, width, heigh, top, left,\n * right, and bottom properties.\n */\n getItemBoundingClientRect(item) {\n const el = this.canvas();\n if (!el) return;\n const rect = el.getBoundingClientRect(),\n origin = this._origin,\n bounds = item.bounds,\n width = bounds.width(),\n height = bounds.height();\n let x = bounds.x1 + origin[0] + rect.left,\n y = bounds.y1 + origin[1] + rect.top; // translate coordinate for each parent group\n\n while (item.mark && (item = item.mark.group)) {\n x += item.x || 0;\n y += item.y || 0;\n } // return DOMRect-compatible bounding box\n\n\n return {\n x,\n y,\n width,\n height,\n left: x,\n top: y,\n right: x + width,\n bottom: y + height\n };\n }\n\n};\n\n/**\n * Create a new Renderer instance.\n * @param {object} [loader] - Optional loader instance for\n * image and href URL sanitization. If not specified, a\n * standard loader instance will be generated.\n * @constructor\n */\n\nfunction Renderer(loader) {\n this._el = null;\n this._bgcolor = null;\n this._loader = new ResourceLoader(loader);\n}\nRenderer.prototype = {\n /**\n * Initialize a new Renderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n this._el = el;\n return this.resize(width, height, origin, scaleFactor);\n },\n\n /**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\n element() {\n return this._el;\n },\n\n /**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\n canvas() {\n return this._el && this._el.firstChild;\n },\n\n /**\n * Get / set the background color.\n */\n background(bgcolor) {\n if (arguments.length === 0) return this._bgcolor;\n this._bgcolor = bgcolor;\n return this;\n },\n\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n this._width = width;\n this._height = height;\n this._origin = origin || [0, 0];\n this._scale = scaleFactor || 1;\n return this;\n },\n\n /**\n * Report a dirty item whose bounds should be redrawn.\n * This base class method does nothing. Subclasses that perform\n * incremental should implement this method.\n * @param {Item} item - The dirty item whose bounds should be redrawn.\n */\n dirty()\n /*item*/\n {},\n\n /**\n * Render an input scenegraph, potentially with a set of dirty items.\n * This method will perform an immediate rendering with available resources.\n * The renderer may also need to perform image loading to perform a complete\n * render. This process can lead to asynchronous re-rendering of the scene\n * after this method returns. To receive notification when rendering is\n * complete, use the renderAsync method instead.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Renderer} - This renderer instance.\n */\n render(scene) {\n const r = this; // bind arguments into a render call, and cache it\n // this function may be subsequently called for async redraw\n\n r._call = function () {\n r._render(scene);\n }; // invoke the renderer\n\n\n r._call(); // clear the cached call for garbage collection\n // async redraws will stash their own copy\n\n\n r._call = null;\n return r;\n },\n\n /**\n * Internal rendering method. Renderer subclasses should override this\n * method to actually perform rendering.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\n _render()\n /*scene*/\n {// subclasses to override\n },\n\n /**\n * Asynchronous rendering method. Similar to render, but returns a Promise\n * that resolves when all rendering is completed. Sometimes a renderer must\n * perform image loading to get a complete rendering. The returned\n * Promise will not resolve until this process completes.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Promise} - A Promise that resolves when rendering is complete.\n */\n renderAsync(scene) {\n const r = this.render(scene);\n return this._ready ? this._ready.then(() => r) : Promise.resolve(r);\n },\n\n /**\n * Internal method for asynchronous resource loading.\n * Proxies method calls to the ImageLoader, and tracks loading\n * progress to invoke a re-render once complete.\n * @param {string} method - The method name to invoke on the ImageLoader.\n * @param {string} uri - The URI for the requested resource.\n * @return {Promise} - A Promise that resolves to the requested resource.\n */\n _load(method, uri) {\n var r = this,\n p = r._loader[method](uri);\n\n if (!r._ready) {\n // re-render the scene when loading completes\n const call = r._call;\n r._ready = r._loader.ready().then(redraw => {\n if (redraw) call();\n r._ready = null;\n });\n }\n\n return p;\n },\n\n /**\n * Sanitize a URL to include as a hyperlink in the rendered scene.\n * This method proxies a call to ImageLoader.sanitizeURL, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string to sanitize.\n * @return {Promise} - A Promise that resolves to the sanitized URL.\n */\n sanitizeURL(uri) {\n return this._load('sanitizeURL', uri);\n },\n\n /**\n * Requests an image to include in the rendered scene.\n * This method proxies a call to ImageLoader.loadImage, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string of the image.\n * @return {Promise} - A Promise that resolves to the loaded Image.\n */\n loadImage(uri) {\n return this._load('loadImage', uri);\n }\n\n};\n\nconst KeyDownEvent = 'keydown';\nconst KeyPressEvent = 'keypress';\nconst KeyUpEvent = 'keyup';\nconst DragEnterEvent = 'dragenter';\nconst DragLeaveEvent = 'dragleave';\nconst DragOverEvent = 'dragover';\nconst MouseDownEvent = 'mousedown';\nconst MouseUpEvent = 'mouseup';\nconst MouseMoveEvent = 'mousemove';\nconst MouseOutEvent = 'mouseout';\nconst MouseOverEvent = 'mouseover';\nconst ClickEvent = 'click';\nconst DoubleClickEvent = 'dblclick';\nconst WheelEvent = 'wheel';\nconst MouseWheelEvent = 'mousewheel';\nconst TouchStartEvent = 'touchstart';\nconst TouchMoveEvent = 'touchmove';\nconst TouchEndEvent = 'touchend';\nconst Events = [KeyDownEvent, KeyPressEvent, KeyUpEvent, DragEnterEvent, DragLeaveEvent, DragOverEvent, MouseDownEvent, MouseUpEvent, MouseMoveEvent, MouseOutEvent, MouseOverEvent, ClickEvent, DoubleClickEvent, WheelEvent, MouseWheelEvent, TouchStartEvent, TouchMoveEvent, TouchEndEvent];\nconst TooltipShowEvent = MouseMoveEvent;\nconst TooltipHideEvent = MouseOutEvent;\nconst HrefEvent = ClickEvent;\n\nfunction CanvasHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n this._down = null;\n this._touch = null;\n this._first = true;\n this._events = {};\n}\n\nconst eventBundle = type => type === TouchStartEvent || type === TouchMoveEvent || type === TouchEndEvent ? [TouchStartEvent, TouchMoveEvent, TouchEndEvent] : [type]; // lazily add listeners to the canvas as needed\n\n\nfunction eventListenerCheck(handler, type) {\n eventBundle(type).forEach(_ => addEventListener(handler, _));\n}\n\nfunction addEventListener(handler, type) {\n const canvas = handler.canvas();\n\n if (canvas && !handler._events[type]) {\n handler._events[type] = 1;\n canvas.addEventListener(type, handler[type] ? evt => handler[type](evt) : evt => handler.fire(type, evt));\n }\n}\n\nfunction move(moveEvent, overEvent, outEvent) {\n return function (evt) {\n const a = this._active,\n p = this.pickEvent(evt);\n\n if (p === a) {\n // active item and picked item are the same\n this.fire(moveEvent, evt); // fire move\n } else {\n // active item and picked item are different\n if (!a || !a.exit) {\n // fire out for prior active item\n // suppress if active item was removed from scene\n this.fire(outEvent, evt);\n }\n\n this._active = p; // set new active item\n\n this.fire(overEvent, evt); // fire over for new active item\n\n this.fire(moveEvent, evt); // fire move for new active item\n }\n };\n}\n\nfunction inactive(type) {\n return function (evt) {\n this.fire(type, evt);\n this._active = null;\n };\n}\n\ninherits(CanvasHandler, Handler, {\n initialize(el, origin, obj) {\n this._canvas = el && domFind(el, 'canvas'); // add minimal events required for proper state management\n\n [ClickEvent, MouseDownEvent, MouseMoveEvent, MouseOutEvent, DragLeaveEvent].forEach(type => eventListenerCheck(this, type));\n return Handler.prototype.initialize.call(this, el, origin, obj);\n },\n\n // return the backing canvas instance\n canvas() {\n return this._canvas;\n },\n\n // retrieve the current canvas context\n context() {\n return this._canvas.getContext('2d');\n },\n\n // supported events\n events: Events,\n\n // to keep old versions of firefox happy\n DOMMouseScroll(evt) {\n this.fire(MouseWheelEvent, evt);\n },\n\n mousemove: move(MouseMoveEvent, MouseOverEvent, MouseOutEvent),\n dragover: move(DragOverEvent, DragEnterEvent, DragLeaveEvent),\n mouseout: inactive(MouseOutEvent),\n dragleave: inactive(DragLeaveEvent),\n\n mousedown(evt) {\n this._down = this._active;\n this.fire(MouseDownEvent, evt);\n },\n\n click(evt) {\n if (this._down === this._active) {\n this.fire(ClickEvent, evt);\n this._down = null;\n }\n },\n\n touchstart(evt) {\n this._touch = this.pickEvent(evt.changedTouches[0]);\n\n if (this._first) {\n this._active = this._touch;\n this._first = false;\n }\n\n this.fire(TouchStartEvent, evt, true);\n },\n\n touchmove(evt) {\n this.fire(TouchMoveEvent, evt, true);\n },\n\n touchend(evt) {\n this.fire(TouchEndEvent, evt, true);\n this._touch = null;\n },\n\n // fire an event\n fire(type, evt, touch) {\n const a = touch ? this._touch : this._active,\n h = this._handlers[type]; // set event type relative to scenegraph items\n\n evt.vegaType = type; // handle hyperlinks and tooltips first\n\n if (type === HrefEvent && a && a.href) {\n this.handleHref(evt, a, a.href);\n } else if (type === TooltipShowEvent || type === TooltipHideEvent) {\n this.handleTooltip(evt, a, type !== TooltipHideEvent);\n } // invoke all registered handlers\n\n\n if (h) {\n for (let i = 0, len = h.length; i < len; ++i) {\n h[i].handler.call(this._obj, evt, a);\n }\n }\n },\n\n // add an event handler\n on(type, handler) {\n const name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n\n if (i < 0) {\n eventListenerCheck(this, type);\n (h[name] || (h[name] = [])).push({\n type: type,\n handler: handler\n });\n }\n\n return this;\n },\n\n // remove an event handler\n off(type, handler) {\n const name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n\n if (i >= 0) {\n h.splice(i, 1);\n }\n\n return this;\n },\n\n pickEvent(evt) {\n const p = point(evt, this._canvas),\n o = this._origin;\n return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]);\n },\n\n // find the scenegraph item at the current mouse position\n // x, y -- the absolute x, y mouse coordinates on the canvas element\n // gx, gy -- the relative coordinates within the current group\n pick(scene, x, y, gx, gy) {\n const g = this.context(),\n mark = Marks[scene.marktype];\n return mark.pick.call(this, g, scene, x, y, gx, gy);\n }\n\n});\n\nfunction devicePixelRatio() {\n return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n}\n\nvar pixelRatio = devicePixelRatio();\nfunction resize (canvas, width, height, origin, scaleFactor, opt) {\n const inDOM = typeof HTMLElement !== 'undefined' && canvas instanceof HTMLElement && canvas.parentNode != null,\n context = canvas.getContext('2d'),\n ratio = inDOM ? pixelRatio : scaleFactor;\n canvas.width = width * ratio;\n canvas.height = height * ratio;\n\n for (const key in opt) {\n context[key] = opt[key];\n }\n\n if (inDOM && ratio !== 1) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n\n context.pixelRatio = ratio;\n context.setTransform(ratio, 0, 0, ratio, ratio * origin[0], ratio * origin[1]);\n return canvas;\n}\n\nfunction CanvasRenderer(loader) {\n Renderer.call(this, loader);\n this._options = {};\n this._redraw = false;\n this._dirty = new Bounds();\n this._tempb = new Bounds();\n}\nconst base$1 = Renderer.prototype;\n\nconst viewBounds = (origin, width, height) => new Bounds().set(0, 0, width, height).translate(-origin[0], -origin[1]);\n\nfunction clipToBounds(g, b, origin) {\n // expand bounds by 1 pixel, then round to pixel boundaries\n b.expand(1).round(); // align to base pixel grid in case of non-integer scaling (#2425)\n\n if (g.pixelRatio % 1) {\n b.scale(g.pixelRatio).round().scale(1 / g.pixelRatio);\n } // to avoid artifacts translate if origin has fractional pixels\n\n\n b.translate(-(origin[0] % 1), -(origin[1] % 1)); // set clip path\n\n g.beginPath();\n g.rect(b.x1, b.y1, b.width(), b.height());\n g.clip();\n return b;\n}\n\ninherits(CanvasRenderer, Renderer, {\n initialize(el, width, height, origin, scaleFactor, options) {\n this._options = options || {};\n this._canvas = this._options.externalContext ? null : canvas(1, 1, this._options.type); // instantiate a small canvas\n\n if (el && this._canvas) {\n domClear(el, 0).appendChild(this._canvas);\n\n this._canvas.setAttribute('class', 'marks');\n } // this method will invoke resize to size the canvas appropriately\n\n\n return base$1.initialize.call(this, el, width, height, origin, scaleFactor);\n },\n\n resize(width, height, origin, scaleFactor) {\n base$1.resize.call(this, width, height, origin, scaleFactor);\n\n if (this._canvas) {\n // configure canvas size and transform\n resize(this._canvas, this._width, this._height, this._origin, this._scale, this._options.context);\n } else {\n // external context needs to be scaled and positioned to origin\n const ctx = this._options.externalContext;\n if (!ctx) error('CanvasRenderer is missing a valid canvas or context');\n ctx.scale(this._scale, this._scale);\n ctx.translate(this._origin[0], this._origin[1]);\n }\n\n this._redraw = true;\n return this;\n },\n\n canvas() {\n return this._canvas;\n },\n\n context() {\n return this._options.externalContext || (this._canvas ? this._canvas.getContext('2d') : null);\n },\n\n dirty(item) {\n const b = this._tempb.clear().union(item.bounds);\n\n let g = item.mark.group;\n\n while (g) {\n b.translate(g.x || 0, g.y || 0);\n g = g.mark.group;\n }\n\n this._dirty.union(b);\n },\n\n _render(scene) {\n const g = this.context(),\n o = this._origin,\n w = this._width,\n h = this._height,\n db = this._dirty,\n vb = viewBounds(o, w, h); // setup\n\n g.save();\n const b = this._redraw || db.empty() ? (this._redraw = false, vb.expand(1)) : clipToBounds(g, vb.intersect(db), o);\n this.clear(-o[0], -o[1], w, h); // render\n\n this.draw(g, scene, b); // takedown\n\n g.restore();\n db.clear();\n return this;\n },\n\n draw(ctx, scene, bounds) {\n const mark = Marks[scene.marktype];\n if (scene.clip) clip(ctx, scene);\n mark.draw.call(this, ctx, scene, bounds);\n if (scene.clip) ctx.restore();\n },\n\n clear(x, y, w, h) {\n const opt = this._options,\n g = this.context();\n\n if (opt.type !== 'pdf' && !opt.externalContext) {\n // calling clear rect voids vector output in pdf mode\n // and could remove external context content (#2615)\n g.clearRect(x, y, w, h);\n }\n\n if (this._bgcolor != null) {\n g.fillStyle = this._bgcolor;\n g.fillRect(x, y, w, h);\n }\n }\n\n});\n\nfunction SVGHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n const h = this;\n h._hrefHandler = listener(h, (evt, item) => {\n if (item && item.href) h.handleHref(evt, item, item.href);\n });\n h._tooltipHandler = listener(h, (evt, item) => {\n h.handleTooltip(evt, item, evt.type !== TooltipHideEvent);\n });\n} // wrap an event listener for the SVG DOM\n\nconst listener = (context, handler) => evt => {\n let item = evt.target.__data__;\n item = Array.isArray(item) ? item[0] : item;\n evt.vegaType = evt.type;\n handler.call(context._obj, evt, item);\n};\n\ninherits(SVGHandler, Handler, {\n initialize(el, origin, obj) {\n let svg = this._svg;\n\n if (svg) {\n svg.removeEventListener(HrefEvent, this._hrefHandler);\n svg.removeEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.removeEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n\n this._svg = svg = el && domFind(el, 'svg');\n\n if (svg) {\n svg.addEventListener(HrefEvent, this._hrefHandler);\n svg.addEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.addEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n\n return Handler.prototype.initialize.call(this, el, origin, obj);\n },\n\n canvas() {\n return this._svg;\n },\n\n // add an event handler\n on(type, handler) {\n const name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n\n if (i < 0) {\n const x = {\n type,\n handler,\n listener: listener(this, handler)\n };\n (h[name] || (h[name] = [])).push(x);\n\n if (this._svg) {\n this._svg.addEventListener(name, x.listener);\n }\n }\n\n return this;\n },\n\n // remove an event handler\n off(type, handler) {\n const name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n\n if (i >= 0) {\n if (this._svg) {\n this._svg.removeEventListener(name, h[i].listener);\n }\n\n h.splice(i, 1);\n }\n\n return this;\n }\n\n});\n\nconst ARIA_HIDDEN = 'aria-hidden';\nconst ARIA_LABEL = 'aria-label';\nconst ARIA_ROLE = 'role';\nconst ARIA_ROLEDESCRIPTION = 'aria-roledescription';\nconst GRAPHICS_OBJECT = 'graphics-object';\nconst GRAPHICS_SYMBOL = 'graphics-symbol';\n\nconst bundle = (role, roledesc, label) => ({\n [ARIA_ROLE]: role,\n [ARIA_ROLEDESCRIPTION]: roledesc,\n [ARIA_LABEL]: label || undefined\n}); // these roles are covered by related roles\n// we can ignore them, no need to generate attributes\n\n\nconst AriaIgnore = toSet(['axis-domain', 'axis-grid', 'axis-label', 'axis-tick', 'axis-title', 'legend-band', 'legend-entry', 'legend-gradient', 'legend-label', 'legend-title', 'legend-symbol', 'title']); // aria attribute generators for guide roles\n\nconst AriaGuides = {\n 'axis': {\n desc: 'axis',\n caption: axisCaption\n },\n 'legend': {\n desc: 'legend',\n caption: legendCaption\n },\n 'title-text': {\n desc: 'title',\n caption: item => `Title text '${titleCaption(item)}'`\n },\n 'title-subtitle': {\n desc: 'subtitle',\n caption: item => `Subtitle text '${titleCaption(item)}'`\n }\n}; // aria properties generated for mark item encoding channels\n\nconst AriaEncode = {\n ariaRole: ARIA_ROLE,\n ariaRoleDescription: ARIA_ROLEDESCRIPTION,\n description: ARIA_LABEL\n};\nfunction ariaItemAttributes(emit, item) {\n const hide = item.aria === false;\n emit(ARIA_HIDDEN, hide || undefined);\n\n if (hide || item.description == null) {\n for (const prop in AriaEncode) {\n emit(AriaEncode[prop], undefined);\n }\n } else {\n const type = item.mark.marktype;\n emit(ARIA_LABEL, item.description);\n emit(ARIA_ROLE, item.ariaRole || (type === 'group' ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL));\n emit(ARIA_ROLEDESCRIPTION, item.ariaRoleDescription || `${type} mark`);\n }\n}\nfunction ariaMarkAttributes(mark) {\n return mark.aria === false ? {\n [ARIA_HIDDEN]: true\n } : AriaIgnore[mark.role] ? null : AriaGuides[mark.role] ? ariaGuide(mark, AriaGuides[mark.role]) : ariaMark(mark);\n}\n\nfunction ariaMark(mark) {\n const type = mark.marktype;\n const recurse = type === 'group' || type === 'text' || mark.items.some(_ => _.description != null && _.aria !== false);\n return bundle(recurse ? GRAPHICS_OBJECT : GRAPHICS_SYMBOL, `${type} mark container`, mark.description);\n}\n\nfunction ariaGuide(mark, opt) {\n try {\n const item = mark.items[0],\n caption = opt.caption || (() => '');\n\n return bundle(opt.role || GRAPHICS_SYMBOL, opt.desc, item.description || caption(item));\n } catch (err) {\n return null;\n }\n}\n\nfunction titleCaption(item) {\n return array(item.text).join(' ');\n}\n\nfunction axisCaption(item) {\n const datum = item.datum,\n orient = item.orient,\n title = datum.title ? extractTitle(item) : null,\n ctx = item.context,\n scale = ctx.scales[datum.scale].value,\n locale = ctx.dataflow.locale(),\n type = scale.type,\n xy = orient === 'left' || orient === 'right' ? 'Y' : 'X';\n return `${xy}-axis` + (title ? ` titled '${title}'` : '') + ` for a ${isDiscrete(type) ? 'discrete' : type} scale` + ` with ${domainCaption(locale, scale, item)}`;\n}\n\nfunction legendCaption(item) {\n const datum = item.datum,\n title = datum.title ? extractTitle(item) : null,\n type = `${datum.type || ''} legend`.trim(),\n scales = datum.scales,\n props = Object.keys(scales),\n ctx = item.context,\n scale = ctx.scales[scales[props[0]]].value,\n locale = ctx.dataflow.locale();\n return capitalize(type) + (title ? ` titled '${title}'` : '') + ` for ${channelCaption(props)}` + ` with ${domainCaption(locale, scale, item)}`;\n}\n\nfunction extractTitle(item) {\n try {\n return array(peek(item.items).items[0].text).join(' ');\n } catch (err) {\n return null;\n }\n}\n\nfunction channelCaption(props) {\n props = props.map(p => p + (p === 'fill' || p === 'stroke' ? ' color' : ''));\n return props.length < 2 ? props[0] : props.slice(0, -1).join(', ') + ' and ' + peek(props);\n}\n\nfunction capitalize(s) {\n return s.length ? s[0].toUpperCase() + s.slice(1) : s;\n}\n\nconst innerText = val => (val + '').replace(/&/g, '&').replace(//g, '>');\n\nconst attrText = val => innerText(val).replace(/\"/g, '"').replace(/\\t/g, ' ').replace(/\\n/g, ' ').replace(/\\r/g, ' ');\n\nfunction markup() {\n let buf = '',\n outer = '',\n inner = '';\n\n const stack = [],\n clear = () => outer = inner = '',\n push = tag => {\n if (outer) {\n buf += `${outer}>${inner}`;\n clear();\n }\n\n stack.push(tag);\n },\n attr = (name, value) => {\n if (value != null) outer += ` ${name}=\"${attrText(value)}\"`;\n return m;\n },\n m = {\n open(tag, ...attrs) {\n push(tag);\n outer = '<' + tag;\n\n for (const set of attrs) {\n for (const key in set) attr(key, set[key]);\n }\n\n return m;\n },\n\n close() {\n const tag = stack.pop();\n\n if (outer) {\n buf += outer + (inner ? `>${inner}` : '/>');\n } else {\n buf += ``;\n }\n\n clear();\n return m;\n },\n\n attr,\n text: t => (inner += innerText(t), m),\n toString: () => buf\n };\n\n return m;\n}\nconst serializeXML = node => _serialize(markup(), node) + '';\n\nfunction _serialize(m, node) {\n m.open(node.tagName);\n\n if (node.hasAttributes()) {\n const attrs = node.attributes,\n n = attrs.length;\n\n for (let i = 0; i < n; ++i) {\n m.attr(attrs[i].name, attrs[i].value);\n }\n }\n\n if (node.hasChildNodes()) {\n const children = node.childNodes,\n n = children.length;\n\n for (let i = 0; i < n; i++) {\n const child = children[i];\n child.nodeType === 3 // text node\n ? m.text(child.nodeValue) : _serialize(m, child);\n }\n }\n\n return m.close();\n}\n\nconst styles = {\n fill: 'fill',\n fillOpacity: 'fill-opacity',\n stroke: 'stroke',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n strokeCap: 'stroke-linecap',\n strokeJoin: 'stroke-linejoin',\n strokeDash: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeMiterLimit: 'stroke-miterlimit',\n opacity: 'opacity',\n blend: 'mix-blend-mode'\n}; // ensure miter limit default is consistent with canvas (#2498)\n\nconst rootAttributes = {\n 'fill': 'none',\n 'stroke-miterlimit': 10\n};\n\nconst RootIndex = 0,\n xmlns = 'http://www.w3.org/2000/xmlns/',\n svgns = metadata.xmlns;\nfunction SVGRenderer(loader) {\n Renderer.call(this, loader);\n this._dirtyID = 0;\n this._dirty = [];\n this._svg = null;\n this._root = null;\n this._defs = null;\n}\nconst base = Renderer.prototype;\ninherits(SVGRenderer, Renderer, {\n /**\n * Initialize a new SVGRenderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance.\n */\n initialize(el, width, height, origin, scaleFactor) {\n // create the svg definitions cache\n this._defs = {};\n\n this._clearDefs();\n\n if (el) {\n this._svg = domChild(el, 0, 'svg', svgns);\n\n this._svg.setAttributeNS(xmlns, 'xmlns', svgns);\n\n this._svg.setAttributeNS(xmlns, 'xmlns:xlink', metadata['xmlns:xlink']);\n\n this._svg.setAttribute('version', metadata['version']);\n\n this._svg.setAttribute('class', 'marks');\n\n domClear(el, 1); // set the svg root group\n\n this._root = domChild(this._svg, RootIndex, 'g', svgns);\n setAttributes(this._root, rootAttributes); // ensure no additional child elements\n\n domClear(this._svg, RootIndex + 1);\n } // set background color if defined\n\n\n this.background(this._bgcolor);\n return base.initialize.call(this, el, width, height, origin, scaleFactor);\n },\n\n /**\n * Get / set the background color.\n */\n background(bgcolor) {\n if (arguments.length && this._svg) {\n this._svg.style.setProperty('background-color', bgcolor);\n }\n\n return base.background.apply(this, arguments);\n },\n\n /**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {SVGRenderer} - This renderer instance;\n */\n resize(width, height, origin, scaleFactor) {\n base.resize.call(this, width, height, origin, scaleFactor);\n\n if (this._svg) {\n setAttributes(this._svg, {\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: `0 0 ${this._width} ${this._height}`\n });\n\n this._root.setAttribute('transform', `translate(${this._origin})`);\n }\n\n this._dirty = [];\n return this;\n },\n\n /**\n * Returns the SVG element of the visualization.\n * @return {DOMElement} - The SVG element.\n */\n canvas() {\n return this._svg;\n },\n\n /**\n * Returns an SVG text string for the rendered content,\n * or null if this renderer is currently headless.\n */\n svg() {\n const svg = this._svg,\n bg = this._bgcolor;\n if (!svg) return null;\n let node;\n\n if (bg) {\n svg.removeAttribute('style');\n node = domChild(svg, RootIndex, 'rect', svgns);\n setAttributes(node, {\n width: this._width,\n height: this._height,\n fill: bg\n });\n }\n\n const text = serializeXML(svg);\n\n if (bg) {\n svg.removeChild(node);\n\n this._svg.style.setProperty('background-color', bg);\n }\n\n return text;\n },\n\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\n _render(scene) {\n // perform spot updates and re-render markup\n if (this._dirtyCheck()) {\n if (this._dirtyAll) this._clearDefs();\n this.mark(this._root, scene);\n domClear(this._root, 1);\n }\n\n this.defs();\n this._dirty = [];\n ++this._dirtyID;\n return this;\n },\n\n // -- Manage rendering of items marked as dirty --\n\n /**\n * Flag a mark item as dirty.\n * @param {Item} item - The mark item.\n */\n dirty(item) {\n if (item.dirty !== this._dirtyID) {\n item.dirty = this._dirtyID;\n\n this._dirty.push(item);\n }\n },\n\n /**\n * Check if a mark item is considered dirty.\n * @param {Item} item - The mark item.\n */\n isDirty(item) {\n return this._dirtyAll || !item._svg || item.dirty === this._dirtyID;\n },\n\n /**\n * Internal method to check dirty status and, if possible,\n * make targetted updates without a full rendering pass.\n */\n _dirtyCheck() {\n this._dirtyAll = true;\n const items = this._dirty;\n if (!items.length || !this._dirtyID) return true;\n const id = ++this._dirtyID;\n let item, mark, type, mdef, i, n, o;\n\n for (i = 0, n = items.length; i < n; ++i) {\n item = items[i];\n mark = item.mark;\n\n if (mark.marktype !== type) {\n // memoize mark instance lookup\n type = mark.marktype;\n mdef = Marks[type];\n }\n\n if (mark.zdirty && mark.dirty !== id) {\n this._dirtyAll = false;\n dirtyParents(item, id);\n mark.items.forEach(i => {\n i.dirty = id;\n });\n }\n\n if (mark.zdirty) continue; // handle in standard drawing pass\n\n if (item.exit) {\n // EXIT\n if (mdef.nested && mark.items.length) {\n // if nested mark with remaining points, update instead\n o = mark.items[0];\n if (o._svg) this._update(mdef, o._svg, o);\n } else if (item._svg) {\n // otherwise remove from DOM\n o = item._svg.parentNode;\n if (o) o.removeChild(item._svg);\n }\n\n item._svg = null;\n continue;\n }\n\n item = mdef.nested ? mark.items[0] : item;\n if (item._update === id) continue; // already visited\n\n if (!item._svg || !item._svg.ownerSVGElement) {\n // ENTER\n this._dirtyAll = false;\n dirtyParents(item, id);\n } else {\n // IN-PLACE UPDATE\n this._update(mdef, item._svg, item);\n }\n\n item._update = id;\n }\n\n return !this._dirtyAll;\n },\n\n // -- Construct & maintain scenegraph to SVG mapping ---\n\n /**\n * Render a set of mark items.\n * @param {SVGElement} el - The parent element in the SVG tree.\n * @param {object} scene - The mark parent to render.\n * @param {SVGElement} prev - The previous sibling in the SVG tree.\n */\n mark(el, scene, prev) {\n if (!this.isDirty(scene)) return scene._svg;\n const svg = this._svg,\n mdef = Marks[scene.marktype],\n events = scene.interactive === false ? 'none' : null,\n isGroup = mdef.tag === 'g';\n let sibling = null,\n i = 0;\n const parent = bind(scene, el, prev, 'g', svg);\n parent.setAttribute('class', cssClass(scene)); // apply aria attributes to parent container element\n\n const aria = ariaMarkAttributes(scene);\n\n for (const key in aria) setAttribute(parent, key, aria[key]);\n\n if (!isGroup) {\n setAttribute(parent, 'pointer-events', events);\n }\n\n setAttribute(parent, 'clip-path', scene.clip ? clip$1(this, scene, scene.group) : null);\n\n const process = item => {\n const dirty = this.isDirty(item),\n node = bind(item, parent, sibling, mdef.tag, svg);\n\n if (dirty) {\n this._update(mdef, node, item);\n\n if (isGroup) recurse(this, node, item);\n }\n\n sibling = node;\n ++i;\n };\n\n if (mdef.nested) {\n if (scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n }\n\n domClear(parent, i);\n return parent;\n },\n\n /**\n * Update the attributes of an SVG element for a mark item.\n * @param {object} mdef - The mark definition object\n * @param {SVGElement} el - The SVG element.\n * @param {Item} item - The mark item.\n */\n _update(mdef, el, item) {\n // set dom element and values cache\n // provides access to emit method\n element = el;\n values = el.__values__; // apply aria-specific properties\n\n ariaItemAttributes(emit, item); // apply svg attributes\n\n mdef.attr(emit, item, this); // some marks need special treatment\n\n const extra = mark_extras[mdef.type];\n if (extra) extra.call(this, mdef, el, item); // apply svg style attributes\n // note: element state may have been modified by 'extra' method\n\n if (element) this.style(element, item);\n },\n\n /**\n * Update the presentation attributes of an SVG element for a mark item.\n * @param {SVGElement} el - The SVG element.\n * @param {Item} item - The mark item.\n */\n style(el, item) {\n if (item == null) return;\n\n for (const prop in styles) {\n let value = prop === 'font' ? fontFamily(item) : item[prop];\n if (value === values[prop]) continue;\n const name = styles[prop];\n\n if (value == null) {\n el.removeAttribute(name);\n } else {\n if (isGradient(value)) {\n value = gradientRef(value, this._defs.gradient, href());\n }\n\n el.setAttribute(name, value + '');\n }\n\n values[prop] = value;\n }\n },\n\n /**\n * Render SVG defs, as needed.\n * Must be called *after* marks have been processed to ensure the\n * collected state is current and accurate.\n */\n defs() {\n const svg = this._svg,\n defs = this._defs;\n let el = defs.el,\n index = 0;\n\n for (const id in defs.gradient) {\n if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', svgns);\n index = updateGradient(el, defs.gradient[id], index);\n }\n\n for (const id in defs.clipping) {\n if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', svgns);\n index = updateClipping(el, defs.clipping[id], index);\n } // clean-up\n\n\n if (el) {\n index === 0 ? (svg.removeChild(el), defs.el = null) : domClear(el, index);\n }\n },\n\n /**\n * Clear defs caches.\n */\n _clearDefs() {\n const def = this._defs;\n def.gradient = {};\n def.clipping = {};\n }\n\n}); // mark ancestor chain with a dirty id\n\nfunction dirtyParents(item, id) {\n for (; item && item.dirty !== id; item = item.mark.group) {\n item.dirty = id;\n\n if (item.mark && item.mark.dirty !== id) {\n item.mark.dirty = id;\n } else return;\n }\n} // update gradient definitions\n\n\nfunction updateGradient(el, grad, index) {\n let i, n, stop;\n\n if (grad.gradient === 'radial') {\n // SVG radial gradients automatically transform to normalized bbox\n // coordinates, in a way that is cumbersome to replicate in canvas.\n // We wrap the radial gradient in a pattern element, allowing us to\n // maintain a circular gradient that matches what canvas provides.\n let pt = domChild(el, index++, 'pattern', svgns);\n setAttributes(pt, {\n id: patternPrefix + grad.id,\n viewBox: '0,0,1,1',\n width: '100%',\n height: '100%',\n preserveAspectRatio: 'xMidYMid slice'\n });\n pt = domChild(pt, 0, 'rect', svgns);\n setAttributes(pt, {\n width: 1,\n height: 1,\n fill: `url(${href()}#${grad.id})`\n });\n el = domChild(el, index++, 'radialGradient', svgns);\n setAttributes(el, {\n id: grad.id,\n fx: grad.x1,\n fy: grad.y1,\n fr: grad.r1,\n cx: grad.x2,\n cy: grad.y2,\n r: grad.r2\n });\n } else {\n el = domChild(el, index++, 'linearGradient', svgns);\n setAttributes(el, {\n id: grad.id,\n x1: grad.x1,\n x2: grad.x2,\n y1: grad.y1,\n y2: grad.y2\n });\n }\n\n for (i = 0, n = grad.stops.length; i < n; ++i) {\n stop = domChild(el, i, 'stop', svgns);\n stop.setAttribute('offset', grad.stops[i].offset);\n stop.setAttribute('stop-color', grad.stops[i].color);\n }\n\n domClear(el, i);\n return index;\n} // update clipping path definitions\n\n\nfunction updateClipping(el, clip, index) {\n let mask;\n el = domChild(el, index, 'clipPath', svgns);\n el.setAttribute('id', clip.id);\n\n if (clip.path) {\n mask = domChild(el, 0, 'path', svgns);\n mask.setAttribute('d', clip.path);\n } else {\n mask = domChild(el, 0, 'rect', svgns);\n setAttributes(mask, {\n x: 0,\n y: 0,\n width: clip.width,\n height: clip.height\n });\n }\n\n domClear(el, 1);\n return index + 1;\n} // Recursively process group contents.\n\n\nfunction recurse(renderer, el, group) {\n el = el.lastChild.previousSibling;\n let prev,\n idx = 0;\n visit(group, item => {\n prev = renderer.mark(el, item, prev);\n ++idx;\n }); // remove any extraneous DOM elements\n\n domClear(el, 1 + idx);\n} // Bind a scenegraph item to an SVG DOM element.\n// Create new SVG elements as needed.\n\n\nfunction bind(item, el, sibling, tag, svg) {\n let node = item._svg,\n doc; // create a new dom node if needed\n\n if (!node) {\n doc = el.ownerDocument;\n node = domCreate(doc, tag, svgns);\n item._svg = node;\n\n if (item.mark) {\n node.__data__ = item;\n node.__values__ = {\n fill: 'default'\n }; // if group, create background, content, and foreground elements\n\n if (tag === 'g') {\n const bg = domCreate(doc, 'path', svgns);\n node.appendChild(bg);\n bg.__data__ = item;\n const cg = domCreate(doc, 'g', svgns);\n node.appendChild(cg);\n cg.__data__ = item;\n const fg = domCreate(doc, 'path', svgns);\n node.appendChild(fg);\n fg.__data__ = item;\n fg.__values__ = {\n fill: 'default'\n };\n }\n }\n } // (re-)insert if (a) not contained in SVG or (b) sibling order has changed\n\n\n if (node.ownerSVGElement !== svg || siblingCheck(node, sibling)) {\n el.insertBefore(node, sibling ? sibling.nextSibling : el.firstChild);\n }\n\n return node;\n} // check if two nodes are ordered siblings\n\n\nfunction siblingCheck(node, sibling) {\n return node.parentNode && node.parentNode.childNodes.length > 1 && node.previousSibling != sibling; // treat null/undefined the same\n} // -- Set attributes & styles on SVG elements ---\n\n\nlet element = null,\n // temp var for current SVG element\nvalues = null; // temp var for current values hash\n// Extra configuration for certain mark types\n\nconst mark_extras = {\n group(mdef, el, item) {\n const fg = element = el.childNodes[2];\n values = fg.__values__;\n mdef.foreground(emit, item, this);\n values = el.__values__; // use parent's values hash\n\n element = el.childNodes[1];\n mdef.content(emit, item, this);\n const bg = element = el.childNodes[0];\n mdef.background(emit, item, this);\n const value = item.mark.interactive === false ? 'none' : null;\n\n if (value !== values.events) {\n setAttribute(fg, 'pointer-events', value);\n setAttribute(bg, 'pointer-events', value);\n values.events = value;\n }\n\n if (item.strokeForeground && item.stroke) {\n const fill = item.fill;\n setAttribute(fg, 'display', null); // set style of background\n\n this.style(bg, item);\n setAttribute(bg, 'stroke', null); // set style of foreground\n\n if (fill) item.fill = null;\n values = fg.__values__;\n this.style(fg, item);\n if (fill) item.fill = fill; // leave element null to prevent downstream styling\n\n element = null;\n } else {\n // ensure foreground is ignored\n setAttribute(fg, 'display', 'none');\n }\n },\n\n image(mdef, el, item) {\n if (item.smooth === false) {\n setStyle(el, 'image-rendering', 'optimizeSpeed');\n setStyle(el, 'image-rendering', 'pixelated');\n } else {\n setStyle(el, 'image-rendering', null);\n }\n },\n\n text(mdef, el, item) {\n const tl = textLines(item);\n let key, value, doc, lh;\n\n if (isArray(tl)) {\n // multi-line text\n value = tl.map(_ => textValue(item, _));\n key = value.join('\\n'); // content cache key\n\n if (key !== values.text) {\n domClear(el, 0);\n doc = el.ownerDocument;\n lh = lineHeight(item);\n value.forEach((t, i) => {\n const ts = domCreate(doc, 'tspan', svgns);\n ts.__data__ = item; // data binding\n\n ts.textContent = t;\n\n if (i) {\n ts.setAttribute('x', 0);\n ts.setAttribute('dy', lh);\n }\n\n el.appendChild(ts);\n });\n values.text = key;\n }\n } else {\n // single-line text\n value = textValue(item, tl);\n\n if (value !== values.text) {\n el.textContent = value;\n values.text = value;\n }\n }\n\n setAttribute(el, 'font-family', fontFamily(item));\n setAttribute(el, 'font-size', fontSize(item) + 'px');\n setAttribute(el, 'font-style', item.fontStyle);\n setAttribute(el, 'font-variant', item.fontVariant);\n setAttribute(el, 'font-weight', item.fontWeight);\n }\n\n};\n\nfunction emit(name, value, ns) {\n // early exit if value is unchanged\n if (value === values[name]) return; // use appropriate method given namespace (ns)\n\n if (ns) {\n setAttributeNS(element, name, value, ns);\n } else {\n setAttribute(element, name, value);\n } // note current value for future comparison\n\n\n values[name] = value;\n}\n\nfunction setStyle(el, name, value) {\n if (value !== values[name]) {\n if (value == null) {\n el.style.removeProperty(name);\n } else {\n el.style.setProperty(name, value + '');\n }\n\n values[name] = value;\n }\n}\n\nfunction setAttributes(el, attrs) {\n for (const key in attrs) {\n setAttribute(el, key, attrs[key]);\n }\n}\n\nfunction setAttribute(el, name, value) {\n if (value != null) {\n // if value is provided, update DOM attribute\n el.setAttribute(name, value);\n } else {\n // else remove DOM attribute\n el.removeAttribute(name);\n }\n}\n\nfunction setAttributeNS(el, name, value, ns) {\n if (value != null) {\n // if value is provided, update DOM attribute\n el.setAttributeNS(ns, name, value);\n } else {\n // else remove DOM attribute\n el.removeAttributeNS(ns, name);\n }\n}\n\nfunction href() {\n let loc;\n return typeof window === 'undefined' ? '' : (loc = window.location).hash ? loc.href.slice(0, -loc.hash.length) : loc.href;\n}\n\nfunction SVGStringRenderer(loader) {\n Renderer.call(this, loader);\n this._text = null;\n this._defs = {\n gradient: {},\n clipping: {}\n };\n}\ninherits(SVGStringRenderer, Renderer, {\n /**\n * Returns the rendered SVG text string,\n * or null if rendering has not yet occurred.\n */\n svg() {\n return this._text;\n },\n\n /**\n * Internal rendering method.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\n _render(scene) {\n const m = markup(); // svg tag\n\n m.open('svg', extend({}, metadata, {\n class: 'marks',\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: `0 0 ${this._width} ${this._height}`\n })); // background, if defined\n\n const bg = this._bgcolor;\n\n if (bg && bg !== 'transparent' && bg !== 'none') {\n m.open('rect', {\n width: this._width,\n height: this._height,\n fill: bg\n }).close();\n } // root content group\n\n\n m.open('g', rootAttributes, {\n transform: 'translate(' + this._origin + ')'\n });\n this.mark(m, scene);\n m.close(); // \n // defs\n\n this.defs(m); // get SVG text string\n\n this._text = m.close() + '';\n return this;\n },\n\n /**\n * Render a set of mark items.\n * @param {object} m - The markup context.\n * @param {object} scene - The mark parent to render.\n */\n mark(m, scene) {\n const mdef = Marks[scene.marktype],\n tag = mdef.tag,\n attrList = [ariaItemAttributes, mdef.attr]; // render opening group tag\n\n m.open('g', {\n 'class': cssClass(scene),\n 'clip-path': scene.clip ? clip$1(this, scene, scene.group) : null\n }, ariaMarkAttributes(scene), {\n 'pointer-events': tag !== 'g' && scene.interactive === false ? 'none' : null\n }); // render contained elements\n\n const process = item => {\n const href = this.href(item);\n if (href) m.open('a', href);\n m.open(tag, this.attr(scene, item, attrList, tag !== 'g' ? tag : null));\n\n if (tag === 'text') {\n const tl = textLines(item);\n\n if (isArray(tl)) {\n // multi-line text\n const attrs = {\n x: 0,\n dy: lineHeight(item)\n };\n\n for (let i = 0; i < tl.length; ++i) {\n m.open('tspan', i ? attrs : null).text(textValue(item, tl[i])).close();\n }\n } else {\n // single-line text\n m.text(textValue(item, tl));\n }\n } else if (tag === 'g') {\n const fore = item.strokeForeground,\n fill = item.fill,\n stroke = item.stroke;\n\n if (fore && stroke) {\n item.stroke = null;\n }\n\n m.open('path', this.attr(scene, item, mdef.background, 'bgrect')).close(); // recurse for group content\n\n m.open('g', this.attr(scene, item, mdef.content));\n visit(item, scene => this.mark(m, scene));\n m.close();\n\n if (fore && stroke) {\n if (fill) item.fill = null;\n item.stroke = stroke;\n m.open('path', this.attr(scene, item, mdef.foreground, 'bgrect')).close();\n if (fill) item.fill = fill;\n } else {\n m.open('path', this.attr(scene, item, mdef.foreground, 'bgfore')).close();\n }\n }\n\n m.close(); // \n\n if (href) m.close(); // \n };\n\n if (mdef.nested) {\n if (scene.items && scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n } // render closing group tag\n\n\n return m.close(); // \n },\n\n /**\n * Get href attributes for a hyperlinked mark item.\n * @param {Item} item - The mark item.\n */\n href(item) {\n const href = item.href;\n let attr;\n\n if (href) {\n if (attr = this._hrefs && this._hrefs[href]) {\n return attr;\n } else {\n this.sanitizeURL(href).then(attr => {\n // rewrite to use xlink namespace\n attr['xlink:href'] = attr.href;\n attr.href = null;\n (this._hrefs || (this._hrefs = {}))[href] = attr;\n });\n }\n }\n\n return null;\n },\n\n /**\n * Get an object of SVG attributes for a mark item.\n * @param {object} scene - The mark parent.\n * @param {Item} item - The mark item.\n * @param {array|function} attrs - One or more attribute emitters.\n * @param {string} tag - The tag being rendered.\n */\n attr(scene, item, attrs, tag) {\n const object = {},\n emit = (name, value, ns, prefixed) => {\n object[prefixed || name] = value;\n }; // apply mark specific attributes\n\n\n if (Array.isArray(attrs)) {\n attrs.forEach(fn => fn(emit, item, this));\n } else {\n attrs(emit, item, this);\n } // apply style attributes\n\n\n if (tag) {\n style(object, item, scene, tag, this._defs);\n }\n\n return object;\n },\n\n /**\n * Render SVG defs, as needed.\n * Must be called *after* marks have been processed to ensure the\n * collected state is current and accurate.\n * @param {object} m - The markup context.\n */\n defs(m) {\n const gradient = this._defs.gradient,\n clipping = this._defs.clipping,\n count = Object.keys(gradient).length + Object.keys(clipping).length;\n if (count === 0) return; // nothing to do\n\n m.open('defs');\n\n for (const id in gradient) {\n const def = gradient[id],\n stops = def.stops;\n\n if (def.gradient === 'radial') {\n // SVG radial gradients automatically transform to normalized bbox\n // coordinates, in a way that is cumbersome to replicate in canvas.\n // We wrap the radial gradient in a pattern element, allowing us to\n // maintain a circular gradient that matches what canvas provides.\n m.open('pattern', {\n id: patternPrefix + id,\n viewBox: '0,0,1,1',\n width: '100%',\n height: '100%',\n preserveAspectRatio: 'xMidYMid slice'\n });\n m.open('rect', {\n width: '1',\n height: '1',\n fill: 'url(#' + id + ')'\n }).close();\n m.close(); // \n\n m.open('radialGradient', {\n id: id,\n fx: def.x1,\n fy: def.y1,\n fr: def.r1,\n cx: def.x2,\n cy: def.y2,\n r: def.r2\n });\n } else {\n m.open('linearGradient', {\n id: id,\n x1: def.x1,\n x2: def.x2,\n y1: def.y1,\n y2: def.y2\n });\n }\n\n for (let i = 0; i < stops.length; ++i) {\n m.open('stop', {\n offset: stops[i].offset,\n 'stop-color': stops[i].color\n }).close();\n }\n\n m.close();\n }\n\n for (const id in clipping) {\n const def = clipping[id];\n m.open('clipPath', {\n id: id\n });\n\n if (def.path) {\n m.open('path', {\n d: def.path\n }).close();\n } else {\n m.open('rect', {\n x: 0,\n y: 0,\n width: def.width,\n height: def.height\n }).close();\n }\n\n m.close();\n }\n\n m.close();\n }\n\n}); // Helper function for attr for style presentation attributes\n\nfunction style(s, item, scene, tag, defs) {\n if (item == null) return s;\n\n if (tag === 'bgrect' && scene.interactive === false) {\n s['pointer-events'] = 'none';\n }\n\n if (tag === 'bgfore') {\n if (scene.interactive === false) {\n s['pointer-events'] = 'none';\n }\n\n s.display = 'none';\n if (item.fill !== null) return s;\n }\n\n if (tag === 'image' && item.smooth === false) {\n s.style = 'image-rendering: optimizeSpeed; image-rendering: pixelated;';\n }\n\n if (tag === 'text') {\n s['font-family'] = fontFamily(item);\n s['font-size'] = fontSize(item) + 'px';\n s['font-style'] = item.fontStyle;\n s['font-variant'] = item.fontVariant;\n s['font-weight'] = item.fontWeight;\n }\n\n for (const prop in styles) {\n let value = item[prop];\n const name = styles[prop];\n\n if (value === 'transparent' && (name === 'fill' || name === 'stroke')) ; else if (value != null) {\n if (isGradient(value)) {\n value = gradientRef(value, defs.gradient, '');\n }\n\n s[name] = value;\n }\n }\n\n return s;\n}\n\nconst Canvas = 'canvas';\nconst PNG = 'png';\nconst SVG = 'svg';\nconst None = 'none';\nconst RenderType = {\n Canvas: Canvas,\n PNG: PNG,\n SVG: SVG,\n None: None\n};\nconst modules = {};\nmodules[Canvas] = modules[PNG] = {\n renderer: CanvasRenderer,\n headless: CanvasRenderer,\n handler: CanvasHandler\n};\nmodules[SVG] = {\n renderer: SVGRenderer,\n headless: SVGStringRenderer,\n handler: SVGHandler\n};\nmodules[None] = {};\nfunction renderModule(name, _) {\n name = String(name || '').toLowerCase();\n\n if (arguments.length > 1) {\n modules[name] = _;\n return this;\n } else {\n return modules[name];\n }\n}\n\nfunction intersect(scene, bounds, filter) {\n const hits = [],\n // intersection results\n box = new Bounds().union(bounds),\n // defensive copy\n type = scene.marktype;\n return type ? intersectMark(scene, box, filter, hits) : type === 'group' ? intersectGroup(scene, box, filter, hits) : error('Intersect scene must be mark node or group item.');\n}\n\nfunction intersectMark(mark, box, filter, hits) {\n if (visitMark(mark, box, filter)) {\n const items = mark.items,\n type = mark.marktype,\n n = items.length;\n let i = 0;\n\n if (type === 'group') {\n for (; i < n; ++i) {\n intersectGroup(items[i], box, filter, hits);\n }\n } else {\n for (const test = Marks[type].isect; i < n; ++i) {\n const item = items[i];\n if (intersectItem(item, box, test)) hits.push(item);\n }\n }\n }\n\n return hits;\n}\n\nfunction visitMark(mark, box, filter) {\n // process if bounds intersect and if\n // (1) mark is a group mark (so we must recurse), or\n // (2) mark is interactive and passes filter\n return mark.bounds && box.intersects(mark.bounds) && (mark.marktype === 'group' || mark.interactive !== false && (!filter || filter(mark)));\n}\n\nfunction intersectGroup(group, box, filter, hits) {\n // test intersect against group\n // skip groups by default unless filter says otherwise\n if (filter && filter(group.mark) && intersectItem(group, box, Marks.group.isect)) {\n hits.push(group);\n } // recursively test children marks\n // translate box to group coordinate space\n\n\n const marks = group.items,\n n = marks && marks.length;\n\n if (n) {\n const x = group.x || 0,\n y = group.y || 0;\n box.translate(-x, -y);\n\n for (let i = 0; i < n; ++i) {\n intersectMark(marks[i], box, filter, hits);\n }\n\n box.translate(x, y);\n }\n\n return hits;\n}\n\nfunction intersectItem(item, box, test) {\n // test bounds enclosure, bounds intersection, then detailed test\n const bounds = item.bounds;\n return box.encloses(bounds) || box.intersects(bounds) && test(item, box);\n}\n\nconst clipBounds = new Bounds();\nfunction boundClip (mark) {\n const clip = mark.clip;\n\n if (isFunction(clip)) {\n clip(boundContext(clipBounds.clear()));\n } else if (clip) {\n clipBounds.set(0, 0, mark.group.width, mark.group.height);\n } else return;\n\n mark.bounds.intersect(clipBounds);\n}\n\nconst TOLERANCE = 1e-9;\nfunction sceneEqual(a, b, key) {\n return a === b ? true : key === 'path' ? pathEqual(a, b) : a instanceof Date && b instanceof Date ? +a === +b : isNumber(a) && isNumber(b) ? Math.abs(a - b) <= TOLERANCE : !a || !b || !isObject(a) && !isObject(b) ? a == b : objectEqual(a, b);\n}\nfunction pathEqual(a, b) {\n return sceneEqual(pathParse(a), pathParse(b));\n}\n\nfunction objectEqual(a, b) {\n var ka = Object.keys(a),\n kb = Object.keys(b),\n key,\n i;\n if (ka.length !== kb.length) return false;\n ka.sort();\n kb.sort();\n\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) return false;\n }\n\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!sceneEqual(a[key], b[key], key)) return false;\n }\n\n return typeof a === typeof b;\n}\n\nfunction resetSVGDefIds() {\n resetSVGClipId();\n resetSVGGradientId();\n}\n\nexport { Bounds, CanvasHandler, CanvasRenderer, Gradient, GroupItem, Handler, Item, Marks, RenderType, Renderer, ResourceLoader, SVGHandler, SVGRenderer, SVGStringRenderer, Scenegraph, boundClip, boundContext, boundItem, boundMark, boundStroke, domChild, domClear, domCreate, domFind, font, fontFamily, fontSize, intersect, intersectBoxLine, intersectPath, intersectPoint, intersectRule, lineHeight, markup, multiLineOffset, curves as pathCurves, pathEqual, pathParse, vg_rect as pathRectangle, pathRender, symbols as pathSymbols, vg_trail as pathTrail, point, renderModule, resetSVGClipId, resetSVGDefIds, sceneEqual, sceneFromJSON, pickVisit as scenePickVisit, sceneToJSON, visit as sceneVisit, zorder as sceneZOrder, serializeXML, textMetrics };\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport star from \"./symbol/star.js\";\nimport square from \"./symbol/square.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport wye from \"./symbol/wye.js\";\nimport constant from \"./constant.js\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function(type, size) {\n var context = null;\n type = typeof type === \"function\" ? type : constant(type || circle);\n size = typeof size === \"function\" ? size : constant(size === undefined ? 64 : +size);\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","import { Transform } from 'vega-dataflow';\nimport { Marks, boundClip, GroupItem, Item, Bounds, multiLineOffset, boundStroke } from 'vega-scenegraph';\nimport { inherits, peek, isObject } from 'vega-util';\n\nconst Top = 'top';\nconst Left = 'left';\nconst Right = 'right';\nconst Bottom = 'bottom';\nconst TopLeft = 'top-left';\nconst TopRight = 'top-right';\nconst BottomLeft = 'bottom-left';\nconst BottomRight = 'bottom-right';\nconst Start = 'start';\nconst Middle = 'middle';\nconst End = 'end';\nconst X = 'x';\nconst Y = 'y';\nconst Group = 'group';\nconst AxisRole = 'axis';\nconst TitleRole = 'title';\nconst FrameRole = 'frame';\nconst ScopeRole = 'scope';\nconst LegendRole = 'legend';\nconst RowHeader = 'row-header';\nconst RowFooter = 'row-footer';\nconst RowTitle = 'row-title';\nconst ColHeader = 'column-header';\nconst ColFooter = 'column-footer';\nconst ColTitle = 'column-title';\nconst Padding = 'padding';\nconst Symbols = 'symbol';\nconst Fit = 'fit';\nconst FitX = 'fit-x';\nconst FitY = 'fit-y';\nconst Pad = 'pad';\nconst None = 'none';\nconst All = 'all';\nconst Each = 'each';\nconst Flush = 'flush';\nconst Column = 'column';\nconst Row = 'row';\n\n/**\n * Calculate bounding boxes for scenegraph items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - The scenegraph mark instance to bound.\n */\n\nfunction Bound(params) {\n Transform.call(this, null, params);\n}\ninherits(Bound, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow,\n mark = _.mark,\n type = mark.marktype,\n entry = Marks[type],\n bound = entry.bound;\n let markBounds = mark.bounds,\n rebound;\n\n if (entry.nested) {\n // multi-item marks have a single bounds instance\n if (mark.items.length) view.dirty(mark.items[0]);\n markBounds = boundItem(mark, bound);\n mark.items.forEach(item => {\n item.bounds.clear().union(markBounds);\n });\n } else if (type === Group || _.modified()) {\n // operator parameters modified -> re-bound all items\n // updates group bounds in response to modified group content\n pulse.visit(pulse.MOD, item => view.dirty(item));\n markBounds.clear();\n mark.items.forEach(item => markBounds.union(boundItem(item, bound))); // force reflow for axes/legends/titles to propagate any layout changes\n\n switch (mark.role) {\n case AxisRole:\n case LegendRole:\n case TitleRole:\n pulse.reflow();\n }\n } else {\n // incrementally update bounds, re-bound mark as needed\n rebound = pulse.changed(pulse.REM);\n pulse.visit(pulse.ADD, item => {\n markBounds.union(boundItem(item, bound));\n });\n pulse.visit(pulse.MOD, item => {\n rebound = rebound || markBounds.alignsWith(item.bounds);\n view.dirty(item);\n markBounds.union(boundItem(item, bound));\n });\n\n if (rebound) {\n markBounds.clear();\n mark.items.forEach(item => markBounds.union(item.bounds));\n }\n } // ensure mark bounds do not exceed any clipping region\n\n\n boundClip(mark);\n return pulse.modifies('bounds');\n }\n\n});\n\nfunction boundItem(item, bound, opt) {\n return bound(item.bounds.clear(), item, opt);\n}\n\nconst COUNTER_NAME = ':vega_identifier:';\n/**\n * Adds a unique identifier to all added tuples.\n * This transform creates a new signal that serves as an id counter.\n * As a result, the id counter is shared across all instances of this\n * transform, generating unique ids across multiple data streams. In\n * addition, this signal value can be included in a snapshot of the\n * dataflow state, enabling correct resumption of id allocation.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.as - The field name for the generated identifier.\n */\n\nfunction Identifier(params) {\n Transform.call(this, 0, params);\n}\nIdentifier.Definition = {\n 'type': 'Identifier',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'as',\n 'type': 'string',\n 'required': true\n }]\n};\ninherits(Identifier, Transform, {\n transform(_, pulse) {\n const counter = getCounter(pulse.dataflow),\n as = _.as;\n let id = counter.value;\n pulse.visit(pulse.ADD, t => t[as] = t[as] || ++id);\n counter.set(this.value = id);\n return pulse;\n }\n\n});\n\nfunction getCounter(view) {\n return view._signals[COUNTER_NAME] || (view._signals[COUNTER_NAME] = view.add(0));\n}\n\n/**\n * Bind scenegraph items to a scenegraph mark instance.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.markdef - The mark definition for creating the mark.\n * This is an object of legal scenegraph mark properties which *must* include\n * the 'marktype' property.\n */\n\nfunction Mark(params) {\n Transform.call(this, null, params);\n}\ninherits(Mark, Transform, {\n transform(_, pulse) {\n let mark = this.value; // acquire mark on first invocation, bind context and group\n\n if (!mark) {\n mark = pulse.dataflow.scenegraph().mark(_.markdef, lookup$1(_), _.index);\n mark.group.context = _.context;\n if (!_.context.group) _.context.group = mark.group;\n mark.source = this.source; // point to upstream collector\n\n mark.clip = _.clip;\n mark.interactive = _.interactive;\n this.value = mark;\n } // initialize entering items\n\n\n const Init = mark.marktype === Group ? GroupItem : Item;\n pulse.visit(pulse.ADD, item => Init.call(item, mark)); // update clipping and/or interactive status\n\n if (_.modified('clip') || _.modified('interactive')) {\n mark.clip = _.clip;\n mark.interactive = !!_.interactive;\n mark.zdirty = true; // force scenegraph re-eval\n\n pulse.reflow();\n } // bind items array to scenegraph mark\n\n\n mark.items = pulse.source;\n return pulse;\n }\n\n});\n\nfunction lookup$1(_) {\n const g = _.groups,\n p = _.parent;\n return g && g.size === 1 ? g.get(Object.keys(g.object)[0]) : g && p ? g.lookup(p) : null;\n}\n\n/**\n * Analyze items for overlap, changing opacity to hide items with\n * overlapping bounding boxes. This transform will preserve at least\n * two items (e.g., first and last) even if overlap persists.\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting items.\n * @param {object} [params.method] - The overlap removal method to apply.\n * One of 'parity' (default, hide every other item until there is no\n * more overlap) or 'greedy' (sequentially scan and hide and items that\n * overlap with the last visible item).\n * @param {object} [params.boundScale] - A scale whose range should be used\n * to bound the items. Items exceeding the bounds of the scale range\n * will be treated as overlapping. If null or undefined, no bounds check\n * will be applied.\n * @param {object} [params.boundOrient] - The orientation of the scale\n * (top, bottom, left, or right) used to bound items. This parameter is\n * ignored if boundScale is null or undefined.\n * @param {object} [params.boundTolerance] - The tolerance in pixels for\n * bound inclusion testing (default 1). This specifies by how many pixels\n * an item's bounds may exceed the scale range bounds and not be culled.\n * @constructor\n */\n\nfunction Overlap(params) {\n Transform.call(this, null, params);\n}\nconst methods = {\n parity: items => items.filter((item, i) => i % 2 ? item.opacity = 0 : 1),\n greedy: (items, sep) => {\n let a;\n return items.filter((b, i) => !i || !intersect(a.bounds, b.bounds, sep) ? (a = b, 1) : b.opacity = 0);\n }\n}; // compute bounding box intersection\n// including padding pixels of separation\n\nconst intersect = (a, b, sep) => sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\n\nconst hasOverlap = (items, pad) => {\n for (var i = 1, n = items.length, a = items[0].bounds, b; i < n; a = b, ++i) {\n if (intersect(a, b = items[i].bounds, pad)) return true;\n }\n};\n\nconst hasBounds = item => {\n const b = item.bounds;\n return b.width() > 1 && b.height() > 1;\n};\n\nconst boundTest = (scale, orient, tolerance) => {\n var range = scale.range(),\n b = new Bounds();\n\n if (orient === Top || orient === Bottom) {\n b.set(range[0], -Infinity, range[1], +Infinity);\n } else {\n b.set(-Infinity, range[0], +Infinity, range[1]);\n }\n\n b.expand(tolerance || 1);\n return item => b.encloses(item.bounds);\n}; // reset all items to be fully opaque\n\n\nconst reset = source => {\n source.forEach(item => item.opacity = 1);\n return source;\n}; // add all tuples to mod, fork pulse if parameters were modified\n// fork prevents cross-stream tuple pollution (e.g., pulse from scale)\n\n\nconst reflow = (pulse, _) => pulse.reflow(_.modified()).modifies('opacity');\n\ninherits(Overlap, Transform, {\n transform(_, pulse) {\n const reduce = methods[_.method] || methods.parity,\n sep = _.separation || 0;\n let source = pulse.materialize(pulse.SOURCE).source,\n items,\n test;\n if (!source || !source.length) return;\n\n if (!_.method) {\n // early exit if method is falsy\n if (_.modified('method')) {\n reset(source);\n pulse = reflow(pulse, _);\n }\n\n return pulse;\n } // skip labels with no content\n\n\n source = source.filter(hasBounds); // early exit, nothing to do\n\n if (!source.length) return;\n\n if (_.sort) {\n source = source.slice().sort(_.sort);\n }\n\n items = reset(source);\n pulse = reflow(pulse, _);\n\n if (items.length >= 3 && hasOverlap(items, sep)) {\n do {\n items = reduce(items, sep);\n } while (items.length >= 3 && hasOverlap(items, sep));\n\n if (items.length < 3 && !peek(source).opacity) {\n if (items.length > 1) peek(items).opacity = 0;\n peek(source).opacity = 1;\n }\n }\n\n if (_.boundScale && _.boundTolerance >= 0) {\n test = boundTest(_.boundScale, _.boundOrient, +_.boundTolerance);\n source.forEach(item => {\n if (!test(item)) item.opacity = 0;\n });\n } // re-calculate mark bounds\n\n\n const bounds = items[0].mark.bounds.clear();\n source.forEach(item => {\n if (item.opacity) bounds.union(item.bounds);\n });\n return pulse;\n }\n\n});\n\n/**\n * Queue modified scenegraph items for rendering.\n * @constructor\n */\n\nfunction Render(params) {\n Transform.call(this, null, params);\n}\ninherits(Render, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow;\n pulse.visit(pulse.ALL, item => view.dirty(item)); // set z-index dirty flag as needed\n\n if (pulse.fields && pulse.fields['zindex']) {\n const item = pulse.source && pulse.source[0];\n if (item) item.mark.zdirty = true;\n }\n }\n\n});\n\nconst tempBounds = new Bounds();\nfunction set(item, property, value) {\n return item[property] === value ? 0 : (item[property] = value, 1);\n}\n\nfunction isYAxis(mark) {\n var orient = mark.items[0].orient;\n return orient === Left || orient === Right;\n}\n\nfunction axisIndices(datum) {\n let index = +datum.grid;\n return [datum.ticks ? index++ : -1, // ticks index\n datum.labels ? index++ : -1, // labels index\n index + +datum.domain // title index\n ];\n}\n\nfunction axisLayout(view, axis, width, height) {\n var item = axis.items[0],\n datum = item.datum,\n delta = item.translate != null ? item.translate : 0.5,\n orient = item.orient,\n indices = axisIndices(datum),\n range = item.range,\n offset = item.offset,\n position = item.position,\n minExtent = item.minExtent,\n maxExtent = item.maxExtent,\n title = datum.title && item.items[indices[2]].items[0],\n titlePadding = item.titlePadding,\n bounds = item.bounds,\n dl = title && multiLineOffset(title),\n x = 0,\n y = 0,\n i,\n s;\n tempBounds.clear().union(bounds);\n bounds.clear();\n if ((i = indices[0]) > -1) bounds.union(item.items[i].bounds);\n if ((i = indices[1]) > -1) bounds.union(item.items[i].bounds); // position axis group and title\n\n switch (orient) {\n case Top:\n x = position || 0;\n y = -offset;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.y1));\n bounds.add(0, -s).add(range, 0);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 0, -1, bounds);\n break;\n\n case Left:\n x = -offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.x1));\n bounds.add(-s, 0).add(0, range);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 1, -1, bounds);\n break;\n\n case Right:\n x = width + offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.x2));\n bounds.add(0, 0).add(s, range);\n if (title) axisTitleLayout(view, title, s, titlePadding, dl, 1, 1, bounds);\n break;\n\n case Bottom:\n x = position || 0;\n y = height + offset;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.y2));\n bounds.add(0, 0).add(range, s);\n if (title) axisTitleLayout(view, title, s, titlePadding, 0, 0, 1, bounds);\n break;\n\n default:\n x = item.x;\n y = item.y;\n } // update bounds\n\n\n boundStroke(bounds.translate(x, y), item);\n\n if (set(item, 'x', x + delta) | set(item, 'y', y + delta)) {\n item.bounds = tempBounds;\n view.dirty(item);\n item.bounds = bounds;\n view.dirty(item);\n }\n\n return item.mark.bounds.clear().union(bounds);\n}\n\nfunction axisTitleLayout(view, title, offset, pad, dl, isYAxis, sign, bounds) {\n const b = title.bounds;\n\n if (title.auto) {\n const v = sign * (offset + dl + pad);\n let dx = 0,\n dy = 0;\n view.dirty(title);\n isYAxis ? dx = (title.x || 0) - (title.x = v) : dy = (title.y || 0) - (title.y = v);\n title.mark.bounds.clear().union(b.translate(-dx, -dy));\n view.dirty(title);\n }\n\n bounds.union(b);\n}\n\nconst min = (a, b) => Math.floor(Math.min(a, b));\n\nconst max = (a, b) => Math.ceil(Math.max(a, b));\n\nfunction gridLayoutGroups(group) {\n var groups = group.items,\n n = groups.length,\n i = 0,\n mark,\n items;\n const views = {\n marks: [],\n rowheaders: [],\n rowfooters: [],\n colheaders: [],\n colfooters: [],\n rowtitle: null,\n coltitle: null\n }; // layout axes, gather legends, collect bounds\n\n for (; i < n; ++i) {\n mark = groups[i];\n items = mark.items;\n\n if (mark.marktype === Group) {\n switch (mark.role) {\n case AxisRole:\n case LegendRole:\n case TitleRole:\n break;\n\n case RowHeader:\n views.rowheaders.push(...items);\n break;\n\n case RowFooter:\n views.rowfooters.push(...items);\n break;\n\n case ColHeader:\n views.colheaders.push(...items);\n break;\n\n case ColFooter:\n views.colfooters.push(...items);\n break;\n\n case RowTitle:\n views.rowtitle = items[0];\n break;\n\n case ColTitle:\n views.coltitle = items[0];\n break;\n\n default:\n views.marks.push(...items);\n }\n }\n }\n\n return views;\n}\n\nfunction bboxFlush(item) {\n return new Bounds().set(0, 0, item.width || 0, item.height || 0);\n}\n\nfunction bboxFull(item) {\n const b = item.bounds.clone();\n return b.empty() ? b.set(0, 0, 0, 0) : b.translate(-(item.x || 0), -(item.y || 0));\n}\n\nfunction get(opt, key, d) {\n const v = isObject(opt) ? opt[key] : opt;\n return v != null ? v : d !== undefined ? d : 0;\n}\n\nfunction offsetValue(v) {\n return v < 0 ? Math.ceil(-v) : 0;\n}\n\nfunction gridLayout(view, groups, opt) {\n var dirty = !opt.nodirty,\n bbox = opt.bounds === Flush ? bboxFlush : bboxFull,\n bounds = tempBounds.set(0, 0, 0, 0),\n alignCol = get(opt.align, Column),\n alignRow = get(opt.align, Row),\n padCol = get(opt.padding, Column),\n padRow = get(opt.padding, Row),\n ncols = opt.columns || groups.length,\n nrows = ncols <= 0 ? 1 : Math.ceil(groups.length / ncols),\n n = groups.length,\n xOffset = Array(n),\n xExtent = Array(ncols),\n xMax = 0,\n yOffset = Array(n),\n yExtent = Array(nrows),\n yMax = 0,\n dx = Array(n),\n dy = Array(n),\n boxes = Array(n),\n m,\n i,\n c,\n r,\n b,\n g,\n px,\n py,\n x,\n y,\n offset;\n\n for (i = 0; i < ncols; ++i) xExtent[i] = 0;\n\n for (i = 0; i < nrows; ++i) yExtent[i] = 0; // determine offsets for each group\n\n\n for (i = 0; i < n; ++i) {\n g = groups[i];\n b = boxes[i] = bbox(g);\n g.x = g.x || 0;\n dx[i] = 0;\n g.y = g.y || 0;\n dy[i] = 0;\n c = i % ncols;\n r = ~~(i / ncols);\n xMax = Math.max(xMax, px = Math.ceil(b.x2));\n yMax = Math.max(yMax, py = Math.ceil(b.y2));\n xExtent[c] = Math.max(xExtent[c], px);\n yExtent[r] = Math.max(yExtent[r], py);\n xOffset[i] = padCol + offsetValue(b.x1);\n yOffset[i] = padRow + offsetValue(b.y1);\n if (dirty) view.dirty(groups[i]);\n } // set initial alignment offsets\n\n\n for (i = 0; i < n; ++i) {\n if (i % ncols === 0) xOffset[i] = 0;\n if (i < ncols) yOffset[i] = 0;\n } // enforce column alignment constraints\n\n\n if (alignCol === Each) {\n for (c = 1; c < ncols; ++c) {\n for (offset = 0, i = c; i < n; i += ncols) {\n if (offset < xOffset[i]) offset = xOffset[i];\n }\n\n for (i = c; i < n; i += ncols) {\n xOffset[i] = offset + xExtent[c - 1];\n }\n }\n } else if (alignCol === All) {\n for (offset = 0, i = 0; i < n; ++i) {\n if (i % ncols && offset < xOffset[i]) offset = xOffset[i];\n }\n\n for (i = 0; i < n; ++i) {\n if (i % ncols) xOffset[i] = offset + xMax;\n }\n } else {\n for (alignCol = false, c = 1; c < ncols; ++c) {\n for (i = c; i < n; i += ncols) {\n xOffset[i] += xExtent[c - 1];\n }\n }\n } // enforce row alignment constraints\n\n\n if (alignRow === Each) {\n for (r = 1; r < nrows; ++r) {\n for (offset = 0, i = r * ncols, m = i + ncols; i < m; ++i) {\n if (offset < yOffset[i]) offset = yOffset[i];\n }\n\n for (i = r * ncols; i < m; ++i) {\n yOffset[i] = offset + yExtent[r - 1];\n }\n }\n } else if (alignRow === All) {\n for (offset = 0, i = ncols; i < n; ++i) {\n if (offset < yOffset[i]) offset = yOffset[i];\n }\n\n for (i = ncols; i < n; ++i) {\n yOffset[i] = offset + yMax;\n }\n } else {\n for (alignRow = false, r = 1; r < nrows; ++r) {\n for (i = r * ncols, m = i + ncols; i < m; ++i) {\n yOffset[i] += yExtent[r - 1];\n }\n }\n } // perform horizontal grid layout\n\n\n for (x = 0, i = 0; i < n; ++i) {\n x = xOffset[i] + (i % ncols ? x : 0);\n dx[i] += x - groups[i].x;\n } // perform vertical grid layout\n\n\n for (c = 0; c < ncols; ++c) {\n for (y = 0, i = c; i < n; i += ncols) {\n y += yOffset[i];\n dy[i] += y - groups[i].y;\n }\n } // perform horizontal centering\n\n\n if (alignCol && get(opt.center, Column) && nrows > 1) {\n for (i = 0; i < n; ++i) {\n b = alignCol === All ? xMax : xExtent[i % ncols];\n x = b - boxes[i].x2 - groups[i].x - dx[i];\n if (x > 0) dx[i] += x / 2;\n }\n } // perform vertical centering\n\n\n if (alignRow && get(opt.center, Row) && ncols !== 1) {\n for (i = 0; i < n; ++i) {\n b = alignRow === All ? yMax : yExtent[~~(i / ncols)];\n y = b - boxes[i].y2 - groups[i].y - dy[i];\n if (y > 0) dy[i] += y / 2;\n }\n } // position grid relative to anchor\n\n\n for (i = 0; i < n; ++i) {\n bounds.union(boxes[i].translate(dx[i], dy[i]));\n }\n\n x = get(opt.anchor, X);\n y = get(opt.anchor, Y);\n\n switch (get(opt.anchor, Column)) {\n case End:\n x -= bounds.width();\n break;\n\n case Middle:\n x -= bounds.width() / 2;\n }\n\n switch (get(opt.anchor, Row)) {\n case End:\n y -= bounds.height();\n break;\n\n case Middle:\n y -= bounds.height() / 2;\n }\n\n x = Math.round(x);\n y = Math.round(y); // update mark positions, bounds, dirty\n\n bounds.clear();\n\n for (i = 0; i < n; ++i) {\n groups[i].mark.bounds.clear();\n }\n\n for (i = 0; i < n; ++i) {\n g = groups[i];\n g.x += dx[i] += x;\n g.y += dy[i] += y;\n bounds.union(g.mark.bounds.union(g.bounds.translate(dx[i], dy[i])));\n if (dirty) view.dirty(g);\n }\n\n return bounds;\n}\nfunction trellisLayout(view, group, opt) {\n var views = gridLayoutGroups(group),\n groups = views.marks,\n bbox = opt.bounds === Flush ? boundFlush : boundFull,\n off = opt.offset,\n ncols = opt.columns || groups.length,\n nrows = ncols <= 0 ? 1 : Math.ceil(groups.length / ncols),\n cells = nrows * ncols,\n x,\n y,\n x2,\n y2,\n anchor,\n band,\n offset; // -- initial grid layout\n\n const bounds = gridLayout(view, groups, opt);\n if (bounds.empty()) bounds.set(0, 0, 0, 0); // empty grid\n // -- layout grid headers and footers --\n // perform row header layout\n\n if (views.rowheaders) {\n band = get(opt.headerBand, Row, null);\n x = layoutHeaders(view, views.rowheaders, groups, ncols, nrows, -get(off, 'rowHeader'), min, 0, bbox, 'x1', 0, ncols, 1, band);\n } // perform column header layout\n\n\n if (views.colheaders) {\n band = get(opt.headerBand, Column, null);\n y = layoutHeaders(view, views.colheaders, groups, ncols, ncols, -get(off, 'columnHeader'), min, 1, bbox, 'y1', 0, 1, ncols, band);\n } // perform row footer layout\n\n\n if (views.rowfooters) {\n band = get(opt.footerBand, Row, null);\n x2 = layoutHeaders(view, views.rowfooters, groups, ncols, nrows, get(off, 'rowFooter'), max, 0, bbox, 'x2', ncols - 1, ncols, 1, band);\n } // perform column footer layout\n\n\n if (views.colfooters) {\n band = get(opt.footerBand, Column, null);\n y2 = layoutHeaders(view, views.colfooters, groups, ncols, ncols, get(off, 'columnFooter'), max, 1, bbox, 'y2', cells - ncols, 1, ncols, band);\n } // perform row title layout\n\n\n if (views.rowtitle) {\n anchor = get(opt.titleAnchor, Row);\n offset = get(off, 'rowTitle');\n offset = anchor === End ? x2 + offset : x - offset;\n band = get(opt.titleBand, Row, 0.5);\n layoutTitle(view, views.rowtitle, offset, 0, bounds, band);\n } // perform column title layout\n\n\n if (views.coltitle) {\n anchor = get(opt.titleAnchor, Column);\n offset = get(off, 'columnTitle');\n offset = anchor === End ? y2 + offset : y - offset;\n band = get(opt.titleBand, Column, 0.5);\n layoutTitle(view, views.coltitle, offset, 1, bounds, band);\n }\n}\n\nfunction boundFlush(item, field) {\n return field === 'x1' ? item.x || 0 : field === 'y1' ? item.y || 0 : field === 'x2' ? (item.x || 0) + (item.width || 0) : field === 'y2' ? (item.y || 0) + (item.height || 0) : undefined;\n}\n\nfunction boundFull(item, field) {\n return item.bounds[field];\n}\n\nfunction layoutHeaders(view, headers, groups, ncols, limit, offset, agg, isX, bound, bf, start, stride, back, band) {\n var n = groups.length,\n init = 0,\n edge = 0,\n i,\n j,\n k,\n m,\n b,\n h,\n g,\n x,\n y; // if no groups, early exit and return 0\n\n if (!n) return init; // compute margin\n\n for (i = start; i < n; i += stride) {\n if (groups[i]) init = agg(init, bound(groups[i], bf));\n } // if no headers, return margin calculation\n\n\n if (!headers.length) return init; // check if number of headers exceeds number of rows or columns\n\n if (headers.length > limit) {\n view.warn('Grid headers exceed limit: ' + limit);\n headers = headers.slice(0, limit);\n } // apply offset\n\n\n init += offset; // clear mark bounds for all headers\n\n for (j = 0, m = headers.length; j < m; ++j) {\n view.dirty(headers[j]);\n headers[j].mark.bounds.clear();\n } // layout each header\n\n\n for (i = start, j = 0, m = headers.length; j < m; ++j, i += stride) {\n h = headers[j];\n b = h.mark.bounds; // search for nearest group to align to\n // necessary if table has empty cells\n\n for (k = i; k >= 0 && (g = groups[k]) == null; k -= back); // assign coordinates and update bounds\n\n\n if (isX) {\n x = band == null ? g.x : Math.round(g.bounds.x1 + band * g.bounds.width());\n y = init;\n } else {\n x = init;\n y = band == null ? g.y : Math.round(g.bounds.y1 + band * g.bounds.height());\n }\n\n b.union(h.bounds.translate(x - (h.x || 0), y - (h.y || 0)));\n h.x = x;\n h.y = y;\n view.dirty(h); // update current edge of layout bounds\n\n edge = agg(edge, b[bf]);\n }\n\n return edge;\n}\n\nfunction layoutTitle(view, g, offset, isX, bounds, band) {\n if (!g) return;\n view.dirty(g); // compute title coordinates\n\n var x = offset,\n y = offset;\n isX ? x = Math.round(bounds.x1 + band * bounds.width()) : y = Math.round(bounds.y1 + band * bounds.height()); // assign coordinates and update bounds\n\n g.bounds.translate(x - (g.x || 0), y - (g.y || 0));\n g.mark.bounds.clear().union(g.bounds);\n g.x = x;\n g.y = y; // queue title for redraw\n\n view.dirty(g);\n}\n\nfunction lookup(config, orient) {\n const opt = config[orient] || {};\n return (key, d) => opt[key] != null ? opt[key] : config[key] != null ? config[key] : d;\n} // if legends specify offset directly, use the maximum specified value\n\n\nfunction offsets(legends, value) {\n let max = -Infinity;\n legends.forEach(item => {\n if (item.offset != null) max = Math.max(max, item.offset);\n });\n return max > -Infinity ? max : value;\n}\n\nfunction legendParams(g, orient, config, xb, yb, w, h) {\n const _ = lookup(config, orient),\n offset = offsets(g, _('offset', 0)),\n anchor = _('anchor', Start),\n mult = anchor === End ? 1 : anchor === Middle ? 0.5 : 0;\n\n const p = {\n align: Each,\n bounds: _('bounds', Flush),\n columns: _('direction') === 'vertical' ? 1 : g.length,\n padding: _('margin', 8),\n center: _('center'),\n nodirty: true\n };\n\n switch (orient) {\n case Left:\n p.anchor = {\n x: Math.floor(xb.x1) - offset,\n column: End,\n y: mult * (h || xb.height() + 2 * xb.y1),\n row: anchor\n };\n break;\n\n case Right:\n p.anchor = {\n x: Math.ceil(xb.x2) + offset,\n y: mult * (h || xb.height() + 2 * xb.y1),\n row: anchor\n };\n break;\n\n case Top:\n p.anchor = {\n y: Math.floor(yb.y1) - offset,\n row: End,\n x: mult * (w || yb.width() + 2 * yb.x1),\n column: anchor\n };\n break;\n\n case Bottom:\n p.anchor = {\n y: Math.ceil(yb.y2) + offset,\n x: mult * (w || yb.width() + 2 * yb.x1),\n column: anchor\n };\n break;\n\n case TopLeft:\n p.anchor = {\n x: offset,\n y: offset\n };\n break;\n\n case TopRight:\n p.anchor = {\n x: w - offset,\n y: offset,\n column: End\n };\n break;\n\n case BottomLeft:\n p.anchor = {\n x: offset,\n y: h - offset,\n row: End\n };\n break;\n\n case BottomRight:\n p.anchor = {\n x: w - offset,\n y: h - offset,\n column: End,\n row: End\n };\n break;\n }\n\n return p;\n}\nfunction legendLayout(view, legend) {\n var item = legend.items[0],\n datum = item.datum,\n orient = item.orient,\n bounds = item.bounds,\n x = item.x,\n y = item.y,\n w,\n h; // cache current bounds for later comparison\n\n item._bounds ? item._bounds.clear().union(bounds) : item._bounds = bounds.clone();\n bounds.clear(); // adjust legend to accommodate padding and title\n\n legendGroupLayout(view, item, item.items[0].items[0]); // aggregate bounds to determine size, and include origin\n\n bounds = legendBounds(item, bounds);\n w = 2 * item.padding;\n h = 2 * item.padding;\n\n if (!bounds.empty()) {\n w = Math.ceil(bounds.width() + w);\n h = Math.ceil(bounds.height() + h);\n }\n\n if (datum.type === Symbols) {\n legendEntryLayout(item.items[0].items[0].items[0].items);\n }\n\n if (orient !== None) {\n item.x = x = 0;\n item.y = y = 0;\n }\n\n item.width = w;\n item.height = h;\n boundStroke(bounds.set(x, y, x + w, y + h), item);\n item.mark.bounds.clear().union(bounds);\n return item;\n}\n\nfunction legendBounds(item, b) {\n // aggregate item bounds\n item.items.forEach(_ => b.union(_.bounds)); // anchor to legend origin\n\n b.x1 = item.padding;\n b.y1 = item.padding;\n return b;\n}\n\nfunction legendGroupLayout(view, item, entry) {\n var pad = item.padding,\n ex = pad - entry.x,\n ey = pad - entry.y;\n\n if (!item.datum.title) {\n if (ex || ey) translate(view, entry, ex, ey);\n } else {\n var title = item.items[1].items[0],\n anchor = title.anchor,\n tpad = item.titlePadding || 0,\n tx = pad - title.x,\n ty = pad - title.y;\n\n switch (title.orient) {\n case Left:\n ex += Math.ceil(title.bounds.width()) + tpad;\n break;\n\n case Right:\n case Bottom:\n break;\n\n default:\n ey += title.bounds.height() + tpad;\n }\n\n if (ex || ey) translate(view, entry, ex, ey);\n\n switch (title.orient) {\n case Left:\n ty += legendTitleOffset(item, entry, title, anchor, 1, 1);\n break;\n\n case Right:\n tx += legendTitleOffset(item, entry, title, End, 0, 0) + tpad;\n ty += legendTitleOffset(item, entry, title, anchor, 1, 1);\n break;\n\n case Bottom:\n tx += legendTitleOffset(item, entry, title, anchor, 0, 0);\n ty += legendTitleOffset(item, entry, title, End, -1, 0, 1) + tpad;\n break;\n\n default:\n tx += legendTitleOffset(item, entry, title, anchor, 0, 0);\n }\n\n if (tx || ty) translate(view, title, tx, ty); // translate legend if title pushes into negative coordinates\n\n if ((tx = Math.round(title.bounds.x1 - pad)) < 0) {\n translate(view, entry, -tx, 0);\n translate(view, title, -tx, 0);\n }\n }\n}\n\nfunction legendTitleOffset(item, entry, title, anchor, y, lr, noBar) {\n const grad = item.datum.type !== 'symbol',\n vgrad = title.datum.vgrad,\n e = grad && (lr || !vgrad) && !noBar ? entry.items[0] : entry,\n s = e.bounds[y ? 'y2' : 'x2'] - item.padding,\n u = vgrad && lr ? s : 0,\n v = vgrad && lr ? 0 : s,\n o = y <= 0 ? 0 : multiLineOffset(title);\n return Math.round(anchor === Start ? u : anchor === End ? v - o : 0.5 * (s - o));\n}\n\nfunction translate(view, item, dx, dy) {\n item.x += dx;\n item.y += dy;\n item.bounds.translate(dx, dy);\n item.mark.bounds.translate(dx, dy);\n view.dirty(item);\n}\n\nfunction legendEntryLayout(entries) {\n // get max widths for each column\n const widths = entries.reduce((w, g) => {\n w[g.column] = Math.max(g.bounds.x2 - g.x, w[g.column] || 0);\n return w;\n }, {}); // set dimensions of legend entry groups\n\n entries.forEach(g => {\n g.width = widths[g.column];\n g.height = g.bounds.y2 - g.y;\n });\n}\n\nfunction titleLayout(view, mark, width, height, viewBounds) {\n var group = mark.items[0],\n frame = group.frame,\n orient = group.orient,\n anchor = group.anchor,\n offset = group.offset,\n padding = group.padding,\n title = group.items[0].items[0],\n subtitle = group.items[1] && group.items[1].items[0],\n end = orient === Left || orient === Right ? height : width,\n start = 0,\n x = 0,\n y = 0,\n sx = 0,\n sy = 0,\n pos;\n\n if (frame !== Group) {\n orient === Left ? (start = viewBounds.y2, end = viewBounds.y1) : orient === Right ? (start = viewBounds.y1, end = viewBounds.y2) : (start = viewBounds.x1, end = viewBounds.x2);\n } else if (orient === Left) {\n start = height, end = 0;\n }\n\n pos = anchor === Start ? start : anchor === End ? end : (start + end) / 2;\n\n if (subtitle && subtitle.text) {\n // position subtitle\n switch (orient) {\n case Top:\n case Bottom:\n sy = title.bounds.height() + padding;\n break;\n\n case Left:\n sx = title.bounds.width() + padding;\n break;\n\n case Right:\n sx = -title.bounds.width() - padding;\n break;\n }\n\n tempBounds.clear().union(subtitle.bounds);\n tempBounds.translate(sx - (subtitle.x || 0), sy - (subtitle.y || 0));\n\n if (set(subtitle, 'x', sx) | set(subtitle, 'y', sy)) {\n view.dirty(subtitle);\n subtitle.bounds.clear().union(tempBounds);\n subtitle.mark.bounds.clear().union(tempBounds);\n view.dirty(subtitle);\n }\n\n tempBounds.clear().union(subtitle.bounds);\n } else {\n tempBounds.clear();\n }\n\n tempBounds.union(title.bounds); // position title group\n\n switch (orient) {\n case Top:\n x = pos;\n y = viewBounds.y1 - tempBounds.height() - offset;\n break;\n\n case Left:\n x = viewBounds.x1 - tempBounds.width() - offset;\n y = pos;\n break;\n\n case Right:\n x = viewBounds.x2 + tempBounds.width() + offset;\n y = pos;\n break;\n\n case Bottom:\n x = pos;\n y = viewBounds.y2 + offset;\n break;\n\n default:\n x = group.x;\n y = group.y;\n }\n\n if (set(group, 'x', x) | set(group, 'y', y)) {\n tempBounds.translate(x, y);\n view.dirty(group);\n group.bounds.clear().union(tempBounds);\n mark.bounds.clear().union(tempBounds);\n view.dirty(group);\n }\n\n return group.bounds;\n}\n\n/**\n * Layout view elements such as axes and legends.\n * Also performs size adjustments.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - Scenegraph mark of groups to layout.\n */\n\nfunction ViewLayout(params) {\n Transform.call(this, null, params);\n}\ninherits(ViewLayout, Transform, {\n transform(_, pulse) {\n const view = pulse.dataflow;\n\n _.mark.items.forEach(group => {\n if (_.layout) trellisLayout(view, group, _.layout);\n layoutGroup(view, group, _);\n });\n\n return shouldReflow(_.mark.group) ? pulse.reflow() : pulse;\n }\n\n});\n\nfunction shouldReflow(group) {\n // We typically should reflow if layout is invoked (#2568), as child items\n // may have resized and reflow ensures group bounds are re-calculated.\n // However, legend entries have a special exception to avoid instability.\n // For example, if a selected legend symbol gains a stroke on hover,\n // we don't want to re-position subsequent elements in the legend.\n return group && group.mark.role !== 'legend-entry';\n}\n\nfunction layoutGroup(view, group, _) {\n var items = group.items,\n width = Math.max(0, group.width || 0),\n height = Math.max(0, group.height || 0),\n viewBounds = new Bounds().set(0, 0, width, height),\n xBounds = viewBounds.clone(),\n yBounds = viewBounds.clone(),\n legends = [],\n title,\n mark,\n orient,\n b,\n i,\n n; // layout axes, gather legends, collect bounds\n\n for (i = 0, n = items.length; i < n; ++i) {\n mark = items[i];\n\n switch (mark.role) {\n case AxisRole:\n b = isYAxis(mark) ? xBounds : yBounds;\n b.union(axisLayout(view, mark, width, height));\n break;\n\n case TitleRole:\n title = mark;\n break;\n\n case LegendRole:\n legends.push(legendLayout(view, mark));\n break;\n\n case FrameRole:\n case ScopeRole:\n case RowHeader:\n case RowFooter:\n case RowTitle:\n case ColHeader:\n case ColFooter:\n case ColTitle:\n xBounds.union(mark.bounds);\n yBounds.union(mark.bounds);\n break;\n\n default:\n viewBounds.union(mark.bounds);\n }\n } // layout legends, adjust viewBounds\n\n\n if (legends.length) {\n // group legends by orient\n const l = {};\n legends.forEach(item => {\n orient = item.orient || Right;\n if (orient !== None) (l[orient] || (l[orient] = [])).push(item);\n }); // perform grid layout for each orient group\n\n for (const orient in l) {\n const g = l[orient];\n gridLayout(view, g, legendParams(g, orient, _.legends, xBounds, yBounds, width, height));\n } // update view bounds\n\n\n legends.forEach(item => {\n const b = item.bounds;\n\n if (!b.equals(item._bounds)) {\n item.bounds = item._bounds;\n view.dirty(item); // dirty previous location\n\n item.bounds = b;\n view.dirty(item);\n }\n\n if (_.autosize && _.autosize.type === Fit) {\n // For autosize fit, incorporate the orthogonal dimension only.\n // Legends that overrun the chart area will then be clipped;\n // otherwise the chart area gets reduced to nothing!\n switch (item.orient) {\n case Left:\n case Right:\n viewBounds.add(b.x1, 0).add(b.x2, 0);\n break;\n\n case Top:\n case Bottom:\n viewBounds.add(0, b.y1).add(0, b.y2);\n }\n } else {\n viewBounds.union(b);\n }\n });\n } // combine bounding boxes\n\n\n viewBounds.union(xBounds).union(yBounds); // layout title, adjust bounds\n\n if (title) {\n viewBounds.union(titleLayout(view, title, width, height, viewBounds));\n } // override aggregated view bounds if content is clipped\n\n\n if (group.clip) {\n viewBounds.set(0, 0, group.width || 0, group.height || 0);\n } // perform size adjustment\n\n\n viewSizeLayout(view, group, viewBounds, _);\n}\n\nfunction viewSizeLayout(view, group, viewBounds, _) {\n const auto = _.autosize || {},\n type = auto.type;\n if (view._autosize < 1 || !type) return;\n let viewWidth = view._width,\n viewHeight = view._height,\n width = Math.max(0, group.width || 0),\n left = Math.max(0, Math.ceil(-viewBounds.x1)),\n height = Math.max(0, group.height || 0),\n top = Math.max(0, Math.ceil(-viewBounds.y1));\n const right = Math.max(0, Math.ceil(viewBounds.x2 - width)),\n bottom = Math.max(0, Math.ceil(viewBounds.y2 - height));\n\n if (auto.contains === Padding) {\n const padding = view.padding();\n viewWidth -= padding.left + padding.right;\n viewHeight -= padding.top + padding.bottom;\n }\n\n if (type === None) {\n left = 0;\n top = 0;\n width = viewWidth;\n height = viewHeight;\n } else if (type === Fit) {\n width = Math.max(0, viewWidth - left - right);\n height = Math.max(0, viewHeight - top - bottom);\n } else if (type === FitX) {\n width = Math.max(0, viewWidth - left - right);\n viewHeight = height + top + bottom;\n } else if (type === FitY) {\n viewWidth = width + left + right;\n height = Math.max(0, viewHeight - top - bottom);\n } else if (type === Pad) {\n viewWidth = width + left + right;\n viewHeight = height + top + bottom;\n }\n\n view._resizeView(viewWidth, viewHeight, width, height, [left, top], auto.resize);\n}\n\nexport { Bound as bound, Identifier as identifier, Mark as mark, Overlap as overlap, Render as render, ViewLayout as viewlayout };\n","import { Transform, ingest, tupleid, stableCompare } from 'vega-dataflow';\nimport { tickCount, tickFormat, validTicks, tickValues, SymbolLegend, labelFormat, labelValues, GradientLegend, scaleFraction, labelFraction, scale, isContinuous, Sequential, Linear, Time, UTC, Pow, Sqrt, Ordinal, scaleImplicit, Log, Symlog, isLogarithmic, BinOrdinal, bandSpace, isInterpolating, interpolateRange, quantizeInterpolator, interpolateColors, interpolate, Band, Point, scheme, Threshold, Quantile, Quantize, Diverging } from 'vega-scale';\nimport { inherits, isArray, error, fastmap, falsy, isFunction, constant, peek, one, toSet, isString, zoomLog, zoomPow, zoomSymlog, zoomLinear, stringValue } from 'vega-util';\nimport { sum, range } from 'd3-array';\nimport { interpolateRound, interpolate as interpolate$1 } from 'd3-interpolate';\n\n/**\n * Generates axis ticks for visualizing a spatial scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate ticks for.\n * @param {*} [params.count=10] - The approximate number of ticks, or\n * desired tick interval, to use.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {function(*):string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid d3 4.0 format specifier.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\n\nfunction AxisTicks(params) {\n Transform.call(this, null, params);\n}\ninherits(AxisTicks, Transform, {\n transform(_, pulse) {\n if (this.value && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var locale = pulse.dataflow.locale(),\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n ticks = this.value,\n scale = _.scale,\n tally = _.count == null ? _.values ? _.values.length : 10 : _.count,\n count = tickCount(scale, tally, _.minstep),\n format = _.format || tickFormat(locale, scale, count, _.formatSpecifier, _.formatType, !!_.values),\n values = _.values ? validTicks(scale, _.values, count) : tickValues(scale, count);\n if (ticks) out.rem = ticks;\n ticks = values.map((value, i) => ingest({\n index: i / (values.length - 1 || 1),\n value: value,\n label: format(value)\n }));\n\n if (_.extra && ticks.length) {\n // add an extra tick pegged to the initial domain value\n // this is used to generate axes with 'binned' domains\n ticks.push(ingest({\n index: -1,\n extra: {\n value: ticks[0].value\n },\n label: ''\n }));\n }\n\n out.source = ticks;\n out.add = ticks;\n this.value = ticks;\n return out;\n }\n\n});\n\n/**\n * Joins a set of data elements against a set of visual items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): object} [params.item] - An item generator function.\n * @param {function(object): *} [params.key] - The key field associating data and visual items.\n */\n\nfunction DataJoin(params) {\n Transform.call(this, null, params);\n}\n\nfunction defaultItemCreate() {\n return ingest({});\n}\n\nfunction newMap(key) {\n const map = fastmap().test(t => t.exit);\n\n map.lookup = t => map.get(key(t));\n\n return map;\n}\n\ninherits(DataJoin, Transform, {\n transform(_, pulse) {\n var df = pulse.dataflow,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n item = _.item || defaultItemCreate,\n key = _.key || tupleid,\n map = this.value; // prevent transient (e.g., hover) requests from\n // cascading across marks derived from marks\n\n if (isArray(out.encode)) {\n out.encode = null;\n }\n\n if (map && (_.modified('key') || pulse.modified(key))) {\n error('DataJoin does not support modified key function or fields.');\n }\n\n if (!map) {\n pulse = pulse.addAll();\n this.value = map = newMap(key);\n }\n\n pulse.visit(pulse.ADD, t => {\n const k = key(t);\n let x = map.get(k);\n\n if (x) {\n if (x.exit) {\n map.empty--;\n out.add.push(x);\n } else {\n out.mod.push(x);\n }\n } else {\n x = item(t);\n map.set(k, x);\n out.add.push(x);\n }\n\n x.datum = t;\n x.exit = false;\n });\n pulse.visit(pulse.MOD, t => {\n const k = key(t),\n x = map.get(k);\n\n if (x) {\n x.datum = t;\n out.mod.push(x);\n }\n });\n pulse.visit(pulse.REM, t => {\n const k = key(t),\n x = map.get(k);\n\n if (t === x.datum && !x.exit) {\n out.rem.push(x);\n x.exit = true;\n ++map.empty;\n }\n });\n if (pulse.changed(pulse.ADD_MOD)) out.modifies('datum');\n\n if (pulse.clean() || _.clean && map.empty > df.cleanThreshold) {\n df.runAfter(map.clean);\n }\n\n return out;\n }\n\n});\n\n/**\n * Invokes encoding functions for visual items.\n * @constructor\n * @param {object} params - The parameters to the encoding functions. This\n * parameter object will be passed through to all invoked encoding functions.\n * @param {object} [params.mod=false] - Flag indicating if tuples in the input\n * mod set that are unmodified by encoders should be included in the output.\n * @param {object} param.encoders - The encoding functions\n * @param {function(object, object): boolean} [param.encoders.update] - Update encoding set\n * @param {function(object, object): boolean} [param.encoders.enter] - Enter encoding set\n * @param {function(object, object): boolean} [param.encoders.exit] - Exit encoding set\n */\n\nfunction Encode(params) {\n Transform.call(this, null, params);\n}\ninherits(Encode, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ADD_REM),\n fmod = _.mod || false,\n encoders = _.encoders,\n encode = pulse.encode; // if an array, the encode directive includes additional sets\n // that must be defined in order for the primary set to be invoked\n // e.g., only run the update set if the hover set is defined\n\n if (isArray(encode)) {\n if (out.changed() || encode.every(e => encoders[e])) {\n encode = encode[0];\n out.encode = null; // consume targeted encode directive\n } else {\n return pulse.StopPropagation;\n }\n } // marshall encoder functions\n\n\n var reenter = encode === 'enter',\n update = encoders.update || falsy,\n enter = encoders.enter || falsy,\n exit = encoders.exit || falsy,\n set = (encode && !reenter ? encoders[encode] : update) || falsy;\n\n if (pulse.changed(pulse.ADD)) {\n pulse.visit(pulse.ADD, t => {\n enter(t, _);\n update(t, _);\n });\n out.modifies(enter.output);\n out.modifies(update.output);\n\n if (set !== falsy && set !== update) {\n pulse.visit(pulse.ADD, t => {\n set(t, _);\n });\n out.modifies(set.output);\n }\n }\n\n if (pulse.changed(pulse.REM) && exit !== falsy) {\n pulse.visit(pulse.REM, t => {\n exit(t, _);\n });\n out.modifies(exit.output);\n }\n\n if (reenter || set !== falsy) {\n const flag = pulse.MOD | (_.modified() ? pulse.REFLOW : 0);\n\n if (reenter) {\n pulse.visit(flag, t => {\n const mod = enter(t, _) || fmod;\n if (set(t, _) || mod) out.mod.push(t);\n });\n if (out.mod.length) out.modifies(enter.output);\n } else {\n pulse.visit(flag, t => {\n if (set(t, _) || fmod) out.mod.push(t);\n });\n }\n\n if (out.mod.length) out.modifies(set.output);\n }\n\n return out.changed() ? out : pulse.StopPropagation;\n }\n\n});\n\n/**\n * Generates legend entries for visualizing a scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate items for.\n * @param {*} [params.count=5] - The approximate number of items, or\n * desired tick interval, to use.\n * @param {*} [params.limit] - The maximum number of entries to\n * include in a symbol legend.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid D3 format specifier string.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\n\nfunction LegendEntries(params) {\n Transform.call(this, [], params);\n}\ninherits(LegendEntries, Transform, {\n transform(_, pulse) {\n if (this.value != null && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var locale = pulse.dataflow.locale(),\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n items = this.value,\n type = _.type || SymbolLegend,\n scale = _.scale,\n limit = +_.limit,\n count = tickCount(scale, _.count == null ? 5 : _.count, _.minstep),\n lskip = !!_.values || type === SymbolLegend,\n format = _.format || labelFormat(locale, scale, count, type, _.formatSpecifier, _.formatType, lskip),\n values = _.values || labelValues(scale, count),\n domain,\n fraction,\n size,\n offset,\n ellipsis;\n if (items) out.rem = items;\n\n if (type === SymbolLegend) {\n if (limit && values.length > limit) {\n pulse.dataflow.warn('Symbol legend count exceeds limit, filtering items.');\n items = values.slice(0, limit - 1);\n ellipsis = true;\n } else {\n items = values;\n }\n\n if (isFunction(size = _.size)) {\n // if first value maps to size zero, remove from list (vega#717)\n if (!_.values && scale(items[0]) === 0) {\n items = items.slice(1);\n } // compute size offset for legend entries\n\n\n offset = items.reduce((max, value) => Math.max(max, size(value, _)), 0);\n } else {\n size = constant(offset = size || 8);\n }\n\n items = items.map((value, index) => ingest({\n index: index,\n label: format(value, index, items),\n value: value,\n offset: offset,\n size: size(value, _)\n }));\n\n if (ellipsis) {\n ellipsis = values[items.length];\n items.push(ingest({\n index: items.length,\n label: `\\u2026${values.length - items.length} entries`,\n value: ellipsis,\n offset: offset,\n size: size(ellipsis, _)\n }));\n }\n } else if (type === GradientLegend) {\n domain = scale.domain(), fraction = scaleFraction(scale, domain[0], peek(domain)); // if automatic label generation produces 2 or fewer values,\n // use the domain end points instead (fixes vega/vega#1364)\n\n if (values.length < 3 && !_.values && domain[0] !== peek(domain)) {\n values = [domain[0], peek(domain)];\n }\n\n items = values.map((value, index) => ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: fraction(value)\n }));\n } else {\n size = values.length - 1;\n fraction = labelFraction(scale);\n items = values.map((value, index) => ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: index ? fraction(value) : 0,\n perc2: index === size ? 1 : fraction(values[index + 1])\n }));\n }\n\n out.source = items;\n out.add = items;\n this.value = items;\n return out;\n }\n\n});\n\nconst sourceX = t => t.source.x;\n\nconst sourceY = t => t.source.y;\n\nconst targetX = t => t.target.x;\n\nconst targetY = t => t.target.y;\n/**\n * Layout paths linking source and target elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\n\nfunction LinkPath(params) {\n Transform.call(this, {}, params);\n}\nLinkPath.Definition = {\n 'type': 'LinkPath',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'sourceX',\n 'type': 'field',\n 'default': 'source.x'\n }, {\n 'name': 'sourceY',\n 'type': 'field',\n 'default': 'source.y'\n }, {\n 'name': 'targetX',\n 'type': 'field',\n 'default': 'target.x'\n }, {\n 'name': 'targetY',\n 'type': 'field',\n 'default': 'target.y'\n }, {\n 'name': 'orient',\n 'type': 'enum',\n 'default': 'vertical',\n 'values': ['horizontal', 'vertical', 'radial']\n }, {\n 'name': 'shape',\n 'type': 'enum',\n 'default': 'line',\n 'values': ['line', 'arc', 'curve', 'diagonal', 'orthogonal']\n }, {\n 'name': 'require',\n 'type': 'signal'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\ninherits(LinkPath, Transform, {\n transform(_, pulse) {\n var sx = _.sourceX || sourceX,\n sy = _.sourceY || sourceY,\n tx = _.targetX || targetX,\n ty = _.targetY || targetY,\n as = _.as || 'path',\n orient = _.orient || 'vertical',\n shape = _.shape || 'line',\n path = Paths.get(shape + '-' + orient) || Paths.get(shape);\n\n if (!path) {\n error('LinkPath unsupported type: ' + _.shape + (_.orient ? '-' + _.orient : ''));\n }\n\n pulse.visit(pulse.SOURCE, t => {\n t[as] = path(sx(t), sy(t), tx(t), ty(t));\n });\n return pulse.reflow(_.modified()).modifies(as);\n }\n\n});\n\nconst line = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'L' + tx + ',' + ty;\n\nconst lineR = (sa, sr, ta, tr) => line(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\n\nconst arc = (sx, sy, tx, ty) => {\n var dx = tx - sx,\n dy = ty - sy,\n rr = Math.sqrt(dx * dx + dy * dy) / 2,\n ra = 180 * Math.atan2(dy, dx) / Math.PI;\n return 'M' + sx + ',' + sy + 'A' + rr + ',' + rr + ' ' + ra + ' 0 1' + ' ' + tx + ',' + ty;\n};\n\nconst arcR = (sa, sr, ta, tr) => arc(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\n\nconst curve = (sx, sy, tx, ty) => {\n const dx = tx - sx,\n dy = ty - sy,\n ix = 0.2 * (dx + dy),\n iy = 0.2 * (dy - dx);\n return 'M' + sx + ',' + sy + 'C' + (sx + ix) + ',' + (sy + iy) + ' ' + (tx + iy) + ',' + (ty - ix) + ' ' + tx + ',' + ty;\n};\n\nconst curveR = (sa, sr, ta, tr) => curve(sr * Math.cos(sa), sr * Math.sin(sa), tr * Math.cos(ta), tr * Math.sin(ta));\n\nconst orthoX = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'V' + ty + 'H' + tx;\n\nconst orthoY = (sx, sy, tx, ty) => 'M' + sx + ',' + sy + 'H' + tx + 'V' + ty;\n\nconst orthoR = (sa, sr, ta, tr) => {\n const sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n sf = Math.abs(ta - sa) > Math.PI ? ta <= sa : ta > sa;\n return 'M' + sr * sc + ',' + sr * ss + 'A' + sr + ',' + sr + ' 0 0,' + (sf ? 1 : 0) + ' ' + sr * tc + ',' + sr * ts + 'L' + tr * tc + ',' + tr * ts;\n};\n\nconst diagonalX = (sx, sy, tx, ty) => {\n const m = (sx + tx) / 2;\n return 'M' + sx + ',' + sy + 'C' + m + ',' + sy + ' ' + m + ',' + ty + ' ' + tx + ',' + ty;\n};\n\nconst diagonalY = (sx, sy, tx, ty) => {\n const m = (sy + ty) / 2;\n return 'M' + sx + ',' + sy + 'C' + sx + ',' + m + ' ' + tx + ',' + m + ' ' + tx + ',' + ty;\n};\n\nconst diagonalR = (sa, sr, ta, tr) => {\n const sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n mr = (sr + tr) / 2;\n return 'M' + sr * sc + ',' + sr * ss + 'C' + mr * sc + ',' + mr * ss + ' ' + mr * tc + ',' + mr * ts + ' ' + tr * tc + ',' + tr * ts;\n};\n\nconst Paths = fastmap({\n 'line': line,\n 'line-radial': lineR,\n 'arc': arc,\n 'arc-radial': arcR,\n 'curve': curve,\n 'curve-radial': curveR,\n 'orthogonal-horizontal': orthoX,\n 'orthogonal-vertical': orthoY,\n 'orthogonal-radial': orthoR,\n 'diagonal-horizontal': diagonalX,\n 'diagonal-vertical': diagonalY,\n 'diagonal-radial': diagonalR\n});\n\n/**\n * Pie and donut chart layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size pie segments.\n * @param {number} [params.startAngle=0] - The start angle (in radians) of the layout.\n * @param {number} [params.endAngle=2π] - The end angle (in radians) of the layout.\n * @param {boolean} [params.sort] - Boolean flag for sorting sectors by value.\n */\n\nfunction Pie(params) {\n Transform.call(this, null, params);\n}\nPie.Definition = {\n 'type': 'Pie',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'startAngle',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'endAngle',\n 'type': 'number',\n 'default': 6.283185307179586\n }, {\n 'name': 'sort',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['startAngle', 'endAngle']\n }]\n};\ninherits(Pie, Transform, {\n transform(_, pulse) {\n var as = _.as || ['startAngle', 'endAngle'],\n startAngle = as[0],\n endAngle = as[1],\n field = _.field || one,\n start = _.startAngle || 0,\n stop = _.endAngle != null ? _.endAngle : 2 * Math.PI,\n data = pulse.source,\n values = data.map(field),\n n = values.length,\n a = start,\n k = (stop - start) / sum(values),\n index = range(n),\n i,\n t,\n v;\n\n if (_.sort) {\n index.sort((a, b) => values[a] - values[b]);\n }\n\n for (i = 0; i < n; ++i) {\n v = values[index[i]];\n t = data[index[i]];\n t[startAngle] = a;\n t[endAngle] = a += v * k;\n }\n\n this.value = values;\n return pulse.reflow(_.modified()).modifies(as);\n }\n\n});\n\nconst DEFAULT_COUNT = 5;\n\nfunction includeZero(scale) {\n const type = scale.type;\n return !scale.bins && (type === Linear || type === Pow || type === Sqrt);\n}\n\nfunction includePad(type) {\n return isContinuous(type) && type !== Sequential;\n}\n\nconst SKIP = toSet(['set', 'modified', 'clear', 'type', 'scheme', 'schemeExtent', 'schemeCount', 'domain', 'domainMin', 'domainMid', 'domainMax', 'domainRaw', 'domainImplicit', 'nice', 'zero', 'bins', 'range', 'rangeStep', 'round', 'reverse', 'interpolate', 'interpolateGamma']);\n/**\n * Maintains a scale function mapping data values to visual channels.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction Scale(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\ninherits(Scale, Transform, {\n transform(_, pulse) {\n var df = pulse.dataflow,\n scale$1 = this.value,\n key = scaleKey(_);\n\n if (!scale$1 || key !== scale$1.type) {\n this.value = scale$1 = scale(key)();\n }\n\n for (key in _) if (!SKIP[key]) {\n // padding is a scale property for band/point but not others\n if (key === 'padding' && includePad(scale$1.type)) continue; // invoke scale property setter, raise warning if not found\n\n isFunction(scale$1[key]) ? scale$1[key](_[key]) : df.warn('Unsupported scale property: ' + key);\n }\n\n configureRange(scale$1, _, configureBins(scale$1, _, configureDomain(scale$1, _, df)));\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n }\n\n});\n\nfunction scaleKey(_) {\n var t = _.type,\n d = '',\n n; // backwards compatibility pre Vega 5.\n\n if (t === Sequential) return Sequential + '-' + Linear;\n\n if (isContinuousColor(_)) {\n n = _.rawDomain ? _.rawDomain.length : _.domain ? _.domain.length + +(_.domainMid != null) : 0;\n d = n === 2 ? Sequential + '-' : n === 3 ? Diverging + '-' : '';\n }\n\n return (d + t || Linear).toLowerCase();\n}\n\nfunction isContinuousColor(_) {\n const t = _.type;\n return isContinuous(t) && t !== Time && t !== UTC && (_.scheme || _.range && _.range.length && _.range.every(isString));\n}\n\nfunction configureDomain(scale, _, df) {\n // check raw domain, if provided use that and exit early\n const raw = rawDomain(scale, _.domainRaw, df);\n if (raw > -1) return raw;\n var domain = _.domain,\n type = scale.type,\n zero = _.zero || _.zero === undefined && includeZero(scale),\n n,\n mid;\n if (!domain) return 0; // adjust continuous domain for minimum pixel padding\n\n if (includePad(type) && _.padding && domain[0] !== peek(domain)) {\n domain = padDomain(type, domain, _.range, _.padding, _.exponent, _.constant);\n } // adjust domain based on zero, min, max settings\n\n\n if (zero || _.domainMin != null || _.domainMax != null || _.domainMid != null) {\n n = (domain = domain.slice()).length - 1 || 1;\n\n if (zero) {\n if (domain[0] > 0) domain[0] = 0;\n if (domain[n] < 0) domain[n] = 0;\n }\n\n if (_.domainMin != null) domain[0] = _.domainMin;\n if (_.domainMax != null) domain[n] = _.domainMax;\n\n if (_.domainMid != null) {\n mid = _.domainMid;\n const i = mid > domain[n] ? n + 1 : mid < domain[0] ? 0 : n;\n if (i !== n) df.warn('Scale domainMid exceeds domain min or max.', mid);\n domain.splice(i, 0, mid);\n }\n } // set the scale domain\n\n\n scale.domain(domainCheck(type, domain, df)); // if ordinal scale domain is defined, prevent implicit\n // domain construction as side-effect of scale lookup\n\n if (type === Ordinal) {\n scale.unknown(_.domainImplicit ? scaleImplicit : undefined);\n } // perform 'nice' adjustment as requested\n\n\n if (_.nice && scale.nice) {\n scale.nice(_.nice !== true && tickCount(scale, _.nice) || null);\n } // return the cardinality of the domain\n\n\n return domain.length;\n}\n\nfunction rawDomain(scale, raw, df) {\n if (raw) {\n scale.domain(domainCheck(scale.type, raw, df));\n return raw.length;\n } else {\n return -1;\n }\n}\n\nfunction padDomain(type, domain, range, pad, exponent, constant) {\n var span = Math.abs(peek(range) - range[0]),\n frac = span / (span - 2 * pad),\n d = type === Log ? zoomLog(domain, null, frac) : type === Sqrt ? zoomPow(domain, null, frac, 0.5) : type === Pow ? zoomPow(domain, null, frac, exponent || 1) : type === Symlog ? zoomSymlog(domain, null, frac, constant || 1) : zoomLinear(domain, null, frac);\n domain = domain.slice();\n domain[0] = d[0];\n domain[domain.length - 1] = d[1];\n return domain;\n}\n\nfunction domainCheck(type, domain, df) {\n if (isLogarithmic(type)) {\n // sum signs of domain values\n // if all pos or all neg, abs(sum) === domain.length\n var s = Math.abs(domain.reduce((s, v) => s + (v < 0 ? -1 : v > 0 ? 1 : 0), 0));\n\n if (s !== domain.length) {\n df.warn('Log scale domain includes zero: ' + stringValue(domain));\n }\n }\n\n return domain;\n}\n\nfunction configureBins(scale, _, count) {\n let bins = _.bins;\n\n if (bins && !isArray(bins)) {\n // generate bin boundary array\n const domain = scale.domain(),\n lo = domain[0],\n hi = peek(domain),\n step = bins.step;\n let start = bins.start == null ? lo : bins.start,\n stop = bins.stop == null ? hi : bins.stop;\n if (!step) error('Scale bins parameter missing step property.');\n if (start < lo) start = step * Math.ceil(lo / step);\n if (stop > hi) stop = step * Math.floor(hi / step);\n bins = range(start, stop + step / 2, step);\n }\n\n if (bins) {\n // assign bin boundaries to scale instance\n scale.bins = bins;\n } else if (scale.bins) {\n // no current bins, remove bins if previously set\n delete scale.bins;\n } // special handling for bin-ordinal scales\n\n\n if (scale.type === BinOrdinal) {\n if (!bins) {\n // the domain specifies the bins\n scale.bins = scale.domain();\n } else if (!_.domain && !_.domainRaw) {\n // the bins specify the domain\n scale.domain(bins);\n count = bins.length;\n }\n } // return domain cardinality\n\n\n return count;\n}\n\nfunction configureRange(scale, _, count) {\n var type = scale.type,\n round = _.round || false,\n range = _.range; // if range step specified, calculate full range extent\n\n if (_.rangeStep != null) {\n range = configureRangeStep(type, _, count);\n } // else if a range scheme is defined, use that\n else if (_.scheme) {\n range = configureScheme(type, _, count);\n\n if (isFunction(range)) {\n if (scale.interpolator) {\n return scale.interpolator(range);\n } else {\n error(`Scale type ${type} does not support interpolating color schemes.`);\n }\n }\n } // given a range array for an interpolating scale, convert to interpolator\n\n\n if (range && isInterpolating(type)) {\n return scale.interpolator(interpolateColors(flip(range, _.reverse), _.interpolate, _.interpolateGamma));\n } // configure rounding / interpolation\n\n\n if (range && _.interpolate && scale.interpolate) {\n scale.interpolate(interpolate(_.interpolate, _.interpolateGamma));\n } else if (isFunction(scale.round)) {\n scale.round(round);\n } else if (isFunction(scale.rangeRound)) {\n scale.interpolate(round ? interpolateRound : interpolate$1);\n }\n\n if (range) scale.range(flip(range, _.reverse));\n}\n\nfunction configureRangeStep(type, _, count) {\n if (type !== Band && type !== Point) {\n error('Only band and point scales support rangeStep.');\n } // calculate full range based on requested step size and padding\n\n\n var outer = (_.paddingOuter != null ? _.paddingOuter : _.padding) || 0,\n inner = type === Point ? 1 : (_.paddingInner != null ? _.paddingInner : _.padding) || 0;\n return [0, _.rangeStep * bandSpace(count, inner, outer)];\n}\n\nfunction configureScheme(type, _, count) {\n var extent = _.schemeExtent,\n name,\n scheme$1;\n\n if (isArray(_.scheme)) {\n scheme$1 = interpolateColors(_.scheme, _.interpolate, _.interpolateGamma);\n } else {\n name = _.scheme.toLowerCase();\n scheme$1 = scheme(name);\n if (!scheme$1) error(`Unrecognized scheme name: ${_.scheme}`);\n } // determine size for potential discrete range\n\n\n count = type === Threshold ? count + 1 : type === BinOrdinal ? count - 1 : type === Quantile || type === Quantize ? +_.schemeCount || DEFAULT_COUNT : count; // adjust and/or quantize scheme as appropriate\n\n return isInterpolating(type) ? adjustScheme(scheme$1, extent, _.reverse) : isFunction(scheme$1) ? quantizeInterpolator(adjustScheme(scheme$1, extent), count) : type === Ordinal ? scheme$1 : scheme$1.slice(0, count);\n}\n\nfunction adjustScheme(scheme, extent, reverse) {\n return isFunction(scheme) && (extent || reverse) ? interpolateRange(scheme, flip(extent || [0, 1], reverse)) : scheme;\n}\n\nfunction flip(array, reverse) {\n return reverse ? array.slice().reverse() : array;\n}\n\n/**\n * Sorts scenegraph items in the pulse source array.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting tuples.\n */\n\nfunction SortItems(params) {\n Transform.call(this, null, params);\n}\ninherits(SortItems, Transform, {\n transform(_, pulse) {\n const mod = _.modified('sort') || pulse.changed(pulse.ADD) || pulse.modified(_.sort.fields) || pulse.modified('datum');\n if (mod) pulse.source.sort(stableCompare(_.sort));\n this.modified(mod);\n return pulse;\n }\n\n});\n\nconst Zero = 'zero',\n Center = 'center',\n Normalize = 'normalize',\n DefOutput = ['y0', 'y1'];\n/**\n * Stack layout for visualization elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to stack.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {function(object,object): number} [params.sort] - A comparator for stack sorting.\n * @param {string} [offset='zero'] - Stack baseline offset. One of 'zero', 'center', 'normalize'.\n */\n\nfunction Stack(params) {\n Transform.call(this, null, params);\n}\nStack.Definition = {\n 'type': 'Stack',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'offset',\n 'type': 'enum',\n 'default': Zero,\n 'values': [Zero, Center, Normalize]\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': DefOutput\n }]\n};\ninherits(Stack, Transform, {\n transform(_, pulse) {\n var as = _.as || DefOutput,\n y0 = as[0],\n y1 = as[1],\n sort = stableCompare(_.sort),\n field = _.field || one,\n stack = _.offset === Center ? stackCenter : _.offset === Normalize ? stackNormalize : stackZero,\n groups,\n i,\n n,\n max; // partition, sum, and sort the stack groups\n\n groups = partition(pulse.source, _.groupby, sort, field); // compute stack layouts per group\n\n for (i = 0, n = groups.length, max = groups.max; i < n; ++i) {\n stack(groups[i], max, field, y0, y1);\n }\n\n return pulse.reflow(_.modified()).modifies(as);\n }\n\n});\n\nfunction stackCenter(group, max, field, y0, y1) {\n var last = (max - group.sum) / 2,\n m = group.length,\n j = 0,\n t;\n\n for (; j < m; ++j) {\n t = group[j];\n t[y0] = last;\n t[y1] = last += Math.abs(field(t));\n }\n}\n\nfunction stackNormalize(group, max, field, y0, y1) {\n var scale = 1 / group.sum,\n last = 0,\n m = group.length,\n j = 0,\n v = 0,\n t;\n\n for (; j < m; ++j) {\n t = group[j];\n t[y0] = last;\n t[y1] = last = scale * (v += Math.abs(field(t)));\n }\n}\n\nfunction stackZero(group, max, field, y0, y1) {\n var lastPos = 0,\n lastNeg = 0,\n m = group.length,\n j = 0,\n v,\n t;\n\n for (; j < m; ++j) {\n t = group[j];\n v = +field(t);\n\n if (v < 0) {\n t[y0] = lastNeg;\n t[y1] = lastNeg += v;\n } else {\n t[y0] = lastPos;\n t[y1] = lastPos += v;\n }\n }\n}\n\nfunction partition(data, groupby, sort, field) {\n var groups = [],\n get = f => f(t),\n map,\n i,\n n,\n m,\n t,\n k,\n g,\n s,\n max; // partition data points into stack groups\n\n\n if (groupby == null) {\n groups.push(data.slice());\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n\n if (!g) {\n map[k] = g = [];\n groups.push(g);\n }\n\n g.push(t);\n }\n } // compute sums of groups, sort groups as needed\n\n\n for (k = 0, max = 0, m = groups.length; k < m; ++k) {\n g = groups[k];\n\n for (i = 0, s = 0, n = g.length; i < n; ++i) {\n s += Math.abs(field(g[i]));\n }\n\n g.sum = s;\n if (s > max) max = s;\n if (sort) g.sort(sort);\n }\n\n groups.max = max;\n return groups;\n}\n\nexport { AxisTicks as axisticks, DataJoin as datajoin, Encode as encode, LegendEntries as legendentries, LinkPath as linkpath, Pie as pie, Scale as scale, SortItems as sortitems, Stack as stack };\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","import {Adder} from \"d3-array\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nexport var areaRingSum = new Adder();\n\n// hello?\n\nvar areaSum = new Adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum = new Adder();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum = new Adder();\n stream(object, areaStream);\n return areaSum * 2;\n}\n","import {Adder} from \"d3-array\";\nimport {areaStream, areaRingSum} from \"./area.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport {abs, degrees, epsilon, radians} from \"./math.js\";\nimport stream from \"./stream.js\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum,\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum = new Adder();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n },\n sphere: function() {\n lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import {Adder} from \"d3-array\";\nimport {asin, atan2, cos, degrees, epsilon, epsilon2, hypot, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar W0, W1,\n X0, Y0, Z0,\n X1, Y1, Z1,\n X2, Y2, Z2,\n lambda00, phi00, // first point\n x0, y0, z0; // previous point\n\nvar centroidStream = {\n sphere: noop,\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n centroidRingPoint(lambda00, phi00);\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n cx = y0 * z - z0 * y,\n cy = z0 * x - x0 * z,\n cz = x0 * y - y0 * x,\n m = hypot(cx, cy, cz),\n w = asin(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2.add(v * cx);\n Y2.add(v * cy);\n Z2.add(v * cz);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 = 0;\n X2 = new Adder();\n Y2 = new Adder();\n Z2 = new Adder();\n stream(object, centroidStream);\n\n var x = +X2,\n y = +Y2,\n z = +Z2,\n m = hypot(x, y, z);\n\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < epsilon2) {\n x = X1, y = Y1, z = Z1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n m = hypot(x, y, z);\n // If the feature still has an undefined ccentroid, then return.\n if (m < epsilon2) return [NaN, NaN];\n }\n\n return [atan2(y, x) * degrees, asin(z / m) * degrees];\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y, m) {\n line.push([x, y, m]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n if (pointEqual(p0, p1)) {\n if (!p0[2] && !p1[2]) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n // handle degenerate cases by moving the point\n p1[0] += 2 * epsilon;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n if (abs(point[0]) <= pi)\n return point[0];\n else\n return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n var lambda = longitude(point),\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n var sum = new Adder();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = longitude(point0),\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = longitude(point1),\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n point1[2] = 1;\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1], 2);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1], 3);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math.js\";\n\nfunction graticuleX(y0, y1, dy) {\n var y = range(y0, y1 - epsilon, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = range(x0, x1 - epsilon, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: \"MultiLineString\", coordinates: lines()};\n }\n\n function lines() {\n return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n return graticule()();\n}\n","import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n areaRingSum = new Adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum = new Adder();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum = new Adder();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","export default x => x;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum = new Adder();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = circle(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n var pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n return path.projection(projection).context(context);\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n function transform(x, y) {\n x *= sx; y *= sy;\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k * sx, (dy - y) / k * sy];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n x *= sx; y *= sy;\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n };\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate angle\n sx = 1, // reflectX\n sy = 1, // reflectX\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n };\n\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n","import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y,\n l = atan2(x, abs(r0y)) * sign(r0y);\n if (r0y * n < 0)\n l -= pi * sign(x) * sign(r0y);\n return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n","import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n","import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n if (k === Infinity) return [2, 0];\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\n\nfunction tany(y) {\n return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n f = cy0 * pow(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n l = atan2(x, abs(fy)) * sign(fy);\n if (fy * n < 0)\n l -= pi * sign(x) * sign(fy);\n return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n","import projection from \"./index.js\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {abs, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {equirectangularRaw} from \"./equirectangular.js\";\n\nexport function conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs(n) < epsilon) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y,\n l = atan2(x, abs(gy)) * sign(gy);\n if (gy * n < 0)\n l -= pi * sign(x) * sign(gy);\n return [l / n, g - sign(n) * sqrt(x * x + gy * gy)];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = sqrt(3) / 2,\n iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs(delta) < epsilon2) break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n asin(sin(l) / M)\n ];\n};\n\nexport default function() {\n return projection(equalEarthRaw)\n .scale(177.158);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n","import projection from \"./index.js\";\nimport {abs, epsilon} from \"../math.js\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\nexport default function() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math.js\";\nimport {mercatorProjection} from \"./mercator.js\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n","export var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var ceil = Math.ceil;\nexport var cos = Math.cos;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var pow = Math.pow;\nexport var round = Math.round;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sin = Math.sin;\nexport var tan = Math.tan;\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var sqrt1_2 = Math.SQRT1_2;\nexport var sqrt2 = sqrt(2);\nexport var sqrtPi = sqrt(pi);\nexport var tau = pi * 2;\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport function sinci(x) {\n return x ? x / Math.sin(x) : 1;\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function sqrt(x) {\n return x > 0 ? Math.sqrt(x) : 0;\n}\n\nexport function tanh(x) {\n x = exp(2 * x);\n return (x - 1) / (x + 1);\n}\n\nexport function sinh(x) {\n return (exp(x) - exp(-x)) / 2;\n}\n\nexport function cosh(x) {\n return (exp(x) + exp(-x)) / 2;\n}\n\nexport function arsinh(x) {\n return log(x + sqrt(x * x + 1));\n}\n\nexport function arcosh(x) {\n return log(x + sqrt(x * x - 1));\n}\n","import {geoProjection as projection} from \"d3-geo\";\nimport {abs, asin, cos, epsilon, halfPi, pi, sin, sqrt2} from \"./math.js\";\n\nexport function mollweideBromleyTheta(cp, phi) {\n var cpsinPhi = cp * sin(phi), i = 30, delta;\n do phi -= delta = (phi + sin(phi) - cpsinPhi) / (1 + cos(phi));\n while (abs(delta) > epsilon && --i > 0);\n return phi / 2;\n}\n\nexport function mollweideBromleyRaw(cx, cy, cp) {\n\n function forward(lambda, phi) {\n return [cx * lambda * cos(phi = mollweideBromleyTheta(cp, phi)), cy * sin(phi)];\n }\n\n forward.invert = function(x, y) {\n return y = asin(y / cy), [x / (cx * cos(y)), asin((2 * y + sin(2 * y)) / cp)];\n };\n\n return forward;\n}\n\nexport var mollweideRaw = mollweideBromleyRaw(sqrt2 / halfPi, sqrt2, pi);\n\nexport default function() {\n return projection(mollweideRaw)\n .scale(169.529);\n}\n","import { geoPath, geoAlbers, geoAlbersUsa, geoAzimuthalEqualArea, geoAzimuthalEquidistant, geoConicConformal, geoConicEqualArea, geoConicEquidistant, geoEqualEarth, geoEquirectangular, geoGnomonic, geoIdentity, geoMercator, geoNaturalEarth1, geoOrthographic, geoStereographic, geoTransverseMercator } from 'd3-geo';\nimport { geoMollweide } from 'd3-geo-projection';\n\nconst defaultPath = geoPath();\nconst projectionProperties = [// standard properties in d3-geo\n'clipAngle', 'clipExtent', 'scale', 'translate', 'center', 'rotate', 'parallels', 'precision', 'reflectX', 'reflectY', // extended properties in d3-geo-projections\n'coefficient', 'distance', 'fraction', 'lobes', 'parallel', 'radius', 'ratio', 'spacing', 'tilt'];\n/**\n * Augment projections with their type and a copy method.\n */\n\nfunction create(type, constructor) {\n return function projection() {\n const p = constructor();\n p.type = type;\n p.path = geoPath().projection(p);\n\n p.copy = p.copy || function () {\n const c = projection();\n projectionProperties.forEach(prop => {\n if (p[prop]) c[prop](p[prop]());\n });\n c.path.pointRadius(p.path.pointRadius());\n return c;\n };\n\n return p;\n };\n}\n\nfunction projection(type, proj) {\n if (!type || typeof type !== 'string') {\n throw new Error('Projection type must be a name string.');\n }\n\n type = type.toLowerCase();\n\n if (arguments.length > 1) {\n projections[type] = create(type, proj);\n return this;\n } else {\n return projections[type] || null;\n }\n}\nfunction getProjectionPath(proj) {\n return proj && proj.path || defaultPath;\n}\nconst projections = {\n // base d3-geo projection types\n albers: geoAlbers,\n albersusa: geoAlbersUsa,\n azimuthalequalarea: geoAzimuthalEqualArea,\n azimuthalequidistant: geoAzimuthalEquidistant,\n conicconformal: geoConicConformal,\n conicequalarea: geoConicEqualArea,\n conicequidistant: geoConicEquidistant,\n equalEarth: geoEqualEarth,\n equirectangular: geoEquirectangular,\n gnomonic: geoGnomonic,\n identity: geoIdentity,\n mercator: geoMercator,\n mollweide: geoMollweide,\n naturalEarth1: geoNaturalEarth1,\n orthographic: geoOrthographic,\n stereographic: geoStereographic,\n transversemercator: geoTransverseMercator\n};\n\nfor (const key in projections) {\n projection(key, projections[key]);\n}\n\nexport { getProjectionPath, projection, projectionProperties };\n","import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n","import clipRectangle from \"../clip/rectangle.js\";\nimport identity from \"../identity.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport {cos, degrees, radians, sin} from \"../math.js\";\n\nexport default function() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\n alpha = 0, ca, sa, // angle\n x0 = null, y0, x1, y1, // clip extent\n kx = 1, ky = 1,\n transform = transformer({\n point: function(x, y) {\n var p = projection([x, y])\n this.stream.point(p[0], p[1]);\n }\n }),\n postclip = identity,\n cache,\n cacheStream;\n\n function reset() {\n kx = k * sx;\n ky = k * sy;\n cache = cacheStream = null;\n return projection;\n }\n\n function projection (p) {\n var x = p[0] * kx, y = p[1] * ky;\n if (alpha) {\n var t = y * ca - x * sa;\n x = x * ca + y * sa;\n y = t;\n } \n return [x + tx, y + ty];\n }\n projection.invert = function(p) {\n var x = p[0] - tx, y = p[1] - ty;\n if (alpha) {\n var t = y * ca + x * sa;\n x = x * ca - y * sa;\n y = t;\n }\n return [x / kx, y / ky];\n };\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n };\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n projection.scale = function(_) {\n return arguments.length ? (k = +_, reset()) : k;\n };\n projection.translate = function(_) {\n return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\n }\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;\n };\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\n };\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\n };\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n return projection;\n}\n","import { Transform, rederive, ingest, replace } from 'vega-dataflow';\nimport { error, extent, inherits, identity, isArray, isFunction, isNumber, constant, array, one, accessorName, accessorFields, field, extend, toSet, zero } from 'vega-util';\nimport { range, tickStep, max, sum } from 'd3-array';\nimport { bandwidthNRD } from 'vega-statistics';\nimport { getProjectionPath, projectionProperties, projection } from 'vega-projection';\nimport { geoGraticule } from 'd3-geo';\nimport { rgb } from 'd3-color';\nimport { canvas } from 'vega-canvas';\n\nfunction noop() {}\n\nconst cases = [[], [[[1.0, 1.5], [0.5, 1.0]]], [[[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [0.5, 1.0]]], [[[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 0.5], [1.0, 1.5]]], [[[1.0, 0.5], [0.5, 1.0]]], [[[0.5, 1.0], [1.0, 0.5]]], [[[1.0, 1.5], [1.0, 0.5]]], [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [1.0, 0.5]]], [[[0.5, 1.0], [1.5, 1.0]]], [[[1.0, 1.5], [1.5, 1.0]]], [[[0.5, 1.0], [1.0, 1.5]]], []]; // Implementation adapted from d3/d3-contour. Thanks!\n\nfunction contours () {\n var dx = 1,\n dy = 1,\n smooth = smoothLinear;\n\n function contours(values, tz) {\n return tz.map(value => contour(values, value));\n } // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n\n\n function contour(values, value) {\n var polygons = [],\n holes = [];\n isorings(values, value, ring => {\n smooth(ring, values, value);\n if (area(ring) > 0) polygons.push([ring]);else holes.push(ring);\n });\n holes.forEach(hole => {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n return {\n type: 'MultiPolygon',\n value: value,\n coordinates: polygons\n };\n } // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n\n\n function isorings(values, value, callback) {\n var fragmentByStart = new Array(),\n fragmentByEnd = new Array(),\n x,\n y,\n t0,\n t1,\n t2,\n t3; // Special case for the first row (y = -1, t2 = t3 = 0).\n\n x = y = -1;\n t1 = values[0] >= value;\n cases[t1 << 1].forEach(stitch);\n\n while (++x < dx - 1) {\n t0 = t1, t1 = values[x + 1] >= value;\n cases[t0 | t1 << 1].forEach(stitch);\n }\n\n cases[t1 << 0].forEach(stitch); // General case for the intermediate rows.\n\n while (++y < dy - 1) {\n x = -1;\n t1 = values[y * dx + dx] >= value;\n t2 = values[y * dx] >= value;\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n\n while (++x < dx - 1) {\n t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n\n cases[t1 | t2 << 3].forEach(stitch);\n } // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n\n\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n\n while (++x < dx - 1) {\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n\n cases[t2 << 3].forEach(stitch);\n\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f,\n g;\n\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {\n start: f.start,\n end: g.end,\n ring: f.ring.concat(g.ring)\n };\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {\n start: g.start,\n end: f.end,\n ring: g.ring.concat(f.ring)\n };\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {\n start: startIndex,\n end: endIndex,\n ring: [start, end]\n };\n }\n }\n }\n\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n\n function smoothLinear(ring, values, value) {\n ring.forEach(point => {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v0,\n v1 = values[yt * dx + xt];\n\n if (x > 0 && x < dx && xt === x) {\n v0 = values[yt * dx + xt - 1];\n point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n }\n\n if (y > 0 && y < dy && yt === y) {\n v0 = values[(yt - 1) * dx + xt];\n point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n }\n });\n }\n\n contours.contour = contour;\n\n contours.size = function (_) {\n if (!arguments.length) return [dx, dy];\n\n var _0 = Math.floor(_[0]),\n _1 = Math.floor(_[1]);\n\n if (!(_0 >= 0 && _1 >= 0)) error('invalid size');\n return dx = _0, dy = _1, contours;\n };\n\n contours.smooth = function (_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n };\n\n return contours;\n}\n\nfunction area(ring) {\n var i = 0,\n n = ring.length,\n area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n\n while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n\n return area;\n}\n\nfunction contains(ring, hole) {\n var i = -1,\n n = hole.length,\n c;\n\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n\n return 0;\n}\n\nfunction ringContains(ring, point) {\n var x = point[0],\n y = point[1],\n contains = -1;\n\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i],\n xi = pi[0],\n yi = pi[1],\n pj = ring[j],\n xj = pj[0],\n yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi) contains = -contains;\n }\n\n return contains;\n}\n\nfunction segmentContains(a, b, c) {\n var i;\n return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n\nfunction quantize (k, nice, zero) {\n return function (values) {\n var ex = extent(values),\n start = zero ? Math.min(ex[0], 0) : ex[0],\n stop = ex[1],\n span = stop - start,\n step = nice ? tickStep(start, stop, k) : span / (k + 1);\n return range(start + step, stop, step);\n };\n}\n\n/**\n * Generate isocontours (level sets) based on input raster grid data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} [params.field] - The field with raster grid\n * data. If unspecified, the tuple itself is interpreted as a raster grid.\n * @param {Array} [params.thresholds] - Contour threshold array. If\n * specified, the levels, nice, resolve, and zero parameters are ignored.\n * @param {number} [params.levels] - The desired number of contour levels.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified levels.\n * @param {string} [params.resolve] - The method for resolving thresholds\n * across multiple input grids. If 'independent' (the default), threshold\n * calculation will be performed separately for each grid. If 'shared', a\n * single set of threshold values will be used for all input grids.\n * @param {boolean} [params.zero] - Boolean flag indicating if the contour\n * threshold values should include zero.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n * @param {boolean} [params.scale] - Optional numerical value by which to\n * scale the output isocontour coordinates. This parameter can be useful\n * to scale the contours to match a desired output resolution.\n * @param {string} [params.as='contour'] - The output field in which to store\n * the generated isocontour data (default 'contour').\n */\n\nfunction Isocontour(params) {\n Transform.call(this, null, params);\n}\nIsocontour.Definition = {\n 'type': 'Isocontour',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'thresholds',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'levels',\n 'type': 'number'\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'zero',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'scale',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'translate',\n 'type': 'number',\n 'array': true,\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'null': true,\n 'default': 'contour'\n }]\n};\ninherits(Isocontour, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n source = pulse.materialize(pulse.SOURCE).source,\n field = _.field || identity,\n contour = contours().smooth(_.smooth !== false),\n tz = _.thresholds || levels(source, field, _),\n as = _.as === null ? null : _.as || 'contour',\n values = [];\n source.forEach(t => {\n const grid = field(t); // generate contour paths in GeoJSON format\n\n const paths = contour.size([grid.width, grid.height])(grid.values, isArray(tz) ? tz : tz(grid.values)); // adjust contour path coordinates as needed\n\n transformPaths(paths, grid, t, _); // ingest; copy source data properties to output\n\n paths.forEach(p => {\n values.push(rederive(t, ingest(as != null ? {\n [as]: p\n } : p)));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = values;\n return out;\n }\n\n});\n\nfunction levels(values, f, _) {\n const q = quantize(_.levels || 10, _.nice, _.zero !== false);\n return _.resolve !== 'shared' ? q : q(values.map(t => max(f(t).values)));\n}\n\nfunction transformPaths(paths, grid, datum, _) {\n let s = _.scale || grid.scale,\n t = _.translate || grid.translate;\n if (isFunction(s)) s = s(datum, _);\n if (isFunction(t)) t = t(datum, _);\n if ((s === 1 || s == null) && !t) return;\n const sx = (isNumber(s) ? s : s[0]) || 1,\n sy = (isNumber(s) ? s : s[1]) || 1,\n tx = t && t[0] || 0,\n ty = t && t[1] || 0;\n paths.forEach(transform(grid, sx, sy, tx, ty));\n}\n\nfunction transform(grid, sx, sy, tx, ty) {\n const x1 = grid.x1 || 0,\n y1 = grid.y1 || 0,\n flip = sx * sy < 0;\n\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n\n function transformRing(coordinates) {\n if (flip) coordinates.reverse(); // maintain winding order\n\n coordinates.forEach(transformPoint);\n }\n\n function transformPoint(coordinates) {\n coordinates[0] = (coordinates[0] - x1) * sx + tx;\n coordinates[1] = (coordinates[1] - y1) * sy + ty;\n }\n\n return function (geometry) {\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n };\n}\n\nfunction radius(bw, data, f) {\n const v = bw >= 0 ? bw : bandwidthNRD(data, f);\n return Math.round((Math.sqrt(4 * v * v + 1) - 1) / 2);\n}\n\nfunction number(_) {\n return isFunction(_) ? _ : constant(+_);\n} // Implementation adapted from d3/d3-contour. Thanks!\n\n\nfunction density2D () {\n var x = d => d[0],\n y = d => d[1],\n weight = one,\n bandwidth = [-1, -1],\n dx = 960,\n dy = 500,\n k = 2; // log2(cellSize)\n\n\n function density(data, counts) {\n const rx = radius(bandwidth[0], data, x) >> k,\n // blur x-radius\n ry = radius(bandwidth[1], data, y) >> k,\n // blur y-radius\n ox = rx ? rx + 2 : 0,\n // x-offset padding for blur\n oy = ry ? ry + 2 : 0,\n // y-offset padding for blur\n n = 2 * ox + (dx >> k),\n // grid width\n m = 2 * oy + (dy >> k),\n // grid height\n values0 = new Float32Array(n * m),\n values1 = new Float32Array(n * m);\n let values = values0;\n data.forEach(d => {\n const xi = ox + (+x(d) >> k),\n yi = oy + (+y(d) >> k);\n\n if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n values0[xi + yi * n] += +weight(d);\n }\n });\n\n if (rx > 0 && ry > 0) {\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n blurX(n, m, values0, values1, rx);\n blurY(n, m, values1, values0, ry);\n } else if (rx > 0) {\n blurX(n, m, values0, values1, rx);\n blurX(n, m, values1, values0, rx);\n blurX(n, m, values0, values1, rx);\n values = values1;\n } else if (ry > 0) {\n blurY(n, m, values0, values1, ry);\n blurY(n, m, values1, values0, ry);\n blurY(n, m, values0, values1, ry);\n values = values1;\n } // scale density estimates\n // density in points per square pixel or probability density\n\n\n const s = counts ? Math.pow(2, -2 * k) : 1 / sum(values);\n\n for (let i = 0, sz = n * m; i < sz; ++i) values[i] *= s;\n\n return {\n values: values,\n scale: 1 << k,\n width: n,\n height: m,\n x1: ox,\n y1: oy,\n x2: ox + (dx >> k),\n y2: oy + (dy >> k)\n };\n }\n\n density.x = function (_) {\n return arguments.length ? (x = number(_), density) : x;\n };\n\n density.y = function (_) {\n return arguments.length ? (y = number(_), density) : y;\n };\n\n density.weight = function (_) {\n return arguments.length ? (weight = number(_), density) : weight;\n };\n\n density.size = function (_) {\n if (!arguments.length) return [dx, dy];\n\n var _0 = +_[0],\n _1 = +_[1];\n\n if (!(_0 >= 0 && _1 >= 0)) error('invalid size');\n return dx = _0, dy = _1, density;\n };\n\n density.cellSize = function (_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) error('invalid cell size');\n k = Math.floor(Math.log(_) / Math.LN2);\n return density;\n };\n\n density.bandwidth = function (_) {\n if (!arguments.length) return bandwidth;\n _ = array(_);\n if (_.length === 1) _ = [+_[0], +_[0]];\n if (_.length !== 2) error('invalid bandwidth');\n return bandwidth = _, density;\n };\n\n return density;\n}\n\nfunction blurX(n, m, source, target, r) {\n const w = (r << 1) + 1;\n\n for (let j = 0; j < m; ++j) {\n for (let i = 0, sr = 0; i < n + r; ++i) {\n if (i < n) {\n sr += source[i + j * n];\n }\n\n if (i >= r) {\n if (i >= w) {\n sr -= source[i - w + j * n];\n }\n\n target[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n }\n }\n }\n}\n\nfunction blurY(n, m, source, target, r) {\n const w = (r << 1) + 1;\n\n for (let i = 0; i < n; ++i) {\n for (let j = 0, sr = 0; j < m + r; ++j) {\n if (j < m) {\n sr += source[i + j * n];\n }\n\n if (j >= r) {\n if (j >= w) {\n sr -= source[i + (j - w) * n];\n }\n\n target[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n }\n }\n }\n}\n\n/**\n * Perform 2D kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The [width, height] extent (in\n * units of input pixels) over which to perform density estimation.\n * @param {function(object): number} params.x - The x-coordinate accessor.\n * @param {function(object): number} params.y - The y-coordinate accessor.\n * @param {function(object): number} [params.weight] - The weight accessor.\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * This parameter determines the level of spatial approximation. For example,\n * the default value of 4 maps to 2x reductions in both x- and y- dimensions.\n * A value of 1 will result in an output raster grid whose dimensions exactly\n * matches the size parameter.\n * @param {Array} [params.bandwidth] - The KDE kernel bandwidths,\n * in pixels. The input can be a two-element array specifying separate\n * x and y bandwidths, or a single-element array specifying both. If the\n * bandwidth is unspecified or less than zero, the bandwidth will be\n * automatically determined.\n * @param {boolean} [params.counts=false] - A boolean flag indicating if the\n * output values should be probability estimates (false, default) or\n * smoothed counts (true).\n * @param {string} [params.as='grid'] - The output field in which to store\n * the generated raster grid (default 'grid').\n */\n\nfunction KDE2D(params) {\n Transform.call(this, null, params);\n}\nKDE2D.Definition = {\n 'type': 'KDE2D',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'weight',\n 'type': 'field'\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'cellSize',\n 'type': 'number'\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'counts',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'grid'\n }]\n};\nconst PARAMS = ['x', 'y', 'weight', 'size', 'cellSize', 'bandwidth'];\nfunction params(obj, _) {\n PARAMS.forEach(param => _[param] != null ? obj[param](_[param]) : 0);\n return obj;\n}\ninherits(KDE2D, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) return pulse.StopPropagation;\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n kde = params(density2D(), _),\n as = _.as || 'grid',\n values = [];\n\n function set(t, vals) {\n for (let i = 0; i < names.length; ++i) t[names[i]] = vals[i];\n\n return t;\n } // generate density raster grids\n\n\n values = groups.map(g => ingest(set({\n [as]: kde(g, _.counts)\n }, g.dims)));\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = values;\n return out;\n }\n\n});\nfunction partition(data, groupby) {\n var groups = [],\n get = f => f(t),\n map,\n i,\n n,\n t,\n k,\n g; // partition data points into groups\n\n\n if (groupby == null) {\n groups.push(data);\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n\n g.push(t);\n }\n }\n\n return groups;\n}\n\n/**\n * Generate contours based on kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The dimensions [width, height] over which to compute contours.\n * If the values parameter is provided, this must be the dimensions of the input data.\n * If density estimation is performed, this is the output view dimensions in pixels.\n * @param {Array} [params.values] - An array of numeric values representing an\n * width x height grid of values over which to compute contours. If unspecified, this\n * transform will instead attempt to compute contours for the kernel density estimate\n * using values drawn from data tuples in the input pulse.\n * @param {function(object): number} [params.x] - The pixel x-coordinate accessor for density estimation.\n * @param {function(object): number} [params.y] - The pixel y-coordinate accessor for density estimation.\n * @param {function(object): number} [params.weight] - The data point weight accessor for density estimation.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * @param {number} [params.bandwidth] - Kernel density estimation bandwidth.\n * @param {Array} [params.thresholds] - Contour threshold array. If\n * this parameter is set, the count and nice parameters will be ignored.\n * @param {number} [params.count] - The desired number of contours.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified count.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n */\n\nfunction Contour(params) {\n Transform.call(this, null, params);\n}\nContour.Definition = {\n 'type': 'Contour',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'required': true\n }, {\n 'name': 'values',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'x',\n 'type': 'field'\n }, {\n 'name': 'y',\n 'type': 'field'\n }, {\n 'name': 'weight',\n 'type': 'field'\n }, {\n 'name': 'cellSize',\n 'type': 'number'\n }, {\n 'name': 'bandwidth',\n 'type': 'number'\n }, {\n 'name': 'count',\n 'type': 'number'\n }, {\n 'name': 'nice',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'thresholds',\n 'type': 'number',\n 'array': true\n }, {\n 'name': 'smooth',\n 'type': 'boolean',\n 'default': true\n }]\n};\ninherits(Contour, Transform, {\n transform(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n contour = contours().smooth(_.smooth !== false),\n values = _.values,\n thresh = _.thresholds || quantize(_.count || 10, _.nice, !!values),\n size = _.size,\n grid,\n post;\n\n if (!values) {\n values = pulse.materialize(pulse.SOURCE).source;\n grid = params(density2D(), _)(values, true);\n post = transform(grid, grid.scale || 1, grid.scale || 1, 0, 0);\n size = [grid.width, grid.height];\n values = grid.values;\n }\n\n thresh = isArray(thresh) ? thresh : thresh(values);\n values = contour.size(size)(values, thresh);\n if (post) values.forEach(post);\n if (this.value) out.rem = this.value;\n this.value = out.source = out.add = (values || []).map(ingest);\n return out;\n }\n\n});\n\nconst Feature = 'Feature';\nconst FeatureCollection = 'FeatureCollection';\nconst MultiPoint = 'MultiPoint';\n\n/**\n * Consolidate an array of [longitude, latitude] points or GeoJSON features\n * into a combined GeoJSON object. This transform is particularly useful for\n * combining geo data for a Projection's fit argument. The resulting GeoJSON\n * data is available as this transform's value. Input pulses are unchanged.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.fields] - A two-element array\n * of field accessors for the longitude and latitude values.\n * @param {function(object): *} params.geojson - A field accessor for\n * retrieving GeoJSON feature data.\n */\n\nfunction GeoJSON(params) {\n Transform.call(this, null, params);\n}\nGeoJSON.Definition = {\n 'type': 'GeoJSON',\n 'metadata': {},\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'geojson',\n 'type': 'field'\n }]\n};\ninherits(GeoJSON, Transform, {\n transform(_, pulse) {\n var features = this._features,\n points = this._points,\n fields = _.fields,\n lon = fields && fields[0],\n lat = fields && fields[1],\n geojson = _.geojson || !fields && identity,\n flag = pulse.ADD,\n mod;\n mod = _.modified() || pulse.changed(pulse.REM) || pulse.modified(accessorFields(geojson)) || lon && pulse.modified(accessorFields(lon)) || lat && pulse.modified(accessorFields(lat));\n\n if (!this.value || mod) {\n flag = pulse.SOURCE;\n this._features = features = [];\n this._points = points = [];\n }\n\n if (geojson) {\n pulse.visit(flag, t => features.push(geojson(t)));\n }\n\n if (lon && lat) {\n pulse.visit(flag, t => {\n var x = lon(t),\n y = lat(t);\n\n if (x != null && y != null && (x = +x) === x && (y = +y) === y) {\n points.push([x, y]);\n }\n });\n features = features.concat({\n type: Feature,\n geometry: {\n type: MultiPoint,\n coordinates: points\n }\n });\n }\n\n this.value = {\n type: FeatureCollection,\n features: features\n };\n }\n\n});\n\n/**\n * Map GeoJSON data to an SVG path string.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='path'] - The output field in which to store\n * the generated path data (default 'path').\n */\n\nfunction GeoPath(params) {\n Transform.call(this, null, params);\n}\nGeoPath.Definition = {\n 'type': 'GeoPath',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection'\n }, {\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'pointRadius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\ninherits(GeoPath, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n path = this.value,\n field = _.field || identity,\n as = _.as || 'path',\n flag = out.SOURCE;\n\n if (!path || _.modified()) {\n // parameters updated, reset and reflow\n this.value = path = getProjectionPath(_.projection);\n out.materialize().reflow();\n } else {\n flag = field === identity || pulse.modified(field.fields) ? out.ADD_MOD : out.ADD;\n }\n\n const prev = initPath(path, _.pointRadius);\n out.visit(flag, t => t[as] = path(field(t)));\n path.pointRadius(prev);\n return out.modifies(as);\n }\n\n});\n\nfunction initPath(path, pointRadius) {\n const prev = path.pointRadius();\n path.context(null);\n\n if (pointRadius != null) {\n path.pointRadius(pointRadius);\n }\n\n return prev;\n}\n\n/**\n * Geo-code a longitude/latitude point to an x/y coordinate.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {Array} params.fields - A two-element array of\n * field accessors for the longitude and latitude values.\n * @param {Array} [params.as] - A two-element array of field names\n * under which to store the result. Defaults to ['x','y'].\n */\n\nfunction GeoPoint(params) {\n Transform.call(this, null, params);\n}\nGeoPoint.Definition = {\n 'type': 'GeoPoint',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection',\n 'required': true\n }, {\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 2,\n 'default': ['x', 'y']\n }]\n};\ninherits(GeoPoint, Transform, {\n transform(_, pulse) {\n var proj = _.projection,\n lon = _.fields[0],\n lat = _.fields[1],\n as = _.as || ['x', 'y'],\n x = as[0],\n y = as[1],\n mod;\n\n function set(t) {\n const xy = proj([lon(t), lat(t)]);\n\n if (xy) {\n t[x] = xy[0];\n t[y] = xy[1];\n } else {\n t[x] = undefined;\n t[y] = undefined;\n }\n }\n\n if (_.modified()) {\n // parameters updated, reflow\n pulse = pulse.materialize().reflow(true).visit(pulse.SOURCE, set);\n } else {\n mod = pulse.modified(lon.fields) || pulse.modified(lat.fields);\n pulse.visit(mod ? pulse.ADD_MOD : pulse.ADD, set);\n }\n\n return pulse.modifies(as);\n }\n\n});\n\n/**\n * Annotate items with a geopath shape generator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='shape'] - The output field in which to store\n * the generated path data (default 'shape').\n */\n\nfunction GeoShape(params) {\n Transform.call(this, null, params);\n}\nGeoShape.Definition = {\n 'type': 'GeoShape',\n 'metadata': {\n 'modifies': true,\n 'nomod': true\n },\n 'params': [{\n 'name': 'projection',\n 'type': 'projection'\n }, {\n 'name': 'field',\n 'type': 'field',\n 'default': 'datum'\n }, {\n 'name': 'pointRadius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'shape'\n }]\n};\ninherits(GeoShape, Transform, {\n transform(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n shape = this.value,\n as = _.as || 'shape',\n flag = out.ADD;\n\n if (!shape || _.modified()) {\n // parameters updated, reset and reflow\n this.value = shape = shapeGenerator(getProjectionPath(_.projection), _.field || field('datum'), _.pointRadius);\n out.materialize().reflow();\n flag = out.SOURCE;\n }\n\n out.visit(flag, t => t[as] = shape);\n return out.modifies(as);\n }\n\n});\n\nfunction shapeGenerator(path, field, pointRadius) {\n const shape = pointRadius == null ? _ => path(field(_)) : _ => {\n var prev = path.pointRadius(),\n value = path.pointRadius(pointRadius)(field(_));\n path.pointRadius(prev);\n return value;\n };\n\n shape.context = _ => {\n path.context(_);\n return shape;\n };\n\n return shape;\n}\n\n/**\n * GeoJSON feature generator for creating graticules.\n * @constructor\n */\n\nfunction Graticule(params) {\n Transform.call(this, [], params);\n this.generator = geoGraticule();\n}\nGraticule.Definition = {\n 'type': 'Graticule',\n 'metadata': {\n 'changes': true,\n 'generates': true\n },\n 'params': [{\n 'name': 'extent',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'extentMajor',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'extentMinor',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'step',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'stepMajor',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'default': [90, 360]\n }, {\n 'name': 'stepMinor',\n 'type': 'number',\n 'array': true,\n 'length': 2,\n 'default': [10, 10]\n }, {\n 'name': 'precision',\n 'type': 'number',\n 'default': 2.5\n }]\n};\ninherits(Graticule, Transform, {\n transform(_, pulse) {\n var src = this.value,\n gen = this.generator,\n t;\n\n if (!src.length || _.modified()) {\n for (const prop in _) {\n if (isFunction(gen[prop])) {\n gen[prop](_[prop]);\n }\n }\n }\n\n t = gen();\n\n if (src.length) {\n pulse.mod.push(replace(src[0], t));\n } else {\n pulse.add.push(ingest(t));\n }\n\n src[0] = t;\n return pulse;\n }\n\n});\n\n/**\n * Render a heatmap image for input raster grid data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} [params.field] - The field with raster grid\n * data. If unspecified, the tuple itself is interpreted as a raster grid.\n * @param {string} [params.color] - A constant color value or function for\n * individual pixel color. If a function, it will be invoked with an input\n * object that includes $x, $y, $value, and $max fields for the grid.\n * @param {number} [params.opacity] - A constant opacity value or function for\n * individual pixel opacity. If a function, it will be invoked with an input\n * object that includes $x, $y, $value, and $max fields for the grid.\n * @param {string} [params.resolve] - The method for resolving maximum values\n * across multiple input grids. If 'independent' (the default), maximum\n * calculation will be performed separately for each grid. If 'shared',\n * a single global maximum will be used for all input grids.\n * @param {string} [params.as='image'] - The output field in which to store\n * the generated bitmap canvas images (default 'image').\n */\n\nfunction Heatmap(params) {\n Transform.call(this, null, params);\n}\nHeatmap.Definition = {\n 'type': 'heatmap',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'color',\n 'type': 'string',\n 'expr': true\n }, {\n 'name': 'opacity',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'resolve',\n 'type': 'enum',\n 'values': ['shared', 'independent'],\n 'default': 'independent'\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'image'\n }]\n};\ninherits(Heatmap, Transform, {\n transform(_, pulse) {\n if (!pulse.changed() && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var source = pulse.materialize(pulse.SOURCE).source,\n shared = _.resolve === 'shared',\n field = _.field || identity,\n opacity = opacity_(_.opacity, _),\n color = color_(_.color, _),\n as = _.as || 'image',\n obj = {\n $x: 0,\n $y: 0,\n $value: 0,\n $max: shared ? max(source.map(t => max(field(t).values))) : 0\n };\n source.forEach(t => {\n const v = field(t); // build proxy data object\n\n const o = extend({}, t, obj); // set maximum value if not globally shared\n\n if (!shared) o.$max = max(v.values || []); // generate canvas image\n // optimize color/opacity if not pixel-dependent\n\n t[as] = toCanvas(v, o, color.dep ? color : constant(color(o)), opacity.dep ? opacity : constant(opacity(o)));\n });\n return pulse.reflow(true).modifies(as);\n }\n\n}); // get image color function\n\nfunction color_(color, _) {\n let f;\n\n if (isFunction(color)) {\n f = obj => rgb(color(obj, _));\n\n f.dep = dependency(color);\n } else {\n // default to mid-grey\n f = constant(rgb(color || '#888'));\n }\n\n return f;\n} // get image opacity function\n\n\nfunction opacity_(opacity, _) {\n let f;\n\n if (isFunction(opacity)) {\n f = obj => opacity(obj, _);\n\n f.dep = dependency(opacity);\n } else if (opacity) {\n f = constant(opacity);\n } else {\n // default to [0, max] opacity gradient\n f = obj => obj.$value / obj.$max || 0;\n\n f.dep = true;\n }\n\n return f;\n} // check if function depends on individual pixel data\n\n\nfunction dependency(f) {\n if (!isFunction(f)) return false;\n const set = toSet(accessorFields(f));\n return set.$x || set.$y || set.$value || set.$max;\n} // render raster grid to canvas\n\n\nfunction toCanvas(grid, obj, color, opacity) {\n const n = grid.width,\n m = grid.height,\n x1 = grid.x1 || 0,\n y1 = grid.y1 || 0,\n x2 = grid.x2 || n,\n y2 = grid.y2 || m,\n val = grid.values,\n value = val ? i => val[i] : zero,\n can = canvas(x2 - x1, y2 - y1),\n ctx = can.getContext('2d'),\n img = ctx.getImageData(0, 0, x2 - x1, y2 - y1),\n pix = img.data;\n\n for (let j = y1, k = 0; j < y2; ++j) {\n obj.$y = j - y1;\n\n for (let i = x1, r = j * n; i < x2; ++i, k += 4) {\n obj.$x = i - x1;\n obj.$value = value(i + r);\n const v = color(obj);\n pix[k + 0] = v.r;\n pix[k + 1] = v.g;\n pix[k + 2] = v.b;\n pix[k + 3] = ~~(255 * opacity(obj));\n }\n }\n\n ctx.putImageData(img, 0, 0);\n return can;\n}\n\n/**\n * Maintains a cartographic projection.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction Projection(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\ninherits(Projection, Transform, {\n transform(_, pulse) {\n let proj = this.value;\n\n if (!proj || _.modified('type')) {\n this.value = proj = create(_.type);\n projectionProperties.forEach(prop => {\n if (_[prop] != null) set(proj, prop, _[prop]);\n });\n } else {\n projectionProperties.forEach(prop => {\n if (_.modified(prop)) set(proj, prop, _[prop]);\n });\n }\n\n if (_.pointRadius != null) proj.path.pointRadius(_.pointRadius);\n if (_.fit) fit(proj, _);\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n }\n\n});\n\nfunction fit(proj, _) {\n const data = collectGeoJSON(_.fit);\n _.extent ? proj.fitExtent(_.extent, data) : _.size ? proj.fitSize(_.size, data) : 0;\n}\n\nfunction create(type) {\n const constructor = projection((type || 'mercator').toLowerCase());\n if (!constructor) error('Unrecognized projection type: ' + type);\n return constructor();\n}\n\nfunction set(proj, key, value) {\n if (isFunction(proj[key])) proj[key](value);\n}\n\nfunction collectGeoJSON(data) {\n data = array(data);\n return data.length === 1 ? data[0] : {\n type: FeatureCollection,\n features: data.reduce((a, f) => a.concat(featurize(f)), [])\n };\n}\n\nfunction featurize(f) {\n return f.type === FeatureCollection ? f.features : array(f).filter(d => d != null).map(d => d.type === Feature ? d : {\n type: Feature,\n geometry: d\n });\n}\n\nexport { Contour as contour, GeoJSON as geojson, GeoPath as geopath, GeoPoint as geopoint, GeoShape as geoshape, Graticule as graticule, Heatmap as heatmap, Isocontour as isocontour, KDE2D as kde2d, Projection as projection };\n","export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n random,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n y = target.y + target.vy - source.y - source.vy || jiggle(random);\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import { Transform } from 'vega-dataflow';\nimport { inherits, array, isFunction, accessorFields, hasOwnProperty, error } from 'vega-util';\nimport { forceSimulation, forceCenter, forceCollide, forceManyBody, forceLink, forceX, forceY } from 'd3-force';\n\nconst ForceMap = {\n center: forceCenter,\n collide: forceCollide,\n nbody: forceManyBody,\n link: forceLink,\n x: forceX,\n y: forceY\n};\nconst Forces = 'forces',\n ForceParams = ['alpha', 'alphaMin', 'alphaTarget', 'velocityDecay', 'forces'],\n ForceConfig = ['static', 'iterations'],\n ForceOutput = ['x', 'y', 'vx', 'vy'];\n/**\n * Force simulation layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.forces - The forces to apply.\n */\n\nfunction Force(params) {\n Transform.call(this, null, params);\n}\nForce.Definition = {\n 'type': 'Force',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'static',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'restart',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 300\n }, {\n 'name': 'alpha',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'alphaMin',\n 'type': 'number',\n 'default': 0.001\n }, {\n 'name': 'alphaTarget',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'velocityDecay',\n 'type': 'number',\n 'default': 0.4\n }, {\n 'name': 'forces',\n 'type': 'param',\n 'array': true,\n 'params': [{\n 'key': {\n 'force': 'center'\n },\n 'params': [{\n 'name': 'x',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'y',\n 'type': 'number',\n 'default': 0\n }]\n }, {\n 'key': {\n 'force': 'collide'\n },\n 'params': [{\n 'name': 'radius',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.7\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 1\n }]\n }, {\n 'key': {\n 'force': 'nbody'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': -30\n }, {\n 'name': 'theta',\n 'type': 'number',\n 'default': 0.9\n }, {\n 'name': 'distanceMin',\n 'type': 'number',\n 'default': 1\n }, {\n 'name': 'distanceMax',\n 'type': 'number'\n }]\n }, {\n 'key': {\n 'force': 'link'\n },\n 'params': [{\n 'name': 'links',\n 'type': 'data'\n }, {\n 'name': 'id',\n 'type': 'field'\n }, {\n 'name': 'distance',\n 'type': 'number',\n 'default': 30,\n 'expr': true\n }, {\n 'name': 'strength',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'iterations',\n 'type': 'number',\n 'default': 1\n }]\n }, {\n 'key': {\n 'force': 'x'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.1\n }, {\n 'name': 'x',\n 'type': 'field'\n }]\n }, {\n 'key': {\n 'force': 'y'\n },\n 'params': [{\n 'name': 'strength',\n 'type': 'number',\n 'default': 0.1\n }, {\n 'name': 'y',\n 'type': 'field'\n }]\n }]\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'modify': false,\n 'default': ForceOutput\n }]\n};\ninherits(Force, Transform, {\n transform(_, pulse) {\n var sim = this.value,\n change = pulse.changed(pulse.ADD_REM),\n params = _.modified(ForceParams),\n iters = _.iterations || 300; // configure simulation\n\n\n if (!sim) {\n this.value = sim = simulation(pulse.source, _);\n sim.on('tick', rerun(pulse.dataflow, this));\n\n if (!_.static) {\n change = true;\n sim.tick(); // ensure we run on init\n }\n\n pulse.modifies('index');\n } else {\n if (change) {\n pulse.modifies('index');\n sim.nodes(pulse.source);\n }\n\n if (params || pulse.changed(pulse.MOD)) {\n setup(sim, _, 0, pulse);\n }\n } // run simulation\n\n\n if (params || change || _.modified(ForceConfig) || pulse.changed() && _.restart) {\n sim.alpha(Math.max(sim.alpha(), _.alpha || 1)).alphaDecay(1 - Math.pow(sim.alphaMin(), 1 / iters));\n\n if (_.static) {\n for (sim.stop(); --iters >= 0;) sim.tick();\n } else {\n if (sim.stopped()) sim.restart();\n if (!change) return pulse.StopPropagation; // defer to sim ticks\n }\n }\n\n return this.finish(_, pulse);\n },\n\n finish(_, pulse) {\n const dataflow = pulse.dataflow; // inspect dependencies, touch link source data\n\n for (let args = this._argops, j = 0, m = args.length, arg; j < m; ++j) {\n arg = args[j];\n\n if (arg.name !== Forces || arg.op._argval.force !== 'link') {\n continue;\n }\n\n for (var ops = arg.op._argops, i = 0, n = ops.length, op; i < n; ++i) {\n if (ops[i].name === 'links' && (op = ops[i].op.source)) {\n dataflow.pulse(op, dataflow.changeset().reflow());\n break;\n }\n }\n } // reflow all nodes\n\n\n return pulse.reflow(_.modified()).modifies(ForceOutput);\n }\n\n});\n\nfunction rerun(df, op) {\n return () => df.touch(op).run();\n}\n\nfunction simulation(nodes, _) {\n const sim = forceSimulation(nodes),\n stop = sim.stop,\n restart = sim.restart;\n let stopped = false;\n\n sim.stopped = () => stopped;\n\n sim.restart = () => (stopped = false, restart());\n\n sim.stop = () => (stopped = true, stop());\n\n return setup(sim, _, true).on('end', () => stopped = true);\n}\n\nfunction setup(sim, _, init, pulse) {\n var f = array(_.forces),\n i,\n n,\n p,\n name;\n\n for (i = 0, n = ForceParams.length; i < n; ++i) {\n p = ForceParams[i];\n if (p !== Forces && _.modified(p)) sim[p](_[p]);\n }\n\n for (i = 0, n = f.length; i < n; ++i) {\n name = Forces + i;\n p = init || _.modified(Forces, i) ? getForce(f[i]) : pulse && modified(f[i], pulse) ? sim.force(name) : null;\n if (p) sim.force(name, p);\n }\n\n for (n = sim.numForces || 0; i < n; ++i) {\n sim.force(Forces + i, null); // remove\n }\n\n sim.numForces = f.length;\n return sim;\n}\n\nfunction modified(f, pulse) {\n var k, v;\n\n for (k in f) {\n if (isFunction(v = f[k]) && pulse.modified(accessorFields(v))) return 1;\n }\n\n return 0;\n}\n\nfunction getForce(_) {\n var f, p;\n\n if (!hasOwnProperty(ForceMap, _.force)) {\n error('Unrecognized force: ' + _.force);\n }\n\n f = ForceMap[_.force]();\n\n for (p in _) {\n if (isFunction(f[p])) setForceParam(f[p], _[p], _);\n }\n\n return f;\n}\n\nfunction setForceParam(f, v, _) {\n f(isFunction(v) ? d => v(d, _) : v);\n}\n\nexport { Force as force };\n","export default function(x, y) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n node,\n random,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(y) {\n var strength = constant(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n };\n\n return force;\n}\n","function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n","import {shuffle} from \"../array.js\";\n\nexport default function(circles) {\n var i = 0, n = (circles = shuffle(Array.from(circles))).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","export default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array) {\n var m = array.length,\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","import array from \"../array.js\";\nimport enclose from \"./enclose.js\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packEnclose(circles) {\n if (!(n = (circles = array(circles)).length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packEnclose(circles);\n return circles;\n}\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","import {packEnclose} from \"./siblings.js\";\nimport {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildren(padding, 0.5))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildren(constantZero, 1))\n .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildren(padding, k) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packEnclose(children);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n","import {required} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar preroot = {depth: -1},\n ambiguous = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nexport default function() {\n var id = defaultId,\n parentId = defaultParentId;\n\n function stratify(data) {\n var nodes = Array.from(data),\n n = nodes.length,\n d,\n i,\n root,\n parent,\n node,\n nodeId,\n nodeKey,\n nodeByKey = new Map;\n\n for (i = 0; i < n; ++i) {\n d = nodes[i], node = nodes[i] = new Node(d);\n if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = node.id = nodeId;\n nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n }\n if ((nodeId = parentId(d, i, data)) != null && (nodeId += \"\")) {\n node.parent = nodeId;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (nodeId = node.parent) {\n parent = nodeByKey.get(nodeId);\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n } else {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = required(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = required(x), stratify) : parentId;\n };\n\n return stratify;\n}\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\nimport {phi, squarifyRatio} from \"./squarify.js\";\n\nexport default (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n","import { Transform, isTuple, ingest, tupleid, stableCompare } from 'vega-dataflow';\nimport { inherits, error, array, one, truthy, hasOwnProperty } from 'vega-util';\nimport { hierarchy, pack, partition, stratify, tree, cluster, treemap, treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, treemapResquarify } from 'd3-hierarchy';\n\n// Build lookup table mapping tuple keys to tree node instances\nfunction lookup (tree, key, filter) {\n const map = {};\n tree.each(node => {\n const t = node.data;\n if (filter(t)) map[key(t)] = node;\n });\n tree.lookup = map;\n return tree;\n}\n\n/**\n * Nest tuples into a tree structure, grouped by key values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.keys - The key fields to nest by, in order.\n * @param {boolean} [params.generate=false] - A boolean flag indicating if\n * non-leaf nodes generated by this transform should be included in the\n * output. The default (false) includes only the input data (leaf nodes)\n * in the data stream.\n */\n\nfunction Nest(params) {\n Transform.call(this, null, params);\n}\nNest.Definition = {\n 'type': 'Nest',\n 'metadata': {\n 'treesource': true,\n 'changes': true\n },\n 'params': [{\n 'name': 'keys',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'generate',\n 'type': 'boolean'\n }]\n};\n\nconst children = n => n.values;\n\ninherits(Nest, Transform, {\n transform(_, pulse) {\n if (!pulse.source) {\n error('Nest transform requires an upstream data source.');\n }\n\n var gen = _.generate,\n mod = _.modified(),\n out = pulse.clone(),\n tree = this.value;\n\n if (!tree || mod || pulse.changed()) {\n // collect nodes to remove\n if (tree) {\n tree.each(node => {\n if (node.children && isTuple(node.data)) {\n out.rem.push(node.data);\n }\n });\n } // generate new tree structure\n\n\n this.value = tree = hierarchy({\n values: array(_.keys).reduce((n, k) => {\n n.key(k);\n return n;\n }, nest()).entries(out.source)\n }, children); // collect nodes to add\n\n if (gen) {\n tree.each(node => {\n if (node.children) {\n node = ingest(node.data);\n out.add.push(node);\n out.source.push(node);\n }\n });\n } // build lookup table\n\n\n lookup(tree, tupleid, tupleid);\n }\n\n out.source.root = tree;\n return out;\n }\n\n});\n\nfunction nest() {\n const keys = [],\n nest = {\n entries: array => entries(apply(array, 0), 0),\n key: d => (keys.push(d), nest)\n };\n\n function apply(array, depth) {\n if (depth >= keys.length) {\n return array;\n }\n\n const n = array.length,\n key = keys[depth++],\n valuesByKey = {},\n result = {};\n let i = -1,\n keyValue,\n value,\n values;\n\n while (++i < n) {\n keyValue = key(value = array[i]) + '';\n\n if (values = valuesByKey[keyValue]) {\n values.push(value);\n } else {\n valuesByKey[keyValue] = [value];\n }\n }\n\n for (keyValue in valuesByKey) {\n result[keyValue] = apply(valuesByKey[keyValue], depth);\n }\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n const array = [];\n\n for (const key in map) {\n array.push({\n key,\n values: entries(map[key], depth)\n });\n }\n\n return array;\n }\n\n return nest;\n}\n\n/**\n * Abstract class for tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction HierarchyLayout(params) {\n Transform.call(this, null, params);\n}\n\nconst defaultSeparation = (a, b) => a.parent === b.parent ? 1 : 2;\n\ninherits(HierarchyLayout, Transform, {\n transform(_, pulse) {\n if (!pulse.source || !pulse.source.root) {\n error(this.constructor.name + ' transform requires a backing tree data source.');\n }\n\n const layout = this.layout(_.method),\n fields = this.fields,\n root = pulse.source.root,\n as = _.as || fields;\n if (_.field) root.sum(_.field);else root.count();\n if (_.sort) root.sort(stableCompare(_.sort, d => d.data));\n setParams(layout, this.params, _);\n\n if (layout.separation) {\n layout.separation(_.separation !== false ? defaultSeparation : one);\n }\n\n try {\n this.value = layout(root);\n } catch (err) {\n error(err);\n }\n\n root.each(node => setFields(node, fields, as));\n return pulse.reflow(_.modified()).modifies(as).modifies('leaf');\n }\n\n});\n\nfunction setParams(layout, params, _) {\n for (let p, i = 0, n = params.length; i < n; ++i) {\n p = params[i];\n if (p in _) layout[p](_[p]);\n }\n}\n\nfunction setFields(node, fields, as) {\n const t = node.data,\n n = fields.length - 1;\n\n for (let i = 0; i < n; ++i) {\n t[as[i]] = node[fields[i]];\n }\n\n t[as[n]] = node.children ? node.children.length : 0;\n}\n\nconst Output$3 = ['x', 'y', 'r', 'depth', 'children'];\n/**\n * Packed circle tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\n\nfunction Pack(params) {\n HierarchyLayout.call(this, params);\n}\nPack.Definition = {\n 'type': 'Pack',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'radius',\n 'type': 'field',\n 'default': null\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$3.length,\n 'default': Output$3\n }]\n};\ninherits(Pack, HierarchyLayout, {\n layout: pack,\n params: ['radius', 'size', 'padding'],\n fields: Output$3\n});\n\nconst Output$2 = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n/**\n * Partition tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\n\nfunction Partition(params) {\n HierarchyLayout.call(this, params);\n}\nPartition.Definition = {\n 'type': 'Partition',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'round',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$2.length,\n 'default': Output$2\n }]\n};\ninherits(Partition, HierarchyLayout, {\n layout: partition,\n params: ['size', 'round', 'padding'],\n fields: Output$2\n});\n\n/**\n * Stratify a collection of tuples into a tree structure based on\n * id and parent id fields.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.key - Unique key field for each tuple.\n * @param {function(object): *} params.parentKey - Field with key for parent tuple.\n */\n\nfunction Stratify(params) {\n Transform.call(this, null, params);\n}\nStratify.Definition = {\n 'type': 'Stratify',\n 'metadata': {\n 'treesource': true\n },\n 'params': [{\n 'name': 'key',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'parentKey',\n 'type': 'field',\n 'required': true\n }]\n};\ninherits(Stratify, Transform, {\n transform(_, pulse) {\n if (!pulse.source) {\n error('Stratify transform requires an upstream data source.');\n }\n\n let tree = this.value;\n\n const mod = _.modified(),\n out = pulse.fork(pulse.ALL).materialize(pulse.SOURCE),\n run = !tree || mod || pulse.changed(pulse.ADD_REM) || pulse.modified(_.key.fields) || pulse.modified(_.parentKey.fields); // prevent upstream source pollution\n\n\n out.source = out.source.slice();\n\n if (run) {\n tree = out.source.length ? lookup(stratify().id(_.key).parentId(_.parentKey)(out.source), _.key, truthy) : lookup(stratify()([{}]), _.key, _.key);\n }\n\n out.source.root = this.value = tree;\n return out;\n }\n\n});\n\nconst Layouts = {\n tidy: tree,\n cluster: cluster\n};\nconst Output$1 = ['x', 'y', 'depth', 'children'];\n/**\n * Tree layout. Depending on the method parameter, performs either\n * Reingold-Tilford 'tidy' layout or dendrogram 'cluster' layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction Tree(params) {\n HierarchyLayout.call(this, params);\n}\nTree.Definition = {\n 'type': 'Tree',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'tidy',\n 'values': ['tidy', 'cluster']\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'nodeSize',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'separation',\n 'type': 'boolean',\n 'default': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output$1.length,\n 'default': Output$1\n }]\n};\ninherits(Tree, HierarchyLayout, {\n /**\n * Tree layout generator. Supports both 'tidy' and 'cluster' layouts.\n */\n layout(method) {\n const m = method || 'tidy';\n if (hasOwnProperty(Layouts, m)) return Layouts[m]();else error('Unrecognized Tree layout method: ' + m);\n },\n\n params: ['size', 'nodeSize'],\n fields: Output$1\n});\n\n/**\n * Generate tuples representing links between tree nodes.\n * The resulting tuples will contain 'source' and 'target' fields,\n * which point to parent and child node tuples, respectively.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\n\nfunction TreeLinks(params) {\n Transform.call(this, [], params);\n}\nTreeLinks.Definition = {\n 'type': 'TreeLinks',\n 'metadata': {\n 'tree': true,\n 'generates': true,\n 'changes': true\n },\n 'params': []\n};\ninherits(TreeLinks, Transform, {\n transform(_, pulse) {\n const links = this.value,\n tree = pulse.source && pulse.source.root,\n out = pulse.fork(pulse.NO_SOURCE),\n lut = {};\n if (!tree) error('TreeLinks transform requires a tree data source.');\n\n if (pulse.changed(pulse.ADD_REM)) {\n // remove previous links\n out.rem = links; // build lookup table of valid tuples\n\n pulse.visit(pulse.SOURCE, t => lut[tupleid(t)] = 1); // generate links for all edges incident on valid tuples\n\n tree.each(node => {\n const t = node.data,\n p = node.parent && node.parent.data;\n\n if (p && lut[tupleid(t)] && lut[tupleid(p)]) {\n out.add.push(ingest({\n source: p,\n target: t\n }));\n }\n });\n this.value = out.add;\n } else if (pulse.changed(pulse.MOD)) {\n // build lookup table of modified tuples\n pulse.visit(pulse.MOD, t => lut[tupleid(t)] = 1); // gather links incident on modified tuples\n\n links.forEach(link => {\n if (lut[tupleid(link.source)] || lut[tupleid(link.target)]) {\n out.mod.push(link);\n }\n });\n }\n\n return out;\n }\n\n});\n\nconst Tiles = {\n binary: treemapBinary,\n dice: treemapDice,\n slice: treemapSlice,\n slicedice: treemapSliceDice,\n squarify: treemapSquarify,\n resquarify: treemapResquarify\n};\nconst Output = ['x0', 'y0', 'x1', 'y1', 'depth', 'children'];\n/**\n * Treemap layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size nodes.\n */\n\nfunction Treemap(params) {\n HierarchyLayout.call(this, params);\n}\nTreemap.Definition = {\n 'type': 'Treemap',\n 'metadata': {\n 'tree': true,\n 'modifies': true\n },\n 'params': [{\n 'name': 'field',\n 'type': 'field'\n }, {\n 'name': 'sort',\n 'type': 'compare'\n }, {\n 'name': 'method',\n 'type': 'enum',\n 'default': 'squarify',\n 'values': ['squarify', 'resquarify', 'binary', 'dice', 'slice', 'slicedice']\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingInner',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingOuter',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingTop',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingRight',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingBottom',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'paddingLeft',\n 'type': 'number',\n 'default': 0\n }, {\n 'name': 'ratio',\n 'type': 'number',\n 'default': 1.618033988749895\n }, {\n 'name': 'round',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': Output.length,\n 'default': Output\n }]\n};\ninherits(Treemap, HierarchyLayout, {\n /**\n * Treemap layout generator. Adds 'method' and 'ratio' parameters\n * to configure the underlying tile method.\n */\n layout() {\n const x = treemap();\n\n x.ratio = _ => {\n const t = x.tile();\n if (t.ratio) x.tile(t.ratio(_));\n };\n\n x.method = _ => {\n if (hasOwnProperty(Tiles, _)) x.tile(Tiles[_]);else error('Unrecognized Treemap layout method: ' + _);\n };\n\n return x;\n },\n\n params: ['method', 'ratio', 'size', 'round', 'padding', 'paddingInner', 'paddingOuter', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'],\n fields: Output\n});\n\nexport { Nest as nest, Pack as pack, Partition as partition, Stratify as stratify, Tree as tree, TreeLinks as treelinks, Treemap as treemap };\n","import roundNode from \"./treemap/round.js\";\nimport treemapDice from \"./treemap/dice.js\";\n\nexport default function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n","import dice from \"./dice.js\";\nimport slice from \"./slice.js\";\n\nexport default function(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","import { canvas } from 'vega-canvas';\nimport { rederive, Transform } from 'vega-dataflow';\nimport { Marks, textMetrics } from 'vega-scenegraph';\nimport { inherits, isFunction, error, array } from 'vega-util';\n\nconst ALPHA_MASK = 0xff000000; // alpha value equivalent to opacity 0.0625\n\nconst INSIDE_OPACITY_IN_ALPHA = 0x10000000;\nconst INSIDE_OPACITY = 0.0625;\nfunction baseBitmaps($, data) {\n const bitmap = $.bitmap(); // when there is no base mark but data points are to be avoided\n\n (data || []).forEach(d => bitmap.set($(d.boundary[0]), $(d.boundary[3])));\n return [bitmap, undefined];\n}\nfunction markBitmaps($, avoidMarks, labelInside, isGroupArea) {\n // create canvas\n const width = $.width,\n height = $.height,\n border = labelInside || isGroupArea,\n context = canvas(width, height).getContext('2d'); // render all marks to be avoided into canvas\n\n avoidMarks.forEach(items => draw(context, items, border)); // get canvas buffer, create bitmaps\n\n const buffer = new Uint32Array(context.getImageData(0, 0, width, height).data.buffer),\n layer1 = $.bitmap(),\n layer2 = border && $.bitmap(); // populate bitmap layers\n\n let x, y, u, v, alpha;\n\n for (y = 0; y < height; ++y) {\n for (x = 0; x < width; ++x) {\n alpha = buffer[y * width + x] & ALPHA_MASK;\n\n if (alpha) {\n u = $(x);\n v = $(y);\n if (!isGroupArea) layer1.set(u, v); // update interior bitmap\n\n if (border && alpha ^ INSIDE_OPACITY_IN_ALPHA) layer2.set(u, v); // update border bitmap\n }\n }\n }\n\n return [layer1, layer2];\n}\n\nfunction draw(context, items, interior) {\n if (!items.length) return;\n const type = items[0].mark.marktype;\n\n if (type === 'group') {\n items.forEach(group => {\n group.items.forEach(mark => draw(context, mark.items, interior));\n });\n } else {\n Marks[type].draw(context, {\n items: interior ? items.map(prepare) : items\n });\n }\n}\n/**\n * Prepare item before drawing into canvas (setting stroke and opacity)\n * @param {object} source item to be prepared\n * @returns prepared item\n */\n\n\nfunction prepare(source) {\n const item = rederive(source, {});\n\n if (item.stroke) {\n item.strokeOpacity = 1;\n }\n\n if (item.fill) {\n item.fillOpacity = INSIDE_OPACITY;\n item.stroke = '#000';\n item.strokeOpacity = 1;\n item.strokeWidth = 2;\n }\n\n return item;\n}\n\nconst DIV = 5,\n // bit shift from x, y index to bit vector array index\nMOD = 31,\n // bit mask for index lookup within a bit vector\nSIZE = 32,\n // individual bit vector size\nRIGHT0 = new Uint32Array(SIZE + 1),\n // left-anchored bit vectors, full -> 0\nRIGHT1 = new Uint32Array(SIZE + 1); // right-anchored bit vectors, 0 -> full\n\nRIGHT1[0] = 0;\nRIGHT0[0] = ~RIGHT1[0];\n\nfor (let i = 1; i <= SIZE; ++i) {\n RIGHT1[i] = RIGHT1[i - 1] << 1 | 1;\n RIGHT0[i] = ~RIGHT1[i];\n}\n\nfunction Bitmap (w, h) {\n const array = new Uint32Array(~~((w * h + SIZE) / SIZE));\n\n function _set(index, mask) {\n array[index] |= mask;\n }\n\n function _clear(index, mask) {\n array[index] &= mask;\n }\n\n return {\n array: array,\n get: (x, y) => {\n const index = y * w + x;\n return array[index >>> DIV] & 1 << (index & MOD);\n },\n set: (x, y) => {\n const index = y * w + x;\n\n _set(index >>> DIV, 1 << (index & MOD));\n },\n clear: (x, y) => {\n const index = y * w + x;\n\n _clear(index >>> DIV, ~(1 << (index & MOD)));\n },\n getRange: (x, y, x2, y2) => {\n let r = y2,\n start,\n end,\n indexStart,\n indexEnd;\n\n for (; r >= y; --r) {\n start = r * w + x;\n end = r * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n\n if (indexStart === indexEnd) {\n if (array[indexStart] & RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]) {\n return true;\n }\n } else {\n if (array[indexStart] & RIGHT0[start & MOD]) return true;\n if (array[indexEnd] & RIGHT1[(end & MOD) + 1]) return true;\n\n for (let i = indexStart + 1; i < indexEnd; ++i) {\n if (array[i]) return true;\n }\n }\n }\n\n return false;\n },\n setRange: (x, y, x2, y2) => {\n let start, end, indexStart, indexEnd, i;\n\n for (; y <= y2; ++y) {\n start = y * w + x;\n end = y * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n\n if (indexStart === indexEnd) {\n _set(indexStart, RIGHT0[start & MOD] & RIGHT1[(end & MOD) + 1]);\n } else {\n _set(indexStart, RIGHT0[start & MOD]);\n\n _set(indexEnd, RIGHT1[(end & MOD) + 1]);\n\n for (i = indexStart + 1; i < indexEnd; ++i) _set(i, 0xffffffff);\n }\n }\n },\n clearRange: (x, y, x2, y2) => {\n let start, end, indexStart, indexEnd, i;\n\n for (; y <= y2; ++y) {\n start = y * w + x;\n end = y * w + x2;\n indexStart = start >>> DIV;\n indexEnd = end >>> DIV;\n\n if (indexStart === indexEnd) {\n _clear(indexStart, RIGHT1[start & MOD] | RIGHT0[(end & MOD) + 1]);\n } else {\n _clear(indexStart, RIGHT1[start & MOD]);\n\n _clear(indexEnd, RIGHT0[(end & MOD) + 1]);\n\n for (i = indexStart + 1; i < indexEnd; ++i) _clear(i, 0);\n }\n }\n },\n outOfBounds: (x, y, x2, y2) => x < 0 || y < 0 || y2 >= h || x2 >= w\n };\n}\n\nfunction scaler (width, height, padding) {\n const ratio = Math.max(1, Math.sqrt(width * height / 1e6)),\n w = ~~((width + 2 * padding + ratio) / ratio),\n h = ~~((height + 2 * padding + ratio) / ratio),\n scale = _ => ~~((_ + padding) / ratio);\n\n scale.invert = _ => _ * ratio - padding;\n\n scale.bitmap = () => Bitmap(w, h);\n\n scale.ratio = ratio;\n scale.padding = padding;\n scale.width = width;\n scale.height = height;\n return scale;\n}\n\nfunction placeAreaLabelNaive ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height; // try to place a label within an input area mark\n\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text); // label height\n\n let maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n areaWidth; // for each area sample point\n\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2;\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n\n if (areaWidth >= maxAreaWidth) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n }\n }\n\n x = textWidth / 2;\n y = textHeight / 2;\n x1 = d.x - x;\n x2 = d.x + x;\n y1 = d.y - y;\n y2 = d.y + y;\n d.align = 'center';\n\n if (x1 < 0 && x2 <= width) {\n d.align = 'left';\n } else if (0 <= x1 && width < x2) {\n d.align = 'right';\n }\n\n d.baseline = 'middle';\n\n if (y1 < 0 && y2 <= height) {\n d.baseline = 'top';\n } else if (0 <= y1 && height < y2) {\n d.baseline = 'bottom';\n }\n\n return true;\n };\n}\n\nfunction outOfBounds(x, y, textWidth, textHeight, width, height) {\n let r = textWidth / 2;\n return x - r < 0 || x + r > width || y - (r = textHeight / 2) < 0 || y + r > height;\n}\nfunction collision($, x, y, textHeight, textWidth, h, bm0, bm1) {\n const w = textWidth * h / (textHeight * 2),\n x1 = $(x - w),\n x2 = $(x + w),\n y1 = $(y - (h = h / 2)),\n y2 = $(y + h);\n return bm0.outOfBounds(x1, y1, x2, y2) || bm0.getRange(x1, y1, x2, y2) || bm1 && bm1.getRange(x1, y1, x2, y2);\n}\n\nfunction placeAreaLabelReducedSearch ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n // where labels have been placed\n bm1 = bitmaps[1]; // area outlines\n\n function tryLabel(_x, _y, maxSize, textWidth, textHeight) {\n const x = $.invert(_x),\n y = $.invert(_y);\n let lo = maxSize,\n hi = height,\n mid;\n\n if (!outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, lo, bm0, bm1) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n // if the label fits at the current sample point,\n // perform binary search to find the largest font size that fits\n while (hi - lo >= 1) {\n mid = (lo + hi) / 2;\n\n if (collision($, x, y, textHeight, textWidth, mid, bm0, bm1)) {\n hi = mid;\n } else {\n lo = mid;\n }\n } // place label if current lower bound exceeds prior max font size\n\n\n if (lo > maxSize) {\n return [x, y, lo, true];\n }\n }\n } // try to place a label within an input area mark\n\n\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text); // label height\n\n let maxSize = avoidBaseMark ? textHeight : 0,\n labelPlaced = false,\n labelPlaced2 = false,\n maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n _x,\n _y,\n _x1,\n _xMid,\n _x2,\n _y1,\n _yMid,\n _y2,\n areaWidth,\n result,\n swapTmp; // for each area sample point\n\n\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2;\n\n if (x1 > x2) {\n swapTmp = x1;\n x1 = x2;\n x2 = swapTmp;\n }\n\n if (y1 > y2) {\n swapTmp = y1;\n y1 = y2;\n y2 = swapTmp;\n }\n\n _x1 = $(x1);\n _x2 = $(x2);\n _xMid = ~~((_x1 + _x2) / 2);\n _y1 = $(y1);\n _y2 = $(y2);\n _yMid = ~~((_y1 + _y2) / 2); // search along the line from mid point between the 2 border to lower border\n\n for (_x = _xMid; _x >= _x1; --_x) {\n for (_y = _yMid; _y >= _y1; --_y) {\n result = tryLabel(_x, _y, maxSize, textWidth, textHeight);\n\n if (result) {\n [d.x, d.y, maxSize, labelPlaced] = result;\n }\n }\n } // search along the line from mid point between the 2 border to upper border\n\n\n for (_x = _xMid; _x <= _x2; ++_x) {\n for (_y = _yMid; _y <= _y2; ++_y) {\n result = tryLabel(_x, _y, maxSize, textWidth, textHeight);\n\n if (result) {\n [d.x, d.y, maxSize, labelPlaced] = result;\n }\n }\n } // place label at slice center if not placed through other means\n // and if we're not avoiding overlap with other areas\n\n\n if (!labelPlaced && !avoidBaseMark) {\n // one span is zero, hence we can add\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2; // place label if it fits and improves the max area width\n\n if (areaWidth >= maxAreaWidth && !outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n labelPlaced2 = true;\n }\n }\n } // record current label placement information, update label bitmap\n\n\n if (labelPlaced || labelPlaced2) {\n x = textWidth / 2;\n y = textHeight / 2;\n bm0.setRange($(d.x - x), $(d.y - y), $(d.x + x), $(d.y + y));\n d.align = 'center';\n d.baseline = 'middle';\n return true;\n } else {\n return false;\n }\n };\n}\n\nconst X_DIR = [-1, -1, 1, 1];\nconst Y_DIR = [-1, 1, -1, 1];\nfunction placeAreaLabelFloodFill ($, bitmaps, avoidBaseMark, markIndex) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n // where labels have been placed\n bm1 = bitmaps[1],\n // area outlines\n bm2 = $.bitmap(); // flood-fill visitations\n // try to place a label within an input area mark\n\n return function (d) {\n const items = d.datum.datum.items[markIndex].items,\n // area points\n n = items.length,\n // number of points\n textHeight = d.datum.fontSize,\n // label width\n textWidth = textMetrics.width(d.datum, d.datum.text),\n // label height\n stack = []; // flood fill stack\n\n let maxSize = avoidBaseMark ? textHeight : 0,\n labelPlaced = false,\n labelPlaced2 = false,\n maxAreaWidth = 0,\n x1,\n x2,\n y1,\n y2,\n x,\n y,\n _x,\n _y,\n lo,\n hi,\n mid,\n areaWidth; // for each area sample point\n\n\n for (let i = 0; i < n; ++i) {\n x1 = items[i].x;\n y1 = items[i].y;\n x2 = items[i].x2 === undefined ? x1 : items[i].x2;\n y2 = items[i].y2 === undefined ? y1 : items[i].y2; // add scaled center point to stack\n\n stack.push([$((x1 + x2) / 2), $((y1 + y2) / 2)]); // perform flood fill, visit points\n\n while (stack.length) {\n [_x, _y] = stack.pop(); // exit if point already marked\n\n if (bm0.get(_x, _y) || bm1.get(_x, _y) || bm2.get(_x, _y)) continue; // mark point in flood fill bitmap\n // add search points for all (in bound) directions\n\n bm2.set(_x, _y);\n\n for (let j = 0; j < 4; ++j) {\n x = _x + X_DIR[j];\n y = _y + Y_DIR[j];\n if (!bm2.outOfBounds(x, y, x, y)) stack.push([x, y]);\n } // unscale point back to x, y space\n\n\n x = $.invert(_x);\n y = $.invert(_y);\n lo = maxSize;\n hi = height; // TODO: make this bound smaller\n\n if (!outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, lo, bm0, bm1) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n // if the label fits at the current sample point,\n // perform binary search to find the largest font size that fits\n while (hi - lo >= 1) {\n mid = (lo + hi) / 2;\n\n if (collision($, x, y, textHeight, textWidth, mid, bm0, bm1)) {\n hi = mid;\n } else {\n lo = mid;\n }\n } // place label if current lower bound exceeds prior max font size\n\n\n if (lo > maxSize) {\n d.x = x;\n d.y = y;\n maxSize = lo;\n labelPlaced = true;\n }\n }\n } // place label at slice center if not placed through other means\n // and if we're not avoiding overlap with other areas\n\n\n if (!labelPlaced && !avoidBaseMark) {\n // one span is zero, hence we can add\n areaWidth = Math.abs(x2 - x1 + y2 - y1);\n x = (x1 + x2) / 2;\n y = (y1 + y2) / 2; // place label if it fits and improves the max area width\n\n if (areaWidth >= maxAreaWidth && !outOfBounds(x, y, textWidth, textHeight, width, height) && !collision($, x, y, textHeight, textWidth, textHeight, bm0, null)) {\n maxAreaWidth = areaWidth;\n d.x = x;\n d.y = y;\n labelPlaced2 = true;\n }\n }\n } // record current label placement information, update label bitmap\n\n\n if (labelPlaced || labelPlaced2) {\n x = textWidth / 2;\n y = textHeight / 2;\n bm0.setRange($(d.x - x), $(d.y - y), $(d.x + x), $(d.y + y));\n d.align = 'center';\n d.baseline = 'middle';\n return true;\n } else {\n return false;\n }\n };\n}\n\nconst Aligns = ['right', 'center', 'left'],\n Baselines = ['bottom', 'middle', 'top'];\nfunction placeMarkLabel ($, bitmaps, anchors, offsets) {\n const width = $.width,\n height = $.height,\n bm0 = bitmaps[0],\n bm1 = bitmaps[1],\n n = offsets.length;\n return function (d) {\n const boundary = d.boundary,\n textHeight = d.datum.fontSize; // can not be placed if the mark is not visible in the graph bound\n\n if (boundary[2] < 0 || boundary[5] < 0 || boundary[0] > width || boundary[3] > height) {\n return false;\n }\n\n let textWidth = 0,\n dx,\n dy,\n isInside,\n sizeFactor,\n insideFactor,\n x1,\n x2,\n y1,\n y2,\n xc,\n yc,\n _x1,\n _x2,\n _y1,\n _y2; // for each anchor and offset\n\n\n for (let i = 0; i < n; ++i) {\n dx = (anchors[i] & 0x3) - 1;\n dy = (anchors[i] >>> 0x2 & 0x3) - 1;\n isInside = dx === 0 && dy === 0 || offsets[i] < 0;\n sizeFactor = dx && dy ? Math.SQRT1_2 : 1;\n insideFactor = offsets[i] < 0 ? -1 : 1;\n x1 = boundary[1 + dx] + offsets[i] * dx * sizeFactor;\n yc = boundary[4 + dy] + insideFactor * textHeight * dy / 2 + offsets[i] * dy * sizeFactor;\n y1 = yc - textHeight / 2;\n y2 = yc + textHeight / 2;\n _x1 = $(x1);\n _y1 = $(y1);\n _y2 = $(y2);\n\n if (!textWidth) {\n // to avoid finding width of text label,\n if (!test(_x1, _x1, _y1, _y2, bm0, bm1, x1, x1, y1, y2, boundary, isInside)) {\n // skip this anchor/offset option if we fail to place a label with 1px width\n continue;\n } else {\n // Otherwise, find the label width\n textWidth = textMetrics.width(d.datum, d.datum.text);\n }\n }\n\n xc = x1 + insideFactor * textWidth * dx / 2;\n x1 = xc - textWidth / 2;\n x2 = xc + textWidth / 2;\n _x1 = $(x1);\n _x2 = $(x2);\n\n if (test(_x1, _x2, _y1, _y2, bm0, bm1, x1, x2, y1, y2, boundary, isInside)) {\n // place label if the position is placeable\n d.x = !dx ? xc : dx * insideFactor < 0 ? x2 : x1;\n d.y = !dy ? yc : dy * insideFactor < 0 ? y2 : y1;\n d.align = Aligns[dx * insideFactor + 1];\n d.baseline = Baselines[dy * insideFactor + 1];\n bm0.setRange(_x1, _y1, _x2, _y2);\n return true;\n }\n }\n\n return false;\n };\n} // Test if a label with the given dimensions can be added without overlap\n\nfunction test(_x1, _x2, _y1, _y2, bm0, bm1, x1, x2, y1, y2, boundary, isInside) {\n return !(bm0.outOfBounds(_x1, _y1, _x2, _y2) || (isInside && bm1 ? bm1.getRange(_x1, _y1, _x2, _y2) || !isInMarkBound(x1, y1, x2, y2, boundary) : bm0.getRange(_x1, _y1, _x2, _y2)));\n}\n\nfunction isInMarkBound(x1, y1, x2, y2, boundary) {\n return boundary[0] <= x1 && x2 <= boundary[2] && boundary[3] <= y1 && y2 <= boundary[5];\n}\n\nconst TOP = 0x0,\n MIDDLE = 0x4,\n BOTTOM = 0x8,\n LEFT = 0x0,\n CENTER = 0x1,\n RIGHT = 0x2; // Mapping from text anchor to number representation\n\nconst anchorCode = {\n 'top-left': TOP + LEFT,\n 'top': TOP + CENTER,\n 'top-right': TOP + RIGHT,\n 'left': MIDDLE + LEFT,\n 'middle': MIDDLE + CENTER,\n 'right': MIDDLE + RIGHT,\n 'bottom-left': BOTTOM + LEFT,\n 'bottom': BOTTOM + CENTER,\n 'bottom-right': BOTTOM + RIGHT\n};\nconst placeAreaLabel = {\n 'naive': placeAreaLabelNaive,\n 'reduced-search': placeAreaLabelReducedSearch,\n 'floodfill': placeAreaLabelFloodFill\n};\nfunction labelLayout (texts, size, compare, offset, anchor, avoidMarks, avoidBaseMark, lineAnchor, markIndex, padding, method) {\n // early exit for empty data\n if (!texts.length) return texts;\n const positions = Math.max(offset.length, anchor.length),\n offsets = getOffsets(offset, positions),\n anchors = getAnchors(anchor, positions),\n marktype = markType(texts[0].datum),\n grouptype = marktype === 'group' && texts[0].datum.items[markIndex].marktype,\n isGroupArea = grouptype === 'area',\n boundary = markBoundary(marktype, grouptype, lineAnchor, markIndex),\n $ = scaler(size[0], size[1], padding),\n isNaiveGroupArea = isGroupArea && method === 'naive'; // prepare text mark data for placing\n\n const data = texts.map(d => ({\n datum: d,\n opacity: 0,\n x: undefined,\n y: undefined,\n align: undefined,\n baseline: undefined,\n boundary: boundary(d)\n }));\n let bitmaps;\n\n if (!isNaiveGroupArea) {\n // sort labels in priority order, if comparator is provided\n if (compare) {\n data.sort((a, b) => compare(a.datum, b.datum));\n } // flag indicating if label can be placed inside its base mark\n\n\n let labelInside = false;\n\n for (let i = 0; i < anchors.length && !labelInside; ++i) {\n // label inside if anchor is at center\n // label inside if offset to be inside the mark bound\n labelInside = anchors[i] === 0x5 || offsets[i] < 0;\n } // extract data information from base mark when base mark is to be avoided\n // base mark is implicitly avoided if it is a group area\n\n\n if (marktype && (avoidBaseMark || isGroupArea)) {\n avoidMarks = [texts.map(d => d.datum)].concat(avoidMarks);\n } // generate bitmaps for layout calculation\n\n\n bitmaps = avoidMarks.length ? markBitmaps($, avoidMarks, labelInside, isGroupArea) : baseBitmaps($, avoidBaseMark && data);\n } // generate label placement function\n\n\n const place = isGroupArea ? placeAreaLabel[method]($, bitmaps, avoidBaseMark, markIndex) : placeMarkLabel($, bitmaps, anchors, offsets); // place all labels\n\n data.forEach(d => d.opacity = +place(d));\n return data;\n}\n\nfunction getOffsets(_, count) {\n const offsets = new Float64Array(count),\n n = _.length;\n\n for (let i = 0; i < n; ++i) offsets[i] = _[i] || 0;\n\n for (let i = n; i < count; ++i) offsets[i] = offsets[n - 1];\n\n return offsets;\n}\n\nfunction getAnchors(_, count) {\n const anchors = new Int8Array(count),\n n = _.length;\n\n for (let i = 0; i < n; ++i) anchors[i] |= anchorCode[_[i]];\n\n for (let i = n; i < count; ++i) anchors[i] = anchors[n - 1];\n\n return anchors;\n}\n\nfunction markType(item) {\n return item && item.mark && item.mark.marktype;\n}\n/**\n * Factory function for function for getting base mark boundary, depending\n * on mark and group type. When mark type is undefined, line or area: boundary\n * is the coordinate of each data point. When base mark is grouped line,\n * boundary is either at the beginning or end of the line depending on the\n * value of lineAnchor. Otherwise, use bounds of base mark.\n */\n\n\nfunction markBoundary(marktype, grouptype, lineAnchor, markIndex) {\n const xy = d => [d.x, d.x, d.x, d.y, d.y, d.y];\n\n if (!marktype) {\n return xy; // no reactive geometry\n } else if (marktype === 'line' || marktype === 'area') {\n return d => xy(d.datum);\n } else if (grouptype === 'line') {\n return d => {\n const items = d.datum.items[markIndex].items;\n return xy(items.length ? items[lineAnchor === 'start' ? 0 : items.length - 1] : {\n x: NaN,\n y: NaN\n });\n };\n } else {\n return d => {\n const b = d.datum.bounds;\n return [b.x1, (b.x1 + b.x2) / 2, b.x2, b.y1, (b.y1 + b.y2) / 2, b.y2];\n };\n }\n}\n\nconst Output = ['x', 'y', 'opacity', 'align', 'baseline'];\nconst Anchors = ['top-left', 'left', 'bottom-left', 'top', 'bottom', 'top-right', 'right', 'bottom-right'];\n/**\n * Compute text label layout to annotate marks.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The size of the layout, provided as a [width, height] array.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting label data in priority order.\n * @param {Array} [params.anchor] - Label anchor points relative to the base mark bounding box.\n * The available options are 'top-left', 'left', 'bottom-left', 'top',\n * 'bottom', 'top-right', 'right', 'bottom-right', 'middle'.\n * @param {Array} [params.offset] - Label offsets (in pixels) from the base mark bounding box.\n * This parameter is parallel to the list of anchor points.\n * @param {number} [params.padding=0] - The amount (in pixels) that a label may exceed the layout size.\n * @param {string} [params.lineAnchor='end'] - For group line mark labels only, indicates the anchor\n * position for labels. One of 'start' or 'end'.\n * @param {string} [params.markIndex=0] - For group mark labels only, an index indicating\n * which mark within the group should be labeled.\n * @param {Array} [params.avoidMarks] - A list of additional mark names for which the label\n * layout should avoid overlap.\n * @param {boolean} [params.avoidBaseMark=true] - Boolean flag indicating if labels should avoid\n * overlap with the underlying base mark being labeled.\n * @param {string} [params.method='naive'] - For area make labels only, a method for\n * place labels. One of 'naive', 'reduced-search', or 'floodfill'.\n * @param {Array} [params.as] - The output fields written by the transform.\n * The default is ['x', 'y', 'opacity', 'align', 'baseline'].\n */\n\nfunction Label(params) {\n Transform.call(this, null, params);\n}\nLabel.Definition = {\n type: 'Label',\n metadata: {\n modifies: true\n },\n params: [{\n name: 'size',\n type: 'number',\n array: true,\n length: 2,\n required: true\n }, {\n name: 'sort',\n type: 'compare'\n }, {\n name: 'anchor',\n type: 'string',\n array: true,\n default: Anchors\n }, {\n name: 'offset',\n type: 'number',\n array: true,\n default: [1]\n }, {\n name: 'padding',\n type: 'number',\n default: 0\n }, {\n name: 'lineAnchor',\n type: 'string',\n values: ['start', 'end'],\n default: 'end'\n }, {\n name: 'markIndex',\n type: 'number',\n default: 0\n }, {\n name: 'avoidBaseMark',\n type: 'boolean',\n default: true\n }, {\n name: 'avoidMarks',\n type: 'data',\n array: true\n }, {\n name: 'method',\n type: 'string',\n default: 'naive'\n }, {\n name: 'as',\n type: 'string',\n array: true,\n length: Output.length,\n default: Output\n }]\n};\ninherits(Label, Transform, {\n transform(_, pulse) {\n function modp(param) {\n const p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n\n const mod = _.modified();\n\n if (!(mod || pulse.changed(pulse.ADD_REM) || modp('sort'))) return;\n\n if (!_.size || _.size.length !== 2) {\n error('Size parameter should be specified as a [width, height] array.');\n }\n\n const as = _.as || Output; // run label layout\n\n labelLayout(pulse.materialize(pulse.SOURCE).source || [], _.size, _.sort, array(_.offset == null ? 1 : _.offset), array(_.anchor || Anchors), _.avoidMarks || [], _.avoidBaseMark !== false, _.lineAnchor || 'end', _.markIndex || 0, _.padding || 0, _.method || 'naive').forEach(l => {\n // write layout results to data stream\n const t = l.datum;\n t[as[0]] = l.x;\n t[as[1]] = l.y;\n t[as[2]] = l.opacity;\n t[as[3]] = l.align;\n t[as[4]] = l.baseline;\n });\n return pulse.reflow(mod).modifies(as);\n }\n\n});\n\nexport { Label as label };\n","import { regressionLoess, sampleCurve, regressionLinear, regressionLog, regressionExp, regressionPow, regressionQuad, regressionPoly } from 'vega-statistics';\nimport { Transform, ingest } from 'vega-dataflow';\nimport { inherits, accessorName, hasOwnProperty, error, extent } from 'vega-util';\n\nfunction partition (data, groupby) {\n var groups = [],\n get = function (f) {\n return f(t);\n },\n map,\n i,\n n,\n t,\n k,\n g; // partition data points into stack groups\n\n\n if (groupby == null) {\n groups.push(data);\n } else {\n for (map = {}, i = 0, n = data.length; i < n; ++i) {\n t = data[i];\n k = groupby.map(get);\n g = map[k];\n\n if (!g) {\n map[k] = g = [];\n g.dims = k;\n groups.push(g);\n }\n\n g.push(t);\n }\n }\n\n return groups;\n}\n\n/**\n * Compute locally-weighted regression fits for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.x - An accessor for the predictor data field.\n * @param {function(object): *} params.y - An accessor for the predicted data field.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {number} [params.bandwidth=0.3] - The loess bandwidth.\n */\n\nfunction Loess(params) {\n Transform.call(this, null, params);\n}\nLoess.Definition = {\n 'type': 'Loess',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'bandwidth',\n 'type': 'number',\n 'default': 0.3\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Loess, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n m = names.length,\n as = _.as || [accessorName(_.x), accessorName(_.y)],\n values = [];\n groups.forEach(g => {\n regressionLoess(g, _.x, _.y, _.bandwidth || 0.3).forEach(p => {\n const t = {};\n\n for (let i = 0; i < m; ++i) {\n t[names[i]] = g.dims[i];\n }\n\n t[as[0]] = p[0];\n t[as[1]] = p[1];\n values.push(ingest(t));\n });\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n\n return out;\n }\n\n});\n\nconst Methods = {\n linear: regressionLinear,\n log: regressionLog,\n exp: regressionExp,\n pow: regressionPow,\n quad: regressionQuad,\n poly: regressionPoly\n};\n\nconst degreesOfFreedom = (method, order) => method === 'poly' ? order : method === 'quad' ? 2 : 1;\n/**\n * Compute regression fits for one or more data groups.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.x - An accessor for the predictor data field.\n * @param {function(object): *} params.y - An accessor for the predicted data field.\n * @param {string} [params.method='linear'] - The regression method to apply.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {Array} [params.extent] - The domain extent over which to plot the regression line.\n * @param {number} [params.order=3] - The polynomial order. Only applies to the 'poly' method.\n */\n\n\nfunction Regression(params) {\n Transform.call(this, null, params);\n}\nRegression.Definition = {\n 'type': 'Regression',\n 'metadata': {\n 'generates': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'groupby',\n 'type': 'field',\n 'array': true\n }, {\n 'name': 'method',\n 'type': 'string',\n 'default': 'linear',\n 'values': Object.keys(Methods)\n }, {\n 'name': 'order',\n 'type': 'number',\n 'default': 3\n }, {\n 'name': 'extent',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'params',\n 'type': 'boolean',\n 'default': false\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true\n }]\n};\ninherits(Regression, Transform, {\n transform(_, pulse) {\n const out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby),\n names = (_.groupby || []).map(accessorName),\n method = _.method || 'linear',\n order = _.order || 3,\n dof = degreesOfFreedom(method, order),\n as = _.as || [accessorName(_.x), accessorName(_.y)],\n fit = Methods[method],\n values = [];\n let domain = _.extent;\n\n if (!hasOwnProperty(Methods, method)) {\n error('Invalid regression method: ' + method);\n }\n\n if (domain != null) {\n if (method === 'log' && domain[0] <= 0) {\n pulse.dataflow.warn('Ignoring extent with values <= 0 for log regression.');\n domain = null;\n }\n }\n\n groups.forEach(g => {\n const n = g.length;\n\n if (n <= dof) {\n pulse.dataflow.warn('Skipping regression with more parameters than data points.');\n return;\n }\n\n const model = fit(g, _.x, _.y, order);\n\n if (_.params) {\n // if parameter vectors requested return those\n values.push(ingest({\n keys: g.dims,\n coef: model.coef,\n rSquared: model.rSquared\n }));\n return;\n }\n\n const dom = domain || extent(g, _.x),\n add = p => {\n const t = {};\n\n for (let i = 0; i < names.length; ++i) {\n t[names[i]] = g.dims[i];\n }\n\n t[as[0]] = p[0];\n t[as[1]] = p[1];\n values.push(ingest(t));\n };\n\n if (method === 'linear') {\n // for linear regression we only need the end points\n dom.forEach(x => add([x, model.predict(x)]));\n } else {\n // otherwise return trend line sample points\n sampleCurve(model.predict, dom, 25, 200).forEach(add);\n }\n });\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n\n return out;\n }\n\n});\n\nexport { Loess as loess, Regression as regression };\n","\nconst EPSILON = Math.pow(2, -52);\nconst EDGE_STACK = new Uint32Array(512);\n\nexport default class Delaunator {\n\n static from(points, getX = defaultGetX, getY = defaultGetY) {\n const n = points.length;\n const coords = new Float64Array(n * 2);\n\n for (let i = 0; i < n; i++) {\n const p = points[i];\n coords[2 * i] = getX(p);\n coords[2 * i + 1] = getY(p);\n }\n\n return new Delaunator(coords);\n }\n\n constructor(coords) {\n const n = coords.length >> 1;\n if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.');\n\n this.coords = coords;\n\n // arrays that will store the triangulation graph\n const maxTriangles = Math.max(2 * n - 5, 0);\n this._triangles = new Uint32Array(maxTriangles * 3);\n this._halfedges = new Int32Array(maxTriangles * 3);\n\n // temporary arrays for tracking the edges of the advancing convex hull\n this._hashSize = Math.ceil(Math.sqrt(n));\n this._hullPrev = new Uint32Array(n); // edge to prev edge\n this._hullNext = new Uint32Array(n); // edge to next edge\n this._hullTri = new Uint32Array(n); // edge to adjacent triangle\n this._hullHash = new Int32Array(this._hashSize).fill(-1); // angular edge hash\n\n // temporary arrays for sorting points\n this._ids = new Uint32Array(n);\n this._dists = new Float64Array(n);\n\n this.update();\n }\n\n update() {\n const {coords, _hullPrev: hullPrev, _hullNext: hullNext, _hullTri: hullTri, _hullHash: hullHash} = this;\n const n = coords.length >> 1;\n\n // populate an array of point indices; calculate input data bbox\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n for (let i = 0; i < n; i++) {\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n this._ids[i] = i;\n }\n const cx = (minX + maxX) / 2;\n const cy = (minY + maxY) / 2;\n\n let minDist = Infinity;\n let i0, i1, i2;\n\n // pick a seed point close to the center\n for (let i = 0; i < n; i++) {\n const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]);\n if (d < minDist) {\n i0 = i;\n minDist = d;\n }\n }\n const i0x = coords[2 * i0];\n const i0y = coords[2 * i0 + 1];\n\n minDist = Infinity;\n\n // find the point closest to the seed\n for (let i = 0; i < n; i++) {\n if (i === i0) continue;\n const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]);\n if (d < minDist && d > 0) {\n i1 = i;\n minDist = d;\n }\n }\n let i1x = coords[2 * i1];\n let i1y = coords[2 * i1 + 1];\n\n let minRadius = Infinity;\n\n // find the third point which forms the smallest circumcircle with the first two\n for (let i = 0; i < n; i++) {\n if (i === i0 || i === i1) continue;\n const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]);\n if (r < minRadius) {\n i2 = i;\n minRadius = r;\n }\n }\n let i2x = coords[2 * i2];\n let i2y = coords[2 * i2 + 1];\n\n if (minRadius === Infinity) {\n // order collinear points by dx (or dy if all x are identical)\n // and return the list as a hull\n for (let i = 0; i < n; i++) {\n this._dists[i] = (coords[2 * i] - coords[0]) || (coords[2 * i + 1] - coords[1]);\n }\n quicksort(this._ids, this._dists, 0, n - 1);\n const hull = new Uint32Array(n);\n let j = 0;\n for (let i = 0, d0 = -Infinity; i < n; i++) {\n const id = this._ids[i];\n if (this._dists[id] > d0) {\n hull[j++] = id;\n d0 = this._dists[id];\n }\n }\n this.hull = hull.subarray(0, j);\n this.triangles = new Uint32Array(0);\n this.halfedges = new Uint32Array(0);\n return;\n }\n\n // swap the order of the seed points for counter-clockwise orientation\n if (orient(i0x, i0y, i1x, i1y, i2x, i2y)) {\n const i = i1;\n const x = i1x;\n const y = i1y;\n i1 = i2;\n i1x = i2x;\n i1y = i2y;\n i2 = i;\n i2x = x;\n i2y = y;\n }\n\n const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y);\n this._cx = center.x;\n this._cy = center.y;\n\n for (let i = 0; i < n; i++) {\n this._dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y);\n }\n\n // sort the points by distance from the seed triangle circumcenter\n quicksort(this._ids, this._dists, 0, n - 1);\n\n // set up the seed triangle as the starting hull\n this._hullStart = i0;\n let hullSize = 3;\n\n hullNext[i0] = hullPrev[i2] = i1;\n hullNext[i1] = hullPrev[i0] = i2;\n hullNext[i2] = hullPrev[i1] = i0;\n\n hullTri[i0] = 0;\n hullTri[i1] = 1;\n hullTri[i2] = 2;\n\n hullHash.fill(-1);\n hullHash[this._hashKey(i0x, i0y)] = i0;\n hullHash[this._hashKey(i1x, i1y)] = i1;\n hullHash[this._hashKey(i2x, i2y)] = i2;\n\n this.trianglesLen = 0;\n this._addTriangle(i0, i1, i2, -1, -1, -1);\n\n for (let k = 0, xp, yp; k < this._ids.length; k++) {\n const i = this._ids[k];\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n\n // skip near-duplicate points\n if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue;\n xp = x;\n yp = y;\n\n // skip seed triangle points\n if (i === i0 || i === i1 || i === i2) continue;\n\n // find a visible edge on the convex hull using edge hash\n let start = 0;\n for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) {\n start = hullHash[(key + j) % this._hashSize];\n if (start !== -1 && start !== hullNext[start]) break;\n }\n\n start = hullPrev[start];\n let e = start, q;\n while (q = hullNext[e], !orient(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1])) {\n e = q;\n if (e === start) {\n e = -1;\n break;\n }\n }\n if (e === -1) continue; // likely a near-duplicate point; skip it\n\n // add the first triangle from the point\n let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]);\n\n // recursively flip triangles from the point until they satisfy the Delaunay condition\n hullTri[i] = this._legalize(t + 2);\n hullTri[e] = t; // keep track of boundary triangles on the hull\n hullSize++;\n\n // walk forward through the hull, adding more triangles and flipping recursively\n let n = hullNext[e];\n while (q = hullNext[n], orient(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1])) {\n t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]);\n hullTri[i] = this._legalize(t + 2);\n hullNext[n] = n; // mark as removed\n hullSize--;\n n = q;\n }\n\n // walk backward from the other side, adding more triangles and flipping\n if (e === start) {\n while (q = hullPrev[e], orient(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1])) {\n t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]);\n this._legalize(t + 2);\n hullTri[q] = t;\n hullNext[e] = e; // mark as removed\n hullSize--;\n e = q;\n }\n }\n\n // update the hull indices\n this._hullStart = hullPrev[i] = e;\n hullNext[e] = hullPrev[n] = i;\n hullNext[i] = n;\n\n // save the two new edges in the hash table\n hullHash[this._hashKey(x, y)] = i;\n hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e;\n }\n\n this.hull = new Uint32Array(hullSize);\n for (let i = 0, e = this._hullStart; i < hullSize; i++) {\n this.hull[i] = e;\n e = hullNext[e];\n }\n\n // trim typed triangle mesh arrays\n this.triangles = this._triangles.subarray(0, this.trianglesLen);\n this.halfedges = this._halfedges.subarray(0, this.trianglesLen);\n }\n\n _hashKey(x, y) {\n return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize;\n }\n\n _legalize(a) {\n const {_triangles: triangles, _halfedges: halfedges, coords} = this;\n\n let i = 0;\n let ar = 0;\n\n // recursion eliminated with a fixed-size stack\n while (true) {\n const b = halfedges[a];\n\n /* if the pair of triangles doesn't satisfy the Delaunay condition\n * (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n * then do the same check/flip recursively for the new pair of triangles\n *\n * pl pl\n * /||\\ / \\\n * al/ || \\bl al/ \\a\n * / || \\ / \\\n * / a||b \\ flip /___ar___\\\n * p0\\ || /p1 => p0\\---bl---/p1\n * \\ || / \\ /\n * ar\\ || /br b\\ /br\n * \\||/ \\ /\n * pr pr\n */\n const a0 = a - a % 3;\n ar = a0 + (a + 2) % 3;\n\n if (b === -1) { // convex hull edge\n if (i === 0) break;\n a = EDGE_STACK[--i];\n continue;\n }\n\n const b0 = b - b % 3;\n const al = a0 + (a + 1) % 3;\n const bl = b0 + (b + 2) % 3;\n\n const p0 = triangles[ar];\n const pr = triangles[a];\n const pl = triangles[al];\n const p1 = triangles[bl];\n\n const illegal = inCircle(\n coords[2 * p0], coords[2 * p0 + 1],\n coords[2 * pr], coords[2 * pr + 1],\n coords[2 * pl], coords[2 * pl + 1],\n coords[2 * p1], coords[2 * p1 + 1]);\n\n if (illegal) {\n triangles[a] = p1;\n triangles[b] = p0;\n\n const hbl = halfedges[bl];\n\n // edge swapped on the other side of the hull (rare); fix the halfedge reference\n if (hbl === -1) {\n let e = this._hullStart;\n do {\n if (this._hullTri[e] === bl) {\n this._hullTri[e] = a;\n break;\n }\n e = this._hullPrev[e];\n } while (e !== this._hullStart);\n }\n this._link(a, hbl);\n this._link(b, halfedges[ar]);\n this._link(ar, bl);\n\n const br = b0 + (b + 1) % 3;\n\n // don't worry about hitting the cap: it can only happen on extremely degenerate input\n if (i < EDGE_STACK.length) {\n EDGE_STACK[i++] = br;\n }\n } else {\n if (i === 0) break;\n a = EDGE_STACK[--i];\n }\n }\n\n return ar;\n }\n\n _link(a, b) {\n this._halfedges[a] = b;\n if (b !== -1) this._halfedges[b] = a;\n }\n\n // add a new triangle given vertex indices and adjacent half-edge ids\n _addTriangle(i0, i1, i2, a, b, c) {\n const t = this.trianglesLen;\n\n this._triangles[t] = i0;\n this._triangles[t + 1] = i1;\n this._triangles[t + 2] = i2;\n\n this._link(t, a);\n this._link(t + 1, b);\n this._link(t + 2, c);\n\n this.trianglesLen += 3;\n\n return t;\n }\n}\n\n// monotonically increases with real angle, but doesn't need expensive trigonometry\nfunction pseudoAngle(dx, dy) {\n const p = dx / (Math.abs(dx) + Math.abs(dy));\n return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1]\n}\n\nfunction dist(ax, ay, bx, by) {\n const dx = ax - bx;\n const dy = ay - by;\n return dx * dx + dy * dy;\n}\n\n// return 2d orientation sign if we're confident in it through J. Shewchuk's error bound check\nfunction orientIfSure(px, py, rx, ry, qx, qy) {\n const l = (ry - py) * (qx - px);\n const r = (rx - px) * (qy - py);\n return Math.abs(l - r) >= 3.3306690738754716e-16 * Math.abs(l + r) ? l - r : 0;\n}\n\n// a more robust orientation test that's stable in a given triangle (to fix robustness issues)\nfunction orient(rx, ry, qx, qy, px, py) {\n const sign = orientIfSure(px, py, rx, ry, qx, qy) ||\n orientIfSure(rx, ry, qx, qy, px, py) ||\n orientIfSure(qx, qy, px, py, rx, ry);\n return sign < 0;\n}\n\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\n const dx = ax - px;\n const dy = ay - py;\n const ex = bx - px;\n const ey = by - py;\n const fx = cx - px;\n const fy = cy - py;\n\n const ap = dx * dx + dy * dy;\n const bp = ex * ex + ey * ey;\n const cp = fx * fx + fy * fy;\n\n return dx * (ey * cp - bp * fy) -\n dy * (ex * cp - bp * fx) +\n ap * (ex * fy - ey * fx) < 0;\n}\n\nfunction circumradius(ax, ay, bx, by, cx, cy) {\n const dx = bx - ax;\n const dy = by - ay;\n const ex = cx - ax;\n const ey = cy - ay;\n\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const d = 0.5 / (dx * ey - dy * ex);\n\n const x = (ey * bl - dy * cl) * d;\n const y = (dx * cl - ex * bl) * d;\n\n return x * x + y * y;\n}\n\nfunction circumcenter(ax, ay, bx, by, cx, cy) {\n const dx = bx - ax;\n const dy = by - ay;\n const ex = cx - ax;\n const ey = cy - ay;\n\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const d = 0.5 / (dx * ey - dy * ex);\n\n const x = ax + (ey * bl - dy * cl) * d;\n const y = ay + (dx * cl - ex * bl) * d;\n\n return {x, y};\n}\n\nfunction quicksort(ids, dists, left, right) {\n if (right - left <= 20) {\n for (let i = left + 1; i <= right; i++) {\n const temp = ids[i];\n const tempDist = dists[temp];\n let j = i - 1;\n while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--];\n ids[j + 1] = temp;\n }\n } else {\n const median = (left + right) >> 1;\n let i = left + 1;\n let j = right;\n swap(ids, median, i);\n if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right);\n if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right);\n if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i);\n\n const temp = ids[i];\n const tempDist = dists[temp];\n while (true) {\n do i++; while (dists[ids[i]] < tempDist);\n do j--; while (dists[ids[j]] > tempDist);\n if (j < i) break;\n swap(ids, i, j);\n }\n ids[left + 1] = ids[j];\n ids[j] = temp;\n\n if (right - i + 1 >= j - left) {\n quicksort(ids, dists, i, right);\n quicksort(ids, dists, left, j - 1);\n } else {\n quicksort(ids, dists, left, j - 1);\n quicksort(ids, dists, i, right);\n }\n }\n}\n\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction defaultGetX(p) {\n return p[0];\n}\nfunction defaultGetY(p) {\n return p[1];\n}\n","const epsilon = 1e-6;\n\nexport default class Path {\n constructor() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n }\n moveTo(x, y) {\n this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n }\n lineTo(x, y) {\n this._ += `L${this._x1 = +x},${this._y1 = +y}`;\n }\n arc(x, y, r) {\n x = +x, y = +y, r = +r;\n const x0 = x + r;\n const y0 = y;\n if (r < 0) throw new Error(\"negative radius\");\n if (this._x1 === null) this._ += `M${x0},${y0}`;\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) this._ += \"L\" + x0 + \",\" + y0;\n if (!r) return;\n this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`;\n }\n rect(x, y, w, h) {\n this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${+w}v${+h}h${-w}Z`;\n }\n value() {\n return this._ || null;\n }\n}\n","export default class Polygon {\n constructor() {\n this._ = [];\n }\n moveTo(x, y) {\n this._.push([x, y]);\n }\n closePath() {\n this._.push(this._[0].slice());\n }\n lineTo(x, y) {\n this._.push([x, y]);\n }\n value() {\n return this._.length ? this._ : null;\n }\n}\n","import Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\n\nexport default class Voronoi {\n constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) {\n if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error(\"invalid bounds\");\n this.delaunay = delaunay;\n this._circumcenters = new Float64Array(delaunay.points.length * 2);\n this.vectors = new Float64Array(delaunay.points.length * 2);\n this.xmax = xmax, this.xmin = xmin;\n this.ymax = ymax, this.ymin = ymin;\n this._init();\n }\n update() {\n this.delaunay.update();\n this._init();\n return this;\n }\n _init() {\n const {delaunay: {points, hull, triangles}, vectors} = this;\n\n // Compute circumcenters.\n const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2);\n for (let i = 0, j = 0, n = triangles.length, x, y; i < n; i += 3, j += 2) {\n const t1 = triangles[i] * 2;\n const t2 = triangles[i + 1] * 2;\n const t3 = triangles[i + 2] * 2;\n const x1 = points[t1];\n const y1 = points[t1 + 1];\n const x2 = points[t2];\n const y2 = points[t2 + 1];\n const x3 = points[t3];\n const y3 = points[t3 + 1];\n\n const dx = x2 - x1;\n const dy = y2 - y1;\n const ex = x3 - x1;\n const ey = y3 - y1;\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const ab = (dx * ey - dy * ex) * 2;\n\n if (!ab) {\n // degenerate case (collinear diagram)\n x = (x1 + x3) / 2 - 1e8 * ey;\n y = (y1 + y3) / 2 + 1e8 * ex;\n }\n else if (Math.abs(ab) < 1e-8) {\n // almost equal points (degenerate triangle)\n x = (x1 + x3) / 2;\n y = (y1 + y3) / 2;\n } else {\n const d = 1 / ab;\n x = x1 + (ey * bl - dy * cl) * d;\n y = y1 + (dx * cl - ex * bl) * d;\n }\n circumcenters[j] = x;\n circumcenters[j + 1] = y;\n }\n\n // Compute exterior cell rays.\n let h = hull[hull.length - 1];\n let p0, p1 = h * 4;\n let x0, x1 = points[2 * h];\n let y0, y1 = points[2 * h + 1];\n vectors.fill(0);\n for (let i = 0; i < hull.length; ++i) {\n h = hull[i];\n p0 = p1, x0 = x1, y0 = y1;\n p1 = h * 4, x1 = points[2 * h], y1 = points[2 * h + 1];\n vectors[p0 + 2] = vectors[p1] = y0 - y1;\n vectors[p0 + 3] = vectors[p1 + 1] = x1 - x0;\n }\n }\n render(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {delaunay: {halfedges, inedges, hull}, circumcenters, vectors} = this;\n if (hull.length <= 1) return null;\n for (let i = 0, n = halfedges.length; i < n; ++i) {\n const j = halfedges[i];\n if (j < i) continue;\n const ti = Math.floor(i / 3) * 2;\n const tj = Math.floor(j / 3) * 2;\n const xi = circumcenters[ti];\n const yi = circumcenters[ti + 1];\n const xj = circumcenters[tj];\n const yj = circumcenters[tj + 1];\n this._renderSegment(xi, yi, xj, yj, context);\n }\n let h0, h1 = hull[hull.length - 1];\n for (let i = 0; i < hull.length; ++i) {\n h0 = h1, h1 = hull[i];\n const t = Math.floor(inedges[h1] / 3) * 2;\n const x = circumcenters[t];\n const y = circumcenters[t + 1];\n const v = h0 * 4;\n const p = this._project(x, y, vectors[v + 2], vectors[v + 3]);\n if (p) this._renderSegment(x, y, p[0], p[1], context);\n }\n return buffer && buffer.value();\n }\n renderBounds(context) {\n const buffer = context == null ? context = new Path : undefined;\n context.rect(this.xmin, this.ymin, this.xmax - this.xmin, this.ymax - this.ymin);\n return buffer && buffer.value();\n }\n renderCell(i, context) {\n const buffer = context == null ? context = new Path : undefined;\n const points = this._clip(i);\n if (points === null || !points.length) return;\n context.moveTo(points[0], points[1]);\n let n = points.length;\n while (points[0] === points[n-2] && points[1] === points[n-1] && n > 1) n -= 2;\n for (let i = 2; i < n; i += 2) {\n if (points[i] !== points[i-2] || points[i+1] !== points[i-1])\n context.lineTo(points[i], points[i + 1]);\n }\n context.closePath();\n return buffer && buffer.value();\n }\n *cellPolygons() {\n const {delaunay: {points}} = this;\n for (let i = 0, n = points.length / 2; i < n; ++i) {\n const cell = this.cellPolygon(i);\n if (cell) cell.index = i, yield cell;\n }\n }\n cellPolygon(i) {\n const polygon = new Polygon;\n this.renderCell(i, polygon);\n return polygon.value();\n }\n _renderSegment(x0, y0, x1, y1, context) {\n let S;\n const c0 = this._regioncode(x0, y0);\n const c1 = this._regioncode(x1, y1);\n if (c0 === 0 && c1 === 0) {\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n } else if (S = this._clipSegment(x0, y0, x1, y1, c0, c1)) {\n context.moveTo(S[0], S[1]);\n context.lineTo(S[2], S[3]);\n }\n }\n contains(i, x, y) {\n if ((x = +x, x !== x) || (y = +y, y !== y)) return false;\n return this.delaunay._step(i, x, y) === i;\n }\n *neighbors(i) {\n const ci = this._clip(i);\n if (ci) for (const j of this.delaunay.neighbors(i)) {\n const cj = this._clip(j);\n // find the common edge\n if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) {\n for (let aj = 0, lj = cj.length; aj < lj; aj += 2) {\n if (ci[ai] == cj[aj]\n && ci[ai + 1] == cj[aj + 1]\n && ci[(ai + 2) % li] == cj[(aj + lj - 2) % lj]\n && ci[(ai + 3) % li] == cj[(aj + lj - 1) % lj]\n ) {\n yield j;\n break loop;\n }\n }\n }\n }\n }\n _cell(i) {\n const {circumcenters, delaunay: {inedges, halfedges, triangles}} = this;\n const e0 = inedges[i];\n if (e0 === -1) return null; // coincident point\n const points = [];\n let e = e0;\n do {\n const t = Math.floor(e / 3);\n points.push(circumcenters[t * 2], circumcenters[t * 2 + 1]);\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n e = halfedges[e];\n } while (e !== e0 && e !== -1);\n return points;\n }\n _clip(i) {\n // degenerate case (1 valid point: return the box)\n if (i === 0 && this.delaunay.hull.length === 1) {\n return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n }\n const points = this._cell(i);\n if (points === null) return null;\n const {vectors: V} = this;\n const v = i * 4;\n return V[v] || V[v + 1]\n ? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3])\n : this._clipFinite(i, points);\n }\n _clipFinite(i, points) {\n const n = points.length;\n let P = null;\n let x0, y0, x1 = points[n - 2], y1 = points[n - 1];\n let c0, c1 = this._regioncode(x1, y1);\n let e0, e1;\n for (let j = 0; j < n; j += 2) {\n x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1];\n c0 = c1, c1 = this._regioncode(x1, y1);\n if (c0 === 0 && c1 === 0) {\n e0 = e1, e1 = 0;\n if (P) P.push(x1, y1);\n else P = [x1, y1];\n } else {\n let S, sx0, sy0, sx1, sy1;\n if (c0 === 0) {\n if ((S = this._clipSegment(x0, y0, x1, y1, c0, c1)) === null) continue;\n [sx0, sy0, sx1, sy1] = S;\n } else {\n if ((S = this._clipSegment(x1, y1, x0, y0, c1, c0)) === null) continue;\n [sx1, sy1, sx0, sy0] = S;\n e0 = e1, e1 = this._edgecode(sx0, sy0);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n if (P) P.push(sx0, sy0);\n else P = [sx0, sy0];\n }\n e0 = e1, e1 = this._edgecode(sx1, sy1);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n if (P) P.push(sx1, sy1);\n else P = [sx1, sy1];\n }\n }\n if (P) {\n e0 = e1, e1 = this._edgecode(P[0], P[1]);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n }\n return P;\n }\n _clipSegment(x0, y0, x1, y1, c0, c1) {\n while (true) {\n if (c0 === 0 && c1 === 0) return [x0, y0, x1, y1];\n if (c0 & c1) return null;\n let x, y, c = c0 || c1;\n if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax;\n else if (c & 0b0100) x = x0 + (x1 - x0) * (this.ymin - y0) / (y1 - y0), y = this.ymin;\n else if (c & 0b0010) y = y0 + (y1 - y0) * (this.xmax - x0) / (x1 - x0), x = this.xmax;\n else y = y0 + (y1 - y0) * (this.xmin - x0) / (x1 - x0), x = this.xmin;\n if (c0) x0 = x, y0 = y, c0 = this._regioncode(x0, y0);\n else x1 = x, y1 = y, c1 = this._regioncode(x1, y1);\n }\n }\n _clipInfinite(i, points, vx0, vy0, vxn, vyn) {\n let P = Array.from(points), p;\n if (p = this._project(P[0], P[1], vx0, vy0)) P.unshift(p[0], p[1]);\n if (p = this._project(P[P.length - 2], P[P.length - 1], vxn, vyn)) P.push(p[0], p[1]);\n if (P = this._clipFinite(i, P)) {\n for (let j = 0, n = P.length, c0, c1 = this._edgecode(P[n - 2], P[n - 1]); j < n; j += 2) {\n c0 = c1, c1 = this._edgecode(P[j], P[j + 1]);\n if (c0 && c1) j = this._edge(i, c0, c1, P, j), n = P.length;\n }\n } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n P = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax];\n }\n return P;\n }\n _edge(i, e0, e1, P, j) {\n while (e0 !== e1) {\n let x, y;\n switch (e0) {\n case 0b0101: e0 = 0b0100; continue; // top-left\n case 0b0100: e0 = 0b0110, x = this.xmax, y = this.ymin; break; // top\n case 0b0110: e0 = 0b0010; continue; // top-right\n case 0b0010: e0 = 0b1010, x = this.xmax, y = this.ymax; break; // right\n case 0b1010: e0 = 0b1000; continue; // bottom-right\n case 0b1000: e0 = 0b1001, x = this.xmin, y = this.ymax; break; // bottom\n case 0b1001: e0 = 0b0001; continue; // bottom-left\n case 0b0001: e0 = 0b0101, x = this.xmin, y = this.ymin; break; // left\n }\n if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) {\n P.splice(j, 0, x, y), j += 2;\n }\n }\n if (P.length > 4) {\n for (let i = 0; i < P.length; i+= 2) {\n const j = (i + 2) % P.length, k = (i + 4) % P.length;\n if (P[i] === P[j] && P[j] === P[k]\n || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1])\n P.splice(j, 2), i -= 2;\n }\n }\n return j;\n }\n _project(x0, y0, vx, vy) {\n let t = Infinity, c, x, y;\n if (vy < 0) { // top\n if (y0 <= this.ymin) return null;\n if ((c = (this.ymin - y0) / vy) < t) y = this.ymin, x = x0 + (t = c) * vx;\n } else if (vy > 0) { // bottom\n if (y0 >= this.ymax) return null;\n if ((c = (this.ymax - y0) / vy) < t) y = this.ymax, x = x0 + (t = c) * vx;\n }\n if (vx > 0) { // right\n if (x0 >= this.xmax) return null;\n if ((c = (this.xmax - x0) / vx) < t) x = this.xmax, y = y0 + (t = c) * vy;\n } else if (vx < 0) { // left\n if (x0 <= this.xmin) return null;\n if ((c = (this.xmin - x0) / vx) < t) x = this.xmin, y = y0 + (t = c) * vy;\n }\n return [x, y];\n }\n _edgecode(x, y) {\n return (x === this.xmin ? 0b0001\n : x === this.xmax ? 0b0010 : 0b0000)\n | (y === this.ymin ? 0b0100\n : y === this.ymax ? 0b1000 : 0b0000);\n }\n _regioncode(x, y) {\n return (x < this.xmin ? 0b0001\n : x > this.xmax ? 0b0010 : 0b0000)\n | (y < this.ymin ? 0b0100\n : y > this.ymax ? 0b1000 : 0b0000);\n }\n}\n","import Delaunator from \"delaunator\";\nimport Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\nimport Voronoi from \"./voronoi.js\";\n\nconst tau = 2 * Math.PI, pow = Math.pow;\n\nfunction pointX(p) {\n return p[0];\n}\n\nfunction pointY(p) {\n return p[1];\n}\n\n// A triangulation is collinear if all its triangles have a non-null area\nfunction collinear(d) {\n const {triangles, coords} = d;\n for (let i = 0; i < triangles.length; i += 3) {\n const a = 2 * triangles[i],\n b = 2 * triangles[i + 1],\n c = 2 * triangles[i + 2],\n cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1])\n - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]);\n if (cross > 1e-10) return false;\n }\n return true;\n}\n\nfunction jitter(x, y, r) {\n return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r];\n}\n\nexport default class Delaunay {\n static from(points, fx = pointX, fy = pointY, that) {\n return new Delaunay(\"length\" in points\n ? flatArray(points, fx, fy, that)\n : Float64Array.from(flatIterable(points, fx, fy, that)));\n }\n constructor(points) {\n this._delaunator = new Delaunator(points);\n this.inedges = new Int32Array(points.length / 2);\n this._hullIndex = new Int32Array(points.length / 2);\n this.points = this._delaunator.coords;\n this._init();\n }\n update() {\n this._delaunator.update();\n this._init();\n return this;\n }\n _init() {\n const d = this._delaunator, points = this.points;\n\n // check for collinear\n if (d.hull && d.hull.length > 2 && collinear(d)) {\n this.collinear = Int32Array.from({length: points.length/2}, (_,i) => i)\n .sort((i, j) => points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1]); // for exact neighbors\n const e = this.collinear[0], f = this.collinear[this.collinear.length - 1],\n bounds = [ points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1] ],\n r = 1e-8 * Math.hypot(bounds[3] - bounds[1], bounds[2] - bounds[0]);\n for (let i = 0, n = points.length / 2; i < n; ++i) {\n const p = jitter(points[2 * i], points[2 * i + 1], r);\n points[2 * i] = p[0];\n points[2 * i + 1] = p[1];\n }\n this._delaunator = new Delaunator(points);\n } else {\n delete this.collinear;\n }\n\n const halfedges = this.halfedges = this._delaunator.halfedges;\n const hull = this.hull = this._delaunator.hull;\n const triangles = this.triangles = this._delaunator.triangles;\n const inedges = this.inedges.fill(-1);\n const hullIndex = this._hullIndex.fill(-1);\n\n // Compute an index from each point to an (arbitrary) incoming halfedge\n // Used to give the first neighbor of each point; for this reason,\n // on the hull we give priority to exterior halfedges\n for (let e = 0, n = halfedges.length; e < n; ++e) {\n const p = triangles[e % 3 === 2 ? e - 2 : e + 1];\n if (halfedges[e] === -1 || inedges[p] === -1) inedges[p] = e;\n }\n for (let i = 0, n = hull.length; i < n; ++i) {\n hullIndex[hull[i]] = i;\n }\n\n // degenerate case: 1 or 2 (distinct) points\n if (hull.length <= 2 && hull.length > 0) {\n this.triangles = new Int32Array(3).fill(-1);\n this.halfedges = new Int32Array(3).fill(-1);\n this.triangles[0] = hull[0];\n this.triangles[1] = hull[1];\n this.triangles[2] = hull[1];\n inedges[hull[0]] = 1;\n if (hull.length === 2) inedges[hull[1]] = 0;\n }\n }\n voronoi(bounds) {\n return new Voronoi(this, bounds);\n }\n *neighbors(i) {\n const {inedges, hull, _hullIndex, halfedges, triangles, collinear} = this;\n\n // degenerate case with several collinear points\n if (collinear) {\n const l = collinear.indexOf(i);\n if (l > 0) yield collinear[l - 1];\n if (l < collinear.length - 1) yield collinear[l + 1];\n return;\n }\n\n const e0 = inedges[i];\n if (e0 === -1) return; // coincident point\n let e = e0, p0 = -1;\n do {\n yield p0 = triangles[e];\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) return; // bad triangulation\n e = halfedges[e];\n if (e === -1) {\n const p = hull[(_hullIndex[i] + 1) % hull.length];\n if (p !== p0) yield p;\n return;\n }\n } while (e !== e0);\n }\n find(x, y, i = 0) {\n if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;\n const i0 = i;\n let c;\n while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) i = c;\n return c;\n }\n _step(i, x, y) {\n const {inedges, hull, _hullIndex, halfedges, triangles, points} = this;\n if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1);\n let c = i;\n let dc = pow(x - points[i * 2], 2) + pow(y - points[i * 2 + 1], 2);\n const e0 = inedges[i];\n let e = e0;\n do {\n let t = triangles[e];\n const dt = pow(x - points[t * 2], 2) + pow(y - points[t * 2 + 1], 2);\n if (dt < dc) dc = dt, c = t;\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n e = halfedges[e];\n if (e === -1) {\n e = hull[(_hullIndex[i] + 1) % hull.length];\n if (e !== t) {\n if (pow(x - points[e * 2], 2) + pow(y - points[e * 2 + 1], 2) < dc) return e;\n }\n break;\n }\n } while (e !== e0);\n return c;\n }\n render(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {points, halfedges, triangles} = this;\n for (let i = 0, n = halfedges.length; i < n; ++i) {\n const j = halfedges[i];\n if (j < i) continue;\n const ti = triangles[i] * 2;\n const tj = triangles[j] * 2;\n context.moveTo(points[ti], points[ti + 1]);\n context.lineTo(points[tj], points[tj + 1]);\n }\n this.renderHull(context);\n return buffer && buffer.value();\n }\n renderPoints(context, r = 2) {\n const buffer = context == null ? context = new Path : undefined;\n const {points} = this;\n for (let i = 0, n = points.length; i < n; i += 2) {\n const x = points[i], y = points[i + 1];\n context.moveTo(x + r, y);\n context.arc(x, y, r, 0, tau);\n }\n return buffer && buffer.value();\n }\n renderHull(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {hull, points} = this;\n const h = hull[0] * 2, n = hull.length;\n context.moveTo(points[h], points[h + 1]);\n for (let i = 1; i < n; ++i) {\n const h = 2 * hull[i];\n context.lineTo(points[h], points[h + 1]);\n }\n context.closePath();\n return buffer && buffer.value();\n }\n hullPolygon() {\n const polygon = new Polygon;\n this.renderHull(polygon);\n return polygon.value();\n }\n renderTriangle(i, context) {\n const buffer = context == null ? context = new Path : undefined;\n const {points, triangles} = this;\n const t0 = triangles[i *= 3] * 2;\n const t1 = triangles[i + 1] * 2;\n const t2 = triangles[i + 2] * 2;\n context.moveTo(points[t0], points[t0 + 1]);\n context.lineTo(points[t1], points[t1 + 1]);\n context.lineTo(points[t2], points[t2 + 1]);\n context.closePath();\n return buffer && buffer.value();\n }\n *trianglePolygons() {\n const {triangles} = this;\n for (let i = 0, n = triangles.length / 3; i < n; ++i) {\n yield this.trianglePolygon(i);\n }\n }\n trianglePolygon(i) {\n const polygon = new Polygon;\n this.renderTriangle(i, polygon);\n return polygon.value();\n }\n}\n\nfunction flatArray(points, fx, fy, that) {\n const n = points.length;\n const array = new Float64Array(n * 2);\n for (let i = 0; i < n; ++i) {\n const p = points[i];\n array[i * 2] = fx.call(that, p, i, points);\n array[i * 2 + 1] = fy.call(that, p, i, points);\n }\n return array;\n}\n\nfunction* flatIterable(points, fx, fy, that) {\n let i = 0;\n for (const p of points) {\n yield fx.call(that, p, i, points);\n yield fy.call(that, p, i, points);\n ++i;\n }\n}\n","import { Transform } from 'vega-dataflow';\nimport { inherits } from 'vega-util';\nimport { Delaunay } from 'd3-delaunay';\n\nfunction Voronoi(params) {\n Transform.call(this, null, params);\n}\nVoronoi.Definition = {\n 'type': 'Voronoi',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'x',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'y',\n 'type': 'field',\n 'required': true\n }, {\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'extent',\n 'type': 'array',\n 'array': true,\n 'length': 2,\n 'default': [[-1e5, -1e5], [1e5, 1e5]],\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }, {\n 'name': 'as',\n 'type': 'string',\n 'default': 'path'\n }]\n};\nconst defaultExtent = [-1e5, -1e5, 1e5, 1e5];\ninherits(Voronoi, Transform, {\n transform(_, pulse) {\n const as = _.as || 'path',\n data = pulse.source; // nothing to do if no data\n\n if (!data || !data.length) return pulse; // configure and construct voronoi diagram\n\n let s = _.size;\n s = s ? [0, 0, s[0], s[1]] : (s = _.extent) ? [s[0][0], s[0][1], s[1][0], s[1][1]] : defaultExtent;\n const voronoi = this.value = Delaunay.from(data, _.x, _.y).voronoi(s); // map polygons to paths\n\n for (let i = 0, n = data.length; i < n; ++i) {\n const polygon = voronoi.cellPolygon(i);\n data[i][as] = polygon ? toPathString(polygon) : null;\n }\n\n return pulse.reflow(_.modified()).modifies(as);\n }\n\n}); // suppress duplicated end point vertices\n\nfunction toPathString(p) {\n const x = p[0][0],\n y = p[0][1];\n let n = p.length - 1;\n\n for (; p[n][0] === x && p[n][1] === y; --n);\n\n return 'M' + p.slice(0, n + 1).join('L') + 'Z';\n}\n\nexport { Voronoi as voronoi };\n","import { canvas } from 'vega-canvas';\nimport { Transform } from 'vega-dataflow';\nimport { inherits, error, isFunction, constant, extent } from 'vega-util';\nimport { scale } from 'vega-scale';\nimport { random } from 'vega-statistics';\n\n/*\nCopyright (c) 2013, Jason Davies.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * The name Jason Davies may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\nOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\nADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/\n// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf\n\nvar cloudRadians = Math.PI / 180,\n cw = 1 << 11 >> 5,\n ch = 1 << 11;\nfunction cloud () {\n var size = [256, 256],\n text,\n font,\n fontSize,\n fontStyle,\n fontWeight,\n rotate,\n padding,\n spiral = archimedeanSpiral,\n words = [],\n random = Math.random,\n cloud = {};\n\n cloud.layout = function () {\n var contextAndRatio = getContext(canvas()),\n board = zeroArray((size[0] >> 5) * size[1]),\n bounds = null,\n n = words.length,\n i = -1,\n tags = [],\n data = words.map(d => ({\n text: text(d),\n font: font(d),\n style: fontStyle(d),\n weight: fontWeight(d),\n rotate: rotate(d),\n size: ~~(fontSize(d) + 1e-14),\n padding: padding(d),\n xoff: 0,\n yoff: 0,\n x1: 0,\n y1: 0,\n x0: 0,\n y0: 0,\n hasText: false,\n sprite: null,\n datum: d\n })).sort((a, b) => b.size - a.size);\n\n while (++i < n) {\n var d = data[i];\n d.x = size[0] * (random() + .5) >> 1;\n d.y = size[1] * (random() + .5) >> 1;\n cloudSprite(contextAndRatio, d, data, i);\n\n if (d.hasText && place(board, d, bounds)) {\n tags.push(d);\n if (bounds) cloudBounds(bounds, d);else bounds = [{\n x: d.x + d.x0,\n y: d.y + d.y0\n }, {\n x: d.x + d.x1,\n y: d.y + d.y1\n }]; // Temporary hack\n\n d.x -= size[0] >> 1;\n d.y -= size[1] >> 1;\n }\n }\n\n return tags;\n };\n\n function getContext(canvas) {\n canvas.width = canvas.height = 1;\n var ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);\n canvas.width = (cw << 5) / ratio;\n canvas.height = ch / ratio;\n var context = canvas.getContext('2d');\n context.fillStyle = context.strokeStyle = 'red';\n context.textAlign = 'center';\n return {\n context: context,\n ratio: ratio\n };\n }\n\n function place(board, tag, bounds) {\n var startX = tag.x,\n startY = tag.y,\n maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]),\n s = spiral(size),\n dt = random() < .5 ? 1 : -1,\n t = -dt,\n dxdy,\n dx,\n dy;\n\n while (dxdy = s(t += dt)) {\n dx = ~~dxdy[0];\n dy = ~~dxdy[1];\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;\n tag.x = startX + dx;\n tag.y = startY + dy;\n if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue; // TODO only check for collisions within current bounds.\n\n if (!bounds || !cloudCollide(tag, board, size[0])) {\n if (!bounds || collideRects(tag, bounds)) {\n var sprite = tag.sprite,\n w = tag.width >> 5,\n sw = size[0] >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n\n for (var j = 0; j < h; j++) {\n last = 0;\n\n for (var i = 0; i <= w; i++) {\n board[x + i] |= last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n\n x += sw;\n }\n\n tag.sprite = null;\n return true;\n }\n }\n }\n\n return false;\n }\n\n cloud.words = function (_) {\n if (arguments.length) {\n words = _;\n return cloud;\n } else {\n return words;\n }\n };\n\n cloud.size = function (_) {\n if (arguments.length) {\n size = [+_[0], +_[1]];\n return cloud;\n } else {\n return size;\n }\n };\n\n cloud.font = function (_) {\n if (arguments.length) {\n font = functor(_);\n return cloud;\n } else {\n return font;\n }\n };\n\n cloud.fontStyle = function (_) {\n if (arguments.length) {\n fontStyle = functor(_);\n return cloud;\n } else {\n return fontStyle;\n }\n };\n\n cloud.fontWeight = function (_) {\n if (arguments.length) {\n fontWeight = functor(_);\n return cloud;\n } else {\n return fontWeight;\n }\n };\n\n cloud.rotate = function (_) {\n if (arguments.length) {\n rotate = functor(_);\n return cloud;\n } else {\n return rotate;\n }\n };\n\n cloud.text = function (_) {\n if (arguments.length) {\n text = functor(_);\n return cloud;\n } else {\n return text;\n }\n };\n\n cloud.spiral = function (_) {\n if (arguments.length) {\n spiral = spirals[_] || _;\n return cloud;\n } else {\n return spiral;\n }\n };\n\n cloud.fontSize = function (_) {\n if (arguments.length) {\n fontSize = functor(_);\n return cloud;\n } else {\n return fontSize;\n }\n };\n\n cloud.padding = function (_) {\n if (arguments.length) {\n padding = functor(_);\n return cloud;\n } else {\n return padding;\n }\n };\n\n cloud.random = function (_) {\n if (arguments.length) {\n random = _;\n return cloud;\n } else {\n return random;\n }\n };\n\n return cloud;\n} // Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\n\nfunction cloudSprite(contextAndRatio, d, data, di) {\n if (d.sprite) return;\n var c = contextAndRatio.context,\n ratio = contextAndRatio.ratio;\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n var x = 0,\n y = 0,\n maxh = 0,\n n = data.length,\n w,\n w32,\n h,\n i,\n j;\n --di;\n\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.style + ' ' + d.weight + ' ' + ~~((d.size + 1) / ratio) + 'px ' + d.font;\n w = c.measureText(d.text + 'm').width * ratio;\n h = d.size << 1;\n\n if (d.rotate) {\n var sr = Math.sin(d.rotate * cloudRadians),\n cr = Math.cos(d.rotate * cloudRadians),\n wcr = w * cr,\n wsr = w * sr,\n hcr = h * cr,\n hsr = h * sr;\n w = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f >> 5 << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n } else {\n w = w + 0x1f >> 5 << 5;\n }\n\n if (h > maxh) maxh = h;\n\n if (x + w >= cw << 5) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n\n if (y + h >= ch) break;\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.rotate) c.rotate(d.rotate * cloudRadians);\n c.fillText(d.text, 0, 0);\n\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n\n var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,\n sprite = [];\n\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) continue;\n w = d.width;\n w32 = w >> 5;\n h = d.y1 - d.y0; // Zero the buffer\n\n for (i = 0; i < h * w32; i++) sprite[i] = 0;\n\n x = d.xoff;\n if (x == null) return;\n y = d.yoff;\n var seen = 0,\n seenRow = -1;\n\n for (j = 0; j < h; j++) {\n for (i = 0; i < w; i++) {\n var k = w32 * j + (i >> 5),\n m = pixels[(y + j) * (cw << 5) + (x + i) << 2] ? 1 << 31 - i % 32 : 0;\n sprite[k] |= m;\n seen |= m;\n }\n\n if (seen) seenRow = j;else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n} // Use mask-based collision detection.\n\n\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n var sprite = tag.sprite,\n w = tag.width >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n\n for (var j = 0; j < h; j++) {\n last = 0;\n\n for (var i = 0; i <= w; i++) {\n if ((last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i]) return true;\n }\n\n x += sw;\n }\n\n return false;\n}\n\nfunction cloudBounds(bounds, d) {\n var b0 = bounds[0],\n b1 = bounds[1];\n if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\n\nfunction collideRects(a, b) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\n\nfunction archimedeanSpiral(size) {\n var e = size[0] / size[1];\n return function (t) {\n return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\n };\n}\n\nfunction rectangularSpiral(size) {\n var dy = 4,\n dx = dy * size[0] / size[1],\n x = 0,\n y = 0;\n return function (t) {\n var sign = t < 0 ? -1 : 1; // See triangular numbers: T_n = n * (n + 1) / 2.\n\n switch (Math.sqrt(1 + 4 * sign * t) - sign & 3) {\n case 0:\n x += dx;\n break;\n\n case 1:\n y += dy;\n break;\n\n case 2:\n x -= dx;\n break;\n\n default:\n y -= dy;\n break;\n }\n\n return [x, y];\n };\n} // TODO reuse arrays?\n\n\nfunction zeroArray(n) {\n var a = [],\n i = -1;\n\n while (++i < n) a[i] = 0;\n\n return a;\n}\n\nfunction functor(d) {\n return typeof d === 'function' ? d : function () {\n return d;\n };\n}\n\nvar spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n\nconst Output = ['x', 'y', 'font', 'fontSize', 'fontStyle', 'fontWeight', 'angle'];\nconst Params = ['text', 'font', 'rotate', 'fontSize', 'fontStyle', 'fontWeight'];\nfunction Wordcloud(params) {\n Transform.call(this, cloud(), params);\n}\nWordcloud.Definition = {\n 'type': 'Wordcloud',\n 'metadata': {\n 'modifies': true\n },\n 'params': [{\n 'name': 'size',\n 'type': 'number',\n 'array': true,\n 'length': 2\n }, {\n 'name': 'font',\n 'type': 'string',\n 'expr': true,\n 'default': 'sans-serif'\n }, {\n 'name': 'fontStyle',\n 'type': 'string',\n 'expr': true,\n 'default': 'normal'\n }, {\n 'name': 'fontWeight',\n 'type': 'string',\n 'expr': true,\n 'default': 'normal'\n }, {\n 'name': 'fontSize',\n 'type': 'number',\n 'expr': true,\n 'default': 14\n }, {\n 'name': 'fontSizeRange',\n 'type': 'number',\n 'array': 'nullable',\n 'default': [10, 50]\n }, {\n 'name': 'rotate',\n 'type': 'number',\n 'expr': true,\n 'default': 0\n }, {\n 'name': 'text',\n 'type': 'field'\n }, {\n 'name': 'spiral',\n 'type': 'string',\n 'values': ['archimedean', 'rectangular']\n }, {\n 'name': 'padding',\n 'type': 'number',\n 'expr': true\n }, {\n 'name': 'as',\n 'type': 'string',\n 'array': true,\n 'length': 7,\n 'default': Output\n }]\n};\ninherits(Wordcloud, Transform, {\n transform(_, pulse) {\n if (_.size && !(_.size[0] && _.size[1])) {\n error('Wordcloud size dimensions must be non-zero.');\n }\n\n function modp(param) {\n const p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n\n const mod = _.modified();\n\n if (!(mod || pulse.changed(pulse.ADD_REM) || Params.some(modp))) return;\n const data = pulse.materialize(pulse.SOURCE).source,\n layout = this.value,\n as = _.as || Output;\n let fontSize = _.fontSize || 14,\n range;\n isFunction(fontSize) ? range = _.fontSizeRange : fontSize = constant(fontSize); // create font size scaling function as needed\n\n if (range) {\n const fsize = fontSize,\n sizeScale = scale('sqrt')().domain(extent(data, fsize)).range(range);\n\n fontSize = x => sizeScale(fsize(x));\n }\n\n data.forEach(t => {\n t[as[0]] = NaN;\n t[as[1]] = NaN;\n t[as[3]] = 0;\n }); // configure layout\n\n const words = layout.words(data).text(_.text).size(_.size || [500, 500]).padding(_.padding || 1).spiral(_.spiral || 'archimedean').rotate(_.rotate || 0).font(_.font || 'sans-serif').fontStyle(_.fontStyle || 'normal').fontWeight(_.fontWeight || 'normal').fontSize(fontSize).random(random).layout();\n const size = layout.size(),\n dx = size[0] >> 1,\n dy = size[1] >> 1,\n n = words.length;\n\n for (let i = 0, w, t; i < n; ++i) {\n w = words[i];\n t = w.datum;\n t[as[0]] = w.x + dx;\n t[as[1]] = w.y + dy;\n t[as[2]] = w.font;\n t[as[3]] = w.size;\n t[as[4]] = w.style;\n t[as[5]] = w.weight;\n t[as[6]] = w.rotate;\n }\n\n return pulse.reflow(mod).modifies(as);\n }\n\n});\n\nexport { Wordcloud as wordcloud };\n","import { permute, bisectLeft, bisectRight } from 'd3-array';\nimport { Transform } from 'vega-dataflow';\nimport { inherits } from 'vega-util';\n\nconst array8 = n => new Uint8Array(n);\nconst array16 = n => new Uint16Array(n);\nconst array32 = n => new Uint32Array(n);\n\n/**\n * Maintains CrossFilter state.\n */\n\nfunction Bitmaps() {\n let width = 8,\n data = [],\n seen = array32(0),\n curr = array(0, width),\n prev = array(0, width);\n return {\n data: () => data,\n seen: () => seen = lengthen(seen, data.length),\n\n add(array) {\n for (let i = 0, j = data.length, n = array.length, t; i < n; ++i) {\n t = array[i];\n t._index = j++;\n data.push(t);\n }\n },\n\n remove(num, map) {\n // map: index -> boolean (true => remove)\n const n = data.length,\n copy = Array(n - num),\n reindex = data; // reuse old data array for index map\n\n let t, i, j; // seek forward to first removal\n\n for (i = 0; !map[i] && i < n; ++i) {\n copy[i] = data[i];\n reindex[i] = i;\n } // condense arrays\n\n\n for (j = i; i < n; ++i) {\n t = data[i];\n\n if (!map[i]) {\n reindex[i] = j;\n curr[j] = curr[i];\n prev[j] = prev[i];\n copy[j] = t;\n t._index = j++;\n } else {\n reindex[i] = -1;\n }\n\n curr[i] = 0; // clear unused bits\n }\n\n data = copy;\n return reindex;\n },\n\n size: () => data.length,\n curr: () => curr,\n prev: () => prev,\n reset: k => prev[k] = curr[k],\n all: () => width < 0x101 ? 0xff : width < 0x10001 ? 0xffff : 0xffffffff,\n\n set(k, one) {\n curr[k] |= one;\n },\n\n clear(k, one) {\n curr[k] &= ~one;\n },\n\n resize(n, m) {\n const k = curr.length;\n\n if (n > k || m > width) {\n width = Math.max(m, width);\n curr = array(n, width, curr);\n prev = array(n, width);\n }\n }\n\n };\n}\n\nfunction lengthen(array, length, copy) {\n if (array.length >= length) return array;\n copy = copy || new array.constructor(length);\n copy.set(array);\n return copy;\n}\n\nfunction array(n, m, array) {\n const copy = (m < 0x101 ? array8 : m < 0x10001 ? array16 : array32)(n);\n if (array) copy.set(array);\n return copy;\n}\n\nfunction Dimension (index, i, query) {\n const bit = 1 << i;\n return {\n one: bit,\n zero: ~bit,\n range: query.slice(),\n bisect: index.bisect,\n index: index.index,\n size: index.size,\n\n onAdd(added, curr) {\n const dim = this,\n range = dim.bisect(dim.range, added.value),\n idx = added.index,\n lo = range[0],\n hi = range[1],\n n1 = idx.length;\n let i;\n\n for (i = 0; i < lo; ++i) curr[idx[i]] |= bit;\n\n for (i = hi; i < n1; ++i) curr[idx[i]] |= bit;\n\n return dim;\n }\n\n };\n}\n\n/**\n * Maintains a list of values, sorted by key.\n */\n\nfunction SortedIndex() {\n let index = array32(0),\n value = [],\n size = 0;\n\n function insert(key, data, base) {\n if (!data.length) return [];\n const n0 = size,\n n1 = data.length,\n addi = array32(n1);\n let addv = Array(n1),\n oldv,\n oldi,\n i;\n\n for (i = 0; i < n1; ++i) {\n addv[i] = key(data[i]);\n addi[i] = i;\n }\n\n addv = sort(addv, addi);\n\n if (n0) {\n oldv = value;\n oldi = index;\n value = Array(n0 + n1);\n index = array32(n0 + n1);\n merge(base, oldv, oldi, n0, addv, addi, n1, value, index);\n } else {\n if (base > 0) for (i = 0; i < n1; ++i) {\n addi[i] += base;\n }\n value = addv;\n index = addi;\n }\n\n size = n0 + n1;\n return {\n index: addi,\n value: addv\n };\n }\n\n function remove(num, map) {\n // map: index -> remove\n const n = size;\n let idx, i, j; // seek forward to first removal\n\n for (i = 0; !map[index[i]] && i < n; ++i); // condense index and value arrays\n\n\n for (j = i; i < n; ++i) {\n if (!map[idx = index[i]]) {\n index[j] = idx;\n value[j] = value[i];\n ++j;\n }\n }\n\n size = n - num;\n }\n\n function reindex(map) {\n for (let i = 0, n = size; i < n; ++i) {\n index[i] = map[index[i]];\n }\n }\n\n function bisect(range, array) {\n let n;\n\n if (array) {\n n = array.length;\n } else {\n array = value;\n n = size;\n }\n\n return [bisectLeft(array, range[0], 0, n), bisectRight(array, range[1], 0, n)];\n }\n\n return {\n insert: insert,\n remove: remove,\n bisect: bisect,\n reindex: reindex,\n index: () => index,\n size: () => size\n };\n}\n\nfunction sort(values, index) {\n values.sort.call(index, (a, b) => {\n const x = values[a],\n y = values[b];\n return x < y ? -1 : x > y ? 1 : 0;\n });\n return permute(values, index);\n}\n\nfunction merge(base, value0, index0, n0, value1, index1, n1, value, index) {\n let i0 = 0,\n i1 = 0,\n i;\n\n for (i = 0; i0 < n0 && i1 < n1; ++i) {\n if (value0[i0] < value1[i1]) {\n value[i] = value0[i0];\n index[i] = index0[i0++];\n } else {\n value[i] = value1[i1];\n index[i] = index1[i1++] + base;\n }\n }\n\n for (; i0 < n0; ++i0, ++i) {\n value[i] = value0[i0];\n index[i] = index0[i0];\n }\n\n for (; i1 < n1; ++i1, ++i) {\n value[i] = value1[i1];\n index[i] = index1[i1] + base;\n }\n}\n\n/**\n * An indexed multi-dimensional filter.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of dimension accessors to filter.\n * @param {Array} params.query - An array of per-dimension range queries.\n */\n\nfunction CrossFilter(params) {\n Transform.call(this, Bitmaps(), params);\n this._indices = null;\n this._dims = null;\n}\nCrossFilter.Definition = {\n 'type': 'CrossFilter',\n 'metadata': {},\n 'params': [{\n 'name': 'fields',\n 'type': 'field',\n 'array': true,\n 'required': true\n }, {\n 'name': 'query',\n 'type': 'array',\n 'array': true,\n 'required': true,\n 'content': {\n 'type': 'number',\n 'array': true,\n 'length': 2\n }\n }]\n};\ninherits(CrossFilter, Transform, {\n transform(_, pulse) {\n if (!this._dims) {\n return this.init(_, pulse);\n } else {\n var init = _.modified('fields') || _.fields.some(f => pulse.modified(f.fields));\n\n return init ? this.reinit(_, pulse) : this.eval(_, pulse);\n }\n },\n\n init(_, pulse) {\n const fields = _.fields,\n query = _.query,\n indices = this._indices = {},\n dims = this._dims = [],\n m = query.length;\n let i = 0,\n key,\n index; // instantiate indices and dimensions\n\n for (; i < m; ++i) {\n key = fields[i].fname;\n index = indices[key] || (indices[key] = SortedIndex());\n dims.push(Dimension(index, i, query[i]));\n }\n\n return this.eval(_, pulse);\n },\n\n reinit(_, pulse) {\n const output = pulse.materialize().fork(),\n fields = _.fields,\n query = _.query,\n indices = this._indices,\n dims = this._dims,\n bits = this.value,\n curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(),\n out = output.rem = output.add,\n mod = output.mod,\n m = query.length,\n adds = {};\n let add, index, key, mods, remMap, modMap, i, n, f; // set prev to current state\n\n prev.set(curr); // if pulse has remove tuples, process them first\n\n if (pulse.rem.length) {\n remMap = this.remove(_, pulse, output);\n } // if pulse has added tuples, add them to state\n\n\n if (pulse.add.length) {\n bits.add(pulse.add);\n } // if pulse has modified tuples, create an index map\n\n\n if (pulse.mod.length) {\n modMap = {};\n\n for (mods = pulse.mod, i = 0, n = mods.length; i < n; ++i) {\n modMap[mods[i]._index] = 1;\n }\n } // re-initialize indices as needed, update curr bitmap\n\n\n for (i = 0; i < m; ++i) {\n f = fields[i];\n\n if (!dims[i] || _.modified('fields', i) || pulse.modified(f.fields)) {\n key = f.fname;\n\n if (!(add = adds[key])) {\n indices[key] = index = SortedIndex();\n adds[key] = add = index.insert(f, pulse.source, 0);\n }\n\n dims[i] = Dimension(index, i, query[i]).onAdd(add, curr);\n }\n } // visit each tuple\n // if filter state changed, push index to add/rem\n // else if in mod and passes a filter, push index to mod\n\n\n for (i = 0, n = bits.data().length; i < n; ++i) {\n if (remMap[i]) {\n // skip if removed tuple\n continue;\n } else if (prev[i] !== curr[i]) {\n // add if state changed\n out.push(i);\n } else if (modMap[i] && curr[i] !== all) {\n // otherwise, pass mods through\n mod.push(i);\n }\n }\n\n bits.mask = (1 << m) - 1;\n return output;\n },\n\n eval(_, pulse) {\n const output = pulse.materialize().fork(),\n m = this._dims.length;\n let mask = 0;\n\n if (pulse.rem.length) {\n this.remove(_, pulse, output);\n mask |= (1 << m) - 1;\n }\n\n if (_.modified('query') && !_.modified('fields')) {\n mask |= this.update(_, pulse, output);\n }\n\n if (pulse.add.length) {\n this.insert(_, pulse, output);\n mask |= (1 << m) - 1;\n }\n\n if (pulse.mod.length) {\n this.modify(pulse, output);\n mask |= (1 << m) - 1;\n }\n\n this.value.mask = mask;\n return output;\n },\n\n insert(_, pulse, output) {\n const tuples = pulse.add,\n bits = this.value,\n dims = this._dims,\n indices = this._indices,\n fields = _.fields,\n adds = {},\n out = output.add,\n n = bits.size() + tuples.length,\n m = dims.length;\n let k = bits.size(),\n j,\n key,\n add; // resize bitmaps and add tuples as needed\n\n bits.resize(n, m);\n bits.add(tuples);\n const curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(); // add to dimensional indices\n\n for (j = 0; j < m; ++j) {\n key = fields[j].fname;\n add = adds[key] || (adds[key] = indices[key].insert(fields[j], tuples, k));\n dims[j].onAdd(add, curr);\n } // set previous filters, output if passes at least one filter\n\n\n for (; k < n; ++k) {\n prev[k] = all;\n if (curr[k] !== all) out.push(k);\n }\n },\n\n modify(pulse, output) {\n const out = output.mod,\n bits = this.value,\n curr = bits.curr(),\n all = bits.all(),\n tuples = pulse.mod;\n let i, n, k;\n\n for (i = 0, n = tuples.length; i < n; ++i) {\n k = tuples[i]._index;\n if (curr[k] !== all) out.push(k);\n }\n },\n\n remove(_, pulse, output) {\n const indices = this._indices,\n bits = this.value,\n curr = bits.curr(),\n prev = bits.prev(),\n all = bits.all(),\n map = {},\n out = output.rem,\n tuples = pulse.rem;\n let i, n, k, f; // process tuples, output if passes at least one filter\n\n for (i = 0, n = tuples.length; i < n; ++i) {\n k = tuples[i]._index;\n map[k] = 1; // build index map\n\n prev[k] = f = curr[k];\n curr[k] = all;\n if (f !== all) out.push(k);\n } // remove from dimensional indices\n\n\n for (k in indices) {\n indices[k].remove(n, map);\n }\n\n this.reindex(pulse, n, map);\n return map;\n },\n\n // reindex filters and indices after propagation completes\n reindex(pulse, num, map) {\n const indices = this._indices,\n bits = this.value;\n pulse.runAfter(() => {\n const indexMap = bits.remove(num, map);\n\n for (const key in indices) indices[key].reindex(indexMap);\n });\n },\n\n update(_, pulse, output) {\n const dims = this._dims,\n query = _.query,\n stamp = pulse.stamp,\n m = dims.length;\n let mask = 0,\n i,\n q; // survey how many queries have changed\n\n output.filters = 0;\n\n for (q = 0; q < m; ++q) {\n if (_.modified('query', q)) {\n i = q;\n ++mask;\n }\n }\n\n if (mask === 1) {\n // only one query changed, use more efficient update\n mask = dims[i].one;\n this.incrementOne(dims[i], query[i], output.add, output.rem);\n } else {\n // multiple queries changed, perform full record keeping\n for (q = 0, mask = 0; q < m; ++q) {\n if (!_.modified('query', q)) continue;\n mask |= dims[q].one;\n this.incrementAll(dims[q], query[q], stamp, output.add);\n output.rem = output.add; // duplicate add/rem for downstream resolve\n }\n }\n\n return mask;\n },\n\n incrementAll(dim, query, stamp, out) {\n const bits = this.value,\n seen = bits.seen(),\n curr = bits.curr(),\n prev = bits.prev(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one;\n let i, j, k; // Fast incremental update based on previous lo index.\n\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n\n curr[k] ^= one;\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n\n curr[k] ^= one;\n }\n } // Fast incremental update based on previous hi index.\n\n\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n\n curr[k] ^= one;\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n\n curr[k] ^= one;\n }\n }\n\n dim.range = query.slice();\n },\n\n incrementOne(dim, query, add, rem) {\n const bits = this.value,\n curr = bits.curr(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one;\n let i, j, k; // Fast incremental update based on previous lo index.\n\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n } // Fast incremental update based on previous hi index.\n\n\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n\n dim.range = query.slice();\n }\n\n});\n\n/**\n * Selectively filters tuples by resolving against a filter bitmap.\n * Useful for processing the output of a cross-filter transform.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.ignore - A bit mask indicating which filters to ignore.\n * @param {object} params.filter - The per-tuple filter bitmaps. Typically this\n * parameter value is a reference to a {@link CrossFilter} transform.\n */\n\nfunction ResolveFilter(params) {\n Transform.call(this, null, params);\n}\nResolveFilter.Definition = {\n 'type': 'ResolveFilter',\n 'metadata': {},\n 'params': [{\n 'name': 'ignore',\n 'type': 'number',\n 'required': true,\n 'description': 'A bit mask indicating which filters to ignore.'\n }, {\n 'name': 'filter',\n 'type': 'object',\n 'required': true,\n 'description': 'Per-tuple filter bitmaps from a CrossFilter transform.'\n }]\n};\ninherits(ResolveFilter, Transform, {\n transform(_, pulse) {\n const ignore = ~(_.ignore || 0),\n // bit mask where zeros -> dims to ignore\n bitmap = _.filter,\n mask = bitmap.mask; // exit early if no relevant filter changes\n\n if ((mask & ignore) === 0) return pulse.StopPropagation;\n\n const output = pulse.fork(pulse.ALL),\n data = bitmap.data(),\n curr = bitmap.curr(),\n prev = bitmap.prev(),\n pass = k => !(curr[k] & ignore) ? data[k] : null; // propagate all mod tuples that pass the filter\n\n\n output.filter(output.MOD, pass); // determine add & rem tuples via filter functions\n // for efficiency, we do *not* populate new arrays,\n // instead we add filter functions applied downstream\n\n if (!(mask & mask - 1)) {\n // only one filter changed\n output.filter(output.ADD, pass);\n output.filter(output.REM, k => (curr[k] & ignore) === mask ? data[k] : null);\n } else {\n // multiple filters changed\n output.filter(output.ADD, k => {\n const c = curr[k] & ignore,\n f = !c && c ^ prev[k] & ignore;\n return f ? data[k] : null;\n });\n output.filter(output.REM, k => {\n const c = curr[k] & ignore,\n f = c && !(c ^ (c ^ prev[k] & ignore));\n return f ? data[k] : null;\n });\n } // add filter to source data in case of reflow...\n\n\n return output.filter(output.SOURCE, t => pass(t._index));\n }\n\n});\n\nexport { CrossFilter as crossfilter, ResolveFilter as resolvefilter };\n","export default function(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n","import { error, toSet, isFunction, isString, hasOwnProperty } from 'vega-util';\n\nconst RawCode = 'RawCode';\nconst Literal = 'Literal';\nconst Property = 'Property';\nconst Identifier = 'Identifier';\nconst ArrayExpression = 'ArrayExpression';\nconst BinaryExpression = 'BinaryExpression';\nconst CallExpression = 'CallExpression';\nconst ConditionalExpression = 'ConditionalExpression';\nconst LogicalExpression = 'LogicalExpression';\nconst MemberExpression = 'MemberExpression';\nconst ObjectExpression = 'ObjectExpression';\nconst UnaryExpression = 'UnaryExpression';\nfunction ASTNode(type) {\n this.type = type;\n}\n\nASTNode.prototype.visit = function (visitor) {\n let c, i, n;\n if (visitor(this)) return 1;\n\n for (c = children(this), i = 0, n = c.length; i < n; ++i) {\n if (c[i].visit(visitor)) return 1;\n }\n};\n\nfunction children(node) {\n switch (node.type) {\n case ArrayExpression:\n return node.elements;\n\n case BinaryExpression:\n case LogicalExpression:\n return [node.left, node.right];\n\n case CallExpression:\n return [node.callee].concat(node.arguments);\n\n case ConditionalExpression:\n return [node.test, node.consequent, node.alternate];\n\n case MemberExpression:\n return [node.object, node.property];\n\n case ObjectExpression:\n return node.properties;\n\n case Property:\n return [node.key, node.value];\n\n case UnaryExpression:\n return [node.argument];\n\n case Identifier:\n case Literal:\n case RawCode:\n default:\n return [];\n }\n}\n\n/*\n The following expression parser is based on Esprima (http://esprima.org/).\n Original header comment and license for Esprima is included here:\n\n Copyright (C) 2013 Ariya Hidayat \n Copyright (C) 2013 Thaddee Tyl \n Copyright (C) 2013 Mathias Bynens \n Copyright (C) 2012 Ariya Hidayat \n Copyright (C) 2012 Mathias Bynens \n Copyright (C) 2012 Joost-Wim Boekesteijn \n Copyright (C) 2012 Kris Kowal \n Copyright (C) 2012 Yusuke Suzuki \n Copyright (C) 2012 Arpad Borsos \n Copyright (C) 2011 Ariya Hidayat \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nvar TokenName, source, index, length, lookahead;\nvar TokenBooleanLiteral = 1,\n TokenEOF = 2,\n TokenIdentifier = 3,\n TokenKeyword = 4,\n TokenNullLiteral = 5,\n TokenNumericLiteral = 6,\n TokenPunctuator = 7,\n TokenStringLiteral = 8,\n TokenRegularExpression = 9;\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\nvar SyntaxArrayExpression = 'ArrayExpression',\n SyntaxBinaryExpression = 'BinaryExpression',\n SyntaxCallExpression = 'CallExpression',\n SyntaxConditionalExpression = 'ConditionalExpression',\n SyntaxIdentifier = 'Identifier',\n SyntaxLiteral = 'Literal',\n SyntaxLogicalExpression = 'LogicalExpression',\n SyntaxMemberExpression = 'MemberExpression',\n SyntaxObjectExpression = 'ObjectExpression',\n SyntaxProperty = 'Property',\n SyntaxUnaryExpression = 'UnaryExpression'; // Error messages should be identical to V8.\n\nvar MessageUnexpectedToken = 'Unexpected token %0',\n MessageUnexpectedNumber = 'Unexpected number',\n MessageUnexpectedString = 'Unexpected string',\n MessageUnexpectedIdentifier = 'Unexpected identifier',\n MessageUnexpectedReserved = 'Unexpected reserved word',\n MessageUnexpectedEOS = 'Unexpected end of input',\n MessageInvalidRegExp = 'Invalid regular expression',\n MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\nvar ILLEGAL = 'ILLEGAL',\n DISABLED = 'Disabled.'; // See also tools/generate-unicode-regex.py.\n\nvar RegexNonAsciiIdentifierStart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'),\n // eslint-disable-next-line no-misleading-character-class\nRegexNonAsciiIdentifierPart = new RegExp('[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]'); // Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n /* istanbul ignore next */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n}\n\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 && ch <= 0x39; // 0..9\n}\n\nfunction isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\n\nfunction isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n} // 7.2 White Space\n\n\nfunction isWhiteSpace(ch) {\n return ch === 0x20 || ch === 0x09 || ch === 0x0B || ch === 0x0C || ch === 0xA0 || ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0;\n} // 7.3 Line Terminators\n\n\nfunction isLineTerminator(ch) {\n return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029;\n} // 7.6 Identifier Names and Identifiers\n\n\nfunction isIdentifierStart(ch) {\n return ch === 0x24 || ch === 0x5F || // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A || // A..Z\n ch >= 0x61 && ch <= 0x7A || // a..z\n ch === 0x5C || // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch));\n}\n\nfunction isIdentifierPart(ch) {\n return ch === 0x24 || ch === 0x5F || // $ (dollar) and _ (underscore)\n ch >= 0x41 && ch <= 0x5A || // A..Z\n ch >= 0x61 && ch <= 0x7A || // a..z\n ch >= 0x30 && ch <= 0x39 || // 0..9\n ch === 0x5C || // \\ (backslash)\n ch >= 0x80 && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch));\n} // 7.6.1.1 Keywords\n\n\nconst keywords = {\n 'if': 1,\n 'in': 1,\n 'do': 1,\n 'var': 1,\n 'for': 1,\n 'new': 1,\n 'try': 1,\n 'let': 1,\n 'this': 1,\n 'else': 1,\n 'case': 1,\n 'void': 1,\n 'with': 1,\n 'enum': 1,\n 'while': 1,\n 'break': 1,\n 'catch': 1,\n 'throw': 1,\n 'const': 1,\n 'yield': 1,\n 'class': 1,\n 'super': 1,\n 'return': 1,\n 'typeof': 1,\n 'delete': 1,\n 'switch': 1,\n 'export': 1,\n 'import': 1,\n 'public': 1,\n 'static': 1,\n 'default': 1,\n 'finally': 1,\n 'extends': 1,\n 'package': 1,\n 'private': 1,\n 'function': 1,\n 'continue': 1,\n 'debugger': 1,\n 'interface': 1,\n 'protected': 1,\n 'instanceof': 1,\n 'implements': 1\n};\n\nfunction skipComment() {\n while (index < length) {\n const ch = source.charCodeAt(index);\n\n if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n ++index;\n } else {\n break;\n }\n }\n}\n\nfunction scanHexEscape(prefix) {\n var i,\n len,\n ch,\n code = 0;\n len = prefix === 'u' ? 4 : 2;\n\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n return String.fromCharCode(code);\n}\n\nfunction scanUnicodeCodePointEscape() {\n var ch, code, cu1, cu2;\n ch = source[index];\n code = 0; // At least, one hex digit is required.\n\n if (ch === '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n while (index < length) {\n ch = source[index++];\n\n if (!isHexDigit(ch)) {\n break;\n }\n\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n\n if (code > 0x10FFFF || ch !== '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } // UTF-16 Encoding\n\n\n if (code <= 0xFFFF) {\n return String.fromCharCode(code);\n }\n\n cu1 = (code - 0x10000 >> 10) + 0xD800;\n cu2 = (code - 0x10000 & 1023) + 0xDC00;\n return String.fromCharCode(cu1, cu2);\n}\n\nfunction getEscapedIdentifier() {\n var ch, id;\n ch = source.charCodeAt(index++);\n id = String.fromCharCode(ch); // '\\u' (U+005C, U+0075) denotes an escaped character.\n\n if (ch === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n ++index;\n ch = scanHexEscape('u');\n\n if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n id = ch;\n }\n\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (!isIdentifierPart(ch)) {\n break;\n }\n\n ++index;\n id += String.fromCharCode(ch); // '\\u' (U+005C, U+0075) denotes an escaped character.\n\n if (ch === 0x5C) {\n id = id.substr(0, id.length - 1);\n\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n ++index;\n ch = scanHexEscape('u');\n\n if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n id += ch;\n }\n }\n\n return id;\n}\n\nfunction getIdentifier() {\n var start, ch;\n start = index++;\n\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getEscapedIdentifier();\n }\n\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n}\n\nfunction scanIdentifier() {\n var start, id, type;\n start = index; // Backslash (U+005C) starts an escaped character.\n\n id = source.charCodeAt(index) === 0x5C ? getEscapedIdentifier() : getIdentifier(); // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n\n if (id.length === 1) {\n type = TokenIdentifier;\n } else if (keywords.hasOwnProperty(id)) {\n // eslint-disable-line no-prototype-builtins\n type = TokenKeyword;\n } else if (id === 'null') {\n type = TokenNullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = TokenBooleanLiteral;\n } else {\n type = TokenIdentifier;\n }\n\n return {\n type: type,\n value: id,\n start: start,\n end: index\n };\n} // 7.7 Punctuators\n\n\nfunction scanPunctuator() {\n var start = index,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2,\n ch3,\n ch4;\n\n switch (code) {\n // Check for most common single-character punctuators.\n case 0x2E: // . dot\n\n case 0x28: // ( open bracket\n\n case 0x29: // ) close bracket\n\n case 0x3B: // ; semicolon\n\n case 0x2C: // , comma\n\n case 0x7B: // { open curly brace\n\n case 0x7D: // } close curly brace\n\n case 0x5B: // [\n\n case 0x5D: // ]\n\n case 0x3A: // :\n\n case 0x3F: // ?\n\n case 0x7E:\n // ~\n ++index;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code),\n start: start,\n end: index\n };\n\n default:\n code2 = source.charCodeAt(index + 1); // '=' (U+003D) marks an assignment or comparison operator.\n\n if (code2 === 0x3D) {\n switch (code) {\n case 0x2B: // +\n\n case 0x2D: // -\n\n case 0x2F: // /\n\n case 0x3C: // <\n\n case 0x3E: // >\n\n case 0x5E: // ^\n\n case 0x7C: // |\n\n case 0x25: // %\n\n case 0x26: // &\n\n case 0x2A:\n // *\n index += 2;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n start: start,\n end: index\n };\n\n case 0x21: // !\n\n case 0x3D:\n // =\n index += 2; // !== and ===\n\n if (source.charCodeAt(index) === 0x3D) {\n ++index;\n }\n\n return {\n type: TokenPunctuator,\n value: source.slice(start, index),\n start: start,\n end: index\n };\n }\n }\n\n } // 4-character punctuator: >>>=\n\n\n ch4 = source.substr(index, 4);\n\n if (ch4 === '>>>=') {\n index += 4;\n return {\n type: TokenPunctuator,\n value: ch4,\n start: start,\n end: index\n };\n } // 3-character punctuators: === !== >>> <<= >>=\n\n\n ch3 = ch4.substr(0, 3);\n\n if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n index += 3;\n return {\n type: TokenPunctuator,\n value: ch3,\n start: start,\n end: index\n };\n } // Other 2-character punctuators: ++ -- << >> && ||\n\n\n ch2 = ch3.substr(0, 2);\n\n if (ch1 === ch2[1] && '+-<>&|'.indexOf(ch1) >= 0 || ch2 === '=>') {\n index += 2;\n return {\n type: TokenPunctuator,\n value: ch2,\n start: start,\n end: index\n };\n }\n\n if (ch2 === '//') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } // 1-character punctuators: < > = ! + - * % & | ^ /\n\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;\n return {\n type: TokenPunctuator,\n value: ch1,\n start: start,\n end: index\n };\n }\n\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n} // 7.8.3 Numeric Literals\n\n\nfunction scanHexLiteral(start) {\n let number = '';\n\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n\n number += source[index++];\n }\n\n if (number.length === 0) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt('0x' + number, 16),\n start: start,\n end: index\n };\n}\n\nfunction scanOctalLiteral(start) {\n let number = '0' + source[index++];\n\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n\n number += source[index++];\n }\n\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt(number, 8),\n octal: true,\n start: start,\n end: index\n };\n}\n\nfunction scanNumericLiteral() {\n var number, start, ch;\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || ch === '.', 'Numeric literal must start with a decimal digit or a decimal point');\n start = index;\n number = '';\n\n if (ch !== '.') {\n number = source[index++];\n ch = source[index]; // Hex number starts with '0x'.\n // Octal number starts with '0'.\n\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n\n if (isOctalDigit(ch)) {\n return scanOctalLiteral(start);\n } // decimal number starts with '0' such as '09' is illegal.\n\n\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n ch = source[index];\n\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseFloat(number),\n start: start,\n end: index\n };\n} // 7.8.4 String Literals\n\n\nfunction scanStringLiteral() {\n var str = '',\n quote,\n start,\n ch,\n code,\n octal = false;\n quote = source[index];\n assert(quote === '\\'' || quote === '\"', 'String literal must starts with a quote');\n start = index;\n ++index;\n\n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n str += scanHexEscape(ch);\n }\n\n break;\n\n case 'n':\n str += '\\n';\n break;\n\n case 'r':\n str += '\\r';\n break;\n\n case 't':\n str += '\\t';\n break;\n\n case 'b':\n str += '\\b';\n break;\n\n case 'f':\n str += '\\f';\n break;\n\n case 'v':\n str += '\\x0B';\n break;\n\n default:\n if (isOctalDigit(ch)) {\n code = '01234567'.indexOf(ch); // \\0 is not octal escape sequence\n\n if (code !== 0) {\n octal = true;\n }\n\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]); // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n\n if ('0123'.indexOf(ch) >= 0 && index < length && isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n\n str += String.fromCharCode(code);\n } else {\n str += ch;\n }\n\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenStringLiteral,\n value: str,\n octal: octal,\n start: start,\n end: index\n };\n}\n\nfunction testRegExp(pattern, flags) {\n let tmp = pattern;\n\n if (flags.indexOf('u') >= 0) {\n // Replace each astral symbol and every Unicode code point\n // escape sequence with a single ASCII symbol to avoid throwing on\n // regular expressions that are only valid in combination with the\n // `/u` flag.\n // Note: replacing with the ASCII symbol `x` might cause false\n // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n // perfectly valid pattern that is equivalent to `[a-b]`, but it\n // would be replaced by `[x-b]` which throws an error.\n tmp = tmp.replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, ($0, $1) => {\n if (parseInt($1, 16) <= 0x10FFFF) {\n return 'x';\n }\n\n throwError({}, MessageInvalidRegExp);\n }).replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n } // First, detect invalid regular expressions.\n\n\n try {\n new RegExp(tmp);\n } catch (e) {\n throwError({}, MessageInvalidRegExp);\n } // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n\n\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n}\n\nfunction scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n classMarker = false;\n terminated = false;\n\n while (index < length) {\n ch = source[index++];\n str += ch;\n\n if (ch === '\\\\') {\n ch = source[index++]; // ECMA-262 7.8.5\n\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n }\n\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n\n if (!terminated) {\n throwError({}, MessageUnterminatedRegExp);\n } // Exclude leading and trailing slash.\n\n\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n}\n\nfunction scanRegExpFlags() {\n var ch, str, flags;\n str = '';\n flags = '';\n\n while (index < length) {\n ch = source[index];\n\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n\n ++index;\n\n if (ch === '\\\\' && index < length) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } else {\n flags += ch;\n str += ch;\n }\n }\n\n if (flags.search(/[^gimuy]/g) >= 0) {\n throwError({}, MessageInvalidRegExp, flags);\n }\n\n return {\n value: flags,\n literal: str\n };\n}\n\nfunction scanRegExp() {\n var start, body, flags, value;\n lookahead = null;\n skipComment();\n start = index;\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n}\n\nfunction isIdentifierName(token) {\n return token.type === TokenIdentifier || token.type === TokenKeyword || token.type === TokenBooleanLiteral || token.type === TokenNullLiteral;\n}\n\nfunction advance() {\n skipComment();\n\n if (index >= length) {\n return {\n type: TokenEOF,\n start: index,\n end: index\n };\n }\n\n const ch = source.charCodeAt(index);\n\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n } // Very common: ( and ) and ;\n\n\n if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n return scanPunctuator();\n } // String literal starts with single quote (U+0027) or double quote (U+0022).\n\n\n if (ch === 0x27 || ch === 0x22) {\n return scanStringLiteral();\n } // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n\n\n if (ch === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n}\n\nfunction lex() {\n const token = lookahead;\n index = token.end;\n lookahead = advance();\n index = token.end;\n return token;\n}\n\nfunction peek() {\n const pos = index;\n lookahead = advance();\n index = pos;\n}\n\nfunction finishArrayExpression(elements) {\n const node = new ASTNode(SyntaxArrayExpression);\n node.elements = elements;\n return node;\n}\n\nfunction finishBinaryExpression(operator, left, right) {\n const node = new ASTNode(operator === '||' || operator === '&&' ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n node.operator = operator;\n node.left = left;\n node.right = right;\n return node;\n}\n\nfunction finishCallExpression(callee, args) {\n const node = new ASTNode(SyntaxCallExpression);\n node.callee = callee;\n node.arguments = args;\n return node;\n}\n\nfunction finishConditionalExpression(test, consequent, alternate) {\n const node = new ASTNode(SyntaxConditionalExpression);\n node.test = test;\n node.consequent = consequent;\n node.alternate = alternate;\n return node;\n}\n\nfunction finishIdentifier(name) {\n const node = new ASTNode(SyntaxIdentifier);\n node.name = name;\n return node;\n}\n\nfunction finishLiteral(token) {\n const node = new ASTNode(SyntaxLiteral);\n node.value = token.value;\n node.raw = source.slice(token.start, token.end);\n\n if (token.regex) {\n if (node.raw === '//') {\n node.raw = '/(?:)/';\n }\n\n node.regex = token.regex;\n }\n\n return node;\n}\n\nfunction finishMemberExpression(accessor, object, property) {\n const node = new ASTNode(SyntaxMemberExpression);\n node.computed = accessor === '[';\n node.object = object;\n node.property = property;\n if (!node.computed) property.member = true;\n return node;\n}\n\nfunction finishObjectExpression(properties) {\n const node = new ASTNode(SyntaxObjectExpression);\n node.properties = properties;\n return node;\n}\n\nfunction finishProperty(kind, key, value) {\n const node = new ASTNode(SyntaxProperty);\n node.key = key;\n node.value = value;\n node.kind = kind;\n return node;\n}\n\nfunction finishUnaryExpression(operator, argument) {\n const node = new ASTNode(SyntaxUnaryExpression);\n node.operator = operator;\n node.argument = argument;\n node.prefix = true;\n return node;\n} // Throw an exception\n\n\nfunction throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(/%(\\d)/g, (whole, index) => {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n });\n error = new Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n} // Throw an exception because of the token.\n\n\nfunction throwUnexpected(token) {\n if (token.type === TokenEOF) {\n throwError(token, MessageUnexpectedEOS);\n }\n\n if (token.type === TokenNumericLiteral) {\n throwError(token, MessageUnexpectedNumber);\n }\n\n if (token.type === TokenStringLiteral) {\n throwError(token, MessageUnexpectedString);\n }\n\n if (token.type === TokenIdentifier) {\n throwError(token, MessageUnexpectedIdentifier);\n }\n\n if (token.type === TokenKeyword) {\n throwError(token, MessageUnexpectedReserved);\n } // BooleanLiteral, NullLiteral, or Punctuator.\n\n\n throwError(token, MessageUnexpectedToken, token.value);\n} // Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\n\nfunction expect(value) {\n const token = lex();\n\n if (token.type !== TokenPunctuator || token.value !== value) {\n throwUnexpected(token);\n }\n} // Return true if the next token matches the specified punctuator.\n\n\nfunction match(value) {\n return lookahead.type === TokenPunctuator && lookahead.value === value;\n} // Return true if the next token matches the specified keyword\n\n\nfunction matchKeyword(keyword) {\n return lookahead.type === TokenKeyword && lookahead.value === keyword;\n} // 11.1.4 Array Initialiser\n\n\nfunction parseArrayInitialiser() {\n const elements = [];\n index = lookahead.start;\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseConditionalExpression());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n lex();\n return finishArrayExpression(elements);\n} // 11.1.5 Object Initialiser\n\n\nfunction parseObjectPropertyKey() {\n index = lookahead.start;\n const token = lex(); // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n if (token.octal) {\n throwError(token, MessageStrictOctalLiteral);\n }\n\n return finishLiteral(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseObjectProperty() {\n var token, key, id, value;\n index = lookahead.start;\n token = lookahead;\n\n if (token.type === TokenIdentifier) {\n id = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', id, value);\n }\n\n if (token.type === TokenEOF || token.type === TokenPunctuator) {\n throwUnexpected(token);\n } else {\n key = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', key, value);\n }\n}\n\nfunction parseObjectInitialiser() {\n var properties = [],\n property,\n name,\n key,\n map = {},\n toString = String;\n index = lookahead.start;\n expect('{');\n\n while (!match('}')) {\n property = parseObjectProperty();\n\n if (property.key.type === SyntaxIdentifier) {\n name = property.key.name;\n } else {\n name = toString(property.key.value);\n }\n\n key = '$' + name;\n\n if (Object.prototype.hasOwnProperty.call(map, key)) {\n throwError({}, MessageStrictDuplicateProperty);\n } else {\n map[key] = true;\n }\n\n properties.push(property);\n\n if (!match('}')) {\n expect(',');\n }\n }\n\n expect('}');\n return finishObjectExpression(properties);\n} // 11.1.6 The Grouping Operator\n\n\nfunction parseGroupExpression() {\n expect('(');\n const expr = parseExpression();\n expect(')');\n return expr;\n} // 11.1 Primary Expressions\n\n\nconst legalKeywords = {\n 'if': 1\n};\n\nfunction parsePrimaryExpression() {\n var type, token, expr;\n\n if (match('(')) {\n return parseGroupExpression();\n }\n\n if (match('[')) {\n return parseArrayInitialiser();\n }\n\n if (match('{')) {\n return parseObjectInitialiser();\n }\n\n type = lookahead.type;\n index = lookahead.start;\n\n if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n expr = finishIdentifier(lex().value);\n } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n if (lookahead.octal) {\n throwError(lookahead, MessageStrictOctalLiteral);\n }\n\n expr = finishLiteral(lex());\n } else if (type === TokenKeyword) {\n throw new Error(DISABLED);\n } else if (type === TokenBooleanLiteral) {\n token = lex();\n token.value = token.value === 'true';\n expr = finishLiteral(token);\n } else if (type === TokenNullLiteral) {\n token = lex();\n token.value = null;\n expr = finishLiteral(token);\n } else if (match('/') || match('/=')) {\n expr = finishLiteral(scanRegExp());\n peek();\n } else {\n throwUnexpected(lex());\n }\n\n return expr;\n} // 11.2 Left-Hand-Side Expressions\n\n\nfunction parseArguments() {\n const args = [];\n expect('(');\n\n if (!match(')')) {\n while (index < length) {\n args.push(parseConditionalExpression());\n\n if (match(')')) {\n break;\n }\n\n expect(',');\n }\n }\n\n expect(')');\n return args;\n}\n\nfunction parseNonComputedProperty() {\n index = lookahead.start;\n const token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseNonComputedMember() {\n expect('.');\n return parseNonComputedProperty();\n}\n\nfunction parseComputedMember() {\n expect('[');\n const expr = parseExpression();\n expect(']');\n return expr;\n}\n\nfunction parseLeftHandSideExpressionAllowCall() {\n var expr, args, property;\n expr = parsePrimaryExpression();\n\n for (;;) {\n if (match('.')) {\n property = parseNonComputedMember();\n expr = finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = finishCallExpression(expr, args);\n } else if (match('[')) {\n property = parseComputedMember();\n expr = finishMemberExpression('[', expr, property);\n } else {\n break;\n }\n }\n\n return expr;\n} // 11.3 Postfix Expressions\n\n\nfunction parsePostfixExpression() {\n const expr = parseLeftHandSideExpressionAllowCall();\n\n if (lookahead.type === TokenPunctuator) {\n if (match('++') || match('--')) {\n throw new Error(DISABLED);\n }\n }\n\n return expr;\n} // 11.4 Unary Operators\n\n\nfunction parseUnaryExpression() {\n var token, expr;\n\n if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n throw new Error(DISABLED);\n } else if (match('+') || match('-') || match('~') || match('!')) {\n token = lex();\n expr = parseUnaryExpression();\n expr = finishUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw new Error(DISABLED);\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n}\n\nfunction binaryPrecedence(token) {\n let prec = 0;\n\n if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '|':\n prec = 3;\n break;\n\n case '^':\n prec = 4;\n break;\n\n case '&':\n prec = 5;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n case 'in':\n prec = 7;\n break;\n\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n }\n\n return prec;\n} // 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\n\nfunction parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n marker = lookahead;\n left = parseUnaryExpression();\n token = lookahead;\n prec = binaryPrecedence(token);\n\n if (prec === 0) {\n return left;\n }\n\n token.prec = prec;\n lex();\n markers = [marker, lookahead];\n right = parseUnaryExpression();\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n // Reduce: make a binary expression from the three topmost entries.\n while (stack.length > 2 && prec <= stack[stack.length - 2].prec) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = finishBinaryExpression(operator, left, right);\n stack.push(expr);\n } // Shift.\n\n\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = parseUnaryExpression();\n stack.push(expr);\n } // Final reduce to clean-up the stack.\n\n\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n\n while (i > 1) {\n markers.pop();\n expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n} // 11.12 Conditional Operator\n\n\nfunction parseConditionalExpression() {\n var expr, consequent, alternate;\n expr = parseBinaryExpression();\n\n if (match('?')) {\n lex();\n consequent = parseConditionalExpression();\n expect(':');\n alternate = parseConditionalExpression();\n expr = finishConditionalExpression(expr, consequent, alternate);\n }\n\n return expr;\n} // 11.14 Comma Operator\n\n\nfunction parseExpression() {\n const expr = parseConditionalExpression();\n\n if (match(',')) {\n throw new Error(DISABLED); // no sequence expressions\n }\n\n return expr;\n}\n\nfunction parser (code) {\n source = code;\n index = 0;\n length = source.length;\n lookahead = null;\n peek();\n const expr = parseExpression();\n\n if (lookahead.type !== TokenEOF) {\n throw new Error('Unexpect token after expression.');\n }\n\n return expr;\n}\n\nvar Constants = {\n NaN: 'NaN',\n E: 'Math.E',\n LN2: 'Math.LN2',\n LN10: 'Math.LN10',\n LOG2E: 'Math.LOG2E',\n LOG10E: 'Math.LOG10E',\n PI: 'Math.PI',\n SQRT1_2: 'Math.SQRT1_2',\n SQRT2: 'Math.SQRT2',\n MIN_VALUE: 'Number.MIN_VALUE',\n MAX_VALUE: 'Number.MAX_VALUE'\n};\n\nfunction Functions (codegen) {\n function fncall(name, args, cast, type) {\n let obj = codegen(args[0]);\n\n if (cast) {\n obj = cast + '(' + obj + ')';\n if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n }\n\n return obj + '.' + name + (type < 0 ? '' : type === 0 ? '()' : '(' + args.slice(1).map(codegen).join(',') + ')');\n }\n\n function fn(name, cast, type) {\n return args => fncall(name, args, cast, type);\n }\n\n const DATE = 'new Date',\n STRING = 'String',\n REGEXP = 'RegExp';\n return {\n // MATH functions\n isNaN: 'Number.isNaN',\n isFinite: 'Number.isFinite',\n abs: 'Math.abs',\n acos: 'Math.acos',\n asin: 'Math.asin',\n atan: 'Math.atan',\n atan2: 'Math.atan2',\n ceil: 'Math.ceil',\n cos: 'Math.cos',\n exp: 'Math.exp',\n floor: 'Math.floor',\n log: 'Math.log',\n max: 'Math.max',\n min: 'Math.min',\n pow: 'Math.pow',\n random: 'Math.random',\n round: 'Math.round',\n sin: 'Math.sin',\n sqrt: 'Math.sqrt',\n tan: 'Math.tan',\n clamp: function (args) {\n if (args.length < 3) error('Missing arguments to clamp function.');\n if (args.length > 3) error('Too many arguments to clamp function.');\n const a = args.map(codegen);\n return 'Math.max(' + a[1] + ', Math.min(' + a[2] + ',' + a[0] + '))';\n },\n // DATE functions\n now: 'Date.now',\n utc: 'Date.UTC',\n datetime: DATE,\n date: fn('getDate', DATE, 0),\n day: fn('getDay', DATE, 0),\n year: fn('getFullYear', DATE, 0),\n month: fn('getMonth', DATE, 0),\n hours: fn('getHours', DATE, 0),\n minutes: fn('getMinutes', DATE, 0),\n seconds: fn('getSeconds', DATE, 0),\n milliseconds: fn('getMilliseconds', DATE, 0),\n time: fn('getTime', DATE, 0),\n timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n utcdate: fn('getUTCDate', DATE, 0),\n utcday: fn('getUTCDay', DATE, 0),\n utcyear: fn('getUTCFullYear', DATE, 0),\n utcmonth: fn('getUTCMonth', DATE, 0),\n utchours: fn('getUTCHours', DATE, 0),\n utcminutes: fn('getUTCMinutes', DATE, 0),\n utcseconds: fn('getUTCSeconds', DATE, 0),\n utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n // sequence functions\n length: fn('length', null, -1),\n // STRING functions\n parseFloat: 'parseFloat',\n parseInt: 'parseInt',\n upper: fn('toUpperCase', STRING, 0),\n lower: fn('toLowerCase', STRING, 0),\n substring: fn('substring', STRING),\n split: fn('split', STRING),\n trim: fn('trim', STRING, 0),\n // REGEXP functions\n regexp: REGEXP,\n test: fn('test', REGEXP),\n // Control Flow functions\n if: function (args) {\n if (args.length < 3) error('Missing arguments to if function.');\n if (args.length > 3) error('Too many arguments to if function.');\n const a = args.map(codegen);\n return '(' + a[0] + '?' + a[1] + ':' + a[2] + ')';\n }\n };\n}\n\nfunction stripQuotes(s) {\n const n = s && s.length - 1;\n return n && (s[0] === '\"' && s[n] === '\"' || s[0] === '\\'' && s[n] === '\\'') ? s.slice(1, -1) : s;\n}\n\nfunction codegen (opt) {\n opt = opt || {};\n const allowed = opt.allowed ? toSet(opt.allowed) : {},\n forbidden = opt.forbidden ? toSet(opt.forbidden) : {},\n constants = opt.constants || Constants,\n functions = (opt.functions || Functions)(visit),\n globalvar = opt.globalvar,\n fieldvar = opt.fieldvar,\n outputGlobal = isFunction(globalvar) ? globalvar : id => `${globalvar}[\"${id}\"]`;\n let globals = {},\n fields = {},\n memberDepth = 0;\n\n function visit(ast) {\n if (isString(ast)) return ast;\n const generator = Generators[ast.type];\n if (generator == null) error('Unsupported type: ' + ast.type);\n return generator(ast);\n }\n\n const Generators = {\n Literal: n => n.raw,\n Identifier: n => {\n const id = n.name;\n\n if (memberDepth > 0) {\n return id;\n } else if (hasOwnProperty(forbidden, id)) {\n return error('Illegal identifier: ' + id);\n } else if (hasOwnProperty(constants, id)) {\n return constants[id];\n } else if (hasOwnProperty(allowed, id)) {\n return id;\n } else {\n globals[id] = 1;\n return outputGlobal(id);\n }\n },\n MemberExpression: n => {\n const d = !n.computed,\n o = visit(n.object);\n if (d) memberDepth += 1;\n const p = visit(n.property);\n\n if (o === fieldvar) {\n // strip quotes to sanitize field name (#1653)\n fields[stripQuotes(p)] = 1;\n }\n\n if (d) memberDepth -= 1;\n return o + (d ? '.' + p : '[' + p + ']');\n },\n CallExpression: n => {\n if (n.callee.type !== 'Identifier') {\n error('Illegal callee type: ' + n.callee.type);\n }\n\n const callee = n.callee.name,\n args = n.arguments,\n fn = hasOwnProperty(functions, callee) && functions[callee];\n if (!fn) error('Unrecognized function: ' + callee);\n return isFunction(fn) ? fn(args) : fn + '(' + args.map(visit).join(',') + ')';\n },\n ArrayExpression: n => '[' + n.elements.map(visit).join(',') + ']',\n BinaryExpression: n => '(' + visit(n.left) + ' ' + n.operator + ' ' + visit(n.right) + ')',\n UnaryExpression: n => '(' + n.operator + visit(n.argument) + ')',\n ConditionalExpression: n => '(' + visit(n.test) + '?' + visit(n.consequent) + ':' + visit(n.alternate) + ')',\n LogicalExpression: n => '(' + visit(n.left) + n.operator + visit(n.right) + ')',\n ObjectExpression: n => '{' + n.properties.map(visit).join(',') + '}',\n Property: n => {\n memberDepth += 1;\n const k = visit(n.key);\n memberDepth -= 1;\n return k + ':' + visit(n.value);\n }\n };\n\n function codegen(ast) {\n const result = {\n code: visit(ast),\n globals: Object.keys(globals),\n fields: Object.keys(fields)\n };\n globals = {};\n fields = {};\n return result;\n }\n\n codegen.functions = functions;\n codegen.constants = constants;\n return codegen;\n}\n\nexport { ASTNode, ArrayExpression, BinaryExpression, CallExpression, ConditionalExpression, Identifier, Literal, LogicalExpression, MemberExpression, ObjectExpression, Property, RawCode, UnaryExpression, codegen, Constants as constants, Functions as functions, parser as parse };\n","import { field, isDate, toNumber, isArray, inrange, extend, array, error, peek, hasOwnProperty } from 'vega-util';\nimport { Literal } from 'vega-expression';\n\nfunction ascending (a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n\nfunction bisector (f) {\n let delta = f;\n let compare = f;\n\n if (f.length === 1) {\n delta = (d, x) => f(d) - x;\n\n compare = ascendingComparator(f);\n }\n\n function left(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n\n while (lo < hi) {\n const mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;else hi = mid;\n }\n\n return lo;\n }\n\n function right(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n\n while (lo < hi) {\n const mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;else lo = mid + 1;\n }\n\n return lo;\n }\n\n function center(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {\n left,\n center,\n right\n };\n}\n\nfunction ascendingComparator(f) {\n return (d, x) => ascending(f(d), x);\n}\n\nconst Intersect = 'intersect';\nconst Union = 'union';\nconst VlMulti = 'vlMulti';\nconst VlPoint = 'vlPoint';\nconst Or = 'or';\nconst And = 'and';\n\nconst SELECTION_ID = '_vgsid_',\n TYPE_ENUM = 'E',\n TYPE_RANGE_INC = 'R',\n TYPE_RANGE_EXC = 'R-E',\n TYPE_RANGE_LE = 'R-LE',\n TYPE_RANGE_RE = 'R-RE',\n UNIT_INDEX = 'index:unit'; // TODO: revisit date coercion?\n\nfunction testPoint(datum, entry) {\n var fields = entry.fields,\n values = entry.values,\n n = fields.length,\n i = 0,\n dval,\n f;\n\n for (; i < n; ++i) {\n f = fields[i];\n f.getter = field.getter || field(f.field);\n dval = f.getter(datum);\n if (isDate(dval)) dval = toNumber(dval);\n if (isDate(values[i])) values[i] = toNumber(values[i]);\n if (isDate(values[i][0])) values[i] = values[i].map(toNumber);\n\n if (f.type === TYPE_ENUM) {\n // Enumerated fields can either specify individual values (single/multi selections)\n // or an array of values (interval selections).\n if (isArray(values[i]) ? values[i].indexOf(dval) < 0 : dval !== values[i]) {\n return false;\n }\n } else {\n if (f.type === TYPE_RANGE_INC) {\n if (!inrange(dval, values[i])) return false;\n } else if (f.type === TYPE_RANGE_RE) {\n // Discrete selection of bins test within the range [bin_start, bin_end).\n if (!inrange(dval, values[i], true, false)) return false;\n } else if (f.type === TYPE_RANGE_EXC) {\n // 'R-E'/'R-LE' included for completeness.\n if (!inrange(dval, values[i], false, false)) return false;\n } else if (f.type === TYPE_RANGE_LE) {\n if (!inrange(dval, values[i], false, true)) return false;\n }\n }\n }\n\n return true;\n}\n/**\n * Tests if a tuple is contained within an interactive selection.\n * @param {string} name - The name of the data set representing the selection.\n * Tuples in the dataset are of the form\n * {unit: string, fields: array, values: array<*>}.\n * Fielddef is of the form\n * {field: string, channel: string, type: 'E' | 'R'} where\n * 'type' identifies whether tuples in the dataset enumerate\n * values for the field, or specify a continuous range.\n * @param {object} datum - The tuple to test for inclusion.\n * @param {string} op - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @return {boolean} - True if the datum is in the selection, false otherwise.\n */\n\n\nfunction selectionTest(name, datum, op) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === Intersect,\n n = entries.length,\n i = 0,\n entry,\n miss,\n count,\n unit,\n b;\n\n for (; i < n; ++i) {\n entry = entries[i];\n\n if (unitIdx && intersect) {\n // multi selections union within the same unit and intersect across units.\n miss = miss || {};\n count = miss[unit = entry.unit] || 0; // if we've already matched this unit, skip.\n\n if (count === -1) continue;\n b = testPoint(datum, entry);\n miss[unit] = b ? -1 : ++count; // if we match and there are no other units return true\n // if we've missed against all tuples in this unit return false\n\n if (b && unitIdx.size === 1) return true;\n if (!b && count === unitIdx.get(unit).count) return false;\n } else {\n b = testPoint(datum, entry); // if we find a miss and we do require intersection return false\n // if we find a match and we don't require intersection return true\n\n if (intersect ^ b) return b;\n }\n } // if intersecting and we made it here, then we saw no misses\n // if not intersecting, then we saw no matches\n // if no active selections, return false\n\n\n return n && intersect;\n}\nconst selectionId = field(SELECTION_ID),\n bisect = bisector(selectionId),\n bisectLeft = bisect.left,\n bisectRight = bisect.right;\nfunction selectionIdTest(name, datum, op) {\n const data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === Intersect,\n value = selectionId(datum),\n index = bisectLeft(entries, value);\n if (index === entries.length) return false;\n if (selectionId(entries[index]) !== value) return false;\n\n if (unitIdx && intersect) {\n if (unitIdx.size === 1) return true;\n if (bisectRight(entries, value) - index < unitIdx.size) return false;\n }\n\n return true;\n}\n\n/**\n * Maps an array of scene graph items to an array of selection tuples.\n * @param {string} name - The name of the dataset representing the selection.\n * @param {string} unit - The name of the unit view.\n *\n * @returns {array} An array of selection entries for the given unit.\n */\n\nfunction selectionTuples(array, base) {\n return array.map(x => extend({\n values: base.fields.map(f => (f.getter || (f.getter = field(f.field)))(x.datum))\n }, base));\n}\n\n/**\n * Resolves selection for use as a scale domain or reads via the API.\n * @param {string} name - The name of the dataset representing the selection\n * @param {string} [op='union'] - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @param {boolean} isMulti - Identifies a \"multi\" selection to perform more\n * expensive resolution computation.\n * @param {boolean} vl5 - With Vega-Lite v5, \"multi\" selections are now called \"point\"\n * selections, and thus the resolved tuple should reflect this name.\n * This parameter allows us to reflect this change without triggering\n * a major version bump for Vega.\n * @returns {object} An object of selected fields and values.\n */\n\nfunction selectionResolve(name, op, isMulti, vl5) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n resolved = {},\n multiRes = {},\n types = {},\n entry,\n fields,\n values,\n unit,\n field,\n res,\n resUnit,\n type,\n union,\n n = entries.length,\n i = 0,\n j,\n m; // First union all entries within the same unit.\n\n for (; i < n; ++i) {\n entry = entries[i];\n unit = entry.unit;\n fields = entry.fields;\n values = entry.values;\n\n for (j = 0, m = fields.length; j < m; ++j) {\n field = fields[j];\n res = resolved[field.field] || (resolved[field.field] = {});\n resUnit = res[unit] || (res[unit] = []);\n types[field.field] = type = field.type.charAt(0);\n union = ops[type + '_union'];\n res[unit] = union(resUnit, array(values[j]));\n } // If the same multi-selection is repeated over views and projected over\n // an encoding, it may operate over different fields making it especially\n // tricky to reliably resolve it. At best, we can de-dupe identical entries\n // but doing so may be more computationally expensive than it is worth.\n // Instead, for now, we simply transform our store representation into\n // a more human-friendly one.\n\n\n if (isMulti) {\n resUnit = multiRes[unit] || (multiRes[unit] = []);\n resUnit.push(array(values).reduce((obj, curr, j) => (obj[fields[j].field] = curr, obj), {}));\n }\n } // Then resolve fields across units as per the op.\n\n\n op = op || Union;\n Object.keys(resolved).forEach(field => {\n resolved[field] = Object.keys(resolved[field]).map(unit => resolved[field][unit]).reduce((acc, curr) => acc === undefined ? curr : ops[types[field] + '_' + op](acc, curr));\n });\n entries = Object.keys(multiRes);\n\n if (isMulti && entries.length) {\n const key = vl5 ? VlPoint : VlMulti;\n resolved[key] = op === Union ? {\n [Or]: entries.reduce((acc, k) => (acc.push(...multiRes[k]), acc), [])\n } : {\n [And]: entries.map(k => ({\n [Or]: multiRes[k]\n }))\n };\n }\n\n return resolved;\n}\nvar ops = {\n E_union: function (base, value) {\n if (!base.length) return value;\n var i = 0,\n n = value.length;\n\n for (; i < n; ++i) if (base.indexOf(value[i]) < 0) base.push(value[i]);\n\n return base;\n },\n E_intersect: function (base, value) {\n return !base.length ? value : base.filter(v => value.indexOf(v) >= 0);\n },\n R_union: function (base, value) {\n var lo = toNumber(value[0]),\n hi = toNumber(value[1]);\n\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n\n if (!base.length) return [lo, hi];\n if (base[0] > lo) base[0] = lo;\n if (base[1] < hi) base[1] = hi;\n return base;\n },\n R_intersect: function (base, value) {\n var lo = toNumber(value[0]),\n hi = toNumber(value[1]);\n\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n\n if (!base.length) return [lo, hi];\n\n if (hi < base[0] || base[1] < lo) {\n return [];\n } else {\n if (base[0] < lo) base[0] = lo;\n if (base[1] > hi) base[1] = hi;\n }\n\n return base;\n }\n};\n\nconst DataPrefix = ':',\n IndexPrefix = '@';\nfunction selectionVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to selection functions must be a string literal.');\n const data = args[0].value,\n op = args.length >= 2 && peek(args).value,\n field = 'unit',\n indexName = IndexPrefix + field,\n dataName = DataPrefix + data; // eslint-disable-next-line no-prototype-builtins\n\n if (op === Intersect && !hasOwnProperty(params, indexName)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n } // eslint-disable-next-line no-prototype-builtins\n\n\n if (!hasOwnProperty(params, dataName)) {\n params[dataName] = scope.getData(data).tuplesRef();\n }\n}\n\nexport { selectionIdTest, selectionResolve, selectionTest, selectionTuples, selectionVisitor };\n","import { truthy, error, hasOwnProperty, isFunction, isString, stringValue, extend, isArray, isObject, field, peek, identity, array as array$1, isBoolean, isDate, isNumber, isRegExp, toBoolean, toDate, toNumber, toString, flush, lerp, pad, span, inrange, truncate, quarter, utcquarter, extent, clampRange, panLinear, panLog, panPow, panSymlog, zoomLinear, zoomLog, zoomPow, zoomSymlog } from 'vega-util';\nimport { Literal, constants, codegen, functions, parse, CallExpression } from 'vega-expression';\nimport { geoBounds as geoBounds$1, geoCentroid as geoCentroid$1, geoArea as geoArea$1 } from 'd3-geo';\nimport { rgb, lab, hcl, hsl } from 'd3-color';\nimport { isTuple } from 'vega-dataflow';\nimport { bandSpace, scale as scale$1, scaleFraction } from 'vega-scale';\nimport { Gradient, pathRender, pathParse, Bounds, intersect as intersect$1 } from 'vega-scenegraph';\nimport { selectionVisitor, selectionTest, selectionIdTest, selectionResolve, selectionTuples } from 'vega-selections';\nimport { random, cumulativeNormal, cumulativeLogNormal, cumulativeUniform, densityNormal, densityLogNormal, densityUniform, quantileNormal, quantileLogNormal, quantileUniform, sampleNormal, sampleLogNormal, sampleUniform } from 'vega-statistics';\nimport { utcOffset, utcSequence, timeOffset, timeSequence, timeUnitSpecifier, week, utcweek, dayofyear, utcdayofyear } from 'vega-time';\nimport { range as range$1 } from 'd3-array';\n\nfunction data(name) {\n const data = this.context.data[name];\n return data ? data.values.value : [];\n}\nfunction indata(name, field, value) {\n const index = this.context.data[name]['index:' + field],\n entry = index ? index.value.get(value) : undefined;\n return entry ? entry.count : entry;\n}\nfunction setdata(name, tuples) {\n const df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input;\n df.pulse(input, df.changeset().remove(truthy).insert(tuples));\n return 1;\n}\n\nfunction encode (item, name, retval) {\n if (item) {\n const df = this.context.dataflow,\n target = item.mark.source;\n df.pulse(target, df.changeset().encode(item, name));\n }\n\n return retval !== undefined ? retval : item;\n}\n\nconst wrap = method => function (value, spec) {\n const locale = this.context.dataflow.locale();\n return locale[method](spec)(value);\n};\n\nconst format = wrap('format');\nconst timeFormat = wrap('timeFormat');\nconst utcFormat = wrap('utcFormat');\nconst timeParse = wrap('timeParse');\nconst utcParse = wrap('utcParse');\nconst dateObj = new Date(2000, 0, 1);\n\nfunction time(month, day, specifier) {\n if (!Number.isInteger(month) || !Number.isInteger(day)) return '';\n dateObj.setYear(2000);\n dateObj.setMonth(month);\n dateObj.setDate(day);\n return timeFormat.call(this, dateObj, specifier);\n}\n\nfunction monthFormat(month) {\n return time.call(this, month, 1, '%B');\n}\nfunction monthAbbrevFormat(month) {\n return time.call(this, month, 1, '%b');\n}\nfunction dayFormat(day) {\n return time.call(this, 0, 2 + day, '%A');\n}\nfunction dayAbbrevFormat(day) {\n return time.call(this, 0, 2 + day, '%a');\n}\n\nconst DataPrefix = ':';\nconst IndexPrefix = '@';\nconst ScalePrefix = '%';\nconst SignalPrefix = '$';\n\nfunction dataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) {\n error('First argument to data functions must be a string literal.');\n }\n\n const data = args[0].value,\n dataName = DataPrefix + data;\n\n if (!hasOwnProperty(dataName, params)) {\n try {\n params[dataName] = scope.getData(data).tuplesRef();\n } catch (err) {// if data set does not exist, there's nothing to track\n }\n }\n}\nfunction indataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to indata must be a string literal.');\n if (args[1].type !== Literal) error('Second argument to indata must be a string literal.');\n const data = args[0].value,\n field = args[1].value,\n indexName = IndexPrefix + field;\n\n if (!hasOwnProperty(indexName, params)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n}\nfunction scaleVisitor(name, args, scope, params) {\n if (args[0].type === Literal) {\n // add scale dependency\n addScaleDependency(scope, params, args[0].value);\n } else {\n // indirect scale lookup; add all scales as parameters\n for (name in scope.scales) {\n addScaleDependency(scope, params, name);\n }\n }\n}\n\nfunction addScaleDependency(scope, params, name) {\n const scaleName = ScalePrefix + name;\n\n if (!hasOwnProperty(params, scaleName)) {\n try {\n params[scaleName] = scope.scaleRef(name);\n } catch (err) {// TODO: error handling? warning?\n }\n }\n}\n\nfunction getScale(name, ctx) {\n let s;\n return isFunction(name) ? name : isString(name) ? (s = ctx.scales[name]) && s.value : undefined;\n}\nfunction internalScaleFunctions(codegen, fnctx, visitors) {\n // add helper method to the 'this' expression function context\n fnctx.__bandwidth = s => s && s.bandwidth ? s.bandwidth() : 0; // register AST visitors for internal scale functions\n\n\n visitors._bandwidth = scaleVisitor;\n visitors._range = scaleVisitor;\n visitors._scale = scaleVisitor; // resolve scale reference directly to the signal hash argument\n\n const ref = arg => '_[' + (arg.type === Literal ? stringValue(ScalePrefix + arg.value) : stringValue(ScalePrefix) + '+' + codegen(arg)) + ']'; // define and return internal scale function code generators\n // these internal functions are called by mark encoders\n\n\n return {\n _bandwidth: args => `this.__bandwidth(${ref(args[0])})`,\n _range: args => `${ref(args[0])}.range()`,\n _scale: args => `${ref(args[0])}(${codegen(args[1])})`\n };\n}\n\nfunction geoMethod(methodName, globalMethod) {\n return function (projection, geojson, group) {\n if (projection) {\n // projection defined, use it\n const p = getScale(projection, (group || this).context);\n return p && p.path[methodName](geojson);\n } else {\n // projection undefined, use global method\n return globalMethod(geojson);\n }\n };\n}\n\nconst geoArea = geoMethod('area', geoArea$1);\nconst geoBounds = geoMethod('bounds', geoBounds$1);\nconst geoCentroid = geoMethod('centroid', geoCentroid$1);\n\nfunction inScope (item) {\n const group = this.context.group;\n let value = false;\n if (group) while (item) {\n if (item === group) {\n value = true;\n break;\n }\n\n item = item.mark.group;\n }\n return value;\n}\n\nfunction log(df, method, args) {\n try {\n df[method].apply(df, ['EXPRESSION'].concat([].slice.call(args)));\n } catch (err) {\n df.warn(err);\n }\n\n return args[args.length - 1];\n}\n\nfunction warn() {\n return log(this.context.dataflow, 'warn', arguments);\n}\nfunction info() {\n return log(this.context.dataflow, 'info', arguments);\n}\nfunction debug() {\n return log(this.context.dataflow, 'debug', arguments);\n}\n\nfunction channel_luminance_value(channelValue) {\n const val = channelValue / 255;\n\n if (val <= 0.03928) {\n return val / 12.92;\n }\n\n return Math.pow((val + 0.055) / 1.055, 2.4);\n}\n\nfunction luminance(color) {\n const c = rgb(color),\n r = channel_luminance_value(c.r),\n g = channel_luminance_value(c.g),\n b = channel_luminance_value(c.b);\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n} // https://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n\nfunction contrast(color1, color2) {\n const lum1 = luminance(color1),\n lum2 = luminance(color2),\n lumL = Math.max(lum1, lum2),\n lumD = Math.min(lum1, lum2);\n return (lumL + 0.05) / (lumD + 0.05);\n}\n\nfunction merge () {\n const args = [].slice.call(arguments);\n args.unshift({});\n return extend(...args);\n}\n\nfunction equal(a, b) {\n return a === b || a !== a && b !== b ? true : isArray(a) ? isArray(b) && a.length === b.length ? equalArray(a, b) : false : isObject(a) && isObject(b) ? equalObject(a, b) : false;\n}\n\nfunction equalArray(a, b) {\n for (let i = 0, n = a.length; i < n; ++i) {\n if (!equal(a[i], b[i])) return false;\n }\n\n return true;\n}\n\nfunction equalObject(a, b) {\n for (const key in a) {\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n}\n\nfunction removePredicate(props) {\n return _ => equalObject(props, _);\n}\n\nfunction modify (name, insert, remove, toggle, modify, values) {\n const df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input,\n stamp = df.stamp();\n let changes = data.changes,\n predicate,\n key;\n\n if (df._trigger === false || !(input.value.length || insert || toggle)) {\n // nothing to do!\n return 0;\n }\n\n if (!changes || changes.stamp < stamp) {\n data.changes = changes = df.changeset();\n changes.stamp = stamp;\n df.runAfter(() => {\n data.modified = true;\n df.pulse(input, changes).run();\n }, true, 1);\n }\n\n if (remove) {\n predicate = remove === true ? truthy : isArray(remove) || isTuple(remove) ? remove : removePredicate(remove);\n changes.remove(predicate);\n }\n\n if (insert) {\n changes.insert(insert);\n }\n\n if (toggle) {\n predicate = removePredicate(toggle);\n\n if (input.value.some(predicate)) {\n changes.remove(predicate);\n } else {\n changes.insert(toggle);\n }\n }\n\n if (modify) {\n for (key in values) {\n changes.modify(modify, key, values[key]);\n }\n }\n\n return 1;\n}\n\nfunction pinchDistance(event) {\n const t = event.touches,\n dx = t[0].clientX - t[1].clientX,\n dy = t[0].clientY - t[1].clientY;\n return Math.sqrt(dx * dx + dy * dy);\n}\nfunction pinchAngle(event) {\n const t = event.touches;\n return Math.atan2(t[0].clientY - t[1].clientY, t[0].clientX - t[1].clientX);\n}\n\nconst accessors = {};\nfunction pluck (data, name) {\n const accessor = accessors[name] || (accessors[name] = field(name));\n return isArray(data) ? data.map(accessor) : accessor(data);\n}\n\nfunction array(seq) {\n return isArray(seq) || ArrayBuffer.isView(seq) ? seq : null;\n}\n\nfunction sequence(seq) {\n return array(seq) || (isString(seq) ? seq : null);\n}\n\nfunction join(seq, ...args) {\n return array(seq).join(...args);\n}\nfunction indexof(seq, ...args) {\n return sequence(seq).indexOf(...args);\n}\nfunction lastindexof(seq, ...args) {\n return sequence(seq).lastIndexOf(...args);\n}\nfunction slice(seq, ...args) {\n return sequence(seq).slice(...args);\n}\nfunction replace(str, pattern, repl) {\n if (isFunction(repl)) error('Function argument passed to replace.');\n return String(str).replace(pattern, repl);\n}\nfunction reverse(seq) {\n return array(seq).slice().reverse();\n}\n\nfunction bandspace(count, paddingInner, paddingOuter) {\n return bandSpace(count || 0, paddingInner || 0, paddingOuter || 0);\n}\nfunction bandwidth(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.bandwidth ? s.bandwidth() : 0;\n}\nfunction copy(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.copy() : undefined;\n}\nfunction domain(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.domain() : [];\n}\nfunction invert(name, range, group) {\n const s = getScale(name, (group || this).context);\n return !s ? undefined : isArray(range) ? (s.invertRange || s.invert)(range) : (s.invert || s.invertExtent)(range);\n}\nfunction range(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.range ? s.range() : [];\n}\nfunction scale(name, value, group) {\n const s = getScale(name, (group || this).context);\n return s ? s(value) : undefined;\n}\n\nfunction scaleGradient (scale, p0, p1, count, group) {\n scale = getScale(scale, (group || this).context);\n const gradient = Gradient(p0, p1);\n let stops = scale.domain(),\n min = stops[0],\n max = peek(stops),\n fraction = identity;\n\n if (!(max - min)) {\n // expand scale if domain has zero span, fix #1479\n scale = (scale.interpolator ? scale$1('sequential')().interpolator(scale.interpolator()) : scale$1('linear')().interpolate(scale.interpolate()).range(scale.range())).domain([min = 0, max = 1]);\n } else {\n fraction = scaleFraction(scale, min, max);\n }\n\n if (scale.ticks) {\n stops = scale.ticks(+count || 15);\n if (min !== stops[0]) stops.unshift(min);\n if (max !== peek(stops)) stops.push(max);\n }\n\n stops.forEach(_ => gradient.stop(fraction(_), scale(_)));\n return gradient;\n}\n\nfunction geoShape(projection, geojson, group) {\n const p = getScale(projection, (group || this).context);\n return function (context) {\n return p ? p.path.context(context)(geojson) : '';\n };\n}\nfunction pathShape(path) {\n let p = null;\n return function (context) {\n return context ? pathRender(context, p = p || pathParse(path)) : path;\n };\n}\n\nconst datum = d => d.data;\n\nfunction treeNodes(name, context) {\n const tree = data.call(context, name);\n return tree.root && tree.root.lookup || {};\n}\n\nfunction treePath(name, source, target) {\n const nodes = treeNodes(name, this),\n s = nodes[source],\n t = nodes[target];\n return s && t ? s.path(t).map(datum) : undefined;\n}\nfunction treeAncestors(name, node) {\n const n = treeNodes(name, this)[node];\n return n ? n.ancestors().map(datum) : undefined;\n}\n\nconst _window = () => typeof window !== 'undefined' && window || null;\n\nfunction screen() {\n const w = _window();\n\n return w ? w.screen : {};\n}\nfunction windowSize() {\n const w = _window();\n\n return w ? [w.innerWidth, w.innerHeight] : [undefined, undefined];\n}\nfunction containerSize() {\n const view = this.context.dataflow,\n el = view.container && view.container();\n return el ? [el.clientWidth, el.clientHeight] : [undefined, undefined];\n}\n\nfunction intersect (b, opt, group) {\n if (!b) return [];\n const [u, v] = b,\n box = new Bounds().set(u[0], u[1], v[0], v[1]),\n scene = group || this.context.dataflow.scenegraph().root;\n return intersect$1(scene, box, filter(opt));\n}\n\nfunction filter(opt) {\n let p = null;\n\n if (opt) {\n const types = array$1(opt.marktype),\n names = array$1(opt.markname);\n\n p = _ => (!types.length || types.some(t => _.marktype === t)) && (!names.length || names.some(s => _.name === s));\n }\n\n return p;\n}\n\nconst functionContext = {\n random() {\n return random();\n },\n\n // override default\n cumulativeNormal,\n cumulativeLogNormal,\n cumulativeUniform,\n densityNormal,\n densityLogNormal,\n densityUniform,\n quantileNormal,\n quantileLogNormal,\n quantileUniform,\n sampleNormal,\n sampleLogNormal,\n sampleUniform,\n isArray,\n isBoolean,\n isDate,\n\n isDefined(_) {\n return _ !== undefined;\n },\n\n isNumber,\n isObject,\n isRegExp,\n isString,\n isTuple,\n\n isValid(_) {\n return _ != null && _ === _;\n },\n\n toBoolean,\n toDate,\n toNumber,\n toString,\n indexof,\n join,\n lastindexof,\n replace,\n reverse,\n slice,\n flush,\n lerp,\n merge,\n pad,\n peek,\n pluck,\n span,\n inrange,\n truncate,\n rgb,\n lab,\n hcl,\n hsl,\n luminance,\n contrast,\n sequence: range$1,\n format,\n utcFormat,\n utcParse,\n utcOffset,\n utcSequence,\n timeFormat,\n timeParse,\n timeOffset,\n timeSequence,\n timeUnitSpecifier,\n monthFormat,\n monthAbbrevFormat,\n dayFormat,\n dayAbbrevFormat,\n quarter,\n utcquarter,\n week,\n utcweek,\n dayofyear,\n utcdayofyear,\n warn,\n info,\n debug,\n extent,\n inScope,\n intersect,\n clampRange,\n pinchDistance,\n pinchAngle,\n screen,\n containerSize,\n windowSize,\n bandspace,\n setdata,\n pathShape,\n panLinear,\n panLog,\n panPow,\n panSymlog,\n zoomLinear,\n zoomLog,\n zoomPow,\n zoomSymlog,\n encode,\n modify\n};\nconst eventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'],\n // event functions\neventPrefix = 'event.vega.',\n // event function prefix\nthisPrefix = 'this.',\n // function context prefix\nastVisitors = {}; // AST visitors for dependency analysis\n// export code generator parameters\n\nconst codegenParams = {\n forbidden: ['_'],\n allowed: ['datum', 'event', 'item'],\n fieldvar: 'datum',\n globalvar: id => `_[${stringValue(SignalPrefix + id)}]`,\n functions: buildFunctions,\n constants: constants,\n visitors: astVisitors\n}; // export code generator\n\nconst codeGenerator = codegen(codegenParams); // Build expression function registry\n\nfunction buildFunctions(codegen) {\n const fn = functions(codegen);\n eventFunctions.forEach(name => fn[name] = eventPrefix + name);\n\n for (const name in functionContext) {\n fn[name] = thisPrefix + name;\n }\n\n extend(fn, internalScaleFunctions(codegen, functionContext, astVisitors));\n return fn;\n} // Register an expression function\n\n\nfunction expressionFunction(name, fn, visitor) {\n if (arguments.length === 1) {\n return functionContext[name];\n } // register with the functionContext\n\n\n functionContext[name] = fn; // if there is an astVisitor register that, too\n\n if (visitor) astVisitors[name] = visitor; // if the code generator has already been initialized,\n // we need to also register the function with it\n\n if (codeGenerator) codeGenerator.functions[name] = thisPrefix + name;\n return this;\n} // register expression functions with ast visitors\n\nexpressionFunction('bandwidth', bandwidth, scaleVisitor);\nexpressionFunction('copy', copy, scaleVisitor);\nexpressionFunction('domain', domain, scaleVisitor);\nexpressionFunction('range', range, scaleVisitor);\nexpressionFunction('invert', invert, scaleVisitor);\nexpressionFunction('scale', scale, scaleVisitor);\nexpressionFunction('gradient', scaleGradient, scaleVisitor);\nexpressionFunction('geoArea', geoArea, scaleVisitor);\nexpressionFunction('geoBounds', geoBounds, scaleVisitor);\nexpressionFunction('geoCentroid', geoCentroid, scaleVisitor);\nexpressionFunction('geoShape', geoShape, scaleVisitor);\nexpressionFunction('indata', indata, indataVisitor);\nexpressionFunction('data', data, dataVisitor);\nexpressionFunction('treePath', treePath, dataVisitor);\nexpressionFunction('treeAncestors', treeAncestors, dataVisitor); // register Vega-Lite selection functions\n\nexpressionFunction('vlSelectionTest', selectionTest, selectionVisitor);\nexpressionFunction('vlSelectionIdTest', selectionIdTest, selectionVisitor);\nexpressionFunction('vlSelectionResolve', selectionResolve, selectionVisitor);\nexpressionFunction('vlSelectionTuples', selectionTuples);\n\nfunction parser (expr, scope) {\n const params = {}; // parse the expression to an abstract syntax tree (ast)\n\n let ast;\n\n try {\n expr = isString(expr) ? expr : stringValue(expr) + '';\n ast = parse(expr);\n } catch (err) {\n error('Expression parse error: ' + expr);\n } // analyze ast function calls for dependencies\n\n\n ast.visit(node => {\n if (node.type !== CallExpression) return;\n const name = node.callee.name,\n visit = codegenParams.visitors[name];\n if (visit) visit(name, node.arguments, scope, params);\n }); // perform code generation\n\n const gen = codeGenerator(ast); // collect signal dependencies\n\n gen.globals.forEach(name => {\n const signalName = SignalPrefix + name;\n\n if (!hasOwnProperty(params, signalName) && scope.getSignal(name)) {\n params[signalName] = scope.signalRef(name);\n }\n }); // return generated expression code and dependencies\n\n return {\n $expr: extend({\n code: gen.code\n }, scope.options.ast ? {\n ast\n } : null),\n $fields: gen.fields,\n $params: params\n };\n}\n\nexport { DataPrefix, IndexPrefix, ScalePrefix, SignalPrefix, bandspace, bandwidth, codeGenerator, codegenParams, containerSize, contrast, copy, data, dataVisitor, dayAbbrevFormat, dayFormat, debug, domain, encode, expressionFunction, format, functionContext, geoArea, geoBounds, geoCentroid, geoShape, inScope, indata, indataVisitor, indexof, info, invert, join, lastindexof, luminance, merge, modify, monthAbbrevFormat, monthFormat, parser as parseExpression, pathShape, pinchAngle, pinchDistance, pluck, range, replace, reverse, scale, scaleGradient, scaleVisitor, screen, setdata, slice, timeFormat, timeParse, treeAncestors, treePath, utcFormat, utcParse, warn, windowSize };\n","import { toSet, stringValue, error, isArray, isObject, hasOwnProperty, accessor, key, field, array, compare, truthy } from 'vega-util';\nimport { tupleid } from 'vega-dataflow';\n\n/**\n * Parse a serialized dataflow specification.\n */\nfunction parse (spec) {\n const ctx = this,\n operators = spec.operators || []; // parse background\n\n if (spec.background) {\n ctx.background = spec.background;\n } // parse event configuration\n\n\n if (spec.eventConfig) {\n ctx.eventConfig = spec.eventConfig;\n } // parse locale configuration\n\n\n if (spec.locale) {\n ctx.locale = spec.locale;\n } // parse operators\n\n\n operators.forEach(entry => ctx.parseOperator(entry)); // parse operator parameters\n\n operators.forEach(entry => ctx.parseOperatorParameters(entry)); // parse streams\n\n (spec.streams || []).forEach(entry => ctx.parseStream(entry)); // parse updates\n\n (spec.updates || []).forEach(entry => ctx.parseUpdate(entry));\n return ctx.resolve();\n}\n\nconst Skip = toSet(['rule']),\n Swap = toSet(['group', 'image', 'rect']);\nfunction adjustSpatial(encode, marktype) {\n let code = '';\n if (Skip[marktype]) return code;\n\n if (encode.x2) {\n if (encode.x) {\n if (Swap[marktype]) {\n code += 'if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;';\n }\n\n code += 'o.width=o.x2-o.x;';\n } else {\n code += 'o.x=o.x2-(o.width||0);';\n }\n }\n\n if (encode.xc) {\n code += 'o.x=o.xc-(o.width||0)/2;';\n }\n\n if (encode.y2) {\n if (encode.y) {\n if (Swap[marktype]) {\n code += 'if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;';\n }\n\n code += 'o.height=o.y2-o.y;';\n } else {\n code += 'o.y=o.y2-(o.height||0);';\n }\n }\n\n if (encode.yc) {\n code += 'o.y=o.yc-(o.height||0)/2;';\n }\n\n return code;\n}\nfunction canonicalType(type) {\n return (type + '').toLowerCase();\n}\nfunction isOperator(type) {\n return canonicalType(type) === 'operator';\n}\nfunction isCollect(type) {\n return canonicalType(type) === 'collect';\n}\n\nfunction expression(ctx, args, code) {\n // wrap code in return statement if expression does not terminate\n if (code[code.length - 1] !== ';') {\n code = 'return(' + code + ');';\n }\n\n const fn = Function(...args.concat(code));\n return ctx && ctx.functions ? fn.bind(ctx.functions) : fn;\n} // generate code for comparing a single field\n\n\nfunction _compare(u, v, lt, gt) {\n return `((u = ${u}) < (v = ${v}) || u == null) && v != null ? ${lt}\n : (u > v || v == null) && u != null ? ${gt}\n : ((v = v instanceof Date ? +v : v), (u = u instanceof Date ? +u : u)) !== u && v === v ? ${lt}\n : v !== v && u === u ? ${gt} : `;\n}\n\nvar expressionCodegen = {\n /**\n * Parse an expression used to update an operator value.\n */\n operator: (ctx, expr) => expression(ctx, ['_'], expr.code),\n\n /**\n * Parse an expression provided as an operator parameter value.\n */\n parameter: (ctx, expr) => expression(ctx, ['datum', '_'], expr.code),\n\n /**\n * Parse an expression applied to an event stream.\n */\n event: (ctx, expr) => expression(ctx, ['event'], expr.code),\n\n /**\n * Parse an expression used to handle an event-driven operator update.\n */\n handler: (ctx, expr) => {\n const code = `var datum=event.item&&event.item.datum;return ${expr.code};`;\n return expression(ctx, ['_', 'event'], code);\n },\n\n /**\n * Parse an expression that performs visual encoding.\n */\n encode: (ctx, encode) => {\n const {\n marktype,\n channels\n } = encode;\n let code = 'var o=item,datum=o.datum,m=0,$;';\n\n for (const name in channels) {\n const o = 'o[' + stringValue(name) + ']';\n code += `$=${channels[name].code};if(${o}!==$)${o}=$,m=1;`;\n }\n\n code += adjustSpatial(channels, marktype);\n code += 'return m;';\n return expression(ctx, ['item', '_'], code);\n },\n\n /**\n * Optimized code generators for access and comparison.\n */\n codegen: {\n get(path) {\n const ref = `[${path.map(stringValue).join('][')}]`;\n const get = Function('_', `return _${ref};`);\n get.path = ref;\n return get;\n },\n\n comparator(fields, orders) {\n let t;\n\n const map = (f, i) => {\n const o = orders[i];\n let u, v;\n\n if (f.path) {\n u = `a${f.path}`;\n v = `b${f.path}`;\n } else {\n (t = t || {})['f' + i] = f;\n u = `this.f${i}(a)`;\n v = `this.f${i}(b)`;\n }\n\n return _compare(u, v, -o, o);\n };\n\n const fn = Function('a', 'b', 'var u, v; return ' + fields.map(map).join('') + '0;');\n return t ? fn.bind(t) : fn;\n }\n\n }\n};\n\n/**\n * Parse a dataflow operator.\n */\n\nfunction parseOperator(spec) {\n const ctx = this;\n\n if (isOperator(spec.type) || !spec.type) {\n ctx.operator(spec, spec.update ? ctx.operatorExpression(spec.update) : null);\n } else {\n ctx.transform(spec, spec.type);\n }\n}\n/**\n * Parse and assign operator parameters.\n */\n\nfunction parseOperatorParameters(spec) {\n const ctx = this;\n\n if (spec.params) {\n const op = ctx.get(spec.id);\n if (!op) error('Invalid operator id: ' + spec.id);\n ctx.dataflow.connect(op, op.parameters(ctx.parseParameters(spec.params), spec.react, spec.initonly));\n }\n}\n\n/**\n * Parse a set of operator parameters.\n */\n\nfunction parseParameters(spec, params) {\n params = params || {};\n const ctx = this;\n\n for (const key in spec) {\n const value = spec[key];\n params[key] = isArray(value) ? value.map(v => parseParameter(v, ctx, params)) : parseParameter(value, ctx, params);\n }\n\n return params;\n}\n/**\n * Parse a single parameter.\n */\n\nfunction parseParameter(spec, ctx, params) {\n if (!spec || !isObject(spec)) return spec;\n\n for (let i = 0, n = PARSERS.length, p; i < n; ++i) {\n p = PARSERS[i];\n\n if (hasOwnProperty(spec, p.key)) {\n return p.parse(spec, ctx, params);\n }\n }\n\n return spec;\n}\n/** Reference parsers. */\n\n\nvar PARSERS = [{\n key: '$ref',\n parse: getOperator\n}, {\n key: '$key',\n parse: getKey\n}, {\n key: '$expr',\n parse: getExpression\n}, {\n key: '$field',\n parse: getField\n}, {\n key: '$encode',\n parse: getEncode\n}, {\n key: '$compare',\n parse: getCompare\n}, {\n key: '$context',\n parse: getContext\n}, {\n key: '$subflow',\n parse: getSubflow\n}, {\n key: '$tupleid',\n parse: getTupleId\n}];\n/**\n * Resolve an operator reference.\n */\n\nfunction getOperator(_, ctx) {\n return ctx.get(_.$ref) || error('Operator not defined: ' + _.$ref);\n}\n/**\n * Resolve an expression reference.\n */\n\n\nfunction getExpression(_, ctx, params) {\n if (_.$params) {\n // parse expression parameters\n ctx.parseParameters(_.$params, params);\n }\n\n const k = 'e:' + _.$expr.code + '_' + _.$name;\n return ctx.fn[k] || (ctx.fn[k] = accessor(ctx.parameterExpression(_.$expr), _.$fields, _.$name));\n}\n/**\n * Resolve a key accessor reference.\n */\n\n\nfunction getKey(_, ctx) {\n const k = 'k:' + _.$key + '_' + !!_.$flat;\n return ctx.fn[k] || (ctx.fn[k] = key(_.$key, _.$flat, ctx.expr.codegen));\n}\n/**\n * Resolve a field accessor reference.\n */\n\n\nfunction getField(_, ctx) {\n if (!_.$field) return null;\n const k = 'f:' + _.$field + '_' + _.$name;\n return ctx.fn[k] || (ctx.fn[k] = field(_.$field, _.$name, ctx.expr.codegen));\n}\n/**\n * Resolve a comparator function reference.\n */\n\n\nfunction getCompare(_, ctx) {\n // As of Vega 5.5.3, $tupleid sort is no longer used.\n // Keep here for now for backwards compatibility.\n const k = 'c:' + _.$compare + '_' + _.$order,\n c = array(_.$compare).map(_ => _ && _.$tupleid ? tupleid : _);\n return ctx.fn[k] || (ctx.fn[k] = compare(c, _.$order, ctx.expr.codegen));\n}\n/**\n * Resolve an encode operator reference.\n */\n\n\nfunction getEncode(_, ctx) {\n const spec = _.$encode,\n encode = {};\n\n for (const name in spec) {\n const enc = spec[name];\n encode[name] = accessor(ctx.encodeExpression(enc.$expr), enc.$fields);\n encode[name].output = enc.$output;\n }\n\n return encode;\n}\n/**\n * Resolve a context reference.\n */\n\n\nfunction getContext(_, ctx) {\n return ctx;\n}\n/**\n * Resolve a recursive subflow specification.\n */\n\n\nfunction getSubflow(_, ctx) {\n const spec = _.$subflow;\n return function (dataflow, key, parent) {\n const subctx = ctx.fork().parse(spec),\n op = subctx.get(spec.operators[0].id),\n p = subctx.signals.parent;\n if (p) p.set(parent);\n\n op.detachSubflow = () => ctx.detach(subctx);\n\n return op;\n };\n}\n/**\n * Resolve a tuple id reference.\n */\n\n\nfunction getTupleId() {\n return tupleid;\n}\n\n/**\n * Parse an event stream specification.\n */\n\nfunction parseStream (spec) {\n var ctx = this,\n filter = spec.filter != null ? ctx.eventExpression(spec.filter) : undefined,\n stream = spec.stream != null ? ctx.get(spec.stream) : undefined,\n args;\n\n if (spec.source) {\n stream = ctx.events(spec.source, spec.type, filter);\n } else if (spec.merge) {\n args = spec.merge.map(_ => ctx.get(_));\n stream = args[0].merge.apply(args[0], args.slice(1));\n }\n\n if (spec.between) {\n args = spec.between.map(_ => ctx.get(_));\n stream = stream.between(args[0], args[1]);\n }\n\n if (spec.filter) {\n stream = stream.filter(filter);\n }\n\n if (spec.throttle != null) {\n stream = stream.throttle(+spec.throttle);\n }\n\n if (spec.debounce != null) {\n stream = stream.debounce(+spec.debounce);\n }\n\n if (stream == null) {\n error('Invalid stream definition: ' + JSON.stringify(spec));\n }\n\n if (spec.consume) stream.consume(true);\n ctx.stream(spec, stream);\n}\n\n/**\n * Parse an event-driven operator update.\n */\n\nfunction parseUpdate (spec) {\n var ctx = this,\n srcid = isObject(srcid = spec.source) ? srcid.$ref : srcid,\n source = ctx.get(srcid),\n target = null,\n update = spec.update,\n params = undefined;\n if (!source) error('Source not defined: ' + spec.source);\n target = spec.target && spec.target.$expr ? ctx.eventExpression(spec.target.$expr) : ctx.get(spec.target);\n\n if (update && update.$expr) {\n if (update.$params) {\n params = ctx.parseParameters(update.$params);\n }\n\n update = ctx.handlerExpression(update.$expr);\n }\n\n ctx.update(spec, source, target, update, params);\n}\n\nconst SKIP = {\n skip: true\n};\nfunction getState(options) {\n var ctx = this,\n state = {};\n\n if (options.signals) {\n var signals = state.signals = {};\n Object.keys(ctx.signals).forEach(key => {\n const op = ctx.signals[key];\n\n if (options.signals(key, op)) {\n signals[key] = op.value;\n }\n });\n }\n\n if (options.data) {\n var data = state.data = {};\n Object.keys(ctx.data).forEach(key => {\n const dataset = ctx.data[key];\n\n if (options.data(key, dataset)) {\n data[key] = dataset.input.value;\n }\n });\n }\n\n if (ctx.subcontext && options.recurse !== false) {\n state.subcontext = ctx.subcontext.map(ctx => ctx.getState(options));\n }\n\n return state;\n}\nfunction setState(state) {\n var ctx = this,\n df = ctx.dataflow,\n data = state.data,\n signals = state.signals;\n Object.keys(signals || {}).forEach(key => {\n df.update(ctx.signals[key], signals[key], SKIP);\n });\n Object.keys(data || {}).forEach(key => {\n df.pulse(ctx.data[key].input, df.changeset().remove(truthy).insert(data[key]));\n });\n (state.subcontext || []).forEach((substate, i) => {\n const subctx = ctx.subcontext[i];\n if (subctx) subctx.setState(substate);\n });\n}\n\n/**\n * Context objects store the current parse state.\n * Enables lookup of parsed operators, event streams, accessors, etc.\n * Provides a 'fork' method for creating child contexts for subflows.\n */\n\nfunction context (df, transforms, functions, expr) {\n return new Context(df, transforms, functions, expr);\n}\n\nfunction Context(df, transforms, functions, expr) {\n this.dataflow = df;\n this.transforms = transforms;\n this.events = df.events.bind(df);\n this.expr = expr || expressionCodegen, this.signals = {};\n this.scales = {};\n this.nodes = {};\n this.data = {};\n this.fn = {};\n\n if (functions) {\n this.functions = Object.create(functions);\n this.functions.context = this;\n }\n}\n\nfunction Subcontext(ctx) {\n this.dataflow = ctx.dataflow;\n this.transforms = ctx.transforms;\n this.events = ctx.events;\n this.expr = ctx.expr;\n this.signals = Object.create(ctx.signals);\n this.scales = Object.create(ctx.scales);\n this.nodes = Object.create(ctx.nodes);\n this.data = Object.create(ctx.data);\n this.fn = Object.create(ctx.fn);\n\n if (ctx.functions) {\n this.functions = Object.create(ctx.functions);\n this.functions.context = this;\n }\n}\n\nContext.prototype = Subcontext.prototype = {\n fork() {\n const ctx = new Subcontext(this);\n (this.subcontext || (this.subcontext = [])).push(ctx);\n return ctx;\n },\n\n detach(ctx) {\n this.subcontext = this.subcontext.filter(c => c !== ctx); // disconnect all nodes in the subcontext\n // wipe out targets first for better efficiency\n\n const keys = Object.keys(ctx.nodes);\n\n for (const key of keys) ctx.nodes[key]._targets = null;\n\n for (const key of keys) ctx.nodes[key].detach();\n\n ctx.nodes = null;\n },\n\n get(id) {\n return this.nodes[id];\n },\n\n set(id, node) {\n return this.nodes[id] = node;\n },\n\n add(spec, op) {\n const ctx = this,\n df = ctx.dataflow,\n data = spec.value;\n ctx.set(spec.id, op);\n\n if (isCollect(spec.type) && data) {\n if (data.$ingest) {\n df.ingest(op, data.$ingest, data.$format);\n } else if (data.$request) {\n df.preload(op, data.$request, data.$format);\n } else {\n df.pulse(op, df.changeset().insert(data));\n }\n }\n\n if (spec.root) {\n ctx.root = op;\n }\n\n if (spec.parent) {\n let p = ctx.get(spec.parent.$ref);\n\n if (p) {\n df.connect(p, [op]);\n op.targets().add(p);\n } else {\n (ctx.unresolved = ctx.unresolved || []).push(() => {\n p = ctx.get(spec.parent.$ref);\n df.connect(p, [op]);\n op.targets().add(p);\n });\n }\n }\n\n if (spec.signal) {\n ctx.signals[spec.signal] = op;\n }\n\n if (spec.scale) {\n ctx.scales[spec.scale] = op;\n }\n\n if (spec.data) {\n for (const name in spec.data) {\n const data = ctx.data[name] || (ctx.data[name] = {});\n spec.data[name].forEach(role => data[role] = op);\n }\n }\n },\n\n resolve() {\n (this.unresolved || []).forEach(fn => fn());\n delete this.unresolved;\n return this;\n },\n\n operator(spec, update) {\n this.add(spec, this.dataflow.add(spec.value, update));\n },\n\n transform(spec, type) {\n this.add(spec, this.dataflow.add(this.transforms[canonicalType(type)]));\n },\n\n stream(spec, stream) {\n this.set(spec.id, stream);\n },\n\n update(spec, stream, target, update, params) {\n this.dataflow.on(stream, target, update, params, spec.options);\n },\n\n // expression parsing\n operatorExpression(expr) {\n return this.expr.operator(this, expr);\n },\n\n parameterExpression(expr) {\n return this.expr.parameter(this, expr);\n },\n\n eventExpression(expr) {\n return this.expr.event(this, expr);\n },\n\n handlerExpression(expr) {\n return this.expr.handler(this, expr);\n },\n\n encodeExpression(encode) {\n return this.expr.encode(this, encode);\n },\n\n // parse methods\n parse,\n parseOperator,\n parseOperatorParameters,\n parseParameters,\n parseStream,\n parseUpdate,\n // state methods\n getState,\n setState\n};\n\nexport { context };\n","import { isString, hasOwnProperty, error, truthy, constant, extend, isArray, toSet, array, isObject, debounce, isDate, inherits, stringValue } from 'vega-util';\nimport { changeset, isChangeSet, EventStream, transforms, Dataflow, asyncCallback } from 'vega-dataflow';\nimport { point, renderModule, CanvasHandler, RenderType, Scenegraph } from 'vega-scenegraph';\nimport { tickStep } from 'd3-array';\nimport { functionContext } from 'vega-functions';\nimport { context } from 'vega-runtime';\nimport { interval } from 'd3-timer';\nimport { locale } from 'vega-format';\n\n// initialize aria role and label attributes\nfunction initializeAria(view) {\n const el = view.container();\n\n if (el) {\n el.setAttribute('role', 'graphics-document');\n el.setAttribute('aria-roleDescription', 'visualization');\n ariaLabel(el, view.description());\n }\n} // update aria-label if we have a DOM container element\n\nfunction ariaLabel(el, desc) {\n if (el) desc == null ? el.removeAttribute('aria-label') : el.setAttribute('aria-label', desc);\n}\n\nfunction background (view) {\n // respond to background signal\n view.add(null, _ => {\n view._background = _.bg;\n view._resize = 1;\n return _.bg;\n }, {\n bg: view._signals.background\n });\n}\n\nconst Default = 'default';\nfunction cursor (view) {\n // get cursor signal, add to dataflow if needed\n const cursor = view._signals.cursor || (view._signals.cursor = view.add({\n user: Default,\n item: null\n })); // evaluate cursor on each mousemove event\n\n view.on(view.events('view', 'mousemove'), cursor, (_, event) => {\n const value = cursor.value,\n user = value ? isString(value) ? value : value.user : Default,\n item = event.item && event.item.cursor || null;\n return value && user === value.user && item == value.item ? value : {\n user: user,\n item: item\n };\n }); // when cursor signal updates, set visible cursor\n\n view.add(null, function (_) {\n let user = _.cursor,\n item = this.value;\n\n if (!isString(user)) {\n item = user.item;\n user = user.user;\n }\n\n setCursor(view, user && user !== Default ? user : item || user);\n return item;\n }, {\n cursor: cursor\n });\n}\nfunction setCursor(view, cursor) {\n const el = view.globalCursor() ? typeof document !== 'undefined' && document.body : view.container();\n\n if (el) {\n return cursor == null ? el.style.removeProperty('cursor') : el.style.cursor = cursor;\n }\n}\n\nfunction dataref(view, name) {\n var data = view._runtime.data;\n\n if (!hasOwnProperty(data, name)) {\n error('Unrecognized data set: ' + name);\n }\n\n return data[name];\n}\nfunction data(name, values) {\n return arguments.length < 2 ? dataref(this, name).values.value : change.call(this, name, changeset().remove(truthy).insert(values));\n}\nfunction change(name, changes) {\n if (!isChangeSet(changes)) {\n error('Second argument to changes must be a changeset.');\n }\n\n const dataset = dataref(this, name);\n dataset.modified = true;\n return this.pulse(dataset.input, changes);\n}\nfunction insert(name, _) {\n return change.call(this, name, changeset().insert(_));\n}\nfunction remove(name, _) {\n return change.call(this, name, changeset().remove(_));\n}\n\nfunction width(view) {\n var padding = view.padding();\n return Math.max(0, view._viewWidth + padding.left + padding.right);\n}\nfunction height(view) {\n var padding = view.padding();\n return Math.max(0, view._viewHeight + padding.top + padding.bottom);\n}\nfunction offset(view) {\n var padding = view.padding(),\n origin = view._origin;\n return [padding.left + origin[0], padding.top + origin[1]];\n}\nfunction resizeRenderer(view) {\n var origin = offset(view),\n w = width(view),\n h = height(view);\n\n view._renderer.background(view.background());\n\n view._renderer.resize(w, h, origin);\n\n view._handler.origin(origin);\n\n view._resizeListeners.forEach(handler => {\n try {\n handler(w, h);\n } catch (error) {\n view.error(error);\n }\n });\n}\n\n/**\n * Extend an event with additional view-specific methods.\n * Adds a new property ('vega') to an event that provides a number\n * of methods for querying information about the current interaction.\n * The vega object provides the following methods:\n * view - Returns the backing View instance.\n * item - Returns the currently active scenegraph item (if any).\n * group - Returns the currently active scenegraph group (if any).\n * This method accepts a single string-typed argument indicating the name\n * of the desired parent group. The scenegraph will be traversed from\n * the item up towards the root to search for a matching group. If no\n * argument is provided the enclosing group for the active item is\n * returned, unless the item it itself a group, in which case it is\n * returned directly.\n * xy - Returns a two-element array containing the x and y coordinates for\n * mouse or touch events. For touch events, this is based on the first\n * elements in the changedTouches array. This method accepts a single\n * argument: either an item instance or mark name that should serve as\n * the reference coordinate system. If no argument is provided the\n * top-level view coordinate system is assumed.\n * x - Returns the current x-coordinate, accepts the same arguments as xy.\n * y - Returns the current y-coordinate, accepts the same arguments as xy.\n * @param {Event} event - The input event to extend.\n * @param {Item} item - The currently active scenegraph item (if any).\n * @return {Event} - The extended input event.\n */\n\nfunction eventExtend (view, event, item) {\n var r = view._renderer,\n el = r && r.canvas(),\n p,\n e,\n translate;\n\n if (el) {\n translate = offset(view);\n e = event.changedTouches ? event.changedTouches[0] : event;\n p = point(e, el);\n p[0] -= translate[0];\n p[1] -= translate[1];\n }\n\n event.dataflow = view;\n event.item = item;\n event.vega = extension(view, item, p);\n return event;\n}\n\nfunction extension(view, item, point) {\n const itemGroup = item ? item.mark.marktype === 'group' ? item : item.mark.group : null;\n\n function group(name) {\n var g = itemGroup,\n i;\n if (name) for (i = item; i; i = i.mark.group) {\n if (i.mark.name === name) {\n g = i;\n break;\n }\n }\n return g && g.mark && g.mark.interactive ? g : {};\n }\n\n function xy(item) {\n if (!item) return point;\n if (isString(item)) item = group(item);\n const p = point.slice();\n\n while (item) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n item = item.mark && item.mark.group;\n }\n\n return p;\n }\n\n return {\n view: constant(view),\n item: constant(item || {}),\n group: group,\n xy: xy,\n x: item => xy(item)[0],\n y: item => xy(item)[1]\n };\n}\n\nconst VIEW = 'view',\n TIMER = 'timer',\n WINDOW = 'window',\n NO_TRAP = {\n trap: false\n};\n/**\n * Initialize event handling configuration.\n * @param {object} config - The configuration settings.\n * @return {object}\n */\n\nfunction initializeEventConfig(config) {\n const events = extend({\n defaults: {}\n }, config);\n\n const unpack = (obj, keys) => {\n keys.forEach(k => {\n if (isArray(obj[k])) obj[k] = toSet(obj[k]);\n });\n };\n\n unpack(events.defaults, ['prevent', 'allow']);\n unpack(events, ['view', 'window', 'selector']);\n return events;\n}\nfunction trackEventListener(view, sources, type, handler) {\n view._eventListeners.push({\n type: type,\n sources: array(sources),\n handler: handler\n });\n}\n\nfunction prevent(view, type) {\n var def = view._eventConfig.defaults,\n prevent = def.prevent,\n allow = def.allow;\n return prevent === false || allow === true ? false : prevent === true || allow === false ? true : prevent ? prevent[type] : allow ? !allow[type] : view.preventDefault();\n}\n\nfunction permit(view, key, type) {\n const rule = view._eventConfig && view._eventConfig[key];\n\n if (rule === false || isObject(rule) && !rule[type]) {\n view.warn(`Blocked ${key} ${type} event listener.`);\n return false;\n }\n\n return true;\n}\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @return {EventStream}\n */\n\n\nfunction events(source, type, filter) {\n var view = this,\n s = new EventStream(filter),\n send = function (e, item) {\n view.runAsync(null, () => {\n if (source === VIEW && prevent(view, type)) {\n e.preventDefault();\n }\n\n s.receive(eventExtend(view, e, item));\n });\n },\n sources;\n\n if (source === TIMER) {\n if (permit(view, 'timer', type)) {\n view.timer(send, type);\n }\n } else if (source === VIEW) {\n if (permit(view, 'view', type)) {\n // send traps errors, so use {trap: false} option\n view.addEventListener(type, send, NO_TRAP);\n }\n } else {\n if (source === WINDOW) {\n if (permit(view, 'window', type) && typeof window !== 'undefined') {\n sources = [window];\n }\n } else if (typeof document !== 'undefined') {\n if (permit(view, 'selector', type)) {\n sources = document.querySelectorAll(source);\n }\n }\n\n if (!sources) {\n view.warn('Can not resolve event source: ' + source);\n } else {\n for (var i = 0, n = sources.length; i < n; ++i) {\n sources[i].addEventListener(type, send);\n }\n\n trackEventListener(view, sources, type, send);\n }\n }\n\n return s;\n}\n\nfunction itemFilter(event) {\n return event.item;\n}\n\nfunction markTarget(event) {\n // grab upstream collector feeding the mark operator\n return event.item.mark.source;\n}\n\nfunction invoke(name) {\n return function (_, event) {\n return event.vega.view().changeset().encode(event.item, name);\n };\n}\n\nfunction hover (hoverSet, leaveSet) {\n hoverSet = [hoverSet || 'hover'];\n leaveSet = [leaveSet || 'update', hoverSet[0]]; // invoke hover set upon mouseover\n\n this.on(this.events('view', 'mouseover', itemFilter), markTarget, invoke(hoverSet)); // invoke leave set upon mouseout\n\n this.on(this.events('view', 'mouseout', itemFilter), markTarget, invoke(leaveSet));\n return this;\n}\n\n/**\n * Finalize a View instance that is being removed.\n * Cancel any running timers.\n * Remove all external event listeners.\n * Remove any currently displayed tooltip.\n */\nfunction finalize () {\n var tooltip = this._tooltip,\n timers = this._timers,\n listeners = this._eventListeners,\n n,\n m,\n e;\n n = timers.length;\n\n while (--n >= 0) {\n timers[n].stop();\n }\n\n n = listeners.length;\n\n while (--n >= 0) {\n e = listeners[n];\n m = e.sources.length;\n\n while (--m >= 0) {\n e.sources[m].removeEventListener(e.type, e.handler);\n }\n }\n\n if (tooltip) {\n tooltip.call(this, this._handler, null, null, null);\n }\n\n return this;\n}\n\nfunction element (tag, attr, text) {\n const el = document.createElement(tag);\n\n for (const key in attr) el.setAttribute(key, attr[key]);\n\n if (text != null) el.textContent = text;\n return el;\n}\n\nconst BindClass = 'vega-bind',\n NameClass = 'vega-bind-name',\n RadioClass = 'vega-bind-radio';\n/**\n * Bind a signal to an external HTML input element. The resulting two-way\n * binding will propagate input changes to signals, and propagate signal\n * changes to the input element state. If this view instance has no parent\n * element, we assume the view is headless and no bindings are created.\n * @param {Element|string} el - The parent DOM element to which the input\n * element should be appended as a child. If string-valued, this argument\n * will be treated as a CSS selector. If null or undefined, the parent\n * element of this view will be used as the element.\n * @param {object} param - The binding parameters which specify the signal\n * to bind to, the input element type, and type-specific configuration.\n * @return {View} - This view instance.\n */\n\nfunction bind (view, el, binding) {\n if (!el) return;\n const param = binding.param;\n let bind = binding.state;\n\n if (!bind) {\n bind = binding.state = {\n elements: null,\n active: false,\n set: null,\n update: value => {\n if (value != view.signal(param.signal)) {\n view.runAsync(null, () => {\n bind.source = true;\n view.signal(param.signal, value);\n });\n }\n }\n };\n\n if (param.debounce) {\n bind.update = debounce(param.debounce, bind.update);\n }\n }\n\n const create = param.input == null && param.element ? target : generate;\n create(bind, el, param, view);\n\n if (!bind.active) {\n view.on(view._signals[param.signal], null, () => {\n bind.source ? bind.source = false : bind.set(view.signal(param.signal));\n });\n bind.active = true;\n }\n\n return bind;\n}\n/**\n * Bind the signal to an external EventTarget.\n */\n\nfunction target(bind, node, param, view) {\n const type = param.event || 'input';\n\n const handler = () => bind.update(node.value); // initialize signal value to external input value\n\n\n view.signal(param.signal, node.value); // listen for changes on the element\n\n node.addEventListener(type, handler); // register with view, so we can remove it upon finalization\n\n trackEventListener(view, node, type, handler); // propagate change to element\n\n bind.set = value => {\n node.value = value;\n node.dispatchEvent(event(type));\n };\n}\n\nfunction event(type) {\n return typeof Event !== 'undefined' ? new Event(type) : {\n type\n };\n}\n/**\n * Generate an HTML input form element and bind it to a signal.\n */\n\n\nfunction generate(bind, el, param, view) {\n const value = view.signal(param.signal);\n const div = element('div', {\n 'class': BindClass\n });\n const wrapper = param.input === 'radio' ? div : div.appendChild(element('label'));\n wrapper.appendChild(element('span', {\n 'class': NameClass\n }, param.name || param.signal));\n el.appendChild(div);\n let input = form;\n\n switch (param.input) {\n case 'checkbox':\n input = checkbox;\n break;\n\n case 'select':\n input = select;\n break;\n\n case 'radio':\n input = radio;\n break;\n\n case 'range':\n input = range;\n break;\n }\n\n input(bind, wrapper, param, value);\n}\n/**\n * Generates an arbitrary input form element.\n * The input type is controlled via user-provided parameters.\n */\n\n\nfunction form(bind, el, param, value) {\n const node = element('input');\n\n for (const key in param) {\n if (key !== 'signal' && key !== 'element') {\n node.setAttribute(key === 'input' ? 'type' : key, param[key]);\n }\n }\n\n node.setAttribute('name', param.signal);\n node.value = value;\n el.appendChild(node);\n node.addEventListener('input', () => bind.update(node.value));\n bind.elements = [node];\n\n bind.set = value => node.value = value;\n}\n/**\n * Generates a checkbox input element.\n */\n\n\nfunction checkbox(bind, el, param, value) {\n const attr = {\n type: 'checkbox',\n name: param.signal\n };\n if (value) attr.checked = true;\n const node = element('input', attr);\n el.appendChild(node);\n node.addEventListener('change', () => bind.update(node.checked));\n bind.elements = [node];\n\n bind.set = value => node.checked = !!value || null;\n}\n/**\n * Generates a selection list input element.\n */\n\n\nfunction select(bind, el, param, value) {\n const node = element('select', {\n name: param.signal\n }),\n labels = param.labels || [];\n param.options.forEach((option, i) => {\n const attr = {\n value: option\n };\n if (valuesEqual(option, value)) attr.selected = true;\n node.appendChild(element('option', attr, (labels[i] || option) + ''));\n });\n el.appendChild(node);\n node.addEventListener('change', () => {\n bind.update(param.options[node.selectedIndex]);\n });\n bind.elements = [node];\n\n bind.set = value => {\n for (let i = 0, n = param.options.length; i < n; ++i) {\n if (valuesEqual(param.options[i], value)) {\n node.selectedIndex = i;\n return;\n }\n }\n };\n}\n/**\n * Generates a radio button group.\n */\n\n\nfunction radio(bind, el, param, value) {\n const group = element('span', {\n 'class': RadioClass\n }),\n labels = param.labels || [];\n el.appendChild(group);\n bind.elements = param.options.map((option, i) => {\n const attr = {\n type: 'radio',\n name: param.signal,\n value: option\n };\n if (valuesEqual(option, value)) attr.checked = true;\n const input = element('input', attr);\n input.addEventListener('change', () => bind.update(option));\n const label = element('label', {}, (labels[i] || option) + '');\n label.prepend(input);\n group.appendChild(label);\n return input;\n });\n\n bind.set = value => {\n const nodes = bind.elements,\n n = nodes.length;\n\n for (let i = 0; i < n; ++i) {\n if (valuesEqual(nodes[i].value, value)) nodes[i].checked = true;\n }\n };\n}\n/**\n * Generates a slider input element.\n */\n\n\nfunction range(bind, el, param, value) {\n value = value !== undefined ? value : (+param.max + +param.min) / 2;\n const max = param.max != null ? param.max : Math.max(100, +value) || 100,\n min = param.min || Math.min(0, max, +value) || 0,\n step = param.step || tickStep(min, max, 100);\n const node = element('input', {\n type: 'range',\n name: param.signal,\n min: min,\n max: max,\n step: step\n });\n node.value = value;\n const span = element('span', {}, +value);\n el.appendChild(node);\n el.appendChild(span);\n\n const update = () => {\n span.textContent = node.value;\n bind.update(+node.value);\n }; // subscribe to both input and change\n\n\n node.addEventListener('input', update);\n node.addEventListener('change', update);\n bind.elements = [node];\n\n bind.set = value => {\n node.value = value;\n span.textContent = value;\n };\n}\n\nfunction valuesEqual(a, b) {\n return a === b || a + '' === b + '';\n}\n\nfunction initializeRenderer (view, r, el, constructor, scaleFactor, opt) {\n r = r || new constructor(view.loader());\n return r.initialize(el, width(view), height(view), offset(view), scaleFactor, opt).background(view.background());\n}\n\nfunction trap (view, fn) {\n return !fn ? null : function () {\n try {\n fn.apply(this, arguments);\n } catch (error) {\n view.error(error);\n }\n };\n}\n\nfunction initializeHandler (view, prevHandler, el, constructor) {\n // instantiate scenegraph handler\n const handler = new constructor(view.loader(), trap(view, view.tooltip())).scene(view.scenegraph().root).initialize(el, offset(view), view); // transfer event handlers\n\n if (prevHandler) {\n prevHandler.handlers().forEach(h => {\n handler.on(h.type, h.handler);\n });\n }\n\n return handler;\n}\n\nfunction initialize (el, elBind) {\n const view = this,\n type = view._renderType,\n config = view._eventConfig.bind,\n module = renderModule(type); // containing dom element\n\n el = view._el = el ? lookup(view, el, true) : null; // initialize aria attributes\n\n initializeAria(view); // select appropriate renderer & handler\n\n if (!module) view.error('Unrecognized renderer type: ' + type);\n const Handler = module.handler || CanvasHandler,\n Renderer = el ? module.renderer : module.headless; // initialize renderer and input handler\n\n view._renderer = !Renderer ? null : initializeRenderer(view, view._renderer, el, Renderer);\n view._handler = initializeHandler(view, view._handler, el, Handler);\n view._redraw = true; // initialize signal bindings\n\n if (el && config !== 'none') {\n elBind = elBind ? view._elBind = lookup(view, elBind, true) : el.appendChild(element('form', {\n 'class': 'vega-bindings'\n }));\n\n view._bind.forEach(_ => {\n if (_.param.element && config !== 'container') {\n _.element = lookup(view, _.param.element, !!_.param.input);\n }\n });\n\n view._bind.forEach(_ => {\n bind(view, _.element || elBind, _);\n });\n }\n\n return view;\n}\n\nfunction lookup(view, el, clear) {\n if (typeof el === 'string') {\n if (typeof document !== 'undefined') {\n el = document.querySelector(el);\n\n if (!el) {\n view.error('Signal bind element not found: ' + el);\n return null;\n }\n } else {\n view.error('DOM document instance not found.');\n return null;\n }\n }\n\n if (el && clear) {\n try {\n el.innerHTML = '';\n } catch (e) {\n el = null;\n view.error(e);\n }\n }\n\n return el;\n}\n\nconst number = _ => +_ || 0;\n\nconst paddingObject = _ => ({\n top: _,\n bottom: _,\n left: _,\n right: _\n});\n\nfunction padding (_) {\n return isObject(_) ? {\n top: number(_.top),\n bottom: number(_.bottom),\n left: number(_.left),\n right: number(_.right)\n } : paddingObject(number(_));\n}\n\n/**\n * Render the current scene in a headless fashion.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A Promise that resolves to a renderer.\n */\n\nasync function renderHeadless (view, type, scaleFactor, opt) {\n const module = renderModule(type),\n ctr = module && module.headless;\n if (!ctr) error('Unrecognized renderer type: ' + type);\n await view.runAsync();\n return initializeRenderer(view, null, null, ctr, scaleFactor, opt).renderAsync(view._scenegraph.root);\n}\n\n/**\n * Produce an image URL for the visualization. Depending on the type\n * parameter, the generated URL contains data for either a PNG or SVG image.\n * The URL can be used (for example) to download images of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @param {string} type - The image type. One of 'svg', 'png' or 'canvas'.\n * The 'canvas' and 'png' types are synonyms for a PNG image.\n * @return {Promise} - A promise that resolves to an image URL.\n */\n\nasync function renderToImageURL (type, scaleFactor) {\n if (type !== RenderType.Canvas && type !== RenderType.SVG && type !== RenderType.PNG) {\n error('Unrecognized image type: ' + type);\n }\n\n const r = await renderHeadless(this, type, scaleFactor);\n return type === RenderType.SVG ? toBlobURL(r.svg(), 'image/svg+xml') : r.canvas().toDataURL('image/png');\n}\n\nfunction toBlobURL(data, mime) {\n const blob = new Blob([data], {\n type: mime\n });\n return window.URL.createObjectURL(blob);\n}\n\n/**\n * Produce a Canvas instance containing a rendered visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to a Canvas instance.\n */\n\nasync function renderToCanvas (scaleFactor, opt) {\n const r = await renderHeadless(this, RenderType.Canvas, scaleFactor, opt);\n return r.canvas();\n}\n\n/**\n * Produce a rendered SVG string of the visualization.\n * This method is asynchronous, returning a Promise instance.\n * @return {Promise} - A promise that resolves to an SVG string.\n */\n\nasync function renderToSVG (scaleFactor) {\n const r = await renderHeadless(this, RenderType.SVG, scaleFactor);\n return r.svg();\n}\n\nfunction runtime (view, spec, expr) {\n return context(view, transforms, functionContext, expr).parse(spec);\n}\n\nfunction scale(name) {\n var scales = this._runtime.scales;\n\n if (!hasOwnProperty(scales, name)) {\n error('Unrecognized scale or projection: ' + name);\n }\n\n return scales[name].value;\n}\n\nvar Width = 'width',\n Height = 'height',\n Padding = 'padding',\n Skip = {\n skip: true\n};\nfunction viewWidth(view, width) {\n var a = view.autosize(),\n p = view.padding();\n return width - (a && a.contains === Padding ? p.left + p.right : 0);\n}\nfunction viewHeight(view, height) {\n var a = view.autosize(),\n p = view.padding();\n return height - (a && a.contains === Padding ? p.top + p.bottom : 0);\n}\nfunction initializeResize(view) {\n var s = view._signals,\n w = s[Width],\n h = s[Height],\n p = s[Padding];\n\n function resetSize() {\n view._autosize = view._resize = 1;\n } // respond to width signal\n\n\n view._resizeWidth = view.add(null, _ => {\n view._width = _.size;\n view._viewWidth = viewWidth(view, _.size);\n resetSize();\n }, {\n size: w\n }); // respond to height signal\n\n view._resizeHeight = view.add(null, _ => {\n view._height = _.size;\n view._viewHeight = viewHeight(view, _.size);\n resetSize();\n }, {\n size: h\n }); // respond to padding signal\n\n const resizePadding = view.add(null, resetSize, {\n pad: p\n }); // set rank to run immediately after source signal\n\n view._resizeWidth.rank = w.rank + 1;\n view._resizeHeight.rank = h.rank + 1;\n resizePadding.rank = p.rank + 1;\n}\nfunction resizeView(viewWidth, viewHeight, width, height, origin, auto) {\n this.runAfter(view => {\n let rerun = 0; // reset autosize flag\n\n view._autosize = 0; // width value changed: update signal, skip resize op\n\n if (view.width() !== width) {\n rerun = 1;\n view.signal(Width, width, Skip); // set width, skip update calc\n\n view._resizeWidth.skip(true); // skip width resize handler\n\n } // height value changed: update signal, skip resize op\n\n\n if (view.height() !== height) {\n rerun = 1;\n view.signal(Height, height, Skip); // set height, skip update calc\n\n view._resizeHeight.skip(true); // skip height resize handler\n\n } // view width changed: update view property, set resize flag\n\n\n if (view._viewWidth !== viewWidth) {\n view._resize = 1;\n view._viewWidth = viewWidth;\n } // view height changed: update view property, set resize flag\n\n\n if (view._viewHeight !== viewHeight) {\n view._resize = 1;\n view._viewHeight = viewHeight;\n } // origin changed: update view property, set resize flag\n\n\n if (view._origin[0] !== origin[0] || view._origin[1] !== origin[1]) {\n view._resize = 1;\n view._origin = origin;\n } // run dataflow on width/height signal change\n\n\n if (rerun) view.run('enter');\n if (auto) view.runAfter(v => v.resize());\n }, false, 1);\n}\n\n/**\n * Get the current view state, consisting of signal values and/or data sets.\n * @param {object} [options] - Options flags indicating which state to export.\n * If unspecified, all signals and data sets will be exported.\n * @param {function(string, Operator):boolean} [options.signals] - Optional\n * predicate function for testing if a signal should be included in the\n * exported state. If unspecified, all signals will be included, except for\n * those named 'parent' or those which refer to a Transform value.\n * @param {function(string, object):boolean} [options.data] - Optional\n * predicate function for testing if a data set's input should be included\n * in the exported state. If unspecified, all data sets that have been\n * explicitly modified will be included.\n * @param {boolean} [options.recurse=true] - Flag indicating if the exported\n * state should recursively include state from group mark sub-contexts.\n * @return {object} - An object containing the exported state values.\n */\n\nfunction getState(options) {\n return this._runtime.getState(options || {\n data: dataTest,\n signals: signalTest,\n recurse: true\n });\n}\n\nfunction dataTest(name, data) {\n return data.modified && isArray(data.input.value) && name.indexOf('_:vega:_');\n}\n\nfunction signalTest(name, op) {\n return !(name === 'parent' || op instanceof transforms.proxy);\n}\n/**\n * Sets the current view state and updates the view by invoking run.\n * @param {object} state - A state object containing signal and/or\n * data set values, following the format used by the getState method.\n * @return {View} - This view instance.\n */\n\n\nfunction setState(state) {\n this.runAsync(null, v => {\n v._trigger = false;\n\n v._runtime.setState(state);\n }, v => {\n v._trigger = true;\n });\n return this;\n}\n\nfunction timer (callback, delay) {\n function tick(elapsed) {\n callback({\n timestamp: Date.now(),\n elapsed: elapsed\n });\n }\n\n this._timers.push(interval(tick, delay));\n}\n\nfunction defaultTooltip (handler, event, item, value) {\n const el = handler.element();\n if (el) el.setAttribute('title', formatTooltip(value));\n}\n\nfunction formatTooltip(value) {\n return value == null ? '' : isArray(value) ? formatArray(value) : isObject(value) && !isDate(value) ? formatObject(value) : value + '';\n}\n\nfunction formatObject(obj) {\n return Object.keys(obj).map(key => {\n const v = obj[key];\n return key + ': ' + (isArray(v) ? formatArray(v) : formatValue(v));\n }).join('\\n');\n}\n\nfunction formatArray(value) {\n return '[' + value.map(formatValue).join(', ') + ']';\n}\n\nfunction formatValue(value) {\n return isArray(value) ? '[\\u2026]' : isObject(value) && !isDate(value) ? '{\\u2026}' : value;\n}\n\n/**\n * Create a new View instance from a Vega dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be performed upon dataflow runs.\n * @constructor\n * @param {object} spec - The Vega dataflow runtime specification.\n */\n\nfunction View(spec, options) {\n const view = this;\n options = options || {};\n Dataflow.call(view);\n if (options.loader) view.loader(options.loader);\n if (options.logger) view.logger(options.logger);\n if (options.logLevel != null) view.logLevel(options.logLevel);\n\n if (options.locale || spec.locale) {\n const loc = extend({}, spec.locale, options.locale);\n view.locale(locale(loc.number, loc.time));\n }\n\n view._el = null;\n view._elBind = null;\n view._renderType = options.renderer || RenderType.Canvas;\n view._scenegraph = new Scenegraph();\n const root = view._scenegraph.root; // initialize renderer, handler and event management\n\n view._renderer = null;\n view._tooltip = options.tooltip || defaultTooltip, view._redraw = true;\n view._handler = new CanvasHandler().scene(root);\n view._globalCursor = false;\n view._preventDefault = false;\n view._timers = [];\n view._eventListeners = [];\n view._resizeListeners = []; // initialize event configuration\n\n view._eventConfig = initializeEventConfig(spec.eventConfig);\n view.globalCursor(view._eventConfig.globalCursor); // initialize dataflow graph\n\n const ctx = runtime(view, spec, options.expr);\n view._runtime = ctx;\n view._signals = ctx.signals;\n view._bind = (spec.bindings || []).map(_ => ({\n state: null,\n param: extend({}, _)\n })); // initialize scenegraph\n\n if (ctx.root) ctx.root.set(root);\n root.source = ctx.data.root.input;\n view.pulse(ctx.data.root.input, view.changeset().insert(root.items)); // initialize view size\n\n view._width = view.width();\n view._height = view.height();\n view._viewWidth = viewWidth(view, view._width);\n view._viewHeight = viewHeight(view, view._height);\n view._origin = [0, 0];\n view._resize = 0;\n view._autosize = 1;\n initializeResize(view); // initialize background color\n\n background(view); // initialize cursor\n\n cursor(view); // initialize view description\n\n view.description(spec.description); // initialize hover proessing, if requested\n\n if (options.hover) view.hover(); // initialize DOM container(s) and renderer\n\n if (options.container) view.initialize(options.container, options.bind);\n}\n\nfunction lookupSignal(view, name) {\n return hasOwnProperty(view._signals, name) ? view._signals[name] : error('Unrecognized signal name: ' + stringValue(name));\n}\n\nfunction findOperatorHandler(op, handler) {\n const h = (op._targets || []).filter(op => op._update && op._update.handler === handler);\n return h.length ? h[0] : null;\n}\n\nfunction addOperatorListener(view, name, op, handler) {\n let h = findOperatorHandler(op, handler);\n\n if (!h) {\n h = trap(view, () => handler(name, op.value));\n h.handler = handler;\n view.on(op, null, h);\n }\n\n return view;\n}\n\nfunction removeOperatorListener(view, op, handler) {\n const h = findOperatorHandler(op, handler);\n if (h) op._targets.remove(h);\n return view;\n}\n\ninherits(View, Dataflow, {\n // -- DATAFLOW / RENDERING ----\n async evaluate(encode, prerun, postrun) {\n // evaluate dataflow and prerun\n await Dataflow.prototype.evaluate.call(this, encode, prerun); // render as needed\n\n if (this._redraw || this._resize) {\n try {\n if (this._renderer) {\n if (this._resize) {\n this._resize = 0;\n resizeRenderer(this);\n }\n\n await this._renderer.renderAsync(this._scenegraph.root);\n }\n\n this._redraw = false;\n } catch (e) {\n this.error(e);\n }\n } // evaluate postrun\n\n\n if (postrun) asyncCallback(this, postrun);\n return this;\n },\n\n dirty(item) {\n this._redraw = true;\n this._renderer && this._renderer.dirty(item);\n },\n\n // -- GET / SET ----\n description(text) {\n if (arguments.length) {\n const desc = text != null ? text + '' : null;\n if (desc !== this._desc) ariaLabel(this._el, this._desc = desc);\n return this;\n }\n\n return this._desc;\n },\n\n container() {\n return this._el;\n },\n\n scenegraph() {\n return this._scenegraph;\n },\n\n origin() {\n return this._origin.slice();\n },\n\n signal(name, value, options) {\n const op = lookupSignal(this, name);\n return arguments.length === 1 ? op.value : this.update(op, value, options);\n },\n\n width(_) {\n return arguments.length ? this.signal('width', _) : this.signal('width');\n },\n\n height(_) {\n return arguments.length ? this.signal('height', _) : this.signal('height');\n },\n\n padding(_) {\n return arguments.length ? this.signal('padding', padding(_)) : padding(this.signal('padding'));\n },\n\n autosize(_) {\n return arguments.length ? this.signal('autosize', _) : this.signal('autosize');\n },\n\n background(_) {\n return arguments.length ? this.signal('background', _) : this.signal('background');\n },\n\n renderer(type) {\n if (!arguments.length) return this._renderType;\n if (!renderModule(type)) error('Unrecognized renderer type: ' + type);\n\n if (type !== this._renderType) {\n this._renderType = type;\n\n this._resetRenderer();\n }\n\n return this;\n },\n\n tooltip(handler) {\n if (!arguments.length) return this._tooltip;\n\n if (handler !== this._tooltip) {\n this._tooltip = handler;\n\n this._resetRenderer();\n }\n\n return this;\n },\n\n loader(loader) {\n if (!arguments.length) return this._loader;\n\n if (loader !== this._loader) {\n Dataflow.prototype.loader.call(this, loader);\n\n this._resetRenderer();\n }\n\n return this;\n },\n\n resize() {\n // set flag to perform autosize\n this._autosize = 1; // touch autosize signal to ensure top-level ViewLayout runs\n\n return this.touch(lookupSignal(this, 'autosize'));\n },\n\n _resetRenderer() {\n if (this._renderer) {\n this._renderer = null;\n this.initialize(this._el, this._elBind);\n }\n },\n\n // -- SIZING ----\n _resizeView: resizeView,\n\n // -- EVENT HANDLING ----\n addEventListener(type, handler, options) {\n let callback = handler;\n\n if (!(options && options.trap === false)) {\n // wrap callback in error handler\n callback = trap(this, handler);\n callback.raw = handler;\n }\n\n this._handler.on(type, callback);\n\n return this;\n },\n\n removeEventListener(type, handler) {\n var handlers = this._handler.handlers(type),\n i = handlers.length,\n h,\n t; // search registered handlers, remove if match found\n\n\n while (--i >= 0) {\n t = handlers[i].type;\n h = handlers[i].handler;\n\n if (type === t && (handler === h || handler === h.raw)) {\n this._handler.off(t, h);\n\n break;\n }\n }\n\n return this;\n },\n\n addResizeListener(handler) {\n const l = this._resizeListeners;\n\n if (l.indexOf(handler) < 0) {\n // add handler if it isn't already registered\n // note: error trapping handled elsewhere, so\n // no need to wrap handlers here\n l.push(handler);\n }\n\n return this;\n },\n\n removeResizeListener(handler) {\n var l = this._resizeListeners,\n i = l.indexOf(handler);\n\n if (i >= 0) {\n l.splice(i, 1);\n }\n\n return this;\n },\n\n addSignalListener(name, handler) {\n return addOperatorListener(this, name, lookupSignal(this, name), handler);\n },\n\n removeSignalListener(name, handler) {\n return removeOperatorListener(this, lookupSignal(this, name), handler);\n },\n\n addDataListener(name, handler) {\n return addOperatorListener(this, name, dataref(this, name).values, handler);\n },\n\n removeDataListener(name, handler) {\n return removeOperatorListener(this, dataref(this, name).values, handler);\n },\n\n globalCursor(_) {\n if (arguments.length) {\n if (this._globalCursor !== !!_) {\n const prev = setCursor(this, null); // clear previous cursor\n\n this._globalCursor = !!_;\n if (prev) setCursor(this, prev); // swap cursor\n }\n\n return this;\n } else {\n return this._globalCursor;\n }\n },\n\n preventDefault(_) {\n if (arguments.length) {\n this._preventDefault = _;\n return this;\n } else {\n return this._preventDefault;\n }\n },\n\n timer,\n events,\n finalize,\n hover,\n // -- DATA ----\n data,\n change,\n insert,\n remove,\n // -- SCALES --\n scale,\n // -- INITIALIZATION ----\n initialize,\n // -- HEADLESS RENDERING ----\n toImageURL: renderToImageURL,\n toCanvas: renderToCanvas,\n toSVG: renderToSVG,\n // -- SAVE / RESTORE STATE ----\n getState,\n setState\n});\n\nexport { View };\n","import {Timer, now} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer, total = delay;\n if (delay == null) return t.restart(callback, delay, time), t;\n t._restart = t.restart;\n t.restart = function(callback, delay, time) {\n delay = +delay, time = time == null ? now() : +time;\n t._restart(function tick(elapsed) {\n elapsed += total;\n t._restart(tick, total += delay, time);\n callback(elapsed);\n }, delay, time);\n }\n t.restart(callback, delay, time);\n return t;\n}\n","const VIEW = 'view',\n LBRACK = '[',\n RBRACK = ']',\n LBRACE = '{',\n RBRACE = '}',\n COLON = ':',\n COMMA = ',',\n NAME = '@',\n GT = '>',\n ILLEGAL = /[[\\]{}]/,\n DEFAULT_MARKS = {\n '*': 1,\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n};\nlet DEFAULT_SOURCE, MARKS;\n/**\n * Parse an event selector string.\n * Returns an array of event stream definitions.\n */\n\nfunction eventSelector (selector, source, marks) {\n DEFAULT_SOURCE = source || VIEW;\n MARKS = marks || DEFAULT_MARKS;\n return parseMerge(selector.trim()).map(parseSelector);\n}\n\nfunction isMarkType(type) {\n return MARKS[type];\n}\n\nfunction find(s, i, endChar, pushChar, popChar) {\n const n = s.length;\n let count = 0,\n c;\n\n for (; i < n; ++i) {\n c = s[i];\n if (!count && c === endChar) return i;else if (popChar && popChar.indexOf(c) >= 0) --count;else if (pushChar && pushChar.indexOf(c) >= 0) ++count;\n }\n\n return i;\n}\n\nfunction parseMerge(s) {\n const output = [],\n n = s.length;\n let start = 0,\n i = 0;\n\n while (i < n) {\n i = find(s, i, COMMA, LBRACK + LBRACE, RBRACK + RBRACE);\n output.push(s.substring(start, i).trim());\n start = ++i;\n }\n\n if (output.length === 0) {\n throw 'Empty event selector: ' + s;\n }\n\n return output;\n}\n\nfunction parseSelector(s) {\n return s[0] === '[' ? parseBetween(s) : parseStream(s);\n}\n\nfunction parseBetween(s) {\n const n = s.length;\n let i = 1,\n b;\n i = find(s, i, RBRACK, LBRACK, RBRACK);\n\n if (i === n) {\n throw 'Empty between selector: ' + s;\n }\n\n b = parseMerge(s.substring(1, i));\n\n if (b.length !== 2) {\n throw 'Between selector must have two elements: ' + s;\n }\n\n s = s.slice(i + 1).trim();\n\n if (s[0] !== GT) {\n throw 'Expected \\'>\\' after between selector: ' + s;\n }\n\n b = b.map(parseSelector);\n const stream = parseSelector(s.slice(1).trim());\n\n if (stream.between) {\n return {\n between: b,\n stream: stream\n };\n } else {\n stream.between = b;\n }\n\n return stream;\n}\n\nfunction parseStream(s) {\n const stream = {\n source: DEFAULT_SOURCE\n },\n source = [];\n let throttle = [0, 0],\n markname = 0,\n start = 0,\n n = s.length,\n i = 0,\n j,\n filter; // extract throttle from end\n\n if (s[n - 1] === RBRACE) {\n i = s.lastIndexOf(LBRACE);\n\n if (i >= 0) {\n try {\n throttle = parseThrottle(s.substring(i + 1, n - 1));\n } catch (e) {\n throw 'Invalid throttle specification: ' + s;\n }\n\n s = s.slice(0, i).trim();\n n = s.length;\n } else throw 'Unmatched right brace: ' + s;\n\n i = 0;\n }\n\n if (!n) throw s; // set name flag based on first char\n\n if (s[0] === NAME) markname = ++i; // extract first part of multi-part stream selector\n\n j = find(s, i, COLON);\n\n if (j < n) {\n source.push(s.substring(start, j).trim());\n start = i = ++j;\n } // extract remaining part of stream selector\n\n\n i = find(s, i, LBRACK);\n\n if (i === n) {\n source.push(s.substring(start, n).trim());\n } else {\n source.push(s.substring(start, i).trim());\n filter = [];\n start = ++i;\n if (start === n) throw 'Unmatched left bracket: ' + s;\n } // extract filters\n\n\n while (i < n) {\n i = find(s, i, RBRACK);\n if (i === n) throw 'Unmatched left bracket: ' + s;\n filter.push(s.substring(start, i).trim());\n if (i < n - 1 && s[++i] !== LBRACK) throw 'Expected left bracket: ' + s;\n start = ++i;\n } // marshall event stream specification\n\n\n if (!(n = source.length) || ILLEGAL.test(source[n - 1])) {\n throw 'Invalid event selector: ' + s;\n }\n\n if (n > 1) {\n stream.type = source[1];\n\n if (markname) {\n stream.markname = source[0].slice(1);\n } else if (isMarkType(source[0])) {\n stream.marktype = source[0];\n } else {\n stream.source = source[0];\n }\n } else {\n stream.type = source[0];\n }\n\n if (stream.type.slice(-1) === '!') {\n stream.consume = true;\n stream.type = stream.type.slice(0, -1);\n }\n\n if (filter != null) stream.filter = filter;\n if (throttle[0]) stream.throttle = throttle[0];\n if (throttle[1]) stream.debounce = throttle[1];\n return stream;\n}\n\nfunction parseThrottle(s) {\n const a = s.split(COMMA);\n if (!s.length || a.length > 2) throw s;\n return a.map(_ => {\n const x = +_;\n if (x !== x) throw s;\n return x;\n });\n}\n\nexport { eventSelector as selector };\n","import { isObject, isArray, extend, hasOwnProperty, array, stringValue, peek, isString, error, splitAccessPath, mergeConfig } from 'vega-util';\nimport { parseExpression } from 'vega-functions';\nimport { selector } from 'vega-event-selector';\nimport { isValidScaleType, isDiscrete, isQuantile, isDiscretizing, isContinuous } from 'vega-scale';\nimport { definition as definition$1 } from 'vega-dataflow';\n\nfunction parseAutosize (spec) {\n return isObject(spec) ? spec : {\n type: spec || 'pad'\n };\n}\n\nconst number = _ => +_ || 0;\n\nconst paddingObject = _ => ({\n top: _,\n bottom: _,\n left: _,\n right: _\n});\n\nfunction parsePadding (spec) {\n return !isObject(spec) ? paddingObject(number(spec)) : spec.signal ? spec : {\n top: number(spec.top),\n bottom: number(spec.bottom),\n left: number(spec.left),\n right: number(spec.right)\n };\n}\n\nconst encoder = _ => isObject(_) && !isArray(_) ? extend({}, _) : {\n value: _\n};\nfunction addEncode(object, name, value, set) {\n if (value != null) {\n const isEncoder = isObject(value) && !isArray(value) || isArray(value) && value.length && isObject(value[0]); // Always assign signal to update, even if the signal is from the enter block\n\n if (isEncoder) {\n object.update[name] = value;\n } else {\n object[set || 'enter'][name] = {\n value: value\n };\n }\n\n return 1;\n } else {\n return 0;\n }\n}\nfunction addEncoders(object, enter, update) {\n for (const name in enter) {\n addEncode(object, name, enter[name]);\n }\n\n for (const name in update) {\n addEncode(object, name, update[name], 'update');\n }\n}\nfunction extendEncode(encode, extra, skip) {\n for (const name in extra) {\n if (skip && hasOwnProperty(skip, name)) continue;\n encode[name] = extend(encode[name] || {}, extra[name]);\n }\n\n return encode;\n}\nfunction has(key, encode) {\n return encode && (encode.enter && encode.enter[key] || encode.update && encode.update[key]);\n}\n\nconst MarkRole = 'mark';\nconst FrameRole = 'frame';\nconst ScopeRole = 'scope';\nconst AxisRole = 'axis';\nconst AxisDomainRole = 'axis-domain';\nconst AxisGridRole = 'axis-grid';\nconst AxisLabelRole = 'axis-label';\nconst AxisTickRole = 'axis-tick';\nconst AxisTitleRole = 'axis-title';\nconst LegendRole = 'legend';\nconst LegendBandRole = 'legend-band';\nconst LegendEntryRole = 'legend-entry';\nconst LegendGradientRole = 'legend-gradient';\nconst LegendLabelRole = 'legend-label';\nconst LegendSymbolRole = 'legend-symbol';\nconst LegendTitleRole = 'legend-title';\nconst TitleRole = 'title';\nconst TitleTextRole = 'title-text';\nconst TitleSubtitleRole = 'title-subtitle';\n\nfunction applyDefaults (encode, type, role, style, config) {\n const defaults = {},\n enter = {};\n let update, key, skip, props; // if text mark, apply global lineBreak settings (#2370)\n\n key = 'lineBreak';\n\n if (type === 'text' && config[key] != null && !has(key, encode)) {\n applyDefault(defaults, key, config[key]);\n } // ignore legend and axis roles\n\n\n if (role == 'legend' || String(role).startsWith('axis')) {\n role = null;\n } // resolve mark config\n\n\n props = role === FrameRole ? config.group : role === MarkRole ? extend({}, config.mark, config[type]) : null;\n\n for (key in props) {\n // do not apply defaults if relevant fields are defined\n skip = has(key, encode) || (key === 'fill' || key === 'stroke') && (has('fill', encode) || has('stroke', encode));\n if (!skip) applyDefault(defaults, key, props[key]);\n } // resolve styles, apply with increasing precedence\n\n\n array(style).forEach(name => {\n const props = config.style && config.style[name];\n\n for (const key in props) {\n if (!has(key, encode)) {\n applyDefault(defaults, key, props[key]);\n }\n }\n });\n encode = extend({}, encode); // defensive copy\n\n for (key in defaults) {\n props = defaults[key];\n\n if (props.signal) {\n (update = update || {})[key] = props;\n } else {\n enter[key] = props;\n }\n }\n\n encode.enter = extend(enter, encode.enter);\n if (update) encode.update = extend(update, encode.update);\n return encode;\n}\n\nfunction applyDefault(defaults, key, value) {\n defaults[key] = value && value.signal ? {\n signal: value.signal\n } : {\n value: value\n };\n}\n\nconst scaleRef = scale => isString(scale) ? stringValue(scale) : scale.signal ? `(${scale.signal})` : field(scale);\n\nfunction entry$1(enc) {\n if (enc.gradient != null) {\n return gradient(enc);\n }\n\n let value = enc.signal ? `(${enc.signal})` : enc.color ? color(enc.color) : enc.field != null ? field(enc.field) : enc.value !== undefined ? stringValue(enc.value) : undefined;\n\n if (enc.scale != null) {\n value = scale(enc, value);\n }\n\n if (value === undefined) {\n value = null;\n }\n\n if (enc.exponent != null) {\n value = `pow(${value},${property(enc.exponent)})`;\n }\n\n if (enc.mult != null) {\n value += `*${property(enc.mult)}`;\n }\n\n if (enc.offset != null) {\n value += `+${property(enc.offset)}`;\n }\n\n if (enc.round) {\n value = `round(${value})`;\n }\n\n return value;\n}\n\nconst _color = (type, x, y, z) => `(${type}(${[x, y, z].map(entry$1).join(',')})+'')`;\n\nfunction color(enc) {\n return enc.c ? _color('hcl', enc.h, enc.c, enc.l) : enc.h || enc.s ? _color('hsl', enc.h, enc.s, enc.l) : enc.l || enc.a ? _color('lab', enc.l, enc.a, enc.b) : enc.r || enc.g || enc.b ? _color('rgb', enc.r, enc.g, enc.b) : null;\n}\n\nfunction gradient(enc) {\n // map undefined to null; expression lang does not allow undefined\n const args = [enc.start, enc.stop, enc.count].map(_ => _ == null ? null : stringValue(_)); // trim null inputs from the end\n\n while (args.length && peek(args) == null) args.pop();\n\n args.unshift(scaleRef(enc.gradient));\n return `gradient(${args.join(',')})`;\n}\n\nfunction property(property) {\n return isObject(property) ? '(' + entry$1(property) + ')' : property;\n}\n\nfunction field(ref) {\n return resolveField(isObject(ref) ? ref : {\n datum: ref\n });\n}\n\nfunction resolveField(ref) {\n let object, level, field;\n\n if (ref.signal) {\n object = 'datum';\n field = ref.signal;\n } else if (ref.group || ref.parent) {\n level = Math.max(1, ref.level || 1);\n object = 'item';\n\n while (level-- > 0) {\n object += '.mark.group';\n }\n\n if (ref.parent) {\n field = ref.parent;\n object += '.datum';\n } else {\n field = ref.group;\n }\n } else if (ref.datum) {\n object = 'datum';\n field = ref.datum;\n } else {\n error('Invalid field reference: ' + stringValue(ref));\n }\n\n if (!ref.signal) {\n field = isString(field) ? splitAccessPath(field).map(stringValue).join('][') : resolveField(field);\n }\n\n return object + '[' + field + ']';\n}\n\nfunction scale(enc, value) {\n const scale = scaleRef(enc.scale);\n\n if (enc.range != null) {\n // pull value from scale range\n value = `lerp(_range(${scale}), ${+enc.range})`;\n } else {\n // run value through scale and/or pull scale bandwidth\n if (value !== undefined) value = `_scale(${scale}, ${value})`;\n\n if (enc.band) {\n value = (value ? value + '+' : '') + `_bandwidth(${scale})` + (+enc.band === 1 ? '' : '*' + property(enc.band));\n\n if (enc.extra) {\n // include logic to handle extraneous elements\n value = `(datum.extra ? _scale(${scale}, datum.extra.value) : ${value})`;\n }\n }\n\n if (value == null) value = '0';\n }\n\n return value;\n}\n\nfunction rule (enc) {\n let code = '';\n enc.forEach(rule => {\n const value = entry$1(rule);\n code += rule.test ? `(${rule.test})?${value}:` : value;\n }); // if no else clause, terminate with null (#1366)\n\n if (peek(code) === ':') {\n code += 'null';\n }\n\n return code;\n}\n\nfunction parseEncode (encode, type, role, style, scope, params) {\n const enc = {};\n params = params || {};\n params.encoders = {\n $encode: enc\n };\n encode = applyDefaults(encode, type, role, style, scope.config);\n\n for (const key in encode) {\n enc[key] = parseBlock(encode[key], type, params, scope);\n }\n\n return params;\n}\n\nfunction parseBlock(block, marktype, params, scope) {\n const channels = {},\n fields = {};\n\n for (const name in block) {\n if (block[name] != null) {\n // skip any null entries\n channels[name] = parse$1(expr(block[name]), scope, params, fields);\n }\n }\n\n return {\n $expr: {\n marktype,\n channels\n },\n $fields: Object.keys(fields),\n $output: Object.keys(block)\n };\n}\n\nfunction expr(enc) {\n return isArray(enc) ? rule(enc) : entry$1(enc);\n}\n\nfunction parse$1(code, scope, params, fields) {\n const expr = parseExpression(code, scope);\n expr.$fields.forEach(name => fields[name] = 1);\n extend(params, expr.$params);\n return expr.$expr;\n}\n\nconst OUTER = 'outer',\n OUTER_INVALID = ['value', 'update', 'init', 'react', 'bind'];\n\nfunction outerError(prefix, name) {\n error(prefix + ' for \"outer\" push: ' + stringValue(name));\n}\n\nfunction parseSignal (signal, scope) {\n const name = signal.name;\n\n if (signal.push === OUTER) {\n // signal must already be defined, raise error if not\n if (!scope.signals[name]) outerError('No prior signal definition', name); // signal push must not use properties reserved for standard definition\n\n OUTER_INVALID.forEach(prop => {\n if (signal[prop] !== undefined) outerError('Invalid property ', prop);\n });\n } else {\n // define a new signal in the current scope\n const op = scope.addSignal(name, signal.value);\n if (signal.react === false) op.react = false;\n if (signal.bind) scope.addBinding(name, signal.bind);\n }\n}\n\nfunction Entry(type, value, params, parent) {\n this.id = -1;\n this.type = type;\n this.value = value;\n this.params = params;\n if (parent) this.parent = parent;\n}\nfunction entry(type, value, params, parent) {\n return new Entry(type, value, params, parent);\n}\nfunction operator(value, params) {\n return entry('operator', value, params);\n} // -----\n\nfunction ref(op) {\n const ref = {\n $ref: op.id\n }; // if operator not yet registered, cache ref to resolve later\n\n if (op.id < 0) (op.refs = op.refs || []).push(ref);\n return ref;\n}\nfunction fieldRef$1(field, name) {\n return name ? {\n $field: field,\n $name: name\n } : {\n $field: field\n };\n}\nconst keyFieldRef = fieldRef$1('key');\nfunction compareRef(fields, orders) {\n return {\n $compare: fields,\n $order: orders\n };\n}\nfunction keyRef(fields, flat) {\n const ref = {\n $key: fields\n };\n if (flat) ref.$flat = true;\n return ref;\n} // -----\n\nconst Ascending = 'ascending';\nconst Descending = 'descending';\nfunction sortKey(sort) {\n return !isObject(sort) ? '' : (sort.order === Descending ? '-' : '+') + aggrField(sort.op, sort.field);\n}\nfunction aggrField(op, field) {\n return (op && op.signal ? '$' + op.signal : op || '') + (op && field ? '_' : '') + (field && field.signal ? '$' + field.signal : field || '');\n} // -----\n\nconst Scope$1 = 'scope';\nconst View = 'view';\nfunction isSignal(_) {\n return _ && _.signal;\n}\nfunction isExpr$1(_) {\n return _ && _.expr;\n}\nfunction hasSignal(_) {\n if (isSignal(_)) return true;\n if (isObject(_)) for (const key in _) {\n if (hasSignal(_[key])) return true;\n }\n return false;\n}\nfunction value(specValue, defaultValue) {\n return specValue != null ? specValue : defaultValue;\n}\nfunction deref(v) {\n return v && v.signal || v;\n}\n\nconst Timer = 'timer';\nfunction parseStream(stream, scope) {\n const method = stream.merge ? mergeStream : stream.stream ? nestedStream : stream.type ? eventStream : error('Invalid stream specification: ' + stringValue(stream));\n return method(stream, scope);\n}\n\nfunction eventSource(source) {\n return source === Scope$1 ? View : source || View;\n}\n\nfunction mergeStream(stream, scope) {\n const list = stream.merge.map(s => parseStream(s, scope)),\n entry = streamParameters({\n merge: list\n }, stream, scope);\n return scope.addStream(entry).id;\n}\n\nfunction nestedStream(stream, scope) {\n const id = parseStream(stream.stream, scope),\n entry = streamParameters({\n stream: id\n }, stream, scope);\n return scope.addStream(entry).id;\n}\n\nfunction eventStream(stream, scope) {\n let id;\n\n if (stream.type === Timer) {\n id = scope.event(Timer, stream.throttle);\n stream = {\n between: stream.between,\n filter: stream.filter\n };\n } else {\n id = scope.event(eventSource(stream.source), stream.type);\n }\n\n const entry = streamParameters({\n stream: id\n }, stream, scope);\n return Object.keys(entry).length === 1 ? id : scope.addStream(entry).id;\n}\n\nfunction streamParameters(entry, stream, scope) {\n let param = stream.between;\n\n if (param) {\n if (param.length !== 2) {\n error('Stream \"between\" parameter must have 2 entries: ' + stringValue(stream));\n }\n\n entry.between = [parseStream(param[0], scope), parseStream(param[1], scope)];\n }\n\n param = stream.filter ? [].concat(stream.filter) : [];\n\n if (stream.marktype || stream.markname || stream.markrole) {\n // add filter for mark type, name and/or role\n param.push(filterMark(stream.marktype, stream.markname, stream.markrole));\n }\n\n if (stream.source === Scope$1) {\n // add filter to limit events from sub-scope only\n param.push('inScope(event.item)');\n }\n\n if (param.length) {\n entry.filter = parseExpression('(' + param.join(')&&(') + ')', scope).$expr;\n }\n\n if ((param = stream.throttle) != null) {\n entry.throttle = +param;\n }\n\n if ((param = stream.debounce) != null) {\n entry.debounce = +param;\n }\n\n if (stream.consume) {\n entry.consume = true;\n }\n\n return entry;\n}\n\nfunction filterMark(type, name, role) {\n const item = 'event.item';\n return item + (type && type !== '*' ? '&&' + item + '.mark.marktype===\\'' + type + '\\'' : '') + (role ? '&&' + item + '.mark.role===\\'' + role + '\\'' : '') + (name ? '&&' + item + '.mark.name===\\'' + name + '\\'' : '');\n}\n\nconst OP_VALUE_EXPR = {\n code: '_.$value',\n ast: {\n type: 'Identifier',\n value: 'value'\n }\n};\nfunction parseUpdate (spec, scope, target) {\n const encode = spec.encode,\n entry = {\n target: target\n };\n let events = spec.events,\n update = spec.update,\n sources = [];\n\n if (!events) {\n error('Signal update missing events specification.');\n } // interpret as an event selector string\n\n\n if (isString(events)) {\n events = selector(events, scope.isSubscope() ? Scope$1 : View);\n } // separate event streams from signal updates\n\n\n events = array(events).filter(s => s.signal || s.scale ? (sources.push(s), 0) : 1); // merge internal operator listeners\n\n if (sources.length > 1) {\n sources = [mergeSources(sources)];\n } // merge event streams, include as source\n\n\n if (events.length) {\n sources.push(events.length > 1 ? {\n merge: events\n } : events[0]);\n }\n\n if (encode != null) {\n if (update) error('Signal encode and update are mutually exclusive.');\n update = 'encode(item(),' + stringValue(encode) + ')';\n } // resolve update value\n\n\n entry.update = isString(update) ? parseExpression(update, scope) : update.expr != null ? parseExpression(update.expr, scope) : update.value != null ? update.value : update.signal != null ? {\n $expr: OP_VALUE_EXPR,\n $params: {\n $value: scope.signalRef(update.signal)\n }\n } : error('Invalid signal update specification.');\n\n if (spec.force) {\n entry.options = {\n force: true\n };\n }\n\n sources.forEach(source => scope.addUpdate(extend(streamSource(source, scope), entry)));\n}\n\nfunction streamSource(stream, scope) {\n return {\n source: stream.signal ? scope.signalRef(stream.signal) : stream.scale ? scope.scaleRef(stream.scale) : parseStream(stream, scope)\n };\n}\n\nfunction mergeSources(sources) {\n return {\n signal: '[' + sources.map(s => s.scale ? 'scale(\"' + s.scale + '\")' : s.signal) + ']'\n };\n}\n\nfunction parseSignalUpdates (signal, scope) {\n const op = scope.getSignal(signal.name);\n let expr = signal.update;\n\n if (signal.init) {\n if (expr) {\n error('Signals can not include both init and update expressions.');\n } else {\n expr = signal.init;\n op.initonly = true;\n }\n }\n\n if (expr) {\n expr = parseExpression(expr, scope);\n op.update = expr.$expr;\n op.params = expr.$params;\n }\n\n if (signal.on) {\n signal.on.forEach(_ => parseUpdate(_, scope, op.id));\n }\n}\n\nconst transform = name => (params, value, parent) => entry(name, value, params || undefined, parent);\n\nconst Aggregate = transform('aggregate');\nconst AxisTicks = transform('axisticks');\nconst Bound = transform('bound');\nconst Collect = transform('collect');\nconst Compare = transform('compare');\nconst DataJoin = transform('datajoin');\nconst Encode = transform('encode');\nconst Expression = transform('expression');\nconst Facet = transform('facet');\nconst Field = transform('field');\nconst Key = transform('key');\nconst LegendEntries = transform('legendentries');\nconst Load = transform('load');\nconst Mark = transform('mark');\nconst MultiExtent = transform('multiextent');\nconst MultiValues = transform('multivalues');\nconst Overlap = transform('overlap');\nconst Params = transform('params');\nconst PreFacet = transform('prefacet');\nconst Projection = transform('projection');\nconst Proxy = transform('proxy');\nconst Relay = transform('relay');\nconst Render = transform('render');\nconst Scale = transform('scale');\nconst Sieve = transform('sieve');\nconst SortItems = transform('sortitems');\nconst ViewLayout = transform('viewlayout');\nconst Values = transform('values');\n\nlet FIELD_REF_ID = 0;\nconst MULTIDOMAIN_SORT_OPS = {\n min: 'min',\n max: 'max',\n count: 'sum'\n};\nfunction initScale(spec, scope) {\n const type = spec.type || 'linear';\n\n if (!isValidScaleType(type)) {\n error('Unrecognized scale type: ' + stringValue(type));\n }\n\n scope.addScale(spec.name, {\n type,\n domain: undefined\n });\n}\nfunction parseScale(spec, scope) {\n const params = scope.getScale(spec.name).params;\n let key;\n params.domain = parseScaleDomain(spec.domain, spec, scope);\n\n if (spec.range != null) {\n params.range = parseScaleRange(spec, scope, params);\n }\n\n if (spec.interpolate != null) {\n parseScaleInterpolate(spec.interpolate, params);\n }\n\n if (spec.nice != null) {\n params.nice = parseScaleNice(spec.nice);\n }\n\n if (spec.bins != null) {\n params.bins = parseScaleBins(spec.bins, scope);\n }\n\n for (key in spec) {\n if (hasOwnProperty(params, key) || key === 'name') continue;\n params[key] = parseLiteral(spec[key], scope);\n }\n}\n\nfunction parseLiteral(v, scope) {\n return !isObject(v) ? v : v.signal ? scope.signalRef(v.signal) : error('Unsupported object: ' + stringValue(v));\n}\n\nfunction parseArray(v, scope) {\n return v.signal ? scope.signalRef(v.signal) : v.map(v => parseLiteral(v, scope));\n}\n\nfunction dataLookupError(name) {\n error('Can not find data set: ' + stringValue(name));\n} // -- SCALE DOMAIN ----\n\n\nfunction parseScaleDomain(domain, spec, scope) {\n if (!domain) {\n if (spec.domainMin != null || spec.domainMax != null) {\n error('No scale domain defined for domainMin/domainMax to override.');\n }\n\n return; // default domain\n }\n\n return domain.signal ? scope.signalRef(domain.signal) : (isArray(domain) ? explicitDomain : domain.fields ? multipleDomain : singularDomain)(domain, spec, scope);\n}\n\nfunction explicitDomain(domain, spec, scope) {\n return domain.map(v => parseLiteral(v, scope));\n}\n\nfunction singularDomain(domain, spec, scope) {\n const data = scope.getData(domain.data);\n if (!data) dataLookupError(domain.data);\n return isDiscrete(spec.type) ? data.valuesRef(scope, domain.field, parseSort(domain.sort, false)) : isQuantile(spec.type) ? data.domainRef(scope, domain.field) : data.extentRef(scope, domain.field);\n}\n\nfunction multipleDomain(domain, spec, scope) {\n const data = domain.data,\n fields = domain.fields.reduce((dom, d) => {\n d = isString(d) ? {\n data: data,\n field: d\n } : isArray(d) || d.signal ? fieldRef(d, scope) : d;\n dom.push(d);\n return dom;\n }, []);\n return (isDiscrete(spec.type) ? ordinalMultipleDomain : isQuantile(spec.type) ? quantileMultipleDomain : numericMultipleDomain)(domain, scope, fields);\n}\n\nfunction fieldRef(data, scope) {\n const name = '_:vega:_' + FIELD_REF_ID++,\n coll = Collect({});\n\n if (isArray(data)) {\n coll.value = {\n $ingest: data\n };\n } else if (data.signal) {\n const code = 'setdata(' + stringValue(name) + ',' + data.signal + ')';\n coll.params.input = scope.signalRef(code);\n }\n\n scope.addDataPipeline(name, [coll, Sieve({})]);\n return {\n data: name,\n field: 'data'\n };\n}\n\nfunction ordinalMultipleDomain(domain, scope, fields) {\n const sort = parseSort(domain.sort, true);\n let a, v; // get value counts for each domain field\n\n const counts = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.countsRef(scope, f.field, sort);\n }); // aggregate the results from each domain field\n\n const p = {\n groupby: keyFieldRef,\n pulse: counts\n };\n\n if (sort) {\n a = sort.op || 'count';\n v = sort.field ? aggrField(a, sort.field) : 'count';\n p.ops = [MULTIDOMAIN_SORT_OPS[a]];\n p.fields = [scope.fieldRef(v)];\n p.as = [v];\n }\n\n a = scope.add(Aggregate(p)); // collect aggregate output\n\n const c = scope.add(Collect({\n pulse: ref(a)\n })); // extract values for combined domain\n\n v = scope.add(Values({\n field: keyFieldRef,\n sort: scope.sortRef(sort),\n pulse: ref(c)\n }));\n return ref(v);\n}\n\nfunction parseSort(sort, multidomain) {\n if (sort) {\n if (!sort.field && !sort.op) {\n if (isObject(sort)) sort.field = 'key';else sort = {\n field: 'key'\n };\n } else if (!sort.field && sort.op !== 'count') {\n error('No field provided for sort aggregate op: ' + sort.op);\n } else if (multidomain && sort.field) {\n if (sort.op && !MULTIDOMAIN_SORT_OPS[sort.op]) {\n error('Multiple domain scales can not be sorted using ' + sort.op);\n }\n }\n }\n\n return sort;\n}\n\nfunction quantileMultipleDomain(domain, scope, fields) {\n // get value arrays for each domain field\n const values = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.domainRef(scope, f.field);\n }); // combine value arrays\n\n return ref(scope.add(MultiValues({\n values: values\n })));\n}\n\nfunction numericMultipleDomain(domain, scope, fields) {\n // get extents for each domain field\n const extents = fields.map(f => {\n const data = scope.getData(f.data);\n if (!data) dataLookupError(f.data);\n return data.extentRef(scope, f.field);\n }); // combine extents\n\n return ref(scope.add(MultiExtent({\n extents: extents\n })));\n} // -- SCALE BINS -----\n\n\nfunction parseScaleBins(v, scope) {\n return v.signal || isArray(v) ? parseArray(v, scope) : scope.objectProperty(v);\n} // -- SCALE NICE -----\n\n\nfunction parseScaleNice(nice) {\n return isObject(nice) ? {\n interval: parseLiteral(nice.interval),\n step: parseLiteral(nice.step)\n } : parseLiteral(nice);\n} // -- SCALE INTERPOLATION -----\n\n\nfunction parseScaleInterpolate(interpolate, params) {\n params.interpolate = parseLiteral(interpolate.type || interpolate);\n\n if (interpolate.gamma != null) {\n params.interpolateGamma = parseLiteral(interpolate.gamma);\n }\n} // -- SCALE RANGE -----\n\n\nfunction parseScaleRange(spec, scope, params) {\n const config = scope.config.range;\n let range = spec.range;\n\n if (range.signal) {\n return scope.signalRef(range.signal);\n } else if (isString(range)) {\n if (config && hasOwnProperty(config, range)) {\n spec = extend({}, spec, {\n range: config[range]\n });\n return parseScaleRange(spec, scope, params);\n } else if (range === 'width') {\n range = [0, {\n signal: 'width'\n }];\n } else if (range === 'height') {\n range = isDiscrete(spec.type) ? [0, {\n signal: 'height'\n }] : [{\n signal: 'height'\n }, 0];\n } else {\n error('Unrecognized scale range value: ' + stringValue(range));\n }\n } else if (range.scheme) {\n params.scheme = isArray(range.scheme) ? parseArray(range.scheme, scope) : parseLiteral(range.scheme, scope);\n if (range.extent) params.schemeExtent = parseArray(range.extent, scope);\n if (range.count) params.schemeCount = parseLiteral(range.count, scope);\n return;\n } else if (range.step) {\n params.rangeStep = parseLiteral(range.step, scope);\n return;\n } else if (isDiscrete(spec.type) && !isArray(range)) {\n return parseScaleDomain(range, spec, scope);\n } else if (!isArray(range)) {\n error('Unsupported range type: ' + stringValue(range));\n }\n\n return range.map(v => (isArray(v) ? parseArray : parseLiteral)(v, scope));\n}\n\nfunction parseProjection (proj, scope) {\n const config = scope.config.projection || {},\n params = {};\n\n for (const name in proj) {\n if (name === 'name') continue;\n params[name] = parseParameter$1(proj[name], name, scope);\n } // apply projection defaults from config\n\n\n for (const name in config) {\n if (params[name] == null) {\n params[name] = parseParameter$1(config[name], name, scope);\n }\n }\n\n scope.addProjection(proj.name, params);\n}\n\nfunction parseParameter$1(_, name, scope) {\n return isArray(_) ? _.map(_ => parseParameter$1(_, name, scope)) : !isObject(_) ? _ : _.signal ? scope.signalRef(_.signal) : name === 'fit' ? _ : error('Unsupported parameter object: ' + stringValue(_));\n}\n\nconst Top = 'top';\nconst Left = 'left';\nconst Right = 'right';\nconst Bottom = 'bottom';\nconst Center = 'center';\nconst Vertical = 'vertical';\nconst Start = 'start';\nconst Middle = 'middle';\nconst End = 'end';\nconst Index = 'index';\nconst Label = 'label';\nconst Offset = 'offset';\nconst Perc = 'perc';\nconst Perc2 = 'perc2';\nconst Value = 'value';\nconst GuideLabelStyle = 'guide-label';\nconst GuideTitleStyle = 'guide-title';\nconst GroupTitleStyle = 'group-title';\nconst GroupSubtitleStyle = 'group-subtitle';\nconst Symbols = 'symbol';\nconst Gradient = 'gradient';\nconst Discrete = 'discrete';\nconst Size = 'size';\nconst Shape = 'shape';\nconst Fill = 'fill';\nconst Stroke = 'stroke';\nconst StrokeWidth = 'strokeWidth';\nconst StrokeDash = 'strokeDash';\nconst Opacity = 'opacity'; // Encoding channels supported by legends\n// In priority order of 'canonical' scale\n\nconst LegendScales = [Size, Shape, Fill, Stroke, StrokeWidth, StrokeDash, Opacity];\nconst Skip = {\n name: 1,\n style: 1,\n interactive: 1\n};\nconst zero = {\n value: 0\n};\nconst one = {\n value: 1\n};\n\nconst GroupMark = 'group';\nconst RectMark = 'rect';\nconst RuleMark = 'rule';\nconst SymbolMark = 'symbol';\nconst TextMark = 'text';\n\nfunction guideGroup (mark) {\n mark.type = GroupMark;\n mark.interactive = mark.interactive || false;\n return mark;\n}\n\nfunction lookup(spec, config) {\n const _ = (name, dflt) => value(spec[name], value(config[name], dflt));\n\n _.isVertical = s => Vertical === value(spec.direction, config.direction || (s ? config.symbolDirection : config.gradientDirection));\n\n _.gradientLength = () => value(spec.gradientLength, config.gradientLength || config.gradientWidth);\n\n _.gradientThickness = () => value(spec.gradientThickness, config.gradientThickness || config.gradientHeight);\n\n _.entryColumns = () => value(spec.columns, value(config.columns, +_.isVertical(true)));\n\n return _;\n}\nfunction getEncoding(name, encode) {\n const v = encode && (encode.update && encode.update[name] || encode.enter && encode.enter[name]);\n return v && v.signal ? v : v ? v.value : null;\n}\nfunction getStyle(name, scope, style) {\n const s = scope.config.style[style];\n return s && s[name];\n}\nfunction anchorExpr(s, e, m) {\n return `item.anchor === '${Start}' ? ${s} : item.anchor === '${End}' ? ${e} : ${m}`;\n}\nconst alignExpr$1 = anchorExpr(stringValue(Left), stringValue(Right), stringValue(Center));\nfunction tickBand(_) {\n const v = _('tickBand');\n\n let offset = _('tickOffset'),\n band,\n extra;\n\n if (!v) {\n // if no tick band entry, fall back on other properties\n band = _('bandPosition');\n extra = _('tickExtra');\n } else if (v.signal) {\n // if signal, augment code to interpret values\n band = {\n signal: `(${v.signal}) === 'extent' ? 1 : 0.5`\n };\n extra = {\n signal: `(${v.signal}) === 'extent'`\n };\n\n if (!isObject(offset)) {\n offset = {\n signal: `(${v.signal}) === 'extent' ? 0 : ${offset}`\n };\n }\n } else if (v === 'extent') {\n // if constant, simply set values\n band = 1;\n extra = true;\n offset = 0;\n } else {\n band = 0.5;\n extra = false;\n }\n\n return {\n extra,\n band,\n offset\n };\n}\nfunction extendOffset(value, offset) {\n return !offset ? value : !value ? offset : !isObject(value) ? {\n value,\n offset\n } : Object.assign({}, value, {\n offset: extendOffset(value.offset, offset)\n });\n}\n\nfunction guideMark (mark, extras) {\n if (extras) {\n mark.name = extras.name;\n mark.style = extras.style || mark.style;\n mark.interactive = !!extras.interactive;\n mark.encode = extendEncode(mark.encode, extras, Skip);\n } else {\n mark.interactive = false;\n }\n\n return mark;\n}\n\nfunction legendGradient (spec, scale, config, userEncode) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = _.gradientThickness(),\n length = _.gradientLength();\n\n let enter, start, stop, width, height;\n\n if (vertical) {\n start = [0, 1];\n stop = [0, 0];\n width = thickness;\n height = length;\n } else {\n start = [0, 0];\n stop = [1, 0];\n width = length;\n height = thickness;\n }\n\n const encode = {\n enter: enter = {\n opacity: zero,\n x: zero,\n y: zero,\n width: encoder(width),\n height: encoder(height)\n },\n update: extend({}, enter, {\n opacity: one,\n fill: {\n gradient: scale,\n start: start,\n stop: stop\n }\n }),\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gradientStrokeColor'),\n strokeWidth: _('gradientStrokeWidth')\n }, {\n // update\n opacity: _('gradientOpacity')\n });\n return guideMark({\n type: RectMark,\n role: LegendGradientRole,\n encode\n }, userEncode);\n}\n\nfunction legendGradientDiscrete (spec, scale, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = _.gradientThickness(),\n length = _.gradientLength();\n\n let u,\n v,\n uu,\n vv,\n adjust = '';\n vertical ? (u = 'y', uu = 'y2', v = 'x', vv = 'width', adjust = '1-') : (u = 'x', uu = 'x2', v = 'y', vv = 'height');\n const enter = {\n opacity: zero,\n fill: {\n scale: scale,\n field: Value\n }\n };\n enter[u] = {\n signal: adjust + 'datum.' + Perc,\n mult: length\n };\n enter[v] = zero;\n enter[uu] = {\n signal: adjust + 'datum.' + Perc2,\n mult: length\n };\n enter[vv] = encoder(thickness);\n const encode = {\n enter: enter,\n update: extend({}, enter, {\n opacity: one\n }),\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gradientStrokeColor'),\n strokeWidth: _('gradientStrokeWidth')\n }, {\n // update\n opacity: _('gradientOpacity')\n });\n return guideMark({\n type: RectMark,\n role: LegendBandRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nconst alignExpr = `datum.${Perc}<=0?\"${Left}\":datum.${Perc}>=1?\"${Right}\":\"${Center}\"`,\n baselineExpr = `datum.${Perc}<=0?\"${Bottom}\":datum.${Perc}>=1?\"${Top}\":\"${Middle}\"`;\nfunction legendGradientLabels (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n vertical = _.isVertical(),\n thickness = encoder(_.gradientThickness()),\n length = _.gradientLength();\n\n let overlap = _('labelOverlap'),\n enter,\n update,\n u,\n v,\n adjust = '';\n\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one,\n text: {\n field: Label\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontStyle: _('labelFontStyle'),\n fontWeight: _('labelFontWeight'),\n limit: value(spec.labelLimit, config.gradientLabelLimit)\n });\n\n if (vertical) {\n enter.align = {\n value: 'left'\n };\n enter.baseline = update.baseline = {\n signal: baselineExpr\n };\n u = 'y';\n v = 'x';\n adjust = '1-';\n } else {\n enter.align = update.align = {\n signal: alignExpr\n };\n enter.baseline = {\n value: 'top'\n };\n u = 'x';\n v = 'y';\n }\n\n enter[u] = update[u] = {\n signal: adjust + 'datum.' + Perc,\n mult: length\n };\n enter[v] = update[v] = thickness;\n thickness.offset = value(spec.labelOffset, config.gradientLabelOffset) || 0;\n overlap = overlap ? {\n separation: _('labelSeparation'),\n method: overlap,\n order: 'datum.' + Index\n } : undefined; // type, role, style, key, dataRef, encode, extras\n\n return guideMark({\n type: TextMark,\n role: LegendLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: dataRef,\n encode,\n overlap\n }, userEncode);\n}\n\nfunction legendSymbolGroups (spec, config, userEncode, dataRef, columns) {\n const _ = lookup(spec, config),\n entries = userEncode.entries,\n interactive = !!(entries && entries.interactive),\n name = entries ? entries.name : undefined,\n height = _('clipHeight'),\n symbolOffset = _('symbolOffset'),\n valueRef = {\n data: 'value'\n },\n xSignal = `(${columns}) ? datum.${Offset} : datum.${Size}`,\n yEncode = height ? encoder(height) : {\n field: Size\n },\n index = `datum.${Index}`,\n ncols = `max(1, ${columns})`;\n\n let encode, enter, update, nrows, sort;\n yEncode.mult = 0.5; // -- LEGEND SYMBOLS --\n\n encode = {\n enter: enter = {\n opacity: zero,\n x: {\n signal: xSignal,\n mult: 0.5,\n offset: symbolOffset\n },\n y: yEncode\n },\n update: update = {\n opacity: one,\n x: enter.x,\n y: enter.y\n },\n exit: {\n opacity: zero\n }\n };\n let baseFill = null,\n baseStroke = null;\n\n if (!spec.fill) {\n baseFill = config.symbolBaseFillColor;\n baseStroke = config.symbolBaseStrokeColor;\n }\n\n addEncoders(encode, {\n fill: _('symbolFillColor', baseFill),\n shape: _('symbolType'),\n size: _('symbolSize'),\n stroke: _('symbolStrokeColor', baseStroke),\n strokeDash: _('symbolDash'),\n strokeDashOffset: _('symbolDashOffset'),\n strokeWidth: _('symbolStrokeWidth')\n }, {\n // update\n opacity: _('symbolOpacity')\n });\n LegendScales.forEach(scale => {\n if (spec[scale]) {\n update[scale] = enter[scale] = {\n scale: spec[scale],\n field: Value\n };\n }\n });\n const symbols = guideMark({\n type: SymbolMark,\n role: LegendSymbolRole,\n key: Value,\n from: valueRef,\n clip: height ? true : undefined,\n encode\n }, userEncode.symbols); // -- LEGEND LABELS --\n\n const labelOffset = encoder(symbolOffset);\n labelOffset.offset = _('labelOffset');\n encode = {\n enter: enter = {\n opacity: zero,\n x: {\n signal: xSignal,\n offset: labelOffset\n },\n y: yEncode\n },\n update: update = {\n opacity: one,\n text: {\n field: Label\n },\n x: enter.x,\n y: enter.y\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n align: _('labelAlign'),\n baseline: _('labelBaseline'),\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontStyle: _('labelFontStyle'),\n fontWeight: _('labelFontWeight'),\n limit: _('labelLimit')\n });\n const labels = guideMark({\n type: TextMark,\n role: LegendLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: valueRef,\n encode\n }, userEncode.labels); // -- LEGEND ENTRY GROUPS --\n\n encode = {\n enter: {\n noBound: {\n value: !height\n },\n // ignore width/height in bounds calc\n width: zero,\n height: height ? encoder(height) : zero,\n opacity: zero\n },\n exit: {\n opacity: zero\n },\n update: update = {\n opacity: one,\n row: {\n signal: null\n },\n column: {\n signal: null\n }\n }\n }; // annotate and sort groups to ensure correct ordering\n\n if (_.isVertical(true)) {\n nrows = `ceil(item.mark.items.length / ${ncols})`;\n update.row.signal = `${index}%${nrows}`;\n update.column.signal = `floor(${index} / ${nrows})`;\n sort = {\n field: ['row', index]\n };\n } else {\n update.row.signal = `floor(${index} / ${ncols})`;\n update.column.signal = `${index} % ${ncols}`;\n sort = {\n field: index\n };\n } // handle zero column case (implies infinite columns)\n\n\n update.column.signal = `(${columns})?${update.column.signal}:${index}`; // facet legend entries into sub-groups\n\n dataRef = {\n facet: {\n data: dataRef,\n name: 'value',\n groupby: Index\n }\n };\n return guideGroup({\n role: ScopeRole,\n from: dataRef,\n encode: extendEncode(encode, entries, Skip),\n marks: [symbols, labels],\n name,\n interactive,\n sort\n });\n}\nfunction legendSymbolLayout(spec, config) {\n const _ = lookup(spec, config); // layout parameters for legend entries\n\n\n return {\n align: _('gridAlign'),\n columns: _.entryColumns(),\n center: {\n row: true,\n column: false\n },\n padding: {\n row: _('rowPadding'),\n column: _('columnPadding')\n }\n };\n}\n\nconst isL = 'item.orient === \"left\"',\n isR = 'item.orient === \"right\"',\n isLR = `(${isL} || ${isR})`,\n isVG = `datum.vgrad && ${isLR}`,\n baseline = anchorExpr('\"top\"', '\"bottom\"', '\"middle\"'),\n alignFlip = anchorExpr('\"right\"', '\"left\"', '\"center\"'),\n exprAlign = `datum.vgrad && ${isR} ? (${alignFlip}) : (${isLR} && !(datum.vgrad && ${isL})) ? \"left\" : ${alignExpr$1}`,\n exprAnchor = `item._anchor || (${isLR} ? \"middle\" : \"start\")`,\n exprAngle = `${isVG} ? (${isL} ? -90 : 90) : 0`,\n exprBaseline = `${isLR} ? (datum.vgrad ? (${isR} ? \"bottom\" : \"top\") : ${baseline}) : \"top\"`;\nfunction legendTitle (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config);\n\n const encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: one,\n x: {\n field: {\n group: 'padding'\n }\n },\n y: {\n field: {\n group: 'padding'\n }\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n orient: _('titleOrient'),\n _anchor: _('titleAnchor'),\n anchor: {\n signal: exprAnchor\n },\n angle: {\n signal: exprAngle\n },\n align: {\n signal: exprAlign\n },\n baseline: {\n signal: exprBaseline\n },\n text: spec.title,\n fill: _('titleColor'),\n fillOpacity: _('titleOpacity'),\n font: _('titleFont'),\n fontSize: _('titleFontSize'),\n fontStyle: _('titleFontStyle'),\n fontWeight: _('titleFontWeight'),\n limit: _('titleLimit'),\n lineHeight: _('titleLineHeight')\n }, {\n // require update\n align: _('titleAlign'),\n baseline: _('titleBaseline')\n });\n return guideMark({\n type: TextMark,\n role: LegendTitleRole,\n style: GuideTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction clip (clip, scope) {\n let expr;\n\n if (isObject(clip)) {\n if (clip.signal) {\n expr = clip.signal;\n } else if (clip.path) {\n expr = 'pathShape(' + param(clip.path) + ')';\n } else if (clip.sphere) {\n expr = 'geoShape(' + param(clip.sphere) + ', {type: \"Sphere\"})';\n }\n }\n\n return expr ? scope.signalRef(expr) : !!clip;\n}\n\nfunction param(value) {\n return isObject(value) && value.signal ? value.signal : stringValue(value);\n}\n\nfunction getRole (spec) {\n const role = spec.role || '';\n return !role.indexOf('axis') || !role.indexOf('legend') || !role.indexOf('title') ? role : spec.type === GroupMark ? ScopeRole : role || MarkRole;\n}\n\nfunction definition (spec) {\n return {\n marktype: spec.type,\n name: spec.name || undefined,\n role: spec.role || getRole(spec),\n zindex: +spec.zindex || undefined,\n aria: spec.aria,\n description: spec.description\n };\n}\n\nfunction interactive (spec, scope) {\n return spec && spec.signal ? scope.signalRef(spec.signal) : spec === false ? false : true;\n}\n\n/**\n * Parse a data transform specification.\n */\n\nfunction parseTransform (spec, scope) {\n const def = definition$1(spec.type);\n if (!def) error('Unrecognized transform type: ' + stringValue(spec.type));\n const t = entry(def.type.toLowerCase(), null, parseParameters(def, spec, scope));\n if (spec.signal) scope.addSignal(spec.signal, scope.proxy(t));\n t.metadata = def.metadata || {};\n return t;\n}\n/**\n * Parse all parameters of a data transform.\n */\n\nfunction parseParameters(def, spec, scope) {\n const params = {},\n n = def.params.length;\n\n for (let i = 0; i < n; ++i) {\n const pdef = def.params[i];\n params[pdef.name] = parseParameter(pdef, spec, scope);\n }\n\n return params;\n}\n/**\n * Parse a data transform parameter.\n */\n\n\nfunction parseParameter(def, spec, scope) {\n const type = def.type,\n value = spec[def.name];\n\n if (type === 'index') {\n return parseIndexParameter(def, spec, scope);\n } else if (value === undefined) {\n if (def.required) {\n error('Missing required ' + stringValue(spec.type) + ' parameter: ' + stringValue(def.name));\n }\n\n return;\n } else if (type === 'param') {\n return parseSubParameters(def, spec, scope);\n } else if (type === 'projection') {\n return scope.projectionRef(spec[def.name]);\n }\n\n return def.array && !isSignal(value) ? value.map(v => parameterValue(def, v, scope)) : parameterValue(def, value, scope);\n}\n/**\n * Parse a single parameter value.\n */\n\n\nfunction parameterValue(def, value, scope) {\n const type = def.type;\n\n if (isSignal(value)) {\n return isExpr(type) ? error('Expression references can not be signals.') : isField(type) ? scope.fieldRef(value) : isCompare(type) ? scope.compareRef(value) : scope.signalRef(value.signal);\n } else {\n const expr = def.expr || isField(type);\n return expr && outerExpr(value) ? scope.exprRef(value.expr, value.as) : expr && outerField(value) ? fieldRef$1(value.field, value.as) : isExpr(type) ? parseExpression(value, scope) : isData(type) ? ref(scope.getData(value).values) : isField(type) ? fieldRef$1(value) : isCompare(type) ? scope.compareRef(value) : value;\n }\n}\n/**\n * Parse parameter for accessing an index of another data set.\n */\n\n\nfunction parseIndexParameter(def, spec, scope) {\n if (!isString(spec.from)) {\n error('Lookup \"from\" parameter must be a string literal.');\n }\n\n return scope.getData(spec.from).lookupRef(scope, spec.key);\n}\n/**\n * Parse a parameter that contains one or more sub-parameter objects.\n */\n\n\nfunction parseSubParameters(def, spec, scope) {\n const value = spec[def.name];\n\n if (def.array) {\n if (!isArray(value)) {\n // signals not allowed!\n error('Expected an array of sub-parameters. Instead: ' + stringValue(value));\n }\n\n return value.map(v => parseSubParameter(def, v, scope));\n } else {\n return parseSubParameter(def, value, scope);\n }\n}\n/**\n * Parse a sub-parameter object.\n */\n\n\nfunction parseSubParameter(def, value, scope) {\n const n = def.params.length;\n let pdef; // loop over defs to find matching key\n\n for (let i = 0; i < n; ++i) {\n pdef = def.params[i];\n\n for (const k in pdef.key) {\n if (pdef.key[k] !== value[k]) {\n pdef = null;\n break;\n }\n }\n\n if (pdef) break;\n } // raise error if matching key not found\n\n\n if (!pdef) error('Unsupported parameter: ' + stringValue(value)); // parse params, create Params transform, return ref\n\n const params = extend(parseParameters(pdef, value, scope), pdef.key);\n return ref(scope.add(Params(params)));\n} // -- Utilities -----\n\n\nconst outerExpr = _ => _ && _.expr;\nconst outerField = _ => _ && _.field;\nconst isData = _ => _ === 'data';\nconst isExpr = _ => _ === 'expr';\nconst isField = _ => _ === 'field';\nconst isCompare = _ => _ === 'compare';\n\nfunction parseData$1 (from, group, scope) {\n let facet, key, op, dataRef, parent; // if no source data, generate singleton datum\n\n if (!from) {\n dataRef = ref(scope.add(Collect(null, [{}])));\n } // if faceted, process facet specification\n else if (facet = from.facet) {\n if (!group) error('Only group marks can be faceted.'); // use pre-faceted source data, if available\n\n if (facet.field != null) {\n dataRef = parent = getDataRef(facet, scope);\n } else {\n // generate facet aggregates if no direct data specification\n if (!from.data) {\n op = parseTransform(extend({\n type: 'aggregate',\n groupby: array(facet.groupby)\n }, facet.aggregate), scope);\n op.params.key = scope.keyRef(facet.groupby);\n op.params.pulse = getDataRef(facet, scope);\n dataRef = parent = ref(scope.add(op));\n } else {\n parent = ref(scope.getData(from.data).aggregate);\n }\n\n key = scope.keyRef(facet.groupby, true);\n }\n } // if not yet defined, get source data reference\n\n\n if (!dataRef) {\n dataRef = getDataRef(from, scope);\n }\n\n return {\n key: key,\n pulse: dataRef,\n parent: parent\n };\n}\nfunction getDataRef(from, scope) {\n return from.$ref ? from : from.data && from.data.$ref ? from.data : ref(scope.getData(from.data).output);\n}\n\nfunction DataScope(scope, input, output, values, aggr) {\n this.scope = scope; // parent scope object\n\n this.input = input; // first operator in pipeline (tuple input)\n\n this.output = output; // last operator in pipeline (tuple output)\n\n this.values = values; // operator for accessing tuples (but not tuple flow)\n // last aggregate in transform pipeline\n\n this.aggregate = aggr; // lookup table of field indices\n\n this.index = {};\n}\n\nDataScope.fromEntries = function (scope, entries) {\n const n = entries.length,\n values = entries[n - 1],\n output = entries[n - 2];\n let input = entries[0],\n aggr = null,\n i = 1;\n\n if (input && input.type === 'load') {\n input = entries[1];\n } // add operator entries to this scope, wire up pulse chain\n\n\n scope.add(entries[0]);\n\n for (; i < n; ++i) {\n entries[i].params.pulse = ref(entries[i - 1]);\n scope.add(entries[i]);\n if (entries[i].type === 'aggregate') aggr = entries[i];\n }\n\n return new DataScope(scope, input, output, values, aggr);\n};\n\nfunction fieldKey(field) {\n return isString(field) ? field : null;\n}\n\nfunction addSortField(scope, p, sort) {\n const as = aggrField(sort.op, sort.field);\n let s;\n\n if (p.ops) {\n for (let i = 0, n = p.as.length; i < n; ++i) {\n if (p.as[i] === as) return;\n }\n } else {\n p.ops = ['count'];\n p.fields = [null];\n p.as = ['count'];\n }\n\n if (sort.op) {\n p.ops.push((s = sort.op.signal) ? scope.signalRef(s) : sort.op);\n p.fields.push(scope.fieldRef(sort.field));\n p.as.push(as);\n }\n}\n\nfunction cache(scope, ds, name, optype, field, counts, index) {\n const cache = ds[name] || (ds[name] = {}),\n sort = sortKey(counts);\n let k = fieldKey(field),\n v,\n op;\n\n if (k != null) {\n scope = ds.scope;\n k = k + (sort ? '|' + sort : '');\n v = cache[k];\n }\n\n if (!v) {\n const params = counts ? {\n field: keyFieldRef,\n pulse: ds.countsRef(scope, field, counts)\n } : {\n field: scope.fieldRef(field),\n pulse: ref(ds.output)\n };\n if (sort) params.sort = scope.sortRef(counts);\n op = scope.add(entry(optype, undefined, params));\n if (index) ds.index[field] = op;\n v = ref(op);\n if (k != null) cache[k] = v;\n }\n\n return v;\n}\n\nDataScope.prototype = {\n countsRef(scope, field, sort) {\n const ds = this,\n cache = ds.counts || (ds.counts = {}),\n k = fieldKey(field);\n let v, a, p;\n\n if (k != null) {\n scope = ds.scope;\n v = cache[k];\n }\n\n if (!v) {\n p = {\n groupby: scope.fieldRef(field, 'key'),\n pulse: ref(ds.output)\n };\n if (sort && sort.field) addSortField(scope, p, sort);\n a = scope.add(Aggregate(p));\n v = scope.add(Collect({\n pulse: ref(a)\n }));\n v = {\n agg: a,\n ref: ref(v)\n };\n if (k != null) cache[k] = v;\n } else if (sort && sort.field) {\n addSortField(scope, v.agg.params, sort);\n }\n\n return v.ref;\n },\n\n tuplesRef() {\n return ref(this.values);\n },\n\n extentRef(scope, field) {\n return cache(scope, this, 'extent', 'extent', field, false);\n },\n\n domainRef(scope, field) {\n return cache(scope, this, 'domain', 'values', field, false);\n },\n\n valuesRef(scope, field, sort) {\n return cache(scope, this, 'vals', 'values', field, sort || true);\n },\n\n lookupRef(scope, field) {\n return cache(scope, this, 'lookup', 'tupleindex', field, false);\n },\n\n indataRef(scope, field) {\n return cache(scope, this, 'indata', 'tupleindex', field, true, true);\n }\n\n};\n\nfunction parseFacet (spec, scope, group) {\n const facet = spec.from.facet,\n name = facet.name,\n data = getDataRef(facet, scope);\n let op;\n\n if (!facet.name) {\n error('Facet must have a name: ' + stringValue(facet));\n }\n\n if (!facet.data) {\n error('Facet must reference a data set: ' + stringValue(facet));\n }\n\n if (facet.field) {\n op = scope.add(PreFacet({\n field: scope.fieldRef(facet.field),\n pulse: data\n }));\n } else if (facet.groupby) {\n op = scope.add(Facet({\n key: scope.keyRef(facet.groupby),\n group: ref(scope.proxy(group.parent)),\n pulse: data\n }));\n } else {\n error('Facet must specify groupby or field: ' + stringValue(facet));\n } // initialize facet subscope\n\n\n const subscope = scope.fork(),\n source = subscope.add(Collect()),\n values = subscope.add(Sieve({\n pulse: ref(source)\n }));\n subscope.addData(name, new DataScope(subscope, source, source, values));\n subscope.addSignal('parent', null); // parse faceted subflow\n\n op.params.subflow = {\n $subflow: subscope.parse(spec).toRuntime()\n };\n}\n\nfunction parseSubflow (spec, scope, input) {\n const op = scope.add(PreFacet({\n pulse: input.pulse\n })),\n subscope = scope.fork();\n subscope.add(Sieve());\n subscope.addSignal('parent', null); // parse group mark subflow\n\n op.params.subflow = {\n $subflow: subscope.parse(spec).toRuntime()\n };\n}\n\nfunction parseTrigger (spec, scope, name) {\n const remove = spec.remove,\n insert = spec.insert,\n toggle = spec.toggle,\n modify = spec.modify,\n values = spec.values,\n op = scope.add(operator());\n const update = 'if(' + spec.trigger + ',modify(\"' + name + '\",' + [insert, remove, toggle, modify, values].map(_ => _ == null ? 'null' : _).join(',') + '),0)';\n const expr = parseExpression(update, scope);\n op.update = expr.$expr;\n op.params = expr.$params;\n}\n\nfunction parseMark (spec, scope) {\n const role = getRole(spec),\n group = spec.type === GroupMark,\n facet = spec.from && spec.from.facet,\n overlap = spec.overlap;\n let layout = spec.layout || role === ScopeRole || role === FrameRole,\n ops,\n op,\n store,\n enc,\n name,\n layoutRef,\n boundRef;\n const nested = role === MarkRole || layout || facet; // resolve input data\n\n const input = parseData$1(spec.from, group, scope); // data join to map tuples to visual items\n\n op = scope.add(DataJoin({\n key: input.key || (spec.key ? fieldRef$1(spec.key) : undefined),\n pulse: input.pulse,\n clean: !group\n }));\n const joinRef = ref(op); // collect visual items\n\n op = store = scope.add(Collect({\n pulse: joinRef\n })); // connect visual items to scenegraph\n\n op = scope.add(Mark({\n markdef: definition(spec),\n interactive: interactive(spec.interactive, scope),\n clip: clip(spec.clip, scope),\n context: {\n $context: true\n },\n groups: scope.lookup(),\n parent: scope.signals.parent ? scope.signalRef('parent') : null,\n index: scope.markpath(),\n pulse: ref(op)\n }));\n const markRef = ref(op); // add visual encoders\n\n op = enc = scope.add(Encode(parseEncode(spec.encode, spec.type, role, spec.style, scope, {\n mod: false,\n pulse: markRef\n }))); // monitor parent marks to propagate changes\n\n op.params.parent = scope.encode(); // add post-encoding transforms, if defined\n\n if (spec.transform) {\n spec.transform.forEach(_ => {\n const tx = parseTransform(_, scope),\n md = tx.metadata;\n\n if (md.generates || md.changes) {\n error('Mark transforms should not generate new data.');\n }\n\n if (!md.nomod) enc.params.mod = true; // update encode mod handling\n\n tx.params.pulse = ref(op);\n scope.add(op = tx);\n });\n } // if item sort specified, perform post-encoding\n\n\n if (spec.sort) {\n op = scope.add(SortItems({\n sort: scope.compareRef(spec.sort),\n pulse: ref(op)\n }));\n }\n\n const encodeRef = ref(op); // add view layout operator if needed\n\n if (facet || layout) {\n layout = scope.add(ViewLayout({\n layout: scope.objectProperty(spec.layout),\n legends: scope.legends,\n mark: markRef,\n pulse: encodeRef\n }));\n layoutRef = ref(layout);\n } // compute bounding boxes\n\n\n const bound = scope.add(Bound({\n mark: markRef,\n pulse: layoutRef || encodeRef\n }));\n boundRef = ref(bound); // if group mark, recurse to parse nested content\n\n if (group) {\n // juggle layout & bounds to ensure they run *after* any faceting transforms\n if (nested) {\n ops = scope.operators;\n ops.pop();\n if (layout) ops.pop();\n }\n\n scope.pushState(encodeRef, layoutRef || boundRef, joinRef);\n facet ? parseFacet(spec, scope, input) // explicit facet\n : nested ? parseSubflow(spec, scope, input) // standard mark group\n : scope.parse(spec); // guide group, we can avoid nested scopes\n\n scope.popState();\n\n if (nested) {\n if (layout) ops.push(layout);\n ops.push(bound);\n }\n } // if requested, add overlap removal transform\n\n\n if (overlap) {\n boundRef = parseOverlap(overlap, boundRef, scope);\n } // render / sieve items\n\n\n const render = scope.add(Render({\n pulse: boundRef\n })),\n sieve = scope.add(Sieve({\n pulse: ref(render)\n }, undefined, scope.parent())); // if mark is named, make accessible as reactive geometry\n // add trigger updates if defined\n\n if (spec.name != null) {\n name = spec.name;\n scope.addData(name, new DataScope(scope, store, render, sieve));\n if (spec.on) spec.on.forEach(on => {\n if (on.insert || on.remove || on.toggle) {\n error('Marks only support modify triggers.');\n }\n\n parseTrigger(on, scope, name);\n });\n }\n}\n\nfunction parseOverlap(overlap, source, scope) {\n const method = overlap.method,\n bound = overlap.bound,\n sep = overlap.separation;\n const params = {\n separation: isSignal(sep) ? scope.signalRef(sep.signal) : sep,\n method: isSignal(method) ? scope.signalRef(method.signal) : method,\n pulse: source\n };\n\n if (overlap.order) {\n params.sort = scope.compareRef({\n field: overlap.order\n });\n }\n\n if (bound) {\n const tol = bound.tolerance;\n params.boundTolerance = isSignal(tol) ? scope.signalRef(tol.signal) : +tol;\n params.boundScale = scope.scaleRef(bound.scale);\n params.boundOrient = bound.orient;\n }\n\n return ref(scope.add(Overlap(params)));\n}\n\nfunction parseLegend (spec, scope) {\n const config = scope.config.legend,\n encode = spec.encode || {},\n _ = lookup(spec, config),\n legendEncode = encode.legend || {},\n name = legendEncode.name || undefined,\n interactive = legendEncode.interactive,\n style = legendEncode.style,\n scales = {};\n\n let scale = 0,\n entryLayout,\n params,\n children; // resolve scales and 'canonical' scale name\n\n LegendScales.forEach(s => spec[s] ? (scales[s] = spec[s], scale = scale || spec[s]) : 0);\n if (!scale) error('Missing valid scale for legend.'); // resolve legend type (symbol, gradient, or discrete gradient)\n\n const type = legendType(spec, scope.scaleType(scale)); // single-element data source for legend group\n\n const datum = {\n title: spec.title != null,\n scales: scales,\n type: type,\n vgrad: type !== 'symbol' && _.isVertical()\n };\n const dataRef = ref(scope.add(Collect(null, [datum]))); // encoding properties for legend entry sub-group\n\n const entryEncode = {\n enter: {\n x: {\n value: 0\n },\n y: {\n value: 0\n }\n }\n }; // data source for legend values\n\n const entryRef = ref(scope.add(LegendEntries(params = {\n type: type,\n scale: scope.scaleRef(scale),\n count: scope.objectProperty(_('tickCount')),\n limit: scope.property(_('symbolLimit')),\n values: scope.objectProperty(spec.values),\n minstep: scope.property(spec.tickMinStep),\n formatType: scope.property(spec.formatType),\n formatSpecifier: scope.property(spec.format)\n }))); // continuous gradient legend\n\n if (type === Gradient) {\n children = [legendGradient(spec, scale, config, encode.gradient), legendGradientLabels(spec, config, encode.labels, entryRef)]; // adjust default tick count based on the gradient length\n\n params.count = params.count || scope.signalRef(`max(2,2*floor((${deref(_.gradientLength())})/100))`);\n } // discrete gradient legend\n else if (type === Discrete) {\n children = [legendGradientDiscrete(spec, scale, config, encode.gradient, entryRef), legendGradientLabels(spec, config, encode.labels, entryRef)];\n } // symbol legend\n else {\n // determine legend symbol group layout\n entryLayout = legendSymbolLayout(spec, config);\n children = [legendSymbolGroups(spec, config, encode, entryRef, deref(entryLayout.columns))]; // pass symbol size information to legend entry generator\n\n params.size = sizeExpression(spec, scope, children[0].marks);\n } // generate legend marks\n\n\n children = [guideGroup({\n role: LegendEntryRole,\n from: dataRef,\n encode: entryEncode,\n marks: children,\n layout: entryLayout,\n interactive\n })]; // include legend title if defined\n\n if (datum.title) {\n children.push(legendTitle(spec, config, encode.title, dataRef));\n } // parse legend specification\n\n\n return parseMark(guideGroup({\n role: LegendRole,\n from: dataRef,\n encode: extendEncode(buildLegendEncode(_, spec, config), legendEncode, Skip),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\n\nfunction legendType(spec, scaleType) {\n let type = spec.type || Symbols;\n\n if (!spec.type && scaleCount(spec) === 1 && (spec.fill || spec.stroke)) {\n type = isContinuous(scaleType) ? Gradient : isDiscretizing(scaleType) ? Discrete : Symbols;\n }\n\n return type !== Gradient ? type : isDiscretizing(scaleType) ? Discrete : Gradient;\n}\n\nfunction scaleCount(spec) {\n return LegendScales.reduce((count, type) => count + (spec[type] ? 1 : 0), 0);\n}\n\nfunction buildLegendEncode(_, spec, config) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n offset: _('offset'),\n padding: _('padding'),\n titlePadding: _('titlePadding'),\n cornerRadius: _('cornerRadius'),\n fill: _('fillColor'),\n stroke: _('strokeColor'),\n strokeWidth: config.strokeWidth,\n strokeDash: config.strokeDash,\n x: _('legendX'),\n y: _('legendY'),\n // accessibility support\n format: spec.format,\n formatType: spec.formatType\n });\n return encode;\n}\n\nfunction sizeExpression(spec, scope, marks) {\n const size = deref(getChannel('size', spec, marks)),\n strokeWidth = deref(getChannel('strokeWidth', spec, marks)),\n fontSize = deref(getFontSize(marks[1].encode, scope, GuideLabelStyle));\n return parseExpression(`max(ceil(sqrt(${size})+${strokeWidth}),${fontSize})`, scope);\n}\n\nfunction getChannel(name, spec, marks) {\n return spec[name] ? `scale(\"${spec[name]}\",datum)` : getEncoding(name, marks[0].encode);\n}\n\nfunction getFontSize(encode, scope, style) {\n return getEncoding('fontSize', encode) || getStyle('fontSize', scope, style);\n}\n\nconst angleExpr = `item.orient===\"${Left}\"?-90:item.orient===\"${Right}\"?90:0`;\nfunction parseTitle (spec, scope) {\n spec = isString(spec) ? {\n text: spec\n } : spec;\n\n const _ = lookup(spec, scope.config.title),\n encode = spec.encode || {},\n userEncode = encode.group || {},\n name = userEncode.name || undefined,\n interactive = userEncode.interactive,\n style = userEncode.style,\n children = []; // single-element data source for group title\n\n\n const datum = {},\n dataRef = ref(scope.add(Collect(null, [datum]))); // include title text\n\n children.push(buildTitle(spec, _, titleEncode(spec), dataRef)); // include subtitle text\n\n if (spec.subtitle) {\n children.push(buildSubTitle(spec, _, encode.subtitle, dataRef));\n } // parse title specification\n\n\n return parseMark(guideGroup({\n role: TitleRole,\n from: dataRef,\n encode: groupEncode(_, userEncode),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n} // provide backwards-compatibility for title custom encode;\n// the top-level encode block has been *deprecated*.\n\nfunction titleEncode(spec) {\n const encode = spec.encode;\n return encode && encode.title || extend({\n name: spec.name,\n interactive: spec.interactive,\n style: spec.style\n }, encode);\n}\n\nfunction groupEncode(_, userEncode) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n anchor: _('anchor'),\n align: {\n signal: alignExpr$1\n },\n angle: {\n signal: angleExpr\n },\n limit: _('limit'),\n frame: _('frame'),\n offset: _('offset') || 0,\n padding: _('subtitlePadding')\n });\n return extendEncode(encode, userEncode, Skip);\n}\n\nfunction buildTitle(spec, _, userEncode, dataRef) {\n const zero = {\n value: 0\n },\n text = spec.text,\n encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: {\n value: 1\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n text: text,\n align: {\n signal: 'item.mark.group.align'\n },\n angle: {\n signal: 'item.mark.group.angle'\n },\n limit: {\n signal: 'item.mark.group.limit'\n },\n baseline: 'top',\n dx: _('dx'),\n dy: _('dy'),\n fill: _('color'),\n font: _('font'),\n fontSize: _('fontSize'),\n fontStyle: _('fontStyle'),\n fontWeight: _('fontWeight'),\n lineHeight: _('lineHeight')\n }, {\n // update\n align: _('align'),\n angle: _('angle'),\n baseline: _('baseline')\n });\n return guideMark({\n type: TextMark,\n role: TitleTextRole,\n style: GroupTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction buildSubTitle(spec, _, userEncode, dataRef) {\n const zero = {\n value: 0\n },\n text = spec.subtitle,\n encode = {\n enter: {\n opacity: zero\n },\n update: {\n opacity: {\n value: 1\n }\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n text: text,\n align: {\n signal: 'item.mark.group.align'\n },\n angle: {\n signal: 'item.mark.group.angle'\n },\n limit: {\n signal: 'item.mark.group.limit'\n },\n baseline: 'top',\n dx: _('dx'),\n dy: _('dy'),\n fill: _('subtitleColor'),\n font: _('subtitleFont'),\n fontSize: _('subtitleFontSize'),\n fontStyle: _('subtitleFontStyle'),\n fontWeight: _('subtitleFontWeight'),\n lineHeight: _('subtitleLineHeight')\n }, {\n // update\n align: _('align'),\n angle: _('angle'),\n baseline: _('baseline')\n });\n return guideMark({\n type: TextMark,\n role: TitleSubtitleRole,\n style: GroupSubtitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction parseData(data, scope) {\n const transforms = [];\n\n if (data.transform) {\n data.transform.forEach(tx => {\n transforms.push(parseTransform(tx, scope));\n });\n }\n\n if (data.on) {\n data.on.forEach(on => {\n parseTrigger(on, scope, data.name);\n });\n }\n\n scope.addDataPipeline(data.name, analyze(data, scope, transforms));\n}\n/**\n * Analyze a data pipeline, add needed operators.\n */\n\nfunction analyze(data, scope, ops) {\n const output = [];\n let source = null,\n modify = false,\n generate = false,\n upstream,\n i,\n n,\n t,\n m;\n\n if (data.values) {\n // hard-wired input data set\n if (isSignal(data.values) || hasSignal(data.format)) {\n // if either values is signal or format has signal, use dynamic loader\n output.push(load(scope, data));\n output.push(source = collect());\n } else {\n // otherwise, ingest upon dataflow init\n output.push(source = collect({\n $ingest: data.values,\n $format: data.format\n }));\n }\n } else if (data.url) {\n // load data from external source\n if (hasSignal(data.url) || hasSignal(data.format)) {\n // if either url or format has signal, use dynamic loader\n output.push(load(scope, data));\n output.push(source = collect());\n } else {\n // otherwise, request load upon dataflow init\n output.push(source = collect({\n $request: data.url,\n $format: data.format\n }));\n }\n } else if (data.source) {\n // derives from one or more other data sets\n source = upstream = array(data.source).map(d => ref(scope.getData(d).output));\n output.push(null); // populate later\n } // scan data transforms, add collectors as needed\n\n\n for (i = 0, n = ops.length; i < n; ++i) {\n t = ops[i];\n m = t.metadata;\n\n if (!source && !m.source) {\n output.push(source = collect());\n }\n\n output.push(t);\n if (m.generates) generate = true;\n if (m.modifies && !generate) modify = true;\n if (m.source) source = t;else if (m.changes) source = null;\n }\n\n if (upstream) {\n n = upstream.length - 1;\n output[0] = Relay({\n derive: modify,\n pulse: n ? upstream : upstream[0]\n });\n\n if (modify || n) {\n // collect derived and multi-pulse tuples\n output.splice(1, 0, collect());\n }\n }\n\n if (!source) output.push(collect());\n output.push(Sieve({}));\n return output;\n}\n\nfunction collect(values) {\n const s = Collect({}, values);\n s.metadata = {\n source: true\n };\n return s;\n}\n\nfunction load(scope, data) {\n return Load({\n url: data.url ? scope.property(data.url) : undefined,\n async: data.async ? scope.property(data.async) : undefined,\n values: data.values ? scope.property(data.values) : undefined,\n format: scope.objectProperty(data.format)\n });\n}\n\nconst isX = orient => orient === Bottom || orient === Top; // get sign coefficient based on axis orient\n\n\nconst getSign = (orient, a, b) => isSignal(orient) ? ifLeftTopExpr(orient.signal, a, b) : orient === Left || orient === Top ? a : b; // condition on axis x-direction\n\nconst ifX = (orient, a, b) => isSignal(orient) ? ifXEnc(orient.signal, a, b) : isX(orient) ? a : b; // condition on axis y-direction\n\nconst ifY = (orient, a, b) => isSignal(orient) ? ifYEnc(orient.signal, a, b) : isX(orient) ? b : a;\nconst ifTop = (orient, a, b) => isSignal(orient) ? ifTopExpr(orient.signal, a, b) : orient === Top ? {\n value: a\n} : {\n value: b\n};\nconst ifRight = (orient, a, b) => isSignal(orient) ? ifRightExpr(orient.signal, a, b) : orient === Right ? {\n value: a\n} : {\n value: b\n};\n\nconst ifXEnc = ($orient, a, b) => ifEnc(`${$orient} === '${Top}' || ${$orient} === '${Bottom}'`, a, b);\n\nconst ifYEnc = ($orient, a, b) => ifEnc(`${$orient} !== '${Top}' && ${$orient} !== '${Bottom}'`, a, b);\n\nconst ifLeftTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Left}' || ${$orient} === '${Top}'`, a, b);\n\nconst ifTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Top}'`, a, b);\n\nconst ifRightExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Right}'`, a, b);\n\nconst ifEnc = (test, a, b) => {\n // ensure inputs are encoder objects (or null)\n a = a != null ? encoder(a) : a;\n b = b != null ? encoder(b) : b;\n\n if (isSimple(a) && isSimple(b)) {\n // if possible generate simple signal expression\n a = a ? a.signal || stringValue(a.value) : null;\n b = b ? b.signal || stringValue(b.value) : null;\n return {\n signal: `${test} ? (${a}) : (${b})`\n };\n } else {\n // otherwise generate rule set\n return [extend({\n test\n }, a)].concat(b || []);\n }\n};\n\nconst isSimple = enc => enc == null || Object.keys(enc).length === 1;\n\nconst ifExpr = (test, a, b) => ({\n signal: `${test} ? (${toExpr(a)}) : (${toExpr(b)})`\n});\n\nconst ifOrient = ($orient, t, b, l, r) => ({\n signal: (l != null ? `${$orient} === '${Left}' ? (${toExpr(l)}) : ` : '') + (b != null ? `${$orient} === '${Bottom}' ? (${toExpr(b)}) : ` : '') + (r != null ? `${$orient} === '${Right}' ? (${toExpr(r)}) : ` : '') + (t != null ? `${$orient} === '${Top}' ? (${toExpr(t)}) : ` : '') + '(null)'\n});\n\nconst toExpr = v => isSignal(v) ? v.signal : v == null ? null : stringValue(v);\n\nconst mult = (sign, value) => value === 0 ? 0 : isSignal(sign) ? {\n signal: `(${sign.signal}) * ${value}`\n} : {\n value: sign * value\n};\nconst patch = (value, base) => {\n const s = value.signal;\n return s && s.endsWith('(null)') ? {\n signal: s.slice(0, -6) + base.signal\n } : value;\n};\n\nfunction fallback(prop, config, axisConfig, style) {\n let styleProp;\n\n if (config && hasOwnProperty(config, prop)) {\n return config[prop];\n } else if (hasOwnProperty(axisConfig, prop)) {\n return axisConfig[prop];\n } else if (prop.startsWith('title')) {\n switch (prop) {\n case 'titleColor':\n styleProp = 'fill';\n break;\n\n case 'titleFont':\n case 'titleFontSize':\n case 'titleFontWeight':\n styleProp = prop[5].toLowerCase() + prop.slice(6);\n }\n\n return style[GuideTitleStyle][styleProp];\n } else if (prop.startsWith('label')) {\n switch (prop) {\n case 'labelColor':\n styleProp = 'fill';\n break;\n\n case 'labelFont':\n case 'labelFontSize':\n styleProp = prop[5].toLowerCase() + prop.slice(6);\n }\n\n return style[GuideLabelStyle][styleProp];\n }\n\n return null;\n}\n\nfunction keys(objects) {\n const map = {};\n\n for (const obj of objects) {\n if (!obj) continue;\n\n for (const key in obj) map[key] = 1;\n }\n\n return Object.keys(map);\n}\n\nfunction axisConfig (spec, scope) {\n var config = scope.config,\n style = config.style,\n axis = config.axis,\n band = scope.scaleType(spec.scale) === 'band' && config.axisBand,\n orient = spec.orient,\n xy,\n or,\n key;\n\n if (isSignal(orient)) {\n const xyKeys = keys([config.axisX, config.axisY]),\n orientKeys = keys([config.axisTop, config.axisBottom, config.axisLeft, config.axisRight]);\n xy = {};\n\n for (key of xyKeys) {\n xy[key] = ifX(orient, fallback(key, config.axisX, axis, style), fallback(key, config.axisY, axis, style));\n }\n\n or = {};\n\n for (key of orientKeys) {\n or[key] = ifOrient(orient.signal, fallback(key, config.axisTop, axis, style), fallback(key, config.axisBottom, axis, style), fallback(key, config.axisLeft, axis, style), fallback(key, config.axisRight, axis, style));\n }\n } else {\n xy = orient === Top || orient === Bottom ? config.axisX : config.axisY;\n or = config['axis' + orient[0].toUpperCase() + orient.slice(1)];\n }\n\n const result = xy || or || band ? extend({}, axis, xy, or, band) : axis;\n return result;\n}\n\nfunction axisDomain (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n orient = spec.orient;\n\n let enter, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('domainColor'),\n strokeCap: _('domainCap'),\n strokeDash: _('domainDash'),\n strokeDashOffset: _('domainDashOffset'),\n strokeWidth: _('domainWidth'),\n strokeOpacity: _('domainOpacity')\n });\n const pos0 = position(spec, 0);\n const pos1 = position(spec, 1);\n enter.x = update.x = ifX(orient, pos0, zero);\n enter.x2 = update.x2 = ifX(orient, pos1);\n enter.y = update.y = ifY(orient, pos0, zero);\n enter.y2 = update.y2 = ifY(orient, pos1);\n return guideMark({\n type: RuleMark,\n role: AxisDomainRole,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction position(spec, pos) {\n return {\n scale: spec.scale,\n range: pos\n };\n}\n\nfunction axisGrid (spec, config, userEncode, dataRef, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n vscale = spec.gridScale,\n sign = getSign(orient, 1, -1),\n offset = offsetValue(spec.offset, sign);\n\n let enter, exit, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: exit = {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('gridColor'),\n strokeCap: _('gridCap'),\n strokeDash: _('gridDash'),\n strokeDashOffset: _('gridDashOffset'),\n strokeOpacity: _('gridOpacity'),\n strokeWidth: _('gridWidth')\n });\n const tickPos = {\n scale: spec.scale,\n field: Value,\n band: band.band,\n extra: band.extra,\n offset: band.offset,\n round: _('tickRound')\n };\n const sz = ifX(orient, {\n signal: 'height'\n }, {\n signal: 'width'\n });\n const gridStart = vscale ? {\n scale: vscale,\n range: 0,\n mult: sign,\n offset: offset\n } : {\n value: 0,\n offset: offset\n };\n const gridEnd = vscale ? {\n scale: vscale,\n range: 1,\n mult: sign,\n offset: offset\n } : extend(sz, {\n mult: sign,\n offset: offset\n });\n enter.x = update.x = ifX(orient, tickPos, gridStart);\n enter.y = update.y = ifY(orient, tickPos, gridStart);\n enter.x2 = update.x2 = ifY(orient, gridEnd);\n enter.y2 = update.y2 = ifX(orient, gridEnd);\n exit.x = ifX(orient, tickPos);\n exit.y = ifY(orient, tickPos);\n return guideMark({\n type: RuleMark,\n role: AxisGridRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction offsetValue(offset, sign) {\n if (sign === 1) ; else if (!isObject(offset)) {\n offset = isSignal(sign) ? {\n signal: `(${sign.signal}) * (${offset || 0})`\n } : sign * (offset || 0);\n } else {\n let entry = offset = extend({}, offset);\n\n while (entry.mult != null) {\n if (!isObject(entry.mult)) {\n entry.mult = isSignal(sign) // no offset if sign === 1\n ? {\n signal: `(${entry.mult}) * (${sign.signal})`\n } : entry.mult * sign;\n return offset;\n } else {\n entry = entry.mult = extend({}, entry.mult);\n }\n }\n\n entry.mult = sign;\n }\n\n return offset;\n}\n\nfunction axisTicks (spec, config, userEncode, dataRef, size, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n sign = getSign(orient, -1, 1);\n\n let enter, exit, update;\n const encode = {\n enter: enter = {\n opacity: zero\n },\n update: update = {\n opacity: one\n },\n exit: exit = {\n opacity: zero\n }\n };\n addEncoders(encode, {\n stroke: _('tickColor'),\n strokeCap: _('tickCap'),\n strokeDash: _('tickDash'),\n strokeDashOffset: _('tickDashOffset'),\n strokeOpacity: _('tickOpacity'),\n strokeWidth: _('tickWidth')\n });\n const tickSize = encoder(size);\n tickSize.mult = sign;\n const tickPos = {\n scale: spec.scale,\n field: Value,\n band: band.band,\n extra: band.extra,\n offset: band.offset,\n round: _('tickRound')\n };\n update.y = enter.y = ifX(orient, zero, tickPos);\n update.y2 = enter.y2 = ifX(orient, tickSize);\n exit.x = ifX(orient, tickPos);\n update.x = enter.x = ifY(orient, zero, tickPos);\n update.x2 = enter.x2 = ifY(orient, tickSize);\n exit.y = ifY(orient, tickPos);\n return guideMark({\n type: RuleMark,\n role: AxisTickRole,\n key: Value,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction flushExpr(scale, threshold, a, b, c) {\n return {\n signal: 'flush(range(\"' + scale + '\"), ' + 'scale(\"' + scale + '\", datum.value), ' + threshold + ',' + a + ',' + b + ',' + c + ')'\n };\n}\n\nfunction axisLabels (spec, config, userEncode, dataRef, size, band) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n scale = spec.scale,\n sign = getSign(orient, -1, 1),\n flush = deref(_('labelFlush')),\n flushOffset = deref(_('labelFlushOffset')),\n labelAlign = _('labelAlign'),\n labelBaseline = _('labelBaseline');\n\n let flushOn = flush === 0 || !!flush,\n update;\n const tickSize = encoder(size);\n tickSize.mult = sign;\n tickSize.offset = encoder(_('labelPadding') || 0);\n tickSize.offset.mult = sign;\n const tickPos = {\n scale: scale,\n field: Value,\n band: 0.5,\n offset: extendOffset(band.offset, _('labelOffset'))\n };\n const align = ifX(orient, flushOn ? flushExpr(scale, flush, '\"left\"', '\"right\"', '\"center\"') : {\n value: 'center'\n }, ifRight(orient, 'left', 'right'));\n const baseline = ifX(orient, ifTop(orient, 'bottom', 'top'), flushOn ? flushExpr(scale, flush, '\"top\"', '\"bottom\"', '\"middle\"') : {\n value: 'middle'\n });\n const offsetExpr = flushExpr(scale, flush, `-(${flushOffset})`, flushOffset, 0);\n flushOn = flushOn && flushOffset;\n const enter = {\n opacity: zero,\n x: ifX(orient, tickPos, tickSize),\n y: ifY(orient, tickPos, tickSize)\n };\n const encode = {\n enter: enter,\n update: update = {\n opacity: one,\n text: {\n field: Label\n },\n x: enter.x,\n y: enter.y,\n align,\n baseline\n },\n exit: {\n opacity: zero,\n x: enter.x,\n y: enter.y\n }\n };\n addEncoders(encode, {\n dx: !labelAlign && flushOn ? ifX(orient, offsetExpr) : null,\n dy: !labelBaseline && flushOn ? ifY(orient, offsetExpr) : null\n });\n addEncoders(encode, {\n angle: _('labelAngle'),\n fill: _('labelColor'),\n fillOpacity: _('labelOpacity'),\n font: _('labelFont'),\n fontSize: _('labelFontSize'),\n fontWeight: _('labelFontWeight'),\n fontStyle: _('labelFontStyle'),\n limit: _('labelLimit'),\n lineHeight: _('labelLineHeight')\n }, {\n align: labelAlign,\n baseline: labelBaseline\n });\n\n const bound = _('labelBound');\n\n let overlap = _('labelOverlap'); // if overlap method or bound defined, request label overlap removal\n\n\n overlap = overlap || bound ? {\n separation: _('labelSeparation'),\n method: overlap,\n order: 'datum.index',\n bound: bound ? {\n scale,\n orient,\n tolerance: bound\n } : null\n } : undefined;\n\n if (update.align !== align) {\n update.align = patch(update.align, align);\n }\n\n if (update.baseline !== baseline) {\n update.baseline = patch(update.baseline, baseline);\n }\n\n return guideMark({\n type: TextMark,\n role: AxisLabelRole,\n style: GuideLabelStyle,\n key: Value,\n from: dataRef,\n encode,\n overlap\n }, userEncode);\n}\n\nfunction axisTitle (spec, config, userEncode, dataRef) {\n const _ = lookup(spec, config),\n orient = spec.orient,\n sign = getSign(orient, -1, 1);\n\n let enter, update;\n const encode = {\n enter: enter = {\n opacity: zero,\n anchor: encoder(_('titleAnchor', null)),\n align: {\n signal: alignExpr$1\n }\n },\n update: update = extend({}, enter, {\n opacity: one,\n text: encoder(spec.title)\n }),\n exit: {\n opacity: zero\n }\n };\n const titlePos = {\n signal: `lerp(range(\"${spec.scale}\"), ${anchorExpr(0, 1, 0.5)})`\n };\n update.x = ifX(orient, titlePos);\n update.y = ifY(orient, titlePos);\n enter.angle = ifX(orient, zero, mult(sign, 90));\n enter.baseline = ifX(orient, ifTop(orient, Bottom, Top), {\n value: Bottom\n });\n update.angle = enter.angle;\n update.baseline = enter.baseline;\n addEncoders(encode, {\n fill: _('titleColor'),\n fillOpacity: _('titleOpacity'),\n font: _('titleFont'),\n fontSize: _('titleFontSize'),\n fontStyle: _('titleFontStyle'),\n fontWeight: _('titleFontWeight'),\n limit: _('titleLimit'),\n lineHeight: _('titleLineHeight')\n }, {\n // require update\n align: _('titleAlign'),\n angle: _('titleAngle'),\n baseline: _('titleBaseline')\n });\n autoLayout(_, orient, encode, userEncode);\n encode.update.align = patch(encode.update.align, enter.align);\n encode.update.angle = patch(encode.update.angle, enter.angle);\n encode.update.baseline = patch(encode.update.baseline, enter.baseline);\n return guideMark({\n type: TextMark,\n role: AxisTitleRole,\n style: GuideTitleStyle,\n from: dataRef,\n encode\n }, userEncode);\n}\n\nfunction autoLayout(_, orient, encode, userEncode) {\n const auto = (value, dim) => value != null ? (encode.update[dim] = patch(encoder(value), encode.update[dim]), false) : !has(dim, userEncode) ? true : false;\n\n const autoY = auto(_('titleX'), 'x'),\n autoX = auto(_('titleY'), 'y');\n encode.enter.auto = autoX === autoY ? encoder(autoX) : ifX(orient, encoder(autoX), encoder(autoY));\n}\n\nfunction parseAxis (spec, scope) {\n const config = axisConfig(spec, scope),\n encode = spec.encode || {},\n axisEncode = encode.axis || {},\n name = axisEncode.name || undefined,\n interactive = axisEncode.interactive,\n style = axisEncode.style,\n _ = lookup(spec, config),\n band = tickBand(_); // single-element data source for axis group\n\n\n const datum = {\n scale: spec.scale,\n ticks: !!_('ticks'),\n labels: !!_('labels'),\n grid: !!_('grid'),\n domain: !!_('domain'),\n title: spec.title != null\n };\n const dataRef = ref(scope.add(Collect({}, [datum]))); // data source for axis ticks\n\n const ticksRef = ref(scope.add(AxisTicks({\n scale: scope.scaleRef(spec.scale),\n extra: scope.property(band.extra),\n count: scope.objectProperty(spec.tickCount),\n values: scope.objectProperty(spec.values),\n minstep: scope.property(spec.tickMinStep),\n formatType: scope.property(spec.formatType),\n formatSpecifier: scope.property(spec.format)\n }))); // generate axis marks\n\n const children = [];\n let size; // include axis gridlines if requested\n\n if (datum.grid) {\n children.push(axisGrid(spec, config, encode.grid, ticksRef, band));\n } // include axis ticks if requested\n\n\n if (datum.ticks) {\n size = _('tickSize');\n children.push(axisTicks(spec, config, encode.ticks, ticksRef, size, band));\n } // include axis labels if requested\n\n\n if (datum.labels) {\n size = datum.ticks ? size : 0;\n children.push(axisLabels(spec, config, encode.labels, ticksRef, size, band));\n } // include axis domain path if requested\n\n\n if (datum.domain) {\n children.push(axisDomain(spec, config, encode.domain, dataRef));\n } // include axis title if defined\n\n\n if (datum.title) {\n children.push(axisTitle(spec, config, encode.title, dataRef));\n } // parse axis specification\n\n\n return parseMark(guideGroup({\n role: AxisRole,\n from: dataRef,\n encode: extendEncode(buildAxisEncode(_, spec), axisEncode, Skip),\n marks: children,\n aria: _('aria'),\n description: _('description'),\n zindex: _('zindex'),\n name,\n interactive,\n style\n }), scope);\n}\n\nfunction buildAxisEncode(_, spec) {\n const encode = {\n enter: {},\n update: {}\n };\n addEncoders(encode, {\n orient: _('orient'),\n offset: _('offset') || 0,\n position: value(spec.position, 0),\n titlePadding: _('titlePadding'),\n minExtent: _('minExtent'),\n maxExtent: _('maxExtent'),\n range: {\n signal: `abs(span(range(\"${spec.scale}\")))`\n },\n translate: _('translate'),\n // accessibility support\n format: spec.format,\n formatType: spec.formatType\n });\n return encode;\n}\n\nfunction parseScope (spec, scope, preprocessed) {\n const signals = array(spec.signals),\n scales = array(spec.scales); // parse signal definitions, if not already preprocessed\n\n if (!preprocessed) signals.forEach(_ => parseSignal(_, scope)); // parse cartographic projection definitions\n\n array(spec.projections).forEach(_ => parseProjection(_, scope)); // initialize scale references\n\n scales.forEach(_ => initScale(_, scope)); // parse data sources\n\n array(spec.data).forEach(_ => parseData(_, scope)); // parse scale definitions\n\n scales.forEach(_ => parseScale(_, scope)); // parse signal updates\n\n (preprocessed || signals).forEach(_ => parseSignalUpdates(_, scope)); // parse axis definitions\n\n array(spec.axes).forEach(_ => parseAxis(_, scope)); // parse mark definitions\n\n array(spec.marks).forEach(_ => parseMark(_, scope)); // parse legend definitions\n\n array(spec.legends).forEach(_ => parseLegend(_, scope)); // parse title, if defined\n\n if (spec.title) parseTitle(spec.title, scope); // parse collected lambda (anonymous) expressions\n\n scope.parseLambdas();\n return scope;\n}\n\nconst rootEncode = spec => extendEncode({\n enter: {\n x: {\n value: 0\n },\n y: {\n value: 0\n }\n },\n update: {\n width: {\n signal: 'width'\n },\n height: {\n signal: 'height'\n }\n }\n}, spec);\n\nfunction parseView(spec, scope) {\n const config = scope.config; // add scenegraph root\n\n const root = ref(scope.root = scope.add(operator())); // parse top-level signal definitions\n\n const signals = collectSignals(spec, config);\n signals.forEach(_ => parseSignal(_, scope)); // assign description, event, legend, and locale configuration\n\n scope.description = spec.description || config.description;\n scope.eventConfig = config.events;\n scope.legends = scope.objectProperty(config.legend && config.legend.layout);\n scope.locale = config.locale; // store root group item\n\n const input = scope.add(Collect()); // encode root group item\n\n const encode = scope.add(Encode(parseEncode(rootEncode(spec.encode), GroupMark, FrameRole, spec.style, scope, {\n pulse: ref(input)\n }))); // perform view layout\n\n const parent = scope.add(ViewLayout({\n layout: scope.objectProperty(spec.layout),\n legends: scope.legends,\n autosize: scope.signalRef('autosize'),\n mark: root,\n pulse: ref(encode)\n }));\n scope.operators.pop(); // parse remainder of specification\n\n scope.pushState(ref(encode), ref(parent), null);\n parseScope(spec, scope, signals);\n scope.operators.push(parent); // bound / render / sieve root item\n\n let op = scope.add(Bound({\n mark: root,\n pulse: ref(parent)\n }));\n op = scope.add(Render({\n pulse: ref(op)\n }));\n op = scope.add(Sieve({\n pulse: ref(op)\n })); // track metadata for root item\n\n scope.addData('root', new DataScope(scope, input, input, op));\n return scope;\n}\n\nfunction signalObject(name, value) {\n return value && value.signal ? {\n name,\n update: value.signal\n } : {\n name,\n value\n };\n}\n/**\n * Collect top-level signals, merging values as needed. Signals\n * defined in the config signals arrays are added only if that\n * signal is not explicitly defined in the specification.\n * Built-in signals (autosize, background, padding, width, height)\n * receive special treatment. They are initialized using the\n * top-level spec property, or, if undefined in the spec, using\n * the corresponding top-level config property. If this property\n * is a signal reference object, the signal expression maps to the\n * signal 'update' property. If the spec's top-level signal array\n * contains an entry that matches a built-in signal, that entry\n * will be merged with the built-in specification, potentially\n * overwriting existing 'value' or 'update' properties.\n */\n\n\nfunction collectSignals(spec, config) {\n const _ = name => value(spec[name], config[name]),\n signals = [signalObject('background', _('background')), signalObject('autosize', parseAutosize(_('autosize'))), signalObject('padding', parsePadding(_('padding'))), signalObject('width', _('width') || 0), signalObject('height', _('height') || 0)],\n pre = signals.reduce((p, s) => (p[s.name] = s, p), {}),\n map = {}; // add spec signal array\n\n\n array(spec.signals).forEach(s => {\n if (hasOwnProperty(pre, s.name)) {\n // merge if built-in signal\n s = extend(pre[s.name], s);\n } else {\n // otherwise add to signal list\n signals.push(s);\n }\n\n map[s.name] = s;\n }); // add config signal array\n\n array(config.signals).forEach(s => {\n if (!hasOwnProperty(map, s.name) && !hasOwnProperty(pre, s.name)) {\n // add to signal list if not already defined\n signals.push(s);\n }\n });\n return signals;\n}\n\nfunction Scope(config, options) {\n this.config = config || {};\n this.options = options || {};\n this.bindings = [];\n this.field = {};\n this.signals = {};\n this.lambdas = {};\n this.scales = {};\n this.events = {};\n this.data = {};\n this.streams = [];\n this.updates = [];\n this.operators = [];\n this.eventConfig = null;\n this.locale = null;\n this._id = 0;\n this._subid = 0;\n this._nextsub = [0];\n this._parent = [];\n this._encode = [];\n this._lookup = [];\n this._markpath = [];\n}\n\nfunction Subscope(scope) {\n this.config = scope.config;\n this.options = scope.options;\n this.legends = scope.legends;\n this.field = Object.create(scope.field);\n this.signals = Object.create(scope.signals);\n this.lambdas = Object.create(scope.lambdas);\n this.scales = Object.create(scope.scales);\n this.events = Object.create(scope.events);\n this.data = Object.create(scope.data);\n this.streams = [];\n this.updates = [];\n this.operators = [];\n this._id = 0;\n this._subid = ++scope._nextsub[0];\n this._nextsub = scope._nextsub;\n this._parent = scope._parent.slice();\n this._encode = scope._encode.slice();\n this._lookup = scope._lookup.slice();\n this._markpath = scope._markpath;\n}\n\nScope.prototype = Subscope.prototype = {\n parse(spec) {\n return parseScope(spec, this);\n },\n\n fork() {\n return new Subscope(this);\n },\n\n isSubscope() {\n return this._subid > 0;\n },\n\n toRuntime() {\n this.finish();\n return {\n description: this.description,\n operators: this.operators,\n streams: this.streams,\n updates: this.updates,\n bindings: this.bindings,\n eventConfig: this.eventConfig,\n locale: this.locale\n };\n },\n\n id() {\n return (this._subid ? this._subid + ':' : 0) + this._id++;\n },\n\n add(op) {\n this.operators.push(op);\n op.id = this.id(); // if pre-registration references exist, resolve them now\n\n if (op.refs) {\n op.refs.forEach(ref => {\n ref.$ref = op.id;\n });\n op.refs = null;\n }\n\n return op;\n },\n\n proxy(op) {\n const vref = op instanceof Entry ? ref(op) : op;\n return this.add(Proxy({\n value: vref\n }));\n },\n\n addStream(stream) {\n this.streams.push(stream);\n stream.id = this.id();\n return stream;\n },\n\n addUpdate(update) {\n this.updates.push(update);\n return update;\n },\n\n // Apply metadata\n finish() {\n let name, ds; // annotate root\n\n if (this.root) this.root.root = true; // annotate signals\n\n for (name in this.signals) {\n this.signals[name].signal = name;\n } // annotate scales\n\n\n for (name in this.scales) {\n this.scales[name].scale = name;\n } // annotate data sets\n\n\n function annotate(op, name, type) {\n let data, list;\n\n if (op) {\n data = op.data || (op.data = {});\n list = data[name] || (data[name] = []);\n list.push(type);\n }\n }\n\n for (name in this.data) {\n ds = this.data[name];\n annotate(ds.input, name, 'input');\n annotate(ds.output, name, 'output');\n annotate(ds.values, name, 'values');\n\n for (const field in ds.index) {\n annotate(ds.index[field], name, 'index:' + field);\n }\n }\n\n return this;\n },\n\n // ----\n pushState(encode, parent, lookup) {\n this._encode.push(ref(this.add(Sieve({\n pulse: encode\n }))));\n\n this._parent.push(parent);\n\n this._lookup.push(lookup ? ref(this.proxy(lookup)) : null);\n\n this._markpath.push(-1);\n },\n\n popState() {\n this._encode.pop();\n\n this._parent.pop();\n\n this._lookup.pop();\n\n this._markpath.pop();\n },\n\n parent() {\n return peek(this._parent);\n },\n\n encode() {\n return peek(this._encode);\n },\n\n lookup() {\n return peek(this._lookup);\n },\n\n markpath() {\n const p = this._markpath;\n return ++p[p.length - 1];\n },\n\n // ----\n fieldRef(field, name) {\n if (isString(field)) return fieldRef$1(field, name);\n\n if (!field.signal) {\n error('Unsupported field reference: ' + stringValue(field));\n }\n\n const s = field.signal;\n let f = this.field[s];\n\n if (!f) {\n const params = {\n name: this.signalRef(s)\n };\n if (name) params.as = name;\n this.field[s] = f = ref(this.add(Field(params)));\n }\n\n return f;\n },\n\n compareRef(cmp) {\n let signal = false;\n\n const check = _ => isSignal(_) ? (signal = true, this.signalRef(_.signal)) : isExpr$1(_) ? (signal = true, this.exprRef(_.expr)) : _;\n\n const fields = array(cmp.field).map(check),\n orders = array(cmp.order).map(check);\n return signal ? ref(this.add(Compare({\n fields: fields,\n orders: orders\n }))) : compareRef(fields, orders);\n },\n\n keyRef(fields, flat) {\n let signal = false;\n\n const check = _ => isSignal(_) ? (signal = true, ref(sig[_.signal])) : _;\n\n const sig = this.signals;\n fields = array(fields).map(check);\n return signal ? ref(this.add(Key({\n fields: fields,\n flat: flat\n }))) : keyRef(fields, flat);\n },\n\n sortRef(sort) {\n if (!sort) return sort; // including id ensures stable sorting\n\n const a = aggrField(sort.op, sort.field),\n o = sort.order || Ascending;\n return o.signal ? ref(this.add(Compare({\n fields: a,\n orders: this.signalRef(o.signal)\n }))) : compareRef(a, o);\n },\n\n // ----\n event(source, type) {\n const key = source + ':' + type;\n\n if (!this.events[key]) {\n const id = this.id();\n this.streams.push({\n id: id,\n source: source,\n type: type\n });\n this.events[key] = id;\n }\n\n return this.events[key];\n },\n\n // ----\n hasOwnSignal(name) {\n return hasOwnProperty(this.signals, name);\n },\n\n addSignal(name, value) {\n if (this.hasOwnSignal(name)) {\n error('Duplicate signal name: ' + stringValue(name));\n }\n\n const op = value instanceof Entry ? value : this.add(operator(value));\n return this.signals[name] = op;\n },\n\n getSignal(name) {\n if (!this.signals[name]) {\n error('Unrecognized signal name: ' + stringValue(name));\n }\n\n return this.signals[name];\n },\n\n signalRef(s) {\n if (this.signals[s]) {\n return ref(this.signals[s]);\n } else if (!hasOwnProperty(this.lambdas, s)) {\n this.lambdas[s] = this.add(operator(null));\n }\n\n return ref(this.lambdas[s]);\n },\n\n parseLambdas() {\n const code = Object.keys(this.lambdas);\n\n for (let i = 0, n = code.length; i < n; ++i) {\n const s = code[i],\n e = parseExpression(s, this),\n op = this.lambdas[s];\n op.params = e.$params;\n op.update = e.$expr;\n }\n },\n\n property(spec) {\n return spec && spec.signal ? this.signalRef(spec.signal) : spec;\n },\n\n objectProperty(spec) {\n return !spec || !isObject(spec) ? spec : this.signalRef(spec.signal || propertyLambda(spec));\n },\n\n exprRef(code, name) {\n const params = {\n expr: parseExpression(code, this)\n };\n if (name) params.expr.$name = name;\n return ref(this.add(Expression(params)));\n },\n\n addBinding(name, bind) {\n if (!this.bindings) {\n error('Nested signals do not support binding: ' + stringValue(name));\n }\n\n this.bindings.push(extend({\n signal: name\n }, bind));\n },\n\n // ----\n addScaleProj(name, transform) {\n if (hasOwnProperty(this.scales, name)) {\n error('Duplicate scale or projection name: ' + stringValue(name));\n }\n\n this.scales[name] = this.add(transform);\n },\n\n addScale(name, params) {\n this.addScaleProj(name, Scale(params));\n },\n\n addProjection(name, params) {\n this.addScaleProj(name, Projection(params));\n },\n\n getScale(name) {\n if (!this.scales[name]) {\n error('Unrecognized scale name: ' + stringValue(name));\n }\n\n return this.scales[name];\n },\n\n scaleRef(name) {\n return ref(this.getScale(name));\n },\n\n scaleType(name) {\n return this.getScale(name).params.type;\n },\n\n projectionRef(name) {\n return this.scaleRef(name);\n },\n\n projectionType(name) {\n return this.scaleType(name);\n },\n\n // ----\n addData(name, dataScope) {\n if (hasOwnProperty(this.data, name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n\n return this.data[name] = dataScope;\n },\n\n getData(name) {\n if (!this.data[name]) {\n error('Undefined data set name: ' + stringValue(name));\n }\n\n return this.data[name];\n },\n\n addDataPipeline(name, entries) {\n if (hasOwnProperty(this.data, name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n\n return this.addData(name, DataScope.fromEntries(this, entries));\n }\n\n};\n\nfunction propertyLambda(spec) {\n return (isArray(spec) ? arrayLambda : objectLambda)(spec);\n}\n\nfunction arrayLambda(array) {\n const n = array.length;\n let code = '[';\n\n for (let i = 0; i < n; ++i) {\n const value = array[i];\n code += (i > 0 ? ',' : '') + (isObject(value) ? value.signal || propertyLambda(value) : stringValue(value));\n }\n\n return code + ']';\n}\n\nfunction objectLambda(obj) {\n let code = '{',\n i = 0,\n key,\n value;\n\n for (key in obj) {\n value = obj[key];\n code += (++i > 1 ? ',' : '') + stringValue(key) + ':' + (isObject(value) ? value.signal || propertyLambda(value) : stringValue(value));\n }\n\n return code + '}';\n}\n\n/**\n * Standard configuration defaults for Vega specification parsing.\n * Users can provide their own (sub-)set of these default values\n * by passing in a config object to the top-level parse method.\n */\nfunction defaults () {\n const defaultFont = 'sans-serif',\n defaultSymbolSize = 30,\n defaultStrokeWidth = 2,\n defaultColor = '#4c78a8',\n black = '#000',\n gray = '#888',\n lightGray = '#ddd';\n return {\n // default visualization description\n description: 'Vega visualization',\n // default padding around visualization\n padding: 0,\n // default for automatic sizing; options: 'none', 'pad', 'fit'\n // or provide an object (e.g., {'type': 'pad', 'resize': true})\n autosize: 'pad',\n // default view background color\n // covers the entire view component\n background: null,\n // default event handling configuration\n // preventDefault for view-sourced event types except 'wheel'\n events: {\n defaults: {\n allow: ['wheel']\n }\n },\n // defaults for top-level group marks\n // accepts mark properties (fill, stroke, etc)\n // covers the data rectangle within group width/height\n group: null,\n // defaults for basic mark types\n // each subset accepts mark properties (fill, stroke, etc)\n mark: null,\n arc: {\n fill: defaultColor\n },\n area: {\n fill: defaultColor\n },\n image: null,\n line: {\n stroke: defaultColor,\n strokeWidth: defaultStrokeWidth\n },\n path: {\n stroke: defaultColor\n },\n rect: {\n fill: defaultColor\n },\n rule: {\n stroke: black\n },\n shape: {\n stroke: defaultColor\n },\n symbol: {\n fill: defaultColor,\n size: 64\n },\n text: {\n fill: black,\n font: defaultFont,\n fontSize: 11\n },\n trail: {\n fill: defaultColor,\n size: defaultStrokeWidth\n },\n // style definitions\n style: {\n // axis & legend labels\n 'guide-label': {\n fill: black,\n font: defaultFont,\n fontSize: 10\n },\n // axis & legend titles\n 'guide-title': {\n fill: black,\n font: defaultFont,\n fontSize: 11,\n fontWeight: 'bold'\n },\n // headers, including chart title\n 'group-title': {\n fill: black,\n font: defaultFont,\n fontSize: 13,\n fontWeight: 'bold'\n },\n // chart subtitle\n 'group-subtitle': {\n fill: black,\n font: defaultFont,\n fontSize: 12\n },\n // defaults for styled point marks in Vega-Lite\n point: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'circle'\n },\n circle: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth\n },\n square: {\n size: defaultSymbolSize,\n strokeWidth: defaultStrokeWidth,\n shape: 'square'\n },\n // defaults for styled group marks in Vega-Lite\n cell: {\n fill: 'transparent',\n stroke: lightGray\n }\n },\n // defaults for title\n title: {\n orient: 'top',\n anchor: 'middle',\n offset: 4,\n subtitlePadding: 3\n },\n // defaults for axes\n axis: {\n minExtent: 0,\n maxExtent: 200,\n bandPosition: 0.5,\n domain: true,\n domainWidth: 1,\n domainColor: gray,\n grid: false,\n gridWidth: 1,\n gridColor: lightGray,\n labels: true,\n labelAngle: 0,\n labelLimit: 180,\n labelOffset: 0,\n labelPadding: 2,\n ticks: true,\n tickColor: gray,\n tickOffset: 0,\n tickRound: true,\n tickSize: 5,\n tickWidth: 1,\n titlePadding: 4\n },\n // correction for centering bias\n axisBand: {\n tickOffset: -0.5\n },\n // defaults for cartographic projection\n projection: {\n type: 'mercator'\n },\n // defaults for legends\n legend: {\n orient: 'right',\n padding: 0,\n gridAlign: 'each',\n columnPadding: 10,\n rowPadding: 2,\n symbolDirection: 'vertical',\n gradientDirection: 'vertical',\n gradientLength: 200,\n gradientThickness: 16,\n gradientStrokeColor: lightGray,\n gradientStrokeWidth: 0,\n gradientLabelOffset: 2,\n labelAlign: 'left',\n labelBaseline: 'middle',\n labelLimit: 160,\n labelOffset: 4,\n labelOverlap: true,\n symbolLimit: 30,\n symbolType: 'circle',\n symbolSize: 100,\n symbolOffset: 0,\n symbolStrokeWidth: 1.5,\n symbolBaseFillColor: 'transparent',\n symbolBaseStrokeColor: gray,\n titleLimit: 180,\n titleOrient: 'top',\n titlePadding: 5,\n layout: {\n offset: 18,\n direction: 'horizontal',\n left: {\n direction: 'vertical'\n },\n right: {\n direction: 'vertical'\n }\n }\n },\n // defaults for scale ranges\n range: {\n category: {\n scheme: 'tableau10'\n },\n ordinal: {\n scheme: 'blues'\n },\n heatmap: {\n scheme: 'yellowgreenblue'\n },\n ramp: {\n scheme: 'blues'\n },\n diverging: {\n scheme: 'blueorange',\n extent: [1, 0]\n },\n symbol: ['circle', 'square', 'triangle-up', 'cross', 'diamond', 'triangle-right', 'triangle-down', 'triangle-left']\n }\n };\n}\n\nfunction parse (spec, config, options) {\n if (!isObject(spec)) {\n error('Input Vega specification must be an object.');\n }\n\n config = mergeConfig(defaults(), config, spec.config);\n return parseView(spec, new Scope(config, options)).toRuntime();\n}\n\nexport { AxisDomainRole, AxisGridRole, AxisLabelRole, AxisRole, AxisTickRole, AxisTitleRole, DataScope, FrameRole, LegendEntryRole, LegendLabelRole, LegendRole, LegendSymbolRole, LegendTitleRole, MarkRole, Scope, ScopeRole, defaults as config, parse, parseSignal as signal, parseSignalUpdates as signalUpdates, parseStream as stream };\n","// -- Transforms -----\n\nimport pkg from './package.json';\nimport {extend} from 'vega-util';\nimport {transforms} from 'vega-dataflow';\nimport * as tx from 'vega-transforms';\nimport * as vtx from 'vega-view-transforms';\nimport * as encode from 'vega-encode';\nimport * as geo from 'vega-geo';\nimport * as force from 'vega-force';\nimport * as tree from 'vega-hierarchy';\nimport * as label from 'vega-label';\nimport * as reg from 'vega-regression';\nimport * as voronoi from 'vega-voronoi';\nimport * as wordcloud from 'vega-wordcloud';\nimport * as xf from 'vega-crossfilter';\nextend(\n transforms,\n tx, vtx, encode, geo, force, label, tree, reg, voronoi, wordcloud, xf\n);\n\n\n// -- Exports -----\n\nexport const version = pkg.version;\n\nexport * from 'vega-statistics';\n\nexport * from 'vega-time';\n\nexport * from 'vega-util';\n\nexport * from 'vega-loader';\n\nexport * from 'vega-scenegraph';\n\nexport {\n Dataflow,\n EventStream,\n Parameters,\n Pulse,\n MultiPulse,\n Operator,\n Transform,\n changeset,\n ingest,\n isTuple,\n definition,\n transform,\n transforms,\n tupleid\n} from 'vega-dataflow';\n\nexport {\n scale,\n scheme,\n interpolate,\n interpolateColors,\n interpolateRange,\n quantizeInterpolator\n} from 'vega-scale';\n\nexport {\n projection\n} from 'vega-projection';\n\nexport {\n View\n} from 'vega-view';\n\nexport {\n numberFormatDefaultLocale as formatLocale,\n timeFormatDefaultLocale as timeFormatLocale,\n locale,\n defaultLocale,\n resetDefaultLocale\n} from 'vega-format';\n\nexport {\n expressionFunction\n} from 'vega-functions';\n\nexport {\n parse\n} from 'vega-parser';\n\nexport {\n context as runtimeContext\n} from 'vega-runtime';\n\nexport {\n codegen as codegenExpression,\n parse as parseExpression\n} from 'vega-expression';\n\nexport {\n selector as parseSelector\n} from 'vega-event-selector';\n"],"names":["accessor","fn","fields","name","fname","accessorName","accessorFields","getter","path","length","get1","getN","field","obj","len","i","error","message","Error","splitAccessPath","p","n","j","c","q","b","s","push","substring","opt","get","id","identity","_","zero","one","truthy","falsy","log$1","method","level","input","args","concat","slice","call","console","apply","logger","arguments","this","warn","info","debug","isArray","Array","isObject","Object","isLegalKey","key","mergeConfig","configs","reduce","out","source","signals","mergeNamed","r","layout","writeConfig","output","value","recurse","k","o","a","map","add","forEach","peek","array","toNumber","exp","sign","x","Math","log","symlog","log1p","abs","symexp","expm1","pow","exponent","pan","domain","delta","lift","ground","d0","d1","dd","panLinear","panLog","panPow","panSymlog","constant","zoom","anchor","scale","da","zoomLinear","zoomLog","zoomPow","zoomSymlog","quarter","date","Date","getMonth","utcquarter","getUTCMonth","clampRange","range","min","max","span","lo","hi","isFunction","compare","orders","ord","fmap","gen","comparator","f","keys","ascending","u","v","compare1","compareN","order","debounce","delay","handler","tid","e","clearTimeout","setTimeout","extend","extent","extentIndex","hop","prototype","hasOwnProperty","has","object","property","NULL","fastmap","test","has$1","size","empty","undefined","set","delete","clear","clean","next","flush","threshold","left","right","center","t","l","inherits","child","parent","members","proto","create","defineProperty","writable","enumerable","configurable","inrange","r0","r1","isBoolean","isDate","toString","isIterable","Symbol","iterator","isNumber","isRegExp","isString","flat","replace","lerp","frac","lruCache","maxsize","curr","prev","update","merge","array0","array1","n0","n1","merged","constructor","i0","i1","repeat","str","reps","pad","padchar","align","ceil","$","JSON","stringify","toBoolean","defaultParser","parse","toDate","parser","toSet","truncate","ellipsis","visitArray","filter","visitor","EOL","EOF","objectConverter","columns","Function","join","inferColumns","rows","columnSet","row","column","width","formatDate","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","isNaN","year","formatYear","getUTCFullYear","getUTCDate","delimiter","reFormat","RegExp","DELIMITER","charCodeAt","parseRows","text","N","I","eof","eol","token","preformatBody","formatValue","formatRow","convert","customConverter","format","formatBody","formatRows","topology","objects","type","features","geometries","feature","bbox","properties","geometry","transformPoint","transform","x0","y0","kx","ky","dx","translate","dy","arcs","arc","points","pop","reverse","point","line","ring","polygon","coordinates","stitchedArcs","fragmentByStart","fragmentByEnd","fragments","emptyIndex","start","end","g","p1","p0","dp","ends","fg","unshift","gf","meshArcs","extractArcs","stitch","geom","geomsByArc","extract0","extract1","extract2","extract3","geoms","NaN","mid","d","ascendingComparator","ascendingBisect","bisector","bisectRight","bisectLeft","number","Adder","_partials","Float64Array","_n","y","valueOf","e10","sqrt","e5","e2","stop","count","ticks","step","tickIncrement","isFinite","round","power","floor","LN10","tickStep","step0","step1","values","valueof","index","quickselect","m","z","sd","swap","quantile","from","numbers","value0","subarray","quantileSorted","arrays","flatten","sum","formatDecimalParts","toExponential","indexOf","coefficient","prefixExponent","re","formatSpecifier","specifier","match","exec","FormatSpecifier","fill","symbol","comma","precision","trim","toFixed","toLocaleString","toPrecision","formatRounded","toUpperCase","locale","formatPrefix","prefixes","grouping","thousands","group","Number","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","String","percent","minus","nan","newFormat","formatTypes","prefix","toLowerCase","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","formatTrim","Infinity","padding","definition","formatLocale","t0","t1","newInterval","floori","offseti","interval","offset","previous","setTime","every","millisecond","durationSecond","durationMinute","durationHour","durationDay","durationWeek","second","getMilliseconds","minute","getSeconds","getMinutes","hour","getHours","day","setHours","setDate","getDate","getTimezoneOffset","weekday","getDay","sunday","monday","thursday","month","setMonth","getFullYear","setFullYear","utcMinute","setUTCSeconds","utcHour","setUTCMinutes","utcDay","setUTCHours","setUTCDate","utcWeekday","getUTCDay","utcSunday","utcMonday","utcThursday","utcMonth","setUTCMonth","utcYear","setUTCFullYear","YEAR","QUARTER","MONTH","WEEK","DATE","DAY","DAYOFYEAR","HOURS","MINUTES","SECONDS","MILLISECONDS","TIME_UNITS","UNITS","timeUnits","units","unit","sort","defaultSpecifiers","timeUnitSpecifier","specifiers","fmt","localYear","dayofyear","localDayOfYear","week","localWeekNum","timeDay","timeWeek","localFirst","localDate","H","M","S","L","utcdayofyear","utcDayOfYear","utcweek","utcWeekNum","UTC","utcWeek","utcFirst","utcDate","inv","newDate","phase","getUnit","firstDay","localGet","localInv","w","timeFloor","utcGet","utcInv","utcFloor","timeIntervals","timeYear","timeMonth","timeHour","timeMinute","timeSecond","timeMillisecond","utcIntervals","utcSecond","utcMillisecond","timeInterval","utcInterval","ival","timeOffset","utcOffset","sequence","timeSequence","utcSequence","durationMonth","durationYear","Milli","Seconds","Minutes","Hours","Day","Month","Year","intervals","bin","ext","maxbins","target","locale_dateTime","dateTime","locale_date","locale_time","time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","formatRe","periodLookup","formatLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatDayOfMonth","formatMicroseconds","formatYearISO","formatFullYearISO","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatFullYear","formatZone","formatLiteralPercent","utcFormats","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCYearISO","formatUTCFullYearISO","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parses","string","parseSpecifier","parseDayOfMonth","parseMicroseconds","parseYear","parseFullYear","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parseQuarter","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseZone","parseLiteralPercent","pads","charAt","newParse","Z","Q","V","timeMonday","W","U","X","utcFormat","utcParse","timeFormat","timeParse","numberRe","percentRe","requoteRe","requote","names","Map","timeSunday","dISO","timeThursday","dow","UTCdISO","memoize","cache","spec","numberLocale","formatFloat","numberFormat","decimalChar","dec","idx","lastIndexOf","rightmostDigit","formatSpan","precisionPrefix","precisionRound","precisionFixed","defaultNumberLocale","defaultTimeLocale","resetNumberFormatDefaultLocale","numberFormatLocale","numberFormatDefaultLocale","timeMultiFormat","timeLocale","resetTimeFormatDefaultLocale","timeFormatLocale","timeFormatLocale$1","timeFormatDefaultLocale","createLocale","numberSpec","timeSpec","defaultLocale","protocol_re","allowed_re","whitespace_re","fileProtocol","async","load","uri","options","sanitize","url","href","localFile","file","http","fileAccess","result","isFile","loadFile","base","isAllowed","stringValue","hasProtocol","baseURL","startsWith","mode","defaultProtocol","rel","context","crossOrigin","fileLoader","fs","filename","Promise","accept","reject","readFile","data","fileReject","httpLoader","fetch","response","ok","status","statusText","httpReject","typeParsers","boolean","integer","unknown","typeTests","isInteger","typeList","inferType","inferTypes","types","delimitedFormat","delim","dsv","responseType","header","dsvFormat","json","prop","Buffer","isBuffer","copy","parseJSON","filters","interior","exterior","topojson","mesh","csv","tsv","reader","read","schema","timeParser","utcParser","datum","parsers","parts","pattern","split","loader","loaderFactory","UniqueList","idFunc","list","ids","remove","splice","asyncCallback","df","callback","err","TUPLE_ID_KEY","TUPLE_ID","isTuple","tupleid","setid","ingest$1","derive","rederive","stableCompare","cmp","isChangeSet","changeset","rem","mod","remp","modp","reflow","insert","modify","tuple","encode","pulse","tuples","cur","modifies","CACHE","Parameters","force","modified","OP_ID","NO_PARAMS","Operator","init","params","react","stamp","rank","qrank","flags","_update","parameters","flag","bit","state","targets","_targets","skip","initonly","argval","_argval","argops","_argops","deps","op","marshall","item","detach","evaluate","StopPropagation","run","rv","STREAM_ID","EventStream","receive","_filter","_apply","stream","consume","_consume","evt","val","trg","preventDefault","stopPropagation","throttle","pause","now","dataflow","between","active","SKIP","onStream","func","touch","onOperator","updater","connect","Pulse","materialize","visit","addFilter","MultiPulse","pulses","hash","changed","ADD","REM","MOD","changes","reentrant","ADD_REM","ADD_MOD","ALL","REFLOW","SOURCE","NO_SOURCE","NO_FIELDS","fork","clone","addAll","src","addF","remF","modF","srcF","cleans","runAfter","nomod","some","NO_OPT","Heap","nodes","siftdown","last","ridx","cidx","siftup","pidx","Dataflow","logLevel","_clock","_rank","_locale","_loader","_touched","_input","_pulse","_heap","_postrun","logMethod","_log","Transform","cleanThreshold","shift","sources","targetRank","rerank","queue","_enqueue","ingest","preload","pending","_pending","requests","done","loadPending","res","request","send","document","querySelectorAll","addEventListener","on","prerun","postrun","_getPulse","then","pr","priority","all","cb","runAsync","_running","enqueue","singlePulse","transforms","Definition","quantiles","quartiles","estimateBandwidth","mean","variance","deviation","h","maxb","logb","div","divide","minstep","steps","eps","nice","bootstrapCI","samples","alpha","mu","random","dotbin","smooth","thresh","smoothing","SQRT2PI","PI","SQRT2","nextSample","sampleNormal","stdev","rds","densityNormal","cumulativeNormal","cd","quantileNormal","erfinv","gaussian","sigma","dist","sample","pdf","cdf","icdf","kde","support","bandwidth","kernel","sampleLogNormal","densityLogNormal","cumulativeLogNormal","quantileLogNormal","lognormal","mixture","dists","weights","normalize","distributions","sampleUniform","densityUniform","cumulativeUniform","quantileUniform","uniform","ols","uX","uY","uXY","uX2","slope","Y","xv","yv","ux","uy","visitPoints","rSquared","predict","SSE","SST","sse","sst","linear","XY","X2","coef","ly","xy","YL","XYL","X2Y","c0","c1","YS","lx","quad","x2","X3","X4","X2X2","poly","lhs","rhs","matrix","gaussianElimination","uncenter","loess","bw","yhat","residuals","robustWeights","iter","edge","denom","xk","yk","tricube","xkw","updateInterval","medianResidual","median","arg","cnt","MIN_RADIANS","sampleCurve","minSteps","maxSteps","minX","maxX","pm","angleDelta","a0","atan2","a1","groupkey","measureName","as","noop","base_op","AggregateOps","cell","store","num","__count__","missing","valid","product","mean_d","average","req","dev","variancep","stdevp","stderr","distinct","ci0","ci1","q2","q1","q3","argmin","argmax","ValidAggregateOps","createMeasure","compareIndex","_ops","_out","compileMeasures","agg","ops","getreqs","resolve","ctr","TupleStore","_key","reset","measure","prototype$1","Aggregate","_adds","_mods","_alen","_mlen","_drop","_cross","_dims","_dnames","_measures","_countOnly","_counts","_prev","_inputs","_outputs","_add","_rem","_ext","_get","_q","quartile","ci","_ci","aggr","drop","cross","dims","vals","collect","cells","generate","inputs","outputs","inputMap","inputVisit","groupby","dname","cellkey","mname","outname","newcell","newtuple","measures","celltuple","counts","adds","mods","Bin","SortedList","resort","Collect","Compare","update$5","CountPattern","Cross","band","bins","_bins","b0","b1","root","process","tokens","tcase","tokenize","case","_parameterCheck","_match","_stop","_finish","stopwords","_tuples","Distributions","randomKDE","randomMixture","normal","randomNormal","randomLogNormal","randomUniform","FUNCTION","def","Density","fieldNames","partition$1","groups","distribution","minsteps","maxsteps","DotBin","Expression","update$4","expr","Extent","Subflow","Facet","_keys","Field","update$3","Filter","Flatten","Fold","Formula","Generate","autostep","detachSubflow","activate","flow","subflow","flows","sf","_group","detached","initTargets","act","rekey","k0","k1","isMod","revisit","maxlen","fnames","generator","Methods","Empty","Impute","JoinAggregate","KDE","Key","update$2","Load","Lookup","MultiExtent","update$1","extents","MultiValues","Params","Pivot","PreFacet","Project","Proxy","Quantile","gVals","kVal","impute","getValue","getField","fName","kName","gNames","keyvals","gKey","kMap","gMap","partition","_impute","cumulative","density","defaultValue","default","_transform","limit","pivotKeys","bind","aggregateParams","project","lut","dt","Relay","Sample","Sequence","Sieve","TimeUnit","probs","cap","OUTPUT","TupleIndex","Values","utc","timezone","_floor","u0","u1","timeBin","tunits","WindowOps","row_number","dense_rank","drank","percent_rank","cume_dist","cume","ntile","lag","lead","first_value","last_value","nth_value","nth","prev_value","next_value","find","ValidWindowOps","WindowState","windows","countOnly","visitInputs","param","WindowOp","Window","processPartition","ignorePeers","frame","setWindow","adjustRange","bisect","wind","pi","tau","epsilon","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","y2","arcTo","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","tan","acos","t01","t21","ccw","cos","sin","cw","rect","halfPi","asin","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","intersect","x3","y3","x10","y10","x32","y32","cornerTangents","rc","ox","oy","x11","y11","x00","y00","d2","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","Linear","_context","defined","curve","curveLinear","buffer","defined0","lineStart","lineEnd","pointX","pointY","area","x0z","y0z","areaStart","areaEnd","arealine","lineX0","lineY0","lineY1","lineX1","_line","_point","draw","that","Basis","BasisClosed","BasisOpen","Bundle","beta","_basis","_beta","_x2","_x3","_x4","_y2","_y3","_y4","_x","_y","custom","bundle","_k","Cardinal","tension","cardinal","CardinalClosed","_x5","_y5","CardinalOpen","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","_alpha","x23","y23","catmullRom","CatmullRomClosed","CatmullRomOpen","LinearClosed","slope3","h0","h1","s0","s1","slope2","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","Step","_t","domCanvas","createElement","getContext","height","_t0","px","py","domImage","Image","initRange","initInterpolator","interpolator","implicit","ordinal","factory","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","parseInt","rgbn","Rgb","rgba","hsla","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","Hsl","hslConvert","hsl","hsl2rgb","m1","m2","define","channels","assign","displayable","formatHsl","radians","degrees","Xn","Zn","t2","labConvert","Lab","Hcl","hcl2lab","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","hcl","A","B","C","E","ED","EB","BC_DA","cubehelixConvert","Cubehelix","bl","cubehelix","basis","v0","v1","v2","v3","t3","cosh","sinh","hue","gamma","nogamma","exponential","rgbGamma","colorRgb","rgbSpline","spline","colors","rgbBasis","rgbBasisClosed","basisClosed","isNumberArray","ArrayBuffer","isView","DataView","genericArray","nb","na","reA","reB","am","bm","bs","bi","lastIndex","numberArray","svgNode","translateX","translateY","rotate","skewX","scaleX","scaleY","atan","interpolateTransform","pxComma","pxParen","degParen","xa","ya","xb","yb","interpolateTransformCss","DOMMatrix","WebKitCSSMatrix","isIdentity","decompose","interpolateTransformSvg","createElementNS","setAttribute","baseVal","consolidate","zoomRho","rho","rho2","rho4","ux0","uy0","w0","ux1","uy1","w1","coshr0","tanh","duration","_1","_2","colorHsl","hslLong","colorHcl","hclLong","cubehelixGamma","colorCubehelix","cubehelixLong","piecewise","interpolate","colorLab","bimap","polymap","clamp","transformer","untransform","interpolateValue","rescale","clamper","invert","interpolateNumber","rangeRound","interpolateRound","continuous","tickFormat","linearish","prestep","maxIter","transformLog","transformExp","transformLogn","transformExpn","pow10","reflect","loggish","logs","pows","log10","log2","logp","powp","transformSymlog","transformSymexp","symlogish","transformPow","transformSqrt","transformSquare","powish","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","tickIntervals","tickInterval","k10","sequential","sequentialPow","k21","r2","divergingPow","bandSpace","paddingInner","paddingOuter","space","Log","Pow","Sqrt","Symlog","Time","Sequential","Quantize","Threshold","Ordinal","Point","Band","BinOrdinal","Continuous","Discrete","Discretizing","Interpolating","Temporal","scaleOrdinal","ordinalRange","range$1","invertRange","pointish","scales","metadata","invertExtent","invertRangeExtent","isValidScaleType","hasType","isContinuous","isDiscrete","isDiscretizing","isLogarithmic","isInterpolating","isQuantile","sequentialLog","sequentialSymlog","diverging","divergingLog","divergingSymlog","thresholds","quantize","scaleBinOrdinal","tickFormat$1","scaleProps","interpolateRange","interpolateColors","$$1","quantizeInterpolator","scaleFraction","scale$1","interp","palette","scheme","schemes","category10","category20","category20b","category20c","tableau10","tableau20","accent","dark2","paired","pastel1","pastel2","set1","set2","set3","blues","greens","greys","oranges","purples","reds","blueGreen","bluePurple","greenBlue","orangeRed","purpleBlue","purpleBlueGreen","purpleRed","redPurple","yellowGreen","yellowOrangeBrown","yellowOrangeRed","blueOrange","brownBlueGreen","purpleGreen","purpleOrange","redBlue","redGrey","yellowGreenBlue","redYellowBlue","redYellowGreen","pinkYellowGreen","spectral","viridis","magma","inferno","plasma","cividis","rainbow","sinebow","turbo","browns","tealBlues","teals","warmGreys","goldGreen","goldOrange","goldRed","lightGreyRed","lightGreyTeal","lightMulti","lightOrange","lightTealBlue","darkBlue","darkGold","darkGreen","darkMulti","darkRed","SymbolLegend","defaultFormatter","descending","tickCount","minStep","validTicks","endpoints","tickValues","noSkip","varfmt","tickLog","symbols","labelValues","binValues","thresholdValues","labelFormat","thresholdFormat","isDiscreteRange","formatRange","formatDiscrete","formatPoint","dflt","isTemporal","domainCaption","gradient_id","patternPrefix","isGradient","gradient","gradientRef","defs","Gradient","stops","lookup","curveBundle","curveCardinal","curveCardinalOpen","curveCardinalClosed","curveCatmullRom","curveCatmullRomClosed","curveCatmullRomOpen","horizontal","vertical","curves","orientation","entry","cmdlen","regexp","pathParse","pathstr","chunks","parsed","cmd","DegToRad","HalfPi","Tau","HalfSqrt3","segmentCache","bezierCache","bezier","th0","th1","rx","ry","sin_th","cos_th","a00","a01","a10","a11","cos_th0","sin_th0","cos_th1","sin_th1","th_half","sin_th_h2","temp","current","sX","sY","pathRender","tempX","tempY","tempControlX","tempControlY","controlX","controlY","beginPath","drawArc","coords","seg","large","sweep","rotateX","th","pl","sfactor_sq","sfactor","xc","yc","th_arc","segs","th2","th3","segments","bez","Tan30","builtins","customSymbol","rectangleX","rectangleY","rectangleWidth","rectangleHeight","vg_rect","crTL","crTR","crBL","crBR","rectangle","tl","tr","br","path$3","cornerRadius","vg_trail","ready","w2","ud","trail","value$1","arcShape","padRadius","da0","da1","ap","rp","rc0","rc1","oc","ax","ay","bx","by","kc","lc","centroid","arc$2","areavShape","area$2","areahShape","lineShape","line$2","rectShape","cornerRadiusTopLeft","cornerRadiusTopRight","cornerRadiusBottomRight","cornerRadiusBottomLeft","symbolShape","circle","symbol$2","shape","trailShape","hasCornerRadius","clip_id","resetSVGClipId","clip$1","renderer","clip","_defs","clipping","Bounds","union","Item","mark","bounds","GroupItem","items","ResourceLoader","customLoader","increment","decrement","boundStroke","miter","stroke","strokeOpacity","sw","strokeWidth","expand","strokeJoin","miterAdjustment","MAX_VALUE","equals","angle","rotatedPoints","encloses","alignsWith","intersects","contains","sanitizeURL","catch","loadImage","image$1","img","cors","onload","onerror","complete","poll","circleThreshold","rot","ma","mb","mc","md","addL","addX","addY","addp","addpL","boundContext","deg","context$1","px1","py1","px2","py2","quadExtrema","px3","py3","cubicExtrema","sa","ea","cubic","s2","canvas","intersectPath","brush","isPointInPath","intersectPoint","box","intersectRect","intersectRule","intersectBoxLine","blend","globalCompositeOperation","addStops","addColorStop","createRadialGradient","image","ictx","fillStyle","createLinearGradient","fillRect","createPattern","fillOpacity","globalAlpha","lw","strokeStyle","lineWidth","lineCap","strokeCap","lineJoin","miterLimit","strokeMiterLimit","setLineDash","strokeDash","lineDashOffset","strokeDashOffset","zindex","zorder","scene","zdirty","zitems","pickVisit","hit","drawAll","drawPath","drawOne","pick$1","gx","gy","pixelRatio","hitPath","filled","isPointInStroke","pickPath","translateItem","markItemPath","isect","tag","nested","attr","emit","rotateItem","bound","pick","markMultiItemPath","tip","orient","clipGroup","offset$1","strokeOffset","emitRectangle","off","rectanglePath","hitBackground","hitForeground","hitCorner","noBound","fore","strokeForeground","save","restore","dw","dh","ix","interactive","marktype","pickMark","content","background","foreground","getImage","imageWidth","aspect","imageHeight","imageXOffset","imageYOffset","baseline","toDataURL","ar0","ar1","imageSmoothingEnabled","drawImage","xOffset","yOffset","path$1","sx","sy","pathCache","path$2","transformItem","draw$2","rule","widthCache","textMetrics","fontSize","measureWidth","estimateWidth","useCanvas","use","_estimateWidth","textValue","currentFontHeight","_measureWidth","font","currentFont","measureText","lineHeight","textLines","lineBreak","multiLineOffset","widthGetter","rtl","dir","fontFamily","quote","fontStyle","fontVariant","fontWeight","textAlign","tempBounds","anchorPoint","radius","theta","Marks","lh","fillText","strokeText","boundItem","DUMMY","boundMark","hasItems","sceneToJSON","indent","sceneFromJSON","initialize","Scenegraph","createMark","role","aria","description","domCreate","doc","ns","domFind","el","childNodes","tagName","domChild","ownerDocument","insertBefore","domClear","removeChild","cssClass","event","getBoundingClientRect","clientX","clientLeft","clientY","top","clientTop","Handler","customTooltip","_active","_handlers","_tooltip","defaultTooltip","element","Renderer","_el","_bgcolor","toJSON","markdef","origin","_obj","firstChild","_origin","_scene","_handlerIndex","handlers","eventName","handleHref","MouseEvent","dispatchEvent","handleTooltip","show","tooltip","mdef","resolveItem","getItemBoundingClientRect","bottom","scaleFactor","resize","bgcolor","_width","_height","_scale","dirty","render","_call","_render","renderAsync","_ready","_load","redraw","DragEnterEvent","DragLeaveEvent","DragOverEvent","MouseDownEvent","MouseMoveEvent","MouseOutEvent","MouseOverEvent","ClickEvent","MouseWheelEvent","TouchStartEvent","TouchMoveEvent","TouchEndEvent","TooltipShowEvent","TooltipHideEvent","HrefEvent","CanvasHandler","_down","_touch","_first","_events","eventListenerCheck","eventBundle","fire","move","moveEvent","overEvent","outEvent","pickEvent","exit","inactive","_canvas","events","DOMMouseScroll","mousemove","dragover","mouseout","dragleave","mousedown","click","touchstart","changedTouches","touchmove","touchend","vegaType","window","devicePixelRatio","CanvasRenderer","_options","_redraw","_dirty","_tempb","base$1","SVGHandler","_hrefHandler","listener","_tooltipHandler","externalContext","appendChild","inDOM","HTMLElement","parentNode","ratio","style","setTransform","ctx","db","vb","viewBounds","clipToBounds","clearRect","__data__","svg","_svg","removeEventListener","ARIA_HIDDEN","ARIA_LABEL","ARIA_ROLE","ARIA_ROLEDESCRIPTION","GRAPHICS_OBJECT","GRAPHICS_SYMBOL","roledesc","label","AriaIgnore","AriaGuides","desc","caption","title","extractTitle","props","channelCaption","titleCaption","AriaEncode","ariaRole","ariaRoleDescription","ariaItemAttributes","hide","ariaMarkAttributes","ariaGuide","ariaMark","innerText","markup","buf","outer","inner","stack","open","attrs","close","serializeXML","node","_serialize","hasAttributes","attributes","hasChildNodes","children","nodeType","nodeValue","styles","rootAttributes","xmlns","svgns","SVGRenderer","_dirtyID","_root","dirtyParents","updateGradient","grad","pt","setAttributes","viewBox","preserveAspectRatio","fx","fy","fr","updateClipping","mask","sibling","__values__","bg","cg","ownerSVGElement","previousSibling","siblingCheck","nextSibling","_clearDefs","setAttributeNS","RootIndex","setProperty","removeAttribute","_dirtyCheck","_dirtyAll","isDirty","isGroup","lastChild","extra","mark_extras","setStyle","ts","textContent","removeAttributeNS","removeProperty","loc","location","SVGStringRenderer","_text","class","attrList","_hrefs","prefixed","display","Canvas","None","RenderType","PNG","SVG","modules","renderModule","hits","intersectMark","intersectGroup","visitMark","intersectItem","marks","headless","clipBounds","boundClip","sceneEqual","pathEqual","ka","kb","objectEqual","Top","Left","Right","Bottom","Start","Middle","End","Group","AxisRole","TitleRole","FrameRole","ScopeRole","LegendRole","RowHeader","RowFooter","RowTitle","ColHeader","ColFooter","ColTitle","Padding","Fit","FitX","FitY","All","Each","Flush","Column","Row","Bound","view","rebound","markBounds","COUNTER_NAME","Identifier","Mark","Overlap","counter","_signals","scenegraph","lookup$1","Init","methods","parity","greedy","sep","hasOverlap","hasBounds","Render","separation","boundScale","boundTolerance","tolerance","boundTest","boundOrient","isYAxis","axisLayout","axis","indices","grid","labels","axisIndices","position","minExtent","maxExtent","titlePadding","dl","axisTitleLayout","auto","bboxFlush","bboxFull","offsetValue","gridLayout","nodirty","alignCol","alignRow","padCol","padRow","ncols","nrows","xExtent","xMax","yExtent","yMax","boxes","trellisLayout","views","rowheaders","rowfooters","colheaders","colfooters","rowtitle","coltitle","gridLayoutGroups","boundFlush","boundFull","headerBand","layoutHeaders","footerBand","titleAnchor","titleBand","layoutTitle","headers","isX","bf","stride","back","legendParams","config","legends","offsets","mult","legendLayout","legend","_bounds","ex","ey","tpad","tx","ty","legendTitleOffset","legendGroupLayout","legendBounds","entries","widths","legendEntryLayout","lr","noBar","vgrad","ViewLayout","xBounds","yBounds","autosize","pos","subtitle","titleLayout","_autosize","viewWidth","viewHeight","_resizeView","viewSizeLayout","layoutGroup","shouldReflow","AxisTicks","DataJoin","defaultItemCreate","Encode","LegendEntries","newMap","fmod","encoders","reenter","enter","fraction","lskip","perc","adjust","labelFraction","perc2","sourceX","sourceY","targetX","targetY","LinkPath","Paths","rr","iy","sr","ta","sc","ss","tc","mr","Pie","includePad","Scale","domainCheck","adjustScheme","flip","SortItems","isContinuousColor","rawDomain","domainMid","Diverging","scaleKey","rangeStep","configureRangeStep","scheme$1","schemeExtent","interpolateGamma","schemeCount","configureScheme","interpolate$1","configureRange","domainRaw","configureBins","raw","includeZero","padDomain","domainMin","domainMax","domainImplicit","scaleImplicit","configureDomain","Zero","Center","Normalize","DefOutput","Stack","stackCenter","stackNormalize","stackZero","lastPos","lastNeg","epsilon2","quarterPi","hypot","streamGeometry","streamGeometryType","streamObjectType","Feature","FeatureCollection","Sphere","sphere","MultiPoint","LineString","streamLine","MultiLineString","Polygon","streamPolygon","MultiPolygon","GeometryCollection","closed","coordinate","polygonStart","polygonEnd","lambda00","phi00","lambda0","cosPhi0","sinPhi0","phi0","lambda1","phi1","lambda2","deltaSum","ranges","areaRingSum","areaSum","areaStream","areaRingStart","areaRingEnd","areaRing","areaPointFirst","areaPoint","lambda","phi","dLambda","sdLambda","adLambda","cosPhi","sinPhi","spherical","cartesian","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","W0","W1","X0","Y0","Z0","X1","Y1","Z1","Y2","Z2","z0","boundsStream","boundsPoint","boundsLineStart","boundsLineEnd","boundsRingPoint","boundsRingStart","boundsRingEnd","linePoint","inflection","phii","lambdai","antimeridian","rangeCompare","rangeContains","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointCartesian","centroidLinePointFirst","centroidLinePoint","centroidRingPointFirst","centroidRingPoint","cz","compose","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","circleRadius","cosRadius","lines","rejoin","Intersection","other","compareIntersection","startInside","subject","segment","pointEqual","link","isSubject","longitude","pointVisible","clipLine","sink","ringBuffer","clipBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","winding","point0","sinPhi1","cosPhi1","point1","absDelta","intersection","phiArc","polygonContains","clipRejoin","pointLine","ringSegments","validSegment","sign0","sign1","sinLambda0Lambda1","clipAntimeridianIntersect","to","direction","cr","smallRadius","notHemisphere","visible","two","n2","n2n2","n1n2","determinant","c2","n1xn2","uu","polar","code","v00","point2","sinRadius","circleStream","clipMax","clipMin","clipRectangle","corner","comparePoint","ca","x__","y__","v__","x_","y_","v_","first","activeStream","bufferStream","clipStream","polygonInside","cleanInside","graticuleX","graticuleY","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","PathContext","_radius","pointRadius","lengthRing","lengthSum","lengthStream","lengthPointFirst","lengthPoint","PathString","_string","projection","projectionStream","contextStream","pathArea","pathMeasure","pathBounds","pathCentroid","TransformStream","fit","fitBounds","clipExtent","geoStream","fitExtent","fitSize","fitWidth","fitHeight","_circle","cosMinDistance","delta2","resampleLineTo","depth","phi2","dx2","dy2","dz","b00","c00","resampleStream","ringPoint","resample","resampleNone","transformRadians","scaleTranslateRotate","scaleTranslate","cosAlpha","sinAlpha","ai","fi","projectionMutator","projectAt","projectResample","projectTransform","projectRotateTransform","cacheStream","preclip","clipAntimeridian","postclip","recenter","transformRotate","clipAngle","clipCircle","reflectX","reflectY","conicProjection","parallels","conicEqualAreaRaw","sy0","forward","cylindricalEqualAreaRaw","r0y","conicEqualArea","azimuthalRaw","azimuthalInvert","cc","azimuthalEqualAreaRaw","cxcy","azimuthalEquidistantRaw","mercatorRaw","mercatorProjection","reclip","tany","conicConformalRaw","equirectangularRaw","conicEquidistantRaw","nx","A1","A2","A3","A4","equalEarthRaw","l2","l6","gnomonicRaw","naturalEarth1Raw","phi4","orthographicRaw","stereographicRaw","transverseMercatorRaw","sqrt2","mollweideBromleyTheta","cp","cpsinPhi","mollweideRaw","mollweideBromleyRaw","defaultPath","geoPath","projectionProperties","proj","projections","getProjectionPath","albers","geoAlbers","albersusa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","albersUsa","streams","azimuthalequalarea","azimuthalequidistant","conicconformal","conicequalarea","geoConicEqualArea","conicequidistant","equalEarth","equirectangular","gnomonic","mercator","mollweide","naturalEarth1","orthographic","stereographic","transversemercator","cases","contours","smoothLinear","tz","contour","polygons","holes","startIndex","endIndex","isorings","hole","xt","yt","_0","ringContains","xi","yi","pj","xj","yj","segmentContains","collinear","Isocontour","transformPolygon","transformRing","bandwidthNRD","density2D","weight","values0","Float32Array","values1","blurX","blurY","sz","cellSize","LN2","KDE2D","levels","paths","transformPaths","PARAMS","Contour","post","GeoJSON","GeoPath","GeoPoint","GeoShape","Graticule","DX","DY","graticule","outline","extentMajor","extentMinor","stepMajor","stepMinor","geoGraticule","Heatmap","dependency","$x","$y","$value","$max","Projection","_features","_points","lon","lat","geojson","initPath","shapeGenerator","shared","dep","opacity_","color_","can","getImageData","pix","putImageData","toCanvas","featurize","collectGeoJSON","tree","xm","ym","xp","yp","leaf","defaultX","defaultY","quadtree","Quadtree","leaf_copy","treeProto","vx","vy","nodeById","nodeId","cover","xz","yz","quads","Quad","retainer","removeAll","visitAfter","dispatch","Dispatch","parseTypenames","typenames","typename","T","taskHead","taskTail","timeout","clockLast","clockNow","clockSkew","clock","performance","setFrame","requestAnimationFrame","clearNow","Timer","_time","_next","timer","restart","wake","timerFlush","sleep","nap","poke","clearInterval","setInterval","TypeError","initialAngle","simulation","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","lcg","tick","iterations","initializeNodes","initializeForce","randomSource","closest","ForceMap","strength","collide","radii","ri","ri2","prepare","rj","jiggle","_nodes","_random","nbody","strengths","distanceMin2","distanceMax2","theta2","accumulate","distanceMin","distanceMax","links","distances","bias","distance","initializeStrength","initializeDistance","Forces","ForceParams","ForceConfig","ForceOutput","Force","setup","sim","getForce","numForces","setForceParam","change","iters","forceSimulation","stopped","static","finish","defaultSeparation","meanXReduce","maxYReduce","hierarchy","mapChildren","objectChildren","childs","Node","eachBefore","computeHeight","copyData","circles","shuffle","enclosesWeak","encloseBasis","extendBasis","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","dr","encloseBasis1","r21","r3","a2","a3","b2","b3","c3","d3","ab","place","score","packEnclose","aa","sj","sk","pack","enclose","optional","required","constantZero","defaultRadius","radiusLeaf","packChildren","translateChild","eachAfter","each","ancestor","aNodes","ancestors","bNodes","leastCommonAncestor","descendants","leaves","preroot","ambiguous","defaultId","defaultParentId","parentId","stratify","nodeKey","nodeByKey","nextLeft","nextRight","moveSubtree","wm","wp","nextAncestor","vim","TreeNode","squarifyRatio","sumValue","minValue","maxValue","newRatio","minRatio","dice","treemapDice","treemapSlice","squarify","resquarify","_squarify","Nest","nest","valuesByKey","keyValue","HierarchyLayout","setParams","setFields","Output$3","Pack","Output$2","Partition","Stratify","positionNode","roundNode","parentKey","Layouts","tidy","nodeSize","treeRoot","firstWalk","secondWalk","sizeNode","siblings","executeShifts","midpoint","vip","vop","vom","sip","sop","som","apportion","cluster","previousNode","meanX","maxY","leafLeft","leafRight","Output$1","Tree","TreeLinks","Tiles","binary","sums","valueOffset","valueTarget","valueLeft","valueRight","slicedice","treemapSquarify","treemapResquarify","Output","Treemap","tile","paddingStack","paddingTop","paddingRight","paddingBottom","paddingLeft","treemap","markBitmaps","avoidMarks","labelInside","isGroupArea","border","Uint32Array","layer1","bitmap","layer2","RIGHT0","SIZE","RIGHT1","scaler","_set","_clear","getRange","indexStart","indexEnd","setRange","clearRange","outOfBounds","Bitmap","textWidth","textHeight","collision","bm0","bm1","X_DIR","Y_DIR","Aligns","Baselines","boundary","isInside","isInMarkBound","anchorCode","TOP","MIDDLE","BOTTOM","placeAreaLabel","bitmaps","avoidBaseMark","markIndex","areaWidth","maxAreaWidth","tryLabel","maxSize","_xMid","_yMid","swapTmp","labelPlaced","labelPlaced2","bm2","labelLayout","texts","lineAnchor","positions","getOffsets","anchors","Int8Array","getAnchors","grouptype","markBoundary","isNaiveGroupArea","baseBitmaps","sizeFactor","insideFactor","SQRT1_2","placeMarkLabel","Anchors","Label","Loess","regressionLoess","regressionLinear","regressionLog","regressionExp","regressionPow","regressionQuad","regressionPoly","Regression","dof","degreesOfFreedom","model","dom","EPSILON","EDGE_STACK","Delaunator","getX","defaultGetX","getY","defaultGetY","maxTriangles","_triangles","_halfedges","Int32Array","_hashSize","_hullPrev","_hullNext","_hullTri","_hullHash","_ids","_dists","hullPrev","hullNext","hullTri","hullHash","minY","i2","minDist","i0x","i0y","i1x","i1y","minRadius","circumradius","i2x","i2y","quicksort","hull","triangles","halfedges","cl","circumcenter","_cx","_cy","_hullStart","hullSize","_hashKey","trianglesLen","_addTriangle","_legalize","pseudoAngle","ar","al","inCircle","hbl","_link","orientIfSure","qx","qy","bp","tempDist","arr","tmp","Voronoi","delaunay","xmin","ymin","xmax","ymax","_circumcenters","vectors","_init","circumcenters","inedges","ti","tj","_renderSegment","_project","renderBounds","renderCell","_clip","cellPolygon","_regioncode","_clipSegment","_step","neighbors","cj","loop","li","aj","lj","_cell","e0","_clipInfinite","_clipFinite","e1","P","sx0","sx1","sy1","_edgecode","_edge","vx0","vy0","vxn","vyn","jitter","Delaunay","flatArray","flatIterable","_delaunator","_hullIndex","hullIndex","voronoi","dc","renderHull","renderPoints","hullPolygon","renderTriangle","trianglePolygon","defaultExtent","toPathString","cloudRadians","ch","cloud","spiral","archimedeanSpiral","words","board","dxdy","startX","startY","maxDelta","cloudCollide","collideRects","sprite","msx","contextAndRatio","zeroArray","tags","xoff","yoff","hasText","cloudSprite","cloudBounds","functor","spirals","di","w32","maxh","wcr","wsr","hcr","hsr","pixels","seen","seenRow","archimedean","rectangular","Wordcloud","fontSizeRange","fsize","sizeScale","array8","Uint8Array","array16","Uint16Array","array32","Dimension","query","onAdd","added","dim","SortedIndex","addi","oldv","oldi","addv","permute","index0","value1","index1","reindex","CrossFilter","lengthen","_index","Bitmaps","_indices","ResolveFilter","reinit","eval","bits","remMap","modMap","indexMap","incrementOne","incrementAll","old","lo1","hi1","lo0","hi0","ignore","pass","RawCode","Literal","Property","ArrayExpression","BinaryExpression","CallExpression","ConditionalExpression","LogicalExpression","MemberExpression","ObjectExpression","UnaryExpression","ASTNode","TokenName","lookahead","elements","callee","consequent","alternate","argument","SyntaxIdentifier","MessageUnexpectedToken","MessageInvalidRegExp","MessageUnterminatedRegExp","MessageStrictOctalLiteral","ILLEGAL","DISABLED","RegexNonAsciiIdentifierStart","RegexNonAsciiIdentifierPart","assert","condition","isDecimalDigit","isHexDigit","isOctalDigit","isWhiteSpace","isLineTerminator","isIdentifierStart","fromCharCode","isIdentifierPart","keywords","skipComment","scanHexEscape","throwError","scanUnicodeCodePointEscape","cu1","cu2","getEscapedIdentifier","substr","scanIdentifier","getIdentifier","scanPunctuator","code2","ch2","ch3","ch4","ch1","scanNumericLiteral","scanHexLiteral","octal","scanOctalLiteral","parseFloat","scanRegExp","body","classMarker","terminated","literal","scanRegExpBody","search","scanRegExpFlags","$0","$1","exception","testRegExp","regex","advance","scanStringLiteral","lex","finishBinaryExpression","operator","finishCallExpression","finishIdentifier","finishLiteral","finishMemberExpression","computed","member","finishProperty","kind","messageFormat","msg","whole","throwUnexpected","expect","matchKeyword","keyword","parseArrayInitialiser","parseConditionalExpression","finishArrayExpression","parseObjectPropertyKey","parseObjectProperty","parseObjectInitialiser","finishObjectExpression","legalKeywords","parsePrimaryExpression","parseExpression","parseGroupExpression","parseArguments","parseNonComputedMember","isIdentifierName","parseNonComputedProperty","parseComputedMember","parsePostfixExpression","parseLeftHandSideExpressionAllowCall","parseUnaryExpression","finishUnaryExpression","binaryPrecedence","prec","marker","markers","parseBinaryExpression","finishConditionalExpression","Constants","LOG2E","LOG10E","MIN_VALUE","Functions","codegen","cast","fncall","STRING","REGEXP","datetime","timezoneoffset","utcdate","utcday","utcyear","utcmonth","utchours","utcminutes","utcseconds","utcmilliseconds","upper","lower","if","allowed","forbidden","constants","functions","globalvar","fieldvar","outputGlobal","globals","memberDepth","ast","Generators","stripQuotes","Intersect","Union","UNIT_INDEX","testPoint","dval","selectionId","E_union","E_intersect","R_union","R_intersect","selectionVisitor","scope","indexName","IndexPrefix","dataName","getData","indataRef","tuplesRef","wrap","dateObj","setYear","dataVisitor","scaleVisitor","addScaleDependency","scaleName","scaleRef","getScale","internalScaleFunctions","fnctx","visitors","__bandwidth","_bandwidth","_range","ref","geoMethod","methodName","globalMethod","geoArea","geoBounds","deltaMax","geoCentroid","channel_luminance_value","channelValue","luminance","equal","equalArray","equalObject","removePredicate","accessors","seq","treeNodes","_window","functionContext","isDefined","isValid","indexof","lastindexof","repl","pluck","contrast","color1","color2","lum1","lum2","monthFormat","monthAbbrevFormat","dayFormat","dayAbbrevFormat","inScope","intersect$1","array$1","markname","pinchDistance","touches","pinchAngle","screen","containerSize","container","clientWidth","clientHeight","windowSize","innerWidth","innerHeight","bandspace","setdata","pathShape","retval","toggle","predicate","_trigger","eventFunctions","thisPrefix","astVisitors","codegenParams","codeGenerator","expressionFunction","signalName","getSignal","signalRef","$expr","$fields","$params","miss","unitIdx","isMulti","vl5","resUnit","resolved","multiRes","acc","Skip","Swap","canonicalType","expression","expressionCodegen","parameter","adjustSpatial","lt","gt","_compare","parseParameter","PARSERS","$ref","$key","$flat","parseParameters","$name","parameterExpression","$field","$encode","enc","encodeExpression","$output","$compare","$order","$tupleid","$subflow","subctx","operators","Context","Subcontext","ariaLabel","subcontext","isCollect","$ingest","$format","$request","unresolved","signal","operatorExpression","eventExpression","handlerExpression","eventConfig","parseOperator","parseOperatorParameters","parseStream","updates","parseUpdate","isOperator","srcid","dataset","getState","substate","setState","Default","setCursor","cursor","globalCursor","dataref","_runtime","_viewWidth","_viewHeight","eventExtend","_renderer","vega","itemGroup","extension","VIEW","NO_TRAP","trap","trackEventListener","_eventListeners","permit","_eventConfig","itemFilter","markTarget","invoke","Event","wrapper","form","checkbox","select","radio","checked","option","valuesEqual","selected","selectedIndex","prepend","initializeRenderer","querySelector","innerHTML","paddingObject","renderHeadless","module","_scenegraph","Width","Height","dataTest","signalTest","proxy","formatArray","formatTooltip","View","_elBind","_renderType","_handler","_globalCursor","_preventDefault","_timers","_resizeListeners","defaults","unpack","initializeEventConfig","runtime","_bind","bindings","_resize","resetSize","_resizeWidth","_resizeHeight","resizePadding","initializeResize","_background","user","hover","lookupSignal","findOperatorHandler","addOperatorListener","removeOperatorListener","resizeRenderer","_desc","_resetRenderer","rerun","addResizeListener","removeResizeListener","addSignalListener","removeSignalListener","addDataListener","removeDataListener","total","_restart","elapsed","timestamp","prevent","allow","finalize","timers","listeners","hoverSet","leaveSet","elBind","initializeAria","prevHandler","initializeHandler","binding","toImageURL","mime","blob","Blob","URL","createObjectURL","toBlobURL","toSVG","LBRACK","RBRACK","DEFAULT_MARKS","DEFAULT_SOURCE","MARKS","eventSelector","selector","parseMerge","parseSelector","endChar","pushChar","popChar","parseBetween","parseThrottle","isMarkType","parseAutosize","parsePadding","encoder","addEncode","addEncoders","extendEncode","MarkRole","LegendLabelRole","TitleTextRole","TitleSubtitleRole","applyDefault","entry$1","_color","resolveField","parseEncode","applyDefaults","parseBlock","block","parse$1","OUTER_INVALID","outerError","parseSignal","addSignal","addBinding","Entry","refs","fieldRef$1","keyFieldRef","compareRef","aggrField","Scope$1","isSignal","hasSignal","specValue","deref","mergeStream","nestedStream","eventStream","streamParameters","addStream","eventSource","markrole","filterMark","OP_VALUE_EXPR","isSubscope","mergeSources","addUpdate","streamSource","FIELD_REF_ID","MULTIDOMAIN_SORT_OPS","parseScale","parseScaleDomain","parseScaleRange","parseLiteral","parseScaleInterpolate","parseScaleNice","parseArray","objectProperty","parseScaleBins","dataLookupError","explicitDomain","multipleDomain","singularDomain","valuesRef","parseSort","domainRef","extentRef","coll","addDataPipeline","fieldRef","ordinalMultipleDomain","quantileMultipleDomain","numericMultipleDomain","countsRef","sortRef","multidomain","parseParameter$1","Index","Perc","Value","GuideLabelStyle","GuideTitleStyle","GroupTitleStyle","GroupSubtitleStyle","Symbols","Size","LegendScales","GroupMark","RectMark","RuleMark","TextMark","guideGroup","isVertical","symbolDirection","gradientDirection","gradientLength","gradientWidth","gradientThickness","gradientHeight","entryColumns","getEncoding","anchorExpr","alignExpr$1","extendOffset","guideMark","extras","legendGradient","userEncode","thickness","legendGradientDiscrete","dataRef","vv","legendGradientLabels","overlap","labelLimit","gradientLabelLimit","labelOffset","gradientLabelOffset","legendSymbolGroups","symbolOffset","valueRef","xSignal","yEncode","baseFill","baseStroke","symbolBaseFillColor","symbolBaseStrokeColor","facet","isL","isR","isLR","isVG","exprAlign","exprAnchor","exprAngle","exprBaseline","getRole","parseTransform","definition$1","pdef","lookupRef","parseIndexParameter","parseSubParameter","parseSubParameters","projectionRef","parameterValue","isExpr","isField","isCompare","outerExpr","exprRef","outerField","isData","getDataRef","DataScope","aggregate","fieldKey","addSortField","ds","optype","sortKey","parseTrigger","trigger","parseMark","layoutRef","boundRef","keyRef","parseData$1","joinRef","$context","markpath","markRef","generates","encodeRef","pushState","subscope","addData","toRuntime","parseFacet","parseSubflow","popState","tol","parseOverlap","sieve","parseLegend","legendEncode","entryLayout","scaleType","scaleCount","legendType","entryRef","tickMinStep","legendSymbolLayout","getChannel","getStyle","getFontSize","sizeExpression","_anchor","legendTitle","buildLegendEncode","fromEntries","parseTitle","buildTitle","titleEncode","buildSubTitle","groupEncode","parseData","upstream","analyze","getSign","ifLeftTopExpr","ifX","ifXEnc","ifY","ifYEnc","ifTop","ifTopExpr","$orient","ifEnc","ifExpr","ifRightExpr","isSimple","toExpr","ifOrient","patch","endsWith","fallback","axisConfig","styleProp","axisGrid","vscale","gridScale","tickPos","gridStart","gridEnd","flushExpr","axisLabels","flushOffset","labelAlign","labelBaseline","flushOn","tickSize","ifRight","offsetExpr","axisTitle","titlePos","autoY","autoX","autoLayout","parseAxis","or","axisBand","xyKeys","axisX","axisY","orientKeys","axisTop","axisBottom","axisLeft","axisRight","axisEncode","tickBand","ticksRef","axisTicks","pos0","pos1","axisDomain","buildAxisEncode","parseScope","preprocessed","addProjection","parseProjection","addScale","initScale","parseSignalUpdates","axes","parseLambdas","parseView","signalObject","pre","collectSignals","rootEncode","Scope","lambdas","_id","_subid","_nextsub","_parent","_encode","_lookup","_markpath","Subscope","propertyLambda","arrayLambda","objectLambda","vref","annotate","check","isExpr$1","sig","hasOwnSignal","addScaleProj","projectionType","dataScope","vtx","geo","reg","wordcloud","xf","version","pkg","defaultFont","defaultColor","lightGray","square","subtitlePadding","bandPosition","domainWidth","domainColor","gridWidth","gridColor","labelAngle","labelPadding","tickColor","tickOffset","tickRound","tickWidth","gridAlign","columnPadding","rowPadding","gradientStrokeColor","gradientStrokeWidth","labelOverlap","symbolLimit","symbolType","symbolSize","symbolStrokeWidth","titleLimit","titleOrient","category","heatmap","ramp","seed"],"mappings":"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iB,EAAEgzB,OAGnC1sB,EAAI2qG,GAASjxG,EAAEgzB,SAELhzB,EACJ+F,EAAWO,EAAEnH,KAAKg0G,GAAc7sG,EAAEnH,GAAIa,EAAEb,GAAIa,UAG3CsG,EAGT,SAAS6sG,GAAc7sG,EAAGI,EAAG1G,GAC3BsG,EAAEP,EAAWW,GAAKyM,GAAKzM,EAAEyM,EAAGnT,GAAK0G,GA5RnCosG,GAAMz2E,WAAa,MACT,iBACI,WACE,UAEJ,CAAC,MACD,cACA,mBACG,GACV,MACO,eACA,mBACG,GACV,MACO,kBACA,iBACG,KACV,MACO,aACA,iBACG,GACV,MACO,gBACA,iBACG,MACV,MACO,mBACA,iBACG,GACV,MACO,qBACA,iBACG,IACV,MACO,cACA,eACC,SACC,CAAC,KACF,OACI,iBAED,CAAC,MACD,SACA,iBACG,GACV,MACO,SACA,iBACG,KAEZ,KACM,OACI,kBAED,CAAC,MACD,cACA,eACA,GACP,MACO,gBACA,iBACG,IACV,MACO,kBACA,iBACG,KAEZ,KACM,OACI,gBAED,CAAC,MACD,gBACA,kBACI,IACX,MACO,aACA,iBACG,IACV,MACO,mBACA,iBACG,GACV,MACO,mBACA,YAET,KACM,OACI,eAED,CAAC,MACD,aACA,QACP,MACO,UACA,SACP,MACO,gBACA,iBACG,SACH,GACP,MACO,gBACA,eACA,GACP,MACO,kBACA,iBACG,KAEZ,KACM,OACI,YAED,CAAC,MACD,gBACA,iBACG,IACV,MACO,SACA,WAET,KACM,OACI,YAED,CAAC,MACD,gBACA,iBACG,IACV,MACO,SACA,aAGX,MACO,UACA,gBACC,UACC,UACCw2E,MAGf5pG,GAAS6pG,GAAO54E,GAAW,CACzB5pB,UAAUtQ,EAAG0yB,OAmEAxB,EAAIwD,EAlEXs+E,EAAM/xG,KAAKqB,MACX8wG,EAAS1gF,EAAMyE,QAAQzE,EAAM+E,SAC7BnE,EAAStzB,EAAEizB,SAAS0/E,IACpBU,EAAQrzG,EAAE4wG,YAAc,OAGvBoC,GAWCI,IACF1gF,EAAMG,SAAS,SACfmgF,EAAIl6E,MAAMpG,EAAM3wB,UAGduxB,GAAUZ,EAAMyE,QAAQzE,EAAM4E,OAChCy7E,GAAMC,EAAKhzG,EAAG,EAAG0yB,UAhBdpwB,MAAQ0wG,EA+DnB,SAAoBl6E,EAAO94B,SACnBgzG,EAAMM,GAAgBx6E,GACtB1kB,EAAO4+F,EAAI5+F,KACXq7F,EAAUuD,EAAIvD,YAChB8D,GAAU,SAEdP,EAAIO,QAAU,IAAMA,EAEpBP,EAAIvD,QAAU,KAAO8D,GAAU,EAAO9D,KAEtCuD,EAAI5+F,KAAO,KAAOm/F,GAAU,EAAMn/F,KAE3B2+F,GAAMC,EAAKhzG,GAAG,GAAMu7B,GAAG,OAAO,IAAMg4E,GAAU,IA3E9BpD,CAAWz9E,EAAM3wB,OAAQ/B,GAC5CgzG,EAAIz3E,GAAG,QA0DErK,EA1DYwB,EAAMwD,SA0DdxB,EA1DwBzzB,KA2DlC,IAAMiwB,EAAGsF,MAAM9B,GAAIM,QAzDjBh1B,EAAEwzG,SACLJ,GAAS,EACTJ,EAAIrC,QAGNj+E,EAAMG,SAAS,UAabS,GAAU8/E,GAAUpzG,EAAEizB,SAAS2/E,KAAgBlgF,EAAMyE,WAAan3B,EAAEyvG,WACtEuD,EAAIz1E,MAAMn6B,KAAKuC,IAAIqtG,EAAIz1E,QAASv9B,EAAEu9B,OAAS,IAAI8yE,WAAW,EAAIjtG,KAAKO,IAAIqvG,EAAI5C,WAAY,EAAIiD,IAEvFrzG,EAAEwzG,WACCR,EAAI5+F,SAAUi/F,GAAS,GAAIL,EAAIrC,eAEhCqC,EAAIO,WAAWP,EAAIvD,WAClB2D,EAAQ,OAAO1gF,EAAMqC,uBAIvB9zB,KAAKwyG,OAAOzzG,EAAG0yB,IAGxB+gF,OAAOzzG,EAAG0yB,SACFwD,EAAWxD,EAAMwD,aAElB,IAAiD2N,EAA7CpjC,EAAOQ,KAAKuzB,QAASn1B,EAAI,EAAGgW,EAAI5U,EAAKjC,OAAaa,EAAIgW,IAAKhW,KAClEwkC,EAAMpjC,EAAKpB,GAEPwkC,EAAI3lC,OAASw0G,IAAmC,SAAzB7uE,EAAInP,GAAGJ,QAAQtB,UAIrC,IAAiD0B,EAA7CmS,EAAMhD,EAAInP,GAAGF,QAAS11B,EAAI,EAAGM,EAAIynC,EAAIroC,OAAYM,EAAIM,IAAKN,KAC7C,UAAhB+nC,EAAI/nC,GAAGZ,OAAqBw2B,EAAKmS,EAAI/nC,GAAG41B,GAAG3yB,QAAS,CACtDm0B,EAASxD,MAAMgC,EAAIwB,EAASlE,YAAYK,uBAOvCK,EAAML,OAAOryB,EAAEizB,YAAYJ,SAASggF,uDKzO/C,SAASa,GAAkBhxG,EAAGlD,UACrBkD,EAAEyG,SAAW3J,EAAE2J,OAAS,EAAI,EAOrC,SAASwqG,GAAYxwG,EAAG7D,UACf6D,EAAI7D,EAAE6D,EAOf,SAASywG,GAAW9/F,EAAGxU,UACd8D,KAAKuC,IAAImO,EAAGxU,EAAEwU,GCjBvB,SAASO,GAAMqsE,OACTzqE,EAAM,EACN8qE,EAAWL,EAAKK,SAChBjiF,EAAIiiF,GAAYA,EAASviF,UACxBM,EACA,OAASA,GAAK,GAAGmX,GAAO8qE,EAASjiF,GAAGwD,WADjC2T,EAAM,EAEdyqE,EAAKp+E,MAAQ2T,ECQA,SAAS49F,GAAUpmF,EAAMszD,GAClCtzD,aAAgBxE,KAClBwE,EAAO,MAACrlB,EAAWqlB,QACFrlB,IAAb24E,IAAwBA,EAAW+yB,UACjB1rG,IAAb24E,IACTA,EAAWgzB,YAITrzB,EAEAx3E,EACA8qG,EACAl1G,EACAM,EANA8rC,EAAO,IAAI+oE,GAAKxmF,GAEhBqL,EAAQ,CAACoS,GAMNw1C,EAAO5nD,EAAM7nB,WACb+iG,EAASjzB,EAASL,EAAKjzD,SAAWruB,GAAK40G,EAAS1yG,MAAMoU,KAAKs+F,IAASx1G,YACvEkiF,EAAKK,SAAWizB,EACXl1G,EAAIM,EAAI,EAAGN,GAAK,IAAKA,EACxBg6B,EAAMp5B,KAAKwJ,EAAQ8qG,EAAOl1G,GAAK,IAAIm1G,GAAKD,EAAOl1G,KAC/CoK,EAAMC,OAASu3E,EACfx3E,EAAM63F,MAAQrgB,EAAKqgB,MAAQ,SAK1B71D,EAAKgpE,WAAWC,IAOzB,SAASJ,GAAe5gG,UACfA,EAAE4tE,SAGX,SAAS+yB,GAAY3gG,UACZ7R,MAAMD,QAAQ8R,GAAKA,EAAE,GAAK,KAGnC,SAASihG,GAAS1zB,QACQt4E,IAApBs4E,EAAKjzD,KAAKnrB,QAAqBo+E,EAAKp+E,MAAQo+E,EAAKjzD,KAAKnrB,OAC1Do+E,EAAKjzD,KAAOizD,EAAKjzD,KAAKA,KAGjB,SAAS0mF,GAAczzB,OACxB/hC,EAAS,KACV+hC,EAAK/hC,OAASA,SACT+hC,EAAOA,EAAKv3E,SAAYu3E,EAAK/hC,SAAWA,GAG3C,SAASs1D,GAAKxmF,QACdA,KAAOA,OACPszE,MACL9/F,KAAK09C,OAAS,OACTx1C,OAAS,KCrED,YAASkrG,WACkDl1G,EAAG+H,EAAvEpI,EAAI,EAAGM,GAAKi1G,ECGX,SAAiBtxG,WAElBgG,EACAjK,EAFAuW,EAAItS,EAAMvE,OAIP6W,GACLvW,EAAIsE,KAAKq6B,SAAWpoB,IAAM,EAC1BtM,EAAIhG,EAAMsS,GACVtS,EAAMsS,GAAKtS,EAAMjE,GACjBiE,EAAMjE,GAAKiK,SAGNhG,EDfmBuxG,CAAQhzG,MAAMoU,KAAK2+F,KAAW71G,OAAQ4tD,EAAI,GAE7DttD,EAAIM,GACTD,EAAIk1G,EAAQv1G,GACRoI,GAAKqtG,GAAartG,EAAG/H,KAAML,GAC1BoI,EAAIstG,GAAapoD,EAAIqoD,GAAYroD,EAAGjtD,IAAKL,EAAI,UAG7CoI,EAGT,SAASutG,GAAYroD,EAAGjtD,OAClBL,EAAGO,KAEHq1G,GAAgBv1G,EAAGitD,GAAI,MAAO,CAACjtD,OAG9BL,EAAI,EAAGA,EAAIstD,EAAE5tD,SAAUM,KACtB61G,GAAYx1G,EAAGitD,EAAEttD,KACd41G,GAAgBE,GAAcxoD,EAAEttD,GAAIK,GAAIitD,SACtC,CAACA,EAAEttD,GAAIK,OAKbL,EAAI,EAAGA,EAAIstD,EAAE5tD,OAAS,IAAKM,MACzBO,EAAIP,EAAI,EAAGO,EAAI+sD,EAAE5tD,SAAUa,KAC1Bs1G,GAAYC,GAAcxoD,EAAEttD,GAAIstD,EAAE/sD,IAAKF,IACpCw1G,GAAYC,GAAcxoD,EAAEttD,GAAIK,GAAIitD,EAAE/sD,KACtCs1G,GAAYC,GAAcxoD,EAAE/sD,GAAIF,GAAIitD,EAAEttD,KACtC41G,GAAgBG,GAAczoD,EAAEttD,GAAIstD,EAAE/sD,GAAIF,GAAIitD,SAC5C,CAACA,EAAEttD,GAAIstD,EAAE/sD,GAAIF,SAMpB,IAAIF,MAGZ,SAAS01G,GAAYjyG,EAAGlD,OAClBs1G,EAAKpyG,EAAER,EAAI1C,EAAE0C,EAAGyO,EAAKnR,EAAE2D,EAAIT,EAAES,EAAG0N,EAAKrR,EAAEsU,EAAIpR,EAAEoR,SAC1CghG,EAAK,GAAKA,EAAKA,EAAKnkG,EAAKA,EAAKE,EAAKA,EAG5C,SAAS0jG,GAAa7xG,EAAGlD,OACnBs1G,EAAKpyG,EAAER,EAAI1C,EAAE0C,EAA4B,KAAxBkB,KAAKuC,IAAIjD,EAAER,EAAG1C,EAAE0C,EAAG,GAAWyO,EAAKnR,EAAE2D,EAAIT,EAAES,EAAG0N,EAAKrR,EAAEsU,EAAIpR,EAAEoR,SACzEghG,EAAK,GAAKA,EAAKA,EAAKnkG,EAAKA,EAAKE,EAAKA,EAG5C,SAAS6jG,GAAgBhyG,EAAG0pD,OACrB,IAAIttD,EAAI,EAAGA,EAAIstD,EAAE5tD,SAAUM,MACzBy1G,GAAa7xG,EAAG0pD,EAAEttD,WACd,SAGJ,EAGT,SAAS01G,GAAapoD,UACZA,EAAE5tD,aACH,SAMT,SAAuBkE,SACd,CACLS,EAAGT,EAAES,EACL2Q,EAAGpR,EAAEoR,EACL5R,EAAGQ,EAAER,GAVU6yG,CAAc3oD,EAAE,SAC1B,SAAUwoD,GAAcxoD,EAAE,GAAIA,EAAE,SAChC,SAAUyoD,GAAczoD,EAAE,GAAIA,EAAE,GAAIA,EAAE,KAY/C,SAASwoD,GAAclyG,EAAGlD,OACpBm2C,EAAKjzC,EAAES,EAAGyyC,EAAKlzC,EAAEoR,EAAGjK,EAAKnH,EAAER,EAC3BkgC,EAAK5iC,EAAE2D,EAAG2yC,EAAKt2C,EAAEsU,EAAGyhD,EAAK/1D,EAAE0C,EAC3B8zC,EAAM5T,EAAKuT,EAAIM,EAAMH,EAAKF,EAAIo/D,EAAMz/C,EAAK1rD,EACzCb,EAAI5F,KAAK6Q,KAAK+hC,EAAMA,EAAMC,EAAMA,SAC7B,CACL9yC,GAAIwyC,EAAKvT,EAAK4T,EAAMhtC,EAAIgsG,GAAO,EAC/BlhG,GAAI8hC,EAAKE,EAAKG,EAAMjtC,EAAIgsG,GAAO,EAC/B9yG,GAAI8G,EAAIa,EAAK0rD,GAAM,GAIvB,SAASs/C,GAAcnyG,EAAGlD,EAAGF,OACvBq2C,EAAKjzC,EAAES,EAAGyyC,EAAKlzC,EAAEoR,EAAGjK,EAAKnH,EAAER,EAC3BkgC,EAAK5iC,EAAE2D,EAAG2yC,EAAKt2C,EAAEsU,EAAGyhD,EAAK/1D,EAAE0C,EAC3B+1C,EAAK34C,EAAE6D,EAAG+0C,EAAK54C,EAAEwU,EAAGmhG,EAAK31G,EAAE4C,EAC3BgzG,EAAKv/D,EAAKvT,EACV+yE,EAAKx/D,EAAKsC,EACVm9D,EAAKx/D,EAAKE,EACVu/D,EAAKz/D,EAAKsC,EACV8kD,EAAKznC,EAAK1rD,EACVyrG,EAAKL,EAAKprG,EACV1F,EAAKwxC,EAAKA,EAAKC,EAAKA,EAAK/rC,EAAKA,EAC9BkvC,EAAK50C,EAAKi+B,EAAKA,EAAK0T,EAAKA,EAAKyf,EAAKA,EACnCggD,EAAKpxG,EAAK8zC,EAAKA,EAAKC,EAAKA,EAAK+8D,EAAKA,EACnCO,EAAKL,EAAKC,EAAKF,EAAKG,EACpBxlD,GAAMulD,EAAKG,EAAKF,EAAKt8D,IAAY,EAALy8D,GAAU7/D,EACtCoa,GAAMslD,EAAKrY,EAAKoY,EAAKE,GAAME,EAC3B1lD,GAAMqlD,EAAKp8D,EAAKm8D,EAAKK,IAAY,EAALC,GAAU5/D,EACtCoa,GAAMklD,EAAKI,EAAKH,EAAKnY,GAAMwY,EAC3BrpD,EAAI4D,EAAKA,EAAKC,EAAKA,EAAK,EACxB5D,EAAI,GAAKviD,EAAKgmD,EAAKE,EAAKD,EAAKE,GAC7B3D,EAAIwD,EAAKA,EAAKC,EAAKA,EAAKjmD,EAAKA,EAC7B3H,IAAMiqD,GAAKC,EAAIhpD,KAAK6Q,KAAKm4C,EAAIA,EAAI,EAAID,EAAIE,KAAO,EAAIF,GAAKE,EAAID,SAC1D,CACLjpD,EAAGwyC,EAAKka,EAAKE,EAAK7tD,EAClB4R,EAAG8hC,EAAKka,EAAKE,EAAK9tD,EAClBA,EAAGA,GEhHP,SAASuzG,GAAMj2G,EAAGkD,EAAGpD,OACC6D,EAAG+xG,EACHphG,EAAGshG,EADnBzkG,EAAKnR,EAAE2D,EAAIT,EAAES,EACb0N,EAAKrR,EAAEsU,EAAIpR,EAAEoR,EACbilC,EAAKpoC,EAAKA,EAAKE,EAAKA,EACpBkoC,GACFm8D,EAAKxyG,EAAER,EAAI5C,EAAE4C,EAAGgzG,GAAMA,EACtBE,EAAK51G,EAAE0C,EAAI5C,EAAE4C,EACTgzG,GADYE,GAAMA,IAEpBjyG,GAAK41C,EAAKq8D,EAAKF,IAAO,EAAIn8D,GAC1BjlC,EAAI1Q,KAAK6Q,KAAK7Q,KAAKuC,IAAI,EAAGyvG,EAAKr8D,EAAK51C,EAAIA,IACxC7D,EAAE6D,EAAI3D,EAAE2D,EAAIA,EAAIwN,EAAKmD,EAAIjD,EACzBvR,EAAEwU,EAAItU,EAAEsU,EAAI3Q,EAAI0N,EAAKiD,EAAInD,IAEzBxN,GAAK41C,EAAKm8D,EAAKE,IAAO,EAAIr8D,GAC1BjlC,EAAI1Q,KAAK6Q,KAAK7Q,KAAKuC,IAAI,EAAGuvG,EAAKn8D,EAAK51C,EAAIA,IACxC7D,EAAE6D,EAAIT,EAAES,EAAIA,EAAIwN,EAAKmD,EAAIjD,EACzBvR,EAAEwU,EAAIpR,EAAEoR,EAAI3Q,EAAI0N,EAAKiD,EAAInD,KAG3BrR,EAAE6D,EAAIT,EAAES,EAAI7D,EAAE4C,EACd5C,EAAEwU,EAAIpR,EAAEoR,GAIZ,SAAS21D,GAAW/mE,EAAGlD,OACjBs1G,EAAKpyG,EAAER,EAAI1C,EAAE0C,EAAI,KAAMyO,EAAKnR,EAAE2D,EAAIT,EAAES,EAAG0N,EAAKrR,EAAEsU,EAAIpR,EAAEoR,SACjDghG,EAAK,GAAKA,EAAKA,EAAKnkG,EAAKA,EAAKE,EAAKA,EAG5C,SAAS6kG,GAAMh1B,OACTh+E,EAAIg+E,EAAK1gF,EACTR,EAAIkhF,EAAKj4E,KAAKzI,EACdw1G,EAAK9yG,EAAER,EAAI1C,EAAE0C,EACbyO,GAAMjO,EAAES,EAAI3D,EAAE0C,EAAI1C,EAAE2D,EAAIT,EAAER,GAAKszG,EAC/B3kG,GAAMnO,EAAEoR,EAAItU,EAAE0C,EAAI1C,EAAEsU,EAAIpR,EAAER,GAAKszG,SAC5B7kG,EAAKA,EAAKE,EAAKA,EAGxB,SAASojG,GAAK9sC,QACPnnE,EAAImnE,OACJ1+D,KAAO,UACPqR,SAAW,KAGX,SAAS67F,GAAYtB,QACpBj1G,GAAKi1G,EDhDE,SAASlxG,SACF,iBAANA,GAAkB,WAAYA,EACxCA,EACA7B,MAAMoU,KAAKvS,GC6CMJ,CAAMsxG,IAAU71G,QAAS,OAAO,MAEjDkE,EAAGlD,EAAGF,EAAGF,EAAGw2G,EAAI9X,EAAIh/F,EAAGO,EAAGmD,EAAGqzG,EAAIC,MAGrCpzG,EAAI2xG,EAAQ,IAAMlxG,EAAI,EAAGT,EAAEoR,EAAI,IACzB1U,EAAI,GAAI,OAAOsD,EAAER,KAGvB1C,EAAI60G,EAAQ,GAAI3xG,EAAES,GAAK3D,EAAE0C,EAAG1C,EAAE2D,EAAIT,EAAER,EAAG1C,EAAEsU,EAAI,IACvC1U,EAAI,GAAI,OAAOsD,EAAER,EAAI1C,EAAE0C,EAG7BuzG,GAAMj2G,EAAGkD,EAAGpD,EAAI+0G,EAAQ,IAGxB3xG,EAAI,IAAIuxG,GAAKvxG,GAAIlD,EAAI,IAAIy0G,GAAKz0G,GAAIF,EAAI,IAAI20G,GAAK30G,GAC/CoD,EAAE+F,KAAOnJ,EAAEwa,SAAWta,EACtBA,EAAEiJ,KAAO/F,EAAEoX,SAAWxa,EACtBA,EAAEmJ,KAAOjJ,EAAEsa,SAAWpX,EAGtBqzG,EAAM,IAAKj3G,EAAI,EAAGA,EAAIM,IAAKN,EAAG,CAC5B22G,GAAM/yG,EAAE1C,EAAGR,EAAEQ,EAAGV,EAAI+0G,EAAQv1G,IAAKQ,EAAI,IAAI20G,GAAK30G,GAK9CD,EAAIG,EAAEiJ,KAAMjG,EAAIE,EAAEoX,SAAU+7F,EAAKr2G,EAAEQ,EAAEkC,EAAG4zG,EAAKpzG,EAAE1C,EAAEkC,QAE3C2zG,GAAMC,EAAI,IACRrsC,GAAWpqE,EAAEW,EAAGV,EAAEU,GAAI,CACxBR,EAAIH,EAAGqD,EAAE+F,KAAOjJ,EAAGA,EAAEsa,SAAWpX,IAAK5D,WAC5Bi3G,EAEXF,GAAMx2G,EAAEW,EAAEkC,EAAG7C,EAAIA,EAAEoJ,SACd,IACDghE,GAAWjnE,EAAExC,EAAGV,EAAEU,GAAI,EACxB0C,EAAIF,GAAKiG,KAAOjJ,EAAGA,EAAEsa,SAAWpX,IAAK5D,WAC5Bi3G,EAEXD,GAAMtzG,EAAExC,EAAEkC,EAAGM,EAAIA,EAAEsX,gBAEdza,IAAMmD,EAAEiG,UAGjBnJ,EAAEwa,SAAWpX,EAAGpD,EAAEmJ,KAAOjJ,EAAGkD,EAAE+F,KAAOjJ,EAAEsa,SAAWta,EAAIF,EAGtDs2G,EAAKF,GAAMhzG,IACHpD,EAAIA,EAAEmJ,QAAUjJ,IACjBs+F,EAAK4X,GAAMp2G,IAAMs2G,IACpBlzG,EAAIpD,EAAGs2G,EAAK9X,GAGhBt+F,EAAIkD,EAAE+F,SAIR/F,EAAI,CAAClD,EAAEQ,GAAIV,EAAIE,GAAWF,EAAIA,EAAEmJ,QAAUjJ,GAAGkD,EAAEhD,KAAKJ,EAAEU,OAAIV,EAAI02G,GAAQtzG,GAGjE5D,EAAI,EAAGA,EAAIM,IAAKN,GAAG4D,EAAI2xG,EAAQv1G,IAAMqE,GAAK7D,EAAE6D,EAAGT,EAAEoR,GAAKxU,EAAEwU,SAEtDxU,EAAE4C,EChHJ,SAAS+zG,GAAS3vG,UACX,MAALA,EAAY,KAAO4vG,GAAS5vG,GAG9B,SAAS4vG,GAAS5vG,MACN,mBAANA,EAAkB,MAAM,IAAIrH,aAChCqH,ECNF,SAAS6vG,YACP,EAGM,YAAShzG,UACf,kBACEA,GCFX,SAASizG,GAAcjjG,UACd/P,KAAK6Q,KAAKd,EAAE7Q,OAuCrB,SAAS+zG,GAAW3hC,UACX,SAASgM,GACTA,EAAKK,WACRL,EAAKx+E,EAAIkB,KAAKuC,IAAI,GAAI+uE,EAAOgM,IAAS,KAK5C,SAAS41B,GAAal9F,EAAS5W,UACtB,SAASk+E,MACVK,EAAWL,EAAKK,SAAU,KACxBA,EACAjiF,EAGAoI,EAFA9H,EAAI2hF,EAASviF,OACb0D,EAAIkX,EAAQsnE,GAAQl+E,GAAK,KAGzBN,EAAG,IAAKpD,EAAI,EAAGA,EAAIM,IAAKN,EAAGiiF,EAASjiF,GAAGoD,GAAKA,KAChDgF,EAAIyuG,GAAY50B,GACZ7+E,EAAG,IAAKpD,EAAI,EAAGA,EAAIM,IAAKN,EAAGiiF,EAASjiF,GAAGoD,GAAKA,EAChDw+E,EAAKx+E,EAAIgF,EAAIhF,IAKnB,SAASq0G,GAAe/zG,UACf,SAASk+E,OACVv3E,EAASu3E,EAAKv3E,OAClBu3E,EAAKx+E,GAAKM,EACN2G,IACFu3E,EAAKv9E,EAAIgG,EAAOhG,EAAIX,EAAIk+E,EAAKv9E,EAC7Bu9E,EAAK5sE,EAAI3K,EAAO2K,EAAItR,EAAIk+E,EAAK5sE,IC3EpB,YAAS4sE,GACtBA,EAAKnwE,GAAKnN,KAAKsR,MAAMgsE,EAAKnwE,IAC1BmwE,EAAKlwE,GAAKpN,KAAKsR,MAAMgsE,EAAKlwE,IAC1BkwE,EAAK/qC,GAAKvyC,KAAKsR,MAAMgsE,EAAK/qC,IAC1B+qC,EAAK9qC,GAAKxyC,KAAKsR,MAAMgsE,EAAK9qC,ICJb,YAASzsC,EAAQoH,EAAIC,EAAImlC,EAAIC,WAEtC8qC,EADA5nD,EAAQ3vB,EAAO43E,SAEfjiF,GAAK,EACLM,EAAI05B,EAAMt6B,OACVgE,EAAI2G,EAAO7G,QAAUqzC,EAAKplC,GAAMpH,EAAO7G,QAElCxD,EAAIM,IACXshF,EAAO5nD,EAAMh6B,IAAS0R,GAAKA,EAAIkwE,EAAK9qC,GAAKA,EACzC8qC,EAAKnwE,GAAKA,EAAImwE,EAAK/qC,GAAKplC,GAAMmwE,EAAKp+E,MAAQE,KRiE1CiF,UAAYosG,GAAUpsG,UAAY,CACrC6D,YAAa2oG,GACb5/F,MDnEa,kBACNpT,KAAKu1G,UAAUniG,KCmEtBoiG,KS7Ea,SAAStlF,EAAUgqB,OAC5BhmC,GAAS,MACR,MAAMurE,KAAQz/E,KACjBkwB,EAASvwB,KAAKu6C,EAAMulC,IAAQvrE,EAAOlU,aAE9BA,MTyEPu1G,UU9Ea,SAASrlF,EAAUgqB,WACY4lC,EAAUjiF,EAAGM,EAArDshF,EAAOz/E,KAAM63B,EAAQ,CAAC4nD,GAAOj4E,EAAO,GAAoB0M,GAAS,EAC9DurE,EAAO5nD,EAAM7nB,UAClBxI,EAAK/I,KAAKghF,GACNK,EAAWL,EAAKK,aACbjiF,EAAI,EAAGM,EAAI2hF,EAASviF,OAAQM,EAAIM,IAAKN,EACxCg6B,EAAMp5B,KAAKqhF,EAASjiF,SAInB4hF,EAAOj4E,EAAKwI,OACjBkgB,EAASvwB,KAAKu6C,EAAMulC,IAAQvrE,EAAOlU,aAE9BA,MVkEPizG,WW/Ea,SAAS/iF,EAAUgqB,WACC4lC,EAAUjiF,EAAvC4hF,EAAOz/E,KAAM63B,EAAQ,CAAC4nD,GAAoBvrE,GAAS,EAChDurE,EAAO5nD,EAAM7nB,UAClBkgB,EAASvwB,KAAKu6C,EAAMulC,IAAQvrE,EAAOlU,MAC/B8/E,EAAWL,EAAKK,aACbjiF,EAAIiiF,EAASviF,OAAS,EAAGM,GAAK,IAAKA,EACtCg6B,EAAMp5B,KAAKqhF,EAASjiF,WAInBmC,MXsEP6yC,KYhFa,SAAS3iB,EAAUgqB,OAC5BhmC,GAAS,MACR,MAAMurE,KAAQz/E,QACbkwB,EAASvwB,KAAKu6C,EAAMulC,IAAQvrE,EAAOlU,aAC9By/E,GZ6EXzqE,IajFa,SAAS3T,UACfrB,KAAKu1G,WAAU,SAAS91B,WACzBzqE,GAAO3T,EAAMo+E,EAAKjzD,OAAS,EAC3BszD,EAAWL,EAAKK,SAChBjiF,EAAIiiF,GAAYA,EAASviF,SACpBM,GAAK,GAAGmX,GAAO8qE,EAASjiF,GAAGwD,MACpCo+E,EAAKp+E,MAAQ2T,Mb4Ef2H,KclFa,SAAS5X,UACf/E,KAAKizG,YAAW,SAASxzB,GAC1BA,EAAKK,UACPL,EAAKK,SAASnjE,KAAK5X,OdgFvBzH,KenFa,SAASuT,WAClBD,EAAQ5Q,KACRy1G,EAcN,SAA6Bh0G,EAAGlD,MAC1BkD,IAAMlD,EAAG,OAAOkD,MAChBi0G,EAASj0G,EAAEk0G,YACXC,EAASr3G,EAAEo3G,YACXt3G,EAAI,KACRoD,EAAIi0G,EAAO1lG,MACXzR,EAAIq3G,EAAO5lG,WACJvO,IAAMlD,GACXF,EAAIoD,EACJA,EAAIi0G,EAAO1lG,MACXzR,EAAIq3G,EAAO5lG,aAEN3R,EA1BQw3G,CAAoBjlG,EAAOC,GACtCgnB,EAAQ,CAACjnB,GACNA,IAAU6kG,GACf7kG,EAAQA,EAAM1I,OACd2vB,EAAMp5B,KAAKmS,WAETrP,EAAIs2B,EAAMt6B,OACPsT,IAAQ4kG,GACb59E,EAAM9H,OAAOxuB,EAAG,EAAGsP,GACnBA,EAAMA,EAAI3I,cAEL2vB,GfuEP89E,UgBpFa,mBACTl2B,EAAOz/E,KAAM63B,EAAQ,CAAC4nD,GACnBA,EAAOA,EAAKv3E,QACjB2vB,EAAMp5B,KAAKghF,UAEN5nD,GhBgFPi+E,YiBrFa,kBACNz1G,MAAMoU,KAAKzU,OjBqFlB+1G,OkBtFa,eACTA,EAAS,eACR9C,YAAW,SAASxzB,GAClBA,EAAKK,UACRi2B,EAAOt3G,KAAKghF,MAGTs2B,GlBgFP5E,MmBvFa,eACTlnE,EAAOjqC,KAAMmxG,EAAQ,UACzBlnE,EAAKurE,MAAK,SAAS/1B,GACbA,IAASx1C,GACXknE,EAAM1yG,KAAK,CAACqC,OAAQ2+E,EAAKv3E,OAAQ8Y,OAAQy+D,OAGtC0xB,GnBiFP9iF,KA5CF,kBACSukF,GAAU5yG,MAAMizG,WAAWE,MA4CjClqG,OAAOC,UoBzFK,gBACI+3D,EAAwB6e,EAAUjiF,EAAGM,EAAlDshF,EAAOz/E,KAAewH,EAAO,CAACi4E,UAEhCxe,EAAUz5D,EAAKyI,UAAWzI,EAAO,GAC1Bi4E,EAAOxe,EAAQjxD,gBACdyvE,EACFK,EAAWL,EAAKK,aACbjiF,EAAI,EAAGM,EAAI2hF,EAASviF,OAAQM,EAAIM,IAAKN,EACxC2J,EAAK/I,KAAKqhF,EAASjiF,UAIlB2J,EAAKjK,UCThB,IAAIy4G,GAAU,CAAClW,OAAQ,GACnBmW,GAAY,GAEhB,SAASC,GAAUhkG,UACVA,EAAErT,GAGX,SAASs3G,GAAgBjkG,UAChBA,EAAEkkG,SAGI,kBACTv3G,EAAKq3G,GACLE,EAAWD,YAENE,EAAS7pF,OAGZta,EACArU,EACAosC,EACA/hC,EACAu3E,EACAitB,EACA4J,EARAz+E,EAAQx3B,MAAMoU,KAAK+X,GACnBruB,EAAI05B,EAAMt6B,OAQVg5G,EAAY,IAAIvuF,QAEfnqB,EAAI,EAAGA,EAAIM,IAAKN,EACnBqU,EAAI2lB,EAAMh6B,GAAI4hF,EAAO5nD,EAAMh6B,GAAK,IAAIm1G,GAAK9gG,GACR,OAA5Bw6F,EAAS7tG,EAAGqT,EAAGrU,EAAG2uB,MAAmBkgF,GAAU,MAClD4J,EAAU72B,EAAK5gF,GAAK6tG,EACpB6J,EAAUnvG,IAAIkvG,EAASC,EAAU7vG,IAAI4vG,GAAWL,GAAYx2B,IAEvB,OAAlCitB,EAAS0J,EAASlkG,EAAGrU,EAAG2uB,MAAmBkgF,GAAU,MACxDjtB,EAAKv3E,OAASwkG,OAIb7uG,EAAI,EAAGA,EAAIM,IAAKN,KAEf6uG,GADJjtB,EAAO5nD,EAAMh6B,IACKqK,OAAQ,MACxBA,EAASquG,EAAU33G,IAAI8tG,IACV,MAAM,IAAI1uG,MAAM,YAAc0uG,MACvCxkG,IAAW+tG,GAAW,MAAM,IAAIj4G,MAAM,cAAgB0uG,GACtDxkG,EAAO43E,SAAU53E,EAAO43E,SAASrhF,KAAKghF,GACrCv3E,EAAO43E,SAAW,CAACL,GACxBA,EAAKv3E,OAASA,MACT,IACD+hC,EAAM,MAAM,IAAIjsC,MAAM,kBAC1BisC,EAAOw1C,MAINx1C,EAAM,MAAM,IAAIjsC,MAAM,cAC3BisC,EAAK/hC,OAAS8tG,GACd/rE,EAAKgpE,YAAW,SAASxzB,GAAQA,EAAKqgB,MAAQrgB,EAAKv3E,OAAO43F,MAAQ,IAAK3hG,KAAM80G,WAAWC,IACxFjpE,EAAK/hC,OAAS,KACV/J,EAAI,EAAG,MAAM,IAAIH,MAAM,gBAEpBisC,SAGTosE,EAASx3G,GAAK,SAASqD,UACdnC,UAAUxC,QAAUsB,EAAKo2G,GAAS/yG,GAAIm0G,GAAYx3G,GAG3Dw3G,EAASD,SAAW,SAASl0G,UACpBnC,UAAUxC,QAAU64G,EAAWnB,GAAS/yG,GAAIm0G,GAAYD,GAG1DC,ECvET,SAAS5D,GAAkBhxG,EAAGlD,UACrBkD,EAAEyG,SAAW3J,EAAE2J,OAAS,EAAI,EAWrC,SAASsuG,GAAS/wG,OACZq6E,EAAWr6E,EAAEq6E,gBACVA,EAAWA,EAAS,GAAKr6E,EAAEqC,EAIpC,SAAS2uG,GAAUhxG,OACbq6E,EAAWr6E,EAAEq6E,gBACVA,EAAWA,EAASA,EAASviF,OAAS,GAAKkI,EAAEqC,EAKtD,SAAS4uG,GAAYC,EAAIC,EAAIz9E,OACvBg5E,EAASh5E,GAASy9E,EAAG/4G,EAAI84G,EAAG94G,GAChC+4G,EAAGv4G,GAAK8zG,EACRyE,EAAGp4G,GAAK26B,EACRw9E,EAAGt4G,GAAK8zG,EACRyE,EAAGviG,GAAK8kB,EACRy9E,EAAGxiG,GAAK+kB,EAsBV,SAAS09E,GAAaC,EAAKrxG,EAAGgwG,UACrBqB,EAAIr1G,EAAEyG,SAAWzC,EAAEyC,OAAS4uG,EAAIr1G,EAAIg0G,EAG7C,SAASsB,GAASt3B,EAAM5hF,QACjBkB,EAAI0gF,OACJv3E,OAAS,UACT43E,SAAW,UACX50B,EAAI,UACJzpD,EAAIzB,UACJqU,EAAI,OACJD,EAAI,OACJ/V,EAAI,OACJG,EAAI,OACJsJ,EAAI,UACJjK,EAAIA,ECtEI,YAASqK,EAAQoH,EAAIC,EAAImlC,EAAIC,WAEtC8qC,EADA5nD,EAAQ3vB,EAAO43E,SAEfjiF,GAAK,EACLM,EAAI05B,EAAMt6B,OACVgE,EAAI2G,EAAO7G,QAAUszC,EAAKplC,GAAMrH,EAAO7G,QAElCxD,EAAIM,IACXshF,EAAO5nD,EAAMh6B,IAASyR,GAAKA,EAAImwE,EAAK/qC,GAAKA,EACzC+qC,EAAKlwE,GAAKA,EAAIkwE,EAAK9qC,GAAKplC,GAAMkwE,EAAKp+E,MAAQE,EDgE/Cw1G,GAASvwG,UAAYjG,OAAO8H,OAAO2qG,GAAKxsG,WEtEjC,IAAIkuF,IAAO,EAAIvyF,KAAK6Q,KAAK,IAAM,EAE/B,SAASgkG,GAAcv6B,EAAOv0E,EAAQoH,EAAIC,EAAImlC,EAAIC,WAGnDroC,EACA0zE,EAIAtwE,EAAIE,EAEJqnG,EACAC,EACAC,EACAC,EACAC,EACA/6E,EACAie,EAfAnuC,EAAO,GACPyrB,EAAQ3vB,EAAO43E,SAGfx1E,EAAK,EACLC,EAAK,EACLpM,EAAI05B,EAAMt6B,OAEV8D,EAAQ6G,EAAO7G,MASZiJ,EAAKnM,GAAG,CACbuR,EAAKglC,EAAKplC,EAAIM,EAAK+kC,EAAKplC,KAGrB0nG,EAAWp/E,EAAMttB,KAAMlJ,aAAe41G,GAAY1sG,EAAKpM,OAC1D+4G,EAAWC,EAAWF,EAEtB18D,EAAO08D,EAAWA,GADlB36E,EAAQn6B,KAAKuC,IAAIkL,EAAKF,EAAIA,EAAKE,IAAOvO,EAAQo7E,IAE9C46B,EAAWl1G,KAAKuC,IAAIyyG,EAAW58D,EAAMA,EAAO28D,GAGrC3sG,EAAKpM,IAAKoM,EAAI,IACnB0sG,GAAYj3B,EAAYnoD,EAAMttB,GAAIlJ,MAC9B2+E,EAAYk3B,IAAUA,EAAWl3B,GACjCA,EAAYm3B,IAAUA,EAAWn3B,GACrCzlC,EAAO08D,EAAWA,EAAW36E,GAC7B86E,EAAWj1G,KAAKuC,IAAIyyG,EAAW58D,EAAMA,EAAO28D,IAC7BG,EAAU,CAAEJ,GAAYj3B,QACvCq3B,EAAWD,EAIbhrG,EAAK3N,KAAK6N,EAAM,CAACjL,MAAO41G,EAAUK,KAAM5nG,EAAKE,EAAIkwE,SAAUjoD,EAAMn4B,MAAM4K,EAAIC,KACvE+B,EAAIgrG,KAAMC,GAAYjrG,EAAKgD,EAAIC,EAAImlC,EAAIrzC,EAAQkO,GAAMK,EAAKqnG,EAAW51G,EAAQszC,GAC5E6iE,GAAalrG,EAAKgD,EAAIC,EAAIlO,EAAQiO,GAAMI,EAAKunG,EAAW51G,EAAQqzC,EAAIC,GACzEtzC,GAAS41G,EAAU3sG,EAAKC,SAGnB6B,SAGM,SAAU8uC,EAAOuhC,YAErBg7B,EAASvvG,EAAQoH,EAAIC,EAAImlC,EAAIC,GACpCqiE,GAAcv6B,EAAOv0E,EAAQoH,EAAIC,EAAImlC,EAAIC,UAG3C8iE,EAASh7B,MAAQ,SAASv6E,UACjBg5C,GAAQh5C,GAAKA,GAAK,EAAIA,EAAI,IAG5Bu1G,EAVM,CAWZ/iB,WC7DY,SAAUx5C,EAAOuhC,YAErBi7B,EAAWxvG,EAAQoH,EAAIC,EAAImlC,EAAIC,OACjCvoC,EAAOlE,EAAOyvG,YAAevrG,EAAKqwE,QAAUA,UAC3CrwE,EACAE,EACAurB,EACAh6B,EAEAM,EADAC,GAAK,EAELgW,EAAIhI,EAAK7O,OACT8D,EAAQ6G,EAAO7G,QAEVjD,EAAIgW,GAAG,KACCyjB,GAAfvrB,EAAMF,EAAKhO,IAAgB0hF,SACtBjiF,EAAIyO,EAAIjL,MAAQ,EAAGlD,EAAI05B,EAAMt6B,OAAQM,EAAIM,IAAKN,EAAGyO,EAAIjL,OAASw2B,EAAMh6B,GAAGwD,MACxEiL,EAAIgrG,KAAMC,GAAYjrG,EAAKgD,EAAIC,EAAImlC,EAAIrzC,EAAQkO,IAAOolC,EAAKplC,GAAMjD,EAAIjL,MAAQA,EAAQszC,GACpF6iE,GAAalrG,EAAKgD,EAAIC,EAAIlO,EAAQiO,IAAOolC,EAAKplC,GAAMhD,EAAIjL,MAAQA,EAAQqzC,EAAIC,GACjFtzC,GAASiL,EAAIjL,WAGf6G,EAAOyvG,UAAYvrG,EAAO4qG,GAAcv6B,EAAOv0E,EAAQoH,EAAIC,EAAImlC,EAAIC,GACnEvoC,EAAKqwE,MAAQA,SAIjBi7B,EAAWj7B,MAAQ,SAASv6E,UACnBg5C,GAAQh5C,GAAKA,GAAK,EAAIA,EAAI,IAG5Bw1G,EA9BM,CA+BZhjB,IC9BH,SAASr2B,GAAQstC,EAAMlrG,EAAKkL,SACpBjK,EAAM,UACZiqG,EAAK6J,MAAK/1B,UACF33E,EAAI23E,EAAKjzD,KACX7gB,EAAO7D,KAAIpG,EAAIjB,EAAIqH,IAAM23E,MAE/BksB,EAAKttC,OAAS38D,EACPiqG,EAcT,SAASiM,GAAKvlF,GACZ4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAE7BulF,GAAKx8E,WAAa,MACR,gBACI,aACI,WACH,UAEH,CAAC,MACD,YACA,eACC,GACR,MACO,gBACA,aAIZ,MAAM0kD,GAAW3hF,GAAKA,EAAE6V,OAmDxB,SAAS6jG,WACDvyG,EAAO,GACPuyG,EAAO,CACXxrB,QAASvqF,GAASuqF,EAAQxsF,EAAMiC,EAAO,GAAI,GAC3CrB,IAAKyR,IAAM5M,EAAK7G,KAAKyT,GAAI2lG,aAGlBh4G,EAAMiC,EAAOg+F,MAChBA,GAASx6F,EAAK/H,cACTuE,QAGH3D,EAAI2D,EAAMvE,OACVkD,EAAM6E,EAAKw6F,KACXgY,EAAc,GACd3sF,EAAS,OAEX4sF,EACA12G,EACA2S,EAHAnW,GAAK,SAKAA,EAAIM,GACX45G,EAAWt3G,EAAIY,EAAQS,EAAMjE,IAAM,IAE/BmW,EAAS8jG,EAAYC,IACvB/jG,EAAOvV,KAAK4C,GAEZy2G,EAAYC,GAAY,CAAC12G,OAIxB02G,KAAYD,EACf3sF,EAAO4sF,GAAYl4G,EAAMi4G,EAAYC,GAAWjY,UAG3C30E,WAGAkhE,EAAQ3qF,EAAKo+F,QACdA,EAAQx6F,EAAK/H,OAAQ,OAAOmE,QAC5BI,EAAQ,OAET,MAAMrB,KAAOiB,EAChBI,EAAMrD,KAAK,CACTgC,IAAAA,EACAuT,OAAQq4E,EAAQ3qF,EAAIjB,GAAMq/F,YAIvBh+F,SAGF+1G,EAST,SAASG,GAAgB3lF,GACvB4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GA/G7BrqB,GAAS4vG,GAAM3+E,GAAW,CACxB5pB,UAAUtQ,EAAG0yB,GACNA,EAAM3wB,QACThD,EAAM,wDAGJqH,EAAMpG,EAAEopC,SACRlX,EAAMlyB,EAAEizB,WACRnxB,EAAM4wB,EAAMuF,QACZ20E,EAAO3rG,KAAKqB,cAEXsqG,GAAQ16E,GAAOQ,EAAMyE,aAEpBy1E,GACFA,EAAK6J,MAAK/1B,IACJA,EAAKK,UAAYxvD,GAAQmvD,EAAKjzD,OAChC3rB,EAAImwB,IAAIvyB,KAAKghF,EAAKjzD,cAMnBnrB,MAAQsqG,EAAOiH,GAAU,CAC5B5+F,OAAQlS,EAAM/C,EAAEuG,MAAM1E,QAAO,CAACzC,EAAGoD,KAC/BpD,EAAEsC,IAAIc,GACCpD,IACN05G,MAAQxrB,QAAQxrF,EAAIC,SACtBg/E,IAEC36E,GACFwmG,EAAK6J,MAAK/1B,IACJA,EAAKK,WACPL,EAAOhmD,GAAOgmD,EAAKjzD,MACnB3rB,EAAIc,IAAIlD,KAAKghF,GACb5+E,EAAIC,OAAOrC,KAAKghF,OAMtBphB,GAAOstC,EAAMp7E,GAASA,KAGxB1vB,EAAIC,OAAOmpC,KAAO0hE,EACX9qG,KAsEX,MAAM4xG,GAAoB,CAAChxG,EAAGlD,IAAMkD,EAAEyG,SAAW3J,EAAE2J,OAAS,EAAI,EAEhEF,GAASgwG,GAAiB/+E,GAAW,CACnC5pB,UAAUtQ,EAAG0yB,GACNA,EAAM3wB,QAAW2wB,EAAM3wB,OAAOmpC,MACjCnsC,EAAMkC,KAAKqK,YAAYpN,KAAO,yDAG1BiE,EAASlB,KAAKkB,OAAOnC,EAAEM,QACvBrC,EAASgD,KAAKhD,OACditC,EAAOxY,EAAM3wB,OAAOmpC,KACpBtG,EAAK5kC,EAAE4kC,IAAM3mC,EACf+B,EAAErB,MAAOusC,EAAKj1B,IAAIjW,EAAErB,OAAYusC,EAAK72B,QACrCrU,EAAE4d,MAAMstB,EAAKttB,KAAKiU,GAAc7xB,EAAE4d,MAAMzK,GAAKA,EAAEsa,QAmBvD,SAAmBtrB,EAAQmxB,EAAQtzB,OAC5B,IAAIb,EAAGL,EAAI,EAAGM,EAAIk0B,EAAO90B,OAAQM,EAAIM,IAAKN,EAC7CK,EAAIm0B,EAAOx0B,GACPK,KAAKa,GAAGmC,EAAOhD,GAAGa,EAAEb,IArBxB+5G,CAAU/2G,EAAQlB,KAAKqyB,OAAQtzB,GAE3BmC,EAAOymF,YACTzmF,EAAOymF,YAA4B,IAAjB5oF,EAAE4oF,WAAuB8qB,GAAoBxzG,YAI1DoC,MAAQH,EAAO+oC,GACpB,MAAO9Z,GACPryB,EAAMqyB,UAGR8Z,EAAKurE,MAAK/1B,GAad,SAAmBA,EAAMziF,EAAQ2mC,SACzB77B,EAAI23E,EAAKjzD,KACTruB,EAAInB,EAAOO,OAAS,MAErB,IAAIM,EAAI,EAAGA,EAAIM,IAAKN,EACvBiK,EAAE67B,EAAG9lC,IAAM4hF,EAAKziF,EAAOa,IAGzBiK,EAAE67B,EAAGxlC,IAAMshF,EAAKK,SAAWL,EAAKK,SAASviF,OAAS,EArB9B26G,CAAUz4B,EAAMziF,EAAQ2mC,KACnClS,EAAML,OAAOryB,EAAEizB,YAAYJ,SAAS+R,GAAI/R,SAAS,WAuB5D,MAAMumF,GAAW,CAAC,IAAK,IAAK,IAAK,QAAS,YAQ1C,SAASC,GAAK/lF,GACZ2lF,GAAgBr4G,KAAKK,KAAMqyB,GAE7B+lF,GAAKh9E,WAAa,MACR,gBACI,OACF,YACI,UAEJ,CAAC,MACD,aACA,SACP,MACO,YACA,WACP,MACO,eACA,iBACG,GACV,MACO,cACA,gBACG,MACV,MACO,YACA,gBACC,SACC,GACT,MACO,UACA,gBACC,SACC+8E,GAAS56G,eACR46G,MAGfnwG,GAASowG,GAAMJ,GAAiB,CAC9B92G,OpBxPa,eACTuyE,EAAS,KACT/jE,EAAK,EACLE,EAAK,EACLuI,EAAU+8F,YAELJ,EAAK7qE,UACZA,EAAK/nC,EAAIwN,EAAK,EAAGu6B,EAAKp3B,EAAIjD,EAAK,EAC3B6jE,EACFxpC,EAAKgpE,WAAWmC,GAAW3hC,IACtB8hC,UAAUF,GAAal9F,EAAS,KAChC86F,WAAWqC,GAAe,IAE/BrrE,EAAKgpE,WAAWmC,GAAWD,KACtBI,UAAUF,GAAaH,GAAc,IACrCK,UAAUF,GAAal9F,EAAS8xB,EAAKhpC,EAAIkB,KAAKsC,IAAIiL,EAAIE,KACtDqjG,WAAWqC,GAAenzG,KAAKsC,IAAIiL,EAAIE,IAAO,EAAIq6B,EAAKhpC,KAEvDgpC,SAGT6qE,EAAKrhC,OAAS,SAASvxE,UACdnC,UAAUxC,QAAUk2E,EAASuhC,GAAS9yG,GAAI4yG,GAAQrhC,GAG3DqhC,EAAK7tG,KAAO,SAAS/E,UACZnC,UAAUxC,QAAUmS,GAAMxN,EAAE,GAAI0N,GAAM1N,EAAE,GAAI4yG,GAAQ,CAACplG,EAAIE,IAGlEklG,EAAK38F,QAAU,SAASjW,UACfnC,UAAUxC,QAAU4a,EAAuB,mBAANjW,EAAmBA,EAAIsB,IAAUtB,GAAI4yG,GAAQ38F,GAGpF28F,GoBwNPziF,OAAQ,CAAC,SAAU,OAAQ,WAC3Br1B,OAAQm7G,KAGV,MAAME,GAAW,CAAC,KAAM,KAAM,KAAM,KAAM,QAAS,YAQnD,SAASC,GAAUjmF,GACjB2lF,GAAgBr4G,KAAKK,KAAMqyB,GAkD7B,SAASkmF,GAASlmF,GAChB4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAjD7BimF,GAAUl9E,WAAa,MACb,qBACI,OACF,YACI,UAEJ,CAAC,MACD,aACA,SACP,MACO,YACA,WACP,MACO,eACA,iBACG,GACV,MACO,aACA,mBACG,GACV,MACO,YACA,gBACC,SACC,GACT,MACO,UACA,gBACC,SACCi9E,GAAS96G,eACR86G,MAGfrwG,GAASswG,GAAWN,GAAiB,CACnC92G,OC/Sa,eACTwO,EAAK,EACLE,EAAK,EACLuI,EAAU,EACV1E,GAAQ,WAEHq8B,EAAU7F,OACb9rC,EAAI8rC,EAAKyT,OAAS,SACtBzT,EAAK36B,GACL26B,EAAK16B,GAAK4I,EACV8xB,EAAKyK,GAAKhlC,EACVu6B,EAAK0K,GAAK/kC,EAAKzR,EACf8rC,EAAKgpE,oBAKerjG,EAAIzR,UACjB,SAASshF,GACVA,EAAKK,UACPy3B,GAAY93B,EAAMA,EAAKnwE,GAAIM,GAAM6vE,EAAKqgB,MAAQ,GAAK3hG,EAAGshF,EAAK/qC,GAAI9kC,GAAM6vE,EAAKqgB,MAAQ,GAAK3hG,OAErFmR,EAAKmwE,EAAKnwE,GACVC,EAAKkwE,EAAKlwE,GACVmlC,EAAK+qC,EAAK/qC,GAAKv8B,EACfw8B,EAAK8qC,EAAK9qC,GAAKx8B,EACfu8B,EAAKplC,IAAIA,EAAKolC,GAAMplC,EAAKolC,GAAM,GAC/BC,EAAKplC,IAAIA,EAAKolC,GAAMplC,EAAKolC,GAAM,GACnC8qC,EAAKnwE,GAAKA,EACVmwE,EAAKlwE,GAAKA,EACVkwE,EAAK/qC,GAAKA,EACV+qC,EAAK9qC,GAAKA,GAnBI6jE,CAAa5oG,EAAIzR,IAC7BsV,GAAOw2B,EAAKgpE,WAAWwF,IACpBxuE,SAqBT6F,EAAUr8B,MAAQ,SAASvR,UAClBnC,UAAUxC,QAAUkW,IAAUvR,EAAG4tC,GAAar8B,GAGvDq8B,EAAU7oC,KAAO,SAAS/E,UACjBnC,UAAUxC,QAAUmS,GAAMxN,EAAE,GAAI0N,GAAM1N,EAAE,GAAI4tC,GAAa,CAACpgC,EAAIE,IAGvEkgC,EAAU33B,QAAU,SAASjW,UACpBnC,UAAUxC,QAAU4a,GAAWjW,EAAG4tC,GAAa33B,GAGjD23B,GDiQPzd,OAAQ,CAAC,OAAQ,QAAS,WAC1Br1B,OAAQq7G,KAeVE,GAASn9E,WAAa,MACZ,oBACI,aACI,UAEN,CAAC,MACD,WACA,kBACI,GACX,MACO,iBACA,kBACI,KAGhBpzB,GAASuwG,GAAUt/E,GAAW,CAC5B5pB,UAAUtQ,EAAG0yB,GACNA,EAAM3wB,QACThD,EAAM,4DAGJ6tG,EAAO3rG,KAAKqB,YAEV4vB,EAAMlyB,EAAEizB,WACRnxB,EAAM4wB,EAAMsF,KAAKtF,EAAMiF,KAAKd,YAAYnE,EAAMmF,QAC9C7C,GAAO43E,GAAQ16E,GAAOQ,EAAMyE,QAAQzE,EAAM+E,UAAY/E,EAAMO,SAASjzB,EAAE0B,IAAIzD,SAAWy0B,EAAMO,SAASjzB,EAAE25G,UAAU17G,eAGvH6D,EAAIC,OAASD,EAAIC,OAAOpB,QAEpBq0B,IACF43E,EAAO9qG,EAAIC,OAAOvD,OAAS8gE,GAAOg4C,KAAWx3G,GAAGE,EAAE0B,KAAK21G,SAASr3G,EAAE25G,UAAhCrC,CAA2Cx1G,EAAIC,QAAS/B,EAAE0B,IAAKvB,GAAUm/D,GAAOg4C,IAAAA,CAAW,CAAC,KAAMt3G,EAAE0B,IAAK1B,EAAE0B,MAG/II,EAAIC,OAAOmpC,KAAOjqC,KAAKqB,MAAQsqG,EACxB9qG,KAKX,MAAM83G,GAAU,CACdC,KJzQa,eACTjxB,EAAa8qB,GACb/iG,EAAK,EACLE,EAAK,EACLipG,EAAW,cAENlN,EAAK1hE,OACRniC,EA/BR,SAAkBmiC,WAEZw1C,EAEAx3E,EACA63E,EACAjiF,EACAM,EANAwtG,EAAO,IAAIoL,GAAS9sE,EAAM,GAE1BpS,EAAQ,CAAC8zE,GAMNlsB,EAAO5nD,EAAM7nB,UACd8vE,EAAWL,EAAK1gF,EAAE+gF,aACpBL,EAAKK,SAAW,IAAIz/E,MAAMlC,EAAI2hF,EAASviF,QAClCM,EAAIM,EAAI,EAAGN,GAAK,IAAKA,EACxBg6B,EAAMp5B,KAAKwJ,EAAQw3E,EAAKK,SAASjiF,GAAK,IAAIk5G,GAASj3B,EAASjiF,GAAIA,IAChEoK,EAAMC,OAASu3E,SAKpBksB,EAAKzjG,OAAS,IAAI6uG,GAAS,KAAM,IAAIj3B,SAAW,CAAC6rB,GAC3CA,EAWGmN,CAAS7uE,MAGjBniC,EAAEytG,UAAUwD,GAAYjxG,EAAEI,OAAOkM,GAAKtM,EAAEuM,EACxCvM,EAAEmrG,WAAW+F,GAGTH,EAAU5uE,EAAKgpE,WAAWgG,OAIzB,KACCtxG,EAAOsiC,EACPriC,EAAQqiC,EACR4tC,EAAS5tC,EACbA,EAAKgpE,YAAW,SAASxzB,GACnBA,EAAKv9E,EAAIyF,EAAKzF,IAAGyF,EAAO83E,GACxBA,EAAKv9E,EAAI0F,EAAM1F,IAAG0F,EAAQ63E,GAC1BA,EAAKqgB,MAAQjoB,EAAOioB,QAAOjoB,EAAS4H,UAEtCjhF,EAAImJ,IAASC,EAAQ,EAAI+/E,EAAWhgF,EAAMC,GAAS,EACnDokF,EAAKxtF,EAAImJ,EAAKzF,EACdsN,EAAKE,GAAM9H,EAAM1F,EAAI1D,EAAIwtF,GACzBv8E,EAAKG,GAAMioE,EAAOioB,OAAS,GAC/B71D,EAAKgpE,YAAW,SAASxzB,GACvBA,EAAKv9E,GAAKu9E,EAAKv9E,EAAI8pF,GAAMx8E,EACzBiwE,EAAK5sE,EAAI4sE,EAAKqgB,MAAQrwF,YAInBw6B,WAOA8uE,EAAUtzG,OACbq6E,EAAWr6E,EAAEq6E,SACbo5B,EAAWzzG,EAAEyC,OAAO43E,SACpBlhE,EAAInZ,EAAE5H,EAAIq7G,EAASzzG,EAAE5H,EAAI,GAAK,QAC9BiiF,EAAU,EA5GlB,SAAuBr6E,WAKjBmZ,EAJAua,EAAQ,EACRg5E,EAAS,EACTryB,EAAWr6E,EAAEq6E,SACbjiF,EAAIiiF,EAASviF,SAERM,GAAK,IACZ+gB,EAAIkhE,EAASjiF,IACXwW,GAAK8kB,EACPva,EAAExK,GAAK+kB,EACPA,GAASva,EAAEpgB,GAAK2zG,GAAUvzF,EAAEvgB,GAmG1B86G,CAAc1zG,OACV2zG,GAAYt5B,EAAS,GAAGzrE,EAAIyrE,EAASA,EAASviF,OAAS,GAAG8W,GAAK,EAC/DuK,GACFnZ,EAAE4O,EAAIuK,EAAEvK,EAAIszE,EAAWliF,EAAE1G,EAAG6f,EAAE7f,GAC9B0G,EAAE2O,EAAI3O,EAAE4O,EAAI+kG,GAEZ3zG,EAAE4O,EAAI+kG,OAECx6F,IACTnZ,EAAE4O,EAAIuK,EAAEvK,EAAIszE,EAAWliF,EAAE1G,EAAG6f,EAAE7f,IAEhC0G,EAAEyC,OAAOgjD,WAoBQzlD,EAAGmZ,EAAG62F,MACnB72F,EAAG,SASDua,EARAkgF,EAAM5zG,EACN6zG,EAAM7zG,EACNqxG,EAAMl4F,EACN26F,EAAMF,EAAInxG,OAAO43E,SAAS,GAC1B05B,EAAMH,EAAIjlG,EACVqlG,EAAMH,EAAIllG,EACV29F,EAAM+E,EAAI1iG,EACVslG,EAAMH,EAAInlG,EAEP0iG,EAAML,GAAUK,GAAMuC,EAAM7C,GAAS6C,GAAMvC,GAAOuC,GACvDE,EAAM/C,GAAS+C,IACfD,EAAM7C,GAAU6C,IACZ73G,EAAIgE,GACR0zB,EAAQ29E,EAAIziG,EAAI09F,EAAMsH,EAAIhlG,EAAImlG,EAAM7xB,EAAWmvB,EAAI/3G,EAAGs6G,EAAIt6G,IAC9C,IACV23G,GAAYG,GAAaC,EAAKrxG,EAAGgwG,GAAWhwG,EAAG0zB,GAC/CqgF,GAAOrgF,EACPsgF,GAAOtgF,GAET44E,GAAO+E,EAAI1iG,EACXolG,GAAOH,EAAIjlG,EACXslG,GAAOH,EAAInlG,EACXqlG,GAAOH,EAAIllG,EAET0iG,IAAQL,GAAU6C,KACpBA,EAAIxxG,EAAIgvG,EACRwC,EAAIllG,GAAK29F,EAAM0H,GAEbJ,IAAQ7C,GAAS+C,KACnBA,EAAIzxG,EAAIuxG,EACRE,EAAInlG,GAAKolG,EAAME,EACfjE,EAAWhwG,UAGRgwG,EAxDMkE,CAAUl0G,EAAGmZ,EAAGnZ,EAAEyC,OAAOgjD,GAAKguD,EAAS,aAI7CF,EAAWvzG,GAClBA,EAAE1G,EAAEmD,EAAIuD,EAAE4O,EAAI5O,EAAEyC,OAAOkM,EACvB3O,EAAE2O,GAAK3O,EAAEyC,OAAOkM,WAqDT6kG,EAASx5B,GAChBA,EAAKv9E,GAAKwN,EACV+vE,EAAK5sE,EAAI4sE,EAAKqgB,MAAQlwF,SAGxB+7F,EAAKhkB,WAAa,SAASzlF,UAClBnC,UAAUxC,QAAUoqF,EAAazlF,EAAGypG,GAAQhkB,GAGrDgkB,EAAK1kG,KAAO,SAAS/E,UACZnC,UAAUxC,QAAUs7G,GAAW,EAAOnpG,GAAMxN,EAAE,GAAI0N,GAAM1N,EAAE,GAAIypG,GAASkN,EAAW,KAAO,CAACnpG,EAAIE,IAGvG+7F,EAAKkN,SAAW,SAAS32G,UAChBnC,UAAUxC,QAAUs7G,GAAW,EAAMnpG,GAAMxN,EAAE,GAAI0N,GAAM1N,EAAE,GAAIypG,GAASkN,EAAW,CAACnpG,EAAIE,GAAM,MAG9F+7F,GIkIPiO,Q5B7Ua,eACTjyB,EAAa8qB,GACb/iG,EAAK,EACLE,EAAK,EACLipG,GAAW,WAENe,EAAQ3vE,OACX4vE,EACA33G,EAAI,EAGR+nC,EAAKsrE,WAAU,SAAS91B,OAClBK,EAAWL,EAAKK,SAChBA,GACFL,EAAKv9E,EA1Cb,SAAe49E,UACNA,EAASl/E,OAAO8xG,GAAa,GAAK5yB,EAASviF,OAyCnCu8G,CAAMh6B,GACfL,EAAK5sE,EAnCb,SAAcitE,UACL,EAAIA,EAASl/E,OAAO+xG,GAAY,GAkCxBoH,CAAKj6B,KAEdL,EAAKv9E,EAAI23G,EAAe33G,GAAKylF,EAAWlI,EAAMo6B,GAAgB,EAC9Dp6B,EAAK5sE,EAAI,EACTgnG,EAAep6B,UAIf93E,EAnCR,SAAkB83E,WACZK,EACGA,EAAWL,EAAKK,UAAUL,EAAOK,EAAS,UAC1CL,EAgCMu6B,CAAS/vE,GAChBriC,EA9BR,SAAmB63E,WACbK,EACGA,EAAWL,EAAKK,UAAUL,EAAOK,EAASA,EAASviF,OAAS,UAC5DkiF,EA2BOw6B,CAAUhwE,GAClB36B,EAAK3H,EAAKzF,EAAIylF,EAAWhgF,EAAMC,GAAS,EACxC8sC,EAAK9sC,EAAM1F,EAAIylF,EAAW//E,EAAOD,GAAQ,SAGtCsiC,EAAKsrE,UAAUsD,EAAW,SAASp5B,GACxCA,EAAKv9E,GAAKu9E,EAAKv9E,EAAI+nC,EAAK/nC,GAAKwN,EAC7B+vE,EAAK5sE,GAAKo3B,EAAKp3B,EAAI4sE,EAAK5sE,GAAKjD,GAC3B,SAAS6vE,GACXA,EAAKv9E,GAAKu9E,EAAKv9E,EAAIoN,IAAOolC,EAAKplC,GAAMI,EACrC+vE,EAAK5sE,GAAK,GAAKo3B,EAAKp3B,EAAI4sE,EAAK5sE,EAAIo3B,EAAKp3B,EAAI,IAAMjD,WAIpDgqG,EAAQjyB,WAAa,SAASzlF,UACrBnC,UAAUxC,QAAUoqF,EAAazlF,EAAG03G,GAAWjyB,GAGxDiyB,EAAQ3yG,KAAO,SAAS/E,UACfnC,UAAUxC,QAAUs7G,GAAW,EAAOnpG,GAAMxN,EAAE,GAAI0N,GAAM1N,EAAE,GAAI03G,GAAYf,EAAW,KAAO,CAACnpG,EAAIE,IAG1GgqG,EAAQf,SAAW,SAAS32G,UACnBnC,UAAUxC,QAAUs7G,GAAW,EAAMnpG,GAAMxN,EAAE,GAAI0N,GAAM1N,EAAE,GAAI03G,GAAYf,EAAW,CAACnpG,EAAIE,GAAM,MAGjGgqG,I4B6RHM,GAAW,CAAC,IAAK,IAAK,QAAS,YAQrC,SAASC,GAAK9nF,GACZ2lF,GAAgBr4G,KAAKK,KAAMqyB,GA8D7B,SAAS+nF,GAAU/nF,GACjB4G,GAAUt5B,KAAKK,KAAM,GAAIqyB,GA7D3B8nF,GAAK/+E,WAAa,MACR,gBACI,OACF,YACI,UAEJ,CAAC,MACD,aACA,SACP,MACO,YACA,WACP,MACO,cACA,eACG,cACD,CAAC,OAAQ,YAClB,MACO,YACA,gBACC,SACC,GACT,MACO,gBACA,gBACC,SACC,GACT,MACO,kBACA,mBACG,GACV,MACO,UACA,gBACC,SACC8+E,GAAS38G,eACR28G,MAGflyG,GAASmyG,GAAMnC,GAAiB,CAI9B92G,OAAO7B,SACC+U,EAAI/U,GAAU,UAChBoH,GAAekyG,GAASvkG,GAAI,OAAOukG,GAAQvkG,KAAUtW,EAAM,oCAAsCsW,IAGvGie,OAAQ,CAAC,OAAQ,YACjBr1B,OAAQk9G,KAcVE,GAAUh/E,WAAa,MACb,qBACI,OACF,aACK,WACF,UAEH,IAEZpzB,GAASoyG,GAAWnhF,GAAW,CAC7B5pB,UAAUtQ,EAAG0yB,SACL0/E,EAAQnxG,KAAKqB,MACbsqG,EAAOl6E,EAAM3wB,QAAU2wB,EAAM3wB,OAAOmpC,KACpCppC,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,WACvB6Z,EAAM,UACPi7D,GAAM7tG,EAAM,oDAEb2zB,EAAMyE,QAAQzE,EAAM+E,UAEtB31B,EAAImwB,IAAMmgF,EAEV1/E,EAAMoE,MAAMpE,EAAMmF,QAAQ9uB,GAAK4oC,EAAIngB,GAAQzoB,IAAM,IAEjD6jG,EAAK6J,MAAK/1B,UACF33E,EAAI23E,EAAKjzD,KACTtuB,EAAIuhF,EAAKv3E,QAAUu3E,EAAKv3E,OAAOskB,KAEjCtuB,GAAKwyC,EAAIngB,GAAQzoB,KAAO4oC,EAAIngB,GAAQryB,KACtC2C,EAAIc,IAAIlD,KAAKg7B,GAAO,CAClB34B,OAAQ5C,EACR8iB,OAAQlZ,aAITzG,MAAQR,EAAIc,KACR8vB,EAAMyE,QAAQzE,EAAM4E,OAE7B5E,EAAMoE,MAAMpE,EAAM4E,KAAKvuB,GAAK4oC,EAAIngB,GAAQzoB,IAAM,IAE9CqpG,EAAMvvG,SAAQ03F,KACR5oD,EAAIngB,GAAQ+oE,EAAKx4F,UAAY4vC,EAAIngB,GAAQ+oE,EAAKt4E,WAChDngB,EAAIowB,IAAIxyB,KAAK66F,OAKZz4F,KAKX,MAAMw5G,GAAQ,CACZC,OE7ea,SAASpyG,EAAQoH,EAAIC,EAAImlC,EAAIC,OAEtC92C,EACAmX,EAFA6iB,EAAQ3vB,EAAO43E,SACZ3hF,EAAI05B,EAAMt6B,OACRg9G,EAAO,IAAIl6G,MAAMlC,EAAI,OAEzBo8G,EAAK,GAAKvlG,EAAMnX,EAAI,EAAGA,EAAIM,IAAKN,EACnC08G,EAAK18G,EAAI,GAAKmX,GAAO6iB,EAAMh6B,GAAGwD,gBAKvByuC,EAAUjyC,EAAGO,EAAGiD,EAAOiO,EAAIC,EAAImlC,EAAIC,MACtC92C,GAAKO,EAAI,EAAG,KACVqhF,EAAO5nD,EAAMh6B,UACjB4hF,EAAKnwE,GAAKA,EAAImwE,EAAKlwE,GAAKA,EACxBkwE,EAAK/qC,GAAKA,OAAI+qC,EAAK9qC,GAAKA,OAItB6lE,EAAcD,EAAK18G,GACnB48G,EAAep5G,EAAQ,EAAKm5G,EAC5Bj5G,EAAI1D,EAAI,EACRgH,EAAKzG,EAAI,OAENmD,EAAIsD,GAAI,KACToN,EAAM1Q,EAAIsD,IAAO,EACjB01G,EAAKtoG,GAAOwoG,EAAal5G,EAAI0Q,EAAM,EAClCpN,EAAKoN,EAGPwoG,EAAcF,EAAKh5G,EAAI,GAAOg5G,EAAKh5G,GAAKk5G,GAAgB58G,EAAI,EAAI0D,KAAKA,MAEtEm5G,EAAYH,EAAKh5G,GAAKi5G,EACtBG,EAAat5G,EAAQq5G,KAEpBhmE,EAAKplC,EAAOqlC,EAAKplC,EAAK,KACrB8yB,EAAKhhC,GAASiO,EAAKqrG,EAAajmE,EAAKgmE,GAAar5G,EAAQqzC,EAC9D5E,EAAUjyC,EAAG0D,EAAGm5G,EAAWprG,EAAIC,EAAI8yB,EAAIsS,GACvC7E,EAAUvuC,EAAGnD,EAAGu8G,EAAYt4E,EAAI9yB,EAAImlC,EAAIC,OACnC,KACDrS,EAAKjhC,GAASkO,EAAKorG,EAAahmE,EAAK+lE,GAAar5G,EAAQszC,EAC9D7E,EAAUjyC,EAAG0D,EAAGm5G,EAAWprG,EAAIC,EAAImlC,EAAIpS,GACvCwN,EAAUvuC,EAAGnD,EAAGu8G,EAAYrrG,EAAIgzB,EAAIoS,EAAIC,IAjC5C7E,CAAU,EAAG3xC,EAAG+J,EAAO7G,MAAOiO,EAAIC,EAAImlC,EAAIC,IFqe1C2iE,KAAMC,GACN73G,MAAO83G,GACPoD,UG7ea,SAAS1yG,EAAQoH,EAAIC,EAAImlC,EAAIC,IAC1B,EAAfzsC,EAAO43F,MAAYpgG,GAAQ43G,IAAMpvG,EAAQoH,EAAIC,EAAImlC,EAAIC,IH6etD8iE,SAAUoD,GACVnD,WAAYoD,IAERC,GAAS,CAAC,KAAM,KAAM,KAAM,KAAM,QAAS,YAQjD,SAASC,GAAQ3oF,GACf2lF,GAAgBr4G,KAAKK,KAAMqyB,GAE7B2oF,GAAQ5/E,WAAa,MACX,mBACI,OACF,YACI,UAEJ,CAAC,MACD,aACA,SACP,MACO,YACA,WACP,MACO,cACA,eACG,kBACD,CAAC,WAAY,aAAc,SAAU,OAAQ,QAAS,cAC/D,MACO,eACA,iBACG,GACV,MACO,oBACA,iBACG,GACV,MACO,oBACA,iBACG,GACV,MACO,kBACA,iBACG,GACV,MACO,oBACA,iBACG,GACV,MACO,qBACA,iBACG,GACV,MACO,mBACA,iBACG,GACV,MACO,aACA,iBACG,mBACV,MACO,aACA,mBACG,GACV,MACO,YACA,gBACC,SACC,GACT,MACO,UACA,gBACC,SACC2/E,GAAOx9G,eACNw9G,MAGf/yG,GAASgzG,GAAShD,GAAiB,CAKjC92G,eACQgB,EIlkBK,eACT+4G,EAAOxD,GACPhkG,GAAQ,EACR/D,EAAK,EACLE,EAAK,EACLsrG,EAAe,CAAC,GAChBzmD,EAAeygD,GACfiG,EAAajG,GACbkG,EAAelG,GACfmG,EAAgBnG,GAChBoG,EAAcpG,YAETqG,EAAQtxE,UACfA,EAAK36B,GACL26B,EAAK16B,GAAK,EACV06B,EAAKyK,GAAKhlC,EACVu6B,EAAK0K,GAAK/kC,EACVq6B,EAAKgpE,WAAWuF,GAChB0C,EAAe,CAAC,GACZznG,GAAOw2B,EAAKgpE,WAAWwF,IACpBxuE,WAGAuuE,EAAa/4B,OAChBvhF,EAAIg9G,EAAaz7B,EAAKqgB,OACtBxwF,EAAKmwE,EAAKnwE,GAAKpR,EACfqR,EAAKkwE,EAAKlwE,GAAKrR,EACfw2C,EAAK+qC,EAAK/qC,GAAKx2C,EACfy2C,EAAK8qC,EAAK9qC,GAAKz2C,EACfw2C,EAAKplC,IAAIA,EAAKolC,GAAMplC,EAAKolC,GAAM,GAC/BC,EAAKplC,IAAIA,EAAKolC,GAAMplC,EAAKolC,GAAM,GACnC8qC,EAAKnwE,GAAKA,EACVmwE,EAAKlwE,GAAKA,EACVkwE,EAAK/qC,GAAKA,EACV+qC,EAAK9qC,GAAKA,EACN8qC,EAAKK,WACP5hF,EAAIg9G,EAAaz7B,EAAKqgB,MAAQ,GAAKrrC,EAAagrB,GAAQ,EACxDnwE,GAAMgsG,EAAY77B,GAAQvhF,EAC1BqR,GAAM4rG,EAAW17B,GAAQvhF,GACzBw2C,GAAM0mE,EAAa37B,GAAQvhF,GAElBoR,IAAIA,EAAKolC,GAAMplC,EAAKolC,GAAM,IADnCC,GAAM0mE,EAAc57B,GAAQvhF,GAEnBqR,IAAIA,EAAKolC,GAAMplC,EAAKolC,GAAM,GACnCsmE,EAAKx7B,EAAMnwE,EAAIC,EAAImlC,EAAIC,WAI3B4mE,EAAQ9nG,MAAQ,SAASvR,UAChBnC,UAAUxC,QAAUkW,IAAUvR,EAAGq5G,GAAW9nG,GAGrD8nG,EAAQt0G,KAAO,SAAS/E,UACfnC,UAAUxC,QAAUmS,GAAMxN,EAAE,GAAI0N,GAAM1N,EAAE,GAAIq5G,GAAW,CAAC7rG,EAAIE,IAGrE2rG,EAAQN,KAAO,SAAS/4G,UACfnC,UAAUxC,QAAU09G,EAAOhG,GAAS/yG,GAAIq5G,GAAWN,GAG5DM,EAAQpjG,QAAU,SAASjW,UAClBnC,UAAUxC,OAASg+G,EAAQ9mD,aAAavyD,GAAGwyD,aAAaxyD,GAAKq5G,EAAQ9mD,gBAG9E8mD,EAAQ9mD,aAAe,SAASvyD,UACvBnC,UAAUxC,QAAUk3D,EAA4B,mBAANvyD,EAAmBA,EAAIsB,IAAUtB,GAAIq5G,GAAW9mD,GAGnG8mD,EAAQ7mD,aAAe,SAASxyD,UACvBnC,UAAUxC,OAASg+G,EAAQJ,WAAWj5G,GAAGk5G,aAAal5G,GAAGm5G,cAAcn5G,GAAGo5G,YAAYp5G,GAAKq5G,EAAQJ,cAG5GI,EAAQJ,WAAa,SAASj5G,UACrBnC,UAAUxC,QAAU49G,EAA0B,mBAANj5G,EAAmBA,EAAIsB,IAAUtB,GAAIq5G,GAAWJ,GAGjGI,EAAQH,aAAe,SAASl5G,UACvBnC,UAAUxC,QAAU69G,EAA4B,mBAANl5G,EAAmBA,EAAIsB,IAAUtB,GAAIq5G,GAAWH,GAGnGG,EAAQF,cAAgB,SAASn5G,UACxBnC,UAAUxC,QAAU89G,EAA6B,mBAANn5G,EAAmBA,EAAIsB,IAAUtB,GAAIq5G,GAAWF,GAGpGE,EAAQD,YAAc,SAASp5G,UACtBnC,UAAUxC,QAAU+9G,EAA2B,mBAANp5G,EAAmBA,EAAIsB,IAAUtB,GAAIq5G,GAAWD,GAG3FC,EJ2eKA,UAEVr5G,EAAEu6E,MAAQ19E,UACF+I,EAAI5F,EAAE+4G,OACRnzG,EAAE20E,OAAOv6E,EAAE+4G,KAAKnzG,EAAE20E,MAAM19E,KAG9BmD,EAAE7C,OAASN,IACL0H,GAAe4zG,GAAOt7G,GAAImD,EAAE+4G,KAAKZ,GAAMt7G,IAASjB,EAAM,uCAAyCiB,IAG9FmD,GAGTmwB,OAAQ,CAAC,SAAU,QAAS,OAAQ,QAAS,UAAW,eAAgB,eAAgB,aAAc,eAAgB,gBAAiB,eACvIr1B,OAAQ+9G,qHKvkBV,SAASS,GAAYzwG,EAAG0wG,EAAYC,EAAaC,SAEzCnvG,EAAQzB,EAAEyB,MACVkxC,EAAS3yC,EAAE2yC,OACXk+D,EAASF,GAAeC,EACxB5vF,EAAU++C,GAAOt+D,EAAOkxC,GAAQD,WAAW,MAEjDg+D,EAAW75G,SAAQwlE,GAASntB,GAAKluB,EAASq7C,EAAOw0C,WAE3C7iE,EAAS,IAAI8iE,YAAY9vF,EAAQs/E,aAAa,EAAG,EAAG7+F,EAAOkxC,GAAQlxB,KAAKusB,QACxE+iE,EAAS/wG,EAAEgxG,SACXC,EAASJ,GAAU7wG,EAAEgxG,aAEvB75G,EAAG2Q,EAAGrN,EAAGC,EAAG62B,MAEXzpB,EAAI,EAAGA,EAAI6qC,IAAU7qC,MACnB3Q,EAAI,EAAGA,EAAIsK,IAAStK,EACvBo6B,EA3Ba,WA2BLyc,EAAOlmC,EAAIrG,EAAQtK,GAEvBo6B,IACF92B,EAAIuF,EAAE7I,GACNuD,EAAIsF,EAAE8H,GACD8oG,GAAaG,EAAO10G,IAAI5B,EAAGC,GAE5Bm2G,GAhCoB,UAgCVt/E,GAAiC0/E,EAAO50G,IAAI5B,EAAGC,UAK5D,CAACq2G,EAAQE,GAGlB,SAAS/hE,GAAKluB,EAASq7C,EAAO54C,OACvB44C,EAAM7pE,OAAQ,aACbsR,EAAOu4D,EAAM,GAAGH,KAAKgJ,SAEd,UAATphE,EACFu4D,EAAMxlE,SAAQ+U,IACZA,EAAMywD,MAAMxlE,SAAQqlE,GAAQhtB,GAAKluB,EAASk7C,EAAKG,MAAO54C,QAGxDmlD,GAAM9kE,GAAMorC,KAAKluB,EAAS,CACxBq7C,MAAO54C,EAAW44C,EAAM1lE,IAAI4uG,IAAWlpC,IAW7C,SAASkpC,GAAQxvG,SACT6yB,EAAOhD,GAAS7vB,EAAQ,WAE1B6yB,EAAKg0C,SACPh0C,EAAKi0C,cAAgB,GAGnBj0C,EAAK/d,OACP+d,EAAKu4C,YApEc,MAqEnBv4C,EAAKg0C,OAAS,OACdh0C,EAAKi0C,cAAgB,EACrBj0C,EAAKm0C,YAAc,GAGdn0C,EAGT,MAEA0C,GAAM,GAIN4lF,GAAS,IAAIJ,YAAYK,IAEzBC,GAAS,IAAIN,YAAYK,IAEzBC,GAAO,GAAK,EACZF,GAAO,IAAME,GAAO,GAEpB,IAAK,IAAIt+G,EAAI,EAAGA,GATT,KASsBA,EAC3Bs+G,GAAOt+G,GAAKs+G,GAAOt+G,EAAI,IAAM,EAAI,EACjCo+G,GAAOp+G,IAAMs+G,GAAOt+G,GAuGtB,SAASu+G,GAAQ5vG,EAAOkxC,EAAQvlC,SACxBskE,EAAQt6E,KAAKuC,IAAI,EAAGvC,KAAK6Q,KAAKxG,EAAQkxC,EAAS,MAC/C9+B,MAAQpS,EAAQ,EAAI2L,EAAUskE,GAASA,GACvC9gD,MAAQ+hB,EAAS,EAAIvlC,EAAUskE,GAASA,GACxC94E,EAAQ5E,OAASA,EAAIoZ,GAAWskE,UAEtC94E,EAAMguD,OAAS5yD,GAAKA,EAAI09E,EAAQtkE,EAEhCxU,EAAMo4G,OAAS,IA5GjB,SAAiBn9F,EAAG+c,SACZ75B,EAAQ,IAAI+5G,gBAAgBj9F,EAAI+c,EAfjC,IAAA,cAiBI0gF,EAAKnoG,EAAOitE,GACnBr/E,EAAMoS,IAAUitE,WAGTm7B,EAAOpoG,EAAOitE,GACrBr/E,EAAMoS,IAAUitE,QAGX,CACLr/E,MAAOA,EACPlD,IAAK,CAACsD,EAAG2Q,WACDqB,EAAQrB,EAAI+L,EAAI1c,SACfJ,EAAMoS,IAjCP,GAiCwB,IAAMA,EAAQmiB,KAE9CjvB,IAAK,CAAClF,EAAG2Q,WACDqB,EAAQrB,EAAI+L,EAAI1c,EAEtBm6G,EAAKnoG,IAtCC,EAsCc,IAAMA,EAAQmiB,MAEpC/uB,MAAO,CAACpF,EAAG2Q,WACHqB,EAAQrB,EAAI+L,EAAI1c,EAEtBo6G,EAAOpoG,IA3CD,IA2CkB,IAAMA,EAAQmiB,OAExCkmF,SAAU,CAACr6G,EAAG2Q,EAAGsuB,EAAI0T,SAEfjkC,EACAC,EACA2rG,EACAC,EAJAx7G,EAAI4zC,OAMD5zC,GAAK4R,IAAK5R,KACf2P,EAAQ3P,EAAI2d,EAAI1c,EAChB2O,EAAM5P,EAAI2d,EAAIuiB,EACdq7E,EAAa5rG,IAvDT,EAwDJ6rG,EAAW5rG,IAxDP,EA0DA2rG,IAAeC,MACb36G,EAAM06G,GAAcP,GAAOrrG,EAAQylB,IAAO8lF,GAAqB,GAAbtrG,EAAMwlB,YACnD,MAEJ,IACDv0B,EAAM06G,GAAcP,GAAOrrG,EAAQylB,IAAM,OAAO,KAChDv0B,EAAM26G,GAAYN,GAAqB,GAAbtrG,EAAMwlB,KAAW,OAAO,MAEjD,IAAIx4B,EAAI2+G,EAAa,EAAG3+G,EAAI4+G,IAAY5+G,KACvCiE,EAAMjE,GAAI,OAAO,SAKpB,GAET6+G,SAAU,CAACx6G,EAAG2Q,EAAGsuB,EAAI0T,SACfjkC,EAAOC,EAAK2rG,EAAYC,EAAU5+G,OAE/BgV,GAAKgiC,IAAMhiC,KAChBjC,EAAQiC,EAAI+L,EAAI1c,EAChB2O,EAAMgC,EAAI+L,EAAIuiB,EACdq7E,EAAa5rG,IAhFT,EAiFJ6rG,EAAW5rG,IAjFP,EAmFA2rG,IAAeC,EACjBJ,EAAKG,EAAYP,GAAOrrG,EAAQylB,IAAO8lF,GAAqB,GAAbtrG,EAAMwlB,eAErDgmF,EAAKG,EAAYP,GAAOrrG,EAAQylB,KAEhCgmF,EAAKI,EAAUN,GAAqB,GAAbtrG,EAAMwlB,MAExBx4B,EAAI2+G,EAAa,EAAG3+G,EAAI4+G,IAAY5+G,EAAGw+G,EAAKx+G,EAAG,aAI1D8+G,WAAY,CAACz6G,EAAG2Q,EAAGsuB,EAAI0T,SACjBjkC,EAAOC,EAAK2rG,EAAYC,EAAU5+G,OAE/BgV,GAAKgiC,IAAMhiC,KAChBjC,EAAQiC,EAAI+L,EAAI1c,EAChB2O,EAAMgC,EAAI+L,EAAIuiB,EACdq7E,EAAa5rG,IApGT,EAqGJ6rG,EAAW5rG,IArGP,EAuGA2rG,IAAeC,EACjBH,EAAOE,EAAYL,GAAOvrG,EAAQylB,IAAO4lF,GAAqB,GAAbprG,EAAMwlB,eAEvDimF,EAAOE,EAAYL,GAAOvrG,EAAQylB,KAElCimF,EAAOG,EAAUR,GAAqB,GAAbprG,EAAMwlB,MAE1Bx4B,EAAI2+G,EAAa,EAAG3+G,EAAI4+G,IAAY5+G,EAAGy+G,EAAOz+G,EAAG,IAI5D++G,YAAa,CAAC16G,EAAG2Q,EAAGsuB,EAAI0T,IAAO3yC,EAAI,GAAK2Q,EAAI,GAAKgiC,GAAMlZ,GAAKwF,GAAMviB,GAY/Ci+F,CAAOj+F,EAAG+c,GAE/Bh4B,EAAM84E,MAAQA,EACd94E,EAAMwU,QAAUA,EAChBxU,EAAM6I,MAAQA,EACd7I,EAAM+5C,OAASA,EACR/5C,EAmET,SAASi5G,GAAY16G,EAAG2Q,EAAGiqG,EAAWC,EAAYvwG,EAAOkxC,OACnDz8C,EAAI67G,EAAY,SACb56G,EAAIjB,EAAI,GAAKiB,EAAIjB,EAAIuL,GAASqG,GAAK5R,EAAI87G,EAAa,GAAK,GAAKlqG,EAAI5R,EAAIy8C,EAE/E,SAASs/D,GAAUjyG,EAAG7I,EAAG2Q,EAAGkqG,EAAYD,EAAWnhF,EAAGshF,EAAKC,SACnDt+F,EAAIk+F,EAAYnhF,GAAkB,EAAbohF,GACrBroE,EAAK3pC,EAAE7I,EAAI0c,GACXuiB,EAAKp2B,EAAE7I,EAAI0c,GACX+1B,EAAK5pC,EAAE8H,GAAK8oB,GAAQ,IACpBkZ,EAAK9pC,EAAE8H,EAAI8oB,UACVshF,EAAIL,YAAYloE,EAAIC,EAAIxT,EAAI0T,IAAOooE,EAAIV,SAAS7nE,EAAIC,EAAIxT,EAAI0T,IAAOqoE,GAAOA,EAAIX,SAAS7nE,EAAIC,EAAIxT,EAAI0T,GAmJ5G,MAAMsoE,GAAQ,EAAE,GAAI,EAAG,EAAG,GACpBC,GAAQ,EAAE,EAAG,GAAI,EAAG,GA0H1B,MAAMC,GAAS,CAAC,QAAS,SAAU,QAC7BC,GAAY,CAAC,SAAU,SAAU,OA+EvC,SAASv2G,GAAKqtC,EAAKsG,EAAKrG,EAAKwG,EAAKoiE,EAAKC,EAAKxoE,EAAIvT,EAAIwT,EAAIE,EAAI0oE,EAAUC,WAC3DP,EAAIL,YAAYxoE,EAAKC,EAAKqG,EAAKG,KAAS2iE,GAAYN,EAAMA,EAAIX,SAASnoE,EAAKC,EAAKqG,EAAKG,KAGjG,SAAuBnG,EAAIC,EAAIxT,EAAI0T,EAAI0oE,UAC9BA,EAAS,IAAM7oE,GAAMvT,GAAMo8E,EAAS,IAAMA,EAAS,IAAM5oE,GAAME,GAAM0oE,EAAS,GAJmBE,CAAc/oE,EAAIC,EAAIxT,EAAI0T,EAAI0oE,GAAYN,EAAIV,SAASnoE,EAAKC,EAAKqG,EAAKG,KAOhL,MAOM6iE,GAAa,YACLC,MACLA,cACMA,OACLC,SACEA,QACDA,gBACMC,SACLA,iBACMA,IAEZC,GAAiB,OAlcvB,SAA8B/yG,EAAGgzG,EAASC,EAAeC,SACjDzxG,EAAQzB,EAAEyB,MACVkxC,EAAS3yC,EAAE2yC,cAEV,SAAUxrC,SACTk1D,EAAQl1D,EAAEid,MAAMA,MAAMi4C,MAAM62C,GAAW72C,MAE7CjpE,EAAIipE,EAAM7pE,OAEVw/G,EAAa7qG,EAAEid,MAAM2iD,SAErBgrC,EAAYjrC,GAAYrlE,MAAM0F,EAAEid,MAAOjd,EAAEid,MAAMthB,UAG3C6mC,EACAvT,EACAwT,EACAE,EACA3yC,EACA2Q,EACAqrG,EAPAC,EAAe,MASd,IAAItgH,EAAI,EAAGA,EAAIM,IAAKN,EACvB62C,EAAK0yB,EAAMvpE,GAAGqE,EACdyyC,EAAKyyB,EAAMvpE,GAAGgV,EACdsuB,OAAqBh6B,IAAhBigE,EAAMvpE,GAAGsjC,GAAmBuT,EAAK0yB,EAAMvpE,GAAGsjC,GAC/C0T,OAAqB1tC,IAAhBigE,EAAMvpE,GAAGg3C,GAAmBF,EAAKyyB,EAAMvpE,GAAGg3C,GAC/C3yC,GAAKwyC,EAAKvT,GAAM,EAChBtuB,GAAK8hC,EAAKE,GAAM,EAChBqpE,EAAY/7G,KAAKI,IAAI4+B,EAAKuT,EAAKG,EAAKF,GAEhCupE,GAAaC,IACfA,EAAeD,EACfhsG,EAAEhQ,EAAIA,EACNgQ,EAAEW,EAAIA,UAIV3Q,EAAI46G,EAAY,EAChBjqG,EAAIkqG,EAAa,EACjBroE,EAAKxiC,EAAEhQ,EAAIA,EACXi/B,EAAKjvB,EAAEhQ,EAAIA,EACXyyC,EAAKziC,EAAEW,EAAIA,EACXgiC,EAAK3iC,EAAEW,EAAIA,EACXX,EAAErH,MAAQ,SAEN6pC,EAAK,GAAKvT,GAAM30B,EAClB0F,EAAErH,MAAQ,OACD,GAAK6pC,GAAMloC,EAAQ20B,IAC5BjvB,EAAErH,MAAQ,SAGZqH,EAAE0+D,SAAW,SAETj8B,EAAK,GAAKE,GAAM6I,EAClBxrC,EAAE0+D,SAAW,MACJ,GAAKj8B,GAAM+I,EAAS7I,IAC7B3iC,EAAE0+D,SAAW,WAGR,qBAiBX,SAAsC7lE,EAAGgzG,EAASC,EAAeC,SACzDzxG,EAAQzB,EAAEyB,MACVkxC,EAAS3yC,EAAE2yC,OACXu/D,EAAMc,EAAQ,GAEpBb,EAAMa,EAAQ,YAELK,EAASpjE,EAAIC,EAAIojE,EAASvB,EAAWC,SACtC76G,EAAI6I,EAAE4mD,OAAO3W,GACbnoC,EAAI9H,EAAE4mD,OAAO1W,OAGfhpC,EAFArN,EAAKy5G,EACLx5G,EAAK64C,MAGJk/D,GAAY16G,EAAG2Q,EAAGiqG,EAAWC,EAAYvwG,EAAOkxC,KAAYs/D,GAAUjyG,EAAG7I,EAAG2Q,EAAGkqG,EAAYD,EAAWl4G,EAAIq4G,EAAKC,KAASF,GAAUjyG,EAAG7I,EAAG2Q,EAAGkqG,EAAYD,EAAWC,EAAYE,EAAK,MAAO,MAGtLp4G,EAAKD,GAAM,GAChBqN,GAAOrN,EAAKC,GAAM,EAEdm4G,GAAUjyG,EAAG7I,EAAG2Q,EAAGkqG,EAAYD,EAAW7qG,EAAKgrG,EAAKC,GACtDr4G,EAAKoN,EAELrN,EAAKqN,KAKLrN,EAAKy5G,QACA,CAACn8G,EAAG2Q,EAAGjO,GAAI,WAMjB,SAAUsN,SACTk1D,EAAQl1D,EAAEid,MAAMA,MAAMi4C,MAAM62C,GAAW72C,MAE7CjpE,EAAIipE,EAAM7pE,OAEVw/G,EAAa7qG,EAAEid,MAAM2iD,SAErBgrC,EAAYjrC,GAAYrlE,MAAM0F,EAAEid,MAAOjd,EAAEid,MAAMthB,UAM3C6mC,EACAvT,EACAwT,EACAE,EACA3yC,EACA2Q,EACAmoC,EACAC,EACA7G,EACAkqE,EACA5jE,EACArG,EACAkqE,EACA1jE,EACAqjE,EACA/yF,EACAqzF,EApBAH,EAAUL,EAAgBjB,EAAa,EACvC0B,GAAc,EACdC,GAAe,EACfP,EAAe,MAoBd,IAAItgH,EAAI,EAAGA,EAAIM,IAAKN,EAAG,KAC1B62C,EAAK0yB,EAAMvpE,GAAGqE,EACdyyC,EAAKyyB,EAAMvpE,GAAGgV,EACdsuB,OAAqBh6B,IAAhBigE,EAAMvpE,GAAGsjC,GAAmBuT,EAAK0yB,EAAMvpE,GAAGsjC,GAC/C0T,OAAqB1tC,IAAhBigE,EAAMvpE,GAAGg3C,GAAmBF,EAAKyyB,EAAMvpE,GAAGg3C,GAE3CH,EAAKvT,IACPq9E,EAAU9pE,EACVA,EAAKvT,EACLA,EAAKq9E,GAGH7pE,EAAKE,IACP2pE,EAAU7pE,EACVA,EAAKE,EACLA,EAAK2pE,GAGPpqE,EAAMrpC,EAAE2pC,GACRgG,EAAM3vC,EAAEo2B,GACRm9E,MAAYlqE,EAAMsG,GAAO,GACzBrG,EAAMtpC,EAAE4pC,GACRkG,EAAM9vC,EAAE8pC,GACR0pE,MAAYlqE,EAAMwG,GAAO,GAEpBG,EAAKsjE,EAAOtjE,GAAM5G,IAAO4G,MACvBC,EAAKsjE,EAAOtjE,GAAM5G,IAAO4G,EAC5B9vB,EAASizF,EAASpjE,EAAIC,EAAIojE,EAASvB,EAAWC,GAE1C5xF,KACDjZ,EAAEhQ,EAAGgQ,EAAEW,EAAGwrG,EAASI,GAAetzF,OAMpC6vB,EAAKsjE,EAAOtjE,GAAMN,IAAOM,MACvBC,EAAKsjE,EAAOtjE,GAAMJ,IAAOI,EAC5B9vB,EAASizF,EAASpjE,EAAIC,EAAIojE,EAASvB,EAAWC,GAE1C5xF,KACDjZ,EAAEhQ,EAAGgQ,EAAEW,EAAGwrG,EAASI,GAAetzF,GAOpCszF,GAAgBT,IAEnBE,EAAY/7G,KAAKI,IAAI4+B,EAAKuT,EAAKG,EAAKF,GACpCzyC,GAAKwyC,EAAKvT,GAAM,EAChBtuB,GAAK8hC,EAAKE,GAAM,EAEZqpE,GAAaC,IAAiBvB,GAAY16G,EAAG2Q,EAAGiqG,EAAWC,EAAYvwG,EAAOkxC,KAAYs/D,GAAUjyG,EAAG7I,EAAG2Q,EAAGkqG,EAAYD,EAAWC,EAAYE,EAAK,QACvJkB,EAAeD,EACfhsG,EAAEhQ,EAAIA,EACNgQ,EAAEW,EAAIA,EACN6rG,GAAe,aAMjBD,IAAeC,KACjBx8G,EAAI46G,EAAY,EAChBjqG,EAAIkqG,EAAa,EACjBE,EAAIP,SAAS3xG,EAAEmH,EAAEhQ,EAAIA,GAAI6I,EAAEmH,EAAEW,EAAIA,GAAI9H,EAAEmH,EAAEhQ,EAAIA,GAAI6I,EAAEmH,EAAEW,EAAIA,IACzDX,EAAErH,MAAQ,SACVqH,EAAE0+D,SAAW,UACN,eASb,SAAkC7lE,EAAGgzG,EAASC,EAAeC,SACrDzxG,EAAQzB,EAAEyB,MACVkxC,EAAS3yC,EAAE2yC,OACXu/D,EAAMc,EAAQ,GAEpBb,EAAMa,EAAQ,GAEdY,EAAM5zG,EAAEgxG,gBAGD,SAAU7pG,SACTk1D,EAAQl1D,EAAEid,MAAMA,MAAMi4C,MAAM62C,GAAW72C,MAE7CjpE,EAAIipE,EAAM7pE,OAEVw/G,EAAa7qG,EAAEid,MAAM2iD,SAErBgrC,EAAYjrC,GAAYrlE,MAAM0F,EAAEid,MAAOjd,EAAEid,MAAMthB,MAE/CuxE,EAAQ,OAMJ1qC,EACAvT,EACAwT,EACAE,EACA3yC,EACA2Q,EACAmoC,EACAC,EACAr2C,EACAC,EACAoN,EACAisG,EAfAG,EAAUL,EAAgBjB,EAAa,EACvC0B,GAAc,EACdC,GAAe,EACfP,EAAe,MAed,IAAItgH,EAAI,EAAGA,EAAIM,IAAKN,EAAG,KAC1B62C,EAAK0yB,EAAMvpE,GAAGqE,EACdyyC,EAAKyyB,EAAMvpE,GAAGgV,EACdsuB,OAAqBh6B,IAAhBigE,EAAMvpE,GAAGsjC,GAAmBuT,EAAK0yB,EAAMvpE,GAAGsjC,GAC/C0T,OAAqB1tC,IAAhBigE,EAAMvpE,GAAGg3C,GAAmBF,EAAKyyB,EAAMvpE,GAAGg3C,GAE/CuqC,EAAM3gF,KAAK,CAACsM,GAAG2pC,EAAKvT,GAAM,GAAIp2B,GAAG4pC,EAAKE,GAAM,KAErCuqC,EAAM7hF,YACVy9C,EAAIC,GAAMmkC,EAAMpvE,QAEbitG,EAAIr+G,IAAIo8C,EAAIC,IAAOiiE,EAAIt+G,IAAIo8C,EAAIC,IAAO0jE,EAAI//G,IAAIo8C,EAAIC,KAGtD0jE,EAAIv3G,IAAI4zC,EAAIC,OAEP,IAAI78C,EAAI,EAAGA,EAAI,IAAKA,EACvB8D,EAAI84C,EAAKmiE,GAAM/+G,GACfyU,EAAIooC,EAAKmiE,GAAMh/G,GACVugH,EAAI/B,YAAY16G,EAAG2Q,EAAG3Q,EAAG2Q,IAAIusE,EAAM3gF,KAAK,CAACyD,EAAG2Q,OAInD3Q,EAAI6I,EAAE4mD,OAAO3W,GACbnoC,EAAI9H,EAAE4mD,OAAO1W,GACbr2C,EAAKy5G,EACLx5G,EAAK64C,GAEAk/D,GAAY16G,EAAG2Q,EAAGiqG,EAAWC,EAAYvwG,EAAOkxC,KAAYs/D,GAAUjyG,EAAG7I,EAAG2Q,EAAGkqG,EAAYD,EAAWl4G,EAAIq4G,EAAKC,KAASF,GAAUjyG,EAAG7I,EAAG2Q,EAAGkqG,EAAYD,EAAWC,EAAYE,EAAK,MAAO,MAGtLp4G,EAAKD,GAAM,GAChBqN,GAAOrN,EAAKC,GAAM,EAEdm4G,GAAUjyG,EAAG7I,EAAG2Q,EAAGkqG,EAAYD,EAAW7qG,EAAKgrG,EAAKC,GACtDr4G,EAAKoN,EAELrN,EAAKqN,EAKLrN,EAAKy5G,IACPnsG,EAAEhQ,EAAIA,EACNgQ,EAAEW,EAAIA,EACNwrG,EAAUz5G,EACV65G,GAAc,IAOfA,GAAgBT,IAEnBE,EAAY/7G,KAAKI,IAAI4+B,EAAKuT,EAAKG,EAAKF,GACpCzyC,GAAKwyC,EAAKvT,GAAM,EAChBtuB,GAAK8hC,EAAKE,GAAM,EAEZqpE,GAAaC,IAAiBvB,GAAY16G,EAAG2Q,EAAGiqG,EAAWC,EAAYvwG,EAAOkxC,KAAYs/D,GAAUjyG,EAAG7I,EAAG2Q,EAAGkqG,EAAYD,EAAWC,EAAYE,EAAK,QACvJkB,EAAeD,EACfhsG,EAAEhQ,EAAIA,EACNgQ,EAAEW,EAAIA,EACN6rG,GAAe,aAMjBD,IAAeC,KACjBx8G,EAAI46G,EAAY,EAChBjqG,EAAIkqG,EAAa,EACjBE,EAAIP,SAAS3xG,EAAEmH,EAAEhQ,EAAIA,GAAI6I,EAAEmH,EAAEW,EAAIA,GAAI9H,EAAEmH,EAAEhQ,EAAIA,GAAI6I,EAAEmH,EAAEW,EAAIA,IACzDX,EAAErH,MAAQ,SACVqH,EAAE0+D,SAAW,UACN,MAsHb,SAASguC,GAAaC,EAAO53G,EAAMlC,EAAS6T,EAAQlV,EAAQ+3G,EAAYuC,EAAec,EAAYb,EAAW9lG,EAAS9Y,OAEhHw/G,EAAMthH,OAAQ,OAAOshH,QACpBE,EAAY58G,KAAKuC,IAAIkU,EAAOrb,OAAQmG,EAAOnG,QAC3CiuF,EAoDR,SAAoBzsF,EAAGqU,SACfo4E,EAAU,IAAI74E,aAAaS,GAC3BjV,EAAIY,EAAExB,WAEP,IAAIM,EAAI,EAAGA,EAAIM,IAAKN,EAAG2tF,EAAQ3tF,GAAKkB,EAAElB,IAAM,MAE5C,IAAIA,EAAIM,EAAGN,EAAIuV,IAASvV,EAAG2tF,EAAQ3tF,GAAK2tF,EAAQrtF,EAAI,UAElDqtF,EA5DSwzB,CAAWpmG,EAAQmmG,GAC7BE,EA8DR,SAAoBlgH,EAAGqU,SACf6rG,EAAU,IAAIC,UAAU9rG,GACxBjV,EAAIY,EAAExB,WAEP,IAAIM,EAAI,EAAGA,EAAIM,IAAKN,EAAGohH,EAAQphH,IAAM6/G,GAAW3+G,EAAElB,QAElD,IAAIA,EAAIM,EAAGN,EAAIuV,IAASvV,EAAGohH,EAAQphH,GAAKohH,EAAQ9gH,EAAI,UAElD8gH,EAtESE,CAAWz7G,EAAQq7G,GAC7B9uC,GAwEUt8C,EAxEUkrF,EAAM,GAAG1vF,QAyEpBwE,EAAKszC,MAAQtzC,EAAKszC,KAAKgJ,SAxEhCmvC,EAAyB,UAAbnvC,GAAwB4uC,EAAM,GAAG1vF,MAAMi4C,MAAM62C,GAAWhuC,SACpE0rC,EAA4B,SAAdyD,EACd7B,EAiFR,SAAsBttC,EAAUmvC,EAAWN,EAAYb,SAC/Cv9E,EAAKxuB,GAAK,CAACA,EAAEhQ,EAAGgQ,EAAEhQ,EAAGgQ,EAAEhQ,EAAGgQ,EAAEW,EAAGX,EAAEW,EAAGX,EAAEW,UAEvCo9D,EAEmB,SAAbA,GAAoC,SAAbA,EACzB/9D,GAAKwuB,EAAGxuB,EAAEid,OACM,SAAdiwF,EACFltG,UACCk1D,EAAQl1D,EAAEid,MAAMi4C,MAAM62C,GAAW72C,aAChC1mC,EAAG0mC,EAAM7pE,OAAS6pE,EAAqB,UAAf03C,EAAyB,EAAI13C,EAAM7pE,OAAS,GAAK,CAC9E2E,EAAG8P,IACHa,EAAGb,OAIAE,UACC3T,EAAI2T,EAAEid,MAAM+3C,aACX,CAAC3oE,EAAEm2C,IAAKn2C,EAAEm2C,GAAKn2C,EAAE4iC,IAAM,EAAG5iC,EAAE4iC,GAAI5iC,EAAEo2C,IAAKp2C,EAAEo2C,GAAKp2C,EAAEs2C,IAAM,EAAGt2C,EAAEs2C,KAd7DnU,EArFQ2+E,CAAapvC,EAAUmvC,EAAWN,EAAYb,GACzDlzG,EAAIqxG,GAAOn1G,EAAK,GAAIA,EAAK,GAAIkR,GAC7BmnG,EAAmB3D,GAA0B,UAAXt8G,EAmE1C,IAAkBs0B,QAjEVnH,EAAOqyF,EAAMn9G,KAAIwQ,KACrBid,MAAOjd,EACPi3C,QAAS,EACTjnD,OAAGiF,EACH0L,OAAG1L,EACH0D,WAAO1D,EACPypE,cAAUzpE,EACVo2G,SAAUA,EAASrrG,WAEjB6rG,MAECuB,EAAkB,CAEjBv6G,GACFynB,EAAK7P,MAAK,CAAClb,EAAGlD,IAAMwG,EAAQtD,EAAE0tB,MAAO5wB,EAAE4wB,aAIrCusF,GAAc,MAEb,IAAI79G,EAAI,EAAGA,EAAIohH,EAAQ1hH,SAAWm+G,IAAe79G,EAGpD69G,EAA6B,IAAfuD,EAAQphH,IAAc2tF,EAAQ3tF,GAAK,EAK/CoyE,IAAa+tC,GAAiBrC,KAChCF,EAAa,CAACoD,EAAMn9G,KAAIwQ,GAAKA,EAAEid,SAAQ1vB,OAAOg8G,IAIhDsC,EAAUtC,EAAWl+G,OAASi+G,GAAYzwG,EAAG0wG,EAAYC,EAAaC,GAxsB1E,SAAqB5wG,EAAGyhB,SAChBuvF,EAAShxG,EAAEgxG,gBAEhBvvF,GAAQ,IAAI5qB,SAAQsQ,GAAK6pG,EAAO30G,IAAI2D,EAAEmH,EAAEqrG,SAAS,IAAKxyG,EAAEmH,EAAEqrG,SAAS,OAC7D,CAACxB,OAAQ50G,GAosBuEo4G,CAAYx0G,EAAGizG,GAAiBxxF,SAIjHgoF,EAAQmH,EAAcmC,GAAez+G,GAAQ0L,EAAGgzG,EAASC,EAAeC,GA/JhF,SAAyBlzG,EAAGgzG,EAASkB,EAASzzB,SACtCh/E,EAAQzB,EAAEyB,MACVkxC,EAAS3yC,EAAE2yC,OACXu/D,EAAMc,EAAQ,GACdb,EAAMa,EAAQ,GACd5/G,EAAIqtF,EAAQjuF,cACX,SAAU2U,SACTqrG,EAAWrrG,EAAEqrG,SACbR,EAAa7qG,EAAEid,MAAM2iD,YAEvByrC,EAAS,GAAK,GAAKA,EAAS,GAAK,GAAKA,EAAS,GAAK/wG,GAAS+wG,EAAS,GAAK7/D,SACtE,MAILhuC,EACAE,EACA4tG,EACAgC,EACAC,EACA/qE,EACAvT,EACAwT,EACAE,EACAytB,EACAC,EACAnuB,EACAsG,EACArG,EACAwG,EAfAiiE,EAAY,MAkBX,IAAIj/G,EAAI,EAAGA,EAAIM,IAAKN,EAAG,IAC1B6R,GAAmB,EAAbuvG,EAAQphH,IAAY,EAC1B+R,GAAMqvG,EAAQphH,KAAO,EAAM,GAAO,EAClC2/G,EAAkB,IAAP9tG,GAAmB,IAAPE,GAAY47E,EAAQ3tF,GAAK,EAChD2hH,EAAa9vG,GAAME,EAAKzN,KAAKu9G,QAAU,EACvCD,EAAej0B,EAAQ3tF,GAAK,GAAK,EAAI,EACrC62C,EAAK6oE,EAAS,EAAI7tG,GAAM87E,EAAQ3tF,GAAK6R,EAAK8vG,EAC1Cj9C,EAAKg7C,EAAS,EAAI3tG,GAAM6vG,EAAe1C,EAAantG,EAAK,EAAI47E,EAAQ3tF,GAAK+R,EAAK4vG,EAC/E7qE,EAAK4tB,EAAKw6C,EAAa,EACvBloE,EAAK0tB,EAAKw6C,EAAa,EACvB3oE,EAAMrpC,EAAE2pC,GACRL,EAAMtpC,EAAE4pC,GACRkG,EAAM9vC,EAAE8pC,IAEHioE,EAAW,KAET/1G,GAAKqtC,EAAKA,EAAKC,EAAKwG,EAAKoiE,EAAKC,EAAKxoE,EAAIA,EAAIC,EAAIE,EAAI0oE,EAAUC,YAKhEV,EAAYjrC,GAAYrlE,MAAM0F,EAAEid,MAAOjd,EAAEid,MAAMthB,SAInDy0D,EAAK5tB,EAAK+qE,EAAe3C,EAAYptG,EAAK,EAC1CglC,EAAK4tB,EAAKw6C,EAAY,EACtB37E,EAAKmhC,EAAKw6C,EAAY,EACtB1oE,EAAMrpC,EAAE2pC,GACRgG,EAAM3vC,EAAEo2B,GAEJp6B,GAAKqtC,EAAKsG,EAAKrG,EAAKwG,EAAKoiE,EAAKC,EAAKxoE,EAAIvT,EAAIwT,EAAIE,EAAI0oE,EAAUC,UAE/DtrG,EAAEhQ,EAAKwN,EAAUA,EAAK+vG,EAAe,EAAIt+E,EAAKuT,EAAlC4tB,EACZpwD,EAAEW,EAAKjD,EAAUA,EAAK6vG,EAAe,EAAI5qE,EAAKF,EAAlC4tB,EACZrwD,EAAErH,MAAQwyG,GAAO3tG,EAAK+vG,EAAe,GACrCvtG,EAAE0+D,SAAW0sC,GAAU1tG,EAAK6vG,EAAe,GAC3CxC,EAAIP,SAAStoE,EAAKC,EAAKqG,EAAKG,IACrB,SAIJ,GAqFkF8kE,CAAe50G,EAAGgzG,EAASkB,EAASzzB,UAE/Hh/D,EAAK5qB,SAAQsQ,GAAKA,EAAEi3C,SAAWqrD,EAAMtiG,KAC9Bsa,EA4DT,MAAMuuF,GAAS,CAAC,IAAK,IAAK,UAAW,QAAS,YACxC6E,GAAU,CAAC,WAAY,OAAQ,cAAe,MAAO,SAAU,YAAa,QAAS,gBA4B3F,SAASC,GAAMxtF,GACb4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,MAEvB+I,WAAa,CACjBvsB,KAAM,QACNsnD,SAAU,CACRvkC,UAAU,GAEZS,OAAQ,CAAC,CACPp1B,KAAM,OACN4R,KAAM,SACN/M,OAAO,EACPvE,OAAQ,EACR03G,UAAU,GACT,CACDh4G,KAAM,OACN4R,KAAM,WACL,CACD5R,KAAM,SACN4R,KAAM,SACN/M,OAAO,EACPquC,QAASyvE,IACR,CACD3iH,KAAM,SACN4R,KAAM,SACN/M,OAAO,EACPquC,QAAS,CAAC,IACT,CACDlzC,KAAM,UACN4R,KAAM,SACNshC,QAAS,GACR,CACDlzC,KAAM,aACN4R,KAAM,SACNmF,OAAQ,CAAC,QAAS,OAClBm8B,QAAS,OACR,CACDlzC,KAAM,YACN4R,KAAM,SACNshC,QAAS,GACR,CACDlzC,KAAM,gBACN4R,KAAM,UACNshC,SAAS,GACR,CACDlzC,KAAM,aACN4R,KAAM,OACN/M,OAAO,GACN,CACD7E,KAAM,SACN4R,KAAM,SACNshC,QAAS,SACR,CACDlzC,KAAM,KACN4R,KAAM,SACN/M,OAAO,EACPvE,OAAQw9G,GAAOx9G,OACf4yC,QAAS4qE,MAGb/yG,GAAS63G,GAAO5mF,GAAW,CACzB5pB,UAAUtQ,EAAG0yB,SAMLR,EAAMlyB,EAAEizB,gBAERf,GAAOQ,EAAMyE,QAAQzE,EAAM+E,mBAPnB2c,SACNj1C,EAAIa,EAAEo0C,UACLruC,EAAW5G,IAAMuzB,EAAMO,SAAS9zB,EAAElB,QAKEm0B,CAAK,SAAU,OAEvDpyB,EAAEkI,MAA0B,IAAlBlI,EAAEkI,KAAK1J,QACpBO,EAAM,wEAGF6lC,EAAK5kC,EAAE4kC,IAAMo3E,UAEnB6D,GAAYntF,EAAMmE,YAAYnE,EAAMmF,QAAQ91B,QAAU,GAAI/B,EAAEkI,KAAMlI,EAAE4d,KAAM7a,EAAkB,MAAZ/C,EAAE6Z,OAAiB,EAAI7Z,EAAE6Z,QAAS9W,EAAM/C,EAAE2E,QAAUk8G,IAAU7gH,EAAE08G,YAAc,IAAwB,IAApB18G,EAAEi/G,cAAyBj/G,EAAE+/G,YAAc,MAAO//G,EAAEk/G,WAAa,EAAGl/G,EAAEoZ,SAAW,EAAGpZ,EAAEM,QAAU,SAASuC,SAAQmG,UAE3QD,EAAIC,EAAEonB,MACZrnB,EAAE67B,EAAG,IAAM57B,EAAE7F,EACb4F,EAAE67B,EAAG,IAAM57B,EAAE8K,EACb/K,EAAE67B,EAAG,IAAM57B,EAAEohD,QACbrhD,EAAE67B,EAAG,IAAM57B,EAAE8C,MACb/C,EAAE67B,EAAG,IAAM57B,EAAE6oE,YAERn/C,EAAML,OAAOH,GAAKW,SAAS+R,sDCn4BtC,SAASmM,GAAWtjB,EAAMgc,OAKpB9mC,EACA7D,EACAM,EACA2J,EACAvG,EACAuP,EATA26B,EAAS,GACT7sC,EAAM,SAAUyG,UACXA,EAAEyC,OAUI,MAAX0gC,EACFiD,EAAOhtC,KAAK+tB,YAEP9qB,EAAM,GAAI7D,EAAI,EAAGM,EAAIquB,EAAKjvB,OAAQM,EAAIM,IAAKN,EAC9CiK,EAAI0kB,EAAK3uB,IAETiT,EAAIpP,EADJH,EAAIinC,EAAQ9mC,IAAI9C,OAId8C,EAAIH,GAAKuP,EAAI,GACbA,EAAEi3B,KAAOxmC,EACTkqC,EAAOhtC,KAAKqS,IAGdA,EAAErS,KAAKqJ,UAIJ2jC,EAaT,SAASq0E,GAAMztF,GACb4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAE7BytF,GAAM1kF,WAAa,MACT,iBACI,YACG,UAEL,CAAC,MACD,SACA,kBACI,GACX,MACO,SACA,kBACI,GACX,MACO,eACA,eACC,GACR,MACO,iBACA,iBACG,IACV,MACO,UACA,gBACC,KAGbpzB,GAAS83G,GAAO7mF,GAAW,CACzB5pB,UAAUtQ,EAAG0yB,SACL5wB,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,UAAYpF,EAAMqF,eAE1C92B,KAAKqB,OAASowB,EAAMyE,WAAan3B,EAAEizB,WAAY,OAE5CyZ,EAASqE,GADAre,EAAMmE,YAAYnE,EAAMmF,QAAQ91B,OACd/B,EAAEypC,SAC7BzgB,GAAShpB,EAAEypC,SAAW,IAAI9mC,IAAIvE,GAC9BiX,EAAI2T,EAAMxqB,OACVomC,EAAK5kC,EAAE4kC,IAAM,CAACxmC,EAAa4B,EAAEmD,GAAI/E,EAAa4B,EAAE8T,IAChDmB,EAAS,GACfy3B,EAAO7pC,SAAQkP,IACbivG,GAAgBjvG,EAAG/R,EAAEmD,EAAGnD,EAAE8T,EAAG9T,EAAEm/B,WAAa,IAAKt8B,SAAQ1D,UACjD4J,EAAI,OAEL,IAAIjK,EAAI,EAAGA,EAAIuW,IAAKvW,EACvBiK,EAAEigB,EAAMlqB,IAAMiT,EAAEi3B,KAAKlqC,GAGvBiK,EAAE67B,EAAG,IAAMzlC,EAAE,GACb4J,EAAE67B,EAAG,IAAMzlC,EAAE,GACb8V,EAAOvV,KAAKg7B,GAAO3xB,UAGnB9H,KAAKqB,QAAOR,EAAImwB,IAAMhxB,KAAKqB,YAC1BA,MAAQR,EAAIc,IAAMd,EAAIC,OAASkT,SAG/BnT,KAKX,MAAMktC,GAAU,CACd1N,OAAQ2/E,GACR59G,IAAK69G,GACLj+G,IAAKk+G,GACLx9G,IAAKy9G,GACLj/E,KAAMk/E,GACN7+E,KAAM8+E,IAiBR,SAASC,GAAWjuF,GAClB4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAE7BiuF,GAAWllF,WAAa,MACd,sBACI,YACG,UAEL,CAAC,MACD,SACA,kBACI,GACX,MACO,SACA,kBACI,GACX,MACO,eACA,eACC,GACR,MACO,cACA,iBACG,gBACD76B,OAAO+E,KAAKyoC,KACrB,MACO,aACA,iBACG,GACV,MACO,cACA,gBACC,SACC,GACT,MACO,cACA,mBACG,GACV,MACO,UACA,gBACC,KAGb/lC,GAASs4G,GAAYrnF,GAAW,CAC9B5pB,UAAUtQ,EAAG0yB,SACL5wB,EAAM4wB,EAAMsF,KAAKtF,EAAMoF,UAAYpF,EAAMqF,eAE1C92B,KAAKqB,OAASowB,EAAMyE,WAAan3B,EAAEizB,WAAY,OAE5CyZ,EAASqE,GADAre,EAAMmE,YAAYnE,EAAMmF,QAAQ91B,OACd/B,EAAEypC,SAC7BzgB,GAAShpB,EAAEypC,SAAW,IAAI9mC,IAAIvE,GAC9BkC,EAASN,EAAEM,QAAU,SACrBuG,EAAQ7G,EAAE6G,OAAS,EACnB26G,EApEa,EAAClhH,EAAQuG,IAAqB,SAAXvG,EAAoBuG,EAAmB,SAAXvG,EAAoB,EAAI,EAoE9EmhH,CAAiBnhH,EAAQuG,GAC/B+9B,EAAK5kC,EAAE4kC,IAAM,CAACxmC,EAAa4B,EAAEmD,GAAI/E,EAAa4B,EAAE8T,IAChDqsF,EAAMnxD,GAAQ1uC,GACd2U,EAAS,OACXnR,EAAS9D,EAAEsH,OAEVI,GAAesnC,GAAS1uC,IAC3BvB,EAAM,8BAAgCuB,GAG1B,MAAVwD,GACa,QAAXxD,GAAoBwD,EAAO,IAAM,IACnC4uB,EAAMwD,SAASh1B,KAAK,wDACpB4C,EAAS,MAIb4oC,EAAO7pC,SAAQkP,OACHA,EAAEvT,QAEHgjH,cACP9uF,EAAMwD,SAASh1B,KAAK,oEAIhBwgH,EAAQvhB,EAAIpuF,EAAG/R,EAAEmD,EAAGnD,EAAE8T,EAAGjN,MAE3B7G,EAAEszB,mBAEJre,EAAOvV,KAAKg7B,GAAO,CACjBn0B,KAAMwL,EAAEi3B,KACRvH,KAAMigF,EAAMjgF,KACZT,SAAU0gF,EAAM1gF,kBAKd2gF,EAAM79G,GAAUwD,GAAOyK,EAAG/R,EAAEmD,GAC5BP,EAAMzD,UACJ4J,EAAI,OAEL,IAAIjK,EAAI,EAAGA,EAAIkqB,EAAMxqB,SAAUM,EAClCiK,EAAEigB,EAAMlqB,IAAMiT,EAAEi3B,KAAKlqC,GAGvBiK,EAAE67B,EAAG,IAAMzlC,EAAE,GACb4J,EAAE67B,EAAG,IAAMzlC,EAAE,GACb8V,EAAOvV,KAAKg7B,GAAO3xB,KAGN,WAAXzI,EAEFqhH,EAAI9+G,SAAQM,GAAKP,EAAI,CAACO,EAAGu+G,EAAMzgF,QAAQ99B,OAGvC6gC,GAAY09E,EAAMzgF,QAAS0gF,EAAK,GAAI,KAAK9+G,QAAQD,MAGjD3B,KAAKqB,QAAOR,EAAImwB,IAAMhxB,KAAKqB,YAC1BA,MAAQR,EAAIc,IAAMd,EAAIC,OAASkT,SAG/BnT,mECzPX,MAAM8/G,GAAUx+G,KAAKO,IAAI,GAAI,IACvBk+G,GAAa,IAAI/E,YAAY,KAEpB,MAAMgF,eAEL9wG,EAAQ+wG,EAAOC,GAAaC,EAAOC,UACrC9iH,EAAI4R,EAAOxS,OACXskE,EAAS,IAAIlvD,aAAiB,EAAJxU,OAE3B,IAAIN,EAAI,EAAGA,EAAIM,EAAGN,IAAK,OAClBK,EAAI6R,EAAOlS,GACjBgkE,EAAO,EAAIhkE,GAAKijH,EAAK5iH,GACrB2jE,EAAO,EAAIhkE,EAAI,GAAKmjH,EAAK9iH,UAGtB,IAAI2iH,GAAWh/C,GAG1Bx3D,YAAYw3D,SACF1jE,EAAI0jE,EAAOtkE,QAAU,KACvBY,EAAI,GAA0B,iBAAd0jE,EAAO,GAAiB,MAAM,IAAI7jE,MAAM,4CAEvD6jE,OAASA,QAGRq/C,EAAe/+G,KAAKuC,IAAI,EAAIvG,EAAI,EAAG,QACpCgjH,WAAa,IAAItF,YAA2B,EAAfqF,QAC7BE,WAAa,IAAIC,WAA0B,EAAfH,QAG5BI,UAAYn/G,KAAK2I,KAAK3I,KAAK6Q,KAAK7U,SAChCojH,UAAY,IAAI1F,YAAY19G,QAC5BqjH,UAAY,IAAI3F,YAAY19G,QAC5BsjH,SAAW,IAAI5F,YAAY19G,QAC3BujH,UAAY,IAAIL,WAAWrhH,KAAKshH,WAAW1rG,MAAM,QAGjD+rG,KAAO,IAAI9F,YAAY19G,QACvByjH,OAAS,IAAIjvG,aAAaxU,QAE1B2L,SAGTA,eACU+3D,OAACA,EAAQ0/C,UAAWM,EAAUL,UAAWM,EAAUL,SAAUM,EAASL,UAAWM,GAAahiH,KAC9F7B,EAAI0jE,EAAOtkE,QAAU,MAGvB2lC,EAAOhrB,EAAAA,EACP+pG,EAAO/pG,EAAAA,EACPirB,GAAQjrB,EAAAA,EACR6hG,GAAQ7hG,EAAAA,MAEP,IAAIra,EAAI,EAAGA,EAAIM,EAAGN,IAAK,OAClBqE,EAAI2/D,EAAO,EAAIhkE,GACfgV,EAAIgvD,EAAO,EAAIhkE,EAAI,GACrBqE,EAAIghC,IAAMA,EAAOhhC,GACjB2Q,EAAIovG,IAAMA,EAAOpvG,GACjB3Q,EAAIihC,IAAMA,EAAOjhC,GACjB2Q,EAAIknG,IAAMA,EAAOlnG,QAChB8uG,KAAK9jH,GAAKA,QAEb26C,GAAMtV,EAAOC,GAAQ,EACrBsV,GAAMwpE,EAAOlI,GAAQ,MAGvBzvG,EAAIC,EAAI23G,EADRC,EAAUjqG,EAAAA,MAIT,IAAIra,EAAI,EAAGA,EAAIM,EAAGN,IAAK,OAClBqU,EAAIyrB,GAAK6a,EAAIC,EAAIopB,EAAO,EAAIhkE,GAAIgkE,EAAO,EAAIhkE,EAAI,IACjDqU,EAAIiwG,IACJ73G,EAAKzM,EACLskH,EAAUjwG,SAGZkwG,EAAMvgD,EAAO,EAAIv3D,GACjB+3G,EAAMxgD,EAAO,EAAIv3D,EAAK,GAE5B63G,EAAUjqG,EAAAA,MAGL,IAAIra,EAAI,EAAGA,EAAIM,EAAGN,IAAK,IACpBA,IAAMyM,EAAI,eACR4H,EAAIyrB,GAAKykF,EAAKC,EAAKxgD,EAAO,EAAIhkE,GAAIgkE,EAAO,EAAIhkE,EAAI,IACnDqU,EAAIiwG,GAAWjwG,EAAI,IACnB3H,EAAK1M,EACLskH,EAAUjwG,OAGdowG,EAAMzgD,EAAO,EAAIt3D,GACjBg4G,EAAM1gD,EAAO,EAAIt3D,EAAK,GAEtBi4G,EAAYtqG,EAAAA,MAGX,IAAIra,EAAI,EAAGA,EAAIM,EAAGN,IAAK,IACpBA,IAAMyM,GAAMzM,IAAM0M,EAAI,eACpBtJ,EAAIwhH,GAAaL,EAAKC,EAAKC,EAAKC,EAAK1gD,EAAO,EAAIhkE,GAAIgkE,EAAO,EAAIhkE,EAAI,IACrEoD,EAAIuhH,IACJN,EAAKrkH,EACL2kH,EAAYvhH,OAGhByhH,EAAM7gD,EAAO,EAAIqgD,GACjBS,EAAM9gD,EAAO,EAAIqgD,EAAK,MAEtBM,IAActqG,EAAAA,EAAU,KAGnB,IAAIra,EAAI,EAAGA,EAAIM,EAAGN,SACd+jH,OAAO/jH,GAAMgkE,EAAO,EAAIhkE,GAAKgkE,EAAO,IAAQA,EAAO,EAAIhkE,EAAI,GAAKgkE,EAAO,GAEhF+gD,GAAU5iH,KAAK2hH,KAAM3hH,KAAK4hH,OAAQ,EAAGzjH,EAAI,SACnC0kH,EAAO,IAAIhH,YAAY19G,OACzBC,EAAI,MACH,IAAIP,EAAI,EAAGoF,GAAMiV,EAAAA,EAAUra,EAAIM,EAAGN,IAAK,OAClCgB,EAAKmB,KAAK2hH,KAAK9jH,GACjBmC,KAAK4hH,OAAO/iH,GAAMoE,IAClB4/G,EAAKzkH,KAAOS,EACZoE,EAAKjD,KAAK4hH,OAAO/iH,gBAGpBgkH,KAAOA,EAAKjuG,SAAS,EAAGxW,QACxB0kH,UAAY,IAAIjH,YAAY,aAC5BkH,UAAY,IAAIlH,YAAY,OAKjC/sC,GAAOszC,EAAKC,EAAKC,EAAKC,EAAKG,EAAKC,GAAM,OAChC9kH,EAAI0M,EACJrI,EAAIogH,EACJzvG,EAAI0vG,EACVh4G,EAAK23G,EACLI,EAAMI,EACNH,EAAMI,EACNT,EAAKrkH,EACL6kH,EAAMxgH,EACNygH,EAAM9vG,QAGJhL,EA6Rd,SAAsBk9D,EAAIC,EAAIC,EAAIC,EAAI1sB,EAAIC,SAChC/oC,EAAKu1D,EAAKF,EACVn1D,EAAKs1D,EAAKF,EACV6mB,EAAKrzC,EAAKusB,EACV+mB,EAAKrzC,EAAKusB,EAEVrZ,EAAKj8C,EAAKA,EAAKE,EAAKA,EACpBozG,EAAKn3B,EAAKA,EAAKC,EAAKA,EACpB55E,EAAI,IAAOxC,EAAKo8E,EAAKl8E,EAAKi8E,SAKzB,CAAC3pF,EAHE6iE,GAAM+mB,EAAKngC,EAAK/7C,EAAKozG,GAAM9wG,EAG1BW,EAFDmyD,GAAMt1D,EAAKszG,EAAKn3B,EAAKlgC,GAAMz5C,GAxSlB+wG,CAAab,EAAKC,EAAKC,EAAKC,EAAKG,EAAKC,QAChDO,IAAMr7G,EAAO3F,OACbihH,IAAMt7G,EAAOgL,MAEb,IAAIhV,EAAI,EAAGA,EAAIM,EAAGN,SACd+jH,OAAO/jH,GAAK8/B,GAAKkkC,EAAO,EAAIhkE,GAAIgkE,EAAO,EAAIhkE,EAAI,GAAIgK,EAAO3F,EAAG2F,EAAOgL,GAI7E+vG,GAAU5iH,KAAK2hH,KAAM3hH,KAAK4hH,OAAQ,EAAGzjH,EAAI,QAGpCilH,WAAa94G,MACd+4G,EAAW,EAEfvB,EAASx3G,GAAMu3G,EAASK,GAAM33G,EAC9Bu3G,EAASv3G,GAAMs3G,EAASv3G,GAAM43G,EAC9BJ,EAASI,GAAML,EAASt3G,GAAMD,EAE9By3G,EAAQz3G,GAAM,EACdy3G,EAAQx3G,GAAM,EACdw3G,EAAQG,GAAM,EAEdF,EAASpsG,MAAM,GACfosG,EAAShiH,KAAKsjH,SAASlB,EAAKC,IAAQ/3G,EACpC03G,EAAShiH,KAAKsjH,SAAShB,EAAKC,IAAQh4G,EACpCy3G,EAAShiH,KAAKsjH,SAASZ,EAAKC,IAAQT,OAE/BqB,aAAe,OACfC,aAAal5G,EAAIC,EAAI23G,GAAK,GAAI,GAAI,OAElC,IAAWpW,EAAIC,EAAXxqG,EAAI,EAAWA,EAAIvB,KAAK2hH,KAAKpkH,OAAQgE,IAAK,OACzC1D,EAAImC,KAAK2hH,KAAKpgH,GACdW,EAAI2/D,EAAO,EAAIhkE,GACfgV,EAAIgvD,EAAO,EAAIhkE,EAAI,MAGrB0D,EAAI,GAAKY,KAAKI,IAAIL,EAAI4pG,IAAO6U,IAAWx+G,KAAKI,IAAIsQ,EAAIk5F,IAAO4U,GAAS,YACzE7U,EAAK5pG,EACL6pG,EAAKl5F,EAGDhV,IAAMyM,GAAMzM,IAAM0M,GAAM1M,IAAMqkH,EAAI,aAGlCtxG,EAAQ,MACP,IAAIxS,EAAI,EAAGqC,EAAMT,KAAKsjH,SAASphH,EAAG2Q,GAAIzU,EAAI4B,KAAKshH,YAChD1wG,EAAQoxG,GAAUvhH,EAAMrC,GAAK4B,KAAKshH,YACnB,IAAX1wG,GAAgBA,IAAUkxG,EAASlxG,IAFoBxS,KAK/DwS,EAAQixG,EAASjxG,OACFtS,EAAX2H,EAAI2K,OACDtS,EAAIwjH,EAAS77G,IAAK6oE,GAAO5sE,EAAG2Q,EAAGgvD,EAAO,EAAI57D,GAAI47D,EAAO,EAAI57D,EAAI,GAAI47D,EAAO,EAAIvjE,GAAIujE,EAAO,EAAIvjE,EAAI,QAClG2H,EAAI3H,EACA2H,IAAM2K,EAAO,CACb3K,GAAK,YAIF,IAAPA,EAAU,aAGV6B,EAAI9H,KAAKwjH,aAAav9G,EAAGpI,EAAGikH,EAAS77G,IAAK,GAAI,EAAG87G,EAAQ97G,IAG7D87G,EAAQlkH,GAAKmC,KAAKyjH,UAAU37G,EAAI,GAChCi6G,EAAQ97G,GAAK6B,EACbu7G,QAGIllH,EAAI2jH,EAAS77G,QACV3H,EAAIwjH,EAAS3jH,GAAI2wE,GAAO5sE,EAAG2Q,EAAGgvD,EAAO,EAAI1jE,GAAI0jE,EAAO,EAAI1jE,EAAI,GAAI0jE,EAAO,EAAIvjE,GAAIujE,EAAO,EAAIvjE,EAAI,KACjGwJ,EAAI9H,KAAKwjH,aAAarlH,EAAGN,EAAGS,EAAGyjH,EAAQlkH,IAAK,EAAGkkH,EAAQ5jH,IACvD4jH,EAAQlkH,GAAKmC,KAAKyjH,UAAU37G,EAAI,GAChCg6G,EAAS3jH,GAAKA,EACdklH,IACAllH,EAAIG,KAIJ2H,IAAM2K,OACCtS,EAAIujH,EAAS57G,GAAI6oE,GAAO5sE,EAAG2Q,EAAGgvD,EAAO,EAAIvjE,GAAIujE,EAAO,EAAIvjE,EAAI,GAAIujE,EAAO,EAAI57D,GAAI47D,EAAO,EAAI57D,EAAI,KACjG6B,EAAI9H,KAAKwjH,aAAallH,EAAGT,EAAGoI,GAAI,EAAG87G,EAAQ97G,GAAI87G,EAAQzjH,SAClDmlH,UAAU37G,EAAI,GACnBi6G,EAAQzjH,GAAKwJ,EACbg6G,EAAS77G,GAAKA,EACdo9G,IACAp9G,EAAI3H,OAKP8kH,WAAavB,EAAShkH,GAAKoI,EAChC67G,EAAS77G,GAAK47G,EAAS1jH,GAAKN,EAC5BikH,EAASjkH,GAAKM,EAGd6jH,EAAShiH,KAAKsjH,SAASphH,EAAG2Q,IAAMhV,EAChCmkH,EAAShiH,KAAKsjH,SAASzhD,EAAO,EAAI57D,GAAI47D,EAAO,EAAI57D,EAAI,KAAOA,OAG3D48G,KAAO,IAAIhH,YAAYwH,OACvB,IAAIxlH,EAAI,EAAGoI,EAAIjG,KAAKojH,WAAYvlH,EAAIwlH,EAAUxlH,SAC1CglH,KAAKhlH,GAAKoI,EACfA,EAAI67G,EAAS77G,QAIZ68G,UAAY9iH,KAAKmhH,WAAWvsG,SAAS,EAAG5U,KAAKujH,mBAC7CR,UAAY/iH,KAAKohH,WAAWxsG,SAAS,EAAG5U,KAAKujH,cAGtDD,SAASphH,EAAG2Q,UACD1Q,KAAKwR,MAgHpB,SAAqBjE,EAAIE,SACf1R,EAAIwR,GAAMvN,KAAKI,IAAImN,GAAMvN,KAAKI,IAAIqN,WAChCA,EAAK,EAAI,EAAI1R,EAAI,EAAIA,GAAK,EAlHZwlH,CAAYxhH,EAAIlC,KAAKkjH,IAAKrwG,EAAI7S,KAAKmjH,KAAOnjH,KAAKshH,WAAathH,KAAKshH,UAGvFmC,UAAUhiH,SACC0/G,WAAY2B,EAAW1B,WAAY2B,EAApClhD,OAA+CA,GAAU7hE,SAE3DnC,EAAI,EACJ8lH,EAAK,SAGI,OACHplH,EAAIwkH,EAAUthH,GAiBd6hC,EAAK7hC,EAAIA,EAAI,KACnBkiH,EAAKrgF,GAAM7hC,EAAI,GAAK,GAET,IAAPlD,EAAU,IACA,IAANV,EAAS,MACb4D,EAAIm/G,KAAa/iH,kBAIfksC,EAAKxrC,EAAIA,EAAI,EACbqlH,EAAKtgF,GAAM7hC,EAAI,GAAK,EACpBkqD,EAAK5hB,GAAMxrC,EAAI,GAAK,EAEpByS,EAAK8xG,EAAUa,GACfhpF,EAAKmoF,EAAUrhH,GACf0gE,EAAK2gD,EAAUc,GACf7yG,EAAK+xG,EAAUn3D,MAELk4D,GACZhiD,EAAO,EAAI7wD,GAAK6wD,EAAO,EAAI7wD,EAAK,GAChC6wD,EAAO,EAAIlnC,GAAKknC,EAAO,EAAIlnC,EAAK,GAChCknC,EAAO,EAAIM,GAAKN,EAAO,EAAIM,EAAK,GAChCN,EAAO,EAAI9wD,GAAK8wD,EAAO,EAAI9wD,EAAK,IAEvB,CACT+xG,EAAUrhH,GAAKsP,EACf+xG,EAAUvkH,GAAKyS,QAET8yG,EAAMf,EAAUp3D,OAGT,IAATm4D,EAAY,KACR79G,EAAIjG,KAAKojH,aACV,IACKpjH,KAAKyhH,SAASx7G,KAAO0lD,EAAI,MACpB81D,SAASx7G,GAAKxE,QAGvBwE,EAAIjG,KAAKuhH,UAAUt7G,SACdA,IAAMjG,KAAKojH,iBAEnBW,MAAMtiH,EAAGqiH,QACTC,MAAMxlH,EAAGwkH,EAAUY,SACnBI,MAAMJ,EAAIh4D,SAETkY,EAAK95B,GAAMxrC,EAAI,GAAK,EAGtBV,EAAI+iH,GAAWrjH,SACfqjH,GAAW/iH,KAAOgmE,OAEnB,IACO,IAANhmE,EAAS,MACb4D,EAAIm/G,KAAa/iH,WAIlB8lH,EAGXI,MAAMtiH,EAAGlD,QACA6iH,WAAW3/G,GAAKlD,GACV,IAAPA,IAAUyB,KAAKohH,WAAW7iH,GAAKkD,GAIvC+hH,aAAal5G,EAAIC,EAAI23G,EAAIzgH,EAAGlD,EAAGF,SACrByJ,EAAI9H,KAAKujH,yBAEVpC,WAAWr5G,GAAKwC,OAChB62G,WAAWr5G,EAAI,GAAKyC,OACpB42G,WAAWr5G,EAAI,GAAKo6G,OAEpB6B,MAAMj8G,EAAGrG,QACTsiH,MAAMj8G,EAAI,EAAGvJ,QACbwlH,MAAMj8G,EAAI,EAAGzJ,QAEbklH,cAAgB,EAEdz7G,GAUf,SAAS61B,GAAKonC,EAAIC,EAAIC,EAAIC,SAChBx1D,EAAKq1D,EAAKE,EACVr1D,EAAKo1D,EAAKE,SACTx1D,EAAKA,EAAKE,EAAKA,EAI1B,SAASo0G,GAAapmE,EAAIC,EAAIqiB,EAAIC,EAAI8jD,EAAIC,SAChCn8G,GAAKo4D,EAAKtiB,IAAOomE,EAAKrmE,GACtB38C,GAAKi/D,EAAKtiB,IAAOsmE,EAAKrmE,UACrB17C,KAAKI,IAAIwF,EAAI9G,IAAM,sBAAyBkB,KAAKI,IAAIwF,EAAI9G,GAAK8G,EAAI9G,EAAI,EAIjF,SAAS6tE,GAAO5O,EAAIC,EAAI8jD,EAAIC,EAAItmE,EAAIC,UACnBmmE,GAAapmE,EAAIC,EAAIqiB,EAAIC,EAAI8jD,EAAIC,IAC9CF,GAAa9jD,EAAIC,EAAI8jD,EAAIC,EAAItmE,EAAIC,IACjCmmE,GAAaC,EAAIC,EAAItmE,EAAIC,EAAIqiB,EAAIC,IACnB,EAGlB,SAAS0jD,GAAS9+C,EAAIC,EAAIC,EAAIC,EAAI1sB,EAAIC,EAAImF,EAAIC,SACpCnuC,EAAKq1D,EAAKnnB,EACVhuC,EAAKo1D,EAAKnnB,EACVguC,EAAK5mB,EAAKrnB,EACVkuC,EAAK5mB,EAAKrnB,EACVkjC,EAAKvoC,EAAKoF,EACVojC,EAAKvoC,EAAKoF,EAGVsmE,EAAKt4B,EAAKA,EAAKC,EAAKA,EACpBsY,EAAKrjB,EAAKA,EAAKC,EAAKA,SAEnBtxE,GAAMo8E,EAAKsY,EAAK+f,EAAKnjC,GACrBpxE,GAAMi8E,EAAKuY,EAAK+f,EAAKpjC,IALjBrxE,EAAKA,EAAKE,EAAKA,IAMbi8E,EAAK7K,EAAK8K,EAAK/K,GAAM,EAGtC,SAAS0hC,GAAa19C,EAAIC,EAAIC,EAAIC,EAAI1sB,EAAIC,SAChC/oC,EAAKu1D,EAAKF,EACVn1D,EAAKs1D,EAAKF,EACV6mB,EAAKrzC,EAAKusB,EACV+mB,EAAKrzC,EAAKusB,EAEVrZ,EAAKj8C,EAAKA,EAAKE,EAAKA,EACpBozG,EAAKn3B,EAAKA,EAAKC,EAAKA,EACpB55E,EAAI,IAAOxC,EAAKo8E,EAAKl8E,EAAKi8E,GAE1B3pF,GAAK4pF,EAAKngC,EAAK/7C,EAAKozG,GAAM9wG,EAC1BW,GAAKnD,EAAKszG,EAAKn3B,EAAKlgC,GAAMz5C,SAEzBhQ,EAAIA,EAAI2Q,EAAIA,EAmBvB,SAAS+vG,GAAU/yF,EAAK6O,EAAO/2B,EAAMC,MAC7BA,EAAQD,GAAQ,OACX,IAAI9J,EAAI8J,EAAO,EAAG9J,GAAK+J,EAAO/J,IAAK,OAC9BmjE,EAAOnxC,EAAIhyB,GACXumH,EAAW1lF,EAAMsiC,OACnB5iE,EAAIP,EAAI,OACLO,GAAKuJ,GAAQ+2B,EAAM7O,EAAIzxB,IAAMgmH,GAAUv0F,EAAIzxB,EAAI,GAAKyxB,EAAIzxB,KAC/DyxB,EAAIzxB,EAAI,GAAK4iE,MAEd,KAECnjE,EAAI8J,EAAO,EACXvJ,EAAIwJ,EACR2M,GAAKsb,EAHWloB,EAAOC,GAAU,EAGf/J,GACd6gC,EAAM7O,EAAIloB,IAAS+2B,EAAM7O,EAAIjoB,KAAS2M,GAAKsb,EAAKloB,EAAMC,GACtD82B,EAAM7O,EAAIhyB,IAAM6gC,EAAM7O,EAAIjoB,KAAS2M,GAAKsb,EAAKhyB,EAAG+J,GAChD82B,EAAM7O,EAAIloB,IAAS+2B,EAAM7O,EAAIhyB,KAAK0W,GAAKsb,EAAKloB,EAAM9J,SAEhDmjE,EAAOnxC,EAAIhyB,GACXumH,EAAW1lF,EAAMsiC,UACV,IACNnjE,UAAY6gC,EAAM7O,EAAIhyB,IAAMumH,MAC5BhmH,UAAYsgC,EAAM7O,EAAIzxB,IAAMgmH,MAC3BhmH,EAAIP,EAAG,MACX0W,GAAKsb,EAAKhyB,EAAGO,GAEjByxB,EAAIloB,EAAO,GAAKkoB,EAAIzxB,GACpByxB,EAAIzxB,GAAK4iE,EAELp5D,EAAQ/J,EAAI,GAAKO,EAAIuJ,GACrBi7G,GAAU/yF,EAAK6O,EAAO7gC,EAAG+J,GACzBg7G,GAAU/yF,EAAK6O,EAAO/2B,EAAMvJ,EAAI,KAEhCwkH,GAAU/yF,EAAK6O,EAAO/2B,EAAMvJ,EAAI,GAChCwkH,GAAU/yF,EAAK6O,EAAO7gC,EAAG+J,KAKrC,SAAS2M,GAAK8vG,EAAKxmH,EAAGO,SACZkmH,EAAMD,EAAIxmH,GAChBwmH,EAAIxmH,GAAKwmH,EAAIjmH,GACbimH,EAAIjmH,GAAKkmH,EAGb,SAASvD,GAAY7iH,UACVA,EAAE,GAEb,SAAS+iH,GAAY/iH,UACVA,EAAE,GC7eb,MAAM61C,GAAU,KAED,MAAME,GACnB5pC,mBACO6pC,IAAMl0C,KAAKm0C,SACXC,IAAMp0C,KAAKq0C,IAAM,UACjBt1C,EAAI,GAEXu1C,OAAOpyC,EAAG2Q,QACH9T,GAAM,IAAGiB,KAAKk0C,IAAMl0C,KAAKo0C,KAAOlyC,KAAKlC,KAAKm0C,IAAMn0C,KAAKq0C,KAAOxhC,IAEnE0hC,YACmB,OAAbv0C,KAAKo0C,WACFA,IAAMp0C,KAAKk0C,IAAKl0C,KAAKq0C,IAAMr0C,KAAKm0C,SAChCp1C,GAAK,KAGdy1C,OAAOtyC,EAAG2Q,QACH9T,GAAM,IAAGiB,KAAKo0C,KAAOlyC,KAAKlC,KAAKq0C,KAAOxhC,IAE7C/C,IAAI5N,EAAG2Q,EAAG5R,SAEFqO,GADNpN,GAAKA,IAAWjB,GAAKA,GAEfsO,EAFEsD,GAAKA,KAGT5R,EAAI,EAAG,MAAM,IAAIjD,MAAM,mBACV,OAAbgC,KAAKo0C,IAAcp0C,KAAKjB,GAAM,IAAGuQ,KAAMC,KAClCpN,KAAKI,IAAIvC,KAAKo0C,IAAM9kC,GAAMykC,IAAW5xC,KAAKI,IAAIvC,KAAKq0C,IAAM9kC,GAAMwkC,MAAS/zC,KAAKjB,GAAK,IAAMuQ,EAAK,IAAMC,GACvGtO,SACAlC,GAAM,IAAGkC,KAAKA,WAAWiB,EAAIjB,KAAK4R,KAAK5R,KAAKA,WAAWjB,KAAKo0C,IAAM9kC,KAAMtP,KAAKq0C,IAAM9kC,KAE1F2mC,KAAKh0C,EAAG2Q,EAAG+L,EAAG+c,QACP58B,GAAM,IAAGiB,KAAKk0C,IAAMl0C,KAAKo0C,KAAOlyC,KAAKlC,KAAKm0C,IAAMn0C,KAAKq0C,KAAOxhC,MAAM+L,MAAM+c,MAAM/c,KAErFvd,eACSrB,KAAKjB,GAAK,MClCN,MAAM+zF,GACnBzoF,mBACOtL,EAAI,GAEXu1C,OAAOpyC,EAAG2Q,QACH9T,EAAEN,KAAK,CAACyD,EAAG2Q,IAElB0hC,iBACOx1C,EAAEN,KAAKuB,KAAKjB,EAAE,GAAGW,SAExB80C,OAAOtyC,EAAG2Q,QACH9T,EAAEN,KAAK,CAACyD,EAAG2Q,IAElBxR,eACSrB,KAAKjB,EAAExB,OAASyC,KAAKjB,EAAI,MCXrB,MAAMwlH,GACnBl6G,YAAYm6G,GAAWC,EAAMC,EAAMC,EAAMC,GAAQ,CAAC,EAAG,EAAG,IAAK,YACpDD,GAAQA,KAAUF,GAAQA,KAAaG,GAAQA,KAAUF,GAAQA,IAAQ,MAAM,IAAI1mH,MAAM,uBAC3FwmH,SAAWA,OACXK,eAAiB,IAAIlyG,aAAsC,EAAzB6xG,EAASz0G,OAAOxS,aAClDunH,QAAU,IAAInyG,aAAsC,EAAzB6xG,EAASz0G,OAAOxS,aAC3ConH,KAAOA,EAAM3kH,KAAKykH,KAAOA,OACzBG,KAAOA,EAAM5kH,KAAK0kH,KAAOA,OACzBK,QAEPj7G,qBACO06G,SAAS16G,cACTi7G,QACE/kH,KAET+kH,cACSP,UAAUz0G,OAACA,EAAD8yG,KAASA,EAATC,UAAeA,GAA1BgC,QAAsCA,GAAW9kH,KAGjDglH,EAAgBhlH,KAAKglH,cAAgBhlH,KAAK6kH,eAAejwG,SAAS,EAAGkuG,EAAUvlH,OAAS,EAAI,OAC7F,IAAwC2E,EAAG2Q,EAAvChV,EAAI,EAAGO,EAAI,EAAGD,EAAI2kH,EAAUvlH,OAAcM,EAAIM,EAAGN,GAAK,EAAGO,GAAK,EAAG,OAClEma,EAAoB,EAAfuqG,EAAUjlH,GACfysD,EAAwB,EAAnBw4D,EAAUjlH,EAAI,GACnBquD,EAAwB,EAAnB42D,EAAUjlH,EAAI,GACnB62C,EAAK3kC,EAAOwI,GACZo8B,EAAK5kC,EAAOwI,EAAK,GACjB4oB,EAAKpxB,EAAOu6C,GACZzV,EAAK9kC,EAAOu6C,EAAK,GACjBtT,EAAKjnC,EAAOm8C,GACZjV,EAAKlnC,EAAOm8C,EAAK,GAEjBx8C,EAAKyxB,EAAKuT,EACV9kC,EAAKilC,EAAKF,EACVk3C,EAAK70C,EAAKtC,EACVo3C,EAAK70C,EAAKtC,EACVgX,EAAKj8C,EAAKA,EAAKE,EAAKA,EACpBozG,EAAKn3B,EAAKA,EAAKC,EAAKA,EACpByoB,EAA2B,GAArB7kG,EAAKo8E,EAAKl8E,EAAKi8E,MAEtB0oB,EAKA,GAAIpyG,KAAKI,IAAIgyG,GAAM,KAEtBryG,GAAKwyC,EAAKsC,GAAM,EAChBnkC,GAAK8hC,EAAKsC,GAAM,MACX,OACC/kC,EAAI,EAAIqiG,EACdryG,EAAIwyC,GAAMo3C,EAAKngC,EAAK/7C,EAAKozG,GAAM9wG,EAC/BW,EAAI8hC,GAAMjlC,EAAKszG,EAAKn3B,EAAKlgC,GAAMz5C,OAV/BhQ,GAAKwyC,EAAKsC,GAAM,EAAI,IAAM80C,EAC1Bj5E,GAAK8hC,EAAKsC,GAAM,EAAI,IAAM40C,EAW5Bm5B,EAAc5mH,GAAK8D,EACnB8iH,EAAc5mH,EAAI,GAAKyU,MAKrB7B,EACA1B,EACAC,EAHAosB,EAAIknF,EAAKA,EAAKtlH,OAAS,GACnBwT,EAAS,EAAJ4qB,EACL+Y,EAAK3kC,EAAO,EAAI4rB,GAChBgZ,EAAK5kC,EAAO,EAAI4rB,EAAI,GAC5BmpF,EAAQlvG,KAAK,OACR,IAAI/X,EAAI,EAAGA,EAAIglH,EAAKtlH,SAAUM,EACjC89B,EAAIknF,EAAKhlH,GACTmT,EAAKD,EAAIzB,EAAKolC,EAAInlC,EAAKolC,EACvB5jC,EAAS,EAAJ4qB,EAAO+Y,EAAK3kC,EAAO,EAAI4rB,GAAIgZ,EAAK5kC,EAAO,EAAI4rB,EAAI,GACpDmpF,EAAQ9zG,EAAK,GAAK8zG,EAAQ/zG,GAAMxB,EAAKolC,EACrCmwE,EAAQ9zG,EAAK,GAAK8zG,EAAQ/zG,EAAK,GAAK2jC,EAAKplC,EAG7C+oE,OAAOtsD,SACCgtB,EAAoB,MAAXhtB,EAAkBA,EAAU,IAAIkoB,QAAO9sC,GAC/Cq9G,UAAUzB,UAACA,EAADkC,QAAYA,EAAZpC,KAAqBA,GAAhCmC,cAAuCA,EAAvCF,QAAsDA,GAAW9kH,QACnE6iH,EAAKtlH,QAAU,EAAG,OAAO,SACxB,IAAIM,EAAI,EAAGM,EAAI4kH,EAAUxlH,OAAQM,EAAIM,IAAKN,EAAG,OAC1CO,EAAI2kH,EAAUllH,MAChBO,EAAIP,EAAG,eACLqnH,EAAyB,EAApB/iH,KAAKwR,MAAM9V,EAAI,GACpBsnH,EAAyB,EAApBhjH,KAAKwR,MAAMvV,EAAI,GACpBopG,EAAKwd,EAAcE,GACnBzd,EAAKud,EAAcE,EAAK,GACxBvd,EAAKqd,EAAcG,GACnBvd,EAAKod,EAAcG,EAAK,QACzBC,eAAe5d,EAAIC,EAAIE,EAAIC,EAAI77E,OAElC4wB,EAAIC,EAAKimE,EAAKA,EAAKtlH,OAAS,OAC3B,IAAIM,EAAI,EAAGA,EAAIglH,EAAKtlH,SAAUM,EAAG,CACpC8+C,EAAKC,EAAIA,EAAKimE,EAAKhlH,SACbiK,EAAkC,EAA9B3F,KAAKwR,MAAMsxG,EAAQroE,GAAM,GAC7B16C,EAAI8iH,EAAcl9G,GAClB+K,EAAImyG,EAAcl9G,EAAI,GACtBrC,EAAS,EAALk3C,EACJz+C,EAAI8B,KAAKqlH,SAASnjH,EAAG2Q,EAAGiyG,EAAQr/G,EAAI,GAAIq/G,EAAQr/G,EAAI,IACtDvH,GAAG8B,KAAKolH,eAAeljH,EAAG2Q,EAAG3U,EAAE,GAAIA,EAAE,GAAI6tB,UAExCgtB,GAAUA,EAAO13C,QAE1BikH,aAAav5F,SACLgtB,EAAoB,MAAXhtB,EAAkBA,EAAU,IAAIkoB,QAAO9sC,SACtD4kB,EAAQmqB,KAAKl2C,KAAKykH,KAAMzkH,KAAK0kH,KAAM1kH,KAAK2kH,KAAO3kH,KAAKykH,KAAMzkH,KAAK4kH,KAAO5kH,KAAK0kH,MACpE3rE,GAAUA,EAAO13C,QAE1BkkH,WAAW1nH,EAAGkuB,SACNgtB,EAAoB,MAAXhtB,EAAkBA,EAAU,IAAIkoB,QAAO9sC,EAChD4I,EAAS/P,KAAKwlH,MAAM3nH,MACX,OAAXkS,IAAoBA,EAAOxS,OAAQ,OACvCwuB,EAAQuoB,OAAOvkC,EAAO,GAAIA,EAAO,QAC7B5R,EAAI4R,EAAOxS,YACRwS,EAAO,KAAOA,EAAO5R,EAAE,IAAM4R,EAAO,KAAOA,EAAO5R,EAAE,IAAMA,EAAI,GAAGA,GAAK,MACxE,IAAIN,EAAI,EAAGA,EAAIM,EAAGN,GAAK,EACtBkS,EAAOlS,KAAOkS,EAAOlS,EAAE,IAAMkS,EAAOlS,EAAE,KAAOkS,EAAOlS,EAAE,IACxDkuB,EAAQyoB,OAAOzkC,EAAOlS,GAAIkS,EAAOlS,EAAI,WAEzCkuB,EAAQwoB,YACDwE,GAAUA,EAAO13C,8BAGjBmjH,UAAUz0G,OAACA,IAAW/P,SACxB,IAAInC,EAAI,EAAGM,EAAI4R,EAAOxS,OAAS,EAAGM,EAAIM,IAAKN,EAAG,OAC3CkmC,EAAO/jC,KAAKylH,YAAY5nH,GAC1BkmC,IAAMA,EAAK7vB,MAAQrW,QAASkmC,IAGpC0hF,YAAY5nH,SACJwS,EAAU,IAAIyiF,eACfyyB,WAAW1nH,EAAGwS,GACZA,EAAQhP,QAEjB+jH,eAAe91G,EAAIC,EAAImlC,EAAIC,EAAI5oB,OACzBpO,QACEmjB,EAAK9gC,KAAK0lH,YAAYp2G,EAAIC,GAC1BwxB,EAAK/gC,KAAK0lH,YAAYhxE,EAAIC,GACrB,IAAP7T,GAAmB,IAAPC,GACdhV,EAAQuoB,OAAOhlC,EAAIC,GACnBwc,EAAQyoB,OAAOE,EAAIC,KACVh3B,EAAI3d,KAAK2lH,aAAar2G,EAAIC,EAAImlC,EAAIC,EAAI7T,EAAIC,MACnDhV,EAAQuoB,OAAO32B,EAAE,GAAIA,EAAE,IACvBoO,EAAQyoB,OAAO72B,EAAE,GAAIA,EAAE,KAG3B8qD,SAAS5qE,EAAGqE,EAAG2Q,UACR3Q,GAAKA,IAASA,IAAO2Q,GAAKA,IAASA,GACjC7S,KAAKwkH,SAASoB,MAAM/nH,EAAGqE,EAAG2Q,KAAOhV,aAE/BA,SACH6pC,EAAK1nC,KAAKwlH,MAAM3nH,MAClB6pC,EAAI,IAAK,MAAMtpC,KAAK4B,KAAKwkH,SAASqB,UAAUhoH,GAAI,OAC5CioH,EAAK9lH,KAAKwlH,MAAMpnH,MAElB0nH,EAAIC,EAAM,IAAK,IAAIjlB,EAAK,EAAGklB,EAAKt+E,EAAGnqC,OAAQujG,EAAKklB,EAAIllB,GAAM,MACvD,IAAImlB,EAAK,EAAGC,EAAKJ,EAAGvoH,OAAQ0oH,EAAKC,EAAID,GAAM,KAC1Cv+E,EAAGo5D,IAAOglB,EAAGG,IACdv+E,EAAGo5D,EAAK,IAAMglB,EAAGG,EAAK,IACtBv+E,GAAIo5D,EAAK,GAAKklB,IAAOF,GAAIG,EAAKC,EAAK,GAAKA,IACxCx+E,GAAIo5D,EAAK,GAAKklB,IAAOF,GAAIG,EAAKC,EAAK,GAAKA,GACzC,OACM9nH,QACA2nH,IAMhBI,MAAMtoH,SACEmnH,cAACA,EAAeR,UAAUS,QAACA,EAADlC,UAAUA,EAAVD,UAAqBA,IAAc9iH,KAC7DomH,EAAKnB,EAAQpnH,OACP,IAARuoH,EAAW,OAAO,WAChBr2G,EAAS,OACX9J,EAAImgH,IACL,OACKt+G,EAAI3F,KAAKwR,MAAM1N,EAAI,MACzB8J,EAAOtR,KAAKumH,EAAkB,EAAJl9G,GAAQk9G,EAAkB,EAAJl9G,EAAQ,IACxD7B,EAAIA,EAAI,GAAM,EAAIA,EAAI,EAAIA,EAAI,EAC1B68G,EAAU78G,KAAOpI,EAAG,MACxBoI,EAAI88G,EAAU98G,SACPA,IAAMmgH,IAAa,IAAPngH,UACd8J,EAETy1G,MAAM3nH,MAEM,IAANA,GAAyC,IAA9BmC,KAAKwkH,SAAS3B,KAAKtlH,aACzB,CAACyC,KAAK2kH,KAAM3kH,KAAK0kH,KAAM1kH,KAAK2kH,KAAM3kH,KAAK4kH,KAAM5kH,KAAKykH,KAAMzkH,KAAK4kH,KAAM5kH,KAAKykH,KAAMzkH,KAAK0kH,YAEtF30G,EAAS/P,KAAKmmH,MAAMtoH,MACX,OAAXkS,EAAiB,OAAO,WACrB+0G,QAAS59F,GAAKlnB,KACfyF,EAAQ,EAAJ5H,SACHqpB,EAAEzhB,IAAMyhB,EAAEzhB,EAAI,GACfzF,KAAKqmH,cAAcxoH,EAAGkS,EAAQmX,EAAEzhB,GAAIyhB,EAAEzhB,EAAI,GAAIyhB,EAAEzhB,EAAI,GAAIyhB,EAAEzhB,EAAI,IAC9DzF,KAAKsmH,YAAYzoH,EAAGkS,GAE5Bu2G,YAAYzoH,EAAGkS,SACP5R,EAAI4R,EAAOxS,WAEb+R,EAAIC,EACJuxB,EACAslF,EAAIG,EAHJC,EAAI,KACI9xE,EAAK3kC,EAAO5R,EAAI,GAAIw2C,EAAK5kC,EAAO5R,EAAI,GACxC4iC,EAAK/gC,KAAK0lH,YAAYhxE,EAAIC,OAE7B,IAAIv2C,EAAI,EAAGA,EAAID,EAAGC,GAAK,KAC1BkR,EAAKolC,EAAInlC,EAAKolC,EAAID,EAAK3kC,EAAO3R,GAAIu2C,EAAK5kC,EAAO3R,EAAI,GAClD0iC,EAAKC,EAAIA,EAAK/gC,KAAK0lH,YAAYhxE,EAAIC,GACxB,IAAP7T,GAAmB,IAAPC,EACdqlF,EAAKG,EAAIA,EAAK,EACVC,EAAGA,EAAE/nH,KAAKi2C,EAAIC,GACb6xE,EAAI,CAAC9xE,EAAIC,OACT,KACDh3B,EAAG8oG,EAAKvkB,EAAKwkB,EAAKC,KACX,IAAP7lF,EAAU,IAC4C,QAAnDnjB,EAAI3d,KAAK2lH,aAAar2G,EAAIC,EAAImlC,EAAIC,EAAI7T,EAAIC,IAAe,UAC7D0lF,EAAKvkB,EAAKwkB,EAAKC,GAAOhpG,MAClB,IACmD,QAAnDA,EAAI3d,KAAK2lH,aAAajxE,EAAIC,EAAIrlC,EAAIC,EAAIwxB,EAAID,IAAe,UAC7D4lF,EAAKC,EAAKF,EAAKvkB,GAAOvkF,EACvByoG,EAAKG,EAAIA,EAAKvmH,KAAK4mH,UAAUH,EAAKvkB,GAC9BkkB,GAAMG,GAAIvmH,KAAK6mH,MAAMhpH,EAAGuoH,EAAIG,EAAIC,EAAGA,EAAEjpH,QACrCipH,EAAGA,EAAE/nH,KAAKgoH,EAAKvkB,GACdskB,EAAI,CAACC,EAAKvkB,GAEjBkkB,EAAKG,EAAIA,EAAKvmH,KAAK4mH,UAAUF,EAAKC,GAC9BP,GAAMG,GAAIvmH,KAAK6mH,MAAMhpH,EAAGuoH,EAAIG,EAAIC,EAAGA,EAAEjpH,QACrCipH,EAAGA,EAAE/nH,KAAKioH,EAAKC,GACdH,EAAI,CAACE,EAAKC,MAGfH,EACFJ,EAAKG,EAAIA,EAAKvmH,KAAK4mH,UAAUJ,EAAE,GAAIA,EAAE,IACjCJ,GAAMG,GAAIvmH,KAAK6mH,MAAMhpH,EAAGuoH,EAAIG,EAAIC,EAAGA,EAAEjpH,aACpC,GAAIyC,KAAKyoE,SAAS5qE,GAAImC,KAAKykH,KAAOzkH,KAAK2kH,MAAQ,GAAI3kH,KAAK0kH,KAAO1kH,KAAK4kH,MAAQ,SAC1E,CAAC5kH,KAAK2kH,KAAM3kH,KAAK0kH,KAAM1kH,KAAK2kH,KAAM3kH,KAAK4kH,KAAM5kH,KAAKykH,KAAMzkH,KAAK4kH,KAAM5kH,KAAKykH,KAAMzkH,KAAK0kH,aAErF8B,EAETb,aAAar2G,EAAIC,EAAImlC,EAAIC,EAAI7T,EAAIC,UAClB,IACA,IAAPD,GAAmB,IAAPC,EAAU,MAAO,CAACzxB,EAAIC,EAAImlC,EAAIC,MAC1C7T,EAAKC,EAAI,OAAO,SAChB7+B,EAAG2Q,EAAGxU,EAAIyiC,GAAMC,EACZ,EAAJ1iC,GAAY6D,EAAIoN,GAAMolC,EAAKplC,IAAOtP,KAAK4kH,KAAOr1G,IAAOolC,EAAKplC,GAAKsD,EAAI7S,KAAK4kH,MAC/D,EAAJvmH,GAAY6D,EAAIoN,GAAMolC,EAAKplC,IAAOtP,KAAK0kH,KAAOn1G,IAAOolC,EAAKplC,GAAKsD,EAAI7S,KAAK0kH,MACpE,EAAJrmH,GAAYwU,EAAItD,GAAMolC,EAAKplC,IAAOvP,KAAK2kH,KAAOr1G,IAAOolC,EAAKplC,GAAKpN,EAAIlC,KAAK2kH,OAC5E9xG,EAAItD,GAAMolC,EAAKplC,IAAOvP,KAAKykH,KAAOn1G,IAAOolC,EAAKplC,GAAKpN,EAAIlC,KAAKykH,MAC7D3jF,GAAIxxB,EAAKpN,EAAGqN,EAAKsD,EAAGiuB,EAAK9gC,KAAK0lH,YAAYp2G,EAAIC,KAC7CmlC,EAAKxyC,EAAGyyC,EAAK9hC,EAAGkuB,EAAK/gC,KAAK0lH,YAAYhxE,EAAIC,KAGnD0xE,cAAcxoH,EAAGkS,EAAQ+2G,EAAKC,EAAKC,EAAKC,OACV/oH,EAAxBsoH,EAAInmH,MAAMoU,KAAK1E,OACf7R,EAAI8B,KAAKqlH,SAASmB,EAAE,GAAIA,EAAE,GAAIM,EAAKC,KAAMP,EAAEp1G,QAAQlT,EAAE,GAAIA,EAAE,KAC3DA,EAAI8B,KAAKqlH,SAASmB,EAAEA,EAAEjpH,OAAS,GAAIipH,EAAEA,EAAEjpH,OAAS,GAAIypH,EAAKC,KAAMT,EAAE/nH,KAAKP,EAAE,GAAIA,EAAE,IAC9EsoH,EAAIxmH,KAAKsmH,YAAYzoH,EAAG2oH,OACrB,IAAyB1lF,EAArB1iC,EAAI,EAAGD,EAAIqoH,EAAEjpH,OAAYwjC,EAAK/gC,KAAK4mH,UAAUJ,EAAEroH,EAAI,GAAIqoH,EAAEroH,EAAI,IAAKC,EAAID,EAAGC,GAAK,EACrF0iC,EAAKC,EAAIA,EAAK/gC,KAAK4mH,UAAUJ,EAAEpoH,GAAIooH,EAAEpoH,EAAI,IACrC0iC,GAAMC,IAAI3iC,EAAI4B,KAAK6mH,MAAMhpH,EAAGijC,EAAIC,EAAIylF,EAAGpoH,GAAID,EAAIqoH,EAAEjpH,aAE9CyC,KAAKyoE,SAAS5qE,GAAImC,KAAKykH,KAAOzkH,KAAK2kH,MAAQ,GAAI3kH,KAAK0kH,KAAO1kH,KAAK4kH,MAAQ,KACjF4B,EAAI,CAACxmH,KAAKykH,KAAMzkH,KAAK0kH,KAAM1kH,KAAK2kH,KAAM3kH,KAAK0kH,KAAM1kH,KAAK2kH,KAAM3kH,KAAK4kH,KAAM5kH,KAAKykH,KAAMzkH,KAAK4kH,cAElF4B,EAETK,MAAMhpH,EAAGuoH,EAAIG,EAAIC,EAAGpoH,QACXgoH,IAAOG,GAAI,KACZrkH,EAAG2Q,SACCuzG,QACD,EAAQA,EAAK,gBACb,EAAQA,EAAK,EAAQlkH,EAAIlC,KAAK2kH,KAAM9xG,EAAI7S,KAAK0kH,gBAC7C,EAAQ0B,EAAK,gBACb,EAAQA,EAAK,GAAQlkH,EAAIlC,KAAK2kH,KAAM9xG,EAAI7S,KAAK4kH,gBAC7C,GAAQwB,EAAK,gBACb,EAAQA,EAAK,EAAQlkH,EAAIlC,KAAKykH,KAAM5xG,EAAI7S,KAAK4kH,gBAC7C,EAAQwB,EAAK,gBACb,EAAQA,EAAK,EAAQlkH,EAAIlC,KAAKykH,KAAM5xG,EAAI7S,KAAK0kH,KAE/C8B,EAAEpoH,KAAO8D,GAAKskH,EAAEpoH,EAAI,KAAOyU,IAAM7S,KAAKyoE,SAAS5qE,EAAGqE,EAAG2Q,KACxD2zG,EAAEz2F,OAAO3xB,EAAG,EAAG8D,EAAG2Q,GAAIzU,GAAK,MAG3BooH,EAAEjpH,OAAS,MACR,IAAIM,EAAI,EAAGA,EAAI2oH,EAAEjpH,OAAQM,GAAI,EAAG,OAC7BO,GAAKP,EAAI,GAAK2oH,EAAEjpH,OAAQgE,GAAK1D,EAAI,GAAK2oH,EAAEjpH,QAC1CipH,EAAE3oH,KAAO2oH,EAAEpoH,IAAMooH,EAAEpoH,KAAOooH,EAAEjlH,IAC7BilH,EAAE3oH,EAAI,KAAO2oH,EAAEpoH,EAAI,IAAMooH,EAAEpoH,EAAI,KAAOooH,EAAEjlH,EAAI,MAC7CilH,EAAEz2F,OAAO3xB,EAAG,GAAIP,GAAK,UAGpBO,EAETinH,SAAS/1G,EAAIC,EAAIg9F,EAAIC,OACDnuG,EAAG6D,EAAG2Q,EAApB/K,EAAIoQ,EAAAA,KACJs0F,EAAK,EAAG,IACNj9F,GAAMvP,KAAK0kH,KAAM,OAAO,MACvBrmH,GAAK2B,KAAK0kH,KAAOn1G,GAAMi9F,GAAM1kG,IAAG+K,EAAI7S,KAAK0kH,KAAMxiH,EAAIoN,GAAMxH,EAAIzJ,GAAKkuG,QAClE,GAAIC,EAAK,EAAG,IACbj9F,GAAMvP,KAAK4kH,KAAM,OAAO,MACvBvmH,GAAK2B,KAAK4kH,KAAOr1G,GAAMi9F,GAAM1kG,IAAG+K,EAAI7S,KAAK4kH,KAAM1iH,EAAIoN,GAAMxH,EAAIzJ,GAAKkuG,MAErEA,EAAK,EAAG,IACNj9F,GAAMtP,KAAK2kH,KAAM,OAAO,MACvBtmH,GAAK2B,KAAK2kH,KAAOr1G,GAAMi9F,GAAMzkG,IAAG5F,EAAIlC,KAAK2kH,KAAM9xG,EAAItD,GAAMzH,EAAIzJ,GAAKmuG,QAClE,GAAID,EAAK,EAAG,IACbj9F,GAAMtP,KAAKykH,KAAM,OAAO,MACvBpmH,GAAK2B,KAAKykH,KAAOn1G,GAAMi9F,GAAMzkG,IAAG5F,EAAIlC,KAAKykH,KAAM5xG,EAAItD,GAAMzH,EAAIzJ,GAAKmuG,SAElE,CAACtqG,EAAG2Q,GAEb+zG,UAAU1kH,EAAG2Q,UACH3Q,IAAMlC,KAAKykH,KAAO,EACpBviH,IAAMlC,KAAK2kH,KAAO,EAAS,IAC1B9xG,IAAM7S,KAAK0kH,KAAO,EACnB7xG,IAAM7S,KAAK4kH,KAAO,EAAS,GAEnCc,YAAYxjH,EAAG2Q,UACL3Q,EAAIlC,KAAKykH,KAAO,EAClBviH,EAAIlC,KAAK2kH,KAAO,EAAS,IACxB9xG,EAAI7S,KAAK0kH,KAAO,EACjB7xG,EAAI7S,KAAK4kH,KAAO,EAAS,ICxTnC,MAAM9wE,GAAM,EAAI3xC,KAAK26B,GAAIp6B,GAAMP,KAAKO,IAEpC,SAASy2C,GAAOj7C,UACPA,EAAE,GAGX,SAASk7C,GAAOl7C,UACPA,EAAE,GAiBX,SAASgpH,GAAOhlH,EAAG2Q,EAAG5R,SACb,CAACiB,EAAIC,KAAK6zC,IAAI9zC,EAAI2Q,GAAK5R,EAAG4R,EAAI1Q,KAAK4zC,IAAI7zC,EAAI2Q,GAAK5R,GAG1C,MAAMkmH,eACPp3G,EAAQgxE,EAAK5nC,GAAQ6nC,EAAK5nC,GAAQc,UACrC,IAAIitE,GAAS,WAAYp3G,EA8LpC,SAAmBA,EAAQgxE,EAAIC,EAAI9mC,SAC3B/7C,EAAI4R,EAAOxS,OACXuE,EAAQ,IAAI6Q,aAAiB,EAAJxU,OAC1B,IAAIN,EAAI,EAAGA,EAAIM,IAAKN,EAAG,OACpBK,EAAI6R,EAAOlS,GACjBiE,EAAU,EAAJjE,GAASkjF,EAAGphF,KAAKu6C,EAAMh8C,EAAGL,EAAGkS,GACnCjO,EAAU,EAAJjE,EAAQ,GAAKmjF,EAAGrhF,KAAKu6C,EAAMh8C,EAAGL,EAAGkS,UAElCjO,EArMCslH,CAAUr3G,EAAQgxE,EAAIC,EAAI9mC,GAC1BvnC,aAAa8B,KAuMvB,UAAuB1E,EAAQgxE,EAAIC,EAAI9mC,OACjCr8C,EAAI,MACH,MAAMK,KAAK6R,QACRgxE,EAAGphF,KAAKu6C,EAAMh8C,EAAGL,EAAGkS,SACpBixE,EAAGrhF,KAAKu6C,EAAMh8C,EAAGL,EAAGkS,KACxBlS,EA5MsBwpH,CAAat3G,EAAQgxE,EAAIC,EAAI9mC,KAEvD7vC,YAAY0F,QACLu3G,YAAc,IAAIzG,GAAW9wG,QAC7Bk1G,QAAU,IAAI5D,WAAWtxG,EAAOxS,OAAS,QACzCgqH,WAAa,IAAIlG,WAAWtxG,EAAOxS,OAAS,QAC5CwS,OAAS/P,KAAKsnH,YAAYzlD,YAC1BkjD,QAEPj7G,qBACOw9G,YAAYx9G,cACZi7G,QACE/kH,KAET+kH,cACQ7yG,EAAIlS,KAAKsnH,YAAav3G,EAAS/P,KAAK+P,UAGtCmC,EAAE2wG,MAAQ3wG,EAAE2wG,KAAKtlH,OAAS,GAvClC,SAAmB2U,SACX4wG,UAACA,EAADjhD,OAAYA,GAAU3vD,MACvB,IAAIrU,EAAI,EAAGA,EAAIilH,EAAUvlH,OAAQM,GAAK,EAAG,OACtC4D,EAAI,EAAIqhH,EAAUjlH,GAClBU,EAAI,EAAIukH,EAAUjlH,EAAI,GACtBQ,EAAI,EAAIykH,EAAUjlH,EAAI,OACbgkE,EAAOxjE,GAAKwjE,EAAOpgE,KAAOogE,EAAOtjE,EAAI,GAAKsjE,EAAOpgE,EAAI,KACrDogE,EAAOtjE,GAAKsjE,EAAOpgE,KAAOogE,EAAOxjE,EAAI,GAAKwjE,EAAOpgE,EAAI,IACxD,MAAO,OAAO,SAErB,EA6B8BqmG,CAAU51F,GAAI,MAC1C41F,UAAYuZ,WAAW5sG,KAAK,CAAClX,OAAQwS,EAAOxS,OAAO,IAAI,CAACwB,EAAElB,IAAMA,IAClE8e,MAAK,CAAC9e,EAAGO,IAAM2R,EAAO,EAAIlS,GAAKkS,EAAO,EAAI3R,IAAM2R,EAAO,EAAIlS,EAAI,GAAKkS,EAAO,EAAI3R,EAAI,WAChF6H,EAAIjG,KAAK8nG,UAAU,GAAIziG,EAAIrF,KAAK8nG,UAAU9nG,KAAK8nG,UAAUvqG,OAAS,GACtE2pE,EAAS,CAAEn3D,EAAO,EAAI9J,GAAI8J,EAAO,EAAI9J,EAAI,GAAI8J,EAAO,EAAI1K,GAAI0K,EAAO,EAAI1K,EAAI,IAC3EpE,EAAI,KAAOkB,KAAK+vF,MAAMhrB,EAAO,GAAKA,EAAO,GAAIA,EAAO,GAAKA,EAAO,QAC7D,IAAIrpE,EAAI,EAAGM,EAAI4R,EAAOxS,OAAS,EAAGM,EAAIM,IAAKN,EAAG,OAC3CK,EAAIgpH,GAAOn3G,EAAO,EAAIlS,GAAIkS,EAAO,EAAIlS,EAAI,GAAIoD,GACnD8O,EAAO,EAAIlS,GAAKK,EAAE,GAClB6R,EAAO,EAAIlS,EAAI,GAAKK,EAAE,QAEnBopH,YAAc,IAAIzG,GAAW9wG,eAE3B/P,KAAK8nG,gBAGRib,EAAY/iH,KAAK+iH,UAAY/iH,KAAKsnH,YAAYvE,UAC9CF,EAAO7iH,KAAK6iH,KAAO7iH,KAAKsnH,YAAYzE,KACpCC,EAAY9iH,KAAK8iH,UAAY9iH,KAAKsnH,YAAYxE,UAC9CmC,EAAUjlH,KAAKilH,QAAQrvG,MAAM,GAC7B4xG,EAAYxnH,KAAKunH,WAAW3xG,MAAM,OAKnC,IAAI3P,EAAI,EAAG9H,EAAI4kH,EAAUxlH,OAAQ0I,EAAI9H,IAAK8H,EAAG,OAC1C/H,EAAI4kH,EAAU78G,EAAI,GAAM,EAAIA,EAAI,EAAIA,EAAI,IACxB,IAAlB88G,EAAU98G,KAA6B,IAAhBg/G,EAAQ/mH,KAAW+mH,EAAQ/mH,GAAK+H,OAExD,IAAIpI,EAAI,EAAGM,EAAI0kH,EAAKtlH,OAAQM,EAAIM,IAAKN,EACxC2pH,EAAU3E,EAAKhlH,IAAMA,EAInBglH,EAAKtlH,QAAU,GAAKslH,EAAKtlH,OAAS,SAC/BulH,UAAY,IAAIzB,WAAW,GAAGzrG,MAAM,QACpCmtG,UAAY,IAAI1B,WAAW,GAAGzrG,MAAM,QACpCktG,UAAU,GAAKD,EAAK,QACpBC,UAAU,GAAKD,EAAK,QACpBC,UAAU,GAAKD,EAAK,GACzBoC,EAAQpC,EAAK,IAAM,EACC,IAAhBA,EAAKtlH,SAAc0nH,EAAQpC,EAAK,IAAM,IAG9C4E,QAAQvgD,UACC,IAAIq9C,GAAQvkH,KAAMknE,cAEhBrpE,SACHonH,QAACA,EAADpC,KAAUA,EAAV0E,WAAgBA,EAAhBxE,UAA4BA,EAA5BD,UAAuCA,EAAvChb,UAAkDA,GAAa9nG,QAGjE8nG,EAAW,OACP//F,EAAI+/F,EAAU3yF,QAAQtX,UACxBkK,EAAI,UAAS+/F,EAAU//F,EAAI,SAC3BA,EAAI+/F,EAAUvqG,OAAS,UAASuqG,EAAU//F,EAAI,WAI9Cq+G,EAAKnB,EAAQpnH,OACP,IAARuoH,EAAW,WACXngH,EAAImgH,EAAIp1G,GAAM,IACf,UACKA,EAAK8xG,EAAU78G,GACrBA,EAAIA,EAAI,GAAM,EAAIA,EAAI,EAAIA,EAAI,EAC1B68G,EAAU78G,KAAOpI,EAAG,UACxBoI,EAAI88G,EAAU98G,IACH,IAAPA,EAAU,OACN/H,EAAI2kH,GAAM0E,EAAW1pH,GAAK,GAAKglH,EAAKtlH,oBACtCW,IAAM8S,UAAU9S,WAGf+H,IAAMmgH,GAEjBvzE,KAAK3wC,EAAG2Q,EAAGhV,EAAI,OACRqE,GAAKA,IAASA,IAAO2Q,GAAKA,IAASA,EAAI,OAAQ,QAC9CvI,EAAKzM,MACPQ,QACIA,EAAI2B,KAAK4lH,MAAM/nH,EAAGqE,EAAG2Q,KAAO,GAAKxU,IAAMR,GAAKQ,IAAMiM,GAAIzM,EAAIQ,SAC3DA,EAETunH,MAAM/nH,EAAGqE,EAAG2Q,SACJoyG,QAACA,EAADpC,KAAUA,EAAV0E,WAAgBA,EAAhBxE,UAA4BA,EAA5BD,UAAuCA,EAAvC/yG,OAAkDA,GAAU/P,SAC9C,IAAhBilH,EAAQpnH,KAAckS,EAAOxS,OAAQ,OAAQM,EAAI,IAAMkS,EAAOxS,QAAU,OACxEc,EAAIR,EACJ6pH,EAAKhlH,GAAIR,EAAI6N,EAAW,EAAJlS,GAAQ,GAAK6E,GAAImQ,EAAI9C,EAAW,EAAJlS,EAAQ,GAAI,SAC1DuoH,EAAKnB,EAAQpnH,OACfoI,EAAImgH,IACL,KACGt+G,EAAIg7G,EAAU78G,SACZ0qC,EAAKjuC,GAAIR,EAAI6N,EAAW,EAAJjI,GAAQ,GAAKpF,GAAImQ,EAAI9C,EAAW,EAAJjI,EAAQ,GAAI,MAC9D6oC,EAAK+2E,IAAIA,EAAK/2E,EAAItyC,EAAIyJ,GAC1B7B,EAAIA,EAAI,GAAM,EAAIA,EAAI,EAAIA,EAAI,EAC1B68G,EAAU78G,KAAOpI,EAAG,SACxBoI,EAAI88G,EAAU98G,IACH,IAAPA,EAAU,IACZA,EAAI48G,GAAM0E,EAAW1pH,GAAK,GAAKglH,EAAKtlH,QAChC0I,IAAM6B,GACJpF,GAAIR,EAAI6N,EAAW,EAAJ9J,GAAQ,GAAKvD,GAAImQ,EAAI9C,EAAW,EAAJ9J,EAAQ,GAAI,GAAKyhH,EAAI,OAAOzhH,eAIxEA,IAAMmgH,UACR/nH,EAETg6E,OAAOtsD,SACCgtB,EAAoB,MAAXhtB,EAAkBA,EAAU,IAAIkoB,QAAO9sC,GAChD4I,OAACA,EAADgzG,UAASA,EAATD,UAAoBA,GAAa9iH,SAClC,IAAInC,EAAI,EAAGM,EAAI4kH,EAAUxlH,OAAQM,EAAIM,IAAKN,EAAG,OAC1CO,EAAI2kH,EAAUllH,MAChBO,EAAIP,EAAG,eACLqnH,EAAoB,EAAfpC,EAAUjlH,GACfsnH,EAAoB,EAAfrC,EAAU1kH,GACrB2tB,EAAQuoB,OAAOvkC,EAAOm1G,GAAKn1G,EAAOm1G,EAAK,IACvCn5F,EAAQyoB,OAAOzkC,EAAOo1G,GAAKp1G,EAAOo1G,EAAK,gBAEpCwC,WAAW57F,GACTgtB,GAAUA,EAAO13C,QAE1BumH,aAAa77F,EAAS9qB,EAAI,SAClB83C,EAAoB,MAAXhtB,EAAkBA,EAAU,IAAIkoB,QAAO9sC,GAChD4I,OAACA,GAAU/P,SACZ,IAAInC,EAAI,EAAGM,EAAI4R,EAAOxS,OAAQM,EAAIM,EAAGN,GAAK,EAAG,OAC1CqE,EAAI6N,EAAOlS,GAAIgV,EAAI9C,EAAOlS,EAAI,GACpCkuB,EAAQuoB,OAAOpyC,EAAIjB,EAAG4R,GACtBkZ,EAAQjc,IAAI5N,EAAG2Q,EAAG5R,EAAG,EAAG6yC,WAEnBiF,GAAUA,EAAO13C,QAE1BsmH,WAAW57F,SACHgtB,EAAoB,MAAXhtB,EAAkBA,EAAU,IAAIkoB,QAAO9sC,GAChD07G,KAACA,EAAD9yG,OAAOA,GAAU/P,KACjB27B,EAAc,EAAVknF,EAAK,GAAQ1kH,EAAI0kH,EAAKtlH,OAChCwuB,EAAQuoB,OAAOvkC,EAAO4rB,GAAI5rB,EAAO4rB,EAAI,QAChC,IAAI99B,EAAI,EAAGA,EAAIM,IAAKN,EAAG,OACpB89B,EAAI,EAAIknF,EAAKhlH,GACnBkuB,EAAQyoB,OAAOzkC,EAAO4rB,GAAI5rB,EAAO4rB,EAAI,WAEvC5P,EAAQwoB,YACDwE,GAAUA,EAAO13C,QAE1BwmH,oBACQx3G,EAAU,IAAIyiF,eACf60B,WAAWt3G,GACTA,EAAQhP,QAEjBymH,eAAejqH,EAAGkuB,SACVgtB,EAAoB,MAAXhtB,EAAkBA,EAAU,IAAIkoB,QAAO9sC,GAChD4I,OAACA,EAAD+yG,UAASA,GAAa9iH,KACtBsY,EAAyB,EAApBwqG,EAAUjlH,GAAK,GACpB0a,EAAwB,EAAnBuqG,EAAUjlH,EAAI,GACnBysD,EAAwB,EAAnBw4D,EAAUjlH,EAAI,UACzBkuB,EAAQuoB,OAAOvkC,EAAOuI,GAAKvI,EAAOuI,EAAK,IACvCyT,EAAQyoB,OAAOzkC,EAAOwI,GAAKxI,EAAOwI,EAAK,IACvCwT,EAAQyoB,OAAOzkC,EAAOu6C,GAAKv6C,EAAOu6C,EAAK,IACvCv+B,EAAQwoB,YACDwE,GAAUA,EAAO13C,kCAGlByhH,UAACA,GAAa9iH,SACf,IAAInC,EAAI,EAAGM,EAAI2kH,EAAUvlH,OAAS,EAAGM,EAAIM,IAAKN,QAC3CmC,KAAK+nH,gBAAgBlqH,GAG/BkqH,gBAAgBlqH,SACRwS,EAAU,IAAIyiF,eACfg1B,eAAejqH,EAAGwS,GAChBA,EAAQhP,SCzNnB,SAASkjH,GAAQlyF,GACf4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAE7BkyF,GAAQnpF,WAAa,MACX,mBACI,WACE,UAEJ,CAAC,MACD,SACA,kBACI,GACX,MACO,SACA,kBACI,GACX,MACO,YACA,gBACC,SACC,GACT,MACO,cACA,eACC,SACC,UACC,CAAC,EAAE,KAAM,KAAM,CAAC,IAAK,cACrB,MACD,gBACC,SACC,IAEX,MACO,UACA,iBACG,UAGf,MAAM4sF,GAAgB,EAAE,KAAM,IAAK,IAAK,KAsBxC,SAASC,GAAa/pH,SACdgE,EAAIhE,EAAE,GAAG,GACT2U,EAAI3U,EAAE,GAAG,OACXC,EAAID,EAAEX,OAAS,OAEZW,EAAEC,GAAG,KAAO+D,GAAKhE,EAAEC,GAAG,KAAO0U,IAAK1U,SAElC,IAAMD,EAAEwB,MAAM,EAAGvB,EAAI,GAAG+N,KAAK,KAAO,IA5B7ClE,GAASu8G,GAAStrF,GAAW,CAC3B5pB,UAAUtQ,EAAG0yB,SACLkS,EAAK5kC,EAAE4kC,IAAM,OACbnX,EAAOiF,EAAM3wB,WAEd0rB,IAASA,EAAKjvB,OAAQ,OAAOk0B,MAE9BjzB,EAAIO,EAAEkI,KACVzI,EAAIA,EAAI,CAAC,EAAG,EAAGA,EAAE,GAAIA,EAAE,KAAOA,EAAIO,EAAEsH,QAAU,CAAC7H,EAAE,GAAG,GAAIA,EAAE,GAAG,GAAIA,EAAE,GAAG,GAAIA,EAAE,GAAG,IAAMwpH,SAC/EP,EAAUznH,KAAKqB,MAAQ8lH,GAAS1yG,KAAK+X,EAAMztB,EAAEmD,EAAGnD,EAAE8T,GAAG40G,QAAQjpH,OAE9D,IAAIX,EAAI,EAAGM,EAAIquB,EAAKjvB,OAAQM,EAAIM,IAAKN,EAAG,OACrCwS,EAAUo3G,EAAQhC,YAAY5nH,GACpC2uB,EAAK3uB,GAAG8lC,GAAMtzB,EAAU43G,GAAa53G,GAAW,YAG3CohB,EAAML,OAAOryB,EAAEizB,YAAYJ,SAAS+R,wDCtB3CukF,GAAe/lH,KAAK26B,GAAK,IAEzBqrF,GAAK,KACT,SAASC,SAEHv6G,EACA0kE,EACAT,EACAqB,EACAE,EACAllB,EACAh2C,EAPAlR,EAAO,CAAC,IAAK,KAQbohH,EAASC,GACTC,EAAQ,GACR/rF,EAASr6B,KAAKq6B,OACd4rF,EAAQ,YAkEH5T,EAAMgU,EAAOn6C,EAAKnH,WAOrBuhD,EACA/4G,EACAE,EARA84G,EAASr6C,EAAInsE,EACbymH,EAASt6C,EAAIx7D,EACb+1G,EAAWzmH,KAAK6Q,KAAK/L,EAAK,GAAKA,EAAK,GAAKA,EAAK,GAAKA,EAAK,IACxDzI,EAAI6pH,EAAOphH,GACX0pC,EAAKnU,IAAW,GAAK,GAAK,EAC1B10B,GAAK6oC,GAKF83E,EAAOjqH,EAAEsJ,GAAK6oC,MACnBjhC,IAAO+4G,EAAK,GACZ74G,IAAO64G,EAAK,KACRtmH,KAAKsC,IAAItC,KAAKI,IAAImN,GAAKvN,KAAKI,IAAIqN,KAAQg5G,QAC5Cv6C,EAAInsE,EAAIwmH,EAASh5G,EACjB2+D,EAAIx7D,EAAI81G,EAAS/4G,IACby+D,EAAInsE,EAAImsE,EAAI/+D,GAAK,GAAK++D,EAAIx7D,EAAIw7D,EAAI9+D,GAAK,GAAK8+D,EAAInsE,EAAImsE,EAAI35B,GAAKztC,EAAK,IAAMonE,EAAIx7D,EAAIw7D,EAAI15B,GAAK1tC,EAAK,OAE7FigE,IAAW2hD,GAAax6C,EAAKm6C,EAAOvhH,EAAK,QACvCigE,GAAU4hD,GAAaz6C,EAAKnH,IAAS,SASpCnvC,EARAgxF,EAAS16C,EAAI06C,OACbnqG,EAAIyvD,EAAI7hE,OAAS,EACjBq7D,EAAK5gE,EAAK,IAAM,EAChBg6B,EAAKotC,EAAInsE,GAAK0c,GAAK,GACnByyD,EAAU,IAALpwC,EACL+nF,EAAM,GAAK33C,EACX11C,EAAI0yC,EAAI15B,GAAK05B,EAAI9+D,GACjBrN,GAAKmsE,EAAIx7D,EAAIw7D,EAAI9+D,IAAMs4D,GAAM5mC,GAAM,GAG9B7iC,EAAI,EAAGA,EAAIu9B,EAAGv9B,IAAK,CAC1B25B,EAAO,MAEF,IAAIl6B,EAAI,EAAGA,GAAK+gB,EAAG/gB,IACtB2qH,EAAMtmH,EAAIrE,IAAMk6B,GAAQixF,GAAOnrH,EAAI+gB,GAAKmZ,EAAOgxF,EAAO3qH,EAAIwgB,EAAI/gB,MAAQwzE,EAAK,GAG7EnvE,GAAK2lE,SAGPwG,EAAI06C,OAAS,MACN,SAKN,SA/GTX,EAAMlnH,OAAS,mBACT+nH,WAiDcn+C,GAClBA,EAAOt+D,MAAQs+D,EAAOptB,OAAS,MAC3B++B,EAAQt6E,KAAK6Q,KAAK83D,EAAOrtB,WAAW,MAAM4tD,aAAa,EAAG,EAAG,EAAG,GAAG7+E,KAAKjvB,QAAU,GACtFutE,EAAOt+D,MAAQ,KAAYiwE,EAC3B3R,EAAOptB,OAASyqE,GAAK1rC,MACjB1wD,EAAU++C,EAAOrtB,WAAW,aAChC1xB,EAAQ+/C,UAAY//C,EAAQsgD,YAAc,MAC1CtgD,EAAQunD,UAAY,SACb,CACLvnD,QAASA,EACT0wD,MAAOA,GA3Dah/B,CAAWqtB,MAC7B09C,EA6YR,SAAmBrqH,OACbsD,EAAI,GACJ5D,GAAK,SAEAA,EAAIM,GAAGsD,EAAE5D,GAAK,SAEhB4D,EAnZOynH,EAAWjiH,EAAK,IAAM,GAAKA,EAAK,IACxCigE,EAAS,KACT/oE,EAAIoqH,EAAMhrH,OACVM,GAAK,EACLsrH,EAAO,GACP38F,EAAO+7F,EAAM7mH,KAAIwQ,KACnBrE,KAAMA,EAAKqE,GACXqgE,KAAMA,EAAKrgE,GACXwqE,MAAOvJ,EAAUjhE,GACjBk2F,OAAQ/0B,EAAWnhE,GACnBi8C,OAAQA,EAAOj8C,GACfjL,QAAS6qE,EAAS5/D,GAAK,OACvBiG,QAASA,EAAQjG,GACjBk3G,KAAM,EACNC,KAAM,EACN30E,GAAI,EACJC,GAAI,EACJrlC,GAAI,EACJC,GAAI,EACJ+5G,SAAS,EACTP,OAAQ,KACR55F,MAAOjd,MACLyK,MAAK,CAAClb,EAAGlD,IAAMA,EAAE0I,KAAOxF,EAAEwF,SAErBpJ,EAAIM,GAAG,KACV+T,EAAIsa,EAAK3uB,GACbqU,EAAEhQ,EAAI+E,EAAK,IAAMu1B,IAAW,KAAO,EACnCtqB,EAAEW,EAAI5L,EAAK,IAAMu1B,IAAW,KAAO,EACnC+sF,GAAYN,EAAiB/2G,EAAGsa,EAAM3uB,GAElCqU,EAAEo3G,SAAW9U,EAAMgU,EAAOt2G,EAAGg1D,KAC/BiiD,EAAK1qH,KAAKyT,GACNg1D,EAAQsiD,GAAYtiD,EAAQh1D,GAAQg1D,EAAS,CAAC,CAChDhlE,EAAGgQ,EAAEhQ,EAAIgQ,EAAE5C,GACXuD,EAAGX,EAAEW,EAAIX,EAAE3C,IACV,CACDrN,EAAGgQ,EAAEhQ,EAAIgQ,EAAEwiC,GACX7hC,EAAGX,EAAEW,EAAIX,EAAEyiC,KAGbziC,EAAEhQ,GAAK+E,EAAK,IAAM,EAClBiL,EAAEW,GAAK5L,EAAK,IAAM,UAIfkiH,GAmETf,EAAMG,MAAQ,SAAUxpH,UAClBgB,UAAUxC,QACZgrH,EAAQxpH,EACDqpH,GAEAG,GAIXH,EAAMnhH,KAAO,SAAUlI,UACjBgB,UAAUxC,QACZ0J,EAAO,EAAElI,EAAE,IAAKA,EAAE,IACXqpH,GAEAnhH,GAIXmhH,EAAM71C,KAAO,SAAUxzE,UACjBgB,UAAUxC,QACZg1E,EAAOk3C,GAAQ1qH,GACRqpH,GAEA71C,GAIX61C,EAAMj1C,UAAY,SAAUp0E,UACtBgB,UAAUxC,QACZ41E,EAAYs2C,GAAQ1qH,GACbqpH,GAEAj1C,GAIXi1C,EAAM/0C,WAAa,SAAUt0E,UACvBgB,UAAUxC,QACZ81E,EAAao2C,GAAQ1qH,GACdqpH,GAEA/0C,GAIX+0C,EAAMj6D,OAAS,SAAUpvD,UACnBgB,UAAUxC,QACZ4wD,EAASs7D,GAAQ1qH,GACVqpH,GAEAj6D,GAIXi6D,EAAMv6G,KAAO,SAAU9O,UACjBgB,UAAUxC,QACZsQ,EAAO47G,GAAQ1qH,GACRqpH,GAEAv6G,GAIXu6G,EAAMC,OAAS,SAAUtpH,UACnBgB,UAAUxC,QACZ8qH,EAASqB,GAAQ3qH,IAAMA,EAChBqpH,GAEAC,GAIXD,EAAMt2C,SAAW,SAAU/yE,UACrBgB,UAAUxC,QACZu0E,EAAW23C,GAAQ1qH,GACZqpH,GAEAt2C,GAIXs2C,EAAMjwG,QAAU,SAAUpZ,UACpBgB,UAAUxC,QACZ4a,EAAUsxG,GAAQ1qH,GACXqpH,GAEAjwG,GAIXiwG,EAAM5rF,OAAS,SAAUz9B,UACnBgB,UAAUxC,QACZi/B,EAASz9B,EACFqpH,GAEA5rF,GAIJ4rF,EAIT,SAASmB,GAAYN,EAAiB/2G,EAAGsa,EAAMm9F,OACzCz3G,EAAE62G,YACF1qH,EAAI4qH,EAAgBl9F,QACpB0wD,EAAQwsC,EAAgBxsC,MAC5Bp+E,EAAE4+E,UAAU,EAAG,EAAG,KAAYR,EAAO0rC,GAAK1rC,OAKtC79D,EACAgrG,EACAjuF,EACA99B,EACAO,EARA8D,EAAI,EACJ2Q,EAAI,EACJg3G,EAAO,EACP1rH,EAAIquB,EAAKjvB,aAMXosH,IAEOA,EAAKxrH,GAAG,IACf+T,EAAIsa,EAAKm9F,GACTtrH,EAAEsxE,OACFtxE,EAAEk0E,KAAOrgE,EAAEwqE,MAAQ,IAAMxqE,EAAEk2F,OAAS,QAAUl2F,EAAEjL,KAAO,GAAKw1E,GAAS,MAAQvqE,EAAEqgE,KAC/E3zD,EAAIvgB,EAAEo0E,YAAYvgE,EAAErE,KAAO,KAAKrB,MAAQiwE,EACxC9gD,EAAIzpB,EAAEjL,MAAQ,EAEViL,EAAEi8C,OAAQ,KACR8gC,EAAK9sF,KAAK6zC,IAAI9jC,EAAEi8C,OAAS+5D,IACzB5sB,EAAKn5F,KAAK4zC,IAAI7jC,EAAEi8C,OAAS+5D,IACzB4B,EAAMlrG,EAAI08E,EACVyuB,EAAMnrG,EAAIqwE,EACV+6B,EAAMruF,EAAI2/D,EACV2uB,EAAMtuF,EAAIszD,EACdrwE,EAAIzc,KAAKuC,IAAIvC,KAAKI,IAAIunH,EAAMG,GAAM9nH,KAAKI,IAAIunH,EAAMG,IAAQ,IAAQ,GAAK,EACtEtuF,IAAMx5B,KAAKuC,IAAIvC,KAAKI,IAAIwnH,EAAMC,GAAM7nH,KAAKI,IAAIwnH,EAAMC,SAEnDprG,EAAIA,EAAI,IAAQ,GAAK,KAGnB+c,EAAIkuF,IAAMA,EAAOluF,GAEjBz5B,EAAI0c,GAAKq3B,OACX/zC,EAAI,EACJ2Q,GAAKg3G,EACLA,EAAO,GAGLh3G,EAAI8oB,GAAKwsF,GAAI,MACjB9pH,EAAEsR,WAAWzN,GAAK0c,GAAK,IAAM69D,GAAQ5pE,GAAK8oB,GAAK,IAAM8gD,GACjDvqE,EAAEi8C,QAAQ9vD,EAAE8vD,OAAOj8C,EAAEi8C,OAAS+5D,IAClC7pH,EAAEw1E,SAAS3hE,EAAErE,KAAM,EAAG,GAElBqE,EAAEiG,UACJ9Z,EAAEiuE,UAAY,EAAIp6D,EAAEiG,QACpB9Z,EAAEy1E,WAAW5hE,EAAErE,KAAM,EAAG,IAG1BxP,EAAEuxE,UACF19D,EAAE1F,MAAQoS,EACV1M,EAAEwrC,OAAS/hB,EACXzpB,EAAEk3G,KAAOlnH,EACTgQ,EAAEm3G,KAAOx2G,EACTX,EAAEwiC,GAAK91B,GAAK,EACZ1M,EAAEyiC,GAAKhZ,GAAK,EACZzpB,EAAE5C,IAAM4C,EAAEwiC,GACVxiC,EAAE3C,IAAM2C,EAAEyiC,GACVziC,EAAEo3G,SAAU,EACZpnH,GAAK0c,UAGHsrG,EAAS7rH,EAAEgtG,aAAa,EAAG,EAAG,KAAY5uB,EAAO0rC,GAAK1rC,GAAOjwD,KAC7Du8F,EAAS,KAEJY,GAAM,OACbz3G,EAAIsa,EAAKm9F,IACFL,aAEPM,GADAhrG,EAAI1M,EAAE1F,QACK,EACXmvB,EAAIzpB,EAAEyiC,GAAKziC,EAAE3C,GAER1R,EAAI,EAAGA,EAAI89B,EAAIiuF,EAAK/rH,IAAKkrH,EAAOlrH,GAAK,KAGjC,OADTqE,EAAIgQ,EAAEk3G,MACS,OACfv2G,EAAIX,EAAEm3G,SACFc,EAAO,EACPC,GAAW,MAEVhsH,EAAI,EAAGA,EAAIu9B,EAAGv9B,IAAK,KACjBP,EAAI,EAAGA,EAAI+gB,EAAG/gB,IAAK,KAClB0D,EAAIqoH,EAAMxrH,GAAKP,GAAK,GACpBuW,EAAI81G,QAAQr3G,EAAIzU,IAAkB8D,EAAIrE,IAAM,GAAK,GAAK,GAAKA,EAAI,GAAK,EACxEkrH,EAAOxnH,IAAM6S,EACb+1G,GAAQ/1G,EAGN+1G,EAAMC,EAAUhsH,GAClB8T,EAAE3C,KACFosB,IACAv9B,IACAyU,KAIJX,EAAEyiC,GAAKziC,EAAE3C,GAAK66G,EACdl4G,EAAE62G,OAASA,EAAOrpH,MAAM,GAAIwS,EAAEyiC,GAAKziC,EAAE3C,IAAMq6G,KAK/C,SAASf,GAAax6C,EAAKm6C,EAAO3gD,GAChCA,IAAO,UAQH9vC,EAPAgxF,EAAS16C,EAAI06C,OACbnqG,EAAIyvD,EAAI7hE,OAAS,EACjBy0B,EAAKotC,EAAInsE,GAAK0c,GAAK,GACnByyD,EAAU,IAALpwC,EACL+nF,EAAM,GAAK33C,EACX11C,EAAI0yC,EAAI15B,GAAK05B,EAAI9+D,GACjBrN,GAAKmsE,EAAIx7D,EAAIw7D,EAAI9+D,IAAMs4D,GAAM5mC,GAAM,GAG9B7iC,EAAI,EAAGA,EAAIu9B,EAAGv9B,IAAK,CAC1B25B,EAAO,MAEF,IAAIl6B,EAAI,EAAGA,GAAK+gB,EAAG/gB,QACjBk6B,GAAQixF,GAAOnrH,EAAI+gB,GAAKmZ,EAAOgxF,EAAO3qH,EAAIwgB,EAAI/gB,MAAQwzE,EAAK,IAAMm3C,EAAMtmH,EAAIrE,GAAI,OAAO,EAG7FqE,GAAK2lE,SAGA,EAGT,SAAS2hD,GAAYtiD,EAAQh1D,OACvB63B,EAAKm9B,EAAO,GACZl9B,EAAKk9B,EAAO,GACZh1D,EAAEhQ,EAAIgQ,EAAE5C,GAAKy6B,EAAG7nC,IAAG6nC,EAAG7nC,EAAIgQ,EAAEhQ,EAAIgQ,EAAE5C,IAClC4C,EAAEW,EAAIX,EAAE3C,GAAKw6B,EAAGl3B,IAAGk3B,EAAGl3B,EAAIX,EAAEW,EAAIX,EAAE3C,IAClC2C,EAAEhQ,EAAIgQ,EAAEwiC,GAAK1K,EAAG9nC,IAAG8nC,EAAG9nC,EAAIgQ,EAAEhQ,EAAIgQ,EAAEwiC,IAClCxiC,EAAEW,EAAIX,EAAEyiC,GAAK3K,EAAGn3B,IAAGm3B,EAAGn3B,EAAIX,EAAEW,EAAIX,EAAEyiC,IAGxC,SAASm0E,GAAarnH,EAAGlD,UAChBkD,EAAES,EAAIT,EAAEizC,GAAKn2C,EAAE,GAAG2D,GAAKT,EAAES,EAAIT,EAAE6N,GAAK/Q,EAAE,GAAG2D,GAAKT,EAAEoR,EAAIpR,EAAEkzC,GAAKp2C,EAAE,GAAGsU,GAAKpR,EAAEoR,EAAIpR,EAAE8N,GAAKhR,EAAE,GAAGsU,EAGhG,SAASy1G,GAAkBrhH,OACrBhB,EAAIgB,EAAK,GAAKA,EAAK,UAChB,SAAUa,SACR,CAAC7B,GAAK6B,GAAK,IAAM3F,KAAK4zC,IAAIjuC,GAAIA,EAAI3F,KAAK6zC,IAAIluC,KA4CtD,SAAS2hH,GAAQv3G,SACK,mBAANA,EAAmBA,EAAI,kBAC5BA,GAIX,IAAIw3G,GAAU,CACZW,YAAa/B,GACbgC,YAhDF,SAA2BrjH,OAErByI,EADK,EACKzI,EAAK,GAAKA,EAAK,GACzB/E,EAAI,EACJ2Q,EAAI,SACD,SAAU/K,OACX7F,EAAO6F,EAAI,GAAK,EAAI,SAEhB3F,KAAK6Q,KAAK,EAAI,EAAI/Q,EAAO6F,GAAK7F,EAAO,QACtC,EACHC,GAAKwN,aAGF,EACHmD,GAbG,aAgBA,EACH3Q,GAAKwN,gBAILmD,GArBG,QAyBA,CAAC3Q,EAAG2Q,MAyBf,MAAMkoG,GAAS,CAAC,IAAK,IAAK,OAAQ,WAAY,YAAa,aAAc,SACnEnsE,GAAS,CAAC,OAAQ,OAAQ,SAAU,WAAY,YAAa,cACnE,SAAS27E,GAAUl4F,GACjB4G,GAAUt5B,KAAKK,KAAMooH,KAAS/1F,GAEhCk4F,GAAUnvF,WAAa,MACb,qBACI,WACE,UAEJ,CAAC,MACD,YACA,gBACC,SACC,GACT,MACO,YACA,eACA,UACG,cACV,MACO,iBACA,eACA,UACG,UACV,MACO,kBACA,eACA,UACG,UACV,MACO,gBACA,eACA,UACG,IACV,MACO,qBACA,eACC,mBACE,CAAC,GAAI,KACf,MACO,cACA,eACA,UACG,GACV,MACO,YACA,SACP,MACO,cACA,gBACE,CAAC,cAAe,gBACzB,MACO,eACA,eACA,GACP,MACO,UACA,gBACC,SACC,UACC2/E,MAGf/yG,GAASuiH,GAAWtxF,GAAW,CAC7B5pB,UAAUtQ,EAAG0yB,IACP1yB,EAAEkI,MAAUlI,EAAEkI,KAAK,IAAMlI,EAAEkI,KAAK,IAClCnJ,EAAM,qDAQFmzB,EAAMlyB,EAAEizB,gBAERf,GAAOQ,EAAMyE,QAAQzE,EAAM+E,UAAYoY,GAAOlX,eAPtCyb,SACNj1C,EAAIa,EAAEo0C,UACLruC,EAAW5G,IAAMuzB,EAAMO,SAAS9zB,EAAElB,YAKsB,aAC3DwvB,EAAOiF,EAAMmE,YAAYnE,EAAMmF,QAAQ91B,OACvCI,EAASlB,KAAKqB,MACdsiC,EAAK5kC,EAAE4kC,IAAMo3E,OAEfv2G,EADAstE,EAAW/yE,EAAE+yE,UAAY,MAE7BhtE,EAAWgtE,GAAYttE,EAAQzF,EAAEyrH,cAAgB14C,EAAWtuE,EAASsuE,GAEjEttE,EAAO,OACHimH,EAAQ34C,EACR44C,EAAY/mH,GAAM,OAANA,GAAgBd,OAAOwD,GAAOmmB,EAAMi+F,IAAQjmH,MAAMA,GAEpEstE,EAAW5vE,GAAKwoH,EAAUD,EAAMvoH,IAGlCsqB,EAAK5qB,SAAQkG,IACXA,EAAE67B,EAAG,IAAM3xB,IACXlK,EAAE67B,EAAG,IAAM3xB,IACXlK,EAAE67B,EAAG,IAAM,WAGP4kF,EAAQrnH,EAAOqnH,MAAM/7F,GAAM3e,KAAK9O,EAAE8O,MAAM5G,KAAKlI,EAAEkI,MAAQ,CAAC,IAAK,MAAMkR,QAAQpZ,EAAEoZ,SAAW,GAAGkwG,OAAOtpH,EAAEspH,QAAU,eAAel6D,OAAOpvD,EAAEovD,QAAU,GAAGokB,KAAKxzE,EAAEwzE,MAAQ,cAAcY,UAAUp0E,EAAEo0E,WAAa,UAAUE,WAAWt0E,EAAEs0E,YAAc,UAAUvB,SAASA,GAAUt1C,OAAOA,UAAQt7B,SAC1R+F,EAAO/F,EAAO+F,OACdyI,EAAKzI,EAAK,IAAM,EAChB2I,EAAK3I,EAAK,IAAM,EAChB9I,EAAIoqH,EAAMhrH,WAEX,IAAWqhB,EAAG9W,EAAVjK,EAAI,EAASA,EAAIM,IAAKN,EAC7B+gB,EAAI2pG,EAAM1qH,GACViK,EAAI8W,EAAEuQ,MACNrnB,EAAE67B,EAAG,IAAM/kB,EAAE1c,EAAIwN,EACjB5H,EAAE67B,EAAG,IAAM/kB,EAAE/L,EAAIjD,EACjB9H,EAAE67B,EAAG,IAAM/kB,EAAE2zD,KACbzqE,EAAE67B,EAAG,IAAM/kB,EAAE3X,KACba,EAAE67B,EAAG,IAAM/kB,EAAE89D,MACb50E,EAAE67B,EAAG,IAAM/kB,EAAEwpF,OACbtgG,EAAE67B,EAAG,IAAM/kB,EAAEuvC,cAGR18B,EAAML,OAAOH,GAAKW,SAAS+R,0DCzkBtC,MAAMgnF,GAASxsH,GAAK,IAAIysH,WAAWzsH,GAC7B0sH,GAAU1sH,GAAK,IAAI2sH,YAAY3sH,GAC/B4sH,GAAU5sH,GAAK,IAAI09G,YAAY19G,GA4FrC,SAAS2D,GAAM3D,EAAGiW,EAAGtS,SACbusB,GAAQja,EAAI,IAAQu2G,GAASv2G,EAAI,MAAUy2G,GAAUE,IAAS5sH,UAChE2D,GAAOusB,EAAKjnB,IAAItF,GACbusB,EAGT,SAAS28F,GAAW92G,EAAOrW,EAAGotH,SACtBn4F,EAAM,GAAKj1B,QACV,CACLoB,IAAK6zB,EACL9zB,MAAO8zB,EACPtuB,MAAOymH,EAAMvrH,QACbi0C,OAAQz/B,EAAMy/B,OACdz/B,MAAOA,EAAMA,MACbjN,KAAMiN,EAAMjN,KAEZikH,MAAMC,EAAOvhH,SACLwhH,EAAMprH,KACNwE,EAAQ4mH,EAAIz3E,OAAOy3E,EAAI5mH,MAAO2mH,EAAM9pH,OACpCynB,EAAMqiG,EAAMj3G,MACZtP,EAAKJ,EAAM,GACXK,EAAKL,EAAM,GACX2F,EAAK2e,EAAIvrB,WACXM,MAECA,EAAI,EAAGA,EAAI+G,IAAM/G,EAAG+L,EAAKkf,EAAIjrB,KAAOi1B,MAEpCj1B,EAAIgH,EAAIhH,EAAIsM,IAAMtM,EAAG+L,EAAKkf,EAAIjrB,KAAOi1B,SAEnCs4F,IAUb,SAASC,SACHn3G,EAAQ62G,GAAQ,GAChB1pH,EAAQ,GACR4F,EAAO,QA8EJ,CACLoqB,gBA7Ec5wB,EAAK+rB,EAAMlB,OACpBkB,EAAKjvB,OAAQ,MAAO,SACnB2M,EAAKjD,EACLkD,EAAKqiB,EAAKjvB,OACV+tH,EAAOP,GAAQ5gH,OAEjBohH,EACAC,EACA3tH,EAHA4tH,EAAOprH,MAAM8J,OAKZtM,EAAI,EAAGA,EAAIsM,IAAMtM,EACpB4tH,EAAK5tH,GAAK4C,EAAI+rB,EAAK3uB,IACnBytH,EAAKztH,GAAKA,KAGZ4tH,EAuEJ,SAAcz3G,EAAQE,UACpBF,EAAO2I,KAAKhd,KAAKuU,GAAO,CAACzS,EAAGlD,WACpB2D,EAAI8R,EAAOvS,GACXoR,EAAImB,EAAOzV,UACV2D,EAAI2Q,GAAK,EAAI3Q,EAAI2Q,EAAI,EAAI,KCxOrB,SAAS/R,EAAQwE,UACvBjF,MAAMoU,KAAKnP,GAAM7E,GAAOK,EAAOL,KDyO/BirH,CAAQ13G,EAAQE,GA7EdyI,CAAK8uG,EAAMH,GAEdphH,EACFqhH,EAAOlqH,EACPmqH,EAAOt3G,EACP7S,EAAQhB,MAAM6J,EAAKC,GACnB+J,EAAQ62G,GAAQ7gH,EAAKC,GA0E3B,SAAemhB,EAAM3W,EAAQg3G,EAAQzhH,EAAI0hH,EAAQC,EAAQ1hH,EAAI9I,EAAO6S,OAG9DrW,EAFAyM,EAAK,EACLC,EAAK,MAGJ1M,EAAI,EAAGyM,EAAKJ,GAAMK,EAAKJ,IAAMtM,EAC5B8W,EAAOrK,GAAMshH,EAAOrhH,IACtBlJ,EAAMxD,GAAK8W,EAAOrK,GAClB4J,EAAMrW,GAAK8tH,EAAOrhH,OAElBjJ,EAAMxD,GAAK+tH,EAAOrhH,GAClB2J,EAAMrW,GAAKguH,EAAOthH,KAAQ+gB,QAIvBhhB,EAAKJ,IAAMI,IAAMzM,EACtBwD,EAAMxD,GAAK8W,EAAOrK,GAClB4J,EAAMrW,GAAK8tH,EAAOrhH,QAGbC,EAAKJ,IAAMI,IAAM1M,EACtBwD,EAAMxD,GAAK+tH,EAAOrhH,GAClB2J,EAAMrW,GAAKguH,EAAOthH,GAAM+gB,EA/FtBvhB,CAAMuhB,EAAMigG,EAAMC,EAAMthH,EAAIuhH,EAAMH,EAAMnhH,EAAI9I,EAAO6S,OAC9C,IACDoX,EAAO,EAAG,IAAKztB,EAAI,EAAGA,EAAIsM,IAAMtM,EAClCytH,EAAKztH,IAAMytB,EAEbjqB,EAAQoqH,EACRv3G,EAAQo3G,SAGVrkH,EAAOiD,EAAKC,EACL,CACL+J,MAAOo3G,EACPjqH,MAAOoqH,IA4CT37F,gBAxCcmU,EAAKviC,SAEbvD,EAAI8I,MACN6hB,EAAKjrB,EAAGO,MAEPP,EAAI,GAAI6D,EAAIwS,EAAMrW,KAAOA,EAAIM,IAAKN,OAGlCO,EAAIP,EAAGA,EAAIM,IAAKN,EACd6D,EAAIonB,EAAM5U,EAAMrW,MACnBqW,EAAM9V,GAAK0qB,EACXznB,EAAMjD,GAAKiD,EAAMxD,KACfO,GAIN6I,EAAO9I,EAAI8lC,GAyBX0P,gBAhBcnvC,EAAO1C,OACjB3D,SAEA2D,EACF3D,EAAI2D,EAAMvE,QAEVuE,EAAQT,EACRlD,EAAI8I,GAGC,CAACsL,GAAWzQ,EAAO0C,EAAM,GAAI,EAAGrG,GAAImU,GAAYxQ,EAAO0C,EAAM,GAAI,EAAGrG,KAO3E2tH,iBAvBepqH,OACV,IAAI7D,EAAI,EAAGM,EAAI8I,EAAMpJ,EAAIM,IAAKN,EACjCqW,EAAMrW,GAAK6D,EAAIwS,EAAMrW,KAsBvBqW,MAAO,IAAMA,EACbjN,KAAM,IAAMA,GA+ChB,SAAS8kH,GAAY15F,GACnB4G,GAAUt5B,KAAKK,KApQjB,eACMwM,EAAQ,EACRggB,EAAO,GACP29F,EAAOY,GAAQ,GACfnhH,EAAO9H,GAAM,EAAG0K,GAChB3C,EAAO/H,GAAM,EAAG0K,SACb,CACLggB,KAAM,IAAMA,EACZ29F,KAAM,IAAMA,EAuEhB,SAAkBroH,EAAOvE,EAAQ8wB,UAC3BvsB,EAAMvE,QAAUA,EAAeuE,IACnCusB,EAAOA,GAAQ,IAAIvsB,EAAMuI,YAAY9M,IAChC6J,IAAItF,GACFusB,GA3Ec29F,CAAS7B,EAAM39F,EAAKjvB,QAEvCoE,IAAIG,OACG,IAA8CgG,EAA1CjK,EAAI,EAAGO,EAAIouB,EAAKjvB,OAAQY,EAAI2D,EAAMvE,OAAWM,EAAIM,IAAKN,EAC7DiK,EAAIhG,EAAMjE,GACViK,EAAEmkH,OAAS7tH,IACXouB,EAAK/tB,KAAKqJ,IAIdgoB,OAAOmU,EAAKviC,SAEJvD,EAAIquB,EAAKjvB,OACT8wB,EAAOhuB,MAAMlC,EAAI8lC,GACjB6nF,EAAUt/F,MAEZ1kB,EAAGjK,EAAGO,MAELP,EAAI,GAAI6D,EAAI7D,IAAMA,EAAIM,IAAKN,EAC9BwwB,EAAKxwB,GAAK2uB,EAAK3uB,GACfiuH,EAAQjuH,GAAKA,MAIVO,EAAIP,EAAGA,EAAIM,IAAKN,EACnBiK,EAAI0kB,EAAK3uB,GAEJ6D,EAAI7D,GAOPiuH,EAAQjuH,IAAM,GANdiuH,EAAQjuH,GAAKO,EACbwL,EAAKxL,GAAKwL,EAAK/L,GACfgM,EAAKzL,GAAKyL,EAAKhM,GACfwwB,EAAKjwB,GAAK0J,EACVA,EAAEmkH,OAAS7tH,KAKbwL,EAAK/L,GAAK,SAGZ2uB,EAAO6B,EACAy9F,GAGT7kH,KAAM,IAAMulB,EAAKjvB,OACjBqM,KAAM,IAAMA,EACZC,KAAM,IAAMA,EACZq8B,MAAO3kC,GAAKsI,EAAKtI,GAAKqI,EAAKrI,GAC3Bs5B,IAAK,IAAMruB,EAAQ,IAAQ,IAAOA,EAAQ,MAAU,MAAS,WAE7DpF,IAAI7F,EAAGtC,GACL2K,EAAKrI,IAAMtC,GAGbqI,MAAM/F,EAAGtC,GACP2K,EAAKrI,KAAOtC,GAGd84E,OAAO55E,EAAGiW,IAGJjW,EAFMyL,EAAKrM,QAEF6W,EAAI5H,KACfA,EAAQrK,KAAKuC,IAAI0P,EAAG5H,GACpB5C,EAAO9H,GAAM3D,EAAGqO,EAAO5C,GACvBC,EAAO/H,GAAM3D,EAAGqO,MA4LD0/G,GAAW75F,QAC3B85F,SAAW,UACXvlF,MAAQ,KAmZf,SAASwlF,GAAc/5F,GACrB4G,GAAUt5B,KAAKK,KAAM,KAAMqyB,GAlZ7B05F,GAAY3wF,WAAa,MACf,uBACI,UACF,CAAC,MACD,cACA,eACC,YACG,GACX,MACO,aACA,eACC,YACG,UACD,MACD,gBACC,SACC,MAIhBpzB,GAAS+jH,GAAa9yF,GAAW,CAC/B5pB,UAAUtQ,EAAG0yB,UACNzxB,KAAK4mC,MAGG7nC,EAAEizB,SAAS,WAAajzB,EAAE/B,OAAO06B,MAAKryB,GAAKosB,EAAMO,SAAS3sB,EAAErI,UAEzDgD,KAAKqsH,OAAOttH,EAAG0yB,GAASzxB,KAAKssH,KAAKvtH,EAAG0yB,GAJ5CzxB,KAAKoyB,KAAKrzB,EAAG0yB,IAQxBW,KAAKrzB,EAAG0yB,SACAz0B,EAAS+B,EAAE/B,OACXiuH,EAAQlsH,EAAEksH,MACV7iC,EAAUpoF,KAAKmsH,SAAW,GAC1BpkF,EAAO/nC,KAAK4mC,MAAQ,GACpBxyB,EAAI62G,EAAM1tH,WAEZkD,EACAyT,EAFArW,EAAI,OAIDA,EAAIuW,IAAKvW,EACd4C,EAAMzD,EAAOa,GAAGX,MAChBgX,EAAQk0E,EAAQ3nF,KAAS2nF,EAAQ3nF,GAAO4qH,MACxCtjF,EAAKtpC,KAAKusH,GAAU92G,EAAOrW,EAAGotH,EAAMptH,YAG/BmC,KAAKssH,KAAKvtH,EAAG0yB,IAGtB46F,OAAOttH,EAAG0yB,SACFrwB,EAASqwB,EAAMmE,cAAcmB,OAC7B/5B,EAAS+B,EAAE/B,OACXiuH,EAAQlsH,EAAEksH,MACV7iC,EAAUpoF,KAAKmsH,SACfpkF,EAAO/nC,KAAK4mC,MACZ2lF,EAAOvsH,KAAKqB,MACZuI,EAAO2iH,EAAK3iH,OACZC,EAAO0iH,EAAK1iH,OACZgxB,EAAM0xF,EAAK1xF,MACXh6B,EAAMO,EAAO4vB,IAAM5vB,EAAOO,IAC1BsvB,EAAM7vB,EAAO6vB,IACb7c,EAAI62G,EAAM1tH,OACV2rC,EAAO,OACTvnC,EAAKuS,EAAOzT,EAAK0oC,EAAMqjF,EAAQC,EAAQ5uH,EAAGM,EAAGkH,KAEjDwE,EAAKzC,IAAIwC,GAEL6nB,EAAMT,IAAIzzB,SACZivH,EAASxsH,KAAK8vB,OAAO/wB,EAAG0yB,EAAOrwB,IAI7BqwB,EAAM9vB,IAAIpE,QACZgvH,EAAK5qH,IAAI8vB,EAAM9vB,KAIb8vB,EAAMR,IAAI1zB,WACZkvH,EAAS,GAEJtjF,EAAO1X,EAAMR,IAAKpzB,EAAI,EAAGM,EAAIgrC,EAAK5rC,OAAQM,EAAIM,IAAKN,EACtD4uH,EAAOtjF,EAAKtrC,GAAGouH,QAAU,MAKxBpuH,EAAI,EAAGA,EAAIuW,IAAKvW,EACnBwH,EAAIrI,EAAOa,KAENkqC,EAAKlqC,IAAMkB,EAAEizB,SAAS,SAAUn0B,IAAM4zB,EAAMO,SAAS3sB,EAAErI,WAC1DyD,EAAM4E,EAAEnI,OAEFyE,EAAMunC,EAAKzoC,MACf2nF,EAAQ3nF,GAAOyT,EAAQm3G,KACvBniF,EAAKzoC,GAAOkB,EAAMuS,EAAMmd,OAAOhsB,EAAGosB,EAAM3wB,OAAQ,IAGlDinC,EAAKlqC,GAAKmtH,GAAU92G,EAAOrW,EAAGotH,EAAMptH,IAAIqtH,MAAMvpH,EAAKiI,QAOlD/L,EAAI,EAAGM,EAAIouH,EAAK//F,OAAOjvB,OAAQM,EAAIM,IAAKN,EACvC2uH,EAAO3uH,KAGAgM,EAAKhM,KAAO+L,EAAK/L,GAE1BgD,EAAIpC,KAAKZ,GACA4uH,EAAO5uH,IAAM+L,EAAK/L,KAAOg9B,GAElC5J,EAAIxyB,KAAKZ,WAIb0uH,EAAKprC,MAAQ,GAAK/sE,GAAK,EAChBhT,GAGTkrH,KAAKvtH,EAAG0yB,SACArwB,EAASqwB,EAAMmE,cAAcmB,OAC7B3iB,EAAIpU,KAAK4mC,MAAMrpC,WACjB4jF,EAAO,SAEP1vD,EAAMT,IAAIzzB,cACPuyB,OAAO/wB,EAAG0yB,EAAOrwB,GACtB+/E,IAAS,GAAK/sE,GAAK,GAGjBrV,EAAEizB,SAAS,WAAajzB,EAAEizB,SAAS,YACrCmvD,GAAQnhF,KAAK8J,OAAO/K,EAAG0yB,EAAOrwB,IAG5BqwB,EAAM9vB,IAAIpE,cACP8zB,OAAOtyB,EAAG0yB,EAAOrwB,GACtB+/E,IAAS,GAAK/sE,GAAK,GAGjBqd,EAAMR,IAAI1zB,cACP+zB,OAAOG,EAAOrwB,GACnB+/E,IAAS,GAAK/sE,GAAK,QAGhB/S,MAAM8/E,KAAOA,EACX//E,GAGTiwB,OAAOtyB,EAAG0yB,EAAOrwB,SACTswB,EAASD,EAAM9vB,IACf4qH,EAAOvsH,KAAKqB,MACZ0mC,EAAO/nC,KAAK4mC,MACZwhD,EAAUpoF,KAAKmsH,SACfnvH,EAAS+B,EAAE/B,OACXksC,EAAO,GACProC,EAAMO,EAAOO,IACbxD,EAAIouH,EAAKtlH,OAASyqB,EAAOn0B,OACzB6W,EAAI2zB,EAAKxqC,WAEXa,EACAqC,EACAkB,EAHAJ,EAAIgrH,EAAKtlH,OAKbslH,EAAKx0C,OAAO55E,EAAGiW,GACfm4G,EAAK5qH,IAAI+vB,SACH9nB,EAAO2iH,EAAK3iH,OACZC,EAAO0iH,EAAK1iH,OACZgxB,EAAM0xF,EAAK1xF,UAEZz8B,EAAI,EAAGA,EAAIgW,IAAKhW,EACnBqC,EAAMzD,EAAOoB,GAAGlB,MAChByE,EAAMunC,EAAKzoC,KAASyoC,EAAKzoC,GAAO2nF,EAAQ3nF,GAAK4wB,OAAOr0B,EAAOoB,GAAIszB,EAAQnwB,IACvEwmC,EAAK3pC,GAAG8sH,MAAMvpH,EAAKiI,QAIdrI,EAAIpD,IAAKoD,EACdsI,EAAKtI,GAAKs5B,EACNjxB,EAAKrI,KAAOs5B,GAAKh6B,EAAIpC,KAAK8C,IAIlC+vB,OAAOG,EAAOrwB,SACNP,EAAMO,EAAO6vB,IACbs7F,EAAOvsH,KAAKqB,MACZuI,EAAO2iH,EAAK3iH,OACZixB,EAAM0xF,EAAK1xF,MACXnJ,EAASD,EAAMR,QACjBpzB,EAAGM,EAAGoD,MAEL1D,EAAI,EAAGM,EAAIuzB,EAAOn0B,OAAQM,EAAIM,IAAKN,EACtC0D,EAAImwB,EAAO7zB,GAAGouH,OACVriH,EAAKrI,KAAOs5B,GAAKh6B,EAAIpC,KAAK8C,IAIlCuuB,OAAO/wB,EAAG0yB,EAAOrwB,SACTgnF,EAAUpoF,KAAKmsH,SACfI,EAAOvsH,KAAKqB,MACZuI,EAAO2iH,EAAK3iH,OACZC,EAAO0iH,EAAK1iH,OACZgxB,EAAM0xF,EAAK1xF,MACXn5B,EAAM,GACNb,EAAMO,EAAO4vB,IACbU,EAASD,EAAMT,QACjBnzB,EAAGM,EAAGoD,EAAG8D,MAERxH,EAAI,EAAGM,EAAIuzB,EAAOn0B,OAAQM,EAAIM,IAAKN,EACtC0D,EAAImwB,EAAO7zB,GAAGouH,OACdvqH,EAAIH,GAAK,EAETsI,EAAKtI,GAAK8D,EAAIuE,EAAKrI,GACnBqI,EAAKrI,GAAKs5B,EACNx1B,IAAMw1B,GAAKh6B,EAAIpC,KAAK8C,OAIrBA,KAAK6mF,EACRA,EAAQ7mF,GAAGuuB,OAAO3xB,EAAGuD,eAGlBoqH,QAAQr6F,EAAOtzB,EAAGuD,GAChBA,GAIToqH,QAAQr6F,EAAOwS,EAAKviC,SACZ0mF,EAAUpoF,KAAKmsH,SACfI,EAAOvsH,KAAKqB,MAClBowB,EAAM+F,UAAS,WACPk1F,EAAWH,EAAKz8F,OAAOmU,EAAKviC,OAE7B,MAAMjB,KAAO2nF,EAASA,EAAQ3nF,GAAKqrH,QAAQY,OAIpD5iH,OAAO/K,EAAG0yB,EAAOrwB,SACT2mC,EAAO/nC,KAAK4mC,MACZqkF,EAAQlsH,EAAEksH,MACV14F,EAAQd,EAAMc,MACdne,EAAI2zB,EAAKxqC,WAEXM,EACAS,EAFA6iF,EAAO,MAIX//E,EAAOmtB,QAAU,EAEZjwB,EAAI,EAAGA,EAAI8V,IAAK9V,EACfS,EAAEizB,SAAS,QAAS1zB,KACtBT,EAAIS,IACF6iF,MAIO,IAATA,EAEFA,EAAOp5C,EAAKlqC,GAAGoB,SACV0tH,aAAa5kF,EAAKlqC,GAAIotH,EAAMptH,GAAIuD,EAAOO,IAAKP,EAAO4vB,cAGnD1yB,EAAI,EAAG6iF,EAAO,EAAG7iF,EAAI8V,IAAK9V,EACxBS,EAAEizB,SAAS,QAAS1zB,KACzB6iF,GAAQp5C,EAAKzpC,GAAGW,SACX2tH,aAAa7kF,EAAKzpC,GAAI2sH,EAAM3sH,GAAIi0B,EAAOnxB,EAAOO,KACnDP,EAAO4vB,IAAM5vB,EAAOO,YAIjBw/E,GAGTyrC,aAAaxB,EAAKH,EAAO14F,EAAO1xB,SACxB0rH,EAAOvsH,KAAKqB,MACZ8oH,EAAOoC,EAAKpC,OACZvgH,EAAO2iH,EAAK3iH,OACZC,EAAO0iH,EAAK1iH,OACZqK,EAAQk3G,EAAIl3G,QACZ24G,EAAMzB,EAAIz3E,OAAOy3E,EAAI5mH,OACrBA,EAAQ4mH,EAAIz3E,OAAOs3E,GACnB6B,EAAMtoH,EAAM,GACZuoH,EAAMvoH,EAAM,GACZwoH,EAAMH,EAAI,GACVI,EAAMJ,EAAI,GACV5tH,EAAMmsH,EAAInsH,QACZpB,EAAGO,EAAGmD,KAENurH,EAAME,MACHnvH,EAAIivH,EAAK1uH,EAAI+D,KAAKsC,IAAIuoH,EAAKD,GAAMlvH,EAAIO,IAAKP,EAC7C0D,EAAI2S,EAAMrW,GAENssH,EAAK5oH,KAAOgxB,IACd1oB,EAAKtI,GAAKqI,EAAKrI,GACf4oH,EAAK5oH,GAAKgxB,EACV1xB,EAAIpC,KAAK8C,IAGXqI,EAAKrI,IAAMtC,OAER,GAAI6tH,EAAME,MACVnvH,EAAImvH,EAAK5uH,EAAI+D,KAAKsC,IAAIqoH,EAAKG,GAAMpvH,EAAIO,IAAKP,EAC7C0D,EAAI2S,EAAMrW,GAENssH,EAAK5oH,KAAOgxB,IACd1oB,EAAKtI,GAAKqI,EAAKrI,GACf4oH,EAAK5oH,GAAKgxB,EACV1xB,EAAIpC,KAAK8C,IAGXqI,EAAKrI,IAAMtC,KAKX8tH,EAAME,MACHpvH,EAAIsE,KAAKuC,IAAIooH,EAAKG,GAAM7uH,EAAI2uH,EAAKlvH,EAAIO,IAAKP,EAC7C0D,EAAI2S,EAAMrW,GAENssH,EAAK5oH,KAAOgxB,IACd1oB,EAAKtI,GAAKqI,EAAKrI,GACf4oH,EAAK5oH,GAAKgxB,EACV1xB,EAAIpC,KAAK8C,IAGXqI,EAAKrI,IAAMtC,OAER,GAAI8tH,EAAME,MACVpvH,EAAIsE,KAAKuC,IAAIsoH,EAAKD,GAAM3uH,EAAI6uH,EAAKpvH,EAAIO,IAAKP,EAC7C0D,EAAI2S,EAAMrW,GAENssH,EAAK5oH,KAAOgxB,IACd1oB,EAAKtI,GAAKqI,EAAKrI,GACf4oH,EAAK5oH,GAAKgxB,EACV1xB,EAAIpC,KAAK8C,IAGXqI,EAAKrI,IAAMtC,EAIfmsH,EAAI5mH,MAAQymH,EAAMvrH,SAGpBitH,aAAavB,EAAKH,EAAOtpH,EAAKqvB,SAEtBpnB,EADO5J,KAAKqB,MACAuI,OACZsK,EAAQk3G,EAAIl3G,QACZ24G,EAAMzB,EAAIz3E,OAAOy3E,EAAI5mH,OACrBA,EAAQ4mH,EAAIz3E,OAAOs3E,GACnB6B,EAAMtoH,EAAM,GACZuoH,EAAMvoH,EAAM,GACZwoH,EAAMH,EAAI,GACVI,EAAMJ,EAAI,GACV5tH,EAAMmsH,EAAInsH,QACZpB,EAAGO,EAAGmD,KAENurH,EAAME,MACHnvH,EAAIivH,EAAK1uH,EAAI+D,KAAKsC,IAAIuoH,EAAKD,GAAMlvH,EAAIO,IAAKP,EAC7C0D,EAAI2S,EAAMrW,GACV+L,EAAKrI,IAAMtC,EACX0C,EAAIlD,KAAK8C,QAEN,GAAIurH,EAAME,MACVnvH,EAAImvH,EAAK5uH,EAAI+D,KAAKsC,IAAIqoH,EAAKG,GAAMpvH,EAAIO,IAAKP,EAC7C0D,EAAI2S,EAAMrW,GACV+L,EAAKrI,IAAMtC,EACX+xB,EAAIvyB,KAAK8C,MAKTwrH,EAAME,MACHpvH,EAAIsE,KAAKuC,IAAIooH,EAAKG,GAAM7uH,EAAI2uH,EAAKlvH,EAAIO,IAAKP,EAC7C0D,EAAI2S,EAAMrW,GACV+L,EAAKrI,IAAMtC,EACX0C,EAAIlD,KAAK8C,QAEN,GAAIwrH,EAAME,MACVpvH,EAAIsE,KAAKuC,IAAIsoH,EAAKD,GAAM3uH,EAAI6uH,EAAKpvH,EAAIO,IAAKP,EAC7C0D,EAAI2S,EAAMrW,GACV+L,EAAKrI,IAAMtC,EACX+xB,EAAIvyB,KAAK8C,GAIb6pH,EAAI5mH,MAAQymH,EAAMvrH,WAkBtB0sH,GAAchxF,WAAa,MACjB,yBACI,UACF,CAAC,MACD,cACA,mBACI,cACG,kDACd,MACO,cACA,mBACI,cACG,4DAGnBpzB,GAASokH,GAAenzF,GAAW,CACjC5pB,UAAUtQ,EAAG0yB,SACLy7F,IAAWnuH,EAAEmuH,QAAU,GAE7BnR,EAASh9G,EAAE4M,OACLw1E,EAAO46B,EAAO56B,QAEI,IAAnBA,EAAO+rC,GAAe,OAAOz7F,EAAMqC,sBAElC1yB,EAASqwB,EAAMsF,KAAKtF,EAAMiF,KAC1BlK,EAAOuvF,EAAOvvF,OACd5iB,EAAOmyG,EAAOnyG,OACdC,EAAOkyG,EAAOlyG,OACdsjH,EAAO5rH,GAAOqI,EAAKrI,GAAK2rH,EAAoB,KAAV1gG,EAAKjrB,UAG7CH,EAAOuK,OAAOvK,EAAOi1B,IAAK82F,GAIpBhsC,EAAOA,EAAO,GAMlB//E,EAAOuK,OAAOvK,EAAO+0B,KAAK50B,UAClBlD,EAAIuL,EAAKrI,GAAK2rH,SACT7uH,GAAKA,EAAIwL,EAAKtI,GAAK2rH,EACnB1gG,EAAKjrB,GAAK,QAEvBH,EAAOuK,OAAOvK,EAAOg1B,KAAK70B,UAClBlD,EAAIuL,EAAKrI,GAAK2rH,SACV7uH,KAAOA,EAAKA,EAAIwL,EAAKtI,GAAK2rH,GACzB1gG,EAAKjrB,GAAK,UAZvBH,EAAOuK,OAAOvK,EAAO+0B,IAAKg3F,GAC1B/rH,EAAOuK,OAAOvK,EAAOg1B,KAAK70B,IAAMqI,EAAKrI,GAAK2rH,KAAY/rC,EAAO30D,EAAKjrB,GAAK,QAgBlEH,EAAOuK,OAAOvK,EAAOw1B,QAAQ9uB,GAAKqlH,EAAKrlH,EAAEmkH,oFE5tBpD,MAAMmB,GAAU,UACVC,GAAU,UACVC,GAAW,WACX1mC,GAAa,aACb2mC,GAAkB,kBAClBC,GAAmB,mBACnBC,GAAiB,iBACjBC,GAAwB,wBACxBC,GAAoB,oBACpBC,GAAmB,mBACnBC,GAAmB,mBACnBC,GAAkB,kBACxB,SAASC,GAAQl/G,QACVA,KAAOA,EAkFd,IAAIm/G,GAAWltH,GAAQoT,GAAO3W,GAAQ0wH,GA/EtCF,GAAQvnH,UAAUqvB,MAAQ,SAAUjqB,OAC9BvN,EAAGR,EAAGM,KACNyN,EAAQ5L,MAAO,OAAO,MAErB3B,EAKP,SAAkBohF,UACRA,EAAK5wE,WACN0+G,UACI9tC,EAAKyuC,cAETV,QACAG,SACI,CAACluC,EAAK93E,KAAM83E,EAAK73E,YAErB6lH,SACI,CAAChuC,EAAK0uC,QAAQ1uH,OAAOggF,EAAK1/E,gBAE9B2tH,SACI,CAACjuC,EAAK14E,KAAM04E,EAAK2uC,WAAY3uC,EAAK4uC,gBAEtCT,SACI,CAACnuC,EAAK94E,OAAQ84E,EAAK74E,eAEvBinH,UACIpuC,EAAKvwE,gBAETo+G,SACI,CAAC7tC,EAAKh/E,IAAKg/E,EAAKp+E,YAEpBysH,SACI,CAACruC,EAAK6uC,eAEV1nC,QACAymC,QACAD,iBAEI,IApCFttC,CAAS9/E,MAAOnC,EAAI,EAAGM,EAAIE,EAAEd,OAAQM,EAAIM,IAAKN,KACjDQ,EAAER,GAAGg4B,MAAMjqB,GAAU,OAAO,IAoFpCoiH,GAAY,IATc,GAUO,UACjCA,GAVe,GAUO,QACtBA,GAVsB,GAUO,aAC7BA,GAVmB,GAUO,UAC1BA,GAVuB,GAUO,OAC9BA,GAV0B,GAUO,UACjCA,GAVsB,GAUO,aAC7BA,GAVyB,GAUO,SAChCA,GAV6B,GAUO,oBACpC,IAIIO,GAAmB,aAQnBC,GAAyB,sBAMzBC,GAAuB,6BACvBC,GAA4B,wCAC5BC,GAA4B,iDAE5BC,GAAU,UACVC,GAAW,YAEXC,GAA+B,IAAIrhH,OAAO,wzJAE9CshH,GAA8B,IAAIthH,OAAO,quLAKzC,SAASuhH,GAAOC,EAAWlxH,OAEpBkxH,QACG,IAAIjxH,MAAM,WAAaD,GAIjC,SAASmxH,GAAe/G,UACfA,GAAM,IAAQA,GAAM,GAG7B,SAASgH,GAAWhH,SACX,yBAAyBhzG,QAAQgzG,IAAO,EAGjD,SAASiH,GAAajH,SACb,WAAWhzG,QAAQgzG,IAAO,EAInC,SAASkH,GAAalH,UACN,KAAPA,GAAsB,IAAPA,GAAsB,KAAPA,GAAsB,KAAPA,GAAsB,MAAPA,GAAeA,GAAM,MAAU,CAAC,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,KAAQ,MAAQ,OAAQhzG,QAAQgzG,IAAO,EAI5P,SAASmH,GAAiBnH,UACV,KAAPA,GAAsB,KAAPA,GAAsB,OAAPA,GAAwB,OAAPA,EAIxD,SAASoH,GAAkBpH,UACX,KAAPA,GAAsB,KAAPA,GACtBA,GAAM,IAAQA,GAAM,IACpBA,GAAM,IAAQA,GAAM,KACb,KAAPA,GACAA,GAAM,KAAQ2G,GAA6B/nH,KAAKoQ,OAAOq4G,aAAarH,IAGtE,SAASsH,GAAiBtH,UACV,KAAPA,GAAsB,KAAPA,GACtBA,GAAM,IAAQA,GAAM,IACpBA,GAAM,IAAQA,GAAM,KACpBA,GAAM,IAAQA,GAAM,IACb,KAAPA,GACAA,GAAM,KAAQ4G,GAA4BhoH,KAAKoQ,OAAOq4G,aAAarH,IAIrE,MAAMuH,GAAW,IACT,KACA,KACA,MACC,MACA,MACA,MACA,MACA,OACC,OACA,OACA,OACA,OACA,OACA,QACC,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACC,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACC,UACA,UACA,UACA,UACA,WACC,WACA,WACA,YACC,YACA,aACC,aACA,GAGhB,SAASC,UACAz7G,GAAQ3W,IAAQ,OACf4qH,EAAKrnH,GAAO6M,WAAWuG,QAEzBm7G,GAAalH,KAAOmH,GAAiBnH,WACrCj0G,IAOR,SAAS07G,GAAcn4G,OACjB5Z,EACAD,EACAuqH,EACAhsB,EAAO,MACXv+F,EAAiB,MAAX6Z,EAAiB,EAAI,EAEtB5Z,EAAI,EAAGA,EAAID,IAAOC,EACjBqW,GAAQ3W,IAAU4xH,GAAWruH,GAAOoT,MACtCi0G,EAAKrnH,GAAOoT,MACZioF,EAAc,GAAPA,EAAY,mBAAmBhnF,QAAQgzG,EAAGzwG,gBAEjDm4G,GAAW,GAAIrB,GAAwBI,WAIpCz3G,OAAOq4G,aAAarzB,GAG7B,SAAS2zB,SACH3H,EAAIhsB,EAAM4zB,EAAKC,MAEnB7zB,EAAO,EAEI,OAHXgsB,EAAKrnH,GAAOoT,MAIV27G,GAAW,GAAIrB,GAAwBI,IAGlC16G,GAAQ3W,IAGR4xH,GAFLhH,EAAKrnH,GAAOoT,QAMZioF,EAAc,GAAPA,EAAY,mBAAmBhnF,QAAQgzG,EAAGzwG,sBAG/CykF,EAAO,SAAmB,MAAPgsB,IACrB0H,GAAW,GAAIrB,GAAwBI,IAIrCzyB,GAAQ,MACHhlF,OAAOq4G,aAAarzB,IAG7B4zB,EAA+B,OAAxB5zB,EAAO,OAAW,IACzB6zB,EAAgC,OAAzB7zB,EAAO,MAAU,MACjBhlF,OAAOq4G,aAAaO,EAAKC,IAGlC,SAASC,SACH9H,EAAItpH,MACRspH,EAAKrnH,GAAO6M,WAAWuG,MACvBrV,EAAKsY,OAAOq4G,aAAarH,GAEd,KAAPA,IAC+B,MAA7BrnH,GAAO6M,WAAWuG,KACpB27G,GAAW,GAAIrB,GAAwBI,MAGvC16G,IACFi0G,EAAKyH,GAAc,OAED,OAAPzH,GAAgBoH,GAAkBpH,EAAGx6G,WAAW,KACzDkiH,GAAW,GAAIrB,GAAwBI,IAGzC/vH,EAAKspH,GAGAj0G,GAAQ3W,IAGRkyH,GAFLtH,EAAKrnH,GAAO6M,WAAWuG,QAMrBA,GACFrV,GAAMsY,OAAOq4G,aAAarH,GAEf,KAAPA,IACFtpH,EAAKA,EAAGqxH,OAAO,EAAGrxH,EAAGtB,OAAS,GAEG,MAA7BuD,GAAO6M,WAAWuG,KACpB27G,GAAW,GAAIrB,GAAwBI,MAGvC16G,IACFi0G,EAAKyH,GAAc,OAED,OAAPzH,GAAgBsH,GAAiBtH,EAAGx6G,WAAW,KACxDkiH,GAAW,GAAIrB,GAAwBI,IAGzC/vH,GAAMspH,UAIHtpH,EA0BT,SAASsxH,SACHv/G,EAAO/R,SACX+R,EAAQsD,GAkBD,CACLrF,KAdgB,KAHlBhQ,EAAkC,KAA7BiC,GAAO6M,WAAWuG,IAAkB+7G,KA3B3C,eACMr/G,EAAOu3G,MACXv3G,EAAQsD,KAEDA,GAAQ3W,IAAQ,IAGV,MAFX4qH,EAAKrnH,GAAO6M,WAAWuG,YAIrBA,GAAQtD,EACDq/G,SAGLR,GAAiBtH,WACjBj0G,UAMCpT,GAAOpB,MAAMkR,EAAOsD,IAOuCk8G,IAG3D7yH,OA/Ra,EAiSTmyH,GAASjpH,eAAe5H,GAhSlB,EAmSC,SAAPA,EAlSU,EAoSH,SAAPA,GAAwB,UAAPA,EAxSJ,EAEJ,EA8SlBwC,MAAOxC,EACP+R,MAAOA,EACPC,IAAKqD,IAKT,SAASm8G,SAGHC,EAEAC,EACAC,EACAC,EANA7/G,EAAQsD,GACRioF,EAAOr7F,GAAO6M,WAAWuG,IAEzBw8G,EAAM5vH,GAAOoT,WAKTioF,QAED,QAEA,QAEA,QAEA,QAEA,QAEA,SAEA,SAEA,QAEA,QAEA,QAEA,QAEA,YAEDjoF,GACK,CACLrF,KAtVc,EAuVdxN,MAAO8V,OAAOq4G,aAAarzB,GAC3BvrF,MAAOA,EACPC,IAAKqD,eAMO,MAFdo8G,EAAQxvH,GAAO6M,WAAWuG,GAAQ,WAGxBioF,QACD,QAEA,QAEA,QAEA,QAEA,QAEA,QAEA,SAEA,QAEA,QAEA,UAEHjoF,IAAS,EACF,CACLrF,KAvXQ,EAwXRxN,MAAO8V,OAAOq4G,aAAarzB,GAAQhlF,OAAOq4G,aAAac,GACvD1/G,MAAOA,EACPC,IAAKqD,SAGJ,QAEA,UAEHA,IAAS,EAEwB,KAA7BpT,GAAO6M,WAAWuG,OAClBA,GAGG,CACLrF,KAxYQ,EAyYRxN,MAAOP,GAAOpB,MAAMkR,EAAOsD,IAC3BtD,MAAOA,EACPC,IAAKqD,WAUL,UAFZu8G,EAAM3vH,GAAOovH,OAAOh8G,GAAO,IAIlB,CACLrF,KAxZgB,EAyZhBxN,MAAOovH,EACP7/G,MAAOA,EACPC,IALFqD,IAAS,GAYC,SAFZs8G,EAAMC,EAAIP,OAAO,EAAG,KAES,QAARM,GAAyB,QAARA,EAE7B,CACL3hH,KAragB,EAsahBxN,MAAOmvH,EACP5/G,MAAOA,EACPC,IALFqD,IAAS,GAYPw8G,KAFJH,EAAMC,EAAIN,OAAO,EAAG,IAEJ,IAAM,SAAS/6G,QAAQu7G,IAAQ,GAAa,OAARH,EAE3C,CACL1hH,KAlbgB,EAmbhBxN,MAAOkvH,EACP3/G,MAAOA,EACPC,IALFqD,IAAS,IASC,OAARq8G,GACFV,GAAW,GAAIrB,GAAwBI,IAIrC,eAAez5G,QAAQu7G,IAAQ,EAE1B,CACL7hH,KAjcgB,EAkchBxN,MAAOqvH,EACP9/G,MAAOA,EACPC,MALAqD,SASJ27G,GAAW,GAAIrB,GAAwBI,KAuDzC,SAAS+B,SACHn+G,EAAQ5B,EAAOu3G,KAEnB6G,GAAOE,IADP/G,EAAKrnH,GAAOoT,KACavG,WAAW,KAAc,MAAPw6G,EAAY,sEACvDv3G,EAAQsD,GACR1B,EAAS,GAEE,MAAP21G,EAAY,IACd31G,EAAS1R,GAAOoT,MAChBi0G,EAAKrnH,GAAOoT,IAGG,MAAX1B,EAAgB,IACP,MAAP21G,GAAqB,MAAPA,UACdj0G,GAjEV,SAAwBtD,OAClB4B,EAAS,QAEN0B,GAAQ3W,IACR4xH,GAAWruH,GAAOoT,MAIvB1B,GAAU1R,GAAOoT,aAGG,IAAlB1B,EAAOjV,QACTsyH,GAAW,GAAIrB,GAAwBI,IAGrCW,GAAkBzuH,GAAO6M,WAAWuG,MACtC27G,GAAW,GAAIrB,GAAwBI,IAGlC,CACL//G,KAjesB,EAketBxN,MAAOwnD,SAAS,KAAOr2C,EAAQ,IAC/B5B,MAAOA,EACPC,IAAKqD,IA2CM08G,CAAehgH,MAGpBw+G,GAAajH,UA1CvB,SAA0Bv3G,OACpB4B,EAAS,IAAM1R,GAAOoT,WAEnBA,GAAQ3W,IACR6xH,GAAatuH,GAAOoT,MAIzB1B,GAAU1R,GAAOoT,aAGfq7G,GAAkBzuH,GAAO6M,WAAWuG,MAAWg7G,GAAepuH,GAAO6M,WAAWuG,OAClF27G,GAAW,GAAIrB,GAAwBI,IAGlC,CACL//G,KAxfsB,EAyftBxN,MAAOwnD,SAASr2C,EAAQ,GACxBq+G,OAAO,EACPjgH,MAAOA,EACPC,IAAKqD,IAuBM48G,CAAiBlgH,GAItBu3G,GAAM+G,GAAe/G,EAAGx6G,WAAW,KACrCkiH,GAAW,GAAIrB,GAAwBI,SAIpCM,GAAepuH,GAAO6M,WAAWuG,MACtC1B,GAAU1R,GAAOoT,MAGnBi0G,EAAKrnH,GAAOoT,OAGH,MAAPi0G,EAAY,KACd31G,GAAU1R,GAAOoT,MAEVg7G,GAAepuH,GAAO6M,WAAWuG,MACtC1B,GAAU1R,GAAOoT,MAGnBi0G,EAAKrnH,GAAOoT,OAGH,MAAPi0G,GAAqB,MAAPA,KAChB31G,GAAU1R,GAAOoT,MAGN,OAFXi0G,EAAKrnH,GAAOoT,MAEa,MAAPi0G,IAChB31G,GAAU1R,GAAOoT,OAGfg7G,GAAepuH,GAAO6M,WAAWuG,UAC5Bg7G,GAAepuH,GAAO6M,WAAWuG,MACtC1B,GAAU1R,GAAOoT,WAGnB27G,GAAW,GAAIrB,GAAwBI,WAIvCW,GAAkBzuH,GAAO6M,WAAWuG,MACtC27G,GAAW,GAAIrB,GAAwBI,IAGlC,CACL//G,KAnkBsB,EAokBtBxN,MAAO0vH,WAAWv+G,GAClB5B,MAAOA,EACPC,IAAKqD,IAuOT,SAAS88G,SACHpgH,EAAOqgH,EAAMv+F,EAAOrxB,SACxB4sH,GAAY,KACZ0B,KACA/+G,EAAQsD,GACR+8G,EArFF,eACM9I,EAAI19G,EAAKymH,EAAaC,MAE1BnC,GAAc,OADd7G,EAAKrnH,GAAOoT,KACO,sDACnBzJ,EAAM3J,GAAOoT,MACbg9G,GAAc,EACdC,GAAa,EAENj9G,GAAQ3W,OAEbkN,GADA09G,EAAKrnH,GAAOoT,MAGD,OAAPi0G,EAGEmH,IAFJnH,EAAKrnH,GAAOoT,OAEYvG,WAAW,KACjCkiH,GAAW,GAAInB,IAGjBjkH,GAAO09G,OACF,GAAImH,GAAiBnH,EAAGx6G,WAAW,IACxCkiH,GAAW,GAAInB,SACV,GAAIwC,EACE,MAAP/I,IACF+I,GAAc,OAEX,IACM,MAAP/I,EAAY,CACdgJ,GAAa,QAEG,MAAPhJ,IACT+I,GAAc,UAKfC,GACHtB,GAAW,GAAInB,IAKV,CACLrtH,MAFKoJ,EAAIylH,OAAO,EAAGzlH,EAAIlN,OAAS,GAGhC6zH,QAAS3mH,GAyCJ4mH,GACP3+F,EAtCF,eACMy1F,EAAI19G,EAAKioB,MACbjoB,EAAM,GACNioB,EAAQ,GAEDxe,GAAQ3W,IAGRkyH,IAFLtH,EAAKrnH,GAAOoT,KAEavG,WAAW,OAIlCuG,GAES,OAAPi0G,GAAej0G,GAAQ3W,GACzBsyH,GAAW,GAAIrB,GAAwBI,KAEvCl8F,GAASy1F,EACT19G,GAAO09G,UAIPz1F,EAAM4+F,OAAO,cAAgB,GAC/BzB,GAAW,GAAIpB,GAAsB/7F,GAGhC,CACLrxB,MAAOqxB,EACP0+F,QAAS3mH,GAUH8mH,GACRlwH,EA7HF,SAAoBiuB,EAASoD,OACvB4xF,EAAMh1F,EAENoD,EAAMvd,QAAQ,MAAQ,IASxBmvG,EAAMA,EAAI/6G,QAAQ,0BAA0B,CAACioH,EAAIC,QAC3C5oE,SAAS4oE,EAAI,KAAO,cACf,IAGT5B,GAAW,GAAIpB,OACdllH,QAAQ,kCAAmC,cAK1CkE,OAAO62G,GACX,MAAOr+G,GACP4pH,GAAW,GAAIpB,eAOR,IAAIhhH,OAAO6hB,EAASoD,GAC3B,MAAOg/F,UACA,MA2FDC,CAAWV,EAAK5vH,MAAOqxB,EAAMrxB,OAC9B,CACL+vH,QAASH,EAAKG,QAAU1+F,EAAM0+F,QAC9B/vH,MAAOA,EACPuwH,MAAO,CACLtiG,QAAS2hG,EAAK5vH,MACdqxB,MAAOA,EAAMrxB,OAEfuP,MAAOA,EACPC,IAAKqD,IAQT,SAAS29G,QACPlC,KAEIz7G,IAAS3W,SACJ,CACLsR,KA90BS,EA+0BT+B,MAAOsD,GACPrD,IAAKqD,UAIHi0G,EAAKrnH,GAAO6M,WAAWuG,WAEzBq7G,GAAkBpH,GACbgI,KAIE,KAAPhI,GAAsB,KAAPA,GAAsB,KAAPA,EACzBkI,KAIE,KAAPlI,GAAsB,KAAPA,EAjRrB,eAEMj1C,EACAtiE,EACAu3G,EACAhsB,EAJA1xF,EAAM,GAKNomH,GAAQ,MAEZ7B,GAAiB,OADjB97C,EAAQpyE,GAAOoT,MACoB,MAAVg/D,EAAe,2CACxCtiE,EAAQsD,KACNA,GAEKA,GAAQ3W,IAAQ,KACrB4qH,EAAKrnH,GAAOoT,SAEDg/D,EAAO,CAChBA,EAAQ,SAEH,GAAW,OAAPi1C,MACTA,EAAKrnH,GAAOoT,QAEAo7G,GAAiBnH,EAAGx6G,WAAW,IA+D9B,OAAPw6G,GAAiC,OAAlBrnH,GAAOoT,OACtBA,eA/DIi0G,OACD,QACA,IACmB,MAAlBrnH,GAAOoT,OACPA,GACFzJ,GAAOqlH,MAEPrlH,GAAOmlH,GAAczH,aAKpB,IACH19G,GAAO,eAGJ,IACHA,GAAO,eAGJ,IACHA,GAAO,eAGJ,IACHA,GAAO,eAGJ,IACHA,GAAO,eAGJ,IACHA,GAAO,mBAIH2kH,GAAajH,IAGF,KAFbhsB,EAAO,WAAWhnF,QAAQgzG,MAGxB0I,GAAQ,GAGN38G,GAAQ3W,IAAU6xH,GAAatuH,GAAOoT,OACxC28G,GAAQ,EACR10B,EAAc,EAAPA,EAAW,WAAWhnF,QAAQrU,GAAOoT,OAGxC,OAAOiB,QAAQgzG,IAAO,GAAKj0G,GAAQ3W,IAAU6xH,GAAatuH,GAAOoT,OACnEioF,EAAc,EAAPA,EAAW,WAAWhnF,QAAQrU,GAAOoT,SAIhDzJ,GAAO0M,OAAOq4G,aAAarzB,IAE3B1xF,GAAO09G,MAUV,CAAA,GAAImH,GAAiBnH,EAAGx6G,WAAW,UAGxClD,GAAO09G,SAIG,KAAVj1C,GACF28C,GAAW,GAAIrB,GAAwBI,IAGlC,CACL//G,KA7qBqB,EA8qBrBxN,MAAOoJ,EACPomH,MAAOA,EACPjgH,MAAOA,EACPC,IAAKqD,IA0KE49G,GAKE,KAAP3J,EACE+G,GAAepuH,GAAO6M,WAAWuG,GAAQ,IACpCy8G,KAGFN,KAGLnB,GAAe/G,GACVwI,KAGFN,KAGT,SAAS0B,WACD7jH,EAAQ+/G,UACd/5G,GAAQhG,EAAM2C,IACdo9G,GAAY4D,KACZ39G,GAAQhG,EAAM2C,IACP3C,EAGT,SAASrM,WACDkrF,EAAM74E,GACZ+5G,GAAY4D,KACZ39G,GAAQ64E,EASV,SAASilC,GAAuBC,EAAUtqH,EAAMC,SACxC63E,EAAO,IAAIsuC,GAAqB,OAAbkE,GAAkC,OAAbA,EAl3BlB,oBALD,2BAw3B3BxyC,EAAKwyC,SAAWA,EAChBxyC,EAAK93E,KAAOA,EACZ83E,EAAK73E,MAAQA,EACN63E,EAGT,SAASyyC,GAAqB/D,EAAQ3uH,SAC9BigF,EAAO,IAAIsuC,GA93BQ,yBA+3BzBtuC,EAAK0uC,OAASA,EACd1uC,EAAK1/E,UAAYP,EACVigF,EAWT,SAAS0yC,GAAiBl1H,SAClBwiF,EAAO,IAAIsuC,GAAQQ,WACzB9uC,EAAKxiF,KAAOA,EACLwiF,EAGT,SAAS2yC,GAAclkH,SACfuxE,EAAO,IAAIsuC,GAh5BC,kBAi5BlBtuC,EAAKp+E,MAAQ6M,EAAM7M,MACnBo+E,EAAKqR,IAAMhwF,GAAOpB,MAAMwO,EAAM0C,MAAO1C,EAAM2C,KAEvC3C,EAAM0jH,QACS,OAAbnyC,EAAKqR,MACPrR,EAAKqR,IAAM,UAGbrR,EAAKmyC,MAAQ1jH,EAAM0jH,OAGdnyC,EAGT,SAAS4yC,GAAuBv1H,EAAU6J,EAAQC,SAC1C64E,EAAO,IAAIsuC,GA95BU,2BA+5B3BtuC,EAAK6yC,SAAwB,MAAbx1H,EAChB2iF,EAAK94E,OAASA,EACd84E,EAAK74E,SAAWA,EACX64E,EAAK6yC,WAAU1rH,EAAS2rH,QAAS,GAC/B9yC,EAST,SAAS+yC,GAAeC,EAAMhyH,EAAKY,SAC3Bo+E,EAAO,IAAIsuC,GA36BE,mBA46BnBtuC,EAAKh/E,IAAMA,EACXg/E,EAAKp+E,MAAQA,EACbo+E,EAAKgzC,KAAOA,EACLhzC,EAYT,SAASowC,GAAW3hH,EAAOwkH,OACrB50H,EACA0B,EAAOa,MAAMmG,UAAU9G,MAAMC,KAAKI,UAAW,GAC7C4yH,EAAMD,EAAcnpH,QAAQ,UAAU,CAACqpH,EAAO1+G,KAChD86G,GAAO96G,EAAQ1U,EAAKjC,OAAQ,sCACrBiC,EAAK0U,YAEdpW,EAAQ,IAAIE,MAAM20H,IACZz+G,MAAQA,GACdpW,EAAM62E,YAAcg+C,EACd70H,EAIR,SAAS+0H,GAAgB3kH,GAp+BV,IAq+BTA,EAAMW,MACRghH,GAAW3hH,EAn8BY,2BA/BD,IAq+BpBA,EAAMW,MACRghH,GAAW3hH,EA38Be,qBAzBL,IAu+BnBA,EAAMW,MACRghH,GAAW3hH,EA98Be,qBA/BR,IAg/BhBA,EAAMW,MACRghH,GAAW3hH,EAj9BmB,yBA/Bf,IAm/BbA,EAAMW,MACRghH,GAAW3hH,EAp9BiB,4BAw9B9B2hH,GAAW3hH,EAAOsgH,GAAwBtgH,EAAM7M,OAKlD,SAASyxH,GAAOzxH,SACR6M,EAAQ6jH,KA3/BM,IA6/BhB7jH,EAAMW,MAA4BX,EAAM7M,QAAUA,GACpDwxH,GAAgB3kH,GAKpB,SAASuH,GAAMpU,UAngCO,IAogCb4sH,GAAUp/G,MAA4Bo/G,GAAU5sH,QAAUA,EAInE,SAAS0xH,GAAaC,UA3gCH,IA4gCV/E,GAAUp/G,MAAyBo/G,GAAU5sH,QAAU2xH,EAIhE,SAASC,WACD/E,EAAW,OACjBh6G,GAAQ+5G,GAAUr9G,MAClBkiH,GAAO,MAECr9G,GAAM,MACRA,GAAM,MACRs8G,KACA7D,EAASzvH,KAAK,QAEdyvH,EAASzvH,KAAKy0H,MAETz9G,GAAM,MACTq9G,GAAO,aAKbf,KAjKF,SAA+B7D,SACvBzuC,EAAO,IAAIsuC,GAl3BS,0BAm3B1BtuC,EAAKyuC,SAAWA,EACTzuC,EA+JA0zC,CAAsBjF,GAI/B,SAASkF,KACPl/G,GAAQ+5G,GAAUr9G,YACZ1C,EAAQ6jH,YAriCS,IAwiCnB7jH,EAAMW,MA1iCc,IA0iCiBX,EAAMW,MACzCX,EAAM2iH,OACRhB,GAAW3hH,EAAOygH,IAGbyD,GAAclkH,IAGhBikH,GAAiBjkH,EAAM7M,OAGhC,SAASgyH,SACHnlH,EAAOzN,EAAK5B,SAChBqV,GAAQ+5G,GAAUr9G,MA1jCE,KA2jCpB1C,EAAQ+/G,IAEEp/G,MACRhQ,EAAKu0H,KACLN,GAAO,KAEAN,GAAe,OAAQ3zH,EADtBq0H,OAjkCG,IAqkCThlH,EAAMW,MAhkCU,IAgkCWX,EAAMW,MAGnCpO,EAAM2yH,KACNN,GAAO,KAEAN,GAAe,OAAQ/xH,EADtByyH,YAJRL,GAAgB3kH,GASpB,SAASolH,SAEH1sH,EAEAnG,EAHAyO,EAAa,GAIbxN,EAAM,GACNqH,EAAWoO,WACfjD,GAAQ+5G,GAAUr9G,MAClBkiH,GAAO,MAECr9G,GAAM,MASZhV,EAAM,MARNmG,EAAWysH,MAEE5yH,IAAIoO,OAAS0/G,GACjB3nH,EAASnG,IAAIxD,KAEb8L,EAASnC,EAASnG,IAAIY,QAK3Bd,OAAOiG,UAAUC,eAAe9G,KAAK+B,EAAKjB,GAC5CovH,GAAW,GA9jCoB,wEAgkC/BnuH,EAAIjB,IAAO,EAGbyO,EAAWzQ,KAAKmI,GAEX6O,GAAM,MACTq9G,GAAO,YAIXA,GAAO,KAlLT,SAAgC5jH,SACxBuwE,EAAO,IAAIsuC,GAt6BU,2BAu6B3BtuC,EAAKvwE,WAAaA,EACXuwE,EAgLA8zC,CAAuBrkH,GAYhC,MAAMskH,GAAgB,IACd,GAGR,SAASC,SACH5kH,EAAMX,EAAO89B,KAEbv2B,GAAM,YAfZ,WACEq9G,GAAO,WACD9mF,EAAO0nF,YACbZ,GAAO,KACA9mF,EAYE2nF,MAGLl+G,GAAM,YACDw9G,QAGLx9G,GAAM,YACD69G,QAGTzkH,EAAOo/G,GAAUp/G,KACjBqF,GAAQ+5G,GAAUr9G,MAjpCE,IAmpChB/B,GAA4B2kH,GAAcvF,GAAU5sH,OACtD2qC,EAAOmmF,GAAiBJ,KAAM1wH,YACzB,GAhpCgB,IAgpCZwN,GAlpCa,IAkpCkBA,EACpCo/G,GAAU4C,OACZhB,GAAW5B,GAAWU,IAGxB3iF,EAAOomF,GAAcL,UAChB,CAAA,GA1pCU,IA0pCNljH,QACH,IAAI7Q,MAAM6wH,IA9pCM,IA+pCbhgH,IACTX,EAAQ6jH,MACF1wH,MAAwB,SAAhB6M,EAAM7M,MACpB2qC,EAAOomF,GAAclkH,IA9pCF,IA+pCVW,IACTX,EAAQ6jH,MACF1wH,MAAQ,KACd2qC,EAAOomF,GAAclkH,IACZuH,GAAM,MAAQA,GAAM,OAC7Bu2B,EAAOomF,GAAcpB,MACrBnvH,MAEAgxH,GAAgBd,aAGX/lF,EAIT,SAAS4nF,WACDp0H,EAAO,MACbszH,GAAO,MAEFr9G,GAAM,UACFvB,GAAQ3W,KACbiC,EAAKf,KAAKy0H,OAENz9G,GAAM,OAIVq9G,GAAO,YAIXA,GAAO,KACAtzH,EAcT,SAASq0H,YACPf,GAAO,KAZT,WACE5+G,GAAQ+5G,GAAUr9G,YACZ1C,EAAQ6jH,YAlYhB,SAA0B7jH,UAp0BJ,IAq0BbA,EAAMW,MAp0BI,IAo0BwBX,EAAMW,MAv0BvB,IAu0BgDX,EAAMW,MAn0BzD,IAm0ByFX,EAAMW,KAmY/GilH,CAAiB5lH,IACpB2kH,GAAgB3kH,GAGXikH,GAAiBjkH,EAAM7M,OAKvB0yH,GAGT,SAASC,KACPlB,GAAO,WACD9mF,EAAO0nF,YACbZ,GAAO,KACA9mF,EA0BT,SAASioF,WACDjoF,EAxBR,eACMA,MACJA,EAAOynF,UAGDh+G,GAAM,KAERu2B,EAAOqmF,GAAuB,IAAKrmF,EADxB6nF,WAEN,GAAIp+G,GAAM,KAEfu2B,EAAOkmF,GAAqBlmF,EADrB4nF,UAEF,CAAA,IAAIn+G,GAAM,WAEfu2B,EAAOqmF,GAAuB,IAAKrmF,EADxBgoF,aAORhoF,EAKMkoF,MA/uCO,IAivChBjG,GAAUp/G,OACR4G,GAAM,OAASA,GAAM,aACjB,IAAIzX,MAAM6wH,WAIb7iF,EAIT,SAASmoF,SACHjmH,EAAO89B,KA5vCS,IA8vChBiiF,GAAUp/G,MAjwCG,IAiwCyBo/G,GAAUp/G,KAClDm9B,EAAOioF,SACF,CAAA,GAAIx+G,GAAM,OAASA,GAAM,YACxB,IAAIzX,MAAM6wH,IACX,GAAIp5G,GAAM,MAAQA,GAAM,MAAQA,GAAM,MAAQA,GAAM,KACzDvH,EAAQ6jH,KACR/lF,EAAOmoF,KACPnoF,EA7TJ,SAA+BimF,EAAU3D,SACjC7uC,EAAO,IAAIsuC,GAl7BS,0BAm7B1BtuC,EAAKwyC,SAAWA,EAChBxyC,EAAK6uC,SAAWA,EAChB7uC,EAAKhoE,QAAS,EACPgoE,EAwTE20C,CAAsBlmH,EAAM7M,MAAO2qC,OACrC,CAAA,GAAI+mF,GAAa,WAAaA,GAAa,SAAWA,GAAa,gBAClE,IAAI/0H,MAAM6wH,IAEhB7iF,EAAOioF,aAGFjoF,EAGT,SAASqoF,GAAiBnmH,OACpBomH,EAAO,KAhxCS,IAkxChBpmH,EAAMW,MArxCO,IAqxCqBX,EAAMW,YACnC,SAGDX,EAAM7M,WACP,KACHizH,EAAO,YAGJ,KACHA,EAAO,YAGJ,IACHA,EAAO,YAGJ,IACHA,EAAO,YAGJ,IACHA,EAAO,YAGJ,SACA,SACA,UACA,MACHA,EAAO,YAGJ,QACA,QACA,SACA,SACA,iBACA,KACHA,EAAO,YAGJ,SACA,SACA,MACHA,EAAO,YAGJ,QACA,IACHA,EAAO,YAGJ,QACA,QACA,IACHA,EAAO,UAIJA,EA8DT,SAASpB,SACHlnF,EAAMoiF,SACVpiF,EAtDF,eACMuoF,EAAQC,EAASxoF,EAAM99B,EAAOomH,EAAMl1C,EAAOx3E,EAAOqqH,EAAUtqH,EAAM9J,KACtE02H,EAAStG,GACTtmH,EAAOwsH,KAIM,KAFbG,EAAOD,GADPnmH,EAAQ+/G,YAICtmH,MAGTuG,EAAMomH,KAAOA,EACbvC,KACAyC,EAAU,CAACD,EAAQtG,IAEnB7uC,EAAQ,CAACz3E,EAAMuG,EADftG,EAAQusH,OAGAG,EAAOD,GAAiBpG,KAAc,GAAG,MAExC7uC,EAAM7hF,OAAS,GAAK+2H,GAAQl1C,EAAMA,EAAM7hF,OAAS,GAAG+2H,MACzD1sH,EAAQw3E,EAAMpvE,MACdiiH,EAAW7yC,EAAMpvE,MAAM3O,MACvBsG,EAAOy3E,EAAMpvE,MACbwkH,EAAQxkH,MACRg8B,EAAOgmF,GAAuBC,EAAUtqH,EAAMC,GAC9Cw3E,EAAM3gF,KAAKutC,IAIb99B,EAAQ6jH,MACFuC,KAAOA,EACbl1C,EAAM3gF,KAAKyP,GACXsmH,EAAQ/1H,KAAKwvH,IACbjiF,EAAOmoF,KACP/0C,EAAM3gF,KAAKutC,OAKbA,EAAOozC,EADPvhF,EAAIuhF,EAAM7hF,OAAS,GAEnBi3H,EAAQxkH,MAEDnS,EAAI,GACT22H,EAAQxkH,MACRg8B,EAAOgmF,GAAuB5yC,EAAMvhF,EAAI,GAAGwD,MAAO+9E,EAAMvhF,EAAI,GAAImuC,GAChEnuC,GAAK,SAGAmuC,EAMAyoF,GAEHh/G,GAAM,OACRs8G,KACA3D,EAAa8E,KACbJ,GAAO,KAEP9mF,EAjgBJ,SAAqCjlC,EAAMqnH,EAAYC,SAC/C5uC,EAAO,IAAIsuC,GAp4Be,gCAq4BhCtuC,EAAK14E,KAAOA,EACZ04E,EAAK2uC,WAAaA,EAClB3uC,EAAK4uC,UAAYA,EACV5uC,EA4fEi1C,CAA4B1oF,EAAMoiF,EAD7B8E,OAIPlnF,EAIT,SAAS0nF,WACD1nF,EAAOknF,QAETz9G,GAAM,WACF,IAAIzX,MAAM6wH,WAGX7iF,EAGT,SAAS1gC,GAAQ6wF,GAEfjoF,GAAQ,EACR3W,IAFAuD,GAASq7F,GAEO5+F,OAChB0wH,GAAY,KACZpsH,WACMmqC,EAAO0nF,QAh7CA,IAk7CTzF,GAAUp/G,WACN,IAAI7Q,MAAM,2CAGXguC,EAGT,IAAI2oF,GAAY,CACd3iH,IAAK,MACLq5C,EAAG,SACHu9C,IAAK,WACLh1F,KAAM,YACNghH,MAAO,aACPC,OAAQ,cACR/3F,GAAI,UACJ4iF,QAAS,eACT3iF,MAAO,aACP+3F,UAAW,mBACX5sD,UAAW,oBAGb,SAAS6sD,GAAWC,YAYTj4H,EAAGE,EAAMg4H,EAAMpmH,UACfrP,YAZOvC,EAAMuC,EAAMy1H,EAAMpmH,OAC5BlR,EAAMq3H,EAAQx1H,EAAK,WAEnBy1H,IACFt3H,EAAMs3H,EAAO,IAAMt3H,EAAM,IACW,IAAhCs3H,EAAKlsG,YAAY,OAAQ,KAAUprB,EAAM,IAAMA,EAAM,MAGpDA,EAAM,IAAMV,GAAQ4R,EAAO,EAAI,GAAc,IAATA,EAAa,KAAO,IAAMrP,EAAKE,MAAM,GAAGgC,IAAIszH,GAAS9oH,KAAK,KAAO,KAI7FgpH,CAAOj4H,EAAMuC,EAAMy1H,EAAMpmH,SAGpCkN,EAAO,WACPo5G,EAAS,SACTC,EAAS,eACR,CAELloH,MAAO,eACPsG,SAAU,kBACVjR,IAAK,WACLozC,KAAM,YACNS,KAAM,YACNmY,KAAM,YACNhrB,MAAO,aACPz4B,KAAM,YACNirC,IAAK,WACL/zC,IAAK,WACL2R,MAAO,aACPvR,IAAK,WACLsC,IAAK,WACLD,IAAK,WACL/B,IAAK,WACL85B,OAAQ,cACR/oB,MAAO,aACPuiC,IAAK,WACLhjC,KAAM,YACN0iC,IAAK,WACL2b,MAAO,SAAU7xD,GACXA,EAAKjC,OAAS,GAAGO,EAAM,wCACvB0B,EAAKjC,OAAS,GAAGO,EAAM,+CACrB2D,EAAIjC,EAAKkC,IAAIszH,SACZ,YAAcvzH,EAAE,GAAK,cAAgBA,EAAE,GAAK,IAAMA,EAAE,GAAK,MAGlEuzB,IAAK,WACLsc,IAAK,WACL+jF,SAAUt5G,EACV7X,KAAMnH,EAAG,UAAWgf,EAAM,GAC1BlC,IAAK9c,EAAG,SAAUgf,EAAM,GACxB5O,KAAMpQ,EAAG,cAAegf,EAAM,GAC9BxB,MAAOxd,EAAG,WAAYgf,EAAM,GAC5BrP,MAAO3P,EAAG,WAAYgf,EAAM,GAC5BnP,QAAS7P,EAAG,aAAcgf,EAAM,GAChCjP,QAAS/P,EAAG,aAAcgf,EAAM,GAChC/O,aAAcjQ,EAAG,kBAAmBgf,EAAM,GAC1CsF,KAAMtkB,EAAG,UAAWgf,EAAM,GAC1Bu5G,eAAgBv4H,EAAG,oBAAqBgf,EAAM,GAC9Cw5G,QAASx4H,EAAG,aAAcgf,EAAM,GAChCy5G,OAAQz4H,EAAG,YAAagf,EAAM,GAC9B05G,QAAS14H,EAAG,iBAAkBgf,EAAM,GACpC25G,SAAU34H,EAAG,cAAegf,EAAM,GAClC45G,SAAU54H,EAAG,cAAegf,EAAM,GAClC65G,WAAY74H,EAAG,gBAAiBgf,EAAM,GACtC85G,WAAY94H,EAAG,gBAAiBgf,EAAM,GACtC+5G,gBAAiB/4H,EAAG,qBAAsBgf,EAAM,GAEhDxe,OAAQR,EAAG,SAAU,MAAO,GAE5Bg0H,WAAY,aACZloE,SAAU,WACVktE,MAAOh5H,EAAG,cAAeo4H,EAAQ,GACjCa,MAAOj5H,EAAG,cAAeo4H,EAAQ,GACjCz2H,UAAW3B,EAAG,YAAao4H,GAC3B5lG,MAAOxyB,EAAG,QAASo4H,GACnBn/G,KAAMjZ,EAAG,OAAQo4H,EAAQ,GAEzBh2D,OAAQi2D,EACRruH,KAAMhK,EAAG,OAAQq4H,GAEjBa,GAAI,SAAUz2H,GACRA,EAAKjC,OAAS,GAAGO,EAAM,qCACvB0B,EAAKjC,OAAS,GAAGO,EAAM,4CACrB2D,EAAIjC,EAAKkC,IAAIszH,SACZ,IAAMvzH,EAAE,GAAK,IAAMA,EAAE,GAAK,IAAMA,EAAE,GAAK,MAUpD,SAASuzH,GAASr2H,SAEVu3H,GADNv3H,EAAMA,GAAO,IACOu3H,QAAU3qH,GAAM5M,EAAIu3H,SAAW,GAC7CC,EAAYx3H,EAAIw3H,UAAY5qH,GAAM5M,EAAIw3H,WAAa,GACnDC,EAAYz3H,EAAIy3H,WAAazB,GAC7B0B,GAAa13H,EAAI03H,WAAatB,IAAWl/F,GACzCygG,EAAY33H,EAAI23H,UAChBC,EAAW53H,EAAI43H,SACfC,EAAe1xH,EAAWwxH,GAAaA,EAAYz3H,GAAO,GAAEy3H,MAAcz3H,UAC5E43H,EAAU,GACVz5H,EAAS,GACT05H,EAAc,WAET7gG,EAAM8gG,MACTttH,GAASstH,GAAM,OAAOA,QACpB7oF,EAAY8oF,EAAWD,EAAI9nH,aAChB,MAAbi/B,GAAmBhwC,EAAM,qBAAuB64H,EAAI9nH,MACjDi/B,EAAU6oF,SAGbC,EAAa,CACjBvJ,QAASlvH,GAAKA,EAAE2yF,IAChBlK,WAAYzoF,UACJU,EAAKV,EAAElB,YAETy5H,EAAc,EACT73H,EACE4H,GAAe0vH,EAAWt3H,GAC5Bf,EAAM,uBAAyBe,GAC7B4H,GAAe2vH,EAAWv3H,GAC5Bu3H,EAAUv3H,GACR4H,GAAeyvH,EAASr3H,GAC1BA,GAEP43H,EAAQ53H,GAAM,EACP23H,EAAa33H,KAGxB+uH,iBAAkBzvH,UACV+T,GAAK/T,EAAEm0H,SACP9wH,EAAIq0B,EAAM13B,EAAEwI,QACduL,IAAGwkH,GAAe,SAChBx4H,EAAI23B,EAAM13B,EAAEyI,iBAEdpF,IAAM+0H,IAERv5H,EAnDR,SAAqBwB,SACbL,EAAIK,GAAKA,EAAEjB,OAAS,SACnBY,IAAe,MAATK,EAAE,IAAuB,MAATA,EAAEL,IAAuB,MAATK,EAAE,IAAwB,MAATA,EAAEL,IAAeK,EAAEkB,MAAM,GAAI,GAAKlB,EAiDnFq4H,CAAY34H,IAAM,GAGvBgU,IAAGwkH,GAAe,GACfl1H,GAAK0Q,EAAI,IAAMhU,EAAI,IAAMA,EAAI,MAEtCuvH,eAAgBtvH,IACQ,eAAlBA,EAAEgwH,OAAOt/G,MACX/Q,EAAM,wBAA0BK,EAAEgwH,OAAOt/G,YAGrCs/G,EAAShwH,EAAEgwH,OAAOlxH,KAClBuC,EAAOrB,EAAE4B,UACThD,EAAK0J,GAAe4vH,EAAWlI,IAAWkI,EAAUlI,UACrDpxH,GAAIe,EAAM,0BAA4BqwH,GACpCrpH,EAAW/H,GAAMA,EAAGyC,GAAQzC,EAAK,IAAMyC,EAAKkC,IAAIm0B,GAAO3pB,KAAK,KAAO,KAE5EqhH,gBAAiBpvH,GAAK,IAAMA,EAAE+vH,SAASxsH,IAAIm0B,GAAO3pB,KAAK,KAAO,IAC9DshH,iBAAkBrvH,GAAK,IAAM03B,EAAM13B,EAAEwJ,MAAQ,IAAMxJ,EAAE8zH,SAAW,IAAMp8F,EAAM13B,EAAEyJ,OAAS,IACvFkmH,gBAAiB3vH,GAAK,IAAMA,EAAE8zH,SAAWp8F,EAAM13B,EAAEmwH,UAAY,IAC7DZ,sBAAuBvvH,GAAK,IAAM03B,EAAM13B,EAAE4I,MAAQ,IAAM8uB,EAAM13B,EAAEiwH,YAAc,IAAMv4F,EAAM13B,EAAEkwH,WAAa,IACzGV,kBAAmBxvH,GAAK,IAAM03B,EAAM13B,EAAEwJ,MAAQxJ,EAAE8zH,SAAWp8F,EAAM13B,EAAEyJ,OAAS,IAC5EimH,iBAAkB1vH,GAAK,IAAMA,EAAE+Q,WAAWxN,IAAIm0B,GAAO3pB,KAAK,KAAO,IACjEohH,SAAUnvH,IACRu4H,GAAe,QACTn1H,EAAIs0B,EAAM13B,EAAEsC,YAClBi2H,GAAe,EACRn1H,EAAI,IAAMs0B,EAAM13B,EAAEkD,kBAIpB2zH,EAAQ2B,SACTxrG,EAAS,CACbgxE,KAAMtmE,EAAM8gG,GACZF,QAASl2H,OAAO+E,KAAKmxH,GACrBz5H,OAAQuD,OAAO+E,KAAKtI,WAEtBy5H,EAAU,GACVz5H,EAAS,GACFmuB,SAGT6pG,EAAQqB,UAAYA,EACpBrB,EAAQoB,UAAYA,EACbpB,EC1qDT,MAAM8B,GAAY,YACZC,GAAQ,QAYRC,GAAa,aAEnB,SAASC,GAAU9nG,EAAO8vC,WAKpBi4D,EACA7xH,EALArI,EAASiiE,EAAMjiE,OACfgX,EAASirD,EAAMjrD,OACf7V,EAAInB,EAAOO,OACXM,EAAI,EAIDA,EAAIM,IAAKN,MACdwH,EAAIrI,EAAOa,IACTR,OAASK,EAAML,QAAUK,EAAM2H,EAAE3H,OAE/BoL,GADJouH,EAAO7xH,EAAEhI,OAAO8xB,MACE+nG,EAAOn1H,EAASm1H,IAC9BpuH,GAAOkL,EAAOnW,MAAKmW,EAAOnW,GAAKkE,EAASiS,EAAOnW,KAC/CiL,GAAOkL,EAAOnW,GAAG,MAAKmW,EAAOnW,GAAKmW,EAAOnW,GAAG6D,IAAIK,IArBtC,MAuBVsD,EAAEwJ,SAGAzO,EAAQ4T,EAAOnW,IAAMmW,EAAOnW,GAAGsX,QAAQ+hH,GAAQ,EAAIA,IAASljH,EAAOnW,UAC9D,UA1BQ,MA6BbwH,EAAEwJ,UACCnG,GAAQwuH,EAAMljH,EAAOnW,IAAK,OAAO,OACjC,GA5BS,SA4BLwH,EAAEwJ,UAENnG,GAAQwuH,EAAMljH,EAAOnW,IAAI,GAAM,GAAQ,OAAO,OAC9C,GAjCU,QAiCNwH,EAAEwJ,UAENnG,GAAQwuH,EAAMljH,EAAOnW,IAAI,GAAO,GAAQ,OAAO,OAC/C,GAnCS,SAmCLwH,EAAEwJ,OACNnG,GAAQwuH,EAAMljH,EAAOnW,IAAI,GAAO,GAAO,OAAO,SAKlD,EA2DT,MAAMs5H,GAAcz5H,EAxGC,WAyGfi2C,GApKN,SAAmBtuC,OACbvC,EAAQuC,EACRN,EAAUM,WAQLsC,EAAKlG,EAAGS,EAAG0C,EAAIC,OACZ,MAAND,IAAYA,EAAK,GACX,MAANC,IAAYA,EAAKpD,EAAElE,QAEhBqH,EAAKC,GAAI,OACRoN,EAAMrN,EAAKC,IAAO,EACpBE,EAAQtD,EAAEwQ,GAAM/P,GAAK,EAAG0C,EAAKqN,EAAM,EAAOpN,EAAKoN,SAG9CrN,SAfQ,IAAbS,EAAE9H,SACJuF,EAAQ,CAACoP,EAAGhQ,IAAMmD,EAAE6M,GAAKhQ,EAEzB6C,EAyCJ,SAA6BM,SACpB,CAAC6M,EAAGhQ,IArDb,SAAoBT,EAAGlD,UACdkD,EAAIlD,GAAK,EAAIkD,EAAIlD,EAAI,EAAIkD,GAAKlD,EAAI,EAAIyT,IAoD5BzM,CAAUF,EAAE6M,GAAIhQ,GA1CrBiQ,CAAoB9M,IAkCzB,CACLsC,KAAAA,EACAE,gBATcpG,EAAGS,EAAG0C,EAAIC,GACd,MAAND,IAAYA,EAAK,GACX,MAANC,IAAYA,EAAKpD,EAAElE,cACjBM,EAAI8J,EAAKlG,EAAGS,EAAG0C,EAAIC,EAAK,UACvBhH,EAAI+G,GAAM9B,EAAMrB,EAAE5D,EAAI,GAAIqE,IAAMY,EAAMrB,EAAE5D,GAAIqE,GAAKrE,EAAI,EAAIA,GAMhE+J,eAtBanG,EAAGS,EAAG0C,EAAIC,OACb,MAAND,IAAYA,EAAK,GACX,MAANC,IAAYA,EAAKpD,EAAElE,QAEhBqH,EAAKC,GAAI,OACRoN,EAAMrN,EAAKC,IAAO,EACpBE,EAAQtD,EAAEwQ,GAAM/P,GAAK,EAAG2C,EAAKoN,EAASrN,EAAKqN,EAAM,SAGhDrN,IAqIIyN,CAAS8kH,IAClB5kH,GAAaohC,GAAOhsC,KACpB2K,GAAcqhC,GAAO/rC,MAkH3B,IAAIg+B,GAAM,CACRwxF,QAAS,SAAU9rG,EAAMjqB,OAClBiqB,EAAK/tB,OAAQ,OAAO8D,UACrBxD,EAAI,EACJM,EAAIkD,EAAM9D,OAEPM,EAAIM,IAAKN,EAAOytB,EAAKnW,QAAQ9T,EAAMxD,IAAM,GAAGytB,EAAK7sB,KAAK4C,EAAMxD,WAE5DytB,GAET+rG,YAAa,SAAU/rG,EAAMjqB,UACnBiqB,EAAK/tB,OAAiB+tB,EAAK3f,QAAOlG,GAAKpE,EAAM8T,QAAQ1P,IAAM,IAA7CpE,GAExBi2H,QAAS,SAAUhsG,EAAMjqB,OACnBuD,EAAK7C,EAASV,EAAM,IACpBwD,EAAK9C,EAASV,EAAM,WAEpBuD,EAAKC,IACPD,EAAKvD,EAAM,GACXwD,EAAKxD,EAAM,IAGRiqB,EAAK/tB,QACN+tB,EAAK,GAAK1mB,IAAI0mB,EAAK,GAAK1mB,GACxB0mB,EAAK,GAAKzmB,IAAIymB,EAAK,GAAKzmB,GACrBymB,GAHkB,CAAC1mB,EAAIC,IAKhC0yH,YAAa,SAAUjsG,EAAMjqB,OACvBuD,EAAK7C,EAASV,EAAM,IACpBwD,EAAK9C,EAASV,EAAM,WAEpBuD,EAAKC,IACPD,EAAKvD,EAAM,GACXwD,EAAKxD,EAAM,IAGRiqB,EAAK/tB,OAENsH,EAAKymB,EAAK,IAAMA,EAAK,GAAK1mB,EACrB,IAEH0mB,EAAK,GAAK1mB,IAAI0mB,EAAK,GAAK1mB,GACxB0mB,EAAK,GAAKzmB,IAAIymB,EAAK,GAAKzmB,GAGvBymB,GATkB,CAAC1mB,EAAIC,KAelC,SAAS2yH,GAAiBv6H,EAAMuC,EAAMi4H,EAAOplG,GACvC7yB,EAAK,GAAGqP,OAASw+G,IAASvvH,EAAM,yEAC9B0uB,EAAOhtB,EAAK,GAAG6B,MAEf3D,EAAQ,OACRg6H,EAAYC,QACZC,EARW,IAQaprG,GAHnBhtB,EAAKjC,QAAU,GAAKsE,EAAKrC,GAAM6B,SAK/By1H,IAAcrwH,GAAe4rB,EAAQqlG,KAC9CrlG,EAAOqlG,SAAaD,EAAMI,QAAQrrG,GAAMsrG,UAAUL,EAAO/5H,IAItD+I,GAAe4rB,EAAQulG,KAC1BvlG,EAAOulG,GAAYH,EAAMI,QAAQrrG,GAAMurG,aCpV3C,SAASvrG,GAAKvvB,SACNuvB,EAAOxsB,KAAK+rB,QAAQS,KAAKvvB,UACxBuvB,EAAOA,EAAKxY,OAAO3S,MAAQ,GAyBpC,MAAM22H,GAAO34H,GAAU,SAAUgC,EAAOmnB,UACvBxoB,KAAK+rB,QAAQkJ,SAAS3e,SACvBjX,GAAQmpB,EAAflS,CAAqBjV,IAGxBmN,GAASwpH,GAAK,UACdvwG,GAAauwG,GAAK,cAClBzwG,GAAYywG,GAAK,aACjBtwG,GAAYswG,GAAK,aACjBxwG,GAAWwwG,GAAK,YAChBC,GAAU,IAAI9zH,KAAK,IAAM,EAAG,GAElC,SAASkd,GAAK9G,EAAOV,EAAKrE,UACnBoB,OAAO0W,UAAU/S,IAAW3D,OAAO0W,UAAUzT,IAClDo+G,GAAQC,QAAQ,KAChBD,GAAQz9G,SAASD,GACjB09G,GAAQl+G,QAAQF,GACT4N,GAAW9nB,KAAKK,KAAMi4H,GAASziH,IAJyB,GAyBjE,SAAS2iH,GAAYl7H,EAAMuC,EAAMi4H,EAAOplG,GAClC7yB,EAAK,GAAGqP,OAASw+G,IACnBvvH,EAAM,oEAGF0uB,EAAOhtB,EAAK,GAAG6B,MACfu2H,EAXW,IAWaprG,MAEzB/lB,GAAemxH,EAAUvlG,OAE1BA,EAAOulG,GAAYH,EAAMI,QAAQrrG,GAAMurG,YACvC,MAAO5nG,KAeb,SAASioG,GAAan7H,EAAMuC,EAAMi4H,EAAOplG,MACnC7yB,EAAK,GAAGqP,OAASw+G,GAEnBgL,GAAmBZ,EAAOplG,EAAQ7yB,EAAK,GAAG6B,gBAGrCpE,KAAQw6H,EAAMvhE,OACjBmiE,GAAmBZ,EAAOplG,EAAQp1B,GAKxC,SAASo7H,GAAmBZ,EAAOplG,EAAQp1B,SACnCq7H,EA1CY,IA0Ccr7H,MAE3BwJ,GAAe4rB,EAAQimG,OAExBjmG,EAAOimG,GAAab,EAAMc,SAASt7H,GACnC,MAAOkzB,KAKb,SAASqoG,GAASv7H,EAAM2/E,OAClBp+E,SACGsG,EAAW7H,GAAQA,EAAOoM,GAASpM,IAASuB,EAAIo+E,EAAI1mB,OAAOj5D,KAAUuB,EAAE6C,WAAQ8F,EAExF,SAASsxH,GAAuBzD,EAAS0D,EAAOC,GAE9CD,EAAME,YAAcp6H,GAAKA,GAAKA,EAAE0/B,UAAY1/B,EAAE0/B,YAAc,EAG5Dy6F,EAASE,WAAaT,GACtBO,EAASG,OAASV,GAClBO,EAASxgD,OAASigD,SAEZW,EAAMn2F,GAAO,MAAQA,EAAI/zB,OAASw+G,GAAU7hG,GAjEhC,IAiE0DoX,EAAIvhC,OAASmqB,GAjEvE,KAiEkG,IAAMwpG,EAAQpyF,IAAQ,UAInI,CACLi2F,WAAYr5H,GAAS,oBAAmBu5H,EAAIv5H,EAAK,OACjDs5H,OAAQt5H,GAAS,GAAEu5H,EAAIv5H,EAAK,cAC5B24E,OAAQ34E,GAAS,GAAEu5H,EAAIv5H,EAAK,OAAOw1H,EAAQx1H,EAAK,QAIpD,SAASw5H,GAAUC,EAAYC,UACtB,SAAUx6B,EAAYmM,EAASl0F,MAChC+nF,EAAY,OAERxgG,EAAIs6H,GAAS95B,GAAa/nF,GAAS3W,MAAM+rB,gBACxC7tB,GAAKA,EAAEZ,KAAK27H,GAAYpuB,UAGxBquB,EAAaruB,IAK1B,MAAMsuB,GAAUH,GAAU,Q7H5FX,SAASryH,UACtButF,GAAU,IAAIzhF,GACd6hB,GAAO3tB,EAAQwtF,IACE,EAAVD,M6H0FHklC,GAAYJ,GAAU,U5HrBb,SAAShqH,OAClBnR,EAAGM,EAAGsD,EAAGlD,EAAG6L,EAAQivH,EAAUv2H,KAElC+wF,GAAOD,KAAYJ,GAAUG,GAAOz7E,EAAAA,GACpC87E,GAAS,GACT1/D,GAAOtlB,EAASmnF,IAGZh4F,EAAI61F,GAAOz2F,OAAQ,KACrBy2F,GAAOr3E,KAAKo6E,IAGPl5F,EAAI,EAAkBuM,EAAS,CAAxB3I,EAAIuyF,GAAO,IAAkBn2F,EAAIM,IAAKN,EAE5Cm5F,GAAcv1F,GADlBlD,EAAIy1F,GAAOn2F,IACY,KAAOm5F,GAAcv1F,EAAGlD,EAAE,KAC3C6pE,GAAM3mE,EAAE,GAAIlD,EAAE,IAAM6pE,GAAM3mE,EAAE,GAAIA,EAAE,MAAKA,EAAE,GAAKlD,EAAE,IAChD6pE,GAAM7pE,EAAE,GAAIkD,EAAE,IAAM2mE,GAAM3mE,EAAE,GAAIA,EAAE,MAAKA,EAAE,GAAKlD,EAAE,KAEpD6L,EAAO3L,KAAKgD,EAAIlD,OAMf86H,GAAYnhH,EAAAA,EAAiCra,EAAI,EAAG4D,EAAI2I,EAAlCjM,EAAIiM,EAAO7M,OAAS,GAAyBM,GAAKM,EAAGsD,EAAIlD,IAAKV,EACvFU,EAAI6L,EAAOvM,IACNiF,EAAQslE,GAAM3mE,EAAE,GAAIlD,EAAE,KAAO86H,IAAUA,EAAWv2H,EAAO0wF,GAAUj1F,EAAE,GAAIq1F,GAAUnyF,EAAE,WAI9FuyF,GAASxvF,GAAQ,KAEVgvF,KAAYt7E,EAAAA,GAAYy7E,KAASz7E,EAAAA,EAClC,CAAC,CAAClG,IAAKA,KAAM,CAACA,IAAKA,MACnB,CAAC,CAACwhF,GAASG,IAAO,CAACC,GAASC,Q4HZ9BylC,GAAcN,GAAU,Y1HhDf,SAASryH,GACtB6uF,GAAKC,GACLC,GAAKC,GAAKC,GACVC,GAAKC,GAAKC,GAAK,EACfx1D,GAAK,IAAI9tB,GACTujF,GAAK,IAAIvjF,GACTwjF,GAAK,IAAIxjF,GACT6hB,GAAO3tB,EAAQswF,QAEX/0F,GAAKq+B,GACL1tB,GAAKmjF,GACL3hF,GAAK4hF,GACL7hF,EAAI89E,GAAMhwF,EAAG2Q,EAAGwB,UAGhBD,EAAI49E,KACN9vF,EAAI2zF,GAAIhjF,EAAIijF,GAAIzhF,EAAI0hF,GAEhBN,GAAK1hD,KAAS7xC,EAAIwzF,GAAI7iF,EAAI8iF,GAAIthF,EAAIuhF,KACtCxhF,EAAI89E,GAAMhwF,EAAG2Q,EAAGwB,IAER29E,IAAiB,CAAChgF,IAAKA,KAG1B,CAACuxB,GAAM1wB,EAAG3Q,GAAKioD,GAAS/T,GAAK/hC,EAAID,GAAK+1C,O0HwC/C,SAAS/nD,GAAI6tB,EAAI5wB,EAAQG,OAErBywB,EAAG5wB,GAAQQ,MAAMowB,EAAI,CAAC,cAAcxwB,OAAO,GAAGC,MAAMC,KAAKH,KACzD,MAAO2wB,GACPF,EAAGhwB,KAAKkwB,UAGH3wB,EAAKA,EAAKjC,OAAS,GAa5B,SAASg8H,GAAwBC,SACzB9kG,EAAM8kG,EAAe,WAEvB9kG,GAAO,OACFA,EAAM,MAGRvyB,KAAKO,KAAKgyB,EAAM,MAAS,MAAO,KAGzC,SAAS+kG,GAAU7wE,SACXvqD,EAAImqD,GAAII,SAIP,MAHG2wE,GAAwBl7H,EAAE4C,GAGhB,MAFVs4H,GAAwBl7H,EAAEyS,GAEH,MADvByoH,GAAwBl7H,EAAEE,GAkBtC,SAASm7H,GAAMj4H,EAAGlD,UACTkD,IAAMlD,GAAKkD,GAAMA,GAAKlD,GAAMA,IAAW6B,EAAQqB,MAAKrB,EAAQ7B,IAAMkD,EAAElE,SAAWgB,EAAEhB,SAG1F,SAAoBkE,EAAGlD,OAChB,IAAIV,EAAI,EAAGM,EAAIsD,EAAElE,OAAQM,EAAIM,IAAKN,MAChC67H,GAAMj4H,EAAE5D,GAAIU,EAAEV,IAAK,OAAO,SAG1B,EAR0F87H,CAAWl4H,EAAGlD,MAAa+B,EAASmB,KAAMnB,EAAS/B,KAAKq7H,GAAYn4H,EAAGlD,IAW1K,SAASq7H,GAAYn4H,EAAGlD,OACjB,MAAMkC,KAAOgB,MACXi4H,GAAMj4H,EAAEhB,GAAMlC,EAAEkC,IAAO,OAAO,SAG9B,EAGT,SAASo5H,GAAgBz7C,UAChBr/E,GAAK66H,GAAYx7C,EAAOr/E,GAiEjC,MAAM+6H,GAAY,GAMlB,SAASh4H,GAAMi4H,UACN35H,EAAQ25H,IAAQ7sE,YAAYC,OAAO4sE,GAAOA,EAAM,KAGzD,SAAS/5G,GAAS+5G,UACTj4H,GAAMi4H,KAAS1wH,GAAS0wH,GAAOA,EAAM,MAyF9C,MAAM5qG,GAAQjd,GAAKA,EAAEsa,KAErB,SAASwtG,GAAU/8H,EAAM8uB,SACjB4/E,EAAOn/E,GAAK7sB,KAAKosB,EAAS9uB,UACzB0uG,EAAK1hE,MAAQ0hE,EAAK1hE,KAAKo0B,QAAU,GAc1C,MAAM47D,GAAU,IAAwB,oBAAXz+C,QAA0BA,QAAU,KAuCjE,MAAM0+C,GAAkB,CACtB19F,OAAM,IACGA,WAITa,iBAAAA,GACAiB,oBAAAA,GACAU,kBAAAA,GACA5B,cAAAA,GACAiB,iBAAAA,GACAU,eAAAA,GACAxB,eAAAA,GACAgB,kBAAAA,GACAU,gBAAAA,GACAhC,aAAAA,GACAmB,gBAAAA,GACAU,cAAAA,GACA1+B,QAAAA,YACAyI,UACAC,GAEAqxH,UAAUp7H,QACKoI,IAANpI,WAGToK,GACA7I,SAAAA,EACA8I,SAAAA,GACAC,SAAAA,GACAinB,QAAAA,GAEA8pG,QAAQr7H,GACM,MAALA,GAAaA,GAAMA,EAG5BmM,UAAAA,GACAG,OAAAA,GACAtJ,SAAAA,EACAgH,SAAAA,GACAsxH,QApLF,SAAiBN,KAAQv6H,UAChBwgB,GAAS+5G,GAAK5kH,WAAW3V,IAoLhC0M,KAxLF,SAAc6tH,KAAQv6H,UACbsC,GAAMi4H,GAAK7tH,QAAQ1M,IAwL1B86H,YAnLF,SAAqBP,KAAQv6H,UACpBwgB,GAAS+5G,GAAKhxG,eAAevpB,IAmLpC+J,QA9KF,SAAiBkB,EAAK6kB,EAASirG,UACzBz1H,EAAWy1H,IAAOz8H,EAAM,wCACrBqZ,OAAO1M,GAAKlB,QAAQ+lB,EAASirG,IA6KpCtqH,QA3KF,SAAiB8pH,UACRj4H,GAAMi4H,GAAKr6H,QAAQuQ,WA2K1BvQ,MAnLF,SAAeq6H,KAAQv6H,UACdwgB,GAAS+5G,GAAKr6H,SAASF,IAmL9BiI,MAAAA,GACA+B,KAAAA,GACAO,MAzSF,iBACQvK,EAAO,GAAGE,MAAMC,KAAKI,kBAC3BP,EAAK4R,QAAQ,IACNhL,MAAU5G,QAuSjBmL,QACA9I,EACA24H,MA/MF,SAAgBhuG,EAAMvvB,SACdH,EAAWg9H,GAAU78H,KAAU68H,GAAU78H,GAAQS,EAAMT,WACtDmD,EAAQosB,GAAQA,EAAK9qB,IAAI5E,GAAYA,EAAS0vB,IA8MrD7nB,KAAAA,GACA+D,QAAAA,YACA8C,OACAg9C,OACAqC,OACAI,OACAxB,GACAgwE,UAAAA,GACAgB,SA7TF,SAAkBC,EAAQC,SAClBC,EAAOnB,GAAUiB,GACjBG,EAAOpB,GAAUkB,UACVx4H,KAAKuC,IAAIk2H,EAAMC,GAEb,MADF14H,KAAKsC,IAAIm2H,EAAMC,GACG,MAyT/B76G,SAAU+1C,GACVvnD,OAAAA,GACA+Y,UAAAA,GACAC,SAAAA,GACAzH,UAAAA,GACAG,YAAAA,GACAuH,WAAAA,GACAC,UAAAA,GACA5H,WAAAA,GACAG,aAAAA,GACApD,kBAAAA,GACAi+G,YAzeF,SAAqBvgH,UACZ8G,GAAK1hB,KAAKK,KAAMua,EAAO,EAAG,OAyejCwgH,kBAveF,SAA2BxgH,UAClB8G,GAAK1hB,KAAKK,KAAMua,EAAO,EAAG,OAuejCygH,UAreF,SAAmBnhH,UACVwH,GAAK1hB,KAAKK,KAAM,EAAG,EAAI6Z,EAAK,OAqenCohH,gBAneF,SAAyBphH,UAChBwH,GAAK1hB,KAAKK,KAAM,EAAG,EAAI6Z,EAAK,OAmenC5V,QAAAA,EACAI,WAAAA,EACA8Y,KAAAA,GACAY,QAAAA,GACAd,UAAAA,GACAY,aAAAA,GACA5d,KA/WF,kBACSmC,GAAIpC,KAAK+rB,QAAQkJ,SAAU,OAAQl1B,YA+W1CG,KA7WF,kBACSkC,GAAIpC,KAAK+rB,QAAQkJ,SAAU,OAAQl1B,YA6W1CI,MA3WF,kBACSiC,GAAIpC,KAAK+rB,QAAQkJ,SAAU,QAASl1B,YA2W3CsG,OAAAA,GACA60H,QA3YF,SAAkBvnG,SACVhd,EAAQ3W,KAAK+rB,QAAQpV,UACvBtV,GAAQ,KACRsV,EAAO,KAAOgd,GAAM,IAClBA,IAAShd,EAAO,CAClBtV,GAAQ,QAIVsyB,EAAOA,EAAKszC,KAAKtwD,aAEZtV,GAiYP01C,UA5GF,SAAoBx4C,EAAGI,EAAKgY,OACrBpY,EAAG,MAAO,SACRiH,EAAGC,GAAKlH,EACT4sE,GAAM,IAAIrE,IAAS1/D,IAAI5B,EAAE,GAAIA,EAAE,GAAIC,EAAE,GAAIA,EAAE,WAE1C01H,GADOxkH,GAAS3W,KAAK+rB,QAAQkJ,SAASgyD,aAAah9C,KAChCkhC,EAG5B,SAAgBxsE,OACVT,EAAI,QAEJS,EAAK,OACD+uB,EAAQ0tG,EAAQz8H,EAAIsxE,UACpBloD,EAAQqzG,EAAQz8H,EAAI08H,UAE1Bn9H,EAAIa,KAAO2uB,EAAMnwB,QAAUmwB,EAAMgK,MAAK5vB,GAAK/I,EAAEkxE,WAAanoE,QAASigB,EAAMxqB,QAAUwqB,EAAM2P,MAAKl5B,GAAKO,EAAE9B,OAASuB,YAGzGN,EAbwByN,CAAOhN,KAwGtC4F,WAAAA,EACA+2H,cAjQF,SAAuB7lD,SACf3tE,EAAI2tE,EAAM8lD,QACV7rH,EAAK5H,EAAE,GAAG6tE,QAAU7tE,EAAE,GAAG6tE,QACzB/lE,EAAK9H,EAAE,GAAG+tE,QAAU/tE,EAAE,GAAG+tE,eACxB1zE,KAAK6Q,KAAKtD,EAAKA,EAAKE,EAAKA,IA8PhC4rH,WA5PF,SAAoB/lD,SACZ3tE,EAAI2tE,EAAM8lD,eACTp5H,KAAKohC,MAAMz7B,EAAE,GAAG+tE,QAAU/tE,EAAE,GAAG+tE,QAAS/tE,EAAE,GAAG6tE,QAAU7tE,EAAE,GAAG6tE,UA2PnE8lD,OAhIF,iBACQ78G,EAAIq7G,YAEHr7G,EAAIA,EAAE68G,OAAS,IA8HtBC,cAvHF,iBACQl1C,EAAOxmF,KAAK+rB,QAAQkJ,SACpB+/C,EAAKwR,EAAKm1C,WAAan1C,EAAKm1C,mBAC3B3mD,EAAK,CAACA,EAAG4mD,YAAa5mD,EAAG6mD,cAAgB,MAAC10H,OAAWA,IAqH5D20H,WA7HF,iBACQl9G,EAAIq7G,YAEHr7G,EAAI,CAACA,EAAEm9G,WAAYn9G,EAAEo9G,aAAe,MAAC70H,OAAWA,IA2HvD80H,UAzNF,SAAmB7oH,EAAOqhD,EAAcC,UAC/BF,GAAUphD,GAAS,EAAGqhD,GAAgB,EAAGC,GAAgB,IAyNhEwnE,QAtiBF,SAAiBj/H,EAAMy0B,SACfzB,EAAKjwB,KAAK+rB,QAAQkJ,SAElB11B,EADOS,KAAK+rB,QAAQS,KAAKvvB,GACZsC,aACnB0wB,EAAGwB,MAAMlyB,EAAO0wB,EAAGc,YAAYjB,OAAO5wB,GAAQmyB,OAAOK,IAC9C,GAkiBPyqG,UAhKF,SAAmB7+H,OACbY,EAAI,YACD,SAAU6tB,UACRA,EAAUq1C,GAAWr1C,EAAS7tB,EAAIA,GAAKkhE,GAAU9hE,IAASA,IA8JnE8F,UAAAA,EACAC,OAAAA,EACAC,OAAAA,EACAC,UAAAA,EACAM,WAAAA,EACAC,QAAAA,EACAC,QAAAA,EACAC,WAAAA,EACAwtB,OAxiBF,SAAiBmC,EAAM12B,EAAMm/H,MACvBzoG,EAAM,OACF1D,EAAKjwB,KAAK+rB,QAAQkJ,SAClBjU,EAAS2S,EAAKszC,KAAKnmE,OACzBmvB,EAAGwB,MAAMzQ,EAAQiP,EAAGc,YAAYS,OAAOmC,EAAM12B,gBAG7BkK,IAAXi1H,EAAuBA,EAASzoG,GAkiBvCrC,OArUF,SAAiBr0B,EAAMo0B,EAAQvB,EAAQusG,EAAQ/qG,EAAQtd,SAC/Cic,EAAKjwB,KAAK+rB,QAAQkJ,SAClBzI,EAAOxsB,KAAK+rB,QAAQS,KAAKvvB,GACzBsC,EAAQitB,EAAKjtB,MACbgzB,EAAQtC,EAAGsC,YAEb+pG,EACA77H,EAFA61B,EAAU9J,EAAK8J,YAIC,IAAhBrG,EAAGssG,YAAwBh9H,EAAM8B,MAAM9D,QAAU8zB,GAAUgrG,UAEtD,OAGJ/lG,GAAWA,EAAQ/D,MAAQA,KAC9B/F,EAAK8J,QAAUA,EAAUrG,EAAGc,YAC5BuF,EAAQ/D,MAAQA,EAChBtC,EAAGuH,UAAS,KACVhL,EAAKwF,UAAW,EAChB/B,EAAGwB,MAAMlyB,EAAO+2B,GAASvC,SACxB,EAAM,IAGPjE,IACFwsG,GAAuB,IAAXxsG,EAAkB5wB,EAASkB,EAAQ0vB,IAAWQ,GAAQR,GAAUA,EAAS+pG,GAAgB/pG,GACrGwG,EAAQxG,OAAOwsG,IAGbjrG,GACFiF,EAAQjF,OAAOA,GAGbgrG,IACFC,EAAYzC,GAAgBwC,GAExB98H,EAAM8B,MAAMq2B,KAAK4kG,GACnBhmG,EAAQxG,OAAOwsG,GAEfhmG,EAAQjF,OAAOgrG,IAIf/qG,MACG7wB,KAAOuT,EACVsiB,EAAQhF,OAAOA,EAAQ7wB,EAAKuT,EAAOvT,WAIhC,IAuRH+7H,GAAiB,CAAC,OAAQ,OAAQ,QAAS,KAAM,IAAK,KAI5DC,GAAa,QAEbC,GAAc,GAGRC,GAAgB,CACpBxG,UAAW,CAAC,KACZD,QAAS,CAAC,QAAS,QAAS,QAC5BK,SAAU,QACVD,UAAWz3H,GAAO,KAAI2sB,GA1gBH,IA0gB8B3sB,MACjDw3H,UAOF,SAAwBrB,SAChBj4H,EAAKs5H,GAAUrB,GACrBwH,GAAe56H,SAAQ3E,GAAQF,EAAGE,GArBtB,cAqB4CA,QAEnD,MAAMA,KAAQi9H,GACjBn9H,EAAGE,GAAQw/H,GAAax/H,SAG1BmJ,GAAOrJ,EAAI07H,GAAuBzD,EAASkF,GAAiBwC,KACrD3/H,GAfPq5H,UAAWA,GACXuC,SAAU+D,IAGNE,GAAgB5H,GAAQ2H,IAe9B,SAASE,GAAmB5/H,EAAMF,EAAI6O,UACX,IAArB7L,UAAUxC,OACL28H,GAAgBj9H,IAIzBi9H,GAAgBj9H,GAAQF,EAEpB6O,IAAS8wH,GAAYz/H,GAAQ2O,GAG7BgxH,KAAeA,GAAcvG,UAAUp5H,GAAQw/H,GAAax/H,GACzD+C,MAwBT,SAASsL,GAAQ0gC,EAAMyrF,SACfplG,EAAS,OAEXskG,MAIFA,EAAMvrH,GADN4gC,EAAO3iC,GAAS2iC,GAAQA,EAAOxgB,GAAYwgB,GAAQ,IAEnD,MAAO7b,GACPryB,EAAM,2BAA6BkuC,GAIrC2qF,EAAI9gG,OAAM4pD,OACJA,EAAK5wE,OAAS4+G,GAAgB,aAC5BxwH,EAAOwiF,EAAK0uC,OAAOlxH,KACnB44B,EAAQ8mG,GAAchE,SAAS17H,GACjC44B,GAAOA,EAAM54B,EAAMwiF,EAAK1/E,UAAW03H,EAAOplG,YAG1CltB,EAAMy3H,GAAcjG,UAE1BxxH,EAAIsxH,QAAQ70H,SAAQ3E,UACZ6/H,EA1lBW,IA0lBiB7/H,GAE7BwJ,GAAe4rB,EAAQyqG,IAAerF,EAAMsF,UAAU9/H,KACzDo1B,EAAOyqG,GAAcrF,EAAMuF,UAAU//H,OAIlC,CACLggI,MAAO72H,GAAO,CACZ+1F,KAAMh3F,EAAIg3F,MACTs7B,EAAM9sG,QAAQgsG,IAAM,CACrBA,IAAAA,GACE,MACJuG,QAAS/3H,EAAInI,OACbmgI,QAAS9qG,GA1DbwqG,GAAmB,aArRnB,SAAmB5/H,EAAM0Z,SACjBnY,EAAIg6H,GAASv7H,GAAO0Z,GAAS3W,MAAM+rB,gBAClCvtB,GAAKA,EAAE0/B,UAAY1/B,EAAE0/B,YAAc,IAmRDk6F,IAC3CyE,GAAmB,QAlRnB,SAAc5/H,EAAM0Z,SACZnY,EAAIg6H,GAASv7H,GAAO0Z,GAAS3W,MAAM+rB,gBAClCvtB,EAAIA,EAAE6vB,YAASlnB,IAgRSixH,IACjCyE,GAAmB,UA/QnB,SAAgB5/H,EAAM0Z,SACdnY,EAAIg6H,GAASv7H,GAAO0Z,GAAS3W,MAAM+rB,gBAClCvtB,EAAIA,EAAEqE,SAAW,KA6QWu1H,IACrCyE,GAAmB,SAxQnB,SAAe5/H,EAAM0Z,SACbnY,EAAIg6H,GAASv7H,GAAO0Z,GAAS3W,MAAM+rB,gBAClCvtB,GAAKA,EAAEgG,MAAQhG,EAAEgG,QAAU,KAsQD4zH,IACnCyE,GAAmB,UA7QnB,SAAgB5/H,EAAMuH,EAAOmS,SACrBnY,EAAIg6H,GAASv7H,GAAO0Z,GAAS3W,MAAM+rB,gBACjCvtB,EAAgB4B,EAAQoE,IAAUhG,EAAEw3D,aAAex3D,EAAEmzD,QAAQntD,IAAUhG,EAAEmzD,QAAUnzD,EAAE43D,cAAc5xD,QAA/F2C,IA2QuBixH,IACrCyE,GAAmB,SAtQnB,SAAe5/H,EAAMoE,EAAOsV,SACpBnY,EAAIg6H,GAASv7H,GAAO0Z,GAAS3W,MAAM+rB,gBAClCvtB,EAAIA,EAAE6C,QAAS8F,IAoQWixH,IACnCyE,GAAmB,YAlQnB,SAAwBl5H,EAAOqN,EAAID,EAAIqC,EAAOuD,GAC5ChT,EAAQ60H,GAAS70H,GAAQgT,GAAS3W,MAAM+rB,eAClCiyC,EAAWG,GAASntD,EAAID,OAC1BqtD,EAAQz6D,EAAMd,SACd4B,EAAM25D,EAAM,GACZ15D,EAAM7C,EAAKu8D,GACX+vB,EAAWrvF,SAET4F,EAAMD,EAIV0pF,EAAWv2B,GAAcj0D,EAAOc,EAAKC,GAFrCf,GAASA,EAAMu6C,aAAe2Z,GAAQ,aAARA,GAAwB3Z,aAAav6C,EAAMu6C,gBAAkB2Z,GAAQ,SAARA,GAAoB5G,YAAYttD,EAAMstD,eAAezsD,MAAMb,EAAMa,UAAU3B,OAAO,CAAC4B,EAAM,EAAGC,EAAM,IAK3Lf,EAAM0P,QACR+qD,EAAQz6D,EAAM0P,OAAOD,GAAS,IAC1B3O,IAAQ25D,EAAM,IAAIA,EAAMhtD,QAAQ3M,GAChCC,IAAQ7C,EAAKu8D,IAAQA,EAAM3/D,KAAKiG,IAGtC05D,EAAMx8D,SAAQ7C,GAAKi/D,EAAS7qD,KAAKg7E,EAASpvF,GAAI4E,EAAM5E,MAC7Ci/D,IA4OqCo6D,IAC9CyE,GAAmB,UAAW1D,GAASf,IACvCyE,GAAmB,YAAazD,GAAWhB,IAC3CyE,GAAmB,cAAevD,GAAalB,IAC/CyE,GAAmB,YA7OnB,SAAkBn+B,EAAYmM,EAASl0F,SAC/BzY,EAAIs6H,GAAS95B,GAAa/nF,GAAS3W,MAAM+rB,gBACxC,SAAUA,UACR7tB,EAAIA,EAAEZ,KAAKyuB,QAAQA,EAAf7tB,CAAwB2sG,GAAW,MA0OTutB,IACzCyE,GAAmB,UApnBnB,SAAgB5/H,EAAMS,EAAO2D,SACrB6S,EAAQlU,KAAK+rB,QAAQS,KAAKvvB,GAAM,SAAWS,GAC3CuhE,EAAQ/qD,EAAQA,EAAM7S,MAAMzC,IAAIyC,QAAS8F,SACxC83D,EAAQA,EAAM7rD,MAAQ6rD,KAyE/B,SAAuBhiE,EAAMuC,EAAMi4H,EAAOplG,GACpC7yB,EAAK,GAAGqP,OAASw+G,IAASvvH,EAAM,sDAChC0B,EAAK,GAAGqP,OAASw+G,IAASvvH,EAAM,6DAC9B0uB,EAAOhtB,EAAK,GAAG6B,MACf3D,EAAQ8B,EAAK,GAAG6B,MAChBq2H,EAxBY,IAwBch6H,EAE3B+I,GAAeixH,EAAWrlG,KAC7BA,EAAOqlG,GAAaD,EAAMI,QAAQrrG,GAAMsrG,UAAUL,EAAO/5H,OAiiB7Dm/H,GAAmB,OAAQrwG,GAAM2rG,IACjC0E,GAAmB,YA5NnB,SAAkB5/H,EAAM6D,EAAQkgB,SACxB6W,EAAQmiG,GAAU/8H,EAAM+C,MACxBxB,EAAIq5B,EAAM/2B,GACVgH,EAAI+vB,EAAM7W,UACTxiB,GAAKsJ,EAAItJ,EAAElB,KAAKwK,GAAGpG,IAAIytB,SAAShoB,IAwNAgxH,IACzC0E,GAAmB,iBAvNnB,SAAuB5/H,EAAMwiF,SACrBthF,EAAI67H,GAAU/8H,EAAM+C,MAAMy/E,UACzBthF,EAAIA,EAAEw3G,YAAYj0G,IAAIytB,SAAShoB,IAqNWgxH,IAEnD0E,GAAmB,mBDxgBnB,SAAuB5/H,EAAMkyB,EAAOsE,WAO9BwrC,EACAm+D,EACAhqH,EACAsJ,EACAne,EAVAiuB,EAAOxsB,KAAK+rB,QAAQS,KAAKvvB,GACzBovF,EAAU7/D,EAAOA,EAAKxY,OAAO3S,MAAQ,GACrCg8H,EAAU7wG,EAAOA,EAAKwqG,KAAexqG,EAAKwqG,IAAY31H,WAAQ8F,EAC9D4vC,EAAYtjB,IAAOqjG,GACnB34H,EAAIkuF,EAAQ9uF,OACZM,EAAI,EAODA,EAAIM,IAAKN,KACdohE,EAAQotB,EAAQxuF,GAEZw/H,GAAWtmF,EAAW,KAKT,KAFf3jC,GADAgqH,EAAOA,GAAQ,IACF1gH,EAAOuiD,EAAMviD,OAAS,GAEjB,YAClBne,EAAI04H,GAAU9nG,EAAO8vC,GACrBm+D,EAAK1gH,GAAQne,GAAK,IAAM6U,EAGpB7U,GAAsB,IAAjB8+H,EAAQp2H,KAAY,OAAO,MAC/B1I,GAAK6U,IAAUiqH,EAAQz+H,IAAI8d,GAAMtJ,MAAO,OAAO,UAKhD2jC,GAHJx4C,EAAI04H,GAAU9nG,EAAO8vC,IAGF,OAAO1gE,SAOvBJ,GAAK44C,ICieuCygF,IACrDqF,GAAmB,qBD5dnB,SAAyB5/H,EAAMkyB,EAAOsE,SAC9BjH,EAAOxsB,KAAK+rB,QAAQS,KAAKvvB,GACzBovF,EAAU7/D,EAAOA,EAAKxY,OAAO3S,MAAQ,GACrCg8H,EAAU7wG,EAAOA,EAAKwqG,KAAexqG,EAAKwqG,IAAY31H,WAAQ8F,EAC9D4vC,EAAYtjB,IAAOqjG,GACnBz1H,EAAQ81H,GAAYhoG,GACpBjb,EAAQ3B,GAAW85E,EAAShrF,MAC9B6S,IAAUm4E,EAAQ9uF,OAAQ,OAAO,KACjC45H,GAAY9qC,EAAQn4E,MAAY7S,EAAO,OAAO,KAE9Cg8H,GAAWtmF,EAAW,IACH,IAAjBsmF,EAAQp2H,KAAY,OAAO,KAC3BqL,GAAY+5E,EAAShrF,GAAS6S,EAAQmpH,EAAQp2H,KAAM,OAAO,SAG1D,IC6cgDuwH,IACzDqF,GAAmB,sBD/anB,SAA0B5/H,EAAMw2B,EAAI6pG,EAASC,WAMvCt+D,EACAjiE,EACAgX,EACA0I,EACAhf,EACAs8B,EACAwjG,EACA3uH,EACAk4D,EAGA3oE,EACAgW,EAjBAoY,EAAOxsB,KAAK+rB,QAAQS,KAAKvvB,GACzBovF,EAAU7/D,EAAOA,EAAKxY,OAAO3S,MAAQ,GACrCo8H,EAAW,GACXC,EAAW,GACXhwG,EAAQ,GAURvvB,EAAIkuF,EAAQ9uF,OACZM,EAAI,EAIDA,EAAIM,IAAKN,EAAG,KAEjB6e,GADAuiD,EAAQotB,EAAQxuF,IACH6e,KACb1f,EAASiiE,EAAMjiE,OACfgX,EAASirD,EAAMjrD,OAEV5V,EAAI,EAAGgW,EAAIpX,EAAOO,OAAQa,EAAIgW,IAAKhW,EACtCV,EAAQV,EAAOoB,GAEfo/H,GADAxjG,EAAMyjG,EAAS//H,EAAMA,SAAW+/H,EAAS//H,EAAMA,OAAS,KAC1Cgf,KAAUsd,EAAItd,GAAQ,IACpCgR,EAAMhwB,EAAMA,OAASmR,EAAOnR,EAAMmR,KAAKiY,OAAO,GAC9CigD,EAAQnhC,GAAI/2B,EAAO,UACnBmrB,EAAItd,GAAQqqD,EAAMy2D,EAAS17H,EAAMkS,EAAO5V,KAStCk/H,IACFE,EAAUE,EAAShhH,KAAUghH,EAAShhH,GAAQ,KACtCje,KAAKqD,EAAMkS,GAAQpT,QAAO,CAACjD,EAAKiM,EAAMxL,KAAOT,EAAIX,EAAOoB,GAAGV,OAASkM,EAAMjM,IAAM,QAK5F81B,EAAKA,GAAMsjG,GACXx2H,OAAO+E,KAAKm4H,GAAU77H,SAAQlE,IAC5B+/H,EAAS//H,GAAS6C,OAAO+E,KAAKm4H,EAAS//H,IAAQgE,KAAIgb,GAAQ+gH,EAAS//H,GAAOgf,KAAO9b,QAAO,CAAC+8H,EAAK/zH,SAAiBzC,IAARw2H,EAAoB/zH,EAAOg8B,GAAIlY,EAAMhwB,GAAS,IAAM+1B,GAAIkqG,EAAK/zH,QAEvKyiF,EAAU9rF,OAAO+E,KAAKo4H,GAElBJ,GAAWjxC,EAAQ9uF,OAAQ,CAE7BkgI,EADYF,EArNA,UADA,WAuNI9pG,IAAOsjG,GAAQ,IACvB1qC,EAAQzrF,QAAO,CAAC+8H,EAAKp8H,KAAOo8H,EAAIl/H,QAAQi/H,EAASn8H,IAAKo8H,IAAM,KAChE,KACKtxC,EAAQ3qF,KAAIH,QACXm8H,EAASn8H,eAKdk8H,IC8WkDjG,IAC3DqF,GAAmB,qBDpcnB,SAAyB/6H,EAAOwpB,UACvBxpB,EAAMJ,KAAIQ,GAAKkE,GAAO,CAC3B4N,OAAQsX,EAAKtuB,OAAO0E,KAAI2D,IAAMA,EAAEhI,SAAWgI,EAAEhI,OAASK,EAAM2H,EAAE3H,SAASwE,EAAEitB,UACxE7D,QExKL,MAAMsyG,GAAOryH,GAAM,CAAC,SACdsyH,GAAOtyH,GAAM,CAAC,QAAS,QAAS,SAuCtC,SAASuyH,GAAcjvH,UACbA,EAAO,IAAI6I,cASrB,SAASqmH,GAAWnhD,EAAKp9E,EAAM28F,GAEC,MAA1BA,EAAKA,EAAK5+F,OAAS,KACrB4+F,EAAO,UAAYA,EAAO,YAGtBp/F,EAAKkP,YAAYzM,EAAKC,OAAO08F,WAC5Bvf,GAAOA,EAAIy5C,UAAYt5H,EAAGwzC,KAAKqsC,EAAIy5C,WAAat5H,EAWzD,IAAIihI,GAAoB,CAItB/L,SAAU,CAACr1C,EAAK5wC,IAAS+xF,GAAWnhD,EAAK,CAAC,KAAM5wC,EAAKmwD,MAKrD8hC,UAAW,CAACrhD,EAAK5wC,IAAS+xF,GAAWnhD,EAAK,CAAC,QAAS,KAAM5wC,EAAKmwD,MAK/D1mB,MAAO,CAACmH,EAAK5wC,IAAS+xF,GAAWnhD,EAAK,CAAC,SAAU5wC,EAAKmwD,MAKtDp2F,QAAS,CAAC62E,EAAK5wC,IAEN+xF,GAAWnhD,EAAK,CAAC,IAAK,SADf,iDAAgD5wC,EAAKmwD,SAOrE3qE,OAAQ,CAACorD,EAAKprD,WACNy+C,SACJA,EADInmB,SAEJA,GACEt4B,MACA2qE,EAAO,sCAEN,MAAMl/F,KAAQ6sD,EAAU,OACrBtoD,EAAI,KAAOgqB,GAAYvuB,GAAQ,IACrCk/F,GAAS,KAAIryC,EAAS7sD,GAAMk/F,WAAW36F,SAASA,kBAGlD26F,GAzGJ,SAAuB3qE,EAAQy+C,OACzBksB,EAAO,UACPyhC,GAAK3tD,KAELz+C,EAAO2P,KACL3P,EAAOtvB,GACL27H,GAAK5tD,KACPksB,GAAQ,sCAGVA,GAAQ,qBAERA,GAAQ,0BAIR3qE,EAAO8wC,KACT65B,GAAQ,4BAGN3qE,EAAOqjB,KACLrjB,EAAO3e,GACLgrH,GAAK5tD,KACPksB,GAAQ,sCAGVA,GAAQ,sBAERA,GAAQ,2BAIR3qE,EAAO+wC,KACT45B,GAAQ,8BA/BiBA,EAuGjB+hC,CAAcp0E,EAAUmmB,GAChCksB,GAAQ,YACD4hC,GAAWnhD,EAAK,CAAC,OAAQ,KAAMuf,IAMxC64B,QAAS,CACPp2H,IAAItB,SACIy7H,EAAO,IAAGz7H,EAAKoE,IAAI8pB,IAAatf,KAAK,SACrCtN,EAAMqN,SAAS,IAAM,WAAU8sH,aACrCn6H,EAAItB,KAAOy7H,EACJn6H,GAGTwG,WAAWpI,EAAQgI,OACb8C,QAkBE/K,EAAKkP,SAAS,IAAK,IAAK,oBAAsBjP,EAAO0E,KAhB/C,CAAC2D,EAAGxH,WACR2D,EAAIwD,EAAOnH,OACb2H,EAAGC,SAEHJ,EAAE/H,MACJkI,EAAK,IAAGH,EAAE/H,OACVmI,EAAK,IAAGJ,EAAE/H,UAETwK,EAAIA,GAAK,IAAI,IAAMjK,GAAKwH,EACzBG,EAAK,SAAQ3H,OACb4H,EAAK,SAAQ5H,QA3EvB,SAAkB2H,EAAGC,EAAG04H,EAAIC,SAClB,SAAQ54H,aAAaC,mCAAmC04H,8CACxBC,kGACoDD,+BACnEC,OA0EZC,CAAS74H,EAAGC,GAAIjE,EAAGA,MAGwC0K,KAAK,IAAM,aACxEpE,EAAI/K,EAAGwzC,KAAKzoC,GAAK/K,KAoD9B,SAASuhI,GAAe91G,EAAMo0D,EAAKvqD,OAC5B7J,IAASloB,EAASkoB,GAAO,OAAOA,MAEhC,IAA+BtqB,EAA3BL,EAAI,EAAGM,EAAIogI,GAAQhhI,OAAWM,EAAIM,IAAKN,KAC9CK,EAAIqgI,GAAQ1gI,GAER4I,GAAe+hB,EAAMtqB,EAAEuC,YAClBvC,EAAEkN,MAAMod,EAAMo0D,EAAKvqD,UAIvB7J,EAKT,IAAI+1G,GAAU,CAAC,CACb99H,IAAK,OACL2K,MA8BF,SAAqBrM,EAAG69E,UACfA,EAAIh+E,IAAIG,EAAEy/H,OAAS1gI,EAAM,yBAA2BiB,EAAEy/H,QA9B5D,CACD/9H,IAAK,OACL2K,MAiDF,SAAgBrM,EAAG69E,SACXr7E,EAAI,KAAOxC,EAAE0/H,KAAO,MAAQ1/H,EAAE2/H,aAC7B9hD,EAAI7/E,GAAGwE,KAAOq7E,EAAI7/E,GAAGwE,GAAKd,GAAI1B,EAAE0/H,KAAM1/H,EAAE2/H,MAAO9hD,EAAI5wC,KAAKgpF,YAlD9D,CACDv0H,IAAK,QACL2K,MAgCF,SAAuBrM,EAAG69E,EAAKvqD,GACzBtzB,EAAEo+H,SAEJvgD,EAAI+hD,gBAAgB5/H,EAAEo+H,QAAS9qG,SAG3B9wB,EAAI,KAAOxC,EAAEk+H,MAAM9gC,KAAO,IAAMp9F,EAAE6/H,aACjChiD,EAAI7/E,GAAGwE,KAAOq7E,EAAI7/E,GAAGwE,GAAKzE,EAAS8/E,EAAIiiD,oBAAoB9/H,EAAEk+H,OAAQl+H,EAAEm+H,QAASn+H,EAAE6/H,UAtCxF,CACDn+H,IAAK,SACL2K,MAoDF,SAAkBrM,EAAG69E,OACd79E,EAAE+/H,OAAQ,OAAO,WAChBv9H,EAAI,KAAOxC,EAAE+/H,OAAS,IAAM//H,EAAE6/H,aAC7BhiD,EAAI7/E,GAAGwE,KAAOq7E,EAAI7/E,GAAGwE,GAAK7D,EAAMqB,EAAE+/H,OAAQ//H,EAAE6/H,MAAOhiD,EAAI5wC,KAAKgpF,YAtDlE,CACDv0H,IAAK,UACL2K,MAuEF,SAAmBrM,EAAG69E,SACdp0D,EAAOzpB,EAAEggI,QACTvtG,EAAS,OAEV,MAAMv0B,KAAQurB,EAAM,OACjBw2G,EAAMx2G,EAAKvrB,GACjBu0B,EAAOv0B,GAAQH,EAAS8/E,EAAIqiD,iBAAiBD,EAAI/B,OAAQ+B,EAAI9B,SAC7D1rG,EAAOv0B,GAAMmE,OAAS49H,EAAIE,eAGrB1tG,IAhFN,CACD/wB,IAAK,WACL2K,MAwDF,SAAoBrM,EAAG69E,SAGfr7E,EAAI,KAAOxC,EAAEogI,SAAW,IAAMpgI,EAAEqgI,OAChC/gI,EAAIyD,EAAM/C,EAAEogI,UAAUz9H,KAAI3C,GAAKA,GAAKA,EAAEsgI,SAAW9uG,GAAUxxB,WAC1D69E,EAAI7/E,GAAGwE,KAAOq7E,EAAI7/E,GAAGwE,GAAKwD,EAAQ1G,EAAGU,EAAEqgI,OAAQxiD,EAAI5wC,KAAKgpF,YA5D9D,CACDv0H,IAAK,WACL2K,MAkFF,SAAoBrM,EAAG69E,UACdA,IAlFN,CACDn8E,IAAK,WACL2K,MAuFF,SAAoBrM,EAAG69E,SACfp0D,EAAOzpB,EAAEugI,gBACR,SAAUrqG,EAAUx0B,EAAKyH,SACxBq3H,EAAS3iD,EAAI7lD,OAAO3rB,MAAMod,GAC1BiL,EAAK8rG,EAAO3gI,IAAI4pB,EAAKg3G,UAAU,GAAG3gI,IAClCX,EAAIqhI,EAAOx+H,QAAQmH,cACrBhK,GAAGA,EAAEkJ,IAAIc,GAEburB,EAAGoZ,cAAgB,IAAM+vC,EAAIhpD,OAAO2rG,GAE7B9rG,KAhGR,CACDhzB,IAAK,WACL2K,MAsGF,kBACSmlB,MAsET,MAAM6E,GAAO,CACXlC,MAAM,GAyDR,SAASnH,GAASkE,EAAIkL,EAAYk7F,EAAWrqF,UACpC,IAAIyzF,GAAQxvG,EAAIkL,EAAYk7F,EAAWrqF,GAGhD,SAASyzF,GAAQxvG,EAAIkL,EAAYk7F,EAAWrqF,QACrC/W,SAAWhF,OACXkL,WAAaA,OACbw/C,OAAS1qD,EAAG0qD,OAAOpqC,KAAKtgB,QACxB+b,KAAOA,GAAQgyF,GAAmBh+H,KAAKe,QAAU,QACjDm1D,OAAS,QACTr+B,MAAQ,QACRrL,KAAO,QACPzvB,GAAK,GAENs5H,SACGA,UAAY91H,OAAO8H,OAAOguH,QAC1BA,UAAUtqG,QAAU/rB,MAI7B,SAAS0/H,GAAW9iD,QACb3nD,SAAW2nD,EAAI3nD,cACfkG,WAAayhD,EAAIzhD,gBACjBw/C,OAASiC,EAAIjC,YACb3uC,KAAO4wC,EAAI5wC,UACXjrC,QAAUR,OAAO8H,OAAOu0E,EAAI77E,cAC5Bm1D,OAAS31D,OAAO8H,OAAOu0E,EAAI1mB,aAC3Br+B,MAAQt3B,OAAO8H,OAAOu0E,EAAI/kD,YAC1BrL,KAAOjsB,OAAO8H,OAAOu0E,EAAIpwD,WACzBzvB,GAAKwD,OAAO8H,OAAOu0E,EAAI7/E,IAExB6/E,EAAIy5C,iBACDA,UAAY91H,OAAO8H,OAAOu0E,EAAIy5C,gBAC9BA,UAAUtqG,QAAU/rB,MCpgB7B,SAAS2/H,GAAU3qD,EAAIgJ,GACjBhJ,IAAY,MAARgJ,EAAehJ,EAAGgN,gBAAgB,cAAgBhN,EAAGzlB,aAAa,aAAcyuB,IDugB1FyhD,GAAQj5H,UAAYk5H,GAAWl5H,UAAY,CACzCuwB,aACQ6lD,EAAM,IAAI8iD,GAAW1/H,aAC1BA,KAAK4/H,aAAe5/H,KAAK4/H,WAAa,KAAKnhI,KAAKm+E,GAC1CA,GAGThpD,OAAOgpD,QACAgjD,WAAa5/H,KAAK4/H,WAAWj0H,QAAOtN,GAAKA,IAAMu+E,UAG9Ct3E,EAAO/E,OAAO+E,KAAKs3E,EAAI/kD,WAExB,MAAMp3B,KAAO6E,EAAMs3E,EAAI/kD,MAAMp3B,GAAKwyB,SAAW,SAE7C,MAAMxyB,KAAO6E,EAAMs3E,EAAI/kD,MAAMp3B,GAAKmzB,SAEvCgpD,EAAI/kD,MAAQ,MAGdj5B,IAAIC,UACKmB,KAAK63B,MAAMh5B,IAGpBuI,IAAIvI,EAAI4gF,UACCz/E,KAAK63B,MAAMh5B,GAAM4gF,GAG1B99E,IAAI6mB,EAAMiL,SACFmpD,EAAM58E,KACNiwB,EAAK2sD,EAAI3nD,SACTzI,EAAOhE,EAAKnnB,SAClBu7E,EAAIx1E,IAAIohB,EAAK3pB,GAAI40B,GA3erB,SAAmB5kB,SACc,YAAxBivH,GAAcjvH,GA4efgxH,CAAUr3G,EAAK3Z,OAAS2d,IACtBA,EAAKszG,QACP7vG,EAAGwJ,OAAOhG,EAAIjH,EAAKszG,QAAStzG,EAAKuzG,SACxBvzG,EAAKwzG,SACd/vG,EAAGyJ,QAAQjG,EAAIjH,EAAKwzG,SAAUxzG,EAAKuzG,SAEnC9vG,EAAGwB,MAAMgC,EAAIxD,EAAGc,YAAYM,OAAO7E,KAInChE,EAAKyhB,OACP2yC,EAAI3yC,KAAOxW,GAGTjL,EAAKtgB,OAAQ,KACXhK,EAAI0+E,EAAIh+E,IAAI4pB,EAAKtgB,OAAOs2H,MAExBtgI,GACF+xB,EAAGyF,QAAQx3B,EAAG,CAACu1B,IACfA,EAAGT,UAAUrxB,IAAIzD,KAEhB0+E,EAAIqjD,WAAarjD,EAAIqjD,YAAc,IAAIxhI,MAAK,KAC3CP,EAAI0+E,EAAIh+E,IAAI4pB,EAAKtgB,OAAOs2H,MACxBvuG,EAAGyF,QAAQx3B,EAAG,CAACu1B,IACfA,EAAGT,UAAUrxB,IAAIzD,SAKnBsqB,EAAK03G,SACPtjD,EAAI77E,QAAQynB,EAAK03G,QAAUzsG,GAGzBjL,EAAK7kB,QACPi5E,EAAI1mB,OAAO1tC,EAAK7kB,OAAS8vB,GAGvBjL,EAAKgE,SACF,MAAMvvB,KAAQurB,EAAKgE,KAAM,OACtBA,EAAOowD,EAAIpwD,KAAKvvB,KAAU2/E,EAAIpwD,KAAKvvB,GAAQ,IACjDurB,EAAKgE,KAAKvvB,GAAM2E,SAAQ6yE,GAAQjoD,EAAKioD,GAAQhhD,MAKnDqS,iBACG9lC,KAAKigI,YAAc,IAAIr+H,SAAQ7E,GAAMA,aAC/BiD,KAAKigI,WACLjgI,MAGTiyH,SAASzpG,EAAM1e,QACRnI,IAAI6mB,EAAMxoB,KAAKi1B,SAAStzB,IAAI6mB,EAAKnnB,MAAOyI,KAG/CuF,UAAUmZ,EAAM3Z,QACTlN,IAAI6mB,EAAMxoB,KAAKi1B,SAAStzB,IAAI3B,KAAKm7B,WAAW2iG,GAAcjvH,OAGjEylB,OAAO9L,EAAM8L,QACNltB,IAAIohB,EAAK3pB,GAAIy1B,IAGpBxqB,OAAO0e,EAAM8L,EAAQtT,EAAQlX,EAAQuoB,QAC9B4C,SAASqF,GAAGhG,EAAQtT,EAAQlX,EAAQuoB,EAAQ7J,EAAKmC,UAIxDw1G,mBAAmBn0F,UACVhsC,KAAKgsC,KAAKimF,SAASjyH,KAAMgsC,IAGlC6yF,oBAAoB7yF,UACXhsC,KAAKgsC,KAAKiyF,UAAUj+H,KAAMgsC,IAGnCo0F,gBAAgBp0F,UACPhsC,KAAKgsC,KAAKypC,MAAMz1E,KAAMgsC,IAG/Bq0F,kBAAkBr0F,UACThsC,KAAKgsC,KAAKjmC,QAAQ/F,KAAMgsC,IAGjCizF,iBAAiBztG,UACRxxB,KAAKgsC,KAAKxa,OAAOxxB,KAAMwxB,UA7oBlC,SAAgBhJ,SACRo0D,EAAM58E,KACNw/H,EAAYh3G,EAAKg3G,WAAa,UAEhCh3G,EAAK4nD,aACPwM,EAAIxM,WAAa5nD,EAAK4nD,YAIpB5nD,EAAK83G,cACP1jD,EAAI0jD,YAAc93G,EAAK83G,aAIrB93G,EAAKlS,SACPsmE,EAAItmE,OAASkS,EAAKlS,QAIpBkpH,EAAU59H,SAAQq9D,GAAS2d,EAAI2jD,cAActhE,KAE7CugE,EAAU59H,SAAQq9D,GAAS2d,EAAI4jD,wBAAwBvhE,MAEtDz2C,EAAKi9E,SAAW,IAAI7jG,SAAQq9D,GAAS2d,EAAI6jD,YAAYxhE,MAErDz2C,EAAKk4G,SAAW,IAAI9+H,SAAQq9D,GAAS2d,EAAI+jD,YAAY1hE,KAC/C2d,EAAI92C,WAwnBXy6F,cA5dF,SAAuB/3G,SACfo0D,EAAM58E,MA/Gd,SAAoB6O,SACa,aAAxBivH,GAAcjvH,GAgHjB+xH,CAAWp4G,EAAK3Z,OAAU2Z,EAAK3Z,KAGjC+tE,EAAIvtE,UAAUmZ,EAAMA,EAAK3Z,MAFzB+tE,EAAIq1C,SAASzpG,EAAMA,EAAK1e,OAAS8yE,EAAIujD,mBAAmB33G,EAAK1e,QAAU,OAydzE02H,wBAhdF,SAAiCh4G,SACzBo0D,EAAM58E,QAERwoB,EAAK6J,OAAQ,OACToB,EAAKmpD,EAAIh+E,IAAI4pB,EAAK3pB,IACnB40B,GAAI31B,EAAM,wBAA0B0qB,EAAK3pB,IAC9C+9E,EAAI3nD,SAASS,QAAQjC,EAAIA,EAAGb,WAAWgqD,EAAI+hD,gBAAgBn2G,EAAK6J,QAAS7J,EAAK8J,MAAO9J,EAAK2K,6BAQ9F,SAAyB3K,EAAM6J,GAC7BA,EAASA,GAAU,SACbuqD,EAAM58E,SAEP,MAAMS,KAAO+nB,EAAM,OAChBnnB,EAAQmnB,EAAK/nB,GACnB4xB,EAAO5xB,GAAOL,EAAQiB,GAASA,EAAMK,KAAI+D,GAAK64H,GAAe74H,EAAGm3E,EAAKvqD,KAAWisG,GAAej9H,EAAOu7E,EAAKvqD,UAGtGA,eA8JT,SAAsB7J,OAIhBhpB,EAHAo9E,EAAM58E,KACN2L,EAAwB,MAAf6c,EAAK7c,OAAiBixE,EAAIwjD,gBAAgB53G,EAAK7c,aAAUxE,EAClEmtB,EAAwB,MAAf9L,EAAK8L,OAAiBsoD,EAAIh+E,IAAI4pB,EAAK8L,aAAUntB,EAGtDqhB,EAAK1nB,OACPwzB,EAASsoD,EAAIjC,OAAOnyD,EAAK1nB,OAAQ0nB,EAAK3Z,KAAMlD,GACnC6c,EAAKze,QAEduqB,GADA90B,EAAOgpB,EAAKze,MAAMrI,KAAI3C,GAAK69E,EAAIh+E,IAAIG,MACrB,GAAGgL,MAAMlK,MAAML,EAAK,GAAIA,EAAKE,MAAM,KAG/C8oB,EAAK0M,UACP11B,EAAOgpB,EAAK0M,QAAQxzB,KAAI3C,GAAK69E,EAAIh+E,IAAIG,KACrCu1B,EAASA,EAAOY,QAAQ11B,EAAK,GAAIA,EAAK,KAGpCgpB,EAAK7c,SACP2oB,EAASA,EAAO3oB,OAAOA,IAGJ,MAAjB6c,EAAKsM,WACPR,EAASA,EAAOQ,UAAUtM,EAAKsM,WAGZ,MAAjBtM,EAAK3iB,WACPyuB,EAASA,EAAOzuB,UAAU2iB,EAAK3iB,WAGnB,MAAVyuB,GACFx2B,EAAM,8BAAgCkN,KAAKC,UAAUud,IAGnDA,EAAK+L,SAASD,EAAOC,SAAQ,GACjCqoD,EAAItoD,OAAO9L,EAAM8L,gBAOnB,SAAsB9L,OAIhBxH,EAHA47D,EAAM58E,KACN6gI,EAAQvgI,EAASugI,EAAQr4G,EAAK1nB,QAAU+/H,EAAMrC,KAAOqC,EACrD//H,EAAS87E,EAAIh+E,IAAIiiI,GAEjB/2H,EAAS0e,EAAK1e,OACduoB,OAASlrB,EACRrG,GAAQhD,EAAM,uBAAyB0qB,EAAK1nB,QACjDkgB,EAASwH,EAAKxH,QAAUwH,EAAKxH,OAAOi8G,MAAQrgD,EAAIwjD,gBAAgB53G,EAAKxH,OAAOi8G,OAASrgD,EAAIh+E,IAAI4pB,EAAKxH,QAE9FlX,GAAUA,EAAOmzH,QACfnzH,EAAOqzH,UACT9qG,EAASuqD,EAAI+hD,gBAAgB70H,EAAOqzH,UAGtCrzH,EAAS8yE,EAAIyjD,kBAAkBv2H,EAAOmzH,QAGxCrgD,EAAI9yE,OAAO0e,EAAM1nB,EAAQkgB,EAAQlX,EAAQuoB,aAM3C,SAAkB1H,OACZiyD,EAAM58E,KACN+yB,EAAQ,MAERpI,EAAQ5pB,QAAS,KACfA,EAAUgyB,EAAMhyB,QAAU,GAC9BR,OAAO+E,KAAKs3E,EAAI77E,SAASa,SAAQnB,UACzBgzB,EAAKmpD,EAAI77E,QAAQN,GAEnBkqB,EAAQ5pB,QAAQN,EAAKgzB,KACvB1yB,EAAQN,GAAOgzB,EAAGpyB,aAKpBspB,EAAQ6B,KAAM,KACZA,EAAOuG,EAAMvG,KAAO,GACxBjsB,OAAO+E,KAAKs3E,EAAIpwD,MAAM5qB,SAAQnB,UACtBqgI,EAAUlkD,EAAIpwD,KAAK/rB,GAErBkqB,EAAQ6B,KAAK/rB,EAAKqgI,KACpBt0G,EAAK/rB,GAAOqgI,EAAQvhI,MAAM8B,iBAK5Bu7E,EAAIgjD,aAAkC,IAApBj1G,EAAQrpB,UAC5ByxB,EAAM6sG,WAAahjD,EAAIgjD,WAAWl+H,KAAIk7E,GAAOA,EAAImkD,SAASp2G,MAGrDoI,YAET,SAAkBA,OACZ6pD,EAAM58E,KACNiwB,EAAK2sD,EAAI3nD,SACTzI,EAAOuG,EAAMvG,KACbzrB,EAAUgyB,EAAMhyB,QACpBR,OAAO+E,KAAKvE,GAAW,IAAIa,SAAQnB,IACjCwvB,EAAGnmB,OAAO8yE,EAAI77E,QAAQN,GAAMM,EAAQN,GAAM20B,OAE5C70B,OAAO+E,KAAKknB,GAAQ,IAAI5qB,SAAQnB,IAC9BwvB,EAAGwB,MAAMmrD,EAAIpwD,KAAK/rB,GAAKlB,MAAO0wB,EAAGc,YAAYjB,OAAO5wB,GAAQmyB,OAAO7E,EAAK/rB,SAEzEsyB,EAAM6sG,YAAc,IAAIh+H,SAAQ,CAACo/H,EAAUnjI,WACpC0hI,EAAS3iD,EAAIgjD,WAAW/hI,GAC1B0hI,GAAQA,EAAO0B,SAASD,QC1chC,MAAME,GAAU,UAiChB,SAASC,GAAU36C,EAAM46C,SACjBpsD,EAAKwR,EAAK66C,eAAqC,oBAAblnG,UAA4BA,SAAS82F,KAAOzqC,EAAKm1C,eAErF3mD,SACe,MAAVosD,EAAiBpsD,EAAG0H,MAAMkG,eAAe,UAAY5N,EAAG0H,MAAM0kD,OAASA,EAIlF,SAASE,GAAQ96C,EAAMvpF,OACjBuvB,EAAOg6D,EAAK+6C,SAAS/0G,YAEpB/lB,GAAe+lB,EAAMvvB,IACxBa,EAAM,0BAA4Bb,GAG7BuvB,EAAKvvB,GAKd,SAASk1G,GAAOl1G,EAAMq5B,GACfxF,GAAYwF,IACfx4B,EAAM,yDAGFgjI,EAAUQ,GAAQthI,KAAM/C,UAC9B6jI,EAAQ9uG,UAAW,EACZhyB,KAAKyxB,MAAMqvG,EAAQvhI,MAAO+2B,GASnC,SAAS9pB,GAAMg6E,OACTruE,EAAUquE,EAAKruE,iBACZhW,KAAKuC,IAAI,EAAG8hF,EAAKg7C,WAAarpH,EAAQxQ,KAAOwQ,EAAQvQ,OAE9D,SAAS81C,GAAO8oC,OACVruE,EAAUquE,EAAKruE,iBACZhW,KAAKuC,IAAI,EAAG8hF,EAAKi7C,YAActpH,EAAQ29D,IAAM39D,EAAQ0/D,QAE9D,SAASj/D,GAAO4tE,OACVruE,EAAUquE,EAAKruE,UACfy+D,EAAS4P,EAAKzP,cACX,CAAC5+D,EAAQxQ,KAAOivE,EAAO,GAAIz+D,EAAQ29D,IAAMc,EAAO,IAiDzD,SAAS8qD,GAAal7C,EAAM/Q,EAAO9hD,OAG7Bz1B,EAEAyR,EAJA1O,EAAIulF,EAAKm7C,UACT3sD,EAAK/zE,GAAKA,EAAE6pE,gBAKZkK,IACFrlE,EAAYiJ,GAAO4tE,IAEnBtoF,EAAIgS,GADAulE,EAAM2F,eAAiB3F,EAAM2F,eAAe,GAAK3F,EACxCT,IACX,IAAMrlE,EAAU,GAClBzR,EAAE,IAAMyR,EAAU,IAGpB8lE,EAAMxgD,SAAWuxD,EACjB/Q,EAAM9hD,KAAOA,EACb8hD,EAAMmsD,KAIR,SAAmBp7C,EAAM7yD,EAAMzjB,SACvB2xH,EAAYluG,EAA8B,UAAvBA,EAAKszC,KAAKgJ,SAAuBt8C,EAAOA,EAAKszC,KAAKtwD,MAAQ,cAE1EA,EAAM1Z,OAETY,EADAiT,EAAI+wH,KAEJ5kI,EAAM,IAAKY,EAAI81B,EAAM91B,EAAGA,EAAIA,EAAEopE,KAAKtwD,SACjC9Y,EAAEopE,KAAKhqE,OAASA,EAAM,CACxB6T,EAAIjT,eAIDiT,GAAKA,EAAEm2D,MAAQn2D,EAAEm2D,KAAK+I,YAAcl/D,EAAI,YAGxC4vB,EAAG/M,OACLA,EAAM,OAAOzjB,EACd7G,GAASsqB,KAAOA,EAAOhd,EAAMgd,UAC3Bz1B,EAAIgS,EAAMxQ,aAETi0B,GACLz1B,EAAE,IAAMy1B,EAAKzxB,GAAK,EAClBhE,EAAE,IAAMy1B,EAAK9gB,GAAK,EAClB8gB,EAAOA,EAAKszC,MAAQtzC,EAAKszC,KAAKtwD,aAGzBzY,QAGF,CACLsoF,KAAMhjF,EAASgjF,GACf7yD,KAAMnwB,EAASmwB,GAAQ,IACvBhd,MAAOA,EACP+pB,GAAIA,EACJx+B,EAAGyxB,GAAQ+M,EAAG/M,GAAM,GACpB9gB,EAAG8gB,GAAQ+M,EAAG/M,GAAM,IAvCTmuG,CAAUt7C,EAAM7yD,EAAMz1B,GAC5Bu3E,EA0CT,MAAMssD,GAAO,OAGPC,GAAU,CACdC,MAAM,GAuBR,SAASC,GAAmB17C,EAAMptD,EAASvqB,EAAM9I,GAC/CygF,EAAK27C,gBAAgB1jI,KAAK,CACxBoQ,KAAMA,EACNuqB,QAASt3B,EAAMs3B,GACfrzB,QAASA,IAWb,SAASq8H,GAAO57C,EAAM/lF,EAAKoO,SACnB8iE,EAAO6U,EAAK67C,cAAgB77C,EAAK67C,aAAa5hI,YAEvC,IAATkxE,GAAkBrxE,EAASqxE,KAAUA,EAAK9iE,MAC5C23E,EAAKvmF,KAAM,WAAUQ,KAAOoO,sBACrB,GA8DX,SAASyzH,GAAW7sD,UACXA,EAAM9hD,KAGf,SAAS4uG,GAAW9sD,UAEXA,EAAM9hD,KAAKszC,KAAKnmE,OAGzB,SAAS0hI,GAAOvlI,UACP,SAAU8B,EAAG02E,UACXA,EAAMmsD,KAAKp7C,OAAOz1D,YAAYS,OAAOikD,EAAM9hD,KAAM12B,IAmD5D,SAASq5E,GAASjI,EAAKE,EAAM1gE,SACrBmnE,EAAK76C,SAASqjB,cAAc6wB,OAE7B,MAAM5tE,KAAO8tE,EAAMyG,EAAGzlB,aAAa9uD,EAAK8tE,EAAK9tE,WAEtC,MAARoN,IAAcmnE,EAAG0N,YAAc70E,GAC5BmnE,EA6DT,SAASh0D,GAAOuvB,EAAMkvC,EAAMtsC,EAAOqzC,SAC3B33E,EAAOskC,EAAMsiC,OAAS,QAEtB1vE,EAAU,IAAMwqC,EAAKzmC,OAAO21E,EAAKp+E,OAGvCmlF,EAAK05C,OAAO/sF,EAAM+sF,OAAQzgD,EAAKp+E,OAE/Bo+E,EAAKplD,iBAAiBxrB,EAAM9I,GAE5Bm8H,GAAmB17C,EAAM/G,EAAM5wE,EAAM9I,GAErCwqC,EAAKnpC,IAAM/F,IACTo+E,EAAKp+E,MAAQA,EACbo+E,EAAKnI,cAIT,SAAezoE,SACW,oBAAV4zH,MAAwB,IAAIA,MAAM5zH,GAAQ,CACtDA,KAAAA,GANmB4mE,CAAM5mE,KAc7B,SAASs5B,GAASoI,EAAMykC,EAAI7hC,EAAOqzC,SAC3BnlF,EAAQmlF,EAAK05C,OAAO/sF,EAAM+sF,QAC1BpkG,EAAMw6C,GAAQ,MAAO,OAxFX,cA2FVosD,EAA0B,UAAhBvvF,EAAM5zC,MAAoBu8B,EAAMA,EAAIugD,YAAY/F,GAAQ,UACxEosD,EAAQrmD,YAAY/F,GAAQ,OAAQ,OA3FpB,kBA6FbnjC,EAAMl2C,MAAQk2C,EAAM+sF,SACvBlrD,EAAGqH,YAAYvgD,OACXv8B,EAAQojI,UAEJxvF,EAAM5zC,WACP,WACHA,EAAQqjI,aAGL,SACHrjI,EAAQsjI,aAGL,QACHtjI,EAAQujI,aAGL,QACHvjI,EAAQiF,GAIZjF,EAAMgxC,EAAMmyF,EAASvvF,EAAO9xC,GAQ9B,SAASshI,GAAKpyF,EAAMykC,EAAI7hC,EAAO9xC,SACvBo+E,EAAOnJ,GAAQ,aAEhB,MAAM71E,KAAO0yC,EACJ,WAAR1yC,GAA4B,YAARA,GACtBg/E,EAAKlwB,aAAqB,UAAR9uD,EAAkB,OAASA,EAAK0yC,EAAM1yC,IAI5Dg/E,EAAKlwB,aAAa,OAAQpc,EAAM+sF,QAChCzgD,EAAKp+E,MAAQA,EACb2zE,EAAGqH,YAAYoD,GACfA,EAAKplD,iBAAiB,SAAS,IAAMkW,EAAKzmC,OAAO21E,EAAKp+E,SACtDkvC,EAAK29E,SAAW,CAACzuC,GAEjBlvC,EAAKnpC,IAAM/F,GAASo+E,EAAKp+E,MAAQA,EAOnC,SAASuhI,GAASryF,EAAMykC,EAAI7hC,EAAO9xC,SAC3BktE,EAAO,CACX1/D,KAAM,WACN5R,KAAMk2C,EAAM+sF,QAEV7+H,IAAOktE,EAAKw0D,SAAU,SACpBtjD,EAAOnJ,GAAQ,QAAS/H,GAC9ByG,EAAGqH,YAAYoD,GACfA,EAAKplD,iBAAiB,UAAU,IAAMkW,EAAKzmC,OAAO21E,EAAKsjD,WACvDxyF,EAAK29E,SAAW,CAACzuC,GAEjBlvC,EAAKnpC,IAAM/F,GAASo+E,EAAKsjD,UAAY1hI,GAAS,KAOhD,SAASwhI,GAAOtyF,EAAMykC,EAAI7hC,EAAO9xC,SACzBo+E,EAAOnJ,GAAQ,SAAU,CAC7Br5E,KAAMk2C,EAAM+sF,SAER53C,EAASn1C,EAAMm1C,QAAU,GAC/Bn1C,EAAMxoB,QAAQ/oB,SAAQ,CAACohI,EAAQnlI,WACvB0wE,EAAO,CACXltE,MAAO2hI,GAELC,GAAYD,EAAQ3hI,KAAQktE,EAAK20D,UAAW,GAChDzjD,EAAKpD,YAAY/F,GAAQ,SAAU/H,GAAO+Z,EAAOzqF,IAAMmlI,GAAU,QAEnEhuD,EAAGqH,YAAYoD,GACfA,EAAKplD,iBAAiB,UAAU,KAC9BkW,EAAKzmC,OAAOqpC,EAAMxoB,QAAQ80D,EAAK0jD,mBAEjC5yF,EAAK29E,SAAW,CAACzuC,GAEjBlvC,EAAKnpC,IAAM/F,QACJ,IAAIxD,EAAI,EAAGM,EAAIg1C,EAAMxoB,QAAQptB,OAAQM,EAAIM,IAAKN,KAC7ColI,GAAY9vF,EAAMxoB,QAAQ9sB,GAAIwD,eAChCo+E,EAAK0jD,cAAgBtlI,IAW7B,SAASilI,GAAMvyF,EAAMykC,EAAI7hC,EAAO9xC,SACxBsV,EAAQ2/D,GAAQ,OAAQ,OAnMb,oBAsMXgS,EAASn1C,EAAMm1C,QAAU,GAC/BtT,EAAGqH,YAAY1lE,GACf45B,EAAK29E,SAAW/6E,EAAMxoB,QAAQjpB,KAAI,CAACshI,EAAQnlI,WACnC0wE,EAAO,CACX1/D,KAAM,QACN5R,KAAMk2C,EAAM+sF,OACZ7+H,MAAO2hI,GAELC,GAAYD,EAAQ3hI,KAAQktE,EAAKw0D,SAAU,SACzCxjI,EAAQ+2E,GAAQ,QAAS/H,GAC/BhvE,EAAM86B,iBAAiB,UAAU,IAAMkW,EAAKzmC,OAAOk5H,WAC7CnlD,EAAQvH,GAAQ,QAAS,IAAKgS,EAAOzqF,IAAMmlI,GAAU,WAC3DnlD,EAAMulD,QAAQ7jI,GACdoX,EAAM0lE,YAAYwB,GACXt+E,KAGTgxC,EAAKnpC,IAAM/F,UACHw2B,EAAQ0Y,EAAK29E,SACb/vH,EAAI05B,EAAMt6B,WAEX,IAAIM,EAAI,EAAGA,EAAIM,IAAKN,EACnBolI,GAAYprG,EAAMh6B,GAAGwD,MAAOA,KAAQw2B,EAAMh6B,GAAGklI,SAAU,IASjE,SAASv+H,GAAM+rC,EAAMykC,EAAI7hC,EAAO9xC,GAC9BA,OAAkB8F,IAAV9F,EAAsBA,IAAU8xC,EAAMzuC,MAAOyuC,EAAM1uC,KAAO,QAC5DC,EAAmB,MAAbyuC,EAAMzuC,IAAcyuC,EAAMzuC,IAAMvC,KAAKuC,IAAI,KAAMrD,IAAU,IAC/DoD,EAAM0uC,EAAM1uC,KAAOtC,KAAKsC,IAAI,EAAGC,GAAMrD,IAAU,EAC/CiS,EAAO6/B,EAAM7/B,MAAQO,GAASpP,EAAKC,EAAK,KACxC+6E,EAAOnJ,GAAQ,QAAS,CAC5BznE,KAAM,QACN5R,KAAMk2C,EAAM+sF,OACZz7H,IAAKA,EACLC,IAAKA,EACL4O,KAAMA,IAERmsE,EAAKp+E,MAAQA,QACPsD,EAAO2xE,GAAQ,OAAQ,IAAKj1E,GAClC2zE,EAAGqH,YAAYoD,GACfzK,EAAGqH,YAAY13E,SAETmF,EAAS,KACbnF,EAAK+9E,YAAcjD,EAAKp+E,MACxBkvC,EAAKzmC,QAAQ21E,EAAKp+E,QAIpBo+E,EAAKplD,iBAAiB,QAASvwB,GAC/B21E,EAAKplD,iBAAiB,SAAUvwB,GAChCymC,EAAK29E,SAAW,CAACzuC,GAEjBlvC,EAAKnpC,IAAM/F,IACTo+E,EAAKp+E,MAAQA,EACbsD,EAAK+9E,YAAcrhF,GAIvB,SAAS4hI,GAAYxhI,EAAGlD,UACfkD,IAAMlD,GAAKkD,EAAI,IAAOlD,EAAI,GAGnC,SAAS8kI,GAAoB78C,EAAMvlF,EAAG+zE,EAAI3qE,EAAaytE,EAAan5E,UAClEsC,EAAIA,GAAK,IAAIoJ,EAAYm8E,EAAKh3D,WACrB8kD,WAAWU,EAAIxoE,GAAMg6E,GAAO9oC,GAAO8oC,GAAO5tE,GAAO4tE,GAAO1O,EAAan5E,GAAKyxE,WAAWoW,EAAKpW,cAGrG,SAAS6xD,GAAMz7C,EAAMzpF,UACXA,EAAY,eAEhBA,EAAG8C,MAAMG,KAAMD,WACf,MAAOjC,GACP0oF,EAAK1oF,MAAMA,KAJF,KA2Df,SAASugE,GAAOmoB,EAAMxR,EAAI1tE,MACN,iBAAP0tE,EAAiB,IACF,oBAAb76C,gBAQTqsD,EAAK1oF,MAAM,oCACJ,UARPk3E,EAAK76C,SAASmpG,cAActuD,WAG1BwR,EAAK1oF,MAAM,kCAAoCk3E,GACxC,QAQTA,GAAM1tE,MAEN0tE,EAAGuuD,UAAY,GACf,MAAOt9H,GACP+uE,EAAK,KACLwR,EAAK1oF,MAAMmI,UAIR+uE,EAGT,MAAMxiE,GAASzT,IAAMA,GAAK,EAS1B,SAASoZ,GAASpZ,UACTuB,EAASvB,GAAK,CACnB+2E,IAAKtjE,GAAOzT,EAAE+2E,KACd+B,OAAQrlE,GAAOzT,EAAE84E,QACjBlwE,KAAM6K,GAAOzT,EAAE4I,MACfC,MAAO4K,GAAOzT,EAAE6I,QAZE7I,CAAAA,KACpB+2E,IAAK/2E,EACL84E,OAAQ94E,EACR4I,KAAM5I,EACN6I,MAAO7I,IASHykI,CAAchxH,GAAOzT,IAS3ByrB,eAAei5G,GAAgBj9C,EAAM33E,EAAMipE,EAAan5E,SAChD+kI,EAAS9/C,GAAa/0E,GACtBk3B,EAAM29F,GAAUA,EAAOv/C,gBACxBp+C,GAAKjoC,EAAM,+BAAiC+Q,SAC3C23E,EAAKzrD,WACJsoG,GAAmB78C,EAAM,KAAM,KAAMzgD,EAAK+xC,EAAan5E,GAAK65E,YAAYgO,EAAKm9C,YAAY15F,MAiElG,IAAI25F,GAAQ,QACRC,GAAS,SACT/9C,GAAU,UACV83C,GAAO,CACT1qG,MAAM,GAER,SAASi6D,GAAU3G,EAAMh6E,OACnB/K,EAAI+kF,EAAKsG,WACT5uF,EAAIsoF,EAAKruE,iBACN3L,GAAS/K,GAAKA,EAAEgnE,WAAaqd,GAAU5nF,EAAEyJ,KAAOzJ,EAAE0J,MAAQ,GAEnE,SAASwlF,GAAW5G,EAAM9oC,OACpBj8C,EAAI+kF,EAAKsG,WACT5uF,EAAIsoF,EAAKruE,iBACNulC,GAAUj8C,GAAKA,EAAEgnE,WAAaqd,GAAU5nF,EAAE43E,IAAM53E,EAAE25E,OAAS,GA6GpE,SAASisD,GAAS7mI,EAAMuvB,UACfA,EAAKwF,UAAY5xB,EAAQosB,EAAKjtB,MAAM8B,QAAUpE,EAAKkY,QAAQ,YAGpE,SAAS4uH,GAAW9mI,EAAMw2B,WACN,WAATx2B,GAAqBw2B,aAAc0H,GAAW6oG,OAgCzD,SAAS3tD,GAAgBtwE,EAAS0vE,EAAO9hD,EAAMtyB,SACvC2zE,EAAKjvE,EAAQuwE,UACftB,GAAIA,EAAGzlB,aAAa,QAG1B,SAAuBluD,UACL,MAATA,EAAgB,GAAKjB,EAAQiB,GAAS4iI,GAAY5iI,GAASf,EAASe,KAAWyH,GAAOzH,IAGzE1D,EAH+F0D,EAI5Gd,OAAO+E,KAAK3H,GAAK+D,KAAIjB,UACpBgF,EAAI9H,EAAI8C,UACPA,EAAM,MAAQL,EAAQqF,GAAKw+H,GAAYx+H,GAAK2I,GAAY3I,OAC9DyG,KAAK,OAPoH7K,EAAQ,GAGtI,IAAsB1D,EAPaumI,CAAc7iI,IAcjD,SAAS4iI,GAAY5iI,SACZ,IAAMA,EAAMK,IAAI0M,IAAalC,KAAK,MAAQ,IAGnD,SAASkC,GAAY/M,UACZjB,EAAQiB,GAAS,MAAaf,EAASe,KAAWyH,GAAOzH,GAAS,MAAaA,EAcxF,SAAS8iI,GAAK37G,EAAMmC,SACZ67D,EAAOxmF,QACb2qB,EAAUA,GAAW,GACrByN,GAASz4B,KAAK6mF,GACV77D,EAAQ6E,QAAQg3D,EAAKh3D,OAAO7E,EAAQ6E,QACpC7E,EAAQ7qB,QAAQ0mF,EAAK1mF,OAAO6qB,EAAQ7qB,QAChB,MAApB6qB,EAAQ0N,UAAkBmuD,EAAKnuD,SAAS1N,EAAQ0N,UAEhD1N,EAAQrU,QAAUkS,EAAKlS,OAAQ,OAC3BusE,EAAMz8E,GAAO,GAAIoiB,EAAKlS,OAAQqU,EAAQrU,QAC5CkwE,EAAKlwE,OAAOA,GAAOusE,EAAIrwE,OAAQqwE,EAAIxhE,OAGrCmlE,EAAKhQ,IAAM,KACXgQ,EAAK49C,QAAU,KACf59C,EAAK69C,YAAc15G,EAAQ+7C,UAAY8c,GAAWF,OAClDkD,EAAKm9C,YAAc,IAAIpvD,SACjBtqC,EAAOu8C,EAAKm9C,YAAY15F,KAE9Bu8C,EAAKm7C,UAAY,KACjBn7C,EAAKpQ,SAAWzrD,EAAQ8sD,SAAWpB,GAAgBmQ,EAAK5K,SAAU,EAClE4K,EAAK89C,UAAW,IAAI3qD,IAAgBzM,MAAMjjC,GAC1Cu8C,EAAK+9C,eAAgB,EACrB/9C,EAAKg+C,iBAAkB,EACvBh+C,EAAKi+C,QAAU,GACfj+C,EAAK27C,gBAAkB,GACvB37C,EAAKk+C,iBAAmB,GAExBl+C,EAAK67C,aA70BP,SAA+B/2C,SACvB3Q,EAASv0E,GAAO,CACpBu+H,SAAU,IACTr5C,GAEGs5C,EAAS,CAACjnI,EAAK2H,KACnBA,EAAK1D,SAAQL,IACPnB,EAAQzC,EAAI4D,MAAK5D,EAAI4D,GAAKgK,GAAM5N,EAAI4D,gBAI5CqjI,EAAOjqD,EAAOgqD,SAAU,CAAC,UAAW,UACpCC,EAAOjqD,EAAQ,CAAC,OAAQ,SAAU,aAC3BA,EAg0BakqD,CAAsBr8G,EAAK83G,aAC/C95C,EAAK66C,aAAa76C,EAAK67C,aAAahB,oBAE9BzkD,EAhPR,SAAkB4J,EAAMh+D,EAAMwjB,UACrBjgB,GAAQy6D,EAAMrrD,GAAY++F,GAAiBluF,GAAM5gC,MAAMod,GA+OlDs8G,CAAQt+C,EAAMh+D,EAAMmC,EAAQqhB,MACxCw6C,EAAK+6C,SAAW3kD,EAChB4J,EAAKQ,SAAWpK,EAAI77E,QACpBylF,EAAKu+C,OAASv8G,EAAKw8G,UAAY,IAAItjI,KAAI3C,KACrCg0B,MAAO,KACPogB,MAAO/sC,GAAO,GAAIrH,OAGhB69E,EAAI3yC,MAAM2yC,EAAI3yC,KAAK7iC,IAAI6iC,GAC3BA,EAAKnpC,OAAS87E,EAAIpwD,KAAKyd,KAAK1qC,MAC5BinF,EAAK/0D,MAAMmrD,EAAIpwD,KAAKyd,KAAK1qC,MAAOinF,EAAKz1D,YAAYM,OAAO4Y,EAAKm9B,QAE7Dof,EAAKvO,OAASuO,EAAKh6E,QACnBg6E,EAAKtO,QAAUsO,EAAK9oC,SACpB8oC,EAAKg7C,WAAar0C,GAAU3G,EAAMA,EAAKvO,QACvCuO,EAAKi7C,YAAcr0C,GAAW5G,EAAMA,EAAKtO,SACzCsO,EAAKzP,QAAU,CAAC,EAAG,GACnByP,EAAKy+C,QAAU,EACfz+C,EAAK0G,UAAY,EApOnB,SAA0B1G,OACpBhoF,EAAIgoF,EAAKQ,SACTpoE,EAAIpgB,EAAC,MACLm9B,EAAIn9B,EAAC,OACLN,EAAIM,EAAC,iBAEA0mI,IACP1+C,EAAK0G,UAAY1G,EAAKy+C,QAAU,EAIlCz+C,EAAK2+C,aAAe3+C,EAAK7kF,IAAI,MAAM5C,IACjCynF,EAAKvO,OAASl5E,EAAEkI,KAChBu/E,EAAKg7C,WAAar0C,GAAU3G,EAAMznF,EAAEkI,MACpCi+H,MACC,CACDj+H,KAAM2X,IAGR4nE,EAAK4+C,cAAgB5+C,EAAK7kF,IAAI,MAAM5C,IAClCynF,EAAKtO,QAAUn5E,EAAEkI,KACjBu/E,EAAKi7C,YAAcr0C,GAAW5G,EAAMznF,EAAEkI,MACtCi+H,MACC,CACDj+H,KAAM00B,UAGF0pG,EAAgB7+C,EAAK7kF,IAAI,KAAMujI,EAAW,CAC9Cv6H,IAAKzM,IAGPsoF,EAAK2+C,aAAa3yG,KAAO5T,EAAE4T,KAAO,EAClCg0D,EAAK4+C,cAAc5yG,KAAOmJ,EAAEnJ,KAAO,EACnC6yG,EAAc7yG,KAAOt0B,EAAEs0B,KAAO,EAoM9B8yG,CAAiB9+C,GAvjCnB,SAAqBA,GAEnBA,EAAK7kF,IAAI,MAAM5C,IACbynF,EAAK++C,YAAcxmI,EAAEuiF,GACrBkF,EAAKy+C,QAAU,EACRlmI,EAAEuiF,KACR,CACDA,GAAIkF,EAAKQ,SAAS5W,aAkjCpBA,CAAWoW,GA7iCb,SAAiBA,SAET46C,EAAS56C,EAAKQ,SAASo6C,SAAW56C,EAAKQ,SAASo6C,OAAS56C,EAAK7kF,IAAI,CACtE6jI,KAAMtE,GACNvtG,KAAM,QAGR6yD,EAAKlsD,GAAGksD,EAAK7L,OAAO,OAAQ,aAAcymD,GAAQ,CAACriI,EAAG02E,WAC9Cp0E,EAAQ+/H,EAAO//H,MACfmkI,EAAOnkI,EAAQgI,GAAShI,GAASA,EAAQA,EAAMmkI,KAAOtE,GACtDvtG,EAAO8hD,EAAM9hD,MAAQ8hD,EAAM9hD,KAAKytG,QAAU,YACzC//H,GAASmkI,IAASnkI,EAAMmkI,MAAQ7xG,GAAQtyB,EAAMsyB,KAAOtyB,EAAQ,CAClEmkI,KAAMA,EACN7xG,KAAMA,MAIV6yD,EAAK7kF,IAAI,MAAM,SAAU5C,OACnBymI,EAAOzmI,EAAEqiI,OACTztG,EAAO3zB,KAAKqB,aAEXgI,GAASm8H,KACZ7xG,EAAO6xG,EAAK7xG,KACZ6xG,EAAOA,EAAKA,MAGdrE,GAAU36C,EAAMg/C,GAAQA,IAAStE,GAAUsE,EAAO7xG,GAAQ6xG,GACnD7xG,IACN,CACDytG,OAAQA,IAkhCVA,CAAO56C,GAEPA,EAAK7R,YAAYnsD,EAAKmsD,aAElBhqD,EAAQ86G,OAAOj/C,EAAKi/C,QAEpB96G,EAAQgxG,WAAWn1C,EAAKlS,WAAW3pD,EAAQgxG,UAAWhxG,EAAQ4lB,MAGpE,SAASm1F,GAAal/C,EAAMvpF,UACnBwJ,GAAe+/E,EAAKQ,SAAU/pF,GAAQupF,EAAKQ,SAAS/pF,GAAQa,EAAM,6BAA+B0tB,GAAYvuB,IAGtH,SAAS0oI,GAAoBlyG,EAAI1tB,SACzB41B,GAAKlI,EAAGR,UAAY,IAAItnB,QAAO8nB,GAAMA,EAAGd,SAAWc,EAAGd,QAAQ5sB,UAAYA,WACzE41B,EAAEp+B,OAASo+B,EAAE,GAAK,KAG3B,SAASiqG,GAAoBp/C,EAAMvpF,EAAMw2B,EAAI1tB,OACvC41B,EAAIgqG,GAAoBlyG,EAAI1tB,UAE3B41B,IACHA,EAAIsmG,GAAKz7C,GAAM,IAAMzgF,EAAQ9I,EAAMw2B,EAAGpyB,SACtCs6B,EAAE51B,QAAUA,EACZygF,EAAKlsD,GAAG7G,EAAI,KAAMkI,IAGb6qD,EAGT,SAASq/C,GAAuBr/C,EAAM/yD,EAAI1tB,SAClC41B,EAAIgqG,GAAoBlyG,EAAI1tB,UAC9B41B,GAAGlI,EAAGR,SAASnD,OAAO6L,GACnB6qD,EAGTx+E,GAASm8H,GAAM/rG,GAAU,gBAER5G,EAAQ+I,EAAQC,YAEvBpC,GAAS5xB,UAAUqtB,SAASl0B,KAAKK,KAAMwxB,EAAQ+I,GAEjDv6B,KAAK47E,SAAW57E,KAAKilI,YAEjBjlI,KAAK2hI,YACH3hI,KAAKilI,eACFA,QAAU,EA5gC3B,SAAwBz+C,OAClB5P,EAASh+D,GAAO4tE,GAChB5nE,EAAIpS,GAAMg6E,GACV7qD,EAAI+hB,GAAO8oC,GAEfA,EAAKm7C,UAAUvxD,WAAWoW,EAAKpW,cAE/BoW,EAAKm7C,UAAU5pD,OAAOn5D,EAAG+c,EAAGi7C,GAE5B4P,EAAK89C,SAAS1tD,OAAOA,GAErB4P,EAAKk+C,iBAAiB9iI,SAAQmE,QAE1BA,EAAQ6Y,EAAG+c,GACX,MAAO79B,GACP0oF,EAAK1oF,MAAMA,OA8/BLgoI,CAAe9lI,aAGXA,KAAK2hI,UAAUnpD,YAAYx4E,KAAK2jI,YAAY15F,YAG/C2xC,SAAU,EACf,MAAO31E,QACFnI,MAAMmI,UAKXu0B,GAASxK,GAAchwB,KAAMw6B,GAC1Bx6B,MAGTo4E,MAAMzkD,QACCioD,SAAU,OACV+lD,WAAa3hI,KAAK2hI,UAAUvpD,MAAMzkD,IAIzCghD,YAAY9mE,MACN9N,UAAUxC,OAAQ,OACdygF,EAAe,MAARnwE,EAAeA,EAAO,GAAK,YACpCmwE,IAASh+E,KAAK+lI,OAAOpG,GAAU3/H,KAAKw2E,IAAKx2E,KAAK+lI,MAAQ/nD,GACnDh+E,YAGFA,KAAK+lI,OAGdpK,mBACS37H,KAAKw2E,KAGdyQ,oBACSjnF,KAAK2jI,aAGd/sD,gBACS52E,KAAK+2E,QAAQr3E,SAGtBwgI,OAAOjjI,EAAMoE,EAAOspB,SACZ8I,EAAKiyG,GAAa1lI,KAAM/C,UACF,IAArB8C,UAAUxC,OAAek2B,EAAGpyB,MAAQrB,KAAK8J,OAAO2pB,EAAIpyB,EAAOspB,IAGpEne,MAAMzN,UACGgB,UAAUxC,OAASyC,KAAKkgI,OAAO,QAASnhI,GAAKiB,KAAKkgI,OAAO,UAGlExiF,OAAO3+C,UACEgB,UAAUxC,OAASyC,KAAKkgI,OAAO,SAAUnhI,GAAKiB,KAAKkgI,OAAO,WAGnE/nH,QAAQpZ,UACCgB,UAAUxC,OAASyC,KAAKkgI,OAAO,UAAW/nH,GAAQpZ,IAAMoZ,GAAQnY,KAAKkgI,OAAO,aAGrFpzC,SAAS/tF,UACAgB,UAAUxC,OAASyC,KAAKkgI,OAAO,WAAYnhI,GAAKiB,KAAKkgI,OAAO,aAGrE9vD,WAAWrxE,UACFgB,UAAUxC,OAASyC,KAAKkgI,OAAO,aAAcnhI,GAAKiB,KAAKkgI,OAAO,eAGvEx5D,SAAS73D,UACF9O,UAAUxC,QACVqmF,GAAa/0E,IAAO/Q,EAAM,+BAAiC+Q,GAE5DA,IAAS7O,KAAKqkI,mBACXA,YAAcx1H,OAEdm3H,kBAGAhmI,MATuBA,KAAKqkI,aAYrC5sD,QAAQ1xE,UACDhG,UAAUxC,QAEXwI,IAAY/F,KAAKo2E,gBACdA,SAAWrwE,OAEXigI,kBAGAhmI,MARuBA,KAAKo2E,UAWrC5mD,OAAOA,UACAzvB,UAAUxC,QAEXiyB,IAAWxvB,KAAKy4B,UAClBL,GAAS5xB,UAAUgpB,OAAO7vB,KAAKK,KAAMwvB,QAEhCw2G,kBAGAhmI,MARuBA,KAAKy4B,SAWrCs/C,qBAEOmV,UAAY,EAEVltF,KAAKu1B,MAAMmwG,GAAa1lI,KAAM,cAGvCgmI,iBACMhmI,KAAK2hI,iBACFA,UAAY,UACZrtD,WAAWt0E,KAAKw2E,IAAKx2E,KAAKokI,WAKnC/2C,YA/WF,SAAoBF,EAAWC,EAAY5gF,EAAOkxC,EAAQk5B,EAAQkS,QAC3DtxD,UAASgvD,QACRy/C,EAAQ,EAEZz/C,EAAK0G,UAAY,EAEb1G,EAAKh6E,UAAYA,IACnBy5H,EAAQ,EACRz/C,EAAK05C,OAAO0D,GAAOp3H,EAAOoxH,IAE1Bp3C,EAAK2+C,aAAajyG,MAAK,IAKrBszD,EAAK9oC,WAAaA,IACpBuoF,EAAQ,EACRz/C,EAAK05C,OAAO2D,GAAQnmF,EAAQkgF,IAE5Bp3C,EAAK4+C,cAAclyG,MAAK,IAKtBszD,EAAKg7C,aAAer0C,IACtB3G,EAAKy+C,QAAU,EACfz+C,EAAKg7C,WAAar0C,GAIhB3G,EAAKi7C,cAAgBr0C,IACvB5G,EAAKy+C,QAAU,EACfz+C,EAAKi7C,YAAcr0C,GAIjB5G,EAAKzP,QAAQ,KAAOH,EAAO,IAAM4P,EAAKzP,QAAQ,KAAOH,EAAO,KAC9D4P,EAAKy+C,QAAU,EACfz+C,EAAKzP,QAAUH,GAIbqvD,GAAOz/C,EAAKzyD,IAAI,SAChB+0D,GAAMtC,EAAKhvD,UAAS/xB,GAAKA,EAAEsyE,cAC9B,EAAO,IAsUV19C,iBAAiBxrB,EAAM9I,EAAS4kB,OAC1BuF,EAAWnqB,SAET4kB,IAA4B,IAAjBA,EAAQs3G,OAEvB/xG,EAAW+xG,GAAKjiI,KAAM+F,GACtBmqB,EAAS4gE,IAAM/qF,QAGZu+H,SAAShqG,GAAGzrB,EAAMqhB,GAEhBlwB,MAGTq9E,oBAAoBxuE,EAAM9I,WAGpB41B,EACA7zB,EAHAovE,EAAWl3E,KAAKskI,SAASptD,SAASroE,GAClChR,EAAIq5E,EAAS35E,SAKRM,GAAK,MACZiK,EAAIovE,EAASr5E,GAAGgR,KAChB8sB,EAAIu7C,EAASr5E,GAAGkI,QAEZ8I,IAAS/G,IAAM/B,IAAY41B,GAAK51B,IAAY41B,EAAEm1D,KAAM,MACjDwzC,SAASn1D,IAAIrnE,EAAG6zB,gBAMlB37B,MAGTkmI,kBAAkBngI,SACVgC,EAAI/H,KAAK0kI,wBAEX38H,EAAEoN,QAAQpP,GAAW,GAIvBgC,EAAEtJ,KAAKsH,GAGF/F,MAGTmmI,qBAAqBpgI,OACfgC,EAAI/H,KAAK0kI,iBACT7mI,EAAIkK,EAAEoN,QAAQpP,UAEdlI,GAAK,GACPkK,EAAEgoB,OAAOlyB,EAAG,GAGPmC,MAGTomI,kBAAkBnpI,EAAM8I,UACf6/H,GAAoB5lI,KAAM/C,EAAMyoI,GAAa1lI,KAAM/C,GAAO8I,IAGnEsgI,qBAAqBppI,EAAM8I,UAClB8/H,GAAuB7lI,KAAM0lI,GAAa1lI,KAAM/C,GAAO8I,IAGhEugI,gBAAgBrpI,EAAM8I,UACb6/H,GAAoB5lI,KAAM/C,EAAMqkI,GAAQthI,KAAM/C,GAAM+W,OAAQjO,IAGrEwgI,mBAAmBtpI,EAAM8I,UAChB8/H,GAAuB7lI,KAAMshI,GAAQthI,KAAM/C,GAAM+W,OAAQjO,IAGlEs7H,aAAatiI,MACPgB,UAAUxC,OAAQ,IAChByC,KAAKukI,kBAAoBxlI,EAAG,OACxB8K,EAAOs3H,GAAUnhI,KAAM,WAExBukI,gBAAkBxlI,EACnB8K,GAAMs3H,GAAUnhI,KAAM6J,UAGrB7J,YAEAA,KAAKukI,eAIhB3vG,eAAe71B,UACTgB,UAAUxC,aACPinI,gBAAkBzlI,EAChBiB,MAEAA,KAAKwkI,iBAIhBj2B,MAnXF,SAAgBr+E,EAAUpqB,QAQnB2+H,QAAQhmI,KCr/BA,SAASyxB,EAAUpqB,EAAOub,OACnCvZ,EAAI,IAAIsmG,GAAOo4B,EAAQ1gI,SACd,MAATA,GAAsBgC,EAAE0mG,QAAQt+E,EAAUpqB,EAAOub,GAAOvZ,IAC5DA,EAAE2+H,SAAW3+H,EAAE0mG,QACf1mG,EAAE0mG,QAAU,SAASt+E,EAAUpqB,EAAOub,GACpCvb,GAASA,EAAOub,EAAe,MAARA,EAAe2T,MAAS3T,EAC/CvZ,EAAE2+H,UAAS,SAAS/2B,EAAKg3B,GACvBA,GAAWF,EACX1+H,EAAE2+H,SAAS/2B,EAAM82B,GAAS1gI,EAAOub,GACjC6O,EAASw2G,KACR5gI,EAAOub,IAEZvZ,EAAE0mG,QAAQt+E,EAAUpqB,EAAOub,GACpBvZ,GDw+BW6Q,WAPJ+tH,GACZx2G,EAAS,CACPy2G,UAAWxiI,KAAK6wB,MAChB0xG,QAASA,MAIoB5gI,KA4WjC60E,OAtkCF,SAAgB75E,EAAQ+N,EAAMlD,OAYxBytB,EAXAotD,EAAOxmF,KACPxB,EAAI,IAAI01B,GAAYvoB,GACpBuuB,EAAO,SAAUj0B,EAAG0tB,GACtB6yD,EAAKzrD,SAAS,MAAM,KACdj6B,IAAWihI,IA/BrB,SAAiBv7C,EAAM33E,OACjBw8B,EAAMm7C,EAAK67C,aAAasC,SACxBiC,EAAUv7F,EAAIu7F,QACdC,EAAQx7F,EAAIw7F,aACG,IAAZD,IAA+B,IAAVC,KAAqC,IAAZD,IAA8B,IAAVC,IAAyBD,EAAUA,EAAQ/3H,GAAQg4H,GAASA,EAAMh4H,GAAQ23E,EAAK5xD,mBA2B7HgyG,CAAQpgD,EAAM33E,IACnC5I,EAAE2uB,iBAGJp2B,EAAE21B,QAAQutG,GAAYl7C,EAAMvgF,EAAG0tB,WArEvB,UA0ER7yB,EACEshI,GAAO57C,EAAM,QAAS33E,IACxB23E,EAAK+nB,MAAMr0E,EAAMrrB,QAEd,GAAI/N,IAAWihI,GAChBK,GAAO57C,EAAM,OAAQ33E,IAEvB23E,EAAKnsD,iBAAiBxrB,EAAMqrB,EAAM8nG,YAhFzB,WAmFPlhI,EACEshI,GAAO57C,EAAM,SAAU33E,IAA2B,oBAAX2sE,SACzCpiD,EAAU,CAACoiD,SAEgB,oBAAbrhD,UACZioG,GAAO57C,EAAM,WAAY33E,KAC3BuqB,EAAUe,SAASC,iBAAiBt5B,IAInCs4B,EAEE,KACA,IAAIv7B,EAAI,EAAGM,EAAIi7B,EAAQ77B,OAAQM,EAAIM,IAAKN,EAC3Cu7B,EAAQv7B,GAAGw8B,iBAAiBxrB,EAAMqrB,GAGpCgoG,GAAmB17C,EAAMptD,EAASvqB,EAAMqrB,QANxCssD,EAAKvmF,KAAK,iCAAmCa,UAU1CtC,GA0hCPsoI,SAx/BF,eAIM3oI,EACAiW,EACAnO,EALAwxE,EAAUz3E,KAAKo2E,SACf2wD,EAAS/mI,KAAKykI,QACduC,EAAYhnI,KAAKmiI,oBAIrBhkI,EAAI4oI,EAAOxpI,SAEFY,GAAK,GACZ4oI,EAAO5oI,GAAGgV,WAGZhV,EAAI6oI,EAAUzpI,SAELY,GAAK,OAEZiW,GADAnO,EAAI+gI,EAAU7oI,IACRi7B,QAAQ77B,SAEL6W,GAAK,GACZnO,EAAEmzB,QAAQhlB,GAAGipE,oBAAoBp3E,EAAE4I,KAAM5I,EAAEF,gBAI3C0xE,GACFA,EAAQ93E,KAAKK,KAAMA,KAAKskI,SAAU,KAAM,KAAM,MAGzCtkI,MA69BPylI,MAzgCF,SAAgBwB,EAAUC,UAExBA,EAAW,CAACA,GAAY,UADxBD,EAAW,CAACA,GAAY,UACmB,SAEtC3sG,GAAGt6B,KAAK26E,OAAO,OAAQ,YAAa2nD,IAAaC,GAAYC,GAAOyE,SAEpE3sG,GAAGt6B,KAAK26E,OAAO,OAAQ,WAAY2nD,IAAaC,GAAYC,GAAO0E,IACjElnI,MAogCPwsB,KAlxCF,SAAcvvB,EAAM+W,UACXjU,UAAUxC,OAAS,EAAI+jI,GAAQthI,KAAM/C,GAAM+W,OAAO3S,MAAQ8wG,GAAOxyG,KAAKK,KAAM/C,EAAM8zB,KAAYjB,OAAO5wB,GAAQmyB,OAAOrd,KAkxC3Hm+F,OAAAA,GACA9gF,OAxwCF,SAAgBp0B,EAAM8B,UACbozG,GAAOxyG,KAAKK,KAAM/C,EAAM8zB,KAAYM,OAAOtyB,KAwwClD+wB,OAtwCF,SAAgB7yB,EAAM8B,UACbozG,GAAOxyG,KAAKK,KAAM/C,EAAM8zB,KAAYjB,OAAO/wB,WA2uBpD,SAAe9B,OACTi5D,EAASl2D,KAAKuhI,SAASrrE,cAEtBzvD,GAAeyvD,EAAQj5D,IAC1Ba,EAAM,qCAAuCb,GAGxCi5D,EAAOj5D,GAAMoE,OAuhBpBizE,WAlrBF,SAAqBU,EAAImyD,SACjB3gD,EAAOxmF,KACP6O,EAAO23E,EAAK69C,YACZ/4C,EAAS9E,EAAK67C,aAAa9xF,KAC3BmzF,EAAS9/C,GAAa/0E,GAE5BmmE,EAAKwR,EAAKhQ,IAAMxB,EAAK3W,GAAOmoB,EAAMxR,GAAI,GAAQ,KAxrBhD,SAAwBwR,SAChBxR,EAAKwR,EAAKm1C,YAEZ3mD,IACFA,EAAGzlB,aAAa,OAAQ,qBACxBylB,EAAGzlB,aAAa,uBAAwB,iBACxCowE,GAAU3qD,EAAIwR,EAAK7R,gBAorBrByyD,CAAe5gD,GAEVk9C,GAAQl9C,EAAK1oF,MAAM,+BAAiC+Q,SACnDmnE,EAAU0tD,EAAO39H,SAAW4zE,GAC5BpD,EAAWvB,EAAK0uD,EAAOh9D,SAAWg9D,EAAOv/C,gBAE/CqC,EAAKm7C,UAAaprD,EAAkB8sD,GAAmB78C,EAAMA,EAAKm7C,UAAW3sD,EAAIuB,GAApD,KAC7BiQ,EAAK89C,SA5BP,SAA4B99C,EAAM6gD,EAAaryD,EAAI3qE,SAE3CtE,EAAU,IAAIsE,EAAYm8E,EAAKh3D,SAAUyyG,GAAKz7C,EAAMA,EAAK/O,YAAYvK,MAAMsZ,EAAKS,aAAah9C,MAAMqqC,WAAWU,EAAIp8D,GAAO4tE,GAAOA,UAElI6gD,GACFA,EAAYnwD,WAAWt1E,SAAQ+5B,IAC7B51B,EAAQu0B,GAAGqB,EAAE9sB,KAAM8sB,EAAE51B,YAIlBA,EAkBSuhI,CAAkB9gD,EAAMA,EAAK89C,SAAUtvD,EAAIgB,GAC3DwQ,EAAK5K,SAAU,EAEX5G,GAAiB,SAAXsW,IACR67C,EAASA,EAAS3gD,EAAK49C,QAAU/lE,GAAOmoB,EAAM2gD,GAAQ,GAAQnyD,EAAGqH,YAAY/F,GAAQ,OAAQ,OAClF,mBAGXkQ,EAAKu+C,MAAMnjI,SAAQ7C,IACbA,EAAEo0C,MAAMmjC,SAAsB,cAAXgV,IACrBvsF,EAAEu3E,QAAUjY,GAAOmoB,EAAMznF,EAAEo0C,MAAMmjC,UAAWv3E,EAAEo0C,MAAM5zC,WAIxDinF,EAAKu+C,MAAMnjI,SAAQ7C,KApTvB,SAAeynF,EAAMxR,EAAIuyD,OAClBvyD,EAAI,aACH7hC,EAAQo0F,EAAQp0F,UAClB5C,EAAOg3F,EAAQx0G,MAEdwd,IACHA,EAAOg3F,EAAQx0G,MAAQ,CACrBm7F,SAAU,KACV/4F,QAAQ,EACR/tB,IAAK,KACL0C,OAAQzI,IACFA,GAASmlF,EAAK05C,OAAO/sF,EAAM+sF,SAC7B15C,EAAKzrD,SAAS,MAAM,KAClBwV,EAAKzvC,QAAS,EACd0lF,EAAK05C,OAAO/sF,EAAM+sF,OAAQ7+H,QAM9B8xC,EAAMttC,WACR0qC,EAAKzmC,OAASjE,EAASstC,EAAMttC,SAAU0qC,EAAKzmC,WAIlB,MAAfqpC,EAAM5zC,OAAiB4zC,EAAMmjC,QAAUt1D,GAASmnB,IACxDoI,EAAMykC,EAAI7hC,EAAOqzC,GAEnBj2C,EAAKpb,SACRqxD,EAAKlsD,GAAGksD,EAAKQ,SAAS7zC,EAAM+sF,QAAS,MAAM,KACzC3vF,EAAKzvC,OAASyvC,EAAKzvC,QAAS,EAAQyvC,EAAKnpC,IAAIo/E,EAAK05C,OAAO/sF,EAAM+sF,YAEjE3vF,EAAKpb,QAAS,GAqRZob,CAAKi2C,EAAMznF,EAAEu3E,SAAW6wD,EAAQpoI,OAI7BynF,GAkpBPghD,WA1kBFh9G,eAAiC3b,EAAMipE,GACjCjpE,IAAS20E,GAAWF,QAAUz0E,IAAS20E,GAAWE,KAAO70E,IAAS20E,GAAWC,KAC/E3lF,EAAM,4BAA8B+Q,SAGhC5N,QAAUwiI,GAAezjI,KAAM6O,EAAMipE,UACpCjpE,IAAS20E,GAAWE,IAG7B,SAAmBl3D,EAAMi7G,SACjBC,EAAO,IAAIC,KAAK,CAACn7G,GAAO,CAC5B3d,KAAM44H,WAEDjsD,OAAOosD,IAAIC,gBAAgBH,GAPDI,CAAU7mI,EAAEk8E,MAAO,iBAAmBl8E,EAAE6pE,SAAS+F,UAAU,cAqkB5F26B,SArjBFhhF,eAA+BstD,EAAan5E,gBAC1B8kI,GAAezjI,KAAMwjF,GAAWF,OAAQxL,EAAan5E,IAC5DmsE,UAojBTi9D,MA3iBFv9G,eAA4BstD,gBACV2rD,GAAezjI,KAAMwjF,GAAWE,IAAK5L,IAC5CqF,OA2iBT4jD,SAvaF,SAAkBp2G,UACT3qB,KAAKuhI,SAASR,SAASp2G,GAAW,CACvC6B,KAAMs3G,GACN/iI,QAASgjI,GACTziI,SAAS,KAoaX2/H,SAjZF,SAAkBluG,eACXgI,SAAS,MAAMt1B,IAClBA,EAAE82H,UAAW,EAEb92H,EAAE87H,SAASN,SAASluG,MACnBttB,IACDA,EAAE82H,UAAW,KAERv8H,QE5+BT,MACMgoI,GAAS,IACTC,GAAS,IAOTrZ,GAAU,UACVsZ,GAAgB,KACf,EACLp4H,IAAK,EACLupC,KAAM,EACN1iC,MAAO,EACPi1D,MAAO,EACPz7D,KAAM,EACN7S,KAAM,EACN44C,KAAM,EACNy7B,KAAM,EACNvL,MAAO,EACPvwD,OAAQ,EACRhI,KAAM,EACNu2D,MAAO,GAET,IAAI+jE,GAAgBC,GAMpB,SAASC,GAAeC,EAAUxnI,EAAQojF,UACxCikD,GAAiBrnI,GAhCN,OAiCXsnI,GAAQlkD,GAASgkD,GACVK,GAAWD,EAAStyH,QAAQtU,IAAI8mI,IAOzC,SAAS31F,GAAKr0C,EAAGX,EAAG4qI,EAASC,EAAUC,SAC/BxqI,EAAIK,EAAEjB,WAERc,EADA+U,EAAQ,OAGLvV,EAAIM,IAAKN,EAAG,IACjBQ,EAAIG,EAAEX,IACDuV,GAAS/U,IAAMoqI,EAAS,OAAO5qI,EAAW8qI,GAAWA,EAAQxzH,QAAQ9W,IAAM,IAAK+U,EAAes1H,GAAYA,EAASvzH,QAAQ9W,IAAM,KAAK+U,SAGvIvV,EAGT,SAAS0qI,GAAW/pI,SACZ4C,EAAS,GACTjD,EAAIK,EAAEjB,WACRqT,EAAQ,EACR/S,EAAI,OAEDA,EAAIM,GACTN,EAAIg1C,GAAKr0C,EAAGX,EAvDF,IAuDYmqI,KAAiBC,MACvC7mI,EAAO3C,KAAKD,EAAEE,UAAUkS,EAAO/S,GAAGmY,QAClCpF,IAAU/S,KAGU,IAAlBuD,EAAO7D,YACH,yBAA2BiB,SAG5B4C,EAGT,SAASonI,GAAchqI,SACL,MAATA,EAAE,GAGX,SAAsBA,SACdL,EAAIK,EAAEjB,WAERgB,EADAV,EAAI,KAERA,EAAIg1C,GAAKr0C,EAAGX,EAAGoqI,GAAQD,GAAQC,IAE3BpqI,IAAMM,OACF,2BAA6BK,KAGrCD,EAAIgqI,GAAW/pI,EAAEE,UAAU,EAAGb,IAEb,IAAbU,EAAEhB,YACE,4CAA8CiB,KAlF7C,OAqFTA,EAAIA,EAAEkB,MAAM7B,EAAI,GAAGmY,QAEb,QACE,wCAA4CxX,EAGpDD,EAAIA,EAAEmD,IAAI8mI,UACJl0G,EAASk0G,GAAchqI,EAAEkB,MAAM,GAAGsW,WAEpCse,EAAOY,cACF,CACLA,QAAS32B,EACT+1B,OAAQA,GAGVA,EAAOY,QAAU32B,SAGZ+1B,EArCes0G,CAAapqI,GAwCrC,SAAqBA,SACb81B,EAAS,CACbxzB,OAAQqnI,IAEJrnI,EAAS,OAMX1C,EACAuN,EANAmpB,EAAW,CAAC,EAAG,GACfumG,EAAW,EACXzqH,EAAQ,EACRzS,EAAIK,EAAEjB,OACNM,EAAI,KAvHK,MA2HTW,EAAEL,EAAI,GAAe,IACvBN,EAAIW,EAAEuqB,YA7HK,OA+HPlrB,GAAK,GASF,KAAM,0BAA4BW,MAPrCs2B,EA0ER,SAAuBt2B,SACfiD,EAAIjD,EAAE+wB,MAzMA,SA0MP/wB,EAAEjB,QAAUkE,EAAElE,OAAS,EAAG,MAAMiB,SAC9BiD,EAAEC,KAAI3C,UACLmD,GAAKnD,KACPmD,GAAMA,EAAG,MAAM1D,SACZ0D,KAhFQ2mI,CAAcrqI,EAAEE,UAAUb,EAAI,EAAGM,EAAI,IAChD,MAAO8H,QACD,mCAAqCzH,EAI7CL,GADAK,EAAIA,EAAEkB,MAAM,EAAG7B,GAAGmY,QACZzY,OAGRM,EAAI,MAGDM,EAAG,MAAMK,EAzIH,MA2IPA,EAAE,KAAa68H,IAAax9H,GAEhCO,EAAIy0C,GAAKr0C,EAAGX,EA/IA,KAiJRO,EAAID,IACN2C,EAAOrC,KAAKD,EAAEE,UAAUkS,EAAOxS,GAAG4X,QAClCpF,EAAQ/S,IAAMO,MAIhBP,EAAIg1C,GAAKr0C,EAAGX,EAAGmqI,IAEXnqI,IAAMM,EACR2C,EAAOrC,KAAKD,EAAEE,UAAUkS,EAAOzS,GAAG6X,gBAElClV,EAAOrC,KAAKD,EAAEE,UAAUkS,EAAO/S,GAAGmY,QAClCrK,EAAS,GACTiF,IAAU/S,EACN+S,IAAUzS,EAAG,KAAM,2BAA6BK,OAI/CX,EAAIM,GAAG,IACZN,EAAIg1C,GAAKr0C,EAAGX,EAAGoqI,IACXpqI,IAAMM,EAAG,KAAM,2BAA6BK,KAChDmN,EAAOlN,KAAKD,EAAEE,UAAUkS,EAAO/S,GAAGmY,QAC9BnY,EAAIM,EAAI,GAAKK,IAAIX,KAAOmqI,GAAQ,KAAM,0BAA4BxpI,EACtEoS,IAAU/S,OAINM,EAAI2C,EAAOvD,SAAWqxH,GAAQ7nH,KAAKjG,EAAO3C,EAAI,SAC5C,2BAA6BK,EAGjCL,EAAI,GACNm2B,EAAOzlB,KAAO/N,EAAO,GAEjBu6H,EACF/mG,EAAO+mG,SAAWv6H,EAAO,GAAGpB,MAAM,IApJxC,SAAoBmP,UACXu5H,GAAMv5H,GAoJAi6H,CAAWhoI,EAAO,IAG3BwzB,EAAOxzB,OAASA,EAAO,GAFvBwzB,EAAO27C,SAAWnvE,EAAO,IAK3BwzB,EAAOzlB,KAAO/N,EAAO,GAGO,MAA1BwzB,EAAOzlB,KAAKnP,OAAO,KACrB40B,EAAOC,SAAU,EACjBD,EAAOzlB,KAAOylB,EAAOzlB,KAAKnP,MAAM,GAAI,IAGxB,MAAViM,IAAgB2oB,EAAO3oB,OAASA,GAChCmpB,EAAS,KAAIR,EAAOQ,SAAWA,EAAS,IACxCA,EAAS,KAAIR,EAAOzuB,SAAWivB,EAAS,WACrCR,EAjIiCmsG,CAAYjiI,GCpEtD,SAASuqI,GAAevgH,UACfloB,EAASkoB,GAAQA,EAAO,CAC7B3Z,KAAM2Z,GAAQ,OAIlB,MAAMhW,GAASzT,IAAMA,GAAK,EAS1B,SAASiqI,GAAcxgH,UACbloB,EAASkoB,GAAsCA,EAAK03G,OAAS13G,EAAO,CAC1EstD,IAAKtjE,GAAOgW,EAAKstD,KACjB+B,OAAQrlE,GAAOgW,EAAKqvD,QACpBlwE,KAAM6K,GAAOgW,EAAK7gB,MAClBC,MAAO4K,GAAOgW,EAAK5gB,SAXrBkuE,IADoB/2E,EAQmByT,GAAOgW,GAN9CqvD,OAAQ94E,EACR4I,KAAM5I,EACN6I,MAAO7I,GAJaA,IAAAA,EAgBtB,MAAMkqI,GAAUlqI,GAAKuB,EAASvB,KAAOqB,EAAQrB,GAAKqH,GAAO,GAAIrH,GAAK,CAChEsC,MAAOtC,GAET,SAASmqI,GAAUviI,EAAQ1J,EAAMoE,EAAO+F,MACzB,MAAT/F,EAAe,QACCf,EAASe,KAAWjB,EAAQiB,IAAUjB,EAAQiB,IAAUA,EAAM9D,QAAU+C,EAASe,EAAM,IAGvGsF,EAAOmD,OAAO7M,GAAQoE,EAEtBsF,EAAOS,GAAO,SAASnK,GAAQ,CAC7BoE,MAAOA,GAIJ,SAEA,EAGX,SAAS8nI,GAAYxiI,EAAQunF,EAAOpkF,OAC7B,MAAM7M,KAAQixF,EACjBg7C,GAAUviI,EAAQ1J,EAAMixF,EAAMjxF,QAG3B,MAAMA,KAAQ6M,EACjBo/H,GAAUviI,EAAQ1J,EAAM6M,EAAO7M,GAAO,UAG1C,SAASmsI,GAAa53G,EAAQ8wD,EAAOpvD,OAC9B,MAAMj2B,KAAQqlF,EACbpvD,GAAQzsB,GAAeysB,EAAMj2B,KACjCu0B,EAAOv0B,GAAQmJ,GAAOorB,EAAOv0B,IAAS,GAAIqlF,EAAMrlF,YAG3Cu0B,EAET,SAAS9qB,GAAIjG,EAAK+wB,UACTA,IAAWA,EAAO08D,OAAS18D,EAAO08D,MAAMztF,IAAQ+wB,EAAO1nB,QAAU0nB,EAAO1nB,OAAOrJ,IAGxF,MAAM4oI,GAAW,OACXhkD,GAAY,QACZC,GAAY,QAWZgkD,GAAkB,eAIlBC,GAAgB,aAChBC,GAAoB,iBAsD1B,SAASC,GAAa9E,EAAUlkI,EAAKY,GACnCsjI,EAASlkI,GAAOY,GAASA,EAAM6+H,OAAS,CACtCA,OAAQ7+H,EAAM6+H,QACZ,CACF7+H,MAAOA,GAIX,MAAMk3H,GAAW50H,GAAS0F,GAAS1F,GAAS6nB,GAAY7nB,GAASA,EAAMu8H,OAAU,IAAGv8H,EAAMu8H,UAAYxiI,GAAMiG,GAE5G,SAAS+lI,GAAQ1K,MACK,MAAhBA,EAAIhhE,gBAuCV,SAAkBghE,SAEVx/H,EAAO,CAACw/H,EAAIpuH,MAAOouH,EAAI7rH,KAAM6rH,EAAI5rH,OAAO1R,KAAI3C,GAAU,MAALA,EAAY,KAAOysB,GAAYzsB,UAE/ES,EAAKjC,QAAwB,MAAdsE,EAAKrC,IAAeA,EAAKwQ,aAE/CxQ,EAAK4R,QAAQmnH,GAASyG,EAAIhhE,WAClB,YAAWx+D,EAAK0M,KAAK,QA7CpB8xD,CAASghE,OAGd39H,EAAQ29H,EAAIkB,OAAU,IAAGlB,EAAIkB,UAAYlB,EAAIp2E,MA+BnD,SAAeo2E,UACNA,EAAI3gI,EAAIsrI,GAAO,MAAO3K,EAAIrjG,EAAGqjG,EAAI3gI,EAAG2gI,EAAIj3H,GAAKi3H,EAAIrjG,GAAKqjG,EAAIxgI,EAAImrI,GAAO,MAAO3K,EAAIrjG,EAAGqjG,EAAIxgI,EAAGwgI,EAAIj3H,GAAKi3H,EAAIj3H,GAAKi3H,EAAIv9H,EAAIkoI,GAAO,MAAO3K,EAAIj3H,EAAGi3H,EAAIv9H,EAAGu9H,EAAIzgI,GAAKygI,EAAI/9H,GAAK+9H,EAAIluH,GAAKkuH,EAAIzgI,EAAIorI,GAAO,MAAO3K,EAAI/9H,EAAG+9H,EAAIluH,EAAGkuH,EAAIzgI,GAAK,KAhCtKqqD,CAAMo2E,EAAIp2E,OAAsB,MAAbo2E,EAAIthI,MAAgBA,GAAMshI,EAAIthI,YAAuByJ,IAAd63H,EAAI39H,MAAsBmqB,GAAYwzG,EAAI39H,YAAS8F,SAErJ,MAAb63H,EAAIr7H,QACNtC,EAsFJ,SAAe29H,EAAK39H,SACZsC,EAAQ40H,GAASyG,EAAIr7H,OAEV,MAAbq7H,EAAIx6H,MAENnD,EAAS,eAAcsC,QAAYq7H,EAAIx6H,eAGzB2C,IAAV9F,IAAqBA,EAAS,UAASsC,MAAUtC,MAEjD29H,EAAIp1F,OACNvoC,GAASA,EAAQA,EAAQ,IAAM,IAAO,cAAasC,MAA0B,IAAbq7H,EAAIp1F,KAAa,GAAK,IAAMhjC,GAASo4H,EAAIp1F,OAErGo1F,EAAI18C,QAENjhF,EAAS,yBAAwBsC,2BAA+BtC,OAIvD,MAATA,IAAeA,EAAQ,aAGtBA,EA5GGsC,CAAMq7H,EAAK39H,SAGP8F,IAAV9F,IACFA,EAAQ,MAGU,MAAhB29H,EAAIr8H,WACNtB,EAAS,OAAMA,KAASuF,GAASo4H,EAAIr8H,cAGvB,MAAZq8H,EAAIvzC,OACNpqF,GAAU,IAAGuF,GAASo4H,EAAIvzC,SAGV,MAAduzC,EAAIpmH,SACNvX,GAAU,IAAGuF,GAASo4H,EAAIpmH,WAGxBomH,EAAIvrH,QACNpS,EAAS,SAAQA,MAGZA,EAGT,MAAMsoI,GAAS,CAAC96H,EAAM3M,EAAG2Q,EAAGwB,IAAO,IAAGxF,KAAQ,CAAC3M,EAAG2Q,EAAGwB,GAAG3S,IAAIgoI,IAASx9H,KAAK,YAgB1E,SAAStF,GAASA,UACTtG,EAASsG,GAAY,IAAM8iI,GAAQ9iI,GAAY,IAAMA,EAG9D,SAASlJ,GAAMq7H,UACN6Q,GAAatpI,EAASy4H,GAAOA,EAAM,CACxC5pG,MAAO4pG,IAIX,SAAS6Q,GAAa7Q,OAChBpyH,EAAQrH,EAAO5B,KAEfq7H,EAAImH,OACNv5H,EAAS,QACTjJ,EAAQq7H,EAAImH,YACP,GAAInH,EAAIpiH,OAASoiH,EAAI7wH,OAAQ,KAClC5I,EAAQ6C,KAAKuC,IAAI,EAAGq0H,EAAIz5H,OAAS,GACjCqH,EAAS,OAEFrH,KAAU,GACfqH,GAAU,cAGRoyH,EAAI7wH,QACNxK,EAAQq7H,EAAI7wH,OACZvB,GAAU,UAEVjJ,EAAQq7H,EAAIpiH,WAELoiH,EAAI5pG,OACbxoB,EAAS,QACTjJ,EAAQq7H,EAAI5pG,OAEZrxB,EAAM,4BAA8B0tB,GAAYutG,WAG7CA,EAAImH,SACPxiI,EAAQ2L,GAAS3L,GAASO,EAAgBP,GAAOgE,IAAI8pB,IAAatf,KAAK,MAAQ09H,GAAalsI,IAGvFiJ,EAAS,IAAMjJ,EAAQ,IA0ChC,SAASmsI,GAAar4G,EAAQ3iB,EAAM4lE,EAAMiI,EAAO+6C,EAAOplG,SAChD2sG,EAAM,IACZ3sG,EAASA,GAAU,IACZ27D,SAAW,CAChB+wC,QAASC,GAEXxtG,EAzMF,SAAwBA,EAAQ3iB,EAAM4lE,EAAMiI,EAAO4O,SAC3Cq5C,EAAW,GACXz2C,EAAQ,OACVpkF,EAAQrJ,EAAKyyB,EAAMkrD,MAgBlB39E,KAdLA,EAAM,YAEO,SAAToO,GAAkC,MAAfy8E,EAAO7qF,IAAiBiG,GAAIjG,EAAK+wB,IACtDi4G,GAAa9E,EAAUlkI,EAAK6qF,EAAO7qF,KAIzB,UAARg0E,GAAoBt9D,OAAOs9D,GAAM9oD,WAAW,WAC9C8oD,EAAO,MAIT2J,EAAQ3J,IAAS4Q,GAAYiG,EAAO30E,MAAQ89D,IAAS40D,GAAWjjI,GAAO,GAAIklF,EAAOrkB,KAAMqkB,EAAOz8E,IAAS,KAE5FuvE,EAEVlrD,EAAOxsB,GAAIjG,EAAK+wB,KAAoB,SAAR/wB,GAA0B,WAARA,KAAsBiG,GAAI,OAAQ8qB,IAAW9qB,GAAI,SAAU8qB,IACpG0B,GAAMu2G,GAAa9E,EAAUlkI,EAAK29E,EAAM39E,QAe1CA,KAXLqB,EAAM46E,GAAO96E,SAAQ3E,UACbmhF,EAAQkN,EAAO5O,OAAS4O,EAAO5O,MAAMz/E,OAEtC,MAAMwD,KAAO29E,EACX13E,GAAIjG,EAAK+wB,IACZi4G,GAAa9E,EAAUlkI,EAAK29E,EAAM39E,OAIxC+wB,EAASprB,GAAO,GAAIorB,GAERmzG,EACVvmD,EAAQumD,EAASlkI,GAEb29E,EAAM8hD,QACPp2H,EAASA,GAAU,IAAIrJ,GAAO29E,EAE/B8P,EAAMztF,GAAO29E,SAIjB5sD,EAAO08D,MAAQ9nF,GAAO8nF,EAAO18D,EAAO08D,OAChCpkF,IAAQ0nB,EAAO1nB,OAAS1D,GAAO0D,EAAQ0nB,EAAO1nB,SAC3C0nB,EAwJEs4G,CAAct4G,EAAQ3iB,EAAM4lE,EAAMiI,EAAO+6C,EAAMnsC,YAEnD,MAAM7qF,KAAO+wB,EAChBwtG,EAAIv+H,GAAOspI,GAAWv4G,EAAO/wB,GAAMoO,EAAMwjB,EAAQolG,UAG5CplG,EAGT,SAAS03G,GAAWC,EAAO/5D,EAAU59C,EAAQolG,SACrC3tE,EAAW,GACX9sD,EAAS,OAEV,MAAMC,KAAQ+sI,EACE,MAAfA,EAAM/sI,KAER6sD,EAAS7sD,GAAQgtI,IAcTjL,EAdsBgL,EAAM/sI,GAejCmD,EAAQ4+H,GAnDjB,SAAeA,OACT7iC,EAAO,UACX6iC,EAAIp9H,SAAQ+vE,UACJtwE,EAAQqoI,GAAQ/3D,GACtBwqB,GAAQxqB,EAAK5qE,KAAQ,IAAG4qE,EAAK5qE,SAAS1F,KAAWA,KAGhC,MAAfQ,EAAKs6F,KACPA,GAAQ,QAGHA,EAwCexqB,CAAKqtD,GAAO0K,GAAQ1K,IAfMvH,EAAOplG,EAAQr1B,IAcjE,IAAcgiI,QAVL,CACL/B,MAAO,CACLhtD,SAAAA,EACAnmB,SAAAA,GAEFozE,QAAS38H,OAAO+E,KAAKtI,GACrBkiI,QAAS3+H,OAAO+E,KAAK0kI,IAQzB,SAASC,GAAQ9tC,EAAMs7B,EAAOplG,EAAQr1B,SAC9BgvC,EAAO0nF,GAAgBv3B,EAAMs7B,UACnCzrF,EAAKkxF,QAAQt7H,SAAQ3E,GAAQD,EAAOC,GAAQ,IAC5CmJ,GAAOisB,EAAQ2Z,EAAKmxF,SACbnxF,EAAKixF,MAGd,MACMiN,GAAgB,CAAC,QAAS,SAAU,OAAQ,QAAS,QAE3D,SAASC,GAAW1yH,EAAQxa,GAC1Ba,EAAM2Z,EAAS,sBAAwB+T,GAAYvuB,IAGrD,SAASmtI,GAAalK,EAAQzI,SACtBx6H,EAAOijI,EAAOjjI,QARR,UAURijI,EAAOzhI,KAEJg5H,EAAM12H,QAAQ9D,IAAOktI,GAAW,6BAA8BltI,GAEnEitI,GAActoI,SAAQssB,SACC/mB,IAAjB+4H,EAAOhyG,IAAqBi8G,GAAW,oBAAqBj8G,UAE7D,OAECuF,EAAKgkG,EAAM4S,UAAUptI,EAAMijI,EAAO7+H,QACnB,IAAjB6+H,EAAO5tG,QAAiBmB,EAAGnB,OAAQ,GACnC4tG,EAAO3vF,MAAMknF,EAAM6S,WAAWrtI,EAAMijI,EAAO3vF,OAInD,SAASg6F,GAAM17H,EAAMxN,EAAOgxB,EAAQnqB,QAC7BrJ,IAAM,OACNgQ,KAAOA,OACPxN,MAAQA,OACRgxB,OAASA,EACVnqB,IAAQlI,KAAKkI,OAASA,GAE5B,SAAS+2D,GAAMpwD,EAAMxN,EAAOgxB,EAAQnqB,UAC3B,IAAIqiI,GAAM17H,EAAMxN,EAAOgxB,EAAQnqB,GAExC,SAAS+pH,GAAS5wH,EAAOgxB,UAChB4sC,GAAM,WAAY59D,EAAOgxB,GAGlC,SAAS0mG,GAAItlG,SACLslG,EAAM,CACVyF,KAAM/qG,EAAG50B,WAGP40B,EAAG50B,GAAK,IAAI40B,EAAG+2G,KAAO/2G,EAAG+2G,MAAQ,IAAI/rI,KAAKs6H,GACvCA,EAET,SAAS0R,GAAW/sI,EAAOT,UAClBA,EAAO,CACZ6hI,OAAQphI,EACRkhI,MAAO3hI,GACL,CACF6hI,OAAQphI,GAGZ,MAAMgtI,GAAcD,GAAW,OAC/B,SAASE,GAAW3tI,EAAQgI,SACnB,CACLm6H,SAAUniI,EACVoiI,OAAQp6H,GAgBZ,SAAS4lI,GAAUn3G,EAAI/1B,UACb+1B,GAAMA,EAAGysG,OAAS,IAAMzsG,EAAGysG,OAASzsG,GAAM,KAAOA,GAAM/1B,EAAQ,IAAM,KAAOA,GAASA,EAAMwiI,OAAS,IAAMxiI,EAAMwiI,OAASxiI,GAAS,IAG5I,MAAMmtI,GAAU,QACV1G,GAAO,OACb,SAAS2G,GAAS/rI,UACTA,GAAKA,EAAEmhI,OAKhB,SAAS6K,GAAUhsI,MACb+rI,GAAS/rI,GAAI,OAAO,KACpBuB,EAASvB,GAAI,IAAK,MAAM0B,KAAO1B,KAC7BgsI,GAAUhsI,EAAE0B,IAAO,OAAO,SAEzB,EAET,SAASY,GAAM2pI,EAAW96F,UACJ,MAAb86F,EAAoBA,EAAY96F,EAEzC,SAAS+6F,GAAMxlI,UACNA,GAAKA,EAAEy6H,QAAUz6H,EAG1B,MAAM2oG,GAAQ,QACd,SAASqyB,GAAYnsG,EAAQmjG,UACZnjG,EAAOvqB,MAAQmhI,GAAc52G,EAAOA,OAAS62G,GAAe72G,EAAOzlB,KAAOu8H,GAActtI,EAAM,iCAAmC0tB,GAAY8I,KAC9IA,EAAQmjG,GAOxB,SAASyT,GAAY52G,EAAQmjG,SAErBx4D,EAAQosE,GAAiB,CAC7BthI,MAFWuqB,EAAOvqB,MAAMrI,KAAIlD,GAAKiiI,GAAYjiI,EAAGi5H,MAG/CnjG,EAAQmjG,UACJA,EAAM6T,UAAUrsE,GAAOpgE,GAGhC,SAASssI,GAAa72G,EAAQmjG,SAEtBx4D,EAAQosE,GAAiB,CAC7B/2G,OAFSmsG,GAAYnsG,EAAOA,OAAQmjG,IAGnCnjG,EAAQmjG,UACJA,EAAM6T,UAAUrsE,GAAOpgE,GAGhC,SAASusI,GAAY92G,EAAQmjG,OACvB54H,EAEAy1B,EAAOzlB,OAASu/F,IAClBvvG,EAAK44H,EAAMhiD,MAAM24B,GAAO95E,EAAOQ,UAC/BR,EAAS,CACPY,QAASZ,EAAOY,QAChBvpB,OAAQ2oB,EAAO3oB,SAGjB9M,EAAK44H,EAAMhiD,MA9Bf,SAAqB30E,UACZA,IAAW+pI,GAAU1G,GAAOrjI,GAAUqjI,GA6B1BoH,CAAYj3G,EAAOxzB,QAASwzB,EAAOzlB,YAGhDowD,EAAQosE,GAAiB,CAC7B/2G,OAAQz1B,GACPy1B,EAAQmjG,UAC0B,IAA9Bl3H,OAAO+E,KAAK25D,GAAO1hE,OAAesB,EAAK44H,EAAM6T,UAAUrsE,GAAOpgE,GAGvE,SAASwsI,GAAiBpsE,EAAO3qC,EAAQmjG,OACnCtkF,EAAQ7e,EAAOY,eAEfie,IACmB,IAAjBA,EAAM51C,QACRO,EAAM,mDAAqD0tB,GAAY8I,IAGzE2qC,EAAM/pC,QAAU,CAACurG,GAAYttF,EAAM,GAAIskF,GAAQgJ,GAAYttF,EAAM,GAAIskF,KAGvEtkF,EAAQ7e,EAAO3oB,OAAS,GAAGlM,OAAO60B,EAAO3oB,QAAU,IAE/C2oB,EAAO27C,UAAY37C,EAAO+mG,UAAY/mG,EAAOk3G,WAE/Cr4F,EAAM10C,KA2BV,SAAoBoQ,EAAM5R,EAAMw3E,SACxB9gD,EAAO,oBACNA,GAAQ9kB,GAAiB,MAATA,EAAe,KAAO8kB,EAAO,qBAAwB9kB,EAAO,IAAO,KAAO4lE,EAAO,KAAO9gD,EAAO,iBAAoB8gD,EAAO,IAAO,KAAOx3E,EAAO,KAAO02B,EAAO,iBAAoB12B,EAAO,IAAO,IA7BzMwuI,CAAWn3G,EAAO27C,SAAU37C,EAAO+mG,SAAU/mG,EAAOk3G,WAG7Dl3G,EAAOxzB,SAAW+pI,IAEpB13F,EAAM10C,KAAK,uBAGT00C,EAAM51C,SACR0hE,EAAMtzD,OAAS+nH,GAAgB,IAAMvgF,EAAMjnC,KAAK,QAAU,IAAKurH,GAAOwF,OAGvC,OAA5B9pF,EAAQ7e,EAAOQ,YAClBmqC,EAAMnqC,UAAYqe,GAGa,OAA5BA,EAAQ7e,EAAOzuB,YAClBo5D,EAAMp5D,UAAYstC,GAGhB7e,EAAOC,UACT0qC,EAAM1qC,SAAU,GAGX0qC,EAQT,MAAMysE,GAAgB,CACpBvvC,KAAM,WACNw6B,IAAK,CACH9nH,KAAM,aACNxN,MAAO,UAGX,SAASs/H,GAAan4G,EAAMivG,EAAOz2G,SAC3BwQ,EAAShJ,EAAKgJ,OACdytC,EAAQ,CACZj+C,OAAQA,OAEN25D,EAASnyD,EAAKmyD,OACd7wE,EAAS0e,EAAK1e,OACdsvB,EAAU,GAETuhD,GACH78E,EAAM,+CAIJuL,GAASsxE,KACXA,EAAS2tD,GAAS3tD,EAAQ88C,EAAMkU,aAAed,GAAU1G,KAI3DxpD,EAAS74E,EAAM64E,GAAQhvE,QAAOnN,GAAKA,EAAE0hI,QAAU1hI,EAAEmF,OAASy1B,EAAQ36B,KAAKD,GAAI,GAAK,IAE5E46B,EAAQ77B,OAAS,IACnB67B,EAAU,CAACwyG,GAAaxyG,KAItBuhD,EAAOp9E,QACT67B,EAAQ36B,KAAKk8E,EAAOp9E,OAAS,EAAI,CAC/BwM,MAAO4wE,GACLA,EAAO,IAGC,MAAVnpD,IACE1nB,GAAQhM,EAAM,oDAClBgM,EAAS,iBAAmB0hB,GAAYgG,GAAU,KAIpDytC,EAAMn1D,OAAST,GAASS,GAAU4pH,GAAgB5pH,EAAQ2tH,GAAwB,MAAf3tH,EAAOkiC,KAAe0nF,GAAgB5pH,EAAOkiC,KAAMyrF,GAAyB,MAAhB3tH,EAAOzI,MAAgByI,EAAOzI,MAAyB,MAAjByI,EAAOo2H,OAAiB,CAC3LjD,MAAOyO,GACPvO,QAAS,CACP7yB,OAAQmtB,EAAMuF,UAAUlzH,EAAOo2H,UAE/BpiI,EAAM,wCAEN0qB,EAAKuJ,QACPktC,EAAMt0C,QAAU,CACdoH,OAAO,IAIXqH,EAAQx3B,SAAQd,GAAU22H,EAAMoU,UAAUzlI,GAG5C,SAAsBkuB,EAAQmjG,SACrB,CACL32H,OAAQwzB,EAAO4rG,OAASzI,EAAMuF,UAAU1oG,EAAO4rG,QAAU5rG,EAAO3wB,MAAQ8zH,EAAMc,SAASjkG,EAAO3wB,OAAS88H,GAAYnsG,EAAQmjG,IAL5EqU,CAAahrI,EAAQ22H,GAAQx4D,MAShF,SAAS2sE,GAAaxyG,SACb,CACL8mG,OAAQ,IAAM9mG,EAAQ13B,KAAIlD,GAAKA,EAAEmF,MAAQ,UAAYnF,EAAEmF,MAAQ,KAAOnF,EAAE0hI,SAAU,KA4BtF,MAAM7wH,GAAYpS,GAAQ,CAACo1B,EAAQhxB,EAAO6G,IAAW+2D,GAAMhiE,EAAMoE,EAAOgxB,QAAUlrB,EAAWe,GAEvFm+B,GAAYh3B,GAAU,aACtBo+E,GAAYp+E,GAAU,aACtBk3E,GAAQl3E,GAAU,SAClBk6B,GAAUl6B,GAAU,WACpBm6B,GAAUn6B,GAAU,WACpBq+E,GAAWr+E,GAAU,YACrBu+E,GAASv+E,GAAU,UACnBy8B,GAAaz8B,GAAU,cACvB88B,GAAQ98B,GAAU,SAClBg9B,GAAQh9B,GAAU,SAClB++B,GAAM/+B,GAAU,OAChBw+E,GAAgBx+E,GAAU,iBAC1Bi/B,GAAOj/B,GAAU,QACjBw3E,GAAOx3E,GAAU,QACjBm/B,GAAcn/B,GAAU,eACxBs/B,GAAct/B,GAAU,eACxBy3E,GAAUz3E,GAAU,WACpBu/B,GAASv/B,GAAU,UACnBy/B,GAAWz/B,GAAU,YACrBm7F,GAAan7F,GAAU,cACvB2/B,GAAQ3/B,GAAU,SAClBuhC,GAAQvhC,GAAU,SAClBq4E,GAASr4E,GAAU,UACnBogF,GAAQpgF,GAAU,SAClB0hC,GAAQ1hC,GAAU,SAClBwgF,GAAYxgF,GAAU,aACtBs9E,GAAat9E,GAAU,cACvBgiC,GAAShiC,GAAU,UAEzB,IAAI08H,GAAe,EACnB,MAAMC,GAAuB,CAC3BvnI,IAAK,MACLC,IAAK,MACL0O,MAAO,OAcT,SAAS64H,GAAWzjH,EAAMivG,SAClBplG,EAASolG,EAAMe,SAAShwG,EAAKvrB,MAAMo1B,WACrC5xB,MAmBCA,KAlBL4xB,EAAOxvB,OAASqpI,GAAiB1jH,EAAK3lB,OAAQ2lB,EAAMivG,GAElC,MAAdjvG,EAAKhkB,QACP6tB,EAAO7tB,MAAQ2nI,GAAgB3jH,EAAMivG,EAAOplG,IAGtB,MAApB7J,EAAKyoC,aAqLX,SAA+BA,EAAa5+B,GAC1CA,EAAO4+B,YAAcm7E,GAAan7E,EAAYpiD,MAAQoiD,GAE7B,MAArBA,EAAY3E,QACdj6B,EAAOk+D,iBAAmB67C,GAAan7E,EAAY3E,QAxLnD+/E,CAAsB7jH,EAAKyoC,YAAa5+B,GAGzB,MAAb7J,EAAK2T,OACP9J,EAAO8J,KAwKX,SAAwBA,UACf77B,EAAS67B,GAAQ,CACtBxjB,SAAUyzH,GAAajwG,EAAKxjB,UAC5BrF,KAAM84H,GAAajwG,EAAK7oB,OACtB84H,GAAajwG,GA5KDmwG,CAAe9jH,EAAK2T,OAGnB,MAAb3T,EAAKqhB,OACPxX,EAAOwX,KA+JX,SAAwBpkC,EAAGgyH,UAClBhyH,EAAEy6H,QAAU9/H,EAAQqF,GAAK8mI,GAAW9mI,EAAGgyH,GAASA,EAAM+U,eAAe/mI,GAhK5DgnI,CAAejkH,EAAKqhB,KAAM4tF,IAG9BjvG,EACN/hB,GAAe4rB,EAAQ5xB,IAAgB,SAARA,IACnC4xB,EAAO5xB,GAAO2rI,GAAa5jH,EAAK/nB,GAAMg3H,IAI1C,SAAS2U,GAAa3mI,EAAGgyH,UACfn3H,EAASmF,GAASA,EAAEy6H,OAASzI,EAAMuF,UAAUv3H,EAAEy6H,QAAUpiI,EAAM,uBAAyB0tB,GAAY/lB,IAAtFA,EAGxB,SAAS8mI,GAAW9mI,EAAGgyH,UACdhyH,EAAEy6H,OAASzI,EAAMuF,UAAUv3H,EAAEy6H,QAAUz6H,EAAE/D,KAAI+D,GAAK2mI,GAAa3mI,EAAGgyH,KAG3E,SAASiV,GAAgBzvI,GACvBa,EAAM,0BAA4B0tB,GAAYvuB,IAIhD,SAASivI,GAAiBrpI,EAAQ2lB,EAAMivG,MACjC50H,SAQEA,EAAOq9H,OAASzI,EAAMuF,UAAUn6H,EAAOq9H,SAAW9/H,EAAQyC,GAAU8pI,GAAiB9pI,EAAO7F,OAAS4vI,GAAiBC,IAAgBhqI,EAAQ2lB,EAAMivG,GAPnI,MAAlBjvG,EAAKyoE,WAAuC,MAAlBzoE,EAAK0oE,WACjCpzF,EAAM,gEASZ,SAAS6uI,GAAe9pI,EAAQ2lB,EAAMivG,UAC7B50H,EAAOnB,KAAI+D,GAAK2mI,GAAa3mI,EAAGgyH,KAGzC,SAASoV,GAAehqI,EAAQ2lB,EAAMivG,SAC9BjrG,EAAOirG,EAAMI,QAAQh1H,EAAO2pB,aAC7BA,GAAMkgH,GAAgB7pI,EAAO2pB,MAC3BiqC,GAAWjuC,EAAK3Z,MAAQ2d,EAAKsgH,UAAUrV,EAAO50H,EAAOnF,MAAOqvI,GAAUlqI,EAAO8Z,MAAM,IAAUk6C,GAAWruC,EAAK3Z,MAAQ2d,EAAKwgH,UAAUvV,EAAO50H,EAAOnF,OAAS8uB,EAAKygH,UAAUxV,EAAO50H,EAAOnF,OAGjM,SAASkvI,GAAe/pI,EAAQ2lB,EAAMivG,SAC9BjrG,EAAO3pB,EAAO2pB,KACdxvB,EAAS6F,EAAO7F,OAAO4D,QAAO,CAAC8/G,EAAKxuG,KACxCA,EAAI7I,GAAS6I,GAAK,CAChBsa,KAAMA,EACN9uB,MAAOwU,GACL9R,EAAQ8R,IAAMA,EAAEguH,OAOxB,SAAkB1zG,EAAMirG,SAChBx6H,EAAO,WAAa8uI,KACpBmB,EAAO3jG,GAAQ,OAEjBnpC,EAAQosB,GACV0gH,EAAK7rI,MAAQ,CACXy+H,QAAStzG,QAEN,GAAIA,EAAK0zG,OAAQ,OAChB/jC,EAAO,WAAa3wE,GAAYvuB,GAAQ,IAAMuvB,EAAK0zG,OAAS,IAClEgN,EAAK76G,OAAO9yB,MAAQk4H,EAAMuF,UAAU7gC,UAGtCs7B,EAAM0V,gBAAgBlwI,EAAM,CAACiwI,EAAMn8F,GAAM,MAClC,CACLvkB,KAAMvvB,EACNS,MAAO,QAvBsB0vI,CAASl7H,EAAGulH,GAASvlH,EAClDwuG,EAAIjiH,KAAKyT,GACFwuG,IACN,WACKjqD,GAAWjuC,EAAK3Z,MAAQw+H,GAAwBx2E,GAAWruC,EAAK3Z,MAAQy+H,GAAyBC,IAAuB1qI,EAAQ40H,EAAOz6H,GAuBjJ,SAASqwI,GAAsBxqI,EAAQ40H,EAAOz6H,SACtC2f,EAAOowH,GAAUlqI,EAAO8Z,MAAM,OAChClb,EAAGgE,QAEDwjC,EAASjsC,EAAO0E,KAAI2D,UAClBmnB,EAAOirG,EAAMI,QAAQxyH,EAAEmnB,aACxBA,GAAMkgH,GAAgBrnI,EAAEmnB,MACtBA,EAAKghH,UAAU/V,EAAOpyH,EAAE3H,MAAOif,MAGlCze,EAAI,CACRsqC,QAASkiG,GACTj5G,MAAOwX,GAGLtsB,IACFlb,EAAIkb,EAAK8W,IAAM,QACfhuB,EAAIkX,EAAKjf,MAAQktI,GAAUnpI,EAAGkb,EAAKjf,OAAS,QAC5CQ,EAAE0nC,IAAM,CAAComG,GAAqBvqI,IAC9BvD,EAAElB,OAAS,CAACy6H,EAAM2V,SAAS3nI,IAC3BvH,EAAEylC,GAAK,CAACl+B,IAGVhE,EAAIg2H,EAAM91H,IAAI0kC,GAAUnoC,UAElBG,EAAIo5H,EAAM91H,IAAI4nC,GAAQ,CAC1B9X,MAAOsnG,GAAIt3H,aAGbgE,EAAIgyH,EAAM91H,IAAI0vC,GAAO,CACnB3zC,MAAOgtI,GACP/tH,KAAM86G,EAAMgW,QAAQ9wH,GACpB8U,MAAOsnG,GAAI16H,MAEN06H,GAAItzH,GAGb,SAASsnI,GAAUpwH,EAAM+wH,UACnB/wH,IACGA,EAAKjf,OAAUif,EAAK8W,GAIb9W,EAAKjf,OAAqB,UAAZif,EAAK8W,GAEpBi6G,GAAe/wH,EAAKjf,OACzBif,EAAK8W,KAAOu4G,GAAqBrvH,EAAK8W,KACxC31B,EAAM,kDAAoD6e,EAAK8W,IAHjE31B,EAAM,4CAA8C6e,EAAK8W,IAJrDnzB,EAASqc,GAAOA,EAAKjf,MAAQ,MAAWif,EAAO,CACjDjf,MAAO,QAWNif,EAGT,SAAS2wH,GAAuBzqI,EAAQ40H,EAAOz6H,SAEvCgX,EAAShX,EAAO0E,KAAI2D,UAClBmnB,EAAOirG,EAAMI,QAAQxyH,EAAEmnB,aACxBA,GAAMkgH,GAAgBrnI,EAAEmnB,MACtBA,EAAKwgH,UAAUvV,EAAOpyH,EAAE3H,iBAG1Bq7H,GAAItB,EAAM91H,IAAIgtC,GAAY,CAC/B36B,OAAQA,MAIZ,SAASu5H,GAAsB1qI,EAAQ40H,EAAOz6H,SAEtC0xC,EAAU1xC,EAAO0E,KAAI2D,UACnBmnB,EAAOirG,EAAMI,QAAQxyH,EAAEmnB,aACxBA,GAAMkgH,GAAgBrnI,EAAEmnB,MACtBA,EAAKygH,UAAUxV,EAAOpyH,EAAE3H,iBAG1Bq7H,GAAItB,EAAM91H,IAAI6sC,GAAY,CAC/BE,QAASA,MA2Bb,SAASy9F,GAAgB3jH,EAAMivG,EAAOplG,SAC9Bi5D,EAASmsC,EAAMnsC,OAAO9mF,UACxBA,EAAQgkB,EAAKhkB,SAEbA,EAAM07H,cACDzI,EAAMuF,UAAUx4H,EAAM07H,QACxB,GAAI72H,GAAS7E,GAAQ,IACtB8mF,GAAU7kF,GAAe6kF,EAAQ9mF,UAI5B2nI,GAHP3jH,EAAOpiB,GAAO,GAAIoiB,EAAM,CACtBhkB,MAAO8mF,EAAO9mF,KAEaizH,EAAOplG,GACjB,UAAV7tB,EACTA,EAAQ,CAAC,EAAG,CACV07H,OAAQ,UAES,WAAV17H,EACTA,EAAQiyD,GAAWjuC,EAAK3Z,MAAQ,CAAC,EAAG,CAClCqxH,OAAQ,WACL,CAAC,CACJA,OAAQ,UACP,GAEHpiI,EAAM,mCAAqC0tB,GAAYhnB,QAEpD,CAAA,GAAIA,EAAMwzD,cACf3lC,EAAO2lC,OAAS53D,EAAQoE,EAAMwzD,QAAUu0E,GAAW/nI,EAAMwzD,OAAQy/D,GAAS2U,GAAa5nI,EAAMwzD,OAAQy/D,GACjGjzH,EAAM6B,SAAQgsB,EAAOi+D,aAAei8C,GAAW/nI,EAAM6B,OAAQoxH,SAC7DjzH,EAAM4O,QAAOif,EAAOm+D,YAAc47C,GAAa5nI,EAAM4O,MAAOqkH,KAE3D,GAAIjzH,EAAM8O,iBACf+e,EAAO89D,UAAYi8C,GAAa5nI,EAAM8O,KAAMmkH,IAEvC,GAAIhhE,GAAWjuC,EAAK3Z,QAAUzO,EAAQoE,UACpC0nI,GAAiB1nI,EAAOgkB,EAAMivG,GAC3Br3H,EAAQoE,IAClB1G,EAAM,2BAA6B0tB,GAAYhnB,WAG1CA,EAAM9C,KAAI+D,IAAMrF,EAAQqF,GAAK8mI,GAAaH,IAAc3mI,EAAGgyH,KAsBpE,SAASkW,GAAiB5uI,EAAG9B,EAAMw6H,UAC1Br3H,EAAQrB,GAAKA,EAAE2C,KAAI3C,GAAK4uI,GAAiB5uI,EAAG9B,EAAMw6H,KAAWn3H,EAASvB,GAASA,EAAEmhI,OAASzI,EAAMuF,UAAUj+H,EAAEmhI,QAAmB,QAATjjI,EAAiB8B,EAAIjB,EAAM,iCAAmC0tB,GAAYzsB,IAArHA,EAGpF,MAAM4lF,GAAM,MACNC,GAAO,OACPC,GAAQ,QACRC,GAAS,SACTyM,GAAS,SAKTq8C,GAAQ,QACR/tB,GAAQ,QAERguB,GAAO,OAEPC,GAAQ,QACRC,GAAkB,cAClBC,GAAkB,cAClBC,GAAkB,cAClBC,GAAqB,iBACrBC,GAAU,SACVhwE,GAAW,WACX1I,GAAW,WACX24E,GAAO,OASPC,GAAe,CAACD,GARR,QACD,OACE,SACK,cACD,aACH,WAIVxQ,GAAO,CACX3gI,KAAM,EACNy/E,MAAO,EACP1M,YAAa,GAEThxE,GAAO,CACXqC,MAAO,GAEHpC,GAAM,CACVoC,MAAO,GAGHitI,GAAY,QACZC,GAAW,OACXC,GAAW,OAEXC,GAAW,OAEjB,SAASC,GAAYznE,UACnBA,EAAKp4D,KAAOy/H,GACZrnE,EAAK+I,YAAc/I,EAAK+I,cAAe,EAChC/I,EAGT,SAAS5I,GAAO71C,EAAM8iE,SACdvsF,EAAI,CAAC9B,EAAMygE,IAASr8D,GAAMmnB,EAAKvrB,GAAOoE,GAAMiqF,EAAOruF,GAAOygE,WAEhE3+D,EAAE4vI,WAAanwI,GAtDA,aAsDkB6C,GAAMmnB,EAAK6yE,UAAW/P,EAAO+P,YAAc78F,EAAI8sF,EAAOsjD,gBAAkBtjD,EAAOujD,oBAEhH9vI,EAAE+vI,eAAiB,IAAMztI,GAAMmnB,EAAKsmH,eAAgBxjD,EAAOwjD,gBAAkBxjD,EAAOyjD,eAEpFhwI,EAAEiwI,kBAAoB,IAAM3tI,GAAMmnB,EAAKwmH,kBAAmB1jD,EAAO0jD,mBAAqB1jD,EAAO2jD,gBAE7FlwI,EAAEmwI,aAAe,IAAM7tI,GAAMmnB,EAAKxc,QAAS3K,GAAMiqF,EAAOt/E,SAAUjN,EAAE4vI,YAAW,KAExE5vI,EAET,SAASowI,GAAYlyI,EAAMu0B,SACnB/rB,EAAI+rB,IAAWA,EAAO1nB,QAAU0nB,EAAO1nB,OAAO7M,IAASu0B,EAAO08D,OAAS18D,EAAO08D,MAAMjxF,WACnFwI,GAAKA,EAAEy6H,OAASz6H,EAAIA,EAAIA,EAAEpE,MAAQ,KAM3C,SAAS+tI,GAAW5wI,EAAGyH,EAAGmO,SAChB,6BAA+B5V,+BAAkCyH,OAAOmO,IAElF,MAAMi7H,GAAcD,GAAW5jH,GAAYo5D,IAAOp5D,GAAYq5D,IAAQr5D,GAAY+lE,KA0ClF,SAAS+9C,GAAajuI,EAAOuX,UACnBA,EAAkBvX,EAAkBf,EAASe,GAGjDd,OAAOwpD,OAAO,GAAI1oD,EAAO,CAC3BuX,OAAQ02H,GAAajuI,EAAMuX,OAAQA,KAJyB,CAC5DvX,MAAAA,EACAuX,OAAAA,GAFgCA,EAAjBvX,EAQnB,SAASkuI,GAAWtoE,EAAMuoE,UACpBA,GACFvoE,EAAKhqE,KAAOuyI,EAAOvyI,KACnBgqE,EAAKyV,MAAQ8yD,EAAO9yD,OAASzV,EAAKyV,MAClCzV,EAAK+I,cAAgBw/D,EAAOx/D,YAC5B/I,EAAKz1C,OAAS43G,GAAaniE,EAAKz1C,OAAQg+G,EAAQ5R,KAEhD32D,EAAK+I,aAAc,EAGd/I,EAGT,SAASwoE,GAAgBjnH,EAAM7kB,EAAO2nF,EAAQokD,SACtC3wI,EAAIs/D,GAAO71C,EAAM8iE,GACjBxsB,EAAW//D,EAAE4vI,aACbgB,EAAY5wI,EAAEiwI,oBACdzxI,EAASwB,EAAE+vI,qBAEb5gD,EAAOt9E,EAAOuC,EAAM3G,EAAOkxC,EAE3BohB,GACFluD,EAAQ,CAAC,EAAG,GACZuC,EAAO,CAAC,EAAG,GACX3G,EAAQmjI,EACRjyF,EAASngD,IAETqT,EAAQ,CAAC,EAAG,GACZuC,EAAO,CAAC,EAAG,GACX3G,EAAQjP,EACRmgD,EAASiyF,SAGLn+G,EAAS,CACb08D,MAAOA,EAAQ,CACb/kC,QAASnqD,GACTkD,EAAGlD,GACH6T,EAAG7T,GACHwN,MAAOy8H,GAAQz8H,GACfkxC,OAAQurF,GAAQvrF,IAElB5zC,OAAQ1D,GAAO,GAAI8nF,EAAO,CACxB/kC,QAASlqD,GACT2W,KAAM,CACJooD,SAAUr6D,EACViN,MAAOA,EACPuC,KAAMA,KAGVqnE,KAAM,CACJrxB,QAASnqD,YAGbmqI,GAAY33G,EAAQ,CAClBm2C,OAAQ5oE,EAAE,uBACV+oE,YAAa/oE,EAAE,wBACd,CAEDoqD,QAASpqD,EAAE,qBAENwwI,GAAU,CACf1gI,KAAM0/H,GACN95D,KAthCuB,kBAuhCvBjjD,OAAAA,GACCk+G,GAGL,SAASE,GAAwBpnH,EAAM7kB,EAAO2nF,EAAQokD,EAAYG,SAC1D9wI,EAAIs/D,GAAO71C,EAAM8iE,GACjBxsB,EAAW//D,EAAE4vI,aACbgB,EAAY5wI,EAAEiwI,oBACdzxI,EAASwB,EAAE+vI,qBAEbtpI,EACAC,EACAw2F,EACA6zC,EACAxhD,EAAS,GACbxvB,GAAYt5D,EAAI,IAAKy2F,EAAK,KAAMx2F,EAAI,IAAKqqI,EAAK,QAASxhD,EAAS,OAAS9oF,EAAI,IAAKy2F,EAAK,KAAMx2F,EAAI,IAAKqqI,EAAK,gBACrG5hD,EAAQ,CACZ/kC,QAASnqD,GACT4W,KAAM,CACJjS,MAAOA,EACPjG,MAAOowI,KAGX5/C,EAAM1oF,GAAK,CACT06H,OAAQ5xC,EAAS,SAAWu/C,GAC5BpiD,KAAMluF,GAER2wF,EAAMzoF,GAAKzG,GACXkvF,EAAM+N,GAAM,CACVikC,OAAQ5xC,EAAAA,cACR7C,KAAMluF,GAER2wF,EAAM4hD,GAAM7G,GAAQ0G,SACdn+G,EAAS,CACb08D,MAAOA,EACPpkF,OAAQ1D,GAAO,GAAI8nF,EAAO,CACxB/kC,QAASlqD,KAEXu7E,KAAM,CACJrxB,QAASnqD,YAGbmqI,GAAY33G,EAAQ,CAClBm2C,OAAQ5oE,EAAE,uBACV+oE,YAAa/oE,EAAE,wBACd,CAEDoqD,QAASpqD,EAAE,qBAENwwI,GAAU,CACf1gI,KAAM0/H,GACN95D,KA5kCmB,cA6kCnBh0E,IAAKqtI,GACLr5H,KAAMo7H,EACNr+G,OAAAA,GACCk+G,GAKL,SAASK,GAAsBvnH,EAAM8iE,EAAQokD,EAAYG,SACjD9wI,EAAIs/D,GAAO71C,EAAM8iE,GACjBxsB,EAAW//D,EAAE4vI,aACbgB,EAAY1G,GAAQlqI,EAAEiwI,qBACtBzxI,EAASwB,EAAE+vI,qBAGb5gD,EACApkF,EACAtE,EACAC,EAJAuqI,EAAUjxI,EAAE,gBAKZuvF,EAAS,SAEP98D,EAAS,CACb08D,MAAOA,EAAQ,CACb/kC,QAASnqD,IAEX8K,OAAQA,EAAS,CACfq/C,QAASlqD,GACT4O,KAAM,CACJnQ,MAAOmiH,KAGXrlC,KAAM,CACJrxB,QAASnqD,YAGbmqI,GAAY33G,EAAQ,CAClB5b,KAAM7W,EAAE,cACRmtE,YAAantE,EAAE,gBACfwzE,KAAMxzE,EAAE,aACR+yE,SAAU/yE,EAAE,iBACZo0E,UAAWp0E,EAAE,kBACbs0E,WAAYt0E,EAAE,mBACdsxC,MAAOhvC,GAAMmnB,EAAKynH,WAAY3kD,EAAO4kD,sBAGnCpxE,GACFovB,EAAMrjF,MAAQ,CACZxJ,MAAO,QAET6sF,EAAMtd,SAAW9mE,EAAO8mE,SAAW,CACjCsvD,OA3CgB,uDA6ClB16H,EAAI,IACJC,EAAI,IACJ6oF,EAAS,OAETJ,EAAMrjF,MAAQf,EAAOe,MAAQ,CAC3Bq1H,OAnDa,uDAqDfhyC,EAAMtd,SAAW,CACfvvE,MAAO,OAETmE,EAAI,IACJC,EAAI,KAGNyoF,EAAM1oF,GAAKsE,EAAOtE,GAAK,CACrB06H,OAAQ5xC,EAAS,SAAWu/C,GAC5BpiD,KAAMluF,GAER2wF,EAAMzoF,GAAKqE,EAAOrE,GAAKkqI,EACvBA,EAAU/2H,OAASvX,GAAMmnB,EAAK2nH,YAAa7kD,EAAO8kD,sBAAwB,EAC1EJ,EAAUA,EAAU,CAClBroD,WAAY5oF,EAAE,mBACdM,OAAQ2wI,EACRpqI,MAAO,oBACLuB,EAEGooI,GAAU,CACf1gI,KAAM4/H,GACNh6D,KAAM60D,GACN5sD,MAAOqxD,GACPttI,IAAKqtI,GACLr5H,KAAMo7H,EACNr+G,OAAAA,EACAw+G,QAAAA,GACCN,GAGL,SAASW,GAAoB7nH,EAAM8iE,EAAQokD,EAAYG,EAAS7jI,SACxDjN,EAAIs/D,GAAO71C,EAAM8iE,GACjBe,EAAUqjD,EAAWrjD,QACrBrc,KAAiBqc,IAAWA,EAAQrc,aACpC/yE,EAAOovF,EAAUA,EAAQpvF,UAAOkK,EAChCu2C,EAAS3+C,EAAE,cACXuxI,EAAevxI,EAAE,gBACjBwxI,EAAW,CACf/jH,KAAM,SAEFgkH,EAAW,IAAGxkI,iCACdykI,EAAU/yF,EAASurF,GAAQvrF,GAAU,CACzChgD,MAAO0wI,IAEHl6H,EAAS,cACTs1E,EAAS,UAASx9E,SAEpBwlB,EAAQ08D,EAAOpkF,EAAQ2/E,EAAO9sE,EAClC8zH,EAAQhlD,KAAO,GAEfj6D,EAAS,CACP08D,MAAOA,EAAQ,CACb/kC,QAASnqD,GACTkD,EAAG,CACDg+H,OAAQsQ,EACR/kD,KAAM,GACN7yE,OAAQ03H,GAEVz9H,EAAG49H,GAEL3mI,OAAQA,EAAS,CACfq/C,QAASlqD,GACTiD,EAAGgsF,EAAMhsF,EACT2Q,EAAGq7E,EAAMr7E,GAEX2nE,KAAM,CACJrxB,QAASnqD,SAGT0xI,EAAW,KACXC,EAAa,KAEZnoH,EAAK5S,OACR86H,EAAWplD,EAAOslD,oBAClBD,EAAarlD,EAAOulD,uBAGtB1H,GAAY33G,EAAQ,CAClB5b,KAAM7W,EAAE,kBAAmB2xI,GAC3BtqE,MAAOrnE,EAAE,cACTkI,KAAMlI,EAAE,cACR4oE,OAAQ5oE,EAAE,oBAAqB4xI,GAC/B9jE,WAAY9tE,EAAE,cACdguE,iBAAkBhuE,EAAE,oBACpB+oE,YAAa/oE,EAAE,sBACd,CAEDoqD,QAASpqD,EAAE,mBAEbsvI,GAAazsI,SAAQ+B,IACf6kB,EAAK7kB,KACPmG,EAAOnG,GAASuqF,EAAMvqF,GAAS,CAC7BA,MAAO6kB,EAAK7kB,GACZjG,MAAOowI,cAIP9wE,EAAUuyE,GAAU,CACxB1gI,KApWe,SAqWf4lE,KAvuCqB,gBAwuCrBh0E,IAAKqtI,GACLr5H,KAAM87H,EACN5pE,OAAMjpB,QAAgBv2C,EACtBqqB,OAAAA,GACCk+G,EAAW1yE,SAERmzE,EAAclH,GAAQqH,GAC5BH,EAAYv3H,OAAS7Z,EAAE,eACvByyB,EAAS,CACP08D,MAAOA,EAAQ,CACb/kC,QAASnqD,GACTkD,EAAG,CACDg+H,OAAQsQ,EACR53H,OAAQu3H,GAEVt9H,EAAG49H,GAEL3mI,OAAQA,EAAS,CACfq/C,QAASlqD,GACT4O,KAAM,CACJnQ,MAAOmiH,IAET39G,EAAGgsF,EAAMhsF,EACT2Q,EAAGq7E,EAAMr7E,GAEX2nE,KAAM,CACJrxB,QAASnqD,KAGbmqI,GAAY33G,EAAQ,CAClB3mB,MAAO9L,EAAE,cACT6xE,SAAU7xE,EAAE,iBACZ6W,KAAM7W,EAAE,cACRmtE,YAAantE,EAAE,gBACfwzE,KAAMxzE,EAAE,aACR+yE,SAAU/yE,EAAE,iBACZo0E,UAAWp0E,EAAE,kBACbs0E,WAAYt0E,EAAE,mBACdsxC,MAAOtxC,EAAE,sBAELupF,EAASinD,GAAU,CACvB1gI,KAAM4/H,GACNh6D,KAAM60D,GACN5sD,MAAOqxD,GACPttI,IAAKqtI,GACLr5H,KAAM87H,EACN/+G,OAAAA,GACCk+G,EAAWpnD,eAEd92D,EAAS,CACP08D,MAAO,CACL1e,QAAS,CACPnuE,OAAQq8C,GAGVlxC,MAAOxN,GACP0+C,OAAQA,EAASurF,GAAQvrF,GAAU1+C,GACnCmqD,QAASnqD,IAEXw7E,KAAM,CACJrxB,QAASnqD,IAEX8K,OAAQA,EAAS,CACfq/C,QAASlqD,GACTqN,IAAK,CACH4zH,OAAQ,MAEV3zH,OAAQ,CACN2zH,OAAQ,QAKVnhI,EAAE4vI,YAAW,IACfllD,EAAS,iCAAgCD,KACzC1/E,EAAOwC,IAAI4zH,OAAU,GAAEhsH,KAASu1E,IAChC3/E,EAAOyC,OAAO2zH,OAAU,SAAQhsH,OAAWu1E,KAC3C9sE,EAAO,CACLjf,MAAO,CAAC,MAAOwW,MAGjBpK,EAAOwC,IAAI4zH,OAAU,SAAQhsH,OAAWs1E,KACxC1/E,EAAOyC,OAAO2zH,OAAU,GAAEhsH,OAAWs1E,IACrC7sE,EAAO,CACLjf,MAAOwW,IAKXpK,EAAOyC,OAAO2zH,OAAU,IAAGl0H,MAAYlC,EAAOyC,OAAO2zH,UAAUhsH,IASxDw6H,GAAW,CAChBj6D,KAAM6Q,GACN7wE,KATFo7H,EAAU,CACRiB,MAAO,CACLtkH,KAAMqjH,EACN5yI,KAAM,QACNurC,QAASolG,KAMXp8G,OAAQ43G,GAAa53G,EAAQ66D,EAASuxC,IACtC15C,MAAO,CAAClnB,EAASsrB,GACjBrrF,KAAAA,EACA+yE,YAAAA,EACArzD,KAAAA,IAqBJ,MAAMo0H,GAAM,yBACNC,GAAM,0BACNC,GAAQ,IAAGF,SAAUC,MACrBE,GAAQ,kBAAiBD,KACzBrgE,GAAWw+D,GAAW,QAAS,WAAY,YAE3C+B,GAAa,kBAAiBH,SADlB5B,GAAW,UAAW,SAAU,mBACa6B,0BAA4BF,mBAAoB1B,KACzG+B,GAAc,oBAAmBH,2BACjCI,GAAa,GAAEH,SAAWH,qBAC1BO,GAAgB,GAAEL,wBAA0BD,4BAA6BpgE,cA+D/E,SAASjK,GAAMA,EAAM8wD,OACfzrF,SAEA1rC,EAASqmE,KACPA,EAAKu5D,OACPl0F,EAAO26B,EAAKu5D,OACHv5D,EAAKrpE,KACd0uC,EAAO,aAAemH,GAAMwzB,EAAKrpE,MAAQ,IAChCqpE,EAAK8rB,SACdzmD,EAAO,YAAcmH,GAAMwzB,EAAK8rB,QAAU,wBAIvCzmD,EAAOyrF,EAAMuF,UAAUhxF,KAAU26B,EAG1C,SAASxzB,GAAM9xC,UACNf,EAASe,IAAUA,EAAM6+H,OAAS7+H,EAAM6+H,OAAS10G,GAAYnqB,GAGtE,SAASkwI,GAAS/oH,SACVisD,EAAOjsD,EAAKisD,MAAQ,UAClBA,EAAKt/D,QAAQ,SAAYs/D,EAAKt/D,QAAQ,WAAcs/D,EAAKt/D,QAAQ,SAAkBqT,EAAK3Z,OAASy/H,GAAYhpD,GAAY7Q,GAAQ40D,GAArD50D,EAGtF,SAASr8D,GAAYoQ,SACZ,CACLynD,SAAUznD,EAAK3Z,KACf5R,KAAMurB,EAAKvrB,WAAQkK,EACnBstE,KAAMjsD,EAAKisD,MAAQ88D,GAAQ/oH,GAC3BwkD,QAASxkD,EAAKwkD,aAAU7lE,EACxButE,KAAMlsD,EAAKksD,KACXC,YAAansD,EAAKmsD,aAItB,SAAS3E,GAAaxnD,EAAMivG,UACnBjvG,GAAQA,EAAK03G,OAASzI,EAAMuF,UAAUx0G,EAAK03G,SAAmB,IAAT13G,EAO9D,SAASgpH,GAAgBhpH,EAAMivG,SACvBpsF,EAAMomG,GAAajpH,EAAK3Z,MACzBw8B,GAAKvtC,EAAM,gCAAkC0tB,GAAYhD,EAAK3Z,aAC7D/G,EAAIm3D,GAAM5zB,EAAIx8B,KAAK6I,cAAe,KAAMinH,GAAgBtzF,EAAK7iB,EAAMivG,WACrEjvG,EAAK03G,QAAQzI,EAAM4S,UAAU7hH,EAAK03G,OAAQzI,EAAMuM,MAAMl8H,IAC1DA,EAAEquD,SAAW9qB,EAAI8qB,UAAY,GACtBruD,EAMT,SAAS62H,GAAgBtzF,EAAK7iB,EAAMivG,SAC5BplG,EAAS,GACTl0B,EAAIktC,EAAIhZ,OAAO90B,WAEhB,IAAIM,EAAI,EAAGA,EAAIM,IAAKN,EAAG,OACpB6zI,EAAOrmG,EAAIhZ,OAAOx0B,GACxBw0B,EAAOq/G,EAAKz0I,MAAQqhI,GAAeoT,EAAMlpH,EAAMivG,UAG1CplG,EAOT,SAASisG,GAAejzF,EAAK7iB,EAAMivG,SAC3B5oH,EAAOw8B,EAAIx8B,KACXxN,EAAQmnB,EAAK6iB,EAAIpuC,YAEV,UAAT4R,EAoCN,SAA6Bw8B,EAAK7iB,EAAMivG,GACjCpuH,GAASmf,EAAK/T,OACjB3W,EAAM,4DAGD25H,EAAMI,QAAQrvG,EAAK/T,MAAMk9H,UAAUla,EAAOjvG,EAAK/nB,KAxC7CmxI,CAAoBvmG,EAAK7iB,EAAMivG,QACnBtwH,IAAV9F,EAMS,UAATwN,EAwCb,SAA4Bw8B,EAAK7iB,EAAMivG,SAC/Bp2H,EAAQmnB,EAAK6iB,EAAIpuC,aAEnBouC,EAAIvpC,OACD1B,EAAQiB,IAEXvD,EAAM,iDAAmD0tB,GAAYnqB,IAGhEA,EAAMK,KAAI+D,GAAKosI,GAAkBxmG,EAAK5lC,EAAGgyH,MAEzCoa,GAAkBxmG,EAAKhqC,EAAOo2H,GAlD9Bqa,CAAmBzmG,EAAK7iB,EAAMivG,GACnB,eAAT5oH,EACF4oH,EAAMsa,cAAcvpH,EAAK6iB,EAAIpuC,OAG/BouC,EAAIvpC,QAAUgpI,GAASzpI,GAASA,EAAMK,KAAI+D,GAAKusI,GAAe3mG,EAAK5lC,EAAGgyH,KAAUua,GAAe3mG,EAAKhqC,EAAOo2H,QAX5GpsF,EAAI4pE,UACNn3G,EAAM,oBAAsB0tB,GAAYhD,EAAK3Z,MAAQ,eAAiB2c,GAAY6f,EAAIpuC,QAiB5F,SAAS+0I,GAAe3mG,EAAKhqC,EAAOo2H,SAC5B5oH,EAAOw8B,EAAIx8B,QAEbi8H,GAASzpI,UACJ4wI,GAAOpjI,GAAQ/Q,EAAM,6CAA+Co0I,GAAQrjI,GAAQ4oH,EAAM2V,SAAS/rI,GAAS8wI,GAAUtjI,GAAQ4oH,EAAMkT,WAAWtpI,GAASo2H,EAAMuF,UAAU37H,EAAM6+H,QAChL,OACCl0F,EAAOX,EAAIW,MAAQkmG,GAAQrjI,UAC1Bm9B,GAAQomG,GAAU/wI,GAASo2H,EAAM4a,QAAQhxI,EAAM2qC,KAAM3qC,EAAMsiC,IAAMqI,GAAQsmG,GAAWjxI,GAASopI,GAAWppI,EAAM3D,MAAO2D,EAAMsiC,IAAMsuG,GAAOpjI,GAAQ6kH,GAAgBryH,EAAOo2H,GAAS8a,GAAO1jI,GAAQkqH,GAAItB,EAAMI,QAAQx2H,GAAO2S,QAAUk+H,GAAQrjI,GAAQ47H,GAAWppI,GAAS8wI,GAAUtjI,GAAQ4oH,EAAMkT,WAAWtpI,GAASA,GAuC7T,SAASwwI,GAAkBxmG,EAAKhqC,EAAOo2H,SAC/Bt5H,EAAIktC,EAAIhZ,OAAO90B,WACjBm0I,MAEC,IAAI7zI,EAAI,EAAGA,EAAIM,IAAKN,EAAG,CAC1B6zI,EAAOrmG,EAAIhZ,OAAOx0B,OAEb,MAAM0D,KAAKmwI,EAAKjxI,OACfixI,EAAKjxI,IAAIc,KAAOF,EAAME,GAAI,CAC5BmwI,EAAO,cAKPA,EAAM,MAIPA,GAAM5zI,EAAM,0BAA4B0tB,GAAYnqB,UAEnDgxB,EAASjsB,GAAOu4H,GAAgB+S,EAAMrwI,EAAOo2H,GAAQia,EAAKjxI,YACzDs4H,GAAItB,EAAM91H,IAAIitC,GAAOvc,KAI9B,MAAM+/G,GAAYrzI,GAAKA,GAAKA,EAAEitC,KACxBsmG,GAAavzI,GAAKA,GAAKA,EAAErB,MACzB60I,GAASxzI,GAAW,SAANA,EACdkzI,GAASlzI,GAAW,SAANA,EACdmzI,GAAUnzI,GAAW,UAANA,EACfozI,GAAYpzI,GAAW,YAANA,EA0CvB,SAASyzI,GAAW/9H,EAAMgjH,UACjBhjH,EAAK+pH,KAAO/pH,EAAOA,EAAK+X,MAAQ/X,EAAK+X,KAAKgyG,KAAO/pH,EAAK+X,KAAOusG,GAAItB,EAAMI,QAAQpjH,EAAK+X,MAAMprB,QAGnG,SAASqxI,GAAUhb,EAAOl4H,EAAO6B,EAAQ4S,EAAQ4zB,QAC1C6vF,MAAQA,OAERl4H,MAAQA,OAER6B,OAASA,OAET4S,OAASA,OAGT0+H,UAAY9qG,OAEZ1zB,MAAQ,GA2Bf,SAASy+H,GAASj1I,UACT2L,GAAS3L,GAASA,EAAQ,KAGnC,SAASk1I,GAAanb,EAAOv5H,EAAGye,SACxBgnB,EAAKinG,GAAUjuH,EAAK8W,GAAI9W,EAAKjf,WAC/Bc,KAEAN,EAAE0nC,SACC,IAAI/nC,EAAI,EAAGM,EAAID,EAAEylC,GAAGpmC,OAAQM,EAAIM,IAAKN,KACpCK,EAAEylC,GAAG9lC,KAAO8lC,EAAI,YAGtBzlC,EAAE0nC,IAAM,CAAC,SACT1nC,EAAElB,OAAS,CAAC,MACZkB,EAAEylC,GAAK,CAAC,SAGNhnB,EAAK8W,KACPv1B,EAAE0nC,IAAInnC,MAAMD,EAAIme,EAAK8W,GAAGysG,QAAUzI,EAAMuF,UAAUx+H,GAAKme,EAAK8W,IAC5Dv1B,EAAElB,OAAOyB,KAAKg5H,EAAM2V,SAASzwH,EAAKjf,QAClCQ,EAAEylC,GAAGllC,KAAKklC,IAId,SAASpb,GAAMkvG,EAAOob,EAAI51I,EAAM61I,EAAQp1I,EAAOurC,EAAQ/0B,SAC/CqU,EAAQsqH,EAAG51I,KAAU41I,EAAG51I,GAAQ,IAChC0f,EA34CR,SAAiBA,UACPrc,EAASqc,IAFA,eAEcA,EAAK/W,MAAuB,IAAM,KAAOglI,GAAUjuH,EAAK8W,GAAI9W,EAAKjf,OAAvE,GA04CZq1I,CAAQ9pG,OAEjBxjC,EACAguB,EAFAlyB,EAAIoxI,GAASj1I,MAIR,MAAL6D,IACFk2H,EAAQob,EAAGpb,MACXl2H,GAASob,EAAO,IAAMA,EAAO,GAC7BlX,EAAI8iB,EAAMhnB,KAGPkE,EAAG,OACA4sB,EAAS4W,EAAS,CACtBvrC,MAAOgtI,GACPj5G,MAAOohH,EAAGrF,UAAU/V,EAAO/5H,EAAOurC,IAChC,CACFvrC,MAAO+5H,EAAM2V,SAAS1vI,GACtB+zB,MAAOsnG,GAAI8Z,EAAGzxI,SAEZub,IAAM0V,EAAO1V,KAAO86G,EAAMgW,QAAQxkG,IACtCxV,EAAKgkG,EAAM91H,IAAIs9D,GAAM6zE,OAAQ3rI,EAAWkrB,IACpCne,IAAO2+H,EAAG3+H,MAAMxW,GAAS+1B,GAC7BhuB,EAAIszH,GAAItlG,GACC,MAALlyB,IAAWgnB,EAAMhnB,GAAKkE,UAGrBA,EAuHT,SAASutI,GAAcxqH,EAAMivG,EAAOx6H,SAC5B6yB,EAAStH,EAAKsH,OACduB,EAAS7I,EAAK6I,OACdgrG,EAAS7zG,EAAK6zG,OACd/qG,EAAS9I,EAAK8I,OACdtd,EAASwU,EAAKxU,OACdyf,EAAKgkG,EAAM91H,IAAIswH,MAEfjmF,EAAO0nF,GADE,MAAQlrG,EAAKyqH,QAAU,YAAch2I,EAAO,KAAO,CAACo0B,EAAQvB,EAAQusG,EAAQ/qG,EAAQtd,GAAQtS,KAAI3C,GAAU,MAALA,EAAY,OAASA,IAAGmN,KAAK,KAAO,OACnHurH,GACrChkG,EAAG3pB,OAASkiC,EAAKixF,MACjBxpG,EAAGpB,OAAS2Z,EAAKmxF,QAGnB,SAAS+V,GAAW1qH,EAAMivG,SAClBhjD,EAAO88D,GAAQ/oH,GACf7R,EAAQ6R,EAAK3Z,OAASy/H,GACtBwC,EAAQtoH,EAAK/T,MAAQ+T,EAAK/T,KAAKq8H,MAC/Bd,EAAUxnH,EAAKwnH,YAEjBpqG,EACAnS,EACAuQ,EACAg7F,EACA/hI,EACAk2I,EACAC,EAPAlyI,EAASsnB,EAAKtnB,QAAUuzE,IAAS6Q,IAAa7Q,IAAS4Q,SAQrD/W,EAASmG,IAAS40D,IAAYnoI,GAAU4vI,EAExCvxI,EA3RR,SAAsBkV,EAAMkC,EAAO8gH,OAC7BqZ,EAAOrwI,EAAKgzB,EAAIo8G,EAAS3nI,SAExBuM,GAGIq8H,EAAQr8H,EAAKq8H,SACbn6H,GAAO7Y,EAAM,oCAEC,MAAfgzI,EAAMpzI,MACRmyI,EAAU3nI,EAASsqI,GAAW1B,EAAOrZ,IAGhChjH,EAAK+X,KASRtkB,EAAS6wH,GAAItB,EAAMI,QAAQpjH,EAAK+X,MAAMkmH,YARtCj/G,EAAK+9G,GAAeprI,GAAO,CACzByI,KAAM,YACN25B,QAAS1mC,EAAMgvI,EAAMtoG,UACpBsoG,EAAM4B,WAAYjb,GACrBhkG,EAAGpB,OAAO5xB,IAAMg3H,EAAM4b,OAAOvC,EAAMtoG,SACnC/U,EAAGpB,OAAOZ,MAAQ+gH,GAAW1B,EAAOrZ,GACpCoY,EAAU3nI,EAAS6wH,GAAItB,EAAM91H,IAAI8xB,KAKnChzB,EAAMg3H,EAAM4b,OAAOvC,EAAMtoG,SAAS,KArBtCqnG,EAAU9W,GAAItB,EAAM91H,IAAI4nC,GAAQ,KAAM,CAAC,OA0BpCsmG,IACHA,EAAU2C,GAAW/9H,EAAMgjH,IAGtB,CACLh3H,IAAKA,EACLgxB,MAAOo+G,EACP3nI,OAAQA,GAsPIorI,CAAY9qH,EAAK/T,KAAMkC,EAAO8gH,GAE5ChkG,EAAKgkG,EAAM91H,IAAI+rF,GAAS,CACtBjtF,IAAKlB,EAAMkB,MAAQ+nB,EAAK/nB,IAAMgqI,GAAWjiH,EAAK/nB,UAAO0G,GACrDsqB,MAAOlyB,EAAMkyB,MACblqB,OAAQoP,WAEJ48H,EAAUxa,GAAItlG,GAEpBA,EAAKuQ,EAAQyzF,EAAM91H,IAAI4nC,GAAQ,CAC7B9X,MAAO8hH,KAGT9/G,EAAKgkG,EAAM91H,IAAIklF,GAAK,CAClBlQ,QAASv+D,GAAWoQ,GACpBwnD,YAAaA,GAAYxnD,EAAKwnD,YAAaynD,GAC3C9wD,KAAMA,GAAKn+C,EAAKm+C,KAAM8wD,GACtB1rG,QAAS,CACPynH,UAAU,GAEZ/nG,OAAQgsF,EAAMp5D,SACdn2D,OAAQuvH,EAAM12H,QAAQmH,OAASuvH,EAAMuF,UAAU,UAAY,KAC3D9oH,MAAOujH,EAAMgc,WACbhiH,MAAOsnG,GAAItlG,YAEPigH,EAAU3a,GAAItlG,GAEpBA,EAAKurG,EAAMvH,EAAM91H,IAAIisF,GAAOi8C,GAAYrhH,EAAKgJ,OAAQhJ,EAAK3Z,KAAM4lE,EAAMjsD,EAAKk0D,MAAO+6C,EAAO,CACvFxmG,KAAK,EACLQ,MAAOiiH,MAGTjgH,EAAGpB,OAAOnqB,OAASuvH,EAAMjmG,SAErBhJ,EAAKnZ,WACPmZ,EAAKnZ,UAAUzN,SAAQ7C,UACfitF,EAAKwlD,GAAezyI,EAAG04H,GACvBhuD,EAAKuiB,EAAG71B,UAEVsT,EAAGkqE,WAAalqE,EAAGnzC,UACrBx4B,EAAM,iDAGH2rE,EAAGhyC,QAAOunG,EAAI3sG,OAAOpB,KAAM,GAEhC+6D,EAAG35D,OAAOZ,MAAQsnG,GAAItlG,GACtBgkG,EAAM91H,IAAI8xB,EAAKu4D,MAKfxjE,EAAK7L,OACP8W,EAAKgkG,EAAM91H,IAAIkuF,GAAU,CACvBlzE,KAAM86G,EAAMkT,WAAWniH,EAAK7L,MAC5B8U,MAAOsnG,GAAItlG,aAITmgH,EAAY7a,GAAItlG,IAElBq9G,GAAS5vI,KACXA,EAASu2H,EAAM91H,IAAIgrF,GAAW,CAC5BzrF,OAAQu2H,EAAM+U,eAAehkH,EAAKtnB,QAClCqqF,QAASksC,EAAMlsC,QACftkB,KAAMysE,EACNjiH,MAAOmiH,KAETT,EAAYpa,GAAI73H,UAIZwtE,EAAQ+oD,EAAM91H,IAAI4kF,GAAM,CAC5Btf,KAAMysE,EACNjiH,MAAO0hH,GAAaS,KAEtBR,EAAWra,GAAIrqD,GAEX/3D,IAEE23D,IACF1oC,EAAM6xF,EAAM+H,UACZ55F,EAAI51B,MACA9O,GAAQ0kC,EAAI51B,OAGlBynH,EAAMoc,UAAUD,EAAWT,GAAaC,EAAUG,GAClDzC,EA1KJ,SAAqBtoH,EAAMivG,EAAO9gH,SAC1Bm6H,EAAQtoH,EAAK/T,KAAKq8H,MAClB7zI,EAAO6zI,EAAM7zI,KACbuvB,EAAOgmH,GAAW1B,EAAOrZ,OAC3BhkG,EAECq9G,EAAM7zI,MACTa,EAAM,2BAA6B0tB,GAAYslH,IAG5CA,EAAMtkH,MACT1uB,EAAM,oCAAsC0tB,GAAYslH,IAGtDA,EAAMpzI,MACR+1B,EAAKgkG,EAAM91H,IAAImtC,GAAS,CACtBpxC,MAAO+5H,EAAM2V,SAAS0D,EAAMpzI,OAC5B+zB,MAAOjF,KAEAskH,EAAMtoG,QACf/U,EAAKgkG,EAAM91H,IAAIwqC,GAAM,CACnB1rC,IAAKg3H,EAAM4b,OAAOvC,EAAMtoG,SACxB7xB,MAAOoiH,GAAItB,EAAMuM,MAAMrtH,EAAMzO,SAC7BupB,MAAOjF,KAGT1uB,EAAM,wCAA0C0tB,GAAYslH,UAIxDgD,EAAWrc,EAAM1gG,OACjBj2B,EAASgzI,EAASnyI,IAAI4nC,MACtBv1B,EAAS8/H,EAASnyI,IAAIovC,GAAM,CAChCtf,MAAOsnG,GAAIj4H,MAEbgzI,EAASC,QAAQ92I,EAAM,IAAIw1I,GAAUqB,EAAUhzI,EAAQA,EAAQkT,IAC/D8/H,EAASzJ,UAAU,SAAU,MAE7B52G,EAAGpB,OAAO2a,QAAU,CAClBsyF,SAAUwU,EAAS1oI,MAAMod,GAAMwrH,aAmIvBC,CAAWzrH,EAAMivG,EAAOl4H,GAC9B+uE,EAhIN,SAAuB9lD,EAAMivG,EAAOl4H,SAC5Bk0B,EAAKgkG,EAAM91H,IAAImtC,GAAS,CAC5Brd,MAAOlyB,EAAMkyB,SAETqiH,EAAWrc,EAAM1gG,OACvB+8G,EAASnyI,IAAIovC,MACb+iG,EAASzJ,UAAU,SAAU,MAE7B52G,EAAGpB,OAAO2a,QAAU,CAClBsyF,SAAUwU,EAAS1oI,MAAMod,GAAMwrH,aAuHpBE,CAAa1rH,EAAMivG,EAAOl4H,GACnCk4H,EAAMrsH,MAAMod,GAEdivG,EAAM0c,WAEF7lE,IACEptE,GAAQ0kC,EAAInnC,KAAKyC,GACrB0kC,EAAInnC,KAAKiwE,KAKTshE,IACFoD,EAyBJ,SAAsBpD,EAASlvI,EAAQ22H,SAC/Bp4H,EAAS2wI,EAAQ3wI,OACjBqvE,EAAQshE,EAAQthE,MAChB6Y,EAAMyoD,EAAQroD,WACdt1D,EAAS,CACbs1D,WAAYmjD,GAASvjD,GAAOkwC,EAAMuF,UAAUz1C,EAAI24C,QAAU34C,EAC1DloF,OAAQyrI,GAASzrI,GAAUo4H,EAAMuF,UAAU39H,EAAO6gI,QAAU7gI,EAC5DoyB,MAAO3wB,GAGLkvI,EAAQpqI,QACVysB,EAAO1V,KAAO86G,EAAMkT,WAAW,CAC7BjtI,MAAOsyI,EAAQpqI,YAIf8oE,EAAO,OACH0lE,EAAM1lE,EAAMoZ,UAClBz1D,EAAOw1D,eAAiBijD,GAASsJ,GAAO3c,EAAMuF,UAAUoX,EAAIlU,SAAWkU,EACvE/hH,EAAOu1D,WAAa6vC,EAAMc,SAAS7pD,EAAM/qE,OACzC0uB,EAAO21D,YAActZ,EAAMI,cAGtBiqD,GAAItB,EAAM91H,IAAImlF,GAAQz0D,KAhDhBgiH,CAAarE,EAASoD,EAAU3b,UAIvCp/C,EAASo/C,EAAM91H,IAAI+lF,GAAO,CAC9Bj2D,MAAO2hH,KAEHkB,EAAQ7c,EAAM91H,IAAIovC,GAAM,CAC5Btf,MAAOsnG,GAAI1gD,SACVlxE,EAAWswH,EAAMvvH,WAGH,MAAbsgB,EAAKvrB,OACPA,EAAOurB,EAAKvrB,KACZw6H,EAAMsc,QAAQ92I,EAAM,IAAIw1I,GAAUhb,EAAOzzF,EAAOq0C,EAAQi8D,IACpD9rH,EAAK8R,IAAI9R,EAAK8R,GAAG14B,SAAQ04B,KACvBA,EAAGjJ,QAAUiJ,EAAGxK,QAAUwK,EAAG+hG,SAC/Bv+H,EAAM,uCAGRk1I,GAAa14G,EAAIm9F,EAAOx6H,OA+B9B,SAASs3I,GAAa/rH,EAAMivG,SACpBnsC,EAASmsC,EAAMnsC,OAAOK,OACtBn6D,EAAShJ,EAAKgJ,QAAU,GACxBzyB,EAAIs/D,GAAO71C,EAAM8iE,GACjBkpD,EAAehjH,EAAOm6D,QAAU,GAChC1uF,EAAOu3I,EAAav3I,WAAQkK,EAC5B6oE,EAAcwkE,EAAaxkE,YAC3B0M,EAAQ83D,EAAa93D,MACrBxmB,EAAS,OAGXu+E,EACApiH,EACAytD,EAHAn8E,EAAQ,EAKZ0qI,GAAazsI,SAAQpD,GAAKgqB,EAAKhqB,IAAM03D,EAAO13D,GAAKgqB,EAAKhqB,GAAImF,EAAQA,GAAS6kB,EAAKhqB,IAAM,IACjFmF,GAAO7F,EAAM,yCAEZ+Q,EA6ER,SAAoB2Z,EAAMksH,OACpB7lI,EAAO2Z,EAAK3Z,MAAQs/H,GAEnB3lH,EAAK3Z,MAA6B,IAOzC,SAAoB2Z,UACX6lH,GAAaztI,QAAO,CAACwS,EAAOvE,IAASuE,GAASoV,EAAK3Z,GAAQ,EAAI,IAAI,GARxD8lI,CAAWnsH,KAAgBA,EAAK5S,OAAQ4S,EAAKm/C,SAC7D94D,EAAO2nD,GAAak+E,GAAav2E,GAAWzH,GAAeg+E,GAAaj/E,GAAW04E,WAG9Et/H,IAASsvD,GAAWtvD,EAAO6nD,GAAeg+E,GAAaj/E,GAAW0I,GApF5Dy2E,CAAWpsH,EAAMivG,EAAMid,UAAU/wI,IAExCwrB,EAAQ,CACZ+uD,MAAqB,MAAd11D,EAAK01D,MACZhoB,OAAQA,EACRrnD,KAAMA,EACN69E,MAAgB,WAAT79E,GAAqB9P,EAAE4vI,cAE1BkB,EAAU9W,GAAItB,EAAM91H,IAAI4nC,GAAQ,KAAM,CAACpa,MAavC0lH,EAAW9b,GAAItB,EAAM91H,IAAIksF,GAAcx7D,EAAS,CACpDxjB,KAAMA,EACNlL,MAAO8zH,EAAMc,SAAS50H,GACtByP,MAAOqkH,EAAM+U,eAAeztI,EAAE,cAC9BsxC,MAAOonF,EAAM7wH,SAAS7H,EAAE,gBACxBiV,OAAQyjH,EAAM+U,eAAehkH,EAAKxU,QAClCgoB,QAASy7F,EAAM7wH,SAAS4hB,EAAKssH,aAC7Bl9H,WAAY6/G,EAAM7wH,SAAS4hB,EAAK5Q,YAChCrC,gBAAiBkiH,EAAM7wH,SAAS4hB,EAAKha,mBAGnCK,IAASsvD,IACX2hB,EAAW,CAAC2vD,GAAejnH,EAAM7kB,EAAO2nF,EAAQ95D,EAAOwsC,UAAW+xE,GAAqBvnH,EAAM8iE,EAAQ95D,EAAO82D,OAAQusD,IAEpHxiH,EAAOjf,MAAQif,EAAOjf,OAASqkH,EAAMuF,UAAW,kBAAiBiO,GAAMlsI,EAAE+vI,6BAElEjgI,IAAS4mD,GACdqqB,EAAW,CAAC8vD,GAAuBpnH,EAAM7kB,EAAO2nF,EAAQ95D,EAAOwsC,SAAU62E,GAAW9E,GAAqBvnH,EAAM8iE,EAAQ95D,EAAO82D,OAAQusD,KAIpIJ,EAvvBR,SAA4BjsH,EAAM8iE,SAC1BvsF,EAAIs/D,GAAO71C,EAAM8iE,SAGhB,CACLzgF,MAAO9L,EAAE,aACTiN,QAASjN,EAAEmwI,eACXrnI,OAAQ,CACNyE,KAAK,EACLC,QAAQ,GAEV4L,QAAS,CACP7L,IAAKvN,EAAE,cACPwN,OAAQxN,EAAE,mBA0uBMg2I,CAAmBvsH,EAAM8iE,GACvCxL,EAAW,CAACuwD,GAAmB7nH,EAAM8iE,EAAQ95D,EAAQqjH,EAAU5J,GAAMwJ,EAAYzoI,WAEjFqmB,EAAOprB,KAsEf,SAAwBuhB,EAAMivG,EAAOvzC,SAC7Bj9E,EAAOgkI,GAAM+J,GAAW,OAAQxsH,EAAM07D,IACtCpc,EAAcmjE,GAAM+J,GAAW,cAAexsH,EAAM07D,IACpDpS,EAAWm5D,GAQnB,SAAqBz5G,EAAQimG,EAAO/6C,UAC3ByyD,GAAY,WAAY39G,IApwCjC,SAAkBv0B,EAAMw6H,EAAO/6C,SACvBl+E,EAAIi5H,EAAMnsC,OAAO5O,MAAMA,UACtBl+E,GAAKA,EAAEvB,GAkwC4Bg4I,CAAS,WAAYxd,EAAO/6C,GAT/Cw4D,CAAYhxD,EAAM,GAAG1yD,OAAQimG,EAAOsW,YACpDra,GAAiB,iBAAgBzsH,MAAS6gE,MAAgBgK,KAAa2lD,GA1E1D0d,CAAe3sH,EAAMivG,EAAO33C,EAAS,GAAGoE,QAI5DpE,EAAW,CAAC4uD,GAAW,CACrBj6D,KAtlEoB,eAulEpBhgE,KAAMo7H,EACNr+G,OA1CkB,CAClB08D,MAAO,CACLhsF,EAAG,CACDb,MAAO,GAETwR,EAAG,CACDxR,MAAO,KAqCX6iF,MAAOpE,EACP5+E,OAAQuzI,EACRzkE,YAAAA,KAGE7gD,EAAM+uD,OACR4B,EAASrhF,KA5uBb,SAAsB+pB,EAAM8iE,EAAQokD,EAAYG,SACxC9wI,EAAIs/D,GAAO71C,EAAM8iE,GAEjB95D,EAAS,CACb08D,MAAO,CACL/kC,QAASnqD,IAEX8K,OAAQ,CACNq/C,QAASlqD,GACTiD,EAAG,CACDxE,MAAO,CACLiZ,MAAO,YAGX9D,EAAG,CACDnV,MAAO,CACLiZ,MAAO,aAIb6jE,KAAM,CACJrxB,QAASnqD,YAGbmqI,GAAY33G,EAAQ,CAClBs9C,OAAQ/vE,EAAE,eACVq2I,QAASr2I,EAAE,eACX2E,OAAQ,CACNw8H,OAAQkR,IAEVhpE,MAAO,CACL83D,OAAQmR,IAEVxmI,MAAO,CACLq1H,OAAQiR,IAEVvgE,SAAU,CACRsvD,OAAQoR,IAEVzjI,KAAM2a,EAAK01D,MACXtoE,KAAM7W,EAAE,cACRmtE,YAAantE,EAAE,gBACfwzE,KAAMxzE,EAAE,aACR+yE,SAAU/yE,EAAE,iBACZo0E,UAAWp0E,EAAE,kBACbs0E,WAAYt0E,EAAE,mBACdsxC,MAAOtxC,EAAE,cACT2zE,WAAY3zE,EAAE,oBACb,CAED8L,MAAO9L,EAAE,cACT6xE,SAAU7xE,EAAE,mBAEPwwI,GAAU,CACf1gI,KAAM4/H,GACNh6D,KAt6CoB,eAu6CpBiI,MAAOsxD,GACPv5H,KAAMo7H,EACNr+G,OAAAA,GACCk+G,GAirBa2F,CAAY7sH,EAAM8iE,EAAQ95D,EAAO0sD,MAAO2xD,IAIjDqD,GAAUxE,GAAW,CAC1Bj6D,KAtmEe,SAumEfhgE,KAAMo7H,EACNr+G,OAAQ43G,GAAakM,GAAkBv2I,EAAGypB,EAAM8iE,GAASkpD,EAAc5W,IACvE15C,MAAOpE,EACPpL,KAAM31E,EAAE,QACR41E,YAAa51E,EAAE,eACfiuE,OAAQjuE,EAAE,UACV9B,KAAAA,EACA+yE,YAAAA,EACA0M,MAAAA,IACE+6C,GAiBN,SAAS6d,GAAkBv2I,EAAGypB,EAAM8iE,SAC5B95D,EAAS,CACb08D,MAAO,GACPpkF,OAAQ,WAEVq/H,GAAY33G,EAAQ,CAClBs9C,OAAQ/vE,EAAE,UACV6Z,OAAQ7Z,EAAE,UACVoZ,QAASpZ,EAAE,WACX4pF,aAAc5pF,EAAE,gBAChBglE,aAAchlE,EAAE,gBAChB6W,KAAM7W,EAAE,aACR4oE,OAAQ5oE,EAAE,eACV+oE,YAAawjB,EAAOxjB,YACpB+E,WAAYye,EAAOze,WACnB3qE,EAAGnD,EAAE,WACL8T,EAAG9T,EAAE,WAELyP,OAAQga,EAAKha,OACboJ,WAAY4Q,EAAK5Q,aAEZ4Z,EAUT,SAASwjH,GAAW/3I,EAAMurB,EAAM07D,UACvB17D,EAAKvrB,GAAS,UAASurB,EAAKvrB,aAAkBkyI,GAAYlyI,EAAMinF,EAAM,GAAG1yD,QApgBlFihH,GAAU8C,YAAc,SAAU9d,EAAOprC,SACjCluF,EAAIkuF,EAAQ9uF,OACZyW,EAASq4E,EAAQluF,EAAI,GACrBiD,EAASirF,EAAQluF,EAAI,OACvBoB,EAAQ8sF,EAAQ,GAChBzkD,EAAO,KACP/pC,EAAI,MAEJ0B,GAAwB,SAAfA,EAAMsP,OACjBtP,EAAQ8sF,EAAQ,IAIlBorC,EAAM91H,IAAI0qF,EAAQ,IAEXxuF,EAAIM,IAAKN,EACdwuF,EAAQxuF,GAAGw0B,OAAOZ,MAAQsnG,GAAI1sC,EAAQxuF,EAAI,IAC1C45H,EAAM91H,IAAI0qF,EAAQxuF,IACM,cAApBwuF,EAAQxuF,GAAGgR,OAAsB+4B,EAAOykD,EAAQxuF,WAG/C,IAAI40I,GAAUhb,EAAOl4H,EAAO6B,EAAQ4S,EAAQ4zB,IA2DrD6qG,GAAUjsI,UAAY,CACpBgnI,UAAU/V,EAAO/5H,EAAOif,SAChBk2H,EAAK7yI,KACLuoB,EAAQsqH,EAAG5pG,SAAW4pG,EAAG5pG,OAAS,IAClC1nC,EAAIoxI,GAASj1I,OACf+H,EAAGhE,EAAGvD,SAED,MAALqD,IACFk2H,EAAQob,EAAGpb,MACXhyH,EAAI8iB,EAAMhnB,IAGPkE,EAeMkX,GAAQA,EAAKjf,OACtBk1I,GAAanb,EAAOhyH,EAAEkgC,IAAItT,OAAQ1V,IAflCze,EAAI,CACFsqC,QAASivF,EAAM2V,SAAS1vI,EAAO,OAC/B+zB,MAAOsnG,GAAI8Z,EAAGzxI,SAEZub,GAAQA,EAAKjf,OAAOk1I,GAAanb,EAAOv5H,EAAGye,GAC/Clb,EAAIg2H,EAAM91H,IAAI0kC,GAAUnoC,IACxBuH,EAAIgyH,EAAM91H,IAAI4nC,GAAQ,CACpB9X,MAAOsnG,GAAIt3H,MAEbgE,EAAI,CACFkgC,IAAKlkC,EACLs3H,IAAKA,GAAItzH,IAEF,MAALlE,IAAWgnB,EAAMhnB,GAAKkE,IAKrBA,EAAEszH,KAGXhB,mBACSgB,GAAI/4H,KAAKgU,SAGlBi5H,UAAUxV,EAAO/5H,UACR6qB,GAAMkvG,EAAOz3H,KAAM,SAAU,SAAUtC,GAAO,IAGvDsvI,UAAUvV,EAAO/5H,UACR6qB,GAAMkvG,EAAOz3H,KAAM,SAAU,SAAUtC,GAAO,IAGvDovI,UAAUrV,EAAO/5H,EAAOif,UACf4L,GAAMkvG,EAAOz3H,KAAM,OAAQ,SAAUtC,EAAOif,IAAQ,IAG7Dg1H,UAAUla,EAAO/5H,UACR6qB,GAAMkvG,EAAOz3H,KAAM,SAAU,aAActC,GAAO,IAG3Do6H,UAAUL,EAAO/5H,UACR6qB,GAAMkvG,EAAOz3H,KAAM,SAAU,aAActC,GAAO,GAAM,KAqYnE,SAAS83I,GAAYhtH,EAAMivG,SAKnB14H,EAAIs/D,GAJV71C,EAAOnf,GAASmf,GAAQ,CACtB3a,KAAM2a,GACJA,EAEmBivG,EAAMnsC,OAAOpN,OAC9B1sD,EAAShJ,EAAKgJ,QAAU,GACxBk+G,EAAal+G,EAAO7a,OAAS,GAC7B1Z,EAAOyyI,EAAWzyI,WAAQkK,EAC1B6oE,EAAc0/D,EAAW1/D,YACzB0M,EAAQgzD,EAAWhzD,MACnBoD,EAAW,GAIX+vD,EAAU9W,GAAItB,EAAM91H,IAAI4nC,GAAQ,KAAM,CAD9B,cAGdu2C,EAASrhF,KAqDX,SAAoB+pB,EAAMzpB,EAAG2wI,EAAYG,SACjC7wI,EAAO,CACXqC,MAAO,GAEHwM,EAAO2a,EAAK3a,KACZ2jB,EAAS,CACb08D,MAAO,CACL/kC,QAASnqD,GAEX8K,OAAQ,CACNq/C,QAAS,CACP9nD,MAAO,IAGXm5E,KAAM,CACJrxB,QAASnqD,WAGbmqI,GAAY33G,EAAQ,CAClB3jB,KAAMA,EACNhD,MAAO,CACLq1H,OAAQ,yBAEV93D,MAAO,CACL83D,OAAQ,yBAEV7vF,MAAO,CACL6vF,OAAQ,yBAEVtvD,SAAU,MACVlhE,GAAI3Q,EAAE,MACN6Q,GAAI7Q,EAAE,MACN6W,KAAM7W,EAAE,SACRwzE,KAAMxzE,EAAE,QACR+yE,SAAU/yE,EAAE,YACZo0E,UAAWp0E,EAAE,aACbs0E,WAAYt0E,EAAE,cACd2zE,WAAY3zE,EAAE,eACb,CAED8L,MAAO9L,EAAE,SACTqpE,MAAOrpE,EAAE,SACT6xE,SAAU7xE,EAAE,cAEPwwI,GAAU,CACf1gI,KAAM4/H,GACNh6D,KAAM80D,GACN7sD,MAAOuxD,GACPx5H,KAAMo7H,EACNr+G,OAAAA,GACCk+G,GAvGW+F,CAAWjtH,EAAMzpB,EAsBjC,SAAqBypB,SACbgJ,EAAShJ,EAAKgJ,cACbA,GAAUA,EAAO0sD,OAAS93E,GAAO,CACtCnJ,KAAMurB,EAAKvrB,KACX+yE,YAAaxnD,EAAKwnD,YAClB0M,MAAOl0D,EAAKk0D,OACXlrD,GA5B+BkkH,CAAYltH,GAAOqnH,IAEjDrnH,EAAKwkE,UACPlN,EAASrhF,KAuGb,SAAuB+pB,EAAMzpB,EAAG2wI,EAAYG,SACpC7wI,EAAO,CACXqC,MAAO,GAEHwM,EAAO2a,EAAKwkE,SACZx7D,EAAS,CACb08D,MAAO,CACL/kC,QAASnqD,GAEX8K,OAAQ,CACNq/C,QAAS,CACP9nD,MAAO,IAGXm5E,KAAM,CACJrxB,QAASnqD,WAGbmqI,GAAY33G,EAAQ,CAClB3jB,KAAMA,EACNhD,MAAO,CACLq1H,OAAQ,yBAEV93D,MAAO,CACL83D,OAAQ,yBAEV7vF,MAAO,CACL6vF,OAAQ,yBAEVtvD,SAAU,MACVlhE,GAAI3Q,EAAE,MACN6Q,GAAI7Q,EAAE,MACN6W,KAAM7W,EAAE,iBACRwzE,KAAMxzE,EAAE,gBACR+yE,SAAU/yE,EAAE,oBACZo0E,UAAWp0E,EAAE,qBACbs0E,WAAYt0E,EAAE,sBACd2zE,WAAY3zE,EAAE,uBACb,CAED8L,MAAO9L,EAAE,SACTqpE,MAAOrpE,EAAE,SACT6xE,SAAU7xE,EAAE,cAEPwwI,GAAU,CACf1gI,KAAM4/H,GACNh6D,KAAM+0D,GACN9sD,MAAOwxD,GACPz5H,KAAMo7H,EACNr+G,OAAAA,GACCk+G,GAzJaiG,CAAcntH,EAAMzpB,EAAGyyB,EAAOw7D,SAAU6iD,IAIjDqD,GAAUxE,GAAW,CAC1Bj6D,KA3rEc,QA4rEdhgE,KAAMo7H,EACNr+G,OAAQokH,GAAY72I,EAAG2wI,GACvBxrD,MAAOpE,EACPpL,KAAM31E,EAAE,QACR41E,YAAa51E,EAAE,eACfiuE,OAAQjuE,EAAE,UACV9B,KAAAA,EACA+yE,YAAAA,EACA0M,MAAAA,IACE+6C,GAaN,SAASme,GAAY72I,EAAG2wI,SAChBl+G,EAAS,CACb08D,MAAO,GACPpkF,OAAQ,WAEVq/H,GAAY33G,EAAQ,CAClBs9C,OAAQ/vE,EAAE,UACV2E,OAAQ3E,EAAE,UACV8L,MAAO,CACLq1H,OAAQmP,IAEVjnE,MAAO,CACL83D,OA7Da,uDA+Df7vF,MAAOtxC,EAAE,SACTy0C,MAAOz0C,EAAE,SACT6Z,OAAQ7Z,EAAE,WAAa,EACvBoZ,QAASpZ,EAAE,qBAENqqI,GAAa53G,EAAQk+G,EAAY9R,IA6G1C,SAASiY,GAAUrpH,EAAMirG,SACjBt8F,EAAa,GAEf3O,EAAKnd,WACPmd,EAAKnd,UAAUzN,SAAQoqF,IACrB7wD,EAAW18B,KAAK+yI,GAAexlD,EAAIyrC,OAInCjrG,EAAK8N,IACP9N,EAAK8N,GAAG14B,SAAQ04B,IACd04G,GAAa14G,EAAIm9F,EAAOjrG,EAAKvvB,SAIjCw6H,EAAM0V,gBAAgB3gH,EAAKvvB,KAM7B,SAAiBuvB,EAAMirG,EAAO7xF,SACtBxkC,EAAS,OAIX00I,EACAj4I,EACAM,EACA2J,EACAsM,EAPAtT,EAAS,KACTwwB,GAAS,EACT6W,GAAW,EAOX3b,EAAKxY,OAEH82H,GAASt+G,EAAKxY,SAAW+2H,GAAUv+G,EAAKhe,SAE1CpN,EAAO3C,KAAKgsB,GAAKgtG,EAAOjrG,IACxBprB,EAAO3C,KAAKqC,EAASmnC,OAGrB7mC,EAAO3C,KAAKqC,EAASmnC,GAAQ,CAC3B63F,QAAStzG,EAAKxY,OACd+rH,QAASvzG,EAAKhe,UAGTge,EAAK3B,IAEVkgH,GAAUv+G,EAAK3B,MAAQkgH,GAAUv+G,EAAKhe,SAExCpN,EAAO3C,KAAKgsB,GAAKgtG,EAAOjrG,IACxBprB,EAAO3C,KAAKqC,EAASmnC,OAGrB7mC,EAAO3C,KAAKqC,EAASmnC,GAAQ,CAC3B+3F,SAAUxzG,EAAK3B,IACfk1G,QAASvzG,EAAKhe,UAGTge,EAAK1rB,SAEdA,EAASg1I,EAAWh0I,EAAM0qB,EAAK1rB,QAAQY,KAAIwQ,GAAK6mH,GAAItB,EAAMI,QAAQ3lH,GAAG9Q,UACrEA,EAAO3C,KAAK,WAITZ,EAAI,EAAGM,EAAIynC,EAAIroC,OAAQM,EAAIM,IAAKN,EACnCiK,EAAI89B,EAAI/nC,GACRuW,EAAItM,EAAEquD,SAEDr1D,GAAWsT,EAAEtT,QAChBM,EAAO3C,KAAKqC,EAASmnC,MAGvB7mC,EAAO3C,KAAKqJ,GACRsM,EAAEu/H,YAAWxrG,GAAW,GACxB/zB,EAAEwd,WAAauW,IAAU7W,GAAS,GAClCld,EAAEtT,OAAQA,EAASgH,EAAWsM,EAAEkiB,UAASx1B,EAAS,MAGpDg1I,IACF33I,EAAI23I,EAASv4I,OAAS,EACtB6D,EAAO,GAAKwvC,GAAM,CAChBlgB,OAAQY,EACRG,MAAOtzB,EAAI23I,EAAWA,EAAS,MAG7BxkH,GAAUnzB,IAEZiD,EAAO2uB,OAAO,EAAG,EAAGkY,OAInBnnC,GAAQM,EAAO3C,KAAKwpC,aACzB7mC,EAAO3C,KAAKsyC,GAAM,KACX3vC,EA/E0B20I,CAAQvpH,EAAMirG,EAAOt8F,IAkFxD,SAAS8M,GAAQj0B,SACTxV,EAAI+qC,GAAQ,GAAIv1B,UACtBxV,EAAE23D,SAAW,CACXr1D,QAAQ,GAEHtC,EAGT,SAASisB,GAAKgtG,EAAOjrG,UACZ8hB,GAAK,CACVzjB,IAAK2B,EAAK3B,IAAM4sG,EAAM7wH,SAAS4lB,EAAK3B,UAAO1jB,EAC3CqjB,MAAOgC,EAAKhC,MAAQitG,EAAM7wH,SAAS4lB,EAAKhC,YAASrjB,EACjD6M,OAAQwY,EAAKxY,OAASyjH,EAAM7wH,SAAS4lB,EAAKxY,aAAU7M,EACpDqH,OAAQipH,EAAM+U,eAAehgH,EAAKhe,UAItC,MAAMy8E,GAAMnc,GAAUA,IAAWgW,IAAUhW,IAAW6V,GAGhDqxD,GAAU,CAAClnE,EAAQrtE,EAAGlD,IAAMusI,GAASh8D,GAAUmnE,GAAcnnE,EAAOoxD,OAAQz+H,EAAGlD,GAAKuwE,IAAW8V,IAAQ9V,IAAW6V,GAAMljF,EAAIlD,EAE5H23I,GAAM,CAACpnE,EAAQrtE,EAAGlD,IAAMusI,GAASh8D,GAAUqnE,GAAOrnE,EAAOoxD,OAAQz+H,EAAGlD,GAAK0sF,GAAInc,GAAUrtE,EAAIlD,EAE3F63I,GAAM,CAACtnE,EAAQrtE,EAAGlD,IAAMusI,GAASh8D,GAAUunE,GAAOvnE,EAAOoxD,OAAQz+H,EAAGlD,GAAK0sF,GAAInc,GAAUvwE,EAAIkD,EAC3F60I,GAAQ,CAACxnE,EAAQrtE,EAAGlD,IAAMusI,GAASh8D,GAAUynE,GAAUznE,EAAOoxD,OAAQz+H,EAAGlD,GAAKuwE,IAAW6V,GAAM,CACnGtjF,MAAOI,GACL,CACFJ,MAAO9C,GAQH43I,GAAS,CAACK,EAAS/0I,EAAGlD,IAAMk4I,GAAO,GAAED,kBAA2BA,iBAA2B/0I,EAAGlD,GAE9F83I,GAAS,CAACG,EAAS/0I,EAAGlD,IAAMk4I,GAAO,GAAED,kBAA2BA,iBAA2B/0I,EAAGlD,GAE9F03I,GAAgB,CAACO,EAAS/0I,EAAGlD,IAAMm4I,GAAQ,GAAEF,mBAA4BA,cAAwB/0I,EAAGlD,GAEpGg4I,GAAY,CAACC,EAAS/0I,EAAGlD,IAAMm4I,GAAQ,GAAEF,cAAwB/0I,EAAGlD,GAEpEo4I,GAAc,CAACH,EAAS/0I,EAAGlD,IAAMm4I,GAAQ,GAAEF,gBAA0B/0I,EAAGlD,GAExEk4I,GAAQ,CAAC1vI,EAAMtF,EAAGlD,KAEtBkD,EAAS,MAALA,EAAYwnI,GAAQxnI,GAAKA,EAC7BlD,EAAS,MAALA,EAAY0qI,GAAQ1qI,GAAKA,EAEzBq4I,GAASn1I,IAAMm1I,GAASr4I,GAInB,CACL2hI,OAAS,GAAEn5H,QAHbtF,EAAIA,EAAIA,EAAEy+H,QAAU10G,GAAY/pB,EAAEJ,OAAS,YAC3C9C,EAAIA,EAAIA,EAAE2hI,QAAU10G,GAAYjtB,EAAE8C,OAAS,SAMpC,CAAC+E,GAAO,CACbW,KAAAA,GACCtF,IAAIhC,OAAOlB,GAAK,KAIjBq4I,GAAW5X,GAAc,MAAPA,GAA2C,IAA5Bz+H,OAAO+E,KAAK05H,GAAKzhI,OAElDm5I,GAAS,CAAC3vI,EAAMtF,EAAGlD,MACvB2hI,OAAS,GAAEn5H,QAAW8vI,GAAOp1I,UAAUo1I,GAAOt4I,QAG1Cu4I,GAAW,CAACN,EAAS1uI,EAAGvJ,EAAGwJ,EAAG9G,MAClCi/H,QAAc,MAALn4H,EAAa,GAAEyuI,mBAA4BK,GAAO9uI,SAAW,KAAY,MAALxJ,EAAa,GAAEi4I,qBAA8BK,GAAOt4I,SAAW,KAAY,MAAL0C,EAAa,GAAEu1I,oBAA6BK,GAAO51I,SAAW,KAAY,MAAL6G,EAAa,GAAE0uI,kBAA2BK,GAAO/uI,SAAW,IAAM,WAGtR+uI,GAASpxI,GAAKqlI,GAASrlI,GAAKA,EAAEy6H,OAAc,MAALz6H,EAAY,KAAO+lB,GAAY/lB,GAOtEsxI,GAAQ,CAAC11I,EAAOiqB,WACd9sB,EAAI6C,EAAM6+H,cACT1hI,GAAKA,EAAEw4I,SAAS,UAAY,CACjC9W,OAAQ1hI,EAAEkB,MAAM,GAAI,GAAK4rB,EAAK40G,QAC5B7+H,GAGN,SAAS41I,GAAS/oH,EAAMo9D,EAAQ4rD,EAAYx6D,OACtCy6D,KAEA7rD,GAAU7kF,GAAe6kF,EAAQp9D,UAC5Bo9D,EAAOp9D,GACT,GAAIznB,GAAeywI,EAAYhpH,UAC7BgpH,EAAWhpH,GACb,GAAIA,EAAKvC,WAAW,SAAU,QAC3BuC,OACD,aACHipH,EAAY,iBAGT,gBACA,oBACA,kBACHA,EAAYjpH,EAAK,GAAGxW,cAAgBwW,EAAKxuB,MAAM,UAG5Cg9E,EAAMsxD,eAAiBmJ,GACzB,GAAIjpH,EAAKvC,WAAW,SAAU,QAC3BuC,OACD,aACHipH,EAAY,iBAGT,gBACA,gBACHA,EAAYjpH,EAAK,GAAGxW,cAAgBwW,EAAKxuB,MAAM,UAG5Cg9E,EAAMqxD,eAAiBoJ,UAGzB,KAGT,SAAS7xI,GAAKsJ,SACNlN,EAAM,OAEP,MAAM/D,KAAOiR,KACXjR,MAEA,MAAM8C,KAAO9C,EAAK+D,EAAIjB,GAAO,SAG7BF,OAAO+E,KAAK5D,GA0ErB,SAAS8mF,GAAShgE,EAAMukE,SACf,CACLppF,MAAO6kB,EAAK7kB,MACZa,MAAOuoF,GAIX,SAASqqD,GAAU5uH,EAAM8iE,EAAQokD,EAAYG,EAASjmG,SAC9C7qC,EAAIs/D,GAAO71C,EAAM8iE,GACjBxc,EAAStmD,EAAKsmD,OACduoE,EAAS7uH,EAAK8uH,UACdr1I,EAAO+zI,GAAQlnE,EAAQ,GAAI,GAC3Bl2D,EAoER,SAAqBA,EAAQ3W,MACd,IAATA,QAAmB,GAAK3B,EAASsY,GAI9B,KACDqmD,EAAQrmD,EAASxS,GAAO,GAAIwS,QAEX,MAAdqmD,EAAMwsB,MAAc,KACpBnrF,EAAS2+D,EAAMwsB,aAClBxsB,EAAMwsB,KAAOq/C,GAAS7oI,GACpB,CACAi+H,OAAS,IAAGjhE,EAAMwsB,YAAYxpF,EAAKi+H,WACjCjhE,EAAMwsB,KAAOxpF,EACV2W,EAEPqmD,EAAQA,EAAMwsB,KAAOrlF,GAAO,GAAI64D,EAAMwsB,MAI1CxsB,EAAMwsB,KAAOxpF,OAlBb2W,EAASkyH,GAAS7oI,GAAQ,CACxBi+H,OAAS,IAAGj+H,EAAKi+H,cAActnH,GAAU,MACvC3W,GAAQ2W,GAAU,UAmBjBA,EA3FQqwE,CAAYzgE,EAAK5P,OAAQ3W,OAEpCisF,EAAO1T,EAAM1wE,QACX0nB,EAAS,CACb08D,MAAOA,EAAQ,CACb/kC,QAASnqD,IAEX8K,OAAQA,EAAS,CACfq/C,QAASlqD,IAEXu7E,KAAMA,EAAO,CACXrxB,QAASnqD,KAGbmqI,GAAY33G,EAAQ,CAClBm2C,OAAQ5oE,EAAE,aACVytE,UAAWztE,EAAE,WACb8tE,WAAY9tE,EAAE,YACdguE,iBAAkBhuE,EAAE,kBACpB6oE,cAAe7oE,EAAE,eACjB+oE,YAAa/oE,EAAE,qBAEXw4I,EAAU,CACd5zI,MAAO6kB,EAAK7kB,MACZjG,MAAOowI,GACPlkG,KAAMA,EAAKA,KACX04C,MAAO14C,EAAK04C,MACZ1pE,OAAQgxB,EAAKhxB,OACbnF,MAAO1U,EAAE,cAEL2pG,EAAKwtC,GAAIpnE,EAAQ,CACrBoxD,OAAQ,UACP,CACDA,OAAQ,UAEJsX,EAAYH,EAAS,CACzB1zI,MAAO0zI,EACP7yI,MAAO,EACPinF,KAAMxpF,EACN2W,OAAQA,GACN,CACFvX,MAAO,EACPuX,OAAQA,GAEJ6+H,EAAUJ,EAAS,CACvB1zI,MAAO0zI,EACP7yI,MAAO,EACPinF,KAAMxpF,EACN2W,OAAQA,GACNxS,GAAOsiG,EAAI,CACbjd,KAAMxpF,EACN2W,OAAQA,WAEVs1E,EAAMhsF,EAAI4H,EAAO5H,EAAIg0I,GAAIpnE,EAAQyoE,EAASC,GAC1CtpD,EAAMr7E,EAAI/I,EAAO+I,EAAIujI,GAAItnE,EAAQyoE,EAASC,GAC1CtpD,EAAM/sD,GAAKr3B,EAAOq3B,GAAKi1G,GAAItnE,EAAQ2oE,GACnCvpD,EAAMr5C,GAAK/qC,EAAO+qC,GAAKqhG,GAAIpnE,EAAQ2oE,GACnCj9D,EAAKt4E,EAAIg0I,GAAIpnE,EAAQyoE,GACrB/8D,EAAK3nE,EAAIujI,GAAItnE,EAAQyoE,GACdhI,GAAU,CACf1gI,KAAM2/H,GACN/5D,KAztFiB,YA0tFjBh0E,IAAKqtI,GACLr5H,KAAMo7H,EACNr+G,OAAAA,GACCk+G,GA+EL,SAASgI,GAAU/zI,EAAO+D,EAAWjG,EAAGlD,EAAGF,SAClC,CACL6hI,OAAQ,gBAAkBv8H,EAAlB,cAA+CA,EAAQ,oBAAsB+D,EAAY,IAAMjG,EAAI,IAAMlD,EAAI,IAAMF,EAAI,KAInI,SAASs5I,GAAYnvH,EAAM8iE,EAAQokD,EAAYG,EAAS5oI,EAAM2iC,SACtD7qC,EAAIs/D,GAAO71C,EAAM8iE,GACjBxc,EAAStmD,EAAKsmD,OACdnrE,EAAQ6kB,EAAK7kB,MACb1B,EAAO+zI,GAAQlnE,GAAS,EAAG,GAC3BrnE,EAAQwjI,GAAMlsI,EAAE,eAChB64I,EAAc3M,GAAMlsI,EAAE,qBACtB84I,EAAa94I,EAAE,cACf+4I,EAAgB/4I,EAAE,qBAGpB+K,EADAiuI,EAAoB,IAAVtwI,KAAiBA,QAEzBuwI,EAAW/O,GAAQhiI,GACzB+wI,EAASvsD,KAAOxpF,EAChB+1I,EAASp/H,OAASqwH,GAAQlqI,EAAE,iBAAmB,GAC/Ci5I,EAASp/H,OAAO6yE,KAAOxpF,QACjBs1I,EAAU,CACd5zI,MAAOA,EACPjG,MAAOowI,GACPlkG,KAAM,GACNhxB,OAAQ02H,GAAa1lG,EAAKhxB,OAAQ7Z,EAAE,iBAEhC8L,EAAQqrI,GAAIpnE,EAAQipE,EAAUL,GAAU/zI,EAAO8D,EAAO,SAAU,UAAW,YAAc,CAC7FpG,MAAO,UA7WK,EAACytE,EAAQrtE,EAAGlD,IAAMusI,GAASh8D,GAAU6nE,GAAY7nE,EAAOoxD,OAAQz+H,EAAGlD,GAAKuwE,IAAW+V,GAAQ,CACzGxjF,MAAOI,GACL,CACFJ,MAAO9C,GA2WJ05I,CAAQnpE,EAAQ,OAAQ,UACrB8B,EAAWslE,GAAIpnE,EAAQwnE,GAAMxnE,EAAQ,SAAU,OAAQipE,EAAUL,GAAU/zI,EAAO8D,EAAO,QAAS,WAAY,YAAc,CAChIpG,MAAO,WAEH62I,EAAaR,GAAU/zI,EAAO8D,EAAQ,KAAImwI,KAAgBA,EAAa,GAC7EG,EAAUA,GAAWH,QACf1pD,EAAQ,CACZ/kC,QAASnqD,GACTkD,EAAGg0I,GAAIpnE,EAAQyoE,EAASS,GACxBnlI,EAAGujI,GAAItnE,EAAQyoE,EAASS,IAEpBxmH,EAAS,CACb08D,MAAOA,EACPpkF,OAAQA,EAAS,CACfq/C,QAASlqD,GACT4O,KAAM,CACJnQ,MAAOmiH,IAET39G,EAAGgsF,EAAMhsF,EACT2Q,EAAGq7E,EAAMr7E,EACThI,MAAAA,EACA+lE,SAAAA,GAEF4J,KAAM,CACJrxB,QAASnqD,GACTkD,EAAGgsF,EAAMhsF,EACT2Q,EAAGq7E,EAAMr7E,IAGbs2H,GAAY33G,EAAQ,CAClB9hB,IAAKmoI,GAAcE,EAAU7B,GAAIpnE,EAAQopE,GAAc,KACvDtoI,IAAKkoI,GAAiBC,EAAU3B,GAAItnE,EAAQopE,GAAc,OAE5D/O,GAAY33G,EAAQ,CAClB42C,MAAOrpE,EAAE,cACT6W,KAAM7W,EAAE,cACRmtE,YAAantE,EAAE,gBACfwzE,KAAMxzE,EAAE,aACR+yE,SAAU/yE,EAAE,iBACZs0E,WAAYt0E,EAAE,mBACdo0E,UAAWp0E,EAAE,kBACbsxC,MAAOtxC,EAAE,cACT2zE,WAAY3zE,EAAE,oBACb,CACD8L,MAAOgtI,EACPjnE,SAAUknE,UAGNppE,EAAQ3vE,EAAE,kBAEZixI,EAAUjxI,EAAE,uBAGhBixI,EAAUA,GAAWthE,EAAQ,CAC3BiZ,WAAY5oF,EAAE,mBACdM,OAAQ2wI,EACRpqI,MAAO,cACP8oE,MAAOA,EAAQ,CACb/qE,MAAAA,EACAmrE,OAAAA,EACAgZ,UAAWpZ,GACT,WACFvnE,EAEA2C,EAAOe,QAAUA,IACnBf,EAAOe,MAAQksI,GAAMjtI,EAAOe,MAAOA,IAGjCf,EAAO8mE,WAAaA,IACtB9mE,EAAO8mE,SAAWmmE,GAAMjtI,EAAO8mE,SAAUA,IAGpC2+D,GAAU,CACf1gI,KAAM4/H,GACNh6D,KAn5FkB,aAo5FlBiI,MAAOqxD,GACPttI,IAAKqtI,GACLr5H,KAAMo7H,EACNr+G,OAAAA,EACAw+G,QAAAA,GACCN,GAGL,SAASyI,GAAW3vH,EAAM8iE,EAAQokD,EAAYG,SACtC9wI,EAAIs/D,GAAO71C,EAAM8iE,GACjBxc,EAAStmD,EAAKsmD,OACd7sE,EAAO+zI,GAAQlnE,GAAS,EAAG,OAE7Bof,EAAOpkF,QACL0nB,EAAS,CACb08D,MAAOA,EAAQ,CACb/kC,QAASnqD,GACT0E,OAAQulI,GAAQlqI,EAAE,cAAe,OACjC8L,MAAO,CACLq1H,OAAQmP,KAGZvlI,OAAQA,EAAS1D,GAAO,GAAI8nF,EAAO,CACjC/kC,QAASlqD,GACT4O,KAAMo7H,GAAQzgH,EAAK01D,SAErB1D,KAAM,CACJrxB,QAASnqD,KAGPo5I,EAAW,CACflY,OAAS,eAAc13G,EAAK7kB,YAAYyrI,GAAW,EAAG,EAAG,eAE3DtlI,EAAO5H,EAAIg0I,GAAIpnE,EAAQspE,GACvBtuI,EAAO+I,EAAIujI,GAAItnE,EAAQspE,GACvBlqD,EAAM9lB,MAAQ8tE,GAAIpnE,EAAQ9vE,GA5af,EAACiD,EAAMZ,IAAoB,IAAVA,EAAc,EAAIypI,GAAS7oI,GAAQ,CAC/Di+H,OAAS,IAAGj+H,EAAKi+H,aAAa7+H,KAC5B,CACFA,MAAOY,EAAOZ,GAyakBoqF,CAAKxpF,EAAM,KAC3CisF,EAAMtd,SAAWslE,GAAIpnE,EAAQwnE,GAAMxnE,EAAQgW,GAAQH,IAAM,CACvDtjF,MAAOyjF,KAETh7E,EAAOs+D,MAAQ8lB,EAAM9lB,MACrBt+D,EAAO8mE,SAAWsd,EAAMtd,SACxBu4D,GAAY33G,EAAQ,CAClB5b,KAAM7W,EAAE,cACRmtE,YAAantE,EAAE,gBACfwzE,KAAMxzE,EAAE,aACR+yE,SAAU/yE,EAAE,iBACZo0E,UAAWp0E,EAAE,kBACbs0E,WAAYt0E,EAAE,mBACdsxC,MAAOtxC,EAAE,cACT2zE,WAAY3zE,EAAE,oBACb,CAED8L,MAAO9L,EAAE,cACTqpE,MAAOrpE,EAAE,cACT6xE,SAAU7xE,EAAE,mBAehB,SAAoBA,EAAG+vE,EAAQt9C,EAAQk+G,SAC/B5mD,EAAO,CAACznF,EAAO+pH,IAAiB,MAAT/pH,GAAiBmwB,EAAO1nB,OAAOshH,GAAO2rB,GAAM9N,GAAQ5nI,GAAQmwB,EAAO1nB,OAAOshH,KAAO,IAAU1kH,GAAI0kH,EAAKskB,GAE3H2I,EAAQvvD,EAAK/pF,EAAE,UAAW,KAC1Bu5I,EAAQxvD,EAAK/pF,EAAE,UAAW,KAChCyyB,EAAO08D,MAAMpF,KAAOwvD,IAAUD,EAAQpP,GAAQqP,GAASpC,GAAIpnE,EAAQm6D,GAAQqP,GAAQrP,GAAQoP,IAlB3FE,CAAWx5I,EAAG+vE,EAAQt9C,EAAQk+G,GAC9Bl+G,EAAO1nB,OAAOe,MAAQksI,GAAMvlH,EAAO1nB,OAAOe,MAAOqjF,EAAMrjF,OACvD2mB,EAAO1nB,OAAOs+D,MAAQ2uE,GAAMvlH,EAAO1nB,OAAOs+D,MAAO8lB,EAAM9lB,OACvD52C,EAAO1nB,OAAO8mE,SAAWmmE,GAAMvlH,EAAO1nB,OAAO8mE,SAAUsd,EAAMtd,UACtD2+D,GAAU,CACf1gI,KAAM4/H,GACNh6D,KAh9FkB,aAi9FlBiI,MAAOsxD,GACPv5H,KAAMo7H,EACNr+G,OAAAA,GACCk+G,GAWL,SAAS8I,GAAWhwH,EAAMivG,SAClBnsC,EA1ZR,SAAqB9iE,EAAMivG,OAMrB/2F,EACA+3G,EACAh4I,EAPA6qF,EAASmsC,EAAMnsC,OACf5O,EAAQ4O,EAAO5O,MACfyL,EAAOmD,EAAOnD,KACdv+C,EAAuC,SAAhC6tF,EAAMid,UAAUlsH,EAAK7kB,QAAqB2nF,EAAOotD,SACxD5pE,EAAStmD,EAAKsmD,UAKdg8D,GAASh8D,GAAS,OACd6pE,EAASrzI,GAAK,CAACgmF,EAAOstD,MAAOttD,EAAOutD,QACpCC,EAAaxzI,GAAK,CAACgmF,EAAOytD,QAASztD,EAAO0tD,WAAY1tD,EAAO2tD,SAAU3tD,EAAO4tD,gBAG/Ez4I,KAFLigC,EAAK,GAEOi4G,GACVj4G,EAAGjgC,GAAOy1I,GAAIpnE,EAAQmoE,GAASx2I,EAAK6qF,EAAOstD,MAAOzwD,EAAMzL,GAAQu6D,GAASx2I,EAAK6qF,EAAOutD,MAAO1wD,EAAMzL,QAK/Fj8E,KAFLg4I,EAAK,GAEOK,GACVL,EAAGh4I,GAAOq2I,GAAShoE,EAAOoxD,OAAQ+W,GAASx2I,EAAK6qF,EAAOytD,QAAS5wD,EAAMzL,GAAQu6D,GAASx2I,EAAK6qF,EAAO0tD,WAAY7wD,EAAMzL,GAAQu6D,GAASx2I,EAAK6qF,EAAO2tD,SAAU9wD,EAAMzL,GAAQu6D,GAASx2I,EAAK6qF,EAAO4tD,UAAW/wD,EAAMzL,SAGlNh8C,EAAKouC,IAAW6V,IAAO7V,IAAWgW,GAASwG,EAAOstD,MAAQttD,EAAOutD,MACjEJ,EAAKntD,EAAO,OAASxc,EAAO,GAAGz4D,cAAgBy4D,EAAOpvE,MAAM,WAG/CghC,GAAM+3G,GAAM7uG,EAAOxjC,GAAO,GAAI+hF,EAAMznD,EAAI+3G,EAAI7uG,GAAQu+C,EA6XpD+uD,CAAW1uH,EAAMivG,GAC1BjmG,EAAShJ,EAAKgJ,QAAU,GACxB2nH,EAAa3nH,EAAO22D,MAAQ,GAC5BlrF,EAAOk8I,EAAWl8I,WAAQkK,EAC1B6oE,EAAcmpE,EAAWnpE,YACzB0M,EAAQy8D,EAAWz8D,MACnB39E,EAAIs/D,GAAO71C,EAAM8iE,GACjB1hD,EA7jER,SAAkB7qC,SACV0G,EAAI1G,EAAE,gBAGR6qC,EACA04C,EAFA1pE,EAAS7Z,EAAE,qBAIV0G,EAIMA,EAAEy6H,QAEXt2F,EAAO,CACLs2F,OAAS,IAAGz6H,EAAEy6H,kCAEhB59C,EAAQ,CACN49C,OAAS,IAAGz6H,EAAEy6H,wBAGX5/H,EAASsY,KACZA,EAAS,CACPsnH,OAAS,IAAGz6H,EAAEy6H,8BAA8BtnH,OAGjC,WAANnT,GAETmkC,EAAO,EACP04C,GAAQ,EACR1pE,EAAS,IAETgxB,EAAO,GACP04C,GAAQ,IAvBR14C,EAAO7qC,EAAE,gBACTujF,EAAQvjF,EAAE,cAyBL,CACLujF,MAAAA,EACA14C,KAAAA,EACAhxB,OAAAA,GAuhEWwgI,CAASr6I,GAGhBowB,EAAQ,CACZxrB,MAAO6kB,EAAK7kB,MACZ0P,QAAStU,EAAE,SACXupF,SAAUvpF,EAAE,UACZspF,OAAQtpF,EAAE,QACV8D,SAAU9D,EAAE,UACZm/E,MAAqB,MAAd11D,EAAK01D,OAER2xD,EAAU9W,GAAItB,EAAM91H,IAAI4nC,GAAQ,GAAI,CAACpa,MAErCkqH,EAAWtgB,GAAItB,EAAM91H,IAAI8rF,GAAU,CACvC9pF,MAAO8zH,EAAMc,SAAS/vG,EAAK7kB,OAC3B2+E,MAAOm1C,EAAM7wH,SAASgjC,EAAK04C,OAC3BlvE,MAAOqkH,EAAM+U,eAAehkH,EAAKg0C,WACjCxoD,OAAQyjH,EAAM+U,eAAehkH,EAAKxU,QAClCgoB,QAASy7F,EAAM7wH,SAAS4hB,EAAKssH,aAC7Bl9H,WAAY6/G,EAAM7wH,SAAS4hB,EAAK5Q,YAChCrC,gBAAiBkiH,EAAM7wH,SAAS4hB,EAAKha,YAGjCsxE,EAAW,OACb74E,SAEAkoB,EAAMk5D,MACRvI,EAASrhF,KAAK24I,GAAS5uH,EAAM8iE,EAAQ95D,EAAO62D,KAAMgxD,EAAUzvG,IAI1Dza,EAAM9b,QACRpM,EAAOlI,EAAE,YACT+gF,EAASrhF,KAjRb,SAAoB+pB,EAAM8iE,EAAQokD,EAAYG,EAAS5oI,EAAM2iC,SACrD7qC,EAAIs/D,GAAO71C,EAAM8iE,GACjBxc,EAAStmD,EAAKsmD,OACd7sE,EAAO+zI,GAAQlnE,GAAS,EAAG,OAE7Bof,EAAO1T,EAAM1wE,QACX0nB,EAAS,CACb08D,MAAOA,EAAQ,CACb/kC,QAASnqD,IAEX8K,OAAQA,EAAS,CACfq/C,QAASlqD,IAEXu7E,KAAMA,EAAO,CACXrxB,QAASnqD,KAGbmqI,GAAY33G,EAAQ,CAClBm2C,OAAQ5oE,EAAE,aACVytE,UAAWztE,EAAE,WACb8tE,WAAY9tE,EAAE,YACdguE,iBAAkBhuE,EAAE,kBACpB6oE,cAAe7oE,EAAE,eACjB+oE,YAAa/oE,EAAE,qBAEXi5I,EAAW/O,GAAQhiI,GACzB+wI,EAASvsD,KAAOxpF,QACVs1I,EAAU,CACd5zI,MAAO6kB,EAAK7kB,MACZjG,MAAOowI,GACPlkG,KAAMA,EAAKA,KACX04C,MAAO14C,EAAK04C,MACZ1pE,OAAQgxB,EAAKhxB,OACbnF,MAAO1U,EAAE,qBAEX+K,EAAO+I,EAAIq7E,EAAMr7E,EAAIqjI,GAAIpnE,EAAQ9vE,GAAMu4I,GACvCztI,EAAO+qC,GAAKq5C,EAAMr5C,GAAKqhG,GAAIpnE,EAAQkpE,GACnCx9D,EAAKt4E,EAAIg0I,GAAIpnE,EAAQyoE,GACrBztI,EAAO5H,EAAIgsF,EAAMhsF,EAAIk0I,GAAItnE,EAAQ9vE,GAAMu4I,GACvCztI,EAAOq3B,GAAK+sD,EAAM/sD,GAAKi1G,GAAItnE,EAAQkpE,GACnCx9D,EAAK3nE,EAAIujI,GAAItnE,EAAQyoE,GACdhI,GAAU,CACf1gI,KAAM2/H,GACN/5D,KAnyFiB,YAoyFjBh0E,IAAKqtI,GACLr5H,KAAMo7H,EACNr+G,OAAAA,GACCk+G,GAkOa4J,CAAU9wH,EAAM8iE,EAAQ95D,EAAOne,MAAOgmI,EAAUpyI,EAAM2iC,KAIlEza,EAAMm5D,SACRrhF,EAAOkoB,EAAM9b,MAAQpM,EAAO,EAC5B64E,EAASrhF,KAAKk5I,GAAWnvH,EAAM8iE,EAAQ95D,EAAO82D,OAAQ+wD,EAAUpyI,EAAM2iC,KAIpEza,EAAMtsB,QACRi9E,EAASrhF,KA5ab,SAAqB+pB,EAAM8iE,EAAQokD,EAAYG,SACvC9wI,EAAIs/D,GAAO71C,EAAM8iE,GACjBxc,EAAStmD,EAAKsmD,WAEhBof,EAAOpkF,QACL0nB,EAAS,CACb08D,MAAOA,EAAQ,CACb/kC,QAASnqD,IAEX8K,OAAQA,EAAS,CACfq/C,QAASlqD,IAEXu7E,KAAM,CACJrxB,QAASnqD,KAGbmqI,GAAY33G,EAAQ,CAClBm2C,OAAQ5oE,EAAE,eACVytE,UAAWztE,EAAE,aACb8tE,WAAY9tE,EAAE,cACdguE,iBAAkBhuE,EAAE,oBACpB+oE,YAAa/oE,EAAE,eACf6oE,cAAe7oE,EAAE,yBAEbw6I,EAAO/wD,GAAShgE,EAAM,GACtBgxH,EAAOhxD,GAAShgE,EAAM,UAC5B0lE,EAAMhsF,EAAI4H,EAAO5H,EAAIg0I,GAAIpnE,EAAQyqE,EAAMv6I,IACvCkvF,EAAM/sD,GAAKr3B,EAAOq3B,GAAK+0G,GAAIpnE,EAAQ0qE,GACnCtrD,EAAMr7E,EAAI/I,EAAO+I,EAAIujI,GAAItnE,EAAQyqE,EAAMv6I,IACvCkvF,EAAMr5C,GAAK/qC,EAAO+qC,GAAKuhG,GAAItnE,EAAQ0qE,GAC5BjK,GAAU,CACf1gI,KAAM2/H,GACN/5D,KA3oFmB,cA4oFnBhgE,KAAMo7H,EACNr+G,OAAAA,GACCk+G,GAyYa+J,CAAWjxH,EAAM8iE,EAAQ95D,EAAO3uB,OAAQgtI,IAIpD1gH,EAAM+uD,OACR4B,EAASrhF,KAAK05I,GAAU3vH,EAAM8iE,EAAQ95D,EAAO0sD,MAAO2xD,IAI/CqD,GAAUxE,GAAW,CAC1Bj6D,KAliGa,OAmiGbhgE,KAAMo7H,EACNr+G,OAAQ43G,GAAasQ,GAAgB36I,EAAGypB,GAAO2wH,EAAYvb,IAC3D15C,MAAOpE,EACPpL,KAAM31E,EAAE,QACR41E,YAAa51E,EAAE,eACfiuE,OAAQjuE,EAAE,UACV9B,KAAAA,EACA+yE,YAAAA,EACA0M,MAAAA,IACE+6C,GAGN,SAASiiB,GAAgB36I,EAAGypB,SACpBgJ,EAAS,CACb08D,MAAO,GACPpkF,OAAQ,WAEVq/H,GAAY33G,EAAQ,CAClBs9C,OAAQ/vE,EAAE,UACV6Z,OAAQ7Z,EAAE,WAAa,EACvBypF,SAAUnnF,GAAMmnB,EAAKggE,SAAU,GAC/BG,aAAc5pF,EAAE,gBAChB0pF,UAAW1pF,EAAE,aACb2pF,UAAW3pF,EAAE,aACbyF,MAAO,CACL07H,OAAS,mBAAkB13G,EAAK7kB,aAElCgM,UAAW5Q,EAAE,aAEbyP,OAAQga,EAAKha,OACboJ,WAAY4Q,EAAK5Q,aAEZ4Z,EAGT,SAASmoH,GAAYnxH,EAAMivG,EAAOmiB,SAC1B74I,EAAUe,EAAM0mB,EAAKznB,SACrBm1D,EAASp0D,EAAM0mB,EAAK0tC,eAErB0jF,GAAc74I,EAAQa,SAAQ7C,GAAKqrI,GAAYrrI,EAAG04H,KAEvD31H,EAAM0mB,EAAKo8E,aAAahjG,SAAQ7C,GArwElC,SAA0B4lG,EAAM8yB,SACxBnsC,EAASmsC,EAAMnsC,OAAOoT,YAAc,GACpCrsE,EAAS,OAEV,MAAMp1B,KAAQ0nG,EACJ,SAAT1nG,IACJo1B,EAAOp1B,GAAQ0wI,GAAiBhpC,EAAK1nG,GAAOA,EAAMw6H,QAI/C,MAAMx6H,KAAQquF,EACG,MAAhBj5D,EAAOp1B,KACTo1B,EAAOp1B,GAAQ0wI,GAAiBriD,EAAOruF,GAAOA,EAAMw6H,IAIxDA,EAAMoiB,cAAcl1C,EAAK1nG,KAAMo1B,GAqvEMynH,CAAgB/6I,EAAG04H,KAExDvhE,EAAOt0D,SAAQ7C,GApgFjB,SAAmBypB,EAAMivG,SACjB5oH,EAAO2Z,EAAK3Z,MAAQ,SAErBynD,GAAiBznD,IACpB/Q,EAAM,4BAA8B0tB,GAAY3c,IAGlD4oH,EAAMsiB,SAASvxH,EAAKvrB,KAAM,CACxB4R,KAAAA,EACAhM,YAAQsE,IA2/EU6yI,CAAUj7I,EAAG04H,KAEjC31H,EAAM0mB,EAAKgE,MAAM5qB,SAAQ7C,GAAK82I,GAAU92I,EAAG04H,KAE3CvhE,EAAOt0D,SAAQ7C,GAAKktI,GAAWltI,EAAG04H,MAEjCmiB,GAAgB74I,GAASa,SAAQ7C,GAvkFpC,SAA6BmhI,EAAQzI,SAC7BhkG,EAAKgkG,EAAMsF,UAAUmD,EAAOjjI,UAC9B+uC,EAAOk0F,EAAOp2H,OAEdo2H,EAAO9tG,OACL4Z,EACFluC,EAAM,8DAENkuC,EAAOk0F,EAAO9tG,KACdqB,EAAGN,UAAW,IAId6Y,IACFA,EAAO0nF,GAAgB1nF,EAAMyrF,GAC7BhkG,EAAG3pB,OAASkiC,EAAKixF,MACjBxpG,EAAGpB,OAAS2Z,EAAKmxF,SAGf+C,EAAO5lG,IACT4lG,EAAO5lG,GAAG14B,SAAQ7C,GAAK4hI,GAAY5hI,EAAG04H,EAAOhkG,EAAG50B,MAmjFXo7I,CAAmBl7I,EAAG04H,KAE7D31H,EAAM0mB,EAAK0xH,MAAMt4I,SAAQ7C,GAAKy5I,GAAUz5I,EAAG04H,KAE3C31H,EAAM0mB,EAAK07D,OAAOtiF,SAAQ7C,GAAKm0I,GAAUn0I,EAAG04H,KAE5C31H,EAAM0mB,EAAK+iE,SAAS3pF,SAAQ7C,GAAKw1I,GAAYx1I,EAAG04H,KAE5CjvG,EAAK01D,OAAOs3D,GAAWhtH,EAAK01D,MAAOu5C,GAEvCA,EAAM0iB,eACC1iB,EAsBT,SAAS2iB,GAAU5xH,EAAMivG,SACjBnsC,EAASmsC,EAAMnsC,OAEfrhD,EAAO8uF,GAAItB,EAAMxtF,KAAOwtF,EAAM91H,IAAIswH,OAElClxH,EAmER,SAAwBynB,EAAM8iE,SACtBvsF,EAAI9B,GAAQoE,GAAMmnB,EAAKvrB,GAAOquF,EAAOruF,IACrC8D,EAAU,CAACs5I,GAAa,aAAct7I,EAAE,eAAgBs7I,GAAa,WAAYtR,GAAchqI,EAAE,cAAes7I,GAAa,UAAWrR,GAAajqI,EAAE,aAAcs7I,GAAa,QAASt7I,EAAE,UAAY,GAAIs7I,GAAa,SAAUt7I,EAAE,WAAa,IACnPu7I,EAAMv5I,EAAQH,QAAO,CAAC1C,EAAGM,KAAON,EAAEM,EAAEvB,MAAQuB,EAAGN,IAAI,IACnDwD,EAAM,UAGZI,EAAM0mB,EAAKznB,SAASa,SAAQpD,IACtBiI,GAAe6zI,EAAK97I,EAAEvB,MAExBuB,EAAI4H,GAAOk0I,EAAI97I,EAAEvB,MAAOuB,GAGxBuC,EAAQtC,KAAKD,GAGfkD,EAAIlD,EAAEvB,MAAQuB,KAGhBsD,EAAMwpF,EAAOvqF,SAASa,SAAQpD,IACvBiI,GAAe/E,EAAKlD,EAAEvB,OAAUwJ,GAAe6zI,EAAK97I,EAAEvB,OAEzD8D,EAAQtC,KAAKD,MAGVuC,EA5FSw5I,CAAe/xH,EAAM8iE,GACrCvqF,EAAQa,SAAQ7C,GAAKqrI,GAAYrrI,EAAG04H,KAEpCA,EAAM9iD,YAAcnsD,EAAKmsD,aAAe2W,EAAO3W,YAC/C8iD,EAAM6I,YAAch1C,EAAO3Q,OAC3B88C,EAAMlsC,QAAUksC,EAAM+U,eAAelhD,EAAOK,QAAUL,EAAOK,OAAOzqF,QACpEu2H,EAAMnhH,OAASg1E,EAAOh1E,aAEhB/W,EAAQk4H,EAAM91H,IAAI4nC,MAElB/X,EAASimG,EAAM91H,IAAIisF,GAAOi8C,GAlCfrhH,CAAAA,GAAQ4gH,GAAa,CACtCl7C,MAAO,CACLhsF,EAAG,CACDb,MAAO,GAETwR,EAAG,CACDxR,MAAO,IAGXyI,OAAQ,CACN0C,MAAO,CACL0zH,OAAQ,SAEVxiF,OAAQ,CACNwiF,OAAQ,YAGX13G,GAiB2CgyH,CAAWhyH,EAAKgJ,QAAS88G,GAAWjpD,GAAW78D,EAAKk0D,MAAO+6C,EAAO,CAC5GhmG,MAAOsnG,GAAIx5H,OAGP2I,EAASuvH,EAAM91H,IAAIgrF,GAAW,CAClCzrF,OAAQu2H,EAAM+U,eAAehkH,EAAKtnB,QAClCqqF,QAASksC,EAAMlsC,QACfuB,SAAU2qC,EAAMuF,UAAU,YAC1B/1D,KAAMh9B,EACNxY,MAAOsnG,GAAIvnG,MAEbimG,EAAM+H,UAAUxvH,MAEhBynH,EAAMoc,UAAU9a,GAAIvnG,GAASunG,GAAI7wH,GAAS,MAC1CyxI,GAAWnxH,EAAMivG,EAAO12H,GACxB02H,EAAM+H,UAAU/gI,KAAKyJ,OAEjBurB,EAAKgkG,EAAM91H,IAAI4kF,GAAM,CACvBtf,KAAMh9B,EACNxY,MAAOsnG,GAAI7wH,aAEburB,EAAKgkG,EAAM91H,IAAI+lF,GAAO,CACpBj2D,MAAOsnG,GAAItlG,MAEbA,EAAKgkG,EAAM91H,IAAIovC,GAAM,CACnBtf,MAAOsnG,GAAItlG,MAGbgkG,EAAMsc,QAAQ,OAAQ,IAAItB,GAAUhb,EAAOl4H,EAAOA,EAAOk0B,IAClDgkG,EAGT,SAAS4iB,GAAap9I,EAAMoE,UACnBA,GAASA,EAAM6+H,OAAS,CAC7BjjI,KAAAA,EACA6M,OAAQzI,EAAM6+H,QACZ,CACFjjI,KAAAA,EACAoE,MAAAA,GA+CJ,SAASo5I,GAAMnvD,EAAQ3gE,QAChB2gE,OAASA,GAAU,QACnB3gE,QAAUA,GAAW,QACrBq6G,SAAW,QACXtnI,MAAQ,QACRqD,QAAU,QACV25I,QAAU,QACVxkF,OAAS,QACTykB,OAAS,QACTnuD,KAAO,QACPi5E,QAAU,QACVi7B,QAAU,QACVlB,UAAY,QACZc,YAAc,UACdhqH,OAAS,UACTqkI,IAAM,OACNC,OAAS,OACTC,SAAW,CAAC,QACZC,QAAU,QACVC,QAAU,QACVC,QAAU,QACVC,UAAY,GAGnB,SAASC,GAASzjB,QACXnsC,OAASmsC,EAAMnsC,YACf3gE,QAAU8sG,EAAM9sG,aAChB4gE,QAAUksC,EAAMlsC,aAChB7tF,MAAQ6C,OAAO8H,OAAOovH,EAAM/5H,YAC5BqD,QAAUR,OAAO8H,OAAOovH,EAAM12H,cAC9B25I,QAAUn6I,OAAO8H,OAAOovH,EAAMijB,cAC9BxkF,OAAS31D,OAAO8H,OAAOovH,EAAMvhE,aAC7BykB,OAASp6E,OAAO8H,OAAOovH,EAAM98C,aAC7BnuD,KAAOjsB,OAAO8H,OAAOovH,EAAMjrG,WAC3Bi5E,QAAU,QACVi7B,QAAU,QACVlB,UAAY,QACZmb,IAAM,OACNC,SAAWnjB,EAAMojB,SAAS,QAC1BA,SAAWpjB,EAAMojB,cACjBC,QAAUrjB,EAAMqjB,QAAQp7I,aACxBq7I,QAAUtjB,EAAMsjB,QAAQr7I,aACxBs7I,QAAUvjB,EAAMujB,QAAQt7I,aACxBu7I,UAAYxjB,EAAMwjB,UAuWzB,SAASE,GAAe3yH,UACdpoB,EAAQooB,GAAQ4yH,GAAcC,IAAc7yH,GAGtD,SAAS4yH,GAAYt5I,SACb3D,EAAI2D,EAAMvE,WACZ4+F,EAAO,QAEN,IAAIt+F,EAAI,EAAGA,EAAIM,IAAKN,EAAG,OACpBwD,EAAQS,EAAMjE,GACpBs+F,IAASt+F,EAAI,EAAI,IAAM,KAAOyC,EAASe,GAASA,EAAM6+H,QAAUib,GAAe95I,GAASmqB,GAAYnqB,WAG/F86F,EAAO,IAGhB,SAASk/C,GAAa19I,OAGhB8C,EACAY,EAHA86F,EAAO,IACPt+F,EAAI,MAIH4C,KAAO9C,EACV0D,EAAQ1D,EAAI8C,GACZ07F,MAAWt+F,EAAI,EAAI,IAAM,IAAM2tB,GAAY/qB,GAAO,KAAOH,EAASe,GAASA,EAAM6+H,QAAUib,GAAe95I,GAASmqB,GAAYnqB,WAG1H86F,EAAO,IA/XhBs+C,GAAMj0I,UAAY00I,GAAS10I,UAAY,CACrC4E,MAAMod,UACGmxH,GAAWnxH,EAAMxoB,OAG1B+2B,cACS,IAAImkH,GAASl7I,OAGtB2rI,oBACS3rI,KAAK46I,OAAS,GAGvB5G,wBACOxhC,SACE,CACL79B,YAAa30E,KAAK20E,YAClB6qD,UAAWx/H,KAAKw/H,UAChB/5B,QAASzlG,KAAKylG,QACdi7B,QAAS1gI,KAAK0gI,QACdsE,SAAUhlI,KAAKglI,SACf1E,YAAatgI,KAAKsgI,YAClBhqH,OAAQtW,KAAKsW,SAIjBzX,YACUmB,KAAK46I,OAAS56I,KAAK46I,OAAS,IAAM,GAAK56I,KAAK26I,OAGtDh5I,IAAI8xB,eACG+rG,UAAU/gI,KAAKg1B,GACpBA,EAAG50B,GAAKmB,KAAKnB,KAET40B,EAAG+2G,OACL/2G,EAAG+2G,KAAK5oI,SAAQm3H,IACdA,EAAIyF,KAAO/qG,EAAG50B,MAEhB40B,EAAG+2G,KAAO,MAGL/2G,GAGTuwG,MAAMvwG,SACE6nH,EAAO7nH,aAAc82G,GAAQxR,GAAItlG,GAAMA,SACtCzzB,KAAK2B,IAAIqtC,GAAM,CACpB3tC,MAAOi6I,MAIXhQ,UAAUh3G,eACHmxE,QAAQhnG,KAAK61B,GAClBA,EAAOz1B,GAAKmB,KAAKnB,KACVy1B,GAGTu3G,UAAU/hI,eACH42H,QAAQjiI,KAAKqL,GACXA,GAIT0oG,aACMv1G,EAAM41I,MAIL51I,KAFD+C,KAAKiqC,OAAMjqC,KAAKiqC,KAAKA,MAAO,GAEnBjqC,KAAKe,aACXA,QAAQ9D,GAAMijI,OAASjjI,MAIzBA,KAAQ+C,KAAKk2D,YACXA,OAAOj5D,GAAM0G,MAAQ1G,WAInBs+I,EAAS9nH,EAAIx2B,EAAM4R,OACtB2d,EAAMoD,EAEN6D,IACFjH,EAAOiH,EAAGjH,OAASiH,EAAGjH,KAAO,IAC7BoD,EAAOpD,EAAKvvB,KAAUuvB,EAAKvvB,GAAQ,IACnC2yB,EAAKnxB,KAAKoQ,QAIT5R,KAAQ+C,KAAKwsB,KAAM,CACtBqmH,EAAK7yI,KAAKwsB,KAAKvvB,GACfs+I,EAAS1I,EAAGtzI,MAAOtC,EAAM,SACzBs+I,EAAS1I,EAAGzxI,OAAQnE,EAAM,UAC1Bs+I,EAAS1I,EAAG7+H,OAAQ/W,EAAM,cAErB,MAAMS,KAASm1I,EAAG3+H,MACrBqnI,EAAS1I,EAAG3+H,MAAMxW,GAAQT,EAAM,SAAWS,UAIxCsC,MAIT6zI,UAAUriH,EAAQtpB,EAAQm2D,QACnB08E,QAAQt8I,KAAKs6H,GAAI/4H,KAAK2B,IAAIovC,GAAM,CACnCtf,MAAOD,YAGJspH,QAAQr8I,KAAKyJ,QAEb8yI,QAAQv8I,KAAK4/D,EAAS06D,GAAI/4H,KAAKgkI,MAAM3lE,IAAW,WAEhD48E,UAAUx8I,MAAM,IAGvB01I,gBACO4G,QAAQ/qI,WAER8qI,QAAQ9qI,WAERgrI,QAAQhrI,WAERirI,UAAUjrI,OAGjB9H,gBACSrG,EAAK7B,KAAK86I,UAGnBtpH,gBACS3vB,EAAK7B,KAAK+6I,UAGnB18E,gBACSx8D,EAAK7B,KAAKg7I,UAGnBvH,iBACQv1I,EAAI8B,KAAKi7I,kBACN/8I,EAAEA,EAAEX,OAAS,IAIxB6vI,SAAS1vI,EAAOT,MACVoM,GAAS3L,GAAQ,OAAO+sI,GAAW/sI,EAAOT,GAEzCS,EAAMwiI,QACTpiI,EAAM,gCAAkC0tB,GAAY9tB,UAGhDc,EAAId,EAAMwiI,WACZ76H,EAAIrF,KAAKtC,MAAMc,OAEd6G,EAAG,OACAgtB,EAAS,CACbp1B,KAAM+C,KAAKg9H,UAAUx+H,IAEnBvB,IAAMo1B,EAAOsR,GAAK1mC,QACjBS,MAAMc,GAAK6G,EAAI0zH,GAAI/4H,KAAK2B,IAAI0qC,GAAMha,YAGlChtB,GAGTslI,WAAW95G,OACLqvG,GAAS,QAEPsb,EAAQz8I,GAAK+rI,GAAS/rI,IAAMmhI,GAAS,EAAMlgI,KAAKg9H,UAAUj+H,EAAEmhI,SAvlGtE,SAAkBnhI,UACTA,GAAKA,EAAEitC,KAslGiEyvG,CAAS18I,IAAMmhI,GAAS,EAAMlgI,KAAKqyI,QAAQtzI,EAAEitC,OAASjtC,EAE7H/B,EAAS8E,EAAM+uB,EAAInzB,OAAOgE,IAAI85I,GAC9Bx2I,EAASlD,EAAM+uB,EAAIjrB,OAAOlE,IAAI85I,UAC7Btb,EAASnH,GAAI/4H,KAAK2B,IAAI6nC,GAAQ,CACnCxsC,OAAQA,EACRgI,OAAQA,MACH2lI,GAAW3tI,EAAQgI,IAG5BquI,OAAOr2I,EAAQsM,OACT42H,GAAS,QAIPwb,EAAM17I,KAAKe,eACjB/D,EAAS8E,EAAM9E,GAAQ0E,KAHT3C,GAAK+rI,GAAS/rI,IAAMmhI,GAAS,EAAMnH,GAAI2iB,EAAI38I,EAAEmhI,UAAYnhI,IAIhEmhI,EAASnH,GAAI/4H,KAAK2B,IAAIysC,GAAI,CAC/BpxC,OAAQA,EACRsM,KAAMA,MAhoGZ,SAAgBtM,EAAQsM,SAChByvH,EAAM,CACV0F,KAAMzhI,UAEJsM,IAAMyvH,EAAI2F,OAAQ,GACf3F,EA4nGEsa,CAAOr2I,EAAQsM,IAGxBmkI,QAAQ9wH,OACDA,EAAM,OAAOA,QAEZlb,EAAImpI,GAAUjuH,EAAK8W,GAAI9W,EAAKjf,OAC5B8D,EAAImb,EAAK/W,OAhoGD,mBAioGPpE,EAAE0+H,OAASnH,GAAI/4H,KAAK2B,IAAI6nC,GAAQ,CACrCxsC,OAAQyE,EACRuD,OAAQhF,KAAKg9H,UAAUx7H,EAAE0+H,YACpByK,GAAWlpI,EAAGD,IAIvBi0E,MAAM30E,EAAQ+N,SACNpO,EAAMK,EAAS,IAAM+N,MAEtB7O,KAAK26E,OAAOl6E,GAAM,OACf5B,EAAKmB,KAAKnB,UACX4mG,QAAQhnG,KAAK,CAChBI,GAAIA,EACJiC,OAAQA,EACR+N,KAAMA,SAEH8rE,OAAOl6E,GAAO5B,SAGdmB,KAAK26E,OAAOl6E,IAIrBk7I,aAAa1+I,UACJwJ,GAAezG,KAAKe,QAAS9D,IAGtCotI,UAAUptI,EAAMoE,GACVrB,KAAK27I,aAAa1+I,IACpBa,EAAM,0BAA4B0tB,GAAYvuB,UAG1Cw2B,EAAKpyB,aAAiBkpI,GAAQlpI,EAAQrB,KAAK2B,IAAIswH,GAAS5wH,WACvDrB,KAAKe,QAAQ9D,GAAQw2B,GAG9BspG,UAAU9/H,UACH+C,KAAKe,QAAQ9D,IAChBa,EAAM,6BAA+B0tB,GAAYvuB,IAG5C+C,KAAKe,QAAQ9D,IAGtB+/H,UAAUx+H,UACJwB,KAAKe,QAAQvC,GACRu6H,GAAI/4H,KAAKe,QAAQvC,KACdiI,GAAezG,KAAK06I,QAASl8I,UAClCk8I,QAAQl8I,GAAKwB,KAAK2B,IAAIswH,GAAS,QAG/B8G,GAAI/4H,KAAK06I,QAAQl8I,MAG1B27I,qBACQh+C,EAAO57F,OAAO+E,KAAKtF,KAAK06I,aAEzB,IAAI78I,EAAI,EAAGM,EAAIg+F,EAAK5+F,OAAQM,EAAIM,IAAKN,EAAG,OACrCW,EAAI29F,EAAKt+F,GACToI,EAAIytH,GAAgBl1H,EAAGwB,MACvByzB,EAAKzzB,KAAK06I,QAAQl8I,GACxBi1B,EAAGpB,OAASpsB,EAAEk3H,QACd1pG,EAAG3pB,OAAS7D,EAAEg3H,QAIlBr2H,SAAS4hB,UACAA,GAAQA,EAAK03G,OAASlgI,KAAKg9H,UAAUx0G,EAAK03G,QAAU13G,GAG7DgkH,eAAehkH,UACLA,GAASloB,EAASkoB,GAAexoB,KAAKg9H,UAAUx0G,EAAK03G,QAAUib,GAAe3yH,IAApDA,GAGpC6pH,QAAQl2C,EAAMl/F,SACNo1B,EAAS,CACb2Z,KAAM0nF,GAAgBv3B,EAAMn8F,cAE1B/C,IAAMo1B,EAAO2Z,KAAK4yF,MAAQ3hI,GACvB87H,GAAI/4H,KAAK2B,IAAImqC,GAAWzZ,MAGjCi4G,WAAWrtI,EAAMszC,GACVvwC,KAAKglI,UACRlnI,EAAM,0CAA4C0tB,GAAYvuB,SAG3D+nI,SAASvmI,KAAK2H,GAAO,CACxB85H,OAAQjjI,GACPszC,KAILqrG,aAAa3+I,EAAMoS,GACb5I,GAAezG,KAAKk2D,OAAQj5D,IAC9Ba,EAAM,uCAAyC0tB,GAAYvuB,SAGxDi5D,OAAOj5D,GAAQ+C,KAAK2B,IAAI0N,IAG/B0qI,SAAS98I,EAAMo1B,QACRupH,aAAa3+I,EAAMwyF,GAAMp9D,KAGhCwnH,cAAc58I,EAAMo1B,QACbupH,aAAa3+I,EAAMutG,GAAWn4E,KAGrCmmG,SAASv7H,UACF+C,KAAKk2D,OAAOj5D,IACfa,EAAM,4BAA8B0tB,GAAYvuB,IAG3C+C,KAAKk2D,OAAOj5D,IAGrBs7H,SAASt7H,UACA87H,GAAI/4H,KAAKw4H,SAASv7H,KAG3By3I,UAAUz3I,UACD+C,KAAKw4H,SAASv7H,GAAMo1B,OAAOxjB,MAGpCkjI,cAAc90I,UACL+C,KAAKu4H,SAASt7H,IAGvB4+I,eAAe5+I,UACN+C,KAAK00I,UAAUz3I,IAIxB82I,QAAQ92I,EAAM6+I,UACRr1I,GAAezG,KAAKwsB,KAAMvvB,IAC5Ba,EAAM,4BAA8B0tB,GAAYvuB,IAG3C+C,KAAKwsB,KAAKvvB,GAAQ6+I,GAG3BjkB,QAAQ56H,UACD+C,KAAKwsB,KAAKvvB,IACba,EAAM,4BAA8B0tB,GAAYvuB,IAG3C+C,KAAKwsB,KAAKvvB,IAGnBkwI,gBAAgBlwI,EAAMovF,UAChB5lF,GAAezG,KAAKwsB,KAAMvvB,IAC5Ba,EAAM,4BAA8B0tB,GAAYvuB,IAG3C+C,KAAK+zI,QAAQ92I,EAAMw1I,GAAU8C,YAAYv1I,KAAMqsF,SC/pHxDlxD,GACA6wD,GAAI+vD,GAAKvqH,GAAQwqH,GAAKjqH,GAAO8rD,GAAO8tB,GAAMswC,GAAKx0B,GAASy0B,GAAWC,UAMxDC,GAAUC,6GtRiGT,UAHE,+EAEH,wFAHA,yPAEA,+1CqR6zHb,SAAgB7zH,EAAM8iE,EAAQ3gE,UACvBrqB,EAASkoB,IACZ1qB,EAAM,+CAIDs8I,GAAU5xH,EAAM,IAAIiyH,GAD3BnvD,EAAS5qF,EAjOX,iBACQ47I,EAAc,aAGdC,EAAe,UACf58F,EAAQ,OACR8C,EAAO,OACP+5F,EAAY,aACX,CAEL7nE,YAAa,qBAEbx8D,QAAS,EAGT20E,SAAU,MAGV1c,WAAY,KAGZuK,OAAQ,CACNgqD,SAAU,CACRkC,MAAO,CAAC,WAMZlwH,MAAO,KAGPswD,KAAM,KACNn3D,IAAK,CACH8F,KAAM2mI,GAERljG,KAAM,CACJzjC,KAAM2mI,GAER3wE,MAAO,KACPz7D,KAAM,CACJw3D,OAAQ40E,EACRz0E,YAvCuB,GAyCzBxqE,KAAM,CACJqqE,OAAQ40E,GAEVrmG,KAAM,CACJtgC,KAAM2mI,GAER5qE,KAAM,CACJhK,OAAQhoB,GAEVymB,MAAO,CACLuB,OAAQ40E,GAEV1mI,OAAQ,CACND,KAAM2mI,EACNt1I,KAAM,IAER4G,KAAM,CACJ+H,KAAM+pC,EACN4yB,KAAM+pE,EACNxqE,SAAU,IAEZ1N,MAAO,CACLxuD,KAAM2mI,EACNt1I,KAhEuB,GAmEzBy1E,MAAO,eAEU,CACb9mE,KAAM+pC,EACN4yB,KAAM+pE,EACNxqE,SAAU,kBAGG,CACbl8D,KAAM+pC,EACN4yB,KAAM+pE,EACNxqE,SAAU,GACVuB,WAAY,sBAGC,CACbz9D,KAAM+pC,EACN4yB,KAAM+pE,EACNxqE,SAAU,GACVuB,WAAY,yBAGI,CAChBz9D,KAAM+pC,EACN4yB,KAAM+pE,EACNxqE,SAAU,IAGZ5hE,MAAO,CACLjJ,KAjGoB,GAkGpB6gE,YAjGqB,EAkGrB1B,MAAO,UAETF,OAAQ,CACNj/D,KAtGoB,GAuGpB6gE,YAtGqB,GAwGvB20E,OAAQ,CACNx1I,KA1GoB,GA2GpB6gE,YA1GqB,EA2GrB1B,MAAO,UAGTriC,KAAM,CACJnuB,KAAM,cACN+xD,OAAQ60E,IAIZt+D,MAAO,CACLpP,OAAQ,MACRprE,OAAQ,SACRkV,OAAQ,EACR8jI,gBAAiB,GAGnBv0D,KAAM,CACJM,UAAW,EACXC,UAAW,IACXi0D,aAAc,GACd95I,QAAQ,EACR+5I,YAAa,EACbC,YAAap6F,EACb4lC,MAAM,EACNy0D,UAAW,EACXC,UAAWP,EACXl0D,QAAQ,EACR00D,WAAY,EACZ/M,WAAY,IACZE,YAAa,EACb8M,aAAc,EACd5pI,OAAO,EACP6pI,UAAWz6F,EACX06F,WAAY,EACZC,WAAW,EACXpF,SAAU,EACVqF,UAAW,EACX10D,aAAc,GAGhB+vD,SAAU,CACRyE,YAAa,IAGfz+C,WAAY,CACV7vF,KAAM,YAGR88E,OAAQ,CACN7c,OAAQ,QACR32D,QAAS,EACTmlI,UAAW,OACXC,cAAe,GACfC,WAAY,EACZ5O,gBAAiB,WACjBC,kBAAmB,WACnBC,eAAgB,IAChBE,kBAAmB,GACnByO,oBAAqBjB,EACrBkB,oBAAqB,EACrBtN,oBAAqB,EACrByH,WAAY,OACZC,cAAe,SACf7H,WAAY,IACZE,YAAa,EACbwN,cAAc,EACdC,YAAa,GACbC,WAAY,SACZC,WAAY,IACZxN,aAAc,EACdyN,kBAAmB,IACnBnN,oBAAqB,cACrBC,sBAAuBpuF,EACvBu7F,WAAY,IACZC,YAAa,MACbt1D,aAAc,EACdznF,OAAQ,CACN0X,OAAQ,GACRyiF,UAAW,aACX1zF,KAAM,CACJ0zF,UAAW,YAEbzzF,MAAO,CACLyzF,UAAW,cAKjB72F,MAAO,CACL05I,SAAU,CACRlmF,OAAQ,aAEV5Z,QAAS,CACP4Z,OAAQ,SAEVmmF,QAAS,CACPnmF,OAAQ,mBAEVomF,KAAM,CACJpmF,OAAQ,SAEVhB,UAAW,CACTgB,OAAQ,aACR3xD,OAAQ,CAAC,EAAG,IAEdwP,OAAQ,CAAC,SAAU,SAAU,cAAe,QAAS,UAAW,iBAAkB,gBAAiB,mBAUlF8uH,GAAYr5C,EAAQ9iE,EAAK8iE,QACL3gE,IAAUqpH,8V1NvuHrD,SAAkBvvI,EAAKC,OAMjBjD,EAAGlD,EAAG2T,EALC,MAAPxN,IACFA,EAAMD,EACNA,EAAM,SAIFk5B,EAAO,CACXl5B,IAAI1F,UACEgB,UAAUxC,QACZkE,EAAI1C,GAAK,EACTmT,EAAI3T,EAAIkD,EACDk8B,GAEAl8B,GAIXiD,IAAI3F,UACEgB,UAAUxC,QACZgB,EAAIQ,GAAK,EACTmT,EAAI3T,EAAIkD,EACDk8B,GAEAp/B,GAIXq/B,OAAM,IACGn8B,EAAIU,KAAKwR,MAAMzB,EAAIsqB,YAG5BqB,IAAI37B,GACKA,IAAMC,KAAKwR,MAAMzR,IAAMA,GAAKT,GAAKS,EAAI3D,EAAI,EAAI2T,EAAI,EAG1D4rB,IAAI57B,SACIuD,EAAItD,KAAKwR,MAAMzR,UACduD,EAAIhE,EAAI,EAAIgE,GAAKlH,EAAI,GAAKkH,EAAIhE,EAAI,GAAKyQ,GAGhD6rB,KAAK7/B,GACIA,GAAK,GAAKA,GAAK,EAAIuD,EAAI,EAAIU,KAAKwR,MAAMzV,EAAIgU,GAAKF,YAInD2rB,EAAKl5B,IAAIA,GAAKC,IAAIA,+BAvD3B,SAAc25I,UAGL,kBACLA,GAAQ,WAAaA,EAAO,OAAS,YACvB,mSHHlB,kBACE90H,KACAK,KACOO,2CoFm2JT,WACEq8C,KA1iKA3I,GAAc,kRjFkGhB,SAAmB58D,GACjBu7B,SAASv7B"} \ No newline at end of file diff --git a/src/citationnet/static/vegaLiteSpec.json b/src/citationnet/static/vegaLiteSpec.json new file mode 100644 index 0000000..157b12a --- /dev/null +++ b/src/citationnet/static/vegaLiteSpec.json @@ -0,0 +1,200 @@ +{ + "$schema": "https://vega.github.io/schema/vega-lite/v5.json", + "description": "A simple pie chart with labels.", + "data": { + "values": [ + { + "category": "", + "value": 0.060824742268041236, + "start": 0, + "end": 0.060824742268041236, + "amount": 236 + }, + { + "category": "01 Mathematical Sciences", + "value": 0.03221649484536082, + "start": 0.060824742268041236, + "end": 0.09304123711340206, + "amount": 125 + }, + { + "category": "02 Physical Sciences", + "value": 0.3059278350515464, + "start": 0.09304123711340206, + "end": 0.3989690721649485, + "amount": 1187 + }, + { + "category": "03 Chemical Sciences", + "value": 0.22371134020618558, + "start": 0.3989690721649485, + "end": 0.622680412371134, + "amount": 868 + }, + { + "category": "04 Earth Sciences", + "value": 0.003092783505154639, + "start": 0.622680412371134, + "end": 0.6257731958762887, + "amount": 12 + }, + { + "category": "05 Environmental Sciences", + "value": 0.0002577319587628866, + "start": 0.6257731958762887, + "end": 0.6260309278350515, + "amount": 1 + }, + { + "category": "06 Biological Sciences", + "value": 0.1806701030927835, + "start": 0.6260309278350515, + "end": 0.8067010309278351, + "amount": 701 + }, + { + "category": "07 Agricultural and Veterinary Sciences", + "value": 0.0005154639175257732, + "start": 0.8067010309278351, + "end": 0.8072164948453608, + "amount": 2 + }, + { + "category": "08 Information and Computing Sciences", + "value": 0.014175257731958763, + "start": 0.8072164948453608, + "end": 0.8213917525773196, + "amount": 55 + }, + { + "category": "09 Engineering", + "value": 0.1056701030927835, + "start": 0.8213917525773196, + "end": 0.927061855670103, + "amount": 410 + }, + { + "category": "10 Technology", + "value": 0.0059278350515463915, + "start": 0.927061855670103, + "end": 0.9329896907216494, + "amount": 23 + }, + { + "category": "11 Medical and Health Sciences", + "value": 0.06391752577319587, + "start": 0.9329896907216494, + "end": 0.9969072164948453, + "amount": 248 + }, + { + "category": "12 Built Environment and Design", + "value": 0, + "start": 0.9969072164948453, + "end": 0.9969072164948453, + "amount": 0 + }, + { + "category": "13 Education", + "value": 0.0010309278350515464, + "start": 0.9969072164948453, + "end": 0.9979381443298968, + "amount": 4 + }, + { + "category": "14 Economics", + "value": 0.0002577319587628866, + "start": 0.9979381443298968, + "end": 0.9981958762886597, + "amount": 1 + }, + { + "category": "15 Commerce, Management, Tourism and Services", + "value": 0, + "start": 0.9981958762886597, + "end": 0.9981958762886597, + "amount": 0 + }, + { + "category": "16 Studies in Human Society", + "value": 0, + "start": 0.9981958762886597, + "end": 0.9981958762886597, + "amount": 0 + }, + { + "category": "17 Psychology and Cognitive Sciences", + "value": 0.0005154639175257732, + "start": 0.9981958762886597, + "end": 0.9987113402061855, + "amount": 2 + }, + { + "category": "18 Law and Legal Studies", + "value": 0.0002577319587628866, + "start": 0.9987113402061855, + "end": 0.9989690721649483, + "amount": 1 + }, + { + "category": "19 Studies in Creative Arts and Writing", + "value": 0, + "start": 0.9989690721649483, + "end": 0.9989690721649483, + "amount": 0 + }, + { + "category": "20 Language, Communication and Culture", + "value": 0.0002577319587628866, + "start": 0.9989690721649483, + "end": 0.9992268041237112, + "amount": 1 + }, + { + "category": "21 History and Archaeology", + "value": 0.0007731958762886598, + "start": 0.9992268041237112, + "end": 0.9999999999999999, + "amount": 3 + }, + { + "category": "22 Philosophy and Religious Studies", + "value": 0, + "start": 0.9999999999999999, + "end": 0.9999999999999999, + "amount": 0 + } + ] + }, + "encoding": { + "theta": { "field": "amount", "type": "quantitative", "stack": true }, + "color": { "field": "category", "type": "nominal", "legend": null }, + "tooltip": [ + { "field": "category", "type": "nominal", "title": "Category (FOR)" }, + { "field": "value", "type": "quantitative", "format": ".1p", "title": "Share of publications"}, + { "field": "amount", "type": "quantitative", "title": "Number of publications"} + ] + }, + "layer": [ + { + "mark": { + "type": "arc", + "outerRadius": 200 + } + }, + { + "mark": { "type": "text", "radius": 215 }, + "encoding": { + "text": { + "field": "value", + "type": "quantitative", + "format": ".1p", + "condition": { + "test": "datum['value'] < 0.01", "value":"" + } + } + } + } + ], + "background": null +} diff --git a/src/citationnet/templates/404.html b/src/citationnet/templates/404.html new file mode 100644 index 0000000..3326c35 --- /dev/null +++ b/src/citationnet/templates/404.html @@ -0,0 +1,4 @@ +{% extends 'base.html' %} +{% block content %} +Not found. +{% endblock %} diff --git a/src/citationnet/templates/testing.html b/src/citationnet/templates/testing.html new file mode 100644 index 0000000..d5e7a54 --- /dev/null +++ b/src/citationnet/templates/testing.html @@ -0,0 +1,9 @@ +{% extends 'base.html' %} +{% block content %} + +Tested , see console log. +{% endblock %} diff --git a/src/citationnet/templates/visDynamic.html b/src/citationnet/templates/visDynamic.html index 2fcd789..6c1e368 100644 --- a/src/citationnet/templates/visDynamic.html +++ b/src/citationnet/templates/visDynamic.html @@ -83,8 +83,8 @@ From f9933ac84b407499a77739e9bc69e2543282e41c Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 18 Mar 2022 15:06:56 +0100 Subject: [PATCH 06/23] wip add startpage, autocomplete --- src/citationnet/__init__.py | 31 +- .../10_dot_1038_slash_s41598-020-76916-3.json | 20662 ++++++++++++++++ src/citationnet/static/autocomplete.css | 49 + src/citationnet/static/autocomplete.js | 96 + src/citationnet/templates/base.html | 28 +- src/citationnet/templates/startpage.html | 132 + 6 files changed, 20974 insertions(+), 24 deletions(-) create mode 100644 src/citationnet/media/data/10_dot_1038_slash_s41598-020-76916-3.json create mode 100644 src/citationnet/static/autocomplete.css create mode 100644 src/citationnet/static/autocomplete.js create mode 100644 src/citationnet/templates/startpage.html diff --git a/src/citationnet/__init__.py b/src/citationnet/__init__.py index a63b09f..8d96cad 100644 --- a/src/citationnet/__init__.py +++ b/src/citationnet/__init__.py @@ -1,6 +1,6 @@ import os import json -from flask import Flask, render_template +from flask import Flask, render_template, request mainpath = os.path.dirname(os.path.abspath(__file__)) datapath = os.path.join(mainpath, 'media', 'data') @@ -35,32 +35,29 @@ def create_app(test_config=None): pass # a simple page that says hello - @app.route('/') - def hello(): - return 'Startpage!' + @app.route('/', methods=['POST', 'GET']) + def startpage(): + if request.method == "GET": + files = [x for x in os.listdir(datapath) if x.endswith('.json')] + return render_template('startpage.html', availablefiles=files) - @app.route('/citationnet/') - @app.route('/citationnet/') - def citnet(name=None): - if name is None: + @app.route('/citationnet/', methods=['POST', 'GET']) + def citnet(filename=None): + filename = request.args.get('filename') + if filename is None: return render_template('404.html') else: try: - with open(f'{os.path.join(datapath, name)}', 'r') as jsonfile: + with open(f'{os.path.join(datapath, filename)}', 'r') as jsonfile: data = json.load(jsonfile) return render_template('visDynamic.html', jsondata=data) except Exception as e: raise e - @app.route('/simple/') - def simple(): - data = {"name": "Malte", "city": "Berlin"} - return render_template('testing.html', jsondata=data) - @app.route('/testjson/') - @app.route('/testjson/') - def testjson(name=None): - with open(f'{os.path.join(datapath, name)}') as jsonfile: + @app.route('/testjson/') + def testjson(filename=None): + with open(f'{os.path.join(datapath, filename)}') as jsonfile: data = json.load(jsonfile) return render_template('testing.html', jsondata=data) diff --git a/src/citationnet/media/data/10_dot_1038_slash_s41598-020-76916-3.json b/src/citationnet/media/data/10_dot_1038_slash_s41598-020-76916-3.json new file mode 100644 index 0000000..b4d6fbd --- /dev/null +++ b/src/citationnet/media/data/10_dot_1038_slash_s41598-020-76916-3.json @@ -0,0 +1,20662 @@ +{ + "nodes": [ + { + "id": "pub.1132583197", + "attributes": { + "title": "Evolution and transformation of early modern cosmological knowledge: a network study", + "doi": "10.1038/s41598-020-76916-3", + "nodeyear": 2020, + "ref-by-count": 5, + "is_input_DOI": true, + "category_for": "20:0.50;21:0.50", + "level": "ref_l1" + } + }, + { + "id": "pub.1144653732", + "attributes": { + "title": "Efficiently Predicting Scientific Trends Using Node Centrality Measures of a Science Semantic Network", + "doi": "10.1109/bigdata52589.2021.9671671", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1143646657", + "attributes": { + "title": "CIDOC2VEC: Extracting Information from Atomized CIDOC-CRM Humanities Knowledge Graphs", + "doi": "10.3390/info12120503", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1140975203", + "attributes": { + "title": "Anomalous diffusion in the citation time series of scientific publications", + "doi": "10.1088/2632-072x/ac24f1", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1140004048", + "attributes": { + "title": "Inflating the social aspects of cognitive structural realism", + "doi": "10.1007/s13194-021-00401-5", + "nodeyear": 2021, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1136412272", + "attributes": { + "title": "Earth Scientists and Sustainable Development: Geocomputing, New Technologies, and the Humanities", + "doi": "10.3390/land10030294", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "05:1.00", + "level": "cite_l1" + } + }, + { + "id": "pub.1144045349", + "attributes": { + "title": "A tale of two architectures free energy, its models, and modularity", + "doi": "10.1016/j.concog.2021.103257", + "nodeyear": 2021, + "ref-by-count": 0, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "cite_l2" + } + }, + { + "id": "pub.1130512107", + "attributes": { + "title": "Building and Interpreting Deep Similarity Models", + "doi": "10.1109/tpami.2020.3020738", + "nodeyear": 2022, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1129497800", + "attributes": { + "title": "The evolution of knowledge within and across fields in modern physics", + "doi": "10.1038/s41598-020-68774-w", + "nodeyear": 2020, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1124288141", + "attributes": { + "title": "Sacrobosco\u2019s Sphaera in Spain and Portugal", + "doi": "10.1007/978-3-030-30833-9_7", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1124282631", + "attributes": { + "title": "Oronce Fine and Sacrobosco: From the Edition of the Tractatus de sphaera (1516) to the Cosmographia (1532)", + "doi": "10.1007/978-3-030-30833-9_8", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "20:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1124279796", + "attributes": { + "title": "Borrowers and Innovators in the History of Printing Sacrobosco: The Case of the In-Octavo Tradition", + "doi": "10.1007/978-3-030-30833-9_9", + "nodeyear": 2020, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "20:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1122325358", + "attributes": { + "title": "Nature\u2019s reach: narrow work has broad impact", + "doi": "10.1038/d41586-019-03308-7", + "nodeyear": 2019, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l2" + } + }, + { + "id": "pub.1112085796", + "attributes": { + "title": "Large teams develop and small teams disrupt science and technology", + "doi": "10.1038/s41586-019-0941-9", + "nodeyear": 2019, + "ref-by-count": 208, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1110510902", + "attributes": { + "title": "The chaperone effect in scientific publishing", + "doi": "10.1073/pnas.1800471115", + "nodeyear": 2018, + "ref-by-count": 41, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1107586783", + "attributes": { + "title": "Johannes de Sacrobosco und die Sphaera-Tradition in der katholischen Zensur der Fr\u00fchen Neuzeit", + "doi": "10.1007/s00048-018-0199-6", + "nodeyear": 2018, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "20:0.50;21:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1101303008", + "attributes": { + "title": "Science of science", + "doi": "10.1126/science.aao0185", + "nodeyear": 2018, + "ref-by-count": 422, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1100639791", + "attributes": { + "title": "Network Dynamics of Innovation Processes", + "doi": "10.1103/physrevlett.120.048301", + "nodeyear": 2018, + "ref-by-count": 64, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1064718099", + "attributes": { + "title": "A Dynamic Network Measure of Technological Change", + "doi": "10.1287/mnsc.2015.2366", + "nodeyear": 2017, + "ref-by-count": 77, + "is_input_DOI": false, + "category_for": "08:0.50;15:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1083908211", + "attributes": { + "title": "The Tracts on the Sphere: Knowledge Restructured Over a Network", + "doi": "10.1007/978-3-319-45671-3_16", + "nodeyear": 2017, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "20:0.50;21:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1042348951", + "attributes": { + "title": "Sleeping Beauties and their princes in innovation studies", + "doi": "10.1007/s11192-016-2186-9", + "nodeyear": 2016, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1009235779", + "attributes": { + "title": "Innovation network", + "doi": "10.1073/pnas.1613559113", + "nodeyear": 2016, + "ref-by-count": 89, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1007733558", + "attributes": { + "title": "A century of physics", + "doi": "10.1038/nphys3494", + "nodeyear": 2015, + "ref-by-count": 96, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1047813258", + "attributes": { + "title": "Defining and identifying Sleeping Beauties in science", + "doi": "10.1073/pnas.1424329112", + "nodeyear": 2015, + "ref-by-count": 221, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1031558328", + "attributes": { + "title": "MuxViz: a tool for multilayer analysis and visualization of networks", + "doi": "10.1093/comnet/cnu038", + "nodeyear": 2014, + "ref-by-count": 219, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1052415395", + "attributes": { + "title": "Inheritance Patterns in Citation Networks Reveal Scientific Memes", + "doi": "10.1103/physrevx.4.041036", + "nodeyear": 2014, + "ref-by-count": 90, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1032371564", + "attributes": { + "title": "Career on the Move: Geography, Stratification, and Scientific Impact", + "doi": "10.1038/srep04770", + "nodeyear": 2014, + "ref-by-count": 104, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1028974017", + "attributes": { + "title": "Atypical Combinations and Scientific Impact", + "doi": "10.1126/science.1240474", + "nodeyear": 2013, + "ref-by-count": 556, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1042700127", + "attributes": { + "title": "Quantifying Long-Term Scientific Impact", + "doi": "10.1126/science.1237825", + "nodeyear": 2013, + "ref-by-count": 452, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1032520587", + "attributes": { + "title": "The network takeover", + "doi": "10.1038/nphys2188", + "nodeyear": 2011, + "ref-by-count": 335, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1052825223", + "attributes": { + "title": "Community structure of the physical review citation network", + "doi": "10.1016/j.joi.2010.01.001", + "nodeyear": 2010, + "ref-by-count": 115, + "is_input_DOI": false, + "category_for": "01:0.50;08:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1014738746", + "attributes": { + "title": "The impact of national cultures on structured knowledge transfer", + "doi": "10.1108/13673271011032373", + "nodeyear": 2010, + "ref-by-count": 62, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1026085167", + "attributes": { + "title": "Modeling a century of citation distributions", + "doi": "10.1016/j.joi.2009.03.010", + "nodeyear": 2009, + "ref-by-count": 98, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1061936767", + "attributes": { + "title": "The Burden of Knowledge and the \u201cDeath of the Renaissance Man\u201d: Is Innovation Getting Harder?", + "doi": "10.1111/j.1467-937x.2008.00531.x", + "nodeyear": 2009, + "ref-by-count": 415, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1037912856", + "attributes": { + "title": "Fast unfolding of communities in large networks", + "doi": "10.1088/1742-5468/2008/10/p10008", + "nodeyear": 2008, + "ref-by-count": 9736, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1025882695", + "attributes": { + "title": "Community Structure in Directed Networks", + "doi": "10.1103/physrevlett.100.118703", + "nodeyear": 2008, + "ref-by-count": 645, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l2" + } + }, + { + "id": "pub.1050150347", + "attributes": { + "title": "The Structure of a Social Science Collaboration Network: Disciplinary Cohesion from 1963 to 1999", + "doi": "10.1177/000312240406900204", + "nodeyear": 2004, + "ref-by-count": 602, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l2" + } + }, + { + "id": "pub.1032191939", + "attributes": { + "title": "Sleeping Beauties in science", + "doi": "10.1023/b:scie.0000018543.82441.f1", + "nodeyear": 2004, + "ref-by-count": 333, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l2" + } + }, + { + "id": "pub.1123982241", + "attributes": { + "title": "Towards explaining anomalies: A deep Taylor decomposition of one-class models", + "doi": "10.1016/j.patcog.2020.107198", + "nodeyear": 2020, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1124284322", + "attributes": { + "title": "Prolegomena to the Study of Early Modern Commentators on Johannes de Sacrobosco\u2019s Tractatus de sphaera", + "doi": "10.1007/978-3-030-30833-9_1", + "nodeyear": 2020, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1124283317", + "attributes": { + "title": "De sphaera of Johannes de Sacrobosco in the Early Modern Period, The Authors of the Commentaries", + "doi": "10.1007/978-3-030-30833-9", + "nodeyear": 2020, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "20:0.50;21:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1122369286", + "attributes": { + "title": "Mapping the physics research space: a machine learning approach", + "doi": "10.1140/epjds/s13688-019-0210-z", + "nodeyear": 2019, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1121796142", + "attributes": { + "title": "Efficient team structures in an open-ended cooperative creativity experiment", + "doi": "10.1073/pnas.1909827116", + "nodeyear": 2019, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1120935852", + "attributes": { + "title": "Layer-Wise Relevance Propagation: An Overview", + "doi": "10.1007/978-3-030-28954-6_10", + "nodeyear": 2019, + "ref-by-count": 120, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1117495993", + "attributes": { + "title": "Exploring the role of interdisciplinarity in physics: Success, talent and luck", + "doi": "10.1371/journal.pone.0218793", + "nodeyear": 2019, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1114191903", + "attributes": { + "title": "Taddeo Alderotti and His Pupils", + "doi": "10.1515/9780691198163", + "nodeyear": 2019, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1112676463", + "attributes": { + "title": "Unmasking Clever Hans predictors and assessing what machines really learn", + "doi": "10.1038/s41467-019-08987-4", + "nodeyear": 2019, + "ref-by-count": 294, + "is_input_DOI": false, + "category_for": "08:0.50;17:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1110786519", + "attributes": { + "title": "Taking census of physics", + "doi": "10.1038/s42254-018-0005-3", + "nodeyear": 2019, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1110929190", + "attributes": { + "title": "Double-slit photoelectron interference in strong-field ionization of the neon dimer", + "doi": "10.1038/s41467-018-07882-8", + "nodeyear": 2019, + "ref-by-count": 4827, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1110769813", + "attributes": { + "title": "The Whole Is More Than Its Parts? From Explicit to Implicit Pose Normalization", + "doi": "10.1109/tpami.2018.2885764", + "nodeyear": 2018, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1110510905", + "attributes": { + "title": "Changing demographics of scientific careers: The rise of the temporary workforce", + "doi": "10.1073/pnas.1800478115", + "nodeyear": 2018, + "ref-by-count": 56, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1107264104", + "attributes": { + "title": "The mythos of model interpretability", + "doi": "10.1145/3233231", + "nodeyear": 2018, + "ref-by-count": 237, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1107093993", + "attributes": { + "title": "Towards exact molecular dynamics simulations with machine-learned force fields", + "doi": "10.1038/s41467-018-06169-2", + "nodeyear": 2018, + "ref-by-count": 242, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1103390011", + "attributes": { + "title": "Deep Transfer Learning for Image\u2010Based Structural Damage Recognition", + "doi": "10.1111/mice.12363", + "nodeyear": 2018, + "ref-by-count": 242, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1103337729", + "attributes": { + "title": "Attesting similarity: Supporting the organization and study of art image collections with computer vision", + "doi": "10.1093/llc/fqy006", + "nodeyear": 2018, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "08:0.33;17:0.33;20:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1101503768", + "attributes": { + "title": "Measuring discursive influence across scholarship", + "doi": "10.1073/pnas.1719792115", + "nodeyear": 2018, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1104408670", + "attributes": { + "title": "Disciplining History", + "doi": "10.4324/9781315577456", + "nodeyear": 2018, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1092345755", + "attributes": { + "title": "Methods for interpreting and understanding deep neural networks", + "doi": "10.1016/j.dsp.2017.10.011", + "nodeyear": 2018, + "ref-by-count": 787, + "is_input_DOI": false, + "category_for": "09:0.60;10:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1093156821", + "attributes": { + "title": "Serendipity and strategy in rapid innovation", + "doi": "10.1038/s41467-017-02042-w", + "nodeyear": 2017, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1091415811", + "attributes": { + "title": "Knowledge acquisition: A Complex networks approach", + "doi": "10.1016/j.ins.2017.08.091", + "nodeyear": 2017, + "ref-by-count": 44, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1100687299", + "attributes": { + "title": "DeepDeSRT: Deep Learning for Detection and Structure Recognition of Tables in Document Images", + "doi": "10.1109/icdar.2017.192", + "nodeyear": 2017, + "ref-by-count": 111, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1092413494", + "attributes": { + "title": "The science of science: From the perspective of complex systems", + "doi": "10.1016/j.physrep.2017.10.001", + "nodeyear": 2017, + "ref-by-count": 163, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1092249264", + "attributes": { + "title": "The misleading narrative of the canonical faculty productivity trajectory", + "doi": "10.1073/pnas.1702121114", + "nodeyear": 2017, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1092034214", + "attributes": { + "title": "Scientists have most impact when they're free to move", + "doi": "10.1038/550029a", + "nodeyear": 2017, + "ref-by-count": 83, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1092056081", + "attributes": { + "title": "Betweenness and diversity in journal citation networks as measures of interdisciplinarity\u2014A tribute to Eugene Garfield", + "doi": "10.1007/s11192-017-2528-2", + "nodeyear": 2017, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1100557630", + "attributes": { + "title": "Understanding and Comparing Deep Neural Networks for Age and Gender Classification", + "doi": "10.1109/iccvw.2017.191", + "nodeyear": 2017, + "ref-by-count": 58, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1100060663", + "attributes": { + "title": "Grad-CAM: Visual Explanations from Deep Networks Via Gradient-Based Localization", + "doi": "10.1109/iccv.2017.74", + "nodeyear": 2017, + "ref-by-count": 3691, + "is_input_DOI": false, + "category_for": "08:0.50;17:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1095932354", + "attributes": { + "title": "Complex Networks", + "doi": "10.1017/9781316216002", + "nodeyear": 2017, + "ref-by-count": 148, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1109723985", + "attributes": { + "title": "Translating Early Modern Science", + "doi": "10.1163/9789004349261", + "nodeyear": 2017, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1091623705", + "attributes": { + "title": "Mechanisms of self-organized criticality in social processes of knowledge creation", + "doi": "10.1103/physreve.96.032307", + "nodeyear": 2017, + "ref-by-count": 26, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1100902684", + "attributes": { + "title": "CorpusTracer: A CIDOC database for tracing knowledge networks", + "doi": "10.1093/llc/fqx047", + "nodeyear": 2017, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1090904008", + "attributes": { + "title": "A survey on deep learning in medical image analysis", + "doi": "10.1016/j.media.2017.07.005", + "nodeyear": 2017, + "ref-by-count": 5062, + "is_input_DOI": false, + "category_for": "09:0.50;11:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1107891239", + "attributes": { + "title": "Human and Animal Cognition in Early Modern Philosophy and Medicine", + "doi": "10.2307/j.ctv75d92h", + "nodeyear": 2017, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1090602399", + "attributes": { + "title": "Significance and popularity in music production", + "doi": "10.1098/rsos.170433", + "nodeyear": 2017, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "19:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1086129753", + "attributes": { + "title": "Astrology in court: The Spanish Inquisition, authority, and expertise", + "doi": "10.1177/0073275317710537", + "nodeyear": 2017, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1085929133", + "attributes": { + "title": "Waves of novelties in the expansion into the adjacent possible", + "doi": "10.1371/journal.pone.0179303", + "nodeyear": 2017, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1090393495", + "attributes": { + "title": "Iberian science: Reflections and studies", + "doi": "10.1177/0073275317701146", + "nodeyear": 2017, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1085347349", + "attributes": { + "title": "The Beneficial Role of Mobility for the Emergence of Innovation", + "doi": "10.1038/s41598-017-01955-2", + "nodeyear": 2017, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1085179433", + "attributes": { + "title": "Machine learning of accurate energy-conserving molecular force fields", + "doi": "10.1126/sciadv.1603015", + "nodeyear": 2017, + "ref-by-count": 425, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1036446674", + "attributes": { + "title": "Explaining nonlinear classification decisions with deep Taylor decomposition", + "doi": "10.1016/j.patcog.2016.11.008", + "nodeyear": 2017, + "ref-by-count": 426, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1084954466", + "attributes": { + "title": "The nearly universal link between the age of past knowledge and tomorrow\u2019s breakthroughs in science and technology: The hotspot", + "doi": "10.1126/sciadv.1601315", + "nodeyear": 2017, + "ref-by-count": 59, + "is_input_DOI": false, + "category_for": "20:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1084844428", + "attributes": { + "title": "Quantifying the negative impact of brain drain on the integration of European science", + "doi": "10.1126/sciadv.1602232", + "nodeyear": 2017, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1086033332", + "attributes": { + "title": "Neural Collaborative Filtering", + "doi": "10.1145/3038912.3052569", + "nodeyear": 2017, + "ref-by-count": 1742, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1084130197", + "attributes": { + "title": "Quantifying patterns of research-interest evolution", + "doi": "10.1038/s41562-017-0078", + "nodeyear": 2017, + "ref-by-count": 60, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1083883842", + "attributes": { + "title": "Utilitas astronomiae in the Renaissance: The Rhetoric and Epistemology of Astronomy", + "doi": "10.1007/978-3-319-45671-3_12", + "nodeyear": 2017, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "20:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1083871068", + "attributes": { + "title": "Incunable Almanacs and Practica as Practical Knowledge Produced in Trading Zones", + "doi": "10.1007/978-3-319-45671-3_13", + "nodeyear": 2017, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "20:0.50;21:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1083524092", + "attributes": { + "title": "Data-driven predictions in the science of science", + "doi": "10.1126/science.aal4217", + "nodeyear": 2017, + "ref-by-count": 94, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1083523048", + "attributes": { + "title": "Search strategies of Wikipedia readers", + "doi": "10.1371/journal.pone.0170746", + "nodeyear": 2017, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1100543464", + "attributes": { + "title": "The Jesuit Paradox: Intellectual Authority, Political Power, and the Marginalization of Astrology in Early Modern Portugal ", + "doi": "10.1163/15733823-02256p03", + "nodeyear": 2017, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1100543463", + "attributes": { + "title": "From Intense Teaching to Neglect: The Decline of Astrology at the University of Valencia and the Role of the Spanish Novatores ", + "doi": "10.1163/15733823-02256p02", + "nodeyear": 2017, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1100543462", + "attributes": { + "title": "The Marginalization of Astrology: Introduction ", + "doi": "10.1163/15733823-02256p01", + "nodeyear": 2017, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1084164696", + "attributes": { + "title": "How semantic memory structure and intelligence contribute to creative thought: a network science approach", + "doi": "10.1080/13546783.2016.1278034", + "nodeyear": 2017, + "ref-by-count": 81, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1121359531", + "attributes": { + "title": "Quellen zur p\u00e4pstlichen Pressekontrolle in der Neuzeit (1487-1966)", + "doi": "10.30965/9783657785667", + "nodeyear": 2017, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1098574658", + "attributes": { + "title": "Renaissance Craftsmen and Humanistic Scholars", + "doi": "10.3726/b10508", + "nodeyear": 2017, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1092019455", + "attributes": { + "title": "Large Teams Have Developed Science and Technology; Small Teams Have Disrupted It", + "doi": "10.2139/ssrn.3034125", + "nodeyear": 2017, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1084267434", + "attributes": { + "title": "Zilsel's Thesis, Maritime Culture, and Iberian Science in Early Modern Europe", + "doi": "10.1353/jhi.2017.0010", + "nodeyear": 2017, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1083916778", + "attributes": { + "title": "The Structures of Practical Knowledge", + "doi": "10.1007/978-3-319-45671-3", + "nodeyear": 2017, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1011155727", + "attributes": { + "title": "Publication bias and the canonization of false facts", + "doi": "10.7554/elife.21451", + "nodeyear": 2016, + "ref-by-count": 120, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1046954333", + "attributes": { + "title": "Reading Cosmographia: Peter Apian\u2019s Book-Instrument Hybrid and the Rise of the Mathematical Amateur in the Sixteenth Century ", + "doi": "10.1163/15733823-00214p01", + "nodeyear": 2016, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1035390411", + "attributes": { + "title": "Criticism of trepidation models and advocacy of uniform precession in medieval Latin astronomy", + "doi": "10.1007/s00407-016-0184-1", + "nodeyear": 2016, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1044965176", + "attributes": { + "title": "Quantifying the evolution of individual scientific impact", + "doi": "10.1126/science.aaf5239", + "nodeyear": 2016, + "ref-by-count": 255, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1011947705", + "attributes": { + "title": "Differences in Collaboration Patterns across Discipline, Career Stage, and Gender", + "doi": "10.1371/journal.pbio.1002573", + "nodeyear": 2016, + "ref-by-count": 70, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1019790832", + "attributes": { + "title": "Which Type of Citation Analysis Generates the Most Accurate Taxonomy of Scientific and Technical Knowledge?", + "doi": "10.1002/asi.23734", + "nodeyear": 2016, + "ref-by-count": 166, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1004012132", + "attributes": { + "title": "Visual Link Retrieval in a Database of Paintings", + "doi": "10.1007/978-3-319-46604-0_52", + "nodeyear": 2016, + "ref-by-count": 42, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1046537509", + "attributes": { + "title": "An efficient system to fund science: from proposal review to peer-to-peer distributions", + "doi": "10.1007/s11192-016-2110-3", + "nodeyear": 2016, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1064711890", + "attributes": { + "title": "Open Content, Linus\u2019 Law, and Neutral Point of View", + "doi": "10.1287/isre.2016.0643", + "nodeyear": 2016, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "15:0.60;08:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1032302470", + "attributes": { + "title": "From Solo Investigator to Team Scientist: Trends in the Practice and Study of Research Collaboration", + "doi": "10.1146/annurev-soc-081715-074219", + "nodeyear": 2016, + "ref-by-count": 92, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1040086172", + "attributes": { + "title": "Interdisciplinary research has consistently lower funding success", + "doi": "10.1038/nature18315", + "nodeyear": 2016, + "ref-by-count": 265, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1028827814", + "attributes": { + "title": "Topology of Innovation Spaces in the Knowledge Networks Emerging through Questions-And-Answers", + "doi": "10.1371/journal.pone.0154655", + "nodeyear": 2016, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1021313915", + "attributes": { + "title": "On invariance and selectivity in representation learning", + "doi": "10.1093/imaiai/iaw009", + "nodeyear": 2016, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1040134639", + "attributes": { + "title": "European Medieval and Renaissance Cosmography: A Story of Multiple Voices", + "doi": "10.12773/arwh.2016.4.1.035", + "nodeyear": 2016, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1051718960", + "attributes": { + "title": "A review of the literature on citation impact indicators", + "doi": "10.1016/j.joi.2016.02.007", + "nodeyear": 2016, + "ref-by-count": 484, + "is_input_DOI": false, + "category_for": "01:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1036062611", + "attributes": { + "title": "The discretised lognormal and hooked power law distributions for complete citation data: Best options for modelling and regression", + "doi": "10.1016/j.joi.2015.12.007", + "nodeyear": 2016, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1052156308", + "attributes": { + "title": "Understanding the group dynamics and success of teams", + "doi": "10.1098/rsos.160007", + "nodeyear": 2016, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1030521868", + "attributes": { + "title": "Technological novelty profile and invention\u2019s future impact", + "doi": "10.1140/epjds/s13688-016-0069-1", + "nodeyear": 2016, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058867006", + "attributes": { + "title": "The Cat as a Printer\u2019s Trademark: The Case of the Sessa Family", + "doi": "10.1086/685707", + "nodeyear": 2016, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "20:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1093818236", + "attributes": { + "title": "FlowNet: Learning Optical Flow with Convolutional Networks", + "doi": "10.1109/iccv.2015.316", + "nodeyear": 2016, + "ref-by-count": 1803, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1022341282", + "attributes": { + "title": "Factors affecting number of citations: a comprehensive review of the literature", + "doi": "10.1007/s11192-016-1889-2", + "nodeyear": 2016, + "ref-by-count": 283, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1062670916", + "attributes": { + "title": "Getting credit for peer review", + "doi": "10.1126/science.caredit.a1600022", + "nodeyear": 2016, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1032128591", + "attributes": { + "title": "Interrelations among scientific fields and their relative influences revealed by an input\u2013output analysis", + "doi": "10.1016/j.joi.2015.11.002", + "nodeyear": 2016, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "01:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1003685519", + "attributes": { + "title": "The original motivation for Copernicus\u2019s research: Albert of Brudzewo\u2019s Commentariolum super Theoricas novas Georgii Purbachii", + "doi": "10.1007/s00407-015-0171-y", + "nodeyear": 2016, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1041433584", + "attributes": { + "title": "Do Emotions Expressed Online Correlate with Actual Changes in Decision-Making?: The Case of Stock Day Traders", + "doi": "10.1371/journal.pone.0144945", + "nodeyear": 2016, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1064718020", + "attributes": { + "title": "Looking Across and Looking Beyond the Knowledge Frontier: Intellectual Distance, Novelty, and Resource Allocation in Science", + "doi": "10.1287/mnsc.2015.2285", + "nodeyear": 2016, + "ref-by-count": 185, + "is_input_DOI": false, + "category_for": "08:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1037642735", + "attributes": { + "title": "The arrival of the new", + "doi": "10.1007/s00191-015-0438-0", + "nodeyear": 2016, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1099151330", + "attributes": { + "title": "\u201cWhy Should I Trust You?\u201d: Explaining the Predictions of Any Classifier", + "doi": "10.18653/v1/n16-3020", + "nodeyear": 2016, + "ref-by-count": 1554, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1099571646", + "attributes": { + "title": "The Roman Inquisition", + "doi": "10.9783/9780812290325", + "nodeyear": 2015, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1003292963", + "attributes": { + "title": "The Roman Inquisition and the Venetian Press, 1540-1605", + "doi": "10.1515/9781400869237", + "nodeyear": 2015, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1022243193", + "attributes": { + "title": "Unconstrained Facial Images: Database for Face Recognition Under Real-World Conditions", + "doi": "10.1007/978-3-319-27101-9_26", + "nodeyear": 2015, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1048450235", + "attributes": { + "title": "Which Peers Matter? The Relative Impacts of Collaborators, Colleagues, and Competitors", + "doi": "10.1162/rest_a_00472", + "nodeyear": 2015, + "ref-by-count": 40, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1026974855", + "attributes": { + "title": "Deep Metric Learning Using Triplet Network", + "doi": "10.1007/978-3-319-24261-3_7", + "nodeyear": 2015, + "ref-by-count": 745, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1026242168", + "attributes": { + "title": "Choosing experiments to accelerate collective discovery", + "doi": "10.1073/pnas.1509757112", + "nodeyear": 2015, + "ref-by-count": 96, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1019549988", + "attributes": { + "title": "From Innovation to Diversification: A Simple Competitive Model", + "doi": "10.1371/journal.pone.0140420", + "nodeyear": 2015, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1012196654", + "attributes": { + "title": "Anatomy of funded research in science", + "doi": "10.1073/pnas.1513651112", + "nodeyear": 2015, + "ref-by-count": 41, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1043175895", + "attributes": { + "title": "The bureaucratization of science", + "doi": "10.1016/j.respol.2015.04.010", + "nodeyear": 2015, + "ref-by-count": 51, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1042909490", + "attributes": { + "title": "Attention decay in science", + "doi": "10.1016/j.joi.2015.07.006", + "nodeyear": 2015, + "ref-by-count": 83, + "is_input_DOI": false, + "category_for": "01:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1008255365", + "attributes": { + "title": "Quantifying the cognitive extent of science", + "doi": "10.1016/j.joi.2015.10.005", + "nodeyear": 2015, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "01:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1003894420", + "attributes": { + "title": "Weaving the fabric of science: Dynamic network models of science's unfolding structure", + "doi": "10.1016/j.socnet.2015.02.006", + "nodeyear": 2015, + "ref-by-count": 56, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1071055079", + "attributes": { + "title": "Web indicators for research evaluation. Part 2: Social media metrics", + "doi": "10.3145/epi.2015.sep.09", + "nodeyear": 2015, + "ref-by-count": 48, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1071055078", + "attributes": { + "title": "Web indicators for research evaluation. Part 1: Citations and links to academic articles from the Web", + "doi": "10.3145/epi.2015.sep.08", + "nodeyear": 2015, + "ref-by-count": 42, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1008919445", + "attributes": { + "title": "Interdisciplinary research by the numbers", + "doi": "10.1038/525306a", + "nodeyear": 2015, + "ref-by-count": 186, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1006210257", + "attributes": { + "title": "Tradition and Innovation in Scientists\u2019 Research Strategies", + "doi": "10.1177/0003122415601618", + "nodeyear": 2015, + "ref-by-count": 201, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1027978515", + "attributes": { + "title": "Does Interdisciplinary Research Lead to Higher Citation Impact? The Different Effect of Proximal and Distal Interdisciplinarity", + "doi": "10.1371/journal.pone.0135095", + "nodeyear": 2015, + "ref-by-count": 133, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1038095316", + "attributes": { + "title": "Quantifying the impact of weak, strong, and super ties in scientific careers", + "doi": "10.1073/pnas.1501444112", + "nodeyear": 2015, + "ref-by-count": 79, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1033755585", + "attributes": { + "title": "Intelligible Models for HealthCare", + "doi": "10.1145/2783258.2788613", + "nodeyear": 2015, + "ref-by-count": 537, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1012949382", + "attributes": { + "title": "Deep Model Based Transfer and Multi-Task Learning for Biological Image Analysis", + "doi": "10.1145/2783258.2783304", + "nodeyear": 2015, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1018760370", + "attributes": { + "title": "Health ROI as a measure of misalignment of biomedical needs and resources", + "doi": "10.1038/nbt.3276", + "nodeyear": 2015, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1048086688", + "attributes": { + "title": "The dynamics of meaningful social interactions and the emergence of collective knowledge", + "doi": "10.1038/srep12197", + "nodeyear": 2015, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1002371134", + "attributes": { + "title": "On Pixel-Wise Explanations for Non-Linear Classifier Decisions by Layer-Wise Relevance Propagation", + "doi": "10.1371/journal.pone.0130140", + "nodeyear": 2015, + "ref-by-count": 1147, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1018963191", + "attributes": { + "title": "Disciplinary knowledge production and diffusion in science", + "doi": "10.1002/asi.23541", + "nodeyear": 2015, + "ref-by-count": 31, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1047255200", + "attributes": { + "title": "Predicting the long-term citation impact of recent publications", + "doi": "10.1016/j.joi.2015.06.005", + "nodeyear": 2015, + "ref-by-count": 65, + "is_input_DOI": false, + "category_for": "01:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1089071555", + "attributes": { + "title": "A Book, a Pen, and the Sphere", + "doi": "10.1093/acprof:oso/9780198743651.003.0001", + "nodeyear": 2015, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1038660045", + "attributes": { + "title": "The average number of distinct sites visited by a random walker on random graphs", + "doi": "10.1088/1751-8113/48/20/205004", + "nodeyear": 2015, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1016907387", + "attributes": { + "title": "Long-Distance Interdisciplinarity Leads to Higher Scientific Impact", + "doi": "10.1371/journal.pone.0122565", + "nodeyear": 2015, + "ref-by-count": 73, + "is_input_DOI": false, + "category_for": "20:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1013258797", + "attributes": { + "title": "Why Two Heads Apart Are Better Than Two Heads Together: Multiple Mechanisms Underlie the Collaborative Inhibition Effect in Memory", + "doi": "10.1037/xlm0000037", + "nodeyear": 2015, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1016589295", + "attributes": { + "title": "Young scientists lead the way on fresh ideas", + "doi": "10.1038/518283a", + "nodeyear": 2015, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1028625291", + "attributes": { + "title": "Systematic inequality and hierarchy in faculty hiring networks", + "doi": "10.1126/sciadv.1400005", + "nodeyear": 2015, + "ref-by-count": 251, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1053806824", + "attributes": { + "title": "Book Review: Studien zur \u2018Sphaera\u2019 des Johannes de Sacrobosco", + "doi": "10.1177/0021828614552236", + "nodeyear": 2015, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "02:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1053783783", + "attributes": { + "title": "The Book Everybody Read: Vernacular Translations of Sacrobosco\u2019s Sphere in the Sixteenth Century", + "doi": "10.1177/0021828614567419", + "nodeyear": 2015, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "02:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1058862808", + "attributes": { + "title": "Game changer: the topology of creativity.", + "doi": "10.1086/681213", + "nodeyear": 2015, + "ref-by-count": 112, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1108316727", + "attributes": { + "title": "Werkst\u00e4tten des Wissens zwischen Renaissance und Aufkl\u00e4rung", + "doi": "10.1628/978-3-16-153935-0", + "nodeyear": 2015, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1013538688", + "attributes": { + "title": "Team size matters: Collaboration and scientific impact since 1900", + "doi": "10.1002/asi.23266", + "nodeyear": 2014, + "ref-by-count": 189, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1045354113", + "attributes": { + "title": "Proximity effects on the dynamics and outcomes of scientific collaborations", + "doi": "10.1016/j.respol.2014.04.007", + "nodeyear": 2014, + "ref-by-count": 74, + "is_input_DOI": false, + "category_for": "15:0.60;14:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1025771352", + "attributes": { + "title": "Cross-disciplinary research: What configurations of fields of science are found in grant proposals today?", + "doi": "10.1093/reseval/rvu023", + "nodeyear": 2014, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1035836589", + "attributes": { + "title": "Reputation and impact in academic careers", + "doi": "10.1073/pnas.1323111111", + "nodeyear": 2014, + "ref-by-count": 151, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1002163644", + "attributes": { + "title": "Exploiting citation networks for large-scale author name disambiguation", + "doi": "10.1140/epjds/s13688-014-0011-3", + "nodeyear": 2014, + "ref-by-count": 40, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1064088346", + "attributes": { + "title": "Sociological Innovation through Subfield Integration", + "doi": "10.1177/2329496514540131", + "nodeyear": 2014, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1014325139", + "attributes": { + "title": "Collective credit allocation in science", + "doi": "10.1073/pnas.1401992111", + "nodeyear": 2014, + "ref-by-count": 115, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1067702094", + "attributes": { + "title": "IBM?s Health Analytics and Clinical Decision Support", + "doi": "10.15265/iy-2014-0002", + "nodeyear": 2014, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "08:0.50;11:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1030950757", + "attributes": { + "title": "The dynamics of correlated novelties", + "doi": "10.1038/srep05890", + "nodeyear": 2014, + "ref-by-count": 99, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1001115574", + "attributes": { + "title": "Do \u201caltmetrics\u201d correlate with citations? Extensive comparison of altmetric indicators with citations from a multidisciplinary perspective", + "doi": "10.1002/asi.23309", + "nodeyear": 2014, + "ref-by-count": 413, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1018809412", + "attributes": { + "title": "Disambiguation and co-authorship networks of the U.S. patent inventor database (1975\u20132010)", + "doi": "10.1016/j.respol.2014.01.012", + "nodeyear": 2014, + "ref-by-count": 285, + "is_input_DOI": false, + "category_for": "15:0.60;14:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1011100472", + "attributes": { + "title": "What it takes", + "doi": "10.1126/science.344.6190.1422", + "nodeyear": 2014, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1049830207", + "attributes": { + "title": "Random Walks with Preferential Relocations to Places Visited in the Past and their Application to Biology", + "doi": "10.1103/physrevlett.112.240601", + "nodeyear": 2014, + "ref-by-count": 89, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1016646093", + "attributes": { + "title": "Reception, Legacy, Transformation", + "doi": "10.1163/9789004254503", + "nodeyear": 2014, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1094012327", + "attributes": { + "title": "Learning and Transferring Mid-Level Image Representations using Convolutional Neural Networks", + "doi": "10.1109/cvpr.2014.222", + "nodeyear": 2014, + "ref-by-count": 1890, + "is_input_DOI": false, + "category_for": "08:0.50;17:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1093625895", + "attributes": { + "title": "Learning Fine-grained Image Similarity with Deep Ranking", + "doi": "10.1109/cvpr.2014.180", + "nodeyear": 2014, + "ref-by-count": 721, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1093406535", + "attributes": { + "title": "Deep Learning Face Representation from Predicting 10,000 Classes", + "doi": "10.1109/cvpr.2014.244", + "nodeyear": 2014, + "ref-by-count": 1308, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1000812655", + "attributes": { + "title": "Publication metrics and success on the academic job market", + "doi": "10.1016/j.cub.2014.04.039", + "nodeyear": 2014, + "ref-by-count": 133, + "is_input_DOI": false, + "category_for": "17:0.33;11:0.33;06:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1025330072", + "attributes": { + "title": "\u201cUndemocracy\u201d: inequalities in science", + "doi": "10.1126/science.1252743", + "nodeyear": 2014, + "ref-by-count": 60, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1029694435", + "attributes": { + "title": "Idiotae, Mathematics, and Artisans: The Untutored Mind and the Discovery of Nature in the Fabrist Circle", + "doi": "10.1080/17496977.2014.891180", + "nodeyear": 2014, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "21:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1022993100", + "attributes": { + "title": "Driving forces of researchers mobility", + "doi": "10.1038/srep04860", + "nodeyear": 2014, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1037877143", + "attributes": { + "title": "Publishing: Credit where credit is due", + "doi": "10.1038/508312a", + "nodeyear": 2014, + "ref-by-count": 120, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1009142935", + "attributes": { + "title": "Specific and general information sharing among competing academic researchers", + "doi": "10.1016/j.respol.2013.08.017", + "nodeyear": 2014, + "ref-by-count": 56, + "is_input_DOI": false, + "category_for": "15:0.60;14:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1018284603", + "attributes": { + "title": "Principles of scientific research team formation and evolution", + "doi": "10.1073/pnas.1309723111", + "nodeyear": 2014, + "ref-by-count": 123, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1026910151", + "attributes": { + "title": "Characteristic times of biased random walks on complex networks", + "doi": "10.1103/physreve.89.012803", + "nodeyear": 2014, + "ref-by-count": 55, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1021027138", + "attributes": { + "title": "5. Astrology and Society", + "doi": "10.1163/9789004262300_007", + "nodeyear": 2014, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1000095221", + "attributes": { + "title": "2. Representation of the Skies and the Astrological Chart", + "doi": "10.1163/9789004262300_004", + "nodeyear": 2014, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1011044022", + "attributes": { + "title": "The mover\u2019s advantage: The superior performance of migrant scientists", + "doi": "10.1016/j.econlet.2013.10.040", + "nodeyear": 2014, + "ref-by-count": 116, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1032233097", + "attributes": { + "title": "Visualizing and Understanding Convolutional Networks", + "doi": "10.1007/978-3-319-10590-1_53", + "nodeyear": 2014, + "ref-by-count": 7523, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1032139988", + "attributes": { + "title": "Action Recognition in Realistic Sports Videos", + "doi": "10.1007/978-3-319-09396-3_9", + "nodeyear": 2014, + "ref-by-count": 117, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1022410298", + "attributes": { + "title": "Proclus\u2019 life, works, and education of the soul", + "doi": "10.1017/cbo9781139014090.004", + "nodeyear": 2014, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1099559527", + "attributes": { + "title": "The Roman Inquisition", + "doi": "10.9783/9780812207644", + "nodeyear": 2013, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1050929337", + "attributes": { + "title": "Bibliometrics: Global gender disparities in science", + "doi": "10.1038/504211a", + "nodeyear": 2013, + "ref-by-count": 636, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1093993805", + "attributes": { + "title": "Explaining Outliers by Subspace Separability", + "doi": "10.1109/icdm.2013.132", + "nodeyear": 2013, + "ref-by-count": 56, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1019091582", + "attributes": { + "title": "On the Predictability of Future Impact in Science", + "doi": "10.1038/srep03052", + "nodeyear": 2013, + "ref-by-count": 81, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1030554540", + "attributes": { + "title": "Censorship, Condemnations, and the Spread of Cartesianism", + "doi": "10.1007/978-94-007-7690-6_2", + "nodeyear": 2013, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1016149371", + "attributes": { + "title": "Quantitative analysis of the evolution of novelty in cinema through crowdsourced keywords", + "doi": "10.1038/srep02758", + "nodeyear": 2013, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "19:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058855888", + "attributes": { + "title": "Training the intelligent eye: understanding illustrations in early modern astronomy texts.", + "doi": "10.1086/673269", + "nodeyear": 2013, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "21:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1088125888", + "attributes": { + "title": "1 - Oronce Fin\u00e9 math\u00e9maticien et\u00a0homme du livre\u00a0: la pratique \u00e9ditoriale comme moteur d\u2019\u00e9volution", + "doi": "10.3917/arco.pant.2013.01.0019", + "nodeyear": 2013, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1052536328", + "attributes": { + "title": "L\u02bcunivers auquel s\u02bcest confront\u00e9 Copernic : La sph\u00e8re de Mercure dans les Theoricae novae planetarum de Georg Peurbach", + "doi": "10.1016/j.hm.2013.03.001", + "nodeyear": 2013, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1007817525", + "attributes": { + "title": "The Role of Gender in Scholarly Authorship", + "doi": "10.1371/journal.pone.0066212", + "nodeyear": 2013, + "ref-by-count": 395, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1008813098", + "attributes": { + "title": "Invariant Scattering Convolution Networks", + "doi": "10.1109/tpami.2012.230", + "nodeyear": 2013, + "ref-by-count": 663, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1026299011", + "attributes": { + "title": "Networks in Cognitive Science", + "doi": "10.1016/j.tics.2013.04.010", + "nodeyear": 2013, + "ref-by-count": 202, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1027063478", + "attributes": { + "title": "Self-organization of progress across the century of physics", + "doi": "10.1038/srep01720", + "nodeyear": 2013, + "ref-by-count": 77, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1031702550", + "attributes": { + "title": "Characterizing scientific production and consumption in Physics", + "doi": "10.1038/srep01640", + "nodeyear": 2013, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1049621455", + "attributes": { + "title": "Understanding the Group Size Effect in Electronic Brainstorming", + "doi": "10.1177/1046496413479674", + "nodeyear": 2013, + "ref-by-count": 52, + "is_input_DOI": false, + "category_for": "17:0.60;15:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1014163259", + "attributes": { + "title": "Prize-based contests can provide solutions to computational biology problems", + "doi": "10.1038/nbt.2495", + "nodeyear": 2013, + "ref-by-count": 93, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1035132648", + "attributes": { + "title": "Deviation of Zipf's and Heaps' Laws in Human Languages with Limited Dictionary Sizes", + "doi": "10.1038/srep01082", + "nodeyear": 2013, + "ref-by-count": 42, + "is_input_DOI": false, + "category_for": "20:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1092871264", + "attributes": { + "title": "Francisco Faleiro and Scientific Methodology at the Casa de la Contrataci\u00f3n in the Sixteenth Century", + "doi": "10.1080/03085694.2013.731202", + "nodeyear": 2013, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1008480908", + "attributes": { + "title": "Social Dynamics of Science", + "doi": "10.1038/srep01069", + "nodeyear": 2013, + "ref-by-count": 73, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1096908953", + "attributes": { + "title": "The Emergence of Organizations and Markets", + "doi": "10.1515/9781400845552", + "nodeyear": 2013, + "ref-by-count": 280, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1039712226", + "attributes": { + "title": "Stochastic Model for the Vocabulary Growth in Natural Languages", + "doi": "10.1103/physrevx.3.021006", + "nodeyear": 2013, + "ref-by-count": 91, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1024101260", + "attributes": { + "title": "Approaches to the Critical Days in Late Medieval and Renaissance Thinkers", + "doi": "10.1163/15733823-0186p0003", + "nodeyear": 2013, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1021078215", + "attributes": { + "title": "The Book Inventories of Servite Authors and the Survey of the Roman Congregation of the Index in Counter- Reformation Italy", + "doi": "10.1163/9789004258907_010", + "nodeyear": 2013, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1021480095", + "attributes": { + "title": "What is societal impact of research and how can it be assessed? a literature survey", + "doi": "10.1002/asi.22803", + "nodeyear": 2012, + "ref-by-count": 327, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1004751787", + "attributes": { + "title": "The Possible Role of Resource Requirements and Academic Career-Choice Risk on Gender Differences in Publication Rate and Impact", + "doi": "10.1371/journal.pone.0051332", + "nodeyear": 2012, + "ref-by-count": 132, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1001219927", + "attributes": { + "title": "Detecting Communities through Network Data", + "doi": "10.1177/0003122412463574", + "nodeyear": 2012, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1047548764", + "attributes": { + "title": "How Are Academic Age, Productivity and Collaboration Related to Citing Behavior of Researchers?", + "doi": "10.1371/journal.pone.0049176", + "nodeyear": 2012, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1051090043", + "attributes": { + "title": "Global mobility: Science on the move", + "doi": "10.1038/490326a", + "nodeyear": 2012, + "ref-by-count": 61, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1050177553", + "attributes": { + "title": "An empirical analysis of the use of alphabetical authorship in scientific publishing", + "doi": "10.1016/j.joi.2012.07.008", + "nodeyear": 2012, + "ref-by-count": 114, + "is_input_DOI": false, + "category_for": "01:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1045702476", + "attributes": { + "title": "Honour the helpful", + "doi": "10.1038/489496a", + "nodeyear": 2012, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1018678974", + "attributes": { + "title": "Science faculty\u2019s subtle gender biases favor male students", + "doi": "10.1073/pnas.1211286109", + "nodeyear": 2012, + "ref-by-count": 1606, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1053492877", + "attributes": { + "title": "Predicting scientific success", + "doi": "10.1038/489201a", + "nodeyear": 2012, + "ref-by-count": 173, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1018954112", + "attributes": { + "title": "Modeling the mobility with memory", + "doi": "10.1209/0295-5075/99/50001", + "nodeyear": 2012, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1045165578", + "attributes": { + "title": "On the origins of Dee\u2019s mathematical programme: The John Dee\u2013Pedro Nunes connection", + "doi": "10.1016/j.shpsa.2011.12.004", + "nodeyear": 2012, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "22:0.60;21:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1003840934", + "attributes": { + "title": "John Dee and the sciences: early modern networks of knowledge", + "doi": "10.1016/j.shpsa.2011.12.001", + "nodeyear": 2012, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "22:0.60;21:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1044774811", + "attributes": { + "title": "Stochastic Dynamical Model of a Growing Citation Network Based on a Self-Exciting Point Process", + "doi": "10.1103/physrevlett.109.098701", + "nodeyear": 2012, + "ref-by-count": 41, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1037676611", + "attributes": { + "title": "The evolution of interdisciplinarity in physics research", + "doi": "10.1038/srep00551", + "nodeyear": 2012, + "ref-by-count": 44, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1005054355", + "attributes": { + "title": "Examiner Characteristics and Patent Office Outcomes", + "doi": "10.1162/rest_a_00194", + "nodeyear": 2012, + "ref-by-count": 124, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1037206045", + "attributes": { + "title": "The true reinforced random walk with bias", + "doi": "10.1088/1367-2630/14/6/063027", + "nodeyear": 2012, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1000880408", + "attributes": { + "title": "Understanding mobility in a social petri dish", + "doi": "10.1038/srep00457", + "nodeyear": 2012, + "ref-by-count": 90, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062998631", + "attributes": { + "title": "COMPLEX STRUCTURES AND SEMANTICS IN FREE WORD ASSOCIATION", + "doi": "10.1142/s0219525912500543", + "nodeyear": 2012, + "ref-by-count": 26, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062896024", + "attributes": { + "title": "Runaway events dominate the heavy tail of citation distributions", + "doi": "10.1140/epjst/e2012-01576-4", + "nodeyear": 2012, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1036315377", + "attributes": { + "title": "Turn the scientific method on ourselves", + "doi": "10.1038/484031a", + "nodeyear": 2012, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1099276685", + "attributes": { + "title": "Scholarship, Commerce, Religion", + "doi": "10.4159/harvard.9780674065321", + "nodeyear": 2012, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1011358037", + "attributes": { + "title": "Persistence and uncertainty in the academic career", + "doi": "10.1073/pnas.1121429109", + "nodeyear": 2012, + "ref-by-count": 94, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1026964750", + "attributes": { + "title": "The Cost of Collaboration", + "doi": "10.1177/0956797611429132", + "nodeyear": 2012, + "ref-by-count": 52, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1053809075", + "attributes": { + "title": "The First Phases of the Theoric\u00e6 Planetarum Printed Tradition (1474\u20131535): The Evolution of a Genre Observed through its Images", + "doi": "10.1177/002182861204300102", + "nodeyear": 2012, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1099276679", + "attributes": { + "title": "How Economics Shapes Science", + "doi": "10.4159/harvard.9780674062757", + "nodeyear": 2012, + "ref-by-count": 516, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1053599210", + "attributes": { + "title": "Testing the fairness of citation indicators for comparison across scientific domains: The case of fractional citation counts", + "doi": "10.1016/j.joi.2011.09.002", + "nodeyear": 2012, + "ref-by-count": 65, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1047480177", + "attributes": { + "title": "Cosmography and the Meaning of Sundials", + "doi": "10.1057/9780230338029_13", + "nodeyear": 2012, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1004257385", + "attributes": { + "title": "Visualizing non-metric similarities in multiple maps", + "doi": "10.1007/s10994-011-5273-4", + "nodeyear": 2011, + "ref-by-count": 140, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1064732744", + "attributes": { + "title": "From Old Competence Destruction to New Competence Access: Evidence from the Comparison of Two Discontinuities in Anticancer Drug Discovery", + "doi": "10.1287/orsc.1100.0616", + "nodeyear": 2011, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1035745122", + "attributes": { + "title": "Universality of citation distributions revisited", + "doi": "10.1002/asi.21671", + "nodeyear": 2011, + "ref-by-count": 53, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1000512935", + "attributes": { + "title": "Characterizing and Modeling Citation Dynamics", + "doi": "10.1371/journal.pone.0024926", + "nodeyear": 2011, + "ref-by-count": 128, + "is_input_DOI": false, + "category_for": "18:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1015159737", + "attributes": { + "title": "Incentives and creativity: evidence from the academic life sciences", + "doi": "10.1111/j.1756-2171.2011.00140.x", + "nodeyear": 2011, + "ref-by-count": 281, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1129946281", + "attributes": { + "title": "The Copernican Question", + "doi": "10.1525/9780520948167", + "nodeyear": 2011, + "ref-by-count": 76, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1059655313", + "attributes": { + "title": "An empirical test for general purpose technology: an examination of the Cohen-Boyer rDNA technology", + "doi": "10.1093/icc/dtr040", + "nodeyear": 2011, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "15:0.50;14:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1071058552", + "attributes": { + "title": "Mapping a research agenda for the science of team science.", + "doi": "10.3152/095820211x12941371876580", + "nodeyear": 2011, + "ref-by-count": 94, + "is_input_DOI": false, + "category_for": "08:0.33;14:0.33;16:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1017131526", + "attributes": { + "title": "O \u00cdndice Inquisitorial de 1624 \u00e0 luz de novos documentos", + "doi": "10.4000/cultura.170", + "nodeyear": 2011, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1001033517", + "attributes": { + "title": "The Invention of Race in the European Middle Ages I: Race Studies, Modernity, and the Middle Ages", + "doi": "10.1111/j.1741-4113.2011.00790.x", + "nodeyear": 2011, + "ref-by-count": 46, + "is_input_DOI": false, + "category_for": "20:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1054061384", + "attributes": { + "title": "Experimenting with Paper Instruments in Fifteenth-and Sixteenth-Century Astronomy: Computing Syzygies with Isotemporal Lines and Salt Dishes", + "doi": "10.1177/002182861104200207", + "nodeyear": 2011, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "02:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1062464435", + "attributes": { + "title": "Metaknowledge", + "doi": "10.1126/science.1201765", + "nodeyear": 2011, + "ref-by-count": 171, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1108133089", + "attributes": { + "title": "The Oxford Handbook of Philosophy in Early Modern Europe", + "doi": "10.1093/oxfordhb/9780199556137.001.0001", + "nodeyear": 2011, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1014515383", + "attributes": { + "title": "Indicators of the interdisciplinarity of journals: Diversity, centrality, and citations", + "doi": "10.1016/j.joi.2010.09.002", + "nodeyear": 2011, + "ref-by-count": 155, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1002371049", + "attributes": { + "title": "Approaches to understanding and measuring interdisciplinary scientific research (IDR): A review of the literature", + "doi": "10.1016/j.joi.2010.06.004", + "nodeyear": 2011, + "ref-by-count": 388, + "is_input_DOI": false, + "category_for": "01:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1099051680", + "attributes": { + "title": "The Innovator's Dilemma", + "doi": "10.15358/9783800642816", + "nodeyear": 2011, + "ref-by-count": 275, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1025428724", + "attributes": { + "title": "Hypotheses", + "doi": "10.1007/978-0-387-79948-3_4157", + "nodeyear": 2011, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1002778616", + "attributes": { + "title": "Calm in a crisis", + "doi": "10.1038/4681002a", + "nodeyear": 2010, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1042019617", + "attributes": { + "title": "The Temporal Structure of Scientific Consensus Formation", + "doi": "10.1177/0003122410388488", + "nodeyear": 2010, + "ref-by-count": 137, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1028804384", + "attributes": { + "title": "Re-inventing Willis", + "doi": "10.1016/j.physrep.2010.12.004", + "nodeyear": 2010, + "ref-by-count": 73, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1018642070", + "attributes": { + "title": "The Reality of Peurbach\u2019s Orbs: Cosmological Continuity in Fifteenth and Sixteenth Century Astronomy", + "doi": "10.1007/978-94-007-0037-6_2", + "nodeyear": 2010, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1025164378", + "attributes": { + "title": "The technological origins of radical inventions", + "doi": "10.1016/j.respol.2010.05.013", + "nodeyear": 2010, + "ref-by-count": 186, + "is_input_DOI": false, + "category_for": "15:0.60;14:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1063611925", + "attributes": { + "title": "The Astronomical Diagrams in Oronce Fin\u00e9's Protomathesis (1532): Founding a French Tradition?", + "doi": "10.1177/002182861004100302", + "nodeyear": 2010, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "02:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1053509024", + "attributes": { + "title": "Schumpeterian economic dynamics as a quantifiable model of evolution", + "doi": "10.1088/1367-2630/12/7/075029", + "nodeyear": 2010, + "ref-by-count": 29, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1071781587", + "attributes": { + "title": "Los m\u00e9todos pedag\u00f3gicos de la Corona para disciplinar la experiencia de los navegantes en el siglo XVI", + "doi": "10.3989/aeamer.2010.v67.i1.334", + "nodeyear": 2010, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "21:0.50;20:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1046491641", + "attributes": { + "title": "Learning to Represent Spatial Transformations with Factored Higher-Order Boltzmann Machines", + "doi": "10.1162/neco.2010.01-09-953", + "nodeyear": 2010, + "ref-by-count": 110, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1028813338", + "attributes": { + "title": "The role of mentorship in prot\u00e9g\u00e9 performance", + "doi": "10.1038/nature09040", + "nodeyear": 2010, + "ref-by-count": 89, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1031346728", + "attributes": { + "title": "Judicial astrology in theory and practice in later medieval Europe", + "doi": "10.1016/j.shpsc.2010.04.004", + "nodeyear": 2010, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1063353038", + "attributes": { + "title": "Superstar Extinction *", + "doi": "10.1162/qjec.2010.125.2.549", + "nodeyear": 2010, + "ref-by-count": 356, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1024887047", + "attributes": { + "title": "Essays on Literary Imagination, the Canon and the Christian Middle Ages for Burcht Pranger", + "doi": "10.1163/ej.9789004184961.i-422", + "nodeyear": 2010, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "20:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1021793668", + "attributes": { + "title": "Let's make science metrics more scientific", + "doi": "10.1038/464488a", + "nodeyear": 2010, + "ref-by-count": 163, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1064715095", + "attributes": { + "title": "Lone Inventors as Sources of Breakthroughs: Myth or Reality?", + "doi": "10.1287/mnsc.1090.1072", + "nodeyear": 2010, + "ref-by-count": 450, + "is_input_DOI": false, + "category_for": "08:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1019627387", + "attributes": { + "title": "Armis Gunfe: Remembering Egyptian Days", + "doi": "10.1353/trd.2010.0005", + "nodeyear": 2010, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "22:0.60;21:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1002280443", + "attributes": { + "title": "Defending Hypatia, Ramus, Savile, and the Renaissance Rediscovery of Mathematical History", + "doi": "10.1007/978-90-481-3542-4", + "nodeyear": 2010, + "ref-by-count": 38, + "is_input_DOI": false, + "category_for": "20:0.50;21:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1004380398", + "attributes": { + "title": "Melanchthonian Scholarship between Universal History and Pedagogy", + "doi": "10.1163/ej.9789004179653.i-236", + "nodeyear": 2009, + "ref-by-count": 39, + "is_input_DOI": false, + "category_for": "20:0.50;21:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1037350902", + "attributes": { + "title": "Introduction", + "doi": "10.3233/ben-2009-0242", + "nodeyear": 2009, + "ref-by-count": 926, + "is_input_DOI": false, + "category_for": "11:0.60;17:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1044547618", + "attributes": { + "title": "Inquisition, Social Criticism and Theology in the Case of El Critic\u00f3n", + "doi": "10.1163/ej.9789004178519.iii-323", + "nodeyear": 2009, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "20:0.50;21:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1014796149", + "attributes": { + "title": "The Pascal Visual Object Classes (VOC) Challenge", + "doi": "10.1007/s11263-009-0275-4", + "nodeyear": 2009, + "ref-by-count": 7747, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1026143960", + "attributes": { + "title": "Identifying the age profile of patent citations: new estimates of knowledge diffusion", + "doi": "10.1002/jae.1086", + "nodeyear": 2009, + "ref-by-count": 62, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1023367925", + "attributes": { + "title": "Scientific discovery and topological transitions in collaboration networks", + "doi": "10.1016/j.joi.2009.03.001", + "nodeyear": 2009, + "ref-by-count": 95, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1016818672", + "attributes": { + "title": "Author name disambiguation in MEDLINE", + "doi": "10.1145/1552303.1552304", + "nodeyear": 2009, + "ref-by-count": 180, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1027740372", + "attributes": { + "title": "Collective dynamics of social annotation", + "doi": "10.1073/pnas.0901136106", + "nodeyear": 2009, + "ref-by-count": 85, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1024224648", + "attributes": { + "title": "Is science becoming more interdisciplinary? Measuring and mapping six research fields over time", + "doi": "10.1007/s11192-008-2197-2", + "nodeyear": 2009, + "ref-by-count": 434, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1069268616", + "attributes": { + "title": "Networks, Propinquity, and Innovation in Knowledge-intensive Industries", + "doi": "10.2189/asqu.2009.54.1.90", + "nodeyear": 2009, + "ref-by-count": 382, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1050153243", + "attributes": { + "title": "Applicant and examiner citations in U.S. patents: An overview and analysis", + "doi": "10.1016/j.respol.2008.12.001", + "nodeyear": 2009, + "ref-by-count": 208, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1011197521", + "attributes": { + "title": "Reinforced walks in two and three dimensions", + "doi": "10.1088/1367-2630/11/2/023009", + "nodeyear": 2009, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1011485598", + "attributes": { + "title": "Who gets a mentor? A longitudinal assessment of the rising star hypothesis", + "doi": "10.1016/j.jvb.2008.09.009", + "nodeyear": 2009, + "ref-by-count": 71, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1015924662", + "attributes": { + "title": "Setting up Copernicus? Astronomy and Natural Philosophy in Giambattista Capuano da Manfredonia's Expositio on the Sphere", + "doi": "10.1163/157338209x425597", + "nodeyear": 2009, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1099546324", + "attributes": { + "title": "Secret Science", + "doi": "10.7208/chicago/9780226675374.001.0001", + "nodeyear": 2009, + "ref-by-count": 99, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1088820086", + "attributes": { + "title": "Cosmography at the Casa, Consejo, and Corte During the Century of Discovery", + "doi": "10.11126/stanford/9780804753586.003.0004", + "nodeyear": 2008, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1047671175", + "attributes": { + "title": "Entropy rate of diffusion processes on complex networks", + "doi": "10.1103/physreve.78.065102", + "nodeyear": 2008, + "ref-by-count": 133, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062459009", + "attributes": { + "title": "The Gender Gap in NIH Grant Applications", + "doi": "10.1126/science.1165878", + "nodeyear": 2008, + "ref-by-count": 147, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1052550373", + "attributes": { + "title": "Universality of citation distributions: Toward an objective measure of scientific impact", + "doi": "10.1073/pnas.0806977105", + "nodeyear": 2008, + "ref-by-count": 513, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1098760953", + "attributes": { + "title": "The Western Esoteric Traditions", + "doi": "10.1093/acprof:oso/9780195320992.001.0001", + "nodeyear": 2008, + "ref-by-count": 50, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1062457759", + "attributes": { + "title": "Multi-University Research Teams: Shifting Impact, Geography, and Stratification in Science", + "doi": "10.1126/science.1158357", + "nodeyear": 2008, + "ref-by-count": 442, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1038472984", + "attributes": { + "title": "How do spatial and social proximity influence knowledge flows? Evidence from patent data", + "doi": "10.1016/j.jue.2008.01.003", + "nodeyear": 2008, + "ref-by-count": 243, + "is_input_DOI": false, + "category_for": "12:0.50;14:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1062457136", + "attributes": { + "title": "Electronic Publication and the Narrowing of Science and Scholarship", + "doi": "10.1126/science.1150473", + "nodeyear": 2008, + "ref-by-count": 211, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1003260691", + "attributes": { + "title": "Cultural route to the emergence of linguistic categories", + "doi": "10.1073/pnas.0802485105", + "nodeyear": 2008, + "ref-by-count": 119, + "is_input_DOI": false, + "category_for": "20:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1094359705", + "attributes": { + "title": "Action MACH", + "doi": "10.1109/cvpr.2008.4587727", + "nodeyear": 2008, + "ref-by-count": 830, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1053297592", + "attributes": { + "title": "Collaborative Research in Sociology: Trends and Contributing Factors", + "doi": "10.1007/s12108-008-9042-1", + "nodeyear": 2008, + "ref-by-count": 82, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1001497369", + "attributes": { + "title": "History of Astroparticle Physics and its Components", + "doi": "10.12942/lrr-2008-2", + "nodeyear": 2008, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1108571431", + "attributes": { + "title": "Visuelle Weltaneignung", + "doi": "10.13109/9783666367113", + "nodeyear": 2008, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1040561904", + "attributes": { + "title": "Effectiveness of Journal Ranking Schemes as a Tool for Locating Information", + "doi": "10.1371/journal.pone.0001683", + "nodeyear": 2008, + "ref-by-count": 131, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1006125808", + "attributes": { + "title": "1\u2003Moving Beyond Schumpeter: Management Research on the Determinants of Technological Innovation", + "doi": "10.1080/19416520802211446", + "nodeyear": 2008, + "ref-by-count": 260, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1098667199", + "attributes": { + "title": "Dynamical Processes on Complex Networks", + "doi": "10.1017/cbo9780511791383", + "nodeyear": 2008, + "ref-by-count": 1692, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1041015426", + "attributes": { + "title": "Does the h index have predictive power?", + "doi": "10.1073/pnas.0707962104", + "nodeyear": 2007, + "ref-by-count": 608, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1064732388", + "attributes": { + "title": "Geography, Networks, and Knowledge Flow", + "doi": "10.1287/orsc.1070.0308", + "nodeyear": 2007, + "ref-by-count": 232, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1087285553", + "attributes": { + "title": "Collaborative Brokerage, Generative Creativity, and Creative Success", + "doi": "10.2189/asqu.52.3.443", + "nodeyear": 2007, + "ref-by-count": 675, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1024918334", + "attributes": { + "title": "Localization Transition of Biased Random Walks on Random Networks", + "doi": "10.1103/physrevlett.99.098701", + "nodeyear": 2007, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1022100142", + "attributes": { + "title": "The determinants of faculty patenting behavior: Demographics or opportunities?", + "doi": "10.1016/j.jebo.2006.05.015", + "nodeyear": 2007, + "ref-by-count": 229, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1048538314", + "attributes": { + "title": "Innovaton and Emulation: Lessons from American Universities in Selling Private Rights to Public Knowledge", + "doi": "10.1007/s11024-007-9034-2", + "nodeyear": 2007, + "ref-by-count": 61, + "is_input_DOI": false, + "category_for": "13:0.33;16:0.33;22:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1071848004", + "attributes": { + "title": "Charles V, Gervais Chr\u00e9tien et les manuscrits scientifiques du coll\u00e8ge de Ma\u00eetre Gervais", + "doi": "10.4000/medievales.1943", + "nodeyear": 2007, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1019349719", + "attributes": { + "title": "Growth, innovation, scaling, and the pace of life in cities", + "doi": "10.1073/pnas.0610172104", + "nodeyear": 2007, + "ref-by-count": 1400, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062455003", + "attributes": { + "title": "The Increasing Dominance of Teams in Production of Knowledge", + "doi": "10.1126/science.1136099", + "nodeyear": 2007, + "ref-by-count": 1837, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1010025359", + "attributes": { + "title": "Quantifying social group evolution", + "doi": "10.1038/nature05670", + "nodeyear": 2007, + "ref-by-count": 1110, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062998335", + "attributes": { + "title": "MAPPING TECHNOLOGICAL TRAJECTORIES AS PATENT CITATION NETWORKS: A STUDY ON THE HISTORY OF FUEL CELL RESEARCH", + "doi": "10.1142/s0219525907000945", + "nodeyear": 2007, + "ref-by-count": 264, + "is_input_DOI": false, + "category_for": "01:0.50;17:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1049575016", + "attributes": { + "title": "The structure of invention", + "doi": "10.1016/j.respol.2006.11.005", + "nodeyear": 2007, + "ref-by-count": 233, + "is_input_DOI": false, + "category_for": "15:0.60;14:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1022178974", + "attributes": { + "title": "Assessing the nature of nanotechnology: can we uncover an emerging general purpose technology?", + "doi": "10.1007/s10961-007-9030-6", + "nodeyear": 2007, + "ref-by-count": 121, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1011912474", + "attributes": { + "title": "A general framework for analysing diversity in science, technology and society", + "doi": "10.1098/rsif.2007.0213", + "nodeyear": 2007, + "ref-by-count": 544, + "is_input_DOI": false, + "category_for": "05:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1012497879", + "attributes": { + "title": "Semiotic dynamics and collaborative tagging", + "doi": "10.1073/pnas.0610487104", + "nodeyear": 2007, + "ref-by-count": 224, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1044805869", + "attributes": { + "title": "A survey of random processes with reinforcement", + "doi": "10.1214/07-ps094", + "nodeyear": 2007, + "ref-by-count": 291, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1099567238", + "attributes": { + "title": "Science for Sale", + "doi": "10.7208/chicago/9780226306261.001.0001", + "nodeyear": 2007, + "ref-by-count": 67, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1015745666", + "attributes": { + "title": "Measures for measures", + "doi": "10.1038/4441003a", + "nodeyear": 2006, + "ref-by-count": 198, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1030475861", + "attributes": { + "title": "FORMAL AND INFORMAL MENTORSHIPS: A COMPARISON ON MENTORING FUNCTIONS AND CONTRAST WITH NONMENTORED COUNTERPARTS", + "doi": "10.1111/j.1744-6570.1992.tb00863.x", + "nodeyear": 2006, + "ref-by-count": 645, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1077378664", + "attributes": { + "title": "Multidisciplinarity, interdisciplinarity and transdisciplinarity in health research, services, education and policy: 1. Definitions, objectives, and evidence of effectiveness.", + "doi": "", + "nodeyear": 2006, + "ref-by-count": 661, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1038356487", + "attributes": { + "title": "Mapping the diffusion of scholarly knowledge among major U.S. research institutions", + "doi": "10.1007/s11192-006-0120-2", + "nodeyear": 2006, + "ref-by-count": 57, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1017878371", + "attributes": { + "title": "Complexity, networks and knowledge flow", + "doi": "10.1016/j.respol.2006.05.002", + "nodeyear": 2006, + "ref-by-count": 495, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1072895578", + "attributes": { + "title": "Superman or the Fantastic Four? knowledge combination And experience in Innovative Teams", + "doi": "10.5465/amj.2006.22083029", + "nodeyear": 2006, + "ref-by-count": 576, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1019277068", + "attributes": { + "title": "The effects of business practices, licensing, and intellectual property on development and dissemination of the polymerase chain reaction: case study", + "doi": "10.1186/1747-5333-1-7", + "nodeyear": 2006, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1037919082", + "attributes": { + "title": "Diffusion maps", + "doi": "10.1016/j.acha.2006.04.006", + "nodeyear": 2006, + "ref-by-count": 1571, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1021315020", + "attributes": { + "title": "Breakthrough innovations in the U.S. biotechnology industry: the effects of technological space and geographic origin", + "doi": "10.1002/smj.522", + "nodeyear": 2006, + "ref-by-count": 377, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1042569856", + "attributes": { + "title": "Teaching Mathematics and Astronomy in France: The Coll\u00e8ge Royal (1550\u20131650)", + "doi": "10.1007/s11191-005-1794-1", + "nodeyear": 2006, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "22:0.50;13:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1039165521", + "attributes": { + "title": "Christoph Clavius\u2019 \u201cOrdo Servandus in Addiscendis Disciplinis Mathematicis\u201d and the Teaching of Mathematics in Jesuit Colleges at the Beginning of the Modern Era", + "doi": "10.1007/s11191-004-5607-8", + "nodeyear": 2006, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "13:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1006977567", + "attributes": { + "title": "Complex networks: Structure and dynamics", + "doi": "10.1016/j.physrep.2005.10.009", + "nodeyear": 2006, + "ref-by-count": 7317, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1034267633", + "attributes": { + "title": "The University of Salamanca and the Renaissance of Astronomy During the Second Half of the 15th Century", + "doi": "10.1007/1-4020-3975-1_3", + "nodeyear": 2006, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1031052761", + "attributes": { + "title": "The Cultivation of Astronomy in Spanish Universities in the Latter Half of the 16th Century", + "doi": "10.1007/1-4020-3975-1_6", + "nodeyear": 2006, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1058907756", + "attributes": { + "title": "Looking for Mr. Schumpeter: Where Are We in the Competition--Innovation Debate?", + "doi": "10.1086/ipe.6.25056183", + "nodeyear": 2006, + "ref-by-count": 263, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1077659329", + "attributes": { + "title": "Medical astrology in Spain during the seventeenth century.", + "doi": "", + "nodeyear": 2006, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1014558653", + "attributes": { + "title": "Natural Philosophy and Mathematics in Portuguese Universities, 1550\u20131650", + "doi": "10.1007/1-4020-3975-1_11", + "nodeyear": 2006, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1050917859", + "attributes": { + "title": "An index to quantify an individual's scientific research output", + "doi": "10.1073/pnas.0507655102", + "nodeyear": 2005, + "ref-by-count": 5916, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1099107727", + "attributes": { + "title": "Retrying Galileo, 1633-1992", + "doi": "10.1525/california/9780520242616.001.0001", + "nodeyear": 2005, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1002950338", + "attributes": { + "title": "Collaborative Research Across Disciplinary and Organizational Boundaries", + "doi": "10.1177/0306312705055535", + "nodeyear": 2005, + "ref-by-count": 411, + "is_input_DOI": false, + "category_for": "16:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1104273031", + "attributes": { + "title": "The Printing Revolution in Early Modern Europe", + "doi": "10.1017/cbo9780511819230", + "nodeyear": 2005, + "ref-by-count": 86, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1059654994", + "attributes": { + "title": "Diffusion of general-purpose technologies: understanding patterns in the electrification of US Manufacturing 1880\u20131930", + "doi": "10.1093/icc/dth068", + "nodeyear": 2005, + "ref-by-count": 42, + "is_input_DOI": false, + "category_for": "15:0.50;14:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1062451305", + "attributes": { + "title": "Team Assembly Mechanisms Determine Collaboration Network Structure and Team Performance", + "doi": "10.1126/science.1106340", + "nodeyear": 2005, + "ref-by-count": 658, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1086642126", + "attributes": { + "title": "Reading Health in the Stars: Politics and Medical Astrology in Renaissance Milan", + "doi": "10.1515/9783110925128.183", + "nodeyear": 2005, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1094758581", + "attributes": { + "title": "Learning a Similarity Metric Discriminatively, with Application to Face Verification", + "doi": "10.1109/cvpr.2005.202", + "nodeyear": 2005, + "ref-by-count": 1753, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1098658922", + "attributes": { + "title": "Im Bann der Sterne", + "doi": "10.1524/9783050082172", + "nodeyear": 2004, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1041002791", + "attributes": { + "title": "Patterns of Link Reciprocity in Directed Networks", + "doi": "10.1103/physrevlett.93.268701", + "nodeyear": 2004, + "ref-by-count": 235, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1060036401", + "attributes": { + "title": "Astrological Medicine and the Medieval English Folded Almanac", + "doi": "10.1093/shm/17.3.345", + "nodeyear": 2004, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058712288", + "attributes": { + "title": "Structural Holes and Good Ideas", + "doi": "10.1086/421787", + "nodeyear": 2004, + "ref-by-count": 2896, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1024198006", + "attributes": { + "title": "Science as a map in technological search", + "doi": "10.1002/smj.384", + "nodeyear": 2004, + "ref-by-count": 756, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1027383146", + "attributes": { + "title": "Intermittency and scale-free networks: a dynamical model for human language complexity", + "doi": "10.1016/s0960-0779(03)00432-6", + "nodeyear": 2004, + "ref-by-count": 41, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1051417928", + "attributes": { + "title": "Aristotle, Copernicus, Bruno: centrality, the principle of movement and the extension of the Universe", + "doi": "10.1016/j.shpsa.2003.12.007", + "nodeyear": 2004, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "22:0.60;21:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1064732148", + "attributes": { + "title": "Knowledge Networks as Channels and Conduits: The Effects of Spillovers in the Boston Biotechnology Community", + "doi": "10.1287/orsc.1030.0054", + "nodeyear": 2004, + "ref-by-count": 1340, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1005040776", + "attributes": { + "title": "Multiple kernel learning, conic duality, and the SMO algorithm", + "doi": "10.1145/1015330.1015424", + "nodeyear": 2004, + "ref-by-count": 917, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1060036323", + "attributes": { + "title": "What is the Folded Almanac?: The Form and Function of a Key Manuscript Source for Astro-medical Practice in Later Medieval England", + "doi": "10.1093/shm/16.3.481", + "nodeyear": 2003, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1040812154", + "attributes": { + "title": "Effect of aging on network structure", + "doi": "10.1103/physreve.68.056121", + "nodeyear": 2003, + "ref-by-count": 86, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1035672046", + "attributes": { + "title": "Scaling properties of random walks on small-world networks", + "doi": "10.1103/physreve.68.056105", + "nodeyear": 2003, + "ref-by-count": 59, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1039999964", + "attributes": { + "title": "The expanding role of university patenting in the life sciences: assessing the importance of experience and connectivity", + "doi": "10.1016/s0048-7333(03)00045-3", + "nodeyear": 2003, + "ref-by-count": 257, + "is_input_DOI": false, + "category_for": "15:0.60;14:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1052013786", + "attributes": { + "title": "A survey of kernels for structured data", + "doi": "10.1145/959242.959248", + "nodeyear": 2003, + "ref-by-count": 288, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1025146728", + "attributes": { + "title": "From separate systems to a hybrid order: accumulative advantage across public and private science at Research One universities", + "doi": "10.1016/s0048-7333(02)00111-7", + "nodeyear": 2003, + "ref-by-count": 177, + "is_input_DOI": false, + "category_for": "15:0.60;14:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1010231923", + "attributes": { + "title": "Agricultural Biotechnology's Complementary Intellectual Assets", + "doi": "10.1162/003465303765299864", + "nodeyear": 2003, + "ref-by-count": 83, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1059654630", + "attributes": { + "title": "Discontinuities and senior management: assessing the role of recognition in pharmaceutical firm response to biotechnology", + "doi": "10.1093/icc/12.2.203", + "nodeyear": 2003, + "ref-by-count": 163, + "is_input_DOI": false, + "category_for": "15:0.50;14:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1064722339", + "attributes": { + "title": "The Halo Effect and Technology Licensing: The Influence of Institutional Prestige on the Licensing of University Inventions", + "doi": "10.1287/mnsc.49.4.478.14416", + "nodeyear": 2003, + "ref-by-count": 199, + "is_input_DOI": false, + "category_for": "08:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1041814201", + "attributes": { + "title": "The geography of opportunity: spatial heterogeneity in founding rates and the performance of biotechnology firms", + "doi": "10.1016/s0048-7333(02)00098-7", + "nodeyear": 2003, + "ref-by-count": 529, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062877811", + "attributes": { + "title": "The Structure and Function of Complex Networks", + "doi": "10.1137/s003614450342480", + "nodeyear": 2003, + "ref-by-count": 11799, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1010960795", + "attributes": { + "title": "The digital code of DNA", + "doi": "10.1038/nature01410", + "nodeyear": 2003, + "ref-by-count": 186, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1051528439", + "attributes": { + "title": "Jesuit Mathematical Practice in Portugal, 1540\u20131759", + "doi": "10.1007/978-94-017-0361-1_5", + "nodeyear": 2003, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1051048960", + "attributes": { + "title": "Additio ILLA Non Videtur Edenda: Giuseppe Biancani, Reader of Galileo in an Unedited Censored Text", + "doi": "10.1007/978-94-017-0361-1_3", + "nodeyear": 2003, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1027036557", + "attributes": { + "title": "Descartes\u2019s Mathematical Thought", + "doi": "10.1007/978-94-017-1225-5", + "nodeyear": 2003, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1033238539", + "attributes": { + "title": "Network Motifs: Simple Building Blocks of Complex Networks", + "doi": "10.1126/science.298.5594.824", + "nodeyear": 2002, + "ref-by-count": 4755, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1009039767", + "attributes": { + "title": "A New Discriminative Kernel from Probabilistic Models", + "doi": "10.1162/08997660260293274", + "nodeyear": 2002, + "ref-by-count": 78, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1033627077", + "attributes": { + "title": "A knowledge flow model for peer-to-peer team knowledge sharing and management", + "doi": "10.1016/s0957-4174(02)00024-6", + "nodeyear": 2002, + "ref-by-count": 120, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1017567011", + "attributes": { + "title": "Measuring knowledge transfer between fields of science", + "doi": "10.1023/a:1016078331752", + "nodeyear": 2002, + "ref-by-count": 88, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1017820033", + "attributes": { + "title": "Topology of the conceptual network of language", + "doi": "10.1103/physreve.65.065102", + "nodeyear": 2002, + "ref-by-count": 177, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1051329197", + "attributes": { + "title": "Tracing knowledge flows in innovation systems", + "doi": "10.1023/a:1016057727209", + "nodeyear": 2002, + "ref-by-count": 71, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1046338606", + "attributes": { + "title": "Regiomontanus on Ptolemy, Physical Orbs, and Astronomical Fictionalism: Goldsteinian Themes in the Defense of Theon against George of Trebizond", + "doi": "10.1162/106361402321147522", + "nodeyear": 2002, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1034176624", + "attributes": { + "title": "From Book Censorship to Academic Peer Review", + "doi": "10.1080/1045722022000003435", + "nodeyear": 2002, + "ref-by-count": 100, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1072898982", + "attributes": { + "title": "Cultural Variations in the Cross-Border Transfer of Organizational Knowledge: An Integrative Framework", + "doi": "10.5465/amr.2002.6588000", + "nodeyear": 2002, + "ref-by-count": 369, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1037102122", + "attributes": { + "title": "Ptolemy's Geography: An Annotated Translation of the Theoretical Chapters", + "doi": "10.1162/leon.2002.35.2.212b", + "nodeyear": 2002, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1039979623", + "attributes": { + "title": "Academic patent quality and quantity before and after the Bayh\u2013Dole act in the United States", + "doi": "10.1016/s0048-7333(01)00116-0", + "nodeyear": 2002, + "ref-by-count": 249, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1008594690", + "attributes": { + "title": "Statistical mechanics of complex networks", + "doi": "10.1103/revmodphys.74.47", + "nodeyear": 2002, + "ref-by-count": 13845, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1064722177", + "attributes": { + "title": "Learning to Patent: Institutional Experience, Learning, and the Characteristics of U.S. University Patents After the Bayh-Dole Act, 1981-1992", + "doi": "10.1287/mnsc.48.1.73.14278", + "nodeyear": 2002, + "ref-by-count": 162, + "is_input_DOI": false, + "category_for": "08:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1102786891", + "attributes": { + "title": "A Reinterpretation of the Fifth Lateran Council Decree Apostolici regiminis (1513)", + "doi": "10.2307/4143912", + "nodeyear": 2002, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062445713", + "attributes": { + "title": "Competition and Careers in Biosciences", + "doi": "10.1126/science.1067477", + "nodeyear": 2001, + "ref-by-count": 66, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1004420298", + "attributes": { + "title": "Scaling of random spreading in small world networks", + "doi": "10.1103/physreve.64.057105", + "nodeyear": 2001, + "ref-by-count": 42, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058676367", + "attributes": { + "title": "Making dollars out of DNA. The first major patent in biotechnology and the commercialization of molecular biology, 1974-1980.", + "doi": "10.1086/385281", + "nodeyear": 2001, + "ref-by-count": 128, + "is_input_DOI": false, + "category_for": "21:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1038617092", + "attributes": { + "title": "Estimating the Support of a High-Dimensional Distribution", + "doi": "10.1162/089976601750264965", + "nodeyear": 2001, + "ref-by-count": 2959, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1072898924", + "attributes": { + "title": "Reconceptualizing Mentoring at Work: A Developmental Network Perspective", + "doi": "10.5465/amr.2001.4378023", + "nodeyear": 2001, + "ref-by-count": 712, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1060726536", + "attributes": { + "title": "Target problem on small-world networks", + "doi": "10.1103/physreve.63.041108", + "nodeyear": 2001, + "ref-by-count": 69, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1018280471", + "attributes": { + "title": "The structure of scientific collaboration networks", + "doi": "10.1073/pnas.98.2.404", + "nodeyear": 2001, + "ref-by-count": 2818, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1052927616", + "attributes": { + "title": "A mathematical theory of communication", + "doi": "10.1145/584091.584093", + "nodeyear": 2001, + "ref-by-count": 3058, + "is_input_DOI": false, + "category_for": "08:0.33;09:0.33;10:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1051806676", + "attributes": { + "title": "Nonlinear Dimensionality Reduction by Locally Linear Embedding", + "doi": "10.1126/science.290.5500.2323", + "nodeyear": 2000, + "ref-by-count": 9612, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1030365672", + "attributes": { + "title": "Engineering support vector machine kernels that recognize translation initiation sites", + "doi": "10.1093/bioinformatics/16.9.799", + "nodeyear": 2000, + "ref-by-count": 308, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1040647708", + "attributes": { + "title": "On the properties of small-world network models", + "doi": "10.1007/s100510050067", + "nodeyear": 2000, + "ref-by-count": 587, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1130196027", + "attributes": { + "title": "Ptolemy's Geography", + "doi": "10.1515/9780691214115", + "nodeyear": 2000, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1033827372", + "attributes": { + "title": "The Use of Visual Media in Renaissance Cosmography: the Cosmography of Peter Apian and Gemma Frisius 1", + "doi": "10.1080/0030923000360107", + "nodeyear": 2000, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1061157130", + "attributes": { + "title": "Normalized cuts and image segmentation", + "doi": "10.1109/34.868688", + "nodeyear": 2000, + "ref-by-count": 9404, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1114190635", + "attributes": { + "title": "Small Worlds", + "doi": "10.1515/9780691188331", + "nodeyear": 1999, + "ref-by-count": 1568, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1038563506", + "attributes": { + "title": "Scaling and percolation in the small-world network model", + "doi": "10.1103/physreve.60.7332", + "nodeyear": 1999, + "ref-by-count": 852, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1053982450", + "attributes": { + "title": "Copernicus and the Critics of Ptolemy", + "doi": "10.1177/002182869903000401", + "nodeyear": 1999, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "02:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1010080128", + "attributes": { + "title": "Emergence of Scaling in Random Networks", + "doi": "10.1126/science.286.5439.509", + "nodeyear": 1999, + "ref-by-count": 22617, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1026347712", + "attributes": { + "title": "Data clustering: a review", + "doi": "10.1145/331499.331504", + "nodeyear": 1999, + "ref-by-count": 8438, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1043494594", + "attributes": { + "title": "Citation Frequency and the Value of Patented Inventions", + "doi": "10.1162/003465399558265", + "nodeyear": 1999, + "ref-by-count": 872, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1051859332", + "attributes": { + "title": "New philosophy and old prejudices: Aspects of the reception of Copernicanism in a divided Europe", + "doi": "10.1016/s0039-3681(98)00049-1", + "nodeyear": 1999, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "22:0.60;21:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1036803595", + "attributes": { + "title": "Bede: The Reckoning of Time", + "doi": "10.3828/978-0-85323-693-1", + "nodeyear": 1999, + "ref-by-count": 85, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1030536399", + "attributes": { + "title": "Sacrobosco Illustrated", + "doi": "10.1163/9789004247505_008", + "nodeyear": 1999, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1029804823", + "attributes": { + "title": "Chemical Similarity Searching", + "doi": "10.1021/ci9800211", + "nodeyear": 1998, + "ref-by-count": 1306, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1019671707", + "attributes": { + "title": "Nonlinear Component Analysis as a Kernel Eigenvalue Problem", + "doi": "10.1162/089976698300017467", + "nodeyear": 1998, + "ref-by-count": 5184, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1014837024", + "attributes": { + "title": "Peer review of grant applications: what do we know?", + "doi": "10.1016/s0140-6736(97)11129-1", + "nodeyear": 1998, + "ref-by-count": 92, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1035913093", + "attributes": { + "title": "The anatomy of a large-scale hypertextual Web search engine", + "doi": "10.1016/s0169-7552(98)00110-x", + "nodeyear": 1998, + "ref-by-count": 8043, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1032170849", + "attributes": { + "title": "Universities as a Source of Commercial Technology: A Detailed Analysis of University Patenting, 19651988", + "doi": "10.1162/003465398557221", + "nodeyear": 1998, + "ref-by-count": 737, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1065027456", + "attributes": { + "title": "Practical Geometry and Operative Knowledge", + "doi": "10.1353/con.1998.0010", + "nodeyear": 1998, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "20:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1031907170", + "attributes": { + "title": "Universities and the market for intellectual property in the life sciences", + "doi": "10.1002/(sici)1520-6688(199821)17:2<253::aid-pam8>3.0.co;2-g", + "nodeyear": 1998, + "ref-by-count": 156, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1011815255", + "attributes": { + "title": "The Mentor's Perspective: A Qualitative Inquiry and Future Research Agenda", + "doi": "10.1006/jvbe.1997.1596", + "nodeyear": 1997, + "ref-by-count": 283, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1054189610", + "attributes": { + "title": "UNRAVELING THE PROCESS OF CREATIVE DESTRUCTION: COMPLEMENTARY ASSETS AND INCUMBENT SURVIVAL IN THE TYPESETTER INDUSTRY", + "doi": "10.1002/(sici)1097-0266(199707)18:1+<119::aid-smj921>3.3.co;2-s", + "nodeyear": 1997, + "ref-by-count": 516, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1051365551", + "attributes": { + "title": "Multitask Learning", + "doi": "10.1023/a:1007379606734", + "nodeyear": 1997, + "ref-by-count": 2482, + "is_input_DOI": false, + "category_for": "08:0.50;17:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1020223525", + "attributes": { + "title": "Celestial Motions in the Late Middle Ages", + "doi": "10.1163/157338297x00096", + "nodeyear": 1997, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1042390054", + "attributes": { + "title": "Creative Productivity: A Predictive and Explanatory Model of Career Trajectories and Landmarks", + "doi": "10.1037/0033-295x.104.1.66", + "nodeyear": 1997, + "ref-by-count": 430, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1069909139", + "attributes": { + "title": "Interorganizational Collaboration and the Locus of Innovation: Networks of Learning in Biotechnology", + "doi": "10.2307/2393988", + "nodeyear": 1996, + "ref-by-count": 4996, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1037318791", + "attributes": { + "title": "Because the Authority of My Superiors Commands: Censorship, Physics and the German Jesuits 1", + "doi": "10.1163/157338296x00060", + "nodeyear": 1996, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1103086411", + "attributes": { + "title": "Technical Progress and Co-Invention in Computing and in the Uses of Computers", + "doi": "10.2307/2534746", + "nodeyear": 1996, + "ref-by-count": 110, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1099492343", + "attributes": { + "title": "The Structure of Scientific Revolutions", + "doi": "10.7208/chicago/9780226458106.001.0001", + "nodeyear": 1996, + "ref-by-count": 3303, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1069991553", + "attributes": { + "title": "Scale, scope, and spillovers: the determinants of research productivity in drug discovery.", + "doi": "10.2307/2555791", + "nodeyear": 1996, + "ref-by-count": 823, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1060812205", + "attributes": { + "title": "Bose-Einstein Condensation in a Gas of Sodium Atoms", + "doi": "10.1103/physrevlett.75.3969", + "nodeyear": 1995, + "ref-by-count": 4194, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1010701585", + "attributes": { + "title": "A Jupiter-mass companion to a solar-type star", + "doi": "10.1038/378355a0", + "nodeyear": 1995, + "ref-by-count": 2594, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1098679021", + "attributes": { + "title": "Science and Innovation", + "doi": "10.1017/cbo9780511522031", + "nodeyear": 1995, + "ref-by-count": 181, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1098665613", + "attributes": { + "title": "The Transformation of Natural Philosophy", + "doi": "10.1017/cbo9780511598524", + "nodeyear": 1995, + "ref-by-count": 94, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1058652299", + "attributes": { + "title": "The Reception of Copernicus in Sixteenth-Century Spain: The Case of Diego de Zuniga", + "doi": "10.1086/357075", + "nodeyear": 1995, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "21:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1041900902", + "attributes": { + "title": "American universities and technical advance in industry", + "doi": "10.1016/0048-7333(94)90042-6", + "nodeyear": 1994, + "ref-by-count": 727, + "is_input_DOI": false, + "category_for": "15:0.60;14:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1067402765", + "attributes": { + "title": "John of Sacrobosco and the Calendar", + "doi": "10.1484/j.viator.2.301215", + "nodeyear": 1994, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "20:0.50;21:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1099515543", + "attributes": { + "title": "Between Copernicus and Galileo", + "doi": "10.7208/chicago/9780226469263.001.0001", + "nodeyear": 1994, + "ref-by-count": 78, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1062950852", + "attributes": { + "title": "SIGNATURE VERIFICATION USING A \u201cSIAMESE\u201d TIME DELAY NEURAL NETWORK", + "doi": "10.1142/s0218001493000339", + "nodeyear": 1993, + "ref-by-count": 601, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1045381538", + "attributes": { + "title": "Word frequency and entropy of symbolic sequences: a dynamical perspective", + "doi": "10.1016/0960-0779(92)90058-u", + "nodeyear": 1992, + "ref-by-count": 116, + "is_input_DOI": false, + "category_for": "08:0.33;01:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1016681311", + "attributes": { + "title": "Mentorship and career mobility: An empirical investigation", + "doi": "10.1002/job.4030130206", + "nodeyear": 1992, + "ref-by-count": 578, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1131988437", + "attributes": { + "title": "La primera versi\u00f3n castellana de De Revolutionibus Orbium Caelestium: Juan Cedillo D\u00edaz (1620-1625)", + "doi": "10.3989/asclepio.1991.v43.1.547", + "nodeyear": 1991, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1064733117", + "attributes": { + "title": "Exploration and Exploitation in Organizational Learning", + "doi": "10.1287/orsc.2.1.71", + "nodeyear": 1991, + "ref-by-count": 11972, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1099569448", + "attributes": { + "title": "Medieval and Early Renaissance Medicine", + "doi": "10.7208/chicago/9780226761312.001.0001", + "nodeyear": 1990, + "ref-by-count": 370, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1069991286", + "attributes": { + "title": "A Penny for Your Quotes: Patent Citations and the Value of Innovations", + "doi": "10.2307/2555502", + "nodeyear": 1990, + "ref-by-count": 1813, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1063612266", + "attributes": { + "title": "Sacrobosco as a Textbook", + "doi": "10.1177/002182868801900404", + "nodeyear": 1988, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "02:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1089402427", + "attributes": { + "title": "The conditions of enquiry: Printing and censorship", + "doi": "10.1017/chol9780521251044.004", + "nodeyear": 1988, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1070113220", + "attributes": { + "title": "The First Call for Press Censorship: Niccol\u00f2 Perotti, Giovanni Andrea Bussi, Antonio Moreto, and the Editing of Pliny's Natural History*", + "doi": "10.2307/2862242", + "nodeyear": 1988, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1060796158", + "attributes": { + "title": "Self-organized criticality: An explanation of the 1/f noise", + "doi": "10.1103/physrevlett.59.381", + "nodeyear": 1987, + "ref-by-count": 5617, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058663219", + "attributes": { + "title": "Peurbach's Theoricae Novae Planetarum: A Translation with Commentary", + "doi": "10.1086/368660", + "nodeyear": 1987, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "20:0.33;21:0.33;22:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1069908269", + "attributes": { + "title": "Technological Discontinuities and Organizational Environments", + "doi": "10.2307/2392832", + "nodeyear": 1986, + "ref-by-count": 3601, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1053961832", + "attributes": { + "title": "In Quest of Sacrobosco", + "doi": "10.1177/002182868501600302", + "nodeyear": 1985, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "02:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1050277929", + "attributes": { + "title": "Funding Science: The Real Defects of Peer Review and An Alternative To It", + "doi": "10.1177/016224398501000309", + "nodeyear": 1985, + "ref-by-count": 105, + "is_input_DOI": false, + "category_for": "11:0.33;16:0.33;22:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1022069897", + "attributes": { + "title": "Large losses of total ozone in Antarctica reveal seasonal ClOx/NOx interaction", + "doi": "10.1038/315207a0", + "nodeyear": 1985, + "ref-by-count": 2669, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1017569886", + "attributes": { + "title": "P\u00f3lya-like urns and the Ewens' sampling formula", + "doi": "10.1007/bf00275863", + "nodeyear": 1984, + "ref-by-count": 137, + "is_input_DOI": false, + "category_for": "01:0.50;06:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1069639422", + "attributes": { + "title": "Econometric Models for Count Data with an Application to the Patents-R & D Relationship", + "doi": "10.2307/1911191", + "nodeyear": 1984, + "ref-by-count": 2386, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1071292470", + "attributes": { + "title": "Quelle est la plus ancienne carte moderne de la France ?", + "doi": "10.3406/geo.1983.20208", + "nodeyear": 1983, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1034715224", + "attributes": { + "title": "The Significance of the Copernican ORBS", + "doi": "10.1177/002182868201300302", + "nodeyear": 1982, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "02:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1054549387", + "attributes": { + "title": "Technological paradigms and technological trajectories A suggested interpretation of the determinants and directions of technical change", + "doi": "10.1016/0048-7333(82)90016-6", + "nodeyear": 1982, + "ref-by-count": 3963, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1053887843", + "attributes": { + "title": "The Origins of the \u201cTheorica Planetarum\u201d", + "doi": "10.1177/002182868101200203", + "nodeyear": 1981, + "ref-by-count": 13, + "is_input_DOI": false, + "category_for": "02:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1063712120", + "attributes": { + "title": "The Astronomer's Role in the Sixteenth Century: A Preliminary Study", + "doi": "10.1177/007327538001800202", + "nodeyear": 1980, + "ref-by-count": 96, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1046011858", + "attributes": { + "title": "The forging of modern realism: Clavius and Kepler against the sceptics", + "doi": "10.1016/0039-3681(79)90014-1", + "nodeyear": 1979, + "ref-by-count": 54, + "is_input_DOI": false, + "category_for": "22:0.60;21:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1042797803", + "attributes": { + "title": "The file drawer problem and tolerance for null results", + "doi": "10.1037/0033-2909.86.3.638", + "nodeyear": 1979, + "ref-by-count": 5433, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1028634645", + "attributes": { + "title": "Saving the Appearances", + "doi": "10.1017/s0009838800037861", + "nodeyear": 1978, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1111930785", + "attributes": { + "title": "The Essential Tension", + "doi": "10.7208/chicago/9780226217239.001.0001", + "nodeyear": 1977, + "ref-by-count": 2113, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1038956878", + "attributes": { + "title": "A general theory of bibliometric and other cumulative advantage processes", + "doi": "10.1002/asi.4630270505", + "nodeyear": 1976, + "ref-by-count": 1115, + "is_input_DOI": false, + "category_for": "18:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1063830967", + "attributes": { + "title": "The specificity of the scientific field and the social conditions of the progress of reason", + "doi": "10.1177/053901847501400602", + "nodeyear": 1975, + "ref-by-count": 750, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058646700", + "attributes": { + "title": "Oronce Fine's De sinibus libri II: The First Printed Trigonometric Treatise of the French Renaissance", + "doi": "10.1086/351476", + "nodeyear": 1975, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "21:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1058646655", + "attributes": { + "title": "The Melanchthon Circle, Rheticus, and the Wittenberg Interpretation of the Copernican Theory", + "doi": "10.1086/351431", + "nodeyear": 1975, + "ref-by-count": 83, + "is_input_DOI": false, + "category_for": "21:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1051365976", + "attributes": { + "title": "Philosophy and Science in Sixteenth-Century Universities: Some Preliminary Comments", + "doi": "10.1007/978-94-010-1781-7_13", + "nodeyear": 1975, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1022110011", + "attributes": { + "title": "A History of Ancient Mathematical Astronomy", + "doi": "10.1007/978-3-642-61910-6", + "nodeyear": 1975, + "ref-by-count": 412, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1032914843", + "attributes": { + "title": "The University of Pisa in the Renaissance", + "doi": "10.1080/0046760740030101", + "nodeyear": 1974, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "13:0.33;21:0.33;22:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1053425592", + "attributes": { + "title": "Rheticus as Editor of Sacrobosco", + "doi": "10.1007/978-94-010-2115-9_20", + "nodeyear": 1974, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1014058264", + "attributes": { + "title": "Co\u2010citation in the scientific literature: A new measure of the relationship between two documents", + "doi": "10.1002/asi.4630240406", + "nodeyear": 1973, + "ref-by-count": 2362, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062505982", + "attributes": { + "title": "Citation Analysis as a Tool in Journal Evaluation", + "doi": "10.1126/science.178.4060.471", + "nodeyear": 1972, + "ref-by-count": 1746, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1058645878", + "attributes": { + "title": "Rheticus' Earliest Extant Letter to Paul Eber", + "doi": "10.1086/350654", + "nodeyear": 1970, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "21:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1070653315", + "attributes": { + "title": "The Arabic Version of Ptolemy's Planetary Hypotheses", + "doi": "10.2307/598158", + "nodeyear": 1970, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1017731775", + "attributes": { + "title": "How did Oronce Fine draw his large map of France?", + "doi": "10.1080/03085697008592349", + "nodeyear": 1970, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "09:0.33;04:0.33;21:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1069593845", + "attributes": { + "title": "Nicole Oresme and the Medieval Geometry of Qualities and Motions: A Treatise on the Uniformity and Difformity of Intensities Known as Tractatus de Configurationibus Qualitatum et Motuum", + "doi": "10.2307/1841947", + "nodeyear": 1969, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058645620", + "attributes": { + "title": "Homocentric Astronomy in the Latin West. The De reprobatione ecentricorum et epiciclorum of Henry of Hesse", + "doi": "10.1086/350396", + "nodeyear": 1968, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "21:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1081235332", + "attributes": { + "title": "The Matthew effect in science. The reward and communication systems of science are considered.", + "doi": "", + "nodeyear": 1968, + "ref-by-count": 413, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1062493069", + "attributes": { + "title": "The Matthew Effect in Science", + "doi": "10.1126/science.159.3810.56", + "nodeyear": 1968, + "ref-by-count": 3825, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1069752996", + "attributes": { + "title": "Nobel laureates in science: patterns of productivity, collaboration, and authorship.", + "doi": "10.2307/2091086", + "nodeyear": 1967, + "ref-by-count": 213, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062485810", + "attributes": { + "title": "Networks of Scientific Papers", + "doi": "10.1126/science.149.3683.510", + "nodeyear": 1965, + "ref-by-count": 1808, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1014657651", + "attributes": { + "title": "The cosmographic heart: Cordiform maps of the 16th century", + "doi": "10.1080/03085696508592261", + "nodeyear": 1965, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "09:0.33;04:0.33;21:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1113782032", + "attributes": { + "title": "Little Science, Big Science", + "doi": "10.7312/pric91844", + "nodeyear": 1963, + "ref-by-count": 1690, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1012452641", + "attributes": { + "title": "Invention and Innovation in the Petroleum Refining Industry", + "doi": "10.1515/9781400879762-012", + "nodeyear": 1962, + "ref-by-count": 67, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1058644692", + "attributes": { + "title": "The Function of Measurement in Modern Physical Science", + "doi": "10.1086/349468", + "nodeyear": 1961, + "ref-by-count": 216, + "is_input_DOI": false, + "category_for": "21:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1069758605", + "attributes": { + "title": "A Measure of the Rate of Technological Progress in the Petroleum Refining Industry", + "doi": "10.2307/2097628", + "nodeyear": 1958, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062466125", + "attributes": { + "title": "Citation Indexes for Science", + "doi": "10.1126/science.122.3159.108", + "nodeyear": 1955, + "ref-by-count": 1480, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1058644506", + "attributes": { + "title": "Regiomontanus' notes on al-Bitr\u00fbj\u00ee's astronomy.", + "doi": "10.1086/349282", + "nodeyear": 1951, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "21:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1070121193", + "attributes": { + "title": "Marlowe's Astronomy and Renaissance Skepticism", + "doi": "10.2307/2871447", + "nodeyear": 1946, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "20:0.50;21:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1071290041", + "attributes": { + "title": "La grande carte de France d'Oronce Fine", + "doi": "10.3406/geo.1935.11062", + "nodeyear": 1935, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1032339462", + "attributes": { + "title": "Plancks Gesetz und Lichtquantenhypothese", + "doi": "10.1007/bf01327326", + "nodeyear": 1924, + "ref-by-count": 788, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1019640529", + "attributes": { + "title": "\u00c9tude sur deux cartes d'Oronce Fine de 1531 et 1536", + "doi": "10.3406/jsa.1922.3993", + "nodeyear": 1922, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1051786609", + "attributes": { + "title": "Un g\u00e9ographe dauphinois : Oronce Fine et le Dauphin\u00e9 sur sa carte de France de 1525", + "doi": "10.3406/rga.1918.4716", + "nodeyear": 1918, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1013108089", + "attributes": { + "title": "Defining service innovation: A review and synthesis", + "doi": "10.1016/j.jbusres.2015.12.055", + "nodeyear": 2016, + "ref-by-count": 178, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1044960059", + "attributes": { + "title": "Assessing evaluation procedures for individual researchers: The case of the Italian National Scientific Qualification", + "doi": "10.1016/j.joi.2016.01.009", + "nodeyear": 2016, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "01:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1048745116", + "attributes": { + "title": "A vector for measuring obsolescence of scientific articles", + "doi": "10.1007/s11192-016-1884-7", + "nodeyear": 2016, + "ref-by-count": 26, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1068771247", + "attributes": { + "title": "A Bibliometric Framework for Identifying \u201cPrinces\u201d Who Wake up the \u201cSleeping Beauty\u201d in Challenge-type Scientific Discoveries", + "doi": "10.20309/jdis.201605", + "nodeyear": 2016, + "ref-by-count": 20, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1014381762", + "attributes": { + "title": "Automated Research Impact Assessment: a new bibliometrics approach", + "doi": "10.1007/s11192-015-1828-7", + "nodeyear": 2016, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1068771241", + "attributes": { + "title": "A bibliometric framework for identifying \u201cprinces\u201d who wake up the \u201csleeping beauty\u201d in challenge-type scientific discoveries", + "doi": "10.20309/201602", + "nodeyear": 2016, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1047473629", + "attributes": { + "title": "Systematic Methodology for Excavating Sleeping Beauty Publications and Their Princes from Medical and Biological Engineering Studies", + "doi": "10.1007/s40846-015-0091-y", + "nodeyear": 2015, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1032833243", + "attributes": { + "title": "Dormitory of Physical and Engineering Sciences: Sleeping Beauties May Be Sleeping Innovations", + "doi": "10.1371/journal.pone.0139786", + "nodeyear": 2015, + "ref-by-count": 51, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1071880179", + "attributes": { + "title": "The Interactions between Information and Communication Technologies and Innovation in Services: A Conceptual Typology", + "doi": "10.4018/ijisss.2015070102", + "nodeyear": 2015, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "08:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1015196947", + "attributes": { + "title": "Die Zukunft der Wissensspeicher: Forschen, Sammeln und Vermitteln im 21. Jahrhundert D\u00fcsseldorf, 5.\u20136. M\u00e4rz 2015", + "doi": "10.1515/abitech-2015-0016", + "nodeyear": 2015, + "ref-by-count": 5, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1056448344", + "attributes": { + "title": "\u2018Sleeping beauty\u2019 papers slumber for decades", + "doi": "10.1038/nature.2015.17615", + "nodeyear": 2015, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1028639808", + "attributes": { + "title": "Sleeping beauties in genius work: When were they awakened?", + "doi": "10.1002/asi.23380", + "nodeyear": 2015, + "ref-by-count": 30, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1068746655", + "attributes": { + "title": "Predicting Organisational Performance Through Innovation, Quality And Inter-Organisational Systems: A Public Sector Perspective", + "doi": "10.19030/jabr.v31i3.9227", + "nodeyear": 2015, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1031420226", + "attributes": { + "title": "Network effects on organizational decision-making: Blended social mechanisms and IPO withdrawal", + "doi": "10.1016/j.socnet.2014.11.004", + "nodeyear": 2015, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1090002450", + "attributes": { + "title": "Taking time seriously", + "doi": "10.14361/9783839427422-006", + "nodeyear": 2015, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1039052181", + "attributes": { + "title": "Exploring the link between research and economic growth: an empirical study of China and USA", + "doi": "10.1007/s11135-015-0191-3", + "nodeyear": 2015, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "16:0.33;17:0.33;01:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1014180068", + "attributes": { + "title": "Visualizing the intellectual structure and evolution of innovation systems research: a bibliometric analysis", + "doi": "10.1007/s11192-014-1517-y", + "nodeyear": 2015, + "ref-by-count": 166, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1013505792", + "attributes": { + "title": "Performance-based funding and university research productivity: the moderating effect of university legitimacy", + "doi": "10.1007/s10961-014-9379-2", + "nodeyear": 2014, + "ref-by-count": 46, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1059983449", + "attributes": { + "title": "Patents and Cumulative Innovation: Causal Evidence from the Courts *", + "doi": "10.1093/qje/qju029", + "nodeyear": 2014, + "ref-by-count": 187, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1037671103", + "attributes": { + "title": "Let\u2019s not forget plants", + "doi": "10.1088/1478-3975/11/5/053008", + "nodeyear": 2014, + "ref-by-count": 2, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;06:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1016678991", + "attributes": { + "title": "On the citation lifecycle of papers with delayed recognition", + "doi": "10.1016/j.joi.2014.08.002", + "nodeyear": 2014, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "01:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1046310592", + "attributes": { + "title": "Together we stand", + "doi": "10.1038/nphys3110", + "nodeyear": 2014, + "ref-by-count": 24, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1045491249", + "attributes": { + "title": "Predicting scientific success based on coauthorship networks", + "doi": "10.1140/epjds/s13688-014-0009-x", + "nodeyear": 2014, + "ref-by-count": 104, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1034891992", + "attributes": { + "title": "Collaboration: Strength in diversity", + "doi": "10.1038/513305a", + "nodeyear": 2014, + "ref-by-count": 120, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1030011839", + "attributes": { + "title": "La natura pratica del Trattato della Sfera di Galileo Galilei", + "doi": "10.1515/9783110314977.321", + "nodeyear": 2014, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1093561777", + "attributes": { + "title": "Identifying Princes of Sleeping Beauty - Knowledge Mapping in Discovering Princes", + "doi": "10.1109/icmse.2014.6930325", + "nodeyear": 2014, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1016108444", + "attributes": { + "title": "The Shockley\u2010Queisser paper \u2013 A notable example of a scientific sleeping beauty", + "doi": "10.1002/andp.201400806", + "nodeyear": 2014, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1000778894", + "attributes": { + "title": "Multilayer networks", + "doi": "10.1093/comnet/cnu016", + "nodeyear": 2014, + "ref-by-count": 1821, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1026812745", + "attributes": { + "title": "A study of the \u201cheartbeat spectra\u201d for \u201csleeping beauties\u201d", + "doi": "10.1016/j.joi.2014.04.002", + "nodeyear": 2014, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "01:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1026919963", + "attributes": { + "title": "Navigability of interconnected networks under random failures", + "doi": "10.1073/pnas.1318469111", + "nodeyear": 2014, + "ref-by-count": 269, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1007014462", + "attributes": { + "title": "Contributions and challenges for network models in cognitive neuroscience", + "doi": "10.1038/nn.3690", + "nodeyear": 2014, + "ref-by-count": 536, + "is_input_DOI": false, + "category_for": "11:0.50;17:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1021906753", + "attributes": { + "title": "Structural measures for multiplex networks", + "doi": "10.1103/physreve.89.032804", + "nodeyear": 2014, + "ref-by-count": 390, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1072900634", + "attributes": { + "title": "Making the Most of Where You Are: Geography, Networks, and Innovation in Organizations", + "doi": "10.5465/amj.2012.0585", + "nodeyear": 2014, + "ref-by-count": 96, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1016073101", + "attributes": { + "title": "Competition-Induced Criticality in a Model of Meme Popularity", + "doi": "10.1103/physrevlett.112.048701", + "nodeyear": 2014, + "ref-by-count": 91, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1044890497", + "attributes": { + "title": "Ancient Pneumatics Transformed during the Early Modern Period", + "doi": "10.1163/18253911-02901005", + "nodeyear": 2014, + "ref-by-count": 7, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1007679766", + "attributes": { + "title": "Introduction", + "doi": "10.1163/18253911-02901001", + "nodeyear": 2014, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1039913638", + "attributes": { + "title": "How to improve the prediction based on citation impact percentiles for years shortly after the publication date?", + "doi": "10.1016/j.joi.2013.11.005", + "nodeyear": 2014, + "ref-by-count": 55, + "is_input_DOI": false, + "category_for": "01:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1035018770", + "attributes": { + "title": "Regularity in the time-dependent distribution of the percentage of never-cited papers: An empirical pilot study based on the six journals", + "doi": "10.1016/j.joi.2013.11.002", + "nodeyear": 2014, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "01:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1015730298", + "attributes": { + "title": "Citation curves of \u201call-elements-sleeping-beauties\u201d: \u201cflash in the pan\u201d first and then \u201cdelayed recognition\u201d", + "doi": "10.1007/s11192-013-1217-z", + "nodeyear": 2013, + "ref-by-count": 40, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1028417932", + "attributes": { + "title": "Two decades of research on innovation in services: Which place for public services?", + "doi": "10.1016/j.strueco.2013.06.005", + "nodeyear": 2013, + "ref-by-count": 124, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1032192979", + "attributes": { + "title": "Percolation in multiplex networks with overlap", + "doi": "10.1103/physreve.88.052811", + "nodeyear": 2013, + "ref-by-count": 143, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1018743536", + "attributes": { + "title": "Contact-based social contagion in multiplex networks", + "doi": "10.1103/physreve.88.050801", + "nodeyear": 2013, + "ref-by-count": 170, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1048382490", + "attributes": { + "title": "Which percentile-based approach should be preferred for calculating normalized citation impact values? An empirical comparison of five approaches including a newly developed citation-rank approach (P100)", + "doi": "10.1016/j.joi.2013.09.003", + "nodeyear": 2013, + "ref-by-count": 39, + "is_input_DOI": false, + "category_for": "01:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1030374839", + "attributes": { + "title": "Abrupt transition in the structural formation of interconnected networks", + "doi": "10.1038/nphys2761", + "nodeyear": 2013, + "ref-by-count": 243, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1046842923", + "attributes": { + "title": "Innovation as a nonlinear process, the scientometric perspective, and the specification of an \u2018innovation opportunities explorer\u2019", + "doi": "10.1080/09537325.2013.801948", + "nodeyear": 2013, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "15:0.50;14:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1017228923", + "attributes": { + "title": "Remote Synchronization Reveals Network Symmetries and Functional Modules", + "doi": "10.1103/physrevlett.110.174102", + "nodeyear": 2013, + "ref-by-count": 169, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1034924664", + "attributes": { + "title": "Phase transition in the economically modeled growth of a cellular nervous system", + "doi": "10.1073/pnas.1300753110", + "nodeyear": 2013, + "ref-by-count": 53, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1059192717", + "attributes": { + "title": "Defining physics", + "doi": "10.1088/2058-7058/26/04/27", + "nodeyear": 2013, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1016099829", + "attributes": { + "title": "Management Innovation: Management as Fertile Ground for Innovation", + "doi": "10.1111/emre.12007", + "nodeyear": 2013, + "ref-by-count": 165, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1017758621", + "attributes": { + "title": "Robust detection of dynamic community structure in networks", + "doi": "10.1063/1.4790830", + "nodeyear": 2013, + "ref-by-count": 334, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1036760492", + "attributes": { + "title": "Emergence of network features from multiplexity", + "doi": "10.1038/srep01344", + "nodeyear": 2013, + "ref-by-count": 340, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1018869280", + "attributes": { + "title": "Phylomemetic Patterns in Science Evolution\u2014The Rise and Fall of Scientific Fields", + "doi": "10.1371/journal.pone.0054847", + "nodeyear": 2013, + "ref-by-count": 71, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058853568", + "attributes": { + "title": "Intellectual property rights and innovation: Evidence from the human genome.", + "doi": "10.1086/669706", + "nodeyear": 2013, + "ref-by-count": 230, + "is_input_DOI": false, + "category_for": "14:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1019055366", + "attributes": { + "title": "Global Multi-Level Analysis of the \u2018Scientific Food Web'", + "doi": "10.1038/srep01167", + "nodeyear": 2013, + "ref-by-count": 44, + "is_input_DOI": false, + "category_for": "20:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1025149202", + "attributes": { + "title": "Identifying Technology Spillovers and Product Market Rivalry", + "doi": "10.3982/ecta9466", + "nodeyear": 2013, + "ref-by-count": 547, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1047080139", + "attributes": { + "title": "A quantitative study on the effectiveness of peer review for academic journals", + "doi": "10.1007/s11192-012-0879-2", + "nodeyear": 2012, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1041991056", + "attributes": { + "title": "Foreign-born scientists: mobility patterns for 16 countries", + "doi": "10.1038/nbt.2449", + "nodeyear": 2012, + "ref-by-count": 124, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1050077381", + "attributes": { + "title": "World citation and collaboration networks: uncovering the role of geography in science", + "doi": "10.1038/srep00902", + "nodeyear": 2012, + "ref-by-count": 165, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1008729064", + "attributes": { + "title": "Handful of papers dominates citation", + "doi": "10.1038/491040a", + "nodeyear": 2012, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1033711124", + "attributes": { + "title": "Temporal networks", + "doi": "10.1016/j.physrep.2012.03.001", + "nodeyear": 2012, + "ref-by-count": 1600, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1007657148", + "attributes": { + "title": "Technology push and demand pull perspectives in innovation studies: Current findings and future research directions", + "doi": "10.1016/j.respol.2012.03.021", + "nodeyear": 2012, + "ref-by-count": 253, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1048457283", + "attributes": { + "title": "Stability of Boolean multilevel networks", + "doi": "10.1103/physreve.86.036115", + "nodeyear": 2012, + "ref-by-count": 62, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1060760356", + "attributes": { + "title": "Dynamics of Ranking Processes in Complex Systems", + "doi": "10.1103/physrevlett.109.128701", + "nodeyear": 2012, + "ref-by-count": 43, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1020068263", + "attributes": { + "title": "Analysis of complex contagions in random multiplex networks", + "doi": "10.1103/physreve.86.036103", + "nodeyear": 2012, + "ref-by-count": 128, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1038777032", + "attributes": { + "title": "Innovation: Exploring the knowledge base", + "doi": "10.1016/j.respol.2012.03.008", + "nodeyear": 2012, + "ref-by-count": 219, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1034966535", + "attributes": { + "title": "Evolution of Cooperation in Multiplex Networks", + "doi": "10.1038/srep00620", + "nodeyear": 2012, + "ref-by-count": 309, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1016033709", + "attributes": { + "title": "Identifying Influential and Susceptible Members of Social Networks", + "doi": "10.1126/science.1215842", + "nodeyear": 2012, + "ref-by-count": 691, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1034884073", + "attributes": { + "title": "Social contagion theory: examining dynamic social networks and human\u2009behavior", + "doi": "10.1002/sim.5408", + "nodeyear": 2012, + "ref-by-count": 625, + "is_input_DOI": false, + "category_for": "11:0.50;01:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1012923141", + "attributes": { + "title": "Predictability of population displacement after the 2010 Haiti earthquake", + "doi": "10.1073/pnas.1203882109", + "nodeyear": 2012, + "ref-by-count": 332, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1024741540", + "attributes": { + "title": "Citation time window choice for research impact evaluation", + "doi": "10.1007/s11192-012-0775-9", + "nodeyear": 2012, + "ref-by-count": 198, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1039770910", + "attributes": { + "title": "Competition among memes in a world with limited attention", + "doi": "10.1038/srep00335", + "nodeyear": 2012, + "ref-by-count": 377, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1046994350", + "attributes": { + "title": "Correlated multiplexity and connectivity of multiplex random networks", + "doi": "10.1088/1367-2630/14/3/033027", + "nodeyear": 2012, + "ref-by-count": 144, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1022499367", + "attributes": { + "title": "A universal model for mobility and migration patterns", + "doi": "10.1038/nature10856", + "nodeyear": 2012, + "ref-by-count": 766, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1053455936", + "attributes": { + "title": "Sleeping beauties in ophthalmology", + "doi": "10.1007/s11192-012-0667-z", + "nodeyear": 2012, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1011774638", + "attributes": { + "title": "Suppressing cascades of load in interdependent networks", + "doi": "10.1073/pnas.1110586109", + "nodeyear": 2012, + "ref-by-count": 376, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1042336937", + "attributes": { + "title": "State of the art on the Systems of Innovation research: a bibliometrics study up to 2009", + "doi": "10.1007/s11192-012-0653-5", + "nodeyear": 2012, + "ref-by-count": 17, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1036654086", + "attributes": { + "title": "Why and how can \u201csleeping beauties\u201d be awakened?", + "doi": "10.1108/02640471211204033", + "nodeyear": 2012, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1052431272", + "attributes": { + "title": "The phenomenon of all-elements-sleeping-beauties in scientific literature", + "doi": "10.1007/s11192-012-0643-7", + "nodeyear": 2012, + "ref-by-count": 37, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1099475841", + "attributes": { + "title": "The Rate and Direction of Inventive Activity Revisited", + "doi": "10.7208/chicago/9780226473062.001.0001", + "nodeyear": 2012, + "ref-by-count": 281, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1008765199", + "attributes": { + "title": "Modelling dynamical processes in complex socio-technical systems", + "doi": "10.1038/nphys2160", + "nodeyear": 2011, + "ref-by-count": 441, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1007643971", + "attributes": { + "title": "Temporal Effects in the Growth of Networks", + "doi": "10.1103/physrevlett.107.238701", + "nodeyear": 2011, + "ref-by-count": 103, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1017241501", + "attributes": { + "title": "Recombinant search and breakthrough idea generation: An analysis of high impact papers in the social sciences", + "doi": "10.1016/j.respol.2011.06.009", + "nodeyear": 2011, + "ref-by-count": 135, + "is_input_DOI": false, + "category_for": "15:0.60;14:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1098756997", + "attributes": { + "title": "A Small Greek WorldNetworks in the Ancient Mediterranean", + "doi": "10.1093/acprof:oso/9780199734818.001.0001", + "nodeyear": 2011, + "ref-by-count": 245, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1064732764", + "attributes": { + "title": "Advancing the Conceptualization and Operationalization of Novelty in Organizational Research", + "doi": "10.1287/orsc.1100.0637", + "nodeyear": 2011, + "ref-by-count": 60, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1064525545", + "attributes": { + "title": "Climbing atop the Shoulders of Giants: The Impact of Institutions on Cumulative Research", + "doi": "10.1257/aer.101.5.1933", + "nodeyear": 2011, + "ref-by-count": 174, + "is_input_DOI": false, + "category_for": "14:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1018832857", + "attributes": { + "title": "Rescaling citations of publications in physics", + "doi": "10.1103/physreve.83.046116", + "nodeyear": 2011, + "ref-by-count": 75, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1026186841", + "attributes": { + "title": "Dynamic reconfiguration of human brain networks during learning", + "doi": "10.1073/pnas.1018985108", + "nodeyear": 2011, + "ref-by-count": 1115, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1000915598", + "attributes": { + "title": "Collective Response of Human Populations to Large-Scale Emergencies", + "doi": "10.1371/journal.pone.0017680", + "nodeyear": 2011, + "ref-by-count": 207, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1005764181", + "attributes": { + "title": "Career choices: The mobility imperative", + "doi": "10.1038/nj7335-563a", + "nodeyear": 2011, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1022949845", + "attributes": { + "title": "Spatial networks", + "doi": "10.1016/j.physrep.2010.11.002", + "nodeyear": 2011, + "ref-by-count": 1503, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1004145290", + "attributes": { + "title": "Entrepreneurship and Innovation in Second Tier Regions", + "doi": "10.4337/9780857938695", + "nodeyear": 2011, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1005783907", + "attributes": { + "title": "Quantitative Analysis of Culture Using Millions of Digitized Books", + "doi": "10.1126/science.1199644", + "nodeyear": 2010, + "ref-by-count": 1376, + "is_input_DOI": false, + "category_for": "20:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1005831504", + "attributes": { + "title": "Power law distributions in information science: Making the case for logarithmic binning", + "doi": "10.1002/asi.21426", + "nodeyear": 2010, + "ref-by-count": 71, + "is_input_DOI": false, + "category_for": "18:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1029598799", + "attributes": { + "title": "Reference standards and reference multipliers for the comparison of the citation impact of papers published in different time periods", + "doi": "10.1002/asi.21377", + "nodeyear": 2010, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1018062648", + "attributes": { + "title": "Modelling the scaling properties of human mobility", + "doi": "10.1038/nphys1760", + "nodeyear": 2010, + "ref-by-count": 732, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1071058538", + "attributes": { + "title": "On Sleeping Beauties, Princes and other tales of citation distributions ...", + "doi": "10.3152/095820210x514210;", + "nodeyear": 2010, + "ref-by-count": 47, + "is_input_DOI": false, + "category_for": "08:0.33;14:0.33;16:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1021348797", + "attributes": { + "title": "Nonuniversal power law scaling in the probability distribution of scientific citations", + "doi": "10.1073/pnas.1010757107", + "nodeyear": 2010, + "ref-by-count": 70, + "is_input_DOI": false, + "category_for": "18:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1016710118", + "attributes": { + "title": "Identification of influential spreaders in complex networks", + "doi": "10.1038/nphys1746", + "nodeyear": 2010, + "ref-by-count": 1775, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1019613081", + "attributes": { + "title": "Bibliometric reflections on the history of consumer research", + "doi": "10.1016/j.jcps.2010.06.002", + "nodeyear": 2010, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "17:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1027511483", + "attributes": { + "title": "Community Structure in Time-Dependent, Multiscale, and Multiplex Networks", + "doi": "10.1126/science.1184819", + "nodeyear": 2010, + "ref-by-count": 1306, + "is_input_DOI": false, + "category_for": "10:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1008897798", + "attributes": { + "title": "Statistical validation of a global model for the distribution of the ultimate number of citations accrued by papers published in a scientific journal", + "doi": "10.1002/asi.21335", + "nodeyear": 2010, + "ref-by-count": 71, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1010370510", + "attributes": { + "title": "Catastrophic cascade of failures in interdependent networks", + "doi": "10.1038/nature08932", + "nodeyear": 2010, + "ref-by-count": 2670, + "is_input_DOI": false, + "category_for": "10:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1107169203", + "attributes": { + "title": "Careers of Doctorate Holders", + "doi": "10.1787/5kmh8phxvvf5-en", + "nodeyear": 2010, + "ref-by-count": 39, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1098762313", + "attributes": { + "title": "Networks", + "doi": "10.1093/acprof:oso/9780199206650.001.0001", + "nodeyear": 2010, + "ref-by-count": 4860, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1036075467", + "attributes": { + "title": "Methods for measuring the citations and productivity of scientists across time and discipline", + "doi": "10.1103/physreve.81.036114", + "nodeyear": 2010, + "ref-by-count": 72, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1020482279", + "attributes": { + "title": "Community detection in graphs", + "doi": "10.1016/j.physrep.2009.11.002", + "nodeyear": 2010, + "ref-by-count": 6566, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1014496650", + "attributes": { + "title": "Age and Great Invention", + "doi": "10.1162/rest.2009.11724", + "nodeyear": 2010, + "ref-by-count": 157, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1048268212", + "attributes": { + "title": "Mapping Change in Large Networks", + "doi": "10.1371/journal.pone.0008694", + "nodeyear": 2010, + "ref-by-count": 377, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062461188", + "attributes": { + "title": "The Genetic Landscape of a Cell", + "doi": "10.1126/science.1180823", + "nodeyear": 2010, + "ref-by-count": 1715, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1006270814", + "attributes": { + "title": "Finding communities in directed networks", + "doi": "10.1103/physreve.81.016103", + "nodeyear": 2010, + "ref-by-count": 106, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1031817076", + "attributes": { + "title": "Networks as institutional support: law firm and venture capitalist relations and regional diversity in high-technology IPOs Foot notes", + "doi": "10.1108/s0277-2833(2010)0000021008", + "nodeyear": 2010, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "18:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1061389737", + "attributes": { + "title": "Synchronization and control of complex networks via contraction, adaptation and evolution", + "doi": "10.1109/mcas.2010.937884", + "nodeyear": 2010, + "ref-by-count": 101, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1051013912", + "attributes": { + "title": "Galileo Engineer", + "doi": "10.1007/978-90-481-8645-7", + "nodeyear": 2010, + "ref-by-count": 62, + "is_input_DOI": false, + "category_for": "22:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1021424991", + "attributes": { + "title": "Multiscale mobility networks and the spatial spreading of infectious diseases", + "doi": "10.1073/pnas.0906910106", + "nodeyear": 2009, + "ref-by-count": 845, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1009439765", + "attributes": { + "title": "THE IMPACT OF ACADEMIC PATENTING ON THE RATE, QUALITY AND DIRECTION OF (PUBLIC) RESEARCH OUTPUT*", + "doi": "10.1111/j.1467-6451.2009.00395.x", + "nodeyear": 2009, + "ref-by-count": 267, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1036242867", + "attributes": { + "title": "Beyond Word Frequency: Bursts, Lulls, and Scaling in the Temporal Distributions of Words", + "doi": "10.1371/journal.pone.0007678", + "nodeyear": 2009, + "ref-by-count": 110, + "is_input_DOI": false, + "category_for": "20:0.50;17:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1023521682", + "attributes": { + "title": "Diffusion of scientific credits and the ranking of scientists", + "doi": "10.1103/physreve.80.056103", + "nodeyear": 2009, + "ref-by-count": 230, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062851851", + "attributes": { + "title": "Power-Law Distributions in Empirical Data", + "doi": "10.1137/070710111", + "nodeyear": 2009, + "ref-by-count": 5563, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1045062320", + "attributes": { + "title": "h-Index: A review focused in its variants, computation and standardization for different scientific fields", + "doi": "10.1016/j.joi.2009.04.001", + "nodeyear": 2009, + "ref-by-count": 482, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1037883313", + "attributes": { + "title": "Inferring friendship network structure by using mobile phone data", + "doi": "10.1073/pnas.0900282106", + "nodeyear": 2009, + "ref-by-count": 1305, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1034086293", + "attributes": { + "title": "Columbia University's Axel Patents: Technology Transfer and Implications for the Bayh\u2010Dole Act", + "doi": "10.1111/j.1468-0009.2009.00575.x", + "nodeyear": 2009, + "ref-by-count": 33, + "is_input_DOI": false, + "category_for": "16:0.50;11:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1043190344", + "attributes": { + "title": "Opening up for competitive advantage \u2013 How Deutsche Telekom creates an open innovation ecosystem", + "doi": "10.1111/j.1467-9310.2009.00568.x", + "nodeyear": 2009, + "ref-by-count": 265, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1064715050", + "attributes": { + "title": "Application-Specific R&D Capabilities and the Advantage of Incumbents: Evidence from the Anticancer Drug Market", + "doi": "10.1287/mnsc.1090.1027", + "nodeyear": 2009, + "ref-by-count": 53, + "is_input_DOI": false, + "category_for": "08:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1028284674", + "attributes": { + "title": "Visualization of Interfirm Relations in a Converging Mobile Ecosystem", + "doi": "10.1057/jit.2008.34", + "nodeyear": 2009, + "ref-by-count": 187, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1007500896", + "attributes": { + "title": "The first-mover advantage in scientific publication", + "doi": "10.1209/0295-5075/86/68001", + "nodeyear": 2009, + "ref-by-count": 112, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1048392439", + "attributes": { + "title": "Properties of classical and quantum Jensen-Shannon divergence", + "doi": "10.1103/physreva.79.052311", + "nodeyear": 2009, + "ref-by-count": 107, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1003800792", + "attributes": { + "title": "The technological roadmap of Cisco's business ecosystem", + "doi": "10.1016/j.technovation.2009.01.007", + "nodeyear": 2009, + "ref-by-count": 152, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1014849114", + "attributes": { + "title": "The most influential journals: Impact Factor and Eigenfactor", + "doi": "10.1073/pnas.0903307106", + "nodeyear": 2009, + "ref-by-count": 117, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1011850909", + "attributes": { + "title": "Neurodegenerative Diseases Target Large-Scale Human Brain Networks", + "doi": "10.1016/j.neuron.2009.03.024", + "nodeyear": 2009, + "ref-by-count": 1662, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1002733277", + "attributes": { + "title": "Detecting the overlapping and hierarchical community structure in complex networks", + "doi": "10.1088/1367-2630/11/3/033015", + "nodeyear": 2009, + "ref-by-count": 1240, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1018328989", + "attributes": { + "title": "Disruptive technology: How Kodak missed the digital photography revolution", + "doi": "10.1016/j.jsis.2009.01.002", + "nodeyear": 2009, + "ref-by-count": 226, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062457502", + "attributes": { + "title": "Open Access and Global Participation in Science", + "doi": "10.1126/science.1154562", + "nodeyear": 2009, + "ref-by-count": 138, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062459206", + "attributes": { + "title": "Computational Social Science", + "doi": "10.1126/science.1167742", + "nodeyear": 2009, + "ref-by-count": 2020, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1004953014", + "attributes": { + "title": "Complex brain networks: graph theoretical analysis of structural and functional systems", + "doi": "10.1038/nrn2575", + "nodeyear": 2009, + "ref-by-count": 7316, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1042715776", + "attributes": { + "title": "How much and where? Private versus public universities' publication patterns in the information systems discipline", + "doi": "10.1002/asi.20986", + "nodeyear": 2009, + "ref-by-count": 14, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1021206245", + "attributes": { + "title": "Size limiting in Tsallis statistics", + "doi": "10.1016/j.physa.2008.09.009", + "nodeyear": 2008, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "01:0.60;02:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1095753288", + "attributes": { + "title": "Application of Supply Chain Performance Measurement Based on SCOR Model", + "doi": "10.1109/wicom.2008.1490", + "nodeyear": 2008, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "09:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1038422476", + "attributes": { + "title": "Organizational innovation: The challenge of measuring non-technical innovation in large-scale surveys", + "doi": "10.1016/j.technovation.2008.03.003", + "nodeyear": 2008, + "ref-by-count": 343, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1027884231", + "attributes": { + "title": "Nanotechnology, nanotoxicology, and neuroscience", + "doi": "10.1016/j.pneurobio.2008.09.009", + "nodeyear": 2008, + "ref-by-count": 310, + "is_input_DOI": false, + "category_for": "17:0.60;11:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1026427976", + "attributes": { + "title": "Geographical dispersal of mobile communication networks", + "doi": "10.1016/j.physa.2008.05.014", + "nodeyear": 2008, + "ref-by-count": 285, + "is_input_DOI": false, + "category_for": "01:0.60;02:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1025562430", + "attributes": { + "title": "The Science of Team Science Overview of the Field and Introduction to the Supplement", + "doi": "10.1016/j.amepre.2008.05.002", + "nodeyear": 2008, + "ref-by-count": 470, + "is_input_DOI": false, + "category_for": "11:0.50;13:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1002600046", + "attributes": { + "title": "Measuring the preferential attachment mechanism in citation networks", + "doi": "10.1016/j.physa.2008.03.017", + "nodeyear": 2008, + "ref-by-count": 55, + "is_input_DOI": false, + "category_for": "01:0.60;02:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1050427291", + "attributes": { + "title": "Interdisciplinarity as Teamwork", + "doi": "10.1177/1046496408317797", + "nodeyear": 2008, + "ref-by-count": 160, + "is_input_DOI": false, + "category_for": "17:0.60;15:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1034823586", + "attributes": { + "title": "Understanding individual human mobility patterns", + "doi": "10.1038/nature06958", + "nodeyear": 2008, + "ref-by-count": 3785, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1000918009", + "attributes": { + "title": "Analysis of the structure of complex networks at different resolution levels", + "doi": "10.1088/1367-2630/10/5/053039", + "nodeyear": 2008, + "ref-by-count": 364, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1001014997", + "attributes": { + "title": "Knowledge transfer and organizational learning in IS offshore sourcing", + "doi": "10.1016/j.omega.2006.06.008", + "nodeyear": 2008, + "ref-by-count": 75, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1007522887", + "attributes": { + "title": "Spreading of sexually transmitted diseases in heterosexual populations", + "doi": "10.1073/pnas.0707332105", + "nodeyear": 2008, + "ref-by-count": 85, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1063984691", + "attributes": { + "title": "Transferring Knowledge to Acquisition Joint Ventures: An Organizational Unlearning Perspective", + "doi": "10.1177/1350507607085169", + "nodeyear": 2008, + "ref-by-count": 69, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1040334453", + "attributes": { + "title": "Performance measurement of supply chain management using the analytical hierarchy process", + "doi": "10.1080/09537280701614407", + "nodeyear": 2007, + "ref-by-count": 85, + "is_input_DOI": false, + "category_for": "08:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1022275528", + "attributes": { + "title": "National scientific facilities and their science impact on nonbiomedical research", + "doi": "10.1073/pnas.0704416104", + "nodeyear": 2007, + "ref-by-count": 56, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1059823230", + "attributes": { + "title": "An Empirical Evaluation of Innovation Types and Organizational and Environmental Characteristics: Towards a Configuration Framework", + "doi": "10.1093/jopart/mum026", + "nodeyear": 2007, + "ref-by-count": 218, + "is_input_DOI": false, + "category_for": "16:0.60;15:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1027402365", + "attributes": { + "title": "Extracting the hierarchical organization of complex systems", + "doi": "10.1073/pnas.0703740104", + "nodeyear": 2007, + "ref-by-count": 393, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1003168943", + "attributes": { + "title": "Unified model for network dynamics exhibiting nonextensive statistics", + "doi": "10.1103/physreve.76.036111", + "nodeyear": 2007, + "ref-by-count": 29, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1029327122", + "attributes": { + "title": "Near linear time algorithm to detect community structures in large-scale networks", + "doi": "10.1103/physreve.76.036106", + "nodeyear": 2007, + "ref-by-count": 1961, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1008670010", + "attributes": { + "title": "Module identification in bipartite and directed networks", + "doi": "10.1103/physreve.76.036102", + "nodeyear": 2007, + "ref-by-count": 300, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1098905044", + "attributes": { + "title": "Quips, Quotes and Quanta", + "doi": "10.1142/6546", + "nodeyear": 2007, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1024151247", + "attributes": { + "title": "A mathematical theory of citing", + "doi": "10.1002/asi.20653", + "nodeyear": 2007, + "ref-by-count": 69, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1004481822", + "attributes": { + "title": "Integrating physical and genetic maps: from genomes to interaction networks", + "doi": "10.1038/nrg2144", + "nodeyear": 2007, + "ref-by-count": 159, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1059138571", + "attributes": { + "title": "The tails of rank-size distributions due to multiplicative processes: from power laws to stretched exponentials and beta-like functions", + "doi": "10.1088/1367-2630/9/8/286", + "nodeyear": 2007, + "ref-by-count": 32, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1047695691", + "attributes": { + "title": "Electrophysiological signatures of resting state networks in the human brain", + "doi": "10.1073/pnas.0700668104", + "nodeyear": 2007, + "ref-by-count": 1458, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1049169684", + "attributes": { + "title": "The Product Space Conditions the Development of Nations", + "doi": "10.1126/science.1144581", + "nodeyear": 2007, + "ref-by-count": 1200, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1006611388", + "attributes": { + "title": "Size reduction of complex networks preserving modularity", + "doi": "10.1088/1367-2630/9/6/176", + "nodeyear": 2007, + "ref-by-count": 217, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1019535441", + "attributes": { + "title": "Models for citation behavior", + "doi": "10.1007/s11192-007-1717-9", + "nodeyear": 2007, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1024193401", + "attributes": { + "title": "Mixture models and exploratory analysis in networks", + "doi": "10.1073/pnas.0610537104", + "nodeyear": 2007, + "ref-by-count": 357, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1063751106", + "attributes": { + "title": "Aardvark et al.: quality journals and gamesmanship in management studies", + "doi": "10.1177/0165551507077419", + "nodeyear": 2007, + "ref-by-count": 39, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1053516074", + "attributes": { + "title": "The human disease network", + "doi": "10.1073/pnas.0701361104", + "nodeyear": 2007, + "ref-by-count": 2443, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1098746504", + "attributes": { + "title": "Scale-Free Networks", + "doi": "10.1093/acprof:oso/9780199211517.001.0001", + "nodeyear": 2007, + "ref-by-count": 588, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1025075085", + "attributes": { + "title": "Structure and tie strengths in mobile communication networks", + "doi": "10.1073/pnas.0610245104", + "nodeyear": 2007, + "ref-by-count": 1221, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1006029486", + "attributes": { + "title": "An information-theoretic framework for resolving community structure in complex networks", + "doi": "10.1073/pnas.0611034104", + "nodeyear": 2007, + "ref-by-count": 524, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1042941276", + "attributes": { + "title": "Dynamical Organization of Cooperation in Complex Topologies", + "doi": "10.1103/physrevlett.98.108103", + "nodeyear": 2007, + "ref-by-count": 428, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1024174439", + "attributes": { + "title": "Majority model on a network with communities", + "doi": "10.1103/physreve.75.030101", + "nodeyear": 2007, + "ref-by-count": 88, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1030549695", + "attributes": { + "title": "Facilitating offshoring with enterprise technologies: Reducing operational friction in the governance and production of services", + "doi": "10.1016/j.jom.2007.02.006", + "nodeyear": 2007, + "ref-by-count": 76, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1107183884", + "attributes": { + "title": "Labour Market Characteristics and International Mobility of Doctorate Holders", + "doi": "10.1787/310254328811", + "nodeyear": 2007, + "ref-by-count": 22, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1044547381", + "attributes": { + "title": "Strategic decision making and support systems: Comparing American, Japanese and Chinese management", + "doi": "10.1016/j.dss.2006.10.005", + "nodeyear": 2007, + "ref-by-count": 112, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1028061681", + "attributes": { + "title": "Resolution limit in community detection", + "doi": "10.1073/pnas.0605965104", + "nodeyear": 2007, + "ref-by-count": 1876, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1059189256", + "attributes": { + "title": "The rise and rise of citation analysis", + "doi": "10.1088/2058-7058/20/1/33", + "nodeyear": 2007, + "ref-by-count": 182, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1030436057", + "attributes": { + "title": "Network-based prediction of protein function", + "doi": "10.1038/msb4100129", + "nodeyear": 2007, + "ref-by-count": 831, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1003730812", + "attributes": { + "title": "Competing through service: Insights from service-dominant logic", + "doi": "10.1016/j.jretai.2006.10.002", + "nodeyear": 2007, + "ref-by-count": 1048, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1017878304", + "attributes": { + "title": "Long\u2010term variations in the aging of scientific literature: From exponential growth to steady\u2010state science (1900\u20132004)", + "doi": "10.1002/asi.20744", + "nodeyear": 2007, + "ref-by-count": 96, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1036300352", + "attributes": { + "title": "How Does Tacit Knowledge Proliferate? An Episode-Based Perspective", + "doi": "10.1177/0170840606067666", + "nodeyear": 2006, + "ref-by-count": 67, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1026963668", + "attributes": { + "title": "Journal status", + "doi": "10.1007/s11192-006-0176-z", + "nodeyear": 2006, + "ref-by-count": 296, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1009790299", + "attributes": { + "title": "The Laplacian of a Graph as a Density Matrix: A Basic Combinatorial Approach to Separability of Mixed States", + "doi": "10.1007/s00026-006-0289-3", + "nodeyear": 2006, + "ref-by-count": 94, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1009367151", + "attributes": { + "title": "Information systems offshore outsourcing", + "doi": "10.1108/02635570610712555", + "nodeyear": 2006, + "ref-by-count": 36, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1064712648", + "attributes": { + "title": "Research on Innovation: A Review and Agenda for Marketing Science", + "doi": "10.1287/mksc.1050.0144", + "nodeyear": 2006, + "ref-by-count": 703, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1041564449", + "attributes": { + "title": "Theory and practise of the g-index", + "doi": "10.1007/s11192-006-0144-7", + "nodeyear": 2006, + "ref-by-count": 1145, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1021120999", + "attributes": { + "title": "Finding community structure in networks using the eigenvectors of matrices", + "doi": "10.1103/physreve.74.036104", + "nodeyear": 2006, + "ref-by-count": 2863, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1036357394", + "attributes": { + "title": "Selecting scientific excellence through committee peer review - A citation analysis of publications previously published to approval or rejection of post-doctoral research fellowship applicants", + "doi": "10.1007/s11192-006-0121-1", + "nodeyear": 2006, + "ref-by-count": 76, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1026168240", + "attributes": { + "title": "Phases of the Adoption of Innovation in Organizations: Effects of Environment, Organization and Top Managers1", + "doi": "10.1111/j.1467-8551.2006.00498.x", + "nodeyear": 2006, + "ref-by-count": 645, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1018388918", + "attributes": { + "title": "Modelling aging characteristics in citation networks", + "doi": "10.1016/j.physa.2005.12.044", + "nodeyear": 2006, + "ref-by-count": 44, + "is_input_DOI": false, + "category_for": "01:0.60;02:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1036285600", + "attributes": { + "title": "Statistical mechanics of community detection", + "doi": "10.1103/physreve.74.016110", + "nodeyear": 2006, + "ref-by-count": 1160, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1025386231", + "attributes": { + "title": "Cash for papers: putting a premium on publication", + "doi": "10.1038/441792b", + "nodeyear": 2006, + "ref-by-count": 48, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1016125157", + "attributes": { + "title": "Modularity and community structure in networks", + "doi": "10.1073/pnas.0601602103", + "nodeyear": 2006, + "ref-by-count": 6717, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1023957930", + "attributes": { + "title": "The place of serials in referencing practices: Comparing natural sciences and engineering with social sciences and humanities", + "doi": "10.1002/asi.20349", + "nodeyear": 2006, + "ref-by-count": 159, + "is_input_DOI": false, + "category_for": "20:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1002977218", + "attributes": { + "title": "INNOVATION TYPE AND DIFFUSION: AN EMPIRICAL ANALYSIS OF LOCAL GOVERNMENT", + "doi": "10.1111/j.1467-9299.2006.00004.x", + "nodeyear": 2006, + "ref-by-count": 191, + "is_input_DOI": false, + "category_for": "16:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1010283181", + "attributes": { + "title": "The role of culture on knowledge transfer: the case of the multinational corporation", + "doi": "10.1108/09696470610661117", + "nodeyear": 2006, + "ref-by-count": 65, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1011035454", + "attributes": { + "title": "Wiring optimization can relate neuronal structure and function", + "doi": "10.1073/pnas.0506806103", + "nodeyear": 2006, + "ref-by-count": 429, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1024622397", + "attributes": { + "title": "The role of the airline transportation network in the prediction and predictability of global epidemics", + "doi": "10.1073/pnas.0510525103", + "nodeyear": 2006, + "ref-by-count": 777, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1001373561", + "attributes": { + "title": "Statistical properties of bibliometric indicators: Research group indicator distributions and correlations", + "doi": "10.1002/asi.20284", + "nodeyear": 2006, + "ref-by-count": 70, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1034971106", + "attributes": { + "title": "The History and Meaning of the Journal Impact Factor", + "doi": "10.1001/jama.295.1.90", + "nodeyear": 2006, + "ref-by-count": 1559, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1037119647", + "attributes": { + "title": "The scaling laws of human travel", + "doi": "10.1038/nature04292", + "nodeyear": 2006, + "ref-by-count": 1472, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1073626410", + "attributes": { + "title": "Computing Communities in Large Networks Using Random Walks", + "doi": "10.7155/jgaa.00124", + "nodeyear": 2006, + "ref-by-count": 764, + "is_input_DOI": false, + "category_for": "01:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1026071205", + "attributes": { + "title": "Public management reform and organizational performance: An empirical assessment of the U.K. Labour government's public service improvement strategy", + "doi": "10.1002/pam.20177", + "nodeyear": 2006, + "ref-by-count": 132, + "is_input_DOI": false, + "category_for": "16:0.50;14:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1007734343", + "attributes": { + "title": "BioGRID: a general repository for interaction datasets", + "doi": "10.1093/nar/gkj109", + "nodeyear": 2005, + "ref-by-count": 2783, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1040645148", + "attributes": { + "title": "Are \u201cSleeping Beauties\u201d to be expected?", + "doi": "10.1007/s11192-005-0280-5", + "nodeyear": 2005, + "ref-by-count": 50, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1036031411", + "attributes": { + "title": "Power-law distributions for the citation index of scientific publications and scientists", + "doi": "10.1590/s0103-97332005000600012", + "nodeyear": 2005, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1015188349", + "attributes": { + "title": "Detection of community structures in networks via global optimization", + "doi": "10.1016/j.physa.2005.04.022", + "nodeyear": 2005, + "ref-by-count": 121, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1032858629", + "attributes": { + "title": "Jensen-Shannon divergence as a measure of distinguishability between mixed quantum states", + "doi": "10.1103/physreva.72.052310", + "nodeyear": 2005, + "ref-by-count": 104, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1053279052", + "attributes": { + "title": "The use of bibliometric indicators to explore industry\u2013academia collaboration trends over time in the field of membrane use for water treatment", + "doi": "10.1016/j.technovation.2004.06.003", + "nodeyear": 2005, + "ref-by-count": 41, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1027538273", + "attributes": { + "title": "A network-based ranking system for US college football", + "doi": "10.1088/1742-5468/2005/10/p10014", + "nodeyear": 2005, + "ref-by-count": 63, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1017878564", + "attributes": { + "title": "Comparing community structure identification", + "doi": "10.1088/1742-5468/2005/09/p09008", + "nodeyear": 2005, + "ref-by-count": 1753, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1058717761", + "attributes": { + "title": "Collaboration and Creativity: The Small World Problem", + "doi": "10.1086/432782", + "nodeyear": 2005, + "ref-by-count": 1021, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1008031163", + "attributes": { + "title": "Power laws, Pareto distributions and Zipf's law", + "doi": "10.1080/00107510500052444", + "nodeyear": 2005, + "ref-by-count": 3315, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1005495710", + "attributes": { + "title": "Community detection in complex networks using extremal optimization", + "doi": "10.1103/physreve.72.027104", + "nodeyear": 2005, + "ref-by-count": 1113, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1064220835", + "attributes": { + "title": "A Small-World Network Model of Cognitive Insight", + "doi": "10.1207/s15326934crj1702&3_2", + "nodeyear": 2005, + "ref-by-count": 54, + "is_input_DOI": false, + "category_for": "17:0.60;13:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1045576367", + "attributes": { + "title": "The Academic Ranking of World Universities", + "doi": "10.1080/03797720500260116", + "nodeyear": 2005, + "ref-by-count": 237, + "is_input_DOI": false, + "category_for": "13:0.50;14:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1032155732", + "attributes": { + "title": "Uncovering the overlapping community structure of complex networks in nature and society", + "doi": "10.1038/nature03607", + "nodeyear": 2005, + "ref-by-count": 3533, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1020080878", + "attributes": { + "title": "Citation Statistics from 110 Years of Physical Review", + "doi": "10.1063/1.1996475", + "nodeyear": 2005, + "ref-by-count": 289, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1098665419", + "attributes": { + "title": "Offshoring Information Technology", + "doi": "10.1017/cbo9780511541193", + "nodeyear": 2005, + "ref-by-count": 292, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1041161194", + "attributes": { + "title": "The origin of bursts and heavy tails in human dynamics", + "doi": "10.1038/nature03459", + "nodeyear": 2005, + "ref-by-count": 1487, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1032022529", + "attributes": { + "title": "SLEEPING BEAUTIES IN PSYCHOLOGY: Comparisons of \u201cHits\u201d and \u201cMissed Signals\u201d in Psychological Journals", + "doi": "10.1037/1093-4510.8.2.194", + "nodeyear": 2005, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1006049477", + "attributes": { + "title": "Gene Regulation at the Single-Cell Level", + "doi": "10.1126/science.1106914", + "nodeyear": 2005, + "ref-by-count": 867, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1087285507", + "attributes": { + "title": "Social Networks, the Tertius Iungens Orientation, and Involvement in Innovation", + "doi": "10.2189/asqu.2005.50.1.100", + "nodeyear": 2005, + "ref-by-count": 1132, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1021133597", + "attributes": { + "title": "Aging in citation networks", + "doi": "10.1016/j.physa.2004.08.048", + "nodeyear": 2005, + "ref-by-count": 56, + "is_input_DOI": false, + "category_for": "01:0.60;02:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1016416471", + "attributes": { + "title": "Functional cartography of complex metabolic networks", + "doi": "10.1038/nature03288", + "nodeyear": 2005, + "ref-by-count": 2348, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1112028538", + "attributes": { + "title": "Power Laws in the Information Production Process: Lotkaian Informetrics", + "doi": "10.1108/s1876-0562(2005)05", + "nodeyear": 2005, + "ref-by-count": 219, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1033900087", + "attributes": { + "title": "Self-similarity of complex networks", + "doi": "10.1038/nature03248", + "nodeyear": 2005, + "ref-by-count": 960, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1035552384", + "attributes": { + "title": "Finding community structure in very large networks", + "doi": "10.1103/physreve.70.066111", + "nodeyear": 2004, + "ref-by-count": 4160, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1064714328", + "attributes": { + "title": "Comments on \u201cA New Product Growth for Model Consumer Durables The Bass Model\u201d", + "doi": "10.1287/mnsc.1040.0300", + "nodeyear": 2004, + "ref-by-count": 293, + "is_input_DOI": false, + "category_for": "08:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1008815705", + "attributes": { + "title": "Analysis of weighted networks", + "doi": "10.1103/physreve.70.056131", + "nodeyear": 2004, + "ref-by-count": 1496, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1022606943", + "attributes": { + "title": "Detecting Fuzzy Community Structures in Complex Networks with a Potts Model", + "doi": "10.1103/physrevlett.93.218701", + "nodeyear": 2004, + "ref-by-count": 401, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1060732180", + "attributes": { + "title": "Phase transitions in an aging network", + "doi": "10.1103/physreve.70.056103", + "nodeyear": 2004, + "ref-by-count": 29, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1046844327", + "attributes": { + "title": "Motifs in Brain Networks", + "doi": "10.1371/journal.pbio.0020369", + "nodeyear": 2004, + "ref-by-count": 543, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1005545598", + "attributes": { + "title": "Managing tacit and explicit knowledge transfer in IJVs: the role of relational embeddedness and the impact on performance", + "doi": "10.1057/palgrave.jibs.8400098", + "nodeyear": 2004, + "ref-by-count": 615, + "is_input_DOI": false, + "category_for": "15:0.60;14:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1044882727", + "attributes": { + "title": "Organization, development and function of complex brain networks", + "doi": "10.1016/j.tics.2004.07.008", + "nodeyear": 2004, + "ref-by-count": 1507, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1009909155", + "attributes": { + "title": "Demographers and Their Journals: Who Remains Uncited After Ten Years?", + "doi": "10.1111/j.1728-4457.2004.00025.x", + "nodeyear": 2004, + "ref-by-count": 28, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1046540633", + "attributes": { + "title": "Modularity from fluctuations in random graphs and complex networks", + "doi": "10.1103/physreve.70.025101", + "nodeyear": 2004, + "ref-by-count": 588, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1016907394", + "attributes": { + "title": "Critical issues in research on real\u2010time knowledge management in enterprises", + "doi": "10.1108/13673270410548469", + "nodeyear": 2004, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "08:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1010299182", + "attributes": { + "title": "Neuronal Oscillations in Cortical Networks", + "doi": "10.1126/science.1099745", + "nodeyear": 2004, + "ref-by-count": 4204, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1039022482", + "attributes": { + "title": "Fast algorithm for detecting community structure in networks", + "doi": "10.1103/physreve.69.066133", + "nodeyear": 2004, + "ref-by-count": 3402, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1049986679", + "attributes": { + "title": "Coauthorship networks and patterns of scientific collaboration", + "doi": "10.1073/pnas.0307545100", + "nodeyear": 2004, + "ref-by-count": 1144, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1019917231", + "attributes": { + "title": "Identifying innovation in surveys of services: a Schumpeterian perspective", + "doi": "10.1016/j.respol.2003.07.004", + "nodeyear": 2004, + "ref-by-count": 424, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1044283004", + "attributes": { + "title": "Finding communities in linear time: a physics approach", + "doi": "10.1140/epjb/e2004-00125-x", + "nodeyear": 2004, + "ref-by-count": 313, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1007257290", + "attributes": { + "title": "Detecting community structure in networks", + "doi": "10.1140/epjb/e2004-00124-y", + "nodeyear": 2004, + "ref-by-count": 1316, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1007713573", + "attributes": { + "title": "A Meta-analysis of Innovation and Organizational Size", + "doi": "10.1177/0170840604040039", + "nodeyear": 2004, + "ref-by-count": 336, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1048148225", + "attributes": { + "title": "Finding and evaluating community structure in networks", + "doi": "10.1103/physreve.69.026113", + "nodeyear": 2004, + "ref-by-count": 8315, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1004043513", + "attributes": { + "title": "Defining and identifying communities in networks", + "doi": "10.1073/pnas.0400054101", + "nodeyear": 2004, + "ref-by-count": 1591, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1053181888", + "attributes": { + "title": "Global Mapping of the Yeast Genetic Interaction Network", + "doi": "10.1126/science.1091317", + "nodeyear": 2004, + "ref-by-count": 1669, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1018231980", + "attributes": { + "title": "Network biology: understanding the cell's functional organization", + "doi": "10.1038/nrg1272", + "nodeyear": 2004, + "ref-by-count": 5580, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1000522908", + "attributes": { + "title": "Evolving to a New Dominant Logic for Marketing", + "doi": "10.1509/jmkg.68.1.1.24036", + "nodeyear": 2004, + "ref-by-count": 7995, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1037202380", + "attributes": { + "title": "Electronic business adoption by European firms: a cross-country assessment of the facilitators and inhibitors", + "doi": "10.1057/palgrave.ejis.3000475", + "nodeyear": 2003, + "ref-by-count": 553, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1003981756", + "attributes": { + "title": "Better late than never? On the chance to become highly cited only beyond the standard bibliometric time horizon", + "doi": "10.1023/b:scie.0000006881.30700.ea", + "nodeyear": 2003, + "ref-by-count": 127, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1020857032", + "attributes": { + "title": "Citations, family size, opposition and the value of patent rights", + "doi": "10.1016/s0048-7333(02)00124-5", + "nodeyear": 2003, + "ref-by-count": 801, + "is_input_DOI": false, + "category_for": "15:0.60;14:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1032052300", + "attributes": { + "title": "Subgraphs in random networks", + "doi": "10.1103/physreve.68.026127", + "nodeyear": 2003, + "ref-by-count": 137, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1008640122", + "attributes": { + "title": "Citation networks in high energy physics", + "doi": "10.1103/physreve.68.026113", + "nodeyear": 2003, + "ref-by-count": 87, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1049602286", + "attributes": { + "title": "Global Outsourcing of IT and IT Enabled Services: Impact on US and Global Economy", + "doi": "10.1080/15228053.2003.10856023", + "nodeyear": 2003, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1070371758", + "attributes": { + "title": "Network Structure and Knowledge Transfer: The Effects of Cohesion and Range", + "doi": "10.2307/3556658", + "nodeyear": 2003, + "ref-by-count": 2129, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1004784081", + "attributes": { + "title": "Sexual contacts and epidemic thresholds", + "doi": "10.1038/423605a", + "nodeyear": 2003, + "ref-by-count": 59, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1064722345", + "attributes": { + "title": "Managing Knowledge in Organizations: An Integrative Framework and Review of Emerging Themes", + "doi": "10.1287/mnsc.49.4.571.14424", + "nodeyear": 2003, + "ref-by-count": 1240, + "is_input_DOI": false, + "category_for": "08:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1070194658", + "attributes": { + "title": "Structure and Sentiment: Explaining Emotional Attachment to Group", + "doi": "10.2307/3090139", + "nodeyear": 2003, + "ref-by-count": 51, + "is_input_DOI": false, + "category_for": "17:0.60;16:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1070193518", + "attributes": { + "title": "Structural Cohesion and Embeddedness: A Hierarchical Concept of Social Groups", + "doi": "10.2307/3088904", + "nodeyear": 2003, + "ref-by-count": 611, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1060825768", + "attributes": { + "title": "Scale-Free Networks from Varying Vertex Intrinsic Fitness", + "doi": "10.1103/physrevlett.89.258702", + "nodeyear": 2002, + "ref-by-count": 539, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1023587035", + "attributes": { + "title": "Computational systems biology", + "doi": "10.1038/nature01254", + "nodeyear": 2002, + "ref-by-count": 1588, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1011354825", + "attributes": { + "title": "Stability of Tsallis entropy and instabilities of R\u00e9nyi and normalized Tsallis entropies: A basis for q-exponential distributions", + "doi": "10.1103/physreve.66.046134", + "nodeyear": 2002, + "ref-by-count": 149, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1019884771", + "attributes": { + "title": "Metaphors and meaning A grounded cultural model of us entrepreneurship", + "doi": "10.1016/s0883-9026(01)00072-6", + "nodeyear": 2002, + "ref-by-count": 110, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1044845556", + "attributes": { + "title": "The history of the peer-review process", + "doi": "10.1016/s0167-7799(02)01985-6", + "nodeyear": 2002, + "ref-by-count": 189, + "is_input_DOI": false, + "category_for": "09:0.33;10:0.33;06:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1027854203", + "attributes": { + "title": "BARKING UP THE WRONG BRANCH: Scientific Alternatives to the Current Model of Sociological Science", + "doi": "10.1146/annurev.soc.28.110601.141122", + "nodeyear": 2002, + "ref-by-count": 80, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1038279684", + "attributes": { + "title": "Dynamic changes in the chance for citedness", + "doi": "10.1023/a:1016086500801", + "nodeyear": 2002, + "ref-by-count": 10, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1001008739", + "attributes": { + "title": "Towards an organic perspective on strategy", + "doi": "10.1002/smj.239", + "nodeyear": 2002, + "ref-by-count": 168, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1018411012", + "attributes": { + "title": "Community structure in social and biological networks", + "doi": "10.1073/pnas.122653799", + "nodeyear": 2002, + "ref-by-count": 9407, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1048235090", + "attributes": { + "title": "Specificity and Stability in Topology of Protein Networks", + "doi": "10.1126/science.1065103", + "nodeyear": 2002, + "ref-by-count": 2231, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1010954918", + "attributes": { + "title": "Network motifs in the transcriptional regulation network of Escherichia coli", + "doi": "10.1038/ng881", + "nodeyear": 2002, + "ref-by-count": 2181, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1061106525", + "attributes": { + "title": "Self-organization and identification of Web communities", + "doi": "10.1109/2.989932", + "nodeyear": 2002, + "ref-by-count": 677, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058639117", + "attributes": { + "title": "The Origins of Status Hierarchies: A Formal Theory and Empirical Test", + "doi": "10.1086/341744", + "nodeyear": 2002, + "ref-by-count": 422, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1021711131", + "attributes": { + "title": "Strategic use of the Internet and e-commerce: Cisco Systems", + "doi": "10.1016/s0963-8687(01)00056-7", + "nodeyear": 2002, + "ref-by-count": 64, + "is_input_DOI": false, + "category_for": "08:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1019328864", + "attributes": { + "title": "The nth-citation distribution and obsolescence", + "doi": "10.1023/a:1014816911511", + "nodeyear": 2002, + "ref-by-count": 51, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1059204918", + "attributes": { + "title": "Modeling and Simulation of Genetic Regulatory Systems: A Literature Review", + "doi": "10.1089/10665270252833208", + "nodeyear": 2002, + "ref-by-count": 1910, + "is_input_DOI": false, + "category_for": "01:0.43;08:0.29;06:0.29", + "level": "ref_l3" + } + }, + { + "id": "pub.1058639730", + "attributes": { + "title": "Power, Authority, and the Constraint of Belief Systems", + "doi": "10.1086/343192", + "nodeyear": 2002, + "ref-by-count": 88, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058638027", + "attributes": { + "title": "Race, School Integration, and Friendship Segregation in America", + "doi": "10.1086/338954", + "nodeyear": 2001, + "ref-by-count": 759, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1017006771", + "attributes": { + "title": "Dynamical and Correlation Properties of the Internet", + "doi": "10.1103/physrevlett.87.258701", + "nodeyear": 2001, + "ref-by-count": 1034, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1064711642", + "attributes": { + "title": "Research Report: Empirical Test of an EDI Adoption Model", + "doi": "10.1287/isre.12.3.304.9708", + "nodeyear": 2001, + "ref-by-count": 613, + "is_input_DOI": false, + "category_for": "15:0.60;08:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1052547671", + "attributes": { + "title": "An empirically-based typology of product innovativeness for new financial services: Success and failure scenarios", + "doi": "10.1016/s0737-6782(01)00102-3", + "nodeyear": 2001, + "ref-by-count": 223, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1051398714", + "attributes": { + "title": "The intellectual and social organization of ASA 1990\u2013 1997: Exploring the interface between the discipline of sociology and its practitioners", + "doi": "10.1007/s12108-001-1029-0", + "nodeyear": 2001, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1008704833", + "attributes": { + "title": "Stochastic modelling of the first-citation distribution", + "doi": "10.1023/a:1012751509975", + "nodeyear": 2001, + "ref-by-count": 52, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1020106812", + "attributes": { + "title": "Random graphs with arbitrary degree distributions and their applications", + "doi": "10.1103/physreve.64.026118", + "nodeyear": 2001, + "ref-by-count": 2349, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1070193505", + "attributes": { + "title": "Managing Laboratory Work through Skepticism: Processes of Evaluation and Control", + "doi": "10.2307/3088887", + "nodeyear": 2001, + "ref-by-count": 106, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1027367808", + "attributes": { + "title": "Organization of growing random networks", + "doi": "10.1103/physreve.63.066123", + "nodeyear": 2001, + "ref-by-count": 576, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1064236053", + "attributes": { + "title": "Competition and multiscaling in evolving networks", + "doi": "10.1209/epl/i2001-00260-6", + "nodeyear": 2001, + "ref-by-count": 637, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1038990326", + "attributes": { + "title": "Lethality and centrality in protein networks", + "doi": "10.1038/35075138", + "nodeyear": 2001, + "ref-by-count": 3744, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1046077722", + "attributes": { + "title": "Scaling properties of scale-free evolving networks: Continuous approach", + "doi": "10.1103/physreve.63.056125", + "nodeyear": 2001, + "ref-by-count": 174, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1018922144", + "attributes": { + "title": "Epidemic Spreading in Scale-Free Networks", + "doi": "10.1103/physrevlett.86.3200", + "nodeyear": 2001, + "ref-by-count": 3942, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1011394540", + "attributes": { + "title": "Overcoming cultural barriers to sharing knowledge", + "doi": "10.1108/13673270110384428", + "nodeyear": 2001, + "ref-by-count": 580, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1102515140", + "attributes": { + "title": "Review: Knowledge Management and Knowledge Management Systems: Conceptual Foundations and Research Issues", + "doi": "10.2307/3250961", + "nodeyear": 2001, + "ref-by-count": 4766, + "is_input_DOI": false, + "category_for": "08:0.33;14:0.33;15:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1098876354", + "attributes": { + "title": "The Golden Age of Theoretical Physics", + "doi": "10.1142/4454", + "nodeyear": 2001, + "ref-by-count": 18, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1064722053", + "attributes": { + "title": "Recombinant Uncertainty in Technological Search", + "doi": "10.1287/mnsc.47.1.117.10671", + "nodeyear": 2001, + "ref-by-count": 1510, + "is_input_DOI": false, + "category_for": "08:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1018308432", + "attributes": { + "title": "The Cohesiveness of Blocks In Social Networks: Node Connectivity and Conditional Density", + "doi": "10.1111/0081-1750.00098", + "nodeyear": 2001, + "ref-by-count": 128, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1051510804", + "attributes": { + "title": "The large-scale organization of metabolic networks", + "doi": "10.1038/35036627", + "nodeyear": 2000, + "ref-by-count": 3562, + "is_input_DOI": false, + "category_for": "06:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1050793825", + "attributes": { + "title": "Evolution of networks with aging of sites", + "doi": "10.1103/physreve.62.1842", + "nodeyear": 2000, + "ref-by-count": 320, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1063168728", + "attributes": { + "title": "Working knowledge", + "doi": "10.1145/347634.348775", + "nodeyear": 2000, + "ref-by-count": 1322, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1036565460", + "attributes": { + "title": "A Heuristic Study of the First-Citation Distribution", + "doi": "10.1023/a:1005688404778", + "nodeyear": 2000, + "ref-by-count": 40, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1058575613", + "attributes": { + "title": "Intellectual Collaboration", + "doi": "10.1086/262132", + "nodeyear": 2000, + "ref-by-count": 264, + "is_input_DOI": false, + "category_for": "14:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1070047166", + "attributes": { + "title": "Reflections on the Future of Sociology", + "doi": "10.2307/2654383", + "nodeyear": 2000, + "ref-by-count": 39, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1070047165", + "attributes": { + "title": "Sociology and World Market Society", + "doi": "10.2307/2654382", + "nodeyear": 2000, + "ref-by-count": 9, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1051426052", + "attributes": { + "title": "Are citations of scientific papers a case of nonextensivity?", + "doi": "10.1007/s100510050097", + "nodeyear": 2000, + "ref-by-count": 97, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1050470361", + "attributes": { + "title": "On Growth, Ageing, and Fractal Differentiation of Science", + "doi": "10.1023/a:1005647328460", + "nodeyear": 2000, + "ref-by-count": 87, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1002546237", + "attributes": { + "title": "SECI, Ba and Leadership: a Unified Model of Dynamic Knowledge Creation", + "doi": "10.1016/s0024-6301(99)00115-6", + "nodeyear": 2000, + "ref-by-count": 1922, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1023307789", + "attributes": { + "title": "Innovation, Measurement and Services: The New Problematique", + "doi": "10.1007/978-1-4615-4425-8_5", + "nodeyear": 2000, + "ref-by-count": 271, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1074546091", + "attributes": { + "title": "Journal impact factor: a brief review.", + "doi": "", + "nodeyear": 1999, + "ref-by-count": 464, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058529816", + "attributes": { + "title": "Networks, Dynamics, and the Small\u2010World Phenomenon", + "doi": "10.1086/210318", + "nodeyear": 1999, + "ref-by-count": 822, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1053745120", + "attributes": { + "title": "Collaboration in sociology and other scientific disciplines: A comparative trend analysis of scholarship in the social, physical, and mathematical sciences", + "doi": "10.1007/s12108-999-1007-5", + "nodeyear": 1999, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1041136418", + "attributes": { + "title": "Authoritative sources in a hyperlinked environment", + "doi": "10.1145/324133.324140", + "nodeyear": 1999, + "ref-by-count": 5217, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1009550067", + "attributes": { + "title": "Diameter of the World-Wide Web", + "doi": "10.1038/43601", + "nodeyear": 1999, + "ref-by-count": 2920, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062566326", + "attributes": { + "title": "Are the Foreign Born a Source of Strength for U.S. Science?", + "doi": "10.1126/science.285.5431.1213", + "nodeyear": 1999, + "ref-by-count": 83, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1013746891", + "attributes": { + "title": "Ambiguity and the process of knowledge transfer in strategic alliances", + "doi": "10.1002/(sici)1097-0266(199907)20:7<595::aid-smj47>3.0.co;2-5", + "nodeyear": 1999, + "ref-by-count": 1174, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1064732109", + "attributes": { + "title": "Landscape Design: Designing for Local Action in Complex Worlds", + "doi": "10.1287/orsc.10.3.342", + "nodeyear": 1999, + "ref-by-count": 269, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1001489329", + "attributes": { + "title": "The balanced scorecard: a foundation for the strategic management of information systems", + "doi": "10.1016/s0167-9236(98)00086-4", + "nodeyear": 1999, + "ref-by-count": 301, + "is_input_DOI": false, + "category_for": "15:0.60;08:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1041704401", + "attributes": { + "title": "Value co\u2010production: intellectual origins and implications for practice and research", + "doi": "10.1002/(sici)1097-0266(199901)20:1<49::aid-smj20>3.0.co;2-2", + "nodeyear": 1999, + "ref-by-count": 530, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1109345579", + "attributes": { + "title": "La Contre-R\u00e9forme Math\u00e9matique. Constitution et diffusion d\u2019une culture math\u00e9matique j\u00e9suite \u00e0 la Renaissance (1540-1640)", + "doi": "10.3406/befar.1999.1252", + "nodeyear": 1999, + "ref-by-count": 39, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1060589141", + "attributes": { + "title": "Transport of localized and extended excitations in a nonlinear Anderson model", + "doi": "10.1103/physrevb.58.12547", + "nodeyear": 1998, + "ref-by-count": 99, + "is_input_DOI": false, + "category_for": "09:0.33;02:0.33;03:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1069417824", + "attributes": { + "title": "Market Orientation and Organizational Performance: Is Innovation a Missing Link?", + "doi": "10.2307/1252285", + "nodeyear": 1998, + "ref-by-count": 1037, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1098708862", + "attributes": { + "title": "A Structural Theory of Social Influence", + "doi": "10.1017/cbo9780511527524", + "nodeyear": 1998, + "ref-by-count": 361, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1058529538", + "attributes": { + "title": "The Meaning of Data: Open and Closed Evidential Cultures in the Search for Gravitational Waves", + "doi": "10.1086/210040", + "nodeyear": 1998, + "ref-by-count": 103, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1020100757", + "attributes": { + "title": "How popular is your paper? An empirical study of the citation distribution", + "doi": "10.1007/s100510050359", + "nodeyear": 1998, + "ref-by-count": 966, + "is_input_DOI": false, + "category_for": "01:0.50;02:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1041985305", + "attributes": { + "title": "Collective dynamics of \u2018small-world\u2019 networks", + "doi": "10.1038/30918", + "nodeyear": 1998, + "ref-by-count": 26949, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1063349087", + "attributes": { + "title": "Recombinant Growth", + "doi": "10.1162/003355398555595", + "nodeyear": 1998, + "ref-by-count": 577, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1041770955", + "attributes": { + "title": "Configuring value for competitive advantage: on chains, shops, and networks", + "doi": "10.1002/(sici)1097-0266(199805)19:5<413::aid-smj946>3.0.co;2-c", + "nodeyear": 1998, + "ref-by-count": 848, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1005762740", + "attributes": { + "title": "Stretched exponential distributions in nature and economy: \u201cfat tails\u201d with characteristic scales", + "doi": "10.1007/s100510050276", + "nodeyear": 1998, + "ref-by-count": 573, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058563483", + "attributes": { + "title": "Growth without Scale Effects", + "doi": "10.1086/250002", + "nodeyear": 1998, + "ref-by-count": 389, + "is_input_DOI": false, + "category_for": "14:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1028415806", + "attributes": { + "title": "The Emergence of Nautical Astronomy in Portugal in the XVth century", + "doi": "10.1017/s0373463397007674", + "nodeyear": 1998, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1040229870", + "attributes": { + "title": "Innovation in services", + "doi": "10.1016/s0048-7333(97)00030-9", + "nodeyear": 1997, + "ref-by-count": 914, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1069804321", + "attributes": { + "title": "Research, Patenting, and Technological Change", + "doi": "10.2307/2171741", + "nodeyear": 1997, + "ref-by-count": 481, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1060816597", + "attributes": { + "title": "Stable Infinite Variance Fluctuations in Randomly Amplified Langevin Systems", + "doi": "10.1103/physrevlett.79.966", + "nodeyear": 1997, + "ref-by-count": 225, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1026479190", + "attributes": { + "title": "Management of Innovation in Services", + "doi": "10.1080/02642069700000028", + "nodeyear": 1997, + "ref-by-count": 478, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1018516004", + "attributes": { + "title": "The strategic evaluation of candidate business process reengineering projects", + "doi": "10.1016/s0925-5273(97)00045-5", + "nodeyear": 1997, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "08:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1041242759", + "attributes": { + "title": "Measuring Intersectoral Technology Spillovers: Estimates from the European and US Patent Office Databases", + "doi": "10.1080/09535319700000004", + "nodeyear": 1997, + "ref-by-count": 133, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062778767", + "attributes": { + "title": "Why the impact factor of journals should not be used for evaluating research", + "doi": "10.1136/bmj.314.7079.497", + "nodeyear": 1997, + "ref-by-count": 1586, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1013916375", + "attributes": { + "title": "An integrated dynamic performance measurement system for improving manufacturing competitiveness", + "doi": "10.1016/s0925-5273(96)00093-x", + "nodeyear": 1997, + "ref-by-count": 198, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1009045204", + "attributes": { + "title": "The Rise and Fall of Uncitedness", + "doi": "10.5860/crl.58.1.19", + "nodeyear": 1997, + "ref-by-count": 35, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1028279784", + "attributes": { + "title": "University Versus Corporate Patents: A Window On The Basicness Of Invention", + "doi": "10.1080/10438599700000006", + "nodeyear": 1997, + "ref-by-count": 682, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1031642651", + "attributes": { + "title": "What human resource practitioners need to know for the Twenty\u2010First Century", + "doi": "10.1002/(sici)1099-050x(199721)36:1<71::aid-hrm12>3.0.co;2-h", + "nodeyear": 1997, + "ref-by-count": 23, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062555144", + "attributes": { + "title": "Chaos in Neuronal Networks with Balanced Excitatory and Inhibitory Activity", + "doi": "10.1126/science.274.5293.1724", + "nodeyear": 1996, + "ref-by-count": 1209, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1035251739", + "attributes": { + "title": "Selecting quality based programs in small firms", + "doi": "10.1007/bf00390029", + "nodeyear": 1996, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1027962452", + "attributes": { + "title": "Exploring internal stickiness: Impediments to the transfer of best practice within the firm", + "doi": "10.1002/smj.4250171105", + "nodeyear": 1996, + "ref-by-count": 4704, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1020887214", + "attributes": { + "title": "Toward a knowledge\u2010based theory of the firm", + "doi": "10.1002/smj.4250171110", + "nodeyear": 1996, + "ref-by-count": 7910, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1007858140", + "attributes": { + "title": "Organizational innovativeness: Exploring the relationship between organizational determinants of innovation, types of innovations, and measures of organizational performance", + "doi": "10.1016/s0305-0483(96)00031-x", + "nodeyear": 1996, + "ref-by-count": 426, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1005138621", + "attributes": { + "title": "Total quality management in financial services: An empirical study of best practice", + "doi": "10.1080/09544129610496", + "nodeyear": 1996, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1010594228", + "attributes": { + "title": "Creating Knowledge through Collaboration", + "doi": "10.2307/41165879", + "nodeyear": 1996, + "ref-by-count": 413, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1032914131", + "attributes": { + "title": "Stretched exponential relaxation in molecular and electronic glasses", + "doi": "10.1088/0034-4885/59/9/003", + "nodeyear": 1996, + "ref-by-count": 691, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1064529790", + "attributes": { + "title": "Trends in Multi-Authored Papers in Economics", + "doi": "10.1257/jep.10.3.153", + "nodeyear": 1996, + "ref-by-count": 189, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1053001983", + "attributes": { + "title": "The changing basis of performance measurement", + "doi": "10.1108/01443579610125787", + "nodeyear": 1996, + "ref-by-count": 276, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1011037134", + "attributes": { + "title": "Advanced bibliometric methods as quantitative core of peer review based evaluation and foresight exercises", + "doi": "10.1007/bf02129602", + "nodeyear": 1996, + "ref-by-count": 227, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1064721502", + "attributes": { + "title": "Organizational Complexity and Innovation: Developing and Testing Multiple Contingency Models", + "doi": "10.1287/mnsc.42.5.693", + "nodeyear": 1996, + "ref-by-count": 751, + "is_input_DOI": false, + "category_for": "08:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1042976587", + "attributes": { + "title": "Parallel Information Processing Models Compatible with Lognormally Distributed Response Times", + "doi": "10.1006/jmps.1995.1037", + "nodeyear": 1995, + "ref-by-count": 8, + "is_input_DOI": false, + "category_for": "17:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1018592659", + "attributes": { + "title": "New modes of innovation", + "doi": "10.1108/09564239510091321", + "nodeyear": 1995, + "ref-by-count": 250, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058575483", + "attributes": { + "title": "R & D-Based Models of Economic Growth", + "doi": "10.1086/262002", + "nodeyear": 1995, + "ref-by-count": 1594, + "is_input_DOI": false, + "category_for": "14:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1004457397", + "attributes": { + "title": "New bibliometric tools for the assessment of national research performance: Database description, overview of indicators and first applications", + "doi": "10.1007/bf02017338", + "nodeyear": 1995, + "ref-by-count": 312, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1069908882", + "attributes": { + "title": "Total Quality Management: Empirical, Conceptual, and Practical Issues", + "doi": "10.2307/2393640", + "nodeyear": 1995, + "ref-by-count": 1036, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1069768950", + "attributes": { + "title": "Time Series Tests of Endogenous Growth Models", + "doi": "10.2307/2118448", + "nodeyear": 1995, + "ref-by-count": 738, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1022830687", + "attributes": { + "title": "A kinematic theory of rapid human movements: Part I. Movement representation and generation", + "doi": "10.1007/bf00202785", + "nodeyear": 1995, + "ref-by-count": 215, + "is_input_DOI": false, + "category_for": "08:0.33;02:0.33;17:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1045680174", + "attributes": { + "title": "Public records\u2014access, privacy, and public policy: A discussion paper", + "doi": "10.1016/0740-624x(95)90077-2", + "nodeyear": 1995, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1109705182", + "attributes": { + "title": "The Microprocessor", + "doi": "10.1007/978-1-4613-8433-5", + "nodeyear": 1995, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1102508289", + "attributes": { + "title": "A Sixteenth-Century Spanish Bookstore: The Inventory of Juan de Junta", + "doi": "10.2307/1006606", + "nodeyear": 1995, + "ref-by-count": 1, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1022153657", + "attributes": { + "title": "Benchmarking the performance of human resource management", + "doi": "10.1016/0024-6301(94)90163-5", + "nodeyear": 1994, + "ref-by-count": 15, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1069768858", + "attributes": { + "title": "A Theory of Debt Based on the Inalienability of Human Capital", + "doi": "10.2307/2118350", + "nodeyear": 1994, + "ref-by-count": 976, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1022813968", + "attributes": { + "title": "Toward a new economics of science", + "doi": "10.1016/0048-7333(94)01002-1", + "nodeyear": 1994, + "ref-by-count": 1288, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1053188247", + "attributes": { + "title": "The New Sociology of Knowledge", + "doi": "10.1146/annurev.so.20.080194.001513", + "nodeyear": 1994, + "ref-by-count": 152, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1018605363", + "attributes": { + "title": "An Action Perspective: The Crux of the New Management", + "doi": "10.2307/41165767", + "nodeyear": 1994, + "ref-by-count": 16, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1020281833", + "attributes": { + "title": "Disintegrated disciplines and the future of sociology", + "doi": "10.1007/bf01476366", + "nodeyear": 1994, + "ref-by-count": 53, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1025484712", + "attributes": { + "title": "Double exponential models for first-citation processes", + "doi": "10.1007/bf02017224", + "nodeyear": 1994, + "ref-by-count": 40, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1074308586", + "attributes": { + "title": "Reengineering health care: management systems for survivors.", + "doi": "", + "nodeyear": 1994, + "ref-by-count": 25, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1069991591", + "attributes": { + "title": "The Importance of Patent Scope: An Empirical Analysis", + "doi": "10.2307/2555833", + "nodeyear": 1994, + "ref-by-count": 656, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1050008141", + "attributes": { + "title": "Continuous improvement of strategic information systems: Concepts and issues", + "doi": "10.1097/00004010-199401920-00005", + "nodeyear": 1994, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "11:0.33;15:0.33;16:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1002847928", + "attributes": { + "title": "Information Processing Models Generating Lognormally Distributed Reaction Times", + "doi": "10.1006/jmps.1993.1032", + "nodeyear": 1993, + "ref-by-count": 83, + "is_input_DOI": false, + "category_for": "17:0.60;01:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1069768905", + "attributes": { + "title": "Geographic Localization of Knowledge Spillovers as Evidenced by Patent Citations", + "doi": "10.2307/2118401", + "nodeyear": 1993, + "ref-by-count": 4236, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1006641713", + "attributes": { + "title": "Social Network Analysis", + "doi": "10.1177/0049124193022001001", + "nodeyear": 1993, + "ref-by-count": 426, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1020370058", + "attributes": { + "title": "Services in the new industrial economy", + "doi": "10.1016/0016-3287(93)90106-4", + "nodeyear": 1993, + "ref-by-count": 206, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1032640846", + "attributes": { + "title": "Organizational Obstacles: Links with Financial Performance, Customer Satisfaction, and Job Satisfaction in a Service Environment", + "doi": "10.1177/001872679304600603", + "nodeyear": 1993, + "ref-by-count": 74, + "is_input_DOI": false, + "category_for": "17:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1074297289", + "attributes": { + "title": "From value chain to value constellation: designing interactive strategy.", + "doi": "", + "nodeyear": 1993, + "ref-by-count": 1066, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1074296421", + "attributes": { + "title": "Predators and prey: a new ecology of competition.", + "doi": "", + "nodeyear": 1993, + "ref-by-count": 1257, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1052092175", + "attributes": { + "title": "Organizational Size and Innovation", + "doi": "10.1177/017084069201300304", + "nodeyear": 1992, + "ref-by-count": 579, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1069758066", + "attributes": { + "title": "Visible Colleges: The Social and Conceptual Structure of Sociology Specialties", + "doi": "10.2307/2096210", + "nodeyear": 1992, + "ref-by-count": 49, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1069758065", + "attributes": { + "title": "The Social Organization of Sociological Knowledge: Modeling the Intersection of Specialties", + "doi": "10.2307/2096209", + "nodeyear": 1992, + "ref-by-count": 59, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1070145900", + "attributes": { + "title": "A Model of Growth Through Creative Destruction", + "doi": "10.2307/2951599", + "nodeyear": 1992, + "ref-by-count": 4231, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1038097739", + "attributes": { + "title": "On some stopping times of citation processes. From theory to indicators", + "doi": "10.1016/0306-4573(92)90092-e", + "nodeyear": 1992, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1074290105", + "attributes": { + "title": "The balanced scorecard--measures that drive performance.", + "doi": "", + "nodeyear": 1992, + "ref-by-count": 5678, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1008993696", + "attributes": { + "title": "Graph drawing by force\u2010directed placement", + "doi": "10.1002/spe.4380211102", + "nodeyear": 1991, + "ref-by-count": 3293, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062541665", + "attributes": { + "title": "Science, Citation, and Funding", + "doi": "10.1126/science.251.5000.1410-b", + "nodeyear": 1991, + "ref-by-count": 60, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1062541658", + "attributes": { + "title": "Science, Citation, and Funding", + "doi": "10.1126/science.251.5000.1408-a", + "nodeyear": 1991, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1064531008", + "attributes": { + "title": "Standing on the Shoulders of Giants: Cumulative Research and the Patent Law", + "doi": "10.1257/jep.5.1.29", + "nodeyear": 1991, + "ref-by-count": 639, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062516197", + "attributes": { + "title": "Research Papers: Who's Uncited Now?", + "doi": "10.1126/science.1986409", + "nodeyear": 1991, + "ref-by-count": 134, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1062529255", + "attributes": { + "title": "Publishing by\u2014and for?\u2014the Numbers", + "doi": "10.1126/science.2255902", + "nodeyear": 1990, + "ref-by-count": 189, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1058575206", + "attributes": { + "title": "Endogenous Technological Change", + "doi": "10.1086/261725", + "nodeyear": 1990, + "ref-by-count": 9705, + "is_input_DOI": false, + "category_for": "14:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1060800703", + "attributes": { + "title": "Correlation exponents and the metal-insulator transition in the one-dimensional Hubbard model", + "doi": "10.1103/physrevlett.64.2831", + "nodeyear": 1990, + "ref-by-count": 593, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1029063514", + "attributes": { + "title": "Interactive innovation in financial and business services: The vanguard of the service revolution", + "doi": "10.1016/0048-7333(90)90037-7", + "nodeyear": 1990, + "ref-by-count": 283, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1040966326", + "attributes": { + "title": "Uncitedness in the biomedical literature", + "doi": "10.1002/(sici)1097-4571(199004)41:3<193::aid-asi5>3.0.co;2-b", + "nodeyear": 1990, + "ref-by-count": 34, + "is_input_DOI": false, + "category_for": "20:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1040305925", + "attributes": { + "title": "The Evolution of Editorial Peer Review", + "doi": "10.1001/jama.1990.03440100023003", + "nodeyear": 1990, + "ref-by-count": 163, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1069908817", + "attributes": { + "title": "Absorptive Capacity: A New Perspective on Learning and Innovation", + "doi": "10.2307/2393553", + "nodeyear": 1990, + "ref-by-count": 18563, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1069908813", + "attributes": { + "title": "Architectural Innovation: The Reconfiguration of Existing Product Technologies and the Failure of Established Firms", + "doi": "10.2307/2393549", + "nodeyear": 1990, + "ref-by-count": 4669, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1069417732", + "attributes": { + "title": "New Product Diffusion Models in Marketing: A Review and Directions for Research", + "doi": "10.2307/1252170", + "nodeyear": 1990, + "ref-by-count": 972, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1019322693", + "attributes": { + "title": "The evaluation of columbus\u2019 \u2018India\u2019 project by Portuguese and Spanish cosmographers in the light of the geographical science of the period", + "doi": "10.1080/03085699008592691", + "nodeyear": 1990, + "ref-by-count": 12, + "is_input_DOI": false, + "category_for": "09:0.33;04:0.33;21:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1054881812", + "attributes": { + "title": "Five Centuries of Astronomical Textbooks and their Role in Teaching", + "doi": "10.1017/s0252921100086711", + "nodeyear": 1990, + "ref-by-count": 3, + "is_input_DOI": false, + "category_for": "21:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1011305610", + "attributes": { + "title": "THE RELATIONSHIP BETWEEN TYPES OF INNOVATION AND ORGANIZATIONAL PERFORMANCE", + "doi": "10.1111/j.1467-6486.1989.tb00746.x", + "nodeyear": 1989, + "ref-by-count": 341, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1011260290", + "attributes": { + "title": "A Mathematical Model of Academic Citation Age", + "doi": "10.1177/009365089016004003", + "nodeyear": 1989, + "ref-by-count": 21, + "is_input_DOI": false, + "category_for": "19:0.50;20:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1051569339", + "attributes": { + "title": "An algorithm for drawing general undirected graphs", + "doi": "10.1016/0020-0190(89)90102-6", + "nodeyear": 1989, + "ref-by-count": 1643, + "is_input_DOI": false, + "category_for": "08:0.33;01:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1060799027", + "attributes": { + "title": "Correlated Lattice Fermions in d=\u221e Dimensions", + "doi": "10.1103/physrevlett.62.324", + "nodeyear": 1989, + "ref-by-count": 1936, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1069757767", + "attributes": { + "title": "Interaction Preludes to Role Setting: Exploratory Local Action", + "doi": "10.2307/2095896", + "nodeyear": 1988, + "ref-by-count": 106, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1026212635", + "attributes": { + "title": "Possible generalization of Boltzmann-Gibbs statistics", + "doi": "10.1007/bf01016429", + "nodeyear": 1988, + "ref-by-count": 6170, + "is_input_DOI": false, + "category_for": "01:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058548165", + "attributes": { + "title": "Social Contagion and Innovation: Cohesion versus Structural Equivalence", + "doi": "10.1086/228667", + "nodeyear": 1987, + "ref-by-count": 1442, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058548129", + "attributes": { + "title": "Power and Centrality: A Family of Measures", + "doi": "10.1086/228631", + "nodeyear": 1987, + "ref-by-count": 2836, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1032904756", + "attributes": { + "title": "Towards a theory of innovation in services", + "doi": "10.1016/0048-7333(86)90012-0", + "nodeyear": 1986, + "ref-by-count": 540, + "is_input_DOI": false, + "category_for": "15:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1064720176", + "attributes": { + "title": "Organizational Information Requirements, Media Richness and Structural Design", + "doi": "10.1287/mnsc.32.5.554", + "nodeyear": 1986, + "ref-by-count": 5155, + "is_input_DOI": false, + "category_for": "08:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1058547922", + "attributes": { + "title": "Is 1980s Sociology in the Doldrums?", + "doi": "10.1086/228424", + "nodeyear": 1986, + "ref-by-count": 124, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058574778", + "attributes": { + "title": "Debt, Deficits, and Finite Horizons", + "doi": "10.1086/261297", + "nodeyear": 1985, + "ref-by-count": 1371, + "is_input_DOI": false, + "category_for": "14:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1044028183", + "attributes": { + "title": "Innovation: Mapping the winds of creative destruction", + "doi": "10.1016/0048-7333(85)90021-6", + "nodeyear": 1985, + "ref-by-count": 1477, + "is_input_DOI": false, + "category_for": "15:0.60;14:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1010672104", + "attributes": { + "title": "Structure of specialization among American population scientists", + "doi": "10.1007/bf02025829", + "nodeyear": 1984, + "ref-by-count": 6, + "is_input_DOI": false, + "category_for": "16:0.50;08:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1001223577", + "attributes": { + "title": "The Division of Labour in Society", + "doi": "10.1007/978-1-349-17729-5", + "nodeyear": 1984, + "ref-by-count": 1497, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1069649889", + "attributes": { + "title": "The Determinants of Co-Authorship: An Analysis of the Economics Literature", + "doi": "10.2307/1924423", + "nodeyear": 1983, + "ref-by-count": 96, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1069757087", + "attributes": { + "title": "Cumulative Advantage and Inequality in Science", + "doi": "10.2307/2095162", + "nodeyear": 1982, + "ref-by-count": 214, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1038762424", + "attributes": { + "title": "Neural networks and physical systems with emergent collective computational abilities", + "doi": "10.1073/pnas.79.8.2554", + "nodeyear": 1982, + "ref-by-count": 12403, + "is_input_DOI": false, + "category_for": "08:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1069660739", + "attributes": { + "title": "Pseudo\u2010Lognormal Distributions", + "doi": "10.2307/1936710", + "nodeyear": 1981, + "ref-by-count": 27, + "is_input_DOI": false, + "category_for": "06:0.60;05:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1060527055", + "attributes": { + "title": "Continuum model for solitons in polyacetylene", + "doi": "10.1103/physrevb.21.2388", + "nodeyear": 1980, + "ref-by-count": 819, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1060783699", + "attributes": { + "title": "Solitons in Polyacetylene", + "doi": "10.1103/physrevlett.42.1698", + "nodeyear": 1979, + "ref-by-count": 4426, + "is_input_DOI": false, + "category_for": "01:0.33;02:0.33;09:0.33", + "level": "ref_l3" + } + }, + { + "id": "pub.1058546205", + "attributes": { + "title": "Threshold Models of Collective Behavior", + "doi": "10.1086/226707", + "nodeyear": 1978, + "ref-by-count": 3036, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1040206550", + "attributes": { + "title": "The Weight of Medical Knowledge", + "doi": "10.1056/nejm197804062981405", + "nodeyear": 1978, + "ref-by-count": 73, + "is_input_DOI": false, + "category_for": "11:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058909178", + "attributes": { + "title": "An Information Flow Model for Conflict and Fission in Small Groups", + "doi": "10.1086/jar.33.4.3629752", + "nodeyear": 1977, + "ref-by-count": 2866, + "is_input_DOI": false, + "category_for": "16:0.50;21:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1058545639", + "attributes": { + "title": "Social Structure from Multiple Networks. I. Blockmodels of Roles and Positions", + "doi": "10.1086/226141", + "nodeyear": 1976, + "ref-by-count": 1225, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1060683104", + "attributes": { + "title": "Particle spectrum in model field theories from semiclassical functional integral techniques", + "doi": "10.1103/physrevd.11.3424", + "nodeyear": 1975, + "ref-by-count": 576, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1005236943", + "attributes": { + "title": "Knowledge and Prematurity: The Journey from Transformation to DNA", + "doi": "10.1353/pbm.1975.0014", + "nodeyear": 1975, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "22:0.60;11:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1058573579", + "attributes": { + "title": "What Economists Think of Their Journals", + "doi": "10.1086/260098", + "nodeyear": 1973, + "ref-by-count": 199, + "is_input_DOI": false, + "category_for": "14:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1058544967", + "attributes": { + "title": "The Strength of Weak Ties", + "doi": "10.1086/225469", + "nodeyear": 1973, + "ref-by-count": 21192, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1062504834", + "attributes": { + "title": "Introduction to Phase Transitions and Critical Phenomena. H. Eugene Stanley. Oxford University Press, New York, 1971. xx, 308 pp., illus. $9.50. International Series of Monographs on Physics", + "doi": "10.1126/science.176.4034.502", + "nodeyear": 1972, + "ref-by-count": 11, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1024960131", + "attributes": { + "title": "Factoring and weighting approaches to status scores and clique identification", + "doi": "10.1080/0022250x.1972.9989806", + "nodeyear": 1972, + "ref-by-count": 1695, + "is_input_DOI": false, + "category_for": "16:0.50;01:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1052104890", + "attributes": { + "title": "Transitivity in Structural Models of Small Groups", + "doi": "10.1177/104649647100200201", + "nodeyear": 1971, + "ref-by-count": 331, + "is_input_DOI": false, + "category_for": "17:0.60;15:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1069755230", + "attributes": { + "title": "Clustering and Hierarchy in Interpersonal Relations: Testing Two Graph Theoretical Models on 742 Sociomatrices", + "doi": "10.2307/2093295", + "nodeyear": 1970, + "ref-by-count": 219, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058544432", + "attributes": { + "title": "Professional Standing and the Reception of Scientific Discoveries", + "doi": "10.1086/224934", + "nodeyear": 1970, + "ref-by-count": 120, + "is_input_DOI": false, + "category_for": "16:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1054052987", + "attributes": { + "title": "The Mathematical Principles Underlying Newton's Principia Mathematica", + "doi": "10.1177/002182867000100203", + "nodeyear": 1970, + "ref-by-count": 58, + "is_input_DOI": false, + "category_for": "02:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1045202955", + "attributes": { + "title": "An efficient heuristic procedure for partitioning graphs", + "doi": "10.1002/j.1538-7305.1970.tb01770.x", + "nodeyear": 1970, + "ref-by-count": 3297, + "is_input_DOI": false, + "category_for": "10:0.50;09:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1000572480", + "attributes": { + "title": "Non-symmetrical dielectric relaxation behaviour arising from a simple empirical decay function", + "doi": "10.1039/tf9706600080", + "nodeyear": 1970, + "ref-by-count": 3563, + "is_input_DOI": false, + "category_for": "14:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1058572772", + "attributes": { + "title": "The Production of Human Capital and the Life Cycle of Earnings", + "doi": "10.1086/259291", + "nodeyear": 1967, + "ref-by-count": 1236, + "is_input_DOI": false, + "category_for": "14:0.50;15:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1060431417", + "attributes": { + "title": "Self-Consistent Equations Including Exchange and Correlation Effects", + "doi": "10.1103/physrev.140.a1133", + "nodeyear": 1965, + "ref-by-count": 44783, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1060429813", + "attributes": { + "title": "Inhomogeneous Electron Gas", + "doi": "10.1103/physrev.136.b864", + "nodeyear": 1964, + "ref-by-count": 37655, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1017315055", + "attributes": { + "title": "Electron correlations in narrow energy bands", + "doi": "10.1098/rspa.1963.0204", + "nodeyear": 1963, + "ref-by-count": 5152, + "is_input_DOI": false, + "category_for": "02:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1037677363", + "attributes": { + "title": "Deterministic Nonperiodic Flow", + "doi": "10.1175/1520-0469(1963)020<0130:dnf>2.0.co;2", + "nodeyear": 1963, + "ref-by-count": 12737, + "is_input_DOI": false, + "category_for": "04:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1013510628", + "attributes": { + "title": "Economic Welfare and the Allocation of Resources for Invention", + "doi": "10.1515/9781400879762-024", + "nodeyear": 1962, + "ref-by-count": 4311, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1062476339", + "attributes": { + "title": "Resistance by Scientists to Scientific Discovery", + "doi": "10.1126/science.134.3479.596", + "nodeyear": 1961, + "ref-by-count": 278, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1059416714", + "attributes": { + "title": "THE RELATION BETWEEN THE DICTIONARY DISTRIBUTION AND THE OCCURRENCE DISTRIBUTION OF WORD LENGTH AND ITS IMPORTANCE FOR THE STUDY OF QUANTITATIVE LINGUISTICS", + "doi": "10.1093/biomet/45.1-2.222", + "nodeyear": 1958, + "ref-by-count": 29, + "is_input_DOI": false, + "category_for": "01:0.60;14:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1058643636", + "attributes": { + "title": "The True Place of Astrology in the History of Science", + "doi": "10.1086/348412", + "nodeyear": 1955, + "ref-by-count": 19, + "is_input_DOI": false, + "category_for": "21:0.50;22:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1059416495", + "attributes": { + "title": "ON A CLASS OF SKEW DISTRIBUTION FUNCTIONS", + "doi": "10.1093/biomet/42.3-4.425", + "nodeyear": 1955, + "ref-by-count": 1287, + "is_input_DOI": false, + "category_for": "01:0.60;14:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1060462449", + "attributes": { + "title": "Hall Effect in Ferromagnetics", + "doi": "10.1103/physrev.95.1154", + "nodeyear": 1954, + "ref-by-count": 1160, + "is_input_DOI": false, + "category_for": "09:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1051171362", + "attributes": { + "title": "A new status index derived from sociometric analysis", + "doi": "10.1007/bf02289026", + "nodeyear": 1953, + "ref-by-count": 2030, + "is_input_DOI": false, + "category_for": "01:0.50;17:0.50", + "level": "ref_l3" + } + }, + { + "id": "pub.1060457657", + "attributes": { + "title": "Interaction between the d-Shells in the Transition Metals. II. Ferromagnetic Compounds of Manganese with Perovskite Structure", + "doi": "10.1103/physrev.82.403", + "nodeyear": 1951, + "ref-by-count": 5928, + "is_input_DOI": false, + "category_for": "03:1.00", + "level": "ref_l3" + } + }, + { + "id": "pub.1076914346", + "attributes": { + "title": "The distribution of incubation periods of infectious disease.", + "doi": "10.1093/oxfordjournals.aje.a119397", + "nodeyear": 1950, + "ref-by-count": 204, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1060456122", + "attributes": { + "title": "\u03b2-Decay and the Nuclear Shell Model", + "doi": "10.1103/physrev.78.294", + "nodeyear": 1950, + "ref-by-count": 162, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1110456918", + "attributes": { + "title": "Maximum Likelihood Estimates of the Proportion of Patients Cured by Cancer Therapy", + "doi": "10.1111/j.2517-6161.1949.tb00020.x", + "nodeyear": 1949, + "ref-by-count": 384, + "is_input_DOI": false, + "category_for": "01:0.60;14:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1059415900", + "attributes": { + "title": "A NOTE ON THE STATISTICAL ANALYSLS OF SENTENCE-LENGTH AS A CRITERION OF LITERARY STYLE", + "doi": "10.1093/biomet/31.3-4.356", + "nodeyear": 1940, + "ref-by-count": 4, + "is_input_DOI": false, + "category_for": "01:0.60;14:0.40", + "level": "ref_l3" + } + }, + { + "id": "pub.1099481474", + "attributes": { + "title": "Versuche \u00fcber Pflanzen-Hybriden /", + "doi": "10.5962/bhl.title.61004", + "nodeyear": 1866, + "ref-by-count": 717, + "is_input_DOI": false, + "category_for": "00:1", + "level": "ref_l3" + } + }, + { + "id": "pub.1035083642", + "attributes": { + "title": "XXIV. On the nature of the function expressive of the law of human mortality, and on a new mode of determining the value of life contingencies. In a letter to Francis Baily, Esq. F. R. S. &c", + "doi": "10.1098/rstl.1825.0026", + "nodeyear": 1825, + "ref-by-count": 2857, + "is_input_DOI": false, + "category_for": "18:1.00", + "level": "ref_l3" + } + } + ], + "edges": [ + { + "source": "pub.1132583197", + "target": "pub.1025882695", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1042348951", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1050150347", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1110510902", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1064718099", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1037912856", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1107586783", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1112085796", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1009235779", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1100639791", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1083908211", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1028974017", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1124288141", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1032191939", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1042700127", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1130512107", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1124282631", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1129497800", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1124279796", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1014738746", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1099492343", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1101303008", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1031558328", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1052825223", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1052415395", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1032520587", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1083916778", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1032371564", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1122325358", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1047813258", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1061936767", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1026085167", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1007733558", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1132583197", + "target": "pub.1124283317", + "attributes": { + "year": 2020, + "level": "ref_l1" + } + }, + { + "source": "pub.1144653732", + "target": "pub.1132583197", + "attributes": { + "year": 2021, + "level": "cite_l1" + } + }, + { + "source": "pub.1143646657", + "target": "pub.1132583197", + "attributes": { + "year": 2021, + "level": "cite_l1" + } + }, + { + "source": "pub.1140975203", + "target": "pub.1132583197", + "attributes": { + "year": 2021, + "level": "cite_l1" + } + }, + { + "source": "pub.1140004048", + "target": "pub.1132583197", + "attributes": { + "year": 2021, + "level": "cite_l1" + } + }, + { + "source": "pub.1136412272", + "target": "pub.1132583197", + "attributes": { + "year": 2021, + "level": "cite_l1" + } + }, + { + "source": "pub.1144045349", + "target": "pub.1140004048", + "attributes": { + "year": 2021, + "level": "cite_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1062950852", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1046491641", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1100557630", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1012949382", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1107264104", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1100902684", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1123982241", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1026347712", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1033755585", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1120935852", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1008813098", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1107093993", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1051806676", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1022243193", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1037919082", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1051365551", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1093625895", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1103337729", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1019671707", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1005040776", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1032233097", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1004257385", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1021313915", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1093406535", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1026974855", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1085179433", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1029804823", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1099151330", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1061157130", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1052013786", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1094758581", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1036446674", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1100060663", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1002371134", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1093818236", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1004012132", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1124284322", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1093993805", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1103390011", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1100687299", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1038617092", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1014796149", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1112676463", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1032139988", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1094359705", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1086033332", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1094012327", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1092345755", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1090904008", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1110769813", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1009039767", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1130512107", + "target": "pub.1030365672", + "attributes": { + "year": 2022, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1014738746", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1028625291", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1110929190", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1085347349", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1110510905", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1021315020", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1037676611", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1022341282", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1001497369", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1022993100", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1041002791", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1007733558", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1110786519", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1017878371", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1064732388", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1095932354", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1110510902", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1017567011", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1040812154", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1018963191", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1121796142", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1038472984", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1030950757", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1117495993", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1051329197", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1032371564", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1009235779", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1092413494", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1100639791", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1031702550", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1032128591", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1038356487", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1033238539", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1027063478", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1072898982", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1122369286", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1008919445", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1033627077", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1129497800", + "target": "pub.1012196654", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1077659329", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1051528439", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1018642070", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1031052761", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1083883842", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1058855888", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1131988437", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1058652299", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1058646655", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1034267633", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1071781587", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1083908211", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1100543463", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1088820086", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1092871264", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1045165578", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1090393495", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1086129753", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1100543464", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1098574658", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1014558653", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1084267434", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1001033517", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124288141", + "target": "pub.1099546324", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1124854420", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1114191903", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1000095221", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1019640529", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1129946281", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1031346728", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1053783783", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1030536399", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1018642070", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1109723985", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1028634645", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1053887843", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1099515543", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1003685519", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1069593845", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1031052761", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1071848004", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1058644506", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1098760953", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1036803595", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1088125888", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1086642126", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1046954333", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1040134639", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1051786609", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1021027138", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1071290041", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1016646093", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1058663219", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1060036323", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1020223525", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1017731775", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1071292470", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1070653315", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1051365976", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1053961832", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1089071555", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1063712120", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1083908211", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1070121193", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1034715224", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1047480177", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1053982450", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1067402765", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1022110011", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1046338606", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1053809075", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1060036401", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1130196027", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1052536328", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1014657651", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1003840934", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1015924662", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1124853460", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1032914843", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1099569448", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1058855888", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1063611925", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1099425572", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1035390411", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1058645620", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1039165521", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1099546324", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1042569856", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1063612266", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1024101260", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1002280443", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1027036557", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1083871068", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1037350902", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1058646700", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1046011858", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1037102122", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1051417928", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124282631", + "target": "pub.1029694435", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124279796", + "target": "pub.1053425592", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124279796", + "target": "pub.1058645878", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124279796", + "target": "pub.1099276685", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124279796", + "target": "pub.1016646093", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124279796", + "target": "pub.1065027456", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124279796", + "target": "pub.1108571431", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124279796", + "target": "pub.1033827372", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124279796", + "target": "pub.1051859332", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124279796", + "target": "pub.1083908211", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124279796", + "target": "pub.1054061384", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124279796", + "target": "pub.1098665613", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1124279796", + "target": "pub.1004380398", + "attributes": { + "year": 2020, + "level": "ref_l2" + } + }, + { + "source": "pub.1122325358", + "target": "pub.1011912474", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1122325358", + "target": "pub.1092056081", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1122325358", + "target": "pub.1084954466", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1122325358", + "target": "pub.1014058264", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1122325358", + "target": "pub.1024224648", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1122325358", + "target": "pub.1028974017", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1122325358", + "target": "pub.1002371049", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1122325358", + "target": "pub.1010701585", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1122325358", + "target": "pub.1022069897", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1122325358", + "target": "pub.1101303008", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1122325358", + "target": "pub.1077378664", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1122325358", + "target": "pub.1014515383", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1122325358", + "target": "pub.1010960795", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1053297592", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1028974017", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1026964750", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1049621455", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1013258797", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1062457136", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1042700127", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1032302470", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1052156308", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1064718099", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1014163259", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1064733117", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1099051680", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1047813258", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1062451305", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1062457759", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1025330072", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1002163644", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1060812205", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1062455003", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1050153243", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1060796158", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1032339462", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1050150347", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1064711890", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1071058552", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1025771352", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1101503768", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1058644692", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1018284603", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1112085796", + "target": "pub.1061936767", + "attributes": { + "year": 2019, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1069752996", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1016818672", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1007733558", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1042700127", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1052156308", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1072898924", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1011485598", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1053599210", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1092249264", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1062455003", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1000812655", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1018284603", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1011815255", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1011100472", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1015745666", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1044965176", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1016589295", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1083524092", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1014325139", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1062457759", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1030475861", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1052550373", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1050177553", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1016681311", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1028813338", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1110510902", + "target": "pub.1062451305", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1058867006", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1121359531", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1053783783", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1100543462", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1025428724", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1089402427", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1099107727", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1099559527", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1016646093", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1024887047", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1104273031", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1089071555", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1053961832", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1108133089", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1083908211", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1108316727", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1099571646", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1070113220", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1051048960", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1053806824", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1053425592", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1102786891", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1019627387", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1030554540", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1034176624", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1044547618", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1003292963", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1017131526", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1107891239", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1063612266", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1037318791", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1104408670", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1098658922", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1022410298", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1107586783", + "target": "pub.1021078215", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1003894420", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1062505982", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1064088346", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1018678974", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1063353038", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1015159737", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1037877143", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1092019455", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1013538688", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1051718960", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1042390054", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1052550373", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1062896024", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1010025359", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1027978515", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1040086172", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1099276679", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1040561904", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1048450235", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1062485810", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1051090043", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1050277929", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1035745122", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1052415395", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1032191939", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1011044022", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1062670916", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1038956878", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1018284603", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1001219927", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1028974017", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1036315377", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1032371564", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1018280471", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1067702094", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1044774811", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1019790832", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1001115574", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1062451305", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1045702476", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1011358037", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1050917859", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1031702550", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1041015426", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1061936767", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1062459009", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1047255200", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1062464435", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1036062611", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1026242168", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1019091582", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1002371049", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1042797803", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1063830967", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1002778616", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1071055079", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1092034214", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1083524092", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1084844428", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1041433584", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1008480908", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1046537509", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1030521868", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1050929337", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1062455003", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1062493069", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1064718020", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1014837024", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1042700127", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1043175895", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1000512935", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1111930785", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1047813258", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1018760370", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1053492877", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1081235332", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1062466125", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1004751787", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1011947705", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1022341282", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1010080128", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1009142935", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1014325139", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1021480095", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1011155727", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1042019617", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1023367925", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1007817525", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1062445713", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1044965176", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1113782032", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1038095316", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1071055078", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1008255365", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1006210257", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1084130197", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1035836589", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1016907387", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1028625291", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1101303008", + "target": "pub.1042909490", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1114190635", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1026910151", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1011197521", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1060726536", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1085347349", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1039712226", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1024918334", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1037642735", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1028804384", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1000880408", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1047671175", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1084130197", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1018954112", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1027383146", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1027740372", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1090602399", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1003260691", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1047548764", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1098667199", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1038660045", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1095932354", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1053509024", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1019549988", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1091623705", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1006977567", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1062998631", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1048086688", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1040647708", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1017569886", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1037206045", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1083523048", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1030950757", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1035132648", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1044965176", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1010080128", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1012497879", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1016149371", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1008594690", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1008255365", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1085929133", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1052927616", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1062877811", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1093156821", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1044805869", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1091415811", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1026242168", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1026299011", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1049830207", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1028827814", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1017820033", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1035672046", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1084164696", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1045381538", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1038563506", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1100639791", + "target": "pub.1004420298", + "attributes": { + "year": 2018, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1021793668", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1058862808", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1022178974", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1041814201", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1069908269", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1062455003", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1072895578", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1058907756", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1026143960", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1041900902", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1006125808", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1069639422", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1064722177", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1048538314", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1025164378", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1059654994", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1049575016", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1039999964", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1099567238", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1069991553", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1025146728", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1069758605", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1054189610", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1035913093", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1064715095", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1019349719", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1058676367", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1050153243", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1019277068", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1064732148", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1096908953", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1059655313", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1022100142", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1043494594", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1005054355", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1103086411", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1039979623", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1069991286", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1024198006", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1032170849", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1058712288", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1087285553", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1064732744", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1059654630", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1064722339", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1012452641", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1010231923", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1031907170", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1069909139", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1062998335", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1098679021", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1054549387", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1002950338", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1045354113", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1069268616", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1099276679", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1018809412", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1072900634", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1064722053", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1022813968", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1064715050", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1031420226", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1044028183", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1034086293", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1004145290", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1087285507", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1031817076", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1018328989", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1064718099", + "target": "pub.1028279784", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1040134639", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1058546205", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1019322693", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1109345579", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1090002450", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1089071555", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1098756997", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1030011839", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1058643636", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1044890497", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1042569856", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1054881812", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1058544967", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1051013912", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1058855888", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1007679766", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1053961832", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1028415806", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1015196947", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1053783783", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1083908211", + "target": "pub.1102508289", + "attributes": { + "year": 2017, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1044960059", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1043190344", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1036654086", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1074290105", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1045062320", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1038777032", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1026168240", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1032904756", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1001008739", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1052431272", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1053455936", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1095753288", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1051718960", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1026071205", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1069991286", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1019917231", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1032640846", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1035018770", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1069417824", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1053279052", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1029063514", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1001489329", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1007858140", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1042336937", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1023307789", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1064711642", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1046842923", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1068771247", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1041704401", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1041770955", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1003800792", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1031642651", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1064732109", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1052547671", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1058544432", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1047473629", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1032022529", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1013108089", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1015730298", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1016678991", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1032833243", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1053001983", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1044547381", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1040334453", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1047080139", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1018516004", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1039052181", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1071058538", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1069768905", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1037202380", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1007657148", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1018592659", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1028284674", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1021711131", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1071880179", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1069991591", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1056448344", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1032170849", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1058573579", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1028639808", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1028417932", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1069908882", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1035251739", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1014381762", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1002977218", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1013505792", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1026479190", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1026812745", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1064712648", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1068746655", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1020370058", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1000522908", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1042715776", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1059823230", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1020857032", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1074296421", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1052092175", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1003981756", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1005138621", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1018605363", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1016099829", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1005236943", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1038422476", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1007713573", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1011305610", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1040645148", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1040229870", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1032191939", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1003730812", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1064721502", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1074308586", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1019884771", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1093561777", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1048745116", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1043494594", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1068771241", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1022153657", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1050008141", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1047813258", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1014180068", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1013916375", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1019613081", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1074297289", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1042348951", + "target": "pub.1062476339", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1009235779", + "target": "pub.1041242759", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1009235779", + "target": "pub.1099475841", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1009235779", + "target": "pub.1070145900", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1009235779", + "target": "pub.1062455003", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1009235779", + "target": "pub.1058575206", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1009235779", + "target": "pub.1034891992", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1009235779", + "target": "pub.1069908817", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1009235779", + "target": "pub.1009439765", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1009235779", + "target": "pub.1059983449", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1009235779", + "target": "pub.1058853568", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1009235779", + "target": "pub.1064722053", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1009235779", + "target": "pub.1041991056", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1009235779", + "target": "pub.1025149202", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1009235779", + "target": "pub.1064525545", + "attributes": { + "year": 2016, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1037671103", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1037677363", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1040305925", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1028974017", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1059192717", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1042700127", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1020080878", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1037676611", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1038762424", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1099492343", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1020482279", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1017315055", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1098876354", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1032520587", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1032371564", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1044845556", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1014325139", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1062455003", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1046310592", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1007733558", + "target": "pub.1018832857", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1048382490", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1029598799", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1046077722", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1060457657", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1062505982", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1032191939", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1007500896", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1038956878", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1062457759", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1040812154", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1060462449", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1024741540", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1018284603", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1002600046", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1041136418", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1028974017", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1045491249", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1022275528", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1008480908", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1020080878", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1018388918", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1006977567", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1003981756", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1062455003", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1062851851", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1039913638", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1052550373", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1050793825", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1060732180", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1042700127", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1045576367", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1016108444", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1060799027", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1062466125", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1060589141", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1062451305", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1034971106", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1050917859", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1060456122", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1049986679", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1062778767", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1008594690", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1058909178", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1021133597", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1027367808", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1035836589", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1074546091", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1018411012", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1036357394", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1047813258", + "target": "pub.1010080128", + "attributes": { + "year": 2015, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1051171362", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1000778894", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1016033709", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1046994350", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1004481822", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1030436057", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1053181888", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1032192979", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1017758621", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1061389737", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1048457283", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1034924664", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1041136418", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1009790299", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1024960131", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1023587035", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1018231980", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1020068263", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1010299182", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1008765199", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1011035454", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1011774638", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1035913093", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1006977567", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1038990326", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1010370510", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1021906753", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1008993696", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1011850909", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1021424991", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1062461188", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1048235090", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1030374839", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1051569339", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1042941276", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1010954918", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1044882727", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1051510804", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1006049477", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1037883313", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1047695691", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1026186841", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1046844327", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1062555144", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1027511483", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1016710118", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1026919963", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1007734343", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1022949845", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1017228923", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1016416471", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1024622397", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1034966535", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1007522887", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1053516074", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1033711124", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1062459206", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1004953014", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1036760492", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1048392439", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1007014462", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1020482279", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1059204918", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1018743536", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1031558328", + "target": "pub.1032858629", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1020100757", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1049986679", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1019055366", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1016073101", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1019091582", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1042700127", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1018869280", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1005783907", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1050917859", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1062485810", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1062504834", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1062451305", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1052550373", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1023521682", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1062464435", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1036242867", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1034884073", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1039770910", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1027063478", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1050077381", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1062493069", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1036075467", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1041161194", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1052415395", + "target": "pub.1018284603", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1005831504", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1008031163", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1035836589", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1031702550", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1062457759", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1107169203", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1005764181", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1011358037", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1042700127", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1050077381", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1015745666", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1051090043", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1022499367", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1041015426", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1019055366", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1000880408", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1008729064", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1041991056", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1107183884", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1052550373", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1050917859", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1012923141", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1062566326", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1000915598", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1018922144", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1034823586", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1037119647", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1032371564", + "target": "pub.1018062648", + "attributes": { + "year": 2014, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1054052987", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1063349087", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1062457759", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1015159737", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1064220835", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1069908813", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1064732764", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1064722053", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1014058264", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1026963668", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1062455003", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1025562430", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1050427291", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1008897798", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1062451305", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1017241501", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1061936767", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1058717761", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1040561904", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1071058552", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1062464435", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1028974017", + "target": "pub.1032052300", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1014849114", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1059416714", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1064236053", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1035083642", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1042976587", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1041564449", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1059416495", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1023521682", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1060825768", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1062457759", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1069660739", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1099492343", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1010080128", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1007643971", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1062457502", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1021348797", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1020080878", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1098746504", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1064714328", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1002847928", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1015745666", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1110456918", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1052550373", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1059415900", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1076914346", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1025386231", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1000512935", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1053492877", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1022830687", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1034971106", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1050917859", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1027884231", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1062778767", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1040206550", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1040561904", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1060760356", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1069417732", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1062464435", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1062485810", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1008729064", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1042700127", + "target": "pub.1020100757", + "attributes": { + "year": 2013, + "level": "ref_l2" + } + }, + { + "source": "pub.1032520587", + "target": "pub.1018922144", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1032520587", + "target": "pub.1009550067", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1032520587", + "target": "pub.1048235090", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1032520587", + "target": "pub.1025075085", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1032520587", + "target": "pub.1041985305", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1032520587", + "target": "pub.1010080128", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1032520587", + "target": "pub.1049169684", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1032520587", + "target": "pub.1017006771", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1032520587", + "target": "pub.1008594690", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1032520587", + "target": "pub.1098762313", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1032520587", + "target": "pub.1032155732", + "attributes": { + "year": 2011, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1045202955", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1060683104", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1060783699", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1002733277", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1018411012", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1028061681", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1006270814", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1016125157", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1060457657", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1025882695", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1005495710", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1006641713", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1021120999", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1020080878", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1048148225", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1051569339", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1060800703", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1048268212", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1060527055", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1017878564", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1007257290", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1061106525", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1098905044", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1016416471", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1060431417", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1060429813", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1052825223", + "target": "pub.1058545639", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1036300352", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1070371758", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1063984691", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1102515140", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1069908817", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1011394540", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1049602286", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1064720176", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1009367151", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1027962452", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1063168728", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1010283181", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1002546237", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1030549695", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1013746891", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1001014997", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1098665419", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1010594228", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1005545598", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1072898982", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1020887214", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1064722345", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1014738746", + "target": "pub.1016907394", + "attributes": { + "year": 2010, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1060816597", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1026212635", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1062541665", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1020100757", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1021206245", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1005762740", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1011354825", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1038956878", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1062516197", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1036565460", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1062529255", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1024151247", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1062485810", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1112028538", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1040966326", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1008031163", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1017878304", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1025484712", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1003168943", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1051426052", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1052550373", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1019535441", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1063751106", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1036031411", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1019328864", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1000572480", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1059189256", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1038279684", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1038097739", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1062541658", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1032914131", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1009909155", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1011260290", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1050470361", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1008640122", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1009045204", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1008704833", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1023957930", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1059138571", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1026085167", + "target": "pub.1001373561", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1061936767", + "target": "pub.1058574778", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1061936767", + "target": "pub.1064531008", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1061936767", + "target": "pub.1062455003", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1061936767", + "target": "pub.1058563483", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1061936767", + "target": "pub.1058572772", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1061936767", + "target": "pub.1070145900", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1061936767", + "target": "pub.1063349087", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1061936767", + "target": "pub.1014496650", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1061936767", + "target": "pub.1069768950", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1061936767", + "target": "pub.1069991553", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1061936767", + "target": "pub.1058575483", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1061936767", + "target": "pub.1069804321", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1061936767", + "target": "pub.1109705182", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1061936767", + "target": "pub.1069768858", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1061936767", + "target": "pub.1058575206", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1061936767", + "target": "pub.1013510628", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1061936767", + "target": "pub.1045680174", + "attributes": { + "year": 2009, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1006611388", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1025075085", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1033900087", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1035552384", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1018411012", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1028061681", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1016125157", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1009550067", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1004043513", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1029327122", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1005495710", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1022606943", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1000918009", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1021120999", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1032155732", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1046540633", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1044283004", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1048148225", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1027402365", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1058909178", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1026427976", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1008594690", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1024174439", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1017878564", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1039022482", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1008815705", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1073626410", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1037912856", + "target": "pub.1010025359", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025882695", + "target": "pub.1006611388", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025882695", + "target": "pub.1015188349", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025882695", + "target": "pub.1048148225", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025882695", + "target": "pub.1039022482", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025882695", + "target": "pub.1008670010", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025882695", + "target": "pub.1008594690", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025882695", + "target": "pub.1036285600", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025882695", + "target": "pub.1006029486", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025882695", + "target": "pub.1024193401", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025882695", + "target": "pub.1027538273", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025882695", + "target": "pub.1017878564", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025882695", + "target": "pub.1046540633", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025882695", + "target": "pub.1062877811", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1025882695", + "target": "pub.1016125157", + "attributes": { + "year": 2008, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1020281833", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1058638027", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1004784081", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1052104890", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1051398714", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1058548165", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1098708862", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1018280471", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1020106812", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1069649889", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1058547922", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1069755230", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1058639117", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1058639730", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1070193505", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1058529538", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1070047166", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1069758065", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1058529816", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1041985305", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1027854203", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1058548129", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1069757087", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1053188247", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1070047165", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1018308432", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1010080128", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1064529790", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1069758066", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1069757767", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1001223577", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1053745120", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1070194658", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1070193518", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1058575613", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1010672104", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1050150347", + "target": "pub.1062493069", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1032191939", + "target": "pub.1011037134", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1032191939", + "target": "pub.1099481474", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + }, + { + "source": "pub.1032191939", + "target": "pub.1004457397", + "attributes": { + "year": 2004, + "level": "ref_l2" + } + } + ] +} \ No newline at end of file diff --git a/src/citationnet/static/autocomplete.css b/src/citationnet/static/autocomplete.css new file mode 100644 index 0000000..4ef8add --- /dev/null +++ b/src/citationnet/static/autocomplete.css @@ -0,0 +1,49 @@ +* { box-sizing: border-box; } +body { + font: 16px Arial; +} +.autocomplete { + /*the container must be positioned relative:*/ + position: relative; + display: inline-block; +} +input { + border: 1px solid transparent; + background-color: #f1f1f1; + padding: 10px; + font-size: 16px; +} +input[type=text] { + background-color: #f1f1f1; + width: 100%; +} +input[type=submit] { + background-color: DodgerBlue; + color: #fff; +} +.autocomplete-items { + position: absolute; + border: 1px solid #d4d4d4; + border-bottom: none; + border-top: none; + z-index: 99; + /*position the autocomplete items to be the same width as the container:*/ + top: 100%; + left: 0; + right: 0; +} +.autocomplete-items div { + padding: 10px; + cursor: pointer; + background-color: #fff; + border-bottom: 1px solid #d4d4d4; +} +.autocomplete-items div:hover { + /*when hovering an item:*/ + background-color: #e9e9e9; +} +.autocomplete-active { + /*when navigating through the items using the arrow keys:*/ + background-color: DodgerBlue !important; + color: #ffffff; +} diff --git a/src/citationnet/static/autocomplete.js b/src/citationnet/static/autocomplete.js new file mode 100644 index 0000000..126e870 --- /dev/null +++ b/src/citationnet/static/autocomplete.js @@ -0,0 +1,96 @@ +function autocomplete(inp, arr) { + /*the autocomplete function takes two arguments, + the text field element and an array of possible autocompleted values:*/ + var currentFocus; + /*execute a function when someone writes in the text field:*/ + inp.addEventListener("input", function(e) { + var a, b, i, val = this.value; + /*close any already open lists of autocompleted values*/ + closeAllLists(); + if (!val) { return false;} + currentFocus = -1; + /*create a DIV element that will contain the items (values):*/ + a = document.createElement("DIV"); + a.setAttribute("id", this.id + "autocomplete-list"); + a.setAttribute("class", "autocomplete-items"); + /*append the DIV element as a child of the autocomplete container:*/ + this.parentNode.appendChild(a); + /*for each item in the array...*/ + for (i = 0; i < arr.length; i++) { + /*check if the item starts with the same letters as the text field value:*/ + if (arr[i].substr(0, val.length).toUpperCase() == val.toUpperCase()) { + /*create a DIV element for each matching element:*/ + b = document.createElement("DIV"); + /*make the matching letters bold:*/ + b.innerHTML = "" + arr[i].substr(0, val.length) + ""; + b.innerHTML += arr[i].substr(val.length); + /*insert a input field that will hold the current array item's value:*/ + b.innerHTML += ""; + /*execute a function when someone clicks on the item value (DIV element):*/ + b.addEventListener("click", function(e) { + /*insert the value for the autocomplete text field:*/ + inp.value = this.getElementsByTagName("input")[0].value; + /*close the list of autocompleted values, + (or any other open lists of autocompleted values:*/ + closeAllLists(); + }); + a.appendChild(b); + } + } + }); + /*execute a function presses a key on the keyboard:*/ + inp.addEventListener("keydown", function(e) { + var x = document.getElementById(this.id + "autocomplete-list"); + if (x) x = x.getElementsByTagName("div"); + if (e.keyCode == 40) { + /*If the arrow DOWN key is pressed, + increase the currentFocus variable:*/ + currentFocus++; + /*and and make the current item more visible:*/ + addActive(x); + } else if (e.keyCode == 38) { //up + /*If the arrow UP key is pressed, + decrease the currentFocus variable:*/ + currentFocus--; + /*and and make the current item more visible:*/ + addActive(x); + } else if (e.keyCode == 13) { + /*If the ENTER key is pressed, prevent the form from being submitted,*/ + e.preventDefault(); + if (currentFocus > -1) { + /*and simulate a click on the "active" item:*/ + if (x) x[currentFocus].click(); + } + } + }); + function addActive(x) { + /*a function to classify an item as "active":*/ + if (!x) return false; + /*start by removing the "active" class on all items:*/ + removeActive(x); + if (currentFocus >= x.length) currentFocus = 0; + if (currentFocus < 0) currentFocus = (x.length - 1); + /*add class "autocomplete-active":*/ + x[currentFocus].classList.add("autocomplete-active"); + } + function removeActive(x) { + /*a function to remove the "active" class from all autocomplete items:*/ + for (var i = 0; i < x.length; i++) { + x[i].classList.remove("autocomplete-active"); + } + } + function closeAllLists(elmnt) { + /*close all autocomplete lists in the document, + except the one passed as an argument:*/ + var x = document.getElementsByClassName("autocomplete-items"); + for (var i = 0; i < x.length; i++) { + if (elmnt != x[i] && elmnt != inp) { + x[i].parentNode.removeChild(x[i]); + } + } +} +/*execute a function when someone clicks in the document:*/ +document.addEventListener("click", function (e) { + closeAllLists(e.target); +}); +} diff --git a/src/citationnet/templates/base.html b/src/citationnet/templates/base.html index ab66655..d9a8cb1 100644 --- a/src/citationnet/templates/base.html +++ b/src/citationnet/templates/base.html @@ -1,17 +1,31 @@ - + - {% block head %} - - {% block title %}{% endblock %} - CitationNet - {% endblock %} + + + + + + + + CitationNet -
{% block content %}{% endblock %}
-